ZGlmZiAtLWdpdCBhL0FCT1VULU5MUyBiL0FCT1VULU5MUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiYzcyZS4uMDAwMDAwMAotLS0gYS9BQk9VVC1OTFMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDY4ICswLDAgQEAKLTEgTm90ZXMgb24gdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKLWEgd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAotdG9nZXRoZXIsIHNvIHRoYXQgZnJlZSBzb2Z0d2FyZSB3aWxsIGdyYWR1YWxseSBiZWNvbWUgYWJsZSB0byBzcGVhayBtYW55Ci1sYW5ndWFnZXMuICBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpcgotbWVzc2FnZXMuCi0KLSAgIElmIHlvdSBmb3VuZCB0aGlzIGBBQk9VVC1OTFMnIGZpbGUgaW5zaWRlIGEgZGlzdHJpYnV0aW9uLCB5b3UgbWF5Ci1hc3N1bWUgdGhhdCB0aGUgZGlzdHJpYnV0ZWQgcGFja2FnZSBkb2VzIHVzZSBHTlUgYGdldHRleHQnIGludGVybmFsbHksCi1pdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyBfbm90XwotbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKLXRoaXMgcGFja2FnZSB3aXRoIG1lc3NhZ2VzIHRyYW5zbGF0ZWQuCi0KLSAgIEluc3RhbGxlcnMgd2lsbCBmaW5kIGhlcmUgc29tZSB1c2VmdWwgaGludHMuICBUaGVzZSBub3RlcyBhbHNvCi1leHBsYWluIGhvdyB1c2VycyBzaG91bGQgcHJvY2VlZCBmb3IgZ2V0dGluZyB0aGUgcHJvZ3JhbXMgdG8gdXNlIHRoZQotYXZhaWxhYmxlIHRyYW5zbGF0aW9ucy4gIFRoZXkgdGVsbCBob3cgcGVvcGxlIHdhbnRpbmcgdG8gY29udHJpYnV0ZSBhbmQKLXdvcmsgb24gdHJhbnNsYXRpb25zIGNhbiBjb250YWN0IHRoZSBhcHByb3ByaWF0ZSB0ZWFtLgotCi0gICBXaGVuIHJlcG9ydGluZyBidWdzIGluIHRoZSBgaW50bC8nIGRpcmVjdG9yeSBvciBidWdzIHdoaWNoIG1heSBiZQotcmVsYXRlZCB0byBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91IHNob3VsZCB0ZWxsIGFib3V0IHRoZSB2ZXJzaW9uIG9mCi1gZ2V0dGV4dCcgd2hpY2ggaXMgdXNlZC4gIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlCi1gaW50bC9WRVJTSU9OJyBmaWxlLCBpbiBpbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcy4KLQotMS4xIFF1aWNrIGNvbmZpZ3VyYXRpb24gYWR2aWNlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91Ci1zaG91bGQgY29uZmlndXJlIGl0IHVzaW5nCi0KLSAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKLQotdG8gZm9yY2UgdXNhZ2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzCi1wYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKLW9wZXJhdGluZyBzeXN0ZW0gd2hlcmUgdGhpcyBwYWNrYWdlIGlzIGJlaW5nIGluc3RhbGxlZC4gIFNvIGZhciwgb25seQotdGhlIGBnZXR0ZXh0JyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgR05VIEMgbGlicmFyeSB2ZXJzaW9uIDIgcHJvdmlkZXMgYXMKLW1hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzLCBtZXNzYWdlIGluaGVyaXRhbmNlLCBhdXRvbWF0aWMKLWNoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCi1JdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvbiB0b3AKLW9mIGEgYGNhdGdldHMnIGltcGxlbWVudGF0aW9uLiAgRnV0dXJlIHZlcnNpb25zIG9mIEdOVSBgZ2V0dGV4dCcgd2lsbAotdmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKLXRvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCi0KLSAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCi15b3UgaGF2ZSBpbnN0YWxsZWQgYSByZWNlbnQgY29weSBvZiB0aGUgR05VIGdldHRleHQgcGFja2FnZSB3aXRoIHRoZQotaW5jbHVkZWQgYGxpYmludGwnLgotCi0xLjIgSU5TVEFMTCBNYXR0ZXJzCi09PT09PT09PT09PT09PT09PT09Ci0KLVNvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcwotdGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4gIE1vc3Qgc3VjaAotcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93biB3YXlzIHRvCi1pbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCi0KLSAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFja2FnZSB3aWxsIGJlIGluc3RhbGxlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZgotbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5Ci1wcm92aWRlcyB0aGUgR05VIGBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJZiBub3QsIHRoZSBpbmNsdWRlZCBHTlUKLWBnZXR0ZXh0JyBsaWJyYXJ5IHdpbGwgYmUgdXNlZC4gIFRoaXMgbGlicmFyeSBpcyB3aG9sbHkgY29udGFpbmVkCi13aXRoaW4gdGhpcyBwYWNrYWdlLCB1c3VhbGx5IGluIHRoZSBgaW50bC8nIHN1YmRpcmVjdG9yeSwgc28gcHJpb3IKLWluc3RhbGxhdGlvbiBvZiB0aGUgR05VIGBnZXR0ZXh0JyBwYWNrYWdlIGlzIF9ub3RfIHJlcXVpcmVkLgotSW5zdGFsbGVycyBtYXkgdXNlIHNwZWNpYWwgb3B0aW9ucyBhdCBjb25maWd1cmF0aW9uIHRpbWUgZm9yIGNoYW5naW5nCi10aGUgZGVmYXVsdCBiZWhhdmlvdXIuICBUaGUgY29tbWFuZHM6Ci0KLSAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKLSAgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scwotCi13aWxsLCByZXNwZWN0aXZlbHksIGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBnZXR0ZXh0JyB0byB1c2UgdGhlCi1pbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgb3IgZWxzZSwKLV90b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgotCi0gICBXaGVuIHlvdSBhbHJlYWR5IGhhdmUgR05VIGBnZXR0ZXh0JyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHJ1bgotY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCi1wcm9iYWJseSBkZXRlY3QgdGhlIHByZXZpb3VzbHkgYnVpbHQgYW5kIGluc3RhbGxlZCBgbGliaW50bC5hJyBmaWxlIGFuZAotd2lsbCBkZWNpZGUgdG8gdXNlIHRoaXMuICBUaGlzIG1pZ2h0IG5vdCBiZSBkZXNpcmFibGUuICBZb3Ugc2hvdWxkIHVzZQotdGhlIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4gIEkuZS4gaWYgdGhlIGZpbGUKLWBpbnRsL1ZFUlNJT04nIHNob3dzIHRoYXQgdGhlIGxpYnJhcnkgd2hpY2ggY29tZXMgd2l0aCB0aGlzIHBhY2thZ2UgaXMKLW1vcmUgcmVjZW50LCB5b3Ugc2hvdWxkIHVzZQotCi0gICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0Ci0KLXRvIHByZXZlbnQgYXV0by1kZXRlY3Rpb24uCi0KLSAgIFRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbgotYW5kIHRoZXJlZm9yZSBpdCB3aWxsIG5vdCBiZSB1c2VkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGV2ZW4gYW4KLWVtdWxhdGlvbiBvZiBgZ2V0dGV4dCcgb24gdG9wIG9mIGBjYXRnZXRzJyBjb3VsZCBub3QgcHJvdmlkZSBhbGwgdGhlCi1leHRlbnNpb25zIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuCi0KLSAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIHVzdWFsbHkgaGF2ZSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCi1MTCBnaXZlcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgY29kZSBpZGVudGlmeWluZyB0aGUgbGFuZ3VhZ2UuICBVbmxlc3MKLXRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gZm9yYmlkZGVuIGF0IGBjb25maWd1cmUnIHRpbWUgYnkgdXNpbmcgdGhlCi1gLS1kaXNhYmxlLW5scycgc3dpdGNoLCBhbGwgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBhcmUgaW5zdGFsbGVkCi10b2dldGhlciB3aXRoIHRoZSBwYWNrYWdlLiAgSG93ZXZlciwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBMSU5HVUFTJwotbWF5IGJlIHNldCwgcHJpb3IgdG8gY29uZmlndXJhdGlvbiwgdG8gbGltaXQgdGhlIGluc3RhbGxlZCBzZXQuCi1gTElOR1VBUycgc2hvdWxkIHRoZW4gY29udGFpbiBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHR3by1sZXR0ZXIKLWNvZGVzLCBzdGF0aW5nIHdoaWNoIGxhbmd1YWdlcyBhcmUgYWxsb3dlZC4KLQotMS4zIFVzaW5nIFRoaXMgUGFja2FnZQotPT09PT09PT09PT09PT09PT09PT09PQotCi1BcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQotb25seSBoYXZlIHRvIHNldCB0aGUgYExBTkcnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZQotYExMX0NDJyBjb21iaW5hdGlvbi4gIElmIHlvdSBoYXBwZW4gdG8gaGF2ZSB0aGUgYExDX0FMTCcgb3Igc29tZSBvdGhlcgotYExDX3h4eCcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCwgeW91IHNob3VsZCB1bnNldCB0aGVtIGJlZm9yZQotc2V0dGluZyBgTEFORycsIG90aGVyd2lzZSB0aGUgc2V0dGluZyBvZiBgTEFORycgd2lsbCBub3QgaGF2ZSB0aGUKLWRlc2lyZWQgZWZmZWN0LiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLCBhbmQKLWBDQycgaXMgYW4gSVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUuICBGb3IgZXhhbXBsZSwgbGV0J3MKLXN1cHBvc2UgdGhhdCB5b3Ugc3BlYWsgR2VybWFuIGFuZCBsaXZlIGluIEdlcm1hbnkuICBBdCB0aGUgc2hlbGwKLXByb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAotYGV4cG9ydCBMQU5HOyBMQU5HPWRlX0RFJyAoaW4gYHNoJykgb3IgYGV4cG9ydCBMQU5HPWRlX0RFJyAoaW4gYGJhc2gnKS4KLVRoaXMgY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yCi1hbGwuCi0KLSAgIFlvdSBtaWdodCB0aGluayB0aGF0IHRoZSBjb3VudHJ5IGNvZGUgc3BlY2lmaWNhdGlvbiBpcyByZWR1bmRhbnQuCi1CdXQgaW4gZmFjdCwgc29tZSBsYW5ndWFnZXMgaGF2ZSBkaWFsZWN0cyBpbiBkaWZmZXJlbnQgY291bnRyaWVzLiAgRm9yCi1leGFtcGxlLCBgZGVfQVQnIGlzIHVzZWQgZm9yIEF1c3RyaWEsIGFuZCBgcHRfQlInIGZvciBCcmF6aWwuICBUaGUKLWNvdW50cnkgY29kZSBzZXJ2ZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpYWxlY3RzLgotCi0gICBUaGUgbG9jYWxlIG5hbWluZyBjb252ZW50aW9uIG9mIGBMTF9DQycsIHdpdGggYExMJyBkZW5vdGluZyB0aGUKLWxhbmd1YWdlIGFuZCBgQ0MnIGRlbm90aW5nIHRoZSBjb3VudHJ5LCBpcyB0aGUgb25lIHVzZSBvbiBzeXN0ZW1zIGJhc2VkCi1vbiBHTlUgbGliYy4gIE9uIG90aGVyIHN5c3RlbXMsIHNvbWUgdmFyaWF0aW9ucyBvZiB0aGlzIHNjaGVtZSBhcmUKLXVzZWQsIHN1Y2ggYXMgYExMJyBvciBgTExfQ0MuRU5DT0RJTkcnLiAgWW91IGNhbiBnZXQgdGhlIGxpc3Qgb2YKLWxvY2FsZXMgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtIGZvciB5b3VyIGxhbmd1YWdlIGJ5IHJ1bm5pbmcgdGhlCi1jb21tYW5kIGBsb2NhbGUgLWEgfCBncmVwICdeTEwnJy4KLQotICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCi1FbmdsaXNoIG1lc3NhZ2UgaXMgc2hvd24gaW4gcGxhY2Ugb2YgYSBub25leGlzdGVudCB0cmFuc2xhdGlvbi4gIElmIHlvdQotdW5kZXJzdGFuZCBvdGhlciBsYW5ndWFnZXMsIHlvdSBjYW4gc2V0IHVwIGEgcHJpb3JpdHkgbGlzdCBvZiBsYW5ndWFnZXMuCi1UaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCi1gTEFOR1VBR0UnLiAgR05VIGBnZXR0ZXh0JyBnaXZlcyBwcmVmZXJlbmNlIHRvIGBMQU5HVUFHRScgb3ZlciBgTEFORycKLWZvciB0aGUgcHVycG9zZSBvZiBtZXNzYWdlIGhhbmRsaW5nLCBidXQgeW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBgTEFORycKLXNldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKLXN5c3RlbSBsaWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgc29tZSBTd2VkaXNoIHVzZXJzIHdobyB3b3VsZCByYXRoZXIKLXJlYWQgdHJhbnNsYXRpb25zIGluIEdlcm1hbiB0aGFuIEVuZ2xpc2ggZm9yIHdoZW4gU3dlZGlzaCBpcyBub3QKLWF2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgotCi0gICBTcGVjaWFsIGFkdmljZSBmb3IgTm9yd2VnaWFuIHVzZXJzOiBUaGUgbGFuZ3VhZ2UgY29kZSBmb3IgTm9yd2VnaWFuCi1ib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQotdHJhbnNpdGlvbiBwZXJpb2QsIHdoaWxlIHNvbWUgbWVzc2FnZSBjYXRhbG9ncyBmb3IgdGhpcyBsYW5ndWFnZSBhcmUKLWluc3RhbGxlZCB1bmRlciBgbmInIGFuZCBzb21lIG9sZGVyIG9uZXMgdW5kZXIgYG5vJywgaXQncyByZWNvbW1lbmRlZAotZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKLW9sZGVyIHRyYW5zbGF0aW9ucyBhcmUgdXNlZC4KLQotICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJwotZW52aXJvbm1lbnQgdmFyaWFibGUsIGBMTF9DQycgY29tYmluYXRpb25zIGNhbiBiZSBhYmJyZXZpYXRlZCBhcyBgTEwnCi10byBkZW5vdGUgdGhlIGxhbmd1YWdlJ3MgbWFpbiBkaWFsZWN0LiAgRm9yIGV4YW1wbGUsIGBkZScgaXMgZXF1aXZhbGVudAotdG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJwotKFBvcnR1Z3Vlc2UgYXMgc3Bva2VuIGluIFBvcnR1Z2FsKSBpbiB0aGlzIGNvbnRleHQuCi0KLTEuNCBUcmFuc2xhdGluZyBUZWFtcwotPT09PT09PT09PT09PT09PT09PT09Ci0KLUZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCi1wZW9wbGUgd2hvIGxpa2UgdGhlaXIgb3duIGxhbmd1YWdlIGFuZCB3cml0ZSBpdCB3ZWxsLCBhbmQgd2hvIGFyZSBhbHNvCi1hYmxlIHRvIHN5bmVyZ2l6ZSB3aXRoIG90aGVyIHRyYW5zbGF0b3JzIHNwZWFraW5nIHRoZSBzYW1lIGxhbmd1YWdlLgotRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdC4gIFRoZSB1cC10by1kYXRlIGxpc3Qgb2YKLXRlYW1zIGNhbiBiZSBmb3VuZCBhdCB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0J3MgaG9tZXBhZ2UsCi1gaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvJywgaW4gdGhlICJUZWFtcyIgYXJlYS4KLQotICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gX3dvcmtfIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKLXNob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgotVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKLWAtcmVxdWVzdCcgYXBwZW5kZWQuICBGb3IgZXhhbXBsZSwgc3BlYWtlcnMgb2YgU3dlZGlzaCBjYW4gc2VuZCBhCi1tZXNzYWdlIHRvIGBzdi1yZXF1ZXN0QGxpLm9yZycsIGhhdmluZyB0aGlzIG1lc3NhZ2UgYm9keToKLQotICAgICBzdWJzY3JpYmUKLQotICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQotX2FjdGl2ZWx5XyBpbiB0cmFuc2xhdGlvbnMsIG9yIGF0IHNvbHZpbmcgdHJhbnNsYXRpb25hbCBkaWZmaWN1bHRpZXMsCi1yYXRoZXIgdGhhbiBtZXJlbHkgbHVya2luZyBhcm91bmQuICBJZiB5b3VyIHRlYW0gZG9lcyBub3QgZXhpc3QgeWV0IGFuZAoteW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bwotZ2V0IHN0YXJ0ZWQsIHBsZWFzZSB3cml0ZSB0byBgY29vcmRpbmF0b3JAdHJhbnNsYXRpb25wcm9qZWN0Lm9yZycgdG8KLXJlYWNoIHRoZSBjb29yZGluYXRvciBmb3IgYWxsIHRyYW5zbGF0b3IgdGVhbXMuCi0KLSAgIFRoZSBFbmdsaXNoIHRlYW0gaXMgc3BlY2lhbC4gIEl0IHdvcmtzIGF0IGltcHJvdmluZyBhbmQgdW5pZm9ybWl6aW5nCi10aGUgdGVybWlub2xvZ3kgaW4gdXNlLiAgUHJvdmVuIGxpbmd1aXN0aWMgc2tpbGxzIGFyZSBwcmFpc2VkIG1vcmUgdGhhbgotcHJvZ3JhbW1pbmcgc2tpbGxzLCBoZXJlLgotCi0xLjUgQXZhaWxhYmxlIFBhY2thZ2VzCi09PT09PT09PT09PT09PT09PT09PT09Ci0KLUxhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKLW1hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgTm92ZW1iZXIKLTIwMDcuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCi1QTyBmaWxlcyBoYXZlIGJlZW4gc3VibWl0dGVkIHRvIHRyYW5zbGF0aW9uIGNvb3JkaW5hdGlvbiwgd2l0aCBhCi10cmFuc2xhdGlvbiBwZXJjZW50YWdlIG9mIGF0IGxlYXN0IDUwJS4KLQotICAgICBSZWFkeSBQTyBmaWxlcyAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBjeSBkYSBkZSBlbCBlbiBlbl9HQiBlbwotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKLSAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gW10gICAgIFtdICAgICAgfAotICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8Ci0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKLSAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgW10gfAotICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwKLSAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gW10gICAgICAgICAgW10gfAotICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgIFtdICAgICAgfAotICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAoKSBbXSAgICAgW10gICAgICB8Ci0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZmluZHV0aWxzX3N0YWJsZSAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8Ci0gICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdIHwKLSAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbXVsdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgKCkgKCkgICAgIFtdICAgICAgfAotICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAotICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgW10gW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAotICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8Ci0gICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBndGtzcGVsbCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8Ci0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAotICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaWR1dGlscyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSB8Ci0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgW10gICAgW10gW10gW10gW10gW10gW10gW10gW10gW10gICAgICAgICAgW10gfAotICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gfAotICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICB8Ci0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBsZWFmcGFkICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICB8Ci0gICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8Ci0gICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgfAotICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIHwKLSAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcG9wdCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdIFtdIFtdICAgICAgICAgIFtdIHwKLSAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICBbXSAgICAgIHwKLSAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgW10gfAotICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSAoKSBbXSAgICAgW10gICBbXSB8Ci0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIHwKLSAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICB8Ci0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8ICAgICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIFtdICAgICBbXSAgICAgIHwKLSAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8Ci0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAoKSAgICAgIHwKLSAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgIFtdICAgW10gfAotICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAotICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgICB8Ci0gICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gW10gICAgIFtdICAgICAgfAotICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBjeSBkYSBkZSBlbCBlbiBlbl9HQiBlbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgMCAgMiAgMSAgOCAyNiAgMiA0MCA0OCAgMiA1NiA4OCAxNSAgMSAgMTUgICAxOAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVzIGV0IGV1IGZhIGZpIGZyICBnYSBnbCBndSBoZSBoaSBociBodSBpZCBpcyBpdAotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICBDb21wZW5kaXVtICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAotICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiZmQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiaWJzaGVsZiAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBiaW51dGlscyAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiaXNvbiAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgfAotICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjbGlzcCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBjcGlvICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjcHBsaWIgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBkaWFsb2cgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBkaWZmdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gW10gICAgW10gICAgICAgW10gW10gICAgW10gfAotICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgfAotICAgICBmZXRjaG1haWwgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBmbGV4ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnYXMgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnYXdrICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgW10gICAgICAgICAgICAgICAgKCkgfAotICAgICBnY2FsICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnY2MgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBnaXAgICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBnbXVsdCAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAotICAgICBnbnVjYXNoICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgfAotICAgICBnbnVlZHUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVsaWIgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtYmVhbSAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtY29udGFjdHMgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAotICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtbG9naW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtb3duZXJpbmZvICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAotICAgICBncGUtcGFja2FnZSAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtc2tldGNoYm9vayAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtc3UgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtdGltZXNoZWV0ICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBncGUtdG9kYXkgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGhvdG8yICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBncHJvZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncmV0bCAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAotICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBndGthbSAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBndGtzcGVsbCAgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSBbXSBbXSAgW10gW10gICAgW10gICAgW10gW10gW10gICAgW10gfAotICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSAgICAgW10gW10gW10gW10gW10gW10gW10gICAgW10gfAotICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBpc29fNjM5ICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBqcGlsb3QgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBqd2hvaXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICBrYmQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsZCAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsZWFmcGFkICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgW10gICAgICAgW10gICAgICAgW10gfAotICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBsaWJleGlmICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJncGV3aWRnZXQgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgfAotICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJncGhvdG8yICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWx5cG9uZCAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBseW54ICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBtYWlsdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBtYWtlICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gW10gICAgW10gICAgW10gICAgW10gICAgICAgfAotICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBtaW5pY29tICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBuYW5vICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBvcGNvZGVzICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBwaWxvdC1xb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgICAgICAgW10gICAgfAotICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICByYWRpdXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gW10gICAgW10gICAgICAgW10gW10gICAgW10gfAotICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBza2VuY2lsICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBzeXN0ZW0tdG9vbHMtYmEuLi4gfCBbXSAgICBbXSAgICBbXSBbXSAgW10gICAgICAgICAgICAgW10gW10gW10gICAgW10gfAotICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICBbXSBbXSAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgfAotICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgW10gW10gW10gICAgW10gfAotICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gfAotICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICB4cGFkICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICBlcyBldCBldSBmYSBmaSBmciAgZ2EgZ2wgZ3UgaGUgaGkgaHIgaHUgaWQgaXMgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgODUgMjIgMTQgIDIgNDggMTAxIDYxIDEyICAyICA4ICAyICA2IDUzIDI5ICAxIDUyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgamEga2Ega28ga3Uga3kgbGcgbHQgbHYgbWsgbW4gbXMgbXQgbmIgbmUgbmwgIG5uCi0gICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8Ci0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8Ci0gICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8Ci0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8Ci0gICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8Ci0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8Ci0gICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNwcGxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNyeXB0b25pdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGRpZmZ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZldGNobWFpbCAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZpbmR1dGlsc19zdGFibGUgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdhd2sgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdldHRleHQtdG9vbHMgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdpcCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdtdWx0ICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWNhc2ggICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICgpICAgICAgICB8Ci0gICAgIGdudWVkdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1jb25mICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1lZGl0ICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1maWxlbWFuYWdlciAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1nbyAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8Ci0gICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdzYXNsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzdHJlYW1lciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd0a2FtICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd0a29ycGhhbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd0a3NwZWxsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICBbXSB8Ci0gICAgIGhlcnJpZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGlkdXRpbHMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICBbXSB8Ci0gICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGlzb182MzkgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICBbXSB8Ci0gICAgIGpwaWxvdCAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8Ci0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGtleXRvdWNoLWVkaXRvciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxlYWZwYWQgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpYmV4aWYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwaG90bzIgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdzYXNsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpYmlkbiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxwcm5nICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGx5bnggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIG00ICAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIG1haWxmcm9tZCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1ha2UgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1pbmljb20gICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8Ci0gICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHBhcnRlZCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHBvcHQgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHBzbWlzYyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICB8Ci0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHFvZiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHJwbSAgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNjcmVlbSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICBbXSB8Ci0gICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHNoYXJlZC1taW1lLWluZm8gICB8IFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgIFtdICBbXSB8Ci0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAoKSB8Ci0gICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNwICAgICAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8IFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHRhciAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICB8Ci0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHR1eHBhaW50ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgIFtdICBbXSB8Ci0gICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHV0aWwtbGludXggICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHV0aWwtbGludXgtbmcgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICB8Ci0gICAgIHdnZXQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHhrZXlib2FyZC1jb25maWcgICB8ICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGphIGthIGtvIGt1IGt5IGxnIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5lIG5sICBubgotICAgICAgICAgICAgICAgICAgICAgICAgICA1MSAgMiAyNSAgMyAgMiAgMCAgNiAgMCAgMiAgMiAyMCAgMCAxMSAgMSAxMDMgIDYKLQotICAgICAgICAgICAgICAgICAgICAgICAgICBvciBwYSBwbCBwdCBwdF9CUiBybSBybyBydSBydyBzayBzbCBzcSBzciBzdiAgdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgQ29tcGVuZGl1bSAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgKCkgICAgIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgW10gW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKLSAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgIHwKLSAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZmluZHV0aWxzX3N0YWJsZSAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgIHwKLSAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgIHwKLSAgICAgZ211bHQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ251bGliICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gW10gICAgIHwKLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKLSAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgW10gW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaWR1dGlscyAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgIHwKLSAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgW10gW10gW10gIFtdICAgICAgW10gW10gW10gW10gW10gW10gW10gW10gIFtdIHwKLSAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgW10gW10gICAgIHwKLSAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgW10gW10gICAgIHwKLSAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gIFtdIHwKLSAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gICAgICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgbGliaWRuICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgIHwKLSAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcGlsb3QtcW9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcG9wdCAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgW10gW10gW10gICAgIHwKLSAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKLSAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgICAgW10gW10gW10gIFtdICAgICAgW10gICAgICAgICAgICAgW10gW10gW10gIFtdIHwKLSAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgIHwKLSAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gW10gW10gICAgIHwKLSAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgcGEgcGwgcHQgcHRfQlIgcm0gcm8gcnUgcncgc2sgc2wgc3Egc3Igc3YgIHRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAwICA1IDc3IDMxICA1MyAgICA0IDU4IDcyICAzIDQ1IDQ2ICA5IDQ1IDEyMiAgMwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRnIHRoIHRrIHRyIHVrIHZlbiB2aSAgd2EgeGggemhfQ04gemhfSEsgemhfVFcgenUKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOQotICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTkKLSAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCi0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKLSAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0Ci0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgotICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKLSAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCi0gICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNwotICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDkKLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIwCi0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAotICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjgKLSAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQotICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKLSAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE4Ci0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTIKLSAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2Ci0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAgOQotICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjkKLSAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2Ci0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAotICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKLSAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCi0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTgKLSAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1Ci0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgotICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE2Ci0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDcKLSAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDI5Ci0gICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgfCAyOAotICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjAKLSAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDEzCi0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTUKLSAgICAgZ211bHQgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE2Ci0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgotICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKLSAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCi0gICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAotICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKLSAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCi0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAotICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTQKLSAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE0Ci0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAgNwotICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMjEKLSAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDE2Ci0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMAotICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjIKLSAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAxOQotICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDIxCi0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKLSAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDIxCi0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMQotICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTgKLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgW10gICAgICB8IDIxCi0gICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAotICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzCi0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKLSAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCi0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDkKLSAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMwotICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKLSAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDE2Ci0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMwotICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTgKLSAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgotICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKLSAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgW10gICAgW10gICAgW10gICAgICB8IDI3Ci0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAotICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMzgKLSAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4Ci0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAotICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDI4Ci0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAgNAotICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSBbXSBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICBbXSAgICAgIHwgNTQKLSAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA0Ci0gICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgfCAyNAotICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICAgICAgICAgIHwgMjYKLSAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMwotICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKLSAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzCi0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAotICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKLSAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1Ci0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTAKLSAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDI0Ci0gICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOQotICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKLSAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1Ci0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMAotICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKLSAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5Ci0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMQotICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKLSAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCi0gICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2Ci0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1Ci0gICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAotICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4Ci0gICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMAotICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKLSAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0Ci0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMAotICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCi0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQotICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTgKLSAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEwCi0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMwotICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAyNQotICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKLSAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCi0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyNgotICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjMKLSAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDI5Ci0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyMwotICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMwotICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKLSAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCi0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8ICAgIFtdICAgIFtdIFtdICAgICBbXSAgICAgW10gIFtdICAgICAgICAgIFtdICAgICAgfCAzOAotICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKLSAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE1Ci0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQotICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTkKLSAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCi0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgotICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKLSAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCi0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAotICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKLSAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIzCi0gICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyMAotICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjkKLSAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0Ci0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxNQotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICA3NiB0ZWFtcyAgICAgICAgICAgdGcgdGggdGsgdHIgdWsgdmVuIHZpICB3YSB4aCB6aF9DTiB6aF9ISyB6aF9UVyB6dQotICAgICAgMTYzIGRvbWFpbnMgICAgICAgICAgMCAgMyAgMSA3NCA1MSAgMCAgMTQzIDIxICAxICA1NyAgICAgNyAgICA0NSAgICAwICAyMDM2Ci0KLSAgIFNvbWUgY291bnRlcnMgaW4gdGhlIHByZWNlZGluZyBtYXRyaXggYXJlIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YKLXZpc2libGUgYmxvY2tzIGxldCB1cyBleHBlY3QuICBUaGlzIGlzIGJlY2F1c2UgYSBmZXcgZXh0cmEgUE8gZmlsZXMgYXJlCi11c2VkIGZvciBpbXBsZW1lbnRpbmcgcmVnaW9uYWwgdmFyaWFudHMgb2YgbGFuZ3VhZ2VzLCBvciBsYW5ndWFnZQotZGlhbGVjdHMuCi0KLSAgIEZvciBhIFBPIGZpbGUgaW4gdGhlIG1hdHJpeCBhYm92ZSB0byBiZSBlZmZlY3RpdmUsIHRoZSBwYWNrYWdlIHRvCi13aGljaCBpdCBhcHBsaWVzIHNob3VsZCBhbHNvIGhhdmUgYmVlbiBpbnRlcm5hdGlvbmFsaXplZCBhbmQKLWRpc3RyaWJ1dGVkIGFzIHN1Y2ggYnkgaXRzIG1haW50YWluZXIuICBUaGVyZSBtaWdodCBiZSBhbiBvYnNlcnZhYmxlCi1sYWcgYmV0d2VlbiB0aGUgbWVyZSBleGlzdGVuY2UgYSBQTyBmaWxlIGFuZCBpdHMgd2lkZSBhdmFpbGFiaWxpdHkgaW4gYQotZGlzdHJpYnV0aW9uLgotCi0gICBJZiBOb3ZlbWJlciAyMDA3IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkKLW9mIHRoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QKLXVwLXRvLWRhdGUgbWF0cml4IHdpdGggZnVsbCBwZXJjZW50YWdlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGF0Ci1gaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvZXh0cmEvbWF0cml4Lmh0bWwnLgotCi0xLjYgVXNpbmcgYGdldHRleHQnIGluIG5ldyBwYWNrYWdlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSWYgeW91IGFyZSB3cml0aW5nIGEgZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtIGFuZCB3YW50IHRvCi1pbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCi1wYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi1MaWNlbnNlIHdoaWNoIGNvdmVycyB0aGUgdXNlIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBUaGlzIG1lYW5zCi1pbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAotbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKLWxpYnJhcnkgb3IgdXNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGBsaWJpbnRsJy4KLQotICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQotdGhlIHVzZSBvZiBgZ2V0dGV4dCcgdGhlIG9ubHkgdGhpbmcgbWlzc2luZyBhcmUgdGhlIHRyYW5zbGF0aW9ucy4gIFRoZQotRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBwYWNrYWdlcyB3aGljaCBhcmUgbm90Ci1kZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKLWFwcGxpZXMgYWxzbyBmb3IgZXZlcnkgb3RoZXIgRnJlZSBTb2Z0d2FyZSBQcm9qZWN0LiAgQ29udGFjdAotYGNvb3JkaW5hdG9yQHRyYW5zbGF0aW9ucHJvamVjdC5vcmcnIHRvIG1ha2UgdGhlIGAucG90JyBmaWxlcyBhdmFpbGFibGUKLXRvIHRoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KLQpkaWZmIC0tZ2l0IGEvQVVUSE9SUyBiL0FVVEhPUlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNDlhOTIuLjAwMDAwMDAKLS0tIGEvQVVUSE9SUworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLUVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAdGVtcGxlLWJhcHRpc3QuY29tPgotTWF0dCBIb3dlbGwgPG1ob3dlbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotQnJlbnQgQnJhZGJ1cm4gPGJicmFkYnVybkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci1XaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgotUmljaGFyZCBCb3VsdG9uIDxyaWNoYXJkQHRhcnRhcnVzLm9yZz4KLVphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotICAtIHRocmVhZCBzeW5jaHJvbml6YXRpb24gcmV3b3JrCi1EYXZpZCBJLiBMZWhuIDxkbGVobkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0gIC0gZGViaWFuIHBhY2thZ2luZwotICAtIHZhcmlvdXMgZml4ZXMKLUNocmlzIEVtZXJzb24gPGNocmlzQHRhcnRhcnVzLm9yZz4KLSAgLSBQUEMgcG9ydAotICAtIHNtYWxsIGxpYnhtbCBwYXRjaGVzCi1KZW5zIFRoaWVsZSA8a2FybWVAdW5mb3JnZXR0YWJsZS5jb20+Ci0gIC0gY29sb3IgY29udmVyc2lvbiBwYXRjaGVzCi1UaG9tYXMgTnliZXJnIDx0aG9tYXNAY29kZWZhY3Rvcnkuc2U+Ci0gIC0gZ3N0cmVhbWVyLm00IG1hY3JvcwotICAtIEFMU0EgcGx1Z2lucwotQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotICAtIGdub21ldmZzIHNpbmsgYW5kIHNvdXJjZQotQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLSAgLSBSZWQgSGF0IHBhY2thZ2luZyBhbmQgd2Vic2l0ZSB3b3JrCi1UaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLSAgLSBidWlsZCBzeXN0ZW0gY2xlYW5pbmcKLSAgLSBzb21lIGF1ZGlvIHBsdWdpbnMKLSAgLSByZWxlYXNlIHB1c2hpbmcKLURhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci1Sb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci1BbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci1KdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLUphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODdjZmU4Li4wMDAwMDAwCi0tLSBhL0NPUFlJTkcKKysrIC9kZXYvbnVsbApAQCAtMSw0ODEgKzAsMCBAQAotCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLQkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCi0KLSBDb3B5cmlnaHQgKEMpIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICAgICAgICAgICAgICAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKLSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KLQotW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgR1BMLiAgSXQgaXMKLSBudW1iZXJlZCAyIGJlY2F1c2UgaXQgZ29lcyB3aXRoIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR1BMLl0KLQotCQkJICAgIFByZWFtYmxlCi0KLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKLWZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KLQotICBUaGlzIGxpY2Vuc2UsIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQotc3BlY2lhbGx5IGRlc2lnbmF0ZWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlLCBhbmQgdG8gYW55Ci1vdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91IGNhbiB1c2UgaXQgZm9yCi15b3VyIGxpYnJhcmllcywgdG9vLgotCi0gIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKLXByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKLWhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKLXRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAotaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKLWluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KLQotICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCi1hbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCi1UaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmCi15b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIG9yIGlmIHlvdSBtb2RpZnkgaXQuCi0KLSAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKLW9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKLXlvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKLWNvZGUuICBJZiB5b3UgbGluayBhIHByb2dyYW0gd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQotY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KLXdpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZwotaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCi0KLSAgT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQKLXRoZSBsaWJyYXJ5LCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCi1wZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KLQotICBBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCi10aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQotbGlicmFyeS4gIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQotd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbAotdmVyc2lvbiwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbgotdGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgotDAotICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQotcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IGNvbXBhbmllcyBkaXN0cmlidXRpbmcgZnJlZQotc29mdHdhcmUgd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgdGh1cyBpbiBlZmZlY3QKLXRyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiAgVG8gcHJldmVudCB0aGlzLAotd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzCi1mcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgotCi0gIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5Ci1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggd2FzIGRlc2lnbmVkIGZvciB1dGlsaXR5IHByb2dyYW1zLiAgVGhpcwotbGljZW5zZSwgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbgotZGVzaWduYXRlZCBsaWJyYXJpZXMuICBUaGlzIGxpY2Vuc2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5Ci1vbmU7IGJlIHN1cmUgdG8gcmVhZCBpdCBpbiBmdWxsLCBhbmQgZG9uJ3QgYXNzdW1lIHRoYXQgYW55dGhpbmcgaW4gaXQgaXMKLXRoZSBzYW1lIGFzIGluIHRoZSBvcmRpbmFyeSBsaWNlbnNlLgotCi0gIFRoZSByZWFzb24gd2UgaGF2ZSBhIHNlcGFyYXRlIHB1YmxpYyBsaWNlbnNlIGZvciBzb21lIGxpYnJhcmllcyBpcyB0aGF0Ci10aGV5IGJsdXIgdGhlIGRpc3RpbmN0aW9uIHdlIHVzdWFsbHkgbWFrZSBiZXR3ZWVuIG1vZGlmeWluZyBvciBhZGRpbmcgdG8gYQotcHJvZ3JhbSBhbmQgc2ltcGx5IHVzaW5nIGl0LiAgTGlua2luZyBhIHByb2dyYW0gd2l0aCBhIGxpYnJhcnksIHdpdGhvdXQKLWNoYW5naW5nIHRoZSBsaWJyYXJ5LCBpcyBpbiBzb21lIHNlbnNlIHNpbXBseSB1c2luZyB0aGUgbGlicmFyeSwgYW5kIGlzCi1hbmFsb2dvdXMgdG8gcnVubmluZyBhIHV0aWxpdHkgcHJvZ3JhbSBvciBhcHBsaWNhdGlvbiBwcm9ncmFtLiAgSG93ZXZlciwgaW4KLWEgdGV4dHVhbCBhbmQgbGVnYWwgc2Vuc2UsIHRoZSBsaW5rZWQgZXhlY3V0YWJsZSBpcyBhIGNvbWJpbmVkIHdvcmssIGEKLWRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnksIGFuZCB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotdHJlYXRzIGl0IGFzIHN1Y2guCi0KLSAgQmVjYXVzZSBvZiB0aGlzIGJsdXJyZWQgZGlzdGluY3Rpb24sIHVzaW5nIHRoZSBvcmRpbmFyeSBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSBmb3IgbGlicmFyaWVzIGRpZCBub3QgZWZmZWN0aXZlbHkgcHJvbW90ZSBzb2Z0d2FyZQotc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gIFdlCi1jb25jbHVkZWQgdGhhdCB3ZWFrZXIgY29uZGl0aW9ucyBtaWdodCBwcm9tb3RlIHNoYXJpbmcgYmV0dGVyLgotCi0gIEhvd2V2ZXIsIHVucmVzdHJpY3RlZCBsaW5raW5nIG9mIG5vbi1mcmVlIHByb2dyYW1zIHdvdWxkIGRlcHJpdmUgdGhlCi11c2VycyBvZiB0aG9zZSBwcm9ncmFtcyBvZiBhbGwgYmVuZWZpdCBmcm9tIHRoZSBmcmVlIHN0YXR1cyBvZiB0aGUKLWxpYnJhcmllcyB0aGVtc2VsdmVzLiAgVGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8KLXBlcm1pdCBkZXZlbG9wZXJzIG9mIG5vbi1mcmVlIHByb2dyYW1zIHRvIHVzZSBmcmVlIGxpYnJhcmllcywgd2hpbGUKLXByZXNlcnZpbmcgeW91ciBmcmVlZG9tIGFzIGEgdXNlciBvZiBzdWNoIHByb2dyYW1zIHRvIGNoYW5nZSB0aGUgZnJlZQotbGlicmFyaWVzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGVtLiAgKFdlIGhhdmUgbm90IHNlZW4gaG93IHRvIGFjaGlldmUKLXRoaXMgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIGhlYWRlciBmaWxlcywgYnV0IHdlIGhhdmUgYWNoaWV2ZWQgaXQgYXMgcmVnYXJkcwotY2hhbmdlcyBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgTGlicmFyeS4pICBUaGUgaG9wZSBpcyB0aGF0IHRoaXMKLXdpbGwgbGVhZCB0byBmYXN0ZXIgZGV2ZWxvcG1lbnQgb2YgZnJlZSBsaWJyYXJpZXMuCi0KLSAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKLW1vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQotIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKLWZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hpbGUgdGhlIGxhdHRlciBvbmx5Ci13b3JrcyB0b2dldGhlciB3aXRoIHRoZSBsaWJyYXJ5LgotCi0gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBsaWJyYXJ5IHRvIGJlIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5Ci1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJhdGhlciB0aGFuIGJ5IHRoaXMgc3BlY2lhbCBvbmUuCi0MCi0JCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLSAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IHdoaWNoCi1jb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZAotcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWJyYXJ5Ci1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuICBFYWNoIGxpY2Vuc2VlIGlzCi1hZGRyZXNzZWQgYXMgInlvdSIuCi0KLSAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQotcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCi0od2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgotCi0gIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCi13aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCi1MaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgotY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKLXBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKLXN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKLWluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCi0KLSAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKLW1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKLWFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCi1pbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KLWFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKLWNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKLXJ1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KLXN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKLW9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKLXdyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKLWFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgotICAKLSAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCi1jb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoteW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KLWFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0Ci1hbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQotd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKLUxpYnJhcnkuCi0KLSAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKLWFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKLWZlZS4KLQwKLSAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgotb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAotZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCi1hYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgotCi0gICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgotCi0gICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KLQotICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubwotICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCi0gICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcwotICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKLSAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKLSAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKLSAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgotICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KLQotICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCi0gICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQotICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55Ci0gICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKLSAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQotICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCi0KLVRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKLWlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCi1hbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KLXRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKLXNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQotZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCi1vbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKLXRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCi1lbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKLWl0LgotCi1UaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKLXlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwotZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCi1jb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgotCi1JbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Ci13aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKLWEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCi10aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCi1MaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCi10aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCi10aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCi1pbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCi1vcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Ci10aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCi10aGVzZSBub3RpY2VzLgotDAotICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCi10aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbAotc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KLQotICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKLXRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KLQotICA0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvcgotZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KLXVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQotaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaAotbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCi0KLSAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKLWZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCi1zb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8KLWRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKLWNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCi0KLSAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKLUxpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKLWxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiAgU3VjaCBhCi13b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCi10aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgotCi0gIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKLWNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdAotY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUKLWxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgotU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCi0KLSAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKLXRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQotZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCi1XaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQotbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKLXRocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCi0KLSAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKLXN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQotZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdAotZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQotd29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUKLUxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCi0KLSAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKLWRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgotQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCi13aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCi0MCi0gIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21waWxlIG9yCi1saW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQotd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLXVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKLW1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQotZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCi0KLSAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlCi1MaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKLXRoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKLWR1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCi1jb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCi1kaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCi1vZiB0aGVzZSB0aGluZ3M6Ci0KLSAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwotICAgIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlcgotICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCi0gICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKLSAgICB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQKLSAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQotICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCi0gICAgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKLSAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKLSAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgotICAgIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQotCi0gICAgYikgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKLSAgICBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMKLSAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCi0gICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgotCi0gICAgYykgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKLSAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKLSAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCi0KLSAgICBkKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKLSAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KLQotICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKLUxpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yCi1yZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKLXRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkKLWRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgotY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgotd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwotdGhlIGV4ZWN1dGFibGUuCi0KLSAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKLXJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKLWFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKLXVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKLWRpc3RyaWJ1dGUuCi0MCi0gIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKLUxpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5Ci1mYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCi1saWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KLXRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQotcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKLQotICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCi0gICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQotICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICAgIFNlY3Rpb25zIGFib3ZlLgotCi0gICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKLSAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwotICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KLQotICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQotdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKLWF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgotZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCi1yaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCi1vciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCi10ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCi0KLSAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Ci1zaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgotZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCi1wcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Ci1tb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLUxpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCi1hbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCi10aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKLW9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKLXJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KLVlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCi10aGlzIExpY2Vuc2UuCi0MCi0gIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50Ci1pbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAotY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgotb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAotZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKLWRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKLUxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKLW1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKLWxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKLWFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgotdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KLQotSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQotcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAotYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KLQotSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQotcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKLXN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKLWludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCi1pbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKLWdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKLXRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Ci1zeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCi10byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKLWltcG9zZSB0aGF0IGNob2ljZS4KLQotVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCi1iZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KLQotICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KLWNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQotb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCi1hbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKLXNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cwotZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKLXdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwotdmVyc2lvbnMgb2YgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KLVN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKLWJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KLQotRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQotc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCi0iYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCi1jb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCi1saWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQotdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLQwKLSAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQotcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAotd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKLWNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCi1kZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCi1vZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZwotYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KLQotCQkJICAgIE5PIFdBUlJBTlRZCi0KLSAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCi1XQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgotRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKLU9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi1LSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCi1MSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQotVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0gIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCi1XUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQotQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKLUZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCi1MSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCi1SRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQotRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgotU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotREFNQUdFUy4KLQotCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotDAotICAgICBBcHBlbmRpeDogSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcwotCi0gIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKLXBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAotZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCi1yZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLW9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgotCi0gIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKLXNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Ci1jb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKLSJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCi0KLSAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgotICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKLXNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmCi1uZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6Ci0KLSAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKLSAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KLQotICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKLSAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKLQotVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM4MDQ5Zi4uMDAwMDAwMAotLS0gYS9DaGFuZ2VMb2cKKysrIC9kZXYvbnVsbApAQCAtMSwxMTM3ODAgKzAsMCBAQAotPT09IHJlbGVhc2UgMS4xMC40ID09PQotCi0yMDE3LTAyLTIzICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0Bjb2F4aW9uLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgcmVsZWFzaW5nIDEuMTAuNAotCi0yMDE3LTAyLTIxIDIwOjIzOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgotCSAgYnl0ZXJlYWRlcjogZml4IHBlZWsgdmFsdWUgd2hlbiBzY2FubmluZyBmb3IgMDAgMDAgMDEgd2l0aCBub24tMCBvZmZzZXQKLQkgIFdlIHdvdWxkIGFkZCB0aGUgb2Zmc2V0IGEgc2Vjb25kIHRpbWUgaW4gX3NjYW5fZm9yX3N0YXJ0X2NvZGUoKQotCSAgd2hlbiB3ZSBmb3VuZCBhIHJlc3VsdCwgYnV0IGl0J3MgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBkYXRhCi0JICBwb2ludGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrKCksIHNvIHRoZQotCSAgcGVla2VkIHZhbHVlIHdvdWxkIGJlIHdyb25nIGlmIHRoZSBpbml0aWFsIG9mZnNldCB3YXMgPjAsIGFuZAotCSAgd2Ugd291bGQgcG90ZW50aWFsbHkgcmVhZCBtZW1vcnkgb3V0LW9mLWJvdW5kcy4KLQkgIEFkZCB1bml0IHRlc3QgZm9yIGFsbCBvZiB0aGlzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3ODM2NQotCi0yMDE3LTAyLTIwIDEyOjE2OjMyICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGluZm86IHB1dCAoKSBhcm91bmQgbWFjcm8gYXJndW1lbnRzCi0JICBQdXQgYnJhY2VzIGFyb3VuZCBtYWNybyBhcmd1bWVudHMgb3IgZWxzZSB3ZSBtaWdodCBydW4gaW50byBwcm9ibGVtcwotCSAgd2l0aCBvcGVyYXRlciBwcmVjZWRlbmNlLgotCi0yMDE3LTAyLTIwIDEwOjQ5OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5jOgotCSAgZGV2aWNlcHJvdmlkZXJmYWN0b3J5OiBmaXggZW1wdHkgY2xhc3MgY2hlY2sKLQotMjAxNy0wMS0zMSAyMToxOToxOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlOiBEb24ndCB0cmFuc2xhdGUgdGhlICJiaW4iIGVsZW1lbnQgbmFtZQotCSAgT3RoZXJ3aXNlIHdlIHdvbid0IGJlIGFibGUgdG8gY3JlYXRlIGJpbnMsIHRoZXJlIGlzIG5vIGVsZW1lbnQgY2FsbGVkCi0JICAiQmVow6RsdGVyIiBpZiB5b3UncmUgdXNpbmcgYSBHZXJtYW4gbG9jYWxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3Nzk5OAotCi09PT0gcmVsZWFzZSAxLjEwLjMgPT09Ci0KLTIwMTctMDEtMzAgMTY6MjY6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuMTAuMwotCi0yMDE3LTAxLTMwIDE1OjIyOjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTctMDEtMTUgMTE6NTI6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JICBkYXRldGltZTogZml4IHBvdGVudGlhbCBvdXQtb2YtYm91bmQgcmVhZCBvbiBtYWxmb3JtZWQgZGF0ZXRpbWUgc3RyaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3MjYzCi0KLTIwMTctMDEtMDMgMDI6MTE6MjcgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogRml4IG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBpbnZhbGlkIHN0YXRpYyBjYXBzCi0JICBBIHR5cG8gaW4gYSBzdGF0aWMgY2FwcyBzdHJpbmcgbWF5IHJlc3VsdCBpbiBmYWlsdXJlIHRvCi0JICBkZXNlcmlhbGlzZSBpdCwgc28gZG9uJ3QgZGVyZWZlcmVuY2UgdGhlIHJlc3VsdCB3aXRob3V0Ci0JICBjaGVja2luZy4KLQotMjAxNy0wMS0wMyAwMjoxMzozMCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBEb24ndCBnZW5lcmF0ZSBHU1RfRkxPV19FUlJPUiB3aXRob3V0IGxvZ2dpbmcKLQkgIEF0IGxlYXN0IGxvZyBhIG1lc3NhZ2UgdG8gdGhlIGRlYnVnIGxvZyB3aGVuIGdlbmVyYXRpbmcKLQkgIGEgR1NUX0ZMT1dfRVJST1IsIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gZmluZCB3aGVyZSBpdCBjYW1lIGZyb20uCi0KLTIwMTctMDEtMDMgMDI6MTI6MjcgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIHBhZHRlbXBsYXRlOiBGaXggbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIGludmFsaWQgc3RhdGljIGNhcHMKLQkgIEEgdHlwbyBpbiBhIHN0YXRpYyBjYXBzIHN0cmluZyBtYXkgcmVzdWx0IGluIGZhaWx1cmUgdG8KLQkgIGRlc2VyaWFsaXNlIGl0LCBzbyBkb24ndCBkZXJlZmVyZW5jZSB0aGUgcmVzdWx0IHdpdGhvdXQKLQkgIGNoZWNraW5nLgotCi0yMDE2LTEyLTIyIDE4OjQ1OjEwICswMTAwICBOaWNvbGFzIERlY2hlc25lIDxuaWNvbGFzLmRlY2hlc25lQGxpbmFyby5vcmc+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIHRvb2xzOiBnc3QtbGF1bmNoOiBzZXQgR1NUX0dMX1hJTklUVEhSRUFEUwotCSAgVGhpcyBlbnN1cmUgdGhhdCBYSW5pdFRocmVhZHMgaXMgY2FsbGVkIGFuZCBzbyBnbCBjb250ZXh0cyBhcmUgcHJvcGVybHkKLQkgIGluaXRpYWxpemVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NjQwMQotCi0yMDE2LTExLTMwIDIxOjE3OjU1ICswMTAwICBGYWJyaWNlIEJlbGxldCA8ZmFicmljZUBiZWxsZXQuaW5mbz4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGZpeCBhIHVzZSBhZnRlciBmcmVlIGNhc2UKLQkgIFRoZSBldmVudCBtYXkgYmUgZGlzcG9zZWQgd2hpbGUgYmVpbmcgcHVzaGVkLCBzbyB3ZSBtYWtlIHN1cmUgdGhlCi0JICBkZWJ1ZyBpbmZyYXN0cnVjdHVyZSB3b24ndCB1c2UgaXQgYWZ0ZXIgdGhlIGdzdF9wYWRfcHVzaCgpLgotCi0yMDE2LTEyLTEzIDIwOjAwOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUvcXVldWUyOiBFbnN1cmUgdGhhdCB0aGUgc3RyZWFtaW5nIHRocmVhZCBpcyB1bmxvY2tlZCBhZnRlciBkZWFjdGl2YXRpbmcgdGhlIHNyY3BhZAotCSAgSXQgbWlnaHQgaGFwcGVuIHRoYXQgdGhlIHNyY3BhZCB0YXNrIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZCBhdCBhbGwsIGluCi0JICB3aGljaCBjYXNlIHVubG9ja2luZyBldmVyeXRoaW5nIGZyb20gdGhlcmUgd2lsbCBuZXZlciBoYXBwZW4uCi0JICBNYWtlIHN1cmUgdG8gdW5sb2NrIGV2ZXJ5dGhpbmcgYW5vdGhlciB0aW1lIGFmdGVyIHRoZSB0YXNrIGZ1bmN0aW9uIGlzCi0JICBkZWZpbml0ZWx5IHN0b3BwZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2MDM5Ci0KLTIwMTYtMTItMTAgMTg6Mzg6MzIgKzA5MDAgIFNldW5naGEgWWFuZyA8c2gueWFuZ0BsZ2UuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IEZpeCBvdmVyZmxvdyBvbiBnZXRfYnVmZmVyaW5nX2xldmVsKCkKLQkgIGd1aW50NjQgZGVub21pbmF0b3IgZmFjdG9yIGZvciBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KCkgY2FuIGNhdXNlIG92ZXJmbG93Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1OTIxCi0KLTIwMTYtMTItMDggMjA6MjA6MTcgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHRyYWNlcjogbW92ZSB0aGUgUEFEX0xJTksgdHJhY2VyIGhvb2sgdG8gX3BhZF9saW5rX2Z1bGwoKQotCSAgVGhpcyBpcyB1bHRpbWF0ZWx5IGV4ZWN1dGluZyB0aGUgcGFkX2xpbmsuIEluIHRoZSBwcmV2aW91cyBwb3NpdGlvbiB3ZSBtaXNzZWQKLQkgIHNvbWUgbGlua3MsIG5vdGFibHkgZ2hvc3RwYWRzLgotCi0yMDE2LTEyLTEyIDE2OjE5OjEzICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IFNldCBHRXJyb3IgaW4gYW5vdGhlciBlcnJvciBjYXNlCi0JICBXaGVuIGNoYW5naW5nIHRoZSBsb2NhdGlvbiB3aGlsZSBvcGVuLCBwcm9wZXJseSBzZXQgdGhlIEdFcnJvciByZWdhcmRpbmcKLQkgIHRoZSBmYWlsdXJlLgotCi0yMDE2LTEyLTA2IDIyOjMyOjMxICswMTAwICBQZXRlciBTZWlkZXJlciA8cHMucmVwb3J0QGdteC5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIGdzdGNvbmZpZzogRml4IHVuYWxpZ25lZCBhY2Nlc3Mgc3VwcG9ydCBmb3IgYXJjIGFuZCBuaW9zMiBhcmNoaXRlY3R1cmVzCi0JICBGaXhlcyBidWlsZHJvb3QgYXV0b2J1aWxkIGZhaWx1cmVzIChbMV0sIFsyXSkuCi0JICBbMV0gaHR0cDovL2F1dG9idWlsZC5idWlsZHJvb3QubmV0L3Jlc3VsdHMvZmJkL2ZiZGNkOTA2MzVkNWVjM2E2MmFkOThhN2ZmOTNiNzFiOGU1ZWNkZTQKLQkgIFsyXSBodHRwOi8vYXV0b2J1aWxkLmJ1aWxkcm9vdC5uZXQvcmVzdWx0cy9mM2MvZjNjOWIwZWQ0ZmZiMTE0MjIxMDU3MjM3Y2UyMmM5OTViNjczYTk4YgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTcyOAotCi0yMDE2LTEyLTA2IDE2OjI3OjIzICswMTAwICBSaWNhcmRvIFJpYmFsZGEgRGVsZ2FkbyA8cmljYXJkby5yaWJhbGRhQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvaGVscGVycy9nc3Q6Ci0JICBoZWxwZXJzL2dzdDogR2V0IGJhc2ggY29tcGxldGlvbiBvcHRpb25zIGZyb20gZ3N0LWxhdW5jaAotCSAgSXQgaXMgbW9yZSBsaWtlbHkgdGhhdCBnc3QtbGF1bmNoIGlzIGluc3RhbGxlZCB0aGFuIGdlcy1sYXVuY2gKLQkgIFJlcG9ydGVkLWJ5OiBNYXJpYW5uYSBTbWlkdGggQnVzY2hsZSA8bXNiQHF0ZWMuY29tPgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTcxNAotCi0yMDE2LTEyLTAyIDIyOjQ3OjMyICswMTAwICBNYXJjaW4gS29sbnkgPG1hcmNpbi5rb2xueUBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0OiBzZXQgY2xvY2sgbmFtZSBpbiB0aGUgY29uc3RydWN0b3IKLQkgIGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldygpIGFuZCBnc3RfbnRwX2Nsb2NrX25ldygpIGRpZG4ndCBzZXQgdGhlCi0JICAibmFtZSIgcHJvcGVydHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NTM4Ci0KLTIwMTYtMTItMDUgMjE6MDk6NTIgKzAxMDAgIFBldGVyIFNlaWRlcmVyIDxwcy5yZXBvcnRAZ214Lm5ldD4KLQotCSogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgZ3N0Y29uZmlnOiBGaXggdW5hbGlnbmVkIGFjY2VzcyBzdXBwb3J0IGZvciBtaWNyb2JsYXplIGFuZCB4dGVuc2EgYXJjaGl0ZWN0dXJlcwotCSAgRml4ZXMgYnVpbGRyb290IGF1dG9idWlsZCBmYWlsdXJlcywgZm9yIGRldGFpbHMgc2VlOgotCSAgaHR0cDovL2xpc3RzLmJ1c3lib3gubmV0L3BpcGVybWFpbC9idWlsZHJvb3QvMjAxNi1EZWNlbWJlci8xNzg4OTUuaHRtbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTY2MQotCi0yMDE2LTEyLTA1IDExOjAxOjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNvbmNhdC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIGVsZW1lbnRzOiBIYW5kbGUgR3N0SXRlcmF0b3IgUkVTWU5DIHJldHVybiB2YWx1ZSBjb3JyZWN0bHkgaW4gZ3N0X2l0ZXJhdG9yX2ZvcmVhY2goKQotCi0yMDE2LTEyLTAxIDE4OjIwOjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IE1ha2Ugc3VyZSB0byByZXN5bmMgaXRlcmF0b3JzIGFuZCBoYW5kbGUgUkVTWU5DIGF0IGFsbCBpbiBnc3RfaXRlcmF0b3JfZm9yZWFjaCgpIGNhbGxzCi0KLT09PSByZWxlYXNlIDEuMTAuMiA9PT0KLQotMjAxNi0xMS0yOSAxNjoyMDoxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS4xMC4yCi0KLTIwMTYtMTEtMjkgMTU6MjU6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNi0xMS0yOSAxNDowODo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vaHIucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE2LTExLTI4IDEzOjQ4OjE2ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGdzdHV0aWxzOiBGaXggYSBwYWQgbGVhawotCSAgV2hlbiByZXF1ZXN0aW5nIGEgcGFkIGZyb20gYSB0ZW1wbGF0ZSBhbmQgaXQncyBhbHJlYWR5IGxpbmtlZCwgdGhpcwotCSAgbWVhbnMgaXQgd2FzIGEgc3RhdGljIHBhZC4gU2luY2Ugd2Ugb25seSB3YW50IHRvIHJldHVybiBhbiAqYXZhaWxhYmxlKgotCSAgcGFkLCB3ZSBtdXN0IHJldHVybiBOVUxMIC4uLiBidXQgd2UgbXVzdCBhbHNvIHJlbW92ZSB0aGUgcmVmZXJlbmNlCi0JICB3ZSBnb3QgZnJvbSBnZXR0aW5nIHRoYXQgc3RhdGljIHBhZC4KLQkgIFRoZSAiTm8gbmVlZCB0byB1bnJlZiIgbWVzc2FnZSAod2hpY2ggd2Fzbid0IHRydWUgZm9yIHF1aXRlIHNvbWUgdGltZSkKLQkgIGRhdGVzIGJhY2sgZnJvbSB0aGUgdmVyeSB2ZXJ5IHZlcnkgZmlyc3QgY29tbWl0IGludHJvZHVjaW5nIHRoZSAwLjEwCi0JICBmZWF0dXJlcy4KLQotMjAxNi0xMS0yOCAxMjoyODoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IEVuc3VyZSB0aGF0IHRoZSAiZGVidWciIGZpZWxkIG9mIGVycm9yL3dhcm5pbmcvaW5mbyBtZXNzYWdlcyBpcyB2YWxpZCBVVEYtOAotCSAgVGhlIGNhbGxlciBtaWdodCBwYXNzIGFyYml0cmFyeSBkYXRhIGhlcmUgdGhhdCBjYXVzZWQgdGhlIGVycm9yLCBhbmQKLQkgIHRyeWluZyB0byBzZXQgaW52YWxpZCBVVEYtOCBpbiBhIEdzdFN0cnVjdHVyZSBjYXVzZXMgaXQgdG8gYmUgbm90IHNldCBhdAotCSAgYWxsLiBMYXRlciB3aGVuIHRyeWluZyB0byBwYXJzZSBpdCwgdGhlIGZpZWxkIHdpbGwgbm90IGV4aXN0IGFuZCB0aGUKLQkgIHJldHVybiB2YWx1ZSB3aWxsIHBvaW50IHRvIGludmFsaWQgbWVtb3J5LiBQcmV2ZW50IHRoaXMgYnkgc3RvcmluZyBOVUxMCi0JICBpbnN0ZWFkLgotCSAgQWxzbyBwcmludCBhIGdfd2FybmluZygpLCB0aGUgY2FsbGVyIHNob3VsZCBuZXZlciBldmVyIGRvIHRoaXMgdG8gYmVnaW4KLQkgIHdpdGguCi0KLTIwMTYtMTEtMTUgMjI6Mzk6NDMgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHF1ZXVlczogRG9uJ3QgcmV0dXJuIG5lZ2F0aXZlIHBvc2l0aW9uIHF1ZXJpZXMuCi0JICBXaGVuIHN1YnRyYWN0aW5nIHF1ZXVlZCBkYXRhIHNpemVzIGZyb20gdXBzdHJlYW0gcXVlcmllcwotCSAgaW4gcXVldWUsIHF1ZXVlMiwgZG93bmxvYWRidWZmZXIgYW5kIHR5cGVmaW5kLCBjbGFtcCB0aGUKLQkgIHJlc3VsdCB0byBub3QgZ28gbmVnYXRpdmUsIGluIGNhc2UgdXBzdHJlYW0gcmV0dXJuZWQKLQkgIGEgbm9uc2Vuc2UgdmFsdWUgdGhhdCdzIHRvbyBzbWFsbCAoYXMgY291bGQgaGFwcGVuIGlmCi0JICB1cHN0cmVhbSBpcyBlc3RpbWF0aW5nLCBvciBqdXN0IGJyb2tlbikKLQotMjAxNi0xMS0yMCAxNDo1MTozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogdXBkYXRlIHZlcnNpb24KLQotPT09IHJlbGVhc2UgMS4xMC4xID09PQotCi0yMDE2LTExLTE3IDE1OjUxOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjEwLjEKLQotMjAxNi0xMS0xNyAxNDo0NjoyNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vaWQucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE2LTExLTE3IDE0OjQyOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9pZC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vemhfQ04ucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE2LTExLTE3IDE0OjM5OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTYtMTEtMTYgMjM6MTk6MjggKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IE1ha2Ugc3VyZSBub3QtbGlua2VkIHN0cmVhbXMgZ2V0IHdva2VuIHVwCi0JICBXaGVuIHJ1bm5pbmcgaW4gc3luYy1ieS1ydW5uaW5nLXRpbWUgbW9kZSwgcGFkIGdyb3VwcwotCSAgdGhhdCBoYXZlIGV4YWN0bHkgMSBwYWQgYW5kIGl0J3Mgbm90LWxpbmtlZCBtaWdodCBuZXZlcgotCSAgd2FrZSB1cCBhZnRlciBjb21wdXRpbmcgYSBoaWdoIHRpbWUsIGFzIHRoZSBwZXItcGFkLWdyb3VwCi0JICBoaWdoIHRpbWUgd2FzIG9ubHkgcmVjb21wdXRlZCB3aGVuIGEgcGFkIGluIHRoZSBncm91cAotCSAgYWR2YW5jZXMuCi0JICBXYWtlIHRob3NlIHVwIHVzaW5nIHRoZSBnbG9iYWwgbXVsdGlxdWV1ZSBoaWdoLXRpbWUgYWNyb3NzCi0JICBhbGwgb3RoZXIgZ3JvdXBzIGluc3RlYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc0MzIyCi0KLTIwMTYtMDMtMjkgMTA6Mzg6MDUgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICB0ZWU6IFNldCBHU1RfUEFEX0ZMQUdfUFJPWFlfQ0FQUyBiZWZvcmUgZm9yd2FyZGluZyBzdGlja3kgZXZlbnRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMjEzCi0KLTIwMTYtMDQtMjcgMTA6NTc6MjkgKzAyMDAgIE5pY29sYXMgSHVldCA8bmljb2xhcy5odWV0QHBhcnJvdC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogZml4IGRpc3RhbmNlIHdoZW4gZ2V0dGluZyBwcmV2IHB0cy9kdHMgYXQgb2Zmc2V0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NjYyCi0KLTIwMTYtMDctMjEgMTA6NTI6MzAgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGZpeCBwb29sIGxlYWsgd2hlbiBlYXJseSByZXR1cm5pbmcgaW4gZGVjaWRlX2FsbG9jYXRpb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjkwMjMKLQotMjAxNi0xMS0xMSAwNDo0MTozOSArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL21lc29uLmJ1aWxkOgotCSAgbWVzb246IEFkZCBHc3RCYXNlLTEuMC5naXIgdG8gZ3N0X2Jhc2VfZGVwCi0JICBXaXRob3V0IHRoaXMsIEdJUiBnZW5lcmF0b3JzIGNhbid0IGZpbmQgYW5kIHVzZSBpdAotCi0yMDE2LTExLTA4IDE3OjA5OjUzICswMTAwICBWaWN0b3IgVG9zbyA8bWVAdmljdG9ydG9zby5jb20+Ci0KLQkqIHRlc3RzL21pc2MvbmV0Y2xvY2stcmVwbGF5LmM6Ci0JICB0ZXN0czogRml4IGNvbXBpbGUgd2FybmluZyBvbiBtaW5ndzY0Ci0JICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vLi4vbGlicy9nc3QvbmV0L2dzdG50cHBhY2tldC5jOjM1OjAsCi0JICBmcm9tIG5ldGNsb2NrLXJlcGxheS5jOjI1OgotCSAgLi4vLi4vY29uZmlnLmg6NTQ2OjA6IGVycm9yOiAiX19NU1ZDUlRfVkVSU0lPTl9fIiByZWRlZmluZWQgWy1XZXJyb3JdCi0JICAjZGVmaW5lIF9fTVNWQ1JUX1ZFUlNJT05fXyAweDA2MDEKLQkgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAvdXNyL3g4Nl82NC13NjQtbWluZ3czMi9zeXMtcm9vdC9taW5ndy9pbmNsdWRlL2NydGRlZnMuaDoxMDowLAotCSAgZnJvbSAvdXNyL3g4Nl82NC13NjQtbWluZ3czMi9zeXMtcm9vdC9taW5ndy9pbmNsdWRlL3N0ZGlvLmg6OSwKLQkgIGZyb20gbmV0Y2xvY2stcmVwbGF5LmM6MjE6Ci0JICAvdXNyL3g4Nl82NC13NjQtbWluZ3czMi9zeXMtcm9vdC9taW5ndy9pbmNsdWRlL19taW5ndy5oOjIyMDowOiBub3RlOgotCSAgdGhpcyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIHByZXZpb3VzIGRlZmluaXRpb24KLQkgICMgZGVmaW5lIF9fTVNWQ1JUX1ZFUlNJT05fXyAweDA3MDAKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzQxMDgKLQotMjAxNi0xMS0wOCAxNjo1ODo1MyArMDEwMCAgVmljdG9yIFRvc28gPG1lQHZpY3RvcnRvc28uY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9vbDogRml4IGNvbXBpbGVyIHdhcm5pbmcgb24gbWluZ3c2NAotCSAgZ3N0cG9sbC5jOiBJbiBmdW5jdGlvbiAncmVsZWFzZV9ldmVudCc6Ci0JICBnc3Rwb2xsLmM6MjM5OjM6IGVycm9yOiBzdWdnZXN0IHBhcmVudGhlc2VzIGFyb3VuZCBhc3NpZ25tZW50IHVzZWQgYXMKLQkgIHRydXRoIHZhbHVlIFstV2Vycm9yPXBhcmVudGhlc2VzXQotCSAgaWYgKHN0YXR1cyA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKHNldC0+d2FrZXVwX2V2ZW50LCBJTkZJTklURSkpIHsKLQkgIF5+Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc0MTA4Ci0KLTIwMTYtMTEtMDIgMTQ6MTE6NDMgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2xvY2tfZ2V0dGltZS5jOgotCSAgY2xvY2tfZ2V0dGltZS5jOiBVc2UgX19BUFBMRV9fIGluc3RlYWQgb2YgX19NQUNIX18KLQkgIEh1cmQgYWxzbyBkZWZpbmVzIF9fTUFDSF9fLCBidXQgaXQgZG9lcyBub3QgaGF2ZSBtYWNoX2Fic29sdXRlX3RpbWUuIFVzZQotCSAgdGhlIG1vcmUgc3RyaWN0IF9fQVBQTEVfXyBpbnN0ZWFkLgotCSAgSGFzIGFsc28gYmVlbiBzZW50IHVwc3RyZWFtOiBodHRwczovL2dpdGh1Yi5jb20vbGliY2hlY2svY2hlY2svcHVsbC82NQotCi0yMDE2LTExLTA0IDEwOjE5OjE3IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogVW5zZXQgdGhlIHBsdWdpbiBwYXRocyB0byBnZW5lcmF0ZSB0aGUgLmdpciBmaWxlcwotCSAgQXZvaWRpbmcgcHJvYmxlbXMgd2hlbiB1c2luZyBzdWJwcm9qZWN0OgotCSAgRmFpbGVkIHRvIGxvYWQgcGx1Z2luICdzb21ldGhpbmcuc286IGZpbGUgdG9vIHNob3J0Ci0KLTIwMTYtMTEtMDkgMTQ6MDc6MjggLTAzMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL21lc29uLmJ1aWxkOgotCSogbGlicy9nc3QvY29udHJvbGxlci9tZXNvbi5idWlsZDoKLQkqIGxpYnMvZ3N0L25ldC9tZXNvbi5idWlsZDoKLQkgIG1lc29uOiBBZHZlcnRpc2UgZGVwZW5kZW5jeSBvbiBnc3RfZGVwIGdlbmVyYXRpbmcgZ2lycwotCSAgQW5kIGRvIG5vdCBzaW1wbHkgbGluayB0byBsaWJnc3QgYXMgdGhlIGdpciBpbmZvcm1hdGlvbgotCSAgbG9jYXRpb24gb25seSBleGlzdCBpbiBkZWNsYXJlX2RlcGVuZGVjeQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NDA0NAotCi0yMDE2LTExLTAyIDE0OjAxOjM4ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIG00L2NoZWNrLWNoZWNrcy5tNDoKLQkgIGJ1aWxkOiBGaXggQU1fQ09ORElUSU9OQUwgY2hlY2sgZm9yIGNsb2NrX2dldHRpbWUKLQkgIEl0IHdhcyBhbHdheXMgZXZhbHVhdGluZyB0byBmYWxzZSwgc28gY2xvY2tfZ2V0dGltZS5jIHdhcyBhbHdheXMgYmVpbmcKLQkgIGluY2x1ZGVkIGludG8gbGliY2hlY2suIFRoaXMgYnJlYWtzIGJ1aWxkaW5nIG9uIEh1cmQgYW5kIGNhdXNlcyB1cyB0bwotCSAgYWx3YXlzIG92ZXJyaWRlIGNsb2NrX2dldHRpbWUoKSBldmVuIHdoZW4gaXQgaXMgYXZhaWxhYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzgxMwotCi0yMDE2LTExLTAxIDE5OjQwOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBtZXNvbi5idWlsZDoKLQkgIG1lc29uOiB1cGRhdGUgdmVyc2lvbgotCi09PT0gcmVsZWFzZSAxLjEwLjAgPT09Ci0KLTIwMTYtMTEtMDEgMTc6NTA6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuMTAuMAotCi0yMDE2LTExLTAxIDE3OjQwOjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9uYi5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNi0xMS0wMSAxNzozODo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vbmIucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE2LTExLTAxIDE3OjM2OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTYtMTAtMjUgMTI6MjE6MDcgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbWVzb24uYnVpbGQ6Ci0JKiBtZXNvbl9vcHRpb25zLnR4dDoKLQkgIG1lc29uOiBBZGQgYW4gb3B0aW9uIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBndGstZG9jCi0JICBTaW1pbGFyIHRvIGhvdyBBdXRvdG9vbHMgcHJvdmlkZXMgYW4gb3B0aW9uLCBkZWZhdWx0IGlzICdlbmFibGVkJy4KLQotMjAxNi0xMC0yNCAxMTo0NTozOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBSZXZlcnQgImNvbGxlY3RwYWRzOiBBc3N1bWUgUFRTIGlzIGVxdWFsIERUUyBpZiBQVFMgaXMgbWlzc2luZyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOWIwZDQyY2VlY2IzMTk4Mzk5ZDdlMDVlM2Q1ZjA4MGE3Y2EyN2NhOS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIyMDcKLQotMjAxNi0xMC0xOCAxMTo1OToyNSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0YWxsb2NhdG9yLmM6Ci0JICBhbGxvY2F0b3I6IE1hcmsgcmVnaXN0ZXJlZCBhbGxvY2F0b3IgZm9yIGxlYWsKLQotMjAxNi0wNi0yMSAwODowMDozMCAtMDUwMCAgQW5kcmV3IEVpa3VtIDxhZWlrdW1AY29kZXdlYXZlcnMuY29tPgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgZ3N0bWVzc2FnZS5oOiBBdm9pZCBnY2MgYml0IHNoaWZ0IG92ZXJmbG93IGNvbXBpbGVyIHdhcm5pbmcKLQkgIEF2b2lkcyBiaXQgc2hpZnQgb3ZlcmZsb3cgd2FybmluZyB3aXRoIGdjYzYuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3ODgyIChnbGliKQotCSAgaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NzE4MDMgKGdjYykKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4ODMKLQotMjAxNi0xMC0yMyAyMjoxMTowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlOiBmaXggZXJyb25lb3VzIHVzZSBvZiBfKCIiKQotCSAgRml4ZXMgeGdldHRleHQgd2FybmluZ3Mgd2hlbiBkb2luZyAnbWFrZSB1cGRhdGUtcG8nOgotCSAgZ3N0L3BhcnNlL2dyYW1tYXIueToyMTc6IHdhcm5pbmc6IEVtcHR5IG1zZ2lkLiAgSXQgaXMgcmVzZXJ2ZWQgYnkgR05VIGdldHRleHQ6Ci0JICBnZXR0ZXh0KCIiKSByZXR1cm5zIHRoZSBoZWFkZXIgZW50cnkgd2l0aAotCSAgbWV0YSBpbmZvcm1hdGlvbiwgbm90IHRoZSBlbXB0eSBzdHJpbmcuCi0KLTIwMTYtMTAtMjIgMTc6MDU6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSAgZG9jczogYWRkIGluZGV4IGZvciBBUEkgbmV3IGluIDEuMTAKLQotMjAxNi0xMC0yMiAxNzowNToyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JICBkb2NzOiBhZGQgaW5kZXggZm9yIEFQSSBuZXcgaW4gMS44Ci0KLTIwMTYtMTAtMjEgMTU6NDA6NDcgKzAyMDAgIEplc3BlciBMYXJzZW4gPGtub3JyLmplc3BlckBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogRml4IG1peC11cCBiZXR3ZWVuIERUUyBhbmQgUFRTCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczMzE5Ci0KLTIwMTYtMTAtMjEgMTU6MjI6MjggKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIFJldmVydCAicXVldWU6IEZpeCByYWNlIHdoZW4gY2FsY3VsYXRpbmcgY3VyX2xldmVsLnRpbWUiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGQwM2JkNTQ3ODA5Zjg0OTQwNWEzZjcwNjkyMDA5MWQ5YjAzMTQ3YjAuCi0JICBJdCBicmVha3MgdGhlIHVuaXQgdGVzdCwgYWx0aG91Z2ggaXQgZW5zdXJlcyB0aGF0IG9ubHkgY29ycmVjdCB2YWx1ZXMKLQkgIGFyZSB1c2VkIGZvciBjYWxjdWxhdGlvbnMuIE5lZWRzIHRvIGJlIGZpeGVkIHVwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzA5NgotCi0yMDE2LTEwLTIwIDE3OjE5OjI1IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3ByaW50Zi9tZXNvbi5idWlsZDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL21lc29uLmJ1aWxkOgotCSogbWVzb24uYnVpbGQ6Ci0JICBSZXZlcnQgIm1lc29uOiBVc2UgdGhlIG5ldyBgcGljYCBhcmd1bWVudCBvbiBzdGF0aWMgbGlicyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYTU3NTIyNDBhMTc4YzJjNjUxZWQxMDE2NzAyNWZhZDhiOWM0ZTdiZC4KLQkgIHBpYyB3YXMgYWRkZWQgYWZ0ZXIgMC4zNSBhbmQgd2lsbCBiZSBwcmVzZW50IGluIDAuMzYgKG1lc29uCi0JICBkb2N1bWVudGF0aW9uIHdhcyB3cm9uZykuCi0KLTIwMTYtMTAtMjAgMTU6Mzg6NDYgLTAzMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvcHJpbnRmL21lc29uLmJ1aWxkOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svbWVzb24uYnVpbGQ6Ci0JKiBtZXNvbi5idWlsZDoKLQkgIG1lc29uOiBVc2UgdGhlIG5ldyBgcGljYCBhcmd1bWVudCBvbiBzdGF0aWMgbGlicwotCSAgV2UgZGVwZW5kIG9uIG1lc29uIDAuMzUgd2hpY2ggbWFrZXMgaXQgc2ltcGxlciB0byBoYW5kbGUKLQkgIFJlbW92ZXMgYSBtZXNvbiB3YXJuaW5nCi0KLTIwMTYtMDktMTQgMTQ6MjM6NTYgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogRml4IHJhY2Ugd2hlbiBjYWxjdWxhdGluZyBjdXJfbGV2ZWwudGltZQotCSAgT24gdGhlIGZpcnN0IGJ1ZmZlciwgaXQncyBwb3NzaWJsZSB0aGF0IHNpbmtfc2VnbWVudCBpcyBzZXQgYnV0Ci0JICBzcmNfc2VnbWVudCBoYXMgbm90IGJlZW4gc2V0IHlldC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2Ugc2hvdWxkIG5vdAotCSAgY2FsY3VsYXRlIGN1cl9sZXZlbC50aW1lIHNpbmNlIHNpbmtfc2VnbWVudC5wb3NpdGlvbiBtYXkgYmUgbGFyZ2UgYW5kCi0JICBzcmNfc2VnbWVudC5wb3NpdGlvbiBkZWZhdWx0IGlzIDAsIHdpdGggdGhlIHJlc3VsdGluZyBkaWZmIGJlaW5nIGxhcmdlcgotCSAgdGhhbiBtYXgtc2l6ZS10aW1lLCBjYXVzaW5nIHRoZSBxdWV1ZSB0byBzdGFydCBsZWFraW5nIChpZgotCSAgbGVha3k9ZG93bnN0cmVhbSkuCi0JICBPbmUgcG90ZW50aWFsIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMgdGhhdCB0aGUgc2VnbWVudCBldmVudCBtYXkgYmUKLQkgIHN0b3JlZCBvbiB0aGUgc3JjcGFkIGJlZm9yZSB0aGUgY2FwcyBldmVudCBpcyBwdXNoZWQgZG93bnN0cmVhbSwgY2F1c2luZwotCSAgYSBnX3dhcm5pbmcgKCJTdGlja3kgZXZlbnQgbWlzb3JkZXJpbmcsIGdvdCAnc2VnbWVudCcgYmVmb3JlICdjYXBzJyIpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzA5NgotCi0yMDE2LTA5LTI3IDAwOjAwOjMwICsxMDAwICBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiB1c2UgZ19zdHJjbXAwIGluIHNldF9jb250ZXh0Ci0JICBJdCdzIE5VTEwtc2FmZSB3aGlsZSB0aGUgbGliYyBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IGJlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTc3MwotCi0yMDE2LTA5LTI2IDIzOjU5OjI5ICsxMDAwICBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBjaGVjayBmb3IgaW52YWxpZCBnc3Rjb250ZXh0J3MgYmVpbmcgcHJvdmlkZWQgdG8gc2V0X2NvbnRleHQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzE3NzMKLQotMjAxNi0xMC0xOCAwOTozODowNCArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBtZXNvbi5idWlsZDoKLQkgIGJ1aWxkOiBBcHBseSBYQ29kZSA4IHdvcmthcm91bmQgZm9yIGlPUyB0b28KLQkgIGNsb2NrX2dldHRpbWUgd2FzIGFsc28gYWRkZWQgZm9yIGlPUyAxMC4wLCBzbyBkb24ndCB1c2UgaXQgaWYgd2UncmUKLQkgIHRhcmdldHRpbmcgYW4gb2xkZXIgdmVyc2lvbi4gVGhhdCB3b3VsZCd2ZSBjYXVzZWQgdGhlIHN5bWJvbCB0byBub3QgYmUKLQkgIGZvdW5kIGF0IHJ1bnRpbWUgb24gb2xkZXIgZGV2aWNlcy4KLQotMjAxNi0xMC0xNSAyMTo0OToyMSArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBtZXNvbi5idWlsZDoKLQkgIG1lc29uOiBEb24ndCB1c2UgY19zdGQ9Yzk5Ci0JICBKdXN0IHVzZSB0aGUgZGVmYXVsdCBjX3N0ZCB1c2VkIGJ5IHRoZSBjb21waWxlci4gV2l0aCBHQ0Mgb24gTGludXggdGhpcwotCSAgaXMgZ251ODkuCi0JICBUb25zIG9mIGVycm9ycyByZWxhdGVkIHRvIHRpbWUuaCwgc2lnbmFsLmgsIGV0YyB3aGVuIHVzaW5nIGM5OToKLQkgIEZBSUxFRDogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tAc3RhL2NoZWNrX3J1bi5jLm8KLQkgIGNjICAnLUlsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja0BzdGEnICctZmRpYWdub3N0aWNzLWNvbG9yPWFsd2F5cycgJy1JLi4vbGlicy9nc3QvY2hlY2svbGliY2hlY2snICctSWxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrJyAnLUkuJyAnLUkuLi8uJyAnLUlsaWJzL2dzdC9jaGVjay9saWJjaGVjay8uLicgJy1JLi4vbGlicy9nc3QvY2hlY2svbGliY2hlY2svLi4nICctcGlwZScgJy1XYWxsJyAnLVdpbnZhbGlkLXBjaCcgJy1zdGQ9Yzk5JyAnLURIQVZFX0NPTkZJR19IJyAnLWZQSUMnICctTzInICctZycgJy1mUElDJyAnLU1NRCcgJy1NUScgJ2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrQHN0YS9jaGVja19ydW4uYy5vJyAnLU1GJyAnbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tAc3RhL2NoZWNrX3J1bi5jLm8uZCcgLW8gJ2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrQHN0YS9jaGVja19ydW4uYy5vJyAtYyAuLi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYwotCSAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3J1bi5jOjIxOjA6Ci0JICAuLi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjb21wYXQuaDoxNjc6MTg6IHdhcm5pbmc6IOKAmHN0cnVjdCBpdGltZXJzcGVj4oCZIGRlY2xhcmVkIGluc2lkZSBwYXJhbWV0ZXIgbGlzdCB3aWxsIG5vdCBiZSB2aXNpYmxlIG91dHNpZGUgb2YgdGhpcyBkZWZpbml0aW9uIG9yIGRlY2xhcmF0aW9uCi0JICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3ZhbHVlLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqb2xkX3ZhbHVlKTsKLQkgIF5+fn5+fn5+fn4KLQkgIC4uL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3J1bi5jOjk4OjI1OiBlcnJvcjogYXJyYXkgdHlwZSBoYXMgaW5jb21wbGV0ZSBlbGVtZW50IHR5cGUg4oCYc3RydWN0IHNpZ2FjdGlvbuKAmQotCSAgc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkX2FjdGlvblszXTsKLQkgIF5+fn5+fn5+fn4KLQkgIC4uL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3J1bi5jOjk5OjI1OiBlcnJvcjogYXJyYXkgdHlwZSBoYXMgaW5jb21wbGV0ZSBlbGVtZW50IHR5cGUg4oCYc3RydWN0IHNpZ2FjdGlvbuKAmQotCSAgc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gbmV3X2FjdGlvblszXTsKLQkgIF5+fn5+fn5+fn4KLQkgIFsuLi5dCi0JICBuaW5qYTogYnVpbGQgc3RvcHBlZDogc3ViY29tbWFuZCBmYWlsZWQuCi0JICBUaGUgY2hhbmdlIHdhcyBvcmlnaW5hbGx5IG1hZGUgYmVjYXVzZSBnbnU5OSB3YXMgY2F1c2luZyBpc3N1ZXMgb24gT1MgWC4KLQotMjAxNi0xMC0xNCAxMTo1OToyNCArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgc3RhdHM6IEZpeCB3YXJuaW5nCi0KLTIwMTYtMTAtMDQgMDk6MjA6MzcgLTAzMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzL21lc29uLmJ1aWxkOgotCSogbWVzb24uYnVpbGQ6Ci0JKiB0ZXN0cy9jaGVjay9tZXNvbi5idWlsZDoKLQkgIG1lc29uOiBNYWtlIHVzZSBvZiBuZXcgZW52aXJvbm1lbnQgb2JqZWN0IGFuZCBzZXQgcGx1Z2luIHBhdGggdG8gYnVpbGRkaXIKLQkgIC0gUHJvcGVybHkgc2V0IHdoZXJlIHRvIGZpbmQgZ3N0LXBsdWdpbi1zY2FubmVyCi0JICAtIFVzZSBHU1RfTE9BRElOR19XSElURUxJU1Qgc28gdGhhdCBvbmx5IGNvcmUgcGx1Z2lucyBhcmUgdXNlZAotCSAgQnVtcCBtZXNvbiByZXF1aXJlbWVudCB0byAwLjM1Ci0KLTIwMTYtMTAtMTMgMTg6MjA6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5jOgotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmg6Ci0JICBjb250cm9sYmluZGluZzogU3RvcmUgb2JqZWN0IGluIGEgdGhyZWFkLXNhZmUgR1dlYWtSZWYKLQkgIGdfb2JqZWN0X3dlYWtfcmVmKCkgaXMgbm90IHRocmVhZC1zYWZlLgotCi0yMDE2LTEwLTEzIDE4OjAyOjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5jOgotCSAgYXJnYmNvbnRyb2xiaW5kaW5nOiBnc3Rfb2JqZWN0X3JlcGxhY2UoKSBpcyB0cmFuc2ZlciBub25lCi0KLTIwMTYtMTAtMTMgMTg6MDE6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkgIGRpcmVjdGNvbnRyb2xiaW5kaW5nOiBDbGFyaWZ5IGluIHRoZSBkb2N1bWVudGF0aW9uIHdoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhYnNvbHV0ZSBhbmQgbm90IGlzCi0KLTIwMTYtMTAtMTMgMTc6NTU6NDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JICBjb250cm9sc291cmNlOiBSZW1vdmUgbWlzbGVhZGluZyBzZW50ZW5jZSBmcm9tIHRoZSBkb2N1bWVudGF0aW9uCi0JICBjb250cm9sIHNvdXJjZXMgYXJlIG5vdCByZXF1aXJlZCB0byByZXR1cm4gdmFsdWVzIGJldHdlZW4gMC4wIGFuZCAxLjAuCi0JICBUaGlzIGlzIGNvbXBsZXRlbHkgdXAgdG8gdGhlIGNvbnRyb2wgYmluZGluZyB0aGF0IGlzIHVzZWQuCi0KLTIwMTYtMTAtMTMgMTc6MjE6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIG9iamVjdDogRml4IGJyb2tlbiBzZW50ZW5jZSBzdHJ1Y3R1cmUgaW4gZG9jcwotCi0yMDE2LTEwLTEzIDEyOjE4OjEyICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JICB0cmFjZXJzOiBmaXggc3RydWN0dXJlIGxlYWsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzI4NTEKLQotMjAxNi0xMC0xMyAxMjowMzoyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHN0cmVhbXMuaDoKLQkgIHN0cmVhbXM6IEV4dGVuZCBHc3RTdHJlYW1UeXBlIGRvY3VtZW50YXRpb24KLQkgIFVzZXJzIHNob3VsZG4ndCBhc3N1bWUgaXQgd2lsbCBiZSBhIHNpbmdsZSB2YWx1ZSBzaW5jZSBpdCdzIGEgZmxhZy4KLQotMjAxNi0xMC0wMyAyMDoyMjo1MyArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBtNC9jaGVjay1jaGVja3MubTQ6Ci0JKiBtZXNvbi5idWlsZDoKLQkgIGJ1aWxkOiBGaXggY2xvY2tfZ2V0dGltZSBjaGVjayB3aXRoIFhDb2RlIDgKLQkgIFdpdGggWENvZGUgOCwgY2xvY2tfZ2V0dGltZSB3aWxsIGJlIGluY29ycmVjdGx5IGRldGVjdGVkIGFzIGJlaW5nCi0JICBhdmFpbGFibGUgcmVnYXJkbGVzcyBvZiB3aGF0IE9TIFggdmVyc2lvbiB3ZSdyZSB0YXJnZXR0aW5nIGJlY2F1c2UgdGhlCi0JICBzeW1ib2wgaXMgYXZhaWxhYmxlIGluIHRoZSAudGJkIGxpYnJhcnkgYXMgYSB3ZWFrIHN5bWJvbC4KLQkgIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0hvbWVicmV3L2hvbWVicmV3LWNvcmUvaXNzdWVzLzM3MjcjaXNzdWUtMTcwMDg2MjczCi0JICBJdCdzIG9ubHkgc3RhcnRpbmcgZnJvbSBtYWNPUyAxMC4xMiB0aGF0IGNsb2NrX2dldHRpbWUgaXMgYWN0dWFsbHkKLQkgIGF2YWlsYWJsZSwgc28gd2UgY2FuIHVuY29uZGl0aW9uYWxseSBkaXNhYmxlIGl0IHdoZW4gdGFyZ2V0dGluZyBvbGRlcgotCSAgdmVyc2lvbnMuIFdlIGNhbm5vdCBzaW1wbHkgZG8gQUNfQ0hFQ0tfRlVOQ1Mgd2l0aCAtV2wsLW5vX3dlYWtfaW1wb3J0cwotCSAgYmVjYXVzZSB0aGUgYXV0b2NvbmYgY2hlY2sgZG9lcyBpdHMgb3duIHByb3RvdHlwZSBkZWNsYXJhdGlvbiB0aGF0Ci0JICBkb2Vzbid0IHRyaWdnZXIgdGhhdCBjb21waWxlciBmbGFnLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjQ1MQotCi0yMDE2LTEwLTExIDEyOjEyOjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YmluLmg6Ci0JICBiaW46IEFkZCBhIG5ldyBHU1RfQklOX0ZMQUdfU1RSRUFNU19BV0FSRSBmbGFnCi0JICBUaGlzIGZsYWcgaXMgdG8gaW5kaWNhdGUgdG8gY2hpbGQgZWxlbWVudHMgdGhhdCB0aGV5IGNhbiBhZGQgYW5kCi0JICByZW1vdmUgcGFkcyBhdCBhbnkgcG9pbnQgaW4gdGltZSB3aXRob3V0IHJlLWFkZGluZyBleGlzdGluZyBvbmVzLgotCSAgRWxlbWVudHMgc2hvdWxkIHBvc3QgYmVmb3JlLWhhbmQgYSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3Mjc0MQotCi0yMDE2LTEwLTEwIDEwOjU5OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKLQkgIGRvY3M6IHBhdGhzIGluIGVudiB2YXJzIGFyZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucyBvbiB3aW5kb3dzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyNDMxCi0KLTIwMTYtMTAtMDcgMTc6MDI6NDcgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyYWNpbmcudHh0OgotCSAgZG9jczogZml4IEdTVF9MRUFLU19UUkFDRVJfU0lHIGRvYwotCSAgVGhlIGRvY3VtZW50YXRpb24gd2Fzbid0IG1lbnRpb25pbmcgdGhlIFNJR1VTUjIgc2lnbmFsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjU3MQotCi0yMDE2LTEwLTA4IDE3OjIzOjA4ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IEZpeCBpdGVyYXRvciByZXN5bmMnaW5nCi0JICBXaGVuIHdlIGdldCBHU1RfSVRFUkFUT1JfUkVTWU5DLCB3ZSBuZWVkIHRvIGNhbGwgZ3N0X2l0ZXJhdG9yX3Jlc3luYygpCi0JICBvdGhlcndpc2Ugd2Ugd2lsbCBhbHdheXMgZ2V0IEdTVF9JVEVSQVRPUl9SRVNZTkMgKGFuZCB0aGF0IGxvb3Agd291bGQKLQkgIHJ1biBmb3JldmVyKS4KLQotMjAxNi0xMC0wOCAxMzo1NDo0MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogSW1wbGVtZW50IGdzdF9ldmVudF9mdWxsX2Z1bmMgaGFuZGxpbmcKLQkgIFNhbWUgYXMgd2UgZG8gZm9yIHF1ZXVlCi0KLTIwMTYtMTAtMDggMTM6MjA6NTggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkgIHRyYWNlci9ydXNhZ2U6IGZpeCBmb3JtYXQgc3RyaW5nIGFyZ3MKLQkgIFRoZSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGEgcHJvY2VzcyBpZCwgYnV0IHdlIGRpZCBub3QgcHJvdmljZSBvbmUuIFRoaXMKLQkgIGNhdXNlZCB1cyB0byBsb2cgZ2FyYmFnZSBzaW5jZSBhbGwgYXJncyBnb3Qgc2hpZnRlZC4KLQotMjAxNi0xMC0wMSAxNjo0NzowNSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IEZpeCB0eXBvIGluIGdzdF9tZXNzYWdlX25ld19wcm9ncmVzcygpIGRvY3MKLQkgIHRlc3QgLT4gdGV4dAotCi0yMDE2LTA5LTMwIDA5OjU3OjU3IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogaG9va3MvcHJlLWNvbW1pdC5ob29rOgotCSogbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogU2V0dXAgcHJlLWNvbW1pdCBob29rcyB3aGVuIGNvbmZpZ3VyaW5nCi0KLTIwMTYtMDktMzAgMTE6Mzg6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIG1lc29uLmJ1aWxkOgotCSAgbWVzb246IHVwZGF0ZSB2ZXJzaW9uCi0KLT09PSByZWxlYXNlIDEuOS45MCA9PT0KLQotMjAxNi0wOS0zMCAxMzowMToxNyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS45LjkwCi0KLTIwMTYtMDktMzAgMTI6MDg6NTIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNi0wOS0zMCAxMTo0MToxNCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vZGUucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE2LTA5LTI3IDE4OjAwOjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBtZXNvbi5idWlsZDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9tZXNvbi5idWlsZDoKLQkgIG1lc29uOiB0cmFjZXJzOiBzaWduYWwgYXZhaWxhYmlsaXR5IG9mIGxpYnVud2luZCBhbmQgYmFja3RyYWNlKCkgdG8gY29kZQotCSAgTm90IHNldHRpbmcgY2RhdGEgaGVyZSBvbiBwdXJwb3NlIGJlY2F1c2Ugb2YgLi4gY29tcGxpY2F0aW9ucy4KLQotMjAxNi0wOS0yNiAxODoyMToxOSAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGNvbmZpZy5oLm1lc29uOgotCSogbWVzb24uYnVpbGQ6Ci0JKiBwbHVnaW5zL21lc29uLmJ1aWxkOgotCSogcGx1Z2lucy90cmFjZXJzL21lc29uLmJ1aWxkOgotCSAgbWVzb246IEJ1aWxkIHRyYWNlcnMKLQotMjAxNi0wOS0yMyAyMDo0MDozOSAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZ3N0L21lc29uLmJ1aWxkOgotCSogZG9jcy9saWJzL21lc29uLmJ1aWxkOgotCSogZG9jcy9tZXNvbi5idWlsZDoKLQkgIG1lc29uOiBGaXggZ3RrZG9jIHVzaW5nIG5ldyBtZXNvbiBmZWF0dXJlcwotCi0yMDE2LTA5LTI2IDEyOjE0OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVtb3J5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgotCSAgdGVzdHM6IHJlbW92ZSB1bnVzZWQgdmFsZ3JpbmQgc3R1ZmYKLQkgIENvZGUgd2FzIGFsc28gY2hlY2tpbmcgdGhlIHdyb25nIGRlZmluZSBhbnl3YXkuCi0KLTIwMTYtMDktMjYgMTI6MTI6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSAgdGVzdHM6IHBhcnNlLWxhdW5jaDogbG9va3MgY2xlYW4gbm93YWRheXMsIHNvIHJlLWVuYWJsZSBmb3IgdmFsZ3JpbmQKLQkgIEFsc28sIHRoZSB2YWxncmluZCBiaXRzIHdlcmVuJ3QgaG9va2VkIHVwIHByb3Blcmx5IGFueXdheSwKLQkgIGNoZWNraW5nIHRoZSB3cm9uZyBkZWZpbmUuCi0KLTIwMTYtMDktMjQgMTg6MjI6MjYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZy5oLm1lc29uOgotCSogbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogcmVtb3ZlIGluY29ycmVjdCBhbmQgdW5uZWVkZWQgY2hlY2sgZm9yIHB0cmRpZmZfdAotCSAgTmVlZCB0byBpbmNsdWRlIHN0ZGRlZi5oIGZvciBpdCwgc28gdGhpcyB3b3VsZCd2ZSB3b3JrZWQ6Ci0JICBpZiBjYy5oYXNfdHlwZSgncHRyZGlmZl90JywgcHJlZml4OiAnI2luY2x1ZGUgPHN0ZGRlZi5oPicpCi0KLTIwMTYtMDktMjQgMTg6MDY6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9wcmludGYvbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogZml4IGludGVybmFsIHByaW50ZiBmb3IgJWxsIGZvcm1hdCBtb2RpZmllciBvbiAzMi1iaXQgc3lzdGVtcwotCSAgZ3N0L2dzdHByaW50ZiB1bml0IHRlc3Qgd291bGQgZmFpbCBvbiAzMi1iaXQgeDg2IHdpdGg6Ci0JICBnc3RwcmludGYuYzo4MzpwcmludGZfSTMyX0k2NDowOiAnc3RyJyAoNjQtYml0IHggdmFsdWUgPSBiNWE2OTc4ZikgaXMgbm90IGVxdWFsIHRvICciNjQtYml0IHggdmFsdWUgPSBmMWUyZDNjNGI1YTY5NzhmIicKLQotMjAxNi0wOS0yMyAwNDoxOTo0NyArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWVzb24uYnVpbGQ6Ci0JICBSZXZlcnQgIm1lc29uOiBGb3JjZSBnc3RlbnVtX2ggdG8gYmUgYnVpbHQgd2hlbiB1c2luZyBnc3RfZGVwIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBjZmM1NjVlMmQ4OGE4ZTdkNjU2YjY4YzVjMmExYjdhY2IwOGNkYjdmLgotCSAgVGhlIGNvbW1pdCB3YXMgcmVkdW5kYW50IHNpbmNlIGdzdF9nZW5fc291cmNlcyBhbHJlYWR5IGNvbnRhaW5zCi0JICBnc3RlbnVtX2guIFdlJ3JlIHN0aWxsIGludmVzdGlnYXRpbmcgd2h5IHNvbWUgcGVvcGxlIGFyZSBzdGlsbCBzZWVpbmcKLQkgIGEgcmFjeSBidWlsZCBmYWlsdXJlLgotCi0yMDE2LTA5LTIzIDAwOjI4OjUzICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tZXNvbi5idWlsZDoKLQkgIG1lc29uOiBGb3JjZSBnc3RlbnVtX2ggdG8gYmUgYnVpbHQgd2hlbiB1c2luZyBnc3RfZGVwCi0JICBUaGlzIGZvcmNlcyBnc3RlbnVtdHlwZXMuaCB0byBiZSBidWlsdCB3aGVuZXZlciBzb21ldGhpbmcgdXNlcyBnc3RfZGVwCi0JICBhcyBhIHN1YnByb2plY3QgZGVwZW5kZW5jeS4gVGhpcyBpcyBuZWVkZWQgc2luY2UgZ3N0L2dzdC5oIGluY2x1ZGVzCi0JICBnc3RlbnVtdHlwZXMuaAotCSAgQ2xvc2VzIGh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uL2lzc3Vlcy83MTQgd2hpY2ggaXMgbm90Ci0JICBhY3R1YWxseSBhIE1lc29uIGJ1Zy4KLQotMjAxNi0wOS0xOSAxMDowNzo1MSAtMDQwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBBZGQgZm9yZ290dGVuICJnaXQgY29tbWl0IC0tYW1lbmQiIGZvciBsYXN0IGNvbW1pdAotCSAgTmVlZCB0byBjYXN0IGF3YXkgdGhlIGNvbnN0IGFzIGdfcXVldWVfZm9yZWFjaCgpIHRha2VzIGEgbm9uLWNvbnN0IEdRdWV1ZSoKLQotMjAxNi0wOS0xOSAxMDowNDo1NSAtMDQwMCAgS291aGVpIFN1dG91IDxrb3VAY2xlYXItY29kZS5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogV2hlbiBjb3B5aW5nIHRoZSBzb3J0IGl0ZXJhdG9yLCBhbHNvIGNvcHkgaXRzIGludGVybmFsIHF1ZXVlCi0JICBPdGhlcndpc2UgYm90aCBpdGVyYXRvcnMgc2hhcmUgdGhlIHNhbWUgcmVmZXJlbmNlcywgdGhlIHNlY29uZCBvbmUKLQkgIHVzdWFsbHkgcmVzdWx0aW5nIGluIGEgY3Jhc2ggd2hlbiBiZWluZyBmcmVlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzE2NDkKLQotMjAxNi0wOS0xMSAxNToyODo0MyArMDIwMCAgQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZTIuYzoKLQkgIHF1ZXVlMjogRml4IHdhdGVybWFyayB0ZXN0Ci0JICBUaGlzIGNhcnJpZXMgb3ZlciBjb2RlIGZvciBhIHNpbWlsYXIgdGVzdCBmcm9tIG11bHRpcXVldWUgdG8gZW5zdXJlIGZ1bGwKLQkgIGNvbnRyb2wgb3ZlciB0aGUgZGF0YWZsb3cgd2hpbGUgdGVzdGluZy4gKFRoZSBwcmV2aW91cyBhdHRlbXB0IHdhcyByYWN5Ci0JICBzaW5jZSB0aGUgZmlsbCBsZXZlbCBjaGFuZ2VkIHdpdGhvdXQgYW55IHRocmVhZCBzeW5jIHdpdGggdGhlIHRlc3QgY29kZS4pCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxMjEwCi0KLTIwMTYtMDktMTEgMTU6MjY6MjYgKzAyMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogVXBkYXRlIGJ1ZmZlcmluZyBpZiBpdHMgZW5hYmxlZCBhbmQgbG93L2hpZ2ggd2F0ZXJtYXJrcyBhcmUgY2hhbmdlZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTIxMAotCi0yMDE2LTA5LTE1IDE3OjM4OjQ5ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBGaXggZG9jdW1lbnRhdGlvbiBmb3IgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uKCkKLQkgIFNlZW1zIGxpa2UgdGhlcmUgd2FzIHNvbWUgZG9jdW1lbnRhdGlvbiBsZWZ0IG92ZXIgZnJvbSB3aGVuIHRoaXMgd2FzCi0JICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oKS4KLQotMjAxNi0wOS0xMiAxNzo0MToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IFJlbW92ZSB1bnVzZWQgZmllbGRzIGFuZCBhbHdheXMgdXNlIHRoZSBidWZmZXIgdGltZXN0YW1wIGRpZmZlcmVuY2UgZm9yIGNhbGN1bGF0aW5nIHRoZSBRb1MgcHJvcG9ydGlvbgotCSAgVGhlIGJ1ZmZlciB0aW1lc3RhbXBzIGFyZSBvbmx5IGhpbnRzIGFuZCBtb3JlIG9mdGVuIHRoYW4gbm90IGhhdmUKLQkgIG5vdGhpbmcgdG8gZG8gd2l0aCByZWFsaXR5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTMwNgotCi0yMDE2LTA5LTA4IDEyOjU4OjU0ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkqIG1lc29uLmJ1aWxkOgotCSAgZ3N0Y29uZmlnOiBVc2UgX19kZWNsc3BlYyB3aGVuIGJ1aWx0IHdpdGggTWluR1cgYW5kIGxpbmtpbmcgd2l0aCBNU1ZDCi0JICBFYXJsaWVyIHdlIHdlcmUgb25seSB1c2luZyBfX2RlY2xzcGVjKGRsbGV4cG9ydC9pbXBvcnQpIHdoZW4gd2Ugd2VyZQotCSAgYnVpbHQgd2l0aCBNU1ZDIGJlY2F1c2Ugd2hlbiBidWlsdCB3aXRoIE1pbkdXIGFuZCBsaW5raW5nIHdpdGggTWluR1cgd2UKLQkgIGRvbid0IG5lZWQgaXQgKGFuZCB3ZSBnZXQgbGlua2VyIGVycm9ycyBiZWNhdXNlIG9mIGl0KS4KLQkgIEhvd2V2ZXIsIHdoZW4gd2UncmUgYnVpbHQgd2l0aCBNaW5HVyBhbmQgc29tZW9uZSB3YW50cyB0byBsaW5rIHRvIHVzCi0JICB3aXRoIE1TVkMsIHdlIHN0aWxsIG5lZWQgdGhlIHByb3RvdHlwZXMgdG8gaGF2ZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLQkgIHNpbmNlIE1TVkMgY2Fubm90IGRvIGF1dG8taW1wb3J0IGxpa2UgR0NDIGNhbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzEwMjkKLQotMjAxNi0wOS0xMiAxNzowNzowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBBbHNvIGRvbid0ICp1bnNldCogZWxlbWVudCBmbGFncyBpZiB0aGV5J3JlIGluIHRoZSBzdXBwcmVzc2VkIGZsYWdzCi0JICBPdGhlcndpc2Ugb3VyIGJpbiBtaWdodCBsb3NlIHZhcmlvdXMgZmxhZ3MgdGhhdCB3ZXJlIGV4cGxpY2l0bHkgc2V0IG9uCi0JICBpdCBhdCBhcmJpdHJhcnkgdGltZXMuCi0KLTIwMTYtMDktMTAgMTE6NTk6MTEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzYW50b3NAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICB0ZXN0czogZ3N0YmluOiBhZGQgdGVzdHMgZm9yIHN1cHByZXNzZWQgZmxhZ3MKLQkgIFNvbWUgc2ltcGxlIHRlc3RzIHRvIG1ha2Ugc3VyZSBpdCBrZWVwcyB3b3JraW5nCi0KLTIwMTYtMDktMDIgMTc6Mzk6MTcgKzA5MDAgIFdvbmNodWwgTGVlIDx3b25jaHVsLmxlZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YmluLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGJpbjogQWRkIHNldHRlciBhbmQgZ2V0dGVyIHRvIHN1cHByZXNzIGVsZW1lbnQgZmxhZ3MKLQkgIFN1cHByZXNzLWZsYWdzIGlzIGZvciBwcmV2ZW50aW5nIHByb3BhZ2F0aW9uIG9mIGNoaWxkIGVsZW1lbnQncyBzcGVjaWZpYwotCSAgZmxhZyB3aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBiaW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwNjI3Ci0KLTIwMTYtMDktMTAgMjA6NTA6NDggKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGIxOGQ4MjAgdG8gZjk4MGZkOQotCi0yMDE1LTExLTEzIDE2OjAwOjAyICswMDAwICBHcmFoYW0gTGVnZ2V0dCA8bWluZnJpbkBzaGFycC5mbT4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBFbnN1cmUgZ3N0X3ZhbHVlIGlzIGluaXRpYWxpc2VkIGJlZm9yZSBnc3RfdGFnCi0JICBPdGhlcndpc2UgR1NUX1RZUEVfRlJBQ1RJT04gd2lsbCB3b3JrIGNvcnJlY3RseSBpbiB0YWdzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzkyMgotCi0yMDE2LTA5LTA5IDExOjQ2OjExICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGVsZW1lbnQ6IFJlc2V0IHRoZSBzdG9wIHBvc2l0aW9uIHRvIE5PTkUgaW4gc2Vla19zaW1wbGUoKQotCSAgV2hlbiB1c2luZyBzZWVrX3NpbXBsZSgpIGluIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIga2luZHMgb2Ygc2Vla3MsIHRoaXMKLQkgIGJlY29tZXMgcHJvYmxlbWF0aWMuIHNlZWtfc2ltcGxlKCkgZG9lcyBub3QgcmVzZXQgdGhlIHN0b3AgcG9zaXRpb24gdG8KLQkgIEdTVF9DTE9DS19USU1FX05PTkUgYnV0IGtlZXBzIHdoYXRldmVyIGEgcHJldmlvdXMgc2VlayBkaWQuIFNvIGZvciBleGFtcGxlCi0JICB3aGVuIGRvaW5nIGEgc2Vla19zaW1wbGUoKSBhZnRlciBhIHJhdGU9LTEgc2Vlaywgd2Ugd291bGQgdXN1YWxseSBnZXQKLQkgIGFzc2VydGlvbnMgdGhhdCBzdGFydD5zdG9wIChhbmQgc3RvcCBiZWluZyB0aGUgb2xkIHN0b3AgZnJvbSB0aGUgcmF0ZT0xIHNlZWspLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MTEwNAotCi0yMDE2LTA5LTEwIDA5OjUzOjQyICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBmNDljNTVlIHRvIGIxOGQ4MjAKLQotMjAxNi0wOS0wOSAwOTozNjo0MCAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL21lc29uLmJ1aWxkOgotCSAgbWVzb246dGVzdHM6IEJ1bXAgdGltZW91dCB0byAzIG1pbnV0ZXMKLQkgIEJhc2ljYWxseSB3ZSBhbHJlYWR5IGhhdmUgZWFjaCB0ZXN0IHdpdGggYSAyMHNlYyB0aW1lb3V0LAotCSAgYW5kIHRlc3RzdWl0ZSBjYW4gbGFzdCBtb3JlIHRoYW4gdGhlIGRlZmF1bHQgMzBzZWNzIGZyb20KLQkgIG1lc29uLiAzIG1pbnV0ZXMgaXMgYW5vdGhlciBhcmJpdHJhcnkgdGltZW91dCBidXQgc2hvdWxkCi0JICBiZSBnb29kIGVub3VnaC4KLQotMjAxNi0wOS0wOCAxNToxOTozOCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IFVzZSB0aGUgYXZlcmFnZSBkdXJhdGlvbnMgYmFzZWQgb24gdGltZXN0YW1wcyBmb3IgdGhlIFFvUyBwcm9wb3J0aW9uIHdoZW4gZG9pbmcgdHJpY2ttb2RlcwotCSAgVGhlIGR1cmF0aW9ucyBvZiB0aGUgYnVmZmVycyBhcmUgKHVzdWFsbHkpIGFzc3VtaW5nIHRoYXQgbm8gZnJhbWVzIGFyZSBiZWluZwotCSAgZHJvcHBlZCBhbmQgYXJlIGp1c3QgdGhlIGR1cmF0aW9ucyBjb21pbmcgZnJvbSB0aGUgc3RyZWFtLiBIb3dldmVyIGlmIHdlIGRvCi0JICB0cmlja21vZGVzLCBmcmFtZXMgYXJlIGJlaW5nIGRyb3BwZWQgcmVndWxhcmx5IGVzcGVjaWFsbHkgaWYgb25seSBrZXkgdW5pdHMKLQkgIGFyZSBzdXBwb3NlZCB0byBiZSBwbGF5ZWQuCi0JICBGaXhlcyBjb21wbGV0ZWx5IGJvZ3VzIFFvUyBwcm9wb3J0aW9uIHZhbHVlcyBpbiB0aGUgYWJvdmUgY2FzZS4KLQotMjAxNi0wOS0wNSAxODowNzo0OSAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIG1lc29uLmJ1aWxkOgotCSAgbWVzb246IEZpeCBidWlsZGluZyB3aXRoIG1lc29uIDAuMzQKLQotMjAxNi0wOC0yNiAyMDowNjo1OSAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBnc3QvbWVzb24uYnVpbGQ6Ci0JKiBtZXNvbi5idWlsZDoKLQkqIG1lc29uX29wdGlvbnMudHh0OgotCSAgbWVzb246IEFsbG93IG90aGVycyB0byBidWlsZCBHSVIgZmlsZXMgd2hlbiB1c2luZyBHU3RyZWFtZXIgYXMgc3VicHJvamVjdAotCSAgQW5kIGFkZCBhIHdheSB0byBkaXNhYmxlIHRoZSBpbnRyb3NwZWN0aW9uIGFuZCBidW1wIHZlcnNpb24gdG8gMS45LjIKLQotMjAxNi0wOS0wNSAxMToxMToyOSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgZ3N0Y29uZmlnLmguaW46IEFkZCBhbm90aGVyIHZlcnNpb24gb2YgdGhlIFNINCAjZGVmaW5lIGFuZCBTMzkweAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDczMQotCi0yMDE2LTA5LTA1IDA5OjUwOjE3ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgY29uZmlnOiBuZXdlciBnY2MgZG9lc24ndCBrbm93IF9fcHBjX18gYW5kIF9fcHBjNjRfXyBhbnltb3JlCi0JICBfX3BwY19fIGFuZCBfX3BwYzY0X18gYXJlIG5vbi1zdGFuZGFyZCBkZWZpbmVzLCB3ZSBzaG91bGQgdXNlCi0JICBfX3Bvd2VycGNfXyBhbmQgX19wb3dlcnBjNjRfXyBpbnN0ZWFkIGJlY2F1c2UgbmV3ZXIgZ2NjIGRvZXNuJ3Qga25vdwotCSAgdGhlbSBhbnltb3JlLgotCi0yMDE2LTA5LTA0IDIwOjM5OjMxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgdG9vbHM6IGdzdC1pbnNwZWN0OiBhZGQgKiBmb3IgcG9pbnRlciBzaWduYWwgYXJndW1lbnRzIHdoZXJlIG5lZWRlZAotCSAgUHJpbnQgR09iamVjdCBhcmd1bWVudCBwcm9wZXJseSB3aXRoIHBvaW50ZXIgbWFya2VyOgotCSAgImNsaWVudC1hZGRlZCIgOiAgdm9pZCB1c2VyX2Z1bmN0aW9uIChHc3RFbGVtZW50KiBvYmplY3QsCi0JICBHT2JqZWN0KiBhcmcwLAotCSAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQkgIGluc3RlYWQgb2YKLQkgICJjbGllbnQtYWRkZWQiIDogIHZvaWQgdXNlcl9mdW5jdGlvbiAoR3N0RWxlbWVudCogb2JqZWN0LAotCSAgR09iamVjdCBhcmcwLAotCSAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQkgIGZvciBnc3QtaW5zcGVjdC0xLjAgdGNwc2VydmVyc2luay4KLQotMjAxNi0wOS0wMiAyMzoyMjoxNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogZG9uJ3QgYnVpbGQgbWlzYyBzdWJkaXIgaWYgYm90aCBleGFtcGxlcyBhbmQgYmVuY2htYXJrcyBoYXZlIGJlZW4gZGlzYWJsZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA3NDAKLQotMjAxNi0wOS0wMSAxNDoxMzo0MCArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIGNvbmZpZzogc3VwcG9ydCBTeXN0ZW0gegotCi0yMDE2LTA5LTAxIDEyOjI1OjIzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuOS4yID09PQotCi0yMDE2LTA5LTAxIDEyOjI0OjQ1ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuOS4yCi0KLTIwMTYtMDktMDEgMTE6MjI6NDUgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTYtMDgtMzEgMDk6NDk6MDMgKzAyMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBBZGQgaGlnaGVyLXJlc29sdXRpb24gbG93L2hpZ2gtd2F0ZXJtYXJrIHByb3BlcnRpZXMKLQkgIGxvdy9oaWdoLXdhdGVybWFyayBhcmUgb2YgdHlwZSBkb3VibGUsIGFuZCBnaXZlbiBpbiByYW5nZSAwLjAtMS4wLiBUaGlzCi0JICBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZXQgbG93L2hpZ2ggd2F0ZXJtYXJrcyB3aXRoIGdyZWF0ZXIgcmVzb2x1dGlvbiwKLQkgIHdoaWNoIGlzIHVzZWZ1bCB3aXRoIGxhcmdlIG11bHRpcXVldWUgbWF4IHNpemVzIGFuZCB3YXRlcm1hcmtzIGxpa2UgMC41JS4KLQkgIEFsc28gYWRkaW5nIGEgdGVzdCB0byBjaGVjayB0aGUgZmlsbCBhbmQgd2F0ZXJtYXJrIGxldmVsIGJlaGF2aW9yLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDYyOAotCi0yMDE2LTA4LTMxIDA5OjQ4OjUzICswMjAwICBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIGJ1ZmZlcmluZyBwZXJjZW50YWdlIGFuZCBidWZmZXJpbmcgbGV2ZWwKLQkgIFRvIG1ha2UgdGhlIGNvZGUgY2xlYXJlciwgYW5kIHRvIGZhY2lsaXRhdGUgZnV0dXJlIGltcHJvdmVtZW50cywgaW50cm9kdWNlCi0JICBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIGJ1ZmZlcmluZyBsZXZlbCBhbmQgdGhlIGJ1ZmZlcmluZyBwZXJjZW50YWdlLgotCSAgQnVmZmVyaW5nIGxldmVsOiB0aGUgcXVldWUncyBjdXJyZW50IGZpbGwgbGV2ZWwuIFRoZSBsb3cvaGlnaCB3YXRlcm1hcmtzCi0JICBhcmUgaW4gdGhpcyByYW5nZS4KLQkgIEJ1ZmZlcmluZyBwZXJjZW50YWdlOiBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsb3cvaGlnaCB3YXRlcm1hcmtzCi0JICAoMCUgPSBsb3cgd2F0ZXJtYXJrLCAxMDAlID0gaGlnaCB3YXRlcm1hcmspLgotCSAgVG8gdGhhdCBlbmQsIGdldF9wZXJjZW50YWdlKCkgaXMgcmVuYW1lZCB0byBnZXRfYnVmZmVyaW5nX2xldmVsKCkuIEFsc28sCi0JICBsb3cvaGlnaF9wZXJjZW50IGFyZSByZW5hbWVkIHRvIGxvdy9oaWdoX3dhdGVybWFyayB0byBhdm9pZCBjb25mdXNpb24uCi0JICBtcS0+YnVmZmVyaW5nX3BlcmNlbnQgdmFsdWVzIGFyZSBub3cgbm9ybWFsaXplZCBpbiB0aGUgMC4uMTAwIHJhbmdlIGZvcgotCSAgYnVmZmVyaW5nIG1lc3NhZ2VzIGluc2lkZSB1cGRhdGVfYnVmZmVyaW5nKCksIGFuZCBub3QganVzdCBiZWZvcmUgc2VuZGluZwotCSAgdGhlIGJ1ZmZlcmluZyBtZXNzYWdlLiBGaW5hbGx5IHRoZSBidWZmZXJpbmcgbGV2ZWwgcmFuZ2UgaXMgcGFyYW1ldGVyaXplZAotCSAgYnkgYWRkaW5nIGEgbmV3IGNvbnN0YW50IGNhbGxlZCBNQVhfQlVGRkVSSU5HX0xFVkVMLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDYyOAotCi0yMDE2LTA4LTMxIDA5OjQ4OjM4ICswMjAwICBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBSZW5hbWUgcGVyY2VudC9wZXJjZW50X2NoYW5nZWQgdG8gYnVmZmVyaW5nX3BlcmNlbnQoX2NoYW5nZWQpCi0JICBUaGlzIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBzdWJzZXF1ZW50IGNvbW1pdHMsIGFuZCBtYWtlcyBxdWV1ZTIgYW5kCi0JICBtdWx0aXF1ZXVlIGNvZGUgYSBsaXR0bGUgbW9yZSBjb25zaXN0ZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDYyOAotCi0yMDE2LTA4LTIzIDE0OjU3OjMzICswOTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IEZpeCBoaWdoX3RpbWUgd2FrZXVwIGxvZ2ljCi0JICBXaGVuIGNhbGN1bGF0aW5nIHRoZSBoaWdoX3RpbWUsIGNhY2hlIHRoZSBncm91cCB2YWx1ZSBpbiBlYWNoIHNpbmdsZXF1ZXVlLgotCSAgVGhpcyBmaXhlcyB0aGUgaXNzdWUgYnkgd2hpY2ggd2FrZV91cF9uZXh0X25vbl9saW5rZWQoKSB3b3VsZCB1c2UgdGhlIGdsb2JhbAotCSAgaGlnaC10aW1lIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHdha2UtdXAgYSB3YWl0aW5nIHRocmVhZCwgaW5zdGVhZCBvZiB0aGUgZ3JvdXAKLQkgIG9uZSwgcmVzdWx0aW5nIGluIHRob3NlIHRocmVhZHMgY29uc3RhbnRseSBzcGlubmluZy4KLQkgIFRpZHkgdXAgYSBiaXQgdGhlIHdhaXRpbmcgbG9naWMgd2hpbGUgd2UncmUgYXQgaXQuCi0JICBXaXRoIHRoaXMgcGF0Y2gsIHdlIGdvIGZyb20gMjEyJSBwbGF5aW5nIGEgOCBhdWRpbyAvIDggdmlkZW8gZmlsZSBkb3duIHRvIGxlc3MKLQkgIHRoYW4gMTAlIChtb3N0IG9mIGl0IGJlaW5nIHRoZSB2aWRlbyBkZWNvZGluZykuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwMjI1Ci0KLTIwMTYtMDgtMjggMTY6MDI6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29sczogZ3N0LWluc3BlY3Q6IGRvbid0IHByaW50IGludGVybmFsIHBhZCByZXF1ZXN0IGZ1bmN0aW9uIG5hbWUKLQkgIFRoaXMganVzdCBjb25mdXNlcyBwZW9wbGUsIHRoZXkgbG9vayBhdCBpdCBhbmQgdHJ5IHRvIGNhbGwgaXQKLQkgIGRpcmVjdGx5IGJ5IG5hbWUsIGluc3RlYWQgb2YgdXNpbmcgdGhlIHB1YmxpYyBHc3RFbGVtZW50IEFQSS4KLQkgIEl0IHN0YW5kcyB0byByZWFzb24gdGhhdCBpdCBnb2VzIHdpdGhvdXQgc2F5aW5nIHRoYXQgd2hlbiBhbgotCSAgZWxlbWVudCBwcm92aWRlcyByZXF1ZXN0IHBhZHMgdGhhdCB0aGV5IGNhbiBhY3R1YWxseSBiZQotCSAgcmVxdWVzdGVkIHVzaW5nIHRoZSBzdGFuZGFyZCBBUEksIGFuZCB0aGVyZSdzIG5vIHBvaW50IGluCi0JICBwcmludGluZyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBlbGVtZW50LgotCi0yMDE2LTA4LTIzIDEzOjI3OjU4IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZG93bmxvYWRidWZmZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBNYWtlIHVzZSBvZiB0aGUgbmV3IEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgQVBJIGFsbCBhcm91bmQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwMTU4Ci0KLTIwMTYtMDgtMjMgMTM6Mjc6MjAgLTAzMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBlbGVtZW50OiBBZGQgQVBJIHRvIG1vcmUgZWFzaWx5IHBvc3QgbWVzc2FnZXMgYWJvdXQgZmxvd2luZyBpc3N1ZXMKLQkgIEluIG1hbnkgcGFydHMgb2YgdGhlIGNvZGUgd2UgcmFpc2Ugc3RyZWFtaW5nIGVycm9yIHdoZW4gdGhlIGZsb3cKLQkgIGdvZXMgd3JvbmcsIGFuZCBlYWNoIHRpbWUgd2UgY3JlYXRlIG1vcmUgb3IgbGVzcyBzaW1pbGFyZSBlcnJvcgotCSAgbWVzc2FnZS4gQWxzbyB0aGF0IG1lc3NhZ2UgZG9lcyBub3QgbGV0IHRoZSBhcHBsaWNhdGlvbiBrbm93IHdoYXQKLQkgIGhhcyBhY3R1YWxseSBnb25lIHdyb25nLiBJbiB0aGUgbmV3IEFQSSB3ZSBhZGQgYSAiZmxvdy1yZXR1cm4iIGRldGFpbAotCSAgZmllbGQgaW5zaWRlIHRoZSBHc3RNZXNzYWdlIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGhhcyBhbGwgdGhlIGluZm9ybWF0aW9uCi0JICBpZiBpdCBuZWVkcyBpdC4KLQkgIEFQSToKLQkgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzAxNTgKLQotMjAxNi0wOC0yNiAxOToyNzoyMiArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JKiBtZXNvbi5idWlsZDoKLQkgIGdzdGNvbmZpZzogRGVjaWRlIEdTVF9FWFBPUlQgZGVjbGFyYXRpb24gc3R5bGUgYXQgYnVpbGQgdGltZQotCSAgV2Ugb25seSB1c2UgR1NUX0VYUE9SVCBjb25zaXN0ZW50bHkgd2hlbiBidWlsZGluZyB3aXRoIE1TVkMgYnkgdXNpbmcgdGhlCi0JICB2aXN1YWwgc3R1ZGlvIGRlZmluaXRpb25zIGZpbGVzICh3aW4zMi9jb21tb24vKi5kZWYpLCBzbyBhbHdheXMgZGlzYWJsZQotCSAgaXQgd2hlbiBidWlsZGluZyB3aXRoIEF1dG90b29scyBhbmQgb25seSBlbmFibGUgaXQgd2l0aCBNZXNvbiB3aGVuCi0JICBidWlsZGluZyB3aXRoIE1TVkMuCi0JICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIE1pbkdXIHRvIGxpbmsgdG8gYSBHU3RyZWFtZXIgYnVpbHQgd2l0aCBNU1ZDIGFuZAotCSAgZ2V0IHRoZSBjb3JyZWN0IGZ1bmN0aW9uIHByb3RvdHlwZXMgdG8gZmluZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbgotCSAgRExMcy4KLQotMjAxNi0wOC0yNiAxNjoyMTozMCArMDkwMCAgV29uY2h1bCBMZWUgPHdvbmNodWwubGVlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtLXNlbGVjdGlvbi50eHQ6Ci0JICBkb2NzOiBmaXggdHlwbyBpbiBzdHJlYW0gc2VsZWN0aW9uIGRvY3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLy9zaG93X2J1Zy5jZ2k/aWQ9NzcwNDI4Ci0KLTIwMTYtMDgtMjYgMTI6NTU6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZWxlbWVudDogcmVuYW1lIGdzdF9lbGVtZW50X21lc3NhZ2VfbmV3X2RldGFpbHMoKSB0byBnc3RfbWFrZV9lbGVtZW50X21lc3NhZ2VfZGV0YWlscygpCi0JICBGaXhlcyBnLWkgd2FybmluZyAiR3N0OiBDb25zdHJ1Y3RvciByZXR1cm4gdHlwZSBtaXNtYXRjaAotCSAgc3ltYm9sPSdnc3RfZWxlbWVudF9tZXNzYWdlX25ld19kZXRhaWxzJyBjb25zdHJ1Y3RlZD0nR3N0LkVsZW1lbnQnCi0JICByZXR1cm49J0dzdC5TdHJ1Y3R1cmUnIi4KLQkgIFRoaXMgaXMgYSBuZXdseS1hZGRlZCBmdW5jdGlvbiBpbiBnaXQgdGhhdCBoYXMgbm90IGJlZW4gaW4gYSBzdGFibGUKLQkgIHJlbGVhc2UgeWV0LCBzbyBpdCdzIGZpbmUgdG8gcmVuYW1lIGl0LiBJdCdzIGFsc28gb25seSB1c2VkIGluZGlyZWN0bHkKLQkgIHZpYSBtYWNyb3MuCi0KLTIwMTYtMDgtMjYgMTI6MzU6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JICBkb2NzOiBmaXggdmFyaW91cyBndGstZG9jIHdhcm5pbmdzCi0JICBlLmcuICJ3YXJuaW5nOiBtdWx0aS1saW5lIHNpbmNlIGRvY3MgZm91bmQiCi0KLTIwMTYtMDgtMjYgMTI6MDQ6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBnLWk6IGluZm86IGFsbG93IHBhc3NpbmcgTlVMTCB0byBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbigpCi0JICBVc2VmdWwgZm9yIHJlbW92aW5nIHRoZSBkZWZhdWx0IGhhbmRsZXIgZnJvbSBiaW5kaW5ncy4KLQotMjAxNi0wOC0yNSAxNTowNDowNiAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBkb2NzL2dzdC9tZXNvbi5idWlsZDoKLQkqIGRvY3MvbGlicy9tZXNvbi5idWlsZDoKLQkqIG1lc29uLmJ1aWxkOgotCSAgbWVzb246IGRvYzogRml4IGJ1aWxkaW5nIGRvY3VtZW50YXRpb24gd2hlbiB1c2luZyBzdWJwcm9qZWN0cwotCSAgYW5kIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiBndGstZG9jIGJlZm9yZSBidWlsZGluZyB0aGUgZG9jdW1lbnRhdGlvbgotCi0yMDE2LTA4LTI2IDAzOjE3OjQxICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBJbXBsZW1lbnQgY2FuX2ludGVyc2VjdCBmb3IgR3N0RmxhZ1NldCB0eXBlcwotCSAgTWFrZSBzdXJlIHRoYXQgZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3QgcmV0dXJucyBUUlVFCi0JICBmb3IgR3N0RmxhZ1NldCBjb21iaW5hdGlvbnMgdGhhdCBjYW4gc3VjY2Vzc2Z1bGx5Ci0JICBpbnRlcnNlY3QKLQotMjAxNi0wOC0wMyAxNToyMDoyMCArMDIwMCAgQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSAgcXVldWUyOiBBZGQgaGlnaGVyLXJlc29sdXRpb24gbG93L2hpZ2gtd2F0ZXJtYXJrIHByb3BlcnRpZXMKLQkgIGxvdy9oaWdoLXdhdGVybWFyayBhcmUgb2YgdHlwZSBkb3VibGUsIGFuZCBnaXZlbiBpbiByYW5nZSAwLjAtMS4wLiBUaGlzCi0JICBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZXQgbG93L2hpZ2ggd2F0ZXJtYXJrcyB3aXRoIGdyZWF0ZXIgcmVzb2x1dGlvbiwKLQkgIHdoaWNoIGlzIHVzZWZ1bCB3aXRoIGxhcmdlIHF1ZXVlMiBtYXggc2l6ZXMgYW5kIHdhdGVybWFya3MgbGlrZSAwLjUlLgotCSAgQWxzbyBhZGRpbmcgYSB0ZXN0IHRvIGNoZWNrIHRoZSBmaWxsIGFuZCB3YXRlcm1hcmsgbGV2ZWwgYmVoYXZpb3IuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NDQ5Ci0KLTIwMTYtMDgtMDMgMTU6Mjc6NDAgKzAyMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogRGlzdGluZ3Vpc2ggYmV0d2VlbiBidWZmZXJpbmcgcGVyY2VudGFnZSBhbmQgYnVmZmVyaW5nIGxldmVsCi0JICBUbyBtYWtlIHRoZSBjb2RlIGNsZWFyZXIsIGFuZCB0byBmYWNpbGl0YXRlIGZ1dHVyZSBpbXByb3ZlbWVudHMsIGludHJvZHVjZQotCSAgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBidWZmZXJpbmcgbGV2ZWwgYW5kIHRoZSBidWZmZXJpbmcgcGVyY2VudGFnZS4KLQkgIEJ1ZmZlcmluZyBsZXZlbDogdGhlIHF1ZXVlJ3MgY3VycmVudCBmaWxsIGxldmVsLiBUaGUgbG93L2hpZ2ggd2F0ZXJtYXJrcwotCSAgYXJlIGluIHRoaXMgcmFuZ2UuCi0JICBCdWZmZXJpbmcgcGVyY2VudGFnZTogcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbG93L2hpZ2ggd2F0ZXJtYXJrcwotCSAgKDAlID0gbG93IHdhdGVybWFyaywgMTAwJSA9IGhpZ2ggd2F0ZXJtYXJrKS4KLQkgIFRvIHRoYXQgZW5kLCBnZXRfYnVmZmVyaW5nX3BlcmNlbnQoKSBpcyByZW5hbWVkIHRvIGdldF9idWZmZXJpbmdfbGV2ZWwoKSwKLQkgIGFuZCB0aGUgY29kZSBhdCB0aGUgZW5kIHRoYXQgdHJhbnNmb3JtcyB0byB0aGUgYnVmZmVyaW5nIHBlcmNlbnRhZ2UgaXMKLQkgIGZhY3RvcmVkIG91dCBpbnRvIGEgbmV3IGNvbnZlcnRfdG9fYnVmZmVyaW5nX3BlcmNlbnQoKSBmdW5jdGlvbi4gQWxzbywKLQkgIHRoZSBidWZmZXJpbmcgbGV2ZWwgcmFuZ2UgaXMgcGFyYW1ldGVyaXplZCBieSBhZGRpbmcgYSBuZXcgY29uc3RhbnQgY2FsbGVkCi0JICBNQVhfQlVGRkVSSU5HX0xFVkVMLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2OTQ0OQotCi0yMDE2LTA4LTIzIDEwOjUyOjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgotCSAgZG9jczogcmVsZWFzZTogYWRkIHRhZyBzaWduaW5nIGNvbW1hbmQKLQotMjAxNi0wNy0wNyAwODowMToyNCArMDIwMCAgQXJqZW4gVmVlbmh1aXplbiA8YXJqZW4udmVlbmh1aXplbkB0bm8ubmw+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGJ1ZmZlcjogYWRkIGV4cGxpY2l0IGdldHRlcnMgYW5kIHNldHRlcnMgZm9yIGJ1ZmZlciBmbGFncwotCSAgVGhlc2UgY2FuIGJlIHVzZWQgZnJvbSBiaW5kaW5ncy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjgzMDEKLQotMjAxNi0wOC0yMiAwMDowMTo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogaW5zdGFsbCBsaWJnc3RjaGVjay0xLjAgYW5kIGFkZCBhcGkgdmVyc2lvbiB0byBuYW1lCi0KLTIwMTYtMDgtMjAgMDg6NTQ6MjcgKzA5MDAgIEhvb25oZWUgTGVlIDxob29uaGVlLmxlZUBsZ2UuY29tPgotCi0JKiBnc3QvZ3N0c3RyZWFtcy5jOgotCSAgc3RyZWFtczogdXBkYXRlIGFuZCBlbWl0IG5vdGlmeSBzaWduYWwgb25seSBpZiB0YWdsaXN0IGFjdHVhbGx5IGNoYW5nZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzAxNjEKLQotMjAxNi0wOC0xMiAyMDoyNToxNyArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiAuZ2l0aWdub3JlOgotCSogY29uZmlnLmgubWVzb246Ci0JKiBkb2NzL2dzdC9tZXNvbi5idWlsZDoKLQkqIGRvY3MvbGlicy9tZXNvbi5idWlsZDoKLQkqIGRvY3MvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvYnVpbGRfbWtlbnVtLnB5OgotCSogZ3N0L21lc29uLmJ1aWxkOgotCSogZ3N0L3BhcnNlL2dlbl9ncmFtbWFyLnB5LmluOgotCSogZ3N0L3BhcnNlL2dlbl9sZXgucHkuaW46Ci0JKiBnc3QvcGFyc2UvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvcHJpbnRmL21lc29uLmJ1aWxkOgotCSogbGlicy9nc3QvYmFzZS9tZXNvbi5idWlsZDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL21lc29uLmJ1aWxkOgotCSogbGlicy9nc3QvY2hlY2svbWVzb24uYnVpbGQ6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL21lc29uLmJ1aWxkOgotCSogbGlicy9nc3QvaGVscGVycy9tZXNvbi5idWlsZDoKLQkqIGxpYnMvZ3N0L21lc29uLmJ1aWxkOgotCSogbGlicy9nc3QvbmV0L21lc29uLmJ1aWxkOgotCSogbGlicy9tZXNvbi5idWlsZDoKLQkqIG1lc29uLmJ1aWxkOgotCSogbWVzb25fb3B0aW9ucy50eHQ6Ci0JKiBwa2djb25maWcvbWVzb24uYnVpbGQ6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL21lc29uLmJ1aWxkOgotCSogcGx1Z2lucy9tZXNvbi5idWlsZDoKLQkqIHBvL21lc29uLmJ1aWxkOgotCSogdGVzdHMvYmVuY2htYXJrcy9tZXNvbi5idWlsZDoKLQkqIHRlc3RzL2NoZWNrL21lc29uLmJ1aWxkOgotCSogdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9tZXNvbi5idWlsZDoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvbWVzb24uYnVpbGQ6Ci0JKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL21lc29uLmJ1aWxkOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L21lc29uLmJ1aWxkOgotCSogdGVzdHMvZXhhbXBsZXMvbWVzb24uYnVpbGQ6Ci0JKiB0ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9tZXNvbi5idWlsZDoKLQkqIHRlc3RzL2V4YW1wbGVzL3B0cC9tZXNvbi5idWlsZDoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL21lc29uLmJ1aWxkOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtaWRkZW11eC9tZXNvbi5idWlsZDoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvbWVzb24uYnVpbGQ6Ci0JKiB0ZXN0cy9tZXNvbi5idWlsZDoKLQkqIHRlc3RzL21pc2MvbWVzb24uYnVpbGQ6Ci0JKiB0b29scy9tZXNvbi5idWlsZDoKLQkgIEFkZCBzdXBwb3J0IGZvciBNZXNvbiBhcyBhbHRlcm5hdGl2ZS9wYXJhbGxlbCBidWlsZCBzeXN0ZW0KLQkgIGh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uCi0JICBXaXRoIGNvbnRyaWJ1dGlvbnMgZnJvbToKLQkgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0JICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0JICBKdXNzaSBQYWtrYW5lbiA8anBha2thbmVAZ21haWwuY29tPiAob3JpZ2luYWwgcG9ydCkKLQkgIEhpZ2hsaWdodHMgb2YgdGhlIGZlYXR1cmVzIHByb3ZpZGVkIGFyZToKLQkgICogRmFzdGVyIGJ1aWxkcyBvbiBMaW51eCAofjQwLTUwJSBmYXN0ZXIpCi0JICAqIFRoZSBhYmlsaXR5IHRvIGJ1aWxkIHdpdGggTVNWQyBvbiBXaW5kb3dzCi0JICAqIEdlbmVyYXRlIFZpc3VhbCBTdHVkaW8gcHJvamVjdCBmaWxlcwotCSAgKiBHZW5lcmF0ZSBYQ29kZSBwcm9qZWN0IGZpbGVzCi0JICAqIE11Y2ggZmFzdGVyIGJ1aWxkcyBvbiBXaW5kb3dzIChvbi1wYXIgd2l0aCBMaW51eCkKLQkgICogU2VyaW91c2x5IGZhc3QgY29uZmlndXJlIGFuZCBidWlsZGluZyBvbiBlbWJlZGRlZAotCSAgLi4uIGFuZCBtYW55IG1vcmUuIEZvciBtb3JlIGRldGFpbHMgc2VlOgotCSAgaHR0cDovL2Jsb2cubmlyYmhlZWsuaW4vMjAxNi8wNS9nc3RyZWFtZXItYW5kLW1lc29uLW5ldy1ob3BlLmh0bWwKLQkgIGh0dHA6Ly9ibG9nLm5pcmJoZWVrLmluLzIwMTYvMDcvYnVpbGRpbmctYW5kLWRldmVsb3BpbmctZ3N0cmVhbWVyLXVzaW5nLmh0bWwKLQkgIEJ1aWxkaW5nIHdpdGggTWVzb24gc2hvdWxkIHdvcmsgb24gYm90aCBMaW51eCBhbmQgV2luZG93cywgYnV0IG1heQotCSAgbmVlZCBhIGZldyBtb3JlIHR3ZWFrcyBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KLQotMjAxNi0wOC0xMyAxMzo1NToxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci5wYy5pbjoKLQkgIE1vdmUgZ3N0Y29uZmlnLmggYmFjayB0byBub3JtYWwgaW5jbHVkZSBkaXIKLQkgIE5vdyB0aGF0IGl0J3MgYXJjaC1pbmRlcGVuZGVudCBhZ2Fpbi4gV2lsbCBuZWVkIGZpeGVzIGluIGNlcmJlcm8gdG9vLgotCi0yMDE2LTA2LTIxIDE4OjU5OjQ5ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIGdzdGNvbmZpZy5oOiBEZXRlY3QgdW5hbGlnbmVkIGFjY2VzcyBzdXBwb3J0IGF0IGNvbXBpbGUtdGltZQotCSAgVGhpcyBtYWtlcyBnc3Rjb25maWcuaCBjb21wbGV0ZWx5IGFyY2gtaW5kZXBlbmRlbnQuIFNob3VsZCBjb3ZlciBhbGwKLQkgIGNvbXBpbGVycyB0aGF0IGdzdHJlYW1lciBpcyBrbm93biB0byBidWlsZCBvbiwgYW5kIGFsbCBhcmNoaXRlY3R1cmVzCi0JICB0aGF0IEkgY291bGQgZmluZCBpbmZvcm1hdGlvbiBvbi4gUGVvcGxlIGFyZSBlbmNvdXJhZ2VkIHRvIGZpbGUgYnVncyBpZgotCSAgdGhlaXIgcGxhdGZvcm0vYXJjaCBpcyBtaXNzaW5nLgotCi0yMDE2LTA4LTEzIDA5OjU1OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0dHJhY2UuYzoKLQkqIGdzdC9nc3R0cmFjZS5oOgotCSogcG8vUE9URklMRVMuaW46Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgUmVtb3ZlIG9sZCBhbGxvYyB0cmFjaW5nIGNvZGUgbm93IHRoYXQgd2UgaGF2ZSBhIEdzdFRyYWNlci1iYXNlZCByZXBsYWNlbWVudAotCSAgSXQncyBiZWVuIGludGVybmFsIEFQSSBvbmx5IGluIDEueC4KLQotMjAxNi0wOC0xMiAxNjoxNToyNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogUG9zdCBidWZmZXJpbmcgbWVzc2FnZXMgZWFybGllciBpbiByaW5nYnVmZmVyIG1vZGUKLQkgIEluIHJpbmdidWZmZXIgbW9kZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBwb3N0IGJ1ZmZlcmluZyBtZXNzYWdlcyAqYmVmb3JlKgotCSAgYmxvY2tpbmcgdG8gd2FpdCBmb3IgZGF0YSB0byBiZSBkcmFpbmVkLgotCSAgV2l0aG91dCB0aGlzLCB3ZSB3b3VsZCBlbmQgdXAgaW4gc2l0dWF0aW9ucyBsaWtlIHRoaXM6Ci0JICAqIHBpcGVsaW5lIGlzIHByZS1yb2xsaW5nCi0JICAqIERvd25zdHJlYW0gZGVtdXhlci9kZWNvZGVyIGhhcyBwdXNoZWQgZGF0YSB0byBhbGwgc2lua3MsIGFuZCBkZW11eGVyIHRocmVhZAotCSAgaXMgYmxvY2tpbmcgZG93bnN0cmVhbSAoaS5lLiBub3QgcHVsbGluZyBmcm9tIHVwc3RyZWFtL3F1ZXVlMikuCi0JICAqIFRoZXJlZm9yZSBwaXBlbGluZSBoYXMgcHJlLXJvbGxlZCAuLi4KLQkgICogLi4uIGJ1dCBxdWV1ZTIgaGFzbid0IGZpbGxlZCB1cCB5ZXQsIHRoZXJlZm9yZSB0aGUgYXBwbGljYXRpb24gd2FpdHMgZm9yCi0JICB0aGUgYnVmZmVyaW5nIDEwMCUgbWVzc2FnZXMgYmVmb3JlIHNldHRpbmcgdGhlIHBpcGVsaW5lIHRvIFBMQVlJTkcKLQkgICogQnV0IHF1ZXVlMiBjYW4ndCBwb3N0IHRoYXQgbWVzc2FnZSwgc2luY2UgdGhlIDEwMCUgbWVzc2FnZSB3aWxsIGJlIHBvc3RlZAotCSAgKmFmdGVyKiB0aGVyZSBpcyByb29tIGF2YWlsYWJsZSBmb3IgdGhhdCBsYXN0IGJ1ZmZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njk4MDIKLQotMjAxNi0wOC0wOCAxNjo0MjowNiArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IHJlbW92ZWQgcmVkdW5kYW50IGNhbGwgdG8gZ190aHJlYWRfc2VsZgotCSAgUmVtb3ZlIGFuIHVubmVlZGVkIGNhbGwgdG8gZ190aHJlYWRfc2VsZiBhbmQgbWlub3IgY29kaW5nIHN0eWxlIGZpeC4KLQotMjAxNi0wMy0xNiAxODowMDoxNSArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogSGFuZGxlIHN0cmVhbS1ncm91cC1kb25lCi0JICBIYW5kbGUgdGhlIG5ldyBzdHJlYW0tZ3JvdXAtZG9uZSBtZXNzYWdlIHRvIHVuYmxvY2sgcGFkcyB3aGljaAotCSAgYXJlIHdhaXRpbmcgZm9yIHRoZSBydW5uaW5nIHRpbWUgdG8gYWR2YW5jZSBvbiB0aGF0IGdyb3VwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODk5NQotCi0yMDE2LTAzLTE0IDE0OjIwOjQyICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGV2ZW50czogSW1wbGVtZW50IHRoZSBzdHJlYW0tZ3JvdXAtZG9uZSBldmVudAotCSAgQSBuZXcgZXZlbnQgd2hpY2ggcHJlY2VkZXMgRU9TIGluIHNpdHVhdGlvbnMgd2hlcmUgd2UKLQkgIG5lZWQgZG93bnN0cmVhbSB0byB1bmJsb2NrIGFueSBwYWRzIHdhaXRpbmcgb24gYSBzdHJlYW0KLQkgIGJlZm9yZSB3ZSBjYW4gc2VuZCBFT1MuIEUuZywgZGVjb2RlYmluIGRyYWluaW5nIGEgY2hhaW4KLQkgIHNvIGl0IGNhbiBzd2l0Y2ggcGFkcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg5OTUKLQotMjAxNi0wNy0yNSAxMToyMjozNiArMDIwMCAgQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWVzc2FnZTogQWRkIHJlZGlyZWN0IG1lc3NhZ2UKLQkgIFJlZGlyZWN0aW9uIG1lc3NhZ2VzIGFyZSBhbHJlYWR5IHVzZWQgaW4gZnJhZ21lbnRlZCBzb3VyY2VzIGFuZCBpbgotCSAgdXJpZGVjb2RlYmluLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBpbnRyb2R1Y2UgdGhlc2UgYXMgYW4gb2ZmaWNpYWwgbWVzc2FnZQotCSAgdHlwZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzE2NzMKLQotMjAxNi0wNy0yNSAxOToxNToxNSArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogV2FrZSBvdGhlciBwYWRzIHdoZW4gc2VsZWN0ZWQgZ29lcyBFT1MKLQkgIE90aGVyIHBhZHMgdGhhdCBhcmUgd2FpdGluZyBmb3IgdGhlIHN0cmVhbSBvbiB0aGUgc2VsZWN0ZWQKLQkgIHBhZCB0byBhZHZhbmNlIGJlZm9yZSB0aGV5IGZpbmlzaCB3YWl0aW5nIHRoZW1zZWx2ZXMKLQkgIHNob3VsZCBiZSBnaXZlbiB0aGUgY2hhbmNlIHRvIGRvIHNvIHdoZW4gdGhlIHNlbGVjdGVkIHBhZAotCSAgZ29lcyBFT1MuIEZpeGVzIHByb2JsZW1zIHdoZXJlIGlucHV0IHN0cmVhbXMgY2FuIGVuZCB1cAotCSAgd2FpdGluZyBmb3JldmVyIGlmIHRoZSBhY3RpdmUgc3RyZWFtIGdvZXMgRU9TIGVhcmxpZXIgdGhhbgotCSAgdGhlaXIgb3duIGVuZCB0aW1lLgotCi0yMDE2LTA3LTI0IDAxOjM1OjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgZWxlbWVudDogZml4IEdTVF9FTEVNRU5UX0VSUk9SKCkgZXJyb3IgY29kZSBleHBhbnNpb24KLQkgIEluIHNvbWUgY29ybmVyIGNhc2VzLCB0aGUgZXJyb3IgJ2NvZGUnIHBhcnQgcGFzc2VkIHRvCi0JICBHU1RfRUxFTUVOVF9FUlJPUigpIGlzIGEgdmFsaWQgZGVmaW5lIGFzIHdlbGwsIGluIHdoaWNoCi0JICBjYXNlIGl0IHdvbid0IHN1cnZpdmUgdHdvIGxldmVscyBvZiBtYWNybyBleHBhbnNpb24sIGJ1dAotCSAgb25seSBvbmUuIEZpeGVzOgotCSAgb3NzNC1zaW5rLmM6IEluIGZ1bmN0aW9uIOKAmGdzdF9vc3M0X3Npbmtfb3BlbuKAmToKLQkgIGVycm9yOiDigJhHU1RfUkVTT1VSQ0VfRVJST1JfMHgwMDAwMDAwMuKAmSB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKLQkgIEdTVF8gIyMgZG9tYWluICMjIF9FUlJPUl8gIyMgY29kZSwgX190eHQsIF9fZGJnLCBfX0ZJTEVfXywKLQkgIHdoaWNoIGlzIGZyb20gR1NUX0VMRU1FTlRfRVJST1IoZWwsUkVTT1VSQ0UsT1BFTl9XUklURSwuLikKLQkgIGFuZCBPUEVOX1dSSVRFIGhhcHBlbnMgdG8gYmUgZGVmaW5lZCB0byAyIGhlcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2ODA2Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5MTE3Ci0KLTIwMTYtMDctMjIgMTc6MzI6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBmaXggc29tZSBub25zZW5zaWNhbCBhbm5vdGF0aW9ucwotCi0yMDE2LTA3LTIyIDE1OjI1OjA5ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGFkZCBHU1RfRUxFTUVOVF8qX1dJVEhfREVUQUlMUyB0byBkb2MgbGlzdAotCi0yMDE2LTA3LTIyIDE1OjA0OjU4ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGxpc3QgbmV3IG1lc3NhZ2UgZGV0YWlscyBhcGlzIHdoZXJlIHRoZXkgc2VlbSB0byBiZWxvbmcKLQotMjAxNi0wNy0yMiAxNDo1OTo1NiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbGliZ3N0cmVhbWVyLmRlZjogZml4IG1lbnRpb25zIG9mIG5ldyBtZXNzYWdlIGRldGFpbHMgYXBpCi0JICBJIGhhZCBub3QgdXBkYXRlZCBpdCBhZnRlciB0aGUgcmV2aWV3IGNoYW5nZXMKLQotMjAxNi0wMy0wMiAxMToyMjoyMyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBtZXNzYWdlOiBuZXcgQVBJIGZvciBhZGRpdGlvbmFsIGN1c3RvbSBkYXRhIHRvIGVycm9yIG1lc3NhZ2VzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2ODA2Ci0KLTIwMTYtMDctMjAgMTI6MjI6MTAgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGVha3MuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsZWFrcy5oOgotCSAgdHJhY2VyczogbGVha3M6IHVwZGF0ZSB0eXBlIGZpbHRlciBsYXRlciBmb3IgdW5rbm93biB0eXBlcwotCSAgVGhpcyBhbGxvdyB1cyB0byBmaWx0ZXIgdXNpbmcgYW4gb2JqZWN0IHR5cGUgd2hpY2ggaXMgaW1wbGVtZW50ZWQKLQkgIGJ5IGEgcGx1Z2luIGxpa2UsIHNheSwgR3N0R3RrR0xTaW5rLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODk4OQotCi0yMDE2LTA3LTE5IDE0OjQ1OjUzICswMjAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogYWRkIGctaSB0cmFuc2ZlciBhbm5vdGF0aW9ucyB0byBwZWVrL3BvcC9yZWFkX2J1ZmZlci90YWtlX2J1ZmZlciBmdW5jdGlvbnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg5NDgKLQotMjAxNi0wNy0xOSAyMzoxODoyNCArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIHRlc3RzOiBVc2UgZ3N0X2Nsb2NrX3dhaXRfZm9yX3N5bmMgKCkgZm9yIG5ldCBjbGllbnQgY2xvY2sKLQkgIEluc3RlYWQgb2YgbG9vcGluZywgdXNlIHRoZSBnc3RfY2xvY2tfd2FpdF9mb3Jfc3luYygpIGZ1bmN0aW9uCi0JICB0byBnaXZlIGNsb2NrcyB1cCB0byAxIHNlY29uZCB0byBzeW5jaHJvbmlzZQotCi0yMDE2LTA3LTEzIDE1OjQzOjIxICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IGZpeCBhbm5vdGF0aW9uIG9mIHBhcnNlX3N0cmVhbV97Y29sbGVjdGlvbixzdHJlYW1zX3NlbGVjdGVkfQotCSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQoKSByZXR1cm5zIGEgbmV3IHJlZmVyZW5jZSBzbyB0aGUgcmV0dXJuZWQgb2JqZWN0IGlzCi0JICBhY3R1YWxseSAodHJhbnNmZXIgZnVsbCkuCi0JICBUaGUgdW5pdCB0ZXN0cyB3YXMgYWxyZWFkeSB1bnJlZmZpbmcgdGhlIG9iamVjdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4Nzc2Ci0KLTIwMTYtMDctMTMgMTU6NDM6MjEgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IGZpeCBhbm5vdGF0aW9uIG9mIHBhcnNlX2RldmljZV97YWRkZWQscmVtb3ZlZH0KLQkgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0KCkgcmV0dXJucyBhIG5ldyByZWZlcmVuY2Ugc28gdGhlIHJldHVybmVkIGRldmljZSBpcwotCSAgYWN0dWFsbHkgKHRyYW5zZmVyIGZ1bGwpLgotCSAgVGhlIGNvZGUgdXNpbmcgdGhpcyBBUEkgd2FzIGFscmVhZHkgY29ycmVjdCBidXQgdGhlIGNvZGUgZXhhbXBsZSBpbgotCSAgY29tbWVudHMgd2FzIG5vdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg3NzYKLQotMjAxNi0wNy0xNCAxNjo0MDoyMiArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkIGctaSB0cmFuc2ZlciBhbm5vdGF0YXRpb24gdG8gX3N0b3JlX3N0aWNreV9ldmVudCgpCi0JICBGb3IgY2xhcml0eS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg4MTAKLQotMjAxNi0wNy0xMiAxMjozMjo1NiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBGaXggYXV0b21hdGljLWVvcz1mYWxzZSBtb2RlIGlmIGEgc2VnbWVudC5zdG9wIGlzIGdpdmVuCi0JICBJZiBzZWdtZW50LnN0b3Agd2FzIGdpdmVuLCBhbmQgdGhlIHN1YmNsYXNzIHByb3ZpZGVzIGEgc2l6ZSB0aGF0IG1pZ2h0IGJlCi0JICBzbWFsbGVyIHRoYW4gc2VnbWVudC5zdG9wIGFuZCBhbHNvIHNtYWxsZXIgdGhhbiB0aGUgYWN0dWFsIHNpemUsIHdlIHdvdWxkCi0JICBhbHJlYWR5IHN0b3AgdGhlcmUuCi0JICBJbnN0ZWFkIHRyeSByZWFkaW5nIHVwIHRvIHNlZ21lbnQuc3RvcCwgdGhlIGdvYWwgaXMgdG8gaWdub3JlIHRoZSAocG9zc2libHkKLQkgIGluYWNjdXJhdGUpIHNpemUgdGhlIHN1YmNsYXNzIGdpdmVzIGFuZCBmaW5pc2ggdW50aWwgc2VnbWVudC5zdG9wIG9yIHdoZW4gdGhlCi0JICBzdWJjbGFzcyB0ZWxscyB1cyB0byBzdG9wLgotCi0yMDE2LTA3LTExIDIxOjEzOjI4ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZjM2M2IzMiB0byBmNDljNTVlCi0KLTIwMTYtMDctMTEgMTg6NDU6NDkgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jOgotCSAgYmVuY2htYXJrczogRml4IHBvdGVudGlhbCBzdGFjayBjb3JydXB0aW9uIGluIGNhcHNuZWdvIHRlc3QKLQkgIGZsYXZvdXJfc3RyIGlzIGEgbm9uLWNvbnN0IHBvaW50ZXIgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gaWYgdGhlIC1mCi0JICBvcHRpb24gaXMgcGFzc2VkCi0KLTIwMTYtMDctMTEgMTE6MzQ6MDIgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGVha3MuYzoKLQkgIGxlYWtzOiBjaGVjayByZXR1cm4gdmFsdWVzIG9mIGxpYnVud2luZCBjYWxscwotCi0yMDE2LTA3LTExIDA5OjU4OjQ3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBGaXggYXZlcmFnZSBpbnB1dCByYXRlIGNhbGN1bGF0aW9uIG9uIHNtYWxsIGlucHV0IHJhbmdlCi0JICBXaGVuIGRlYWxpbmcgd2l0aCBzbWFsbC1pc2ggaW5wdXQgZGF0YSBjb21pbmcgaW50byBxdWV1ZTIsIHN1Y2ggYXMKLQkgIGFkYXB0aXZlZGVtdXggZnJhZ21lbnRzLCB3ZSB3b3VsZCBuZXZlciB0YWtlIGludG8gYWNjb3VudCB0aGUgbGFzdAotCSAgPDIwMG1zIG9mIGRhdGEgY29taW5nIGluLgotCSAgVGhlIHByb2JsZW0gaXMgdGhhdCB1c3VhbGx5IG9uIFRDUCBjb25uZWN0aW9uIHRoZSBkb3dubG9hZCByYXRlCi0JICBncmFkdWFsbHkgaW5jcmVhc2VzIChpLmUuIHRoZSByYXRlIGlzIGxvd2VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgYQotCSAgZG93bmxvYWQgdGhhbiBpdCBpcyBsYXRlciBvbikuIENvbWJpbmVkIHdpdGggc21hbGwgZG93bmxvYWQgdGltZSAobGVzcwotCSAgdGhhbiBhIHNlY29uZCkgd2Ugd291bGQgZW5kIHVwIHdpdGggYSBjb21wdXRlZCBhdmVyYWdlIGlucHV0IHJhdGUKLQkgIHdoaWNoIHdhcyBzb21ldGltZXMgdXAgdG8gMzAtNTAlIG9mZiBmcm9tIHRoZSAqYWN0dWFsKiBhdmVyYWdlIGlucHV0Ci0JICByYXRlIGZvciB0aGF0IGZyYWdtZW50LgotCSAgSW4gb3JkZXIgdG8gZml4IHRoaXMsIGZvcmNlIHRoZSBhdmVyYWdlIGlucHV0IHJhdGUgY2FsY3VsYXRpb24gd2hlbgotCSAgd2UgcmVjZWl2ZSBhbiBFT1Mgc28gdGhhdCB3ZSB0YWtlIGludG8gYWNjb3VudCB0aGF0IGZpbmFsIHdpbmRvdwotCSAgb2YgZGF0YS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2NDkKLQotMjAxNi0wNy0wOCAxNjozMTo1NiArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiB3ZWFrX3VucmVmOiBkaXNwbGF5IHRoZSBwb2ludGVyIG9mIHRoZSBvYmplY3QgaWYgZmFpbGluZwotCSAgVGhhdCdzIGdlbmVyYWxseSB0aGUgbW9zdCB1c2VmdWwgaW5mb3JtYXRpb24gdG8gaGVscCBkZWJ1Z2dpbmcgdGhlCi0JICBwcm9ibGVtLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODU3OQotCi0yMDE2LTA3LTA4IDE2OjI5OjM4ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBwcm9wZXJseSBkaXNwbGF5IHRoZSB0eXBlIG9mIHRoZSByZW1vdmVkIG1lc3NhZ2UKLQkgIE1ha2VzIGRlYnVnZ2luZyBlYXNpZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTc5Ci0KLTIwMTYtMDctMDggMTc6NDY6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiByZS1jcmVhdGUgdGhyZWFkcG9vbCBhZnRlciBjbGVhbmluZyB1cCB0YXNrcwotCSAgV2UgZG9uJ3QgZnJlZSB0aGlzIGZyb20gZ3N0X2RlaW5pdCgpIGJ1dCBmcm9tIGdzdF90YXNrX2NsZWFudXBfYWxsKCksCi0JICBzbyBtb3JlIEdTdHJlYW1lciBBUEkgbWF5IGJlIGNhbGxlZC4gSW4gcGFydGljdWxhciBtYWtlcyB1bml0IHRlc3RzCi0JICB3b3JrIGFnYWluIHdpdGggQ0tfRk9SSz1uby4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg1NzcKLQotMjAxNi0wNy0wOCAxNjo1Mzo1MSArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsZWFrcy5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxlYWtzLmg6Ci0JICBsZWFrczogd2FybiBpZiBvYmplY3QgaXMgZGVzdHJveWVkIHdoaWxlIHRoZSB0cmFjZXIgaXMgZGlzcG9zaW5nCi0JICBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGFuZCBnZW5lcmFsbHkgbWVhbnMgc29tZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg1NzgKLQotMjAxNi0wNy0wOCAxNjozNjowMSArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JICBlbGVtZW50OiBjbGVhbiB1cCB0aHJlYWQgcG9vbCBmcm9tIGdzdF90YXNrX2NsZWFudXBfYWxsKCkKLQkgIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCBhc3luYyBvcGVyYXRpb25zIChzdGFydGVkIGZyb20gZ3N0X2VsZW1lbnRfY2FsbF9hc3luYygpKQotCSAgaGF2ZSBiZWVuIGNvbXBsZXRlZCBhbmQgc28gdGhlcmUgaXMgbm8gZXh0cmEgdGhyZWFkIHJ1bm5pbmcuCi0JICBGaXggcmFjZXMgd2hlbiBjaGVja2luZyBmb3IgbGVha3Mgb24gdW5pdCB0ZXN0cyBhcyBzb21lIG9mIHRob3NlCi0JICBvcGVyYXRpb25zIHdlcmUgc3RpbGwgcnVubmluZyB3aGVuIHRoZSBsZWFrcyB0cmFjZXIgd2FzIGNoZWNraW5nIGZvcgotCSAgbGVha2VkIG9iamVjdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NTc3Ci0KLTIwMTYtMDctMDggMTE6MTU6MDYgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGVha3MuYzoKLQkgIGxlYWtzIHRyYWNlcjogdXNlIEdfT1NfVU5JWCB0byBjaGVjayBmb3Igc2lnbmFsIHN1cHBvcnQKLQkgIENoZWNraW5nIGZvciBzaWduYWwuaCBpcyBub3QgZ29vZCBlbm91Z2ggYXMgaXQncyBwcmVzZW50IGluIFdpbmRvd3MuCi0JICBUaG9zZSBzaWduYWxzIGFyZSBVTklYIHNwZWNpZmljIGFueXdheS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4NTcKLQotMjAxNi0wNi0yMiAxNjoyNToxNiArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZGVzaWduL3BhcnQtdHJhY2luZy50eHQ6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGVha3MuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsZWFrcy5oOgotCSAgbGVha3MgdHJhY2VyOiBhZGQgY3JlYXRpb24gc3RhY2sgdHJhY2Ugc3VwcG9ydAotCSAgVGhpcyBhbGxvdyB1cyB0byBwcm92aWRlIHRoZSB0cmFjZSBvZiBsZWFrZWQgb2JqZWN0cyBtYWtpbmcgaXQgZWFzaWVyCi0JICB0byBkZWJ1Zy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4NjIKLQotMjAxNi0wNi0wMSAxMTowODozOSArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtdHJhY2luZy50eHQ6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGVha3MuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsZWFrcy5oOgotCSAgbGVha3MgdHJhY2VyOiBhZGQgY2hlY2twb2ludCBzdXBwb3J0IHVzaW5nIFNJR1VTUjIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4NTcKLQotMjAxNi0wNS0zMSAxNjo1NjoyNiArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZGVzaWduL3BhcnQtdHJhY2luZy50eHQ6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGVha3MuYzoKLQkgIGxlYWtzIHRyYWNlcjogbG9nIGFsaXZlIG9iamVjdHMgd2hlbiByZWNlaXZpbmcgU0lHVVNSMQotCSAgV2UgZG9uJ3Qgd2FudCB0byBhdXRvbWF0aWNhbGx5IGNhdGNoIHNpZ25hbHMgc28gdXNlIGFuIGVudiB2YXJpYWJsZSB0bwotCSAgZW5hYmxlIHRoaXMgZmVhdHVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc4NTcKLQotMjAxNi0wNy0wNyAxMzoxNTo1MSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkgIGZ1bm5lbDogT25seSBmb3J3YXJkIHN0aWNreSBldmVudHMgb24gR0FQIGV2ZW50cyBpZiBuZWVkZWQKLQkgIFRoYXQgaXMsIGlmIHRoZSBhY3RpdmUgcGFkIGNoYW5nZWQgYW5kIGlmIGZvcndhcmRpbmcgb2Ygc3RpY2t5IGV2ZW50cyBpcwotCSAgcmVxdWVzdGVkIGF0IGFsbC4gV2Ugb3RoZXJ3aXNlIGZvcndhcmQgZXZlbnRzIHRvbyBvZnRlbi4KLQotMjAxNi0wNy0wNSAxNjo1MDoxNiArMDIwMCAgTWlndWVsIFBhcsOtcyBEw61heiA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogY2hlY2sgcXVlcnkgY2FwcyBhbnN3ZXJlZCBhbmQgY2FwcyBub3QgTlVMTAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODQ1MAotCi0yMDE2LTA3LTA2IDEzOjUwOjU2ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuOS4xID09PQotCi0yMDE2LTA3LTA2IDEzOjA1OjAyICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS45LjEKLQotMjAxNi0wNy0wNiAxMTozNzo1NiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE2LTA3LTA2IDEwOjE3OjM3ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9kYS5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9zay5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTYtMDctMDUgMTI6MTc6MTggKzAyMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGphbi5zdGVmZmVuc0BnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IERvbid0IGFkZCBjYWxjdWxhdGVkIGJpdHJhdGVzIHVudGlsIHRocmVzaG9sZAotCSAgV2FpdGluZyBiZWZvcmUgcG9zdGluZyBjYWxjdWxhdGVkIGJpdHJhdGVzIHNlZW1zIHRvIGJlIHRoZQotCSAgaW50ZW50IG9mIHRoZSBjb2RlLCBzbyBhdm9pZCBhZGRpbmcgdGhlbSB0byB0aGUgdGFnIGxpc3QKLQkgIHB1c2hlZCB3aXRoIHRoZSBmaXJzdCBmcmFtZS4KLQkgIFdoZW4gdGhlIHRocmVzaG9sZCBpcyByZWFjaGVkLCBnc3RfYmFzZV9wYXJzZV91cGRhdGVfYml0cmF0ZXMKLQkgIHNldHMgdGFnc19jaGFuZ2VkLCBzbyB0aGlzIHBvc3RzIHRoZSBjYWxjdWxhdGVkIG9uZXMgcmlnaHQKLQkgIHRoYXQgbW9tZW50LgotCSAgVGhpcyBwcmV2ZW50cyBhbiBpbnNhbmUgYXZlcmFnZSBjYWxjdWxhdGVkIGZyb20ganVzdCB0aGUKLQkgIGZpcnN0IChrZXkpIGZyYW1lIGZyb20gZ2V0dGluZyBwb3N0ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NDM5Ci0KLTIwMTYtMDctMDQgMTA6MDA6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IE1ha2Ugc3VyZSB0byBub3QgY3JlYXRlIGFuIGludmFsaWQgZXZlbnQgb3JkZXIgd2hlbiBnZW5lcmF0aW5nIHRoZSBkZWZhdWx0IENBUFMgZXZlbnQgYmVjYXVzZSBvZiBhIEdBUCBldmVudAotCSAgVGhlcmUgbXVzdCBiZSBhIFNFR01FTlQgZXZlbnQgYmVmb3JlIHRoZSBHQVAgZXZlbnQsIGFuZCBTRUdNRU5UIGV2ZW50cyBtdXN0Ci0JICBjb21lIGFmdGVyIGFueSBDQVBTIGV2ZW50LiBXZSBob3dldmVyIGRpZCBub3QgcHJvZHVjZSBhbnkgQ0FQUyB5ZXQsIHNvIHdlIG5lZWQKLQkgIHRvIGVuc3VyZSB0byBpbnNlcnQgdGhlIENBUFMgZXZlbnQgYmVmb3JlIHRoZSBTRUdNRU5UIGV2ZW50IGludG8gdGhlIHBlbmRpbmcKLQkgIGV2ZW50cyBsaXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Njk3MAotCi0yMDE2LTA3LTAxIDIyOjM0OjU5ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGdzdGluZm86IEF2b2lkIGdjYyA2IHdhcm5pbmcgdGhhdCBicmVha3MgdGhlIHRlc3RzIGJ1aWxkCi0JICBnY2MgNiBoYXMgcHJvYmxlbXMgZGV0ZWN0aW5nIGFuZCBhdm9pZGluZyB0aHJvd2luZwotCSAgYSB3YXJuaW5nIGZvciB0YXV0b2xvZ2ljYWwgY29tcGFyZXMgaW4gbWFjcm9zICh0aGV5Ci0JICBzaG91bGQgb25seSB0cmlnZ2VyIGZvciBjb21wYXJlcyBvdXRzaWRlIG1hY3JvcykuCi0JICBBdm9pZCB0aGVtIHdpdGggYSBuYXN0eSBjYXN0IG9mIG9uZSBwYXJhbWV0ZXIgdG8gdm9pZCAqCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0NTI2Ci0KLTIwMTYtMDctMDEgMDk6NDQ6MTIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogRml4IGJlaGF2aW91ciB3aXRoIG5vdC1saW5rZWQgYW5kIGVvcyBwYWRzCi0JICBUaGlzIGlzIGFuIHVwZGF0ZSBvbiBjOWI2ODQ4ODg1ZjQ2NzVkNDQ3ZTgyM2M4ZmIxMTdlMjQ3NjU4MjUyCi0JICBtdWx0aXF1ZXVlOiBGaXggbm90LWxpbmtlZCBwYWQgaGFuZGxpbmcgYXQgRU9TCi0JICBXaGlsZSB0aGF0IGNvbW1pdCBkaWQgZml4IHRoZSBiZWhhdmlvdXIgaWYgdXBzdHJlYW0gc2VudCBhIEdTVF9FVkVOVF9FT1MsCi0JICBpdCB3b3VsZCBicmVhayB0aGUgc2FtZSBpc3N1ZSB3aGVuICpkb3duc3RyZWFtKiByZXR1cm5zIEdTVF9GTE9XX0VPUwotCSAgKHdoaWNoIGNhbiBoYXBwZW4gZm9yIGV4YW1wbGUgd2hlbiBkb3duc3RyZWFtIGRlY29kZXJzIHJlY2VpdmUgZGF0YQotCSAgZnJvbSBhZnRlciB0aGUgc2VnbWVudCBzdG9wKS4KLQkgIEdTVF9QQURfSVNfRU9TKCkgaXMgb25seSBUUlVFIHdoZW4gYSBHU1RfRVZFTlRfRU9TIGhhcyBmbG93biB0aHJvdWdoIGl0Ci0JICBhbmQgbm90IHdoZW4gYSBHU1RfRVZFTlRfRU9TIGhhcyBnb25lIHRocm91Z2ggaXQuCi0JICBJbiBvcmRlciB0byBoYW5kbGUgYm90aCBjYXNlcywgYWxzbyB0YWtlIGludG8gYWNjb3VudCB0aGUgbGFzdCBmbG93Ci0JICByZXR1cm4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzNzcwCi0KLTIwMTYtMDYtMzAgMTU6MDc6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RzdHJlYW1jb2xsZWN0aW9uLmM6Ci0JKiBnc3QvZ3N0c3RyZWFtY29sbGVjdGlvbi5oOgotCSogZ3N0L2dzdHN0cmVhbXMuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgc3RyZWFtczogc3ByaW5rbGUgc29tZSBTaW5jZTogbWFya2VycyBmb3IgZG9jcwotCi0yMDE2LTA2LTMwIDE0OjM3OjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IGFkZCBndGstZG9jIGJsdXJiIGZvciBuZXcgcGFkIHByb3BlcnR5Ci0KLTIwMTYtMDItMTAgMTE6NDI6MDQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBBZGQgYSBwYWQgcHJvcGVydHkgdG8gImdyb3VwIiBzdHJlYW1zCi0JICBXaGVuIHN5bmNpbmcgYnkgcnVubmluZyB0aW1lLCBtdWx0aXF1ZXVlIHdpbGwgdGhyb3R0bGUgdW5saW5rZWQgc3RyZWFtcwotCSAgYmFzZWQgb24gYSBnbG9iYWwgImhpZ2gtdGltZSIgYW5kIHRoZSBwZW5kaW5nICJuZXh0X3RpbWUiIG9mIGEgc3RyZWFtLgotCSAgVGhlIGlkZWEgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHVubGlua2VkIHN0cmVhbXMgdG8gYmUgImJlaGluZCIgdGhlIGdsb2JhbAotCSAgcnVubmluZyB0aW1lIG9mIGxpbmtlZCBzdHJlYW1zLCBzbyB0aGF0IGlmL3doZW4gdGhleSBnZXQgbGlua2VkIChsaWtlIHdoZW4KLQkgIHN3aXRjaGluZyB0cmFja3MpIGRlY29kaW5nL3BsYXliYWNrIGNhbiByZXN1bWUgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiBhcwotCSAgdGhlIG90aGVyIHN0cmVhbXMuCi0JICBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGFzc3VtZXMgZWxlbWVudHMgZG93bnN0cmVhbSB3aWxsIGhhdmUgYSBtb3JlIG9yIGxlc3MKLQkgIGVxdWFsIGJ1ZmZlcmluZy9sYXRlbmN5IC4uLiB3aGljaCBpc24ndCB0aGUgY2FzZSBmb3Igc3RyZWFtcyBvZiBkaWZmZXJlbnQKLQkgIHR5cGUuIFZpZGVvIGRlY29kZXJzIHRlbmQgdG8gaGF2ZSBoaWdoZXIgbGF0ZW5jeSAoYW5kIHRoZXJlZm9yZSBjb25zdW1lIG1vcmUKLQkgIGZyb20gdXBzdHJlYW0gdG8gb3V0cHV0IGEgZ2l2ZW4gZGVjb2RlZCBmcmFtZSkgY29tcGFyZWQgdG8gYXVkaW8gb25lcywgcmVzdWx0aW5nCi0JICBpbiB0aGUgY29tcHV0ZWQgImhpZ2hfdGltZSIgYmVpbmcgYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSB2aWRlbyBzdHJlYW0sCi0JICBtdWNoIGZ1cnRoZXIgdGhhbiB0aGUgYXVkaW8gc3RyZWFtcy4KLQkgIFRoaXMgbWVhbnMgdGhlIHVubGlua2VkIGF1ZGlvIHN0cmVhbXMgZW5kIHVwIGJlaW5nIHF1aXRlIGEgYml0IGFmdGVyIHRoZSBsaW5rZWQKLQkgIGF1ZGlvIHN0cmVhbXMsIHJlc3VsdGluZyBpbiBnYXBzIHdoZW4gc3dpdGNoaW5nIHN0cmVhbXMuCi0JICBJbiBvcmRlciB0byBtaXRpZ2F0ZSB0aGlzIGlzc3VlLCB0aGlzIHBhdGNoIGFkZHMgYSBuZXcgImdyb3VwLWlkIiBwYWQgcHJvcGVydHkKLQkgIHdoaWNoIGFsbG93cyB1c2VycyB0byAiZ3JvdXAiIHN0cmVhbXMgdG9nZXRoZXIuIENhbGN1bGF0aW5nIHRoZSBoaWdoLXRpbWUgd2lsbAotCSAgbm93IGJlIGRvbmUgbm90IG9ubHkgZ2xvYmFsbHksIGJ1dCBhbHNvIHBlciBncm91cC4gVGhpcyBlbnN1cmVzIHRoYXQgd2l0aGluCi0JICBhIGdpdmVuIGdyb3VwIHVubGlua2VkIHN0cmVhbXMgd2lsbCBiZSB0aHJvdHRsZWQgYnkgdGhhdCBncm91cCdzIGhpZ2gtdGltZQotCSAgaW5zdGVhZC4KLQkgIFRoaXMgZml4ZXMgZ2FwcyB3aGVuIHN3aXRjaGluZyBkb3duc3RyZWFtIGVsZW1lbnRzIChsaWtlIHN3aXRjaGluZyBhdWRpbyB0cmFja3MpLgotCi0yMDE1LTA2LTEyIDEwOjUzOjIzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbS1zZWxlY3Rpb24udHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHN0cmVhbWNvbGxlY3Rpb24uYzoKLQkqIGdzdC9nc3RzdHJlYW1jb2xsZWN0aW9uLmg6Ci0JKiBnc3QvZ3N0c3RyZWFtcy5jOgotCSogZ3N0L2dzdHN0cmVhbXMuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cmVhbS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cmVhbS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3Q6IE5ldyBTdHJlYW0gbGlzdGluZy9zZWxlY3Rpb24gc3lzdGVtCi0JICAqIEdzdFN0cmVhbQotCSAgKiBHc3RTdHJlYW1Db2xsZWN0aW9uCi0JICAqIEdTVF9FVkVOVF9TRUxFQ1RfU1RSRUFNUwotCSAgKiBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTgotCi0yMDE2LTA2LTI5IDIzOjI0OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIHBvbGw6ICNkZWZpbmUgRVdPVUxEQkxPQ0sgdG8gRUFHQUlOIGlmIGl0J3Mgbm90IGRlZmluZWQgb24gV2luZG93cwotCi0yMDE2LTA2LTI5IDE0OjA1OjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogRml4IGhhbmRsaW5nIG9mIHRoZSBHc3RQb2xsCi0JICBFc3BlY2lhbGx5IGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIHdhaXRpbmcgZm9yIGJ1ZmZlcnMgdG8gYmUgYXZhaWxhYmxlIGFnYWluLAotCSAgdGhlIGN1cnJlbnQgY29kZSB3YXMgd3JvbmcuIEZpeCB0aGlzIGFuZCBkb2N1bWVudCBjbGVhcmx5IGhvdyB0aGUgR3N0UG9sbCBpcwotCSAgc3VwcG9zZWQgdG8gYmUgdXNlZC4KLQkgIEFsc28gZml4IHNvbWUgcG90ZW50aWFsIHJhY2VzIHdpdGggcmVhZGluZyBmcm9tIHRoZSBHc3RQb2xsIGJlZm9yZSB3cml0aW5nCi0JICBhY3R1YWxseSBoYXBwZW5lZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc5NzkKLQotMjAxNi0wNi0yOSAxNDowMjo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBNYWtlIHN1cmUgdG8gYWx3YXlzIHJlYWQgdGhlIGNvbnRyb2wgYWZ0ZXIgcG9wcGluZyBhIG1lc3NhZ2UKLQkgIEl0IG1pZ2h0IGhhcHBlbiB0aGF0IHdlIHBvcHBlZCB0aGUgbWVzc2FnZSBiZWZvcmUgd3JpdGluZyBvZiB0aGUgY29udHJvbAotCSAgaGFwcGVuZWQuIEluIHRoaXMgY2FzZSB3ZSBqdXN0IGhhdmUgdG8gcmV0cnkgYWdhaW4gYSBiaXQgbGF0ZXIsIGFuZCBmYWlsdXJlIHRvCi0JICBkbyBzbyB3aWxsIGNhdXNlIGFuIGFkZGl0aW9uYWwgYnl0ZSBpbiB0aGUgY29udHJvbCBhbmQgdGhlIEdTb3VyY2UgLwotCSAgZ3N0X3BvbGxfd2FpdCgpIHRvIGFsd2F5cyB3YWtlIHVwIGFnYWluIGltbWVkaWF0ZWx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDM5NwotCi0yMDE2LTA2LTI5IDEzOjM3OjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIHN5c3RlbWNsb2NrOiBJbXByb3ZlIEdzdFBvbGwgaGFuZGxpbmcgYW5kIGRvbid0IGNoZWNrIGZvciBpbXBvc3NpYmxlIGVycm5vIHZhbHVlcwotCSAgQWxzbyBqdXN0IHJlYWQvd3JpdGUgY29udHJvbCBldmVyeSB0aW1lLCBHc3RQb2xsIGlzIG9wdGltaXplZCBieSBpdHNlbGYKLQkgIGFscmVhZHkgdG8gb25seSBkbyBJL08gaWYgc3dpdGNoaW5nIGJldHdlZW4gZW1wdHkgYW5kIG9uZSBieXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDM5NwotCi0yMDE2LTA2LTI5IDEzOjM1OjM1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9sbDogQ2xhcmlmeSB3aGVuIEZBTFNFIGlzIHJldHVybmVkIGZyb20gcmVhZC93cml0ZV9jb250cm9sKCkKLQkgIEFuZCBhbHNvIG1lbnRpb24gd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWVzIG9mIGVycm5vIGFyZSBnb2luZyB0byBiZS4KLQkgIHdyaXRlX2NvbnRyb2woKSB3aWxsIG9ubHkgZXZlciByZXR1cm4gRkFMU0UgaWYgdGhlcmUgd2FzIGEgY3JpdGljYWwgZXJyb3IuIEl0Ci0JICB3aWxsIG5ldmVyIHJldHVybiBiZWNhdXNlIG9mIEVJTlRSLCBFQUdBSU4gb3IgRVdPVUxEQkxPQ0suCi0JICByZWFkX2NvbnRyb2woKSB3aWxsIHJldHVybiBGQUxTRSBpZiB0aGVyZSB3YXMgbm8gYnl0ZSB0byByZWFkLCBpbiB3aGljaCBjYXNlCi0JICBlcnJubyB3b3VsZCBiZSBFV09VTERCTE9DSy4KLQkgIEluIGFsbCBvdGhlciBjYXNlcyB0aGVyZSB3YXMgYSBjcml0aWNhbCBlcnJvci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAzOTcKLQotMjAxNi0wNi0yOSAxMzoyNjo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIHBvbGw6IHNldF9jb250cm9sbGFibGUoKSwgcmVzdGFydCgpIGFuZCBzZXRfZmx1c2hpbmcoKSBhcmUgb25seSB2YWxpZCBmb3Igbm9uLXRpbWVyIEdzdFBvbGxzCi0JICBPbiB0aW1lciBHc3RQb2xscyBpdCB3aWxsIGNhdXNlIHRoZSBjb250cm9sIHNvY2tldCBzdGF0ZSB0byBiZWNvbWUKLQkgIGluY29uc2lzdGVudCBhcyBub3cgb25lIGxlc3MgcmVhZF9jb250cm9sKCkgdGhhbiB3cml0ZV9jb250cm9sKCkgYmUgd291bGQKLQkgIG5lZWRlZC4KLQkgIFNpbWlsYXJseSwgcmVhZF9jb250cm9sKCkgYW5kIHdyaXRlX2NvbnRyb2woKSBhcmUgb25seSB2YWxpZCBvbiB0aW1lcgotCSAgR3N0UG9sbHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMzk3Ci0KLTIwMTYtMDYtMjkgMTM6MTE6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3Rwb2xsLmg6Ci0JICBwb2xsOiBXYXJuIGlmIHRoZSByZXR1cm4gdmFsdWUgb2YgZ3N0X3BvbGxfcmVhZF9jb250cm9sKCkgaXMgdW51c2VkCi0JICBUaGlzIG1pZ2h0IGZhaWwgZXZlbiB1bmRlciBjb3JyZWN0IHVzYWdlLCBlLmcuIGlmIHJlYWRfY29udHJvbCgpIGlzIGNhbGxlZAotCSAgZnJvbSBhbm90aGVyIHRocmVhZCBiZWZvcmUgd3JpdGVfY29udHJvbCgpIGZpbmlzaGVkIGluIGFub3RoZXIuIEl0IGhhcyB0byBiZQotCSAgcmV0cmllZCB0aGVuLCBvciBvdGhlciBtZWFzdXJlcyBoYXZlIHRvIGJlIHRha2VuLCBkZXBlbmRpbmcgb24gaG93IGl0IGlzIHVzZWQKLQkgIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDM5NwotCi0yMDE2LTA2LTI5IDE4OjU3OjQyICswMjAwICBNYXR0aGV3IEdydWVua2UgPG1ncnVlbmtlQHR5Y29pbnQuY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9sbDogRml4IHZhcmlvdXMgcmFjZSBjb25kaXRpb25zIHdpdGggcmVhZF9jb250cm9sKCkgYW5kIHdyaXRlX2NvbnRyb2woKQotCSAgVGhpcyBhZGRyZXNzZXMgc2xpZ2h0bHkgZGlmZmVyZW50IHJhY2UgY29uZGl0aW9ucyBvbiBMaW51eCBhbmQgV2luZG93cywgYW5kCi0JICBmaXhlcyBnc3RfcG9sbF9yZWFkX2NvbnRyb2woKSB3aGVuIGNvbnRyb2xfcGVuZGluZyA9PSAwLgotCSAgT24gTGludXgsIHRoZSBzb2NrZXRwYWlyKCkgdXNlZCBmb3IgY29udHJvbCBzaG91bGQgbm90IGJlIG1hZGUgT19OT05CTE9DSy4KLQkgIElmIHRoZXJlJ3MgYW55IHByb3BhZ2F0aW9uIGRlbGF5IGJldHdlZW4gc2V0LT5jb250cm9sX3dyaXRlX2ZkLmZkIGFuZAotCSAgc2V0LT5jb250cm9sX3JlYWRfZmQuZmQsIGV2ZW4gdGhlIG11dGV4IG5vdyBoZWxkIHdpbGwgbm90IGJlIHN1ZmZpY2llbnQgdG8KLQkgIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbi4gIFRoZXJlJ3Mgbm8gYmVuZWZpdCB0byB1c2luZyBPX05PTkJMT0NLLCBoZXJlLgotCSAgT25seSBsaWFiaWxpdGllcy4KLQkgIEZvciBXaW5kb3dzLCBpdCdzIG5lY2Vzc2FyeSB0byBmaXggdGhlIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGVzdGluZwotCSAgc2V0LT5jb250cm9sX3BlbmRpbmcgYW5kIHBlcmZvcm1pbmcgV0FLRV9FVkVOVCgpL1JFTEVBU0VfRVZFTlQoKS4gIFRoaXMgaXMKLQkgIGFjY29tcGxpc2hlZCBieSBhY3F1aXJpbmcgYW5kIGhvbGRpbmcgc2V0LT5sb2NrLCBmb3IgYm90aCBvZiB0aGVzZSBvcGVyYXRpb25zLgotCSAgV2UgY291bGQgb3B0aW1pemUgdGhlIExpbnV4IHZlcnNpb24gYnkgbWFraW5nIHRoaXMgV2luZG93cy1zcGVjaWZpYy4KLQkgIEZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiwgV2luZG93cycgUkVMRUFTRV9FVkVOVCgpCi0JICBoYXMgYWxzbyBiZWVuIG1hZGUgdG8gYmxvY2ssIGFsdGhvdWdoIGl0IHNob3VsZCBuZXZlciBoYXBwZW4uCi0JICBBbHNvLCBjaGFuZ2VkIHJlbGVhc2Vfd2FrZXVwKCkgdG8gcmV0dXJuIFRSVUUgYW5kIGRlY3JlbWVudCBjb250cm9sX3BlbmRpbmcKLQkgIG9ubHkgd2hlbiA+IDAuICBGdXJ0aGVybW9yZSwgUkVMRUFTRV9FVkVOVCgpIGlzIGNhbGxlZCBvbmx5IHdoZW4KLQkgIGNvbnRyb2xfcGVuZGluZyA9PSAxLgotCSAgRmluYWxseSwgY2hhbmdlZCBjb250cm9sX3BlbmRpbmcgdG8gdXNlIG5vcm1hbCwgbm9uLWF0b21pYyBhcml0aG1ldGljCi0JICBvcGVyYXRpb25zLCBzaW5jZSBpdCdzIG5vdyBwcm90ZWN0ZWQgYnkgc2V0LT5sb2NrLgotCSAgTm90ZTogZXZlbiB0aG91Z2ggdGhlIHVuZGVybHlpbmcgc2lnbmFsaW5nIG1lY2hhbmlzbXMgYXJlIGJsb2NraW5nLAotCSAgcmVsZWFzZV93YWtldXAoKSBpcyBlZmZlY3RpdmVseSBub24tYmxvY2tpbmcsIGFzIGl0IHdpbGwgb25seSBhdHRlbXB0IHRvIHJlYWQKLQkgIGZyb20gY29udHJvbF9yZWFkX2ZkLmZkIGFmdGVyIGEgYnl0ZSBoYXMgYmVlbiB3cml0dGVuIHRvIGNvbnRyb2xfd3JpdGVfZmQuZmQKLQkgIG9yIFdhaXRGb3JTaW5nbGVPYmplY3QoKSBhZnRlciBpdCdzIGJlZW4gc2lnbmFsZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMzk3Ci0KLTIwMTYtMDYtMjggMTU6MDE6MTcgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IGNoYWluIHVwIEdPYmplY3Q6OmNvbnN0cnVjdGVkKCkgdG8gdGhlIHBhcmVudCBjbGFzcycgaW1wbGVtZW50YXRpb24KLQkgIE5lZWRlZCBzbyBHc3RCdXMgY2FuIGJlIHRyYWNrZWQgYnkgdGhlIGxlYWtzIHRyYWNlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjgxNDEKLQotMjAxNi0wNi0yNCAwNToyNjowOSArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JICBnc3Rjb25maWcuaDogRG9uJ3QgdXNlIGV4dGVybiB3aXRoIGRsbGV4cG9ydAotCSAgR0NDIGVtaXRzIGFuIGVycm9yIGZvciB0aGlzIHdpdGggLVdlcnJvcjoKLQkgIHBsdWdpbi5jOjIyOjE6IGVycm9yOiAnZ3N0X3BsdWdpbl9kZXNjJyBpbml0aWFsaXplZCBhbmQgZGVjbGFyZWQgJ2V4dGVybicgWy1XZXJyb3JdCi0JICBUaGlzIG1hdGNoZXMgaG93IGdsaWIgZG9lcyBzeW1ib2wgZXhwb3J0aW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzQ2MwotCi0yMDE2LTA2LTIxIDE5OjQ5OjE1ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIHdpbjMyOiBEb24ndCB1c2UgZGxsZXhwb3J0L2ltcG9ydCB3aGVuIG9ubHkgYnVpbGRpbmcgc3RhdGljYWxseQotCSAgSWYgdGhlIHByb3RvdHlwZXMgaW4gdGhlIHB1YmxpYyBBUEkgaGF2ZSBkbGxpbXBvcnQgaW4gdGhlbSB3aGVuIGJ1aWxkaW5nCi0JICBzdGF0aWNhbGx5IG9uIFdpbmRvd3MsIHRoZSBjb21waWxlciB3aWxsIGxvb2sgZm9yIHN5bWJvbHMgd2l0aCBzeW1ib2wKLQkgIG1hbmdsaW5nIGFuZCBpbmRpcmVjdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgRExMLiBUaGlzIHdpbGwgY2F1c2UgYSBidWlsZAotCSAgZmFpbHVyZSB3aGVuIHRyeWluZyB0byBsaW5rIHRlc3RzL2V4YW1wbGVzL2V0Yy4KLQkgIEV4dGVybmFsIHVzZXJzIG9mIEdTdHJlYW1lciBhbHNvIG5lZWQgdG8gZGVmaW5lIC1ER1NUX1NUQVRJQ19DT01QSUxBVElPTgotCSAgaWYgdGhleSB3YW50IHRvIGxpbmsgdG8gc3RhdGljIGdzdHJlYW1lciBsaWJyYXJpZXMgb24gV2luZG93cy4KLQkgIEEgc2ltaWxhciB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2ggaGFzIGJlZW4gY29tbWl0dGVkIHRvIGFsbCBnc3RyZWFtZXIKLQkgIHJlcG9zaXRvcmllcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc0NjMKLQotMjAxNi0wNi0yMSAxMTo0NToyNiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYWMyZjY0NyB0byBmMzYzYjMyCi0KLTIwMTYtMDYtMTUgMTY6MjQ6MjcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZTIuYzoKLQkgIHRlc3RzOiBhZGQgYSB0ZXN0IGZvciBzbWFsbCByaW5nIGJ1ZmZlciBzaXplcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzY4OAotCi0yMDE2LTA2LTE1IDEzOjQzOjU5ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZml4IGNyYXNoIGRlbGV0aW5nIGN1cnJlbnQgcmVnaW9uIGZvciBzbWFsbCByaW5nIGJ1ZmZlcnMKLQkgIEVuc3VyZSB3ZSBkbyBub3QgYXR0ZW1wdCB0byBkZXN0cm95IHRoZSBjdXJyZW50IHJhbmdlLiBEb2luZyBzbwotCSAgY2F1c2VzIHRoZSBjdXJyZW50IG9uZSB0byBiZSBsZWZ0IGRhbmdsaW5nLCBhbmQgaXQgbWF5IGJlIGRlcmVmZXJlbmNlZAotCSAgbGF0ZXIsIGxlYWRpbmcgdG8gYSBjcmFzaC4KLQkgIFRoaXMgY2FuIGhhcHBlbiB3aXRoIGEgdmVyeSBzbWFsbCBxdWV1ZTIgcmluZyBidWZmZXIgKDEwMDAwIGJ5dGVzKQotCSAgYW5kIDQga0IgYnVmZmVycy4KLQkgIHJlcHJvIGNhc2U6Ci0JICBnc3QtbGF1bmNoLTEuMCBmYWtlc3JjIHNpemV0eXBlPTIgc2l6ZW1heD00MDk2ICEgXAotCSAgcXVldWUyIHJpbmctYnVmZmVyLW1heC1zaXplPTEwMDAgISBmYWtlc2luayBzeW5jPXRydWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc2ODgKLQotMjAxNi0wNi0yMCAxMTozNDo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSAgdGVzdHM6IGdzdG9iamVjdDogZml4IHR5cG8gaW4gdGVzdCBuYW1lCi0KLTIwMTYtMDYtMTYgMTQ6MDg6MDEgLTA3MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC10cmFjaW5nLnR4dDoKLQkgIGRvY3MvZGVzaWduL3BhcnQtdHJhY2luZzogZml4IHJlZmVyZW5jZSB0byByZW5hbWVkIGZ1bmMKLQotMjAxNi0wNi0wOCAxMjozNDo1MyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiBQcm9wZXJseSBoYW5kbGUgcmV0dXJuIHZhbHVlIHdoZW4gb25seSAxIHBhZAotCSAgVGhpcyBwYXRjaCBoYW5kbGUgdGhlIGNhc2Ugd2hlbiB5b3UgaGF2ZSAxIHBhZCAoc28gdGhlIGZhc3QgcGF0aCBpcwotCSAgYmVpbmcgdXNlZCkgYnV0IHRoaXMgcGFkIGlzIHJlbW92ZWQuIElmIHdlIGFyZSBpbiBhbGxvdy1ub3QtbGlua2VkLCB3ZQotCSAgc2hvdWxkIHJldHVybiBHU1RfRkxPV19PSywgb3RoZXJ3aXNlLCB3ZSBzaG91bGQgcmV0dXJuIEdTVF9GTE9XX1VOTElOS0VECi0JICBhbmQgaWdub3JlIHRoZSBtZWFuaW5nbGVzcyByZXR1cm4gdmFsdWUgb2J0YWluZWQgZnJvbSBwdXNoaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzQxMwotCi0yMDE2LTA2LTE2IDE1OjUyOjE2ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBzY3JpcHRzL2dzdC1wbG90LXRyYWNlcy5zaDoKLQkgIGdzdC1wbG90LXRyYWNlcy5zaDogYWRkIGEgc2NyaXB0IHRvIHBsb3QgZ3N0LXRyYWNlciBncmFwaHMKLQkgIFRoZSBzY3JpcHQgZXh0cmFjdHMgY3B1LXVzYWdlIGRhdGEgZnJvbSBhIHRyYWNlbG9nIGFuZCBwbG90cyBpdCB2aWEgZ251cGxvdC4KLQotMjAxNi0wNi0xNSAxNjoxMjoyMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGRldmljZS5jOgotCSAgZGV2aWNlOiBGaXggdHlwbwotCSAgcGFyYW1hdGVyIC0+IHBhcmFtZXRlcgotCi0yMDE2LTA2LTE0IDE5OjE2OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgaW5mbzogZmxlc2ggb3V0IEdTVF9QVFJfRk9STUFUIGRvY3MgYSBiaXQKLQotMjAxNi0wNi0xMyAxODozMzoyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IFVwZGF0ZSBzdGFydCB0aW1lIHdoZW4gbG9zaW5nIHN0YXRlIG9ubHkgaWYgd2Ugd2VyZSBpbiBQTEFZSU5HCi0JICBJZiB3ZSB3ZXJlIGluIFBBVVNFRCwgdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBhbmQgYmFzZSB0aW1lIGRvbid0IGhhdmUgbXVjaCB0bwotCSAgZG8gd2l0aCB0aGUgcnVubmluZyB0aW1lIGFueW1vcmUgYXMgdGhlIGNsb2NrIG1pZ2h0IGhhdmUgYWR2YW5jZWQgd2hpbGUgd2UKLQkgIHdlcmUgUEFVU0VELiBUaGUgc3lzdGVtIGNsb2NrIGRvZXMgdGhhdCBmb3IgZXhhbXBsZSwgYXVkaW8gY2xvY2tzIG9mdGVuIGRvbid0LgotCSAgVXBkYXRpbmcgdGhlIHN0YXJ0IHRpbWUgaW4gUEFVU0VEIHdpbGwgY2F1c2UgYSkgdGhlIHdyb25nIHBvc2l0aW9uIHRvIGJlCi0JICByZXBvcnRlZCwgYikgc3RlcCBldmVudHMgdG8gc3RlcCBub3QganVzdCB0aGUgcmVxdWVzdGVkIGFtb3VudCBidXQgdGhlIGFtb3VudAotCSAgb2YgdGltZSB3ZSBzcGVudCBpbiBQQVVTRUQuIFRoZSBzdGFydCB0aW1lIHNob3VsZCBvbmx5IGV2ZXIgYmUgdXBkYXRlZCB3aGVuCi0JICBnb2luZyBmcm9tIFBMQVlJTkcgdG8gUEFVU0VEIHRvIHJlbWVtYmVyIHRoZSBjdXJyZW50IHJ1bm5pbmcgdGltZSAodG8gYmUgYWJsZQotCSAgdG8gY29tcGVuc2F0ZSBsYXRlciB3aGVuIGdvaW5nIHRvIFBMQVlJTkcgZm9yIHRoZSBjbG9jayB0aW1lIGFkdmFuY2luZyB3aGlsZQotCSAgUEFVU0VEKSwgbm90IHdoZW4gd2UgYXJlIGFscmVhZHkgaW4gUEFVU0VELgotCSAgQmFzZWQgb24gYSBwYXRjaCBieSBLaXNob3JlIEFyZXBhbGxpIDxraXNob3JlLmFyZXBhbGxpQGdtYWlsLmNvbT4KLQkgIFRoZSB1cGRhdGluZyBvZiB0aGUgc3RhcnQgdGltZSB3aGVuIHRoZSBzdGF0ZSBpcyBsb3N0IHdhcyBhZGRlZCBpbiBjb21taXQKLQkgIGJhOTQzYTgyYzBiYmZkMTdjOWVlOWY1MDY4ZDQ0YzlkOTI3NGZkMTMgdG8gZml4IHRoZSBwb3NpdGlvbiByZXBvcnRpbmcgd2hlbgotCSAgdGhlIHN0YXRlIGlzIGxvc3QuIFRoaXMgc3RpbGwgd29ya3MgY29ycmVjdGx5IGFmdGVyIHRoaXMgY2hhbmdlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTI4OQotCi0yMDE2LTA2LTExIDIyOjE4OjA2ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IExvZyBwYWQgb2Zmc2V0cyBhcyBzaWduZWQgdGltZXMKLQotMjAxNi0wNi0xMSAyMTo1NjoxOSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBBbHNvIGNoZWNrIHRoZSBudW1iZXIgb2Ygc2VnbWVudCBldmVudHMgYW5kIGlmIG90aGVyIHNlcmlhbGl6ZWQgZXZlbnRzIGFuZCBxdWVyaWVzIHRyaWdnZXIgc2VnbWVudCB1cGRhdGluZyB0b28KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUwNDkKLQotMjAxNi0wNi0xMSAyMTozNzo0NyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBBZGQgdW5pdCB0ZXN0IGZvciBwYWQgb2Zmc2V0IGhhbmRsaW5nIG9uIHNyYyBwYWRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1MDQ5Ci0KLTIwMTYtMDYtMDcgMTE6MzI6NDcgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBhZGFwdGVyOiBSZW5hbWUgZnVuY3Rpb25zIGFuZCBpbXBsZW1lbnQgbmV3IGZ1bmN0aW9ucywgdXBkYXRlIHRlc3QKLQkgIFdlIGRvbid0IGRvIGNhbGN1bGF0aW9ucyB3aXRoIGRpZmZlcmVudCB1bml0cyAoYnVmZmVyIG9mZnNldHMgYW5kIGJ5dGVzKQotCSAgYW55bW9yZSBidXQgaGF2ZSBmdW5jdGlvbnMgZm9yOgotCSAgMSkgZ2V0dGluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNpbmNlIHRoZSBsYXN0IGRpc2NvbnQKLQkgIDIpIGdldHRpbmcgdGhlIG9mZnNldCAoYW5kIHB0cy9kdHMpIGF0IHRoZSBsYXN0IGRpc2NvbnQKLQkgIGFuZCB0aGUgcHJldmlvdXNseSBhZGRlZCBmdW5jdGlvbiB0byBnZXQgdGhlIGxhc3Qgb2Zmc2V0IGFuZCBpdHMgZGlzdGFuY2UgZnJvbQotCSAgdGhlIGN1cnJlbnQgYWRhcHRlciBwb3NpdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2NDcKLQotMjAxNi0wNS0xOSAxMDozMTowMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGFkYXB0ZXI6IEFkZCBtZXRob2RzIHRvIHF1ZXJ5IGN1cnJlbnQgb2Zmc2V0Ci0JICBBUEk6IGdzdF9idWZmZXJfcHJldl9vZmZzZXQKLQkgIEFQSTogZ3N0X2J1ZmZlcl9nZXRfb2Zmc2V0X2Zyb21fZGlzY29udAotCSAgVGhlIGdzdF9idWZmZXJfZ2V0X29mZnNldF9mcm9tX2Rpc2NvbnQoKSBtZXRob2QgYWxsb3dzIHJldHJpZXZpbmcgdGhlIGN1cnJlbnQKLQkgIG9mZnNldCBiYXNlZCBvbiB0aGUgR1NUX0JVRkZFUl9PRkZTRVQgb2YgdGhlIGJ1ZmZlcnMgdGhhdCB3ZXJlIHB1c2hlZCBpbi4KLQkgIFRoZSBvZmZzZXQgd2lsbCBiZSBzZXQgaW5pdGlhbGx5IGJ5IHRoZSBHU1RfQlVGRkVSX09GRlNFVCBvZgotCSAgRElTQ09OVCBidWZmZXJzLCBhbmQgdGhlbiBpbmNyZW1lbnRlZCBieSB0aGUgc2l6ZXMgb2YgdGhlIGZvbGxvd2luZwotCSAgYnVmZmVycy4KLQkgIFRoZSBnc3RfYnVmZmVyX3ByZXZfb2Zmc2V0KCkgbWV0aG9kIGFsbG93cyByZXRyaWV2ZW50IHRoZSBwcmV2aW91cwotCSAgR1NUX0JVRkZFUl9PRkZTRVQgcmVnYXJkbGVzcyBvZiBmbGFncy4gSXQgd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzCi0JICB0aGUgb3RoZXIgZ3N0X2J1ZmZlcl9wcmV2XyooKSBtZXRob2RzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjY0NwotCi0yMDE2LTA2LTA5IDE3OjQyOjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JICBnc3Rjb25maWcuaC5pbjogaW5kZW50ICNpZiAjZWxzZSBqdW5nbGUgZm9yIGJldHRlciByZWFkYWJpbGl0eQotCi0yMDE2LTA2LTA4IDEyOjExOjE5ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXRpbHM6IEFkZCBnc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcoKSBmb3IgY29uc2lzdGVuY3kKLQkgIFdlIGFscmVhZHkgaGFkIGEgX2Z1bGwoKSB2ZXJzaW9uLCBidXQgaGF2aW5nIHRoYXQgYWxvbmUgc2VlbXMgaW5jb25zaXN0ZW50LgotCSAgQWRkIGEgbm9uLWZ1bGwgdmVyc2lvbiB0aGF0IG1pcnJvcnMgdGhlIGJlaGF2aW91ciBvZiBnc3RfcGFkX2xpbmsoKSB2cwotCSAgZ3N0X3BhZF9saW5rX2Z1bGwoKS4KLQotMjAxNi0wNS0yMiAxMzoxMDowNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogTWFrZSBzdXJlIERJU0NPTlQgZmxhZ3MgYXJlIHByb3Blcmx5IHByb3BhZ2F0ZWQKLQkgIElmIHdlIGRyb3AgYSBmcmFtZSB0aGF0IGNvbnRhaW5lZCBhIGRpc2NvbnRpbnVpdHksIHdlIG11c3QgcmVtZW1iZXIKLQkgIHRoYXQgZm9yIHRoZSBuZXh0IGZyYW1lIHRoYXQgKndpbGwqIGJlIHB1c2hlZCBkb3duc3RyZWFtLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Njc5NQotCi0yMDE2LTA2LTA0IDEzOjMxOjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuYzoKLQkgIGRldmljZXByb3ZpZGVyOiByZW1vdmUgYmFzZV9jbGFzc19maW5hbGl6ZSBmdW5jdGlvbgotCSAgSXQncyBub3QgZ29pbmcgdG8gZ2V0IGNhbGxlZCBhbnl3YXkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NTQwCi0KLTIwMTYtMDYtMDQgMTM6MTE6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiByZW1vdmUgYmFzZV9jbGFzc19maW5hbGl6ZV9mdW5jIHdoaWNoIGlzIG5ldmVyIGNhbGxlZAotCSAgV29uJ3QgYmUgY2FsbGVkIGZvciBzdGF0aWMgdHlwZXMsIHNvIG5vIHBvaW50IGtlZXBpbmcgaXQgYXJvdW5kLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTU0MAotCi0yMDE2LTA2LTAzIDEzOjU1OjQ0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGVha3MuYzoKLQkgIHRyYWNlcnM6IGxlYWtzOiBzb21lIG1pY3JvLW9wdGltaXNhdGlvbnMKLQkgIC0gd2Uga25vdyBudW1iZXIgb2YgZmlsdGVyIGl0ZW1zIGlzIG5vdCBnb2luZyB0byBjaGFuZ2UsCi0JICBidXQgY29tcGlsZXIgZG9lc24ndAotCSAgLSBvbmx5IGRvIEdTVF9JU19UUkFDRVIgY2hlY2sgZm9yIEdPYmplY3RzLCBub3QgbWluaSBvYmplY3RzCi0JICAtIHVzZSBub24tdHlwZSBjaGVjayBjYXN0IG1hY3JvcyBpbiBwZXJmb3JtYW5jZSBjcml0aWNhbCBwYXRocwotCi0yMDE2LTA1LTEwIDA5OjI5OjEyICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC10cmFjaW5nLnR4dDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsZWFrcy5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxlYWtzLmg6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0dHJhY2Vycy5jOgotCSAgdHJhY2VyczogYWRkIGxlYWtzIHRyYWNlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTA1MgotCi0yMDE2LTA1LTMwIDEyOjExOjEzICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBnc3QvZ3N0dGFzay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBVc2UgTUFZX0JFX0xFQUtFRF9GTEFHCi0JICBUaGlzIGhlbHBzIGhhdmluZyAibWFrZSBjaGVjayIgcGFzc2luZyB3aXRoIHRoZSBsZWFrcyB0cmFjZXIgZW5hYmxlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjYwMDgKLQotMjAxNi0wNS0wOSAxNjozMTozNiArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuYzoKLQkqIGdzdC9nc3R0cmFjZXJ1dGlscy5oOgotCSAgdHJhY2luZzogYWRkIGhvb2tzIHdoZW4gb2JqZWN0cyBvciBtaW5pb2JqZWN0cyBhcmUgY3JlYXRlZCBhbmQgZGVzdHJveWVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1MDUyCi0KLTIwMTYtMDUtMDkgMTY6NTY6NTYgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3RfZGVpbml0OiBtb3ZlIGRvd24gdHJhY2VycyBjbGVhbmluZwotCSAgV2Ugd2FudCB0aGUgdHJhY2VyIGRldGVjdGluZyBsZWFrcyB0byBiZSBmaW5hbGl6ZWQgYXMgbGF0ZSBhcyBwb3NzaWJsZQotCSAgdG8gZ2l2ZSB0aGUgY2hhbmNlIHRvIG90aGVyIGdzdCBjb21wb25lbnRzIHRvIGJlIHByb3Blcmx5IGNsZWFuZWQgZmlyc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1MDUyCi0KLTIwMTYtMDUtMTAgMTE6MDY6NDIgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6Ci0JICB0ZXN0czogcGx1Z2luOiByZW1vdmUgZmVhdHVyZSByZWZjb3VudCBhc3NlcnQKLQkgIFRoaXMgY2hlY2sgZmFpbHMgaWYgb25lLCBvciBtb3JlLCB0cmFjZXJzIGFyZSBsb2FkZWQgd2hpbGUgcnVubmluZyB0aGUKLQkgIHRlc3QuIFRoZSBuZXcgImxlYWtzIiB0cmFjZXIgd2lsbCBiZSBhYmxlIHRvIGNoZWNrIGZvciBsZWFrcyBhbnl3YXkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1MDUyCi0KLTIwMTYtMDQtMTQgMTI6MjU6NDMgKzAzMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICB0cmFjZXJyZWNvcmQ6IGFsbG93IEdfVFlQRV9QT0lOVEVSIGZvciBmaWVsZCB0eXBlcwotCSAgVHJhY2VycyBtYXkgd2FudCB0byBkaXNwbGF5IHRoZSBhZGRyZXNzIG9mIGFuIG9iamVjdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUwNTIKLQotMjAxNi0wNS0zMCAxMzo0MjozNiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSAgZ3N0b2JqZWN0OiBzcGxpdCB1cCBuYW1lIHRlc3RzCi0JICBJdCBpcyBiZXR0ZXIgdG8gaGF2ZSBzZXBhcmF0ZSB0ZXN0czoKLQkgIDEpIHRoZSB0ZXN0IG5hbWUgd2lsbCB0ZWxsIHdoYXQgaXMgYnJvZWtuIHdoZW4gdGhlIHRlc3QgZmFpbHMKLQkgIDIpIHdlIHN0aWxsIHJ1biB0aGUgb3RoZXIgdGVzdHMgd2hlbiBvbmUgYXNzZXJ0IGZhaWxzCi0JICAzKSB0aGUgdGVzdHMgYXJlIGVhc2llciB0byB1bmRlcnN0YW5kCi0JICA0KSB3ZSBkb24ndCByZWx5IG9uIHNpZSBlZmZlY3Qgb2YgcHJldmlvdXMgYWN0aW9ucwotCSAgNSkgLi4uCi0JICBBbHNvIGl4IHRoZSBhc3NlcnRpb24gbWVzc2FnZSBmb3IgdGhlIG5hbWUgY2hlY2tzIChHc3QgLT4gZmFrZW9iamVjdCkuCi0KLTIwMTYtMDUtMzAgMDI6MDY6MDEgLTA3MDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtdHJhY2luZy50eHQ6Ci0JICBkZXNpZ246IHVwZGF0ZSBkZXNpZ24gZG9jCi0JICBTb21lIG9mIHRoZSBhcGkgd2FzIHJlbmFtZWQgYmVmb3JlIHRoZSBtZXJnZS4KLQotMjAxNi0wNS0zMCAwMjowNDoxOCAtMDcwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBkb2NzOiB4cmVmIHRoZSBmcmVlIGZ1bmN0aW9uIGFuZCBleHBhbmQgYWxsb2NhdGlvbiBxdWVyeSBkb2NzCi0JICBBZGQgeHJlZnMgZm9yIGhvdyB0byBwYXJzZSBwb29sIGRldGFpbHMgZnJvbSBhbiBhbGxvY2F0aW9uIHF1ZXJ5LgotCi0yMDE2LTA1LTI2IDE0OjQzOjEwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkgIG9iamVjdDogQWRkIF9zZXRfbmFtZSgpIHRlc3Qgb24gcGFyZW50ZWQgb2JqZWN0Ci0JICBUaGlzIGlzIG5vdCBhbGxvd2VkLCBhbmQgc2V0X25hbWUoKSBzaG91bGQgZmFpbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY5MjMKLQotMjAxNi0wNS0yNiAxNDo0MTozOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6Ci0JICBvYmplY3Q6IENoZWNrIHRoYXQgbmFtZSBjaGFuZ2UgYXJlIG5vdGlmaWVkIG9uY2UKLQkgIEdPYmplY3QgYWxsb3cgY2FsbGluZyBnX29iamVjdF9ub3RpZnkoKSB3aXRoaW4gc2V0X3Byb3BlcnR5KCkgYW5kCi0JICB3b24ndCBub3RpZnkgaXQgdHdpY2UuIEFzIGl0IHdhcyByYWlzZWQgZHVyaW5nIHJldmlldywgYWRkIGEgdW5pdCB0ZXN0IHRvCi0JICBtYWtlIHN1cmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2OTIzCi0KLTIwMTYtMDUtMjYgMTM6MTc6MzcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgb2JqZWN0OiBOb3RpZnkgbmFtZSBjaGFuZ2Ugd2hlbiB1c2luZyBfc2V0X25hbWUoKQotCSAgVGhlcmUgd2FzIGEgMC4xMSBGSVhNRSBhYm91dCBub3RpZnlpbmcgdGhlIG5hbWUgY2hhbmdlIG9yIHJlbW92aW5nIHRoYXQKLQkgIGZ1bmN0aW9uLiBDbGVhcmx5IHdlIGNhbid0IHJlbW92ZSB0aGlzIGZ1bmN0aW9uLCBzbyBsZXQncyBub3RpZnkgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2OTIzCi0KLTIwMTYtMDUtMjUgMTU6MzA6MjEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgZ3N0X3ByaXZhdGU6IEZpeCBnc3Rjb25maWcgaW5jbHVkZQotCSAgU2luY2UgaXQncyBhIGdlbmVyYXRlZCBoZWFkZXIsIHdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgZ3N0IHN1YmRpciBzbwotCSAgdGhhdCBpdCBnZXRzIHByb3Blcmx5IGluY2x1ZGVkIGluIG91dC1vZi1kaXIgY29tcGlsYXRpb24KLQotMjAxNi0wNS0yNSAxMDo0ODowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICBnc3Q6IG1ha2Ugc3VyZSB0byBpbmNsdWRlIGdzdGNvbmZpZy5oIGFsc28gaW4gZ3N0X3ByaXZhdGUuaAotCSAgRm9yIEdTVF9FWFBPUlQgZGVmaW5lIGFuZCBhbHNvIHRoaW5ncyBsaWtlIEdTVF9ESVNBQkxFX1JFR0lTVFJZLgotCSAgSG9wZWZ1bGx5IGZpeGVzIHRoZSBmb2xsb3dpbmcgYnVpbGQgZmFpbHVyZSBvbiBjZXJiZXJvLWNyb3NzLW1pbmd3MzI6Ci0JICBoZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jOjUwOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfaW1wX19fZ3N0X2Rpc2FibGVfcmVnaXN0cnlfY2FjaGUnCi0KLTIwMTYtMDUtMjQgMDA6NDA6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBnLWk6IHBhc3MgY29tcGlsZXIgZW52IHRvIGctaXItc2Nhbm5lcgotCSAgSXQncyB3aGF0IGludHJvc3BlY3Rpb24ubWFrIGRvZXMgYXMgd2VsbC4gU2hvdWxkCi0JICBmaXggc3B1cmlvdXMgYnVpbGQgZmFpbHVyZXMgb24gZ25vbWUtY29udGludW91cy4KLQotMjAxNi0wNS0yMyAyMToxNTo0OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSAgZ3N0OiBnLWk6IHBhc3MgY29tcGlsZXIgd2l0aCBxdW90ZXMKLQkgIFNvIENDPSJjY2FjaGUgZ2NjIiB3b3JrcyBwcm9wZXJseS4KLQotMjAxNi0wNS0yMyAyMTowNjo1MyArMDEwMCAgUmF5IFN0cm9kZSA8cnN0cm9kZUByZWRoYXQuY29tPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBnc3Q6IGF0dGVtcHQgdG8gZml4L3RyYWNrLWRvd24gbXlzdGVyaW91cyBnbm9tZS1jb250aW51b3VzIGJ1aWxkIGZhaWx1cmVzCi0KLTIwMTYtMDUtMjMgMTg6MDA6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgaXRlcmF0b3I6IG9ubHkgdW5zZXQgR1ZhbHVlIGlmIGl0IHdhcyBpbml0ZWQKLQkgIEFuZCBhZGQgc29tZSBmdW5jdGlvbiBndWFyZHMuIEZyb20gR0xpYiAyLjQ4IG9uIGl0IGlzCi0JICBhbGxvd2VkIHRvIHBhc3MgYW4gdW5pbml0aWFsaXNlZCBHVmFsdWUgdG8gZ192YWx1ZV91bnNldCgpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mzc2MgotCi0yMDE2LTA1LTIzIDE4OjQ0OjAxICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkgIGdzdC9wYXJzZTogQWxzbyBwYXNzIC1ER1NUX0VYUE9SVFMgaGVyZQotCSAgVGhpcyBzdGF0aWMgbGlicmFyeSBnZXRzIGluY2x1ZGVkIGRpcmVjdGx5IGludG8gbGliZ3N0cmVhbWVyLTEuMC5zbywgc28gaXQgbmVlZHMKLQkgIHRoZSBzYW1lIEdTVF9FWFBPUlRTIGRlZmluaXRpb24gYXMgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdGhhdCdzIGNvbXBpbGVkIGludG8KLQkgIHRoYXQgb3RoZXJ3aXNlIGl0IHdpbGwgdHJ5IHRvIGZpbmQgdGhlIGNvbnN0YW50cyBpdCB1c2VzIGZyb20gZ3N0aW5mbyB2aWEgRExMCi0JICBpbXBvcnRpbmcgKF9fZGVjbHNwZWMoZGxsaW1wb3J0KSkuCi0JICBGaXhlcyBodHRwczovL2NpLmdzdHJlYW1lci5uZXQvam9iL2NlcmJlcm8tY3Jvc3MtbWluZ3czMi80MzkzLwotCi0yMDE2LTA1LTIwIDAwOjI0OjU0ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIGdzdGNvbmZpZy5oOiBBbHdheXMgdXNlIGRsbGV4cG9ydC9pbXBvcnQgb24gV2luZG93cwotCSAgX19kZWNsc3BlYyhkbGxleHBvcnQvaW1wb3J0KSBhcmUgc3VwcG9ydGVkIGJ5IEdDQyBhbmQgYXJlIG5lZWRlZCBmb3IKLQkgIHByb3Blcmx5IGdlbmVyYXRpbmcgY29kZSB0aGF0IGZldGNoZXMgdGhlIHZhbHVlcyBvZiBjb25zdGFudHMgZnJvbSBETExzCi0JICBidWlsdCB3aXRoIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSB3aGljaCBoYXBwZW5zIHdoZW4gYW55dGhpbmcgdXNpbmcKLQkgIEdTVF9FWFBPUlQgaXMgYnVpbHQgd2l0aCBNU1ZDLgotCSAgU2VlOiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzYxOXcxNGRzLmFzcHgKLQkgIEVzc2VudGlhbGx5LCBpZiB5b3UgYnVpbHQgZ3N0cmVhbWVyIHdpdGggTVNWQyBhbmQgdGhlbiB0cmllZCB0byB1c2UKLQkgIGNvbnN0YW50cyBmcm9tIGl0IChzdWNoIGFzIEdTVF9UWVBFX0NBUFMpIGluIGEgcGx1Z2luLCBHQ0Mgd291bGQKLQkgIHJldHJpZXZlIHRoZSBhZGRyZXNzIG9mIHRoZSB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSB2YWx1ZSBpdHNlbGYuCi0KLTIwMTYtMDUtMTkgMTE6Mjc6MzYgLTAzMDAgIERhbmlsbyBDZXNhciBMZW1lcyBkZSBQYXVsYSA8ZGFuaWxvLmNlc2FyQGNvbGxhYm9yYS5jby51az4KLQotCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgotCSAgc2NyaXB0czogbWFrZSBnaXQtdXBkYXRlLnNoIGJ1aWxkIHdpdGggYWxsIGNvcmVzIGF2YWlsYWJsZQotCSAgVGhlIGdpdC11cGRhdGUuc2ggbm93IGJ1aWxkcyB3aXRoIGFsbCBjb3JlcyBhdmFpbGFibGUuIEluIGNhc2Ugb2YKLQkgIGZhaWx1cmUgaXQgZGVmYXVsdHMgdG8gMQotCSAgVGhlIGRldmVsb3BlciBjYW4gc3RpbGwgb3ZlcnJpZGUgdGhpcyBieSBzZXR0aW5nIC1qIHRvIHNvbWV0aGluZyBlbHNlCi0JICBpbiBNQUtFRkxBR1MsIGFzIHN0YXRlZCBieSAyOTk2MDVkZmUyZjk3ZmNhMzMwMTYxZmYwMWEzOTJlMWE4NWZlNDIyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjY2NgotCi0yMDE2LTA1LTA0IDEzOjUzOjU2ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkgIChtaW5pKW9iamVjdDogYWRkIE1BWV9CRV9MRUFLRUQgZmxhZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjAwOAotCi0yMDE2LTA1LTE1IDE0OjE1OjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICBiaW46IGVtaXQgZGVlcC1lbGVtZW50LXthZGRlZCxyZW1vdmVkfSBmb3IgY2hpbGRyZW4gb2YgbmV3bHktYWRkZWQvcmVtb3ZlZCBiaW4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01Nzg5MzMKLQotMjAxNi0wNS0xNCAxMDo1NTo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJpbi5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBhZGQgImRlZXAtZWxlbWVudC1hZGRlZCIgYW5kICJkZWVwLWVsZW1lbnQtcmVtb3ZlZCIgc2lnbmFscwotCSAgVGhpcyBtZWFucyBhcHBsaWNhdGlvbnMgYW5kIGJpbiBzdWItY2xhc3NlcyBjYW4gZWFzaWx5IHRyYWNrIHdoZW4KLQkgIGEgbmV3IGNoaWxkIGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIHBpcGVsaW5lIHN1Yi1oaWVyYXJjaHkgb3IKLQkgIHJlbW92ZWQuCi0JICBDdXJyZW50bHkgZG9lc24ndCBzaWduYWwgZGVlcCBhZGRlZC9yZW1vdmVkIGZvciBlbGVtZW50cyBpbnNpZGUKLQkgIGEgYmluIGlmIGEgYmluIGlzIGFkZGVkL3JlbW92ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4OTMzCi0KLTIwMTYtMDUtMTUgMTU6MDI6NDkgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogSW1wcm92ZSBJRExFIHByb2JlIGRvY3MKLQkgIE1ha2UgaXQgZXhwbGljaXQgdGhhdCB0aGUgcGFkIGlzIG9ubHkgYmxvY2tlZCB3aGlsZSB0aGUgY2FsbGJhY2sgaXMgcnVubmluZywKLQkgIGFuZCB0aGUgcGFkIHdpbGwgYmUgdW5ibG9ja2VkIGFnYWluIG9uY2UgdGhlIGNhbGxiYWNrIHJldHVybmVkLgotCSAgSWYgQkxPQ0sgYW5kIElETEUgYmVoYXZpb3VyIGlzIG5lZWRlZCwgYm90aCBuZWVkIHRvIGJlIHVzZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MDAyCi0KLTIwMTYtMDUtMTUgMTM6Mjk6NTUgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSAgZG9jczogVXBkYXRlIGZvciBnaXQgbWFzdGVyCi0KLTIwMTYtMDMtMTEgMTY6MDQ6NTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTogT25seSB1bmJsb2NrIHVwc3RyZWFtIHdhaXRpbmcgZm9yIHRoZSBxdWVyeSBvbmNlIGRvd25zdHJlYW0gaXMgZmluaXNoZWQKLQkgIC4uLiB3aGVuIGZsdXNoaW5nIGFuZCBkZWFjdGl2YXRpbmcgcGFkcy4gT3RoZXJ3aXNlIGRvd25zdHJlYW0gbWlnaHQgaGF2ZSBhCi0JICBxdWVyeSB0aGF0IHdhcyBhbHJlYWR5IHVucmVmZmVkIGJ5IHVwc3RyZWFtLCBjYXVzaW5nIGNyYXNoZXMgb3Igb3RoZXIKLQkgIGludGVyZXN0aW5nIGVmZmVjdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzNDk2Ci0KLTIwMTYtMDUtMTQgMTc6MzE6NTEgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNpbmsvc3JjOiBQb3N0IGFuIGVycm9yIG1lc3NhZ2UgaWYgOjpzdGFydCgpIGZhaWxzCi0JICBUaGUgc3ViY2xhc3Mgc2hvdWxkIGRvIHRoYXQgYWxyZWFkeSwgYnV0IGp1c3QgaW4gY2FzZSBkbyBpdCBvdXJzZWx2ZXMgdG9vIGFzIGEKLQkgIGZhbGxiYWNrLiBXaXRob3V0IHRoaXMsIGUuZy4gcGxheWJpbiB3aWxsIGp1c3Qgd2FpdCBmb3JldmVyIGlmIHRoaXMgZmFpbHMKLQkgIGJlY2F1c2UgaXQgaXMgdHJpZ2dlcmVkIGFzIHBhcnQgb2YgYW4gQVNZTkMgc3RhdGUgY2hhbmdlLgotCi0yMDE2LTA1LTE0IDIzOjM2OjQzICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBGaXggRU9TIGZvcndhcmRpbmcgb24gUExBWUlORy0+UExBWUlORwotCSAgV2hlbiBkb2luZyBhIHRyYW5zaXRpb24gZnJvbSBQTEFZSU5HIHRvIFBMQVlJTkcsIHdlIHdpbGwgZmFpbAotCSAgdG8gZm9yd2FyZCBhbiBFT1MgbWVzc2FnZSBvbiB0aGUgYnVzLCBhbmQgbm9vbmUgZWxzZSB3aWxsIGV2ZXIKLQkgIHNlbmQgaXQgYmVjYXVzZSB0aGVyZSdsbCBiZSBubyBhY3R1YWwgc3RhdGUgY2hhbmdlZCBtZXNzYWdlLgotCSAgQWxsb3cgRU9TIHRocm91Z2ggZGlyZWN0bHkgaW4gdGhhdCBjYXNlLgotCi0yMDE2LTA1LTEzIDA5OjQzOjE0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IERvbid0IGRyb3AgTEFURU5DWSBxdWVyaWVzIHdpdGggZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotCSAgSWYgdGhlcmUgaXMgb25seSBvbmUgcGFkIGluIHRoZSBpbnRlcm5hbCBwYWRzLCB3aGVuIGZvbGRpbmcgZm9yCi0JICBMQVRFTkNZIHF1ZXJpZXMgaXQgd2lsbCBqdXN0IGRyb3AgdGhlIHJlc3BvbnNlIGlmIGl0J3Mgbm90IGxpdmUuCi0JICBUaGlzIGlzIG1heWJlIG5vdCB0aGUgcHJvcGVyIGZpeCwgYnV0IGl0IHdpbGwganVzdCBhY2NlcHQgdGhlIGZpcnN0Ci0JICBwZWVyIHJlc3BvbnNlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGFkcywgaXQgd2lsbCBvbmx5IHRha2UKLQkgIHRoZW0gaW50byBhY2NvdW50IGlmIHRoZSByZXNwb25zZSBpcyBsaXZlLgotCSAgVGhpcyAqc2hvdWxkKiBwcm9wZXJseSBoYW5kbGUgdGhlIGFnZ3JlZ2F0aW9uL2ZvbGRpbmcgYmVoYXZpb3VyIG9mCi0JICBtdWx0aXBsZSBsaXZlIHBlZXIgcmVzcG9uc2VzLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGhhbmRsaW5nIHRoZQotCSAgc2ltcGxlIG9uZS1wYWQtb25seS1hbmQtZm9yd2FyZCB1c2UtY2FzZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjM2MAotCi0yMDE2LTA0LTA3IDAwOjQ2OjIwICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgVXBkYXRlIHRoZSBleGFtcGxlcyBpbiB0aGUgZ3N0LWxhdW5jaC0xLjAgbWFucGFnZQotCSAgUmVwbGFjZSBlbGVtZW50cyB0aGF0IGRvbid0IGV4aXN0IGFueSBtb3JlIHdpdGggb25lcwotCSAgdGhhdCBkbywgYW5kIGluc2VydCBlbGVtZW50cyBsaWtlIG1wZWdhdWRpb3BhcnNlIHdoZXJlCi0JICB0aGV5IGFyZSBuZWVkZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MTA1Ci0KLTIwMTYtMDQtMDIgMDE6MDU6MzkgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBkZWJ1ZzogSW5zdGFudGlhdGUgR1R5cGUgd2hlbiBkdW1waW5nIGRlYnVnIGNhdGVnb3JpZXMuCi0JICBBIGxvdCBvZiBkZWJ1ZyBjYXRlZ29yaWVzIGFyZSBkZWNsYXJlZCBpbiBlbGVtZW50IGNsYXNzX2luaXQKLQkgIGZ1bmN0aW9ucywgd2hpY2ggZG9uJ3QgZ2V0IHJ1biB1bnRpbCB0aGUgZWxlbWVudCBpcyBmaXJzdCBjcmVhdGVkCi0JICAobm90IGp1c3QgcmVnaXN0ZXJlZCBpbiB0aGUgcGx1Z2luIGxvYWQgZnVuY3Rpb24pLiBUaGlzIG1lYW5zCi0JICB0aGF0IC0tZ3N0LWRlYnVnLWhlbHAgZG9lc24ndCBwcmludCBvdXQgYSBsb3Qgb2YgY2F0ZWdvcmllcy4KLQkgIENyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGVhY2ggZWxlbWVudCBmcm9tIHRoZSBlbGVtZW50IGZhY3RvcnkKLQkgIG1ha2VzIHRoZW0gdmlzaWJsZSwgYXQgc29tZSBleHRyYSBjb3N0IC0gMi0zIHRpbWVzIGxvbmdlciwgd2hpY2ggY2FuCi0JICBiZSBhIGZ1bGwgc2Vjb25kIG9yIHR3byBvZiBleHRyYSB3YWl0aW5nLiBZaWtlcyEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDEwMDEKLQotMjAxNi0wNS0xMSAxNTowNjozOSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBPbmx5IHB1c2ggYSBDQVBTIGV2ZW50IGRvd25zdHJlYW0gaWYgdGhlIHNpbmtwYWQgaXMgbm90IGluIFBVTEwgbW9kZQotCSAgVGhlIG90aGVyIHNpZ25hbCBoYW5kbGVycyBvZiB0aGUgdHlwZS1mb3VuZCBzaWduYWwgbWlnaHQgaGF2ZSByZWFjdGl2YXRlZAotCSAgdHlwZWZpbmQgaW4gUFVMTCBtb2RlIGFscmVhZHksIHB1c2hpbmcgYSBDQVBTIGV2ZW50IGF0IHRoYXQgcG9pbnQgd291bGQgY2F1c2UKLQkgIGRlYWRsb2NrcyBhbmQgaXMgaW4gZ2VuZXJhbCB1bmV4cGVjdGVkIGJ5IGVsZW1lbnRzIHRoYXQgYXJlIGluIFBVTEwgbW9kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5MDYKLQotMjAxNi0wNS0xMSAxMjoxNjowOSArMDkwMCAgV29uY2h1bCBMZWUgPHdvbmNodWwubGVlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBkZWJ1Z3V0aWxzOiBmaXggd2FybmluZyBvbiBlbnVtIHByb3BlcnRpZXMgcHJpbnRpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjYyNTEKLQotMjAxNi0wNS0xMCAxNTowMTo0MiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBGaXggcGFkIHN0YXRlIHdoZW4gZGVhY3RpdmF0aW5nIGZyb20gb25lIG1vZGUgYW5kIHRoZW4gdHJ5aW5nIHRvIGFjdGl2YXRlIGFub3RoZXIgYW5kIGZhaWxpbmcKLQkgIFdoZW4gYWN0aXZhdGluZyBhIHBhZCBpbiBQVUxMIG1vZGUsIGl0IG1pZ2h0IGFscmVhZHkgYmUgaW4gUFVTSCBtb2RlLiBXZSBub3cKLQkgIGZpcnN0IHRyeSB0byBkZWFjdGl2YXRlIGl0IGZyb20gUFVTSCBtb2RlIGFuZCB0aGVuIHRyeSB0byBhY3RpdmF0ZSBpdCBpbiBQVUxMCi0JICBtb2RlLiBJZiB0aGUgYWN0aXZhdGlvbiBmYWlscywgd2Ugd291bGQgc2V0IHRoZSBwYWQgdG8gZmx1c2hpbmcgYW5kIHNldCBpdAotCSAgYmFjayB0byBpdHMgb2xkIG1vZGUuIEhvd2V2ZXIgdGhlIG9sZCBtb2RlIGlzIHdyb25nLCB0aGUgcGFkIGlzIG5vdCBpbiBQVVNICi0JICBtb2RlIGFueW1vcmUgYnV0IGluIE5PTkUgbW9kZS4KLQkgIFRoaXMgZml4ZXMgZS5nLiB0eXBlZmluZCBpbiBkZWNvZGViaW4gcmVhY3RpdmF0aW5nIFBVU0gvUFVMTCBtb2RlIGlmIHVwc3RyZWFtCi0JICBhY3R1YWxseSBmYWlscyB0byBnbyBpbnRvIFBVTEwgbW9kZSBhZnRlciBmaXJzdCBQVVNISU5HIGRhdGEgdG8gdHlwZWZpbmQuCi0KLTIwMTYtMDMtMTMgMTE6MDU6MjkgLTA0MDAgIEFudGhvbnkgRy4gQmFzaWxlIDxibHVlbmVzc0BnZW50b28ub3JnPgotCi0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9zdHJzaWduYWwuYzoKLQkgIGxpYmNvbXBhdC5oOiBzdHJzaWduYWwoKSBzaG91bGQgYmUgbm90IGJlIGRlY2xlYXJlZCBjb25zdAotCSAgUE9TSVggc3RhbmRhcmRzIHJlcXVpcmVzIHN0cnNpZ25hbCgpIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gYSBjaGFyLAotCSAgbm90IGEgY29uc3QgcG9pbnRlciB0byBhIGNoYXIuIFsxXSAgT24gdUNsaWJjLCBhbmQgcG9zc2libHkgb3RoZXIKLQkgIGxpYmMncywgdGhhdCBkbyBub3QgSEFWRV9ERUNMX1NUUlNJR05BTCwgbGliY29tcGF0LmggZGVjbGFyZXMKLQkgIGNvbnN0IGNoYXIgKnN0cnNpZ25hbCAoaW50IHNpZykgd2hpY2ggY2F1c2VzIGEgdHlwZSBlcnJvci4KLQkgIFsxXSBtYW4gMyBzdHJzaWduYWwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM1NjcKLQotMjAxNi0wNS0wNSAxODo1MDowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuYzoKLQkgIGZsb3djb21iaW5lcjogYWRkIGRlYnVnIGNhdGVnb3J5Ci0JICBOb3QgdGhhdCBpdCBsb2dzIG11Y2guCi0KLTIwMTYtMDUtMDUgMTg6MDI6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmM6Ci0JICBmbG93Y29tYmluZXI6IGZpeCBkb2NzIGZvciBnc3RfZmxvd19jb21iaW5lcl9yZXNldCgpCi0KLTIwMTYtMDUtMDQgMTA6MDQ6MzAgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6Ci0JICBwYXJzZS1sYXVuY2g6IGZpeCBmYWN0b3J5IGxlYWsgaW4gdGVzdAotCSAgV2UgZ2V0IDIgcmVmZXJlbmNlcyBvbmUgZnJvbSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoKSBhbmQgdGhlIG90aGVyCi0JICBmcm9tIGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkKCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1OTc2Ci0KLTIwMTYtMDUtMDQgMTM6NDY6NDYgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgbWluaW9iamVjdDogZml4IHJlZiBjb3VudCBsZWFrcyBpbiB0ZXN0cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTk3OAotCi0yMDE2LTA1LTA0IDA5OjUzOjMyICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6Ci0JICB1dGlsczogZml4IGVsZW1lbnQgbGVhayBpbiBmaW5kX2NvbW1vbl9yb290KCkKLQkgIFRoZSByb290IGVsZW1lbnQgd2FzIG5vdCB1bnJlZmZlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIGFuY2VzdG9ycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5NjEKLQotMjAxNi0wNS0wMiAxNzozNToyOSArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBpbnNwZWN0OiBmaXggZmVhdHVyZSBsZWFrCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1OTU3Ci0KLTIwMTYtMDUtMDMgMTE6NDk6MDMgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IHVucmVmIGluc3RlYWQgb2YgdXNpbmcgX2dzdF91cmlfZnJlZSgpIGRpcmVjdGx5Ci0JICBUaGlzIGNvbmZ1c2VzIGdzdF90cmFjaW5nIGFzIHdlIHNob3J0Y3V0IHRoZSBtaW5pIG9iamVjdCByZWZlcmVuY2UKLQkgIHN5c3RlbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5NTgKLQotMjAxNi0wNS0wMiAwOTozMjo0NyArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zZWVrLmM6Ci0JICBwaXBlbGluZTogZml4IGJ1cyBsZWFrIGluIHNlZWsgdGVzdAotCSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwoKSBrZWVwcyBhIHJlZiBvbiB0aGUgYnVzIHdoaWNoIHNob3VsZAotCSAgYmUgcmVsZWFzZWQgdXNpbmcgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1OTAzCi0KLTIwMTYtMDUtMDIgMDk6Mjk6MzEgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zdHJlYW1pZGRlbXV4LmM6Ci0JICBzdHJlYW1pZGRlbXV4OiBmaXggbGlzdCBhbmQgZXZlbnQgbGVha3MgaW4gdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTkwMwotCi0yMDE2LTA1LTAyIDA4OjQzOjA0ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKLQkgIHNlbGVjdG9yOiBmaXggcGFkIGxlYWtzIGluIHRlc3RzCi0JICBzZXR1cF9pbnB1dF9wYWQoKSBjcmVhdGVzIGEgbmV3IHBhZCBzbyB3ZSBzaG91bGQgdW5yZWYgaXQgb25jZSB3ZSdyZQotCSAgZG9uZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5MDMKLQotMjAxNi0wNS0wMiAwODozMzo0MiArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IGZpeCBidWZmZXIgbGVha3MgaW4gdGVzdHMKLQkgIGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCgpIGludGVybmFsbHkgdXNlcyBnc3RfY2hlY2tfY2hhaW5fZnVuYygpIHNvIHdlCi0JICBzaG91bGQgY2FsbCBnc3RfY2hlY2tfZHJvcF9idWZmZXJzKCkgd2hlbiB0ZWFyaW5nIGRvd24gdGVzdHMgdG8gZnJlZSB0aGUKLQkgIGJ1ZmZlcnMgd2hpY2ggaGF2ZSBiZWVuIGV4Y2hhbmdlZCB0aHJvdWdoIHRoZSBwaXBlbGluZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5MDMKLQotMjAxNi0wNS0wMiAwODoyOTowMCArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JICBmYWtlc2luazogZml4IHBpcGVsaW5lIGxlYWsgaW4gdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTkwMwotCi0yMDE2LTA1LTAyIDA3OjM1OjQ1ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBlbGVtZW50ZmFjdG9yeTogZml4IGZhY3RvcnkgbGVhayBpbiB0ZXN0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1OTAzCi0KLTIwMTYtMDUtMDIgMTY6MDA6NDIgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmM6Ci0JICBkZXZpY2Vwcm92aWRlcmZhY3Rvcnk6IGZpeCBmYWN0b3J5IGxlYWsKLQkgIFRoZSBjb2RlIHBhdGggd2hlbiBlYXJseSByZXR1cm5pbmcgd2FzIGxlYWtpbmcgdGhlIGV4dHJhIHJlZmVyZW5jZSBvbgotCSAgdGhlIGZhY3RvcnkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1OTA0Ci0KLTIwMTYtMDQtMTAgMTE6NDI6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IGZpeCBjb21waWxlciB3YXJuaW5nCi0JICBDNDE0NjogdW5hcnkgbWludXMgb3BlcmF0b3IgYXBwbGllZCB0byB1bnNpZ25lZCB0eXBlLCByZXN1bHQgc3RpbGwgdW5zaWduZWQKLQotMjAxNi0wNC0yOCAxNDo1OTo1MSArMDMwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkgIGJpbjogZml4IGxlYWtzIGluIHVuaXQgdGVzdHMKLQkgIFRoZSB0ZXN0IHJlbHkgb24gYnVzIGJlaW5nIGZsdXNoZWQgd2hlbiBzZXR0aW5nIHRoZSBiaW4gdG8gdGhlIE5VTEwgc3RhdGUgd2hpY2gKLQkgIGlzIG5vdCB0aGUgY2FzZS4gVGhpcyBhcHBseSBvbmx5IHdoZW4gc2V0dGluZyB0aGUgcGlwZWxpbmUgc3RhdGUgdG8KLQkgIE5VTEwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NzIwCi0KLTIwMTYtMDQtMjggMTQ6NTY6MTggKzAzMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGZpeCBidWZmZXIgbGVha3MgaW4gdGVzdHMKLQkgIFRoZSBidWZmZXIgcmVjZWl2ZWQgdGhyb3VnaCB0aGUgcGFkIGhhdmUgdG8gYmUgdW5yZWZmZWQgdXNpbmcKLQkgIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMoKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU3MTkKLQotMjAxNi0wNC0zMCAxNDoxNTowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JICBGaXggc29tZSBub25zZW5zaWNhbCBnLWkgYW5ub3RhdGlvbnMKLQotMjAxNi0wNC0yOSAxNDo1NTowMiArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBJZ25vcmUgdGltZSB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgc3BhcnNlIHN0cmVhbSBsaW1pdHMgaGF2ZSBiZWVuIHJlYWNoZWQKLQkgIEJhc2ljYWxseSwgc3EtPm1heF9zaXplLnZpc2libGUgaXMgbmV2ZXIgaW5jcmVhc2VkIGZvciBzcGFyc2Ugc3RyZWFtcyBpbgotCSAgb3ZlcnJ1bmNiIHdoZW4gZW1wdHkgcXVldWUgaGFzIGJlZW4gZm91bmQ7Ci0JICBJZiB0aGUgcXVldWUgaXMgc3BhcnNlIGl0IGp1c3Qgc2tpcCB0aGUgZW50aXJlIGxvZ2ljIGRldGVybWluaW5nIHdoZXRoZXIKLQkgIG1heF9zaXplLnZpc2libGUgc2hvdWxkIGJlIGluY3JlYXNlZCwgZGVhZGxvY2tpbmcgdGhlIGRlbXV4ZXIuCi0JICBXaGF0IHNob3VsZCBiZSBkb25lIGluc3RlYWQgaXMgdGhhdCB3aGVuIGRldGVybWluaW5nIGlmIGxpbWl0cyBoYXZlIGJlZW4KLQkgIHJlYWNoZWQsIHRvIGlnbm9yZSB0aW1lIGZvciBzcGFyc2Ugc3RyZWFtcywgYXMgdGhlIGJ1ZmZlciBtYXkgYmUgZmFyIGluIHRoZQotCSAgZnV0dXJlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTczNgotCi0yMDE2LTAyLTI4IDEyOjA2OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJpbi5oOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGVsZW1lbnQ6IEFkZCBnc3RfZWxlbWVudF9jYWxsX2FzeW5jKCkKLQkgIFRoaXMgY2FsbHMgYSBmdW5jdGlvbiBmcm9tIGFub3RoZXIgdGhyZWFkLCBhc3luY2hyb25vdXNseS4gVGhpcyBpcyB0byBiZQotCSAgdXNlZCBmb3IgY2FzZXMgd2hlbiBhIHN0YXRlIGNoYW5nZSBoYXMgdG8gYmUgcGVyZm9ybWVkIGZyb20gYSBzdHJlYW1pbmcKLQkgIHRocmVhZCwgZGlyZWN0bHkgdmlhIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpIG9yIGluZGlyZWN0bHkgZS5nLiB2aWEgU0VFSwotCSAgZXZlbnRzLgotCSAgQ2FsbGluZyB0aG9zZSBmdW5jdGlvbnMgZGlyZWN0bHkgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCB3aWxsIGNhdXNlCi0JICBkZWFkbG9ja3MgaW4gbWFueSBzaXR1YXRpb25zLCBhcyB0aGV5IG1pZ2h0IGludm9sdmUgd2FpdGluZyBmb3IgdGhlCi0JICBzdHJlYW1pbmcgdGhyZWFkIHRvIHNodXQgZG93biBmcm9tIHRoaXMgdmVyeSBzdHJlYW1pbmcgdGhyZWFkLgotCSAgVGhpcyBpcyBtb3N0bHkgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBhcm91bmQgYSBHVGhyZWFkUG9vbCBhbmQgaXMgZm9yIGV4YW1wbGUKLQkgIHVzZWQgYnkgR3N0QmluIHRvIGNvbnRpbnVlIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDUzMgotCi0yMDE2LTA0LTI3IDA5OjIxOjMxICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIG1hbnVhbDogRml4IGJ1ZmZlciBtZW1vcnkgbGVhayBpbiBhcHBzcmMgZXhhbXBsZQotCSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKCkgaXMgbm90IGxpa2UgZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoKSBkdWUgdG8gcmVmZXJlbmNlCi0JICBjb3VudGluZyBsaW1pdGF0aW9ucyBvZiBzaWduYWxzLCBpdCBkb2VzICpub3QqIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIuCi0KLTIwMTYtMDQtMjYgMTY6MDI6MTQgKzAzMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBhZGQgY2xlYW51cCBwcml2IGZ1bmN0aW9uCi0JICBUaG9zZSBhcmUgYWxsb2NhdGVkIGluIF9wcml2X2dzdF9jYXBzX2luaXRpYWxpemUoKSBzbyBpdCBtYWtlcwotCSAgc2Vuc2UgdG8gaGF2ZSBhIHN5bWV0cmljIGNsZWFudXAgZnVuY3Rpb25zIGNhbGxlZCBieSBnc3RfZGVpbml0KCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NjA2Ci0KLTIwMTYtMDQtMjYgMTY6MDI6MTQgKzAzMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RjYXBzZmVhdHVyZXMuYzoKLQkgIGNhcHNmZWF0dXJlOiBhZGQgY2xlYW51cCBwcml2IGZ1bmN0aW9uCi0JICBUaG9zZSBhcmUgYWxsb2NhdGVkIGluIF9wcml2X2dzdF9jYXBzX2ZlYXR1cmVzX2luaXRpYWxpemUoKSBzbyBpdCBtYWtlcwotCSAgc2Vuc2UgdG8gaGF2ZSBhIHN5bWV0cmljIGNsZWFudXAgZnVuY3Rpb25zIGNhbGxlZCBieSBnc3RfZGVpbml0KCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NjA2Ci0KLTIwMTYtMDQtMjEgMTQ6NDU6MzkgKzAxMDAgIEFsZXggQXNobGV5IDxidWd6aWxsYUBhc2hsZXktZmFtaWx5Lm5ldD4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmM6Ci0JICB0ZXN0Y2xvY2s6IGFkZCBjbG9jay10eXBlIHByb3BlcnR5Ci0JICBUbyBhbGxvdyB0aGUgR3N0VGVzdENsb2NrIHRvIGJlIHVzZWQgYXMgYSBHc3RTeXN0ZW1DbG9jaywgaXQgaXMKLQkgIHVzZWZ1bCB0byBpbXBsZW1lbnQgdGhlIGNsb2NrLXR5cGUgcHJvcGVydHkgdGhhdCBHc3RTeXN0ZW1DbG9jawotCSAgcHJvdmlkZXMuIFRoaXMgYWxsb3dzIEdzdFRlc3RDbG9jayB0byBiZSB1c2VkIGFzIHRoZSBzeXN0ZW0gY2xvY2sKLQkgIHdpdGggY29kZSB0aGF0IGV4cGVjdHMgYSBHc3RTeXN0ZW1DbG9jay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIxNDcKLQotMjAxNi0wNC0yMSAxMzo0OTozMiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JICBkYXRldGltZTogU2FuaXR5IGNoZWNrIHllYXIsIG1vbnRoIGFuZCBkYXkgd2hlbiBwYXJzaW5nIElTTy04NjAxIHN0cmluZ3MKLQkgIFBhc3NpbmcgeWVhcnMgPiA5OTk5LCBtb250aHMgPiAxMiBvciBkYXlzID4gMzEgdG8gZ3N0X2RhdGVfdGltZV9uZXcoKSB3aWxsCi0JICBjYXVzZSBhbiBhc3NlcnRpb24gYW5kIGdlbmVyYWxseSBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UuIEluc3RlYWQgY29uc2lkZXIgaXQKLQkgIGFzIGEgcGFyc2luZyBlcnJvciBsaWtlIGhvdXJzID4gMjQgYW5kIHJldHVybiBOVUxMLgotCi0yMDE2LTA0LTIwIDExOjQ2OjE5ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBSZW1lbWJlciBpZiB3ZSBpbnRlcnBvbGF0ZWQgRFRTIGZyb20gUFRTIGFuZCByZWZyZXNoIGl0IHdoZW5ldmVyIHdlIHVwZGF0ZSB0aGUgUFRTCi0JICBPdGhlcndpc2UgUFRTIGFuZCBEVFMgd2lsbCBjb21lIG91dCBvZiBzeW5jIGlmIHVwc3RyZWFtIGNvbnRpbnVlcyB0byBwcm92aWRlCi0JICBQVFMgYW5kIG5vdCBEVFMsIGFuZCB3ZSBoYXZlIHRvIHNraXAgc29tZSBkYXRhIGZyb20gdGhlIHN0cmVhbSBvciBQVFMgYXJlIG5vdAotCSAgZXhhY3RseSBpbmNyZWFzaW5nIHdpdGggdGhlIGR1cmF0aW9uIG9mIGVhY2ggcGFja2V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTI2MAotCi0yMDE2LTA0LTIwIDExOjQ1OjI4ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JICB0eXBlZmluZGhlbHBlcjogRml4IGdvYmplY3QtaW50cm9zcGVjdGlvbiB3YXJuaW5nIGFib3V0IGludmFsaWQgdHJhbnNmZXIgYW5ub3RhdGlvbgotCSAgZ3N0dHlwZWZpbmRoZWxwZXIuYzo0ODU6IFdhcm5pbmc6IEdzdEJhc2U6IGludmFsaWQgInRyYW5zZmVyIiBhbm5vdGF0aW9uIGZvciBnc2l6ZTogb25seSB2YWxpZCBmb3IgYXJyYXksIHN0cnVjdCwgdW5pb24sIGJveGVkLCBvYmplY3QgYW5kIGludGVyZmFjZSB0eXBlcwotCi0yMDE2LTA0LTE4IDEzOjA1OjQwICswMzAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0YWxsb2NhdG9yLmM6Ci0JICBhbGxvY2F0b3I6IGFkZCBjbGVhbnVwIG1ldGhvZAotCSAgTWFrZSB0cmFja2luZyBtZW1vcnkgbGVha3MgZWFzaWVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTIxMgotCi0yMDE2LTAzLTI1IDE1OjU1OjE4ICswMTAwICBGcmFuY2lzY28gVmVsYXpxdWV6IDxmcmFuY2lzdkBpZmkudWlvLm5vPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6Ci0JICB0ZXN0czogcGx1Z2luOiBpbXByb3ZlIGRlYnVnIG1lc3NhZ2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQxOTkKLQotMjAxNi0wNC0xNCAxMTo1NDozMiArMDIwMCAgQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IFJlY2hlY2sgYnVmZmVyaW5nIHN0YXR1cyBhZnRlciBjaGFuZ2luZyBsb3cgdGhyZXNob2xkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzNzU3Ci0KLTIwMTYtMDQtMTQgMDA6MDk6NDQgKzAyMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBSZWNhbGN1bGF0ZSBmaWxsIGxldmVsIGFmdGVyIGNoYW5naW5nIGhpZ2gtdGhyZXNob2xkCi0JICBUaGlzIGVuc3VyZXMgdGhlIGZvbGxvd2luZyBzcGVjaWFsIGNhc2UgaXMgaGFuZGxlZCBwcm9wZXJseToKLQkgIDEuIFF1ZXVlIGlzIGVtcHR5Ci0JICAyLiBEYXRhIGlzIHB1c2hlZCwgZmlsbCBsZXZlbCBpcyBiZWxvdyB0aGUgY3VycmVudCBoaWdoLXRocmVzaG9sZAotCSAgMy4gaGlnaC10aHJlc2hvbGQgaXMgc2V0IHRvIGEgbGV2ZWwgdGhhdCBpcyBiZWxvdyB0aGUgY3VycmVudCBmaWxsIGxldmVsCi0JICBTaW5jZSBtcS0+cGVyY2VudCB3YXNuJ3QgYmVpbmcgcmVjYWxjdWxhdGVkIGluIHN0ZXAgIzMgcHJvcGVybHksIHRoaXMKLQkgIGNhdXNlZCB0aGUgbXVsdGlxdWV1ZSB0byBzd2l0Y2ggb2ZmIGl0cyBidWZmZXJpbmcgc3RhdGUgd2hlbiBuZXcgZGF0YSBpcwotCSAgcHVzaGVkIGluLCBhbmQgbmV2ZXIgcG9zdCBhIDEwMCUgYnVmZmVyaW5nIG1lc3NhZ2UuIFRoZSBhcHBsaWNhdGlvbiB3aWxsCi0JICBoYXZlIHJlY2VpdmVkIGEgPDEwMCUgYnVmZmVyaW5nIG1lc3NhZ2UgZnJvbSBzdGVwICMyLCBidXQgd2lsbCBuZXZlciBzZWUKLQkgIDEwMCUuCi0JICBGaXggdGhpcyBieSByZWNhbGN1bGF0aW5nIHRoZSBjdXJyZW50IGZpbGwgbGV2ZWwgcGVyY2VudGFnZSBkdXJpbmcKLQkgIGhpZ2gtdGhyZXNob2xkIHByb3BlcnR5IGNoYW5nZXMgaW4gdGhlIHNhbWUgbWFubmVyIGFzIGl0IGlzIGRvbmUgd2hlbgotCSAgdXNlLWJ1ZmZlcmluZyBpcyBtb2RpZmllZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM3NTcKLQotMjAxNi0wNC0xNSAxMzo1MDozMCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogV2hlbiBpbml0aWFsaXppbmcgRFRTIGZyb20gUFRTLCByZW1lbWJlciB0aGF0IHdlIGRpZCBzbwotCSAgSWYgd2UgZG9uJ3Qgc3RvcmUgdGhlIHZhbHVlIGluIHByZXZfZHRzLCB3ZSB3b3VsZCBvdmVyIGFuZCBvdmVyIGFnYWluCi0JICBpbml0aWFsaXplIHRoZSBEVFMgZnJvbSB0aGUgbGFzdCBrbm93biB1cHN0cmVhbSBQVFMuIElmIHVwc3RyZWFtIG9ubHkgcHJvdmlkZXMKLQkgIFBUUyBldmVyeSBub3cgYW5kIHRoZW4sIHRoZW4gdGhpcyBjYXVzZXMgRFRTIHRvIGJlIHJhdGhlciBzdGF0aWMuCi0JICBGb3IgZXhhbXBsZSBpbiBhZGFwdGl2ZSBzdHJlYW1pbmcgc2NlbmFyaW9zIHRoaXMgbWVhbnMgdGhhdCBhbGwgYnVmZmVycyBpbiBhCi0JICBmcmFnbWVudCB3aWxsIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBEVFMgd2hpbGUgdGhlIFBUUyBpcyBwcm9wZXJseSB1cGRhdGVkLiBBcwotCSAgb3VyIHF1ZXVlcyBhcmUgbm93IHByZWZlcnJpbmcgdG8gZG8gYnVmZmVyIGZpbGwgbGV2ZWwgY2FsY3VsYXRpb25zIG9uIERUUywKLQkgIHRoaXMgaXMgY2F1c2luZyBodWdlIHByb2JsZW1zIHRoZXJlLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE0ODEjYzI3IHdoZXJlIHRoaXMgcGFydCBvZgotCSAgdGhlIGNvZGUgd2FzIGludHJvZHVjZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1MDk2Ci0KLTIwMTYtMDQtMTQgMDk6NTg6MDQgKzAxMDAgIEp1bGllbiBJc29yY2UgPGouaXNvcmNlQHNhbXN1bmcuY29tPgotCi0JKiBSRUFETUU6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNmYyZDIwOSB0byBhYzJmNjQ3Ci0KLTIwMTYtMDQtMTMgMTY6MDg6MzAgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IGNhdGNoIGVycm9ycyBhbmQgZmx1c2hpbmcgY2FzZSBhZnRlciBsb2NrCi0JICBUaGlzIGVuc3VyZXMgd2UgY2FuIG5vdCBnZXQgaW50byBhbiBpbmRlZmluaXRlIHdhaXQgb24gdGhlCi0JICBmb2xsb3dpbmcgY29uZCB2YXIgd2FpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ5OTkKLQotMjAxNi0wNC0xMyAxNjo0MDo0MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IGdzdC1sYXVuY2g6IGZpeCB1cCBjYXBzIHByaW50aW5nIGluIHZlcmJvc2UgbW9kZQotCSAgQWRkIG1pc3NpbmcgJ2Vsc2UnIGFuZCBwcmludCBjYXBzIGFuZCB0YWdsaXN0cyB3aXRob3V0IHRoZQotCSAgYW5ub3lpbmcgZHVwbGljYXRlIHN0cmluZyBlc2NhcGluZywgbWFraW5nIGJvdGggbmljZXIgdG8gcmVhZC4KLQkgIEZpeGVzIHN0cmluZyBsZWFrIGFuZCBjb3Zlcml0eSBDSUQgMTM1ODQ5Mi4KLQotMjAxNi0wNC0xMyAxMjozODowNSArMDMwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkgIHJ1c2FnZTogcHJvcGVybHkgZnJlZSB0aGUgcXVldWUgbWVtb3J5Ci0JICBUaGUgcXVldWUgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgdGhlIHRyYWNlciBzdHJ1Y3Qgc28gd2Ugc2hvdWxkIG5vdAotCSAgdXNlIGdfcXVldWVfZnJlZSgpIHRvIGZyZWUgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0OTg1Ci0KLTIwMTYtMDQtMTMgMTA6MjE6MTUgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RtZXRhLmM6Ci0JICBtZXRhOiBXYXJuIGlmIGEgbWV0YSBpbXBsZW1lbnRhdGlvbiBpcyByZWdpc3RlcmVkIHdpdGhvdXQgaW5pdCBmdW5jdGlvbgotCSAgVGhpcyBwcmV2aW91c2x5IGNhdXNlZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1bmxlc3Mgc29tZXRoaW5nIGVsc2Ugd2FzCi0JICBpbml0aWFsaXppbmcgYWxsIHRoZSBmaWVsZHMgZXhwbGljaXRseSB0byBzb21ldGhpbmcuCi0JICBUbyBiZSBvbiB0aGUgc2FmZSBzaWRlLCB3ZSBhbHNvIGFsbG9jYXRlIG1ldGFzIHdpdGhvdXQgaW5pdCBmdW5jdGlvbiB0byBhbGwKLQkgIHplcm9lcyBub3cgYXMgaXQgd2FzIHJlbGF0aXZlbHkgY29tbW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDkwMgotCi0yMDE2LTA0LTEyIDE1OjE3OjM2ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBSZXZlcnQgImJhc2VzaW5rOiBUYWtlIFBSRVJPTExfTE9DSyBpbiB3YWl0X2V2ZW50KCkiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDgyOGE0NjI3ZGIwY2I2YTY3MDZiOTZkOWJlOTdlNWU1YzdkMjIyMTUuCi0JICBUaGUgbG9jayB3YXMgYWxyZWFkeSB0YWtlbiBlbHNld2hlcmUsIGluIGdzdF9iYXNlX3NpbmtfZXZlbnQoKS4KLQotMjAxNi0wNC0xMiAxNToxMTozMCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IFRha2UgUFJFUk9MTF9MT0NLIGluIHdhaXRfZXZlbnQoKQotCSAgSXQgaXMgY2FsbGluZyBkb19zeW5jKCksIHdoaWNoIHJlcXVpcmVzIHRoZSBTVFJFQU1fTE9DSyBhbmQgUFJFUk9MTF9MT0NLIHRvIGJlCi0JICB0YWtlbi4gVGhlIFNUUkVBTV9MT0NLIGlzIGFscmVhZHkgdGFrZW4gaW4gYWxsIGNhbGxlcnMsIHRoZSBQUkVST0xMX0xPQ0sgbm90LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDkzOQotCi0yMDE2LTAyLTExIDA5OjMzOjI4ICswMTAwICBKdWxpZW4gSXNvcmNlIDxqLmlzb3JjZUBzYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogYWRkIFBUSFJFQURfQ0ZMQUdTIGZvciBtYWtlIGNoZWNrIHRvIHBhc3Mgb24gT1MgWAotCSAgQ3VycmVudGx5ICJtYWtlIGNoZWNrIiBmYWlscyB3aXRoOgotCSAgImVycm9yOiBhcmd1bWVudCB1bnVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uOiAnLXB0aHJlYWQnIgotCSAgUFRIUkVBRF9DRkxBR1Mgbm93IGNvbnRhaW5zIC1RdW51c2VkLWFyZ3VtZW50cyB0byBmaXggdGhhdC4KLQkgIEV4cGxhbmF0aW9uIGhlcmU6IGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3BhdGNoLz84MTg2I2NvbW1lbnQyMQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Nzk1NAotCi0yMDE2LTA0LTExIDEwOjQ0OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VwYXJzZS5jOgotCSAgdGVzdHM6IGJhc2VwYXJzZTogbWFrZSB3b3JrIHdpdGggQ0tfRk9SSz1ubwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzQ2OQotCi0yMDE2LTA0LTExIDEwOjI3OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMi5jOgotCSAgdGVzdHM6IHRyYW5zZm9ybTE6IG1ha2UgdGVzdCB3b3JrIHdpdGggQ0tfRk9SSz1ubwotCSAgV2UgbmVlZCB0byBjbGVhciBzb21lIGdsb2JhbCBzdGF0ZSBhbmQgcmVnaXN0ZXIgYSBuZXcgdGVzdAotCSAgYmFzZXRyYW5zZm9ybSBzdWJjbGFzcyBmb3IgZWFjaCB0ZXN0IGJlY2F1c2Ugd2UgZG8gdGhpbmdzCi0JICBpbiBjbGFzc19pbml0IGJhc2Ugb24gZ2xvYmFsIHN0YXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzQ2OQotCi0yMDE2LTA0LTEwIDIwOjQ1OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbGxlY3RwYWRzLmM6Ci0JICB0ZXN0czogY29sbGVjdHBhZHM6IGZpeCBmb3IgQ0tfRk9SSz1ubwotCSAgUmVzZXQgZ2xvYmFsIHN0YXRlIHdoZW4gZG9uZSwgYW5kIHVucmVmIHNpbmsgcGFkcyB0b28KLQkgIGluIHRlYXJkb3duIGZ1bmN0aW9uIHRvIG1ha2UgaXQgdmFsZ3JpbmQgY2xlYW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNDY5Ci0KLTIwMTYtMDQtMTAgMjA6MjU6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3N0cmVhbWlkZGVtdXguYzoKLQkgIHRlc3RzOiBzdHJlYW1pZGRlbXV4OiBmaXggd2l0aCBDS19GT1JLPW5vCi0JICBDbGVhciBnbG9iYWwgc3RhdGUgd2hlbiBkb25lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzQ2OQotCi0yMDE2LTA0LTEwIDIwOjA0OjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgdGVzdHM6IGJ1ZmZlcnBvb2w6IGZpeCB3cm9uZyBhc3N1bXB0aW9ucyBhYm91dCBwb2ludGVycyBhbmQgb2JqZWN0IGxpZmVjeWNsZXMKLQkgIFRoZSB0ZXN0IGFzc3VtZWQgdGhhdCBpZiBhIGJ1ZmZlciBoYXMgdGhlIHNhbWUgcG9pbnRlciBhZGRyZXNzIGFzCi0JICBiZWZvcmUgaXQgaXMgaW4gZmFjdCB0aGUgc2FtZSBtaW5pIG9iamVjdCBhbmQgaGFzIGJlZW4gcmUtdXNlZCBieQotCSAgdGhlIHBvb2wuIFRoaXMgc2VlbXMgdG8gYmUgbW9zdGx5IHRydWUsIGJ1dCBub3QgYWx3YXlzLiBUaGUgYnVmZmVyCi0JICBtaWdodCBiZSBkZXN0cm95ZWQgYW5kIHdoZW4gYSBuZXcgYnVmZmVyIGlzIGNyZWF0ZWQgdGhlIGFsbG9jYXRvcgotCSAgbWlnaHQgcmV0dXJuIHRoZSBzYW1lIG1lbW9yeSB0aGF0IHdlIGp1c3QgZnJlZWQuCi0JICBJbnN0ZWFkIGF0dGFjaCBhIHFkYXRhIHdpdGggZGVzdHJveSBub3RpZnkgZnVuY3Rpb24gdG8gYnVmZmVyCi0JICBpbnN0YW5jZXMgd2Ugd2FudCB0byB0cmFjayB0byBtYWtlIHN1cmUgdGhlIGJ1ZmZlciBhY3R1YWxseQotCSAgZ2V0cyBmaW5hbGl6ZWQgcmF0aGVyIHRoYW4gcmVzdXJyZWN0ZWQgYW5kIHB1dCBiYWNrIGludG8gdGhlIHBvb2wuCi0KLTIwMTYtMDQtMTAgMTg6Mzc6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JKiBkb2NzL3B3Zy9wd2cueG1sOgotCSAgZG9jczogcHdnOiByZW1vdmUgYnJva2VuIHJlZmVyZW5jZXMgdG8gZXhhbXBsZSBjb2RlCi0JICBXZSBwb2ludCB0byBnc3QtdGVtcGxhdGUgYXQgdGhlIGJlZ2lubmluZyB0aGF0IHNob3VsIGJlCi0JICBlbm91Z2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNTc1Ci0KLTIwMTYtMDQtMDggMTM6MjY6NDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGRvbid0IHJ1biB0cmFjZXJyZWNvcmQgaW4gdmFsZ3JpbmQgZm9yIG5vdwotCSAgQmVjYXVzZSBvZiB0aGUgd2F5IHdlIGltcGxlbWVudCBsb2dnaW5nIGFuZCBhZGRpbmcvcmVtb3ZpbmcKLQkgIGxvZyBmdW5jdGlvbnMgY3VycmVudGx5ICh3ZSBsZWFrIGEgR0xpc3Qgb24gcHVycG9zZSkgdGhpcwotCSAgdGVzdCBsZWFrcy4KLQotMjAxNi0wMy0wNSAxNzo1MTowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IGdzdC1sYXVuY2g6IHVzZSBuZXcgYXN5bmMgcHJvcGVydHkgY2hhbmdlIG5vdGlmaWNhdGlvbiBBUEkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjMxNDIKLQotMjAxNi0wMy0wNSAxNDoxMjozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZWxlbWVudDogYWRkIEFQSSB0byBnZXQgcHJvcGVydHkgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdmlhIG1lc3NhZ2VzCi0JICBCZSBub3RpZmllZCBpbiB0aGUgYXBwbGljYXRpb24gdGhyZWFkIHZpYSBidXMgbWVzc2FnZXMgYWJvdXQKLQkgIG5vdGlmeTo6KiBhbmQgZGVlcC1ub3RpZnk6OiogcHJvcGVydHkgY2hhbmdlcywgaW5zdGVhZCBvZgotCSAgaGF2aW5nIHRvIGRlYWwgd2l0aCBpdCBpbiBhIG5vbi1hcHBsaWNhdGlvbiB0aHJlYWQuCi0JICBBUEk6IGdzdF9lbGVtZW50X2FkZF9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2goKQotCSAgQVBJOiBnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2goKQotCSAgQVBJOiBnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoKCkKLQkgIEFQSTogZ3N0X21lc3NhZ2VfbmV3X3Byb3BlcnR5X25vdGlmeSgpCi0JICBBUEk6IGdzdF9tZXNzYWdlX3BhcnNlX3Byb3BlcnR5X25vdGlmeSgpCi0JICBBUEk6IEdTVF9NRVNTQUdFX1BST1BFUlRZX05PVElGWQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzE0MgotCi0yMDE2LTA0LTA3IDIwOjI5OjEwICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y3BwLmNjOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3RsaWJzY3BwLmNjOgotCSAgdGVzdHM6IEFkZCBDKysgdGVzdHMgZm9yIHRoZSBvdGhlciBJTklUIG1hY3JvcyB3ZSBoYXZlCi0KLTIwMTYtMDQtMDYgMTc6MTk6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjcHAuY2M6Ci0JICB0ZXN0czogZ3N0Y3BwOiBmbGVzaCBvdXQgQysrIHRlc3Qgc28gd2UgY2FuIGFkZCBtb3JlIGJpdHMKLQkgIExpa2UgYSBjaGVjayBmb3IgR1NUX01BUF9JTkZPX0lOSVQuCi0KLTIwMTYtMDQtMDYgMTY6NDg6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bGlic2NwcC5jYzoKLQkgIHRlc3RzOiB1c2UgY2F0Y2gtYWxsIGluY2x1ZGVzIGZvciBjKysgZ3N0IGxpYnMgaW5jbHVkZSB0ZXN0Ci0JICBTbyB3ZSBnZXQgYW55IG5ldyBoZWFkZXIgZmlsZXMgYXMgd2VsbCBhcyB0aGV5J3JlIGFkZGVkLgotCi0yMDE2LTA0LTA2IDE3OjIzOjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGZpeCBDKysgY29tcGlsZXIgd2FybmluZ3Mgd2l0aCBHU1RfTUFQX0lORk9fSU5JVAotCi0yMDE2LTA0LTA0IDEwOjI4OjE4ICswMDAwICBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogY2hlY2sgdGhlIGNvcnJlY3QgZWxlbWVudCdzIHN0YXRlIG9uIGdob3N0aW5nIHBhZHMKLQkgIENoZWNraW5nIHRoZSBjdXJyZW50IGVsZW1lbnQncyBzdGF0ZSB3aGVuIHdlJ3JlIGFkZGluZyBwYWRzIHRvCi0JICB0aGUgcGFyZW50IGVsZW1lbnQgaXMgY2hlY2tpbmcgdGhlIHdyb25nIHRoaW5nLgotCSAgU2lsZW5jZXMgYSAnYXR0ZW1wdGluZyB0byBhZGQgYW4gaW5hY3RpdmUgcGFkIHRvIGEgcnVubmluZyBlbGVtZW50JwotCSAgd2FybmluZyB3aGVuIGFkZGluZyBhIGdob3N0IHBhZCB0byBhIHJ1bm5pbmcgcGFyZW50IGJpbiBvZiB0aGUgcGFyZW50Ci0JICBiaW4gb2YgdGhlIGVsZW1lbnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0MTc2Ci0KLTIwMTYtMDMtMjUgMDE6Mjg6MTggKzAwMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHV0aWxzOiBleHBvc2UgcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcKLQkgIFRoaXMgaXMgYSB1c2VmdWwgZnVuY3Rpb24gdG8gYXV0b21hdGljYWxseSBhZGQgZ2hvc3QgcGFkcyB3aGVuIGxpbmtpbmcKLQkgIHR3byBlbGVtZW50cyBhY3Jvc3MgYmluIGJvdW5kYXJpZXMgd2l0aG91dCBrbm93IHRoZWlyIGV4YWN0IHBhcmVudGFnZS4KLQkgIGUuZy4gd2hlbiB1c2luZyBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24gKHdpdGggb3Igd2l0aG91dCBpdCBnaG9zdGluZyBwYWRzKSwKLQkgIG9uZSBjYW4gc2ltcGx5IHJldHJlaXZlIHRoZSBzcmMvc2luayBwYWRzIGZyb20gdGhlIGJpbiB0byBsaW5rIHRvIGFub3RoZXIgcGFkLgotCSAgU2ltaWxhciBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IGdzdF9lbGVtZW50X2xpbmtfcGFkc3tfZnVsbH0oKSBob3dldmVyIG9ubHkKLQkgIGJ5IHBhZCBuYW1lIHJhdGhlciB0aGFuIGJ5IGFjdHVhbCBwYWRzLgotCSAgQVBJOiBnc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmdfZnVsbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDE3NgotCi0yMDE2LTA0LTAzIDIzOjM1OjQ2IC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDogc3BlbGxpbmcgZml4Ci0KLTIwMTUtMDUtMTUgMTM6MzY6MDQgKzAxMDAgIE1hcmsgQ29tYmVsbGFjayA8Z25vbWUtYnVnemlsbGFAY29tYmVsbGFjay5uZXQ+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBHU1RfUkVGQ09VTlRJTkc6IEFkZCBsb2dnaW5nIG9mIHBvaW50ZXIgYWRkcmVzcyBmb3IgZGlzcG9zZSwgZmluYWxpemUsIGV0YyBtZXNzYWdlcwotCSAgVXBkYXRlZCB0aGUgR1NUX1JFRkNPVU5USU5HIGxvZ2dpbmcgc28gdGhhdCBpdCBpbmNsdWRlcyB0aGUgcG9pbnRlcgotCSAgYWRkcmVzcyBvZiB0aGUgb2JqZWN0IHRoYXQgaXMgYmVpbmcgZGlzcG9zZWQgb3IgZmluYWxpemVkLgotCSAgV2l0aCB0aGlzIGNoYW5nZSBpcyBpcyB0aGVuIHBvc3NpYmxlIHRvIG1hdGNoIHVwIEdTVF9SRUZDT1VOVElORyBsb2cgbWVzc2FnZXMKLQkgIGZvciBvYmplY3QgYWxsb2NhdGlvbi9kaXNwb3NhbC9maW5hbGl6YXRpb24uIFRoaXMgY2FuIGhlbHAgd2l0aCBkaWFnbm9zaW5nCi0JICAibWVtb3J5IGxlYWtzIiBpbiBhcHBsaWNhdGlvbnMgdGhhdCBoYXZlIG5vdCBjb3JyZWN0bHkgZGlzcG9zZWQgb2YgYWxsIHRoZQotCSAgR1N0cmVhbWVyIG9iamVjdHMgaXQgY3JlYXRlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk0MjcKLQotMjAxNi0wMy0zMSAxMTo0NjowMyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IG9ubHkgb3BlbiBsb2cgZmlsZSB3aGVuIGFkZGluZyBpdCB0byB0aGUgbG9nIGZ1bmN0aW9uCi0JICBUaGlzIGF2b2lkcyB0aGUgbGVhayBvZiBvcGVuaW5nIGl0IGFuZCB0aGVuIG5vdCBwYXNzaW5nIGl0IG9yIGNsb3NpbmcgaXQKLQkgIGJlZm9yZSBpdCBnb2VzIG91dCBvZiBzY29wZS4KLQotMjAxNi0wNC0wMSAyMjo0MTo1MSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JICBjbG9jazogUmV0dXJuIEZBTFNFIGluIGFsbCBwYXRocyB0aGF0IGRvbid0IHNldCBvdXQgcGFyYW1ldGVycyBpbiBnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZCgpCi0JICBJdCByZXR1cm5lZCBUUlVFIHdoZW4gcmVncmVzc2lvbiBmYWlsZWQsIHdoaWxlIG5vdCBzZXR0aW5nIGFueSBvZiB0aGUgb3V0Ci0JICBwYXJhbWV0ZXJzLiBUaGlzIGNhdXNlZCB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSB0aGUgc3RhY2sgdG8gYmUgdXNlZCBmb3IKLQkgIHNldHRpbmcgdGhlIGNsb2NrIGNhbGlicmF0aW9uLgotCi0yMDE2LTAzLTI0IDE3OjM0OjIwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogcmV3b3JrIHByb2JlJ3MgaG9va19tYXJzaGFsbCBmdW5jdGlvbgotCSAgUFVTSCBhbmQgUFVMTCBtb2RlIGhhdmUgb3Bwb3NpdGUgc2NlbmFyaW9zIGZvciBJRExFIGFuZCBCTE9DSwotCSAgcHJvYmVzLgotCSAgRm9yIFBVU0ggaXQgd2lsbCBCTE9DSyB3aXRoIHNvbWUgZGF0YSB0eXBlIGFuZCBJRExFIHdvbid0IGhhdmUgYSB0eXBlLgotCSAgRm9yIFBVTEwgaXQgd2lsbCBCTE9DSyBiZWZvcmUgZ2V0dGluZyBzb21lIGRhdGEgYW5kIHdpbGwgYmUgSURMRSB3aGVuCi0JICBzb21lIGRhdGEgaXMgb2J0YWluZWQuCi0JICBUaGUgY2hlY2sgaW4gaG9va19tYXJzaGFsbCB3YXMgc3BlY2lmaWMgZm9yIFBVU0ggbW9kZSBhbmQgd291bGQgY2F1c2UKLQkgIFBVTEwgcHJvYmVzIHRvIGZhaWwgdG8gYmUgY2FsbGVkLiBBZGRpbmcgZGlmZmVyZW50IGNoZWNrcyBmb3IgdGhlIG1vZGUKLQkgIHRvIGZpeCB0aGlzIGlzc3VlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTIxMQotCi0yMDE2LTAzLTI0IDE3OjM0OjQwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHRlc3RzOiBwYWQ6IGV4dHJhIHRlc3RzIGZvciBwYWQgcHVsbCBwcm9iZXMKLQkgIEZvciBCVUZGRVIgYW5kIElETEUgcHJvYmVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxMjExCi0KLTIwMTYtMDEtMjggMTY6MjI6MTcgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHBhZDogQWRkIHRlc3QgZm9yIGJsb2NraW5nIHB1bGwgcHJvYmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjEyMTEKLQotMjAxNi0wMy0yNCAxMjoxMzozOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGNvbnNpZGVyIFBST0JFX1RZUEVfRVZFTlRfRkxVU0ggd2hlbiB1c2luZyBQUk9CRV9UWVBFX0FMTF9CT1RICi0JICBXaGVuIEdTVF9QQURfUFJPQkVfRVZFTlRfRkxVU0ggaXMgdXNlZCwgdGhlIHByb2JlcyBhbHJlYWR5IGhhdmUKLQkgIGEgZGF0YSB0eXBlIGFuZCBpdCBpcyBub3QgbmVlZGVkIHRvIGF1dG9tYXRpY2FsbHkgYWRkIHRoZSBkZWZhdWx0Ci0JICB0eXBlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIzMzAKLQotMjAxNi0wMi0xOSAxNjoxODoxMiArMDEwMCAgTGludXMgU3ZlbnNzb24gPGxpbnVzc25AYXhpcy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIGdzdHBhZCB0ZXN0czogQWRkIGEgdGVzdCBmb3IgZmx1c2ggZXZlbnQgb25seSBwcm9iZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIzMzAKLQotMjAxNi0wMy0yNiAxNzoyMTo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IGZpeCBlbnVtL2ZsYWcgcHJvcGVydGllcyBwcmludGluZyBmb3IgZWxlbWVudHMKLQkgIFdlIHdhbnQgdG8gdXNlIHRoZSBmbGFnL2VudW0gbmlja3MgaGVyZSwgbm90IG9ubHkgYmVjYXVzZSB0aGV5Ci0JICBhcmUgc2hvcnRlciBidXQgYWxzbyBiZWNhdXNlIGluIGNhc2Ugb2YgZWxlbWVudC1zcGVjaWZpYyBlbnVtcwotCSAgYW5kIGZsYWdzIHdlIGFidXNlIHRoZSBlbnVtL2ZsYWcgbmFtZSBmaWVsZCBmb3IgdGhlIGRlc2NyaXB0aW9uLAotCSAgYW5kIHdlIGRvbid0IHdhbnQgdGhhdCBwcmludGVkIGluIHRoZSBkb3QgZmlsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM4MTQKLQotMjAxNi0wMy0yMyAxMDozMTo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JICBhbGxvY3RyYWNlOiBwcmludCBzaXplIGFuZCBhbGxvY2F0b3IgZGV0YWlscyBmb3IgYnVmZmVycyBhbmQgbWVtb3JpZXMKLQotMjAxNi0wMi0yOSAxOTowNDoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IG1ha2UgaXQgcG9zc2libGUgdG8gcmVtb3ZlIGRlZmF1bHQgbG9nIGhhbmRsZXIgYmVmb3JlIGdzdF9pbml0KCkKLQkgIE1ha2Ugc3VyZSBpdCdzIG5vdCBldmVuIGFkZGVkIHRoZW4sIHNvIHRoYXQgd2UgbmV2ZXIgb3V0cHV0Ci0JICBhbnl0aGluZyB2aWEgdGhlIGRlZmF1bHQgbG9nIGhhbmRsZXIgdGhlbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE1MzgKLQotMjAxNi0wMy0wNSAxNDoyNzozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3R1cmkuaDoKLQkgIG1pbmlvYmplY3QsIG1lbW9yeSwgdXJpOiB3YXJuIG9uIHVudXNlZCByZXR1cm4gdmFsdWUgb2Ygc29tZSBmdW5jcwotCSAgTWFrZSBjb21waWxlciBpc3N1ZSBhIHdhcm5pbmcgZm9yIGNvbW1vbiBiZWdpbm5lciBtaXN0YWtlcyBzdWNoIGFzOgotCSAgLi4uCi0JICBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0JICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLQkgIC4uLgotCSAgYW5kIHNpbWlsYXIuIE9ubHkgZG8gdGhpcyBmb3Igc29tZSBmdW5jdGlvbnMgZm9yIG5vdy4KLQotMjAxNi0wMy0yNiAxMToxNzowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogLmdpdGlnbm9yZToKLQkgIC5naXRpZ25vcmUgbmV3IG5ldGNsb2NrLXJlcGxheSB0ZXN0aW5nIHRvb2wgYmluYXJ5Ci0KLTIwMTUtMTAtMTcgMTg6MDE6NDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGFsbG93IHBsdWdpbiBhbmQgZmVhdHVyZSBmaWx0ZXIgZnVuY3MgdG8gY2FsbCByZWdpc3RyeSBBUEkKLQkgIERvbid0IGtlZXAgdGhlIHJlZ2lzdHJ5IGxvY2tlZCB3aGlsc3QgaXRlcmF0aW5nIG92ZXIgdGhlIHBsdWdpbnMKLQkgIG9yIGZlYXR1cmVzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24uIFRoaXMgd291bGQgZGVhZGxvY2sgaWYgdGhlCi0JICBjYWxsYmFjayB0cmllZCB0byBhY2Nlc3MgdGhlIHJlZ2lzdHJ5IGZyb20gdGhlIGZ1bmN0aW9uLiBJbnN0ZWFkLAotCSAgbWFrZSBhIGNvcHkgb2YgdGhlIGZlYXR1cmUvcGx1Z2luIGxpc3QgYW5kIHRoZW4gZmlsdGVyIGl0IHdpdGhvdXQKLQkgIGhvbGRpbmcgdGhlIHJlZ2lzdHJ5IGxvY2suIFRoaXMgaXMgc3RpbGwgY29uc2lkZXJhYmx5IGZhc3RlciB0aGFuCi0JICB0aGUgYWx0ZXJuYXRpdmUgd2hpY2ggd291bGQgYmUgdG8gdXNlIGEgR3N0SXRlcmF0b3IuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2NzM4Ci0KLTIwMTYtMDMtMjUgMTI6NTk6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogUmVtb3ZlIHVubmVlZGVkIHBhcmVudGhlc2lzIGZyb20gQUdfR1NUX0NIRUNLX0NIRUNLUwotCi0yMDE2LTAzLTI1IDEyOjA1OjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgotCSAgdmFsdmU6IEZpeCB1bml0IHRlc3QgYnkgc2VuZGluZyBjYXBzIGJlZm9yZSBidWZmZXJzCi0JICBVbmV4cGVjdGVkIGNyaXRpY2FsL3dhcm5pbmc6IGdzdHBhZC5jOjQ0MDA6Z3N0X3BhZF9wdXNoX2RhdGE6PCcnOnNyYz4gR290IGRhdGEgZmxvdyBiZWZvcmUgc2VnbWVudCBldmVudAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mzc1MwotCi0yMDE2LTAzLTI1IDEwOjIzOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9taXNjL01ha2VmaWxlLmFtOgotCSAgbmV0Y2xvY2s6IExpbmsgdGhlIHJlcGxheSBleGFtcGxlIHRvIEdJTwotCi0yMDE2LTAzLTAzIDIxOjQ1OjU0ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvbWlzYy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL21pc2MvbmV0Y2xvY2stcmVwbGF5LmM6Ci0JICB0ZXN0czogQWRkIHNvbWUgY29kZSB0byByZXBsYXkgYW5kIGFuYWx5c2UgbmV0Y2xpZW50Y2xvY2sKLQkgIFRoaXMgdGFrZXMgcmVhZGluZ3MgaW4gdGhlIGZvcm0gb2YgLi4uCi0JICA8bG9jYWxfMT4gPHJlbW90ZV8xPiA8cmVtb3RlXzI+IDxsb2NhbF8yPgotCSAgLi4uIHdpdGggb25lIG9ic2VydmF0aW9uIHBlciBsaW5lLCBhbmQgdGhlbiByZXBsYXlzIGl0IHVzaW5nIHRoZQotCSAgbmV0Y2xpZW50Y2xvY2sgY29kZS4KLQkgIFRoZSBvdXRwdXQgaXMgdGhlIHN0YXRpc3RpY3Mgc3RydWN0dXJlIGVtaXR0ZWQgYnkgdGhlIG5ldGNsaWVudGNsb2NrLAotCSAgd2hpY2ggY2FuIHRoZW4gYmUgYW5hbHlzZWQgYW5kIHR1bmVkIG9uY2Ugd2UgZ2V0IHRob3NlIHJlYWRpbmdzIGZvcgotCSAgcG90ZW50aWFsIGVkZ2UtY2FzZXMuCi0JICBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZmluZCBzb21lIGlucHV0cyB3aXRoICJiYWQiIGRhdGEgYW5kIGNvbnZlcnQKLQkgIHRoaXMgaW50byBhIHVuaXQgdGVzdCBmb3IgZnV0dXJlIHR3ZWFrcyB0byBydW4gYWdhaW5zdC4KLQotMjAxNi0wMy0wMyAyMTo0NDozNSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IEFsd2F5cyBkdW1wIGNsb2NrIG9ic2VydmF0aW9ucyBpbiBsb2dzCi0JICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGV4YW1pbmUgd2hhdCB2YWx1ZXMgd2UgZ2V0IGluIGxvZ3MsIGFuZAotCSAgcG90ZW50aWFsbHkgdHVuZSBvdXIgZmlsdGVyaW5nL2V4dHJhcG9sYXRpb24gaW4gdmFyaW91cyBzY2VuYXJpb3MuCi0KLTIwMTYtMDMtMTYgMTU6MTM6MzkgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYzoKLQkgIHZhbHZlOiBkb24ndCBzZW5kIHN0aWNreSBldmVudHMgYXMgYSBkaXJlY3QgcmVzcG9uc2UgdG8gdXBzdHJlYW0gZXZlbnRzCi0JICBBbHNvIHJlZmFjdG9yIHRoZSBleGlzdGluZyB2YWx2ZSB0ZXN0IHRvIGFjdHVhbGx5IHRlc3QgdGhlIHZhbHZlLAotCSAgYW5kIG5vdCBqdXN0IHRlc3QgdGhlIEVPUyBtZWNoYW5pc20gb2YgYSBwYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzNzUzCi0KLTIwMTYtMDMtMTEgMDk6MjM6MDQgKzAxMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogZ3N0L2dzdHBhcnNlLmM6Ci0JKiBnc3QvZ3N0cGFyc2UuaDoKLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZS1sYXVuY2g6IEFkZCBmbGFnIGZvciBwbGFjaW5nIGVsZW1lbnRzIGluIGEgYmluIGluc3RlYWQgb2YgYSBwaXBlbGluZQotCSAgQnkgZGVmYXVsdCwgZ3N0X3BhcnNlX2xhdW5jaF9mdWxsKCkgY3JlYXRlcyBhIEdzdFBpcGVsaW5lIGlmIHRoZXJlJ3MgbW9yZQotCSAgdGhhbiBvbmUgdG9wbGV2ZWwgZWxlbWVudC4gQWRkIGEgZmxhZyB0byBsZXQgaXQgdXNlIGEgR3N0QmluIGluc3RlYWQuCi0JICBBbHNvIGZpeCB0aGUgcGFyc2VyIHRvIGxldCBpdCB1c2UgdGhpcyBmbGFnIGZvciBHU1RfVFlQRV9FTEVNRU5UIHByb3BlcnR5Ci0JICB2YWx1ZXMsIHRvIGF2b2lkIGhhdmluZyBHc3RQaXBlbGluZXMgaW5zaWRlIG90aGVyIEdzdFBpcGVsaW5lcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM0NTcKLQotMjAxNi0wMy0wOCAxOTowODoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuaDoKLQkgIGNhcHNmaWx0ZXI6IG9wdGltaXNhdGlvbjogYXZvaWQgdW5uZWNlc3NhcnkgZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzKCkgY2hlY2tzCi0JICBObyBuZWVkIHRvIGRvIHRoaXMgZm9yIGV2ZXJ5IGlucHV0IGJ1ZmZlciwgc2luY2UgaXQgaW52b2x2ZXMKLQkgIGxvY2tpbmcgYW5kIGl0ZXJhdGluZyBvZiB0aGUgc3RpY2t5IGV2ZW50cyBhcnJheSBhbmQgc3VjaC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjMzMzcKLQotMjAxNi0wMy0wMyAxNDoxNTowMCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cHJvdGVjdGlvbi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOgotCSogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NlZWsuYzoKLQkgIGdzdHJlYW1lcjogdXNlIG5ldyBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzMDIwCi0KLTIwMTYtMDMtMDIgMTc6NDc6MzMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKLQkgIHF1ZXVlOiBVc2UgZnVsbCBydW5uaW5nIHRpbWUgZm9yIGxldmVsIGNhbGN1bGF0aW9uCi0JICBFbnN1cmVzIHdlIGhhdmUgcHJvcGVyIHRpbWUgbGV2ZWwgZXN0aW1hdGlvbiBmb3IgdGhlIGNhc2VzIHdoZXJlCi0JICB0aGUgaW5jb21pbmcgYnVmZmVycyBoYXZlIFBUUy9EVFMgb3V0c2lkZSBvZiB0aGUgc2VnbWVudCBzdGFydC9zdG9wCi0JICB2YWx1ZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyOTk1Ci0KLTIwMTYtMDEtMjcgMTE6NDY6MDYgKzAxMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEZpeCByYWNlIGJldHdlZW4gZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCBhbmQgc3RhdGUgY2hhbmdlCi0JICBXaGVuIGdvaW5nIGZyb20gUkVBRFkgdG8gTlVMTCBhbGwgZWxlbWVudCBwYWRzIGFyZSBkZWFjdGl2YXRlZC4gSWYKLQkgIHNpbXVsdGFuZW91c2x5IHRoZSBwYWQgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBlbGVtZW50IHdpdGgKLQkgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQoKSBhbmQgdGhlIHBhZCBpcyB1bnBhcmVudGVkLCB0aGVyZSBpcyBhIHJhY2UKLQkgIHdoZXJlIHRoZSBkZWFjdGl2YXRpb24gd2lsbCBhc3NlcnQgKGdfY3JpdGljYWwpIGlmIHRoZSBwYXJlbnQgaXMgbG9zdCBhdAotCSAgdGhlIHdyb25nIHRpbWUuCi0JICBUaGUgcHJvcG9zZWQgZml4IHdpbGwgY2hlY2sgcGFyZW50IG9ubHkgb25jZSBhbmQgcmV0YWluIGl0IHRvIGF2b2lkIHRoZQotCSAgcmFjZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE5MTIKLQotMjAxNi0wMy0wMiAyMToxMTo1MSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogQXNzdW1lIFBUUyBpcyBlcXVhbCBEVFMgaWYgUFRTIGlzIG1pc3NpbmcKLQkgIFRoaXMgaXMgdGhlIGJlc3QgZ3Vlc3Mgd2UgY2FuIG1ha2UgaWYgc3VjaCBhIGJ1ZmZlciByZWFjaGVkIHRoZSBjb2xsZWN0Ci0JICBwYWQuIFRoaXMgaXMgdW5jb21tb24sIHdlIGRvIGV4cGVjdCBwYXJzZXJzIHRvIGhhdmUgdHJpZWQgYW5kIGZpeGVkIHRoYXQKLQkgIGlmIHBvc3NpYmxlIChvciBuZWVkZWQpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjIwNwotCi0yMDE2LTAzLTI0IDEzOjMyOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLTIwMTYtMDMtMjQgMTE6NDk6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogUmVtb3ZlIHJlZHVuZGFudCBhc3NpZ25tZW50Ci0JICBDSUQgMTM1NzE1OAotCi09PT0gcmVsZWFzZSAxLjguMCA9PT0KLQotMjAxNi0wMy0yNCAxMTo0OTowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS44LjAKLQotMjAxNi0wMy0yNCAxMTozNToyNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE2LTAzLTEzIDExOjA1OjI5IC0wNDAwICBBbnRob255IEcuIEJhc2lsZSA8Ymx1ZW5lc3NAZ2VudG9vLm9yZz4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svbGliY29tcGF0Lmg6Ci0JICBsaWJjb21wYXQuaDogc3Ryc2lnbmFsKCkgc2hvdWxkIGJlIG5vdCBiZSBkZWNsZWFyZWQgY29uc3QKLQkgIFBPU0lYIHN0YW5kYXJkcyByZXF1aXJlcyBzdHJzaWduYWwoKSB0byByZXR1cm4gYSBwb2ludGVyIHRvIGEgY2hhciwKLQkgIG5vdCBhIGNvbnN0IHBvaW50ZXIgdG8gYSBjaGFyLiBbMV0gIE9uIHVDbGliYywgYW5kIHBvc3NpYmx5IG90aGVyCi0JICBsaWJjJ3MsIHRoYXQgZG8gbm90IEhBVkVfREVDTF9TVFJTSUdOQUwsIGxpYmNvbXBhdC5oIGRlY2xhcmVzCi0JICBjb25zdCBjaGFyICpzdHJzaWduYWwgKGludCBzaWcpIHdoaWNoIGNhdXNlcyBhIHR5cGUgZXJyb3IuCi0JICBbMV0gbWFuIDMgc3Ryc2lnbmFsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzNTY3Ci0KLTIwMTYtMDMtMjIgMTk6MDQ6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIHByZXNldDogVXNlIEdTVF9QUkVTRVRfUEFUSCBhcyBhbiBleHRlbnNpb24gb2YgdGhlIHN5c3RlbSBwYXRoLCBub3QgYSByZXBsYWNlbWVudCBvZiB0aGUgdXNlciBwYXRoCi0JICBGaXJzdCBsb2FkIGFsbCBzeXN0ZW0gcHJlc2V0cywgdGhlbiBhbGwgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZW4KLQkgIGZyb20gdGhlIGFwcCBkaXJlY3RvcnksIHRoZW4gZnJvbSB0aGUgdXNlciBkaXJlY3RvcnkuIEFueSBvbmUgaW4gdGhlIGNoYWluCi0JICB3aXRoIHRoZSBoaWdoZXN0IHZlcnNpb24gY29tcGxldGVseSByZXBsYWNlcyBhbGwgcHJldmlvdXMgb25lcywgbGF0ZXIgb25lcwotCSAgd2l0aCBsb3dlciB2ZXJzaW9ucyBhcmUgbWVyZ2VkIGluIHdpdGhvdXQgcmVwbGFjaW5nIGV4aXN0aW5nIHByZXNldHMuCi0JICBUaGlzIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgYmVmb3JlLCBqdXN0IHRoYXQgR1NUX1BSRVNFVF9QQVRIIGlzCi0JICBpbnNlcnRlZCBhcyBhbm90aGVyIHNvdXJjZSBvZiBkaXJlY3RvcmllcyBiZXR3ZWVuIHRoZSBzeXN0ZW0gYW5kIGFwcCBwcmVzZXRzLgotCSAgSXQgd2FzIGFkZGVkIGluIGNhMDhhZjFmMTdkMmNlMzZiODM5OThhMGJhM2E3YjhiY2FmZDc4NzIsIGJ1dCB3YXMKLQkgIGFjY2lkZW50aWFsbHkgb3ZlcnJpZGluZyB0aGUgdXNlciBwcmVzZXQgcGF0aCB0aGVyZS4gV2hpY2ggY2F1c2VkIGluY29uc2lzdGVudAotCSAgYmVoYXZpb3VyIGFzIG5ldyBwcmVzZXRzIHdlcmUgc3RpbGwgc3RvcmVkIGluIHRoZSBzeXN0ZW0gcGF0aCwganVzdCBub3QgbG9hZGVkCi0JICBmcm9tIHRoZXJlLiBNZWFuaW5nIHlvdSBjb3VsZCBzdG9yZSBhIG5ldyBwcmVzZXQgKGluIHRoZSB1c2VyIHBhdGgpLCBqdXN0IGZvcgotCSAgR3N0UHJlc2V0IHRvIG5vdCBmaW5kIGl0IGFueW1vcmUgbGF0ZXIgKGJlY2F1c2UgaXQgb25seSBsb29rZWQgaW4gdGhlCi0JICBHU1RfUFJFU0VUX1BBVEggaW5zdGVhZCBvZiB0aGUgdXNlciBwYXRoKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQwMzQKLQotMjAxNi0wMy0xOSAxMjo1NTowOSArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAZGFya29zcGhlcmUuZnI+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IGFkZCAndHJhbnNmZXIgZnVsbCcgYW5ub3RhdGlvbiB0byBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzkxMgotCi0yMDE2LTAzLTE5IDEyOjM5OjE4ICswMTAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBkYXJrb3NwaGVyZS5mcj4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBhZGQgJ3RyYW5zZmVyIGZ1bGwnIGFuZCAnbnVsbGFibGUnIGFubm90YXRpb25zIHRvIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcwotCSAgYW5kIGFsc28gY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiBhY2NvcmRpbmdseSBzaW5jZSBmdW5jdGlvbiByZXR1cm5zIGFuCi0JICBpbmNyZW1lbnRlZCBjYXBzIG9iamVjdCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIGNhcHMgc2V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzkxMgotCi0yMDE2LTAzLTE4IDE2OjAyOjQzIC0wNDAwICBCZW4gSW9mZWwgPGlvZmVsYmVuQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogZml4IGdpciBhbm5vdGF0aW9uIGZvciBnc3RfZWxlbWVudF9xdWVyeV9jb252ZXJ0KCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM4OTUKLQotMjAxNi0wMy0xNyAwMTo0Mjo1NSArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkgIHRlc3RzOiBDaGVjayBtdWx0aXF1ZXVlIG5vdC1saW5rZWQgRU9TIGhhbmRsaW5nCi0JICBBZGQgYSB0ZXN0IHdoaWNoIGNoZWNrcyB0aGF0IG5vdC1saW5rZWQgcGFkcyBjb250aW51ZQotCSAgdG8gb3V0cHV0IGRhdGEgYWZ0ZXIgbGlua2VkIHBhZHMgaGF2ZSBnb25lIEVPUwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mzc3MAotCi0yMDE2LTAzLTE4IDAzOjA4OjM5ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBGaXggbm90LWxpbmtlZCBwYWQgaGFuZGxpbmcgYXQgRU9TCi0JICBFbnN1cmUgdGhhdCBub3QtbGlua2VkIHBhZHMgd2lsbCBkcmFpbiBvdXQgYXQgRU9TIGJ5Ci0JICBjb3JyZWN0bHkgZGV0ZWN0aW5nIHRoZSBFT1MgY29uZGl0aW9uIGJhc2VkIG9uIHRoZSBFT1MKLQkgIHBhZCBmbGFnICh3aGljaCBpbmRpY2F0ZXMgd2UgYWN0dWFsbHkgcHVzaGVkIGFuIEVPUyksCi0JICBhbmQgbWFrZSBzdXJlIHRoYXQgbm90LWxpbmtlZCBwYWRzIGFyZSB3b2tlbiB3aGVuIGRvaW5nCi0JICBFT1MgcHJvY2Vzc2luZyBvbiBsaW5rZWQgcGFkcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM3NzAKLQotMjAxNi0wMy0xNSAxNjozNzozMyArMDEwMCAgUm9tYWluIFBpY2FyZCA8cm9tYWluLnBpY2FyZEBvYWtiaXRzLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBBbGxvdyBjYXBzIHF1ZXJ5IGluICJoYXZlLXR5cGUiIHNpZ25hbCBoYW5kbGVycwotCSAgSWYgYW4gYXBwbGljYXRpb24gY2FsbHMgZ3N0X3BhZF9xdWVyeV9jYXBzIGZyb20gaXRzICJoYXZlLXR5cGUiIHNpZ25hbCBoYW5kbGVyLAotCSAgdGhlbiB0aGUgcXVlcnkgZmFpbHMgYmVjYXVzZSB0eXBlZmluZC0+Y2FwcyBoYXMgbm90IGJlZW4gc2V0IHlldC4KLQkgIFRoaXMgcGF0Y2ggc2V0cyB0eXBlZmluZC0+Y2FwcyBpbiB0aGUgb2JqZWN0IG1ldGhvZCBoYW5kbGVyLCBiZWZvcmUgdGhlIHNpZ25hbAotCSAgaGFuZGxlcnMgYXJlIGNhbGxlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM0OTEKLQotPT09IHJlbGVhc2UgMS43LjkxID09PQotCi0yMDE2LTAzLTE1IDExOjU2OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjcuOTEKLQotMjAxNi0wMy0xNSAxMTo0NDowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE2LTAzLTE1IDExOjM5OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9jcy5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE2LTAzLTExIDE0OjE3OjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IFN0b3JlIGNhcHMgb24gdGhlIHBhZCBiZWZvcmUgZW1pdHRpbmcgaGF2ZS10eXBlIGJ1dCBzZW5kIGl0IGRvd25zdHJlYW0gb25seSBpbiB0aGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzQ5MQotCi0yMDE2LTAzLTEzIDEwOjMzOjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBSZWNoZWNrIGFmdGVyIHByZV9wdXNoX2ZyYW1lKCkgaWYgdGhlcmUgYXJlIHRhZ3MgcGVuZGluZwotCSAgTWFueSBwYXJzZXJzIGFyZSBzdG9yaW5nIHRhZ3Mgb25seSBpbiBwcmVfcHVzaF9mcmFtZSgpLCBpZiB3ZSB3b3VsZG4ndCBjaGVjawotCSAgYWZ0ZXJ3YXJkcyB3ZSB3b3VsZCBwdXNoIGJ1ZmZlcnMgYmVmb3JlIHRob3NlIHRhZ3MgYW5kIGEgbG90IG9mIGNvZGUgYXNzdW1lcyB0aGF0Ci0JICB0YWdzIGFyZSBhdmFpbGFibGUgYmVmb3JlIHByZXJvbGwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzNTUzCi0KLTIwMTYtMDMtMTQgMTE6MTU6MDcgKzAxMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rjb25jYXQuYzoKLQkgIGNvbmNhdDogRml4IGNvbW1lbnQgdHlwbwotCi0yMDE2LTAzLTEyIDEyOjU2OjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgUmV2ZXJ0ICJ0eXBlZmluZDogU3RvcmUgY2FwcyBvbiB0aGUgcGFkIGJlZm9yZSBlbWl0dGluZyBoYXZlLXR5cGUgYnV0IHNlbmQgaXQgZG93bnN0cmVhbSBvbmx5IGluIHRoZSBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAwODM1YzNkNjU2OWRkZTBlYzllNTUyNDQzNjM2N2M3Njc4Y2M0YTRhLgotCSAgSXQgY2F1c2VzIGRlYWRsb2NrcyBpbiBkZWNvZGViaW4sIHdoaWNoIGN1cnJlbnRseSB3b3VsZCBkZWFkbG9jayBpZiB0aGUgY2FwcwotCSAgYXJlIGFscmVhZHkgb24gdGhlIHBhZCBpbiBoYXZlLXR5cGUgYW5kIGFyZSBmb3J3YXJkZWQgd2hpbGUgY29weWluZyB0aGUgc3RpY2t5Ci0JICBldmVudHMgKHdoaWxlIGhvbGRpbmcgdGhlIGRlY29kZWJpbiBsb2NrKS4uLiBhcyB0aGF0IG1pZ2h0IGNhdXNlIHRoZSBuZXh0Ci0JICBlbGVtZW50IHRvIGV4cG9zZSBwYWRzLCB3aGljaCB0aGVuIGNhbGxzIGJhY2sgaW50byBkZWNvZGViaW4gYW5kIHRha2VzIHRoZQotCSAgZGVjb2RlYmluIGxvY2suCi0JICBUaGlzIG5lZWRzIHNvbWUgbW9yZSB0aG91Z2h0cy4KLQotMjAxNi0wMy0xMSAxNDoxNzoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBTdG9yZSBjYXBzIG9uIHRoZSBwYWQgYmVmb3JlIGVtaXR0aW5nIGhhdmUtdHlwZSBidXQgc2VuZCBpdCBkb3duc3RyZWFtIG9ubHkgaW4gdGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM0OTEKLQotMjAxNi0wMy0xMCAxMDozNTo0MCArMDEwMCAgQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSAgZG9jczogRmxlc2ggb3V0IGVsZW1lbnQgYW5kIG9iamVjdCBtYWNybyBhY2Nlc3NvciBkb2NzIGEgYml0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzMjEzCi0KLTIwMTYtMDMtMDkgMTY6MDY6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IFJlbW92ZSBzb21lIG9ic29sZXRlIGNvZGUgdGhhdCBjYW4gY2F1c2Ugd2FybmluZ3MKLQotMjAxNi0wMy0wOSAxMzo0NDoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbGllbnRjbG9jazogRG9uJ3QgcmVzZXQgY2FsaWJyYXRpb24gb2YgaW50ZXJuYWwgY2xvY2sgd2hlbmV2ZXIgYSBuZXcgbmV0Y2xpZW50IGNsb2NrIGlzIGNyZWF0ZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjMzMjUKLQotMjAxNi0wMy0wNCAxODoyMzoxOCArMDEwMCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsIDx2amFxdWV6QGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkgIGdzdGJ1ZmZlcjogZml4IEdzdFBhcmVudEJ1ZmZlck1ldGEgR1R5cGUgbmFtZQotCSAgVGhlIGFsaWFzIGRlZmluZSBHU1RfVFlQRV9QQVJFTlRfQlVGRkVSX01FVEFfQVBJX1RZUEUgaXMgd3JvbmcgYW5kCi0JICBicmVha3MgdGhlIHVzYWdlIG9mIGdzdF9idWZmZXJfZ2V0X3BhcmVudF9idWZmZXJfbWV0YSgpLgotCSAgVGhpcyBwYXRjaCBmaXhlcyB0aGUgR1R5cGUgYWxpYXMgYW5kIG1ha2UgYW5vdGhlciBhbGlhcyB0byBrZWVwIHRoZSBBUEkKLQkgIGNvbXBhdGliaWxpdHkgZ3VhcmRlZCBieSBHU1RfRElTQUJMRV9ERVBSRUNBVEVELgotCSAgQWxzbyBhZGRlZCBhIHVuaXQgdGVzdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjMxMTIKLQotMjAxNi0wMy0wMiAxMDozNzowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHRyYWNlcnJlY29yZC5jOgotCSAgdHJhY2VycmVjb3JkOiBSZW1vdmUgdXNlbGVzcyBOVUxMIGNoZWNrIGFuZCBhZGQgYXNzZXJ0aW9uIGZvciBtYWtpbmcgYXNzdW1wdGlvbnMgZXhwbGljaXQKLQkgIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCkgaXMgbm90IHJldHVybmluZyBOVUxMIGluIGFueSB2YWxpZCBzY2VuYXJpb3MsCi0JICBjaGVja2luZyBmb3IgTlVMTCBoZXJlIGlzIHVzZWxlc3MuIEVzcGVjaWFsbHkgYmVjYXVzZSB3ZSB3b3VsZCBkZXJlZmVyZW5jZSBhbnkKLQkgIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIE5VTEwgY2hlY2sgYWdhaW4uCi0JICBDSUQgMTM1MjAzNy4KLQkgIFdlIHByZXZpb3VzbHkgY2hlY2sgaWYgdGhlIHN0cmluZyBlbmRzIG9uIC5jbGFzcywgYXMgc3VjaCBzdHJyY2hyKCkgc2hvdWxkCi0JICByZXR1cm4gc29tZXRoaW5nIG5vbi1OVUxMLiBBZGQgYW4gYXNzZXJ0aW9uIGZvciB0aGF0LgotCSAgQ0lEIDEzNDk2NDIuCi0KLTIwMTYtMDMtMDEgMTk6NTA6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBtaW5vciBkb2NzIGZpeAotCSAgTWFrZSBndGstZG9jIGhhcHB5LgotCi09PT0gcmVsZWFzZSAxLjcuOTAgPT09Ci0KLTIwMTYtMDMtMDEgMTg6MTQ6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuNy45MAotCi0yMDE2LTAzLTAxIDE2OjUyOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE2LTAyLTI5IDIzOjMzOjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIFJldmVydCAiYnVzOiBjaGFuZ2UgR3N0QnVzU291cmNlIHRvIGhvbGQgYSB3ZWFrIHJlZiB0byBHc3RCdXMiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDg5NGM2N2U2NDJjMGY4NThiNWIxODA5N2ZhN2M5OTViZjNjYzUwYzEuCi0KLTIwMTYtMDItMjkgMjM6MzI6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIFJldmVydCAiYnVzOiBNYWtlIHN1cmUgdG8gcmVtb3ZlIHRoZSBHUG9sbEZEIGZyb20gdGhlIEdTb3VyY2VzIHdoZW4gZGVzdHJveWluZyB0aGUgYnVzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAwNTcwMGE3MDgyYzE0NTA1N2NjYzBiZTc2MzA2N2JjYzI2MzIzOWViLgotCi0yMDE2LTAyLTI5IDE3OjA2OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgZWxlbWVudDogUmVtb3ZlIEdTVF9TVEFURV9MT0NLX0ZVTEwoKSAvIFVOTE9DS19GVUxMKCkKLQkgIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgQVBJIGZvciB0aGF0IGluIEdMaWIgYW5kIG5vYm9keSBjb3VsZCd2ZSBldmVyIHVzZWQKLQkgIHRoZXNlIG1hY3JvcyB3aXRob3V0IGNvbXBpbGVyIGVycm9ycyBhbnl3YXkuCi0KLTIwMTYtMDItMjkgMTA6MDE6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogTWFrZSBzdXJlIHRvIHJlbW92ZSB0aGUgR1BvbGxGRCBmcm9tIHRoZSBHU291cmNlcyB3aGVuIGRlc3Ryb3lpbmcgdGhlIGJ1cwotCSAgT3RoZXJ3aXNlIHRoZSBHU291cmNlIGNhbiBsb29rIGludG8gb3VyIGFscmVhZHkgZGVzdHJveWVkIGJ1cyB3aGVyZSB0aGUKLQkgIEdQb2xsRkQgaXMgc3RvcmVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjg0OQotCi0yMDE2LTAyLTI5IDExOjA2OjUwICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIHRlc3RzOiBnaG9zdHBhZDogRml4IG1lbW9yeSBsZWFrcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjg0NQotCi0yMDE2LTAyLTI4IDEzOjU5OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgdGFnbGlzdDogYWRkIGd1YXJkIHRvIGNoZWNrIHdyaXRhYmlsaXR5IHdoZW4gcmVtb3ZpbmcgdGFncyBmcm9tIGEgdGFnbGlzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjc5MwotCi0yMDE2LTAyLTI3IDE1OjM2OjI4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y29uY2F0LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c3RyZWFtaWRkZW11eC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICBlbGVtZW50czogdXNlIG5ldyBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyNzc4Ci0KLTIwMTYtMDItMjcgMTU6Mjg6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZWxlbWVudDogYWRkIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlKCkKLQkgIFByZXR0eSBtdWNoIGV2ZXJ5IHNpbmdsZSBlbGVtZW50IGRvZXMKLQkgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0JICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzb21lX3RlbXBsKSk7Ci0JICB3aGljaCBpcyBib3RoIGNvbmZ1c2luZyBhbmQgdW5uZWNlc3NhcnkuIFdlIG1pZ2h0IGp1c3QKLQkgIGFzIHdlbGwgYWRkIGEgZnVuY3Rpb24gdG8gZG8gdGhhdCBpbiBvbmUgc3RlcC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI3NzgKLQotMjAxNi0wMi0yNyAxNTozMjoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBmaXggaW5kZW50YXRpb24KLQotMjAxNi0wMi0yNiAxMjo0MDo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGI2NGYwM2YgdG8gNmYyZDIwOQotCi0yMDE2LTAyLTI1IDIyOjM2OjE0ICswMDAwICBKYW1lcyBTdGV2ZW5zb24gPGphbWVzQHN0ZXYub3JnPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IFByZXZlbnQgZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbF91bmxvY2tlZCBmcm9tIGEgc2VnZmF1bHQgaWYgcHJpdi0+cG9sbCA9PSBOVUxMCi0JICBUaGlzIGhhcHBlbnMgaWYgdGhlIHByb2Nlc3MgcnVucyBvdXQgb2YgZmlsZSBkZXNjcmlwdG9ycy4gQmV0dGVyIHByaW50Ci0JICBhIGNyaXRpY2FsIHdhcm5pbmcgaW5zdGVhZCBvZiBqdXN0IGNyYXNoaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjcwMgotCi0yMDE2LTAyLTI0IDEwOjU2OjI0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgotCSAgYnVzOiBjaGFuZ2UgR3N0QnVzU291cmNlIHRvIGhvbGQgYSB3ZWFrIHJlZiB0byBHc3RCdXMKLQkgIFdoZW4gaG9sZGluZyBhIHJlZ3VsYXIgcmVmIGl0IHdpbGwgY2F1c2UgdGhlIEdzdEJ1cyB0byBuZXZlcgotCSAgcmVhY2ggMCByZWZlcmVuY2VzIGFuZCBpdCB3b24ndCBiZSBkZXN0cm95ZWQgdW5sZXNzIHRoZSBhcHBsaWNhdGlvbgotCSAgZXhwbGljaXRseSBjYWxscyBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2goKS4KLQkgIFN3aXRjaGluZyB0byB3ZWFrcmVmIHdpbGwgYWxsb3cgdGhlIEdzdEJ1cyB0byBiZSBkZXN0cm95ZWQuCi0JICBUaGUgYXBwbGljYXRpb24gaXMgc3RpbGwgcmVzcG9uc2libGUgZm9yIGRlc3Ryb3lpbmcgdGhlCi0JICBHU291cmNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjU1MgotCi0yMDE2LTAyLTI1IDE0OjExOjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBpZGVudGl0eTogQWRkIGEgIiAiIGFmdGVyIHB0czogaW4gdGhlIHNpbGVudD1mYWxzZSBvdXRwdXQKLQotMjAxNC0wNC0xNiAxMTo0MjoxOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSAgbWFudWFsOiBGaXggZXhhbXBsZXMgdG8gY2hlY2sgZm9yIGdzdF9idWZmZXJfbWFwIHJldHVybiB2YWx1ZXMKLQkgIE90aGVyd2lzZSBwZW9wbGUgcmVhZGluZyB0aGUgbWFudWFsIHdpbGwgZXhwZWN0IGl0IHRvIGFsd2F5cwotCSAgc3VjY2VlZCA6KQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyODMyNgotCi0yMDE0LTA0LTE2IDExOjQwOjQ2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGdzdGNoZWNrOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgZ3N0X2J1ZmZlcl9tYXAKLQkgIFdlIGNhbid0IGNoZWNrIGNvbnRlbnRzIGlmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIGl0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MzI2Ci0KLTIwMTQtMDQtMTYgMTE6Mzk6MTUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHBsdWdpbnM6IENoZWNrIHJldHVybiB2YWx1ZXMgb2YgZ3N0X2J1ZmZlcl9tYXAoKQotCSAgVGhleSBjYW4gZmFpbCBmb3IgdmFyaW91cyByZWFzb25zLgotCSAgRm9yIG5vbi1mYXRhbCBjYXNlcyAoc3VjaCBhcyB0aGUgZHVtcCBmZWF0dXJlIG9mIGlkZW50aXkgYW5kIGZha2VzaW5rKSwKLQkgIHdlIGp1c3Qgc2lsZW50bHkgc2tpcCBpdC4KLQkgIEZvciBvdGhlciBjYXNlcyBwb3N0IGFuIGVycm9yIG1lc3NhZ2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MzI2Ci0KLTIwMTYtMDItMjMgMTc6MjM6NDMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIGdzdF9tZW1vcnlfbWFwKCkKLQkgIE9ubHkgZG8gbWVtb3J5IG9wZXJhdGlvbnMgaWYgdGhlIG1lbW9yeSB3YXMgc3VjY2VzZnVsbHkgbWFwJ2VkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MzI2Ci0KLTIwMTUtMTItMTAgMTU6MzI6MjcgKzAxMDAgIEFkYW0gTWlhcnR1cyA8YWRhbS5taWFydHVzQHN0cmVhbXVubGltaXRlZC5jb20+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnbGlzdDogYWRkIEdTVF9UQUdfQ09ORFVDVE9SCi0JICBUaGlzIGlzIHVzZWZ1bCBmb3IgbWV0YWRhdGEgd2hpY2ggZXhwbGljaXRlbHkgZGlzdGluZ3Vpc2hlcwotCSAgYmV0d2VlbiBhcnRpc3QvY29tcG9zZXIgYW5kIGNvbmR1Y3Rvci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI0NTAKLQotMjAxNi0wMi0yMiAxNDowOTo1NiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBhZGQgc29tZSBtb3JlIGRvY3VtZW50YXRpb24gb24gc3RyZWFtLWlkCi0JICAuLi4gd2hlcmUgaXQgbWlnaHQgZW5kIHVwIGJlaW5nIHVzZWQgZm9yLgotCi0yMDE2LTAxLTIyIDExOjI1OjMwICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3R0cmFjZXJ1dGlscy5jOgotCSAgdHJhY2VyOiBJbml0aWFsaXplIEdzdFRyYWNlciBfcHJpdl90cmFjZXJzIGFuZCBxdWFya3MgdW5jb25kaXRpb25uYWxseQotCSAgU29tZSBwZW9wbGUgbWlnaHQgdXNlIHRyYWNlciBob29rcyBldmVuIGlmIEdTVF9UUkFDRVJfUExVR0lOUyBpcyBub3QKLQkgIHNldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA5NzkKLQotMjAxNi0wMi0yMCAxMDoxODowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sOgotCSAgZG9jczogbWFudWFsOiByZW1vdmUgZGVhZCBsaW5rIGZyb20gaW50ZWdyYXRpb24gcGFnZQotCi0yMDE2LTAyLTIwIDEwOjEzOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIGRvY3M6IG1hbnVhbDogZml4IGZvcm1hdHRpbmcKLQkgIGFkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOjEyMTA6IGVsZW1lbnQgbGlzdGl0ZW06IHZhbGlkaXR5IGVycm9yIDogRWxlbWVudAotCSAgbGlzdGl0ZW0gY29udGVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIERURCwgZXhwZWN0aW5nICguLi4pLAotCSAgZ290IChwYXJhIENEQVRBIHBhcmEgKQotCSAgPC9saXN0aXRlbT4KLQotMjAxNi0wMi0yMCAwMDo1NTozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc2NyaXB0cy9jcmVhdGUtdW5pbnN0YWxsZWQtc2V0dXAuc2g6Ci0JICBzY3JpcHRzOiBjaGVjayBmb3IgZ2l0IGluIGNyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaCBhcyB3ZWxsCi0KLTIwMTYtMDItMTkgMjA6MjY6MjYgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrLmNoYXVoYW5AZ21haWwuY29tPgotCi0JKiBnc3QvZ2xpYi1jb21wYXQuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIFdoZW5ldmVyIHdlIGluY2x1ZGUgd2luZG93cy5oLCBhbHNvIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0JICBUaGlzIHJlZHVjZXMgdGhlIG51bWJlciBvZiBzeW1ib2xzIGFuZCBjb2RlIHB1bGxlZCBpbiBkcmFzdGljYWxseQotCi0yMDE2LTAyLTEzIDA2OjUzOjI0ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9wcmludGYvZ3N0LXByaW50Zi5oOgotCSAgcHJpbnRmOiBPbiBNU1ZDLCBhbHNvIGRlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAotCSAgTVNWQyBwcm92aWRlcyBzdGRpbnQuaCBidXQgbm90IGludHR5cGVzLmgsIGFuZCB3ZSBuZWVkIHRvIGluY2x1ZGUgc3RkaW50LmggdG8KLQkgIGdldCBpbnRtYXhfdAotCi0yMDE2LTAyLTEzIDA2OjQyOjA2ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RwdHBjbG9jay5jOgotCSAgcHRwY2xvY2s6IE9ubHkgaW5jbHVkZSB1bmlzdGQuaCBpZiBmb3VuZAotCSAgdW5pc3RkLmggaXMgbm90IHByb3ZpZGVkIGJ5IHRoZSAgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIuIEl0IGluc3RlYWQKLQkgIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgZGVmaW5lcyB0aHJvdWdoIGlvLmgKLQotMjAxNi0wMi0xMyAwNjoxOTo1MiArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JICBwbHVnaW46IE9ubHkgY2hlY2sgZm9yIFNfSUZCTEsgaWYgaXQgaXMgZGVmaW5lZAotCSAgV2luZG93cyBkb2VzIG5vdCBkZWZpbmUgU19JRkJMSyBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgYmxvY2sgZGV2aWNlcwotCi0yMDE2LTAyLTE5IDIwOjE3OjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB3aW4zMi9NQU5JRkVTVDoKLQkqIHdpbjMyL1JFQURNRS50eHQ6Ci0JKiB3aW4zMi9jb21tb24vZGlyZW50LmM6Ci0JKiB3aW4zMi9jb21tb24vZGlyZW50Lmg6Ci0JKiB3aW4zMi9jb21tb24vZ3RjaGFyLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0ZGF0YXByb3RvY29sLmRlZjoKLQkqIHdpbjMyL3ZzMTAvQ29tbW9uLnByb3BzOgotCSogd2luMzIvdnMxMC9MaWJyYXJ5LnByb3BzOgotCSogd2luMzIvdnMxMC9QbHVnaW4ucHJvcHM6Ci0JKiB3aW4zMi92czEwL1JlYWRNZS50eHQ6Ci0JKiB3aW4zMi92czEwL1Rvb2wucHJvcHM6Ci0JKiB3aW4zMi92czEwL2Jhc2UvYmFzZS52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9iYXNlL2Jhc2UudmN4cHJvai5maWx0ZXJzOgotCSogd2luMzIvdnMxMC9jb250cm9sbGVyL2NvbnRyb2xsZXIudmN4cHJvajoKLQkqIHdpbjMyL3ZzMTAvY29udHJvbGxlci9jb250cm9sbGVyLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ2VuZXJhdGVkL2dlbmVyYXRlZC52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9nZW5lcmF0ZWQvZ2VuZXJhdGVkLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ3N0LWluc3BlY3QvZ3N0LWluc3BlY3QudmN4cHJvajoKLQkqIHdpbjMyL3ZzMTAvZ3N0LWluc3BlY3QvZ3N0LWluc3BlY3QudmN4cHJvai5maWx0ZXJzOgotCSogd2luMzIvdnMxMC9nc3QtbGF1bmNoL2dzdC1sYXVuY2gudmN4cHJvajoKLQkqIHdpbjMyL3ZzMTAvZ3N0LWxhdW5jaC9nc3QtbGF1bmNoLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ3N0LXR5cGVmaW5kL2dzdC10eXBlZmluZC52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9nc3QtdHlwZWZpbmQvZ3N0LXR5cGVmaW5kLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ3N0Y29yZWVsZW1lbnRzL2dzdGNvcmVlbGVtZW50cy52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9nc3Rjb3JlZWxlbWVudHMvZ3N0Y29yZWVsZW1lbnRzLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ3N0cmVhbWVyLnNsbjoKLQkqIHdpbjMyL3ZzMTAvZ3N0cmVhbWVyL2dzdHJlYW1lci52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9nc3RyZWFtZXIvZ3N0cmVhbWVyLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvbmV0L25ldC52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9uZXQvbmV0LnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzNi9ncmFtbWFyLmRzcDoKLQkqIHdpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3A6Ci0JKiB3aW4zMi92czYvZ3N0X2xhdW5jaC5kc3A6Ci0JKiB3aW4zMi92czYvZ3N0cmVhbWVyLmRzdzoKLQkqIHdpbjMyL3ZzNi9saWJnc3RiYXNlLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3Rjb3JlZWxlbWVudHMuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdG5ldC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0cmVhbWVyLmRzcDoKLQkqIHdpbjMyL3ZzNy9ncmFtbWFyLnZjcHJvajoKLQkqIHdpbjMyL3ZzNy9nc3QtaW5zcGVjdC52Y3Byb2o6Ci0JKiB3aW4zMi92czcvZ3N0LWxhdW5jaC52Y3Byb2o6Ci0JKiB3aW4zMi92czcvZ3N0cmVhbWVyLnNsbjoKLQkqIHdpbjMyL3ZzNy9saWJnc3RiYXNlLnZjcHJvajoKLQkqIHdpbjMyL3ZzNy9saWJnc3Rjb250cm9sbGVyLnZjcHJvajoKLQkqIHdpbjMyL3ZzNy9saWJnc3Rjb3JlZWxlbWVudHMudmNwcm9qOgotCSogd2luMzIvdnM3L2xpYmdzdHJlYW1lci52Y3Byb2o6Ci0JKiB3aW4zMi92czgvZ3JhbW1hci52Y3Byb2o6Ci0JKiB3aW4zMi92czgvZ3N0LWluc3BlY3QudmNwcm9qOgotCSogd2luMzIvdnM4L2dzdC1sYXVuY2gudmNwcm9qOgotCSogd2luMzIvdnM4L2dzdHJlYW1lci5zbG46Ci0JKiB3aW4zMi92czgvbGliZ3N0YmFzZS52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0Y29udHJvbGxlci52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0Y29yZWVsZW1lbnRzLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RyZWFtZXIudmNwcm9qOgotCSAgd2luMzI6IHVwZGF0ZSBSRUFETUUgYW5kIHJlbW92ZSBvdXRkYXRlZCBidWlsZCBjcnVmdAotCSAgVGhpcyBoYXNuJ3QgYmVlbiB0b3VjaGVkIGZvciBnZW5lcmF0aW9ucywgZG9lc24ndCB3b3JrLAotCSAgYW5kIGlzIGp1c3QgY2F1c2luZyBjb25mdXNpb24uIFdlIGFsc28gZG9uJ3Qgd2FudCB0bwotCSAgbWFpbnRhaW4gdGhlc2UgZmlsZXMgbWFudWFsbHkuCi0KLTIwMTYtMDItMTkgMDg6NDM6MDAgKzAwMDAgIEdlb3JnZSBZdW5hZXYgPGd5dW5hZXZAZ21haWwuY29tPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIG1hbnVhbDogRXhwbGFpbiB3aGF0IGhhcHBlbnMgaWYgdXBzdHJlYW0gZWxlbWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcGlwZWxpbmUgd2l0aG91dCBkcmFpbmluZyB0aGVtIGZpcnN0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyMzAyCi0KLTIwMTYtMDItMTkgMTQ6NDE6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdGhhcm5lc3MuYzoKLQkgIHRlc3RzOiBmaXggaW5kZW50YXRpb24KLQotMjAxNi0wMi0xOSAxMjozODoyMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjcuMiA9PT0KLQotMjAxNi0wMi0xOSAxMTo0Nzo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjcuMgotCi0yMDE2LTAyLTE5IDEwOjI5OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE2LTAyLTE4IDE0OjIwOjE3ICswMDAwICBKdWxpZW4gSXNvcmNlIDxqLmlzb3JjZUBzYW1zdW5nLmNvbT4KLQotCSogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkgIHVuaW5zdGFsbGVkLnBjOiBhZGQgc3VwcG9ydCBmb3Igbm9uIGxpYnRvb2wgYnVpbGQgc3lzdGVtcwotCSAgQ3VycmVudGx5IHRoZSAubGEgcGF0aCBpcyBwcm92aWRlZCB3aGljaCByZXF1aXJlcyB0byB1c2UgbGlidG9vbCBhcwotCSAgbWVudGlvbmVkIGluIHRoZSBHU3RyZWFtZXIgbWFudWFsIHNlY3Rpb24taGVsbG93b3JsZC1jb21waWxlcnVuLmh0bWwuCi0JICBJdCBpcyBmaW5lIGFzIGxvbmcgYXMgdGhlIGFwcGxpY2F0aW9uIGlzIGJ1aWx0IHVzaW5nIGxpYnRvb2wuCi0JICBTbyBjdXJyZW50bHkgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvbXBpbGUgYSBHU3RyZWFtZXIgYXBwbGljYXRpb24KLQkgIHdpdGhpbiBnc3QtdW5pbnN0YWxsZWQgd2l0aCBDTWFrZSBvciBvdGhlciBidWlsZCBzeXN0ZW0gZGlmZmVyZW50Ci0JICB0aGFuIGF1dG90b29scy4KLQkgIFRoaXMgcGF0Y2ggYWxsb3dzIHRvIGRvIHRoZSBmb2xsb3dpbmcgaW4gZ3N0LXVuaW5zdGFsbGVkIGVudjoKLQkgIGdjYyB0ZXN0LmMgLW8gdGVzdCAkKHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdzdHJlYW1lci0xLjApCi0JICBQcmV2aW91c2x5IGl0IHJlcXVpcmVkIHRvIHByZXBlbmQgbGlidG9vbCAtLW1vZGU9bGluawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDc3OAotCi0yMDE2LTAyLTE4IDExOjQzOjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBSZXZlcnQgInBhZDogUFVMTCBwcm9iZXMgYXJlIGNhbGxlZCB3aXRob3V0IGEgYnVmZmVyIHNvIGRvbid0IHJlcXVpcmUgYW55IG9mIHRoZSBkYXRhIGZsYWdzIHRvIGJlIHNldCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYjg5ZmE0Nzg2YjNkZjZjYjc5ZjY2MmMwMzdkZWU3NGIzZjc0MjhkNi4KLQkgIFRoZSBjaGFuZ2VzIGJyZWFrIHZhcmlvdXMgdGVzdHMuCi0KLTIwMTYtMDItMTggMTE6NDM6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIFJldmVydCAicGFkOiBBZGQgdGVzdCBmb3IgYmxvY2tpbmcgcHVsbCBwcm9iZSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMTdkMzBlOTQ0YmUwNDI1ZWJiNGZiNjA0NmY4MmQxZjYxNzAxZmU4Zi4KLQkgIFRoZSBQVUxMIHByb2JlIGNoYW5nZXMgYnJlYWsgdmFyaW91cyB0ZXN0cy4KLQotMjAxNi0wMi0xOCAxMTowOTozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBQcm90ZWN0IGFnYWluc3QgZmFpbGluZyB0byBtYXAgaW5wdXQgbWVtb3J5IHdoZW4gbWVyZ2luZyBtZW1vcmllcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjIzOQotCi0yMDE2LTAxLTI4IDE2OjIyOjE3ICswMTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEFkZCB0ZXN0IGZvciBibG9ja2luZyBwdWxsIHByb2JlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxMjExCi0KLTIwMTYtMDItMTcgMTY6NTc6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogUFVMTCBwcm9iZXMgYXJlIGNhbGxlZCB3aXRob3V0IGEgYnVmZmVyIHNvIGRvbid0IHJlcXVpcmUgYW55IG9mIHRoZSBkYXRhIGZsYWdzIHRvIGJlIHNldAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTIxMQotCi0yMDE2LTAyLTE3IDE2OjQxOjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgUmV2ZXJ0ICJlbGVtZW50OiBEb24ndCBob2xkIHN0YXRlIGxvY2sgYWxsIHRoZSB0aW1lIHdoaWxlIHNlbmRpbmcgYW4gZXZlbnQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGI0Mjc5OTcxMTlhMmI2YWFjYmViNTUwZjcyOTkzNmY4Yjk2M2UyNGIuCi0JICBJdCBicmVha3MgdGhpbmdzIHRoYXQgdXNlZCB0byB3b3JrIGJlZm9yZSwgZXZlbiBpZiB0aGUgY2hhbmdlIGJ5IGl0c2VsZiBpcwotCSAgY29ycmVjdCBhbmQgdGhlIHByZXZpb3VzIGNvZGUgaXMganVzdCB3b3JraW5nIGFyb3VuZCBkZWVwZXIgYnVncyBpbiB0aGUgYXN5bmMKLQkgIHN0YXRlIGNoYW5nZSBjb2RlLiBMZXQncyBnbyBiYWNrIHRvIHdoYXQgcHJldmlvdXNseSB3b3JrZWQgYW5kIHRoZW4gZml4IGFzeW5jCi0JICBzdGF0ZSBjaGFuZ2VzIGluIGdlbmVyYWwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNTMyCi0KLTIwMTYtMDItMTcgMTU6MjY6NDkgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgUmV2ZXJ0ICJnaG9zdHBhZDogRG8gbm90aGluZyBpbiBfaW50ZXJuYWxfYWN0aXZhdGVfcHVzaF9kZWZhdWx0IgotCSAgVGhhdCBjb21taXQgd291bGQgYnJlYWsgc2NoZWR1bGluZyByZWNvbmZpZ3VyYXRpb24gd2l0aCBnaG9zdHBhZHMKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWI1NWFkN2VhYWQ0ZmEyYzBiMTZjNzg5MzUwZTg4MmNmNzBhMjdlZC4KLQotMjAxNi0wMi0xNyAxNToyNTowOCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBjaGVjazogQWRkIHRlc3QgZm9yIGNoZWNraW5nIHNjaGVkdWxpbmcgcmVjb25maWd1cmF0aW9uIHdpdGggZ2hvc3RwYWRzCi0JICBTaG93Y2FzZXMgdGhlIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSB0aGlzIGNvbW1pdDoKLQkgIENvbW1pdDogYWI1NWFkN2VhYWQ0ZmEyYzBiMTZjNzg5MzUwZTg4MmNmNzBhMjdlZAotCSAgQXV0aG9yOiBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLQkgIERhdGU6ICAgV2VkIEphbiAyNyAxMzoyMDoyMyAyMDE2ICswMTAwCi0JICBnaG9zdHBhZDogRG8gbm90aGluZyBpbiBfaW50ZXJuYWxfYWN0aXZhdGVfcHVzaF9kZWZhdWx0Ci0KLTIwMTYtMDItMTcgMTE6MDI6MzQgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogYWRkIHNvbWUgdGVzdHMgZm9yIGFjdGl2YXRpb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE5MTMKLQotMjAxNi0wMS0yNyAxMzoyMDoyMyArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IERvIG5vdGhpbmcgaW4gX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdAotCSAgV2hlbiBjYWxsaW5nIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSgpIG9uIGEgZ2hvc3RwYWQKLQkgIGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVzaF9kZWZhdWx0KCkgd2lsbCBiZSBjYWxsZWQuIFRoaXMgd2lsbCBjYWxsCi0JICBnc3RfcGFkX2FjdGl2YXRlX21vZGUoKSBvbiB0aGUgcHJveHlwYWQgKHdoaWNoIGlzIGludGVybmFsIG9mIHRoZQotCSAgZ2hvc3RwYWQpLCBjYWxsaW5nIGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVzaF9kZWZhdWx0KCksIHdoaWNoCi0JICBhZ2FpbiB3aWxsIGNhbGwgZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlKCkgb24gdGhlIG9yaWdpbmFsIGdob3N0cGFkLgotCSAgQnkgc2ltcGx5IHJldHVybmluZyBUUlVFIGluCi0JICBnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCgpIHRoZSByZWR1bmRhbnQgY2FsbCB0bwotCSAgZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlKCkgKGZvciB0aGUgc2FtZSBwYWQpIGlzIGF2b2lkZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxOTEzCi0KLTIwMTYtMDItMTYgMTc6NTM6MTAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeWNodW5rczogcmVtb3ZlIHVudXNlZCBtYWNybwotCSAgbWFjcm8gd2FzIGFkZGVkIGluIDIwMTEgYW5kIGlzbid0IHVzZWQgYW55bW9yZQotCi0yMDE2LTAyLTE2IDE5OjExOjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSAgUmV2ZXJ0ICJxdWV1ZTI6IGFkZCBvdmVycnVuIHNpZ25hbCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOGFlOGIyNzIzZDBjZjE3OWE0ZjA5YjJmNmM1Zjc5N2UyZDk3MDM0ZC4KLQkgIEl0J3Mgbm90IHVzZWQgYW55bW9yZSBieSBhbnl0aGluZyBhbmQgd2FzIGNvbnNpZGVyZWQgYSBiYWQgaWRlYSBpbiBnZW5lcmFsLgotCi0yMDE0LTA2LTA1IDEzOjI3OjI4IC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQG5lbWVyc29uLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzZmVhdHVyZXMuYzoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGRvY3M6IGFubm90YXRlIEMgZXhhbXBsZXMgYXMgc3VjaAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMTI5MgotCi0yMDE2LTAyLTE1IDExOjEzOjQwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvdHJhY2Vyc2VyaWFsaXplLmM6Ci0JICBiZW5jaG1hcms6IHRyYWNlcnNlcmlhbGl6ZTogYWRkIG1pc3NpbmcgcmV0dXJuIHN0YXRlbWVudAotCSAgdHJhY2Vyc2VyaWFsaXplLmM6MTE3OjE6IGVycm9yOiBjb250cm9sIHJlYWNoZXMgZW5kIG9mCi0JICBub24tdm9pZCBmdW5jdGlvbiBbLVdlcnJvcj1yZXR1cm4tdHlwZV0KLQotMjAxNi0wMi0xNSAxMDowNjowOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0cHJvdGVjdGlvbi5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBwcm90ZWN0aW9uL2hhcm5lc3Mvc3lzdGVtY2xvY2s6IG1vdmUgZGVjbGFyYXRpb24gb3V0IG9mIGZvciBsb29wIGluaXRpYWxpemF0aW9uCi0JICBDOTAgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0IGl0Ci0JICBlcnJvcjog4oCYZm9y4oCZIGxvb3AgaW5pdGlhbCBkZWNsYXJhdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBDOTkgb3IgQzExIG1vZGUKLQkgIEFsc28gcnVuIGdzdC1pbmRlbnQgb24gc3lzdGVtY2xvY2sgdGVzdHMuCi0KLTIwMTYtMDEtMjcgMTU6MTY6MDMgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogYWx3YXlzIHNldCBvdXIgdGVzdC1jbG9jayBvbiB0aGUgaGFybmVzc2VkIGVsZW1lbnQKLQkgIFRoZSBpbnRlZ3JhdGlvbiBpcyBhbHJlYWR5IHNvIHRpZ2h0LCB0aGVyZSBpcyBubyByZWFzb24gdG8KLQkgIG5vdCBmdXJ0aGVyIGZvcm1hbGl6ZSBpdCEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE5MTQKLQotMjAxNi0wMi0xMyAxNjoxMDoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogZml4IGNvbXBpbGF0aW9uCi0JICBXYXMgc3VwcG9zZWQgdG8gYmUgc3F1YXNoZWQgd2l0aCAzMzZjN2JiNgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTkxMAotCi0yMDE2LTAyLTEzIDE2OjEwOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JICBoYXJuZXNzOiBmaXggaW5kZW50YXRpb24KLQotMjAxNi0wMS0yMSAxMzozMzoxNSArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogRml4IE1UIGlzc3VlcyB3aGVuIGZvcndhcmRpbmcgZXZlbnQvcXVlcnkgdG8gc2luayBoYXJuZXNzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxOTEwCi0KLTIwMTYtMDItMTMgMTA6MDQ6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiBhZGQgbmV3IC1iYWQgbGlicmFyaWVzIGF1ZGlvLCBwbGF5ZXIgYW5kIHdheWxhbmQgdG8gcGF0aHMKLQkgIEFuZCByZW1vdmUgZWdsIHdoaWNoIG5vIGxvbmdlciBleGlzdHMuCi0KLTIwMTYtMDItMTIgMTE6NTc6NTUgLTA4MDAgIE1hcnRpbiBLZWxseSA8bWFydGluQHN1cnJvdW5kLmlvPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkgIHB1c2hzcmM6IGZpeCBtaW5vciB0eXBvcyBpbiBoZWFkZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE5NzAKLQotMjAxNi0wMS0yMSAxMzoyODoyMyArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuaDoKLQkgIGhhcm5lc3M6IEFkZCBldmVudCBzdHJlc3MgdGVzdCBmdW5jdGlvbnMgd2l0aCBjYWxsYmFjawotCSAgU2ltaWxhciB0byB0aGUgc3RyZXNzIHRlc3QgZnVuY3Rpb25zIGZvciBidWZmZXJzIHRoYXQgaGFzIGEgY2FsbGJhY2sgdG8KLQkgIGNyZWF0ZSB0aGUgYnVmZmVyIHRvIGJlIHB1c2hlZCwgaXQncyB1c2VmdWwgdG8gaGF2ZSBmdW5jdGlvbnMgdGhhdCB1c2UgYQotCSAgY2FsbGJhY2sgdG8gY3JlYXRlIHRoZSBldmVudCB0byBiZSBwdXNoZWQuCi0JICBBUEk6IGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnQoKQotCSAgQVBJOiBnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGwoKQotCSAgQVBJOiBnc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0KCkKLQkgIEFQSTogZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE5MzIKLQotMjAxNi0wMS0xNCAyMTo1NDo0MiArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5oOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3R0ZXN0Y2xvY2suYzoKLQkgIHRlc3RjbG9jazogYWRkIGNyYW5rIG1ldGhvZAotCSAgQW5kIHVzZSBpdCBpbnNpZGUgR3N0SGFybmVzcwotCSAgQVBJOiBnc3RfdGVzdF9jbG9ja19jcmFuaygpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxOTA2Ci0KLTIwMTUtMTItMDkgMTM6NDM6MzggKzExMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5oOgotCSAgaGFybmVzczogZW5hYmxlIGVtcHR5IGhhcm5lc3MgY3JlYXRpb24gYW5kIHJlZmFjdG9yIGFyb3VuZCB0aGlzCi0JICBBbHNvIG1ha2UgdGhlIHRlc3RjbG9jayBhIG1lbWJlciBvZiB0aGUgaGFybmVzcywgYWxsb3dpbmcgc29tZQotCSAgbW9yZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgY2xvY2sgcHJpb3IgdG8gYWRkaW5nIGVsZW1lbnRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTkwNQotCi0yMDE2LTAyLTEyIDE1OjEyOjQzICswMTAwICBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBmaXggdW51c2VkIHBhcmFtZXRlciBjb21waWxlciB3YXJuaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxOTE5Ci0KLTIwMTUtMDgtMDQgMTc6MDk6MzUgKzAyMDAgIE1pa2hhaWwgRmx1ZGtvdiA8bWlzaGFAcGV4aXAuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JICBoYXJuZXNzOiBmaXggdGhlIHJhY2UgaW4gYmxvY2tpbmcgcHVzaCBtb2RlCi0JICBEZXBlbmRpbmcgb24gd2hlbiBnc3RfaGFybmVzc19wdWxsIHdhcyBjYWxsZWQgLSBiZWZvcmUgdGhlIGJ1ZmZlciByZWFjaGVkCi0JICBnc3RfaGFybmVzc19jaGFpbiBvciBhZnRlciB3ZSBjYW4gZ2V0IGRpZmZlcmVudCBiZWhhdmlvcnMgb2YgdGhlIHRlc3QKLQkgIHdpdGggZW5hYmxlZCBibG9ja2luZyBwdXNoIG1vZGUuIFRoZSBmaXggbWFrZXMgdGhlIGJlaGF2aW9yIGFsd2F5cyB0aGUKLQkgIHNhbWUuIEluIHB1bGwgZnVuY3Rpb24gd2UgZ2V0IHRoZSBidWZmZXIgZmlyc3QsIHRodXMgbWFraW5nIHN1cmUKLQkgIGdzdF9oYXJuZXNzX2NoYWluIHdhaXRzIGZvciB0aGUgc2lnbmFsLCBhbmQgZW1pdHRpbmcgdGhlIHNpZ25hbCBhZnRlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE5MzEKLQotMjAxNi0wMi0wNCAxNToxNjo0MSArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBjaGVjazogQWRkIHRjYXNlX3NraXBfYnJva2VuX2xvb3BfdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTkxNwotCi0yMDE2LTAxLTIxIDEzOjI1OjQwICswMTAwICBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogRml4IGRvY3MgZm9yIHN0cmVzcyB0ZXN0IGZ1bmN0aW9ucwotCSAgbm90aWZ5IGlzIG5vdCBjYWxsZWQgcGVyIGJ1ZmZlciwgYnV0IHdoZW4gdGhlIHRocmVhZCBpcyBmcmVlZC4KLQkgIENvbW1lbnQgYWJvdXQgc2VyaWFsaXplZCBldmVudHMgYW5kIE9PQiBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciB1cHN0cmVhbQotCSAgZXZlbnRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTkwOQotCi0yMDE1LTEyLTA4IDE0OjE4OjIxICswMTAwICBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogVW5zZXQgc2lua19mb3J3YXJkX3BhZCBiZWZvcmUgdGVhcmluZyBkb3duIHNpbmtfaGFybmVzcwotCSAgU2V0IHRoZSBzaW5rX2ZvcndhcmRfcGFkIHRvIE5VTEwgYmVmb3JlIHRlYXJpbmcgZG93biBzaW5rX2hhcm5lc3MgdG8KLQkgIGF2b2lkIHRoYXQgdGhlIGhhcm5lc3MgdHJpZXMgdG8gZm9yd2FyZCBldmVudHMvcXVlcmllcyB0byBpdCB3aGlsZSBpdCdzCi0JICB0ZWFyaW5nIGRvd24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxOTA0Ci0KLTIwMTUtMDktMjkgMTI6MTI6MjQgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogZml4IHVwIGRvY3MgdG8gcmVmZXJlbmNlIGZ1bmN0aW9ucyBwcm9wZXJseQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTkwMQotCi0yMDE2LTAyLTEwIDE0OjAxOjU0ICswMTAwICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgPHZqYXF1ZXpAaWdhbGlhLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IHBhc3MgYWNxdWlyZSBwYXJhbXMgdG8gYWxsb2NfYnVmZmVyCi0JICBXaGVuIGFsbG9jYXRpbmcgYSBuZXcgYnVmZmVyIGluIHRoZSBwb29sLCBib3RoIHRoZSBkb19hbGxvY19idWZmZXIoKSBhbmQgdGhlCi0JICB2bWV0aG9kLCBhbGxvY19idWZmZXIoKSwgcmVjZWl2ZSB0aGUgcGFyYW1ldGVyIEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zLgotCSAgTm9uZXRoZWxlc3MsIHdoZW4gZGVmYXVsdF9hY3F1aXJlX2J1ZmZlcigpIGNhbGxzIHRoZSBkb19hbGxvY19idWZmZXIoKSBpdCBkb2VzCi0JICBub3QgcGFzcyB0aGUgcmVjZWl2ZWQgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMsIHNvIHdoZW4gdGhlIHVzZXIgcGFzcyB0aG9zZQotCSAgcGFyYW1ldGVycyB0aGV5IGFyZSBpZ25vcmVkIGJ5IGFsbG9jX2J1ZmZlcigpIHZtZXRob2QuCi0JICBUaGlzIG9uZS1saW5lciBwYXRjaCBwYXNzIHRoZSByZWNlaXZlZCBhY3F1aXJlIHBhcmFtcyB0byBkb19hbGxvY19idWZmZXIoKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE4MjQKLQotMjAxNi0wMi0xMCAwOTowOToyOSArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBzeXN0ZW1jbG9jazogRml4IHdhaXQvdW5zY2hlZHVsZSByYWNlCi0JICBGaXhlcyBhIHJhY2Ugd2hlcmUgYW4gZW50cnkgaXMgc2V0IHRvIEJVU1kgaW4KLQkgIGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXIoKSBhbmQgaXMgVU5TQ0hFRFVMRUQgYmVmb3JlCi0JICBnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyX3VubG9ja2VkKCkgc3RhcnRzIHByb2Nlc3NpbmcgaXQuIFRoZQotCSAgd2FrZXVwIGFkZGVkIGJ5IGdzdF9zeXN0ZW1fY2xvY2tfaWRfdW5zY2hlZHVsZSgpIG11c3QgYmUgY2xlYW5lZCB1cC4KLQkgIFR3byBzdHJlc3MgdGVzdHMgYXJlIGFkZGVkLiBPbmUgdGVzdCB0aGF0IHRyaWdnZXJzIHRoZSBzcGVjaWZpYyBpc3N1ZQotCSAgZGVzY3JpYmVkIGFib3ZlLiBUaGUgc2Vjb25kIHN0cmVzc2VzIHRoZSBjb2RlIHBhdGggd2hlcmUgYSB3YWl0IGlzCi0JICByZXNjaGVkdWxlZCBiZWNhdXNlIHRoZSBwb2xsIHJldHVybmVkIGVhcmx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTU4NgotCi0yMDE2LTAyLTA1IDE1OjM0OjQ3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgc3lzdGVtY2xvY2s6IGhhbmRsZSB1bnNjaGVkdWxlIG9mIGxhdGUgZW50cmllcwotCSAgSWYgdGhlIGNsb2NrZW50cnkgaXMgdG9vIGxhdGUgYW5kIGlzIHVuc2NoZWR1bGVkIGJlZm9yZSBpdCBnZXRzCi0JICBhIGNoYW5nZSB0byBkZXRlY3QgaXRzIGxhdGVuZXNzIHRoZSB3YWtldXAgY291bnQgYW5kIHRoZSBwb2xsIGFyZQotCSAgdXNlZCBidXQgbmV2ZXIgcHJvcGVybHkgY2xlYW5lZCB1cC4gVGhpcyBsZWF2ZXMgaXQgaW4gYSBkaXJ0eSBzdGF0ZQotCSAgdGhhdCBpcyBnb2luZyB0byBtZXNzIHdpdGggdGhlIG5leHQgY2xvY2sgZW50cnkgd2FpdGluZyByZXF1ZXN0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE1ODYKLQotMjAxNi0wMi0wNSAxOTowODoxOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIHRlc3RzOiBleHRlbmQgdGhlIEFNX1RFU1RTX0VOVklST05NRU5UIGZyb20gY2hlY2subWFrCi0JICBUbyBnZXQgdGhlIENLX0RFRkFVTFRfVElNRU9VVCBkZWZpbmVkIGZvciBhbGwgdGVzdHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE0NzIKLQotMjAxNi0wMi0wNSAxODowMTo1MiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDg2ZTQ2NjMgdG8gYjY0ZjAzZgotCi0yMDE2LTAyLTA0IDEwOjA3OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggc3RyYXkgZGlzY29udCBmbGFnIHNldCBvbiBvdXRnb2luZyBidWZmZXJzIGluIHB1c2ggbW9kZQotCSAgV2UgaGF2ZSBubyBndWFyYW50ZWVzIGFib3V0IHdoYXQgZmxhZ3MgYXJlIHNldCBvbiBidWZmZXJzIHdlIHRha2UKLQkgIG91dCBvZiB0aGUgR3N0QWRhcHRlci4gSWYgd2UgcHVzaCBvdXQgbXVsdGlwbGUgYnVmZmVycyBmcm9tIHRoZQotCSAgZmlyc3QgaW5wdXQgYnVmZmVyICh3aGljaCB3aWxsIGhhdmUgZGlzY29udCBzZXQpLCBvbmx5IHRoZSBmaXJzdAotCSAgYnVmZmVyIHdlIHB1c2ggb3V0IHNob3VsZCBiZSBmbGFnZ2VkIGFzIGRpc2NvbnQsIG5vdCBhbGwgb2YgdGhlCi0JICBidWZmZXJzIHByb2R1Y2VkIGZyb20gdGhhdCBmaXJzdCBpbml0aWFsIGlucHV0IGJ1ZmZlci4KLQkgIEZpeGVzIGlzc3VlIHdoZXJlIHRoZSBmaXJzdCBmZXcgbXAzIGZyYW1lcy9zZWNvbmRzIG9mIGRhdGEgaW4gcHVzaAotCSAgbW9kZSB3ZXJlIHNraXBwZWQgb3IgZ2FyYmxlZCBpbiBzb21lIGNhc2VzLCBhbmQgdGhlIGRpc2NvbnQgZmxhZ3MKLQkgIHdvdWxkIGFsc28gdHJpcCB1cCBkZWNvZGVycyB3aGljaCB3ZXJlIGdldHRpbmcgZHJhaW5lZC9mbHVzaGVkIGZvcgotCSAgZXZlcnkgYnVmZmVyLiBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiAxLjYgYXBwYXJlbnRseS4KLQotMjAxNi0wMi0wMiAxNjozNTozNCArMDEwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmM6Ci0JICBjb250cm9sbGVyOiBEbyBub3QgdW5zZXQgdW5pbml0aWFsbGl6ZWQgR1ZhbHVlCi0JICBJbiBjYXNlIHRoZSBwcm9wZXJ0eSB3YXMgbm90IGludGVycG9sbGFibGUgd2UgbWlnaHQgbmV2ZXIgaW5pdGlhbGl6ZQotCSAgdGhlIEdWYWx1ZSwgd2Ugc2hvdWxkIHRodXMgbmV2ZXIgdW5zZXQgaXQuCi0KLTIwMTYtMDItMDIgMTY6MzQ6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWFsbG9jYXRpb24ueG1sOgotCSAgZG9jczogcHdnOiBmaXggbWlzc2luZyBlbmQgb2YgbGluZSBzZW1pY29sb24gaW4gY3VzdG9tIG1ldGEgZXhhbXBsZQotCi0yMDE2LTAyLTAyIDEwOjU2OjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IGFkZCBndWFyZCB0byBtYWtlIHN1cmUgZ3N0cmVhbWVyIGlzIGluaXRpYWxpemVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNDQ4Ci0KLTIwMTYtMDItMDEgMTg6NDE6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiBhZGQgbmV3IHJ0c3Agc2VydmVyIHBsdWdpbiBsb2NhdGlvbiB0byBwbHVnaW5zIHBhdGgKLQotMjAxNi0wMS0yNSAxNjozMDowNCArMDkwMCAgSG9vbkhlZSBMZWUgPGhvb25oZWUubGVlQGxnZS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IFRyeSB0byBnZW5lcmF0ZSBjYXBzIG9uIHRoZSBzcmNwYWQgYmVmb3JlIGZvcndhcmRpbmcgR0FQIGV2ZW50Ci0JICBUbyBjb25maWd1cmUgZG93bnN0cmVhbSBlbGVtZW50cyBhbmQgY29tcGxldGUgaW5pdGlhbCBwcmUtcm9sbGluZywKLQkgIGVuc3VyZSB3ZSBoYXZlIGRlZmF1bHQgb3V0cHV0IGNhcHMgYmVmb3JlIGZvcndhcmRpbmcgR0FQIGV2ZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mzg5OQotCi0yMDE2LTAxLTI4IDIwOjE4OjU1IC0wNzAwICBBbGV4IEhlbnJpZSA8YWxleGhlbnJpZTI0QGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kZWxlbWVudDogSW1wcm92ZSBFbmdsaXNoIGdyYW1tYXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjEyNzMKLQotMjAxNi0wMS0yNyAxMjo0NToyMCArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbDoKLQkgIGRvY3M6IGZpeCBhbiBvdGhlciB0eXBvIGluIGNsb2NrIGNoYXB0ZXIKLQkgIFNob2NraW5nbHkgSSBtaXNzZWQgdGhpcyBiaWdnZXIgdHlwbyBpbiB0aGUgcHJldmlvcyBmaXgKLQotMjAxNi0wMS0yNyAxMjoyNDo1NyArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbDoKLQkgIGRvY3M6IGZpeCB0eXBvIGluIGNsb2NrIGNoYXB0ZXIKLQotMjAxNi0wMS0yNSAxMjowOTo1NCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzoKLQkgIHRlc3RzOmdzdGluZm86IEZpeCBzdHJpbmcgbWVtb3J5IGxlYWsKLQkgIGluZm9fZm91cmNjIHRlc3QgbGVha3Mgc3RyaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTA3MQotCi0yMDE2LTAxLTIzIDE2OjAwOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOgotCSAgdGVzdHM6IGluZm86IG1ha2Ugd29yayB3aXRob3V0IHJlZ2lzdHJ5Ci0KLTIwMTYtMDEtMjIgMTI6NTA6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtdHJhY2luZy50eHQ6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvdHJhY2luZy5zaDoKLQkgIHRyYWNlcjogcmVuYW1lIEdTVF9UUkFDRVJfUExVR0lOUyBlbnYgdmFyIHRvIEdTVF9UUkFDRVJTCi0KLTIwMTYtMDEtMjEgMDg6MTI6MDEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0cmFjZXJyZWNvcmQuYzoKLQkqIGdzdC9nc3R0cmFjZXJyZWNvcmQuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0cmFjZXJyZWNvcmQuYzoKLQkgIHRyYWNlcnJlY29yZDogZG9uJ3QgbGVhayB0aGUgc3BlYyBzdHJ1Y3R1cmVzCi0JICBDaGFuZ2UgdGhlIGdzdF90cmFjZXJfcmVjb3JkX25ldygpIGFwaSB0byB0YWtlIHRoZSBwYXJhbWV0ZXJzIHRoZSBtYWtlIHRoZQotCSAgc3BlYyBzdHJ1Y3R1cmUgZGlyZWN0bHkuIFRoaXMgYWxsb3dzIHVzIHRvIG93biB0aGUgdG9wLWxldmVsIHN0cnVjdHVyZSBhbmQKLQkgIGFsc28gY29sbGVjdCB0aGUgYXJncyBzbyB0aGF0IHdlIGNhbiB0YWtlIG93bmVyc2hpcCBvZiB0aGUgc3ViLXN0cnVjdHVyZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwODIxCi0KLTIwMTYtMDEtMjEgMTU6NDU6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RkZXZpY2UuYzoKLQkgIGRldmljZTogZml4IGNvbXBhcmlzb24gaW4gX2hhc19jbGFzc2VzdigpCi0JICBXZSdyZSBjb21wYXJpbmcgYSBwb2ludGVyIHR5cGUgd2l0aCAnXDAnIGhlcmUsIHdoaWNoCi0JICBwcm9iYWJseSBpc24ndCByaWdodCwgYW5kIHRoZSBsb29wIGNvbmRpdGlvbiBtYWRlIHN1cmUKLQkgIHRoYXQgY2xhc3Nlc1swXSBpcyAhPSBOVUxMIGFscmVhZHksIHNvIGl0J3MgcG9pbnRsZXNzLgotCSAgV2FzIHByb2JhYnkgbWVhbnQgdG8gY2hlY2sgaWYgdGhlIHN0cmluZyBwb2ludGVkIHRvIGlzCi0JICBub3QgZW1wdHksIHNvIG1ha2UgaXQgZG8gdGhhdCBpbnN0ZWFkLgotCi0yMDE2LTAxLTIwIDIwOjMyOjI0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dHJhY2VycmVjb3JkLmM6Ci0JICB0ZXN0L3RyYWNlcnJlY29yZDogdW5yZWYgb2JqZWN0cyBhbmQgZnJlZSBzdHJpbmcKLQotMjAxNi0wMS0xOCAyMjo0NTo1OCArMDAwMCAgRmxvcmluIEFwb3N0b2wgPGZsb3Jpbi5hcG9zdG9sQG9yZWdhbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgc3lzdGVtY2xvY2s6IHRlc3RzOiBhZGRlZCBzdHJlc3MgdGVzdCBmb3IgYXN5bmMgb3JkZXIKLQkgIEtlZXAgaW5zZXJ0aW5nIGFsYXJtcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LiBEdWUgdG8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA3NTcKLQkgIGFsYXJtIHRocmVhZCB3aWxsIGdldCBjb25mdXNlZCBhbmQgbm90IHNlcnZlIHRoZW0gaW4gb3JkZXIuCi0KLTIwMTYtMDEtMTggMTY6MjU6MjAgKzAwMDAgIEZsb3JpbiBBcG9zdG9sIDxmbG9yaW4uYXBvc3RvbEBvcmVnYW4ubmV0PgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIHN5c3RlbWNsb2NrOiBmaXhlZCByYWNlIGNvbmRpdGlvbiBpbiBoYW5kbGluZyBhbGFybXMKLQkgIFdoZW4gY2hvb3NpbmcgdGhlIGZpcnN0IGVudHJ5IGZyb20gdGhlIGxpc3QsIGdzdF9zeXN0ZW1fY2xvY2tfYXN5bmNfdGhyZWFkCi0JICBtdXN0IHNldCB0aGUgZW50cnkgc3RhdGUgdG8gYnVzeSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbG9jayBsb2NrLiBPdGhlcndpc2UKLQkgIGEgbmV3IGVudHJ5IGNvdWxkIGJlIGFkZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgYW5kCi0JICBnc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCB3aWxsIGJlIHVuYXdhcmUgYW5kIGtlZXAgd2FpdGluZyBvbiB0aGUgZW50cnkKLQkgIGl0IGhhcyBhbHJlYWR5IGNob3Nlbi4KLQkgIEFsc28gaW1wcm92ZWQgbWVzc2FnZXMgYWJvdXQgZXhwZWN0ZWQgc3RhdGUgYW5kIGJ1bXBlZCB0aGVtIHRvIEVSUk9SIGxldmVsCi0JICB0byBkZXRlY3QgdW5leHBlY3RlZCBzdGF0ZSBjaGFuZ2VzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDc1NwotCi0yMDE2LTAxLTIwIDExOjA3OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiByZW1vdmUgZHVwbGljYXRlIGNoZWNrCi0KLTIwMTYtMDEtMjAgMDk6NTc6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogdHdvIHNtYWxsIGZpeGVzIGZvciB3aGVuIGFuIGV4aXN0aW5nIHBhZCBpcyByZXF1ZXN0ZWQKLQkgIFVubG9jayB3aGVuIHJldHVybmluZyBOVUxMIGZyb20gZ3N0X3NpbmdsZV9xdWV1ZV9uZXcoKSwgYW5kIGRvbid0Ci0JICBjcmFzaCB3aXRoIGRlYnVnIGxvZ2dpbmcgZW5hYmxlZCBpZiBOVUxMIGlzIHJldHVybmVkLgotCSAgU3BvdHRlZCBieSBTdGV2ZW4gSG92aW5nLgotCi0yMDE2LTAxLTIwIDEwOjAyOjM3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiByZW1vdmUgYSBoYWxmIGZpbmlzaGVzaCBzZW50ZW5jZSBpbiB0aGUgZG9jcwotCSAgTm8gaWRlYSB3aGF0IHdhcyB0aGUgaWRlYSBoZXJlLiBTTyBsZXRzIGp1c3QgZHJvcCBpdC4KLQotMjAxNi0wMS0xOSAxNDozOTowNiArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHRyYWNlcnJlY29yZC5jOgotCSAgdHJhY2VycmVjb3JkOiBGaXggc2VsZi0+c3BlYyBzdHJ1Y3R1cmUgaW52YWxpZCBmcmVlCi0JICBzZWxmLT5zcGVjIGlzIGdvdCB1c2luZyBnX3ZhbHVlX2dldF9ib3hlZCgpLCB3aGljaCBpcyBhIHRyYW5zZmVyIG5vbmUgZnVuY3Rpb24uCi0JICBTbyB0aGUgc2FtZSBzaG91bGQgbm90IGJlIGZyZWVkLCB3aGljaCBpcyByZXN1bHRpbmcgaW4gd3JvbmcgYmVoYXZpb3IuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwODIxCi0KLTIwMTYtMDEtMjAgMDk6MjU6NDQgKzAxMDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3R0cmFjZXJyZWNvcmQuYzoKLQkgIHRyYWNlcnJlY29yZDogSW5pdGlhbGlzZSBmbGFncyB0byBhdm9pZCB3cm9uZyBjb21wYXJpc2lvbgotCSAgR3N0VHJhY2VyVmFsdWVGbGFncyBpcyBub3QgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIHRoZSBzYW1lIGNvdWxkIHJlc3VsdCBpbiB3cm9uZwotCSAgY29tcGFyaXNpb24gYW5kIGJlaGF2aW9yLiBIZW5jZSBpbml0aWFsaXppbmcgaXQgdG8gR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19OT05FLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDgyMQotCi0yMDE2LTAxLTIwIDA5OjE4OjAxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOgotCSAgdGVzdHMvZ3N0L2luZm86IEZpeCBtZXNzYWdlcyBnbGlzdCBtZW1vcnkgbGVhawotCi0yMDE2LTAxLTE5IDE1OjAzOjU1ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dHJhY2VycmVjb3JkLmM6Ci0JICB0ZXN0czogdHJhY2VycmVjb3JkOiBGaXggbWVzc2FnZXMgZ2xpc3QgbWVtb3J5IGxlYWsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA4MjEKLQotMjAxNi0wMS0xOCAyMToxMjo1MyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB0cmFjZXI6IGFkZCBhbiBpbnRlcm5hbCBwdHIgZm9ybWF0IGZvciB0cmFjZXIgc2VyaWFsaXNhdGlvbgotCSAgV2UgbmVlZCB0byBhcHBseSB0aGUgc3RyaW5nIHdyYXBwaW5nIHRoYXQgdmFsdWUgc2VyaWFsaXNhdGlvbiBkb2VzIGFsc28gaW4gdGhlCi0JICB0cmFjZXIgbG9nZ2luZywgb3RoZXJ3aXNlIHdlIGNhbid0IHBhcnNlIG5lc3RlZCBzdHJ1Y3R1cmVzLgotCi0yMDE2LTAxLTE4IDIxOjA5OjQ5ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgdHJhY2VyL2dzdHN0YXRzOiBmaXggbWlzbWF0Y2ggYmV0d2VlbiAnLmNsYXNzJyBhbmQgdHJhY2VyIGFyZ3MKLQkgIENsZWFuIHVwIGZyb20gdGhlIHJlY2VudCBjaGFuZ2VzLiBUaGUgbG9nZ2luZyBkZXNjcmlwdGlvcnMgZGlkIG5vdCBtYXRjaCB3aGF0IHdlIGxvZ2dlZC4KLQotMjAxNS0xMS0xMiAwMToxNDozNCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBBZGQgdXNlLXRhZ3MtYml0cmF0ZSBwcm9wZXJ0eQotCSAgVGhlIHVzZS10YWdzLWJpdHJhdGUgcHJvcGVydHkgbWFrZXMgcXVldWUyIGxvb2sgYXQKLQkgIHRhZyBldmVudHMgaW4gdGhlIHN0cmVhbSBhbmQgZXh0cmFjdCBhIGJpdHJhdGUgZm9yIHRoZQotCSAgc3RyZWFtIHRvIHVzZSB3aGVuIGNhbGN1bGF0aW5nIGEgZHVyYXRpb24gZm9yIGJ1ZmZlcnMKLQkgIHRoYXQgZG9uJ3QgaGF2ZSBvbmUgZXhwbGljaXRseSBzZXQuCi0JICBUaGlzIGxldHMgcXVldWUyIHNlbnNpYmx5IGJ1ZmZlciB0byBhIHRpbWUgdGhyZXNob2xkCi0JICBmb3IgYW55IGJ5dGVzdHJlYW0gZm9yIHdoaWNoIHRoZSBnZW5lcmFsIGJpdHJhdGUgaXMga25vd24uCi0KLTIwMTYtMDEtMTkgMTI6MDQ6MTYgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3R0cmFjZXJyZWNvcmQuYzoKLQkgIHRyYWNlcnJlY29yZDogYXZvaWQgb3ZlcndyaXRpbmcgdmFsdWUKLQkgIHJlcyB2YWx1ZSBpcyBvdmVyd3JpdHRlbiwgcmVtb3ZlIHRoZSBhc3NpZ25tZW50LgotCSAgcHJpdl9fZ3N0X3N0cnVjdHVyZV9hcHBlbmRfdGVtcGxhdGVfdG9fZ3N0cmluZyAoKSBhbHdheXMgcmV0dXJucyBUUlVFCi0JICBhbnl3YXkuCi0JICBDSUQgMTM0OTY0NQotCi0yMDE2LTAxLTE5IDExOjExOjI1ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmFtOgotCSAgYmVuY2htYXJrczogRGlzYWJsZSB0cmFjZXJzZXJpYWxpemUgYmVuY2htYXJrIG9uIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotCSAgbm8gZ3N0LWRlYnVnZ2luZyA9PiBubyB0cmFjZXIgbG9nZ2luZyAoYW5kIG5vIHBvbnkgZWl0aGVyKQotCi0yMDE2LTAxLTE5IDExOjEwOjMwICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dHJhY2VycmVjb3JkLmM6Ci0JKiBnc3QvZ3N0dHJhY2VycmVjb3JkLmg6Ci0JICB0cmFjZXJyZWNvcmQ6IERpc2FibGUgbG9nZ2luZyBpZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLQkgIE1ha2UgdGhlIGdzdF90cmFjZXJfcmVjb3JkX2xvZygpIGEgbm8tb3AgaWYgdGhlIGdzdC1kZWJ1ZyBzdWJzeXN0ZW0KLQkgIGlzIGRpc2FibGVkLgotCi0yMDE2LTAxLTE4IDE5OjE3OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IGZhaWwgZmxhZyBkZXNlcmlhbGl6YXRpb24gb24gaW52YWxpZCBmbGFnIG5hbWVzCi0KLTIwMTYtMDEtMTggMTk6MTA6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHRlc3RzOiBzdHJ1Y3R1cmU6IGZpeCB3cm9uZyBmbGFnIG5hbWUgaW4gZGVzZXJpYWxpemF0aW9uIHRlc3QKLQkgIFRoZXJlIGlzIG5vIEdTVF9TRUVLX0ZMQUdTX05PTkUgb25seSBHU1RfU0VFS19GTEFHX05PTkUgKGJ1dAotCSAgdGhlIGRlc2VyaWFsaXplciBzaWxlbnRseSBza2lwcyBiYWQgZmxhZyBuYW1lcyBjdXJyZW50bHkpLgotCi0yMDE2LTAxLTE3IDIzOjQ5OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgdHJhY2VyczogZml4IHRocmVhZC1pZCBjYXN0cyB0byA2NC1iaXQgaW50cyBvbiAzMi1iaXQgc3lzdGVtcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDc2MgotCi0yMDE2LTAxLTE4IDEwOjEzOjAyICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IHJlZi91bnJlZiBuZXcgZW51bSB0eXBlcyBpbiBnc3RfaW5pdC9kZWluaXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA3NjcKLQotMjAxNi0wMS0xNyAwMDowODozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogdXBkYXRlIGV4cG9ydHMgZm9yIG5ldyBmbGFncyBnZXRfdHlwZSgpCi0KLTIwMTYtMDEtMTYgMjI6NDM6MjMgKzAxMDAgIFBoaWxpcCBWYW4gSG9vZiA8cGhpbGlwQGNvZGVtaW5kZWQuYmU+Ci0KLQkqIGdzdC9nc3R0cmFjZXIuYzoKLQkqIGdzdC9nc3R0cmFjZXIuaDoKLQkgIHRyYWNlci5oOiBkb24ndCBpbmNsdWRlIHByaXZhdGUgbm9pbnN0IGhlYWRlciBnc3R0cmFjZXJ1dGlscy5oIGluIGEgcHVibGljIGhlYWRlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDczMgotCi0yMDE2LTAxLTE2IDIxOjI0OjE5ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzL3RyYWNpbmcuc2g6Ci0JICBiZW5jaG1hcms6IGltcHJvdmUgc2NyaXB0Ci0JICBVc2UgYSB0ZW1wIGZpbGUgZm9yIHRoZSBsb2cgYW5kIGZpeCBvbmUgZW52LXZhci4KLQotMjAxNi0wMS0xNiAyMToyMzoxMCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JICB0cmFjZXIvc3RhdHM6IHVzZSB0aGUgcmlnaHQgbG9nIHRlbXBsYXRlCi0JICBXaGVuIHBvcnRpbmcgd2UgdXNlZCB0aGUgd3JvbmcgcmVjb3JkIChjb3B5IGFuZCBwYXN0ZSkuCi0KLTIwMTYtMDEtMTYgMjE6MDQ6NDYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0dHJhY2VycmVjb3JkLmg6Ci0JICB0cmFjZXI6IHVwZGF0ZSB0aGUgZG9jcwotCSAgQWRkIHRoZSBuZXcgZW51bSBhbmQgZmxhZ3MuIFJlbW92ZSB0aGUgR3N0VHJhY2VyUmVjb3JkUHJpdmF0ZS4KLQotMjAxNi0wMS0xNiAyMTowMjozOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LXN0YXRzLmM6Ci0JICBnc3Qtc3RhdHM6IHVwZGF0ZSB0byBsYXRlc3QgdGFyY2VyIGFwaQotCSAgVGhlIHRocmVhZC1pZHMgYXJlIHNlcmlhbGl6ZWQgYXMgdWludDY0LiBUaGUgJ2VsZW0taXgnIGdvdCBjaGFuZ2VkIHRvCi0JICAnZWxlbWVudC1peCcuIE1ha2UgdGhlIGNvZGUgYSBiaXQgbW9yZSByb2J1c3QuCi0KLTIwMTYtMDEtMTYgMTg6NTU6MDcgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0cmFjZXJyZWNvcmQuYzoKLQkqIGdzdC9nc3R0cmFjZXJyZWNvcmQuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgdHJhY2VyOiB1c2UgdGhlIG5ldyBmbGFncyB0byBjcmVhdGUgdGhlIG9wdGlvbmFsIGZpZWxkIGluIHRoZSBmb3JtYXQgc3RyaW5nCi0JICBUaGlzIHNwYXJlcyB1cyBleHBsaWNpdGx5IGxpc3RpbmcgdGhlIGZpZWxkIGluIHRoZSBzcGVjLiBhbmQgdGh1cyBoaWRlIHRoaXMKLQkgIGltcGxlbWVudGF0aW9uIGRldGFpbC4KLQotMjAxNi0wMS0xNiAxODo1MjozMiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC10cmFjaW5nLnR4dDoKLQkqIGdzdC9nc3R0cmFjZXJyZWNvcmQuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkgIHRyYWNlcjogYWRkIGEgR3N0VHJhY2VyVmFsdWVGbGFncyBhbmQgcmVwbGFjZSBzdHJpbmdzCi0JICBUaGlzIGFsbG93cyB1cyB0byBkb2N1bWVudCB0aGUgZmxhZ3MgYW5kIG1ha2VzIHRoZSBsb2dzIGEgYml0IHNtYWxsZXIuCi0KLTIwMTYtMDEtMTYgMTY6MDE6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBhZGQgZnVuY3Rpb24gZ3VhcmQgdG8gZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cygpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNzA0Ci0KLTIwMTYtMDEtMTYgMTQ6NTE6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogZ3N0L2dzdHRyYWNlcnJlY29yZC5jOgotCSogZ3N0L2dzdHRyYWNlcnJlY29yZC5oOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGdzdC5oOiBEb24ndCBzcGV3IHdhcm5pbmdzIGlmIEdTVF9VU0VfVU5TVEFCTEVfQVBJIGlzIG5vdCBkZWZpbmVkCi0JICBPbmx5IGhpZGUgR3N0VHJhY2VyIGFuZCBHc3RUcmFjZXJSZWNvcmQgQVBJIGJlaGluZCBHU1RfVVNFX1VOU1RBQkxFX0FQSSwKLQkgIGJ1dCBkb24ndCBzcGV3IGFueSB3YXJuaW5ncywgb3RoZXJ3aXNlIGV2ZXJ5b25lIGhhcyB0byBkZWZpbmUgdGhpcwotCSAgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCi0JICBUaGlzIHJldmVydHMgcGFydHMgb2YgY29tbWl0IDg5ZWU1ZDk0OGRmZjU2MDIwNGU2ZWRkMjEwYzQ0ZWQyYjg2NTRiOGUuCi0KLTIwMTYtMDEtMTYgMTM6MzA6MzQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvdHJhY2Vyc2VyaWFsaXplLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL3RyYWNpbmcuc2g6Ci0JICBiZW5jaG1hcmtzOiB1cGRhdGUgdGhlIHRyYWNlciBiZW5jaG1hcmsgYW5kIGFkZCBhIHNoZWxsIGJlbmNobWFyawotCi0yMDE2LTAxLTE2IDEzOjI4OjMyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyYWNpbmcudHh0OgotCSAgZG9jcy9kZXNpZ246IHVwZGF0ZSB0cmFjZXJzcGVjIGV4YW1wbGVzCi0KLTIwMTYtMDEtMTYgMTM6Mjc6NTkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0OgotCSAgZG9jcy9kZXNpZ246IHNwZWxsIGNoZWNraW5nCi0KLTIwMTYtMDEtMTYgMTM6MjQ6MTYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlcnJlY29yZC5jOgotCSogZ3N0L2dzdHRyYWNlcnJlY29yZC5oOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGF0ZW5jeS5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHJ1c2FnZS5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdHJhY2VyOiBhZGQgYSBHRmxhZyBmb3IgdGhlIHRyYWNlciBzY29wZQotCSAgUG9ydCBhbGwgdHJhY2Vycy4gQWRkIHRoZSBHU1RfVVNFX1VOU1RBQkxFX0FQSSBmbGFnIHRvIHRoZSBpbnRlcm5hbCBDRkxBR1Mgc28KLQkgIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBzcGVjaWZ5IHRoaXMgZm9yIGdpciwgZG9jcywgbWtlbnVtLCAuLi4KLQotMjAxNi0wMS0xNiAxMDo0ODowMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0LXNlbGVjdG9yOiBNYWtlIGFjY2VzcyB0byB0aGUgYWN0aXZlIHBhZCBhbmQgbGFzdCBidWZmZXIgdGhyZWFkLXNhZmUKLQkgIEJvdGggY2FuIGJlIG1vZGlmaWVkIGZyb20gZGlmZmVyZW50IHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4KLQotMjAxNi0wMS0xNiAxMDo0NzozNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0LXNlbGVjdG9yOiBOb3RpZnkgd2hlbiB0aGUgYWN0aXZlLXBhZCBwcm9wZXJ0eSBpcyBjaGFuZ2luZwotCi0yMDE2LTAxLTEyIDE0OjU5OjA0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogZ3N0L2dzdHRyYWNlcnJlY29yZC5jOgotCSogZ3N0L2dzdHRyYWNlcnJlY29yZC5oOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxhdGVuY3kuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0cmFjZXJyZWNvcmQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdHJhY2VycmVjb3JkOiBhZGQgYSBsb2cgcmVjb3JkIGNsYXNzCi0JICBXZSB1c2UgdGhpcyBjbGFzcyB0byByZWdpc3RlciB0cmFjZXIgbG9nIGVudHJ5IG1ldGFkYXRhIGFuZCBidWlsZCBhIGxvZwotCSAgdGVtcGxhdGUuIFdpdGggdGhlIGxvZyB0ZW1wbGF0ZSB3ZSBjYW4gc2VyaWFsaXplIGxvZyBkYXRhIHZlcnkgZWZmaWNpZW50bHkuCi0JICBUaGlzIGFsc28gc2ltcGxpZmllcyB0aGUgbG9nZ2luZyBjb2RlLCBzaW5jZSB0aGF0IGlzIG5vdyBhIHNpbXBsZSB2YXJhcmdzCi0JICBmdW5jdGlvbiB0aGF0IGlzIG5vdCBleHBvc2luZyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KLQkgIEFkZCBkb2NzIGZvciB0aGUgbmV3IGNsYXNzIGFuZCBiYXNpYyB0ZXN0cy4KLQkgIFJlbW92ZSB0aGUgcHJldmlvdXMgbG9nIGhhbmRsZXIuCi0JICBGaXhlcyAjNzYwMjY3Ci0KLTIwMTYtMDEtMTUgMDk6NDg6MzIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBnX3NvY2tldF9jbG9zZSgpCi0JICBDSUQgMTM0ODQ1MgotCi0yMDE2LTAxLTE1IDA5OjAyOjQyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG5ldGNsaWVudGNsb2NrOiBGcmVlIGRhdGEgYWZ0ZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdAotCSAgRG9lcyBub3QgbWF0dGVyIGhlcmUgYnV0IG1ha2VzIENvdmVyaXR5IG1vcmUgaGFwcHkuIEl0IGNhbid0Ci0JICBrbm93IHRoYXQgZ19saXN0X3JlbW92ZSgpIG9ubHkgbG9va3MgYXQgdGhlIHBvaW50ZXIgdmFsdWUgYnV0Ci0JICBkb2VzIG5vdCBkZXJlZmVyZW5jZSBpdC4KLQkgIENJRCAxMzQ4NDU0Ci0KLTIwMTYtMDEtMTUgMDA6MzA6NTkgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGRldmljZW1vbml0b3IuYzoKLQkgIEdzdERldmljZU1vbml0b3I6IENsYXJpZnkgdGhlIGJlaGF2aW91ciBvZiBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcgotCi0yMDE2LTAxLTE1IDAwOjI1OjA1ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yLmM6Ci0JICBHc3REZXZpY2VNb25pdG9yOiBEb24ndCByZW1vdmUgdW5tYXRjaGVkIGNsYXNzIGZpbHRlcnMKLQkgIElmIG5vIHByb3ZpZGVycyBmb3IgYSBwYXJ0aWN1bGFyIGNsYXNzIGNvdWxkIGJlIGZvdW5kLCB0aGVuIHJlbW92aW5nIHVubWF0Y2hlZAotCSAgZmlsdGVycyB3b3VsZCBjYXVzZSBhbGwgZGV2aWNlcyB0byBiZSByZXR1cm5lZCBpbnN0ZWFkIHdoaWNoIGlzIG5vdCBhdCBhbGwgd2hhdAotCSAgdGhlIHVzZXIgaW50ZW5kZWQuIFdlIHN0aWxsIHJldHVybiAwIGZvciB1bm1hdGNoZWQgZmlsdGVycy4KLQotMjAxNi0wMS0xMyAyMTozMjoyMCArMDAwMCAgRmxvcmluIEFwb3N0b2wgPGZsb3Jpbi5hcG9zdG9sQG9yZWdhbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IEZpeCBHRXJyb3IgbWVtb3J5IGxlYWsgaW4gaGFuZGxpbmcgTlRQIHJlc3BvbnNlCi0JICBFcnJvciB3YXMgbm90IHJlbGVhc2VkIGlmIGdzdF9udHBfcGFja2V0X3JlY2VpdmUgZmFpbGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDU5OAotCi0yMDE2LTAxLTEzIDEzOjEwOjEwICsxMTAwICBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IHVwZGF0ZSBleHBvcnRzIGZvciBBUEkgYWRkaXRpb25zCi0KLTIwMTYtMDEtMTEgMTY6MzE6MzkgKzExMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSAgaW5mbzogZXhwb3NlIGRlYnVnZ2luZyBwcmludGYgZnVuY3Rpb25zCi0JICBPdGhlciBnc3QgbGlicmFyaWVzIGFuZC9vciBlbGVtZW50cyBtYXkgd2FudCB0byBhZGQgc29tZSBkZWJ1ZyBsb2dnaW5nIHRvIGFuCi0JICBleHRlcm5hbCBkZWJ1ZyBzeXN0ZW0gb3IgaW1wbGVtZW50IGRlbGF5ZWQgZGVidWdnaW5nIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgotCSAgRXhwb3NlcyB0aGUgaW50ZXJuYWwgX19nc3RfdmFzcHJpbnRmIGFzIGdzdF9pbmZvX3Zhc3ByaW50ZiB3aGljaCBoYXMgYSBmYWxsYmFjawotCSAgdG8gZ192YXNwcmludGYgaWYgdGhlIGRlYnVnIHN5c3RlbSBpcyBkaXNhYmxlZC4KLQkgIEFQSTogZ3N0X2luZm9fdmFzcHJpbnRmCi0JICBBUEk6IGdzdF9pbmZvX3N0cmR1cF92cHJpbnRmCi0JICBBUEk6IGdzdF9pbmZvX3N0cmR1cF9wcmludGYKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA0MjEKLQotMjAxNi0wMS0xMSAyMToxNzoyNSArMDEwMCAgQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IE9ubHkgc2V0IGR1cmF0aW9uL3Bvc2l0aW9uIHF1ZXJ5IHZhbHVlcyBpbiBjYXNlIG9mIHF1ZXJ5IHN1Y2Nlc3MKLQkgIEN1cnJlbnRseSwgdGhlIHF1ZXJ5IHZhbHVlcyBhcmUgYmVpbmcgc2V0IGV2ZW4gaWYgdGhlIHF1ZXJ5IGl0c2VsZiB3YXMKLQkgIGRldGVybWluZWQgdG8gaGF2ZSBmYWlsZWQuIEZpeCB0aGlzIHRvIGVuc3VyZSB0aGUgdmFsdWVzIGFyZSBvbmx5IHNldCBpbgotCSAgY2FzZSBvZiBhIHF1ZXJ5IHN1Y2Nlc3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNDc5Ci0KLTIwMTYtMDEtMTAgMTQ6MzA6MDUgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkgIHRyYWNlcnM6IGNvZGUgY2xlYW4gdXBzCi0JICBEcm9wIHNvbWUgdHJhaWxpbmcgd2hpbGVzcGFjZS4gTWFrZSBmaWVsZCBvcmRlciBjb25zaXN0ZW50LgotCi0yMDE2LTAxLTA4IDIzOjM1OjUzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzL3RyYWNlcnNlcmlhbGl6ZS5jOgotCSAgYmVuY2htYXJrOiBmaXggY29weSduJ3Bhc3Qgb2YgdGhlIGZpbGUtZGVzY3JpcHRpb24gY29tbWVudAotCi0yMDE2LTAxLTA4IDIzOjA2OjU1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvYmVuY2htYXJrcy90cmFjZXJzZXJpYWxpemUuYzoKLQkgIGJlbmNobWFyazogYWRkIGEgYmVuY2htYXJrIGZvciBiZ28vNzYwMjY3Ci0JICBCaWcgc3VwcmlzZSAtIEdzdFN0cnVjdHVyZSBpcyBmYXN0ZXIgdGhhbiBHVmFyaWFudC4KLQotMjAxNS0wMy0xMCAxMzowNzoxOCArMDkwMCAgSG9vbkhlZSBMZWUgPGhvb25oZWUubGVlQGxnZS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JICBmdW5uZWw6IGltcHJvdmUgZGVidWcgbWVzc2FnZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTkzOQotCi0yMDE2LTAxLTA4IDE5OjI1OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IGFkZCBidWZmZXIgbGlzdCBzdXBwb3J0IHRvIEdTVF9QVFJfRk9STUFUCi0KLTIwMTUtMTEtMjUgMTc6MzY6MjUgKzAxMDAgIEF1csOpbGllbiBaYW5lbGxpIDxhdXJlbGllbi56YW5lbGxpQHBhcnJvdC5jb20+Ci0KLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmg6Ci0JICBjb250cm9sc291cmNlOiBmaXggR2V0VmFsdWUgYW5kIEdldFZhbHVlQXJyYXkgZG9jdW1lbnRhdGlvbgotCSAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKCkgdmFsdWUgcGFyYW1hdGVyIGlzIGEgZ2RvdWJsZSwgbm90IGEgR1ZhbHVlCi0JICBhbmQgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZG9lc24ndCByZXR1cm4gYSBHc3RWYWx1ZUFycmF5IGJ1dAotCSAgYW4gYXJyYXkgb2YgZG91YmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODY2OAotCi0yMDE2LTAxLTA3IDIzOjAzOjQ4ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmg6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bG9nLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkgIHRyYWNlcjogaGFybW9uaXplIHRoZSBxdWVyeSBob29rcwotCSAgSW4gcG9zdCBob29rcyBhbHdheXMgcGFzcyB0aGUgcmV0dXJuIHZhbHVlIGFzIHRoZSBsYXN0IHBhcmFtLiBQYXNzIHRoZSBxdWVyeQotCSAgYWxzbyB0byBwb3N0IGhvb2tzIHNpbmNlIGl0IGlzIHN0aWxsIGFsaXZlLgotCi0yMDE2LTAxLTA3IDIyOjQ3OjM3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkgIHRyYWNlcnMvc3RhdHM6IGFkZCBtaXNzaW5nIHBhcmFtZXRlcnMgdG8gY2FsbGJhY2sgZnVuY3Rpb25zCi0KLTIwMTYtMDEtMDcgMjI6NDM6NTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0cmFjZXJ1dGlscy5jOgotCSAgdHJhY2VydXRpbHM6IHVwZGF0ZSAjZW5kaWYgY29tbWVudAotCSAgV2UgY2hhbmdlZCB0aGUgZGVmaW5lLCBidXQgbGVmdCB0aGUgY29tbWVudCBpbmNvbnNpc3RlbnQuCi0KLTIwMTYtMDEtMDcgMTk6MTM6MDMgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0cmFjZXJ1dGlscy5oOgotCSAgdHJhY2VydXRpbHM6IGRvY3VtZW50IHRoZSB0cmFjZXIgaG9vayBmdW5jdGlvbnMKLQkgIERvY3VtZW50IGFsbCB0cmFjZXIgaG9vayBmdW5jdGlvbiBwb2ludGVyIHRvZ2V0aGVyIHdpdGggdGhlIGRldGFpbCBzdHJpbmcgdGhhdAotCSAgb25lIG5lZWRzIHRvIHVzZSB3aXRoIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2soKS4KLQotMjAxNi0wMS0wNyAxODo0NjoyMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JICB0cmFjZXI6IFVzZSBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTIGluc3RlYWQgb2YgR1NUX0RJU0FCTEVfR1NUX0RFQlVHIGV2ZXJ5d2hlcmUKLQkgIFByZXZpb3VzbHkgd2UgdXNlZCB0aGUgbGF0dGVyIG9uZSBzdGlsbCBmb3IgdGhlIHRyYWNlciB1dGlsaXR5IGNvZGUsIGNhdXNpbmcKLQkgIHVuZGVmaW5lZCByZWZlcmVuY2VzIGluIHRoZSByZXN1bHRpbmcgYmluYXJ5IGlmIHRoZSBkZWJ1Z2dpbmcgc3lzdGVtIHdhcwotCSAgZGlzYWJsZWQgYnV0IHRoZSB0cmFjZXIgc3lzdGVtIG5vdC4KLQotMjAxNi0wMS0wNyAxODo0MToyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3R0cmFjZXJ1dGlscy5oOgotCSAgZ3N0OiBSZW5hbWUgX3ByaXZfZ3N0X2luZm9fc3RhcnRfdGltZSB0byBfcHJpdl9nc3Rfc3RhcnRfdGltZSBhbmQgaW5pdGlhbGl6ZSBpdCBjZW50cmFsbHkKLQkgIEl0J3MgdXNlZCBieSB0aGUgZGVidWdnaW5nIGFuZCB0cmFjZXIgc3Vic3lzdGVtIGFuZCBpbiB2YXJpb3VzIGZpbGVzLCBtYWtlIGl0Ci0JICBhIGNlbnRyYWwgdGhpbmcgdGhhdCBpcyBpbml0aWFsaXplZCBpbmRlcGVuZCBvZiB0aGUgZXhpc3RlbmNlIG9mIHRob3NlCi0JICBzdWJzeXN0ZW1zLgotCi0yMDE2LTAxLTA2IDIxOjQyOjMwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiB1cGRhdGUgd2luMzIgZXhwb3J0cwotCSAgUmVtb3ZlIHRoZSBfaG9va19pZCgpIG1ldGhvZHMgd2UgbWFkZSBpbnRlcm5hbCBpbiB0aGUgcHJldiBjb21taXQuCi0KLTIwMTYtMDEtMDYgMjE6MTc6MTYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogbG9nIGEgd2FybmluZyBpZiB3ZSBjYW4ndCBzZXJpYWxpemUgYSBmaWVsZAotCSAgVGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIFRSVUUgcmlnaHQgbm93LCBzbyBhdGxlYXN0IGxvZyBzb21ldGhpbmcuCi0KLTIwMTUtMTAtMDYgMTI6NDk6MDAgKzAwMDAgIEFsZWtzYW5kZXIgV2FiaWsgPGF3YWJpa0BvcGVyYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSAgdGVzdHM6IHF1ZXVlMjogYWRkIHRlc3QgZm9yIGZpbGwgbGV2ZWwgYXJpdGhtZXRpYyBvdmVyZmxvdwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTk3MQotCi0yMDE2LTAxLTA2IDE5OjUxOjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBhdm9pZCBjYWxjdWxhdGluZyBmaWxsIGxldmVscyBtdWx0aXBsZSB0aW1lcwotCSAgTWFjcm8gZXhwYW5zaW9uIG1lYW5zIHdlIG1pZ2h0IGNhbGN1bGF0ZSB0aGUgZmlsbCBsZXZlbCBvbmNlCi0JICBmb3IgdGhlIGNoZWNrIGFuZCB0aGVuIHBvc3NpYmx5IGFnYWluIGZvciB0aGUgcmV0dXJuIHZhbHVlLgotCi0yMDE2LTAxLTA2IDE5OjUwOjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggZmlsbCBsZXZlbCBhcml0aG1ldGljIG92ZXJmbG93IHdpdGggbGFyZ2UgdmFsdWVzCi0JICBCYXNlZCBvbiBwYXRjaCBieTogQWxla3NhbmRlciBXYWJpayA8YXdhYmlrQG9wZXJhLmNvbT4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU5NzEKLQotMjAxNi0wMS0wNiAyMDo0MToyNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0cmFjZXIuaDoKLQkqIGdzdC9nc3R0cmFjZXJ1dGlscy5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHJ1c2FnZS5jOgotCSAgdHJhY2VyOiBtYWtlIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2tfaWQgc3RhdGljCi0JICBXZSBkb24ndCBuZWVkIHRvIGV4cG9zZSB0aGlzIGFzIHB1YmxpYyBBUEkuIENoYW5nZSB0aGUgb25seSBwbHVnaW4gdGhhdCB3YXMKLQkgIHVzaW5nIGl0LgotCi0yMDE2LTAxLTA2IDE4OjU2OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkgIGRvY3M6IGRlc2lnbjogdXBkYXRlIGxpc3Qgb2YgZGlzdGVkIGZpbGVzIGFmdGVyIGZpbGUgcmVuYW1lCi0KLTIwMTYtMDEtMDYgMTk6NDI6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBIaWRlIE5UUCBwYWNrZXQgQVBJIGFuZCBhZGQgR1NUX1BUUF9TVEFUSVNUSUNTXyogZGVmaW5lcyB0byB0aGUgZG9jcwotCi0yMDE2LTAxLTA2IDE4OjE3OjI3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suaDoKLQkgIGRvY3M6IHJlbW92ZSBwYXJlbnQgZG9jcyBmb3IgR3N0UHRwQ2xvY2sKLQkgIEluc3RhbmNlIGRvY3MgZG9uJ3QgbmVlZCB0byBkb2N1ZW1udCB0aGUgcGFyZW50IChmaXJzdCBtZW1iZXIpLgotCi0yMDE2LTAxLTA2IDE4OjE0OjA2ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgZG9jczogY2xlYW51cCAtdW51c2VkLnR4dCByZXBvcnQgZm9yIGxpYnMKLQkgIFRoZSBJR05PUkVfSF9GSUxFUyBjYW4gb25seSBjb250YWluIGZpbGVzIG9yIGRpcnMuCi0KLTIwMTYtMDEtMDYgMTc6NTg6MTEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgbW9yZSBjb3JlIGFwaSB0byB0aGUgcmlnaHQgc2VjdGlvbnMKLQkgIEFkZCBuZXcgYW5kIGRvY3VtZW50ZWQgYXBpIHJlcG9ydGVkIGluIC11bnVzZWQudHh0IHRvIC1zZWN0aW9uLnR4dC4KLQotMjAxNi0wMS0wNiAxNzo1NDo0NCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JICBkb2NzOiBleGNsdWRlIG1vcmUgaGVhZGVyIGZyb20gZG9jLXNjYW4KLQkgIEV4Y2x1ZGUgZ3N0L3ByaW50Zi8qLmggYW5kIGEgZmV3IGdlbmVyYXRlZCAuaCBmaWxlcyBmcm9tIHRoZSBhcGktc2Nhbi4gVGhpcwotCSAgbWFrZXMgLXVudXNlZC50eHQgcmVwb3J0IGZpbGUgZnJvbSBndGtkb2MgdXNlZnVsIGFnYWluLgotCi0yMDE2LTAxLTA2IDE2OjIxOjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkgIGNsb2NrOiBhZGp1c3QvdW5hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbigpIGhhdmUgYSBjbG9jayBwYXJhbWV0ZXIgYnV0IGl0J3MgdXNlbGVzcwotCSAgRG9jdW1lbnQgdGhpcywgZm9yIDIuMCB3ZSBzaG91bGQganVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIuCi0KLTIwMTYtMDEtMDYgMTY6MTk6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBjbG9jazogQWRkIGdzdF9jbG9ja191bmFkanVzdF93aXRoX2NhbGlicmF0aW9uKCkKLQkgIFdlIGFscmVhZHkgaGF2ZSBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24oKSBhbmQKLQkgIGdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCgpLCBoYXZpbmcgdGhlIG90aGVyIHZhcmlhbnQgaXMgdXNlZnVsLgotCi0yMDE2LTAxLTA2IDEzOjMzOjM5ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogYWRkIG5ldyBwYWQtZXZlbnQgZnVuY3Rpb24gdG8gdGhlIGRvY3MKLQotMjAxNi0wMS0wNiAxMzoyNjoyNyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgotCSAgZG9jczogaGlkZSBpbnRlcm5hbCB0cmFjZXIgYXBpIGZyb20gZG9jcwotCSAgQWxzbyBhZGRyZXNzIHdhcm5pZ25zIHJlZ2FyZGluZyB0aGUgdW5zdGFibGUgdHJhY2VyIGFwaS4KLQotMjAxNi0wMS0wNiAxMjo0NzoyNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46Ci0JKiBnc3QvZ3N0dHJhY2VyLmM6Ci0JICBkb2NzOiBhZGQgdGhlIHRyYWNlciB0byB0aGUgZG9jcwotCSAgQWRkIEdzdFRyYWNlciBhbmQgR3N0VHJhY2VyRmFjdG9yeSB0byB0aGUgY29yZSBkb2NzLgotCi0yMDE2LTAxLTA2IDExOjUyOjUzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyYWNpbmcudHh0OgotCSAgZG9jczogcmVuYW1lIHRoZSB0cmFjZXIgZG9jIHRvIHBhcnQgc2luY2UgaXQgaXMgbm93IG1lcmdlZAotCi0yMDE2LTAxLTA2IDExOjM1OjQ2ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JICB0cmFjZXJ1dGlsczogbW92ZSBoZWFkZXIgdG8gbm9pbnN0IHNlY3Rpb24KLQkgIFRoaXMgaXMgaW50ZXJuYWwgY29kZSwgdGhhdCBpcyBvbmx5IHRvIGJlIHVzZWQgaW4gY29yZS4KLQotMjAxNi0wMS0wNiAxMTozMToxNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmg6Ci0JICBjb25maWd1cmU6IGFkZCBhIG5ldyBvcHRpb24gdG8gZGlzYWJsZSB0aGUgdHJhY2VyIGhvb2tzCi0JICBUaGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgdmlhIHtlbmFibGUsZGlzYWJsZX0tZ3N0LWRlYnVnLiBTaW5jZSBib3RoIHN1YnN5c3RlbXMKLQkgIGFyZSBpbmRlcGVuZGVudCBoYXZpbmcgc2VwYXJhdGUgb3B0aW9ucyBpcyBiZXR0ZXIuCi0KLTIwMTYtMDEtMDUgMTY6NDQ6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBjbG9jazogRml4IHR5cG8KLQkgIGNsb2NrZWQgLT4gY2xvY2sKLQotMjAxNi0wMS0wNSAxNDo1OTozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbGllbnRjbG9jazogRGlzY29ubmVjdCB0aGUgInN5bmNlZCIgc2lnbmFsIGhhbmRsZXIgZnJvbSB0aGUgaW50ZXJuYWwgY2xvY2sKLQkgIE5vdCBmcm9tIHRoZSBleHRlcm5hbCBvbmUuCi0KLTIwMTYtMDEtMDUgMTM6NTc6MTIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuaDoKLQkgIGNvbnRyb2xsZXI6IHJlbmFtZSBuZXcgY3ViaWMgaW50ZXJwb2xhdGlvbiBtb2RlCi0JICBEb24ndCBhYmJyZXZpYXRlIHRvICdtb25vJyBhbmQgdXNlICdtb25vdG9uaWMnIGluc3RlYWQuCi0KLTIwMTYtMDEtMDUgMTQ6MjM6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSAgY2xvY2s6IERvbid0IGFsbG93IHNldHRpbmcgYW4gdW5zeW5jZWQgY2xvY2sgYXMgbWFzdGVyCi0KLTIwMTYtMDEtMDUgMTQ6MjE6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSAgY2xvY2s6IERvbid0IHRyeSB0byBzbGF2ZSB1bnN5bmNlZCBjbG9ja3MKLQkgIFRoZXkgd2lsbCByZXR1cm4gdXNlbGVzcyB2YWx1ZXMgZnJvbSBnZXRfdGltZSgpLgotCi0yMDE2LTAxLTA1IDEzOjQxOjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG50cDogVGhlIGNsb2NrIGluaGVyaXRzIGZyb20gR3N0TmV0Q2xpZW50Q2xvY2ssIG5vdCBqdXN0IEdzdFN5c3RlbUNsb2NrCi0KLTIwMTYtMDEtMDQgMTc6MTg6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IERlc3Ryb3kgYSBjYWNoZWQgY2xvY2sgNjAgc2Vjb25kcyBhZnRlciBpdHMgbGFzdCB1c2UKLQkgIFRoZXJlJ3Mgbm90IG11Y2ggbG9zdCBieSBoYXZpbmcgdGhlIGNsb2NrIGlkbGUgYXJvdW5kIGEgYml0IGxvbmdlciBidXQgaXQgd2lsbAotCSAgcG90ZW50aWFsbHkgYWxsb3cgYW55Ym9keSB3YW50aW5nIHRvIHVzZSB0aGUgc2FtZSBjbG9jayBzZXJ2ZXIgYWdhaW4gdG8gc3luYwotCSAgbXVjaCBmYXN0ZXIuCi0KLTIwMTYtMDEtMDQgMTY6MzE6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IE9ubHkgZXZlciBydW4gb25lIGNsb2NrIGFnYWluc3QgYSBzcGVjaWZpYyBzZXJ2ZXIKLQkgIElmIG11bHRpcGxlIG5ldC9OVFAgY2xvY2tzIGFyZSBjcmVhdGVkIGZvciB0aGUgc2FtZSBzZXJ2ZXIsIHJldXNlIHRoZSBzYW1lCi0JICBpbnRlcm5hbCBjbG9jayBmb3IgYWxsIG9mIHRoZW0uIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIGRvbid0IGZsb29kIHRoZSBzZXJ2ZXIKLQkgIHdpdGggdG9vIG1hbnkgcmVxdWVzdHMgYW5kIGFsc28gcG9zc2libHkgYWxsb3dzIGZhc3RlciBzeW5jaHJvbml6YXRpb24gaWYKLQkgIHRoZXJlIGFscmVhZHkgd2FzIGFuIGVhcmxpZXIgc3luY2hyb25pemVkIGNsb2NrIHdoZW4gY3JlYXRpbmcgYSBuZXcgb25lLgotCi0yMDE2LTAxLTA0IDEwOjM5OjI3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JICBuZXR0aW1lcHJvdmlkZXI6IFVzZSBHSW5pdGFibGUgaW5zdGVhZCBvZiBoYXZpbmcgYSBuZXcoKSBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4gTlVMTAotCSAgQmluZGluZ3MgZG9uJ3QgbGlrZSB0aGF0IG11Y2ggYW5kIGFzIHdlJ3JlIHVzaW5nIEdJTyBoZXJlIGFueXdheSB3ZSBjYW4gYXMKLQkgIHdlbGwgdXNlIEdJbml0YWJsZSBmb3IgcG9zc2libHkgZmFpbGluZyBpbml0aWFsaXphdGlvbi4KLQotMjAxNi0wMS0wMyAxNDowNjoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgbmV0dGltZXByb3ZpZGVyOiBNYXJrIGFkZHJlc3MsIHBvcnQgYW5kIGNsb2NrIHByb3BlcnRpZXMgQ09OU1RSVUNUX09OTFkKLQkgIFRoZXkgY2FuJ3Qgc2Vuc2libHkgYmUgY2hhbmdlZCBhZnRlciBjb25zdHJ1Y3Rpb24uCi0KLTIwMTYtMDEtMDMgMjI6NTU6NDggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZV9sYXVuY2g6IG1ha2UgbmljZXIgbG9nIG1lc3NhZ2VzCi0JICBBZGQgdHdvIG1hY3JvcyB0byBidWlsZCBuaWNlciBlbGVtZW50L3BhZCBuYW1lIHN0cmluZ3MuIFRoZSBtYWNyb3MgYXZvaWQKLQkgIHByaW50aW5nICIoTlVMTCkiIGFuZCBwcmludCB0aGUgZWxlbWVudCB0eXBlIGluIGFkZGl0aW9uIHRvIHRoZSBuYW1lLgotCi0yMDE2LTAxLTAyIDE5OjQyOjE3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFyc2UuaDoKLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZS1sYXVuY2g6IHdhcm4gd2hlbiBzdGlsbCB3YWl0aW5nIHRvIHBsdWcgc3ViLXBpcGVsaW5lcyBhZnRlciBuby1tb3JlLXBhZHMKLQkgIFRoZSBwYXJzZS1sYXVuY2ggQVBJIGF1dG9tYWdpY2FsbHkgaGFuZGxlcyBkeW5hbWljIHBhZHMgYW5kIHBlcmZvcm1zIGRlbGF5ZWQKLQkgIGxpbmtpbmcgYXMgbmVlZGVkLCB3aXRob3V0IGFueSBmZWVkYmFjayBhYm91dCB3aGV0aGVyIHRoZSBsaW5raW5nIHN1Y2NlZWRlZCBvcgotCSAgbm90IGhvd2V2ZXIuIElmIGEgZGVsYXllZCBkeW5hbWljIGxpbmsgY2FuJ3QgYmUgY29tcGxldGVkIGZvciB3aGF0ZXZlciByZWFzb24sCi0JICBwYXJzZS1sYXVuY2ggd2lsbCBzaW1wbHkgd2FpdCBpbiBjYXNlIGEgc3VpdGFibGUgcGFkIGFwcGVhcnMgbGF0ZXIuIFRoaXMgbWF5Ci0JICBuZXZlciBoYXBwZW4gdGhvdWdoLCBpbiB3aGljaCBjYXNlIHRoZSBwaXBlbGluZSBtYXkganVzdCBoYW5nIGZvcmV2ZXIuCi0JICBUcnkgdG8gaW1wcm92ZSB0aGlzIGJ5IGNvbm5lY3RpbmcgdG8gdGhlICJuby1tb3JlLXBhZHMiIHNpZ25hbCBvZiBhbnkgZWxlbWVudAotCSAgd2l0aCBkeW5hbWljIHBhZHMgYW5kIHBvc3RpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgZm9yIHRoZSByZWxhdGVkIG91dHN0YW5kaW5nCi0JICBkeW5hbWljIGxpbmtzIHdoZW4gIm5vLW1vcmUtcGFkcyIgaXMgZW1pdHRlZC4KLQkgIEZpeGVzICM3NjAwMDMKLQotMjAxNS0xMi0zMSAxOToyNzoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3R0cmFjZXIuYzoKLQkqIGdzdC9nc3R0cmFjZXJmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0dHJhY2VyZmFjdG9yeS5oOgotCSAgZG9jczogZml4IHNvbWUgd2FybmluZ3MgYW5kIGFkZCBzb21lIHNpbmNlIG1hcmtlcnMKLQotMjAxNi0wMS0wMyAxMTozOToyNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtdHJhY2luZy50eHQ6Ci0JICB0cmFjaW5nOiBhZGQgc29tZSBwb2ludGVycyBhYm91dCBtZW1vcnkgdHJhY2luZwotCi0yMDE2LTAxLTAzIDExOjM3OjU3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgZ3JhbW1hci55OiByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZQotCi0yMDE1LTEyLTMxIDAwOjA0OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIHRlc3RzOiB2YWx1ZTogdGVzdCBidWZmZXIgc2VyaWFsaXNhdGlvbi9kZXNlcmlhbGlzYXRpb24gbW9yZSB0aG9yb3VnaGx5Ci0JICBUZXN0cyBkYXRhL3N0cmluZ3MgYXMgd2VsbCwgbm90IGp1c3QgdGhhdCB3ZSByZWNlaXZlZAotCSAgc29tZXRoaW5nIG5vbi1OVUxMIGJhY2suCi0KLTIwMTUtMTItMzEgMTA6NTc6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogZml4IHR5cG8gaW4gY29tbWVudAotCi0yMDE1LTEyLTMwIDE2OjU3OjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG5ldGNsaWVudGNsb2NrOiBJbXBsZW1lbnQgcmVzb2x2YWwgb2YgaG9zdG5hbWVzCi0JICBKdXN0IGFsbG93aW5nIElQcyBoZXJlIGlzIG5vdCBpZGVhbCBhbmQgaW1wbGVtZW50aW5nIEROUyByZXNvbHZhbCBpcyBlYXN5LgotCi0yMDE1LTEyLTI5IDE2OjI4OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cGNsb2NrOiBBZGQgcmVhZC1vbmx5IHByb3BlcnRpZXMgdG8gZ2V0IHRoZSBtYXN0ZXIgYW5kIGdyYW5kbWFzdGVyIGNsb2NrIGlkcwotCi0yMDE1LTEyLTI5IDE0OjMyOjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogQWRkICh0cmFuc2ZlciBmdWxsKSBhbm5vdGF0aW9uIHRvIHNpbXBsaWZ5KCkgYW5kIHN1YnRyYWN0KCkgcmV0dXJuIHZhbHVlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5OTQ4Ci0KLTIwMTUtMTItMjkgMTE6MDY6MzkgKzAxMDAgIEF1csOpbGllbiBaYW5lbGxpIDxhdXJlbGllbi56YW5lbGxpQHBhcnJvdC5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBhZGQgJ3RyYW5zZmVyIGZ1bGwnIGFubm90YXRpb24gdG8gY2FwcyByZXR1cm5lZCBieSBpbnRlcnNlcmN0aW9uIGZ1bmN0aW9ucwotCSAgVG8gbWFrZSBjbGVhciBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gdW5yZWYgdGhlbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTk5NDgKLQotMjAxNS0xMi0yOCAxOTo0MTozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgotCSAgbmV0OiBBZGQgTlRQIGFuZCBQVFAgY2xvY2sgdHlwZXMgdG8gdGhlIGRvY3MKLQkgIFRoaXMgZ2l2ZXMgdXMgdGhlIHByb3BlcnR5IGRvY3VtZW50YXRpb24gZm9yIGV4YW1wbGUuCi0KLTIwMTUtMTItMjcgMTk6NDI6MzcgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBjaGVjazogZG9uJ3QgbWVtY21wIHR3aWNlCi0JICBTaW1wbHkgY2FsbCBmYWlsKCkgaW4gdGhlIGNvbmRpdGlvbiBhZnRlciB0aGUgZmlyc3QgbWVtY21wLgotCi0yMDE1LTEyLTI0IDE1OjI3OjEyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuNy4xID09PQotCi0yMDE1LTEyLTI0IDEzOjU4OjUyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjcuMQotCi0yMDE1LTEyLTI0IDEyOjUwOjMzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTUtMTItMjQgMTI6MjE6MjEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTUtMTItMjEgMDA6NDM6NDkgKzAxMDAgIEtvb3AgTWFzdCA8a3dtQHJhaW5ib3ctcnVubmVyLm5sPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IE1ha2UgLUJzeW1ib2xpYyBjaGVjayB3b3JrIHdpdGggY2xhbmcuCi0JICBVcGRhdGUgdGhlIC1Cc3ltYm9saWMgY2hlY2sgd2l0aCB0aGUgdmVyc2lvbiBnbGliIGhhcy4gVGhpcyB2ZXJzaW9uCi0JICB3b3JrcyB3aXRoIGNsYW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTcxMwotCi0yMDE1LTEyLTE2IDA5OjM1OjE4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuc2lnbmFsczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSAgZG9jczogdXBkYXRlIHRvIGdpdAotCi0yMDE1LTExLTEwIDEyOjM4OjU5IC0wNTAwICBYYXZpZXIgQ2xhZXNzZW5zIDx4YXZpZXIuY2xhZXNzZW5zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RhbGxvY2F0b3IuaDoKLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5oOgotCSogZ3N0L2dzdGJpbi5oOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkqIGdzdC9nc3RidXMuaDoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmg6Ci0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkqIGdzdC9nc3Rjb250ZXh0Lmg6Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuaDoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmg6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuaDoKLQkqIGdzdC9nc3RkZXZpY2UuaDoKLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yLmg6Ci0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuaDoKLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuaDoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuaDoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkqIGdzdC9nc3RwYXJzZS5oOgotCSogZ3N0L2dzdHBpcGVsaW5lLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkqIGdzdC9nc3RzYW1wbGUuaDoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSogZ3N0L2dzdHRhc2twb29sLmg6Ci0JKiBnc3QvZ3N0dG9jLmg6Ci0JKiBnc3QvZ3N0dHJhY2VyLmg6Ci0JKiBnc3QvZ3N0dHJhY2VyZmFjdG9yeS5oOgotCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oOgotCSogZ3N0L2dzdHVyaS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGZsb3djb21iaW5lci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RwdHBjbG9jay5oOgotCSAgY29yZTogQWRkIGdfYXV0b3B0cigpIHN1cHBvcnQgdG8gYWxsIHR5cGVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0NDY0Ci0KLTIwMTUtMTItMTQgMTM6MDY6NTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICB0ZWU6IENoZWNrIGlmIHBhcnNpbmcgdGhlIG5hbWUgdGVtcGxhdGUgd2l0aCBzc2NhbmYoKSB3YXMgc3VjY2Vzc2Z1bAotCSAgSWYgbm90LCBnbyBiYWNrIHRvIHRoZSBhdXRvbWF0aWMgcGFkIG51bWJlcmluZy4KLQkgIENJRCAxMTk1MTI5Ci0KLTIwMTUtMTItMTQgMTE6MjA6NDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWUvbXVsdGlxdWV1ZTogRG9uJ3Qgc3BlY2lhbC1jYXNlIENBUFMgZXZlbnRzIGluIHRoZSBldmVudCBoYW5kbGVycwotCSAgRm9yIENBUFMgZXZlbnRzIHdlIHdpbGwgbmV2ZXIgZXZlciBoYXZlIGEgRkFMU0UgcmV0dXJuIHZhbHVlIGhlcmUsIHNvIGp1c3QKLQkgIHJlbW92ZSB0aGUgZGVhZCBjb2RlIGluc3RlYWQgb2YgY2F1c2luZyBmdXR1cmUgY29uZnVzaW9uLgotCi0yMDE1LTEyLTE0IDExOjE2OjUwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBSZXZlcnQgInF1ZXVlOiBJbGxlZ2FsIG1lbW9yeSBhY2Nlc3Mgb2Ygc2luayBldmVudCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNzg2MTRjNTA1YTJhNzYxY2I0ZGNiN2Y0ZTVmM2U5Zjk3YzlhOGU4OC4KLQkgIFRoZSBjb2RlIGl0IHdhcyBmaXhpbmcgZG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0IGFueXdheSBhbmQgd2lsbCBiZSByZW1vdmVkIGluCi0JICB0aGUgbmV4dCBjb21taXQuCi0KLTIwMTUtMTItMTQgMTA6MzI6MTQgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBJbGxlZ2FsIG1lbW9yeSBhY2Nlc3Mgb2Ygc2luayBldmVudAotCSAgT25jZSBldmVudCBpcyBwdXNoZWQgdG8gcGFkLCB0aGVuIHF1ZXVlIHNob3VsZCBub3QgYWNjZXNzIHRoZSBldmVudC4KLQkgIFRoaXMgaXMgbGVhZGluZyB0byBpbnZhbGlkIHJlYWQgdmFsZ3JpbmQgZXJyb3JzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5NDMwCi0KLTIwMTUtMTItMTQgMTA6MTA6MDQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBVbnJlZiBldmVudCBpZiBHc3RFbGVtZW50OjpzZW5kX2V2ZW50KCkgaXMgbm90IGltcGxlbWVudGVkCi0JICBPdGhlcndpc2Ugd2UnbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGV2ZW50IG9ubHkgaWYgaXQncyBpbXBsZW1lbnRlZCwgYW5kCi0JICBsZWFrIHRoZSBldmVudCBpbiBhbGwgb3RoZXIgc2l0dWF0aW9ucy4KLQotMjAxNS0xMi0xNCAxMDowNDoxOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBtYW51YWw6IEZpeCBkeW5hbWljIHBpcGVsaW5lIGV4YW1wbGUKLQkgIFVzZSBHU1RfUEFEX1BST0JFX1BBU1MgdG8gcGFzcyB0aHJvdWdoIGFsbCBldmVudHMgb3RoZXIgdGhhbiBFT1MgaW5zdGVhZCBvZgotCSAgYmxvY2tpbmcgb24gdGhlIGZpcnN0IG5vbi1FT1MgZXZlbnQgZm9yZXZlci4gQWxzbyBmaXggYSB0eXBvIGluIGEgY29tbWVudCBpbgotCSAgdGhhdCBmdW5jdGlvbi4KLQkgIFRoYW5rcyB0byBEYXZpZCBKYWdnYXJkIGZvciByZXBvcnRpbmcgdGhpcyBvbiB0aGUgbWFpbGluZyBsaXN0LgotCi0yMDE1LTEyLTEzIDAwOjM3OjM5ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSAgZG9jczogIHR5cG8gaW4gdGhlIGxvY2F0aW9uIG9mIG1ha2VfZWxlbWVudCB0b29sCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5MzUyCi0KLTIwMTUtMTItMTIgMDE6MTM6NTkgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOgotCSAgZG93bmxvYWRidWZmZXI6IGRyb3AgdW5uZWVkZWQgbWFjcm9zIGZvciBHX09TX1dJTjMyCi0KLTIwMTUtMTItMTIgMDE6MDk6MjAgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgZmRzcmM6IGRyb3AgdW5uZWVkZWQgbWFjcm9zIGZvciBHX09TX1dJTjMyCi0KLTIwMTUtMTItMTIgMDE6MDY6NDMgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgZmRzcmM6IGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQgaW4gQW5kcm9pZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODk4MAotCi0yMDE1LTEyLTExIDIyOjE0OjMyIC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JICBmZHNpbms6IGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQgaW4gQW5kcm9pZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODk4MAotCi0yMDE1LTEyLTExIDIwOjUyOjU3IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBzb21lIHR5cG9zCi0KLTIwMTUtMTItMTEgMjA6NDI6MDUgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydCBvbiBBbmRyb2lkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4OTgwCi0KLTIwMTUtMTItMTEgMTk6MTE6MDEgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOgotCSAgZG93bmxvYWRidWZmZXI6IGZpeCBzb21lIHR5cG9zCi0KLTIwMTUtMTItMTEgMTg6NTk6MzIgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOgotCSAgZG93bmxvYWRidWZmZXI6IGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQgb24gQW5kcm9pZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODk4MAotCi0yMDE1LTEyLTExIDE0OjM2OjI5IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c3BhcnNlZmlsZS5jOgotCSAgc3BhcnNlZmlsZTogZHJvcCBib2d1cyByZWZlcmVuY2UgdG8gZmlsZSBkZXNjcmlwdG9yCi0JICArZml4IHR5cG8gb24gcmV0dXJuIHZhbHVlIGNvbW1lbnQKLQotMjAxNS0xMi0xMSAxNDowNzoyNyAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHNwYXJzZWZpbGUuYzoKLQkgIHNwYXJzZWZpbGU6IGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQgb24gQW5kcm9pZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODk4MAotCi0yMDE1LTEyLTEwIDE0OjMyOjI3ICswMTAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogdW5yZWYgbWVzc2FnZSBpbiBfcG9zdF9tZXNzYWdlIHdoZW4gdGhlcmUgaXMgbm8gaW1wbGVtZW50YXRpb24KLQkgICdnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UnIHRha2VzIHRoZSBvd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UsIHNvIGl0Ci0JICBzaGFsbCB1bnJlZiBpdCB3aGVuIHRoZXJlIGlzIG5vIHBvc3RfbWVzc2FnZSBpbXBsZW1lbnRhdGlvbi4gT3RoZXJ3aXNlCi0JICBtZXNzYWdlIGlzIGxlYWtlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTkzMDAKLQotMjAxNS0xMi0xMCAxMTozNTowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IERvbid0IGhvbGQgc3RhdGUgbG9jayBhbGwgdGhlIHRpbWUgd2hpbGUgc2VuZGluZyBhbiBldmVudAotCSAgVGhpcyBsb2NrIHNlZW1zIHRvIGV4aXN0IG9ubHkgdG8gcHJldmVudCBlbGVtZW50cyBmcm9tIGNoYW5naW5nIHN0YXRlcyB3aGlsZQotCSAgZXZlbnRzIGFyZSBiZWluZyBwcm9jZXNzZWQuIEhvd2V2ZXIgZXZlbnRzIGFyZSBnb2luZyB0byBiZSBwcm9jZXNzZWQKLQkgIG5vbmV0aGVsZXNzIGluIHRob3NlIGVsZW1lbnRzIGlmIHNlbnQgZGlyZWN0bHkgdmlhIHBhZHMsIHNvIHByb3RlY3Rpb24gbXVzdAotCSAgYWxyZWFkeSBiZSBpbXBsZW1lbnRlZCBpbnNpZGUgdGhlIGVsZW1lbnRzIGZvciBldmVudCBoYW5kbGluZyBpZiBpdCBpcyBuZWVkZWQuCi0JICBBcyBzdWNoIGhhdmluZyB0aGUgbG9jayBoZXJlIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBhbmQgaXMgYWN0dWFsbHkgY2F1c2luZwotCSAgdmFyaW91cyBkZWFkbG9ja3MgaW4gZGlmZmVyZW50IHNpdHVhdGlvbnMgYXMgZGVzY3JpYmVkIGluCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MDQwCi0KLTIwMTUtMTItMDcgMjA6Mjc6NDUgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0IGluIEFuZHJvaWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg5ODAKLQotMjAxNS0xMi0wMyAxNTowNDozMiAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydCBvbiBBbmRyb2lkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4OTgwCi0KLTIwMTUtMTItMDMgMTU6MDE6MjcgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oOgotCSAgZmlsZXNpbms6IGluZGVudGF0aW9uIGZpeGVzCi0KLTIwMTUtMTItMDkgMTc6NDA6MDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogRG9uJ3QgdXNlIHJhbmRvbSBzZWdtZW50LnBvc2l0aW9uIGZyb20gdXBzdHJlYW0KLQkgIHNlZ21lbnQucG9zaXRpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzYWdlIG9ubHksIGJ1dCB0aGUgdmFyaW91cwotCSAgR1NUX0VWRU5UX1NFR01FTlQgY3JlYXRpb25nL3BhcnNpbmcgZnVuY3Rpb25zIHdvbid0IGNsZWFyIHRoYXQgZmllbGQuCi0JICBVc2UgdGhlIGFwcHJvcHJpYXRlIHNlZ21lbnQgYm91bmRhcnkgYXMgYW4gaW5pdGlhbCB2YWx1ZSBpbnN0ZWFkCi0KLTIwMTUtMTItMDcgMTc6MjU6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogUG9zdCBhIExBVEVOQ1kgbWVzc2FnZSB3aXRoIGFzeW5jLWhhbmRsaW5nPVRSVUUgaWYgdGhlIFBMQVlJTkcgc3RhdGUgaXMgcmVhY2hlZAotCSAgT3RoZXJ3aXNlIGVhY2ggYmluIG1pZ2h0IGhhdmUgYSBkaWZmZXJlbnQgbGF0ZW5jeSBpbiB0aGUgZW5kLCBjYXVzaW5nCi0JICBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMuCi0JICBUaGUgYmluIHdpbGwgc3RpbGwgZmlyc3QgaGFuZGxlIGxhdGVuY3kgaW50ZXJuYWxseSBhcyBiZWZvcmUsIGJ1dCBnaXZlcyB0aGUKLQkgIG92ZXJhbGwgcGlwZWxpbmUgdGhlIG9wcG9ydHVuaXR5IHRvIHVwZGF0ZSB0aGUgbGF0ZW5jeSBvZiB0aGUgd2hvbGUgcGlwZWxpbmUKLQkgIGFmdGVyd2FyZHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5MTI1Ci0KLTIwMTUtMTItMDcgMTg6MjA6MzUgKzAyMDAgIEF0aGFuYXNpb3MgT2lrb25vbW91IDxhdGhvaWtAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwb3N0IHRhZyBsaXN0IHdoZW4gYXZnIGJpdHJhdGUgY2hhbmdlcyBhdCBsZWFzdCAyJQotCSAgV2F0Y2hpbmcgdmlkZW9zIHdpdGggdmFyaWFudCBiaXRyYXRlIGlzIGNvbW1vbiB0byBoYXZlIGRlbHRhCi0JICBtb3JlIHRoYW4gMTAga2JwcywgcmVzdWx0aW5nIGluIHRhZyBsaXN0IHNwYW0uCi0JICBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gZml4ZWQgMTAga3BicyBkZWx0YSwgaXQgaXMgYmV0dGVyIHRvCi0JICBjYWxjdWxhbGUgdGhlIGRpZmZlcmVuY2UgaW4gcGVyY2VudGFnZSBhbmQgdXBkYXRlIHRhZyBsaXN0Ci0JICBvbmx5IHdoZW4gYml0cmF0ZSBjaGFuZ2VzIG1vcmUgdGhhbiAyJS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTkwNTUKLQotMjAxNS0xMi0wNyAwOTowODowMSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYjMxOTkwOSB0byA4NmU0NjYzCi0KLTIwMTUtMTItMDcgMTI6NTk6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBDaGVjayBmb3IgYW4gYWN0aXZhdGVkIHBhZCBiZWZvcmUgYWRkaW5nLCBub3QgYSBub24tZmx1c2hpbmcgb25lCi0JICBUaGUgcGFkIGNvdWxkIGJlIGFjdGl2YXRlZCBidXQgZmx1c2hpbmcgYmVjYXVzZSBvZiBhIEZMVVNIX1NUQVJUIGV2ZW50LiBUaGF0J3MKLQkgIG5vdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yIGhlcmUsIHdlIHdhbnQgdG8gY2hlY2sgZm9yIGFjdGl2YXRlZCBwYWRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODkyOAotCi0yMDE1LTExLTE5IDE1OjMzOjA2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSAgdGVzdHM6IGZ1bm5lbDogcmVtb3ZlIHN0YXRlIGNoYW5nZSBmcm9tIHN0cmVzcyB0ZXN0cwotCSAgQ2hhbmdpbmcgc3RhdGVzIHVwIGFuZCBkb3duIHdoaWxlIGJ1ZmZlcnMgYXJlIGJlaW5nIHB1c2hlZCBpcyBub3QKLQkgIGEgdmFsaWQgdXNlIGNhc2UuIElmIGEgcGFkIGlzIGRlYWN0aXZhdGVkIGFuZCByZWFjdGl2YXRlZCBkdXJpbmcKLQkgIGEgYnVmZmVyIHB1c2ggaXQgaXMgcmFjeSB3aXRoIHRoZSBjaGVjayBvZiBwdXNoZWQgc3RpY2t5IGV2ZW50cwotCSAgYW5kIHRoZSBhY3R1YWwgY2hhaW5mdW5jdGlvbiBjYWxsLiBBcyBpdCBtaWdodCBjYWxsIHRoZSBjaGFpbgotCSAgd2l0aG91dCBub3RpY2luZyB0aGUgcGVlciBwYWQgbG9zdCBpdHMgcHJldmlvdXMgc3RpY2t5IGV2ZW50cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTgzNDAKLQotMjAxNS0xMi0wNCAxMDoyMjo1NiAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGdzdC1sYXVuY2g6IEZpeCBwcm9jZXNzIHJldHVybiB2YWx1ZSBvbiBlcnJvcgotCSAgSW4gY2FzZSBvZiBhIHJ1bi10aW1lIGVycm9yIG1lc3NhZ2UsIHRoZSBwcm9jZXNzIHJldHVybiB2YWx1ZSB3YXMgbGVmdAotCSAgdW5zZXQuIFRoaXMgd291bGQgbGVhZCB0byBlcnJvciBub3QgYmVpbmcgY2F1Z2h0IGF0IHNoZWxsIGxldmVsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTAxOQotCi0yMDE1LTEyLTA0IDEwOjQ1OjI1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgUmV2ZXJ0ICJ0b29sczogZ3N0LWxhdW5jaDogcmV0dXJuIG5vbi0wIGV4aXQgY29kZSBvbiBhc3luYyBlcnJvciIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMmVlNGNiYTI0ODVkN2YxNjQ2ZDQ4ZTQ1NTk0MjZhZWQ0YmE5OWM4NS4KLQotMjAxNS0xMi0wNCAxNTowOTozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IGdzdC1sYXVuY2g6IHJldHVybiBub24tMCBleGl0IGNvZGUgb24gYXN5bmMgZXJyb3IKLQkgIFdoZW4gYW4gZXJyb3IgaGFwcGVucyBpbiBwbGF5aW5nIHN0YXRlLCBzdGlsbCByZXR1cm4gYQotCSAgbm9uLTAgZXhpdCBjb2RlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTAxOQotCi0yMDE1LTEyLTA0IDE0OjM5OjI5ICswMDAwICBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgotCSAgaGVscGVyczogcmVhbGx5IGZpeCBpbnN0YWxsIHJhY2UKLQkgIE15IHByZXZpb3VzIGZpeCBmb3IgIzc1ODAyOSB3YXNuJ3QgcXVpdGUgcmlnaHQgYW5kIHNpbXBseSBtYWRlIHRoZSByYWNlIHJhcmVyLgotCSAgU29tZSBvZiB0aGUgZmlsZXMgYXJlIGluc3RhbGxlZCBieSBpbnN0YWxsLWV4ZWMgYW5kIG90aGVycyBieSBpbnN0YWxsLWV4ZWMsIHNvCi0JICB0aGUgaG9va3MgbmVlZCB0byBiZSBzcGxpdCB0b28uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MDI5Ci0KLTIwMTUtMTItMDQgMTE6NTY6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBmaXggZG9jcwotCSAgVGhlIGFsbG9jYXRpb24gcXVlcnkgaGFzIHBhcmFtZXRlcnMgd2l0aCB0aGUgbWV0YSBBUEksIG5vdCBmbGFncy4KLQotMjAxNS0xMi0wMiAxNTowMjoyNSAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgRHJvcCB1c2FnZSBvZiBkZXByZWNhdGVkIGctaXItc2Nhbm5lciAtLXN0cmlwLXByZWZpeCBmbGFnCi0KLTIwMTUtMTItMDIgMTY6Mjg6MjMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogRml4IHNldC9nZXQgcHJvcGVydHkKLQkgIEJsYW1lIGl0IG9uIHRoZSByZWJhc2luZyA6KQotCi0yMDE1LTExLTEyIDE3OjE1OjM3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcGFkOiBJbXBsZW1lbnQgR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb24KLQkgIEFQSTogR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb24KLQkgIFJldHVybnMgYSBHc3RGbG93UmV0dXJuLCBhbGxvd3MgYXN5bmNocm9ub3VzIGVsZW1lbnRzIHRvIHByb3Blcmx5Ci0JICBwcm9wYWdhdGUgZmxvdyByZXR1cm5zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3ODIxCi0KLTIwMTUtMTEtMzAgMTc6MDk6NDMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBVc2Ugc2lnbmVkIGNsb2NrIHZhbHVlcyBmb3IgcnVubmluZyB0aW1lIGNhbGN1bGF0aW9uCi0JICBUaGlzIGltcHJvdmVzIHRoZSBhY2N1cmFjeSBvZiBxdWV1ZSBsZXZlbHMgYW5kIHdoZW4gdG8gcHVzaCBidWZmZXJzCi0JICBmb3IgYnVmZmVycyBmYWxsaW5nIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTcxOTMKLQotMjAxNS0xMS0yNyAwOTo0NToyOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaDoKLQkgIG11bHRpcXVldWU6IEFkZCBhbiBleHRyYSBjYWNoZSB0aW1lIGZvciB1bmxpbmtlZCBzdHJlYW1zCi0JICBXaGVuIHN5bmNocm9uaXppbmcgdGhlIG91dHB1dCBieSB0aW1lLCB0aGVyZSBhcmUgc29tZSB1c2UtY2FzZXMgKGxpa2UKLQkgIGFsbG93aW5nIGdhcGxlc3MgcGxheWJhY2sgZG93bnN0cmVhbSkgd2hlcmUgd2Ugd2FudCB0aGUgdW5saW5rZWQgc3RyZWFtcwotCSAgdG8gc3RheSBzbGlnaHRseSBiZWhpbmQgdGhlIGxpbmtlZCBzdHJlYW1zLgotCSAgVGhlICJ1bmxpbmtlZC1jYWNoZS10aW1lIiBwcm9wZXJ0eSBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBieSBob3cKLQkgIG11Y2ggdGltZSB0aGUgdW5saW5rZWQgc3RyZWFtcyBzaG91bGQgd2FpdCBiZWZvcmUgcHVzaGluZyBhZ2Fpbi4KLQotMjAxNS0xMC0yNiAwODowNjowMSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaDoKLQkgIG11bHRpcXVldWU6IE9wdGltaXplIG11bHRpcXVldWUgc2l6ZXMgYmFzZWQgb24gaW50ZXJsZWF2ZQotCSAgTXVsdGlxdWV1ZSBzaG91bGQgb25seSBiZSB1c2VkIHRvIGNvcGUgd2l0aDoKLQkgICogZGVjb3VwbGluZyB1cHN0cmVhbSBhbmQgZG93c3RyZWFtIHRocmVhZGluZyAoaS5lLiBoYXZpbmcgc2VwYXJhdGUgdGhyZWFkcwotCSAgZm9yIGVsZW1lbnRhcnkgc3RyZWFtcykuCi0JICAqIEVuc3VyaW5nIGluZGl2aWR1YWwgcXVldWVzIGhhdmUgZW5vdWdoIHNwYWNlIHRvIGNvcGUgd2l0aCB1cHN0cmVhbSBpbnRlcmxlYXZlCi0JICAoZGlzdGFuY2UgaW4gc3RyZWFtIHRpbWUgYmV0d2VlbiBjby1sb2NhdGVkIHNhbXBsZXMpLiBUaGlzIGlzIHRvIGd1YXJhbnRlZQotCSAgdGhhdCB3ZSBoYXZlIGVub3VnaCByb29tIGluIGVhY2ggaW5kaXZpZHVhbCBxdWV1ZXMgdG8gcHJvdmlkZSBuZXcgZGF0YSBpbgotCSAgZWFjaCwgd2l0aG91dCBiZWluZyBibG9ja2VkLgotCSAgKiBMaW1pdCB0aGUgcXVldWUgc2l6ZXMgdG8gdGhhdCBpbnRlcmxlYXZlIGRpc3RhbmNlIChhbmQgYW4gZXh0cmEgbWluaW1hbAotCSAgYnVmZmVyaW5nIHNpemUpLiBUaGlzIGlzIHRvIGVuc3VyZSB3ZSBkb24ndCBjb25zdW1lIHRvbyBtdWNoIG1lbW9yeS4KLQkgIEJhc2VkIG9uIHRoYXQsIG11bHRpcXVldWUgbm93IGNvbnRpbnVvdXNseSBjYWxjdWxhdGVzIHRoZSBpbnB1dCBpbnRlcmxlYXZlCi0JICAocGVyIGluY29taW5nIHN0cmVhbWluZyB0aHJlYWQpLiBCYXNlZCBvbiB0aGF0LCBpdCBjYWxjdWxhdGVzIGEgdGFyZ2V0Ci0JICBpbnRlcmxlYXZlIChjdXJyZW50bHkgMS41IHggcmVhbF9pbnRlcmxlYXZlICsgMjUwbXMgcGFkZGluZykuCi0JICBJZiB0aGUgdGFyZ2V0IGludGVybGVhdmUgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1heF9zaXplLnRpbWUsIGl0IHdpbGwKLQkgIHVwZGF0ZSBpdCBhY2NvcmRpbmdseSAodG8gYWxsb3cgZW5vdWdoIG1hcmdpbiB0byBub3QgYmxvY2spLgotCSAgSWYgdGhlIHRhcmdldCBpbnRlcmxlYXZlIGdvZXMgZG93biBieSBtb3JlIHRoYW4gNTAlLCB3ZSByZS1hZGp1c3QgaXQgb25jZQotCSAgd2Uga25vdyB3ZSBoYXZlIGdvbmUgcGFzdCBhIHNhZmUgZGlzdGFuY2UgKDIgeCBjdXJyZW50IG1heF9zaXplLnRpbWUpLgotCSAgVGhpcyBtb2RlIGNhbiBvbmx5IGJlIHVzZWQgZm9yIGluY29taW5nIHN0cmVhbXMgdGhhdCBhcmUgZ3VhcmFudGVlZCB0byBiZQotCSAgcHJvcGVybHkgdGltZXN0YW1wZWQuCi0JICBGdXJ0aGVybW9yZSwgd2UgaWdub3JlIHNwYXJzZSBzdHJlYW1zIHdoZW4gY2FsY3VsYXRpbmcgaW50ZXJsZWF2ZSBhbmQgbWF4aW11bQotCSAgc2l6ZSBvZiBxdWV1ZXMuCi0JICBGb3IgdGhlIHNpbXBsZXN0IG9mIHVzZS1jYXNlcyAoc2luZ2xlIHN0cmVhbSksIG11bHRpcXVldWUgYWN0cyBhcyBhIHNpbmdsZQotCSAgcXVldWUgd2l0aCBhIHRpbWUgbGltaXQgb2YgMjUwbXMuCi0JICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgaW5wdXRzLCBidXQgZWFjaCBjb21lIGZyb20gYSBkaWZmZXJlbnQgc3RyZWFtaW5nIHRocmVhZCwKLQkgIHRoZSBtYXhpbXVtIHRpbWUgbGltaXQgd2lsbCBhbHNvIGVuZCB1cCBiZWluZyAyNTBtcy4KLQkgIE9uIHJlZ3VsYXIgZmlsZXMgKG1vcmUgdGhhbiBvbmUgaW5wdXQgc3RyZWFtIGZyb20gdGhlIHNhbWUgdXBzdHJlYW0gc3RyZWFtaW5nCi0JICB0aHJlYWQpLCBpdCBjYW4gcmVkdWNlIHRoZSB0b3RhbCBtZW1vcnkgdXNlZCBhcyBtdWNoIGFzIDEweCwgZW5kaW5nIHVwIHdpdGgKLQkgIG1heF9zaXplLnRpbWUgYXJvdW5kIDUwMG1zLgotCSAgRHVlIHRvIHRoZSBhZGFwdGl2ZSBuYXR1cmUsIGl0IGNhbiBhbHNvIGNvcGUgd2l0aCBjaGFuZ2luZyBpbnRlcmxlYXZlICh3aGljaAotCSAgY2FuIGhhcHBlbiBjb21tb25seSBvbiBzb21lIGZpbGVzIGF0IHN0YXJ0dXAvcHJlLXJvbGwgdGltZSkKLQotMjAxMy0wMS0wOCAyMToxNjo0MiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogdXNlIG5ldyBzdHJlYW0tc3RhcnQgZXZlbnQgc3BhcnNlIGZsYWcgdG8gYXZvaWQgb3ZlcnJlYWRpbmcgc3VidGl0bGVzCi0JICBUaGlzIHdpbGwgbWVhbiBhIG11Y2ggbG93ZXIgZGVsYXkgYmVmb3JlIGEgc3VidGl0bGVzIHRyYWNrIGNoYW5nZXMgdGFrZQotCSAgZWZmZWN0LiBBbHNvIGF2b2lkcyBleGNlc3NpdmUgbWVtb3J5IHVzYWdlIGluIG1hbnkgY2FzZXMuCi0JICBUaGlzIHdpbGwgYWxzbyBjb25zaWRlciBzcGFyc2Ugc3RyZWFtcyBhcyAoaW5kaXZpZHVhbGx5KSBuZXZlciBmdWxsLCBzbwotCSAgYXMgdG8gYXZvaWQgYmxvY2tpbmcgYWxsIHBsYXliYWNrIGR1ZSB0byBvbmUgc3BhcnNlIHN0cmVhbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDA2NDgKLQotMjAxNS0xMC0zMCAxMDoyMjoyMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBGaXggaGlnaF90aW1lIGNvbXB1dGF0aW9uCi0JICAqIEF2b2lkIHRoZSBjb21wdXRhdGlvbiBjb21wbGV0ZWx5IGlmIHdlIGtub3cgd2UgZG9uJ3QgbmVlZCBpdCAobm90IGluCi0JICBzeW5jIHRpbWUgbW9kZSkKLQkgICogTWFrZSBzdXJlIHdlIGRvbid0IG92ZXJyaWRlIGhpZ2hlc3QgdGltZSB3aXRoIEdTVF9DTE9DS19USU1FX05PTkUgb24KLQkgIHVubGlua2VkIHBhZHMKLQkgICogRW5zdXJlIHRoZSBoaWdoX3RpbWUgZ2V0cyBwcm9wZXJseSB1cGRhdGVkIGlmIGFsbCBwYWRzIGFyZSBub3QgbGlua2VkCi0JICAqIEZpeCB0aGUgY29tcGFyaXNpb24gaW4gdGhlIGxvb3Agd2hldGhlciB0aGUgdGFyZ2V0IGhpZ2ggdGltZSBpcyB0aGUgc2FtZQotCSAgYXMgdGhlIGN1cnJlbnQgdGltZQotCSAgKiBTcGxpdCB3YWtlX3VwX25leHRfbm9uX2xpbmtlZCBtZXRob2QgdG8gYXZvaWQgdXNlbGVzcyBjYWxjdWxhdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzM1MwotCi0yMDE1LTExLTA2IDAzOjAyOjQyICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogRG9uJ3QgcmVwb3J0IDAlIHVubGVzcyBlbXB0eQotCSAgV2hlbiBwcmVwYXJpbmcgYSBidWZmZXJpbmcgbWVzc2FnZSwgZG9uJ3QgcmVwb3J0IDAlIGlmIHRoZXJlCi0JICBpcyBhbnkgYnl0ZXMgbGVmdCBpbiB0aGUgcXVldWUgYXQgYWxsLiBXZSBzdGlsbCBoYXZlIHNvbWV0aGluZwotCSAgdG8gcHVzaCwgc28gZG9uJ3QgdGVsbCB0aGUgYXBwIHRvIHN0YXJ0IGJ1ZmZlcmluZyAtIG1heWJlCi0JICB3ZSdsbCBnZXQgbW9yZSBkYXRhIGJlZm9yZSBhY3R1YWxseSBydW5uaW5nIGRyeS4KLQotMjAxNS0xMS0zMCAxNzoxMTozMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JICBnc3RjbG9jazogRml4IEdTVF9TVElNRV9BUkdTCi0JICBJdCB3YXNuJ3QgcHJvcGVybHkgaGFuZGxpbmcgR1NUX0NMT0NLX1NUSU1FX05PTkUgYW5kIGFsd2F5cyB1c2UgdGhlCi0JICBzaWduIG1hcmtlciAoKy8tKSB0byBtYWtlIGl0IGVhc2llciB0byBpZGVudGlmeSBzaWduZWQgdmFsdWVzIGluCi0JICBsb2dzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4ODcwCi0KLTIwMTUtMTEtMzAgMjM6MDg6NTAgKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuYzoKLQkgIGNvbnRyb2xzb3VyY2U6IEFubm90YXRlIGdldF92YWx1ZVtfYXJyYXldIGFzIChtZXRob2QpCi0JICBBcyB0aGUgbmFtZXMgY2xhc2ggd2l0aCBnc3Rfb2JqZWN0X2dldF92YWx1ZVtfYXJyYXldCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2OTUwCi0KLTIwMTUtMTEtMTMgMTc6MzI6NTcgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSAgcGx1Z2luOiBBZGQgcHJlZml4IHN1cHBvcnQgdG8gZGVwZW5kZW5jaWVzCi0JICBUaGlzIGFkZHMgYSBuZXcgZmxhZ3MsIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19QUkVGSVgsCi0JICB3aGljaCBhbGxvdyB1c2luZyB0aGUgbmFtZXMgYXMgcHJlZml4IGZvciBwbHVnaW4gZGVwZW5jaWVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODA4MwotCi0yMDE1LTExLTEzIDE2OjMyOjMxIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIHBsdWdpbjogQWxsb3cgZGV2aWNlIG5vZGVzIGFzIGRlcGVuZGVuY3kKLQkgIFRoaXMgaXMgdXNlZnVsIGZvciBmZWF0dXJlIHRoYXQgYXJlIHByb2R1Y2VkIGFmdGVyIHByb2JpbmcgYSBzcGVjaWZpYwotCSAgbm9kZS4gWW91IHdhbnQgdG8gcmVsb2FkIHRoaXMgcGx1Z2luIGlmIHRoZSBzcGVjaWZpYyBub2RlKHMpIGhhdmUgYmVlbgotCSAgcmVtb3ZlZCwgYWRkZWQsIG9yIHJlbG9hZGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODA4MAotCi0yMDE1LTExLTEzIDE2OjIwOjQyIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIHBsdWdpbjogRG9uJ3QgZG8gbG9zc3kgc2hpZnQgb24gaGFzaAotCSAgSW4gcGx1Z2luIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxjdWxhdGluZyBhIGhhc2ggb2YgdGhlIGRlcGVuZGVuY2llcwotCSAgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWNoZSBzaG91bGQgYmUgaW52YWxpZGF0ZWQgb3Igbm90LgotCSAgQ3VycmVudGx5LCB0aGUgaGFzaCBjb21iaW5pbmcgbWV0aG9kIHJlbW92ZXMgYSBiaXQgb2YgdGhlIG9yaWdpbmFsCi0JICBoYXZlIGJlZm9yZSBjb21iaW5pbmcgd2l0aCBhbiBhZGRpdGlvbi4gQXMgd2UgdXNlIDMyYml0cyBmb3Igb3VyIGhhc2gKLQkgIGFuZCBzaGlmdCAxIGJpdCBmb3IgZWFjaCBmaWxlIGFuZCBkaXJlY3RvcnksIHRoYXQgcmVzdWx0aW5nIGhhc2ggb25seQotCSAgYWNjb3VudCBmb3IgdGhlIGxhc3QgMzIgZmlsZXMuIEFuZCBpcyBtb3JlIGFmZmVjdGVkIGJ5IHRoZSBsYXN0IGZpbGUuCi0JICBSb3RhdGluZyB0ZWNobmlxdWUgKHNoaWZ0aW5nLCBhbmQgYWRkaW5nIGJhY2sgdGhlIGVuZGluZyBiaXQpLCBjYW4gYmUKLQkgIHVzZSB0byBtYWtlIHRoZSBhZGRpdGlvbiBub24tY29tbXV0YXRpdmUuIEluIGEgd2F5IHRoYXQgZGlmZmVyZW50IG9yZGVyCi0JICBnaXZlcyBkaWZmZXJlbnQgaGFzaGVzLiBJbiB0aGlzIGNhc2UsIEkgZG9uJ3QgcHJlc2VydmUgdGhpcyBiZWhhdmlvdXIKLQkgIGJlY2F1c2UgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmaWxlcyBhcmUgcHJvdmlkZWQgYnkgdGhlIE9TIGlzCi0JICBpcnJlbGV2YW50LgotCSAgSW4gbW9zdCBjYXNlcywgdGhlIFhPUiBvcGVyYXRpb24gaXMgdXNlZCB0byBjb21iaW5lIGhhc2hlcy4gSW4gdGhpcwotCSAgY29kZSB3ZSB1c2UgdGhlIGFkZGl0aW9uLiBJIGRlY2lkZWQgdG8gcHJlc2VydmUgdGhlIGFkZGl0aW9uIGJlY2F1c2UKLQkgIHdlIG1ha2UgdXNlIG9mIG5vbi1yYW5kb20gaGFzaCAoKGd1aW50KSAtMSkgaW4gdGhlIGFsZ29yaXRobSBmb3IKLQkgIG1hdGNoaW5nIGZpbGVzIHRoYXQgYXJlIG5vdCByZWFsbHkgcGFydCBvZiB0aGUgaGFzaCAoc3ltbGlua3MsIHNwZWNpYWwKLQkgIGZpbGVzKS4gRG9pbmcgc3VjY2Vzc2l2ZSBYT1Igb24gdGhpcyB2YWx1ZSwgd2lsbCBzaW1wbHkgc3dpdGNoIGZyb20KLQkgIGZ1bGwgb25lcywgdG8gZnVsbCB6ZXJvLiBUaGUgWE9SIHVzZWQgd2l0aCB3aGl0ZWxpc3QgaGFzIGJlZW4gcHJlc2VydmVkCi0JICBhcyBpdCdzIGJhc2VkIG9uIGEgZmFpcmx5IHJhbmRvbWl6ZWQgaGFzaCAoZ19zdHJfaGFzaCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MDc4Ci0KLTIwMTUtMTEtMjMgMjE6NDA6MzQgKzAwMDAgIEx1a2FzeiBGb3J5bnNraSA8bHVrYXN6LmZvcnluc2tpQHlvdXZpZXcuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgaW5mbzogZml4IGNvbXBpbGVyIHdhcm5pbmcgd2l0aCAtV3BlZGFudGljIGFuZCBnY2MgNQotCSAgR3N0cmVhbWVyIGNvbXBpbGVkIHdpdGggZ2NjIDUuMiBhbmQgLVdwZWRhbnRpYyBwcm9kdWNlcyB0aGUKLQkgIGZvbGxvd2luZyB3YXJuaW5nOgotCSAgJ0lTTyBDIGRvZXMgbm90IHN1cHBvcnQgJ19fRlVOQ1RJT05fXycgcHJlZGVmaW5lZCBpZGVudGlmaWVyIFstV3BlZGFudGljXQotCSAgY29uc3QgY2hhciAqcyA9IF9fRlVOQ1RJT05fXzsnCi0JICBTaW5jZSBnY2MgNSBlbmFibGVzIEM5OSBieSBkZWZhdWx0LCB1c2UgX19mdW5jX18gaWYgaXQncyBhdmFpbGFibGUKLQkgIGluc3RlYWQgb2YgdGhlIG5vbi1zdGFuZGFyZCBfX0ZVTkNUSU9OX18gKGFzIHN1Z2dlc3RlZCBpbiBbMl0pLgotCSAgWzFdOiBodHRwczovL2djYy5nbnUub3JnL2djYy01L2NoYW5nZXMuaHRtbAotCSAgWzJdOiBodHRwczovL2djYy5nbnUub3JnL2djYy01L3BvcnRpbmdfdG8uaHRtbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODU0MQotCi0yMDE1LTExLTIwIDE5OjQ1OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JICBjb250cm9sbGVyOiBmaXggYW5ub3RhdGlvbiB0byBtYWtlIGctaXItc2Nhbm5lciBoYXBweQotCSAgZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDo1OTogV2FybmluZzogR3N0Q29udHJvbGxlcjogbWlzc2luZyAiOiIgYXQgY29sdW1uIDUxOgotCSAgKiBAR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQ19NT05POiAoU2luY2UgMS44KSBtb25vdG9uaWMgY3ViaWMgaW50ZXJwb2xhdGlvbiwgd2lsbCBub3QKLQkgIGdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg6NTk6IFdhcm5pbmc6IEdzdENvbnRyb2xsZXI6IHVua25vd24gYW5ub3RhdGlvbjogc2luY2UKLQotMjAxNC0wOS0yOSAxNDowMzoxMyArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnczogYWRkIEdTVF9UQUdfUFJJVkFURV9EQVRBCi0JICBDYW4gYmUgdXNlZCB0byByZXByZXNlbnQgcHJpdmF0ZSBkYXRhIHRoYXQgbWF5IGJlCi0JICBjb250YWluZWQgaW4gdGFncywgc3VjaCBhcyBJRDN2MiBQUklWIGZyYW1lcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA5MjYKLQotMjAxNS0xMS0xOSAwMDo1MTo0NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgUmV2ZXJ0ICJiYXNlcGFyc2U6IGRvIG5vdCBvdmVyd3JpdGUgaGVhZGVyIGJ1ZmZlciB0aW1lc3RhbXBzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyYzQ3NWEwMzU1NDNlZmMwMjAyZWNkYzUyMDcwMjk1YTQyMWVkNGI0LgotCSAgVGhpcyBjYXVzZXMgaXNzdWVzIHdpdGggaDI2NHBhcnNlLiBJdCBicmVha3MgdGltZXN0YW1wcyBhcwotCSAgdGhlcmUgYXJlIGhlYWRlcnMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3RyZWFtIGFuZCB0aGlzIHBhdGNoCi0JICBtYWtlcyB0aGUgdGltZXN0YW1wcyBmb3IgdGhvc2UgZGlmZmVyIGZyb20gdGhlIG9uZXMgdGhhdAotCSAgYXJlIGFkanVzdGVkLCBjcmVhdGluZyBhIGRpc2NvbnRpbnVpdHkgYW5kIGxlYWRpbmcgdG8gc3luYwotCSAgaXNzdWVzLgotCi0yMDE1LTExLTE3IDE4OjQ3OjQ4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBSZXZlcnQgImJhc2VwYXJzZTogc2ltcGxpZnkgY29kZSBhIGJpdCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMzk4NGY3MTU5YTcyYzJlZWJlMDE5MDVlZTUzNzE2ZTNiMmFiY2IzMC4KLQotMjAxNS0xMS0xOCAxMTo0Njo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZG9uJ3QgcHJpbnQgY3JpdGljYWxzIHdoZW4gcmVjZWl2aW5nIGN1c3RvbSBldmVudHMgaW4gcmluZyBidWZmZXIgbW9kZQotCSAgRG93bmdyYWRlIGZyb20gZ193YXJuaW5nIHRvIEdTVF9XQVJOSU5HIGxvZyBtZXNzYWdlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODI3NgotCi0yMDE1LTExLTE4IDA5OjIxOjIzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzL2dzdC1wdHAtaGVscGVyLmM6Ci0JICBwdHAtaGVscGVyOiBEaXNhYmxlIG11bHRpY2FzdCBsb29wYmFjawotCSAgV2UncmUgbm90IHJlYWxseSBpbnRlcmVzdGVkIGluIG91ciBvd24gcGFja2V0cyBhbmQgaWdub3JlIHRoZW0gYW55d2F5LgotCi0yMDE1LTExLTE3IDA5OjE3OjU4ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogRml4IHN0cmluZyBtZW1vcnkgbGVhawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODIwNwotCi0yMDE1LTExLTE2IDA4OjIyOjE0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHNpbXBsaWZ5IGNvZGUgYSBiaXQKLQkgIEF2b2lkIHJlcGVhdGVkIGNoZWNrcyBmb3IgdGVzdGluZyBpZiBhIGJ1ZmZlciBpcyBhIGhlYWRlcgotCi0yMDE1LTExLTEzIDIwOjQ0OjU3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBoYW5kbGUgYnVmZmVyIHdpdGggZHRzLW9ubHkgd2hlbiBtYXBwaW5nIHRvIHJ1bm5pbmcgdGltZQotCSAgT3RoZXJ3aXNlIHRoZSBidWZmZXIgd2FzIGxlZnQgd2l0aCB0aGUgb3JpZ2luYWwgdmFsdWVzIGFuZCBsYXRlciB3b3VsZAotCSAgYmUgY29tcGFyZWQgd2l0aCBvdGhlciBidWZmZXJzIHRoYXQgd2VyZSBjb252ZXJ0ZWQgdG8gcnVubmlubiB0aW1lLAotCSAgbGVhZGluZyB0byBiYWQgaW50ZXJsZWF2aW5nIG9mIG11bHRpcGxlIHN0cmVhbXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3OTYxCi0KLTIwMTUtMTEtMTMgMTY6MzE6MDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZG8gbm90IG92ZXJ3cml0ZSBoZWFkZXIgYnVmZmVyIHRpbWVzdGFtcHMKLQkgIGJhc2VwYXJzZSB0cmllcyB0byBwcmVzZXJ2ZSB0aW1lc3RhbXBzIGZyb20gdXBzdHJlYW0gaWYKLQkgIGl0IGlzIHJ1bm5pbmcgb24gYSB0aW1lIHNlZ21lbnQgYW5kIHdyaXRlIHRoYXQgdG8KLQkgIG91dHB1dCBidWZmZXJzLiBJdCBhc3N1bWVzIHRoZSBmaXJzdCBEVFMgaXMgZ29pbmcgdG8gYmUKLQkgIHNlZ21lbnQuc3RhcnQgYW5kIHNldHMgdGhhdCB0byB0aGUgZmlyc3QgYnVmZmVycy4gSW4gY2FzZQotCSAgdGhlIGJ1ZmZlciBpcyBhIGhlYWRlciBidWZmZXIsIGl0IGhhZCBubyB0aW1lc3RhbXBzIGFuZAotCSAgd2lsbCBoYXZlIG9ubHkgdGhlIERUUyBzZXQgZHVlIHRvIHRoaXMgbWVjaGFuaXNtLgotCSAgVGhpcyBwYXRjaCBwcmV2ZW50cyB0aGlzIGJ5IHNraXBwaW5nIHRoaXMgYmVoYXZpb3IgZm9yCi0JICBoZWFkZXIgYnVmZmVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc5NjEKLQotMjAxNS0wNi0xOCAxMzo1Njo1MyAtMDcwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1w6kgPGFsZWl4QG9ibG9uZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKLQkgIGlkZW50aXR5OiBhZGQgZHJvcC1idWZmZXItZmxhZ3MgcHJvcGVydHkKLQkgIE5ldyBwcm9wZXJ0eSBkcm9wLWJ1ZmZlci1mbGFncyB0aGF0IHdpbGwgZGlzY2FyZCBidWZmZXJzIHRoYXQgaGF2ZSB0aGUKLQkgIGdpdmVuIGZsYWdzIHNldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTExODIKLQotMjAxNS0xMS0xMiAxOTo0Njo0NCArMDAwMCAgUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KLQotCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKLQkgIGhlbHBlcnM6IGZpeCBpbnN0YWxsIHJhY2UKLQkgIFRoZSBpbnN0YWxsIGhvb2sgbmVlZHMgdG8gYmUgYSBpbnN0YWxsLWRhdGEtaG9vayBub3QgYW4gaW5zdGFsbC1leGVjLWhvb2sgYXMgdGhlCi0JICBoZWxwZXJzIGFyZSBpbnN0YWxsZWQgaW50byBoZWxwZXJkaXIgd2hpY2ggaXMgY29uc2lkZXJlZCBkYXRhIChvbmx5IHBhdGgKLQkgIHZhcmlhYmxlcyB3aXRoICJleGVjIiBpbiBhcmUgY29uc2lkZXJlZCBleGVjdXRhYmxlcykuCi0JICBUaGUgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBpbnN0YWxsLWhlbHBlcnNQUk9HUkFNUyB3YXMgYW4gYXR0ZW1wdCBhdCBzb2x2aW5nCi0JICB0aGlzLCBidXQgdGhpcyBjYXVzZXMgb2NjYXNpb25hbCByYWNlcyB3aGVyZSBpbnN0YWxsLWhlbHBlcnNQUk9HUkFNUyBjYW4gcnVuCi0JICB0d2ljZSBpbiBwYXJhbGxlbCAob25jZSB2aWEgaW5zdGFsbC1hbGwsIG9uY2UgdmlhIHRoZSBob29rJ3MgZGVwZW5kZW5jeSkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MDI5Ci0KLTIwMTUtMTEtMTIgMTY6MTQ6MTggKzAxMDAgIEhlaW5yaWNoIEZpbmsgPGhmaW5rQHRvb2xzb25haXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIHN5c3RlbWNsb2NrOiBBZGQgdGVzdCBmb3IgZ3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uCi0JICBJbiBhIHNlcmllcyBvZiB0aW1lIG1lYXN1cmVtZW50cywgdGhlIGRpZmYgYmV0d2VlbiBub3cgYW5kIHByZXZpb3VzCi0JICB0aW1lc3RhbXBzIGlzIGVpdGhlciAwIG9yIGF0IGxlYXN0IGFzIGxvbmcgYXMgZ2V0X3Jlc29sdXRpb24gcmV0dXJuZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MDEyCi0KLTIwMTUtMTEtMTIgMTE6MjY6NTYgKzAxMDAgIEhlaW5yaWNoIEZpbmsgPGhmaW5rQHRvb2xzb25haXIuY29tPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIHN5c3RlbWNsb2NrOiBVc2UgbWFjaF90aW1lIG9uIEFwcGxlIHBsYXRmb3JtcwotCSAgT24gaU9TL09TWCBnX2dldF9jdXJyZW50X3RpbWUgd2FzIHVzZWQgYnkgZGVmYXVsdC4gSG93ZXZlciwgbWFjaF90aW1lIGlzCi0JICB0aGUgcHJlZmVycmVkIGhpZ2gtcmVzb2x1dGlvbiBtb25vdG9uaWMgY2xvY2sgdG8gYmUgdXNlZCBvbiBBcHBsZQotCSAgcGxhdGZvcm1zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODAxMgotCi0yMDE1LTExLTExIDExOjExOjIzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkgIHRyYWNlcnM6IGxvZzogYWRkIG1pc3NpbmcgaG9va3MKLQkgIExvZyBhbGwgcG9zc2libGUgaG9va3MKLQotMjAxNS0xMC0yOSAwODo0MDozMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuaDoKLQkgIHRyYWNlcjogYWRkIGVsZW1lbnQtY2hhbmdlLXN0YXRlLXByZS9wb3N0IGhvb2sKLQkgIEhlbHBzIGNhdGNoaW5nIHdoZW4gYSBzdGF0ZSBjaGFuZ2UgaXMgc3RhcnRpbmcgYW5kIGVuZGluZy4KLQkgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdHJhY2sgdGhlIGVuZCBvZiBzdGF0ZSBjaGFuZ2VzIGJ5IGNoZWNraW5nIHRoZQotCSAgYXN5bmMtZG9uZSBvciBzdGF0ZS1jaGFuZ2UgbWVzc2FnZXMuCi0JICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGVsZW1lbnRzIHRoYXQgZG8gYXN5bmMgc3RhdGUgY2hhbmdlcy4KLQotMjAxNS0xMS0xMSAxNDozMjo0NCArMDEwMCAgTWlndWVsIFBhcsOtcyBEw61heiA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHBhZDogdGVzdCBmb3IgY2hlY2tpbmcgdGhlIG9yZGVyIG9mIHRoZSBwcm9iZSBjYWxscwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzE5NwotCi0yMDE1LTExLTEwIDE0OjQxOjM1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JICBjb250ZXh0OiBmaXggc29tZSBjb3B5IGFuZCBwYXN0ZSBsZWZ0b3ZlciBpbiBkb2NzCi0KLTIwMTUtMTEtMTAgMTQ6Mzc6MjcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkgIGNvbnRleHQ6IGFkZCBzb21lIG1vcmUgZG9jdW1lbnRhdGlvbgotCSAgQWRkIGEgc2hvcnQgcGFyYWdyYXBoIG9uIHdoYXQgbWVhbnMgZm9yIGEgY29udGV4dCB0byBiZSBwZXJzaXN0ZW50Ci0KLTIwMTUtMTEtMDkgMTg6MDI6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgdXRpbHM6IHVzZSAnc3RhdGljIGlubGluZScgaW5zdGVhZCBvZiAnaW5saW5lIHN0YXRpYycgZm9yIGd0ay1kb2MKLQkgIGd0ay1kb2MgZG9lc24ndCBzZWVtIHRvIHJlY29nbmlzZSB0aGUgZm9ybWVyIHZhcmlhbnQuCi0KLTIwMTUtMTEtMDkgMTc6NTk6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGNvbnRleHQuaDoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHNhbXBsZS5oOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkqIGdzdC9nc3R1cmkuaDoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6Ci0JICBkb2NzOiByZW1vdmUgZHVtbXkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdpdGggR19JTkxJTkVfRlVOQ1RJT04gZm9yIGd0ay1kb2MKLQkgIGd0ay1kb2MgY2FuIGhhbmRsZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBqdXN0IGZpbmUgdGhlc2UgZGF5cywKLQkgIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgdGhpcyBzdHVmZiBhbnkgbW9yZS4KLQotMjAxNS0wMi0yMyAxMzoxNjoxOSArMTAwMCAgRHVuY2FuIFBhbG1lciA8ZHBhbG1lckBkaWdpc29mdC50dj4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IEFkZCB0aGUgYXZnLWluLXJhdGUgcHJvcGVydHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzOTU5Ci0KLTIwMTUtMTEtMDQgMTI6MDI6NTEgKzAxMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUyLmM6Ci0JICBxdWV1ZTI6IGFkZCBvdmVycnVuIHNpZ25hbAotCSAgTm90aWZpZXMgdGhhdCB0aGUgcXVldWUyIGlzIGZ1bGwsIHNhbWUgYXMgcXVldWUgZG9lcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzk1OQotCi0yMDE1LTA5LTI5IDIxOjE0OjE5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHBhZDogdGVzdHMgZm9yIGFjY2VwdC1jYXBzIGhhbmRsaW5nIHdpdGggcHJveHkgcGFkcwotCSAgQWRkcyAzIG5ldyB0ZXN0cyBmb3IgdGVzdGluZyBhY2NlcHQtY2FwcyBiZWhhdmlvciB3aXRoCi0JICBwcm94eS1jYXBzIHBhZHMuCi0JICAxKSBBIHNjZW5hcmlvIHdoZXJlIHRoZXJlIGlzIG5vIHByb3h5LiBUaGUgY2FwcyBzaG91bGQgYmUgY29tcGFyZWQgdG8gdGhlCi0JICB0ZW1wbGF0ZSBjYXBzIG9mIHRoZSBwYWQKLQkgIDIpIEEgc2NlbmFyaW8gd2hlcmUgdGhlcmUgaXMgYSBjb21wYXRpYmxlIHBhZC4gVGhlIGNhcHMgc2hvdWxkIGJlIGNvbXBhcmVkCi0JICB0byB0aGUgcHJveGllZCBwYWQgY2FwcyAoYW5kIGFsc28gd2l0aCB0aGUgdGVtcGxhdGUpCi0JICAzKSBBIHNjZW5hcmlvIHdoZXJlIHRoZXJlIGlzIGFuIGluY29tcGF0aWJsZSBwcm94eSBwYWQuIE5vIGNhcHMgc2hvdWxkIGJlCi0JICBwb3NzaWJsZSBhdCBhbGwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0MTEyCi0KLTIwMTUtMTEtMDUgMTY6MTU6MjIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBjaGVjayB0ZW1wbGF0ZSBjYXBzIGZvciBwcm94eSBwYWRzIGluIGFjY2VwdC1jYXBzCi0JICBWYWxpZGF0ZSB0aGF0IHRoZSBwcm94eSBwYWQgaW5kZWVkIGFjY2VwdHMgdGhlIGNhcHMgYnkgYWxzbwotCSAgY29tcGFyaW5nIHdpdGggdGhlIHBhZCB0ZW1wbGF0ZSBjYXBzLCBvdGhlcndpc2Ugd2hlbiB0aGUgcGFkCi0JICBoYWQgbm8gaW50ZXJuYWxseSBsaW5rZWQgcGFkcyBpdCB3b3VsZCBhbHdheXMgcmV0dXJuIHRydWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0MTEyCi0KLTIwMTUtMTEtMDYgMTI6NTg6NDIgKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdHByZXNldC5jOgotCSAgRml4IGJ1aWxkIHdpdGggLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkCi0KLTIwMTUtMTEtMDYgMTI6MDU6MTggKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdHByZXNldC5jOgotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBwcmVzZXQ6IEFkZCBhIEdTVF9QUkVTRVRfUEFUSCBlbnYgdmFyaWFibGUgZm9yIHByZXNldHMgdG8gYmUgdXNhYmxlIHVuaW5zdGFsbGVkCi0JICBBbmQgc3RhcnQgc2V0dGluZyB0aGUgdmFyaW91cyB1bmluc3RhbGxlZCBwcmVzZXRzIHBhdGhzLgotCi0yMDE1LTExLTA1IDA4OjU2OjQzICswMTAwICBBbnRvbiBCb25kYXJlbmtvIDxhbnRvbmJvQGF4aXMuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogY29udGludWUgZWxlbWVudCBjbGVhbnVwIGV2ZW4gaWYgZmNsb3NlIGZhaWxzCi0JICBTb21ldGltZXMgZmlsZXNpbmsgY2xlYW51cCBkdXJpbmcgc3RvcCBtYXkgZmFpbCBkdWUgdG8gZmNsb3NlIGVycm9yLgotCSAgSW4gdGhpcyBjYXNlIG9iamVjdCBsZWZ0IHBhcnRpYWwgY2xlYW51cCB3aXRoIG5vIGZpbGUgb3BlbmVkCi0JICBidXQgc3RpbGwgaG9sZGluZyBvbGQgZmlsZSBkZXNjcmlwdG9yLgotCSAgSXQncyBub3QgcG9zc2libGUgdG8gY2hhbmdlIGxvY2F0aW9uIHByb3BlcnR5IGluIGEgc3VjaCBzdGF0ZSwKLQkgIHNvIG5leHQgc3RhcnQgd2lsbCBjYXVzZSBvbGQgZmlsZSBvdmVyd3JpdGUgaWYgJ2FwcGVuZCcgZG9lcyBub3Qgc2V0LgotCSAgQWNjb3JkaW5nIHRvIG1hbiBwYWdlIGFuZCBQT1NJWCBzdGFuZGFyZCBhYm91dCBmY2xvc2UgYmVoYXZpb3IoZXh0cmFjdCk6Ci0JICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgIFRoZSBmY2xvc2UoKSBmdW5jdGlvbiBzaGFsbCBjYXVzZSB0aGUgc3RyZWFtIHBvaW50ZWQgdG8gYnkgc3RyZWFtCi0JICB0byBiZSBmbHVzaGVkIGFuZCB0aGUgYXNzb2NpYXRlZCBmaWxlIHRvIGJlIGNsb3NlZC4KLQkgIC4uLgotCSAgV2hldGhlciBvciBub3QgdGhlIGNhbGwgc3VjY2VlZHMsIHRoZSBzdHJlYW0gc2hhbGwgYmUgZGlzYXNzb2NpYXRlZAotCSAgZnJvbSB0aGUgZmlsZSBhbmQgYW55IGJ1ZmZlciBzZXQgYnkgdGhlIHNldGJ1ZigpIG9yIHNldHZidWYoKQotCSAgZnVuY3Rpb24gc2hhbGwgYmUgZGlzYXNzb2NpYXRlZCBmcm9tIHRoZSBzdHJlYW0uCi0JICAuLi4KLQkgIFRoZSBmY2xvc2UoKSBmdW5jdGlvbiBzaGFsbCBwZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGEgY2xvc2UoKQotCSAgb24gdGhlIGZpbGUgZGVzY3JpcHRvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyZWFtCi0JICBwb2ludGVkIHRvIGJ5IHN0cmVhbS4KLQkgIEFmdGVyIHRoZSBjYWxsIHRvIGZjbG9zZSgpLCBhbnkgdXNlIG9mIHN0cmVhbSByZXN1bHRzCi0JICBpbiB1bmRlZmluZWQgYmVoYXZpb3IuCi0JICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgIFNvIGZpbGUgaXMgaW4gJ2Nsb3NlZCcgc3RhdGUgbm8gbWF0dGVyIGlmIGZjbG9zZSBzdWNjZWVkIG9yIG5vdC4KLQkgIEFuZCBjbGVhbnVwIGNvdWxkIGJlIGNvbnRpbnVlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc1OTYKLQotMjAxNS0xMS0wMSAwMDowNDoyNyArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogTWFyayBzdGlja3kgZXZlbnRzIGFzIHNlbnQgb24gbm90LWxpbmtlZAotCSAgSW5zdGVhZCBvZiByZS1zZW5kaW5nIHN0aWNreSBldmVudHMgb3ZlciBhbmQgb3ZlciB0byBhIG5vdC1saW5rZWQKLQkgIHBhZCwgbWFyayB0aGVtIGFzIHNlbnQgdGhlIGZpcnN0IHRpbWUuIElmIHRoZSBub3QtbGlua2VkIGNhbWUgZnJvbQotCSAgZG93bnN0cmVhbSwgaXQgYWxyZWFkeSByZWNlaXZlZCB0aGUgZXZlbnRzLiBJZiB0aGUgcGFkIGlzIGFjdHVhbGx5Ci0JICBub3QtbGlua2VkLCB0aGUgc3RpY2t5IGV2ZW50cyB3aWxsIGJlIHJlc2NoZWR1bGVkIHdoZW4gdGhlCi0JICBwYWQgaXMgbGlua2VkIGFueXdheS4KLQotMjAxNS0xMC0yOSAxODo1MzoyOSArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IEFsbG93IGRlYWN0aXZhdGlvbiB3aXRoIG5vIHBlZXIuCi0JICBBbGxvdyBkZWFjdGl2YXRpb24gaW4gcHVsbC1tb2RlLCBzaW5jZSB0aGF0IGltcGxpZXMgd2UKLQkgIGhhZCBhIHBlZXIsIGFjdGl2YXRlZCBpbiBwdWxsIG1vZGUsIHRoZW4gdGhlIHBlZXIgZGlzYS1wZWVyLWVkIDspCi0KLTIwMTUtMTAtMjggMTc6MzE6MDcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgZWxlbWVudDogZW1pdCB0cmFjZXIncyBlbGVtZW50LW5ldyBob29rIGZyb20gJ2NvbnN0cnVjdGVkJwotCSAgSXQgYWxsb3dzIHRvIHByb3Blcmx5IGVtaXR0aW5nIGl0IGZvciBhbGwgbmV3bHkgY3JlYXRlZCBlbGVtZW50cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzA0NQotCi0yMDE1LTEwLTI4IDA2OjAzOjM5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgc3RhdHM6IGxvZyB0aGUgZWxlbWVudC1uZXcgaG9vayBwcm9wZXJseQotCSAgVG8gYmUgYWJsZSB0byBnZXQgdGhlIHRpbWUgdGhlIGVsZW1lbnRzIHdlcmUgY3JlYXRlZCBpbnN0ZWFkIG9mCi0JICBqdXN0IGxvZ2dpbmcgdGhlbSB3aXRob3V0IGEgdGltZQotCi0yMDE1LTEwLTI4IDE4OjA0OjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFVuYmxvY2sgYmxvY2tpbmcgcGFkIHByb2JlcyB3aGVuIHJlY2VpdmluZyBGTFVTSF9TVEFSVCBpbiBzZW5kX2V2ZW50KCkgdG9vCi0JICBXaXRob3V0IHRoaXMsIGZsdXNoaW5nIG1pZ2h0IG5vdCB1bmJsb2NrIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGFuZCBjYXVzZSBkZWFkbG9ja3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3MjU3Ci0KLTIwMTUtMTAtMjggMTM6MDQ6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogRG9jdW1lbnQgdGhlIG9yZGVyIGluIHdoaWNoIHBhZCBwcm9iZXMgYXJlIGNhbGxlZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzE5NwotCi0yMDE1LTEwLTI3IDE4OjA1OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEFwcGVuZCBob29rcyBpbnN0ZWFkIG9mIHByZXBlbmRpbmcgdG8gY2FsbCB0aGVtIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTcxOTcKLQotMjAxNS0xMC0yNiAxMjo1MDoxMiArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0bmV0LmRlZjoKLQkgIG5ldGFkZHJlc3NtZXRhOiBnc3RfYnVmZmVyX2dldF9uZXRfYWRkcmVzc19tZXRhKCkgYXMgZnVuY3Rpb24KLQkgIEltcGxlbWVudCBnc3RfYnVmZmVyX2dldF9uZXRfYWRkcmVzc19tZXRhKCkgYXMgYSBmdW5jdGlvbiBpbnN0ZWFkCi0JICBvZiBhIG1hY3JvIGluIG9yZGVyIHRvIGdldCBnb2JqZWN0LWludHJvc3BlY3Rpb24gdG8gd29yay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI5MjEKLQotMjAxNS0xMC0yNiAxODowNzoxMSArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IGZsZXNoIG91dCBkb2NzIGZvciBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSBhIGxpdHRsZQotCSAgVGhlcmUgaXMgYSBzaW1pbGFyIGV4cGxhbmF0aW9uIGluIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUsIGJ1dCB0aGUgZXhpc3RpbmcKLQkgIGRvY3VtZW50YXRpb24gY2FuIGJlIG1pc2xlYWRpbmcgc2luY2UgaXQgZG9lcyBub3QgZGVmaW5lIHdoYXQgJ2lzIGFscmVhZHkKLQkgIHdyaXRhYmxlJyBtZWFucy4KLQkgIEFsc28gbm90ZSB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgdXNlZC4KLQotMjAxNS0xMC0yNiAxNzozNTozNCArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogY2xhcmlmeSBkb2NzIGZvciBhIGZldyBmdW5jdGlvbnMgdGhhdCB0aGV5IGRvbid0IHVwZGF0ZSB0aGluZ3MgaW4tcGxhY2UKLQkgIEl0IGlzIG5vdCBuZWNlc3NhcmlseSBjbGVhciBmcm9tIHRoZSBleGlzdGluZyBpbnRyb3NwZWN0aW9uIHRhZ3MgYW5kCi0JICBkb2N1bWVudGF0aW9uIGFsb25lLgotCi0yMDE1LTEwLTI3IDA4OjQ4OjA3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUvcXVldWUyOiBVc2UgR1NUX0JVRkZFUl9EVFNfT1JfUFRTCi0JICBUaGUgaW5wdXQgb2YgcXVldWUvcXVldWUyIG1pZ2h0IGhhdmUgRFRTIHNldCwgaW4gd2hpY2ggY2FzIHdlIHdhbnQKLQkgIHRvIHRha2UgdGhhdCBpbnRvIGFjY291bnQgKGluc3RlYWQgb2YgdGhlIFBUUykgdG8gY2FsY3VsYXRlIHBvc2l0aW9uCi0JICBhbmQgcXVldWUgbGV2ZWxzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjUwNwotCi0yMDE1LTEwLTEzIDE3OjIwOjI2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IFVzZSBidWZmZXIgRFRTIGlmIHByZXNlbnQsIGVsc2UgUFRTCi0JICBJbiBvcmRlciB0byBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgYW1vdW50IChpbiB0aW1lKSBvZiBkYXRhCi0JICB0cmF2ZWxsaW5nIGluIHF1ZXVlcywgd2Ugc2hvdWxkIHVzZSBhbiBpbmNyZWFzaW5nIHZhbHVlLgotCSAgSWYgYnVmZmVycyBhcmUgZW5jb2RlZCBhbmQgcG90ZW50aWFsbHkgcmVvcmRlcmVkLCB3ZSBzaG91bGQgYmUKLQkgIHVzaW5nIHRoZWlyIERUUyAoaW5jcmVhc2luZykgYW5kIG5vdCBQVFMgKHJlb3JkZXJlZCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY1MDcKLQotMjAxNS0xMC0yNyAwODozMzo0MSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IFVzZSBHU1RfQlVGRkVSX0RUU19PUl9QVFMKLQkgIFNpbXBsaWZpZXMgY29kZSBhIGJpdAotCi0yMDE1LTEwLTI2IDA3OjU5OjU0ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBBZGQgYSBHU1RfQlVGRkVSX0RUU19PUl9QVFMgbWFjcm8KLQkgIEFQSTogR1NUX0JVRkZFUl9EVFNfT1JfUFRTCi0JICBNYW55IHNjZW5hcmlvcy9lbGVtZW50cyByZXF1aXJlIGRlYWxpbmcgd2l0aCBzdHJlYW1zIG9mIGJ1ZmZlcnMgdGhhdAotCSAgbWlnaHQgaGF2ZSBEVFMgc2V0IChpLmUuIGVuY29kZWQgZGF0YSwgcG90ZW50aWFsbHkgcmVvcmRlcmVkKQotCSAgVG8gc2ltcGxpZnkgZ2V0dGluZyB0aGUgaW5jcmVhc2luZyAidGltZXN0YW1wIiBvZiB0aG9zZSBidWZmZXJzLCBjcmVhdGUKLQkgIGEgbWFjcm8gdGhhdCB3aWxsIHJldHVybiB0aGUgRFRTIGlmIHZhbGlkLCBhbmQgaWYgbm90IHRoZSBQVFMKLQotMjAxNS0xMC0wNiAxMjoyMTowNCArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2M6IGFkZCBHU1Rfe1BUUixTRUdNRU5UfV9GT1JNQVQKLQkgIFZlcnkgdXNlZnVsIGZvcm1hdHMgaW4gZGVidWcgb3V0cHV0IHNvIGJlc3QgdG8gaGF2ZSB0aGVtIGluIHRoZQotCSAgZ2VuZXJhdGVkIGRvYy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTYxMTUKLQotMjAxNS0xMC0yNiAxMDo1MzozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IFJldHVybiAtMSBpZiBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxsKCkgY29uc2lkZXJzIHRoZSBwb3NpdGlvbiBub3QgaW5zaWRlIHRoZSBzZWdtZW50Ci0JICBGaXhlcyBHc3RQaXBlbGluZSB1bml0IHRlc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2NTY0Ci0KLTIwMTUtMTAtMjQgMTY6NTI6NDQgKzAxMDAgIEZsb3JpbiBBcG9zdG9sIDxmbG9yaW4uYXBvc3RvbEBvcmVnYW4ubmV0PgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IGZpeCBiZWhhdmlvdXIgZm9yIG1lcmdpbmcgdXJpcyBlbmRpbmcgaW4gLi4gd2l0aG91dCBmb2xsb3dpbmcgLwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzA2NQotCi0yMDE1LTEwLTI0IDE2OjQzOjU5ICswMTAwICBGbG9yaW4gQXBvc3RvbCA8ZmxvcmluLmFwb3N0b2xAb3JlZ2FuLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jOgotCSAgdXJpOiB0ZXN0czogYWRkZWQgdW5pdCB0ZXN0IGZvciBzdHJlYW1zIGVuZGluZyBpbiAuLiB3aXRob3V0IGZvbGxvd2luZyAvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3MDY1Ci0KLTIwMTUtMDgtMjcgMTI6NDM6MjggKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVnOiBEdW1wIHBhZCBwcm9wZXJ0aWVzIHZhbHVlcwotCSAgQ3VycmVudGx5IHdlIG9ubHkgc2hvdyBlbGVtZW50IHByb3BlcnRpZXMgdmFsdWVzLCB3ZSBzaG91bGQgYWxzbyBzaG93Ci0JICBwYWQgcHJvcGVydGllcyB2YWx1ZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQxNjYKLQotMjAxNS0xMC0yMyAyMDowNDo0MiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IFJlbW92ZSBsZWZ0b3ZlciBkZWJ1ZyBnX3ByaW50KCkKLQotMjAxNS0xMC0xNSAxNDo0OTozNyArMDMwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAYWhpcnUuZXU+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHNlZ21lbnQ6IEFkZCBfZnVsbCB2YXJpYW50cyBvZiBhbGwgc3RyZWFtL3J1bm5pbmdfdGltZSBmcm9tL3RvIHNlZ21lbnQgcG9zaXRpb24gZnVuY3Rpb25zCi0JICBTZWUgZm9ybXVsYSBjbGFyaWZpY2F0aW9ucyBpbiBkZXNpZ24gZG9jcyBmb3IgY2FsY3VsYXRpb24gZGV0YWlscy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY1NjQKLQotMjAxNS0wOS0yNiAwMToyOTowNyArMDMwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAdG9vbHNvbmFpci5jb20+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiBBZGRlZCBlbnYgdmFyIGZvciB1bmluc3RhbGxlZCBQVFAgaGVscGVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NjUxCi0KLTIwMTUtMTAtMjIgMTI6MDA6NDIgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBiYXNlc2luazogcmVuYW1lIGFyZ3VtZW50IG9mIFBSRVJPTExfe0NPTkQsTE9DS30gbWFjcm9zCi0JICBUaGV5IHRha2UgYSBHc3RCYXNlU2luayBpbnN0YW5jZSBhcyBhcmd1bWVudCBhdCBub3QgYSBHc3RQYWQuIFJlbmFtZSB0aGUKLQkgIGFyZ3VtZW50IHRvICdvYmonIHdoaWNoIGlzIG5vdCBtaXNzIGxlYWRpbmcgYW5kIGluIGxpbmUgd2l0aAotCSAgR1NUX0JBU0VfU0lOS19QQUQob2JqKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY5NTQKLQotMjAxNS0xMC0yMiAxMDowNToxNCArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBnc3QvZ3N0Y29udHJvbHNvdXJjZS5jOgotCSAgZ3N0Y29udHJvbHNvdXJjZTogQWRkIG1pc3NpbmcgKG91dCkgYW5ub3RhdGlvbgotCi0yMDE1LTEwLTIxIDE0OjM0OjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYjk5ODAwYSB0byBiMzE5OTA5Ci0KLTIwMTUtMTAtMjEgMTQ6NDk6NDkgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogRml4IGRvY3MvYW5ub3RhdGlvbiBvZiBnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2J1ZmZlcl9saXN0KCkKLQkgIEl0J3Mgbm90IGdldF9idWZmZXJsaXN0KCkuIEJlY2F1c2Ugb2YgdGhhdCBpdCB3YXMgaWdub3JlZCBieSB0aGUgZG9jcyBhbmQKLQkgIEctSSwgbGVhZGluZyB0byBjcmFzaGVzIGJlY2F1c2Ugb2YgYnJva2VuIG93bmVyc2hpcCB0cmFuc2Zlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY4OTgKLQotMjAxNS0xMC0yMCAxNzoyOTo0MiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdHBhZC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBVc2UgbmV3IEdTVF9FTkFCTEVfRVhUUkFfQ0hFQ0tTICNkZWZpbmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY4NzAKLQotMjAxNS0xMC0yMSAxNDoyNTo0MCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogUkVBRE1FOgotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDlhZWQxZDcgdG8gYjk5ODAwYQotCi0yMDE1LTEwLTIwIDEzOjQ2OjI0ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0b29scy9nc3Qtc3RhdHMuYzoKLQkgIHN0YXRzOiBhbHdheXMgZnJlZSBsb2cKLQkgIFdlIGFsd2F5cyB3YW50IHRvIGZyZWUgdGhlIG9wZW4gZmlsZSBsb2cgaWYgZm9wZW4oKSBzdWNjZWVkZWQuIEluZGVwZW5kZW50bHkKLQkgIG9mIGlmIGZnZXRzKCkgc3VjY2VlZHMgb3IgZmFpbHMuCi0JICBDSUQgMTMyNjA1NQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Njg2NAotCi0yMDE1LTEwLTE5IDE2OjUwOjUxICswMzAwICBWaXZpYSBOaWtvbGFpZG91IDx2aXZpYUBhaGlydS5ldT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JICBzZWdtZW50OiBDb3JyZWN0IHN0cmVhbV90aW1lIGNhbGMgZm9yIG5lZ2F0aXZlIGFwcGxpZWQgcmF0ZQotCSAgVXBkYXRlZCBnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lIGFuZCBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSB0byByZWZsZWN0IGNvcnJlY3QgY2FsY3VsYXRpb25zIGZvciB0aGUgY2FzZSB3aGVuIHRoZSBhcHBsaWVkIHJhdGUgaXMgbmVnYXRpdmUuCi0JICBQYXN0aW5nIGZyb20gZGVzaWduIGRvY3M6Ci0JICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JICBTdHJlYW0gdGltZSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBidWZmZXIgdGltZXMgYW5kIHRoZSBwcmVjZWRpbmcgU0VHTUVOVAotCSAgZXZlbnQgYXMgZm9sbG93czoKLQkgIHN0cmVhbV90aW1lID0gKEIudGltZXN0YW1wIC0gUy5zdGFydCkgKiBBQlMgKFMuYXBwbGllZF9yYXRlKSArIFMudGltZQotCSAgRm9yIG5lZ2F0aXZlIHJhdGVzLCBCLnRpbWVzdGFtcCB3aWxsIGdvIGJhY2t3YXJkcyBmcm9tIFMuc3RvcCB0byBTLnN0YXJ0LAotCSAgbWFraW5nIHRoZSBzdHJlYW0gdGltZSBnbyBiYWNrd2FyZHMuCi0JICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JICBUaGVyZWZvcmUsIHRoZSBjYWxjdWxhdGlvbiBmb3IgYXBwbGllZF9yYXRlIDwgMCBzaG91bGQgYmU6Ci0JICBzdHJlYW1fdGltZSA9IChTLnN0b3AgLSBCLnRpbWVzdGFtcCkgKiBBQlMgKFMuYXBwbGllZF9yYXRlKSArIFMudGltZQotCSAgYW5kIHRoZSByZXZlcnNlOgotCSAgQi50aW1lc3RhbXAgPSBTLnN0b3AgLSAoc3RyZWFtX3RpbWUgLSBTLnRpbWUpIC8gQUJTIChTLmFwcGxpZWRfcmF0ZSkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY4MTAKLQotMjAxNS0xMC0xOSAyMTozOToxOSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtdHJhY2luZy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JICB0cmFjZXI6IHJlbmFtZSB0aGUgZW52dmFyIHRvIEdTVF9UUkFDRVJfUExVR0lOUwotCSAgVGhlIHN1YnN5c3RlbSByZXVzZWQgdGhlIEdTVF9UUkFDRSB2YXIgdGhhdCBpcyBhbGxyZWFkeSBpbiB1c2UgYnkgdGhlIGFsbG9jIHRyYWNlci4KLQkgIEZpeGVzICM3NTY3NjAKLQotMjAxNS0xMC0xNSAxNjozMjo0MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBJbXByb3ZlIGluY29taW5nIFNFR01FTlQgaGFuZGxpbmcKLQkgIFByZXZpb3VzbHkgdGhpcyBjb2RlIHdhcyBqdXN0IGJsaW5kbHkgc2V0dGluZyB0aGUgY2FjaGVkIGZsb3cgcmV0dXJuCi0JICBvZiBkb3duc3RyZWFtIHRvIEdTVF9GTE9XX09LIHdoZW4gd2UgZ2V0IGEgU0VHTUVOVC4KLQkgIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhpcyBjYW4gbm90IGJlIGRvbmUgYmxpbmRseS4gSWYgZG93bnN0cmVhbSB3YXMKLQkgIG5vdCBsaW5rZWQsIHRoZSBjb3JyZXNwb25kaW5nIHNpbnFsZXF1ZXVlIHNvdXJjZSBwYWQgdGhyZWFkIG1pZ2h0IGJlCi0JICB3YWl0aW5nIGZvciB0aGUgbmV4dCBJRCB0byBiZSB3b2tlbiB1cCB1cG9uLgotCSAgQnkgYmxpbmRseSBzZXR0aW5nIHRoZSBjYWNoZWQgcmV0dXJuIHZhbHVlIHRvIEdTVF9GTE9XX09LLCBhbmQgaWYgdGhhdAotCSAgc3RyZWFtIHdhcyB0aGUgb25seSBvbmUgdGhhdCB3YXMgTk9UX0xJTktFRCwgdGhlbiB0aGUgbmV4dCB0aW1lIHdlCi0JICBjaGVjayAoZnJvbSBhbnkgb3RoZXIgdGhyZWFkKSB0byBzZWUgaWYgd2UgbmVlZCB0byB3YWtlIHVwIGEgc291cmNlIHBhZAotCSAgdGhyZWFkIC4uLiB3ZSB3b24ndCBldmVuIHRyeSwgYmVjYXVzZSBub25lIG9mIHRoZSBjYWNoZWQgZmxvdyByZXR1cm4KLQkgIGFyZSBlcXVhbCB0byBHU1RfRkxPV19OT1RfTElOS0VELgotCSAgVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhhdCB0aHJlYWQgbmV2ZXIgYmVpbmcgd29rZW4gdXAKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY2NDUKLQotMjAxNS0wOS0yNiAxODoxNjowNyArMDgwMCAgVGluZy1XZWkgTGFuIDxsYW50d0BzcmMuZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIGdzdHV0aWxzOiBGaXggYnVpbGQgd2l0aCBjbGFuZyAtV2Vycm9yPWNhc3QtYWxpZ24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2NTcKLQotMjAxNS0xMC0xNyAyMjoxMzowOCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBNYWtlIHN1cmUgdG8gZnJlZSBhbGwgY2FjaGVkIG1lc3NhZ2VzIHdoZW4gZ29pbmcgdG8gTlVMTAotCSAgQW4gQVNZTkMgUkVBRFktPlBBVVNFRCBtaWdodCBoYXZlIGZhaWxlZCB3aXRob3V0IHRoZSBiaW4gY29kZSBub3RpY2luZyBkdXJpbmcKLQkgIHRoZSBzdGF0ZSBjaGFuZ2UsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBuZXZlciBnZXQgUEFVU0VELT5SRUFEWSBhbmQgd291bGQgbGVhawotCSAgbWVzc2FnZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2NjExCi0KLTIwMTUtMTAtMTYgMTU6NTk6NDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgotCSogZ3N0L2dzdGRlYnVndXRpbHMuaDoKLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIGRvY3M6IG1lbnRpb24geGRvdCB1dGlsaXR5IHRvIHZpZXcgLmRvdCBmaWxlcyBkaXJlY3RseQotCi0yMDE1LTEwLTE2IDEyOjAwOjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dHJhY2UuYzoKLQkgIGFsbG9jdHJhY2U6IHNob3cgZGV0YWlscyBvZiBldmVudHMgYW5kIG1lc3NhZ2VzIGxlYWtlZAotCSAgU28gaXQncyBjbGVhcmVyIHdoYXQgbGVha2VkLgotCi0yMDE1LTEwLTE2IDExOjU0OjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1tZXRhZGF0YS54bWw6Ci0JICBkb2NzOiBtYW51YWw6IGltcHJvdmUgYWR2YW5jZWQgbWV0YWRhdGEgZXhhbXBsZSBhIGJpdAotCSAgQWNjZXB0IGJvdGggZmlsZW5hbWUgYW5kIGEgVVJJIGFzIGFyZ3VtZW50LCBhbmQgcHJpbnQKLQkgIHRoZSBlcnJvciBmcm9tIHRoZSBlcnJvciBtZXNzYWdlIGlmIHRoZXJlJ3MgYW4gZXJyb3IuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2NjMwCi0KLTIwMTUtMTAtMTUgMTk6MDU6MjEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiBmaXggdHlwbyBpbiBkb2N1bWVudGF0aW9uCi0JICBJdCBzaG91bGQgYmUgMS4yIHVubGVzcyB0aGlzIGlzIGEgZmxhZyBmcm9tIHRoZSBmdXR1cmUKLQotMjAxNS0wOS0xNSAxODowODoxOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBBY2NlcHQgU1RSRUFNX1NUQVJUIGFmdGVyIEVPUwotCSAgSW4gdGhlIHNhbWUgd2F5IGNvcmUgbm93IGFsbG93cyBTVFJFQU1fU1RBUlQgdG8gcmVtb3ZlIHRoZSBmbHVzaGluZwotCSAgc3RhdGUgZnJvbSBwYWRzLCB3ZSBuZWVkIHRvIGRvIHRoZSBzYW1lIHRoaW5nIGluIG11bHRpcXVldWUKLQotMjAxNS0xMC0xNCAxMTowMzoyMiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IENvbnZlcnQgZnVuY3Rpb24gdG8gbWFjcm8gaW4gdW5pdCB0ZXN0IHRvIGdldCBwcm9wZXIgbGluZSBudW1iZXJzIG9uIGZhaWx1cmVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4MzE2Ci0KLTIwMTUtMTAtMTIgMTc6Mjk6MjYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IFVwZGF0ZSBpbnRlcm5hbCBwb3NpdGlvbiBldmVuIGlmIG5vdCBsaW5rZWQKLQkgIE91ciBjdXJyZW50IHBvc2l0aW9uIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggYmVpbmcgbGlua2VkIG9yIG5vdC4KLQkgIEF2b2lkcyBoYXZpbmcgc3RyYXkgc2VnbWVudCB1cGRhdGVzIGZpcmVkIGV2ZXJ5IDJzCi0KLTIwMTUtMTAtMDcgMjI6NTU6NDQgKzAxMDAgIEZsb3JpbiBBcG9zdG9sIDxmbG9yaW4uYXBvc3RvbEBvcmVnYW4ubmV0PgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGZpeCBtZW1vcnkgbGVhayB3aGVuIHNlbmRpbmcgZXZlbnRzIHRvIGFuIEVPUyBwYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTYyMDgKLQotMjAxNS0xMC0wNyAxMjowMToxNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy90cmFjZXJzL01ha2VmaWxlLmFtOgotCSAgdHJhY2VyczogT25seSBsaW5rIGFnYWluc3QgbGliZ3N0cHJpbnRmLmxhIGlmIHRoZSBkZWJ1Z2dpbmcgc3lzdGVtIGlzIGVuYWJsZWQKLQkgIEl0IGRvZXMgbm90IGV4aXN0IG90aGVyd2lzZSBhbmQgbGlua2luZyB3aWxsIGZhaWwuCi0KLTIwMTUtMTAtMDcgMTE6MjU6NTIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LXB0cC1oZWxwZXIuYzoKLQkgIGdzdC1wdHAtaGVscGVyOiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPiB0byBmaXggbmV0L2lmLmggaW5jbHVkZSBvbiBPU1ggMTAuNgotCSAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGdzdC1wdHAtaGVscGVyLmM6NDA6MDoKLQkgIC91c3IvaW5jbHVkZS9uZXQvaWYuaDoyNjU6MTk6IGVycm9yOiBmaWVsZCAnaWZydV9hZGRyJyBoYXMgaW5jb21wbGV0ZSB0eXBlCi0JICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9hZGRyOwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjEzNgotCi0yMDE1LTEwLTA3IDEyOjIyOjM0ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0dHJhY2Vycy5jOgotCSAgUmV2ZXJ0ICJ0cmFjZXJzOiBPbmx5IGJ1aWxkIGdldHJ1c2FnZSgpIHRyYWNlciBpZiBSVVNBR0VfVEhSRUFEIGlzIGF2YWlsYWJsZSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOGRkYmY3NjYyNmE0ODQyMDMwNjg2OWRiMWQxNzFmODU0Y2MyNTMxMC4KLQotMjAxNS0xMC0wNyAxMjoyMTo1NiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy90cmFjZXJzL2dzdHJ1c2FnZS5jOgotCSAgdHJhY2Vycy9ydXNhZ2U6IGlmZGVmIHRoZSBSVVNBR0VfVEhSRUFEIHVzYWdlCi0JICBTb21lIHZlcnNpb25zIG9mIGFuZG9pZCBkb24ndCBzZWVtIHRvIGhhdmUgaXQuCi0KLTIwMTUtMTAtMDcgMTE6MTE6MzAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3R0cmFjZXJzLmM6Ci0JICB0cmFjZXJzOiBPbmx5IGJ1aWxkIGdldHJ1c2FnZSgpIHRyYWNlciBpZiBSVVNBR0VfVEhSRUFEIGlzIGF2YWlsYWJsZQotCi0yMDE1LTEwLTA2IDIxOjQ2OjU1ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiByZW1vdmUgZ3N0X3RyYWNlcl9xdWFya19pZF9nZXRfdHlwZQotCSAgUmV2ZXJ0IGFkZGl0aW9uIGZyb20gNzc3YmJlZWE2MDUwNTFhZTNkMmZhN2UwMmFkODU4OTAwMWU3OGNlMC4KLQotMjAxNS0xMC0wNiAxODo1MjozOCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmg6Ci0JICB0cmFjZXI6IG1vdmUgcHJvdG90eXBlIHRvIHRoZSByaWdodCBoZWFkZXIKLQkgIEZpeGVzIHRoZSBidWlsZCB3aGVuIHRoZSB0cmFjaW5nIHN1YnN5c3RlbSBpcyBkaXNhYmxlZC4KLQotMjAxNS0xMC0wNiAxODo0OTo0NiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmg6Ci0JICB0cmFjZXI6IG1hcmsgR3N0VHJhY2VyUXVhcmtJZCBhcyBub24gR0VudW0KLQkgIFRoaXMgcmV2ZXJ0cyA3MmNhMDJiMWRlNDA2NmVlYWUzNWM4OTFlMjc1Mzg2NzcwMTE3Nzc4IGFuZCBtYXJrcyB0aGUgZW51bQotCSAgYWNjb3JkaW5nbHkuCi0KLTIwMTUtMTAtMDYgMTg6NDY6MjQgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3R0cmFjZXJzLmM6Ci0JICB0cmFjZXJzOiBkaXNhYmxlIHRoZSBsb2cgdHJhY2VyIGlmIGRlYnVnIGxvZ2dpbmcgaXMgZGlzYWJsZWQKLQotMjAxNS0xMC0wNiAxODo0NTo0MSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy90cmFjZXJzL01ha2VmaWxlLmFtOgotCSAgbWFrZWZpbGUuYW06IFJlbW92ZSBvYnNvbGV0ZSBBbmRyb2lkIGJ1aWxkIGNydWZ0Ci0JICBUaGlzIGlzIG5vdCBuZWVkZWQgYW55IGxvbmdlci4KLQotMjAxNS0xMC0wNiAxNDowMTowMyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmg6Ci0JICB0cmFjZXI6IGZpeCB0aGUgYnVpbGQgd2l0aCBkZWJ1ZyAodHJhY2VyKSBkaXNhYmxlZAotCSAgU3luYyB0aGUgbWFjcm8gZGVmaW5pdGlvbnMuIFRoZSBkdW1teSBkZWZpbmVzIGhhcyBhcmd1bWVudCBtaXNtYXRjaGVzLgotCi0yMDE1LTEwLTA2IDExOjM5OjMzICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuaDoKLQkgIHRyYWNlcjogZml4IHRoZSBidWlsZCB3aXRoIGRlYnVnICh0cmFjZXIpIGRpc2FibGVkCi0JICBSZW1vdmUgY29tbWFzIGF0IHRoZSBlbmQgb2YgdGhlIG1hY3Jvcy4KLQotMjAxNS0wOS0wMSAxNjozOTozMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkgIHRyYWNlcnM6IHN0YXRzOiBhZGQgbWVzc2FnZSBzdHJ1Y3R1cmUgdG8gb3V0cHV0Ci0JICBUaGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBpcyBub3QgZW5vdWdoLiBGb3IgZXhhbXBsZSwgc3RhdGUtY2hhbmdlCi0JICBpcyBub3QgZW5vdWdoIHRvIGtub3cgdGhlIHRyYW5zaXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0NDk2Ci0KLTIwMTUtMTAtMDUgMTk6MDU6NTggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBhZGRpbmcgdHJhY2VyIHF1YXJrIGlkIHRvIGdzdCBpbml0IGFuZCBkZWluaXQKLQkgIEZpeGVzIGlzc3VlcyBhdCBtYWtlIGNoZWNrCi0KLTIwMTUtMTAtMDUgMTg6NTA6NDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogbGliZ3N0cmVhbWVyOiBhZGQgdHJhY2VyIGZ1bmN0aW9ucwotCi0yMDE1LTEwLTA1IDIxOjI5OjQ5ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JICB0ZXN0czogZml4IHRoZSB0YWcgdGVzdAotCSAgVGhlIHByZXZpb3VzIGNoYW5nZSAoc2VlIGJnbyAjNzU2MDY5KSB3YXMgY2F1c2luZyB1cyB0byBmcmVlIHRoZSBzYW1lIHBvaW50ZXIKLQkgIG11bHRpcGxlIHRpbWVzLiBJZiB3ZSBhY3R1YWxseSBnZXQgYSBzYW1wbGUgYmFjaywgdGhlIHRlc3QgZmFpbHMsIG5vIG5lZWQgdG8KLQkgIGZyZWUgYW55dGhpbmcgaW4gdGhhdCBjYXNlLgotCi0yMDE1LTA2LTA0IDAxOjUwOjM0ICswMjAwICBNYXJjaW4gS29sbnkgPG1hcmNpbi5rb2xueUBmbHl0cm9uaWMucGw+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRyYWNpbmcudHh0OgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuaDoKLQkgIHRyYWNlcjogYWRkIG1pc3NpbmcgaG9va3MKLQkgIEFkZCBmb2xsb3dpbmcgaG9va3M6IGVsZW1lbnQtbmV3LCBlbGVtZW50LWFkZC1wYWQsIGVsZW1lbnQtcmVtb3ZlLXBhZCwKLQkgIGJpbi1hZGQtcHJlLCBiaW4tYWRkLXBvc3QsIGJpbi1yZW1vdmUtcHJlLCBiaW4tcmVtb3ZlLXBvc3QsIHBhZC1saW5rLXByZSwKLQkgIHBhZC1saW5rLXBvc3QsIHBhZC11bmxpbmstcHJlLCBwYWQtdW5saW5rLXBvc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzMTg3Ci0KLTIwMTUtMDMtMTMgMTg6MzE6NDAgKzAwMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JICB0cmFjZXI6IGdzdHN0YXRzOiBhZGQgdGhyZWFkLWlkIHRvIGxvZyBsaW5lCi0KLTIwMTUtMDMtMTMgMTM6MTA6NDIgKzAwMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgdHJhY2VyOiBhZGQgcGFkIHF1ZXJ5IGhvb2tzCi0KLTIwMTUtMDEtMTUgMDY6MzI6NDggKzAxMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLQotCSogZ3N0L2dzdHRyYWNlci5jOgotCSAgdHJhY2VyOiBzdHJkdXAgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLgotCi0yMDE1LTAxLTEzIDIyOjExOjM0ICswMTAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkgIHRyYWNlcjogVXNlIEdTVF9USU1FX0FSR1Mgd2hlbiBwcmludGluZyB3aXRoIEdTVF9USU1FX0ZPUk1BVC4KLQotMjAxNC0xMC0xNiAxMDo0MjowNSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtdHJhY2luZy50eHQ6Ci0JICB0cmFjaW5nOiB1cGRhdGUgZG9jcwotCi0yMDE0LTEwLTAyIDE5OjUyOjAzICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgc3RhdHM6IFRJTUVTVEFNUCAtPiBQVFMKLQotMjAxNC0wOS0yMiAwOTo1NTo1NiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bG9nLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkgIHRyYWNpbmc6IHJlbmFtZSB0aGUgZ2xvYmFsIGFwaSB0byBnc3RfdHJhY2luZwotCSAgVGhpcyBtYWtlcyBpdCBtb3JlIG9idmlvdXMgd2hhdCBpcyB0aGUgYXBpIGZvciB0cmFjZXIgZWxlbWVudHMgYW5kIHdoYXQgaXMgYXBpCi0JICBmb3IgdGhlIGdsb2JhbCBzdGF0ZS4KLQotMjAxNC0wOS0xOCAwODoyODo0OCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LXN0YXRzLmM6Ci0JICBzdGF0czogZml4IGNwdSBzdGF0cyBwcmludGluZwotCSAgT25seSBwcmludCB0aGVtIGlmIHdlIGhhdmUgdGhlbS4gQWxzbyBzY2FsZSB0aGVtIGJ5IDEwLjAgYXMgdGhlIGFyZSBpbgotCSAgcGVyLW1pbGxlIG5vdy4KLQotMjAxNC0wOS0xOCAwODoyNjoxOSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bG9nLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkgIHRyYWNlcnM6IGVsaW1pbmF0ZSB2YXJfYXJncwotCSAgUmVnaXN0ZXIgdHJhY2VyIGhvb2tzIGFzIEdDYWxsYmFjay4gVXNlIG1hY3JvcyBmb3IgaG9vayBkaXNwYXRjaCBhbmQgY2FzdCB0aGUKLQkgIGhvb2sgZnVuY3Rpb25zIGJhY2sgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUuCi0KLTIwMTQtMDktMTcgMDk6NDE6NDYgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgc3RhdHM6IGRvbid0IHdhcm4gb24gIi5jbGFzcyIgbG9nIGxpbmVzCi0KLTIwMTQtMDktMTcgMDg6Mzg6MDIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmg6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5oOgotCSAgdHJhY2VyczogY29kZSBjbGVhbnVwcwotCSAgTW92ZSBzdGF0aWMgdmFyaWFibGVzIHRvIGluc3RhbmNlIHZhcmlhYmxlcy4gQWRkIGZpbmFsaXplIG1ldGhvZHMuIFJlbW92ZSBjb2RlCi0JICB0aGF0IGlzIGNvbW1lbnRlZCBvdXQuIENsZWFudXAgbG9ja2luZyBjb2RlLgotCi0yMDE0LTA5LTE1IDIyOjI3OjExICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dHJhY2VyLmg6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuYzoKLQkqIGdzdC9nc3R0cmFjZXJ1dGlscy5oOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxhdGVuY3kuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgdHJhY2VyOiB1c2UgR1F1YXJrIG9yIHN0cmluZ3MgZm9yIHRoZSBob29rIGlkCi0JICBUaGlzIHdheSBvbmUgY2FuIGRlZmluZSBuZXcgdHJhY2luZyBwcm9iZXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgY29yZS4gV2UgYXJlCi0JICB1c2luZyBvdXIgb3duIHF1YXJrIHRhYmxlLCBhcyAxKSB3ZSBvbmx5IHdhbnQgdG8gaW5pdGlhbGl6ZSB0aGVtIGlmIHdlJ3JlCi0JICB0cmFjaW5nLCAyKSB3ZSB3YW50IHRvIHNoYXJlIHRoZW0gd2l0aCB0aGUgdHJhY2Vycy4KLQotMjAxNC0wOS0xNSAxMzoxNToxNyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bG9nLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuYzoKLQkgIHRyYWNlcjogc2ltcGxpZnkgaG9vayBhcGkKLQkgIEluc3RlYWQgb2YgYSBzaW5nbGUgaW52b2tlKCkgZnVuY3Rpb24gYW5kIGEgJ21hc2snLCByZWdpc3RlciB0byBpbmRpdmlkdWFsCi0JICBob29rcy4gVGhpcyBhdm9pZHMgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uIGFuZCBhbGxvd3MgdXMgdG8gcmVtb3ZlIHRoZQotCSAgaG9vayBlbnVtcy4gVGhlIG1lc3NhZ2UgZW5tcyBhcmUgbm93IHJlbmFtZWQgdG8gaG9vayBlbnVtcy4KLQotMjAxNC0wOS0xMiAxODo0Mzo1MiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGF0ZW5jeS5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxvZy5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHJ1c2FnZS5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JICB0cmFjZXI6IGRyb3AgdGhlIEhvb2tJZCBoaWQgZnJvbSB0aGUgaW52b2tlIG1ldGhvZAotCSAgVGhlIE1lc3NhZ2VJZCBpcyBtb3JlIGRldGFpbGVkIGFuZCBhbnl3YXkgbmVlZGVkIHRvIGludGVycHJldCB0aGUgdmFyYXJncy4KLQotMjAxNC0wOS0xMiAxMToxNzo0MSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JICBzdGF0czogZml4dXAgZG9jIG5hbWUgYW5kIHJlbW92ZSBjb21tZW50ZWQgY29kZQotCi0yMDE0LTA5LTEyIDA4OjQwOjAxICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGF0ZW5jeS5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHJ1c2FnZS5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JICB0cmFjZXJzOiBhZGQgbWV0YWRhdGEgZm9yIHRoZSBsb2dnZWQgdmFsdWVzCi0KLTIwMTQtMDktMTEgMTM6MDI6NTEgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkgIHJ1c2FnZTogaW1wcm92ZSBjcHUgbG9hZCBtZWFzc3VyZW1lbnRzCi0JICBHZXQgdGhlIG51bWJlciBvZiBjcHVzIGFuZCBzY2FsZSBwcm9jZXNzIGNwdS1sb2FkIGFjY29yZGluZ2x5LiBTd2l0Y2ggdGhlCi0JICBjcHVsb2FkIHRvIGJlIHBlci1taWxsZSB0byBnZXQgc21vb3RoZXIgZ3JhcGhzLiBBZGQgYSBiaXQgbW9yZSBsb2dnaW5nIGFuZCB1c2UKLQkgIHRoZSBfT0JKRUNUIHZhcmlhbnQuCi0KLTIwMTQtMDktMTEgMTM6MDA6NTkgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0cmFjZXIuYzoKLQkgIHRyYWNlcjogcmVtb3ZlIGNvbW1lbnRlZCBjb2RlCi0KLTIwMTQtMDktMTAgMDg6MzM6MzggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRyYWNpbmcudHh0OgotCSAgZGVzaWduOiB1cGRhdGUgdHJhY2VyIGRlc2lnbgotCSAgVXBkYXRlIHRoZSB0cmFjZXIgZXZlbnQgY2xhc3NlcyBzZWN0aW9uLiBBZGQgYSBwZXJmb3JtYW5jZSBzZWN0aW9uLgotCi0yMDE0LTA5LTEwIDA4OjMyOjE4ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dHJhY2VyLmM6Ci0JICB0cmFjZXI6IHVzZSBHU1RfUFRSX0ZPUk1BVCB0byBsb2cgdGhlIHN0cnVjdHVyZQotCSAgVGhpcyB3YXkgd2Ugb25seSBleHBhbmQgdGhlIHN0cnVjdHVyZSB3aGVuIHdlJ3JlIGxvZ2dpbmcuIFRoaXMgYWxsb3dzIHVzIHRvCi0JICBtZWFzc3VyZSB0aGUgcHVyZSB0cmFjaW5nIHNlcGVyYXRlbHkgZnJvbSB0aGUgbG9nZ2luZy4KLQkgIEFsc28gYWRkIHNvbWUgY29tbWVudHMgb24gZnVydGhlciBpbXByb3ZlbWVudHMuCi0KLTIwMTQtMDktMTAgMDc6NTU6MzMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgcnVzYWdlOiBpbXBsZW1lbnQgd2luZG93aW5nIG9mIGNwdWxvYWQKLQkgIEFkZCBhIGxvY2FsIGhlbHAgdG8gdGhlIHJ1c2FnZSBwbHVnaW4gdGhhdCBzdXBwb3J0cyB3aW5kb3dpbmcgb2YgdmFsdWVzLiBXZSB3YW50Ci0JICB0byBnZW5lcmFsaXplIHRoaXMgZm9yIHVzZSBpbiBvdGhlciBwbHVnaW5zLgotCi0yMDE0LTA5LTA0IDEwOjExOjUyICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmM6Ci0JKiB0b29scy9nc3Qtc3RhdHMuYzoKLQkgIHJ1c2FnZTogYW5ub3VuY2UgdGhlIGRhdGEgZm9ybWF0Ci0JICBSdXNhZ2Ugd2lsbCBub3cgYW5ub3VuY2Ugd2hhdCBpcyBtZWFzc3VyZXMgYW5kIGhvdyBpdCBpcyBsb2dnZWQuIFVzZSB0aGUgbmV3IGZvcm1hdCBpbiBzdGF0cy4KLQkgIENsZWFudXAgdGhlIHRoZSBjb2RlIGFuZCBuYW1pbmcuCi0KLTIwMTQtMDctMjggMjI6MDg6NDkgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgc3RhdHM6IGltcHJvdmUgY3B1IGxvYWQgbWVhc3N1cmVtZW50cwotCSAgUmVuYW1lIHZhcmlhYmxlcyBmb3IgY2xhcml0eS4gSGFuZGxlIHRoZSBpbml0aWFsIGRpc3Bhcml0eSBiZXR3ZWVuIGRlYnVnIHRpbWUKLQkgIGFuZCB0aGUgdGltZSBhbHJlYWR5IHNwZW50IGluIHRoZSBwcm9jIGFuZCBtYWluIHRocmVhZC4KLQotMjAxNC0wNy0xOCAwODowOTozMiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtdHJhY2luZy50eHQ6Ci0JICBkZXNpZ246IHVwZGF0ZSB0cmFjZXIgZGVzaWduCi0KLTIwMTQtMDctMjggMDg6NDk6MzggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JICBxdWFya3M6IHJldmVydCB0aGUgcXVhcmsgY2hhbmdlcywgd2Ugbm90IHVzaW5nIHRoZW0gYW55bW9yZQotCi0yMDE0LTA3LTE4IDA3OjQ5OjM4ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkqIGdzdC9nc3R0cmFjZXIuYzoKLQkqIGdzdC9nc3R0cmFjZXIuaDoKLQkqIGdzdC9nc3R0cmFjZXJmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0dHJhY2VyZmFjdG9yeS5oOgotCSogZ3N0L2dzdHRyYWNlcnV0aWxzLmM6Ci0JKiBnc3QvZ3N0dHJhY2VydXRpbHMuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5Lmg6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bG9nLmg6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmg6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuaDoKLQkgIHRyYWNlcjogc3BsaXQgaW50byB0cmFjZXIgYW5kIHRyYWNlcnV0aWxzCi0JICBLZWVwIHRyYWNlciBiYXNlIGNsYXNzIGluIHRyYWNlciBhbmQgbW92ZSBjb3JlIHN1cHBvcnQgaW50byB0aGUgdXRpbHMgbW9kdWxlLgotCSAgQWRkIGEgdW5zdGFibGUtYXBpIGd1YXJkIHRvIHRoZSB0cmFjZXIuaCBzbyB0aGF0IGV4dGVybmFsIG1vZHVsZXMgd291bGQgbmVlZCB0bwotCSAgYWNrbm93bGVkZ2UgdGhlIHN0YXR1cyBieSBzZXR0aW5nIEdTVF9VU0VfVU5TVEFCTEVfQVBJLgotCi0yMDE0LTA3LTE2IDE4OjQ4OjUyICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dHJhY2VyLmM6Ci0JKiBnc3QvZ3N0dHJhY2VyZmFjdG9yeS5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxhdGVuY3kuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgZG9jczogYWRkIGd0ay1kb2MgYmxvYnMKLQotMjAxNC0wMi0yMCAxMToxNToyMCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxhdGVuY3kuYzoKLQkgIGxhdGVuY3k6IHRha2Ugc3RvcCB0aW1lIHdoZW4gYnVmZmVyIGlzIGhhbmRsZWQKLQkgIE5vdyB3ZSBtZWFzc3VyZSB0aW1lIGZyb20gJ2JlZm9yZSBidWZmZXIgdHJhbnNmZXIgb24gc3JjJyB0byB3aGVuIHRoZSAnYnVmZmVyIGlzIHByb2Nlc3NlZCBvbiBzaW5rJy4KLQotMjAxNC0wNy0xNSAwOTo0OToyMyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxhdGVuY3kuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgdHJhY2VyczogYWRkIGEgbG9nZ2luZyBoZWxwZXIgdG8gcmVtb3ZlIGlkZW50aWNhbCBjb3BpZXMgZnJvbSB0aGUgdHJhY2VycwotCi0yMDE0LTAyLTE4IDE2OjE1OjQ0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bGF0ZW5jeS5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JICB0cmFjZXJzOiB0d2VhayB0aGUgZ2V0X3JlYWxfcGFkX3BhcmVudCgpCi0JICBCeSB1c2luZyB0aGUgd2UgZW5kZWQgdXAgb24gdGhlIGFjdHVhbCBlbGVtZW50LCBub3QgdGhlIHBhcmVudC4KLQotMjAxNC0wMi0xOCAxMTowNjoxMCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy90cmFjZXJzL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxhdGVuY3kuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5Lmg6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0dHJhY2Vycy5jOgotCSAgdHJhY2VyczogYWRkIGEgbmV3IGxhdGVuY3kgdHJhY2VyCi0JICBBZGQgYSBuZXcgdHJhY2VyIHdpdGggcHVzaGVzIGV4dHJhIGV2ZW50cyB0byBtZWFzc3VyZSBzcmMtdG8tc2luayBwcm9jZXNzaW5nIGxhdGVuY3kuCi0KLTIwMTQtMDItMTcgMTg6MzA6MjQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRyYWNpbmcudHh0OgotCSAgZGVzaWduOiB1cGRhdGUgZGVzaWduIGRvY3MKLQkgIEFkZCBuZXcgdHJhY2VyIGlkZWEuCi0KLTIwMTMtMTEtMjIgMTk6MTA6MDQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgZ3N0LXN0YXRzOiB1c2UgdGhlIHJ1c2FnZSBzdGF0cwotCSAgQWRkIGNwdWxvYWQgaW5mbyBmcm9tIHJ1c2FnZSB0cmFjZXMuCi0KLTIwMTMtMTEtMjAgMDg6MjI6NTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3R0cmFjZXJzLmM6Ci0JICBydXNhZ2U6IGFkZCBhIG5ldyBydXNhZ2UgdHJhY2VyCi0JICBUaGUgdHJhY2VyIGhvb2tzIHVwIHRvIGFsbCBwcm9iZXMgYW5kIGxvZ3MgcmVzb3VyY2UgdXNhZ2UgZmlndXJlcy4KLQotMjAxNC0wNy0xNSAxMDoyMDoyMiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LXN0YXRzLmM6Ci0JICBnc3Qtc3RhdHM6IGZpbHRlciBjb21wbGV0ZSB0aHJlYWQgc2VjdGlvbiBpZiB3ZSBoYXZlIG5vIHBhZHMKLQotMjAxMy0xMS0xOSAwODowNDozOCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JKiB0b29scy9nc3Qtc3RhdHMuYzoKLQkgIHN0YXRzOiBpbXByb3ZlIHRoZSBoYW5kbGluZyBvZiBwYXJlbnRhZ2UKLQkgIExvZyBuZXcgb2JqZWN0IGFmdGVyIHdlIGRpZCB0aGUgY2hlY2sgZm9yIHBhcmVudHMuCi0KLTIwMTMtMTEtMTcgMTE6Mzc6MTQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgc3RhdHM6IHByaW50IHRocmVhZCBrZXkgZm9yIHN0YXRzIGFuZCBmaWx0ZXIgZW1wdHkgcGFkLXNlY3Rpb25zCi0KLTIwMTMtMTEtMTcgMTE6MTU6MzYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgc3RhdHM6IHVwZGF0ZSBidWZmZXIgZmxhZ3MKLQkgIFJlbW92ZSBzb21lIGJ1ZmZlciBmbGFncyB0aGF0IHdlcmUgbGVmdG92ZXJzIGZyb20gMC4xMCBhbmQgaGFuZGxlIG5ldyAxLjAgYnVmZmVyCi0JICBmbGFncy4KLQotMjAxMy0xMS0wNCAyMDoxMTowOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuaDoKLQkqIHRvb2xzLy5naXRpZ25vcmU6Ci0JKiB0b29scy9NYWtlZmlsZS5hbToKLQkqIHRvb2xzL2dzdC1zdGF0cy5jOgotCSAgc3RhdHM6IGFkZCBhIHN0YXRzIGZyb250ZW5kCi0JICBQYXJzZSB0aGUgbG9nIGFuZCBjb2xsZWN0IGRhdGEgZnJvbSB0cmFjZXIgbWVzc2FnZXMuCi0KLTIwMTMtMTEtMTUgMDk6MzY6MjEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0cmFjZXIuaDoKLQkgIHRyYWNlcjogdXNlIHRoZSBzYW1lIHRpbWViYXNlIGFzIHRoZSBsb2dnaW5nCi0KLTIwMTQtMDctMTYgMDk6MjI6MzcgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRyYWNpbmcudHh0OgotCSAgZGVzaWduOiB1cGRhdGUgZGVzaWduCi0KLTIwMTQtMDctMTYgMDk6NDE6NDggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkgIGxvZzogYWRkIHF1ZXJ5IGxvZyBjYXRlZ29yeQotCi0yMDEzLTExLTAyIDE4OjI0OjU2ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dHJhY2VyLmM6Ci0JICB0cmFjZXI6IHBhcnNlIHBhcmFtZXRlcnMKLQotMjAxNC0wNy0xNiAwOToyMjoxNCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3R0cmFjZXIuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgdHJhY2VyOiBhZGQgbW9yZSBob29rcyBhbmQgaGFuZGxlIGl0IGluIHRoZSBwbHVnaW5zCi0KLTIwMTMtMTAtMzAgMDg6MTk6NDEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgc3RhdHM6IGhhbmRsZSBidWZmZXIgbGlzdHMKLQotMjAxMy0xMC0zMCAwODowNDoyNyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtdHJhY2luZy50eHQ6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0bG9nLmM6Ci0JICBsb2c6IG1ha2UgdGhlIGxvZyB0cmFjZXIgbW9yZSB2ZXJib3NlIGFnYWluCi0JICBEZWZpbmUgbG9nIGZvcm1hdHMgcGVyIG1lc3NhZ2UgdHlwZSBhbmQgcHJpbnQgZGV0YWlscy4KLQotMjAxMy0xMC0yOCAyMTo1OToxOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxvZy5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmM6Ci0JICB0cmFjZXI6IHVzZSBhIG1hY3JvcyBmb3IgdGhlIGVuYWJsZWQgY2hlY2sKLQkgIEF2b2lkIGEgZnVuY3Rpb24gY2FsbCBhbmQgY2hlY2sgdGhlIHZhcmlhYmxlcyBmcm9tIHRoZSBtYWNyby4KLQotMjAxMy0xMC0yOCAyMTozOTo1MiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtdHJhY2luZy50eHQ6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0dHJhY2VyLmM6Ci0JKiBnc3QvZ3N0dHJhY2VyLmg6Ci0JICB0cmFjZXI6IHVzZSBtYWNyb3MgZm9yIGhvb2tzCi0JICBXcmFwIHRoZSBob29rIHdpdGggYSBwcmUgYW5kIHBvc3QgbWFjcm8uIFRoaXMgbG9va3MgbGVzcyBpbnRydXNpdmUgdGhhbiB0aGUKLQkgIHByZXZpb3VzIHZlcnNpb24sIGFsdGhvdWdoIGl0IGlzIGEgbGl0dGxlIGxlc3Mgb3B0aW1pemVkLgotCi0yMDEzLTEwLTI4IDIxOjI4OjE4ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3R0cmFjZXIuYzoKLQkqIGdzdC9nc3R0cmFjZXIuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSAgdHJhY2VyOiBwYXNzIHRoZSB0aW1lc3RhbXAgZGlyZWN0bHkKLQkgIEF2b2lkIHRoZSBzdHJ1Y3R1cmUgbWFzaGFsbGluZyAoYW5kIHdlaXJkIGZpZWxkIG5hbWluZykuCi0KLTIwMTMtMTAtMjggMDg6MDg6MjAgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmg6Ci0JKiBwbHVnaW5zL3RyYWNlcnMvZ3N0dHJhY2Vycy5jOgotCSAgc3RhdHM6IGFkZCBhIHRyYWNlciB0aGF0IGNvbGxlY3RzIHBpcGVsaW5lIHN0YXRpc3RpY3MKLQkgIFRoaXMgaXMgbW9yZSBvciBsZXNzIGVxdWl2IHRvIHRoZSB0aGUgc3RhdGlzdGljcyBpbiBnc3QtdHJhY2VsaWIuCi0KLTIwMTMtMTAtMjggMDg6MDc6NTIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuaDoKLQkgIGxvZzogYWRkIGNhc3QgbWFjcm8KLQotMjAxMy0xMC0yNyAyMDo0MzoyNSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSogcGx1Z2lucy90cmFjZXJzL2dzdGxvZy5jOgotCSAgdHJhY2VyOiBwYXNzIHRoZSBpbnN0YW5jZSB0byB0aGUgdm1ldGhvZAotCi0yMDEzLTEwLTI3IDE3OjA1OjUyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC10cmFjaW5nLnR4dDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkgIGRlc2lnbjogbW9yZSBwbGFubmluZwotCi0yMDEzLTEwLTI3IDE3OjA0OjMyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHRyYWNlci5jOgotCSogZ3N0L2dzdHRyYWNlci5oOgotCSAgdHJhY2VyOiBzd2l0Y2ggdG8gcXVhcmtzIGFuZCBhZGQgYW5vdGhlciBob29rIGZvciBidWZmZXIgZmxvdwotCSAgVXNlIHByZS1kZWZpbmVzIHF1YXJrcyBhcyB0aGlzIHdpbGwgYmUgY2FsbGVkIHF1aXRlIG9mdGVuLgotCi0yMDEzLTEwLTI3IDEyOjQ1OjU0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC10cmFjaW5nLnR4dDoKLQkqIGdzdC9nc3R0cmFjZXIuYzoKLQkqIGdzdC9nc3R0cmFjZXIuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkgIHRyYWNlcjogYWRkIHRoZSBob29rLWlkIHRvIHRoZSBpbnZva2Ugc2lnbmF0dXJlCi0JICBUcmFjZXJzIHRoYXQgc3Vic2NyaWJlIHRvIG11bHRpcGxlIGhvb2tzIGNhbiBrbm93IHdoYXQgaG9vayB3YXMgdXNlZC4KLQotMjAxMy0xMC0yNiAyMjowNToxMyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGluc3BlY3Q6IGFkZCBzdXBwb3J0IGZvciB0aGUgbmV3IGZhY3RvcnkKLQkgIEhhbmRsZSB0cmFjZXIgbW9kdWxlcy4KLQotMjAxMy0xMC0yNCAxNDo0Nzo0OCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9kZXNpZ24vZHJhZnQtdHJhY2luZy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JKiBnc3QvZ3N0dHJhY2VyLmM6Ci0JKiBnc3QvZ3N0dHJhY2VyLmg6Ci0JKiBnc3QvZ3N0dHJhY2VyZmFjdG9yeS5jOgotCSogZ3N0L2dzdHRyYWNlcmZhY3RvcnkuaDoKLQkqIHBsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL3RyYWNlcnMvLmdpdGlnbm9yZToKLQkqIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYzoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuaDoKLQkqIHBsdWdpbnMvdHJhY2Vycy9nc3R0cmFjZXJzLmM6Ci0JICB0cmFjZXI6IGluaXRpYWwgcHJvdG90eXBlIGZvciB0aGUgdHJhY2luZyBzdWJzeXN0ZW0KLQotMjAxNS0xMC0wNSAxMToxMjo0NyArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdGVzdHMvZ3N0LWxhdW5jaDogRml4IHNhbXBsZSBtZW1vcnkgbGVhawotCSAgV2hlbiBzYW1wbGUgaXMgZ290IHVzaW5nIGdzdF90YWdfbGlzdF9nZXRfc2FtcGxlX2luZGV4LCBpdCBzaG91bGQKLQkgIGJlIGZyZWUnZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTYwNjkKLQotMjAxNS0xMC0wMiAyMjoxNzowNCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBVcGRhdGUgR0xpYiBkZXBlbmRlbmN5IHRvIDIuNDAuMAotCi0yMDE1LTA4LTIwIDE2OjIxOjU5ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1pbml0LnhtbDoKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LWNvbXBsZXRpb24taGVscGVyLmM6Ci0JKiBsaWJzL2dzdC9oZWxwZXJzL2dzdC1wdHAtaGVscGVyLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NhcHNuZWdvLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9wdHAvcHRwLXByaW50LXRpbWVzLmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6Ci0JICBnc3RyZWFtZXI6IEZpeCBtZW1vcnkgbGVha3Mgd2hlbiBjb250ZXh0IHBhcnNlIGZhaWxzCi0JICBXaGVuIGdfb3B0aW9uX2NvbnRleHRfcGFyc2UgZmFpbHMsIGNvbnRleHQgYW5kIGVycm9yIHZhcmlhYmxlcyBhcmUgbm90IGdldHRpbmcgZnJlZSdkCi0JICB3aGljaCByZXN1bHRzIGluIG1lbW9yeSBsZWFrcy4gRnJlZSdpbmcgdGhlIHNhbWUuCi0JICBBbmQgcmVwbGFjaW5nIGdfZXJyb3JfZnJlZSB3aXRoIGdfY2xlYXJfZXJyb3IsIHdoaWNoIGNoZWNrcyBpZiB0aGUgZXJyb3IgYmVpbmcgcGFzc2VkCi0JICBpcyBub3QgTlVMTCBhbmQgc2V0cyB0aGUgdmFyaWFibGUgdG8gTlVMTCBvbiBmcmVlJ2luZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM4NTEKLQotMjAxNS0wOS0yMyAyMzowMzoyOSArMDIwMCAgSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8amFuLnN0ZWZmZW5zQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jOgotCSAgdGltZWR2YWx1ZWNvbnRyb2xzb3VyY2U6IFVzZSBnX3NlcXVlbmNlX2xvb2t1cCB3aGVyZSBwb3NzaWJsZQotCSAgV2hlbiBsb29raW5nIGZvciBleGFjdCBtYXRjaGVzIGluIHRoZSBzZXF1ZW5jZSwgdGhpcyByZXN1bHRzCi0JICBpbiBtdWNoIHNpbXBsZXIgY29kZSB0aGFuIHdoZW4gdXNpbmcgZ19zZXF1ZW5jZV9zZWFyY2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NDk4Ci0KLTIwMTUtMTAtMDEgMjI6MDk6NTggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIGludGVycG9sYXRpb25jb250cm9sc291cmNlOiBmaXggd3JpdGUgb3ZlciB0aGUgYXJyYXkgc2l6ZQotCSAgVGhlICcrKycgZ290IGluY2lkZW50aWFsbHkgYWRkZWQgZHVyaW5nIHRoZSByZWZhY3RvcmluZyBpbgotCSAgMmZlMzkzOWNlN2VhODRjNDVkZDkyMmU3ZjEwOTdkZDA3ZjExZmM1ZC4KLQotMjAxNS0wOS0zMCAxNzoyOToxNiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfYXJtLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9ocHBhLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2Lmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGMzMi5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjNjQuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3NwYXJjLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF94ODZfNjQuaDoKLQkgIGNvbnRyb2xwb2ludDogY2hhbmdlIHRoZSBwYWRkaW5nIHRvIGJlIG9mIGFyY2gtaW5kZXBlbmRlbnQgc2l6ZQotCSAgVGhlIGRlZmF1bHQgcGFkZGluZyBJIGludHJvZHVjZWQgaW4gZDRmODFmYjRlNjJkMzRhNGMxZGFiYzY1YjIzZWRlN2NlNzY5NGM2MyBpcwotCSAgYWN0dWFsbHkgb25seSA0IHBvaW50ZXJzIGFuZCBvbiAzMmJpdCBwbGF0Zm9ybXMgYWxyZWFkeSBzbWFsbGVyIHRoYW4gdGhlIHVuaW9uLgotCSAgUmVwbGFjZSBpdCB3aXRoIGEgZml4ZWQgNjRieXRlIHBhZGRpbmcuIERvbid0IGFkZCB0aGUgbm9ybWFsIHBhZGRpbmcgZm9yIG5vdy4KLQkgIEZpeGVzICM3NTU4MjIKLQotMjAxNS0wOC0yMSAxNzo0Mjo1MiArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3RyZWFtZXItdW5pbnN0YWxsZWQ6IGFkZCBwYXRoIGZvciBPcGVuQ1YgaGFhciBjYXNjYWRlIGZpbGVzCi0JICBTb21lIE9wZW5DViBwbHVnaW5zIHVzZSBoYWFyIGNhc2NhZGUgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlCi0JICBHU3RyZWFtZXIgc291cmNlcy4gVG8gYmUgYWJsZSB0byB1c2UgdGhlc2UgZnJvbSB1bmluc3RhbGxlZCwgdGhleSBuZWVkCi0JICB0byBiZSBmb3VuZCB0aHJvdWdoIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgotCSAgQWRkaW5nIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgcG9pbnRpbmcgdG8gaGFhciBjYXNjYWRlIGZpbGVzIHRvCi0JICBnc3QtdW5pbnN0YWxsZWQuCi0KLTIwMTUtMDktMjggMTY6MDE6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBjaGVjazogZml4ICdmb3JtYXQgc3RyaW5nIGlzIG5vdCBhIHN0cmluZyBsaXRlcmFsJyB3YXJuaW5nIHdpdGggY2xhbmcKLQkgIEJyb2tlIHRoaXMgd2hlbiBJIHJlbW92ZWQgdGhlIEdfR05VQ19QUklOVEYgaW4gYSBwcmV2aW91cwotCSAgY29tbWl0IHRvIGZpeCBpbmRlbnRhdGlvbiwgc2luY2UgaXQgd2FzIG5vdCByZWFsbHkgbmVlZGVkLgotCSAgVHVybnMgb3V0IHVubGlrZSBnY2MgY2xhbmcgd2FybnMgdGhvdWdoIGlmIGEgbm9uLWxpdGVyYWwKLQkgIGZvcm1hdCBzdHJpbmcgaXMgcGFzc2VkIHRoZW4uIEZpeCBpbmRlbnRhdGlvbiBkaWZmZXJlbnRseS4KLQkgIGh0dHA6Ly9jbGFuZy5sbHZtLm9yZy9kb2NzL0F0dHJpYnV0ZVJlZmVyZW5jZS5odG1sI2Zvcm1hdC1nbnUtZm9ybWF0Ci0KLTIwMTUtMDktMjggMTY6NDU6NDcgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkgIHRlc3RzOiBmaXggdGhlIG1hbnVhbCB0ZXN0cyBieSBzZXR0aW5nIHRoZSByaWdodCBlbnYtdmFycwotCi0yMDE1LTA5LTI4IDE2OjIyOjM2ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmg6Ci0JICBkaXJlY3Rjb250cm9sYmluZGluZzogZml4IGZvcm1hdHRpbmcKLQotMjAxNS0wOS0yOCAxNjoyMTo1NSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RpbmRleC5oOgotCSAgaW5kZXg6IG1hcmsgdHdvIHN0cnVjdHMgdGhhdCBkb24ndCBoYXZlIGFiaSBwYWRkaW5nCi0KLTIwMTUtMDktMjggMTY6MTk6NDAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X2FybS5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaHBwYS5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaTM4Ni5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjMzIuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3BwYzY0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9zcGFyYy5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfeDg2XzY0Lmg6Ci0JICBjb250cm9sbGVyOiBhZGQgdGhlIG1pc3NpbmcgYWJpIHBhZGRpbmcKLQkgIFdoaWxlIHRoaXMgdGVjaG5pY2FsbHkgaXMgYW4gYWJpIGJyZWFrLCB3ZSBkZWNpZGVkIHRvIGRvIHRoaXM6Ci0JICAxKSB0aGUgc3RydWN0IGlzIGRvY3VtZW50ZWQgdG8gYmUgaW50ZXJuYWwKLQkgIDIpIHRoZSBzdHJ1Y3QgaXMgYWxsb2NlZCBhbmQgZnJlZWQgaW5zaWRlIHRoZSBsaWJyYXJ5Ci0JICAzKSB0aGVyZSBhcmUgbm8gcHVibGljIG1ldGhvZHMgdGhhdCByZWNlaXZlIG9yIHJldHVybiBpbnN0YW5jZXMKLQkgIDQpIHRoZSBvbmx5IGNvZGUga25vd24gdG8gdXNlIHRoaXMgc3RydWN0IGFyZSBjbGFzc2VzIGNvbnRhaW5kIGhlcmUKLQotMjAxNS0wOS0yNCAwMDowNDo0OCArMTAwMCAgTWF0dGhldyBXYXRlcnMgPG1hdHRoZXdAY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y29udGV4dC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBiaW46IGltcGxlbWVudCBjb250ZXh0IHByb3BhZ2F0aW9uIHdoZW4gYWRkaW5nIGVsZW1lbnRzCi0JICBXaGVuIGFkZGluZyBhbiBlbGVtZW50IHRvIGEgYmluIHdlIG5lZWQgdG8gcHJvcGFnYXRlIHRoZSBHc3RDb250ZXh0J3MKLQkgIHRvL2Zyb20gdGhlIGVsZW1lbnQuCi0JICBUaGlzIG1vdmVzIHRoZSBHc3RDb250ZXh0IGxpc3QgZnJvbSBHc3RCaW4gdG8gR3N0RWxlbWVudCBhbmQgYWRkcwotCSAgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGdldCB0aGUgY3VycmVudGx5IHNldCBsaXN0IG9mIEdzdENvbnRleHQncy4KLQkgIFRoaXMgZG9lcyBub3QgZGVhbCB3aXRoIHRoZSBjb2xsZWN0aW9uIG9mIEdzdENvbnRleHQncyBwcm9wYWdhdGVkCi0JICB1c2luZyBHU1RfQ09OVEVYVF9RVUVSWS4gIEVsZW1lbnQgc3ViY2xhc3NlcyBhcmUgYWR2aXNlZCB0byBjYWxsCi0JICBnc3RfZWxlbWVudF9zZXRfY29udGV4dCBpZiB0aGV5IG5lZWQgdG8gcHJvcGFnYXRlIEdzdENvbnRleHQncwotCSAgcmVjZWl2ZWQgZnJvbSB0aGUgY29udGV4dCBxdWVyeS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU1NzkKLQotMjAxNS0wOS0wNyAwOTozOTozMiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oOgotCSAgaW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2U6IGFkZCBjdWJpY19tb25vIGludGVycG9sYXRpb24KLQkgIFRoaXMgbmV3IG1vZGUgd29uJ3Qgb3ZlcnNob290IHRoZSBtaW4vbWF4IHkgdmFsdWVzIHNldCBieSB0aGUgY29udHJvbC1wb2ludHMuCi0JICBGaXhlcyAjNzU0Njc4Ci0JICBBUEk6IEdTVF9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUNfTU9OTwotCi0yMDE1LTA5LTA3IDA5OjM3OjA1ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JICBpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZTogcmVmYWN0b3IgY29kZQotCSAgRXh0cmFjdCBjb21tb24gY29kZSB0aGF0IGxvb2tzIHVwIHRoZSBjb250cm9sLXBvaW50cyBhcm91bmQgdGhlIHRpbWVzdGFtcC4gQWRkCi0JICBzb21lIGNvbW1lbnRzIGZvciBmdXR1cmUgaW52ZXN0aWdhdGlvbi4KLQotMjAxNS0wOS0wNCAxNjozODozNyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbGxlci1ncmFwaC5jOgotCSAgdGVzdHMvZXhhbXBsZXM6IGFkZCBhIGRlbW8gZm9yIHRoZSBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlIG1vZGVzCi0JICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBuZXcgbW9kZXMgdG8gYmUgYWRkZWQuIEluIHBhcnRpY3VsbGFyIGl0IGRlbW9uc3RyYXRlcwotCSAgaG93IHRoZSBjdWJpYyBzcGxpbmVzIG92ZXJzaG9vdCB0aGUgcmFuZ2UuCi0KLTIwMTUtMDktMDkgMTE6NTU6MjggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiByZW1vdmUgcHJveHlpbmcgb2YgYWNjZXB0LWNhcHMgZG93bnN0cmVhbQotCSAgVGhlIGRlc2lnbiBpcyB0byBvbmx5IGRvIGEgbG9jYWwgY2hlY2sKLQotMjAxNS0wOC0yNSAxOTozNzozMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGRvbid0IGZhbGxiYWNrIHRvIGNhcHMgcXVlcmllcyB3aXRoIHByb3h5IHBhZHMKLQkgIEEgcHJveHktcGFkIHNob3VsZCBhbHdheXMgcHJveHkgdGhlIGNhcHMgcmVsYXRlZCBxdWVyaWVzCi0JICBhbmQgZXZlbnRzIHRvIGl0cyBkb3duIG9yIHVwc3RyZWFtIHBlZXJzIG9uIHRoZSBvdGhlciBzaWRlCi0JICBvZiB0aGUgZWxlbWVudC4gRmFsbGluZyBiYWNrIHRvIGEgY2FwcyBxdWVyeSBzZWVtcyB3cm9uZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQxMTIKLQotMjAxNS0wOS0yNiAxMTowMzoyNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogbWlub3IgZG9jIGZpeGVzCi0KLTIwMTUtMDktMDIgMTc6NTg6MzggKzAzMDAgIFZpdmlhIE5pa29sYWlkb3UgPHZpdmlhQGFoaXJ1LmV1PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBzZWdtZW50OiBSZXBsYWNlZCBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiB3aXRoIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lCi0JICBnc3Rfc2VnbWVudF90b19wb3NpdGlvbiBtaWdodCBjYXVzZSBjb25mdXNpb24sIGVzcGVjaWFsbHkgd2l0aCB0aGUgYWRkaXRpb24gb2YKLQkgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWUgLiBEZXByZWNhdGVkIGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uCi0JICBub3csIGFuZCByZXBsYWNlZCBpdCB3aXRoIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lLgotCSAgQWxzbyBhZGRlZCB1bml0IHRlc3RzLgotCi0yMDE1LTA5LTAyIDE3OjM4OjI1ICswMzAwICBWaXZpYSBOaWtvbGFpZG91IDx2aXZpYUBhaGlydS5ldT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IEFkZGVkIHVuaXQgdGVzdHMgZm9yIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWUKLQotMjAxNS0wOS0yNSAxNTo1NzoxNiArMDMwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAdG9vbHNvbmFpci5jb20+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBzZWdtZW50OiBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZTogUmVuYW1lZCAncmVzdWx0JyB0byAnc3RyZWFtX3RpbWUnCi0JICBSZW5hbWVkIHRoZSAicmVzdWx0IiB2YXJpYWJsZSB0byAic3RyZWFtX3RpbWUiIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCi0KLTIwMTUtMDktMjUgMTU6NTY6NDUgKzAzMDAgIFZpdmlhIE5pa29sYWlkb3UgPHZpdmlhQHRvb2xzb25haXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHNlZ21lbnQ6IEFkZGVkIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWUoKQotCSAgZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZSgpIHdpbGwgY29udmVydCBzdHJlYW0gdGltZSBpbnRvIGEKLQkgIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IHNvIHRoYXQgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUoKSB3aXRoIHRoYXQKLQkgIHBvc2l0aW9uIHJldHVybnMgdGhlIHNhbWUgc3RyZWFtIHRpbWUuIEl0IHdpbGwgcmV0dXJuIC0xIGlmIHRoZSBzdHJlYW0gdGltZQotCSAgZ2l2ZW4gaXMgbm90IGluc2lkZSB0aGUgc2VnbWVudC4KLQotMjAxNS0wOS0wMiAxNjozNjozNSArMDMwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAYWhpcnUuZXU+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JICBzZWdtZW50OiBSZXdvcmRpbmcgb2Ygc3RydWN0IGZpZWxkIGRlc2NyaXB0aW9ucwotCSAgVGhlIG5ldyB3b3JkaW5nIG1ha2VzIGl0IGVhc2llciB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBlYWNoIGZpZWxkIG9mIHRoZQotCSAgR3N0U2VnbWVudCBzdHJ1Y3QgcmVwcmVzZW50cy4KLQotMjAxNS0wOC0zMSAxNTozNToxMSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudDogTWFrZSBzdXJlIHRoYXQgdGltZXN0YW1wICsgZGlmZiBpbiBRb1MgZXZlbnRzIGlzIG5ldmVyIHNtYWxsZXIgdGhhbiAwCi0JICBXaGVuIGEgcnVubmluZy10aW1lLW9mZnNldCBpcyBzdG9yZWQgaW4gdGhlIGV2ZW50LCBpdCBjb3VsZCBiZWNvbWUgc21hbGxlcgotCSAgdGhhbiAwIGFsdGhvdWdoIHRoZSBldmVudCBpcyBvdGhlcndpc2UgY29ycmVjdC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gcGFkCi0JICBvZmZzZXRzIGFyZSB1c2VkLgotCSAgVG8gcHJldmVudCB0aGlzLCB3ZSBzZXQgdGhlIHRpbWVzdGFtcCB0byAtZGlmZiwgc28gdGhhdCBpbiB0aGUgZW5kIHRoZSBzdW0gb2YKLQkgIGJvdGggaXMgZXhhY3RseSAwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDM1NgotCi0yMDE1LTA5LTE2IDIzOjQwOjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IEFkZCB0ZXN0IGZvciBjb3JyZWN0IGFic29sdXRlIFVSSSBoYW5kbGluZyBpbiBnc3RfdXJpX2Zyb21fc3RyaW5nX3dpdGhfYmFzZSgpCi0JICBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkksIHRoZSBiYXNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBhbmQKLQkgIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHNob3VsZCBiZSByZXR1cm5lZCBhZ2Fpbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUxMzQKLQotMjAxNS0wOS0yNSAyMzo1MTowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjYuMCA9PT0KLQotMjAxNS0wOS0yNSAyMzoxNDozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS42LjAKLQotMjAxNS0wOS0yNSAyMjo0MToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE1LTA5LTI1IDEwOjE4OjA3ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cGNsb2NrOiBGaXggZXJyb3IgbGVhayBkdXJpbmcgZmFpbHVyZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2MDcKLQotMjAxNS0wOS0yMSAxMzo1ODo1MSArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkgIGZ1bm5lbDogRml4IHJhY3kgc3RhdGUgY2hhbmdlCi0JICBJdGVyYXRvciBtYXkgbmVlZCB0byBiZSByZXN5bmNlZCwgZm9yIGluc3RhbmNlIGlmIHBhZHMgYXJlIHJlbGVhc2VkCi0JICBkdXJpbmcgc3RhdGUgY2hhbmdlLgotCSAgZ290X2VvcyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IHRoZSBvYmplY3QgbG9jayBvZiB0aGUgZWxlbWVudCwgbm90IG9mCi0JICB0aGUgcGFkLCBhcyBpcyB0aGUgY2FzZSB0aHJvdWdob3V0IHRoZSByZXN0IG9mIHRoZSBmdW5uZWwgY29kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUzNDMKLQotMjAxNS0wOS0yMSAxNToyMjoxOSArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBiaW46IGVsZW1lbnQ6IElnbm9yZSBhY3RpdmF0ZSByZXN1bHQgZm9yIHJlbW92ZWQgcGFkcyBvbiBzdGF0ZSBjaGFuZ2UKLQkgIFRoaXMgZml4ZXMgYSByYWNlIHdoZXJlIGEgc3RhdGUgY2hhbmdlIG1heSByZXR1cm4gZmFpbHVyZSBpZiBpdCBoYXMKLQkgIHJlcXVlc3QgcGFkcyB0aGF0IGFyZSBkZWFjdGl2YXRlZCBhbmQgcmVtb3ZlZCAoYW5kIHRodXMgaGF2ZSBubwotCSAgcGFyZW50KSBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBlbGVtZW50IGNoYW5nZXMgc3RhdGUgYW5kIChkZSlhY3RpdmF0ZXMKLQkgIGl0cyBwYWRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTM0MgotCi0yMDE1LTA5LTI0IDEwOjIzOjE0ICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogZG9uJ3QgY3Jhc2ggd2hlbiBhZGRpbmcgYSBzaW5rLWhhcm5lc3Mgd2l0aG91dCBoLT5zaW5rcGFkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NTExCi0KLTIwMTUtMDktMjMgMjA6MzE6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogUHJpbnQgYnVmZmVyIFBUUyB3aGVuIHN1Ym1pdHRpbmcgYW4gaW5wdXQgYnVmZmVyCi0KLTIwMTUtMDktMjEgMTQ6NTg6NDYgKzA5MDAgIEV1bmhhZSBDaG9pIDxldW5oYWUxLmNob2lAc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogRml4IGJ1ZmZlciBsZWFrIGluIHN5bmNfc3RyZWFtcyAmIGNhY2hlX2J1ZmZlcnMgbW9kZQotCSAgQWZ0ZXIgZG9pbmcgZ3N0X3BhZF9wdXNoKCkgaW4gY2FzZSBvZiBzeW5jX3N0cmVhbXMgYW5kIGNhY2hlX2J1ZmZlcnMsCi0JICBpZiB0aGUgYnVmZmVyIGNhbiBub3QgYmUga2VwdCBpbiBjYWNoZSwgaXQgc2hvdWxkIGJlIHVucmVmZmVkIHRvIGF2b2lkCi0JICBtZW1vcnkgbGVhY2thZ2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MTQxCi0KLTIwMTUtMDktMTkgMTY6NTc6MjYgKzA1MzAgIFZpa3JhbSBGdWdybyA8dmlrcmFtLmZ1Z3JvQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIGdzdDogRG9jdW1lbnRhdGlvbiB0eXBvIGZpeCBpbiBjYXBzICYgcGFkIEFQSXMKLQkgIGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QoKSAmIEdTVF9QQURfSVNfQUNDRVBUX0lOVEVSU0VDVCgpCi0JICBkb2N1bWVudGF0aW9uIHR5cG8gZml4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTI1NwotCi09PT0gcmVsZWFzZSAxLjUuOTEgPT09Ci0KLTIwMTUtMDktMTggMTk6MDc6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuNS45MQotCi0yMDE1LTA5LTE4IDE5OjA3OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTUtMDktMTggMTE6NDk6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL3poX0NOLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNS0wOS0xNSAxMDo1Njo0MCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZG93bmxvYWRidWZmZXIuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0YnVmZmVyc3RyZXNzLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGNsb2Nrc3RyZXNzLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYzoKLQkgIGRvd25sb2FkYnVmZmVyLCBiZW5jaG1hcmtzOiBmaXggZXJyb3IgbGVha3MgaW4gZmFpbHVyZSBjb2RlIHBhdGhzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MDE5Ci0KLTIwMTUtMDktMTUgMTA6NTI6NTUgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBjaGVjazogRml4IGluZGVudGF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MDE5Ci0KLTIwMTUtMDktMTUgMTg6MDU6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBzcHJpbmtsZSBzb21lIGFsbG93LW5vbmUgYW5kIG91dCBhbm5vdGF0aW9ucyBmb3IgZy1pCi0KLTIwMTUtMDktMTQgMTE6MDE6MTEgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogZml4IHR5cG8gaW4gbG9nIG1lc3NhZ2Ugd2hlbiB0aHJlYWRwb29sIGFsbG9jIGZhaWxzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0OTc1Ci0KLTIwMTUtMDktMTEgMTc6NTg6NDggKzAzMDAgIElnb3IgUm9uZGFyZXYgPGlnb3Iucm9uZGFyZXZAZ21haWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBjb25maWd1cmU6IENoZWNrIGZvciBzb2NrZXRwYWlyKCkgaW4gLWxzb2NrZXQgdG9vCi0JICBPbiBlLmcuIFFOWCBpdCBpcyBpbiBhbiBleHRlcm5hbCBsaWJyYXJ5LCBub3QgbGliYy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ4NzUKLQotMjAxNS0wOS0wOSAxMzoxMDowNCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Z2l0QGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBSZXZlcnQgImRvY3M6IE1ha2Ugc3VyZSBnc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhKCkgaXMgZG9jdW1lbnRlZCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMGRmZmViMDMwMThkMTJiZTUyMmMyZDk3YWFhZjgxMDIxNTNiZDdjMC4KLQkgIFRoZSBjb21taXQgaXMgZXJyb25lb3VzIGFuZCBkb2N1bWVudHMgdGhlIGZ1bmN0aW9uIHR3aWNlLgotCi0yMDE1LTA3LTIzIDEyOjE4OjUxICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IE1ha2Ugc3VyZSBnc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhKCkgaXMgZG9jdW1lbnRlZAotCSAgVGhhbmtzIHRvIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4gZm9yIHBvaW50aW5nIHRoaXMKLQkgIG91dC4KLQotMjAxNS0wOC0wNSAxMDowNzo1MCArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogRml4IHJhY2UgZm9yIGdzdF9oYXJuZXNzX2VsZW1lbnRfcmVmCi0JICBJbiBvcmRlciBmb3IgZ3N0X2hhcm5lc3NfbmV3X2Z1bGwgdG8gYmUgTVQtc2FmZSB0aGUgaW5jcmVhc2UgYW5kCi0JICBkZWNyZWFzZSBvZiBIQVJORVNTX1JFRiBtdXN0IGJlIE1ULXNhZmUuIFRoaXMgYWxsb3dzIGZvciBjcmVhdGluZwotCSAgbXVsdGlwbGUgaGFybmVzc2VzIGZyb20gZGlmZmVyZW50IHRocmVhZHMgd3JhcHBpbmcgdGhlIHNhbWUgZWxlbWVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ2NjEKLQotMjAxNS0wOC0wNSAwOTo1OTozOSArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkgIGhhcm5lc3M6IEFsbG93LW5vbmUgZm9yIGN1c3RvbSBzdHJlc3MgaW5pdCBmdW5jCi0JICBJdCBzaG91bGQgYmUgYWxsb3dlZCB0byBub3QgaGF2ZSBhIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIHVzZXIgZGF0YQotCSAgc2luY2UgaXQncyBvZnRlbiBub3QgbmVjZXNzYXJ5OyBpdCBtYXkgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ2NjEKLQotMjAxNS0wOS0wNiAwOTo1ODowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHM6Ci0JICBkb2NzOiByZW1vdmUgc2lnbmFsIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cyBmcm9tIGRvY3MKLQotMjAxNS0wOS0wNSAxMToyMDo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSBmb3IgdHJhbnNsYXRlZCBzdHJpbmcgY2hhbmdlcwotCi0yMDE1LTA5LTA1IDExOjE4OjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICB0b29sczogZ3N0LWxhdW5jaDogZml4IC0tZXhjbHVkZSBjb21tYW5kIGxpbmUgb3B0aW9uCi0JICBUaGlzIGhhcyBub3Qgd29ya2VkIChhcyBpbjogY3Jhc2hlZCkgc2luY2UgMjAwNSwgc28KLQkgIHBlcmhhcHMgaXQgc2hvdWxkIGp1c3QgYmUgcmVtb3ZlZCBpbnN0ZWFkLgotCi0yMDE1LTA4LTMxIDEyOjA3OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgUmV2ZXJ0ICJxdWV1ZTI6IFByb2Nlc3MgU0VFS0lORyBxdWVyeSIKLQkgIFRoaXMgY2F1c2VkIHByb2JsZW1zIHdpdGggb2dnZGVtdXggd2hlbiBxdWV1ZTIgd2FzCi0JICBvcGVyYXRpbmcgaW4gcXVldWUgbW9kZSBhbmQgdGhlIHNvdXBodHRwc3JjIHVwc3RyZWFtCi0JICBpcyBub3Qgc2Vla2FibGUgYmVjYXVzZSB0aGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydAotCSAgcmFuZ2UgcmVxdWVzdHMuIEl0IHdvdWxkIHRoZW4gc3RpbGwgY2xhaW0gc2Vla2FiaWxpdHkKLQkgIGFuZCB0aGVuIHRoaW5ncyBnbyB3cm9uZyBmcm9tIHRoZXJlLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA3YjBiOTNkYWZlNGFjNTQ3NTUyY2RiNjZhZGU1ZDhhYTA0MDVlN2I0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mzg4NwotCi0yMDE1LTA4LTI5IDIwOjE0OjQ0ICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkgIGhhcm5lc3M6IG1pc2MgYnVnZml4ZXMKLQkgIDEuIEdldCBhIGxpc3Qgb2YgcGFkIHRlbXBsYXRlcyBmcm9tIHRoZSBlbGVtZW50IGNsYXNzLCBub3QgdGhlCi0JICBmYWN0b3J5LiBUaGlzIGFsbG93cyB1cyB0byBpbnRlcmFjdCB3aXRoIHRlc3QtZWxlbWVudHMgdGhhdCBkb2VzCi0JICBub3QgaGF2ZSBhIGZhY3RvcnkuCi0JICAyLiBVc2UgdGhlIHBhZF90ZW1wbGF0ZV9jYXBzIGluIGNhcHMtcXVlcmllcyB3aGVuIGNhcHMgaXMgbm90IHNldAotCSAgZXhwbGljaXRseSBvbiB0aGUgcGFkLiBOb3QgZG9pbmcgc28gaXMgc2ltcGx5IHdyb25nLCBhbmQgcHJvaGliaXRzCi0JICBpbnRlcmFjdGlvbnMgd2l0aCBzcGVjaWFsIHRlbXBsYXRlcyB1c2VkIGZvciB0ZXN0aW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDE5MwotCi0yMDE1LTA4LTI2IDA5OjI5OjA1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSAgdGVzdHM6IGV2ZW50OiBmaXggYnVpbGQgZmFpbHVyZQotCSAgZ3N0L2dzdGV2ZW50LmM6MjUwOjU6IGVycm9yOiDigJhmb3LigJkgbG9vcCBpbml0aWFsIGRlY2xhcmF0aW9ucyBhcmUgb25seQotCSAgYWxsb3dlZCBpbiBDOTkgb3IgQzExIG1vZGUKLQotMjAxNS0wOC0yNCAyMTowNDozNyArMDMwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAdG9vbHNvbmFpci5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkgIGJpbjogTWFrZSBzdXJlIHdlIGRvbid0IGFkZC9yZW1vdmUgYSBiaW4gdG8vZnJvbSBpdHNlbGYKLQkgIERvaW5nIHNvIHdvdWxkIGRlYWRsb2NrIGZyb20gdHJ5aW5nIHRvIGFjcXVpcmUgdGhlIG9iamVjdCBsb2NrIHR3aWNlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0MDM2Ci0KLTIwMTUtMDgtMjEgMTQ6Mjg6NDggLTA3MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBSZWNvbmZpZ3VyZSBiZWZvcmUgcHJvcG9zZV9hbGxvY2F0aW9uCi0JICBUaGVyZSBleGlzdCBjYXNlcyB3aGVyZSBhIHJlY29uZmlndXJlIGV2ZW50IHdhcyBwcm9wYWdhdGVkIGZyb20KLQkgIGRvd25zdHJlYW0sIGJ1dCBjYXBzIGRpZG4ndCBjaGFuZ2UuIEluIHRoaXMgY2FzZSwgd2Ugd291bGQKLQkgIHJlY29uZmlndXJlIG9ubHkgd2hlbiB0aGUgbmV4dCBidWZmZXIgYXJyaXZlcy4gVGhlIHByb2JsZW0gaXMgdGhhdAotCSAgZHVlIHRvIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5IGJlaW5nIGNhY2hlZCwgdGhlIHJldHVybiBxdWVyeSBwYXJhbWV0ZXJzCi0JICBlbmR1cCBvdXRkYXRlZC4KLQkgIEluIHRoaXMgcGF0Y2ggd2UgcmVmYWN0b3IgdGhlIHJlY29uZmlndXJhdGluZyBjb2RlIGludG8gYSBmdW5jdGlvbiwgYW5kCi0JICBhbG9uZyB3aXRoIHJlY29uZmlndXJpbmcgd2hlbiBhIG5ldyBidWZmZXIgY29tZXMgaW4sIHdlIGFsc28gcmVjb25maWd1cmUKLQkgIHdoZW4gYSBxdWVyeSBhbGxvY2F0aW9uIGFycml2ZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzODUwCi0KLTIwMTUtMDgtMDcgMTU6Mzk6NTkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6Ci0JICBiYXNlc3JjLXRlc3Q6IEZpeCByYWNlIHRlc3Rpbmcgc2VnbWVudCB1cGRhdGUKLQkgIEFzIHRoaXMgdGVzdCBpcyB1c2luZyBhIHNob3J0IHNsZWVwIChHU1RfVVNFQ09ORCwgd2hpY2ggaXMgMTBtcwotCSAgaW4gbWljcm9zZWNvbmQpLCBzb21ldGltZXMgdGhhdCBFT1MgZXZlbnQgaXMgcmVjZWl2ZWQgYmVmb3JlIHRoZQotCSAgbG9vcCBpbiBiYXNlc3JjIGhhdmUgcnVuIF9kb19zZWVrKCkgYW5kIHB1c2hlZCB0aGUgdXBkYXRlIHNlZ21lbnQuCi0JICBUbyBzb2x2ZSB0aGlzIGlzc3VlLCB3ZSB3YWl0IGZvciB0aGUgaW5pdGlhbCBzZWdtZW50IChhbmQgZmx1c2ggaXQpCi0JICB0aGVuIHdlIHdhaXQgZm9yIHRoZSBzZWNvbmQgc2VnbWVudCBiZWZvcmUgc2VuZGluZyBFT1MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzMzY1Ci0KLTIwMTUtMDgtMTkgMTE6NDY6MDcgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBiaW46IEFkZCBOTEUgdG8gR1NUX1BMVUdJTl9QQVRICi0KLT09PSByZWxlYXNlIDEuNS45MCA9PT0KLQotMjAxNS0wOC0xOSAxMjo1MDo1NiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjUuOTAKLQotMjAxNS0wOC0xOSAxMjozMzo0MSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE1LTA4LTE5IDExOjE3OjI5ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby96aF9DTi5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTUtMDgtMTggMTU6NDQ6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGF2b2lkIHRhZyBsaXN0IHNwYW0gaWYgdXBzdHJlYW0gcHJvdmlkZXMgYml0cmF0ZSB0YWdzIGFscmVhZHkKLQkgIEV4cGxpY2l0bHkga2VlcCB0cmFjayBhZ2FpbiB3aGV0aGVyIHVwc3RyZWFtIHRhZ3Mgb3IgcGFyc2VyIHRhZ3MKLQkgIGFscmVhZHkgY29udGFpbiBiaXRyYXRlIGluZm9ybWF0aW9uLCBhbmQgb25seSBmb3JjZSBhIHRhZyB1cGRhdGUKLQkgIGZvciBhIGJpdHJhdGUgaWYgd2UgYXJlIGFjdHVhbGx5IGdvaW5nIHRvIGFkZCB0aGUgYml0cmF0ZSB0byB0aGUKLQkgIHRhZ2xpc3QgbGF0ZXIuIFRoaXMgZml4ZXMgY29uc3RhbnQgcmUtc2VuZGluZyBvZiB0aGUgc2FtZSB0YWdsaXN0LAotCSAgYmVjYXVzZSB1cHN0cmVhbSBwcm92aWRlZCBhIGJpdHJhdGUgYWxyZWFkeSBhbmQgd2UgZGlkbid0IGFkZCBpdCwKLQkgIHNvIHdlIGRpZG4ndCBzYXZlIHRoZSAncG9zdGVkJyBiaXRyYXRlLCB3aGljaCB3b3VsZCB0aGVuIGluIHR1cm4KLQkgIGFnYWluIHRyaWdnZXIgdGhlICdiaXRyYXRlIGhhcyBjaGFuZ2VkIHRvbyBtdWNoLCB1cGRhdGUgdGFncycKLQkgIGNvZGUgcGF0aC4gRml4ZXMgdGFnIHNwYW0gd2l0aCBtNGEgZmlsZXMgZm9yIGV4YW1wbGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5NzY4Ci0KLTIwMTUtMDgtMTcgMjI6MDY6MTEgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBkZWJ1Z3V0aWxzOiBicmluZyB0aGUgZG90IHN0eWxlIGEgYml0IGNsb3NlciB0byB3aGF0IHdlIHVzZSBpbiB0aGUgZG9jcwotCSAgVXNlIHJvdW5kIGNvcm5lcnMgZm9yIGJpbnMgYW5kIGVsZW1lbnRzLiBQdXQgc2luayBwYWRzIG9uIHRoZSBsZWZ0IGFuZCBzcmMgcGFkcwotCSAgb24gdGhlIHJpZ2h0IG9mIGVsZW1lbnRzLgotCi0yMDE1LTA4LTE1IDE4OjMwOjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggdGFnIGhhbmRsaW5nCi0JICBJbiAwLjEwIHRoZXJlIHdlcmUgbm8gc3RpY2t5IGV2ZW50cywgYW5kIGFsbCB0YWcgZXZlbnRzCi0JICBzZW50IHdvdWxkIGp1c3QgYmUgbWVyZ2VkIHdpdGggdGhlIHByZXZpb3VzbHktcmVjZWl2ZWQKLQkgIHRhZ3MuIEluIDEueCB3ZSBoYXZlIHN0aWNreSBldmVudHMsIGFuZCB0aGUgdGFncyBpbiB0aGUKLQkgIHRhZyBldmVudChzKSBzaG91bGQgYXQgYWxsIHRpbWVzIGNhcnJ5IHRoZSBjb21wbGV0ZSB0YWdzLAotCSAgc28gd2UgY2FuJ3QganVzdCBwdXNoIHNvbWUgdGFncyBhbmQgdGhlbiBqdXN0IHB1c2ggdGFncwotCSAgd2l0aCBqdXN0IGJpdHJhdGVzIHRvIHVwZGF0ZSB0aGUgYml0cmF0ZXMsIGV0Yy4KLQkgIEluc3RlYWQgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB1cHN0cmVhbSBzdHJlYW0gdGFncwotCSAgcmVjZWl2ZWQsIG9mIHRoZSB0YWdzIHNldCBieSB0aGUgdmlkZW8gZGVjb2RlciBzdWJjbGFzcywKLQkgIGFuZCBzZW5kIGFuIHVwZGF0ZWQgdGFnIGV2ZW50IHdpdGggdGhlIGNvbWJpbmVkIHRhZ3MKLQkgIGluY2x1ZGluZyBvdXIgb3duIGJpdHJhdGUgdGFncyAoaWYgYXBwbGljYWJsZSkgd2hlbmV2ZXIKLQkgIHRoZSB1cHN0cmVhbSB0YWdzLCB0aGUgc3ViY2xhc3MgdGFncyBvciBhbnkgb2Ygb3VyIGJpdHJhdGVzCi0JICBjaGFuZ2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5NzY4Ci0KLTIwMTUtMDgtMTYgMTA6MTU6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGJhc2VwYXJzZTogYWRkIEFQSSBmb3Igc3ViY2xhc3MgdG8gc2V0IHRhZ3MKLQkgIFRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgd2UgY2FuIGRvIHByb3BlciB0YWcgaGFuZGxpbmcKLQkgIGFsbCBhcm91bmQsIGFuZCBjb21iaW5lIHRoZSB1cHN0cmVhbSB0YWdzIHdpdGggdGhlCi0JICB0YWdzIHNldCBieSB0aGUgc3ViY2xhc3MgYW5kIGFueSBleHRyYSB0YWdzIHRoZQotCSAgYmFzZSBjbGFzcyBtYXkgd2FudCB0byBhZGQuCi0JICBBUEk6IGdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTc2OAotCi0yMDE1LTA4LTE1IDE2OjAxOjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzYXZlIHVwc3RyZWFtIHN0cmVhbSB0YWdzCi0JICBXZSdsbCBuZWVkIHRob3NlIGxhdGVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTc2OAotCi0yMDE1LTA4LTE1IDE2OjM5OjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBtaW5vciBjb2RlIHNpbXBsaWZpY2F0aW9uCi0JICBVc2UgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uKCkgYW5kIHJlbW92ZSBhIGZldwotCSAgdW5uZWNlc3NhcnkgbGV2ZWxzIG9mIGluZGVudGF0aW9uLiBSZXN0IG9mIGNvZGUgbWlnaHQKLQkgIGxvb2tzIGEgYml0IHF1ZXN0aW9uYWJsZSwgYnV0IGxlYXZlIGl0IGFzIGlzIGZvciBub3cuCi0KLTIwMTUtMDgtMTUgMTc6NTk6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogQnJlYWsgc3RpY2t5IGV2ZW50IGFycmF5IGl0ZXJhdGlvbnMgaWYgdGhlIHR5cGUgaXMgYmlnZ2VyIHRoYW4gdGhlIG9uZSB3ZSBsb29rIGZvcgotCSAgTWljcm9vcHRpbWl6YXRpb24gd2UgY2FuIGRvIGJlY2F1c2UgdGhlIGFycmF5IGlzIHNvcnRlZCBieSB0eXBlLgotCi0yMDE1LTA0LTI5IDE1OjQ5OjE3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBnc3RwYWQ6IEFkZCBhIG5ldyBHU1RfUFJPQkVfSEFORExFRCByZXR1cm4gdmFsdWUgZm9yIHByb2JlcwotCSAgSW4gc29tZSBjYXNlcywgcHJvYmVzIG1pZ2h0IHdhbnQgdG8gaGFuZGxlIHRoZSBidWZmZXIvZXZlbnQvcXVlcnkKLQkgIHRoZW1zZWx2ZXMgYW5kIHN0b3AgdGhlIGRhdGEgZnJvbSB0cmF2ZWxsaW5nIGZ1cnRoZXIgZG93bnN0cmVhbS4KLQkgIFdoaWxlIHRoaXMgd2FzIHNvbWV3aGF0IHBvc3NpYmxlIHdpdGggYnVmZmVyL2V2ZW50cyBhbmQgdXNpbmcKLQkgIEdTVF9QUk9CRV9EUk9QLCBpdCB3YXMgbm90IGFwcGxpY2FibGUgdG8gcXVlcmllcywgYW5kIHdvdWxkIHJlc3VsdAotCSAgaW4gdGhlIHF1ZXJ5IGZhaWxpbmcuCi0JICBXaXRoIHRoaXMgbmV3IEdTVF9QUk9CRV9IQU5ETEVEIHZhbHVlLCB0aGUgYnVmZmVyL2V2ZW50L3F1ZXJ5IHdpbGwKLQkgIGJlIGNvbnNpZGVyZWQgYXMgc3VjY2Vzc2Z1bGx5IGhhbmRsZWQsIHdpbGwgbm90IGJlIHB1c2hlZCBmdXJ0aGVyCi0JICBhbmQgdGhlIGFwcHJvcHJpYXRlIHJldHVybiB2YWx1ZSAoVFJVRSBvciBHU1RfRkxPV19PSykgd2lsbCBiZSByZXR1cm5lZAotCSAgVGhpcyBhbHNvIGFsbG93cyBwcm9iZXMgdG8gcmV0dXJuIGEgbm9uLWRlZmF1bHQgR3N0Rmxvd1JldHVybiB3aGVuIGRlYWxpbmcKLQkgIHdpdGggYnVmZmVyIHB1c2guIFRoaXMgY2FuIGJlIGRvbmUgYnkgc2V0dGluZyB0aGUKLQkgIEdTVF9QQURfUFJPQkVfSU5GT19GTE9XX1JFVFVSTigpIGZpZWxkIGFjY29yZGluZ2x5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4NjQzCi0KLTIwMTUtMDgtMTUgMTM6MjU6MzUgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLQotCSogZ3N0L2dzdHZlcnNpb24uaC5pbjoKLQkgIGdzdHZlcnNpb246IEFkZCBtaXNzaW5nIGluY2x1ZGUgaW4gLmluIGZpbGUuCi0KLTIwMTUtMDgtMTEgMDA6MzU6MjEgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLQotCSogZ3N0L2dsaWItY29tcGF0Lmg6Ci0JKiBnc3QvZ3N0YWxsb2NhdG9yLmg6Ci0JKiBnc3QvZ3N0YXRvbWljcXVldWUuaDoKLQkqIGdzdC9nc3RjYXBzZmVhdHVyZXMuaDoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogZ3N0L2dzdGNvbnRleHQuaDoKLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlci5oOgotCSogZ3N0L2dzdGVsZW1lbnRtZXRhZGF0YS5oOgotCSogZ3N0L2dzdG1hY3Jvcy5oOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuaDoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHRyYWNlLmg6Ci0JICBIZWFkZXJzOiBhZGQgbWlzc2luZyBpbmNsdWRlcy4KLQotMjAxNS0wOC0xNSAwNjo0MToxNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogYWRkIHRoZSBuZXcgcGFkIGFjY2VwdC10ZW1wbGF0ZSBmbGFnIHRvIHRoZSBkb2NzCi0KLTIwMTUtMDgtMTQgMjI6NDQ6NTAgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IHNlY3Rpb24gZW50cnkgbWlzc2luZyBmb3IgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlCi0KLTIwMTUtMDgtMTQgMDg6MTQ6NTIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdHM6IHBhZDogdGVzdHMgZm9yIGFjY2VwdC1jYXBzIGRlZmF1bHQgaGFuZGxpbmcKLQkgIENoZWNrIGlmIGFsbCB0aGUgZGVmYXVsdCA0IGFjY2VwdC1jYXBzIHBvc3NpYmlsaXRpZXMgYXJlIHdvcmtpbmc6Ci0JICBzdWJzZXQgb3IgaW50ZXJzZWN0IGNoZWNrIGFuZCBxdWVyeS1jYXBzIG9yIHRlbXBsYXRlIGNhcHMgY29tcGFyaXNvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzNjIzCi0KLTIwMTUtMDgtMTQgMDc6NTE6MDcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBhZGQgR1NUX1BBRF9GTEFHX0FDQ0VQVF9URU1QTEFURQotCSAgSXQgd2lsbCBtYWtlIHRoZSBkZWZhdWx0IGFjY2VwdC1jYXBzIGhhbmRsZXIgdXNlIHRoZSBwYWQgdGVtcGxhdGUKLQkgIGNhcHMgaW5zdGVhZCBvZiB0aGUgcXVlcnktY2FwcyByZXN1bHQgdG8gY2hlY2sgaWYgdGhlIGNhcHMgaXMKLQkgIGFjY2VwdGFibGUuIFRoaXMgaXMgYWxpZ25lZCB3aXRoIHdoYXQgdGhlIGRlc2lnbiBkb2NzIHNheXMgdGhlCi0JICBhY2NlcHQtY2FwcyBzaG91bGQgZG8gKGJlIG5vbi1yZWN1cnNpdmUpIGFuZCBzaG91bGQgYmUgZmFzdGVyLiBJdAotCSAgaXMgKm5vdCogZW5hYmxlZCBieSBkZWZhdWx0LCB0aG91Z2guCi0JICBBUEk6IEdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEUKLQkgIEFQSTogR1NUX1BBRF9JU19BQ0NFUFRfVEVNUExBVEUKLQkgIEFQSTogR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFCi0JICBBUEk6IEdTVF9QQURfVU5TRVRfQUNDRVBUX1RFTVBMQVRFCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzNjIzCi0KLTIwMTUtMDgtMTQgMTE6MTA6MDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JICBjaGVjazogUmVuYW1lIHN0YXRlcyB1bml0IHRlc3QKLQkgIE1ha2VzIGl0IGVhc2llciB0byBkaWZmZXJlbnRpYXRlIGZyb20gb3RoZXIgbW9kdWxlcyBzdGF0ZXMgdW5pdCB0ZXN0Ci0KLTIwMTUtMDgtMTMgMTM6MDg6MDMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiByZXdvcmsgYWNjZXB0LWNhcHMKLQkgIEFjY29yZGluZyB0byB0aGUgZGVzaWduIGRvY3M6Ci0JICBUaGUgQUNDRVBUX0NBUFMgcXVlcnkgaXMgbm90IHJlcXVpcmVkIHRvIHdvcmsgcmVjdXJzaXZlbHksIGl0IGNhbiBzaW1wbHkKLQkgIHJldHVybiBUUlVFIGlmIGEgc3Vic2VxdWVudCBDQVBTIGV2ZW50IHdpdGggdGhvc2UgY2FwcyB3b3VsZCByZXR1cm4KLQkgIHN1Y2Nlc3MuCi0JICBTbyBtYWtlIGl0IGEgc2hhbGxvdyBjaGVjayBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZWxseSBjaGVjayBkb3duc3RyZWFtLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODYzNQotCi0yMDE1LTA4LTEzIDEyOjQ0OjI5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogcmVtb3ZlIHNvbWUgZGVhZCBjb2RlCi0JICBEb2Vzbid0IHNlZW0gbGlrZSBpdCBpcyBnb2luZyB0byBnZXQgYmFjayB0byBsaWZlIGFueXRpbWUgc29vbgotCSAgQWxzbyByZW1vdmVzIGEge30gYmxvY2sgdGhhdCB3YXMgbGlrZWx5IHVzZWQgdG8ga2VlcCB0aGUgZGVhZAotCSAgY29kZSBhcm91bmQuCi0KLTIwMTUtMDgtMTEgMDg6MDc6NTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiByZXNwZWN0IGFjY2VwdC1jYXBzIGludGVyc2VjdCBmbGFnCi0JICBHc3RQYWQgaGFzIGEgZmxhZyBmb3Igc3VnZ2VzdGluZyBpZiB0aGUgYWNjZXB0LWNhcHMKLQkgIHF1ZXJ5IHNob3VsZCB1c2UgaW50ZXJzZWN0IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKLQkgIHN1YnNldCBjYXBzIG9wZXJhdGlvbiB0byB2ZXJpZnkgaWYgdGhlIGNhcHMgd291bGQgYmUKLQkgIGFjY2VwdGFibGUuCi0JICBiYXNldHJhbnNmb3JtIGN1cnJlbnRseSBhbHdheXMgdXNlcyB0aGUgc3Vic2V0IGNoZWNrIGFuZAotCSAgdGhpcyBwYXRjaCBtYWtlcyBpdCBob25vciB0aGUgZmxhZyBmb3IgdXNpbmcgaW50ZXJzZWN0Ci0JICBpZiBpdCBpcyBzZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4NjM1Ci0KLTIwMTUtMDgtMTIgMTM6MTI6MzggKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogcmVtb3ZlIHVucmVhY2hhYmxlIHJldHVybiBzdGF0ZW1lbnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM1MzgKLQotMjAxNS0wOC0xMSAxMTowOToyNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgotCSAgdGVzdHM6IGlnbm9yZSBuZXcgaGFybmVzcyB0ZXN0IGJpbmFyeQotCi0yMDE1LTA4LTEwIDE1OjMxOjM3ICswMzAwICBWaXZpYSBOaWtvbGFpZG91IDx2aXZpYUBhaGlydS5ldT4KLQotCSogZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkgIGRhdGV0aW1lOiBhY2NlcHQganVzdCBhIHRpbWUgYXMgSVNPIDg2MDEgc3RyaW5nIGFuZCB1c2UgdG9kYXkncyBkYXRlIHRoZW4KLQkgIElmIG5vIGRhdGUgYW5kIG9ubHkgYSB0aW1lIGlzIGdpdmVuIGluIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcoKSwKLQkgIGFzc3VtZSB0aGF0IGl0IGlzICJ0b2RheSIgYW5kIHRyeSB0byBwYXJzZSB0aGUgdGltZS1vbmx5IHN0cmluZy4gIlRvZGF5IiBpcwotCSAgYXNzdW1lZCB0byBiZSBpbiB0aGUgdGltZXpvbmUgcHJvdmlkZWQgYnkgdGhlIHVzZXIgKGlmIGFueSksIG90aGVyd2lzZSBaIC0KLQkgIGp1c3QgbGlrZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGV4aXN0aW5nIGNvZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzNDU1Ci0KLTIwMTUtMDctMjQgMDA6NDE6NTcgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5oOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdGhhcm5lc3MuYzoKLQkgIGhhcm5lc3M6IGFkZCBfc2V0X2ZvcndhcmRpbmcgZnVuY3Rpb24KLQkgIFRvIGJlIGFibGUgdG8gZGlzYWJsZSB0aGUgc2xpZ2h0bHkgIm1hZ2ljIiBmb3J3YXJkaW5nIG9mIHRoZQotCSAgbmVjZXNzYXJ5IGV2ZW50cyBiZXR3ZWVuIHRoZSBoYXJuZXNzZXMuCi0JICBBbHNvIGludHJvZHVjZSBhIG5ldyB0ZXN0LXN1aXRlIGZvciBHc3RIYXJuZXNzLCB0aGF0IGRvY3VtZW50cyB0aGUKLQkgIGZlYXR1cmUsIGFuZCBzaG91bGQgaG9wZWZ1bGx5IGV4cGFuZCBpbnRvIGRvY3VtZW50aW5nIG1vc3Qgb2YgdGhlCi0JICBmZWF0dXJlcyB0aGUgaGFybmVzcyBwb3NzZXNzZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNzQ2Ci0KLTIwMTUtMDgtMDggMTc6NTk6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSAgZGV2aWNlbW9uaXRvcjogZml4IHByb3ZpZGVyIGxlYWsKLQotMjAxNS0wOC0wOCAxNToyODoxOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBGaXggcHJldmlvdXMgY29tbWl0Ci0JICBXZSB3YW50IHRvIGdldCB0aGUgY2FwcyBxdWVyeSAqcmVzdWx0KgotCi0yMDE1LTA3LTE2IDE4OjU2OjAwICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGRldmljZW1vbml0b3IuYzoKLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yLmg6Ci0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuYzoKLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlci5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZXZpY2Vwcm92aWRlcjogQWRkIG1ldGhvZCB0byBoaWRlIGRldmljZXMgZnJvbSBhIHByb3ZpZGVyCi0JICBBZGQgbWV0aG9kcyB0byBhZGQvcmVtb3ZlIHRoZSBwcm92aWRlcnMgdGhhdCBzaG91bGQgYmUgaGlkZGVuIGJ5IHRoaXMKLQkgIHByb3ZpZGVyLiBBbHNvIG1ha2UgYSBtZXRob2QgdG8gZ2V0IGEgbGlzdCBvZiBoaWRkZW4gcHJvdmlkZXJzLgotCSAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIHN5c3RlbXMgbW9uaXRvciB0aGUgc2FtZSBkZXZpY2VzCi0JICBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMuCi0JICBBZGQgYSBwcm9wZXJ0eSB0byBzZWUgYWxsIGRldmljZXMsIGV2ZW4gZHVwbGljYXRlIG9uZXMgZnJvbSBoaWRkZW4KLQkgIHByb3ZpZGVycy4KLQotMjAxNS0wOC0wOCAxNDo0Mjo1MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBnZXRfYWxsb3dlZF9jYXBzKCkgc2hvdWxkIGdvIHRocm91Z2ggYm90aCBwYWRzCi0JICBUaGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gd2FzIGRvaW5nIGEgZGlyZWN0IGNhbGwgdG8gdGhlIHBlZXIgcGFkLAotCSAgd2hpY2ggcmVzdWx0ZWQgaW4gcXVlcnkgcHJvYmVzIG5ldmVyIGJlaW5nIGNhbGxlZCBvbiB0aGUgb3JpZ2luYWwgcGFkLgotCSAgSW5zdGVhZCBvZiB0aGF0LCBnZXQgdGhlIHBlZXIgcGFkIGNhcHMgYnkgdXNpbmcgZ3N0X3BhZF9wZWVyX3F1ZXJ5KCkKLQkgIHdoaWNoIHdpbGwgY2FsbCBwcm9iZXMgaW4gdGhlIGV4cGVjdGVkIGZhc2hpb24uCi0KLTIwMTUtMDgtMDcgMTA6MDg6MjEgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IGZyZWUgY2FwcyBkdXJpbmcgZmFpbHVyZQotCSAgV2hpbGUgY2FsbGluZyBnc3RfdmFsdWVfZGVzZXJpYWxpemVfc2FtcGxlLCBpZiB0aGVyZSBpcyBhIGZhaWx1cmUKLQkgIGFmdGVyIGNhcHMgaXMgcmVmJ2VkLCB0aGVuIGNhcHMgaXMgZ2V0dGluZyBsZWFrZWQuIEhlbmNlIGNoZWNraW5nIGZvcgotCSAgY2FwcyBpbiBmYWlsOiBnb3RvIGNvbmRpdGlvbiBhbmQgdW5yZWYnaW5nIGl0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzMzM4Ci0KLTIwMTUtMDctMjEgMTM6MzU6MzMgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIHJlZ2lzdHJ5OiBBZGQgcGx1Z2lucyB0byB0aGUgcmVnaXN0cnkgd2UgYXJlIGxvYWRpbmcgYW5kIG5vdCBkZWZhdWx0IG9uZQotCSAgV2hlbiBydW5uaW5nIGdzdF9yZWdpc3RyeV9zY2FuX3BsdWdpbl9maWxlIHdlIHdlcmUgbG9zaW5nIHRoZQotCSAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlZ2lzdHJ5IGJlaW5nIGxvYWRlZCBhbmQgZW5kZWQgdXAgYWRkaW5nIHRoZQotCSAgcGx1Z2luIHRvIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5IHdoaWNoIHdhcyBub3QgY29ycmVjdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI2NjIKLQotMjAxNS0wOC0wNSAxNTo1MToyNyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogT25seSBkcm9wIGJ1ZmZlciBpZiB0aGVpciBQVFMgaXMgb3V0IG9mIHNlZ21lbnQKLQkgIEFzIG9mIG5vdywgZXZlbiBmb3Igc3RyZWFtIGNvbXBsZXRseSBpbnNpZGUgc2VnbWVudCwgdGhlcmUgaXMgbm8KLQkgIGd1YXJhbnRpZWQgdGhhdCB0aGUgRFRTIHdpbGwgYmUgaW5zaWRlIHRoZSBzZWdtZW50LiBTcGVjaWZpY2FsbHkKLQkgIGZvciBILjI2NCB3aXRoIEItRnJhbWVzLCB0aGUgZmlyc3QgZmV3IGZyYW1lcyBvZnRlbiBoYXZlIERUUyB0aGF0Ci0JICBhcmUgYmVmb3JlIHRoZSBzZWdtZW50LgotCSAgSW5zdGVhZCBvZiB1c2luZyB0aGUgc3luYyB0aW1lc3RhbXAgdG8gY2xpcCBvdXQgb2Ygc2VnbWVudCBidWZmZXIsCi0JICB0YWtlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBzdGFydC9zdG9wIHByb3ZpZGVkIGJ5IHRoZSBzdWItY2xhc3MsIGFuZAotCSAgY2hlY2sgaWYgdGhlIHB0cyBhbmQgcHRzX2VuZCBpcyBvdXQgb2Ygc2VnbWVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI3OTEKLQotMjAxNS0wOC0wNSAxNDowNToyNSArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogZG9uJ3QgcnVuIGNvZGUgaW5zaWRlIGdfYXNzZXJ0Ci0JICBFdmVuIHRob3VnaCBhc3NlcnRzIGNhbid0IGJlIGRpc2FibGVkIGluIEdzdEhhcm5lc3MsIENvdmVyaXR5IHN0aWxsCi0JICBjb21wbGFpbnMgYWJvdXQgcnVubmluZyBjb2RlIGluc2lkZSB0aGVtLiBNb3ZpbmcgdGhlIGNvZGUgdG8gb3V0c2lkZSB0aGUKLQkgIGdfYXNzZXJ0cygpLgotCSAgQ0lEICMxMzExMzI2LCAjMTMxMTMyNywgIzEzMTEzMjgKLQotMjAxNS0wNy0xNyAxMDoxODowMiArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZXZpY2Vtb25pdG9yOiBnZXQgYSBsaXN0IG9mIGN1cnJlbnRseSBtb25pdG9yZWQgcHJvdmlkZXJzCi0JICBHZXQgYSBsaXN0IG9mIHRoZSBjdXJyZW50bHkgbW9uaXRvcmVkIHByb3ZpZGVycy4KLQotMjAxNS0wOC0wMiAxNzozODoxNCArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBmaXggaW52YWxpZCB1bnJlZiBhZnRlciBJRExFIHByb2JlIG9uIG5vbi1PSyBmbG93IHJldHVybgotCSAgSW4gY2FzZSB0aGVyZSBpcyBhbiBJRExFIHByb2JlIGZpcmVkIGZyb20gZ3N0X3BhZF9wdXNoX2RhdGEgYW5kIGl0Ci0JICBkb2Vzbid0IHJldHVybiBHU1RfRkxPV19PSywgdGhlIGNvZGUganVtcHMgdG8gdGhlIHByb2JlX3N0b3BwZWQKLQkgIGxhYmVsIHdoaWNoIHRyaWVzIHRvIHVucmVmIHRoZSBkYXRhIG9iamVjdC4gSG93ZXZlciwgYXQgdGhpcyBwb2ludAotCSAgdGhlIGRhdGEgb2JqZWN0IGJlbG9uZ3MgZG93bnN0cmVhbSBhbmQgbXVzdCBub3QgYmUgdG91Y2hlZC4KLQkgIEJ5IHNldHRpbmcgZGF0YSA9IE5VTEwsIHRoZSBjb2RlIHNraXBzIHRoaXMgdW5yZWYuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8vc2hvd19idWcuY2dpP2lkPTc1MzE1MQotCi0yMDE1LTA4LTA0IDIwOjA4OjA0ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBGaXggdGhlIG5hbWUgb2YgdGhlIHBhcmVudGJ1ZmZlcm1ldGEgZGVidWcgY2F0ZWdvcnkuCi0JICBEb24ndCB1c2UgJ2dsYnVmZmVycmVmbWV0YScgYXMgdGhlIGRlYnVnIGNhdGVnb3J5IGZvciB0aGUKLQkgIHBhcmVudCBidWZmZXIgbWV0YS4KLQotMjAxNS0wOC0wNCAxMzo0NTowOSArMDkwMCAgRXVuaGFlIENob2kgPGV1bmhhZTEuY2hvaUBzYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogbm90IHVwZGF0ZSB1cHN0cmVhbSBzaXplIHdpdGggbmVnYXRpdmUgdmFsdWUKLQkgIHVwc3RyZWFtX3NpemUgY2FuIGJlIG5lZ2F0aXZlIGJ1dCBxdWV1ZS0+dXBzdHJlYW1fc2l6ZSBpcyB1bnNpZ25lZCB0eXBlLgotCSAgdG8gZ2V0IGEgY2hhbmNlIHRvIHVwZGF0ZSBxdWV1ZS0+dXBzdHJlYW1fc2l6ZSBpbiBnc3RfcXVldWUyX2dldF9yYW5nZSgpCi0JICBpdCBzaG91bGQga2VlcCB0aGUgZGVmYXVsdCB2YWx1ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTMwMTEKLQotMjAxNS0wOC0wNCAxOTo1OToyOCArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVyOiBSZW1vdmUgZXh0cmEgZGVidWcgc3ltYm9sIGZyb20gZXhwb3J0cwotCSAgRG9uJ3QgZXhwb3J0IHRoZSBkZWJ1ZyB2YXJpYWJsZSBmb3IgdGhlIHBhcmVudF9idWZmZXJfbWV0YS4KLQkgIFRoaXMgd2FzIGFjY2lkZW50YWxseSBleHBvcnRlZCBhbmQgc2hvdWxkbid0IGJlIHB1YmxpYwotCi0yMDE1LTA4LTA0IDAwOjExOjI0ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogdXNlIEdTVF9JTkZPX09CSkVDVCBmb3IgbW9yZSBkZXRhaWwKLQkgIEhlbHBzIHRvIGRpc3RpZ3Vpc2ggbXVsdGlwbGUgZmlsZXNpbmtzLgotCi0yMDE1LTA3LTMwIDE3OjI5OjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgZG9jczogaW5mbzogcmVtb3ZlIDAuOCB0ZXJtaW5vbG9neSBmcm9tIGxvZyBsZXZlbCBkZXNjcmlwdGlvbgotCSAgV2UgZG9uJ3QgIml0ZXJhdGUiIGJpbnMgb3IgcGlwZWxpbmVzIGFueSBtb3JlLgotCi0yMDE1LTA3LTMwIDEyOjE3OjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VwYXJzZS5jOgotCSAgdGVzdHM6IGJhc2VwYXJzZTogZml4IGJ1ZmZlciBsZWFrIGluIHVuaXQgdGVzdAotCSAgRml4ZXMgbWFrZSBjaGVjay12YWxncmluZAotCi0yMDE1LTA3LTI4IDIxOjE0OjIyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIGRvYy9zZWVrZmxhZ3M6IEZpeCBjcm9zcyByZWZlcmVuY2VzCi0JICBUaGlzIGZpeGVzIG1pc3MtdXNlIG9mIEAgaW5zdGVhZCBvZiAlIHRvIHJlZmVyIHRvIGVudW1lcmF0aW9uCi0JICB2YWx1ZXMuCi0KLTIwMTUtMDctMjggMjI6MzA6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgYSBmZXcgbW9yZSBuZXcgc3ltYm9scyBhbmQgZGVmaW5lcwotCi0yMDE1LTA3LTI4IDE2OjU3OjQzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmg6Ci0JICBkb2MvY2Fwc2ZpbHRlcjogRG9jdW1lbnQgZmlsdGVyaW5nIG1vZGVzCi0JICBUaGlzIGlzIGRvY3VtZW50YXRpb24gZm9yIHRoZSBIVE1MIGRvY3VtZW50YXRpb24uCi0KLTIwMTUtMDctMjggMTY6NTA6NTUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oOgotCSAgZG9jL2ZpbGVzaW5rOiBBZGQgQnVmZmVyTW9kZSBlbnVtZXJhdGlvbgotCSAgVGhpcyBpcyBwdXJlbHkgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZS4gVGhpcyB3YXkgdGhlIHZhbHVlcyB3aWxsCi0JICBzaG93IHVwIGluIHRoZSBIVE1MIGRvY3VtZW50YXRpb24uCi0KLTIwMTUtMDctMjggMTU6NTA6NDAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JICBkb2MvZ3N0aGFyZG5lc3M6IEZpeCB0eXBvIGluIEdzdEFsbG9jYXRpb25QYXJhbXMKLQkgIEl0J3Mgbm90IEdzdEFsbG9jYXRvclBhcmFtcyBidXQgR3N0QWxsb2NhdGlvblBhcmFtcy4KLQotMjAxNS0wNy0yOCAxNTo0NjowOSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkgIGRvYy9nc3RoYXJuZXNzOiBSZW1vdmUgdW5rbm93biBwYXJhbWV0ZXIKLQkgIHNpbmtfZWxlbm1lbnRfbmFtZSBpcyBub3QgYSBwYXJhbWV0ZXIgb2YgZ3N0X2hhcm5lc3NfYWRkX3NpbmtfaGFybmVzcygpCi0JICBmdW5jdGlvbiwgYnV0IHN0aWxsIGl0IHNob3cgdXAgaW4gZG9jdW1lbnRhdGlvbi4KLQotMjAxNS0wNy0yOCAxMjoxOTowNCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuaDoKLQkgIGNhcHNmaWx0ZXI6IE9ubHkgcmVtZW1iZXIgcHJldmlvdXMgZmlsdGVyIGNhcHMgaWYgdGhleSB3ZXJlIGFjdHVhbGx5IHVzZWQgZm9yIHNvbWV0aGluZwotCSAgSWYgbm9ib2R5IGV2ZXIgc2F3IHRoZSBwcmV2aW91cyBmaWx0ZXIgY2Fwcywgbm90aGluZyBjb3VsZCd2ZSBuZWdvdGlhdGVkIHdpdGgKLQkgIHRoZW0gYW5kIHdlIGNhbiBqdXN0IHByZXRlbmQgdGhleSBuZXZlciBleGlzdGVkIGF0IGFsbC4KLQotMjAxNS0wNy0yOCAxMjoxNjoxMiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBXaGVuIHN3aXRjaGluZyBjYXBzIGNoYW5nZSBtb2RlcywgZm9yZ2V0IGFsbCBwcmV2aW91cyBjYXBzCi0KLTIwMTUtMDctMjMgMTg6MTU6MDUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogUmV0dXJuIEZMT1dfRkxVU0hJTkcgaWYgbmVnb3RpYXRpb24gZmFpbHMgZHVyaW5nIHNodXRkb3duCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyODAwCi0KLTIwMTUtMDctMjIgMTg6NTU6MjkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkgIGhhcm5lc3M6IEZpeCBpbmRlbmRhdGlvbgotCi0yMDE1LTA3LTIxIDEzOjE0OjU5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogQXZvaWQgaW5jcmVhc2luZyBxdWVyeSByZWZlcmVuY2UKLQkgIGdzdF9xdWVyeV9maW5kX2FsbG9jYXRpb25fbWV0YSgpIHJlcXVpcmVzIHRoZSBxdWVyeSB0byBiZQotCSAgd3JpdGFibGUgdG8gd29yay4gVGhpcyBwYXRjaCBlbnN1cmUgYXZvaWRzIHRha2luZyBhIHJlZmVyZW5jZQotCSAgb24gdGhlIHF1ZXJ5LCBzbyB3ZSBjYW4gbm93IGNoZWNrIGlmIGEgY2VydGFpbiBhbGxvY2F0aW9uIG1ldGEKLQkgIGlzIHByZXNlbnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNjYxCi0KLTIwMTUtMDctMjIgMTU6Mzg6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGRvY3M6IGZpeCBkZXNjcmlwdGlvbiBvZiBnc3RfYnVmZmVyX2V4dHJhY3RfZHVwKCkKLQkgIE5vIEdCeXRlcyBpbnZvbHZlZC4KLQotMjAxNS0wNy0yMSAwMDoxNzoyOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNvbmNhdC5jOgotCSAgY29uY2F0OiBkb3Qgbm90IHJlc2V0IHBhZCBzdGF0ZXMgdG9vIGVhcmx5Ci0JICBSZXNldHRpbmcgdGhlIGZsdXNoaW5nIHN0YXRlIG9mIHRoZSBwYWRzIGF0IHRoZSBlbmQgb2YgdGhlCi0JICBQQVVTRURfVE9fUkVBRFkgdHJhbnNpdGlvbiB3aWxsIG1ha2UgcGFkcyBoYW5kbGUgc2VyaWFsaXplZAotCSAgcXVlcmllcyBhZ2FpbiB3aGljaCB3aWxsIHdhaXQgZm9yIG5vbi1hY3RpdmUgcGFkcyBhbmQgbWlnaHQKLQkgIGNhdXNlIGRlYWRsb2NrcyB3aGVuIHN0b3BwaW5nIHRoZSBwaXBlbGluZS4KLQkgIE1vdmUgdGhlIHJlc2V0IHRvIHRoZSBSRUFEWV9UT19QQVVTRUQgaW5zdGVhZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI2MjMKLQotMjAxNS0wNy0yMCAxNjoxODowNiArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmg6Ci0JICBoYXJuZXNzOiBhZGQgZnVuY3Rpb25zIGZvciBhZGRpbmcgc3ViLWhhcm5lc3NlcyBkaXJlY3RseQotCSAgQnkgaW50cm9kdWNpbmcgZ3N0X2hhcm5lc3NfYWRkX3NyY19oYXJuZXNzIGFuZCBnc3RfaGFybmVzc19hZGRfc2lua19oYXJuZXNzCi0JICB3ZSBjb2xsZWN0IGFsbCBzdWItaGFybmVzcyBzZXR1cCBpbiBvbmUgZnVuY3Rpb24sIG1ha2luZyB0aGUgcHJldmlvdXMKLQkgIHN1Yi1oYXJuZXNzIGNyZWF0aW9uIGZ1bmN0aW9ucyBub3cgY2FsbHMgdGhlc2UgZGlyZWN0bHksIGFuZCBtYWtpbmcgaXQKLQkgIG11Y2ggZWFzaWVyIChhbmQgbGVzcyBlcnJvci1wcm9uZSkgdG8gYWRkIHlvdXIgb3duIHNyYyBvciBzaW5rLWhhcm5lc3MKLQkgIHVzaW5nIHRoZSBtb3JlIGdlbmVyaWMgaGFybmVzcy1jcmVhdGlvbiBmdW5jdGlvbnMuCi0KLTIwMTUtMDctMTcgMTc6NDQ6NTIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogRG9uJ3Qgb3ZlcnJpZGUgZ3N0X3NlZ21lbnRfZG9fc2VlaygpCi0JICBUaGlzIGxpbmUgaGFzIG5vIHB1cnBvc2UsIGNsZWFybHkgZ3N0X3NlZ21lbnRfZG9fc2VlaygpIGlzIGRvaW5nCi0JICB0aGUgcmlnaHQgam9iLCBhbHNvLCBoYXZpbmcgdGhlIHN0YXJ0IHRpbWUgKGEgdGltZXN0YW1wKSBiZSB0aGF0Ci0JICBzYW1lIGFzIHRpbWUgKHRoZSBzdHJlYW0gdGltZSkgaXMgcXVpdGUgb2RkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDc4MwotCi0yMDE1LTA3LTE3IDE3OjQzOjI2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBleHRyYXBvbGF0aW9uIG9mIHNlZWtzZWdtZW50LnN0b3AKLQkgIFRoZSBzdG9wIHNoYWxsIGJlIHJlbGF0aXZlIHRvIHN0YXJ0IGlmIGV4dHJhcG9sYXRlZCBmcm9tIHRoZQotCSAgZHVyYXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwNzgzCi0KLTIwMTUtMDctMTYgMTg6NDc6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSAgZGV2aWNlbW9uaXRvcjogZG8gc3RhcnQgYW5kIHN0b3Agb3V0c2lkZSBvZiB0aGUgbG9jawotCSAgUmVsZWFzZSB0aGUgbW9uaXRvciBsb2NrIHdoZW4gY2FsbGluZyB0aGUgcHJvdmlkZXIgc3RhcnQvc3RvcCBtZXRob2RzLgotCSAgQmVjYXVzZSB3ZSByZWxlYXNlIHRoZSBsb2NrIG5vdywgV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgY2hlY2sgdGhlCi0JICBjb29raWUgYWdhaW4gYW5kIGtlZXAgdHJhY2sgb2Ygc3RhcnRlZCBhbmQgcmVtb3ZlZCBwcm92aWRlcnMuCi0KLTIwMTUtMDctMTYgMTg6NDM6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuYzoKLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlci5oOgotCSAgZGV2aWNlcHJvdmlkZXI6IHNtYWxsIGNsZWFudXBzCi0JICBQcm90ZWN0IGFnYWluc3Qgd3JvbmcgYXJndW1lbnRzLgotCSAgQ2xlYW4gdXAgdGhlIGhlYWRlciBmaWxlIGluZGVudGF0aW9uLgotCi0yMDE1LTA3LTE2IDE3OjI1OjI0ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGRldmljZW1vbml0b3IuYzoKLQkgIGRldmljZW1vbml0b3I6IGtlZXAgb3JkZXIgb2YgcHJvdmlkZXJzIGFuZCBkZXZpY2VzCi0JICBUaGUgZGV2aWNlcHJvdmlkZXJzIGFyZSBhZGRlZCB0byB0aGUgYXJyYXkgc29ydGVkIGJ5IHRoZWlyIHJhbmsuIE1ha2UKLQkgIHN1cmUgd2Uga2VlcCB0aGlzIG9yZGVyaW5nIHdoZW4gcmVtb3ZpbmcgYSBwcm92aWRlci4KLQkgIFdlIHVzZSBfcHJlcGVuZCB0byBjb2xsZWN0IHRoZSBkZXZpY2VzLCB1c2UgZ19saXN0X3JldmVyc2UgdG8gZ2V0IHRoZQotCSAgZGV2aWNlcyBpbiB0aGUgcmlnaHQgb3JkZXI7IHNvcnRlZCBieSByYW5rIGFuZCBpbiB0aGUgc2FtZSBvcmRlciBhcwotCSAgcmV0dXJuZWQgYnkgdGhlIHByb3ZpZGVyLgotCi0yMDE1LTA3LTE2IDE3OjUwOjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JICBoYXJuZXNzOiBmaXggaW5kZW50YXRpb24KLQotMjAxNS0wNy0xNiAxNzo1MDowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSAgaGFybmVzczogZml4IHBhZCB0ZW1wbGF0ZSBsZWFrCi0KLTIwMTUtMDctMTYgMTc6MTM6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIGRvY3M6IGRyb3AgcmVmZXJlbmNlIHRvIHNvdXJjZWZvcmdlIG1haWxpbmcgbGlzdCBhZHJlc3MKLQotMjAxNS0wNy0xNiAxNzo1Mzo0MCArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JICBoYXJuZXNzOiBkb24ndCByZS1lc3RhYmxpc2ggdGhlIGhhcm5lc3Mgc2luayBhbmQgc3JjIHBhZHMKLQkgIEdpdmVuIHRoYXQgdGhlIGVsZW1lbnQgaGFzIHRoZSBwb3NzaWJpbGl0eSB0byBoYXZlIG9uZSwgdGhleSBzaG91bGQKLQkgIGFscmVhZHkgYmUgdGhlcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNDk4Ci0KLTIwMTUtMDctMTMgMTE6MDM6MTMgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmg6Ci0JICBoYXJuZXNzOiBJbXByb3ZlIGRldGVjdGlvbiBvZiBlbGVtZW50IHR5cGUKLQkgIFRoZSBlbGVtZW50IGZsYWcgZG9lcyBub3QgaW5kaWNhdGUgd2V0aGVyIGEgYmluIHNob3VsZCBiZSB0ZXN0ZWQgYXMgYQotCSAgc291cmNlIG9yIGFzIGEgc2luaywgZWcuIGEgYmluIHdpdGggdGhlIHNpbmsgZmxhZyBtYXkgc3RpbGwgaGF2ZSBhCi0JICBzb3VyY2UgcGFkIGFuZCBhIGJpbiB3aXRoIHRoZSBzb3VyY2UgZmxhZyBtYXkgaGF2ZSBhIHNpbmsgcGFkLiBJbiB0aGlzCi0JICBjYXNlIGl0IGlzIGJldHRlciB0byBkZXRlcm1pbmUgdGhlIGVsZW1lbnQgdHlwZSBieSBsb29raW5nIGF0IHRoZQotCSAgYXZhaWxhYmxlIHBhZHMgYW5kIHBhZCB0ZW1wbGF0ZXMuCi0JICBBbHNvIHJlbmFtZSBzcmNwYWQgYW5kIHNpbmtwYWQgd2hlcmUgaXQgYWN0dWFsbHkgcmVwcmVzZW50cwotCSAgZWxlbWVudF9zcmNwYWRfbmFtZSBhbmQgZWxlbWVudF9zaW5rcGFkX25hbWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNDkzCi0KLTIwMTUtMDctMTMgMTE6MTA6NDkgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmM6Ci0JICBoYXJuZXNzOiBGb3J3YXJkIHN0aWNreSBldmVudHMgdG8gc2luayBoYXJuZXNzCi0JICBGaXhlcyBpc3N1ZSB3aGVyZSBpZiBhIHNpbmsgaGFybmVzcyB3YXMgYWRkZWQgbGF0ZSB0aGUgc3RpY2t5IGV2ZW50cwotCSAgd291bGQgbm90IGJlIGZvcndhcmVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjQ5NAotCi0yMDE1LTA3LTE2IDEyOjM2OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmg6Ci0JICBoYXJuZXNzOiBtYWtlIGhlYWRlciBuaWNlciB0byByZWFkCi0KLTIwMTUtMDctMTYgMTA6MzY6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgbmV3IGZ1bmN0aW9uIHRvIEFQSSBkb2NzCi0KLTIwMTUtMDctMTUgMTg6MjE6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0ZGV2aWNlLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRldmljZTogYWRkIGdlbmVyaWMgc3RydWN0IHdpdGggcHJvcGVydGllcwotCSAgQWRkIGEgZ2VuZXJpYyBzdHJ1Y3R1cmUgdG8gaG9sZCBhbnkgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFib3V0IHRoZQotCSAgZGV2aWNlLgotCi0yMDE1LTA3LTE0IDEyOjQ0OjEyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiBmaXggdHlwbyBpbiBhbGxvdy1ub3QtbGlua2VkIHByb3BlcnR5IGRlc2NyaXB0aW9uCi0KLTIwMTUtMDctMTMgMTQ6MjQ6MzQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGRvY3M6IGJ1czogbWVudGlvbiBtYWluIGxvb3AgcmVxdWlyZW1lbnQgaW4gZ3N0X2J1c19hZGRfd2F0Y2goKSBkb2NzCi0KLTIwMTUtMDMtMTggMTY6MDU6MzQgKzA1MzAgIFByYXNoYW50IEdvdGFybmUgPHBzLmdvdGFybmVAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3R0YXNrLmM6Ci0JICB0YXNrOiBhZGQgZnVuY3Rpb24gZ3VhcmQgZm9yIF9zZXRfbG9jaygpIGFuZCBmaXggZ3VhcmQgZm9yIF9qb2luKCkKLQkgIFNob3VsZCBvbmx5IGFjY2VzcyB0aGUgb2JqZWN0IHN0cnVjdHVyZSBhZnRlciBjaGVja2luZwotCSAgaXQncyB2YWxpZCBpbiBnc3RfdGFza19qb2luKCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2Mzg1Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NDMxCi0KLTIwMTUtMDUtMTkgMTg6NTg6MTEgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9nc3Rwcm90ZWN0aW9uLmM6Ci0JICBwcm90ZWN0aW9uOiBpbXBsZW1lbnQgbWV0YSB0cmFuc2Zvcm0gZnVuY3Rpb24KLQkgIENvcHkgdGhlIEdzdE1ldGEgY29udGVudHMgb3ZlciB0byB0aGUgbmV3IGJ1ZmZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk1OTAKLQotMjAxNS0wNy0xMCAwOToxMjoxNSArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZXN0aW1hdGUgZHVyYXRpb24gb24gRU9TCi0JICBGb3IgZmlsZXMgd2hpY2ggYXJlIHNtYWxsZXIgdGhhbiAxLjUgc2Vjb25kcywgdGhlIGR1cmF0aW9uCi0JICBlc3RpbWF0aW9uIGRvZXMgbm90IGhhcHBlbi4gU28gdGhlIGR1cmF0aW9uIHdpbGwgYWx3YXlzIGJlCi0JICBkaXNwbGF5ZWQgYXMgMC4gVXBkYXRpbmcgdGhlIGR1cmF0aW9uIG9uIEVPUyB3aGVuIHRoZSBlc3RpbWF0aW9uCi0JICBoYXMgbm90IGhhcHBlbmVkIGFscmVhZHkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAxMzEKLQotMjAxNS0wNy0xMCAxMTowMToyMSArMDkwMCAgSHl1bmp1biBLbyA8enpvb24ua29Ac2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogY2hhbmdlIGxvZyBtZXNzYWdlIHByb3Blcmx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMTE2Ci0KLTIwMTUtMDctMDkgMDA6MTI6NTEgKzA5MDAgIEp1c3RpbiBKb3kgPGp1c3Rpbi5qb3kuOXRvNUBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c3RyZWFtaWRkZW11eC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RzdHJlYW1pZGRlbXV4Lmg6Ci0JICBkb2NzOiBhZGQgU3RyZWFtaWREZW11eCB0byBkb2N1bWVudGF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5ODczCi0KLTIwMTUtMDctMDkgMDA6MjE6NDIgKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGZpeCB0byBnZXQgdmFsaWQgKGJ1ZmZlcl8pbGlzdAotCSAgZ2V0X2xpc3QvZ2V0X2J1ZmZlcl9saXN0IHNob3VsZCBiZSBkb25lIHdpdGggYnVmZmVycyBpbiBhZGFwdGVyIHJlbWFpbmluZwotCSAgd2hpbGUgdGFrZV9saXN0L3Rha2VfYnVmZmVyX2xpc3QgZmx1c2hlcyBlYWNoIGJ1ZmZlciBvbmUgYnkgb25lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjExNgotCi0yMDE1LTA3LTA4IDIwOjA2OjI3ICswOTAwICBIeXVuanVuIEtvIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiB1bml0IHRlc3QgZm9yIG5ldyBnZXRfKGJ1ZmZlcl8pbGlzdAotCi0yMDE1LTA3LTA4IDEyOjAwOjU2ICswMjAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcHV0IGJ1ZmZlciBpbiBhIGNvcnJlY3Qgc3RhdGUgYWZ0ZXIgZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlciBjYWxsCi0JICBXZSBtdXN0IG1ha2UgdGhlIGJ1ZmZlciB3cml0YWJsZSB0byB3cml0ZSBpdHMgUFRTIGFuZCBEVFMsIGFuZCBhbHNvCi0JICByZXNldCBpdHMgZHVyYXRpb24uCi0JICBUaGUgYmVoYXZpb3VyIGlzIG5vdyB0aGUgc2FtZSBhcyBiZWZvcmUgY29tbWl0IGMzYmNiYWRkLCBleGNlcHQgbWV0YXMKLQkgIG1pZ2h0IHN0aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBidWZmZXIgZXh0cmFjdGVkIGZyb20gdGhlIGFkYXB0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMDkyCi0KLTIwMTUtMDctMDcgMTU6MDI6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkgIGhhcm5lc3M6IGZpeCBpbmRlbnRhdGlvbiBhbmQgcmVwbGFjZSBzdHJlc3MgdGVzdCBmdW5jdGlvbiBtYWNyb3MKLQkgIFRoZXNlIHNjcmV3IHdpdGggaW5kZW50YXRpb24gYW5kIHNlZW0gYSBiaXQgdHJpdmlhbC4gSnVzdCBjb3B5J24ncGFzdGUuCi0KLTIwMTUtMDctMDcgMTA6NDY6NDggKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6Ci0JICBtZXRhOiB0cmFuc2Zvcm1fZnVuYzogcmV0dXJuIEZBTFNFIGlmIG5vdCBzdXBwb3J0ZWQgb3IgZmFpbGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNzc4Ci0KLTIwMTUtMDctMDcgMTE6NTM6MDcgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5OiByZWZhY3RvciBhbmQgYWRkIHRlc3RzIHVzaW5nIEdzdEhhcm5lc3MKLQkgIFdyaXRpbmcgYSB0ZXN0IGZvciB1bnNjaGVkdWxpbmcgdGhlIGdzdF9jbG9ja19pZF93YWl0IGluc2lkZSB0aGUKLQkgIGlkZW50aXR5IGVsZW1lbnQsIGZvdW5kIGFuIGludmFsaWQgcmVhZCwgY2F1c2VkIGJ5IHJlbW92aW5nIHRoZSBjbG9jay1pZAotCSAgd2hlbiBjYWxsaW5nIF91bnNjaGVkdWxlIGluc3RlYWQgb2YgbGV0dGluZyB0aGUgY29kZSBjYWxsaW5nIF93YWl0IHJlbW92ZQotCSAgdGhlIGNsb2NrLWlkIGFmdGVyIGJlaW5nIHVuc2NoZWR1bGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjA1NQotCi0yMDE0LTA0LTEyIDE5OjQ4OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkgIGhhcm5lc3M6IG1ha2Ugc3VyZSBnX2Fzc2VydCgpIHN0YXRlbWVudHMgYXJlIGFsd2F5cyBhY3RpdmUKLQkgIFdlIGhhdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyBpbnNpZGUgZ19hc3NlcnQoKXMsIHNvIG1ha2UKLQkgIHN1cmUgdGhvc2UgYXJlIGFsd2F5cyBlbmFibGVkIGhlcmUgKHRoZXkgbWlnaHQgb3RoZXJ3aXNlCi0JICBnZXQgZGlzYWJsZWQgZm9yIHJlbGVhc2UgYnVpbGRzKS4KLQotMjAxNS0wNy0wNyAwMDo1Njo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuaDoKLQkgIGhhcm5lc3M6IHJlbmFtZSBHc3RIYXJuZXNzUHJlcGFyZUJ1ZmZlciAtPiBHc3RIYXJuZXNzUHJlcGFyZUJ1ZmZlckZ1bmMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE5MTYKLQotMjAxNS0wNy0wNyAwMDo1Mzo0OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9jaGVjay9jaGVjay5oOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5oOgotCSAgZG9jczogYWRkIEdzdEhhcm5lc3MgdG8gZG9jdW1lbnRhdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTkxNgotCi0yMDEzLTEyLTE2IDEwOjQ3OjQ3ICswMTAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5oOgotCSAgY2hlY2s6IEFkZCBHc3RIYXJuZXNzIGNvbnZlbmllbmNlIEFQSSBmb3IgdW5pdCB0ZXN0cwotCSAgaHR0cDovL2dzdGNvbmYudWJpY2FzdC50di92aWRlb3MvZ3N0aGFybmVzcy1hZ2Fpbi1hLWZvbGxvdy11cC8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE5MTYKLQotMjAxNS0wNy0wNiAwOToyNjo1OCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmV2ZXJzZSBwbGF5YmFjayBpbiBwdWxsIG1vZGUKLQkgIHJpZ2h0IG5vdyByZXZlcnNlIHBsYXliYWNrIGlzIGRpc2FibGVkIGluIHB1bGwgbW9kZS4KLQkgIGVuYWJsaW5nIHRoZSBjb2RlIGZvciB0aGUgc2FtZSBhbmQgY2hhbmdpbmcgYSBiaXQgb2YgbG9naWMKLQkgIHRvIG1ha2UgcmV2ZXJzZSBwbGF5YmFjayB3b3JrLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDc4MwotCi0yMDE1LTA2LTIwIDA4OjMzOjI2ICswOTAwICBWaW5lZXRoIFQgTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYWRkIHJldmVyc2UgcGxheWJhY2sgdGVzdCBpbiBwdWxsIG1vZGUKLQkgIGFkZCB0ZXN0IGZvciByZXZlcnNlIHBsYXliYWNrIGluIHB1bGwgbW9kZSBhbmQgY29tcGFyZQotCSAgdGhlIGJ1ZmZlcnMgYmVpbmcgcmVjZWl2ZWQgaW4gc2luayBjaGFpbiB0byBtYWtlIHN1cmUKLQkgIHRoZSBwbGF5YmFjayBpcyBhbGxyaWdodAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDc4MwotCi0yMDE1LTA3LTA2IDE0OjMxOjI0ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgotCSAgUmV2ZXJ0ICJzY3JpcHRzOiBBbGxvdyBwYXNzaW5nIG1ha2UgZmxhZ3MgdG8gZ2l0LXVwZGF0ZS5zaCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWI1ZmRkNzIxMjllYTYxZThkZmY1MWNkYzBhZmNjY2FjMDNlYmMyYi4KLQkgIFdlIGNhbiB1c2UgdGhlIE1BS0VGTEFHUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwYXNzIG9wdGlvbnMgdG8gbWFrZSwKLQkgIHNvIGF2b2lkIGFkZGluZyBhbm90aGVyIG1lY2hhbmlzbSB0aGF0IGNvdWxkIGJlIGNvbmZ1c2luZy4KLQotMjAxNS0wNy0wNiAxMToxNjoyNyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Z2l0QGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogQ2xhcmlmeSBwYWQgcHJvYmUgcmV0dXJuIHR5cGUgZG9jdW1lbnRhdGlvbgotCi0yMDE1LTA3LTAyIDE0OjMyOjIxICswODAwICBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogU2hvdWxkbid0IGRyb3AgYnVmZmVyIHdoZW4gc3luYz1mYWxzZQotCSAgU2hvdWxkbid0IGRyb3AgYnVmZmVyIHdoZW4gc3luYz1mYWxzZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTgxOQotCi0yMDE1LTA3LTA2IDExOjI1OjUwICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgotCSAgc2NyaXB0czogQWxsb3cgcGFzc2luZyBtYWtlIGZsYWdzIHRvIGdpdC11cGRhdGUuc2gKLQkgIE1vc3RseSBhZGRpbmcgdGhpcyBmb3IgYWRkIGEgLWpOIGFzIGFwcHJvcHJpYXRlIHdoaWxlIGJ1aWxkaW5nLgotCi0yMDE1LTA1LTMwIDE0OjI3OjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogYXZvaWQgc2xpY2UgYWxsb2NzL2ZyZWVzIGZvciBlYWNoIGl0ZW0KLQkgIE1pY3Jvb3B0aW1pc2F0aW9uOiBMZXQgR3N0UXVldWVBcnJheSBzdG9yZSBvdXIKLQkgIGl0ZW0gc3RydWN0LiBUaGF0IHdheSB3ZSBkb24ndCBoYXZlIHRvIGFsbG9jL2ZyZWUKLQkgIHRlbXBvcmFyeSBRdWV1ZUl0ZW0gc2xpY2VzIGZvciBldmVyeSBpdGVtIHdlIHdhbnQKLQkgIHRvIHB1dCBpbnRvIHRoZSBxdWV1ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAxNDkKLQotMjAxNS0wNS0zMCAxMzowNzo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cXVldWVhcnJheS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBxdWV1ZWFycmF5OiBhbGxvdyBzdG9yaW5nIG9mIHN0cnVjdHMgaW4gYWRkaXRpb24gdG8gcG9pbnRlcnMKLQkgIFRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gYWxsb2NhdGUvZnJlZSB0ZW1wb3Jhcnkgc3RydWN0cwotCSAgZm9yIHN0b3JpbmcgdGhpbmdzIGluIHRoZSBxdWV1ZSBhcnJheS4KLQkgIEFQSTogZ3N0X3F1ZXVlX2FycmF5X25ld19mb3Jfc3RydWN0KCkKLQkgIEFQSTogZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbF9zdHJ1Y3QoKQotCSAgQVBJOiBnc3RfcXVldWVfYXJyYXlfcGVla19oZWFkX3N0cnVjdCgpCi0JICBBUEk6IGdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZF9zdHJ1Y3QoKQotCSAgQVBJOiBnc3RfcXVldWVfYXJyYXlfZHJvcF9zdHJ1Y3QoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDE0OQotCi0yMDE1LTA3LTAzIDIxOjU3OjU1ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZjc0YjJkZiB0byA5YWVkMWQ3Ci0KLTIwMTUtMDYtMTkgMDA6MDU6NDQgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkgIHBhZDogRW5mb3JjZSBORUVEX1BBUkVOVCBmbGFnIGFsc28gZm9yIGNoYWluCi0JICBUaGUgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgcGFyZW50IGluIHRoZSBwcmVzZW5jZSBvZgotCSAgdGhlIE5FRURfUEFSRU5UIGZsYWcgd2FzIG1pc3NpbmcgZm9yIHRoZSBjaGFpbiBmdW5jdGlvbi4gQWxzbyBrZWVwCi0JICBhIHJlZiBvbiB0aGUgcGFyZW50IGluIGNhc2UgdGhlIHBhZCBpcyByZW1vdmVkIG1pZC1jaGFpbi4KLQotMjAxNS0wNy0wMyAxNTo1NTowOCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSAgZG9jczogdXBkYXRlIGZvciB0d28gbWlzc2luZyBlbGVtZW50cwotCSAgQ29uY2F0IHdhcyBub3QgbGlua2VkIGFuZCBzdHJlYW1pZGRlbXV4IHdhcyBtaXNzaW5nLgotCi0yMDE1LTA3LTAzIDEyOjM3OjU0ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgZG9jczogYW5vdGhlciBzd2VlcCBjYW5vbmljYWxpemluZyB0aGUgcGx1Z2luIGRvY3Mgc2VjdGlvbnMgZmlsZQotCSAgVXNlIHVuZGVyc2NvcmVzIGZvciBjYXBzZmlsdGVyIG1hY3Jvcy4gQ29ycmVjdCB0aGUgdHlwZS1uYW1lIGZvciBmYWtlc3JjCi0JICBpZiB3ZSBldmVyIGltcGxlbWVudCB0aGUgZW51bS4KLQotMjAxNS0wNy0wMyAxMTo0NToxOSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JICBkb2NzOiBvcmRlciBhbmQgY2Fub25pY2FsaXplIHRoZSAtc2VjdGlvbnMudHh0IGZpbGUKLQkgIEhhdmUgYWxsIHNlY3Rpb25zIGluIGFscGhhYmV0aWNhbCBvcmRlci4gQWxzbyBtYWtlIHRoZSBtYWNybyBvcmRlciBjb25zaXN0ZW50LgotCSAgVGhpcyBpcyBhIHByZXBhcmF0aW9uIGZvciBnZW5lcmF0aW5nIHRoZSBmaWxlLiBSZW1vdmUgR0VUX0NMQVNTIG1hY3JvIGZvcgotCSAgdHlwZWZpbmUgZWxlbWVudCwgc2luY2UgaXQgaXMgbm90IHVzZWQgYW5kIHRoZSBoZWFkZXIgaXMgbm90IGluc3RhbGxlZC4KLQotMjAxMy0xMi0xNiAxMToyNDoxNyArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogQWRkIG1pc3NpbmcgZmllbGQgaW5pdGlhbGl6ZXJzIHRvIEdzdE1hcEluZm8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE4ODEKLQotMjAxNS0wNy0wMiAxNToxMDo0MyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiByZW1vdmUgYWx3YXlzLXRydWUgY2hlY2sKLQkgIGV2ZW50IGNhbid0IGJlIE5VTEwsIGl0IGhhcyBiZWVuIGRlcmVmZXJlbmNlZCBieSBHU1RfRVZFTlRfVFlQRSAoKSwgYW5kIG5vCi0JICBjYXNlIGZyZWVzIHRoZSBwb2ludGVyLiBSZW1vdmUgdW5uZWNlc3NhcnkgY2hlY2sgd2hpY2ggd2lsbCBhbHdheXMgYmUgVHJ1ZS4KLQkgIENJRCAjMTMwODk1NQotCi0yMDE1LTA3LTAxIDEwOjUwOjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIHRyYW5zZm9ybTogQWxzbyBjb3B5IFBPT0wgbWV0YXMgYW5kIG1ha2Ugc3VyZSB0byBjb3B5IG92ZXIgbWV0YXMgd2hlbiBjcmVhdGluZyBzdWJidWZmZXJzCi0JICBQT09MIG1ldGEganVzdCBtZWFucyB0aGF0IHRoaXMgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIG1ldGEgaXMgcmVsYXRlZCB0byBhCi0JICBwb29sLCBhIGNvcHkgc2hvdWxkIGJlIG1hZGUgd2hlbiByZWFzb25hYmxlIGFuZCB0aGUgZmxhZyBzaG91bGQganVzdCBub3QgYmUKLQkgIHNldCBpbiB0aGUgY29weS4KLQotMjAxNS0wNy0wMSAxMDo0NTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiBBbHNvIGNvcHkgUE9PTCBtZXRhcyBhbmQgbWFrZSBzdXJlIHRvIGNvcHkgb3ZlciBtZXRhcyB3aGVuIGNyZWF0aW5nIHN1YmJ1ZmZlcnMKLQkgIFBPT0wgbWV0YSBqdXN0IG1lYW5zIHRoYXQgdGhpcyBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGUgbWV0YSBpcyByZWxhdGVkIHRvIGEKLQkgIHBvb2wsIGEgY29weSBzaG91bGQgYmUgbWFkZSB3aGVuIHJlYXNvbmFibGUgYW5kIHRoZSBmbGFnIHNob3VsZCBqdXN0IG5vdCBiZQotCSAgc2V0IGluIHRoZSBjb3B5LgotCi0yMDE1LTA3LTAxIDEwOjM2OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IERvbid0IGNvcHkgIm1lbW9yeSIgbWV0YXMgdW5jb25kaXRpb25hbGx5Ci0JICBEb24ndCBjb3B5IG1lbW9yeSBtZXRhcyBpZiB3ZSBvbmx5IGNvcGllZCBwYXJ0IG9mIHRoZSBidWZmZXIsIGRpZG4ndAotCSAgY29weSBtZW1vcmllcyBvciBtZXJnZWQgbWVtb3JpZXMuIEluIGFsbCB0aGVzZSBjYXNlcyB0aGUgbWVtb3J5Ci0JICBzdHJ1Y3R1cmUgaGFzIGNoYW5nZWQgYW5kIHRoZSBtZW1vcnkgbWV0YSBiZWNvbWVzIG1lYW5pbmdsZXNzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTcxMgotCi0yMDE1LTA3LTAxIDEwOjI1OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBSZXZlcnQgImJ1ZmZlcjogRG9uJ3QgY29weSBQT09MRUQgYW5kIG1lbW9yeSBtZXRhZGF0YSB1bmNvbmRpdGlvbmFsbHkiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDdhMDhmYTVlYzQ4MDRmMTA0ZTlhYTlmNDU4MzIyZjZlYjQ5YTdlNDkuCi0KLTIwMTUtMDYtMzAgMTM6Mzg6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogRG9uJ3QgY29weSBQT09MRUQgYW5kIG1lbW9yeSBtZXRhZGF0YSB1bmNvbmRpdGlvbmFsbHkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE3MTIKLQotMjAxNS0wNi0zMCAxMToxODoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogVXNlIG5ldyBnc3RfYWRhcHRlcl9nZXRfYnVmZmVyKCkgQVBJIGluc3RlYWQgb2YgZ3N0X2FkYXB0ZXJfbWFwKCkKLQkgIFRoaXMgcHJlc2VydmVzIEdzdE1ldGEgcHJvcGVybHkgdW5sZXNzIHRoZSBzdWJjbGFzcyBkb2VzIHNwZWNpYWwgdGhpbmdzLiBJdCdzCi0JICBlbm91Z2ggdG8gbWFrZSBoMjY0cGFyc2UncyBzdHJlYW0tZm9ybWF0L2FsaWdubWVudCBjb252ZXJzaW9uIHBhc3MgdGhyb3VnaAotCSAgbWV0YXMgYXMgbmVlZGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjM4NQotCi0yMDE1LTA2LTMwIDExOjExOjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGFkYXB0ZXI6IEFkZCBnZXQgdmFyaWFudHMgb2YgdGhlIGJ1ZmZlciBiYXNlZCB0YWtlIGZ1bmN0aW9ucwotCSAgTWFpbiBkaWZmZXJlbmNlIHRvIGdzdF9hZGFwdGVyX21hcCgpIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzIGlzIHRoYXQKLQkgIEdzdE1ldGEgb2YgdGhlIGJ1ZmZlcnMgd2lsbCBiZSBwcmVzZXJ2ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMzg1Ci0KLTIwMTUtMDYtMjkgMTc6MDM6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogQ29weSBvdmVyIEdzdE1ldGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVycyB0byB0aGUgb3V0cHV0Ci0JICBBbGwgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgR3N0QnVmZmVyIG9yIGEgbGlzdCBvZiB0aGVtIHdpbGwgbm93IGNvcHkKLQkgIGFsbCBHc3RNZXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlcnMgZXhjZXB0IGZvciBtZXRhIHdpdGggR1NUX01FVEFfRkxBR19QT09MRUQKLQkgIGZsYWcgb3IgIm1lbW9yeSIgdGFnLgotCSAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZyBiZWhhdmlvdXIgdGhhdCB0aGUgY2FsbGVyIGNhbid0IGFzc3VtZQotCSAgYW55dGhpbmcgYWJvdXQgdGhlIGJ1ZmZlciBmbGFncywgdGltZXN0YW1wcyBvciBvdGhlciBtZXRhZGF0YS4gQW5kIGl0J3MKLQkgIGFsc28gdGhlIHNhbWUgdGhhdCBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0KCkgZGlkIGJlZm9yZSwgYW5kIHdoYXQKLQkgIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKCkgZGlkIGlmIHBhcnQgb2YgdGhlIGZpcnN0IGJ1ZmZlciBvciB0aGUgY29tcGxldGUKLQkgIGZpcnN0IGJ1ZmZlciB3YXMgcmVxdWVzdGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjM4NQotCi0yMDE1LTA2LTI5IDIwOjI3OjEyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cDogSW5pdCBmdW5jdGlvbiBjYW4gdGFrZSBhIE5VTEwgaW50ZXJmYWNlcyBhcnJheQotCi0yMDE1LTA2LTI5IDEzOjU3OjExICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgdGVzdHM6IGNhcHM6IGZpeCB0ZXN0X2ludGVyc2VjdF9mbGFnc2V0IGZhaWx1cmUKLQkgIHRlc3RfaW50ZXJzZWN0X2ZsYWdzZXQgZmFpbHMgYmVjYXVzZSB3aGVuIGNhcHMgaXMgYmVpbmcKLQkgIGNyZWF0ZWQsIGZsYWdzIGFuZCBtYXNrIGFyZSBiZWluZyBjYXN0IHRvIHVpbnQ2NCB3aGlsZQotCSAgdGhleSBzaG91bGQgYmUgdWludC4gVGhpcyByZXN1bHRzIGluIGludmFsaWQgbWVtb3J5IGFjY2VzcwotCSAgb3IgYSBzZWdmYXVsdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE2MjgKLQotMjAxNS0wNi0yOSAxNDoyMjo0NiArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIHNjcmlwdHM6IEZpeCBHU1RfVkFMSURBVEVfUExVR0lOX1BBVEgKLQkgIEl0IG1vdmVkIHJlY2VudGx5Ci0KLTIwMTUtMDYtMjkgMTM6NTg6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYmFzZXRyYW5zZm9ybTogRml4IHVwIGRvY3VtZW50YXRpb24gb2YgdHJhbnNmb3JtX21ldGEgdmZ1bmMKLQkgIEJ5IGRlZmF1bHQgd2UgY29weSBhbGwgbWV0YXMgdGhhdCBoYXZlIG5vIHRhZ3MuCi0KLTIwMTUtMDYtMjkgMTA6NDE6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuaDoKLQkgIGRpcmVjdGNvbnRyb2xiaW5kaW5nOiBmaXggQUJJIGJyZWFrCi0JICBTdHJ1Y3R1cmUgc2l6ZSB3YXMgaW5jcmVhc2VkIHdpdGhvdXQgYWRqdXN0bWVudCBvZiB0aGUgcGFkZGluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE2MjIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1MDIKLQotMjAxNS0wMy0xOSAxNTo1NToxNCArMDUzMCAgUHJhc2hhbnQgR290YXJuZSA8cHMuZ290YXJuZUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IGd1YXJkIGFnYWluc3QgTlVMTCB0YXNrIGZ1bmN0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NDM5Ci0KLTIwMTUtMDUtMTQgMTE6NDg6NDUgKzAyMDAgIE1pZ3VlbCBQYXLDrXMgRMOtYXogPG1wYXJpc2RpYXpAZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuaDoKLQkgIGZ1bm5lbDogYWRkICJmb3J3YXJkLXN0aWNreS1ldmVudHMiIHByb3BlcnR5Ci0JICBJdCBpcyB1c2VmdWwgdG8gYXZvaWQgc2VuZGluZyBzdGlja3kgZXZlbnQgb24gc3RyZWFtIGNoYW5nZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MzE1Ci0KLTIwMTUtMDYtMjUgMDA6MDQ6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMS41LjIgPT09Ci0KLTIwMTUtMDYtMjQgMjI6NDk6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS41LjIKLQotMjAxNS0wNi0yNCAyMjo0NTowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE1LTA2LTIyIDIzOjM3OjI3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSAgdGVzdHM6IGdzdHV0aWxzOiBmaXggd3JvbmcgZGVzY3JpcHRpb24gb2YgdGVzdCBlbGVtZW50Ci0JICBJdCBpcyBhIGZha2VzaW5rIHdpdGggcmVxdWVzdCBwYWRzLCBub3QgYSBzb3VyY2UKLQotMjAxNS0wNi0yNCAxNTozNToxNiArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzaGdAYXhpcy5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBGaXhlZCBjb21waWxlciB3YXJuaW5nCi0JICBUaGUgcG9vbCB2YXJpYWJsZSB3YXMgdW51c2VkIHdoZW4gYnVpZGxpbmcgd2l0aCBkZWJ1ZyBkaXNhYmxlZC4KLQotMjAxNS0wNi0yNCAxMToxMzo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTUtMDYtMjQgMTE6MTI6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IFVwZGF0ZSAuZGVmIGZpbGUgZm9yIG5ldyBBUEkKLQotMjAxNS0wNi0yNCAxNDoxOTowNCArMDkwMCAgSHl1bmp1biBLbyA8enpvb24ua29Ac2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBuZWVkIHRvIGRlZXAtY29weSBsYXN0IGJ1ZmZlciBsaXN0IGluIGRyYWluCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNDIwCi0KLTIwMTUtMDYtMjQgMTA6NTI6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JICBidWZmZXJsaXN0OiBXYXJuIGlmIGNvcHlpbmcgYSBidWZmZXIgZmFpbHMgaW4gZ3N0X2J1ZmZlcl9saXN0X2NvcHlfZGVlcCgpCi0KLTIwMTUtMDYtMjQgMTQ6MTg6NDcgKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJsaXN0OiBhZGQgbmV3IGFwaSBnc3RfYnVmZmVyX2xpc3RfY29weV9kZWVwCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNDIwCi0KLTIwMTUtMDYtMjMgMTY6NTg6NTYgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hc2hnQGF4aXMuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSAgZ3N0Y2hlY2s6IFByaW50IG5ld2xpbmUgaW4gbWVzc2FnZSBoYW5kbGVyCi0JICBUaGUgbWVzc2FnZSBoYW5kbGVyIGlzIHN1cHBvc2VkIHRvIHByaW50IGEgbmV3bGluZSBhZnRlciB0aGUgbWVzc2FnZQotCSAganVzdCBsaWtlIHRoZSBkZWZhdWx0IG1lc3NhZ2UgaGFuZGxlci4KLQotMjAxNS0wNi0xMiAxNjo1NDozMiArMDgwMCAgU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBIYW5kbGUgZGlmZmVyZW50IGR1cmF0aW9uIHRyYWNrIHNlbGVjdGlvbgotCSAgU3VwcG9ydCB0cmFjayBzd2l0Y2ggZnJvbSBFT1MgdHJhY2sgdG8gbm9uLUVPUyBvbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwNzYxCi0KLTIwMTUtMDYtMTIgMTY6NTI6NDYgKzA4MDAgIFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogQ2xlYXIgRU9TIGZsYWcgYWZ0ZXIgcmVjZWl2ZWQgU1RSRUFNX1NUQVJUIGV2ZW50Ci0JICBDbGVhciBFT1MgZmxhZyBhZnRlciByZWNlaXZlZCBTVFJFQU1fU1RBUlQgZXZlbnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA3NjEKLQotMjAxNS0wNi0yMiAxNDozMDo0OSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHRlc3RzOiBnc3R1dGlsczogYWRkIHRlc3RzIGZvciBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQKLQkgIEFkZHMgdGVzdHMgZm9yIGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCBmb3Igd2hlbiBpdCBoYXMgdG8KLQkgIHJlcXVlc3QgcGFkcy4KLQkgIE5vdGUgdGhhdCB0aGVzZSB0ZXN0cyBkb24ndCBjb3ZlciB0aGUgY2FzZSB3aGVuIGl0IGhhcyB0byByZXF1ZXN0Ci0JICBhIHBhZCB0aGF0IGFscmVhZHkgZXhpc3RzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTIzNQotCi0yMDE1LTA2LTE5IDE1OjQ2OjU2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IHVzZSBjYXBzIHdoZW4gZ2V0dGluZyBhIGNvbXBhdGlibGUgcGFkIGJ5IHRlbXBsYXRlCi0JICBEbyBub3QgaWdub3JlIHRoZSBjYXBzIGFyZ3VtZW50IHdoZW4gcmVxdWVzdGluZyBhIHBhZCBieSB0ZW1wbGF0ZS4KLQkgIFRoaXMgaXMgcGFydGljdWxhcmx5IGhhcm1mdWwgd2hlbiB0aGUgcGFkIGNhcHMgcXVlcnkgYnkgZGVmYXVsdAotCSAgcmV0dXJucyBBTlkgc28gaXQgd2lsbCBtYXRjaCB0aGUgZmlyc3QgdGVtcGxhdGUgaW5zdGVhZCBvZiB0aGUKLQkgIG9uZSB0aGF0IGFjdHVhbGx5IGludGVyc2VjdHMgd2l0aCB0aGUgY2Fwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEyMzUKLQotMjAxNS0wNi0yMyAwMDoxNDozMCArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RzYW1wbGUuaDoKLQkgIGdzdHNhbXBsZS5oOiBJbmNsdWRlIGdzdGJ1ZmZlcmxpc3QuaCBub3cgdGhhdCBpdCB1c2VzIEdzdEJ1ZmZlckxpc3QKLQotMjAxNS0wNi0xNyAxNjoxMjoxMyArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNvbmNhdC5jOgotCSAgY29uY2F0OiB3aGVuIHJlbGVhc2luZyBwYWQsIHNlbmQgRU9TIGFwcHJvcHJpYXRlbHkuCi0JICBQcmV2aW91c2x5LCBjb25jYXQgc2VudCBhbiBFT1MgaWYgdGhlcmUgd2FzIGEgbmV4dCBwYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMTA3Ci0KLTIwMTUtMDYtMTYgMTY6MTQ6MTggKzAyMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rjb25jYXQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y29uY2F0Lmg6Ci0JICBjb25jYXQ6IEFkZCBhZGp1c3QtYmFzZSBwcm9wZXJ0eQotCSAgVGhpcyBkaXNhYmxlcyB0aGUgc2VnbWVudC5iYXNlIGFkanVzdG1lbnRzLCB3aGljaCBpcyB1c2VmdWwgaWYgZG93bnN0cmVhbQotCSAgdGFrZXMgY2FyZSBvZiBiYXNlIGFkanVzdG1lbnRzIGFscmVhZHkgKGV4YW1wbGU6IGEgY29tYmluYXRpb24gb2YgY29uY2F0Ci0JICBhbmQgc3RyZWFtc3luY2hyb25pemVyKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTA0NwotCi0yMDE1LTA2LTIyIDE0OjA0OjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogVW5zZXQgdGhlIGxhc3QgYnVmZmVyIGxpc3QgaWYgd2Ugb25seSBnb3QgYSBidWZmZXIKLQkgIEFsc28gcmVtZW1iZXIgYW55IHByZXJvbGwgYnVmZmVyIGxpc3QuCi0KLTIwMTUtMDYtMjIgMTM6MzM6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHNhbXBsZTogQWRkIG5ldyBBUEkgdG8gdGhlIGRvY3MKLQotMjAxNS0wNi0yMiAyMDowMjo1NSArMDkwMCAgSHl1bmp1biA8enpvb24ua29Ac2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBlbmFibGUgdG8gZ2V0IGxhc3Qgc2FtcGxlIGluY2x1ZGluZyBidWZmZXIgbGlzdCBpZiBuZWVkZWQKLQkgIEluIGNhc2Ugb2YgYSBidWZmZXIgbGlzdCByZW5kZXJpbmcsIGxhc3Qtc2FtcGxlIGlzIG5vdCB1cGRhdGVkLgotCSAgSXQgbmVlZHMgdG8gYmUgdXBkYXRlZCBhbmQgZW5hYmxlIHRvIGdldCBidWZmZXIgbGlzdCBmcm9tIGxhc3Qtc2FtcGxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTAyNgotCi0yMDE1LTA2LTIyIDE5OjM1OjQwICswOTAwICBIeXVuanVuIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSogZ3N0L2dzdHNhbXBsZS5oOgotCSAgc2FtcGxlOiBhZGQgZ3N0X3NhbXBsZV9zZXQvZ2V0X2J1ZmZlcl9saXN0IGFwaXMKLQkgIEFsbG93ZWQgdG8gc2V0L2dldCBidWZmZXIgbGlzdCB0byBzYW1wbGUgaWYgbmVlZGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMDI2Ci0KLTIwMTUtMDYtMTkgMTA6NTI6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3QucHk6Ci0JICB0ZXN0LnB5OiByZW1vdmUgYWNjaWRlbnRhbGx5IGNvbW1pdHRlZCBmaWxlCi0KLTIwMTUtMDYtMTggMTE6NTE6NDggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgZG9jOiBVbmlmeSBTaW5jZSBtYXJrIGZvciBhdHRyaWJ1dGUgYW5kIGVudW0KLQkgIEFzIHRoaXMgc2hvdyB1cCBhcyBwcm9zZSBpbiB0aGUgZG9jLCBzaW1wbHkgbWFrZSBpdCBjb25zaXN0ZW50Ci0JICBhbmQgImFyZ3VhYmxlIiBuaWNlciB0byByZWFkLgotCi0yMDE1LTA2LTE4IDExOjQ4OjUwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgZG9jOiBSZW1vdmUgcGFyZW50aGVzaXMgYXJvdW5kIFNpbmNlOgotCSAgVGhpcyBjb25mdXNlIHRoZSBwYXJzZXIsIGhlbmNlIGl0IGRvZXMgbm90IGVuZHVwIGluIHRoZSBkb2MgYW5kIHRoZQotCSAgaW5kZXggcHJvcGVybHkuCi0KLTIwMTUtMDUtMDYgMTY6NDQ6NDggKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgR3N0UGFyZW50QnVmZmVyTWV0YQotCSAgQSBjb3JlIG1ldGEgd2hpY2ggaGVscHMgaW1wbGVtZW50IHRoZSBvbGQgY29uY2VwdAotCSAgb2Ygc3ViLWJ1ZmZlcmluZyBpbiBzb21lIHNpdHVhdGlvbnMsIGJ5IG1ha2luZyBpdAotCSAgcG9zc2libGUgZm9yIGEgYnVmZmVyIHRvIGtlZXAgYSByZWYgb24gYSBkaWZmZXJlbnQKLQkgIHBhcmVudCBidWZmZXIuIFRoZSBwYXJlbnQgYnVmZmVyIGlzIHVucmVmZmVkIHdoZW4KLQkgIHRoZSBNZXRhIGlzIGZyZWVkLgotCSAgVGhpcyBtZXRhIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYSBidWZmZXIgd2hvc2UKLQkgIG1lbW9yeSBpcyBiZWluZyBzaGFyZWQgdG8gYSBjaGlsZCBidWZmZXIgaXNuJ3QgZnJlZWQKLQkgIGFuZCByZXR1cm5lZCB0byBhIGJ1ZmZlciBwb29sIHVudGlsIHRoZSBtZW1vcnkKLQkgIGlzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDAzOQotCi0yMDE1LTA2LTE2IDE4OjA4OjI0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIHRlc3QucHk6Ci0JICBnaTogVXNlIElOVFJPU1BFQ1RJT05fSU5JVCBmb3IgLS1hZGQtaW5pdC1zZWN0aW9uCi0JICBUaGlzIG5ldyBkZWZpbmUgd2FzIGFkZGVkIHRvIGNvbW1vbi4gVGhlIG5ldyBpbml0IHNlY3Rpb24gZml4ZWQKLQkgIGNvbXBpbGF0aW9uIHdhcm5pbmcgZm91bmQgaW4gdGhlIGluaXQgbGluZSB0aGF0IHdhcyBzcHJlYWQgYWNyb3NzCi0JICBhbGwgZmlsZXMuCi0KLTIwMTUtMDYtMTYgMTc6NDY6NDQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNjAxNWQyNiB0byBmNzRiMmRmCi0KLTIwMTUtMDYtMTUgMTA6MDY6MDAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkgIGNsb2NrOiBGaXggX1NUSU1FX0ZPUk1BVCBtYWNyb3MKLQkgIFRoaXMgbWFjcm8gZGlkbid0IHdvcmsgd2VsbCBhcyBpdCByZWxpZWQgb24gdGhlIHNpZ24gb24gdGhlIGxhc3QKLQkgIGRpdmlkZWQgbnVtYmVyIChudW1iZXIgb2YgZGF5cykuIFRoaXMgdmFsdWUgaXMgbW9zdCBvZiB0aGUgdGltZQotCSAgemVybywgYW5kIHplcm8gaXMgY29uc2lkZXJlZCBwb3NpdGl2ZSBpbiBwcmludGYuIEluc3RlYWQsIGRlYWwgd2l0aAotCSAgdGhlIHNpZ24gbWFudWFsbHksIGFuZCByZXN1c2UgdGhlIG9yaWdpbmFsIG1hY3JvcyBmb3IgdGhlIHJlc3QuIFRoaXMKLQkgIGFjdHVhbGx5IHNpbXBsaWZ5IHRoZSBtYWNybyBhIGxvdC4KLQotMjAxNS0wNi0xNCAyMDo0ODoyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kZWxlbWVudDogcmVzZXQgc2VnbWVudCBvbmx5IG9uY2Ugc3RyZWFtaW5nIGhhcyBzdG9wcGVkCi0JICBGaXhlcyB0aGUgb2NjYXNpb25hbCBjcml0aWNhbHMgaW4gdGhlIGRpc2NvdmVyZXIgdW5pdCB0ZXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTA3MwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDgyMwotCi0yMDE1LTA2LTE0IDExOjIzOjIyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIGRvYzogQWRkIG1vcmUgbWlzc2luZyBzeW1ib2xzIGluIGxpYi1zZWN0aW9ucy50eHQKLQkgIFRoZXNlIHdoZXJlIGNhdXNpbmcgYnJva2VuIGxpbmtzLgotCi0yMDE1LTA2LTE0IDExOjIyOjU0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmM6Ci0JICBkb2M6IEZpeCByZWZlcmVuY2UgdG8gdW5rbm93biB0eXBlIEdzdE5ldEFkZHJlc3MKLQotMjAxNS0wNi0xNCAxMToyMjozNiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmg6Ci0JICBkb2M6IEluY2x1ZGUgYW5kIGZpeCBHc3RDb250cm9sUG9pbnQKLQotMjAxNS0wNi0xNCAxMToyMToyNiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JICBkb2M6IEFkZCBHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEgdG8gdGhlIGRvYwotCSAgVGhpcyBpcyBiZWluZyByZWZlcmVuY2VkIGVsc2V3aGVyZSwgYnV0IHJlc3VsdHMgaW4gYnJva2VuIGxpbmtzLgotCSAgSXQgc2VlbXMgdG8gYmUgcHVibGljIEFQSSwgc28gSSB0aGluayBpdCBzaG91bGQgYmUgaW4gdGhlIGRvYy4KLQotMjAxNS0wNi0xNCAxMDo1OTo1MSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgotCSAgZG9jOiBEb2N1bWVudCBHc3RQdXNoU3JjQ2xhc3MKLQotMjAxNS0wNi0xNCAxMDo1ODoxOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgIGRvYzogQmV0dGVyIGRvY3VtZW50IG5ldyBHc3RDb2xsZWN0RGF0YS5BQkkuYWJpLmR0cwotCSAgVGhlIGRvYyBnZW5lcmF0b3IgZ2V0IGNvbmZ1c2VkIHdpdGggdGhlIGlubGluZSBzdHJ1Y3R1cmUuIFNvCi0JICB3b3JrYXJvdW5kIGJ5IHdyYXBwaW5nIHRoZSBpbm5lciBvZiB0aGUgc3RydWN0dXJlIHdpdGgKLQkgIHB1YmxpYy9wcml2YXRlIG1hcmssIGFuZCBkb2N1bWVudCB0aGF0IEdTVF9DT0xMRUNUX1BBRFNfRFRTIG1hY3JvCi0JICBzaGFsbCBiZSB1c2VkIHRvIGFjY2VzcyB0aGlzLgotCi0yMDE1LTA2LTE0IDEwOjU2OjI4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suaDoKLQkgIGRvYzogVmFyaW91cyBkb2MgZml4ZXMgZm9yIGxpYmdzdHJlYW1lci1iYXNlCi0JICAqIEZpeCBmdW5jdGlvbiBuYW1lIGluIHNlY3Rpb25zLnR4dAotCSAgKiBBZGQgZmV3IG1pc3Npbmcgb3IgZml4IG1pc3MtbmFtZWQKLQkgICogV29ya2Fyb3VuZCBndGstZG9jIGJlaW5nIGNvbmZ1c2VkIHdpdGggbm9uIHR5cGVkZWYKLQkgIHR5cGVzIChsb29zZSB0cmFjayBvZiBwdWJsaWMvcHJpdmF0ZQotCi0yMDE1LTA2LTE0IDEwOjI1OjUyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGRldmljZW1vbml0b3IuYzoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZG9jOiBNb3JlIGRvYyB3YXJuaW5nIGZpeGVzCi0JICBTbyBmcm9tIHRoaXMgcG9pbnQsIHRoZSByZW1haW5pbmcgd2FybmluZyBmb3IgbGliZ3N0cmVhbWVyIGFyZSBhYm91dAotCSAgcHJvdGVjdGVkIG1lbWJlciBub3Qgc2hvd2luZyBpbiB0aGUgZG9jLiBUaGlzIG1heSBuZWVkIHNvbWUgZGlzY3Vzc2lvbgotCSAgd2l0aCB1cHN0cmVhbSBndGstZG9jIHBlb3BsZS4KLQkgICogUmVtb3ZlICUgaW4gZnJvbSBvZiBub25lIG1hY3JvCi0JICAqIEZpeGVkIEdTVF9UWVBFX0ZBR1MgLT4gR1NUX1RZUEVfRkFHX1NFVAotCSAgKiBNaW5vciB3b3JkaW5nIGZpeAotCSAgKiBDYW4ndCBsaW5rIHRvIEdzdFVyaS5wb3J0LCBzbyBzcGxpdCB0aGUgLnBvcnQgcGFydAotCi0yMDE1LTA2LTE0IDA5OjE3OjIxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgZG9jOiBJbiBHc3RVcmkgd2UgbWVhbnQgbnVsLXRlcm1pbmF0ZWQsIG5vdCAlTlVMTAotCSAgJU5VTEwgcmVmZXJzIHRvIHRoZSBwb2ludGVyLiBJJ3ZlIHdyaXR0ZW4gaXQgdGhpcyB3YXkgaW4gb25lCi0JICB3b3JkIGFzIHRoaXMgaXMgd2hhdCBHTGliIHVzZXMuCi0KLTIwMTUtMDYtMTMgMjE6MDI6MjAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICBkb2M6IENhbm5vdCByZWZlcmVuY2UgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRQotCSAgU28gc2ltcGx5IHJlbW92ZSB0aGUgJSBzaWduLgotCi0yMDE1LTA2LTEzIDIwOjUyOjAxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JICBkb2M6IEZpeCB0eXBvIGluIHJlZiBfY2xvY2tfd2FpdF9mb3Jfc3luYygpCi0KLTIwMTUtMDYtMTMgMjA6Mzc6MzQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICBkb2M6IEZpeCBHc3RVcmkgZG9jIHR5cG9zCi0JICAqIFVzZSAmcGVyY3RuOyBpbnN0ZWFkIG9mIHJlc2VydmVkIGNoYXJhY3RlciAlCi0JICAqIE5VTEwgdGFrZSB0d28gTAotCi0yMDE1LTA2LTEzIDIwOjE5OjU5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGFsbG9jYXRvci5oOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdGVycm9yLmg6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHByb3RlY3Rpb24uaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYzoKLQkgIGRvYzogRml4IFNpbmNlOiBtYXJrcwotCSAgVGhlcmUgd2FzIGZldyBTaW5jZTogbWFyayBtaXNzaW5nIHRoZWlyIGNvbHVtbi4gQWxzbyB1bmlmeSB0aGUgd2F5Ci0JICB3ZSBzZXQgdGhlIFNpbmNlIG1hcmsgb24gZW51bSB2YWx1ZSBhbmQgc3RydWN0dXJlIG1lbWJlcnMuIFRoZXNlCi0JICBzYWRseSBkb24ndCBzaG93IHVwIGluIHRoZSBpbmRleC4KLQotMjAxNS0wNi0xMyAyMDowMToyNyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBkb2M6IEFkZCBnc3RfYnVmZmVyX2NvcHlfZGVlcCgpCi0KLTIwMTUtMDYtMTMgMTk6NDc6NDUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkgIGdpOiBTa2lwIGdzdF9jb25zaXRlbmN5X2NoZWNrZXJfbmV3Ci0JICBUaGlzIG5vbiBib3hlZCB0eXBlIGNhbm5vdCBiZSBhbGxvY2F0ZWQgc2FmZWx5LgotCi0yMDE1LTA2LTEzIDE5OjQ2OjIxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JICBkb2M6IEFkZCBpbmRleGVzIG9mIGFkZGVkIEFQSXMKLQkgIE9uZSBvZiB0aGUgbmljZSBmZWF0dXJlIGluIEdUSyBkb2MgaXMgdGhhdCBpdCBnZW5lcmF0ZSBpbmRleGVzCi0JICBvZiBhZGRlZCBBUElzIGJhc2Ugb24gdGhlIHNpbmNlIG1hcmtlci4gSW5jbHVkZSB0aGF0IGluIG91ciBkb2MKLQkgIHdoaWxlIGZpeGluZyB0aGUgaXNzdWUgb2YgZHVwbGljYXRlIElEIChwcm9kdWNlIHhtbCBjb250YWlucyB0aGF0Ci0JICBpZCBpdCBzZWVtcykKLQotMjAxNS0wNi0xMyAxNToxMDo1MyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYzoKLQkgIGRvYzogTWFrZSAuLi5fc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyIHRyYW5zZmVyIG5vbmUKLQotMjAxNS0wNi0xMyAxNDo0MDo0MyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RudHBwYWNrZXQuYzoKLQkgIGRvYzogU2lsZW5jZSB3YXJuaW5nIGFib3V0IHVudXNlZCBnc3RudHBwYWNrZXQgc2VjdGlvbgotCSAgVGhpcyBBUEkgaXMgaW50ZXJuYWwuCi0KLTIwMTUtMDYtMTMgMTQ6Mzc6NDIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RudHBwYWNrZXQuYzoKLQkgIFJldmVydCAiZG9jOiBBZGQgR3N0TnRwUGFja2V0IHRvIHRoZSBkb2MiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGM0ZWI4NzY5NjFhYmExMDkyYzQ4MzFhOGZlYWY0OGQ3YmUxZTM4YWUuCi0JICBPb3BzLCB0aGlzIGlzIG5vdCBhIHB1YmxpYyBBUEkKLQotMjAxNS0wNi0xMyAxNDoyMTo0MSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvbmV0L2dzdG50cHBhY2tldC5jOgotCSAgZG9jOiBBZGQgR3N0TnRwUGFja2V0IHRvIHRoZSBkb2MKLQotMjAxNS0wNi0xMyAxMzo1NToyNyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0aW5kZXguYzoKLQkgIGRvYzogUmVtb3ZlIGdzdGluZGV4IGZyb20gZG9jIGNvbW1lbnQKLQkgIE1vdmluZyB0aGF0IHRvIG5vcm1hbCBjb21tZW50IHRvIHNpbGVuY2UgdGhlIGdlbmVyYXRvci4gR3N0SW5kZXgKLQkgIGlzIG5vdCBpbiBHU3RyZWFtZXIgbGlicmFyeSBhdCB0aGUgbW9tZW50IChyZW1vdmVkIGZyb20gMC4xMCkuCi0KLTIwMTUtMDYtMTMgMTM6NDg6MDMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBnaTogU2V0IGNvbGxlY3RwYWRzIGZ1bmN0aW9uIHBhcmFtIHNjb3BlCi0KLTIwMTUtMDYtMTMgMTM6NDI6NTggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKLQkgIGdpOiBTa2lwIGFsbG9jYXRvciBvZiBub24tYm94ZWQgc3RydWN0dXJlCi0JICBUaGVzZSBhcmUgbm90IHVzYWJsZSBhcyB0aGV5IGFyZSwgYW5kIGNhbiBlYXNpbHkgbGVhZCB0byBjcmFzaAotCSAgb3IgbGVha3MuIFRoaXMgYWxzbyBzaWxlbmNlIHdhcm5pbmcgZnJvbSB0aGUgc2Nhbm5lci4gSWYgd2UgbWFuYWdlIHRvCi0JICBtYWtlIHRoaXMgdXNhYmxlLCB3ZSBjYW4gdGhlbiByZW1vdmUgdGhhdCBtYXJrLCBpdCB3aWxsIHJlcXVpcmUKLQkgIHRvIG1ha2UgdGhpcyB0eXBlIGJveGVkLgotCi0yMDE1LTA2LTEzIDEzOjI0OjEzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvYzogR2l2ZSBnc3Rjb25maWcgYSBuaWNlIG5hbWUKLQkgIEFzIGFsbCBvdGhlciBzZWN0aW9uIGRvIGhhdmUgYSBuaWNlIGNhbWUgY2FzZSBuYW1lLCBpdCBzZWVtcwotCSAgbW9yZSBjb25zaXN0ZW50LgotCi0yMDE1LTA2LTEzIDEzOjE5OjIxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvYzogQWRkIG1pc3NpbmcgZ3N0X2V2ZW50X25ldy9wYXJzZV9wcm90ZWN0aW9uCi0KLTIwMTUtMDYtMTMgMTM6MTk6MDUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jOiBHaXZlIGdzdHByb3RlY3Rpb24gc2VjdGlvbiBhIG5pY2UgdGl0bGUKLQotMjAxNS0wNi0xMyAxMzoxNDozMCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZG9jOiBSZW1vdmUgdW5lZWRlZCBwcm90ZWN0aW9uZXZlbnQgc2VjdGlvbgotCSAgVGhlc2UgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIGdzdGV2ZW50IHNlY3Rpb24gYWxyZWFkeS4gS2VlcCB0aGUgZG9jLAotCSAgc2luY2UgaXQncyBnb29kLgotCi0yMDE1LTA2LTEzIDEyOjMyOjQ5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ2xpc3Q6IEFkZCBtaXNzaW5nIHNjb3BlIHRvIGZ1bmMgcGFyYW0KLQkgIFRoaXMgdGVsbCBHSSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGZvciBhY3Rpb25zIChjYWxsKSBvciBpcyB0aGUKLQkgIGFuc3dlciBvZiB0aGlzIG1ldGhvZCBiZWluZyBhc3luY2hyb25vdXMgKGFzeW5jKS4gSW4gdGhpcyBjYXNlCi0JICBpdCdzIGEgY2FsbC4gVGhpcyBhbHNvIHNpbGVuY2Ugd2FybmluZyBmcm9tIHRoZSBHSSBzY2FubmVyLgotCi0yMDE1LTA2LTEzIDEyOjI3OjMxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHByb3RlY3Rpb24uaDoKLQkgIGdzdHByb3RlY3Rpb246IEFkZCBtaXNzaW5nIFNpbmNlIDEuNiBtYXJrCi0KLTIwMTUtMDYtMTMgMTI6MjY6MTMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cHJvdGVjdGlvbi5jOgotCSAgZ3N0cHJlY3Rpb246IF9hZGRfcHJvdGVjdGlvbl9tZXRhKCkgaXMgdHJhbnNmZXIgbm9uZQotCSAgSnVzdCBsaWtlIGdzdF9idWZmZXJfYWRkX21ldGEoKSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHNvIGJlCi0JICB0cmFuc2ZlciBub25lLiBUaGlzIGFsc28gc2lsZW5jZSBhIGdpIHdhcm5pbmcgYWJvdXQgcmV0dXJuaW5nCi0JICBhIGNvcHkgb2YgYSBub24gYm94ZWQgYmFyZSBzdHJ1Y3R1cmUuCi0KLTIwMTUtMDYtMTMgMTI6MjU6MTkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cHJvdGVjdGlvbi5jOgotCSogZ3N0L2dzdHByb3RlY3Rpb24uaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3Rwcm90ZWN0aW9uLmM6Ci0JICBnc3Rwcm90ZWN0aW9uOiBBZGQgbWlzc2luZyBuYW1lc3BhY2UgdG8gbWFjcm8KLQkgIEdTVF9QUk9URUNUSU9OX1NZU1RFTV9JRF9DQVBTX0ZJRUxEIHdhcyBtaXNzaW5nIHRoZSBHU1RfIG5hbWVzcGFjZS4KLQkgIEFkZCBpdCBiZWZvcmUgaXRzIHRvbyBsYXRlLgotCi0yMDE1LTA2LTEzIDExOjU1OjEwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZlcnNpb24uaC5pbjoKLQkgIGRvYzogS2VlcCBTRUNUSU9OOiBhZnRlciB0aGUgaWZkZWYKLQkgIE90aGVyd2lzZSBHVEsgZG9jIHdpbGwgc2VlIGl0IGFzIG9mdGVuIGFzIHdlIGluY2x1ZGUgdGhhdCBmaWxlcwotCSAgYW5kIHdhcm4gYWJvdXQgZHVwbGljYXRlZCBTRUNUSU9OOgotCi0yMDE1LTA2LTEzIDEwOjIzOjUyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIGdpOiBTa2lwIG1pbmkgb2JqZWN0IG1ldGhvZCB0aGF0IHBsYXkgd2l0aCByZWZjb3VudGluZwotCSAgSXQgbWFrZSBubyBzZW5zZSB0byBhbGxvdyB1c2luZyB0aGF0LiBBbnkgdXNlIHdvdWxkIGxlYWQgdG8gbGVhawotCSAgb2YgY3Jhc2guIE5vdGUgdGhhdCBHTWluaU9iamVjdCBpcyBlbnRpcmVseSB1bnVzYWJsZSBhcyB5b3UgY2Fubm90Ci0JICBjYXN0IGZyb20gbGV0J3Mgc2F5IEdzdEJ1ZmZlciB0byBHc3RNaW5pT2JqZWN0LgotCi0yMDE1LTA2LTEzIDE1OjA1OjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JICBsaWJzOiBtb3JlIGRvYyBzY2FubmVyIGZpeGVzCi0JICBnc3RiYXNldHJhbnNmb3JtLmg6MTk2OiBXYXJuaW5nOiBHc3RCYXNlOiAiQHN1Ym1pdF9pbnB1dF9idWZmZXIiIHBhcmFtZXRlciB1bmV4cGVjdGVkIGF0IHRoaXMgbG9jYXRpb246Ci0JICAqIEBzdWJtaXRfaW5wdXRfYnVmZmVyOiBGdW5jdGlvbiB3aGljaCBhY2NlcHRzIGEgbmV3IGlucHV0IGJ1ZmZlciBhbmQgcHJlLXByb2Nlc3NlcyBpdC4KLQkgIGdzdG5ldGNvbnRyb2xtZXNzYWdlbWV0YS5jOjEwMzogV2FybmluZzogR3N0TmV0OiBnc3RfYnVmZmVyX2FkZF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGE6IHVua25vd24gcGFyYW1ldGVyICdtZXNzYWdlJyBpbiBkb2N1bWVudGF0aW9uIGNvbW1lbnQsIHNob3VsZCBiZSAnYWRkcicKLQotMjAxNS0wNi0xMyAwOTozNzo0NiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JICBkb2M6IEZpeCBhbm5vYXRpb24gZm9yIEdzdE1pbmlPYmplY3QKLQkgIFJlcGxhY2luZyByZXByZWNhdGVkICJSZWYgRnVuYzoiLCAiVW5yZWYgRnVuOiIgZXRjLiBjb21tZW50IGJsb2NrCi0JICB3aXRoIGFwcHJvcHJpYXRlIChyZWYtZnVuYyBuYW1lKSBldGMuIGFubm90YXRpb24uCi0KLTIwMTUtMDYtMTMgMDk6MzQ6MDYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkgIGRvYzogRml4IHVuYmFsYW5jZWQgcGFyZW50aGVzaXMKLQotMjAxNS0wNi0xMyAwOTozMDoyNCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5oOgotCSAgZG9jOiBGaXggbW9yZSB0eXBvCi0KLTIwMTUtMDYtMTMgMDk6MjI6NDEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkgIGRvYzogRml4IHR5cGUgaW4gcHJldmlvdXMgY29tbWl0Ci0JICBNYXJrZXIgaXMgKHZhbHVlIC4uIG5vdCAoYWx1ZS4KLQotMjAxNS0wNi0xMyAwOToxOToyNyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JICBkb2M6IERvbid0IHVzZSBkZXByZWNhdGVkIFZhbHVlOiBhbmQgVHlwZTogY29tbWVudAotCSAgSW5zdGVhZCB1c2UgYXBwcm9wcmlhdGUgYW5ub3RhdGlvbi4gQW5ub3RhdGlvbnMgY2FuIGJlIGFkZGVkCi0JICB0byB0aGUgcmlnaHQgb2YgdGhlIGNvbnN0YW50IG5hbWUgaW4gYSBjb21tZW50IGJsb2NrLgotCi0yMDE1LTA2LTEyIDE3OjA3OjM4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBjb2xsZWN0cGFkczogQWRkIG5ldyBtYWNybyB0byB0aGUgZG9jCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNTc1Ci0KLTIwMTUtMDYtMTIgMTc6MDc6MjYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGNsb2NrOiBBZGQgbmV3IHNpZ25lZCB0aW1lIG1hY3JvIHRvIHRoZSBkb2MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NzUKLQotMjAxNS0wNi0xMCAxNDoxNzowMSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogRG9uJ3QgaW5pdGlhbGx5IHNlbmQgYW4gaW52YWxpZCBEVFMKLQkgIFNlbmRpbmcgYSBwb3NzaWJseSBpbnZhbGlkIERUUyBtYXkgY29uZnVzZSB0aGUgbXV4ZXJzLCB3aGljaCB3aWxsCi0JICB0aGVuIHRoaW5rIHRoZSBEVFMgaXMgZ29pbmcgYmFja3dhcmQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNTc1Ci0KLTIwMTUtMDQtMDMgMTc6NTQ6NTAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IEFkZCBuZWdhdGl2ZSBEVFMgc3VwcG9ydAotCSAgTWFrZSBnc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lKCkgZnVuY3Rpb24gYWxzbyBzdG9yZSB0aGUKLQkgIHNpZ25lZCBEVFMgaW4gdGhlIENvbGxlY3REYXRhLiBUaGlzIHNpZ25lZCBEVFMgdmFsdWUgY2FuIGJlIHVzZWQgYnkKLQkgIG11eGVycyB0byBwcm9wZXJseSBoYW5kbGUgc3RyZWFtcyB3aGVyZSBEVFMgY2FuIGJlIG5lZ2F0aXZlIGluaXRpYWxseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NzUKLQotMjAxNS0wNi0xMiAxMjowNjowNSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkgIGNsb2NrOiBBZGQgc2lnbmVkIHRpbWUgdXRpbGl0aWVzCi0JICBBZGQgdXRpbGl0eSB0byBwcmludCBzaWduZWQgdmFsdWUgb2YgdGltZS4gVGhpcyBpcyB1c2VmdWwgdG8KLQkgIHRyYWNlIHJ1bm5pbmcgdGltZSB2YWx1ZXMgaW4gZ2ludDY0IG9yIEdzdENsb2NrVGltZURpZmYgdmFsdWVzLgotCSAgQWRkaXRpb25hbGx5LCBkZWZpbmUgR1NUX0NMT0NLX1NUSU1FX05PTkUgdG8gaW5kaWNhdGUgYW4gaW52YWxpZAotCSAgc2lnbmVkIHRpbWUgdmFsdWUgYW5kIHZhbGlkYXRpb24gbWFjcm8uIE5ldyBtYWNyb3MgYXJlOgotCSAgR1NUX0NMT0NLX1NUSU1FX05PTkUKLQkgIEdTVF9DTE9DS19TVElNRV9JU19WQUxJRAotCSAgR1NUX1NUSU1FX0ZPUk1BVAotCSAgR1NUX1NUSU1FX0FSR1MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NzUKLQotMjAxNS0wNi0xMCAyMDo0NDoyNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgbWVzc2FnZTogYWRkIGFsbG93LW5vbmUgdG8gZ3N0X21lc3NhZ2VfbmV3XyBmdW5jdGlvbgotCSAgTm8gcmVzdHJpY3Rpb24gZm9yIGNyZWF0aW5nIG1lc3NhZ2VzIHdpdGhvdXQgYSBzb3VyY2UKLQotMjAxNS0wNi0xMiAxMzo0NTozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSAgd2luMzI6IHVwZGF0ZSAuZGVmIGZpbGUgZm9yIG5ldyBBUEkKLQotMjAxNS0wNS0yNyAxMjoyOTo0MSArMDMwMCAgTGF6YXIgQ2xhdWRpdSA8bGF6YXIuY2xhdWRpdS5mbG9yaW5AZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2Fic29sdXRlLWV4YW1wbGUuYzoKLQkgIGNvbnRyb2xsZXI6IEFkZGVkIGFic29sdXRlIGRpcmVjdCBjb250cm9sIGJpbmRpbmcsIGV4YW1wbGUgYW5kIHRlc3QKLQkgIEZpeGVzOiA3NDA1MDIKLQkgIEFQSTogZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlCi0KLTIwMTUtMDYtMDQgMDA6MDM6MTYgKzEwMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RhbGxvY2F0b3IuaDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogcHJvdmlkZSBhIG1lbV9tYXBfZnVsbCB0aGF0IHRha2VzIHRoZSBHc3RNYXBJbmZvCi0JICBGb2xsb3cgdXAgb2YgNzEzMDIzMGRkYjM0OWQwY2E3OTQyYWJkYmEyNmI3NTU4ZGYwNTVkMQotCSAgUHJvdmlkZSB0aGUgbWVtb3J5IGltcGxlbWVudGF0aW9uIHRoZSBHc3RNYXBJbmZvIHRoYXQgd2lsbCBiZSB1c2VkIHRvCi0JICBtYXAvdW5tYXAgdGhlIG1lbW9yeS4gIFRoaXMgYWxsb3dzIHRoZSBtZW1vcnkgaW1wbGVtZW50YXRpb24gdG8gdXNlCi0JICBzb21lIHNjcmF0Y2ggc3BhY2UgaW4gR3N0TWFwSW5mbyB0byBlLmcuIHRyYWNrIGRpZmZlcmVudCBtYXAvdW5tYXAKLQkgIGJlaGF2aW91ciBvciBzdG9yZSBleHRyYSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGRhdGEgYWJvdXQgdGhlIG1hcAotCSAgaW4gdXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDMxOQotCi0yMDE1LTA0LTA4IDE0OjIxOjQzIC0wNzAwICBBbGlzb24gQ2hhaWtlbiA8YWxpc29uX2NoYWlrZW5AbWVudG9yLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSAgZG9jczogbWFudWFsOiBmaXggbmFtZSByZXZlcnNhbCBpbiBiYXNpY3MtcGFkcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzUzMgotCi0yMDE1LTA2LTExIDIzOjA2OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzX3ByaXZhdGUuYzoKLQkgIGdzdF93cml0ZXY6IGRlZmluZSBVSU9fTUFYSU9WIG9uIGlPUy9PU1gKLQkgIEFwcGFyZW50bHkgaXQncyBvbmx5IHNldG9uIGlPUy9PU1ggaWYgZGVmaW5lZChLRVJORUwpLgotCi0yMDE1LTA2LTEyIDAxOjE1OjE5ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50c19wcml2YXRlLmM6Ci0JICBnc3Rfd3JpdGV2OiBSZXNwZWN0IFVJT19NQVhJT1YgbGltaXQgZm9yIHRoZSBpb3YgYXJyYXkKLQkgIElmIHdlIHJlY2VpdmUgbW9yZSB0aGFuIFVJT19NQVhJT1YgKDEwMjQgdHlwaWNhbGx5KSBidWZmZXJzCi0JICBpbiBhIHNpbmdsZSB3cml0ZXYgY2FsbCwgZmFsbCBiYWNrIHRvIGNvbnNvbGlkYXRpbmcgdGhlbQotCSAgaW50byBvbmUgb3V0cHV0IGJ1ZmZlciBvciBtdWx0aXBsZSB3cml0ZSBjYWxscy4KLQkgIFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIG9wdGltYWwsIGJ1dCBsZXQncyB3YWl0IHVudGlsIGl0J3MKLQkgIGV2ZXIgYSBib3R0bGVuZWNrIGZvciBzb21lb25lCi0KLTIwMTUtMDYtMTEgMTI6MzQ6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBwaXBlbGluZTogQWRkIGdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeSgpLCBnZXR0ZXIgYW5kIEdPYmplY3QgcHJvcGVydHkKLQkgIFRoaXMgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGxhdGVuY3kgaGFuZGxpbmcgYW5kIGNvbmZpZ3VyZXMgdGhlIHNwZWNpZmllZAotCSAgbGF0ZW5jeSBpbnN0ZWFkIG9mIHRoZSBtaW5pbXVtIGxhdGVuY3kgdGhhdCB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgTEFURU5DWQotCSAgcXVlcnkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwNzgyCi0KLTIwMTUtMDYtMTEgMTE6Mzc6MzAgKzAyMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rjb25jYXQuYzoKLQkgIGNvbmNhdDogQWRkIGFjdGl2ZS1wYWQgcHJvcGVydHkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY5NDkKLQotMjAxNS0wNi0xMSAxMTowNTo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rjb25jYXQuYzoKLQkgIGNvbmNhdDogQWxzbyByZXNldCB0aGUgY3VycmVudCBzdGFydCBvZmZzZXQgd2hlbiByZWNlaXZpbmcgYSBGTFVTSF9TVE9QIG9uIHRoZSBzcmNwYWQKLQotMjAxNS0wNi0xMSAxMTowNTozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rjb25jYXQuYzoKLQkgIGNvbmNhdDogQWRkIHNvbWUgbmV3bGluZXMgdG8gZXZlbnQgaGFuZGxpbmcgY29kZSB0byBtYWtlIHRoZSBjb2RlIGxvb2sgYSBiaXQgbGVzcyBkZW5zZQotCi0yMDE1LTA2LTExIDEwOjUzOjMwICswMjAwICBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y29uY2F0LmM6Ci0JICBjb25jYXQ6IFJlc2V0IHNlZ21lbnQgYmFzZSBvZmZzZXQgYWZ0ZXIgRkxVU0hfU1RPUCB3aXRoIHJlc2V0X3RpbWUgPSBUUlVFCi0JICBJZiB0aGUgcmVzZXRfdGltZSB2YWx1ZSBvZiBhIEZMVVNIX1NUT1AgZXZlbnQgaXMgc2V0IHRvIFRSVUUsIHRoZSBwaXBlbGluZQotCSAgd2lsbCBoYXZlIHRoZSBiYXNlX3RpbWUgb2YgaXRzIGVsZW1lbnRzIHJlc2V0LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbmNhdAotCSAgZWxlbWVudCdzIGN1cnJlbnRfc3RhcnRfb2Zmc2V0IGhhcyB0byBiZSByZXNldCB0byAwLCBzaW5jZSBpdCB3YXMKLQkgIGNhbGN1bGF0ZWQgd2l0aCB0aGUgb2xkIGJhc2UtdGltZSBpbiBtaW5kLgotCSAgT25seSBGTFVTSF9TVE9QIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgYWN0aXZlIHBhZCBhcmUgbG9va2VkIGF0LgotCSAgU2lnbmVkLW9mZi1ieTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgotCi0yMDE1LTAzLTI4IDE2OjQ2OjMyICswMTAwICBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y29uY2F0LmM6Ci0JICBjb25jYXQ6IEZvcndhcmQgRkxVU0hfU1RBUlQgYW5kIEZMVVNIX1NUT1AgZXZlbnRzCi0JICBXaXRob3V0IHRoaXMsIHNlZWtpbmcgZGVhZGxvY2tzIGlmIHBlcmZvcm1lZCB3aGlsZSB0aGUgcGlwZWxpbmUgaXMgcGF1c2VkLgotCSAgT25seSBmbHVzaCBldmVudHMgY29taW5nIGZyb20gdGhlIGFjdGl2ZSBwYWQgYXJlIGZvcndhcmRlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUzNjYKLQotMjAxNS0wNi0wOSAxNDoyODozMCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogTWFrZWZpbGUuYW06Ci0JICBjcnVmdDogYWRkIHRoZSBvYnNvbGV0ZSB0bXBsIGRpciB0byBjcnVmdC1kaXJzCi0KLTIwMTUtMDYtMDkgMTE6MzA6MTAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBkOWEzMzUzIHRvIDYwMTVkMjYKLQotMjAxNS0wNi0wOSAxMTowMTo1MyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSAgZmlsZXNpbms6IEZpeCBmc3luYy9fY29tbWl0IHVzYWdlCi0JICBfTVNDX1ZFUiB3aWxsIG9ubHkgYmUgZGVmaW5lZCB3aGVuIGJ1aWxkaW5nICpvbiogd2luZG93cyBhbmQgbm90IGp1c3QKLQkgICpmb3IqIHdpbmRvd3MuIEluc3RlYWQsIHVzZSB0aGUgR19PU19XSU4zMiBkZWZpbmUKLQotMjAxNS0wNi0wOSAxMDo1OTo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogbGlicy9nc3QvaGVscGVycy9nc3QtcHRwLWhlbHBlci5jOgotCSAgcHRwOiBDaGVjayBmb3IgdGhlIGFjdHVhbCBBUEkgd2UgdXNlIGluc3RlYWQgb2YganVzdCBsb29raW5nIGZvciBfX0FQUExFX18KLQkgIFNob3VsZCBmaXggdGhlIGJ1aWxkIG9uIEZyZWVCU0QsIERyYWdvbkZseSBhbmQgb3RoZXIgQlNEcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA1MzAKLQotMjAxNS0wNi0wOCAxNzoxMDo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbGllbnRjbG9jazogVXNlIHRoZSBuZXcgR1NUX0NMT0NLX0ZMQUdfTkVFRFNfU1RBUlRVUF9TWU5DIGZsYWcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA1NzQKLQotMjAxNS0wNi0wOCAxNzowNDo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbGllbnRjbG9jazogTWFrZSB0aGUgY2xvY2sgYSB3cmFwcGVyIGNsb2NrIGFyb3VuZCBhbiBpbnRlcm5hbCBjbG9jawotCSAgVGhlIGludGVybmFsIGNsb2NrIGlzIG9ubHkgdXNlZCBmb3Igc2xhdmluZyBhZ2FpbnN0IHRoZSByZW1vdGUgY2xvY2ssIHdoaWxlCi0JICB0aGUgdXNlci1mYWNpbmcgR3N0Q2xvY2sgY2FuIGJlIGFkZGl0aW9uYWxseSBzbGF2ZWQgdG8gYW5vdGhlciBjbG9jayBpZgotCSAgZGVzaXJlZC4gQnkgZGVmYXVsdCwgaWYgbm8gbWFzdGVyIGNsb2NrIGlzIHNldCwgdGhpcyBoYXMgZXhhY3RseSB0aGUgc2FtZQotCSAgYmVoYXZpb3VyIGFzIGJlZm9yZS4gSWYgYSBtYXN0ZXIgY2xvY2sgaXMgc2V0ICh3aGljaCB3YXMgbm90IGFsbG93ZWQgYmVmb3JlKSwKLQkgIHRoZSB1c2VyLWZhY2luZyBjbG9jayBpcyByZXBvcnRpbmcgdGhlIHJlbW90ZSBjbG9jayBhcyBpbnRlcm5hbCB0aW1lIGFuZAotCSAgc2xhdmVzIHRoaXMgdG8gdGhlIG1hc3RlciBjbG9jay4KLQkgIFRoaXMgYWxzbyByZW1vdmVzIHRoZSB3ZWlyZG5lc3MgdGhhdCB0aGUgaW50ZXJuYWwgdGltZSBvZiB0aGUgbmV0Y2xpZW50Y2xvY2sKLQkgIHdhcyBhbHdheXMgdGhlIHN5c3RlbSBjbG9jayB0aW1lLCBhbmQgbm90IHRoZSByZW1vdGUgY2xvY2sgdGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA1NzQKLQotMjAxNS0wNi0wOCAyMzowNzo0MCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGQzN2FmMzIgdG8gZDlhMzM1MwotCi0yMDE1LTA2LTA4IDIwOjAwOjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSAgdGVzdHM6IGZha2VzaW5rOiBmaXggc3RyaW5nIGxlYWsgaW4gdW5pdCB0ZXN0Ci0KLTIwMTUtMDYtMDkgMDA6NTI6MzQgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogRml4IFdpbmRvd3MgYnVpbGQgYnkgdXNpbmcgX2NvbW1pdCBpbnN0ZWFkIG9mIGZzeW5jLgotCi0yMDE1LTA2LTA4IDEyOjIyOjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cDogTWFrZSBzdXJlIHRvIGFsd2F5cyBpbml0aWFsaXplIHRoZSB2YXJpYWJsZXMgd2UgcHV0IGludG8gdGhlIHN0YXRpc3RpY3Mgc3RydWN0dXJlIGxhdGVyCi0JICBDSUQgMTMwNDY3NiwgMTMwNDY3NywgMTMwNDY3OCwgMTMwNDY3OS4KLQotMjAxNS0wNi0wOCAxMjowMjozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvaGVscGVycy9nc3QtcHRwLWhlbHBlci5jOgotCSAgcHRwOiBFbnN1cmUgdGhhdCBub3QgdG9vIG11Y2ggaXMgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gc3RydWN0IGlmcmVxLmlmcl9uYW1lCi0KLTIwMTUtMDYtMDggMTk6MzM6MDMgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IEFkZCBTaW5jZSBtYXJrZXJzIGZvciBuZXcgdmZ1bmNzCi0JICBBZGQgU2luY2U6IDEuNiBtYXJrZXJzIGZvciB0aGUgbmV3IHN1Ym1pdF9pbnB1dF9idWZmZXIoKSBhbmQKLQkgIGdlbmVyYXRlX291dHB1dCgpIHZmdW5jcwotCi0yMDE1LTA1LTIzIDAxOjA4OjI5ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOgotCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0yLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBTcGxpdCBpbnB1dCBidWZmZXIgcHJvY2Vzc2luZyBmcm9tIG91dHB1dCBnZW5lcmF0aW9uCi0JICBBbGxvdyBmb3Igc3ViLWNsYXNzZXMgd2hpY2ggd2FudCB0byBjb2xsYXRlIGluY29taW5nIGJ1ZmZlcnMgb3IKLQkgIHNwbGl0IHRoZW0gaW50byBtdWx0aXBsZSBvdXRwdXQgYnVmZmVycyBieSBzZXBhcmF0aW5nIHRoZSBpbnB1dAotCSAgYnVmZmVyIHN1Ym1pc3Npb24gZnJvbSBvdXRwdXQgYnVmZmVyIGdlbmVyYXRpb24gYW5kIGFsbG93aW5nCi0JICBmb3IgbG9vcGluZyBvZiBvbmUgb2YgdGhlIHBoYXNlcyBkZXBlbmRpbmcgb24gcHVsbCBvciBwdXNoIG1vZGUKLQkgIG9wZXJhdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAwMzMKLQotMjAxNS0wNC0xNiAxMDozMjowMiArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkgIEFkZCBHU1RfQlVGRkVSX0ZMQUdfU1lOQ19BRlRFUiBmbGFnLCBhbmQgaW1wbGVtZW50IGluIGZpbGVzaW5rLgotCSAgTWFrZXMgaXQgcG9zc2libGUgdG8gZ2V0IGZpbGVzaW5rIHRvIGZzeW5jKCkgYWZ0ZXIgcmVuZGVyaW5nCi0JICBhIGJ1ZmZlci4KLQotMjAxNS0wNi0wOCAxMDo0NjoyNCArMDIwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RwdHBjbG9jay5jOgotCSAgcHRwOiBGaXggYnVpbGQgb24gV2luZG93cywgYW5kIGluIGdlbmVyYWwgdGhlIEdJIGJ1aWxkIHdoZW4gUFRQIHN1cHBvcnQgd2FzIG5vdCBhdmFpbGFibGUKLQkgIEl0J3Mgbm90IGdvaW5nIHRvIHdvcmsgb24gV2luZG93cyBzdGlsbCwgdGhlIGhlbHBlciBwcm9jZXNzIG5lZWRzIHRvIGJlCi0JICBwb3J0ZWQuCi0KLTIwMTUtMDYtMDcgMjM6MDU6NTMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAyMWJhMmU1IHRvIGQzN2FmMzIKLQotMjAxNS0wNi0wNyAxNzozMTo1MCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGM0MDg1ODMgdG8gMjFiYTJlNQotCi0yMDE1LTA2LTA3IDE2OjU4OjQwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgIGRvY3M6IHJlbW92ZSB2YXJpYWJsZXMgdGhhdCB3ZSBkZWZpbmUgaW4gdGhlIHNuaXBwZXQgZnJvbSBjb21tb24KLQkgIFRoaXMgaXMgc3luY2luZyBvdXIgTWFrZWZpbGUuYW0gd2l0aCB1cHN0cmVhbSBndGtkb2MuCi0KLTIwMTUtMDYtMDcgMTc6MTY6MDYgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZDY3Njk5MyB0byBjNDA4NTgzCi0KLTIwMTUtMDYtMDcgMTY6NDQ6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotMjAxNS0wNi0wNyAxMDo1MjozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG50cHBhY2tldC5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IFRoZSBOVFAgcG9sbCBpbnRlcnZhbCBpcyBhIHNpZ25lZCBpbnQ4LCBub3QgdW5zaWduZWQKLQotPT09IHJlbGVhc2UgMS41LjEgPT09Ci0KLTIwMTUtMDYtMDcgMDk6NDE6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS41LjEKLQotMjAxNS0wNi0wNyAwOTozMzo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vdHIucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE1LTA2LTA3IDA5OjMyOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG5ldGNsaWVudGNsb2NrOiBBZGQgU2luY2UgbWFya2VyIHRvIHRoZSBkb2NzIGZvciBnc3RfbnRwX2Nsb2NrX25ldygpCi0KLTIwMTUtMDYtMDcgMDk6MzI6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNS0wNi0wNyAwOTowODozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBGaXggY29tcGlsZXIgd2FybmluZ3MgaW4gdW5pdCB0ZXN0Ci0JICBnc3QvZ3N0bWVtb3J5LmM6NTcwOjM4OiBlcnJvcjogaW1wbGljaXQgY29udmVyc2lvbiBmcm9tIGVudW1lcmF0aW9uIHR5cGUgJ0dzdE1hcEZsYWdzJyB0byBkaWZmZXJlbnQgZW51bWVyYXRpb24KLQkgIHR5cGUgJ0dzdExvY2tGbGFncycgWy1XZXJyb3IsLVdlbnVtLWNvbnZlcnNpb25dCi0JICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9sb2NrIChtZW0sIEdTVF9NQVBfV1JJVEUpKTsKLQkgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5efn5+fn5+fn5+fn5+fgotCi0yMDE1LTA2LTA3IDA4OjU5OjIzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cGNsb2NrOiBVc2UgdGhlIGN1cnJlbnQgcGF0aCBkZWxheSBmb3IgY2FsY3VsYXRpb24gdGhlIGxvY2FsL3JlbW90ZSBjbG9jayB0aW1lcwotCSAgVGhlIG1lYW4gbWlnaHQgY3VycmVudGx5IGJlIGNoYW5naW5nLCBhbmQgdGhlIGN1cnJlbnQgcGF0aCBkZWxheSBpcyB0aGUKLQkgIGNsb3Nlc3Qgd2UgY2FuIGdldCB0byB0aGUgYWN0dWFsIGRlbGF5IGFyb3VuZCB0aGUgY3VycmVudCBTWU5DIG1lc3NhZ2UuCi0KLTIwMTUtMDYtMDYgMjM6MDU6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IEFkZCBzb21lIGNvcHlyaWdodCBzdHVmZgotCi0yMDE1LTA2LTA2IDIxOjQzOjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RudHBwYWNrZXQuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RudHBwYWNrZXQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RuZXQuZGVmOgotCSAgbmV0Y2xpZW50Y2xvY2s6IEFkZCBOVFB2NCBzdXBwb3J0Ci0JICBUaGlzIHVzZXMgYWxsIG9mIHRoZSBuZXRjbGllbnRjbG9jayBjb2RlLCBleGNlcHQgZm9yIHRoZSBnZW5lcmF0aW9uIGFuZAotCSAgcGFyc2luZyBvZiBwYWNrZXRzLiBVbmZvcnR1bmF0ZWx5IHNvbWUgY29kZSBkdXBsaWNhdGlvbiB3YXMgbmVjZXNzYXJ5Ci0JICBiZWNhdXNlIEdzdE5ldFRpbWVQYWNrZXQgaXMgcHVibGljIEFQSSBhbmQgY291bGRuJ3QgYmUgZXh0ZW5kZWQgZWFzaWx5Ci0JICB0byBzdXBwb3J0IE5UUHY0IHBhY2tldHMgd2l0aG91dCBicmVha2luZyBBUEkvQUJJLgotCi0yMDE1LTA2LTA2IDIwOjM5OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG5ldGNsaWVudGNsb2NrOiBQcmVwYXJhdGlvbiBmb3IgTlRQdjQgc3VwcG9ydAotCSAgV2UgZXh0ZW5kIG91ciBjYWxjdWxhdGlvbnMgdG8gd29yayB3aXRoIGxvY2FsIHNlbmQgdGltZSwgcmVtb3RlIHJlY2VpdmUgdGltZSwKLQkgIHJlbW90ZSBzZW5kIHRpbWUgYW5kIGxvY2FsIHJlY2VpdmUgdGltZS4gRm9yIHRoZSBuZXRjbGllbnRjbG9jayBwcm90b2NvbCwKLQkgIHJlbW90ZSByZWNlaXZlIGFuZCBzZW5kIHRpbWUgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgdmFsdWUuCi0JICBGb3IgdGhlIHJlc3VsdHMsIHRoaXMgbW9kaWZpZWQgY2FsY3VsYXRpb24gbWFrZXMgYWJzb2x1dGVseSBubyBkaWZmZXJlbmNlCi0JICB1bmxlc3MgdGhlIHR3byByZW1vdGUgdGltZXMgYXJlIGRpZmZlcmVudC4KLQotMjAxNS0wNi0wNiAxOTowMTowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbGllbnRjbG9jay4gRml4IGxhc3QgY29tbWl0Ci0JICBBcHBhcmVudGx5IEkgZmFpbGVkIGF0IGdpdCBhZGQgLWkuCi0KLTIwMTUtMDYtMDYgMTg6NDI6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IE1ha2UgZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KCkgYSB0aGluZyB3cmFwcGVyIGFyb3VuZCBnX29iamVjdF9uZXcoKQotCSAgQmluZGluZ3Mgd2lsbCBsaWtlIHRoaXMsIGFuZCBhbHNvIGl0IGZpeGVzIGEgRklYTUUgY29tbWVudC4KLQotMjAxNS0wNi0wNiAxNDozNDozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdHB0cGNsb2NrLmM6Ci0JICBwdHBjbG9jazogVXNlICNkZWZpbmUgZXZlcnl3aGVyZSBpbnN0ZWFkIG9mIEdfTl9FTEVNRU5UUygpCi0KLTIwMTUtMDYtMDYgMTQ6MzE6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IEZpbHRlciBSVFRzIGJhc2VkIG9uIHRoZSBtZWRpYW4gb2YgdGhlIGxhc3QgUlRUcyBiZWZvcmUgY29uc2lkZXJpbmcgdGhlbSBhdCBhbGwKLQkgIFRoaXMgaW1wcm92ZXMgYWNjdXJhY3kgb24gd2lmaSBvciBzaW1pbGFyIG5ldHdvcmtzLCB3aGVyZSB0aGUgUlRUIGNhbiBnbyB2ZXJ5Ci0JICBoaWdoIHVwIGZvciBhIHNpbmdsZSBvYnNlcnZhdGlvbiBldmVyeSBub3cgYW5kIHRoZW4uIFdpdGhvdXQgZmlsdGVyaW5nIHRoZW0KLQkgIGF3YXkgY29tcGxldGVseSwgdGhleSB3b3VsZCBzdGlsbCBzdGlsbCBtb2RpZnkgdGhlIGF2ZXJhZ2UgUlRULCBhbmQgdGh1cyBhbGwKLQkgIGNsb2NrIGVzdGltYXRpb25zLgotCi0yMDE1LTA2LTA2IDE0OjE5OjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cGNsb2NrOiBVc2UgYSBzeXN0ZW0gY2xvY2sgZm9yIHRoZSB0aW1lIG9ic2VydmF0aW9ucyBpbnN0ZWFkIG9mIGdzdF91dGlsX2dldF90aW1lc3RhbXAoKQotCSAgVGhleSBkb24ndCBuZWNlc3NhcmlseSB1c2UgdGhlIHNhbWUgdW5kZXJseWluZyBjbG9ja3MgKGUuZy4gb24gV2luZG93cyksIG9yCi0JICBtaWdodCBiZSBjb25maWd1cmVkIHRvIGEgZGlmZmVyZW50IGNsb2NrIHR5cGUgKG1vbm90b25pYyB2cy4gcmVhbCB0aW1lIGNsb2NrKS4KLQkgIFdlIG5lZWQgdGhlIHZhbHVlcyBhIGNsZWFuIHN5c3RlbSBjbG9jayByZXR1cm5zLCBhcyB0aG9zZSBhcmUgdGhlIHZhbHVlcyB1c2VkCi0JICBieSB0aGUgaW50ZXJuYWwgY2xvY2tzLgotCi0yMDE1LTA2LTA2IDEyOjM1OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cGNsb2NrOiBGaXggZG9jdW1lbnRhdGlvbiBhIGJpdAotCi0yMDE1LTA2LTA1IDE5OjM1OjI5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSAgdGVzdHM6IGZha2VzaW5rOiB0ZXN0IG5vdGlmeTo6bGFzdC1tZXNzYWdlIGFuZCBkZWVwLW5vdGlmeTo6bGFzdC1tZXNzYWdlCi0JICBkZWVwLW5vdGlmeTo6bGFzdC1tZXNzYWdlIHNlZW1zIHRvIGNhdXNlIHNvbWUgcHJvYmxlbXMsIHNvIGRpc2FibGUgZm9yIG5vdy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODE2NDIKLQotMjAxNS0wNi0wNSAxMDowMjowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBQb3N0IGFuIGVycm9yIGlmIHdlIGNhbid0IHR5cGVmaW5kIHRoZSBkYXRhIHVudGlsIEVPUwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDQzOQotCi0yMDE1LTA2LTA0IDE5OjA1OjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzL2dzdC1wdHAtaGVscGVyLmM6Ci0JICBwdHAtaGVscGVyOiBNYWtlIHN1cmUgdG8gdXNlIGdfcG9sbCgpIGZvciB0aGUgbWFpbiBjb250ZXh0Ci0JICBUaGUgbW9kaWZpZWQgbWFpbiBjb250ZXh0IGZyb20gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTA1NAotCSAgc29tZWhvdyBjYWxscyBzZXR1Z2lkKCksIHdoaWNoIGFib3J0KClzIHNldHVpZCByb290IGFwcGxpY2F0aW9ucyBvbiBPU1guCi0KLTIwMTUtMDYtMDQgMTg6MzI6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LXB0cC1oZWxwZXIuYzoKLQkgIHB0cC1oZWxwZXI6IE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBydW5uaW5nIHNldHVpZCByb290IGlmIGNvbmZpZ3VyZWQgdGhhdCB3YXkKLQotMjAxNS0wNi0wNCAxODowMDo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvaGVscGVycy9nc3QtcHRwLWhlbHBlci5jOgotCSAgcHRwLWhlbHBlcjogRml4IGludGVyZmFjZSBsaXN0aW5nIGFuZCBNQUMgcmV0cmlldmFsIG9uIE9TWAotCi0yMDE1LTA2LTAzIDE5OjA0OjE1ICswMzAwICBWaXZpYSBOaWtvbGFpZG91IDx2aXZpYUBhaGlydS5ldT4KLQotCSogdG9vbHMvZ3N0LWluZGVudDoKLQkgIGdzdC1pbmRlbnQ6IEFkZCBzdXBwb3J0IGZvciBnaW5kZW50IGFzIGV4ZWN1dGFibGUgbmFtZQotCSAgZ3N0LWluZGVudCB1c2VkIHRvIHN1cHBvcnQgZ251aW5kZW50IGFuZCBpbmRlbnQgYXMgZXhlY3V0YWJsZSBuYW1lcy4KLQkgIEhvd2V2ZXIsIG9uIE9TWCBvbmUgY2FuICJicmV3IGluc3RhbGwgZ251LWluZGVudCIgYW5kIHRoZW4gdGhlCi0JICBleGVjdXRhYmxlIG5hbWUgd2lsbCBiZSBnaW5kZW50LiBBZGRlZCBzdXBwb3J0IGZvciB0aGF0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDM1MQotCi0yMDE1LTA2LTAzIDE2OjQyOjU3ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzLy5naXRpZ25vcmU6Ci0JICBnaXRpZ25vcmU6IGFkZCBsaWJzL2dzdC9oZWxwZXJzL2dzdC1wdHAtaGVscGVyCi0KLTIwMTUtMDYtMDMgMTY6MzQ6NTggKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW06Ci0JICBwdHA6IGlnbm9yZSBwZXJtaXNzaW9uIGVycm9ycyBpbiBNYWtlZmlsZQotCSAgVG8gc2F0aXNmeSB0aGUgYnVpbGRzbGF2ZXMgaWdub3JlIHBlcm1pc3Npb24gZXJyb3JzIGluIGNob3duLCBjaG1vZCBhbmQgc2V0Y2FwCi0KLTIwMTUtMDYtMDMgMTc6MDY6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LXB0cC1oZWxwZXIuYzoKLQkgIHB0cDogRG9uJ3QgdXNlIFNJT0NHSUZIV0FERFIgb24gQXBwbGUKLQkgIEp1c3QgI2lmZGVmIHRoZSBjb2RlIGZvciBub3csIHRoaXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGFyb3VuZAotCSAgSU9LaXQgbGF0ZXIgaW5zdGVhZCBvZiB1c2luZyBpb2N0bHMuCi0KLTIwMTUtMDYtMDMgMTY6Mjg6NDQgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW06Ci0JICBidWlsZDogbWFrZSBpbnN0YWxsLWV4ZWMtaG9va3MgZGVwZW5kIG9uIGluc3RhbGwtaGVscGVyc1BST0dSQU1TCi0JICBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlcmUgbWFrZSB3b3VsZCB0cnkgdG8gY2hhbmdlIG93bmVyc2hpcCBhbmQKLQkgIHBlcm1pc3Npb25zIG9mIHRoZSBub3QteWV0LWluc3RhbGxlZCBwdHAgaGVscGVyLgotCi0yMDE1LTA2LTAzIDE2OjA4OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cDogRml4IGRlYnVnIG91dHB1dCB0byBwcmludCB0aGUgZGlmZmVyZW5jZSBpbnN0ZWFkIG9mIGFic29sdXRlIHZhbHVlcwotCi0yMDE1LTA2LTAzIDE1OjIyOjMxICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdHB0cGNsb2NrLmM6Ci0JICBwdHBjbG9jazogZml4IGNvbXBpbGF0aW9uCi0JICBEb24ndCBwdXQgY29kZSBiZXR3ZWVuIGRlY2xhcmF0aW9ucy4KLQkgIEZpeCB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKLQotMjAxNS0wNi0wMyAxMTowNDo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdHB0cGNsb2NrLmM6Ci0JICBwdHA6IEFkZCBtZWRpYW4gYmFzZWQgcHJlLWZpbHRlcmluZyBvZiBkZWxheXMKLQkgIElmIHRoZSBkZWxheSBtZWFzdXJlbWVudCBpcyB0b28gZmFyIGF3YXkgZnJvbSB0aGUgbWVkaWFuIG9mIHRoZSB3aW5kb3cgb2YgbGFzdAotCSAgZGVsYXkgbWVhc3VyZW1lbnRzLCB3ZSBkaXNjYXJkIGl0LiBUaGlzIGluY3JlYXNlcyBhY2N1cmFjeSBvbiB3aWZpIGEgbG90LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0OTM5MQotCi0yMDE1LTA2LTAyIDE1OjI0OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYzoKLQkgIHB0cDogQWRkICNkZWZpbmUgdG8gb25seSB1c2UgU1lOQyBtZXNzYWdlcyBmb3Igd2hpY2ggd2UgY2FuIHNlbmQgREVMQVlfUkVRCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MzkxCi0KLTIwMTUtMDUtMTUgMTY6NTg6NTEgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RwdHBjbG9jay5jOgotCSAgcHRwOiBBZGQgI2RlZmluZXMgdG8gZW5hYmxlL2Rpc2FibGUgaW1wcm92ZW1lbnRzIGZvciB1bnJlbGlhYmxlIG5ldHdvcmtzCi0JICBXZSBzaG91bGQgZG8gc29tZSBtb3JlIG1lYXN1cmVtZW50cyB3aXRoIGFsbCB0aGVzZSBhbmQgY2hlY2sgaG93IG11Y2ggc2Vuc2UKLQkgIHRoZXkgbWFrZSBmb3IgUFRQLiBBbHNvIGVuYWJsaW5nIHRoZW0gbWVhbnMgbm90IGZvbGxvd2luZyBJRUVFMTU4OC0yMDA4IGJ5IHRoZQotCSAgbGV0dGVyIGFueW1vcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MzkxCi0KLTIwMTUtMDUtMTQgMTI6MTg6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LXB0cC1oZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9nc3RwdHBfcHJpdmF0ZS5oOgotCSogbGlicy9nc3QvbmV0L2dzdHB0cGNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suaDoKLQkqIGxpYnMvZ3N0L25ldC9uZXQuaDoKLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvcHRwLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy9wdHAvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9wdHAvcHRwLXByaW50LXRpbWVzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0bmV0LmRlZjoKLQkgIHB0cDogSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBhIFBUUCBjbG9jawotCSAgR3N0UHRwQ2xvY2sgaW1wbGVtZW50cyBhIFBUUCAoSUVFRTE1ODg6MjAwOCkgb3JkaW5hcnkgY2xvY2sgaW4KLQkgIHNsYXZlLW9ubHkgbW9kZSwgdGhhdCBhbGxvd3MgYSBHU3RyZWFtZXIgcGlwZWxpbmUgdG8gc3luY2hyb25pemUKLQkgIHRvIGEgUFRQIG5ldHdvcmsgY2xvY2sgaW4gc29tZSBzcGVjaWZpYyBkb21haW4uCi0JICBUaGUgUFRQIHN1YnN5c3RlbSBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBnc3RfcHRwX2luaXQoKSwgd2hpY2ggdGhlbgotCSAgc3RhcnRzIGEgaGVscGVyIHByb2Nlc3MgdG8gZG8gdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHZpYSB0aGUgUFRQCi0JICBwb3J0cy4gVGhpcyBpcyByZXF1aXJlZCBhcyBQVFAgbGlzdGVucyBvbiBwb3J0cyA8IDEwMjQgYW5kIHRodXMKLQkgIHJlcXVpcmVzIHNwZWNpYWwgcHJpdmlsZWdlcy4gT25jZSB0aGlzIGhlbHBlciBwcm9jZXNzIGlzIHN0YXJ0ZWQsIHRoZQotCSAgbWFpbiBwcm9jZXNzIHdpbGwgc3luY2hyb25pemUgdG8gYWxsIFBUUCBkb21haW5zIHRoYXQgYXJlIGRldGVjdGVkIG9uCi0JICB0aGUgc2VsZWN0ZWQgaW50ZXJmYWNlcy4KLQkgIGdzdF9wdHBfY2xvY2tfbmV3KCkgdGhlbiBhbGxvd3MgdG8gY3JlYXRlIGEgR3N0Q2xvY2sgdGhhdCBwcm92aWRlcyB0aGUKLQkgIFBUUCB0aW1lIGZyb20gYSBtYXN0ZXIgY2xvY2sgaW5zaWRlIGEgc3BlY2lmaWMgUFRQIGRvbWFpbi4gVGhpcyBjbG9jawotCSAgd2lsbCBvbmx5IHJldHVybiB2YWxpZCB0aW1lc3RhbXBzIG9uY2UgdGhlIHRpbWVzdGFtcHMgaW4gdGhlIFBUUCBkb21haW4KLQkgIGFyZSBrbm93bi4gVG8gY2hlY2sgdGhpcywgdGhlIEdzdFB0cENsb2NrOjppbnRlcm5hbC1jbG9jayBwcm9wZXJ0eSBhbmQKLQkgIHRoZSByZWxhdGVkIG5vdGlmeTo6Y2xvY2sgc2lnbmFsIGNhbiBiZSB1c2VkLiBPbmNlIHRoZSBpbnRlcm5hbCBjbG9jawotCSAgaXMgbm90IE5VTEwsIHRoZSBQVFAgZG9tYWluJ3MgdGltZSBpcyBrbm93bi4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHdhaXQKLQkgIGZvciB0aGlzIHdpdGggZ3N0X3B0cF9jbG9ja193YWl0X3JlYWR5KCkuCi0JICBUbyBnYXRoZXIgc3RhdGlzdGljcyBhYm91dCB0aGUgUFRQIGNsb2NrIHN5bmNocm9uaXphdGlvbiwKLQkgIGdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQoKSBjYW4gYmUgdXNlZC4gVGhpcyBnaXZlcyB0aGUKLQkgIGFwcGxpY2F0aW9uIHRoZSBwb3NzaWJpbGl0eSB0byBjb2xsZWN0IGFsbCBraW5kcyBvZiBzdGF0aXN0aWNzCi0JICBmcm9tIHRoZSBjbG9jayBzeW5jaHJvbml6YXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MzkxCi0KLTIwMTUtMDYtMDMgMTM6MTY6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBjbG9jazogQWRkIEdTVF9DTE9DS19GTEFHX05FRURTX1NUQVJUVVBfU1lOQyBhbmQgcmVsYXRlZCBBUEkKLQkgIGdzdF9jbG9ja193YWl0X2Zvcl9zeW5jKCksIGdzdF9jbG9ja19pc19zeW5jZWQoKSBhbmQgZ3N0X2Nsb2NrX3NldF9zeW5jZWQoKQotCSAgcGx1cyBhIHNpZ25hbCB0byBhc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgY2xvY2sgdG8gYmUgc3luY2VkLgotCSAgVGhpcyBjYW4gYmUgdXNlZCBieSBjbG9ja3MgdG8gc2lnbmFsIHRoYXQgdGhleSBuZWVkIGluaXRpYWwgc3luY2hyb25pemF0aW9uCi0JICBiZWZvcmUgdGhleSBjYW4gcmVwb3J0IGFueSB0aW1lLCBhbmQgdGhhdCB0aGlzIHN5bmNocm9uaXphdGlvbiBjYW4gYWxzbyBnZXQKLQkgIGNvbXBsZXRlbHkgbG9zdCBhdCBzb21lIHBvaW50LiBOZXR3b3JrIGNsb2NrcywgbGlrZSB0aGUgR1N0cmVhbWVyCi0JICBuZXRjbGllbnRjbG9jaywgTlRQIG9yIFBUUCBjbG9ja3MgYXJlIGV4YW1wbGVzIGZvciBjbG9ja3Mgd2hlcmUgdGhpcyBpcyB1c2VmdWwKLQkgIHRvIGhhdmUgYXMgdGhleSBjYW4ndCByZXBvcnQgYW55IHRpbWUgYXQgYWxsIGJlZm9yZSB0aGV5J3JlIHN5bmNlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkzOTEKLQotMjAxNS0wNi0wMyAxODowMzozNiArMTAwMCAgTWF0dGhldyBXYXRlcnMgPG1hdHRoZXdAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YWxsb2NhdG9yLmg6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IHByb3ZpZGUgYSBtZW1fdW5tYXAgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgZmxhZ3MgdG8gdW5tYXAKLQkgIFRoZXJlIGFyZSBnc3RtZW1vcnkncyBhdmFpbGFibGUgdGhhdCBvcGVyYXRlIGluIHR3byBtZW1vcnkgZG9tYWlucwotCSAgYW5kIG5lZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgYWNjZXNzIGJldHdlZW4gdGhlc2UgZG9tYWlucy4KLQkgIEltYWdpbmUgYSBzY2VuYXJpbyB3aGVyZSBlLmcuIHRoZSBHTE1lbW9yeSBpcyBtYXBwZWQgdHdpY2UgaW4gYm90aAotCSAgdGhlIEdQVSBhbmQgdGhlIENQVSBkb21haW4uICBPbiB1bm1hcCBvciBhIHN1YnNlcXVlbnQgbWFwLCBpdCB3b3VsZAotCSAgbGlrZSB0byBlbnN1cmUgdGhhdCB0aGUgbW9zdCByZWNlbnQgZGF0YSBpcyBhdmFpbGFibGUgaW4gdGhlIG1lbW9yeQotCSAgZG9tYWluIHJlcXVlc3RlZC4gIEVpdGhlciBieSBmbHVzaGluZyB0aGUgd3JpdGVzIGFuZC9vciBpbml0aWF0aW5nIGEKLQkgIERNQSB0cmFuc2Zlci4gIFdpdGhvdXQga25vd2luZyB3aGljaCBkb21haW4gaXMgYmVpbmcgdW5tYXBwZWQsIHRoZQotCSAgbWVtb3J5IGRvZXMgbm90IGtub3cgd2hlcmUgdGhlIG1vc3QgcmVjZW50IGRhdGEgaXMgdG8gdHJhbnNmZXIgdG8KLQkgIHRoZSBvdGhlciBtZW1vcnkgZG9tYWluLgotCSAgTm90ZTogdGhpcyBzdGlsbCBkb2VzIG5vdCBhbGxvdyBkb3duZ3JhZGluZyBhIG1lbW9yeSBtYXAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMzE5Ci0KLTIwMTUtMDYtMDIgMTY6MTQ6NTAgKzEwMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBnc3RfbWVtb3J5X3NoYXJlIG1heSBmYWlsIHRvIGV4Y2x1c2l2ZWx5IGxvY2sgdGhlIHBhcmVudCBtZW1vcnkKLQkgIE5vdyB0aGF0IGxvY2tpbmcgZXhjbHVzaXZlbHkgZG93cyBub3QgYWx3YXlzIHN1Y2NlZWQsIHdlIG5lZWQgdG8gc2lnbmFsCi0JICB0aGUgZmFpbHVyZSBjYXNlIGZyb20gZ3N0X21lbW9yeV9pbml0LgotCSAgUmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW4gQVBJIG9yIGZ1bmNpb25hbGl0eSBjaGFuZ2UgdG8gZ3N0X21lbW9yeV9pbml0LAotCSAgd29ya2Fyb3VuZCBieSBjaGVja2luZyBleGNsdXNpdml0eSBpbiB0aGUgY2FsbGluZyBjb2RlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDE3MgotCi0yMDE1LTA2LTAyIDAwOjIzOjM3ICsxMDAwICBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogbG9ja2luZyBtZW1vcnkgZXhjbHVzaXZlbHkgbWF5IGZhaWwKLQkgIEF0dGVtcHQgdG8gcmV0dXJuIGEgY29weSBvZiB0aGUgbWVtb3J5IGluc3RlYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMTcyCi0KLTIwMTUtMDUtMzEgMjE6MjU6MjMgKzEwMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIG1pbmlvYmplY3Q6IGRpc2FsbG93IGEgZG91YmxlIHdyaXRlL2V4Y2x1c2l2ZSBsb2NrCi0JICBnc3RfbWVtb3J5X2xvY2sgKG1lbSwgV1JJVEUgfCBFWENMVVNJVkUpOwotCSAgZ3N0X21lbW9yeV9sb2NrIChtZW0sIFdSSVRFIHwgRVhDTFVTSVZFKTsKLQkgIFN1Y2NlZWRzIHdoZW4gdGhlIHBhcnQtbWluaW9iamVjdC50eHQgZGVzaWduIGRvYyBzdWdnZXN0cyB0aGF0IHRoaXMgc2hvdWxkIGZhaWw6Ci0JICAiQSBnc3RfbWluaV9vYmplY3RfbG9jaygpIGNhbiBmYWlsIHdoZW4gYSBXUklURSBsb2NrIGlzIHJlcXVlc3RlZCBhbmQKLQkgIHRoZSBleGNsdXNpdmUgY291bnRlciBpcyA+IDEuIEluZGVlZCBhIEdzdE1pbmlPYmplY3Qgb2JqZWN0IHdpdGggYW4KLQkgIGV4Y2x1c2l2ZSBjb3VudGVyIDEgaXMgbG9ja2VkIEVYQ0xVU0lWRUxZIGJ5IGF0IGxlYXN0IDIgb2JqZWN0cyBhbmQgaXMKLQkgIHRoZXJlZm9yZSBub3Qgd3JpdGFibGUuIgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDE3MgotCi0yMDE1LTA2LTAyIDIwOjMyOjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IG1hdGNoIHJldHVybiB0eXBlIG9mIGdldF91cmlfdHlwZSgpIGltcGxlbWVudGF0aW9uIHRvIGRlY2xhcmF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMjkyCi0KLTIwMTUtMDYtMDMgMDA6MTI6MzYgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBnc3RidWZmZXI6IEFkZCBhIG5vdGUgYWJvdXQgbWV0YXMgbmVlZGluZyB0byBiZSBjb3BpZWQgbGFzdAotCi0yMDE1LTA1LTI3IDIyOjIzOjAwICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBJbXBsZW1lbnQgZ3N0X3ZhbHVlX2lzX3N1YnNldCgpIGZvciBmbGFnc2V0cwotCi0yMDE1LTA2LTAyIDE2OjMzOjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cHJvdGVjdGlvbi5jOgotCSAgY2hlY2s6IFVzZSBHU1RfQ0hFQ0tfTUFJTiBtYWNybwotCi0yMDE1LTA1LTIwIDIxOjE4OjA4ICswOTAwICBldW5oYWUgY2hvaSA8ZXVuaGFlMS5jaG9pQHNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmM6Ci0JICBkb3dubG9hZGJ1ZmZlcjogcmVsZWFzZSBsb2NrIGJlZm9yZSBwb3N0aW5nIG1zZwotCSAgdG8gYXZvaWQgdGhlIGRlYWRsb2NrIGluIHBsYXliaW4yLAotCSAgc2VuZCBtc2cgYWZ0ZXIgcmVsZWFzZSB0aGUgZG93bmxvYWQgYnVmZmVyIGxvY2suCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTM1Ci0KLTIwMTUtMDUtMzEgMjA6MjE6NDIgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBhZGQgbm90ZSBhYm91dCBtaXNzaW5nIGZpZWxkIGNyZWF0aW9uIG9uIF9zZXQoKQotCi0yMDE1LTA1LTMwIDEzOjAxOjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgdGVzdHM6IGZpeCBzb21lIGxlYWtzIGluIG5ldyBmbGFnc2V0IGNoZWNrcwotCi0yMDE1LTA1LTMwIDEyOjM5OjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuYzoKLQkgIHF1ZXVlYXJyYXk6IHJlbW92ZSBkdXBsaWNhdGUgYXNzaWdubWVudAotCSAgV2UndmUgYWxyZWFkeSBkb25lIHRoaXMgZWFybGllciBpbiB0aGUgZnVuY3Rpb24sCi0JICBhbmQgbm90aGluZyBoYXMgY2hhbmdlZCBzaW5jZSB3ZSBmaXJzdCByZWFkIGl0LgotCi0yMDE1LTA1LTI3IDE3OjIyOjI4ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdC9nc3QuYzogQWRkIGEgd2FybmluZyBhYm91dCBEbGxNYWluIHRvIHByZXZlbnQgbWlzdXNlCi0JICBEbGxNYWluIHNob3VsZCBub3QgYmUgcmVsaWVkIG9uIGZvciBhbnl0aGluZyBleGNlcHQgc3RvcmluZyB0aGUgRExMIGhhbmRsZS4KLQkgIEl0IHNob3VsZCBhbHNvIG5vdCBiZSBkZWZpbmVkIGZvciBzdGF0aWMgYnVpbGRzLCBidXQgZG9pbmcgc28gaXMgbm90Ci0JICBzdHJhaWdodGZvcndhcmQgYW5kIGlzIG1vc3RseSBoYXJtbGVzcywgc28gbGV0J3MganVzdCBhZGQgYSBjb21tZW50IGFib3V0IHRoYXQKLQkgIGZvciBub3cuCi0KLTIwMTUtMDUtMjcgMTM6NTQ6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JICBmdW5uZWw6IEltcHJvdmUgZGVidWcgb3V0cHV0IGEgYml0Ci0KLTIwMTUtMDUtMjYgMTQ6NDY6MTYgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKLQkgIGRvY3M6IGZpeCB0eXBvIGluIGRyYWZ0LWtsYXNzLnR4dAotCi0yMDE1LTA1LTI2IDE0OjAzOjI1ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2NvZGUtcmV2aWV3cy9SRUFETUU6Ci0JKiBkb2NzL2NvZGUtcmV2aWV3cy9nc3RiaW4uYy0xLjQxOgotCSAgY29kZS1yZXZpZXdzOiByZW1vdmUgb2Jzb2xldGUgY29kZSByZXZpZXdzCi0JICBUaGlzIG9ic29sZXRlIGZvbGRlciBoYXNuJ3QgYmVlbiB0b3VjaGVkIHNpbmNlIDIwMDEgYW5kIGhhcyBubyBwdXJwb3NlLiBJdAotCSAgY29uZnVzZXMgbmV3IGRldmVsb3BlcnMuCi0KLTIwMTUtMDUtMjUgMjE6MDI6MjggKzEwMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHVzZSB0aGUgc2xpZ2h0bHkgbW9yZSBjb3JyZWN0IHRha2Vfc2FtcGxlIGZvciBsYXN0LXNhbXBsZQotCSAgZ3N0X3ZhbHVlX3Rha2VfYnVmZmVyKCkgYW5kIGdzdF92YWx1ZV90YWtlX3NhbXBsZSgpIGJvdGggcmVzb2x2ZSB0bwotCSAgZ192YWx1ZV90YWtlX2JveGVkKCkuICBVc2UgdGhlIG1ldGhvZCB3aXRoIHRoZSBjb3JyZWN0IG5hbWUgaWYgd2UKLQkgIGV2ZXIgY2hhbmdlIHRoYXQuCi0KLTIwMTUtMDUtMjUgMTY6MjM6MzMgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9jYXBzbGlzdC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3R2YWx1ZTogQWRkIEdzdEZsYWdTZXQgdHlwZQotCSAgR3N0RmxhZ1NldCBpcyBhIG5ldyB0eXBlIGRlc2lnbmVkIGZvciBuZWdvdGlhdGluZyBzZXRzCi0JICBvZiBib29sZWFuIGNhcGFiaWxpdGllcyBmbGFncywgY29uc2lzdGluZyBvZiBhIDMyLWJpdAotCSAgZmxhZ3MgYml0ZmllbGQgYW5kIDMyLWJpdCBtYXNrIGZpZWxkLiBUaGUgbWFzayBmaWVsZAotCSAgaW5kaWNhdGVzIHdoaWNoIG9mIHRoZSBmbGFncyBiaXRzIGFuIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZQotCSAgYXMgc3BlY2lmaWMgdmFsdWVzLCBhbmQgd2hpY2ggaXQgZG9lc24ndCBjYXJlIGFib3V0LgotCSAgVGhpcyBhbGxvd3MgZWZmaWNpZW50IG5lZ290aWF0aW9uIG9mIGFycmF5cyBvZiBib29sZWFuCi0JICBjYXBhYmlsaXRpZXMuCi0JICBUaGUgc3RhbmRhcmQgc2VyaWFsaXNhdGlvbiBmb3JtYXQgaXMgRkxBR1M6TUFTSywgd2l0aAotCSAgZmxhZ3MgYW5kIG1hc2sgZmllbGRzIGV4cHJlc3NlZCBpbiBoZXhhZGVjaW1hbCwgaG93ZXZlcgotCSAgR3N0RmxhZ1NldCBoYXMgYSBnc3RfcmVnaXN0ZXJfZmxhZ3NldCgpIGZ1bmN0aW9uLCB3aGljaAotCSAgYXNzb2NpYXRlcyBhIG5ldyBHc3RGbGFnU2V0IGRlcml2ZWQgdHlwZSB3aXRoIGFuIGV4aXN0aW5nCi0JICBHRmxhZ3MgZ3R5cGUuIFdoZW4gc2VyaWFsaXppbmcgYSBHc3RGbGFnU2V0IHdpdGggYW4KLQkgIGFzc29jaWF0ZWQgc2V0IG9mIEdGbGFncywgaXQgYWxzbyBzZXJpYWxpemVzIGEgaHVtYW4tcmVhZGFibGUKLQkgIGZvcm0gb2YgdGhlIGZsYWdzIGZvciBlYXNpZXIgZGVidWdnaW5nLgotCSAgSXQgaXMgcG9zc2libGUgdG8gcGFyc2UgYSBHRmxhZ3Mgc3R5bGUgc2VyaWFsaXNhdGlvbiBvZiBhCi0JICBmbGFnc2V0LCB3aXRob3V0IHRoZSBoZXggcG9ydGlvbiBvbiB0aGUgZnJvbnQuIGllLAotCSAgK2ZsYWcxL2ZsYWcyL2ZsYWczK2ZsYWc0LCB0byBpbmRpY2F0ZSB0aGF0Ci0JICBmbGFnMSAmIGZsYWc0IG11c3QgYmUgc2V0LCBhbmQgZmxhZzIvZmxhZzMgbXVzdCBiZSB1bnNldCwKLQkgIGFuZCBhbnkgb3RoZXIgZmxhZ3MgYXJlIGRvbid0LWNhcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2MzczCi0KLTIwMTUtMDUtMjAgMjA6MTk6MjkgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogQWRkIGEgY29tcGFyaXNpb24gZnVuY3Rpb24gZm9yIEdzdFN0cnVjdHVyZXMKLQotMjAxNS0wNS0xOSAxNDozNDowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JICBuZXQ6IGtlZXAgR0NhbmNlbGxhYmxlIGZkIGFyb3VuZCBpbnN0ZWFkIG9mIHJlLWNyZWF0aW5nIGl0IGNvbnN0YW50bHkKLQkgIEp1c3QgY3JlYXRlIHRoZSBjYW5jZWxsYWJsZSBmZCBvbmNlIGFuZCBrZWVwIGl0IGFyb3VuZCBpbnN0ZWFkCi0JICBvZiBjcmVhdGluZy9jbG9zaW5nIGl0IGZvciBldmVyeSBzaW5nbGUgcGFja2V0LiBTaW5jZSB3ZSBzcGVuZAotCSAgbW9zdCB0aW1lIHdhaXRpbmcgZm9yIHBhY2tldHMsIGFuIGZkIGlzIGFsbG9jZWQgYW5kIGluIHVzZSBwcmV0dHkKLQkgIG11Y2ggYWxsIHRoZSB0aW1lIGFueXdheS4KLQotMjAxNS0wNS0xOCAxMjo1MjowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgUmV2ZXJ0ICJkb2M6IFdvcmthcm91bmQgZ3RrZG9jIGlzc3VlIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA0NjBhN2JmNjgyOTJkMDU3Yzc3ZTg0ZDFlYTg2YjhlNzNmYzA4MWYzLgotCSAgVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdGhlIGd0ay1kb2MgMS4yMyByZWxlYXNlLgotCSAgPHBhcmE+IGNhbm5vdCBjb250YWluIDxyZWZzZWN0Mj46Ci0JICBodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3RkZy9lbi9odG1sL3BhcmEuaHRtbAotCSAgaHR0cDovL3d3dy5kb2Nib29rLm9yZy90ZGcvZW4vaHRtbC9yZWZzZWN0Mi5odG1sCi0KLTIwMTUtMDUtMTEgMTA6NTI6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHNwYXJzZWZpbGUuYzoKLQkgIHNwYXJzZWZpbGU6IHNtYWxsIGNsZWFudXAKLQkgIFRoZSBlcnJvciBwYXRoIHVucmVmcyBmaWxlLT5maWxlIHNvIG1ha2Ugc3VyZSB3ZSBvbmx5IGdvIHRoZXJlIHdoZW4KLQkgIHRoZXJlIGlzIGEgbm9uLU5VTEwgZmlsZS0+ZmlsZS4KLQotMjAxNS0wNS0xNiAyMzoyOTowMyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkgIGRvYzogV29ya2Fyb3VuZCBndGtkb2MgaXNzdWUKLQkgIFdpdGggZ3RrZG9jIDEuMjIsIHRoZSBYTUwgZ2VuZXJhdG9yIGZhaWxzIHdoZW4gYSBpdGVtaXplZGxpc3QgaXMKLQkgIGZvbGxvd2VkIGJ5IGEgcmVmc2VjdDIuIFdvcmthcm91bmQgdGhlIGlzc3VlIGJ5IHdyYXBwaW5nIHRoZSByZWZzZWN0MgotCSAgaW50byBwYXJhLgotCi0yMDE1LTA1LTEzIDEzOjI4OjA1IC0wMzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgotCSAgZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6IG1pbm9yIGNvcnJlY3Rpb25zCi0KLTIwMTUtMDUtMTYgMTI6NTc6MTIgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jOgotCSAgdGltZWR2YWx1ZWNvbnRyb2xzb3VyY2U6IENoZWNrIHRoYXQgdGhlIG9ubHkgaXRlciBpcyB0aGUgZW5kIGl0ZXIgaW4gdGhlIEdTZXF1ZW5jZQotCSAgUHJldmlvdXMgcGF0Y2ggd2FzIGFzc3VtaW5nIHRoYXQgaWYgdGhlIHJldHVybmVkIGl0ZXIgd2FzIHRoZSBsYXN0IGl0ZXIKLQkgIHRoZSBHU2VxdWVuY2Ugd2FzIGVtcHR5LCB3aGljaCBpcyBvYnZpb3VzbHkgd3JvbmcuCi0KLTIwMTUtMDUtMTYgMTE6MTc6NDAgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jOgotCSAgdGltZWR2YWx1ZWNvbnRyb2xzb3VyY2U6IEZpeCByZW1vdmluZyBhbGwga2V5ZnJhbWVzLCBhbmQgYWRkaW5nIG9uZSBiYWNrCi0JICBXZSB3ZXJlIHNlZ2ZhdWx0aW5nIGJlY2F1c2UgZ19zZXF1ZW5jZV9zZWFyY2ggd2FzIHJldHVybmluZyB0aGUgaXRlcl9lbmQsCi0JICBhbmQgdGhhdCBpdGVyYXRvciBkb2VzIG5vdCBjb250YWluIGFueXRoaW5nIGFuZCB0aHVzIHNob3VsZCBub3QgYmUgdXNlZAotCSAgZGlyZWN0bHkKLQotMjAxNS0wNS0xNSAyMDo0NDowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JICBmYWtlc3JjOiBmaXggcHJvcGVydHkgZGVzY3JpcHRpb24KLQkgIFdlJ3JlIGVudGVycHJpc2Ugbm93IGZvbGtzLgotCi0yMDE1LTA1LTE1IDE0OjU3OjE0ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBidW1wIGNoYWluIGZ1bmN0aW9uIGNhbGwgbG9ncyBmcm9tIExPRyB0byBERUJVRwotCSAgVGhleSdyZSByZWFsbHkgdXNlZnVsIGNvbXBhcmVkIHRvIG90aGVyIExPRyBzdHVmZiBpbiB0aGVyZSwgc28KLQkgIHRoZXJlIGlzIHZhbHVlIGlzIGluY2x1ZGluZyB0aGVtIGFuZCBub3QgdGhlIHJlc3QuCi0KLTIwMTUtMDUtMTUgMTM6NDM6MTIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdG9iamVjdDogYWRkIGdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9yIGFuZCBkZXByZWNhdGUgcHJldmlvdXMgZnVuY3Rpb24KLQkgIFRoZSBvbGQgZ3N0X29iamVjdF9oYXNfYW5jZXN0b3Igd2lsbCBjYWxsIHRoZSBuZXcgY29kZS4gVGhpcyBlc3RhYmxpc2hlcyB0aGUKLQkgIHN5bWV0cnkgd2l0aCB0aGUgbmV3IGdzdF9vYmplY3RfaGFzX2FzX3BhcmVudC4KLQkgIEFQSTogZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IoKQotCi0yMDE1LTA1LTE1IDA4OjA1OjUwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3RvYmplY3Q6IHJlbmFtZSBnc3Rfb2JqZWN0X2hhc19wYXJlbnQgdG8gZ3N0X29iamVjdF9oYXNfYXNfcGFyZW50Ci0JICBUaGlzIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGEgcG90ZW50aWFsIHB1bmN0aW9uIHRoYXQgY2hlY2sgaWYgYSBnc3RvYmplY3QgaGFzLWEKLQkgIHBhcmVudC4KLQkgIEFQSTogZ3N0X29iamVjdF9oYXNfYXNfcGFyZW50KCkKLQotMjAxNS0wNS0xNCAxNTo0OTo0MyArMDgwMCAgSmlhbiA8Smlhbi5MaUBmcmVlc2NhbGUuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogRml4IFFvUy9sYXRlbmVzcyBjaGVja2luZyBpZiBzdWJjbGFzcyBpbXBsZW1lbnRzIHByZXBhcmUvcHJlcGFyZV9saXN0IHZmdW5jcwotCSAgSW4gYmFzZXNpbmsgZnVuY3Rpb25zIGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQoKSwgYmVsb3cgY29kZSBpcyB1c2VkIHRvCi0JICBjaGVja2luZyBpZiBidWZmZXIgaXMgbGF0ZSBiZWZvcmUgZG9pbmcgcHJlcGFyZSBjYWxsIHRvIHNhdmUgc29tZSBlZmZvcnQ6Ci0JICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykKLQkgIGxhdGUgPQotCSAgZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoYmFzZXNpbmssIG9iaiwgcnN0YXJ0LCByc3RvcCwKLQkgIEdTVF9DTE9DS19FQVJMWSwgMCwgRkFMU0UpOwotCSAgaWYgKEdfVU5MSUtFTFkgKGxhdGUpKQotCSAgZ290byBkcm9wcGVkOwotCSAgQnV0IHRoaXMgY29kZSBoYXMgcHJvYmxlbSwgaXQgc2hvdWxkIGNhbGN1bGF0ZSBqaXR0ZXIgYmFzZWQgb24gY3VycmVudCBtZWRpYQotCSAgY2xvY2ssIHJhdGhlciB0aGFuIGp1c3QgcGFzc2luZyAwLiBJIGZvdW5kIGl0IHdpbGwgZHJvcCBhbGwgdGhlIGZyYW1lcyB3aGVuCi0JICByZXdpbmQgaW4gc2xvdyBzcGVlZCwgc3VjaCBhcyAtMlguCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjU4Ci0KLTIwMTUtMDUtMTEgMTc6MTQ6NTAgKzAyMDAgIFbDrWN0b3IgTWFudWVsIErDoXF1ZXogTGVhbCA8dmphcXVlekBpZ2FsaWEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JICBmZHNyYzogZG9jczogZml4IGFuZCB1cGRhdGUgZG9jdW1lbnRhdGlvbgotCSAgVXBkYXRlIGV4YW1wbGUgdG8gdXNlIGdzdC1sYXVuY2gtMS4wIGFuZCBmaXggYSBwYXJhZ3JhcGguCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjMzCi0KLTIwMTUtMDUtMDkgMTE6NTM6NDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgQWRkIHJlbW92ZWQgZXhhbXBsZSBkaXJlY3RvcmllcyB0byBDUlVGVF9ESVJTCi0KLTIwMTUtMDUtMDggMTQ6MDg6NDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIGRvY3M6IGdzdC1sYXVuY2ggLT4gZ3N0LWxhdW5jaC0xLjAgaW4gZXhhbXBsZSBwaXBlbGluZXMKLQkgIEFuZCBzb21lIHNtYWxsIGV4YW1wbGUgcGlwZWxpbmUgZml4LXVwcy4KLQotMjAxNS0wNS0wOSAyMjoxMDozMCAtMDMwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWNvbnZlbnRpb25zLnR4dDoKLQkgIGRvY3MvZGVzaWduL3BhcnQtY29udmVudGlvbnMudHh0OiBtaW5vciBjb3JyZWN0aW9ucwotCi0yMDE1LTA1LTA5IDIyOjA0OjUyIC0wMzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtY29udGV4dC50eHQ6Ci0JICBkb2NzL2Rlc2lnbi9wYXJ0LWNvbnRleHQudHh0OiBtaW5vciBjb3JyZWN0aW9ucwotCi0yMDE1LTA1LTA5IDIyOjAxOjA0IC0wMzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDoKLQkgIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDogbWlub3IgY29ycmVjdGlvbnMKLQotMjAxNS0wNS0wMiAxNzoxNjozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgcG9ydGluZyBndWlkZXMgdG8gbWVudGlvbiBuZXcgZGV2aWNlIHByb2JpbmcgQVBJCi0KLTIwMTUtMDUtMDEgMjA6Mzc6MTggLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgotCSAgZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OiBtaW5vciBjb3JyZWN0aW9ucwotCi0yMDE1LTA1LTAxIDE4OjMyOjI2ICswOTAwICBKaW1teSBPaG4gPHlvbmdqaW4ub2huQGxnZS5jb20+Ci0KLQkqIGdzdC9nc3RldmVudC5oOgotCSAgZXZlbnQ6IHJlbW92ZSBkdXBsaWNhdGVkIGluY2x1ZGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg3MzkKLQotMjAxNS0wNC0yOCAxOTo1OTozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9sYXVuY2gvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2xhdW5jaC9tcDNwYXJzZWxhdW5jaC5jOgotCSogdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOgotCSogdGVzdHMvZXhhbXBsZXMvcXVldWUvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL3F1ZXVlL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvcXVldWUvcXVldWUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3R5cGVmaW5kLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL3R5cGVmaW5kLmM6Ci0JICB0ZXN0czogcmVtb3ZlIHNvbWUgcG9pbnRsZXNzIGFuY2llbnQgY29kZSBleGFtcGxlcwotCi0yMDE1LTA0LTI4IDE3OjU0OjUxICswMzAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggR1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkMKLQkgIFNpbmNlIGZyYW1lLT5wcml2LT5kaXNjb250IHdhcyBjbGVhcmVkIGVhcmxpZXIsCi0JICBHU1RfQkFTRV9QQVJTRV9GTEFHX0xPU1RfU1lOQyB3YXMgbmV2ZXIgYmVpbmcgc2V0LgotCSAgVGFrZSB0aGUgY2hhbmNlIHRvIHJlZmFjdG9yIHRoZSBmcmFtZSBjcmVhdGlvbiBhIGJpdCB0bwotCSAgb3JnYW5pemUgdGhlIGZsYWdzIHNldHRpbmcgYW5kIHJlc2V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODIzNwotCi0yMDE1LTAzLTA5IDE5OjMxOjM2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlc3BlY3QgRElTQ09OVCBmbGFnIG9uIGJ1ZmZlcnMKLQkgIERyYWluIHRoZSBwYXJzZXIgd2hlbiBhIERJU0NPTlQgYnVmZmVyIGlzIHJlY2VpdmVkIGFuZCB0aGVuIG1hcmsKLQkgIHRoZSBuZXh0IGJ1ZmZlciB0byBiZSBwdXNoZWQgYXMgYSBESVNDT05UIG9uZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTkyNwotCi0yMDE1LTA0LTI4IDE1OjUwOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgdGFnbGlzdDogQ29weSB0aGUgdGFnIHNjb3BlIHRvbyB3aGVuIGNvcHlpbmcgdGFnIGxpc3RzCi0KLTIwMTUtMDQtMjAgMjA6MDI6NTEgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5OiBBbHNvIHN5bmNocm9uaXplIEdBUCBldmVudHMgaW4gc3luYz0xCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxODUzCi0KLTIwMTUtMDQtMjAgMTk6MzE6MzcgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKLQkgIGlkZW50aXR5OiBXaXRoIHN5bmM9dHJ1ZSwgZG9uJ3QgcHJlLXJvbGwKLQkgIFRvIGFjdCBsaWtlIGEgcmVhbCBsaXZlIGVsZW1lbnQsIGJsb2NrIHRoZSBzdHJlYW1pbmcgd2hlbiBwYXVzZWQsIGFuZAotCSAgcmV0dXJuIE5PX1BSRVJPTEwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxODUzCi0KLTIwMTUtMDQtMjAgMTk6MjQ6NDUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKLQkgIGlkZW50aXR5OiBUYWtlIHVwc3RyZWFtIGxhdGVuY3kgaW50byBhY2NvdW50IGZvciBzeW5jPTEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDE4NTMKLQotMjAxNS0wNC0yMCAxOTowNzoyNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgaWRlbnRpdHk6IEhhbmRsZSBQVFMgYW5kIERUUyBzZXBhcmF0ZWx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxODUzCi0KLTIwMTUtMDQtMjYgMTc6MDU6NDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JKiBBbmRyb2lkLm1rOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgotCSogbGlicy9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogdG9vbHMvTWFrZWZpbGUuYW06Ci0JICBSZW1vdmUgb2Jzb2xldGUgQW5kcm9pZCBidWlsZCBjcnVmdAotCSAgVGhpcyBpcyBub3QgbmVlZGVkIGFueSBsb25nZXIuCi0KLTIwMTUtMDQtMjQgMTY6NTE6MjQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaDoKLQkgIGlucHV0c2VsZWN0b3I6IE9ubHkgdHJ5IHRvIHB1c2ggdGhlIGZpcnN0IEVPUyByZWNlaXZlZAotCSAgU3Vic2VxdWVudCBFT1Mgd2lsbCBwdXNoIG9uIHRoZSBzb3VyY2UgcGFkIHRoYXQgYWxyZWFkeSByZWNlaXZlZAotCSAgRU9TIGFuZCB0aGF0IHdpbGwgbWFrZSB0aGUgZXZlbnQgZnVuY3Rpb24gcmV0dXJuIEZBTFNFLiBJdCBuZWVkcwotCSAgb25seSB0byBwdXNoIHRoZSBmaXJzdCBvbmUgYW5kIG9ubHkgcmV0dXJuIFRSVUUgZm9yIHRoZSBzdWJzZXF1ZW50Ci0JICBvbmVzLgotCi0yMDE1LTA0LTI0IDE1OjE5OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cHJpbnRmLmM6Ci0JICB0ZXN0czogcHJpbnRmOiBhZGQgdW5pdCB0ZXN0IGZvciAlJQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODQxNAotCi0yMDE1LTA0LTI0IDE1OjE2OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcHJpbnRmL3Zhc25wcmludGYuYzoKLQkgIHByaW50ZjogZml4IGludmFsaWQgbWVtb3J5IGFjY2VzcyBpbiBjYXNlIG9mICUlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4NDE0Ci0KLTIwMTUtMDQtMjMgMTU6NTU6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGRlZmluZSBHU1RfQ0hFQ0tfVEVTVF9FTlZJUk9OTUVOVF9CRUFDT04KLQotMjAxNS0wNC0yMyAxNTo1NDowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBvcHRpb25hbGx5IGNoZWNrIGVudiB2YXIgZm9yIHVzIHRvIG1ha2Ugc3VyZSB0ZXN0IGVudiBpcyBzZXQgdXAKLQkgIElmIEdTVF9DSEVDS19URVNUX0VOVklST05NRU5UX0JFQUNPTiBpcyBkZWZpbmVkLCBjaGVjayBpZiB0aGUKLQkgIGVudmlyb25tZW50IHZhcmlhYmxlIGl0IGlzIGRlZmluZWQgdG8gaXMgc2V0IHVwIGF0IHRoZSBzdGFydAotCSAgb2YgZWFjaCB0ZXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvL3Nob3dfYnVnLmNnaT9pZD03NDc2MjQKLQotMjAxNS0wNC0yMyAwOTowNjo0MiArMDkwMCAgQ2hhbmdib2sgQ2hlYSA8Y2hhbmdib2suY2hlYUBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogUmVtb3ZlIHVudXNlZCBhc3NpZ25tZW50IGluIHBlcmZvcm1fc2VlaygpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4MzQ1Ci0KLTIwMTUtMDQtMjIgMTE6NDQ6MDAgKzA1MzAgIFByYXNoYW50IEdvdGFybmUgPHBzLmdvdGFybmVAc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIHRlc3Q6IG1lbW9yeTogQWRkZWQgdGVzdCB0byB2ZXJpZnkgdGhlIGFsbG9jYXRpb24gcGFyYW1zCi0JICBOZXcgdGVzdCBhZGRlZCB0byB2ZXJpZnkgdGhlIGFsbG9jYXRpb24gcGFyYW1zIGZvciB0aGUgbWVtb3J5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4Mjc3Ci0KLTIwMTUtMDQtMjIgMTE6MDQ6MDYgLTA2MDAgIEphc29uIExpdHppbmdlciA8amxpdHppbmdlckBjb250cm9sNC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6Ci0JICB0ZXN0czogaW5mbzogYWRkIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaW5maW5pdGUgbG9vcAotCSAgZ3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZSgpIHVzZWQgdG8gZ28gaW50byBhbgotCSAgaW5maW5pdGUgbG9vcCB3aGVuIHRoZXJlIHdhcyBtb3JlIHRoYW4gb25lIGNhdGVnb3J5IGluCi0JICB0aGUgbGlzdC4gIFRoaXMgdGVzdCBjYXB0dXJlcyB0aGUgcHJvYmxlbSBieSBmYWlsaW5nCi0JICB2aWEgdGltZW91dC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDgzMjEKLQotMjAxNS0wNC0yMiAxMjowMzozMyAtMDYwMCAgSmFzb24gTGl0emluZ2VyIDxqbGl0emluZ2VyQGNvbnRyb2w0LmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGdzdGluZm86IGZpeCBpbmZpbml0ZSBsb29wIGluIGdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUoKQotCSAgRW5zdXJlIGl0ZXJhdG9yIGlzIGFkdmFuY2VkLiBUaGUgY3VycmVudCBsaXN0IGl0ZXJhdGlvbiBjb2RlIG9ubHkKLQkgIGFkdmFuY2VzIHRoZSBpdGVyYXRvciAod2FsaykgaWYgYSBtYXRjaCBpcyBmb3VuZCwgd2hpY2ggcmVzdWx0cwotCSAgaW4gYW4gaW5maW5pdGUgbG9vcCB3aGVuIG1vcmUgdGhhbiBvbmUgZW50cnkgZXhpc3RzIGluIHRoZSBsaXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODMyMQotCi0yMDE1LTA0LTIyIDEwOjE0OjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzY3JpcHRzL2NyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaDoKLQkgIHNjcmlwdHM6IGNyZWF0ZS11bmluc3RhbGxlZC1zZXR1cDogbWlzY2VsbGFuZW91cyBmaXhlcwotCSAgRXJyb3Igb3V0IGlmIHJlcXVpcmVkIGJ1aWxkIHRvb2xzIChmbGV4LCBiaXNvbiwgcGtnLWNvbmZpZykKLQkgIGFyZSBub3QgcHJlc2VudCwgaW5zdGVhZCBvZiBwcmludGluZyBhIG1lc3NhZ2UgYW5kIHRoZW4KLQkgIGNvbnRpbnVpbmcuCi0JICBDaGVjayBvdXQgc3VibW9kdWxlcyB3aGVuIGZldGNoaW5nIHRoZSByZXBvc2l0b3JpZXMsIHNvCi0JICB0aGV5J3JlIGFscmVhZHkgdGhlcmUgYW5kIHJlYWR5IGxhdGVyLgotCSAgUmVtb3ZlIHNvbWUgMC4xMCBjcnVmdC4KLQotMjAxNS0wNC0yMiAwOTo1OToyNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogLmdpdGlnbm9yZToKLQkgIEFkZCBJTlNUQUxMIHRvIC5naXRpZ25vcmUKLQotMjAxNS0wNC0yMiAwOTo1Njo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKLQkgIHRlc3RzOiBlcnJvciBvdXQgaWYgdGVzdCBlbnZpcm9ubWVudCBpcyBub3QgYWN0dWFsbHkgc2V0IHVwIHByb3Blcmx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8vc2hvd19idWcuY2dpP2lkPTc0NzYyNAotCi0yMDE1LTA0LTIyIDA5OjUyOjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGNhbiB1c2UgQU1fU0lMRU5UX1JVTEVTIHVuY29uZGl0aW9uYWxseSBub3cKLQkgIGh0dHBzOi8vYXV0b3Rvb2xzLmlvL2F1dG9tYWtlL3NpbGVudC5odG1sCi0KLTIwMTUtMDQtMjIgMDk6NDc6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogYnVtcCBhdXRvbWFrZSByZXF1aXJlbWVudCB0byAxLjE0IGFuZCBhdXRvY29uZiB0byAyLjY5Ci0JICBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgZm9yIGJ1aWxkcyBmcm9tIGdpdCwgcGVvcGxlIGNhbiBzdGlsbAotCSAgYnVpbGQgdGFyYmFsbHMgaWYgdGhleSBvbmx5IGhhdmUgb2xkZXIgYXV0b3Rvb2xzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvL3Nob3dfYnVnLmNnaT9pZD03NDc2MjQKLQotMjAxNS0wNC0yMiAxMDozMjo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogSU5TVEFMTDoKLQkgIFJlbW92ZSBJTlNUQUxMIGZpbGUKLQkgIGF1dG90b29scyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoaXMsIGFuZCB3aGVuIHVzaW5nIGRpZmZlcmVudCB2ZXJzaW9ucwotCSAgZm9yIGF1dG9nZW4uc2ggdGhlcmUgd2lsbCBhbHdheXMgYmUgY2hhbmdlcyB0byBhIGZpbGUgdHJhY2tlZCBieSBnaXQuCi0KLTIwMTUtMDQtMjAgMjI6MDc6MzQgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3RyZWFtZXItdW5pbnN0YWxsZWQ6IFVwZGF0ZSBwYXRoIHRvIHRoZSBHc3RWYWxpZGF0ZSBzY2VuYXJpb3MKLQotMjAxNS0wNC0yMCAwOToyMzo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgbWV0YSB0cmFuc2Zvcm0gZnVuY3Rpb24gaW4gZ3N0X2J1ZmZlcl9jb3B5X2ludG8oKQotCSAgLi4uIGJ5IHByaW50aW5nIHNvbWUgZGVidWcgb3V0cHV0IHdoZW5ldmVyIGNvcHlpbmcgYSBHc3RNZXRhIGZhaWxzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODExOQotCi0yMDE1LTA0LTE4IDEyOjMxOjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGV2ZW50OiBmaXggaGVhZGVyIGZvcm1hdHRpbmcKLQotMjAxNS0wNC0xOCAxMjoyODoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHByb3RlY3Rpb24uYzoKLQkgIHRlc3RzOiBwcm90ZWN0aW9uOiBmaXggbGVhayBpbiB1bml0IHRlc3QKLQotMjAxNS0wNC0xOCAxMjoyNzo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdC5oOgotCSAgZ3N0Lmg6IGluY2x1ZGUgdGhlIG5ldyBnc3Rwcm90ZWN0aW9uLmggaGVhZGVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1OTkxCi0KLTIwMTUtMDQtMTUgMTU6MzM6MzEgKzAxMDAgIEFsZXggQXNobGV5IDxidWd6aWxsYUBhc2hsZXktZmFtaWx5Lm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0cHJvdGVjdGlvbi5jOgotCSogZ3N0L2dzdHByb3RlY3Rpb24uaDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cHJvdGVjdGlvbi5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBwcm90ZWN0aW9uOiBhZGQgR3N0UHJvdGVjdGlvbk1ldGEgdG8gc3VwcG9ydCBwcm90ZWN0ZWQgY29udGVudAotCSAgSW4gb3JkZXIgdG8gc3VwcG9ydCBzb21lIHR5cGVzIG9mIHByb3RlY3RlZCBzdHJlYW1zIChzdWNoIGFzIHRob3NlCi0JICBwcm90ZWN0ZWQgdXNpbmcgREFTSCBDb21tb24gRW5jcnlwdGlvbikgc29tZSBwZXItYnVmZmVyIGluZm9ybWF0aW9uCi0JICBuZWVkcyB0byBiZSBwYXNzZWQgYmV0d2VlbiBlbGVtZW50cy4KLQkgIFRoaXMgY29tbWl0IGFkZHMgYSBHc3RNZXRhIHR5cGUgY2FsbGVkIEdzdFByb3RlY3Rpb25NZXRhIHRoYXQgYWxsb3dzCi0JICBwcm90ZWN0aW9uIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGJlIGFkZGVkIHRvIGEgR3N0QnVmZmVyLiBBbiBleGFtcGxlCi0JICBvZiBpdHMgdXNhZ2UgaXMgcXRkZW11eCBwcm92aWRpbmcgaW5mb3JtYXRpb24gdG8gZWFjaCBvdXRwdXQgc2FtcGxlCi0JICB0aGF0IGVuYWJsZXMgYSBkb3duc3RyZWFtIGVsZW1lbnQgdG8gZGVjcnlwdCBpdC4KLQkgIFRoaXMgY29tbWl0IGFkZHMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIHNlbGVjdCBhIHN1cHBvcnRlZCBwcm90ZWN0aW9uCi0JICBzeXN0ZW0gZnJvbSB0aGUgaW5zdGFsbGVkIERlY3J5cHRpb24gZWxlbWVudHMgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LgotCSAgVGhlIGdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW0gZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBhcnJheSBvZgotCSAgaWRlbnRpZmllcnMgYW5kIHNlYXJjaGVzIHRoZSByZWdpc3RyeSBmb3IgYSBlbGVtZW50IG9mIGtsYXNzIERlY3J5cHRvciB0aGF0Ci0JICBzdXBwb3J0cyBvbmUgb3IgbW9yZSBvZiB0aGUgc3VwcGxpZWQgaWRlbnRpZmllcnMuIElmIG11bHRpcGxlIGVsZW1lbnRzCi0JICBhcmUgZm91bmQsIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCByYW5rIGlzIHNlbGVjdGVkLgotCSAgVGhpcyBjb21taXQgYWRkcyBhIHVuaXQgdGVzdCBmb3IgdGhlIGdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW0KLQkgIGZ1bmN0aW9uIHRoYXQgYWRkcyBhIGZha2UgRGVjcnlwdG9yIGVsZW1lbnQgdG8gdGhlIHJlZ2lzdHJ5IGFuZCB0aGVuCi0JICBjaGVja3MgdGhhdCBpdCBjYW4gY29ycmVjdGx5IGJlIHNlbGVjdGVkIGJ5IHRoZSB1dGlsaXR5IGZ1bmN0aW9uLgotCSAgVGhpcyBjb21taXQgYWRkcyBhIHVuaXQgdGVzdCBmb3IgR3N0UHJvdGVjdGlvbk1ldGEgdGhhdCBjcmVhdGVzCi0JICBHc3RQcm90ZWN0aW9uTWV0YSBhbmQgYWRkcyAmIHJlbW92ZXMgaXQgZnJvbSBhIGJ1ZmZlciBhbmQgcGVyZm9ybXMgc29tZQotCSAgc2ltcGxlIHJlZmVyZW5jZSBjb3VudCBjaGVja3MuCi0JICBBUEk6IGdzdF9idWZmZXJfYWRkX3Byb3RlY3Rpb25fbWV0YSgpCi0JICBBUEk6IGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YSgpCi0JICBBUEk6IGdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW0oKQotCSAgQVBJOiBnc3RfcHJvdGVjdGlvbl9tZXRhX2FwaV9nZXRfdHlwZSgpCi0JICBBUEk6IGdzdF9wcm90ZWN0aW9uX21ldGFfZ2V0X2luZm8oKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTk5MQotCi0yMDE1LTAzLTE2IDEyOjM1OjI3ICswMDAwICBBbGV4IEFzaGxleSA8YnVnemlsbGFAYXNobGV5LWZhbWlseS5uZXQ+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZXZlbnQ6IGFkZCBuZXcgR1NUX0VWRU5UX1BST1RFQ1RJT04KLQkgIEluIG9yZGVyIGZvciBhIGRlY3J5cHRlciBlbGVtZW50IHRvIGRlY3J5cHQgbWVkaWEgcHJvdGVjdGVkIHVzaW5nIGEKLQkgIHNwZWNpZmljIHByb3RlY3Rpb24gc3lzdGVtLCBpdCBmaXJzdCBuZWVkcyBhbGwgdGhlIHByb3RlY3Rpb24gc3lzdGVtCi0JICBzcGVjaWZpYyAgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IChFLmcuIGluZm9ybWF0aW9uIG9uIGhvdyB0byBhY3F1aXJlCi0JICB0aGUgZGVjcnlwdGlvbiBrZXlzKSBmb3IgdGhhdCBzdHJlYW0uCi0JICBUaGUgR1NUX0VWRU5UX1BST1RFQ1RJT04gZGVmaW5lZCBpbiB0aGlzIGNvbW1pdCBlbmFibGVzIHRoaXMgaW5mb3JtYXRpb24KLQkgIHRvIGJlIHBhc3NlZCBmcm9tIGVsZW1lbnRzIHRoYXQgZXh0cmFjdCBpdCAoZS5nLiBxdGRlbXV4LCBkYXNoZGVtdXgpIHRvCi0JICBlbGVtZW50cyB0aGF0IHVzZSBpdCAoRS5nLiBhIGRlY3J5cHRlciBlbGVtZW50KS4KLQkgIEFQSTogR1NUX0VWRU5UX1BST1RFQ1RJT04KLQkgIEFQSTogZ3N0X2V2ZW50X25ld19wcm90ZWN0aW9uKCkKLQkgIEFQSTogZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24oKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTk5MQotCi0yMDE1LTA0LTE4IDExOjQyOjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiBmaXggdXNlIG9mIHBvc3NpYmx5LWZyZWVkIHBhZCBpbiBkZWJ1ZyBzdGF0ZW1lbnQKLQkgIFRoZSBnc3Rfb2JqZWN0X3VucmVmKCkgaW4gdGhlIGJsb2NrIGFib3ZlIG1heSBiZSBkcm9wcGluZwotCSAgdGhlIGxhc3QgcmVmIHRvIHRoZSBwYWQgYW5kIGZyZWUgdGhlIHBhZC4gU2V0IHBhZCBwb2ludGVyCi0JICB0byBOVUxMIGhlcmUsIHNvIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHVzZSBhCi0JICBwb3NzaWJseS1mcmVlZCBwYWQgcG9pbnRlciBpbiB0aGUgZGVidWcgbG9nIHN0YXRlbWVudHMKLQkgIGZ1cnRoZXIgYmVsb3csIGFuZCBhbHNvIHVzZSB0aGUgdGVlIGVsZW1lbnQgYXMgbG9nIG9iamVjdAotCSAgc2luY2UgdGhhdCdzIG1vcmUgYXBwcm9wcmlhdGUgYW55d2F5LgotCSAgRml4ZXMgdmFsZ3JpbmQgd2FybmluZ3MgYW5kIGNyYXNoZXMgaW4gdGVlIHRlc3Rfc3RyZXNzCi0JICB1bml0IHRlc3Qgd2hlbiBkZWJ1ZyBsb2dnaW5nIGlzIGVuYWJsZWQuCi0KLTIwMTUtMDQtMTggMTI6MDA6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6Ci0JICB0ZXN0czogaW5mbzogZml4IHVuaXQgdGVzdCB3aGVuIHJ1biB3aXRoIEdTVF9ERUJVRz0qOjkKLQkgIE9ubHkgc2F2ZSB0aGUgbWVzc2FnZXMgd2UncmUgaW50ZXJlc3RlZCBpbiBhbmQgZXhwZWN0aW5nLgotCSAgV2hlbiBydW4gd2l0aCAqOjkgd2UgbWlnaHQgZ2V0IGFkZGl0aW9uYWwgVFJBQ0UgbGV2ZWwKLQkgIG1lc3NhZ2VzIGZyb20gb3RoZXIgY2F0ZWdvcmllcyBhbmQgdGhlbiB3ZSBkb24ndCBlbmQgdXAKLQkgIHdpdGggdGhlIG51bWJlciBvZiBtZXNzYWdlcyB3ZSBleHBlY3QuCi0KLTIwMTUtMDQtMTggMTE6MjU6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHRlc3RzOiBwYWQ6IGZpeCBidWZmZXIgbGVhayBpbiBuZXcgYmxvY2tpbmdfd2l0aF9wcm9iZV90eXBlX2lkbGUgdGVzdAotCi0yMDE1LTA0LTE4IDExOjExOjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB0ZXN0czogcGFkOiBmaXggaW52YWxpZCBtZW1vcnkgYWNjZXNzIGluIGRlYnVnIGxvZyBtZXNzYWdlCi0JICBUaGUgc3RyaW5nIHdlIHB1dCBpbiB0aGUgYnVmZmVyIGlzIG5vdCBOVUwtdGVybWluYXRlZCwgc28KLQkgIGRvbid0IHRyeSB0byBwcmludCB0aGF0IHZpYSAlcyBpbiBhIGRlYnVnIGxvZyBtZXNzYWdlLgotCi0yMDE1LTA0LTE3IDE1OjE5OjA3ICswMjAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW06Ci0JICBoZWxwZXJzOiBvbiBPU1gsIE1LRElSX1AgaXMgaW5zdGFsbC1zaCAtYyAtZAotCSAgU28gd2UgbmVlZCB0byBjYWxsIGl0IGJlZm9yZSBjZGluZyB0byB0aGUgYmluIGRpcmVjdG9yeS4KLQotMjAxNS0wNC0xNyAxMzowMjoxMiArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgotCSAgaGVscGVyczogaW5zdGFsbCAtRCBpc24ndCBwb3J0YWJsZSwgdXNlICQoTUtESVJfUCkgaW5zdGVhZC4KLQotMjAxNS0wNC0xNCAxMDo0NzoyMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB0ZXN0czogcGFkOiB0ZXN0IHRoYXQgaWRsZSBwcm9iZSB3aWxsIGJsb2NrCi0JICBUaGlzIHRlc3RzIGFkZCBhbiBpZGxlIHByb2JlIG9uIGFuIGlkbGUgcGFkIGZyb20gYSBzZXBhcmF0ZSB0aHJlYWQKLQkgIHNvIHRoYXQgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBpbW1lZGlhdGVsbHkuIFRoaXMgY2FsbGJhY2sgd2lsbCBzaXQKLQkgIHN0aWxsIGFuZCB0aGVuIHdlIHRyeSB0byBwdXNoIGEgYnVmZmVyIG9uIHRoaXMgc2FtZSBwYWQuIEl0IHZlcmlmaWVzCi0JICB0aGF0IHRoZSBpZGxlIHByb2JlIGJsb2NrcyBkYXRhIHBhc3NpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc4NTIKLQotMjAxNS0wNC0xNCAxNzowNjozNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGJsb2NrIGRhdGEgZmxvdyB3aGVuIGlkbGUgcHJvYmUgaXMgcnVubmluZwotCSAgV2hlbiBpZGxlIHByb2JlIHJ1bnMgZGlyZWN0bHkgZnJvbSB0aGUgZ3N0X3BhZF9hZGRfcHJvYmUoKSBmdW5jdGlvbgotCSAgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBubyBkYXRhIGZsb3cgaGFwcGVucyBhcyBpZGxlIHByb2JlCi0JICBpcyBhIGJsb2NraW5nIHByb2JlLiBUaGUgaWRsZSBwcm9iZSB3aWxsIHByZXZlbnQgdGhhdCBhbnkKLQkgIGJ1ZmZlciwgYnVmZmVybGlzdCBvciBzZXJpYWxpemVkIGV2ZW50cyBhbmQgcXVlcmllcyBhcmUgbm90Ci0JICBmbG93aW5nIHdoaWxlIGl0IGlzIHJ1bm5pbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3ODUyCi0KLTIwMTUtMDQtMTYgMTM6NDE6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R1cmkuYzoKLQkgIGRvY3M6IGNsYXJpZnkgdGhhdCByZXR1cm4gdmFsdWUgb2YgZ3N0X2ZpbGVuYW1lX3RvX3VyaSgpIG11c3QgYmUgZnJlZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcxMDQKLQotMjAxNS0wNC0xNSAxMTowMjo1NCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JICBiaW46IHVuZG8gdXB3YXJkIHN0YXRlIGNoYW5nZXMgb24gY2hpbGRyZW4gd2hlbiBhIGNoaWxkIGZhaWxzCi0JICBXaGVuIGEgYmluIGNoYW5nZXMgc3RhdGVzIHVwd2FyZHMsIGFuZCBhIGNoaWxkIGZhaWxzIHRvIGNoYW5nZSwKLQkgIGFueSBjaGlsZCB0aGF0IHdhcyBhbHJlYWR5IHN3aXRjaGVkIHdpbGwgbm90IGJlIHJlc2V0IHRvIGl0cwotCSAgb3JpZ2luYWwgc3RhdGUsIGxlYXZpbmcgaXRzIHN0YXRlIGluY29uc2lzdGVudCB3aXRoIHRoZSBiaW4sCi0JICB3aGljaCBkb2VzIG5vdCBjaGFuZ2Ugc3RhdGUgZHVlIHRvIHRoZSBmYWlsdXJlLgotCSAgSWYgdGhlIHN0YXRlIGNoYW5nZSB3YXMgZnJvbSBOVUxMIHRvIFJFQURZLCBpdCBtZWFucyB0aGF0IGRlbGV0aW5nCi0JICB0aGlzIGJpbiB3aWxsIGNhdXNlIHRob3NlIGNoaWxkcmVuIHRvIGJlIGRlbGV0ZWQgd2hpbGUgbm90IGluCi0JICBOVUxMIHN0YXRlLCB3aGljaCBpcyBhIEJhZCBUaGluZy4gRm9yIG90aGVyIHVwd2FyZCBjaGFuZ2VzLCBpdAotCSAgaXMgbGVzcyBvZiBhIHByb2JsZW0sIGFzIGEgc3Vic2VxdWVudCBzd2l0Y2ggYmFjayB0byBOVUxMIHdpbGwKLQkgIGNhdXNlIGFuIGFjdHVhbCBkb3dud2FyZHMgY2hhbmdlIG9uIHRob3NlIGluY29uc2lzdGVudCBlbGVtZW50cywKLQkgIGFsYmVpdCBmcm9tIHRoZSAid3JvbmciIHN0YXRlLgotCSAgV2Ugbm93IHJlc2V0IHN0YXRlIHRvIHRoZSBvcmlnaW5hbCBvbmUgd2hlbiBhIGNoaWxkIGZhaWxzLgotCSAgSW5jbHVkZXMgdW5pdCB0ZXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzYxMAotCi0yMDE1LTA0LTE1IDE0OjQ1OjIxICswMjAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW06Ci0JICBoZWxwZXJzOiB1c2UgJChJTlNUQUxMKSB0byAuLi4gaW5zdGFsbCB0aGUgaGVscGVyLgotCSAgQXMgaXQgd2lsbCBjcmVhdGUgdGhlIGZvbGRlcnMgYW5kIHNldCBwZXJtaXNzaW9ucyBhcHByb3ByaWF0ZWx5LAotCSAgYmV0dGVyIHRoYW4gZG9pbmcgaXQgbWFudWFsbHkuCi0KLTIwMTUtMDQtMTUgMTM6MDI6MzYgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLQotCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKLQkgIGhlbHBlcnM6IEZpeCBNYWtlZmlsZS5hbSB0byBpbnN0YWxsIHRoZSBjb21wbGV0aW9uLWhlbHBlciBjb3JyZWN0bHkuCi0JICArIFRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZCBhdCBpbnN0YWxsLWV4ZWMgdGltZSwgd2UgdGh1cyBuZWVkCi0JICB0byBtb3ZlIGl0IGluIGluc3RhbGwtZXhlYy1ob29rLCBub3QgaW5zdGFsbC1kYXRhLWhvb2suCi0KLTIwMTUtMDQtMTUgMTE6Mzg6MzUgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIFJldmVydCAiYmFzZXNyYzogZml4IHBvb2wgbGVhayBvbiBhbGxvY2F0aW9uIHF1ZXJ5IGVycm9yIHBhdGgiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDg0ZmRmNTBiMmY5ODk1MWEzMmZhMTQ4MDJiNjI2MjFmMTEwNWNkMzUuCi0JICBJdCBzZWVtcyB0aGUgYnVnIHdhcyBmaXhlZCBpbmRlcGVuZGVudGx5LCBhbmQgdGhlIG1lcmdlIHdhcwotCSAgYXV0b21hZ2ljLCB5aWVsZGluZyB0d28gZXh0cmEgZnJlZSBjYWxscy4KLQotMjAxNS0wNC0xNCAxMzo0Mjo1NSArMDkwMCAgU3Vod2FuZyBLaW0gPHN1aHdhbmcua2ltQGxnZS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjbG9jay5jOgotCSAgdGVzdHM6IGNsb2NrOiBmaXggdGVzdCBjbG9jayBuYW1lCi0JICBEb24ndCBjYWxsIHRoZSBzbGF2ZSB0ZXN0IGNsb2NrICJNYXN0ZXIiLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjQzMAotCi0yMDE1LTA0LTE0IDE3OjQ3OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSAgZWxlbWVudGZhY3Rvcnk6IGFkZCBFTkNSWVBUT1IgY2xhc3MgZGVmaW5lcwotCSAgdG8gZ28gd2l0aCBERUNSWVBUT1IuCi0KLTIwMTUtMDMtMTYgMTM6MTE6NTkgKzAwMDAgIEFsZXggQXNobGV5IDxidWd6aWxsYUBhc2hsZXktZmFtaWx5Lm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkgIGVsZW1lbnRmYWN0b3J5OiBhZGQgREVDUllQVE9SIGNsYXNzIGRlZmluZXMKLQkgIEFuIGVsZW1lbnQgdGhhdCBwZXJmb3JtcyBkZWNyeXB0aW9uIGRvZXMgbm90IG5hdHVyYWxseSBmaXQgd2l0aGluIGFueQotCSAgb2YgdGhlIGV4aXN0aW5nIGVsZW1lbnQgZmFjdG9yeSBjbGFzcyB0eXBlcy4gSXQgaXMgdXNlZnVsIHRvIGJlIGFibGUKLQkgIHRvIGVhc2lseSBnZXQgYSBsaXN0IG9mIGFsbCBlbGVtZW50cyB0aGF0IHN1cHBvcnQgZGVjcnlwdGlvbiBzbyB0aGF0Ci0JICBhIHVuaW9uIGNhbiBiZSBjb21wdXRlZCBiZXR3ZWVuIHRoZSBwcm90ZWN0aW9uIHN5c3RlbXMgdGhhdCBoYXZlIGEKLQkgIHN1cHBvcnRlZCBkZWNyeXB0b3IgYW5kIHRoZSBhbGxvd2VkIHByb3RlY3Rpb24gc3lzdGVtcyBmb3IgYSBwYXJ0aWN1bGFyCi0JICBzdHJlYW0uCi0JICBUaGlzIGNvbW1pdCBhZGRzIGEgbmV3IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNSWVBUT1IgYW5kIGl0cwotCSAgYXNzb2NpYXRlZCBzdHJpbmcgaWRlbnRpZmllciAiRGVjcnlwdG9yIi4gSXQgYWxzbyBhZGRzCi0JICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDUllQVE9SIHRvIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEUKLQkgIHNvIHRoYXQgdXJpZGVjb2RlYmluIGNhbiBhdXRvLXBsdWcgYSBkZWNyeXB0aW9uIGVsZW1lbnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1OTkxCi0KLTIwMTUtMDQtMTMgMTc6MDE6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZGVsZW1lbnQ6IFVzZSBnc3RfZXZlbnRfdW5yZWYoKSBpbnN0ZWFkIG9mIGdzdF9taW5pX29iamVjdF91bnJlZigpICsgY2FzdGluZwotCi0yMDE1LTA0LTEzIDE0OjQwOjIyICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBmaXggbGVhayBpbiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc3JjX2V2ZW50KCkKLQkgIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zcmNfZXZlbnQoKSBpcyBzdXBwb3NlZCB0byBjb25zdW1lIEBldmVudCBidXQgd2Fzbid0Ci0JICBkb2luZyBzbyB3aGVuIGl0IHdhcyBoYW5kbGluZyB0aGUgZXZlbnQgaXRzZWxmLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Nzc3NQotCSAgU2lnbmVkLW9mZi1ieTogR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLTIwMTUtMDQtMTEgMjA6NDQ6MDIgKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiByZXNldCBlcnJubyBiZWZvcmUgZ19hc2NpaV9zdHJ0b3VsbCBjYWxsCi0JICAiZXJybm8iIGFscmVhZHkgaGFzIG1lYW5pbmdsZXNzIHZhbHVlIGJlZm9yZSBnX2FzY2lpX3N0cnRvdWxsIGNhbGwuCi0JICBUaGlzIGNhdXNlcyBpbnZhbGlkIGVycm9yIGNoZWNrIHdpdGhvdXQgcmVzZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NjkwCi0KLTIwMTUtMDQtMTIgMTM6MTM6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogT25seSBzZXQgRFRTIHRvIHNlZ21lbnQuc3RhcnQgb24gdGhlIGZpcnN0IGJ1ZmZlciBpZiBzdWJjbGFzcyBkaWQgbm90IHByb3ZpZGUgUFRTCi0JICBPdGhlcndpc2Ugd2UncmUgZ29pbmcgdG8gc2V0IGEgcmF0aGVyIGFyYml0cmFyeSBEVFMgb2Ygc2VnbWVudC5zdGFydCAodXN1YWxseQotCSAgMCkgZm9yIGxpdmUgc291cmNlcywgd2hpY2ggY29uZnVzZXMgc3luY2hyb25pemF0aW9uIGlmIHRoZSBzb3VyY2Ugc3RhcnRlZAotCSAgY2FwdHVyaW5nIGF0IGEgbGF0ZXIgdGltZS4gQW5kIGl0J3MgZXNwZWNpYWxseSB3cm9uZyBmb3IgcmF3IG1lZGlhLCBmb3Igd2hpY2gKLQkgIHdlIHNob3VsZCBub3Qgc2V0IGFueSBEVFMgYXQgYWxsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzczMQotCi0yMDE0LTA5LTAyIDE3OjQwOjI4ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IFJ1biB0aGUgZGVmYXVsdCBoYXZlLXR5cGUgaGFuZGxlciBhZnRlciBhbGwgYXBwbGljYXRpb24gaGFuZGxlcnMKLQkgIE90aGVyd2lzZSB0aGUgQ0FQUyBldmVudCB3aWxsIGFscmVhZHkgYmUgZm9yd2FyZGVkIGRvd25zdHJlYW0gYW5kCi0JICB0aGUgYXBwbGljYXRpb24gaGFzIG5vIHdheSB0byBpbnRlcnZlbmUgYW55bW9yZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4OTYKLQotMjAxNS0wMy0xMCAxMjo1Nzo0NCArMTAwMCAgRHVuY2FuIFBhbG1lciA8ZHBhbG1lckBkaWdpc29mdC50dj4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBEb24ndCBhdXRvbWF0aWNhbGx5IGVudGVyIHRoZSBidWZmZXJpbmcgc3RhdGUgd2hlbiB1c2UtYnVmZmVyaW5nIGlzIHNldC4KLQkgIFRoZXJlIGlzIG5vIHJlYXNvbiBJIGNhbiBzZWUgdG8gc2V0IG1xLT5idWZmZXJpbmcgPSBUUlVFIHdoZW4KLQkgIHVzZV9idWZmZXJpbmcgaXMgc2V0OyB0aGUgY29kZSBoZXJlIGFsc28gY2FsbHMgdXBkYXRlX2J1ZmZlcmluZygpLCB3aGljaAotCSAgd2lsbCBzZXQgbXEtPmJ1ZmZlcmluZyA9IFRSVUUgaWYgdGhpcyBpcyB3YXJyYW50ZWQgYmVjYXVzZSBvZiBsb3cgYnVmZmVyCi0JICBsZXZlbHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1OTM3Ci0KLTIwMTUtMDQtMTAgMTI6MzI6MjcgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IGZpeCBjYWNoZWQgYnVmZmVyIGxlYWsgaW4gY2hhaW4gZnVuY3Rpb24KLQkgIGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4oKSB3YXMgcG9wcGluZyBjYWNoZWQgYnVmZmVycyBvdXQgb2YgdGhlIHF1ZXVlIHdpdGhvdXQKLQkgIGZyZWVpbmcgdGhvc2UuIE1ha2Ugc3VyZSB3ZSBkb24ndCBzdGVhbCB0aGUgR3N0QnVmZmVyIGFzIHRoZSBjYWNoZWQgYnVmZmVyIHJlZgotCSAgaGFzIGJlZW4gcGFzc2VkIHRvIHRoZSBwYWQgY2hhaW4gZnVuY3Rpb24uCi0JICBUaGlzIGNhbiBiZSByZXByb2R1Y2VkIGJ5IHJ1bm5pbmcgdGhlCi0JICB2YWxpZGF0ZS5maWxlLnBsYXliYWNrLnN3aXRjaF9zdWJ0aXRsZV90cmFja193aGlsZV9wYXVzZWQudGVzdDVfbWt2IHNjZW5hcmlvCi0JICB3aXRoIFZhbGdyaW5kLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzYxMQotCSAgU2lnbmVkLW9mZi1ieTogR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLTIwMTUtMDQtMDggMTY6MDQ6MTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbW1vbjoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IFVzZSBBTV9URVNUU19FTlZJUk9OTUVOVAotCSAgTmVlZGVkIGJ5IHRoZSBuZXcgYXV0b21ha2UgdGVzdCBydW5uZXIKLQotMjAxNS0wNC0wNyAxNTowMDo0NiArMDUzMCAgUHJhc2hhbnQgR290YXJuZSA8cHMuZ290YXJuZUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkgIGJ1ZmZlcmxpc3Q6IG1ha2Ugc3VyZSBsaXN0IGlzIHdyaXRhYmxlIGJlZm9yZSBhZGRpbmcgb3IgcmVtb3ZpbmcgYnVmZmVycwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzQzOQotCi0yMDE1LTA0LTA3IDE0OjM0OjU4ICswNTMwICBQcmFzaGFudCBHb3Rhcm5lIDxwcy5nb3Rhcm5lQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgYnVmZmVybGlzdDogbWlub3IgZG9jcyBhZGRpdGlvbiBmb3IgZ3N0X2J1ZmZlcl9saXN0X2dldCgpCi0JICBSZXR1cm4gYnVmZmVyIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcyBsaXN0IGlzIHZhbGlkCi0JICBhbmQgYnVmZmVyIGlzIG5vdCByZW1vdmVkIGZyb20gbGlzdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0MzgKLQotMjAxNS0wNC0wNyAxMTozODozMSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZml4IHBvb2wgbGVhayBvbiBhbGxvY2F0aW9uIHF1ZXJ5IGVycm9yIHBhdGgKLQkgIEl0IGNvdWxkIGJlIHRyaWdnZXJlZCBieToKLQkgIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz0yMCAhIHZpZGVjcm9wIGJvdHRvbT0yMTQ3NDgzNjQgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0JICBTcG90dGVkIHdoaWxlIHRlc3Rpbmc6Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzOTEwCi0KLTIwMTUtMDQtMDYgMTg6NDU6MzcgLTA3MDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZvcndhcmQgU0VHTUVOVF9ET05FIGV2ZW50cyBpbW1lZGlhdGVseQotCSAgVGhlcmUgbWlnaHQgYmUgbm8gbW9yZSBkYXRhIGNvbWluZyBhZnRlcndhcmRzLCBhbmQgd2UganVzdCBkcmFpbmVkIGV2ZXJ5dGhpbmcKLQkgIHRoYXQgd2FzIGxlZnQgdG8gYmUgcHVzaGVkIGFueXdheS4KLQotMjAxNS0wNC0wNiAxODo1NjoyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGRvY3M6IGZpeCBjcm9zcy1yZWZlcmVuY2UgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIEdzdEluZm8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0MTYKLQotMjAxNS0wNC0wNiAxMDoxODoxNSArMDUzMCAgUHJhc2hhbnQgR290YXJuZSA8cHMuZ290YXJuZUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBhZGQgY2hlY2sgZm9yIHdyaXRhYmxpdHkgaW4gcmVzaXplCi0JICBBZGQgZ3VhcmQgdG8gZ3N0X21lbW9yeV9yZXNpemUoKSB0byBtYWtlIHN1cmUgdGhlCi0JICBtZW1vcnkgdG8gYmUgcmVzaXplZCBpcyBhY3R1YWxseSB3cml0YWJsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDczOTIKLQotMjAxNS0wNC0wNSAxNjo0NzoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSAgdGVzdHM6IG11bHRpcXVldWU6IGFkZCB0ZXN0IHRvIG1ha2Ugc3VyZSBpbml0aWFsIGV2ZW50cyBnbyB0aHJvdWdoIHdpdGhvdXQgYnVmZmVycwotCi0yMDE1LTA0LTA1IDE2OjA2OjQ0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgotCSAgdGVzdHM6IHF1ZXVlOiBjaGVjayB0aGF0IHRoZSBpbml0aWFsIGV2ZW50cyBhcmUgc2VudCBvbiBpbW1lZGlhdGVseQotCSAgQWRkIGEgY2hlY2sgdGhhdCBtYWtlcyBzdXJlIHN0cmVhbS1zdGFydCwgY2FwcywgYW5kIHNlZ21lbnQgZXZlbnRzCi0JICBhcmUgcGFzc2VkIG9uIGJ5IHF1ZXVlIHdpdGhvdXQgZGVsYXksIGkuZS4gZXZlbiBpZiBubyBidWZmZXIgaXMKLQkgIHNlbnQuCi0KLTIwMTUtMDQtMDQgMTg6MzM6MTggLTA3MDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogUHJpbnQgZGVidWcgb3V0cHV0IGZyb20gZ3N0X3BhZF9saW5rX2Z1bGwoKSBpZiBwcmVwYXJpbmcgbGlua2luZyBmYWlsZWQKLQkgIE1ha2VzIGl0IGVhc2llciB0byBmaW5kIGxpbmtpbmcgZmFpbHVyZXMgaW4gZGVidWcgbG9ncy4KLQotMjAxNS0wNC0wNCAxOToyOTo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIHNlZ21lbnQ6IHNtYWxsIGRvY3MgYWRkaXRpb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTA1NjQKLQotMjAxNS0wNC0wNCAxODoxODowMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1zdHJlYW1zLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKLQkgIGRvY3M6IGRlc2lnbjogZml4IHNvbWUgMC4xMC1pc21zIGluIEdzdFNlZ21lbnQgZG9jcwotCSAgMSkgc2VnbWVudC5hY2N1bSAtPiBzZWdtZW50LmJhc2UKLQkgIDIpIFJlZmVyIHRvIEdzdFNlZ21lbnQgbWVtYmVycyBhcyBTLmZvbyBpbnN0ZWFkIG9mCi0JICBOUy5mb28sIHRoZSBldmVudCBpcyBub3cgY2FsbGVkIGEgc2VnbWVudCBldmVudAotCSAgcmF0aGVyIHRoYW4gbmV3c2VnbWVudCBldmVudC4KLQkgIDMpIFRoZXJlJ3Mgbm8gbW9yZSBhYnNfcmF0ZSBmaWVsZCBpbiBHc3RTZWdtZW50LAotCSAgYW5kIHRoZXJlIG5ldmVyIHdhcyBhbiBhYnNfYXBwbGllZF9yYXRlIGZpZWxkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDU2NAotCi0yMDE1LTA0LTA0IDA0OjE0OjUwICswMzAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGRvIG5vdCBsZWFrIGJ1ZmZlciBwb29sIGluIGVycm9yIGNhc2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDczMjEKLQotMjAxNS0wNC0wMyAxOToxMjo0OCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IFNpbGVuY2UgYSBjb21waWxlciB3YXJuaW5nCi0JICBUaGlzIGlzIGEgZmFsc2UgcG9zaXRpdmUgZm9yIHVzZSBpbml0aWFsaXplZC4gVGhlIHZhcmlhYmxlIGlzIHNldCBhbmQKLQkgIHVzZWQgZW5jbG9zZWQgaW4gdGhlIHNhZmUgaWYgY29uZGl0aW9uLgotCi0yMDE1LTA0LTAzIDE2OjMyOjE2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2M6IEFkZCBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbAotCi0yMDE1LTA0LTAzIDEzOjE5OjEzIC0wNzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IEZpeCBkb2N1bWVudGF0aW9uLCBidWZmZXIgcG9vbHMgYXJlIHVucmVmZmVkIGFuZCBub3QgZnJlZWQKLQotMjAxNS0wNC0wMyAyMDo0MzoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogSU5TVEFMTDoKLQkgIFVwZGF0ZSBJTlNUQUxMIHRvIHRoZSBhdXRvbWFrZSAxLjE0IHZlcnNpb24KLQotMjAxNS0wNC0wMyAxODo1NzozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBiYzc2YThiIHRvIGM4ZmIzNzIKLQotMjAxNS0wNC0wMyAxNjoyNzoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogZml4IGV4cG9ydHMKLQotMjAxNS0wMy0xOSAxMDo0NTo1NiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc2VnbWVudDogYWRkIGdzdF9zZWdtZW50X2lzX2VxdWFsCi0JICBJdCBiZWF0cyBtZW1jbXAgZHVlIHRvIHRoZSAncmVzZXJ2ZWQnIGZpZWxkcy4KLQkgIEFQSTogZ3N0X3NlZ21lbnRfaXNfZXF1YWwoKQotCSAgRm91bmQgdmlhLCBidXQgcHJvYmFibHkgbm90IGRpcmVjdGx5IGxpbmtlZCB0bywKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzgyMTYKLQotMjAxNS0wNC0wMyAwMDozNjo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogYWRkIG5ldyBBUEkgdG8gZXhwb3J0cwotCi0yMDE0LTA4LTA2IDEwOjMyOjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGFsbG93IHByb2JlcyB0byByZW1vdmUgdGhlIGRhdGEgaXRlbSB3aGlsc3QgcmV0dXJuaW5nIFBST0JFX09LCi0JICBVc2UgY2FzZTogd2Ugd2FudCB0byBibG9jayB0aGUgc291cmNlIHBhZCBvZiBhIGxlYWt5IHF1ZXVlIGFuZAotCSAgZHJvcCB0aGUgYnVmZmVyIHRoYXQgY2F1c2VzIHRoZSBibG9jay4gSWYgd2UgcmV0dXJuIFBST0JFX0RST1AKLQkgIHRoZW4gdGhlIGJ1ZmZlciBnZXRzIGRyb3BwZWQsIGJ1dCB3ZSBnZXQgY2FsbGVkIGFnYWluLiBJZiB3ZQotCSAgcmV0dXJuIFBST0JFX09LIHdlIGNhbid0IGVhc2lseSBkcm9wIHRoZSBidWZmZXIuIElmIHdlIGp1c3QKLQkgIHJlcGxhY2UgdGhlIGl0ZW0gaW50byB0aGUgR3N0UGFkUHJvYmVJbmZvIHN0cnVjdHVyZSB3aXRoIE5VTEwsCi0JICBHU3RyZWFtZXIgd2lsbCBwdXNoIGEgTlVMTCBidWZmZXIgdG8gdGhlIG5leHQgZWxlbWVudCB3aGVuIHdlCi0JICB1bmJsb2NrIHRoZSBwYWQgcHJvYmUuIFRoaXMgcGF0Y2ggZW5zdXJlcyBpdCBkb2Vzbid0IGRvIHRoYXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MzQyCi0KLTIwMTUtMDItMTIgMTk6Mzk6NDQgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBEb2N1bWVudCB3aGVuIGEgY2xvY2sgaXMgYXZhaWxhYmxlIGZyb20gZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQ0NDIKLQotMjAxNS0wMi0xMiAxOTo0MDowNiAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSogZ3N0L2dzdHBpcGVsaW5lLmg6Ci0JICBwaXBlbGluZTogQWRkIGJpbmRpbmcgZnJpZW5kbHkgZ3N0X3BpcGVsaW5lX2dldF9waXBlbGluZV9jbG9jaygpCi0JICBBbHNvIHNraXAgZ3N0X3BpcGVsaW5lX2dldF9jbG9jaygpIGFuZCBnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrKCkgZnJvbSB0aGUKLQkgIGJpbmRpbmdzIGFzIHRoZXkgYXJlIGNvbmZ1c2VkIHdpdGggZ3N0X2VsZW1lbnRfKl9jbG9jaygpLgotCSAgQVBJOiBnc3RfcGlwZWxpbmVfZ2V0X3BpcGVsaW5lX2Nsb2NrKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQ0NDIKLQotMjAxNS0wNC0wMiAxNzozMjo0MiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEFkZCBTaW5jZSBtYXJrIGZvciBuZXcgbWV0aG9kCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0NDI0Ci0KLTIwMTUtMDItMjAgMTc6NTA6NDggKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBiYXNldHJhbnNmb3JtOiBBZGQgYSBtZXRob2QgdG8gbGV0IHN1YmNsYXNzZXMgY2xlYW5seSB1cGRhdGUgc3JjcGFkIGNhcHMKLQkgIEFQSToKLQkgIGdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfc3JjCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0NDI0Ci0KLTIwMTUtMDQtMDIgMjE6MTg6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sOgotCSogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgotCSAgZG9jczogcHdnOiBmaXggbWlzc2luZyBjb21tYSBhbmQgMC4xMC1pc20gaW4gY29kZSBzYW1wbGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcyNjcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcyNjYKLQotMjAxNS0wNC0wMiAxOToyOTo0NiArMDMwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBpbXByb3ZlIGRvY3MgZm9yIF9jb3B5KCkgYW5kIF9zaGFyZSgpCi0KLTIwMTUtMDQtMDIgMTE6NDI6MjAgKzA1MzAgIFByYXNoYW50IEdvdGFybmUgPHBzLmdvdGFybmVAc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6Ci0JICB0ZXN0OiBmaWxlc2luazogYWRkIHRlc3RzIGZvciBidWZmZXJzIHdpdGggbXVsdGlwbGUgbWVtb3J5IGJsb2NrcwotCSAgVXBkYXRlIHRlc3Rfc2Vla2luZyB0ZXN0Y2FzZSB0byB2ZXJpZnkgdGhlIHJlbmRlciBhbmQgcmVuZGVyX2xpc3QKLQkgIHZpcnR1YWwgbWV0aG9kIGhhbmRsZSBidWZmZXJzIGFuZCBidWZmZXIgbGlzdCBjb250YWluaW5nIG11bHRpcGxlCi0JICBtZW1vcnkgYmxvY2tzIGNvcnJlY3RseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcyMjMKLQotMjAxNS0wNC0wMiAwOTo0NDozMyArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgZWxlbWVudDogQWRkIGEgRklYTUUgZm9yIDIuMCBhYm91dCByZXF1ZXN0X25ld19wYWQgVlMgcmVxdWVzdF9wYWQgbmFtaW5nCi0KLTIwMTUtMDQtMDIgMDk6MzQ6MDAgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IEZpeCByZXF1ZXN0X25ld19wYWQgaW50cm9zcGVjdGlvbgotCSAgTWFya2luZyBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCBhcyB0aGUgY2FsbGVyIG9mIHRoZSAtPnJlcXVlc3RfbmV3X3BhZAotCSAgdmlydHVhbCBtZXRob2QuCi0KLTIwMTUtMDQtMDEgMDk6MjA6MjQgKzA1MzAgIFByYXNoYW50IEdvdGFybmUgPHBzLmdvdGFybmVAc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6Ci0JICB0ZXN0czogZmlsZXNpbms6IGFkZCBjaGVjayBmb3IgcmVuZGVyX2xpc3QgdmlydHVhbCBtZXRob2QKLQkgIEdzdEZpbGVTaW5rIGltcGxlbWVudHMgdGhlIHJlbmRlcl9saXN0IHZpcnR1YWwgbWV0aG9kIHRvIHJlbmRlcgotCSAgYSBsaXN0IG9mIGJ1ZmZlcnMuIFVwZGF0ZSB0aGUgdGVzdF9zZWVraW5nIHRlc3QgY2FzZSB0byBhbHNvCi0JICBjaGVjayB0aGUgcmVuZGVyX2xpc3QgbWV0aG9kIGltcGxlbWVudGF0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzEwMAotCi0yMDE1LTA0LTAxIDEyOjEzOjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogbmljZXIgcHJpbnRpbmcgb2YgY2FwcyBmZWF0dXJlcwotCSAgT25seSBwcmludCBpbnRlcmVzdGluZyBjYXBzIGZlYXR1cmVzLCBkb24ndAotCSAgYXBwZW5kIChtZW1vcnk6U3lzdGVtTWVtb3J5KSB0byBhbGwgY2FwcywKLQkgIHdoaWNoIG1ha2VzIHRoZW0gbXVjaCBtb3JlIHVud2llbGR5IGFuZAotCSAgaGFyZGVyIHRvIHJlYWQuIEFsc28gdXNlIGludGVybmFsIGZ1bmN0aW9uCi0JICB0byBnZXQgY2FwcyBmZWF0dXJlcyBzbyB0aGF0IG91ciBwcmludGluZwotCSAgaGFzIG5vIHNpZGUgZWZmZWN0cyBvbiB0aGUgY2Fwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY4MDkKLQotMjAxNS0wMy0yNiAxMzowNTo1NyArMDEwMCAgTHVib3N6IFNhcm5lY2tpIDxsdWJvc3ouc2FybmVja2lAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogcGxvdCBjYXBzIGZlYXR1cmVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2ODA5Ci0KLTIwMTUtMDMtMzEgMjM6NDg6MjIgKzA5MDAgIFdvbmNodWwgTGVlIDxjaHVsMDgxMkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogRml4IGEgdHlwbyBpbiBhIGRvY3N0cmluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzExOQotCi0yMDE1LTAzLTMxIDExOjE1OjEwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgaW50cm9zcGVjdGlvbjogRG9uJ3QgdXNlIGctaXItc2Nhbm5lciBjYWNoZSBhdCBjb21waWxlIHRpbWUKLQkgIEl0IHBvbGx1dGVzIHVzZXIgZGlyZWN0b3JpZXMgYW5kIHdlIGRvbid0IG5lZWQgdG8gY2FjaGUgaXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcwOTUKLQotMjAxNS0wMy0yOCAxNDo0NTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBmaXggb3V0ZGF0ZWQgZGVidWcgbWVzc2FnZQotCSAgQnVmZmVyIGxpc3RzIGRvbid0IGhhdmUgZ3JvdXBzIGFueSBtb3JlIGluIDEuMAotCi0yMDE1LTAzLTI3IDE4OjIwOjM3IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogRmx1c2gtc3RvcCBzdGFydHMgbGl2ZSB0YXNrIGluIHBhdXNlZAotCSAgVGhlIGZsdXNoLXN0b3AgZXZlbnQgc2hvdWxkIG5vdCByZXN0YXJ0IHRoZSB0YXNrIGZvciBsaXZlIHNvdXJjZXMgdW5sZXNzCi0JICB0aGUgZWxlbWVudCBpcyBwbGF5aW5nLiBUaGlzIHdhcyBicmVha2luZyBzZWVrcyBpbiBwYXVzZSB3aXRoIHRoZSBydHBzcmMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NzAxCi0KLTIwMTUtMDMtMjcgMTY6MjM6NDAgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6Ci0JICB0ZXN0czogY2hlY2sgbG9jYXRpb24gaXNuJ3QgdHJ1bmNhdGVkCi0JICBUZXN0IGNvdmVyaW5nIHRoZSByZWNlbnQgY29tbWl0IHdoZXJlIGxvY2F0aW9uPSciLmFiYycgd29uJ3QgZ2V0IHRydW5jYXRlZAotCSAgdG8gJy5hYicgYW55bW9yZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4ODYyNQotCi0yMDE1LTAzLTI2IDE3OjAxOjA2ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IG9ubHkgdW53cmFwIHN0cmluZyBkZWxpbWl0ZWQgd2l0aCAiCi0JICBEb24ndCB1bndyYXAgc3RyaW5ncyB0aGF0IHN0YXJ0IGJ1dCBkb24ndCBmaW5pc2ggd2l0aCBhIGRvdWJsZSBxdW90ZS4gSWYgYQotCSAgc3RyaW5nIGlzIGRlbGltaXRlZCBieSB0d28gcXVvdGVzIHdlIHVuZXNjYXBlIHRoZW0gYW5kIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMKLQkgIGluIHRoZSBtaWRkbGUgKGxpa2UgXCIgb3IgXFwpLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9yIHRoZSBsYXN0IGNoYXJhY3RlcgotCSAgYXJlbid0IGEgcXVvdGUgd2UgYXNzdW1lIGl0J3MgcGFydCBvZiBhbiB1bmVzY2FwZWQgc3RyaW5nLgotCSAgTW92ZWQgc29tZSBkZXNlcmlhbGl6ZV9zdHJpbmcgdW5pdCB0ZXN0cyBiZWNhdXNlIHdlIGRvbid0IHRyeSB0byB1bndyYXAgc3RyaW5ncwotCSAgbWlzc2luZyB0aGF0IHNlY29uZCBxdW90ZSBhbnltb3JlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4ODYyNQotCi0yMDE1LTAzLTI3IDE3OjE2OjAzICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2U6IGNoZWNrIGJlZm9yZSB0cnVuY2F0aW5nIHN0cmluZ3MKLQkgIERvbid0IHRydW5jYXRlIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIHN0cmluZyBpZiBpdCBpc24ndCBuZWNlc3NhcnkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg4NjI1Ci0KLTIwMTUtMDMtMjcgMTA6MTU6MTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogQWRkIGd1YXJkcyBhZ2FpbnN0IGludmFsaWQgYXJndW1lbnRzIHRvIHNldF9mbHVzaGluZygpIGFuZCBwb2xsKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY4NzEKLQotMjAxNS0wMy0yNSAxMDo0OTowOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogb25seSBwb3N0ICdubyB2YWxpZCBmcmFtZXMnIGVycm9yIGlmIGJ1ZmZlcnMgd2VyZSByZWNlaXZlZAotCSAgT3RoZXJ3aXNlIGJhc2VwYXJzZSB3aWxsIGNvbnNpZGVyIGVtcHR5IHN0cmVhbXMgdG8gYmUgYW4gZXJyb3Igd2hpbGUKLQkgIGFuIGVtcHR5IHN0cmVhbSBpcyBhIHZhbGlkIHNjZW5hcmlvLiBXaXRoIHRoaXMgcGF0Y2gsIGVycm9ycyB3b3VsZAotCSAgb25seSBiZSBlbWl0dGVkIGlmIHRoZSBwYXJzZXIgcmVjZWl2ZWQgZGF0YSBidXQgd2Fzbid0IGFibGUgdG8KLQkgIHByb2R1Y2UgYW55IG91dHB1dCBmcm9tIGl0LgotCSAgVGhpcyBjaGFuZ2UgaXMgb25seSBmb3IgcHVzaC1tb2RlIG9wZXJhdGlvbiBhcyBpbiBwdWxsIG1vZGUgYW4KLQkgIGVtcHR5IGZpbGUgY2FuIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IgZm9yIHRoZSBvbmUgZHJpdmluZyB0aGUKLQkgIHBpcGVsaW5lCi0JICBJbmNsdWRlcyBhIHVuaXQgdGVzdCBmb3IgaXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMxNzEKLQotMjAxNS0wMy0xOSAxMDozNjoxMSArMDEwMCAgSm9zZSBBbnRvbmlvIFNhbnRvcyBDYWRlbmFzIDxzYW50b3NjYWRlbmFzQGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKLQkgIHRlZTogQWRkIGFsbG93LW5vdC1saW5rZWQgcHJvcGVydHkKLQkgIFRoaXMgcHJvcGVydHkgYXZvaWRzIG5vdCBsaW5rZWQgZXJyb3Igd2hlbiBhbGwgdGhlIHBhZHMgYXJlIHVubGlua2VkCi0JICBvciB3aGVuIHRoZXJlIGFyZSBubyBzb3VyY2UgcGFkcy4gVGhpcyBpcyB1c2VmdWwgaW4gZHluYW1pYyBwaXBlbGluZXMKLQkgIHdoZXJlIGl0IGNhbiBoYXBwZW4gdGhhdCBmb3IgYSBzaG9ydCB0aW1lIHRoZXJlIGFyZSBubyBwYWRzIGF0IGFsbCBvcgotCSAgYWxsIGRvd25zdHJlYW0gcGFkcyBhcmUgbm90IGxpbmtlZCB5ZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NDM2Ci0KLTIwMTUtMDMtMjEgMTc6MTM6MTggLTA1MDAgIE1pY2hhZWwgQ2F0YW56YXJvIDxtY2F0YW56YXJvQGdub21lLm9yZz4KLQotCSogZG9jcy9nc3QvcnVubmluZy54bWw6Ci0JICBkb2NzOiBGaXggdHlwb3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY1ODUKLQotMjAxNS0wMy0yMSAxNTo0Njo1MCAtMDUwMCAgTWljaGFlbCBDYXRhbnphcm8gPG1jYXRhbnphcm9AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JICBwbHVnaW5sb2FkZXI6IEZpeCB0eXBvcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjU4NQotCi0yMDE1LTAzLTI0IDE2OjA0OjE2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dC1zZWxlY3RvcjogYWRkIGRyYWluIGhhbmRsaW5nCi0JICBSZWxlYXNlIHRoZSBsYXRlc3QgYnVmZmVyLCBpZiBhbnksIGFuZCB0aGVuIGp1c3QgbGV0Ci0JICB0aGUgZHJhaW4gYmUgcHVzaGVkIGRvd25zdHJlYW0KLQotMjAxNS0wMy0yNCAxOTozMjo0OSArMDEwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIFJldmVydCAiRml4IGRpc3RjaGVjayIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNTZkZDJkODljNGVhYzQ2MGNiYzM3ZTJhNTFjMWRkOWU3OTI5OTllOC4KLQkgIEluc3RhbGxpbmcgY29tcGxldGlvbnMgdG8gYSBjdXN0b20gcHJlZml4IGlzIG5vdyBmaXhlZC4KLQotMjAxNS0wMy0yNCAxOTozMDo1MiArMDEwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgotCSAgaGVscGVyczogcmVtb3ZlIGNvbXBsZXRpb24taGVscGVyIG9uIHVuaW5zdGFsbAotCSAgKyBBbmQgYWRkIGl0IHRvIENMRUFORklMRVMKLQotMjAxNS0wMy0xOCAxOTozODoxNSArMDEwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBkYXRhL2NvbXBsZXRpb25zL2dzdC1pbnNwZWN0LTEuMDoKLQkqIGRhdGEvY29tcGxldGlvbnMvZ3N0LWxhdW5jaC0xLjA6Ci0JKiBsaWJzL2dzdC9oZWxwZXJzL2dzdDoKLQkgIGNvbXBsZXRpb25zOiByZW1vdmUgbGFzdCB1bm5hbWVzcGFjZWQgc3ltYm9scy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQ4NzcKLQotMjAxNS0wMy0xOCAxNDo0NDoyMSArMDEwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBkYXRhL2NvbXBsZXRpb25zL2dzdC1pbnNwZWN0LTEuMDoKLQkqIGRhdGEvY29tcGxldGlvbnMvZ3N0LWxhdW5jaC0xLjA6Ci0JICBjb21wbGV0aW9uczogcmVtb3ZlIGRlcHJlY2F0ZWQgc2hlbGwgc3ludGF4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDg3NyNjMjEKLQotMjAxNS0wMy0xOCAxNDozNzoxMSArMDEwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBkYXRhL2NvbXBsZXRpb25zL2dzdC1pbnNwZWN0LTEuMDoKLQkqIGRhdGEvY29tcGxldGlvbnMvZ3N0LWxhdW5jaC0xLjA6Ci0JICBjb21wbGV0aW9uczogcHJlZml4IHNoZWxsIGZ1bmN0aW9ucyB3aXRoIF9nc3QKLQkgICsgVG8gbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgdGhlbSB0byBjb25mbGljdCBpbiB0aGUKLQkgIGdsb2JhbCBuYW1lc3BhY2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0ODc3I2MyMQotCi0yMDE1LTAzLTI0IDEzOjEzOjI5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYmFzaC1jb21wbGV0aW9uOiBSZXNwZWN0IHRoZSBwcmVmaXgKLQkgIERvbid0IHRyeSBhbmQgaW5zdGFsbCB0aGUgYmFzaCBoZWxwZXJzIG91dHNpZGUgdGhlIGRlZmluZWQgcHJlZml4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDg3NwotCi0yMDE0LTExLTE5IDEzOjA4OjQ1ICswMTAwICBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIChoZWZ0aWcpIDxqc3RlZmZlbnNAbWFrZS50dj4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dC1zZWxlY3RvcjogUmVuYW1lIF9hY3RpdmF0ZV9zaW5rcGFkIHRvIF9nZXRfYWN0aXZlX3NpbmtwYWQKLQkgIFJlbW92ZXMgdGhlIG5vdyB1bnVzZWQgJ3BhZCcgcGFyYW1ldGVyIGFuZCByZW5hbWVzIHRoZSBmdW5jdGlvbgotCSAgdG8gc29tZXRoaW5nIG1vcmUgYXBwcm9wcmlhdGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NjIwCi0KLTIwMTQtMTEtMTkgMTM6MDM6MjEgKzAxMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGpzdGVmZmVuc0BtYWtlLnR2PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0LXNlbGVjdG9yOiBSZW1vdmUgcGFkJ3MgJ2FjdGl2ZScgZmllbGQKLQkgIFRoaXMgaXMgbm93IG5ldmVyIHJlYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NjIwCi0KLTIwMTQtMTEtMTkgMTI6NTk6MTIgKzAxMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGpzdGVmZmVuc0BtYWtlLnR2PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0LXNlbGVjdG9yOiBVc2Ugc2VnbWVudC1wcmVzZW5jZSBmb3IgcnVubmluZ190aW1lIGNoZWNrCi0JICBXaGVuIGRldGVybWluaW5nIHdoZXRoZXIgdGhlIHJ1bm5pbmdfdGltZSBvZiBhIHBhZCBjYW4gYmUKLQkgIGNhbGN1bGF0ZWQsIGNoZWNrIGlmIHRoZSBzZWdtZW50IGlzIGluIFRJTUUgZm9ybWF0IGluc3RlYWQKLQkgIG9mIHVzaW5nIHRoZSAnYWN0aXZlJyBmaWVsZC4KLQkgIFNpbmNlIHRoZSBsYXR0ZXIgaXMgc2V0IHRocm91Z2ggKmFueSogYWN0aXZpdHksIGl0J3Mgbm90IGEKLQkgIHJlbGlhYmxlIGluZGljYXRvciBvZiBzZWdtZW50IHByZXNlbmNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTYyMAotCi0yMDE1LTAzLTIzIDEzOjIwOjM0ICswMTAwICBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIChoZWZ0aWcpIDxqc3RlZmZlbnNAbWFrZS50dj4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaDoKLQkgIGlucHV0LXNlbGVjdG9yOiBSZW1vdmUgJ2Jsb2NrZWQnIGZsYWcKLQkgIFdpdGggdGhlIGRpc2FwcGVhcmFuY2Ugb2YgdGhlICdibG9jaycgc2lnbmFsLCB0aGlzCi0JICBmbGFnIGNhbm5vdCBiZSBzZXQgdG8gVFJVRS4KLQkgIGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0IGRpc2FwcGVhcnMgYXMgaXQgbmV2ZXIgd2FpdHMKLQkgIGFuZCBqdXN0IHJldHVybnMgc2VsZi0+Zmx1c2hpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2ODkxCi0KLTIwMTUtMDMtMjMgMTI6MTI6NTEgKzAxMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGpzdGVmZmVuc0BtYWtlLnR2PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgotCSAgaW5wdXQtc2VsZWN0b3I6IFJlbW92ZSBvYnNvbGV0ZSAnYmxvY2snIHNpZ25hbAotCSAgVGhpcyBzaWduYWwgYmxvY2tzIHRoZSBpbnB1dC1zZWxlY3RvciB3aXRoIG5vIG1lYW5zIG9mIHVuYmxvY2tpbmcKLQkgIG90aGVyIHRoYW4gYSBzdGF0ZSBjaGFuZ2UgYmFjayB0byBSRUFEWS4gSXQgc2VlbXMgdGhpcyBzaWduYWwgd2FzCi0JICBwYXJ0IG9mIGFuIG9sZCB3YXkgb2Ygc3luY2hyb25vdXNseSBzd2l0Y2hpbmcgdGhlIHNlbGVjdG9yLAotCSAgdG9nZXRoZXIgd2l0aCB0aGUgYWxyZWFkeS1yZW1vdmVkICdzd2l0Y2gnIHNpZ25hbC4KLQkgIFJlbW92aW5nIHRoZSBzaWduYWwgaXMgc2FmZSwgYXMgYXR0ZW1wdGluZyB0byB1c2UgaXQgY291bGQgb25seQotCSAgZW5kIGluIGRlYWRsb2Nrcy4gQXR0ZW1wdGluZyB0byBlbWl0IGFuIHVua25vd24gc2lnbmFsIGp1c3QgY2F1c2VzCi0JICBnX2NyaXRpY2Fscy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4OTEKLQotMjAxNS0wMy0yMyAxMzowNTozMCArMDEwMCAgSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8anN0ZWZmZW5zQG1ha2UudHY+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXQtc2VsZWN0b3I6IEZpeCB3YWl0aW5nIG9uIEVPUwotCSAgVGhpcyBhcHBhcmVudGx5IGdvdCBicm9rZW4gYnkgYmMxZWM0ZS4gU2luY2Ugc2VsZi0+YmxvY2tlZCBpcyBhbHdheXMKLQkgIEZBTFNFLCBnc3RfaW5wdXRfc2VsZWN0b3Jfd2FpdCBuZXZlciBhY3R1YWxseSB3YWl0cy4KLQkgIFVzaW5nICghc2VsZi0+ZW9zIHx8IHNlbGYtPmJsb2NrZWQpICYmIC4uLiBhcyB0aGUgbG9vcCBjb25kaXRpb24gd291bGQKLQkgIGJlIGluY29ycmVjdCBhcyB3ZWxsLCBiZWNhdXNlIHRoZW4gdGhlIG90aGVyIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIGluCi0JICBfY2hhaW4gd291bGQgYmxvY2sgdW50aWwgRU9TLCBzbyB0aGUgZnVuY3Rpb25zIGNhbm5vdCBiZSBtZXJnZWQgdHJpdmlhbGx5LgotCSAgU2luY2UgYmxvY2tpbmcgaXMgb2Jzb2xldGUsIGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0IHdpbGwgZ2V0IHJlbW92ZWQgYW55d2F5LgotCSAgQXMgc3VjaCwganVzdCBpbmxpbmUgdGhlIGxvb3AuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NTE4Ci0KLTIwMTUtMDMtMjAgMDc6MjM6NTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKLQkgIHRlc3RzOiBpbnB1dC1zZWxlY3RvcjogbmV3IHRlc3RzIGZvciBFT1MgaGFuZGxpbmcKLQkgIDMgbmV3IHRlc3RzOgotCSAgMSkgVGVzdHMgdGhhdCBhIHN0cmVhbSB0aGF0IGlzIGVtcHR5IChqdXN0IGFuIEVPUyBldmVudCkKLQkgIG9uIGluYWN0aXZlIHBhZCBkb2Vzbid0IGdldCB0aHJvdWdoIGFuZCB0YW1wZXIKLQkgIHdpdGggdGhlIGFjdGl2ZSBwYWQgdGhhdCBzdGlsbCBoYXMgZGF0YQotCSAgMikgVGVzdHMgdGhhdCBhIHN0cmVhbSB0aGF0IGlzIHNob3J0ZXIgdGhhbiB0aGUgYWN0aXZlIG9uZQotCSAgKHB1c2hlcyBFT1MgZWFybGllcikgZG9lc24ndCBoYXMgaXRzIEVPUyBwdXNoZWQKLQkgIDMpIFRlc3RzIHRoYXQgc3dpdGNoaW5nIHRvIGFuIGluYWN0aXZlIHN0cmVhbSB0aGF0IGhhcyByZWNlaXZlZAotCSAgRU9TIHdpbGwgbWFrZSBpbnB1dC1zZWxlY3RvciBwdXNoIEVPUwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjUxOAotCi0yMDE1LTAzLTE5IDEyOjExOjE5ICswMDAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JICB0ZXN0czogc2VsZWN0b3I6IHJlbW92ZSB3ZWlyZCBzZW1pY29sb25zIGF0IHRoZSBlbmQgb2YgdGVzdCBmdW5jdGlvbnMKLQkgIEV2ZW4gdGhvdWdoIGl0IHdvcmtzLCBpdCBpcyBub3QgbmVlZGVkIGFuZCBzZWVtcyBtb3JlIG5hdHVyYWwKLQkgIHRvIG5vdCBoYXZlIHNlbWljb2xvbnMgYXQgdGhlIGVuZCBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY1MTgKLQotMjAxNC0wNy0xNyAxNjozMzoyOSArMDIwMCAgSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8amFuLnN0ZWZmZW5zQGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogUHJvY2VzcyBTRUVLSU5HIHF1ZXJ5Ci0JICBBZGQgUVVFUllfU0VFS0lORyBoYW5kbGluZyB0byBxdWV1ZTIsIHNvIFJUTVAgbGl2ZSBzdHJlYW1zIGJlY29tZQotCSAgc2Vla2FibGUgd2hlbiBhIHF1ZXVlMiBpbiBkb3dubG9hZCBvciByaW5nYnVmZmVyIG1vZGUgaXMgaW5zZXJ0ZWQ6Ci0JICBydG1wc3JjICEgcXVldWUyICEgZmx2ZGVtdXgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMzNTEKLQotMjAxNS0wMy0yMSAxOTozNzozMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmM6Ci0JICBjaGVjazogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgY29tcGlsZXIgd2FybmluZyB3aXRoIGdjYwotCSAgY2hlY2tfcnVuLmM6IEluIGZ1bmN0aW9uICdzaWdfaGFuZGxlcic6Ci0JICBjaGVja19ydW4uYzoxMjc6MTM6IHdhcm5pbmc6ICdjaGlsZF9zaWcnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbiBbLVdtYXliZS11bmluaXRpYWxpemVkXQotCSAga2lsbHBnKGdyb3VwX3BpZCwgY2hpbGRfc2lnKTsKLQkgIF4KLQkgIGNoZWNrX3J1bi5jOjEzMDozMTogd2FybmluZzogJ2lkeCcgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV21heWJlLXVuaW5pdGlhbGl6ZWRdCi0JICBzaWdhY3Rpb24oc2lnX25yLCAmb2xkX2FjdGlvbltpZHhdLCBOVUxMKTsKLQkgIF4KLQotMjAxNS0wMy0yMSAxNToxOTo0MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmM6Ci0JICBjaGVjazogQ2F0Y2ggU0lHVEVSTSBhbmQgU0lHSU5UIGluIHRoZSB0ZXN0IHJ1bm5lciBhbmQga2lsbCBhbGwgY3VycmVudGx5IHJ1bm5pbmcgdGVzdHMKLQkgIE90aGVyd2lzZSBlLmcuIGN0cmwrYyBpbiB0aGUgdGVzdCBydW5uZXIgZXhpdHMgdGhlIHRlc3QgcnVubmVyLCB3aGlsZSB0aGUgdGVzdAotCSAgaXRzZWxmIGlzIHN0aWxsIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQsIHVzZXMgQ1BVIGFuZCBtZW1vcnkgYW5kIHBvdGVudGlhbGx5Ci0JICBuZXZlciBleGl0cyAoZS5nLiBpZiB0aGUgdGVzdCByYW4gaW50byBhIGRlYWRsb2NrIG9yIGluZmluaXRlIGxvb3ApLgotCSAgVGhlIHJlYXNvbiB3aHkgd2UgaGF2ZSB0byBtYW51YWxseSBraWxsIHRoZSBhY3R1YWwgdGVzdHMgaXMgdGhhdCBhZnRlcgotCSAgZm9ya2luZyB0aGV5IHdpbGwgYmUgbW92ZWQgdG8gdGhlaXIgb3duIHByb2Nlc3MgZ3JvdXAsIGFuZCBhcyBzdWNoIGFyZQotCSAgbm90IHJlY2VpdmluZyBhbnkgc2lnbmFscyBzZW50IHRvIHRoZSB0ZXN0IHJ1bm5lciBhbnltb3JlLiBUaGlzIGlzIHN1cHBvc2VkCi0JICB0byBiZSBkb25lIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGtpbGwgYSB0ZXN0LCB3aGljaCBpdCBvbmx5IHJlYWxseSBkb2VzIGlmCi0JICB0aGUgdGVzdCBpdHNlbGYgaXMgZm9ya2luZyBvZmYgbmV3IHByb2Nlc3Nlcy4KLQkgIFRoaXMgZml4IGlzIG5vdCBjb21wbGV0ZSB0aG91Z2guIFNJR0tJTEwgY2FuJ3QgYmUgY2F1Z2h0IGF0IGFsbCwgYW5kIGVycm9yCi0JICBzaWduYWxzIGxpa2UgU0lHU0VHViwgU0lHRlBFIGFyZSBjdXJyZW50bHkgbm90IGNhdWdodC4gVGhlIGxhdHRlciB3aWxsIG9ubHkKLQkgIGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgdGVzdCBydW5uZXIgaXRzZWxmLCBhbmQgYXMgc3VjaCBzZWVtIGxlc3MKLQkgIGltcG9ydGFudC4KLQotMjAxNS0wMy0xOSAxMzo1MTozOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgdmFsdmU6IERvbid0IGRyb3Agbm9uLXNlcmlhbGl6ZWQgcXVlcmllcyB3aGVuIHRoZSB2YWx2ZSBpcyBkcm9wcGluZwotCSAgT3RoZXJ3aXNlIHdlIGVuZCB1cCBkcm9wcGluZyBlLmcuIENBUFMgcXVlcmllcywgYW5kIHRoZW4gdXBzdHJlYW0ganVzdAotCSAgbmVnb3RpYXRlcyB0byB3aGF0ZXZlciBmb3JtYXQgaXQgd2FudHMgdG8uIE9uY2UgdGhlIHZhbHZlIGlzIG5vdC1kcm9wcGluZwotCSAgYW55bW9yZSB0aGlzIGNhbiBlYXNpbHkgcmVzdWx0IGluIG5lZ290aWF0aW9uIGZhaWxpbmcgY29tcGxldGVseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY0NDgKLQotMjAxNS0wMy0yMCAwOTowMDo0NyArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc2VnbWVudDogcmVtb3ZlIHRoZSBib3VuZHMgY2hlY2sgZnJvbSBfdG9fcnVubmluZ190aW1lX2Z1bGwoKQotCSAgRG8gbm90IGRvIGFueSBjaGVja3MgZm9yIHRoZSBzdGFydC9zdG9wIGluIHRoZSBuZXcKLQkgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxsKCkgbWV0aG9kLCB3ZSBjYW4gbGV0IHRoaXMgYmUgZG9uZSBieQotCSAgdGhlIG1vcmUgY2FwYWJsZSBnc3Rfc2VnbWVudF9jbGlwKCkgbWV0aG9kLiBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgdGhlCi0JICBlbnVtIG9mIHJlc3VsdHMgYW5kIG9ubHkgcmV0dXJuIHRoZSBzaWduIG9mIHRoZSBjYWxjdWxhdGVkIHJ1bm5pbmctdGltZS4KLQkgIFdlIG5lZWQgdG8gcHV0IHRoZSBvbGQgY2xpcHBpbmcgY2hlY2tzIGluIHRoZSBvbGQKLQkgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpIHN0aWxsIGJlY2F1c2UgdGhleSB3b3JrIHNsaWdodGx5Ci0JICBkaWZmZXJlbnRseSB0aGFuIHRoZSBfY2xpcCBtZXRob2RzLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NzUKLQotMjAxNS0wMy0xOSAxNzozNjozNiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IGFkZCBvcHRpb24gdG8gZGlzYWJsZSBjbGlwcGluZwotCSAgQWRkIGEgY2xpcCBhcmd1bWVudCB0byBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbCgpIHRvIGRpc2FibGUKLQkgIHRoZSBjaGVja3MgYWdhaW5zdCB0aGUgc2VnbWVudCBib3VuZGFyaWVzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvCi0JICBnZW5lcmF0ZSBhbiBleHRyYXBvbGF0ZWQgcnVubmluZy10aW1lIGZvciB0aW1lc3RhbXBzIG91dHNpZGUgb2YgdGhlCi0JICBzZWdtZW50LgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NzUKLQotMjAxNS0wMy0xOCAxNjoyNzozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiByZWYvdW5yZWYgbmV3IGVudW0gdHlwZSBpbiBnc3RfaW5pdC9kZWluaXQoKQotCi0yMDE1LTAzLTE4IDE0OjE2OjQ4ICswMTAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0KLQkqIHRlc3RzL21pc2MvdGVzdC1nc3RyZWFtZXItY29tcGxldGlvbi5zaDoKLQkqIHRvb2xzL2dzdHJlYW1lci1jb21wbGV0aW9uOgotCSAgdG9vbHM6IHJlbW92ZSBvdXRkYXRlZCBjb21wbGV0aW9uIHNjcmlwdAotCSAgKyBSZW1vdmUgdGhlIGFzc29jaWF0ZWQgdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDg3NyNjMjEKLQotMjAxNS0wMy0xOCAxMTozMTo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc2VnbWVudDogYWRkIGhlbHBlciB0byBnZXQgbmVnYXRpdmUgcnVubmluZy10aW1lCi0JICBBZGQgYSBoZWxwZXIgbWV0aG9kIHRvIGdldCBhIHJ1bm5pbmctdGltZSB3aXRoIGEgbGl0dGxlIG1vcmUgZmVhdHVyZXMKLQkgIHN1Y2ggYXMgZGV0ZWN0aW5nIGlmIHRoZSB2YWx1ZSB3YXMgYmVmb3JlIG9yIGFmdGVyIHRoZSBzZWdtZW50IGFuZAotCSAgbmVnYXRpdmUgcnVubmluZy10aW1lLgotCSAgQVBJOiBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbCgpCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNTc1Ci0KLTIwMTUtMDMtMTggMTA6NTM6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IGZpeCBvZmZzZXQgaGFuZGxpbmcgd2l0aCBub24gMCBzdGFydAotCSAgVGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBidXQgdGhlIG9mZnNldAotCSAgaXNuJ3QsIHNvIHN1YnRyYWN0IHRoZSBzdGFydCBmcm9tIHRoZSBwb3NpdGlvbiB3aGVuIHNldHRpbmcgdGhlIG9mZnNldC4KLQkgIEFkZCB1bml0IHRlc3QgZm9yIHRoaXMgYXMgd2VsbC4KLQotMjAxNS0wMy0xOCAwOTozNjozNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkgIGZ1bm5lbDogQWRkIHN1cHBvcnQgZm9yIGJ1ZmZlciBsaXN0cwotCi0yMDEzLTExLTI5IDE2OjI4OjQxIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiByZW1vdmUgZHVwbGljYXRlIGNvZGUKLQkgIFRoZXNlIGFyZSBhbHJlYWR5IGZyZWVkIGJ5IGdzdF9iYXNlX3BhcnNlX2NsZWFyX3F1ZXVlcygpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5NzY4Ci0KLTIwMTUtMDMtMTcgMTU6NDE6MzggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkgIHBsdWdpbmxvYWRlcjogRml4IGluZGVudGlvbgotCi0yMDE1LTAzLTEzIDExOjA4OjI1ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVzZXQgc2tpcCBvbiBzZWdtZW50cyBhbmQgZGlzY29udGludWl0aWVzCi0JICBMYXJnZSBzY2FsZSBza2lwIGlzIGFuIG9wdGltaXphdGlvbiwgYW5kIHRodXMgaXQgaXMgc2FmZXIgdG8KLQkgIHN0b3Agc2tpcHBpbmcgdGhhbiB0byBjb250aW51ZS4gQ2xlYXIgc2tpcCBvbiBzZWdtZW50cyBhbmQKLQkgIGRpc2NvbnRpbnVpdGllcywgYXMgdGhlc2UgYXJlIHBvaW50cyB3aGVyZSBpdCBpcyBwb3NzaWJsZSB0aGF0Ci0JICB0aGUgb3JpZ2luYWwgaWRlYSBvZiAiYnl0ZXMgdG8gc2tpcCIgY2hhbmdlcy4KLQotMjAxNS0wMy0xNSAxNDoxOToxNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBEb24ndCBncm93IHF1ZXVlIGluZmluaXRlbHkgaWYgb25seSBvbmUgcGFkIGlzIGxpbmtlZAotCSAgVGhpcyB3YXMgaW50cm9kdWNlZCBieQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTg5MwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjg5MQotCSAgYnV0IGl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgYXQgYWxsIGFuZCBjYXVzZXMgaHVnZSBtZW1vcnkgbGVha3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MjUzCi0KLTIwMTUtMDMtMTQgMjE6MDc6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBoYW5kbGUgZW1wdHkgYnVmZmVyIGxpc3QgbW9yZSBncmFjZWZ1bGx5Ci0JICBEb24ndCBhYm9ydCwganVzdCBpZ25vcmUgaXQuIEl0J3MgbGlrZSBhIGJ1ZmZlcgotCSAgd2l0aG91dCBtZW1vcmllcy4KLQotMjAxNS0wMy0xNCAxNzozOTozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiBtaW5vciBvcHRpbWlzYXRpb24gZm9yIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3QoKQotCSAgVHJ5IHRvIGFsbG9jYXRlIGJ1ZmZlciBsaXN0IHdpdGggYSBzdWl0YWJsZSBzaXplIGZyb20gdGhlCi0JICBiZWdpbm5pbmcgdG8gYXZvaWQgaGF2aW5nIHRvIHJlLWFsbG9jIHRoZSBidWZmZXIgbGlzdCBhcnJheS4KLQotMjAxNS0wMy0xNCAxNzoyMzowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfbGlzdCgpCi0KLTIwMTUtMDMtMTQgMTc6MjA6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgYWRhcHRlcjogYWRkIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3QoKQotCSAgQVBJOiBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9saXN0KCkKLQotMjAxNS0wMy0xNCAxNjowNTo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JICBBZGQgbmV3IHN0cmVhbWlkZGVtdXggYmluYXJpZXMgdG8gLmdpdGlnbm9yZQotCi0yMDE1LTAzLTE0IDE2OjAwOjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogYXZvaWQgbXVsdGlwbGUgY2FsbHMgdG8gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSgpIGluIG1hY3JvCi0KLTIwMTUtMDMtMTQgMTU6NTg6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogYXZvaWQgbXVsdGlwbGUgY2FsbHMgdG8gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSgpIGluIG1hY3JvCi0KLTIwMTUtMDMtMTMgMTg6MjI6MDEgKzAwMDAgIFJhbWlybyBQb2xsYSA8cmFtaXJvLnBvbGxhQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IHByb3Blcmx5IGVzY2FwZSBwZXJjZW50IHNpZ24gaW4gZG9jdW1lbnRhdGlvbgotCi0yMDE1LTAzLTE0IDEzOjM3OjA5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IFVzZSB0aGUgY29ycmVjdCBlbnVtIHR5cGUgdG8gZml4IGEgY29tcGlsZXIgd2FybmluZwotCSAgZ3N0YnVmZmVyLmM6NTIyOjU4OiBlcnJvcjogaW1wbGljaXQgY29udmVyc2lvbiBmcm9tIGVudW1lcmF0aW9uIHR5cGUgJ0dzdEJ1ZmZlckZsYWdzJyB0bwotCSAgZGlmZmVyZW50IGVudW1lcmF0aW9uIHR5cGUgJ0dzdEJ1ZmZlckNvcHlGbGFncycgWy1XZXJyb3IsLVdlbnVtLWNvbnZlcnNpb25dCi0JICBpZiAoIWdzdF9idWZmZXJfY29weV9pbnRvIChjb3B5LCAoR3N0QnVmZmVyICopIGJ1ZmZlciwgZmxhZ3MsIDAsIC0xKSkKLQkgIH5+fn5+fn5+fn5+fn5+fn5+fn5+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fn4KLQkgIGdzdGJ1ZmZlci5jOjUzNDo0NjogZXJyb3I6IGltcGxpY2l0IGNvbnZlcnNpb24gZnJvbSBlbnVtZXJhdGlvbiB0eXBlICdHc3RCdWZmZXJDb3B5RmxhZ3MnIHRvCi0JICBkaWZmZXJlbnQgZW51bWVyYXRpb24gdHlwZSAnR3N0QnVmZmVyRmxhZ3MnIFstV2Vycm9yLC1XZW51bS1jb252ZXJzaW9uXQotCSAgcmV0dXJuIGdzdF9idWZmZXJfY29weV93aXRoX2ZsYWdzIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwpOwotCSAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4gICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fgotCSAgLi9nc3RidWZmZXIuaDo0MzM6MzE6IG5vdGU6IGV4cGFuZGVkIGZyb20gbWFjcm8gJ0dTVF9CVUZGRVJfQ09QWV9BTEwnCi0JICAuLi4oKEdzdEJ1ZmZlckNvcHlGbGFncykoR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBIHwgR1NUX0JVRkZFUl9DT1BZX01FTU9SWSkpCi0JICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi0yMDE1LTAzLTE0IDE0OjA2OjA5ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWY6Ci0JICBkZWZzOiB1cGRhdGUgZGVmcwotCi0yMDE0LTEwLTMwIDE1OjM5OjIxICswMDAwICBXaWxsaWFtIE1hbmxleSA8d2lsbEB3aWxsaWFtbWFubGV5Lm5ldD4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuaDoKLQkgIG1ldGE6IEFkZCBgR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhYAotCSAgR3N0TmV0QWRkcmVzcyBjYW4gYmUgdXNlZCB0byBzdG9yZSBhbmNpbGxhcnkgZGF0YSB3aGljaCB3YXMgcmVjZWl2ZWQgd2l0aAotCSAgb3IgaXMgdG8gYmUgc2VudCBhbG9uZ3NpZGUgdGhlIGJ1ZmZlciBkYXRhLiAgV2hlbiB1c2VkIHdpdGggc29ja2V0IHNpbmtzCi0JICBhbmQgc291cmNlcyB3aGljaCB1bmRlcnN0YW5kIHRoaXMgbWV0YSBpdCBhbGxvd3Mgc2VuZGluZyBhbmQgcmVjZWl2aW5nCi0JICBhbmNpbGxhcnkgZGF0YSBzdWNoIGFzIHVuaXggY3JlZGVudGlhbHMgKFNlZSBgR1VuaXhDcmVkZW50aWFsc01lc3NhZ2VgKQotCSAgYW5kIFVuaXggZmlsZSBkZXNjcmlwdGlvbnMgKFNlZSBgR1VuaXhGRE1lc3NhZ2VgKS4KLQkgIFRoaXMgd2lsbCBiZSB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBwcm90b2NvbHMgd2hpY2ggdXNlIGZpbGUtZGVzY3JpcHRvcgotCSAgcGFzc2luZyBpbiBwYXlsb2FkZXJzL2RlcGF5bG9hZGVycyB3aXRob3V0IGhhdmluZyB0byByZS1pbXBsZW1lbnQgYWxsIHRoZQotCSAgc29ja2V0IGhhbmRsaW5nIGNvZGUgYWxyZWFkeSBwcmVzZW50IGluIGVsZW1lbnRzIHN1Y2ggYXMgbXVsdGlzb2NrZXRzaW5rLAotCSAgZXRjLiAgVGhpcywgaW4gdHVybiwgd2lsbCBiZSB1c2VmdWwgZm9yIGltcGxlbWVudGluZyB6ZXJvLWNvcHkgdmlkZW8gSVBDLgotCSAgVGhpcyBtZXRhIHVzZXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGBHU29ja2V0Q29udHJvbE1lc3NhZ2VgIEFQSQotCSAgcHJvdmlkZWQgYnkgR0xpYiBhcyBhIHBhcnQgb2YgR0lPLiAgQXMgYSByZXN1bHQgdGhpcyBuZXcgbWV0YSBkb2VzIG5vdAotCSAgcmVxdWlyZSBhbnkgbmV3IGRlcGVuZGVuY2llcyBvciBhbnkgY29uZGl0aW9uYWwgY29tcGxpYXRpb24gZm9yCi0JICBwb3J0YWJsaWxpdHksIGFsdGhvdWdoIGl0IGlzIHVubGlrZWx5IHRvIGRvIGFueXRoaW5nIHVzZWZ1bCBvbiBub24tVU5JWAotCSAgcGxhdGZvcm1zLgotCi0yMDE1LTAzLTE0IDExOjU3OjMzICswMDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgYWxsb2NhdGlvbjogQWxsb3cgYWxsb2NhdGlvbiBwb29sIHdpdGhvdXQgc2l6ZQotCSAgVGhpcyBhbGxvdyBwcm9wb3NpbmcgYSBudW1iZXIgb2YgYnVmZmVycyByZXF1aXJlZCBldmVuIGlmIHRoZSBzaXplCi0JICBvZiBidWZmZXIgaXMgdW5maXhlZC4gVGhpcyBpcyBvZnRlbiB0aGUgY2FzZSBmb3IgZW5jb2RlZCBmb3JtYXRzLgotCi0yMDE1LTAzLTAxIDEzOjE1OjQwIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBEb24ndCBzdG9wIHRoZSBwb29sIGluIHNldF9jb25maWcoKQotCSAgRG9uJ3Qgc3RvcCB0aGUgcG9vbCBpbiBzZXRfY29uZmlnKCkuIEluc3RlYWQsIGxldCB0aGUgY29udHJvbGxpbmcKLQkgIGVsZW1lbnQgbWFuYWdlIGl0LiBNb3N0IG9mIHRoZSB0aW1lLCB3aGVuIGFuIGFjdGl2ZSBwb29sIGlzIGJlaW5nCi0JICBjb25maWd1cmVkIGlzIGJlY2F1c2UgdGhlIGNhcHMgZGlkbid0IGNoYW5nZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUzNzcKLQotMjAxNS0wMy0xMyAxODo1MzoxMSArMDAwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZHJhaW4gb24gYWxsb2NhdGlvbiBxdWVyeQotCSAgQWxsb3dzIGJ1ZmZlcnMgdG8gYmUgcmVjbGFpbWVkIHdoZW4gY2FwcyBpcyB0byBiZSByZW5lZ290aWF0ZWQgc28KLQkgIHRoYXQgYnVmZmVycG9vbHMgY2FuIGJlIHN0b3BwZWQuIEFzIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5IGlzCi0JICBzZXJpYWxpemVkIGFsbCBidWZmZXJzIGhhdmUgYmVlbiBhbHJlYWR5IGRyYWluZWQgZnJvbSB0aGUgcGlwZWxpbmUsCi0JICBleGNlcHQgdGhpcyBsYXN0X3NhbXBsZSBvbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyNzcwCi0KLTIwMTUtMDMtMTMgMTg6MzU6MTQgKzAwMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHdoZW4gZHJhaW5pbmcsIGRlZXAgY29weSB0aGUgbGFzdCBidWZmZXIgdG8gdW5yZWYgb2xkIG1lbW9yeQotCSAgVXNlIGdzdF9idWZmZXJfY29weV9kZWVwKCkgdG8gZm9yY2UgdGhlIGNvcHkgb2YgdGhlIHVuZGVybHlpbmcKLQkgIG1lbW9yeSBpbnN0ZWFkIG9mIHBvc3NpYmx5IGRvaW5nIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBidWZmZXIKLQkgIGFuZCBqdXN0IHJlZmVyZW5jaW5nIHRoZSBtZW1vcnkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUyODcKLQotMjAxNS0wMy0xMyAxODozNTowMSArMDAwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdGJ1ZmZlcjogYWRkIGdzdF9idWZmZXJfY29weV9kZWVwCi0JICBBIHZhcmlhbnQgb2YgZ3N0X2J1ZmZlcl9jb3B5IHRoYXQgZm9yY2VzIHRoZSB1bmRlcmx5aW5nIG1lbW9yeQotCSAgdG8gYmUgY29waWVkLgotCSAgVGhpcyBpcyBhZGRlZCB0byBhdm9pZCBhZGRpbmcgYW4gZXh0cmEgcmVmZXJlbmNlIHRvIGEgR3N0TWVtb3J5Ci0JICB0aGF0IG1pZ2h0IGJlbG9uZyB0byBhIGJ1ZmZlcnBvb2wgdGhhdCBpcyB0cnlpbmcgdG8gYmUgZHJhaW5lZC4KLQkgIFRoZSB1c2UgY2FzZSBpcyB3aGVuIHRoZSBidWZmZXIgY29weWluZyBpcyBkb25lIHRvIHJlbGVhc2UgdGhlCi0JICBvbGQgYnVmZmVyIGFuZCBhbGwgaXRzIHJlc291cmNlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUyODcKLQotMjAxNS0wMy0xMyAxNTozMTozMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBVc2UgZ19saXN0X2ZyZWVfZnVsbCgpIGluc3RlYWQgb2YgbWFudWFsbHkgdW5yZWZmaW5nIGFuZCBmcmVlaW5nCi0JICBBbHNvIHVucmVmIHRoZSBtZXNzYWdlcywgbm90IHRoZSBHTGlzdCBub2Rlcy4KLQotMjAxNS0wMy0xMyAxMzo0Mjo0NiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBGaXggYW5vdGhlciBjYXNlIHdoZXJlIHdlIGhvbGQgdGhlIG9iamVjdCBsb2NrIHdoaWxlIHVucmVmZmluZyBhIG1lc3NhZ2UKLQotMjAxNS0wMy0xMyAxNToyODo0MiArMDIwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAYWhpcnUuZXU+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogVW5yZWZlcmVuY2luZyBtZXNzYWdlcyBvdXRzaWRlIHRoZSBsb2NrCi0JICBTaG91bGRuJ3QgdGFrZSB0aGUgbG9jayB3aGlsZSB1bnJlZmVyZW5jaW5nIG1lc3NhZ2VzLCBiZWNhdXNlIHRoYXQgbWF5IGNhdXNlCi0JICBtb3JlIG1lc3NhZ2VzIHRvIGJlIHNlbnQsIHdoaWNoIHdpbGwgdHJ5IHRvIHRha2UgdGhlIGxvY2sgYW5kIGNhdXNlIHRoZSBhcHAgdG8KLQkgIGhhbmcuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4Nzc3Ci0KLTIwMTUtMDItMjMgMjA6Mjc6MzIgKzAyMDAgIFZpdmlhIE5pa29sYWlkb3UgPHZpdmlhQGFoaXJ1LmV1PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXRpbHM6IEFkZCBnc3RfYmluX3N5bmNfY2hpbGRyZW5fc3RhdGVzKCkKLQkgIGdzdF9iaW5fc3luY19jaGlsZHJlbl9zdGF0ZXMoKSB3aWxsIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIGVsZW1lbnRzIG9mIGEgYmluIGFuZAotCSAgc3luYyB0aGVpciBzdGF0ZXMgd2l0aCB0aGUgc3RhdGUgb2YgdGhlIGJpbi4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhZGRpbmcgbWFueQotCSAgZWxlbWVudHMgdG8gYSBiaW4gYW5kIHdvdWxkIG90aGVyd2lzZSBoYXZlIHRvIGNhbGwKLQkgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoKSBvbiBlYWNoIGFuZCBldmVyeSBvbmUgb2YgdGhlbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUwNDIKLQotMjAxNS0wMi0wMyAxNjoxMjozMiArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogZ3N0L3ByaW50Zi92YXNucHJpbnRmLmM6Ci0JICBwcmludGY6IGhhbmRsZSB1bnNpZ25lZCBtb2RpZmllciBmb3IgbG9uZyBsb25nCi0JICBPdGhlcndpc2UsIGFuIHVuc2lnbmVkIGludGVnZXIgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgYSBzaWduZWQgb25lIGlmIHdlCi0JICB1c2UgaW50ZXJuYWwgcHJpbnQsIGllIEhBVkVfTE9OR19MT05HX0ZPUk1BVCBpcyBub3QgZGVmaW5lZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDYwOTYKLQotMjAxNS0wMy0xMiAxNDozOTozNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RzdHJlYW1pZGRlbXV4LmM6Ci0JICBzdHJlYW1pZGRlbXV4OiBSZXNldCBwYWQgY291bnRlciBhZnRlciByZW1vdmluZyBhbGwgcGFkcwotCi0yMDE0LTAzLTA0IDE5OjQwOjA1ICswOTAwICBIb29uSGVlIExlZSA8aG9vbmhlZS5sZWVAbGdlLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c3RyZWFtaWRkZW11eC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RzdHJlYW1pZGRlbXV4Lmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3N0cmVhbWlkZGVtdXguYzoKLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtaWRkZW11eC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbWlkZGVtdXgvc3RyZWFtaWRkZW11eC1zdHJlYW0uYzoKLQkgIHN0cmVhbWlkZGVtdXg6IEFkZCBzdHJlYW1pZGRlbXV4IGVsZW1lbnQKLQkgIERlbXVsdGlwbGV4IGEgc3RyZWFtIHRvIG11bHRpcGxlIHNvdXJjZSBwYWRzIGJhc2VkIG9uIHRoZSBzdHJlYW0gaWRzIGZyb20gdGhlCi0JICBzdHJlYW0tc3RhcnQgZXZlbnRzLiBUaGlzIGJhc2ljYWxseSByZXZlcnNlcyB0aGUgYmVoYXZpb3VyIG9mIGZ1bm5lbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc2MDUKLQotMjAxNS0wMy0xMiAxMzoyOTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIHdpbjMyOiB1cGRhdGUKLQotMjAxNS0wMy0xMiAxMzoyNjo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwcmludGYuYzoKLQkgIHRlc3RzOiBhZGQgc29tZSBiYXNpYyB1bml0IHRlc3RzIGZvciBvdXIgcHJpbnRmIHN0dWZmCi0JICBUbyB0ZXN0IG5ldyAlSTMyIHN1cHBvcnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MjgxCi0KLTIwMTUtMDItMTAgMTc6NDA6NDggKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9wcmludGYvcHJpbnRmLXBhcnNlLmM6Ci0JICBwcmludGY6IGFkZCBzdXBwb3J0IGZvciAlSTMyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MjgxCi0KLTIwMTUtMDMtMTIgMTM6MTQ6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBtb3ZlIGNhdGVnb3J5IGxldmVsIHRocmVzaG9sZCBjaGVjayBpbnRvIGxvZyBmdW5jdGlvbiBkaXNwYXRjaGVyCi0JICBNaW5vciBvcHRpbWlzYXRpb246IGNoZWNrIGNhdGVnb3J5IGxvZyBsZXZlbCBlYXJsaWVyIGluIHRoZQotCSAgbG9nIGZ1bmN0aW9uIGRpc3BhdGNoZXIgYW5kIG5vdCBvbmx5IGluIHRoZSBkZWZhdWx0IGxvZwotCSAgZnVuY3Rpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MjEzCi0KLTIwMTUtMDMtMTIgMTI6NTk6NTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogUmVzZXQgc2VnbWVudCB3aGVuIGRlYWN0aXZhdGluZyBwdWxsIG1vZGUgb3Igbm90IHJ1bm5pbmcgaW4gcHVsbCBtb2RlCi0JICBXZSB1c2UgdGhlIHNlZ21lbnQgZm9ybWF0IHRvIGRldGVjdCBpZiB3ZSBydW4gdGhlIHN0cmVhbWluZyB0aHJlYWQgb3Igbm90LgotCSAgV2l0aG91dCByZXNldHRpbmcgd2UgbWlnaHQgYmVsaWV2ZSB3ZSBkbyBzbywgYWx0aG91Z2ggd2Ugb25seSBkaWQgaW4gdGhlIHBhc3QKLQkgIGFuZCBhcmUgbm93IHJ1bm5pbmcgaW4gZS5nLiBwdXNoIG1vZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MDczCi0KLTIwMTUtMDMtMDggMjA6NDI6MzggKzAxMDAgIE1pY2hhxYIgRMSZYnNraSA8ZGVic2tpLm1pLnpkQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbXNnLmM6Ci0JKiBtNC9jaGVjay1jaGVja3MubTQ6Ci0JICBjaGVjazogVXNlIG1rc3RlbXAgaW5zdGVhZCBvZiB0ZW1wbmFtIGlmIHBvc3NpYmxlCi0JICBVc2luZyB0ZW1wbmFtKCkgaXMgZGVwcmVjYXRlZCwgdGhpcyBnaXZlcyB3YXJuaW5nIGFuZCBmYWlscyB0aGUgYnVpbGQKLQkgIHdpdGggLVdlcnJvci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU4NTgKLQotMjAxNS0wMy0xMSAxNjozNjoyOSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBjbGVhbiB1cCB0aGUgbmVlZF9wcmVyb2xsIHZhcmlhYmxlCi0JICBCYXNlZCBvbiBwYXRjaCBmcm9tIFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+Ci0JICBEb24ndCBqdXN0IHNldCB0aGUgbmVlZF9wcmVyb2xsIGZsYWcgdG8gVFJVRSBpbiBhbGwgY2FzZXMuIFdoZW4gd2UKLQkgIGFyZSBhbHJlYWR5IHByZXJvbGxlZCBpdCBuZWVkcyB0byBiZSBzZXQgdG8gRkFMU0UgYW5kIHdoZW4gd2UgZ28gdG8KLQkgIFJFQURZIHdlIHNob3VsZCBub3QgdG91Y2ggaXQuIFdlIHNob3VsZCBvbmx5IHNldCBpdCB0byBUUlVFIGluIG90aGVyCi0JICBjYXNlcywgbGlrZSB3aGF0IHRoZSBjb2RlIGFib3ZlIGRvZXMuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjY1NQotCi0yMDE0LTEyLTA1IDE0OjE2OjUyICswOTAwICBob29uaGVlLmxlZSA8aG9vbmhlZS5sZWVAbGdlLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSAgZnVubmVsOiBoYW5kbGUgR0FQIGV2ZW50IHRvIGZvcndhcmRzIHN0aWNreSBldmVudHMgaW50byBkb3duc3RyZWFtCi0JICBJZiBubyBkYXRhIGlzIGNvbWluZyBhbmQgZnVubmVsIHJlY2VpdmUgR0FQIGV2ZW50LCBuZWVkIHRvIGZvcndhcmRzIHN0aWNreSBldmVudHMKLQkgIGludG8gZG93bnN0cmVhbSBpZiBpdCBuZWVkcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzgyMDIKLQotMjAxNS0wMy0xMCAxNjo0Mjo0NCArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmM6Ci0JICBjaGVjazogZHVwbGljYXRlIGNvZGUgYnJhbmNoZXMKLQkgIENJRCAjMTIyNjQ0NgotCi0yMDE1LTAzLTEwIDA5OjIxOjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3F1ZXVlLWVycm9yLmM6Ci0JICBGaXggZG91YmxlIHNlbWljb2xvbnMKLQotMjAxNS0wMi0yMiAxMDoxMjowMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICB3aW4zMjogdXBkYXRlIGV4cG9ydHMKLQotMjAxNS0wMi0yMSAyMDoxMzowNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGZsb3djb21iaW5lci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaDoKLQkgIGZsb3djb21iaW5lcjogYWRkIGEgZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93KCkgbWV0aG9kCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NTcyCi0JICBBUEk6IGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdygpCi0KLTIwMTUtMDItMTUgMjA6NTI6MTAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmg6Ci0JICBmbG93Y29tYmluZXI6IGFkZCBhIGdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0KCkgbWV0aG9kCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NTcyCi0JICBBUEk6IGdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0KCkKLQotMjAxNS0wMy0wNiAxMDo1OTo1OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBGaXggdHlwbyBpbiBkZWJ1ZyBtZXNzYWdlCi0KLTIwMTUtMDMtMDUgMTg6MzA6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBhdm9pZCBtYWxsb2MvZnJlZSBpZiBsb2cgb2JqZWN0IGlzIE5VTEwKLQotMjAxNS0wMy0wNSAxNzo1NDowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IG1vdmUgX19GSUxFX18gcGF0aCBzaG9ydGVuaW5nIGludG8gZGVmYXVsdCBsb2cgaGFuZGxlcgotCSAgSW5zdGVhZCBvZiBhbHdheXMgc2hvcnRlbmluZyB0aGUgX19GSUxFX18gcGF0aCwgZXZlbiBpZiB0aGUKLQkgIGxvZyBtZXNzYWdlIGlzIG5vdCBhY3R1YWxseSBwcmludGVkLCB3aGljaCBtaWdodCBoYXBwZW4gaWYKLQkgIHRoZSBsb2cgbGV2ZWwgaXMgYWN0aXZhdGVkIGJ1dCB0aGUgY2F0ZWdvcnkgaXMgbm90LCBvbmx5Ci0JICBzaG9ydGVuIHRoZSBwYXRoIGlmIHdlJ3JlIGFjdHVhbGx5IGdvaW5nIHRvIG91dHB1dCBpdCBhbmQKLQkgIGlmIGl0IGxvb2tzIGxpa2UgaXQgbmVlZHMgc2hvcnRlbmluZy4gTG9nIGhhbmRsZXJzIGhhZCBubwotCSAgZ3VhcmFudGVlIHRoYXQgdGhleSB3b3VsZCBnZXQgYSBuYW1lIGluc3RlYWQgb2YgYSBwYXRoCi0JICBhbnl3YXkgb24gYW55IGFyY2hpdGVjdHVyZSwgc28gaXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUyMTMKLQotMjAxNS0wMi0yNyAwMToxNjo1OCArMTEwMCAgUGV0ZXIgVXJiYW5lYyA8Z2l0LnVzZXJAdXJiYW5lYy5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBzaG9ydGVuIF9fRklMRV9fIG9uIGFsbCBwbGF0Zm9ybXMKLQkgIFRoaXMgaXMgdXNlZnVsIG5vdCBvbmx5IGZvciBNU1ZDLCBidXQgYWxzbyB3aXRoIGdjYy9MaW51eAotCSAgd2hlbiBkb2luZyBjcm9zcy1jb21waWxhdGlvbiBidWlsZHMgYW5kIG91dC1vZi10cmVlIGJ1aWxkcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUyMTMKLQotMjAxNS0wMy0wNCAxMTowMjo0MSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbGF0ZW5jeS50eHQ6Ci0JICBkb2NzOiBjbGFyaWZ5IG1pbi1sYXRlbmN5IHdvcmRpbmcgaW4gcGFydC1sYXRlbmN5LnR4dAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDMzOAotCi0yMDE1LTAyLTI2IDE0OjQzOjI1ICswMTAwICBNYXJjaW4gS29sbnkgPG1hcmNpbi5rb2xueUBmbHl0cm9uaWMucGw+Ci0KLQkqIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDoKLQkgIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDogcmVtb3ZlZCBsaWJ4bWwgaW5jbHVkZSBkaXJlY3RpdmUKLQkgIFRoaXMgaXMgYSBsZWZ0b3ZlciBmcm9tIDAuMTAgYW5kIG5vdCBuZWVkZWQgYW55bW9yZS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUyMTAKLQotMjAxNS0wMy0wMyAxMjo1MzoxMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogU2lnbmFsIHRoZSBzaW5rcGFkIHRocmVhZCBpZiBhIGZsb3cgZXJyb3IgaGFwcGVuZWQKLQkgIEl0IG1pZ2h0IHN0aWxsIGJlIHdhaXRpbmcgZm9yIGEgcXVlcnkgdG8gYmUgaGFuZGxlZCwgb3IgdGhlIHF1ZXVlIHRvIGJlY29tZQotCSAgZW1wdHkgYWdhaW4gZm9yIHRoZSBuZXh0IGl0ZW0uIEFsc28gaWYgZG93bnN0cmVhbSByZXR1cm5zIEZMVVNISU5HLCBmbHVzaCB0aGUKLQkgIHF1ZXVlIGxpa2Ugd2UgZG8gaW4gcXVldWUgYW5kIG11bHRpcXVldWUuCi0KLTIwMTUtMDMtMDMgMTI6NDg6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBXYWtlIHVwIHRoZSBxdWVyeSBmdW5jdGlvbiBvbiBlcnJvcnMgZnJvbSB0aGUgbG9vcCBmdW5jdGlvbgotCSAgT3RoZXJ3aXNlIHdlIG1pZ2h0IHdhaXQgZm9yZXZlciBmb3Igc2VyaWFsaXplZCBxdWVyaWVzIHRvIGJlIGhhbmRsZWQgYXMgdGhlCi0JICBsb29wIGZ1bmN0aW9uIGlzIHN0b3BwZWQgYW5kIGFzIHN1Y2ggd2Ugd2lsbCBuZXZlciBldmVyIGRlcXVldWUgdGhlIHF1ZXJ5IGFuZAotCSAgaGFuZGxlIGl0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTMxOQotCi0yMDE1LTAzLTAyIDIwOjMxOjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBpbXByb3ZlIHdhcm5pbmcgd2hlbiBsaW5raW5nICBlbGVtZW50cyB3aXRob3V0IGNvbW1vbiBhbmNlc3RvcgotCSAgVGhpcyBjb21lcyB1cCBxdWl0ZSBhIGxvdCBhbmQgaXQncyBhIGNvbW1vbiBtaXN0YWtlLCBzbyBsZXQncwotCSAgdHJ5IHRvIGltcHJvdmUgdGhlIHdhcm5pbmcgbWVzc2FnZSBhIGxpdHRsZS4KLQotMjAxNS0wMi0yNyAwMDozMzoyNyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Z2l0QGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXQtc2VsZWN0b3I6IERyb3AgY3VzdG9tIGxhdGVuY3kgcXVlcnkgaGFuZGxpbmcKLQkgIFRoZSBkZWZhdWx0IGxhdGVuY3kgcXVlcnkgaGFuZGxlciBub3cgaW1wbGVtZW50cyB0aGlzIGxvZ2ljCi0KLTIwMTUtMDItMjYgMTU6NTc6MjAgKzAxMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5zaW5zdGFsbGVkOiBBZGQgZ2VzLWxhdW5jaCBtYW51YWxzIHBhdGggdG8gTUFOUEFUSC4KLQotMjAxNS0wMi0yNiAxMzowODo0OCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogRG9uJ3QgZmFpbCBsYXRlbmN5IHF1ZXJ5IG9uIHVubGlua2VkIHBhZHMKLQkgIEEgc2luZ2xlIHVubGlua2VkIHBhZCBjYW4gbWFrZSB0aGUgbGF0ZW5jeSBxdWVyeSBmYWlsIGFjcm9zcyB0aGUKLQkgIHBpcGVsaW5lLCB3aGljaCBpcyBwcm9iYWJseSBub3QgZGVzaXJhYmxlLiBJbnN0ZWFkLCB3ZSByZXR1cm4gYSBkZWZhdWx0Ci0JICBhbnl0aGluZyBnb2VzIHZhbHVlLgotCSAgUGVyaGFwcyB3ZSBzaG91bGQgYWxzbyBiZSBlbWl0dGluZyBhIGdzdF9tZXNzYWdlX25ld19sYXRlbmN5KCkgd2hlbiBhCi0JICBQTEFZSU5HIGVsZW1lbnQgaGFzIG9uZSBvZiBpdHMgcGFkcyBsaW5rZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MTk3Ci0KLTIwMTQtMTAtMjIgMTY6NDM6NDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IERvbid0IGVtaXQgZXJyb3JzIG9uIEVPUyBpZiB3ZSBzYXcgR0FQIGV2ZW50cwotCSAgSWYgd2Ugc2F3IEdBUCBldmVudHMgKG1lYW5pbmcgdGhlIHN0cmVhbXMgaXMgYWR2YW5jaW5nKSBiZWZvcmUgd2UgZ2V0Ci0JICBFT1MsIHdlIHNob3VsZCBub3QgcG9zdCBhbiBFUlJPUiwgc2luY2UgaXQgaXMgbm90IGZhdGFsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTE0MwotCi0yMDE1LTAyLTI1IDA4OjI2OjE5ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6Ci0JICBnc3R2YWx1ZTogTWFrZSBzdXJlIEdTVF9GT1VSQ0NfQVJHUyBwcm9kdWNlcyBwcmludGFibGUgY2hhcmFjdGVycwotCSAgU29tZSBzeXN0ZW1zIHdpbGwgY3Jhc2ggaWYgd2UgdXNlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBpbiBwcmludC9kZWJ1ZwotCSAgc3RhdGVtZW50cy4KLQkgIE1ha2Ugc3VyZSB0aGF0IEdTVF9GT1VSQ0NfQVJHUyBuZXZlciBkb2VzIHRoYXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUxNDQKLQotMjAxNS0wMi0yNSAxNjoxMTowNiArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBnc3R1dGlsczogcmVtb3ZlIGluY29ycmVjdCBGaXhtZSBjb21tZW50Ci0JICBJZiB0aGUgY2hlY2tzIHdlcmUgY2hhbmdlZCB0byB1c2luZyBnX3JldHVybl9pZl9mYWlsKCkgdGhlIEdTVF9ERUJVRyBsaW5lcwotCSAgYWJvdXQgdGhlIHNwZWNpZmljIGZhaWx1cmUgd291bGQgYmUgbG9zdC4KLQotMjAxNS0wMi0yNSAxNjowMjozOSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBnc3R1dGlsczogcmVtb3ZlIG9ic29sZXRlIEZpeG1lIGNvbW1lbnQKLQkgIGdzdF9wYWRfbGlua19maWx0ZXJlZCgpIGlzIHZlcnkgbG9uZyBnb25lIGFuZCBjdXJyZW50Ci0JICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQoKSBkb2Vzbid0IGFwcGx5IHRvIHRoaXMgRml4bWUgY29tbWVudC4KLQotMjAxNS0wMi0yNCAyMTo1ODowMCArMDEwMCAgTWF0dGhpZXUgQm91cm9uIDxtYXR0aGlldS5ib3Vyb25AY29sbGFib3JhLmNvbT4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IGFkZCBhZGFwdGl2ZWRlbXV4IHBhdGhzIGZyb20gLWJhZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTEyMgotCi0yMDE1LTAyLTI0IDE4OjE0OjQ3ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2ZhcS9kZXZlbG9waW5nLnhtbDoKLQkgIGRvY3M6IHJlbW92ZSBkZWFkIGxpbmsKLQkgIFJlbW92ZSBkZWFkIGxpbmsgdG8gd2lraSBwYWdlIGZvciBTdWJtaXR0aW5nUGF0Y2hlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDMxMQotCi0yMDE1LTAyLTI0IDE0OjA3OjU0ICswMTAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW06Ci0JICBoZWxwZXJzOiBGaXggaW5zdGFsbCBvZiBjb21wbGV0aW9uLWhlbHBlci4KLQkgIEJ5IGFwcGx5aW5nIHRoZSBzdXBwbGllZCB0cmFuc2Zvcm1hdGlvbiB0byB0aGUgcHJvZ3JhbSBuYW1lLAotCSAgZm9yIGV4YW1wbGUgLS1wcm9ncmFtLXByZWZpeC4KLQotMjAxNS0wMi0yMyAxNjozOTo0MyAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgotCSAgY29tcGxldGlvbi1oZWxwZXI6IEFkZCBtaXNzaW5nIERFU1RESVIKLQkgIE90aGVyd2lzZSBkb2luZyAibWFrZSBpbnN0YWxsIERFU1RESVIiIHdpbGwgdHJ5IHRvIHdyaXRlIHRvCi0JICAvdXNyL3NoYXJlLy4uLgotCi0yMDE1LTAyLTIzIDIxOjE3OjE2ICswMTAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LWNvbXBsZXRpb24taGVscGVyLmM6Ci0JICBjb21wbGV0aW9uLWhlbHBlcjogQWRkIGZpbHRlcmluZyBieSBrbGFzcyBhbmQgc2luayBjYXBzLgotCi0yMDE1LTAyLTIxIDE3OjEzOjI2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogYXZvaWQgcmV0dXJuaW5nIGRvd25zdHJlYW0gR1NUX0ZMT1dfRU9TIGZyb20gcHJldmlvdXMgc2VnbWVudCB0byBjdXJyZW50IHVwc3RyZWFtIHNlZ21lbnQKLQotMjAxNS0wMi0yMiAxMDowMjoyNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGZsb3djb21iaW5lci5jOgotCSAgZmxvd2NvbWJpbmVyOiBmaXggZG9jdW1lbnRhdGlvbiBjb21tZW50IHR5cG8KLQotMjAxNS0wMi0yMiAxMDowMTozMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBkcmFpbiBzZWdtZW50IHVwb24gU0VHTUVOVF9ET05FIHRvIGVuc3VyZSBwcm9wZXIgZXZlbnQgb3JkZXIKLQotMjAxNS0wMi0yMiAxMDowMTo1MCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBjbGVhbiB1cCBzb21lIGJvZ3VzIGNvbW1lbnRlZCBjb2RlCi0KLTIwMTUtMDItMjMgMTk6MTA6MDggKzAxMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLQotCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKLQkgIGNvbXBsZXRpb24taGVscGVyOiBBcHBlbmQgJChFWEVFWFQpIHRvIHRoZSBuYW1lIG9mIHRoZSBtb3ZlZCBmaWxlLgotCSAgRml4ZXMgdGhlIGJ1aWxkIG9uIFdpbmRvd3MKLQkgIChodHRwczovL2NpLmdzdHJlYW1lci5uZXQvam9iL2NlcmJlcm8tY3Jvc3MtbWluZ3czMi8xNzQyL2NvbnNvbGUpCi0KLTIwMTUtMDItMjMgMTc6MjM6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgRml4IGRpc3RjaGVjawotCSAgRGlzYWJsZSBiYXNoIGNvbXBsZXRpb24gZHVyaW5nIGRpc3RjaGVja2luZyBvdGhlcndpc2UKLQkgIGl0IG1heSB0cnkgdG8gaW5zdGFsbCBpbnRvIGEgc3lzdGVtIHBhdGggYW5kIGZhaWwuCi0KLTIwMTUtMDItMjMgMTc6MTY6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgRGlzdCBuZXcgZGF0YSBkaXJlY3RvcnkKLQkgIEZpeGVzICdtYWtlIGRpc3QnCi0KLTIwMTUtMDItMjAgMjI6MDQ6MjIgKzAxMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkYXRhL01ha2VmaWxlLmFtOgotCSogZGF0YS9jb21wbGV0aW9ucy9nc3QtaW5zcGVjdC0xLjA6Ci0JKiBkYXRhL2NvbXBsZXRpb25zL2dzdC1sYXVuY2gtMS4wOgotCSogbGlicy9nc3QvaGVscGVycy8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0OgotCSogbGlicy9nc3QvaGVscGVycy9nc3QtY29tcGxldGlvbi1oZWxwZXIuYzoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgotCSAgYmFzaC1jb21wbGV0aW9uOiBJbXBsZW1lbnQgaW4gYSBkaWZmZXJlbnQgd2F5LgotCSAgKyBHZXRzIGluc3RhbGxlZAotCSAgKyBVc2VzIGEgaGVscGVyIHRvb2wsIGdzdC1jb21wbGV0aW9uLWhlbHBlciwgaW5zdGFsbGVkIGluCi0JICBiYXNoLWNvbXBsZXRpb25zL2hlbHBlcnMuCi0JICArIEFkZHMgYSBjb21tb24gc2NyaXB0IHRoYXQgb3RoZXIgdG9vbHMgY2FuIHNvdXJjZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQ4NzcKLQotMjAxNS0wMi0yMyAxMjowODo0OSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5oOgotCSAgR3N0RGV2aWNlTW9uaXRvcjoga2VlcCBhbHBoYWJldGljYWwgb3JkZXIKLQotMjAxNS0wMi0yMCAxNjoyMjoyMyAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6Ci0JICBSZXZlcnQgImVsZW1lbnQ6IHNldCBwYWRzIG5lZWQtcGFyZW50IGZsYWcgdG8gZmFsc2Ugd2hlbiByZW1vdmluZyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMTkxMTU1NGNmZjJjNGExMTc3MmI1NDFhODIxNWE4MGM3MjhiMTA5Ny4KLQkgIFRoaXMgYnJlYWtzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIEdTVF9QQURfRkxBR19ORUVEX1BBUkVOVCwgdGhlIHJlYXNvbiBmb3IgdGhpcwotCSAgZmxhZyBpcyB0aGF0IGlmIGEgcGFkIGlzIHJlbW92ZWQgZnJvbSBhIHJ1bm5pbmcgZWxlbWVudCwgeW91IGRvbid0IHdhbnQKLQkgIGZ1bmN0aW9ucyAoc3VjaCBhcyBjaGFpbiBvciBldmVudCkgdG8gYmUgY2FsbGVkIG9uIHRoZSBwYWQgd2l0aG91dCBhIHBhcmVudCBzZXQuCi0JICBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHJlbW92ZSBhIHJlcXVlc3Qgb3Igc29tZXRpbWVzIHBhZCBmcm9tIGEgcnVubmluZyBlbGVtZW50LgotCSAgSSBkb24ndCBzZWUgdGhlIGNvZGUgdGhhdCBjYXVzZWQgdGhpcyBpbiB0c2RlbXV4LCBidXQgaWYgaXQgbmVlZHMgdG8gdW5zZXQKLQkgIHRoZSBmbGFnIG9uIHJlbW92ZSwgaXQgc2hvdWxkIGRvIGl0IGl0c2VsZiBhbmQgdGhlbiBtYWtlIHN1cmUgdGhhdCB0aGUgcGFyZW50Ci0JICBleGlzdHMgaW4gYW55IHBhZCBmdW5jdGlvbi4KLQotMjAxNS0wMi0xOSAxMjoxNzoxNSArMDEwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgY2hlY2s6IGNhc3QgZWxlbWVudCBpbiBBU1NFUlRfU0VUX1NUQVRFLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDc3NwotCi0yMDE1LTAyLTE5IDAxOjE2OjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFVzZSBhIHNlcGFyYXRlIHF1ZXJ5IGZvciB1cHN0cmVhbSBwYWRzIGFuZCBsZXQgaXQgZmFpbCBpZiBvbmUgdXBzdHJlYW0gcXVlcnkgZmFpbHMKLQotMjAxNS0wMi0xOSAwMToxMjo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBJZiB0aGUgbGF0ZW5jeSBxdWVyeSBmYWlscyBmb3Igb25lIG9mIHRoZSBwYWRzLCBpdCBmYWlscyBvdmVyYWxsCi0KLTIwMTUtMDItMTggMTE6MDU6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBSZW1vdmUgdW51c2VkIGJvb2xlYW4gcGFyYW1ldGVyIGZyb20gaW50ZXJuYWwgZnVuY3Rpb25zCi0KLTIwMTUtMDItMTcgMTI6MTE6NDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JICBxdWV1ZTogQWRkIHVuaXQgdGVzdCBmb3IgYnVmZmVyIGxpc3QgYW5kIHRpbWUgbGV2ZWwgaGFuZGxpbmcKLQotMjAxNS0wMi0xNyAxMTo0NDo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IEFkZCBzdXBwb3J0IGZvciBidWZmZXIgbGlzdHMKLQotMjAxNS0wMi0xNyAxMTo0MTo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogQ291bnQgdGhlIG51bWJlciBvZiBidWZmZXJzIGluIGEgYnVmZmVyIGxpc3QgZm9yIHVwZGF0aW5nIHRoZSBjdXJyZW50IGxldmVscwotCSAgaW5zdGVhZCBvZiBqdXN0IGFzc3VtaW5nIG9uZSBidWZmZXIuCi0KLTIwMTUtMDItMTcgMjA6NDc6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiByZXZpdmUgYXN5bmMgZGVsaXZlcnkgbWVzc2FnZSBiZWZvcmUgYnVzIHRocmVhZCBjYW4gcnVuIHVucmVmCi0JICBSZXZpdmUgbWVzc2FnZSBpbiBkaXNwb3NlIGhhbmRsZXIgYmVmb3JlIHdlIHNpZ25hbCB0aGUgYnVzIHRocmVhZCwKLQkgIG90aGVyd2lzZSB0aGUgYnVzIHRocmVhZCBtaWdodCBiZSB3b2tlbiB1cCBhbmQgdW5yZWYgdGhlIG1lc3NhZ2UKLQkgIGJlZm9yZSB3ZSBoYWQgYSBjaGFuY2UgdG8gcmV2aXZlIGl0IHlldC4KLQotMjAxNS0wMi0xNiAyMzowMjo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOgotCSAgdGVzdHM6IGJ1czogYWRkIHVuaXQgdGVzdCBmb3IgYXN5bmMgbWVzc2FnZSBkZWxpdmVyeQotCi0yMDE1LTAyLTE2IDIyOjM5OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlLCBidXM6IGZpeCBhc3luYyBtZXNzYWdlIGRlbGl2ZXJ5Ci0JICBBc3luYyBtZXNzYWdlIGRlbGl2ZXJ5ICh3aGVyZSB0aGUgcG9zdGluZyB0aHJlYWQgZ2V0cyBibG9ja2VkCi0JICB1bnRpbCB0aGUgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kL29yIGZyZWVkKSB3YXMgcHJldHR5Ci0JICBtdWNoIGNvbXBsZXRlbHkgYnJva2VuLgotCSAgRm9yIG9uZSwgZG9uJ3QgdXNlIEdNdXRleCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGNoZWNrCi0JICB3aGV0aGVyIGEgbXV0ZXggaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb3Igbm90LCBlc3AuIG5vdAotCSAgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IGRvbid0IGhvbGQgdHJ1ZSBhbnkgbW9yZSB3aXRoCi0JICBuZXdlciBHTGliIHZlcnNpb25zIHdoZXJlIGF0b21pYyBvcHMgYW5kIGZ1dGV4ZXMgYXJlIHVzZWQKLQkgIChzcG90dGVkIGJ5IEpvc2VwIFRvcnJhcykuIFRoaXMgbGVkIHRvIGFzeW5jIG1lc3NhZ2UKLQkgIGRlbGl2ZXJ5IG5vIGxvbmdlciBibG9ja2luZyB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgb24KLQkgIExpbnV4LgotCSAgU2Vjb25kbHksIGFmdGVyIGFzeW5jIGRlbGl2ZXJ5IGRvbid0IGZyZWUgbXV0ZXgvR0NvbmQKLQkgIGVtYmVkZGVkIGluc2lkZSB0aGUganVzdC1mcmVlZCBtZXNzYWdlIHN0cnVjdHVyZS4KLQkgIFVzZSBhIG5ldyAocHJpdmF0ZSkgbWluaSBvYmplY3QgZmxhZyB0byBzaWduYWwgR3N0TWVzc2FnZQotCSAgdGhhdCB0aGUgbWVzc2FnZSBiZWluZyBmcmVlZCBpcyBwYXJ0IG9mIGFuIGFzeW5jIGRlbGl2ZXJ5Ci0JICBvbiB0aGUgYnVzIHNvIHRoYXQgdGhlIGRpc3Bvc2UgaGFuZGxlciBjYW4ga2VlcCB0aGUgbWVzc2FnZQotCSAgYWxpdmUgYW5kIHRoZSBidXMgY2FuIGZyZWUgaXQgb25jZSBpdCdzIGRvbmUgY2xlYW5pbmcgdXAKLQkgIHN0dWZmLgotCi0yMDE1LTAyLTE2IDE5OjI0OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogbmljZXIgYnVmZmVyIG9mZnNldCBwcmludGluZyB3aGVuIG9mZnNldHMgYXJlIG5vdCBzZXQKLQkgIFByaW50IHVuc2V0IG9mZnNldHMgYXMgJ25vbmUnIGluc3RlYWQgb2YgaHVtb25nb3VzIG51bWJlcnMsCi0JICBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgotCi0yMDE1LTAyLTE2IDExOjM1OjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IE9ubHkgaW5pdGlhbGl6ZSBHVmFsdWUgdG8gYSB0eXBlIG9uY2UsIG5vdCBvbiBldmVyeSByZXRyeQotCSAgT3RoZXJ3aXNlIHdlJ2xsIGdldCB3YXJuaW5ncyBsaWtlIHRoaXM6Ci0JICBjYW5ub3QgaW5pdGlhbGl6ZSBHVmFsdWUgd2l0aCB0eXBlICdnYm9vbGVhbicsIHRoZSB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGFzICdnYm9vbGVhbicKLQotMjAxNS0wMi0xNCAxMjoxNTowMyArMDEwMCAgTWF0dGhpZXUgQm91cm9uIDxtYXR0aGlldS5ib3Vyb25AY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBnc3R1dGlsczogY2hlY2sgdXJpIGJlZm9yZSB1c2luZyBpdCBpbiBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfaW50ZXJuYWwKLQkgIElmIGFuIGVsZW1lbnQgaW1wbGVtZW50cyB3cm9uZ2x5IHRoZSBVUkkgcXVlcnkgYW5kIHNldCB0aGUgdXJpIHRvIE5VTEwgYW5kIGlmCi0JICB0aGUgZWxlbWVudCBjYWxscyBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWQgYXQgc29tZSBwb2ludCwgaXQgd2lsbCBsZWFkIHRvIGNyYXNoCi0JICBhcyB0aGUgdXJpIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBOVUxMIGluIHRoZSBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfaW50ZXJuYWwKLQkgIGZ1bmN0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDUyMAotCi0yMDE1LTAyLTEzIDE5OjQzOjI0ICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYzoKLQkgIHRpbWVkdmFsdWVjb250cm9sc291cmNlOiBEbyBub3Qgd3JvbmdseSBzZW5kIHZhbHVlLXJlbW92ZWQKLQkgIEFuZCBhdm9pZCBmcmVlaW5nIHNvbWV0aGluZyB3ZSBkbyBub3Qgb3duCi0KLTIwMTUtMDItMDQgMTU6MDY6MTcgKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IFNldCBHU1RfVkFMSURBVEVfUExVR0lOX1BBVEgKLQotMjAxNS0wMi0xMiAxMzozNDo0OSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGZpeCBkb2N1bWVudGF0aW9uIGFuZCBkZWJ1ZyBtZXNzYWdlIGFmdGVyIGxhdGVuY3kgdXBkYXRlcwotCSAgQ2hhbmdlcyBkb2NzIGFuZCBtZXNzYWdlIGFjY29yZGluZyB0byBsYXRlbmN5IGhhbmRsaW5nIGZpeAotCi0yMDE1LTAyLTEyIDE0OjUwOjE1ICswMDAwICBGcsOpZMOpcmljIFdhbmcgPGZyZWQud2FuZ0BmcmVlLmZyPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JICBmZHNyYzogdXNlIGdfYXNjaWlfc3RydG91bGwoKSB0byBjb252ZXJ0IHNpemUgc3RyaW5nIGluIHVyaQotCSAgc3NjYW5mKCkgZG9lc24ndCBoYW5kbGUgR19HVUlOVDY0X0ZPUk1BVCB3ZWxsIG9uIG1pbmd3NjQgaXQKLQkgIGFwcGVhcnMsIGxlYWRpbmcgdG8gY29tcGlsZXIgd2FybmluZ3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MDM0Ci0KLTIwMTUtMDItMTIgMTQ6MDM6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzKCkgY2FuIHJldHVybiBOVUxMIGlmIHRoZXJlIGFyZSBub25lCi0KLTIwMTUtMDItMTIgMTQ6MDM6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogUmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBGQUxTRSBmb3IgcG9pbnRlcnMKLQotMjAxNS0wMi0xMiAxMzo1NTozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBJbXBsZW1lbnQgbW9yZSB1c2VmdWwgZGVmYXVsdCBoYW5kbGluZyBmb3IgdGhlIExBVEVOQ1kgcXVlcnkKLQkgIEJlZm9yZSB3ZSBqdXN0IHRvb2sgdGhlIHZhbHVlcyBmcm9tIHRoZSBmaXJzdCBwYWQgdGhhdCBzdWNjZWRlZCB0aGUgcXVlcnksCi0JICBub3cgd2UgYWNjdW11bGF0ZSB0aGUgcmVzdWx0cyBvZiBldmVyeSBzaW5rcGFkIHByb3Blcmx5IGFuZCByZXR1cm4gdGhhdAotCSAgcmVzdWx0LgotCi0yMDE1LTAyLTEyIDExOjI2OjI2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWxhdGVuY3kudHh0OgotCSAgZGVzaWduL3BhcnQtbGF0ZW5jeTogTWlub3IgbG9naWMgZml4Ci0JICBUaGUgbWF4aW11bSBsYXRlbmN5IHdpbGwgYmUgdGhlIGVsZW1lbnQncyBtaW5pbXVtIGxhdGVuY3kgb3IgYmlnZ2VyLAotCSAgbm90IGJpZ2dlciB0aGFuIHRoZSBlbGVtZW50J3MgbWluaW11bSBsYXRlbmN5IG9yIGJpZ2dlci4KLQotMjAxNS0wMi0xMSAxMzo0MTo1NiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBJbXByb3ZlIGFuZCBmaXggTEFURU5DWSBxdWVyeSBoYW5kbGluZwotCSAgVGhpcyBub3cgZm9sbG93cyB0aGUgZGVzaWduIGRvY3MgZXZlcnl3aGVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQxMDYKLQotMjAxNS0wMi0xMSAxMjoyMDozOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1sYXRlbmN5LnR4dDoKLQkgIGRlc2lnbi9wYXJ0LWxhdGVuY3k6IEFkZCBtb3JlIGRldGFpbHMgYWJvdXQgbWluL21heCBsYXRlbmN5IGhhbmRsaW5nCi0JICBUaGVzZSBkb2NzIG1pc3NlZCBtYW55IGRldGFpbHMgdGhhdCB3ZXJlIG5vdCBvYnZpb3VzIGFuZCBiZWNhdXNlIG9mIHRoYXQKLQkgIGhhbmRsZWQgaW4gYSBmZXcgZGlmZmVyZW50LCBpbmNvbXBhdGlibGUgd2F5cyBpbiBkaWZmZXJlbnQgZWxlbWVudHMgYW5kIGJhc2UKLQkgIGNsYXNzZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTA2Ci0KLTIwMTUtMDItMDcgMDU6MTY6MjMgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2xvY2suYzoKLQkgIHRlc3RzOiBGaXggY2xvY2sgcmVncmVzc2lvbiB0ZXN0Ci0JICBGaXggdXAgdGhlIHZhbHVlcyB0aGUgdGVzdCBpcyBjaGVja2luZyBmb3Igbm93IHRoYXQKLQkgIHRoZSBjbG9jayByZWdyZXNzaW9uIHJldHVybnMgcGFyYW1ldGVycyBzdGFydGluZyBmcm9tCi0JICB0aGUgZW5kIG9mIHRoZSByZWdyZXNzaW9uIHJhbmdlLgotCi0yMDE1LTAyLTA3IDA0OjIyOjIyICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbG9jazogRG9uJ3QgdXBkYXRlIHRoZSBjbG9jayB3aGVuIGl0IGRlc3luY2gKLQkgIEFkZCBhIGhvbGQgb2ZmIHdoZW4gdGhlIGNsb2NrIGNhbGlicmF0aW9uIHN1ZGRlbmx5IGxvc2VzIHN5bmNoLAotCSAgYXMgaXQgbWF5IGJlIGEgZ2xpdGNoLCBidXQgYWxzbyBtYWtlIHN1cmUgd2UgdXBkYXRlIGlmIGl0IHN0YXlzCi0JICBkZXN5bmNoZWQgZm9yIG1vcmUgdGhhbiBhIGZldyBzZWNvbmRzCi0KLTIwMTUtMDItMDYgMDY6MDc6NDMgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG5ldGNsb2NrOiBNYWtlIHRoZSBSVFQgYXZlcmFnZSBpZ25vcmUgbGFyZ2UgdmFsdWVzIG1vcmUgZm9yY2VmdWxseS4KLQkgIFNtb290aCBsYXJnZXIgUlRUcyBhIGxpdHRsZSBoYXJkZXIsIHNvIGV4Y2Vzc2l2ZWx5IGxhcmdlIHZhbHVlcwotCSAgcGVydHVyYiB0aGUgYXZlcmFnZSBhIGJpdCBsZXNzLCBhbmQgdGhlcmVmb3JlIGdldCBmaWx0ZXJlZCBvdXQKLQkgIG1vcmUgc3Ryb25nbHkKLQotMjAxNS0wMi0wNSAyMjo1NTozOSArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RjbG9jay1saW5yZWcuYzoKLQkgIGNsb2NrOiBNYWtlIGxpbmVhciByZWdyZXNzaW9uIHgveSBiYXNlIHN0YXJ0IGZyb20gbWF4aW11bSBvYnNlcnZhdGlvbi4KLQkgIFByb2plY3QgdGhlIHJlc3VsdHMgb2YgdGhlIGxpbmVhciByZWdyZXNzaW9uIHRvIHRoZSBlbmQgb2YgdGhlCi0JICByZWdyZXNzaW9uIHJhbmdlLCBzbyB0aGV5J3JlIG1vcmUgZGlyZWN0bHkgY29tcGFyYWJsZSB0byByZXN1bHRzCi0JICBnb2luZyBmb3J3YXJkCi0KLTIwMTUtMDItMDUgMTM6NDk6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkICJvZmZzZXQiIHByb3BlcnR5IHRvIGdvIHdpdGggZ3N0X3BhZF9zZXRfb2Zmc2V0KCkKLQkgIFNvIHdlIGNhbiBzZXQgdGhlIG9mZnNldCB2aWEgZ3N0LWxhdW5jaC4KLQotMjAxNS0wMi0wMiAwODoyMjo0NyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgcGx1Z2luOiBhZGQgbW9yZSBkZXRhaWwgdG8gbG9nZ2luZyB3aGVuIG5vdCBsb2FkaW5nIGEgcGx1Z2luCi0JICBJbXByb3ZlIHRoZSBsb2cgbWVzc2FnZXMgYW5kIGFkZCBlLmcgdGhlIHZlcnNpb24gbnVtYmVyIHdlIGNoZWNrZWQuCi0KLTIwMTUtMDItMDIgMTc6Mzc6NDQgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBnc3RwYWQ6IEZpeCBhIHR5cG8gaW4gYSBkb2NzdHJpbmcuCi0KLTIwMTUtMDItMDEgMTQ6MjM6MjYgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFzay5jOgotCSAgYnVpbGQ6IENoZWNrIHRoYXQgX01TQ19WRVIgbWFjcm8gaXMgZGVmaW5lZAotCi0yMDE1LTAyLTAxIDAzOjM5OjAzICswMjAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0dGFzay5jOgotCSAgdGFzazogQWRkIHRocmVhZCBuYW1lIHN1cHBvcnQgb24gT1MgWCBhbmQgaU9TCi0KLTIwMTUtMDEtMjkgMTY6Mzc6MDcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RjbG9jay1saW5yZWcuYzoKLQkgIGNsb2NrOiBEb24ndCB1c2UgaW52YWxpZCBvYmplY3RzIGZvciBHU1RfREVCVUdfT0JKRUNUKCkKLQkgIE5vdCBzdXJlIHdoYXQgImNsb2NrIiBhY3R1YWxseSBpcyBoZXJlLCBpdCBtdXN0IGJlIHNvbWV0aGluZyBkZWZpbmVkIGJ5IG9uZSBvZgotCSAgdGhlIGhlYWRlcnMgdGhhdCBhcmUgaW5jbHVkZWQuCi0KLTIwMTUtMDEtMjkgMTI6MTA6MTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogRG9jdW1lbnQgdGhhdCBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uKCkgYWNjZXB0cyAtMSBhcyBzaXplIHRvIGNvcHkgdW50aWwgdGhlIGVuZAotCSAgSXQncyBqdXN0IGEgd3JhcHBlciBhcm91bmQgZ3N0X2J1ZmZlcl9jb3B5X2ludG8oKSBhZnRlciBhbGwuCi0KLTIwMTQtMTItMDkgMTY6Mjg6NTYgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIHNlZ21lbnQ6IEFkZCBuZXcgc2tpcCBmbGFncyBmb3IgY2xhcmlmeWluZyB0cmljayBtb2RlIHBsYXliYWNrLgotCSAgQWRkIEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFX0tFWV9VTklUUyBhbmQKLQkgIEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFX05PX0FVRElPLCBhbmQgcmVuYW1lIEdTVF9TRUVLX0ZMQUdfU0tJUAotCSAgdG8gR1NUX1NFRUtfRkxBR19UUklDS01PREUgKHdpdGggYmFja3dhcmRzIGNvbXBhdCBkZWZpbmUpLgotCSAgRG8gdGhlIHNhbWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIFNFR01FTlQgZmxhZ3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1NjY2Ci0KLTIwMTUtMDEtMjMgMDg6NTk6MjcgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBjaGVjazogZml4IGFub3RoZXIgdHlwbyBpbiB0aGUgZG9jcwotCi0yMDE1LTAxLTIyIDIzOjEwOjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IEZpeCBpbmRlbnRpb24KLQotMjAxNS0wMS0yMSAxNDoxMDowMiArMDAwMCAgRGF2aWQgV2FyaW5nIDxkYXZpZC53YXJpbmdAcmQuYmJjLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IEZpeCBuZXcgVVJJIHBhcnNpbmcgdGVzdHMgYmFzZWQgb24gR05ldCdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzMTk1Ci0KLTIwMTUtMDEtMjEgMTQ6MDk6NDUgKzAwMDAgIERhdmlkIFdhcmluZyA8ZGF2aWQud2FyaW5nQHJkLmJiYy5jby51az4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgdXJpOiBGaXggcGFyc2luZyBpc3N1ZXMKLQkgIE1ha2UgaG9zdCBJUHMgaW4gc3F1YXJlIGJyYWNrZXRzIHN0b3JlIG9ubHkgdGhlIElQLCBpLmUuIHN0cmlwIHRoZSBicmFja2V0cy4KLQkgIFN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIFVSSXMuCi0JICBGYWlsIHBhcnNpbmcgd2hlbiBob3N0IHBhcnQgZG9lcyBub3QgbWF0Y2ggYW55IHZhbGlkIGZvcm1hdHMgZnJvbSBSRkMzOTg2LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzE5NQotCi0yMDE1LTAxLTE5IDE5OjE1OjMyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IEFkZCBwYXJzaW5nIHVuaXQgdGVzdCBiYXNlZCBvbiBHTmV0J3MKLQkgIFBsdXMgc29tZSBuZXcgVVJJcyB0byBwYXJzZS4KLQkgIGh0dHBzOi8vZ2l0Lmdub21lLm9yZy9icm93c2UvYXJjaGl2ZS9nbmV0L3BsYWluL3Rlc3RzL2NoZWNrL2duZXQvZ25ldHVyaS5jCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzMTk1Ci0KLTIwMTUtMDEtMjIgMTE6Mjk6MTggKzAxMDAgIEhlaW5yaWNoIEZpbmsgPGhmaW5rQHRvb2xzb25haXIuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgY2hlY2s6IEZpeCBkb2Mgb2YgR1NUX0NIRUNLUyBhbmQgR1NUX0NIRUNLU19JR05PUkUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDMzMzUKLQotMjAxNS0wMS0yMSAxODowNzowOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgY2hlY2s6IEFkZCBfZmFpbF91bmxlc3MoKSBjb21wYXRpYmlsaXR5IGZ1bmN0aW9uIGFyb3VuZCBfY2tfYXNzZXJ0X2ZhaWxlZCgpCi0JICBXZSBleHBvcnRlZCB0aGlzIGluIDwgMS41IGFuZCBpdCB3YXMgYXV0b21hdGljYWxseSB1c2VkIGJ5IG1hbnkgbWFjcm9zCi0JICBmcm9tIHRoZSBoZWFkZXIuIEtlZXAgaXQgZXhwb3J0ZWQgZm9yIG5vdy4KLQotMjAxNS0wMS0yMSAxNDoxMjoyMiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0cGFkOiBJbmxpbmUgYXBwbHlfcGFkX29mZnNldCgpCi0JICBBdm9pZCBkb2luZyBhIGZ1bmN0aW9uIGNhbGwgZm9yIHNvbWV0aGluZyB3aGljaCB3aWxsIG1vc3RseSBiZSB1bnVzZWQKLQotMjAxNS0wMS0yMSAxNDoxMDowNiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0cGFkOiBGaXggZGVidWcgbWVzc2FnZQotCi0yMDE1LTAxLTIxIDExOjQ1OjQxICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBnc3RwYWQ6IEZpeCBQUk9CRV9OT19EQVRBIG1hY3JvCi0JICBUaGUgcHJvYmxlbSB3YXMgdGhhdCB0aGUgbWFjcm8gd2FzIGFsd2F5cyB1c2VkIHdpdGggJ3JldCcgYXMgdGhlIGRlZmF1bHR2YWwKLQkgIGFyZ3VtZW50LgotCSAgVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIG1hY3JvIGV2ZW50dWFsbHkgZXhwYW5kaW5nIHRvCi0JICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IHJldCAmJiByZXQgIT0gR1NUX0ZMT1dfT0spKQotCSAgLi4uIHJldCAhPSByZXQgd2lsbCBhbHdheXMgZmFpbCwgYW5kIHRoZXJlZm9yZSB3ZSdkIG5ldmVyIGNhbGwgdGhlCi0JICBmb2xsb3dpbmcgbGluZS4KLQkgIEluc3RlYWQgb2YgdGhhdCwgc3RvcmUgdGhlIHByZXZpb3VzIHZhbHVlIGxvY2FsbHkgZm9yIGNvbXBhcmlzaW9uCi0KLTIwMTUtMDEtMjEgMjI6NDQ6NTkgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG5ldGNsb2NrOiBGaXggZG9jcyB0eXBvLiBDbG9jayBidXMgbWVzc2FnZXMgYXJlIEdTVF9NRVNTQUdFX0VMRU1FTlQKLQotMjAxNS0wMS0xNSAyMjozMjoyOCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xvY2s6IEltcGxlbWVudCByYXRlIGxpbWl0cyBmb3IgcG9sbGluZyBhbmQgZml4IHVwIHNrZXcgbGltaXRzCi0JICBBZGQgdGhlIG1pbmltdW0tdXBkYXRlLWludGVydmFsIHByb3BlcnR5IHRvIHRoZSBjbG9jaywgd2l0aCBhIGRlZmF1bHQKLQkgIG9mIDUwbXMgYW5kIGRvbid0IHNlbmQgcG9sbGluZyByZXF1ZXN0cyBmYXN0ZXIgdGhhbiB0aGF0LiBUaGF0IGhlbHBzIHRvCi0JICBlbnN1cmUgd2Ugc3ByZWFkIHRoZSBpbml0aWFsIG9ic2VydmF0aW9ucyBvdXQgYSBsaXR0bGUgLSBzdGFydHVwIHRha2VzCi0JICBhIGxpdHRsZSBsb25nZXIsIGJ1dCB0cmFja2luZyBpcyBtb3JlIHN0YWJsZS4KLQkgIE1vdmUgdGhlIGRpc2NvbnQgc2tldyBsaW1pdGluZyBjb2RlIGluc2lkZSBhbiBpZiBzdGF0ZW1lbnQsIHNvIHRoYXQKLQkgIGl0J3Mgb25seSBkb25lIHdoZW4gdGhlIGxpbmVhciByZWdyZXNzaW9uIHN1Y2NlZWRzIGFuZCB0aGUgY2xvY2sKLQkgIHBhcmFtZXRlcnMgbWlnaHQgYWN0dWFsbHkgY2hhbmdlLgotCi0yMDE1LTAxLTE1IDEwOjA1OjMyICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0Y2xvY2stbGlucmVnLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjbG9jay5jOgotCSAgY2xvY2s6IEltcHJvdmUgc2xhdmluZyByZWdyZXNzaW9uLgotCSAgQWRkIGRvbWFpbiBjaGVja3MgZm9yIHRoZSBpbnB1dCB2YWx1ZXMsIGFuZCBhIHZhcmlhYmxlIHByZWNpc2lvbgotCSAgY2FsY3VsYXRpb24gdGhhdCBsb29wcyBpZiBuZWNlc3NhcnkgdG8gZW5zdXJlIHdlIG5ldmVyIG92ZXJmbG93Ci0JICBhY2N1bXVsYXRvcnMgYW5kIHRoZW4gc2lsZW50bHkgcHJvZHVjZSBnYXJiYWdlIHJlc3VsdHMuCi0JICBNYWtlIHRoZSAobm9uLXB1YmxpYykgbGluZWFyIHJlZ3Jlc3Npb24gZnVuY3Rpb24gYXZhaWxhYmxlIGZvcgotCSAgdW5pdCB0ZXN0aW5nIGJ5IHB1dHRpbmcgaXQgaW4gYSBzZXBhcmF0ZSBzb3VyY2UgZmlsZSB0aGUgdGVzdAotCSAgY2FuIGluY2x1ZGUuIEFkZCBhIHVuaXQgdGVzdCB0aGF0IHRoZSBuZXcgcmVncmVzc2lvbiBmdW5jdGlvbgotCSAgcHJvZHVjZXMgc2Vuc2libGUgcmVzdWx0cyBmb3Igc2V2ZXJhbCBpbnB1dHMgdGFrZW4gZnJvbSByZWFsLXdvcmxkCi0JICBjYXB0dXJlcy4KLQotMjAxNS0wMS0xMCAyMTo0MjowMCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvbmV0Y2xvY2svLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL25ldGNsb2NrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvbmV0Y2xvY2svbmV0Y2xvY2stY2xpZW50LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9uZXRjbG9jay1zZXJ2ZXIuYzoKLQkgIG5ldGNsb2NrOiBBZGQgc2ltcGxlIG5ldHdvcmsgY2xvY2sgc2VydmVyIGFuZCBjbGllbnQgZXhhbXBsZXMKLQotMjAxNS0wMS0xMCAyMTo0MjowMCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xvY2s6IEltcGxlbWVudCBzZW5kaW5nIHN0YXRpc3RpYyBidXMgbWVzc2FnZXMgYW5kIGRpc2NvbnQgbGltaXRzCi0JICBBbGxvdyBzZXR0aW5nIGEgR3N0QnVzIG9uIHRoZSBuZXR3b3JrIGNsb2NrIGNsaWVudAotCSAgdmlhIGEgbmV3ICdidXMnIG9iamVjdCBwcm9wZXJ0eS4gSWYgYSBidXMgaXMgc2V0LCB0aGUKLQkgIGNsb2NrIHdpbGwgb3V0cHV0IGFuIGVsZW1lbnQgbWVzc2FnZSBjb250YWluaW5nIHN0YXRpc3RpY3MKLQkgIGFib3V0IG5ldyBjbG9jayBvYnNlcnZhdGlvbnMgYW5kIHRoZSBjbG9jayBjb3JyZWxhdGlvbi4KLQkgIFdoZW4gdGhlIGxvY2FsIGNsb2NrIGlzIHN5bmNocm9uaXNlZCB3aXRoIHRoZSByZW1vdGUsIGxpbWl0IHRoZQotCSAgbWF4aW11bSBqdW1wIGluIHRoZSBjbG9jayBhdCBhbnkgcG9pbnQgdG8gYmUgb25lIGF2ZXJhZ2UgUlRUIHRvCi0JICB0aGUgc2VydmVyLiBBbHNvLCBwdWJsaXNoIGluIHRoZSBidXMgbWVzc2FnZSB3aGV0aGVyIHdlIGFyZQotCSAgc3luY2hlZCB3aXRoIHRoZSByZW1vdGUgb3Igbm90LgotCi0yMDE1LTAxLTEwIDIxOjQyOjAwICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgY2xvY2s6IEFkZCBnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZCgpCi0JICBnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZCgpIGFkZHMgYSBuZXcgbWFzdGVyL3NsYXZlIGNsb2NrCi0JICBvYnNlcnZhdGlvbiBhbmQgcnVucyB0aGUgcmVncmVzc2lvbiB3aXRob3V0IGFjdGl2YXRpbmcgdGhlIG5ldwotCSAgY2FsaWJyYXRpb24gcmVzdWx0cy4KLQotMjAxNC0xMi0xNiAyMjo1MToyMiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNsb2NrOiBBZGQgZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uKCkKLQkgIGdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbigpIHVzZXMgZGlyZWN0bHkgcGFzc2VkIGNhbGlicmF0aW9uCi0JICBwYXJhbWV0ZXJzLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjbG9jaydzIGN1cnJlbnQgY2FsaWJyYXRpb24sCi0JICBhbGxvd2luZyBmb3IgY2FsY3VsYXRpb25zIHVzaW5nIHBlbmRpbmcgb3Igb2xkIGNhbGlicmF0aW9uIHBhcmFtcwotCi0yMDE1LTAxLTIxIDA5OjQ1OjE2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBvdXRwdXQtc2VsZWN0b3I6IENvbnN0aWZ5IG5lZ290aWF0aW9uIG1vZGUgR0VudW1WYWx1ZSB0YWJsZQotCi0yMDE1LTAxLTIwIDEwOjM1OjQ3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZG9jczogZml4IHR5cG8gaW4gR3N0RXZlbnQgZG9jcwotCSAgc2VuZCAtPiBzZW50Ci0KLTIwMTUtMDEtMjAgMDk6MTk6MTAgKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBzY3JpcHRzOiBSZW1vdmUgZ25vbmxpbiBmcm9tIHRoZSBzY3JpcHRzCi0JICBJdCBpcyBub3QgbWFpbnRhaW4gYW55bW9yZSBhbmQgaXRzIGZlYXR1cmUgYXJlIG5vdyBpbnNpZGUgdGhlIEdTdHJlYW1lcgotCSAgRWRpdGluZyBTZXJ2aWNlcyAoZm9yIHRoZSB0aW1lIGJlaW5nKS4KLQotMjAxNS0wMS0xNiAxOToxNzozMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBQYXNzIHN0cnVjdHMgd2UgcGxhbiB0byBtb2RpZnkgYXJvdW5kIGJ5IHBvaW50ZXIsIG5vdCB2YWx1ZQotCSAgT3RoZXJ3aXNlIHRoZSBzdHJ1Y3QgaXMgZ29pbmcgdG8gYmUgY29waWVkLCB3aGljaCBpcyBub3QgdmVyeSBlZmZpY2llbnQuIEFuZAotCSAgYWxzbyBoYXMgdGhlIG5pY2Ugc2lkZSBlZmZlY3QgdGhhdCBtb2RpZmljYXRpb25zIG9mIHRoZSBzdHJ1Y3QgbWlnaHQgYmUKLQkgIGRvbmUgaW4gYSBjb3B5LCBhbmQgd2UgbGF0ZXIgdXNlIHRoZSBvcmlnaW5hbCBzdHJ1Y3Qgd2l0aG91dCB0aGUgY2hhbmdlcy4KLQkgIENhdXNlZCBMQVRFTkNZIHF1ZXJpZXMgdG8gYWx3YXlzIHJldHVybiB0aGUgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluIG9uZSBvZiBteQotCSAgdGVzdHMsIGluc3RlYWQgb2YgdGhlIGFjdHVhbCB2YWx1ZXMgcmVwb3J0ZWQgYnkgY2hpbGQgZWxlbWVudHMuCi0KLTIwMTUtMDEtMTQgMTA6NTI6MTEgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBpZGVudGl0eTogc2VuZCBnYXAgZXZlbnRzIHdoZW4gZHJvcHBpbmcgYnVmZmVycwotCi0yMDE1LTAxLTEzIDE4OjExOjM5ICswMDAwICBQaGlsbGlwIFdvb2QgPHBoaWxsaXAud29vZEBkdW5lbG0ub3JnLnVrPgotCi0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JICBwcmVzZXQ6IGZpeCBpbmNvcnJlY3QgcHJlc2V0IHZlcnNpb24gY29tcGFyaXNvbgotCSAgVXNlIGFwcF92ZXJzaW9uIGlmIHRoZXJlIGFyZSBubyBzeXN0ZW0gcHJlc2V0cywgc28gdGhhdCBpZiB0aGUKLQkgIGFwcGxpY2F0aW9uIHByZXNldHMgYXJlIG5ld2VyIHRoYW4gdGhlIHVzZXIgcHJlc2V0cyB0aGV5IGFyZSBtZXJnZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyODc3Ci0KLTIwMTUtMDEtMTIgMTY6MDM6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogRG9uJ3QgZGVyZWZlcmVuY2UgTlVMTCBwb2ludGVyCi0JICBDSUQgMTI2MjI4NgotCi0yMDE1LTAxLTEyIDE1OjU1OjQ3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZjJjNmI5NSB0byBiYzc2YThiCi0KLTIwMTUtMDEtMTEgMjM6MDA6MjkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIHByZXNldDogZml4IHNvcnRpbmcgcHJlc2V0cwotCSAgVGhlIGdsaWIgZG9jcyBhcmUgbm90IGNsZWFyIG9uIHRoaXMsIGJ1dCB0aGUgcXNvcnQgbWFuLXBhZ2UgaXMgLSB0aGUKLQkgIEdDb21wYXJlRGF0YUZ1bmMgZG9lcyBub3QgZ2V0IHRoZSBzdHJpbmdzLCBidXQgcG9pbnRlcnMgdG8gdGhlbS4KLQotMjAxNC0xMi0zMSAxODo1MjozNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBmaXggc2lsbHkgR1F1ZXVlIGl0ZXJhdGlvbiBjb2RlCi0JICBOb3QgYWN0aXZlIGJ5IGRlZmF1bHQgdGhvdWdoLgotCi0yMDE1LTAxLTA0IDIzOjI0OjUzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JICBwcmVzZXQ6IGRvbid0IHJldHVybiBlbXB0eSBwcmVzZXQgbGlzdHMKLQkgIEFkZCBhIHNob3J0Y3V0IGZvciB0aGUgY2FzZXMgd2hlcmUgYW4gZWxlbWVudCBpbXBsZW1lbnRzIHRoZSBwcmVzZXQgaWZhY2UgYnV0Ci0JICBoYXMgbm8gcHJlc2V0cyBhbmQgcmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0IGluIHRoYXQgY2FzZS4KLQotMjAxNS0wMS0wNCAyMzowODo0NyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGdzdC1pbnNwZWN0OiBvbmx5IHByaW50IHByZXNldHMgbGluZSBpZiBudW0tcHJlc2V0cyA+IDAKLQkgIEFsc28gY2hlY2sgZm9yIGFuIGVtcHR5IHN0cnYuCi0KLTIwMTUtMDEtMDQgMjI6NTE6MDkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogZml4IG91dHB1dCBmb3IgLWEKLQkgIFVzZSBuX3ByaW50IHRvIGVuc3VyZSBhbGwgbGluZXMgYXJlIHByZWZpeGVkIHdpdGggdGhlIGVsZW1lbnQgbmFtZS4KLQotMjAxNC0xMi0yOSAxMTo1NDowMCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSAgZG9jczogaWdub3JlIGxpYmNoZWNrIGhlYWRlcnMgdGhhdCB1c2UgZG94eWdlbiBjb21tZW50cwotCi0yMDE0LTEyLTI5IDExOjUyOjIyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgZG9jczogZml4IHR3byBndGstZG9jIHdhcm5pbmdzCi0JICBPbmUgYnkgY29ycmVjdGluZyB0aGUgZW5kLW9mLWNvbW1lbnQgbWFya2VyIGFuZCBvbmUgYnkgbWFraW5nIHN1cmUgdGhlIGZ1bmN0aW9uCi0JICBwcm90b3R5cGUgaW4gdGhlIGhlYWRlciBpcyBpbiBzeW5jIHdpdGggdGhlIGMgZmlsZSBhbmQgZG9jLWJsb2IuCi0KLTIwMTQtMTItMjYgMjM6MjI6MzAgKzAxMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgZG9jczogQWRkIG1pc3NpbmcgaW50ZXJmYWNlcyB0byBkb2N1bWVudGF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDU3Ci0KLTIwMTQtMTItMjcgMTU6MTU6MzAgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBpdGVyYXRvcjogRml4IG91dGRhdGVkIGV4YW1wbGUgY29kZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24KLQkgIEdzdEl0ZXJhdG9yIG5vIGxvbmdlciByZXR1cm5zIGEgcmVmY291bnRlZCBncG9pbnRlcgotCi0yMDE0LTEyLTI0IDEzOjQ2OjI4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFVzZSB0aGUgc2FtZSB3YWl0aW5nIGZ1bmN0aW9uIGZvciBFT1MgYW5kIG5vbi1FT1Mgd2FpdGluZwotCi0yMDE0LTEyLTI0IDEzOjQ0OjA5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFdha2UgdXAgYWxsIHdhaXRpbmdzIHBhZHMgZGlyZWN0bHkgaWYgd2UgZm9yd2FyZCB0aGUgRU9TIGV2ZW50Ci0JICBPdGhlcndpc2UgdGhleSBtaWdodCB3YWl0IGEgYml0IGxvbmdlciB1bm5lY2Vzc2FyaWx5LgotCSAgQWxzbyBkbyBzb21lIG1pbm9yIGNsZWFudXAuCi0KLTIwMTQtMTItMjQgMTA6MTM6NTEgKzA4MDAgIFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmg6Ci0JICBpbnB1dHNlbGVjdG9yOiBCbG9jayB3aGVuIHJlY2VpdmluZyBhbiBFT1MgZXZlbnQgb24gYSBkZWFjdGl2YXRlZCBwYWQKLQkgIC4uLiBhbmQgb25seSB1bmJsb2NrIHdoZW4gZWl0aGVyIGEpIHRoZSBwYWQgYmVjb21lcyBhY3RpdmUgYW5kIHRoZSBldmVudAotCSAgc2hvdWxkIGJlIGZvcndhcmRlZCBvciBiKSB0aGUgYWN0aXZlIHBhZCB3ZW50IEVPUyBpdHNlbGYuCi0JICBPdGhlcndpc2UgaXQgY2FuIGhhcHBlbiB0aGF0IHdlIHN3aXRjaCBmcm9tIGEgbG9uZ2VyIHRyYWNrIHRoYXQgaXMgbm90IEVPUyB5ZXQKLQkgIHRvIGEgc2hvcnRlciB0cmFjayB0aGF0IGFscmVhZHkgaXMgRU9TLCBidXQgdGhlIHNob3J0ZXIgdHJhY2sgd29uJ3QgaGF2ZSBhbnkKLQkgIHBvc3NpYmlsaXR5IHRvIHNlbmQgaXRzIEVPUyBldmVudCBkb3duc3RyZWFtIGFueW1vcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTQ5Ci0KLTIwMTQtMTItMjMgMTI6NTQ6NTAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogS2VlcCBhIHJlZiBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzaW5rcGFkIGFyb3VuZAotCSAgT3RoZXJ3aXNlIHdlIGNhbid0IGJlIHN1cmUgdGhhdCB0aGUgcG9pbnRlciBwb2ludHMgdG8gYSBzdGlsbCBleGlzdGluZwotCSAgcGFkIGluc3RhbmNlIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4KLQotMjAxNC0xMi0yMyAxMjo1Mzo1OCArMDEwMCAgU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBHZXQgdGhlIGFjdGl2ZSBzaW5rcGFkIGFnYWluIGFmdGVyIHRha2luZyB0aGUgbG9jayB3aGVuIGhhbmRsaW5nIGV2ZW50cwotCSAgSXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGluIHRoZSBtZWFudGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE4OTMKLQotMjAxNC0xMi0yMiAxMzowODozNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBTaG9ydC1jaXJjdWl0IENBUFMgcXVlcnkgaGFuZGxpbmcgaWYgdHJhbnNmb3JtX2NhcHMgcmV0dXJucyBFTVBUWSBjYXBzCi0JICBCb3RoIGZvciB0aGUgcGVlciBmaWx0ZXIgY2FwcyBhbmQgdGhlIGNvbnZlcnRlZCBjYXBzIGJhc2VkIG9uIHRoZSBwZWVyIGNhcHMuCi0JICBJZiB0aGUgcGVlciBmaWx0ZXIgY2FwcyBhcmUgRU1QVFksIHRoZSBwZWVyIGNhcHMgcXVlcnkgd2lsbCBhbHNvIHJldHVybgotCSAgRU1QVFkuIFRoZXJlJ3Mgbm8gbmVkIHRvIGJvdGggZG93bnN0cmVhbS91cHN0cmVhbSB3aXRoIHRoaXMgcXVlcnkuCi0KLTIwMTQtMTItMjIgMTE6NDU6MTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIE1BSU5UQUlORVJTOgotCSAgTUFJTlRBSU5FUlM6IFVwZGF0ZSBteSBtYWlsIGFkZHJlc3MKLQotMjAxNC0xMi0yMSAxNDoxMjoyOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IHVzZSBhIGNvbnN0YW50IGZvciB0aGUgbWF4IHBhcmFtIGxlbmd0aAotCSAgSW1wcm92ZSByZWFkYWJpbGl0eSBieSB1c2luZyBhIGRlZmluZSBmb3IgdGhlIG1heC1jaGFycy4gQWxzbyB1c2UgdGhlIHVuaWNvZGUKLQkgIGVsbGlwc2lzIGFzIGRvdCBmaWxlcyBhcmUgdXRmLTguCi0KLTIwMTQtMTItMTUgMTQ6MDM6NTQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogcHJpbnQgcHJlc2V0IG5hbWVzCi0JICBJZiB0aGUgZWxlbWVudCBzdXBwb3J0cyBwcmVzZXRzIGFuZCBzaGlwcyBzb21lLCBwcmludCB0aGVtLgotCSAgRml4ZXMgIzc0MTQyNwotCi0yMDE0LTEyLTE5IDExOjM1OjI0ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgZ3N0aW5mbzogQWRkIG5ldyBtYXhpbXVtIGxldmVsIGRlYnVnZ2luZwotCSAgQVBJOiBHU1RfTEVWRUxfTUFYCi0JICBCeSBjb21waWxpbmcgZ3N0cmVhbWVyIChvciBwbHVnaW5zKSB3aXRoIEdTVF9MRVZFTF9NQVggZGVmaW5lZCwgb25seQotCSAgdGhlIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGF0IG9yIGJlbG93IHRoYXQgbGV2ZWwgd2lsbCBiZSBjb21waWxlZCBpbi4KLQkgIFRoaXMgYWxsb3dzIGNvbXBpbGluZyBpbiBzb21lIGRlYnVnZ2luZyAobGlrZSBlcnJvcnMgYW5kIHdhcm5pbmdzKSB3aGljaAotCSAgaGVscHMgaW4gZGVidWdnaW5nLCBidXQgd2l0aG91dCB0aGUgZnVsbCBjcHUvbWVtb3J5IG92ZXJoZWFkIG9mIGFsbCBkZWJ1Z2dpbmcKLQkgIGVuYWJsZWQuCi0KLTIwMTQtMTItMTggMTI6MDQ6MjIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGdzdGNoZWNrOiBmaXggR0kgYW5ub3RhdGlvbgotCSAgQWRkIG1pc3NpbmcgOiB0byBhbm5vdGF0aW9uCi0KLTIwMTQtMTEtMTMgMTQ6NTM6NTkgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBqdW1wIG92ZXIgbGFyZ2Ugc2tpcHMgaW4gcHVsbCBtb2RlCi0JICBUaGlzIGJ5cGFzc2VzIHRoZSBkdW1waW5nIG9mIGJ1ZmZlcnMgd2Ugc3RpbGwgaGF2ZSB0byBkbyBpbiBwdXNoIG1vZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMDUzCi0KLTIwMTQtMTAtMjUgMTc6MTY6MjUgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW5AYWNjb3N0ZWQubmV0PgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSogZ3N0L2dzdGRlYnVndXRpbHMuaDoKLQkgIGRlYnVndXRpbHM6IFRydW5jYXRlIHBhcmFtZXRlciB2YWx1ZXMgdGhhdCBhcmUgdG9vIGxvbmcKLQkgIFRoaXMgcmVtb3ZlcyBzb21lIGluZm9ybWF0aW9uIGZyb20gdGhlIGR1bXBzLCBidXQgaW1wcm92ZXMgcmVhZGFiaWxpdHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5MTY1Ci0KLTIwMTQtMTItMTggMTA6NTM6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBlZjFmZmRjIHRvIGYyYzZiOTUKLQotMjAxNC0xMi0xNiAxNjozMToyMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc3RydWN0dXJlL2NhcHM6IEFkZCBnc3Rfe3N0cnVjdHVyZSxjYXBzfV9maWx0ZXJfYW5kX21hcF9pbl9wbGFjZSgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NzY1Ci0KLTIwMTQtMTItMTYgMTg6MTQ6MjIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogQWRkIHNpbXBsZSB1bml0IHRlc3QgZm9yIGZvcmVhY2goKSBhbmQgbWFwX2luX3BsYWNlKCkKLQotMjAxNC0xMS0wNyAxMToxNTowOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IEFkZCBnc3RfY2Fwc19mb3JlYWNoKCkgYW5kIGdzdF9jYXBzX21hcF9pbl9wbGFjZSgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NzY1Ci0KLTIwMTQtMTItMTYgMTU6NTM6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgZm9yIG5ldyB0cmFuc2xhdGFibGUgc3RyaW5ncwotCi0yMDE0LTEyLTE0IDEyOjU0OjMyICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5jOgotCSAgY2hlY2s6IEhhdmUgYXV0b3Rvb2xzIGdlbmVyYXRlIGludGVybmFsLWNoZWNrLmgKLQkgIFByZXZpb3VzbHkgR1N0cmVhbWVyIGdvdCBhY2Nlc3MgdG8gdGhlIGxpYmNoZWNrIGludGVyZmFjZSBieSBpbmNsdWRpbmcKLQkgIGxpYnMvZ3N0L2NoZWNrL2NoZWNrLmggd2hpY2ggaW4gdHVybiBpbmNsdWRlZCBpbnRlcm5hbC1jaGVjay5oIGluIHRoZQotCSAgc2FtZSBkaXJlY3RvcnkuIGludGVybmFsLWNoZWNrLmggd2FzIGdlbmVyYXRlZCBieSBjb3B5aW5nCi0JICBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oIHdoaWNoIGluIHR1cm4gd2FzIGdlbmVyYXRlZCBmcm9tCi0JICBjaGVjay5oLmluIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4gSW4gdGhpcyBjYXNlIGdlbmVyYXRpbmcKLQkgIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmggaXMgdW5uZWNlc3NhcnksIGluIGFkZGl0aW9uIHRoaXMgZmlsZQotCSAgd2FzIGFjY2lkZW50YWxseSBkaXN0cmlidXRlZCBpbiBnZW5lcmF0ZWQgcHJvamVjdCB0YXJiYWxscy4KLQkgIE5vdyBsaWJzL2dzdC9jaGVjay9pbnRlcm5hbC1jaGVjay5oIGlzIGdlbmVyYXRlZCBkaXJlY3RseSBmcm9tCi0JICBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oLmluIGJ5IGNvbmZpZ3VyZS4gVGhpcyBtZWFucyB0aGF0IHRoZQotCSAgbGliY2hlY2sgc291cmNlIG11c3QgaW5jbHVkZSBpbnRlcm5hbC1jaGVjay5oIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzbHkKLQkgIGdlbmVyYXRlZCBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oLiBIb3dldmVyIHRoZSB1bm5lY2Vzc2FyeQotCSAgaW50ZXJtZWRpYXRlIHN0ZXAgaXMgbm93IHNraXBwZWQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMzU5Ci0KLTIwMTQtMTItMTYgMTA6MTM6MDMgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IERvbid0IGNoZWNrIHNpemUgaW4gY29uZmlnIHZhbGlkYXRpb24KLQkgIFBvb2xzIGFyZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgc2l6ZSBpbiBvcmRlciB0byBhZGFwdCBwYWRkaW5nLiBTbwotCSAgZG9uJ3QgY2hlY2sgdGhlIHNpemUuIE5vcm1hbGx5IHBvb2wgd2lsbCBjaGFuZ2UgdGhlIHNpemUgd2l0aG91dAotCSAgZmFpbGluZyBzZXRfY29uZmlnKCksIGJ1dCBpdCB0aGV5IGVuZHVwIGNoYW5naW5nIHRoZSBzaXplIGJlZm9yZQotCSAgdGhlIHZhbGlkYXRlIG1ldGhvZCBtYXkgZmFpbCBvbiBhIGZhbHNlIHBvc2l0aXZlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQyMAotCi0yMDE0LTEyLTE2IDEyOjIxOjU5ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IGxvZyByZWFzb24gZm9yIGRpc2NhcmRlZCBidWZmZXJzCi0JICBQRVJGT1JNQU5DRSBsb2cgdGhlIHJlYXNvbiB3aHkgYSBidWZmZXIgY291bGQgbm90IGJlIHJlY3ljbGVkIGluIHRoZQotCSAgYnVmZmVycG9vbC4KLQotMjAxNC0xMi0xNSAxNDo1MzoyOCArMDEwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBtNC9jaGVjay1jaGVja3MubTQ6Ci0JICBjaGVjazogVXBkYXRlIHZlcnNpb24gbnVtYmVyIG9mIGluY2x1ZGVkIGxpYmNoZWNrCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNTUwCi0KLTIwMTQtMTItMTIgMjE6MDI6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IHVwZGF0ZSBleHBvcnRzCi0KLTIwMTQtMTItMTIgMjE6NTQ6MDEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgbmV3IHByZXNldCBhcGkKLQotMjAxNC0xMi0xMiAyMTozODoyNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHByZXNldC5jOgotCSogZ3N0L2dzdHByZXNldC5oOgotCSAgcHJlc2V0OiBhZGQgZ3N0X3ByZXNldF9pc19lZGl0YWJsZSgpCi0JICBBZGQgYSBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgcHJlc2V0IGlmYWNlIGltcGxlbWVudGF0aW9uIGlzIGVkaXRhYmxlIGFuZAotCSAgZG9jdW1lbnQgdGhpcyBmcm9tIHRoZSBpbXBsZW1lbnRlcnMgcGVyc3BlY3RpdmUuCi0JICBBUEk6IGdzdF9wcmVzZXRfaXNfZWRpdGFibGUoKQotCi0yMDE0LTEyLTEyIDE0OjIzOjE5ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBVcGRhdGUgZGVmIGZpbGUKLQotMjAxNC0xMi0xMiAxMzo1NzozOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IEZpeCBjb21waWxlciB3YXJuaW5nCi0JICBnc3RkZWJ1Z3V0aWxzLmM6IEluIGZ1bmN0aW9uICdnc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhJzoKLQkgIGdzdGRlYnVndXRpbHMuYzo2ODM6NTMwOiBlcnJvcjogJ3JldHVybicgd2l0aCBubyB2YWx1ZSwgaW4gZnVuY3Rpb24gcmV0dXJuaW5nIG5vbi12b2lkIFstV2Vycm9yXQotCSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSk7Ci0KLTIwMTQtMTItMTIgMTM6MTU6MDIgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSogZ3N0L2dzdGRlYnVndXRpbHMuaDoKLQkgIGRlYnVndXRpbHM6IEFkZCBhIGdzdF9kZWJ1Z19iaW5fdG9fZG90X2RhdGEoKSBtZXRob2QKLQkgIFRoaXMgcHJvdmlkZXMgdGhlIGRvdCBmaWxlIGFzIGEgc3RyaW5nLCByYXRoZXIgdGhhbiBkdW1waW5nIHRvIGEgZmlsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE0MjUKLQotMjAxNC0xMi0xMCAxMToxNzoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JICB0eXBlZmluZDogbWlub3IgY29zbWV0aWMgY2hhbmdlCi0JICBObyBuZWUgdG8gYWJicmV2IHZhcmlhYiBuYW0gaGVyZSwgbmljZXIgdG8gcmVhZCBpZiBmdWxsLgotCi0yMDE0LTEyLTEwIDExOjE2OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IHVzZSBHU1RfQlVGRkVSX09GRlNFVF9OT05FIGZvciBidWZmZXIgb2Zmc2V0Ci0KLTIwMTQtMTItMDcgMTI6NTU6MjYgKzAxMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaC5pbjoKLQkgIGNoZWNrOiBBdm9pZCByZXF1cmluZyAodSlpbnRtYXhfdCBpbiBtYWNyb3MKLQkgIFByZXZpb3VzbHkgZW1iZWRkZWQgbGliY2hlY2sgdmVyc2lvbnMgZGlkIG5vdCBkZXBlbmQgb24gKHUpaW50bWF4X3QgYW5kCi0JICBkb2luZyBzbyB3b3VsZCByZXF1aXJlIHByb2plY3RzIHVzaW5nIEdTdHJlYW1lcidzIGNoZWNrIGZyYW1ld29yayB0byBhZGQKLQkgIEFYX0NSRUFURV9TVERJTlRfSCB0byB0aGVpciBjb25maWd1cmUuYWMuIEEgd29ya2Fyb3VuZCBpcyB0byBmYWxsYmFjayB0bwotCSAgZ2xpYiB0eXBlcy4gVGhpcyBwYXRjaCBhc3N1bWVzIHRoYXQgZ2xpYi5oIGlzIGFsd2F5cyBpbmNsdWRlZCBiZWZvcmUKLQkgIGludGVybmFsLWNoZWNrLmggd2hpY2ggaXMgb2sgc2luY2UgZXZlcnl0aGluZyBHc3RyZWFtZXIgd291bGQgaW5jbHVkZQotCSAgZ3N0L2dzdGNoZWNrLmggaW5zdGVhZCBvZiBkaXJlY3RseSBpbmNsdWRpbmcgaW50ZXJuYWwtY2hlY2suaC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc4MjYKLQotMjAxNC0xMi0wNiAxOTowMzowNCArMDEwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jbG9ja19nZXR0aW1lLmM6Ci0JICBjaGVjazogRml4IGNvbXBpbGF0aW9uIGVycm9yIGZvciBpT1MKLQkgIGxpYmNoZWNrIGluY2x1ZGVzIENvcmVTZXJ2aWNlcyBmb3IgaXRzIGNvbXBhdCBmb3IgY2xvY2tfZ2V0dGltZSgpLAotCSAgZXZlbiB0aG91Z2ggaXQgbmV2ZXIgdXNlcyBhbnl0aGluZyBpdCBkZWNsYXJlcy4gTGV0J3MgcmVtb3ZlIGl0LgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzgyNgotCi0yMDE0LTExLTE1IDEzOjI2OjQ3ICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oLmluOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2Vycm9yLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcHJpbnQuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3J1bi5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjb21wYXQuaDoKLQkqIG00L2NoZWNrLWNoZWNrcy5tNDoKLQkgIGNoZWNrOiBBcHBseSBHU3RyZWFtZXItc3BlY2lmaWMgcGF0Y2hlcwotCSAgUmVpbnRyb2R1Y2VkIHBhdGNoZXM6Ci0JICAqIE1ha2Ugc3VyZSB0aGF0IGZhaWxfaWYoMSkgYWN0dWFsbHkgZmFpbHMKLQkgIGZyb20gY29tbWl0IDlmOTlkMDU2YTI2M2U3MWE1ZTYxODEyMjQ4MjlkZWY5MDZjZjAyMjYKLQkgIE5ldyBwYXRjaGVzIGR1ZSB0byB1cGRhdGVkIGxpYmNoZWNrIChiYXNlZCBvbiAwLjkuMTQpOgotCSAgKiBDaGVja3MgaW4gbTQvY2hlY2stY2hlY2tzLm00IHRvIGNhdGVyIGZvciBuZXcgZGVwZW5kZW5jaWVzCi0JICAqIENvbmRpdGlvbmFsIGNvbXBpbGUtdGltZSBjb21wYXQgUE9TSVggZmFsbGJhY2tzIGZvciBsaWJjaGVjawotCSAgKiBBdm9pZCByZWxhdGl2ZSBwYXRocyBmb3IgbGliY2hlY2sgaGVhZGVyIGZpbGVzCi0JICAqIE1ha2UgdGltZXJfY3JlYXRlKCkgdXNhZ2UgZGVwZW5kIG9uIHBvc2l4IHRpbWVycywgbm90IGxpYnJ0Ci0JICAqIFJlbHkgb24gZGVmYXVsdCBBWF9QVEhSRUFEIGJlaGF2aW9yIHRvIGFsbG93IEhBVkVfUFRIUkVBRCB0byBiZSB1c2VkCi0JICB3aGVuIGNoZWNraW5nIGZvciB0eXBlcyBhbmQgZnVuY3Rpb25zIChsaWtlIGNsb2NrX2dldHRpbWUoKSkKLQkgICogQXZvaWQgZG91YmxlIGRlY2xhcmF0aW9uIG9mIGNsb2NrX2dldHRpbWUoKSB3aGVuIGF2YWlsYWJlIG91dHNpZGUgb2YKLQkgIGxpYnJ0IGJ5IG1ha2luZyBjb21wYXQgY2xvY2tfZ2V0dGltZSgpIGRlY2xhcmF0aW9uIGNvbmRpdGlvbmFsCi0JICAqIGNoZWNrIDAuOS45IHJlbmFtZWQgX2ZhaWxfdW5sZXNzKCkgYW5kIDAuOS4xMiBsYXRlciByZW5hbWVkIGl0IGFnYWluCi0JICB0byBfY2tfYXNzZXJ0X2ZhaWxlZCgpLCBzbyBBU1NFUlRfe0NSSVRJQ0FMLFdBUk5JTkd9KCkgbm93IGNhbGxzIHRoaXMKLQkgIGZ1bmN0aW9uCi0JICAqIFJlbW92ZSBsaWJjaGVjayBmYWxsYmFjayBpbmZyYXN0cnVjdHVyZSBmb3IgbWFsbG9jKCksIHJlYWxsb2MoKSwKLQkgIGdldHRpbWVvZmRheSgpIGFuZCBzbnByaW50ZigpIHNpbmNlIGVpdGhlciB0aGV5IGFwcGVhciB0byBiZQotCSAgYXZhaWxhYmxlIG9yIHRoZXkgaW50cm9kdWNlIGV2ZW4gbW9yZSBkZXBlbmRlbmNpZXMuCi0JICBUaGUgcmVzdWx0IGlzIGFuIGVtYmVkZGVkIGNoZWNrIGluIGdzdHJlYW1lciB0aGF0IGhhcyBiZWVuIHRlc3RlZCBieQotCSAgcnVubmluZyBjaGVjayB0ZXN0cyBpbiBjb3JlLCAtYmFzZSwgLWdvb2QsIC1iYWQsIC11Z2x5IGFuZCBydHNwLXNlcnZlcgotCSAgb24gTGludXgsIE9TWCBhbmQgV2luZG93cy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc4MjYKLQotMjAxNC0xMS0xNSAxMjo1MzozMiArMDEwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9hbGFybS5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW46Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2ltcGwuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xvZy5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcHJpbnQuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50Lmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jbG9ja19nZXR0aW1lLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjb21wYXQuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2xpYmNvbXBhdC5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svbG9jYWx0aW1lX3IuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL3N0cnNpZ25hbC5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svdGltZXJfY3JlYXRlLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay90aW1lcl9kZWxldGUuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL3RpbWVyX3NldHRpbWUuYzoKLQkgIGNoZWNrOiBJbXBvcnQgdmVyc2lvbiAwLjkuMTQKLQkgIFRoaXMgbGlmdHMgdGhlIGZpbGVzIGFsbW9zdCB2ZXJiYXRpbSAodGhlIGNoYW5nZXMgYmVpbmcgcnVubmluZyB0aG91Z2gKLQkgIGdzdC1pbmRlbnQgYW5kIGZpeGluZyB0aGUgRlNGIGFkZHJlc3MpIGZyb20gdGhlIHVwc3RyZWFtIHJlc3Bvc2l0b3J5LgotCSAgVGhlcmVmb3JlIHRoaXMgY29tbWl0IHJldmVydHMgc29tZSBHU3RyZWFtZXItc3BlY2lmaWMgcGF0Y2hlcyB0byBjaGVjawotCSAgdGhhdCB3aWxsIGJlIHJlaW50cm9kdWNlZCBuZXh0LgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzgyNgotCi0yMDE0LTExLTA0IDE5OjExOjUwICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkgIHR5cGVmaW5kOiBQcm9wYWdhdGUgaW5wdXQgYnVmZmVyIG9mZnNldAotCSAgVGhlIGluaXRpYWwgYnVmZmVycyBtaWdodCBoYXZlIG5vbi1kZWZhdWx0IG9mZnNldHMsIG1ha2Ugc3VyZSB0aGV5IGdldAotCSAgcHJvcGFnYXRlZCBpZiBwcmVzZW50LgotCi0yMDE0LTEwLTA3IDE2OjQ0OjQ1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogY2xhbXAgcmVwb3J0ZWQgcG9zaXRpb24gYmFzZWQgb24gZGlyZWN0aW9uCi0JICBXaGVuIHVzaW5nIGEgbmVnYXRpdmUgcmF0ZSAocmF0ZSBiZWluZyBzZWdtZW50LnJhdGUgKiBzZWdtZW50LmFwcGxpZWRfcmF0ZSksCi0JICB3ZSB3aWxsIGVuZCB1cCByZXBvcnRpbmcgZGVjcmVhc2luZyBwb3NpdGlvbnMsIHRoZXJlZm9yZSBhZGp1c3QgdGhlIGNsYW1waW5nCi0JICBhZ2FpbnN0IGxhc3QgcmVwb3J0ZWQgdmFsdWUgYWNjb3JkaW5nbHkuCi0JICBGaXhlcyBwb3NpdGlvbnMgZ2V0dGluZyBwcm9wZXJseSByZXBvcnRlZCB3aXRoIGFwcGxpZWRfcmF0ZSA8IDAuMAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODA5MgotCi0yMDE0LTExLTI4IDE0OjE3OjU0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1idWZmZXJpbmcueG1sOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSogbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBEb24ndCBjb21wYXJlIGJvb2xlYW5zIGZvciBlcXVhbGl0eSB0byBUUlVFIGFuZCBGQUxTRQotCSAgVFJVRSBpcyAxLCBidXQgZXZlcnkgb3RoZXIgbm9uLXplcm8gdmFsdWUgaXMgYWxzbyBjb25zaWRlcmVkIHRydWUuIENvbXBhcmluZwotCSAgZm9yIGVxdWFsaXR5IHdpdGggVFJVRSB3b3VsZCBvbmx5IGNvbnNpZGVyIDEgYnV0IG5vdCB0aGUgb3RoZXJzLgotCSAgQWxzbyBub3JtYWxpemUgYm9vbGVhbnMgaW4gYSBmZXcgcGxhY2VzLgotCi0yMDE0LTExLTMwIDIzOjUwOjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzX3ByaXZhdGUuYzoKLQkgIHBsdWdpbnM6IGZpeCBidWlsZCBvbiB3aW5kb3dzCi0JICBnc3RlbGVtZW50c19wcml2YXRlLmM6IEluIGZ1bmN0aW9uICdnc3Rfd3JpdGV2X2J1ZmZlcnMnOgotCSAgZ3N0ZWxlbWVudHNfcHJpdmF0ZS5jOjIzNjo1MTogZXJyb3I6ICdFV09VTERCTE9DSycgdW5kZWNsYXJlZAotCi0yMDE0LTExLTI4IDE1OjA5OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogdXNlIHdyaXRldigpIGluIDo6cmVuZGVyKCkgdG8gd3JpdGUgb3V0IG1lbW9yaWVzIHdpdGhvdXQgbWVyZ2luZyB0aGVtCi0KLTIwMTQtMTEtMjggMTU6MDQ6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuaDoKLQkgIGZpbGVzaW5rOiBpbXBsZW1lbnQgOjpyZW5kZXJfbGlzdCgpIGZ1bmN0aW9uIHRoYXQgdXNlcyB3cml0ZXYoKQotCi0yMDE0LTExLTI4IDE0OjQ3OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSAgZmRzaW5rOiB1c2Ugd3JpdGV2KCkgaW4gOjpyZW5kZXIoKSB0byB3cml0ZSBvdXQgbWVtb3JpZXMgd2l0aG91dCBtZXJnaW5nIHRoZW0KLQotMjAxNC0xMS0yOCAxNDozOTozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6Ci0JICBmZHNpbms6IGltcGxlbWVudCA6OnJlbmRlcl9saXN0KCkgdXNpbmcgd3JpdGV2KCkKLQkgIFdyaXRlIG91dCBtdWx0aXBsZSBidWZmZXJzIHBvc3NpYmx5IGNvbnRhaW5pbmcgbXVsdGlwbGUKLQkgIG1lbW9yaWVzIHdpdGggb25lIHdyaXRldigpIGNhbGwsIHdpdGhvdXQgbWVyZ2luZyB0aGUKLQkgIGJ1ZmZlciBtZW1vcmllcyBmaXJzdCwgbGlrZSA6OnJlbmRlcigpIGRvZXMgY3VycmVudGx5LgotCi0yMDE0LTExLTI4IDE0OjM4OjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzX3ByaXZhdGUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHNfcHJpdmF0ZS5oOgotCSAgcGx1Z2luczogYWRkIGhlbHBlciBmdW5jdGlvbiBmb3Igd3JpdGluZyBidWZmZXJzIG91dCB3aXRoIHdyaXRldigpCi0KLTIwMTQtMTEtMjggMTQ6MTU6MzAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogdXBkYXRlIHRoZSBkdXJhdGlvbiB2YXJpYWJsZSBiZWZvcmUgZW1pdHRpbmcgdGhlIGJ1cwotCSAgT3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBtaWdodCBzdGlsbCBnZXQgdGhlIG9sZCB2YWx1ZSBpZiBpdCBhc2tzCi0JICBiZXR3ZWVuIHRoZSBtZXNzYWdlIGFuZCB0aGUgcmVhbCB1cGRhdGUuCi0KLTIwMTQtMTEtMjggMTY6MjU6MDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBGaXggZG9jIGFuZCBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHNlbmRfZXZlbnQKLQkgIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgaXMgdG8gInNlbmQgYW4gZXZlbnQKLQkgIHRvIGFuIGVsZW1lbnQiLgotCSAgVGhlcmVmb3JlIHdlICpzZW5kKiB1cHN0cmVhbSBldmVudHMgdG8gYSBzb3VyY2UgcGFkIGFuZCBkb3duc3RyZWFtIGV2ZW50cwotCSAgdG8gYSBzaW5rIHBhZAotCi0yMDE0LTExLTI4IDExOjE2OjAwICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogRmlndXJlIGRlZmF1bHQgc2VuZF9ldmVudCBkaXJlY3Rpb24gaGFuZGxpbmcKLQkgIElmIHdlIGdldCBhIGRvd25zdHJlYW0gZXZlbnQgd2Ugd2FudCB0byBzZW5kIGl0IHRvIGEgcmFuZG9tIFNJTksgcGFkCi0JICAoYW5kIHZpY2UtdmVyc2EpLgotCi0yMDE0LTExLTI3IDE4OjAwOjU3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IENvbXBhcmUgY29ycmVjdCBjYXBzIHZhcmlhYmxlIGFnYWluc3QgTlVMTCBiZWZvcmUgY29tcGFyaW5nIGNhcHMKLQotMjAxNC0xMS0yNyAxNzoxMDoxOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGYzMmNmY2QgdG8gZWYxZmZkYwotCi0yMDE0LTExLTEwIDA5OjU4OjQ3ICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgc2NyaXB0czp1bmluc3RhbGxlZDogTWFrZSBzdXIgdGhlIEdFUyBUZXN0TWFuYWdlciBpcyByZWdpc3RlcmVkCi0JICBTbyB0aGF0IHdoZW5ldmVyIHVzZXIgd29yayB3aXRoIEdzdFZhbGlkYXRlIHRoZXkgY2FuIHJ1biBHRVMgdGVzdHMKLQkgIHdpdGhpbiB0aGUgZ3N0LXVuaW5zdGFsbGVkIGVudmlyb25tZW50Ci0KLTIwMTQtMTEtMjYgMjE6NDg6MDUgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBjb21tb246Ci0JKiBtNC9heF9wdGhyZWFkLm00OgotCSAgYnVpbGQ6IFVwZGF0ZSBheF9wdGhyZWFkLm00IGFuZCBtb3ZlIGl0IHRvIGNvbW1vbgotCSAgSGFzIHNvbWUgdXBkYXRlcyBmb3IgQ2xhbmcgc3VwcG9ydCAobWlnaHQgbm90IHdvcmsgd2l0aCBuZXdlciBDbGFuZwotCSAgcHJvcGVybHksIHlldCksIEFJWCBzdXBwb3J0LCBhbmQgc29tZSBtaXNjIGZpeGVzLgotCi0yMDE0LTExLTI1IDE3OjQ2OjEyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmM6Ci0JICB0cmlnZ2VyY29udHJvbHNvdXJjZTogRml4IHNob3J0IGRlc2NyaXB0aW9uIGZvciB0aGUgZG9jcwotCi0yMDE0LTExLTI1IDA5OjM5OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKLQkgIGRvY3M6IGFkZCBHU1RfR0xfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gJ1J1bm5pbmcgR1N0cmVhbWVyJyBzZWN0aW9uCi0KLTIwMTQtMTEtMjMgMDU6NDU6MjQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogcGVyY2VudGFnZSBpcyByZWxhdGl2ZSB0byBoaWdoLXBlcmNlbnQKLQkgIFdoZW4gY29tcGFyaW5nIHBlcmNlbnRhZ2UgdmFsdWVzLCBjb21wYXJlIHdpdGggMC0xMDAgc2NhbGUgYXMgaXQKLQkgIGhhcyBhbHJlYWR5IGJlZW4gbWFkZSByZWxhdGl2ZSB0byAwLWhpZ2hfcGVyY2VudCwgb3RoZXJ3aXNlIHdlIG1hcmsKLQkgIHRoZSBxdWV1ZSBhcyBub3QgYnVmZmVyaW5nIGFuZCByZXBvcnQgYSA1MCUgdG8gdGhlIHVzZXIuIFRoaXMgbGVhZHMgdG8KLQkgIGEgYnVmZmVyaW5nIHN0YWxsIGFzIHRoZSB1c2VyIGFzc3VtZXMgdGhlIHF1ZXVlIGlzIHN0aWxsIGJ1ZmZlcmluZyBidXQKLQkgIGl0IHRoaW5rcyBpdCBpc24ndC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY5NjkKLQotMjAxNC0xMS0yMyAwNTo0Mjo1MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IHBlcmNlbnRhZ2UgaXMgYW4gYWJzb2x1dGUgdmFsdWUKLQkgIG11bHRpcXVldWUncyBxdWV1ZXMgc3RvcmVkIHBlcmNlbnQgdmFsdWUgaXMgdGhlIHBlcmNlbnRhZ2UgZnJvbSAwCi0JICB0byAxMDAgKG1heC1zaXplLSopIGFuZCBzaG91bGQgYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVxdWVzdGVkIGxpbWl0Ci0JICAoaGlnaF9wZXJjZW50YWdlKSBzZXQgYnkgdGhlIHVzZXIgYW5kIG5vdCB3aXRoIDEwMCUgdG8gY2hlY2sgaWYKLQkgIGJ1ZmZlcmluZyBzaG91bGQgc3RvcC4gT3RoZXJ3aXNlIHdlIGFyZSBvbmx5IHN0b3BwaW5nIGJ1ZmZlcmluZyB3aGVuIHRoZQotCSAgcXVldWUgZ2V0cyBjb21wbGV0ZWx5IGZ1bGwuCi0KLTIwMTQtMTEtMjAgMjE6MzM6NTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogRml4IGNhcHMgZXF1YWxpdHkgY2hlY2sKLQkgIEluc3RlYWQgb2YgY2hlY2tpbmcgaWYgb3VyIG91dGNhcHMgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIHByZXZpb3VzIGluY2FwcywgYW5kCi0JICBpZiB0aGF0IGlzIHRoZSBjYXNlIG5vdCBzZXR0aW5nIGFueSBjYXBzIG9uIHRoZSBwYWQuLi4gY29tcGFyZSBhZ2FpbnN0IG91cgotCSAgcHJldmlvdXMgb3V0Y2FwcyBiZWNhdXNlIHRoYXQncyB3aGF0IHdlIGNhcmUgYWJvdXQuCi0JICBGaXhlcyBzb21lIGNhc2VzIHdoZXJlIHRoZSBvdXRjYXBzIGJlY2FtZSBlcXVpdmFsZW50IHRvIHRoZSBwcmV2aW91cyBpbmNhcHMsCi0JICBidXQgdGhlIHByZXZpb3VzIG91dGNhcHMgd2VyZSBkaWZmZXJlbnQgYW5kIHdlIHdlcmUgdGhlbiBzZW5kaW5nIGJ1ZmZlcnMKLQkgIGRvd25zdHJlYW0gdGhhdCB3ZXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNhcHMgd2UgZm9yZ290IHRvIHNldCBvbiB0aGUgcGFkLgotCSAgUmVzdWx0aW5nIGluIGNyYXNoZXMgb3IgaW1hZ2UgY29ycnVwdGlvbi4KLQotMjAxNC0xMS0yMCAxMzozMzoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSAgY29tbW9uOiB1cGRhdGUgZm9yIGJpc29uIHZlcnNpb24gY2hlY2sgcGF0Y2gKLQkgIEZpeCBjb25maWd1cmUgY2hlY2sgd2l0aCBiaXNvbiBkZXZlbG9wbWVudCB2ZXJzaW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyODk0NgotCi0yMDE0LTExLTIwIDEzOjM0OjMyICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBkb24ndCBvdmVycmVhZCBpbnB1dCB3aGVuIHNlYXJjaGluZyBmb3IgIgotCSAgV2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzdHJpbmcgdGVybWluYXRvciBkb24ndCByZWFkIHBhc3QgdGhlIGVuZGluZwotCSAgMC1ieXRlIHdoZW4gZXNjYXBpbmcgY2hhcmFjdGVycy4KLQkgIEFkZCB1bml0IHRlc3QgZm9yIHZhcmlvdXMgZXNjYXBpbmcgY2FzZXMuCi0KLTIwMTQtMTEtMDMgMTc6NDY6NTcgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGZhaWwgZHJvcHBlZCBxdWVyaWVzCi0JICBQcmV2aW91c2x5LCBkcm9wcGluZyBhIHF1ZXJ5IGZyb20gYSBwYWQgcHJvYmUgd291bGQgZGVlbSB0aGUKLQkgIHF1ZXJ5IHN1Y2NlZWRlZCwgYW5kIHRoZSBjYWxsZXIgbWlnaHQgdGhlbiBhc3N1bWUgdGhlIHF1ZXJ5J3MKLQkgIHJlc3VsdHMgYXJlIHZhbGlkLCBhbmQgdGh1cyBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkIG9iamVjdAotCSAgc3VjaCBhcyBhIEdzdENhcHMuCi0JICBXZSBub3cgYXNzdW1lIGRyb3BwZWQgcXVlcmllcyBkaWQgbm90IHN1Y2NlZWQuIERyb3BwZWQgZXZlbnRzCi0JICBhbmQgYnVmZmVycyBhcmUgc3RpbGwgZGVlbWVkIGEgc3VjY2Vzcy4KLQkgIEFkZGVkIGJhY2sgYWZ0ZXIgcHJldmlvdXMgcmV2ZXJ0LCBhcyBpdCdzIGJlZW4gZG91YmxlIGNoZWNrZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwMDAzCi0KLTIwMTQtMTEtMTIgMTM6NTU6MjMgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBSZXZlcnQgInBhZDogZmFpbCBkcm9wcGVkIHF1ZXJpZXMiCi0JICBUaGlzIHdhcyBwdXNoZWQgYnkgbWlzdGFrZSBhbG9uZyB3aXRoIGFuIHVucmVsYXRlZCBwYXRjaC4KLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYzcxMDNjZTRiOGMxZGE3ZGNmYmNmMmVjODNhNDJhMzc2ZmI4OTZlMS4KLQotMjAxNC0wNS0xMyAxMToxODowOCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGFsbG93IHNraXBwaW5nIG1vcmUgZGF0YSB0aGFuIHdlIGN1cnJlbnRseSBoYXZlCi0JICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHNraXBwaW5nIGxhcmdlIHVud2FudGVkIGRhdGEsIHN1Y2ggYXMKLQkgIGxhcmdlIGFsYnVtIGFydCwgd2hlbiB3ZSBrbm93IHRoZSBzaXplIG9mIGl0IGZyb20gYSBtZXRhZGF0YQotCSAgaGVhZGVyLgotCi0yMDE0LTExLTAzIDE3OjQ2OjU3ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBmYWlsIGRyb3BwZWQgcXVlcmllcwotCSAgUHJldmlvdXNseSwgZHJvcHBpbmcgYSBxdWVyeSBmcm9tIGEgcGFkIHByb2JlIHdvdWxkIGRlZW0gdGhlCi0JICBxdWVyeSBzdWNjZWVkZWQsIGFuZCB0aGUgY2FsbGVyIG1pZ2h0IHRoZW4gYXNzdW1lIHRoZSBxdWVyeSdzCi0JICByZXN1bHRzIGFyZSB2YWxpZCwgYW5kIHRodXMgZGVyZWZlcmVuY2UgYW4gaW52YWxpZCBvYmplY3QKLQkgIHN1Y2ggYXMgYSBHc3RDYXBzLgotCSAgV2Ugbm93IGFzc3VtZSBkcm9wcGVkIHF1ZXJpZXMgZGlkIG5vdCBzdWNjZWVkLiBEcm9wcGVkIGV2ZW50cwotCSAgYW5kIGJ1ZmZlcnMgYXJlIHN0aWxsIGRlZW1lZCBhIHN1Y2Nlc3MuCi0KLTIwMTQtMTEtMTIgMTE6MzA6NTEgKzAxMDAgIEhhYWtvbiBTcG9yc2hlaW0gPGhhYWtvbi5zcG9yc2hlaW1AZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0dGFzay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IEZpeCBwYXVzZS9zdG9wIHJhY2UgY29uZGl0aW9uCi0JICBJZiBhIHRhc2sgdGhyZWFkIGlzIGNhbGxpbmcgcGF1c2Ugb24gaXQgc2VsZiBhbmQgdGhlCi0JICBjb250cm9sbGluZy8ibWFpbiIgdGhyZWFkIHN0b3BzIHRoZSB0YXNrLCBpdCBjb3VsZCBlbmQgaW4gYSByYWNlCi0JICB3aGVyZSBnc3RfdGFza19mdW5jIGxvb3BzIGFuZCB0aGVuIGNoZWNrcyBmb3IgcGF1c2VkIGFmdGVyIHRoZQotCSAgY29udHJvbGxpbmcgdGhyZWFkIGp1c3QgY2hhbmdlZCB0aGUgdGFzayBzdGF0ZSB0byBzdG9wcGVkLgotCSAgSGVuY2UgdGhlIHRhc2sgd291bGQgYWN0dWFsbHkgY2FsbCBmdW5jIGFnYWluIGV2ZW4gdGhvdWdoIGl0IHdhcwotCSAgYm90aCBwYXVzZWQgYW5kIHN0b3BwZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwMDAxCi0KLTIwMTQtMTEtMTAgMTA6MDE6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkgIGdzdG9iamVjdDogRG9uJ3QgY2hlY2sgYm9vbGVhbnMgZm9yIGVxdWFsaXR5IGluIHRoZSB1bml0IHRlc3QKLQkgIEV2ZXJ5IHZhbHVlIG90aGVyIHRoYW4gMC9GQUxTRSBpcyBUUlVFLCA9PSBUUlVFIHdpbGwgb25seSBjaGVjayBmb3IgMS4KLQotMjAxNC0xMS0wNSAxMTo1MDo0NyArMDEwMCAgSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8anN0ZWZmZW5zQG1ha2UudHY+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdG9iamVjdDogQWRkIGdzdF9vYmplY3RfaGFzX3BhcmVudCgpCi0JICBBZGRzIGdzdF9vYmplY3RfaGFzX3BhcmVudCwgd2hpY2ggd29ya3MgbGlrZSBnc3Rfb2JqZWN0X2hhc19hbmNlc3RvcgotCSAgYnV0IGRvZXMgbm90IGFzY2VuZCBmdXJ0aGVyLgotCSAgQVBJOiBnc3Rfb2JqZWN0X2hhc19wYXJlbnQoKQotCi0yMDE0LTExLTA5IDEwOjM3OjQyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IERvbid0IGJvdGhlciB0aGUgc3ViY2xhc3Mgd2l0aCBzZXR0aW5nIHRoZSBzYW1lIGNhcHMgbXVsdGlwbGUgdGltZXMKLQotMjAxNC0xMS0wOSAxMDozMjoxOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IERvbid0IGJvdGhlciB0aGUgc3ViY2xhc3Mgd2l0aCBzZXR0aW5nIHRoZSBzYW1lIGNhcHMgbXVsdGlwbGUgdGltZXMKLQotMjAxNC0xMS0wOSAxMDoyOTo1NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBEb24ndCBib3RoZXIgdGhlIHN1YmNsYXNzIHdpdGggc2V0dGluZyB0aGUgc2FtZSBjYXBzIG11bHRpcGxlIHRpbWVzCi0KLTIwMTQtMTEtMDcgMDg6MjI6MDIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogcmVtb3ZlIGNvbmRpdGlvbmFsIGZvciBHX1ZBTFVFX0NPTExFQ1RfSU5JVAotCSAgVGhpcyBBUEkgaXMgaW4gZ2xpYiBzaW5jZSAyLjI0IGFuZCB3ZSBjdXJyZW50bHkgcmVxdWlyZSAyLjMyIGFuZCBhbHJlYWR5IHVzZQotCSAgdGhpcyB1bmNvbmRpdGlvbmFsbHkgZWxzZXdoZXJlLgotCi0yMDE0LTExLTA1IDE5OjA5OjM5ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JICBwcmVzZXQ6IHJlbW92ZSBjb21tZW50ZWQgY29kZQotCSAgVGhlIEdRdWFyayB3YXMgbmV2ZXIgdXNlZC4KLQotMjAxNC0xMS0wNyAxMTozNDowOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci5wYy5pbjoKLQkgIGdzdGNvbmZpZzogUHV0IGdzdGNvbmZpZy5oIGludG8gJChsaWJkaXIpL2dzdHJlYW1lci0xLjAvaW5jbHVkZQotCSAgSXQncyBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IGFuZCBzaG91bGQgbm90IGJlIHBsYWNlZCBpbnRvIHRoZSBpbmNsdWRlCi0JICBkaXJlY3RvcnkgYXMgdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBhbGwgdGhvc2UgaGVhZGVycyBhcmUgYXJjaGl0ZWN0dXJlCi0JICBpbmRlcGVuZGVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk3NjcKLQotMjAxNC0xMS0wNyAxMDo1Njo0MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgdXJpOiBGaXggZ29iamVjdC1pbnRyb3NwZWN0aW9uIHdhcm5pbmdzCi0JICBnc3R1cmkuYzo5OTc6IEVycm9yOiBHc3Q6IFNraXBwaW5nIGludmFsaWQgR1RLLURvYyBjb21tZW50IGJsb2NrOgotCSAgLyoqIHByaXZhdGUgR3N0VXJpIGZ1bmN0aW9ucyAqKi8KLQkgIF4KLQkgIGdzdHVyaS5jOjExNzk6IEVycm9yOiBHc3Q6IFNraXBwaW5nIGludmFsaWQgR1RLLURvYyBjb21tZW50IGJsb2NrOgotCSAgLyoqIFJGQyAzOTg2IGZ1bmN0aW9ucyAqKi8KLQkgIF4KLQotMjAxNC0xMC0yNCAyMToyNTo1NCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JICBkYXRhcXVldWU6IEZpeCBnc3RfZGF0YV9xdWV1ZV9uZXcoKSBkZXNjcmlwdGlvbi4KLQkgIFJld29yZCB0aGUgZnVuY3Rpb24gZG9jcywgd2hpY2ggaGF2ZW4ndCBtYWRlIGFueSBzZW5zZSBzaW5jZQotCSAgZ3N0X2RhdGFfcXVldWVfbmV3X2Z1bGwoKSB3YXMgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZ28uCi0KLTIwMTQtMTEtMDMgMTg6Mjc6MjEgKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IEFuc3dlciB0aGUgcXVlcnkgcG9zaXRpb24gd2hlbiByZWNlaXZpbmcgaXQgZnJvbSB1cHN0cmVhbQotCSAgQ3VycmVudGx5IHdlIGFyZSBqdXN0IHJldHVybmluZyBGQUxTRSwgYnV0IHdlIGRvIGhhdmUgdGhlIGluZm9ybWF0aW9uCi0JICB3ZSBzaG91bGQganVzdCBhbnN3ZXIgdGhlIHF1ZXJ5IHRoZSBzYW1lIHdheSBhcyB3aGVuIGFuc3dlcmluZyB0aHJvdWdoCi0JICB0aGUgR3N0RWxlbWVudC5xdWVyeSB2bWV0aG9kIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NTgwCi0KLTIwMTQtMTAtMjIgMTQ6MDc6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBBZGQgYW4gb3B0aW9uYWwgZGVsYXllZCBjYXBzIGNoYW5nZSBtb2RlCi0JICBJbiB0aGlzIG1vZGUgd2UgYWNjZXB0IHByZXZpb3VzbHkgc2V0IGZpbHRlciBjYXBzIHVudGlsCi0JICB1cHN0cmVhbSByZW5lZ290aWF0ZXMgdG8gc29tZXRoaW5nIHRoYXQgaXMgY29tcGF0aWJsZQotCSAgdG8gdGhlIGN1cnJlbnQgZmlsdGVyIGNhcHMuCi0JICBUaGlzIGFsbG93cyBkeW5hbWljIGNhcHMgY2hhbmdlcyBpbiB0aGUgcGlwZWxpbmUgZXZlbgotCSAgaWYgdGhlcmUgaXMgYSBxdWV1ZSBiZXR3ZWVuIGFueSBjb252ZXJzaW9uIGVsZW1lbnQKLQkgIGFuZCB0aGUgY2Fwc2ZpbHRlci4gV2l0aG91dCB0aGlzIHdlIHdvdWxkIGdldCBub3QtbmVnb3RpYXRlZAotCSAgZXJyb3JzIGlmIHRpbWluZyBpcyBiYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5MDAyCi0KLTIwMTQtMTEtMDIgMjA6MTY6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R0b2MuYzoKLQkgIHRvYzogbWlub3IgY29kZSBjbGVhbi11cAotCSAgQW5kIGdldCByaWQgb2YgZ19saXN0X3ByZXBlbmQvZ19saXN0X3JldmVyc2UKLQkgIGFudGktcGF0dGVybiB3aGlsZSB3ZSdyZSBhdCBpdC4KLQotMjAxNC0xMS0wMiAxODo1MTowOCArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBlbnN1cmUgR1N0cmVhbWVyIGluaXRpYWxpemF0aW9uIGRlYnVnIG1lc3NhZ2UgaXMgZGlzcGxheWVkCi0JICBUaGUgR1NUX0lORk8gKCJpbml0aWFsaXplZCBHU3RyZWFtZXIgc3VjY2VzZnVsbHkiKSBpcyBjdXJyZW50bHkgYXQgdGhlIGVuZCBvZgotCSAgZ3N0X2luaXRfY2hlY2sgd2hpY2ggaXNuJ3QgZ3VhcmFudGVlZCB0byBiZSBydW4gc2luY2UgR1N0cmVhbWVyIGNhbiBiZQotCSAgaW5pdGlhbGl6ZWQgYnkgdXNpbmcgaW5pdF9wcmUgYW5kIGluaXRfcG9zdCBkaXJlY3RseSBmcm9tIEdPcHRpb25Db250ZXh0IGxpa2UKLQkgIGdzdC1sYXVuY2ggZG9lcy4gRW5zdXJlIHRoaXMgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgYnkgbW92aW5nIGl0IHRvIGluaXRfcG9zdC4KLQotMjAxNC0xMS0wMSAxOTo1Njo0MSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBkb2M6IERvIG5vdCB1c2UgZGVwcmVjYXRlZCBndGstZG9jICdSZW5hbWUgdG8nIHRhZwotCSAgR09iamVjdCBpbnRyb3NwZWN0aW9uIEdUSy1Eb2MgdGFnICJSZW5hbWUgdG8iIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGNoYW5naW5nIHRvCi0JICByZW5hbWUtdG8gYW5ub3RhdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk1MTQKLQotMjAxNC0xMS0wMSAyMjozMDozMCArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAZGFya29zcGhlcmUuZnI+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogYWRkIEdfUEFSQU1fREVQUkVDQVRFRCB0byBrbm93biBmbGFncwotCSAgRGlzcGxheSAnZGVwcmVjYXRlZCcgaW5zdGVhZCBvZiBmbGFnIHZhbHVlIHdoZW4gdXNpbmcgR19QQVJBTV9ERVBSRUNBVEVECi0JICBpbiBlbGVtZW50IHByb3BlcnRpZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NTE4Ci0KLTIwMTQtMTAtMzEgMTY6MTA6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL3Rvb2xzL2dzdGluc3BlY3QuYzoKLQkgIHRlc3RzOiByZWZhY3RvciB0b29scyBjaGVjayBhIGxpdHRsZQotCSAgVXNlIGFuIGFycmF5IG9mIGNvbnN0YW50IHN0cmluZ3Mgc28gaWYgYXJndW1lbnRzIGdldAotCSAgcmVtb3ZlZCBmcm9tIGl0IHRoZXkgYXJlIG5vdCBjb25zaWRlcmVkIGxlYWtlZCwgYW5kCi0JICB2YWxncmluZCBpcyBoYXBweS4gU3RpbGwgc29tZSBzdHVmZiBsZWFraW5nIGluIEdMaWIKLQkgIHRob3VnaC4KLQotMjAxNC0xMC0zMCAyMzoxNDo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6Ci0JICB0ZXN0czogZml4IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiBieXRlcmVhZGVyIHVuaXQgdGVzdAotCSAgQ2F1Z2h0IGJ5IC1mc2FuaXRpemU9YWRkcmVzcyAvIGxpYmFzYW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NDMxCi0KLTIwMTQtMTAtMjggMTk6MTY6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogbWFrZSBnc3RfaW5pdCgpIHRocmVhZC1zYWZlCi0JICBCZWNhdXNlIHdlIGNhbiwgYW5kIHRoZXJlIGlzbid0IHJlYWxseSBhbnkKLQkgIHJlYXNvbiBub3QgdG8gZG8gc28uCi0KLTIwMTQtMTAtMjggMDk6Mjg6MjggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6Ci0JICB0ZXN0czogZmRzcmM6IGRvbid0IGlnbm9yZSByZXR1cm4gdmFsdWUgb2Ygd3JpdGUoKQotCSAgQ2F1c2VzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIHNvbWUgc3lzdGVtcy4KLQotMjAxNC0xMC0yOCAwMDowNDowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYzoKLQkgIHRlc3RzOiBmaXggZmRzcmMgdGVzdCBjb3JuZXIgY2FzZQotCSAgTWFrZSBwaXBlIHNvY2tldCBub24tYmxvY2tpbmcsIHNvIHdlIGRvbid0Ci0JICBlbmQgdXAgYmVpbmcgYmxvY2tlZCBpbiBhIHdyaXRlIG9uIHRoZSBwaXBlCi0JICB3aGlsZSB0aGUgc3JjIGlzIGVvcyBhbmQgbm90IHJlYWRpbmcgZGF0YQotCSAgYW55IG1vcmUsIGFuZCB0aHVzIHdlIG5ldmVyIHVuYmxvY2sgYW5kIG5ldmVyCi0JICBub3RpY2UgdGhhdCB3ZSdyZSBkb25lLiBUaGlzIHdvdWxkIGhhcHBlbgotCSAgcXVpdGUgcmVsaWFibHkgb24gdGhlIHJwaS4KLQotMjAxNC0xMC0yNyAxNzo1NjoxNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDg0ZDA2Y2QgdG8gN2JiMmJjZQotCi0yMDE0LTEwLTI1IDE3OjE1OjQyICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGFjY29zdGVkLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IFRyaXZpYWwgdHlwbyBmaXgKLQotMjAxNC0xMC0yNCAxMjo1MTowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGRvbid0IHVubG9jayBtdXRleCB0aGF0IGlzIG5vdCBsb2NrZWQKLQkgIEZpeGVzICdBdHRlbXB0IHRvIHVubG9jayBtdXRleCB0aGF0IHdhcyBub3QgbG9ja2VkJwotCSAgd2FybmluZyB3aXRoIG5ld2VyIEdMaWJzIHdoZW4gc2luayBpcyBzaHV0IGRvd24gaW4KLQkgIGNlcnRhaW4gc2l0dWF0aW9ucy4gVHJpZ2dlcmVkIGJ5IHRoZSBkZWNvZGViaW4KLQkgIHRlc3RfcmV1c2Vfd2l0aG91dF9kZWNvZGVycyB1bml0IHRlc3QgaW4gLWJhc2UKLQkgIHNvbWV0aW1lcywgZXNwLiBvbiBzbG93ZXIgbWFjaGluZXMuCi0KLTIwMTQtMTAtMjIgMTg6MjU6MjYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZjoKLQkgIHdpbjMyOiB1cGRhdGUgLmRlZiBmb3IgbmV3IF9nZXRfdHlwZSgpIGZ1bmN0aW9uIGZvciBHc3RDb250cm9sUG9pbnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc2MTYKLQotMjAxNC0wOS0yOSAyMToxMDoxNCArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JICB0aW1lZHZhbHVlY29udHJvbHNvdXJjZTogQWRkIHNvbWUgc2lnbmFscyBhYm91dCB2YWx1ZXMgY2hhbmdlcwotCSAgSW4gb3JkZXIgZm9yIHVzZXIgdG8gYmUgYWJsZSB0byB0cmFjayBjaGFuZ2VzIGluIHRoZSB2YWx1ZSBzZXQgaW4KLQkgIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIHRoZSBmb2xsb3dpbmcgc2lnbmFscyBoYXZlIGJlZW4gYWRkZWQ6Ci0JICAqIHZhbHVlLWFkZGVkCi0JICAqIHZhbHVlLXJlbW92ZWQKLQkgICogdmFsdWUtY2hhbmdlZAotCSAgVG8gYmUgYWJsZSB0byB1c2UgYSBHc3RDb250cm9sUG9pbnQgdG8gYmUgbWFyc2hhbGxlZCBpbnRvIHRoZSBzaWduYWxzLAotCSAgdGhlIEdzdENvbnRyb2xQb2ludCBzdHJ1Y3R1cmUgaXMgbm93IHJlZ2lzdGVyZCBhcyBhIEdCb3hlZCB0eXBlLgotCSAgTmV3IEFQSToKLQkgIH5+fn5+fn4KLQkgICogR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U6OnZhbHVlLWFkZGVkCi0JICAqIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlOjp2YWx1ZS1yZW1vdmVkCi0JICAqIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlOjp2YWx1ZS1hZGRlZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzYxNgotCi0yMDE0LTEwLTIxIDEzOjAxOjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYThjODkzOSB0byA4NGQwNmNkCi0KLTIwMTQtMTAtMjEgMTI6MTg6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiByZW1vdmUgZHVwbGljYXRlIGdzdF9tZXNzYWdlX2dldF90eXBlKCkgaW4gaW5pdAotCSAgU3BvdHRlZCBieTogSmFuIFN0ZWZmZW5zCi0KLTIwMTQtMTAtMjEgMTI6NTc6NDUgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIFJFQURNRToKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2ZTc1NDk4IHRvIGE4Yzg5MzkKLQotMjAxNC0xMC0yMCAxNjozOTozOCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgaWRlbnRpdHk6IGluY2x1ZGUgdGhlIGFjdHVhbCBkZWx0YSBpbiB0aGUgbWVzc2FnZQotCSAgSW5jbHVkaW5nIHRoZSBhY3R1YWwgZGVsdGEgaW4gdGhlIG1lc3NhZ2UgbWFrZXMgaXQgZWFzeSB0byBzZWUsIGlmIHRoZSBuZXcKLQkgIGJ1ZmZlciBpcyBiZWhpbmQgb3IgYWhlYWQgYW5kIGhvdyBtdWNoLgotCi0yMDE0LTEwLTE4IDE4OjQzOjQzICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogVGlkeSBpbml0aWFsaXNhdGlvbgotCSAgVXNlIHNvbWUgbWFjcm9zIHRvIG1ha2Ugb3VyIHZhbHVlIGZ1bmN0aW9ucyBzZXR1cCBhIGJpdAotCSAgdGlkaWVyLCBhbmQgbWljcm8tb3B0aW1pc2UgYSBmZXcgcmVhbGxvY3MgYnkgc2V0dGluZyBhbgotCSAgaW5pdGlhbCBzaXplIGZvciB0aGUgZ2xvYmFsIHR5cGUgYXJyYXlzLgotCi0yMDE0LTEwLTE4IDE3OjI3OjA0ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdG9vbHMvZ3N0LWluZGVudDoKLQkgIGdzdC1pbmRlbnQ6IFJ1biBpbmRlbnQgdHdpY2UuIE9uY2UgaXMgbm90IGlkZW1wb3RlbnQsIHR3aWNlIHNlZW1zIHRvIGJlLgotCi0yMDE0LTEwLTE2IDEwOjEzOjE0ICswNDAwICBBbmRyZWkgU2FyYWtlZXYgPHNhcmFrdXNoYUBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogV2FrZSB1cCBhbnkgd2FpdGluZyBzdHJlYW1zIGlmIHRoZSBjdXJyZW50IG9uZSBnb2VzIEVPUwotCSAgT3RoZXJ3aXNlIHdlIG1pZ2h0IGhhdmUgdW5saW5rZWQgc3RyZWFtcyB3YWl0aW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODE5OAotCi0yMDE0LTEwLTE3IDEyOjQxOjA0ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkgIHR5cGVmaW5kOiBzaW1wbGlmeSByZWdpc3RyYXRpb24gY29kZQotCSAgUmVtb3ZlIGEgdXNlbGVzcyBhc3NlcnQgKHdlIGp1c3QgaW5zdGFudGlhdGVkIHRoaXMgdHlwZSkuIERyb3AgdGhlIGZyZWUnaW5nIG9mCi0JICB0aGUgZXh0ZW5zaW9uIGFycmF5LiBBcyB3ZSBqdXN0IGNyZWF0ZWQgdGhlIGluc3RhbmNlIHRoaXMgaXMgYWx3YXlzIE5VTEwuCi0KLTIwMTQtMTAtMTYgMTA6NTU6MzYgKzAyMDAgIEZlbGl4IFNjaHdhcnogPGZlbGl4LnNjaHdhcnpAb3NzLnNjaHdhcnouZXU+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWFsbG9jYXRpb24ueG1sOgotCSogZG9jcy9wd2cvYWR2YW5jZWQtY2xvY2sueG1sOgotCSogZG9jcy9wd2cvYWR2YW5jZWQtZXZlbnRzLnhtbDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLXFvcy54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC10YWdnaW5nLnhtbDoKLQkgIGRvY3M6IHB3ZDogZml4IHR5cG9zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NjEyCi0KLTIwMTQtMTAtMTEgMTk6Mjg6MjEgKzAyMDAgIExpbnVzIFN2ZW5zc29uIDxsaW51c3Auc3ZlbnNzb25AZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6Ci0JICB0ZXN0czogQWRkIGEgdGVzdCBmb3IgcmVtb3ZpbmcgYSBidXMgd2F0Y2gKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzUxOTUKLQotMjAxNC0wOC0xOSAyMzoyODo1MiArMDIwMCAgTGludXMgU3ZlbnNzb24gPGxpbnVzcC5zdmVuc3NvbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RidXMuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVzOiBBZGQgYSBmdW5jdGlvbiB0byByZW1vdmUgYSBidXMgd2F0Y2gKLQkgIElmIGEgYnVzIHdhdGNoIGlzIGFkZGVkIHRvIHRoZSBub24gZGVmYXVsdCBtYWluIGNvbnRleHQgaXQncyBub3QKLQkgIHBvc3NpYmxlIHRvIHJlbW92ZSBpdCB1c2luZyBnX3NvdXJjZV9yZW1vdmUoKS4KLQkgIEZpeGVzOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1MTk1Ci0KLTIwMTQtMTAtMDggMjI6NTE6NTYgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW5AYWNjb3N0ZWQubmV0PgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGRvY3M6IFVwZGF0ZSBHc3RRT1NUeXBlIGRvY3VtZW50YXRpb24gYSBiaXQKLQkgIENvcnJlY3Rpb24gZm9yIHdobyBpcyBwcm9kdWNpbmcgZGF0YSB0b28gZmFzdCwgYW5kIHNvbWUgb3RoZXIgbWlub3IKLQkgIGNsYXJpZmljYXRpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODE2NgotCi0yMDE0LTEwLTA4IDE2OjAzOjIwICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtYWxsb2NhdGlvbi54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1xb3MueG1sOgotCSAgZG9jczogcHdnOiBmaXggdHdvIHR5cG9zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4MTUzCi0KLTIwMTQtMTAtMDggMTU6Mzc6MzcgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JICBkb2NzOiBwd2c6IGZpeCB0eXBvIGluICdEeW5hbWljIG5lZ290aWF0aW9uJyBzZWN0aW9uCi0JICBUaGUgcG9pbnQgb2YgdGhpcyBleGFtcGxlIGlzIHRvIHNob3cgaG93IHRvIHNldCBjYXBzCi0JICBvbiB0aGUgc291cmNlIHBhZCBvbmNlIGl0IGhhcyBiZWVuIHNldCBvbiB0aGUgc2luayBwYWQuCi0JICBTbywgaW4gcGFzc3Rocm91Z2ggbW9kZSwgdGhlIGNhcHMgaXMganVzdCBjb3BpZWQgdG8gdGhlCi0JICBzb3VyY2UgcGFkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODE1MwotCi0yMDE0LTEwLTA4IDA5OjM3OjQxIC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBkb24ndCBsb2NrIG11bHRpcXVldWUgd2hlbiBwdXNoaW5nIHNlcmlhbGl6ZWQgcXVlcmllcwotCSAgSWYgd2UgYXJlIHB1c2hpbmcgYSBzZXJpYWxpemVkIHF1ZXJ5IGludG8gYSBxdWV1ZSBhbmQgdGhlIHF1ZXVlIGlzCi0JICBmaWxsZWQsIHdlIHdpbGwgZW5kIGluIGEgZGVhZGxvY2suIFdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUKLQkgIHB1c2hpbmcgYW5kIGFjcXVpcmUgaXQgYWdhaW4gYWZ0ZXJ3YXJkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzc5NAotCi0yMDE0LTEwLTA4IDAxOjMzOjUxICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IFVzZSBHU1RfUFRSX0ZPUk1BVCBpbiBkZWJ1ZyB0byBvdXRwdXQgYnVmZmVyIGRldGFpbHMKLQkgIFVzZSAlR1NUX1BUUl9GT1JNQVQgaW5zdGVhZCBvZiAlcCBpbiBkZWJ1ZyBvdXRwdXQgc28gYWxsIHRoZSBidWZmZXIKLQkgIGRldGFpbHMgYXJlIG91dHB1dAotCi0yMDE0LTEwLTA2IDEzOjM4OjIxICswMjAwICBOaWNvbGFzIEh1ZXQgPG5pY29sYXMuaHVldEBwYXJyb3QuY29tPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIHN5c3RlbWNsb2NrOiBmaXggbXVsdGktdGhyZWFkIGVudHJ5IHN0YXR1cyBpc3N1ZQotCSAgUnVubmluZyB0d28gdGhyZWFkcywgb25lIGV4ZWN1dGluZyB0aGUgdGltZXIgYW5kIG9uZSB1bnNjaGVkdWxpbmcgaXQsIHRoZQotCSAgdW5zY2hlZHVsZWQgc3RhdHVzIHNldCBieSB0aGUgc2Vjb25kIHRocmVhZCBpcyBzb21ldGltZXMgb3ZlcndyaXR0ZW4gYnkgdGhlCi0JICBmaXJzdCBvbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3OTk5Ci0KLTIwMTQtMTAtMDMgMTQ6MDQ6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogZml4IGNvbXBpbGF0aW9uCi0KLTIwMTQtMTAtMDMgMTQ6NDQ6NDggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXQtc2VsZWN0b3I6IGV4dHJhY3Qgc29tZSBjb21tb24gY29kZSBpbnRvIGhlbHBlcnMKLQotMjAxNC0xMC0wMyAxNDowMTo1OSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dC1zZWxlY3Rvcjogc21hbGwgY29kZSBjbGVhbnVwcwotCSAgUmVuYW1lIFRJTUVTVEFNUCAtPiBQVFMuIE1vdmUgYSB2YXIgZG93biB0byB0aGUgc2NvcGUgd2hlcmUgaXQgaXMgdXNlZC4gVXNlCi0JICBnX3F1ZXVlX2ZyZWVfZnVsbCgpLgotCi0yMDE0LTEwLTAzIDEzOjQ3OjQyICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgotCSAgaW5wdXRzZWxlY3RvcjogZml4IHByaW50ZiBmb3JtYXQKLQkgIFRoZSBwYWRjb3VudCBpcyB1aW50LiBBbHNvIGFkZCBjb21tZW50cyB0byB0aGUgaW5zdGFuY2UgdmFycy4KLQotMjAxNC0xMC0wMiAwMzozMDoyNCArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZG9uJ3QgbGVhayBjYXBzIGluIGdzdF9iYXNlX3BhcnNlX3Byb2Nlc3Nfc3RyZWFtaGVhZGVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3NzYyCi0KLTIwMTQtMTAtMDMgMTM6MTQ6MjUgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXBhcnNlLmM6Ci0JICB0ZXN0czogYmFzZXBhcnNlOiBzZXRfc2lua19jYXBzIHZmdW5jIHNob3VsZCd0IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBjYXBzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3NzYyCi0KLTIwMTQtMTAtMDMgMDk6NTc6MzcgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgZmFrZXNyYzogbWFyayB0aGUgcGF0dGVybiBwcm9wZXJ0eSBhcyB1bnVzZWQKLQkgIFJldmVydCB0aGUgcHJldmlvdXMgY29tbWl0IHdoaWNoIHJlbW92ZXMgdGhlIHBhdHRlcm4gcHJvcGVydHkgb2YgZmFrZXNyYyBiZWNhdXNlCi0JICBkb2luZyBzbyB3aWxsIGJyZWFrIEFCSS4gQnJpbmdpbmcgdGhlIHByb3BlcnR5IGJhY2sgYnV0IG1hcmtpbmcgaXQgYXMgdW51c2VkCi0JICBpbiB0aGUgcHJvcGVydHkgc3RyaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzY4MwotCi0yMDE0LTEwLTAzIDA5OjAxOjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgUmV2ZXJ0ICJiYXNlcGFyc2U6IGRvbid0IGxlYWsgY2FwcyBpbiBnc3RfYmFzZV9wYXJzZV9wcm9jZXNzX3N0cmVhbWhlYWRlciIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNWU4YjRiZjA4NTE4MGY3YTRjN2FlNmVjMGY1MjViYWVhZWRkNGRmOC4KLQkgIFRoaXMgY2F1c2VzIHJlZmNvdW50aW5nIGNyaXRpY2FscyBpbiB0aGUgYmFzZXBhcnNlIHVuaXQgdGVzdC4KLQotMjAxNC0xMC0wMiAxMzo0NTozNCArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkgIGZha2VzcmM6IHJlbW92aW5nIHVudXNlZCBwYXR0ZXJuIG9wdGlvbgotCSAgRXZlbnRob3VnaCB0aGUgInBhdHRlcm4iIHByb3BlcnR5IG9mIGZha2VzcmMgY2FuIGJlIHNldCwgaXQgaXMgbmV2ZXIgdXNlZC4gVGhlCi0JICBvbmx5IHBhdHRlcm4gc3VwcG9ydGVkIGlzIHRoZSBkZWZhdWx0IDB4MDAgLT4gMHhmZiwgYW5kIGlmIGEgcGF0dGVybiBpcyBzZXQgYnkKLQkgIHRoZSB1c2VyIGl0IGlzIGlnbm9yZWQuIFJlbW92aW5nIHRoZSB1bnVzZWQgcHJvcGVydHkgYW5kIHZhcmlhYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzY4MwotCi0yMDE0LTEwLTAyIDE0OjU1OjIyICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogQWRkIG1pc3NpbmcgYnJlYWsgaW4gc3dpdGNoCi0KLTIwMTQtMTAtMDIgMTE6MDA6MzIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiB1cGRhdGUgc2VnbWVudCBwb3NpdGlvbiBvbiBHQVAgZXZlbnRzIHRvIGNhbGN1bGF0ZSBsZXZlbHMgcHJvcGVybHkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc0OTgKLQotMjAxNC0xMC0wMiAxMDo1Nzo0MyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogdXBkYXRlIHNlZ21lbnQgcG9zaXRpb24gb24gR0FQIGV2ZW50cyB0byBjYWxjdWxhdGUgbGV2ZWxzIHByb3Blcmx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3NDk4Ci0KLTIwMTQtMDktMjcgMjA6MTA6MzQgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogdXBkYXRlIHNlZ21lbnQgcG9zaXRpb24gb24gR0FQIGV2ZW50cyB0byBjYWxjdWxhdGUgbGV2ZWxzIHByb3Blcmx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3NDk4Ci0KLTIwMTQtMTAtMDIgMDM6MzA6MjQgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGRvbid0IGxlYWsgY2FwcyBpbiBnc3RfYmFzZV9wYXJzZV9wcm9jZXNzX3N0cmVhbWhlYWRlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzc2MgotCi0yMDE0LTEwLTAyIDEwOjEzOjI4ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIGNhcHNmaWx0ZXI6IFB1c2ggcGVuZGluZyBldmVudHMgYmVmb3JlIGEgYnVmZmVyIGFsc28gaWYgdXBzdHJlYW0gbmV2ZXIgY29uZmlndXJlZCBjYXBzIGJ1dCB3ZSBoYXZlIHNyY3BhZCBjYXBzIGFscmVhZHkKLQkgIE90aGVyd2lzZSB3ZSBuZXZlciBzZW5kIHBlbmRpbmcgZXZlbnRzIGRvd25zdHJlYW0gdGhhdCBhcnJpdmUgYWZ0ZXIgd2UKLQkgIGNvbmZpZ3VyZWQgY2FwcyBvbiB0aGUgc3JjcGFkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzczNQotCi0yMDE0LTA5LTI5IDE3OjQ4OjI5ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IERvbid0IHVuY29uZGl0aW9uYWxseSB1c2UgZ19saXN0X2NvcHlfZGVlcCgpCi0JICBXZSBkb24ndCBkZXBlbmQgb24gR0xpYiAyLjM0IHlldCBhbmQganVzdCBmb3IgdGhpcyBzZWVtcyBhIGJpdCB1c2VsZXNzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzU4NAotCi0yMDE0LTA5LTI5IDE2OjIyOjQ3ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IEluY2x1ZGUgb3VyIG93biBCU0QgbGljZW5zZWQgY29weSBvZiBzdHJjYXNlc3RyKCkgZm9yIFdpbmRvd3MgYW5kIG90aGVycwotCi0yMDE0LTA5LTI5IDE1OjU0OjM3ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IEZpeCBjb21waWxlciB3YXJuaW5ncyB3aXRoIGdjYwotCSAgVGhlc2UgYXJlIGFjdHVhbGx5IG5vdCB0cnVlLgotCSAgZ3N0dXJpLmM6IEluIGZ1bmN0aW9uICdfZ3N0X3VyaV9zdHJpbmdfdG9fdGFibGUuY29uc3Rwcm9wJzoKLQkgIGdzdHVyaS5jOjEzMTY6Mjc6IGVycm9yOiAncGN0X2t2X3NlcCcgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCi0JICBmb3IgKG5leHRfc2VwID0gc3RyY2FzZXN0ciAodmFsdWUsIHBjdF9rdl9zZXApOyBuZXh0X3NlcDsKLQkgIF4KLQkgIGdzdHVyaS5jOjEyODM6MjQ6IGVycm9yOiAncGN0X3BhcnRfc2VwJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24gWy1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZF0KLQkgIG5leHRfc2VwID0gc3RyY2FzZXN0ciAobmV4dF9zZXAgKyAxLCBwY3RfcGFydF9zZXApKSB7Ci0JICBeCi0KLTIwMTQtMDktMjkgMTI6MTk6MzUgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R1cmkuYzoKLQkgIHVyaTogRml4IG1lbW9yeSBsZWFrIGluIGdzdF91cmlfam9pbigpCi0JICBUaGUgbWVyZ2VkIHBhdGggc2VnbWVudHMgYXJlIGEgZGVlcC1jb3BpZWQgbGlzdCBhbmQgd2UgbmVlZCB0byBmcmVlIHRoZQotCSAgY29udGFpbmVkIHN0cmluZ3MgdG9vIGluc3RlYWQgb2YganVzdCB0aGUgbGlzdCBub2RlcyB0aGVtc2VsdmVzLgotCi0yMDE0LTA3LTMxIDIyOjE4OjUzICswMTAwICBEYXZpZCBXYXJpbmcgPGRhdmlkLndhcmluZ0ByZC5iYmMuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHVyaS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBHc3RVcmk6IEFkZCBHc3RVcmkgbWluaW9iamVjdCB0byBoYW5kbGUgVVJJcyBpbiBhbiBSRkMgMzk4NiBjb21wbGlhbnQgZmFzaGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTIyMQotCi0yMDE0LTA5LTI3IDEzOjU3OjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIHNjcmlwdHM6IGFkZCBnc3QtcnBpY2Ftc3JjIHRvIGdzdC11bmluc3RhbGxlZAotCi0yMDE0LTA5LTI1IDIxOjIxOjA5ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVycm9yLmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay90b29scy9nc3RpbnNwZWN0LmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZml4bWU6IGJ1bXAgbGVmdG92ZXIgMC4xMSBmaXhtZSBjb21tZW50cwotCi0yMDE0LTA5LTI1IDIxOjA0OjIzICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiAnbmV3c2VnbWVudCcgdG8gJ3NlZ21lbnQnIGluIHRoZSBkb2NzCi0JICBCcmluZ3MgdGhlIGFwaS1kb2NzIGluIHN5bmMgd2l0aCB0aGUgMS4wIGFwaSByZW5hbWUuCi0KLTIwMTQtMDktMjUgMjA6MjM6MzEgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogbW92ZSB0aGUgcXVpY2sgcmV0dXJuIHVwCi0JICBEb24ndCBhc3NpZ24gbG9jYWwgdmFycyBpZiB3ZSBza2lwIGFueXdheS4gQWRkIGxvZ2dpbmcgZm9yIGZhaWx1cmUgY29uZGl0aW8KLQotMjAxNC0wOS0yNSAxOTowMTo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBjb21tb246Ci0JICB0ZXN0czogcGFyYWxsZWxpc2UgJ21ha2UgdmFsZ3JpbmQnCi0JICBVc2UgJChNQUtFKSBpbnN0ZWFkIG9mICdtYWtlJyBpbnNpZGUgdGhlIE1ha2VmaWxlLAotCSAgb3RoZXJ3aXNlIHRoZSBtYWtlIHdpbGwgcnVuIGFzIGlmIC1qMSBoYWQgYmVlbgotCSAgc3BlY2lmaWVkIGFuZCBjb21wbGFpbiBhYm91dCB0aGUgam9iIHNlcnZlciBub3QKLQkgIGJlaW5nIGF2YWlsYWJsZSwgYW5kIHdpdGggJChNQUtFKSBpbiBpbmhlcml0cyB0aGUKLQkgIHBhcmVudCBtYWtlJ3Mgc2V0dGluZ3MgaXQgc2VlbXMuCi0JICBVcGdyYWRlIGNvbW1vbiBzdWJtb2R1bGUgZm9yIHBhcmFsbGVsIGNoZWNrLXZhbGdyaW5kLgotCSAgTGV0IHRoaXMgc2V0dGxlIGEgYml0IGJlZm9yZSB1cGdyYWRpbmcgdGhlIG90aGVyIG1vZHVsZXMuCi0KLTIwMTQtMDktMjUgMTg6NTc6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIHdpbjMyOiB1cGRhdGUgLmRlZiBmaWxlCi0JICBJdCdzIHNvcnRlZC4gSWYgaXQncyB1bnNvcnRlZCwgbWFrZSBjaGVjay1leHBvcnRzIGZhaWxzLgotCi0yMDE0LTA5LTI1IDE4OjU1OjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogcmVtb3ZlIGNvbmZ1c2luZyB3YXJuaW5nIGFib3V0IHJ1bm5pbmcgdW5kZXIgdmFsZ3JpbmQKLQkgIFdlJ3JlIG5vdCBhY3R1YWxseSBkb2luZyBhbnl0aGluZyBkaWZmZXJlbnRseSBhbnl3aGVyZSB3aGVuCi0JICB3ZSBkZXRlY3QgdGhhdCB3ZSdyZSBydW5uaW5nIHVuZGVyIHZhbGdyaW5kLCBzbyBsZXQncyBub3QKLQkgIHByaW50IHRoYXQgY29uZnVzaW5nIG1lc3NhZ2UgdGhhdCBtYWtlcyBwZW9wbGUgd29uZGVyIGhvdwotCSAgdGhleSBjYW4gc3dpdGNoIGl0IG9mZiBzbyB0aGV5IGNhbiB2YWxncmluZCB0aGUgbm9ybWFsCi0JICBjb2RlIHBhdGhzLiBTZWVpbmcgdGhhdCB3ZSdyZSBub3QgZG9pbmcgdGhhdCBub3IgaGF2ZSBkb25lCi0JICBzbyBpbiB0aGUgbGFzdCAxMCB5ZWFycyB3ZSBtaWdodCBqdXN0IGFzIHdlbGwgcmVtb3ZlIHRoZQotCSAgZW50aXJlIGNoZWNrIGFjdHVhbGx5LgotCi0yMDE0LTA5LTI1IDE2OjIxOjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VwYXJzZS5jOgotCSAgdGVzdHM6IGZpeCBjYXBzIGxlYWsgaW4gYmFzZXBhcnNlIHVuaXQgdGVzdAotCi0yMDE0LTA5LTI1IDE0OjU0OjIzICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXNoZ0BheGlzLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGZsb3djb21iaW5lci5oOgotCSogdGVzdHMvY2hlY2svbGlicy9mbG93Y29tYmluZXIuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGZsb3djb21iaW5lcjogYWRkIGEgZ3N0X2Zsb3dfY29tYmluZXJfY2xlYXIoKSBtZXRob2QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzczNTkKLQkgIEFQSTogZ3N0X2Zsb3dfY29tYmluZXJfY2xlYXIoKQotCi0yMDE0LTA5LTI0IDEwOjExOjU0ICswMjAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgc2NyaXB0czogSGFuZGxlIGdzdC1weXRob24gaW4gZ3N0LXVuaW5zdGFsbGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MDgyCi0KLTIwMTQtMDYtMDMgMTQ6MjM6MzAgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBSZW1vdmUgRU9TIGV2ZW50IGZyb20gcGVuZGluZ19ldmVudCBsaXN0IG9uIEZMVVNIX1NUT1AKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4NjgKLQotMjAxNC0wOS0yMiAxNDoyNzowNSArMDEwMCAgV2lsbGlhbSBNYW5sZXkgPHdpbGxAd2lsbGlhbW1hbmxleS5uZXQ+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGRvY3M6IEZpeCBHc3RCdWZmZXIgdHlwbyAibWVtb3J5IGJvY2siIC0+ICJtZW1vcnkgYmxvY2siCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MTE3Ci0KLTIwMTQtMDktMjIgMTc6Mjc6MzEgKzAxMDAgIFdpbGxpYW0gTWFubGV5IDx3aWxsQHdpbGxpYW1tYW5sZXkubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBkb2NzOiBJbXByb3ZlIGdzdF9idWZmZXJfZ2V0X21ldGEoKSB0byBjbGVhciB1cCBjb25mdXNpb24KLQkgIEkgd2FzIGNvbmZ1c2VkIGJ5IHRoZSBleGlzdGVuY2Ugb2YgYGdzdF9idWZmZXJfZ2V0X21ldGFgIGFzIGl0IHN1Z2dlc3RlZAotCSAgdG8gbWUgdGhhdCB5b3Ugc2hvdWxkIG9ubHkgYXR0YWNoIG9uZSBvZiBhbnkgdHlwZSBvZiBHc3RNZXRhIHRvIGEgYnVmZmVyLgotCSAgSXQncyBwZXJmZWN0bHkgZmluZSB0byBhdHRhY2ggbXVsdGlwbGUgZnJvbSBhIHNpbmdsZSBBUEkgc28gSSdtCi0JICBkb2N1bWVudGluZyB0aGF0IGhlcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MTI5Ci0KLTIwMTQtMDktMjIgMTk6MDU6MzIgKzAyMDAgIE1hcmNpbiBLb2xueSA8bWFyY2luLmtvbG55QGZseXRyb25pYy5wbD4KLQotCSogZ3N0L2dzdGRhdGV0aW1lLmg6Ci0JICBkYXRldGltZTogYWRkZWQgbWlzc2luZyBpbmNsdWRlIGRpcmVjdGl2ZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzcxMzMKLQotMjAxNC0wOS0yMyAxNDozMToyOSArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogRG8gbm90IGZvcmdldCB0byByZWxlYXNlIHRoZSBRVUVVRV9MT0NLIGluIHRoZSBvdXRfZmxvd19lcnJvciBwYXRoCi0JICBBdm9pZGluZyBkZWFkbG9ja3MhCi0KLTIwMTQtMDktMjMgMTI6NTM6MTggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgZG9jczogZml4IGEgc21hbGwgY29udHJhZGl0aW9uIGluIHRoZSBkb2NzCi0JICBUaGUgdm1ldGhvZCBnZXRfc2l6ZSgpIHNoYWxsIHJldHVybiB0aGUgc2l6ZSBpbiAnZm9ybWF0JyBhcyBjb25maWd1cmVkIGJ5Ci0JICBfc2V0X2Zvcm1hdCgpLgotCi0yMDE0LTA5LTIyIDA5OjMzOjA0ICswMjAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBEbyBub3QgaG9sZCBHU1RfUVVFVUVfTE9DSyB3aGlsZSBwb3N0aW5nIEVSUk9SIG1lc3NhZ2VzCi0JICBUaGlzIG1pZ2h0IGNyZWF0ZSBkZWFkbG9ja3MgYW5kIHdlIG5lZWQgdG8gYXZvaWQgaG9sZGluZyBlbGVtZW50Ci0JICBzcGVjaWZpYyBsb2NrIHdoaWxlIHBvc3RpbmcgbWVzc2FnZXMKLQkgIEZvciBleGFtcGxlIGEgZGVhZGxvY2sgd2lsbCBoYXBwZW4gaWYgd2hpbGUgcG9zdGluZyB0aGUgbWVzc2FnZSwKLQkgIHNvbWVvbmUgY29ubmVjdGVkIG9uIHRoZSBidXMgKHN5bmMpIHRyaWVzIHRvIERPVCB0aGUgcGlwZWxpbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MTAyCi0KLTIwMTQtMDktMTkgMTI6MDI6NDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IGRvIG5vdCBwb3N0IGJ1ZmZlcmluZyBtZXNzYWdlcyBob2xkaW5nIHRoZSBsb2NrCi0JICBJdCBtaWdodCBjYXVzZSBkZWFkbG9ja3MgdG8gcG9zdCBtZXNzYWdlcyB3aGlsZSBob2xkaW5nIHRoZSBxdWV1ZTIKLQkgIGxvY2suIFRvIGF2b2lkIHRoaXMgYSBuZXcgYm9vbGVhbiBmbGFnIGlzIHNldCB3aGVuZXZlciBhIG5ldwotCSAgYnVmZmVyaW5nIHBlcmNlbnQgaXMgZm91bmQuIFRoZSBtZXNzYWdlIGlzIHBvc3RlZCBhZnRlciB0aGUgbG9jawotCSAgaXMgcmVsZWFzZWQuCi0JICBUbyBtYWtlIHN1cmUgdGhlIGJ1ZmZlcmluZyBtZXNzYWdlcyBhcmUgcG9zdGVkIGluIHRoZSByaWdodCBvcmRlciwgbWVzc2FnZXMKLQkgIGFyZSBwb3N0ZWQgaG9sZGluZyBhbm90aGVyIGxvY2suIFRoaXMgcHJldmVudHMgMiB0aHJlYWRzIHRyeWluZyB0byBwb3N0Ci0JICBtZXNzYWdlcyBhdCB0aGUgc2FtZSB0aW1lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjk2OQotCi0yMDE0LTA5LTE5IDA5OjQyOjEwICswNTMwICBSYXZpIEtpcmFuIEsgTiA8cmF2aS5raXJhbkBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgZ3N0dXJpOiBSZW1vdmUgdW5uZWNlc3NhcnkgY29kZQotCSAgZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkoKSBmdW5jdGlvbiBoYXMgbmV3X3VyaSwgbG9jYXRpb24gYW5kIGNvbG9uCi0JICBhcmUgbm90IG5lY2Vzc2FyeSwgdGhleSBjYW4gYmUgcmVtb3ZlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4NzcKLQotMjAxNC0wOS0xOSAwMDozMzo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtdGFnZ2luZy54bWw6Ci0JKiBkb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sOgotCSAgZG9jczogcHdnOiBmaXggc29tZSBsaW5rcyB0byB0aGUgQVBJIGRvY3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY3NjIKLQotMjAxNC0wOS0xOCAxODo1NTo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiByZW1vdmUgRklYTUUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4NzgKLQotMjAxNC0wOS0xNyAyMTo0OToxOCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBGaXggc3BlbGxpbmcgZXJyb3IKLQkgIFRoYW5rIHRvIEFkcmlhbiBPd2VuIGZvciByZXBvcnRpbmcgdGhpcyBlcnJvci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4MzkKLQotMjAxNC0wOS0xNyAxNzoxNzoxMCArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kZWxlbWVudDogZG8gbm90IGxlYWsgc3RpY2t5IGV2ZW50cyBpbiBmbHVzaF9zdG9wCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2ODEzCi0KLTIwMTQtMDktMTIgMTQ6NDI6MjMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBhdm9pZCBnbG9iYWwgdmFyaWFibGUgZm9yIGxvZ19maWxlCi0JICBVc2UgdXNlcl9kYXRhIHRvIHBhc3MgdGhlIGxvZ19maWxlIGhhbmRsZSB0byB0aGUgbG9nZ2VyLWZ1bmN0aW9uLgotCSAgSWYgb25lIHdhbnRzIHRvIGNoYW5nZSB0aGUgbG9nIHRhcmdldCAoZS5nLiBHU1RfREVCVUdfRklMRSksIHNpbXBseSBjYWxsCi0JICBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbigpIGFuZCByZS1hZGQgdGhlIGhhbmRsZXIgd2l0aCB0aGUgbmV3IGxvZy10YXJnZXQKLQkgIHVzaW5nIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uICgpLgotCi0yMDE0LTA5LTE2IDEzOjQ4OjE4ICswMjAwICBPZ255YW4gVG9uY2hldiA8b2dueWFuQGF4aXMuY29tPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBhZGQgYW5ub3RhdGlvbnMgdG8gZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3QoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjczOQotCi0yMDE0LTA5LTExIDE4OjAxOjU4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBkbyBub3QgcG9zdCBtZXNzYWdlcyBob2xkaW5nIHRoZSBsb2NrCi0JICBJdCBtaWdodCBjYXVzZSBkZWFkbG9ja3MgdG8gcG9zdCBtZXNzYWdlcyB3aGlsZSBob2xkaW5nIHRoZSBtdWx0aXF1ZXVlCi0JICBsb2NrLiBUbyBhdm9pZCB0aGlzIGEgbmV3IGJvb2xlYW4gZmxhZyBpcyBzZXQgd2hlbmV2ZXIgYSBuZXcgYnVmZmVyaW5nIHBlcmNlbnQKLQkgIGlzIGZvdW5kLiBUaGUgbWVzc2FnZSBpcyBwb3N0ZWQgYWZ0ZXIgdGhlIGxvY2sgY2FuIGJlIHJlbGVhc2VkLgotCSAgVG8gbWFrZSBzdXJlIHRoZSBidWZmZXJpbmcgbWVzc2FnZXMgYXJlIHBvc3RlZCBpbiB0aGUgcmlnaHQgb3JkZXIsIG1lc3NhZ2VzCi0JICBhcmUgcG9zdGVkIGhvbGRpbmcgYW5vdGhlciBsb2NrLiBUaGlzIHByZXZlbnRzIDIgdGhyZWFkcyB0cnlpbmcgdG8gcG9zdAotCSAgbWVzc2FnZXMgYXQgdGhlIHNhbWUgdGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYyOTUKLQotMjAxNC0wOS0xNiAxNjowNzo0MCArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGRvY3MvcHdnL290aGVyLWJhc2UueG1sOgotCSAgZG9jczogZml4IHR5cG8KLQotMjAxNC0wOS0xNiAxMjoxNzo0OCArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogQWRkIGFubm90YXRpb25zIHRvIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wb29sKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY3MzYKLQotMjAxNC0wOS0xNSAxNjozODoxNyArMDIwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBoYW5kbGUgcmVmZXJlbmNlIGluIHNldF9hbGxvY2F0aW9uIHJhdGhlciB0aGFuIGluIHByZXBhcmVfYWxsb2NhdGlvbgotCSAgT3RoZXJ3aXNlIHdlIGNhbiBmb3JnZXQgdG8gdW5yZWYgb2JqZWN0cyBpbiBlcnJvciBjYXNlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY2ODAKLQotMjAxNC0wOS0xNSAxMzowNjo0MCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGNoZWNrOiBVc2UgdGhlIG5hbWUgcGFyYW1ldGVyIG9mIGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUoKSBhbmQgdGhlIHNpbmsgdmFyaWFudAotCSAgVGhpcyB3YXMgaGFyZGNvZGVkIHRvICJzaW5rIiAvICJzcmMiIGJ5IGFjY2lkZW50IGluIHByZXZpb3VzIHJlZmFjdG9yaW5nLgotCi0yMDE0LTA5LTEzIDIwOjEyOjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZG93bmxvYWRidWZmZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgY29yZWVsZW1lbnRzOiBtYXJrIHByb3BlcnRpZXMgd2l0aCBNVVRBQkxFX1BMQVlJTkcKLQotMjAxNC0wOS0xMSAxNTo1MjozMiArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBBZGQgYSBmdW5jdGlvbiB0byBjaGVjayBkZXN0cnVjdGlvbiBvZiBvYmplY3RzCi0JICBBZGQgYSBtZXRob2QgbGV0dGluZyBwZW9wbGUgdG8gZW5zdXJlIHRoYXQgdW5yZWZmaW5nIG9uZSBvYmplY3QKLQkgIGxlYWRzIHRvIGl0cyBkZXN0cnVjdGlvbiwgYW5kIHBvc3NpYmx5IHRoZSBkZXN0cnVjdGlvbiBvZiBtb3JlIG9iamVjdAotCSAgKHRoaW5rIGRlc3RydWN0aW9uIG9mIGEgR3N0QmluIGV0Yy4uLikuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NDc3Ci0KLTIwMTQtMDktMTIgMTQ6MTA6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29sczogZ3N0LWluc3BlY3Q6IGRvbid0IGxpc3QgcGFkIGZ1bmN0aW9ucwotCSAgRG9uJ3QgcHJpbnQgYWxsIHRoZSBkaWZmZXJlbnQgcGFkIGZ1bmN0aW9ucywgaXQncyBqdXN0Ci0JICBjb25mdXNpbmcgYW5kIG5vIG9uZSBoYXMgZXZlciBuZWVkZWQgdG8ga25vdyB0aGlzIGZvcgotCSAgYW55dGhpbmcgZXZlciBhbnl3YXksIGl0J3MganVzdCB1c2VsZXNzIGluZm9ybWF0aW9uLgotCSAgQmVzaWRlcywgd2UgYWxzbyBsYWJlbCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgYXMKLQkgICdjdXN0b20nIGltcGxlbWVudGF0aW9ucyAodGhlIGNvZGUgdGhhdCB0cmllcyB0bwotCSAgcHJldmVudCB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBpdCBzZWVtcykuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2Mzc3Ci0KLTIwMTQtMDktMTIgMTU6MjI6MTkgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogTWFrZSBzdXJlIHRoZSBidWZmZXIgdG8gZ2V0L3B1bGxfcmFuZ2UoKSBoYXMgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBzaXplCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1ODYxCi0KLTIwMTQtMDktMDUgMTg6MzY6MDIgKzAwMDAgIFRpYWdvIDx0aWFnb2thdGNpcGlzQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGNoZWNrOiBBZGRpbmcgZG9jdW1lbnRhdGlvbiB0byB0aGUgZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWUgZnVuY3Rpb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQxOTAKLQotMjAxNC0wOS0xMCAxNDo1MzowMCArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogYWRkIGFubm90YXRpb25zIHRvIGdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcG9vbCgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8vc2hvd19idWcuY2dpP2lkPTczNjQyNAotCi0yMDE0LTA5LTExIDA5OjM1OjE3ICswMjAwICBSw6ltaSBMZWbDqHZyZSA8cmVtaS5sZWZldnJlQHBhcnJvdC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIHZhbHZlOiBmaXggdHlwbyBpbiBkZXNjcmlwdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjQ1NQotCi0yMDE0LTA5LTA5IDIwOjQzOjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBtaW5vciBkb2NzIGZpeAotCi0yMDE0LTA5LTAzIDE3OjM4OjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSAgZGV2aWNlbW9uaXRvcjogZml4IHR5cG8gaW4gc2FtcGxlIGNvZGUgaW4gZG9jcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNTk3NQotCi0yMDE0LTA4LTI1IDExOjM0OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdHM6IGFkZCBmbHVzaC1zdG9wIG9uIGluYWN0aXZlIHBhZCB0ZXN0Ci0JICBDaGVjayB0aGF0IHB1c2hpbmcgZmx1c2gtc3RvcCBvbiBhbiBpbmFjdGl2ZSBwYWQgZG9lcyBub3QgY2xlYXIgdGhlCi0JICBmbHVzaGluZyBmbGFnLgotCi0yMDE0LTA4LTIxIDE1OjQ5OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBkb24ndCBhY2NlcHQgZmx1c2gtc3RvcCBvbiBpbmFjdGl2ZSBwYWRzCi0JICBJbmFjdGl2ZSBwYWRzIHNob3VsZCBhdCBhbGwgdGltZXMgaGF2ZSB0aGUgZmx1c2hpbmcgZmxhZyBzZXQuIFRoaXMgbWVhbnMKLQkgIHRoYXQgd2hlbiB3ZSBnZXQgYSBmbHVzaC1zdG9wIG9uIGFuIGluYWN0aXZlIHBhZCB3ZSBtdXN0IGlnbm9yZSBpdC4KLQkgIE9uIHNpbmtwYWRzLCBtYWtlIHRoaXMgbW9yZSBleHBsaWNpdC4gV2UgdXNlZCB0byBub3QgY2xlYXIgdGhlIGZsdXNoCi0JICBmbGFnIGJ1dCByZW1vdmUgdGhlIGV2ZW50cyBhbmQgdGhlbiByZXR1cm4gYW4gZXJyb3IgYmVjYXVzZSB0aGUgZmx1c2hpbmcKLQkgIGZsYWcgd2FzIHNldC4gTm93IGp1c3Qgc2ltcGx5IHJlZnVzZSB0aGUgZXZlbnQgd2l0aG91dCBkb2luZyBhbnl0aGluZy4KLQkgIE9uIHNyY3BhZHMsIGNoZWNrIHRoYXQgd2UgYXJlIHRyeWluZyB0byBwdXNoIGEgZmx1c2gtc3RvcCBldmVudCBhbmQKLQkgIHJlZnVzZSBpdC4gV2Ugd291bGQgYWxsb3cgdGhpcyBhbmQgbWFyayB0aGUgc3JjcGFkIGFzIG5vbi1mbHVzaGluZwotCSAgYW55bW9yZS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzUzNTcKLQotMjAxNC0wOC0yNyAxNzowNjo1NyArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dC1zZWxlY3RvcjogU2VuZCBhbGwgZXZlbnRzIHRvIGFjdGl2ZSBzcmMgcGFkIGFuZCBFT1MgdG8gYWxsIHNyYyBwYWRzCi0JICBGaXhlcyB0ZXN0cy9pY2xlcy9vdXRwdXQtc2VsZWN0b3ItdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTgxMQotCi0yMDE0LTA4LTI4IDE3OjI0OjU2ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBtYW51YWw6IGZpeCB0eXBvIGluIGFkdmFuY2VkLWRhdGFhY2Nlc3MueG1sCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1NjA5Ci0KLTIwMTQtMDgtMjYgMjA6MTQ6NDAgKzAyMDAgIEFybmF1ZCBWcmFjIDxhdnJhY0BmcmVlYm94LmZyPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGRvIG5vdCB0b3VjaCBtZW1vcnkgdGFnIGZsYWcgd2hlbiBjb3B5aW5nIGJ1ZmZlciBmbGFncwotCSAgVGhlIHRhZyBtZW1vcnkgZmxhZyB3aWxsIGJlIHNldCBsYXRlciBpZiB0aGUgbWVtb3J5IGlzIGFsc28gY29waWVkLiBUaGlzCi0JICBwYXRjaCBhdm9pZHMgYnVmZmVycyBiZWluZyBmcmVlZCBuZWVkbGVzc2x5IGluIGJ1ZmZlcnBvb2xzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNTU3NAotCi0yMDE0LTA3LTE1IDE2OjA2OjQ5ICswMjAwICBMaW51cyBTdmVuc3NvbiA8bGludXNwLnN2ZW5zc29uQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBnc3RfYnVzX2FkZF93YXRjaCgpIGNhbiByZXR1cm4gMCBvbiBlcnJvcgotCSAgRml4ZXM6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzUxOTUKLQotMjAxNC0wOC0yNSAxMzo0NDozMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBoYW5kbGUgc3RyZWFtaGVhZGVycyBieSBwcmVwZW5kaW5nIHRoZW0gdG8gdGhlIHN0cmVhbQotCSAgQWRkIGEgZmlyc3RfYnVmZmVyIGJvb2xlYW4gc3RhdGUgZmxhZyB0byBoYXZlIGJhc2VwYXJzZSBkbyBhY3Rpb25zCi0JICBiZWZvcmUgcHVzaGluZyBkYXRhLiBUaGlzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIGNhcHMgZm9yIHN0cmVhbWhlYWRlcgotCSAgYnVmZmVycyB0aGF0IGFyZSBwcmVwZW5kZWQgdG8gdGhlIHN0cmVhbSwgYnV0IG9ubHkgaWYgdGhlIGZpcnN0IGJ1ZmZlcgotCSAgaXNuJ3QgYWxyZWFkeSBtYXJrZWQgd2l0aCB0aGUgX0hFQURFUiBmbGFnLiBJbiB0aGlzIGNhc2UsIGl0IGlzIGFzc3VtZWQKLQkgIHRoYXQgdGhlIF9IRUFERVIgbWFya2VkIGJ1ZmZlciBpcyB0aGUgc2FtZSBhcyB0aGUgc3RyZWFtaGVhZGVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNTA3MAotCi0yMDE0LTA4LTI3IDExOjAxOjAxICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNvbmNhdC5jOgotCSAgY29uY2F0OiBBbGxvdyBzZWVraW5nIG9uIHRoZSBjdXJyZW50bHkgcGxheWluZyBzdHJlYW0KLQkgIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBzdHJlYW0gdGltZSByZXBvcnRpbmcuCi0KLTIwMTQtMDgtMjMgMTI6MjQ6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogYWRkIGctaSAndHJhbnNmZXIgZnVsbCcgYW5ub3RhdGlvbnMgdG8gY2hhaW4gYW5kIGNoYWluX2xpc3QgZnVuY3Rpb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1MjEwCi0KLTIwMTQtMDgtMjIgMTA6MzI6MzggKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGFubm90YXRlIEdzdFBhZEV2ZW50RnVuY3Rpb24gZXZlbnQgd2l0aCAndHJhbnNmZXIgZnVsbCcKLQkgIFRoZSBjYWxsYmFjayBpcyBzdXBwb3NlZCB0byB0YWtlIG93bmVyc2hpcCBvZiB0aGUgZXZlbnQgc28KLQkgIGJlc3QgdG8gYmUgZXhwbGljaXQgYWJvdXQgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1MjEwCi0KLTIwMTQtMDgtMjAgMTI6NTU6NTEgKzAyMDAgIExpbnVzIFN2ZW5zc29uIDxsaW51c3NuQGF4aXMuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgotCSAgdGVzdHM6IGFkZCB0ZXN0IHRoYXQgdHJpZ2dlcnMgZGVhZGxvY2sgaW4gc3RhdGUgY2hhbmdlIG9mIHF1ZXVlCi0JICBXaGVuIHJlY2VpdmluZyBGTEFTSF9TVE9QIGluIGEgc3RhdGUgdHJhbnNpdGlvbiB0byBSRUFEWSwgYSBxdWV1ZQotCSAgZWxlbWVudCBjYW4gZW5kIHVwIHdpdGggYW4gYWN0aXZlIHRhc2sgdGhhdCB3aWxsIG5ldmVyIGVuZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ2ODgKLQotMjAxNC0wOC0yMSAxNDowMjoxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IGZpeCByYWNlIHdoZW4gZmx1c2gtc3RvcCBldmVudCBjb21lcyBpbiB3aGlsc3Qgc2h1dHRpbmcgZG93bgotCSAgRG9uJ3QgcmUtc3RhcnQgdGhlIHF1ZXVlIHB1c2ggdGFzayBvbiB0aGUgc291cmNlIHBhZCB3aGVuIGEKLQkgIGZsdXNoLXN0b3AgZXZlbnQgY29tZXMgaW4gYW5kIHdlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIHNodXR0aW5nCi0JICBkb3duLCBvdGhlcndpc2UgdGhhdCB0YXNrIHdpbGwgbmV2ZXIgYmUgc3RvcHBlZCBhZ2Fpbi4KLQkgIFdoZW4gdGhlIGVsZW1lbnQgaXMgc2V0IHRvIFJFQURZIHN0YXRlLCB0aGUgcGFkcyBnZXQgZGUtYWN0aXZhdGVkLgotCSAgVGhlIHNvdXJjZSBwYWQgZ2V0cyBkZWFjdGl2YXRlZCBiZWZvcmUgdGhlIHF1ZXVlJ3Mgb3duIGFjdGl2YXRlX21vZGUKLQkgIGZ1bmN0aW9uIG9uIHRoZSBzb3VyY2UgcGFkcyBnZXRzIGNhbGxlZCAod2hpY2ggd2lsbCBzdG9wIHRoZSB0aHJlYWQpLAotCSAgc28gY2hlY2tpbmcgd2hldGhlciB0aGUgcGFkIGlzIGFjdGl2ZSBiZWZvcmUgcmUtc3RhcnRpbmcgdGhlIHRhc2sgb24KLQkgIHJlY2VpdmluZyBmbHVzaC1zdG9wIHNob3VsZCBiZSBmaW5lLiBUaGUgcHJvYmxlbSB3b3VsZCBoYXBwZW4gd2hlbiB0aGUKLQkgIGZsdXNoLXN0b3AgaGFuZGxlciB3YXMgY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIHF1ZXVlJ3MgYWN0aXZhdGUgbW9kZQotCSAgZnVuY3Rpb24gaGFkIHN0b3BwZWQgdGhlIHRhc2suCi0JICBTcG90dGVkIGFuZCBkZWJ1Z2dlZCBieSBMaW51cyBTdmVuc3NvbiA8bGludXguc3ZlbnNzb25AYXhpcy5jb20+Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0Njg4Ci0KLTIwMTQtMDgtMDYgMTQ6MDE6MDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgotCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBieXRlcmVhZGVyOiBhZGQgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlcigpIGFuZCBfZ2V0X3N1Yl9yZWFkZXIoKQotCSAgQWRkcyBBUEkgdG8gZ2V0IG9yIHBlZWsgYSBzdWItcmVhZGVyIG9mIGEgY2VydGFpbiBzaXplIGZyb20KLQkgIGEgZ2l2ZW4gYnl0ZSByZWFkZXIuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcGFyc2luZyBuZXN0ZWQgY2h1bmtzLAotCSAgb25lIGNhbiBlYXNpbHkgZ2V0IGEgYnl0ZSByZWFkZXIgZm9yIGEgc3ViLWNodW5rIGFuZCBtYWtlCi0JICBzdXJlIG9uZSBuZXZlciByZWFkcyBiZXlvbmQgdGhlIHN1Yi1jaHVuayBib3VuZGFyeS4KLQkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlcigpCi0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlcigpCi0KLTIwMTQtMDctMjUgMTY6Mzk6NDAgKzAyMDAgIEF1csOpbGllbiBaYW5lbGxpIDxhdXJlbGllbi56YW5lbGxpQHBhcnJvdC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgZG9jczogbWFrZSBleHBsaWNpdCB0aGF0IHRoZSBjYXBzIHBhc3NlZCB0byBnc3RfYmFzZV9zcmNfc2V0X2NhcHMoKSBhcmUgJ3RyYW5mZXIgbm9uZScKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM3NDEKLQotMjAxNC0wOC0xNCAxODo1Mzo0MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IGFsd2F5cyBwcm94eSBjYXBzIHF1ZXJ5Ci0JICBPdGhlcndpc2UgaXQgd291bGQgb25seSBiZSBwcm94aWVkIGZvciB0aGUgYWN0aXZlIHBhZCB3aGljaCBjYW4gbGVhZAotCSAgdXBzdHJlYW0gdG8gdXNlIGFuIGluY29tcGF0aWJsZSBjYXBzIGZvciB0aGUgZG93bnN0cmVhbSBlbGVtZW50LgotCSAgRXZlbiBpZiBhIHJlY29uZmlndXJlIGV2ZW50IGlzIHNlbnQgdXBzdHJlYW0gd2hlbiB0aGUgcGFkIGlzIGFjdGl2YXRlZCwgdGhpcwotCSAgd2lsbCBzYXZlIHRoZSBjYXBzIHJlY29uZmlndXJhdGlvbiBpZiBpdCBpcyBhbHJlYWR5IHVzaW5nIGFuIGFjY2VwdGFibGUgY2Fwcy4KLQotMjAxNC0wOC0xNCAxNDozNzo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkgIGJhc2U6IGFuZCBmaXggYnVpbGQgd2l0aCBuZXcgZy1pIGFnYWluCi0KLTIwMTQtMDgtMTQgMTQ6MjU6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6Ci0JICBiYXNlOiByZW1vdmUgZy1pIGFubm90YXRpb24gdGhhdCBtYWtlcyBvbGRlciBnLWlyLXNjYW5uZXIgY3Jhc2gKLQkgIEp1c3QgcmVtb3ZlIG9uZSBza2lwIGFubm90YXRpb24gdGhhdCBjYXVzZXMgdGhpczoKLQkgICoqIChnLWlyLWNvbXBpbGVyOjEyNDU4KTogRVJST1IgKio6IENhdWdodCBOVUxMIG5vZGUsIHBhcmVudD1lbXB0eQotCSAgd2l0aCBvbGRlciBnLWkgdmVyc2lvbnMgc3VjaCBhcyAxLjMyLjEuCi0KLTIwMTQtMDgtMTMgMTQ6MTI6MDAgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogZGVzdHJveSBzaWduYWwgd2F0Y2ggZnJvbSB0aGUgY29udGV4dCBpdCB3YXMgbWFwcGVkIHRvCi0JICBEb24ndCByZWx5IG9uIGdfc291cmNlX3JlbW92ZSgpIGJlY2F1c2UgaXQgb3BlcmF0ZXMgb24gdGhlIG1haW4KLQkgIGNvbnRleHQuIElmIGEgc2lnbmFsIHdhdGNoIHdhcyBhZGRlZCB0byBhIG5ldyB0aHJlYWQtZGVmYXVsdCBjb250ZXh0Ci0JICBnX3NvdXJjZV9yZW1vdmUoKSB3b3VsZCBoYXZlIG5vIGVmZmVjdC4gU28gc2ltcGx5IHVzZQotCSAgZ19zb3VyY2VfZGVzdHJveSgpIHRvIGF2b2lkIHRoaXMgcHJvYmxlbS4KLQkgIEFkZGl0aW9uYWxseSB0aGUgc291cmNlX2lkIHdhcyByZW1vdmVkIGZyb20gR3N0QnVzUHJpdmF0ZSBiZWNhdXNlIGl0Ci0JICB3YXMgcmVkdW5kYW50IHdpdGggdGhlIHNpZ25hbCB3YXRjaCBHU291cmNlIGFsc28gc3RvcmVkIGluIHRoYXQKLQkgIHN0cnVjdHVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ3MTYKLQotMjAxNC0wOC0wNyAxMjoxODowNCArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IE5vdCBwb3N0IEJVRkZFUklORyBtZXNzYWdlIGlmIG9uZSBvZiB0aGUgc2luZ2xlcXVldWUgZG9lc24ndCBuZWVkIGl0Ci0JICBJbWFnaW5lIHRoZSBmb2xsb3dpbmcgJ3BpcGVsaW5lJwotCSAgLS0tLS0tLS0tLS0tLS0KLQkgIHAxL3wgJ2Z1bGxxdWV1ZScgIHwtLS0gJ2xhZ2d5JyBkb3duc3RyZWFtCi0JICAtLS0tLS0tLS0gIC8gfCAgICAgICAgICAgICAgfAotCSAgLXwgZGVtdXhlciB8ICAgfCBtdWx0aXF1ZXVlICAgfAotCSAgLS0tLS0tLS0tICBcIHwgICAgICAgICAgICAgIHwKLQkgIHAyXHwgJ2VtcHR5cXVldWUnIHwtLS0gJ2Zhc3QnIGRvd25zdHJlYW0KLQkgIC0tLS0tLS0tLS0tLS0tCi0JICBJbiB0aGUgY2FzZSBkb3duc3RyZWFtIG9mIG9uZSBzaW5nbGUgcXVldWUgKGZ1bGxxdWV1ZSkgaGFzIChhIGxvdCBvZikgbGF0ZW5jeQotCSAgKGZvciBleGFtcGxlIGZvciByZXZlcnNlIHBsYXliYWNrIHdpdGggdmlkZW8pLCB3ZSBjYW4gZW5kIHVwIGhhdmluZyB0aGUgb3RoZXIKLQkgIFNpbmdsZVF1ZXVlIChlbXB0eXF1ZXVlKSBlbXB0aWVkLCBiZWZvcmUgdGhhdCBmdWxscXVldWUgZ2V0cwotCSAgdW5ibG9ja2VkLiBJbiB0aGUgbWVhbnRpbWUsIHRoZSBkZW11eGVyIHRyaWVzIHRvIHB1c2ggb24gZnVsbHF1ZXVlLCBhbmQKLQkgIGlzIGJsb2NraW5nIHRoZXJlLgotCSAgSW4gdGhhdCBjYXNlIHRoZSBjdXJyZW50IGNvZGUgd2lsbCBwb3N0IGEgQlVGRkVSSU5HIG1lc3NhZ2Ugb24gdGhlIGJ1cyB3aGVuCi0JICBlbXB0eXF1ZXVlIGdldHMgZW1wdGllZCwgdGhhdCBsZWFkcyB0byB0aGUgYXBwbGljYXRpb24gc2V0dGluZyB0aGUgcGlwZWxpbmUgc3RhdGUgdG8KLQkgIFBBVVNFRC4gU28gbm93IHdlIGVuZCB1cCBpbiBhIHNpdHVhdGlvbiB3aGVyZSAnbGFnZ3kgZG93bnN0cmVhbScgaXMKLQkgIHByZXJvbGxlZCBhbmQgd2lsbCBub3QgdW5ibG9jayBhbnltb3JlIGJlY2F1c2UgdGhlIHBpcGVsaW5lIGlzIHNldCB0bwotCSAgUEFVU0VELCB0aGUgZnVsbGVxdWV1ZSBkb2VzIG5vdCBoYXZlIGEgY2hhbmNlIHRvIGJlIGVtcHRpZWQgYW5kCi0JICB0aGUgZW1wdHlxdWV1ZSBjYW4gbm90IGdldCBmaWxsZWQgYW55bW9yZSBzbyBubyBtb3JlIEJVRkVSUklORyBtZXNzYWdlCi0JICB3aWxsIGJlIHBvc3RlZCBhbmQgdGhlIHBpcGVsaW5lIGlzIHN0dWNrZWQgaW4gUEFVU0VEIGZvciB0aGUgZXRlcm5pdHkuCi0JICBNYWtpbmcgc3VyZSB0aGF0IHdlIGRvIG5vdCB0cnkgdG8gImJ1ZmZlciIgaWYgb25lIG9mIHRoZSBzaW5nbGUgcXVldWUKLQkgIGRvZXMgbm90IG5lZWQgYnVmZmVyaW5nLCBwcmV2ZW50cyB0aGlzIHNpdHV0YXRpb24gZnJvbSBoYXBwZW5pbmcgdGhvdWdoIGl0IGxldHMgdGhlCi0JICBvcG9ydHVuaXR5IGZvciBidWZmZXJpbmcgaW4gYWxsIG90aGVyIGNhc2VzLgotCSAgVGhhdCBpbXBsZW1lbnRzIGEgbmV3IGxvZ2ljIHdoZXJlIHdlIG5lZWQgYWxsIHNpbmdsZXF1ZXVlIHRvIG5lZWQKLQkgIGJ1ZmZlcmluZyBmb3IgdGhlIG11bHRpcXVldWUgdG8gYWN0dWFsbHkgc3RhdGUgYnVmZmVyaW5nIGlzIG5lZWRlZCwKLQkgIHRha2luZyB0aGUgbWF4aW11bSBidWZmZXJpbmcgb2YgdGhlIHNpbmdsZSBxdWV1ZSBhcyB0aGUgcmVmZXJlbmNlIHBvaW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNDQxMgotCi0yMDE0LTA4LTEzIDEzOjAxOjIzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IE9ubHkgaGFuZGxlIGZsb3cgcmV0dXJucyA8IEVPUyBhcyBlcnJvcnMsIG5vdCBlLmcuIGZsdXNoaW5nCi0KLTIwMTQtMDgtMTMgMTI6NDA6MzcgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogVXNlIGFsbG93LW5vbmUgaW5zdGVhZCBvZiBudWxsYWJsZSB1bnRpbCB3ZSBkZXBlbmQgb24gYSBuZXcgZW5vdWdoIEdJIHZlcnNpb24KLQotMjAxNC0wOC0xMyAxMjozOTo0NyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBnc3RfYmluX25ldygpIGNhbiBhY2NlcHQgTlVMTCBhcyBuYW1lCi0KLTIwMTQtMDgtMTMgMTI6Mzc6MDggKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBDbGFyaWZ5IGRvY3MgYWJvdXQgZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKCkgYW5kIHJlbW92ZSBkZXByZWNhdGlvbiBwYXJ0Ci0JICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWFsbHkgcGFkIG9yIHNsb3cgZm9yIHRoZSBjb21tb24gY2FzZSBvZiByZXF1ZXN0aW5nIGEKLQkgIHBhZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZS4gSXQgaXMgb25seSBzbG93ZXIgaWYgeW91IHRvIG5hbWUgeW91ciBwYWRzCi0JICBkaXJlY3RseSBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIGVsZW1lbnQgaGFuZGxlIGl0LgotCSAgQWxzbyB0aGVyZSdzIG5vIHJlYXNvbiB0byBkZXByZWNhdGUgaXQgaW4gZmF2b3Igb2YgYSBtb3JlIGNvbXBsaWNhdGVkIGZ1bmN0aW9uCi0JICBmb3IgdGhlIGNvbW1vbiBjYXNlLgotCi0yMDE0LTA4LTEzIDEyOjIwOjUxICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBQb3N0IGVycm9ycyBpZiB3ZSByZWNlaXZlIEVPUyBhZnRlciBkb3duc3RyZWFtIHJlcG9ydGVkIGFuIGVycm9yCi0JICBUaGVyZSB3aWxsIGJlIG5vIGZ1cnRoZXIgZGF0YSBmbG93IHRoYXQgd291bGQgYWxsb3cgdXMgdG8gcHJvcGFnYXRlIHRoZQotCSAgZXJyb3IgdXBzdHJlYW0sIGNhdXNpbmcgbm9ib2R5IGF0IGFsbCB0byBwb3N0IGFuIGVycm9yIG1lc3NhZ2UuCi0KLTIwMTQtMDgtMTMgMTI6MTU6MDMgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBQb3N0IGVycm9ycyB3aGVuIHJlY2VpdmluZyBFT1MgYWZ0ZXIgZG93bnN0cmVhbSByZXR1cm5lZCBhbiBlcnJvcgotCSAgVGhlcmUgbWlnaHQgYmUgbm8gZnVydGhlciBkYXRhIGZsb3cgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byBwcm9wYWdhdGUgdGhlCi0JICBlcnJvciB1cHN0cmVhbSwgY2F1c2luZyBub2JvZHkgdG8gcG9zdCBhbiBlcnJvciBhdCBhbGwuCi0KLTIwMTQtMDgtMTMgMTI6MTA6MzkgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogUG9zdCBlcnJvcnMgb3Vyc2VsdmVzIGlmIHRoZXkgYXJlIHJlY2VpdmVkIGFmdGVyIEVPUwotCSAgQWZ0ZXIgRU9TIHRoZXJlIHdpbGwgYmUgbm8gZnVydGhlciBidWZmZXIgd2hpY2ggY291bGQgcHJvcGFnYXRlIHRoZQotCSAgZXJyb3IgdXBzdHJlYW0sIHNvIG5vdGhpbmcgaXMgZ29pbmcgdG8gcG9zdCBhbiBlcnJvciBtZXNzYWdlIGFuZAotCSAgdGhlIHBpcGVsaW5lIGp1c3QgaWRsZXMgYXJvdW5kLgotCi0yMDE0LTA4LTEyIDIwOjAzOjA2ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGFjY29zdGVkLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZG9jczogVHJpdmlhbCBwYWQgZG9jdW1lbnRhdGlvbiBmaXgKLQkgIFByZXN1bWFibHkgYSBjb3B5LXBhc3RvLgotCi0yMDE0LTA4LTA4IDA5OjU0OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jb25jYXQuYzoKLQkgIGNvbmNhdDogQWRkIHVuaXQgdGVzdHMgZm9yIGNvbmNhdCBlbGVtZW50Ci0KLTIwMTQtMDgtMDggMDk6MTM6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNvbmNhdC5jOgotCSAgY29uY2F0OiBBZGQgZG9jdW1lbnRhdGlvbiBhbmQgaW50ZWdyYXRlIGludG8gZG9jdW1lbnRhdGlvbiBidWlsZAotCi0yMDE0LTA4LTA3IDE0OjQyOjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rjb25jYXQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y29uY2F0Lmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JICBjb25jYXQ6IEFkZCBuZXcgZWxlbWVudCB0aGF0IGNvbmNhdGVuYXRlcyBtdWx0aXBsZSBzdHJlYW1zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0NDcwCi0KLTIwMTQtMDgtMDkgMTA6NTc6NTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgIHRlc3RzOiBjYXBzOiBhZGQgY2hlY2sgZm9yIGNhcHMgd2l0aCBmZWF0dXJlcyBpbnRlcnNlY3Rpb24KLQkgIENoZWNrcyB0aGF0IGEgY2FwcyB3aXRob3V0IGZlYXR1cmVzIGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGgKLQkgIG9uZSB0aGF0IGhhcyBmZWF0dXJlcwotCi0yMDE0LTA4LTA3IDE0OjU0OjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvdGV4dC1jb2xvci1leGFtcGxlLmM6Ci0JICBleGFtcGxlczogY29udHJvbGxlcjogZml4IHR5cG8gaW4gY29tbWVudHMKLQotMjAxNC0wOC0wNiAxMzo1ODoyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6Ci0JICBieXRlcmVhZGVyOiB1c2UgdW5jaGVja2VkIGlubGluZSB2YXJpYW50IGZvciBnZXRfcmVtYWluaW5nIGluIG1vcmUgcGxhY2VzCi0JICBXZSd2ZSBhbHJlYWR5IGRvbmUgdGhlIGdfcmV0dXJuXypfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwpCi0JICBkYW5jZSBpbiB0aG9zZSBwbGFjZXMsIHNvIG5vIG5lZWQgdG8gZG8gaXQgYWdhaW4uCi0KLTIwMTQtMDgtMDYgMTQ6NDM6MDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IEdob3N0cGFkcyBjYW4gYmUgcmVxdWVzdCBwYWRzIHRvbyBidXQgY2hlY2sgaWYgdGhlIHBhZCBoYXMgYSB0ZW1wbGF0ZQotCSAgT3RoZXJ3aXNlIHdlIGRlcmVmZXJlbmNlIE5VTEwgaW4gc29tZSBjYXNlcyBhbmQgY3Jhc2guCi0KLTIwMTQtMDgtMDYgMTI6MzQ6NDIgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtcHJvZ3JhbXMueG1sOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSogdGVzdHMvZXhhbXBsZXMvbGF1bmNoL21wM3BhcnNlbGF1bmNoLmM6Ci0JICB0ZXN0czogQWRkIG1pc3NpbmcgdW5yZWZzIG9mIG9iamVjdHMgYWZ0ZXIgdXNlCi0JICBVbnJlZmZpbmcgdGhlIG9iamVjdHMgcmV0dXJuZWQgYnkgZ3N0X2Jpbl9nZXRfYnlfbmFtZSgpIGFuZAotCSAgZ3N0X3BpcGVsaW5lX2dldF91c2UoKSB3ZXJlIG1pc3NpbmcgaW4gc2V2ZXJhbCB0ZXN0cywgc28gYWRkIHRoZXNlLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNDM0NQotCi0yMDE0LTA4LTA2IDEyOjU1OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBGaXggdW5pdGl0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nCi0KLTIwMTQtMDctMTMgMTU6MzE6MDggKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JICB0ZXN0czogQWRkIHRlc3QgdmVyaWZ5aW5nIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKCkKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMxMTkKLQotMjAxNC0wNy0xMyAxNToyODozMiArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBVbnJlZi9yZWxlYXNlIHBhZHMgaW4gZXJyb3IgY2FzZXMgd2hlbiBsaW5raW5nIHBhZHMKLQkgIFByZXZpb3VzbHkgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwoKSBmb3Jnb3QgdG8gdW5yZWZlcmVuY2Ugb3IgcmVsZWFzZQotCSAgcmVxdWVzdCBwYWRzIGluIHNldmVyYWwgZXJyb3IgY2FzZXMuIEFsc28gY29tbWVudHMgd2VyZSBhZGRlZCBtZW50aW9uaW5nCi0JICB3aHkgcmVsZWFzaW5nIGlzIG5vdCBuZWNlc3NhcnkgaW4gc29tZSBwbGFjZXMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzMTE5Ci0KLTIwMTQtMDgtMDEgMTc6Mjc6MzkgLTAzMDAgIFRpYWdvIENlc2FyIEthdGNpcGlzIDx0aWFnby5rYXRjaXBpc0BkaWdpdHJvLmNvbS5icj4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGdzdGNoZWNrOiBhZGQgZG9jcyBmb3IgZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MTQyCi0KLTIwMTQtMDctMzEgMTg6MzI6MDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbW1vbjoKLQkgIE1ha2VmaWxlOiBBZGQgdXNhZ2Ugb2YgYnVpbGQtY2hlY2tzIHN0ZXAKLQkgIEFsbG93cyBidWlsZGluZyBjaGVja3Mgd2l0aG91dCBydW5uaW5nIHRoZW0KLQotMjAxNC0wNy0zMCAxNTo0NjoyMiArMDMwMCAgTW9oYW1tZWQgU2FtZWVyIDxtc2FtZWVyQGZvb2xhYi5vcmc+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBBZGQgbWlzc2luZyBlcnJvciBjaGVja2luZyB0byBkZWZhdWx0X2FsbG9jX2J1ZmZlcigpCi0JICBkZWZhdWx0X2FsbG9jX2J1ZmZlcigpIGNhbGxzIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKCkgYnV0IGRvZXMgbm90IGNoZWNrIGZvcgotCSAgZmFpbGVkIGFsbG9jYXRpb24uCi0JICBUaGlzIHBhdGNoIG1ha2VzIGRlZmF1bHRfYWxsb2NfYnVmZmVyKCkgcmV0dXJuIGFuIGVycm9yIChHU1RfRkxPV19FUlJPUikgaWYKLQkgIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzk3NAotCi0yMDE0LTA3LTI5IDE0OjIxOjMzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAb3NnLnNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogYXZvaWQgdXNpbmcgaW5maW5pdGUgYnVmZmVycyBsaW1pdCBpZiBmaW5pdGUgaXMgcmVxdWVzdGVkCi0JICBJZiB0aGUgY3VycmVudCBtYXgtYnVmZmVycyBsaW1pdCBpdCBpbmZpbml0ZSBhbmQgYSBmaW5pdGUgdmFsdWUgaXMKLQkgIHJlcXVlc3RlZCwgc3dpdGNoIHRvIHRoZSBNQVggKHJlcXVlc3RlZCwgY3VycmVudC12YWx1ZSkgdG8gc2V0IHNvbWUKLQkgIGxpbWl0IGJ1dCBub3QgYmVsb3cgd2hhdCB3ZSBrbm93IHRoYXQgd2UndmUgbmVlZGVkIHNvIGZhci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM2MzcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM4MzcKLQotMjAxNC0wNy0yNCAyMjowMjo1OCArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2U6IFVucmVmIHJlZmVyZW5jZSB0byBlbmNsb3NpbmcgYmlucwotCSAgUHJldmlvdXNseSBhbGwgcmVmZXJlbmNlIHRvIGVuY2xvc2luZyBiaW5zIG9mIGFuIGVsZW1lbnQgd2VyZSBsZWFrZWQKLQkgIHdoZW4gZG9pbmcgZGVsYXlpbmcgc2V0dGluZyBhIHByb3BlcnR5LgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzY5NwotCi0yMDE0LTA3LTI3IDAyOjM3OjA4ICswMDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogU3VwcG9ydCBTSUdJTlQgKEN0cmwrQykgb24gVzMyCi0JICBXMzIgaGFzIG5vIFNJR0lOVCwgYnV0IGl0IGRvZXMgaGF2ZSBTZXRDb25zb2xlQ3RybEhhbmRsZXIoKSwgd2hpY2ggc2V0cyB1cAotCSAgYSBoYW5kbGVyIGZvciBDdHJsK0MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzODE0Ci0KLTIwMTQtMDctMjcgMDM6MDY6MTYgKzAwMDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9sbDogUHJldmVudCBmYWxzZS1uZWdhdGl2ZSBmcm9tIFdBS0VfRVZFTlQoKSBvbiBXMzIKLQkgIFNldEV2ZW50KCkgc2VlbXMgdG8gbm90IGNhbGwgU2V0TGFzdEVycm9yKDApIGludGVybmFsbHksIHNvIGNoZWNraW5nIGxhc3QKLQkgIGVycm9yIGFmdGVyIGNhbGxpbmcgU2V0RXZlbnQoKSBtYXkgcmV0dXJuIHRoZSBlcnJvciBmcm9tIGFuIGVhcmxpZXIgVzMyIEFQSQotCSAgY2FsbC4gRml4IHRoaXMgYnkgY2FsbGluZyBTZXRsYXN0RXJyb3IoMCkgZXhwbGljaXRseS4KLQkgIEN1cnJlbnRseSBXQUtFX0VWRU5UKCkgY29kZSBpcyBjcmFtcGVkIGludG8gYSBtYWNybyBhbmQgZG9lc24ndCBsb29rIHRvIGJlCi0JICBlbnRpcmVseSBjb3JyZWN0LiBQYXJ0aWN1bGFybHksIGl0IGRvZXMgbm90IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YKLQkgIFNldEV2ZW50KCksIG9ubHkgdGhlIHRocmVhZC1sb2NhbCBXMzIgZXJyb3IgdmFsdWUuIEl0IGlzIGxpa2VseSB0aGF0IFNldEV2ZW50KCkKLQkgIGFjdHVhbGx5IGp1c3QgcmV0dXJucyBub24temVybyB2YWx1ZSwgYnV0IHRoZSBjb2RlIG1pc3Rha2VubHkgdGhpbmtzIHRoYXQgdGhlCi0JICBjYWxsIGhhcyBmYWlsZWQsIGJlY2F1c2UgR2V0TGFzdEVycm9yKCkgc2VlbXMgdG8gaW5kaWNhdGUgc28uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzODA1Ci0KLTIwMTQtMDctMjYgMTQ6NDI6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3QuaDoKLQkgIGdzdDogaW5jbHVkZSBhdG9taWNxdWV1ZS5oIGFnYWluIGluIGdzdC5oCi0JICBJdCdzIGEgcHVibGljIGhlYWRlciBvZiBnc3RyZWFtZXIgY29yZSwgc28gI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQkgIHNob3VsZCBtYWtlIHRoZSBBUEkgYXZhaWxhYmxlLgotCi0yMDE0LTA3LTI1IDExOjQ1OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmRlbGVtZW50OiByZW1vdmUgcHJvdG90eXBlIGZvciBmdW5jdGlvbiB0aGF0IG5vIGxvbmdlciBleGlzdHMKLQotMjAxNC0wNy0yNCAxNDozOToxMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQG9zZy5zaXNhLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgotCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBieXRlcmVhZGVyOiBhZGQgZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrCi0JICBBZGRzIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayBqdXN0IGxpa2UKLQkgIEdzdEFkYXB0ZXIgaGFzIGEgX3BlZWsgYW5kIG5vbiBfcGVlayB2ZXJzaW9uCi0JICBVcGdyYWRlZCB0ZXN0cyB0byBjaGVjayB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBjb3JyZWN0IGluIHRoZQotCSAgX3BlZWsgdmVyc2lvbgotCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjgzNTYKLQotMjAxNC0wNi0yNiAxNDowOToyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkgIGJ1ZmZlcmxpc3Q6IHByZS1hbGxvY2F0ZSBidWZmZXIgYXJyYXkgaW4gb25lIGdvIHdpdGggdGhlIGJ1ZmZlciBsaXN0Ci0JICBXZSBjYW4gbm93IGNyZWF0ZSBhbmQgZnJlZSBhIGJ1ZmZlciBsaXN0IHdpdGggb25lIHNsaWNlIGFsbG9jL2ZyZWUKLQkgIGNhbGwgaW4gbW9zdCBjYXNlcywgaW5zdGVhZCBvZiBvbmUgc2xpY2UgYWxsb2MvZnJlZSBmb3IgdGhlIGxpc3QsCi0JICBvbmUgc2xpY2UgYWxsb2MvZnJlZSBmb3IgdGhlIEdBcnJheSwgYW5kIG9uZSBtYWxsb2MvZnJlZSBmb3IgdGhlCi0JICBHQXJyYXkgYXJyYXkuIEluIHByYWN0aWNlIHdlIGtub3cgdGhlIG1heCBzaXplIG9mIG91ciBidWZmZXIgbGlzdAotCSAgZnJvbSB0aGUgc3RhcnQsIHNvIGNhbiBhdm9pZCByZWFsbG9jcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzIyODQKLQotMjAxNC0wNy0yMyAyMToyNzo0OCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgcHJpdmF0ZTogYWxsb3cgaW50ZXJuYWwgYWNjZXNzIHRvIHRoZSBkZWJ1ZyBiYXNlLXRpbWUKLQkgIE1vdmluZyB0aGUgZXh0ZXJuIHRvIHRoZSBoZWFkIGxldHMgdXMgYWNjZXNzIHRoaXMgZnJvbSBvdGhlciBwYXJ0cyBhcyB3ZWxsLiBUaGlzCi0JICBpcyBuZWVlZCBpbiB0aGUgdHJhY2VyIGJyYW5jaC4KLQotMjAxNC0wNy0yMyAwMDoxNToxNyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bkBhY2Nvc3RlZC5uZXQ+Ci0KLQkqIHNjcmlwdHMvZ2l0LXVwZGF0ZS5zaDoKLQkgIHNjcmlwdHM6IFVzZSBnaXQgcHVsbCAtLXJlYmFzZQotCSAgTm8gcG9pbnQgaW50cm9kdWNpbmcgcmVkdW5kYW50IG1lcmdlIGNvbW1pdHMuCi0KLTIwMTQtMDctMjEgMTI6NDE6MDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWdsaXN0LmM6Ci0JICBSZXZlcnQgInRlc3RzOiB0YWdsaXN0OiBhZGQgYmFzaWMgdGVzdCBmb3IgdGFnbGlzdHMgc2VyaWFsaXphdGlvbiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgODVkMjNkMTliN2RlNDA1NDFkNjNiMGJjNzZkOGI2NDZjMzIxYWYyNi4KLQkgIFRoZXJlIHdhcyBhbHJlYWR5IGEgZ3N0dGFnLmMgdGVzdHMgZmlsZSwgdGhpcyB0ZXN0IGhhcyBiZWVuIG1lcmdlZAotCSAgaW4gaXQgaW4gdGhlIHByZXZpb3VzIGNvbW1pdAotCi0yMDE0LTA3LTIxIDEyOjQwOjQ3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgotCSAgdGVzdHM6IHRhZzogYWRkIHRoZSBlbXB0eSB0YWdsaXN0IHNlcmlhbGl6YXRpb24gdGVzdAotCSAgQWRkcyB0aGUgdGVzdCB0byB0aGUgYXBwcm9wcmlhdGUgYW5kIGFscmVhZHkgZXhpc3RpbmcgZmlsZS4KLQotMjAxNC0wNy0xNCAxODo0Njo1NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRlc3RzOiB0YWdsaXN0OiBhZGQgYmFzaWMgdGVzdCBmb3IgdGFnbGlzdHMgc2VyaWFsaXphdGlvbgotCSAgTWFrZSBzdXJlIGl0IHdvcmtzIHdpdGggZW1wdHkgdGFnbGlzdHMKLQotMjAxNC0wNy0xNCAxODoyNTo1MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHRlc3RzOiBnc3RzdHJ1Y3R1cmU6IHNlcmlhbGl6YXRpb24gb2YgdGFnIGV2ZW50IHN0cnVjdHVyZQotCSAgQWRkcyBhIHRlc3QgdGhhdCBjaGVja3MgdGhhdCB0aGUgc2VyaWFsaXphdGlvbiBvZiBhIHRhZyBldmVudCBzdHJ1Y3R1cmUKLQkgIHdvcmtzIHdpdGhvdXQgcHJvYmxlbXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMxMzEKLQotMjAxNC0wNy0xNCAxODoyMzo0MyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IGFkZCBHc3RUYWdMaXN0IGNvbXBhcmUgZnVuY3Rpb24KLQkgIFdoZW4gc2VyaWFsaXppbmcgR3N0U3RydWN0dXJlcyBmcm9tIGV2ZW50cyBpbiBHRFAgaXQgd2lsbCBhZGQgYSB0YWdsaXN0Ci0JICBhcyBhIEdzdFN0cnVjdHVyZSBmaWVsZCwgaGF2aW5nIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGFsbG93cyBjb21wYXJpc29uIG9mCi0JICBHc3RTdHJ1Y3R1cmVzIHRvIGNoZWNrIGlmIHRoZSBzZXJpYWxpemVkL2Rlc2VyaWFsaXplZCB2ZXJzaW9uIG1hdGNoZXMgdGhlCi0JICBvcmlnaW5hbCBvbmUsIGFtb25nIG90aGVyIGNhc2VzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzEzMQotCi0yMDE0LTA3LTA5IDE1OjQ4OjEwICswMjAwICBTcmltYW50YSBQYW5kYSA8c3JpbWFudGFAYXhpcy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JICBmdW5uZWw6IEZpeCBmb3IgcmFjeSBFT1MgZXZlbnQgaGFuZGxpbmcKLQkgIFdoZW4gZW9zIGV2ZW50cyBhcmUgZm9yd2FyZGVkIHNpbXVsdGFuZW91bHkgZnJvbSB0d28gc2lua3BhZHMgb24KLQkgIGZ1bm5lbCwgaXQgZG9lc25vdCBmb3J3YXJkIHRoZSBlb3MgdG8gc291cmNlcGFkLiBUaGUgcmVhc29uIGlzCi0JICBzdGlja3kgZXZlbnRzIGFyZSBzdG9yZWQgYWZ0ZXIgdGhlIGV2ZW50IGNhbGxiYWNrcyBhcmUgcmV0dXJuZWQuCi0JICBUaGVyZWZvcmUgd2hpbGUgb25lIGlzIGFib3V0IHRvIHN0b3JlIHRoZSBzdGlja3kgZXZlbnRzIG9uIHRoZSBpdHMKLQkgIHNpbmtwYWQsIG90aGVyIHNpbmtwYWQgc3RhcnRzIGNoZWNraW5nIGZvciB0aGUgZW9zIGV2ZW50cyBvbiBhbGwgb3RoZXIKLQkgIHNpbmtwYWRzIGFuZCBhc3N1bWVzIGVvcyBpcyBub3QgcHJlc2VudCB5ZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyODUxCi0KLTIwMTQtMDctMTcgMTY6MDU6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgotCSAgcGlwZWxpbmU6IEFkZCB1bml0IHRlc3QgZm9yIHJlc2V0dGluZyBvZiB0aGUgc3RhcnQgdGltZQotCSAgQWxzbyBjaGVjayBpZiB0aGlzIHByb3Blcmx5IGFmZmVjdHMgYmFzZXNpbmsgZWxlbWVudHMgdG8gbm90Ci0JICByZXBvcnQgdGhlIG9sZCBzdGFydCB0aW1lIGJ1dCB0aGUgcmVhbCBjdXJyZW50IHBvc2l0aW9uIHdoZW4KLQkgIHNldHRpbmcgdG8gUEFVU0VEIGFnYWluLgotCi0yMDE0LTA3LTE1IDE4OjE5OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIHBpcGVsaW5lOiBSZXNldCB0aGUgc3RhcnQgdGltZSB3aGVuIGdvaW5nIGZyb20gUEFVU0VEIHRvIFJFQURZIHRvbwotCi0yMDE0LTA3LTE1IDE3OjE5OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIHBpcGVsaW5lOiBSZXNldCBzdGFydCB0aW1lIGluIFJFQURZLT5QQVVTRUQgYmVmb3JlIGNoYWluaW5nIHVwCi0JICBPdGhlcndpc2UgYmluIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgY2hpbGQgZWxlbWVudHMgd2l0aG91dAotCSAgZGlzdHJpYnV0aW5nIHRoZSBuZXcgc3RhcnQgdGltZS4KLQotMjAxNC0wNi0yOCAxNzo1ODoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50c19wcml2YXRlLmM6Ci0JICBlbGVtZW50czogaW1wcm92ZSBidWZmZXIgZmxhZ3MgdG8gc3RyaW5nIHV0aWxpdHkgZnVuY3Rpb24KLQkgIEF2b2lkIHJlbG9jYXRpb25zIGFuZCByZWZhY3RvciBzbyB0aGF0IHdlIGRvbid0IGNhbGN1bGF0ZQotCSAgdGhlIGZpeGVkIGFuZCBrbm93biBhdCBjb21waWxlIHRpbWUgbWF4aW11bSBzdHJpbmcgc2l6ZQotCSAgZXZlcnkgdGltZS4gQWxzbyBza2lwIHRoZSBtaW5pIG9iamVjdCBmbGFncyB3aGljaCB3ZSBhcmUKLQkgIG5vdCBnb2luZyB0byBwcmludCBhbnl3YXkuCi0KLTIwMTQtMDctMTkgMTg6MDQ6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMS40LjAgPT09Ci0KLTIwMTQtMDctMTkgMTY6NDY6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuNC4wCi0KLTIwMTQtMDctMTkgMTY6MjE6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNC0wNy0xOSAxMjoxNjo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vZGEucG86Ci0JKiBwby9zdi5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTQtMDctMTcgMTU6NTM6NTMgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogUmV0dXJuIEZMT1dfRkxVU0hJTkcgd2hlbiBwdXNoaW5nIGEgZnJhbWUgb24gYSBwYWQgdGhhdCBoYXMgYmVlbiBmbHVzaGVkCi0JICBXaGVuIGdvaW5nIHRvIFJFQURZLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGFyZSBzdGlsbCBwdXNpbmcgYSBmcmFtZSBidXQgdGhhdAotCSAgb3VyIHNyY3BhZCBoYXMgYWxyZWFkeSBiZWVuIHNldCB0byBmbHVzaGluZy4gSW4gdGhhdCBjYXNlIHdlIHNob3VsZCBub3QKLQkgIHBvc3QgYW55IGVycm9yIG9uIHRoZSBidXMgYnV0IGluc3RlYWQgY2xlYW5seSByZXR1cm4gRkxPV19GTFVTSElORy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMzMjAKLQotMjAxNC0wNy0xNyAwNzowNzozNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZGVsZW1lbnQ6IFByb3BhZ2F0ZSBpbnB1dCBidWZmZXIgUFRTIGFuZCBEVFMKLQkgIFRoZSBpbml0aWFsIGJ1ZmZlcnMgKHRoYXQgd2VyZSB1c2VkIGZvciB0aW1lc3RhbXBpbmcpIG1pZ2h0IGhhdmUgUFRTCi0JICBhbmQgRFRTIHNldC4gSW4gb3JkZXIgdG8gZm9yd2FyZCB0aG9zZSBwcm9wZXJseSwgZ2V0IHRoZSBpbml0aWFsCi0JICBQVFMvRFRTIGZyb20gdGhlIGFkYXB0ZXIgYW5kIHNldCB0aGVtIG9uIHRoZSByZWNvbnN0cnVjdGVkIG91dHB1dAotCSAgYnVmZmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzI5MQotCi0yMDE0LTA3LTEyIDE3OjAxOjIzICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBkZWJ1Z3V0aWxzOiBVbnJlZiBwYWQgdGVtcGxhdGUgYWZ0ZXIgdXNlCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzMTIxCi0KLTIwMTQtMDctMTQgMTg6MTA6NDUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IGluaXQgdGFnbGlzdCBndHlwZSB0byB1c2UgaXQgaW4gZ3N0dmFsdWUKLQkgIE90aGVyd2lzZSBpdCB3aWxsIGhhdmUgYSAwIHZhbHVlIGFuZCBHc3RUYWdMaXN0IHdvbid0IGJlIGZvdW5kCi0JICBmb3IgR3N0VmFsdWUgZnVuY3Rpb25zIChzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbikKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMxMzEKLQotPT09IHJlbGVhc2UgMS4zLjkxID09PQotCi0yMDE0LTA3LTExIDEwOjQ2OjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjMuOTEKLQotMjAxNC0wNy0xMSAxMDo0MToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE0LTA3LTExIDA4OjUxOjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9kYS5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNC0wNy0wNSAxODoyOToyOSArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0ZGV2aWNlLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuYzoKLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYzoKLQkqIGdzdC9nc3R0b2MuaDoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmg6Ci0JICBkb2NzOiBGaXggZG9jdW1lbnRhdGlvbiB0eXBvcyBhbmQgaW5jb25zaXN0ZW5jaWVzCi0JICAqIEdzdEdsb2JhbERldmljZU1vbml0b3Igd2FzIHJlbmFtZWQgdG8gR3N0RGV2aWNlTW9uaXRvcgotCSAgKiBFeHBhbmQgR1NUX01FU1NBR0VfREVWSUNFIHRvIHRoZSBmdWxsIGVudW0gdmFsdWUgbmFtZXMKLQkgICogQ29ycmVjdCB0aGUgaW5jb3JyZWN0IHJlZmVyZW5jZXMgdG8gdGhlIEdzdERldmljZVByb3ZpZGVyIGludGVyZmFjZXMKLQkgICogRGVzY3JpYmUgY2FwcyBhcmd1bWVudHMgZm9yIGdzdGNoZWNrIGludGVyZmFjZQotCSAgKiBBZGQgbWlzc2luZyBkb2NzIGZvciBHc3ROZXRBZGRyZXNzTWV0YSBhbmQgaXRzIGFkZCBmdW5jdGlvbgotCSAgKiBBZGQgZG9jcyBmb3IgdG9jIGhlbHBlciBtYWNyb3MKLQkgICogQXZvaWQgcmVmZXJpbmcgdG8gR3N0VmFsdWVMaXN0IHR5cGUgYXMgZG9uZSBlbHNld2hlcmUKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI3ODYKLQotMjAxNC0wNy0wNSAxNzoxMzoyMSArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IENsZWFudXAgaW50ZXJmYWNlIHJlZmVyZW5jZXMgaW4gZG9jcwotCSAgKiBEZWxldGUgcmVmZXJlbmNlcyB0byByZW1vdmVkIGludGVyZmFjZXMKLQkgICogQWRkIG1pc3NpbmcgZG9jdW1lbnRhdGlvbiBzZWN0aW9ucwotCSAgKiBGaXggZHVwbGljYXRlIGludGVyZmFjZSByZWZlcmVuY2VzIGZvciBHc3REZXZpY2UKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI3ODYKLQotMjAxNC0wNy0wOCAxMToxNzo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgZG9jczogVGhlcmUgaXMgbm8gZGVjb2RlYmluMiBhbnltb3JlLCBkb24ndCBwcmV0ZW5kIG90aGVyd2lzZQotCi0yMDE0LTA3LTA3IDE2OjE0OjMyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgZmRzcmM6IGZpeCBlcnJvciBzZXR0aW5nIHdoZW4gdXJpIGlzIGludmFsaWQKLQkgIEVsZW1lbnRzIHNob3VsZCBhbHdheXMgc2V0IHRoZSBHRXJyb3IKLQotMjAxNC0wNy0wNiAxMjoxMzowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGxpYnM6IGdzdGNoZWNrOiBjaGVjayB0aGF0IG11dGV4IGlzIGxvY2tlZCBiZWZvcmUgZ19jb25kX3dhaXQqKCkgaXMgY2FsbGVkCi0JICBTYW5pdHkgY2hlY2sgdG8gY2F0Y2ggcHJvYmxlbXMgaW4gdW5pdCB0ZXN0LgotCi0yMDE0LTA3LTA2IDEyOjEyOjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgbGliczogZ3N0Y2hlY2s6IGluaXQgYW5kIGNsZWFyIGdsb2JhbCBtdXRleCBhbmQgY29uZCB2YXJpYWJsZXMKLQotMjAxNC0wNy0wNiAxMjowOTozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBvbGwuYzoKLQkgIHRlc3RzOiBmaXggbG9ja2luZyBpbiBnc3Rwb2xsIHVuaXQgdGVzdAotCSAgVGhlIG11dGV4IG5lZWRzIHRvIGJlIGxvY2tlZCB3aGVuIGdfY29uZF93YWl0KigpIGlzCi0JICBjYWxsZWQuCi0KLTIwMTQtMDctMDUgMTY6MjQ6MTggKzAxMDAgIE1hdHRoaWV1IEJvdXJvbiA8bWF0dGhpZXUuYm91cm9uQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiBhZGQgdmlkZW8gYW5kIGJhc2UgbGlicmFyeSBwYXRocyBmcm9tIC1iYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI3NzAKLQotMjAxNC0wNy0wNCAxOTo0MDoyOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIHRvb2xzOiBzdXBwcmVzcyBHTGliIHdhcm5pbmdzIHdoZW4gZ3N0LWluc3BlY3RpbmcgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzCi0JICBHTGliIGluIGdpdCB3aWxsIHNwZXcgYSBnX3dhcm5pbmcoKSB3aGVuIGEgcHJvcGVydHkgbWFya2VkIGFzCi0JICBkZXByZWNhdGVkIHZpYSBwYXJhbSBzcGVjIGZsYWdzIGlzIGFjY2Vzc2VkLiBTdXBwcmVzcyB0aGlzIGJ5Ci0JICBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQotMjAxNC0wNy0wMyAxMDoxMTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIG1lc3NhZ2U6IFdvcmsgYXJvdW5kIGctaS9weWdvYmplY3QvZ2pzIGJ1ZyB3aXRoIH4wIGluIGVudW1zCi0JICBHU1RfTUVTU0FHRV9BTlkgd2FzIGNvbnNpZGVyZWQgYSBsb25nIGJ5IHB5Z29iamVjdCBhbmQgZ2pzLCBhbmQgdGh1cwotCSAgY291bGRuJ3QgYmUgdXNlZCBpbiBnc3RfYnVzX3BvbGwoKSBhbmQgc2ltaWxhciBBUElzIGFzIHRoZXkgZXhwZWN0IGFuCi0JICBpbnQtdHlwZWQgZW51bS4KLQkgIEp1c3QgdXNlIDB4ZmZmZmZmZmYgaW5zdGVhZCBmb3Igbm93LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjYzMwotCi0yMDE0LTA3LTAyIDA4OjQxOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgdGVzdHM6IGRvbid0IHVzZSBwb3N0LUdMaWIgMi4zMiBBUEkgaW4gYnVmZmVybGlzdCB0ZXN0Ci0JICBnX3B0cl9hcnJheV9pbnNlcnQoKSBpcyBHTGliID49IDIuNDAKLQotMjAxNC0wNy0wMSAxMjoyMjo1NiArMDIwMCAgR8O2cmFuIErDtm5zc29uIDxnb3JhbmpuQGF4aXMuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IERvbid0IHVubG9jayB3aGlsZSBpdGVyYXRpbmcgb3ZlciBhbGwgc3RpY2t5IGV2ZW50cyBmb3IgcmVtb3ZhbAotCSAgT3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBnZXR0aW5nIHRoZSBldmVudCByZW1vdmVkIGZyb20gZWxzZXdoZXJlCi0JICBhdCB0aGUgc2FtZSB0aW1lIHdoaWxlIHdlJ3JlIHVubG9ja2VkIGZvciBnX29iamVjdF9ub3RpZnkoKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI1NTYKLQotMjAxNC0wNy0wMSAxOToxNzoxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgaWRlbnRpdHk6IFByb3h5IHRoZSBhY2NlcHQtY2FwcyBxdWVyeQotCSAgV2UgYWx3YXlzIHdvcmsgaW4gcGFzc3Rocm91Z2ggbW9kZSBzbyB0aGVyZSdzIG5vIHBvaW50IGluIGRvaW5nCi0JICBzb21ldGhpbmcgbW9yZSBjbGV2ZXIgaW4gYmFzZXRyYW5zZm9ybS4gQWxzbyB0aGUgYmFzZXRyYW5zZm9ybQotCSAgY29kZSBsZWFkcyB0byBwcm9ibGVtcyB3aXRoIGluY29tcGxldGUgY2FwcyBhbmQgZG93bnN0cmVhbQotCSAgZWxlbWVudHMgdGhhdCB1c2UgR1NUX1BBRF9GTEFHX0FDQ0VQVF9JTlRFUlNFQ1QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyNTU5Ci0KLTIwMTQtMDctMDEgMTE6MjE6NTMgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogcmVzZXQgUW9TIG9uIHNlZ21lbnQgZXZlbnQKLQkgIFRoaXMgYXZvaWRzIHNwdXJpb3VzIHdhcm5pbmdzIGFib3V0IHNsb3cgbWFjaGluZSB3aGVuIHVwc3RyZWFtCi0JICBzZW5kcyBuZXcgc2VnbWVudHMgd2l0aG91dCBmbHVzaGluZy4KLQotMjAxNC0wNi0zMCAyMzozOToxOCAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBuZW1lcnNvbi5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdGRldmljZXByb3ZpZGVyLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5jOgotCSAgaW50cm9zcGVjdGlvbjogQXNzb3J0ZWQgbWlub3IgaW50cm9zcGVjdGlvbiBhbmQgZG9jdW1lbnRhdGlvbiBmaXhlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjUzNAotCi0yMDE0LTA2LTMwIDA4OjU5OjE4ICswMDAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGRldmljZW1vbml0b3IuYzoKLQkgIGRldmljZW1vbml0b3I6IFN0b3AgdXNpbmcgZ19jbGVhcl9wb2ludGVyKCkKLQkgIFdlIGRvbnQndCB3YW50IHRvIGRlcGVuZCBvbiBHTGliIDIuMzQgZm9yIG5vdy4KLQotMjAxNC0wNi0yOSAxOToxNjowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9zcGFyc2VmaWxlLmM6Ci0JICBzcGFyc2VmaWxlOiBJbml0aWFsaXplIG1lbW9yeSBpbiB1bml0IHRlc3QgdG8gbWFrZSB2YWxncmluZCBoYXBweQotCSAgV2Ugd2VyZSB3cml0aW5nIHVuaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB0aGUgZmlsZS4KLQotPT09IHJlbGVhc2UgMS4zLjkwID09PQotCi0yMDE0LTA2LTI4IDEwOjQ1OjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjMuOTAKLQotMjAxNC0wNi0yOCAxMDo0MTo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE0LTA2LTI3IDEwOjQ0OjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRldmljZS5jOgotCSAgZGV2aWNlbW9uaXRvcjogZG9uJ3QgZmFpbCB3aGVuIHN0YXJ0ZWQgd2l0aG91dCBhbnkgZmlsdGVycwotCSAgSnVzdCBzaG93IGFsbCBkZXZpY2VzIHRoZW4uCi0KLTIwMTQtMDYtMjcgMTA6NDQ6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYzoKLQkgIGRldmljZXByb3ZpZGVyZmFjdG9yeTogaGFuZGxlIE5VTEwgY2xhc3NlcyBhcmd1bWVudCBhbmQgbWF0Y2ggYW55Ci0KLTIwMTQtMDYtMjYgMjE6MDA6NDAgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGV2aWNlLmM6Ci0JICBkZXZpY2U6IEFkZCB1bml0IHRlc3RzCi0KLTIwMTQtMDYtMjYgMTc6MjI6MjUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuYzoKLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBkZXZpY2Vtb25pdG9yOiBJbXByb3ZlIGRvY3VtZW50YXRpb24KLQotMjAxNC0wNi0yNiAxNzoxMzoxMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5oOgotCSogZ3N0L2dzdGRldmljZXByb3ZpZGVyLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRldmljZW1vbml0b3I6IE1ha2UgaXQgcG9zc2libGUgdG8gYWRkIG11bHRpcGxlIGZpbHRlcnMKLQkgIEVhY2ggZmlsdGVyIHdpbGwgaW5jbHVkZSBhIEdzdENhcHMgYW5kIGEgc2V0IG9mIGNsYXNzZXMgdG8gbWF0Y2gKLQotMjAxNC0wNi0yNiAxNjozMTo1MSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdGRldmljZS5jOgotCSAgZGV2aWNlOiBBZGQgcHJlLWNvbmRpdGlvbnMKLQotMjAxNC0wNi0yNiAxNTowODo0NiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdGRldmljZW1vbml0b3IuaDoKLQkqIGdzdC9nc3RnbG9iYWxkZXZpY2Vtb25pdG9yLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEdzdERldmljZU1vbml0b3I6IFJlbmFtZSBmcm9tIEdzdEdsb2JhbERldmljZU1vbml0b3IKLQotMjAxNC0wNi0yNiAxNDoyODowOSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0ZGV2aWNlLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdGRldmljZW1vbml0b3JmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuYzoKLQkqIGdzdC9nc3RkZXZpY2Vwcm92aWRlci5oOgotCSogZ3N0L2dzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5jOgotCSogZ3N0L2dzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5oOgotCSogZ3N0L2dzdGdsb2JhbGRldmljZW1vbml0b3IuYzoKLQkqIGdzdC9nc3RnbG9iYWxkZXZpY2Vtb25pdG9yLmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5oOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgRGV2aWNlUHJvdmlkZXI6IFJlbmFtZSBmcm9tIERldmljZU1vbml0b3IKLQotMjAxNC0wNi0yNiAxOTozMTozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6Ci0JICBkYXRhcXVldWU6IEhpZGUgZnJvbSBiaW5kaW5ncwotCSAgT3RoZXIgbGFuZ3VhZ2VzIGhhdmUgdGhlaXIgb3duIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBtb3JlIGNvbnZlbmllbnQgdG8KLQkgIHVzZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzEzMDMKLQotMjAxNC0wNi0yNiAxOTozMDo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuaDoKLQkgIHF1ZXVlYXJyYXk6IEhpZGUgZnJvbSBiaW5kaW5ncwotCSAgT3RoZXIgbGFuZ3VhZ2VzIGhhdmUgdGhlaXIgb3duIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBtb3JlIGNvbnZlbmllbnQgdG8gdXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMTM1MAotCi0yMDE0LTA1LTI4IDEwOjE0OjQ1ICswMTAwICBQaGlsaXAgV2l0aG5hbGwgPHBoaWxpcC53aXRobmFsbEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiBBZGQgbWlzc2luZyAobnVsbGFibGUpIGFubm90YXRpb25zCi0JICBnc3RfbWluaV9vYmplY3RfcmVwbGFjZSgpIGNhbiB0YWtlIE5VTEwgbWluaS1vYmplY3RzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDg3MwotCi0yMDE0LTA2LTI2IDE5OjAyOjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgbWVzc2FnZTogQXBwbGljYXRpb24gYW5kIGVsZW1lbnQgbWVzc2FnZXMgc2hvdWxkIG5vdCBoYXZlIE5VTEwgc3RydWN0dXJlcwotCSAgSXQgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3IgdGhlbS4KLQotMjAxNC0wNi0xMSAxNjoxOTowMSAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBuZW1lcnNvbi5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgaW50cm9zcGVjdGlvbjogYWRkIHNvbWUgbWlzc2luZyBhbGxvdy1ub25lIGFubm90YXRpb25zIHRvIGluIHBhcmFtcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDk1NwotCi0yMDE0LTA2LTExIDE2OjA2OjE5IC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQG5lbWVyc29uLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgaW50cm9zcGVjdGlvbjogYWRkIG51bGxhYmlsaXR5IGFubm90YXRpb25zIHRvIG91dCBhbmQgaW5vdXQgcGFyYW1zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwOTU3Ci0KLTIwMTQtMDYtMTEgMTU6MjE6MzQgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AbmVtZXJzb24uY29tPgotCi0JKiBnc3QvZ3N0YWxsb2NhdG9yLmM6Ci0JKiBnc3QvZ3N0YXRvbWljcXVldWUuYzoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmM6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGRldmljZW1vbml0b3JmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGZvcm1hdC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogZ3N0L2dzdHBvbGwuYzoKLQkqIGdzdC9nc3RwcmVzZXQuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSogZ3N0L2dzdHRvYy5jOgotCSogZ3N0L2dzdHRvY3NldHRlci5jOgotCSogZ3N0L2dzdHR5cGVmaW5kLmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0dXJpLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgaW50cm9zcGVjdGlvbjogYWRkIG1pc3NpbmcgKG51bGxhYmxlKSBhbm5vdGF0aW9ucyB0byByZXR1cm4gdmFsdWVzCi0JICBTdXBwb3J0IGZvciAobnVsbGFibGUpIHdhcyBhZGRlZCB0byBHLUkgYXQgdGhlIHNhbWUgdGltZSBhcyBudWxsYWJsZQotCSAgcmV0dXJuIHZhbHVlcy4gIFByZXZpb3VzIHZlcnNpb25zIG9mIEctSSB3aWxsIG5vdCBtYXJrIHJldHVybiB2YWx1ZXMgYXMKLQkgIG51bGxhYmxlLCBldmVuIHdoZW4gYW4gKGFsbG93LW5vbmUpIGFubm90YXRpb24gaXMgcHJlc2VudCwgc28gaXQgaXMKLQkgIG5vdCBuZWNlc3NhcnkgdG8gYWRkIChhbGxvdy1ub25lKSBhbm5vdGF0aW9ucyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCi0JICBvbGRlciB2ZXJzaW9ucyBvZiBHLUkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwOTU3Ci0KLTIwMTQtMDYtMTEgMTc6MTU6MzkgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AbmVtZXJzb24uY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgIGJhc2U6IGFzc29ydGVkIGludHJvc3BlY3Rpb24gZml4ZXMgYW5kIGFkZGl0aW9ucwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMTU0MgotCi0yMDE0LTA2LTExIDE3OjEyOjIwIC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQG5lbWVyc29uLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGluZGV4LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JICBiYXNlOiBhZGQgKG51bGxhYmxlKSBhbm5vdGF0aW9ucyB0byByZXR1cm4gdmFsdWVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxNTQyCi0KLTIwMTQtMDYtMjYgMTQ6MDg6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6Ci0JICB0ZXN0czogYWRkIGFub3RoZXIgYnVmZmVyIGxpc3QgdGVzdCBjYXNlCi0KLTIwMTQtMDYtMjYgMTM6MjQ6MDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6Ci0JICB0ZXN0czogcG9ydCBhbmQgcmUtZW5hYmxlIGJ1ZmZlciBsaXN0IHRlc3RzCi0JICBBbmQgcmVtb3ZlIHNvbWUgd2hpY2ggZG9uJ3QgYXBwbHkgYW55IG1vcmUuCi0KLTIwMTQtMDYtMjYgMTE6NTg6MDQgKzAzMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JICB0ZXN0czogZW5oYW5jZSB0aGUgZ3N0Y2FwcyB0ZXN0X2ZlYXR1cmVzIHRvIGFsc28gdGVzdCBnc3RfY2Fwc19zZXRfZmVhdHVyZXMoKQotCSAgQ29tcGxpbWVudHMgbXkgcHJldmlvdXMgcGF0Y2ggZm9yIGdzdF9jYXBzX3NldF9mZWF0dXJlcywgd2hpY2ggd291bGQKLQkgIHByZXZpb3VzbHkgYXNzZXJ0IGFuZCBsZWFrIHRoZSBvbGQgR3N0Q2Fwc0ZlYXR1cmVzIGlmIHRoZSBjYXBzIGFscmVhZHkKLQkgIGhhZCBhIEdzdENhcHNGZWF0dXJlcyBhbmQgeW91IHdlcmUgdHJ5aW5nIHRvIHJlcGxhY2UgaXQgd2l0aCBhIG5ldyBvbmUuCi0KLTIwMTQtMDYtMjYgMTE6MTY6MzQgKzAzMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiB1bnNldCB0aGUgcGFyZW50IHJlZmNvdW50IG9mIHRoZSBvbGQgZmVhdHVyZXMgYmVmb3JlIGZyZWVpbmcgdGhlbSBpbiBnc3RfY2Fwc19zZXRfZmVhdHVyZXMoKQotCSAgT3RoZXJ3aXNlIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUoKSBhc3NlcnRzIGFuZCB0aGUgZmVhdHVyZXMgc3RydWN0dXJlIGlzIGxlYWtlZAotCi0yMDE0LTA2LTE2IDE5OjMwOjA2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYXZvaWQgcmV0dXJuaW5nIF9PSyBmb3IgX05PVF9MSU5LRUQKLQkgIFdoZW4gdGhlIHBhcnNlciByZWNlaXZlcyBub24tYWxpZ25lZCBwYWNrZXRzIGl0IGNhbiBwdXNoIGEgYnVmZmVyCi0JICBhbmQgZ2V0IGEgbm90LWxpbmtlZCByZXR1cm4gd2hpbGUgc3RpbGwgbGVhdmluZyBzb21lIGRhdGEgc3RpbGwgdG8KLQkgIGJlIHBhcnNlZC4gVGhpcyByZW1haW5pbmcgZGF0YSB3aWxsIG5vdCBmb3JtIGEgY29tcGxldGUgZnJhbWUgYW5kCi0JICB0aGUgc3ViY2xhc3MgbGlrZWx5IHJldHVybnMgX09LIGFuZCBiYXNlcGFyc2Ugd291bGQgdGFrZSB0aGF0Ci0JICBhcyB0aGUgcmV0dXJuLCB3aGlsZSBpdCB0aGUgZWxlbWVudCBpcyBhY3R1YWxseSBub3QtbGlua2VkLgotCSAgVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJ5IHN0b3JpbmcgdGhlIGxhc3QgZmxvdy1yZXR1cm4gZnJvbSBhIHB1c2gKLQkgIGFuZCB1c2luZyB0aGF0IGlmIGEgcGFyc2luZyBvcGVyYXRpb24gZG9lc24ndCByZXN1bHQgaW4gZGF0YSBiZWluZwotCSAgZmx1c2hlZCBvciBza2lwcGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMTQ3NAotCi0yMDE0LTA2LTI1IDExOjQwOjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzX3ByaXZhdGUuYzoKLQkgIGVsZW1lbnRzOiBmaXggY29weXJpZ2h0IGFuZCByZW1vdmUgZ3RrLWRvYyBjaHVuawotCSAgVHJpdmlhbCBhcyBpdCBtYXkgYmUsIHRoaXMgY29kZSB3YXMgbW9zdGx5IGNvcGllZCBmcm9tCi0JICBzb21ld2hlcmUgZWxzZS4gVGhlIGd0ay1kb2MgY2h1bmsgaXMgbm90IG5lZWRlZCwgc2luY2UKLQkgIGl0J3Mgbm90IHB1YmxpYyBBUEkuCi0KLTIwMTQtMDYtMDIgMjI6MDc6NTIgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSAgZmlsZXNyYzogSWdub3JlIHNlZWsgZXJyb3Igb24gbm9uLXNlZWthYmxlIGZpbGVzCi0JICBUaGlzIG1ha2UgaXQgd29ya3Mgd2l0aCBGSUZPcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzExNzYKLQotMjAxNC0wNi0yMiAxOTozNjoxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjMuMyA9PT0KLQotMjAxNC0wNi0yMiAxODowNzo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS4zLjMKLQotMjAxNC0wNi0yMiAxNzoxNTo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE0LTA2LTIyIDE0OjIzOjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTQtMDYtMjIgMTI6NTI6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgZ3N0X2NhcHNfaXNfYW55KCkgYW5kIF9pc19lbXB0eSgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8vc2hvd19idWcuY2dpP2lkPTczMTcwNAotCi0yMDE0LTA2LTIyIDEyOjUwOjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogZ3N0X2NhcHNfaXNfYW55KCkgc2hvdWxkIHJldHVybiBUUlVFIG9yIEZBTFNFCi0JICBOb3Qgc29tZSBmbGFnIHZhbHVlIGluc3RlYWQgb2YgVFJVRS4gRml4ZXMgY29kZSBsaWtlCi0JICBnc3RfY2Fwc19pc19hbnkoKSA9PSBUUlVFLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvL3Nob3dfYnVnLmNnaT9pZD03MzE3MDQKLQotMjAxNC0wNi0wMSAxNjo1Njo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RkZXZpY2UuYzoKLQkqIGdzdC9nc3RkZXZpY2UuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGV2aWNlOiByZW5hbWUgImtsYXNzIiBhbmQgZ2V0X2tsYXNzKCkgdG8gImRldmljZS1jbGFzcyIgYW5kIF9nZXRfZGV2aWNlX2NsYXNzKCkKLQkgIFRoZXJlJ3Mgc29tZSBwcmVjZWRlbnQgaW4gR3N0RWxlbWVudEZhY3RvcnksIGJ1dCBhCi0JICAia2xhc3MiIHByb3BlcnR5IGp1c3Qgc2VlbXMgd2VpcmQuCi0KLTIwMTQtMDYtMjAgMTg6MzQ6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvY2Fwc25lZ28uYzoKLQkgIGJlbmNobWFya3M6IGNhcHNuZWdvOiBhZGQgLS1sb29wcyBjb21tYW5kIGxpbmUgb3B0aW9uCi0JICBBbmQgZGVmYXVsdCB0byA1MCBsb29wcy4KLQotMjAxNC0wNi0yMCAxNzoxNDo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jOgotCSAgYmVuY2htYXJrOiBjYXBzbmVnbzogdXNlIEdPcHRpb25Db250ZXh0IGZvciBvcHRpb24gcGFyc2luZwotCi0yMDE0LTA2LTE5IDEyOjEwOjIzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIHRlc3RzOiBmaXggY29tcGlsZXIgd2FybmluZ3MgaW4gZ3N0dmFsdWUgdGVzdHMKLQkgIENhbGxpbmcgR1NUX1ZBTFVFX0hPTERTXyooJnYpIG5vdyByZXN1bHRzIGluIGEgY29tcGlsZXIKLQkgIHdhcm5pbmcgYWJvdXQgdmFsdWUhPU5VTEwgYWx3YXlzIGJlaW5nIGZhbHNlLCBzbyBjaGVjawotCSAgdHlwZSBkaXJlY3RseSBpbiB0aG9zZSBjYXNlcy4KLQotMjAxNC0wNi0xNyAyMjo0NTo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JICB2YWx1ZTogc2ltcGxpZnkgR1NUX1ZBTFVFX0hPTERTIGZvciBvdXIgYm94ZWQgYW5kIGZ1bmRhbWVudGFsIHR5cGVzCi0JICBCb3hlZCB0eXBlcyBjYW4ndCBiZSBkZXJpdmVkIGZyb20sIGFuZCB3ZSBkb24ndCBzdXBwb3J0Ci0JICBkZXJpdmluZyBmcm9tIG91ciBzcGVjaWFsIGZ1bmRhbWVudGFsIHR5cGVzICh0aGUgY29kZQotCSAgY2hlY2tzIGZvciBHVHlwZSBlcXVhbGl0eSBpbiBtb3N0IHBsYWNlcy4KLQotMjAxNC0wNi0yMCAxNjo1NTowNiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RkZXZpY2UuYzoKLQkqIGdzdC9nc3RkZXZpY2UuaDoKLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5oOgotCSogZ3N0L2dzdGRldmljZW1vbml0b3JmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0Z2xvYmFsZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdGdsb2JhbGRldmljZW1vbml0b3IuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBHc3REZXZpY2U6IERvY3VtZW50IEdzdERldmljZSBhbmQgcmVsYXRlZCBjbGFzc2VzCi0KLTIwMTQtMDYtMTYgMTM6NDc6NTUgKzAyMDAgIFNyaW1hbnRhIFBhbmRhIDxzcmltYW50YS5wYW5kYUBheGlzLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSAgRml4IGZ1bm5lbCBFT1MgaGFuZGxpbmcgYW5kIHdyb25nIHVuaXR0ZXN0Ci0JICBXaGVuIG5vIGRhdGEgaXMgY29taW5nIGZyb20gc2lua3BhZHMgYW5kIGVvcyBldmVudHMKLQkgIGFycml2ZWQgYXQgb25lIG9mIHRoZSBzaW5rcGFkLCBmdW5uZWwgZm9yd2FyZHMgdGhlIEVPUwotCSAgZXZlbnQgdG8gZG93bnN0cmVhbS4gSXQgZm9yd2FyZHMgdGhlIEVPUyBiZWNhdXNlIGxhc3RzaW5rIHBhZAotCSAgaXMgTlVMTC4gQWxzbyB0aGUgdW5pdCB0ZXN0Y2FzZSBvZiB0aGUgZnVubmVsIGlzIG5vdCBjaGVja2luZwotCSAgdGhlIGNvcnJlY3QgYmVoYXZpb3IgYXMgaXQgc2hvdWxkLiBUaGUgdW5pdCB0ZXN0IGNhc2Ugc2hvdWxkCi0JICBmYWlsIGlmIG9uZSBvZiB0aGUgc2luayBwYWQgaGFzIGFscmVhZHkgRU9TIHByZXNlbnQgb24gaXQgYW5kCi0JICB3ZSBhcmUgdHJ5aW5nIHRvIHB1c2ggb25lIG1vcmUgRU9TLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMTcxNgotCi0yMDE0LTA2LTE5IDA4OjA5OjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBvcHRpbWlzZSBjaGVja3MgZm9yIGxpc3RzCi0JICBPdXIgZnVuZGFtZW50YWwgdHlwZXMgYXJlIG5vbi1kZXJpdmFibGUsIHNvIHdlIGNhbgotCSAganVzdCBjaGVjayBmb3IgZXF1YWxpdHkuIEFsc28gYXZvaWQgZG9pbmcgdGhlIHNhbWUKLQkgIGNoZWNrIG11bHRpcGxlIHRpbWVzIGluIGEgY291cGxlIG9mIHBsYWNlcy4KLQotMjAxNC0wNi0xOSAwODowNjozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogdXNlIGdfYXNzZXJ0KCkgaW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGFscmVhZHktY2hlY2tlZCB0aGluZ3MKLQkgIFNvIHRoZXNlIGdldCBjb21waWxlZCBvdXQgZm9yIHJlbGVhc2VzLgotCi0yMDE0LTA2LTE5IDA4OjA1OjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBhZGQgaW50ZXJuYWwgX2Nhbl9jb21wYXJlX3VuY2hlY2tlZCgpCi0KLTIwMTQtMDYtMTkgMDg6MDM6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IGFkZCBpbnRlcm5hbCBfbGlzdF9jb25jYXQoKSB0aGF0IHRha2VzIG93bmVyc2hpcCBvZiBpbnB1dCB2YWx1ZXMKLQkgIEF2b2lkcyB1bm5lY2Vzc2FyeSBjb3BpZXMuCi0KLTIwMTQtMDYtMTggMTk6MDY6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogc2ltcGxpZnkgdmFsdWUgdHlwZSBjaGVja3MgaW4gZ2V0dGVycwotCSAgSnVzdCBjaGVjayBmb3IgR1R5cGUgZXF1YWxpdHkgaW4gY29tbW9uIGNhc2VzLgotCi0yMDE0LTA2LTE5IDA5OjI5OjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBBZGQgYSBGSVhNRSAyLjAgZm9yIGEgZnJhY3Rpb24gcmFuZ2VzIG9wdGltaXphdGlvbgotCSAgQ3VycmVudGx5IHdlIGxlYWsgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZW0gYXMgdHdvIEdWYWx1ZXMgdGhhdAotCSAgY29udGFpbiBhIGZyYWN0aW9uLiBXaXRob3V0IHRoaXMgd2UgY291bGQgc3RvcmUgZnJhY3Rpb24gcmFuZ2VzIGFzCi0JICBkYXRhWzBdID0gKG1pbl9uIDw8IDMyKSB8IChtaW5fZCkKLQkgIGRhdGFbMV0gPSAobWF4X24gPDwgMzIpIHwgKG1heF9kKQotCSAgYW5kIHdvdWxkbid0IHJlcXVpcmUgYW4gYWRkaXRpb25hbCBhbGxvY2F0aW9uIHBlciByYW5nZS4KLQotMjAxNC0wNi0xOSAwOToyMzo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBNYWtlIHN1cmUgdG8gY2FzdCBpbnQgcmFuZ2UgdmFsdWVzIHRvIGd1aW50cyBiZWZvcmUgc3RvcmluZyB0aGVtCi0JICBPdGhlcndpc2UgbmVnYXRpdmUgdmFsdWVzIHdpbGwgc2V0cyBhbGwgb2YgdGhlIDY0IGJpdHMgZHVlIHRvIHR3bydzCi0JICBjb21wbGVtZW50J3MgZGVmaW5pdGlvbiBvZiBuZWdhdGl2ZSB2YWx1ZXMuCi0JICBBbHNvIGFkZCBhIHRlc3QgZm9yIG5lZ2F0aXZlIGludCByYW5nZXMuCi0KLTIwMTQtMDYtMTkgMDc6NTc6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IHVwZGF0ZSBleHBvcnRzCi0KLTIwMTQtMDYtMTkgMDk6MDU6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IFN0b3JlIGludGVnZXIgcmFuZ2VzIGRpcmVjdGx5IGluIGEgR1ZhbHVlIHdpdGhvdXQgYWRkaXRpb25hbCBhbGxvY2F0aW9uCi0JICBNaWNybyBvcHRpbWl6YXRpb24gdG8gc2F2ZSBzb21lIGFsbG9jYXRpb25zLiBOZXh0IHN0ZXAgdG8gZG8gdGhpcwotCSAgd2l0aCBmcmFjdGlvbiByYW5nZXMgdG9vLgotCi0yMDE0LTA2LTE5IDA4OjQzOjAyICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICBnc3RfcHJpdmF0ZTogRml4IGR1cGxpY2F0ZSBkZWZpbml0aW9uCi0KLTIwMTQtMDYtMTkgMDg6MDU6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGFsbG9jYXRvci5jOgotCSogZ3N0L2dzdGNhcHNmZWF0dXJlcy5oOgotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkqIGdzdC9nc3Rjb250ZXh0Lmg6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5oOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiBnc3QvZ3N0dG9jLmM6Ci0JKiBnc3QvZ3N0dG9jLmg6Ci0JICBnc3Q6IFN0b3JlIG1vcmUgYmFzaWMgdHlwZSBHVHlwZXMgaW4gdmFyaWFibGVzCi0JICBNaWNybyBvcHRpbWl6YXRpb24gdG8gY2hhbmdlIGEgZnVuY3Rpb24gY2FsbCB0byBhIHZhcmlhYmxlIGFjY2VzcwotCSAgZm9yIGFsbCBvdXIgYmFzaWMgdHlwZXMuCi0KLTIwMTQtMDYtMTkgMDg6MDQ6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JICB2YWx1ZTogU3RvcmUgb3VyIGZ1bmRhbWVudGFsIHR5cGUgR1R5cGVzIGluIHZhcmlhYmxlcwotCSAgTWljcm8gb3B0aW1pemF0aW9uIHRvIGNoYW5nZSBhIGZ1bmN0aW9uIGNhbGwgdG8gYSB2YXJpYWJsZSBhY2Nlc3MKLQkgIGZvciBhbGwgb3VyIGJhc2ljIHR5cGVzLgotCi0yMDE0LTA2LTE3IDA3OjMxOjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogU3BlZWQgdXAgZ3N0X3ZhbHVlX2ludGVyc2VjdC9fc3VidHJhY3QKLQkgIEJvdGggZ3N0X3ZhbHVlX2ludGVyc2VjdCBhbmQgZ3N0X3ZhbHVlX3N1YnRyYWN0IHdpbGwgY2FsbAotCSAgZ3N0X3ZhbHVlX2NvbXBhcmUgaWYgb25lIG9mIHRoZWlyIGFyZ3VtZW50cyBpc24ndCBhIGxpc3QuCi0JICBnc3RfdmFsdWVfY29tcGFyZSB3aWxsIHRoZW4gcmUtZG8gYSBjaGVjayB0byBzZWUgaWYgb25lIG9mCi0JICB0aGUgYXJndW1lbnRzIGlzIGEgbGlzdCAoZm9yIHRoZSBzcGVjaWFsIGNhc2Ugb2YgY29tcGFyaW5nIGEgdW5pdGFyeQotCSAgdmFsdWUgd2l0aCBhIGxpc3Qgb2YgbGVuZ3RoIDEpLgotCSAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgdmFyaW91cyBHX1ZBTFVFX0hPTERTIHJlcHJlc2VudCBhbiBleHBlbnNpdmUKLQkgIGFtb3VudCBvZiBjYWxsaW5nIGdzdF92YWx1ZV9jb21wYXJlIChhbG1vc3QgaGFsZiBvZiBpdCkgdG8gc2VlIGlmCi0JICB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIGFyZSBsaXN0LiBUaGVzZSBjaGVja3MgY2FuIGJlIGRvbmUgd2l0aG91dAotCSAgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGFyZ3VtZW50cyBhcmVuJ3QgbGlzdHMuCi0JICAqIENyZWF0ZSBhIG5ldyAibm9saXN0IiBnc3RfdmFsdWVfY29tcGFyZSB3aGljaCBhdm9pZHMgdGhhdCBzcGVjaWFsCi0JICBjYXNlIGNvbXBhcmlzaW9uCi0JICBCZW5jaG1hcmtzOgotCSAgdmFsZ3JpbmQvY2FsbGdyaW5kOiBhdmVyYWdlIHNwZWVkdXAgaW4gaW5zdHJ1Y3Rpb24gY2FsbHMgZm9yCi0JICBnc3RfdmFsdWVfaW50ZXJzZWN0IGFuZCBnc3RfdmFsdWVfc3VidHJhY3QgaXMgYXJvdW5kIDU2JSAoTWFrZXMgNjMlCi0JICBvZiB0aGUgY2FsbHMgaXQgdXNlZCB0byB0YWtlIHByZXZpb3VzbHkpCi0JICB0ZXN0cy9iZW5jaG1hcmtzL2NhcHNuZWdvOiBXaXRoIGRlZmF1bHQgc2V0dGluZ3MgKGRlcHRoIDQsIGNoaWxkcmVuIDMKLQkgIDYwNyBlbGVtZW50cyksIHRpbWUgdGFrZW4gZm9yIHRyYW5zaXRpb24gZnJvbSBSRUFEWSB0byBQQVVTRUQ6Ci0JICBCZWZvcmUgOiAwMC4zOTE1MTkxNTMKLQkgIEFmdGVyICA6IDAwLjIyMDM5NzQ5MgotCSAgNTYlIG9mIHRoZSB0aW1lIHByZXZpb3VzbHkgdXNlZCwgKzc3JSBzcGVlZHVwCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxNzU2Ci0KLTIwMTQtMDYtMTcgMTQ6Mzk6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6Ci0JICB0ZXN0czogcmVtb3ZlIHNvbWUgY3J1ZnQgZnJvbSB0aGUgYnVmZmVybGlzdCB0ZXN0Ci0JICBCdWZmZXJzIG5vIGxvbmdlciBjYXJyeSBjYXBzLCBhbmQgYnVmZmVybGlzdHMgZG9uJ3QgaGF2ZQotCSAgZ3JvdXBzIHdoZXJlIGJ1ZmZlcnMgbWF5IG5lZWQgdG8gYmUgbWVyZ2VkIGludG8gb25lIGFueSBtb3JlLgotCi0yMDE0LTA2LTE2IDIwOjMwOjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgdGVzdHM6IGFkZCB0ZXN0IGZvciBnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlKCkKLQotMjAxNC0wNi0xNiAyMDoyOTo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkgIGJ1ZmZlcmxpc3Q6IGZpeCBidWZmZXIgbGVhayBpbiBfcmVtb3ZlKCkKLQotMjAxNC0wNi0xNiAwOToxODo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuYzoKLQkgIGZsb3djb21iaW5lcjogZml4IGctaSB0cmFuc2ZlciBhbm5vdGF0aW9ucwotCi0yMDE0LTA2LTE2IDA4OjQxOjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuYzoKLQkgIGZsb3djb21iaW5lcjogRml4ZWQgR0JveGVkQ29weUZ1bmMKLQkgIEknbGwganVzdCBxdW90ZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBtYW4gaW4gdGhlIHdvcmxkOgotCSAgIkkgZG9uJ3QgdXN1YWxseSBwdXNoIGNvbW1pdHMsIGJ1dCB3aGVuIEkgZG8gSSBkb24ndCBjb21waWxlIGl0Ci0JICBmaXJzdCIKLQotMjAxNC0wNi0xNCAxNjozMDo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGRldmljZW1vbml0b3IuaDoKLQkqIGdzdC9nc3RnbG9iYWxkZXZpY2Vtb25pdG9yLmM6Ci0JICBkZXZpY2Vtb25pdG9yOiBzb21lIGRvY3MgYWRkaXRpb25zIGFuZCBmaXhlcwotCi0yMDE0LTA2LTE0IDE2OjI4OjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICB3aW4zMjogYWRkIGV4cG9ydHMgZm9yIG5ldyBnZXRfdHlwZSgpIGZ1bmN0aW9uCi0KLTIwMTQtMDYtMTQgMTE6MzE6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmM6Ci0JICBmbG93Y29tYmluZXI6IGtlZXAgYSByZWYgdG8gdGhlIHBhZHMgd2UncmUgdXNpbmcKLQkgIE5lZWRlZCBmb3IgdXNlIHZpYSB0aGUgYm94ZWQgdHlwZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzEzNTUKLQotMjAxNC0wNi0xNCAxMDo1NDo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmg6Ci0JICBmbG93Y29tYmluZXI6IGFkZCBib3hlZCB0eXBlIGZvciBiaW5kaW5ncwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMTM1NQotCi0yMDE0LTA2LTExIDE2OjI4OjUxIC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQG5lbWVyc29uLmNvbT4KLQotCSogZ3N0L2dzdGRldmljZS5jOgotCSogZ3N0L2dzdGRldmljZW1vbml0b3JmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGludHJvc3BlY3Rpb246IG1pbm9yIGFubm90YXRpb24gYWRkaXRpb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxNTQxCi0KLTIwMTQtMDYtMTEgMTk6MDg6MDQgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AbmVtZXJzb24uY29tPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBpbnRyb3NwZWN0aW9uOiBpbmNsdWRlIGdzdHZlcnNpb24uaCBpbiBHSVIgZ2VuZXJhdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzAyMQotCi0yMDE0LTA2LTEwIDEwOjIzOjEzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JICBieXRlcmVhZGVyOiBVc2UgY29uY2lzdGFudCBkZXJlZmVuY2UgbWV0aG9kCi0JICBUaGlzIGlzIG1pbm9yIHN0eWxlIGZpeCB0byBub3QgbWl4ICp2YXIgYW5kIHZhcltOXS4KLQotMjAxNC0wNi0xMCAwOTozNTozOCAtMDQwMCAgU3VuZ2hvIEJhZSA8YmF2ZXIuYmFlQGxnZS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgotCSAgYnl0ZXJlYWRlcjogVXNlIHBvaW50ZXIgaW5zdGVhZCBvZiBpbmRleCBhY2Nlc3MKLQkgIEN1cnJlbnRseSB0aGUgc2NhbiB1c2VzIEJveWVyLW1vb3JlIG1ldGhvZCBhbmQgaXRzIHBlcmZvcm1hbmNlIGlzIGdvb2QuCi0JICBidXQsIGl0IGNhbiBiZSBvcHRpbWl6ZWQgZnJvbSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB2aWV3LgotCSAgVGhlIG9yaWdpbmFsIHNjYW4gY29kZSBpcyBpbXBsZW1lbnRlZCBieSBieXRlIGFycmF5IGFuZCBpbmRleC1iYXNlZCBhY2Nlc3MuCi0JICBJbiBfc2Nhbl9mb3Jfc3RhcnRfY29kZSgpLCB0aGUgaW5kZXggaXMgaW5jcmVhc2luZyBmcm9tIHN0YXJ0IHRvIGVuZCBhbmQgdGhlCi0JICBiYXNlIGFkZHJlc3Mgb2YgdGhlIGJ5dGUgYXJyYXkgaXMgcmVmZXJyZWQgdG8gYXMgcmV0dXJuIHZhbHVlLgotCSAgSW4gdGhlIGNhc2UsIGluZGV4LWJhc2VkIGFjY2VzcyBjYW4gYmUgcmVwbGFjZWQgYnkgcG9pbnRlciBhY2Nlc3MsIHdoaWNoCi0JICBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBieSByZW1vdmluZyBpbmRleC1yZWxhdGVkIG9wZXJhdGlvbnMuCi0JICBJdHMgcGVyZm9ybWFjZSBpcyBlbmhhbmNlZCBieSBhcHByb3hpbWF0ZWx5IDglIG9uIGFybS1iYXNlZCBlbWJlZGRlZCBkZXZpY2VzLgotCSAgQWx0aG91Z2ggaXQgc2VlbXMgdHJpdmlhbCwgaXQgY2FuIGFmZmVjdCB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBiZWNhdXNlIHRoZQotCSAgX3NjYW5fZm9yX3N0YXJ0X2NvZGUoKSBmdW5jdGlvbiBpcyB2ZXJ5IG9mdGVuIGNhbGxlZCB3aGVuIEguMjY0L0guMjY1IHZpZGVvIGlzCi0JICBwbGF5ZWQuCi0JICBJbiBhZGRpdGlvbiwgdGhlIHRlY2huaXF1ZSBjYW4gYXBwbHkgZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGFuZCBpdCBpcyBnb29kIGluCi0JICB2aWV3IG9mIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxNDQyCi0KLTIwMTQtMDYtMDcgMTA6MTM6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RnbG9iYWxkZXZpY2Vtb25pdG9yLmg6Ci0JICBnbG9iYWxkZXZpY2Vtb25pdG9yOiBwcmV0dGlmeSBoZWFkZXIKLQotMjAxNC0wNi0wNyAwOTo0Njo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9xdWV1ZWFycmF5LmM6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgcXVldWVhcnJheSBleHBhbnNpb24gZnJvbSAxCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxMzQ5Ci0KLTIwMTQtMDYtMDYgMTY6MzY6MDAgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AbmVtZXJzb24uY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuYzoKLQkgIHF1ZXVlYXJyYXk6IGZpeCBleHBhbmRpbmcgc2l6ZSBvZiBxdWV1ZSBmcm9tIDEKLQkgIFdpdGhvdXQgd2Ugd291bGQgbm90IGFjdHVhbGx5IGV4cGFuZCBhbmQgYWNjZXNzCi0JICBtZW1vcnkgYmV5b25kIHRoZSBhbGxvY2F0ZWQgcmVnaW9uIGZvciB0aGUgYXJyYXkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxMzQ5Ci0KLTIwMTQtMDYtMDUgMTY6NTU6MTUgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AbmVtZXJzb24uY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSAgZGF0YXF1ZXVlOiBjbGVhciB1cCBkb2N1bWVudGF0aW9uIG9mIGdzdF9kYXRhX3F1ZXVlX25ldwotCSAgVGhlIGdwb2ludGVyIGFyZ3VtZW50IGlzIHBhc3NlZCB0byBhbGwgdGhyZWUgY2FsbGJhY2tzLCBub3QganVzdCBvbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxMzAyCi0KLTIwMTQtMDUtMzAgMDA6MTc6MDYgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AbmVtZXJzb24uY29tPgotCi0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvcmZhY3RvcnkuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0aW5kZXguYzoKLQkgIGludHJvc3BlY3Rpb246IGZpeCBzb21lIG1pbm9yIGFubm90YXRpb24gYnVncwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDk4MgotCi0yMDE0LTA2LTA1IDEyOjM4OjIwIC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQG5lbWVyc29uLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0aW5kZXguYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaDoKLQkgIGJhc2U6IHVzZSBjb3JyZWN0IHN5bnRheCBpbiBkb2N1bWVudGF0aW9uIG1vcmUgY29uc2lzdGVudGx5Ci0JICBQcmV2aW91c2x5LCBtYW55IGNvbnN0YW50cyB3ZXJlIHByZWZpeGVkIHdpdGggIyBvciB1bnByZWZpeGVkLAotCSAgc29tZSBmdW5jdGlvbnMgYW5kIG1hY3JvcyB3ZXJlIHByZWZpeGVkIHdpdGggIyBpbnN0ZWFkIG9mIHN1ZmZpeGVkCi0JICB3aXRoICgpLCBldGMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxMjkzCi0KLTIwMTQtMDUtMDcgMTg6MjY6MzggKzA4MDAgIHpob3VtaW5nIDx6bWFmb3hAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBQYXNzIHJhdGUgb2YgaW5wdXQgc2VnbWVudCB0byBvdXRwdXQgc2VnbWVudAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTcwMQotCi0yMDE0LTA0LTA3IDE0OjQ5OjU5ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHNfcHJpdmF0ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50c19wcml2YXRlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGdzdGJ1ZmZlcjogZmFjdG9yIHRocmVlIGZsYWdzLXRvLXN0cmluZyBsb29wcwotCi0yMDE0LTA2LTAzIDIzOjQyOjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogbWFrZSBwcmludGluZyBkYXRldGltZXMgd29yayB3aXRoIEdTVF9QVFJfRk9STUFUCi0KLTIwMTQtMDYtMDMgMjM6Mzg6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGRhdGV0aW1lLmg6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5oOgotCSAgZGF0ZXRpbWU6IGNoYW5nZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiB0byBtaW5pIG9iamVjdAotCSAgQW5kIG1vdmUgdHlwZSBzdHVmZiBmcm9tIEdzdFZhbHVlIHRvIEdzdERhdGVUaW1lLgotCi0yMDE0LTA2LTAzIDIyOjE5OjMzICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOgotCSAgZG93bmxvYWRidWZmZXI6IGZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlCi0KLTIwMTQtMDYtMDMgMjI6MTI6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmM6Ci0JICBkb3dubG9hZGJ1ZmZlcjogaW1wcm92ZSBzdGFydC9zdG9wIGluIGJ1ZmZlcmluZyBxdWVyeQotCSAgVGhlIHN0YXJ0IGFuZCBzdG9wIHNob3VsZCByZXByZXNlbnQgdGhlIGN1cnJlbnRseSBkb3dubG9hZGluZyByZWdpb24uCi0JICBUaGUgZXN0aW1hdGVkLXRvdGFsIHNob3VsZCByZXByZXNlbnQgdGhlIHJlbWFpbmluZyB0aW1lIHRvIGRvd25sb2FkCi0JICB0aGUgY3VycmVudGx5IGRvd25sb2FkaW5nIHJlZ2lvbi4gVGhpcyBtYWtlcyBpdCBhIGxvdCBtb3JlIHVzZWZ1bAotCSAgZm9yIGFwcGxpY2F0aW9ucyBiZWNhdXNlIHRoZXkgY2FuIHRoZW4gdXNlIHRob3NlIHZhbHVlcyB0byB1cGRhdGUKLQkgIHRoZSBmaWxsIHJlZ2lvbiBhbmQgdXNlIHRoZSBlc3RpbWF0ZWQgdGltZSB0byBkZWxheSBwbGF5YmFjay4KLQkgIFVwZGF0ZSB0aGUgZG9jcyB3aXRoIHRoaXMgY2xhcmlmaWNhdGlvbi4KLQotMjAxNC0wNC0wNyAxNDozNTowNCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5OiBhZGQgc3RhdGljIGFuZCBjb25zdCB3aGVyZSBhcHByb3ByaWF0ZQotCi0yMDE0LTA0LTA3IDE0OjMxOjE3ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgaWRlbnRpdHk6IGZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93Ci0JICBDb3Zlcml0eSAxMDM3MTU1Ci0KLTIwMTQtMDYtMDMgMTQ6NDk6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmM6Ci0JICBkb3dubG9hZGJ1ZmZlcjogcmVzZXQgcmVhZCBhbmQgd3JpdGUgcG9zaXRpb25zCi0JICBSZXNldCB0aGUgcmVhZCBhbmQgd3JpdGUgcG9zaXRpb25zIHJpZ2h0IGFmdGVyIHdlIG9wZW4gdGhlIGZpbGUgb3IgZmx1c2gKLQkgIGl0LiBXZSBhcmUgYWxzbyBpbiB0aGUgYnVmZmVyaW5nIHN0YXRlIHdpdGggMCBwZXJjZW50IGJ1ZmZlcmVkIHdoZW4gd2UKLQkgIHN0YXJ0LgotCi0yMDE0LTA2LTAzIDE0OjQ3OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IGZpcnN0IGhhbmRsZSBhbGwgbWluaW9iamVjdHMsIHRoZW4gR09iamVjdHMKLQkgIEZpcnN0IGhhbmRsZSBhbGwgbWluaW9iamVjdHMgYmVmb3JlIHdlIGF0dGVtcHQgdG8gZGVyZWZlcmVuY2UgdGhlIGZpcnN0Ci0JICBmaWVsZCBwb2ludGVyIGFuZCBsb29rIGF0IHRoZSBHVHlwZS4gV2l0aCB0aGUgcmVjZW50IGdsaWIgY2hhbmdlIHRvCi0JICBzcGVlZCB1cCBHX0lTX09CSkVDVCwgdGhpcyBjYXVzZXMgY3Jhc2hlcyBvbiBtaW5pb2JqZWN0cyBvdGhlcndpc2UuCi0KLTIwMTQtMDYtMDMgMTQ6NDY6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogR3N0RGF0ZVRpbWUgZG9lcyBub3QgaGF2ZSBhIEdUeXBlIGFzIGZpcnN0IGZpZWxkCi0JICBHc3REYXRlVGltZSBkb2VzIG5vdCBoYXZlIHRoZSBHVHlwZSBhcyB0aGUgZmlyc3QgZmllbGQgc28gd2UgY2FuJ3QgdXNlCi0JICBpdCB0byBkZXRlY3QgaXRzIHR5cGUuCi0KLTIwMTQtMDYtMDMgMTQ6NDU6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogdXNlIG1hY3JvcyB0byBjaGVjayB0eXBlcwotCSAgVXNlIHRoZSBtYWNyb3MgdG8gY2hlY2sgdGhlIHR5cGUgb2Ygb2JqZWN0cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IHBva2luZwotCSAgYXQgdGhlIGZpcnN0IGZpZWxkLgotCi0yMDE0LTA2LTAxIDIzOjUxOjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0Z2xvYmFsZGV2aWNlbW9uaXRvci5jOgotCSAgZ2xvYmFsZGV2aWNlbW9uaXRvcjogY29ubmVjdCBzeW5jLW1lc3NhZ2Ugc2lnbmFsIG9uIHRoZSByaWdodCBvYmplY3QKLQkgIEZpeGVzIGNyaXRpY2FscyBhdCBydW50aW1lIGFuZCBtYWtlcyBzdHVmZiBhY3R1YWxseSB3b3JrLgotCi0yMDE0LTA1LTMxIDE3OjM1OjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IEtlZXAgc3RpbGwgbWVhbmluZ2Z1bGwgcGVuZGluZyBldmVudHMgb24gRkxVU0hfU1RPUAotCSAgT25seSBFT1MgYW5kIHNlZ21lbnQgc2hvdWxkIGJlIGRlbGV0ZWQgaW4gdGhhdCBjYXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg2OAotCi0yMDE0LTA1LTMwIDA5OjEzOjEyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgUmV2ZXJ0ICJtaW5pb2JqZWN0OiBBZGQgbWlzc2luZyAobnVsbGFibGUpIGFubm90YXRpb25zIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5NjM2MWU5YjVjNWQwMGRjNzcxMmZmM2E5YWNmYmUxMGRmN2NkOWZlLgotCSAgVGhpcyB3YXMgbm90IHN1cHBvc2VkIHRvIGJlIHB1c2hlZCB5ZXQhCi0KLTIwMTQtMDUtMzAgMDk6MTI6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBJdCdzIHBvb2wsIG5vdCBwb28uLi4gZXZlbiB3aGVuIHRhbGtpbmcgYWJvdXQgZmx1c2hpbmcKLQotMjAxNC0wNS0yOCAxMDoxNDo0NSArMDEwMCAgUGhpbGlwIFdpdGhuYWxsIDxwaGlsaXAud2l0aG5hbGxAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgbWluaW9iamVjdDogQWRkIG1pc3NpbmcgKG51bGxhYmxlKSBhbm5vdGF0aW9ucwotCSAgZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UoKSBjYW4gdGFrZSBOVUxMIG1pbmktb2JqZWN0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA4NzMKLQotMjAxNC0wNS0zMCAwMTo0MjoxNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkgIHRlc3RzOiBtdWx0aXF1ZXVlOiBmaXggbGVha3MKLQotMjAxNC0wNS0yOSAxNDo1NDozNCAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBuZW1lcnNvbi5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RhbGxvY2F0b3IuYzoKLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGJ1cy5oOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmM6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNvbnRleHQuaDoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIGdzdC9nc3RkZXZpY2UuYzoKLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yZmFjdG9yeS5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RlcnJvci5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3Rmb3JtYXQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkqIGdzdC9nc3RpdGVyYXRvci5oOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogZ3N0L2dzdHBhcnNlLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogZ3N0L2dzdHByZXNldC5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dGFzay5jOgotCSogZ3N0L2dzdHRhc2twb29sLmM6Ci0JKiBnc3QvZ3N0dG9jLmM6Ci0JKiBnc3QvZ3N0dG9jc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBkb2NzOiBjb252ZXJ0IE5VTEwsIFRSVUUsIGFuZCBGQUxTRSB0byAlTlVMTCwgJVRSVUUsIGFuZCAlRkFMU0UKLQkgIFRoaXMgc2hvdWxkIGhlbHAgaW1wcm92ZSBkb2N1bWVudGF0aW9uIGdlbmVyYXRlZCBmb3IKLQkgIGxhbmd1YWdlcyBvdGhlciB0aGFuIEMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwOTYxCi0KLTIwMTQtMDUtMzAgMDA6MTM6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGRvY3M6IGZpeCB0eXBlIGluIEdzdE9iamVjdCBkb2NzCi0KLTIwMTQtMDUtMjkgMTU6MDQ6NDUgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AbmVtZXJzb24uY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogZml4IGdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uKCkgZG9jdW1lbnRhdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDk2MgotCi0yMDE0LTA1LTI5IDE0OjA3OjE1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBzZXQgcGFkcyBuZWVkLXBhcmVudCBmbGFnIHRvIGZhbHNlIHdoZW4gcmVtb3ZpbmcKLQkgIFdoZW4gYSBwYWQgaXMgYWRkZWQgdGhlIG5lZWQtcGFyZW50IGZsYWcgaXMgc2V0IHRvIHRydWUsIHNvIHdoZW4KLQkgIHRoZXkgYXJlIHJlbW92ZWQgdGhlIGZsYWcgc2hvdWxkIGJlIHNldCBiYWNrIHRvIGZhbHNlCi0JICBUaGlzIHdhcyBwcmV2ZW50aW5nIEdzdFBhZHMgdG8gYmUgcmV1c2VkIGluIGVsZW1lbnRzIChyZW1vdmVkIGFuZAotCSAgbGF0ZXIgcmUtYWRkZWQpLiBBIHVuaXQgdGVzdHMgd2FzIGFkZGVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMKLQkgIHdvcmtpbmcgbm93LgotCSAgVGhlIHVzZSBjYXNlIGlzIHRzZGVtdXggdGhhdCBoYXMgYSBwcm9ncmFtLW51bWJlciBwcm9wZXJ0eSBhbmQKLQkgIGFsbG93cyB0aGUgdXNlciB0byBzd2l0Y2ggcHJvZ3JhbXMuIEluIG9yZGVyIHRvIGRvIHRoYXQgdHNkZW11eAotCSAgd2lsbCByZW1vdmUgdGhlIHBhZHMgb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSBhbmQgYWRkIGZyb20gdGhlIG5ldwotCSAgb25lcy4gVGhlIHJlbW92ZWQgcGFkcyBhcmUga2VwdCBpbiB0aGUgZGVtdXhlciBmb3IgbGF0ZXIgaWYgdGhlCi0JICB1c2VyIHNlbGVjdHMgdGhlIG9sZCBwcm9ncmFtIGFnYWluLgotCi0yMDE0LTA1LTI3IDA4OjA5OjM2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBwb3N0IGJ1ZmZlcmluZyBtZXNzYWdlIHdoZW4gcXVldWVzIGZsdXNoCi0JICBUaGUgYnVmZmVyaW5nIHN0YXR1cyBnb2VzIGJhY2sgdG8gMCwgc28gaW5mb3JtIHRoZSBhcHBsaWNhdGlvbiBhYm91dCBpdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjQyMwotCi0yMDE0LTA1LTI5IDE0OjM5OjM2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogLmdpdGlnbm9yZToKLQkgIGdpdGlnbm9yZTogSWdub3JlIFZJTSBzd2FwIGZpbGVzCi0KLTIwMTQtMDUtMjcgMTM6MzY6MjkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogdHdvIG1pbm9yIGRvY3MgZml4ZXMKLQotMjAxNC0wNS0yNyAxMDowOTowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaDoKLQkgIGZsb3djb21iaW5lcjogYmVhdXRpZnkgaGVhZGVycyBhIGxpdHRsZQotCi0yMDE0LTA1LTI3IDEwOjA1OjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmg6Ci0JICBkb2NzOiBhZGQgR3N0Rmxvd0NvbWJpbmVyCi0KLTIwMTQtMDUtMjcgMDk6NTU6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvYmFzZS5oOgotCSAgYmFzZTogaW5jbHVkZSBmbG93Y29tYmluZXIgaGVhZGVyIGZyb20gYmFzZS5oCi0KLTIwMTQtMDUtMjYgMTI6MzE6MzMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZmxvd2NvbWJpbmVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBmbG93Y29tYmluZXI6IGFkZCBHc3RGbG93Q29tYmluZXIKLQkgIEFkZHMgYSB1dGlsaXR5IHN0cnVjdCB0aGF0IGlzIGNhcGFibGUgb2Ygc3RvcmluZyBhbmQgYWdncmVnYXRpbmcgZmxvdyByZXR1cm5zCi0JICBhc3NvY2lhdGVkIHdpdGggcGFkcy4KLQkgIFRoaXMgd2F5IGFsbCBkZW11eGVycyB3aWxsIGhhdmUgYSBzdGFuZGFyZCBmdW5jdGlvbiB0byB1c2UgYW5kIGhhdmUgdGhlCi0JICBzYW1lIGV4cGVjdGVkIHJlc3VsdHMuCi0JICBJbmNsdWRlcyB0ZXN0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkyMjQKLQotMjAxNC0wNS0yMyAxMzoyNTozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcGFkOiBzdG9yZSBsYXN0IGZsb3cgcmV0dXJuIGFuZCBwcm92aWRlIGFjZXNzb3IgZnVuY3Rpb24KLQkgIFN0b3JlcyB0aGUgbGFzdCByZXN1bHQgb2YgYSBnc3RfcGFkX3B1c2ggb3IgYSBwdWxsIG9uIHRoZSBHc3RQYWQgYW5kIHByb3ZpZGVzCi0JICBhIGdldHRlciBhbmQgYSBtYWNybyB0byBhY2Nlc3MgdGhpcyBmaWVsZC4KLQkgIFdoZW5ldmVyIHRoZSBwYWQgaXMgaW5hY3RpdmUgaXQgaXMgc2V0IHRvIEZMVVNISU5HCi0JICBBUEk6IGdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkyMjQKLQotMjAxNC0wNS0yMyAxNToyNjo1OSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJwb29sOiBBZGQgbWV0aG9kIGFuZCB2aXJ0dWFscyB0byBzZXQgZmx1c2hpbmcgc3RhdGUKLQkgIEN1cnJlbnRseSB0aGVyZSBpcyBubyBvdGhlciB3YXkgdG8gdW5sb2NrIGEgYnVmZmVyIHBvb2wgb3RoZXIgdGhlbgotCSAgc3RvcHBpbmcgaXQuIFRoaXMgbWF5IGhhdmUgdGhlIGVmZmVjdCBvZiBmcmVlaW5nIGFsbCB0aGUgYnVmZmVycywKLQkgIHdoaWNoIGlzIHRvbyBoZWF2eSBmb3IgYSBzZWVrLiBUaGlzIHBhdGNoIGFkZCBhIG1ldGhvZCB0byBlbnRlciBhbmQKLQkgIGxlYXZlIGZsdXNoaW5nIHN0YXRlLiBBcyBhIGNvbnZlbmllbmNlLCBmbHVzaF9zdGFydC9mbHVzaF9zdG9wCi0JICB2aXJ0dWFsIGFyZSBhZGRlZCBzbyBwb29sIGltcGxlbWVudGF0aW9uIGNhbiBhbHNvIHVuYmxvY2sgdGhlaXIgb3duCi0JICBpbnRlcm5hbCBwb2xsIGF0b21pY2FsbHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgcG9vbC4gIFRoaXMgaXMgZnVsbHkKLQkgIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBkb2luZyBzdG9wL3N0YXJ0IHRvIGFjdHVhbGx5IGZsdXNoIHRoZSBwb29sCi0JICAoYXMgYmVpbmcgZG9uZSBpbiBHc3RCYXNlU3JjKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc2MTEKLQotMjAxNC0wNS0yNiAxNDoyMzoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBQYXNzdGhyb3VnaCBBTExPQ0FUSU9OIHF1ZXJpZXMgaW4gcGFzc3Rocm91Z2ggbW9kZSBldmVuIGlmIHdlIGhhZCBubyBjYXBzIHlldAotCSAgT3IgaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgY2FyZSBhYm91dCBjYXBzIGF0IGFsbC4KLQkgIEFsc28gcmVtb3ZlIGFuIGFzc2lnbmVkIGJ1dCB1bnVzZWQgbG9jYWwgdmFyaWFibGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwMjY4Ci0KLTIwMTQtMDUtMjUgMTY6MTA6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUKLQotMjAxNC0wNS0yNSAxNjo1Nzo1OSArMDIwMCAgUGlvdHIgRHLEhWcgPHBpb3RyZHJhZ0BnbWFpbC5jb20+Ci0KLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgcG86IHVwZGF0ZSBQT1RGSUxFUwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDcxOAotCi0yMDE0LTA1LTIxIDEzOjIzOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMy4yID09PQotCi0yMDE0LTA1LTIxIDEzOjA2OjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjMuMgotCi0yMDE0LTA1LTIxIDExOjM5OjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTQtMDUtMjEgMTA6NTA6NDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIFJFQURNRToKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAyMTFmYTVmIHRvIDFmNWQzYzMKLQotMjAxNC0wNS0xOSAxMTowNToxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogQWRkIHNvbWUgcG9zaXRpdmUgdGVzdGNhc2UgZm9yIHN0cmluZyBkZXNlcmlhbGl6YXRpb24KLQotMjAxNC0wNS0xOCAxMDo0OTo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogUkVBRE1FOgotCSogZG9jcy9mYXEvZ2V0dGluZy54bWw6Ci0JICBkb2NzOiByZW1vdmUgcmVmZXJlbmNlIHRvIE1hbmRyYWtlIGFuZCBwYWNrYWdlcyB3ZSBubyBsb25nZXIgcHJvdmlkZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDMxMgotCi0yMDE0LTA1LTE1IDE2OjQxOjU4ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jYXBzLnR4dDoKLQkgIGRvY3M6IGZpeCB0eXBvCi0KLTIwMTQtMDUtMTQgMTM6NDA6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkgIHBsdWdpbmxvYWRlcjogZml4IGNvbXBpbGVyIHdhcm5pbmcgb24gd2luZG93cwotCSAgZ3N0cGx1Z2lubG9hZGVyLmM6NTg0OjE6IGVycm9yOiBsYWJlbCAnYmVhY2gnIGRlZmluZWQgYnV0IG5vdCB1c2VkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMTI1Ci0KLTIwMTQtMDUtMTMgMTk6NTE6MzQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZG93bmxvYWRidWZmZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c3BhcnNlZmlsZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RzcGFyc2VmaWxlLmg6Ci0JICBlbGVtZW50czogZG9uJ3QgZGVwZW5kIG9uIGxpYmdpbyBqdXN0IGZvciBnX2lvX2Vycm9yX2Zyb21fZXJybm8oKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTk0OQotCi0yMDE0LTA1LTEzIDE5OjMwOjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHNwYXJzZWZpbGUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c3BhcnNlZmlsZS5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zcGFyc2VmaWxlLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBzcGFyc2VmaWxlOiBrZWVwIGl0IHByaXZhdGUgYXMgaGVscGVyIEFQSSBmb3IgZG93bmxvYWRidWZmZXIKLQkgIFRoZXJlJ3Mgbm8gZXhwZWN0YXRpb24gdGhhdCBhbnkgb3RoZXIgZWxlbWVudCBvciBhcHBsaWNhdGlvbnMKLQkgIG1pZ2h0IHdhbnQgdG8gdXNlIHRoaXMgaGVscGVyIEFQSSBhbnkgdGltZSBzb29uLCBzbyBrZWVwIGl0Ci0JICBwcml2YXRlIGZvciB0aGUgdGltZSBiZWluZy4gVGhlcmUgd2VyZSBvcGVuIHF1ZXN0aW9ucyByZWdhcmRpbmcKLQkgIHBvcnRhYmlsaXR5IGFuZCBiaW5kaW5nLWZyaWVuZGxpbmVzcyB0b28uCi0JICBUaGlzIGFsc28gcmVtb3ZlcyB0aGUgZ2lvIGRlcGVuZGVuY3kgb2YgLWJhc2UgYWdhaW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5OTUxCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5OTQ5Ci0KLTIwMTQtMDUtMTMgMTk6MTQ6MDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy50eXBlczoKLQkgIGRvY3M6IHBpY2sgdXAgR3N0QmFzZVBhcnNlIGhpZXJhcmNoeSBhbmQgcHJvcGVydGllcwotCi0yMDE0LTA1LTEzIDE5OjEwOjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgZG9jczogZXhwb3NlIEdzdFB1c2hTcmNDbGFzcyBpbiBkb2N1bWVudGF0aW9uCi0JICBNaWdodCBjb21lIGluIGhhbmR5IGluIGNhc2Ugc29tZW9uZSB3YW50cyB0byBkZXJpdmUgZnJvbSBpdC4KLQotMjAxNC0wNS0xMiAxNzowMzo0NiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSAgcGx1Z2lubG9hZGVyOiBEb24ndCBsZWFrIHBsdWdpbmxvYWRlciBpbiBlcnJvciBjYXNlcwotCSAgQ0lEICMxMjEyMTU0Ci0KLTIwMTQtMDUtMTIgMTY6NTk6MjkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBEb24ndCBsZWFrIGZlYXR1cmVzIG9uIGVycm9yIGNhc2VzCi0JICBJZiB3ZSBmYWlsIHRvIHBhcnNlIGZpZWxkcywgd2Ugd291bGQgZW5kIHVwIGxlYWtpbmcgdGhlIGZlYXR1cmVzIHdlCi0JICBwYXJzZWQganVzdCBiZWZvcmUKLQkgIENJRCAjMTIxMjE1MgotCi0yMDE0LTA1LTA5IDE0OjI4OjU5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogQ29ycmVjdGx5IHJlc2V0IGNvbmZpZ3VyYXRpb24KLQkgIFdoZW4gcG9vbCBjYW4ndCB3ZSB1c2UsIGFuZCB3ZSBmYWxsIGJhY2sgdG8gZGVmYXVsdCBwb29sLCB3ZSBuZWVkIHRvCi0JICBjb3JyZWN0bHkgcmVzZXQgdGhhdCBwb29sIGNvbmZpZ3VyYXRpb24uCi0KLTIwMTQtMDUtMDkgMTQ6NDY6NTkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIG5ldHRpbWVwcm92aWRlcjogVXNlIG5vbi1mcmVlZCB2YXJpYWJsZQotCSAgYWRkcmVzcyBpcyBvbmx5IHVzZWQgdGVtcG9yYXJpbHkuIFVzZSB0aGUgcHJvcGVyIHZhcmlhYmxlIGluc3RlYWQuCi0JICBDSUQgIzEyMTIxODkKLQotMjAxNC0wNS0wOCAxNzozMzozNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkgIHRlc3RzOiBtdWx0aXF1ZXVlOiB0ZXN0IHRvIGNoZWNrIHF1ZXVlIG92ZXJydW4gd2l0aCBwdHM9bm9uZQotCSAgQ2hlY2tzIGlmIGJ1ZmZlcnMgd2l0aCBwdHM9bm9uZSBjYW4gYnJlYWsgdGhlIHF1ZXVlIHRpbWUgc2l6ZSBsaW1pdAotCSAgYW5kIGFsbG93IG1vcmUgYnVmZmVycyB0aGFuIGV4cGVjdGVkCi0KLTIwMTQtMDUtMDggMTQ6NDg6MDAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOgotCSAgZG93bmxvYWRidWZmZXI6IEZpeCAzMmJpdCBidWlsZAotCSAgZm9ybWF0ICclbGxpJyBleHBlY3RzIGFyZ3VtZW50IG9mIHR5cGUgJ2xvbmcgbG9uZyBpbnQnLCBidXQgYXJndW1lbnQgOCBoYXMgdHlwZSAnZ3NpemUnCi0KLTIwMTQtMDUtMDggMTQ6MTI6MTYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBwb29sLW5lZ286IENvcnJlY3RseSByZXNldCB0aGUgY29uZmlndXJhdGlvbgotCSAgV2hlbiBwb29sIGNhbm5vdCBiZSB1c2VkLCBjb3JyZWN0bHkgcmVzZXQgdGhlIGNvbmZpZ3VyYXRpb24gYmVmb3JlCi0JICBjb25maWd1cmF0aW9uIGEgZGVmYXVsdCBwb29sLgotCi0yMDE0LTA0LTE1IDE0OjE3OjAwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBwb29sLW5lZ286IFJldHJ5IHNldHRpbmcgY29uZmlndXJhdGlvbiB3aXRoIG1vZGlmaWVkIGNvbmZpZwotCSAgQnVmZmVyIHBvb2wgc2V0X2NvbmZpZygpIG1heSByZXR1cm4gRkFMU0UgaWYgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24gbmVlZGVkCi0JICBzbWFsbCBjaGFuZ2VzLiBSZWdldCB0aGUgY29uZmlnIGFuZCB0cnkgc2V0dGluZyBpdCBhZ2FpbiAodmFsaWRhdGluZyB0aGUKLQkgIGNoYW5nZXMgZmlyc3QpLiBUaGlzIGVuc3VyZSB3ZSBoYXZlIGEgY29uZmlndXJlZCBwb29sIGlmIHBvc3NpYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzkxNgotCi0yMDE0LTA1LTA4IDEyOjQ3OjQzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGJ1ZmZlcnBvb2w6IEFkZCBhbiBoZWxwZXIgdG8gdmFsaWRhdGUgY29uZmlnCi0JICBXaGVuIHdlIGNhbGwgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcoKSB0aGUgcG9vbCBtYXkgcmV0dXJuIEZBTFNFIGFuZAotCSAgc2xpZ2h0bHkgY2hhbmdlIHRoZSBwYXJhbWV0ZXJzLiBUaGlzIGhlbHBlciBpcyB1c2VmdWwgdG8gZG8gdGhlIG1pbmlhbCByZXF1aXJlZAotCSAgdmFsaWRhdGlvbiBiZWZvcmUgYWNjZXB0aW5nIHRoZSBtb2RpZmllZCBjb25maWd1cmF0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzkxNgotCi0yMDE0LTA0LTA4IDE5OjI3OjU1IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBVcGRhdGUgdGhlIGNvbmZpZ3VyZSBldmVuIGlmIHNldF9jb25maWcoKSByZXR1cm5lZCBmYWxzZQotCSAgQWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uLCB3aGVuIHNldF9jb25maWcoKSByZXR1cm4gZmFsc2UsIGl0IHNob3VsZCBiZQotCSAgcG9zc2libGUgdG8gcmVhZCB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgY29uZmlnLiBUaGlzIHBhdGNoIGZpeGVzIHRoZQotCSAgaW1wbGVtZW50YXRpb24gc28gaXQgaXMgbm93IGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc5MTYKLQotMjAxNC0wNS0wNiAxNTozNToxNCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogQWRkIHN1cHBvcnQgZm9yIHJlY29uZmlndXJpbmcgYSBwb29sCi0JICBJZiBhIHBvb2wgY29uZmlnIGlzIGJlaW5nIGNvbmZpZ3VyZWQgYWdhaW4sIGNoZWNrIGlmIHRoZSBjb25maWd1cmF0aW9uIGhhdmUgY2hhbmdlZC4KLQkgIElmIG5vdCwgc2tpcCB0aGF0IHN0ZXAuIEZpbmFsbHksIGlmIHRoZSBwb29sIGlzIGFjdGl2ZSwgdHJ5IGRlYWN0aXZhdGluZyBpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjgyNjgKLQotMjAxNC0wNS0wNiAxNjo1OTozNCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogQWRkIHN1cHBvcnQgZm9yIEdzdEFsbG9jYXRpb25QYXJhbXMgY29tcGFyaXNpb24KLQkgIFRoaXMgaXMgdXNlZnVsIHRvIGNvbXBhcmUgYnVmZmVyIHBvb2wgY29uZmlndWFyYXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MjY4Ci0KLTIwMTQtMDUtMDYgMTY6NDY6NTUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IEFkZCBzdXBwb3J0IGZvciBHT2JqZWN0IGNvbXBhcmlzaW5nIGluIHN0cnVjdHVyZXMKLQkgIFRoaXMgaXMgdXNlZnVsIHRvIGFsbG93IGNvbXBhcmluZyBwb29sIGNvbmZpZ3VyYXRpb24gd2hlcmUgYSBHc3RBbGxvY2F0b3IKLQkgIGlzIHNldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjgyNjgKLQotMjAxNC0wNS0wOCAxNzo1MDo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgcGx1Z2luOiBmaXggY2FzZSB3aGVyZSBnc3RfcGx1Z2luX2xvYWRfZmlsZSgpIGRpZG4ndCBzZXQgdGhlIGVycm9yIG9uIGZhaWx1cmUKLQotMjAxNC0wNS0wOCAxNjozMDo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RzcGFyc2VmaWxlLmM6Ci0JICBzcGFyc2VmaWxlOiBhZGQgc29tZSBTaW5jZSBtYXJrZXJzIHRvIGRvY3MKLQotMjAxNC0wNS0wOCAxNjoyNTo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RzcGFyc2VmaWxlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHNwYXJzZWZpbGUuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkgIHNwYXJzZWZpbGU6IHNwcmlua2xlIEdfQkVHSU5fREVDTFMgLyBHX0VORF9ERUNMUwotCSAgZm9yIGMrKywgYW5kIHJlbW92ZSBvdXRkYXRlZCBjb21tZW50LCBhbmQgYWRkCi0JICBuZXcgdW5pdCB0ZXN0IHRvIC5naXRpZ25vcmUuCi0KLTIwMTQtMDUtMDggMTY6NDk6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmM6Ci0JICBkb3dubG9hZGJ1ZmZlcjogc21hbGwgY2xlYW51cHMKLQotMjAxNC0wNS0wOCAxNDo1MToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOgotCSAgZG93bmxvYWRidWZmZXI6IHVwZGF0ZSBkb2NzCi0KLTIwMTQtMDUtMDggMTQ6NTA6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICB3aW4zMjogdXBkYXRlIGRlZgotCi0yMDE0LTAyLTIxIDE2OjMyOjUyICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0c3BhcnNlZmlsZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RzcGFyc2VmaWxlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3NwYXJzZWZpbGUuYzoKLQkgIEFkZCBuZXcgZG93bmxvYWRidWZmZXIgZWxlbWVudAotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODAxODMKLQotMjAxNC0wNS0wMiAxNzo0Mjo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgcGFkczogdXBkYXRlIGRvY3MgZm9yIHJlcXVlc3QgcGFkcwotCSAgV2Ugd291bGQgbGlrZSB0byBlbmNvdXJhZ2UgdGhlIHVzZSBvZiBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCgpCi0KLTIwMTQtMDUtMDIgMTc6MDI6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmM6Ci0JICBjaGVjazogdXNlIF9leGl0KCkgaW5zdGVhZCBvZiBleGl0KCkgaW4gZmFpbF91bmxlc3MoKSBzbyB3ZSBleGl0IGltbWVkaWF0ZWx5Ci0JICBleGl0KCkgd2lsbCBjYWxsIGF0ZXhpdCBoYW5kbGVycywgd2hpY2ggbWF5IHRyeSB0bwotCSAgY2xlYW4gdXAgdGhpbmdzIG9yIHdhaXQgZm9yIHRoaW5ncyB0byBnZXQgY2xlYW5lZCB1cCwKLQkgIHdoaWNoIHdlIGRvbid0IHdhbnQgb3IgbmVlZC4gV2UganVzdCB3YW50IHRvIHN0b3AKLQkgIGFuZCBsZXQgdGhlIHBhcmVudCBrbm93IGFib3V0IHRoZSBmYWlsdXJlIGFzIHF1aWNrbHkKLQkgIGFzIHBvc3NpYmxlIGluIGNhc2UgZm9yaygpIGlzIHVzZWQuCi0JICBGaXhlcyB0aW1lb3V0cyBvbiBhc3NlcnQgZmFpbHVyZXMgaW4gY2hlY2tzIHdoZXJlCi0JICBhbiBleGl0IGhhbmRsZXIgd2FpdHMgZm9yIHRoaW5ncyB0byBzdG9wLCBidXQgdGhleQotCSAgZG9uJ3Qgc3RvcCBiZWNhdXNlIHRoZXkgaGF2ZW4ndCBiZWVuIHNodXQgZG93biwKLQkgIGFuZCB0aGV5IGhhdmVuJ3QgYmVlbiBzaHV0IGRvd24gYmVjYXVzZSB0aGVyZSdzIG5vCi0JICBzaW1wbGUgd2F5IHRvIGRvIHNvIG9uIGZhaWx1cmVzLgotCSAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL2NoZWNrL3BhdGNoZXMvNTAvCi0KLTIwMTQtMDUtMDQgMTQ6NTI6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IGluaXQgZmxhZyBtYXNrIG1vcmUgY29ycmVjdGx5Ci0KLTIwMTQtMDUtMDQgMTM6MzI6NDYgKzAwMDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IGdfbWVtbW92ZSgpIGlzIGRlcHJlY2F0ZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI4MTEKLQotMjAxNC0wNS0wMyAyMDo0ODoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjMuMSA9PT0KLQotMjAxNC0wNS0wMyAxNzo0MTo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuMy4xCi0KLTIwMTQtMDUtMDMgMTc6MzQ6MDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNC0wNS0wMyAxNzoyMDo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNC0wNS0wMyAxMjoxNDo0MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgIGRvY3M6IGFkZCBuZXcgZGV2aWNlIHByb2JpbmcgQVBJIHRvIGRvY3MgdGFibGUgb2YgY29udGVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk0NDAKLQotMjAxNC0wNS0wMiAyMjoyMjowMyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2M6IEFkZCBHc3REZXZpY2UqIHRvIGdzdHJlYW1lci1zZWN0aW9ucy50eHQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk0NDAKLQotMjAxNC0wNS0wMyAxMDoxNDo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGJjYjE1MTggdG8gMjExZmE1ZgotCi0yMDE0LTA1LTAxIDEwOjM3OjE4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IEFsd2F5cyByZW5kZXIgcHJlcGFyZWQgYnVmZmVyCi0JICBDdXJyZW50bHksIGlmIHByZXBhcmUoKSB0YWtlcyB0b28gbXVjaCB0aW1lLCB3ZSBza2lwIHRoZSBjYWxsIHRvIHJlbmRlcigpLgotCSAgVGhlIHNpZGUgZWZmZWN0IG9mIHRoaXMsIGlzIHRoYXQgd2UgZW5kdXAgc3RhcnZpbmcgdGhlIHJlbmRlcigpLiBUaGUgc29sdXRpb24KLQkgIGluIHRoaXMgcGF0Y2ggaXMgdG8gYWx3YXlzIHJlbmRlciBmcmFtZXMgdGhhdCBhcmUgb24gdGltZSBiZWZvcmUgcHJlcGFyZSgpIGlzCi0JICBleGVjdXRlZC4gVGhpcyB3aWxsIG1heGltaXplIHRoZSBudW1iZXIgb2YgZnJhbWVzIHdlIGRpc3BsYXkgYW5kIHNtb290aGx5Ci0JICBkZWdyYWRlIHRoZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MzM1Ci0KLTIwMTQtMDUtMDEgMTQ6NTI6MjQgLTA0MDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIHNjcmlwdHMvZ2l0LXZlcnNpb24uc2g6Ci0JICBzY3JpcHRzL2dpdC12ZXJzaW9uLnNoOiBhZGQgbW9yZSBtb2R1bGVzCi0JICBBZGQgbW9yZSBnaXQgcmVwb3NpdG9yaWVzIHRvIGNoZWNrIChzbyBnaXQtdmVyc2lvbi5zaCBpcyBjb25zaXN0ZW50IHdpdGgKLQkgIGdzdC11bmluc3RhbGxlZCkgYW5kIGRpc3BsYXkgdGhlIGRhdGUgb2YgdGhlIGxhc3QgY29tbWl0LCB3aGljaCBpcyBtb3JlIHZhbHVhYmxlCi0JICBpbmZvcm1hdGlvbiB0aGFuIHRoZSBsYXN0IGNvbW1pdCdzIGhhc2guCi0KLTIwMTQtMDUtMDEgMTg6NDI6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogQWx3YXlzIGZpcnN0IHBvc3QgdGhlIHN0YXRlLWNoYW5nZWQgbWVzc2FnZSBmb3IgUEFVU0VELT5SRUFEWSBiZWZvcmUgcG9zdGluZyBhbnkgcGVuZGluZyBFT1MgbWVzc2FnZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzk0OQotCi0yMDE0LTA0LTE3IDIxOjEwOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogQWRkIHRlc3QgZm9yIGNoZWNraW5nIHRoYXQgRU9TIGFsd2F5cyBjb21lcyBhZnRlciB0aGUgc3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc5NDkKLQotMjAxNC0wNC0xNSAxNTo1NToyNSArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBmaXggbG9nIG1lc3NhZ2Ugb2YgYnVmZmVyIHBvaW50ZXIKLQotMjAxNC0wNC0zMCAxODoyMDoyOCAtMDQwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogc2NyaXB0cy9naXQtdmVyc2lvbi5zaDoKLQkgIHNjcmlwdHMvZ2l0LXZlcnNpb24uc2g6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQotMjAxNC0wNC0zMCAxMDo0NzoxOSAtMDQwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogc2NyaXB0cy9naXQtdmVyc2lvbi5zaDoKLQkgIHNjcmlwdHMvZ2l0LXZlcnNpb24uc2g6IGZpeCBtaXN0YWtlbiBjb21tZW50cwotCi0yMDE0LTA0LTI4IDEzOjAyOjExIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBhdm9pZCBzaWduYWxpbmcgb3ZlcnJ1biBvbiB0aGUgZmlyc3Qgc2VnbWVudAotCSAgV2hlbiB0aGUgZmlyc3Qgc2VnbWVudCBoYXMgcG9zaXRpb24gIT0gMCBhbmQgcG9zaXRpb24gPiBtYXgtc2l6ZS10aW1lCi0JICBpdCB3aWxsIGltbWVkaWF0ZWxseSBjYXVzZSB0aGUgbXVsdGlxdWV1ZSB0byBzaWduYWwgb3ZlcnJ1bi4KLQkgIFRoaXMgY2FuIGhhcHBlbiBlYXNpbHkgd2l0aCBhZGFwdGl2ZSBzdHJlYW1zIHdoZW4gc3dpdGNoaW5nIGJpdHJhdGVzCi0JICBhbmQgc3RhcnRpbmcgYSBuZXcgZ3JvdXAuIFRoZSBzZWdtZW50IGZvciB0aGlzIG5ldyBncm91cCB3aWxsIGhhdmUKLQkgIGEgcG9zaXRpb24gdGhhdCBpcyBtdWNoIGdyZWF0ZXIgdGhhbiAwIGFuZCB3aWxsIGxlYWQgdG8gdGhpcyBpc3N1ZS4KLQkgIFRoaXMgaXMgcGFydGljdWxhcmx5IGhhcm1mdWwgd2hlbiB0aGUgYWRhcHRpdmUgc3RyZWFtIHVzZXMgbXBlZ3RzCi0JICB0aGF0IGRvZXNuJ3QgZW1pdCBuby1tb3JlLXBhZHMgYW5kIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IG9ubHkgb25lCi0JICBvZiB0aGUgc3RyZWFtIHBhZHMgd2FzIGFkZGVkIHdoZW4gdGhlIG11bHRpcXVldWUgb3ZlcnJ1bnMgYW5kIGdldHMKLQkgIHRoZSBncm91cCByZWFkeSBmb3IgZXhwb3NpbmcuIFNvIHRoZSB1c2VyIHdpbGwgb25seSBnZXQgYXVkaW8gb3IKLQkgIHZpZGVvLgotCSAgVGhlIHNvbHV0aW9uIGlzIHRvIGZhbGxiYWNrIHRvIHRoZSBzaW5rIHNlZ21lbnQgd2hpbGUgdGhlIHNvdXJjZSBwYWQKLQkgIGhhcyBubyBzZWdtZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTEyNAotCi0yMDE0LTA0LTI4IDEwOjE0OjUwICswMjAwICBYYXZpIEFydGlnYXMgPHhhcnRpZ2FzQGZsdWVuZG8uY29tPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBkb2NzOiBlbmhhbmNlbWVudHMgdG8gcG9ydGluZyBndWlkZSBkb2N1bWVudGF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3NzU0Ci0KLTIwMTQtMDQtMjggMDk6NDM6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcXVlcnk6IEFkZCBib29sZWFuIHRvIFVSSSBxdWVyeSB0byBzcGVjaWZ5IGlmIGEgcmVkaXJlY3QgaXMgcGVybWFuZW50IG9yIG5vdAotCi0yMDE0LTA0LTI1IDA3OjM4OjAwICswMDAwICBTcmltYW50YSBQYW5kYSA8cGFuZGFfc3JpbWFudGFAeWFob28uY28uaW4+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JICBmdW5uZWw6IENoZWNrIGlmIHRoZSBsYXN0IHBhZCB3YXMgc2V0Ci0JICBJZiBubyBkYXRhIGlzIGNvbWluZyBidXQgb25seSBFT1MgaXMgc2VudCBmcm9tIGFsbCBvZiB0aGUgc2lua3BhZCwgaXQgaXMgbm90Ci0JICBmb3J3YXJkaW5nIHRoZSBFT1MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3OTQ1Ci0KLTIwMTQtMDQtMjYgMTc6MDI6MTggKzAxMDAgIEZlbGlwZSBPcnRpeiA8ZmFvcnRpemNAZ21haWwuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhZC5oOgotCSAgZG9jczogYWRkIGRvY3MgZm9yIHZhcmlvdXMgR3N0UGFkIG1hY3JvcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzY1MgotCi0yMDE0LTA0LTI2IDIzOjEyOjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhZC5oOgotCSAgUmV2ZXJ0ICJkb2NzOiBhZGQgZG9jcyBmb3IgdmFyaW91cyBHc3RQYWQgbWFjcm9zIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBkMTc0MzhkNWZkMzIxZGFlYzRhZGJlYjI4YThmYjVkNWUwNzI5OGRjLgotCSAgVGhpcyBjb21taXQgZmVhdHVyZWQgdGhlIHdyb25nIGF1dGhvciwgc29ycnkuCi0KLTIwMTQtMDQtMjYgMjE6MjE6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvUkVBRE1FOgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGFsbG9jYXRvci5jOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZXJyb3IuYzoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RzYW1wbGUuYzoKLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFza3Bvb2wuYzoKLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIGRvY3M6IHJlbW92ZSBvdXRkYXRlZCBhbmQgcG9pbnRsZXNzICdMYXN0IHJldmlld2VkJyBsaW5lcyBmcm9tIGRvY3MKLQkgIFRoZXkgYXJlIHZlcnkgY29uZnVzaW5nIGZvciBwZW9wbGUsIGFuZCBtb3JlIG9mdGVuIHRoYW4gbm90Ci0JICBhbHNvIGp1c3Qgbm90IHZlcnkgYWNjdXJhdGUuIFNlZWluZyAnbGFzdCByZXZpZXdlZDogMjAwNScgaW4KLQkgIHlvdXIgZG9jcyBpcyBub3QgdmVyeSBjb25maWRlbmNlLWluc3BpcmluZy4gTGV0J3MganVzdCByZW1vdmUKLQkgIHRob3NlIGNvbW1lbnRzLgotCi0yMDE0LTAzLTI2IDE1OjU2OjA4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXI6IE9ubHkgc2V0IFRBR19NRU1PUlkgaWYgdGhlIG1lbW9yeSBoYXMgYmVlbiByZXBsYWNlZAotCSAgQ3VycmVudGx5IHdlIHNldCBUQUdfTUVNT1JZIGFzIHNvb24gYSByZXNpemUgY2hhbmdlcyB0aGUgc2l6ZSBvZiBvbmUKLQkgIG9mIHRoZSBtZW1vcnkuIFRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCB0aGF0IGJ1ZmZlciBwb29sIGNhbm5vdCBrbm93IGlmCi0JICB0aGUgbWVtb3J5IGhhdmUgc2ltcGx5IGJlZW4gcmVzaXplZCwgb3IgaWYgdGhlIG1lbW9yeXMgaGFzIGJlZW4gcmVwbGFjZWQuCi0JICBUaGlzIG1ha2UgaXQgaGFyZCB0byBhY3R1YWxseSBpbXBsZW1lbnQgX3Jlc2V0KCkuIEluc3RlYWQsIG9ubHkgc2V0IHRoZQotCSAgVEFHX01FTU9SWSBpZiBvbmUgb3IgbW9yZSBtZW1vcnkgaGFzIGJlZW4gcmVwbGFjZWQsIGFuZCBkbyBhIGxpZ2h0Ci0JICBzYW5pdHkgY2hlY2sgb2YgdGhlIHNpemUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MTA5Ci0KLTIwMTQtMDQtMjYgMTc6MDI6MTggKzAxMDAgIFNob3dheWIgWmFoZGEgPHNob3dheWIuemFoZGFAYXhpcy5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBkb2NzOiBhZGQgZG9jcyBmb3IgdmFyaW91cyBHc3RQYWQgbWFjcm9zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzNjUyCi0KLTIwMTQtMDQtMjUgMTU6Mzg6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogV2hlbiBnb2luZyB0byBSRUFEWSBtYWtlIHN1cmUgdG8gYWx3YXlzIGRlYWN0aXZhdGUgcGFkcwotCSAgV2UgbWlnaHQgbm90IGhhdmUgcmVhY2hlZCBQQVVTRUQgeWV0IGJlY2F1c2Ugb2YgYW4gYXN5bmMgZXJyb3IsCi0JICBidXQgbm9uZXRoZWxlc3Mgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcGFkcyBhcmUgYWx3YXlzCi0JICBkZWFjdGl2YXRlZCBpbiBSRUFEWSBzdGF0ZS4KLQotMjAxNC0wNC0yMiAxODoyMzoxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBEb24ndCBsZWZ0LXNoaWZ0IGludG8gdGhlIHNpZ24gYml0LCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZAotCi0yMDE0LTA0LTIyIDE4OjE2OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBVc2UgYW4gdW5zaWduZWQgNjQgYml0IGludGVnZXIgYXMgYSBtYXNrCi0JICBXZSBzaGlmdCB0aGUgbWFzayB0byB0aGUgcmlnaHQgbGF0ZXIgYW5kIHNoaWZ0aW5nIHRoZSByZXN1bHQKLQkgIG9mIHNoaWZ0aW5nIG92ZXIgdGhlIHNpZ24gYml0IGlzIHVuZGVmaW5lZC4KLQotMjAxNC0wNC0yMCAxMTo1OTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBNYWtlIHN1cmUgdG8gYWx3YXlzIGhvbGQgdGhlIExJVkVfTE9DSyB3aGVuIGdvaW5nIHRvIHRoZSBmbHVzaGluZyBsYWJlbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyODU5NgotCi0yMDE0LTA0LTExIDE5OjUyOjAyICswMjAwICBTcmltYW50YSBQYW5kYSA8c3JpbWFudGFAYXhpcy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkgIGZ1bm5lbDogSGFuZGxlIGVuZCBvZiBzdHJlYW0gZXZlbnQgb24gc2luayBwYWQKLQkgIEhhbmRsZSBlbmQgb2Ygc3RyZWFtIGV2ZW50cyBvbiBzaW5rIHBhZC4gQ2hlY2sgYWxsIHRoZSBzaW5rIHBhZAotCSAgaGFzIHJlY2VpdmVkIGVvcyBiZWZvcmUgZm9yd2FyZGluZyB0byBzb3VyY2UgcGFkLgotCSAgRml4ZXMgOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3OTQ1Ci0KLTIwMTQtMDQtMDUgMTE6Mzc6NTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBQcmV2ZW50IGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvCi0JICBUaGUgc3RlcCBjYW4gZW5kIHVwIGJlaW5nIHplcm8gaWYgdGhlIHVuZGVybHlpbmcgdmFsdWUgaXNuJ3QgYSB2YWxpZAotCSAgcmFuZ2UgR1ZhbHVlLgotCSAgSW4gdGhvc2UgY2FzZXMsIHJldHVybiBGQUxTRS4KLQkgIFdlIGRvbid0IHVzZSBnX3JldHVybipfaWZfZmFpbCBzaW5jZSBpdCB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHRyaWdnZXJlZAotCSAgYnkgdGhlIGFib3ZlLW1lbnRpb25uZWQgX2dldF9zdGVwKCkgZnVuY3Rpb25zLgotCSAgQ0lEICMxMDM3MTMyCi0KLTIwMTQtMDQtMDkgMTY6NDQ6MDcgKzAyMDAgIEFudG9pbmUgSmFjb3V0b3QgPGFqYWNvdXRvdEBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBsaWJzOiBnLWlyLXNjYW5uZXI6IGRvIG5vdCBoYXJkY29kZSBsaWJ0b29sIHBhdGgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY1NzEKLQotMjAxNC0wNC0xNiAxOTo0OTo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5L2J1ZmZlcjogSW5pdGlhbGlzZSBHc3RNYXBJbmZvIHRvIHplcm9lcyBpZiBtYXBwaW5nIGZhaWxzCi0JICBUaGlzIHNob3VsZCBhbGxvdyBmb3IgbW9yZSBtZWFuaW5nZnVsIGVycm9ycy4gRGVyZWZlcmVuY2luZyBOVUxMCi0JICBpcyBtb3JlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0aGFuIGRlcmVmZXJlbmNpbmcgYSByYW5kb20gYWRkcmVzcwotCSAgaGFwcGVuZWQgdG8gYmUgb24gdGhlIHN0YWNrLgotCi0yMDE0LTA0LTE2IDE3OjQ5OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JICBwcmVzZXQ6IFVucmVmIHJldHVybiB2YWx1ZSBvZiBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4KCkgaW5zdGVhZCBvZiBsZWFraW5nIGl0Ci0KLTIwMTQtMDQtMTYgMTc6NDg6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIHByZXNldDogQXV0b21hdGljIGNvZGUgc3R5bGUgZml4ZXMKLQotMjAxNC0wNC0xNiAxNToxNzowNCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBmaXggZXZlbnQvcHJlcm9sbCBkZWFkbG9jayBkaWZmZXJlbnRseQotCSAgVGhlIHFsb2NrIGlzIHJlbGVhc2VkIGJldHdlZW4gcG9wcGluZyBhIGJ1ZmZlciBmcm9tIHRoZSBxdWV1ZQotCSAgYW5kIHB1c2hpbmcgaXQuIFdoZW4gdGhpcyBidWZmZXIgY2F1c2VzIHRoZSBzaW5rIHRvIHdhaXQgaW4KLQkgIHByZXJvbGwsIHRoaXMgbGV0cyBhIHF1ZXJ5IHNlZSB0aGF0IHRoZSBxdWV1ZSBpcyBlbXB0eSwgYW5kCi0JICBwdXNoIHRoZSBxdWVyeSB0aGVuIHdhaXQgZm9yIGl0IHRvIGJlIHNlcnZpY2VkLiBIb3dldmVyLCB0aGlzCi0JICB3aWxsIG5vdCBiZSBkb25lIHRpbGwgYWZ0ZXIgcGVyb2xsLCBhbmQgdGhpcyB3aWxsIHRodXMgYmxvY2suCi0JICBJZiB1cHN0cmVhbSB3YXMgd2FpdGluZyBvbiBidWZmZXJpbmcgdG8gcmVhY2ggMTAwJSBiZWZvcmUKLQkgIHN3aXRjaGluZyB0byBQTEFZSU5HLCBhIGRlYWRsb2NrIHdvdWxkIGVuc3VlLgotCSAgVGhpcyBoYWQgYmVlbiBmaXhlZCByZWNlbnRseSBieSBmYWlsaW5nIHF1ZXJpZXMgd2hlbiB0aGUKLQkgIHF1ZXVlMiB3YXMgYnVmZmVyaW5nLCBidXQgdGhpcyBoYXBwZW5zIHRvIGJyZWFrIHNvbWUgb3RoZXIKLQkgIGNhc2UgKHBsYXliaW4gb24gYSBsb2NhbCBodHRwIHNlcnZlciBhbmQgbWF0cm9za2EpLCB3aGlsZQotCSAgdGhpcyBwYXRjaCB3b3JrcyBmb3IgYm90aC4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MzQ1Ci0KLTIwMTQtMDQtMTYgMDc6NTk6MjcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGNoZWNrOiBGaXggZXhwb3J0ZWQgc3ltYm9sIG5hbWUKLQkgIGl0J3MgX3RlbXBsYXRlIGFuZCBub3QgX3RlbXBsCi0KLTIwMTQtMDQtMTUgMjE6MTY6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogQWRkIG1pc3Npbmcgc3BhY2UgaW4gZGVidWcgb3V0cHV0Ci0KLTIwMTQtMDQtMTUgMTI6NTg6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBjaGVjazogQWRkIG5ldyBBUEkgdG8gc2V0IHVwIHBhZHMgZnJvbSBub24tc3RhdGljIHBhZCB0ZW1wbGF0ZXMKLQotMjAxNC0wNC0xNCAyMTozNTo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IEZpeCBtZW1vcnkgbGVhayBpbiB1bml0IHRlc3QKLQotMjAxNC0wNC0xMiAxNToyMjozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5oOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3R0ZXN0Y2xvY2suYzoKLQkgIHRlc3RjbG9jazogcmVwbGFjZSBuZXdseS1hZGRlZCBHc3RUZXN0Q2xvY2tJRExpc3Qgc3RydWN0dXJlIHdpdGggYSBzaW1wbGUgR0xpc3QKLQkgIEtlZXAgaXQgc2ltcGxlLiBMaWtlbHkgYWxzbyBtYWtlcyB0aGluZ3MgZWFzaWVyIGZvciBiaW5kaW5ncywKLQkgIGFuZCBlZmZpY2llbmN5IGNsZWFybHkgaGFzIG5vdCBiZWVuIGEgY29uc2lkZXJhdGlvbiBnaXZlbiBob3cKLQkgIHRoZSBleGlzdGluZyBjb2RlIGhhbmRsZWQgdGhlc2UgbGlzdHMuCi0KLTIwMTQtMDQtMTIgMTQ6MzA6NDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmg6Ci0JICBkb2NzOiB0ZXN0Y2xvY2s6IGZpeCB1cCBTaW5jZSBtYXJrZXJzCi0KLTIwMTQtMDQtMTIgMDA6Mjg6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suaDoKLQkgIHRlc3RjbG9jazogYWRkIGJhY2sgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfcGVuZGluZ19pZF9jb3VudCgpCi0JICAuLiBidXQgZGVwcmVjYXRlIGl0LiBBQkkgc3RhYmlsaXR5IGFuZCBhbGwgdGhhdC4KLQkgIEl0J3MgYSBkYW5nZXJvdXMgYW5kIHJhY3kgZnVuY3Rpb24gdG8gdXNlLgotCi0yMDE0LTAzLTIzIDE1OjA4OjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suYzoKLQkgIHRlc3RjbG9jazogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCSAgRml4ZXMgY29tcGlsZXIgd2FybmluZy4KLQotMjAxMy0xMi0xNiAxMDowMTozNyArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdHRlc3RjbG9jay5jOgotCSAgdGVzdGNsb2NrOiBhZGQgc3VwcG9ydCBmb3Igd2FpdGluZyBhbmQgcmVsZWFzaW5nIG11bHRpcGxlIEdzdENsb2NrSURzCi0JICBJbiBvcmRlciB0byBiZSBkZXRlcm1pbmlzdGljLCBtdWx0aXBsZSB3YWl0aW5nIEdzdENsb2NrSURzIG5lZWRzIHRvIGJlCi0JICByZWxlYXNlZCBhdCB0aGUgc2FtZSB0aW1lLCBvciBlbHNlIG9uZSBjYW4gZ2V0IGludG8gdGhlIHNpdHVhdGlvbiB0aGF0Ci0JICB0aGUgb25lIGJlaW5nIHJlbGVhc2VkIGZpcnN0IGNhbiBhZGQgaXRzZWxmIGJhY2sgYWdhaW4gYmVmb3JlIHRoZSBuZXh0Ci0JICBvbmUgd2FpdGluZyBpcyByZWxlYXNlZC4KLQkgIFRlc3QgYWRkZWQgZm9yIG5ldyBBUEkgYW5kIG9sZCB0ZXN0cyByZXdyaXR0ZW4gdG8gY29tcGx5LgotCi0yMDE0LTA0LTAxIDE1OjM4OjU0ICswMjAwICBMaW51cyBTdmVuc3NvbiA8bGludXNzbkBheGlzLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBkb24ndCBhY2Nlc3MgdW5vd25lZCBhbmQgcG9zc2libHkgYWxyZWFkeSBmcmVlZCBldmVudAotCSAgRG9uJ3QgcHJpbnQgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IHdoZW4gb3duZXJzaGlwIGlzIGdpdmVuIGF3YXkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3NDg0Ci0KLTIwMTQtMDQtMTIgMDc6MTM6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgaW5zcGVjdDogcHJpbnQgc3RydWN0dXJlIHZhbHVlcyBvZiBwcm9wZXJ0aWVzCi0KLTIwMTQtMDQtMTEgMjI6Mzg6MjUgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0LXNlbGVjdG9yOiBIb2xkIHBhZCBvYmplY3QgbG9jayB3aGVuIGNoYW5naW5nIHRhZ3MKLQkgIEF2b2lkIHNwdXJpb3VzIGNyYXNoZXMgd2hlbiB0YWdzIGFyZSByZXRyaWV2ZWQganVzdCBhcwotCSAgbmV3IG9uZXMgYXJyaXZlLgotCi0yMDE0LTA0LTExIDEzOjQ1OjIxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBnc3RidWZmZXI6IEZpeCByYW5nZSBpdGVyYXRpb24KLQkgIFdlIHdhbnQgdG8gaXRlcmF0ZSBvdmVyIGl0ZW1zIGlkeCB0byBpZHggKyBsZW5ndGgKLQkgIFdlIHVzZSB0aGUgbGVuIHZhcmlhYmxlIGFzIHRoZSBjb3JyZWN0ZWQgbnVtYmVyIG9mIG1lbW9yeSB0byBpdGVyYXRlCi0JICBhbmQgdGhlbiBwcm9wZXJseSBnbyBvdmVyIGFsbCBpdGVtcy4KLQkgIEZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzcGVjaWZ5aW5nIGFueSBpZHggZGlmZmVyZW50IGZyb20gMCBoYWQgbm8gZWZmZWN0Ci0JICBTcG90dGVkIGJ5IGNsYW5nIHN0YXRpYyBhbmFseXplcgotCi0yMDE0LTA0LTA5IDE3OjAxOjAxICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBlcnJvciBvdXQgd2hlbiB0cnlpbmcgdG8gZml4YXRlIGEgZnJhY3Rpb24gbmVhciBhbiBpbnZhbGlkIHRhcmdldAotCi0yMDE0LTA0LTA0IDE3OjI4OjIzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBVcGRhdGUgcnVubmluZyB0aW1lIGluIFFvUyBiYXNlZCBvbiB0aGUgcGFkIG9mZnNldHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjI2OTcKLQotMjAxNC0wNC0wNCAxNzoxNToyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBBcHBseSBwYWQgb2Zmc2V0cyBvbiBhbGwgZXZlbnRzLCBub3QganVzdCBzZWdtZW50IGV2ZW50cwotCi0yMDE0LTA0LTA0IDE3OjA2OjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZXZlbnQ6IEFkZCBydW5uaW5nLXRpbWUtb2Zmc2V0IGZpZWxkIHRvIGFsbCBldmVudHMKLQkgIEV2ZW50cyBwYXNzaW5nIHRocm91Z2ggI0dzdFBhZHMgdGhhdCBoYXZlIGEgcnVubmluZyB0aW1lCi0JICBvZmZzZXQgc2V0IHZpYSBnc3RfcGFkX3NldF9vZmZzZXQoKSB3aWxsIGdldCB0aGVpciBvZmZzZXQKLQkgIGFkanVzdGVkIGFjY29yZGluZyB0byB0aGUgcGFkJ3Mgb2Zmc2V0LgotCSAgSWYgdGhlIGV2ZW50IGNvbnRhaW5zIGFueSBpbmZvcm1hdGlvbiB0aGF0IHJlbGF0ZWQgdG8gdGhlCi0JICBydW5uaW5nIHRpbWUsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQKLQkgIGJlZm9yZSB1c2FnZSB3aXRoIHRoaXMgb2Zmc2V0LgotCi0yMDE0LTA0LTA5IDE2OjQwOjI3ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogYXZvaWQgZGl2aWRpbmcgYnkgemVybyB3aGVuIG11bHRpcGx5aW5nIHkveiBieSAwL3gKLQkgIFRoZSBnY2Qgb2YgMC94IGlzIDAsIGFuZCB0aGlzIGlzIHRoZW4gdXNlZCBhcyBhIGRlbm9taW5hdG9yLgotCi0yMDE0LTA0LTA5IDE2OjAxOjA5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBBbmQgYWN0dWFsbHkgcnVuIHRoZSBvdGhlciB0ZXN0cyBhZ2FpbgotCi0yMDE0LTA0LTA5IDE1OjU3OjM1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IFdha2UgdXAgdGhlIHF1ZXVlcyBpZiBsaW1pdHMgYXJlIGNoYW5naW5nIGluIGEgd2F5IHRoYXQgd291bGQgdW5ibG9jayB0aGUgcXVldWUKLQotMjAxNC0wNC0wOSAxNTo0Mjo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogQWRkIHRlc3QgZm9yIGNoZWNraW5nIGlmIHBhZHMgYXJlIHdha2VkIHVwIHdoZW4gbGltaXRzIGFyZSBjaGFuZ2VkCi0KLTIwMTQtMDQtMDkgMTA6MTU6MzMgKzAyMDAgIEpvc2UgQW50b25pbyBTYW50b3MgQ2FkZW5hcyA8c2FudG9zY2FkZW5hc0BnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBtZW1vcnkgbGVhawotCSAgUXVldWVkIGZyYW1lcyB3ZXJlIG5vdCByZWxlYXNlZCBhZnRlciBiZWluZyBwdXNoZWQsIHRoaXMKLQkgIGNhdXNlZCBhIGxlYWsgb2YgdGhlIEdzdEJhc2VQYXJzZUZyYW1lIHN0cnVjdHVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc4ODMKLQotMjAxNC0wNC0wNyAxNzo0OToxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogdXNlIGdfc3RyZXJyb3IoKSBpbnN0ZWFkIG9mIHN0cmVycm9yKCkKLQkgIE5lZWQgVVRGLTggZW5jb2RpbmcuCi0KLTIwMTQtMDQtMDcgMTc6NDc6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3J1bi5jOgotCSAgUmV2ZXJ0ICJjaGVjazogb25seSBjYWxsIHNldHBnaWQgb24gdmFsaWQgY2hpbGQgUElEcyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYjkzMTNhZmM3NWI2OGQ5ODZlNDczYjc2YjU1NTQzNDU2ODU3OTEyYi4KLQkgIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGluIHVwc3RyZWFtIGxpYmNoZWNrIGluc3RlYWQuIFdlIHdhbnQKLQkgIHRvIGtlZXAgZGlmZiBvZiBvdXIgbG9jYWwgY29weSB0byB1cHN0cmVhbSBsaWJjaGVjawotCSAgdG8gYSBtaW5pbXVtLgotCi0yMDE0LTA0LTA3IDE3OjMzOjM0ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogd2FybiBpZiB3ZSBjYW4ndCByZW1vdmUgb3VyIHRlbXBvcmFyeSBmaWxlCi0JICBJdCdzIG5vdCBmYXRhbCB0aG91Z2gsIHNvIGRvIG5vdCBlcnJvciBvdXQuCi0JICBDb3Zlcml0eSAxMDM3MTIxCi0KLTIwMTQtMDQtMDcgMTU6Mzg6MDkgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYzoKLQkgIGNoZWNrOiBvbmx5IGNhbGwgc2V0cGdpZCBvbiB2YWxpZCBjaGlsZCBQSURzCi0JICBDb3Zlcml0eSAyMDYxODYKLQotMjAxNC0wNC0wNyAxNTozODoxNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiBubyBuZWVkIGZvciBhIHRyYW5zbGF0ZWQgbWVzc2FnZSBmb3IgaW1wb3NzaWJsZSBlcnJvciBjYXNlcwotCSAgVGhlIG1lc3NhZ2UgaXMgdG9vIHRlY2huaWNhbCBhbnl3YXksIHRoZSBkZWZhdWx0IG1lc3NhZ2Ugd29ya3MKLQkgIGp1c3QgZmluZSBoZXJlIGFzIHdlbGwuCi0KLTIwMTQtMDQtMDcgMTU6MTg6MzIgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IGNhdGNoIGZhaWx1cmUgdG8gc2VlayBiYWNrIHRvIHplcm8gYWZ0ZXIgc2VlayB0ZXN0Ci0JICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gdGhlb3JldGljYWxseSwgYnV0IHNpbmNlIGEgdHJhbnNpZW50Ci0JICBmYWlsdXJlIHdvdWxkIGdldCB1cyB0byBzaWxlbnRseSByZWFkIHdyb25nIGRhdGEsIGl0J3Mgd29ydGgKLQkgIGVycm9yaW5nIG91dC4gQW5kIGl0IHNpbGVuY2UgdGhpczoKLQkgIENvdmVyaXR5IDIwNjAzNAotCi0yMDE0LTA0LTA3IDExOjM2OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICBwYXJzZTogRG9uJ3QgZGlzdCB0aGUgYmlzb24gYW5kIGZsZXggZ2VuZXJhdGVkIGhlYWRlcnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjcyNTMKLQotMjAxNC0wNC0wNiAxMToyMzozNCArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogSGFuZGxlIGNhcHMgZmllbGQgdmFsdWVzIGJlaW5nIE5VTEwKLQkgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKSB3b3VsZCBjYXVzZSBhIHNlZ2ZhdWx0IHdoZW5ldmVyIGl0IGVuY291bnRlcmVkIGFuCi0JICBlbGVtZW50J3MgY2FwcyB0aGF0IGhhZCBhIGZpZWxkIHZhbHVlIGJlaW5nIE5VTEwuIFN1Y2ggZmllbGRzIGFyZSBzdWNjZXNzZnVsbHkKLQkgIGhhbmRsZWQgZS5nLiBieSBHU1RfKl9PQkpFQ1QoKSwgYW5kIHdpdGggdGhpcyBwYXRjaCBzbyBkb2VzCi0JICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKCkuIEV2ZW4gaWYgc3RyaW5nIGZpZWxkcyB3aXRoIGEgTlVMTCB2YWx1ZSBhcmUKLQkgIG5vdCBzdXBwb3NlZCB0byBiZSB2YWxpZCBpbiBjYXBzLCBzdWNoIGNhcHMgY2FuIGJlIGNyZWF0ZWQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3NzAxCi0KLTIwMTQtMDQtMDUgMTE6NDQ6MDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBSZW1vdmUgYWx3YXlzLXRydWUtY2hlY2tzCi0JICBhIGdzaXplIGlzIGd1YXJhbnRlZWQgdG8gYmUgcG9zaXRpdmUgb24gYWxsIHN5c3RlbXMgc2luY2UgaXQncyBhbgotCSAgdW5zaWduZWQgdmFsdWUuCi0JICBDSUQgIzEwMzcxNDcKLQotMjAxNC0wNC0wNSAxMTo0NDowMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogUmVtb3ZlIGFsd2F5cy10cnVlLWNoZWNrcwotCSAgYSBnc2l6ZSBpcyBndWFyYW50ZWVkIHRvIGJlIHBvc2l0aXZlIG9uIGFsbCBzeXN0ZW1zIHNpbmNlIGl0J3MgYW4KLQkgIHVuc2lnbmVkIHZhbHVlLgotCSAgQ0lEICMxMDM3MTQ1Ci0JICBDSUQgIzEwMzcxNDYKLQotMjAxNC0wNC0wNSAxMTozNzo1MyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IFByZXZlbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm8KLQkgIFRoZSBzdGVwIGNhbiBlbmQgdXAgYmVpbmcgemVybyBpZiB0aGUgdW5kZXJseWluZyB2YWx1ZSBpc24ndCBhIHZhbGlkCi0JICByYW5nZSBHVmFsdWUuCi0JICBJbiB0aG9zZSBjYXNlcywgcmV0dXJuIEZBTFNFLgotCSAgV2UgZG9uJ3QgdXNlIGdfcmV0dXJuKl9pZl9mYWlsIHNpbmNlIGl0IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gdHJpZ2dlcmVkCi0JICBieSB0aGUgYWJvdmUtbWVudGlvbm5lZCBfZ2V0X3N0ZXAoKSBmdW5jdGlvbnMuCi0JICBTcG90dGVkIGJ5IENvdmVyaXR5LgotCi0yMDE0LTAzLTI1IDEyOjIzOjMyICswMTAwICBIYWFrb24gU3BvcnNoZWltIDxoYWFrb25AcGV4aXAuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBGaXggY29tcGFyaXNvbiBvZiBpbnQvaW50NjQgcmFuZ2UKLQkgIENoZWNraW5nIHN0ZXAgdGhyZWUgdGltZXMgc2VlbXMgdW5uZWNlc3NhcnkuCi0JICBBIHNpbWlsYXIgYnVnIHdhcyBmaXhlZCBmb3IgZG91YmxlIHJhbmdlIGluCi0JICBjb21taXQgM2VhNmIwNGMxMGIxMGZkZTlkNjIxOTAwNjhmMjc0Yjk0MGVkZWYwNwotCi0yMDE0LTA0LTAzIDE4OjE3OjAzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBmaXggYnVpbGQgd2l0aCBkZWJ1ZyBjYWNoZWQgYnVmZmVycyBlbmFibGVkCi0JICBnc3RpbnB1dHNlbGVjdG9yLmM6ODE4OjU6IGVycm9yOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwKLQkgIGFuZCBubyBmb3JtYXQgYXJndW1lbnRzIFstV2Vycm9yPWZvcm1hdC1zZWN1cml0eV0KLQotMjAxNC0wNC0wMyAyMDozMToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogTWFrZSBzdXJlIHRvIHNldCB0aGUgRElTQ09OVCBmbGFnIG9uIHRoZSBmaXJzdCBidWZmZXIgb2YgZWFjaCBHT1AgaW4gcmV2ZXJzZSBwbGF5YmFjayBtb2RlCi0KLTIwMTQtMDQtMDMgMTM6MjA6MTEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IHJlbW92aW5nIGR1cGxpY2F0ZWQgaW5uZXIgaWYKLQkgIFRoZSBpbm5lciBpZiByZXBsaWNhdGVzIHRoZSBzYW1lIGNvZGUgb2YgdGhlIG91dGVyIGFuZCBpcyB1c2VsZXNzCi0JICBhcyBmbGFnX3NlZ21lbnQgd2lsbCBhbHdheXMgYmUgdHJ1ZS4KLQkgIEZvdW5kIGJ5IGNvdmVyaXR5LgotCi0yMDE0LTA0LTAzIDA3OjM2OjAzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgZ3N0LWxhdW5jaC4xOiBQbGF5YmluMiBpcyBkZWFkLCBsb25nIGxpdmUgcGxheWJpbgotCSAgTG9va3MgbGlrZSB0aGF0IHdhcyB0aGUgbGFzdCByZW1haW5pbmcgbWVudGlvbiBpbiBjb3JlIC4uLgotCi0yMDE0LTA0LTAyIDIzOjUyOjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IEFkZCBtaXNzaW5nIFxuIGluIG91dHB1dAotCi0yMDE0LTA0LTAxIDE1OjM1OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIHNjcmlwdHM6IGdzdC11bmluc3RhbGxlZDogZ3N0LXBsdWdpbnMtZ2wgbGlicyBnb3QgbWVyZ2VkIGludG8gLWJhZAotCi0yMDE0LTAzLTI5IDEwOjE4OjM0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEluY2x1ZGUgZXZlbnQgdHlwZSBpbiBkZWJ1ZyBvdXRwdXQgd2hlbiBkZWxheWluZyBhIHN0aWNreSBldmVudCBiZWNhdXNlIG9mIG5vdC1saW5rZWQKLQotMjAxNC0wMy0yOSAxMDoxNjoxMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogRml4IHNwbGl0dGluZyBhbmQgcmV2ZXJzaW5nIG9mIEdPUHMgaW4gcmV2ZXJzZSBwbGF5YmFjayBtb2RlCi0JICBXZSBpdGVyYXRlIHRoZSBjdXJyZW50IGRpc2NvbnQgZ3JvdXAgYmFja3dhcmRzIGFuZCBwdXNoIGVhY2ggR09QIGZvcndhcmRzLAotCSAgc3RhcnRpbmcgZnJvbSB0aGUgbGFzdCBvbmUuIEhvd2V2ZXIgaWYgdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgY3VycmVudAotCSAgZGlzY29udCBncm91cCBpcyBhIGtleWZyYW1lLCB3ZSB3aWxsIGtlZXAgaXQgYXJvdW5kIHVudGlsIG5leHQgdGltZSwKLQkgIHdoaWNoIGlzIGZhciBmcm9tIGlkZWFsLiBKdXN0IHB1c2ggaXQuCi0KLTIwMTQtMDMtMjUgMTI6Mzg6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBsYXVuY2g6IHBsYWNlIHRoZSBkZWVwLW5vdGlmeSBvbiB0aGUgcmlnaHQgcGlwZWxpbmUKLQkgIElmIHRoZSB0b3BsZXZlbCBiaW4gaXMgbm90IG5vdCBhIHBpcGVsaW5lLCB3ZSBwbGFjZSB0aGUgYmluIGluIGEKLQkgIHBpcGVsaW5lLiBBbHNvIG1ha2Ugc3VyZSB0aGF0IHdlIGNvbm5lY3QgdG8gdGhlIGRlZXAtbm90aWZ5IG9mIHRoaXMgbmV3Ci0JICBwaXBlbGluZSBiZWNhdXNlIHdlIHdpbGwgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KCkgZnJvbSBpdCBsYXRlci4KLQotMjAxNC0wMy0yNCAxNjozNDoyNyArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBjb3B5IGxhc3Rfc2FtcGxlIG9uIERSQUlOCi0JICBNYWtlIHN1cmUgd2UgZG9uJ3QgaG9sZCBhIHJlZiB0byBhIGJ1ZmZlciBmcm9tIGJlZm9yZSB0aGUgRFJBSU4gcXVlcnkgYnkKLQkgIG1ha2luZyBhIGNvcHkgb2YgdGhlIGxhc3RfYnVmZmVyLgotCi0yMDE0LTAzLTI0IDE2OjExOjMwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBkb24ndCBjbGVhciBUQUcgb24gTlVMTCBidWZmZXIKLQkgIFdoZW4gdGhlIGJ1ZmZlciBmYWlscyB0byBjb3B5LCBkb24ndCBjbGVhciB0aGUgVEFHIG9uIHRoZSBOVUxMIHBvaW50ZXIuCi0KLTIwMTQtMDMtMjAgMDY6MTQ6MzMgLTA0MDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggZXZlbnQvcHJlcm9sbCBkZWFkbG9jawotCSAgVGhlIHFsb2NrIGlzIHJlbGVhc2VkIGJldHdlZW4gcG9wcGluZyBhIGJ1ZmZlciBmcm9tIHRoZSBxdWV1ZQotCSAgYW5kIHB1c2hpbmcgaXQuIFdoZW4gdGhpcyBidWZmZXIgY2F1c2VzIHRoZSBzaW5rIHRvIHdhaXQgaW4KLQkgIHByZXJvbGwsIHRoaXMgbGV0cyBhIHF1ZXJ5IHNlZSB0aGF0IHRoZSBxdWV1ZSBpcyBlbXB0eSwgYW5kCi0JICBwdXNoIHRoZSBxdWVyeSB0aGVuIHdhaXQgZm9yIGl0IHRvIGJlIHNlcnZpY2VkLiBIb3dldmVyLCB0aGlzCi0JICB3aWxsIG5vdCBiZSBkb25lIHRpbGwgYWZ0ZXIgcGVyb2xsLCBhbmQgdGhpcyB3aWxsIHRodXMgYmxvY2suCi0JICBJZiB1cHN0cmVhbSB3YXMgd2FpdGluZyBvbiBidWZmZXJpbmcgdG8gcmVhY2ggMTAwJSBiZWZvcmUKLQkgIHN3aXRjaGluZyB0byBQTEFZSU5HLCBhIGRlYWRsb2NrIHdvdWxkIGVuc3VlLgotCSAgV2UgZml4IGl0IGJ5IHJlZnVzaW5nIHRoZSBxdWVyeSB3aGVuIGJ1ZmZlcmluZywgYXMgcGVyIFdpbSdzCi0JICByZWNvbW1lbmRhdGlvbiBvbiBJUkMuCi0KLTIwMTQtMDMtMjMgMTI6NTM6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIHRlc3RzOiBtYWtlIG5ldGNsaWVudGNsb2NrIHRlc3QgZmFzdGVyIGFuZCBsZXNzIGZsYWt5Ci0KLTIwMTQtMDMtMjEgMTI6MTY6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IGluaXQgbmV3IGZsYWcgdHlwZXMgdG8gcGFzcyBtYWtlIGNoZWNrCi0KLTIwMTQtMDMtMTkgMDk6MzM6NTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IFVwZGF0ZSBidWZmZXJpbmcgc3RhdHVzIGFuZCBtYXliZSBwb3N0IGJ1ZmZlcmluZyBtZXNzYWdlIHJpZ2h0IHdoZW4gZW5hYmxpbmcgYnVmZmVyaW5nCi0KLTIwMTQtMDMtMTkgMDk6MzI6NDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogVXBkYXRlIGJ1ZmZlcmluZyBzdGF0dXMgYW5kIG1heWJlIHBvc3QgYnVmZmVyaW5nIG1lc3NhZ2UgcmlnaHQgd2hlbiBlbmFibGluZyBidWZmZXJpbmcKLQotMjAxNC0wMy0xOCAxODoxMjoxNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKLQkgIGZha2VzaW5rOiBVcGRhdGUgcG9zaXRpb25zIHdlJ3JlIGNoZWNraW5nIGZvciBhZnRlciBhIHN0YXRlIGlzIGxvc3QKLQotMjAxNC0wMy0xOCAxODoxMToxNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IFVwZGF0ZSBzdGFydCB0aW1lIHdoZW4gd2UgbG9zZSBvdXIgc3RhdGUKLQkgIE90aGVyd2lzZSB3ZSByZXBvcnQgbm90IHRoZSBjb3JyZWN0IHBvc2l0aW9uIHdoaWxlIHRoZSBzdGF0ZSBpcyBsb3N0LgotCi0yMDE0LTAzLTE4IDE2OjQ3OjQyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogRG9uJ3QgY2xpcCB0aGUgcmVwb3J0ZWQgcG9zaXRpb24gaW4gUEFVU0VEIHRvIGFmdGVyIHRoZSBsYXN0IGJ1ZmZlciBlbmQgdGltZXN0YW1wCi0JICBPdGhlcndpc2Ugd2UganVtcCBmb3J3YXJkIHdoZW4gcGF1c2luZywgYW5kIGdvIGJhY2t3YXJkcyBhIGJpdCBhZ2FpbgotCSAgd2hlbiByZXN1bWluZyBwbGF5YmFjay4KLQotMjAxNC0wMy0xNyAxMDowNTozMSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogVXBkYXRlIGV4cG9ydHMgZm9yIEdzdFRvYyBsb29wCi0KLTIwMTQtMDMtMTcgMTA6MDU6MTggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IFVwZGF0ZSBleHBvcnQgZm9yIGdzdCpkZXZpY2Ugc3ltYm9scwotCi0yMDE0LTAzLTE3IDA5OjUxOjQ1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0ZGV2aWNlLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdGdsb2JhbGRldmljZW1vbml0b3IuYzoKLQkgIGRldmljZW1vbml0b3I6IFVzZSBsb2NhbCBpbmNsdWRlcyBhbmQgdXNlIGdzdF9wcml2YXRlIGJlZm9yZSBhbnl0aGluZwotCSAgU2hvdWxkIGZpeCBidWlsZCBpc3N1ZXMgb24gQlNECi0KLTIwMTQtMDMtMTYgMjA6NTA6NTMgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWlucGVjdDogUHJpbnQgZGV2aWNlIG1vbml0b3IKLQotMjAxNC0wMy0xNiAxNTo1Njo1OSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkqIGdzdC9nc3RkZXZpY2UuYzoKLQkqIGdzdC9nc3RkZXZpY2UuaDoKLQkqIGdzdC9nc3RnbG9iYWxkZXZpY2Vtb25pdG9yLmM6Ci0JICBkZXZpY2U6IEFkZCAia2xhc3MiIHRvIEdzdERldmljZXMKLQotMjAxNC0wMy0xNiAxODowMjo1NiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yZmFjdG9yeS5jOgotCSogZ3N0L2dzdGRldmljZW1vbml0b3JmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0Z2xvYmFsZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdGdsb2JhbGRldmljZW1vbml0b3IuaDoKLQkgIGRldmljZW1vbml0b3I6IE1ha2UgY2xhc3NlcyBpbnRvIHB1cmUgc3RyaW5ncwotCSAgSW5zdGVhZCBvZiBoYXZpbmcgc3RyaW5ncyAmIGZsYWdzLCBtYWtlIHRoZW0ganVzdCBzdHJpbmdzCi0KLTIwMTQtMDMtMTcgMDY6Mjk6MjcgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOgotCSAgRml4IGV4dGVuZGVkIG1lc3NhZ2UgaGFuZGxpbmcgd2l0aCBnc3RfYnVzX3BvcF90aW1lZF9maWx0ZXJlZCgpCi0JICBNYWtlIHN1cmUgZXh0ZW5kZWQgbWVzc2FnZSB0eXBlcyBkb24ndCBnZXQgYWNjaWRlbnRhbGx5IG1hdGNoZWQKLQkgIHdoZW4gbm90IGFza2VkIGZvciBpbiB0aGUgbWFzawotCi0yMDE0LTAzLTE3IDA1OjI0OjEyICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgZ3N0YmluOiBBdm9pZCBwb2ludGxlc3Mgb2JqZWN0IGxvY2sgZm9yd2FyZGluZyBtZXNzYWdlcy4KLQkgIEV2ZXJ5IGluc3RhbmNlIG9mIGNhbGxpbmcgYmluX2RvX21lc3NhZ2VfZm9yd2FyZCgpIGZpcnN0IHRvb2sgdGhlCi0JICBvYmplY3QgbG9jaywgc28gdGhhdCBiaW5fZG9fbWVzc2FnZV9mb3J3YXJkKCkgY291bGQgZHJvcCBpdCBhbmQKLQkgIHRoZW4gcmVjbGFpbS4gSW5zdGVhZCwgb25seSB0YWtlIHRoZSBvYmplY3QgbG9jayBhZnRlcndhcmQgd2hlcmUKLQkgIG5lZWRlZC4KLQotMjAxNC0wMi0xOSAwMjoyNzozNiArMDEwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWR1cG9uY2hlbGxlMUBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBXaGVuIHNlZWsgZmx1c2hlZCwgaW1tZWRpYXRlbHkgc2V0IGVvc3BhZHMgdG8gMAotCSAgVGhpcyBwcmV2ZW50cyBzaXR1YXRpb25zIHdoZXJlIGEgZmlyc3QgYnJhbmNoIHdvdWxkIGdldCBzZWVrZWQgYW5kCi0JICByZWNlaXZlIGEgYnVmZmVyIGJlZm9yZSBhbGwgYnJhbmNoZXMgZ290IHNlZWtlZCwgYW5kIHRodXMgY29sbGVjdGVkCi0JICB3b3VsZCBnZXQgY2FsbGVkIGJhc2VkIG9uIEVPUyBmcm9tIHRoZSBwcmV2aW91cyBzZWdtZW50LgotCSAgQXMgYSBjb25zZXF1ZW5jZSwgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIHNlZWtpbmcsIGRvbid0IGRlY3JlYXNlCi0JICB0aGUgZW9zcGFkcyBudW1iZXIgd2hlbiBhIEZMVVNIX1NUT1AgaXMgcmVjZWl2ZWQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0NTcxCi0KLTIwMTQtMDMtMTYgMTc6NDc6MDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBVbnJlZiBwZWVyIHBhZAotCi0yMDE0LTAyLTE2IDIwOjM1OjA5ICswMTAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtZHVwb25jaGVsbGUxQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IEZvcndhcmQgc2VlayBldmVudHMgdG8gdGhlIHBlZXIgZGlyZWN0bHkKLQkgIFRha2VuIGZyb20gdGhlIGFkZGVyIHNlZWsgaGFuZGxpbmcgY29kZS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY0NjEKLQotMjAxNC0wMS0wMiAyMjozMDoxMSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC10b2MudHh0OgotCSogZ3N0L2dzdHRvYy5jOgotCSogZ3N0L2dzdHRvYy5oOgotCSAgdG9jOiBleHBhbmQgR3N0VG9jRW50cnkgd2l0aCBsb29wIGZpZWxkcwotCSAgQWRkIGxvb3BfdHlwZSBhbmQgcmVwZWF0X2NvdW50IGZpZWxkcyB0byBHc3RUb2NFbnRyeSBwbHVzIHNldHRlcnMgYW5kIGdldHRlcnMuCi0JICBUaGlzIGFsbG93cyB0byByZXByZXNlbnQgZWRpdC1saXN0cyBpbiBhIHRvYyBhcyB3ZWxsIGFzIGxvb3BzIGluIGluc3RydWVtbnRzICh3YXYsIHhpKS4KLQkgIEFQSTogZ3N0X3RvY19lbnRyeV9zZXRfbG9vcAotCSAgQVBJOiBnc3RfdG9jX2VudHJ5X2dldF9sb29wCi0KLTIwMTQtMDMtMTYgMTU6MTk6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RnbG9iYWxkZXZpY2Vtb25pdG9yLmM6Ci0JICBnbG9iYWxkZXZpY2Vtb25pdG9yOiB1cGRhdGUgZm9yIG5ldyBtZXNzYWdlIEFQSQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODQwMgotCi0yMDEzLTAxLTA4IDIxOjMwOjQ0IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0Z2xvYmFsZGV2aWNlbW9uaXRvci5jOgotCSogZ3N0L2dzdGdsb2JhbGRldmljZW1vbml0b3IuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZ2xvYmFsZGV2aWNlbW9uaXRvcjogQWRkIGRldmljZSBtb25pdG9yIGFnZ3JlZ2F0b3IKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzg0MDIKLQotMjAxNC0wMy0xNiAxNDowODo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOgotCSAgdGVzdHM6IGFkZCB0ZXN0IGZvciBleHRlbmRlZCBtZXNzYWdlIHR5cGVzIGFuZCBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZAotCi0yMDE0LTAzLTE2IDE0OjA4OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1lc3NhZ2UsIGJ1czogZG8gZXh0ZW5kZWQgbWVzc2FnZSB0eXBlcyBzbGlnaHRseSBkaWZmZXJlbnRseQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODQwMgotCi0yMDE0LTAzLTE2IDE0OjA3OjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IGZpeCBpbmRlbnRhdGlvbgotCi0yMDEyLTEwLTE2IDEyOjI3OjA0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RkZXZpY2UuYzoKLQkqIGdzdC9nc3RkZXZpY2UuaDoKLQkqIGdzdC9nc3RkZXZpY2Vtb25pdG9yLmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvci5oOgotCSogZ3N0L2dzdGRldmljZW1vbml0b3JmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZGV2aWNlbW9uaXRvcmZhY3RvcnkuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZXZpY2Vtb25pdG9yOiBBZGQgR3N0RGV2aWNlTW9uaXRvciBhbmQgcmVsYXRlZAotCSAgQWxzbyBhZGQgR3N0RGV2aWNlIGFuZCBHc3REZXZpY2VNb25pdG9yRmFjdG9yeQotCSAgQW5kIGFkZCBjb2RlIHRvIHRoZSByZWdpc3RyeSB0byBzYXZlIHRoZW0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzg0MDIKLQotMjAxMy0wOC0xNCAxNTo1NjoxMSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSAgbWVzc2FnZTogQWRkIEdTVF9NRVNTQUdFX0VYVEVOREVECi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NDAyCi0KLTIwMTQtMDMtMTYgMTE6MDU6NTYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgcGFkOiBhY3R1YWxseSByZXR1cm4gZGF0YS5yZXQKLQkgIFRoZSByZXR1cm4gdmFsdWUgZnJvbSBnc3RfcGFkX2ZvcndhcmQoKSBpcyB0aGUgYWdncmVnYXRlZCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgY2FsbGJhY2sgYW5kIHRoZSBjYWxsYmFjayByZXR1cm5zIEZBTFNFIHRvIGNvbnRpbnVlIGl0ZXJhdGluZy4KLQotMjAxNC0wMy0xNSAxNTo1NDozMyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBwYWQ6IGZvcndhcmQgcmV0dXJuIHZhbHVlIGZyb20gZ3N0X3BhZF9mb3J3YXJkCi0JICBJbnN0ZWFkIG9mIGlnbm9yaW5nIHRoZSByZXR1cm4gdmFsdWUgYW5kIGFsd2F5cyByZXR1cm4gVFJVRSBwYXNzIHRoZSBhbHJlYWR5IGFncmVnYXRlZCByZXN1bHQgYmFjay4KLQotMjAxNC0wMy0xNSAxMzo1NzoxOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IGZpeCBtYWtlLWNoZWNrIGJ5IHJ1bm5pbmcgJ21ha2UgdXBkYXRlLWV4cG9ydHMnCi0KLTIwMTQtMDMtMTQgMTM6MzI6MTcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JICB0ZXN0czogbXVsdGlxdWV1ZTogZml4IGVvcyBjb3VudCBvbiB0ZXN0IGZvciBub3QtbGlua2VkIGNhc2UKLQkgIEZyb20gdGhlIHRlc3QgY2FzZToKLQkgIC8qIFRoaXMgdGVzdCBjcmVhdGVzIGEgbXVsdGlxdWV1ZSB3aXRoIDIgc3RyZWFtcy4gT25lIHJlY2VpdmVzCi0JICAqIGEgY29uc3RhbnQgZmxvdyBvZiBidWZmZXJzLCB0aGUgb3RoZXIgb25seSBnZXRzIG9uZSBidWZmZXIsIGFuZCB0aGVuCi0JICAqIG5ldy1zZWdtZW50IGV2ZW50cywgYW5kIHJldHVybnMgbm90LWxpbmtlZC4gVGhlIG11bHRpcXVldWUgc2hvdWxkIG5vdCBmaWxsLgotCSAgKi8KLQkgIElmIG9uZSBvZiB0aGUgcXVldWVzIGdvZXMgRU9TIGFuZCB0aGUgb3RoZXIgcmV0dXJucyBOT1RfTElOS0VEIHRoZSBzdHJlYW0KLQkgIGNhbiBiZSBjb25zaWRlcmVyZWQgRU9TIGFzIGEgTk9UX0xJTktFRCBtZWFucyB0aGF0IG9uZSBvZiB0aGUgYnJhbmNoZXMgaGFzIG5vCi0JICBzaW5rIGRvd25zdHJlYW0gdGhhdCB3aWxsIGJsb2NrIHRoZSBFT1MgbWVzc2FnZSBwb3N0aW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTkxNwotCi0yMDE0LTAzLTAxIDIzOjE4OjQ0ICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgYWRhcHRlcjogQWRhcHQgZ3N0X2FkYXB0ZXJfY29weSgpIGZvciBiaW5kaW5ncwotCSAgVGhpcyBpcyBkb25lIGJ5IGludHJvZHVjaW5nIGEgbmV3IGdzdF9hZGFwdGVyX2NvcHlfYnl0ZXMoKSBjYWxsIHRoYXQKLQkgIHJldHVybnMgYSBHQnl0ZXMgc3RydWN0dXJlLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTQ3NgotCi0yMDE0LTAzLTE0IDE4OjQwOjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIGRvY3M6IGZpeCBtdWx0aXF1ZXVlIGRvY3MgZm9yIG5ldyB0ZW1wbGF0ZSBuYW1lcyBmb29fJWQgLT4gZm9vXyV1Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2MzU4Ci0KLTIwMTQtMDMtMTEgMjE6NTU6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSAgZG9jczogdXBkYXRlIHBsdWdpbiBkb2NzCi0KLTIwMTQtMDMtMTEgMjE6NDQ6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogc2ltcGxpZnkgZ3N0X3BhZF9saW5rX2dldF9uYW1lKCkgYW5kIGZpeCBTaW5jZSBtYXJrZXIKLQkgIEhhcyBhZGRlZCBiZW5lZml0IHRoYXQgY29tcGlsZXIgbWlnaHQgd2FybiBpZiBtb3JlIHZhbHVlcwotCSAgYXJlIGFkZGVkIHRvIHRoZSBlbnVtLgotCi0yMDE0LTAzLTExIDIxOjQ2OjE0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHBhZDogYWRkIGRlYnVnIGhlbHBlciBmb3IgR3N0UGFkTGlua1JldHVybiBuYW1lcwotCSAgQWRkIGEgaGVscGVyIGxpa2UgZ3N0X2Zsb3dfZ2V0X25hbWUoKSBmb3IgR3N0UGFkTGlua1JldHVybi4gVXNlIHRoaXMgaW4gY29yZS4KLQkgIEFQSTogZ3N0X3BhZF9saW5rX2dldF9uYW1lKCkKLQotMjAxNC0wMy0xMSAyMToxMjoxNSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogdXNlIHN0b3JlX3N0aWNreSBldmVudHMgYWRkIGFkZCBtb3JlIGxvZ2dpbmcKLQkgIFVzZSB0aGUgcGFkIGFzIG9iamVjdCBmb3IgbG9nZ2luZyB0byBnZXQgbW9yZSBjb250ZXh0LiBVc2UKLQkgIGdzdF9wYWRfc3RvcmVfc3RpY2t5X2V2ZW50KCkgaW5zdGVhZCBvZiBzZW5kaW5nIHRoZSBldmVudC4gVGhpcyBhdm9pZHMgYSB3YXJuaW5nCi0JICBhcyBoZXJlIHRoZSBwYWQgaXMgbm90IHlldCBsaW5rZWQgYW5kIHdlIGFjdHVhbGx5IGRvbid0IHdhbnQgdG8gc2VuZCBhbnl3YXkuCi0KLTIwMTQtMDMtMTAgMTA6MDA6MjggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBpZiBidWZmZXJpbmcgaXMgZGlzYWJsZWQgd2hpbGUgYnVmZmVyaW5nLCBwb3N0IDEwMCUgbWVzc2FnZQotCSAgQXZvaWRzIHN0YWxsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byByZWFjaCAxMDAlCi0KLTIwMTQtMDMtMTAgMDk6NDk6MDkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKLQkgIHF1ZXVlMjogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCSAgYnVmZmVyaW5nX2l0ZXJhdGlvbiB3YXMgbmV2ZXIgdXNlZAotCi0yMDE0LTAzLTEwIDA5OjQ5OjA3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlOiBxdWV1ZTI6IHByZXNlcnZlIGxhc3QgZmxvdyByZXN1bHQgd2hlbiBwdXNoaW5nIGV2ZW50cwotCSAgQXZvaWRzIG1pc3Rha2VubHkgcmV0dXJuaW5nIF9PSyB3aGVuIGRvd25zdHJlYW0gaXMgc3RpbGwKLQkgIF9OT1RfTElOS0VEIG9uIHN1YnNlcXVlbnQgcmVjZWl2ZWQgcGFkIHB1c2hlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTkxNwotCi0yMDE0LTAzLTEwIDA5OjQ5OjA1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBpZiBidWZmZXJpbmcgaXMgZGlzYWJsZWQgd2hpbGUgYnVmZmVyaW5nLCBwb3N0IDEwMCUgbWVzc2FnZQotCSAgQXZvaWRzIHN0YWxsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byByZWFjaCAxMDAlCi0KLTIwMTQtMDMtMTAgMDk6NDg6NTggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IGRvIG5vdCByZXNldCBsYXN0IHB1c2ggcmVzdWx0IHdoZW4gcHVzaGluZyBldmVudHMKLQkgIFVzZSB0aGUgbGFzdCByZXN1bHQgYXMgYSBkZWZhdWx0IHdoZW4gcHVzaGluZyBhIGl0ZW0gZnJvbSBhIHNpbmdsZSBxdWV1ZSwKLQkgIG90aGVyd2lzZSB0aGUgc3RhdHVzIGdldHMgcmVzZXQgdG8gX09LIHdoZW4gcHVzaGluZyBldmVudHMuCi0JICBUaGlzIGNhdXNlcyBwcm9ibGVtcyB3aGVuIG1pc3Rha2VubHkgYWN0aXZhdGluZyBhIG5vdC1saW5rZWQgc3RyZWFtCi0JICB0aGF0IGlzIGJlaW5nIGlnbm9yZWQgdXBzdHJlYW0gYXMgaXQgaXMgbm90IGJlaW5nIHVzZWQgKGFkYXB0aXZlCi0JICBzY2VuYXJpb3MpLCBpdCB3aWxsIG1ha2UgdGhlIG11bHRpcXVldWUgcG9zdCBhIGJ1ZmZlcmluZyBtZXNzYWdlCi0JICBvbiBhIHBhZCB0aGF0IHdvbid0IHJlY2VpdmUgYnVmZmVycwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTkxNwotCi0yMDE0LTAzLTA3IDIwOjQzOjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkgIGJ1ZmZlcjogaW52ZXJ0IG1lYW5pbmcgb2YgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkKLQkgIEl0J3MgbmljZXIgdG8gb25seSBoYXZlIGl0IHNldCB3aGVuIHNvbWV0aGluZyBub3Rld29ydGh5Ci0JICBoYXBwZW5lZCBhbmQgb3RoZXJ3aXNlIHVuc2V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTg2MgotCi0yMDE0LTAzLTA2IDIyOjUxOjU3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGZpeCBnc3RfcGFkX2FkZF9wcm9iZSgpIHJldHVybiB2YWx1ZSBkb2NzCi0JICBBbHNvIGZpeCBjb21tZW50IHR5cG9zIGFuZCBhZGQgbW9yZSBkZXRhaWwgaW4gdGhlIGxvZ3MuCi0KLTIwMTQtMDMtMDYgMjA6NDA6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgZmFrZXNpbmssIGlkZW50aXR5LCBmYWtlc3JjOiBmaXggZGVidWcgcHJpbnRpbmcgaWYgVEFHX01FTU9SWSBidWZmZXIgZmxhZwotCSAgVGhlIElOX0NBUFMgZmxhZyBkb2VzIG5vdCBleGlzdCBhbnkgbW9yZS4KLQotMjAxNC0wMy0wNiAxMzowMTo0MCArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogdXNlIGdzdF9wYWRfZ2V0X3BlZXIgdG8gYWNxdWlyZSBhIHJlZmVyZW5jZSB0byB0aGUgdGFyZ2V0IHBhZAotCSAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGxvY2sgb2YgdGhlIGludGVybmFsIHBhZCBpcyBoZWxkIHdoaWxlIHJlZmVyZW5jaW5nCi0JICBpdCdzIHBlZXIgKD0gdGhlIHRhcmdldCBwYWQpLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIHBlZXIgaXMgbm90Ci0JICBnb2luZyB0byBiZSB1bmxpbmtlZC9kZXN0cm95ZWQgaW4gdGhlIG1lYW50aW1lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTgwOQotCi0yMDE0LTAzLTA2IDEyOjQwOjIzICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSB0YXJnZXQgcGFkIHdoaWxlIHVubGlua2luZyBpdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTgwOQotCi0yMDE0LTAzLTAyIDA1OjA4OjI0ICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBJZ25vcmUgZ2NvdiBpbnRlcm1lZGlhdGUgZmlsZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU0NzgKLQotMjAxNC0wMy0wMiAxNzo1NTo0NSArMDEwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBkb2NzOiBGaXggdHlwb3MgYW5kIHJlbW92ZSB1bmtub3duIGFubm90YXRpb25zCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1NTE3Ci0KLTIwMTQtMDItMjggMjA6NTM6MzggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JICBkb2NzOiB1c2UgdGhlIG5ldyBtYXJrZG93biBmb3Igb3JkZXJlZCBsaXN0LgotCSAgVGhpcyB3YXMgcGxhaW4gdGV4dCB0aGF0IGhhZCBhbGwgbGlzdCBpdGVtcyBvbmUgYWZ0ZXIgdGhlIG90aGVyIChpbmNsdWRpbmcgYQotCSAgcmVwZWF0ZWQgbnVtYmVyKS4gTm93IGl0IHdpbGwgYXRsZWFzdCBsb29rIGdvb2Qgd2hlbiBwcm9jZXNzZWQgd2l0aCBndGstZG9jCi0JICAxLjIwLgotCi0yMDE0LTAyLTI4IDA5OjM0OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmUxNjcyZSB0byBiY2IxNTE4Ci0KLTIwMTQtMDItMjcgMjI6MjY6MzAgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSAgZG9jczogZml4IHByb2JsZW1zIGludHJvZHVjZWQgYnkgYzA2OGIyMjVmZWY1YTliZjAKLQkgIC0gRml4IGZhaWxpbmcgYnVpbGQKLQkgIC0gRHJvcCBhZGRlZCB0cmFpbGluZyB3aGl0ZXNwYWNlCi0KLTIwMTQtMDItMjcgMTg6Mjc6MzcgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogYWRkIHJldHVybiB2YWx1ZXMgdG8gZ19yZXR1cm5faWZfZmFpbAotCSAgRkl4ZXMgcHJldmlvdXMgY29tbWl0LgotCi0yMDE0LTAyLTI3IDE4OjA2OjU2ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkgIGRvY3M6IGNvbnZlcnQgdGhlIGV4YW1wbGVzIHRvIHVzZSBndGstZG9jIG1hcmt1cCwgaW5zdGVhZCBvZiBkb2Nib29rCi0JICBUaGUgZ3RrLWRvYyBtYXJrdXAgaXMgbGVzcyBpbnRydXNpdmUgYW5kIGJldHRlciBoYW5kbGVkIHdoZW4gY3JlYXRpbmcgZG9jcyBmb3IKLQkgIGxhbmd1YWdlIGJpbmRpbmdzLiBUaGUgdGl0bGVzICh3aGVyZSB1c2VkKSB3aGVyZSBub3QgYWRkaW5nIG11Y2guCi0KLTIwMTQtMDItMjcgMTY6NDY6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkb2NzOiBhZGQgc29tZSBtb3JlIG5ldyBBUEkgZG8gZG9jcwotCi0yMDE0LTAyLTI3IDE2OjQwOjM0ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBvbmx5IHJlbGVhc2UgYnVmZmVycyB3aXRoIHdyaXRhYmxlIG1lbW9yeQotCSAgQ2hlY2sgaWYgdGhlIG1lbW9yeSBpcyB3cml0YWJsZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBidWZmZXIgaW50byB0aGUKLQkgIHBvb2wgYWdhaW4uCi0JICBBZGQgdW5pdCB0ZXN0IGZvciB0aGlzIHNjZW5hcmlvLgotCi0yMDE0LTAyLTI3IDE2OjM5OjUwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBhZGQgZnVuY3Rpb24gdG8gY2hlY2sgd3JpdGFiaWxpdHkgb2YgbWVtb3J5Ci0JICBDaGVjayBpZiBtZW1vcnkgaXMgd3JpdGFibGUgaW4gYSBidWZmZXIgYW5kIHRodXMgaXMgZXhjbHVzaXZlbHkgb3duZWQgYnkKLQkgIHRoaXMgYnVmZmVyLgotCi0yMDE0LTAyLTI3IDE1OjE0OjU5ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogVXNlIFRBR19NRU1PUlkgdG8gY2hlY2sgbWVtb3J5IGJlZm9yZSByZWxlYXNpbmcKLQkgIFRhZyBhbGxvY2F0ZWQgYnVmZmVycyB3aXRoIFRBR19NRU1PUlkuIFdoZW4gdGhleSBhcmUgcmVsZWFzZWQgbGF0ZXIsCi0JICBvbmx5IGFkZCB0aGVtIGJhY2sgdG8gdGhlIHBvb2wgaWYgdGhlIHRhZyBpcyBzdGlsbCB0aGVyZSBhbmQgdGhlIG1lbW9yeQotCSAgaGFzIG5vdCBiZWVuIGNoYW5nZWQsIG90aGVyd2lzZSB0aHJvdyB0aGUgYnVmZmVyIGF3YXkuCi0JICBBZGQgdW5pdCB0ZXN0IHRvIGNoZWNrIHZhcmlvdXMgc2NlbmFyaW9zLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDQ4MQotCi0yMDE0LTAyLTI3IDE0OjM1OjA5ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBhZGQgYSBuZXcgZmxhZyB0byB0cmFjayBtZW1vcnkgY2hhbmdlcwotCSAgQWRkIGEgZmxhZyB0byBjaGVjayBpZiB0aGUgbWVtb3J5IGNoYW5nZWQgaW4gYSBidWZmZXIuCi0KLTIwMTQtMDItMjYgMTU6MzY6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IHJlbW92ZSB3cm9uZyBjb21tZW50Ci0JICBSZWZjb3VudCBhbmQgd3JpdGFiaWxpdHkgYXJlIG5vdCByZWxhdGVkIGZvciBtZW1vcnkgb2JqZWN0cy4KLQotMjAxNC0wMi0yNSAxNzo0Njo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiByZWZhY3RvciBmcmVlX2J1ZmZlcgotCSAgTWFrZSBhIGRvX2ZyZWVfYnVmZmVyIG1ldGhvZCB0byBhbHNvIGRlY3JlbWVudHMgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQKLQkgIGJ1ZmZlcnMuIFN0b3Agd2lsbCBub3cgYmUgc3VjY2Vzc2Z1bCB3aGVuIGFsbCBidWZmZXJzIGFyZSBmcmVlZC4KLQotMjAxNC0wMi0yNiAyMjoxMDoyOCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDFhMDdkYTkgdG8gZmUxNjcyZQotCi0yMDE0LTAyLTI2IDIwOjI0OjQxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogYWRkIGEgbGVnZW5kIHRvIHBpcGVsaW5lIGR1bXBzCi0JICBXZSB1c2UgYSBjb3VwbGUgb2Ygc3ltYm9scyB0byByZXByZXNlbnQgc3RhdGVzL2ZsYWdzLiBBZGQgYSBzaG9ydCBleHBsYW5hdGlvbiBmb3IgdGhlbS4KLQotMjAxMy0wNy0zMSAwOToyNjoyNiArMDIwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IFByaW50IGlmIHRoZXJlIGlzIGEgdGFzayBzdGFydGVkIGZyb20gYSBwYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUxODkKLQotMjAxNC0wMi0yNSAxNjoxMToyMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBVc2UgZ2V0X3VpbnQ2NCgpIGluIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUoKQotCSAgSXRzIGNvZGUgaXMgaWRlbnRpY2FsLgotCi0yMDE0LTAyLTI1IDE1OjQxOjQ1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBzdHJ1Y3R1cmU6IEFkZCBnZXR0ZXJzIGZvciBpbnQ2NCBhbmQgdWludDY0IHZhbHVlcwotCi0yMDE0LTAyLTE5IDIxOjE3OjI3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IERvIG5vdCBzZW5kIGVvcyB3aGVuIHNlZWtpbmcgYWZ0ZXIgbGFzdCBidWZmZXIKLQkgIElmIHB1c2hpbmcgdGhlIGxhc3QgYnVmZmVyIHRyaWdnZXJzIGEgc2VlayBmcm9tIGRvd25zdHJlYW0sIGRvIG5vdAotCSAgZ28gaW50byBFT1MgaWYgYSBuZXcgc2VnbWVudCB3YXMgcmVxdWVzdGVkLgotCSAgQ29udGFpbnMgdW5pdCB0ZXN0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0NzU3Ci0KLTIwMTQtMDItMjEgMDk6MDM6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiByZW1vdmUgaW5zYW5pdHkgYW5kIHRoZSBvbGQgZ3N0LW9wZW5tYXgKLQotMjAxNC0wMi0yMCAxODo0Nzo0MiArMDEwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogQWRkIHBhdGhzIHRvIGdzdC1kZXZ0b29scy92YWxpZGF0ZQotCi0yMDE0LTAyLTIwIDE1OjM0OjM2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IElmIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBwYWQsIGRvbid0IGNvbnNpZGVyIGFsbCBwYWRzIG5vdCBsaW5rZWQgYW5kIGdyb3cgdGhlIHF1ZXVlIGluZGVmaW5pdGVseQotCi0yMDE0LTAyLTE5IDEwOjU3OjMzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBhbHNvIHVzZSB0aGUgZ2xvYiBvbiBHU1RfQ0hFQ0tTIHdoZW4gZm9yY2luZyB0byBydW4gYnJva2VuIHRlc3RzCi0JICBHU1RfQ0hFQ0tTIGNhbiBiZSBzaW1wbHkgInRlc3QqIiB0byBydW4gcnVuIGFsbCB0ZXN0cyAoaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlCi0JICBtYXJrZWQgYnJva2VuKS4gVXBkYXRlIHRoZSBzcGFyc2UgY29tbWVudHMgYSBiaXQgdG8gdGVsbCBob3cgdGhpcyB3b3Jrcy4KLQotMjAxNC0wMi0xOCAxNTo0NjozMiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGRvbid0IHRydW5jYXRlIHRoZSB0ZW1wIGZpbGUgb24gc2h1dGRvd24KLQkgIFdlIHdhbnQgdG8ga2VlcCB0aGUgZG93bmxvYWRlZCBmaWxlIHVudHJ1bmNhdGVkIHNvIHRoYXQgd2UgY2FuIHVzZSBpdAotCSAgYWdhaW4gbGF0ZXIuCi0JICBGaXhlczogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDM3MwotCi0yMDE0LTAyLTE4IDE0OjIxOjIwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogRml4IG1lcmdpbmcgb2YgcmFuZ2VzCi0JICBNYWtlIGEgbWV0aG9kIHRvIGdldCB0aGUgc2Vla2luZyB0aHJlc2hvbGQuIElmIGRhdGEgaXMgZnVydGhlciBhd2F5IGZyb20KLQkgIHRoaXMgdGhyZXNob2xkIHdlIHdhbnQgdG8gcGVyZm9ybSBhIHNlZWsgdXBzdHJlYW0uCi0JICBXaGVuIHRoZSBjdXJyZW50IGRvd25sb2FkZWQgcmFuZ2UgY2FuIG1lcmdlIHdpdGggdGhlIG5leHQgcmFuZ2UsCi0JICBhY3R1YWxseSBpbmNsdWRlIHRoZSBkYXRhIG9mIHRoZSBuZXh0IHJhbmdlIGludG8gdGhlIGN1cnJlbnQgcmFuZ2UKLQkgIGluc3RlYWQgb2YgZGlzY2FyZGluZyBpdC4gQWxzbyBkZWNpZGUgaWYgd2Ugc2VlayB0byB0aGUgd3JpdGUgcG9zaXRpb24KLQkgIG9mIHRoZSBtZXJnZWQgcmFuZ2Ugb3IgY29udGludWUgcmVhZGluZy4KLQotMjAxNC0wMi0xOCAxMTo0OTozNyArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogaW4gYXV0b21hdGljX2VvcyBtb2RlLCBkb24ndCBtb2RpZnkgdGhlIHNpemUKLQkgIERvbid0IHNldCB0aGUgc2l6ZSB0byAtMSBpbiBhdXRvbWF0aWNfZW9zIG1vZGUgKHdoaWNoIGFsc28gdXBkYXRlcyB0aGUKLQkgIGR1cmF0aW9uIHRvIC0xKS4gV2Ugb25seSB3YW50IGF1dG9tYXRpY19lb3MgbW9kZSBpbmZsdWVuY2UgdGhlIG1heHNpemUKLQkgIGNhbGN1bGF0aW9ucyB3aXRob3V0IGFueSBzaWRlIGVmZmVjdHMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0NTY0Ci0KLTIwMTQtMDItMTcgMTE6Mzc6MzAgKzAxMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGphbi5zdGVmZmVuc0BnbWFpbC5jb20+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKLQkgIHB3ZzogVXBkYXRlIHJhdyBwcm9wZXJ0aWVzCi0JICBVc2luZyBpbmZvIGZyb20gZ3N0LXBsdWdpbnMtYmFzZS9kb2NzL2Rlc2lnbiAuCi0JICBFbmNvZGVkIHN0cmVhbXMgbWlnaHQgbWFrZSB1c2Ugb2YgdGhlIHJhdyBwcm9wZXJ0aWVzLCBzbyBsaXN0IHRoZW0gYWxsIHVuZGVyIGZvby8qIC4KLQkgIEZvciBmb28vcmF3LCBvbmx5IG5vdGUgd2hpY2ggb2YgdGhlc2UgcHJvcGVydGllcyBhcmUgbWFuZGF0b3J5LgotCSAgSSBkaWRuJ3QgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSByYXcgZm9ybWF0cyB5ZXQuIFRob3NlIG1pZ2h0IHN0aWxsIGJlIG91dC1vZi1kYXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDE4NwotCi0yMDE0LTAyLTE3IDE3OjI4OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzY3JpcHRzL2NyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaDoKLQkgIHNjcmlwdHM6IGNyZWF0ZS11bmluc3RhbGxlZC1zZXR1cDogcmVtb3ZlIGRlYWQgaHR0cCBsaW5rcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDU2MQotCi0yMDE0LTAyLTE1IDIyOjM0OjMzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46Ci0JICBkb2NzOiBhZGQgdGhlIGJveGVkIHR5cGVzIHRvIHRoZSAudHlwZXMuaW4KLQkgIFRoaXMgbWFrZXMgdGhlbSBzaG93IHVwIGluIHRoZSBvYmplY3QgaGllcmFyY2h5LgotCi0yMDE0LTAyLTE1IDIxOjIyOjQ1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICBkb2NzOiBndGtkb2MgaXMgbm90IGdvb2QgYXQgcGFyc2luZyBpbmxpbmUgZnVuY3Rpb25zIGluIGhlYWRlcnMKLQkgIE1hcmsgdGhlIGlubGluZSBmdW5jdGlvbiwgc28gdGhhdCBndGtkb2Mgc2tpcHMgdGhlbS4gQXZvaWRzIHNvbWUgd2FybmluZ3MgYWJvdXQKLQkgIHVucGFyc2FibGUgZGVjbGFyYXRpb25zLgotCi0yMDE0LTAyLTEzIDEyOjA3OjUwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGJhc2VzcmM6IEFkZCBnc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3MoKSBBUEkKLQkgIFRoaXMgZGVmYXVsdHMgdG8gVFJVRSBhbmQgaWYgaXQgaXMgc2V0IHRvIEZBTFNFIGl0IGlzIHRoZSBzdWJjbGFzc2VzCi0JICByZXNwb25zaWJpbGl0eSB0byByZXR1cm4gR1NUX0ZMT1dfRU9TIGZyb20gdGhlIGNyZWF0ZSgpIHZtZXRob2Qgb25jZQotCSAgdGhlIHN0cmVhbSBpcyBkb25lLgotCi0yMDE0LTAyLTExIDE2OjMwOjMxICswMDAwICBXaWxsaWFtIE1hbmxleSA8d2lsbEB3aWxsaWFtbWFubGV5Lm5ldD4KLQotCSogZG9jcy9nc3QvcnVubmluZy54bWw6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIGRvY3M6IEZpeCBsb2NhdGlvbiBvZiBwbHVnaW5zIGFuZCByZWdpc3RyeSBpbiBob21lIGRpcmVjdG9yaWVzCi0JICBGaXhlcyBvdXQgb2YgZGF0ZSBkb2N1bWVudGF0aW9uIGxlZnQgb3ZlciBzaW5jZSAwLjEwLiAgSW4gMS4wIHBsdWdpbnMgYXJlCi0JICBzdG9yZWQgaW4gJFhER19EQVRBX0hPTUUgYW5kIHRoZSByZWdpc3RyeSBpbiAkWERHX0NBQ0hFX0hPTUUgY29uZm9ybWFudAotCSAgd2l0aCB0aGUgWERHIEJhc2UgRGlyZWN0b3J5IFNwZWNpZmljYXRpb25bMV0uCi0JICBbMV06IGh0dHA6Ly9zdGFuZGFyZHMuZnJlZWRlc2t0b3Aub3JnL2Jhc2VkaXItc3BlYy9iYXNlZGlyLXNwZWMtbGF0ZXN0Lmh0bWwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjQxMzIKLQotMjAxNC0wMi0xMSAxMzoyNzoyNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGVycm9yLmg6Ci0JICBlcnJvcjogR1NUX1JFU09VUkNFX0VSUk9SX05PVF9BVVRIT1JJWkVEIHdpbGwgYmUgYXZhaWxhYmxlIHNpbmNlIDEuMi40Ci0KLTIwMTQtMDItMTEgMTM6MDk6MTEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RlcnJvci5jOgotCSogZ3N0L2dzdGVycm9yLmg6Ci0JICBlcnJvcjogQWRkIFJFU09VUkNFX05PVF9BVVRIT1JJWkVEIGVycm9yCi0JICBUaGlzIGFsbG93cyB0byBkaXN0aW5ndWlzaCBub3JtYWwgcmVhZCBmYWlsdXJlcyBmcm9tIHJlYWQgZmFpbHVyZXMKLQkgIHdoZXJlIHdlIG1pc3MgYXV0aG9yaXphdGlvbi4KLQotMjAxNC0wMi0xMCAxNzowOTo1OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGdzdC1pbnNwZWN0OiBGaXggeWV0IGFub3RoZXIgY29tcGlsZXIgd2FybmluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDA0NQotCi0yMDE0LTAyLTEwIDA4OjAwOjM2ICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSAgZG9jczogYWRkIG1pc3Npbmcgc2VxbnVtIGZpbGUgZm9yIGRpc3RyaWJ1dGlvbgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzk5NwotCi0yMDE0LTAyLTA5IDE2OjUzOjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKLQkgIGRvY3M6IGRvY3VtZW50IEdTVF9UQUdfKkVOQ09ESU5HIGVudmlyb25tZW50IHZhcmlhYmxlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTg1MAotCi0yMDE0LTAyLTA5IDE2OjQ3OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL01ha2VmaWxlLmFtOgotCSAgZG9jczogZW5hYmxlIHBhcmFsbGVsIGJ1aWxkIG9mIHN1YmRpcmVjdG9yaWVzCi0JICBXZSBjYW4gYnVpbGQgZ3RrIGRvY3MsIEFETSwgUFdHIGFuZCBGQVEgaW4gcGFyYWxsZWwuCi0KLTIwMTQtMDItMDkgMTY6Mzg6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBjaGVjazogYWRkIHN1cHBvcnQgZm9yIGJsYWNrbGlzdGluZyBjaGVja3MgdmlhIEdTVF9DSEVDS1NfSUdOT1JFCi0KLTIwMTQtMDItMDkgMDA6MjU6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXBhcnNlLmM6Ci0JICB0ZXN0czogZml4IGxlYWsgaW4gYmFzZXBhcnNlIHRlc3QKLQkgIE9yIHJhdGhlciBtYWtlIGl0IG5vdCBzaG93IHVwIGFueSBtb3JlIGJ5IG1vdmluZwotCSAgaXQgZnJvbSAnZGVmaW5pdGVseSBsb3N0JyBpbnRvICdwb3NzaWJseSBsb3N0Jy4KLQotMjAxNC0wMi0wOCAyMzozOTowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICB0ZXN0czogZml4IGxlYWsgaW4gc3lzdGVtY2xvY2sgdGVzdAotCi0yMDE0LTAyLTA4IDE2OjQyOjU1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IE1ha2UgY2xhbmcgaGFwcHkgd2l0aCBvdXIgZ192cHJpbnRmKCkgd3JhcHBlcgotCi0yMDE0LTAyLTA2IDE0OjE4OjMxICswODAwICBDaHVuLXdlaSBGYW4gPGZhbmNodW53ZWlAc3JjLmdub21lLm9yZz4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSogZ3N0L2dzdHByZXNldC5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICB3aW5kb3dzOiBNYWtlIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gcmVsb2NhdGFibGUKLQkgIFVzZSB0aGUgdGVjaG5pcXVlIHRoYXQgaXMgbm93IGRvbmUgaW4gR1RLKyBzbyB0aGF0IHRoZSBwbHVnaW5zIGRvIG5vdCBoYXZlCi0JICB0byBiZSBpbnN0YWxsZWQgaW4gYzpcZ3N0cmVhbWVyXGxpYlw8ZGVidWc+XGdzdHJlYW1lci0kKEdTVEFwaVZlcnNpb24pLAotCSAgYnV0IGNhbiBiZSBpbnN0YWxsZWQgaW4KLQkgIDxwYXJlbnRfZm9sZGVyX29mX2dzdHJlYW1lcl9tYWluX2RsbD5cbGliXDxkZWJ1Zz5cZ3N0cmVhbWVyLSQoR1NUQXBpVmVyc2lvbiksCi0JICBvciBhcyBwZXIgZ193aW4zMl9nZXRfcGFja2FnZV9pbnN0YWxsYXRpb25fZGlyZWN0b3J5X29mX21vZHVsZSgpIGFsbG93cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkxMTUKLQotMjAxMy0xMC0zMCAxNzowMjozNSAtMDUwMCAgQnJlbmRhbiBMb25nIDxiLmxvbmdAY2FibGVsYWJzLmNvbT4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgZ3N0OiBjbGVhciBmbG9hdGluZyByZWZlcmVuY2VzIGZvciBHc3RUYXNrLCBHc3RUYXNrUG9vbCBhbmQgR3N0Q29sbGVjdFBhZHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAzNDIKLQotMjAxMy0xMC0zMCAxNzowMjowMiAtMDUwMCAgQnJlbmRhbiBMb25nIDxiLmxvbmdAY2FibGVsYWJzLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGRvY3M6IGdzdF9wYWRfbmV3X2Zyb21fKl90ZW1wbGF0ZSBhbmQgZ3N0X2J1ZmZlcl9wb29sX25ldyBjb25zdHJ1Y3RvcnMgcmV0dXJuIGZsb2F0aW5nIHJlZmVyZW5jZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAzNDIKLQotMjAxNC0wMi0wNSAxMDoxMTo0MyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc2ZpbHRlci5jOgotCSAgY2hlY2s6IFJlbW92ZSBhIG1pbm9yIGxlYWsgaW4gdW5pdCB0ZXN0Ci0JICBNYWtlcyB2YWxncmluZCBoYXBweQotCi0yMDE0LTAyLTA0IDIyOjIzOjA2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIG1hbnVhbDogRml4IGJ1aWxkIGJ5IHVzaW5nIHRoZSBjb3JyZWN0IEMgZmlsZSBuYW1lCi0KLTIwMTQtMDItMDQgMjE6MzY6MTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSAgbWFudWFsOiBDbGVhbiB1cCBjb2RlIGEgYml0IHRvIGJlIHN1aXRhYmxlIGZvciB0aGUgZG9jcwotCi0yMDE0LTAxLTAzIDA3OjI1OjM3IC0wODAwICBUb2RkIEFndWxuaWNrIDx0b2RkQGFndWxuaWNrLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBtYW51YWw6IFJlcGxhY2UgbWFudWFsJ3MgZWZmZWN0c3dpdGNoLmMgd2l0aCBuZXdlciB0ZXN0LWVmZmVjdC1zd2l0Y2guYwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTEwMAotCi0yMDE0LTAxLTI5IDE0OjM5OjE5ICswMDAwICBNYXR0aGlldSBCb3Vyb24gPG1hdHRoaWV1LmJvdXJvbkBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgdGVzdHM6IGFkZCBjYXBzIGZlYXR1cmVzIHVuaXQgdGVzdHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjMyMzYKLQotMjAxNC0wMi0wNCAxODo0MjowMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IFdoZW4gZ2V0dGluZyBjYXBzZmVhdHVyZXMgYW5kIG5vbmUgYXJlIHRoZXJlLCBzdG9yZSBzeXNtZW0gY2Fwc2ZlYXR1cmVzCi0JICAuLi4gaW5zdGVhZCBvZiByZXR1cm5pbmcgYSByZWZlcmVuY2UgdG8gYSBnbG9iYWwgaW5zdGFuY2UuIFRoZSBjYWxsZXIgbWlnaHQKLQkgIHdhbnQgdG8gY2hhbmdlIHRoZSBnbG9iYWwgaW5zdGFuY2Ugb3RoZXJ3aXNlLCB3aGljaCBjYXVzZXMgZnVubnkgZWZmZWN0cyBsaWtlCi0JICBhbGwgZ2xvYmFsIGluc3RhbmNlcyBiZWluZyBjaGFuZ2VkIGFuZCBhdCB0aGUgc2FtZSB0aW1lIG5vdGhpbmcgaW4gdGhlIGNhcHMKLQkgIGJlaW5nIGNoYW5nZWQuCi0JICBBcyB0aGUgY2FwcyBtaWdodCBiZSBpbW11dGFibGUgd2hpbGUgd2UgZG8gdGhpcyB3ZSBoYXZlIHRvIGRvIHNvbWUgbWFnaWMKLQkgIHdpdGggYXRvbWljIG9wZXJhdGlvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzMjM2Ci0KLTIwMTQtMDItMDQgMTg6MDM6NDcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBEb24ndCBnZXQgdXMgc3lzbWVtIGNhcHNmZWF0dXJlcyBpZiB3ZSBqdXN0IGNoZWNrIGZvciBmaXhlZCBjYXBzCi0KLTIwMTQtMDItMDQgMTc6NDg6NTQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzZmVhdHVyZXMuYzoKLQkgIGNhcHNmZWF0dXJlczogTWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRpYyBBTlkvRU1QVFkgY2Fwc2ZlYXR1cmVzIGFyZSBuZXZlciBtdXRhYmxlCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzIzNgotCi0yMDE0LTAxLTMxIDA5OjE0OjQxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmg6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBkb2NzOiBmaXggbW9yZSBndGstZG9jIHdhcm5pbmdzCi0KLTIwMTQtMDEtMzEgMDg6MzU6NDEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RhbGxvY2F0b3IuaDoKLQkgIGRvY3M6IHVuaGlkZSBkb2NzIGZvciBhbGxvY2F0b3IKLQkgIFVuaGluZGUgdGhlIGNsYXNzIGRvY3MuIFRlY2ggZ3RrLWRvYyBhYm91dCBHU1RfRVhQT1JUUy4KLQotMjAxNC0wMS0zMSAwODowODozNyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogbW9yZSB0ZXN0cyBhbmQgc21hbGwgZG9jIGZpeGVzCi0KLTIwMTQtMDEtMzAgMjE6MjQ6MjEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JKiB0b29scy9nc3QtdHlwZWZpbmQuYzoKLQkgIHRvb2xzOiBTdXBwb3J0IG5vbi1BU0NJSSB0YWdzCi0JICBCeSBjYWxsaW5nIHNldGxvY2FsZSgpIHRvIGdldCB1cyBtdWx0aS1ieXRlL1VURi04IHN1cHBvcnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzMTY0Ci0KLTIwMTQtMDEtMzAgMDM6MjI6NTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBvdXRwdXRzZWxlY3RvcjogcmVzcGVjdCB0aGUgJ25lZ290aWF0aW9uLW1vZGUnIHByb3BlcnR5Ci0JICBJZiB0aGUgc2VnbWVudCBldmVudCBpcyBhbGxvd2VkIHRvIGJlIHB1c2hlZCB0byBhbGwgcGFkcyBpdAotCSAgd2lsbCBsZWFkIHRvIGFuIGFzc2VydGlvbiBvZiAnc3RpY2t5IGV2ZW50IG1pc29yZGVyaW5nOgotCSAgc2VnbWVudCByZWNlaXZlZCBiZWZvcmUgY2FwcycgaW4gY2FzZSB0aGUgcGFkLW5lZ290aWF0aW9uLW1vZGUKLQkgIGlzIHNldCB0byAnYWN0aXZlJyBvciAnbm9uZScuCi0JICBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgbWFraW5nIGFsbCBzdGlja3kgZXZlbnRzIGZvbGxvdyB0aGUKLQkgIHByb3BlcnR5IGxpa2UgdGhlIGNhcHMgZXZlbnQgdG8gcHJldmVudCBtaXNvcmRlcmluZyB3YXJuaW5ncy4KLQkgIFdoZW4gYSBuZXcgcGFkIGlzIGFjdGl2YXRlZCB0aGUgY3VycmVudCBzdGlja3kgZXZlbnRzIG9uIHRoZQotCSAgc2lua3BhZCBhcmUgZm9yd2FyZGVkIHRvIGl0IGluIHRoZSBwcm9wZXIgb3JkZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzMjY2Ci0KLTIwMTQtMDEtMzAgMTI6NTQ6MjAgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0cG9vbHN0cmVzcy5jOgotCSAgcG9vbHN0cmVzczogcHJpbnQgc3BlZWR1cAotCi0yMDE0LTAxLTMwIDEyOjQyOjAyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogbWlzYyBjbGVhbnVwcwotCSAgUmV2aWV3IHRoZSBkb2N1bWVudGF0aW9uLCBjb21tZW50cyBhbmQgbG9nZ2luZy4gU2V0IHRoZSBpbml0aWFsIHNpemUgdG8gMTYgYXMKLQkgIHRoZSBzaXplIGlzIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgcG93ZXIgb2YgdHdvIGFueXdheS4KLQotMjAxNC0wMS0zMCAwODoxMToxMiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBhZGQgYSBuZXcgdGVzdHN1aXRlIG9yIHRoZSBwb29sCi0JICBTdGFydCB3aXRoIHNvbWUgYmFzaWMgdGVzdHMuCi0KLTIwMTQtMDEtMzAgMTI6MjY6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogYXZvaWQgZXhjZXNzaXZlIEdzdFBvbGwgYWN0aXZpdHkKLQkgIEtlZXAgYW4gZXh0cmEgd3JpdGUgcmVmIG9uIHRoZSBjb250cm9sIHNvY2tldC4gVGhpcyBlbnN1cmVzIHRoYXQgd2UKLQkgIGF2b2lkIGEgcmVhZC93cml0ZSBvbiB0aGUgc29ja2V0IHdoZW4gZ29pbmcgZnJvbSBub24tZW1wdHktPmVtcHR5LT5ub3QtZW1wdHkuCi0JICBXZSByZW1vdmUgdGhlIHdyaXRlIHJlZiBvbmx5IHdoZW4gd2UgYWN0dWFsbHkgYXJlIGVtcHR5IGFuZCB3ZSBuZWVkIHRvCi0JICB3YWl0IGZvciBmbHVzaGluZyBvciBhIG5ldyBidWZmZXIuCi0JICBUaGlzIG1ha2VzIHRoZSBidWZmZXJwb29sIGJlbmNobWFyayBhYm91dCAzMCUgZmFzdGVyIHRoYW4gdGhlIHB1cmUKLQkgIG1hbGxvYyBpbXBsZW1lbnRhdGlvbi4KLQotMjAxNC0wMS0zMCAxMjoyNTozMyArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBwb2xsOiBpbXByb3ZlIGRlYnVnCi0JICBBZGQgb2JqZWN0IHBvaW50ZXIgaW4gZGVidWcgbGluZXMuCi0KLTIwMTQtMDEtMzAgMTA6NDM6MzYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBkNDhiZWQzIHRvIDFhMDdkYTkKLQotMjAxNC0wMS0yOSAyMjo0Njo0OCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC10b2MudHh0OgotCSAgcGFydC10b2M6IGVtcGhhc2l6ZSB0aGF0IHRoZSBsYXRlciBjaGFwdGVycyBhcmUgZGVzaWduIGRyYWZ0IGlkZWFzCi0KLTIwMTQtMDEtMjkgMjA6MjA6NTYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtdG9jLnR4dDoKLQkgIHBhcnQtdG9jOiBhZGQgZm9ybWF0IHNwZWNpZmljIGluZm9ybWF0aW9uCi0KLTIwMTQtMDEtMjkgMTg6MjE6MzQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0cG9vbHN0cmVzcy5jOgotCSAgcG9vbHN0cmVzczogY29kZSBjbGVhbnVwcwotCSAgQWRkIGEgZmV3IGNvbW1lbnRzLiBUZWxsIGluIHRoZSByZXN1bHRzLCB3aGljaCBudW1iZXIgYXJlIGZyb20gd2hpY2ggdGVzdC4KLQotMjAxNC0wMS0yOSAxMzoyMDoxOSArMDEwMCAgTmljb2xhIE11cmlubyA8bmljb2xhLm11cmlub0BnbWFpbC5jb20+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiB1c2UgcHJpbnQgYXMgZnVuY3Rpb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjMyMjkKLQotMjAxNC0wMS0yOCAxMTo1ODo1MyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNmaWx0ZXIuYzoKLQkgIHRlc3RzOiBjYXBzZmlsdGVyOiBhZGQgdGVzdCBmb3IgcGVuZGluZ19ldmVudHMgcHVzaGluZwotCSAgbWFrZSBzdXJlIHRoYXQgcGVuZGluZyBldmVudHMgYXJlIHB1c2hlZCB3aGVuIGNhcHMgYXJlIGFscmVhZHkKLQkgIHNldCB3aGVuIGEgYnVmZmVyIGlzIHJlY2VpdmVkCi0KLTIwMTQtMDEtMjggMTE6MTI6NTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIGNhcHNmaWx0ZXI6IGRvIG5vdCBmb3JnZXQgdG8gcHVzaCBwZW5kaW5nIGV2ZW50cwotCSAgUHVzaCBwZW5kaW5nIGV2ZW50cyBiZWZvcmUgYnVmZmVycyBpZiBjYXBzIGlzIGFscmVhZHkKLQkgIHNldAotCi0yMDE0LTAxLTI0IDE5OjE5OjA4ICswMTAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBkbyBub3QgcmVkdWNlIHNpbmdsZSBxdWV1ZSBiZWxvdyBjdXJyZW50IGxldmVsCi0JICBXaGVuIHRoZSBzaW5nbGUgcXVldWUgc2l6ZSB3YXMganVzdCBidW1wZWQgYnkgMSB0byBhbGxvdyBtb3JlIGJ1ZmZlcnMgdG8KLQkgIGJlIGFkZGVkLCB0aGUgYnVmZmVycyBsaW1pdCBjb3VsZCBiZSByZWR1Y2VkIHRvIHRoZSBjdXJyZW50IGxldmVsIHdoZW4KLQkgIHNldHRpbmcgdGhlIG1heC1zaXplLWJ1ZmZlcnMgcHJvcGVydHkuIFRoaXMgd291bGQgcmVzdWx0IGluIGEgc3RhbGwKLQkgIHNpbmNlIHRoZSBxdWV1ZSB3b3VsZCBub3QgZ3JvdyBhbnltb3JlIGF0IHRoaXMgcG9pbnQuCi0JICBQcmV2ZW50IHRoaXMgYnkgbm90IHJlZHVjaW5nIGEgc2luZ2xlIHF1ZXVlIHNpemUgYmVsb3cgdGhlIGN1cnJlbnQKLQkgIG51bWJlciBvZiBidWZmZXJzICsgMS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI1OTcKLQotMjAxNC0wMS0yNCAxMzoyMDo0OSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZG8gbm90IGZvcmdldCB0byBjbGVhciB0aGUgZm9yY2VkX2VvcyBmbGFnCi0JICBvdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgdXNlIHRoZSBzZXFudW0gb2YgdGhlIGV2ZW50Ci0JICBzZW50IGJ5IHRoZSBhcHBsaWNhdGlvbgotCi0yMDE0LTAxLTIzIDE1OjUyOjUxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IHByZXNlcnZlIHNlcW51bSBvZiBlb3MgZXZlbnRzIHNlbnQgYnkgdGhlIHVzZXIKLQkgIFN0b3JlIHRoZSBlb3MgZXZlbnQgc2VxbnVtIGFuZCB1c2UgaXQgd2hlbiBjcmVhdGluZyB0aGUKLQkgIG5ldyBlb3MgZXZlbnQgdG8gYmUgcHVzaGVkIGRvd25zdHJlYW0uIFRvIGtub3cgaWYgdGhlIGVvcwotCSAgd2FzIGNhdXNlZCBieSB0aGUgZW9zIGV2ZW50cyByZWNlaXZlZCBvbiBzZW5kX2V2ZW50LCBhCi0JICAnZm9yY2VkX2VvcycgZmxhZyBpcyB1c2VkIHRvIHVzZSB0aGUgY29ycmVjdCBzZXFudW0gb24KLQkgIHRoZSBldmVudCBwdXNoZWQgZG93bnN0cmVhbS4KLQkgIFVzZWZ1bCBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gY2hlY2sgaWYgdGhlIEVPUyBtZXNzYWdlCi0JICB3YXMgZ2VuZXJhdGVkIGZyb20gaXRzIG93biBwdXNoZWQgRU9TIG9yIGZyb20gYW5vdGhlciBzb3VyY2UKLQkgIChzdHJlYW0gcmVhbGx5IGZpbmlzaGVkKS4KLQkgIEFsc28gYWRkcyBhIHRlc3QgZm9yIHRoaXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjI3OTEKLQotMjAxNC0wMS0yMyAxNTozNDoyNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc2VxbnVtcy50eHQ6Ci0JICBkb2NzOiBkZXNpZ246IGFkZCBwYXJ0LXNlcW51bXMKLQkgIEhvcGVmdWxseSBjbGFyaWZpZXMgaG93IHNlcW51bXMgc2hvdWxkIGJlIHVzZWQgYW5kIGNvcGllZCBmcm9tCi0JICBldmVudHMgdG8gZXZlbnRzL21lc3NhZ2VzIHdoZW4gdGhvc2UgYXJlIGhhbmRsZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyNzkxCi0KLTIwMTQtMDEtMjQgMDk6Mjg6MDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogQnJlYWsgdGhlIGxvb3AgaW1tZWRpYXRlbHkgaWYgd2UgZm91bmQgYW4gZW1wdHkgcXVldWUKLQkgIE5vIG5lZWQgdG8gY29udGludWUgbG9va2luZyBhdCBhbGwgdGhlIG90aGVycwotCi0yMDE0LTAxLTIzIDE1OjQ3OjIzICswMTAwICBQZXIgeCBKb2hhbnNzb24gPHBlcnhqb2hAYXhpcy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogQWxsb3cgZ3Jvd2luZyBhIHF1ZXVlIGlmIGFsbCBvdGhlciBxdWV1ZXMgYXJlIG5vdCBsaW5rZWQKLQkgIEluIHRoZSBjYXNlIHdoZXJlIG9uZSBzaW5nbGVxdWV1ZSBpcyBmdWxsIGFuZCBhbGwgb3RoZXIgYXJlIG5vdCBsaW5rZWQsIHRoZQotCSAgZ3Jvd2luZyBvZiB0aGUgZnVsbCBxdWV1ZSBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseS4gVGhlIHJlc3VsdCBkZXBlbmRzIG9uIGlmCi0JICB0aGUgZnVsbCBxdWV1ZSBpcyBsYXN0IGluIHRoZSBxdWV1ZSBsaXN0IG9yIG5vdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjI4OTEKLQotMjAxNC0wMS0yMiAxMToxMDowMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBNaW5vciBjb2RlIGNsZWFudXAKLQkgICFjaGVja19zdGlja3koKT09R1NUX0ZMT1dfT0sgaXMgYSBiaXQgY29uZnVzaW5nLCBjb21wYXJlZCB0bwotCSAgY2hlY2tfc3RpY2t5KCkhPUdTVF9GTE9XX09LLgotCi0yMDE0LTAxLTIwIDE1OjI2OjU0ICswMTAwICBGYWJpYW4gS2lyc2NoIDxkZXJGYWtpckB3ZWIuZGU+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIHBhcnNlOiBBZGRpdGlvbmFsIHRlc3RzIGZvciBwYXJzZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAwMzQKLQotMjAxNC0wMS0xOCAxNDo0ODozNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBpdGVyYXRvcjogUHJvcGVybHkgY29weSBtdXRleGVzIGFyb3VuZCB3aGVuIGNyZWF0aW5nIGEgY29weSBvZiBhIGZpbHRlciBpdGVyYXRvcgotCi0yMDE0LTAxLTE4IDE0OjM0OjQ1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzoKLQkgIGl0ZXJhdG9yOiBBZGQgdW5pdCB0ZXN0cyBmb3IgZmlsdGVyaW5nLCByZWN1cnNpdmUgZmlsdGVyaW5nIGFuZCBsb2NraW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMTM4Ci0KLTIwMTQtMDEtMTggMTQ6NDM6MjAgKzAxMDAgIFN0ZXdhcnQgQnJvZGllIDxzdGV3YXJ0QGVoLm9yZz4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBpdGVyYXRvcjogUHJlc2VydmUgdGhlIG1hc3RlciBsb2NrIHdoZW4gY3JlYXRpbmcgcmVjdXJzaXZlIGl0ZXJhdG9yIGZpbHRlcnMgd2l0aCB0aGUgc2FtZSBsb2NrCi0JICBUaGlzIHdheSB3ZSBtYWtlIHN1cmUgdGhhdCBhKSB0aGUgbG9jayBpcyBhbHdheXMgdGFrZW4gd2hlbiBjaGVja2luZwotCSAgdGhlIGNvb2tpZSBhbmQgY2FsbGluZyB0aGUgaXRlcmF0b3IncyBuZXh0IGZ1bmN0aW9ucyBhbmQgYikgaXQgaXMKLQkgIG5vdCB0YWtlbiB3aGlsZSBjYWxsaW5nIGFueSBvZiB0aGUgaXRlcmF0b3IgZmlsdGVyIGZ1bmN0aW9ucy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTExMzgKLQotMjAxNC0wMS0xNyAyMjo1MzowMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IHN0aWNreSBldmVudCBsZWFrIGFmdGVyIHN0aWNreV9ldmVudHNfZm9yZWFjaAotCSAgZXZlbnRzX2ZvcmVhY2ggYWRkcyBhbiBleHRyYSByZWYgd2hlbiBnaXZpbmcgdGhlIGV2ZW50IHRvIHRoZQotCSAgdXNlciBmdW5jdGlvbi4gSW4gY2FzZSBpdCB3YXMgdW5yZWZlZCBieSB0aGUgdXNlciwgdGhpcyBleHRyYSByZWYKLQkgIGRpc2FwcGVhcmVkLCBidXQgZXZlbnRzX2ZvcmVhY2ggc3RpbGwgc2hvdWxkIHVucmVmIGFnYWluIHRvCi0JICBsb3NlIGl0cyBvd24gcmVmIGJlZm9yZSByZW1vdmluZyB0aGUgZXZlbnQgZnJvbSB0aGUgYXJyYXkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyNDY3Ci0KLTIwMTQtMDEtMTYgMjA6MTE6MDMgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBtb3ZlIHNvbWUgZW52LXZhciBjaGVja3MgZnJvbSBnc3QgdG8gZ3N0aW5mbyBhcyB3ZWxsCi0JICBXZSB3ZXJlIGRvaW5nIHNvbWUgbG9nIHJlbGF0ZWQgaW5pdGlhbGlzYXRpb24gaW4gZ3N0LmMgYWZ0ZXIgY2FsbGluZwotCSAgX3ByaXZfZ3N0X2RlYnVnX2luaXQoKS4gSnVzdCBtb3ZlIGl0IHRoZXJlIGZvciBjb25zaXN0ZW5jeS4KLQotMjAxNC0wMS0xNiAxODoxNjozNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBPbmx5IHNldCBjYXBzIG9uIHRoZSBzcmNwYWQgaWYgaXQncyBhY3RpdmF0ZWQgaW4gcHVzaCBtb2RlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyMjg5Ci0KLTIwMTQtMDEtMTYgMTI6Mjg6NDcgKzAxMDAgIEZhYmlhbiBLaXJzY2ggPGRlckZha2lyQHdlYi5kZT4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlOiBTb21lIG1pbm9yIGZpeGVzCi0JICBGaXggZGVzdHJ1Y3RvciBzZWdmYXVsdGluZwotCSAgRXhwZWN0IDAgZ3JhbW1hci1hbWJpZ3VpdGllcwotCSAgRml4IG9yZGVyIG9mIGJpbi1wcm9wZXJ0aWVzIGFzc2lnbm1lbnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAwMzQKLQotMjAxNC0wMS0xNSAxOToyODowMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogcmVtb3ZpbmcgZHVwbGljYXRlIGZpZWxkIHBvc2l0aW9uCi0JICBJdCBpcyBhbHJlYWR5IHN0b3JlZCBpbnNpZGUgdGhlIEdzdFNlZ21lbnQgc3RydWN0IGFuZAotCSAgd2FzIG9ubHkgZHVwbGljYXRpbmcgaW5mb3JtYXRpb24uIEFsc28gcmVtb3ZlZCBzb21lCi0JICB3ZWlyZCBwb3NpdG9uIGlmL2Vsc2UgdGhhdCB3b3VsZCBwb3NzaWJseSBjaGFuZ2UgdGhlCi0JICBzZWdtZW50IHRoYXQgd2FzIGdvaW5nIHRvIGJlIHB1c2hlZCBkb3duc3RyZWFtCi0KLTIwMTQtMDEtMTUgMDA6MTI6MjYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IHByZXZlbnQgYnVmZmVyaW5nIGZvcmV2ZXIgd2l0aCBwbGF5YmluCi0JICBXaGVuIHByZXJvbGxpbmcvYnVmZmVyaW5nLCBtdWx0aXF1ZXVlIGhhcyBpdHMgYnVmZmVycyBsaW1pdCBzZXQKLQkgIHRvIDAsIHRoaXMgbWVhbnMgaXQgY2FuIHRha2UgYW4gaW5maW5pdGUgYW1vdW50IG9mIGJ1ZmZlcnMuCi0JICBXaGVuIHByZXJvbGxpbmcvYnVmZmVyaW5nIGZpbmlzaGVzLCBpdHMgbGltaXQgaXMgc2V0IGJhY2sgdG8gNSwgYnV0Ci0JICBvbmx5IGlmIHRoZSBjdXJyZW50IGxldmVsIGlzIGxvd2VyIHRoYW4gNS4gSXQgc2hvdWxkIChhbG1vc3QpIG5ldmVyIGJlCi0JICBhbmQgdGhpcyB3aWxsIGNhdXNlIHByZXJvbGxpbmcvYnVmZmVyaW5nIHRvIG5lZWQgdG8gd2FpdCB0byByZWFjaCB0aGUKLQkgIGhhcmQgYnl0ZXMgYW5kIHRpbWUgbGltaXRzLCB3aGljaCBhcmUgbXVjaCBoaWdoZXIuCi0JICBUaGlzIGNhbiBsZWFkIHRvIGEgdmVyeSBsb25nIHN0YXJ0dXAgdGltZS4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzCi0JICBieSBzZXR0aW5nIHRoZSBzaW5nbGUgcXVldWVzIHRvIHRoZSBtYXgoY3VycmVudCwgbmV3X3ZhbHVlKSBpbnN0ZWFkCi0JICBvZiBzaW1wbHkgaWdub3JpbmcgdGhlIG5ldyB2YWx1ZSBhbmQgbGV0dGluZyBpdCBhcyBpbmZpbml0ZSgwKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjU5NwotCi0yMDE0LTAxLTE1IDExOjEyOjA4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgc2VnbWVudDogZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSgpIHdpbGwgYmUgYXZhaWxhYmxlIGluIDEuMi4zCi0KLTIwMTQtMDEtMTQgMTY6MTU6MjEgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvYzogVXBkYXRlIHNlY3Rpb25zIHdpdGggdGhlIG5ldyByb3VuZGluZyBtYWNyb3MKLQotMjAxNC0wMS0xNCAxNjoxNTowMiAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIHV0aWw6IEFkZCBHU1RfUk9VTkRfVVBfTiBhbmQgR1NUX1JPVU5EX0RPV05fTgotCSAgVGhlc2UgYXJlIGdlbmVyaWMgcm91bmRpbmcgbWFjcm8gdGhhdCB3b3JrcyBmb3IgYW55IHBvd2VyIG9mIHR3by4KLQotMjAxNC0wMS0xNCAxNjo0NzozOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JICB0ZWU6IEFkZCB1bml0IHRlc3QgZm9yIHJlcXVlc3RpbmcgcGFkIG5hbWVzCi0KLTIwMTQtMDEtMTQgMTY6NDU6NTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgotCSAgdGVlOiBNYWtlIHN1cmUgdG8gZ2l2ZSBwYWRzIHRoZSBuYW1lIHRoYXQgd2FzIHJlcXVlc3RlZAotCSAgQWxzbyBjaGVjayBmb3IgdW5pcXVlbmVzcyBhbmQgbWFrZSBzdXJlIHdlIGNyZWF0ZSBhIG5ldwotCSAgcGFkIGluZGV4IHByb3Blcmx5IGlmIHNvbWUgd2VyZSByZXF1ZXN0ZWQgd2l0aCBuYW1lcyBidXQKLQkgIHRoZSBuZXcgb25lIGlzIG5vdC4KLQotMjAxNC0wMS0xNCAxNTo1MjoyNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlOiBNYWtlIHN1cmUgdG8gY3JlYXRlIGFuZCBsaW5rIGNoYWlucyBpbiB0aGUgb3JkZXIgYXMgd3JpdHRlbgotCSAgTWFrZSB0aGlzIHdvcmsgYWdhaW46Ci0JICBhdWRpb3Rlc3RzcmMgISB0ZWUgbmFtZT10ICB0LnNyY18wICEgcXVldWUgISBmYWtlc2luayAgdC5zcmNfMSAhIHF1ZXVlICEgZmFrZXNpbmsKLQkgIGFuZCB0aGlzIGZhaWwgYWdhaW46Ci0JICBhdWRpb3Rlc3RzcmMgISB0ZWUgbmFtZT10ICB0LnNyY18xICEgcXVldWUgISBmYWtlc2luayAgdC5zcmNfMCAhIHF1ZXVlICEgZmFrZXNpbmsKLQkgIGFzIHRlZSBqdXN0IGNvdW50cyBpdHNlbGYgYW5kIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIHBhZCBuYW1lcyB3ZSByZXF1ZXN0Ci0JICBmcm9tIGl0LgotCi0yMDE0LTAxLTE0IDEzOjQ1OjM0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2U6IFJlbW92ZSBzb21lIEM5OS1zdHlsZSBjb21tZW50cwotCi0yMDE0LTAxLTE0IDEzOjQ0OjExICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcGFyc2UvdHlwZXMuaDoKLQkgIHBhcnNlOiBVc2UgR1NsaWNlIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGxpbmtzIGFuZCBjaGFpbnMKLQotMjAxNC0wMS0xNCAxMzo0MjoyMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3BhcnNlL3R5cGVzLmg6Ci0JICBwYXJzZTogQWRkIGNvbW1lbnQgYWJvdXQgd2h5IHdlIGRpc2FibGUgdGhlICJ0cmFjaW5nIgotCSAgSXQgZGlkIG5vdCBwcmludCBhbnl0aGluZyB1c2VmdWwgYmVmb3JlIGFueXdheSwgZXZlcnl0aGluZwotCSAgd2FzIGNvbW1lbnRlZCBvdXQuCi0JICBBbHNvIHJlbW92ZSBzb21lIHVubmVlZGVkIHN0cnVjdCBtZW1iZXJzLgotCi0yMDE0LTAxLTE0IDEzOjM2OjI0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6Ci0JICBwYXJzZS1sYXVuY2g6IEFkZCBzb21lIG1vcmUgZmFpbGluZyBwaXBlbGluZXMKLQkgIEFsc28gY29udmVydCBzb21lIGNvbW1lbnRzIGFib3V0IHZhbGdyaW5kIHdhcm5pbmdzIHRvCi0JICBGSVhNRSBjb21tZW50cy4gVGhlc2Ugd2VyZSBsZWFraW5nIHNpbmNlIHNvbWUgdGltZSBhbHJlYWR5LgotCi0yMDE0LTAxLTEwIDIxOjEwOjE3ICswMTAwICBGYWJpYW4gS2lyc2NoIDxkZXJGYWtpckB3ZWIuZGU+Ci0KLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JKiBnc3QvcGFyc2UvcGFyc2UubDoKLQkqIGdzdC9wYXJzZS90eXBlcy5oOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSAgcGFyc2U6IFJlZmFjdG9yIGdyYW1tYXIsIG1ha2UgaXQgbW9yZSBjb25zaXN0ZW50IGFuZCBmaXggY29uZmxpY3RzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwMDM0Ci0KLTIwMTQtMDEtMTMgMjA6NDg6MzIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46Ci0JICBkb2NzOiBlbnN1cmUgR3N0QnVmZmVyUG9vbHMgc2hvd3MgdXAgYXMgd2l0aCBHT2JqZWN0IGZlYXR1cmVzCi0JICBHc3RCdWZmZXJQb29sIGlzIGEgR3N0T2JqZWN0LCBhZGQgdGhlIF9nZXRfdHlwZSBmdW5jdGlvbiB0byB0aGUgdHlwZXMgZmlsZS4KLQotMjAxNC0wMS0xMyAwODozNzozNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXBhcnNlLmM6Ci0JICB0ZXN0czogYmFzZXBhcnNlOiBhZGQgdGVzdCBmb3IgcmV2ZXJzZSBwbGF5YmFjayBvbiBwYXNzdGhyb3VnaAotCSAgQmFzZXBhcnNlIHN0b3JlcyBidWZmZXJzIGZvciByZXZlcnNlIHBsYXliYWNrIHRvIHB1c2ggb24gdGhlIG5leHQKLQkgIERJU0NPTlQsIHRoZSBpc3N1ZSB3YXMgdGhhdCBpdCB3b3VsZG4ndCBldmVyIGNoZWNrIGZvciBhIGRpc2NvbnQKLQkgIG9uIHBhc3N0aHJvdWdoIG1vZGUgYXMgaXQgc2tpcHMgYWxsIHJlYWwgcGFyc2luZy4gVGhpcyB0ZXN0Ci0JICB3YXMgY3JlYXRlIHRvIHZlcmlmeSB0aGlzIGlzc3VlIGFuZCBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nIGFnYWluCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxOTQxCi0KLTIwMTQtMDEtMTEgMTA6NDk6MTcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXBhcnNlLmM6Ci0JICB0ZXN0czogYmFzZXBhcnNlOiBhZGQgYmFzaWMgdGVzdCBmb3IgYmFzZXBhcnNlCi0JICBKdXN0IGEgc21hbGwgdGVzdCB0byBjaGVjayB0aGF0IGJhc2ljIHBsYXliYWNrIHdvcmtzCi0KLTIwMTQtMDEtMTAgMDk6MTA6MDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBkbyBub3QgYWNjdW11bGF0ZSBidWZmZXJzIG9uIHBhc3N0aHJvdWdoIG1vZGUKLQkgIElmIG9uIHBhc3N0aHJvdWdoIGR1cmluZyByZXZlcnNlIHBsYXliYWNrLCBkbyBub3QgYWNjdW11bGF0ZSBidWZmZXJzIGFzCi0JICBiYXNlcGFyc2Ugd2lsbCBuZXZlciBjaGVjayBmb3IgRElTQ09OVCBmbGFnIHRvIHB1c2ggdGhvc2UgYnVmZmVycy4KLQkgIFNvIGp1c3QgcHVzaCBidWZmZXJzIGRvd25zdHJlYW0gYXMgaWYgaXQgd2FzIGZvcndhcmQgcGxheWJhY2suCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxOTQxCi0KLTIwMTQtMDEtMDYgMjE6NDc6MjIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZG9uJ3QgY29uZnVzZSBHU1RfUEFEX01PREVfTk9ORSBhbmQgUFVMTAotCSAgVXNlIGEgc3dpdGNoLWNhc2UgdG8gZXhwbGljaXRseSBoYW5kbGUgYWxsIHBhZC1tb2Rlcy4gVGhpcyB3YXkgd2UgZG9uJ3QgbG9nIGFuIGVycm9yIHdoZW4gdGhlIHBhZCBpcyBub3QgeWV0IGFjdGl2YXRlZC4KLQotMjAxNC0wMS0wOSAwNzo1Njo1NSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgZ3N0b2JqZWN0OiBhZGQgRklYTUUgYW5kIGRvY3MgZm9yIHRoZSBkaXNhYmxlZCBub3RpZnkgb24gcGFyZW50Ci0JICBXZSBoYXZlbid0IGZvdW5kIGEgd2F5IHRvIHJlLWVuYWJsZSBlbWl0dGluZyBub3RpZnkgYW5kIGRlZXAtbm90aWZ5IGZvciBwYXJlbnQKLQkgIGNoYW5nZXMuIEFkZCBhIEZJWE1FLTIuMCBhbmQgYSBkb2MgYmxvYiBvbiB0aGUgcHJvcGVydHkuIFNlZSAjNjkzMjgxLgotCi0yMDE0LTAxLTA4IDE2OjI4OjU0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZG8gbm90IGlnbm9yZSBUSU1FIHNlZ21lbnRzCi0JICBUSU1FIHNlZ21lbnRzIGFyZSBiZWluZyBpZ25vcmVkIGFuZCBhIHN0YW5kYXJkIGluaXRpYWxpemVkCi0JICBzZWdtZW50IGlzIHVzZWQgaW5zdGVhZC4gVGhpcyBjYXVzZXMgaXNzdWVzIGFzIG5vdCBwcm9wZXJseSBkZXRlY3RpbmcKLQkgIHJldmVyc2UgcGxheWJhY2sgb3Igbm90IGNsaXBpbmcgb3V0cHV0IGJhc2VkIG9uIHRoZSBzZWdtZW50LgotCSAgVGhpcyBzZWVtcyB0byBiZSBhIHJlZ3Jlc3Npb24gZnJvbSBvbmUgb2YgdGhlIEdzdFNlZ21lbnQvR3N0RXZlbnQKLQkgIHJlZGVzaWducyBvbiB0aGUgMC4xMCAtPiAxLjAgdHJhbnNpdGlvbgotCi0yMDE0LTAxLTA4IDE1OjQ3OjEwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHRlc3RzOiBpbXByb3ZlIGNoZWNrLCBhbHNvIGNoZWNrIHN0cmVhbS10aW1lCi0KLTIwMTQtMDEtMDggMTU6MzE6MjggKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgotCSAgdGVzdHM6IGFkZCB1bml0IHRlc3QgZm9yIHNlZ21lbnQgX29mZnNldF9ydW5uaW5nX3RpbWUoKQotCSAgQWRkIGEgdW5pdCB0ZXN0IHRvIGNoZWNrIHRoYXQgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG9mZnNldHMgYXJlIGFwcGxpZWQKLQkgIGNvcnJlY3RseSBpbiB2YXJpb3VzIGNhc2VzLgotCi0yMDE0LTAxLTA4IDE1OjIzOjAwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IHRha2Ugb2Zmc2V0IGludG8gYWNjb3VudCBpbiBfdG9fcG9zaXRpb24oKQotCSAgVGFrZSB0aGUgb2Zmc2V0IGludG8gYWNjb3VudCB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBydW5uaW5nLXRpbWUgYW5kCi0JICBzZWdtZW50IHBvc2l0aW9ucy4KLQotMjAxNC0wMS0wOCAxNDo1NzowNCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogdXNlIG5ldyBzZWdtZW50IG9mZnNldCBtZXRob2QgdG8gYXBwbHkgdGhlIG9mZnNldAotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTQyMgotCi0yMDE0LTAxLTA4IDE0OjU0OjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHNlZ21lbnQ6IGFkZCBtZXRob2QgdG8gb2Zmc2V0IHRoZSBzZWdtZW50IHJ1bm5pbmctdGltZQotCSAgQWRkIGEgbWV0aG9kIHRoYXQgY2FuIGFwcGx5IGFuIG9mZnNldCB0byB0aGUgY2FsY3VsYXRlZCBydW5uaW5nLXRpbWUgb2YKLQkgIGEgc2VnbWVudC4KLQotMjAxNC0wMS0wOCAxNDo1MjowNCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiB0YWtlIG9mZnNldCBpbnRvIGFjY291bnQgZm9yIGV4cGVjdGVkIHNlZ21lbnQgcG9zaXRpb24KLQkgIFRoZSBmaXJ0IHZhbGlkIHNlZ21lbnQgcG9zaXRpb24gaXMgc3RhcnQgKyBvZmZzZXQuCi0JICBBbHNvIGFkZCBzb21lIG1vcmUgZGVidWcgYW5kIGEgRklYTUUKLQotMjAxNC0wMS0wOCAxNDo1MDoyOSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBkZWJ1ZyBzZWdtZW50IG9mZnNldCBmaWVsZCBhcyB3ZWxsCi0KLTIwMTQtMDEtMDggMDk6NTM6MDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogQWxsb3cgZ3Jvd2luZyBhIHF1ZXVlIGlmIGFsbCBvdGhlciBxdWV1ZXMgYXJlIG5vdCBsaW5rZWQKLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5ODkzCi0KLTIwMTQtMDEtMDcgMTY6MTg6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IGRvbid0IHRyeSB0byBzZWVrIHRvIC0xIG9mZnNldAotCSAgVGhlIG9mZnNldCBjYW4gYmUgLTEgd2hlbiB3ZSBhcmUgY29uZmlndXJlZCBpbiBUSU1FIGZvcm1hdC4gSW5zdGVhZCBvZgotCSAgZmFpbGluZyB0aGUgc2VlayBhbmQgZXJyb3JpbmcsIGRvIHdoYXQgYW5kIG9mZnNldCBvZiAtMSBpcyBzdXBwb3NlZCB0bwotCSAgZG8gYW5kIHNpbXBseSByZWFkIGZyb20gdGhlIGN1cnJlbnQgb2Zmc2V0LgotCi0yMDE0LTAxLTA2IDIxOjA0OjMyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGRlbW90ZSBlcnJvciB0byB3YXJuaW5nCi0JICBUaGlzIGlzIG5vdCBhbiBlcnJvci4gQSBzdWJjbGFzcyByZXR1cm5pbmcgRkFMU0UgZm9yIGlzX3NlZWthYmxlKCkgaXMgb25lIHdheSBvZgotCSAgc2F5aW5nIHRoYXQgd2UgY2FuJ3Qgb3BlcmF0ZSBpbiBwdWxsIG1vZGUuCi0KLTIwMTQtMDEtMDMgMTE6NDc6MjMgKzA4MDAgIFlhbnBpbmdaaGFuZyA8emhhbmd5YW5waW5nMjEwQDE2My5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogRml4IGhhbmdpbmcgaWYgc2h1dCBkb3duIHdoaWxlIGhhbmRsaW5nIGEgc2VyaWFsaXplZCBxdWVyeQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTI1MwotCi0yMDE0LTAxLTAyIDE2OjIyOjM3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVtb3ZlIHBlbmRpbmdfc2VnbWVudCBhcyBpdCB3YXMgYmVpbmcgbWlzdXNlZAotCSAgSXQgd2Fzbid0IHJlcXVpcmVkLCBpbnN0ZWFkIGJhc2VwYXJzZSB3YXMgdXNpbmcgaXQgdG8gY2hlY2sgdGhlIG1lZGlhCi0JICBjYXBzIHRvIGlkZW50aWZ5IGlmIGl0IHdhcyBoYW5kbGluZyBhdWRpbyBvciB2aWRlby4KLQkgIFRoZSBwZW5kaW5nX3NlZ21lbnQgd2FzIHJlbW92ZWQgYW5kIGEgY2hlY2tlZF9tZWRpYSBib29sZWFuCi0JICByZXBsYWNlZCBpdCBmb3IgYSBtb3JlIGFjY3VyYXRlIG5hbWluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjEzNTAKLQotMjAxNC0wMS0wMiAxMzo0Mzo1NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHB1c2ggcGVuZGluZyBldmVudHMgYmVmb3JlIEdBUCBldmVudAotCSAgQSBHQVAgZXZlbnQgaXMgaGFuZGxlZCBhcyBhbiBlbXB0eSBidWZmZXIgYnkgc2lua3MgYW5kIHRoZXkgZXhwZWN0Ci0JICB0byByZWNlaXZlIHN0YXJ0IHVwIGV2ZW50cyBiZWZvcmUgR0FQIGV2ZW50cyAobGlrZSBhIHNlZ21lbnQpLgotCSAgVGhpcyBpcyBpbXBvcnRhbnQgc3BlY2lhbGx5IGlmIHRoZXJlIGlzIGEgR0FQIGF0IHRoZSBiZWdpbm5pbmcgb2YKLQkgIGEgc3RyZWFtIChiZWZvcmUgYW55IGJ1ZmZlcnMpIHNvIHRoYXQgdGhlIHNlZ21lbnQgZXZlbnQgY2FuIGJlCi0JICBwdXNoZWQgZG93bnN0cmVhbSBiZWZvcmUgdGhlIEdBUAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTM1MAotCi0yMDE0LTAxLTAyIDEzOjQxOjI1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVmYWN0b3IgcGVuZGluZyBldmVudHMgcHVzaGluZwotCSAgUmVmYWN0b3IgY29kZSByZXBlYXRlZCAzIHRpbWVzIHRvIGEgY29tbW9uIGZ1bmN0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMzUwCi0KLTIwMTQtMDEtMDIgMjA6MTc6NTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtdG9jLnR4dDoKLQkgIGRlc2lnbi9wYXJ0LXRvYy50eHQ6IHVwZGF0ZSBkZXNpZ24gZG9jcwotCi0yMDE0LTAxLTAyIDEzOjM0OjUyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEFkZCB1bml0IHRlc3QgZm9yIGFkZGluZy9yZW1vdmluZyBibG9ja2luZyBwcm9iZXMgd2hpbGUgYSBwYWQgaXMgYmxvY2tlZAotCSAgQW5kIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIG5ldyBwcm9iZXMgYXJlIGFjdHVhbGx5IGNhbGxlZCBpZiB0aGV5IHNob3VsZAotCSAgaW5zdGVhZCBvZiBzaWxlbnRseSBibG9ja2luZyB0aGUgcGFkIGZvcmV2ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMjg5Ci0KLTIwMTQtMDEtMDIgMTM6MzM6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogQ2hlY2sgaWYgbmV3IHByb2JlcyBuZWVkIHRvIGJlIGNhbGxlZCB3aGVuIGFkZGluZy9yZW1vdmluZyBzb21lCi0JICBUaGlzIGFsbG93cyBibG9ja2luZyBhIHBhZCwgYWRkIGEgbmV3IGJsb2NraW5nIHByb2JlLCByZW1vdmluZwotCSAgdGhlIGZpcnN0IHByb2JlIGFuZCB0aGVuIGhhdmluZyB0aGUgc2Vjb25kIHByb2JlIGNhbGxlZC4gV2hpY2gKLQkgIGNvdWxkIHRoZW4gZGVjaWRlIHRoYXQgZGF0YS1mbG93IHNob3VsZCBhY3R1YWxseSBjb250aW51ZQotCSAgaW5zdGVhZCBvZiBibG9ja2luZyBub3cuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMjg5Ci0KLTIwMTQtMDEtMDIgMTE6MTM6MjcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgotCSAgdGVlOiBSZW1vdmUgZHluIGxvY2sKLQkgIEl0IHdhcyB1c2VkIGZvciBwYWQtYWxsb2MgaW4gMC4xMCBidXQgY3VycmVudGx5IGlzIGNvbXBsZXRlbHkgdW51c2VkCi0JICBhbmQgbm90IG5lY2Vzc2FyeS4gQWxsIHBhZCBhY2Nlc3MgaXMgcHJvdGVjdGVkIGJ5IHRoZSB0ZWUgb2JqZWN0IGxvY2sKLQkgIGFuZCBrZWVwaW5nIGFub3RoZXIgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHBhZC4KLQotMjAxNC0wMS0wMiAxMTowOTo1OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogS2VlcCBhbm90aGVyIHJlZiB0byBvdXIgb25lIGFuZCBvbmx5IHNyY3BhZCBhcm91bmQgd2hpbGUgcHVzaGluZwotCSAgQSBwYWQgcHJvYmUgb24gdGhhdCBwYWQgbWlnaHQgb3RoZXJ3aXNlIGp1c3QgcmVsZWFzZSB0aGUgcGFkLCBkcm9wCi0JICB0aGUgbGFzdCByZWZlcmVuY2UgYW5kIGNhdXNlIGdyZWF0IG1pc2VyeS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjEzMDAKLQotMjAxMy0xMi0zMCAxOTowMzoyMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBLZWVwIGFuIGV4dHJhIHJlZiBvZiB0aGUgcGFkIHdoZW4gY2FsbGluZyBhbiBJRExFIHByb2JlIGltbWVkaWF0ZWx5Ci0JICBUaGUgY2FsbGJhY2sgbWlnaHQgZGVzdHJveSB0aGUgcGFkLgotCi0yMDEzLTEyLTMwIDE4OjQ0OjI0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IE9ubHkgY2FsbCBJRExFIHByb2JlcyBpZiB3ZSBhcmUgYWN0dWFsbHkgaWRsZQotCSAgQWxzbyBvbmx5IGNoZWNrIHRoZSBkYXRhIHR5cGVzIGZvciBub24tSURMRSBwcm9iZXMuIFdoZW4gd2UKLQkgIGFyZSBpZGxlLCB3ZSBoYXZlIG5vIGRhdGEgdHlwZSBvYnZpb3VzbHkuCi0JICBQcmV2aW91c2x5IHdlIHdlcmUgY2FsbGluZyBJRExFIHByb2JlcyBkdXJpbmcgZGF0YSBmbG93IHdoZW5ldmVyCi0JICBhIG5vbi1ibG9ja2luZyBwcm9iZSB3b3VsZCBiZSBjYWxsZWQuIFRoZSBwYWQgd2FzIHVzdWFsbHkgbm90IGlkbGUKLQkgIGF0IHRoYXQgdGltZS4KLQotMjAxMy0xMi0zMCAxNjoxMDowOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgbmV0dGltZXByb3ZpZGVyOiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVjawotCSAgRXJyb3IgaXMgbmV2ZXIgTlVMTCB3aGVuIHdlIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KLQkgIENPVkVSSVRZIENJRCAxMDM3MTUxCi0KLTIwMTMtMTItMzAgMTY6MDU6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIFJldmVydCAibmV0dGltZXByb3ZpZGVyOiBSZW1vdmUgZGVhZCBjb2RlIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5NjQ5Y2Q0Y2ExOWE3NWQwMzE5MTE3YTc3YTc2MDllNGI4Yzk2NTMzLgotCSAgVGhpcyBpcyBub3QgcmlnaHQsIGFuZCBpdCdzIGFsc28gbm90IHdoYXQgY292ZXJpdHkKLQkgIGlzIGNvbXBsYWluaW5nIGFib3V0LgotCi0yMDEzLTEyLTMwIDE2OjQ3OjMyICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogUmVtb3ZlIHVubmVlZGVkIGNoZWNrcwotCSAgaXRlbSBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsLgotCSAgQ09WRVJJVFkgQ0lEIDEwMzcxNTIKLQkgIENPVkVSSVRZIENJRCAxMDM3MTUzCi0KLTIwMTMtMTItMzAgMTY6MzQ6MDggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIG5ldHRpbWVwcm92aWRlcjogUmVtb3ZlIGRlYWQgY29kZQotCSAgZXJyIGlzIGFsd2F5cyBOVUxMIGJ5IHRoZSBwb2ludCB3ZSByZWFjaCB0aGlzIGxpbmUKLQkgIENPVkVSSVRZIENJRCAxMDM3MTUxCi0KLTIwMTMtMTItMzAgMTQ6NDc6MTkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdsaXN0OiBmaXggc2luY2UgbWFya2VyIGFnYWluICgxLjMgLT4gMS40KQotCSAgU2luY2UgbWFya2VycyBzaG91bGQgcG9pbnQgdG8gdGhlIGFwcHJvcHJpYXRlIHN0YWJsZSB2ZXJzaW9uLgotCi0yMDEzLTEyLTMwIDE0OjQwOjQwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnbGlzdDogZml4IHNpbmNlLW1hcmtlciBpbiBkb2NzICh3ZSdyZSBpbiAxLjMuWCkKLQotMjAxMy0xMi0zMCAxNDoyMjozNyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdsaXN0OiBhZGQgYSB0YWcgZm9yIG1pZGkgYmFzZSBub3RlIG51bWJlcnMKLQkgIEF1ZGlvIGZpbGVzIGNvbnRhaW5pbmcgc2FtcGxlZCBpbnN0cnVtZW50cyBjYW4gaGF2ZSBtZXRhZGF0YSBkZXNjcmliaW5nIHRoZSBub3RlCi0JICB0aGF0IHdhcyBwbGF5ZWQgb24gdGhlIGluc3RydW1lbnQuCi0KLTIwMTMtMTItMzAgMTA6MDE6MzkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogRG9uJ3QgaWdub3JlIHByb2JlIGNhbGxiYWNrIHJldHVybiB2YWx1ZSB3aGVuIGltbWVkaWF0ZWx5IGNhbGxpbmcgSURMRSBwcm9iZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTA5NgotCi0yMDEzLTEyLTI5IDE0OjA2OjU1ICswMDAwICBQZWRybyBDw7RydGUtUmVhbCA8cGVkcm9AcGVkcm9jci5uZXQ+Ci0KLQkqIHNjcmlwdHMvZ2l0LXVwZGF0ZS5zaDoKLQkgIHNjcmlwdHM6IGdpdC11cGRhdGUuc2g6IGZpeCBmb3Igbm9uLW1hc3RlciBicmFuY2hlcwotCSAgUHVsbCBmcm9tIHRyYWNraW5nIGJyYW5jaCBpbnN0ZWFkIG9mIG9yaWdpbi9tYXN0ZXIsIHNvCi0JICB0aGF0IHRoaXMgd29ya3Mgd2l0aCBlLmcuIDEuMiBhcyB3ZWxsLgotCi0yMDEzLTEyLTI3IDEyOjU1OjAyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcGFyc2UvcGFyc2UubDoKLQkgIHBhcnNlOiBVc2UgR0xpYiBtYWxsb2MvZnJlZS9yZWFsbG9jIGZ1bmN0aW9ucwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDEwMAotCi0yMDEzLTEyLTI2IDEyOjE2OjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzY3JpcHRzL2NyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaDoKLQkgIHNjcmlwdHM6IGNyZWF0ZS11bmluc3RhbGxlZC1zZXR1cDogcmUtdXNlIGV4aXN0aW5nIG1hc3RlciBicmFuY2ggaWYgaXQgZXhpc3RzCi0JICBXaGVuIGNyZWF0aW5nIHNlcGFyYXRlIGNoZWNrb3V0IGZvciBub24tbWFzdGVyIGJyYW5jaGVzLgotCi0yMDEzLTEyLTI2IDExOjM5OjI3ICswMTAwICBFcmlrIEFuZHJlc2VuIDxlcmlrQHZvbnRhZW5lLmRlPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIGRvY3M6IGZpeCBtZW1vcnkgbGVhayBvZiBhcHBzaW5rIGV4YW1wbGUgaW4gbWFudWFsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMDc2Ci0KLTIwMTMtMTItMjIgMjI6MzM6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZGJlZGFhMCB0byBkNDhiZWQzCi0KLTIwMTMtMTItMjIgMjI6MDQ6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgZm9yIHN0cmluZyBjaGFuZ2VzCi0KLTIwMTMtMTItMjIgMjE6NTY6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL01ha2V2YXJzOgotCSAgcG86IHNldCBnZXR0ZXh0IGRvbWFpbiBpbiBNYWtldmFycyBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhdGNoIHRoZSBnZW5lcmF0ZWQgTWFrZWZpbGUuaW4uaW4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU0NTUKLQotMjAxMy0xMi0yMCAxNDo0MTowNiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgdXRpbHM6IEFkZCByb3VuZCBkb3duIDEyOCBtYWNybyBmb3IgY29tcGxldGVuZXNzCi0KLTIwMTMtMTEtMTMgMTc6MDY6MjMgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICB1dGlsczogQWRkIHJvdW5kIHVwIDEyOCBtYWNybwotCi0yMDEzLTEyLTIwIDE0OjMwOjIyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSAgZnVubmVsOiBTZXR0aW5nIHRoZSBQUk9YWV9DQVBTIGZsYWcgb24gdGhlIHNyY3BhZCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UKLQkgIGZ1bm5lbCBvdXRwdXRzIHdoYXRldmVyIG9uZSBvZiB0aGUgdXBzdHJlYW1zIGN1cnJlbnRseSBvdXRwdXRzLCBhIGNhcHMKLQkgIHF1ZXJ5IHRvIGEgcmFuZG9tIHVwc3RyZWFtIGRvZXMgbm90IGdpdmUgdGhlIHJpZ2h0IGFuc3dlciBoZXJlLgotCi0yMDEzLTEyLTIwIDExOjM3OjUzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSAgZnVubmVsOiBQcm94eSBDQVBTIGFuZCBBTExPQ0FUSU9OIHF1ZXJpZXMKLQotMjAxMy0xMS0xOCAxMDo0NjowMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogcG9zdCAxMDAlIGJ1ZmZlcmluZyBpZiBzaW5nbGUgcXVldWUgaXMgbm90IGxpbmtlZAotCSAgVGhpcyBtYWtlcyBidWZmZXJpbmcgc3RvcCBpbiBjYXNlIGEgc3RyZWFtIHN3aXRjaCBoYXBwZW5zLiBUaGlzIGlzCi0JICBpbXBvcnRhbnQgZm9yIGFkYXB0aXZlIHN0cmVhbXMgdGhhdCBjYW4gZGlzYWJsZSBub3QtbGlua2VkIHN0cmVhbXMKLQkgIHRvIGF2b2lkIGNvbnN1bWluZyB0aGUgbmV0d29yayBiYW5kd2lkdGguCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5NTc1Ci0KLTIwMTMtMTItMTggMDU6MTk6NDYgLTA1MDAgIFdpbGxpYW0gSm9uIE1jQ2FubiA8d2lsbGlhbS5qb24ubWNjYW5uQGdtYWlsLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sOgotCSAgZG9jczogZml4IHByb2plY3QgbGlua3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA2NjUKLQotMjAxMy0xMi0xMCAxNTo1Mzo1NCArMDEwMCAgRGF2aWQgU3ZlbnNzb24gRm9ycyA8ZGF2aWRzZkBheGlzLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiB1c2Ugc2VnbWVudCBzdGFydCBpZiBEVFMgZm9yIGZpcnN0IGJ1ZmZlciBpcyB1bnNldAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDE5OQotCi0yMDEzLTEyLTEyIDE3OjE3OjQwICswMDAwICBNYXR0aGlldSBCb3Vyb24gPG1hdHRoaWV1LmJvdXJvbkBjb2xsYWJvcmEuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogYWRkIGdzdHJlYW1lci12YWFwaSBwYXRocwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDMzNwotCi0yMDEzLTEyLTE0IDIxOjIwOjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLW5vaW5saW5lLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXItbm9pbmxpbmUuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXdyaXRlci1ub2lubGluZS5jOgotCSAgdGVzdHM6IGFkZCB1bml0IHRlc3QgZm9yIGJpdHJlYWRlciwgYnl0ZXJlYWRlciBhbmQgYnl0ZXdyaXRlciB3aXRoIG5vIGlubGluaW5nIHVzZWQKLQotMjAxMy0xMi0xNCAxODozODo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6Ci0JICBieXRlcmVhZGVyOiBhZGQgaW5saW5lIHZhcmlhbnQgb2YgZ3N0X2J5dGVfcmVhZGVyX2luaXQoKQotCi0yMDEzLTEyLTE0IDE4OjMxOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuYzoKLQkgIGRvY3M6IGZpeCBkb2NzIGZvciBnc3RfcXVldWVfYXJyYXlfcGVla19oZWFkKCkKLQotMjAxMy0xMi0xNCAxOTowODozNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlOiBEb24ndCBkZWZpbmUgeXlzY2FuX3QgdHdpY2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjAzMTYKLQotMjAxMy0xMi0xMyAyMjo1MTozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6Ci0JICBkb2NzOiBtb3ZpbmcgcGx1Z2luczogbWlub3IgMC4xMCAtPiAxLjAgZml4Ci0JICBTcG90dGVkIGJ5IEpheSBGZW5sYXNvbgotCi0yMDEzLTEyLTExIDE0OjQyOjM0ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlOiBkb24ndCBpZ25vcmUgZXZlbnQgcmV0dXJuIHZhbHVlCi0JICBQYXNzIHRoZSBldmVudCByZXR1cm4gdmFsdWUgdXBzdHJlYW0uCi0JICBSZW1vdmUgc3RyYW5nZSBnb3RvIGNvbnN0cnVjdC4KLQotMjAxMy0xMi0xMCAxODozMDowMyAtMDUwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGdzdC1sYXVuY2g6IEhhbmRsZSB0YWdsaXN0IGNvcHkgZmFpbHVyZQotCSAgSWYgd2UgY291bGRuJ3QgY29weSB0aGUgdGFncywganVzdCByZXR1cm4gaW5zdGVhZCBvZiB0cnlpbmcgdG8gdXNlIGJvZ3VzCi0JICB2YWx1ZXMuCi0KLTIwMTMtMTItMTAgMTg6MjU6MjIgLTA1MDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IEluZGV4IGZlYXR1cmVzIGFyZSBubyBtb3JlCi0JICBTbyByZW1vdmUgY29kZSB0aGF0IHdpbGwgbmV2ZXIgYmUgdXNlZAotCi0yMDEzLTEyLTEwIDE3OjUzOjI0IC0wNTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBGaXggY29tcGFyaXNpb24gb2YgZG91YmxlIHJhbmdlCi0JICBDaGVja2luZyB0d2ljZSB0aGUgbG93ZXIgYm91bmQgaXMgZ3JlYXQgKHlvdSBuZXZlciBrbm93LCBpdCBtaWdodCBjaGFuZ2UKLQkgIGJldHdlZW4gdGhlIHR3byBjYWxscyBieSBzb21lb25lIHVzaW5nIGVtYWNzIGJ1dHRlcmZseS1tb2RlKSwgYnV0IGl0J3MgYSBiaXQKLQkgIG1vcmUgdXNlZnVsIHRvIGNoZWNrIHRoZSBoaWdoZXIgYm91bmQgYXJlIGFsc28gaWRlbnRpY2FsLgotCSAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkKLQotMjAxMy0xMi0xMCAxNzowOTowNyAtMDUwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIGNvbnRyb2xsZXI6IEZpeCBvdXQtb2YtYm91bmRzIGRldGVjdGlvbgotCSAgV2Ugd2FudCB0byBhYm9ydCBpZiB3ZSBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSAqT1IqIGxvd2VyIHRoYW4gdGhlIG1pbmltdW0KLQkgIGFjY2VwdGVkIHZhbHVlLgotCSAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuCi0KLTIwMTMtMTItMDcgMTk6MDQ6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgcmVnaXN0ZXJpbmcgdGhlIHNhbWUgY2F0ZWdvcnkgdHdpY2UKLQotMjAxMy0xMi0wNyAxOTozMjo1OCArMDEwMCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsIDx2amFxdWV6QGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiByZXR1cm4gZXhpc3RpbmcgY2F0ZWdvcnkgaWYgYSBkZWJ1ZyBjYXRlZ29yeSBpcyByZWdpc3RlcmVkIHR3aWNlCi0JICBJZiBhIGNhdGVnb3J5IHdpdGggdGhlIHNhbWUgbmFtZSBpcyBmb3VuZCB3aGVuIGNyZWF0aW5nIGEgbmV3Ci0JICBvbmUsIHRoZSBmb3VuZCBjYXRlZ29yeSBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGludmFsaWQgcG9pbnRlci4KLQkgIEZpeGVzIGlzc3VlIHdpdGggZ3N0LXZhYXBpICh3aGljaCB1c2VzIGFuIGludGVybmFsIGNvcHkgb2YgdGhlCi0JICBjb2RlYyBwYXJzZXJzKSBjYXVzZWQgYnkgY29tbWl0IGNjYmE5MTMwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDAzNgotCi0yMDEzLTEyLTA3IDE1OjM4OjE5ICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXByb2dyZXNzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6Ci0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1idWZmZXJpbmcueG1sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbDoKLQkqIGRvY3MvbWFudWFsL291dGxpbmUudHh0OgotCSogZG9jcy9wd2cvYWR2YW5jZWQtY2xvY2sueG1sOgotCSogZG9jcy9wd2cvYWR2YW5jZWQtbmVnb3RpYXRpb24ueG1sOgotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzZmVhdHVyZXMuYzoKLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5oOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RlcnJvci5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogZ3N0L2dzdHBhcnNlLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cG9sbC5jOgotCSogZ3N0L2dzdHByZXNldC5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0b2NzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0eXBlZmluZC5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci1kb2NzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0Y29uZmlnLmg6Ci0JICBkb2NzOiBGaXggdHlwb3MgaW4gZnVuY3Rpb24vb2JqZWN0IGRlc2NyaXB0aW9ucwotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDAyOQotCi0yMDEzLTEyLTA3IDE1OjQwOjMyICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBGaXggc29tZSB0eXBvcyBpbiBjb2RlIGNvbW1lbnRzIGFuZCBkZWJ1ZyBtZXNzYWdlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDAyOQotCi0yMDEzLTEyLTA2IDIwOjUwOjE5ICswMDAwICBTdGV3YXJ0IEJyb2RpZSA8c3Rld2FydEBlaC5vcmc+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICBkb2NzOiBjbGFyaWZ5IGVuY29kaW5nIG9mIHN0cmluZ3MgaW4gR3N0U3RydWN0dXJlcyBhbmQgdGFnbGlzdHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkyNjIKLQotMjAxMy0wNy0wMiAyMDoyNzo1OSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBTZXQgZm9ybWF0IHRvIFRJTUUgaWYgZG8tdGltZXN0YW1wIGlzIFRSVUUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI4NDIKLQotMjAxMy0xMi0wNSAwMDoyNjoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IGdzdC1sYXVuY2g6IGRvbid0IHRyeSB0byByZW1vdmUgYWxyZWFkeS1yZW1vdmVkIEdTb3VyY2UgZnJvbSBtYWluIGxvb3AKLQkgIEl0J3MgY29uc2lkZXJlZCBhIHByb2dyYW1taW5nIGVycm9yIGluIHJlY2VudCBHTGliIHZlcnNpb25zIG5vdy4KLQkgIFdlIG1heSBhbHJlYWR5IGhhdmUgcmVtb3ZlZCB0aGUgc291cmNlIGJ5IHJldHVybmluZyBGQUxTRSBmcm9tCi0JICB0aGUgY2FsbGJhY2sgaWYgaXQgd2FzIGZpcmVkLiBGaXhlcyB3YXJuaW5nIHdpdGggbmV3ZXIgR0xpYnMKLQkgIHdoZW4gaW50ZXJydXB0aW5nIGEgcGlwZWxpbmUgd2l0aCBDb250cm9sLUMuCi0KLTIwMTMtMTItMDQgMTc6MzU6MTggLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBNYWtlIHN1cmUgdGhlIHNhbWUgY2F0ZWdvcnkgaXMgbm90IGFkZGVkIHR3aWNlCi0KLTIwMTMtMTItMDQgMTc6MzU6MDIgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBQcm90ZWN0IF9fY2F0ZWdvcmllcyBsaXN0IGluIGdldF9jYXRlZ29yeSB3aXRoIGxvY2sgdG9vCi0KLTIwMTMtMTItMDQgMDA6MTA6MzYgKzAxMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZG9jcy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSAgZG9jczogYWRkIG1pc3NpbmcgZmlsZXMgZm9yIGRpc3RyaWJ1dGlvbgotCSAgKiBhZGQgc29tZSBkb2N1bWVudGF0aW9uIGZpbGVzIGluIGRvY3MvZGVzaWduCi0JICAqIGFkZCBkb2NzL2xpc3QtdWxpbmsueHNsIHNvIGNoZWNrIGluIGRvY3MvbWFudWFsIHdvcmtzCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5ODE0Ci0KLTIwMTMtMTItMDMgMjE6NDY6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGFkZCBBQ0NFUFRfSU5URVJDRVBUIGZsYWcKLQkgIE1ha2UgYSBuZXcgZmxhZyBvbiB0aGUgcGFkIHRoYXQgdHdlYWtzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiB0aGUKLQkgIGFjY2VwdC1jYXBzIGZ1bmN0aW9uLiBCeSBkZWZhdWx0IGl0IHdpbGwgY2hlY2sgZm9yIGEgc3Vic2V0IG9mIHRoZQotCSAgcXVlcnktY2FwcyByZXN1bHQgYnV0IHRoaXMgaXMgbm90IGFsd2F5cyBkZXNpcmFibGUuIFRoZSBxdWVyeS1jYXBzCi0JICByZXN1bHQgY29udGFpbnMgYWxsIHRoZSBjb25zdHJhaW50cyB0byBtYWtlIGEgZ29vZCBjYXBzIGRlY2lzaW9uCi0JICB1cHN0cmVhbSBidXQgc29tZXRpbWVzLCBsaWtlIGZvciBwYXJzZXJzLCBub3QgYWxsIHRoZSBjb25zdHJhaW5lZCBjYXBzCi0JICBmaWVsZHMgYXJlIGtub3duIHVwc3RyZWFtIGFuZCB0aGVuIGEgc3Vic2V0IGNoZWNrIHdvdWxkIGZhaWwuIFN3aXRjaGluZwotCSAgdG8gYW4gaW50ZXJzZWN0aW9uIG1ha2VzIHRoaXMgd29yayBhZ2Fpbi4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1MDI0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NDAxCi0KLTIwMTMtMTItMDIgMjI6MjI6MzYgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogV2FrZSB1cCBvbiByZWNvbmZpZ3VyZSBldmVudAotCSAgQWZ0ZXIgcGF0Y2ggYmRhNDA2YzQsIHRoZSBzdGF0ZSBvZiB0aGUgc2luZ2xlcXVldWUgd2FzIHNldCB0byBPSywgYnV0IG5vdGhpbmcKLQkgIHdvdWxkIHRoZW4gd2FrZSB1cCB0aGUgdGhyZWFkLCBhcyB0aGUgb3RoZXIgd2FrZXVwIGZ1bmN0aW9ucyBvbmx5IGxvb2sgYXQKLQkgIHNpbmdsZXF1ZXVlcyB0aGF0IGFyZSBtYXJrZWQgYXMgaGF2aW5nIHJlY2VpdmVkIGFzIG5vdC1saW5rZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4MjAwCi0KLTIwMTMtMTEtMzAgMTI6MTU6MzcgKzAxMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbHNvdXJjZS5oOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmg6Ci0JICBkb2NzOiBhZGQgbWlzc2luZyBkb2NzLCBmaXhpbmcgZG9jIGVycm9ycwotCSAgKiBhZGQgbWFueSBtaXNzaW5nIGRlY2xhcmF0aW9ucyB0byBzZWN0aW9ucwotCSAgKiBHc3RDb250cm9sbGVyIGhhcyBiZWVuIHJlbW92ZWQsIHVwZGF0ZSBkb2NzCi0JICAqIHNraXAgR3N0SW5kZXggd2hlbiBnZW5lcmF0aW5nIGRvY3VtZW50YXRpb24KLQkgICogcmVwaHJhc2Ugc28gZ3RrZG9jIGRvZXNuJ3QgaW1hZ2luZSByZXR1cm4gdmFsdWUKLQkgICogYWRkIG1pc3NpbmcgYXJndW1lbnQgZGVzY3JpcHRpb24gZm9yIGdzdF9jb250ZXh0X25ldygpCi0JICAqIGRvY3VtZW50IEdzdE91dHB1dFNlbGVjdG9yUGFkTmVnb3RpYXRpb25Nb2RlIGFuZCBtb3ZlIHRvIGhlYWRlci1maWxlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5NjE0Ci0KLTIwMTMtMTEtMzAgMTQ6NTI6NDAgKzAxMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYzoKLQkgIGRvY3M6IGNvc21ldGljIGNoYW5nZXMgaW4gcmVmZXJlbmNlcy9kZWNyaXB0aW9ucwotCSAgKiBmaXggdHlwbyBHc3RCdWZmZXJGbGFnIC0+IEdzdEJ1ZmZlckZsYWdzCi0JICAqIGZpeCB0eXBvIEdzdEZlYXR1cmVzIC0+IEdzdENhcHNGZWF0dXJlcwotCSAgKiBmaXggdHlwbyBHc3RBbGxvY2F0b3JQYXJhbXMgLT4gR3N0QWxsb2NhdGlvblBhcmFtcwotCSAgKiBmaXggdHlwbyBHc3RDb250cmxTb3VyY2VzIC0+IEdzdENvbnRyb2xTb3VyY2UKLQkgICogZG8gbm90IHJlZmVyIHRvIGdzdGNoZWNrIGFzIGFuIG9iamVjdAotCSAgKiBtYWtlIHJlZmVyZW5jZXMgZ3RrX2luaXQoKSBhbmQgdGNhc2Vfc2V0X3RpbWVvdXQoKSBub3QgYmUgcmVmZXJlbmNlcwotCSAgKiBnc3RfZWxlbWVudF9nZXRfcGFkKCkgcmVuYW1lZCBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCgpCi0JICAqIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwoKSByZW5hbWVkIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jKCkKLQkgICogX2Ryb3BfZWxlbWVudCgpIGlzIHJlYWxseSBnc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50KCkKLQkgICogZ3N0X3BhZF9hY2NlcHRfY2FwcygpIHdhcyByZW1vdmVkLCBkbyBub3QgcmVmZXIgdG8gaXQKLQkgICogc2VwYXJhdGUgR1NUX01FVEFfVEFHX01FTU9SWV9TVFIgZGVjbGFyYXRpb24gZnJvbSBkZXNjcmlwdGlvbgotCSAgKiBkbyBub3QgZGVzY3JpYmUgcmVtb3ZlZCBnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3QoKQotCSAgKiBjb3JyZWN0bHkgbGluayB0byBHc3RFbGVtZW50Q2xhc3MnIHZpcnR1YWwgc2V0X2NvbnRleHQoKQotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTYxNAotCi0yMDEzLTExLTI5IDE0OjAwOjM1IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICBwYXJzZTogTWFudWFsbHkgaW5zZXJ0IHByaXZfZ3N0X3BhcnNlX3l5Z2V0L3NldF9jb2x1bW4gcHJvdG90eXBlcyBmb3Igb2xkZXIgZmxleAotCSAgT2xkZXIgdmVyc2lvbnMgb2YgZmxleCAoYmVmb3JlIDIuNS4zNikgZG9uJ3QgYWRkIHRoZSBwcm90b3R5cGUsIHNvIGl0IG11c3QKLQkgIGJlIGFkZGVkIG1hbnVhbGx5LiBXZSBjYW4ndCBjaGVjayBieSB0aGUgdmVyc2lvbiBudW1iZXIsIGJlY2F1c2UgRGViaWFuL1VidW50dQotCSAgcGF0Y2hlZCBpdCBpbnRvIHRoZWlyIDIuNS4zNSBhdCBzb21lIHBvaW50LgotCi0yMDEzLTExLTE5IDExOjQxOjU0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBnc3RwYWQ6IGRyb3AgYXNzZXJ0aW9uIG9uIGdzdF9wYWRfcGVlcl9xdWVyeV9wb3NpdGlvbgotCSAgSXQgaXMgYSAnYm90aCcgcXVlcnksIHNvIGl0IGNhbiBiZSBzZW50IGJvdGggd2F5cwotCi0yMDEzLTExLTE4IDE4OjExOjU2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBoYW5kbGUgZ2FwIGV2ZW50cwotCSAgVXNlIGdhcCBldmVudHMgdG8gYWR2YW5jZSB0aGUgc2VsZWN0b3IncyBwYWQgcG9zaXRpb24uCi0JICBUaGlzIGlzIHJlbGV2YW50IHRvIGtlZXAgc3luY19zdHJlYW1zIG1vZGUgd29ya2luZyB3aGVuIG9uZSBvZiB0aGUKLQkgIHN0cmVhbXMgZG9lc24ndCBoYXZlIGRhdGEgYWxsIHRoZSB0aW1lLgotCi0yMDEzLTExLTI5IDE3OjAyOjQxICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBSZXZlcnQgImdob3N0cGFkOiBjb3B5IHN0aWNreSBldmVudHMgdG8gU1JDIGdob3N0cGFkcyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgODE2MmE1ODNhNGRkNjg1ODJiZjE4NmUyZTQ3YThmMGQ2OGZhMTk4MC4KLQkgIEF1dG9tYXRpY2FsbHkgY29weWluZyB0aGUgc3RpY2t5IGV2ZW50cyBtYWtlcyBpdCBpbXBvc3NpYmxlIGZvciBhcHBzCi0JICBhbmQgZWxlbWVudHMgdG8gZmlsdGVyIHRoZSBldmVudHMgd2l0aCBldmVudCBwcm9iZXMuIFRoaXMgY2F1c2VzCi0JICByZWdyZXNzaW9ucyAoU2VlICM3MTk0MzcpLiBUaGUgYmVzdCBvcHRpb24gaXMgdG8gbGV0IHRoZSBhcHAvZWxlbWVudAotCSAgY29weSBhbmQgZmlsdGVyIHRoZSBldmVudHMgdGhlbXNlbHZlcyBhZnRlciB0aGUgZ2hvc3RwYWQgdGFyZ2V0IGlzCi0JICBzZXQuCi0KLTIwMTMtMTEtMTkgMTU6MDM6MzUgKzAxMDAgIEZhYmlhbiBLaXJzY2ggPGRlckZha2lyQHdlYi5kZT4KLQotCSogZ3N0L3BhcnNlLy5naXRpZ25vcmU6Ci0JKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2U6IGZpeCBzZWdmYXVsdGluZyBwcm90b3R5cGUtbWlzbWF0Y2gKLQkgIE5vdyBZWURFQlVHIGlzIGFsd2F5cyBzZXQsIHNvIGNoZWNrIGl0J3MgdmFsdWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI2NzkKLQotMjAxMy0xMS0yNyAxODozMjoyMiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xvY2s6IEZpeCBkb2NzdHJpbmcgZm9yIHJvdW5kLXRyaXAtbGltaXQgYW5kIHVuaW5pdCBhY2Nlc3Mgd2FybmluZy4KLQkgIEZpeCBhIHR5cG8gaW4gYSBkb2Mgc3RyaW5nIC0gdGhlIHByb3BlcnR5IGlzIHJvdW5kLXRyaXAtbGltaXQsIG5vdAotCSAgcm91bmR0cmlwLWxpbWl0LgotCSAgUmVtb3ZlIGEgYm9ndXMgR1NUX1dBUk5JTkcgdGhhdCBjYW4gcHJpbnQgYW4gdW5pbml0aWFsaXNlZCB2YXJpYWJsZQotCSAgYW5kIGlzIHJlZHVuZGFudCBhbnl3YXkuCi0KLTIwMTMtMTEtMjYgMTE6NTY6NDYgKzAxMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbG9jazogQWRkIHJvdW5kLXRyaXAtbGltaXQgcGFyYW1ldGVyCi0JICBTb21ldGltZXMsIHBhY2tldHMgbWlnaHQgdGFrZSBhIHZlcnkgbG9uZyB0aW1lIHRvIHJldHVybi4gU3VjaCBwYWNrZXRzCi0JICB1c3VhbGx5IGFyZSB3YXkgdG9vIGxhdGUgYW5kIGRlc3RhYmlsaXplIHRoZSByZWdyZXNzaW9uIHdpdGggdGhlaXIKLQkgIG9ic29sZXRlIGRhdGEuIE9uIFdpLUZpLCByb3VuZC10cmlwcyBvZiBvdmVyIDcgc2Vjb25kcyBoYXZlIGJlZW4gb2JzZXJ2ZWQuCi0JICBJZiB0aGUgbGltaXQgaXMgc2V0IHRvIGEgbm9uemVybyB2YWx1ZSwgcGFja2V0cyB3aXRoIGEgcm91bmQtdHJpcCBwZXJpb2QKLQkgIGxhcmdlciB0aGFuIHRoZSBsaW1pdCBhcmUgaWdub3JlZC4KLQkgIFNpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTIzODUKLQotMjAxMy0xMS0yNSAxOTowNDozOCAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogRml4IGdpIGFubm90YXRpb25zIG9mIGdzdF9zdHJ1Y3R1cmVfbmV3X2N1c3RvbSgpCi0KLTIwMTMtMTEtMjYgMDI6NDM6NTQgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG5ldGNsb2NrOiBGaXggQzk5IGNvbW1lbnQKLQotMjAxMy0xMS0yNiAwMjoxNzozNiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xvY2s6IEltcGxlbWVudCByb2xsaW5nLWF2ZXJhZ2UgZmlsdGVyIG9uIG9ic2VydmF0aW9ucy4KLQkgIEtlZXAgYSByb2xsaW5nIGF2ZXJhZ2Ugb2YgdGhlIHJvdW5kIHRyaXAgdGltZSBmb3IgbmV0d29yayBjbG9jawotCSAgb2JzZXJ2YXRpb25zLCBmYXZvdXJpbmcgc2hvcnRlciByb3VuZCB0cmlwcyBhcyBiZWluZyBtb3JlIGFjY3VyYXRlLgotCSAgRG9uJ3QgcGFzcyBhbnkgY2xvY2sgb2JzZXJ2YXRpb24gdG8gdGhlIGNsb2NrIHNsYXZpbmcgaWYgaXQgaGFzIGEKLQkgIHJvdW5kLXRyaXAgdGltZSBncmVhdGVyIHRoYW4gMiB0aW1lcyB0aGUgYXZlcmFnZS4KLQkgIEFjdHVhbCBzaGlmdHMgaW4gdGhlIG5ldHdvcmsgdG9wb2xvZ3kgd2lsbCBiZSBub3RpY2VkIGFmdGVyIHNvbWUKLQkgIHRpbWUsIGFzIHRoZSByb2xsaW5nIGF2ZXJhZ2UgaW5jb3Jwb3JhdGVzIHRoZSBuZXcgcm91bmQgdHJpcCB0aW1lcy4KLQotMjAxMy0xMS0yNSAyMDozMzo0MiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBBZGQgZGVidWcgaW50byBnc3RfYmFzZV9zaW5rX2RlZmF1bHRfcXVlcnkoKSBmb3IgYWNjZXB0X2NhcHMKLQotMjAxMy0xMS0xNCAxNTozMjo1OSArMDEwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogZXhpdCB3aXRoIGFuIGVycm9yIGNvZGUgd2hlbiBhbiBlcnJvciBvY2N1cmVkCi0JICBJZiB0aGUgcGlwZWxpbmUgZmFpbGVkIHRvIHByZS1yb2xsIG9yIHRoZSB1c2VyIGludGVycnVwdGVkIHRoZQotCSAgZXhlY3V0aW9uIHRoZW4gc2V0IHRoZSBleGl0IGNvZGUgdG8gYSBwb3NpdGl2ZSB2YWx1ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTIzMDAKLQotMjAxMy0xMS0yMiAwMTozNToxOCArMDEwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGdzdHV0aWxzOiBFc2NhcGUgc3RyZWFtIGlkIGZvcm1hdCBpbiBjb21tZW50cwotCSAgVGhlc2UgbXVzdCBiZSBlc2NhcGVkIGZvciBndGstZG9jIHRvIHBhcnNlIHRoZSBjb21tZW50cyB3aXRob3V0IHdhcm5pbmdzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDk4OQotCi0yMDEzLTExLTIxIDE1OjA0OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdHVyaS5jOgotCSAgZ3N0OiBnX21lbW1vdmUoKSBpcyBkZXByZWNhdGVkCi0JICBKdXN0IHVzZSBwbGFpbiBtZW1tb3ZlKCksIGdfbWVtbW92ZSgpIGlzIGRlcHJlY2F0ZWQgaW4KLQkgIHJlY2VudCBHTGliIHZlcnNpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjgxMQotCi0yMDEzLTExLTIxIDE0OjEzOjE2ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogY29weSBzdGlja3kgZXZlbnRzIHRvIFNSQyBnaG9zdHBhZHMKLQkgIFVwZGF0ZSB0aGUgc3RpY2t5IGV2ZW50cyBvbiBTUkMgZ2hvc3RwYWRzIHdoZW4gcmV0YXJnZXRpbmcuIFRoaXMgZW5zdXJlcwotCSAgdGhhdCB0aGUgZ2hvc3RwYWQgaGFzIHRoZSBleGVjdCBzYW1lIHN0aWNreSBldmVudHMgYXMgdGhlIHRhcmdldCBwYWQuIFdlCi0JICBkb24ndCB3YW50IHRvIGRvIHRoaXMgZm9yIFNJTksgZ2hvc3RwYWRzLCB0aGV5IGdvdCB0aGUgZXZlbnRzIGZyb20KLQkgIGRvd25zdHJlYW0gYW5kIHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIHRoZW0gd2l0aCB0aGUgdGFyZ2V0IHBhZAotCSAgZXZlbnRzLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNzYyMQotCi0yMDEzLTExLTIxIDEyOjI4OjAwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBtb3ZlIGRlYnVnIGZ1bmN0aW9uIGNsb3NlciB0byB0aGUgZW51bSBpdCBkZWJ1Z3MKLQotMjAxMy0xMS0xOCAyMTozOTo1NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSAgcGx1Z2lubG9hZGVyOiBjaGVjayByZWFkL3dyaXRlIGJlZm9yZSBjbG9zZWQKLQkgIGZpcnN0IHRyeSB0byByZWFkIG9yIHdyaXRlIG9uIHRoZSBzb2NrZXQgYmVmb3JlIGNoZWNraW5nIHRoZSBjbG9zZWQgc3RhdGUuIFRoaXMKLQkgIG1ha2VzIHN1cmUgd2UgaGFuZGxlIGFsbCBkYXRhIG9uIHRoZSBzb2NrZXQgYmVmb3JlIGVycm9yaW5nIG91dC4KLQotMjAxMy0xMS0xOCAyMTozNzowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIHBvbGw6IGltcHJvdmUgZGVidWcKLQkgIFNvIHRoYXQgd2UgY2FuIHNlZSB0aGUgcmV0dXJuIHZhbHVlcyBvZiBmdW5jdGlvbnMgaW4gdGhlIGxvZy4KLQotMjAxMy0xMS0xOCAxNToyODozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOgotCSAgdGVzdHM6IGZpeCBHc3RCdXMgdW5pdCB0ZXN0IHdpdGggbGF0ZXN0IEdMaWIKLQkgIGdfc291cmNlX3JlbW92ZSgpIHdvcmtzIG9uIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCwgYW5kCi0JICB3ZSdyZSBkb2luZyB0aGluZ3Mgd2l0aCBhIGN1c3RvbSBjb250ZXh0LiBGaXhlcyB3YXJuaW5nCi0JICB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMuCi0KLTIwMTMtMTEtMTYgMTI6MjQ6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uaDoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cXVldWVhcnJheS5jOgotCSAgZG9jczogY29zbWV0aWMgc2luY2UgbWFya2VyIGZpeGVzCi0KLTIwMTMtMTEtMTYgMTU6MTc6NTcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZW5zdXJlIHRvIHByZXNlcnZlIHVwc3RyZWFtIHRpbWVzdGFtcHMKLQkgIC4uLiByYXRoZXIgdGhhbiBoYXZlIHN1YmNsYXNzIGNvbWluZyB1cCB3aXRoIGFuIGludGVybmFsbHkgcGFyc2VkIG9uZS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDcyMzAKLQotMjAxMy0xMS0xNSAwNzozMjo0OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBSZXN5bmMgaXRlcmF0b3IgaWYgbmVjZXNzYXJ5Ci0KLTIwMTMtMTEtMTMgMTk6NTU6NDEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgIHZhbHVlOiBMaXN0cyB3aXRoIGFsbCBlcXVhbCBlbGVtZW50cyBhcmUgZXF1YWwgdG8gYSBzaW5nbGUgdmFsdWUKLQkgIE90aGVyd2lzZSBjYXBzIGNvbnRhaW5pbmcgZj17WCwgWH0gYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggZj1YCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MjUzCi0KLTIwMTMtMTEtMTEgMTY6NDc6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgc3lzdGVtY2xvY2s6IGFkZCBTaW5jZSBtYXJrZXJzIGZvciBuZXcgQVBJCi0KLTIwMTMtMTEtMTEgMTc6Mjk6NDggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBSZWFsbHkgdXBkYXRlIHRoZSBkZWYgZmlsZXMKLQotMjAxMy0xMS0xMSAxNzowMjozNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogVXBkYXRlIGRlZiBmaWxlcwotCi0yMDEzLTExLTExIDE2OjUwOjEzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogQWxzbyBleHBvcnQgTERfTElCUkFSWV9QQVRIIGZvciBnc3QtcGx1Z2lucy1nbAotCi0yMDEzLTExLTA1IDEyOjIyOjUxICswMDAwICBNYXR0aGlldSBCb3Vyb24gPG1hdHRoaWV1LmJvdXJvbkBjb2xsYWJvcmEuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogZXhwb3J0IGdzdC1wbHVnaW5zLWdsIERZTERfTElCUkFSWV9QQVRICi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExNDg4Ci0KLTIwMTMtMTEtMDYgMTg6NDY6MTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBBbHdheXMgc2VuZCBTRUVLIGV2ZW50cyB0byBhbGwgcGFkcywgZXZlbiBpZiBvbmUgZmFpbHMKLQotMjAxMy0xMS0wNiAxODo0MToxMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgY29sbGVjdHBhZHM6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGZvciBmbHVzaGluZyBzZWVrIGhhbmRsaW5nCi0KLTIwMTMtMTEtMDYgMTg6MDU6MjIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBEb24ndCBsZWFrIHNlZWsgZXZlbnRzCi0KLTIwMTMtMDktMTYgMDk6NTU6NTggKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICBjb2xsZWN0cGFkczogaW1wbGVtZW50IGZsdXNoaW5nIHNlZWsgc3VwcG9ydAotCSAgSW1wbGVtZW50IGNvbW1vbiBmbHVzaGluZyBzZWVrIGxvZ2ljIGluIEdzdENvbGxlY3RQYWRzLiBBZGQgbmV3Ci0JICBBUEkgc28gdGhhdCBlbGVtZW50cyBjYW4gb3B0LWluIHRvIHVzaW5nIHRoZSBuZXcgbG9naWMKLQkgIChnc3RfY29sbGVjdF9wYWRzX3NyY19ldmVudF9kZWZhdWx0KSBhbmQgY2FuIGV4dGVuZCBpdAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoX2Z1bmN0aW9uKSB0byBmbHVzaCBhbnkgaW50ZXJuYWwKLQkgIHN0YXRlLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDY3NzkgYW5kCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2NDQxIGZvciB0aGUKLQkgIGJhY2tncm91bmQgZGlzY3Vzc2lvbi4KLQkgIEFQSTogZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hfZnVuY3Rpb24oKQotCSAgQVBJOiBnc3RfY29sbGVjdF9wYWRzX3NyY19ldmVudF9kZWZhdWx0KCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg0MTYKLQotMjAxMy0wOS0xNiAwODozNTozNyArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzoKLQkgIHRlc3RzOiBjb2xsZWN0cGFkczogYWRkIGZsdXNoaW5nIHNlZWsgdGVzdHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg0MTYKLQotMjAxMy0wOS0xNiAwODozMTo0NyArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzoKLQkgIHRlc3RzOiBjb2xsZWN0cGFkczogdHdlYWsgc3R1YiBfY29sbGVjdCB0byBwdXNoIGFsbCBidWZmZXJzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4NDE2Ci0KLTIwMTMtMDktMTYgMDg6MjY6MjUgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbGxlY3RwYWRzLmM6Ci0JICB0ZXN0czogY29sbGVjdHBhZHM6IHVwZGF0ZSBteSBlbWFpbCBhZGRyZXNzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4NDE2Ci0KLTIwMTMtMTEtMTEgMTM6Mjc6MjcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogRG9uJ3QgdXNlIGdzdF9idWZmZXJfZ2V0X3NpemUoKSB3aGVuIHBvc3NpYmxlCi0JICBNYWtlcyBxc3RfcXVldWVfbG9ja2VkX2RlcXVldWUgMjAlIGZhc3RlcgotCi0yMDEzLTExLTExIDEyOjI1OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBzeXN0ZW1jbG9jazogQWRkIGdzdF9zeXN0ZW1fY2xvY2tfc2V0X2RlZmF1bHQKLQkgIFVzZWQgZm9yIHNldHRpbmcgdGhlIGRlZmF1bHQgc3lzdGVtIGNsb2NrIHRoYXQgaXMgb2J0YWluZWQgdGhyb3VnaAotCSAgZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4oKSwgd2hpY2ggaXMgc29tZXRpbWVzIG5lZWRlZCBmb3IgdW5pdAotCSAgdGVzdGluZy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEyNjkKLQotMjAxMy0xMS0wNCAxODo1NzoxOCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6Ci0JICB0eXBlZmluZDogdXNlIGdfZ2V0X3ByZ25hbWUoKSBmb3IgZXJyb3IgbWVzc2FnZQotCi0yMDEzLTExLTA2IDEwOjE1OjU5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICB2YWx2ZTogcHJveHkgY2FwcyBhbmQgYWxsb2NhdGlvbgotCSAgUHJveHkgdGhlIGNhcHMgcXVlcmllcyBvbiB0aGUgc3JjcGFkIGFzIHdlbGwuCi0JICBQcm94eSB0aGUgYWxsb2NhdGlvbiBxdWVyeSBvbiB0aGUgc2lua3BhZC4KLQotMjAxMy0xMS0wNSAxMToxNzoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDg2NWFhMjAgdG8gZGJlZGFhMAotCi0yMDEzLTExLTA0IDEzOjU2OjM3IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IFJlbW92ZSBzb21lIGRlYWQgY29kZQotCi0yMDEzLTExLTA0IDExOjQ4OjQ3ICswMTAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBleHBsaWNpdGx5IGNhc3QgdG8gR3N0TG9ja0ZsYWdzIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzCi0KLTIwMTMtMTEtMDIgMTU6MzY6MTkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IHJlc3VycmVjdCBzYW5pdGl6aW5nIHN0YXJ0IGFuZCBzdG9wIGZvciBzZWVraW5nCi0KLTIwMTMtMTEtMDIgMTU6NDI6MDcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBtaW5kIGJvZ2dsaW5nIHdyYXAgd2hlbiBjb21wYXJpbmcgb2Zmc2V0cwotCi0yMDEzLTExLTAyIDE1OjM4OjEzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHRyeSBmaXJzdCBmcmFtZSBwdHMgYW5kIGR0cyBmb3IgYSB2YWxpZCBzdGFydCB0aW1lc3RhbXAKLQotMjAxMy0xMS0wMiAxNTozNzozMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcmludCBwcm9wZXIgdmFyaWFibGUgaW4gZGVidWcgc3RhdGVtZW50Ci0KLTIwMTMtMTEtMDEgMTY6MzU6NTkgKzAwMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSAgcGFyc2U6IE1ha2UgdGhlIEZBVEFMX0VSUk9SUyBmbGFnIGFsc28gd29yayB3aXRob3V0IGEgR0Vycm9yCi0JICBBbHNvIGFkZCBhIHVuaXQgdGVzdHMKLQotMjAxMy0xMC0yMyAxNTo1NjoyMCArMDEwMCAgTWF0dGhpZXUgQm91cm9uIDxtYXR0aGlldS5ib3Vyb25AY29sbGFib3JhLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogZml4IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA3NTgKLQotMjAxMy0xMC0zMSAxNjoxNjo0OCAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ac2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtZnJhbWVzdGVwLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1wcm9iZXMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1yZWxhdGlvbnMudHh0OgotCSAgZG9jczogZml4IGNvbW1vbiB0eXBvcyBlbWl0ZWQvZWFjaG90aGVyLy4uLgotCi0yMDEzLTEwLTMwIDIxOjUzOjM2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgdXRpbHM6IEFkZCBzb21lIGF0dHJpYnV0ZXMgYW5kIHJlb3JnYW5pemUgY29kZSB0byBmaXggY29tcGlsZXIgd2FybmluZ3MKLQkgIGdzdHV0aWxzLmM6MzY1OTo0MTogZXJyb3I6IGZvcm1hdCBzdHJpbmcgaXMgbm90IGEgc3RyaW5nIGxpdGVyYWwKLQkgIFstV2Vycm9yLC1XZm9ybWF0LW5vbmxpdGVyYWxdCi0JICBnY2hhciAqZXhwYW5kZWQgPSBnX3N0cmR1cF92cHJpbnRmIChzdHJlYW1faWQsIHZhcl9hcmdzKTsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA2MjEKLQotMjAxMy0xMC0yNSAxNDo1NjoxNiArMDIwMCAgQW50b25pbyBPc3BpdGUgPG9zcGl0ZUBzdHVkZW50aS51bmluYS5pdD4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtbmVnb3RpYXRpb24ueG1sOgotCSAgcHdnOiByZW5hbWUgdGhlICJzYW1wbGVyYXRlIiB2YXJpYWJsZSB0byBtYWtlIGV4YW1wbGUgY29kZSBjb21waWxhYmxlCi0JICBJbiBvbmUgb2YgdGhlIGV4YW1wbGVzIGFib3V0IGdzdF9teV9maWx0ZXJfc2V0Y2FwcygpIHRoZXJlIGlzIGEgdmFyaWFibGUKLQkgIGRlY2xhcmVkIGFzICJyYXRlIiwgYnV0IHRoZW4gdGhlIG5hbWUgInNhbXBsZXJhdGUiIGlzIHVzZWQgd2hlbiBzZXR0aW5nCi0JICB0aGUgY2Fwcy4KLQkgIFVzZSB0aGUgbmFtZSAicmF0ZSIgZXZlcnl3aGVyZSBpbiBnc3RfbXlfZmlsdGVyX3NldGNhcHMoKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA4NzYKLQotMjAxMy0xMC0yOSAxODowOTozMiArMDEwMCAgRmFiaWFuIEtpcnNjaCA8ZGVyRmFraXJAd2ViLmRlPgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSAgZG9jOiBmaXggZm9yd2FyZCByZWZlcmVuY2UgYWJvdXQgZ2hvc3QgcGFkcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTA4OQotCi0yMDEzLTEwLTI4IDEyOjU1OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlci50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWNhcHMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1jb250ZXh0LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgotCSAgZG9jczogZGVzaWduOiBmaXggc29tZSBmaXhlcwotCi0yMDEzLTEwLTI2IDA5OjQ4OjA2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL2ZhcS9kZXZlbG9waW5nLnhtbDoKLQkgIGRvY3M6IGZsZXNoIG91dCBnc3QtdW5pbnN0YWxsZWQgZW50cnkgaW4gZmFxIHNvbWUgbW9yZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTkxNgotCi0yMDEzLTEwLTE2IDE1OjAwOjQxICswMjAwICBGYWJpYW4gS2lyc2NoIDxkZXJGYWtpckB3ZWIuZGU+Ci0KLQkqIGRvY3MvZmFxL2RldmVsb3BpbmcueG1sOgotCSAgZG9jczogRkFRIHVwZGF0ZSB0byBtZW50aW9uIGNyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTkxNgotCi0yMDEzLTEwLTI1IDIxOjI5OjAxICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkgIHJlZ2lzdHJ5OiBzbWFsbCBjbGVhbnVwcyBhbmQgdXNlIG9iamVjdCBsb2cgdmFyaWFudHMgbW9yZQotCi0yMDEzLTEwLTI1IDIxOjI4OjMwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkgIHByaXZhdGU6IHJlbW92ZSBsZWZ0LW92ZXIgY29tbWVudAotCSAgVGhlIGNhcHMgYXJlIHNhdmVkIGluIHRoZSByZWdpc3RyeS4KLQotMjAxMy0xMC0yNSAxODo1MTo1MyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeTogdXNlIGdfc2xpY2VfZnJlZSBmb3Igc2xpY2UgbWVtb3J5Ci0JICBBdm9pZCBtZW1vcnkgbGlzdCBjb3JydXB0aW9uLCBidXQgZ19mcmVlJ2luZyBzbGljZSBtZW1vcnkuCi0KLTIwMTMtMTAtMjMgMTg6MTY6NTQgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRyYWNpbmcudHh0OgotCSAgZGVzaWduOiBmbGVzaCBvdXQgdGhlIHRyYWNpbmcgZGVzaWduIGEgbGl0dGxlIG1vcmUKLQotMjAxMy0xMC0yNSAxMTowMjoxOSAtMDQwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgZG9jczogZml4IHR5cG9zIGluIGdzdG9iamVjdAotCi0yMDEzLTEwLTIxIDE4OjAxOjIxIC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyLnZlcmRlam9AcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKLQkgIGRvY3M6IEdyYW0gYW5kIG5pdCBmaXhlcyBmb3IgcGFydC1tZXRhLnR4dAotCi0yMDEzLTEwLTE0IDIyOjAzOjUwIC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyLnZlcmRlam9AcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNvdXJjZS50eHQ6Ci0JICBkb2NzOiBHcmFtIGFuZCBuaXQgZml4ZXMgZm9yIHBhcnQtZWxlbWVudC1zb3VyY2UudHh0Ci0KLTIwMTMtMTAtMTQgMjE6NTQ6MzEgLTA3MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6Ci0JICBkb2NzOiBHcmFtIGFuZCBuaXQgZml4ZXMgZm9yIHBhcnQtc2luay50eHQKLQotMjAxMy0xMC0xNCAxODo0Mzo0MCAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHBhcnRuZXIuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtY29udmVudGlvbnMudHh0OgotCSAgZG9jczogR3JhbSBhbmQgbml0IGZpeGVzIGZvciBwYXJ0LWNvbnZlbnRpb25zLnR4dAotCi0yMDEzLTEwLTE0IDE4OjM0OjA2IC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyLnZlcmRlam9AcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jb250cm9sbGVyLnR4dDoKLQkgIGRvY3M6IEdyYW0gYW5kIG5pdCBmaXhlcyBmb3IgcGFydC1jb250cm9sbGVyLnR4dAotCi0yMDEzLTEwLTE0IDE4OjI0OjE4IC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyLnZlcmRlam9AcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jb250ZXh0LnR4dDoKLQkgIGRvY3M6IEdyYW0gYW5kIG5pdCBmaXhlcyBmb3IgcGFydC1jb250ZXh0LnR4dAotCi0yMDEzLTEwLTE0IDE4OjEzOjM1IC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyLnZlcmRlam9AcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgotCSAgZG9jczogR3JhbSBhbmQgbml0IGZpeGVzIGZvciBwYXJ0LWNsb2Nrcy50eHQKLQotMjAxMy0xMC0xNCAxODowNTo0MyAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHBhcnRuZXIuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQ6Ci0JICBkb2NzOiBHcmFtIGFuZCBuaXQgZml4ZXMgZm9yIHBhcnQtY2Fwcy50eHQKLQotMjAxMy0xMC0xNCAxNzo0NDoyNyAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHBhcnRuZXIuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyLnR4dDoKLQkgIGRvY3M6IEdyYW0gYW5kIG5pdCBmaXhlcyBmb3IgcGFydC1idWZmZXIudHh0Ci0KLTIwMTMtMTAtMTQgMTc6Mjk6MTkgLTA3MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0OgotCSAgZG9jczogR3JhbSBhbmQgbml0IGZpeGVzIGZvciBwYXJ0LWJ1ZmZlcnBvb2wudHh0Ci0KLTIwMTMtMTAtMTQgMDU6Mzk6MTkgLTA3MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6Ci0JICBkb2NzOiBHcmFtIGFuZCBuaXQgZml4ZXMgZm9yIHBhcnQtYnVmZmVyaW5nLnR4dAotCi0yMDEzLTEwLTEzIDIxOjE2OjQ3IC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyLnZlcmRlam9AcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6Ci0JICBkb2NzOiBHcmFtIGFuZCBuaXQgZml4ZXMgZm9yIHBhcnQtbWVzc2FnZXMudHh0Ci0KLTIwMTMtMTAtMTMgMjA6NDI6NDAgLTA3MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lbW9yeS50eHQ6Ci0JICBkb2NzOiBHcmFtIGFuZCBuaXQgZml4ZXMgZm9yIHBhcnQtbWVtb3J5LnR4dAotCi0yMDEzLTEwLTE4IDA4OjU4OjA1ICswMTAwICBQaGlsaXAgV2l0aG5hbGwgPHBoaWxpcC53aXRobmFsbEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6Ci0JICBuZXQ6IENvbnN0aWZ5IGEgcGFyYW1ldGVyIHRvIGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldygpCi0JICBFdmVuIHRob3VnaCB0aGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZCwgaXQgc2hvdWxkIGJlIGNvbnN0IHRvIGZpdCBpbiB3aXRoIHRoZQotCSAgY29kaW5nIHN0YW5kYXJkcyBmb3Igb3RoZXIgc2ltaWxhciBwYXJhbWV0ZXJzLiBDbGllbnQgY29kZSBhbHJlYWR5IHBhc3NlcyBpbgotCSAgY29uc3Qgc3RyaW5ncyB1bmRlciB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGV5IHdvbuKAmXQgYmUgbW9kaWZpZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDQyCi0KLTIwMTMtMTAtMTUgMTE6NDQ6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JICBkYXRldGltZTogTWFrZSBzdXJlIHRvIGluY2x1ZGUgZ3N0X3ByaXZhdGUuaCBiZWZvcmUgZ2xpYi1jb21wYXQtcHJpdmF0ZS5oCi0JICBXZSBuZWVkIHRvIGRlZmluZSB0aGUgR0xpYiBsb2cgZG9tYWluIGJlZm9yZSBpbmNsdWRpbmcgZ2xpYi5oLCB3aGljaCBpcwotCSAgaW5jbHVkZWQgYnkgZ2xpYi1jb21wYXQtcHJpdmF0ZS5oLgotCi0yMDEzLTEwLTE0IDE4OjA3OjE3IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBBZGQgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgdG8gc2VjdGlvbnMudHh0Ci0JICBTbyBpdCBhcHBlYXJzIGluIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbgotCi0yMDEzLTA5LTI5IDE3OjM1OjExICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSAgdGVzdHMvZmlsZXNyYzogU2V0IGxvY2F0aW9uIGluIHdyb25nIHN0YXRlCi0JICBBbHNvIHJlbW92ZSBpbmNvcnJlY3QgY29tbWVudCBhYm91dCBjb2RlIHBvc3NpYmx5IG5vdCBiZWluZyByZWFjaGFibGUKLQkgIHRoYXQgaXMgbm93IGV4ZXJjaXNlZCBieSB0aGUgZmlsZXNyYyB1bml0IHRlc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5ODMxCi0KLTIwMTMtMTAtMTIgMTY6MTY6MDkgKzExMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHBhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6Ci0JICBwYXJzZTogRml4IHRyYW5zZmVyIGFubm90YXRpb25zIGZvciBwYXJzZV9sYXVuY2ggZnVuY3Rpb25zLgotCSAgZ3N0X3BhcnNlX2xhdW5jaHYsIGdzdF9wYXJzZV9sYXVuY2h2X2Z1bGwgYW5kIGdzdF9wYXJzZV9sYXVuY2hfZnVsbAotCSAgYWxsIHJldHVybiBmbG9hdGluZyByZWZzLCB0aGUgc2FtZSBhcyBnc3RfcGFyc2VfbGF1bmNoLCB3aGljaCBqdXN0Ci0JICBjYWxscyBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgaW50ZXJuYWxseSBhbnl3YXkuCi0JICBBZGQgYSB1bml0IHRlc3QgYXNzZXJ0aW9uIHRvIGNoZWNrIGl0J3MgdHJ1ZS4KLQkgIFNwb3R0ZWQgYnkgbmVtZXF1IG9uIElSQy4KLQotMjAxMy0xMC0xMCAwODozMDoyNyAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHBhcnRuZXIuc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWw6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiB0ZXN0cy9taXNjL3Rlc3QtZ3N0cmVhbWVyLWNvbXBsZXRpb24uc2g6Ci0JICBjb3JlOiBGaXggbWF4IERFQlVHX0xFVkVMIGluY29uZ3J1ZW5jZSBvbiA1IHZzIDkKLQkgIEluIHRoZSBkb2NzIGFuZCB0aGUgYXV0b2NvbXBsZXRpb24gbG9naWMgdGhlIG1heGltdW0KLQkgIHZhbHVlIGp1bXBlZCBpbmNvbmdydWVudGx5IGJldHdlZW4gNSBhbmQgOS4KLQotMjAxMy0xMC0xMCAxMzoxOTowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogU2tpcCB0ZXN0X3N1YnNldF9kdXBsaWNhdGlvbiB1bnRpbCB0aGUgYnVnIGlzIGZpeGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MjUzCi0KLTIwMTMtMTAtMTAgMTI6NTY6NTQgKzAyMDAgIEZhYmlhbiBLaXJzY2ggPGRlckZha2lyQHdlYi5kZT4KLQotCSogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKLQkqIGRvY3MvbWFudWFsL2ludHJvLW1vdGl2YXRpb24ueG1sOgotCSogZG9jcy9tYW51YWwvbWFudWFsLnhtbDoKLQkgIGRvY3M6IEZpeCBzb21lIHJlZmVyZW5jZSBVUklzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5ODA0Ci0KLTIwMTMtMTAtMDIgMTM6MDM6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IEFkZCBhIHRlc3RjYXNlIGZvciBzdWJzZXQgY2hlY2tzIG9uIGxpc3RzIHdpdGggZHVwbGljYXRlZCBpdGVtcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTI1MwotCi0yMDEzLTEwLTA5IDE1OjM2OjQ4IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBDYWxsIHRoZSBjb2xsZWN0ZWQgZnVuY3Rpb24gd2hpbGUgaXQgcmV0dXJucyBGTE9XX09LCi0JICBUaGlzIGFsbG93cyB1cyB0byBtYWtlIHN1cmUgdGhlIGVsZW1lbnRzIGlzIEVPUyBhbmQgZG9lcyBub3QgaGF2ZQotCSAgcmVtYWluaW5nIGJ1ZmZlcnMgdG8gYmUgZHJhaW5lZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk2MzcKLQotMjAxMy0xMC0wNSAxMDowODozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgotCSAgZG9jczogZml4IGZ1bmN0aW9uIG5hbWUgaW4gcW9zIGRlc2lnbiBkb2NzCi0KLTIwMTMtMTAtMDIgMTI6MzA6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkgIHRlc3RzOiB1c2UgdGNhc2Vfc2tpcF9icm9rZW5fdGVzdCgpIHRvIHNraXAgYnJva2VuIG11bHRpcXVldWUgdGVzdAotCSAgU28gdGhhdCB3ZSBnZXQgYSB3YXJuaW5nIGluIHRoZSBvdXRwdXQgdGhhdCByZW1pbmRzIHVzIHRoYXQKLQkgIHNvbWV0aGluZyBuZWVkcyB0byBiZSBmaXhlZC4KLQotMjAxMy0xMC0wMiAxMToyNDowMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkgIGNoZWNrOiBEaXNhYmxlIG11bHRpcXVldWUgdGVzdF9vdXRwdXRfb3JkZXIgY2hlY2sKLQkgIFRoZSBjaGVjayBpdHNlbGYgaXMgcmFjeS4KLQkgIChDS19GT1JLPW5vIEdTVF9DSEVDSz10ZXN0X291dHB1dF9vcmRlciBtYWtlIGVsZW1lbnRzL211bHRpcXVldWUuZm9yZXZlcikuCi0JICBUaGUgcHJvYmxlbSBpcyBpbmRlZWQgdGhlIHRlc3QgYW5kIG5vdCB0aGUgYWN0dWFsIGVsZW1lbnQgYmVoYXZpb3VyLgotCSAgVGhlIG9iamVjdHMgdG8gcHVzaCBhcmUgYmVpbmcgcHVsbGVkIG91dCBvZiB0aGUgc2luZ2xlIGludGVybmFsIHF1ZXVlcyBpbiB0aGUKLQkgIHJpZ2h0IG9yZGVyIGFuZCBhdCB0aGUgcmlnaHQgdGltZS4uLgotCSAgQnV0IGJldHdlZW46Ci0JICAqIHRoZSBtb21lbnQgdGhlIGdsb2JhbCBtdWx0aXF1ZXVlIGxvY2sgaXMgcmVsZWFzZWQgKHdoaWNoIHdhcyB1c2VkIHRvIGRldGVjdAotCSAgaWYgd2Ugc2hvdWxkIHBvcCBhbmQgcHVzaCBkb3duc3RyZWFtIHRoZSBuZXh0IGJ1ZmZlcikKLQkgICogYW5kIHRoZSBtb21lbnQgaXQgaXMgcmVjZWl2ZWQgYnkgdGhlIHNvdXJjZSBwYWQgKHdoaWNoIGRvZXMgdGhlIGNoZWNrKQotCSAgPT4gYW5vdGhlciBzaW5nbGUgcXVldWUgKGxpa2UgdGhlIHVubGlua2VkIHBhZCkgbWlnaHQgcG9wIGFuZCBwdXNoIGEgYnVmZmVyCi0JICBkb3duc3RyZWFtCi0JICBXaGF0IHNob3VsZCB3ZSBkbyA/IFB1dHRpbmcgYSBiaWdnZXIgbWFyZ2luIG9mIGVycm9yIChzYXkgNSBidWZmZXJzKSBkb2Vzbid0Ci0JICBoZWxwLCBpdCdsbCBldmVudHVhbGx5IGZhaWwuCi0JICBJIGNhbid0IHNlZSBob3cgd2UgY2FuIGRldGVjdCB0aGlzIHJlbGlhYmx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwODY2MQotCi0yMDEzLTA5LTI1IDE5OjA2OjU1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogZml4IGNhcHMgc2VyaWFsaXphdGlvbiB3aGVuIHRoZXJlIGFyZSBjYXBzIGluc2lkZSBjYXBzCi0JICBXcmFwIGNhcHMgc3RyaW5ncyBzbyB0aGF0IGl0IGNhbiBoYW5kbGUgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uCi0JICBvZiBjYXBzIGluc2lkZSBjYXBzLiBPdGhlcndpc2UgdGhlIHZhbHVlcyBmcm9tIHRoZSBpbnRlcm5hbCBjYXBzIGFyZSBwYXJzZWQKLQkgIGFzIGlmIHRoZXkgd2VyZSBmcm9tIHRoZSB1cHBlciBvbmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg3NzIKLQotMjAxMy0wOS0yOCAwODo0MDo0MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSAgcGx1Z2lubG9hZGVyOiBDaGVjayBlcnJvcnMgb24gdGhlIHByb3BlciBmZAotCSAgTW9zdCBsaWtlbHkgYSBjb3B5LXBhc3RlIGVycm9yIGZyb20gdGhlIGJsb2NrIGJlZm9yZS4KLQkgIElmIHdlJ3JlIGdvaW5nIHRvIGNoZWNrIGZvciBlcnJvci9jbG9zZWQgb24gdGhlIHdyaXRlIGZkLi4uIGRvIGl0Ci0JICBvbiB0aGUgd3JpdGUgZmQKLQotMjAxMy0wOS0yNiAxNDowOTowMiAtMDYwMCAgQnJlbmRhbiBMb25nIDxiLmxvbmdAY2FibGVsYWJzLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBkb2NzOiBmaXggc3BlbGxpbmcgb2YgImdlbmVyaWMiIGluIEdzdEJhc2VTcmMncyBkb2N1bWVudGF0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwODg3MAotCi0yMDEzLTA5LTI2IDExOjMyOjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IG9ubHkgY2hlY2sgZXZlbnQgb3JkZXIgd2hlbiBzb21ldGhpbmcgY2hhbmdlZAotCSAgQ2hlY2sgdGhlIGV2ZW50IG9yZGVyIGluIGRhdGFmbG93IG9ubHkgd2hlbiBzb21ldGhpbmcgY2hhbmdlZCBpbnN0ZWFkCi0JICBvZiBmb3IgZWFjaCBidWZmZXIuCi0KLTIwMTMtMDktMjQgMTg6Mjg6MDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIFJFQURNRToKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2YjAzYmE3IHRvIDg2NWFhMjAKLQotMjAxMy0wOS0yNCAxNTowNToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEFjdHVhbGx5IHVzZSAxLjMuMC4xIGFzIHZlcnNpb24gdG8gbWFrZSBjb25maWd1cmUgaGFwcHkKLQotMjAxMy0wOS0yNCAxNTowMDoxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMi4wID09PQotCi0yMDEzLTA5LTI0IDE0OjA3OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuMi4wCi0KLTIwMTMtMDktMjQgMTQ6MDY6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEzLTA5LTI0IDEzOjEwOjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3Rjb250ZXh0LmM6Ci0JICBjb250ZXh0OiBBZGQgdGVzdCBmb3IgdGhlIGNvbnRleHQgY2FjaGluZyBpbiBHc3RCaW4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2NjgKLQotMjAxMy0wOS0yNCAxMjo0Nzo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JICBSZXZlcnQgIlBvdGVudGlhbCBHc3RDb250ZXh0IHJlZ3Jlc3Npb24iCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGU2NTgzNzk1MzRlYjRhOTBiNjU0ZDkwZjFkMGJkZjg2ZjM3YzZlMzEuCi0JICBUaGlzIHRlc3QgY29tbWl0IHNob3VsZCd2ZSBuZXZlciBiZWVuIHB1c2hlZC4gT29wcy4KLQotMjAxMy0wOS0yNCAxMjo0Njo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IE1ha2Ugc3VyZSB0byBjYWNoZSBjb250ZXh0IHR5cGVzIHRoYXQgd2UgZGlkIG5vdCBzdG9yZSB5ZXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2NjgKLQotMjAxMy0wOS0yNCAxMDoyOTowNiArMDEwMCAgQWxleCBBc2hsZXkgPGJ1Z3ppbGxhQGFzaGxleS1mYW1pbHkubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JICBQb3RlbnRpYWwgR3N0Q29udGV4dCByZWdyZXNzaW9uCi0JICBTaW5jZSB0aGUgcmVmYWN0b3Jpbmcgb2YgR3N0Q29udGV4dCAoY29tbWl0cwotCSAgcWM5ZmEyNzcxYjUwOGU5YWFlZWNjNzAwZTY2ZTk1ODE5MDQ3NmYsCi0JICBhN2Y1ZGM4YjhhZjgzN2YwMTc4MmQxNTcyMzc5OTQ4ZmY2MmRhYWI3LAotCSAgNjkwMzI2ZjkwNmRjODJlNDFlYTU4YjgxY2RiMmUzZTg4Yjc1NCwKLQkgIGQzNjdkYzFiMGQ0ZWNiMzdmNGQyNzI2N2UwM2Q3YmYwYzZjMDZhNiwgYW5kCi0JICA4MmQxNThhZWQzZjJlODU0NWUxZTdkMzUwODUwODVmZjU4ZjE4KSBJIGFtIG5vIGxvbmdlciBhYmxlIHRvIGdldAotCSAgYSBzaGFyZWQgY29udGV4dCBmb3IgYW4gZWxlbWVudCB0aGF0IGlzIHVzZWQgdHdpY2UgaW4gYSBwaXBlbGluZS4KLQkgIEkgdXNlZCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZWdsZ2xlc3NpbmsgYXMgbXkgcmVmZXJlbmNlIGZvcgotCSAgaW1wbGVtZW50aW5nIHRoZSBHc3RDb250ZXh0IGxvZ2ljLgotCSAgQXMgdGhlIGNvZGUgd2FzIHRpZWQgdG8gYSBoYXJkd2FyZSBkZWNvZGVyLCBJIGhhdmUgcG9ydGVkIHRoZQotCSAgR3N0Q29udGV4dCBjb2RlIHRvIGZha2VzaW5rIHRvIHNob3cgdGhlIHByb2JsZW0uIFVzaW5nIHRoZSBvbGQKLQkgIEFQSSBhIHNpbmdsZSBFeGFtcGxlTWdyIGluc3RhbmNlIGlzIGNyZWF0ZWQsIGJ1dCB1c2luZyB0aGUgbmV3Ci0JICBBUEkgZWFjaCBlbGVtZW50IGlzIGNyZWF0aW5nIGl0cyBvd24gaW5zdGFuY2UuCi0KLTIwMTMtMDktMjQgMTA6NDI6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IE1ha2Ugc3VyZSB0aGF0IHRoZSBvYmplY3QgbG9jayBpcyBhbHdheXMgdGFrZW4gd2hlbiBhY2Nlc3NpbmcgdGhlIHByaXZhdGUgcGFkIGxpc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MzYKLQotMjAxMy0wOS0xNyAyMzoyMzozNCArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBlcGl0ZWNoLmV1PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogVXNlIHByaXZhdGUgcGFkIGxpc3QgaW4gc2V0X2ZsdXNoaW5nX3VubG9ja2VkCi0JICBwYWRzLT5kYXRhIGlzIHRoZSBwdWJsaWMgbGlzdC4gSXQgaXMgZHluYW1pY2FsbHkgcmVidWlsdCBhdCBlYWNoIGNhbGwgdG8KLQkgIGNoZWNrX2NvbGxlY3RlZCwgaW4gY2hlY2tfcGFkcyB0byBiZSBzcGVjaWZpYy4gV2hlbiB5b3UgYWRkIGEgcGFkIGFuZAotCSAgY29sbGVjdHBhZHMgaGF2ZSBiZWVuIHN0YXJ0ZWQsIGl0IGlzIG5vdCBhZGRlZCB0byB0aGUgcHVibGljIGxpc3QuCi0JICBUaHVzIHRoZXJlIGV4aXN0cyBhIHBvc3NpYmxlIHJhY2Ugd2hlcmUgOgotCSAgMSkgWW91IHdvdWxkIGFkZCBhIHBhZCB0byBjb2xsZWN0cGFkcyB3aGlsZSBydW5uaW5nLgotCSAgMikgWW91IHNldCBjb2xsZWN0cGFkcyB0byBmbHVzaGluZyBiZWZvcmUgY2hlY2tfY29sbGVjdGVkIGhhcyBiZWVuIGNhbGxlZCBhZ2FpbgotCSAgLT4gdGhlIHBhZCBpcyBub3Qgc2V0IHRvIGZsdXNoaW5nCi0JICAzKSB0aGUgcGFkIHN0YXJ0cyBwdXNoaW5nIGRhdGEgYXMgZG93bnN0cmVhbSBtaWdodCBub3QgYmUgcHJlcGFyZWQsIGluIHRoZSBjYXNlCi0JICBvZiBhZGRlciBpdCB0aGVuIHJldHVybnMgRkxPV19GTFVTSElORy4KLQkgIDQpIGVsZW1lbnRzIGxpa2UgZGVtdXhlcnMsIHdoZW4gdGhleSBnZXQgYSBGTE9XX0ZMVVNISU5HLCBzdG9wIHRoZWlyIHRhc2tzLAotCSAgbmV2ZXIgdG8gYmUgc2VlbiBhZ2Fpbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg2MzYKLQotMjAxMy0wOS0yMyAxMTo0NzoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdHRlc3RjbG9jay5jOgotCSAgdGVzdHM6IGhhbmRsZSB1bnNjaGVkdWxlZCBlbnRyaWVzIGNvcnJlY3RseQotCSAgTWFrZSB0aGUgdGVzdGNsb2NrIHJldHVybiBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQgd2hlbiBhbiB1bnNjaGVkdWxlZCBlbnRyeSBpcwotCSAgdXNlZCBmb3IgZ3N0X2Nsb2NrX3dhaXQoKSBvciBnc3RfY2xvY2tfd2FpdF9hc3luYygpLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwODYwNQotCi0yMDEzLTA5LTIyIDExOjA5OjM2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogQWxsb3cgc3BlY2lmeWluZyB0aGUgY2hlY2tvdXQgZGlyZWN0b3J5IGJ5IGVudiB2YXJpYWJsZQotCSAgRm9yIHNvbWUgcmFyZSBjYXNlcywgb25lIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHVzZSB0aGUgaGFyZGNvZGVkICRIT01FL2dzdAotCSAgbG9jYXRpb24geWV0IHdvdWxkIHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBnc3QtdW5pbnN0YWxsZWQgc2NyaXB0IGFzLWlzICh3aGljaAotCSAgaGFzIHRoZSBiZW5lZml0IG9mIGJlaW5nIGNvbnN0YW50bHkgdXBkYXRlZCkuCi0JICBGb3IgdGhlc2UgY2FzZXMsIHRoZSBjaGVja291dCBkaXJlY3RvcnkgY2FuIGJlIHNwZWNpZmllZCB3aXRoIHRoZQotCSAgR1NUX1VOSU5TVEFMTEVEX1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0JICBFeDoKLQkgIGV4cG9ydCBHU1RfVU5JTlNUQUxMRURfUk9PVD0kSE9NRS9zb21ld2hlcmUvd2l0aC9jaGVja291dHMKLQkgIEFuZCB0aGVuIGp1c3QgY2FsbCBnc3QtdW5pbnN0YWxsZWQgZGlyZWN0bHk6Ci0JICAkR1NUX1VOSU5TVEFMTEVEX1JPT1QvZ3N0cmVhbWVyL2dzdC11bmluc3RhbGxlZAotCi0yMDEzLTA5LTIwIDE2OjE2OjI2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGI2MTM2NjEgdG8gNmIwM2JhNwotCi0yMDEzLTA5LTE5IDE4OjQyOjMxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNzRhNjg1NyB0byBiNjEzNjYxCi0KLTIwMTMtMDktMTkgMTc6MzQ6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMTJhZjEwNSB0byA3NGE2ODU3Ci0KLTIwMTMtMDktMTkgMTc6MTI6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5jOgotCSAgY2hlY2s6IHRlc3RjbG9jazogZml4IGZ1bmN0aW9uIGd1YXJkcwotCSAgU2hvdWxkIGJlIGdfcmV0dXJuXyooKSBub3QgZ19hc3NlcnQoKSwgZXZlbiBpZiBpdCdzIGZvciB0ZXN0cyBvbmx5LgotCi0yMDEzLTA5LTE5IDE2OjQzOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suYzoKLQkgIGNoZWNrOiB0ZXN0Y2xvY2s6IGRvbid0IHB1dCBjb2RlIHdpdGggc2lkZS1lZmZlY3RzIGluIGdfYXNzZXJ0KCkKLQkgIEZpeGVzIHVuaXQgdGVzdCBmYWlsdXJlcyB3aGVuIC1ER19ESVNBQkxFX0FTU0VSVCBpcyB1c2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjU1MQotCi0yMDEzLTA5LTE5IDEyOjA3OjU2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkgIGdzdGNvbnRleHQ6IEZpeCByZXR1cm4gdmFsdWVzIHNvbWUgbW9yZQotCSAgUmV0dXJuIHZhbHVlIGlzIGEgYm9vbGVhbiBub3QgYSBwb2ludGVyCi0KLTIwMTMtMDktMTkgMTE6NDk6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkgIGNvbnRleHQ6IEZpeCByZXR1cm4gdmFsdWVzIGZvciBnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlKCkgaW4gYXNzZXJ0aW9ucwotCi0yMDEzLTA5LTE5IDExOjM0OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMS4xLjkwID09PQotCi0yMDEzLTA5LTE5IDEwOjQ4OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuMS45MAotCi0yMDEzLTA5LTE5IDEwOjA1OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxMy0wOS0xOSAwOTo0OTo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkqIGdzdC9nc3Rjb250ZXh0Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNvbnRleHQ6IEFkZCBjb252ZW5pZW5jZSBmdW5jdGlvbiBnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlKCkKLQotMjAxMy0wOS0xOSAwOTo0MjoxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEzLTA5LTE4IDIzOjA3OjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBJbXBsZW1lbnQgZ2V0dGluZyB0aGUgbmFtZSBvZiB0aGUgY29udGV4dCBtZXNzYWdlIHR5cGVzCi0KLTIwMTMtMDktMTcgMjE6MzY6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3Rjb250ZXh0LmM6Ci0JICBjb250ZXh0OiBGaXggdW5pdCB0ZXN0IGZvciBHc3RDb250ZXh0IGNoYW5nZXMKLQotMjAxMy0wOS0xNyAxNDozNDo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBVcGRhdGUgZm9yIEdzdENvbnRleHQgY2hhbmdlcwotCi0yMDEzLTA5LTE3IDE0OjI5OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNvbnRleHQ6IFVwZGF0ZSBkb2NzCi0KLTIwMTMtMDktMTcgMTQ6MjU6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBJbXBsZW1lbnQgY29udGV4dCBjYWNoaW5nIGFuZCBwcm9wYWdhdGlvbiBhZ2FpbgotCi0yMDEzLTA5LTE3IDEzOjUwOjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBtZXNzYWdlL3F1ZXJ5OiBTaW1wbGlmeSBDT05URVhUIG1lc3NhZ2VzL3F1ZXJpZXMgdG8gb25seSBjb250YWluIGEgc2luZ2xlIHR5cGUKLQotMjAxMy0wOS0xNyAxMzozMzozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWNvbnRleHQudHh0OgotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkgIGNvbnRleHQ6IFVwZGF0ZSBkb2N1bWVudGF0aW9uCi0KLTIwMTMtMDktMTcgMTM6Mjg6NDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkqIGdzdC9nc3Rjb250ZXh0Lmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSAgY29udGV4dDogQ2hhbmdlIEdzdENvbnRleHQgdG8gY29udGFpbiBvbmx5IGEgc2luZ2xlIGNvbnRleHQKLQkgIEl0IHdhcyB1bmludHVpdGl2ZSB0aGF0IEdzdENvbnRleHQgd2FzIGFjdHVhbGx5IGEgbGlzdCBvZiBkaWZmZXJlbnQKLQkgIGNvbnRleHRzLiBHc3RDb250ZXh0IG5vdyBpcyBvbmx5IGEgdHlwZSBzdHJpbmcgYW5kIGEgc3RydWN0dXJlIHRvCi0JICBjb250YWluIHRoZSBhY3R1YWwgY29udGV4dC4KLQotMjAxMy0wOS0xNyAxMzoxMjoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGVsZW1lbnQ6IFJlbW92ZSBHc3RDb250ZXh0IGNhY2hpbmcKLQotMjAxMy0wOS0xNyAxMzoxMDo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0Y29udGV4dC5jOgotCSogZ3N0L2dzdGNvbnRleHQuaDoKLQkgIGNvbnRleHQ6IEFkZCBwZXJzaXN0ZW50IHF1YWxpZmllciBmb3IgYSBjb250ZXh0Ci0JICBOb24tcGVyc2lzdGVudCBjb250ZXh0cyBhcmUgcmVtb3ZlZCB3aGVuIGVsZW1lbnRzIGdvIGJhY2sKLQkgIHRvIE5VTEwgc3RhdGUsIHBlcnNpc3RlbnQgY29udGV4dHMgYXJlIG5vdC4gQXBwbGljYXRpb25zCi0JICBtb3N0IGxpa2VseSB3YW50IHRvIHNldCBwZXJzaXN0ZW50IGNvbnRleHRzLgotCi0yMDEzLTA5LTE3IDEzOjEwOjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nc3RxdWVyeS5oOgotCSAgcXVlcnk6IE1ha2UgQ09OVEVYVCBxdWVyeSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbQotCi0yMDEzLTA5LTE3IDEzOjA5OjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSAgZXZlbnQ6IFJlbW92ZSBDT05URVhUIGRvd25zdHJlYW0gZXZlbnQKLQkgIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wbGVtZW50ZWQgd2l0aCBhbiB1cHN0cmVhbSBxdWVyeSBpbnN0ZWFkCi0JICBmb3IgY29uc2lzdGVuY3kgYW5kIHNpbXBsaWNpdHkuCi0KLTIwMTMtMDktMTMgMTQ6NDE6NDUgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hc2hnQGF4aXMuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IFN0b3AgYWxsIHVudXNlZCB0aHJlYWRzIGluIEdUaHJlYWRQb29sIGluIGdzdF9kZWluaXQoKQotCSAgU2luY2UgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIG1heCB1bnVzZWQgdGhyZWFkcyBpbiBHVGhyZWFkUG9vbCBoYXMgYmVlbgotCSAgY2hhbmdlZCBmcm9tIDAgdG8gMiBpdCBuZWVkcyB0byBiZSBzZXQgdG8gMCB0byBzdG9wIGFsbCB0aHJlYWRzIG9yCi0JICB2YWxncmluZCB3aWxsIHJlcG9ydCB0aGVtIGFzIG1lbW9yeSBsZWFrcy4KLQotMjAxMy0wOS0xMCAxNjozOTozMCArMDEwMCAgUmljbyBUenNjaGljaGhvbHogPHJpY290ekB0LW9ubGluZS5kZT4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkgIGNvbnRyb2xiaW5kaW5nczogZml4IHBzcGVjIHJlbGF4YXRpb24gZm9yIGNvbnRyb2wgc291cmNlIHByb3BlcnRpZXMKLQkgIFRoZSBjaGFuZ2Ugc2hvdWxkIGhhdmUgYmVlbiBmcm9tIFBBUkFNX0NPTlNUUlVDVF9PTkxZIHRvCi0JICBQQVJBTV9DT05TVFJVQ1QsIG90aGVyd2lzZSBiaW5kaW5ncyBhcmUgYWZmZWN0ZWQsIHNpbmNlCi0JICB0aGV5IGxvb2sgZm9yIHRoZSBDT05TVFJVQ1QgZmxhZy4KLQkgIFNlZSBlYzU1MzYzZAotCi0yMDEzLTA5LTEwIDEwOjE1OjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IE9ubHkgdXBkYXRlIGN1cnJlbnQgbGV2ZWwgaWYgd2UgYWxyZWFkeSBkb3dubG9hZGVkIGEgcmFuZ2UKLQkgIE90aGVyd2lzZSBxdWV1ZS0+bGV2ZWwgaXMgTlVMTCBhbmQgZGVyZWZlcmVuY2luZyB0aGF0IGlzIG5vdCBhIGdvb2QKLQkgIGlkZWEgaW4gZ2VuZXJhbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc2NDgKLQotMjAxMy0wOS0wOSAxNTo0MDoyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0bWV0YS5oOgotCSAgbWV0YTogRGVwcmVjYXRlIEdTVF9NRVRBX1RBR19NRU1PUlkKLQkgIFRoZSBHUXVhcmtzIGFyZSBub3QgZXhwb3J0ZWQgYnkgYW55IHB1YmxpYyBBUEkKLQotMjAxMy0wOC0yMiAwMDowMjoyOCArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBlcGl0ZWNoLmV1PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdG1ldGEuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWV0YTogQWRkIGEgI2RlZmluZSBmb3IgbWVtb3J5IG1ldGFkYXRhCi0KLTIwMTMtMDgtMjIgMDA6MDE6NDQgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAZXBpdGVjaC5ldT4KLQotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogaW1wbGVtZW50IGEgZGVmYXVsdCB0cmFuc2Zvcm1fbWV0YS4gSWYgYSBtZXRhZGF0YSBoYXMgbm8gZGVwZW5kZW5jeSBhcyBzaG93biBieSB0aGUgdGFncywgY29weSBpdC4KLQotMjAxMy0wOC0yMiAyMTozMjozNiArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBlcGl0ZWNoLmV1PgotCi0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkgIG1ldGE6IEFQSTogQWRkIGdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzKCkgdG8gZ2V0IGFsbCBtZXRhIHRhZ3MuCi0KLTIwMTMtMDktMDkgMTQ6MjE6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc2ZpbHRlci5jOgotCSAgdGVzdHMvY2Fwc2ZpbHRlcjogRml4IG1lbW9yeSBsZWFrIGFuZCBjb21wYXJlIGNhcHMgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJjbXAoKQotCi0yMDEzLTA5LTA2IDIzOjAzOjU0ICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJybkBheGlzLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc2ZpbHRlci5jOgotCSAgdGVzdHMvY2Fwc2ZpbHRlcjogVGVzdCBjYXBzLXJlbGF0ZWQgcXVlcmllcyBhbmQgcHJvcGVydHkKLQotMjAxMy0wOS0wNiAxNTowOTo0NiAtMDMwMCAgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgVXBkYXRlIHRoZSBidWZmZXJpbmcgc3RhdGUgYmVmb3JlIHN0YWxsaW5nIGZvciBtb3JlIGRhdGEKLQkgIEluIHNvbWUgY2FzZXMgdGhlIHdhaXQgZm9yIG1vcmUgZGF0YSB3YXMgaGFwcGVuaW5nIHdpdGhvdXQgdXBkYXRpbmcKLQkgIHRoZSBidWZmZXJpbmcgc3RhdGUsIG1lYW5pbmcgdGhlIEFQSSB1c2VyIHdvdWxkIG5vdCBiZSBhYmxlIHRvIG5vdGljZQotCSAgaXQgc2hvdWxkIHBhdXNlIHRoZSBwaXBlbGluZSBhbmQgdXBkYXRlIFVJIHRvIGluZGljYXRlIHRoYXQgaXMgdGhlCi0JICBjYXNlLCB0aGUgdmlkZW8gd291bGQgbGlrZWx5IHN0dXR0ZXIgaW5zdGVhZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc2NDgKLQotMjAxMy0wOS0wNCAxNToyODoxMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IHByZXNlcnZlIHNlcW51bSBvbiBzZWdtZW50cyBhZnRlciBzZWVrcwotCSAgVGhlIHNlcW51bSBvZiB0aGUgc2VnbWVudCBhZnRlciBhIHNlZWsgc2hvdWxkIGJlIHRoZSBzYW1lIG9mCi0JICB0aGUgc2VlayBldmVudC4gRG93bnN0cmVhbSBlbGVtZW50cyBtaWdodCByZWx5IG9uIHNlcW51bXMgdG8KLQkgIGlkZW50aWZ5IGV2ZW50cyByZWxhdGVkIHRvIGEgc2Vlay4KLQkgIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aGVuIGEgZGVtdXhlciBtYXBzIGEgVElNRSBzZWVrCi0JICBpbnRvIGEgQllURVMgc2VlayBmb3IgdXBzdHJlYW0gYW5kIGl0IG5lZWRzIHRvIGlkZW50aWZ5IHRoZQotCSAgY29ycmVzcG9uZGluZyBzZWdtZW50IGV2ZW50IGFuZCBtYXAgaXQgYmFjayBpbnRvIFRJTUUgdG8gcHVzaAotCSAgZG93bnN0cmVhbSwgcG9zc2libHkgdXNpbmcgdGhlIHZhbHVlcyBmcm9tIHRoZSBvcmlnaW5hbCBzZWVrCi0JICBldmVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc1MzAKLQotMjAxMy0wOS0wNSAxNDoxNDo0MiArMDIwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVybWVyYWxpQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IERvbid0IHVucmVmIE5VTEwgR3N0Q29sbGVjdERhdGEKLQkgIElmIGEgcGFkIGlzIHJlbW92ZWQgd2hpbGUgYSBjb2xsZWN0cGFkcyBlbGVtZW50IChzYXkgYWRkZXIpIGlzIGluIGEgY2hhaW4KLQkgIGZ1bmN0aW9uIHdhaXRpbmcgdG8gYmUgY29sbGVjdGVkLCB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgYW4gdW5yZWYgaGFwcGVucwotCSAgb24gYSBOVUxMIHBvaW50ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3NTM2Ci0KLTIwMTMtMDktMDQgMTc6MTE6MjAgKzAyMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPHVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgUmVtb3ZlIFB5WE1MIGZyb20gc3BlYyBmaWxlLCBpdCBpcyBub3QgbG9uZ2VyIG5lZWRlZAotCi0yMDEzLTA5LTA0IDE0OjQwOjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogQWRkIG1pc3NpbmcgYnJlYWsgYWZ0ZXIgaGFuZGxpbmcgdGhlIEdBUCBldmVudAotCSAgVGhhbmtzIHRvIEVkd2FyZCBIZXJ2ZXkgZm9yIG5vdGljaW5nLgotCi0yMDEzLTA5LTA0IDA5OjE4OjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBzY3JpcHRzL2dzdC1wbG90LXRpbWVsaW5lLnB5OgotCSogdG9vbHMvTWFrZWZpbGUuYW06Ci0JICB0b29sczogbW92ZSBnc3QtcGxvdC10aW1lbGluZS5weSBpbnRvIHNjcmlwdHMgZGlyZWN0b3J5Ci0JICBTbyBpdCdzIG5vdCBpbiBQQVRIIGluIGFuIHVuaW5zdGFsbGVkIHNldHVwICh0aHdhcnRpbmcKLQkgIGdzdC1wbGF5IGF1dG9jb21wbGV0aW9uKS4KLQotMjAxMy0wOS0wMyAyMzo1OTowNSArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBEb24ndCByZWR1Y2Ugc2luZ2xlIHF1ZXVlIHZpc2libGUgc2l6ZSBiZWxvdyBpdHMgY3VycmVudCBsZXZlbAotCSAgSWYgdGhlIG11bHRpcXVldWUgaGFzIGF1dG9tYXRpY2FsbHkgZ3Jvd24gY2hhbmNlcyBhcmUgZ29vZCB0aGF0Ci0JICB3ZSB3aWxsIGNhdXNlIHRoZSBwaXBlbGluZSB0byBzdGFydmUgaWYgdGhlIG1heGltdW0gbGV2ZWwgaXMgcmVkdWNlZAotCSAgYmVsb3cgdGhhdCBhdXRvbWF0aWNhbGx5IGdyb3duIHNpemUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTU2Ci0KLTIwMTMtMDktMDIgMTM6NTM6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0c2VsZWN0b3I6IERvbid0IGFkanVzdCBzZWdtZW50LT5zdGFydCB0byB0aGUgY3VycmVudCB0aW1lIHdoZW4gc3dpdGNoaW5nIHBhZHMKLQkgIFRoaXMgZG9lcyBub3QgbWFrZSBhbnkgc2Vuc2UgYXQgYWxsIGFuZCBicmVha3MgdGltZXN0YW1wLT5ydW5uaW5nX3RpbWUKLQkgIGNhbGN1bGF0aW9ucyBpbiB1bnByZWRpY3RhYmxlIHdheXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MTMwCi0KLTIwMTMtMDgtMjkgMjM6MTg6MzEgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAZXBpdGVjaC5ldT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBEZWxldGUgbGluayBkaXJlY3RseSBpbiBwZW5kaW5nX2V2ZW50cy4KLQkgIFdoZW4gcmVtb3ZpbmcgYSBzZWdtZW50IGV2ZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNzA4OAotCi0yMDEzLTA4LTI5IDExOjA3OjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZGVtb3RlIGxvZyBtZXNzYWdlLCBkb24ndCBzcGFtIElORk8gbGV2ZWwgd2hlbiBoYW5kbGluZyBidWZmZXIgbGlzdHMKLQotMjAxMy0wOC0yOCAxMzoyNjoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMS40ID09PQotCi0yMDEzLTA4LTI4IDEyOjM2OjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuMS40Ci0KLTIwMTMtMDgtMjggMTI6MzY6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEzLTA4LTI4IDEyOjMwOjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTMtMDgtMjcgMDk6MzE6MjIgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogcGxlYXNlIGdjYyAoYXZvaWQgYSB3YXJuX3VudXNlZF9yZXN1bHQgd2FybmluZykKLQotMjAxMy0wOC0yNyAwNzo1MTozNSArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogZmx1c2ggKGRpc2NhcmQgZGF0YSkgb24gRkxVU0hfU1RPUAotCSAgUmVzZXQgdGhlIHdyaXRlIHBvc2l0aW9uIHRvIDAgYW5kIHRydW5jYXRlIHRoZSBmaWxlIG9uIEZMVVNIX1NUT1AuCi0KLTIwMTMtMDgtMjcgMDc6MDU6MTEgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgotCSAgdGVzdHM6IGZpbGVzaW5rOiBzbWFsbCByZWZhY3RvcmluZwotCi0yMDEzLTA4LTI2IDEzOjE5OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICB0b29sczogZ3N0LWxhdW5jaDogZG9uJ3QgcHJpbnQgcHJvcGVydGllcyBiZWluZyByZXNldCB3aGVuIHNodXR0aW5nIGRvd24KLQkgIEl0J3MganVzdCBub2lzZS4KLQotMjAxMy0wOC0yMiAxOTowMTozMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogRG9uJ3QgcHVzaCBvdXQgaWRlbnRpY2FsIGNhcHMKLQkgIFRoaXMgYXZvaWRzIHRyaWdnZXJpbmcgcGxlbnR5IG9mIGV4dHJhIGNvZGUvbWV0aG9kcy9vdmVyaGVhZCBkb3duc3RyZWFtIHdoZW4KLQkgIHdlIGNhbiBqdXN0IHF1aWNrbHkgY2hlY2sgd2hlbmV2ZXIgd2Ugd2FudCB0byBzZXQgY2FwcyB3aGV0aGVyIHRoZXkgYXJlCi0JICBpZGVudGljYWwgb3Igbm90Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2NjAwCi0KLTIwMTMtMDgtMjEgMTI6MjE6NDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RzYW1wbGUuYzoKLQkgIGRvY3M6IGZsZXNoIG91dCBnc3Rfc2FtcGxlX2dldF9idWZmZXIoKSBhIGxpdHRsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjQ3OAotCi0yMDEzLTA4LTIwIDIzOjU5OjI5IC0wNzAwICBLZXJyaWNrIFN0YWxleSA8a2Vycmlja0BrZXJyaWNrc3RhbGV5LmNvbT4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlOiBtYWtlIGdyYW1tYXIueSB3b3JrIHdpdGggQmlzb24gMwotCSAgWVlMRVhfUEFSQU0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBCaXNvbiAzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjQ2MgotCi0yMDEzLTA4LTIwIDE3OjE1OjQxICswOTAwICBXb25jaHVsIExlZSA8Y2h1bDA4MTJAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0c2FtcGxlLmg6Ci0JICBzYW1wbGU6IEFkZCBnc3Rfc2FtcGxlX2NvcHkoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjQ1NAotCi0yMDEzLTA4LTE5IDE0OjU1OjIyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IEZpeCBnc3RfYnVmZmVyX21lbWNtcCgpIHdoZXJlIHRoZSBidWZmZXIgaXMgc21hbGxlciB0aGFuIHNpemUKLQkgIEFsc28gYWRkIHVuaXQgdGVzdHMgZm9yIGdzdF9idWZmZXJfbWVtY21wCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2MTYyCi0KLTIwMTMtMDgtMjAgMTc6MDY6NDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZG9jczogZmxlc2ggb3V0IGdzdF9lbGVtZW50X3F1ZXJ5X3tkdXJhdGlvbixwb3NpdGlvbn0gZG9jcyBhIGJpdAotCi0yMDEzLTA4LTE0IDE2OjE4OjU5ICswMTAwICBNYXR0aGlldSBCb3Vyb24gPG1hdHRoaWV1LmJvdXJvbkBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIHRhZ2xpc3Q6IGhhbmRsZSBwdWJsaXNoZXIgYW5kIGludGVycHJldGVkLWJ5IHRhZ3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5OTkKLQotMjAxMy0wOC0yMCAxMzo1ODoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JICBwbHVnaW5sb2FkZXI6IERvbid0IGNhbGwgbWVtY3B5KCkgd2l0aCBOVUxMIHNyYyBhbmQgMCBsZW5ndGgKLQotMjAxMy0wOC0yMCAxMDoxNjo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogUHJvcGVybHkgdW5sb2NrIHRoZSBzaW5rcGFkIHN0cmVhbWluZyB0aHJlYWQgd2hlbiBkZWFjdGl2YXRpbmcgdGhlIHBhZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTgzNQotCi0yMDEzLTA4LTIwIDEwOjE2OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IFByb3Blcmx5IHVubG9jayB0aGUgc2lua3BhZCBzdHJlYW1pbmcgdGhyZWFkIHdoZW4gZGVhY3RpdmF0aW5nIHRoZSBwYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDYzNjAKLQotMjAxMy0wOC0xOSAxNjozODo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IENsZWFuIHVwIGFmdGVyIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGhhcyBzdG9wcGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1ODM1Ci0KLTIwMTMtMDgtMTkgMTY6Mzg6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogQ2xlYW4gdXAgYWZ0ZXIgdGhlIHN0cmVhbWluZyB0aHJlYWQgaGFzIHN0b3BwZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU4MzUKLQotMjAxMy0wOC0xOSAxNjozODoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogQ2xlYW4gdXAgYWZ0ZXIgdGhlIHN0cmVhbWluZyB0aHJlYWQgaGFzIHN0b3BwZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU4MzUKLQotMjAxMy0wNy0wMSAxNDowNDo0NiAtMDYwMCAgQnJlbmRhbiBMb25nIDxiLmxvbmdAY2FibGVsYWJzLmNvbT4KLQotCSogZ3N0L2dzdHBhcnNlLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZTogQWRkIEdTVF9GTEFHX05PX1NJTkdMRV9FTEVNRU5UX0JJTlMKLQkgIFRoaXMgbWFrZXMgZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCkgcmV0dXJuIGFuIGVsZW1lbnQgaW5zdGVhZCBvZgotCSAgYSBiaW4gaWYgdGhlcmUncyBvbmx5IG9uZSBlbGVtZW50LiBBbHNvIGNoYW5nZWQgZ3N0cGFyc2UuYyB0byB1c2UgdGhpcywKLQkgIHNvIGdzdC1sYXVuY2ggd29uJ3QgY3JlYXRlIHN1cGVyZmx1b3VzIGJpbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzNDA1Ci0KLTIwMTMtMDgtMTYgMjA6MzY6NTMgKzAyMDAgIEFybmF1ZCBWcmFjIDxhdnJhY0BmcmVlYm94LmZyPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiByZXR1cm4gTlVMTCB3aGVuIHBhcnNpbmcgdXJpIHJlZGlyZWN0aW9uIHRoYXQgd2FzIG5vdCBzZXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDYxNjAKLQotMjAxMy0wOC0xOCAxMTo0ODo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IFVwZGF0ZSBzaW5jZSBtYXJrZXIgZm9yIGdzdF9idWZmZXJfZXh0cmFjdF9kdXAoKSB0byAxLjAuMTAKLQotMjAxMy0wOC0xNiAxNjo0NTo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZG9uJ3QgY3Jhc2ggb24gRU9TIGlmIHF1ZXVlIGlzIGVtcHR5Ci0JICBGaXhlcyBzcHVyaW91cyBjcmFzaCBpbiB0ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nCi0JICB1bml0IHRlc3QuCi0KLTIwMTMtMDgtMTYgMTY6Mjg6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGRvbid0IGNoYW5nZSBnbG9iYWwgYnVmZmVyaW5nIHN0YXRlIGZyb20gd2l0aGluIHF1ZXJ5IGhhbmRsZXIKLQkgIFdoZW4gYSBidWZmZXJpbmcgcXVlcnkgaXMgaGFuZGxlZCBpdCB1c2VzIHRoZSBnZXRfYnVmZmVyaW5nX3BlcmNlbnQoKQotCSAgZnVuY3Rpb24gdG8gZ2V0IHNvbWUgc3RhdGl0aWNzLiBVbmZvcnR1bmF0ZWx5IHRoaXMgZnVuY3Rpb24gYWxzbwotCSAgY2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBxdWV1ZSBzaG91bGQgYmUgYnVmZmVyaW5nIGFuZCBhZGFwdHMgdGhlCi0JICBnbG9iYWwgcXVldWUyIHN0YXRlIGluIGNhc2Ugb2Ygc3RhdGUgdHJhbnNpdGlvbnMgZnJvbS90byBidWZmZXJpbmcKLQkgIChpbmNsdWRpbmcgd2hldGhlciBhIGJ1ZmZlcmluZyBtZXNzYWdlIHdhcyBwb3N0ZWQgb24gdGhlIGJ1cyEpLgotCSAgVGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIGEgcmFjZSB3aGljaCBjYW4gY2F1c2UgYnVmZmVyaW5nIG1lc3NhZ2VzCi0JICB0byBuZXZlciBwb3N0ZWQgaWYgdGhlIGdsb2JhbCBzdGF0ZSBjaGFuZ2VzIGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhYQotCSAgcXVlcnkgaW5zdGVhZCBvZiByZXN1bHRpbmcgZnJvbSBieXRlcyBmbG93aW5nIGluL291dC4KLQkgIFNwb3R0ZWQgYnkgU2pvZXJkIFNpbW9ucy4KLQkgIENoYW5nZSB0byBvbmx5IHF1ZXJ5IHN0YXRlIGluIGdldF9idWZmZXJpbmdfcGVyY2VudCgpIGFuZCB1cGRhdGUKLQkgIHN0YXRlIG9ubHkgaW4gdXBkYXRlX2J1ZmZlcmluZygpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTMzMgotCi0yMDEzLTA4LTE2IDEyOjU0OjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiB1cGRhdGUgYnVmZmVyaW5nIHdoZW4gY2hhbmdpbmcgY2FwYWNpdHkKLQkgIFdoZW4gdGhlIGNhcGFjaXR5IG9mIHRoZSBxdWV1ZSBjaGFuZ2VzLCBtYWtlIHN1cmUgd2UgcG9zdCBhbiB1cGRhdGVkIGJ1ZmZlcmluZwotCSAgbWVzc2FnZSBiZWNhdXNlIHdlIG1pZ2h0IHN1ZGRlbmx5IGhhdmUgY29tcGxldGVkIHRoZSBidWZmZXJpbmcgc3RhZ2UuCi0KLTIwMTMtMDgtMTUgMTU6MzU6MDggKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hc2hnQGF4aXMuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBGcmVlIHRocmVhZCBwb29scyBpbiBnc3RfZGVpbml0KCkKLQotMjAxMy0wOC0xNiAxMTowMzozMCArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzaGdAYXhpcy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBjaGVjazogQ2FsbCBnc3RfZGVpbml0KCkgYXQgZXhpdCBvZiBhbGwgcHJvY2Vzc2VzCi0KLTIwMTMtMDgtMTQgMjE6NDE6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSAgY2xvY2s6IHNpbXBsaWZ5IGludGVybmFsIGdzdF9jbG9ja19yZXR1cm5fZ2V0X25hbWUoKSBoZWxwZXIKLQotMjAxMy0wOC0xNCAxNzo0NDo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBpbXByb3ZlIGZsdXNoLXN0YXJ0IGhhbmRsaW5nCi0JICBVc2UgY3VzdG9tIGNvZGUgdG8gaW1wbGVtZW50IGZsdXNoLXN0b3AsIHdlIGNhbid0IHJldXNlIHRoZSBzZXRfZmx1c2hpbmcgY29kZQotCSAgYmVjYXVzZSB3ZSBjYW4ndCB0b3VjaCB0aGUgbGl2ZV9wbGF5aW5nIGZsYWcgYW5kIHdlIG5lZWQgdG8gc2lnbmFsIHRoZQotCSAgc3RyZWFtaW5nIHRocmVhZC4KLQotMjAxMy0wOC0xNCAxNzoxNDoxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBzdG9wIGZsdXNoaW5nIGluIGZsdXNoLXN0b3AKLQotMjAxMy0wOC0xNCAxNjo1ODo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBoYW5kbGUgZmx1c2ggYmV0dGVyCi0JICBVbmxvY2sgdGhlIHN0cmVhbWluZyB0aHJlYWQgd2hlbiBmbHVzaGluZyBzbyB0aGF0IHdlIGNhbgotCSAgaW5zZXJ0IHRoZSBmbHVzaC1zdG9wIGNvcnJlY3RseS4KLQotMjAxMy0wOC0xNCAxNTo0Njo1NyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBpZ25vcmUgLmRpcnN0YW1wCi0KLTIwMTMtMDgtMTQgMDc6MjE6MDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGNoZWNrOiBEb24ndCB1c2Ugbm9kaXN0IGhlYWRlcnMgb24gZ2lyIHNjYW5uZXIKLQkgIEp1c3QgY3JlYXRlcyBub2lzZSBhbmQgYm9ndXMgc3ltYm9scwotCi0yMDEzLTA4LTA3IDE4OjIwOjAzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBnc3Q6IG1pbm9yIGRvY3N0cmluZyBmaXh1cHMgdG8gbWFrZSBnLWkgaGFwcHkKLQkgIG5vdGU6IHRoZSAjaWZuZGVmIG1vdmUgaXMgYWN0dWFsbHkgYSBtb3ZlIG9mIHRoZSAiU0VDVElPTiIgZG9jc3RyaW5nCi0KLTIwMTMtMDgtMTMgMTc6MTQ6NTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiAuZ2l0aWdub3JlOgotCSAgLmdpdGlnbm9yZTogSWdub3JlIGZpbGVzIGZyb20gYXV0b21ha2UgdGVzdC1kcml2ZXIKLQotMjAxMy0wOC0wNyAxODoyNDo0MCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEFkZCBhIHByb3BlcnR5IHRvIGRpc2FibGUgcGFzc3Rocm91Z2gKLQkgIEluIHNvbWUgc3BlY2lmaWMgY2FzZXMgKGxpa2UgdHJhbnNtdXhpbmcpIHdlIHdhbnQgdG8gZm9yY2UgdGhlIGVsZW1lbnQKLQkgIHRvIGFjdHVhbGx5IHBhcnNlIGFsbCBpbmNvbWluZyBkYXRhIGV2ZW4gaWYgdGhlIGVsZW1lbnQgZGVlbXMgaXQgaXMgbm90Ci0JICBuZWNlc3NhcnkuCi0JICBUaGlzIHByb3BlcnR5IHNpbXBseSBpZ25vcmVzIHJlcXVlc3RzIGZyb20gdGhlIGVsZW1lbnQgdG8gZW5hYmxlIHBhc3N0aHJvdWdoCi0JICBtb2RlIHdoaWNoIHJlc3VsdHMgaW4gcHJvY2Vzc2luZyBhbHdheXMgYmVpbmcgZW5hYmxlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU2MjEKLQotMjAxMy0wOC0wNyAyMToyNjowMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBkYXRhcXVldWU6IGFkZCBnc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlCi0JICBBZGRzIGEgdmFyaWFudCBvZiB0aGUgX3B1c2ggZnVuY3Rpb24gdGhhdCBkb2Vzbid0IGNoZWNrIHRoZSBxdWV1ZSBsaW1pdHMKLQkgIGJlZm9yZSBhZGRpbmcgdGhlIG5ldyBpdGVtLiBJdCBpcyB1c2VmdWwgd2hlbiBwdXNoaW5nIGFuIGVsZW1lbnQgdG8gdGhlCi0JICBxdWV1ZSBzaG91bGRuJ3QgbG9jayB0aGUgdGhyZWFkLgotCSAgT25lIHBhcnRpY3VsYXIgc2NlbmFyaW8gaXMgd2hlbiB0aGUgcXVldWUgaXMgdXNlZCB0byBzZXJpYWxpemUgYnVmZmVycwotCSAgYW5kIGV2ZW50cyB0aGF0IGFyZSBnb2luZyB0byBiZSBwdXNoZWQgZnJvbSBhbm90aGVyIHRocmVhZC4gVGhlCi0JICBkYXRhcXVldWUgc2hvdWxkIGhhdmUgYSBsaW1pdCBvbiB0aGUgYW1vdW50IG9mIGJ1ZmZlcnMgdG8gYmUgc3RvcmVkIHRvCi0JICBhdm9pZCBsYXJnZSBtZW1vcnkgY29uc3VtcHRpb24sIGJ1dCBldmVudHMgY2FuIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZQotCSAgbmVnbGlnaWJsZSBpbXBhY3Qgb24gbWVtb3J5IGNvbXBhcmVkIHRvIGJ1ZmZlcnMuIFNvIGl0IGlzIHVzZWZ1bCB0byBiZQotCSAgdXNlZCB0byBwdXNoIGl0ZW1zIGludG8gdGhlIHF1ZXVlIHRoYXQgY29udGFpbiBldmVudHMsIGV2ZW4gdGhvdWdoIHRoZQotCSAgcXVldWUgaXMgYWxyZWFkeSBmdWxsLCBpdCBzaG91bGRuJ3QgbWF0dGVyIGluc2VydGluZyBhbiBpdGVtIHRoYXQgaGFzCi0JICBubyBzaWduaWZpY2F0aXZlIHNpemUuCi0JICBUaGlzIHNjZW5hcmlvIGhhcHBlbnMgb24gYWRhcHRpdmUgZWxlbWVudHMgKGRhc2hkZW11eCAvIG1zc2RlbXV4KSBhcwotCSAgdGhlcmUgaXMgYSBzaW5nbGUgZG93bmxvYWQgdGhyZWFkIGZldGNoaW5nIGJ1ZmZlcnMgYW5kIHB1dHRpbmcgaW50byB0aGUKLQkgIGRhdGFxdWV1ZXMgZm9yIHRoZSBzdHJlYW1zLiBUaGlzIHNhbWUgZG93bmxvYWQgdGhyZWFkIGNhbiBhbHMgZ2VuZXJhdGUKLQkgIGV2ZW50cyBpbiBzb21lIHNpdHVhdGlvbnMgYXMgY2FwcyBjaGFuZ2VzLCBlb3Mgb3IgYSBpbnRlcm5hbCBjb250cm9sCi0JICBldmVudHMuIFRoZXJlIGNhbiBiZSBhIGRlYWRsb2NrIGF0IHByZXJvbGwgaWYgdGhlIGZpcnN0IGJ1ZmZlciBmZXRjaGVkCi0JICBpcyBsYXJnZSBlbm91Z2ggdG8gZmlsbCB0aGUgZGF0YXF1ZXVlIGFuZCB0aGUgZG93bmxvYWQgdGhyZWFkIGFuZCB0aGUKLQkgIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBkb3dubG9hZCB0aHJlYWQgZGVjaWRlcyB0byBwdXNoIGFuIGV2ZW50IHRvIHRoaXMKLQkgIHNhbWUgZGF0YXF1ZXVlIGJlZm9yZSBmZXRjaGluZyBidWZmZXJzIHRvIG90aGVyIHN0cmVhbXMsIGlmIHRoaXMgcHVzaAotCSAgbG9ja3MsIHRoZSBwaXBlbGluZSB3aWxsIGJlIHN0dWNrIGluIHByZXJvbGwgYXMgbm8gbW9yZSBidWZmZXJzIHdpbGwgYmUKLQkgIGRvd25sb2FkZWQuCi0JICBUaGVyZSBpcyBhIHNvbWV3aGF0IGNvbW1vbiBwcmFjdGljZSBpbiBkYXNoIHN0cmVhbXMgdG8gaGF2ZSBhIHNpbmdsZQotCSAgdmVyeSBsYXJnZSBidWZmZXIgZm9yIGF1ZGlvIGFuZCBvbmUgZm9yIHZpZGVvLCBzbyB0aGlzIHdpbGwgYWx3YXlzCi0JICBoYXBwZW4gYXMgdGhlIGRvd25sb2FkIHRocmVhZCB3aWxsIGhhdmUgdG8gcHVzaCBhbiBFT1MgcmlnaHQgYWZ0ZXIKLQkgIGZldGNoaW5nIHRoZSBmaXJzdCBidWZmZXIgZm9yIGFueSBzdHJlYW0uCi0JICBBUEk6IGdzdF9kYXRhX3F1ZXVlX3B1c2hfZm9yY2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU2OTQKLQotMjAxMy0wOC0xMyAxMzowNjo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0YWxsb2NhdG9yLmM6Ci0JICBzeXNtZW06IE9ubHkgY29weSB0aGUgcmVxdWVzdGVkIHBhcnQgb2YgbWVtb3J5IGluc3RlYWQgb2YgdGhlIGNvbXBsZXRlIHNvdXJjZSBtZW1vcnkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU2NzgKLQotMjAxMy0wOC0xMyAxMjoxMToxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHF1ZXJ5OiBhZGQgU2luY2UgbWFya2VycyBmb3IgbmV3IEFQSSBhbmQgYWRkIHRvIGV4cG9ydHMgZmlsZQotCi0yMDEzLTA3LTIzIDE2OjI1OjI3ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBmaXggYW5ub3RhdGlvbiBmb3IgZ3N0X3F1ZXJ5X3BhcnNlX3VyaQotCi0yMDEzLTA0LTE5IDEyOjE0OjU0ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIHF1ZXJ5OiBhZGQgbmV3IHJlZGlyZWN0aW9uIHVyaSB0aGUgVVJJIHF1ZXJ5Ci0KLTIwMTMtMDgtMTIgMDk6MjU6MzQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogYWRkIHNvbWUgbWlzc2luZyAndHJhbnNmZXIgbm9uZScgZ2kgYW5ub3RhdGlvbnMKLQkgIFRoZSBjdXJyZW50IGRvY3VtZW50YXRpb24gaXMgY29udHJvdmVyc2UsIHdoaWxlIGl0IHN0YXRlcyB0aGF0IHRoZQotCSAgcmV0dXJuZWQgdmFsdWUgaXMgdmFsaWQgb25seSB3aGlsZSB0aGUgcXVlcnkgaXMgaXMgdmFsaWQsIHdoaWNoIHByZXN1bWVzCi0JICBhICd0cmFuc2ZlciBub25lJyBwb2xpY3kuIEJ1dCB0aGUgdG9vbHRpcCBmb3IgdGhlICdvdXQnIGFubm90YXRpb24KLQkgIHN0YXRlcyB0aGUgZGVmYXVsdCBpcyAndHJhbnNmZXItZnVsbCcuCi0JICBBZGQgdGhlIG1pc3NpbmcgJ3RyYW5zZmVyIG5vbmUnIGFubm90YXRpb25zIHRvIGZpeCB0aGlzLgotCi0yMDEzLTA4LTA4IDEyOjA4OjMxICswMjAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgotCSAgYnl0ZXJlYWRlcjogQWNjZWxlcmF0ZSBNUEVHL0gyNjQgc3RhcnQgY29kZSBzY2FubmluZwotCSAgQWNjZWxlcmF0ZSBNUEVHL0gyNjQgc3RhcnQgY29kZSBzY2FubmluZyB1c2luZyBCb3llci1Nb29yIGJhZCBjaGFyYWN0ZXIKLQkgIGhldXJpc3RpYy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDIzNTcKLQotMjAxMy0wOC0xMCAxMTozMToyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBwaXBlbGluZTogZy1pOiBhbGxvdyBjbG9jayB0byBiZSBOVUxMIGluIGdzdF9waXBlbGluZV91c2VfY2xvY2soKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTc1MQotCi0yMDEzLTA4LTA3IDE0OjE3OjI4IC0wMzAwICBBZHJpYW4gUGFyZGluaSA8cHVibGljb0B0YW5nb3BhcmRvLmNvbS5hcj4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5jOgotCSAgY29udHJvbGxlcjogZml4ZXMgaW50IG92ZXJmbG93IHdpdGggcHJvcGVydGllcyB0aGF0IHNwYW4gKy1JTlRfTUFYCi0JICBXaGVuIHRoZSByYW5nZSBmb3IgYSBwcm9wZXJ0eSBpcyBkZWZpbmVkIGFzIC1JTlRfTUFYLTEgLi4gSU5UX01BWCwgbGlrZQotCSAgdGhlIHhwb3MgaW4gYSB2aWRlb21peGVyIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbiBpbiB0aGUgbWFjcm8KLQkgIGRlZmluaXRpb25zIG9mIGNvbnZlcnRfZ192YWx1ZV90b18jI3R5cGUgKGFuZCB0aGUgZXF1aXZhbGVudCBpbgotCSAgY29udmVydF92YWx1ZV90b18jI3R5cGUpCi0JICB2ID0gcHNwZWMtPm1pbmltdW0gKyAoZyMjdHlwZSkgUk9VTkRJTkdfT1AgKChwc3BlYy0+bWF4aW11bSAtIHBzcGVjLT5taW5pbXVtKSAqIHMpOwotCSAgYXJlIGNvbnZlcnRlZCB0bzoKLQkgIHYgPSAtMjE0NzQ4MzY0OCArIChnIyN0eXBlKSBST1VORElOR19PUCAoKDIxNDc0ODM2NDcgLSAtMjE0NzQ4MzY0OCkgKiBzKTsKLQkgICgyMTQ3NDgzNjQ3IC0gLTIxNDc0ODM2NDgpIG92ZXJmbG93cyB0byAtMSBhbmQgdGhlIG5ldCByZXN1bHQgaXM6Ci0JICB2ID0gLTIxNDc0ODM2NDggKyAoZyMjdHlwZSkgUk9VTkRJTkdfT1AgKC0xICogcyk7Ci0JICBzbyB2IG9ubHkgdGFrZXMgdGhlIHZhbHVlcyAtMjE0NzQ4MzY0OCBmb3IgcyA9PSAwIGFuZCAyMTQ3NDgzNjQ3Ci0JICBmb3IgcyA9PSAxLgotCSAgUmV3cml0aW5nIHRoZSBleHByZXNzaW9uIGFzIG1pbmltdW0qKDEtcykgKyBtYXhpbXVtKnMgZ2l2ZXMgdGhlIGNvcnJlY3QKLQkgIHJlc3VsdCBpbiB0aGlzIGNhc2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8vc2hvd19idWcuY2dpP2lkPTcwNTYzMAotCi0yMDEzLTA4LTAyIDEzOjMxOjU5ICswMjAwICBMdWJvc3ogU2FybmVja2kgPGx1Ym9zekBnbWFpbC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJ1aWxkOiBhZGQgc3ViZGlyLW9iamVjdHMgdG8gQU1fSU5JVF9BVVRPTUFLRQotCSAgRml4ZXMgd2FybmluZ3Mgd2l0aCBhdXRvbWFrZSAxLjE0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1MzUwCi0KLTIwMTMtMDgtMDIgMTY6MjE6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0cGlwZWxpbmUudHh0OgotCSAgZGVzaWduOiBmaXggdHlwbwotCi0yMDEzLTA3LTI5IDE1OjQ4OjMyICswMjAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogRml4IGJhY2t3YXJkcyBzZWVrcyBpbnRvIHVuZG93bG9hZGVkIHJhbmdlcwotCSAgV2hlbiBpbiBkb3dubG9hZCBidWZmZXJpbmcgbW9kZSBxdWV1ZTIgZGlkbid0IGNoZWNrIGlmIGEgcmFuZ2Ugb2Zmc2V0IGlzCi0JICBpbiBhIHVuZG93bmxvYWRlZCByYW5nZSBiZWZvcmUgdGhlIGN1cnJlbnRseSBpbi1wcm9ncmVzcyByYW5nZS4gQ2F1c2luZwotCSAgc2Vla3MgdG8gYW4gZWFybGllciBvZmZzZXQgdG8sIHdlbGwsIHRha2UgYSB3aGlsZS4KLQotMjAxMy0wNy0zMCAxOToyNzoyMyArMDIwMCAgS2phcnRhbiBNYXJhYXMgPGttYXJhYXNAZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5jOgotCSAgZG9jczogc29tZSBzbWFsbCBndGstZG9jIG1hcmt1cCBmaXhlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTE1NgotCi0yMDEzLTA3LTMwIDE5OjI3OjIzICswMjAwICBLamFydGFuIE1hcmFhcyA8a21hcmFhc0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogcmVnaXN0ZXIgbmV3IGNvbG9yIG1vZGUgZW51bSwgZml4aW5nICdtYWtlIGNoZWNrJwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTE1NgotCi0yMDEzLTA0LTE2IDE5OjA0OjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSAgdHlwZWZpbmRoZWxwZXI6IEF2b2lkIHVzaW5nIGJ1ZmZlcl9nZXRfc2l6ZSBpbiB0aWdodCBsb29wcwotCSAgQ2FsbGluZyBnc3RfYnVmZmVyX2dldF9zaXplIHJlcHJlc2VudGVkIDIvMyBvZiB0aGUgY29zdCBvZiBoZWxwZXJfZmluZF9wZWVrCi0JICB3aGljaCB3YXMgY2FsbGVkIHdoZW5ldmVyIGEgdHlwZWZpbmRmdW5jdGlvbiB3YW50ZWQgdG8gcGVlayBhdCBkYXRhLgotCSAgV2UgYWxyZWFkeSBrbm93IHRoZSBzaXplIChmcm9tIHRoZSBHc3RNYXBJbmZvKSwgc28ganVzdCB1c2UgdGhhdC4KLQotMjAxMy0wNy0yOSAxOTozODo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEzLTA3LTI5IDE5OjEzOjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb21tb246Ci0JICBjb21tb246IHJldmVydCBhY2NpZGVudGFsIHJlLXdpbmRpbmcgb2YgY29tbW9uIHN1Ym1vZHVsZQotCi0yMDEzLTA3LTI2IDE2OjE1OjI0ICswMjAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogQ2xhcmlmeSB0aGUgZXN0aW1hdGVkLXRvdGFsIGRvY3VtZW50YXRpb24KLQkgIFR3ZWFrIHRoZSBkb2N1bWVudGF0aW9uIHNsaWdodGx5IHRvIGNsYXJpZnkgdGhhdCB0aGUgZXN0aW1hdGVkLXRvdGFsIGluCi0JICBhIGEgQnVmZmVyaW5nIHF1ZXJ5IHRoZSB0b3RhbCByZW1haW5pbmcgdGltZSBvZiBhIGRvd25sb2FkLCBub3QgdGhlCi0JICB0b3RhbCB0aW1lIGZvciB0aGUgY29tcGxldGUgZG93bmxvYWQuIEFsc28gaW5kaWNhdGUgdGhlIHVuaXQgdXNlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQ5MzQKLQotMjAxMy0wNy0yNiAxNTowODoxMyArMDIwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IEZvcndhcmQgdGhlIHNjaGVkdWxlIHF1ZXJ5IHVwc3RyZWFtCi0JICBXaGVuIGFza2VkIGFib3V0IHRoZSBzY2hlZHVsaW5nIGZsYWdzIGZpcnN0IGNoZWNrIHdpdGggdXBzdHJlYW0gYW5kCi0JICBzaW1wbHkgYWRkIHRoZSBfU0VFS0FCTEUgZmxhZyB3aGVuIHVzaW5nIGEgdGVtcG9yYXJ5IGZpbGUgYXMgc3RvcmFnZS4KLQkgIFRoaXMgZW5hYmxlcyB0aGUgZm9yd2FyZGluZyBvZiBfU0VRVUVOVElBTCBhbmQgX0JBTkRXSURUSF9MSU1JVEVEIGZyb20KLQkgIHNvdXJjZXMgaWYgbmVlZGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDkyNwotCi0yMDEzLTA3LTI5IDE0OjQ3OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMS4xLjMgPT09Ci0KLTIwMTMtMDctMjkgMTM6MzQ6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS4xLjMKLQotMjAxMy0wNy0yOSAxMzozMDoyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEzLTA3LTI5IDEyOjEwOjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2U6IEZpeCBoYW5kbGluZyBvZiBTRUdNRU5UIHF1ZXJ5Ci0JICBUaGUgdmFsdWVzIHNob3VsZCBiZSBpbiBzdHJlYW0tdGltZSwgYW5kIHN0YXJ0L3N0b3Agc2hvdWxkIG5vdAotCSAgYmUgc3dhcHBlZCBmb3IgbmVnYXRpdmUgcmF0ZXMuCi0KLTIwMTMtMDctMjkgMTE6MDU6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBPbmx5IGFkdmFuY2Ugb2Zmc2V0IGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgYWN0dWFsbHkgcmVhZAotCSAgVGhlcmUgbWlnaHQgYmUgYSBzaG9ydCByZWFkIGF0IEVPUy4KLQotMjAxMy0wNy0yOSAxMDo0ODozMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBJbXBsZW1lbnQgU0VHTUVOVCBxdWVyeQotCi0yMDEzLTA3LTI2IDE4OjM2OjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGZpeCBTaW5jZTogbWFya2VyIGZvciBuZXcgZ3N0X2J1ZmZlcl9leHRyYWN0X2R1cCgpCi0KLTIwMTMtMDctMjYgMTI6MTk6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSAgY2xvY2s6IGRlYnVnIHRoZSBjbG9jayByZXR1cm4gdmFsdWVzCi0KLTIwMTMtMDctMjUgMTI6MjA6MTQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZml4IHNlcW51bSBoYW5kbGluZyBmb3Igc2Vla3MKLQkgIFVzZSB0aGUgc2FtZSBzZXFudW0gYXMgdGhlIHNlZWsgZm9yIGZsdXNoZXMvc2VnbWVudHMgdGhhdCBhcmUKLQkgIGNhdXNlZCBieSB0aGUgc2Vlay4gQWxzbyBkbyB0aGUgc2FtZSBmb3Igc2VnbWVudCBldmVudHMKLQkgIEZpeGVzICM2NzYyNDIKLQotMjAxMy0wNy0yNCAxMDoyOTozMCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBwYXJzZSBkZWJ1ZyBsZXZlbHMgPiA5Ci0KLTIwMTMtMDctMjQgMTY6NTc6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogRml4IGNvcHkmcGFzdGUgbWlzdGFrZXMgaW4gdGhlIGJpdG1hc2sgZnVuY3Rpb24gZG9jcwotCi0yMDEzLTA3LTI0IDExOjIxOjI3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBEb24ndCBzaGFkb3cgdmFyaWFibGVzIHRoYXQgYXJlIHNldCBpbnNpZGUgb3VyIHNjb3BlIGFuZCB0aGVuIHVzZWQgb3V0c2lkZSBvdXIgc2NvcGUKLQkgIEZpeGVzIHVuaW5pdGlhbGl6ZWQgdXNlIG9mIHRoZXNlIHZhcmlhYmxlcy4KLQotMjAxMy0wNy0yNCAxMDozMDoyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2FybS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9ocHBhLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4NncuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjMzIuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjNjQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3Rfc3BhcmMuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0Lmg6Ci0JICB0ZXN0czogUmVtb3ZlIG90aGVyIGludGVyZmFjZSBzdHJ1Y3RzIGZyb20gdGhlIEFCSSB0ZXN0cyB0b28KLQotMjAxMC0xMC0xNSAxMzoxNjo1OSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfYXJtLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2hwcGEuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2dy5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGM2NC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9zcGFyYy5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaDoKLQkgIHRlc3RzOiBSZW1vdmUgR3N0VGFnU2V0dGVyIGZyb20gQUJJIGNoZWNrcwotCSAgSW50ZXJmYWNlcyBjYW4gaGF2ZSBuZXcgbWVtYmVycyBhZGRlZCB3aXRob3V0IGJyZWFraW5nIEFCSSwgc28KLQkgIHJlbW92ZSBpdCBmcm9tIHRoZSBjaGVjay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjM3OTkKLQotMjAxMy0wNy0yMyAxNTozOTo1MyAtMDQwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wcmludC5jOgotCSAgbGliY2hlY2s6IEVzY2FwZSBzdHJpbmdzIGluIHRoZSBnZW5lcmF0ZWQgeG1sIGZpbGVzCi0JICBUaGlzIGlzIGNvcHkgcGFzdGVkIGZyb20gdXBzdHJlYW0gbGliY2hlY2sKLQotMjAxMy0wNy0yMyAxODo1Mzo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogUHJpbnQgc29tZSBkZWJ1ZyBvdXRwdXQgaWYgYSBzdHJlYW0tc3RhcnQgZXZlbnQgd2l0aG91dCBncm91cC1pZCBhcnJpdmVzCi0JICBJZGVhbGx5IGFsbCBlbGVtZW50cyB3b3VsZCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhhdCB0byBnZXQgcHJvcGVyCi0JICBzdHJlYW0tc3RhcnQgbWVzc2FnZSBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzLgotCi0yMDEzLTA3LTIyIDE4OjAzOjAxICswMjAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dC1zZWxlY3RvcjogRml4IG1pc3NpbmcgcGFkIGFjdGl2YXRpb24gbm90aWZpY2F0aW9uCi0JICBBIG5ldyBhY3RpdmUgcGFkIG1pZ2h0IG5vdCBiZSBub3RpZmllZCBpbiBzb21lIGNhc2VzLCB3aGljaCByZXN1bHRzCi0JICBpbiB0aGUgY3VycmVudCB0cmFjayBudW1iZXIgbm90IGJlaW5nIHNldCBpbiBwbGF5YmluLgotCSAgVGhlIGFjdGl2ZS1wYWQgbm90aWZpY2F0aW9uIGlzIG9ubHkgc2VudCBpbiB0aGUgY2hhaW4gYW5kIHNpbmtfZXZlbnQKLQkgIGZ1bmN0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgYnVmZmVyIG9yIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhY3RpdmUKLQkgIHBhZCBzZWxlY3Rpb24gaXMgZnJvbSB0aGUgbmV3bHkgYWN0aXZhdGVkIHBhZC4gU28gaW4gdGhlIG90aGVyIGNhc2UKLQkgIHRoZSBub3RpZmljYXRpb24gd2lsbCBuZXZlciBiZSBzZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDY5MQotCi0yMDEzLTA3LTIyIDE3OjI1OjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogaGFuZGxlIGRlc2VyaWFsaXNhdGlvbiBvZiBub25leGlzdGFudCBlbnVtIHZhbHVlIG1vcmUgZ3JhY2VmdWxseQotCi0yMDEzLTA3LTIyIDE0OjEyOjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmg6Ci0JICBpbnB1dHNlbGVjdG9yOiBEb24ndCBwdXNoIG5ldyBzdHJlYW0tc3RhcnQgZXZlbnRzIG9uIHN0cmVhbSBjaGFuZ2UgdW5sZXNzIHRoZXkgYWxsIGhhdmUgZ3JvdXAgaWRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0NDA4Ci0KLTIwMTMtMDctMjIgMTI6MDY6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBVc2UgbmV3IGdyb3VwLWlkIGluIHN0cmVhbS1zdGFydCBldmVudAotCi0yMDEzLTA3LTIyIDEyOjA2OjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2U6IFVzZSBuZXcgZ3JvdXAtaWQgZmllbGQgaW4gc3RyZWFtLXN0YXJ0IGV2ZW50IGFuZCBtZXNzYWdlCi0KLTIwMTMtMDctMjIgMTE6NDI6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBVc2UgdGhlIG5ldyBncm91cC1pZCBmaWVsZCBvZiB0aGUgc3RyZWFtLXN0YXJ0IG1lc3NhZ2UgZm9yIHN0cmVhbS1zdGFydCBtZXNzYWdlIGFnZ3JlZ2F0aW9uCi0JICBJZiBhbGwgc3RyZWFtLXN0YXJ0IG1lc3NhZ2VzIGhhZCBhIGdyb3VwIGlkIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLAotCSAgd2Ugb25seSBjb25zaWRlciBhIHN0cmVhbSBzdGFydGVkIGlmIGFsbCBoYWQgdGhlIHNhbWUgZ3JvdXAgaWQuCi0JICBJbiAyLjAgd2Ugc2hvdWxkIG1ha2UgdGhlIGdyb3VwIGlkIG1hbmRhdG9yeS4KLQotMjAxMy0wNy0yMiAxMTo0MTozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdDogQWRkIG5ldyBncm91cC1pZCBmaWVsZCB0byB0aGUgc3RyZWFtLXN0YXJ0IGV2ZW50Ci0JICBBbGwgc3RyZWFtcyB0aGF0IGhhdmUgdGhlIHNhbWUgZ3JvdXAgaWQgYXJlIHN1cHBvc2VkIHRvIGJlIHBsYXllZAotCSAgdG9nZXRoZXIsIGkuZS4gYWxsIHN0cmVhbXMgaW5zaWRlIGEgY29udGFpbmVyIGZpbGUgc2hvdWxkIGhhdmUgdGhlCi0JICBzYW1lIGdyb3VwIGlkIGJ1dCBkaWZmZXJlbnQgc3RyZWFtIGlkcy4gVGhlIGdyb3VwIGlkIHNob3VsZCBjaGFuZ2UKLQkgIGVhY2ggdGltZSB0aGUgc3RyZWFtIGlzIHN0YXJ0ZWQsIHJlc3VsdGluZyBpbiBkaWZmZXJlbnQgZ3JvdXAgaWRzCi0JICBlYWNoIHRpbWUgYSBmaWxlIGlzIHBsYXllZCBmb3IgZXhhbXBsZS4KLQotMjAxMy0wNy0xOCAyMzoyOTo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29tbW9uOgotCSAgY29tbW9uOiByZXZlcnQgYWNjaWRlbnRhbCBjaGFuZ2Ugb2YgY29tbW9uIHN1Ym1vZHVsZQotCi0yMDEzLTA3LTE4IDE0OjM5OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIGdzdDogQWRkIHNvbWUgbW9yZSBTaW5jZTogMS4yCi0KLTIwMTMtMDctMTggMTQ6MzQ6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IEFkZCBzb21lIFNpbmNlOiAxLjIKLQotMjAxMy0wNy0xOCAxNToxMDoxMCArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWw6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkqIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBpbmZvOiBBZGQgZGVidWcgY29sb3IgbW9kZSBvcHRpb24KLQkgIFRoaXMgYWxsb3dzIHRvIGV4cGxpY2l0ZWx5IHNldCB0aGUgZGVidWcgb3V0cHV0IGNvbG9yCi0JICBtb2RlIHRvIFVOSVggb24gZXZlcnkgcGxhdGZvcm0sIGVuYWJsZSBpdCAodXNlIHBsYXRmb3JtCi0JICBkZWZhdWx0IGNvbG9yIG1vZGUpIG9yIGVuYWJsZSBpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzQzMjAKLQotMjAxMi0wNC0xOCAxNDozNTozMiArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBGaXggYmxhY2sgYW5kIHVuZGVybGluZSBjb2xvcmluZyBvbiBXMzIKLQkgIEZpeGVzICM2NzQzMjAKLQotMjAxMi0wNC0xOCAxNDoxMjoxNiArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBDdXQgZG93biBzcmMgZmlsZSBuYW1lcyBmb3IgTWluR1cgdG9vCi0JICBGaXhlcyAjNjc0MzIwCi0KLTIwMTMtMDctMTYgMTc6NDc6NDUgKzAyMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogRml4IGdzdC1wbHVnaW5zLWdsIGluIHVuaW5zdGFsbGVkIHNldHVwCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzNDk5Ci0KLTIwMTMtMDctMTYgMTU6MzU6MDggLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiBUYWtlIGFjY291bnQgb2YgdGhlIHNraXAgaW4gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdCgpCi0JICBJbmNsdWRlIHJlZ3Jlc3Npb24gdGVzdAotCi0yMDEzLTA3LTE1IDE1OjQxOjQ0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBhZGFwdGVyOiBBZGQgZnVuY3Rpb24gdG8gcmV0dXJuIGJ1ZmZlciBjb21wb3NlZCBvZiBtdWx0aXBsZSBtZW1vcmllcwotCSAgQVBJOiBnc3RfYWRhcHRlcl90YWtlX2Zhc3QoKQotCi0yMDEzLTA3LTE2IDE2OjI0OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IERvbid0IGFzc2VydCBpZiBubyBjb250ZXh0IGlzIHNldCBpbiB0aGUgcXVlcnkKLQotMjAxMy0wNy0xNiAxNDo0NzowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvYmVuY2htYXJrcy8uZ2l0aWdub3JlOgotCSAgYmVuY2htYXJrczogaWdub3JlIG5ldyBiZW5jaG1hcmsgYmluYXJ5Ci0KLTIwMTMtMDctMTYgMTQ6NDY6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBxdWVyeTogc3ByaW5rbGUgc29tZSBTaW5jZSAxLjIgbWFya2VycyBpbiBkb2NzCi0KLTIwMTMtMDctMTYgMTQ6NDQ6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIHRpbWVwcm92aWRlcjogZy1pOiBhbGxvdyBOb25lIGFzIGFkZHJlc3MgZm9yIGdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcoKQotCi0yMDEzLTA3LTE2IDE1OjM0OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBSZXR1cm4gYW4gZW1wdHkgR3N0Q29udGV4dCBpZiBub25lIHdhcyBzZXQgeWV0Ci0KLTIwMTMtMDctMTYgMTU6MTY6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHF1ZXJ5OiBBZGQgZ3N0X3F1ZXJ5X2hhc19jb250ZXh0X3R5cGUoKQotCi0yMDEzLTA3LTE2IDExOjM2OjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogb25seSBibG9jayBzZXJpYWxpemVkIHF1ZXJ5IHdoZW4gaXQncyBzYWZlCi0JICBXZSBtdXN0IGJlIGNlcnRhaW4gdGhhdCB3ZSBkb24ndCBjYXVzZSBhIGRlYWRsb2NrIHdoZW4gYmxvY2tpbmcgdGhlIHNlcmlhbGl6ZWQKLQkgIHF1ZXJpZXMuIE9uZSBzdWNoIGRlYWRsb2NrIGNhbiBoYXBwZW4gd2hlbiB3ZSBhcmUgYnVmZmVyaW5nIGFuZCBkb3duc3RyZWFtIGlzCi0JICBibG9ja2VkIGluIHByZXJvbGwgYW5kIGEgc2VyaWFsaXplZCBxdWVyeSBhcnJpdmVzLiBEb3duc3RyZWFtIHdpbGwgbm90IHVuYmxvY2sKLQkgIChhbmQgYWxsb3cgb3VyIHF1ZXJ5IHRvIGV4ZWN1dGUpIHVudGlsIHdlIGNvbXBsZXRlIGJ1ZmZlcmluZyBhbmQgYnVmZmVyaW5nIHdpbGwKLQkgIG5vdCBjb21wbGV0ZSB1bnRpbCB3ZSBjYW4gYW5zd2VyIHRoZSBxdWVyeS4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyODQwCi0KLTIwMTMtMDctMTUgMTE6MzY6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBBIG5ld2x5IGFjdGl2YXRlZCBwYWQgc2hvdWxkIGJlIG1hcmtlZCBhcyBuZWVkaW5nIHJlY29uZmlndXJhdGlvbgotCi0yMDEzLTA3LTE1IDExOjMyOjU0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIFJldmVydCAicGFkOiBEb24ndCBjb25zaWRlciBmbHVzaGluZyBwYWRzIGFzIG5lZWRpbmcgcmVjb25maWd1cmF0aW9uIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5NDhhOWQyZjJiNzI4ZjVmYjYwYmU0NWQ0N2E4MThjZWJlYjYwYzdkLgotCSAgVGhpcyBpcyByYWN5IGFuZCB0cnlpbmcgdG8gcmVjb25maWd1cmUgYW5kIGZhaWwgaXMgc3RpbGwgYmV0dGVyCi0JICB0aGFuIG5vdCB0cnlpbmcgdG8gcmVjb25maWd1cmUgYXQgYWxsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDEwMAotCi0yMDEzLTA3LTE1IDExOjMyOjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogTGVhdmUgdGhlIGxvb3AgZnVuY3Rpb24gZmFzdGVyIGlmIHdlJ3JlIGZsdXNoaW5nCi0JICBFc3BlY2lhbGx5IGRvbid0IGV2ZW4gdHJ5IHRvIHNlbmQgc3RyZWFtLXN0YXJ0IGV2ZW50IG9yIHRyeQotCSAgdG8gbmVnb3RpYXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDEwMAotCi0yMDEzLTA3LTEyIDEwOjA4OjI2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogRGVhY3RpdmF0ZSBhbmQgcmVtb3ZlIHBhZCB3aXRob3V0IHRoZSBpbnB1dHNlbGVjdG9yIGxvY2sKLQkgIE90aGVyd2lzZSB3ZSBtaWdodCBnZXQgZGVhZGxvY2tzIGNhdXNlZCBieSBsb2NrIG9yZGVyIGludmVyc2lvbjoKLQkgIER1cmluZyB0aGUgY2hhaW4gZnVuY3Rpb24gdGhlIHN0cmVhbSBsb2NrIGlzIGZpcnN0IGxvY2tlZCBhbmQgdGhlbiB0aGUKLQkgIGlucHV0c2VsZWN0b3IgbG9jay4gRHVyaW5nIHBhZCByZWxlYXNlIHdlIGZpcnN0IGxvY2tlZCB0aGUgaW5wdXRzZWxlY3RvcgotCSAgbG9jayBhbmQgdGhlbiBkZWFjdGl2YXRpbmcgdGhlIHBhZCB3b3VsZCBsb2NrIHRoZSBzdHJlYW0gbG9jay4KLQkgIFRoZXJlJ3Mgbm8gcmVhc29uIHdoeSB0aGUgaW5wdXRzZWxlY3RvciBsb2NrIHNob3VsZCBiZSByZXF1aXJlZCB3aGlsZQotCSAgZGVhY3RpdmF0aW5nIGFuZCByZW1vdmluZyB0aGUgcGFkLCBpdCdzIG9ubHkgbmVlZGVkIGJlZm9yZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQwMDIKLQotMjAxMy0wNy0xMSAxNjo1NzowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMS4yID09PQotCi0yMDEzLTA3LTExIDE1OjEyOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuMS4yCi0KLTIwMTMtMDctMTEgMTU6MTE6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxMy0wNy0xMCAxNTo1MjoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IEFsd2F5cyBmb3J3YXJkIGNsb2NrLWxvc3QgbWVzc2FnZSBpZiB3ZSdyZSBub3QgYSB0b3AtbGV2ZWwgYmluCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBubyBiaW4gbWlzc2VzIHRoZSBjbG9jay1sb3N0IG1lc3NhZ2VzLCBpbmRlcGVuZGVudAotCSAgb2YgdGhlIHN0YXRlLCBhbmQgY291bGQgcmV0dXJuIGFuIG9sZCwgbm9uLXdvcmtpbmcgY2xvY2sgZnJvbQotCSAgZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMoKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDE5OTcKLQotMjAxMy0wNy0xMCAxNDozMDozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IEtlZXAgcHJldmlvdXMgYWN0aXZlIHNpbmtwYWQgYXJvdW5kIHVudGlsIHdlJ3JlIGRvbmUgd2l0aCBpdAotCSAgT3RoZXJ3aXNlIHdlJ2xsIHNlbmQgYSBuZXcgc2VnbWVudCBldmVudCBkb3duc3RyZWFtIGZvciBlYWNoIGJ1ZmZlci4KLQotMjAxMy0wNy0wOCAxNToyNjozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RhbGxvY2F0b3IuYzoKLQkgIGFsbG9jYXRvcjogZml4IHR5cGUgb2YgZ3N0X21lbW9yeV9hbGlnbm1lbnQgdG8gbWF0Y2ggZGVjbGFyYXRpb24KLQkgIEZpeGVzIGNvbXBpbGVyIHdhcm5pbmdzIHN1Y2ggYXMKLQkgIGdzdGFsbG9jYXRvci5jOjYxOjg6IGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ2dzdF9tZW1vcnlfYWxpZ25tZW50JwotCSAgLi4vZ3N0L2dzdGFsbG9jYXRvci5oOjUyOjE4OiBub3RlOiBwcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnZ3N0X21lbW9yeV9hbGlnbm1lbnQnIHdhcyBoZXJlCi0KLTIwMTMtMDctMDUgMjE6MzY6MjcgKzAyMDAgIFBpb3RyIERyxIVnIDxwaW90cmRyYWdAZ21haWwuY29tPgotCi0JKiBwby9QT1RGSUxFUy5pbjoKLQkgIHBvOiB1cGRhdGUgUE9URklMRVMuaW4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDM2ODIKLQotMjAxMy0wNy0wNCAyMDozOToyNiAtMDQwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IERvIG5vdCBsb2NrIGEgbXV0ZXggdGhhdCBkb2VzIG5vdCBleGlzdAotCSAgVGhlIEdTVF9MSVZFX0xPQ0sgaXMgb24gR3N0QmFzZVNyYywgbm90IG9uIGl0cyBzb3VyY2UgcGFkLgotCi0yMDEzLTA3LTAzIDIxOjIzOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiByZXNldCBQVFMgYWZ0ZXIgc2VlawotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjc3OAotCi0yMDEzLTA3LTAzIDEzOjAzOjQ5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGFsbG9jYXRvci5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oOgotCSAgQWRkIGZldyBtaXNzaW5nIGFsbG93LW5vbmUgYW5ub3RhdGlvbgotCi0yMDEzLTA3LTAzIDA5OjI3OjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogYWRkIG5ldyAtYmFkIG1wZWd0cyBsaWIKLQkgIEFuZCByZW1vdmUgc2lnbmFscHJvY2Vzc29yL3ZpZGVvIGxpYnMgZnJvbSAtYmFkIHdoaWNoIGhhdmUgZ29uZQotCSAgYXdheSBvciB3ZXJlIG1lcmdlZCBpbnRvIC1iYXNlLgotCi0yMDEzLTA3LTAxIDIwOjM1OjIxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSAgZnVubmVsOiBSZS1wdXNoIGFsbCBzdGlja3kgZXZlbnRzIHdoZW4gYnVmZmVycyBjb21lIGZyb20gYSBkaWZmZXJlbnQgcGFkCi0JICBEb24ndCBzcGVjaWFsIGNhc2Ugc2VnbWVudC9jYXBzLCBqdXN0IHB1c2ggYWxsIHN0aWNreSBldmVudHMgd2hlbiB0aGV5IGFyZQotCSAgcmVjZWl2ZWQgb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgcGFkIG9yIHdoZW4gdGhlIGFjdGl2ZSBwYWQgY2hhbmdlcy4KLQotMjAxMy0wNy0wMSAyMDoyMToxMCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkgIGZ1bm5lbDogVXNlIGRlZmF1bHQgcGFkIGZ1bmN0aW9uIGZvciB1cHN0cmVhbSBldmVudC9xdWVyaWVzCi0JICBUaGUgZGVmYXVsdCBmdW5jdGlvbnMgaW4gMS54IGFscmVhZHkgZG8gdGhlIHJpZ2h0IHRoaW5nCi0KLTIwMTMtMDctMDEgMjA6MTg6NTggLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSAgdGVzdHM6IFJlbW92ZSBmdW5uZWwgcGFkX2FsbG9jIHRlc3QKLQotMjAxMy0wNy0wMSAyMDowNzowMyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBDaGFuZ2Ugc3RyZWFtX2lkIHBhcmFtZXRlciBuYW1lIHRvIG1hdGNoIEd0a0RvYwotCi0yMDEzLTA3LTAxIDExOjEwOjAwICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXNoZ0BheGlzLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkgIGNoZWNrOiBBZGRlZCBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkKCkKLQkgIEFkZGVkIGEgbmV3IGZ1bmN0aW9uIGdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWQoKSwgc2luY2UKLQkgIGdzdF9jaGVja19zZXR1cF9ldmVudHMoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlwbGUgcGFkcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDMzNzcKLQotMjAxMy0wNi0zMCAxODozOTowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IERvbid0IGNvbnNpZGVyIGZsdXNoaW5nIHBhZHMgYXMgbmVlZGluZyByZWNvbmZpZ3VyYXRpb24KLQkgIFJlbmVnb3RpYXRpb24gYW5kIHJlY29uZmlndXJhdGlvbiB3aWxsIGZhaWwgYmVjYXVzZSBhbGwgcXVlcmllcwotCSAgYW5kIGV2ZW50cyB3b24ndCBiZSBhY2NlcHRlZCBieSB0aGUgcGFkIGlmIGl0J3MgZmx1c2hpbmcuIEluIHRoZQotCSAgYmVzdCBjYXNlIHRoaXMganVzdCBjYXVzZXMgdW5uZWVkZWQgd29yayBhbmQgc3B1cmlvdXMgd2FybmluZ3MgaW4KLQkgIHRoZSBkZWJ1ZyBsb2dzLCBpbiB0aGUgd29yc3QgY2FzZSBpdCBjYXVzZXMgZWxlbWVudHMgdG8gZmFpbCBjb21wbGV0ZWx5LgotCi0yMDEzLTA2LTI0IDIzOjI1OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBvbmx5IGJsb2NrIHNlcmlhbGl6ZWQgcXVlcnkgd2hlbiBpdCdzIHNhZmUKLQkgIFdlIG11c3QgYmUgY2VydGFpbiB0aGF0IHdlIGRvbid0IGNhdXNlIGEgZGVhZGxvY2sgd2hlbiBibG9ja2luZyB0aGUgc2VyaWFsaXplZAotCSAgcXVlcmllcy4gT25lIHN1Y2ggZGVhZGxvY2sgY2FuIGhhcHBlbiB3aGVuIHdlIGFyZSBidWZmZXJpbmcgYW5kIGRvd25zdHJlYW0gaXMKLQkgIGJsb2NrZWQgaW4gcHJlcm9sbCBhbmQgYSBzZXJpYWxpemVkIHF1ZXJ5IGFycml2ZXMuIERvd25zdHJlYW0gd2lsbCBub3QgdW5ibG9jawotCSAgKGFuZCBhbGxvdyBvdXIgcXVlcnkgdG8gZXhlY3V0ZSkgdW50aWwgd2UgY29tcGxldGUgYnVmZmVyaW5nIGFuZCBidWZmZXJpbmcgd2lsbAotCSAgbm90IGNvbXBsZXRlIHVudGlsIHdlIGNhbiBhbnN3ZXIgdGhlIHF1ZXJ5Li4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI4NDAKLQotMjAxMy0wNi0xOSAxMjozMDo0NyArMDIwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogQWRkIGEgZmlsdGVyIHRvIHRoZSBjYXBzX3F1ZXJ5IGRvbmUgYnkgYWNjZXB0Y2FwcwotCSAgVXNlIHRoZSBjYXBzIHRoYXQgdGhlIHBhZCBpcyBhc2tlZCB0byBhY2NlcHQgYXMgZmlsdGVyIGZvciB0aGUgcXVlcnkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI2MzIKLQotMjAxMy0wNi0xOSAxMjoxOTowMiArMDIwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogb3B0aW1pemUgZGVmYXVsdCBhY2NlcHRjYXBzIGltcGxlbWVudGF0aW9uCi0JICBQYXNzIHRoZSBmaXhlZCBjYXBzIHdlJ3JlIGFza2VkIHRvIGFjY2VwdCBhcyBhIGZpbHRlciBmb3IgdGhlIGNhcHMKLQkgIHF1ZXJ5LCBzbyB3ZSBkb24ndCBnZXQgYSBmdWxseS1leHBhbmRlZCBzZXQgb2YgY2FwcyBiYWNrICh3aGljaCB3ZSBkb24ndAotCSAgbmVlZCBhbmQgY2FuIHRha2UgYSBsb3Qgb2YgdGltZSBmb3IgaW50ZXJzZWN0aW9uKS4KLQkgIFRoaXMgcmVkdWNlcyB0aGUgdGltZSBmb3IgY2FtZXJhYmluIHRvIHByb2R1Y2UgYSBzZWNvbmQgZnJhbWUgb24gYQotCSAgbG9naXRlY2ggQzkxMCBjYW1lcmEgZnJvbSBhcm91bmQgNTIgc2Vjb25kcyB0byBhIGJpdCBsZXNzIHRoZW4gMTYKLQkgIHNlY29uZHMgb24gbXkgc3lzdGVtLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjYzMgotCi0yMDEzLTA2LTE5IDA5OjE5OjUzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ2xpc3Q6IEF2b2lkIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uIHdoZW4gbWVyZ2luZyB0YWdzCi0JICBXaGVuIGFwcGVuZGluZy9wcmVwZW5kaW5nIHRhZ3MsIGF2b2lkIHJlLWNyZWF0aW5nIChhbmQgY29weWluZykgbGlzdHMgaWYgd2UgYWxyZWFkeQotCSAgaGF2ZSBvbmUgYW5kIGluc3RlYWQganVzdCBhcHBlbmQvcHJlcGVuZCB0aGUgR1ZhbHVlIHRvIHRoZSBsaXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjU0NQotCi0yMDEzLTA2LTE5IDEwOjUzOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBEb24ndCBob2xkIHRoZSBxdWV1ZSBtdXRleCB3aGlsZSBkb2luZyBzZXJpYWxpemVkIHF1ZXJpZXMgZG93bnN0cmVhbQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjUyMAotCi0yMDEzLTA2LTE5IDEwOjQ1OjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogQWRkIHVuaXQgdGVzdCBmb3IgbWFwX3JhbmdlKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI2MTcKLQotMjAxMy0wNi0xOSAwODozNjoyMiArMDIwMCAgUGF1bCBIRU5SWVMgPHZpc2VjaGVsbGVAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IEZpeCB3cm9uZyBzaXplL2luZGV4IGhhbmRsaW5nIHdoZW4gbWVyZ2luZyBtZW1vcnkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI2MTcKLQotMjAxMy0wNi0xOCAxMTozOTo1NSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9saXN0LXVsaW5rLnhzbDoKLQkgIGRvY3M6IGFkZCBtaXNzaW5nIGZpbGUgZm9yIGRvYy1saW5rIGNoZWNrCi0KLTIwMTMtMDYtMTcgMTE6MTI6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvb2xzdHJlc3MuYzoKLQkgIHRlc3RzOiBhZGQgc3RyZXNzIHRlc3QgZm9yIGJ1ZmZlcnMgYW5kIHBvb2xzCi0KLTIwMTMtMDYtMTcgMTA6MjU6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBjYWxsIHN0YXRlIGNoYW5nZSBpbiBhbGwgY2FzZXMKLQkgIFdoZW4gd2UgYXN5bmNocm9ub3VzbHkgZ28gZnJvbSBSRUFEWSB0byBQTEFZSU5HLCBhbHNvIGNhbGwgdGhlCi0JICBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gc28gdGhhdCBzdWJjbGFzc2VzIGNhbiB1cGRhdGUgdGhlaXIgc3RhdGUgZm9yIFBMQVlJTkcuCi0JICBCZWNhdXNlIHRoZSBQUkVST0xMIGxvY2sgaXMgbm90IHJlY3Vyc2l2ZSwgd2UgY2FuJ3QgbWFrZSB0aGlzIHdpdGhvdXQKLQkgIHJhY2VzIGFuZCB3ZSBtdXN0IGFzc3VtZSBmb3Igbm93IHRoYXQgdGhlIHN1YmNsYXNzIGNhbiBoYW5kbGUgY29uY3VycmVudCBjYWxscwotCSAgdG8gUEFVU0VELT5QTEFZSU5HIGFuZCBQTEFZSU5HLT5QQVVTRUQuIFdlIGNhbiBtYWtlIHRoaXMgYXNzdW1wdGlvbiBiZWNhdXNlIG5vdAotCSAgbWFueSBlbGVtZW50cyBhY3R1YWxseSBkbyBzb21ldGhpbmcgaW4gdGhvc2Ugc3RhdGUgY2hhbmdlcyBhbmQgdGhlIG9uZXMgdGhhdAotCSAgZGlkIHdvdWxkIGJlIGJyb2tlbiBldmVuIG1vcmUgd2l0aG91dCB0aGlzIGNoYW5nZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDIyODIKLQotMjAxMy0wNi0xNiAxNTowNzozNSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9mYXEvZGVwZW5kZW5jaWVzLnhtbDoKLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKLQkqIGRvY3MvbWFudWFsL2ludHJvLW1vdGl2YXRpb24ueG1sOgotCSAgZG9jczogZml4IHNvbWUgZXh0ZXJuYWwgbGlua3MKLQotMjAxMy0wNi0xNiAxNDo0NTowOCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9tYW51YWxzLm1hazoKLQkgIGRvY3M6IGNoZWNrIGZvciBicm9rZW4gbGlua3MgaW4gZG9jcwotCSAgVGhlIGNoZWNrIGlzIGRvbmUgdXNpbmcgY3VybCAoaWYgYXZhaWxhYmxlKS4gSXQgbGlzdHMgdGhlIGN1cmwgZXhpdCBjb2RlICsgaHR0cAotCSAgc3RhdHVzIGNvZGUgKGZvciB0aG9zZSA+IDM5OSkgdG9nZXRoZXIgd2l0aCB0aGUgdXNlIG9mIHRoZSB1cmwgaW4gdGhlIGNvZGUuIFRoZQotCSAgY2hlY2sgaXMgbm90IGZhdGFsLgotCi0yMDEzLTA2LTE2IDEzOjA1OjIxICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSogZG9jcy9wd2cvaW50cm8tcHJlZmFjZS54bWw6Ci0JICBkb2NzOiBjaGFuZ2UgaHR0cHMgdG8gaHR0cCB1cmxzCi0JICBUaGFuayB5b3UgYnJvd3NlciBmb3IgbmVlZGxlc3NseSBjaGFuZ2luZyB0byBodHRwcyBmb3Igc3RhdGljIGRvYyBwYWdlcy4KLQotMjAxMy0wNi0xNiAxMTo0MTo1MiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9mYXEvZGV2ZWxvcGluZy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sOgotCSogZG9jcy9wd2cvaW50cm8tcHJlZmFjZS54bWw6Ci0JICBkb2NzOiB1cGRhdGUgbGlua3MgdG8gZGV2ZWxvcGVyLmdub21lLm9yZwotCSAgVGhlIFVSTCBsYXlvdXQgaGFzIGNoYW5nZWQuIEZpeCB0aGUgbGlua3MgYW5kIGNvbW1lbnQgb3V0IG9uZSBwYXJhZ3JhcGggd2hlcmUKLQkgIHRoZSBkb2MgaXMgZ29uZS4KLQkgIEZpeGVzICM3MDIxMzUKLQotMjAxMy0wNi0xNCAxMzowNTozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBzdHJ1Y3R1cmU6IEFkZCBnc3Rfc3RydWN0dXJlX25ld19mcm9tX3N0cmluZygpCi0JICBDb252ZW5pZW5jZSBBUEkgZm9yIGJpbmRpbmdzLCBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nKCkgcmV0dXJucwotCSAgYSB0dXBsZSAoc3RydWN0dXJlLCBlbmRfcHRyKSBpbiBiaW5kaW5ncyBhbmQgaXMgdW5pbnR1aXRpdmUgdG8gdXNlCi0JICBiZWNhdXNlIG9mIHRoYXQuCi0KLTIwMTMtMDYtMTMgMDg6MzY6MjMgKzAyMDAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogRG9uJ3QgaW50ZXJjZXB0IC0taGVscCBpbiBnc3RfaW5pdCgpCi0JICBCZWZvcmUgdGhpcyBwYXRjaCBnc3RfaW5pdCB3b3VsZCBpbnRlcmNlcHQgLS1oZWxwLCBjYXVzaW5nIGZvciBleGFtcGxlCi0JICBjaGVlc2UncyAtLWhlbHAgdG8gbG9vayBsaWtlIHRoaXM6Ci0JICBbaGFuc0BzaGFsZW0gY2hlZXNlXSQgY2hlZXNlIC0taGVscAotCSAgVXNhZ2U6Ci0JICBjaGVlc2UgW09QVElPTi4uLl0gLSBHU3RyZWFtZXIgaW5pdGlhbGl6YXRpb24KLQkgIEhlbHAgT3B0aW9uczoKLQkgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IGhlbHAgb3B0aW9ucwotCSAgLS1oZWxwLWFsbCAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgYWxsIGhlbHAgb3B0aW9ucwotCSAgLS1oZWxwLWdzdCAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgR1N0cmVhbWVyIE9wdGlvbnMKLQkgIGdzdF9pbml0IGlzIHRoZSBvbmx5IGdmb29faW5pdCBmdW5jdGlvbiB3aGljaCBkb2VzIHRoaXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyMDg5Ci0KLTIwMTMtMDYtMTIgMDk6NDU6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiBhZGQgdXJpZG93bmxvYWRlciBsaWIgaW4gLWJhZCB0byBzZWFyY2ggcGF0aHMKLQkgIEV2ZW4gaWYgaXQgbWlnaHQgbm90IGJlIGFyb3VuZCBmb3IgbG9uZy4KLQotMjAxMy0wNi0xMSAxMDoyNTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBSZW1vdmUgdW5yZWYgdGhhdCBzaG91bGQgbm90IGJlIHRoZXJlCi0JICBXZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0IGFyb3VuZCBhbGwgdGhlIHRpbWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxOTg1Ci0KLTIwMTMtMDYtMDkgMTc6MjA6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogSW1wcm92ZSBHc3RDb250ZXh0IGhhbmRsaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwOTY3Ci0KLTIwMTMtMDYtMDcgMTM6MDc6MzcgKzAyMDAgIEtpbSBMYW0gPGtpbUByZWRnaWFudHNvZnR3YXJlLmNvbT4KLQotCSogd2luMzIvdnMxMC9iYXNlL2Jhc2UudmN4cHJvajoKLQkgIHdpbjMyOiBEb24ndCBpbmNsdWRlIGdzdGNvbGxlY3RwYWRzLmMgdHdpY2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDE2MDMKLQotMjAxMy0wNS0zMSAwOTozOTo1NSAtMDYwMCAgQnJlbmRhbiBMb25nIDxiLmxvbmdAY2FibGVsYWJzLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dC1zZWxlY3Rvcjogc2VuZCBub3RpZnk6OmFjdGl2ZSBzaWduYWwgZm9yIGlucHV0LXNlbGVjdG9yIHBhZHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMzE5Ci0KLTIwMTMtMDYtMDYgMTY6NDY6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IE9ubHkgZm9yY2UtdXBkYXRlIHRoZSBkdXJhdGlvbiBmb3IgZHluYW1pYyBzb3VyY2VzIHdoZW4gZG9pbmcgdGhlIERVUkFUSU9OIHF1ZXJ5Ci0JICBEb2luZyBpdCBhZnRlciBldmVyeSBzaW5nbGUgY3JlYXRlKCkgaXMgbm90IHZlcnkgZWZmaWNpZW50IGFuZCBub3QgbmVjZXNzYXJ5LgotCSAgRXNwZWNpYWxseSBvbiBuZXR3b3JrIGZpbGUgc3lzdGVtcyBmc3RhdCgpIGlzIG5vdCBjYWNoZWQgYW5kIGNhdXNlcyBuZXR3b3JrCi0JICB0cmFmZmljLCBtYWtpbmcgdGhlIHNvdXJjZSBwb3NzaWJseSB1bnVzYWJsZSBzbG93LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MjAzNwotCi0yMDEzLTA2LTA1IDE4OjM2OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjEuMSA9PT0KLQotMjAxMy0wNi0wNSAxNzo1ODo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29tbW9uOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDEuMS4xCi0KLTIwMTMtMDYtMDUgMTY6MDY6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEzLTA2LTA1IDE1OjE0OjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAwOThjMGQ3IHRvIDAxYTdhNDYKLQotMjAxMy0wNi0wNSAxMTowMjo1MCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3R2YWx1ZTogQWRkIF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUoKSBwdWJsaWMgdmFyaWFudHMKLQkgIEFQSTogZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF9hbmRfdGFrZV92YWx1ZQotCSAgQVBJOiBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUKLQkgIFdlIHdlcmUgYWxyZWFkeSB1c2luZyB0aGlzIGludGVybmFsbHksIHRoaXMgbWFrZXMgaXQgcHVibGljIGZvciBjb2RlCi0JICB3aGljaCBmcmVxdWVudGx5IGFwcGVuZHMgdmFsdWVzIHdoaWNoIGFyZSBleHBlbnNpdmUgdG8gY29weSAobGlrZQotCSAgc3RydWN0dXJlcywgYXJyYXlzLCBjYXBzLCAuLi4pLgotCSAgQXZvaWRzIGNvcGllcyBvZiB0aGUgdmFsdWVzIGZvciB1c2Vycy4gVGhlIHBhc3NlZCBHVmFsdWUgd2lsbCBhbHNvCi0JICBiZSAwLW1lbXNldCdlZCBmb3IgcmUtdXNlLgotCSAgTmV3IHVzZXJzIGNhbiByZXBsYWNlIHRoaXMga2luZCBvZiBjb2RlOgotCSAgZ3N0X3ZhbHVlXypfYXBwZW5kX3ZhbHVlKG15Y29udGFpbmVyLCAmbXl2YWx1ZSk7Ci0JICBnX3ZhbHVlX3Vuc2V0KCZteXZhbHVlKTsKLQkgIGJ5OgotCSAgZ3N0X3ZhbHVlXypfYXBwZW5kX2FuZF90YWtlX3ZhbHVlKG15Y29udGFpbmVyLCAmbXl2YWx1ZSk7Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxNjMyCi0KLTIwMTMtMDUtMjkgMTc6MjA6MzQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBnc3RidWZmZXI6IFVzZSBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgYnVmZmVyX25ld193cmFwcGVkCi0JICBTaGF2ZXMgfjEwJSBpbnN0cnVjdGlvbiBjYWxscyBmcm9tIHRoZSB0b3RhbCBjb3N0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxNjMzCi0KLTIwMTMtMDUtMzAgMjI6NTc6NDkgLTA2MDAgIEJyZW5kYW4gTG9uZyA8c2VsZkBicmVuZGFubG9uZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXQtc2VsZWN0b3I6IHJldHVybiBGQUxTRSBmb3IgImFjdGl2ZSIgcHJvcGVydHkgaWYgc2VsZWN0b3IgaXMgTlVMTAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTMyMwotCi0yMDEzLTA2LTAxIDE0OjAwOjIyICswMTAwICBBbmRyemVqIEJpZW5pZWsgPGFuZHloZWxwQGdtYWlsLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtdGhyZWFkcy54bWw6Ci0JICBtYW51YWw6IHVwZGF0ZSBlbGVtZW50cyB0byBtYXRjaCB0aGUgcmVzdCBvZiAiQm9vc3QgcHJpb3JpdHkgb2YgYSB0aHJlYWQiIHNlY3Rpb24KLQotMjAxMy0wNi0wMSAxMzo1NTo1MCArMDEwMCAgQW5kcnplaiBCaWVuaWVrIDxhbmR5aGVscEBnbWFpbC5jb20+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSAgbWFudWFsOiBmaXggY29tbWVudCBpbiBlZmZlY3Rzd2l0Y2ggZXhhbXBsZQotCi0yMDEzLTA2LTAxIDEzOjQ5OjE4ICswMTAwICBBbmRyemVqIEJpZW5pZWsgPGFuZHloZWxwQGdtYWlsLmNvbT4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBtYW51YWw6IGZpeCBhIHR5cG8gaW4gIkluc2VydGluZyBkYXRhIHdpdGggYXBwc3JjIiBzZWN0aW9uCi0KLTIwMTMtMDYtMDEgMTM6MjI6MjIgKzAxMDAgIEFuZHJ6ZWogQmllbmllayA8YW5keWhlbHBAZ21haWwuY29tPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLXFvcy54bWw6Ci0JKiBkb2NzL3B3Zy9hcHBlbmRpeC1jaGVja2xpc3QueG1sOgotCSAgcHdnOiBmaXggYSBmZXcgdHlwb3MKLQotMjAxMy0wNS0zMSAyMzozNzowNyArMDEwMCAgQW5kcnplaiBCaWVuaWVrIDxhbmR5aGVscEBnbWFpbC5jb20+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWFsbG9jYXRpb24ueG1sOgotCSogZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMS4wLnR4dDoKLQkgIGRvY3M6IHJlbW92ZSBkb3VibGUgInRoZSIKLQotMjAxMy0wNS0yOCAyMzozNDo1NCArMDEwMCAgS3J6eXN6dG9mIEtvbm9wa28gPGtyenlzenRvZi5rb25vcGtvQGdtYWlsLmNvbT4KLQotCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgotCSAgc2NyaXB0czogaW1wcm92ZSBnaXQtdXBkYXRlLnNoIHN0YXR1cyBtZXNzYWdlCi0JICBCeSBkZWZhdWx0IHdoZW4gdGhlIHNjcmlwdCBpcyBhYm91dCB0byBleGl0IChub3JtYWxseSBvciBkdWUgdG8gYW4gZXJyb3IpLAotCSAgaXQgY2hlY2tzIHdoZXRoZXIgJEVSUk9SX0xPRyBmaWxlIGV4aXN0cy4gIElmIHRoZSBsb2cgZmlsZSBleGlzdHMsIHRoZQotCSAgc2NyaXB0IHByaW50cyBhICJGYWlsdXJlczogIiBtZXNzYWdlIHByZWZpeCBhbmQgZHVtcHMgdGhlIGxvZyBmaWxlIHRvIHRoZQotCSAgb3V0cHV0LgotCSAgQXBwYXJlbnRseSB0aGUgbG9nIGZpbGUgaXMgYWx3YXlzIGNyZWF0ZWQgYW5kIGlmIHRoZSB1cGRhdGUvYnVpbGQgaXMKLQkgIHN1Y2Nlc3NmdWwsIHRoZSBzY3JpcHQgZmluaXNoZXMgd2l0aCBhIGJpdCBtaXNsZWFkaW5nICJGYWlsdXJlczogIiBtZXNzYWdlLgotCSAgQW4gaW1wcm92ZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGlzIGNoYW5nZSBsZXRzIHRoZSBsb2cgZmlsZSB0byBiZSBjcmVhdGVkIGFzCi0JICBuZWVkZWQsIGkuZS4gaWYgdGhlcmUncyBhbiBlcnJvciBtZXNzYWdlIHRvIGJlIHByaW50ZWQuICBJZiB0aGUgZmlsZQotCSAgZG9lc24ndCBleGlzdHMsIHRoZSBzY3JpcHQgcHJpbnRzIGEgIlVwZGF0ZSBkb25lIiBtZXNzYWdlIHdoaWNoIGNsZWFybHkKLQkgIGluZGljYXRlcyBzdWNjZXNzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTE3NwotCi0yMDEzLTA1LTMwIDA3OjAzOjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JICBjaGVjazogZml4IHBvc2l0aW9uIHVuaXQgdGVzdAotCi0yMDEzLTA1LTMwIDA2OjUxOjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogaW1wcm92ZSBwb3NpdGlvbiByZXBvcnRpbmcgd2l0aG91dCBjbG9jawotCSAgV2hlbiBubyBiYXNlIHRpbWUgb3Igd2hlbiBzeW5jIGlzIGRpc2FibGVkLCB1c2UgdGhlIHNhbWUgbG9naWMgYXMKLQkgIGluIHBhdXNlZCB0byByZXBvcnQgcG9zaXRpb24uIFRoZSBsb2dpYyBpbiBQTEFZSU5HIGFzc3VtZXMgd2UgdXNlIHRoZQotCSAgY2xvY2suCi0KLTIwMTMtMDUtMjkgMTE6MzY6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEZpeCBtZW1vcnkgbGVhayBpbiB0aGUgdW5pdCB0ZXN0Ci0KLTIwMTMtMDUtMjggMTI6NDQ6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgIGVsZW1lbnRmYWN0b3J5OiBBZGQgc3VwcG9ydCBmb3IgY2hlY2tpbmcgc3VidGl0bGUvbWV0YWRhdGEgZmFjdG9yeSB0eXBlcwotCi0yMDEzLTA1LTI4IDEyOjQxOjI3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBlbGVtZW50ZmFjdG9yeTogQWRkIHN1cHBvcnQgZm9yIGNoZWNraW5nIG9ubHkgdGhlIG1lZGlhIHR5cGUgb2YgYSBmYWN0b3J5Ci0JICBBbmQgd2hpbGUgYXQgaXQgYWxzbyBhZGQgTWV0YWRhdGEgYW5kIFN1YnRpdGxlIG1lZGlhIHR5cGVzLgotCi0yMDEzLTA1LTI3IDE2OjM4OjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICAobXVsdGkpcXVldWU6IERvbid0IGFjY2VzcyBxdWVyeSBpdGVtcyBkdXJpbmcgZmx1c2hpbmcKLQotMjAxMy0wNS0yNyAxNjoyMjowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogRG9uJ3QgZG8gc2VyaWFsaXplZCBxdWVyaWVzIHdoZW4gd2UncmUgZmx1c2hpbmcKLQkgIEp1c3QgaW1tZWRpYXRlbHkgZmFpbCB0aGUgcXVlcnksIG90aGVyd2lzZSB3ZSB3b3VsZCB3YWl0IGZvcmV2ZXIKLQkgIGZvciB0aGUgcXVlcnkgdG8gYmUgYW5zd2VyZWQuCi0KLTIwMTMtMDUtMjcgMTY6MDg6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBGaXJzdCBzZXQgcXVlcnkgcmVzdWx0LCB0aGVuIHNpZ25hbCBHQ29uZAotCi0yMDEzLTA1LTI3IDE1OjU5OjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSAgcXVldWU6IEZpeCBoYW5kbGluZyBvZiBzZXJpYWxpemVkIHF1ZXJpZXMKLQkgIER1cmluZyBGTFVTSF9TVEFSVCB0aGUgcXVlcnkgbmVlZHMgdG8gYmUgdW5ibG9ja2VkIGFscmVhZHksIG90aGVyd2lzZQotCSAgaXQgY2FuIGxlYWQgdG8gZGVhZGxvY2tzIGlmIHRoZSBGTFVTSF9TVEFSVCBpcyB0aGUgcmVzdWx0IG9mIHNvbWV0aGluZwotCSAgZG9uZSBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIG9mIHRoZSBzcmNwYWQgKHRoZSBxdWV1ZSB3aWxsIG5ldmVyIGJlCi0JICBlbXB0aWVkISkuCi0KLTIwMTMtMDUtMjcgMTU6NDE6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBVbmJsb2NrIGFueSB3YWl0aW5nIHNlcmlhbGl6ZSBxdWVyaWVzIG9uIEZMVVNIX1NUQVJUCi0JICBGaXhlcyBzb21lIGRlYWRsb2NrcyBkdXJpbmcgZmx1c2hpbmcuCi0JICBBbmQgc3RvcmUgcXVldWUgaXRlbXMgZGlmZmVyZW50bHkgdG8gbm90IGFjY2lkZW50aWFsbHkgcmVhZAotCSAgYWxyZWFkeSB1bnJlZmZlZCBxdWVyaWVzIHdoZW4gZmx1c2hpbmcuIFF1ZXJpZXMgYXJlIG93bmVkIGJ5Ci0JICB1cHN0cmVhbSBhbmQgbm90IHVzLgotCi0yMDEzLTA1LTI3IDEzOjAxOjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlL3F1ZXVlMi9tdWx0aXF1ZXVlOiBXaGVuIGZsdXNoaW5nLCBtYWtlIHN1cmUgdG8gbm90IGxvc2UgYW55IHN0aWNreSBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg4MjQKLQotMjAxMy0wNS0yNyAxMjo0MDo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFN0b3JlIHN0aWNreSBldmVudHMgZXZlbiBpZiB0aGUgcGFkIGlzIGZsdXNoaW5nCi0JICBCdXQgZG8gdGhpcyBvbmx5IGZvciBldmVudHMgdGhhdCBhcmUgbm90IGRyb3BwZWQgYnkgZmx1c2hpbmcsCi0JICBpLmUuIGRvIGl0IG9ubHkgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IFNFR01FTlQgYW5kIEVPUy4KLQkgIFdpdGhvdXQgdGhpcyB3ZSBtaWdodCBkcm9wIGEgQ0FQUyBldmVudCBpZiBmbHVzaGluZyBoYXBwZW5zCi0JICBhdCBhbiB1bmZvcnR1bmF0ZSB0aW1lIGFuZCBub2JvZHkgaXMgcmVzZW5kaW5nIHRoZSBDQVBTIGV2ZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMDgwNgotCi0yMDEzLTA1LTI1IDIyOjAzOjUzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgdmFsdmU6IERvbid0IHJlYWQgc3RpY2t5IGZsYWcgZnJvbSB1bnJlZmVkIGV2ZW50Ci0KLTIwMTMtMDUtMjQgMjM6Mjg6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICB0ZWU6IGZpeCBwcm9wZXJ0eSBkZXNjcmlwdGlvbiBmb3Igbm93LXVudXNlZCAiYWxsb2MtcGFkIiBwcm9wZXJ0eQotCSAgU2hvdWxkIHByb2JhYmx5IHByb3h5IEFMTE9DQVRJT04gcXVlcmllcyBvbiB0aGF0IHRob3VnaCwgaWYgc2V0LgotCSAgQnV0IHdoYXQgZWxzZT8gQ0FQUyBhbmQgQUNDRVBUX0NBUFMgdG9vPwotCi0yMDEzLTA1LTI0IDIzOjAxOjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IHJlbW92ZSAwLjEwLWlzbSBmcm9tIGRvY3MKLQkgIGdzdF9idWZmZXJfcGFkX2FsbG9jKCkgbmV2ZXIgZXhpc3RlZCwgYW5kIGdzdF9wYWRfYWxsb2NfYnVmZmVyKCkKLQkgIGRvZXNuJ3QgZXhpc3QgYW55IG1vcmUgZWl0aGVyLCBzbyBkb24ndCBtZW50aW9uIGl0IGluIHRoZSBkb2NzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDcxNAotCi0yMDEzLTA1LTI0IDE5OjIyOjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBBZGQgc3VwcG9ydCBmb3Igc2VyaWFsaXplZCBxdWVyaWVzIGlmIHVzaW5nIGEgbWVtb3J5IHF1ZXVlCi0KLTIwMTMtMDUtMjQgMTg6NDc6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IFNldCB0aGUgbGFzdCBzZXJpYWxpemVkIHF1ZXJ5IHJlc3VsdCB0byBGQUxTRSB3aGVuIGZsdXNoaW5nCi0KLTIwMTMtMDUtMjQgMTg6NDI6NTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBJbml0aWFsaXplIGFsbCBHc3RNdWx0aVF1ZXVlSXRlbSBmaWVsZHMgaW4gYm90aCBjb2RlIHBhdGhzCi0KLTIwMTMtMDUtMjQgMTg6Mzg6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBEb24ndCBhY2Nlc3MgdGhlIHF1ZXJ5IGFmdGVyIHNpZ25hbGxpbmcgdGhlIHdhaXRpbmcgdGhyZWFkCi0JICBJdCBtaWdodCd2ZSBmcmVlJ2QgdGhlIHF1ZXJ5IGFscmVhZHkuCi0KLTIwMTMtMDUtMjQgMTg6MzA6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBNYWtlIHN1cmUgdG8gYWx3YXlzIHNpZ25hbCBhbnkgcG9zc2libGUgcGVuZGluZyBzZXJpYWxpemVkIHF1ZXJpZXMKLQkgIEFuZCBkb24ndCB1bnJlZiB0aGVtIHdoZW4gZmx1c2hpbmcgdGhlIHF1ZXVlLCB0aGV5J3JlIG93bmVkIGJ5IHRoZSBjYWxsZXIhCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMzQyCi0KLTIwMTMtMDUtMjQgMTQ6Mzc6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBSZXR1cm4gR1NUX0ZMT1dfRVJST1IgaWYgdGhlIGFsbG9jYXRvciBkaWQgbm90IGFsbG93IHRvIGFsbG9jYXRlIGEgYnVmZmVyCi0KLTIwMTMtMDUtMjQgMTY6MjQ6MTAgKzA5MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDoKLQkgIGRvY3M6IFJlbW92ZSBtZW50aW9uIG9mIGdjb25mKiBlbGVtZW50cwotCSAgSW5zdGVhZCByZWNvbW1lbmQgcHVsc2VzcmMvc2luayBmb3IgYXVkaW8sIHRoZXJlIGlzIG5vdGhpbmcgR05PTUUKLQkgIHNwZWNpZmljIGZvciB2aWRlby4KLQotMjAxMy0wNS0xNSAxMzoyMjowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogSGFuZGxlIHRoZSBmb3JjZS1jYXBzIHByb3BlcnR5IG1vcmUgc2ltaWxhciB0byBhbGwgdHlwZWZpbmRpbmcgY29kZSBmbG93Ci0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBldmVudHMgaGFwcGVuIGluIG9yZGVyIGFuZCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgYml0LgotCi0yMDEzLTA1LTE1IDExOjIxOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGNoZWNrOiBGaXggZXZlbnQgaGFuZGxpbmcgaW4gZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCgpCi0KLTIwMTMtMDUtMTUgMTA6NTE6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNWVkY2Q4NSB0byAwOThjMGQ3Ci0KLTIwMTMtMDUtMTAgMTY6MDM6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IE9ubHkgY2hlY2sgaWYgd2UgZ2V0IGJ1ZmZlcnMgYmVmb3JlIHN0cmVhbS1zdGFydC9zZWdtZW50IGlmIGNvbXBpbGluZyB3aXRob3V0IEdfRElTQUJMRV9BU1NFUlQKLQkgIEluIHJlbGVhc2VzIHRoaXMgaXMgc2V0IHVzdWFsbHkuCi0KLTIwMTMtMDUtMDkgMTc6MTc6MTQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBjaGVjazogQWRkIGhlbHBlciB0aGF0IHNlbmRzIGluaXRpYWwgZXZlbnRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMDMzCi0KLTIwMTMtMDUtMDkgMTc6MjI6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMy0wNS0wOSAxNzoyMToxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogTWFrZSBzdXJlIHBlbmRpbmcsIG9sZGVyIHN0aWNreSBldmVudHMgYXJlIHNlbnQgZG93bnN0cmVhbSBpbiBkeW5hbWljIGxpbmtpbmcgc2NlbmFyaW9zCi0JICBJZiBhIHBhZCBibG9jayB3YXMgdHJpZ2dlcmVkIGZyb20gc2VuZGluZyBhIHN0aWNreSBldmVudCBkb3duc3RyZWFtLCBpdAotCSAgY291bGQgaGFwcGVuIHRoYXQgdGhlIHBhZCBibG9jayBpcyByZWxpbmtpbmcgcGFkcywgd2hpY2ggdGhlbiByZXF1aXJlcwotCSAgdG8gcmVzZW5kIHByZXZpb3VzIHN0aWNreSBldmVudHMuCi0KLTIwMTMtMDUtMDkgMTM6MzI6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZTIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOgotCSAgdGVzdHM6IEZpeCBldmVudCBvcmRlciB3YXJuaW5ncyBhbmQgZGF0YWZsb3cgYmVmb3JlIHN0cmVhbS1zdGFydC9zZWdtZW50IGV2ZW50Ci0KLTIwMTMtMDUtMDkgMTM6MzE6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKLQkgIGJhc2V0cmFuc2Zvcm06IFByb3Blcmx5IHBvcnQgdW5pdCB0ZXN0IHRvIGFjdHVhbGx5IHVzZSBjYXBzIGFuZCBjaGVjayByZXN1bHRzCi0KLTIwMTMtMDUtMDkgMTI6NTA6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogU3RvcmUgc3RpY2t5IGV2ZW50cyBvbiB0aGUgc3JjcGFkIGlmIHdlJ3JlIGRyb3BwaW5nIHRoZW0gYmVjYXVzZSBvZiBsZWFraW5nCi0KLTIwMTMtMDUtMDkgMTI6Mjc6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBvdXRwdXRzZWxlY3RvcjogQWx3YXlzIGZvcndhcmQgc3RpY2t5IGV2ZW50cyB0byBhbGwgcGFkcwotCi0yMDEzLTA1LTA5IDEyOjE1OjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBGb3J3YXJkIGFsbCBzdGlja3kgZXZlbnRzLCBpbmNsdWRpbmcgc3RyZWFtLXN0YXJ0Ci0KLTIwMTMtMDUtMDkgMTE6MDU6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFdhcm4gaWYgZGF0YSBmbG93IGhhcHBlbnMgYmVmb3JlIHN0cmVhbS1zdGFydCBvciBzZWdtZW50IGV2ZW50Ci0KLTIwMTMtMDUtMDkgMTA6NTk6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IE9ubHkgbGV0IGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoKCkgaXRlcmF0ZSBvdmVyIGV4aXN0aW5nIGV2ZW50cwotCi0yMDEzLTA1LTA5IDEwOjI5OjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBJZiB3ZSBwdXNoIHN0aWNreSBldmVudHMgYmVjYXVzZSBvZiBhbm90aGVyIHN0aWNreSBldmVudCwgb25seSBwdXNoIHRob3NlIHRoYXQgY29tZSBiZWZvcmUgdGhlIG5ldyBldmVudAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTkzNwotCi0yMDEzLTA1LTA5IDA5OjUwOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBBZGQgbW9yZSBkZWJ1ZyBvdXRwdXQgYW5kIGZvcndhcmQgY2FwcyBldmVudHMgaW1tZWRpYXRlbHkgdG9vCi0KLTIwMTMtMDUtMDkgMDk6NDI6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IE5vIHN0aWNreSBldmVudHMgbXVzdCBhcnJpdmUgYWZ0ZXIgRU9TCi0KLTIwMTMtMDUtMDkgMDk6Mzg6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIGNhcHNmaWx0ZXI6IEZpeCB0eXBvIGluIGxhc3QgY29tbWl0Ci0KLTIwMTMtMDUtMDggMTk6NDQ6MDkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEltcHJvdmUgd2FybmluZyBtZXNzYWdlIG5hbWluZyBldmVudHMgdHlwZSBuYW1lCi0JICBXaXRoIHRoaXMgcGF0Y2gsIG1lc3NhZ2Ugc2hvdWxkIGxvb2sgbGlrZSDCqFN0aWNreSBldmVudCBtaXNvcmRlcmluZywgZ290Ci0JICAnY2FwcycgYmVmb3JlICdzdHJlYW0tc3RhcnQnwqggbWFraW5nIGl0IGZhc3RlciB0byBkZWJ1Zy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODgxODgKLQotMjAxMy0wNS0wOCAxODoxOTo0OCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogT25seSBpbmZvcmNlIFNUUkVBTV9TVEFSVCwgQ0FQUyBhbmQgU0VHTUVOVCBvcmRlcmluZwotCSAgUHJldmlvdXMgcGF0Y2ggd2FzIGluZm9yY2luZyBhIGNvbXBsZXRlIG9yZGVyaW5nIG9mIHRoZSBzdGlja3kgZXZlbnRzLCB3aGlsZQotCSAgaW4gZmFjdCwgb25seSBTVFJFQU1fU1RBUlQsIENBUFMgYW5kIFNFR01FTlQgZXZlbnRzIG5lZWQgcHJvcGVyIG9yZGVyaW5nLgotCSAgU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg4MTg4Ci0KLTIwMTMtMDUtMDkgMDk6MzI6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oOgotCSAgY2Fwc2ZpbHRlcjogU2VuZCBhbGwgZXZlbnRzIHRoYXQgc2hvdWxkIGhhcHBlbiBhZnRlciBDQVBTIGFmdGVyIHRoZSBDQVBTIGV2ZW50Ci0KLTIwMTMtMDUtMDggMjE6NDU6MDggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oOgotCSAgY2Fwc2ZpbHRlcjogU2VuZCBjYXBzIGJlZm9yZSBzZWdtZW50Ci0JICBJbiB0aGUgY2FzZSB0aGUgc291cmNlIGhhcyBubyBjYXBzLCBjYXBzIG11c3QgYmUgc2VudCBiZWZvcmUgc2VnbWVudC4gVGhpcwotCSAgZml4ZXMgZmV3IHVuaXQgdGVzdHMgdGhhdCB3aGVyZSBmYWlsaW5nIGR1ZSB0byB0aGUgbmV3IG1pc29yZGVyaW5nIHdhcm5pbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5OTY4Ci0KLTIwMTMtMDUtMDcgMjE6NTM6MzcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IERldGVjdCwgZml4IGFuZCB3YXJuIHdoZW4gc3RpY2t5IGV2ZW50cyBhcmUgaW4gd3Jvbmcgb3JkZXIKLQkgIFdlIGNhbiBwcmV2ZW50IGJ1Z2d5IGVsZW1lbnQgZnJvbSBjYXVzaW5nIG90aGVyIGVsZW1lbnRzIHRvIGZhaWwgb3IgY3Jhc2gKLQkgIGJ5IHNvcnRpbmcgc3RpY2t5IGV2ZW50IGF0IGluc2VydGlvbi4gSW4gdGhpcyBjYXNlLCB3ZSBhbHNvIHdhcm4gYXMgdGhpcwotCSAgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlbi4KLQkgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4ODE4OAotCi0yMDEzLTA1LTA4IDEwOjI2OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JICB0ZXN0czogYWRkIHNvbWUgYmFzaWMgY2hlY2tzIGZvciBnc3RfYnVmZmVyX2ZpbGwoKQotCi0yMDEzLTA1LTA4IDEwOjI1OjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGFsbG93IGNhbGxpbmcgX2ZpbGwoKSB3aXRoIGEgTlVMTCBkYXRhIHBvaW50ZXIgaWYgc2l6ZSBpcyAwIGJ5dGVzCi0KLTIwMTMtMDUtMDcgMTY6NDY6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IEFkZCBGSVhNRSBjb21tZW50IGZvciB1bnVzZWQgYXNzaWdubWVudCByZXN1bHRzCi0KLTIwMTMtMDUtMDcgMTU6MTg6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLW1ldGFkYXRhLnhtbDoKLQkgIGRvY3M6IGZpeCB0eXBvIGluIG1ldGFkYXRhIHNlY3Rpb24gaW4gYXBwIGRldiBtYW51YWwKLQkgIFRoZXJlJ3Mgbm8gZ190YWdfbGlzdF9nZXRfeHl6KCkuCi0KLTIwMTMtMDUtMDcgMTQ6NDc6MDkgKzAzMDAgIFNyZWVyZW5qIEJhbGFjaGFuZHJhbiA8c3JlZXJlbmouYmFsYWNoYW5kcmFuQGludGVsLmNvbT4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jOgotCSAgY29udHJvbGxlcjogRml4IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIGEgbWlub3IgdHlwbyBmaXgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTk4MjcKLQotMjAxMy0wNS0wNiAxODo0Nzo0NCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IFNlbmQgc3RyZWFtLXN0YXJ0IGJlZm9yZSBhbnl0aGluZyBlbHNlCi0JICBUbyBkbyBzbywgc2VuZCBzdHJlYW0tc3RhcnQgd2hlbiB0aGUgc3RyZWFtaW5nIHRocmVhZCBnb2VzIHVwIGZvciB0aGUgZmlyc3QKLQkgIHRpbWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5NzY3Ci0KLTIwMTItMTItMjYgMTE6NTQ6NTEgKzAwMDAgIERhdmlkIFJvdGhsaXNiZXJnZXIgPGRhdmlkQHJvdGhsaXMubmV0PgotCi0JKiB0b29scy9nc3RyZWFtZXItY29tcGxldGlvbjoKLQkgIHRvb2xzL2dzdHJlYW1lci1jb21wbGV0aW9uOiBBbGxvdyAxLjAgYW5kIDAuMTAgc2NyaXB0cyBpbnN0YWxsZWQgc2ltdWx0YW5lb3VzbHkKLQkgIEFzIGxvbmcgYXMgdGhlIHNjcmlwdHMnIGZpbGVuYW1lcyBhcmUgZGlmZmVyZW50LCBhbmQgdGhlIF9nc3RfaW5zcGVjdAotCSAgYW5kIF9nc3RfbGF1bmNoIGZ1bmN0aW9ucyBhcmUgbmFtZWQgZGlmZmVyZW50bHksIHRoZSBjb21wbGV0aW9uIHNjcmlwdHMKLQkgIGZvciBHU3RyZWFtZXIgMS4wIGFuZCAwLjEwIGNhbiBiZSBpbnN0YWxsZWQgc2lkZS1ieS1zaWRlIGluCi0JICAvZXRjL2Jhc2hfY29tcGxldGlvbi5kLgotCSAgT24gbXkgMC4xMCBicmFuY2jigKAgdGhlIGNvbXBsZXRpb24gc2NyaXB0IGlzIHJlbmFtZWQgdG8KLQkgICJnc3RyZWFtZXItY29tcGxldGlvbi0wLjEwIiBhbmQgdGhlIGZ1bmN0aW9ucyBhcmUgcmVuYW1lZCB0bwotCSAgIl9nc3RfaW5zcGVjdF8wXzEwIiBhbmQgIl9nc3RfbGF1bmNoXzBfMTAiLiBUaGUgcmVtYWluaW5nIGhlbHBlcgotCSAgZnVuY3Rpb25zIHNob3VsZCByZW1haW4gaWRlbnRpY2FsICh0aGUgY29tbWFuZC1saW5lIGludGVyZmFjZSB0bwotCSAgZ3N0LWluc3BlY3QgaGFzbid0IGNoYW5nZWQsIG5vciBoYXMgdGhlIGZvcm1hdCBvZiB0aGUgZ3N0LWxhdW5jaAotCSAgcGlwZWxpbmUpLCBzbyBpdCBkb2Vzbid0IG1hdHRlciBpZiB0aGUgMS4wIHNjcmlwdCBvdmVycmlkZXMgdGhlIDAuMTAKLQkgIHNjcmlwdCdzIGRlZmluaXRpb25zLgotCSAgTm90ZSB0aGF0IEkgZG9uJ3QgZXhwZWN0IHRoZXJlIHRvIGJlIGFub3RoZXIgR1N0cmVhbWVyIDAuMTAgcmVsZWFzZSwgc28KLQkgIHRoZSAwLjEwIGNvbXBsZXRpb24gc2NyaXB0IHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgb2ZmaWNpYWxseSByZWxlYXNlZDsKLQkgIGJ1dCBpdCBpcyBzdGlsbCB3b3J0aHdoaWxlIGFsbG93aW5nIGJvdGggc2NyaXB0cyB0byBiZSBpbnN0YWxsZWQKLQkgIGFsb25nc2lkZSBlYWNoIG90aGVyLCBmb3IgdGhvc2Ugd2hvIGluc3RhbGwgdGhlIDAuMTAgY29tcGxldGlvbiBzY3JpcHQKLQkgIG1hbnVhbGx5LgotCSAgRml4ZXM6ICM2OTA1MTUKLQkgIOKAoCBodHRwczovL2dpdGh1Yi5jb20vZHJvdGhsaXMvZ3N0cmVhbWVyL2Jsb2IvYmFzaC1jb21wbGV0aW9uLTAuMTAvdG9vbHMvZ3N0cmVhbWVyLWNvbXBsZXRpb24tMC4xMAotCi0yMDEyLTEyLTIxIDE4OjEzOjUzICswMDAwICBEYXZpZCBSb3RobGlzYmVyZ2VyIDxkYXZpZEByb3RobGlzLm5ldD4KLQotCSogdGVzdHMvbWlzYy90ZXN0LWdzdHJlYW1lci1jb21wbGV0aW9uLnNoOgotCSogdG9vbHMvZ3N0cmVhbWVyLWNvbXBsZXRpb246Ci0JICB0b29scy9nc3RyZWFtZXItY29tcGxldGlvbjogQ29tcGxldGUgb3B0aW9uICYgcHJvcGVydHkgdmFsdWVzIG9uIGJhc2ggMy4yCi0JICBCYXNoIDMncyBjb21wbGV0aW9uIGRvZXNuJ3Qgc3BsaXQgd29yZHMgYnkgY2hhcmFjdGVycyBpbgotCSAgQ09NUF9XT1JEQlJFQUtTLiBJbiBwYXJ0aWN1bGFyIGl0IGRvZXNuJ3Qgc3BsaXQgYXQgIj0iIHNpZ25zLiBOb3cKLQkgIF9nc3RfbGF1bmNoX3BhcnNlIGhhbmRsZXMgYm90aCBiYXNoIDMgYW5kIDQgZm9ybWF0IG9mIENPTVBfV09SRFMuCi0JICBOb3RlIHRoYXQgIiR7Y3VyJSU9Kn0iIG1lYW5zIGN1cidzIHZhbHVlIHdpdGggdGhlIGxvbmdlc3QgcG9zc2libGUgbWF0Y2gKLQkgIG9mICI9KiIgZGVsZXRlZCBmcm9tIHRoZSBlbmQ7ICIke2N1ciMqPX0iIG1lYW5zIGN1cidzIHZhbHVlIHdpdGggdGhlCi0JICBzaG9ydGVzdCBwb3NzaWJsZSBtYXRjaCBvZiAiKj0iIGRlbGV0ZWQgZnJvbSB0aGUgYmVnaW5uaW5nLiBTZWUKLQkgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2hlbGwtUGFyYW1ldGVyLUV4cGFuc2lvbi5odG1sCi0JICBSZWdhcmRsZXNzIG9mIHRoZSB2ZXJzaW9uIG9mIGJhc2ggcnVubmluZyB0aGUgdW5pdCB0ZXN0cywgSSBjYW4gdGVzdCBmb3IKLQkgIGJvdGggYmVoYXZpb3VycyBiZWNhdXNlIHRoZSB1bml0IHRlc3QgcG9wdWxhdGVzIENPTVBfV09SRFMgbWFudWFsbHkuIFNvCi0JICB0aGlzIHRlc3RzIHRoZSBiYXNoIDMgYmVoYXZpb3VyOgotCSAgdGVzdF9nc3RfaW5zcGVjdF9jb21wbGV0aW9uIC0tZ3N0LWRlYnVnLWxldmVsPTQKLQkgIGFuZCB0aGlzIHRlc3RzIHRoZSBiYXNoIDQgYmVoYXZpb3VyOgotCSAgdGVzdF9nc3RfaW5zcGVjdF9jb21wbGV0aW9uIC0tZ3N0LWRlYnVnLWxldmVsID0gNAotCi0yMDEyLTEyLTIxIDA4OjU2OjI2ICswMDAwICBEYXZpZCBSb3RobGlzYmVyZ2VyIDxkYXZpZEByb3RobGlzLm5ldD4KLQotCSogdGVzdHMvbWlzYy90ZXN0LWdzdHJlYW1lci1jb21wbGV0aW9uLnNoOgotCSogdG9vbHMvZ3N0cmVhbWVyLWNvbXBsZXRpb246Ci0JICB0b29scy9nc3RyZWFtZXItY29tcGxldGlvbjogQmFzaCAzLjIgY29tcGF0aWJpbGl0eSBmaXhlcwotCSAgQ29tcGF0aWJsZSB3aXRoIGJhc2ggMy4yOyBkb2Vzbid0IHJlcXVpcmUgdGhlIGJhc2gtY29tcGxldGlvbiBwYWNrYWdlIGF0Ci0JICBhbGwgKHRob3VnaCB0aGUgZWFzaWVzdCB3YXkgdG8gaW5zdGFsbCB0aGlzIHNjcmlwdCBpcyBzdGlsbCB0byBpbnN0YWxsCi0JICBiYXNoLWNvbXBsZXRpb24sIGFuZCB0aGVuIGRyb3AgdGhpcyBzY3JpcHQgaW50byAvZXRjL2Jhc2hfY29tcGxldGlvbi5kKS4KLQkgIE5vdGUgdGhhdCBiYXNoIDMgZG9lc24ndCBicmVhayBDT01QX1dPUkRTIGFjY29yZGluZyB0byBjaGFyYWN0ZXJzIGluCi0JICBDT01QX1dPUkRCUkVBS1MsIHNvICJwcm9wZXJ0eT12YWwiIGxvb2tzIGxpa2UgYSBzaW5nbGUgd29yZCwgc28gdGhpcwotCSAgd29uJ3QgY29tcGxldGUgcHJvcGVydHkgdmFsdWVzIChvbiBiYXNoIDMpLiBTaW1pbGFybHksCi0JICAiLS1nc3QtZGVidWctbGV2ZWw9PFRBQj4iIHdvbid0IGNvbXBsZXRlIHByb3Blcmx5IChvbiBiYXNoIDMpLCBidXQKLQkgICItLWdzdC1kZWJ1Zy1sZXZlbCA8VEFCPiIgd2lsbC4KLQkgIEZvciB0aGF0IHJlYXNvbiwgSSBub3cgb2ZmZXIgIi0tZ3N0LWRlYnVnLWxldmVsIiBldGMgYXMgY29tcGxldGlvbnMKLQkgIGluc3RlYWQgb2YgIi0tZ3N0LWRlYnVnLWxldmVsPSIuCi0JICBGdW5jdGlvbnMgIl9pbml0X2NvbXBsZXRpb24iIGFuZCAiX3BhcnNlX2hlbHAiIHdlcmUgcHJvdmlkZWQgYnkgdGhlCi0JICBiYXNoLWNvbXBsZXRpb24gcGFja2FnZSA+PSAyLjA7IG5vdyBJIHJvbGwgbXkgb3duIGVxdWl2YWxlbnQgb2YKLQkgICJfcGFyc2VfaGVscCIsIGFuZCBpbnN0ZWFkIG9mICJfaW5pdF9jb21wbGV0aW9uIiBJIHVzZQotCSAgIl9nZXRfY29tcF93b3Jkc19ieV9yZWYiIHdoaWNoIGlzIGF2YWlsYWJsZSBmcm9tIGJhc2gtY29tcGxldGlvbiAxLjIKLQkgIG9ud2FyZHMuIElmIHRoZSBiYXNoLWNvbXBsZXRpb24gcGFja2FnZSBpc24ndCBhdmFpbGFibGUgYXQgYWxsIEkgdXNlCi0JICBiYXNoJ3MgcmF3IGZhY2lsaXRpZXMsIGF0IHRoZSBleHBlbnNlIG9mIG5vdCBjb21wbGV0aW5nIHByb3Blcmx5IHdoZW4KLQkgIHRoZSBjdXJzb3IgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQuCi0JICBUaGUgYnVpbHRpbiAiY29tcG9wdCIgZG9lc24ndCBleGlzdCBpbiBiYXNoIDM7IHRob3NlIHVzZXJzIHdpbGwganVzdAotCSAgaGF2ZSB0byBsaXZlIHdpdGggdGhlIGluY29udmVuaWVuY2Ugb2YgInByb3BlcnR5PSIgY29tcGxldGluZyB0bwotCSAgInByb3BlcnR5PSAiIHdpdGggYSB0cmFpbGluZyBzcGFjZS4gUHJvcGVydHkgdmFsdWVzIGFyZW4ndCBjb21wbGV0ZWQKLQkgIHByb3Blcmx5IGFueXdheSBvbiBiYXNoIDMgKHNlZSBhYm92ZSkuCi0JICAiW1sgLXYgdmFyIF1dIiB0byB0ZXN0IHdoZXRoZXIgYSB2YXJpYWJsZSBpcyBzZXQsIGFsc28gZG9lc24ndCBleGlzdCBpbgotCSAgYmFzaCAzLiBOZWl0aGVyIGRvZXMgIjs7JiIgdG8gZmFsbCB0aHJvdWdoIGluIGEgImNhc2UiIHN0YXRlbWVudC4KLQkgIEluIHRoZSB1bml0IHRlc3RzOgotCSAgKiBPbiBteSBzeXN0ZW0gKE9TIFgpLCAiIyEvYmluL2Jhc2giIGlzIGJhc2ggMy4yLCB3aGVyZWFzCi0JICAiIyEvdXNyL2Jpbi9lbnYgYmFzaCIgaXMgdGhlIDQuMiB2ZXJzaW9uIEkgYnVpbHQgbXlzZWxmLgotCSAgKiBJIGhhdmUgdG8gaW5pdGlhbGlzZSBhcnJheSB2YXJpYWJsZXMgbGlrZSAiZXhwZWN0ZWQ9KCkiLCBvciBiYXNoIDMKLQkgIHRyZWF0cyAiKz0iIGFzIGFwcGVuZGluZyB0byBhbiBhcnJheSBhbHJlYWR5IHBvcHVsYXRlZCB3aXRoIG9uZSBlbXB0eQotCSAgc3RyaW5nLgotCi0yMDEyLTEyLTE5IDEwOjQ2OjUwICswMDAwICBEYXZpZCBSb3RobGlzYmVyZ2VyIDxkYXZpZEByb3RobGlzLm5ldD4KLQotCSAgdG9vbHMvZ3N0cmVhbWVyLWNvbXBsZXRpb246IFN1cHBvcnQgZ3N0LWluc3BlY3QsIGFuZCBnc3QtbGF1bmNoIGVsZW1lbnQgcHJvcGVydGllcwotCSAgQ29tcGxldGVzIG9wdGlvbnMgbGlrZSAiLS1nc3QtZGVidWctbGV2ZWwiIGFuZCB0aGUgdmFsdWVzIG9mIHNvbWUgb2YKLQkgIHRob3NlIG9wdGlvbnM7IGNvbXBsZXRlcyBnc3QtbGF1bmNoIHBpcGVsaW5lIGVsZW1lbnQgbmFtZXMsIHByb3BlcnR5Ci0JICBuYW1lcywgYW5kIGV2ZW4gcHJvcGVydHkgdmFsdWVzIChmb3IgZW51bSBvciBib29sZWFuIHByb3BlcnRpZXMgb25seSkuCi0JICBEb2Vzbid0IGNvbXBsZXRlIGFsbCBjYXBzIHNwZWNpZmljYXRpb25zLCBub3IgZWxlbWVudCBuYW1lcyBzcGVjaWZpZWQKLQkgIGVhcmxpZXIgaW4gdGhlIHBpcGVsaW5lIHdpdGggIm5hbWU9Li4uIi4KLQkgIFRoZSBHU3RyZWFtZXIgdmVyc2lvbiBudW1iZXIgaXMgaGFyZC1jb2RlZCBpbnRvIHRoZSBjb21wbGV0aW9uIHNjcmlwdDoKLQkgIFRoaXMgcGF0Y2ggaXMgb2ZmIHRoZSBtYXN0ZXIgYnJhbmNoIGFuZCBoYXMgdGhlIHZlcnNpb24gaGFyZC1jb2RlZCBhcwotCSAgIjEuMCI7IGl0IG5lZWRzIHRvIGJlIHVwZGF0ZWQgaWYgYmFja3BvcnRlZCB0byB0aGUgMC4xMCBicmFuY2guIFlvdQotCSAgY291bGQgYWx3YXlzIGNyZWF0ZSBhICJnc3RyZWFtZXItY29tcGxldGlvbi5pbiIgdGhhdCBoYXMgdGhlIGFwcHJvcHJpYXRlCi0JICB2ZXJzaW9uIGluc2VydGVkIGJ5ICJjb25maWd1cmUiLCBidXQgSSdkIHJhdGhlciBub3QgZG8gdGhhdC4gVGhlCi0JICBoYXJkLWNvZGVkIHZlcnNpb24gaXMgY29uc2lzdGVudCB3aXRoIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBvZgotCSAgZ3N0cmVhbWVyLWNvbXBsZXRpb24sIHdoaWNoIGhhZCB0aGUgcmVnaXN0cnkgcGF0aCBoYXJkLWNvZGVkIGFzCi0JICB+Ly5nc3RyZWFtZXItMS4wL3JlZ2lzdHJ5LnhtbC4KLQkgIE5vdGUgdGhhdCBHU3RyZWFtZXIgMC4xMCBpbnN0YWxscyAiZ3N0LWluc3BlY3QiIGFuZCAiZ3N0LWluc3BlY3QtMC4xMCIuCi0JICAiZ3N0LWluc3BlY3QgLS1oZWxwIiBvbmx5IHByaW50cyA0IGZsYWdzICgtLWhlbHAsIC0tcHJpbnQsIC0tZ3N0LW1tLAotCSAgZ3N0LWxpc3QtbW0pIHdoZXJlYXMgImdzdC1pbnNwZWN0LTAuMTAgLS1oZWxwLWFsbCIgcHJpbnRzIHRoZSBmdWxsIGxpc3QKLQkgIG9mIGZsYWdzLiBUaGUgc2FtZSBhcHBsaWVzIHRvICJnc3QtbGF1bmNoIiBhbmQgImdzdC1sYXVuY2gtMC4xMCIuCi0JICBHU3RyZWFtZXIgMS4wIG9ubHkgaW5zdGFsbHMgImdzdC1pbnNwZWN0LTEuMCIsIG5vdCAiZ3N0LWluc3BlY3QiLgotCSAgUmVxdWlyZXMgYmFzaCA0OyBvbmx5IHRlc3RlZCB3aXRoIGJhc2ggNC4yLiBSZXF1aXJlcyAiYmFzaC1jb21wbGV0aW9uIgotCSAgKHdoaWNoIHlvdSBpbnN0YWxsIHdpdGggeW91ciBzeXN0ZW0ncyBwYWNrYWdlIG1hbmFnZXIpLgotCSAgUHV0IHRoaXMgaW4gL2V0Yy9iYXNoX2NvbXBsZXRpb24uZC8gb3IgaW4gYHBrZy1jb25maWcKLQkgIC0tdmFyaWFibGU9Y29tcGF0ZGlyIGJhc2gtY29tcGxldGlvbmAsIHdoZXJlIGl0IHdpbGwgYmUgbG9hZGVkIGF0IHRoZQotCSAgYmVnaW5uaW5nIG9mIGV2ZXJ5IG5ldyB0ZXJtaW5hbCBzZXNzaW9uOwotCSAgb3IgaW4gYHBnay1jb25maWcgLS12YXJpYWJsZT1jb21wbGV0aW9uc2RpciBiYXNoLWNvbXBsZXRpb25gLCByZW5hbWVkIHRvCi0JICBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBpdCBjb21wbGV0ZXMgKGUuZy4gImdzdC1sYXVuY2gtMS4wIiwgd2l0aAotCSAgYW4gYWRkaXRpb25hbCBzeW1saW5rIG5hbWVkICJnc3QtaW5zcGVjdC0xLjAiKSwgd2hlcmUgaXQgd2lsbCBiZQotCSAgYXV0b2xvYWRlZCB3aGVuIG5lZWRlZC4KLQkgIHRlc3QtZ3N0cmVhbWVyLWNvbXBsZXRpb24uc2ggaXMgKGZvciBub3cpIGluIHRlc3RzL21pc2MgLS0gaXQgbWlnaHQgYmUKLQkgIHdvcnRoIGNyZWF0aW5nICJ0ZXN0cy9jaGVjay90b29scyIsIHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgYXV0b21ha2UKLQkgIGJvaWxlcnBsYXRlLCBhbmQgbW92aW5nIHRlc3QtZ3N0cmVhbWVyLWNvbXBsZXRpb24uc2ggdGhlcmUsIGFuZCBoYXZlIGl0Ci0JICBydW4gYXV0b21hdGljYWxseSB3aXRoICJtYWtlIGNoZWNrIi4KLQkgIElGIFlPVSdSRSBORVcgVE8gQkFTSCBDT01QTEVUSU9OIFNDUklQVFMKLQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgICJjb21wbGV0ZSAtRiBfZ3N0X2xhdW5jaCBnc3QtbGF1bmNoLTEuMCIgbWVhbnMgdGhhdCBiYXNoIHdpbGwgcnVuIHRoZQotCSAgZnVuY3Rpb24gIl9nc3RfbGF1bmNoIiB0byBnZW5lcmF0ZSBwb3NzaWJsZSBjb21wbGV0aW9ucyBmb3IgdGhlIGNvbW1hbmQKLQkgICJnc3QtbGF1bmNoLTEuMCIuCi0JICAiX2dzdF9sYXVuY2giIG11c3QgcmV0dXJuIHRoZSBwb3NzaWJsZSBjb21wbGV0aW9ucyBpbiB0aGUgYXJyYXkgdmFyaWFibGUKLQkgIENPTVBSRVBMWS4gKE5vdGUgb24gYmFzaCBzeW50YXg6ICJWPShhIGIgYykiIGFzc2lnbnMgdGhyZWUgZWxlbWVudHMgdG8KLQkgIHRoZSBhcnJheSAiViIpLgotCSAgImNvbXBnZW4iIHByaW50cyBhIGxpc3Qgb2YgcG9zc2libGUgY29tcGxldGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0LiBUcnkKLQkgIGl0OgotCSAgY29tcGdlbiAtVyAiYWJjMSBhYmMyIGRlZiIgLS0gImEiCi0JICBjb21wZ2VuIC1mIC0tICIvIgotCSAgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHdvcmQgY3VycmVudGx5IGJlaW5nIGNvbXBsZXRlZDsgY29tcGdlbiB1c2VzIGl0Ci0JICB0byBmaWx0ZXIgb3V0IHRoZSBub24tbWF0Y2hpbmcgY29tcGxldGlvbnMuIFdlIHB1dCAiLS0iIGZpcnN0LCBpbiBjYXNlCi0JICB0aGUgd29yZCBjdXJyZW50bHkgYmVpbmcgY29tcGxldGVkIHN0YXJ0cyB3aXRoICItIiBvciAiLS0iLCBzbyB0aGF0IGl0Ci0JICBpc24ndCB0cmVhdGVkIGFzIGEgZmxhZyB0byBjb21wZ2VuLgotCSAgRm9yIHRoZSBkb2N1bWVudGF0aW9uIG9mIENPTVBfV09SRFMsIENPTVBfQ1dPUkQsIGV0YyBzZWUKLQkgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvQmFzaC1WYXJpYWJsZXMuaHRtbCNpbmRleC1DT01QXzAwNWZDV09SRC0xODAKLQkgIFNlZSBhbHNvOgotCSAgKiBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1Byb2dyYW1tYWJsZS1Db21wbGV0aW9uLmh0bWwKLQkgICogaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jhc2gvbWFudWFsL2h0bWxfbm9kZS9Qcm9ncmFtbWFibGUtQ29tcGxldGlvbi1CdWlsdGlucy5odG1sCi0JICBUaGUgYmFzaC1jb21wbGV0aW9uIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGhlbHBlciBmdW5jdGlvbgotCSAgIl9pbml0X2NvbXBsZXRpb24iIHdoaWNoIHBvcHVsYXRlcyB2YXJpYWJsZXMgImN1ciIsICJwcmV2IiwgYW5kICJ3b3JkcyIuCi0JICBTZWUKLQkgIGh0dHA6Ly9hbm9uc2NtLmRlYmlhbi5vcmcvZ2l0d2ViLz9wPWJhc2gtY29tcGxldGlvbi9iYXNoLWNvbXBsZXRpb24uZ2l0O2E9YmxvYjtmPWJhc2hfY29tcGxldGlvbjtoPTg3MDgxMWI0O2hiPUhFQUQjbDYzNAotCSAgTm90ZSB0aGF0IGJ5IGRlZmF1bHQsIGJhc2ggYXBwZW5kcyBhIHNwYWNlIHRvIHRoZSBjb21wbGV0ZWQgd29yZC4gV2hlbgotCSAgdGhlIGNvbXBsZXRpb24gaXMgInByb3BlcnR5PSIgd2UgZG9uJ3Qgd2FudCBhIHRyYWlsaW5nIHNwYWNlOyBjYWxsaW5nCi0JICAiY29tcG9wdCAtbyBub3NwYWNlIiBtb2RpZmllcyB0aGUgY3VycmVudGx5LWV4ZWN1dGluZyBjb21wbGV0aW9uCi0JICBhY2NvcmRpbmdseS4gU2VlCi0JICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1Byb2dyYW1tYWJsZS1Db21wbGV0aW9uLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY29tcG9wdAotCi0yMDEyLTExLTEzIDE2OjM2OjQ2ICswMDAwICBEYXZpZCBSb3RobGlzYmVyZ2VyIDxkYXZpZEByb3RobGlzLm5ldD4KLQotCSogdG9vbHMvZ3N0cmVhbWVyLWNvbXBsZXRpb246Ci0JICB0b29scy9nc3RyZWFtZXItY29tcGxldGlvbjogVXBkYXRlZCB0byB3b3JrIHdpdGggdGhlIGJpbmFyeSByZWdpc3RyeQotCSAgVGhlIG9yaWdpbmFsIHJlZ2lzdHJ5IHdhcyBpbiB4bWwgZm9ybWF0ICh+Ly5nc3RyZWFtZXItKi9yZWdpc3RyeS54bWwpLiBBCi0JICBiaW5hcnkgcmVnaXN0cnkgZm9ybWF0IHdhcyBhZGRlZCBpbiAyMDA3IChjb21taXQgZWJmMGM5ZDMpIGFuZCBtYWRlIHRoZQotCSAgZGVmYXVsdCBpbiAyMDA4IChjb21taXQgM2YzOWZkN2UpLiBJbiAwLjEwIHlvdSBjb3VsZCBzdGlsbCBjaG9vc2UgYXQKLQkgICJjb25maWd1cmUiIHRpbWUgdG8gdXNlIHRoZSB4bWwgcmVnaXN0cnkgaW5zdGVhZDsgaW4gMS4wIHRoZSBiaW5hcnkKLQkgIHJlZ2lzdHJ5IGlzIHlvdXIgb25seSBjaG9pY2UuCi0JICBUaGlzIGNoYW5nZSB0byBnc3RyZWFtZXItY29tcGxldGlvbiBzaG91bGQgd29yayB3aXRoIGVpdGhlciBmb3JtYXQKLQkgIGJlY2F1c2UgaXQgcGFyc2VzIHRoZSBvdXRwdXQgb2YgImdzdC1pbnNwZWN0IiBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlCi0JICByZWdpc3RyeSBmaWxlIGRpcmVjdGx5LgotCSAgTm90ZSB0aGF0IF9nc3RfbGF1bmNoIG5vIGxvbmdlciBuZWVkcyBhbiBleHBsaWNpdCAicmV0dXJuIDAiIGJlY2F1c2UsCi0JICB1bmxpa2UgdGhlIHByZXZpb3VzIGdyZXAgY29tbWFuZCwgY29tcGdlbiBhbHdheXMgcmV0dXJucyAwICh1bmxlc3MgYQotCSAgZ2VudWluZSBlcnJvciBvY2N1cnMpLgotCSAgSnVzdCBsaWtlIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBieSBEYXZpZCBTY2hsZWVmLCB0aGlzICJvbmx5Ci0JICBjb21wbGV0ZXMgbmFtZXMgb2YgZmVhdHVyZXMsIGJ1dCB0aGF0J3MgOTAlIG9mIHdoYXQgSSB3YW50IGl0IGZvci4iCi0KLTIwMTMtMDQtMjkgMjE6MTE6MzYgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMS4wLnR4dDoKLQkgIHBvcnRpbmctdG8tMS4wLnR4dDogbml0IGNsYXJpZmljYXRpb24KLQkgIEl0IGlzIHRoZSBwcm9jZXNzIGNvbnRleHQgdGhhdCBtYXR0ZXJzLgotCi0yMDEzLTA0LTI5IDEzOjIwOjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBBbHdheXMgbGVhdmUgVFlQRUZJTkQgbW9kZSB3aGVuIHdlJ3JlIHN0b3BwaW5nIHR5cGVmaW5kaW5nCi0KLTIwMTMtMDQtMjkgMTM6MDM6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IFNpbXBsaWZ5IGNvZGUKLQkgIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpbiBUWVBFRklORCBtb2RlLgotCi0yMDEzLTA0LTI5IDEyOjU4OjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBQdXNoIHBlbmRpbmcgZXZlbnRzIGluZGVwZW5kZW50IG9mIHRoZSBleGlzdGVuY2Ugb2YgYSBkb3duc3RyZWFtIGNoYWluIGZ1bmN0aW9uIGFuZCBwZWVyCi0JICBEb3duc3RyZWFtIG1pZ2h0IGNyZWF0ZSBhIHBlZXIgb25seSBhcyByZXN1bHQgb2YgdGhlIGV2ZW50cyBpbiB0aGVvcnkuCi0KLTIwMTMtMDQtMjkgMTI6NTY6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IE9ubHkgcHVzaCBDQVBTIGV2ZW50IG9uY2UgaWYgd2UgZ2V0IG9uZSBmcm9tIHVwc3RyZWFtCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNzg0Ci0KLTIwMTMtMDQtMjkgMTI6NTQ6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IFN0b3AgdHlwZWZpbmRpbmcgaWYgd2UgZ2V0IGEgQ0FQUyBldmVudCBmcm9tIHVwc3RyZWFtCi0KLTIwMTMtMDQtMjkgMTI6NTI6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IEltcHJvdmUgaGFuZGxpbmcgb2YgR0FQIGV2ZW50cwotCSAgVGhlcmUncyBzdGlsbCByb29tIGZvciBpbXByb3ZlbWVudCB0aG91Z2guCi0KLTIwMTMtMDQtMjkgMTI6NDg6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IEZvcndhcmQgZXZlbnRzIHRoYXQgc2hvdWxkIGhhcHBlbiBiZWZvcmUgdGhlIGNhcHMgZXZlbnQgZGlyZWN0bHkKLQkgIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gc3RvcmluZyB0aGVtIGFuZCBzZW5kaW5nIHRoZW0gbGF0ZXIsIGFuZCBkb2luZyBzbyB3b3VsZAotCSAgbGF0ZXIgcmVxdWlyZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGV2ZW50cyB0aGF0IHNob3VsZCBjb21lIGJlZm9yZSBjYXBzIGFuZAotCSAgYWZ0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNzg0Ci0KLTIwMTMtMDQtMjkgMTI6NDg6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IE9ubHkgcHVzaCBwZW5kaW5nIGJ1ZmZlcnMgYW5kIGV2ZW50cyBpZiB3ZSBoYXZlIGNhcHMKLQotMjAxMy0wNC0yOSAxMjozOToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogUmVtb3ZlIGNvZGUgdGhhdCB3b3VsZCBjYXVzZSBjYXBzIHRvIGJlIHNlbnQgdHdpY2UKLQkgIFdoZW5ldmVyIHdlIHNldCB0eXBlZmluZC0+Y2FwcyB3ZSB3aWxsIGFsc28gc2VuZCBhIGNhcHMgZXZlbnQgZG93bnN0cmVhbS4KLQotMjAxMy0wNC0yNyAyMDozMzowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtYWxsb2NhdGlvbi54bWw6Ci0JICBwd2c6IGltcHJvdmUgYWxsb2NhdGlvbiBkb2NzCi0KLTIwMTMtMDQtMjcgMTE6NDY6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBjaGVjazogc2V0IENLX1RJTUVPVVRfTVVMVElQTElFUiBvbiBBUk0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU1OTkKLQotMjAxMy0wNC0yNyAwMDowNTo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6Ci0JICB0eXBlZmluZDogZml4IGNhcHMgbGVhayB3aGVuIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHVyaWRlY29kZWJpbiBhbmQgcGxheWJpbgotCSAgRG9uJ3QgbGVhayBmb3JjZWQgc2luayBjYXBzLgotCi0yMDEzLTA0LTIyIDE4OjA4OjQzIC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYzoKLQkgIGNvbnRyb2xsZXI6IEZpeCBlbGVtZW50LXR5cGUgYW5ub3RhdGlvbnMKLQotMjAxMy0wNC0yNSAxNjozODo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogVHJ5IHRvIG5vdCBwdXNoIHJlYWQtb25seSBidWZmZXJzCi0JICBXZSBzaG91bGQgb25seSBpbmNyZWFzZSB0aGUgcmVmY291bnQgYmVmb3JlIHB1c2hpbmcgaWYgd2UncmUKLQkgIHJlYWxseSBnb2luZyB0byB1c2UgdGhlIGJ1ZmZlciBhZnRlcndhcmRzLgotCi0yMDEzLTA0LTI1IDA3OjE1OjM5ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdHM6IGFkZCBjaGVjayBmb3IgRkxVU0ggcGFkIHByb2JlcwotCi0yMDEzLTA0LTI0IDA4OjQwOjMyICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0cGFkOiBydW4gcHJvYmVzIGZvciBGTFVTSCBldmVudHMgc2VudCB3aXRoIGdzdF9wYWRfc2VuZF9ldmVudAotCSAgTW92ZSBwcm9iZSBoYW5kbGluZyBpbiBnc3RfcGFkX3NlbmRfZXZlbnRfdW5jaGVja2VkIHNvIHRoYXQgcHJvYmVzIGFyZSBydW4gZm9yCi0JICBGTFVTSCBldmVudHMgdG9vLgotCi0yMDEzLTA0LTI0IDE1OjU4OjQ5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JICBuZXRjbG9jazogQWRkIHN1cHBvcnQgZm9yIElQdjYKLQotMjAxMy0wNC0yNCAxMjozMDowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMS4wLnR4dDoKLQkgIHBvcnRpbmctdG8tMS4wLnR4dDogYWRkIHRyb3VibGVzaG9vdGluZyBzZWN0aW9uCi0JICBBZGQgbm90ZSBhYm91dCAiY2Fubm90IHJlZ2lzdGVyIGV4aXN0aW5nIHR5cGUgYEdzdE9iamVjdCciIHdhcm5pbmcuCi0KLTIwMTMtMDQtMjMgMTE6NDc6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBPbmx5IGluZmVyIFRTIGlmIFBUUyBpbnRlcnBvbGF0aW9uIGlzIGVuYWJsZWQKLQkgIE90aGVyd2lzZSB0aGlzIGlzIGJyZWFraW5nIHRpbWVzdGFtcHMgb2YgZm9ybWF0cyB0aGF0Ci0JICBuZWVkIHJlb3JkZXJpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk3NjYyCi0KLTIwMTMtMDQtMjMgMTE6MTc6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogbm90aWZ5IGNhcHMgcHJvcGVydHkgb24gTlVMTCBhcyB3ZWxsCi0JICBBbHNvIG5vdGlmeSB0aGUgY2FwcyBwcm9wZXJ0eSB3aGVuIGl0IGNoYW5nZXMgdG8gTlVMTAotCi0yMDEzLTA0LTIzIDExOjE2OjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGNsYXJpZnkgbG9ja2luZwotCi0yMDEzLTA0LTIyIDIzOjUwOjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBNQUlOVEFJTkVSUzoKLQkqIFJFQURNRToKLQkqIFJFQURNRS5zdGF0aWMtbGlua2luZzoKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAzY2IzZDNjIHRvIDVlZGNkODUKLQotMjAxMy0wNC0xOSAxNTowMToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSogZG9jcy9kZXNpZ24vcGFydC1jb250ZXh0LnR4dDoKLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JICBwYXJ0LWNvbnRleHQ6IFdyaXRlIHNvbWUgZGVzaWduIGRvY3VtZW50YXRpb24gYWJvdXQgR3N0Q29udGV4dAotCi0yMDEzLTA0LTE5IDEzOjIxOjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jYXBzLnR4dDoKLQkgIHBhcnQtY2FwczogQWRkIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FwcyBmZWF0dXJlcywgY2FwcyBzZW1hbnRpY3MgYW5kIGhvdyB0byB1c2UgdGhlbQotCi0yMDEzLTA0LTE5IDExOjIzOjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jYXBzLnR4dDoKLQkqIGdzdC9nc3RjYXBzZmVhdHVyZXMuYzoKLQkgIGNhcHNmZWF0dXJlczogQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgQU5ZIEdzdENhcHNGZWF0dXJlcwotCi0yMDEzLTA0LTE5IDEwOjI0OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IERvbid0IHNldCBsYXN0X3JlbmRlcl90aW1lIGlmIHdlJ3JlIGNoZWNraW5nIGZvciBhIGxhdGUgYnVmZmVyIGJlZm9yZSA6OnByZXBhcmUoKQotCSAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGJ1ZmZlciBwZXIgc2Vjb25kIGlzIHJlbmRlcmVkIGlmIGJ1ZmZlcnMKLQkgIGFyZSBkcm9wcGVkIGJlZm9yZSA6OnByZXBhcmUuIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIGF0IGxlYXN0IG9uZSBidWZmZXIgcGVyCi0JICBzZWNvbmQgd291bGRuJ3QgYmUgdG9vIGxhdGUgYmVmb3JlIDo6cHJlcGFyZSBhbnltb3JlIGJ1dCB3b3VsZCBiZSBkcm9wcGVkCi0JICBiZWZvcmUgOjpyZW5kZXIgYmVjYXVzZSBvZiBsYXN0X3JlbmRlcl90aW1lIGJlaW5nIHNldCBiZWZvcmUgOjpwcmVwYXJlCi0JICBhbHJlYWR5LgotCi0yMDEzLTAyLTA4IDAzOjU3OjQ0IC0wMjAwICBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyAoYW5kcnVua28pIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBBZGQgY29tcGFyZSBmdW5jdGlvbiBmb3IgY2FwcwotCi0yMDEzLTAxLTE1IDE2OjU3OjIwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgZGF0YXF1ZXVlOiBhZGQgZ3N0X2RhdGFfcXVldWVfcGVlawotCSAgVGhpcyBmdW5jdGlvbiB3b3JrcyBqdXN0IGxpa2UgZ3N0X2RhdGFfcXVldWVfcG9wLCBidXQgaXQgZG9lc24ndAotCSAgcmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgcXVldWUuCi0JICBVc2VmdWwgd2hlbiBpbnNwZWN0aW5nIG11bHRpcGxlIEdzdERhdGFRdWV1ZXMgdG8gZGVjaWRlIGZyb20gd2hpY2gKLQkgIHRvIHBvcCB0aGUgZWxlbWVudCBmcm9tLgotCSAgQWRkOiBnc3RfZGF0YV9xdWV1ZV9wZWVrCi0KLTIwMTMtMDQtMTggMTA6MTQ6MDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSAgdGVzdHM6IGlnbm9yZSBuZXcgdGVzdCBiaW5hcnkKLQotMjAxMy0wNC0xOCAxMDoxMzozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IHVwZGF0ZSBmb3IgbGF0ZXN0IGNvbnRleHQgQVBJIGNoYW5nZXMKLQotMjAxMy0wNC0xOCAxMDoxNzo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y29udGV4dC5jOgotCSogZ3N0L2dzdGNvbnRleHQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3Rjb250ZXh0LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNvbnRleHQ6IEFkZCBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoKSBhbmQgbGV0IGdldF9zdHJ1Y3R1cmUoKSByZXR1cm4gY29uc3QgYWdhaW4KLQotMjAxMy0wNC0xOCAwMDo0NDozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3ByaW50Zi9wcmludGYtcGFyc2UuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6Ci0JICBwcmludGY6IGZpeCBoYW5kbGluZyBvZiBvbGQgcHJpbnRmIGV4dGVuc2lvbiBzcGVjaWZpZXJzIGZvciBBQkkgY29tcGF0aWJpbGl0eQotCSAgRml4ZXMgYWJvcnQgd2hlbiB0aGUgb2xkIHNwZWNpZmllcnMgYXJlIHVzZWQuIEZpeCB1cCB0aGUgY29udmVyc2lvbgotCSAgc3BlY2lmaWVyLCBpdCB3b3VsZCBnZXQgb3ZlcndyaXR0ZW4gd2l0aCAnYycgYmVsb3cgdG8gdGhlIGV4dGVuc2lvbgotCSAgZm9ybWF0IGNoYXIsIHdoaWNoIHRoZW4gbGF0ZXIgaXMgdW5oYW5kbGVkLCBsZWFkaW5nIHRvIHRoZSBhYm9ydC4KLQkgIEFsc28gZml4IHVwIGFuZCBlbmFibGUgdW5pdCB0ZXN0IGZvciB0aGlzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvcHJvY2Vzc19idWcuY2dpCi0KLTIwMTMtMDQtMTggMDA6Mjg6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3Igb2xkIHByaW50ZiBleHRlbnNpb24gc3BlY2lmaWVycwotCSAgVG8gbWFrZSBzdXJlIHdlIG1haW50YWluIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZAotCSAgc3BlY2lmaWVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgyNDIKLQotMjAxMy0wNC0xOCAwMDoxOToyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBydW4gc2tpcHBlZCB0ZXN0cyBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZCB2aWEgR1NUX0NIRUNLUwotCSAgSWYgYSB0ZXN0IHRoYXQncyBkaXNhYmxlZCB3aXRoIHRjYXNlX3NraXBfYnJva2VuX3Rlc3QoKSBpcyBsaXN0ZWQKLQkgIGluIHRoZSBHU1RfQ0hFQ0tTIGVudmlyb25tZW50IHZhcmlhYmxlLCBydW4gaXQgYW55d2F5LgotCi0yMDEzLTA0LTE3IDEzOjQ3OjM1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogQWRkIEdzdENvbnRleHQgc3VwcG9ydAotCSAgZ3N0LWxhdW5jaCB3aWxsIGNvbGxlY3QgYWxsIHRoZSBjb250ZXh0cyBmcm9tIHRoZSBwaXBlbGluZSBlbGVtZW50cwotCSAgYW5kIHVwZGF0ZSB0aGUgb3ZlcmFsbCBwaXBlbGluZSBjb250ZXh0IHdpdGggaXQuCi0KLTIwMTMtMDQtMTcgMTI6NDQ6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3Rjb250ZXh0LmM6Ci0JICBjb250ZXh0OiBBZGQgdW5pdCB0ZXN0IGZvciBHc3RDb250ZXh0Ci0KLTIwMTMtMDQtMTcgMTI6MTc6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y29udGV4dC5jOgotCSogZ3N0L2dzdGNvbnRleHQuaDoKLQkgIGNvbnRleHQ6IFJldHVybiBhIG5vbi1jb25zdCBHc3RTdHJ1Y3R1cmUgdG8gbWFrZSBjb2RlIHNpbXBsZXIgYW5kIHVwZGF0ZSBkb2NzCi0KLTIwMTMtMDMtMjkgMTQ6NTY6NTcgKzAxMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQ6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkgIHF1ZXJ5OiBuZXcgX0JBTkRXSURUSF9MSU1JVEVEIGZsYWcKLQkgIFNvdXJjZSBlbGVtZW50cyB3aXRoIGxpbWl0ZWQgYmFuZHdpZHRoIGNhcGFiaWxpdGllcyBhbmQgc3VwcG9ydGluZwotCSAgYnVmZmVyaW5nIGZvciBkb3duc3RyZWFtIGVsZW1lbnRzIHNob3VsZCBzZXQgdGhpcyBmbGFnIHdoZW4gYW5zd2VyaW5nCi0JICBhIHNjaGVkdWxpbmcgcXVlcnkuIFRoaXMgaXMgdXNlZnVsIGZvciB0aGUgb24tZGlzayBidWZmZXJpbmcgc2NlbmFyaW8KLQkgIG9mIHVyaWRlY29kZWJpbiB0byBhdm9pZCBjaGVja2luZyB0aGUgVVJJIHByb3RvY29sIGFnYWluc3QgYSBsaXN0IG9mCi0JICBoYXJkY29kZWQgcHJvdG9jb2xzLgotCSAgQnVnIDY5MzQ4NAotCi0yMDEzLTA0LTE2IDA5OjU1OjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBkb2NzOiBmaXggbWlzc2luZyBmbGFjZGVjIGluIHBvcnRpbmctdG8tMS4wIHBpcGVsaW5lIGV4YW1wbGUKLQotMjAxMy0wNC0xNiAwOTowMzo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0xLjAudHh0OgotCSAgZG9jczogYWRkIG5vdGUgYWJvdXQgZGVjb2RlcnMgYW5kIHBhcnNlcnMgdG8gcG9ydGluZy10by0xLjAgZG9jCi0KLTIwMTItMTAtMjQgMTE6NTg6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSAgZ3N0OiBBZGQgYmV0dGVyIHN1cHBvcnQgZm9yIHN0YXRpYyBwbHVnaW5zCi0JICBBUEk6IEdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkUoKQotCSAgQVBJOiBHU1RfUExVR0lOX1NUQVRJQ19SRUdJU1RFUigpCi0JICBCYXNlZCBvbiBhIHBhdGNoIGJ5IEjDpXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+LgotCSAgVGhpcyBub3cgYWxsb3dzIEdTVF9QTFVHSU5fREVGSU5FKCkgdG8gY3JlYXRlIGEgc3RhdGljIHBsdWdpbiBpZgotCSAgR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUMgaXMgZGVmaW5lZC4gVGhlIHJlc3VsdGluZyBwbHVnaW4gY2FuIGJlCi0JICBzdGF0aWNhbGx5IGxpbmtlZCBvciBkeW5hbWljYWxseSBsaW5rZWQgZHVyaW5nIGNvbXBpbGF0aW9uIGJ1dAotCSAgY2FuJ3QgYmUgZHluYW1pY2FsbHkgbG9hZGVkIGR1cmluZyBydW50aW1lLgotCSAgQWxzbyBhZGRzIEdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkUoKSBhbmQgR1NUX1BMVUdJTl9TVEFUSUNfUkVHSVNURVIoKSwKLQkgIHdoaWNoIGFsbG93cyB0byByZWdpc3RlciBhIHN0YXRpYyBsaW5rZWQgcGx1Z2luIGVhc2lseS4KLQkgIEl0IGlzIHN0aWxsIHJlcXVpcmVkIHRvIG1hbnVhbGx5IHJlZ2lzdGVyIGV2ZXJ5IHNpbmdsZSBzdGF0aWNhbGx5IGxpbmtlZAotCSAgcGx1Z2luIGZyb20gaW5zaWRlIHRoZSBhcHBsaWNhdGlvbiBhcyB0aGlzIGNhbid0IGJlIGF1dG9tYXRlZCBpbiBhIHBvcnRhYmxlCi0JICB3YXkuCi0JICBBIG5ldyBjb25maWd1cmUgcGFyYW1ldGVyIC0tZW5hYmxlLXN0YXRpYy1wbHVnaW5zIHdhcyBhZGRlZCB0aGF0IGFsbG93cwotCSAgdG8gYnVpbGQgYWxsIHBsdWdpbnMgd2UgYnVpbGQgaGVyZSBhcyBzdGF0aWMgcGx1Z2lucy4KLQkgIEZpeGVzIGJ1ZyAjNjY3MzA1LgotCi0yMDEzLTA0LTEyIDEzOjUwOjM5ICsxMjAwICBEb3VnbGFzIEJhZ25hbGwgPGRvdWdsYXNAcGFyYWRpc2UubmV0Lm56PgotCi0JKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKLQkgIG1hbnVhbDogUGF0Y2ggbWFudWFsIHRvIHJlZmVyIHRvIHBvcnRpbmcgZ3VpZGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTc4NDUKLQotMjAxMy0wNC0xMyAxOTo0MzoxMCArMDMwMCAgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5AaW50ZWwuY29tPgotCi0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgcGx1Z2luZmVhdHVyZTogRml4IHRoZSBHc3RQbHVnaW5GZWF0dXJlIG5hbWUgY29tcGFyaXNvbi4KLQkgIFRoZSBnc3RfcGx1Z2luX2ZlYXR1cmVfcmFua19jb21wYXJlX2Z1bmMoKSBzaG91bGQgcmV0dXJuCi0JICBuZWdhdGl2ZSB2YWx1ZSwgaWYgdGhlIHJhbmsgb2YgYm90aCBQbHVnaW5GZWF0dXJlcyBhcmUgZXF1YWwgYW5kCi0JICB0aGUgbmFtZSBvZiBmaXJzdCBQbHVnaW5GZWF0dXJlIGNvbWVzIGJlZm9yZSB0aGUgc2Vjb25kIG9uZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTc5OTAKLQotMjAxMy0wNC0xNCAxNzo1NDoyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDI3MzY1OTIgdG8gM2NiM2QzYwotCi0yMDEzLTA0LTE0IDE3OjI1OjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGFlZDg3YWUgdG8gMjczNjU5MgotCi0yMDEzLTA0LTE0IDExOjMzOjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvcHJpbnRmL3ByaW50Zi5jOgotCSogZ3N0L3ByaW50Zi9wcmludGYuaDoKLQkgIHByaW50ZjogZGlzYWJsZSBzb21lIHVudXNlZCBwcmludGYgdmFyaWFudHMKLQotMjAxMy0wNC0xNCAxMToyMzoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3ByaW50Zi9nc3QtcHJpbnRmLmg6Ci0JICBwcmludGY6IHVzZSBzcHJpbnRmKCkgdG8gd29yayBhcm91bmQgZ2xpYmMgY29tcGxhaW5pbmcgYWJvdXQgJW4gaW4gYSB3cml0YWJsZSBmb3JtYXQgc3RyaW5nCi0JICBEb24ndCB1c2Ugc25wcmludGYoKSwgYnV0IHVzZSBzcHJpbnRmIGluc3RlYWQgYW5kIGRvIG91ciBvd24KLQkgIGxlbmd0aCBjYWxjdWxhdGlvbnMsIGJlY2F1c2UgZ2xpYmMgbWF5IGNvbXBsYWluIGFib3V0IHVzIHBhc3NpbmcKLQkgICVuIGluIGEgZm9ybWF0IHN0cmluZyBpZiB0aGUgc3RyaW5nIGlzIGluIHdyaXRhYmxlIG1lbW9yeSwgYW5kCi0JICBoZXJlIHRoZSBmb3JtYXQgc3RyaW5nIGlzIGFsd2F5cyBpbiB3cml0YWJsZSBtZW1vcnkgc2luY2Ugd2UKLQkgIGNvbnN0cnVjdCBpdCBvbiB0aGUgZmx5LiBUaGlzIGhhcHBlbnMgaWYgZ2xpYmMgaGFzIGJlZW4gY29tcGlsZWQKLQkgIHdpdGggX0ZPUlRJRllfU09VUkNFPTIsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBjYXNlIG9uIHNvbWUKLQkgIGRpc3Ryb3Mvc3lzdGVtcykuIE9uIHRoZSB1cHNpZGUsIHdlIG5vdyB1c2UgdGhlIHNwcmludGYgY29kZSBwYXRoCi0JICBvbiBhbGwgc3lzdGVtcyB3aGljaCBzaG91bGQgYmUgYmV0dGVyIGZyb20gYSBtYWludGVuYW5jZSBwb2ludAotCSAgb2Ygdmlldy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTc5NzAKLQotMjAxMy0wNC0xMyAxMjoxODoyOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBvbGwuYzoKLQkgIHRlc3RzOiBza2lwIGFsbCBHc3RQb2xsIHRlc3RzIG9uIFdpbmRvd3MKLQkgIEFzIHRoZXkgZG9uJ3Qgd29yayB0aGVyZSwgYW5kIGl0J3Mgbm9uLXRyaXZpYWwgdG8gZml4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NzYwOQotCi0yMDEzLTA0LTEzIDEyOjAwOjEyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IG9ubHkgYWRkIGEgJyonIGZvciBub24tJ2dwb2ludGVyJyBwb2ludGVycwotCSAgU3BvdHRlZCBieSBKb3NlIEFudG9uaW8gU2FudG9zIENhZGVuYS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTc3OTEKLQotMjAxMy0wNC0xMiAxNDo0ODoyOSArMDIwMCAgR3dlbm9sZSBCZWF1Y2hlc25lIDxnd2Vub2xlLmJlYXVjaGVzbmVAaW50ZWwuY29tPgotCi0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICBwbHVnaW46IGZpeCBuYW1lIGV4cGFuc2lvbiBmb3IgR1NUX1BMVUdJTl9ERUZJTkUgbWFjcm8KLQkgIE1ha2UgR1NUX1BMVUdJTl9ERUZJTkUgdXNlIEdfU1RSSU5HSUZZKCkgdG8gY29udmVydCB0aGUgbmFtZSBhcmd1bWVudAotCSAgaW50byBhIG1lYW5pbmdmdWwgc3RyaW5nLiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgaXMgdGhhdCBgbmFtZScgY2FuIGJlCi0JICBleHBhbmRlZCBmcm9tIG90aGVyIG1hY3JvcyBkZWZpbmVkIGluIHRoZSBwbHVnLWluIGVsZW1lbnQuCi0JICBTaWduZWQtb2ZmLWJ5OiBHd2Vub2xlIEJlYXVjaGVzbmUgPGd3ZW5vbGUuYmVhdWNoZXNuZUBpbnRlbC5jb20+Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3ODcyCi0KLTIwMTMtMDQtMTMgMTE6MzU6NDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogYWRkIG5ldyB0cmFuc2xhdGFibGUgc3RyaW5ncwotCi0yMDEzLTA0LTEyIDIzOjU4OjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSAgcHJpbnRmOiBkb24ndCBidWlsZCBpZiBkZWJ1Z2dpbmcgc3Vic3lzdGVtIHdhcyBkaXNhYmxlZAotCi0yMDEzLTA0LTEwIDExOjUxOjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvcHJpbnRmL01ha2VmaWxlLmFtOgotCSogZ3N0L3ByaW50Zi9nc3QtcHJpbnRmLmg6Ci0JICBwcmludGY6IGRlYWwgd2l0aCBzb21lIG9mIHRoZSBIQVZFX0ZPTyB1c2VkIGluIHRoZSBwcmludGYgY29kZQotCSAgUHJvYmFibHkgbmVlZHMgc29tZSBtb3JlIHdvcmsgZm9yIE1TVkMuCi0KLTIwMTMtMDQtMDggMTk6NDI6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcHJpbnRmL1JFQURNRToKLQkqIGdzdC9wcmludGYvdmFzbnByaW50Zi5jOgotCSAgcHJpbnRmOiBmaXggYWxsb2NhIHVzZSBmb3Igd2luZG93cyB3aXRoIG1pbmd3MzIKLQkgIERvbid0IHVzZSBqdXN0IEdMSUJfSEFWRV9BTExPQ0FfSCB0byBjaGVjayBpZiBhbGxvY2EgaXMgYXZhaWxhYmxlLAotCSAgdGhhdCdzIGp1c3QgZm9yIHRoZSBoZWFkZXIuIEdMaWIgbWF5IGRlZmluZSBhbGxvY2EgZm9yIHVzIG90aGVyd2lzZQotCSAgdG9vIGlycmVzcGVjdGl2ZSBvZiBHTElCX0hBVkVfQUxMT0NBX0guCi0JICBGaXhlcyBjb21waWxlciB3YXJuaW5nIHdpdGggbWluZ3czMjoKLQkgIGdzdC9wcmludGYvdmFzbnByaW50Zi5jOjczOjA6IHdhcm5pbmc6ICJhbGxvY2EiIHJlZGVmaW5lZAotCi0yMDEzLTA0LTA3IDIwOjExOjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvcHJpbnRmL01ha2VmaWxlLmFtOgotCSogZ3N0L3ByaW50Zi92YXNucHJpbnRmLmM6Ci0JICBwcmludGY6IGVuYWJsZSBhbmQgZml4IGNvbXBpbGVyIHdhcm5pbmdzCi0JICBCdXQgc3VwcHJlc3MgLVdmb3JtYXQtbm9ubGl0ZXJhbCB3YXJuaW5ncyBzaW5jZSBzcHJpbnRmCi0JICBpcyB1c2VkIHdpdGggYSBydW50aW1lLWdlbmVyYXRlZCBmb3JtYXQgc3RyaW5nIGluIG91cgotCSAgdmFzbnByaW50ZiBpbXBsZW1lbnRhdGlvbi4KLQotMjAxMy0wNC0wNyAxODoyMTowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3ByaW50Zi9wcmludGYtcGFyc2UuYzoKLQkqIGdzdC9wcmludGYvdmFzbnByaW50Zi5jOgotCSogZ3N0L3ByaW50Zi92YXNucHJpbnRmLmg6Ci0JICBwcmludGY6IGZpeCB1cCBkb2RneSB1c2Ugb2YgI2lmIEhBVkVfRk9PIGFuZCAjaWYgIUhBVkVfRk9PCi0JICBTaG91bGQgdXNlICNpZmRlZiBhbmQgI2lmbmRlZi4KLQotMjAxMy0wNC0wNyAxNzozNjoyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3ByaW50Zi9NYWtlZmlsZS5hbToKLQkgIHByaW50ZjogbWFyayBpbnRlcm5hbCBmdW5jdGlvbnMgYXMgaW50ZXJuYWwKLQotMjAxMy0wNC0wNyAxNzoyOTowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3ByaW50Zi9wcmludGYtcGFyc2UuYzoKLQkgIHByaW50Zjogc2tpcCBwb2ludGVyIGV4dGVuc2lvbiBzaWduaWZpZXIgY2hhcnMgYWZ0ZXIgJXAKLQkgIFNvIHRoZXkgZG9uJ3QgZ2V0IHByaW50ZWQgYWZ0ZXIgdGhlIHNlcmlhbGlzZWQgcG9pbnRlciBzdHJpbmcuCi0KLTIwMTMtMDQtMDcgMTc6MjE6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9wcmludGYvdmFzbnByaW50Zi5jOgotCSAgcHJpbnRmOiBkb24ndCBsZWFrIHNlcmlhbGlzZWQgcG9pbnRlciBleHRlbnNpb24gc3RyaW5ncwotCi0yMDEzLTA0LTA3IDE3OjAyOjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvcHJpbnRmL3ByaW50Zi1wYXJzZS5jOgotCSAgcHJpbnRmOiBoYW5kbGUgb2xkIEdTVF9QVFJfRk9STUFUICVQIGFuZCBHU1RfU0VHTUVOVF9GT1JNQVQgJVEgZGVmaW5lcyB0b28KLQkgIEZvciBiaW5hcnkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCi0KLTIwMTMtMDQtMDcgMTY6NDE6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9wcmludGYvcHJpbnRmLWFyZ3MuYzoKLQkqIGdzdC9wcmludGYvcHJpbnRmLWFyZ3MuaDoKLQkqIGdzdC9wcmludGYvcHJpbnRmLXBhcnNlLmM6Ci0JKiBnc3QvcHJpbnRmL3ByaW50Zi1wYXJzZS5oOgotCSogZ3N0L3ByaW50Zi92YXNucHJpbnRmLmM6Ci0JICBwcmludGY6IG1ha2UgcHJpbnRmIHBhcnNlciByZWNvZ25pc2Ugb3VyIHBvaW50ZXIgZXh0ZW5zaW9uIGZvcm1hdAotCSAgYW5kIGNhbGwgdGhlIGhvb2sgdG8gZ2V0IGEgc3RyaW5nIGZvciB0aGUgcG9pbnRlciBpbnN0ZWFkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMzA4MQotCi0yMDEzLTAzLTMwIDE4OjI4OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIGdzdC9wcmludGYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcHJpbnRmL1JFQURNRToKLQkqIGdzdC9wcmludGYvcHJpbnRmLWV4dGVuc2lvbi5jOgotCSogZ3N0L3ByaW50Zi9wcmludGYtZXh0ZW5zaW9uLmg6Ci0JICBwcmludGY6IGFkZCBpbmZyYXN0cnVjdHVyZSBmb3IgcG9pbnRlciBleHRlbnNpb25zIGhvb2sKLQkgIERvZXMgbm90IGRvIGFueXRoaW5nIHlldC4gT24gYSBzaWRlbm90ZSwgd2UgY2FuJ3QganVzdCB1c2UKLQkgICVwXDAwMSBvciBzbyB0byBzaWduYWwgdGhlIGV4dGVuc2lvbiBiZWNhdXNlIGctaSBjb21wbGFpbnMKLQkgIGFib3V0IGFuIGludmFsaWQgYXNjaWkgY2hhcmFjdGVyIHRoZW4sIHNvIGhhdmUgdG8gcmVzb3J0IHRvCi0JICBzb21ldGhpbmcgbW9yZSBlbGFib3JhdGUsIHN1Y2ggYXMgJXBcYUEgZXRjLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMzA4MQotCi0yMDEzLTAzLTMwIDE3OjIwOjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGluZm86IHVzZSBuZXcgaW50ZXJuYWwgcHJpbnRmIGZvciBkZWJ1ZyBtZXNzYWdlIHByaW50aW5nCi0JICBhbmQgcmVtb3ZlIGFsbCB0aGUgcHJpbnRmIGV4dGVuc2lvbi9zcGVjaWZpZXIgc3R1ZmYgZm9yCi0JICB0aGUgc3lzdGVtIHByaW50Zi4gTmV4dCB3ZSBuZWVkIHRvIGFkZCBiYWNrIHRoZSBjdXN0b20KLQkgIHNwZWNpZmllcnMgdG8gb3VyIG93biBwcmludGYgaW1wbGVtZW50YXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEzMDgxCi0KLTIwMTMtMDMtMzAgMTU6MTM6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9wcmludGYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcHJpbnRmL1JFQURNRToKLQkqIGdzdC9wcmludGYvYXNucHJpbnRmLmM6Ci0JKiBnc3QvcHJpbnRmL2dzdC1wcmludGYuaDoKLQkqIGdzdC9wcmludGYvcHJpbnRmLWFyZ3MuYzoKLQkqIGdzdC9wcmludGYvcHJpbnRmLWFyZ3MuaDoKLQkqIGdzdC9wcmludGYvcHJpbnRmLXBhcnNlLmM6Ci0JKiBnc3QvcHJpbnRmL3ByaW50Zi1wYXJzZS5oOgotCSogZ3N0L3ByaW50Zi9wcmludGYuYzoKLQkqIGdzdC9wcmludGYvcHJpbnRmLmg6Ci0JKiBnc3QvcHJpbnRmL3Zhc25wcmludGYuYzoKLQkqIGdzdC9wcmludGYvdmFzbnByaW50Zi5oOgotCSAgcHJpbnRmOiBhZGQgb3VyIG93biBwcmludGYgaW1wbGVtZW50YXRpb24gZm9yIGRlYnVnIGxvZ2dpbmcKLQkgIFdlIHdpbGwgYWRkIHN1cHBvcnQgZm9yIG91ciBvd24gcHJpbnRmIG1vZGlmaWVycywgc28gd2UgY2FuCi0JICBnZXQgbmljZSBkZWJ1ZyBsb2cgb3V0cHV0IG9uIGFsbCBvcGVyYXRpbmcgc3lzdGVtcyBpcnJlc3BlY3RpdmUKLQkgIG9mIHRoZSBzcGVjaWZpYyBsaWJjIHZlcnNpb24gdXNlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTMwODEKLQotMjAxMy0wNC0xMiAxNjoxMzoxNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ2xpc3Q6IGF2b2lkIHRyaWdnZXJpbmcgYW4gYXNzZXJ0aW9uCi0JICBXaGVuIGRlc2VyaWFsaXphdGlvbiBvZiB0aGUgc3RydWN0dXJlIGZhaWxzLCByZXR1cm4gYSBOVUxMIHRhZ2xpc3QgaW5zdGVhZCBvZgotCSAgYXNzZXJ0aW5nLgotCi0yMDEzLTA0LTExIDE0OjU0OjMyICswMjAwICBKb3NlIEFudG9uaW8gU2FudG9zIENhZGVuYXMgPHNhbnRvc2NhZGVuYXNAZ21haWwuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IGFkZCBwb2ludGVyIG1hcmsgdG8gc2lnbmFsIGFuZCBhY3Rpb24gcmV0dXJuIHR5cGVzIHRoYXQgYXJlIHBvaW50ZXJzCi0JICBXaGVuIHRoZSByZXR1cm4gdHlwZSBvZiBhIHNpZ25hbCBvciBhY3Rpb24gaXMgYSBwb2ludGVyLCBpdAotCSAgc2hvdWxkIGhhdmUgYW4gYXN0ZXJpc2sgdG8gbWFyayBpdCBhcyBzdWNoLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5Nzc5MQotCi0yMDEzLTA0LTExIDIyOjMyOjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBkb2NzOiBkb2N1bWVudCB0eXBlIGNoYW5nZSBvZiBwbGF5YmluJ3MgY29ubmVjdGlvbi1zcGVlZCBwcm9wZXJ0eSBpbiBwb3J0aW5nIGRvY3MKLQotMjAxMy0wNC0xMSAxNDozMTowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXI6IGFkZCBfZ3N0X21heF9tZW1vcnkoKSBmdW5jdGlvbgotCSAgQWRkIHRoZSBhIGZ1bmN0aW9uIHRvIHF1ZXJ5IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgYmxvY2tzIHRoYXQgY2FuIGJlCi0JICBhZGRlZCB0byBhIGJ1ZmZlci4gQWxzbyBpbXByb3ZlIHRoZSBkb2NzIGZvciBfaW5zZXJ0X21lbW9yeSgpLgotCi0yMDEzLTA0LTExIDE0OjA0OjQ1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JICBuZXR0aW1lcHJvdmlkZXI6IG5vdGlmeSBvZiBjaGFuZ2VkIGJvdW5kIGFkZHJlc3MKLQkgIE5vdGlmeSB3aGVuIHRoZSBib3VuZCBhZGRyZXNzIGlzIGtub3duLCBqdXN0IGxpa2UgdGhlIHBvcnQuCi0KLTIwMTMtMDQtMTEgMTM6NTU6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGxhdW5jaDogaGFuZGxlIFBST0dSRVNTIG1lc3NhZ2VzCi0JICBXYWl0IGZvciBhbGwgUFJPR1JFU1MgbWVzc2FnZXMgKGlmIGFueSkgdG8gY29tcGxldGUgYmVmb3JlIGdvaW5nIHRvIHRoZSBQTEFZSU5HCi0JICBzdGF0ZS4gVGhpcyBpcyB0aGUgb25seSB3YXkgd2UgY2FuIHdhaXQgZm9yIGxpdmUgZWxlbWVudHMgdG8gY29tcGxldGUgdGhlaXIKLQkgIG9wZXJhdGlvbnMuCi0JICBUaGlzIGlzIGludGVyZXN0aW5nIGZvciBlbGVtZW50cyBsaWtlIHJ0c3BzcmMgdGhhdCBkbyBzb21lIGFzeW5jaHJvbm91cyBuZXR3b3JrCi0JICByZXF1ZXN0cyBhcyBwYXJ0IG9mIGdvaW5nIHRvIHRoZSBQQVVTRUQgc3RhdGUuIEl0IGNvdWxkIGJlIHBvc3NpYmxlIHRoYXQgaXQsIGZvcgotCSAgZXhhbXBsZSwgcHJvdmlkZXMgYSBjbG9jayBhbmQgdGhlbiB3ZSB3b3VsZCBsaWtlIHRvIHdhaXQgdW50aWwgaXQgY29tcGxldGVzCi0JICBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlIHByb3ZpZGVkIGNsb2NrIHdoZW4gZ29pbmcgdG8gUExBWUlORy4KLQotMjAxMy0wNC0xMSAxNTowNTowOCArMTIwMCAgRG91Z2xhcyBCYWduYWxsIDxkb3VnbGFzQHBhcmFkaXNlLm5ldC5uej4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtbmVnb3RpYXRpb24ueG1sOgotCSAgVG9nZ2xlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGluIFJFQ09ORklHVVJFIHBhcmFncmFwaC4KLQotMjAxMy0wNC0xMSAxMDoxMToyNSArMTIwMCAgRG91Z2xhcyBCYWduYWxsIDxkb3VnbGFzQHBhcmFkaXNlLm5ldC5uej4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgR3N0Q29sbGVjdFBhZHMgZG9jdW1lbnRhdGlvbjogZ3N0X2NvbGxlY3RfcGFkc19yZWFkIGlzIGdvbmUuCi0KLTIwMTMtMDQtMTAgMjE6MjQ6MzggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogZml4IHRoZSBwcmVjb25kaXRpb24gZm9yIGdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oKQotCSAgVXNlIHRoZSByaWdodCB2YXJpYWJsZSBhbmQgaW52ZXJ0IHRoZSB0ZXN0LiBUaGUgcHJlY29uZGl0aW9uIHNob3VsZCBjYXRjaAotCSAgc29tZW9uZSBjYWxsaW5nIHRvIG9uY2UgdG9vIG9mdGVuLgotCi0yMDEzLTA0LTA5IDE5OjM3OjA2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmM6Ci0JICBjYXBzZmVhdHVyZXM6IEluaXQgZGVidWcgY2F0ZWdvcnkgYmVmb3JlIGV2ZXIgdXNpbmcgaXQKLQotMjAxMy0wNC0wOSAyMDo1OTozNiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDA0YzdhMWUgdG8gYWVkODdhZQotCi0yMDEzLTA0LTAzIDIxOjMyOjU0ICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZG9jcy9tYW51YWxzLm1hazoKLQkgIFVzZSB4bHN0cHJvYyBpbnN0ZWFkIG9mIGRvY2Jvb2syaHRtbAotCi0yMDEzLTA0LTA5IDEwOjE3OjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIG5ldGNsaWVudGNsb2NrOiBiaW5kIHNvY2tldCBiZWZvcmUgcXVlcnlpbmcgbG9jYWwgYWRkcmVzcwotCSAgRmFpbHMgb24gd2luZG93cyBvdGhlcndpc2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3NjA4Ci0KLTIwMTMtMDQtMDggMTM6MTQ6MzUgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEFsc28gY2hlY2sgZm9yIGNsb2NrX2dldHRpbWUgaW4gbGlicHRocmVhZAotCSAgbGlid2lucHRocmVhZHMgcHJvdmlkZXMgUE9TSVggdGltZSBBUEkuCi0JICBJdCBhbHNvIHByb3ZpZGVzIGxpYnB0aHJlYWQgYWxpYXMgZm9yIGl0c2VsZiwgZm9yIGNvbXBhdGliaWxpdHksIHNvIHRoYXQKLQkgIGlzIHdoYXQgd2Ugd2lsbCBsaW5rIHdpdGguCi0JICBGaXhlcyAjNjk3NTUwCi0KLTIwMTMtMDQtMDggMTU6MzA6MDcgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgY2xvY2s6IERvIHVzZSBIQVZFX0NMT0NLX0dFVFRJTUUKLQkgIEZpeGVzICM2OTc1NDkKLQotMjAxMy0wNC0wOCAxNDo0MjoxNSArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4NncuaDoKLQkgIGxpYnNhYmk6IFNwZWNpYWwgc3RydWN0IHNpemUgdmFsdWVzIGZvciBXMzIKLQkgIFRoZXNlIGFjY291bnQgZm9yIGJvdGggcG9zc2libGUgdHlwZSBzaXplIG1pc21hdGNoIEFORCAtbW1zLWJpdGZpZWxkcwotCSAgcGFja2luZy4gU2l6ZXMgYXJlIHRha2VuIGZyb20gYW4gaTY4Ni13NjQtbWluZ3czMi1idWlsdCBHU3RyZWFtZXIsCi0JICBnY2MgNC44LjAsIG1pbmd3LXc2NCBzdm4tcjU2ODUuCi0JICBGaXhlcyAjNjk3NTUxCi0KLTIwMTMtMDQtMDkgMDk6MjI6MzkgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB0ZXN0czogZml4IEdzdFBhZCB0ZXN0IG9uIHdpbmRvd3MgYW5kIGluIENLX0ZPUks9bm8gbW9kZQotCSAgTmVlZCB0byBjbGVhciBidWZmZXIgbGlzdHMgYXQgdGhlIGVuZCBvZiBlYWNoIHRlc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3NjEwCi0KLTIwMTMtMDQtMDYgMTY6MDk6NTQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBGaXggc3BhY2UgaW4gZmF1bHQgbWVzc2FnZQotCi0yMDEzLTA0LTA2IDIyOjEwOjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHNmZWF0dXJlcy5jOgotCSAgY2Fwc2ZlYXR1cmVzOiBDb3B5IEFOWSBmbGFnIHdoZW4gY29weWluZyBjYXBzIGZlYXR1cmVzIHRvbwotCi0yMDEzLTA0LTA2IDIxOjQ5OjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBjYXBzOiBIYW5kbGUgQU5ZIGNhcHMgZmVhdHVyZXMgcHJvcGVybHkgaW4gbW9yZSBwbGFjZXMKLQotMjAxMy0wNC0wNiAyMToyMTozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBBZGQgdGVzdCBmb3Igb3BlcmF0aW9ucyBvbiBjYXBzIHdpdGggQU5ZIGZlYXR1cmVzCi0KLTIwMTMtMDQtMDYgMjE6MDk6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogUHJvcGVybHkgaGFuZGxlIEFOWSBjYXBzIGZlYXR1cmVzIGluIGNhcHMgb3BlcmF0aW9ucwotCi0yMDEzLTA0LTA1IDIxOjEwOjQ4ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IHVwZGF0ZSBzaWduYWwgZG9jcyBmb3IgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKCkKLQotMjAxMy0wNC0wNSAxMDoxNTozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBpZ25vcmUgZW1wdHkgbm90LWxpbmtlZCBxdWV1ZXMKLQkgIFdlIG5lZWQgdG8gaWdub3JlIHRoZSBub3QtbGlua2VkIHF1ZXVlcyBpbiB0aGUgdW5kZXJydW4gYW5kIG92ZXJydW4gY2FsbGJhY2tzCi0JICBiZWNhdXNlIHRoZXkgYXJlIGV4cGVjdGVkIHRvIGJlIGVtcHR5LgotCi0yMDEzLTA0LTA0IDIzOjEyOjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogZml4IGNhcHMgZmVhdHVyZSBsZWFrCi0JICBGaXhlcyBsZWFrcyBpbiAxNCBjb3JlIHVuaXQgdGVzdHMgaW5jbHVkaW5nCi0JICBnc3QvZ3N0Y2Fwcy4KLQotMjAxMy0wNC0wNCAxOToxNjoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBzdGFydCBwdXNoaW5nIGFnYWluIG9uIFJFQ09ORklHVVJFCi0JICBXaGVuIHdlIGdvdCBOT1RfTElOS0VEIGJlZm9yZSBhbmQgd2UgcmVjZWl2ZSBhIFJFQ09ORklHVVJFIGV2ZW50LCBzdGFydCBwdXNoaW5nCi0JICBhZ2FpbiBvbiB0aGUgc291cmNlIHBhZC4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2MzA0Ci0KLTIwMTMtMDQtMDQgMTk6MDc6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IHN0YXJ0IHB1c2hpbmcgYWdhaW4gb24gUkVDT05GSUdVUkUKLQkgIFdoZW4gd2UgZ290IE5PVF9MSU5LRUQgYmVmb3JlIGFuZCB3ZSByZWNlaXZlIGEgUkVDT05GSUdVUkUgZXZlbnQsIHN0YXJ0IHB1c2hpbmcKLQkgIGFnYWluIG9uIHRoZSBzb3VyY2UgcGFkLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzYzMDQKLQotMjAxMy0wNC0wNCAxOTowNjozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IHN0YXJ0IHB1c2hpbmcgYWdhaW4gb24gUkVDT05GSUdVUkUKLQkgIFdoZW4gd2UgZ290IE5PVF9MSU5LRUQgYmVmb3JlIGFuZCB3ZSByZWNlaXZlIGEgUkVDT05GSUdVUkUgZXZlbnQsIHN0YXJ0IHB1c2hpbmcKLQkgIGFnYWluIG9uIHRoZSBzb3VyY2UgcGFkLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzYzMDQKLQotMjAxMy0wNC0wNCAxNzo1OToxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBzaW1wbGlmeSBpc19zdWJzZXQgY2hlY2sKLQkgIEl0ZXJhdGUgb3ZlciB0aGUgZmllbGRzIG9mIHRoZSBzdXBlcnNldCBpbnN0ZWFkIG9mIHRob3NlIG9mIHRoZSBzdWJzZXQuCi0JICBUaGlzIHdheSB3ZSBjYW4gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHRoZSBzdWJzZXQgZmllbGQgYW5kIGRvIHRoZSBzdWJzZXQgY2hlY2sKLQkgIGluIG9uZSBpdGVyYXRpb24uCi0KLTIwMTMtMDQtMDQgMTc6NDY6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiB1cGRhdGUgZG9jcywgaXNfc3Vic2V0KCkgd29ya3Mgbm93Ci0KLTIwMTMtMDQtMDQgMTY6Mzk6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBmaXggZG9jcwotCi0yMDEzLTA0LTA0IDE2OjIwOjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHBhZDogYWRkIGdzdF9wYWRfc3RvcmVfc3RpY2t5X2V2ZW50KCkKLQkgIFJld2lyZSBzb21lIGludGVybmFsIGZ1bmN0aW9ucyBhbmQgZXhwb3NlIGEgbmV3Ci0JICBnc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudCgpIGZ1bmN0aW9uLgotCSAgQVBJOiBnc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudCgpCi0KLTIwMTMtMDQtMDQgMTU6NDU6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogY2xhcmlmeSBkb2NzCi0KLTIwMTMtMDQtMDQgMTU6NDU6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogaW1wcm92ZSBkZWJ1ZwotCi0yMDEzLTA0LTA0IDEwOjE3OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgc2VnbWVudDogZG9uJ3QgV0FSTiwganVzdCBERUJVRwotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NjkxMQotCi0yMDEzLTAzLTMwIDExOjA2OjU5ICswMDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBzZWdtZW50OiBGaXggc2Vla2luZyB3aGVuIHBvc2l0aW9uIGlzIHNsaWdodGx5IG91dHNpZGUgdGhlIHNlZ21lbnQKLQkgIFZlcnkgb2Z0ZW4sIHdoZW4gdGhlIGVuZCBvZiBhIHNlZ21lbnQgaXMgZGV0ZWN0ZWQgYnkgZGVtdXhlciwgdGhlIHBvc2l0aW9uCi0JICBpcyBzbGlnaHRseSBvdXRzaWRlIHRoZSBzZWdtZW50IGJvdW5kYXJpZXMuIEN1cnJlbnRseSwgaWYgdGhhdCBpcyB0aGUgY2FzZQotCSAgdGhlIGJhc2Ugd2lsbCBiZSBzZXQgdG8gTk9ORSBpbnN0ZWFkIG9mIG5vcm1hbCBhY2N1bXVsYXRpb24uIFRoaXMgd291bGQKLQkgIGJyZWFrIG5vbi1mbHVzaGluZyBzZWVrcyBpbiBvZ2dkZW11eCBhbmQgbW9zdCBsaWtlbHkgb3RoZXIgZGVtdXhlcnMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk2ODk5Ci0KLTIwMTMtMDQtMDMgMTc6Mjk6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogdXBkYXRlCi0KLTIwMTMtMDQtMDMgMTY6MDI6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogYWRkIHN0cmVhbSBmbGFncwotCi0yMDEzLTA0LTAyIDE4OjE3OjAwIC0wNjAwICBCcmVuZGFuIExvbmcgPGIubG9uZ0BjYWJsZWxhYnMuY29tPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBwb3J0aW5nLXRvLTEuMC50eHQ6IHN1YnRpdGxlIHRleHQgbWVkaWEgdHlwZXMgY2hhbmdlZCBhcyB3ZWxsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3MTUzCi0KLTIwMTMtMDQtMDIgMjM6NTE6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JICBkb2NzOiBtb3JlIHNpbmNlIG1hcmtlcnMgYW5kIG90aGVyIGRvY3MgZml4ZXMKLQotMjAxMy0wNC0wMiAyMzoyMTozOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGNhcHNmZWF0dXJlcy5jOgotCSAgZG9jczogYWRkIHNpbmNlIG1hcmtlcnMgdG8gY2Fwc2ZlYXR1cmVzIGRvY3MKLQotMjAxMy0wNC0wMiAyMzoxODo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogc2NyaXB0cy9naXQtdXBkYXRlLnNoOgotCSAgc2NyaXB0czogYWRkIHNvbWUgbW9yZSBtb2R1bGVzIHRvIGdpdC11cGRhdGUuc2gKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTcwNTgKLQotMjAxMy0wNC0wMiAyMzowNDo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IGFkZCB1bmluc3RhbGxlZCBvcmMvb3JjLXRlc3QvLmxpYnMgdG8gbGlicmFyeSBwYXRocwotCSAgVGhpcyBpcyBuZWVkZWQgYnkgdGhlIHVuaXQgdGVzdHMgaW4gZ3N0LXBsdWdpbnMtYmFzZSwgLWdvb2QgZXRjLgotCSAgU3BvdHRlZCBieSBBbGV4IEtheWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3MDkzCi0KLTIwMTMtMDQtMDIgMjI6MTM6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzZmVhdHVyZXMuYzoKLQkqIGdzdC9nc3RjYXBzZmVhdHVyZXMuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzZmVhdHVyZXMuYzoKLQkgIGNhcHNmZWF0dXJlczogQWRkIEdTVF9DQVBTX0ZFQVRVUkVTX0FOWQotCSAgVGhpcyBpcyBlcXVhbCB0byBhbnkgb3RoZXIgY2FwcyBmZWF0dXJlcyBidXQgcmVzdWx0cyBpbiB1bmZpeGVkIGNhcHMuIEl0Ci0JICB3b3VsZCBiZSB1c2VkIGJ5IGVsZW1lbnRzIHRoYXQgb25seSBsb29rIGF0IHRoZSBidWZmZXIgbWV0YWRhdGEgb3IgYXJlCi0JICBjdXJyZW50bHkgd29ya2luZyBpbiBwYXNzdGhyb3VnaCBtb2RlLCBhbmQgYXMgc3VjaCBkb24ndCBjYXJlIGFib3V0IGFueQotCSAgc3BlY2lmaWMgZmVhdHVyZXMuCi0KLTIwMTMtMDQtMDEgMjI6MTM6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBtaW5vciBjb3NtZXRpYyBjaGFuZ2VzCi0JICBMZXQncyBub3QgdXNlIHVnbHkgbGVhZGluZyB1bmRlcnNjb3JlcyBmb3IKLQkgIHN0YXRpYyBmdW5jdGlvbnMuCi0KLTIwMTMtMDQtMDEgMjE6MjM6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBmaXggb2JqZWN0IHByaW50aW5nIG9mIGNhcHMgZmVhdHVyZXMgaW4gZGVidWcgbG9nCi0KLTIwMTMtMDQtMDEgMTY6Mzg6NDMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRyYWNpbmcudHh0OgotCSAgZHJhZnQtdHJhY2luZzogdXBkYXRlIGRyYWZ0IGRlc2lnbiB3aXRoIHRpbWVyIGlkZWFzCi0KLTIwMTMtMDMtMzAgMTc6MDM6NDQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiByZWZhY3RvciBwcmV0dHkgcHJpbnRpbmcgb2JqZWN0cwotCSAgRXh0cmFjdCBmb3JtYXR0ZXJzIGludG8gbG9jYWwgZnVuY3Rpb25zLiBDaGFuZ2UgdGhlIHN0cnVjdHVyZSBmaWx0ZXJpbmcgc28gdGhhdAotCSAgaXQgd29ya3MgZm9yIHRhZ2xpc3RzIHRvby4KLQotMjAxMy0wMy0zMCAxNjozOTozOCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IG1ha2UgcG9zdF9tZXNzYWdlIGFuZCBxdWVyeSBtb3JlIGFsaWtlCi0KLTIwMTMtMDQtMDEgMTA6MjA6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IFByaW50IGNhcHMgZmVhdHVyZXMgdG9vCi0KLTIwMTMtMDQtMDEgMTA6MTk6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmM6Ci0JICBjYXBzZmVhdHVyZXM6IEZvciBjb3B5aW5nIGZlYXR1cmVzIGl0J3Mgbm90IHJlcXVpcmVkIHRvIGhhdmUgbm8gcGFyZW50IHJlZmNvdW50Ci0KLTIwMTMtMDQtMDEgMTA6MTk6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogU2V0IGZlYXR1cmVzJyBwYXJlbnQgcmVmY291bnQgaW4gZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKCkgdG9vCi0KLTIwMTMtMDQtMDEgMTA6MTg6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogU2V0IHN5c21lbSBmZWF0dXJlcyBpZiBleHBsaWNpdGVseSByZXF1ZXN0ZWQKLQotMjAxMy0wMy0zMSAxOTowOTo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQ6Ci0JICBkZXNpZ246IEFkZCB0aGUgY2FwcyBmZWF0dXJlcyBhbmQgZGVzY3JpYmUgaG93IHRoZSBjYXBzIG9wZXJhdGlvbnMgYWN0dWFsbHkgd29yawotCi0yMDEzLTAzLTMwIDE1OjM1OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGNhcHNmZWF0dXJlcy5jOgotCSogZ3N0L2dzdGNhcHNmZWF0dXJlcy5oOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNhcHM6IEFkZCBuZXcgZGF0YSB0eXBlIGZvciBoYW5kbGluZyBjYXBzIGZlYXR1cmVzIHRvIHRoZSBjYXBzCi0JICBUaGVzZSBhcmUgbWVhbnQgdG8gc3BlY2lmeSBmZWF0dXJlcyBpbiBjYXBzIHRoYXQgYXJlIHJlcXVpcmVkCi0JICBmb3IgYSBzcGVjaWZpYyBzdHJ1Y3R1cmUsIGZvciBleGFtcGxlIGEgc3BlY2lmaWMgbWVtb3J5IHR5cGUKLQkgIG9yIG1ldGEuCi0JICBTZW1hbnRpY2FsbHkgdGhleSBjb3VsZCBiZSB0aG91Z2ggb2YgYXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBtZWRpYQotCSAgdHlwZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmVzIGFuZCBhcmUgaGFuZGxlZCBleGFjdGx5IGxpa2UgdGhhdC4KLQotMjAxMy0wMy0zMSAxNTozMDoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBldmVudDogYWRkIFNFTEVDVCBhbmQgVU5TRUxFQ1Qgc3RyZWFtIGZsYWdzIGZvciBzdHJlYW0tc3RhcnQgZXZlbnQKLQkgIFNvIGRlbXV4ZXJzIGNhbiBzaWduYWwgd2hpY2ggYXVkaW8vdmlkZW8vc3VidGl0bGUgc3RyZWFtcyBzaG91bGQKLQkgIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQgYW5kIHdoaWNoIHNob3VsZCBub3QgYmUgc2VsZWN0ZWQKLQkgIGF1dG9tYXRpY2FsbHkuCi0JICBBUEk6IEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QKLQkgIEFQSTogR1NUX1NUUkVBTV9GTEFHX1VOU0VMRUNUCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1OTY4Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkwOTExCi0KLTIwMTMtMDEtMDYgMjA6Mjc6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGV2ZW50OiBhZGQgc3RyZWFtIGZsYWdzIHRvIHN0cmVhbS1zdGFydCBldmVudAotCSAgQVBJOiBnc3RfZXZlbnRfc2V0X3N0cmVhbV9mbGFncygpCi0JICBBUEk6IGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZmxhZ3MoKQotCSAgQVBJOiBHU1RfU1RSRUFNX0ZMQUdfTk9ORQotCSAgQVBJOiBHU1RfU1RSRUFNX0ZMQUdfU1BBUlNFCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAwNjQ4Ci0KLTIwMTMtMDMtMzEgMTE6MjY6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGVsZW1lbnQ6IEFkZCBBUEkgdG8gZ2V0IHRoZSBsYXN0IHNldCBjb250ZXh0IGZyb20gYW4gZWxlbWVudAotCSAgRWxlbWVudHMgc2hvdWxkIG92ZXJyaWRlIEdzdEVsZW1lbnQ6OnNldF9jb250ZXh0KCkgYW5kIGFsc28gY2FsbAotCSAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoKSB0byBrZWVwIHRoaXMgY29udGV4dCB1cC10by1kYXRlIHdpdGgKLQkgIHRoZSB2ZXJ5IGxhdGVzdCBjb250ZXh0IHRoZXkgaW50ZXJuYWxseSB1c2UuCi0KLTIwMTMtMDMtMzAgMTQ6MDQ6MjggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRyYWNpbmcudHh0OgotCSAgZGVzaWduOiBhZGQgaW5pdGlhbCB0cmFjaW5nIGRlc2lnbiBkb2MKLQotMjAxMy0wMy0zMCAxMTo0NzoyOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogTGV0IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcygpIHBhc3MgdGhlIGNhcHMgb3duIGNhcHMgYXMgZmlsdGVyCi0JICBUaGlzIHdpbGwgcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FwcyBjcmVhdGVkIGRvd25zdHJlYW0gYW5kIHdlIGRvbid0Ci0JICBuZWVkIHRvIGludGVyc2VjdCBpbiB0aGUgdmVyeSBlbmQgd2l0aCB0aGUgcGFkJ3Mgb3duIGNhcHMuCi0KLTIwMTMtMDMtMzAgMTA6MjQ6MjcgKzAxMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGZpeGVzIGNvbXBpbGVyIHdhcm5pbmcKLQkgIGdzdGJhc2VzaW5rLmM6IEluIGZ1bmN0aW9uICdnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkJzoKLQkgIGdzdGJhc2VzaW5rLmM6MzIwNDogd2FybmluZzogJ3JldCcgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uCi0KLTIwMTMtMDMtMjkgMTk6MDE6NTkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JICBjaGlsZHByb3h5OiBmaXggZ2lyIHdhcm5pbmcKLQotMjAxMy0wMy0yOSAxODo0OToxNCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICBSZXZlcnQgInB3ZzogRml4IGV4YW1wbGUiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDVkNjRmMjdkODgxMjc0YTQwZjA0NDFiYjhjNWIzODE2ZmRmYzViOWUuCi0JICAqc2lnaCoKLQotMjAxMi0xMS0wNiAwOTo0MTo1OCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICBwd2c6IEZpeCBleGFtcGxlCi0KLTIwMTItMTEtMTEgMTM6NTI6MjUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFJlbW92ZSBTRUdNRU5UIHN0aWNreSBldmVudHMgd2hlbiBmbHVzaGluZwotCSAgV2hlbiBmbHVzaGluZywgaXQgaXMgZXhwZWN0ZWQgdGhhdCB1cHN0cmVhbSB3aWxsIHNlbmQgYSBTRUdNRU5UCi0JICBldmVudCBhZnRlcndhcmRzLgotCSAgVGhpcyBhbHNvIGF2b2lkcyBzdHJheSBTRUdNRU5UIGV2ZW50cyBmcm9tIGNvbWluZyB0aHJvdWdoIGFmdGVyIGEKLQkgIGZsdXNoLgotCi0yMDEzLTAzLTI4IDE1OjM1OjEzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JKiBnc3QvZ3N0Y29udGV4dC5oOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdDogQWRkIG5ldyBHc3RDb250ZXh0IG1pbmlvYmplY3QgZm9yIHNoYXJpbmcgY29udGV4dHMgaW4gYSBwaXBlbGluZQotCi0yMDEzLTAzLTI4IDE2OjQyOjUwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5jOgotCSAgYXJnYi1jb250cm9sYmluZGluZzogZml4IG1lc3NlZCB1cCBwcm9wZXJ0eSBzZXR0ZXIKLQkgIFRoaXMgd2FzIG1pc2Fzc2lnbmluZyB0aGUgY29udHJvbCBzb3VyY2VzLiBJdCB3YXMgYWxzbyBsZWFraW5nIHRoZSBvbGQgdmFsdWVzIGlmCi0JICBhIGNvbnRyb2wgc291cmNlIHdvdWxkIGJlIHJlcGxhY2VkLgotCi0yMDEzLTAzLTI3IDE4OjI1OjA4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlc2V0IG5leHRfcHRzIHVwb24gU0VHTUVOVCBldmVudAotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTQ4MQotCi0yMDEzLTAyLTI2IDE5OjU4OjQ5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBtb3JlIGludGVyLXRpbWVzdGFtcCB0cmFja2luZwotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTQ4MQotCi0yMDEzLTAzLTI2IDE5OjIyOjE4IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGFsbG9jYXRvci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXI6IEFkZCBhbm5vdGF0aW9ucyBhbmQgcHlnaSBmcmllbmRseSBleHRyYWN0aW9uIGZ1bmN0aW9uCi0JICBBUEk6IGdzdF9idWZmZXJfZXh0cmFjdF9kdXAKLQotMjAxMy0wMy0yNyAxNzowODo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0xLjAudHh0OgotCSAgcG9ydGluZzogaG9wZWZ1bGx5IGNsYXJpZnkgYSBsaXR0bGUKLQotMjAxMy0wMy0yNSAxODoxMTo1NCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgVXBkYXRlIGRvY3MgZm9yIGdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGYoKQotCSAgVG8gaW5kaWNhdGUgdGhhdCBmb3JtYXQgc3RyaW5ncyBzaG91bGQgYmUgYWxwaGEgc29ydGFibGUuCi0KLTIwMTMtMDMtMjUgMDk6MTY6MDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogQWRkIHVuaXQgdGVzdCBmb3IgR1NUX0NBUFNfe0FOWSxOT05FfSBhbmQgR1NUX1NUQVRJQ19DQVBTX3tBTlksTk9ORX0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTY0MzUKLQotMjAxMy0wMy0yNSAwOToxOToyNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBGaXggZ3N0X3N0YXRpY19jYXBzX2dldChHU1RfU1RBVElDX0NBUFNfTk9ORSkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTY0MzUKLQotMjAxMy0wMy0yMSAyMTowMDo1NCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogRG9uJ3Qgc2VuZCBlcnJvciBpZiBuZWdvdGlhdGUgZmFpbHMgYmVjYXVzZSB3ZSBhcmUgZmx1c2hpbmcKLQkgIE5lZ290aWF0aW9uIG1heSBiZSBhYm9ydGVkIGJ5IGEgZmx1c2ggZnJvbSBhbm90aGVyIHRocmVhZCB0aGF0IG5lZWQgdG8KLQkgIHN0b3AgdGhlIHRhc2sgKGkuZS4gc2VlaykuIENoZWNrIHRoYXQgY2FzZSBhbmQgc2lsZW50bHkgcGF1c2UgdGhlIHRhc2suCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk2MzU3Ci0KLTIwMTMtMDMtMjQgMTc6NTM6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtdG9jLnR4dDoKLQkqIGdzdC9nc3R0b2MuYzoKLQkgIHRvYzogc29tZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMKLQotMjAxMy0wMy0yMiAyMDowMjo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLXF1ZXJ5Zm4ueG1sOgotCSAgZG9jczogZml4IHR5cG8gaW4gcXVlcnkgZnVuY3Rpb24gZXhhbXBsZSBpbiBQbHVnaW4gV3JpdGVyJ3MgR3VpZGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYxNDIKLQotMjAxMy0wMy0wNyAxMjoxMTozMCArMDEwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzaGdAYXhpcy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzoKLQkgIHRlc3RzOiBmaXggc3B1cmlvdXMgZmFpbHVyZSBpbiB0ZXN0X2NvbGxlY3QgY29sbGVjdHBhZHMgdGVzdAotCSAgcG9wKCkgaW4gY29sbGVjdGVkIGNhbGxiYWNrLgotCSAgVGhlcmUgd2VyZSB0aHJlZSB0aHJlYWRzIGluIHRoZSB0ZXN0IGNhc2VzIHRoYXQgaGFuZ2VkOiB0aGUgdGVzdCB0aHJlYWQgYW5kIHR3bwotCSAgdGhyZWFkcyB0aGF0IHB1c2ggYnVmZmVycy4gRWFjaCB0aHJlYWQgcHVzaCBvbmUgYnVmZmVyIG9uIG9uZSBwYWQuIFRoZXJlIGFyZQotCSAgdHdvIHBhZHMgaW4gdGhlIGNvbGxlY3RwYWRzIHNvIHRoZSBzZWNvbmQgYnVmZmVyIHdpbGwgdHJpZ2dlciB0aGUKLQkgIGNvbGxlY3QtY2FsbGJhY2suCi0JICBUaGlzIGlzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBoYW5nIG9jY3VyczoKLQkgIFRoZSBmaXJzdCB0aHJlYWQgcHVzaGVzIGEgYnVmZmVyIGFuZCBpbml0aWFsaXplcyBhIGNvb2tpZSB0byB0aGUgdmFsdWUgb2YgYQotCSAgY291bnRlciBpbiB0aGUgY29sbGVjdHBhZHMgb2JqZWN0IGFuZCB3YWl0cyBvbiBhIGNvbmQgZm9yIHRoZSBjb3VudGVyIHRvIGNoYW5nZQotCSAgYW5kIGZvciBzb21lb25lIHRvIGNvbnN1bWUgdGhlIGJ1ZmZlciAoaS5lLiBfcG9wKCkgaXQpLgotCSAgVGhlIHNlY29uZCB0aHJlYWQgcHVzaGVzIGEgYnVmZmVyIGFuZCBjYWxscyB0aGUgY29sbGVjdGVkIGNhbGxiYWNrLCB3aGljaAotCSAgc2lnbmFscyB0aGUgY29uZCB0aGF0IHRoZSB0ZXN0IHRocmVhZCBpcyB3YWl0aW5nIGZvci4KLQkgIFRoZSB0ZXN0IHRocmVhZCBwb3BzIGJvdGggYnVmZmVycyAod2l0aG91dCBob2xkaW5nIGFueSBsb2NrKS4gRWFjaCBjYWxsIHRvCi0JICBfcG9wKCkgaW5jcmVhc2VzIHRoZSBjb3VudGVyIGJyb2FkY2FzdHMgdGhlIGNvbmRpdGlvbiB0aGF0IHRoZSBmaXJzdCB0aHJlYWQgaXMKLQkgIG5vdyB3YWl0aW5nIGZvci4gSXQgdGhlbiBqb2lucyBib3RoIHRocmVhZHMgKGhhbmdzKS4KLQkgIFRoZSBmaXJzdCB0aHJlYWQgd2FrZXMgdXAgYW5kIHJldHVybnMsIHNpbmNlIGl0cyBidWZmZXIgaGFzIGJlZW4gY29uc3VtZWQuCi0JICBUaGUgc2Vjb25kIHRocmVhZCBzdGFydHMgZXhlY3V0aW5nIGFnYWluLiBXaGVuIHRoZSBjYWxsYmFjaywgY2FsbGVkIGJ5IHRoZQotCSAgc2Vjb25kIHRocmVhZCwgaGFzIHJldHVybmVkIGl0IGluaXRpYWxpemVzIGEgY29va2llIHRvIHRoZSB2YWx1ZSBvZiBhIGNvdW50ZXIsCi0JICB3aGljaCBoYXMgYWxyZWFkeSBwcmVtYXR1cmVseSBiZWVuIGluY3JlYXNlZCBieSB0aGUgdGVzdCB0aHJlYWQgd2hlbiBpdCBwb3BwZWQKLQkgIHRoZSBidWZmZXJzLCBhbmQgd2FpdCdzIG9uIGEgY29uZCBmb3IgdGhlIGNvdW50ZXIgdG8gY2hhbmdlIGFuZCBmb3Igc29tZW9uZSB0bwotCSAgY29uc3VtZSB0aGUgYnVmZmVyIChpLmUuIF9wb3AoKSBpdCkuIFNpbmNlIHRoZSBidWZmZXIgaGFzIGFscmVhZHkgYmVlbiBwb3BlZAotCSAgYW5kIHRoZSBjb3VudGVyIGhhcyBhbHJlYWR5IGJlZW4gaW5jcmVhc2VkIGl0IHdpbGwgYmUgc3R1Y2sgZm9yZXZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU1NTUKLQotMjAxMy0wMy0xNiAxMjowNTozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IHJlbW92ZSBmZm1wZWcgbGlicyBmcm9tIGR5bmFtaWMgbGlua2VyIHBhdGhzCi0JICBXZSBsaW5rIHRob3NlIGxpYnMgaW50byB0aGUgcGx1Z2luIHN0YXRpY2FsbHksIG9yIHVzZSBleHRlcm5hbAotCSAgc3lzdGVtIGxpYnMsIGJ1dCBuZXZlciB0aGUgaW50ZXJuYWwgc25hcHNob3QgZHluYW1pY2FsbHkuCi0KLTIwMTMtMDMtMTYgMTI6MDA6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiBhZGQgZ3N0LWVkaXRpbmctc2VydmVzIHRvIEdJX1RZUEVMSUJfUEFUSAotCSAgU28gcHlnaSBjYW4gZmluZCBpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU5MzcKLQotMjAxMy0wMy0xMiAxMzo1Mzo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgdXRpbHM6IG1ha2Ugc3VyZSBzbG93IEdTVF9SRUFEX1VJTlQqIHZhcmlhbnRzIGRvbid0IGhhdmUgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMKLQkgIEZpeGVzIHVuaXQgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIG5vdCBwb3NzaWJsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU1OTkKLQotMjAxMy0wMy0wNSAxMToxNDo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgbGF1bmNoOiBkb24ndCBleGl0IHRoZSBsb29wIG9uIGJ1ZmZlcmluZyBpbiBwYXVzZWQKLQkgIFdoZW4gd2UgcmVjZWl2ZSBhIGJ1ZmZlcmluZyBtZXNzYWdlIG9mIDEwMCUgaW4gdGhlIHBhdXNlZCBzdGF0ZSwgd2UgZXhpdAotCSAgdGhlIGV2ZW50X2xvb3AgYW5kIG1vdmUgdG8gdGhlIFBMQVlJTkcgc3RhdGUuIFdoYXQgc2hvdWxkIGhhcHBlbiBpcyB0aGF0Ci0JICB3ZSB3YWl0IGZvciBib3RoIEFTWU5DLURPTkUgYW5kIDEwMCUgYnVmZmVyaW5nIGJlZm9yZSBjb250aW51ZWluZy4KLQotMjAxMy0wMy0wOCAxMzoxNTozMiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jb250cm9sbGVyLnR4dDoKLQkgIGRlc2lnbjogdXBkYXRlIGNvbnRyb2xsZXIgZGVzaWduIGFuZCBhZGQgc29tZSB0aG91Z2hzIGZvciBmdXR1cmUgc3R1ZmYKLQotMjAxMy0wMy0wOCAwODoxMzowNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5jOgotCSAgZG9jczogbWVudGlvbiBjbGlwcGluZyBvZiB2YWx1ZXMgaW4gY29udHJvbC1iaW5kaW5nIGRvY3MKLQotMjAxMy0wMy0wOCAwODoxMDoyMCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkgIGNvbnRyb2xsZXI6IGNvZGUgY2xlYW51cHMKLQkgIFVzZSBhIHByb3BlcnR5IGZvciBhY2Nlc3NpbmcgdGhlIGNvbnRyb2wtc291cmNlIG9uIHRoZSBiaW5kaW5nLiBEcm9wIGJhc2VfaW5pdAotCSAgb24gdGhlIHRlc3Qgb2JqZWN0LgotCi0yMDEzLTAzLTA3IDExOjQ2OjMzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcGFyYW1zKCkgcmV0dXJucyBhIG5ldyByZWYgdG8gdGhlIGFsbG9jYXRvcgotCi0yMDEzLTAzLTA3IDExOjM1OjAzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkgIGNvbnRyb2xsZXI6IHJlbW92ZSBhIGJvZ3VzIHRlc3QKLQkgIFdlIHByZXZpb3VzbHkgZm9yZ290IHRvIGluaXRpbGl6ZSB0aGUgYW1wbGl0ZGUgcHJvcGVydHkgdG8gdGhlIGRlZmF1bHQgYW5kIHRodXMgaXQgd2FzIDAuMC4gVGhlcmVmb3JlIGEgZGVmYXVsdCBsZm8gY29udHJvbHNvdXJjZSByZXR1cm5lZCBhIHNlcmllcyBvZiAwLjAgYW5kIHRoZSB0ZXN0IHdhcyBhc3NlcnRpbmcgb24gdGhhdC4KLQotMjAxMy0wMy0wNyAwOToxNToxNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5jOgotCSAgY29udHJvbGJpbmRpbmc6IHJlbGF4IHRoZSBwc3BlYyBmb3IgdGhlIGNvbnRyb2wtc291cmNlCi0JICBXZSBjYW4gY2hhbmdlIGNvbnRyb2wgc291cmNlcyBvbiBjb250cm9sYmluZGluZ3MuCi0KLTIwMTMtMDMtMDcgMDk6MTI6NTkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSAgbGZvOiBzZXQgYSBzZW5zaWJsZSBsb3dlciBib3VuZGFyeSBmb3IgdGhlIGZyZXF1ZW5jeQotCSAgVXNlIERCTF9NSU4sIHdoaWNoIGlzIGEgdGhlIHNtYWxsZXMgZG91YmxlIGdyZWF0ZXIgdGhhbiB6ZXJvIHRoYXQgaXMgbm90IGluCi0JICBkZW5vcm1hbCBmb3JtYXQuIFRoaXMgZXhwb3NlcyB0aGUgbGltaXQgYmV0dGVyIHRoYW4gdGhlIHJ1bnRpbWUgY2hlY2suCi0KLTIwMTMtMDMtMDYgMjM6NTk6MjggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAyZGUyMjFjIHRvIDA0YzdhMWUKLQotMjAxMy0wMy0wNiAxNjo0MDoyNyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6Ci0JICBsZm9jb250cm9sc291cmNlOiBpbml0IHRoZSBhbXBsaXR1ZGUgdG8gdGhlIGRlZmF1bHQgYW5kIHVwZGF0ZSB0aGUgZG9jcwotCi0yMDEzLTAzLTA1IDExOjMwOjIyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IEFkZCBhbGwgdGhlIGJhc2UvYmFkIGxpYnJhcmllcyBhbmQgcmVtb3ZlIG9ic29sZXRlIG9uZXMKLQotMjAxMy0wMy0wMyAxNjowMDoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGZpeCB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZQotCSAgUnVubmluZyBzdWl0ZShzKTogR3N0QmFzZVNpbmsKLQkgID09MjIwMjM9PSBDb25kaXRpb25hbCBqdW1wIG9yIG1vdmUgZGVwZW5kcyBvbiB1bmluaXRpYWxpc2VkIHZhbHVlKHMpCi0JICA9PTIyMDIzPT0gICAgYXQgMHg1MDVGRkNFOiBnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzIChnc3RiYXNlc2luay5jOjE5MzYpCi0JICA9PTIyMDIzPT0gICAgYnkgMHg1MDY4QzgwOiBnc3RfYmFzZV9zaW5rX2RvX3N5bmMgKGdzdGJhc2VzaW5rLmM6MjM3OSkKLQkgID09MjIwMjM9PSAgICBieSAweDUwNkJDRDI6IGdzdF9iYXNlX3NpbmtfZGVmYXVsdF93YWl0X2V2ZW50IChnc3RiYXNlc2luay5jOjI5MDMpCi0JICA9PTIyMDIzPT0gICAgYnkgMHg1MDYzM0E0OiBnc3RfYmFzZV9zaW5rX2RlZmF1bHRfZXZlbnQgKGdzdGJhc2VzaW5rLmM6MjkxOCkKLQkgID09MjIwMjM9PSAgICBieSAweDZGNUMyMTY6IGdzdF9mYWtlX3NpbmtfZXZlbnQgKGdzdGZha2VzaW5rLmM6MzgzKQotCSAgPT0yMjAyMz09ICAgIGJ5IDB4NTA1RjE2NDogZ3N0X2Jhc2Vfc2lua19ldmVudCAoZ3N0YmFzZXNpbmsuYzozMTA4KQotCSAgPT0yMjAyMz09ICAgIGJ5IDB4NTJGQTA5MDogZ3N0X3BhZF9zZW5kX2V2ZW50X3VuY2hlY2tlZCAoZ3N0cGFkLmM6NDgyMikKLQkgID09MjIwMjM9PSAgICBieSAweDUzMDM3NTY6IGdzdF9wYWRfc2VuZF9ldmVudCAoZ3N0cGFkLmM6NDk4NCkKLQkgID09MjIwMjM9PSAgICBieSAweDQwMTY1QjogYmFzZXNpbmtfdGVzdF9nYXAgKGJhc2VzaW5rLmM6MTQ4KQotCi0yMDEzLTAzLTAzIDEyOjA2OjM2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBGaXggbWVtb3J5IGNvcHlpbmcgbG9naWMgaW4gY29weV9pbnRvKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTUwMzUKLQotMjAxMy0wMy0wMyAxMToyODozMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSAgcmVnaXN0cnljaHVua3M6IFVzZSBjb3JyZWN0IHByaW50IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGZpeCBjb21waWxlciB3YXJuaW5ncwotCi0yMDEzLTAyLTIyIDE0OjIyOjAxIC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgRml4IG1pc3NwZWxsaW5ncyBvZiAnY29udGludW91cycKLQotMjAxMy0wMi0yMiAxNDo1Njo0OSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiB0YWtlIERUUyBpbnRvIGFjY291bnQKLQkgIEltcG9ydGFudGx5LCB0aGlzIHBhdGNoIGNvbnZlcnRzIERUUyB0byBydW5uaW5nIHRpbWUuICBMZXNzIGltcG9ydGFudGx5LAotCSAgYW5kIHBvc3NpYmx5IGEgcHJvYmxlbSBmb3Igc29tZSBtdXhlcnMsIGlzIHRoYXQgaXQgb3JkZXJzIGJ1ZmZlcnMgYnkKLQkgIERUUyAoaWYgaXQgaXMgdmFsaWQsIG90aGVyd2lzZSBQVFMpLiAgVGhpcyBpcyBnZW5lcmFsbHkgY29ycmVjdCwgYnV0Ci0JICBtaWdodCBiZSBzb21ld2hhdCBzdXJwcmlzaW5nIHRvIG11eGVycy4KLQkgIEFsc28gbm90ZSB0aGF0IG9uY2UgY29udmVydGVkIHRvIHJ1bm5pbmcgdGltZSwgRFRTIGNhbiBlbmQgdXAgbmVnYXRpdmUuCi0KLTIwMTMtMDItMjggMjI6NTk6NDMgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRwYXJhbXMueG1sOgotCSAgbWFudWFsOiBpbXByb3ZlIHRoZSBjb250cm9sbGVyIGRvY3MgYSBsaXR0bGUgbW9yZQotCSAgUmV3b3JkIHNvbWUgc2VjdGlvbnMuIEV4cGxhaW4gdmFsdWUgbWFwcGluZ3MgYmV0dGVyLgotCi0yMDEzLTAyLTI4IDE5OjQwOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogYWRkIGdzdC1saWJhdiB0byBwa2ctY29uZmlnIHBhdGgKLQotMjAxMy0wMi0yNyAyMjoxNTo0OCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgc2Vla2luZzogYWRkIG1vcmUgbG9nZ2luZyBmb3Igc2Vla2luZwotCSAgRXNwZWNpYWxseSBhZGQgbG9nZ2luZyB0byBlcnJvciBjb2RlIHBhdGhzLgotCi0yMDEzLTAyLTI3IDEwOjA5OjU2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBHcmFjZWZ1bGx5IGhhbmRsZSBnc3RfbWVtb3J5X2NvcHkoKSByZXR1cm5pbmcgTlVMTCB3aXRob3V0IGNyYXNoaW5nCi0JICBnc3RfYnVmZmVyX2NvcHlfaW50bygpIGFuZCBnc3RfYnVmZmVyX3Jlc2l6ZV9yYW5nZSgpIGNhbiBub3cgZmFpbC4KLQotMjAxMy0wMi0yNiAxNzozMzozMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGFsbG9jYXRvci5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBhbGxvY2F0b3I6IHNtYWxsIGludGVybmFsIGNsZWFudXBzCi0JICBSZW5hbWUgU3lzdGVtIG1lbW9yeSBhbGxvY2F0b3IgdG8gR3N0QWxsb2NhdG9yU3lzbWVtIGFuZCB0aGUgbWVtb3J5IHRvCi0JICBHc3RNZW1vcnlTeXN0ZW0uCi0KLTIwMTMtMDItMjYgMTU6Mzc6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGFkZCBtZXRob2QgdG8gY2hlY2sgbWVtb3J5IHR5cGUKLQkgIEFkZCBhIG1ldGhvZCB0byBjaGVjayBpZiBhIG1lbW9yeSB3YXMgYWxsb2NhdGVkIGZyb20gYW4gYWxsb2NhdG9yIG9mCi0JICBhIGdpdmVuIHR5cGUuCi0JICBBUEk6IGdzdF9tZW1vcnlfaXNfdHlwZSgpCi0KLTIwMTMtMDItMjYgMTU6MzY6MTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBpbXByb3ZlIGRvY3MgYSBsaXR0bGUKLQotMjAxMy0wMi0yNiAxNTozMjoyNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1nc3RiaW4udHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JICB1c2UgR1NUX01FU1NBR0VfRFVSQVRJT05fQ0hBTkdFRCBpbiBkb2NzIGFuZCBjb2RlCi0KLTIwMTMtMDItMjYgMTQ6NDA6MzggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogZG9uJ3QgdW5yZWYgYWxsb2NhdG9yIHRvbyBzb29uCi0JICBVbnJlZiB0aGUgYWxsb2NhdG9yICphZnRlciogd2UgaGF2ZSBmcmVlZCB0aGUgbWVtb3J5LiBXZSBhbHNvIG5lZWQgdG8ga2VlcAotCSAgYSByZWYgdG8gdGhlIGFsbG9jYXRvciBhcm91bmQgYmVjYXVzZSBmb2xsb3dpbmcgdGhlIG5vdyBmcmVlZCBtZW1vcnkgd291bGQKLQkgIGxlYWQgdG8gY3Jhc2hlcy4KLQotMjAxMy0wMi0yNiAwOTowODo0OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogRml4IGludmVydGVkIGxvZ2ljIGZvciBkZWNpZGluZyBpZiBtZW1vcnkgc2hvdWxkIGJlIHNoYXJlZCBvciBjb3BpZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQ3MTcKLQotMjAxMy0wMi0yNiAwNzo1MDoxMyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0xLjAudHh0OgotCSAgcG9ydGluZzogbWVudGlvbiBzZWdtZW50IGFjY3VtdWxhdGlvbiBpbiB0aGUgcG9ydGluZyBndWlkZQotCSAgVGhpcyBuZWVkcyBtb3JlIGRldGFpbCwgYnV0IGF0IGxlYXN0IGdpdmVzIHBlb3BsZSBhIGhpbnQgb24gdGhlIGlzc3VlLgotCi0yMDEzLTAyLTI2IDA3OjQ4OjM1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgZG9jczogcy9zdGFydC9kb25lLyBjb3B5J24ncGFzdGUgbWlzdGFrZQotCi0yMDEzLTAyLTI1IDEzOjU3OjQzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHF1ZXJ5OiBBZGQgbmV3IEFQSSB0byByZW1vdmUgYWxsb2NhdGlvbiBwYXJhbXMgYW5kIHBvb2xzIGZyb20gdGhlIGFsbG9jYXRpb24gcXVlcnkKLQotMjAxMy0wMi0yNSAxMzoyNDozMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IERvY3VtZW50IHRoYXQgdGhlIGZpcnN0IGFsbG9jYXRvciBpbiB0aGUgYWxsb2NhdGlvbiBxdWVyeSBzaG91bGQgYWxsb3cgbWFwcGluZyB0byBzeXN0ZW0gbWVtb3J5Ci0KLTIwMTMtMDItMjQgMDk6MjQ6MjYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JICBtZW1vcnk6IEtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGFsbG9jYXRvcgotCSAgT3RoZXJ3aXNlIHRoZSBhbGxvY2F0b3IgbWlnaHQgZ2V0IGZyZWVkIHdoaWxlIGl0J3Mgc3RpbGwgdXNlZAotCSAgYnkgdGhlIG1lbW9yeQotCi0yMDEzLTAyLTI0IDA5OjMzOjAzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBJZiBzaGFyaW5nIGEgR3N0TWVtb3J5IGZhaWxzLCBmYWxsIGJhY2sgdG8gY29weWluZyBpdAotCi0yMDEzLTAyLTIzIDE4OjM2OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBkb2NzOiBwb3J0aW5nLXRvLTEuMC50eHQ6IHNvbWUgZWxlbWVudCBuYW1lcyBoYXZlIGNoYW5nZWQKLQotMjAxMy0wMi0yMyAwODoxOTo0OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogSXQncyBjb250aWd1b3VzLCBub3QgY29udGlub3VzCi0KLTIwMTMtMDItMjIgMTI6NDE6MDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiBBZGQgbmV3IG1lbW9yeSBmbGFnIHRvIHNwZWNpZnkgdGhhdCBtZW1vcnkgY2FuJ3QgYmUgbWFwcGVkCi0KLTIwMTMtMDItMjIgMDk6MDI6MjIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiBBZGQgbWVtb3J5IGZsYWcgdG8gbWFyayBwaHlzaWNhbGx5IGNvbnRpbm91cyBtZW1vcnkKLQotMjAxMy0wMi0xNiAyMzowMjoyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBkb24ndCBwYXNzIE5VTEwgb3V0Y2FwcyB0byB0cmFuc2Zvcm1fc2l6ZSBvbiBzaHV0ZG93bgotCSAgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgb24gdGhlIHNvdXJjZSBwYWQgbWlnaHQgeWllbGQgTlVMTCBjYXBzCi0JICBpZiB3ZSdyZSBiZWluZyBzaHV0IGRvd24gYW5kIHRoZSBzb3VyY2UgcGFkIGhhcyBhbHJlYWR5IGJlZW4KLQkgIGRlYWN0aXZhdGVkIGJ5IHRoZSBvdGhlciB0aHJlYWQgdGhhdCdzIGNoYW5naW5nIHN0YXRlLiBKdXN0IGJhaWwKLQkgIG91dCBpbiB0aGF0IGNhc2UsIGluc3RlYWQgb2YgcGFzc2luZyBOVUxMIGNhcHMgdG8gdGhlIHRyYW5zZm9ybV9zaXplCi0JICBmdW5jdGlvbiwgd2hpY2ggaXQgbWlnaHQgbm90IGV4cGVjdC4KLQkgIEZpeGVzIHNwdXJpb3VzIHdhcm5pbmdzIGluIGF1ZGlvcmVzYW1wbGUgc2h1dGRvd24gdW5pdCB0ZXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mzk5NgotCi0yMDEzLTAyLTIxIDEwOjE4OjE0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IEFkZCBPUkMKLQotMjAxMy0wMi0xOSAxODowMDo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogYXZvaWQgdW5leHBlY3RlZCBzaWRlLWVmZmVjdHMgb2YgR1NUX1dSSVRFXyogbWFjcm9zCi0JICBNYWtlIHN1cmUgdGhlIGRhdGEgYXJndW1lbnQgaXMgb25seSBldmFsdWF0ZWQgb25jZS4KLQotMjAxMy0wMi0xOSAxNzozNjo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JICBjaGVjazogYWRkIHNvbWUgbW9yZSBmYWlsX3VubGVzc18qKCkgbWFjcm9zIGZvciBjb252ZW5pZW5jZQotCSAgQVBJOiBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleAotCSAgQVBJOiBhc3NlcnRfZXF1YWxzX2ludF9oZXgKLQkgIEFQSTogZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0X2hleAotCSAgQVBJOiBhc3NlcnRfZXF1YWxzX2ludDY0X2hleAotCSAgQVBJOiBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0X2hleAotCSAgQVBJOiBhc3NlcnRfZXF1YWxzX3VpbnQ2NF9oZXgKLQkgIEFQSTogZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIKLQkgIEFQSTogYXNzZXJ0X2VxdWFsc19wb2ludGVyCi0KLTIwMTMtMDItMTkgMTI6NDI6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIHNjcmlwdHM6IGFkZCBuZXcgLWJhc2UgYWxsb2NhdG9ycyBsaWJyYXJ5IHRvIGdzdC11bmluc3RhbGxlZCBzZWFyY2ggcGF0aHMKLQotMjAxMy0wMi0xOCAyMDo0NzowNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IGFkZCB0d28gbW9yZSB0ZXN0cyB1c2luZyBjb2xsZWN0cGFkcyB3aXRoaW4gYW4gZWxlbWVudAotCSAgQWRkIGEgc3RhdGljIHBsdWdpbiB3aXRoIGEgcnVkaW1lbnRhcnkgZWxlbWVudCB1c2luZyBjb2xsZWN0cGFkcyBhbmQgZG8gc29tZQotCSAgcGlwZWxpbmUgYmFzZWQgdGVzdHMuCi0KLTIwMTMtMDItMTcgMTI6NTA6MDMgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKLQkgIGRvY3M6IEZpeCBzb21lIGFtYmlndW91cyB3b3JkaW5nCi0KLTIwMTMtMDItMTcgMTk6NTM6NTUgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuYzoKLQkgIHRyaWdnZXJjb250cm9sc291cmNlOiBhZGQgbWlzc2luZyBlbmRfaXRlciBjaGVjayBmb3Igc2VxdWVuY2UKLQkgIEF2b2lkIGFjY2Vzc2luZyB0aGUgZW5kLWl0ZXIsIHRoaXMgaXMgYSBtYXJrZXIgd2l0aG91dCBhIGRhdGEgZmllbGQuCi0KLTIwMTMtMDItMTcgMTM6MjA6MjAgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBkb2NzOiBsaW5rIHRvIHRoZSBhcHByb3ByaWF0ZSBtZXNzYWdlcyBmcm9tIGdzdF9lbGVtZW50c19zZXRfc3RhdGUoKSBkb2NzCi0JICBGb3IgYW4gYXN5bmMgc3RhdGUgY2hhbmdlIHJldHVybiBvbmUgd291bGQgd2FpdCBmb3IgQVNZTkNfRE9ORSBvciBTVEFURV9DSEFOR0VELgotCi0yMDEzLTAyLTE2IDE0OjIwOjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IGFkZCBzaW5jZSBtYXJrZXIgZm9yIG5ldyBDT1BZX0RFRVAgYnVmZmVyIGZsYWcKLQotMjAxMy0wMi0xNiAxNDo1OTowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBhZGQgb3B0aW9uIHRvIGRlZXAgY29weSBhIGJ1ZmZlcgotCSAgQWRkIGEgYnVmZmVyIGNvcHkgZmxhZyB0byBmb3JjZSBhIG1lbW9yeSBjb3B5IGluIGFsbCBjYXNlcy4KLQotMjAxMy0wMi0xNCAxNDowOToxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgUmV2ZXJ0ICJ1dGlsczogVXNlIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZSgpIGluIGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZSgpIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAxYTFhOWUxNDNmYjBlMTU1ZDc2MjdhYThlNDg5Y2Q1ZDA0YmMwOTNjLgotCSAgVGhpcyBicmVha3MgdGhlIHBpcGVsaW5lcy90YWdzY2hlY2tpbmcgdW5pdCB0ZXN0IGZvciBzb21lIHJlYXNvbgotCSAgKGZha2VzcmMgISBjYXBzZmlsdGVyICEgcXRtdXggbGlua2luZyBmYWlscyBub3cpLiBJdCBtaWdodCBiZQotCSAgYSBidWcgaW4gdGhlIHVuaXQgdGVzdCBvZiBjb3Vyc2UsIGJ1dCBzb21lb25lIHdpbGwgbmVlZCB0bwotCSAgaW52ZXN0aWdhdGUgdGhpcy4gUmV2ZXJ0aW5nIGZvciBub3cuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNTA4Ci0KLTIwMTMtMDItMTUgMTM6MDg6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RhbGxvY2F0b3IuYzoKLQkgIGFsbG9jYXRvcjogaW1wcm92ZSBmYWxsYmFjayBjb3B5IGZ1bmN0aW9uCi0JICBPbmx5IHVzZSB0aGUgYWxsb2NhdG9yIG9mIHRoZSBjb3BpZWQgbWVtb3J5IHdoZW4gd2UgY2FuIHVzZSB0aGUgZGVmYXVsdAotCSAgX2FsbG9jIGZ1bmN0aW9uIG9uIGl0LiBPdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgZGVmYXVsdAotCSAgYWxsb2NhdG9yIGZvciB0aGUgY29weS4KLQotMjAxMy0wMi0xNCAxMzo1NToxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgotCSAgZG9jczogZml4IGxvY2F0aW9uIGluIHVzZXIncyBob21lIGRpcmVjdG9yeSB3aGVyZSBHU3RyZWFtZXIgbG9va3MgZm9yIHBsdWdpbnMKLQkgIEl0J3MgYmFzZWQgb24gdGhlIHhkZyB1c2VyIGRhdGEgZGlyIG5vdyBpbiAxLjAuCi0KLTIwMTMtMDEtMjUgMDY6NTA6MjcgLTAzMDAgIE5pdiBTYXJkaSA8eGFpa2lAZXZpbGdpZ2dsZS5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IFVzZSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUoKSBpbiBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGUoKQotCSAgbW90aXZhdGlvbiBjb21lcyBmcm9tOiAvKiBGSVhNRTogd2h5IG5vdCBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUgKHBhZCk7ICovCi0JICB0aGlzIGNvZGUgcGF0aCBpcyBxdWl0ZSBuaWNlciwgd2Ugbm93IG9ubHkgcmV2ZXJ0IHRvIGNyZWF0aW5nIHRoZSB0ZW1wbGF0ZQotCSAgaWYgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlIGZhaWxzLgotCSAgd2l0aCB0aGlzIGZvcmssIHdlIGdhaW4gYSBub24tYWxsb2NhdGlvbiBvZiBHc3RDYXBzICp0ZW1wbGNhcHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTI1MDgKLQotMjAxMy0wMi0xMyAwMDoyNzoyOCArMDAwMCAgS3J6eXN6dG9mIEtvbm9wa28gPGtyenlzenRvZi5rb25vcGtvQGdtYWlsLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogVXNlIGdfdW5peF9zaWduYWxfYWRkKCkgdG8gaGFuZGxlIGtleWJvYXJkIGludGVycnVwdGlvbgotCSAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgdHJhZGl0aW9uYWwgc2lnbmFsIGhhbmRsZXIgYW5kIGEgMjUwbXMKLQkgIHRpbWVvdXQgY2FsbGJhY2sgaW4gdGhlIGV2ZW50IGxvb3AuICBBZGRpbmcgYSBHU291cmNlIHdpdGgKLQkgIGdfdW5peF9zaWduYWxfYWRkKCkgdG8gdGhlIEdNYWluTG9vcCBpcyBhIG11Y2ggbW9yZSBlbGVnYW50IHNvbHV0aW9uLgotCSAgVGhlIHNpZ25hbCBoYW5kbGVyIHdpdGggdGhpcyBhcHByb2FjaCBjYW4gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIGJ1cwotCSAgZGlyZWN0bHkgcmF0aGVyIHRoYW4gc2V0IGEgZmxhZyBhcyBhbGwgZGlzcGF0Y2hpbmcgaW50cmljYWNpZXMgYXJlIGhhbmRsZWQKLQkgIGJ5IEdMaWIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzNDgxCi0KLTIwMTMtMDItMTQgMDA6MDc6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgotCSAgZG9jczogZmxlc2ggb3VyICdSdW5uaW5nIEdTdHJlYW1lcicgYml0cyBhIGJpdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzYwNwotCi0yMDEzLTAyLTEzIDIzOjI3OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBkb2NzOiBmbGVzaCBvdXQgZ3N0LWxhdW5jaC0xLjAgbWFuIHBhZ2UgYSBsaXR0bGUKLQkgIEZpeCB1cCBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSByZWdpc3RyeS4KLQkgIE1lbnRpb24gbW9yZSBvcHRpb25zIGZvciBHU1RfREVCVUcgKHdpbGRjYXJkcyBhbmQKLQkgIG5hbWVkIGRlYnVnIGxldmVscykuCi0JICBFeHBsYWluIHdoYXQgdG8gZG8gd2l0aCB0aGUgZG90IGZpbGVzIHRoYXQgY2FuIGJlCi0JICBwcm9kdWNlZCBieSBzZXR0aW5nIEdTVF9ERUJVR19EVU1QX0RPVF9ESVIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzNjA3Ci0KLTIwMTItMTItMjcgMDA6MDM6MDYgKzAxMDAgIEdlcnQgTWljaGFlbCBLdWx5ayA8Z2t1bHlrQHlhaG9vLmRlPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1tZXRhZGF0YS54bWw6Ci0JICBkb2NzOiBmaXggYWR2YW5jZWQtbWV0YWRhdGEgY29kZSBleGFtcGxlIGluIG1hbnVhbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDc1MQotCi0yMDEzLTAyLTEzIDE2OjUyOjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBhY2NlcHQgTlVMTCBlcnJvciBhcmd1bWVudCBpbiBnc3RfbWVzc2FnZV9wYXJzZV97ZXJyb3Isd2FybmluZyxpbmZvfQotCSAgQW5kIHNpbXBsaWZ5IGNvZGUgYSBiaXQgd2hpbGUgYXQgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzNzA0Ci0KLTIwMTMtMDItMTMgMTc6MDA6MjMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IFJlbW92ZSBzZXQtc3R5bGUgYml0bWFzayBpbnRlcnNlY3Rpb24vdW5pb24vc3VidHJhY3Rpb24gZnVuY3Rpb25zCi0JICBTZXQgb3BlcmF0aW9ucyBvbiB0aGUgYml0bWFza3MgZG9uJ3QgbWFrZSBtdWNoIHNlbnNlIGFuZCByZXN1bHQKLQkgIGluIGludmFsaWQgY2FwcyB3aGVuIHVzZWQgYXMgYSBjaGFubmVsLW1hc2suIFRoZXkgYXJlIG5vdyBoYW5kbGVkCi0JICBleGFjdGx5IGxpa2UgaW50ZWdlcnMuCi0JICBUaGlzIGZ1bmN0aW9uYWxpdHkgd2FzIG5vdCB1c2VkIGFueXdoZXJlIGV4Y2VwdCBmb3IgdGVzdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMzcwCi0KLTIwMTMtMDItMTMgMTE6MTk6MDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IFRoZSBsYXRlbmN5IHF1ZXJ5IHNob3VsZCByZXR1cm4gVFJVRSBieSBkZWZhdWx0LCBkaWZmZXJlbnQgdG8gb3RoZXIgcXVlcmllcwotCSAgRml4ZXMgdW5pdCB0ZXN0IGZhaWx1cmVzIGNhdXNlZCBieSBmM2QyNjhkZTdmN2ZiMTE2MTc3OGE5YTk1ZTBkNTRkOGM4OWVmNjI2Ci0KLTIwMTMtMDItMTMgMTA6NDY6MzcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgc3RydWN0dXJlOiBNYWtlIHN1cmUgdGhhdCBzdWJzZXRzIGhhdmUgYWxsIGZpZWxkcyBvZiB0aGUgc3VwZXJzZXQKLQkgICJ2aWRlby94LWgyNjQscGFyc2VkPShib29sZWFuKXRydWUiIGlzIG5vdCBhIHN1cGVyc2V0IG9mCi0JICAidmlkZW8veC1oMjY0LHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSxhbGlnbm1lbnQ9KHN0cmluZyluYWwiCi0JICBmb3IgZXhhbXBsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTMzNjUKLQotMjAxMy0wMi0xMiAxMjozMjoyMyAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIHVwZGF0ZSBleHBvcnRzIGZvciBiYXNlcGFyc2UgQVBJIGNoYW5nZXMKLQotMjAxMy0wMi0xMiAxMjozMTo0MiAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBkb2MgdHlwbwotCi0yMDEzLTAyLTExIDE2OjUxOjQ4IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGFkZCBnc3RfYmFzZV9wYXJzZV9zZXRfdHNfYXRfb2Zmc2V0KCkKLQkgIFNldHMgdGhlIGJ1ZmZlciB0aW1lc3RhbXBzIGJhc2VkIG9uIGxhc3Qgc2VlbiB0aW1lc3RhbXBzIGF0IGEKLQkgIHBhcnRpY3VsYXIgb2Zmc2V0IGludG8gdGhlIGZyYW1lLgotCSAgQVBJOiBnc3RfYmFzZV9wYXJzZV9zZXRfdHNfYXRfb2Zmc2V0KCkKLQotMjAxMy0wMi0xMSAxNjo0Mjo0MSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBhZGFwdGVyOiBBZGQgZ3N0X2FkYXB0ZXJfcHJldl9bcGRddHNfYXRfb2Zmc2V0KCkKLQkgIE9yaWdpbmFsIHBhdGNoIHdyaXR0ZW4gYnkgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHJkaW8uY29tPi4KLQkgIEFQSTogZ3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0KCkKLQkgIEFQSTogZ3N0X2FkYXB0ZXJfcHJldl9kdHNfYXRfb2Zmc2V0KCkKLQotMjAxMy0wMi0wOSAxODoxNDowOSArMDEwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBxdWVyeSBzaW5rIGVsZW1lbnRzIGFuZCBzb3VyY2UgcGFkcyBvZiB0aGUgYmluCi0JICBnc3RfYmluX3F1ZXJ5KCkgbm93IGZvcndhcmRzIHRoZSBxdWVyeSB0byB0aGUgc291cmNlIHBhZHMgYXMgd2VsbCBpZgotCSAgbm9uZSBvZiB0aGUgc2lua3Mgb2YgdGhlIGJpbiBzYXRpc2ZpZWQgdGhlIHF1ZXJ5LiBUaGlzIGhlbHBzIGluIHRoZQotCSAgY2FzZSBvZiBEVVJBVElPTiBxdWVyaWVzIGRvbmUgYSBiaW4gY29udGFpbmluZyBhIHNvdXJjZSBlbGVtZW50LgotCSAgRml4ZXMgYnVnIDYzODc0OQotCi0yMDEzLTAyLTA3IDEyOjQ3OjAyICswMTAwICBBbGV4YW5kZXIgU2NocmFiIDxhbGV4YXNAYXhpcy5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogTGV0IGdzdF9iaW5fc2VuZF9ldmVudCgpIHNlbmQgZXZlbnRzIHRvIGdob3N0IHBhZHMgYXMgd2VsbAotCi0yMDEzLTAyLTExIDIyOjUyOjI1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgY29tcGF0OiBraWxsIG1vcmUgdXNlcyBvZiBnc3RfcGFkX3NldF9jYXBzKCkKLQotMjAxMy0wMi0xMiAwMDowODo1MSArMTEwMCAgVGltICdtaXRocm8nIEFuc2VsbCA8bWl0aHJvQG1pdGhpcy5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IEFkZGluZyBvZmZzZXQgdG8gR3N0U2VnbWVudCBzZXJpYWxpemUvZGVzZXJpYWxpemUuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzNTg3Ci0KLTIwMTMtMDItMDkgMTI6MzI6MDIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogaW1wcm92ZSBQVFMgaW50ZXJwb2xhdGluZwotCSAgLi4uIGFuZCB0cmFja2luZyBvZiBEVFMuICBGaXhlcyBjYXNlcyB3aGVyZSBQVFMgaXMgbG9ja2VkIG9uIHRvIHRoZQotCSAgRFRTIG9mIGFuIGluY29taW5nIGJ1ZmZlciB3aXRoIG5vIFBUUyB3aXRoIGludmFsaWQgZGF0YSwgbGVhZGluZyB0bwotCSAgbm8gb3V0Z29pbmcgUFRTIChzaW5jZSBpdCBpcyBub3QgYWxsb3dlZCBzbWFsbGVyIHRoYW4gRFRTKS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE0ODEKLQotMjAxMy0wMi0wOCAyMToyODoxOCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0xLjAudHh0OgotCSAgZG9jczogYWRkIG1vcmUgcG9ydGluZyBkZXRhaWxzCi0KLTIwMTMtMDItMDggMjE6MjE6NDggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5jOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5jOgotCSAgY29udHJvbGJpbmRpbmc6IGVycm9yIGhhbmRsaW5nIGZvciBiaW5kaW5nIGNvbnRyb2xzb3VyY2VzIHRvIHdyb25nIHByb3BlcnRpZXMKLQkgIEFkZCB3YXJuaW5nIGlmIHByb3BlcnR5IGlzIG5vdCBzdWl0YWJsZSBmb3IgY29udHJvbGxpbmcuIFdoZW4gYWRkaW5nIGEgY29udHJvbC0KLQkgIGJpbmRpbmcgY2hlY2sgdGhhdCBwc3BlYyE9TlVMTC4KLQotMjAxMy0wMi0wNyAxMzowODo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IHJlbW92ZSBvbGQgZG9jcyBhYm91dCBpdGVyYXRvcnMKLQotMjAxMy0wMi0wNyAxMjo1MjoyNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiByZW1vdmUgb2xkIGNvbW1lbnQKLQkgIFRoZSBpdGVyYXRvcnMgbm93IHJldHVybiBhIEdWYWx1ZSBhbmQgbm90IHRoZSBvYmplY3QgZGlyZWN0bHkgYW55bW9yZS4KLQotMjAxMy0wMi0wNyAxMjo1MDowOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiByZXNldCBHVmFsdWUgZnJvbSBpdGVyYXRvciBhZnRlciB1c2FnZQotCi0yMDEzLTAyLTA1IDE3OjE1OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzaW5rLmM6Ci0JICB0ZXN0czogYWRkIGJhc2VzaW5rIHRlc3QKLQotMjAxMy0wMi0wNSAxNzoxOTo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGhhbmRsZSBzeW5jIG9mIEVPUyBhZnRlciBpdGVtIHdpdGhvdXQgZHVyYXRpb24KLQkgIEFmdGVyIGEgYnVmZmVyIG9yIEdBUCB3aXRob3V0IGR1cmF0aW9uLCBhbiBFT1MgZXZlbnQgc2hvdWxkIGJlIHJlbmRlcmVkCi0JICBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyODY4Ci0KLTIwMTMtMDItMDIgMTE6NTU6NTIgLTA4MDAgIE5hdGUgQm9nZGFub3dpY3ogPG5hdGV6YkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSAgZ3N0cGlwZWxpbmU6IGZpeCBmYWlsZWQgYXNzZXJ0aW9uIGNhdXNlZCBieSBzZWVraW5nIHBpcGVsaW5lIHdpdGggTlVMTCBjbG9jawotCSAgVW5kZXIgY2VydGFpbiBHU1RfU1RBVEVfQ0hBTkdFRF9QQVVTRURfVE9fUExBWUlORyB0cmFuc2l0aW9ucywgYSBwaXBlbGluZSB3aXRoCi0JICBhIE5VTEwgY2xvY2sgd2lsbCBmYWlsIGFuIGFzc2VydGlvbiBkdWUgdG8gYW4gdW5jaGVja2VkIGNhbGwgdG8gZ3N0X29iamVjdF9yZWYoKS4KLQkgIFRoaXMgaXMgZml4ZWQgYnkgc2ltcGx5IGFkZGluZyBhIGNoZWNrIGFuZCBvbmx5IHJlZi1pbmcgaWYgdGhlIGNsb2NrIGlzIG5vdCBOVUxMLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzA2NQotCi0yMDEzLTAyLTA1IDEzOjQ0OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JICBzdHJ1Y3R1cmU6IGNoYW5nZSBhcmd1bWVudCBuYW1lIGZvciBkb2NzCi0KLTIwMTMtMDItMDQgMTA6MzA6MzIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBkZWJ1Z3V0aWxzOiBmaXggb3JkZXIgb2YgY2FwcyBvbiBhbiB1bm5lZ290aWF0ZWQgbGluawotCSAgaGVhZGxhYmVsIGlzIHRoZSBzaW5rX3BhZCAod2hlcmUgdGhlIGxpbmsgcG9pbnRzIHRvKSBhbmQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLgotCi0yMDEzLTAyLTAxIDIxOjU5OjQxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy50eXBlczoKLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkgIGRvY3M6IHVwZGF0ZSB0aGUgY29udHJvbGxlciBkb2NzCi0JICBBZGQgdGhlIGNvbnRyb2wgYmluZGluZ3MgdG8gdGhlIGRvY3MuIEFkZCBhIGxpdHRsZSBtb3JlIGRldGFpbC4KLQotMjAxMy0wMi0wMSAyMTo1Nzo0NSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0xLjAudHh0OgotCSAgcG9ydGluZzogYSBmZXcgdXBkYXRlcyBmb3IgdGhlIHBvcnRpbmcgZ3VpZGUKLQotMjAxMy0wMS0zMCAxMzowNjo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JICBkYXRhcXVldWU6IGNhbid0IHBhc3MgYSBHVHlwZSB0aHJvdWdoIEdJTlRfVE9fUE9JTlRFUgotCSAgVXNlIEdTSVpFX1RPX1BPSU5URVIgaW5zdGVhZC4gc2l6ZW9mKEdUeXBlKSBtYXkgYmUgbGFyZ2VyCi0JICB0aGFuIHNpemVvZihndWxvbmcpIGFuZCBzaXplb2YoaW50KSwgc28gdGhlIGNhc3RzIG1heQotCSAgY2hvcCBvZmYgc29tZSBiaXRzIGZyb20gdGhlIEdUeXBlIHZhbHVlIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4KLQotMjAxMy0wMS0yOSAxMjo0MDo1MiArMDEwMCAgQWxleGFuZGVyIFNjaHJhYiA8YWxleGFzQGF4aXMuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgotCSAgdGVzdHM6IHVuaXQgdGVzdCB0byB0cmlnZ2VyIHRoZSBxdWV1ZS9mbHVzaGluZyByYWNlIGNvbmRpdGlvbiBidWcgZm9yIGFsbG9jYXRpb24gcXVlcmllcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjY5MQotCi0yMDEzLTAxLTI4IDExOjA1OjI4ICswMTAwICBBbGV4YW5kZXIgU2NocmFiIDxhbGV4YXNAYXhpcy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiByZW1vdmUgcXVlcnkgZnJvbSBxdWV1ZSBpZiBxdWV1ZSBpcyBmbHVzaGluZwotCSAgV2hlbiBxdWVyeWluZyBhIHF1ZXVlIHRoYXQgaXMgZmx1c2hpbmcgd2UgZW5kIHVwIGFkZGluZwotCSAgYSBxdWVyeSB0byB0aGUgcXVldWVhcnJheSB3aXRob3V0IHRha2luZyBhIHJlZmVyZW5jZSB0bwotCSAgdGhhdCBxdWVyeSAoYmVjYXVzZSB0aGUgbm9ybWFsIGZ1bmN0aW9uYWxpdHkgaXMgdG8gYmxvY2sKLQkgIHVudGlsIHRoYXQgcXVlcnkgaXMgZG9uZSBhbmQgZGlzY2FyZGVkIGZyb20gdGhlIHF1ZXVlKS4KLQkgIFRoaXMgbGF0ZXIgY2F1c2VzIHByb2JsZW0gaWYgdGhlIHF1ZXJ5IGlzIHVucmVmZmVkIG91dHNpZGUKLQkgIG9mIHRoZSBxdWV1ZSBiZWZvcmUgd2UgZGlzY2FyZCB0aGUgcXVldWUuIFRoZXJlIGlzIGEgY2hlY2sKLQkgIHRvIGF2b2lkIHVucmVmZmluZyBhbnkgbGluZ2VyaW5nIHF1ZXJ5LW9iamVjdHMsIGJ1dCBzaW5jZQotCSAgdGhlIHF1ZXJ5IGhhcyBiZWVuIGRlbGV0ZWQgdGhhdCBjaGVjayBmYWlscy4KLQkgIFRoaXMgY29tbWl0IGRlcGVuZHMgb24gb3RoZXIgZml4ZXMgZG9uZSB0byBnc3RfcXVldWVfYXJyYXlfZmluZCgpCi0JICBhbmQgZ3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudCgpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjY5MQotCi0yMDEzLTAxLTMwIDExOjU1OjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5LmM6Ci0JICBxdWV1ZWFycmF5OiBtYWtlIF9maW5kKCkgZmluZCB0aGUgdmFsdWUgaWYgbm8gY29tcGFyZSBmdW5jdGlvbiBpcyBwcm92aWRlZAotCSAgQWxsb3cgTlVMTCBhcyBjb21wYXJlIGZ1bmN0aW9uIGZvciBkaXJlY3QgdmFsdWUgbG9va3VwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjY5MQotCi0yMDEzLTAxLTMwIDExOjM0OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svbGlicy9xdWV1ZWFycmF5LmM6Ci0JICB0ZXN0czogY2hlY2sgcmV0dXJuIHZhbHVlIG9mIGdzdF9xdWV1ZV9hcnJheV9kcm9wX2VsZW1lbnQoKSB0b28KLQkgIFdhcyBhZGRlZCB3aGVuIHRoZSBBUEkgd2FzIG1hZGUgcHVibGljIGluIGdpdCBtYXN0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNjkxCi0KLTIwMTMtMDEtMjkgMjI6NTQ6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvcXVldWVhcnJheS5jOgotCSAgdGVzdHM6IG9uZSBtb3JlIHRlc3QgZm9yIGdzdF9xdWV1ZV9hcnJheV9kcm9wX2VsZW1lbnQoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjY5MQotCSAgQ29uZmxpY3RzOgotCSAgdGVzdHMvY2hlY2svbGlicy9xdWV1ZWFycmF5LmMKLQotMjAxMy0wMS0yOCAxMTowNToyOCArMDEwMCAgQWxleGFuZGVyIFNjaHJhYiA8YWxleGFzQGF4aXMuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuYzoKLQkgIHF1ZXVlYXJyYXk6IGZpeCBnc3RfcXVldWVfYXJyYXlfZmluZCgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNjkxCi0KLTIwMTMtMDEtMjggMTE6MDU6MjggKzAxMDAgIEFsZXhhbmRlciBTY2hyYWIgPGFsZXhhc0BheGlzLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5LmM6Ci0JICBxdWV1ZWFycmF5OiBmaXggZ3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudCgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNjkxCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuYwotCi0yMDEzLTAxLTI5IDE2OjU1OjIzICswMjAwICBTcmVlcmVuaiBCYWxhY2hhbmRyYW4gPHNyZWVyZW5qLmJhbGFjaGFuZHJhbkBpbnRlbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLWRvY3MuaDoKLQkgIGRvY3M6IGFsaWduIHRoZSBjb21tZW50cyBjb3JyZWN0bHkgd2l0aCB0aGUgZGVjbGFyYXRpb24gaW4gYml0cmVhZGVyIGRvY3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTI4MDkKLQotMjAxMy0wMS0yOSAwOTo0NToyMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBoYW5kbGUgcmVuZWdvdGlhdGlvbiBjb3JyZWN0bHkKLQkgIERvbid0IHJldHJ5IHRvIG5lZ290aWF0ZSB3aGVuIHdlIGZhaWwgdG8gbmVnb3RpYXRlIGJ1dCBpbnN0ZWFkIHByb2R1Y2UgYQotCSAgTk9UX05FR09USUFURUQgZXJyb3IuIFdlIG9ubHkgd2FudCB0byByZXRyeSBuZWdvdGlhdGlvbiBpZiB0aGUgcmVzdWx0IGZyb20KLQkgIGdzdF9wYWRfcHVzaCgpIHJldHVybmVkIE5PVF9ORUdPVElBVEVELgotCi0yMDEzLTAxLTI4IDIwOjQxOjIwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYTk0MjI5MyB0byAyZGUyMjFjCi0KLTIwMTMtMDEtMjggMTM6MDU6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvc3RyZWFtLXN0YXR1cy5jOgotCSAgZXhhbXBsZTogZml4IEZJWE1FIGluIGV4YW1wbGUKLQkgIFVzZSBzZXRwcmlvcml0eSB0byByYWlzZSBwcmlvcml0eQotCi0yMDEzLTAxLTI3IDA2OjIwOjUxIC0wODAwICBTaW1vbiBGZWx0bWFuIDxzZmVsdG1hbkBzcmMuZ25vbWUub3JnPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBnLWk6IGFkZCBidWlsdCBlbnVtdHlwZXMgaGVhZGVycyBhbmQgc291cmNlcyB0byBnaXIgY3JlYXRpb24KLQkgIEFkZCBnc3RlbnVtdHlwZXMuaC9jIGZvciBpbmNsdXNpb24gd2l0aCBnLWlyLXNjYW5uZXIuIFRoaXMgZml4ZXMKLQkgIHByb2JsZW1zIHdoZXJlIGludHJvc3BlY3Rpb24gYmFzZWQgYmluZGluZ3MgdGhpbmsgR3N0U3RhdGUgaXMKLQkgIHR5cGVsZXNzIGR1ZSB0byB0aGUgR1R5cGUgbm90IGJlaW5nIGluY2x1ZGVkIGFzIGFuIGFubm90YXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMTg1Ci0KLTIwMTMtMDEtMjcgMDk6MTg6MDAgKzA1MzAgIEIuUHJhdGhpYmhhIDxwcmF0aGliaGFiQGNkYWMuaW4+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzoKLQkgIHRlc3RzOiB1c2UgZ190aW1lb3V0X2FkZF9zZWNvbmRzIGluIHBpcGVsaW5lIHN0cmVzcyB0ZXN0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNjEyCi0KLTIwMTMtMDEtMjQgMTc6NTA6MzEgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBQdXQgdGhlIHJpZ2h0IHBhdGggZm9yIHRoZSBnc3R0dGVzdGNsb2NrIGluY2x1ZGUgZmlsZQotCi0yMDEzLTAxLTI0IDE1OjUwOjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JICBwd2c6IHJlbmFtZSB2YXJpYWJsZQotCSAgVGhlIGZpbHRlciB2YXJpYWJsZSB3YXMgdXNlZCB0d2ljZSBmb3IgZGlmZmVyZW50IHRoaW5ncy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTI0MzIKLQotMjAxMy0wMS0xNyAyMTozNTo0OCAtMDMwMCAgTml2IFNhcmRpIDx4YWlraUBldmlsZ2lnZ2xlLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZTogb25seSByZW1vdmUgZmxhZyBpZiBzZXQuCi0JICB0aGUgY29kZSBpZmVkIGEgZGVidWcgc3RhdGVtZW50LCB0aGF0IGNhbid0IGJlIHJpZ2h0LiBhbnl3YXksIHRoZSB3YXkgaXQgaXMsCi0JICB3ZSBkb24ndCByZWFsbHkgbmVlZCB0aGF0IGJyYW5jaCwgYXMgd2Ugc2V0IHRoZSBmbGFnIHRvIHVuc2V0IG9ubHkgaWYgc2V0Ci0JICAoYW5kIHRoYXQgY2FuJ3QgZmFpbCkgaGVuY2UgdGhlIGVuZCByZXN1bHQgaXMgYWx3YXlzIHRvIHVuc2V0IHRoZSBmbGFnLgotCSAgU2lnbmVkLW9mZi1ieTogTml2IFNhcmRpIDx4YWlraUBldmlsZ2lnZ2xlLmNvbT4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE5ODUKLQotMjAxMy0wMS0xNyAyMTo0MzoyNSAtMDMwMCAgTml2IFNhcmRpIDx4YWlraUBldmlsZ2lnZ2xlLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBzZXQgTkVFRF9SRUNPTkZJR1VSRSBmbGFnIGlmIG5lZ290aWF0ZSBmYWlscwotCSAgV2hlbiBuZWdvdGlhdGlvbiBmYWlscywgbWFyayB0aGUgcGFkIGFzIG5lZWRpbmcgYSByZWNvbmZpZ3VyZSBhZ2FpbiBzbwotCSAgdGhhdCBpdCBnZXRzIHBpY2tlZCB1cCBhZ2FpbiBuZXh0IHRpbWUuCi0JICBTaWduZWQtb2ZmLWJ5OiBOaXYgU2FyZGkgPHhhaWtpQGV2aWxnaWdnbGUuY29tPgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTk4NgotCi0yMDEzLTAxLTE5IDEyOjUxOjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcGFkOiBhZGQgZ3N0X3BhZF9nZXRfc3RyZWFtX2lkKCkgdXRpbGl0eSBmdW5jdGlvbgotCSAgQVBJOiBnc3RfcGFkX2dldF9zdHJlYW1faWQoKQotCi0yMDEzLTAxLTE4IDE2OjA1OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgdG9vbHM6IG1pbm9yIGFkZGl0aW9uIHRvIGdzdC1sYXVuY2gtMS4wIG1hbiBwYWdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyMDE1Ci0KLTIwMTMtMDEtMTggMTY6MDE6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICB0b29sczogdXBkYXRlIGdzdC1sYXVuY2gtMS4wIG1hbiBwYWdlIGZvciBuZXcgZGVidWcgbGV2ZWxzCi0JICBUaGVyZSBhcmUgbW9yZSBkZWJ1ZyBsZXZlbHMgdGhlc2UgZGF5cywgbm90IG9ubHkgMC01LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjAxNQotCi0yMDEzLTAxLTE3IDAwOjM4OjE0IC0wNjAwICBEYW5pZWwgRMOtYXogPHlvc295QGRhbmllbGRpYXoub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2FybS5oOgotCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9hcm0uaDoKLQkgIHRlc3RzOiBmaXggQUJJIGNoZWNrIHN0cnVjdCBzaXplcyBmb3IgQVJNCi0JICBhbmQgcmUtZW5hYmxlIEFCSSBjaGVjayBmb3IgQVJNLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTgyOAotCi0yMDEzLTAxLTE2IDE3OjI0OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBkb2NzOiBhZGQgYSBub3RlIHRvIHRoZSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcigpIGRvY3MgYWJvdXQgYnVmZmVyIGZsYWdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyMTEwCi0KLTIwMTMtMDEtMTYgMTE6Mjk6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKLQkgIHRlc3RzOiBkaXNhYmxlIEFCSSBjaGVja3MgZm9yIGFyY2hpdGVjdHVyZXMgd2hlcmUgdGhlIHN0cnVjdCBzaXplcyBhcmUgbm90IHVwLXRvLWRhdGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE4MjgKLQotMjAxMy0wMS0xNSAxNTowMzo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAyYTA2OGNlIHRvIGE5NDIyOTMKLQotMjAxMy0wMS0xNSAxMzo0NzozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgVXNlIEdTVF8qXzFfMCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZXZlcnl3aGVyZQotCSAgVGhlIF8xXzAgc3VmZml4ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZQotCSAgbm9uLXN1ZmZpeGVkIG9uZXMsIHNvIGlmIHdlJ3JlIGluIGFuIGVudmlyb25tZW50IHRoYXQKLQkgIHNldHMgdGhlIF8xXzAgc3VmZml4ZWQgb25lcywgc3VjaCBhcyBqaGJ1aWxkLCB3ZSBuZWVkCi0JICB0byBzZXQgdGhvc2UgdG8gbWFrZSBzdXJlIG91cnMgYWN0dWFsbHkgYWx3YXlzIGdldAotCSAgdXNlZC4KLQotMjAxMy0wMS0xNSAxMzo0NzoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIGZvciBuZXcgdHJhbnNsYXRlZCBzdHJpbmcKLQotMjAxMy0wMS0xNSAwOTo0MjoyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSAgcGlwZWxpbmU6IGFkZCBhbGxvdy1ub25lIGFubm90YXRpb24gZm9yIGdzdF9waXBlbGluZV9uZXcoKSdzIG5hbWUgcHJvcGVydHkKLQotMjAxMy0wMS0xNCAyMDowMjo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgZG9jczogbWlub3IgR3N0QmFzZVBhcnNlIGRvY3MgZml4ZXMKLQkgIEV4cG9zZSBkb2NzIGZvciBnc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhbWUoKS4KLQotMjAxMy0wMS0xNCAxNzowMToyMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSAgdHlwZWZpbmQ6IGhhbmRsZSBtYXAgZmFpbHVyZQotCi0yMDEzLTAxLTE0IDE3OjAwOjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGhhbmRsZSBtYXAgZmFpbHVyZQotCi0yMDEzLTAxLTE0IDE3OjAwOjIzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGhhbmRsZSBtYXAgZmFpbHVyZQotCi0yMDEzLTAxLTEzIDE0OjQ1OjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogYWRkIHZmdW5jcyB0byBpbnRlcmNlcHQgcXVlcmllcwotCSAgVXNlZnVsIGZvciB2aWRlbyBwYXJzZXMgdGhhdCB3YW50IHRvIGF0dGFjaCBtYXR0ZXIgb3IKLQkgIGZpbmQgb3V0IGlmIGRvd25zdHJlYW0gc3VwcG9ydHMgY2VydGFpbiBtZXRhcy4KLQkgIEFQSTogR3N0QmFzZVBhcnNlQ2xhc3M6OnNyY19xdWVyeSgpCi0JICBBUEk6IEdzdEJhc2VQYXJzZUNsYXNzOjpzaW5rX3F1ZXJ5KCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE0NzUKLQotMjAxMy0wMS0xMiAyMDo1NDoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZml4IHVwIG5hbWUgb2YgZGVmYXVsdCBldmVudCB2ZnVuY3MKLQotMjAxMy0wMS0xMCAxMTozNDoxNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5oOgotCSAgY29udHJvbGJpbmRpbmc6IGhpZGUgb25lIHVudXNlZCB0eXBlZGVmCi0JICBUaGlzIGlzIG5vdCB1c2VkIGludGVybmFsbHkuCi0KLTIwMTMtMDEtMTAgMTE6MzM6NDIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5jOgotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuYzoKLQkgIGRvY3M6IGltcHJvdmUgYXBpIGRvY3MgZm9yIGNvbnRyb2xzb3VyY2UgYW5kIC1iaW5kaW5nCi0KLTIwMTMtMDEtMDUgMTY6MzA6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSAgdGVzdHM6IGZpeCBsZWFrIGluIGdob3N0cGFkIHVuaXQgdGVzdAotCSAgVGhlIGNyZWF0ZWQgcGFkIGlzIG5ldmVyIHVzZWQgYW5kIG92ZXJ3cml0dGVuIHdpdGgKLQkgIGFub3RoZXIgbmV3bHktY3JlYXRlZCBwYWQgYSBmZXcgbGluZXMgYmVsb3cuCi0KLTIwMTMtMDEtMDQgMTI6Mjc6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKLQkgIGRvY3M6IG1pbm9yIHN5c3RlbXNjbG9jayBkb2MgZml4Ci0KLTIwMTMtMDEtMDMgMTA6MTY6MTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogSW5pdGlhbGl6ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlCi0KLTIwMTItMTItMzAgMjM6MzU6NDggKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBhZGFwdGVyOiByZXR1cm4gZ3NzaXplIGZyb20gZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fKiBmdW5jdGlvbnMKLQkgIEFzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiBpcyAtMSB3aGVuIHRoZSBtYXRjaCBpcyBub3QgZm91bmQKLQotMjAxMy0wMS0wMSAxMDoyMzo1OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBDaGVjayBpZiBidWZmZXJzIGFyZSB0b28gbGF0ZSBiZWZvcmUgY2FsbGluZyBwcmVwYXJlL3ByZXBhcmVfbGlzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDkzNgotCi0yMDEyLTEyLTMwIDIzOjQ4OjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IHJlcGxhY2UgZGVwcmVjYXRlZCBBTV9DT05GSUdfSEVBREVSIHdpdGggQUNfQ09ORklHX0hFQURFUlMKLQkgIEFNX0NPTkZJR19IRUFERVIgaGFzIGJlZW4gcmVtb3ZlZCBpbiB0aGUganVzdC1yZWxlYXNlZCBhdXRvbWFrZSAxLjEzOgotCSAgaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTEyL21zZzAwMDM4Lmh0bWwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTA4ODEKLQotMjAxMi0xMi0yMiAxNjo1MDo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICBjYXBzLCBzdHJ1Y3R1cmUsICB0YWdsaXN0OiBtaWNyby1vcHRpbWlzYXRpb25zCi0JICBBdm9pZCBzb21lIHVubmVjZXNzYXJ5IEdWYWx1ZSBjb3B5aW5nIGJ5IG1ha2luZyB1c2Ugb2YKLQkgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSgpIHdoZXJlIHBvc3NpYmxlLgotCi0yMDEyLTEyLTIyIDE2OjI5OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBzb21lIG1pY3JvLW9wdGltaXNhdGlvbnMKLQkgIEF2b2lkIHVubmVjZXNzYXJ5IHZhbHVlIGNvcHlpbmcsIGFuZCB1bm5lY2Vzc2FyeSBpbml0L3Vuc2V0Ci0JICBjeWNsZXMgd2hpY2ggYWxsIGdvIHRocm91Z2ggdGhlIHZhbHVlIHRhYmxlLiBUaGVyZSdzIGEgYnVuY2gKLQkgIG9mIHBsYWNlcyB3aGVyZSB3ZSBjb3B5IGEgdmFsdWUgYW5kIHRoZW4gdW5zZXQgaXQgaW4gdGhlIG5leHQKLQkgIGxpbmUsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgb3ZlciB0aGUgc291cmNlIHZhbHVlLgotCi0yMDEyLTEyLTIyIDE2OjUzOjQ3ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBzY3JpcHRzL2NyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaDoKLQkgIHNjcmlwdHM6IGZpeCBsb2NhdGlvbiBvZiByZXBvc2l0b3J5IHdpdGggc3NoCi0KLTIwMTItMTItMjEgMTY6MzY6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RiaW4uaDoKLQkgIGJpbjogYWRkIGZsYWcgdG8gZGlzYWJsZSByZXN5bmMgc3RhdGUgY2hhbmdlCi0JICBBZGQgYSBHU1RfQklOX0ZMQUdfTk9fUkVTWU5DIHRoYXQgZGlzYWJsZXMgYSByZXN5bmMgd2hlbiBhbiBlbGVtZW50IGlzIGFkZGVkLAotCSAgcmVtb3ZlZCBvciBsaW5rZWQgaW4gdGhlIGJpbi4gVGhpcyBpcyBpbnRlcmVzdGluZyBmb3IgY29tcGxleCBiaW5zIHRoYXQKLQkgIGR5bmFtaWNhbGx5IGFkZCBlbGVtZW50cyB0byB0aGVtc2VsdmVzIGFuZCB3YW50IHRvIG1hbmFnZSB0aGUgc3RhdGUgb2YgdGhvc2UKLQkgIGVsZW1lbnRzIHdpdGhvdXQgaW50ZXJmZXJlbmNlIGZyb20gcmVzeW5jcy4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkwNDIwCi0KLTIwMTItMTItMjEgMTA6MDk6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gZG9jdW1lbnQgYSBsaXR0bGUKLQotMjAxMi0xMi0yMCAxNjo0MDowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6Ci0JICBzeXN0ZW1jbG9jazogYWRkIE9USEVSIGNsb2NrIHR5cGUKLQkgIEFkZCBhbiBPVEhFUiBjbG9jayB0eXBlIHNvIHRoYXQgc3ViY2xhc3NlcyBhcmUgYWJsZSB0byBtYXJrIHRoZW1zZWx2ZXMgYXMKLQkgIHVzaW5nIHNvbWUgb3RoZXIgY2xvY2sgc291cmNlIHRoYW4gdGhlIHJlYWx0aW1lIG9yIG1vbm90b25pYyBjbG9jay4KLQotMjAxMi0xMi0yMCAxMzozMTowMiArMDEwMCAgQnJhbmtvIFN1YmFzaWMgPGJyYW5rb0BheGlzLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBjb3JyZWN0IG92ZXJydW4gaGFuZGxpbmcKLQkgIFRoZSBjb250cm9sIG9mIHdoZXRlaGVyIGEgU2luZ2xlUXVldWUgaXMgZnVsbCBpcyBub3QgY29ycmVjdC4KLQkgIFJld3JvdGUgc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IoKSBzbyBpdCBjaGVja3MgdGhlIGNvcnJlY3QgdmFyaWFibGVzCi0JICB3aGVuIGNoZWNraW5nIGlmIHRoZSBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgaGFyZCBsaW1pdHMsIGFuZCB0bwotCSAgaW5jcmVhc2UgdGhlIG1heCBidWZmZXIgbGltaXQgb25jZSBmb3IgZWFjaCBjYWxsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDU1NwotCi0yMDEyLTEyLTIwIDExOjU5OjU0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBpbXBsZW1lbnQgYnVmZmVyaW5nIHF1ZXJ5IGZvciBhbGwgbW9kZXMKLQkgIEFsc28gaW1wbGVtZW50IHRoZSBidWZmZXJpbmcgcXVlcnkgZm9yIFNUUkVBTSBtb2RlLgotCi0yMDEyLTEyLTIwIDExOjMwOjI1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiByZWZhY3RvciBidWZmZXJpbmcgcGVyY2VudCBhbmQgc3RhdHMKLQkgIE1ha2UgbWV0aG9kcyB0byBnZXQgdGhlIGN1cnJlbnQgYnVmZmVyaW5nIHBlcmNlbnQgYW5kIHRoZSBzdGF0cy4gV2Ugd2lsbCB1c2UKLQkgIHRoaXMgaW4gdGhlIHF1ZXJ5IGxhdGVyLgotCi0yMDEyLTEyLTEzIDEzOjQ3OjI5ICswMTAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZml4IGludmFsaWQgb3V0cHV0IHRpbWVzdGFtcHMgaW4gc29tZSBjYXNlcwotCi0yMDEyLTEyLTE0IDE1OjIyOjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBORVdTRUdNRU5UIC0+IFNFR01FTlQKLQotMjAxMi0xMi0xNCAxNDowMzo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgcGx1Z2luIGRvY3MKLQkgIFVwZGF0ZSBhcmdzL3NpZ25hbHMgZXRjLgotCi0yMDEyLTEyLTE0IDExOjA5OjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c2FtcGxlLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBhZGQgZGVidWcgY2F0ZWdvcnkKLQkgIEFkZGluZyBhIGRlYnVnIGNhdGVnb3J5IGlzIG5pY2VyIHRoYW4gbG9nZ2luZyB0byB0aGUgZGVmYXVsdCBjYXRlZ29yeQotCi0yMDEyLTEyLTE0IDExOjA4OjU3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogaW1wcm92ZSBkZWJ1ZwotCi0yMDEyLTEyLTEzIDE0OjQ4OjM1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGNhbGwgX3N0b3Agd2hlbiBzdGFydCBmYWlsZWQKLQkgIFdoZW4gd2UgZmFpbGVkIHRvIGNvbXBsZXRlIHRoZSBzdGFydCwgY2FsbCBzdG9wIGFnYWluLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBhbGwKLQkgIHN1Y2Nlc3NmdWxsIGNhbGxzIHRvIF9zdGFydCBhcmUgcGFpcmVkIHdpdGggYSBfc3RvcC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc4NDUKLQotMjAxMi0xMi0xMiAxNjo0NDoxNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9iYXNlL2Jhc2UuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svY2hlY2suaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9jb250cm9sbGVyLmg6Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvbmV0Lmg6Ci0JICBsaWJzOiBVc2UgZm9vL2Zvby5oIGFzIHNpbmdsZS1pbmNsdWRlIGhlYWRlciBjb25zaXN0ZW50bHkgZXZlcnl3aGVyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4ODc4NQotCi0yMDEyLTEyLTExIDE2OjQ2OjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwYXNzIERUUyBhbmQgUFRTIHRvIGhhbmRsZV9idWZmZXIKLQkgIFRoaXMgbWFrZXMgaXQgaGFuZGxlIHRoZSB0aW1lc3RhbXBzIGNvcnJlY3RseSBhbmQgYXZvaWRzIHVzaW5nIGEgd3JvbmcgdGltZXN0YW1wCi0JICBmb3IgdGhlIG91dHB1dC4KLQotMjAxMi0xMi0xMSAxNjo0NjowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogaW1wcm92ZSBkZWJ1ZwotCSAgQWRkIHB0cyBhbmQgZHRzIGluIGRlYnVnIGxvZwotCi0yMDEyLTExLTAzIDE2OjU5OjM5ICswMDAwICBBbmRyemVqIEJpZW5pZWsgPGFuZHloZWxwQGdtYWlsLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogcmVwb3J0IGV4ZWN1dGlvbiB0aW1lIGluIEdTVF9USU1FX0ZPUk1BVAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzUyMwotCi0yMDEyLTEyLTEwIDExOjU1OjQyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JICBwbHVnaW46IHByb3RlY3QgYWdhaW5zdCBOVUxMIGZpbGVuYW1lIGluIGRlYnVnCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTk0OAotCi0yMDEyLTEyLTA2IDA5OjQ4OjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSAgYnVmZmVycG9vbDogY2xhcmlmeSBkb2NzCi0KLTIwMTItMTItMDUgMTQ6NTY6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBmaXggZG9jcwotCi0yMDEyLTEyLTA1IDE0OjI0OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGZpeCAwLjEwIGRvY3MgdG8gbWFrZSBtb3JlIHNlbnNlIGluIDEuMAotCi0yMDEyLTEyLTA1IDE0OjAzOjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGZpeCBkb2NzIGZvciAxLjAKLQkgIEFkZCBwYXJlbnQgdG8gY2hhaW4gZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCB1c2UgaXQuCi0KLTIwMTItMTEtMzAgMTA6NDE6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBhZGQgcmVzZXQtdGltZSB0eXBlIHN0cmluZwotCi0yMDEyLTExLTMwIDEwOjQxOjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IHJlbW92ZSBzb21lIGNhc3RzCi0KLTIwMTItMTEtMjggMTg6MDg6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBkb2NzOiBhZGQgbGluayB0byBweXRob24gcG9ydGluZyBkb2MgYW5kIGFwcCBkZXYgbWFudWFsIHRvIHBvcnRpbmctdG8tMS4wLnR4dAotCi0yMDEyLTExLTI4IDE3OjM2OjU1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmUuYWM6IFVwZGF0ZSBsaWJ0b29sIHZlcnNpb25pbmcKLQkgIEluIG9yZGVyIGZvciAxLnggYW5kIDEuKHgrMSkgdmVyc2lvbnMgdG8gbm90IGludmFkZSBvbiBlYWNoIG90aGVyCi0JICB3ZSBuZWVkIHRvIGhhdmUgZGlmZmVyZW50IGxpYiB2ZXJzaW9ucy4KLQkgIFNvIHdlIG5lZWQgYSBjb25zaXN0ZW50IGFuZCBwcmVkaWN0YWJsZSBzY2hlbWU6Ci0JICBsaWJyYXJ5IHZlcnNpb24gbnVtYmVyID0gTUlOT1IgKiAxMDAgKyBNSUNSTwotCSAgRXg6Ci0JICAxLjAuMCA9PiAwIChkdWgpCi0JICAxLjAuMyA9PiAzCi0JICAxLjEuMCA9PiAxMDAKLQkgIDEuMS4xID0+IDEwMQotCSAgMS4yLjAgPT4gMTIwCi0JICAxLjEwLjUgPT4gMTAwNQotCSAgLi4uLgotCi0yMDEyLTExLTI2IDE4OjE2OjUyIC0wNTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGFkZCBnc3QtZWRpdGluZy1zZXJ2aWNlcyB0byBQS0dfQ09ORklHX1BBVEgKLQotMjAxMi0xMS0yNiAwMDo1MTozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGNsZWFuIHVwIHNlY3Rpb25zIGZpbGUgZm9yIHBhZCBwcm9iZSBkZWZpbmVzIHRoYXQgbW92ZWQgaW50byBlbnVtCi0KLTIwMTItMTEtMjYgMDA6MjA6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgotCSAgZ3N0OiBkb24ndCByZXF1aXJlIGd0aHJlYWQtMi4wCi0JICBXZSBkb24ndCBuZWVkIHRvIGxpbmsgdG8gZ3RocmVhZC0yLjAgYW55IGxvbmdlciwgc2luY2UgYWxsCi0JICB0aGUgbm9ybWFsIHRocmVhZC1yZWxhdGVkIHN0dWZmIGlzIGluIEdMaWIgcHJvcGVyLCBhbmQgd2UKLQkgIGRvbid0IHVzZSBnX3RocmVhZF9pbml0KCkgYW55IG1vcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5MDQzCi0KLTIwMTItMTEtMjUgMjM6NDI6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgotCSAgZ3N0cmVhbWVyLTEuMC5wYzogbW92ZSBnbW9kdWxlLW5vLWV4cG9ydC0yLjAgZGVwZW5kZW5jeSB0byBSZXF1aXJlcy5wcml2YXRlCi0JICBVc2VycyBvZiBHU3RyZWFtZXIgYXJlIG5vdCBnZW5lcmFsbHkgZXhwZWN0ZWQgdG8gdXNlIHRoZSBHTW9kdWxlIEFQSQotCSAgZGlyZWN0bHkuIHNvIGRvbid0IGZvcmNlIHRoZW0gYWxsIHRvIGxpbmsgYWdhaW5zdCBpdC4KLQkgIFdoaWxlIHdlJ3JlIGF0IGl0LCBubyBuZWVkIHRvIGRlZmluZSB0aGlzIHZpYSBjb25maWd1cmUuYWMgcmVhbGx5LCBqdXN0Ci0JICBwdXQgdGhlIGRlcGVuZGVuY2llcyBkaXJlY3RseSBpbnRvIHRoZSAucGMuaW4gZmlsZS4KLQotMjAxMi0xMS0yNSAyMzoyNjo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sOgotCSogZ3N0L2dzdC5jOgotCSAgZG9jczogcmVtb3ZlIGFsbCBtZW50aW9uIG9mIGdfdGhyZWFkX2luaXQoKQotCSAgSXQncyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgR0xpYiAyLjMyIGFuZCBpc24ndCBuZWVkZWQgYW55Ci0JICBsb25nZXIuCi0KLTIwMTItMTEtMjUgMTg6MTE6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JICBkYXRhcXVldWU6IHJlZHVjZSBkZWJ1ZyBsb2cgc3BhbSBhIGJpdAotCSAgTG9nIGxvY2tpbmcvdW5sb2NraW5nIHdpdGggVFJBQ0UgZGVidWcgbGV2ZWwuCi0KLTIwMTItMTEtMjMgMjE6MDk6NDUgKzAxMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBmaXggYW5ub3RhdGlvbiBmb3IgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydAotCi0yMDEyLTExLTIzIDEzOjM2OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGRvY3VtZW50IG1vcmUgcGFkIHByb2JlIHZhbHVlcwotCi0yMDEyLTExLTIzIDEzOjM0OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suaDoKLQkgIHRlc3RjbG9jazogcmVtb3ZlIHVubmVjZXNzYXJ5IGluY2x1ZGUKLQotMjAxMi0xMS0yMyAxMzozMjowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNsb2NrLmM6Ci0JICB0ZXN0czogZml4IGNsb2NrIHVuaXQgdGVzdCBidWlsZCBmYWlsdXJlIGFmdGVyIGhlYWRlciBjaGFuZ2VzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg4Nzg1Ci0KLTIwMTItMTEtMjMgMTI6NDc6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogZG9uJ3QgdXNlIHBhcmVudGhlc2lzIGZvciBPUmVkIHBhZCBwcm9iZSBmbGFnIGVudW1zCi0JICBnbGliLW1rZW51bSBkb2Vzbid0IGxpa2UgdGhlbSBmb3Igc29tZSByZWFzb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg4ODA0Ci0KLTIwMTItMTEtMjMgMTA6NTg6MjUgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogUHV0IGFsbCBvZiB0aGUgcHJvYmUgdHlwZXMgaW4gdGhlIGVudW0gc28gdGhleSB3b3JrIHdpdGggYmluZGluZ3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg4MDQKLQotMjAxMi0xMS0yMCAyMzoxMzozMyAtMDgwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2UuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXQuaDoKLQkgIGxpYnM6IEFkZCBtaXNzaW5nIHNpbmdsZSBpbmNsdWRlIGhlYWRlcnMgYW5kIHVzZSB0aGVtIGluIEdJUnMKLQotMjAxMi0xMS0yMCAxNjozNDoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svbGlicy9nc3R0ZXN0Y2xvY2suYzoKLQkgIHRlc3RzOiBkb24ndCB1c2UgZGVwcmVjYXRlZCB0aHJlYWQgQVBJCi0KLTIwMTItMTEtMjAgMTY6MTk6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBhZGQgc29tZSBkZWJ1ZwotCi0yMDEyLTExLTIwIDE2OjE5OjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogcmVzZXQgU1RBUlRfVElNRSB3aGVuIG5lZWRlZAotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTg3MAotCi0yMDEyLTExLTIwIDE1OjM3OjExICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JICB2YWx1ZTogTWFrZSBHLUkgaGFwcHkgYnkgaGlkaW5nIGdzdF9nX3RocmVhZF9nZXRfdHlwZSgpCi0KLTIwMTItMTEtMjAgMTU6MDc6MzcgKzAxMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPHVyYWV1c0BsaW51eHJpc2luLm9yZz4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBSZW1vdmUgeGZpZyBmcm9tIHNwZWMgZmlsZQotCi0yMDEyLTExLTIwIDE1OjA2OjE0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogVXNlIHRoZSBHTGliIEdUeXBlIGZvciBHVGhyZWFkIGlmIGNvbXBpbGluZyBhZ2FpbnN0IEdMaWIgMi4zNS4zIG9yIG5ld2VyCi0KLTIwMTItMTEtMjAgMTI6NTY6MTIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IERvbid0IHNldCB0aGUgbG9jYWxlIGluIGdzdF9pbml0KCkKLQkgIFRoZSBmdW5jdGlvbiBpbml0X3ByZSgpIGluIGdzdHJlYW1lci9nc3QvZ3N0LmMgY2FsbHMgc2V0bG9jYWxlKExDX0FMTCwgIiIpLAotCSAgd2hpY2ggc2V0cyB0aGUgbG9jYWxlIHRvIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaXMKLQkgIHdyb25nIGZvciB0d28gcmVhc29uczoKLQkgIDEuIEl0IGlzIGFic29sdXRlbHkgbm90IHRoZSB0YXNrIG9mIGEgbGlicmFyeSB0byBkZWNpZGUgb24gdGhlIGNvcnJlY3QgbG9jYWxlCi0JICBmb3IgYSBwcm9ncmFtLiAgU29tZSBwcm9ncmFtcyBjaGFuZ2UgdGhlIGxvY2FsZSBmb3IgdmFyaW91cyAoZ29vZCBvciBiYWQpCi0JICByZWFzb25zLCBhbmQgbGlicmFyaWVzIHNob3VsZCByZXNwZWN0IHRoYXQuICBQcm9ncmFtcyB3aGVyZSBHU3RyZWFtZXIncwotCSAgb3ZlcndyaXRpbmcgb2YgdGhlIGxvY2FsZSBjYXVzZXMgYnVncyBpbmNsdWRlIEVtYWNzIFsxLCAyXSwgU3VibGltZSBUZXh0IFszXSwKLQkgIGFuZCBMdWEgWzRdLgotCSAgWzFdIGh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTEyMzkyCi0JICBbMl0gaHR0cDovL2J1Z3ppbGxhLm5vdmVsbC5jb20vc2hvd19idWcuY2dpP2lkPTc3OTQyNgotCSAgWzNdIGh0dHA6Ly93d3cuc3VibGltZXRleHQuY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/Zj0zJnQ9ODU0MwotCSAgWzRdIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXZvdWsvbGdpL2lzc3Vlcy8xOQotCSAgTm90ZSB0aGF0IHNldHRpbmcgdGhlIGxvY2FsZSBjYW4gY2F1c2UgcHJvYmxlbXMgZm9yIHByb2dyYW1zIHRoYXQgYXJlIG5vdCBldmVuCi0JICBsaW5rZWQgYWdhaW5zdCBHU3RyZWFtZXIuICBJbiB0aGUgY2FzZSBvZiBFbWFjcywgZm9yIGV4YW1wbGUsIEdTdHJlYW1lciBzZWVtcwotCSAgdG8gYmUgaW5pdGlhbGl6ZWQgdGhyb3VnaCBHVEsgdmlhIGxpYmNhbmJlcnJhLgotCSAgMi4gU2V0dGluZyB0aGUgbG9jYWxlIGlzIG5vdCB0aHJlYWQtc2FmZSwgYW5kIHRoZXJlZm9yZSBzaG91bGQgbm90IGJlIGRvbmUgaW4gYQotCSAgbGlicmFyeS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODU2NTAKLQotMjAxMi0xMS0xNiAxOTo0MTo0OCArMDEwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGZvcndhcmQgc3RyZWFtLXN0YXJ0IGV2ZW50IGluIHB1c2ggbW9kZQotCi0yMDEyLTExLTE5IDEzOjM4OjMwICswMTAwICBDaHJpc3RpYW4gRnJlZHJpayBLYWxhZ2VyIFNjaGFsbGVyIDx1cmFldXNAbGludXhyaXNpbi5vcmc+Ci0KLQkqIGRvY3MvUkVBRE1FOgotCSogZG9jcy9tYW51YWwvc3RhdGUtZGlhZ3JhbS5maWc6Ci0JKiBkb2NzL3JhbmRvbS93dGF5L3BsYXllci5maWc6Ci0JICBSZW1vdmUgdHdvIGxhc3QgLmZpZyBmaWxlcyBmcm9tIGJ1aWxkLCB0aGV5IGFyZSBub3cgcmVwbGFjZWQgd2l0aCAuc3ZnIGZpbGVzLiBUaGF0IHNhaWQgSSBkb24ndCB0aGluayBlaXRoZXIgLmZpZyBmaWxlIHdhcyBzdGlsbCBiZWluZyB1c2VkIGFueXdoZXJlLiBXaXRoIHRoaXMgY2hhbmdlIGFuZCB0aGUgb25lIGluIGNvbW1vbiBHU3RyZWFtZXIgbm8gbG9uZ2VyIGRlcGVuZHMgb24geGZpZy4KLQotMjAxMi0xMS0xOSAxMzoxNjo0OCArMDEwMCAgQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciA8dXJhZXVzQGxpbnV4cmlzaW4ub3JnPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2Ygc3NoOi8vZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvZ3N0cmVhbWVyL2dzdHJlYW1lcgotCi0yMDEyLTExLTE5IDExOjIzOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYjQ5N2M0ZiB0byBhNzJmYWVhCi0KLTIwMTItMTEtMTkgMTE6NDU6MDcgKzAxMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPHVyYWV1c0BsaW51eHJpc2luLm9yZz4KLQotCSogZG9jcy9tYW51YWwvc3RhdGUtZGlhZ3JhbS5zdmc6Ci0JKiBkb2NzL3JhbmRvbS93dGF5L3BsYXllci5zdmc6Ci0JICBBZGQgU1ZHIHZlcnNpb25zIG9mIC5maWcgZmlsZQotCi0yMDEyLTExLTE3IDEwOjI3OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBleGFtcGxlczogZG9uJ3QgY29tcGlsZSB0ZXN0cnRwb29sIGV4YW1wbGUgaWYgcHRocmVhZHMgYXJlIG5vdCBhdmFpbGFibGUgbGlrZSBvbiB3aW4zMgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IGl0YWxhcmFiQGdtYWlsLmNvbQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4ODUxMQotCi0yMDEyLTExLTEzIDIxOjEzOjAwICswMTAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBmaXggY2xvY2sgbGVhayBpbiB3YWl0X3J1bm5pbmdfdGltZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4ODQ3NwotCi0yMDEyLTExLTE3IDAwOjEzOjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0Y29tcGF0Lmg6Ci0JICBnc3Rjb21wYXQuaDogbW92ZSBtb3JlIGRlcHJlY2F0ZWQgQVBJIGludG8gdGhlIGRlcHJlY2F0ZWQgc2VjdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NTU5OAotCi0yMDEyLTExLTE0IDEyOjIwOjU0ICswMTAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPgotCi0JKiBnc3QvZ3N0dGFzay5jOgotCSAgdGFzazogZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQkgIEdTdGF0aWNSZWNNdXRleCB1c2FnZSBoYXMgYmVlbiByZXBsYWNlZCBieSBHUmVjTXV0ZXgsIHJlZmxlY3QgdGhpcwotCSAgY2hhbmdlIGluIHRoZSBkb2N1bWVudGF0aW9uLgotCi0yMDEyLTExLTE0IDEwOjU1OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suYzoKLQkgIHRlc3RjbG9jazogcG9ydCB0byBuZXcgR0xpYiB0aHJlYWRpbmcgQVBJCi0KLTIwMTItMTEtMTMgMjM6MTE6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb21wYXQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICB0ZXN0czogZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAgLT4gZ3N0X2FkYXB0ZXJfcHJldl9wdHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzU1OTgKLQotMjAxMi0xMS0xMyAyMjo0MjowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkgIHRlc3RjbG9jazogbWlub3IgY2xlYW51cHMsIGFkZCBzaW5jZSBtYXJrZXJzIGZvciBndGstZG9jCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzMDEyCi0KLTIwMTItMDgtMzAgMDE6NTg6NDEgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJuQGF4aXMuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3R0ZXN0Y2xvY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5oOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3R0ZXN0Y2xvY2suYzoKLQkgIGNoZWNrOiBhbGxvdyBHc3RUZXN0Q2xvY2sgdG8gaGFuZGxlIGNsb2NrIG5vdGlmaWNhdGlvbnMKLQkgIEFQSTogZ3N0X3Rlc3RfY2xvY2tfcGVla19pZF9jb3VudCgpCi0JICBBUEk6IGdzdF90ZXN0X2Nsb2NrX2hhc19pZCgpCi0JICBBUEk6IGdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkKCkKLQkgIEFQSTogZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkKCkKLQkgIEFQSTogZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfcGVuZGluZ19pZF9jb3VudCgpCi0JICBBUEk6IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCgpCi0JICBBUEk6IGdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWUoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzAxMgotCi0yMDEyLTExLTEzIDIxOjI5OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGNoZWNrOiBhZGQgZGVwZW5kZW5jeSBvbiBnc3RjaGVjayBoZWFkZXIgZmlsZXMgZm9yIGV4cG9ydHMuc3ltCi0JICBTbyBleHBvcnRzLnN5bSBnZXRzIHVwZGF0ZWQgY29ycmVjdGx5LCBhbmQgb3VyIG5ldyBzeW1ib2xzIGdldAotCSAgZXhwb3J0ZWQgY29ycmVjdGx5LCB3aGljaCBtYWtlcyBnLWlyLXNjYW5uZXIgbXVjaCBoYXBwaWVyIGluCi0JICB0ZXJtcyBvZiBsaW5raW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzAxMgotCi0yMDEyLTA4LTI5IDE2OjExOjEwICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJybkBheGlzLmNvbT4KLQotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0dGVzdGNsb2NrLmM6Ci0JICBjaGVjazogYWRkIEdzdFRlc3RDbG9jayBhcyBhIGRldGVybWluaXN0aWMgY2xvY2sgZm9yIHRlc3RpbmcKLQkgIEFQSTogR3N0VGVzdENsb2NrCi0JICBBUEk6IGdzdF90ZXN0X2Nsb2NrX25ldygpCi0JICBBUEk6IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUoKQotCSAgQVBJOiBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSgpCi0JICBBUEk6IGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzMDEyCi0KLTIwMTItMTEtMDkgMjE6MTA6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZml4IGRlYnVnIG1lc3NhZ2UKLQotMjAxMi0xMS0wOCAyMDoyMjoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSAgc3RydWN0dXJlOiByZS1pbmRlbnQgaGVhZGVyIGZpbGUKLQkgIFRhYnMgdG8gc3BhY2VzLgotCi0yMDEyLTExLTEyIDExOjQwOjU5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdmFsdWU6IEFQSTogQWRkIGJveGVkIHR5cGUgZm9yIEdUaHJlYWQKLQotMjAxMi0xMS0xMiAxMDozMDowOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogRml4IGluZGVudGlvbiBmb3IgcHJpbnRpbmcgdHlwZWZpbmRlciBmZWF0dXJlcwotCi0yMDEyLTExLTEyIDAxOjQwOjQyICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJybkBheGlzLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IGZpeCBjb21waWxlciB3YXJuaW5nIHdoZW4gZGVidWdnaW5nIGRpc2FibGVkCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg4MTMwCi0KLTIwMTItMTEtMTAgMDk6NTA6NDkgKzAxMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogcmVtb3ZlIHVudXNlZCBsYWJlbC4gRml4ZXMgY29tcGlsZXIgd2FybmluZy4KLQotMjAxMi0xMC0yOSAxMjowODozMSArMDAwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JICBxdWV1ZTogZG9uJ3QgZmFpbCBpbiBfc2lua19ldmVudCBmb3Igc3RpY2t5IGV2ZW50cwotCSAgSW1wbGVtZW50IHRoZSBzYW1lIGJlaGF2aW91ciBhcyBnc3RfcGFkX3B1c2hfZXZlbnQgd2hlbiBwdXNoaW5nIHN0aWNreSBldmVudHMKLQkgIGZhaWxzLCB0aGF0IGlzIGRvbid0IGZhaWwgaW1tZWRpYXRlbHkgYnV0IGZhaWwgd2hlbiBkYXRhIGZsb3cgcmVzdW1lcyBhbmQgdXBzdHJlYW0KLQkgIGNhbiBhZ2dyZWdhdGUgcHJvcGVybHkuCi0JICBUaGlzIGZpeGVzIHNlZ21lbnQgc2Vla3Mgd2l0aCBkZWNvZGViaW4gYW5kIHVubGlua2VkIGF1ZGlvIG9yIHZpZGVvIGJyYW5jaGVzLgotCSAgRml4ZXM6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc4OTkKLQotMjAxMi0xMS0wOSAxNjo1MDo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgYmFzZXNpbms6IGFkZCBzaW1wbGUgcmF0ZSBjb250cm9sCi0JICBBZGQgYSBtYXgtYml0cmF0ZSBwcm9wZXJ0eSB0aGF0IHdpbGwgc2xpZ2h0bHkgZGVsYXkgcmVuZGVyaW5nIG9mIGJ1ZmZlcnMgaWYgaXQKLQkgIHdvdWxkIGV4Y2VlZCB0aGUgbWF4aW11bSBkZWZpbmVkIGJpdHJhdGUuIFRoaXMgY2FuIGJlIHVzZWQgdG8gZG8KLQkgIHJhdGUgY29udHJvbCBvbiBuZXR3b3JrIHNpbmtzLCBmb3IgZXhhbXBsZS4KLQkgIEFQSTogR3N0QmFzZVNpbms6Om1heC1iaXRyYXRlCi0JICBBUEk6IGdzdF9iYXNlX3Npbmtfc2V0X21heF9iaXRyYXRlKCkKLQkgIEFQSTogZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2JpdHJhdGUoKQotCi0yMDEyLTExLTA4IDE1OjMzOjAxICsxMTAwICBNYXR0aGV3IFdhdGVycyA8eXN0cmVldDAwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IGxvY2sgYmVmb3JlIHVubG9jayBpbiBfZ2V0X2NvbmZpZwotCSAgRml4ZXMgZGVhZGxvY2sgb24gV2luZG93cwotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzg5NgotCi0yMDEyLTExLTA3IDE4OjE1OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiB1cGRhdGUgY291cnRlc3kgb2YgYXV0b3VwZGF0ZQotCi0yMDEyLTExLTA3IDE3OjU5OjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgY29tbW9uOiB1cGRhdGUgZm9yIEFHX0dTVF9QTFVHSU5fRE9DUyBweXRob24gY2hlY2tzCi0KLTIwMTItMTEtMDYgMTg6Mjk6MjggKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgRG9jdW1lbnQgR1NUX0RFQlVHX0ZJTEUKLQotMjAxMi0xMS0wNiAxNzowMzo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGdzdC1pbnNwZWN0OiBmaXggYWxpZ25tZW50IG9mIHJhbmssIGV0Yy4KLQotMjAxMi0xMS0wNiAxNjo1ODowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSAgZWxlbWVudHM6IGZpeCBsZWFkaW5nIHNwYWNlIGluIHBsdWdpbiBkZXNjcmlwdGlvbiBzdHJpbmcKLQotMjAxMi0xMS0wMyAyMDo0NDo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogQ09QWUlORzoKLQkqIGRvY3MvcmFuZG9tL0xJQ0VOU0U6Ci0JKiBnc3QvZ2V0dGV4dC5oOgotCSogZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaDoKLQkqIGdzdC9nbGliLWNvbXBhdC5jOgotCSogZ3N0L2dsaWItY29tcGF0Lmg6Ci0JKiBnc3QvZ3N0LWkxOG4tYXBwLmg6Ci0JKiBnc3QvZ3N0LWkxOG4tbGliLmg6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RhbGxvY2F0b3IuYzoKLQkqIGdzdC9nc3RhbGxvY2F0b3IuaDoKLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YmluLmg6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGJ1cy5oOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuaDoKLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiBnc3QvZ3N0Y29tcGF0Lmg6Ci0JKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5oOgotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuYzoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmg6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5oOgotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudG1ldGFkYXRhLmg6Ci0JKiBnc3QvZ3N0ZXJyb3IuYzoKLQkqIGdzdC9nc3RlcnJvci5oOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3Rmb3JtYXQuYzoKLQkqIGdzdC9nc3Rmb3JtYXQuaDoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmg6Ci0JKiBnc3QvZ3N0bWFjcm9zLmg6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RtZXRhLmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgotCSogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKLQkqIGdzdC9nc3RwYXJhbXNwZWNzLmg6Ci0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkqIGdzdC9nc3RwYXJzZS5oOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5oOgotCSogZ3N0L2dzdHBvbGwuYzoKLQkqIGdzdC9nc3Rwb2xsLmg6Ci0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JKiBnc3QvZ3N0cHJlc2V0Lmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuaDoKLQkqIGdzdC9nc3RzYW1wbGUuYzoKLQkqIGdzdC9nc3RzYW1wbGUuaDoKLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSogZ3N0L2dzdHRhZ3NldHRlci5oOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrLmg6Ci0JKiBnc3QvZ3N0dGFza3Bvb2wuYzoKLQkqIGdzdC9nc3R0YXNrcG9vbC5oOgotCSogZ3N0L2dzdHRvYy5jOgotCSogZ3N0L2dzdHRvYy5oOgotCSogZ3N0L2dzdHRvY3NldHRlci5jOgotCSogZ3N0L2dzdHRvY3NldHRlci5oOgotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JKiBnc3QvZ3N0dHJhY2UuaDoKLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kLmg6Ci0JKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0dXJpLmM6Ci0JKiBnc3QvZ3N0dXJpLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkqIGdzdC9nc3R2ZXJzaW9uLmguaW46Ci0JKiBnc3QvbWF0aC1jb21wYXQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci1kb2NzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGluZGV4LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGluZGV4Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdG1lbWluZGV4LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5oOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW46Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2ltcGwuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xvZy5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcHJpbnQuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50Lmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldC5oOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmg6Ci0JKiBzY3JpcHRzL2NyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaDoKLQkqIHNjcmlwdHMvZml2ZS1idWdzLWEtZGF5LnBsOgotCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NhcHNuZWdvLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbXBsZXhpdHkuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9nc3RidWZmZXJzdHJlc3MuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0cG9sbHN0cmVzcy5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9pbml0LmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNmaWx0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mZHNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNsb2NrLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGluZGV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVtb3J5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFyYW1zcGVjcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cG9sbC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWdzZXR0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dG9jLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dG9jc2V0dGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXdyaXRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdGxpYnNjcHAuY2M6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3F1ZXVlYXJyYXkuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgotCSogdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZC5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3F1ZXVlLWVycm9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2Vlay5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzoKLQkqIHRlc3RzL2NoZWNrL3Rvb2xzL2dzdGluc3BlY3QuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9teS1tZW1vcnkuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9teS1tZW1vcnkuaDoKLQkqIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9teS12aWRtZW0uYzoKLQkqIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9teS12aWRtZW0uaDoKLQkqIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL3JlYWQtbWV0YWRhdGEuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvdGVzdHJ0cG9vbC5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmg6Ci0JKiB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC90eXBlZmluZC5jOgotCSogdGVzdHMvbWlzYy9uZXR3b3JrLWNsb2NrLXV0aWxzLnNjbToKLQkqIHRlc3RzL21pc2MvbmV0d29yay1jbG9jay5zY206Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6Ci0JKiB0b29scy90b29scy5oOgotCSogd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIEZpeCBGU0YgYWRkcmVzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzUyMAotCi0yMDEyLTEwLTMxIDE5OjMzOjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKLQkgIHF1ZXVlOiBhZGQgImZsdXNoLW9uLWVvcyIgcHJvcGVydHkKLQkgIEluIGZsdXNoLW9uLWVvcz10cnVlIG1vZGUgYW55IGRhdGEgcmVtYWluaW5nIGluIHRoZSBxdWV1ZSBpcwotCSAgZGlzY2FyZGVkIHdoZW4gYW4gRU9TIGV2ZW50IGlzIHJlY2VpdmVkLCBhbmQgdGhlIEVPUyBwYXNzZWQKLQkgIGRvd25zdHJlYW0gYXMgc29vbiBhcyBwb3NzaWJsZSAoaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhbGwKLQkgIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlIHRvIGdldCBwcm9jZXNzZWQgYnkgZG93bnN0cmVhbSBmaXJzdCkuCi0JICBNYXkgb3IgbWF5IG5vdCBiZSB1c2VmdWwgaW4gY2FwdHVyZS9lbmNvZGluZyBzY2VuYXJpb3MuCi0KLTIwMTItMTAtMzEgMTg6MzI6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIGNvbW1vbjogdXBkYXRlIGZvciBweXRob24gZGV0ZWN0aW9uCi0JICBGaXhlcyBkb2NzIGJ1aWxkLgotCi0yMDEyLTEwLTMxIDE3OjM3OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGxldCBBR19HU1RfUExVR0lOX0RPQ1MgY2hlY2sgZm9yIHB5dGhvbgotCSAgQW5kIHVwZGF0ZSBjb21tb24gZm9yIG1vdmUgZnJvbSBBU19QQVRIX1BZVEhPTiB0byBBTV9QQVRIX1BZVEhPTiwKLQkgIHdoaWNoIGFzIGEgc2lkZS1lZmZlY3Qgc2hvdWxkIHBpY2sgdXAgbmV3ZXIgcHl0aG9uIHZlcnNpb25zIGFzIHdlbGwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYzOTAzCi0KLTIwMTItMTAtMzAgMTA6MDQ6NDQgKzExMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IENsYXJpZnkgZG9jcyBhYm91dCB0aGUgYnVmZmVyIGhhbmRsZXIgY2FsbGJhY2suCi0JICBDbGFyaWZ5IHRoYXQgdGhlIGNhbGxiYWNrIG93bnMgYSByZWYgb24gYSBwYXNzZWQgYnVmZmVyLgotCi0yMDEyLTEwLTMwIDEwOjA0OjE0ICsxMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogQWRkIEVPUyBzdGF0dXMgdG8gZGVidWcgb3V0cHV0IGFib3V0IGZpbGxlZC91bmZpbGxlZAotCi0yMDEyLTEwLTIyIDAwOjMxOjA5ICsxMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzoKLQkgIGNoZWNrOiBBZGQgYSBzaW1wbGUgdGVzdCBmb3IgdGhlIENvbGxlY3RQYWRzIGJ1ZmZlciBjb2xsZWN0IGNhbGxiYWNrCi0KLTIwMTItMTAtMjkgMTM6MjY6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgZy1pOiBmaXggImNhbid0IHJlc29sdmUgbGlicmFyaWVzIHRvIHNoYXJlZCBsaWJyYXJpZXM6IGdzdGNoZWNrLTEuMCIgYnVpbGQgZXJyb3IKLQkgIFJldmVydCAtLWxpYnJhcnk9bGliZm9vLTEuMC5sYSAtPiAtLWxpYnJhcnk9Zm9vLTEuMCBjaGFuZ2UgbWFkZQotCSAgaW4gcHJldmlvdXMgY29tbWl0LiBUdXJucyBvdXQgdGhhdCB3YXMgd3JvbmcsIGRlc3BpdGUgd2hhdCB0aGUKLQkgIG1hbiBwYWdlIHNheXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzNzEwCi0KLTIwMTItMTAtMjkgMTE6MzA6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgcGFkOiBkb3duZ3JhZGUgJ2NyZWF0aW5nIHJhbmRvbSBzdHJlYW0taWQnIGRlYnVnIGxvZyBtZXNzYWdlCi0JICBObyBuZWVkIGZvciBpdCB0byBiZSBhIHdhcm5pbmcuCi0KLTIwMTItMDYtMTMgMTM6MDI6NDggKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcmV2ZW50IGV4Y2Vzc2l2ZWx5IGhpZ2ggbWVtb3J5IHVzYWdlIHdpdGggbG9uZyBzdHJlYW1zCi0JICBMYXJnZSBzdHJlYW1zIHdvdWxkIGluZGV4IG9uZSBmcmFtZSBldmVyeSBzZWNvbmQsIHdoaWNoIGNhbiBnZXQgcXVpdGUKLQkgIGxhcmdlIHdpdGggbXVsdGktaG91ciBzdHJlYW1zLCBzbyBhZGQgYW4gYWRkaXRpb25hbCBieXRlLWJhc2VkCi0JICBtaW5pbXVtIGRpc3RhbmNlIGFzIHdlbGwsIHdoaWNoIHdpbGwga2ljayBpbiBmb3IgbG9uZyBzdHJlYW1zCi0JICBhbmQgbWFrZSBzdXJlIHdlIG5ldmVyIGhhdmUgbW9yZSB0aGFuIGEgY291cGxlIG9mIHRob3VzYW5kIGluZGV4Ci0JICBlbnRyaWVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjA1MwotCi0yMDEyLTEwLTI4IDE3OjE3OjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgbGliczogZy1pOiBhdm9pZCBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gdGhlIHNoYXJlZC1saWJyYXJ5IHRhZwotCSAgVXNpbmcgbXVsdGlwbGUgbGlicmFyaWVzIGNhdXNlcyBwcm9ibGVtcyBmb3IgdGhlIEMjIGJpbmRpbmdzIGFuZAotCSAgd2lsbCBmb3Igc2ltaWxpYXIgbGFuZ3VhZ2VzIHN1Y2ggYXMgSmF2YSB3aGVuIHRoZXJlIGFyZSBiaW5kaW5ncwotCSAgZm9yIHRoZW0uCi0JICBBbHNvIGNoYW5nZSAtLWxpYnJhcnk9bGliZ3N0Zm9vLVgubGEgdG8gLS1saWJyYXJ5PWdzdGZvby1YIGFzCi0JICB0aGUgbWFuIHBhZ2Ugc3VnZ2VzdHMgaXQgc2hvdWxkIGJlIGRvbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5MzE1Ci0KLTIwMTItMTAtMjggMTU6NTM6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcGx1Z2luZmVhdHVyZTogYWRkIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luX25hbWUoKQotCSAgQVBJOiBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NzE4MzIKLQotMjAxMi0xMC0yNyAxNDo0MDoxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IGFsbG93IHNldHRpbmcgb2YgR1NUX0RFQlVHIGxldmVscyBieSBuYW1lCi0JICBlLmcuIEdTVF9ERUJVRz0qOklORk8sKnNyYzpMT0cKLQotMjAxMi0wNi0yOSAxMjozODo1MiAtMDQwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IG1ha2UgdXMgb2YgdGhlIG5ldyBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZyBmdW5jdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTE1MgotCi0yMDEyLTA2LTI5IDEyOjA1OjM2IC0wNDAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgaW5mbzogYWRkIGEgZnVuY3Rpb24gdG8gc2V0IGRlYnVnIHRocmVzaG9sZCBmcm9tIGEgR1NUX0RFQlVHLXN0eWxlIHN0cmluZwotCSAgVXNlIHRoZSBzYW1lIGZvcm1hdCBhcyB3aXRoIHRoZSBHU1RfREVCVUcgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0JICBBUEk6IGdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zyb21fc3RyaW5nKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkxNTIKLQotMjAxMi0xMC0yNSAxNToyNzoyMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvcXVldWVhcnJheS5jOgotCSAgcXVldWVhcnJheTogRml4IHVuaXQgdGVzdAotCi0yMDEyLTEwLTIyIDEwOjEzOjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cXVldWVhcnJheS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlYXJyYXkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRhdGFxdWV1ZS9xdWV1ZWFycmF5OiBNYWtlIHB1YmxpYyBBUEkgYWdhaW4KLQkgIFRoZXNlIGFyZSBhY3R1YWxseSB1c2VkIG91dHNpZGUgb2YgY29yZWVsZW1lbnRzIG5vd2FkYXlzLgotCSAgQWxzbyBoaWRlIGxvdHMgb2YgaW50ZXJuYWxzIGFuZCBhZGQgcGFkZGluZyBhbmQgZG9jdW1lbnRhdGlvbi4KLQotMjAxMi0xMC0yNSAxMjoxMDoyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgQmFjayB0byBmZWF0dXJlIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMC4yID09PQotCi0yMDEyLTEwLTI1IDAwOjA0OjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAxLjAuMgotCi0yMDEyLTEwLTI0IDE2OjEzOjM0ICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgZXhhbXBsZXM6IGxpbmsgdGVzdHJ0cG9vbCB0byBwdGhyZWFkcwotCSAgRml4ZXMgIzY4Njc4NwotCi0yMDEyLTEwLTI0IDExOjQ2OjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudDogQWxsb3cgR1NUX0NMT0NLX1RJTUVfTk9ORSBhcyBkdXJhdGlvbiBmb3IgR0FQIGV2ZW50cwotCi0yMDEyLTEwLTI0IDExOjE2OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IHVzZSBuZXcgR0NvbmQgZm9yIGFzeW5jIHN0YXRlIGNoYW5nZQotCSAgVXNlIGEgbmV3IEdDb25kLCBwcm90ZWN0ZWQgd2l0aCB0aGUgb2JqZWN0IGxvY2ssIHRvIHNpZ25hbCBjb21wbGV0aW9uCi0JICBvZiB0aGUgYXN5bmMgc3RhdGUgY2hhbmdlLiBXZSBjYW4ndCByZXVzZSB0aGUgbGl2ZSBsb2NrIGJlY2F1c2UgdGhhdAotCSAgb25lIGNhbiBiZSBsb2NrZWQgd2hlbiB0aGUgY3JlYXRlIGZ1bmN0aW9uIGJsb2Nrcy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY3MjMKLQotMjAxMi0xMC0yMiAyMDoyNTo0MyArMDIwMCAgTWlndWVsIEFuZ2VsIENhYnJlcmEgTW95YSA8bWFkbWFjMjUwMUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RhbGxvY2F0b3IuYzoKLQkgIGFsbG9jYXRvcjogZml4IG1lbW9yeSBsZWFrIGluIF9mYWxsYmFja19tZW1fY29weQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjY1OAotCi0yMDEyLTEwLTIyIDIwOjMzOjA2ICswMjAwICBNaWd1ZWwgQW5nZWwgQ2FicmVyYSBNb3lhIDxtYWRtYWMyNTAxQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHByZXNldC5jOgotCSAgcHJlc2V0OiByZW1vdmUgdmFyaWFibGUgbm90IHJlYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY2NTkKLQotMjAxMi0xMC0yMiAxNTowNDoyNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlLmFtOgotCSogbTQvYXhfcHRocmVhZC5tNDoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuYW06Ci0JICBjb25maWd1cmU6IFByb3Blcmx5IGNoZWNrIGZvciBwdGhyZWFkCi0JICBUaGUgb2xkIGNoZWNrIGZhaWxlZCBvbiBBbmRyb2lkIGZvciBleGFtcGxlLgotCi0yMDEyLTEwLTIyIDEwOjI1OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IERvbid0IHVzZSBHU1RfREVCVUcoKSBpbiBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbigpIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB1bmNvbmRpdGlvbmFsbHkKLQkgIElmIEdTdHJlYW1lciB3YXMgbm90IGluaXRpYWxpemVkIHlldCB0aGlzIHdpbGwgY2F1c2UgZ193YXJuaW5ncygpLgotCi0yMDEyLTEwLTIwIDE5OjQ0OjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICBjb2xsZWN0cGFkczogZml4IGctaSBhbm5vdGF0aW9uIGZvciBHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uCi0JICBXZSBwYXNzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyIHRvIHRoZSBmdW5jdGlvbi4KLQotMjAxMi0xMC0yMCAxMjo1NDowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5jOgotCSAgZ190eXBlX2luaXQoKSBpcyBubyBsb25nZXIgcmVxdWlyZWQgYW5kIGRlcHJlY2F0ZWQgaW4gZ2xpYiA+PSAyLjM1LjAKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY0NTYKLQotMjAxMi0xMC0xOSAxMzozNjozMyAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHJkaW8uY29tPgotCi0JKiBnc3QvZ3N0c2FtcGxlLmM6Ci0JICBHc3RTYW1wbGU6IGZpeCB0eXBvIGluIEctSSBhbm5vdGF0aW9ucywgYWxsb3dzIGNyZWF0aW5nIEdzdFNhbXBsZXMgZnJvbSBiaW5kaW5ncy4KLQotMjAxMi0xMC0xOCAxNTozMToxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBwb2xsOiBGaXggY29tcGlsZXIgd2FybmluZyBhYm91dCBjb25zdG5lc3MKLQkgIHBhc3NpbmcgYXJndW1lbnQgMSBvZiAnZ19tdXRleF9sb2NrJyBkaXNjYXJkcyAnY29uc3QnIHF1YWxpZmllciBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5cGUKLQkgIHBhc3NpbmcgYXJndW1lbnQgMSBvZiAnZ19tdXRleF91bmxvY2snIGRpc2NhcmRzICdjb25zdCcgcXVhbGlmaWVyIGZyb20gcG9pbnRlciB0YXJnZXQgdHlwZQotCi0yMDEyLTEwLTE3IDE2OjQ5OjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBiaW4sIHBpcGVsaW5lOiB1c2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSgpCi0JICBTbyB0aGUgc3RyaW5ncyBhcmVuJ3QgY29waWVkLgotCi0yMDEyLTEwLTE2IDEyOjMxOjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBlbGVtZW50OiBBUEk6IEFkZCBHc3RFbGVtZW50Ojpwb3N0X21lc3NhZ2UoKSB2ZnVuYwotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdGVsZW1lbnQuaAotCi0yMDEyLTEwLTE2IDExOjU0OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1ldmVudHMueG1sOgotCSAgcHdnOiBsaW5rIHRvIGNhcHMgYW5kIHFvcyBjaGFwdGVycwotCi0yMDEyLTEwLTE2IDExOjIwOjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSogZG9jcy9wd2cvYnVpbGRpbmctcXVlcnlmbi54bWw6Ci0JKiBkb2NzL3B3Zy9wd2cueG1sOgotCSAgcHdnOiBhZGQgc2VjdGlvbiBhYm91dCBxdWVyeSBmdW5jdGlvbgotCi0yMDEyLTEwLTE2IDExOjEyOjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9idWlsZGluZy1ldmVudGZuLnhtbDoKLQkgIHB3ZzogZml4IGV2ZW50IGZ1bmN0aW9uCi0KLTIwMTItMTAtMTUgMTk6NTY6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICBjb2xsZWN0cGFkczogbWlub3IgZG9jcyBmaXhlcwotCi0yMDEyLTEwLTE1IDE5OjU1OjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IGZpeCBidWZmZXIgbGVhayBpbiBjbGlwX3RpbWUKLQotMjAxMi0xMC0xNSAxODo0NDo1MiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBjYWxsIGNsaXAgZnVuY3Rpb24gd2l0aCB1c2VyIGRhdGEKLQotMjAxMi0xMC0xNSAxNDowNjo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvcHdnLnhtbDoKLQkgIHB3ZzogcmVvcmRlciBzb21lIGNoYXB0ZXJzCi0JICBSZW9yZGVyIHNvbWUgY2hhcHRlciBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIHN0ZXBzIGRvbmUgaW4gdGhlCi0JICBlbGVtZW50LgotCi0yMDEyLTEwLTE1IDEzOjU5OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JICBwd2c6IHNtYWxsIHR3ZWFrcyB0byBuZWdvdGlhdGlvbgotCi0yMDEyLTEwLTE1IDEzOjQ0OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JICBwd2c6IGltcHJvdmUgbmVnb3RpYXRpb24gZG9jdW1lbnRhdGlvbiBzb21lIG1vcmUKLQotMjAxMi0xMC0xNSAxMjoxMDo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JICBwd2c6IHVwZGF0ZSBuZWdvdGlhdGlvbiBwYXJ0Ci0KLTIwMTItMTAtMTUgMTI6MTA6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gZG9jcwotCi0yMDEyLTEwLTEyIDE2OjU4OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JICBwd2c6IHdvcmsgb24gcmV3cml0aW5nIGNhcHMgbmVnb3RpYXRpb24gZG9jcwotCi0yMDEyLTEwLTEyIDE2OjA5OjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKLQkgIGRlc2lnbjogcmVuYW1lIHBhc3N0aHJvdWdoIG5lZ290aWF0aW9uCi0JICBSZW5hbWUgcGFzc3Rocm91Z2ggbmVnb3RpYXRpb24gdG8gdHJhbnNmb3JtIG5lZ290aWF0aW9uIHRvIGF2b2lkCi0JICBjb25mdXNpb24gd2l0aCBwYXNzdGhyb3VnaCBvcGVyYXRpb24uCi0KLTIwMTItMTAtMTIgMTM6MTU6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6Ci0JICBtYW51YWw6IG5vIG1vcmUgbmV3LWRlY29kZWQtcGFkCi0KLTIwMTItMTAtMTIgMTM6MTM6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtY29tcGlsaW5nLnhtbDoKLQkqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6Ci0JICBtYW51YWw6IG1vdmUgZW1iZWRkaW5nIGVsZW1lbnRzIHRvIHNlcGFyYXRlIGNoYXB0ZXIKLQotMjAxMi0xMC0xMiAxMzowMToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtcW9zLnhtbDoKLQkgIHB3Zzogc21hbGwgZXhhbXBsZSBmb3IgdGhyb3R0bGUKLQotMjAxMi0xMC0xMiAxMjo1NTo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtcW9zLnhtbDoKLQkqIGRvY3MvcHdnL3B3Zy54bWw6Ci0JICBwd2c6IGFkZCBpbmZvIGFib3V0IFFvUwotCi0yMDEyLTEwLTEyIDEyOjU1OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sOgotCSAgcHdnOiBhZGRzIHNvbWUgbW9yZSBsaW5rcwotCi0yMDEyLTEwLTEyIDEyOjU1OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6Ci0JICBxb3M6IG1lc3NhZ2VzIGFyZSBwb3N0ZWQsIG5vdCBkcm9wcGVkCi0KLTIwMTItMTAtMTIgMTA6MzU6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2NvbW11bmljYXRpb24ucG5nOgotCSogZG9jcy9tYW51YWwvZGlhZ3JhbXMtZ2VuZXJhbC5zdmc6Ci0JKiBkb2NzL21hbnVhbC9kaWFncmFtcy1waXBlbGluZXMuc3ZnOgotCSogZG9jcy9tYW51YWwvZ3N0cmVhbWVyLW92ZXJ2aWV3LnBuZzoKLQkqIGRvY3MvbWFudWFsL21pbWUtd29ybGQucG5nOgotCSogZG9jcy9tYW51YWwvdGhyZWFkLWJ1ZmZlcmluZy5wbmc6Ci0JICBtYW51YWw6IHVwZGF0ZSBncmFwaGljcwotCi0yMDEyLTEwLTExIDE3OjEwOjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1idWZmZXJpbmcueG1sOgotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBtYW51YWw6IGFkZCBleGFtcGxlIG9mIG5vLXJlYnVmZmVyIGJ1ZmZlcmluZyBzdHJhdGVneQotCi0yMDEyLTEwLTExIDE3OjEwOjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKLQkqIGRvY3MvbWFudWFsL2ludHJvLWdzdHJlYW1lci54bWw6Ci0JICBtYW51YWw6IHNtYWxsIHR3ZWFrcwotCi0yMDEyLTEwLTExIDE3OjA5OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBidWZmZXJpbmcgdGltZSBsZWZ0IGlzIGluIG1pbGxpc2Vjb25kcwotCi0yMDEyLTEwLTExIDE3OjA3OjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6Ci0JICBtYW51YWw6IGFkZCBzb21lIHRleHQgYWJvdXQgYmluIHN0YXRlIGNoYW5nZSBvcmRlcgotCi0yMDEyLTEwLTEwIDE2OjQzOjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtcGxheWJhY2sueG1sOgotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgbWFudWFsOiB0YWxrIGFib3V0IHBsYXlzaW5rCi0JICBUYWxrIGFib3V0IHBsYXlzaW5rIGFuZCBnaXZlIGFuIGV4YW1wbGUgb2YgaXRzIHVzYWdlLgotCi0yMDEyLTEwLTEwIDEzOjA4OjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgotCSogZG9jcy9tYW51YWwvaGlnaGxldmVsLXBsYXliYWNrLnhtbDoKLQkqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBtYW51YWw6IGFkZCBzb21ldGhpbmcgYWJvdXQgdXJpZGVjb2RlYmluCi0KLTIwMTItMTAtMTAgMTE6MzU6MDEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogZW5zdXJlIGFsbCB0aW1lc3RhbXBzIGFyZSBpbiBzYW1lIHRpbWUgZG9tYWluCi0JICAuLi4gYnkgbm90IG9ubHkgcHJvY2Vzc2luZyBpbmNvbWluZyBidWZmZXJzIHRocm91Z2ggYSBjbGlwIGZ1bmN0aW9uLAotCSAgYnV0IGFsc28gb3RoZXIgdGltZXN0YW1wcyBzdWNoIGFzIHRob3NlIGNvbWluZyBmcm9tIEdBUCBldmVudC4KLQotMjAxMi0xMC0xMCAxMDozNjozMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIGRvY3M6IGFkanVzdCBzb21lIHBhcmFtZXRlciBtaXNtYXRjaGVzCi0KLTIwMTItMTAtMTAgMTE6MzQ6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IERvd25ncmFkZSBHU1RfV0FSTklORyB0byBHU1RfSU5GTwotCSAgSXQncyB1c3VhbGx5IG5vdCBhIHByb2JsZW0gaWYgYSBxdWVyeSBmYWlscyBpZiB0aGVyZSdzIG5vIHBlZXIsCi0JICBlc3BlY2lhbGx5IGFzIGl0IHdpbGwgaGFwcGVuIGR1cmluZyBwYWQgbGlua2luZyAoY2FwcyBxdWVyeSkKLQkgIHF1aXRlIG9mdGVuIGFuZCBzcGFtcyB0aGUgbG9ncy4KLQotMjAxMi0xMC0wOSAxNzowNjowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKLQkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgbWFudWFsOiByZW1vdmUgb3V0ZGF0ZWQgYXV0b3BsdWdnaW5nIHNlY3Rpb24KLQkgIFJlbW92ZSBhdXRvcGx1Z2dpbmcgY2hhcHRlciBhbmQgcG9pbnQgdG8gZGVjb2RlYmluL3BsYXliaW4gZXhhbXBsZXMuCi0KLTIwMTItMTAtMDkgMTY6MTI6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sOgotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBtYW51YWw6IFRhbGsgYWJvdXQgdGhyZWFkaW5nCi0JICBSZXdvcmsgdGhlIHRocmVhZGluZyBjaGFwdGVyLgotCSAgVGFsayBhYm91dCBzdHJlYW0tc3RhdHVzIGFuZCBnaXZlIHNvbWUgZXhhbXBsZXMgb24gaG93IHRvIGNoYW5nZQotCSAgdGhlIHRocmVhZCBwcmlvcml0aWVzLgotCi0yMDEyLTEwLTA5IDE1OjU3OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbS1zdGF0dXMudHh0OgotCSAgZGVzaWduOiBpbXByb3ZlIHN0cmVhbS1zdGF0dXMgZG9jdW1lbnQKLQotMjAxMi0xMC0wOSAxNTozMToxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiByZXRyaWV2ZSB0aGUgcmVzdWx0IGZyb20gc3RhcnRfY29tcGxldGUKLQkgIGdzdF9iYXNlX3NyY19zdGFydF9jb21wbGV0ZSgpIGNhbiBmYWlsIHdoZW4gdGhlIHRocmVhZCBjb3VsZCBub3QgYmUKLQkgIHN0YXJ0ZWQsIGZvciBleGFtcGxlLiBNYWtlIHN1cmUgaXQgY2F1c2VzIHRoZSBzdGF0ZSBjaGFuZ2UgdG8gZmFpbCBieQotCSAgcmV0cmlldmluZyB0aGUgcmVzdWx0IGZyb20gX3N0YXJ0X2NvbXBsZXRlKCkuCi0KLTIwMTItMTAtMDkgMTU6MzE6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogaW1wcm92ZSBkZWJ1ZwotCi0yMDEyLTEwLTA5IDEwOjI0OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IHNtYWxsIGRvY3MgZml4ZXMgYW5kIHJlbW92ZSBhIDAuMTEgZml4bWUKLQotMjAxMi0xMC0wOCAxNjo0MjoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtYnVmZmVyaW5nLnhtbDoKLQkqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6Ci0JICBtYW51YWw6IHRhbGsgYSBiaXQgYWJvdXQgYnVmZmVyaW5nCi0KLTIwMTItMTAtMDggMTM6MjI6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWNsb2Nrcy54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1jbG9jay54bWw6Ci0JICBkb2NzOiBpbXByb3ZlIGNsb2NrIGNoYXB0ZXIKLQotMjAxMi0xMC0wOCAxMDozOTozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBtYW51YWw6IGFkZCBleGFtcGxlIGZvciBlZmZlY3Qgc3dpdGNoaW5nCi0KLTIwMTItMTAtMDggMDk6MTE6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNwYXJzZXN0cmVhbXMudHh0OgotCSAgZG9jczogc21hbGwgdXBkYXRlcwotCi0yMDEyLTEwLTA3IDE2OjQ4OjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50IChidWctZml4aW5nKQotCi09PT0gcmVsZWFzZSAxLjAuMSA9PT0KLQotMjAxMi0xMC0wNyAxMzoxMDozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMS4wLjEKLQotMjAxMi0xMC0wNyAwMDoxNTo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2Lmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2Lmg6Ci0JICB0ZXN0czogdXBkYXRlIHN0cnVjdF9pMzg2LmggZm9yIEFCSSBjaGVja3MKLQkgIEZpeGVzIG1ha2UgY2hlY2sgb24gMzItYml0IHg4Ni4KLQotMjAxMi0xMC0wNiAxNzoyNjoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjMzIuaDoKLQkgIHRlc3RzOiB1cGRhdGUgc3RydWN0X3BwYzMyLmggZm9yIEFCSSBjaGVja3MKLQkgIEZpeGVzIG1ha2UgY2hlY2sgb24gMzItYml0IFBvd2VyUEMuCi0KLTIwMTItMTAtMDYgMTQ6NTU6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2YzBiNTJjIHRvIDZiYjY5NTEKLQotMjAxMi0xMC0wNiAxMjowODozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsLy5naXRpZ25vcmU6Ci0JICBleGFtcGxlczogLmdpdGlnbm9yZSBtb3JlIGJpbmFyaWVzIGZyb20gdGhlIG1hbnVhbAotCi0yMDEyLTEwLTA1IDE2OjA0OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1wcm9iZXMudHh0OgotCSAgZG9jczogcmVtb3ZlIG9ic29sZXRlIHBhcnQtYmxvY2sgZG9jdW1lbnQKLQkgIE1lcmdlIHRoZSBwYXJ0LWJsb2NrIGRvY3VtZW50IGludG8gcGFydC1wcm9iZXMKLQotMjAxMi0xMC0wNSAwOTo0Mjo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiByZXNlbmQgZHJvcHBlZCBldmVudHMKLQkgIElmIHdlIHRyeSB0byBwdXNoIHN0aWNreSBldmVudHMgYnV0IGEgcHJvYmUgZHJvcHBlZCB0aGVtLCB3ZSBkb24ndCBtYXJrCi0JICB0aGUgZXZlbnQgYXMgcmVjZWl2ZWQgYW5kIG1hcmsgdGhlIHBhZCBhcyBQRU5ESU5HX0VWRU5UUy4gVGhpcyBlbnN1cmVzCi0JICB0aGF0IHdlIHJlc2VuZCB0aGUgZXZlbnQgdGhlIG5leHQgdGltZS4gRm9yIHRoaXMgd2UgbmVlZCB0byBsZXQgdGhlCi0JICBjdXN0b20gZmxvdyByZXR1cm4gZnJvbSB0aGUgcHJvYmUgdHJpY2tsZSB1cCB0bwotCSAgZ3N0X3BhZF9wdXNoX2V2ZW50X3VuY2hlY2tlZCgpIHNvIHRoYXQgd2UgY2FuIGRpZmZlcmVudGlhdGUgYmV0d2VlbgotCSAgT0sgYW5kIERST1BQRUQgcHJvYmUgcmV0dXJucy4KLQotMjAxMi0xMC0wNSAwNzoxNDoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBkb24ndCBzdG9yZSBzdGlja3kgZXZlbnRzIG9uIGZsdXNoaW5nL0VPUyBwYWRzCi0JICBEb24ndCBzdG9yZSBzdGlja3kgZXZlbnRzIG9uIGZsdXNoaW5nIG9yIEVPUyBwYWRzLiBUaGlzIHdhcyBkb25lCi0JICBjb3JyZWN0bHkgZm9yIHNvdXJjZSBwYWRzIGJ1dCBub3QgZm9yIHNpbmsgcGFkcy4KLQotMjAxMi0xMC0wNCAxMToyNDowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRvY3M6IGFkZCBTaW5jZSBtYXJrZXJzIGZvciBuZXcgQVBJIGFuZCBhZGQgaXQgdG8gZG9jcyBhbmQgLmRlZiBmaWxlCi0KLTIwMTItMTAtMDQgMTE6NTA6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgbWFudWFsOiBhZGQgZHluYW1pYyBjYXBzZmlsdGVyIGV4YW1wbGUKLQotMjAxMi0xMC0wNCAxMToxODoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBkb24ndCBwcmVmZXIgcGFzc3Rocm91Z2gKLQkgIEJhc2V0cmFuc2Zvcm0gc2hvdWxkIG5vdCB0cnkgdG8gbmVnb3RpYXRlIGluIHBhc3N0aHJvdWdoIG1vZGUgYnV0Ci0JICByZXNwZWN0IHRoZSBvcmRlciBvZiB3aGF0IHdlIHJldHVybiBpbiB0aGUgdHJhbnNmb3JtX2NhcHMgbWV0aG9kLgotCSAgQSB0eXBpY2FsIGNhc2UgaXMgdGhhdCB5b3Ugc3BlY2lmeSBzb21lIHNwZWNpZmljIG5ldyBjYXBzIGluIHRoZQotCSAgY2FwcyBwcm9wZXJ0eSBidXQgYWxzbyBhbGxvdyB0aGUgY3VycmVudCBjYXBzIHRvIHBhc3MuCi0KLTIwMTItMTAtMDQgMTE6MTU6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBiYXNldHJhbnM6IGFkZCBhbiBvcHRpb24gdG8gcHJlZmVyIHBhc3N0aHJvdWdoCi0JICBCYXNldHJhbnNmb3JtIGF0dGVtcHRzIHRvIGRvIHBhc3N0aHJvdWdoIG1vZGUgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2YKLQkgIHRoZSB0cmFuc2Zvcm1fY2FwcyBtZXRob2QuIEFkZCBhIG1ldGhvZCB0byBkaXNhYmxlIHRoaXMuCi0JICBUaGlzIGlzIG5lZWRlZCBmb3IgZWxlbWVudHMgbGlrZSBjYXBzZmlsdGVyIHRoYXQgd2FudCB0byB0cmFuc2Zvcm0gY2FwcwotCSAgYmFzZWQgb24gdGhlIG9yZGVyIG9mIHRoZSBjYXBzIHByb3BlcnR5LgotCi0yMDEyLTEwLTA0IDEwOjAxOjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuczogaW1wcm92ZSBzb21lIGNvbW1lbnRzCi0KLTIwMTItMTAtMDMgMTc6MTc6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIG1hbnVhbDogdGFsayBzb21lIG1vcmUgYWJvdXQgZHluYW1pYyBwaXBlbGluZXMKLQotMjAxMi0xMC0wMyAxMzo0OTozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1ldGEuYzoKLQkgIG1ldGE6IGRvbid0IHB1dCBlc3NlbnRpYWwgbG9naWMgaW4gZ19yZXR1cm5fdmFsXyoKLQotMjAxMi0xMC0wMyAxMzo0NToyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtYWxsb2NhdGlvbi54bWw6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6Ci0JICBtZXRhOiBkbyBtZXRhZGF0YSByZWdpc3RyYXRpb24gdGhyZWFkc2FmZQotCSAgV2UgbmVlZCB0byB1c2UgZ19vbmNlIHRvIHJlZ2lzdGVyIHRoZSBtZXRhZGF0YSBpbXBsZW1lbnRhdGlvbnMKLQkgIG9ubHkgb25jZS4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1MzMyCi0KLTIwMTItMTAtMDMgMTM6MzU6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXRhLmM6Ci0JICBtZXRhOiBoYW5kbGUgbXVsdGlwbGUgaW1wbGVtZW50YXRpb24gcmVnaXN0cmF0aW9uCi0JICBGaXJzdCBjaGVjayB0aGF0IHdlIGNhbiBhY3R1YWxseSByZWdpc3RlciB0aGUgaW1wbGVtZW50YXRpb24gYmVmb3JlCi0JICBtYWtpbmcgYSBHc3RNZXRhSW5mby4gSWYgd2UgY2FuJ3QgcmVnaXN0ZXIgd2Ugd291bGQgb3RoZXJ3aXNlIGVuZAotCSAgdXAgd2l0aCBhbiB1bmRlZmluZWQgdHlwZSBhbmQgYW4gaW52YWxpZCBHc3RNZXRhSW5mby4KLQkgIEl0J3MgcG9zc2libGUgdGhhdCB0eXBlIHJlZ2lzdHJhdGlvbiBmYWlscyBiZWNhdXNlIGFub3RoZXIgbWV0YWRhdGEKLQkgIHdpdGggdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gbmFtZSB3YXMgYWxyZWFkeSByZWdpc3RlcmVkLgotCi0yMDEyLTEwLTAzIDEzOjEyOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIG1hbnVhbDogdXNlIENEQVRBIGZvciBjb2RlIGJsb2NrcwotCSAgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGVzY2FwZSBzcGVjaWFsIHRva2VuIGFueW1vcmUuCi0KLTIwMTItMTAtMDMgMTM6MDk6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgbWFudWFsOiBhZGQgcGFydGlhbCBwcmVyb2xsIGV4YW1wbGUgd2l0aCBwcm9iZXMKLQotMjAxMi0xMC0wMyAxMDo1MzoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBtYW51YWw6IGFkZCBtb3JlIHN0dWZmIGFib3V0IHByb2JlcwotCi0yMDEyLTEwLTAyIDE3OjIzOjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIG1hbnVhbDogc3RhcnQgdGFsa2luZyBhYm91dCBkeW5hbWljIHBpcGVsaW5lIGNoYW5nZXMKLQotMjAxMi0xMC0wMiAxNjo0NzowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBtYW51YWw6IG1vdmUgc2VjdGlvbiBhcm91bmQKLQotMjAxMi0xMC0wMiAxNjo0NDoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBwd2c6IGFkZCBhcHBzaW5rIGRvY3MKLQotMjAxMi0xMC0wMiAxNjoxNToxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBwd2c6IHJld2l0ZSBkYXRhLWFjY2VzcyBjaGFwdGVyCi0JICBSZXdyaXRlIHRoZSBkYXRhLWFjY2VzcyBjaGFwdGVyIHNvIHRoYXQgd2UgdGFsayBhYm91dCBhcHBzcmMgaW5zdGVhZAotCSAgb2YgdGhlIGZha2VzcmMgaGFja3MuCi0KLTIwMTItMTAtMDIgMTM6MjI6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtbWV0YWRhdGEueG1sOgotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sOgotCSogZ3N0L2dzdHByZXNldC5jOgotCSogcG8vUkVBRE1FOgotCSogdG9vbHMvZ3N0LXBsb3QtdGltZWxpbmUucHk6Ci0JICBkb2NzOiBzb21lIDAuMTAgLT4gMS4wIGNoYW5nZXMKLQotMjAxMi0xMC0wMiAxMzoxMjozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtYWxsb2NhdGlvbi54bWw6Ci0JICBwd2c6IGFkZCBhbGxvY2F0aW9uIHF1ZXJ5IGV4YW1wbGUKLQotMjAxMi0xMC0wMiAxMjo0OToxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtYWxsb2NhdGlvbi54bWw6Ci0JICBwd2c6IGFkZCBidWZmZXJwb29sIGRvY3MKLQotMjAxMi0xMC0wMiAxMTozNDo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtcHJvZ3JhbXMueG1sOgotCSogZG9jcy9tYW51YWwvbWFudWFsLnhtbDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWFsbG9jYXRpb24ueG1sOgotCSAgcHdnOiBmbGVzaCBvdXQgYWxsb2NhdGlvbiBkb2NzCi0JICBBZGQgbW9yZSBleGFtcGxlcy4KLQkgIEFkZCBleGFtcGxlIGZvciBpbXBsZW1lbnRpbmcgbmV3IG1ldGFkYXRhLgotCSAgQWRkIHByb2dyYW1zIHRvIHRoZSBkb2NzIChhZ2Fpbj8pLCBpdCBzZWVtcyB0byBjb250YWluIHVzZWZ1bCBpbmZvLgotCi0yMDEyLTEwLTAxIDE2OjU5OjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy90aXRsZXBhZ2UueG1sOgotCSAgcHdnOiBhZGQgbmV3IGF1dGhvcgotCi0yMDEyLTEwLTAxIDE2OjU1OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1hbGxvY2F0aW9uLnhtbDoKLQkgIHB3ZzogYWRkIGFsbG9jYXRpb24gZG9jcwotCi0yMDEyLTEwLTAxIDE2OjQ2OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlci50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBkZXNpZ24gZG9jcwotCi0yMDEyLTEwLTAxIDEzOjI4OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1tZW1vcnkudHh0OgotCSogZG9jcy9wd2cvYWR2YW5jZWQtYWxsb2NhdGlvbi54bWw6Ci0JKiBkb2NzL3B3Zy9wd2cueG1sOgotCSAgZG9jczogbW9yZSBkb2NzIGZpeGVzCi0JICBGaXggYWxsb2NhdG9yIGRlc2lnbiBkb2MKLQkgIEFkZCBiZWdpbm5pbmcgb2YgYWxsb2NhdGlvbiBjaGFwdGVyIGluIHRoZSBwd2cKLQotMjAxMi0xMC0wMSAxMTo0Nzo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDoKLQkqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgotCSogZG9jcy9wd2cvb3RoZXItbWFuYWdlci54bWw6Ci0JKiBkb2NzL3B3Zy9vdGhlci1udG9vbmUueG1sOgotCSAgcHdnOiBmaW5hbCBjbGVhbnVwcyBmb3IgMS4wCi0KLTIwMTItMTAtMDEgMTE6MjQ6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWw6Ci0JKiBkb2NzL3B3Zy9vdGhlci1iYXNlLnhtbDoKLQkgIHB3ZzogZml4IGV2ZW50cyBhbmQgYmFzZSBjbGFzc2VzCi0KLTIwMTItMTAtMDEgMTA6NDA6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLXRhZ2dpbmcueG1sOgotCSAgcHdnOiBmaXh1cCB0YWcgZG9jcwotCi0yMDEyLTEwLTAxIDA5OjQ4OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbDoKLQkgIHB3ZzogcGF0Y2ggdXAgdGhlIHNlY3Rpb24gYWJvdXQgaW50ZXJmYWNlcwotCi0yMDEyLTA5LTMwIDA0OjA1OjM2ICsxMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogRml4IHNlYW1sZXNzIHNlZ21lbnQgZnVuY3Rpb24KLQkgIFRoZSAzcmQgcGFyYW1ldGVyIG9mIGdzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudCBpbgotCSAgMC4xMCBpcyB0aGUgdGltZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBuZXcgc2VnbWVudCwKLQkgIG5vdCB0aGUgcG9zaXRpb24gaW4gdGhlIG5ldyBzZWdtZW50LiBGaXggdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciwKLQkgIHRoZSBkb2NzLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIHRvIG1hdGNoIHRoZSBuZWVkcyBvZiB0aGUgb25seQotCSAgZXh0YW50IGNvbnN1bWVyOiBEVkQgcGxheWJhY2suCi0KLTIwMTItMDktMjkgMTQ6MzU6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JICB2YWx1ZTogYXZvaWQgZHVwbGljYXRlcyB3aGVuIGludGVyc2VjdGluZyBsaXN0cwotCSAgRml4ZXMgbmVnb3RpYXRpb24gdGFraW5nIGEgcmlkaWN1bG91cyBhbW91bnQgb2YKLQkgIHRpbWUgKG11bHRpcGxlIDEwcyBvZiBzZWNvbmRzIG9uIGEgY29yZTIpIHdoZW4KLQkgIHRoZXJlIGFyZSBkdXBsaWNhdGUgZW50cmllcyBpbiBsaXN0cy4KLQkgIENvdWxkIGhhdmUgYSBuZWdhdGl2ZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb24gb3RoZXIKLQkgIHNjZW5hcmlvcyBiZWNhdXNlIHdlIG5vdyBoYXZlIHRvIGl0ZXJhdGUgdGhlCi0JICBkZXN0IGxpc3QgdG8gYXZvaWQgZHVwbGljYXRlcywgYnV0IHdlIGRvbid0Ci0JICBoYXZlIGEgbG90IG9mIGxpc3RzIGFueSBtb3JlIHRoZXNlIGRheXMsIGFuZAotCSAgdGhleSB0ZW5kIHRvIGJlIHNtYWxsIGFueXdheS4gVGhlIG5lZ2F0aXZlcwotCSAgYXJlIGhvcGVmdWxseSBjb3VudGVyZWQgYnkgdGhlIHBvc2l0aXZlIGVmZmVjdHMKLQkgIG9mIHJlZHVjaW5nIHRoZSBsaXN0IGxlbmd0aCBlYXJseSBvbiBpbiB0aGUKLQkgIHByb2Nlc3MuIEFuZCBpbiBhbnkgY2FzZSwgaXQncyB0aGUgcmlnaHQgdGhpbmcKLQkgIHRvIGRvLgotCSAgQmFzZWQgb24gcGF0Y2ggYnkgQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0OTgxCi0KLTIwMTItMDktMjkgMDA6Mjc6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICBwd2c6IG1pbm9yIHVwZGF0ZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTEyMQotCi0yMDEyLTA5LTI4IDIzOjUzOjUzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2ZhcS9kZXBlbmRlbmNpZXMueG1sOgotCSAgZmFxOiBhZGQgbWlzc2luZyA8L3BhcmE+IHRhZwotCi0yMDEyLTA5LTI4IDE1OjE3OjI3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWluaW9iamVjdDogQWx3YXlzIHJlamVjdCBXUklURSBsb2NrcyBvbiBSRUFET05MWSBtaW5pb2JqZWN0cwotCSAgVmVyaWZ5IHRoYXQgbWFwcGluZyBhIHJlYWQtb25seSBtZW1vcnkgYXMgcmVhZCBkb2VzbnQgbWFrZSBpdCB3cml0YWJsZQotCi0yMDEyLTA5LTI4IDIwOjM4OjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL2ZhcS9kZXBlbmRlbmNpZXMueG1sOgotCSogZG9jcy9yYW5kb20vYXV0b3Rvb2xzOgotCSogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6Ci0JICBkb2NzOiBwdXJnZSBhbGwgbWVudGlvbiBvZiBsaWJvaWwsIHVwZGF0ZSBGQVEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzMyODUKLQotMjAxMi0wOS0yOCAxNjowMzoxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtY2xvY2sueG1sOgotCSogZG9jcy9wd2cvYWR2YW5jZWQtZHBhcmFtcy54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbDoKLQkgIHB3ZzogdXBkYXRlIGZvciAxLjAKLQkgIFJld3JpdGUgY2xvY2sgcGFydC4KLQkgIHN0YXJ0IG9uIGludGVyZmFjZXMKLQotMjAxMi0wOS0yOCAxMzoyNTo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtcmVxdWVzdC54bWw6Ci0JICBwd2c6IHJld29yayBkeW5hbWljIHBhZHMgZG9jcwotCi0yMDEyLTA5LTI4IDEzOjI1OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbDoKLQkgIHB3ZzogcmV3b3JrIHNjaGVkdWxpbmcgZG9jcwotCi0yMDEyLTA5LTI4IDEzOjI0OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9idWlsZGluZy1wcm9wcy54bWw6Ci0JKiBkb2NzL3B3Zy9vdGhlci1iYXNlLnhtbDoKLQkgIHB3ZzogcmVtb3ZlIHNvbWUgR1NUX0JPSUxFUlBMQVRFCi0KLTIwMTItMDktMjggMTE6MTg6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtYWN0aXZhdGlvbi50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgYWN0aXZhdGlvbiBkZXNpZ24gZG9jcwotCi0yMDEyLTA5LTI4IDEwOjQxOjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGZpeCBhY3RpdmF0ZSBkb2NzCi0KLTIwMTItMDktMjggMTA6MDQ6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLW5lZ290aWF0aW9uLnhtbDoKLQkgIHB3ZzogZml4IG1vcmUgbmVnb3RpYXRpb24gZm9yIDEuMAotCi0yMDEyLTA5LTI3IDE2OjU5OjA0ICswMjAwICBPbGl2aWVyIEJsaW4gPG9saXZpZXIuYmxpbkBzb2Z0YXRob21lLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IGRvIG5vdCByZWdpc3RlciBwcmludGYgZXh0ZW5zaW9uIGZvciAlcAotCSAgVGhpcyBoYXBwZW5lZCB3aGVuIGdsaWIgd2FzIG5vdCB1c2luZyBzeXN0ZW0gcHJpbnRmLCBhbmQgY2F1c2VkIHRoZQotCSAgaW50ZXJuYWwgZ3N0cmVhbWVyIHByaW50ZiBleHRlbnNpb25zIHRvIGJlIHVzZWQgZm9yIGFsbCAlcCBwcmludGZzLAotCSAgY2F1c2luZyBjcmFzaGVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDk3MAotCi0yMDEyLTA5LTI3IDE3OjIxOjUzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JICBwd2c6IGZpeCBzb21lIG5lZ290aWF0aW9uIHRvIDEuMAotCi0yMDEyLTA5LTI3IDE0OjQyOjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9idWlsZGluZy1wcm9wcy54bWw6Ci0JKiBkb2NzL3B3Zy9idWlsZGluZy1zdGF0ZS54bWw6Ci0JKiBkb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbDoKLQkgIHB3ZzogbW9yZSB1cGRhdGVzIGZvciAxLjAKLQotMjAxMi0wOS0yNyAxMzo1Nzo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYnVpbGRpbmctY2hhaW5mbi54bWw6Ci0JKiBkb2NzL3B3Zy9idWlsZGluZy1ldmVudGZuLnhtbDoKLQkqIGRvY3MvcHdnL2J1aWxkaW5nLXBhZHMueG1sOgotCSogZG9jcy9wd2cvcHdnLnhtbDoKLQkgIHB3ZzogbW9yZSB1cGRhdGVzIGZvciAxLjAKLQotMjAxMi0wOS0yNyAxMTo1MzozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbDoKLQkgIHB3ZzogdXBkYXRlIGJvaWxlciB0byAxLjAKLQotMjAxMi0wOS0yNyAxMTowNjowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogYWxzbyByZWYgdGhlIGludGVybmFsIHBhZCBmb3IgYWN0aXZhdGUgZnVuY3Rpb25zCi0JICBBbHNvIHRha2UgYSByZWYgdG8gdGhlIGludGVybmFsIHBhZCBpbiB0aGUgYWN0aXZhdGUgZnVuY3Rpb25zCi0KLTIwMTItMDktMjQgMTg6MjY6MTYgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgcHJveHlwYWQ6IEhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGludGVybmFsIHBhZCB3aGlsZSBwdXNoaW5nIHRocm91Z2ggaXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ4MDkKLQotMjAxMi0wOS0yNSAxNDo0NDo1NCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICB0ZXN0czogVGVzdCB0aGUgY2FzZSB3aGVyZSBnaG9zdCBwYWRzIGFyZSByZW1vdmVkIHdoaWxlIHN0cmVhbWluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDgwOQotCi0yMDEyLTA5LTI3IDA5OjQ0OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfYXJtLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9ocHBhLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2Lmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGMzMi5oOgotCSogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjNjQuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3NwYXJjLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF94ODZfNjQuaDoKLQkgIHRlc3RzOiBlbmFibGUgbGlicmFyeSBhYmkgY2hlY2tzCi0KLTIwMTItMDktMjYgMjM6MzI6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgZG9jczogZml4IHVwIGJhc2VzcmMvYmFzZXNpbmsgZG9jcyBmb3JtYXR0aW5nCi0KLTIwMTItMDktMjYgMTc6MDg6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9hcm0uaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaHBwYS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzMyLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3NwYXJjLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgotCSAgdGVzdHM6IGFkZCBhYmkgY2hlY2tzCi0JICBFbmFibGUgYWJpIGNoZWNrcyBhZ2Fpbi4KLQkgIEZpeCBhYmkgc2l6ZXMgZm9yIHg4Nl82NCwgY29weSB0aGUgZmlsZSB0byBvdGhlciBhcmNocy4KLQotMjAxMi0wOS0yNiAxNjoyNjo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICB1cGRhdGUgZG9jcyBmb3IgMS4wIEFQSQotCi0yMDEyLTA5LTI2IDE0OjE1OjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgdXJpOiB1c2UgcHJvcGVyICd0cmFuc2ZlciBmbG9hdGluZycgYW5ub3RhdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NDA5OQotCi0yMDEyLTA5LTI2IDEzOjE5OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkgIHR5cGVmaW5kOiBzZW5kIFNUUkVBTS1TVEFSVCBldmVudAotCSAgU2VuZCBhIFNUUkVBTV9TVEFSVCBldmVudCB3aGVuIHdlIGFyZSBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDQyNAotCi0yMDEyLTA5LTI2IDEwOjU1OjI4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIHNlZ21lbnQ6IG1hcmsgR3N0U2VnbWVudEZsYWdzIGFzIGZsYWdzIHJhdGhlciB0aGFuIGVudW0KLQkgIC4uLiB3aGljaCByZWFsbHkgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZW4gdHJ5aW5nIHRvIHNlcmlhbGl6ZQotCSAgYSBmbGFncyB2YWx1ZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzLCB3aGljaCBpcyBoYXJkCi0JICB0byBkbyBhcyBhbiBlbnVtIHR5cGUuCi0KLTIwMTItMDktMjYgMTA6NTQ6MDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBpZGVudGl0eTogcmV0aW1lc3RhbXAgYm90aCBwdHMgYW5kIGR0cyB3aGVuIGRvaW5nIHNvCi0KLTIwMTItMDktMjYgMTU6MDE6NDIgKzEwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogTW92ZSBzb21lIHJ1biBvZiB0aGUgbWlsbCBkZWJ1ZyBzdGF0ZW1lbnRzIHRvIExPRyBsZXZlbAotCi0yMDEyLTA5LTI2IDE0OjIzOjUyICsxMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IE91dHB1dCB0aW1lc3RhbXBzIGFmdGVyIGEgc2Vlay4KLQkgIFJlaW5pdGlhbGlzZSB0aGUgRFRTIGFmdGVyIGEgc2VlayBzbyBhcyB0byBjb250aW51ZQotCSAgZ2VuZXJhdGluZyB0aW1lc3RhbXBzIHdoZW4gYmFzZXBhcnNlIGlzIG5vdCBkb3duc3RyZWFtCi0JICBvZiBhIGRlbXV4ZXIuCi0JICBGaXhlczogIzY4NDUzOAotCi0yMDEyLTA5LTI1IDE3OjA2OjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1wcm9ncmFtcy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6Ci0JKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSogZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6Ci0JKiBkb2NzL3B3Zy9vdGhlci1udG9vbmUueG1sOgotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSogdG9vbHMvZ3N0LXR5cGVmaW5kLjEuaW46Ci0JICBkb2NzOiB1cGRhdGVzCi0JICBNSU1FLXR5cGUgLT4gTWVkaWEgdHlwZQotCSAgRml4IHNvbWUgb2xkIGdzdC1pbnNwZWN0IG91dHB1dAotCi0yMDEyLTA5LTI1IDE2OjUzOjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sOgotCSogZG9jcy9wd2cvaW50cm8tcHJlZmFjZS54bWw6Ci0JICBwd2c6IHVwZGF0ZSBmb3IgMS4wIEFQSQotCi0yMDEyLTA5LTI1IDE1OjExOjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogYWRkIHNlY3Rpb24gZm9yIG1ldGFkYXRhCi0KLTIwMTItMDktMjUgMTM6MDk6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBlbGVtZW50ZmFjdG9yeTogRmFpbCBpZiBubyB2YWxpZCBlbGVtZW50IGZhY3RvcnkgbWV0YWRhdGEgaXMgc2V0Ci0KLTIwMTItMDktMjUgMTM6MDk6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JICBwbHVnaW46IEZhaWwgaWYgbm8gdmFsaWQgcGx1Z2luIG1ldGFkYXRhIGlzIHNldAotCi0yMDEyLTA5LTI1IDE1OjA2OjQzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgaWRlbnRpdHk6IGFsc28gdHJhY2sgYW5kIHN0b3JlIHNlZ21lbnQgaW5mbyBpbiBzaW5nbGUgc2VnbWVudCBtb2RlCi0KLTIwMTItMDktMjUgMTQ6NDA6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtdGhyZWFkcy54bWw6Ci0JKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1jaGVja2xpc3QueG1sOgotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sOgotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1kYXRhLnhtbDoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6Ci0JKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6Ci0JKiBkb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sOgotCSogZG9jcy9tYW51YWwvbWFudWFsLnhtbDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMS4wLnR4dDoKLQkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkgIG1hbnVhbDogZml4IHVwIHRoZSBtYW51YWwKLQkgIE1JTUUtdHlwZSAtPiBtZWRpYSB0eXBlcwotCSAgRml4IHVwIHRoZSBtYW51YWwgaW4gdmFyaW91cyBwbGFjZXMgd2l0aCB0aGUgMS4wIHdheSBvZiBkb2luZyB0aGluZ3MKLQkgIHN1Y2ggYXMgcHJvYmVzLCBzdGF0aWMgZWxlbWVudHMsIHNjaGVkdWxpbmcsIC4uLgotCSAgQWRkIHBvcnRpbmcgZnJvbSAwLjEwIHRvIDEuMCBjaGFwdGVyLgotCSAgQWRkIHByb2JlIGV4YW1wbGUgdG8gYnVpbGQuCi0JICBSZW1vdmUgc29tZSBkb2NzIGZvciByZW1vdmUgY29tcG9uZW50cyBzdWNoIGFzIEdzdE1peGVyIGFuZAotCSAgR3N0UHJvcGVydHlQcm9iZSwgWE1MLi4uCi0KLTIwMTItMDktMjQgMTY6NTA6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2ludHJvLWdzdHJlYW1lci54bWw6Ci0JICBkb2NzOiBnc3QtcHl0aG9uIGlzIG5vIG1vcmUKLQkgIGdzdC1weXRob24gaXMgbm8gbW9yZSBhbmQgZ3N0LWxpYmF2IGlzIG9uZSBvZiB0aGUgbWFpbiBtb2R1bGVzIHRoYXQKLQkgIHdlIHJlbGVhc2UuCi0KLTIwMTItMDktMjQgMTY6MzE6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGRvY3M6IGZpeCBiYXNlc2luayBkb2NzCi0KLTIwMTItMDktMjQgMTY6MjU6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZmFxL2dldHRpbmcueG1sOgotCSogZG9jcy9mYXEvdHJvdWJsZXNob290aW5nLnhtbDoKLQkqIGRvY3MvZmFxL3VzaW5nLnhtbDoKLQkgIGRvY3M6IHVwZGF0ZSBGQVEKLQkgIENoYW5nZSB2ZXJzaW9ucy4KLQkgIFVzZSB0b29scyB3aXRoIHZlcnNpb24gcHJlZml4LgotCi0yMDEyLTA5LTI1IDEzOjE1OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zIGZvciB0eXBvIGZpeAotCi0yMDEyLTA5LTI1IDEzOjE0OjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ2xpc3Q6IGZpeCB0eXBvIGluIHRyYW5zbGF0ZWQgc3RyaW5nCi0JICBTcG90dGVkIGJ5IENocmlzIExlb25hcmQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NzU1Ci0KLTIwMTItMDktMjUgMDk6Mjc6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgcGx1Z2luZmVhdHVyZTogUmVtb3ZlIDAuMTEuOVgtPjEuMC4wIHZlcnNpb24gbWFuZ2xpbmcKLQotMjAxMi0wOS0yNSAwMTowMjowMyArMDEwMCAgSm9zZXAgVG9ycmEgVmFsbGVzIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jb21wbGV4aXR5LmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYzoKLQkgIGJlbmNobWFya3M6IHByaW50ZiBmb3JtYXQgZml4ZXMgdG8gbWFrZSBpbnRlbCBjb21waWxlciBoYXBweQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU1MjY1NwotCi0yMDEyLTA5LTI1IDAwOjU1OjU5ICswMTAwICBKb3NlcCBUb3JyYSBWYWxsZXMgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkqIHRvb2xzL3Rvb2xzLmg6Ci0JICBNYWtlIGludGVsIGNvbXBpbGVyIGhhcHBpZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NTI2NTcKLQotMjAxMi0wOS0yNCAxNjozMTo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQgKGJ1ZyBmaXhpbmcpCi0KLT09PSByZWxlYXNlIDEuMC4wID09PQotCi0yMDEyLTA5LTI0IDEyOjE5OjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjAuMAotCi0yMDEyLTA5LTI0IDAwOjM5OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgMC4xMSByZWZlcmVuY2VzIGluIHBvcnRpbmcgZ3VpZGUKLQotMjAxMi0wOS0yNCAwMDozNzoyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMS4wLnR4dDoKLQkgIGRvY3M6IHJlbmFtZSBwb3J0aW5nLXRvLTAuMTEudHh0IHRvIHBvcnRpbmctdG8tMS4wLnR4dAotCi0yMDEyLTA5LTIzIDE5OjU2OjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgY2hlY2s6IGZpeCBGSVhNRSBwcmludGluZyBmb3IgdGNhc2Vfc2tpcF9icm9rZW5fdGVzdCgpCi0KLTIwMTItMDktMjMgMTc6MzA6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JICBkb2NzOiB1cGRhdGUgcmVsZWFzZSBkb2MKLQkgIENyZWF0ZSB0YWdzIGZvciByZWxlYXNlcyB3aXRob3V0IHRoZSB1Z2x5IFJFTEVBU0UtIHByZWZpeC4KLQotMjAxMi0wOS0yMyAxMjo0MjowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IGRvbid0IGZvcndhcmQgcmFuZG9tIHN0cmVhbS1zdGFydCBldmVudAotCSAgSXQncyBub3QgcmlnaHQsIGFuZCB3ZSBkb24ndCBrbm93IHdoYXQgZXh0cmEgcHJvcGVydGllcwotCSAgdGhhdCBldmVudCBtaWdodCBoYXZlIHNldCBpbiBmdXR1cmUgKGUuZy4gc3BhcnNlbmVzcykuCi0JICBUaGlzIGNoYW5nZSBtZWFucyBjb2xsZWN0cGFkIHVzZXJzIG5lZWQgdG8gY3JlYXRlIHRoZWlyCi0JICBvd24gc3RyZWFtLXN0YXJ0IGV2ZW50IG5vdy4gV2UgY291bGQgYWRkIGEgdXRpbGl0eQotCSAgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgc3RyZWFtLXN0YXJ0IGV2ZW50IGJhc2VkIG9uCi0JICB0aGUgaW5wdXQgc3RyZWFtLXN0YXJ0IGV2ZW50cy4KLQotMjAxMi0wOS0yMiAxNjowNzoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDRmOTYyZjcgdG8gNmMwYjUyYwotCi0yMDEyLTA5LTIxIDIxOjEzOjI3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6Ci0JICBtYW51YWw6IHVwZGF0ZSBjb250cm9sbGVyIGRvY3VtZW50YXRpb24KLQotMjAxMi0wOS0yMSAyMToxMzoxMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIG9iamVjdDogdXBkYXRlIGNvbnRyb2xsZXIgZG9jdW1lbnRhdGlvbgotCi0yMDEyLTA5LTE4IDE1OjIyOjAzICswMjAwICBCYXN0aWFuIFdpbmtsZXIgPGJ1ekBuZXRidXoub3JnPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBtYW46IEZpeCBzeW50YXggZm9yIHZhbHVlIGxpc3RzIGluIGNhcHMgc3RyaW5ncwotCSAgVmFsdWUgbGlzdHMgdXNlIGN1cmx5IGJyYWNrZXRzIGluc3RlYWQgb2YgcGFyZW50aGVzZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQyOTMKLQotMjAxMi0wOS0yMCAxNDo0ODoxNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBSZW1vdmUgcGFkIHByb2JlcyBvbmx5IG9uY2UKLQkgIEFsc28gYWRkIHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgaWYgYSBwYWQgcHJvYmUgaXMgcmVtb3ZlZCB3aGlsZSBpdCdzCi0JICBjYWxsYmFjayBpcyBydW5uaW5nLCB0aGUgY2xlYW51cF9ob29rIGlzbid0IGNhbGxlZCBhZ2FpbiBpZiBpdAotCSAgcmV0dXJucyBHU1RfUEFEX1BST0JFX1JFTU9WRQotCi0yMDEyLTA5LTE5IDE1OjAxOjQ2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBwYWQ6IEFkZCBmdW5jdGlvbnMgdG8gc2FmZWx5IGFjY2VzcyBHc3RQcm9iZUluZm8gZGF0YSBwb2ludGVyCi0JICBUaGlzIGlzIHNvIHRoYXQgaW50cm9zcGVjdGlvbiBiYXNlZCBiaW5kaW5ncyBjYW4gYWNjZXNzIGl0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDQwMgotCi0yMDEyLTA5LTE5IDIzOjI1OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6Ci0JICBkb2NzOiByZW1vdmUgcmVmZXJlbmNlIHRvIDAuOCBHc3RCaW4gQVBJIGZyb20gbWFudWFsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0MDQ4Ci0KLTIwMTItMDktMTkgMTU6MTQ6MzUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBpZGVudGl0eTogdHJhbnNmb3JtIEdBUCBldmVudCBpbiBzaW5nbGUgc2VnbWVudCBtb2RlCi0KLTIwMTItMDktMTkgMDk6NDQ6MDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGRvY3M6IGNvbGxlY3RwYWRzIGRvYyBmaXhlcwotCi0yMDEyLTA5LTE4IDIxOjQ5OjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGNoZWNrIGFjcXVpcmUgcmVzdWx0IHZhbHVlCi0JICBDaGVjayB0aGUgcmVzdWx0IHZhbHVlIGZyb20gX2J1ZmZlcl9wb29sX2FjcXVpcmUoKSBhbmQgcmV0dXJuIHRoZQotCSAgdmFsdWUgd2hlbiBhbGxvY2F0aW9uIGZhaWxlZC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQyODUKLQotMjAxMi0wOS0xOCAxMjoxNDozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogRml4IHJlZmNvdW50IGJ1ZyBieSB1bnJlZmZpbmcgdGhlIGNvcnJlY3QgdmFyaWFibGUKLQotPT09IHJlbGVhc2UgMC4xMS45OSA9PT0KLQotMjAxMi0wOS0xNyAxNzo1Njo0NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTEuOTkKLQotMjAxMi0wOS0xNyAxMzozNToyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JKiB3aW4zMi92czEwL0NvbW1vbi5wcm9wczoKLQkgIFJlbW92ZSBHU1RfVVNFX1VOU1RBQkxFX0FQSSBndWFyZCBhbmQgZGVmaW5lcwotCi0yMDEyLTA5LTE3IDEzOjA5OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBwYWQ6IEFkZCBwYXJlbnQgcGFyYW1ldGVyIHRvIHRoZSBsaW5rIGFuZCB1bmxpbmsgZnVuY3Rpb25zCi0JICBGaXhlcyBwYXJ0IG9mIGJ1ZyAjNjgzOTk1LgotCi0yMDEyLTA5LTE2IDIzOjIwOjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkgIHNhbXBsZTogYWRkIHNlcmlhbGlzYXRpb24vZGVzZXJpYWxpc2F0aW9uIGZ1bmN0aW9ucyBmb3IgR3N0U2FtcGxlCi0JICBTaW5jZSB0aGVzZSB0aGluZ3MgYXJlIGluc2lkZSB0YWdsaXN0cyBub3csIGl0IHdvdWxkIGJlIGdvb2QgdG8gYmUKLQkgIGFibGUgdG8gcHJpbnQgdGhlbSBhbmQgZGVzZXJpYWxpc2UgdGhlbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODEzMjIKLQotMjAxMi0wOS0xNSAyMTo1NjowNyArMDIwMCAgQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciA8dXJhZXVzQGxpbnV4cmlzaW4ub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIFN3aXRjaCB0byBGMTggbmFtaW5nIG9mIHRoZSBwYWNrYWdlCi0KLTIwMTItMDktMTUgMTg6NDM6MzkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB1c2UgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgdG8gcmVwbGFjZSBvYnNvbGV0ZSBBUEkKLQotMjAxMi0wOS0xNCAxNzo1MjoxNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLW1ldGFkYXRhLnhtbDoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgotCSAgcmVwbGFjZSBnc3RfdGFnX2xpc3RfZnJlZSB3aXRoIGdzdF90YWdfbGlzdF91bnJlZgotCi0yMDEyLTA5LTE0IDE3OjAwOjIzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwcmVzZXQuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9jb250cm9sLXNvdXJjZXMuYzoKLQkgIHJlcGxhY2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIHdpdGggZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhCi0KLTIwMTItMDktMDYgMTY6MzI6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zOiB3aGl0ZXNwYWNlIGZpeAotCi0yMDEyLTA5LTE0IDE0OjA4OjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgZG9jczogaW5kZXhlcnMgYXJlIG5vIG1vcmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQwMTgKLQotMjAxMi0wOS0xNCAxMzozNDoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvZnJhbWVzdGVwMS5jOgotCSAgdGVzdHM6IGZpeCBmb3IgYXBwc2luayByZXR1cm4gdmFsdWUgYWRkaXRpb24KLQotMjAxMi0wOS0xNCAwMjo1NDo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjExLjk0ID09PQotCi0yMDEyLTA5LTE0IDAyOjQ2OjM0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjExLjk0Ci0KLTIwMTItMDktMTQgMDE6Mjg6NDYgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZG9uJ3QgdHJ5IHRvIHByZXR0eS1wcmludCBldmVudCBhZnRlciB3ZSd2ZSBnaXZlbiBhd2F5IG93bmVyc2hpcAotCSAgTWlnaHQgY2F1c2UgY3Jhc2hlcyB3aXRoIGRlYnVnIGxvZ2dpbmcgZW5hYmxlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODM5OTYKLQotMjAxMi0wOS0xNCAwMToxNzo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTItMDktMTQgMDA6MzA6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb21wYXQuaDoKLQkgIGdzdGNvbXBhdDogZml4IGJhY2t3YXJkcyBjb21wYXQgbWFjcm8gZm9yIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbgotCSAgTmFtZSBpdCBwcm9wZXJseSwgc28gaXQsIGxpa2UsIHdvcmtzLiBDbGVhcmx5IG5vIG9uZSBhY3R1YWxseQotCSAgdXNlZCB0aGF0Li4KLQotMjAxMi0wOS0xMyAxMjowMDowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgotCSogZG9jcy9wd2cvaW50cm8tYmFzaWNzLnhtbDoKLQkgIGRvY3M6IGZpeCBmb3JtYXRzIGEgbGl0dGxlCi0KLTIwMTItMDktMTMgMTE6Mzg6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRlZnM6IGFkZCBuZXcgYmFzZXBhcnNlIGZ1bmN0aW9uCi0KLTIwMTItMDktMTMgMTE6Mzg6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIGRvY3M6IGZvdXJjYyBpcyBubyBtb3JlCi0KLTIwMTItMDktMTMgMTE6MzU6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbWlzc2luZy1wbHVnaW5zLnR4dDoKLQkqIGRvY3MvZmFxL3VzaW5nLnhtbDoKLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDoKLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXByb2dyYW1zLnhtbDoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLW5lZ290aWF0aW9uLnhtbDoKLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JKiBkb2NzL3B3Zy9idWlsZGluZy1wYWRzLnhtbDoKLQkqIGRvY3MvcHdnL290aGVyLW50b29uZS54bWw6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvY2Fwcy5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgZG9jczogZml4IHNvbWUgZG9jcwotCSAgZnJvbSBnaXQgZ3JlcCBmb3IgZmZtcGVnY29sb3JzcGFjZSBhbmQgeC1yYXctCi0KLTIwMTItMDktMTMgMTA6NDg6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBwYXJzZTogYWRkIG1pc3NpbmcgZGVjbGFyYXRpb24KLQotMjAxMi0wOS0xMyAxMDoyNDoxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBpbmRlbnQgZml4Ci0KLTIwMTItMDktMTIgMjI6NDQ6MzcgLTA3MDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogQWRkIGEgbW9kZS9mbGFnIGZvciBkaXNhYmxpbmcgUFRTIGludGVycG9sYXRpb24KLQkgIFRvIGJlIHVzZWQgYnkgc3ViLWNsYXNzZXMgaW1wbGVtZW50aW5nIHZpZGVvIGZvcm1hdHMgd2l0aCByZW9yZGVyaW5nCi0JICBzdWNoIGFzIE1QRUcuCi0KLTIwMTItMDktMTAgMTg6Mzg6NTcgLTA3MDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogSGFuZGxlIEdBUCBhbmQgc3RpbGwtZnJhbWUgZXZlbnRzLgotCSAgSGFja3ksIGJlY2F1c2UgdGhlIHN0aWxsLWZyYW1lIGNvZGUgYWxsIGxpdmVzIGluIC1iYXNlLCB3aGVyZSB3ZQotCSAgY2FuJ3QgdXNlIGl0IC0gc28gdGhpcyBpcyBhIGhhY2t5IGR1cGxpY2F0aW9uIG9mIC1iYXNlIGNvZGUuIE5vdAotCSAgc3VyZSB3aGljaCB3YXkgdG8gZml4IHRoaXM6IE1vdmUgYmFzZXBhcnNlIHRvIC1iYXNlLCBvciBtb3ZlIHN0aWxsLWZyYW1lCi0JICBldmVudHMgdG8gY29yZT8KLQotMjAxMi0wOS0wNCAxOTozODoyNiAtMDcwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBSZXN0cnVjdHVyZSBldmVudCBoYW5kbGluZwotCSAgTWFrZSB0aGUgZXZlbnQgaGFuZGxpbmcgbW9yZSBsaWtlIHdoYXQgdmlkZW9kZWNvZGVyIGRvZXMsCi0JICB0byBlbnN1cmUgdGhhdCBhbGwgZXZlbnRzIGFyZSBwYXNzZWQgdG8gY2hpbGQgY2xhc3NlcyBiZWZvcmUgYmVpbmcKLQkgIHBsYWNlZCBvbiB0aGUgcGVuZGluZyBxdWV1ZSBvciBwdXNoZWQgb253YXJkLgotCi0yMDEyLTA5LTAzIDEwOjMwOjA4IC0wNzAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IFN0b3JlIGluY29taW5nIGNhY2hlZCBldmVudHMgaW4gcmV2ZXJzZSBvcmRlcgotCSAgUmV2ZXJzZSB0aGUgbGlzdCBqdXN0IGJlZm9yZSBzZW5kaW5nLiBQcmVwZW5kaW5nIGlzIG1vcmUgZWZmaWNpZW50Ci0JICB0aGFuIGFwcGVuZGluZywgc28gdGhpcyBzYXZlcyBzb21lIGN5Y2xlcy4KLQotMjAxMi0wOS0wMiAyMzozMjo1MCAtMDcwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBGaXJzdCBhdHRlbXB0IGF0IGhhbmRsaW5nIGJvdGggRFRTIGFuZCBQVFMKLQotMjAxMi0wOS0xMyAwMDozODoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ2xpc3Q6IGFkZCB3YXJuaW5nIHdoZW4gd2UgZ2V0IHNvbWV0aGluZyBlbHNlIHRoYW4gYSBzYW1wbGUgZm9yIGEgc2FtcGxlIHRhZwotCSAgRmFjaWxpdGF0ZSBHc3RCdWZmZXIgLT4gR3N0U2FtcGxlIHRyYW5zaXRpb24gZm9yIHNvbWUgdGFncywKLQkgIGNvdWxkIGJlIGhhcmQgdG8gY2F0Y2ggb3RoZXJ3aXNlIHdoZW4gY3JlYXRpbmcgdGFncywgc2luY2UKLQkgIGl0J2xsIG9ubHkgYmUgYXBwYXJlbnQgbGF0ZXIgd2hlbiBzb21lb25lIHRyaWVzIHRvIHJlYWQgdGhlCi0JICB0YWdzLgotCi0yMDEyLTA5LTEyIDE0OjE0OjMxICswMjAwICBBbmRyZWFzIEZyaXNjaCA8ZnJheGluYXNAb3BlbmRyZWFtYm94Lm9yZz4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBlbGVtZW50ZmFjdG9yeTogZG9uJ3QgY3Jhc2ggaWYgbm8gZWxlbWVudCBrbGFzcyBoYXMgYmVlbiBzZXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODM4NjUKLQotMjAxMi0wOS0xMiAyMzoxMjoxNCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IGZpeCBhIG1pc3BsYWNlZCAnKScKLQotMjAxMi0wOS0xMiAyMToyMDo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGVycm9yLmM6Ci0JICBlcnJvcjogZG9uJ3QgdGVsbCBwZW9wbGUgdG8gZmlsZSBhIGJ1ZyBmb3IgbmVnb3RpYXRpb24gZXJyb3JzCi0KLTIwMTItMDktMTIgMjA6NTQ6NTAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbGxlY3RwYWRzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBjb2xsZWN0cGFkczogcmVtb3ZlIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsCi0JICBSZW5hbWUgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkX2Z1bGwoKSB0byBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQoKSBhbmQgZml4IGFsbAotCSAgaW52b2NhdGlvbnMuCi0KLTIwMTItMDktMTIgMTc6MTY6NDEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogZml4IGJ1aWxkIG9uIEN5Z3dpbgotCSAgLi4uIHdoZXJlIF9fZmJ1ZnNpemUgaXMgbm90IGF2YWlsYWJsZQotCi0yMDEyLTA5LTEyIDEzOjAwOjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZTIuYzoKLQkgIFJldmVydCAidGVzdHM6IGZpeCBidWZmZXIgbGVhayBpbiBxdWV1ZTIgdW5pdCB0ZXN0IgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyMzJmZDI5NTNlYjAwZjY5NGI2NjdlNzc5NjcwNGY1OTc0Y2VhNDUyLgotCSAgVGhpcyB3YXMgYWxyZWFkeSBmaXhlZC4KLQotMjAxMi0wNS0yNCAxMzowODoxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBwb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gaW4gcmluZyBidWZmZXIgbW9kZSB3aGVuIHNlZWtpbmcKLQkgIEZpeCByYWNlIHRoYXQgY291bGQgY2F1c2UgZGF0YSBjb3JydXB0aW9uIHdoZW4gc2Vla2luZyBpbiByaW5nIGJ1ZmZlcgotCSAgbW9kZS4KLQkgIEluIHBlcmZvcm1fc2Vla190b19vZmZzZXQoKSwgY2FsbGVkIGZyb20gdGhlIGRlbXV4ZXIncyBwdWxsX3JhbmdlCi0JICByZXF1ZXN0LCB3ZSBkcm9wIHRoZSBsb2NrLCB0ZWxsIHVwc3RyZWFtICh1c3VhbGx5IGEgaHR0cCBzb3VyY2UpCi0JICB0byBzZWVrIHRvIGEgZGlmZmVyZW50IG9mZnNldCwgdGhlbiByZS1hY3F1aXJlIHRoZSBsb2NrIGJlZm9yZSB3ZQotCSAgZG8gdGhpbmdzIHRvIHRoZSByYW5nZXMuIEhvd2V2ZXIsIGJldHdlZW4gdXMgc2VuZGluZyB0aGUgc2VlayBldmVudAotCSAgYW5kIHJlLWFjcXVpcmluZyB0aGUgbG9jaywgdGhlIHNvdXJjZSB0aHJlYWQgbWlnaHQgYWxyZWFkeSBoYXZlIHB1c2hlZAotCSAgc29tZSBkYXRhIGFuZCBtb3ZlZCBhbG9uZyB0aGUgcmFuZ2UncyB3cml0aW5nX3BvcyBiZXlvbmQgdGhlIHNlZWsKLQkgIG9mZnNldC4gSW4gdGhhdCBjYXNlIHdlIGRvbid0IHdhbnQgdG8gc2V0IHRoZSB3cml0aW5nIHBvc2l0aW9uIGJhY2sKLQkgIHRvIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiwgYXMgaXQgd291bGQgY2F1c2UgZGF0YSB0byBiZSB3cml0dGVuCi0JICB0byB0aGUgd3Jvbmcgb2Zmc2V0IGluIHRoZSBmaWxlIG9yIHJpbmcgYnVmZmVyLgotCSAgUmVwcm9kdWNpYmxlIGRvaW5nIHNlZWstZW11bGF0ZWQgZmFzdC1mb3J3YXJkL2JhY2t3YXJkIG9uIDAwNjY1My4KLQkgIENvbmZsaWN0czoKLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmMKLQotMjAxMi0wNS0yNCAxMzowNjo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSAgdGVzdHM6IGZpeCBidWZmZXIgbGVhayBpbiBxdWV1ZTIgdW5pdCB0ZXN0Ci0KLTIwMTItMDktMTIgMTI6MjM6MjIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgY2hlY2s6IHJlbW92ZSBnbGliIGRlcHJlY2F0aW9uIGNvbXBhdGliaWxpdHkgdHJpY2tlcnkKLQotMjAxMi0wOS0xMiAxMjoyMjo1MyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKLQkgIGNoZWNrOiBwb3J0IHRvIHRoZSBuZXcgR0xpYiB0aHJlYWQgQVBJCi0KLTIwMTItMDktMTIgMTE6NTI6MjUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZ3NldHRlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvY3NldHRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jOgotCSAgdGVzdHM6IHBvcnQgdG8gbmV3IEdMaWIgdGhyZWFkIEFQSQotCi0yMDEyLTA5LTEyIDExOjQ5OjU1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9nc3RidWZmZXJzdHJlc3MuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0cG9sbHN0cmVzcy5jOgotCSAgdGVzdHM6IGJlbmNobWFya3M6IGFsaWduIGVycm9yIG1lc3NhZ2Ugd2l0aCBjb2RlCi0KLTIwMTItMDktMTEgMTk6NDk6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcGFkOiBleHBvc2UgZ3N0X3BhZF9tb2RlX2dldF9uYW1lKCkgYW5kIHVzZSBpdCBpbiBiYXNlcGFyc2UKLQotMjAxMi0wOS0xMSAxMzoyMjo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHNjcmlwdHMvY3JlYXRlLXVuaW5zdGFsbGVkLXNldHVwLnNoOgotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBzY3JpcHRzOiB1cGRhdGUgZm9yIGdzdC1mZm1wZWcgLT4gZ3N0LWxpYmF2Ci0JICBOb3cgdGhhdCB3ZSBoYXZlIGEgZ3N0LWxpYmF2IGdpdCByZXBvc2l0b3J5IChzeW1saW5rZWQgdG8gZ3N0LWZmbXBlZykuCi0KLTIwMTItMDktMTEgMTc6Mjc6MDMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBhZGp1c3QgdGVzdCBsb2dpYyBmb3Igc2NoZWR1bGluZyBtb2RlIHdpdGggZmxhZ1MKLQotMjAxMi0wOS0xMSAxNjozOTozNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBxdWVyeTogYWRkIGNvbnZlbmllbmNlIEFQSSB0byBxdWVyeSBmb3Igc2NoZWR1bGluZyBtb2RlIGFuZCBmbGFncwotCi0yMDEyLTA5LTExIDE2OjI5OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGV2ZW50czogcmVtb3ZlIFNUUkVBTV9DT05GSUcKLQkgIFdlIHdvbid0IGJlIGFibGUgdG8gaW1wbGVtZW50IHRoaXMgc28gaXQncyBiZXR0ZXIgdG8gbW92ZSBpdCBvdXQgb2YgdGhlIHdheS4KLQotMjAxMi0wOS0xMSAxNjowOTozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgY29sbGVjdHBhZHM6IGNsZWFuIHVwIGhlYWRlciBpbmRlbnRhdGlvbgotCi0yMDEyLTA5LTExIDExOjM0OjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBhbGxvdyBOVUxMIHN0cmVhbV9pZCBhbHNvIHdoZW4gMCBzcmNwYWRzCi0JICBXZSB1c3VhbGx5IGZpcnN0IGNyZWF0ZSB0aGUgc3RyZWFtX2lkIGZvciB0aGUgc3RyZWFtX3N0YXJ0IGV2ZW50IGFuZCB0aGVuIGFkZAotCSAgdGhlIHBhZCB0byB0aGUgZWxlbWVudC4gVGhpcyBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb25zIHNob3VsZCB3b3JrIHdoZW4gdGhlcmUKLQkgIGFyZSBubyBwYWRzIG9uIHRoZSBlbGVtZW50IHlldC4KLQotMjAxMi0wOS0xMCAyMTozOTozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIGJhc2VwYXJzZSwgdHlwZWZpbmQ6IG9ubHkgYWN0aXZhdGUgaW4gcHVsbCBtb2RlIGlmIHVwc3RyZWFtIGlzIHNlZWthYmxlCi0JICBVcHN0cmVhbSBtaWdodCBzdXBwb3J0IHB1bGwgbW9kZSwgYnV0IG9ubHkgc2VxdWVudGlhbCBwdWxscywKLQkgIHdoaWNoIGlzbid0IGdvbm5hIGRvIG11Y2ggZm9yIHVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDkyNwotCi0yMDEyLTA5LTEwIDIwOjMwOjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgcG9ydGluZy10by0wLjExLnR4dDogc29tZSBtaW5vciBmaXhlcwotCi0yMDEyLTA5LTEwIDE2OjUyOjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSAgc2FtcGxlOiBmcmVlIGluZm8gc3RydWN0dXJlIHdpdGggc2FtcGxlIGlmIHRoZXJlIGlzIG9uZSBhbmQgZml4IGNvcHkgd2l0aCBOVUxMIGluZm8gc3RydWN0dXJlCi0KLTIwMTItMDktMTAgMTI6MjA6MTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGFkZCBwYWRkaW5nIHRvIEdzdE1hcEluZm8KLQotMjAxMi0wOS0xMCAxMjoxMjowMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuaDoKLQkgIGxpYnM6IGFkanVzdCBjb21tZW50IHN0eWxlCi0KLTIwMTItMDktMTAgMTI6MTE6MjMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y29tcGF0Lmg6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBnc3Q6IHJlbW92ZSBzb21lIGRlZnVuY3QgY29tbWVudGVkIGNvZGUKLQotMjAxMi0wOS0xMCAxMjowMDoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIGRvY3M6IGltcHJvdmUgcG9ydGluZyBkb2MKLQotMjAxMi0wOS0xMCAxMDowODowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svdG9vbHMvZ3N0aW5zcGVjdC5jOgotCSAgdGVzdHM6IGRpc2FibGUgZGVwcmVjYXRpb24gd2FybmluZ3MKLQkgIGRlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MgZWFybGllciBzbyB0aGF0IGl0IGlzIGRlZmluZWQgYmVmb3JlCi0JICB0aGUgZ2xpYiBoZWFkZXJzIGFyZSBsb2FkZWQgb3IgZWxzZSB3ZSB0cmlwIG92ZXIgdGhlIEdWYWx1ZUFycmF5IGRlcHJlY2F0aW9ucyBpbgotCSAgZ3N0LWluc3BlY3QuYy4KLQotMjAxMi0wOS0wNyAwMTowMjoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5jOgotCSAgY29udHJvbGxlcjogZml4IGRpcmVjdCBjb250cm9sIGJpbmRpbmcgZG91YmxlIC0+IGludCBjb252ZXJzaW9uCi0JICBSb3VuZCBwcm9wZXJseSB0byBuZWFyZXN0IGludGVnZXIuIEZpeGVzIGNvbnRyb2xsZXIKLQkgIHVuaXQgdGVzdCBvbiBQb3dlclBDIEc0LgotCi0yMDEyLTA5LTA2IDE1OjA2OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmM6Ci0JICBleGFtcGxlczogZml4IGJ1cy9mZCBsZWFrIGluIGhlbGxvIHdvcmxkIGV4YW1wbGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODM0NzAKLQotMjAxMi0wOS0wNSAxOTo1NToxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC1lbGVtZW50LWNoZWNrLm00OgotCSAgZ3N0LWVsZW1lbnQtY2hlY2subTQ6IGZpeCBhY3Rpb24taWYtZm91bmQgYW5kIG5vdC1mb3VuZCBpbnZvY2F0aW9uCi0JICBBcmd1bWVudHMgZ290IHNoaWZ0ZWQgYmFjayBieSBvbmUuCi0KLTIwMTItMDktMDUgMTU6Mzc6MTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogaGFuZGxlIEdBUCBldmVudAotCi0yMDEyLTA5LTA0IDEyOjEzOjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBiYXNlc2luazogd2FpdF9lb3MgLT4gd2FpdF9ldmVudAotCSAgRml4IGEgRklYTUUuIE5vdyB3ZSBjYW4gYWxzbyBwYXNzIHRoZSBHQVAgZXZlbnQgdG8gdGhlIHN1YmNsYXNzLgotCi0yMDEyLTA5LTAzIDE4OjQ1OjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSAgZXhhbXBsZXM6IHVwZGF0ZSBNYWtlZmlsZS5hbSBhbmRyb2lkIGJpdHMgaW4gY29udHJvbGxlciBleGFtcGxlCi0JICBTaG91bGQgZml4IGJ1aWxkIGZhaWx1cmUgcmVwb3J0ZWQgb24gSVJDLgotCi0yMDEyLTA4LTMwIDE5OjE1OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGNoZWNrIHN0aWNreSBldmVudHMgYWxzbyBhZnRlciBwYWQgYmxvY2sKLQkgIFJlY2hlY2sgZm9yIHN0aWNreSBldmVudHMgYWZ0ZXIgZG9pbmcgYSBwYWQgYmxvY2sgYmVjYXVzZSB0aGUgcGFkIGJsb2NrIGNvdWxkCi0JICBoYXZlIGNhdXNlZCBhIHJlbGluayBhbmQgdGhlbiB3ZSBuZWVkIHRvIHJlc2VuZCB0aGUgZXZlbnRzIHRvIHRoZSBuZXdseSBsaW5rZWQKLQkgIHBhZC4KLQkgIEZpeGVzIHRoaW5ncyBsaWtlIHN3aXRjaGluZyBvZiB2aXN1YWxpc2F0aW9ucy4KLQotMjAxMi0wOS0wMiAwMjowNDoxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogdXBkYXRlIGZvciBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24gLT4gX2R1cmF0aW9uX2NoYW5nZWQoKQotCi0yMDEyLTA5LTAyIDAxOjE3OjQ0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3Rjb21wYXQuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWVzc2FnZTogcmVuYW1lIEdTVF9NRVNTQUdFX0RVUkFUSU9OIC0+IEdTVF9NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQKLQkgIFRoZSBkdXJhdGlvbiBzaG91bGQgYmUgcmUtcXVlcmllZCB2aWEgYSBxdWVyeSB1c2luZyB0aGUKLQkgIG5vcm1hbCBwYXRoLCB3ZSBkb24ndCB3YW50IGFwcGxpY2F0aW9ucyB0byB1c2UgdGhlIHZhbHVlCi0JICBmcm9tIHRoZSBtZXNzYWdlIGl0c2VsZiwgc2luY2UgaXQgbWlnaHQgbm8gbWF0Y2ggd2hhdCBhCi0JICBkdXJhdGlvbiBxdWVyeSBkb25lIGZyb20gdGhlIHNpbmsgdXBzdHJlYW0gbWlnaHQgeWllbGQuCi0JICBBbHNvIGRpc2FibGVzIGR1cmF0aW9uIGNhY2hpbmcgaW4gR3N0QmluLiBJdCBzaG91bGQgYmUKLQkgIGFkZGVkIGJhY2sgYWdhaW4gYXQgc29tZSBwb2ludC4KLQotMjAxMi0wOS0wMSAyMzo1NDoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBhZGQgcmVtaW5kZXIgdG8gcmVtb3ZlIEdTVF9VTlNUQUJMRV9BUEkgc3R1ZmYgYmVmb3JlIDEuMC4wCi0KLTIwMTItMDktMDEgMTg6MDY6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC1lbGVtZW50LWNoZWNrLm00OgotCSogZ3N0LWVsZW1lbnQtY2hlY2subTQuaW46Ci0JICBnc3QtZWxlbWVudC1jaGVjay5tNDogcmVuYW1lIEFNX0dTVF9FTEVNRU5UX0NIRUNLIHRvIEdTVF9FTEVNRU5UX0NIRUNLCi0JICBBbmQgYWxsb3cgcGFzc2luZyBvZiBhIG1pbmltdW0gdmVyc2lvbiAoaWYgbm90IG5lZWRlZCwgcGFzcyAxLjApLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Mjk2OAotCi0yMDEyLTA5LTAxIDE3OjUwOjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay90b29scy9nc3RpbnNwZWN0LmM6Ci0JICB0ZXN0czogYWRkIGNoZWNrIGZvciBnc3QtaW5zcGVjdCAtLWV4aXN0cyBmdW5jdGlvbmFsaXR5Ci0KLTIwMTItMDktMDEgMTc6NDc6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29sczogYWRkIC0tZXhpc3RzIGFuZCAtLWF0bGVhc3QtdmVyc2lvbiBvcHRpb24gdG8gZ3N0LWluc3BlY3QKLQkgIEZvciBjaGVja2luZyBpZiBhbiBlbGVtZW50IGV4aXN0cyB3aXRoIGEgZ2l2ZW4gbWluaW11bSB2ZXJzaW9uLgotCSAgV2lsbCB1c2UgdGhhdCBpbiBvdXIgbmV3IEdTVF9FTEVNRU5UX0NIRUNLIG00IG1hY3JvLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Mjk2OAotCi0yMDEyLTA5LTAxIDE3OjMyOjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkgIHBsdWdpbmZlYXR1cmU6IGRpc2FibGUgdmVyc2lvbiBtYW5nbGluZyBmb3IgcG9zdC0xLjAuMCByZWxlYXNlCi0JICBKdXN0IGluIGNhc2Ugd2UgZG9uJ3QgZ3JlcCBmb3IgRklYTUUgMS4wIGJlZm9yZSB0aGUgcmVsZWFzZS4KLQotMjAxMi0wOC0zMSAxMTozMTo0NSAtMDcwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogTWFrZSBHQVAgZXZlbnRzIGFjdHVhbGx5IHRyaWdnZXIgcHJlcm9sbAotCSAgU2xpZ2h0bHkgaGFja3kgYXBwcm9hY2ggbmVlZGluZyByZWZpbmVtZW50Ci0KLTIwMTItMDgtMzEgMDY6MjU6MjIgLTA3MDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0cGFkOiBtYWtlIHNvbWUgZGVidWcgc3RhdGVtZW50cyBtb3JlIHZlcmJvc2UKLQotMjAxMi0wOC0zMSAwNjoyMzo1MyAtMDcwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgZ2hvc3RwYWQ6IE1ha2Ugc29tZSBkZWJ1Z2dpbmcgbW9yZSB2ZXJib3NlCi0JICBBbHNvLCByZW1vdmUgYW4gdW5uZWNlc3NhcnkgI2luY2x1ZGUgaW4gaW5wdXQtc2VsZWN0b3IKLQotMjAxMi0wOC0yOCAxNTo0NDo0OCAtMDcwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgR3N0U2VnbWVudDogRml4IGRvYyBkZXNjcmlwdGlvbiBzdHJpbmcgbGFzdF9zdG9wLT5wb3NpdGlvbgotCi0yMDEyLTA4LTMwIDE5OjQ3OjU3ICswMTAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBmaXggY2xvY2sgbGVhawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Mjk5NwotCi0yMDEyLTA4LTI5IDIyOjU3OjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIHRvb2xzOiBvdXRwdXQgZ3N0LWluc3BlY3QgZXJyb3JzIHRvIHN0ZGVycgotCi0yMDEyLTA4LTI4IDA3OjM5OjUwICswMjAwICBBbGJhbiBCcm93YWV5cyA8cHJhaGFsQHlhaG9vLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogZml4IGNyYXNoIHNlcmlhbGlzaW5nIGEgMCBmbGFncyB2YWx1ZSB3aGVuIHRoZXJlJ3Mgbm8gbmFtZSBmb3IgaXQKLQkgIEZpeGVzIHNlZ2ZhdWx0IHdoZW4gZG9pbmcgZ3N0LWxhdW5jaC0xLjAgLXYgLW0gY2FtZXJhYmluCi0JICAoZW5jb2RlYmluIG5vdGlmaWVzIGEgMCB2YWx1ZSBmb3IgaXRzICJmbGFnIiBwcm9wZXJ0eSkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyOTU4Ci0KLTIwMTItMDgtMjQgMjM6MTQ6NTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogbG9nIHBlcmZvcm1hbmNlIHdhcm5pbmcgZGVidWcgbWVzc2FnZSBpZiBnbGliIGVtdWxhdGVzIGF0b21pYyBvcHMKLQotMjAxMi0wOC0yMyAxMzo1MToyNyArMDEwMCAgTGlvbmVsIExhbmR3ZXJsaW4gPGxsYW5kd2VybGluQGdtYWlsLmNvbT4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSAgZ3N0OiB1c2UgY29uZmlndXJlLWRldGVjdGVkIG9yIGV4dGVybmFsbHkgcHJvdmlkZWQgZ2xpYi1ta2VudW1zCi0JICBUbyBlYXNlIGNyb3NzLWNvbXBpbGF0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzYyMAotCi0yMDEyLTA4LTIyIDEzOjI5OjM0ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNjY4YWNlZSB0byA0Zjk2MmY3Ci0KLTIwMTItMDgtMjIgMTM6MTQ6NTYgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogYnVtcCBndGstZG9jIHJlcSB0byAxLjEyIChtYXItMjAwOSkKLQkgIFRoaXMgYWxsb3dzIHVzIHRvIGUuZy4gdW5jb25kaXRpb25hbGx5IHVzZSBndGtkb2MtcmViYXNlLgotCi0yMDEyLTA4LTIxIDEzOjMwOjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGFkZCBfbWFrZV93cml0YWJsZQotCi0yMDEyLTA4LTIxIDAwOjAzOjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogbWVudGlvbiBzb21lIG1lZGlhIHR5cGUgY2hhbmdlcyBpbiBwb3J0aW5nLXRvLTAuMTEudHh0IGRvYwotCi0yMDEyLTA4LTIwIDEzOjUxOjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIGRvY3M6IG1pbm9yIHVwZGF0ZSB0byBwb3J0aW5nIGRvYyBmb3IgY2hpbGQgcHJveHkgbG9va3VwIG1ldGhvZAotCSAgQW5kIGEgdHlwbyBmaXguCi0KLTIwMTItMDgtMjAgMTE6MzE6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RhbGxvY2F0b3IuYzoKLQkgIGFsbG9jYXRvcjogbWFrZSBhIGNvcHkgd2l0aCB0aGUgc2FtZSBhbGlnbm1lbnQKLQkgIFdoZW4gbWFraW5nIGEgY29weSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIHRoZSBkZWZhdWx0IG1lbW9yeSBhbGxvY2F0b3IsCi0JICBtYWtlIHN1cmUgdGhlIG5ldyBjb3B5IGhhcyB0aGUgc2FtZSBhbGlnbm1lbnQgYXMgdGhlIG9yaWdpbmFsIG1lbW9yeS4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwNzk2Ci0KLTIwMTItMDgtMTkgMTc6NTE6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG1ha2Ugc2Vla2luZyBpbiBERUZBVUxUIGZvcm1hdCB3b3JrIGlmIHRoZSBzdWJjbGFzcyBjYW4gY29udmVydCBmb3IgdXMKLQkgIFdlIG9ubHkgZGVhbCBpbiBUSU1FIGZvcm1hdCBvdXJzZWx2ZXMsIGJ1dCBpZiB0aGUgc3ViY2xhc3MgY2FuIGhhbmRsZQotCSAgY29udmVydGluZyBvdGhlciBmb3JtYXRzIGludG8gVElNRSBmb3JtYXQsIHdlIGNhbiBzdXBwb3J0IHRoYXQgdG9vLgotCSAgRml4ZXMgc2Vla2luZyBpbiBERUZBVUxUIChzYW1wbGUpIGZvcm1hdCB3aXRoIGZsYWNwYXJzZSwKLQkgIGFuZCB0aGUgZmxhY2RlYyB1bml0IHRlc3QuCi0KLTIwMTItMDgtMTggMjE6NDI6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIHRvb2xzOiBtaW5vciBmaXhlcyB0byBnc3QtbGF1bmNoIG1hbiBwYWdlCi0KLTIwMTItMDgtMTcgMTI6MjM6NTAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIHByZXNldDogaW1wbGVtZW50IGNoaWxkX3Byb3h5IHN1cHBvcnQKLQkgIEVsZW1lbnRzIHN1Y2ggYXMgdGhlIEdzdElpckVxdWFsaXplck5CYW5kcyB3b3VsZCBzbyBmYXIgbm90IHN0b3JlIHRoZSBwcm9wZXJ0aWVzCi0JICBvZiB0aGVpciBjaGlsZHJlbi4gTm93IHdlIGFsc28gZ3JhYiB0aGUgcHJvcGVydGllcyBvZiBjaGlsZCBlbGVtZW50cyBhbmQgdHJ5IHRvCi0JICByZXN0b3JlIHRoZW0uCi0KLTIwMTItMDgtMTQgMTg6NDQ6MzggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFdhaXQgZm9yIG90aGVyIHN0cmVhbXMgdG8gYWR2YW5jZSBvbiB1bnNlbGVjdGVkIHBhZHMKLQkgIE90aGVyd2lzZSB3ZSBlbmQgdXAgZHJvcHBpbmcgYSBsb3Qgb2YgZGF0YSBpbiB0aGUgY2FzZSB3aGVyZSBkYXRhIHN0YXJ0cwotCSAgYXJyaXZpbmcgb24gdGhlIG5vbi1zZWxlY3RlZCBwYWQsIHJlc3VsdGluZyBpbiBiaWcgZ2FwcyBpbiBzdHJlYW0gc3dpdGNoaW5nCi0KLTIwMTItMDgtMTQgMTg6NDM6NTQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IE1vcmUgZGVidWcgc3RhdGVtZW50cwotCi0yMDEyLTA4LTE0IDE4OjQyOjMxICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBEb24ndCBmb3J3YXJkIHN0cmVhbS1zdGFydCBzdGlja3kgZXZlbnRzCi0JICBPbmx5IG9uZSBTVFJFQU1fU1RBUlQgZXZlbnQgc2hvdWxkIGJlIGxldCB0aHJvdWdoLCBlbHNlIGl0IHdpbGwKLQkgIGNvbmZ1c2UgZG93bnN0cmVhbSBlbGVtZW50cyB0aGF0IHRoaW5rIGEgbmV3IHN0cmVhbSBpcyBzdGFydGluZwotCSAgd2hlcmVhcyBpbiBmYWN0IHdlIGFyZSBqdXN0IHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBpbnB1dC4KLQkgIEluIHRoZSBmdXR1cmUgd2UgbWlnaHQgd2FudCB0byBsZXQgdGhlbSB0aHJvdWdoIGJ1dCB3aXRoIHRoZSBzYW1lCi0JICBzZXF1ZW5jZSBudW1iZXIuCi0KLTIwMTItMDgtMTQgMTU6NDY6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgZG9jczogQWRkIG5ldyBiYXNlc3JjL2Jhc2V0cmFuc2Zvcm0gQVBJIHRvIHRoZSBkb2NzCi0KLTIwMTItMDgtMDcgMTc6Mzg6NTMgKzAyMDAgIFbDrWN0b3IgTWFudWVsIErDoXF1ZXogTGVhbCA8dmphcXVlekBpZ2FsaWEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYmFzZXRyYW5zZm9ybTogZ2V0dGVycyBmb3IgcG9vbCBhbmQgYWxsb2NhdG9yCi0JICBTb21ldGltZXMgYSB0cmFuc2Zvcm0gZmlsdGVyIHdvdWxkIG5lZWQgdGhlIGJ1ZmZlciBwb29sIG9yIHRoZSBtZW1vcnkKLQkgIGFsbG9jYXRvciBuZWdvdGlhdGVkIGJ5IHRoZSBiYXNlIGNsYXNzLCBmb3IgZXhhbXBsZSwgZm9yIHF1ZXJ5aW5nIGRpZmZlcmVudAotCSAgcGFyYW1ldGVycywgc3VjaCBhcyBhIGJpZ2dlciBudW1iZXIgb2YgYnVmZmVycyB0byBhbGxvY2F0ZSBieSB0aGUgYnVmZmVyIHBvb2wuCi0JICBUaGlzIHBhdGNoIGV4cG9zZSBhIHR3byBnZXR0ZXJzIGFjY2Vzc29yczogb25lIGZvciB0aGUgYnVmZmVyIHBvb2wgYW5kIHRoZQotCSAgb3RoZXIgZm9yIHRoZSBtZW1vcnkgYWxsb2NhdG9yLgotCi0yMDEyLTA4LTA3IDE3OjM1OjQ4ICswMjAwICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgPHZqYXF1ZXpAaWdhbGlhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIGJhc2VzcmM6IGdldHRlcnMgZm9yIHBvb2wgYW5kIGFsbG9jYXRvcgotCSAgU29tZXRpbWVzIHRoZSBzb3VyY2VzIHdvdWxkIHVzZSB0aGUgYnVmZmVyIHBvb2wgb3IgdGhlIG1lbW9yeSBhbGxvY2F0b3IgZm9yCi0JICBzb21ldGhpbmcgZWxzZSB0aGFuIGp1c3QgYWxsb2NhdGluZyBvdXRwdXQgYnVmZmVyczsgZm9yIGV4YW1wbGUsIHF1ZXJ5aW5nIGZvcgotCSAgZGlmZmVyZW50IHBhcmFtZXRlcnMsIHN1Y2ggYXMgYSBiaWdnZXIgbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgYnkgdGhlCi0JICBwb29sLgotCSAgVGhpcyBwYXRjaCBleHBvc2UgYSB0d28gZ2V0dGVycyBhY2Nlc3NvcnM6IG9uZSBmb3IgdGhlIGJ1ZmZlciBwb29sIGFuZCB0aGUKLQkgIG90aGVyIGZvciB0aGUgbWVtb3J5IGFsbG9jYXRvci4KLQotMjAxMi0wOC0xNCAwMDozOToxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHJlZ2lzdHJ5OiByZW1vdmUgc29tZSB1bnVzZWQgYW5kIGluIHRoZWlyIGN1cnJlbnQgZm9ybSBwb2ludGxlc3MgQVBJCi0JICBOb3Qgc28gdXNlZnVsOiBqdXN0IGFkZHMvcmVhZHMgc3R1ZmYgZnJvbSBhbiBpbnRlcm5hbCBHTGlzdCB3aXRob3V0Ci0JICBhY3R1YWxseSBkb2luZyBhbnl0aGluZyB3aXRoIHRob3NlIHBhdGhzLCBzbyByZW1vdmUgZm9yIG5vdzoKLQkgIGdzdF9yZWdpc3RyeV9hZGRfcGF0aAotCSAgZ3N0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDg4NDEKLQotMjAxMi0wOC0xMiAxMzoyNzowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlOiBmaXggdXAgZm9yIGdzdF9jaGlsZF9wcm94eV9sb29rdXAoKSBvbmx5IHdvcmtpbmcgb24gY2hpbGQgcHJveHkgaW50ZXJmYWNlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MTY4MQotCi0yMDEyLTA4LTEyIDEzOjI0OjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuaDoKLQkgIGNoaWxkcHJveHk6IG1ha2UgZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCgpIGEgcHJvcGVyIEdzdENoaWxkUHJveHkgbWV0aG9kCi0JICBObyBsb25nZXIgYWNjZXB0IGFueSBvbGQgR09iamVjdHMuIFRoaXMgbWFrZXMgdGhpbmdzIG5pY2VyIGZvcgotCSAgYmluZGluZ3MuIElmIGEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYm90aCBuaWNlbHkKLQkgIGlzIGRlZW1lZCB3b3J0aHdoaWxlLCB3ZSBjYW4gc3RpbGwgYWRkIG9uZSB0byBnc3R1dGlscy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODE2ODEKLQotMjAxMi0wOC0xMyAwMDowMToxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogd2hlbiBzZXJpYWxpc2luZyBhcnJheXMgb3IgbGlzdHMsIGhhbmRsZSB0eXBlcyB3ZSBjYW4ndCBzZXJpYWxpc2UgbW9yZSBncmFjZWZ1bGx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMzIyCi0KLTIwMTItMDgtMTIgMTk6Mzk6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgotCSAgY29uc2lzdGVuY3ljaGVja2VyOiBhZGQgc29tZSBtb3JlIGRldGFpbHMgdG8gZmFpbHVyZSBtZXNzYWdlcwotCSAgTWVudGlvbiBwYWQgd2hlcmUgdGhlIHByb2JsZW0gb2NjdXJlZCwgYW5kIHRoZSBldmVudCBuYW1lLgotCi0yMDEyLTA4LTEyIDE4OjM2OjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzoKLQkgIHRlc3RzOiBmaXggY29sbGVjdHBhZHMgdGVzdAotCSAgQWZ0ZXIgYW4gRU9TIHdlIG11c3Qgc2VuZCBhIEZMVVNIX1NUT1AgZXZlbnQgaWYKLQkgIHdlIHdhbnQgdG8gc2VuZCBkYXRhIGFnYWluLgotCi0yMDEyLTA4LTEyIDE4OjMxOjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBmaXggbGVhayBpbiBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0KCkKLQkgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0KCkgd2lsbCBtYWtlIGEgY29weSBvZiB0aGUgc3RyaW5nCi0JICBleHRyYWN0ZWQsIGJ1dCB3ZSdyZSBhc3NpZ25pbmcgaXQgdG8gYSBjb25zdCBnY2hhciAqLgotCi0yMDEyLTA4LTEyIDE2OjQwOjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIHRlc3RzOiBtYWtlIHBpcGVsaW5lIHRlc3QgdmFsZ3JpbmQgY2xlYW4KLQotMjAxMi0wOC0xMiAxNjozNzowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIHRlc3RzOiBmaXggcGlwZWxpbmUgdW5pdCB0ZXN0Ci0JICBXaGljaCB3YXMgZGlzYWJsZWQgYmVjYXVzZSBpdCBmYWlsZWQuCi0KLTIwMTItMDgtMTIgMTU6NDg6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHNjcmlwdHMvY3JlYXRlLXVuaW5zdGFsbGVkLXNldHVwLnNoOgotCSAgc2NyaXB0czogZml4IHVudGVybWluYXRlZCBxdW90ZWQgc3RyaW5nIGluIGNyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaAotCi0yMDEyLTA4LTEyIDAwOjEyOjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogbWVudGlvbiBnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoKSBpbiBwb3J0aW5nIGd1aWRlCi0KLTIwMTItMDgtMTEgMjI6MTk6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5oOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZG9jczogZml4IHVwIGRvY3MgYSBiaXQKLQotMjAxMi0wOC0xMSAyMjoxODoxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkgIGNoaWxkcHJveHk6IGZpeCB1cCBnLWkgYW5ub3RhdGlvbiBmb3IgX2xvb2t1cCgpIHBhcmFtc3BlYyByZXR1cm4gdmFsdWUKLQkgIE5vIHJlZiBpcyByZXR1cm5lZCBoZXJlLgotCi0yMDEyLTA4LTExIDIyOjE3OjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiB1cGRhdGUgLmRlZiBmaWxlIGZvciBuZXcgYnVmZmVyIGZ1bmN0aW9ucwotCi0yMDEyLTA4LTEwIDIyOjU4OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggcmV2ZXJzZSBwbGF5YmFjayB3aXRoIHVwc3RyZWFtIGRlbXV4ZXJzIHRoYXQgc3VwcG9ydCBpdAotCSAgRG9uJ3QganVzdCByZXR1cm4gRkFMU0UgZm9yIHNlZWsgZXZlbnRzIHdpdGggbmVnYXRpdmUgcmF0ZXMgd2hlbgotCSAgb3BlcmF0aW5nIGluIHB1c2ggbW9kZS4gQW4gdXBzdHJlYW0gZGVtdXhlciBtYXkgc3VwcG9ydCB0aGlzIGp1c3QKLQkgIGZpbmUsIHNvIGlmIHdlJ3JlIG5vdCBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlIGFsd2F5cyBjaGVjayB1cHN0cmVhbQotCSAgZmlyc3QgaWYgaXQgY2FuIGhhbmRsZSB0aGUgc2VlayBldmVudC4gVGhpcyBmaXhlcyByZXZlcnNlIHBsYXliYWNrCi0JICB3aGVyZSB0aGUgdXBzdHJlYW0gZGVtdXhlciBzdXBwb3J0cyBpdCAoZS5nLiB3aXRoIHF0ZGVtdXgpLiBUaGUKLQkgIHNhbWUgY29kZSB3b3VsZCB3b3JrIGZpbmUgaW4gMC4xMCwgYmVjYXVzZSBiYXNlcGFyc2Ugd2lsbCBqdXN0Ci0JICBjYWxsIHRoZSBkZWZhdWx0IHBhZCBldmVudCBoYW5kbGVyIGlmIEZBTFNFIHdhcyByZXR1cm5lZCBmcm9tIHRoZQotCSAgYmFzZXBhcnNlIGV2ZW50IGhhbmRsZXIsIGFuZCB0aGUgcGFkIGV2ZW50IGhhbmRsZXIgd2lsbCBqdXN0Ci0JICBmb3J3YXJkIGl0IHVwc3RyZWFtLiBJbiAwLjExIHRoZSBiYXNlY2xhc3Mgb3Igc3ViY2xhc3MgaXMKLQkgIHJlc3BvbnNpYmxlIGZvciBjaGFpbmluZyB1cCB0byB0aGUgcGFyZW50IGNsYXNzIG9yIGZvcndhcmRpbmcgdGhlCi0JICBldmVudCB1cHN0cmVhbSBpbiBhbnkgY2FzZS4KLQkgIERpc2FibGUgcmV2ZXJzZSBwbGF5YmFjayBpbiBwdWxsIG1vZGUgZm9yIG5vdywgdGhlcmUgc2VlbXMgdG8KLQkgIGJlIHNvbWV0aGluZyBnb2luZyB3cm9uZyB3aXRoIHRoZSBzZWdtZW50IGNvbmZpZ3VyYXRpb24gaW4gdGhhdAotCSAgY2FzZS4KLQotMjAxMi0wOC0wNCAxMTo0ODo1MiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGRvIG5vdCBlcnJvciBvbiBub3QtbmVnb3RpYXRlZAotCSAgRG9uJ3QgZXJyb3Igb3V0IHRvbyBlYXJseSBhbmQgbGV0IHVwc3RyZWFtIGRlY2lkZSBpZiBpdCBjYW4KLQkgIHdvcmthcm91bmQgYSBub3QtbmVnb3RpYXRlZCBwcm9ibGVtCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMTk4Ci0KLTIwMTItMDgtMDQgMTE6NDg6MTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiByZXRyeSBvbiBub3QtbmVnb3RpYXRlIGlmIGEgcmVjb25maWd1cmUgaXMgcGVuZGluZwotCSAgQmVmb3JlIGVycm9yaW5nIG91dCBvbiBub3QtbmVnb3RpYXRlZCByZXR1cm5zLCBjaGVjayBpZiB0aGUgcGFkCi0JICBoYXMgdGhlIHJlY29uZmlndXJlIGZsYWcgc2V0IGFuZCByZXRyeS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODExOTgKLQotMjAxMi0wOC0wNCAxMTo0MjowNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHBhZDogYWRkIGdzdF9wYWRfbmVlZHNfcmVjb25maWd1cmUKLQkgIEFkZCBhbiBhbHRlcm5hdGl2ZSB2ZXJzaW9uIG9mIGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgdGhhdCBkb2Vzbid0Ci0JICBjbGVhciB0aGUgcmVjb25maWd1cmUgZmxhZy4KLQkgIFVzZWZ1bCBmb3IgaW5jcmVhc2luZyBlcnJvciByZXNpbGllbmNlIHdpdGhvdXQgZHVwbGljYXRpbmcgdGhlCi0JICByZWNvbmZpZ3VyZSBjb2RlIGluIHBhZCB0YXNrIGZ1bmN0aW9ucy4KLQkgIEFQSTogZ3N0X3BhZF9uZWVkc19yZWNvbmZpZ3VyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MTE5OAotCi0yMDEyLTA3LTI5IDE1OjQ0OjQ1IC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBhZGQgR1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQgdG8gR3N0UGFkTGlua0NoZWNrCi0JICBUaGlzIGFsbG93cyBpbnRyb3NwZWN0aW9uLWJhc2VkIGJpbmRpbmdzIHRvIGFjY2VzcwotCSAgR3N0LlBhZExpbmtDaGVjay5ERUZBVUxUIGluc3RlYWQgb2YKLQkgIEdzdC5QQURfTElOS19DSEVDS19ERUZBVUxULgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODMwMQotCi0yMDEyLTA3LTI5IDE0OjU3OjQxIC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBtYXJrIGdzdF9idWZmZXJfd3JhcHBlZCogZGF0YSBhcyBhcnJheQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODMwMQotCi0yMDEyLTA3LTI0IDEzOjI2OjAwIC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHRvYy5jOgotCSAgaW50cm9zcGVjdGlvbjogZml4IHNvbWUgd2FybmluZ3MgZ2VuZXJhdGVkIGJ5IGctaXItc2Nhbm5lci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgzMDEKLQotMjAxMi0wNy0zMCAyMTo0NjoxOCAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogY29udmVydCBnc3RfYnVmZmVyXyogbWFjcm9zIHRvIGZ1bmN0aW9ucwotCSAgR09iamVjdCBJbnRyb3NwZWN0aW9uIGRvZXMgbm90IHN1cHBvcnQgbWFjcm9zLgotCSAgVGhpcyBpcyBuZWVkZWQgZm9yIGJpbmRpbmdzLiBXZSBjYW4gc3RpbGwgYWRkIGJhY2sKLQkgIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGFnYWluIGxhdGVyIGlmIHdlIHRoaW5rCi0JICBpdCdzIHdvcnRoIGl0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODMwMQotCi0yMDEyLTA4LTEwIDEzOjUwOjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbGllbnRjbG9jazogZml4IHByaW50ZiBmb3JtYXQgaW4gZGVidWcgbWVzc2FnZQotCi0yMDEyLTA4LTEwIDEyOjIzOjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogZml4IG1heF9idWZmZXJzIGhhbmRsaW5nCi0JICBXaGVuIG1heF9idWZmZXJzID4gMCBhbmQgdGhlIHBvb2wgaXMgZW1wdHksIGFjdHVhbGx5IHRyeSB0byBhbGxvY2F0ZSBtb3JlCi0JICBidWZmZXJzIHVwIHRvIHRoZSBtYXhfYnVmZmVycyBsaW1pdC4KLQkgIFdlIG5lZWQgdG8gYWRkIGEgY291bnRlciBmb3IgdGhpcyB0byBjb3VudCBob3cgbWFueSBidWZmZXJzIHdlIGFsbG9jYXRlZCBhbmQKLQkgIGNoZWNrIHRoaXMgYWdhaW5zdCB0aGUgbWF4X2J1ZmZlcnMgbGltaXQuCi0JICBSZW9yZ2FuaXNlIGFuZCBjbGVhbiB1cCBzb21lIGNvZGUuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMTUzCi0KLTIwMTItMDgtMTAgMDk6MTk6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgbmV0Y2xpZW50Y2xvY2s6IHNpbXBsaWZ5IGJ5IHVzaW5nIGdfc29ja2V0X2NvbmRpdGlvbl90aW1lZF93YWl0KCkKLQkgIE5vIG5lZWQgdG8gdXNlIGEgY3VzdG9tIG1haW4gY29udGV4dCBhbmQgY3VzdG9tIHRpbWVvdXQgc291cmNlcywKLQkgIGp1c3QgdXNlIGdfc29ja2V0X2NvbmRpdGlvbl90aW1lZF93YWl0KCkgaW5zdGVhZCwgd2hpY2ggd2FzIGFkZGVkCi0JICBmb3IgZXhhY3RseSB0aGlzIGNhc2UuCi0JICBBbHNvIHNlZW1zIHRvIGhlbHAgd2l0aCB0aGUgdW5pdCB0ZXN0IGRlYWRsb2NraW5nIHdpdGggZ2xpYiAyLjMzLngKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODE1NzUKLQotMjAxMi0wOC0wOSAxOToxNToyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGdzdG9iamVjdDogZml4IGRvdWJsZSBzdHJpbmcgZXNjYXBpbmcgaW4gZ3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5KCkKLQkgIE1ha2Ugb3V0cHV0IG9mIGdzdC1sYXVuY2ggLXYgcmVhZGFibGUgYWdhaW4uCi0JICBsYXN0LW1lc3NhZ2UgPSAiZXZlbnRcIFwgXCBcKlwqXCpcKlwqXCpcKlwgXChmYWtlc2luazA6c2lua1wpXCBFXCBcKHR5cGU6XCB0YWdcIFwoMjA1MTBcKVwsXCBHc3RUYWdMaXN0LXN0cmVhbVwsXCB0YWdsaXN0XD1cKHRhZ2xpc3RcKVwidGFnbGlzdFxcXCxcXFwgdmlkZW8tY29kZWNcXFw9XFxcKHN0cmluZ1xcXClIMjY0XFxcLFxcXAotCSAgbWluaW11bS1iaXRyYXRlXFxcPVxcXCh1aW50XFxcKTYzNjYxMVxcXCxcXFwgYml0cmF0ZVxcXD1cXFwodWludFxcXCk5ODA3MjlcXFwsXFxcIG1heGltdW0tYml0cmF0ZVxcXD1cXFwodWludFxcXCkxMTE2NzA3XFxcO1wiXDtcKVwgMHgxNWJjNzYwIgotCSAgdnMuCi0JICBsYXN0LW1lc3NhZ2UgPSBldmVudCAgICoqKioqKiogKGZha2VzaW5rMDpzaW5rKSBFICh0eXBlOiB0YWcgKDIwNTEwKSwgR3N0VGFnTGlzdC1zdHJlYW0sIHRhZ2xpc3Q9KHRhZ2xpc3QpInRhZ2xpc3RcLFwgdmlkZW8tY29kZWNcPVwoc3RyaW5nXClIMjY0XCxcIG1pbmltdW0tYml0cmF0ZVw9XCh1aW50XCk4NTYwMzlcLFwgYml0cmF0ZQotCSAgXD1cKHVpbnRcKTEwMTk3NDhcLFwgbWF4aW11bS1iaXRyYXRlXD1cKHVpbnRcKTExMTY3MDdcOyI7KSAweDExMTQ5ZTAKLQotMjAxMi0wOC0wOSAxNjoxODo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IGNoZWNrIHdyaXRhYmlsaXR5Ci0JICBmaXggdGhlIHdyaXRhYmlsaXR5IGNoZWNrIGZvciBtaW5pb2JqZWN0cy4gV2Ugc2hvdWxkIGNoZWNrIHRoZSBzaGFyZWQgY291bnRlci4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODE0NTAKLQotMjAxMi0wOC0wOCAxNjowODo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RhbGxvY2F0b3IuYzoKLQkgIGFsbG9jYXRvcjogU2V0IHRoZSBhbGlnbm1lbnQgYXQgdGhlIGNvcnJlY3QgcGxhY2UgaW4gR3N0QWxsb2NhdGlvblBhcmFtcwotCi0yMDEyLTA4LTA4IDE2OjE4OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjExLjkzID09PQotCi0yMDEyLTA4LTA4IDE1OjA1OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTEuOTMKLQotMjAxMi0wOC0wOCAxNDo0OToyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkgIHRlc3RzOiByZW1vdmUgc2lsbHkgdGVzdF9mYWlsX2Fic3RyYWN0X25ldyBjaGVjawotCSAgT3VyIGNoZWNrIHdvdWxkIG1ha2Ugc3VyZSB0aGF0IEdMaWIgc2VnZmF1bHRzIHdoZW4KLQkgIHNvbWVvbmUgdHJpZXMgdG8gaW5zdGFudGlhdGUgYW4gYWJzdHJhY3QgdHlwZSwgd2hpY2gKLQkgIGlzIGFuIGV4dHJlbWVseSB1c2VmdWwgdGhpbmcgdG8gY2hlY2sgZm9yLgotCSAgSW4gbmV3ZXIgR0xpYnMgdGhpcyBpcyBmaXhlZCBhbmQgd2UgZ2V0IGFuIGFib3J0IHdpdGgKLQkgIGEgZ19lcnJvcigpIG5vdyBpdCBzZWVtcywgc28gbGV0J3MganVzdCByZW1vdmUgdGhpcwotCSAgY2hlY2sgZW50aXJlbHkuCi0KLTIwMTItMDgtMDggMDk6NTM6MjYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL2ZyYW1lc3RlcDEuYzoKLQkgIGV4YW1wbGVzOiBkb24ndCBwdXQgdGhpbmdzIHdpdGggc2lkZSBlZmZlY3RzIGluc2lkZSBnX2Fzc2VydCgpCi0JICBUaGV5IHdpbGwgYmUgZGVmaW5lZCBhd2F5IHRvIE5PT1BzIG90aGVyd2lzZSBpbiByZWxlYXNlIGJ1aWxkcy4KLQotMjAxMi0wOC0wOCAwOToxMzozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogdXBkYXRlIGZvciBzdHJlYW0taWQgQVBJIGFkZGl0aW9ucwotCi0yMDEyLTA4LTA4IDAwOjU0OjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2U6IGZpeCBmb3IgbmV3IEdzdENoaWxkUHJveHk6OmNoaWxkLWFkZGVkIHNpZ25hbCBjYWxsYmFjayBzaWduYXR1cmUKLQkgIEZpeGVzIGNyYXNoIHdpdGggZ3N0LWxhdW5jaC0xLjAgdXJpZGVjb2RlYmluIHVyaT0uLi4gc3VidXJpPS4uLiAhIC4uCi0KLTIwMTItMDgtMDcgMTA6NDY6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IEFkZCBhbGxvdy1ub25lIHRvIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBvZiBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MTEzOQotCi0yMDEyLTA4LTA2IDE2OjMzOjU3ICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JICBkb2NzOiBNYWtlIHN1cmUgc2Nhbm5lciBnZXRzIHJlcXVpcmVkIGxpYnJhcmllcwotCi0yMDEyLTA4LTA2IDIwOjA4OjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmM6Ci0JICBjb25zaXN0ZW5jeWNoZWNrZXI6IHByaW50IHdoaWNoIGV2ZW50IHdlIHJlY2VpdmVkIGJlZm9yZSBzdHJlYW0tc3RhcnQKLQotMjAxMi0wOC0wNiAyMDowNDowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZG9uJ3QgdHJ5IHRvIGFuc3dlciBVUkkgcXVlcmllcyB3aXRoIE5VTEwgVVJJcwotCSAgU2hvdWxkIG1ha2UgdW5pdCB0ZXN0cyBpbiAtYmFzZSB0aGF0IHVzZSBhcHBzcmMgYSBiaXQgaGFwcGllci4KLQotMjAxMi0wNy0yOSAxNDoyNTozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBldmVudDogVXBkYXRlIGZvciBzdHJlYW0tc3RhcnQgZXZlbnQgQVBJIGNoYW5nZXMKLQotMjAxMi0wNy0yOCAwODozNzowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICBldmVudDogQWRkIG5ldyBzdHJlYW0taWQgZmllbGQgdG8gdGhlIHN0cmVhbS1zdGFydCBldmVudAotCSAgVGhpcyBpcyBzdXBwb3NlZCB0byBhbGxvdyB1bmlxdWVseSBpZGVudGlmeWluZyBhIHNpbmdsZSBzdHJlYW0uCi0KLTIwMTItMDctMjcgMTc6NDE6NDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFVzZSB0aGUgZmlyc3QgY3JlYXRlZCBwYWQgYnkgZGVmYXVsdAotCSAgVGhpcyBndWFyYW50ZWVzIGEgYml0IG1vcmUgY29uc2lzdGVuY3kgaW4gd2hpY2ggaW5wdXQgc3RyZWFtIHdpbGwKLQkgIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQuIEl0IHdvdWxkIHByZXZpb3VzbHkgYmUgdGhlIGZpcnN0IHBhZCBvbiB3aGljaAotCSAgYW4gZXZlbnQvYnVmZmVyL3F1ZXJ5IHdhcyByZWNlaXZlZCAuLi4gd2hpY2ggd2FzIHJhY3kgYW5kIG5vbi1wcmVkaWN0YWJsZS4KLQotMjAxMi0wNy0yNyAxNzozODozNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBTcGVjaWZ5IHRoZSBvcmRlciBvZiBwYWQgaXRlcmF0b3JzCi0JICBUaGUgb3JkZXIgb2YgcmV0dXJuZWQgcGFkcyB3YXNuJ3Qgc3BlY2lmaWVkIGJlZm9yZSwgc28gbGV0J3Mgc3BlY2lmeQotCSAgaXQgYW5kIHVzZSBhbiBvcmRlciB3aGljaCBtaWdodCBwcm92ZSB0aGUgbW9zdCB1c2VmdWwgOiB0aGUgb3JkZXIgaW4KLQkgIHdoaWNoIHBhZHMgd2VyZSBhZGRlZCB0byB0aGUgZWxlbWVudC4KLQkgIElmIHNvbWVvbmUgY2hhbmdlcyB0aGUgb3JkZXIsIG1ha2Ugc3VyZSB1c2VycyBvZiB0aG9zZSBpdGVyYXRvcnMgZnJvbQotCSAgbm93IG9uIGRvbid0IHJlbHkgb24gdGhhdCBvcmRlciAhCi0KLTIwMTItMDgtMDUgMTc6MTY6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBjaGVjazogYWRkIHRjYXNlX3NraXBfYnJva2VuX3Rlc3QoKSBkZWZpbmUKLQkgIFNraXBzIGJyb2tlbiB0ZXN0cyBidXQgbG9ncyBhbiBFUlJPUi1sZXZlbCBtZXNzYWdlIHRvCi0JICBkcmF3IGF0dGVudGlvbiB0byB0aGF0IGZhY3QuCi0KLTIwMTItMDgtMDUgMTc6MTI6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkgIHRlc3RzOiB1cGRhdGUgLmdpdGlnbm9yZSBmb3IgcXVldWVhcnJheSB0ZXN0IGJpbmFyeQotCi0yMDEyLTA4LTA1IDE3OjExOjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICB0ZXN0czogZml4IHNwdXJpb3VzIG5ldGNsaWVudGNsb2NrIHRlc3QgZmFpbHVyZXMKLQkgIEdpdmUgY2xvY2tzIGEgYml0IG1vcmUgdGltZSB0byBzeW5jaHJvbmlzZS4KLQotMjAxMi0wOC0wNSAxNjo1OTozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIHdpbjMyOiB1cGRhdGUgZ2VuZXJhdGVkIGZpbGVzCi0KLTIwMTItMDgtMDUgMTY6NDE6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXQtc2VsZWN0b3I6IHVzZSBnZW5lcmljIG1hcnNoYWxsZXIgZm9yICJibG9jayIgYWN0aW9uIHNpZ25hbAotCi0yMDEyLTA4LTA1IDE2OjM3OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gOTRjY2Y0YyB0byA2NjhhY2VlCi0KLTIwMTItMDgtMDQgMTM6Mzc6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RhbGxvY2F0b3IuYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlciwgZGVmYXVsdG1lbTogYWRkIG9wdGlvbiB0byBwb2lzb24gbWVtb3J5IGJlZm9yZSBmcmVlaW5nIGl0Ci0JICBNaWdodCBiZSB1c2VmdWwgdG8gdHJhY2sgZG93biBjZXJ0YWluIGJ1Z3MuCi0KLTIwMTItMDgtMDMgMjM6NTQ6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogcmVmL3VucmVmIHRhZ2xpc3Qgc2NvcGUgZW51bSBpbiBnc3RfaW5pdCgpCi0JICBGaXhlcyBtYWtlIGNoZWNrIGFuZCBkaXN0Y2hlY2sKLQotMjAxMi0wOC0wMyAwMDowNTo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgcGx1Z2luOiB3YXJuIGlmIHBsdWdpbiBuYW1lIHN0YXJ0cyB3aXRoIGEgIgotCSAgVGhpcyBjYW4gZWFzaWx5IGhhcHBlbiBhcyBzaWRlLWVmZmVjdCBvZiB0aGUgcGx1Z2luIG5hbWUKLQkgIGluIEdTVF9QTFVHSU5fREVGSU5FIG5vIGxvbmdlciBiZWluZyBhIHN0cmluZyBpbiAwLjExLCBidXQKLQkgIGEgbmFtZSB0byBHX1NUUklOR0lGWS4KLQotMjAxMi0wOC0wMiAxMzoxOToyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgcG9ydGluZy10by0wLjExIGRvY3VtZW50IHdpdGggYSAic29mdCIgQVBJIGNoYW5nZXMgY2hlY2tsaXN0Ci0JICBQb2ludCBvdXQgc29tZSBBUEkgY2hhbmdlcyB0aGF0IHRoZSBjb21waWxlciB3b24ndAotCSAgYmUgYWJsZSB0byB3YXJuIGFib3V0LgotCi0yMDEyLTA4LTAyIDExOjMzOjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IGZpeCBwcmludGluZyBvZiBwYXJ0aWFsIGRhdGVzIGluIGdzdC1sYXVuY2gKLQotMjAxMi0wOC0wMiAxMToxNToxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIFJldmVydCAidG9vbHM6IHByaW50IFRPQyBzY29wZSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZWU2YWI3YzkzNjM4YTY1MTlhY2I5NzY2OTlhNmFkMTQ5ZDUyMGE5NS4KLQkgIFRoZSBhcHBsaWNhdGlvbiB3aWxsIHByb2JhYmx5IG9ubHkgZXZlciByZWNlaXZlIGdsb2JhbCBUT0NzLAotCSAgc28gZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcy4KLQotMjAxMi0wOC0wMSAxNzo0OToyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogYWRkIG5ldyB0YWcgbGlzdCBzY29wZSBzeW1ib2xzCi0KLTIwMTItMDgtMDEgMTE6NTg6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogc2VuZCBzZWdtZW50X2RvbmUgZXZlbnQgaW4gYWRkaXRpb24gdG8gc2VnbWVudF9kb25lIG1lc3NhZ2UKLQotMjAxMi0wNy0zMSAxNzoyNTo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBiYXNlc3JjOiBBZGQgZGVmYXVsdCBoYW5kbGVyIGZvciBVUkkgcXVlcnkgaW4gR3N0VVJJSGFuZGxlciBzdWJjbGFzc2VzCi0KLTIwMTItMDctMjggMTc6MzM6NTIgKzAyMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaC5pbjoKLQkgIGNoZWNrOiB1bmJyZWFrIGZhaWwgI2RlZmluZQotCSAgVGhlIGZhaWwoKSBkZWZpbml0aW9uIHdhcyBjaGFuZ2VkIHRvIG5vdCBmYWlsIHdpdGggbm9uLUdDQyBjb21waWxlcnMsCi0JICB1bmZvcnR1bmF0ZWx5IHRoZSBjaGFuZ2Ugd2FzIGluY29ycmVjdCBhbmQgYXBwZW5kZWQgdGhlIGZpcnN0IGFyZ3VtZW50Ci0JICBvZiBmYWlsIHRvIHRoZSBleHByZXNzaW9uIHN0cmluZyBpbnN0ZWFkIG9mIG1ha2luZyBpdCB0aGUgbWVzc2FnZS4KLQkgIFRoaXMgY2hhbmdlIGRvZXMgbWVhbiB0aGF0IGZhaWwoKSBub3cgcmVxdWlyZXMgYSBtZXNzYWdlIHRvIGJlIHBhc3NlZAotCSAgYWxvbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwNzU1Ci0KLTIwMTItMDctMjkgMjM6Mzc6MTkgKzAyMDAgIEplbnMgR2VvcmcgPG1haWxAamVuc2dlLm9yZz4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBVcGRhdGUgYW5ub3RhdGlvbnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODA4MDUKLQotMjAxMi0wNy0yOSAyMzoyMDowNyArMDIwMCAgSmVucyBHZW9yZyA8bWFpbEBqZW5zZ2Uub3JnPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBVcGRhdGUgYW5ub3RhdGlvbiBmb3IgZ2V0X2NvbXBhdGlibGVfcGFkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwODA0Ci0KLTIwMTItMDctMjggMjE6MjM6MjQgLTA0MDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgdXJpOiBGaXggd3JvbmcgJ2FycmF5IHplcm8tdGVybWluYXRlZD0xJyBhbm5vdGF0aW9uIGZvciBzdHJpbmdzCi0KLTIwMTItMDctMjggMTE6MDI6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtdG9jLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBUT0MgZGVzaWduIGRvY3MgYSBsaXR0bGUKLQotMjAxMi0wNy0yOCAwOTo0MTozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JICBldmVudDogbWFrZSBUT0MgZXZlbnQgbXVsdGktc3RpY2t5Ci0JICBXZSBuZWVkIHRvIHNlbmQgdHdvIGtpbmRzIG9mIFRPQ3MgZG93bnN0cmVhbSBhcyBldmVudHMsCi0JICBhbmQgbmVlZCBib3RoIHRvIHN0aWNrIHRvIHRoZSBwYWRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODc0MgotCi0yMDEyLTA3LTI4IDA4OjMwOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IHByaW50IFRPQyBzY29wZQotCi0yMDEyLTA3LTI3IDIzOjU2OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIGdzdC9nc3R0b2MuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2NzZXR0ZXIuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdG9jOiBhZGQgR3N0VG9jU2NvcGUgYW5kIHJlcXVpcmUgaXQgaW4gdGhlIGNvbnN0cnVjdG9yCi0JICBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIHNpZ25hbCBkaWZmZXJlbnQgVE9DcwotCSAgdG8gZG93bnN0cmVhbSBlbGVtZW50cyBzdWNoIGFzIG11eGVycyBhbmQgdGhlIGFwcGxpY2F0aW9uLAotCSAgYW5kIGJlY2F1c2Ugd2UgbmVlZCB0byBzZW5kIGJvdGggdHlwZXMgYXMgZXZlbnRzIChiZWNhdXNlCi0JICB0aGUgc2luayBzaG91bGQgcG9zdCB0aGUgVE9DIG1lc3NhZ2VzIGZvciB0aGUgYXBwIGluIHRoZQotCSAgZW5kLCBqdXN0IGxpa2UgdGFnIG1lc3NhZ2VzIGFyZSBub3cgcG9zdGVkIGJ5IHRoZSBzaW5rcyksCi0JICBhbmQgaGVuY2UgbmVlZCB0byBtYWtlIFRPQyBldmVudHMgbXVsdGktc3RpY2t5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODc0MgotCi0yMDEyLTA3LTI3IDIzOjU0OjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc2NyaXB0cy9jcmVhdGUtdW5pbnN0YWxsZWQtc2V0dXAuc2g6Ci0JICBzY3JpcHRzOiBjcmVhdGUtdW5pbnN0YWxsZWQtc2V0dXAuc2g6IGNoZWNrIGZvciBiYXNpYyBidWlsZCB0b29scyBhbmQgZGVwcwotCSAgLi4gYmVmb3JlIGNoZWNraW5nIG91dCBzdHVmZi4KLQotMjAxMi0wNy0yNyAyMzo1MjoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSAgdGFnOiBBZGQgYSBzY29wZSB0byB0YWdsaXN0cwotCSAgVGhpcyBzcGVjaWZpZXMgaWYgYSBnaXZlbiB0YWdsaXN0IGFwcGxpZXMgdG8gdGhlIGNvbXBsZXRlCi0JICBtZWRpdW0gb3Igb25seSB0aGlzIHNwZWNpZmljIHN0cmVhbS4gQnkgZGVmYXVsdCBhIHRhZ2xpc3QKLQkgIGhhcyBhIHN0cmVhbSBzY29wZS4KLQkgIEZpeGVzIGJ1ZyAjNjc3NjE5LgotCi0yMDEyLTA3LTI3IDE3OjA5OjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JICBzZWdtZW50OiBhZGQgb2Zmc2V0IGZpZWxkCi0JICBBZGQgYW4gb2Zmc2V0IGZpZWxkIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhdCB3aGF0IHBvc2l0aW9uIHRoZSBzZWdtZW50IHdhcwotCSAgdXBkYXRlZC4gVGhpcyBpcyB1c2VkIHRvIHNldCB0aGUgcnVubmluZyB0aW1lIHRvIDAgd2hlbiB3ZSBkbyBhIGZsdXNoaW5nCi0JICBzZWVrIHRoYXQgZG9lc24ndCB1cGRhdGUgdGhlIHBvc2l0aW9uLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODAzMDYKLQotMjAxMi0wNy0yNyAxNToxOTo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgVXBkYXRlIGZvciBuZXcgc2Vla2luZyB2YXJpYWJsZSBuYW1lCi0JICBXaGVuIHNlZWtpbmcsIHRoZSBzdGFydCB2YWx1ZSBhbmQgdHlwZSBhcmUgbm93IGNhbGxlZCBzdGFydCBhbmQgc3RhcnRfdHlwZS4KLQotMjAxMi0wNy0yNyAxNDo1MzowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IHNtYWxsIGNsZWFudXAKLQkgIE1vdmUgdGhlIGNvZGUgdG8gdXBkYXRlIHRoZSBzZWdtZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgotCi0yMDEyLTA3LTI3IDEyOjA1OjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgVXBkYXRlIGRvY3MgYW5kIC5kZWYgZmlsZSBmb3IgdGFnbGlzdCBBUEkgY2hhbmdlCi0KLTIwMTItMDctMjcgMTM6MDI6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBzZWdtZW50OiByZW1vdmUgcmVkdW5kYW50IGNoZWNrcwotCSAgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgc2VnbWVudCBmb3JtYXQgYW55bW9yZSBiZWNhdXNlIHdlIGFzc2VydGVkIG9uIHRoZW0KLQkgIGJlaW5nIGVxdWFsIGJlZm9yZS4KLQotMjAxMi0wNy0yNyAxMjoyNDowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHRlc3RzOiBpbXByb3ZlIHNlZ21lbnQgdGVzdHMKLQotMjAxMi0wNy0yNyAxMjoxMjozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGFsbG9jYXRvci5jOgotCSogZ3N0L2dzdGFsbG9jYXRvci5oOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LW1lbW9yeS5jOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LXZpZG1lbS5jOgotCSAgYWxsb2NhdG9yOiByZW1vdmUgdXNlcl9kYXRhIGZyb20gYWxsb2Mgdm1ldGhvZAotCSAgUmVtb3ZlIHRoZSB1c2VyX2RhdGEgZnJvbSB0aGUgYWxsb2Mgdm1ldGhvZC4gU3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCBhIG5ldwotCSAgYWxsb2MgZnVuY3Rpb24gY2FuIGFsc28gaW1wbGVtZW50IHRoZWlyIG93biB2bWV0aG9kIHRvIHBhc3MgZXh0cmEgYXJndW1lbnRzLiBXZQotCSAgY2FuIHRoZW4gYWxzbyByZXF1aXJlIHRoYXQgY3VzdG9tIGFsbG9jYXRvcnMgaW1wbGVtZW50IGFuIGFsbG9jIGZ1bmN0aW9uIHNvIHRoYXQKLQkgIGdzdF9hbGxvY2F0b3JfYWxsb2MoKSBhbHdheXMgd29ya3MuCi0KLTIwMTItMDctMjcgMTA6NDE6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JICB0ZXN0czogcmVtb3ZlIHNlZ21lbnQgYWNjdW11bGF0aW9uIGNoZWNrcwotCSAgUmVtb3ZlIHRoZSBjaGVja3MgYmVjYXVzZSB0aGVyZSBpcyBubyBtb3JlIHNlZ21lbnQgYWNjdW11bGF0aW9uLgotCi0yMDEyLTA3LTI2IDE2OjQ0OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIHRhZ2xpc3Q6IG1ha2UgR1NUX1RBR19BUFBMSUNBVElPTl9EQVRBIGFsc28gYSBHc3RTYW1wbGUKLQkgIFRoYXQgd2F5IGFkZGl0aW9uYWwgbWV0YS1kYXRhIGNhbiBiZSBwYXNzZWQgYWxvbmcgd2l0aCBpdC4KLQotMjAxMi0wNy0yNiAxNTo1MToxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgotCSAgdGFnbGlzdDogZ3N0X3RhZ19saXN0X2dldF9idWZmZXIqKCkgPT4gZ3N0X3RhZ19saXN0X2dldF9zYW1wbGUqKCkKLQkgIEltYWdlIHRhZ3MgYW5kIG90aGVyIHRhZ3MgYXJlIG5vdyBvZiBHc3RTYW1wbGUgdHlwZS4KLQotMjAxMi0wNy0yNiAxNToyNjowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogcHJpbnQgaW1hZ2UgdGFncyBhbmQgb3RoZXIgR3N0U2FtcGxlIHRhZ3MgcHJvcGVybHkKLQkgIFRoZXNlIHRhZ3MgYXJlIG5vdyBvZiB0eXBlIEdzdFNhbXBsZSBub3QgR3N0QnVmZmVyLgotCi0yMDEyLTA3LTI0IDIxOjM4OjM1ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgY29sbGVjdHBhZHM6IHJlbW92ZSB1bmltcGxlbWVudGVkIGFwaQotCSAgV2UgY2FuIGFsd2F5cyBhZGQgdGhpcyBiYWNrIGlmIHdlIG5lZWQgaXQuIEZpeGVzIHBhcnRzIG9mICM2NzA4NTIuCi0KLTIwMTItMDctMjQgMTM6NDk6MzYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBhbHNvIGFjY291bnQgZm9yIGZyYW1lIHNpemUgd2hlbiBtZXJlbHkgc2Nhbm5pbmcgZm9yIGZyYW1lCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwNDk1Ci0KLTIwMTItMDctMjQgMTM6NDg6MzkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiByZW1vdmUgb2Jzb2xldGUgZnVuY3Rpb24gcGFyYW1ldGVyCi0KLTIwMTItMDctMjQgMTI6Mzg6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogcmVxdWlyZSBieXRlcyBiZWZvcmUgdHlwZWZpbmRpbmcKLQkgIFJlcXVpcmUgdGhhdCB3ZSBoYXZlIHNvbWUgYnl0ZXMgaW4gdGhlIGFkYXB0ZXIgYmVmb3JlIHdlIGF0dGVtcHQgdG8gdHlwZWZpbmQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwNDc5Ci0KLTIwMTItMDctMjMgMTg6NDk6MTMgKzAyMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPHVyYWV1c0BsaW51eHJpc2luLm9yZz4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICB1cGRhdGUgc3BlYyBmaWxlIHdpdGggbGF0ZXN0IGNoYW5nZXMKLQotMjAxMi0wNy0yMyAxNjoyNzozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JICBidWZmZXJsaXN0OiBwYXNzIGluZGV4IGFzIGdpbnQgdG8gX2luc2VydAotCSAgTWFrZSB0aGUgaWR4IGFyZ3VtZW50IG9mIF9pbnNlcnQoKSBhIGdpbnQgYmVjYXVzZSB3ZSBhbGxvdyAtMSBhcyBhIHZhbHVlLgotCSAgSW1wcm92ZSBhbm5vdGF0aW9uLgotCi0yMDEyLTA3LTIzIDEzOjQwOjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIHBsdWdpbnM6IHByaW50IGZsYWdzIGJldHRlcgotCSAgcHJpbnQgdGhlIGJ1ZmZlciBmbGFncyBhcyBhIGhleCBudW1iZXIgc28gdGhhdCBpdCBiZWNvbWVzIGVhc2llciB0byBzZWUgd2hhdAotCSAgZmxhZ3MgYXJlIHNldC4KLQotMjAxMi0wNy0xOCAxNzowMzo0NSArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2Vicm5AYXhpcy5jb20+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBnc3Rwb2xsOiBJbXByb3ZlIHdhcm5pbmcgbWVzc2FnZSB3aGVuIHJlLWFkZGluZyBmZCB0byBmZHNldAotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDE4MQotCi0yMDEyLTA3LTIzIDA4OjQ0OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDk4ZTM4NmYgdG8gOTRjY2Y0YwotCi0yMDEyLTA3LTIwIDAwOjQ5OjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBhZGQgR3N0VGFnTGlzdCBzZXJpYWxpc2F0aW9uL2Rlc2VyaWFsaXNhdGlvbgotCSAgU28gd2UgY2FuIHNlcmlhbGlzZS9kZXNlcmlhbGlzZSB0YWdsaXN0cyBpbnNpZGUgc3RydWN0dXJlcywKLQkgIHdoaWNoIHVzZWQgdG8gd29yayBhdXRvbWFnaWNhbGx5IGJlZm9yZSBiZWNhdXNlIEdzdFRhZ0xpc3QKLQkgIHdhcyBqdXN0IGEgdHlwZWRlZiB0byBHc3RTdHJ1Y3R1cmUgKHNhbWUgZm9yIHRoZSBHVHlwZSksCi0JICBidXQgbm93IHRoYXQgaXQncyBhIHNlcGFyYXRlIEdUeXBlIHdlIG5lZWQgdG8gcmVnaXN0ZXIKLQkgIGV4cGxpY2l0IGZ1bmN0aW9ucyBmb3IgdGhpcy4KLQkgIEhlbHBzIHdpdGggR0RQIHN0dWZmIGluIHBpcGVsaW5lcy9zdHJlYW1oZWFkZXIgdGVzdHMuCi0KLTIwMTItMDctMjAgMDk6Mzg6NDcgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEyLTA3LTE5IDEzOjUxOjIzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSAgdGVzdHM6IGdzdGJ1ZmZlcjogYWRkIHRlc3RzIGZvciBzb21lIG11bGl0cGxlIG1hcCBjb21iaW5hdGlvbnMKLQotMjAxMi0wNy0xOSAxMzozNTozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IGZpeCBzaGFyZWRuZXNzIGNoZWNrCi0KLTIwMTItMDctMTkgMTM6MjA6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiByZWZ1c2Ugd3JpdGUgd2hlbiBvYmplY3QgaXMgc2hhcmVkCi0JICBJbiBhbGwgY2FzZXMsIHJlZnVzZSB0byB3cml0ZSBhbiBvYmplY3Qgd2hlbiBpdCBpcyBzaGFyZWQgYnkgbW9yZSB0aGFuIG9uZQotCSAgb2JqZWN0IChhbHNvIHdoZW4gdGhlIG9iamVjdCB3YXMgbG9ja2VkIGJlZm9yZSkuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTE0NQotCi0yMDEyLTA3LTE4IDE1OjIxOjMzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSAgdGVzdHM6IGdzdGJ1ZmZlcjogZXh0ZW5kIGJ1ZmZlciBjb3B5IHRlc3QKLQotMjAxMi0wNy0xOSAxMjo0MjowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogc2V0IGJ1ZmZlcmluZy1sZWZ0IHRvIDAgb24gMTAwJSBidWZmZXJpbmcKLQkgIFNldCB0aGUgYnVmZmVyaW5nLWxlZnQgZmllbGQgaW4gdGhlIHF1ZXJ5IHRvIDAgd2hlbiB3ZSBhcmUgY29tcGxldGVseSBidWZmZXJlZC4KLQkgIEltcHJvdmUgdGhlIGRlYnVnLgotCi0yMDEyLTA3LTE5IDEyOjE0OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggYnVmZmVyaW5nIHF1ZXJ5Ci0JICBGaXggdGhlIGJ1ZmZlcmluZyBxdWVyeSwgZmlsbCBpbiB0aGUgcmlnaHQgYnVmZmVyaW5nLWxlZnQgYW5kIGVzdGltYXRlZC10b3RhbAotCSAgdmFsdWVzLgotCi0yMDEyLTA3LTE5IDEwOjU0OjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggdGhlIGJ1ZmZlcmluZy1sZWZ0IGluIHRoZSBidWZmZXJpbmcgbWVzc2FnZQotCSAgVGhlIGJ1ZmZlcmluZy1sZWZ0IGZpZWxkIGluIHRoZSBidWZmZXJpbmcgbWVzc2FnZSBzaG91bGQgY29udGFpbiBhIHRpbWUgZXN0aW1hdGUKLQkgIGluIG1pbGxpc2Vjb25kcyBhYm91dCBmb3IgbG9uZyB0aGUgYnVmZmVyaW5nIGlzIGdvaW5nIHRvIHRha2UuIFdlIGNhbiBjYWxjdWxhdGUKLQkgIHRoaXMgdmFsdWUgd2hlbiB3ZSBkbyByYXRlX2VzdGltYXRlcy4KLQotMjAxMi0wNy0xOSAxMDoxNDoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IGltcHJvdmUgYnVmZmVyaW5nIG1lc3NhZ2UgZGVmYXVsdHMKLQkgIFJlbW92ZSB0aGUgZXN0aW1hdGVkLXRvdGFsIGZpZWxkLCB0aGlzIHNob3VsZCBub3QgYmUgcGFydCBvZiB0aGUgYnVmZmVyaW5nCi0JICBtZXNzYWdlLgotCSAgU2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGJ1ZmZlcmluZy1sZWZ0IHRvIDAgd2hlbiB0aGUgcGVyY2VudCBpcyAxMDAuCi0KLTIwMTItMDctMTggMTc6NDQ6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IGRlYnVnIGxpbmUKLQkgIFVzZSBRVUVSWV9UWVBFIG9uIHF1ZXJ5IHR5cGVzLgotCi0yMDEyLTA3LTE4IDE3OjM1OjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnaG9zdHBhZDogcmVtb3ZlIGN1c3RvbSBmdW5jdGlvbgotCSAgUmVtb3ZlIGN1c3RvbSBwYWQgZnVuY3Rpb25zLCB0aGUgZGVmYXVsdCBvbmVzIGFyZSBiZXR0ZXIuCi0KLTIwMTItMDctMTggMTc6MzA6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogYWRkIFBST1hZX1NDSEVEVUxJTkcgZmxhZwotCSAgQWRkIGEgZmxhZyB0aGF0IG1ha2VzIHRoZSBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIgZm9yd2FyZCB0aGUgc2NoZWR1bGluZyBxdWVyeS4KLQotMjAxMi0wNy0xOCAxNzozMDowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogZml4IGRvY3MKLQotMjAxMi0wNy0xOCAxNjoyMDo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBwYWQ6IGltcHJvdmUgcXVlcnkgY2FwcyBmdW5jdGlvbgotCSAgSW4gdGhlIHByb3h5X3F1ZXJ5X2NhcHMgZnVuY3Rpb24sIGFsc28gZmlsdGVyIGFnYWluc3QgdGhlIGZpbHRlciBpbiB0aGUgcXVlcnkuCi0JICBXZSBkb24ndCBuZWVkIHRvIGZpbHRlciBhZ2FpbnN0IHRoZSBmaWx0ZXIgaW4gdGhlIHF1ZXJ5IGFueW1vcmUgaW4gdGhlIGRlZmF1bHQKLQkgIGNhcHMgcXVlcnkgZnVuY3Rpb24gYmVjYXVzZSB3ZSBhbHJlYWR5IGRpZCB0aGlzIGluIHRoZSBwcm94eV9xdWVyeV9jYXBzLgotCi0yMDEyLTA3LTE4IDExOjE3OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWZyYW1lc3RlcC50eHQ6Ci0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGhhbmRsZSAtMSBzdGVwIGFtb3VudHMKLQkgIERlZmluZSBhIDAgYW5kIC0xIHN0ZXAgYW1vdW50LiBUaGV5IHVzZWQgdG8gYWxtb3N0IGRvIHRoZSBzYW1lIHRoaW5nIGJ1dCBub3csIDAKLQkgIGNhbmNlbHMvc3RvcHMgdGhlIGN1cnJlbnQgc3RlcCBhbmQgLTEga2VlcHMgb24gc3RlcHBpbmcgdW50aWwgdGhlIGVuZCBvZiB0aGUKLQkgIHNlZ21lbnQuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTM3OAotCi0yMDEyLTA3LTE4IDEyOjMwOjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogZml4IGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sKCkgYW5ub3RhdGlvbgotCSAgSXQgcmV0dXJucyBhIHJlZiB0byB0aGUgcG9vbC4KLQotMjAxMi0wNy0xNyAxNTo1Mjo1MyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSAgY2hlY2s6IEF2b2lkIGRlYWRsb2NrCi0JICBRdWVyaWVzIHdpbGwgYmUgc2VudCB3aGVuIHBpcGVsaW5lIGdvZXMgZG93biB0byBOVUxMLCB3aGljaCB3b3VsZAotCSAgcmVzdWx0IGluIHRoZSBwcm9iZSBiZWluZyBjYWxsZWQgLi4uIGJ1dCBjYW4ndCB0YWtlIHRoZSBsb2NrLgotCi0yMDEyLTA3LTE3IDE1OjUwOjA5ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnc3RnaG9zdHBhZDogRm9yd2FyZCBxdWVyaWVzIGluIGJvdGggZGlyZWN0aW9uCi0JICBVc2UgdGhlIHBlZXIgb2YgdGhlIGludGVybmFsIHBhZCB0byBmb3J3YXJkIHRoZW0sIGluc3RlYWQgb2YgdGhlCi0JICB0YXJnZXQgd2hpY2ggb25seSBleGlzdHMgZm9yIHRoZSBnaG9zdHBhZCAoYW5kIG5vdCB0aGUgaW50ZXJuYWwKLQkgIHByb3h5IHBhZCkuCi0KLTIwMTItMDctMTcgMTE6MjA6NDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogTW9yZSBlbnRyaWVzCi0KLTIwMTItMDctMTggMDk6MTU6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBhbnN3ZXIgU0NIRURVTElORyBxdWVyeQotCSAgSW5zdGVhZCBvZiBsZXR0aW5nIHRoZSBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIgZmFpbC4KLQotMjAxMi0wNy0xNyAxOToyMDoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGhhbmRsZSBDQVBTIGV2ZW50IGFuZCBkcm9wIGl0IGlmIG9wZXJhdGluZyBpbiByaW5nIGJ1ZmZlciBtb2RlCi0JICBGaXhlcyAiVW5leHBlY3RlZCBldmVudCBvZiBraW5kIGNhcHMgY2FuJ3QgYmUgYWRkZWQgaW4gdGVtcCBmaWxlIgotCSAgd2FybmluZyB3aGVuIGRvaW5nIGRvd25sb2FkIGJ1ZmZlcmluZy4KLQotMjAxMi0wNy0xNyAxMjo1Nzo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBtYWtlIF9mb3JlYWNoX21ldGEgbW9yZSBwb3dlcmZ1bAotCSAgTWFrZSBfZm9yZWFjaF9tZXRhIHJldHVybiBGQUxTRSB3aGVuIHRoZSBmb3JlYWNoIGZ1bmN0aW9uIHJldHVybmVkIEZBTFNFLgotCi0yMDEyLTA3LTE3IDEyOjUyOjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkgIGJ1ZmZlcmxpc3Q6IGltcHJvdmUgZm9yZWFjaCBmdW5jdGlvbgotCSAgTWFrZSB0aGUgZm9yZWFjaCBmdW5jdGlvbiByZXR1cm4gRkFMU0Ugd2hlbiBvbmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGxzIHJldHVybmVkCi0JICBGQUxTRS4KLQotMjAxMi0wNy0xNyAxMjo1MDoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBhZGQgbW9yZSBkZWJ1ZwotCi0yMDEyLTA3LTE3IDEyOjQwOjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZml4IGRlYnVnIHN0cmluZwotCi0yMDEyLTA3LTE3IDA5OjU3OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JKiBnc3QvcGFyc2UvdHlwZXMuaDoKLQkgIHBhcnNlOiBmaXggc29tZSBkZWJ1ZwotCi0yMDEyLTA3LTE3IDA5OjQ4OjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkgIHBhcnNlOiBvbmx5IGVzY2FwZSBzcGFjZXMgb3V0c2lkZSBvZiBxdW90ZXMKLQkgIFdoZW4gd2UgZXNjYXBlIHNwYWNlcyB0byBrZWVwIGFyZ3VtZW50cyB0b2dldGhlciwgb25seSBlc2NhcGUgd2hlbiB0aGUgc3BhY2UgaXMKLQkgIG91dHNpZGUgYSAiIiBzdHJpbmcuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3MzMxOQotCi0yMDEyLTA3LTE3IDA5OjQ0OjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkgIFJldmVydCAicGFyc2U6IGVzY2FwZSBcIHdpdGggYSBcIGFzIHdlbGwsIHNvIHRoYXQgd2UgZG9uJ3QgbG9zZSB0aGUgXCB3aGVuIHVuZXNjYXBpbmciCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGRkOWZlZGI0MWYxYWRhOGUxZjhiZDUzNDZmY2NkM2QwNjhkNTQzY2IuCi0JICBUaGlzIGlzIG5vdCB0aGUgcmlnaHQgcGxhY2UgdG8gZXNjYXBlIHRoZSBcLCB3ZSBzaG91bGQgb25seSBlc2NhcGUgdGhlIHNwYWNlcyB0bwotCSAga2VlcCB0aGUgYXJndW1lbnRzIHRvZ2V0aGVyIHRoYXQgd2VyZSBwcm92aWRlZCBhcyBvbmUgZ3JvdXAgKHdpdGggcXVvdGVzIG9uIHRoZQotCSAgc2hlbGwpLgotCi0yMDEyLTA3LTEwIDEyOjI3OjExIC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogc2V0IHJldHVybiB0eXBlIG9mIGdzdF9wYXJzZV9iaW5fKiB0byBHc3RCaW4gZm9yIGludHJvc3BlY3Rpb24KLQotMjAxMi0wNi0zMCAxMjozMzo0MyAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6Ci0JICBuZXR0aW1lcGFja2V0OiBhZGQgbWlzc2luZyBhcnJheSBhbm5vdGF0aW9uIHRvIGdzdF9uZXRfdGltZV9wYWNrZXRfbmV3Ci0KLTIwMTItMDYtMjkgMTc6MzM6NDkgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AY29ldXMtZ3JvdXAuY29tPgotCi0JKiBnc3QvZ3N0Zm9ybWF0LmM6Ci0JICBpbnRyb3NwZWN0aW9uOiBhZGQgbWlzc2luZyBhcnJheSBhbm5vdGF0aW9uIHRvIGdzdF9mb3JtYXRzX2NvbnRhaW5zCi0KLTIwMTItMDctMTYgMjA6NTQ6MTcgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkgIGJpbjogYWdncmVnYXRlIGR1cmF0aW9ucyBsaWtlIGluIGFkZGVyCi0JICBTdG9wIHF1ZXJ5aW5nIHRoZSBkdXJhdGlvbiBvbmNlIGFuIGVsZW1lbnQgcmV0dXJuIHVua25vd24gYW5kIHJldHVybiB1bmtub3duCi0JICBhcyBhIGZpbmFsIHJlc3VsdC4gVGhpcyBhdm9pZCBldmVudHVhbGx5IGN1dHRpbmcgb2ZmIGEgc3RyZWFtIHRvbyBlYXJseS4KLQkgIEFkZCBhIHRlc3RzIHRvIGRvY3VlbWVudCB0aGUgYmVoYXZpb3IuCi0KLTIwMTItMDctMTYgMDA6MjQ6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSAgZGF0ZXRpbWU6IGp1c3QgcmV0dXJuIE5VTEwgb24gc2hvcnQgaW5wdXQgc3RyaW5ncyBpbnN0ZWFkIG9mIGEgd2FybmluZwotCSAgV2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG9uIHJhbmRvbSBub24tTlVMTCBpbnB1dCwKLQkgIHRoaXMgc2hvdWxkIG5vdCByZXN1bHQgaW4gYSBydW50aW1lLWNyaXRpY2FsLgotCi0yMDEyLTA3LTE1IDEyOjU5OjQ0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggc2Vla2FiaWxpdHkgcXVlcnlpbmcgd2l0aCBmb3JtYXRzIHdpdGggaGVhZGVycyBsaWtlIEZMQUMKLQkgIE1vdmUgY29kZSB0aGF0IGNoZWNrcyBmb3IgdXBzdHJlYW0gc2Vla2FiaWxpdHkgYW5kIGFsbCB0aGF0IHRvCi0JICB0aGUgcmlnaHQgcGxhY2UsIG90aGVyd2lzZSBpdCB3aWxsIG5ldmVyIGJlIGRvbmUgZm9yIGZvcm1hdHMKLQkgIHRoYXQgaGF2ZSBoZWFkZXJzIHN1Y2ggYXMgRkxBQywgYXMgaGFuZGxlX2FuZF9wdXNoIGZyYW1lIHdpbGwKLQkgIGJlIGNhbGxlZCB0aGUgZmlyc3QgdGltZSBvbmx5IGFmdGVyIGhlYWRlcnMgaGF2ZSBiZWVuIHByb2Nlc3NlZAotCSAgKGFuZCBmcmFtZWNvdW50IGlzID4gMCkuIFRoaXMgdGhlbiBtYWtlcyB1cyByZXBvcnQgdGhhdCB3ZQotCSAgY2FuJ3Qgc2Vlaywgd2hpY2ggZGlzYWJsZXMgdGhlIHNlZWsgYmFyIGluIHRvdGVtLgotCi0yMDEyLTA3LTE0IDIwOjMzOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRhdGFxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RkYXRhcXVldWUuaDoKLQkgIHBsdWdpbnM6IGVtYmVkIEdzdEF1ZXVlQXJyYXkgaW4gZGF0YXF1ZXVlIHN0cnVjdCBhcyB3ZWxsCi0KLTIwMTItMDctMTQgMjA6Mjg6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkgIHBsdWdpbnM6IGRvbid0IHVzZSBvbmUtdGltZSBhcnJheSBpbiBwbHVnaW5faW5pdAotCi0yMDEyLTA3LTE0IDIwOjI2OjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JICBxdWV1ZTogZW1iZWQgR3N0UXVldWVBcnJheSBzdHJ1Y3R1cmUKLQotMjAxMi0wNy0xNCAyMDowMDozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWVhcnJheS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmg6Ci0JICBwbHVnaW5zOiBzcHJpbmtsZSBzb21lIG1vcmUgR19HTlVDX0lOVEVSTkFMCi0KLTIwMTItMDctMTQgMTk6Mzg6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWVhcnJheS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZWFycmF5Lmg6Ci0JICBwbHVnaW5zOiBhZGQgaW5pdC9jbGVhciBmdW5jdGlvbnMgdG8gR3N0UXVldWVBcnJheQotCi0yMDEyLTA3LTE0IDE5OjI0OjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZGF0YXF1ZXVlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlYXJyYXkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWVhcnJheS5oOgotCSogdGVzdHMvY2hlY2svbGlicy9xdWV1ZWFycmF5LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBiYXNlOiBtYWtlIEdzdFF1ZXVlQXJyYXkgcHJpdmF0ZSB0byBjb3JlZWxlbWVudHMgZm9yIG5vdwotCSAgS2VlcCBpdCBwcml2YXRlIHVudGlsIHdlIGhhdmUgYSByZWFzb24gdG8gbWFrZSBpdCBwdWJsaWMuCi0KLTIwMTItMDctMTQgMTk6MDg6MjQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdsaXN0OiBjaGVjayB2YWx1ZSB0eXBlIG1hdGNoZXMgdGFnIHR5cGUgd2hlbiBhZGRpbmcgdmFsdWVzIHRvIGEgdGFnbGlzdAotCi0yMDEyLTA3LTE0IDE4OjUyOjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogbWFrZSB0YWdsaXN0cyBhbmQgZGF0ZXRpbWUgbG9nZ2FibGUgdmlhIEdTVF9QVFJfRk9STUFUCi0KLTIwMTItMDctMTMgMTI6MDU6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHNlbmQgc2VlayBldmVudCB1cHN0cmVhbSBmaXJzdAotCSAgRmlyc3QgdHJ5IHRvIGxldCB1cHN0cmVhbSBoYW5kbGUgdGhlIHNlZWsgZXZlbnQsIHRoZW4gZmFpbCBpZiB0aGUgZXZlbnQgaXMKLQkgIHNvbWV0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kLgotCi0yMDEyLTA3LTEzIDA5OjQzOjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGZpeCB0ZXN0IHJhY2luZXNzCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5NTA2Ci0KLTIwMTItMDctMTIgMTM6MTc6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogZml4IGdzdC1mZm1wZWcgcGx1Z2luIHBhdGggYWdhaW4KLQotMjAxMi0wNy0xMiAxMjowOToxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiBhZGQgY2x1dHRlci1nc3QgYW5kIHJlZmluZSBwbHVnaW4gc2VhcmNoIHBhdGhzCi0KLTIwMTItMDctMTIgMDA6MzQ6MjIgKzEwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0cGFkOiBNb3ZlIHN0aWNreSBmbGFnIGNsZWFyaW5nIGNvZGUgdG8gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlCi0JICBUaGUgZ2hvc3RwYWQgY29kZSBkaXJlY3RseSBhY3RpdmF0ZXMvZGVhY3RpdmF0ZXMgdGhlIGNoaWxkIGNvZGUgYnkKLQkgIGNhbGxpbmcgZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlLCByYXRoZXIgdGhhbiBnc3RfcGFkX3NldF9hY3RpdmUsIHNvCi0JICBtYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGZsYWdzIGluIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSgpLCB3aGljaCBzaG91bGQKLQkgIGNhdGNoIGFsbCBjYXNlcy4KLQotMjAxMi0wNy0xMSAxMjo0MDoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudDogaW1wcm92ZSBhbm5vdGF0aW9uCi0KLTIwMTItMDctMTEgMTI6Mzc6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBoYW5kbGUgc3RlcCBlbmQgY29ycmVjdGx5Ci0JICB3aGVuIHdlIGhhdmUgYSBuZXcgc3RlcCBldmVudCB3aXRoIGEgLTEgYW1vdW50LCBtYWtlIHN1cmUgdGhhdCB3ZSBmb2xsb3cgdGhlCi0JICByZWd1bGFyIGNvZGUgcGF0aCBzbyB0aGF0IHRoZSBzdG9wX2VuZCBoYW5kbGVyIGlzIGNhbGxlZCBhcyB1c3VhbC4gVGhpcyB0YWtlcwotCSAgY2FyZSBvZiBmbHVzaGluZyB0aGUgYnVmZmVyIGluIGNhc2Ugb2YgYSBmbHVzaGluZyBzdGVwIGFuZCBhbHNvIHBvc3RzIGEgc3RlcCBlbmQKLQkgIG1lc3NhZ2UuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTM3OAotCi0yMDEyLTA3LTExIDEzOjE0OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWY6Ci0JICB3aW4zMjogRml4IGV4cG9ydGVkIHN5bWJvbHMgbGlzdCBmb3IgcmVhbCBub3cKLQotMjAxMi0wNy0xMSAxMToyMToxOCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IHJlbW92ZSByZW1vdmVkIGFwaSBmcm9tIHRoZSBkb2NzLgotCi0yMDEyLTA3LTExIDEyOjQ2OjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBVcGRhdGVkIGV4cG9ydGVkIHN5bWJvbHMgbGlzdAotCi0yMDEyLTA3LTExIDEyOjQ1OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIGdzdC9nc3R0b2MuaDoKLQkgIHRvYzogQWRkIGZ1bmN0aW9ucyB0byByZXRyaWV2ZSB0aGUgcGFyZW50IEdzdFRvYy9Hc3RUb2NFbnRyeSBvZiBhIEdzdFRvY0VudHJ5Ci0KLTIwMTItMDctMTAgMTg6MTU6MjAgKzAzMDAgIEFudG9uIEJlbGthIDxhbnRvbmJlbGthQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHRvYy5jOgotCSAgdG9jOiBGaXggZ3N0X3RvY19maW5kX2VudHJ5KCkKLQkgIFJlY3Vyc2l2ZSBzZWFyY2ggZm9yIHRoZSByZXF1aXJlZCBlbnRyeSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlCi0JICB0b3AtbGV2ZWwgZW50cnkgdGhhdCBjb250YWlucyBhbiBlbnRyeSB3aXRoIHRoZSBzZWFyY2ggVUlELgotCi0yMDEyLTA3LTExIDEwOjI2OjEzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogUHVzaCBTVFJFQU1fU1RBUlQgaW4gcHVsbC1tb2RlCi0KLTIwMTItMDctMTEgMTA6MjQ6NTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IERlbW90ZSBXQVJOSU5HIHRvIERFQlVHCi0JICBJdCBpcyBub3QgYW4gaXNzdWUgdG8gZ2V0IGZpZWxkcyB0aGF0IGRvbid0IGV4aXN0LCBjYWxsaW5nIGNvZGUgc2hvdWxkCi0JICBoYW5kbGUgdGhhdC4KLQotMjAxMi0wNy0xMCAxMTo0Njo0MSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YmluLmg6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGRlYnVndXRpbHMuaDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RlcnJvci5oOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKLQkqIGdzdC9nc3RwYXJhbXNwZWNzLmg6Ci0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkqIGdzdC9nc3RwYXJzZS5oOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JKiBnc3QvZ3N0cG9sbC5oOgotCSogZ3N0L2dzdHByZXNldC5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFza3Bvb2wuYzoKLQkqIGdzdC9nc3R0YXNrcG9vbC5oOgotCSogZ3N0L2dzdHRvYy5jOgotCSogZ3N0L2dzdHRvY3NldHRlci5jOgotCSogZ3N0L2dzdHRyYWNlLmg6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkqIGdzdC9nc3R0eXBlZmluZC5oOgotCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JKiBnc3QvZ3N0dmVyc2lvbi5oLmluOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci1kb2NzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RpbmRleC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RkYXRhcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZGF0YXF1ZXVlLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgotCSAgUmVtb3ZlIDAuMTAtcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCAiU2luY2UiIG1hcmtlcnMKLQotMjAxMi0wNy0xMCAwMDozOTozNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBwcm92aWRlIGZhbGxiYWNrIGluIGNhc2UgYSBjcmVhdGUgZnVuY3Rpb24gZG9lc24ndCBrbm93IGFib3V0IHByb3ZpZGVkIGJ1ZmZlcnMKLQkgIEluIDAuMTEgdGhlIGNhbGxlciBtYXkgcHJvdmlkZSBhIGJ1ZmZlciB0byBiZSBmaWxsZWQgYnkgdGhlIHNvdXJjZSB0bwotCSAgcHVsbF9yYW5nZS9nZXRfcmFuZ2UvY3JlYXRlLCBidXQgaXQncyBlYXN5IHRvIG1pc3MgdGhpcyBuZXcgY2FzZSB3aGVuCi0JICBwb3J0aW5nIGNvZGUgZnJvbSAwLjEwLiBQcm92aWRlIGZhbGxiYWNrIHRoYXQgY29waWVzIHRoZSBjcmVhdGVkIGRhdGEKLQkgIGludG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciBmb3Igbm93LgotCSAgVGhpcyBtYWtlcyBvZ2dkZW11eCBpbiBwdWxsLW1vZGUgd29yayB3aXRoIGRhdGF1cmlzcmMuCi0KLTIwMTItMDctMTAgMTA6MzE6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIHF1ZXJ5OiBjb3B5IHN0cnVjdHVyZSBpbiBfYWRkX2FsbG9jYXRpb25fbWV0YSgpCi0JICBNYWtlIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhKCkgdGFrZSBhIGNvcHkgb2YgdGhlIHBhc3NlZCBjYXBzIGluc3RlYWQgb2YKLQkgIHRha2luZyBvd25lcnNoaXAuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIGZvciB0aGUgY2FsbGVyIGluIG1vc3QgY2FzZXMgYmVjYXVzZSBpdAotCSAgZG9lc24ndCBoYXZlIHRvIG1ha2UgYSBjb3B5IGFuZCBkZWFsIHdpdGggTlVMTCB2YWx1ZXMuCi0KLTIwMTItMDctMTAgMTA6MTE6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogYWRkIG5ldyBmbGFncwotCi0yMDEyLTA3LTA5IDIzOjQ3OjUzICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgbWluaW9iamVjdDogZml4IGV4Y2x1c2l2ZSBsb2NrL3VubG9jayByYWNlCi0KLTIwMTItMDctMDkgMjE6NTE6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBiYXNlc3JjLCBiYXNlc2luaywgYmFzZXBhcnNlLCB0eXBlZmluZDogdXNlIEdTVF9TRUdNRU5UX0ZMQUcgd2l0aCBzZWdtZW50IGZsYWdzCi0KLTIwMTItMDctMDkgMjI6MTE6MzEgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSAgc2VnbWVudDogYWxzbyBjb3B5IHRoZSBzZWdtZW50IGZsYWcKLQkgIEZpeGVzIHNlZ21lbnRlZCBzZWVrcyAoYXMgdGVzdGVkIGUuZy4gaW4gdGhlIGFkZGVyIHRlc3RzIGluIGJhc2UpLgotCi0yMDEyLTA3LTA5IDIwOjU1OjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RkYXRhcXVldWUuaDoKLQkgIHBsdWdpbnM6IHNwcmlua2xlIEdfR05VQ19JTlRFUk5BTCBmb3IgZGF0YXF1ZXVlIGZ1bmN0aW9ucwotCSAgQW5kIHJlbW92ZSBwYWRkaW5nLCBzaW5jZSB0aGlzIGlzIG5vdCBwdWJsaWMgQVBJIGFueSBtb3JlLgotCi0yMDEyLTA3LTA5IDIwOjQ4OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvcGFyc2UvdHlwZXMuaDoKLQkgIGdzdDogc3ByaW5rbGUgc29tZSBHX0dOVUNfSU5URVJOQUwgZm9yIGludGVybmFsIGZ1bmN0aW9ucwotCi0yMDEyLTA3LTA5IDIwOjA5OjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvYy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvY3NldHRlci5jOgotCSAgdGVzdHM6IGZpeCB0b2MgdW5pdCB0ZXN0cwotCSAgTWVhbnQgdG8gY2hlY2sgc3Vic3ViZW50cnksIG5vdCBzdWJlbnRyeS4KLQotMjAxMi0wNy0wOSAxODo1ODoyNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYzoKLQkgIHRlc3RzOiBtaW5vciB0b2MgdGVzdCBjbGVhbi11cAotCi0yMDEyLTA3LTA5IDE4OjUxOjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvYy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvY3NldHRlci5jOgotCSAgdGVzdHM6IHR1cm4gdG9jIGNoZWNrIG1hY3JvcyBpbnRvIHByb3BlciBmdW5jdGlvbnMKLQkgIFNvIHdlIGNhbiBzZWUgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBjaGVjayB0aGF0IGZhaWxzLgotCi0yMDEyLTA3LTA5IDIwOjMxOjAwICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBVcGRhdGUgZGVmcyBmaWxlIGZvciBBUEkgY2hhbmdlcy9hZGRpdGlvbgotCi0yMDEyLTA3LTA5IDIwOjI5OjI5ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhcmFtc3BlY3MuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSAgY2hlY2s6IFVwZGF0ZSB0ZXN0cyBmb3IgbmV3IFNUUkVBTV9TVEFSVCBtZXNzYWdlCi0KLTIwMTItMDctMDkgMjA6Mjg6NTQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICBjaGVjazogRW5zdXJlIFNUUkVBTV9TVEFSVCBtZXNzYWdlIGlzIHBvc3RlZAotCSAgQSBTVFJFQU1fU1RBUlQgbWVzc2FnZSBpcyBwb3N0ZWQgaWYgYW5kIG9ubHkgaWYgYWxsIHNpbmtzIGluIHRoZQotCSAgYmluL3BpcGVsaW5lIHJlY2VpdmVkIHRoZSBTVFJFQU1fU1RBUlQgZXZlbnQKLQotMjAxMi0wNy0wOSAyMDoyODoyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBQb3N0IGEgU1RSRUFNX1NUQVJUIG1lc3NhZ2Ugd2hlbiB3ZSBzZWUgdGhlIGV2ZW50Ci0KLTIwMTItMDctMDkgMjA6Mjc6NDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBnc3RiaW46IGNvbGxlY3QgYW5kIGFnZ3JlZ2F0ZSBTVFJFQU1fU1RBUlQgbWVzc2FnZXMKLQkgIHdoZW4gYWxsIHNpbmtzIGhhdmUgcG9zdGVkIGEgU1RSRUFNX1NUQVJULCB0aGUgYmluIHdpbGwgZm9yd2FyZCBhCi0JICBuZXcgU1RSRUFNX1NUQVJUIG1lc3NhZ2UgdG8gdGhlIHBhcmVudCBiaW4gb3IgYXBwbGljYXRpb24KLQotMjAxMi0wNy0wOSAyMDowODoxNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3RtZXNzYWdlOiBOZXcgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJUCi0JICBtZXNzYWdlIGNvdW50ZXJwYXJ0IHRvIHRoZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUIGV2ZW50Ci0KLTIwMTItMDctMDkgMTk6NTk6MzMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICBjaGVjazogVW5pdCB0ZXN0IGZvciBFT1MgbWVzc2FnZQotCSAgTWFrZSBzdXJlIHdlIGdldCB0aGUgYWdncmVnYXRlZCBtZXNzYWdlIGlmIGFuZCBvbmx5IGlmIGFsbCBzaW5rcwotCSAgcmVjZWl2ZWQgYW4gRU9TIGV2ZW50Ci0KLTIwMTItMDctMDkgMTk6NTY6MTUgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBhZGQgU1RSRUFNX1NUQVJUIGhhbmRsaW5nCi0JICBVc2UgYSBmbGFnIHRvIGZvcndhcmQgdGhlIGZpcnN0IFNUUkVBTV9TVEFSVAotCi0yMDEyLTA3LTA5IDE2OjIwOjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jYXBzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgc3RyZWFtIGRvY3MgZm9yIFNFR01FTlRfU1RBUlQgZXZlbnQKLQotMjAxMi0wNy0wOSAxNjo0ODo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGZpeCBtb3JlIGRvY3MKLQotMjAxMi0wNy0wOSAxNjoyMjowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RhbGxvY2F0b3IuaDoKLQkgIGRvY3M6IGZpeCBkb2NzIGEgbGl0dGxlIG1vcmUKLQotMjAxMi0wNy0wOSAxNjowMjo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdGFsbG9jYXRvci5jOgotCSogZ3N0L2dzdGFsbG9jYXRvci5oOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L21lbW9yeV90ZXN0LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktbWVtb3J5LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktbWVtb3J5Lmg6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktdmlkbWVtLmM6Ci0JICBtZW1vcnk6IE1ha2UgR3N0QWxsb2NhdG9yIGEgR3N0T2JqZWN0Ci0JICBNYWtlIEdzdEFsbG9jYXRvciBhIEdzdE9iamVjdCBpbnN0ZWFkIG9mIGEgR3N0TWluaU9iamVjdCwgbGlrZSBidWZmZXJwb29sLgotCSAgTWFrZSBhIG5ldyBnc3RhbGxvY2F0b3IuYyBmaWxlLiBNYWtlIGEgR3N0QWxsb2NhdG9yIHN1YmNsYXNzIGZvciB0aGUgZGVmYXVsdAotCSAgYWxsb2NhdG9yLgotCi0yMDEyLTA3LTA5IDEzOjIwOjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JICBtZW1vcnk6IHJlbW92ZSB1bnVzZWQgbWFjcm9zCi0KLTIwMTItMDctMDkgMTM6MjA6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNsb2NrLmM6Ci0JICBjbG9jazogbWFrZSBhYnN0cmFjdAotCSAgTWFrZSB0aGUgR3N0Q2xvY2sgdHlwZSBhYnN0cmFjdC4KLQkgIEZpeCBhIGhvcnJpYmxlIGhhY2sgaW4gdGhlIGNsb2NrIHVuaXQgdGVzdC4KLQotMjAxMi0wNy0wOSAxNTozNzoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBGaXggaGFuZGxpbmcgb2YgbWluLXRocmVzaG9sZCBhbmQgc2VyaWFsaXplZCBxdWVyaWVzCi0JICBPbmx5IGNvbnNpZGVyIHRoZSBxdWV1ZSBlbXB0eSBpZiB0aGUgbWluaW11bSB0aHJlc2hvbGRzCi0JICBhcmUgbm90IHJlYWNoZWQgYW5kIGRhdGEgaXMgYXQgdGhlIHF1ZXVlIGhlYWQuIE90aGVyd2lzZQotCSAgd2Ugd291bGQgYmxvY2sgZm9yZXZlciBvbiBzZXJpYWxpemVkIHF1ZXJpZXMuCi0JICBUaGlzIGFsc28gbWFrZXMgc2VuZGluZyBvZiBzZXJpYWxpemVkIGV2ZW50cywgbGlrZSBjYXBzLCBoYXBwZW4KLQkgIGZhc3RlciBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZXMgbmVnb3RpYXRpb24gcGVyZm9ybWFuY2UuCi0JICBGaXhlcyBidWcgIzY3OTQ1OC4KLQotMjAxMi0wNy0wOSAxMzoxNTo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0b2MuYzoKLQkgIHRvYzogcmVtb3ZlIHBhZGRpbmcgbm93IHRoYXQgdGhlIHN0cnVjdHMgYXJlIHByaXZhdGUKLQotMjAxMi0wNy0wOSAxMzoxMjoyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0b2MuYzoKLQkqIGdzdC9nc3R0b2MuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYzoKLQkgIHRvYzogYWRkIGdzdF90b2NfZHVtcCgpIGZ1bmN0aW9uIGZvciBkZWJ1Z2dpbmcKLQkgIEFQSTogZ3N0X3RvY19kdW1wKCkKLQotMjAxMi0wNy0wMyAwMDowNzoxMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgotCSAgYnVzLCBjbG9jazogbWFrZSBzdXJlIHRoZXNlIG5ldmVyIGhhdmUgYSBmbG9hdGluZyByZWYKLQkgIENsZWFyIHRoZSBpbml0aWFsIGZsb2F0aW5nIHJlZiBpbiB0aGUgaW5pdCBmdW5jdGlvbiBmb3IKLQkgIGJ1c3NlcyBhbmQgY2xvY2tzLiBUaGVzZSBvYmplY3RzIGNhbiBiZSBzZXQgb24gbXVsdGlwbGUKLQkgIGVsZW1lbnRzLCBzbyB0aGVyZSdzIG5vIGNsZWFyIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAKLQkgIGhlcmUuIElkZWFsbHkgd2UnZCBqdXN0IG5vdCBtYWtlIHRoZW0gZGVyaXZlIGZyb20KLQkgIEdJbml0aWFsbHlVbm93bmVkIGF0IGFsbCwgYnV0IHNpbmNlIHdlIHdhbnQgdG8ga2VlcAotCSAgdXNpbmcgR3N0T2JqZWN0IGZlYXR1cmVzIGZvciBkZWJ1Z2dpbmcsIHdlJ2xsIGp1c3QgZG8KLQkgIGl0IGxpa2UgdGhpcy4KLQkgIFRoaXMgc2hvdWxkIGFsc28gZml4IHNvbWUgcHJvYmxlbXMgd2l0aCBiaW5kaW5ncywgd2hpY2gKLQkgIHNlZW0gdG8gZ2V0IGNvbmZ1c2VkIHdoZW4gdGhleSBnZXQgZmxvYXRpbmcgcmVmcyBmcm9tCi0JICBub24tY29uc3RydWN0b3IgZnVuY3Rpb25zIChvciBmdW5jdGlvbnMgYW5ub3RhdGVkIHRvCi0JICBoYXZlIGEgJ3RyYW5zZmVyIGZ1bGwnIHJldHVybiB0eXBlKS4gVGhpcyB3b3JrcyBub3c6Ci0JICBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdPYmplY3QsIEdzdAotCSAgR09iamVjdC50aHJlYWRzX2luaXQoKQotCSAgR3N0LmluaXQoTm9uZSkKLQkgIHBpcGVsaW5lPUdzdC5QaXBlbGluZSgpCi0JICBidXMgPSBwaXBlbGluZS5nZXRfYnVzKCkKLQkgIHBpcGVsaW5lLnNldF9zdGF0ZShHc3QuU3RhdGUuTlVMTCkKLQkgIGRlbCBwaXBlbGluZTsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkyODYKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTcyMDIKLQotMjAxMi0wNy0wOCAyMDoxNTozMyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGluc3BlY3Q6IHN1cHByZXNzIGdsaWIgZGVwcmVjYXRpb25zIHdhcm5pbmdzIGZvciBHX1ZBTFVFX0FSUkFZCi0KLTIwMTItMDctMDcgMjM6MTM6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdGVzdHM6IGFkZCBtb3JlIHRlc3RzIGZvciBkYXRldGltZSB2YWx1ZSBzZXJpYWxpc2F0aW9uL2Rlc2VyaWFsaXNhdGlvbgotCSAgRXNwLiBvZiBwYXJ0aWFsIGRhdGV0aW1lcy4KLQotMjAxMi0wNy0wNyAyMjo0NjowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IHVzZSBkYXRldGltZSBzZXJpYWxpc2UvZGVzZXJpYWxpc2UgZnVuY3Rpb25zIGZvciBkYXRldGltZXMKLQkgIFRoaXMgcmUtdXNlcyBleGlzdGluZyBjb2RlIGFuZCBtYWtlcyBzdXJlIHdlIHByb3Blcmx5IHNlcmlhbGlzZQotCSAgYW5kIGRlc2VyaWFsaXNlIGRhdGV0aW1lcyB3aGVyZSBub3QgYWxsIGZpZWxkcyBhcmUgc2V0ICh0aHVzCi0JICBmaXhpbmcgc29tZSB3YXJuaW5ncyB3aGVuIHNlcmlhbGlzaW5nIHN1Y2ggZGF0ZXRpbWVzKS4KLQotMjAxMi0wNy0wNyAyMjo0MDoxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JICBkYXRldGltZTogZG8gb3VyIG93biBzZXJpYWxpc2F0aW9uIHNvIHdlIGNhbiBzZXJpYWxpc2UgbWljcm9zZWNvbmRzIGFzIHdlbGwKLQkgIFdlIHN0aWxsIGRvbid0IGRvIHRoYXQgaW4gX3RvX2lzbzg2MDFfc3RyaW5nKCkgdGhvdWdoLCBzaW5jZQotCSAgdGhpcyB3aWxsIHByb2JhYmx5IG1vc3RseSBiZSB1c2VkIGluIHRhZ3MsIHdoZXJlIGl0IGRvZXNuJ3QKLQkgIG1hdHRlciBzbyBtdWNoIGFuZCB0aGUgbWljcm9zZWNvbmQgYXJndW1lbnQgbWlnaHQgbm90IGJlCi0JICB3ZWxsLXJlY2VpdmVkIGJ5IHNvbWUgdGFnIHJlYWRlcnMuCi0KLTIwMTItMDctMDcgMTk6NDM6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSAgZGF0ZXRpbWU6IHdoZW4gZGVzZXJpYWxpc2luZyBwYXJzZSBtaWNyb3NlY29uZHMgaWYgYXZhaWxhYmxlCi0KLTIwMTItMDctMDcgMTY6MDE6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSAgZGF0ZXRpbWU6IGZpeCBzZWNvbmQgcGFyc2luZyBmYWlsdXJlIGNhc2Ugd2hlbiBkZXNlcmlhbGlzaW5nIGRhdGV0aW1lCi0JICBXaGVuIHdlIGZhaWwgdG8gcGFyc2UgdGhlIG51bWJlciBvZiBzZWNvbmRzLCByZXNldCB0aGUgdmFsdWUgdG8gLTEKLQkgIGluc3RlYWQgb2YgcGFzc2luZyBzb21lIGVycm9yIHZhbHVlIGFzIHNlY29uZHMuIEFsc28sIHdlIGNhbiBzdGlsbAotCSAgdHJ5IHRvIHBhcnNlIHRpbWV6b25lIGluZm9ybWF0aW9uLgotCi0yMDEyLTA3LTA3IDE1OjQ0OjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktbWVtb3J5LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktdmlkbWVtLmM6Ci0JICBleGFtcGxlczogZml4IGRlYnVnIGxvZyBwcmludCBmb3JtYXRzIGluIG1lbW9yeSBleGFtcGxlcwotCi0yMDEyLTA3LTA3IDAxOjM3OjUwICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJybkBheGlzLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGdzdGluZm86IEFkZCBkZXN0cm95IG5vdGlmeSBhcmd1bWVudHMgdG8gZGVidWcgc3R1YnMKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzk1MzUKLQotMjAxMi0wNy0wNiAyMDozNzowNiArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2Vicm5AYXhpcy5jb20+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGdzdHN0cnVjdHVyZTogU2V0IGxjb3B5IHN0cmluZyBjb25zdCBleGFjdGx5IGFzIGdsaWIncyBtYWNybwotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTUzNAotCi0yMDEyLTA3LTA2IDE3OjE5OjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktbWVtb3J5LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktdmlkbWVtLmM6Ci0JICBtZW1vcnk6IGV4cG9zZSB0aGUgR3N0QWxsb2NhdGlvbiBzdHJ1Y3R1cmUKLQkgIEV4cG9zZSB0aGUgR3N0QWxsb2NhdGlvbiBzdHJ1Y3R1cmUgYW5kIHByb3ZpZGUgYW4gX2luaXQgZnVuY3Rpb24uIFRoaXMgbWFrZXMgaXQKLQkgIGVhc2llciB0byBtYWtlICdzdWJjbGFzc2VzJyBvZiB0aGUgYWxsb2NhdG9yIHRoYXQgY29udGFpbiBtb3JlIGluZm8uCi0JICBJdCBhbHNvIGFsbG93cyB1cyB0byBleHBvc2UgdGhlIGZsYWdzIG9uIHRoZSBhbGxvY2F0b3IgbWluaW9iamVjdC4KLQkgIE1ha2UgYSBmbGFnIHRvIG5vdGUgdGhhdCB0aGUgYWxsb2NhdG9yIHVzZXMgYSBjdXN0b20gYWxsb2MgZnVuY3Rpb24uCi0KLTIwMTItMDctMDYgMTI6NDU6MjkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IERlbW90ZSBXQVJOSU5HIHRvIElORk8KLQkgIEl0IGlzIGNvbW1vbiB0byB1c2UgZ3N0X3N0cnVjdHVyZV9nZXQoKSB0byBrbm93IGlmIGEgZmllbGQgaXMgcHJlc2VudAotCSAgb3Igbm90LgotCi0yMDEyLTA3LTA2IDExOjQxOjUyICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGdzdC1pbnNwZWN0OiBSZW1vdmUgdW51c2VkIGRlZmluZQotCi0yMDEyLTA3LTA2IDExOjQxOjMzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JICBjaGVjazogZ3N0Y29udHJvbGxlci5oIGRvZXNuJ3QgZXhpc3QgYW55bW9yZQotCi0yMDEyLTA3LTA2IDExOjQwOjQ3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6Ci0JICBjaGVjazogVXNlIGNvbnNpc3RlbmN5Y2hlY2sgb24gYmFzZXNyYwotCi0yMDEyLTA3LTA2IDExOjM4OjU4ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmM6Ci0JICBjb25zaXN0ZW5jeWNoZWNrZXI6IENoZWNrIGZvciBTVFJFQU1fU1RBUlQgZXZlbnQKLQkgIENoZWNrIHRoYXQgaXQgaXMgYWx3YXlzIGJlZm9yZSBhbnkgc2VyaWFsaXplZCBldmVudC4KLQotMjAxMi0wNy0wNiAxMDoxMzoyOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgotCSAgdHlwZWZpbmRlbGVtZW50OiByZW1vdmUgdW5pbXBsZW1lbnRlZCBtYXhpbXVtIHByb3BlcnR5Ci0KLTIwMTItMDctMDYgMTA6MDk6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKLQkgIHRlZTogcmVtb3ZlIHVuaW1wbGVtZW50ZWQgaGFzLXNpbmstbG9vcCBwcm9wZXJ0eQotCi0yMDEyLTA3LTA2IDEwOjA3OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogcmVtb3ZlIGRlcHJlY2F0ZWQgdGVtcC1sb2NhdGlvbiB1c2UsIG1ha2UgaXQgcmVhZC1vbmx5Ci0KLTIwMTItMDctMDYgMDk6NTc6NTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6Ci0JICBpZGVudGl0eTogcmVtb3ZlIGRlcHJlY2F0ZWQgY2hlY2stcGVyZmVjdCBwcm9wZXJ0eQotCSAgUmVwbGFjZWQgYnkgdGhlIG1vcmUgc3BlY2lmaWMgY2hlY2staW1wZXJmZWN0LXt0aW1lc3RhbXAsb2Zmc2V0fQotCi0yMDEyLTA3LTA2IDExOjQ5OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIHF1ZXJ5OiB1c2UgbW9yZSBnZW5lcmljIHN0cnVjdHVyZSBmb3IgbWV0YSBwYXJhbXMKLQotMjAxMi0wNy0wNiAxMToyMjo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBxdWVyeTogbWFrZSBmaW5kX2FsbG9jYXRpb25fbWV0YSBtZXRob2QKLQkgIE1ha2UgZ3N0X3F1ZXJ5X2ZpbmRfYWxsb2NhdGlvbl9tZXRhKCkgdGhhdCBhbHNvIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIG1ldGFkYXRhCi0JICBhbmQgcmVwbGFjZXMgZ3N0X3F1ZXJ5X2hhc19hbGxvY2F0aW9uX21ldGEoKS4KLQotMjAxMi0wNy0wNiAxMTowMDozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBxdWVyeTogYWRkIGZsYWdzIHRvIGFsbG9jYXRpb24gcXVlcnkKLQkgIE1ha2UgaXQgcG9zc2libGUgdG8gYWRkIEFQSSBzcGVjaWZpYyBmbGFncyB0byB0aGUgQUxMT0NBVElPTiBxdWVyeS4gVGhpcyBtYWtlcwotCSAgaXQgcG9zc2libGUgdG8gYWxzbyBjaGVjayB3aGF0IGtpbmRzIG9mIHN1YmZlYXR1cmVzIG9mIHRoZSBtZXRhZGF0YSBBUEkgYXJlCi0JICBzdXBwb3J0ZWQuCi0KLTIwMTItMDctMDYgMDk6MTE6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9tZW1vcnlfdGVzdC5jOgotCSAgdGVzdHM6IHJlbW92ZSB1bnVzZWQgaW5jbHVkZXMKLQotMjAxMi0wNy0wNSAxODowNzo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L21lbW9yeV90ZXN0LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktbWVtb3J5Lmg6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktdmlkbWVtLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktdmlkbWVtLmg6Ci0JICBtZW1vcnk6IGFkZCBtb3JlIGV4YW1wbGVzCi0JICBBZGQgYW4gZXhhbXBsZSBvZiBhIGN1c3RvbSBhbGxvY2F0b3Igd2l0aCBhIGN1c3RvbSBBUEkuCi0KLTIwMTItMDctMDUgMTc6MTE6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9tZW1vcnlfdGVzdC5jOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LW1lbW9yeS5jOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LW1lbW9yeS5oOgotCSAgbWVtb3J5OiBhZGQgZ3N0X21lbW9yeV9pbml0KCkKLQkgIEFkZCBhIG1ldGhvZCB0aGF0IG1lbW9yeSBpbXBsZW1lbnRhdGlvbnMgY2FuIGNhbGwgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhbmRhcmQKLQkgIEdzdE1lbW9yeSBzdHJ1Y3R1cmUuCi0JICBNb3ZlIHRoZSBwYXJlbnQgaGFuZGxpbmcgaW4gdGhlIF9mcmVlIGhhbmRsZXIuCi0JICBSZWFycmFuZ2Ugc29tZSBpbnRlcm5hbCBmdW5jdGlvbiBwYXJhbWV0ZXJzIHNvIHRoYXQgdGhlIG9yZGVyIGlzIGNvbnNpc3RlbnQuCi0JICBBZGQgbW9yZSBtZW1vcnkgZXhhbXBsZXMKLQotMjAxMi0wNy0wNSAxNjoxNzo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IGZpeCBzb21lIG1pbmlvYmplY3QgZG9jcwotCi0yMDEyLTA3LTA1IDE0OjI1OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL21lbW9yeS8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvbWVtb3J5L21lbW9yeV90ZXN0LmM6Ci0JICB0ZXN0czogYWRkIG1lbW9yeSBleGFtcGxlCi0KLTIwMTItMDctMDUgMTI6MjU6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dG9jLmM6Ci0JICB0ZXN0czogZml4IHRvYyB1bml0IHRlc3QgYnVpbGQgYnkgcmVtb3ZpbmcgdG9jIHF1ZXJ5IHN0dWZmIHRoZXJlIHRvbwotCi0yMDEyLTA3LTA1IDEzOjAzOjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBldmVudDogQWRkIGZvcm1hdCBhbmQgcG9zaXRpb24gdG8gdGhlIHNlZ21lbnQtZG9uZSBldmVudAotCi0yMDEyLTA3LTA1IDEyOjUzOjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlci50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lbW9yeS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW1pbmlvYmplY3QudHh0OgotCSAgZG9jczogdXBkYXRlIGRvY3MKLQotMjAxMi0wNy0wNSAxMjoxNzo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkgIG1pbmlvYmplY3Q6IGluY3JlYXNlIGFtb3VudCBvZiBwb3NzaWJsZSBmbGFncwotCi0yMDEyLTA3LTA1IDEyOjUyOjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBldmVudDogSW1wbGVtZW50IHNlZ21lbnQtZG9uZSBldmVudAotCi0yMDEyLTA3LTA1IDEyOjM3OjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC10b2MudHh0OgotCSAgcGFydC10b2M6IFJlbW92ZSBzZWN0aW9uIGFib3V0IFRPQyBxdWVyeQotCi0yMDEyLTA3LTA1IDEyOjM0OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogVXBkYXRlIGV4cG9ydGVkIHN5bWJvbHMgbGlzdAotCi0yMDEyLTA3LTA1IDEyOjMxOjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBxdWVyeTogUmVtb3ZlIHRoZSBUT0MgcXVlcnksIGl0J3Mgbm90IHZlcnkgdXNlZnVsIG5vdyB0aGF0IHdlIGhhdmUgc3RpY2t5IGV2ZW50cwotCi0yMDEyLTA3LTAzIDE4OjQ5OjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkgIHF1YXJrOiBSZW1vdmUgdW5uZWVkZWQgcXVhcmtzCi0KLTIwMTItMDctMDMgMTg6NDU6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXRvYy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRvYy5jOgotCSogZ3N0L2dzdHRvYy5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvYy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvY3NldHRlci5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHRvYzogTWFrZSBzdHJ1Y3R1cmVzIG9wYXF1ZSBhbmQgY2xlYW4gdXAgZnVuY3Rpb24gbmFtZXMgYW5kIGZpZWxkcyBhIGJpdAotCi0yMDEyLTA3LTA0IDE3OjAyOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6Zml4IGRlYnVnIGNhdGVnb3J5Ci0KLTIwMTItMDctMDQgMTY6Mzg6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWluaW9iamVjdDogYWRkIGxvY2sgZnVuY3Rpb25hbGl0eSB0byBHc3RNaW5pT2JqZWN0Ci0JICBNb3ZlIHRoZSBsb2NraW5nIG1ldGhvZHMgZnJvbSBHc3RNZW1vcnkgdG8gR3N0TWluaU9iamVjdC4KLQkgIEFkZCBhIG1pbmlvYmplY3QgZmxhZyB0byBlbmFibGUgTE9DS0FCTEUgb2JqZWN0cy4gTE9DS0FCTEUgb2JqZWN0cyBjYW4KLQkgIHVzZSB0aGUgbG9jay91bmxvY2sgQVBJIHRvIGNvbnRyb2wgdGhlIGFjY2VzcyB0byB0aGUgb2JqZWN0LgotCSAgQWRkIGEgbWlub2JqZWN0IGZsYWcgdGhhdCBhbGxvd3MgeW91IHRvIGxvY2sgYW4gb2JqZWN0IGluIHJlYWRvbmx5IG1vZGUuCi0JICBNb2RpZnkgdGhlIF9pc193cml0YWJsZSgpIG1ldGhvZCB0byBjaGVjayB0aGUgc2hhcmVkIGNvdW50ZXIgZm9yIExPQ0tBQkxFCi0JICBvYmplY3RzLiBUaGlzIGFsbG93cyB1cyB0byBjb250cm9sIHdyaXRhYmlsaXR5IHNlcGFyYXRlbHkgZnJvbSB0aGUgcmVmY291bnQgZm9yCi0JICBMT0NLQUJMRSBvYmplY3RzLgotCi0yMDEyLTA3LTA0IDE2OjA0OjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBhZGQgbmV3IGxvY2tpbmcgZGVidWcgY2F0ZWdvcnkKLQotMjAxMi0wNy0wNCAxMjoyODo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBmaXggaXNfZXhjbHVzaXZlCi0KLTIwMTItMDctMDQgMTI6MDM6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogYWRkIExPQ0tfRkxBR19SRUFEV1JJVEUgZGVmaW5lCi0KLTIwMTItMDctMDQgMTE6NDg6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVtb3J5LnR4dDoKLQkgIG1lbW9yeTogdXBkYXRlIGRvY3MKLQotMjAxMi0wNy0wNCAxMDoxMjo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBzbWFsbCBjbGVhbnVwCi0KLTIwMTItMDctMDMgMTM6NTA6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHVwZGF0ZSBmb3IgbmV3IHN5bWJvbHMKLQotMjAxMi0wNy0wMyAxMzo0Nzo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBGaXggdGhlIE5PX1NIQVJFIGZsYWcgaW4gdGhlIGNvbnN0cnVjdG9yCi0JICBUaGUgTk9fU0hBUkUgZmxhZyBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGV4Y2x1c2l2ZW5lc3Mgb2YgdGhlIGJ1ZmZlciBpbml0aWFsbHkKLQkgIGJ1dCBvbmx5IGlmIGEgX3NoYXJlIG9wZXJhdGlvbiBjYW4gYmUgZG9uZS4gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0bwotCSAgV1JJVEUgbWFwIGEgYnVmZmVyIG1lbW9yeSBiZWNhdXNlIGl0IHdvdWxkIGhhdmUgYSBzaGFyZSBjb3VudCBvZiBhdCBsZWFzdCAyLgotCi0yMDEyLTA3LTAzIDEzOjQ3OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JICBtZW1vcnk6IG9ubHkgY2hlY2sgdGhlIGxvY2tpbmcgcmVmY291bnQKLQotMjAxMi0wNy0wMyAxMzo0Njo0MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBmaXggcmVzaXplCi0JICBDb3JyZWN0bHkgdXBkYXRlIHRoZSBleGNsdXNpdmUgbG9ja3MKLQotMjAxMi0wNy0wMyAxMzo0NTowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiBVc2UgbG9jayBmbGFncyBmb3IgbWFwIGZsYWdzCi0JICBXZSBpbXBsZW1lbnQgdGhlIGxvY2tpbmcgaW4gZ3N0X21lbW9yeV9tYXAgd2l0aCB0aGUgbG9jayBmbGFncywgbWFrZSBtYXRjaGluZwotCSAgZmxhZ3MgdGhlIHNhbWUgbnVtYmVyIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUgbWFwIGZsYWdzIGRpcmVjdGx5IGFzIGxvY2sgZmxhZ3MuCi0KLTIwMTItMDctMDMgMTI6MTg6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogbG9jayBtZW1vcnkgRVhDTFVTSVZFCi0JICBsb2NrIHRoZSBtZW1vcnkgdGhhdCB0aGUgYnVmZmVyIHJlZmVyZW5jZXMgYXMgRVhDTFVTSVZFLiBUaGlzIG1ha2VzIHN1cmUgdGhhdAotCSAgd2hlbiB3ZSBzaGFyZSB0aGUgbWVtb3J5IHdpdGggb3RoZXIgYnVmZmVycyB0aGF0IGl0IGJlY29tZXMgdW53cml0YWJsZS4KLQotMjAxMi0wNy0wMyAxMjoxNjoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBjbGVhbnVwIHRoZSBsb2NraW5nIGNvZGUKLQkgIGNsZWFudXAgYW5kIGZpeCB0aGUgbG9ja2luZyBjb2RlCi0KLTIwMTItMDctMDMgMDk6NDg6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVtb3J5LnR4dDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogZXhwb3NlIHRoZSBpbnRlcm5hbCBsb2NraW5nIGFwaQotCSAgRXhwb3NlIHRoZSBpbnRlcm5hbGx5IHVzZWQgbWV0aG9kcyBmb3IgbG9ja2luZyBhbmQgdW5sb2NraW5nIHRoZSBvYmplY3QuIFBhc3MKLQkgIHRoZSBhY2Nlc3MgbW9kZSB0byB0aGUgdW5sb2NrIGZ1bmN0aW9uIGZvciBleHRyYSBjaGVja3MgYW5kIGJlY2F1c2Ugd2UgbmVlZCBpdAotCSAgZm9yIHRoZSBFWENMVVNJVkUgbG9ja3MuCi0JICBNYWtlIHNvbWUgbmV3IGRlZmluZXMgdG8gc3BlY2lmeSB0aGUgZGVzaXJlZCBsb2NraW5nLgotCSAgQWRkIGEgbmV3IEVYQ0xVU0lWRSBsb2NrIG1vZGUgd2hpY2ggd2lsbCBpbmNyZW1lbnQgdGhlIHNoYXJlZCBjb3VudGVyLiBPYmplY3RzCi0JICB3aXRoIGEgc2hhcmVkIGNvdW50ZXIgPiAxIHdpbGwgbm90IGJlIGxvY2thYmxlIGluIFdSSVRFIG1vZGUuCi0KLTIwMTItMDYtMjkgMTY6Mzc6MDUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JICB0ZXN0czogZ3N0YnVmZmVyOiBleHRlbmQgYnVmZmVyIGNvcHkgdGVzdAotCSAgLi4uIHRvIGNoZWNrIGZvciBpbmRlcGVuZGVuY2Ugb2YgY29waWVkIGJ1ZmZlci4KLQotMjAxMi0wNy0wNCAxODozMjo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IHJlbW92ZSBvdXRkYXRlZCBiaXRzIG9mIHdhcm5pbmcgbWVzc2FnZQotCSAgSSB0aGluayB3ZSBjYW4gYmUgcmVhc29uYWJsZSBzdXJlIHBlb3BsZSBhcmUgdXNpbmcgYW4gdXAtdG8tZGF0ZQotCSAgZ3N0LXVuaW5zdGFsbGVkIHNjcmlwdCBub3cuCi0KLTIwMTItMDctMDQgMTg6MTY6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIEFkZCB2ZXJzaW9uZWQgdmFyaWFudHMgb2Ygc29tZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLQkgIEltcHJvdmUgcGFyYWxsZWwgaW5zdGFsbGFiaWxpdHkgaW4gc2V0dXBzIGxpa2UgamhidWlsZCBieQotCSAgcHJvdmlkaW5nIHZlcnNpb25lZCB2YXJpYW50cyBvZiBzb21lIGVudmlyb25tZW50IHZhcmlhYmxlczoKLQkgIEdTVF9SRUdJU1RSWV8xXzAKLQkgIEdTVF9QTFVHSU5fUEFUSF8xXzAKLQkgIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wCi0JICBHU1RfUExVR0lOX1NDQU5ORVJfMV8wCi0JICB3aWxsIG5vdyBiZSBjaGVja2VkIGJlZm9yZSBjaGVja2luZyB0aGUgdW52ZXJzaW9uZWQgb25lcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzk0MDcKLQotMjAxMi0wNy0wNCAxNzo1NTo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzYW1wbGUuaDoKLQkgIGRvY3M6IGZpeCB0eXBvIGluIEdzdFNhbXBsZSBkb2NzCi0KLTIwMTItMDctMDQgMTc6MzY6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6Ci0JICB1cmk6IHRoZXJlIGFyZSB2YWxpZCBVUkkgcHJvdG9jb2xzIHdpdGggb25seSB0d28gbGV0dGVycywgbGlrZSBmZDovLwotCSAgV2UgYWRkZWQgYSBtaW5pbXVtIGxlbmd0aCBvZiB0aHJlZSBsZXR0ZXJzIG9yaWdpbmFsbHkgc28gd2Ugd291bGQKLQkgIGZhaWwgdG8gcmVjb2duaXNlIERPUy9XaW5kb3dzLXN0eWxlIGZpbGVuYW1lcyBhcyB2YWxpZCBVUklzIChhcyB3ZQotCSAgc2hvdWxkKS4gVHdvIHNob3VsZCBiZSBqdXN0IGZpbmUgYXMgd2VsbC4KLQotMjAxMC0xMC0xMyAxMzozNjowOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgd2luMzI6IEFQSSBhZGRpdGlvbnMKLQotMjAwOS0wOS0yOSAwOTo1NDoyNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RkYXRhcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZGF0YXF1ZXVlLmg6Ci0JICBkYXRhcXVldWU6IFVzZSBHc3RRdWV1ZUFycmF5Ci0KLTIwMDktMDktMjggMTc6MzE6NDkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKLQkgIHF1ZXVlOiBVc2UgbmV3IEdzdFF1ZXVlQXJyYXkgZm9yIGxvY2FsIHN0b3JhZ2UuCi0JICBNYWtlcyBfY2hhaW4oKSBhbmQgX2xvb3AoKSAyNSUgZmFzdGVyCi0KLTIwMDktMDktMjkgMDk6MDY6MTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svbGlicy9xdWV1ZWFycmF5LmM6Ci0JICBjaGVjazogTmV3IHVuaXQgdGVzdCBmb3IgR3N0UXVldWVBcnJheQotCi0yMDA5LTA5LTI4IDE3OjMwOjA0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGxpYnM6IE5ldyBncm93aW5nLW9ubHkgcXVldWUuCi0JICBUaGlzIGlzIGEgcXVldWUgd2hpY2ggaGFzIHRoZSBzYW1lIEFQSSBhcyBHUXVldWUsIGV4Y2VwdCB0aGF0OgotCSAgKiBJdCB1c2VzIGFuIGFycmF5LCBpbnN0ZWFkIG9mIGEgZG91YmxlZC1saW5rZWQtbGlzdAotCSAgKiBUaGUgYXJyYXkgY2FuIG9ubHkgZ3Jvdy4KLQkgIFRoaXMgY29kZSBpcyBub3QtdGhyZWFkc2FmZS4gSXQgaXMgdXAgdG8gdGhlIG93bmVyIHRvIG1ha2Ugc3VyZSB0aGUKLQkgIHByb3BlciBsb2NraW5nIGlzIHRha2VuIGJlZm9yZSBjYWxsaW5nIHRoaXMgQVBJLgotCi0yMDEyLTA3LTA0IDE2OjE2OjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQ6Ci0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIHNlZ21lbnQ6IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIHVubWFwcGVkIHNlZWsgZmxhZ3MgbGl0dGVyaW5nIG91dCBzZWdtZW50IGZsYWdzCi0JICBNYWtlIEdzdFNlZWtGbGFnIHRvIEdzdFNlZ21lbnRGbGFnIGNvbnZlcnNpb24gZXhwbGljaXQsIGFuZAotCSAgc2V0IG9ubHkgdGhvc2Ugc2VlayBmbGFncyBpbiB0aGUgc2VnbWVudCBmbGFncyB3aGljaCBhcmUKLQkgIG1hcHBlZC4gVGhpcyBtYWtlcyBzdXJlIHdlIGRvbid0IGhhdmUgZXh0cmFuZW91cyBmbGFncwotCSAgbGl0dGVyaW5nIG91ciBzZWdtZW50IGZsYWcgZmllbGQsIHdoaWNoIGFsc28gZml4ZXMgdGhlCi0JICBkZWJ1ZyBwcmludGluZy9zZXJpYWxpc2F0aW9uIG9mIHNlZ21lbnQgZXZlbnRzIGluIHRoZQotCSAgZGVidWcgbG9nLgotCi0yMDEyLTA3LTA0IDEwOjI0OjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogbWlub3IgcG9ydGluZy10by0wLjExLnR4dCB1cGRhdGUKLQotMjAxMi0wNy0wNCAxMDoyMzowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JICB0ZXN0czogbWFrZSBjaGVja3MgZm9yIGZyb20vdG9fZ19kYXRlX3RpbWUoKSBhY3R1YWxseSB3b3JrIHByb3Blcmx5Ci0KLTIwMTItMDYtMjkgMjE6NTI6NDcgLTA0MDAgIEpvc2h1YSBNLiBEb2UgPGpvc2hAam9zaGRvZS5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRhdGV0aW1lOiBhZGQgY29udmVyc2lvbiB0by9mcm9tIEdEYXRlVGltZQotCSAgRXhwb3NlcyBleGlzdGluZyBjb25zdHJ1Y3Rvci4KLQkgIEFQSTogZ3N0X2RhdGVfdGltZV90b19nX2RhdGVfdGltZSgpCi0JICBBUEk6IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWUoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTA4MAotCi0yMDEyLTA3LTA0IDA4OjUyOjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXRpbHM6IHJlbW92ZSB1bnVzZWQgZ3N0X3ByaW50XyogZnVuY3Rpb25zCi0KLTIwMTItMDctMDMgMjI6MjQ6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZHM6IG5vIG5lZWQgdG8gZGVhY3RpdmF0ZSBwYWRzIHRoYXQgYXJlIGFscmVhZHkgaW4gUEFEX01PREVfTk9ORQotCi0yMDEyLTA3LTAzIDIyOjIwOjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkczogbWFrZSBwYWQgYWN0aXZhdGlvbiBkZWJ1ZyBsb2dzIGEgYml0IG1vcmUgcmVhZGFibGUKLQotMjAxMi0wNy0wMyAxOToxNToyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKLQkgIHRlc3RzOiBhZGQgdW5pdCB0ZXN0IGZvciBlbGVtZW50IHJlLXVzZSB1c2luZyBmYWtlc3JjCi0KLTIwMTItMDctMDMgMTk6MDQ6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGNsZWFyIEVPUyBmbGFnIHdoZW4gZGVhY3RpdmF0aW5nIHBhZHMgZml4aW5nIGVsZW1lbnQgcmUtdXNlCi0KLTIwMTItMDctMDMgMTc6MjU6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogUG9zdCBUT0MgbWVzc2FnZXMgb24gdGhlIGJ1cyBpbiB0aGUgc2lua3MsIHNpbWlsYXIgdG8gdGFncwotCi0yMDEyLTA3LTAzIDEyOjM4OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGZpeCB0aGUgX2dldF9tYXBwZWQgZnVuY3Rpb24KLQkgIEZpeCB0aGUgaW50ZXJuYWwgX2dldF9tYXBwZWQgZnVuY3Rpb24uIGdzdF9tZW1vcnlfbWFrZV9tYXBwZWQoKSB0YWtlcyBvd25lcnNoaXAKLQkgIG9mIHRoZSBtZW1vcnkgc28gd2UgbmVlZCB0byBrZWVwIGFuIGFkZGl0aW9uYWwgcmVmIHVudGlsIHdlIGFyZSBkb25lLgotCi0yMDEyLTA3LTAzIDEyOjIzOjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGFkZCBtb3JlIGRlYnVnIGxvZwotCi0yMDEyLTA3LTAzIDEwOjAyOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBldmVudDogVGhlIEdBUCBldmVudCBpcyAocGFydGlhbGx5KSBpbXBsZW1lbnRlZCBub3csIFNUUkVBTV9DT05GSUcgaXNuJ3QKLQotMjAxMi0wNi0yOCAxNjo0MjowOCArMDgwMCAgQ2h1bi13ZWkgRmFuIDxmYW5jaHVud2VpQHNyYy5nbm9tZS5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmM6Ci0JICBjb250cm9sYmluZGluZ3M6IGluY2x1ZGUgZ3N0L21hdGgtY29tcGF0LmggZm9yIGlzbmFuKCkKLQkgIER1ZSB0byB0aGUgdXNhZ2Ugb2YgaXNuYW4oKSwgd2hlcmUgYW4gaW1wbGVtZW50YXRpb24gaXMgYWRkZWQgaW50bwotCSAgZ3N0L21hdGgtY29tcGF0LmguIEZpeGVzIGJ1aWxkIG9uIFZpc3VhbCBDKysuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5MTEyCi0KLTIwMTItMDYtMjkgMTY6NTI6MzEgKzA4MDAgIENodW4td2VpIEZhbiA8ZmFuY2h1bndlaUBzcmMuZ25vbWUub3JnPgotCi0JKiBnc3QvbWF0aC1jb21wYXQuaDoKLQkgIG1hdGgtY29tcGF0Lmg6IGFkZCBpbXBsZW1lbnRhdGlvbiBmb3IgaXNuYW4oKSBmb3IgVmlzdWFsIEMrKwotCSAgVmlzdWFsIEMrKyBkb2VzIG5vdCBoYXZlIGlzbmFuKCksIHNvIGFkZCBmYWxsYmFjayB0bwotCSAgbWF0aC1jb21wYXQuaCAoY291bGQgdXNlIF9pc25hbigpIGluIHRoaXMgY2FzZSwgYnV0Ci0JICB0aGlzIG1ha2VzIGl0IHdvcmsgZm9yIGFsbCBjYXNlcyB3aGVyZSBpc25hbiBpcyBtaXNzaW5nKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkxMTIKLQotMjAxMi0wNi0yOSAxMDo1NjozNCArMDgwMCAgQ2h1bi13ZWkgRmFuIDxmYW5jaHVud2VpQHNyYy5nbm9tZS5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JICBmZHNpbmsuYzogZml4IEdfT1NfV0lOMzIgI2lmZGVmCi0JICBQb3N0cG9uZSB0aGUgI2lmZGVmIHRvIGEgcG9pbnQgYWZ0ZXIgZ2xpYi5oICh2aWEgZ3N0ZmRzaW5rLmgpIGlzIGluY2x1ZGVkCi0JICBzbyB0aGF0IHRoZSBuZWVkZWQgZGVmaW5lcyBhbmQgaGVhZGVyIGluY2x1ZGVzIGNhbiBiZSBkb25lIGNvcnJlY3RseSwKLQkgIGVzcGVjaWFsbHkgb24gVmlzdWFsIEMrKyBidWlsZHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5MTEyCi0KLTIwMTItMDUtMjcgMjM6MDk6NDMgKzAzMDAgIFJhaW1vIErDpHJ2aSA8cmFpbW8uamFydmlAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkgIHRlc3RzOiBmaXggYnVpbGQgb2YgZGF0ZXRpbWUgdW5pdCB0ZXN0IGluIFdpbmRvd3MKLQkgIEFsc28gaW5jbHVkZSBjb25maWcuaCBmb3IgYWxsIHRoZSAjaWZkZWYgSEFWRV9YWVouCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2OTM1Ci0KLTIwMTItMDYtMjkgMTE6MTk6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGdzdG9iamVjdDogZG9uJ3QgdXNlIGdfc3RyZHVwX3ZhbHVlX2NvbnRlbnRzKCkKLQkgIGdfc3RyZHVwX3ZhbHVlX2NvbnRlbnRzKCkgZG9lcyBzb21lIGV4dHJhIGVzY2FwaW5nLCBwcmV2ZW50aW5nIHVzIGZyb20gdXNpbmcgdGhlCi0JICBvdXRwdXQgb24gdGhlIGNvbnNvbGUgdG8gYmUgdXNlZCBkaXJlY3RseS4KLQotMjAxMi0wNi0yOCAxNDo0MTo0MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgotCSAgZG9jczogZXhwYW5kIGEgYml0IG1vcmUgb24gR1NUX0RFQlVHIGRvY3MKLQotMjAxMi0wNi0yOCAxMTowMjoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVyOiBhZGQgX2FwcGVuZF9yZWdpb24gZnVuY3Rpb24KLQkgIE1ha2UgYSBnc3RfYnVmZmVyX2FwcGVuZF9yZWdpb24oKSBmdW5jdGlvbiB0aGF0IGFsbG93cyB5b3UgdG8gYXBwZW5kIGEgbWVtb3J5Ci0JICByZWdpb24gZnJvbSBvbmUgYnVmZmVyIHRvIGFub3RoZXIuIFRoaXMgaXMgYSBtb3JlIGdlbmVyYWwgdmVyc2lvbiBvZgotCSAgZ3N0X2J1ZmZlcl9hcHBlbmQoKS4KLQotMjAxMi0wNi0yOCAwOTozNjozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBoYW5kbGUgRFRTIGFuZCBQVFMKLQkgIFVzZSBEVFMgYW5kIFBUUyBvZiB0aGUgc3ViY2xhc3MuCi0JICBDYWxjdWxhdGUgUFRTIGZyb20gRFRTIG9uIGtleWZyYW1lcy4KLQotMjAxMi0wNi0yNyAyMzowMToxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JICB0ZXN0czogdGVzdCBkYXRldGltZSBkZXNlcmlhbGlzYXRpb24gYSBiaXQgbW9yZQotCi0yMDEyLTA2LTI3IDIzOjAwOjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkgIGRhdGV0aW1lOiBpZ25vcmUgMCBkYXlzIG9yIG1vbnRocyBpbiBkYXRlcwotCSAgSGFuZGxlIDAgbW9udGhzIG9yIGRheXMgY29ycmVjdGx5IGluIGRhdGUgc3RyaW5ncywgc28gdGhhdAotCSAgMjAxMi0wNi0wMCBpcyBwYXJzZWQgdGhlIHNhbWUgYXMgMjAxMi0wNiwgZm9yIGV4YW1wbGUuCi0KLTIwMTItMDEtMDEgMTY6Mzg6MDggKzAxMDAgIElkYXIgVG9sbGVmc2VuIDxpdG9sbGVmc0BjaXNjby5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIG00L2NoZWNrLWNoZWNrcy5tNDoKLQkgIGJ1aWxkOiBNYWtlIHN1cmUgQUNfSU5DTFVERVNfREVGQVVMVCBpcyB1c2VkCi0JICBXaXRob3V0IHVzaW5nIEFDX0lOQ0xVREVTX0RFRkFVTFQgZXhwbGljaXRseSwKLQkgIGNlcnRhaW4gcGxhdGZvcm1zIHdpbGwgY29tcGxhaW4gdGhhdCB0aGUgaGVhZGVyCi0JICB3YXMgZm91bmQsIGJ1dCBub3QgdXNhYmxlIGJ5IHRoZSBjb21waWxlci4KLQkgIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugb24gU29sYXJpcyB3aGVyZSBjZXJ0YWluCi0JICBoZWFkZXJzIGFyZSBuZWVkZWQgdG8gcHVsbCBpbiBwcm9wZXIgZGVmaW5lcy4KLQkgIEFsc28gdXBncmFkZSB0byBuZXdlciBhdXRvY29uZiBzeW50YXggYW5kIHVzZSBwcm9wZXIgcXVvdGluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjcyOTMKLQotMjAxMi0wNi0yNyAyMDo1Mjo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgdGVzdHM6IGZpeCBidXMgbGVhayBpbiBHc3RCaW4gdGVzdF9zdGF0ZV9jaGFuZ2Vfc2tpcCB0ZXN0Ci0JICBTdGlsbCBub3QgdmFsZ3JpbmQgY2xlYW4gdGhvdWdoLgotCi0yMDEyLTA2LTI3IDE5OjU5OjI5ICswMTAwICBDaHJpc3RvcGhlIEZlcmdlYXUgPHRldWZAZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkgIHBhcnNlOiBlc2NhcGUgXCB3aXRoIGEgXCBhcyB3ZWxsLCBzbyB0aGF0IHdlIGRvbid0IGxvc2UgdGhlIFwgd2hlbiB1bmVzY2FwaW5nCi0JICBJZiB3ZSBoYXZlIGEgZmlsZSBjYWxsZWQgRm9vXEJhci5vZ2csIHRoZXJlIGlzIG5vIHdheSB0byBwYXNzCi0JICB0aGF0IGZpbGVuYW1lIHByb3Blcmx5IHRvIGZpbGVzcmMgaW4gZ3N0X3BhcnNlX2xhdW5jaCgpLCBzaW5jZQotCSAgZ3N0X3BhcnNlX3VuZXNjYXBlKCkgd2lsbCBqdXN0IHVuZXNjYXBlIFx4IHRvIHguCi0JICBOb3QgY2hlcnJ5LXBpY2tpbmcgdGhpcyBpbnRvIDAuMTAgc2luY2UgdGhlcmUgYXJlIGFwcGFyZW50bHkKLQkgIGFwcHMgdGhhdCB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYW5kIHdoaWNoIHdvdWxkIGJyZWFrIGlmCi0JICB3ZSBmaXhlZCBpdCB0aGVyZSB0b28uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczMzE5Ci0KLTIwMTItMDYtMjcgMTY6Mzc6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkgIGVsZW1lbnRmYWN0b3J5OiBhbm5vdGF0ZSBzb21lIG9mIHRoZSB0eXBlIGRlZmluZXMgZm9yIGctaQotCSAgVHlwZSBpcyBub3QgcGlja2VkIHVwIHlldCB0aG91Z2gsIGFuZCB3ZSBzdGlsbCBuZWVkCi0JICB0byBhbm5vdGF0ZSB2YWx1ZXMgZm9yIHRoZSAnc2ltcGxlJyBkZWZpbmVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzkyNQotCi0yMDEyLTA2LTI3IDE0OjQ4OjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JICBjbG9jazogYW5ub3RhdGUgR1NUX0NMT0NLX1RJTUVfTk9ORSB3aXRoIGl0cyB2YWx1ZSBmb3IgZy1pCi0JICBUaGUgdmFsdWUgbm93IGdldHMgcGlja2VkIHVwLCBidXQgaXQgc3RpbGwgdGhpbmtzIHRoZSB0eXBlCi0JICBpcyBhICdnaW50Jy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzg5MjgKLQotMjAxMi0wNi0yNyAxMzoxOToyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RkYXRldGltZS5jOgotCSAgdGVzdHM6IGFkZCBzb21lIGRhdGV0aW1lIHNlcmlhbGlzYXRpb24vZGVzZXJpYWxpc2F0aW9uIHRlc3RzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4MDMxCi0KLTIwMTItMDYtMjcgMTM6MTY6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBkYXRldGltZTogZml4IGNvbXBhcmUgZnVuY3Rpb24KLQkgIFRha2UgaW50byBhY2NvdW50IHRoYXQgbm90IGFsbCBmaWVsZHMgbWlnaHQgYmUgdmFsaWQgKHRob3VnaCB0aGV5Ci0JICBhcmUgdmFsaWQgaW4gdGhlIEdEYXRlVGltZSBzdHJ1Y3R1cmUpLiBCdXQgd2Ugc2hvdWxkIGp1c3QgcmV0dXJuCi0JICB1bm9yZGVyZWQgaWYgdGhlIHNldCBmaWVsZHMgZG9uJ3QgbWF0Y2guIEFsc28sIGRvbid0IGNoZWNrCi0JICBtaWNyb3NlY29uZHMgd2hlbiBjb21wYXJpbmcgZGF0ZXRpbWVzLCBzaW5jZSB3ZSBkb24ndCBzZXJpYWxpc2UKLQkgIHRob3NlIGJ5IGRlZmF1bHQgaWYgdGhleSdyZSBhdmFpbGFibGUuIFRoaXMgZW5zdXJlcyBkYXRlIHRpbWVzIGFyZQotCSAgc3RpbGwgcmVnYXJkZWQgYXMgZXF1YWwgYWZ0ZXIgc2VyaWFsaXNpbmcrZGVzZXJpYWxpc2luZy4KLQotMjAxMi0wNi0xOCAwODowNjo0OSArMDIwMCAgT2xla3NpaiBSZW1wZWwgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGRhdGV0aW1lLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRhdGV0aW1lOiBhZGQgc2VyaWFsaXNhdGlvbiB0byBhbmQgZGVzZXJpYWxpc2F0aW9uIGZyb20gSVNPIDg2MDEgc3RyaW5ncwotCSAgU29tZSB0YWcgcGFyc2VycyBhbmQgd3JpdGVycyB1c2Ugc2FtZSBkYXRldGltZSBmb3JtYXQgYmFzZWQgb24gSVNPIDg2MDEuCi0JICBXZSBjYW4gcmVkdWNlIHNvbWUgY29kZSBieSBjcmVhdGluZyBzb21lIGdlbmVyYWwgZnVuY3Rpb25zIGZvciBpdC4KLQkgIEFQSTogZ3N0X2RhdGVfdGltZV90b19pc284NjAxX3N0cmluZygpCi0JICBBUEk6IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODAzMQotCi0yMDEyLTA2LTA3IDExOjMwOjQ4ICswMTAwICBMaW9uZWwgTGFuZHdlcmxpbiA8bGxhbmR3ZXJsaW5AZ21haWwuY29tPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL01ha2VmaWxlLmFtOgotCSAgY29uZmlndXJlOiBhZGQgLS1kaXNhYmxlLXRvb2xzIGFuZCAtLWRpc2FibGUtYmVuY2htYXJrcyBvcHRpb25zCi0JICBBZGQgb3B0aW9uIHRvIGF2b2lkIGJ1aWxkIGJpbmFyaWVzLiBXaGVuIGJ1aWxkaW5nIGZvciBwbGF0Zm9ybXMgbGlrZQotCSAgYW5kcm9pZCwgeW91IG1pZ2h0IHdhbnQgdG8gbm90IGxpbmsgYW55ICJmaW5hbCIgYmluYXJ5LCBtb3N0bHkgYmVjYXVzZQotCSAgaXQgcmVxdWlyZXMgc3BlY2lhbCBsaW5rIGZsYWdzIG9yIG90aGVyIHBhcnRzIG9mIGNvZGUgdGhhdCBhcmVuJ3QKLQkgIGluIHRoZSBDIGxpYnJhcnkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NjIxCi0KLTIwMTItMDYtMjYgMjA6NDE6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYzoKLQkgIHRvYzogcHV0IHRvYyBkaXJlY3RseSBpbnRvIGV2ZW50L21lc3NhZ2UvcXVlcnkgc3RydWN0dXJlCi0JICBOb3cgdGhhdCBUT0NzIGFyZSByZWZjb3VudGVkIGFuZCBoYXZlIGEgR1R5cGUsIHdlIGNhbiBqdXN0Ci0JICBzdHVmZiBhIHJlZiBvZiB0aGUgVE9DIGRpcmVjdGx5IGludG8gdGhlIHZhcmlvdXMgdG9jCi0JICBldmVudC9tZXNzYWdlL3F1ZXJ5IHN0cnVjdHVyZXMgYW5kIGdldCByaWQgb2YgbG90cyBvZgotCSAgY3JhY2t0YXN0aWMgR3N0U3RydWN0dXJlIDwtPiBHc3RUb2Mgc2VyaWFsaXNhdGlvbiBhbmQKLQkgIGRlc2VyaWFsaXNhdGlvbiBjb2RlLiBXZSBsb3NlIHNvbWUgVE9DIHNhbml0eSBjaGVja2luZwotCSAgaW4gdGhlIHByb2Nlc3MsIGJ1dCB0aGF0IHNob3VsZCByZWFsbHkgYmUgZG9uZSB3aGVuCi0JICBpdCdzIGJlaW5nIGNyZWF0ZWQgYW55d2F5LgotCi0yMDEyLTA2LTI2IDE4OjIyOjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgUmV2ZXJ0ICJidXM6IHNraXAgZ3N0X2J1c19jcmVhdGVfd2F0Y2ggYXMgR1NvdXJjZSBpcyBub3QgaW50cm9zcGVjdGFibGUiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDkzMGUzNmE4OWJjNWMyYTBmMmU0YWI3YTczYmZhNjMwYzFlMDMzNmEuCi0JICBUaGlzIHNob3VsZG4ndCBoYXZlIGJlZW4gcHVzaGVkLCBzaW5jZSBHU291cmNlIGlzIG5vdyBoYW5kbGVkCi0JICAoaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzcyNSkKLQotMjAxMS0wOC0yOSAxMzo1NzowMyAtMDMwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogc2tpcCBnc3RfYnVzX2NyZWF0ZV93YXRjaCBhcyBHU291cmNlIGlzIG5vdCBpbnRyb3NwZWN0YWJsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY0MAotCi0yMDEyLTA2LTI2IDE3OjM1OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIGRvY3M6IHNvbWUgbW9yZSBhZGRpdGlvbnMgdG8gdGhlIHBvcnRpbmctdG8tMC4xMSBndWlkZQotCi0yMDEyLTA2LTI2IDE3OjI3OjMxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkqIHRvb2xzL2dzdC10eXBlZmluZC5jOgotCSogdG9vbHMvdG9vbHMuaDoKLQkgIHRvb2xzOiBtaW5vciBjbGVhbi11cAotCSAgR2V0IHJpZCBvZiBzdXBlcmZsdW91cyBhcmd1bWVudC4KLQotMjAxMi0wNi0yNiAxNzowNDowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JKiB0b29scy9nc3QtdHlwZWZpbmQuYzoKLQkqIHRvb2xzL3Rvb2xzLmg6Ci0JICB0b29sczogcmVtb3ZlIHVzZWxlc3MgZ19zZXRfcHJnbmFtZSgpIHdyYXBwZXIKLQotMjAxMi0wNi0yNiAxNjo1NTozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIHRvb2xzOiBwb2ludCBwZW9wbGUgdG8gcmlnaHQgYmluYXJ5IHdoZW4gYSBjcmFzaCBoYXBwZW5zCi0JICAiZ3N0LWxhdW5jaCIgaXMgdGhlIDAuMTAgd3JhcHBlciBzY3JpcHQsIHVzaW5nIHRoYXQgd2l0aAotCSAgZ2RiIGlzIG5vdCBnb2luZyB0byB5aWVsZCBncmVhdCByZXN1bHRzLgotCi0yMDEyLTA2LTI2IDE2OjQyOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBidW1wIEdMaWIgcmVxdWlyZW1lbnQgdG8gbm93LXJlbGVhc2VkIHN0YWJsZSB2ZXJzaW9uCi0KLTIwMTItMDYtMjYgMTY6NDI6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IHJlbW92ZSBzb21lIGRlYWQgY29kZSBmb3Igb2xkIEdMaWIgdmVyc2lvbnMKLQotMjAxMi0wNi0yNSAyMzoxNzozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIGdzdC9nc3R0b2MuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdG9jOiBhZGQgbW9yZSBlbnRyeSB0eXBlcwotCSAgTWFrZSBlbnRyeSB0eXBlcyBsZXNzIGFic3RyYWN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODc0MgotCi0yMDEyLTA2LTE3IDEyOjQ4OjA0ICsxMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBhIGNvdXBsZSBvZiBub3RlcyBmb3IgdGhlIDAuMTEgcG9ydGluZyBndWlkZQotCi0yMDEyLTA2LTI2IDA5OjUxOjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWluaW9iamVjdDogYWRkIHN0ZWFsX3FkYXRhCi0JICBSZXdvcmsgdGhlIHFkYXRhIGNvZGUgYSBsaXR0bGUKLQotMjAxMi0wNi0yNSAxOTo1Mjo0NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0b2NzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0b2NzZXR0ZXIuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2NzZXR0ZXIuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdG9jc2V0dGVyOiBjbGVhbiB1cCBhbmQgdXBkYXRlIEFQSSBmb3IgcmVmY291bnRlZCBUT0NzCi0JICBMZXQncyBrZWVwIGl0IHNpbXBsZSBmb3Igbm93OgotCSAgZ3N0X3RvY19zZXR0ZXJfcmVzZXRfdG9jKCkgLT4gZ3N0X3RvY19zZXR0ZXJfcmVzZXQoKQotCSAgZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvY19jb3B5KCkgLT4gcmVtb3ZlZAotCSAgZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvYygpIC0+IHJldHVybnMgYSByZWYgbm93Ci0JICBnc3RfdG9jX3NldHRlcl9nZXRfdG9jX2VudHJ5X2NvcHkoKSAtPiByZW1vdmVkLAotCSAgdXNlIFRPQyBmdW5jdGlvbnMgaW5zdGVhZAotCSAgZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvY19lbnRyeSgpIC0+IHJlbW92ZWQsCi0JICB1c2UgVE9DIGZ1bmN0aW9ucyBpbnN0ZWFkCi0JICBnc3RfdG9jX3NldHRlcl9hZGRfdG9jX2VudHJ5KCkgLT4gcmVtb3ZlZCwKLQkgIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggKHJlZmNvdW50LWRlcGVuZGVudCkKLQkgIHdyaXRhYmlsaXR5IG9mIFRPQzsgdXNlIFRPQyBmdW5jdGlvbnMgaW5zdGVhZAotCi0yMDEyLTA2LTI1IDA5OjMyOjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGltcHJvdmUgZG9jcwotCSAgTWVudGlvbiB0aGF0IGN1c3RvbSBhbGxvY2F0b3IgZnVuY3Rpb25zIGNhbiBwYXNzIHdoYXRldmVyIHRoZXkgd2FudCB0byB0aGUKLQkgIHVzZXJfZGF0YS4KLQotMjAxMi0wNC0wNiAxODowMDozMyArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSAgdGFnc2V0dGVyOiB1c2UgR19ERUZJTkVfSU5URVJGQUNFXyogbWFjcm8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzM2NDEKLQotMjAxMi0wNC0wNiAxNzo1OTozNSArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHRvY3NldHRlci5jOgotCSogZ3N0L2dzdHRvY3NldHRlci5oOgotCSAgdG9jc2V0dGVyOiB1c2UgR19ERUZJTkVfSU5URVJGQUNFXyogbWFjcm8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzM2NDEKLQotMjAxMi0wNi0yNSAwMDoxMDo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC10b2MudHh0OgotCSAgZG9jczogdXBkYXRlIGRlc2lnbiBkb2NzIGZvciBUT0MgQVBJIGNoYW5nZXMgdG9vCi0KLTIwMTItMDYtMjQgMjA6MTA6MzQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3R0b2NzZXR0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2NzZXR0ZXIuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIHRvY3NldHRlciwgZ3N0LWxhdW5jaCwgdGVzdHM6IHVwZGF0ZSBmb3IgR3N0VG9jIEFQSSBjaGFuZ2VzCi0KLTIwMTItMDYtMjQgMjA6MDg6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0dG9jLmM6Ci0JKiBnc3QvZ3N0dG9jLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHRvYzogbWFrZSBHc3RUb2MgYW5kIEdzdFRvY0VudHJ5IG1pbmkgb2JqZWN0cwotCSAgQmVjYXVzZSB3ZSBjYW4sIGFuZCBpbiBvcmRlciB0byBtYWtlIHRoZW0gcmVmY291bnRlZC4KLQotMjAxMi0wNi0yMyAyMTo0Mjo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ2xpc3Q6IGZpeCBjb25mdXNpbmcgbG9nIG1lc3NhZ2UKLQotMjAxMi0wNi0yMyAyMTozNTozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogZml4IGludDY0IC0gaW50NjQgcmFuZ2UgaW50ZXJzZWN0aW9uIG9uIGJpZyBlbmRpYW4gc3lzdGVtcwotCSAgV29ya3MgYmV0dGVyIGlmIHdlIHVzZSB0aGUgdl9pbnQ2NCBmaWVsZCBvZiB0aGUgR1ZhbHVlIGluc3RlYWQgb2Ygdl9pbnQuCi0KLTIwMTItMDYtMjMgMTk6NTY6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RzYW1wbGUuYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICBtaW5pb2JqZWN0czogcGFzcyBjb3B5LCBkaXNwb3NlIGFuZCBmcmVlIGZ1bmN0aW9uIHRvIGdzdF9taW5pX29iamVjdF9pbml0KCkKLQkgIFNvIG1pbmkgb2JqZWN0cyBkb24ndCBoYXZlIHRvIHBva2UgaW50byB0aGUgR3N0TWluaU9iamVjdCBwYXJ0Ci0JICBvZiB0aGUgc3RydWN0dXJlLiBTYXZlcyBsaW5lcyBvZiBjb2RlLCBhbmQgc2VlbXMgc2xpZ2h0bHkgY2xlYW5lci4KLQkgIFdlIGRvbid0IGhhdmUgcHJvcGVyIE9PIGhpZXJhcmNoaWVzIG9yIG1ldGhvZHMgaGVyZSBhZnRlciBhbGwuCi0KLTIwMTItMDYtMjMgMTc6MDU6MDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdsaXN0OiByZW1vdmUgc29tZSBvdXRkYXRlZCBGSVhNRXMgYW5kIGNvbW1lbnRzCi0KLTIwMTItMDYtMjMgMTc6MDQ6NTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3RzYW1wbGUuYzoKLQkgIHNhbXBsZTogc29tZSBtb3JlIGctaSBhbm5vdGF0aW9ucwotCi0yMDEyLTA2LTIzIDE2OjU5OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkgIHNhbXBsZTogYWRkIGNvbXBhcmUgZnVuY3Rpb24gZm9yIEdzdFNhbXBsZQotCSAgU2hvdWxkIG1ha2UgZ3N0X3RhZ19saXN0X2lzX2VxdWFsKCkgd29yayBwcm9wZXJseSB3aXRoIGltYWdlIHRhZ3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcyNjM3Ci0KLTIwMTItMDYtMjMgMTY6MzA6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IGZpeCBidWZmZXIgY29tcGFyZSBmdW5jdGlvbgotCi0yMDEyLTA2LTIzIDE0OjQxOjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1NDY3Ci0KLTIwMTItMDYtMjMgMTQ6NDE6MTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZTogdXBkYXRlIGZvciBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkgY2hhbmdlCi0KLTIwMTItMDYtMjMgMTQ6NDA6MTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkgIHVyaTogYWRkIGVycm9yIGFyZ3VtZW50IHRvIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkoKQotCSAgU28gY2FsbGVycyBjYW4gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXJlIG5vdCBiZWluZyBhCi0JICBoYW5kbGVyIGZvciB0aGUgcHJvdG9jb2wsIGFuZCB0aGVtIG5vdCBhY2NlcHRpbmcgdGhlIFVSSQotCSAgZm9yIHNvbWUgcmVhc29uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NTQ2NwotCi0yMDEyLTA2LTIzIDEyOjM3OjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiBhbm5vdGF0ZSBHc3RNYXBJbmZvIGRhdGEgYXMgYXJyYXkgZm9yIGctaQotCi0yMDEyLTA2LTIwIDEyOjUzOjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IHJlbW92ZSBwb2ludGxlc3MgZ2V0X3N0YXRlKCkgaW4gZ3N0LWxhdW5jaAotCSAgU3RhdGUgY2hhbmdlcyB0byBOVUxMIHN0YXRlIGFyZSBhbHdheXMgc3luYy4KLQotMjAxMi0wNi0yMSAwMToyODo0MyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IGF2b2lkIG5vdGlmeS10YWdzIGhvbGRpbmcgbG9jawotCSAgdW5sb2NrIGJlZm9yZSBpc3N1aW5nIHRoaXMgbm90aWZpY2F0aW9uIHRvIHByZXZlbnQKLQkgIGRlYWRsb2NrcyB3aGVuIG90aGVyIGVsZW1lbnRzIHJlYWN0cyB0byBuZXcgdGFncy4KLQkgIEZpeGVzICM2NzgyMjAKLQotMjAxMi0wNi0xOCAxNjo1NDoyOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogYWRkIGdzdC1wLWJhZCBnc3QtbGlicyB0byB0aGUgcGF0aAotCSAgTWFrZXMgdmlkZW9wYXJzZXJzIGFuZCBjYW1lcmFiaW5zIGZyb20gYmFkIHVzYWJsZSBmcm9tIGFuIHVuaW5zdGFsbGVkCi0JICBlbnZpcm9ubWVudCBhdCBvc3gKLQotMjAxMi0wNi0yMCAxMzoyODowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogYWRkIGRlc3Ryb3kgbm90aWZ5IHRvIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKCkKLQotMjAxMi0wNi0yMCAxMzoyNzozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBpbXByb3ZlIGludHJvc3BlY3Rpb24gYW5ub3RhdGlvbgotCi0yMDEyLTA2LTIwIDEyOjI5OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0YnVzLmg6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3J0cG9vbC10ZXN0LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3N0cmVhbS1zdGF0dXMuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGJ1czogYWRkIEdEZXN0cm95Tm90aWZ5IHRvIHNldF9zeW5jX2hhbmRsZXIoKQotCi0yMDEyLTA2LTIwIDEyOjA2OjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZQotCi0yMDEyLTA2LTIwIDExOjU5OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrLmg6Ci0JICB0YXNrOiBhZGQgc2VwYXJhdGUgbWV0aG9kcyB0byBhZGQgZW50ZXIvbGVhdmUgY2FsbGJhY2sKLQkgIFJlbW92ZSB0aGUgc3RydWN0dXJlIG9mIGNhbGxiYWNrcyBhbmQgcmVwbGFjZSB3aXRoIHNlcGFyYXRlIG1ldGhvZHMgdG8gcmVnaXN0ZXIKLQkgIGVhY2ggY2FsbGJhY2suIFRoaXMgaXMgbXVjaCBtb3JlIGJpbmRpbmcgZnJpZW5kbHkuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3ODk4Ci0KLTIwMTItMDYtMjAgMTA6MzE6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFzay5jOgotCSAgdGFzazogYWRkIEdEZXN0cm95Tm90aWZ5IHRvIF9uZXcKLQkgIEFkZCBhIEdEZXN0cm95Tm90aWZ5IHRvIHRoZSB1c2VyX2RhdGEgd2UgcGFzcyB0byBnc3RfdGFza19uZXcoKQotCSAgQ2hhbmdlIGdzdF9wYWRfc3RhcnRfdGFzaygpIHRvIGFsc28gdGFrZSB0aGUgbm90aWZ5Ci0KLTIwMTItMDYtMjAgMDk6NTg6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNsb2NrOiByZW1vdmUgX2Z1bGwgdmVyc2lvbgotCSAgUmVuYW1lIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwoKSB0byBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYygpCi0JICBhbmQgcmVtb3ZlIHRoZSBvbGQgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKSB2ZXJzaW9uLgotCi0yMDEyLTA2LTIwIDA5OjIyOjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaDoKLQkgIG5ldHRpbWVwYWNrZXQ6IG1ha2UgYm94ZWQKLQotMjAxMi0wNi0xOSAxOTo1NTozMCAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6Ci0JICBuZXQ6IGZpeCBzb21lIGFyZ3VtZW50IG5hbWVzIGluIGRvY3VtZW50YXRpb24KLQotMjAxMi0wNi0xOSAxOTo1NTowMiAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oOgotCSAgY29udHJvbGxlcjogYXNzb3J0ZWQgbWlub3IgaW50cm9zcGVjdGlvbiBmaXhlcwotCi0yMDEyLTA2LTE5IDE5OjUzOjU0IC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGNoZWNrOiBhZGQgc29tZSBtaXNzaW5nIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBhbm5vdGF0aW9ucwotCi0yMDEyLTA2LTE5IDE4OjQxOjA0IC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgotCSAgYmFzZTogYWRkIHNvbWUgbWlzc2luZyBpbnRyb3NwZWN0aW9uIGFubm90YXRpb25zCi0KLTIwMTItMDYtMTkgMTc6Mzc6NTkgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AY29ldXMtZ3JvdXAuY29tPgotCi0JKiBnc3QvZ3N0dGFza3Bvb2wuYzoKLQkgIHRhc2sgcG9vbDogc2V0IHNjb3BlIG9mIGdzdF90YXNrX3Bvb2xfcHVzaCBjYWxsYmFjayB0byBhc3luYwotCi0yMDEyLTA2LTE5IDE3OjMzOjQ1IC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSAgaW50cm9zcGVjdGlvbjogYWRkIG1pc3NpbmcgcmV0dXJuIHZhbHVlIGFubm90YXRpb25zCi0KLTIwMTItMDYtMTkgMTY6MDk6MTAgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AY29ldXMtZ3JvdXAuY29tPgotCi0JKiBnc3QvZ3N0YnVzLmg6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3R0YXNrLmg6Ci0JKiBnc3QvZ3N0dGFza3Bvb2wuaDoKLQkqIGdzdC9nc3R0eXBlZmluZC5oOgotCSAgaW50cm9zcGVjdGlvbjogcmVuYW1lIHNvbWUgImRhdGEiIGFyZ3VtZW50cyB0byAidXNlcl9kYXRhIgotCSAgR09iamVjdCBJbnRyb3NwZWN0aW9uIHdpbGwgYXV0b21hdGljYWxseSB0cmVhdCAidXNlcl9kYXRhIiBhcmd1bWVudHMKLQkgIGFzIGNsb3N1cmUgZGF0YS4KLQotMjAxMi0wNi0xOSAxNjowODo0NiAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGdzdC9nc3R0b2MuaDoKLQkgIHRvYzogYWRkIHNvbWUgbWlzc2luZyBlbGVtZW50LXR5cGUgYW5ub3RhdGlvbnMKLQotMjAxMi0wNi0xOSAxNjowNjo0OSAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXIgcG9vbDogcHV0IEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zIHR5cGVkZWYgYmVmb3JlIHN0cnVjdAotCSAgV29ya3MgYXJvdW5kIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01ODE1MjUKLQotMjAxMi0wNi0xOSAxNjoxNDo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHByZXJvbGwgYW5kIHN5bmMgb24gZ2FwIGV2ZW50cwotCi0yMDEyLTA2LTE5IDE2OjA4OjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogcmVvcmdhbml6ZSB0aGUgY29kZSBhIGxpdHRsZQotCSAgTW92ZSB0aGUgY29kZSB0byBnZXQgdGhlIHN5bmMgdGltZXMgdG9nZXRoZXIuCi0KLTIwMTItMDYtMTkgMTQ6MzA6MzcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IEZpeCBkb2NzIHR5cG8KLQotMjAxMi0wNi0xOSAxNDowNToyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JICBjbG9jazogYXNzZXJ0IGFib3V0IHRpbWVzdGFtcCBvdmVyZmxvd3MKLQkgIEFzc2VydCB3aGVuIGNvbnZlcnRpbmcgdG8gdGltZXZhbCBhbmQgdGltZXNwZWMgYWJvdXQgb3ZlcmZsb3dzLiBUaGlzIGNhbiBoYXBwZW4KLQkgIG9uIHBsYXRmb3JtcyB3aXRoIDMyYml0cyBsb25nLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODE4MQotCi0yMDEyLTA2LTE5IDEwOjEzOjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHJlbW92ZSBnc3RfcGFkX3NldF9jYXBzCi0KLTIwMTItMDYtMTkgMTA6MzI6MTAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IE9ubHkgcHJveHkgdGhlIGFsbG9jYXRpb24gcXVlcnkgZm9yIHRoZSBhY3RpdmUgcGFkIGFuZCBzZW5kIHJlY29uZmlndXJlIGV2ZW50cyB0byB0aGUgb2xkL25ldyBwYWQgd2hlbiBzd2l0Y2hpbmcgcGFkcwotCi0yMDEyLTA2LTE4IDE2OjE0OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBtb3ZlIGdzdF9wYWRfc2V0X2NhcHMoKSB0byBjb21wYXQKLQkgIFdlIHdhbnQgY29kZSB0byBleHBsaWNpdGx5IHNlbmQgYSBjYXBzIGV2ZW50IGluc3RlYWQuCi0KLTIwMTItMDYtMTggMTY6MTM6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IGZpeCBzb21lIGRvY3MKLQotMjAxMi0wNi0xOCAxNTo1MjowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIGRvY3M6IHNtYWxsIGRvYyBmaXgKLQotMjAxMi0wNi0xOCAxNToyODoyMCArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2Vicm5AYXhpcy5jb20+Ci0KLQkqIGdzdC9nc3RjbG9jay5oOgotCSAgY2xvY2s6IGZpeCBjb21waWxlciB3YXJuaW5nCi0JICBDYXN0IHRvIHRoZSByaWdodCB2YWx1ZSwgaXQgbWlnaHQgaW5kZWVkIG92ZXJmbG93IGJ1dCB3ZSB3YW50IHRoZSBjb21waWxlciB0bwotCSAgaWdub3JlIHRoYXQuCi0KLTIwMTItMDYtMTggMTU6MjI6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgbWluaW9iamVjdDogaGlkZSBxZGF0YSBhcnJheSBsYXlvdXQKLQotMjAxMi0wNi0xOCAxNToyMTozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKLQkgIGRvY3M6IGNsYXJpZnkgcWRhdGEgd3J0IHRvIG1ldGFkYXRhCi0KLTIwMTItMDYtMTggMTU6MjE6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogdXBkYXRlIGZvciBuZXcgYXBpCi0KLTIwMTItMDYtMTUgMTY6NTY6NDYgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AY29ldXMtZ3JvdXAuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgotCSAgaW50cm9zcGVjdGlvbjogYXNzb3J0ZWQgaW50cm9zcGVjdGlvbiBhbmQgZG9jdW1lbnRhdGlvbiBmaXhlcyBpbiBiYXNlCi0KLTIwMTItMDYtMTUgMTg6MzU6MDUgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AY29ldXMtZ3JvdXAuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGFkZCBtaXNzaW5nIGVsZW1lbnQtdHlwZSBhbm5vdGF0aW9ucwotCi0yMDEyLTA2LTE1IDE2OjE0OjQ5IC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6Ci0JKiBnc3QvZ3N0YXRvbWljcXVldWUuaDoKLQkgIGF0b21pYyBxdWV1ZTogcmVnaXN0ZXIgYXMgYm94ZWQgdHlwZQotCi0yMDEyLTA2LTE1IDE2OjQzOjMwIC0wNzAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkqIGdzdC9nc3RjaGlsZHByb3h5Lmg6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5jOgotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmg6Ci0JKiBnc3QvZ3N0Y29udHJvbHNvdXJjZS5jOgotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGludHJvc3BlY3Rpb246IGFzc29ydGVkIGludHJvc3BlY3Rpb24gYW5kIGRvY3VtZW50YXRpb24gZml4ZXMKLQkgIFRoZXNlIGNoYW5nZXMgYXJlIHRvIGNsZWFuIHVwIHN5bnRheCBpc3N1ZXMgc3VjaCBhcyBtaXNzaW5nIGNvbG9ucywKLQkgIG1pc3Npbmcgc3BhY2VzLCBldGMuLCBhbmQgbWlub3IgaXNzdWVzIHN1Y2ggYXMgYXJndW1lbnQgbmFtZXMgaW4KLQkgIGhlYWRlcnMgbm90IG1hdGNoaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQvb3IgZG9jdW1lbnRhdGlvbi4KLQotMjAxMi0wNi0xNSAxNDo1MDo0OCAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGdzdC9nc3R0b2NzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0b2NzZXR0ZXIuaDoKLQkgIHRvYyBzZXR0ZXI6IGNoYW5nZSBHc3RUb2NTZXR0ZXJJRmFjZSB0byBHc3RUb2NTZXR0ZXJJbnRlcmZhY2UKLQkgIFdpdGhvdXQgdGhpcyBHT2JqZWN0IEludHJvc3BlY3Rpb24gZG9lcyBub3QgcmVjb2duaXplIHRoZSBjb25uZWN0aW9uCi0JICB0byBHc3RUb2NTZXR0ZXIuCi0KLTIwMTItMDYtMTggMTI6MTU6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiB1cGRhdGUgZG9jcyBhIGxpdHRsZQotCi0yMDEyLTA2LTE4IDExOjM2OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBiYXNlc2luazogd2FpdF9lb3MoKSAtPiB3YWl0KCkKLQkgIFJlbmFtZSBnc3RfYmFzZV9zaW5rX3dhaXRfZW9zKCkgdG8gZ3N0X2Jhc2Vfc2lua193YWl0KCkgdG8gYXZvaWQgY29uZnVzaW9uIGFuZAotCSAgaW50cm9zcGVjdGlvbiBwcm9ibGVtcyB3aXRoIHRoZSA6OndhaXRfZW9zIHZtZXRob2QuIEFsc28gdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQKLQkgIHRvIHdhaXQgZm9yIG90aGVyIHRoaW5ncyB0aGFuIEVPUy4gVXBkYXRlIHRoZSBkb2NzIGEgbGl0dGxlLgotCi0yMDEyLTA2LTE4IDEwOjEzOjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkgIGJ1ZmZlcnBvb2w6Y2hlY2sgY2FwcyBhcmd1bWVudAotCSAgQ2FwcyBzaG91bGQgYmUgTlVMTCBvciBmaXhlZCB3aGVuIGNvbmZpZ3VyZWQgaW4gYSBidWZmZXJwb29sCi0KLTIwMTItMDYtMTUgMTc6MDE6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBOVUxMIGlzIG5vdCBhIHZhbGlkIGNhcHMgYW55bW9yZQotCi0yMDEyLTA2LTE1IDE1OjQ4OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6Ci0JICBkb2NzOiByZXZpZXcgdGhlIGJ1ZmZlcmluZyBkb2NzCi0KLTIwMTItMDYtMTUgMTU6MzY6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBwZXJjZW50IHNjYWxpbmcKLQkgIFVzZSBfc2NhbGUgZnVuY3Rpb25zIHRvIHNjYWxlIHRoZSBwZXJjZW50IHZhbHVlcy4KLQkgIENvcnJlY3RseSBzY2FsZSB0aGUgcGVyY2VudCB2YWx1ZXMgaW4gdGhlIGJ1ZmZlcmluZyByYW5nZXMuCi0KLTIwMTItMDYtMTUgMTQ6NTQ6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogYXZvaWQgZmx1c2ggd2hlbiBzdGFydGluZwotCSAgV2hlbiB3ZSBhcmUgZG9pbmcgdGhlIGluaXRpYWwgc2VlayBpbiBzdGFydHVwLCBhdm9pZCBkb2luZyBhIGZsdXNoCi0JICAoYW5kIHVubG9jaykgYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIHRhc2sgaXMgbm90IHN0YXJ0ZWQgeWV0LgotCi0yMDEyLTA2LTE1IDEyOjU4OjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZQotCi0yMDEyLTA2LTE1IDEyOjU1OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIGRvY3M6IGltcHJvdmUgQVBJIGRvY3MKLQotMjAxMi0wNi0xNSAwMDowMDoxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkgIGFsbGxvY2F0b3I6IG5vIG5lZWQgdG8gc3RvcmUgc3RydWN0dXJlIHNpemUgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUKLQotMjAxMi0wNi0xNCAyMzo1NDoyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IG5vIG5lZWQgdG8gc3RvcmUgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbnNpZGUgdGhlIHN0cnVjdHVyZQotCi0yMDEyLTA2LTE0IDIzOjUyOjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudDogbm8gbmVlZCB0byBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluc2lkZSB0aGUgc3RydWN0dXJlCi0KLTIwMTItMDYtMTQgMjM6NDk6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgYnVmZmVybGlzdDogbm8gbmVlZCB0byBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluc2lkZSB0aGUgc3RydWN0dXJlCi0KLTIwMTItMDYtMTQgMjM6NDU6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2Fwczogbm8gbmVlZCB0byBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgY2FwcyBzdHJ1Y3R1cmUgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUKLQotMjAxMi0wNi0xNCAyMzo0MTo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBubyBuZWVkIHRvIHN0b3JlIHNpemUgb2YgdGhlIG1lc3NhZ2Ugc3RydWN0dXJlIGluc2lkZSB0aGUgc3RydWN0dXJlCi0KLTIwMTItMDYtMTQgMjM6Mzg6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c2FtcGxlLmM6Ci0JICBzYW1wbGU6IG5vIG5lZWQgdG8gc3RvcmUgdGhlIHNpemUgb2YgdGhlIHNhbXBsZSBzdHJ1Y3R1cmUgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUKLQotMjAxMi0wNi0xNCAyMzozNjoyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdsaXN0OiBubyBuZWVkIHRvIHN0b3JlIHRoZSBzaXplIG9mIHRoZSB0YWcgbGlzdCBzdHJ1Y3R1cmUgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUKLQotMjAxMi0wNi0xNSAxMToyNDo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IGV4cGFuZCBkb2NzIGEgbGl0dGxlCi0JICBBZGQgYmx1cmIgYWJvdXQgcWRhdGEgYW5kIHdlYWsgcmVmcy4KLQotMjAxMi0wNi0xNSAxMDo0NDoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1pbmlvYmplY3Q6IGFkZCBxZGF0YQotCSAgS2VlcCB0cmFjayBvZiBxZGF0YSBmb3IgbWluaW9iamVjdHMuIFJldXNlIHRoZSB3ZWFrIHJlZiBhcnJheSBmb3IgdGhpcyBiZWNhdXNlCi0JICB3ZSBjYW4uCi0KLTIwMTItMDYtMTUgMTA6NTY6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiBmaXggZXJyb3IgaW4gdGhlIHdlYWsgcmVmIGhhbmRsaW5nCi0JICBXaGVuIDIgd2VhayByZWZzIGFyZSBhZGRlZCwgdGhlIGFycmF5IGlzIG5vdCByZXNpemVkIGJpZyBlbm91Z2guCi0JICBTaW1wbGlmeSB0aGUgd2VhayByZWYgaGFuZGxpbmcgY29kZS4KLQkgIEZyZWUgbWVtb3J5IHdoZW4gd2UgcmVtb3ZlIGFsbCB3ZWFrIHJlZnMuCi0JICBBbGxvdyBpbnN0YWxsaW5nIHRoZSBzYW1lIHdlYWsgcmVmIG11bHRpcGxlIHRpbWVzLCBsaWtlIGluIGdvYmplY3QuCi0KLTIwMTItMDYtMTQgMTc6MTE6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RzYW1wbGUuYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICBtaW5pb2JqZWN0OiByZW1vdmUgdGhlIHNpemUgZmllbGQKLQkgIFRoZSBzaXplIGZpZWxkIGlzIHVzZWQgYnkgc3ViY2xhc3NlcyB0byBzdG9yZSB0aGUgdG90YWwgYWxsb2NhdGVkIHNpemUgb2YgdGhlCi0JICBtZW1vcnkgZm9yIHRoaXMgbWluaW9iamVjdC4gQmVjYXVzZSBtaW5pb2JqZWN0IGRvZXNuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIHdpdGgKLQkgIHRoaXMgZmllbGQgd2UgY2FuIG1vdmUgaXQgdG8gdGhlIHN1YmNsYXNzZXMuCi0KLTIwMTItMDYtMTQgMTY6MzA6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVtb3J5LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1lbW9yeTogbWFrZSBHc3RNZW1vcnkgYSBtaW5pb2JqZWN0Ci0KLTIwMTItMDYtMTQgMTY6Mjc6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0cmFjZS5jOgotCSAgdHJhY2U6IGFsd2F5cyBwcmludCBtaW5pb2JqZWN0IHJlZmNvdW50Ci0KLTIwMTItMDYtMTQgMTU6NDA6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogZml4IGNvcHkgZnVuY3Rpb24KLQkgIE1ha2UgdGhlIGNvcHkgZnVuY3Rpb24gbWFwIHRvIHJlZiBiZWNhdXNlIHdlIGNhbid0IHNhZmVseSBjb3B5IHRoZSB1c2VyX2RhdGEuCi0KLTIwMTItMDYtMTQgMTU6MzM6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWVtb3J5OiBtYWtlIEdzdEFsbG9jYXRvciBhIG1pbmlvYmplY3QKLQotMjAxMi0wNi0xMiAxMzoyNjozNSArMDIwMCAgRGF2aWQgU3ZlbnNzb24gRm9ycyA8ZGF2aWRzZkBheGlzLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkgIGdzdGZ1bm5lbDogYXZvaWQgYWNjZXNzIG9mIGZyZWVkIHBhZAotCSAgU2F2ZSB0aGUgdmFsdWUgb2YgdGhlIHBhZCdzIGdvdF9lb3MgaW4gZ3N0X2Z1bm5lbF9yZWxlYXNlX3BhZCwKLQkgIGJlZm9yZSBjYWxsaW5nIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQuIFRoaXMgaXMgYmVjYXVzZQotCSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCBtYXkgZnJlZSB0aGUgcGFkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODAxNwotCi0yMDEyLTA2LTE0IDE0OjA1OjE1ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IGZpeCBwYWQgdHJhbnNmZXIgYW5ub3RhdGlvbiBmcm9tIG5vbmUgdG8gZnVsbAotCSAgc2luY2UgdGhlIHBhZCB3aWxsIGJlIHVucmVmZmVkLgotCi0yMDEyLTA2LTEzIDEwOjUyOjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIG1lc3NhZ2U6IGFkZCB0aGUgcnVubmluZy10aW1lIHRvIHRoZSBhc3luYy1kb25lIG1lc3NhZ2UKLQkgIEFkZCB0aGUgcnVubmluZy10aW1lIG9mIHRoZSBidWZmZXIgdGhhdCBjYXVzZWQgdGhlIGFzeW5jIG9wZXJhdGlvbiB0byBjb21wbGV0ZQotCSAgdG8gdGhlIGFzeW5jLWRvbmUgbWVzc2FnZS4KLQkgIFVwZGF0ZSBiaW4gdG8gaGFuZGxlIHRoZSBuZXcgYXN5bmMtZG9uZSBtZXNzYWdlLgotCi0yMDEyLTA2LTEzIDEwOjUxOjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIHBpcGVsaW5lOiB1c2UgcmVzZXRfdGltZSBtZXNzYWdlIHRvIHJlc2V0IHRoZSBzdGFydCB0aW1lCi0JICBVc2UgdGhlIG5ldyBSRVNFVF9USU1FIG1lc3NhZ2UgdG8gcmVzZXQgdGhlIHN0YXJ0LXRpbWUgb2YgdGhlIHBpcGVsaW5lIHRvIHRoZQotCSAgcmVxdWVzdGVkIHRpbWUuCi0JICBNYWtlIGJhc2VzaW5rIHJlcXVlc3QgYSBuZXcgcnVubmluZy10aW1lIHdoZW4gdGhlIGZsdXNoLXN0b3AgbWVzc2FnZSB0ZWxscyBpdCB0bwotCSAgaW5zdGVhc2Qgb2Ygd2FpdGluZyBmb3IgcHJlcm9sbC4KLQotMjAxMi0wNi0xMyAxMDoxNjoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBtZXNzYWdlOiBhZGQgYSBuZXcgbWVzc2FnZSB0byByZXNldCB0aW1lCi0JICBBZGQgYSBuZXcgbWVzc2FnZSB0byByZXNldCB0aGUgcGlwZWxpbmUgcnVubmluZ190aW1lLiBDdXJyZW50bHkgcmVzZXRpbmcgdGhlCi0JICBwaXBlbGluZSBjYW4gb25seSBiZSByZXF1ZXN0ZWQgaW4gdGhlIGFzeW5jX2RvbmUgbWVzc2FnZSB3aGljaCBtZWFucyB0aGF0IHRoZQotCSAgcGlwZWxpbmUgbmVlZHMgdG8gYmUgcHJlcm9sbGVkLiBJdCBpcyBiZXR0ZXIgdG8gbW92ZSB0aGlzIHRvIGEgc2VwYXJhdGUgbWVzc2FnZS4KLQotMjAxMi0wNi0xMiAxNzoxMTo1MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBhbHdheXMgcmVjdXJzZSBpbnRvIGJpbnMgd2hlbiBkb2luZyBzdGF0ZSBjaGFuZ2VzCi0JICBOZXZlciBza2lwIHRoZSBzdGF0ZSBjaGFuZ2Ugb2YgYSBiaW4gYmVjYXVzZSBpdCBuZWVkcyB0byB1cGRhdGUgdGhlIGJhc2UgdGltZSBvZgotCSAgaXRzIGNoaWxkcmVuIHdoZW4gbmVlZGVkLgotCi0yMDEyLTA2LTEzIDAwOjMwOjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBmb3IgbmV3IGRhdGV0aW1lIGFwaQotCi0yMDEyLTA2LTEzIDAwOjI4OjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogdXBkYXRlIC5kZWYgZmlsZSBmb3IgbGF0ZXN0IEFQSQotCi0yMDEyLTA2LTEzIDAwOjI1OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGFkZCBuZXcgZGF0ZXRpbWUgQVBJCi0KLTIwMTItMDYtMTMgMDA6MjE6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkgIHRlc3RzOiBhZGQgc29tZSBiYXNpYyB1bml0IHRlc3RzIGZvciBwYXJ0aWFsIGRhdGUgdGltZSBmaWVsZHMKLQotMjAxMi0wNi0xMiAyMzo1MjowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGRhdGV0aW1lLmg6Ci0JICBkYXRldGltZTogY2xlYW4tdXBzIGFuZCBuZXcgQVBJIGFkanVzdG1lbnRzCi0JICBSZW1vdmUgY29uc3RydWN0b3JzIHdlIGRvbid0IHdhbnQ6Ci0JICBnc3RfZGF0ZV90aW1lX25ld195bWRfaCgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bwotCSAgc3VwcG9ydCBob3VyLW9ubHkgZm9yIG5vdzsKLQkgIGdzdF9kYXRlX3RpbWVfbmV3X3ltZF9obSgpIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bwotCSAgYWRkIGNvbnN0cnVjdG9ycyB3aXRoIHRpbWUgaW5mbyB3aGVyZSB0aGUgY2FsbGVyIGRvZXNuJ3QKLQkgIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hhdCB0aW1lem9uZSB0aGUgdGltZSBpcyBpbi4KLQkgIExvdHMgb2YgY29tcHVsc2l2ZSBjbGVhbi11cC4gRG9jcyBmaXhlcy4gUmVwbGFjZQotCSAgaGFzX21pbnV0ZSgpIGFuZCBoYXNfaG91cigpIHdpdGggaGFzX3RpbWUoKS4KLQotMjAxMi0wNi0xMiAyMjozNTo0MiArMDIwMCAgT2xla3NpaiBSZW1wZWwgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuaDoKLQkgIGRhdGV0aW1lOiBhbGxvdyBHc3REYXRlVGltZSB3aGVyZSBub3QgYWxsIGZpZWxkcyBhcmUgc2V0Ci0JICBJbiBvcmRlciB0byBkZXNlcmlhbGlzZSBhbmQgcmUtc2VyaWFsaXNlIGRhdGVzIGFuZCBkYXRlIHRpbWVzCi0JICBmcm9tIHRhZ3MgcHJvcGVybHksIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBleHByZXNzIHBhcnRpYWwKLQkgIGRhdGVzIChlLmcuIFlZWVkgb3IgWVlZWS1NTSkgYW5kIGRhdGUgdGltZXMuCi0JICBXZSBvbmx5IHN1cHBvcnQgcGFydGlhbCBkYXRlIHRpbWVzIHdoZXJlIGFsbCB0aGUgbW9yZQotCSAgc2lnbmlmaWNhbnQgZmllbGRzIGFib3ZlIHRoZSBmaXJzdCB1bnNldCBmaWVsZCBhcmUgc2V0Ci0JICAoZS5nLiBZWVlZLTAwLUREIGlzIG5vdCBzdXBwb3J0ZWQpLgotCSAgQ2FsbGluZyBfZ2V0X2ZvbygpIHdoZW4gZm9vIGlzIG5vdCBzZXQgaXMgbm90IGFsbG93ZWQKLQkgIGFueSBtb3JlLCBjYWxsZXJzIG5lZWQgdG8gY2hlY2sgd2hpY2ggZmllbGRzIGFyZSBzZXQKLQkgIGZpcnN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3Nzc1NwotCi0yMDEyLTA2LTEyIDIyOjQ1OjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JICBtZXNzYWdlOiBmaXggdXAgbWlub3IgaW5jb25zaXN0ZW5jeSBpbiBzdHJ1Y3R1cmUgbmFtZSBvZiBzdGF0ZS1jaGFuZ2VkIG1lc3NhZ2UKLQotMjAxMi0wNi0xMiAxMTo0MjozMCAtMDcwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy1ncm91cC5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uaDoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgotCSAgaW50cm9zcGVjdGlvbjogYWRkIHNvbWUgbWlzc2luZyBhbm5vdGF0aW9ucwotCi0yMDEyLTA2LTEyIDE0OjI0OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGhhbmRsZSBmbHVzaCBldmVudHMgb24gdGhlIGVsZW1lbnQgYXMgd2VsbAotCSAgSGFuZGxlIGZsdXNoLXN0YXJ0IGFuZCBmbHVzaC1zdG9wIHNlbnQgb24gdGhlIGVsZW1lbnQgYXMgd2VsbCBhbmQgc2VuZCB0aGVtCi0JICBkb3duc3RyZWFtLiBNYWtlIHN1cmUgdG8gc2VuZCBhIHNlZ21lbnQgZXZlbnQgYWZ0ZXIgdGhlIGZsdXNoIHN0b3AuCi0KLTIwMTItMDYtMTIgMTE6MDU6MDUgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JICBjaGlsZHByb3h5OiBhZGQgYSBmZXcgbW9yZSBjb21tZW50cwotCi0yMDEyLTA2LTExIDIwOjM0OjAwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5oOgotCSAgY2hpbGRwcm94eTogZml4IHNpZ25hbCBoYW5kbGVyIHNpZ25hdHVyZXMgaW4gY2xhc3MKLQkgIFdoZW4gYWRkaW5nIHRoZSBuYW1lIHBhcmFtZXRlciwgd2UgZm9yZ290IHRvIGFkZCBpdCBoZXJlIHRvby4KLQotMjAxMi0wNi0xMSAxMDo1OTo0OSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkqIGdzdC9nc3RjaGlsZHByb3h5Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSAgY2hpbGRwcm94eTogdXNlIEdzdENoaWxkUHJveHkgaW5zdGVhZCBvZiBHT2JqZWN0IG9uIHRoZSBwdWJsaWMgYXBpCi0JICBGaXggdXNhZ2UgYW5kIGFsc28gY2xlYW51cCBnc3Rfb2JqZWN0IGFwaSB1c2Ugb24gZ29iamVjdHMuCi0KLTIwMTItMDYtMTEgMTU6NDk6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBlbGVtZW50OiByZW1vdmUgdW51c2VkIFVOUEFSRU5USU5HIGZsYWcKLQotMjAxMi0wNi0xMSAxNTo0MTo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiByZW9yZ2FuaXplIF9yZW1vdmVfZnVuYyB0byBhdm9pZCByYWNlcwotCSAgTWFrZSB0aGUgZ3N0X2Jpbl9yZW1vdmVfZnVuYyBtb3JlIGxpa2UgdGhlIGFkZF9mdW5jLiBDaGVjayBpZiB0aGUgZWxlbWVudCB3ZSB0cnkKLQkgIHRvIHJlbW92ZSBmcm9tIHRoZSBiaW4gaGFzIHRoZSBiaW4gYXMgdGhlIHBhcmVudCBhbmQgc2V0IHRoZSBwYXJlbnQgZmxhZyB0byBOVUxMCi0JICBpbW1lZGlhdGVseSwgdGhpcyBhbGxvd3MgdXMgdG8gYXZvaWQgY29uY3VycmVudCByZW1vdmUgb3BlcmF0aW9ucyB3aXRob3V0IHVzaW5nCi0JICB0aGUgVU5QQVJFTlRJTkcgZWxlbWVudCBmbGFnLiBBZnRlciB3ZSB1bnBhcmVudGVkIHRoZSBlbGVtZW50IGZyb20gdGhlIGJpbiwgd2UKLQkgIHVwZGF0ZSB0aGUgYmluIHN0YXRlIGFuZCByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgbGlzdC4gRmluYWxseSB3ZSB1bmxpbmsKLQkgIGFsbCB0aGUgcGFkcy4KLQkgIFRoaXMgYXZvaWRzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIGVsZW1lbnQgY291bGQgc3RpbGwgY2xhaW0gdG8gaGF2ZSB0aGUKLQkgIGJpbiBhcyB0aGUgcGFyZW50IHdoaWxlIHRoZSBiaW4gZGlkbid0IGhhdmUgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50IGFueW1vcmUuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ3NzU5Ci0KLTIwMTItMDYtMTAgMTI6NDg6MDAgLTA0MDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZGVsZW1lbnQ6IE9ubHkgc2VuZCBjYXBzIHdoZW4gcGFkIGlzIGJlaW5nIGFjdGl2YXRlZAotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzgxOQotCi0yMDEyLTA2LTEwIDEyOjQxOjEyIC0wNDAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZ3N0ZWxlbWVudDogU3RhcnQgb3ZlciBpZiBzdWJjbGFzcyByZW1vdmVkIHRoZSBuZXh0IHBhZCB0b28KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc4MTgKLQotMjAxMi0wNi0wOSAxODowNToxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSAgZGF0ZXRpbWU6IHJlbW92ZSBmYWxsYmFjayBjb2RlIGZvciBvbGQgR0xpYnMKLQotMjAxMi0wNi0wOSAxNzoxMzowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHNjcmlwdHMvY3JlYXRlLXVuaW5zdGFsbGVkLXNldHVwLnNoOgotCSAgc2NyaXB0czogYWRkIGNyZWF0ZS11bmluc3RhbGxlZC1zZXR1cCBzY3JpcHQKLQkgIExpdHRsZSBzY3JpcHQgdGhhdCBzZXRzIHVwIHRoaW5ncyBpbiB+L2dzdCBhbmQgY2xvbmVzCi0JICB0aGUgbWFpbiBtb2R1bGVzIGFuZCBwcmludHMgc29tZSBpbnN0cnVjdGlvbnMuCi0JICBGcm9tIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3dpa2kvVW5pbnN0YWxsZWRTZXR1cAotCi0yMDEyLTA2LTA4IDE1OjQ1OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgZWxlbWVudHM6IFVzZSBnc3RfcGFkX3NldF9jYXBzKCkgYW5kIGRvbid0IGlnbm9yZSBpdHMgcmV0dXJuIHZhbHVlCi0KLTIwMTItMDYtMDggMTU6NDE6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGdzdF9wYWRfc2V0X2NhcHMoKSBhbmQgY2FsbCBpdCBhZnRlciB0aGUgdmZ1bmMKLQotMjAxMi0wNi0wOCAxNTozNjo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBVc2UgZ3N0X3BhZF9zZXRfY2FwcygpIGluc3RlYWQgb2YgdGhlIG1hbnVhbCBldmVudCBmaWRkbGluZwotCi0yMDEyLTA2LTA4IDE1OjMyOjM3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBEb24ndCByZXR1cm4gdGhlIHJldHVybiB2YWx1ZSBvZiBnc3RfcGFkX3NldF9jYXBzKCkKLQkgIGUuZy4gaXQgcmV0dXJucyBGQUxTRSBpZiBpbmNvbXBhdGlibGUgY2FwcyBhcmUgc2V0IG9uIHRoZSBwYWQuCi0KLTIwMTItMDYtMDYgMTk6MDI6MDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIGdzdHV0aWxzOiBGYXN0ZXIgcmVhZCBtYWNyb3MKLQkgIE9uIHBsYXRmb3JtcyB0aGF0IGNhbiBkbyB1bmFsaWduZWQgcmVhZC93cml0ZSwgd2UgY2FuIHJlYWQvd3JpdGUgbXVjaCBmYXN0ZXIKLQkgIGJ5IGp1c3QgY2FzdGluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTk1NDYKLQotMjAxMi0wNi0wNyAxMjo0OToxMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSAgY2hlY2s6IEFkZCBhIHRlc3QgZm9yIEdTVF9SRUFEXyogbWFjcm9zCi0KLTIwMTItMDYtMDggMTQ6NDk6NTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBVcGRhdGUgY29tbW9uIHN1Ym1vZHVsZQotCi0yMDEyLTA2LTA3IDE3OjU4OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGZpeCByZWNvbmZpZ3VyZQotCSAgVXNlIHRoZSBwYWQgbWV0aG9kcyB0byBzZXQgYW5kIGNoZWNrIHRoZSByZWNvbmZpZ3VyZSBmbGFncwotCSAgQ2xlYXIgdGhlIHJlY29uZmlndXJlIGZsYWcgYmVmb3JlIHdlIG5lZ290aWF0ZSBzbyB0aGF0IHdlIGRvbid0IG1pc3MgYW55Ci0JICByZWNvbmZpZ3VyZSBldmVudHMgd2hpbGUgbmVnb3RpYXRpbmcKLQotMjAxMi0wNi0wNyAxNTo1Njo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMC4xMS45MiA9PT0KLQotMjAxMi0wNi0wNyAxNTo1NjoxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSAgUmVsZWFzZSAwLjExLjkyCi0KLTIwMTItMDYtMDcgMTU6NTM6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEyLTA2LTA3IDE1OjI4OjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IHJlbGVhc2UgdGhlIG9iamVjdCBsb2NrIHNvb25lcgotCSAgUmVsZWFzZSB0aGUgb2JqZWN0IGxvY2sgYmVmb3JlIHdlIGdldCB0aGUgdGltZSBvZiB0aGUgY2xvY2sgYmVjYXVzZSB0aGF0IGNvZGUKLQkgIG1pZ2h0IHRha2Ugb3RoZXIgbG9ja3MuCi0JICBGaXggcG90ZW50aWFsIGNsb2NrIHJlZmNvdW50IGVycm9yIGJlY2F1c2Ugd2UgcmVsZWFzZWQgdGhlIG9iamVjdCBsb2NrIGJ1dAotCSAgZGlkbid0IHJlZiB0aGUgY2xvY2suCi0KLTIwMTItMDYtMDcgMTA6MzQ6NDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogcmVtb3ZlIDAuMTEgZml4bWUKLQkgIFdlIGFsd2F5cyByZXF1aXJlIGVsZW1lbnRzIHRvIGhhdmUgYW4gdW5sb2NrX3N0b3Agdm1ldGhvZC4KLQotMjAxMi0wNi0wNiAxODoxMToxMyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IFdlIG5hbWUgdGhlIHJlZ2lzdHJ5IGFmdGVyIHRoZSB0YXJnZXQgY3B1Ci0JICBBbmQgbm90IHRoZSBob3N0IGNwdQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdHJlZ2lzdHJ5LmMKLQotMjAxMi0wNi0wNiAxODoxODoxOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAxZmFiMzU5IHRvIDAzYTBlNTcKLQotMjAxMi0wNi0wNiAxNTo0NToxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvYy5jOgotCSAgdGVzdHM6IGZpeCB1bml0IHRlc3QgYWZ0ZXIgZXZlbnQgY2hhbmdlCi0JICBTb21lb25lIGZvcmdvdCB0byBydW4gbWFrZSBjaGVjayBiZWZvcmUgcHVzaGluZy4uLgotCi0yMDEyLTA2LTA2IDExOjA2OjMyICswMzAwICBTcmVlcmVuaiBCYWxhY2hhbmRyYW4gPHNyZWVyZW5qLmJhbGFjaGFuZHJhbkBpbnRlbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgZ3N0YWRhcHRlcjogQWxpZ24gdGhlIGNvbW1lbnQgZGVzY3JpcHRpb24gd2l0aCBwdWJsaWMgYXBpIGluc3RlYWQgb2YgaW50ZXJuYWwgb25lLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzUzNgotCi0yMDEyLTA2LTA2IDE1OjI5OjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogZml4IHBhZCBjbGVhbnVwIGluIGRpc3Bvc2UKLQkgIEluIHRoZSBkaXNwb3NlIGhhbmRsZXIgd2UgZmlyc3QgbmVlZCB0byByZWxlYXNlIGFsbCB0aGUgcmVxdWVzdCBwYWRzIGFuZCB0aGVuCi0JICByZW1vdmUgdGhlIHJlbWFpbmluZyBwYWRzLiBUaGlzIGlzIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCByZWxlYXNpbmcgdGhlCi0JICByZXF1ZXN0IHBhZCBtaWdodCBhbHNvIGNsZWFubHkgcmVtb3ZlIHNvbWUgb2YgdGhlIG90aGVyIGR5bmFtaWMgcGFkcywgbGlrZQotCSAgd2hhdCBydHBzZXNzaW9uIGRvZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NDM2Ci0KLTIwMTItMDYtMDYgMTQ6MTQ6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSAgZXZlbnQ6IERvbid0IG1ha2UgdGhlIFRPQyBldmVudCBhIG11bHRpLXN0aWNreSBldmVudAotCSAgRWxlbWVudHMgYXJlIHN1cHBvc2VkIHRvIG1lcmdlIHVwc3RyZWFtIGV2ZW50cy4KLQotMjAwOS0xMC0xMyAxNzoyNDozNCArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBNYWtlIHN1cmUgdGhhdCB1bmxpbmtlZCBwYWRzIGRvIG5vdCBjYXVzZSBhIHJldHVybiBmYWxzZSBvbiBsYXRlbmN5IGV2ZW50cy4KLQkgIENvbnRleHQ6IExhdGVuY3kgY29uZmlndXJhdGlvbiBzaG91bGQgbm90IGJlCi0JICBtZXNzZWQgdXAgYmVjYXVzZSBvZiBub3QtbGlua2VkIHBhZHMuIEluIGdlbmVyYWwsCi0JICBvbmUgcmV0dXJuIEZBTFNFIG9uIGxhdGVuY3kgZGlzdHJpYnV0aW9uIGNhdXNlcwotCSAgdGhlICJvdmVyYWxsIiBwaXBlbGluZSBsYXRlbmN5IGNvbmZpZ3VyYXRpb24gdG8KLQkgIGZhaWwuIFRoaXMgc2hvd3MgdXAgYXMgbm9pc2UgaW4gbG9ncyAod2FybmluZykuCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0cGFkLmMKLQotMjAxMi0wNi0wNiAxMjo1MjowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSAgZXZlbnQ6IGFkZCBuYW1lIHRvIHN0aWNreV9tdWx0aSBldmVudHMKLQkgIFRoZSBuYW1lIG9mIHRoZSBldmVudCBpcyB1c2VkIHRvIHN0b3JlIG11bHRpcGxlIHN0aWNreSBldmVudHMgb2YgYSBjZXJ0YWluIHR5cGUKLQkgIG9uIGEgcGFkLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3Njg1OQotCi0yMDEyLTA2LTA2IDA5OjU5OjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6Ci0JICBkZXNpZ246IEFsc28gbWVudGlvbiB0aGF0IHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIGNhcHMgaXMgaW1wb3J0YW50Ci0KLTIwMTItMDYtMDYgMDk6MTU6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IGltcHJvdmUgZG9jcwotCi0yMDEyLTA2LTA2IDA5OjEzOjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IG9ubHkgc2VyaWFsaXplZCBldmVudHMgY2FuJ3QgcGFzcyBhZnRlciBFT1MKLQkgIE9ubHkgc2VyaWFsaXplZCBldmVudHMgY2FuJ3QgYmUgc2VudCBvbiBwYWRzIHRoYXQgYXJlIEVPUy4gT3RoZXJ3aXNlIGEgc2VlawotCSAgZXZlbnQgd291bGQgYmUgcmVmdXNlZCBhcyB3ZWxsLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzUyMAotCi0yMDEyLTA2LTA1IDE0OjM4OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKLQkgIGRvY3M6IHRhbGsgYWJvdXQgdGhlIGZpbHRlciBjYXBzCi0KLTIwMTItMDYtMDIgMTY6NDQ6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgdGFnIGxpc3Qgd3JpdGFiaWxpdHkKLQotMjAxMi0wNi0wMiAxNjozODozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZ3NldHRlci5jOgotCSogdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOgotCSAgZ3N0X3RhZ19saXN0X2ZyZWUgLT4gZ3N0X3RhZ19saXN0X3VucmVmCi0KLTIwMTItMDYtMDIgMTY6Mjk6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogZXhwYW5kIHRhZ2xpc3Qgc2VjdGlvbiBpbiBwb3J0aW5nLXRvLTAuMTEgZG9jcyBhIGJpdAotCi0yMDEyLTA2LTA1IDExOjI4OjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBuZWdvdGlhdGlvbiBkb2NzCi0JICBNZW50aW9uIHRoYXQgdGhlIGFjY2VwdGNhcHMgcXVlcnkgZG9lcyBub3QgaGF2ZSB0byBiZSByZWN1cnNpdmUKLQotMjAxMi0wNi0wNSAwOTo0MDoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogcmVtb3ZlIG9ic29sZXRlIGNhcHMgY29kZQotCi0yMDEyLTA2LTA1IDA5OjM5OjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBpbXByb3ZlIGRlYnVnCi0KLTIwMTItMDYtMDUgMDk6MjE6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSAgdGVzdHM6IGZpeCB1bml0IHRlc3QKLQkgIEJlZm9yZSB3ZSBjYW4gY2hhbmdlIHRoZSBjYXBzIG9uIGEgc2lua3BhZCB3aXRoIGZpeGVkIGNhcHMgd2UgbmVlZCB0byB1bmZpeCB0aGUKLQkgIHBhZCBjYXBzLgotCi0yMDEyLTA2LTA1IDA5OjEwOjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGRvbid0IHBhdXNlIHRhc2sgb24gRU9TCi0JICBFbGVtZW50cyBzaG91bGQgbm90IHJlbHkgb24gY29yZSB0byBwYXVzZSB0YXNrcyBvbiBFT1MuCi0KLTIwMTItMDYtMDUgMDk6MDA6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IGV2ZW50IHR5cGUgY2hlY2sKLQotMjAxMi0wNi0wNCAxNjoxOToyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBmaXggJ3JlcycgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uCi0KLTIwMTItMDYtMDQgMTM6MDA6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkgIGZ1bm5lbDogRml4IHVuaXQgdGVzdAotCi0yMDEyLTA2LTA0IDEyOjU3OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYzoKLQkgIHZhbHZlOiBGaXggdW5pdCB0ZXN0Ci0KLTIwMTItMDYtMDQgMTE6NDY6NDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IERvbid0IGFjY2VwdCBhbnkgYnVmZmVycyBvciBldmVudHMgYWZ0ZXIgRU9TCi0KLTIwMTItMDYtMDQgMTE6MTM6MDIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBhbHNvIHBlcmZvcm0gc3RhdGUgcHJvY2Vzc2luZyB1cG9uIG5vbi1PSyByZXR1cm4KLQkgIC4uLiBzaW5jZSBwcm9jZXNzaW5nIG1pZ2h0IHN0aWxsIGNvbnRpbnVlIChpZiBlLmcuIE5PVF9MSU5LRUQpCi0JICBhbmQgdGhlbiBwcm9wZXIgc3RhdGUgKGUuZy4gb2Zmc2V0KSBuZWVkcyB0byBiZSBtYWludGFpbmVkCi0JICAoZS5nLiB0byBhcnJhbmdlIGZvciBhIG5ldyBmcmFtZSBzZXR1cCkuCi0KLTIwMTItMDYtMDQgMTE6MjU6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEFsd2F5cyByZXR1cm4gZXJyb3JzIGZvciBFT1MgZXZlbnRzIGltbWVkaWF0ZWx5Ci0JICBGb3Igbm9uLUVPUyBldmVudHMgdGhpbmdzIHdpbGwgZXJyb3Igb3V0IGxhdGVyIGR1cmluZyBkYXRhCi0JICBmbG93IGJ1dCBhZnRlciBFT1MgZXZlbnRzIG5vIGRhdGEgZmxvdyBpcyBoYXBwZW5pbmcuCi0JICBTZWUgYnVnICM2NzczNDAuCi0KLTIwMTItMDYtMDQgMDk6Mjc6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IE9ubHkgZm9yd2FyZCBjYXBzIGV2ZW50cyB0byBhIHBhZCBpZiBpdCBhY2NlcHRzIHRoZSBjYXBzCi0JICBGaXhlcyBidWcgIzY3NzMzNS4KLQotMjAxMi0wNi0wMiAyMDowMTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIFJldmVydCAicGFkOiBSZXR1cm4gRkFMU0UgaWYgcHVzaGluZyBvZiBzdGlja3kgZXZlbnRzIGZhaWxlZCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMGY5MjRiOTIyYzcxMjA1OWQ3NzUyZmMxNWI4MzI1NTE3NDVmZjI3ZS4KLQkgIFN0aWNreSBldmVudHMgc2hvdWxkIGFsd2F5cyByZXR1cm4gVFJVRSB3aGVuIHB1c2hpbmcgYW5kIHdpbGwKLQkgIG9ubHkgY2F1c2UgZmFpbHVyZXMgZHVyaW5nIGRhdGEgZmxvdyBsYXRlci4KLQotMjAxMi0wNi0wMiAxNjoxODo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IHZhcmlhYmxlLXNldC1idXQtbm90LXVzZWQgY29tcGlsZXIgd2FybmluZwotCi0yMDEyLTA2LTAyIDE2OjU1OjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBJZiBwdXNoaW5nIGEgc3RpY2t5IGV2ZW50IGZhaWxlZCwgbWFrZSBzdXJlIHRvIGF0IGxlYXN0IHB1c2ggYW55IHBlbmRpbmcgRU9TIGV2ZW50cwotCSAgT3RoZXJ3aXNlIGEgcGlwZWxpbmUgd2hlcmUgb25lIHN0aWNreSBldmVudCBmYWlscyB0byBiZSBzZW50IHdpbGwKLQkgIG5ldmVyIGZvcndhcmQgRU9TIGV2ZW50cyBkb3duc3RyZWFtLiBUaGlzIGNhbiBjYXVzZSBwaXBlbGluZXMgdG8KLQkgIHdhaXQgZm9yZXZlciBmb3IgRU9TIG9uIGVycm9ycy4KLQotMjAxMi0wNi0wMiAxNjowMjowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogUmV0dXJuIEZBTFNFIGlmIHB1c2hpbmcgb2Ygc3RpY2t5IGV2ZW50cyBmYWlsZWQKLQkgIEluc3RlYWQgb2YganVzdCBpZ25vcmluZyBmYWlsdXJlIG9mIHB1c2hpbmcgc3RpY2t5IGV2ZW50cyBhbmQKLQkgIHJldHVybmluZyBUUlVFIGFzIGlmIGV2ZXJ5dGhpbmcgaXMgZmluZS4KLQotMjAxMi0wNi0wMSAxNjozNDoxNiArMDIwMCAgQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSA8YW5kcmUubWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBDb3JyZWN0bHkgZ2V0IGN1cnJlbnQgcnVubmluZyB0aW1lIHdoZW4gc3luY2luZyB0byB0aGUgc2VnbWVudCBpbmZvcm1hdGlvbgotCSAgRml4ZXMgYnVnICM2NzcyNjMuCi0KLTIwMTItMDYtMDEgMTA6Mjg6MzAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZjFiNWE5NiB0byAxZmFiMzU5Ci0KLTIwMTItMDUtMjUgMjI6NTg6NTcgLTA1MDAgIE1pa2UgUnVwcmVjaHQgPG1pa2UucnVwcmVjaHRAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkgIHRlc3RzOiBBZGQgZnVubmVsIHRlc3QgdG8gY292ZXIgRU9TIGV2ZW50IGhhbmRsaW5nCi0JICBQb3J0ZWQgZnJvbSBmM2IyZGQ2ZiBpbiB0aGUgMC4xMCBicmFuY2gKLQotMjAxMi0wNS0yNSAyMjo1MjozMyAtMDUwMCAgTWlrZSBSdXByZWNodCA8bWlrZS5ydXByZWNodEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JICBmdW5uZWw6IE9ubHkgZW1pdCBFT1MgZXZlbnQgaWYgYWxsIHNpbmtwYWRzIGhhdmUgcmVjZWl2ZWQgb25lCi0JICBJZiBtdWx0aXBsZSBzb3VyY2VzIGFyZSBwbHVnZ2VkIGludG8gdGhlIGZ1bm5lbCBhbmQgb25lIG9mIHRoZQotCSAgc291cmNlcyBlbWl0cyBhbiBFT1MsIHRoYXQgZXZlbnQgaXMgcHJvcG9nYXRlZCB0aHJvdWdoIHRoZSBmdW5uZWwKLQkgIGV2ZW4gdGhvdWdoIG90aGVyIHNvdXJjZXMgY29ubmVjdGVkIHRvIHRoZSBmdW5uZWwgbWF5IHN0aWxsIGJlCi0JICBwdXNoaW5nIGRhdGEuIFRoaXMgcGF0Y2ggd2FpdHMgdG8gc2VuZCBhbiBFT1MgZXZlbnQgdW50aWwgdGhlCi0JICBmdW5uZWwgaGFzIHJlY2VpdmVkIGFuIEVPUyBldmVudCBvbiBlYWNoIHNpbmtwYWQuCi0JICBQb3J0ZWQgZnJvbSBkMzk3ZWE5NyBpbiAwLjEwIGJyYW5jaC4KLQotMjAxMi0wNS0yOSAxOToyNDoyNSAtMDUwMCAgTWlrZSBSdXByZWNodCA8bWlrZS5ydXByZWNodEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSAgdGVzdHM6IEZpeCBpbnZhbGlkIHJlYWQgd2hlbiByZWxlYXNpbmcgcmVxdWVzdCBwYWRzIGluIGZ1bm5lbCB0ZXN0cwotCi0yMDEyLTA1LTI5IDE5OjIzOjA3IC0wNTAwICBNaWtlIFJ1cHJlY2h0IDxtaWtlLnJ1cHJlY2h0QGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkgIGZ1bm5lbDogRml4IGJ1ZmZlciBsZWFrCi0KLTIwMTItMDUtMzEgMTc6NDU6MjkgKzAyMDAgIEFuZHJlIE1vcmVpcmEgTWFnYWxoYWVzIChhbmRydW5rbykgPGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogRG9uJ3QgdHJ5IHRvIHN5bmMgb24gdGhlIHNlZ21lbnQgaWYgaXQgaGFzIG5vIFRJTUUgZm9ybWF0Ci0JICAuLi5hbmQgd2FpdCB1bnRpbCBpdCBpcyBhY3R1YWxseSBjb25maWd1cmVkIGFuZCBoYXMgYSBmb3JtYXQgYmVmb3JlCi0JICB0cnlpbmcgdG8gc3luYy4KLQotMjAxMi0wNS0zMSAxNzowMzo1NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogTm8gbmVlZCB0byBicm9hZGNhc3QgdGhlIHNpZ25hbCBpbiBmbHVzaC1zdG9wCi0JICBFdmVyeXRoaW5nIHN0b3BwZWQgYXQgdGhpcyBwb2ludCBhbHJlYWR5LgotCSAgQ29uZmxpY3RzOgotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKLQotMjAxMi0wNS0zMSAxMzowNzo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA5MmI3MjY2IHRvIGYxYjVhOTYKLQotMjAxMi0wNS0zMSAxMDoxMDo0MSArMDEwMCAgQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBGaXggcHJvcGVydHkgbmFtZSBpbiB0aGUgZG9jcwotCSAgdGVtcC10ZW1wbGF0ZSwgbm90IHRlbXAtdG1wbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzE3MAotCi0yMDEyLTA1LTI4IDE0OjI5OjAwIC0wMzAwICBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyAoYW5kcnVua28pIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgotCSAgaW5wdXRzZWxlY3RvcjogUHJvcGVybHkgc3luYyB3aGVuIGNoYW5naW5nIHN0cmVhbXMKLQkgIFRoaXMgYWRkcyBwcm9wZXJ0aWVzIHRvIHVzZSB0aGUgY2xvY2sgdGltZSBmb3IgZGVjaWRpbmcgd2hlbgotCSAgdG8gZHJvcCBidWZmZXJzIGZvciBpbmFjdGl2ZSBwYWRzIGFuZCBhIHByb3BlcnR5IHRvIGJ1ZmZlciBhbGwKLQkgIG5vdCByZW5kZXJlZCBidWZmZXJzIGZvciB0aGUgYWN0aXZlIHBhZCB0byBhbGxvdyBwYWQgc3dpdGNoaW5nCi0JICB3aXRob3V0IGxvc2luZyBhbnkgYnVmZmVycyBhdCBhbGwuCi0JICBDb25mbGljdHM6Ci0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYwotCi0yMDEyLTA1LTMwIDEyOjQ0OjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGVjMWM0YTggdG8gOTJiNzI2NgotCi0yMDEyLTA1LTMwIDExOjE4OjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDM0MjliYTYgdG8gZWMxYzRhOAotCi0yMDEyLTA1LTI5IDA4OjQ4OjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ2xpc3Q6IGFkZCBndWFyZHMgdG8gbWFrZSBzdXJlIHRhZ2xpc3QgaXMgd3JpdGFibGUgd2hlbiBtb2RpZnlpbmcgaXQKLQkgIE5vdyB0aGF0IHRhZ2xpc3RzIGFyZSByZWZjb3VudGVkIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhleSdyZQotCSAgd3JpdGFibGUgYmVmb3JlIG1vZGlmeWluZyB0aGVtLgotCi0yMDEyLTA1LTI4IDIzOjU0OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB0YWdsaXN0OiBhdm9pZCB1bm5lY2Vzc2FyeSBzdHJpbmcgY29weWluZyB3aGVuIHJlZ2lzdGVyaW5nIHRhZ3MKLQkgIEFkZCBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYygpIC0gbm8gbmVlZCB0byBjb3B5IGFsbCB0aG9zZQotCSAgc3RyaW5nIGNvbnN0YW50cywgd2hldGhlciB0cmFuc2xhdGVkIG9yIG5vdC4KLQkgIEFQSTogZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMoKQotCi0yMDEyLTA1LTI4IDAwOjA4OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGNoZWNrOiBjaGVjayBmb3IgR0xpYi1HSU8gY3JpdGljYWxzIGFzIHdlbGwKLQotMjAxMi0wNS0yOCAwMDowODoxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0X3RhZ19saXN0X2ZyZWUoKSAtPiBnc3RfdGFnX2xpc3RfdW5yZWYoKQotCi0yMDEyLTA1LTI3IDIzOjU4OjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0Y29tcGF0Lmg6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdGFnbGlzdDogbWFrZSBHc3RUYWdMaXN0IGEgR3N0TWluaU9iamVjdAotCSAgV2hpY2ggYWRkcyByZWZjb3VudGluZyBzdXBwb3J0LCBhbmQgb3RoZXIgdGhpbmdzLgotCi0yMDEyLTA1LTI3IDIwOjMxOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGxvZyBmcmVlaW5nIG9mIGNhcHMgYXQgc2FtZSBsb2cgbGV2ZWwgYXMgY3JlYXRpb24sIGkuZS4gVFJBQ0UKLQotMjAxMi0wNS0yNiAxMTozNzo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JICBtZXNzYWdlLCBldmVudDogdXBkYXRlIGZvciB0YWcgbGlzdHMgbm90IGJlaW5nIHN0cnVjdHVyZXMgYW55IG1vcmUKLQotMjAxMi0wNS0yMSAwMDozMToyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnbGlzdDogbWFrZSBwcm9wZXIgc3RydWN0IG5vdCBqdXN0IGEgR3N0U3RydWN0dXJlCi0KLTIwMTItMDUtMjUgMTA6Mjg6NDAgKzAyMDAgIEpvc2VwIFRvcnJhIDxqb3NlcEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IEZpeCBzdGF0aWMgbGlua2luZyBvbiBPUyBYCi0JICBUaGUgbGlua2luZyBiZWhhdmlvdXIgb2YgZXh0ZXJuYWwgdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBpbml0aWFsaXplZAotCSAgaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgd2hlcmUgdGhleSBhcmUgZGVmaW5lZCBpcyB1bmRlZmluZWQuIE9uIE9TIFgKLQkgIHRoaXMgY2F1c2VzIGEgbGlua2luZyBmYWlsdXJlIHdoZW4gc3RhdGljYWxseSBsaW5raW5nIEdTdHJlYW1lci4KLQotMjAxMi0wNS0yNSAwOToxNzoxNyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogc2NyaXB0cy9maXZlLWJ1Z3MtYS1kYXkucGw6Ci0JICBmaXZlLWJ1Z3MtYS1kYXk6IHVzZSBzcGxpY2UgdG8gdHJpbSB0aGUgYnVnIGxpc3QKLQotMjAxMi0wNS0yNCAyMzozMDoyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmg6Ci0JICBmYWtlc3JjOiBwdXQgYnl0ZSBwb3NpdGlvbiByYXRoZXIgdGhhbiBidWZmZXIgY291bnQgaW50byBHU1RfQlVGRkVSX09GRlNFVAotCSAgSWYgd2UncmUgc2VuZGluZyBhIHNlZ21lbnQgaW4gQllURSBmb3JtYXQsIHRoZSBvZmZzZXQKLQkgIHNob3VsZCBiZSBpbiBieXRlcyBhcyB3ZWxsLgotCi0yMDEyLTA1LTI0IDExOjQ4OjE5ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDoKLQkgIGRvY3M6IGZpeCBhIHR5cG8gaW4gcGFydC1zZWdtZW50cy50eHQKLQotMjAxMi0wNS0yNCAxMTowMjo1MyArMDIwMCAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbiBhdCBvcmFjbGUuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JICB0eXBlZmluZDogZml4IHByb3RvdHlwZSBvZiBoZWxwZXJfZmluZF9zdWdnZXN0Ci0JICBUaGUgcHJvdG8gZm9yIGhlbHBlcl9maW5kX3N1Z2dlc3QgaGFzIGEgZGlmZmVyZW50IGFyZ3VtZW50IHRoYW4gdGhlIGFjdHVhbAotCSAgZnVuY3Rpb24gaW4gdGhlIHNhbWUgZmlsZSBoYXMuICBUaGlzIGNhdXNlcyB0aGUgU3VuIFN0dWRpbyBjb21waWxlciB0byBmYWlsLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjYyNAotCSAgQ29uZmxpY3RzOgotCSAgbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jCi0KLTIwMTItMDUtMjQgMDg6MDc6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2ZpdmUtYnVncy1hLWRheS5wbDoKLQkgIHNjcmlwdHM6IHJlbW92ZSBhIHN0cmF5IHByaW50IGZyb20gZGVidWdnaW5nIGFuZCBmaXggdXAgY3JvbiBlbnRyeSBkb2NzCi0KLTIwMTItMDUtMjQgMDk6MDM6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2ZpdmUtYnVncy1hLWRheS5wbDoKLQkgIGZpdmUtYnVncy1hLWRheTogTWFrZSAjISB0byBwZXJsIG1vcmUgcG9ydGFibGUKLQotMjAxMi0wNS0yNCAwNzo1Njo0OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHNjcmlwdHMvZml2ZS1idWdzLWEtZGF5LnBsOgotCSAgc2NyaXB0czogcmVtb3ZlIGZpeGVkICdrbm93biBpc3N1ZScgZnJvbSBmaXZlLWJ1Z3MtYS1kYXkgc2NyaXB0Ci0JICBUaGlzIHdhcyB3aXRoIGNvbW1hcyBhY3R1YWxseSwgYW5kIHNob3VsZCBiZSBmaXhlZCBub3cuCi0KLTIwMTItMDUtMjQgMDc6NTQ6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2ZpdmUtYnVncy1hLWRheS5wbDoKLQkgIHNjcmlwdHM6IGFkZCBmaXZlLWJ1Z3MtYS1kYXkgc2NyaXB0Ci0JICBDcm9uIGZvZGRlci4KLQotMjAxMi0wNS0yMiAxNDoyNzo0OCArMDMwMCAgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5AaW50ZWwuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzoKLQkgIHRlc3RzOiByZW5hbWUgcGxheWJpbjIgdG8gcGxheWJpbiBhbmQgYWRkaW5nIHNvbWUgZGVidWcgaW5mbwotCi0yMDEyLTA1LTIyIDE4OjI3OjM2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgdXJpOiBBZGQgc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzCi0KLTIwMTItMDUtMjIgMTM6NTE6NDcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBVcGRhdGUgZGVmcyBmaWxlCi0KLTIwMTItMDUtMjEgMDk6MTQ6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkgIGJpbjogcG9ydCB1bml0IHRlc3QgdG8gMC4xMQotCi0yMDEyLTA1LTIxIDE1OjE0OjUxICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBkb2NzOiBpbXByb3ZlIHRoZSBzZWVraW5nIGRvY3MgbW9yZS4KLQkgIEFsc28gbWVudGlvbiBpdCBvbiBfZWxlbWVudF9zZWVreyxfc2ltcGxlfSBhbmQgYmUgbW9yZSBwcmVjaXNlIHdoeSBpdCBoYXBwZW5zLgotCi0yMDEyLTA1LTIxIDEzOjE3OjIxICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBkb2NzOiBmaXggYSB0eXBvIGFuZCBjbGFyaWZ5IGV2ZW50IGhhbmRsaW5nIGEgYml0IG1vcmUKLQkgIFRlbGwgYWJvdXQgYXN5bmNfZG9uZSBtZXNzYWdlcyBmb3Igc29tZSBldmVudHMgYW5kIHJldmlldyB0aGUgX2V2ZW50X25ld19zZWVrCi0JICBkb2NzLgotCi0yMDEyLTA1LTE4IDE1OjA0OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICBiaW46IHRyeSBoYXJkZXIgdG8gYXZvaWQgc3RhdGUgY2hhbmdlcyBpbiB3cm9uZyBkaXJlY3Rpb24KLQkgIFdoZW4gdGhlIGJpbiBkb2VzIGFuIHVwd2FyZCBzdGF0ZSBjaGFuZ2UsIHRyeSB0byBhdm9pZCBkb2luZyBhIGRvd253YXJkIHN0YXRlCi0JICBjaGFuZ2Ugb24gdGhlIGNoaWxkIGFuZCB2aWNlIHZlcnNhLgotCSAgQWRkIHNvbWUgbW9yZSB1bml0IHRlc3RzIGZvciB0aGlzIGZpeC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjE4MzMKLQotMjAxMi0wNS0xOCAyMDoxMTo1NSArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBmaXggLWMsIC0tdG9jIG1lc3NhZ2UKLQotMjAxMi0wNS0yMSAwMTo0ODoyOSArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0dG9jLmM6Ci0JKiBnc3QvZ3N0dG9jLmg6Ci0JICB0b2M6IEFkZCBib3hlZCB0eXBlcyBmb3IgR3N0VG9jIGFuZCBHc3RUb2NFbnRyeQotCi0yMDEyLTA1LTIwIDE4OjIzOjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRvYy5jOgotCSogZ3N0L2dzdHRvYy5oOgotCSAgdG9jOiBmaXggdHlwZSBvZiBwYWQgcGFyYW1ldGVyIHRvIGdzdF90b2NfZW50cnlfbmV3X3dpdGhfcGFkKCkKLQotMjAxMi0wNS0yMCAxODoxNjo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0b2MuYzoKLQkgIHRvYzogdXNlIGNvcnJlY3QgR1R5cGUgZm9yIHRhZyBsaXN0cwotCi0yMDEyLTA1LTIwIDE4OjA2OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRvYy5jOgotCSAgdG9jOiBhdm9pZCB1bm5lY2Vzc2FyeSBHVmFsdWUgYWNyb2JhdGljcwotCi0yMDEyLTA1LTIwIDE3OjQ4OjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHRvYy5jOgotCSAgdG9jOiB1c2UgZ2xvYmFsIHF1YXJrIHRhYmxlCi0KLTIwMTItMDUtMjAgMTc6MTA6MjQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkgIHRvYzogZml4IGludGVybmFsIFRPQyBxdWVyeSBhbmQgZXZlbnQgc3RydWN0dXJlIG5hbWVzCi0JICBNYWtlIHRoZW0gY29uc2lzdGVudCB3aXRoIGFsbCB0aGUgb3RoZXIgcXVlcnkgYW5kIGV2ZW50IG5hbWVzLgotCi0yMDEyLTA1LTE5IDE3OjI0OjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSAgcGx1Z2luZmVhdHVyZTogbWFrZSBHc3RQbHVnaW5GZWF0dXJlIHN0cnVjdHVyZSBwcml2YXRlCi0JICBNYWtlIEdzdFBsdWdpbkZlYXR1cmUgb3BhcXVlIHVudGlsIHdlIGhhdmUgdGltZSB0bwotCSAgY2xlYW4gaXQgdXAgYSBsaXR0bGUuIE9ubHkgR3N0RWxlbWVudEZhY3RvcnkgYW5kCi0JICBHc3RUeXBlZmluZEZhY3RvcnkgZGVyaXZlIGZyb20gaXQsIGFuZCB0aGV5IGFyZQotCSAgb3BhcXVlIGFscmVhZHksIGFuZCB3ZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydAotCSAgY3VzdG9tIHBsdWdpbiBmZWF0dXJlcyBpbiB0aGUgcmVnaXN0cnkgYW55d2F5LgotCi0yMDEyLTA1LTE5IDE3OjIzOjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIHRvb2xzLCB0ZXN0czogZG9uJ3QgYWNjZXNzIHRoZSBHc3RQbHVnaW5GZWF0dXJlIHN0cnVjdHVyZSBkaXJlY3RseQotCi0yMDEyLTA1LTE5IDE3OjE2OjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBwbHVnaW5mZWF0dXJlOiBhZGQgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW4oKQotCSAgQWRkIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHBsdWdpbiB0aGF0IHByb3ZpZGVzIHRoaXMgZmVhdHVyZS4KLQkgIEFQSTogZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW4oKQotCi0yMDEyLTA1LTE5IDE2OjIxOjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgY29tbW9uOiB1cGRhdGUgZm9yIGdzdHNjYW5vYmogY2hhbmdlcwotCi0yMDEyLTA1LTE5IDE1OjUxOjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgZWxlbWVudGZhY3Rvcnk6IG1ha2Ugb2JqZWN0IHN0cnVjdCBvcGFxdWUgZm9yIG5vdwotCSAgTWFrZSBHc3RFbGVtZW50RmFjdG9yeSBvcGFxdWUgdW50aWwgd2UgaGF2ZSB0aW1lIHRvCi0JICBjbGVhbiBpdCB1cCBhIGxpdHRsZS4gSXQncyBub3Qgc29tZXRoaW5nIGFueW9uZQotCSAgd291bGQgbmVlZCB0byBkZXJpdmUgZnJvbS4KLQotMjAxMi0wNS0xOSAxNDo1OToxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29sczogZG9uJ3QgdXNlIHByaXZhdGUgR3N0RWxlbWVudEZhY3RvcnkgQVBJIGluIGdzdC1pbnNwZWN0Ci0KLTIwMTItMDUtMTkgMTQ6NTI6MjkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZWxlbWVudGZhY3Rvcnk6IGFkZCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzKCkKLQkgIEFQSTogZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5cygpCi0KLTIwMTItMDUtMTggMDk6NTI6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGxhdW5jaDogaW1wcm92ZSBFT1Mgb24gc2h1dGRvd24gaGFuZGxpbmcKLQkgIFdoZW4gdGhlIC1lIG9wdGlvbiBpcyBzZWxlY3RlZCwgYWxzbyB3YWl0IGZvciBFT1Mgd2hlbiB0aGUgcGlwZWxpbmUgcHJvZHVjZWQgYW4KLQkgIGVycm9yLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMDk5NwotCi0yMDEyLTA1LTE2IDE4OjUzOjE1ICswMzAwICBBbnRvbiBCZWxrYSA8YW50b25iZWxrYUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGRvY3M6IGZpeCBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZygpIGRvY3MKLQotMjAxMi0wNS0xNiAxMzoyNDoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHRocm90dGxlLXRpbWUgaXMgdXNlZAotCi0yMDEyLTA1LTE2IDEyOjA4OjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBiYXNlc2luazogYWRkIHByZXBhcmUgbWV0aG9kCi0JICBBZGQgYSBwcmVwYXJlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCBiZWZvcmUgc3luYyBoYXBwZW5zLiBUaGUgcHVycG9zZSBvZiB0aGlzCi0JICBtZXRob2QgaXMgdG8gcHJlcGFyZSB0aGUgcmVuZGVyaW5nIG9mIHRoZSBnaXZpbmcgYnVmZmVyIHNvIHRoYXQgdGhlIGZvbGxvd2luZwotCSAgcmVuZGVyKCkgY2FsbCBhZnRlciBzeW5jIGlzIGEgcXVpY2sgYXMgcG9zc2libGUuCi0KLTIwMTItMDUtMTYgMDk6MTY6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogYXZvaWQgcG90ZW50aWFsIGRlYWRsb2NrCi0JICBJbiBnc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGUoKSB3ZSBkbyBhIHBlcmZvcm1fc2VlaygpIHRoYXQgd2lsbCBldmVudHVhbGx5Ci0JICBzdGFydCB0aGUgc3RyZWFtaW5nIHRocmVhZCB3aGljaCBhY3F1aXJlcyB0aGUgbGl2ZSBsb2NrIGFuZCB0aGVuIGdvZXMgdG8gc2xlZXAKLQkgIGluIHRoZSBjYXNlIG9mIGFwcHNyYy4gUmlnaHQgYWZ0ZXIgd2UgcGVyZm9ybSBzZWVrIHdlIGFsc28gdHJ5IHRvIGFjcXVpcmUgdGhlCi0JICBsaXZlIGxvY2sgd2hpY2ggbWlnaHQgdGhlbiBkZWFkbG9jay4KLQkgIGZpeCB0aGlzIGJ5IHRha2luZyB0aGUgc3RyZWFtIGxvY2sgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIHNlZWsuIFRoaXMgbWFrZXMgc3VyZQotCSAgdGhhdCB0aGUgc3RyZWFtaW5nIHRocmVhZCBjYW5ub3Qgc3RhcnQgYW5kIGdyYWIgdGhlIGxpdmUgbG9jayB1bnRpbCB3ZSBhcmUgZG9uZQotCSAgYW5kIHJlbGVhc2UgdGhlIHN0cmVhbSBsb2NrIGFnYWluLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjA0OAotCi0yMDEyLTA1LTE1IDE5OjExOjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiByZW1vdmUgcmVmZXJlbmNlcyB0byBtbWFwIGluIGNvbW1lbnRzIGFuZCBkZWJ1ZyBtZXNzYWdlcwotCi0yMDEyLTA1LTE1IDE2OjM4OjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIGdzdC9nc3R0b2MuaDoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZ3N0OiBSZW5hbWUgZ3N0X3RvY19lbnRyeV90eXBlX3RvX3N0cmluZygpIHRvIGdzdF90b2NfZW50cnlfdHlwZV9nZXRfbmljaygpCi0JICBJdCdzIG1vcmUgY29uc2lzdGVudC4KLQotMjAxMi0wNS0xNSAxNDo1OTowNyArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBmaXggcHJpbnRfdG9jX2VudHJ5KCkKLQotMjAxMi0wNS0xNSAxNDo0ODozNSArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRvYy5jOgotCSogZ3N0L2dzdHRvYy5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB0b2M6IEFQSTogQWRkIGdzdF90b2NfZW50cnlfdHlwZV90b19zdHJpbmcoKQotCi0yMDEyLTA1LTE0IDAzOjU3OjUwICswMjAwICBBbGJhbiBCcm93YWV5cyA8cHJhaGFsQHlhaG9vLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kZWxlbWVudDogaWYgc2luayBwYWQgaXMgYWN0aXZhdGVkIGRvIG5vdCBjaGFuZ2UgbW9kZQotCSAgSW4gY29tbWl0IGJmMDk2NGI2IGEgY2hlY2sgZm9yIHBhZCBpcyBhY3RpdmF0ZWQgd2FzIG5vdCBjYXJyaWVkLgotCSAgVGhpcyBsZWFkcyB0byBhdHRlbXB0IHRvIHB1bGwgd2hpbGUgaW4gcHVzaCBtb2RlIHdoZW4gZm9yY2VfY2FwcwotCSAgaXMgc2V0LiBJbiB0aGlzIGNhc2Ugd2l0aG91dCB0aGUgYXR0YWNoZWQgY2hlY2sgZXZlbiB3aGVuIGFjdGl2YXRlZAotCSAgaW4gcHVsbCBtb2RlIHdlIGFjdGl2YXRlIGJhY2sgdG8gcHVzaCBtb2RlLgotCSAgVGhpcyBpcyBmcm9tIGNvbW1lbnQgaW4gcHJldmlvdXMgY29kZSAsIGNhc2UgbnVtYmVyIGVpZ2h0OgotCSAgOC4gaWYgdGhlIHNpbmsgcGFkIGlzIGFjdGl2YXRlZCwgd2UgYXJlIGluIHB1bGwgbW9kZS4gc3VjY2VlZC4KLQkgIC0gICAgIG90aGVyd2lzZSBhY3RpdmF0ZSBib3RoIHBhZHMgaW4gcHVzaCBtb2RlIGFuZCBzdWNjZWVkLgotCSAgUHV0dGluZyBpdCBiYWNrIGZpeGVzIHBsYXliYWNrIG9mIHdlYm0gaW4gd2Via2l0K2dzdHJlYW1lciAxLjAgLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjAwMwotCi0yMDEyLTA1LTEzIDE2OjU5OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjExLjkxID09PQotCi0yMDEyLTA1LTEzIDE2OjAyOjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSAgUmVsZWFzZSAwLjExLjkxCi0KLTIwMTItMDUtMTMgMTY6MDI6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEyLTA1LTEzIDE1OjU1OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGRjNzAyMDMgdG8gMzQyOWJhNgotCi0yMDEyLTA1LTA5IDE0OjIyOjIwICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJybkBheGlzLmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBPbmx5IGluY2x1ZGUgaW5pdC9kZWluaXQgb2YgYWxsb2MgdHJhY2luZyB3aGVuIGVuYWJsZWQKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzU4MDYKLQotMjAxMi0wNS0xMSAwOTowNzoxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXByb2Jlcy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWw6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGRvY3M6IGZpeCBkb2NzCi0JICBHU1RfRkxPV19XUk9OR19TVEFURSAtPiBHU1RfRkxPV19GTFVTSElORwotCi0yMDEyLTA1LTEwIDEyOjE1OjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0OgotCSAgZG9jczogaW1wcm92ZSBidWZmZXJwb29sIGRvY3MKLQotMjAxMi0wNS0wOCAyMDoxMjo0MiArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBwcmludCB0YWdzIGluIHRvYwotCi0yMDEyLTA1LTA1IDIyOjE3OjQzICswMzAwICBSYWltbyBKw6RydmkgPHJhaW1vLmphcnZpQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cG9sbC5jOgotCSAgZ3N0OiBGaXggY29tcGlsZXIgd2FybmluZ3Mgb24gbWluZ3ctdzY0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc1NTI1Ci0KLTIwMTItMDUtMDIgMTQ6MDA6NDMgKzAzMDAgIFNyZWVyZW5qIEJhbGFjaGFuZHJhbiA8c3JlZXJlbmouYmFsYWNoYW5kcmFuQGludGVsLmNvbT4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBhZGQgbWlzc2luZyBwYXJhbWV0ZXIgdG8gZGVmYXVsdF9tZW1fbWFwKCkKLQkgIEZpeGVzIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgY29ycmVjdG5lc3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc1Mjg5Ci0KLTIwMTItMDUtMDIgMDg6MDg6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiB1cGRhdGUgLmRlZiBmaWxlIGZvciBuZXcgQVBJCi0KLTIwMTItMDUtMDEgMjI6MzU6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuaDoKLQkgIHR5cGVmaW5kZmFjdG9yeTogbWFrZSBvYmplY3Qgc3RydWN0IG9wYXF1ZSBmb3Igbm93Ci0JICBNYWtlIG9wYXF1ZSB1bnRpbCB3ZSBoYXZlIHRpbWUgdG8gY2xlYW4gaXQgdXAgYSBsaXR0bGUuCi0KLTIwMTItMDUtMDEgMjI6MzA6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5Lmg6Ci0JICB0eXBlZmluZGZhY3Rvcnk6IGZpeCByZXR1cm4gdHlwZSBvZiBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnMoKQotCi0yMDEyLTA1LTAxIDIyOjI4OjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIHRvb2xzLCBiYXNlOiBkb24ndCBwb2tlIGludG8gR3N0VHlwZUZpbmRGYWN0b3J5IHN0cnVjdCwgdXNlIHB1YmxpYyBBUEkKLQotMjAxMi0wNS0wMSAyMjozMzozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkgIHR5cGVmaW5kZmFjdG9yeTogYWRkIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9oYXNfZnVuY3Rpb24oKQotCSAgQWRkIEFQSSBzbyBwZW9wbGUgZG9uJ3QgaGF2ZSB0byBwb2tlIHRoZSBzdHJ1Y3QgZm9yIHRoaXMuCi0KLTIwMTItMDUtMDEgMTU6NTI6MTQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGdzdGNhcHM6IFVwZGF0ZSBkb2NzIGZvciBnc3RfY2Fwc19pc19lcXVhbAotCSAgTlVMTCBjYXBzIGFyZW4ndCB2YWxpZCBjYXBzIGluIDEuMCBhbmQgYXJlbid0IGFjY2VwdGVkIGluCi0JICBnc3RfY2Fwc19pc19lcXVhbAotCi0yMDEyLTA1LTAxIDE5OjQ3OjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jOgotCSAgdXJpOiByZXF1aXJlIFVSSSBwcm90b2NvbCBiaXQgdG8gYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzIHRvIGJlIHZhbGlkCi0JICBXZSB3YW50IHRvIHJldHVybiBGQUxTRSB3aGVuIHJ1biBvbiBhIHdpbmRvd3Mtc3R5bGUgZmlsZSBwYXRoLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NDI5NgotCi0yMDEyLTA0LTI2IDE3OjI2OjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm0vYmFzZXNyYzogRG8gYnVmZmVycG9vbCBjb25maWd1cmF0aW9uIGluc2lkZSB0aGUgZGVmYXVsdCBkZWNpZGVfYWxsb2NhdGlvbigpIGltcGxlbWVudGF0aW9uCi0JICBUaGlzIGFsbG93cyBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlIGl0LCBhcyBpcyBuZWNlc3NhcnkgZm9yIGUuZy4gdGhlCi0JICB2aWRlby1jcm9wIG1ldGEuIEl0IGlzIG5vdyBuZWNlc3NhcnkgdGhhdCBhZnRlciBkZWNpZGVfYWxsb2NhdGlvbigpCi0JICB0aGVyZSBpcyBhbHdheXMgYSBhbGxvY2F0b3IgYW5kIGEgY29uZmlndXJlZCBidWZmZXIgcG9vbCBpbnNpZGUgdGhlCi0JICBxdWVyeS4KLQotMjAxMi0wNC0yOCAyMTozNzo1NiArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogc2V0IHJlc3VsdCBvbiBhY2NlcHQgY2FwcyBxdWVyeSB3aGVuIHRoZXJlIGlzIG5vIHBlZXIKLQotMjAxMi0wNS0wMSAxMDo1MDozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IHJlbW92ZSBfdHJ5X3RvX21lcmdlX3VwKCkKLQkgIEl0IGNhdXNlcyB0aGUgdGltZXN0YW1wIHRvIGdvIHdyb25nLCBzaG91bGQgbm90IGNhdXNlIG11Y2ggb2YgYSBwZXJmb3JtYW5jZQotCSAgaW5jcmVhc2UgYW5kIGluIHRoZSBjYXNlcyB3aGVyZSBpdCBpcyBmYXN0ZXIsIGl0IGlzIGJyb2tlbiBpbiAwLjEwIGFzIHdlbGwuCi0JICBXZSBzaG91bGQgdHJ5IHRvIHJldmlldyB0aGlzIHdoZW4gcmV3cml0aW5nIHRoZSBhZGFwdGVyIGZvciAwLjExIG1lbW9yeQotCSAgZmVhdHVyZXMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0NzkxCi0KLTIwMTItMDUtMDEgMDk6MjU6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBhZGFwdGVyOiBtYWtlIGludGVybmFscyBwcml2YXRlCi0JICBNYWtlIHRoZSBhZGFwdGVyIGZpZWxkcyBwcml2YXRlLgotCi0yMDEyLTA0LTMwIDIwOjI5OjIxICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiByZWFycmFuZ2Ugc3lzL3N0YXQuaCBpbmNsdXNpb24gcG9pbnQgZm9yIE1pbkdXCi0JICBnc3RwbHVnaW4uaCB1c2VkIHRvIGluY2x1ZGUgdGhpcyBmb3IgdXMsIGJ1dCBkb2Vzbid0IGFueSBsb25nZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc1MTcxCi0KLTIwMTItMDQtMzAgMDk6NTg6MDkgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkgIGV2ZW50OiBhZGQgbmV3IHNlZWsgc25hcCBmbGFncwotCSAgVGhleSBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgc25hcHBpbmcgYmVoYXZpb3IgKHRvIHByZXZpb3VzLCBuZXh0LCBvcgotCSAgbmVhcmVzdCBsb2NhdGlvbiwgd2hlcmUgcmVsZXZhbnQpIHdoZW4gc2Vla2luZy4KLQkgIFRoZSBzZWVraW5nIGltcGxlbWVudGF0aW9uIChlZywgZGVtdXhlcikgbWF5IGN1cnJlbnRseSBpZ25vcmUgc29tZQotCSAgb3IgYWxsIG9mIHRoZXNlIGZsYWdzLgotCi0yMDEyLTA0LTI5IDIwOjA2OjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSAgZG9jczogcmVtb3ZlIHJlZmVyZW5jZSB0byByZW1vdmVkIEFQSSBpbiBwbHVnaW4gZG9jcwotCi0yMDEyLTA0LTI5IDIwOjA2OjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgcGx1Z2luOiBhdm9pZCBzb21lIHJlbG9jYXRpb25zCi0KLTIwMTItMDQtMjkgMTg6MzU6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHBsdWdpbjogcmVtb3ZlIGdzdF9wbHVnaW5fbmFtZV9maWx0ZXIKLQkgIEl0J3Mgb25seSB1c2VkIGludGVybmFsbHksIG1vc3Qgb3RoZXIgdXNlcnMgd2lsbCBsaWtlbHkKLQkgIHdhbnQgdG8gdXNlIGdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbigpIGRpcmVjdGx5IGluc3RlYWQKLQkgIChhbmQgaWYgbm90LCB0aGV5IGNhbiBlYXNpbHkgd2FsayB0aGUgbGlzdCBhbmQgZG9pbmcgdGhlCi0JICBzdHJjbXAgdGhlbXNlbHZlcykuCi0KLTIwMTItMDQtMjkgMTc6NDY6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBwbHVnaW46IHVzZSBHc3RPYmplY3QgZmxhZ3MgZm9yIHBsdWdpbiBmbGFncwotCi0yMDEyLTA0LTI5IDE3OjAzOjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICBwbHVnaW46IG1ha2UgR3N0UGx1Z2luIG9iamVjdCBzdHJ1Y3R1cmUgb3BhcXVlIGZvciBub3cKLQkgIFRoZXJlJ3Mgbm8gcmVhc29uIGFueW9uZSB3b3VsZCB3YW50IHRvIGRlcml2ZSBmcm9tIHRoaXMsIHNvCi0JICBqdXN0IG1ha2Ugb3BhcXVlIHVudGlsIHdlIG1hbmFnZSB0byBtYWtlIGFsbCB0aGUgcHJpdmF0ZSBiaXRzCi0JICBwcml2YXRlIHByb3Blcmx5ICh3aGljaCBJJ20gbm90IGRvaW5nIHJpZ2h0IG5vdyBiZWNhdXNlIGl0J3MKLQkgIG1vcmUgaW52YXNpdmUgYW5kIEkgaGF2ZSByZWdpc3RyeSBtb2RpZmljYXRpb25zIGxvY2FsbHkgd2hpY2gKLQkgIHRvdWNoIGFsbCB0aGF0IGNvZGUgYXMgd2VsbCkuCi0KLTIwMTItMDQtMjkgMTY6NDk6NTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgdG9vbHM6IHVzZSBwdWJsaWMgYWNjZXNzb3JzIGZvciBwbHVnaW4gZGVzY3JpcHRpb24gZGV0YWlscwotCSAgTW9zdGx5IGFueXdheSAoZmxhZ3Mgc3RpbGwgbmVlZCBzb3J0aW5nIG91dCkuCi0KLTIwMTItMDQtMjkgMTY6NDY6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBwbHVnaW46IHJlbW92ZSBnc3RfcGx1Z2luX2dldF9tb2R1bGUoKQotCSAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgcmVhbGx5LCBhbmQgaXQncyBub3QKLQkgIGNsZWFyIHdoYXQgYW55b25lIHdvdWxkIGRvIHdpdGggdGhpcy4gSXQncyB1bnVzZWQgYXMKLQkgIGZhciBhcyBJJ20gYXdhcmUsIHNvIGp1c3QgcmVtb3ZlIGl0IGZvciBub3cuCi0KLTIwMTItMDQtMjkgMTY6MjA6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBwbHVnaW46IGFkZCBhY2Nlc3NvciBmb3IgcmVsZWFzZSBkYXRlIHRpbWUgc3RyaW5nIGluIHBsdWdpbiBkZXNjcmlwdGlvbgotCSAgQVBJOiBnc3RfcGx1Z2luX2dldF9yZWxlYXNlX2RhdGVfc3RyaW5nKCkKLQotMjAxMi0wNC0yOSAxNTo1MzowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKLQkgIHRlc3RzOiB1c2UgcHVibGljIGFjY2Vzc29ycyB0byBnZXQgcGx1Z2luIGRlc2NyaXB0aW9uIGRldGFpbHMKLQotMjAxMi0wNC0yOSAxMzoyODowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGdzdG9iamVjdDogZ2l2ZSB0aGUgMjB0aCBxdWV1ZSBlbGVtZW50IGEgZGlmZmVyZW50IG5hbWUgdGhhbiB0aGUgZmlyc3QgcXVldWUyIG9uZQotCSAgRml4ZXMgaXNzdWUgd2l0aCB0aGUgZGVmYXVsdCBuYW1pbmcgc2NoZW1lLgotCi0yMDEyLTA0LTE4IDE3OjM3OjI1ICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIEZpeCBmb3JtYXQgc3RyaW5nIGluIGdyYW1tYXIueQotCSAgRml4ZXMgIzY3NDg0OQotCi0yMDEyLTA0LTI1IDIwOjE0OjEzICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmM6Ci0JICBjb250cm9sYmluZGluZ3M6IGFkZCBjb21tZW50cyBmb3Igc3BhcnNlIGNvbnRyb2wgc291cmNlCi0KLTIwMTItMDQtMjUgMjA6MTA6MTEgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5jOgotCSAgY29udHJvbGxlcjogZW11bGF0ZSBfZ2V0X2dfdmFsdWVfYXJyYXkoKQotCSAgQWRkIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgYmFzZWNsYXNzLgotCi0yMDEyLTA0LTI1IDA5OjQ3OjEwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuaDoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2NvbnRyb2wtc291cmNlcy5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBjb250cm9sbGVyOiBleHBhbmQgdGhlIGFwaSB0byBvZmZlciBmdW5jdGlvbnMgZm9yIHBsYWluIGFuZCBHVmFsdWUgYXJyYXlzCi0JICBSZW5hbWUgdGhlIF9nZXRfdmFsdWVfYXJyYXkoKSBmdW5jdGlvbnMgdG8gX2dldF9nX3ZhbHVlX2FycmF5KCkgYW5kIHJlaW50cm9kdWNlCi0JICB0aGUgZm9ybWVyIHRvIG9wZXJhdGUgb24gcGxhaW4gdW5ib3hlZCBjIGRhdGF0eXBlcyAobGlrZSBpbiAwLjEwKS4gVGhlIF9nX3ZhbHVlCi0JICB2YXJpYW50cyBhcmUgZm9yIGJpbmRpbmdzIHdoaWxlIHRoZSBfdmFsdWUgb25lcyBhcmUgbW9yZSBzdWl0ZWQgdG8gcHJvY2Vzc2luZwotCSAgaW4gZWxlbWVudHMuCi0KLTIwMTItMDQtMjUgMTg6MTE6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogQWRkIGluc2FuaXR5LCBpbnNhbml0eS1nc3QgYW5kIGdzdC1lZGl0aW5nLXNlcnZpY2VzCi0KLTIwMTItMDQtMjUgMDk6MDY6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSAgYnVmZmVycG9vbDogUmVzZXQgdGhlIGJ1ZmZlciBiZWZvcmUgcmVsZWFzaW5nIGludG8gcG9vbAotCSAgUmVzZXQgdGhlIGJ1ZmZlciBub3QgYWZ0ZXIgd2UgYWNxdWlyZSBidXQgYmVmb3JlIHdlIHJlbGVhc2UgaW50byB0aGUgcG9vbC4gVGhpcwotCSAgbWFrZXMgc3VyZSB0aGF0IHRoZSBwb29sIG9ubHkgaGFzIGJ1ZmZlcnMgaW4gYSBjbGVhbiBzdGF0ZSBhbmQgdGhhdCB3ZSBjYW4gc2V0Ci0JICBleHRyYSBtZXRhZGF0YSBvbiBidWZmZXJzIGluIHRoZSBhY3F1aXJlIG1ldGhvZC4gdGhpcyBtZWFucyB0aGF0IHdlIG5lZWQgdG8KLQkgIHJlbW92ZSBhbiBhcmd1bWVudCBmcm9tIHRoZSBtZXRob2QuCi0KLTIwMTItMDQtMjMgMTU6MzI6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogTUFSS0VSIGlzIGZvciB0aGUgc3RhcnQgb2YgYSB0YWxrc3B1cnQKLQotMjAxMi0wNC0yNCAxNjowMTo1MiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdHM6IHBsdWcgc29tZSBsZWFrcwotCi0yMDEyLTA0LTIzIDE3OjA0OjU3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IGRvIG5vdCB1bnJlZiBmbHVzaF9zdGFydCB0d2ljZQotCSAgQmFzZWQgb24gcGF0Y2ggYnkgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotMjAxMi0wNC0yMyAxNjo1NzoxNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogcmVmcmVzaCBza2lwIGZvbGxvd2luZyBtZXJnZV91cCBhdHRlbXB0Ci0JICAuLi4gYXMgdGhlIGxhdHRlciBtaWdodCBub3cgYWRqdXN0IHNraXAgYXMgd2VsbC4KLQotMjAxMi0wNC0yMyAwOToxODo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBtZXNzYWdlOiBSZW1vdmUgY29tbWEgYXQgZW5kIG9mIGVudW0gbGlzdAotCSAgVGhpcyBjb21tYSBjb25mdXNlcyBzb21lIGNvbXBpbGVycy4KLQotMjAxMi0wNC0xOCAxNTozMToyMyArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICB0ZWU6IFJlbW92ZSB1bm5lZWRlZCB1bmxvY2sKLQotMjAxMi0wNC0xOCAwNToxMjo1NSArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGZpeCBoYXJkY29kZWQgMC4xMCB2ZXJzaW9uIGluIHdpbjMyIHBsdWdpbnNjYW5uZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzQyOTQKLQotMjAxMi0wNC0xNyAxNTozNzoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKLQkgIG1ldGE6IGFkZCBMT0NLRUQgZmxhZwotCSAgQWRkIGEgbmV3IExPQ0tFRCBmbGFnIHRvIHRoZSBtZXRhZGF0YS4gUmVmdXNlIHJlbW92aW5nIExPQ0tFRCBtZXRhZGF0YSBmcm9tCi0JICBhIGJ1ZmZlci4KLQkgIE1hcmsgdGhlIG1ldGFkYXRhIGZyb20gdGhlIGJ1ZmZlcnBvb2wgTE9DS0VELgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgTE9DS0VEIGZsYWcKLQotMjAxMi0wNC0xNyAxNDozODowMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bGlic2NwcC5jYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvdnMxMC9iYXNlL2Jhc2UudmN4cHJvajoKLQkqIHdpbjMyL3ZzMTAvYmFzZS9iYXNlLnZjeHByb2ouZmlsdGVyczoKLQkgIGNvbGxlY3RwYWRzMjogcmVuYW1lIHRvIGNvbGxlY3RwYWRzCi0KLTIwMTItMDQtMTcgMTI6NTQ6NDUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGVuc3VyZSB3cml0YWJsZSBoZWFkIGJ1ZmZlciBiZWZvcmUgc2tpcHBpbmcgcGFydCBvZiBpdAotCi0yMDEyLTA0LTE3IDEyOjI5OjUwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luLzAuMTAnCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jCi0KLTIwMTItMDQtMTcgMTI6MjM6MDUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSAgY29sbGVjdHBhZHMyOiBhbHdheXMgcmVjb3JkaW5nIGluY29taW5nIHNlZ21lbnQgaW5mbyBpZiBubyBidWZmZXJfZnVuYyBzZXQKLQotMjAxMi0wNC0xNyAxMDozODowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvcnVubmluZy54bWw6Ci0JICBkb2NzOiB1cGRhdGUgdGhlIGRlYnVnIGFuZCB0cmFjZSBlbnYgdmFyIGRvY3MKLQotMjAxMi0wNC0xNyAxMDozMzo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JICB0cmFjZTogdXNlIGdfcGFyc2VfZGVidWdfc3RyaW5nIGluc3RlYWQgb2YgYXRvaQotCSAgTWFrZSB0aGUgR1NUX1RSQUNFIGVudiB2YXJpYWJsZSB0YWtlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncwotCSAgZGVzY3JpYmluZyB0aGUgb3B0aW9ucyB0byBlbmFibGUgaW5zdGVhZCBvZiBhIG51bWJlci4KLQotMjAxMi0wNC0xNiAyMToxNDoxNyArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGdzdC1pbnNwZWN0OiBJZiBydW5uaW5nIHdpdGggLS1wcmludC1hbGwsIGZpeCBwcmludGluZyBvZiB0aGUgQ2hpbGRyZW46IGxpbmUKLQotMjAxMi0wNC0xNiAyMToxNDowMiArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGdzdC1pbnNwZWN0OiBJZiBydW5uaW5nIHdpdGggLS1wcmludC1hbGwsIGZpeCBwcmludGluZyBvZiBzaWduYWwgbmFtZXMKLQotMjAxMi0wNC0xNiAxNjozNjo1MiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIHdpbjMyOiBhZGQgbmV3IGNvbGxlY3RwYWRzMiBBUEkgdG8gLmRlZiBmaWxlCi0KLTIwMTItMDQtMTYgMTY6Mjk6MzQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vMC4xMCcKLQkgIENvbmZsaWN0czoKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmMKLQotMjAxMi0wNC0xNiAxNjoyNDoxOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5oOgotCSAgY29sbGVjdHBhZHMyOiBwcm92aWRlIHF1ZXJ5IGRlZmF1bHQgYW5kIGNhbGxiYWNrIGhhbmRsaW5nCi0JICAuLi4gd2hpY2ggcHJlc2VudGx5IG1haW5seSBzZXJ2ZXMgdG8gYW5zd2VyIFNFRUtJTkcgcXVlcnkgbmVnYXRpdmVseQotCSAgdG8gZGlzc3VhZGUgdXBzdHJlYW0gZW5jb2RlcnMgZnJvbSBkb2luZyBhbnkgc2Vla2luZyBhbmQKLQkgICJoZWFkZXIgZmluYWxpemF0aW9uIiAoc2luY2UgdGhlIHJldHVybmVkIHJlc3VsdCBvZiBwdXNoaW5nIGEKLQkgIHN0aWNreSBldmVudCBpcyBmYWlybHkgdXNlbGVzcyBub3dhZGF5cykuCi0KLTIwMTItMDQtMTYgMTY6MjQ6MTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuaDoKLQkgIGNvbGxlY3RwYWRzMjogbW9kaWZ5IGV2ZW50IGhhbmRsaW5nIHVzaW5nIGEgZGVmYXVsdCBldmVudCBoYW5kbGVyCi0JICAuLi4gdGhhdCBlbGVtZW50cyBzaG91bGQgImNoYWluIHVwIiB0by4KLQotMjAxMi0wNC0xNiAxNTozNToyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBzZWdtZW50OiBhZGQgcnVkZSBzZXJpYWxpemF0aW9uCi0JICBBc3Mgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBmdW5jdGlvbnMgZm9yIEdzdFNlZ21lbnQgc28gdGhhdCBnZHAgYW5kCi0JICBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyBzaG93IHRoZSBzZWdtZW50IHZhbHVlcy4gV2UgY29udmVydCB0byBhIEdzdFNlZ21lbnQKLQkgIGZpcnN0IHRvIG1ha2UgdGhpbmdzIGVhc2llci4uCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MTAwCi0KLTIwMTItMDItMDMgMTc6MDg6MzUgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSAgY29sbGVjdHBhZHMyOiBhc3N1bWUgMCBiYXNlZCBzZWdtZW50IGlmIG5vIHRpbWUgc2VnbWVudCB3YXMgcHJvdmlkZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjkzMDUKLQotMjAxMi0wNC0xNiAxMDoyODoxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBhZGQgc2l6ZSB0byBkZWJ1ZyBsb2cKLQotMjAxMi0wNC0xNiAxMDoyNzoyOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogU2V0IHNlcXVlbmNlIG51bWJlciBvbiBzZWdtZW50IGV2ZW50cwotCi0yMDEyLTA0LTE2IDEwOjIyOjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBGb3J3YXJkIGFsbCBzdGlja3kgZXZlbnRzIHdoZW4gc3dpdGNoaW5nIHBhZHMKLQotMjAxMi0wNC0xNiAxMDowNTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICB0ZWU6IFN0b3JlIHBhZCBzdGF0ZSBkaXJlY3RseSBpbnNpZGUgdGhlIHBhZHMgaW5zdGVhZCBvZiBHT2JqZWN0IHFkYXRhCi0KLTIwMTItMDQtMTYgMDk6NDU6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFNlbmQgcmVjb25maWd1cmUgZXZlbnQgb24gdGhlIG5ldyBhY3RpdmUgcGFkIHdoZW4gcGFkcyBhcmUgc3dpdGNoZWQKLQotMjAxMi0wNC0xNiAwOTowODo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2ZGIyNWJlIHRvIGRjNzAyMDMKLQotMjAxMi0wNC0xNCAwMzoyNzoyOSArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBSZW1vdmUgc2tpcHBlZCBwYXJ0IG9mIGJ1ZmZlciB3aGVuIG1hcHBpbmcgdGhlIGFkYXB0ZXIKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzQwODUKLQotMjAxMi0wNC0xNCAxMDoyNDozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICB0ZXN0czogYWRkIGFub3RoZXIgYWRhcHRlciB0ZXN0Ci0JICBUZXN0IHBlcmZvcm1hbmNlIG9mIG1lcmdpbmcKLQotMjAxMi0wNC0xNCAxMDoyMzo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBpbXByb3ZlIGRlYnVnCi0KLTIwMTItMDQtMTMgMTQ6MjI6MzQgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogZ3N0X3NpbmdsZV9xdWV1ZV9mbHVzaCB1bmxvY2tzIHRoZSBxdWV1ZSB0d2ljZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NDA0NAotCi0yMDEyLTA0LTEzIDEzOjM2OjM3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogTW9kZXJuaXplIGF1dG90b29scyBzZXR1cCBhIGJpdAotCSAgQWxzbyB3ZSBub3cgb25seSBjcmVhdGUgdGFyLmJ6MiBhbmQgdGFyLnh6IHRhcmJhbGxzLgotCi0yMDEyLTA0LTEzIDEzOjM2OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDQ2NGZlMTUgdG8gNmRiMjViZQotCi0yMDEyLTA0LTEzIDExOjU4OjQ5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHBsdWcgY2FwcyBsZWFrCi0KLTIwMTItMDQtMTMgMDg6MTA6MTkgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5jOgotCSAgY29udHJvbGJpbmRpbmc6IG9ubHkgdGFrZSBhIHdlYWsgcmVmIG9uIHRoZSBvYmplY3QKLQkgIEZpeGVzIHRoZSBsZWFrcyBpbiB0aGUgdGVzdHMuIEFkZGVkIGEgVE9ETyBjb21tZW50IHRvIGV2ZW50dWFsbHkgcmV3b3JrIHRoaXMKLQkgIHNvbWUgbW9yZSAod2hpbGUgd2UgY2FuKS4KLQotMjAxMi0wNC0xMiAxODoxNToyNyAtMDQwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9AY29sbGFib3JhLmNvbT4KLQotCSogQW5kcm9pZC5tazoKLQkgIFN5bmMgQW5kcm9pZC5tayBlbnRyaWVzIHRvIHRoZSBuZXcgbWFqb3IgdmVyc2lvbgotCSAgQ2hhbmdlIG5hbWluZyBvbiB0aGUgcGtnY29uZmlnIGZpbGVzIHRvIHJlZmxlY3QKLQkgIHRoZSAwLjEwIC0+IDEuMCBidW1wLgotCi0yMDEyLTA0LTEyIDE0OjU5OjUyICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jOgotCSAgY29udHJvbGxlcjogQ2hhaW4gdXAgdG8gcGFyZW50IGNsYXNzIGRpc3Bvc2UvZmluYWxpemUKLQkgIEF2b2lkcyBsZWFrcwotCi0yMDEyLTA0LTEyIDE0OjU5OjMxICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmM6Ci0JICBjb25zaXN0ZW5jeWNoZWNrZXI6IFVzZSBnc3Rfb2JqZWN0X3tyZWZ8dW5yZWZ9IHdoZXJlIGFwcGxpY2FibGUKLQkgIEFsbG93cyB1cyB0byBkZWJ1ZyBvYmplY3QgbGlmZQotCi0yMDEyLTA0LTEyIDE0OjU4OjQ3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkgIGdzdDogVXNlIGdzdF9vYmplY3Rfe3JlZnx1bnJlZn0gd2hlcmUgYXBwbGljYWJsZQotCSAgQWxsb3dzIHVzIHRvIGRlYnVnIG9iamVjdCBsaWZlCi0KLTIwMTItMDQtMTIgMTE6NTM6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogaW1wcm92ZSBhcmcgY2hlY2tpbmcKLQkgIEFsbG93IGlkeCA9PSAwIGFuZCBsZW5ndGggPT0gLTEgb24gZW1wdHkgYnVmZmVycyBmb3IgdGhlIF9yYW5nZSBtZXRob2RzLgotCi0yMDEyLTA0LTEyIDExOjE4OjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjExLjkwID09PQotCi0yMDEyLTA0LTEyIDA5OjU3OjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMS45MAotCi0yMDEyLTA0LTEyIDA5OjU2OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxMi0wNC0xMSAxMzoyMDoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZml4IG1lcmdlIGVycm9yCi0KLTIwMTItMDQtMTEgMTI6NTg6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSAgcXVldWUyOiBzZXQgYnVmZmVyIHRvIE5VTEwgYmVmb3JlIHB1bGwKLQotMjAxMi0wNC0xMSAxMjo1NDozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUyLmM6Ci0JICB0ZXN0czogcG9ydCBxdWV1ZTIgdGVzdHMgdG8gMC4xMQotCi0yMDEyLTA0LTExIDEyOjUwOjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vMC4xMCcKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3R0b2MuYwotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYwotCi0yMDEyLTA0LTExIDEyOjM0OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBzaWduYWwgZGVsZXRlIGJlZm9yZSB3YWl0aW5nCi0JICBXaGVuIHdlIGRvbid0IGhhdmUgdGhlIHJlcXVlc3RlZCBkYXRhIGluIHRoZSByaW5nYnVmZmVyIGFuZCB3ZSBtb3ZlIG91ciByZWFkCi0JICBwb2ludGVyIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24sIHNpZ25hbCB0aGUgZGVsZXRlIGNvbmQgdG8gaW5mb3JtIHRoZSB3cml0ZXIKLQkgIHRoYXQgd2UgY2hhbmdlZCB0aGUgY3VycmVudCBmaWxsIGxldmVsLiBJZiB3ZSBkb24ndCwgdGhlIHdyaXRlciBtaWdodCBzdGF5Ci0JICBibG9ja2VkIGFuZCB3ZSBtaWdodCB3YWl0IGZvcmV2ZXIuCi0KLTIwMTItMDQtMTEgMTI6MTU6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSAgcXVldWUyOiBhZGQgdGVzdCBmb3IgcmluZ2J1ZmZlciBkZWFkbG9jawotCi0yMDEyLTA0LTExIDEyOjAyOjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiB1cGRhdGUgY3VycmVudCByZWFkIHBvc2l0aW9uIGJlZm9yZSB3YWl0aW5nCi0JICBXaGVuIHdlIGRvbid0IGhhdmUgZW5vdWdoIGJ5dGVzIGluIHRoZSByaW5nYnVmZmVyIHRvIHNhdGlzZnkgdGhlIGN1cnJlbnQKLQkgIHJlcXVlc3QsIGZpcnN0IHVwZGF0ZSB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIGJlZm9yZSB3YWl0aW5nLiBJZiB3ZSBkb24ndCBkbwotCSAgdGhhdCwgdGhlIHJpbmdidWZmZXIgbWlnaHQgYXBwZWFyIGZ1bGwgYW5kIHRoZSB3cml0ZXIgd2lsbCBuZXZlciB3cml0ZSBtb3JlCi0JICBieXRlcyB0byB3YWtlIHVzIHVwLgotCi0yMDEyLTA0LTExIDEyOjAwOjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBhZGQgcmFuZ2Ugb25seSBvbiBzaW5rcGFkCi0JICBPbmx5IGFkZCB0aGUgcmFuZ2Ugd2hlbiB3ZSByZWNlaXZlIGEgc2VnbWVudCBldmVudCBvbiB0aGUgc2lua3BhZC4gVGhlIGFkZF9yYW5nZQotCSAgbWV0aG9kIHdpbGwgbW9kaWZ5IHRoZSB3cml0ZSBwb3NpdGlvbiwgd2hpY2ggb25seSBtYWtlcyBzZW5zZSB0byBkbyBvbiB0aGUKLQkgIHNpbmtwYWQuCi0KLTIwMTItMDQtMTEgMTE6NTU6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBkZWJ1ZyBtZXNzYWdlCi0JICBXZSdyZSBub3Qgd3JpdGluZyB0byB0aGUgb2Zmc2V0IG9mIHRoZSBidWZmZXIKLQotMjAxMi0wNC0xMSAxMTo1NToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogYWRkX3JhbmdlIGFscmVhZHkgdXBkYXRlcyB0aGUgbGV2ZWwKLQotMjAxMi0wNC0xMCAxNDoxMToyNiArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHRvYy5jOgotCSAgdG9jOiBmaXggbWVtb3J5IGxlYWtzIHdoaWxlIGNvcHlpbmcgY29udGVudAotCi0yMDEyLTA0LTEwIDE0OjE4OjQ4ICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dG9jc2V0dGVyLmM6Ci0JICB0b2NzZXR0ZXI6IGZpeCBtZW1vcnkgbGVha3MgaW4gdW5pdCB0ZXN0Ci0KLTIwMTItMDQtMTAgMTQ6MTY6NTAgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYzoKLQkgIHRvYzogZml4IG1lbW9yeSBsZWFrcyBpbiB1bml0IHRlc3QKLQotMjAxMi0wNC0xMCAxNDoxODo0OCArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvY3NldHRlci5jOgotCSAgdG9jc2V0dGVyOiBmaXggbWVtb3J5IGxlYWtzIGluIHVuaXQgdGVzdAotCi0yMDEyLTA0LTEwIDE0OjE2OjUwICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dG9jLmM6Ci0JICB0b2M6IGZpeCBtZW1vcnkgbGVha3MgaW4gdW5pdCB0ZXN0Ci0KLTIwMTItMDQtMTAgMTQ6MTE6MjYgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3R0b2MuYzoKLQkgIHRvYzogZml4IG1lbW9yeSBsZWFrcyB3aGlsZSBjb3B5aW5nIGNvbnRlbnQKLQotMjAxMi0wNC0xMCAxOTozOTo1OCArMDMwMCAgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5AaW50ZWwuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IENsZWFuIHVwIGhlYWRlciBmaWxlcwotCi0yMDEyLTA0LTEwIDE2OjA3OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vMC4xMCcKLQotMjAxMi0wNC0xMCAxNjowNDo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogY2xlYXIgc2Vla2luZyBmbGFnIGluIGFsbCBjYXNlcwotCSAgQWxzbyBjbGVhciB0aGUgc2Vla2luZyBmbGFnIHdoZW4gZG93bnN0cmVhbSBpcyBpbiBwdWxsIG1vZGUuCi0KLTIwMTItMDQtMTAgMTI6NTU6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi8wLjEwJwotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdC5jCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jCi0KLTIwMTItMDQtMTAgMTI6NDk6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogYWRkIHRvYyBlbnRyeSByZWYvdW5yZWYKLQotMjAxMi0wNC0xMCAxMjowOTo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogc2V0IHNlZWtpbmcgZmxhZyB3aXRoIHRoZSBxdWV1ZSBsb2NrCi0KLTIwMTItMDQtMTAgMTE6MjA6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBLZWVwIHRyYWNrIG9mIHRoZSBzZWVraW5nIHN0YXRlCi0JICBTZXQgdGhlIHNlZWtpbmcgZmxhZyByaWdodCBiZWZvcmUgd2Ugc2VuZCBhIHNlZWsgZXZlbnQgdXBzdHJlYW0gYW5kIGRpc2NhcmQgYWxsCi0JICBkYXRhIHVudGlsbCB3ZSBzZWUgYSBmbHVzaC1zdG9wIGFnYWluLiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSBhY3RpdmF0ZQotCSAgdGhlIHJhbmdlIHRoYXQgd2Ugc2VlayB0byBpbW1lZGlhdGVseSBhZnRlciBzZW5kaW5nIHRoZSBzZWVrIGV2ZW50IGFuZCBpdCBpcwotCSAgcG9zc2libGUgdGhhdCB3ZSByZWNlaXZlIGRhdGEgaW4gb3VyIGNoYWluIGZ1bmN0aW9uIGZyb20gYmVmb3JlIHRoZSBzZWVrCi0JICB3aGljaCB3b3VsZCB0aGVuIGJlIGFkZGVkIHRvIHRoZSB3cm9uZyByYW5nZSByZXN1bHRpbmcgaW4gZGF0YSBjb3JydXB0aW9uLgotCi0yMDEyLTA0LTEwIDExOjE2OjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBtYWtlIHJhbmdlIG9uIG5ld3NlZ21lbnQgZm9yIHJpbmdidWZmZXIKLQkgIFdoZW4gdXNpbmcgdGhlIHJpbmdidWZmZXIsIGhhbmRsZSB0aGUgbmV3c2VnbWVudCBldmVudCBsaWtlIHdlIGhhbmRsZSBpdCB3aGVuCi0JICB1c2luZyB0aGUgdGVtcC1maWxlIG1vZGU6IGNyZWF0ZSBhIG5ldyByYW5nZSBmb3IgdGhlIG5ldyBieXRlIHNlZ21lbnQuIFRoZSBuZXcKLQkgIHNlZ21lbnQgc2hvdWxkIG5vcm1hbGx5IGFscmVhZHkgYmUgY3JlYXRlZCB3aGVuIHdlIGRvIGEgc2Vlay4KLQotMjAxMi0wNC0wOSAxNjo0MjozMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi8wLjEwJwotCi0yMDEyLTA0LTA5IDE2OjQwOjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBEb24ndCB1c2UgYnVmZmVyIGFmdGVyIHB1c2hpbmcgaXQgZG93bnN0cmVhbQotCi0yMDEyLTA0LTA5IDE2OjA0OjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luLzAuMTAnCi0KLTIwMTItMDQtMDkgMTU6NTg6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogRmFpbCBpZiBhIHBhZCBmb3IgYSBub24tcmVxdWVzdCB0ZW1wbGF0ZSBpcyByZXF1ZXN0ZWQKLQotMjAxMi0wNC0wOSAxMzo0MDozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSAgZWxlbWVudDogdXNlIHF1YXJrcyB3aGVuIHN0b3Jpbmcgc3RhbmRhcmQgbWV0YWRhdGEgaW4gc3RydWN0dXJlcwotCi0yMDEyLTA0LTA5IDEzOjA1OjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgcGx1Z2luczogdXNlIG5ldyBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhKCkKLQotMjAxMi0wNC0wOSAxMjo0Nzo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZWxlbWVudDogYWRkIGdzdF9lbGVtZW50X2NsYXNzX3tzZXQsYWRkfV9zdGF0aWNfbWV0YWRhdGEoKQotCSAgQWRkIGdzdF9lbGVtZW50X2NsYXNzX3thZGQsc2V0fV9tZXRhZGF0YSgpIHZhcmlhbnRzIGZvciBzdGF0aWMgc3RyaW5ncywKLQkgIHNvIHdlIGNhbiBhdm9pZCB1bm5lY2Vzc2FyeSBnX3N0cmR1cCgpcy4KLQkgIEFQSTogZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YSgpCi0JICBBUEk6IGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEoKQotCi0yMDEyLTA0LTA4IDIxOjE3OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9zdHJlYW0tc3RhdHVzLmM6Ci0JICB0YXNrOiByZW1vdmUgZ3N0X3Rhc2tfc2V0X3ByaW9yaXR5KCkKLQkgIEl0IGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcuCi0KLTIwMTItMDEtMTQgMDA6MzE6MzIgLTA1MDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIHdpbjMyL3ZzMTAvQ29tbW9uLnByb3BzOgotCSogd2luMzIvdnMxMC9MaWJyYXJ5LnByb3BzOgotCSogd2luMzIvdnMxMC9QbHVnaW4ucHJvcHM6Ci0JKiB3aW4zMi92czEwL1JlYWRNZS50eHQ6Ci0JKiB3aW4zMi92czEwL1Rvb2wucHJvcHM6Ci0JKiB3aW4zMi92czEwL2Jhc2UvYmFzZS52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9iYXNlL2Jhc2UudmN4cHJvai5maWx0ZXJzOgotCSogd2luMzIvdnMxMC9jb250cm9sbGVyL2NvbnRyb2xsZXIudmN4cHJvajoKLQkqIHdpbjMyL3ZzMTAvY29udHJvbGxlci9jb250cm9sbGVyLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ2VuZXJhdGVkL2dlbmVyYXRlZC52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9nZW5lcmF0ZWQvZ2VuZXJhdGVkLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ3N0LWluc3BlY3QvZ3N0LWluc3BlY3QudmN4cHJvajoKLQkqIHdpbjMyL3ZzMTAvZ3N0LWluc3BlY3QvZ3N0LWluc3BlY3QudmN4cHJvai5maWx0ZXJzOgotCSogd2luMzIvdnMxMC9nc3QtbGF1bmNoL2dzdC1sYXVuY2gudmN4cHJvajoKLQkqIHdpbjMyL3ZzMTAvZ3N0LWxhdW5jaC9nc3QtbGF1bmNoLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ3N0LXR5cGVmaW5kL2dzdC10eXBlZmluZC52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9nc3QtdHlwZWZpbmQvZ3N0LXR5cGVmaW5kLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ3N0Y29yZWVsZW1lbnRzL2dzdGNvcmVlbGVtZW50cy52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9nc3Rjb3JlZWxlbWVudHMvZ3N0Y29yZWVsZW1lbnRzLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvZ3N0cmVhbWVyLnNsbjoKLQkqIHdpbjMyL3ZzMTAvZ3N0cmVhbWVyL2dzdHJlYW1lci52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9nc3RyZWFtZXIvZ3N0cmVhbWVyLnZjeHByb2ouZmlsdGVyczoKLQkqIHdpbjMyL3ZzMTAvbmV0L25ldC52Y3hwcm9qOgotCSogd2luMzIvdnMxMC9uZXQvbmV0LnZjeHByb2ouZmlsdGVyczoKLQkgIHdpbjMyOiBhZGQgVlMgMTAgUHJvamVjdCBmaWxlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjIxOQotCi0yMDEyLTA0LTA4IDE4OjI1OjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIHdpbjMyOiB1cGRhdGUgZm9yIHZlcnNpb24gY2hhbmdlcwotCi0yMDEyLTA0LTA3IDE2OjM1OjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luLzAuMTAnCi0KLTIwMTItMDQtMDcgMTY6MDY6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBhZGQgbmV3IFRPQyBBUEkgdG8gbGliZ3N0cmVhbWVyLmRlZgotCSAgRml4ZXMgJ21ha2UgY2hlY2snLgotCi0yMDEyLTA0LTA3IDE2OjA1OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JICB0ZXN0czogYWRkIG5ldyB0b2MgdGVzdCBiaW5hcmllcyB0byAuZ2l0aWdub3JlCi0KLTIwMTItMDQtMDcgMTY6MDQ6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHRvYy5jOgotCSAgZ3N0OiBkb24ndCBleHBvcnQgcHJpdmF0ZSBUT0MgZnVuY3Rpb25zCi0KLTIwMTItMDQtMDcgMTU6NDI6MDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vMC4xMCcKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RhdG9taWNxdWV1ZS5jCi0KLTIwMTItMDItMjQgMTU6MjQ6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSAgYXRvbWljcXVldWU6IGZpeCByYWNlCi0JICBBZnRlciBhIHdyaXRlciBoYXMgd3JpdHRlbiB0byBpdHMgcmVzZXJ2ZWQgd3JpdGUgbG9jYXRpb24sIGl0IGNhbiBvbmx5IG1ha2UgdGhlCi0JICBsb2NhdGlvbiBhdmFpbGFibGUgZm9yIHJlYWRpbmcgaWYgYWxsIG9mIHRoZSB3cml0ZXJzIHdpdGggbG93ZXIgbG9jYXRpb25zIGhhdmUKLQkgIGZpbmlzaGVkLgotCi0yMDEyLTAyLTI0IDEyOjUxOjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YXRvbWljcXVldWUuYzoKLQkgIGF0b21pY3F1ZXVlOiBmaXggc3VidGxlIHJhY2UKLQkgIEZpeCBhIHJhY2Ugd2hlcmUgdGhlIHJlYWRlciB3b3VsZCBzZWUgdGhlIHVwZGF0ZWQgdGhlIHRhaWwgcG9pbnRlciBiZWZvcmUgdGhlCi0JICB3cml0ZSBjb3VsZCB3cml0ZSB0aGUgZGF0YSBpbnRvIHRoZSBxdWV1ZS4gRml4IHRoaXMgYnkgaGF2aW5nIGEgc2VwYXJhdGUgcmVhZGVyCi0JICB0YWlsIHBvaW50ZXIgdGhhdCBpcyBvbmx5IGluY3JlbWVudGVkIGFmdGVyIHRoZSB3cml0ZXIgd3JvdGUgdGhlIGRhdGEuCi0KLTIwMTItMDQtMDcgMTU6MjA6MDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IHNldCBkZWZhdWx0IGJsb2NrIHNpemUgZnJvbSBsb2NhbCBkZWZpbmUKLQkgIERvZXNuJ3QgYWN0dWFsbHkgY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlLCBqdXN0IG1ha2VzIHVzZSBvZiB0aGUKLQkgIGRlZmluZSB0aGVyZSBpcy4gU3VwZXJmaWNpYWwgdGVzdGluZyB3aXRoIGZha2VzaW5rIGFuZCBqcGVnZGVjIGRpZAotCSAgbm90IHJldmVhbCBpbXByb3ZlZCBwZXJmb3JtYW5jZSBmb3IgYmlnZ2VyIGJsb2NrIHNpemVzLCBzbyBsZWF2ZQotCSAgZGVmYXVsdCBhcyBpdCBpcy4KLQotMjAxMi0wNC0wNiAxNjo0Njo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZG9uJ3QgdXBkYXRlIHRoZSBjdXJyZW50IHJlYWRpbmdfcG9zIGluIGZsdXNoCi0JICBBIGZsdXNoIGZyb20gdGhlIHVwc3RyZWFtIGVsZW1lbnQgc2hvdWxkIG5vdCBtYWtlIGJ1ZmZlcmluZyBnbyB0byAwLCB0aGUgbmV4dAotCSAgcHVsbCByZXF1ZXN0IG1pZ2h0IGJlIGluc2lkZSBhIHJhbmdlIHRoYXQgd2UgaGF2ZSBhbmQgdGhlbiB3ZSBkb24ndCBuZWVkIHRvCi0JICBidWZmZXIgYXQgYWxsLiBJZiB0aGUgbmV4dCBwdWxsIGlzIG91dHNpZGUgYW55dGhpbmcgd2UgaGF2ZSwgYnVmZmVyaW5nIHdpbGwKLQkgIGhhcHBlbiBhcyB1c3VhbCBhbnl3YXkuCi0KLTIwMTItMDQtMDYgMTI6NDI6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBmb3IgbWVyZ2VkIGNoYW5nZXMKLQotMjAxMi0wNC0wNiAxMjozNzo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICcwLjEwJwotCi0yMDEyLTA0LTA2IDEyOjMyOjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBjaGVjayB0aGUgcGFkIG1vZGUgb24gdGhlIHJpZ2h0IHBhZAotCi0yMDEyLTA0LTA2IDEyOjI0OjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmb3J3YXJkIGZsdXNoIGV2ZW50cyBjb3JyZWN0bHkKLQkgIFdlIHdhbnQgdG8gZm9yd2FyZCB0aGUgZmx1c2ggZXZlbnRzIHJlY2VpdmVkIG9uIHRoZSBzaW5rcGFkIHdoZW5ldmVyIHRoZSBzcmNwYWQKLQkgIGlzIGFjdGl2YXRlZCBpbiBwdXNobW9kZSwgd2hpY2ggY2FuIGFsc28gaGFwcGVuIHdoZW4gdXNpbmcgdGhlIFJJTkdCVUZGRVIgb3IKLQkgIERPV05MT0FEIG1vZGUgYW5kIGRvd25zdHJlYW0gZmFpbGVkIHRvIGFjdGl2YXRlIHVzIGluIHB1bGwgbW9kZS4KLQotMjAxMi0wNC0wNSAyMTo1NjowNSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmM6Ci0JICBjb250cm9sYmluZGluZzogY2hhaW4gdXAgb24gZGlzcG9zZSBhbmQgZmluYWxpemUKLQotMjAxMi0wNC0wNSAyMTo1NTowNyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgZ3N0b2JqZWN0OiB1bnBhcmVudCB0aGUgY29udHJvbGJpbmRpbmcgb24gZGlzcG9zZQotCi0yMDEyLTA0LTA1IDIxOjA3OjU1ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5jOgotCSAgY29udHJvbGxlcjogZHVwIHRoZSBvYmplY3RzIHRvIGF2b2lkIHByZW1hdHVyZSBmcmVlcwotCi0yMDEyLTA0LTA1IDIxOjA2OjE0ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y29udHJvbGxlci5jOgotCSAgY29udHJvbGxlcjogYWRkIGEgZmluYWxpemVyIGZvciB0aGUgdGVzdCBjb250cm9sYmluZGluZ3MKLQkgIE5vIGlkZWEgd2h5IHZhbGdyaW5kIHN0aWxsIGluaXN0cyB0aGF0IHRoZXJlIGFyZSBsZWFrcy4KLQotMjAxMi0wNC0wNSAxODo0MjozMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA3ZmRhNTI0IHRvIDQ2NGZlMTUKLQotMjAxMi0wNC0wNSAxNDoxNzoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JICBnc3Q6IENoYW5nZSBuYW1lIHBhcmFtZXRlciBvZiBHU1RfUExVR0lOX0RFRklORSgpIHRvIG5vdCB0YWtlIGEgc3RyaW5nIGFueW1vcmUKLQkgIFRoaXMgd2lsbCBiZSBuZWVkZWQgd2hlbiB3ZSBsYXRlciBhZGQgc3VwcG9ydCBmb3Igc3RhdGljIGxpbmtpbmcKLQkgIG9mIHBsdWdpbnMgd2l0aG91dCBpbnRyb2R1Y2luZyBuZXcgQVBJIG9yIGNoYW5naW5nIGV4aXN0aW5nIEFQSS4KLQotMjAxMi0wNC0wNSAxMzoyMzowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JICBnc3RwbHVnaW46IEFkZCBoYWNrIGZvciBoYW5kbGluZyAwLjExLjlYIGFuZCAwLjExLjg5Llggd2l0aCBYPjAgdGhlIHNhbWUgYXMgMS4wLjAKLQkgIEFsc28gdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlciB0byAwLjExLjg5LjEKLQotMjAxMi0wNC0wNSAxMjoyMjoxMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0b2NzZXR0ZXIuYzoKLQkgIHRvY3NldHRlcjogY2xlYXIgbXV0ZXggdXBvbiBmcmVlCi0KLTIwMTItMDQtMDUgMTA6NTY6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKLQkgIHJlZ2lzdHJ5OiBTZXQgcmVnaXN0cnkgdmVyc2lvbiB0byAxLjAuMCB0b28KLQotMjAxMi0wNC0wNSAxMDozNjowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICcwLjEwJwotCSAgQ29uZmxpY3RzOgotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYwotCi0yMDEyLTA0LTA1IDEwOjAzOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBzdG9wIHdhaXRpbmcgZm9yIG1vcmUgZGF0YSBhZnRlciBFT1MKLQkgIFdoZW4gd2UgaGF2ZSBFT1MsIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGUgYnVmZmVyIGFuZCBtYWtlIHN1cmUgd2UgZG9uJ3QKLQkgIHdhaXQgZm9yIG1vcmUgZGF0YS4gQWxzbyBjbGlwIHRoZSBvdXRwdXQgYnVmZmVyIHRvIHRoZSBhbW91bnQgb2YgcmVtYWluaW5nCi0JICBieXRlcy4KLQotMjAxMi0wNC0wNSAwOTo1Njo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogY2hlY2sgZm9yIGZpbGxlZCBidWZmZXIgY29ycmVjdGx5Ci0JICBXaGVuIHVzaW5nIHRoZSByaW5nYnVmZmVyIG1vZGUsIHRoZSBidWZmZXIgaXMgZmlsbGVkIHdoZW4gd2UgcmVhY2hlZCB0aGUKLQkgIG1heF9sZXZlbC5ieXRlcyBtYXJrIG9yIHRoZSB0b3RhbCBzaXplIG9mIHRoZSByaW5nYnVmZmVyLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KLQotMjAxMi0wNC0wNCAxMzowNzoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogYXZvaWQgd2FpdGluZyBmb3IgYSBmaWxsZWQgYnVmZmVyCi0JICBVc2UgYSB0aHJlc2hvbGQgdmFyaWFibGUgdG8gaG9sZCB0aGUgbWF4aW11bSBkaXN0YW5jZSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uCi0JICBmb3Igd2l0aCB3ZSB3aWxsIHdhaXQgaW5zdGVhZCBvZiBkb2luZyBhIHNlZWsuCi0JICBXaGVuIHVzaW5nIHRoZSByaW5nYnVmZmVyIGFuZCB0aGUgcmVxdWVzdGVkIG9mZnNldCBpcyBub3QgYXZhaWxhYmxlLCBhdm9pZAotCSAgd2FpdGluZyB1bnRpbCB0aGUgY29tcGxldGUgcmluZ2J1ZmZlciBpcyBmaWxsZWQgYnV0IGluc3RlYWQgZG8gYSBzZWVrIHdoZW4gdGhlCi0JICByZXF1ZXN0ZWQgZGF0YSBpcyBmdXJ0aGVyIHRoYW4gdGhlIHRocmVzaG9sZC4KLQkgIEF2b2lkIGRvaW5nIHRoZSBzZWVrIHR3aWNlIGluIHRoZSByaW5nYnVmZmVyIGNhc2UuCi0JICBVc2UgdGhlIHNhbWUgdGhyZXNob2xkIGZvciByaW5nYnVmZmVyIGFuZCBkb3dubG9hZCBidWZmZXJpbmcuCi0KLTIwMTItMDQtMDUgMDk6MDc6MTggKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBnc3RidWZmZXI6IGZpeCBjb21waWxlIHdhcm5pbmcKLQotMjAxMi0wNC0wNCAxMzoxMzo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9mYXEvZGV2ZWxvcGluZy54bWw6Ci0JKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKLQkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9yYW5kb20vYXV0b3Rvb2xzOgotCSogZG9jcy92ZXJzaW9uLmVudGl0aWVzLmluOgotCSogZ3N0LWVsZW1lbnQtY2hlY2subTQuaW46Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3R2ZXJzaW9uLmguaW46Ci0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSogcGtnY29uZmlnL01ha2VmaWxlLmFtOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXIucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXIucGMuaW46Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jOgotCSogdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JKiB0b29scy9NYWtlZmlsZS5hbToKLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkqIHRvb2xzL2dzdHJlYW1lci1jb21wbGV0aW9uOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgZ3N0OiBDaGFuZ2UgdmVyc2lvbmluZwotCSAgUmVtb3ZlIEdTVF9NQUpPUk1JTk9SIGFuZCByZXBsYWNlIGl0IGJ5IEdTVF9BUElfVkVSU0lPTgotCSAgQWxzbyBzZXQgR1NUX1ZFUlNJT05fe01BSk9SLE1JTk9SLE1JQ1JPLE5BTk99IGV4cGxpY2l0ZWx5Ci0JICBub3cuCi0JICBBbGwgdmVyc2lvbnMgYXJlIGF0IDEuMC4wIG5vdyBmb3IgdGhlIHJlbGVhc2Ugc29vbiBidXQKLQkgIEFQSS9BQkkgY2FuIHN0aWxsIGNoYW5nZSB1bnRpbCB0aGUgMS4wLjAgcmVsZWFzZS4KLQkgIE5leHQgcmVsZWFzZSB2ZXJzaW9ucyB1bnRpbCAxLjAuMCB3aWxsIGJlIDAuMTAuOVggYW5kCi0JICB0aGVzZSB3aWxsIGJlIHJlbGVhc2UgY2FuZGlkYXRlcy4gR1NUX1ZFUlNJT05fKiB3aWxsCi0JICBub25ldGhlbGVzcyBzdGF5IGF0IDEuMC4wLjAuCi0KLTIwMTItMDQtMDQgMTI6MjU6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vMC4xMCcKLQkgIENvbmZsaWN0czoKLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQKLQkgIGdzdC9NYWtlZmlsZS5hbQotCSAgZ3N0L2dzdC5jCi0JICBnc3QvZ3N0LmgKLQkgIGdzdC9nc3RldmVudC5jCi0JICBnc3QvZ3N0ZXZlbnQuaAotCSAgZ3N0L2dzdG1lc3NhZ2UuYwotCSAgZ3N0L2dzdG1lc3NhZ2UuaAotCSAgZ3N0L2dzdHF1YXJrLmMKLQkgIGdzdC9nc3RxdWFyay5oCi0JICBnc3QvZ3N0cXVlcnkuYwotCSAgZ3N0L2dzdHF1ZXJ5LmgKLQkgIGdzdC9nc3R0b2MuYwotCSAgZ3N0L2dzdHRvYy5oCi0JICBnc3QvZ3N0dG9jc2V0dGVyLmMKLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0dG9jLmMKLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2NzZXR0ZXIuYwotCi0yMDEyLTA0LTAzIDE2OjUxOjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IGltcHJvdmUgX3NldF9zaXplKCkKLQotMjAxMi0wNC0wMyAxNjo0NDo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXI6IG1ha2UgZ2V0X3NpemVzIGFuZCBfcmVzaXplIHdpdGggcmFuZ2VzCi0JICBNYWtlIHRoZSBfZ2V0X3NpemVzIGFuZCBfcmVzaXplIG1ldGhvZHMgd29yayBvbiBhIHJhbmdlIG9mIG1lbW9yeSB0byBtYWtlIHRoZW0KLQkgIG1vcmUgcG93ZXJmdWxsLgotCi0yMDEyLTA0LTAzIDE4OjI1OjQwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmM6Ci0JICBjb25zaXN0ZW5jeWNoZWNrZXI6IGFsbG93IHNvbWUgbW9yZSBldmVudHMgYmVmb3JlIGEgc2VnbWVudCBldmVudAotCi0yMDEyLTA0LTAzIDE1OjQ2OjI5ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dG9jc2V0dGVyLmM6Ci0JICB0b2NzZXR0ZXI6IHVzZSBuZXcgZ2xpYiBtdXRleCBhcGkKLQotMjAxMi0wNC0wMiAyMzoxNzoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIHRvb2xzOiBmaXggY29tcGlsZXIgd2FybmluZwotCSAgZ3N0LWxhdW5jaC5jOiBJbiBmdW5jdGlvbiDigJhwcmludF90b2NfZW50cnnigJk6Ci0JICBnc3QtbGF1bmNoLmM6NDQ2OjM6IGVycm9yOiB0aGUgc2l6ZSBvZiBhcnJheSDigJhzcGPigJkgY2Fu4oCZdCBiZSBldmFsdWF0ZWQgWy1XZXJyb3I9dmxhXQotCSAgZ3N0LWxhdW5jaC5jOjQ0NjozOiBlcnJvcjogdmFyaWFibGUtc2l6ZWQgb2JqZWN0IG1heSBub3QgYmUgaW5pdGlhbGl6ZWQKLQotMjAxMi0wNC0wMiAyMzoyOToyNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSAgdGVzdHM6IGFkZCBuZXcgdW5pdCB0ZXN0IGJpbmFyaWVzIHRvIC5naXRpZ25vcmUKLQotMjAxMi0wNC0wMiAyMzoyODoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogcmVmIG5ldyBlbnRyeSBlbnVtIHR5cGVzCi0JICBGaXhlcyAnbWFrZSBjaGVjaycsIGFnYWluLgotCi0yMDEyLTA0LTAyIDIzOjI0OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogYWRkIG5ldyBBUEkgdG8gLmRlZiBmaWxlCi0JICBGaXhlcyAnbWFrZSBjaGVjaycuCi0KLTIwMTItMDQtMDIgMjM6MjM6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHRvYy5jOgotCSAgdG9jOiBkb24ndCBleHBvcnQgcHJpdmF0ZSBmdW5jdGlvbnMKLQotMjAxMi0wNC0wMiAyMzoxNzoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIHRvb2xzOiBmaXggY29tcGlsZXIgd2FybmluZwotCSAgZ3N0LWxhdW5jaC5jOiBJbiBmdW5jdGlvbiDigJhwcmludF90b2NfZW50cnnigJk6Ci0JICBnc3QtbGF1bmNoLmM6NDQ2OjM6IGVycm9yOiB0aGUgc2l6ZSBvZiBhcnJheSDigJhzcGPigJkgY2Fu4oCZdCBiZSBldmFsdWF0ZWQgWy1XZXJyb3I9dmxhXQotCSAgZ3N0LWxhdW5jaC5jOjQ0NjozOiBlcnJvcjogdmFyaWFibGUtc2l6ZWQgb2JqZWN0IG1heSBub3QgYmUgaW5pdGlhbGl6ZWQKLQotMjAxMi0wNC0wMiAyMzoxNjozOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIGZvciBuZXcgdHJhbnNsYXRhYmxlIHN0cmluZ3MKLQotMjAxMi0wNC0wMiAyMzowMToxNyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicKLQotMjAxMi0wNC0wMiAyMjowOTowNyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0dG9jLmM6Ci0JKiBnc3QvZ3N0dG9jLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dG9jLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dG9jc2V0dGVyLmM6Ci0JICB0b2M6IHBvcnQgdG8gMC4xMQotCi0yMDEyLTAzLTIyIDA4OjM2OjAyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBhZGQgLWMsIC0tdG9jIHRvIHByaW50IHRoZSB0b2MKLQkgIFByaW50IHRoZSBuZXN0ZWQgY2hhcHRlciBhbmQgZWRpdGlvbiBzdHJ1Y3R1cmUgb2YgdGhlIGNoYXB0ZXJzIG1lc3NhZ2UuCi0KLTIwMTItMDMtMjggMjM6MTU6NDEgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSogZG9jcy9kZXNpZ24vcGFydC10b2MudHh0OgotCSAgZG9jczogYWRkIG92ZXJ2aWV3IG9mIEdzdFRvYyB1c2FnZQotCi0yMDEyLTAzLTE0IDIxOjE0OjIzICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IEFkZCBHc3RUb2MgYW5kIEdzdFRvY1NldHRlciBzZWN0aW9ucyB3aXRoIHJlbGF0ZWQgZnVuY3Rpb25zCi0KLTIwMTItMDMtMTQgMjE6MTM6MjIgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvY3NldHRlci5jOgotCSAgZ3N0Y2hlY2tzOiBBZGQgdW5pdCB0ZXN0IGZvciB0aGUgR3N0VG9jU2V0dGVyCi0KLTIwMTItMDMtMTQgMjE6MTI6MjIgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRvYy5jOgotCSAgZ3N0Y2hlY2tzOiBBZGQgdW5pdCB0ZXN0IGZvciB0aGUgR3N0VG9jCi0KLTIwMTItMDMtMTQgMjA6NDU6MzUgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3R0b2NzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0b2NzZXR0ZXIuaDoKLQkgIEFkZCBuZXcgR3N0VG9jU2V0dGVyIGludGVyZmFjZQotCi0yMDEyLTAzLTE0IDIwOjQyOjU2ICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSAgQWRkIG5ldyBUT0MgcXVlcnkKLQotMjAxMi0wMy0xNCAyMDo0MTo0OCArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBBZGQgbmV3IFRPQyBtZXNzYWdlCi0KLTIwMTItMDMtMTQgMjA6NDA6MzIgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSAgQWRkIG5ldyBUT0MgYW5kIFRPQyBzZWxlY3QgZXZlbnRzCi0KLTIwMTItMDMtMTQgMjA6MDE6NTEgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdHRvYy5jOgotCSogZ3N0L2dzdHRvYy5oOgotCSAgQWRkIGdlbmVyaWMgdGFibGUgb2YgY29udGVudHMgKFRPQykgc3VwcG9ydAotCi0yMDEyLTA0LTAyIDIxOjE1OjA5ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JICBNZXJnZSBicmFuY2ggJzAuMTAnCi0JICBDb25mbGljdHM6Ci0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0Ci0JICBnc3QvTWFrZWZpbGUuYW0KLQkgIGdzdC9nc3QuYwotCSAgZ3N0L2dzdC5oCi0JICBnc3QvZ3N0ZXZlbnQuYwotCSAgZ3N0L2dzdGV2ZW50LmgKLQkgIGdzdC9nc3RtZXNzYWdlLmgKLQkgIGdzdC9nc3RxdWFyay5jCi0JICBnc3QvZ3N0cXVhcmsuaAotCSAgZ3N0L2dzdHF1ZXJ5LmMKLQkgIGdzdC9nc3RxdWVyeS5oCi0JICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbQotCi0yMDEyLTA0LTAyIDE1OjMwOjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luLzAuMTAnCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jCi0KLTIwMTItMDQtMDIgMTU6MTM6MjQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBhbHdheXMgYXR0ZW1wdCB0byBwdXNoIGlmIG5vdC1saW5rZWQKLQkgIFRoaXMgYXZvaWRzIGVuZGluZyB1cCB3aXRoIHBsZW50eSBvZiBwZW5kaW5nIGRhdGEgKHNpbmNlIHdlJ2xsIG9ubHkKLQkgIHRyeSB0byBwYXJzZS9wdXNoIG9uZSBmcmFtZSBmcm9tIHRoZSBpbmNvbWluZyBidWZmZXIpLgotCSAgRml4ZXMgaW5jcmVhc2luZyBtZW1vcnkgY29uc3VtcHRpb24gd2hlbiBwYXJzZXJzIGFyZW4ndCBsaW5rZWQKLQkgIENvbmZsaWN0czoKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmMKLQotMjAxMi0wNC0wMiAxNToxMzoyNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGFsd2F5cyBhdHRlbXB0IHRvIHB1c2ggaWYgbm90LWxpbmtlZAotCSAgVGhpcyBhdm9pZHMgZW5kaW5nIHVwIHdpdGggcGxlbnR5IG9mIHBlbmRpbmcgZGF0YSAoc2luY2Ugd2UnbGwgb25seQotCSAgdHJ5IHRvIHBhcnNlL3B1c2ggb25lIGZyYW1lIGZyb20gdGhlIGluY29taW5nIGJ1ZmZlcikuCi0JICBGaXhlcyBpbmNyZWFzaW5nIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIHBhcnNlcnMgYXJlbid0IGxpbmtlZAotCi0yMDEyLTA0LTAxIDAzOjMwOjUxICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgVGltZW91dCBpcyBub3QgdXNlZCBvbiBXMzIKLQkgIEZpeGVzICM2NzMyNjcKLQotMjAxMi0wNC0wMiAxMTowOTo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIHRyYW5zOiBhZGQgdHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoCi0JICBBZGQgYW4gb3B0aW9uIHRvIGNvbnRyb2wgaWYgdHJhbnNmb3JtX2lwIGlzIGNhbGxlZCBpbiBwYXNzdGhyb3VnaCBtb2RlIG9yIG5vdC4KLQkgIGZvciBlbGVtZW50cyB0aGF0IGRvbid0IHdhbnQgdG8gbG9vayBhdCB0aGUgZGF0YSBpbiBwYXNzdGhyb3VnaCBtb2RlLCB0aGlzIGNhbgotCSAgYXZvaWQgc29tZSBleHRyYSBwcm9jZXNzaW5nLCBtb3N0bHkgaW4gc3ViY2xhc3Nlcy4KLQotMjAxMi0wMy0yMiAwODozNjowMiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogYWRkIC1jLCAtLXRvYyB0byBwcmludCB0aGUgdG9jCi0JICBQcmludCB0aGUgbmVzdGVkIGNoYXB0ZXIgYW5kIGVkaXRpb24gc3RydWN0dXJlIG9mIHRoZSBjaGFwdGVycyBtZXNzYWdlLgotCi0yMDEyLTAzLTI4IDIzOjE1OjQxICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkqIGRvY3MvZGVzaWduL3BhcnQtdG9jLnR4dDoKLQkgIGRvY3M6IGFkZCBvdmVydmlldyBvZiBHc3RUb2MgdXNhZ2UKLQotMjAxMi0wMy0xNCAyMToxNDoyMyArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBBZGQgR3N0VG9jIGFuZCBHc3RUb2NTZXR0ZXIgc2VjdGlvbnMgd2l0aCByZWxhdGVkIGZ1bmN0aW9ucwotCi0yMDEyLTAzLTE0IDIxOjEzOjIyICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2NzZXR0ZXIuYzoKLQkgIGdzdGNoZWNrczogQWRkIHVuaXQgdGVzdCBmb3IgdGhlIEdzdFRvY1NldHRlcgotCi0yMDEyLTAzLTE0IDIxOjEyOjIyICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYzoKLQkgIGdzdGNoZWNrczogQWRkIHVuaXQgdGVzdCBmb3IgdGhlIEdzdFRvYwotCi0yMDEyLTAzLTE0IDIwOjQ1OjM1ICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0dG9jc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dG9jc2V0dGVyLmg6Ci0JICBBZGQgbmV3IEdzdFRvY1NldHRlciBpbnRlcmZhY2UKLQotMjAxMi0wMy0xNCAyMDo0Mjo1NiArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIEFkZCBuZXcgVE9DIHF1ZXJ5Ci0KLTIwMTItMDMtMTQgMjA6NDE6NDggKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgQWRkIG5ldyBUT0MgbWVzc2FnZQotCi0yMDEyLTAzLTE0IDIwOjQwOjMyICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkgIEFkZCBuZXcgVE9DIGFuZCBUT0Mgc2VsZWN0IGV2ZW50cwotCi0yMDEyLTAzLTE0IDIwOjAxOjUxICswNDAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3R0b2MuYzoKLQkqIGdzdC9nc3R0b2MuaDoKLQkgIEFkZCBnZW5lcmljIHRhYmxlIG9mIGNvbnRlbnRzIChUT0MpIHN1cHBvcnQKLQotMjAxMi0wNC0wMSAxMjowMTozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiByZXVzZSBtb3JlIGNvZGUKLQotMjAxMi0wNC0wMSAxMTo0Mjo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVyOiBtYWtlIGZ1bmN0aW9uIHRvIGZpbmQgbWVtb3J5IGluIGEgYnVmZmVyCi0JICBNYWtlIGEgZnVuY3Rpb24gdG8gZmluZCB0aGUgbWVtb3J5IGJsb2NrcyBmb3IgYSByZWdpb24gaW4gYSBidWZmZXIuCi0KLTIwMTItMDMtMzEgMjE6MjY6MjIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JICBjaGlsZHByb3h5OiBmaXggbW9yZSBtaXNzaW5nIEdTVF9PQkpFQ1QgLT4gR19PQkpFQ1QgdXNlCi0KLTIwMTItMDMtMzEgMTg6MzQ6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogdXNlIGJ1ZmZlcl93cmFwCi0KLTIwMTItMDMtMzEgMTc6MTA6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVyOiBhZGQgcGVla19tZW1vcnkgbWV0aG9kCi0JICBBZGQgYSBwZWVya19tZW1vcnkgbWV0aG9kIHRoYXQgc2ltcGx5IGZldGNoZXMgdGhlIG1lbW9yeSBhdCBhbiBvZmZzZXQgd2l0aG91dAotCSAgcmVmY291bnRpbmcgb3IgbWVyZ2luZy4KLQotMjAxMi0wMy0zMSAxMjowMDo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIGdyYW1tYXIueTogZml4IGNoaWxkcHJveHkgY29kZQotCSAgSXQgdGFrZXMgR09iamVjdCBhbmQgbm90IEdzdE9iamVjdCBub3cKLQotMjAxMi0wMy0zMCAyMjo0NjowMiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkqIGdzdC9nc3RjaGlsZHByb3h5Lmg6Ci0JICBjaGlsZHByb3h5OiBpbmNsdWRlIHRoZSBjaGlsZCBuYW1lIGluIHRoZSBzaWduYWwKLQotMjAxMi0wMy0zMCAyMjo0NDozMSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlcjogdXBkYXRlIGZvciBjaGlsZHByb3h5IGFwaSBjaGFuZ2VzCi0KLTIwMTItMDMtMzAgMjI6MzY6MzUgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JICBjaGlsZHByb3h5OiBmaXggc2lnbmFsIHBhcmFtZXRlciB0eXBlcwotCi0yMDEyLTAzLTMwIDIyOjE3OjA5ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjaGlsZHByb3h5LmM6Ci0JICBjaGlsZHByb3h5OiB1c2UgR09iamVjdCBpbnN0ZWFkIG9mIEdzdE9iamVjdAotCSAgVGhpcyBtYWtlcyBpdCBwcm9zc2libGUgdG8gYmUgdXNlZCBtb3JlIHdpZGVseS4gRml4IGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIEFQSQotCSAgY2hhbmdlLgotCi0yMDEyLTAzLTMwIDIyOjAxOjU1ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuaDoKLQkgIGNoaWxkcHJveHk6IG1ha2UgZ2V0X2NoaWxkX2J5X25hbWUgdmlydHVhbAotCSAgQWxsb3dzIGltcGxlbWVudGF0aW9ucyB0byB1c2UgY3VzdG9tIG5hbWUtPm9iamVjdCBtYXBwaW5ncy4KLQotMjAxMi0wMy0zMCAyMjowMToyNiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkgIGNoaWxkcHJveHk6IGZpeCBpbmRlbnRhdGlvbgotCi0yMDEyLTAzLTMwIDE4OjA0OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlci50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVyOiBpbXByb3ZlIHRoZSBidWZmZXIgbWVtb3J5IG1ldGhvZHMKLQkgIGdzdF9idWZmZXJfdGFrZV9tZW1vcnkgLT4gZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5IGJlY2F1c2UgaW5zZXJ0IGlzIHdoYXQgdGhlCi0JICBtZXRob2QgZG9lcy4KLQkgIE1ha2UgYWxsIG1ldGhvZHMgZGVhbCB3aXRoIHJhbmdlcyBzbyB0aGF0IHdlIGNhbiByZXBsYWNlLCBtZXJnZSwgcmVtb3ZlIGFuZCBtYXAKLQkgIGEgY2VydGFpbiBzdWJzZXQgb2YgdGhlIG1lbW9yeSBpbiBhIGJ1ZmZlci4gV2l0aCB0aGUgbmV3IG1ldGhvZHMgd2UgY2FuIG1ha2UKLQkgIHNvbWUgY29kZSBuaWNlciBhbmQgcmV1c2UgbW9yZSBjb2RlLiBCZWluZyBhYmxlIHRvIGRlYWwgd2l0aCBhIHN1YnNldCBvZiB0aGUKLQkgIGJ1ZmZlciBtZW1vcnkgYWxsb3dzIHVzIHRvIG9wdGltaXplIG1vcmUgY2FzZXMgbGF0ZXIgKG1vc3Qgbm90YWJseSBSVFAgaGVhZGVycwotCSAgYW5kIHBheWxvYWQgdGhhdCBjb3VsZCBiZSBpbiBkaWZmZXJlbnQgbWVtb3J5IG9iamVjdHMpLgotCSAgTWFrZSBzb21lIG1vcmUgY29udmVuaWVudCBtYWNyb3MgdGhhdCBjYWxsIHRoZSBtb3JlIGdlbmVyaWMgcmFuZ2UgbWV0aG9kcy4KLQotMjAxMi0wMy0zMCAxNjo1MzowOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZGVsZW1lbnQ6IHBsdWcgY2FwcyBsZWFrcwotCi0yMDEyLTAzLTMwIDE2OjUzOjA1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSAgdHlwZWZpbmRoZWxwZXI6IGFsc28gdW5tYXAgY29sbGVjdGVkIG1hcHBlZCBidWZmZXJzCi0KLTIwMTItMDMtMzAgMTY6NTM6MDAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IHBsdWcgY2FwcyBsZWFrCi0KLTIwMTItMDMtMzAgMTE6NTg6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogUmVuYW1lIDo6ZXZlbnQoKSB0byA6OnNpbmtfZXZlbnQoKSBmb3IgY29uc2lzdGVuY3kKLQotMjAxMi0wMy0zMCAxMTo0OToxNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgYmFzZXNpbms6IGxvd2VyIEdTVF9CQVNFX1NSQ19GTEFHX0xBU1QKLQkgIEl0IHdvdWxkbid0IGxlYXZlIHRoYXQgbXVjaCByb29tIGZvciBzdWJjbGFzcyB1c2VycwotCi0yMDEyLTAzLTMwIDA4OjU1OjMzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgd2luMzI6IFVwZGF0ZSBkZWZzIGZpbGUKLQotMjAxMi0wMy0yOSAxODowMzozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgotCSAgYnl0ZXdyaXRlcjogQWN0dWFsbHkgY29tbWl0IHRoZSAuYyBmaWxlIGNoYW5nZXMgdG9vCi0KLTIwMTItMDMtMjkgMTc6NTk6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKLQkgIGJ5dGV3cml0ZXI6IEFkZCB1bmNoZWNrZWQvaW5saW5lIHZhcmlhbnQgb2YgZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXIoKQotCi0yMDEyLTAzLTI5IDE3OjUzOjQ3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBnc3RxdWVyeTogRml4IGFubm90YXRpb24KLQotMjAxMi0wMy0yOSAxNzo0NDowMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBGbHVzaCB0aGUgaW50ZXJuYWwgcXVldWUgd2hlbiB3ZSBzZWUgR1NUX0ZMT1dfRkxVU0hJTkcKLQkgIEVuc3VyZXMgdGhhdCB3ZSBkb24ndCBlbmQgdXAgd2l0aCBzdGFsZSBjb250ZW50cyAobGlrZSBHc3RRdWVyeSkgaW4KLQkgIHRoZSBpbnRlcm5hbCBHUXVldWUgYWZ0ZXIgYW55IGJsb2NraW5nIHVwc3RyZWFtIHRocmVhZCByZXR1cm5zLgotCi0yMDEyLTAzLTI5IDE3OjQzOjE3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IERvbid0IHVucmVmIEdzdFF1ZXJ5IHRyYXZlbGxpbmcgdGhyb3VnaCB0aGUgcXVldWUKLQkgIFVubGlrZSBldmVudHMgYW5kIGJ1ZmZlcnMsIHRoZSByZWZlcmVuY2UgaXMgbm90IGdpdmVuIHRvIHVzCi0KLTIwMTItMDMtMjkgMTc6MDg6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBwYXJzaW5nIGFsbG9jYXRpb24gcXVlcnkgbmVlZCBub3QgcHJvdmlkZSByZWZmZWQgY2FwcwotCSAgLi4uIGluIGxpbmUgd2l0aCBvdGhlciBxdWVyeSBwYXJzaW5nIGZ1bmN0aW9uLgotCi0yMDEyLTAzLTI5IDE1OjQ1OjAwICswMjAwICBGYWJyaXppbyAoTWlzdG8pIE1pbG8gPG1pc3RvYmFhbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBzcGVsbGluZyBmaXhlcwotCi0yMDEyLTAzLTI5IDE1OjI4OjQ0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGdzdGVsZW1lbnQ6IGxvd2VyIEdTVF9FTEVNRU5UX0ZMQUdfTEFTVAotCSAgSXQgd291bGRuJ3QgbGVhdmUgdGhhdCBtdWNoIHJvb20gZm9yIHN1YmNsYXNzIHVzZXJzCi0KLTIwMTItMDMtMjkgMTU6MTg6MzMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGdzdGJ1ZmZlcjogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlCi0JICBnY2MgNC41IGNvbXBsYWlucyBvdGhlcndpc2UgOigKLQotMjAxMi0wMy0yOSAxNDo1NDo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi8wLjEwJwotCSAgQ29uZmxpY3RzOgotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmMKLQotMjAxMi0wMy0yOSAxNDo0NTo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogV2FrZSB1cCBhbGwgbm90LWxpbmtlZCBzdHJlYW1zIHdoZW4gYSBzdHJlYW0gc3dpdGNoZXMgZnJvbSBsaW5rZWQgdG8gbm90LWxpbmtlZAotCSAgV2UgcmVzZXQgYWxsIHRoZSB3YWl0aW5nIHN0cmVhbXMsIGxldCB0aGVtIHB1c2ggYW5vdGhlciBidWZmZXIgdG8KLQkgIHNlZSBpZiB0aGV5J3JlIG5vdyBhY3RpdmUgYWdhaW4uIFRoaXMgYWxsb3dzIGZhc3RlciBzd2l0Y2hpbmcKLQkgIGJldHdlZW4gc3RyZWFtcyBhbmQgcHJldmVudHMgZGVhZGxvY2tzIGlmIGRvd25zdHJlYW0gZG9lcyBhbnkKLQkgIHdhaXRpbmcgdG9vLgotCSAgQWxzbyBpbXByb3ZlIGxvY2tpbmcgYSBiaXQsIHNyY3Jlc3VsdCBtdXN0IGJlIHByb3RlY3RlZCBieSB0aGUKLQkgIG11bHRpcXVldWUgbG9jayB0b28gYmVjYXVzZSBpdCdzIHVzZWQvc2V0IGZyb20gcmFuZG9tIHRocmVhZHMuCi0KLTIwMTItMDMtMjkgMTQ6MzI6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IFJlY29tcHV0ZSBoaWdoLXRpbWUgdG9vIHdoZW4gZmx1c2hpbmcsIG5vdCBvbmx5IGhpZ2gtaWQKLQotMjAxMi0wMy0yOSAxMzozOTo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogT25seSB3YWl0IHVudGlsIHRoZSBhY3RpdmUgcGFkJ3MgcnVubmluZyB0aW1lIGlzIHJlYWNoZWQgaWYgdGhlIGFjdGl2ZSBwYWQgYWxyZWFkeSBzYXcgZGF0YQotCSAgT3RoZXJ3aXNlIHdlIG1pZ2h0IGJsb2NrIGZvcmV2ZXIgYmVjYXVzZSB1cHN0cmVhbSAoZS5nLiBtdWx0aXF1ZXVlKSBpcyB3YWl0aW5nCi0JICBmb3IgdGhlIHByZXZpb3VzbHkgYWN0aXZlIHN0cmVhbSB0byByZXR1cm4gZm9yZXZlciAod2hpY2ggaXMgd2FpdGluZyBoZXJlCi0JICBpbiBpbnB1dHNlbGVjdG9yKSBiZWZvcmUgcHVzaGluZyBzb21ldGhpbmcgb24gdGhlIG5ld2x5IHNlbGVjdGVkIHN0cmVhbS4KLQotMjAxMi0wMy0yOSAxMzozNDo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXRhLmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dHJhY2UuYzoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZG9jczogdXBkYXRlIG1vcmUgZG9jdW1lbnRhdGlvbgotCi0yMDEyLTAzLTI4IDE4OjEyOjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1ldmVudHMueG1sOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgcmV2aWV3IHNvbWUgZG9jcwotCi0yMDEyLTAzLTI4IDE2OjQ0OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IHNpbXBsaWZ5IGFuZCByZWZhY3RvciBfc3BhbiBhbmQgX21lcmdlCi0JICBVbmlmeSB0aGUgX3NwYW4gYW5kIF9tZXJnZSBjb2RlIHBhdGhzIGFuZCBzaW1wbGlmeSBub3cgdGhhdCB3ZSBvbmx5IHVzZSB0aGlzCi0JICBpbnRlcm5hbGx5LgotCi0yMDEyLTAzLTI4IDE1OjE2OjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IHdlIGFsd2F5cyBjYWxsIF9zcGFuIHdpdGggdGhlIGJ1ZmZlciBzaXplCi0KLTIwMTItMDMtMjggMTU6MTI6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogbW92ZSBzb21lIGNvZGUgYXJvdW5kCi0KLTIwMTItMDMtMjggMTU6MDg6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogd2UgY2FsbCBfc3BhbiBhbHdheXMgd2l0aCAwIG9mZnNldAotCi0yMDEyLTAzLTI4IDEzOjA4OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IHJlbW92ZSBhbHdheXMgRkFMU0UgZnVuY3Rpb24gYXJndW1lbnQKLQotMjAxMi0wMy0yOCAxNjozOTo1NCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogZGVsYXkgYnVmZmVyIHVucmVmIHVudGlsIGJ1ZmZlciBubyBsb25nZXIgbmVlZGVkCi0KLTIwMTItMDMtMjggMTI6NDQ6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXI6IHVuaWZ5IGJ1ZmZlciBtZXJnZSBtZXRob2RzCi0JICBBZGQgZ3N0X2J1ZmZlcl9hcHBlbmQoKSB3aGljaCBhcHBlbmRzIHRoZSBtZW1vcnkgYmxvY2tzIGZyb20gb25lIGJ1ZmZlciB0bwotCSAgYW5vdGhlci4gUmVtb3ZlIHRoZSBvbGQgaW5lZmZpY2llbnQgX21lcmdlKCkgYW5kIF9qb2luKCkgbWV0aG9kcyB3aGljaCBmb3JjZWQgYQotCSAgcHJlbWF0dXJlIG1lbWNweSBpbiBtb3N0IGNhc2VzLgotCSAgUmVtb3ZlIHRoZSBfaXNfc3BhbigpIGFuZCBfc3BhbigpIG1ldGhvZHMgdGhleSBhcmUgbm90IG5lZWRlZCBhbnltb3JlIG5vdyB0aGF0Ci0JICB3ZSBjYW4gX2FwcGVuZCgpLiBNZXJnaW5nIGFuZCBzcGFubmluZyB3aWxsIGJlIGRlbGF5ZWQgdW50aWwgbWFwcGluZyBvciBtYXliZQotCSAgbm90IGF0IGFsbCB3aGVuIHRoZSBlbGVtZW50IGNhbiBkZWFsIHdpdGggdGhlIGRpZmZlcmVudCBtZW1vcnkgYmxvY2tzLgotCi0yMDEyLTAzLTI3IDE1OjI0OjQ5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdzdHBhZDogRml4IHR5cG8gaW4gZG9jc3RyaW5nCi0KLTIwMTItMDMtMjcgMTU6MjQ6NDkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ3N0cGFkOiBGaXggdHlwbyBpbiBkb2NzdHJpbmcKLQotMjAxMi0wMy0yNyAxNToxNjo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiByZS1lbmFibGUgX3NwYW4gb2Zmc2V0IGNhbGN1bGF0aW9ucwotCSAgd2hlbiB3ZSBfc3BhbiB0d28gY29tcGxldGUgYnVmZmVycywgd2UgY2FuIGNvcHkgb2Zmc2V0cyBhbmQgdGltZXN0YW1wcy4KLQotMjAxMi0wMy0yNyAxNTowMDozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JICB0cmFjZTogYWRkIHJlZmNvdW50IHRvIHRyYWNlIGRlYnVnCi0KLTIwMTItMDMtMjcgMTQ6NTk6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogYWRkIG1vcmUgX2lzX3dyaXRhYmxlIGNoZWNrcwotCSAgQWRkIHNvbWUgY2hlY2tzIHRvIGFzc2VydCBvbiB3cml0YWJpbGl0eSBmb3IgZnVuY3Rpb25zIHRoYXQgbW9kaWZ5IG1ldGFkYXRhLgotCi0yMDEyLTAzLTI3IDEyOjQwOjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkgIGJ1ZmZlcnBvb2w6IHJlbW92ZSBjb25zdCBmcm9tIGdldC9zZXRfcGFyYW0KLQkgIFJlbW92ZSB0aGUgY29uc3QgZnJvbSB0aGUgR3N0Q2FwcyBpbiBnZXQvc2V0X3BhcmFtLiBzZXRfcGFyYW0gbW9kaWZpZXMKLQkgIHRoZSByZWZjb3VudCBvZiB0aGUgY2Fwcy4KLQkgIERvbid0IGluY3JlbWVudCB0aGUgcmVmY291bnQgb2YgdGhlIGNhcHMgcmVzdWx0IG9mIGdldF9wYXJhbSBsaWtlIHdlCi0JICBkbyB3aXRoIG90aGVyIG9iamVjdHMuCi0JICBVcGRhdGUgc29tZSBhbm5vdGlhdGlvbnMuCi0KLTIwMTItMDMtMjcgMTI6Mzk6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBmaXggYW5ub3RhdGlvbiBmb3IgX3JlbGVhc2UKLQkgIF9yZWxlYXNlIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyCi0KLTIwMTItMDMtMjcgMTI6MzE6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0YnVzLmg6Ci0JICBidXM6IENoYW5nZSB0aGUgdGltZW91dCBhcmd1bWVudCB0eXBlIG9mIGdzdF9idXNfcG9sbCgpIGZyb20gR3N0Q2xvY2tUaW1lRGlmZiB0byBHc3RDbG9ja1RpbWUKLQkgIFRoaXMgaXMgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIG90aGVyIEdzdEJ1cyBtZXRob2RzIHRoYXQgaGF2ZSBhIHRpbWVvdXQuCi0KLTIwMTItMDMtMjYgMTk6MTM6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiByZW1vdmUgb2xkIGNvZGUKLQkgIFJlbW92ZSBhdHRlbXB0IHRvIGRlbGF5IF9tYWtlX3dyaXRhYmxlCi0KLTIwMTItMDMtMjYgMTg6MDc6MzUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogZW5zdXJlIHdyaXRhYmxlIGNhcHMgcHJpb3IgdG8gbW9kaWZpY2F0aW9uCi0KLTIwMTItMDMtMjYgMTc6Mzg6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBjaGVjayBtaW4vbWF4X2J1ZmZlcnMKLQotMjAxMi0wMy0yNiAxNzozNToxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTpmaXggY29weS1hbmQtcGFzdGUgcHJvYmxlbQotCi0yMDEyLTAzLTI2IDExOjU0OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBSZXBsYWNlIG1hc3RlciB3aXRoIDAuMTEKLQotMjAxMi0wMy0yMyAxODo1MTo1MiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IGFkZCBhbmQgaW1wcm92ZSBkZWJ1ZyBtZXNzYWdlcwotCSAgLi4uIHNvIHRoZXkgZW5kIHVwIGluIGEgbW9yZSBleHBlY3RlZCBkZWJ1ZyBjYXRlZ29yeSByYXRoZXIgdGhhbiBvYmxpdmlvbi4KLQotMjAxMi0wMy0yMiAxNTo1NDo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBkZXZlbAotCi0yMDEyLTAzLTIyIDE1OjQ5OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QtYnVpbGQuc3RhbXA6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC5zdGFtcDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMC4xMS4zCi0KLTIwMTItMDMtMjIgMTU6MjI6NTcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IHJlbW92ZSBhdXRvbWF0aWMgYW5kIHVuZG9jdW1lbnRlZCBzZXR0aW5nIG9mIGFsd2F5c19pbl9wbGFjZQotCSAgLi4uIHdoaWNoIGNvbnRyb2xzIGhvdyB0byAoZm9yY2libHkpIGRlYWwgd2l0aCAobm9uLSl3cml0YWJsZSBkYXRhIGFuZAotCSAgaXMgbm90IG5lY2Vzc2FyaWx5IHJlbGF0ZWQgdG8gaWRlbnRpY2FsIGNhcHMuCi0JICBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBhbHNvIG5vdCBzbyBoZWxwZnVsIGFueW1vcmUgd2l0aCBhIG1vcmUgYWR2YW5jZWQKLQkgIEdzdFZpZGVvRmlsdGVyIHN1YmNsYXNzIHdoaWNoIGFsd2F5cyBoYXMgYSB0cmFuc2Zvcm1faXAgbWV0aG9kIGN1cnJlbnRseSwKLQkgIGV2ZW4gdGhvdWdoIGl0cyBzdWJjbGFzcyBtYXkgbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIF9pcCBtZXRob2QuCi0KLTIwMTItMDMtMjIgMTA6NDU6MDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCi0yMDEyLTAzLTIyIDA4OjM1OjI1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBkb24ndCBzaGFkb3cgZ2xvYmFsIHZhcmlhYmxlCi0KLTIwMTItMDMtMjEgMTI6MTA6MjEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgotCSAgZGlzdCBuZXQgZGlyZWN0b3J5IG9ubHkgb25jZQotCi0yMDEyLTAzLTIxIDA5OjAwOjQ1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogT25seSBhbGxvdyBmaXhlZCBjYXBzIGluIHRoZSBhY2NlcHQtY2FwcyBxdWVyeQotCi0yMDEyLTAzLTIwIDE3OjA4OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBkbyBxdWVyaWVzIG1vcmUgZGlyZWN0bHkKLQkgIEp1c3QgY2FsbCBvdXIgaW50ZXJuYWwgcXVlcnkgZnVuY3Rpb24gaW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIHRoZSBwYWQgYW5kIHRoZQotCSAgcXVlcnkgaGFuZGxlciBldGMuCi0KLTIwMTItMDMtMjAgMTc6MDg6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogYWRkIHNvbWUgcGVyZm9ybWFuY2UgZGVidWcKLQotMjAxMi0wMy0yMCAxMzoxNDo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcGFkOiBpbXByb3ZlIGRvY3Mgb2YgZ2V0L3B1bGxfcmFuZ2UKLQkgIEltcHJvdmUgdGhlIGRvY3Mgb2YgdGhlIGdldC9wdWxsX3JhbmdlIGZ1bmN0aW9ucywgZGVmaW5lIHRoZSBsaWZldGltZSBvZiB0aGUKLQkgIGJ1ZmZlciBpbiBjYXNlIG9mIGVycm9ycyBhbmQgc2hvcnQgcmVhZHMuCi0JICBNYWtlIHN1cmUgdGhlIGNvZGUgZG9lcyB3aGF0IHRoZSBkb2NzIHNheS4KLQotMjAxMi0wMy0yMCAxMDoyMDoyOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JICBidWZmZXI6IGltcHJvdmUgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsKCkKLQkgIE1ha2UgaXQgcG9zc2libGUgdG8gd3JhcCBhbGwga2luZHMgb2YgbWVtb3J5IGJ5IGV4cG9zaW5nIGFsbCBwcm9wZXJ0aWVzIHRvCi0JICBnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwoKS4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBhbHNvIGNyZWF0ZSB3cml0YWJsZQotCSAgbWVtb3J5IHdpdGhvdXQgYSBmcmVlIGZ1bmN0aW9uIG9yIG1lbW9yeSB3aXRoIGV4dHJhIHBhZGRpbmcuCi0KLTIwMTItMDMtMTkgMTE6NDU6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogaGFuZGxlIHNlcmlhbGl6ZWQgcXVlcmllcwotCi0yMDEyLTAzLTE2IDIyOjUxOjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYmFzZXRyYW5zZm9ybTogbWFrZSBtb3JlIHN0dWZmIHByaXZhdGUKLQotMjAxMi0wMy0xNiAyMjoyNTozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBzbWFsbCBjbGVhbnVwcwotCi0yMDEyLTAzLTE2IDIxOjM3OjEwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzoKLQkgIHBhZDogY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgZ2V0L3B1bGxfcmFuZ2UgYSBsaXR0bGUKLQkgIE1ha2UgaXQgc28gdGhhdCBvbmUgY2FuIHNwZWNpZnkgYSBidWZmZXIgZm9yIGdldC9wdWxsX3JhbmdlIHdoZXJlIHRoZSBkb3duc3RyZWFtCi0JICBlbGVtZW50IHNob3VsZCB3cml0ZSBpbnRvLiBXaGVuIHBhc3NpbmcgTlVMTCwgdXBzdHJlYW0gc2hvdWxkIGFsbG9jYXRlIGEgYnVmZmVyLAotCSAgbGlrZSBpbiAwLjEwLgotCSAgV2UgYWxzbyBuZWVkIHRvIGNoYW5nZSB0aGUgcHJvYmVzIGEgbGl0dGxlIGJlY2F1c2UgYmVmb3JlIHRoZSBwdWxsIHByb2JlLCB0aGVyZQotCSAgY291bGQgYWxyZWFkeSBiZSBhIGJ1ZmZlciBwYXNzZWQuIFRoaXMgdGhlbiBhbGxvd3MgdXMgdG8gdXNlIHRoZSBzYW1lIFBST0JFCi0JICBtYWNybyBmb3IgYmVmb3JlIGFuZCBhZnRlciBwdWxsaW5nLgotCSAgV2hpbGUgd2UncmUgYXQgdGhlIHByb2JlcywgbWFrZSB0aGUgcXVlcnkgcHJvYmUgbW9yZSBwb3dlcmZ1bCBieSBoYW5kbGluZyB0aGUKLQkgIEdTVF9QQURfUFJPQkVfRFJPUCByZXR1cm4gdmFsdWUuIFJldHVybmluZyBfRFJPUCBmcm9tIGEgcXVlcnkgcHJvYmUgd2lsbCBub3cKLQkgIHJldHVybiBUUlVFIHVwc3RyZWFtIGFuZCB3aWxsIG5vdCBmb3J3YXJkIHRoZSBwcm9iZSB0byB0aGUgcGVlciBvciBoYW5kbGVyLgotCSAgQWxzbyBoYW5kbGUgX0RST1AgZm9yIGdldC9wdWxsX3JhbmdlIHByb3Blcmx5IGJ5IG5vdCBkaXNwYXRjaGluZyB0byB0aGUKLQkgIHBlZXIvaGFuZGxlciBvciBieSBnZW5lcmF0aW5nIEVPUyB3aGVuIHRoZSBwcm9iZSByZXR1cm5zIERST1AgYW5kIG5vIGJ1ZmZlci4KLQkgIE1ha2UgZmlsZXNyYyBoYW5kbGUgdGhlIG5vbi1OVUxMIGJ1ZmZlciBwYXNzZWQgaW4gdGhlIGdldF9yYW5nZSBmdW5jdGlvbiBhbmQKLQkgIHNraXAgdGhlIGFsbG9jYXRpb24gaW4gdGhhdCBjYXNlLCB3cml0aW5nIGRpcmVjdGx5IGludG8gdGhlIGRvd25zdHJlYW0gcHJvdmlkZWQKLQkgIGJ1ZmZlci4KLQkgIFVwZGF0ZSB0ZXN0cyBiZWNhdXNlIG5vdyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBub3QgcGFzcyBhIHJhbmRvbSB2YWx1ZSBpbiB0aGUKLQkgIGJ1ZmZlciBwb2ludGVyIHRvIGdldC9wdWxsX3JhbmdlCi0KLTIwMTItMDMtMTYgMjE6MzY6MzMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogcHJveHkgYWxsb2NhdGlvbiBxdWVyeQotCi0yMDEyLTAzLTE2IDE4OjM5OjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBmaXggZG9jcyBhIGxpdHRsZSwgYWxsb2NfYnVmZmVyIGlzIGdvbmUKLQotMjAxMi0wMy0xNSAyMjowOTowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVycG9vbDogc3BsaXQgYnVmZmVycG9vbCBjb25maWd1cmF0aW9uCi0JICBNYWtlIHNlcGFyYXRlIG1ldGhvZHMgdG8gY29udHJvbCB0aGUgYnVmZmVycG9vbCBhbmQgdGhlIGFsbG9jYXRvciB1c2VkIGJ5IHRoZQotCSAgYnVmZmVycG9vbC4KLQkgIE1ha2UgaXQgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBhbGxvY2F0b3Igb2YgYSBwb29sLgotCi0yMDEyLTAzLTE1IDIwOjIzOjU5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHF1ZXJ5OiByZXdvcmsgdGhlIEFMTE9DQVRJT04gcXVlcnkKLQkgIFNlcGFyYXRlIHRoZSBidWZmZXJwb29sIGFuZCBhbGxvY2F0b3IgaGludHMgaW4gdGhlIGFsbG9jYXRpb24gcXVlcnksIHNvbWUKLQkgIG9mIHRoZSB2YWx1ZXMgZG9uJ3QgYWx3YXlzIG1ha2Ugc2Vuc2UgdG9nZXRoZXIuCi0JICBLZWVwIHRoZSBidWZmZXJwb29sIGFuZCBpdHMgY29uZmlndXJhdGlvbiB0b2dldGhlci4KLQkgIEtlZXAgdGhlIGFsbG9jYXRvciBhbmQgaXRzIHBhcmFtZXRlcnMgdG9nZXRoZXIuCi0JICBBbGxvdyBmb3IgbXVsdGlwbGUgYnVmZmVycG9vbCBjb25maWd1cmF0aW9ucyBpbiB0aGUgcXVlcnkuCi0KLTIwMTItMDMtMTUgMTY6NTA6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogY29tbWVudCBhbmQgZGVidWcgaW1wcm92ZW1lbnQKLQotMjAxMi0wMy0xNSAxNjo0OTozMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogaW1wcm92ZSBkZWJ1ZwotCSAgYWxzbyBmaXggYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsKLQotMjAxMi0wMy0xNSAxNDoyODoyMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZWZzOiB1cGRhdGUKLQotMjAxMi0wMy0xNSAxNDowMTo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBHc3RCdWZmZXJQb29sUGFyYW1zIC0+IEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zCi0JICBCZWNhdXNlIHRob3NlIGZsYWdzIGFyZSBub3QgZnJvbSB0aGUgYnVmZmVycG9vbCBidXQgZm9yIHRoZSBhY3F1aXJlIGZ1bmN0aW9uLgotCi0yMDEyLTAzLTE1IDEzOjI4OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lbW9yeS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBtZW1vcnk6IGdyb3VwIGFsbG9jYXRpb24gcGFyYW1ldGVycyBpbiBhIHN0cnVjdAotCSAgR3JvdXAgdGhlIGV4dHJhIGFsbG9jYXRpb24gcGFyYW1ldGVycyBpbiBhIEdzdEFsbG9jYXRpb25QYXJhbXMgc3RydWN0dXJlIHRvIG1ha2UKLQkgIGl0IGVhc2llciB0byBkZWFsIHdpdGggdGhlbSBhbmQgc28gdGhhdCB3ZSBjYW4gZXh0ZW5kIHRoZW0gbGF0ZXIgaWYgbmVlZGVkLgotCSAgTWFrZSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSgpIHRha2UgdGhlIEdzdEFsbG9jYXRpb25QYXJhbXMgZm9yIGFkZGVkCi0JICBmdW5jdGlvbmFsaXR5LgotCSAgQWRkIGJveGVkIHR5cGUgZm9yIEdzdEFsbG9jYXRpb25QYXJhbXMuCi0KLTIwMTItMDMtMTUgMDA6MjU6NTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSAgZmlsZXNyYzogb25seSB1cGRhdGUgYnVmZmVyIHNpemUgb24gc2hvcnQgcmVhZAotCi0yMDEyLTAzLTE1IDAwOjI0OjQwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBmaXggY29weSBmdW5jdGlvbgotCSAgQ29weSB0aGUgc3RydWN0dXJlIHRvby4KLQotMjAxMi0wMy0xNSAwMDoyMzo1NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBmaXggbWF4c2l6ZSBhZnRlciBhbGlnbgotCSAgd2hlbiB3ZSBhbGlnbiB0aGUgZGF0YSBwb2ludGVyLCBtYWtlIHN1cmUgdG8gdXBkYXRlIHRoZSBtYXhzaXplLgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZwotCi0yMDEyLTAzLTE0IDIyOjU4OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWU6IHJlbW92ZSB1c2VsZXNzIFBST1hZX0FMTE9DQVRJT04gZmxhZwotCi0yMDEyLTAzLTE0IDIxOjMyOjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogQWRkIDAgcGFkZGluZwotCSAgQ2hhbmdlIGdzdF9hbGxvY2F0b3JfYWxsb2MoKSBzbyB0aGF0IHdlIGNhbiBhbHNvIHNwaWNpZnkgZmxhZ3MgYW5kIHBhZGRpbmcuCi0JICBBZGQgMiBuZXcgZmxhZ3MgdG8gbWFyayB0aGUgbWVtb3J5IDAgcHJlZml4ZWQvcGFkZGVkLiBUaGlzIGFsbG93cyB1cyB0bwotCSAgcmVtb3ZlIHNvbWUgcmVzaXplcyBpbiB0aGUgYmFzZSBjbGFzc2VzLgotCSAgV2hlbiBhbGxvY2F0aW5nIG1lbW9yeSwgbWVtc2V0IHByZWZpeCBhbmQgcGFkZGluZyB3aXRoIDAgd2hlbiB0aGUgZmxhZ3MgdGVsbAotCSAgdXMgdG8uCi0JICBPbiByZXNpemUsIGNsZWFyIHRoZSB6ZXJvIHBhZGRpbmcgZmxhZ3MgaWYgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoZSBtZW1vcnkgaXMKLQkgIHN0aWxsIDAgZmlsbGVkLgotCSAgVXBkYXRlIHRlc3RzLgotCi0yMDEyLTAzLTE0IDE5OjM3OjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIHF1ZXJ5OiBhbHNvIGluY2x1ZGUgcGFkZGluZyBpbiBBTExPQ0FUSU9OIHF1ZXJ5Ci0JICBOZWdvdGlhdGluZyBwYWRkaW5nIGlzIG5lZWRlZCBvbiBzZWNvbmQgdGhvdWdodCBzbyBpbmNsdWRlIGl0IGluIHRoZQotCSAgQUxMT0NBVElPTiBxdWVyeS4KLQkgIE1ha2UgdGhlIGJ1ZmZlcnBvb2wgdGFrZSBwYWRkaW5nIGludG8gYWNjb3VudCB3aGVuIGFsbG9jYXRpbmcuCi0JICBNYWtlIGJhc2VzcmMgdGFrZSBwYWRkaW5nIGludG8gYWNjb3VudC4KLQkgIFVzZSBwYWRkaW5nIGFuZCBwcmVmaXggd2hlbiBhbGxvY2F0aW5nIGluIGJhc2V0cmFuc2Zvcm0uCi0KLTIwMTItMDMtMTQgMTg6NDU6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogdGFrZSBwcmVmaXggaW50byBhY2NvdW50IHdoZW4gYWxsb2NhdGluZwotCSAgVGFrZSBpbnRvIGFjY291bnQgdGhlIHByZWZpeCB0aGF0IHdlIHJlY2VpdmVkIGZyb20gdGhlIGFsbG9jYXRpb24gcXVlcnkgYW5kIHVzZQotCSAgaXQgdG8gYWxsb2NhdGUgYW5kIHJlc2l6ZSBhIGxhcmdlciBidWZmZXIuCi0KLTIwMTItMDMtMTQgMTc6MTY6MzYgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogZnJlZSBvd25lZCBkaXNjYXJkZWQgcG9vbCBjb25maWcKLQotMjAxMi0wMy0xNCAxNjoyNzozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgcGFkOiBpbXBsZW1lbnQgRFJBSU4gaGFuZGxpbmcKLQkgIFdoZW4gd2UgZm9yd2FyZCB0aGUgRFJBSU4gcXVlcnkgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gZm9yd2FyZCBpdCB0bywgYXNzdW1lIHdlCi0JICBhcmUgZHJhaW5lZC4KLQkgIFdoZW4gYSBiYXNlc2luayByZWNlaXZlcyBhIGRyYWluIHF1ZXJ5LCByZXBseSB3aXRoIFRSVUUuCi0KLTIwMTItMDMtMTQgMTY6MTQ6MTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBxdWVyeTogYWRkIG5ldyBkcmFpbiBxdWVyeQotCSAgV2l0aCB0aGUgbmV3IHNlcmlhbGl6ZWQgZG93bnN0cmVhbSBxdWVyaWVzIHdlIGNhbiBpbXBsZW1lbnQgYSBkcmFpbiBxdWVyeSB0aGF0Ci0JICBtYWtlcyBhbiBlbGVtZW50IHdhaXRzIHVudGlsIGEgZG93bnN0cmVhbSBlbGVtZW50IHJlcGxpZXMgdG8gdGhlIHF1ZXJ5LgotCi0yMDEyLTAzLTE0IDE2OjAxOjE1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IG1ha2Ugc2VyaWFsaXplZCBxdWVyaWVzIHB1c2ggc3RpY2t5IGV2ZW50cyBmaXJzdAotCSAgQmVmb3JlIHdlIGNhbiBwcm9jZWVkIHdpdGggYSBzZXJpYWxpemVkIHF1ZXJ5LCB3ZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBhbGwKLQkgIHN0aWNreSBldmVudHMgd2VyZSBwdXNoZWQuCi0KLTIwMTItMDMtMTQgMTU6NDI6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlczogd2FybiB3aGVuIHJlY2VpdmluZyBhIHNlcmlhbGl6ZWQgZXZlbnQKLQkgIC4uIHVudGlsIHdlIGltcGxlbWVudCBpdC4KLQotMjAxMi0wMy0xNCAxNTo0MjozMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSAgcXVldWU6IGFkZCBzdXBwb3J0IGZvciBzZXJpYWxpemVkIHF1ZXJpZXMKLQotMjAxMi0wMy0xNCAxNToyOToxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiB0YWtlIHN0cmVhbSBsb2NrIG9uIHNlcmlhbGl6ZWQgcXVlcmllcwotCi0yMDEyLTAzLTE0IDE1OjE2OjU2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGVuZm9yY2UgY29ycmVjdCBxdWVyeSBkaXJlY3Rpb24KLQotMjAxMi0wMy0xNCAxNDo1MToxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcXVlcnk6IHJlZ2lzdGVyIHF1ZXJpZXMgbGlrZSBldmVudHMKLQkgIEFsc28gcmVnaXN0ZXIgcXVlcmllcyB3aXRoIGEgUXVlcnlUeXBlIHRoYXQgYWxsb3dzIHVzIHRvIGNoZWNrIGlmIHRoZSBldmVudCBpcwotCSAgc2VudCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLiBBZGQgYSBzZXJpYWxpemVkIHF1ZXJ5IHR5cGUgYmVjYXVzZSB3ZSB3aWxsIG5lZWQKLQkgIHRoaXMgZm9yIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5LgotCSAgUmVtb3ZlIHRoZSBRdWVyeVR5cGVEZWZpbml0aW9uIHN0dWZmLCBpdCBpcyBub3QgdXNlZCBhbnltb3JlIGFuZCB3ZSBub3cgdXNlCi0JICBjdXN0b20gcXVlcmllcyBhbmQgc2VwYXJhdGUgQVBJIGZvciB0aGVtLgotCSAgVXBkYXRlIGRlZnMuCi0KLTIwMTItMDMtMTQgMTI6NDI6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogYWRkIG1vcmUgZGVidWcKLQotMjAxMi0wMy0xMyAxNTo0MDozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiByZW1vdmUgb2xkIGNvbXBhdCBtb2RlCi0KLTIwMTItMDMtMTMgMTU6NDA6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBzbWFsbCBkb2NzIHVwZGF0ZQotCi0yMDEyLTAzLTEzIDEwOjA0OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JICBjYXBzOiByZW1vdmUgZ3N0X2NhcHNfdW5pb24oKQotCSAgUmVtb3ZlIGdzdF9jYXBzX3VuaW9uKCksIHVzZSBnc3RfY2Fwc19tZXJnZSgpLiBUaGlzIGZ1bmN0aW9uIHdhcyBub3QgdXNlZAotCSAgYW55bW9yZSBhbmQgaXQgaXMgdW5jbGVhciB3aGF0IHRoZSBkaWZmZXJlbmNlIGlzIHdpdGggX21lcmdlKCkuCi0KLTIwMTItMDMtMTIgMjM6MDU6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGJ1bXAgQVNfTElCVE9PTCB2ZXJzaW9uCi0JICBBUEkgd2FzIGFkZGVkIHRvIGNvbGxlY3RwYWRzMgotCi0yMDEyLTAzLTEyIDIzOjAyOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBiYWNrcG9ydCBBU19MSUJUT09MIHZlcnNpb24gZnJvbSAwLjEwLjM2IHJlbGVhc2UKLQkgIE1pZ2h0IGZpeCBpc3N1ZXMgd2l0aCBtaXNzaW5nIHN5bWJvbHMgZm9yIHBlb3BsZSB3aG8gaW5zdGFsbCBHU3RyZWFtZXIKLQkgIGZyb20gc291cmNlIGFuZCBhdCBzb21lIHBvaW50IGp1bXBlZCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIGdpdCBtYXN0ZXIKLQkgIGFuZCB0aGUgMC4xMC4zNiByZWxlYXNlIChvciAwLjEwLiBicmFuY2gpLgotCi0yMDEyLTAzLTEyIDIzOjA4OjAwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSAgZG9jczogZml4IGZ1bmN0aW9uIG5hbWUgYW5kIHR5cG8KLQotMjAxMi0wMy0xMiAxOTo1MjowMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBnZXQgdGVtcGxhdGUgY2FwcyBvbmx5IG9uY2UKLQkgIEdldCB0aGUgdGVtcGxhdGUgY2FwcyBvZiB0aGUgcGFkcyBvbmx5IG9uY2UsIGF2b2lkcyB1bmVjZXNzYXJ5IHJlZgotCSAgYW5kIHVucmVmcy4KLQotMjAxMi0wMy0xMiAxODozNDozMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGRlbGF5IF9tYWtlX3dyaXRhYmxlKCkgdW50aWwgbmVlZGVkIGluIF9ub3JtYWxpemUoKQotCSAgRGVsYXkgX21ha2Vfd3JpdGFibGUoKSB1bnRpbCB3ZSBhY3R1YWxseSBmb3VuZCBhIGxpc3QgYW5kIG5lZWQgdG8gdXBkYXRlIHRoZQotCSAgY2Fwcy4KLQotMjAxMi0wMy0xMiAxODoyNTozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IHNob3J0Y3V0IHNpbXBsaWZ5IGVhcmxpZXIKLQkgIEEgc2ltcGxlIGNhcHMgaXMgYWxyZWFkeSBzaW1wbGlmaWVkLCBubyBuZWVkIHRvIGNoZWNrIGZvciBmaXhlZG5lc3MuCi0KLTIwMTItMDMtMTIgMTg6MjI6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBzbWFsbCBjbGVhbnVwLCByZW1vdmUgY29uc3QKLQotMjAxMi0wMy0xMiAxODowMjoyNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IHNtYWxsIGNsZWFudXBzCi0KLTIwMTItMDMtMTIgMTY6NDA6MzggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBzbWFsbCBkb2MgaW1wcm92ZW1lbnQKLQotMjAxMi0wMy0xMiAxNjoxODo0NSArMDIwMCAgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5AaW50ZWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmUuYWM6IGJ1bXAgcmVxdWlyZWQgR0xpYiB0byAyLjMxLjE0Ci0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcxOTExCi0KLTIwMTItMDMtMTIgMTM6NTA6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogdXBkYXRlIHBvcnRpbmctdG8tMC4xMS50eHQgYSBsaXR0bGUKLQotMjAxMi0wMy0xMiAxMjozNTowNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGZpeCBzb21lIDAuMTEgRklYTUVzCi0KLTIwMTItMDMtMTIgMTI6MjE6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogbWFrZSBfbm9ybWFsaXplIHRha2Ugb3duZXJzaGlwIG9mIGlucHV0Ci0JICBNYWtlIGdzdF9jYXBzX25vcm1hbGl6ZSgpIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBpbnB1dCBzbyB0aGF0IGl0IGNhbiBtb3JlCi0JICBpbnRlbGxpZ2VudGx5IGRlY2lkZSB3aGVuIHRvIGNvcHkgb3Igbm90LgotCi0yMDEyLTAzLTEyIDExOjM4OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNhcHM6IF9kb19zaW1wbGlmeSgpIC0+IF9zaW1wbGlmeSgpCi0JICBSZW5hbWUgX2RvX3NpbXBsaWZ5KCkgdG8gX3NpbXBsaWZ5KCkuIFRoZSBuYW1lIHdhcyBpbnRyb2R1Y2VkIGFzIGEgcmVwbGFjZW1lbnQKLQkgIG1ldGhvZCBmb3IgYSBkZXByZWNhdGVkIG1ldGhvZCBidXQgd2UgY2FuIG5vdyByZW5hbWUgaXQgYWdhaW4uCi0JICBGaXggc29tZSBkb2NzLgotCi0yMDEyLTAzLTEyIDEwOjQyOjIzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogaW1wcm92ZSBfZG9fc2ltcGxpZnkKLQkgIE1ha2UgZ3N0X2NhcHNfZG9fc2ltcGxpZnkoKSB0YWtlIG93bmVyc2hpcCBvZiB0aGUgaW5wdXQgY2FwcyBhbmQgcHJvZHVjZSBhCi0JICBzaW1wbGlmaWVkIG91dHB1dCBjYXBzLiBUaGlzIHJlbW92ZXMgdGhlIHJlcXVpcmVtZW50IG9mIGhhdmluZyB3cml0YWJsZSBpbnB1dAotCSAgY2FwcyBhbmQgdGhlIG1ldGhvZCBjYW4gbWFrZSB0aGUgY2FwcyB3cml0YWJsZSBvbmx5IHdoZW4gbmVlZGVkLgotCi0yMDEyLTAzLTEyIDEwOjQxOjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB0ZXN0czogZml4IHVuaXQgdGVzdAotCSAgd2l0aCB0aGUgbmV3IGNhcHMgQVBJLCB0aGVyZSBpcyBtb3JlIHNoYXJpbmcgYW5kIGxlc3MgY29weWluZyBnb2luZyBvbiBzbyB0aGUKLQkgIHVuaXQgdGVzdCByZWZjb3VudHMgYXJlIGRpZmZlcmVudC4KLQotMjAxMi0wMy0xMiAwOTowMzo0MiArMDAwMCAgQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9mYXEvZ2VuZXJhbC54bWw6Ci0JICB1cGRhdGUgbGljZW5zZSBsaW5rIHRvIHBvaW50IHRvIDIuMSBsaWNlbnNlLCBpbnN0ZWFkIG9mIGp1c3QgZ2VuZXJpYyBsZ3BsIGZpbGUsIHdoaWNoIGlzIGFsd2F5cyB0aGUgbGF0ZXN0IGFuZCB0aHVzIG5vdCBjb3JyZWN0IGZvciBnc3RyZWFtZXIKLQotMjAxMi0wMy0xMSAxODo1Nzo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGF2b2lkIHVzaW5nIGluLXBsYWNlIG9wcmF0aW9ucwotCSAgUmV3b3JrIHNvbWUgY2FwcyBvcGVyYXRpb25zIHNvIHRoZXkgZG9uJ3QgcmVseSBvbiB3cml0YWJsZSBjYXBzIGJ1dCBpbnN0ZWFkIHRha2UKLQkgIG93bmVyc2hpcCBvZiB0aGUgaW5wdXQgY2FwcyBhbmQgZG8gX21ha2Vfd3JpdGFibGUoKSBvbmx5IHdoZW4gbmVlZGVkLgotCSAgUmVtb3ZlIHNvbWUgY29uc3QgZnJvbSBjYXBzIGZ1bmN0aW9ucywgaXQgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlIGZvcgotCSAgcmVmY291bnRlZCBvYmplY3RzIGFuZCBkb2VzIG5vdCBhbGxvdyB1cyB0byByZXR1cm4gYSByZWZjb3VudCB0byB0aGUgY29uc3QgaW5wdXQKLQkgIGNhcHMuCi0JICBSZXdvcmsgdGhlIGJhc2UgY2xhc3NlcyBmaXhhdGUgdm1ldGhvZHMgdG8gbm90IG9wZXJhdGUgb24gdGhlIGNhcHMgaW4tcGxhY2UuCi0JICBBbGwgdGhpcyBzYXZlcyB1cyBhcm91bmQgMzAlIG9mIGNhcHMgYW5kIHN0cnVjdHVyZSBjb3B5IGFuZCBuZXcgb3BlcmF0aW9ucy4KLQotMjAxMi0wMy0xMSAxNzoyMjowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBhZGQgYWxsb2NhdGlvbiBkZWJ1ZwotCi0yMDEyLTAzLTEwIDA5OjI1OjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkqIGdzdC9nc3R0eXBlZmluZC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JICB0eXBlZmluZDogcmVtb3ZlIGNvbnN0IGZyb20gcmVmY291bnRlZCBHc3RDYXBzCi0JICBIYXZpbmcgY29uc3Qgb24gcmVmY291bnRlZCBvYmplY3RzIHJlcXVpcmUgdXMgdG8gbWFrZSBjb3BpZXMgaW5zdGVhZCBvZiBzaW1wbHkKLQkgIHRha2luZyBhIHJlZiwgZG9uJ3QgZG8gdGhhdC4KLQotMjAxMi0wMy0xMCAwOToxNTo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeTogYXZvaWQgY29weSB3aGVuIGNhcHMgYXJlIGZpeGVkCi0JICBBdm9pZCBkb2luZyBhIHVzZWxlc3MgY29weSB3aGVuIHRoZSBjYXBzIGFyZSBmaXhlZCBhbmQgc2ltcGxpZnkgd2lsbCBub3QgZG8KLQkgIGFueXRoaW5nLgotCi0yMDEyLTAzLTA5IDE2OjE0OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IHNtYWxsIG9wdGltaXphdGlvbnMKLQkgIHNob3J0Y3V0IGhlYXZ5IHdvcmsgd2hlbiBidWZmZXJfcmVzaXplIGRvZXMgbm90aGluZy4KLQkgIEF2b2lkIGFuIGV4dHJhIF9yZWYgd2hlbiBtYXBwaW5nIGEgYnVmZmVyLgotCSAgQWRkIHNvbWUgR19MSUtFTFkuCi0KLTIwMTItMDMtMDkgMTU6MDM6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVycG9vbC50eHQ6Ci0JICBidWZmZXJwb29sOiBmaXggYXJyYXkgdHlwZXMKLQotMjAxMi0wMy0wOSAxNDozMDowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXIudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJwb29sLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVtb3J5LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbWV0YS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgZG9jcwotCi0yMDEyLTAzLTA5IDExOjUzOjU0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGFsc28gcHVzaCBzdGlja3kgZXZlbnRzIG9uIG5ldyBldmVudAotCSAgTWFrZSBhIGhlbHBlciBmdW5jdGlvbiBjaGVja19zdGlja3kgdG8gY2hlY2sgYW5kIHB1c2ggcGVuZGluZyBzdGlja3kgZXZlbnRzLgotCSAgTW92ZSB0aGUgaGFuZGxpbmcgb2YgdGhlIHJlc3VsdCBvZiBwdXNoaW5nIHRoZSBzdGlja3kgZXZlbnQgaW5zaWRlIHRoZQotCSAgcHVzaF9ldmVudCBmdW5jdGlvbiwgd2UgbmVlZCB0byBtYXJrIHRoZSBldmVudCBhcyByZWNlaXZlZCB3aGVuIGl0IHdhcyBwdXNoZWQKLQkgIGNvcnJlY3RseS4KLQkgIE1vdmUgdGhlIHN0aWNreSBldmVudHMgY29kZSBvdXRzaWRlIG9mIGdzdF9wYWRfcHVzaF9ldmVudF91bmNoZWNrZWQgYW5kCi0JICBtYWtlIGl0IHB1cmVseSBoYW5kbGUgc2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBlZXIuCi0JICB3aGVuIHB1c2hpbmcgYSBzdGlja3kgZXZlbnQsIGZpcnN0IHN0b3JlIGl0IG9uIHRoZSBwYWQuIFRoZW4gY2hlY2sgYW5kIHB1c2ggYW55Ci0JICBwZW5kaW5nIHN0aWNreSBldmVudHMgd2hlbiB3ZSBnZXQgYSBzZXJpYWxpemVkIG9yIHN0aWNreSBldmVudCBvbiBhIHNyY3BhZC4gVGhpcwotCSAgZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHN0aWNreSBldmVudHMgYXJlIG5vdCBwdXNoZWQgd2hlbiBhbiBldmVudCBpcyBwdXNoZWQuCi0KLTIwMTItMDMtMDkgMTE6NTI6MjkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogc3RvcmUgdGhlIHJlY2VpdmVkIHJlc3VsdCBmcm9tIF9mb3JlYWNoCi0JICBJZiB0aGUgZm9yZWFjaCBmdW5jdGlvbiBjaGFuZ2VzIHRoZSByZWNlaXZlZCBzdGF0ZSBvZiB0aGUgc3RpY2t5IGV2ZW50LCBtYWtlCi0JICBzdXJlIHdlIHJlbWVtYmVyIHRoYXQuCi0KLTIwMTItMDMtMDkgMTE6NTI6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkIGNvbW1lbnQKLQotMjAxMi0wMy0wOSAxMTo0OTowOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdDogYWRkIHRlc3QgdG8gY2hlY2sgc3RpY2t5IGV2ZW50cyBvcmRlcgotCSAgU3RpY2t5IGV2ZW50cyBwdXNoZWQgb24gYW4gdW5saW5rZWQgcGFkIHNob3VsZCBiZSBzdG9yZWQgb24gdGhlIHBhZC4gV2hlbiB0aGUKLQkgIHBhZCBpcyB0aGVuIGxpbmtlZCBhbmQgYW4gZXZlbnQgaXMgcHVzaGVkLCB0aGUgZXZlbnQgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIHRoZQotCSAgYWxyZWFkeSBleGlzdGluZyBzdGlja3kgZXZlbnRzIGFuZCB0aGVuIHRoZSBzdGlja3kgZXZlbnRzIHNob3VsZCBiZSBwdXNoZWQgaW4KLQkgIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZSBvcmlnaW5hbGx5IHB1c2hlZC4KLQotMjAxMi0wMy0wOSAxMTo0ODo0MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JICB0ZXN0OiBmaXggdHlwbyBpbiBjb21tZW50Ci0KLTIwMTItMDMtMDggMjA6MDg6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2Vlay5jOgotCSAgdGVzdHM6IHBvcnQgcGlwZWxpbmUvc2VlayB0ZXN0IHRvIDAuMTEKLQkgIERvZXNuJ3QgZmFpbCBpbiAwLjExIG9mIGNvdXJzZSwgYXQgbGVhc3Qgbm90IG9uIG15IG1hY2hpbmUuCi0KLTIwMTItMDMtMDggMTk6NTU6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbW1vbgotCSAgZ3N0L2dzdHBhZC5oCi0JICBnc3QvZ3N0dGFzay5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5oCi0KLTIwMTItMDMtMDggMTY6MzA6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0dGFzay5jOgotCSAgcGFkLCB0YXNrOiBpbXByb3ZlIGRlYnVnIGxvZ2dpbmcKLQotMjAxMi0wMy0wOCAxNjoyNjo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmg6Ci0JICBwYWRzLCBjb2xsZWN0cGFkczI6IGdldCByaWQgb2Ygc3VwZXJmbHVvdXMgYnJhY2tldHMgYXJvdW5kIHN0YXRpYyByZWMgbXV0ZXggY2FsbHMKLQkgIE1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlZmluZSB0aG9zZSBjYWxscyB0byBzb21ldGhpbmcgZm9yIHRyYWNpbmcuCi0KLTIwMTItMDMtMDggMTY6MjU6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBjb21tb246IHVwZGF0ZSBjb21tb24gbW9kdWxlCi0JICBGb3IgbWFrZSBmb28vYmFyLmNoZWNrLW5vcmVwZWF0IHRhcmdldC4KLQotMjAxMi0wMy0wOCAxNToyMzo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2Vlay5jOgotCSAgdGVzdHM6IGFkZCBtaW5pbWFsIGJhc2VzcmMgISBzaW5rIHNlZWtpbmcgdW5pdCB0ZXN0Ci0JICBTaG91bGQgcmVwcm9kdWNlICdHU3RyZWFtZXItV0FSTklORyAqKjogd3JvbmcgU1RSRUFNX0xPQ0sgY291bnQgMCcKLQkgIHdhcm5pbmdzICh3aXRoIG1ha2UgcGlwZWxpbmVzL3NlZWsudG9ydHVyZSBvciBwaXBlbGluZXMvc2Vlay5mb3JldmVyCi0JICBhbnl3YXksIHNpbmNlIGl0IGFwcGVhcnMgdG8gYmUgcmFjeSkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwODQ2Ci0KLTIwMTEtMTItMjYgMDA6MTg6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdmFsdWU6IHJlbW92ZSBnc3RfdmFsdWVfcmVnaXN0ZXJfe3N1YnRyYWN0LHVuaW9uLGludGVyc2VjdH1fZnVuYygpIEFQSQotCSAgVGhlcmUgaXNuJ3QgcmVhbGx5IGFueSBuZWVkIHRvIHByb3ZpZGUgcHVibGljIEFQSSBmb3IgdGhhdC4gSXQncyBub3QKLQkgIHVzZWQgYW55d2hlcmUgaW4gcHJhY3RpY2UsIGFuZCB3ZSBhaW0gdG8gcHJvdmlkZSBhbiBBUEkgdGhhdCB3b3JrcwotCSAgZm9yIEdzdENhcHMsIG5vdCBzb21lIGtpbmQgb2YgZ2VuZXJpYyBzZXQgbWFuaXB1bGF0aW9uIEFQSSBiYXNlZCBvbgotCSAgR1ZhbHVlLiBNYWtpbmcgdGhpcyBwcml2YXRlIGFsc28gbWFrZXMgaXQgZWFzaWVyIHRvIG9wdGltaXNlIHRoaXMKLQkgIGxhdGVyLiBXZSBjYW4gYWx3YXlzIHB1dCBpdCBiYWNrIGlmIHNvbWVvbmUgYWN0dWFsbHkgbmVlZHMgaXQuCi0KLTIwMTItMDMtMDggMTA6NDc6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICB0ZWU6IGZpeCByZWZjb3VudCBlcnJvcgotCi0yMDEyLTAzLTA4IDA5OjQ1OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHJldHVybiBBTlkgZm9yIGEgcGFkIHdpdGhvdXQgdGVtcGxhdGUKLQkgIEJlY2F1c2UgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMoKSByZXR1cm5zIEFOWSB3aGVuIHRoZXJlIGlzIG5vIHRlbXBsYXRlLAotCSAgdGhlIHF1ZXJ5IGNhcHMgZnVuY3Rpb24gc2hvdWxkIGFsc28gcmV0dXJuIEFOWSB3aGVuIHRoZXJlIGlzIG5vIHRlbXBsYXRlIChhbmQgbm8KLQkgIHBhZCBjdXJyZW50IGNhcHMpIGluc3RlYWQgb2YgRU1QVFkuCi0KLTIwMTItMDMtMDggMDk6NDQ6MjEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogc21hbGwgY2xlYW51cAotCi0yMDEyLTAzLTA3IDE1OjM0OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JICBtZW1vcnk6IGFkZCBjb21tZW50Ci0KLTIwMTItMDMtMDggMTA6MzI6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBGaXggbWVyZ2UgbWlzdGFrZQotCi0yMDEyLTAzLTA4IDEwOjE5OjUyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYwotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMKLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmMKLQotMjAxMi0wMy0wNyAxMToyMzo1NiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGFycmFuZ2UgZm9yIHByb3Blcmx5IGRpc2pvaW50IGZyYW1lIGZsYWdzCi0KLTIwMTItMDMtMDYgMTU6MTc6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogZGVsYXkgcG9vbCBhY3RpdmF0aW9uCi0JICBEZWxheSB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgYnVmZmVycG9vbCB1bnRpbCB3ZSBhY3R1YWxseSBuZWVkIGEgYnVmZmVyIGZyb20gdGhlCi0JICBwb29sLgotCi0yMDEyLTAzLTA2IDEyOjI4OjAyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogRml4ICdzZWxmLWNvbXBhcmlzb24gYWx3YXlzIGV2YWx1YXRlcyB0byB0cnVlJwotCSAgVGhpcyB3YXMgcmVhbGx5IGEgYnVnLgotCi0yMDEyLTAzLTA2IDEyOjI0OjUzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogRml4ICd1c2Ugb2YgbG9naWNhbCAnJiYnIHdpdGggY29uc3RhbnQgb3BlcmFuZCcgY29tcGlsZXIgd2FybmluZwotCSAgVGhpcyBpcyBhY3R1YWxseSBhIHJlYWwgYnVnLgotCi0yMDEyLTAzLTA2IDEyOjIzOjE1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBGaXggJ2VxdWFsaXR5IGNvbXBhcmlzb24gd2l0aCBleHRyYW5lb3VzIHBhcmVudGhlc2VzJyBjb21waWxlciB3YXJuaW5nCi0KLTIwMTItMDMtMDYgMTI6MTY6MTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IEZpeCAnY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBlbnVtIGV4cHJlc3Npb24gPj0gMCBpcyBhbHdheXMgdHJ1ZScgY29tcGlsZXIgd2FybmluZwotCi0yMDEyLTAzLTA1IDE1OjIzOjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGRvbid0IHByb3Bvc2VfYWxsb2NhdGlvbiBiZWZvcmUgbmVnb3RpYXRpb24KLQkgIEFuc3dlciB0aGUgYWxsb2NhdGlvbiBxdWVyeSB3aXRoIEZBTFNFIHdoZW4gd2UgYXJlIG5vdCBuZWdvdGlhdGVkIHlldCBiZWNhdXNlIGF0Ci0JICB0aGF0IHBvaW50IHdlIGhhdmUgbm8gaWRlYSBpZiB3ZSBuZWVkIHRvIHByb3h5IHRoZSBhbGxvY2F0aW9uIHF1ZXJ5IG9yIG5vdC4KLQotMjAxMi0wMy0wNSAxNDo0MToxMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBoYW5kbGluZyBvZiBtdWx0aXBsZSBuZXdzZWdtZW50IGV2ZW50cwotCSAgUHJldmlvdXNseSBvbmx5IHRoZSBsYXN0IHdvdWxkIGJlIHB1c2hlZCwgd2hpY2ggd291bGQgY2F1c2UKLQkgIGludmFsaWQgcnVubmluZyB0aW1lcyBkb3duc3RyZWFtLiBUaGlzIGFsc28gZml4ZXMgdGhlIGhhbmRsaW5nCi0JICBvZiB1cGRhdGUgbmV3c2VnbWVudCBldmVudHMuCi0KLTIwMTItMDMtMDUgMTQ6MjU6NTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBBbHNvIGZsdXNoIHRoZSBjbG9zZV9zZWdtZW50Ci0JICBQdXNoaW5nIHRoaXMgYWZ0ZXIgZmx1c2hpbmcgd2lsbCBjb25mdXNlIGRvd25zdHJlYW0uCi0KLTIwMTItMDMtMDUgMTQ6MjM6MTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBSZW1vdmUgb2Jzb2xldGUgY29kZSBhbmQgbW92ZSBnYXAgaGFuZGxpbmcgdG8gdGhlIGNvcnJlY3QgcGxhY2UKLQkgIFRoZSBzZWdtZW50IHN0YXJ0IGFkanVzdG1lbnQgY29kZSBpbiBwdWxsIG1vZGUgc2hvdWxkIG5ldmVyIHRyaWdnZXIKLQkgIGFueW1vcmUgYmVjYXVzZSB0aGUgYmlzZWN0aW9uIGNvZGUgZWFybGllciB3b3VsZCBoYXZlIGFscmVhZHkgbWFkZQotCSAgc3VyZSB0aGF0IHdlJ3JlIGF0IHRoZSBkZXNpcmVkIHBvc2l0aW9uLgotCSAgQWxzbyBtb3ZlIHRoZSBnYXAgaGFuZGxpbmcgc29tZSBsaW5lcyBiZWxvdyBhZnRlciBzZW5kaW5nIHRoZSBjdXJyZW50bHkKLQkgIGNvbmZpZ3VyZWQgc2VnbWVudHMuIE90aGVyd2lzZSB3ZSBtaWdodCBmaWxsIGdhcHMgaW4gYSBzZWdtZW50IHRoYXQgaXMKLQkgIG5vdCBjb25maWd1cmVkIGRvd25zdHJlYW0geWV0LgotCi0yMDEyLTAzLTA1IDEzOjEyOjE4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogQ2xlYXIgc29tZSBtb3JlIHN0YXRlIHdoZW4gcmVjZWl2aW5nIEZMVVNIX1NUT1AKLQkgIExpa2UgcGVuZGluZyBzZXJpYWxpemVkIGV2ZW50cyBhbmQgdGhlIGN1cnJlbnRseSBjYWNoZWQgYnVmZmVyLgotCi0yMDEyLTAzLTA1IDEzOjAwOjM4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogT25seSBxdWV1ZSBzZXJpYWxpemVkIGV2ZW50cyBmb3Igc2VuZGluZyB0aGVtIGxhdGVyCi0KLTIwMTItMDMtMDUgMDA6MzQ6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGxpYmdzdGNoZWNrOiBleHBvcnQgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfYWRkX3BhZCgpCi0JICBGaXggYnVpbGQgb2YgdGhlIGFkZGVyIHVuaXQgdGVzdCBpbiAtYmFzZSBhZ2Fpbi4KLQotMjAxMi0wMy0wMiAxNzozMjoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IHJlZmluZSBtZXRhZGF0YSBmaWx0ZXIgYW5kIHRyYW5zZm9ybQotCSAgQWRkIGEgdm1ldGhvZCB0byBmaWx0ZXIgbWV0YWRhdGEgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHVwc3RyZWFtLiBCeSBkZWZhdWx0LAotCSAgZG9uJ3QgcGFzcyBhbnl0aGluZy4KLQkgIEFkZCBhIHZtZXRob2QgdG8gdHJhbnNmb3JtIG1ldGFkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KLQkgIEJ5IGRlZmF1bHQsIG5vdGhpbmcgaXMgdHJhbnNmb3JtZWQgb3IgY29waWVkLgotCi0yMDEyLTAzLTAyIDE3OjA0OjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Lmg6Ci0JICBnc3Q6IGluY2x1ZGUgZ3N0bWV0YS5oCi0KLTIwMTItMDMtMDIgMTc6MDM6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBhZGQgbW9yZSBkZWJ1ZyBpbmZvCi0KLTIwMTItMDMtMDIgMTM6MDI6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogdXBkYXRlCi0KLTIwMTItMDMtMDIgMTM6MDI6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6Ci0JICB0ZXN0czogaW1wcm92ZSBtZXRhZGF0YSB0ZXN0Ci0KLTIwMTItMDMtMDIgMTI6NDU6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JICBtZXRhOiBhZGQgYm9vbGVhbiB0byBzaWduYWwgYSByZWdpb24gY29weQotCSAgQWRkIGEgYm9vbGVhbiB0byB0aGUgbWV0YWRhdGEgY29weSB0cmFuc2Zvcm0gdGhhdCBzaWduYWxzIGlmIGEgb25seSBhCi0JICByZWdpb24gaXMgY29waWVkLgotCi0yMDEyLTAzLTAyIDEyOjE2OjAzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkgIGNvbnNpdGVuY3ljaGVja2VyOiBkb24ndCBmYWlsIG9uIG11bHRpcGxlIGZsdXNoX3N0YXJ0IGV2ZW50cwotCSAgVGhpcyBzZWVtcyB0byBiZSBva2F5IGFmdGVyIGEgaXJjIGRpc2N1c3Npb24uCi0KLTIwMTItMDMtMDIgMTE6NTc6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXRhLmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSAgbWV0YTogdHJhbnNmb3JtIGRvY3MKLQkgIFVzZSBnc3QtIHByZWZpeCBmb3IgbWV0YWRhdGEgdHJhbnNmb3JtIHR5cGVzLgotCi0yMDEyLTAzLTAyIDExOjA0OjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuczogZml4IGNvbW1lbnQKLQotMjAxMi0wMy0wMiAxMTowNTo0OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIEFuZHJvaWQubWs6Ci0JKiBNYWtlZmlsZS5hbToKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0bWFyc2hhbC5saXN0OgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGluZGV4LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RtYXJzaGFsLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0bWFyc2hhbC5oOgotCSAgZ3N0OiBSZW1vdmUgZ3N0bWFyc2hhbC5bY2hdIGNvbXBsZXRlbHkgYW5kIHVzZSB0aGUgZ2VuZXJpYyBtYXJzaGFsbGVyCi0JICBGaXhlcyBidWcgIzY3MTEzMC4KLQotMjAxMi0wMy0wMiAxMDo1MTo0MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkgIGdzdDogRG9uJ3QgaW5zdGFsbCBnc3RtYXJzaGFsLmgKLQkgIFRoZSBnZW5lcmljLCBGRkkgYmFzZWQgbWFyc2hhbGxlciBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZXNlCi0JICBhbmQgd2UgZGVmaW5pdGVseSBzaG91bGRuJ3QgZXhwb3J0IHRoZSBtYXJzaGFsbGVycyBpbiBvdXIgcHVibGljIEFQSS4KLQotMjAxMi0wMy0wMSAxNzozOToxNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkgIG1ldGE6IGltcHJvdmUgZGVidWdnaW5nCi0JICBBZGQgY2F0ZWdvcnkgZm9yIG1ldGFkYXRhIGRlYnVnCi0KLTIwMTItMDMtMDEgMTc6Mzg6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogaW1wcm92ZSBkZWJ1Z2dpbmcKLQotMjAxMi0wMy0wMSAxNzozODoyNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBpbXByb3ZlIGRlYnVnZ2luZwotCi0yMDEyLTAzLTAxIDE1OjE4OjA0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYmFzZXRyYW5zZm9ybTogcmVtb3ZlIG1ldGFkYXRhIHRhZ2dlZCB3aXRoIHRoZSBtZW1vcnkgdGFnCi0JICBSZW1vdmUgbWV0YWRhdGEgdGhhdCBkZXNjcmliZXMgdGhlIHBhcnRpY3VsYXIgbWVtb3J5IG9mIHRoZSBidWZmZXIgaXQgaXMKLQkgIGF0dGFjaGVkIHRvLiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBpbiBub24tcGFzc3Rocm91Z2ggbW9kZSB3ZSB3aWxsIGFsbG9jYXRlCi0JICBuZXcgbWVtb3J5IGZvciBvdXIgb3V0cHV0IGJ1ZmZlci4KLQotMjAxMi0wMy0wMSAxNToxNzozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JICBtZXRhOiBhZGQgdGFnIGZvciBtZW1vcnkgbWV0YWRhdGEKLQotMjAxMi0wMy0wMSAxNDo0OTozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIHF1ZXJ5OiBhZGQgbWV0aG9kIHRvIHJlbW92ZSBhbGxvY2F0aW9uX21ldGEKLQkgIEFsc28gZ19yZXR1cm5faWZfZmFpbCBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW5zdGVhZCBvZiBzaWxlbnRseSBmYWlsaW5nLgotCi0yMDEyLTAzLTAxIDE0OjMwOjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYmFzZXRyYW5zZm9ybTogaW1wcm92ZSBwcm9wb3NlX2FsbG9jYXRpb24KLQkgIEltcHJvdmUgdGhlIHByb3Bvc2UgYWxsb2NhdGlvbiB2bWV0aG9kIGJ5IHBhc3NpbmcgdGhlIGRvd25zdHJlYW0gYWxsb2NhdGlvbgotCSAgcXVlcnkgdG8gaXQuIFRoaXMgd2F5IHRoZSB2bWV0aG9kIGltcGxlbWVudGF0aW9uIGNhbiB1c2UgcHJvcGVydGllcyBvZiB0aGUKLQkgIGRvd25zdHJlYW0gYWxsb2NhdGlvbiB0byBnZW5lcmF0ZSB0aGUgdXBzdHJlYW0gcXVlcnkgcmVzdWx0LiBJZiB0aGVyZSBpcyBubwotCSAgZG93bnN0cmVhbSBxdWV0eSwgaXQgbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBpcyB3b3JraW5nIGluIHBhc3N0aHJvdWdoIG1vZGUuCi0JICBJbXBsZW1lbnQgYSBkZWZhdWx0IGRlY2lkZV9hbGxvY2F0aW9uLgotCi0yMDEyLTAzLTAxIDExOjExOjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGNsZWFyIGFsbG9jYXRpb24gcGFyYW1ldGVycyBpbiBwYXNzdGhyb3VnaAotCSAgQ2xlYXIgdGhlIGFsbG9jYXRpb24gcGFyYW1ldGVycyB3aGVuIHdlIG9wZXJhdGUgaW4gcGFzc3Rocm91Z2guCi0KLTIwMTItMDMtMDEgMTE6MDY6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNmaWx0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9jYXBzbGlzdC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jOgotCSAgdGVzdHM6IGZpeCBvbGQgY2FwcyBpbiB0ZXN0cyBub3cgdGhhdCBjb3JlIHdhcm5zCi0KLTIwMTItMDMtMDEgMTQ6NTE6MjYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmM6Ci0JICBsaWJzOiBGaXggc29tZSBtZXJnZSBtaXN0YWtlcwotCi0yMDEyLTAzLTAxIDE0OjQzOjAxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYwotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmMKLQotMjAxMi0wMi0yOCAxMjowMzo0NiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IHNvbWUgZGVidWcgbWVzc2FnZSB0eXBvcwotCi0yMDEyLTAyLTI5IDIxOjU3OjAwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oOgotCSAgY29uc2l0ZW5jeWNoZWNrZXI6IGFkZCBoYW5kbGluZyBmb3Igc2luay1wYWRzCi0JICBBZGQgYSBwYWQtcHJvYmUgZm9yIHNpbmstcGFkcy4gT25lIGNhbiBub3cgYWRkIGV4dHJhIHBhZHMgKGJlbG9uZ2luZyB0byB0aGUgc2FtZQotCSAgZWxlbWVudCkgdG8gYSBjaGVja2VyLiBUaGlzIGFsbG93cyB1cyB0byBleHRlbmQgdGhlIGNoZWNrcy4KLQotMjAxMi0wMi0yOSAxNzoyMDoyMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0bmV0LmRlZjoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWV0YTogc3BsaXQgcmVnaXN0cmF0aW9uIG9mIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLQkgIFNwbGl0IG91dCB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBtZXRhZGF0YSBBUEkgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbi4gTWFrZSBhCi0JICBHVHlwZSBmb3IgZWFjaCBtZXRhZGF0YSBBUEkuIFRoaXMgYWxsb3dzIHVzIHRvIHN0b3JlIGV4dHJhIGluZm9ybWF0aW9uIHdpdGggdGhlCi0JICBBUEkgdHlwZSBzdWNoIGFzIHRoZSB0YWdzLgotCSAgQ2hhbmdlIHRoZSBidWZmZXIgQVBJIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgbWV0YWRhdGEgdXNpbmcgdGhlIEFQSSBHVHlwZS4KLQkgIENoYW5nZSB0aGUgcXVlcnkgQVBJIHNvIHRoYXQgd2UgdXNlIHRoZSBtZXRhZGF0YSBBUEkgR1R5cGUgaW4gdGhlIGFsbG9jYXRpb24KLQkgIHF1ZXJ5IGluc3RlYWQgb2YgYSBzdHJpbmcuCi0JICBVcGRhdGUgbmV0YWRkcmVzcyBhbmQgdW5pdCB0ZXN0cwotCi0yMDEyLTAyLTI5IDE2OjAwOjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgbWlub2JqZWN0OiBzbWFsbCAuaCBpbmRlbnQgZml4Ci0KLTIwMTItMDItMjkgMTI6NDE6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IHByaW50IGEgZ193YXJuaW5nKCkgaWYgc29tZW9uZSB0cmllcyB0byBjb25zdHJ1Y3QgMC4xMC1zdHlsZSByYXcgYXVkaW8vdmlkZW8gY2FwcwotCi0yMDEyLTAyLTI5IDA4OjQ0OjA0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkgIGNvbnNpc3RlbmN5Y2hlY2tlcjogYWxzbyBjaGVjayBmb3IgZHVwbGljYXRlZCBmbHVzaF9zdGFydHMKLQotMjAxMi0wMi0yOCAyMDozNjo1OSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkgIGNvbGxlY3RwYWRzMjogYWRkIG1vcmUgbG9nZ2luZwotCi0yMDEyLTAyLTI4IDE2OjE3OjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWV0YS5oOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgotCSAgbWV0YTogYWRkIHJldHVybiB2YWxlIHRvIHRyYW5zZm9ybQotCSAgQWRkIGEgYm9vbGVhbiByZXR1cm4gdmFsdWUgc28gdGhhdCB3ZSBjYW4gc2VlIHdoZW4gYSB0cmFuc2Zvcm0gZmFpbHMuCi0KLTIwMTItMDItMjggMTI6NTI6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXRhLmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBtZXRhOiBhZGQgbWV0aG9kIHRvIGNoZWNrIGZvciBhIHRhZwotCi0yMDEyLTAyLTI4IDEyOjUxOjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgotCSAgdGVzdHM6IGZpeCB1bml0IHRlc3QKLQotMjAxMi0wMi0yOCAxMTozNDo0OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuYzoKLQkgIG1ldGE6IGFkZCBzdXBwb3J0IHRvIHRhZ2dpbmcgdGhlIG1ldGFkYXRhCi0JICBBZGQgc3VwcG9ydCBmb3IgYWRkaW5nIHRhZ3MgdG8gdGhlIG1ldGFkYXRhLiB3aXRoIHNvbWUgc3RhbmRhcmQga2V5cywgdGhpcwotCSAgc2hvdWxkIG1ha2UgaXQgcG9zc2libGUgdG8gZGVzY3JpYmUgd2hhdCB0aGUgbWV0YWRhdGEgcmVmZXJzIHRvLiBXZSBzaG91bGQgYmUKLQkgIGFibGUgdG8gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gZGVjaWRlIGlmIGEgdHJhbnNmb3JtYXRpb24gZGVzdHJveXMgdGhlIG1ldGFkYXRhCi0JICBvciBub3QuCi0KLTIwMTItMDItMjcgMTM6MzU6MTAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBTdXBwcmVzcyBkZXByZWNhdGlvbiB3YXJuaW5ncyBpbiBzZWxlY3RlZCBmaWxlcywgZm9yIGdfdmFsdWVfYXJyYXlfKiBtb3N0bHkKLQotMjAxMi0wMi0yNyAxMTo0NjowOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOgotCSAgdGVzdHM6IGluY3JlYXNlIGJ1cyB0ZXN0IHRpbWVvdXQKLQotMjAxMi0wMi0yMSAyMDo0Mzo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RkYXRldGltZS5jOgotCSAgdGVzdHM6IG1ha2UgZGF0ZXRpbWUgdGVzdCBtb3JlIHJlbGlhYmx5IHdoZW4gY29tcGFyaW5nIHR3byBhbG1vc3QgaWRlbnRpY2FsIG5vd3MKLQkgIEFjY291bnQgZm9yIHJvdW5kaW5nIGVycm9ycyBpbiBzb21lIHBsYWNlcywgYW5kIHRoYXQgdHdvIG5vd3MgYXJlCi0JICBub3QgYWx3YXlzIGVudGlyZWx5IGlkZW50aWNhbCwgc28gYWxsb3cgc29tZSBsZWV3YXkgd2hlbiBjb21wYXJpbmcKLQkgIG1pY3Jvc2Vjb25kcyBhbmQgc2Vjb25kcy4gUmFuIGludG8gdGhpcyB0b28gb2Z0ZW4sIGVzcC4gd2hlbiB0aGUKLQkgIHN5c3RlbSBpcyB1bmRlciBsb2FkLgotCi0yMDEyLTAyLTI3IDA5OjQ4OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RidXMuaDoKLQkgIHJlbW92ZSBzb21lIHVzZWxlc3MgaW5jbHVkZXMgaW4gLmgKLQotMjAxMi0wMi0yNyAwOTowMjowNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgY2xvY2s6IG1ha2UgbW9yZSBzdHVmZiBwcml2YXRlCi0JICBFeHBvc2UgbWV0aG9kcyB0byBnZXQgYW5kIHNldCB0aGUgdGltZW91dCBiZWNhdXNlIHN1YmNsYXNzZXMgdXNlcyB0aGlzLgotCi0yMDEyLTAyLTI2IDIwOjQ1OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5oOgotCSAgc3lzdGVtY2xvY2s6IG1ha2UgbW9yZSBzdHVmZiBwcml2YXRlCi0KLTIwMTItMDItMjYgMjA6NDQ6NTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSAgYnVmZmVycG9vbDogbWFrZSBtb3JlIHN0dWZmIHByaXZhdGUKLQotMjAxMi0wMi0yNiAxNjozMjozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGJ1cy5oOgotCSAgYnVzOiBtYWtlIG1vcmUgZmllbGRzIHByaXZhdGUKLQotMjAxMi0wMi0yNyAwMDowOTo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JICBmZHNpbms6IGZpeCBjb21waWxhdGlvbiBhZnRlciBtZXJnZQotCi0yMDEyLTAyLTI3IDAwOjA4OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBORVdTCi0JICBSRUxFQVNFCi0JICBjb25maWd1cmUuYWMKLQkgIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHkKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmMKLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmMKLQkgIHdpbjMyL2NvbW1vbi9jb25maWcuaAotCSAgd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jCi0JICB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oCi0KLTIwMTItMDItMjYgMjM6MTE6MjMgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmM6Ci0JICBjb2xsZWN0cGFkczI6IHJlc2N1ZSB0aGUgYW5ub3RhdGlvbiBmcm9tIGNvbGxlY3RwYWRzCi0KLTIwMTItMDItMjYgMjM6MTA6NTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGRvY3M6IGZpeCBhIHR5cG8gaW4gY29tbWVudAotCi0yMDEyLTAyLTI2IDIyOjU3OjAyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSAgY29sbGVjdHBhZHMyOiBtb3ZlICJNVCBzYXZlIiB0YWdzIHRvIGRvYyBib2R5Ci0JICBJdCBpcyBub3QgdXNlZnVsIHRvIGhhdmUgIk1UIHNhZmUiIHRhZ3MgcmFuZG9tbHkgaW4gYm9keSwgcmV0dXJucyBvciBzaW5jZSBwYXJhZ3JhcGhzLgotCi0yMDEyLTAyLTI1IDE1OjE4OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkgIGZkc2luazogaW1wbGVtZW50IEdzdEJhc2VTaW5rOjpxdWVyeSBpbnN0ZWFkIG9mIG1lc3Npbmcgd2l0aCB0aGUgcGFkCi0KLTIwMTItMDItMjUgMTU6MDg6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaDoKLQkgIGZkc2luazogaW1wbGVtZW50IFNFRUtJTkcgcXVlcnkKLQkgIFdlIG1heSBvciBtYXkgbm90IHN1cHBvcnQgc2Vla2luZy4gc3Rkb3V0IHRvIGEKLQkgIHRlcm1pbmFsIGRvZXNuJ3Qgc3VwcG9ydCBzZWVraW5nLCBmb3IgZXhhbXBsZSwgYnV0Ci0JICAuLi4gISBmZHNpbmsgPiBmaWxlLmZvbyBqdXN0IG1pZ2h0LgotCi0yMDEyLTAyLTI1IDE1OjA3OjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSAgZmlsZXNpbms6IGltcGxlbWVudCBTRUVLSU5HIHF1ZXJ5Ci0JICBXZSBtYXkgb3IgbWF5IG5vdCBkbyBzZWVraW5nLCBkZXBlbmRzIG9uIHRoZQotCSAgb3V0cHV0IGZpbGUvZGV2aWNlIHJlYWxseSwgaXQgZG9lc24ndCBoYXZlIHRvCi0JICBiZSBhIGZpbGUgYWZ0ZXIgYWxsLgotCi0yMDEyLTAyLTI1IDE1OjA3OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgZmFrZXNpbms6IGFuc3dlciBTRUVLSU5HIHF1ZXJ5Ci0JICBXZSBkb24ndCBkbyBzZWVraW5nLCBpbiBjYXNlIGFueW9uZSB3YW50cyB0byBrbm93LgotCi0yMDEyLTAyLTI0IDIzOjM5OjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICByZWdpc3RyeTogZml4IGxzZWVrKCkgcmV0dXJuIGNvZGUgaGFuZGxpbmcKLQkgIGxzZWVrKCkgcmV0dXJucyB0aGUgb2Zmc2V0IGlmIHN1Y2Nlc3NmdWwsIGFuZCB0aGlzIGlzICE9IDAgYW5kCi0JICBkb2VzIG5vdCBpbmRpY2F0ZSBhbiBlcnJvci4gQW5kIGlmIGl0IGRvZXMgYWN0dWFsbHkgZmFpbCwgZG9uJ3QKLQkgIHJldHVybiBGQUxTRSAoMCkgYXMgYW4gaW50LCBidXQgLTEuIE5vbmUgb2YgdGhlc2UgdGhpbmdzIGFyZQotCSAgbGlrZWx5IHRvIGhhdmUgbWFkZSBhIGRpZmZlcmVuY2UsIGV2ZXIuIEkgZG9uJ3QgdGhpbmsgdGhlIG9mZnNldAotCSAgc2VlayBjYW4gZXZlciBhY3R1YWxseSBoYXBwZW4sIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gYW5kIHRoZQotCSAgY3VycmVudCBvZmZzZXQgc2hvdWxkIGFsd2F5cyBiZSBpbmNyZWFzZWQgaW4gbG9jayBzdGVwLCB1bmxlc3MKLQkgIHRoZXJlIHdhcyBhbiBlcnJvciBpbiB3aGljaCBjYXNlIHdlJ2QganVzdCBlcnJvciBvdXQuCi0KLTIwMTItMDItMjQgMjM6MTk6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5OiBkb24ndCBmb3JnZXQgdG8gY2xlYW4gdXAgcmVnaXN0cnkgdGVtcCBmaWxlIGluIGFub3RoZXIgZXJyb3IgY2FzZQotCSAgQWxzbyBjbGVhbiB1cCB0ZW1wIGZpbGUgaWYgd2UgZ2V0IGFuIGVycm9yIGR1cmluZyB3cml0ZSgpIHJhdGhlcgotCSAgdGhhbiBqdXN0IHdoZW4gZG9pbmcgZnN5bmMoKSBvciBjbG9zZSgpLgotCi0yMDEyLTAyLTI0IDE1OjI0OjQyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YXRvbWljcXVldWUuYzoKLQkgIGF0b21pY3F1ZXVlOiBmaXggcmFjZQotCSAgQWZ0ZXIgYSB3cml0ZXIgaGFzIHdyaXR0ZW4gdG8gaXRzIHJlc2VydmVkIHdyaXRlIGxvY2F0aW9uLCBpdCBjYW4gb25seSBtYWtlIHRoZQotCSAgbG9jYXRpb24gYXZhaWxhYmxlIGZvciByZWFkaW5nIGlmIGFsbCBvZiB0aGUgd3JpdGVycyB3aXRoIGxvd2VyIGxvY2F0aW9ucyBoYXZlCi0JICBmaW5pc2hlZC4KLQotMjAxMi0wMi0yNCAxMjo1MToyNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6Ci0JICBhdG9taWNxdWV1ZTogZml4IHN1YnRsZSByYWNlCi0JICBGaXggYSByYWNlIHdoZXJlIHRoZSByZWFkZXIgd291bGQgc2VlIHRoZSB1cGRhdGVkIHRoZSB0YWlsIHBvaW50ZXIgYmVmb3JlIHRoZQotCSAgd3JpdGUgY291bGQgd3JpdGUgdGhlIGRhdGEgaW50byB0aGUgcXVldWUuIEZpeCB0aGlzIGJ5IGhhdmluZyBhIHNlcGFyYXRlIHJlYWRlcgotCSAgdGFpbCBwb2ludGVyIHRoYXQgaXMgb25seSBpbmNyZW1lbnRlZCBhZnRlciB0aGUgd3JpdGVyIHdyb3RlIHRoZSBkYXRhLgotCi0yMDEyLTAyLTI0IDExOjAwOjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBiYXNldHJhbnNmb3JtOiBmaXggcmVjb25maWd1cmUgbWV0aG9kcwotCSAgUmVuYW1lIGdzdF9iYXNlX3RyYW5zZm9ybV9zdWdnZXN0IHRvIGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rIGJlY2F1c2UKLQkgIHRoYXQgaXMgd2hhdCBpdCBkb2VzLiBBbHNvIHJlbW92ZSB0aGUgY2FwcyBhbmQgc2l6ZSBiZWNhdXNlIHRoYXQgaXMgbm90IG5lZWRlZC4KLQkgIFJlbmFtZSBnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUgdG8gZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3NyYy4KLQkgIFJlbW92ZSBzb21lIG9sZCB1bnVzZWQgY29kZSBpbiBjYXBzZmlsdGVyLgotCi0yMDEyLTAyLTI0IDEwOjIzOjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWV0YTogZmxlc2ggb3V0IHRoZSBtZXRhZGF0YSB0cmFuc2Zvcm0KLQkgIEZsZXNoIG91dCB0aGUgdHJhbnNmb3JtIG1ldGhvZC4gQWRkIGEgdHlwZSBhbmQgZXh0cmEgaW5mbyB0byB0aGUgdHJhbnNmb3JtCi0JICBmdW5jdGlvbiBzbyB0aGF0IGltcGxlbWVudGF0aW9uIGNhbiB0cmFuc2Zvcm0gdGhlIG1ldGFkYXRhLgotCSAgUmVtb3ZlIHRoZSBjb3B5IGZ1bmN0aW9uIGFuZCByZXBsYWNlIHdpdGggdGhlIG1vcmUgZ2VuZXJpYyB0cmFuc2Zvcm0uCi0KLTIwMTItMDItMjQgMTA6MjM6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWV0YS50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgZG9jcwotCi0yMDEyLTAyLTIzIDA4OjQ4OjIyIC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBGaXggZ2FwIGluIE1ha2VmaWxlCi0KLTIwMTItMDItMjMgMDg6NDg6MTAgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JICBzcGVsbGluZyBmaXgKLQotMjAxMS0xMi0yNiAxNjo0NToyMCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBwb2xsOiBmaXggc3BlbGxpbmcgb2Ygd3JpdGFibGUKLQotMjAxMi0wMi0yMyAxNTozMjozMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiBhZGQgdXNlcl9kYXRhIHRvIEdzdE1hcEluZm8KLQkgIEFkZCBleHRyYSBwb2ludGVycyB0byBHc3RNYXBJbmZvIHNvIHRoYXQgaW1wbGVtZW50YXRpb25zIGNhbiB1c2UgdGhlc2UgdG8gc3RvcmUKLQkgIGV4dHJhIGluZm8uCi0KLTIwMTItMDItMjMgMTU6MzI6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBpbXByb3ZlIGRvY3MKLQotMjAxMi0wMi0yMyAxMjowOTozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSAgVXBkYXRlIE5FV1MgYW5kIFJFTEVBU0UgYXMgd2VsbAotCi0yMDEyLTAyLTIzIDExOjU5OjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgZG9jczogcmVtb3ZlIHRyYW5zZm9ybSBsb2NrCi0KLTIwMTItMDItMjMgMTA6MzY6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBCdW1wIHZlcnNpb24gYWZ0ZXIgcmVsZWFzZXMKLQotMjAxMi0wMi0yMyAxMTowODoyNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IHJlbW92ZSB0cmFuc2Zvcm0gbG9jawotCSAgVGhpcyBpcyBub3QgbmVlZGVkIGFueW1vcmUgYnkgdGhlIGJhc2VjbGFzcy4gc3ViY2xhc3NlcyBzaG91bGQgZG8gdGhlaXIgb3duCi0JICBsb2NraW5nIHdoZW4gbmVlZGVkLgotCi0yMDEyLTAyLTIzIDEwOjEyOjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuczogY2xlYW51cHMKLQkgIENsZWFuIHVwIHRoZSBzZXRjYXBzIGZ1bmN0aW9uLgotCSAgVGhlIHBhc3N0aHJvdWdoIHZhcmlhYmxlIGlzIHByb3RlY3RlZCB3aXRoIHRoZSBvYmplY3QgbG9jay4KLQotMjAxMi0wMi0yMiAxNToyNjowNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IGltcHJvdmUgcHJvcG9zZV9hbGxvY2F0aW9uCi0JICBBbHdheXMgY2FsbCB0aGUgcHJvcG9zZV9hbGxvY2F0aW9uIG1ldGhvZCBhbmQgcHJvdmlkZSBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLQkgIHRoYXQgcGFzc2VzIHRoZSBxdWVyeSBvbiBpbiBwYXNzdGhyb3VnaCBtb2RlIHNvIHRoYXQgc3ViY2xhc3NlcyBjYW4gYWxzbyBjYWxsCi0JICB0aGlzLiBBbHNvIHBhc3MgaWYgdGhlIHRyYW5zZm9ybSBpcyBpbiBwYXNzdGhyb3VnaCBtb2RlIHNvIHRoYXQgdGhlCi0JICBpbXBsZW1lbnRhdGlvbiBjYW4gYWRqdXN0IGl0cyBhbGdvcml0aG0uCi0KLTIwMTItMDItMjIgMTI6MjQ6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBiYXNldHJhbnM6IGltcHJvdmUgZml4YXRlX2NhcHMgZnVuY3Rpb24KLQkgIE1ha2UgaXQgcG9zc2libGUgdG8gYWxzbyBpbXBsZW1lbnQgbm9uLWlucGxhY2UgZml4YXRlIGZ1bmN0aW9ucy4gTGV0IHRoZSBmaXhhdGUKLQkgIGZ1bmN0aW9uIG1ha2UgdGhlIGNhcHMgd3JpdGFibGUgd2hlbiBuZWVkZWQgYmVjYXVzZSBzb21lIGZpeGF0ZSBmdW5jdGlvbnMgbWlnaHQKLQkgIG5vdCBuZWVkIHRvIG1vZGlmeSB0aGUgY2Fwcy4KLQotMjAxMi0wMi0yMiAwMjowMjo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKLQkgIG1lbW9yeTogbWFrZSBfbmV3X3dyYXBwZWQgdGFrZSB1c2VyX2RhdGEgYW5kIG5vdGlmeQotCSAgTWFrZSBpdCBwb3NzaWJsZSB0byBjb25maWd1cmUgYSBHRGVzdHJveU5vdGlmeSBhbmQgdXNlcl9kYXRhIGZvcgotCSAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCgpIHRoaXMgYWxsb3dzIGZvciBtb3JlIGZsZXhpYmxlIHdyYXBwaW5nIG9mIGZvcmVpZ24KLQkgIG1lbW9yeSBibG9ja3MuCi0KLTIwMTItMDItMDIgMTM6NDU6MjUgLTA1MDAgIFJ5YW4gTG9ydGllIDxkZXNydEBkZXNydC5jYT4KLQotCSogYXV0b2dlbi5zaDoKLQkgIGJ1aWxkOiBhdm9pZCB0b3VjaGluZyAucG8gZmlsZXMgZHVyaW5nICdtYWtlJwotCSAgQSBzaW1wbGUgd29ya2Fyb3VuZCB0byBkZWFsIHdpdGggR05VIGdldHRleHQgYXV0b21ha2UgaW50ZWdyYXRpb24KLQkgIGZhaWxpbmcgdG8gZGVhbCB3aXRoIGdpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjkyMDcKLQotMjAxMi0wMi0yMSAyMTowNjoxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXQtc2VsZWN0b3I6IGRlZmF1bHQgdG8gc3luYy1zdHJlYW1zPXRydWUKLQkgIEkgdGhpbmsgdGhpcyBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyLCBhbmQgd2UgY291bGRuJ3QgZG8gdGhpcwotCSAgaW4gMC4xMCBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgcmVhc29ucywgc28gY2hhbmdlIGl0IG5vdy4KLQotMjAxMi0wMi0yMSAxNjozOTowNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzoKLQkgIHRlc3RzOiBmaXggcXVldWUgdW5pdCB0ZXN0IGFmdGVyIHF1ZXVlIGNoYW5nZXMKLQotMjAxMi0wMi0yMSAxNjozODozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IHJlbW92ZSBzb21lIG9sZCBjb2RlCi0KLTIwMTItMDItMjEgMTY6Mzc6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogaGFuZGxlIE5VTEwgY2FsbGJhY2tzCi0JICBXaGVuIHdlIGhhdmUgYSBtYXRjaGluZyBOVUxMIGNhbGxiYWNrLCBhbHNvIGNvbnNpZGVyIHRoZSAnY2FsbGJhY2snIG1hcnNoYWxsZWQsCi0JICB0aGlzIHdheSBibG9ja2luZyBwcm9iZXMgd2l0aCBhIE5VTEwgY2FsbGJhY2sgYWN0dWFsbHkgd29yay4KLQotMjAxMi0wMi0yMSAxMjo1Mjo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IHJlbW92ZSB3ZWlyZCBsaW5rIGJlaGF2aW91cgotCSAgUmVtb3ZlIHRoZSBsaW5rIGZ1bmN0aW9ucyBhbmQgYWx3YXlzIHN0YXJ0IHRoZSBwYWQgdGFzayBvbiB0aGUgc3JjcGFkLiBJZgotCSAgYXBwbGljYXRpb25zIG5lZWQgdG8gYXV0b3BsdWcgdGhleSBjYW4gcHV0IGEgYmxvY2tpbmcgcHJvYmUgb24gdGhlIHNyY3BhZCBsaWtlCi0JICB0aGV5IHdvdWxkIHdpdGggYW55IG90aGVyIGVsZW1lbnQuCi0KLTIwMTItMDItMjEgMTI6NTI6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgZmFrZXNyYzogaGFuZGxlIHB0cy9kdHMKLQotMjAxMi0wMi0yMSAxMjo0Njo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgZmFrZXNpbms6IHJlbW92ZSBjdXN0b20gbWFyc2hhbGxlcgotCi0yMDEyLTAyLTIxIDEyOjQzOjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBpZGVudGl0eTogYWxzbyBkZWJ1ZyBkdHMvcHRzCi0KLTIwMTItMDItMjEgMTI6MTM6MjggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkgIGZha2VzaW5rOiBkZWJ1ZyBwdHMgYW5kIGR0cwotCi0yMDEyLTAyLTIxIDEyOjEyOjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBpZGVudGl0eTogcmVtb3ZlIGN1c3RvbSBtYXJzaGFsbGVyCi0KLTIwMTEtMTEtMjQgMTg6NDA6NDAgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIFVuaXQgdGVzdCBmb3IgcXVldWUgc3JjIGNhcHMgbm90aWZpY2F0aW9uCi0KLTIwMTItMDItMjAgMTQ6Mzc6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JICB0ZXN0czogZml4IHVzZWxlc3Mgc2VnbWVudCB0ZXN0Ci0KLTIwMTItMDItMjAgMTQ6Mjk6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBzZWdtZW50OiBkb24ndCB1c2UgZHVyYXRpb24gaW4gY2xpcHBpbmcKLQkgIERvbid0IHVzZSB0aGUgZHVyYXRpb24gaW4gdGhlIHNlZ21lbnQgZm9yIGNhbGN1bGF0aW5nIGNsaXBwaW5nIHZhbHVlcy4KLQkgIFRoZSBkdXJhdGlvbiBpcyBleHByZXNzZWQgaW4gc3RyZWFtIHRpbWUgYW5kIGNsaXBwaW5nIGlzIGRvbmUgb24gdW5yZWxhdGVkCi0JICB0aW1lc3RhbXAgdmFsdWVzLgotCSAgVGhpcyB1c2VkIHRvIGJlIGludGVyZXN0aW5nIGZvciBlbGVtZW50cyB0aGF0IHVzZWQgdGhlIHNlZ21lbnQgc3RydWN0dXJlIHRvCi0JICBpbXBsZW1lbnQgc2Vla2luZyBiZWNhdXNlIHRoZW4gdGhleSB3b3VsZCB1c2Ugc3RyZWFtLXRpbWUgZm9yIHRoZSBzZWdtZW50Ci0JICBzdGFydC9zdG9wIHZhbHVlcyBhbmQgdGhlIGR1cmF0aW9uIGNvdWxkIGJlIHVzZWQgYXMgYSBmYWxsYmFjayB3aGVuIHRoZSBzdG9wCi0JICBwb3NpdGlvbiB3YXMgbm90IHNldC4gTm93IHRoYXQgdGhlIGNvbXBsZXRlIHNlZ21lbnQgZXZlbnQgaXMgcGFzc2VkIGJldHdlZW4KLQkgIGVsZW1lbnRzIHdlIGNhbm5vdCBkbyB0aGlzIGFueW1vcmUgYmVjYXVzZSBzb21lIGVsZW1lbnRzIG1pZ2h0IHN0b3JlIHRoZQotCSAgZHVyYXRpb24gYW5kIHN0YXJ0L3N0b3AgdmFsdWVzIHdpdGggZGlmZmVyZW50IHRpbWUgYmFzZXMgaW4gdGhlIHNlZ21lbnQuCi0KLTIwMTItMDItMjAgMTQ6MjI6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBkZWJ1ZyBzZWdtZW50IGR1cmF0aW9uIGFzIHdlbGwKLQotMjAxMi0wMi0yMCAxMTo0NjozNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBjb3B5IG1ldGFkYXRhIHdoZW4gdXNpbmcgYSBwb29sCi0JICBhbHNvIGNvcHkgdGhlIG1ldGFkYXRhIHdoZW4gd2UgYWxsb2NhdGVkIGEgbmV3IGJ1ZmZlciBmcm9tIGEgcG9vbAotCi0yMDEyLTAxLTI2IDAzOjAyOjQ4IC0wNTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgotCSAgbmV0dGltZXBhY2tldDogZml4IHByaW50ZiBmb3JtYXQgd2FybmluZyBpbiBkZWJ1ZyBtZXNzYWdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0NDkxCi0KLTIwMTItMDItMTggMDE6MDQ6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogZml4IG1vcmUgZG9jcwotCi0yMDEyLTAyLTE3IDE1OjUzOjU4IC0wODAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgZG9jIGZpeHVwcwotCi0yMDEyLTAyLTE3IDE1OjA5OjU2IC0wODAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBNb3ZlIHZhcmlhYmxlIGFuZCBhc3NpZ25tZW50IHRvIHdoZXJlIGl0J3MgbmVlZGVkCi0KLTIwMTItMDItMTcgMTU6MDk6MDYgLTA4MDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEhhbmRsZSByZXR1cm4gdmFsdWUgb2YgZGVjaWRlX2FsbG9jYXRpb24gdm1ldGhvZAotCSAgSWYgaXQgZmFpbHMsIHByb3Blcmx5IHByb3BhZ2F0ZSB0aGUgZXJyb3IKLQotMjAxMi0wMi0xNyAxNTowODozMiAtMDgwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IFJlbW92ZSB1c2VsZXNzIGFzc2lnbm1lbnQKLQotMjAxMi0wMi0xNyAxNTowNzo1NiAtMDgwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IEdyYWNlZnVsbHkgaGFuZGxlIE5VTEwgR3ZhbHVlCi0JICBBdm9pZHMgdW5yZWZlcmVuY2luZyBOVUxMIHBvaW50ZXIKLQotMjAxMi0wMi0xOCAwMDowMzo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBtYWtlIHNvbWUgZXJyb3JzIGNyaXRpY2FsCi0JICBXaGVuIHdlIGhhdmUgbm8gY2hhaW4gZnVuY3Rpb24gb3Igd2hlbiB3ZSBhcmUgb3BlcmF0aW5nIHRoZSBwYWQgaW4gdGhlIHdyb25nCi0JICBtb2RlLCBlbWl0IGEgY3JpdGljYWwgaW5zdGVhZCBvZiBwb3N0aW5nIGFuIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMgY2VydGFpbmx5IGEKLQkgIHByb2dyYW1taW5nIGVycm9yIGFuZCB3ZSBjYW5ub3QgYWx3YXlzIHBvc3QgYSBtZXNzYWdlIChsaWtlIHdoZW4gdGhlIHBhZCBoYXMgbm8KLQkgIHBhcmVudCkKLQotMjAxMi0wMi0xOCAwMDowMzoxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IGFsc28gZGVidWcgcG9zaXRpb24gb2Ygc2VnbWVudAotCi0yMDEyLTAyLTE3IDIzOjU5OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgd2luMzI6IGJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotMjAxMi0wMi0xNyAxMTowMjo0MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBiYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDAuMTEuMiA9PT0KLQotMjAxMi0wMi0xNyAxMTowMToxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSRUxFQVNFIDAuMTEuMgotCi0yMDEyLTAyLTE1IDE3OjEyOjA5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHR3ZWFrIHNvbWUgZG9jdW1lbnRhdGlvbgotCi0yMDEyLTAyLTE1IDE3OjExOjU0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHNpbXBsaWZ5IGFuZCBpbXByb3ZlIGZyYW1lIHN0YXRlIGhhbmRsaW5nCi0JICBVc2UgYSBmcmFtZSBmbGFnIHRvIHNpZ25hbCB0byBzdWJjbGFzcyBpdCBzaG91bGQgcmVzZXQgYW55IHJldGFpbmVkCi0JICBzdGF0ZSB3LnIudC4gZnJhbWUgcGFyc2luZyBzaW5jZSB0aGUgZnJhbWUgYmVpbmcgcGFzc2VkIGlzICduZXcnLAotCSAgaS5lLiBub3QgcmVsYXRlZCB0byBwcmV2aW91c2x5IHBhc3NlZCBhbmQgcHJvY2Vzc2VkIGRhdGEuCi0KLTIwMTItMDItMTUgMTM6MTU6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGRvbid0IGxlYWsgZXZlbnQKLQkgIEluIHRoZSB1bmxpa2VseSBjYXNlIHdoZXJlIHRoZSBzdWJjbGFzcyBzZXQgdGhlIGV2ZW50IGZ1bmN0aW9uIHRvIE5VTEwsIGRvbid0Ci0JICBsZWFrIHRoZSBldmVudC4KLQotMjAxMi0wMi0xNSAxMjoxOToxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbWFrZSBhY3RpdmF0aW9uIGNvZGUgbW9yZSBsaWtlIG90aGVyCi0JICBNYWtlIHRoZSBwYWQgYWN0aXZhdGlvbiBjb2RlIGxvb2sgbW9yZSBsaWtlIG90aGVyIGFjdGl2YXRpb24gY29kZS4KLQkgIE9ubHkgc3RhcnQgdGhlIHNpbmtwYWQgdGFzayB3aGVuIHdlIGRlY2lkZSB0byBhY3RpdmF0ZSBpbiBwdWxsIG1vZGUsIHdoZW4gd2UKLQkgIGxhdGVyIGFkZCBzcmNwYWQgcHVsbG1vZGUgdGhpcyB3aWxsIGJlIG5lZWRlZC4KLQotMjAxMi0wMi0xNSAxMjoxODozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IGFkZCBtb3JlIGRlYnVnCi0KLTIwMTItMDItMTUgMTE6MTE6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGFkZCBzb21lIG1vcmUgZGVidWcKLQotMjAxMi0wMi0xNSAxMDo1ODowOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHRyYWNrIGNvbnN1bWVkIGlucHV0IHNpemUKLQkgIC4uLiBhcyB1c2VkIGJ5IHN1YnNlcXVlbnQgaW5wdXQgZGF0YSByYXRlIGVzdGltYXRpb24gKGFuZCBzZWVraW5nKS4KLQotMjAxMi0wMi0xNSAxMDoxMTozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGNoYWluIHVwIHRvIHBhcmVudCBmb3IgZGVmYXVsdHMKLQkgIENoYWluIHVwIHRvIHRoZSBwYXJlbnQgaW5zdGVhZCBvZiB1c2luZyB0aGUgRkFMU0UgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGV2ZW50Ci0JICBmdW5jdGlvbiAoYmVjYXVzZSBpdCdzIG90aGVyd2lzZSBpbXBvc3NpYmxlIHRvIHJldHVybiBhbiBlcnJvcikuCi0KLTIwMTItMDItMTUgMTA6MTA6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogZG9uJ3QgaWdub3JlIHJldHVybiB2YWx1ZSB3aGVuIHN0YXJ0aW5nIGEgdGFzawotCi0yMDEyLTAyLTE0IDIwOjE3OjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogUmV2ZXJ0ICJiYXNlcGFyc2U6IHJlYWxseSBwcm92aWRlIHVwc3RyZWFtIHRzIHRvIHN1YmNsYXNzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyMzYzNDkwZWY1YTlmZThkNDE0MzY5ZDI0ZmNhYTY1YTlkZmE4M2FjLgotCi0yMDEyLTAyLTE0IDE5OjMzOjUwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVtb3ZlIGRlYWQgY29kZSBhbmQgc3VwZXJmbHVvdXMgbG9vcCBsZXZlbAotCi0yMDEyLTAyLTE0IDE5OjMzOjQ2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbW9kaWZ5IHJldmVyc2UgcGxheWJhY2sgaGFuZGxpbmcKLQkgIC4uLiBzbyBhcyB0byBhbGxvdyB0aGUgcHVzaC1tb2RlIGNhc2UgdG8gcHJvdmlkZSBkYXRhIHRvIHN1YmNsYXNzCi0JICBvbiBhIGJ1ZmZlciBieSBidWZmZXIgYmFzaXMgKGFzIGluIHJlZ3VsYXIgZm9yd2FyZCBjYXNlKSwgcmF0aGVyCi0JICB0aGFuIGFsbCBidWZmZXJzIG9mIGEgZnJhZ21lbnQgY2h1Y2tlZCB0b2dldGhlci4KLQkgIEFsc28gcmVmYWN0b3IgYnVmZmVyIGhhbmRsaW5nIHNvbWUgbW9yZSwgYW5kIGFkZCBzb21lIGRlYnVnLgotCi0yMDEyLTAyLTE0IDE5OjMzOjMzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVhbGx5IHByb3ZpZGUgdXBzdHJlYW0gdHMgdG8gc3ViY2xhc3MKLQotMjAxMi0wMi0xNCAxMzoyNDo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBjbGVhbiB1cCBzcmMgcXVlcnkgaGFuZGxlcgotCi0yMDEyLTAyLTE0IDEyOjU3OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IHBhc3MgcmVzdWx0cyBmcm9tIGFjdGl2YXRpb24KLQotMjAxMi0wMi0xNCAxMDozNTowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDEyLTAyLTE0IDEwOjMwOjQwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBkZWZzOiB1cGRhdGUKLQotMjAxMi0wMi0xMyAxODoyMjozNyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBtb2RpZnkgQVBJIHRvIGEgX2ZpbmlzaF9mcmFtZSBiYXNlZCBhcHByb2FjaAotCSAgLi4uIHdoaWNoIGFsaWducyBpdCB3aXRoIG90aGVyIGJhc2VjbGFzcyBpbiB0aGUgd2lsZCwgYW5kIHNob3VsZCBnaXZlCi0JICBjb252ZXJ0ZXIgcGFyc2VycyBhIGJpdCBjbGVhbmVyIGZyZWVkb20uCi0KLTIwMTItMDItMTMgMTg6MDk6NTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggcmV2ZXJzZSBwbGF5YmFjawotCSAgLi4uIGVzcGVjaWFsbHkgZm9yIGFsbC1rZXlmcmFtZSAoYXVkaW8pIGNhc2VzLgotCi0yMDEyLTAyLTEzIDE2OjMzOjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVtb3J5LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1lbW9yeTogbW9yZSB3b3JrIG9uIHJlZmNvdW50IGFuZCB3cml0YWJpbGl0eQotCSAgUmVuYW1lIF9pc193cml0YWJsZSgpIHdpdGggX2lzX2V4Y2x1c2l2ZSBiZWNhdXNlIHRoZSB3cml0YWJpbGl0eSBkb2VzIG5vdCBkZXBlbmQKLQkgIG9uIHRoZSBhbW91bnQgb2YgcmVmZXJlbmNlcyB0byB0aGUgbWVtb3J5IG9iamVjdCBhbnltb3JlLgotCSAgQWRkIGFjY2Vzc29yIG1hY3JvcyBmb3IgdGhlIG1lbW9yeSBmbGFncy4KLQkgIFJlbmFtZSB0aGUgR3N0QnVmZmVyIF9wZWVrX21lbW9yeSgpIG1ldGhvZCB0byBfZ2V0X21lbW9yeSgpIGFuZCByZXR1cm4gYQotCSAgcmVmZXJlbmNlIHRvIHRoZSBtZW1vcnkgbm93IHRoYXQgd2UgY2FuIGRvIHRoaXMgd2l0aG91dCBhZmZlY3Rpbmcgd3JpdGFiaWxpdHkKLQkgIG9mIHRoZSBtZW1vcnkgb2JqZWN0LiBNYWtlIGl0IHBvc3NpYmxlIHRvIGFsc28gbWFrZSB0aGlzIGZ1bmN0aW9uIG1lcmdlIHRoZQotCSAgYnVmZmVyIG1lbW9yeS4KLQkgIEFkZCBtZXRob2RzIHRvIHJlcGxhY2UgbWVtb3J5IGluIGEgYnVmZmVyLiBNYWtlIHNvbWUgY29udmllbmNlIG1hY3JvcyBmb3IgdGhlCi0JICBidWZmZXIgbWVtb3J5IGZ1bmN0aW9ucy4KLQkgIEZpeCB1bml0IHRlc3RzLgotCi0yMDEyLTAyLTEzIDE3OjIyOjUxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZjogdXBkYXRlCi0KLTIwMTItMDItMTMgMTU6MTg6MjggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXRhLmg6Ci0JICBtZXRhOiBmaXggdHlwb3MKLQotMjAxMi0wMi0xMiAyMToxNzo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkgIGRvY3M6IGFkZCBhIHBhcmFncmFwaCBhYm91dCB0aGUgU1RSRUFNIENPTkZJRyBldmVudCB0byB0aGUgZGVzaWduIGRvY3MKLQotMjAxMi0wMi0xMiAyMTowNDoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBldmVudDogbWFrZSBfcGFyc2VfbnRoX3N0cmVhbV9jb25maWdfaGVhZGVyKCkgYW5kIF9wYXJzZV9zZXR1cF9kYXRhKCkgcmV0dXJuIGEgYm9vbGVhbgotCSAgQXMgdGhleSBjYW4gZmFpbCAob25seSBvbmUgb2Ygc3RyZWFtIGhlYWRlcnMgb3Igc2V0dXAgZGF0YQotCSAgaXMgdXN1YWxseSBwcmVzZW50KS4KLQotMjAxMi0wMi0xMiAyMDo1MTozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IHJlbmFtZSBnc3RfZXZlbnRfe3NldCxwYXJzZX1fc3RyZWFtX2NvbmZpZ19jb2RlY19kYXRhKCkgdG8gX3NldHVwX2RhdGEoKQotCSAgTW9yZSBnZW5lcmljLgotCi0yMDEyLTAyLTEwIDE1OjAzOjAzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTItMDItMTAgMTQ6NTg6MTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgY2xlYW4gdXAgb2JqZWN0IGluaXQKLQkgIE1ha2UgYW4gX2luaXQgbWV0aG9kIHdoZXJlIHRoZSBwYXJlbnQgbWluaS1vYmplY3QgYW5kIG90aGVyIGZpZWxkcyBhcmUKLQkgIGluaXRpYWxpemVkLgotCSAgQ2hlY2sgdGhhdCB0aGUgcGFzc2VkIHN0cnVjdHVyZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSBhIHBhcmVudC4KLQkgIFVzZSB0aGUgX25ld19jdXN0b20gKCkgY29uc3RydWN0b3JzCi0KLTIwMTItMDItMDcgMTE6Mjg6NDEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBiaXRyYXRlIG1lY2hhbmljcyBzaG91bGQgbm90IGRlYWwgd2l0aCBkdXJhdGlvbiB1cGRhdGUKLQkgIC4uLiBzaW5jZSB0aGF0IGlzIGFscmVhZHkgaGFuZGxlZCBieSBfdXBkYXRlX2R1cmF0aW9uLCBvciBzaG91bGQgbm90IGJlIGRvbmUKLQkgIGFsdG9nZXRoZXIgaWYgdGhlIGR1cmF0aW9uIGlzIGRldGVybWluZWQgYnkgbm9uLWVzdGltYXRlZCBtZWFucy4KLQkgIEZpeGVzICM2Njk1MDIuCi0KLTIwMTItMDItMTAgMTI6NDU6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICBkb2NzOiBwdXNoX2V2ZW50IGRvZXNuJ3QgcmV0dXJuIGEgZmxvdyB2YWx1ZSBhZnRlciBhbGwKLQotMjAxMi0wMi0xMCAxMjowNToxOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBzaWxlbmNlIHByb2JlIGRlYnVnIGEgbGl0dGUKLQotMjAxMi0wMi0xMCAxMToyNDoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGltcGxlbWVudCBmYXN0ZXIgQUNDRVBUX0NBUFMgcXVlcnkKLQotMjAxMi0wMi0xMCAxMTowOTowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGdzdDogYWRkIHNvbWUgcGVyZm9ybWFuY2UgbG9nZ2luZwotCSAgQWRkIHNvbWUgcGVyZm9ybWFuY2UgbG9nZ2luZyBmb3IgY2FwcyBjb3B5IGFuZCB0aGUgc2xvdyBkZWZhdWx0IGFjY2VwdGNhcHMKLQkgIGltcGxlbWVudGF0aW9uCi0KLTIwMTItMDEtMTQgMTk6MTY6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LW1ldGFkYXRhLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWxhdGVuY3kudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1wcm9iZXMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1xdWVyeS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQ6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIGRvY3M6IHVwZGF0ZSBhbmQgaW1wcm92ZSBkb2NzCi0KLTIwMTItMDItMDkgMDA6MTQ6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXRpbHM6IHJlbW92ZSBnc3RfZWxlbWVudF9jbGFzc19pbnN0YWxsX3N0ZF9wcm9wcygpCi0JICBJdCdzIG9ubHkgdXNlZCBpbiBvbmUgcGxhY2UgKHJ0bXApLCBhbmQgdGhlcmUgbm90IHZlcnkgd2VsbC4KLQotMjAxMi0wMi0wOCAyMzo0Nzo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgZmFrZXNyYywgaWRlbnRpdHksIGZha2VzaW5rOiBkbyBub3QgZ2VuZXJhdGUgbGFzdC1tZXNzYWdlIHVwZGF0ZXMgYnkgZGVmYXVsdAotCSAgRGVmYXVsdCB0byBub3QgY3JlYXRpbmcgbG90cyBvZiBvdmVyaGVhZCBieSBkb2luZyBhIGNvdXBsZSBvZgotCSAgZ19zdHJkdXBfcHJpbnRmKCkvZ19mcmVlKCkgcGVyIGJ1ZmZlciBvciBldmVudCBqdXN0IHRvIGdlbmVyYXRlCi0JICBhIGxhc3QtbWVzc2FnZSB1cGRhdGUgdGhhdCByYXJlbHkgYW55b25lIGxpc3RlbnMgdG8uIFRoaXMgbWVhbnMKLQkgIHRoYXQgeW91IG5lZWQgdG8gZW5hYmxlIHNpbGVudD10cnVlIGV4cGxpY2l0bHkgaW4gb3JkZXIgdG8gZ2V0Ci0JICBsYXN0LW1lc3NhZ2UgZHVtcHMgaW4gZ3N0LWxhdW5jaCAtdiBub3cuIE9uIHRoZSB1cHNpZGUsIHBlb3BsZQotCSAgd29uJ3QgaW5hZHZlcnRlbnRseSBlbmQgdXAgYmVuY2htYXJraW5nIGdfc3RyZHVwX3ByaW50ZigpCi0JICBwZXJmb3JtYW5jZSBpbnN0ZWFkIG9mIGdzdHJlYW1lciBkYXRhIGhhbmRsaW5nIHBlcmZvcm1hbmNlIGFueQotCSAgbW9yZS4KLQkgIE1heWJlIHRoZSBzaWxlbnQgcHJvcGVydHkgc2hvdWxkIGJlIHJlbmFtZWQgdG8gZW5hYmxlLWxhc3QtbWVzc2FnZQotCSAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdD8KLQotMjAxMi0wMi0wOCAxNToxNjo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdG1hcnNoYWwuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RtYXJzaGFsLmg6Ci0JICBHU1RfRkxPV19XUk9OR19TVEFURSAtPiBHU1RfRkxPV19GTFVTSElORwotCi0yMDEyLTAyLTA4IDE1OjM0OjI4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IHVzZSBkZWZhdWx0IHF1ZXJ5IGZ1bmN0aW9uIHRvIG9wdGlvbmFsbHkgZm9yd2FyZCBxdWVyeQotCSAgLi4uIHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHBlZXIgdW5jb25kaXRpb25hbGx5IHdpdGggcG9zc2libHkgdW5kZXNpcmFibGUKLQkgIG91dGNvbWUgaW4gY2FzZSBvZiBlLmcuIFNDSEVEVUxJTkcgcXVlcnkuCi0KLTIwMTItMDItMDggMTU6MDM6NTYgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBjbGVhbiB1cCBhIGZldyBtaW5vciBleHRyYW5lb3VzIHRva2VucwotCi0yMDEyLTAyLTA3IDEyOjQ4OjUwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVtb3ZlIGNsb3Npbmcgc2VnbWVudCBoYW5kbGluZwotCi0yMDEyLTAyLTA4IDE0OjQ1OjI1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTItMDItMDggMTQ6MzI6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogZml4IHJhY2UgaW4gcGFkIG1vZGUgY2hhbmdlCi0JICBGaXhlcyAjNjY4OTA5IGFuZCBwcmVzdW1hYmx5IGFsc28gIzY2OTQ4MwotCi0yMDEyLTAyLTA4IDEyOjU3OjExICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGVycm9yIHdoZW4gYWN0aXZhdGlvbiBtb2RlIGlzIHdyb25nCi0JICBQb3N0IGFuIGVycm9yIHdoZW4gd2UgdHJ5IHRvIHB1c2ggb24gYSBwYWQgYWN0aXZhdGVkIGluIHB1bGwgbW9kZSBhbmQgcHVsbCBvbiBhCi0JICBwYWQgaW4gcHVzaCBtb2RlLgotCi0yMDEyLTAyLTA4IDA5OjMwOjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkgIGNsb2NrOiByZW1vdmUgbWV0aG9kIGRlY2xhcmF0aW9uIHRvbwotCi0yMDEyLTAyLTA3IDEzOjQxOjIwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSAgY2xvY2s6IHJlbW92ZSB1bmltcGxlbWVudGVkIHN0YXRzIHByb3BlcnR5IHdoaWxlIHdlIGNhbgotCi0yMDEyLTAyLTA3IDEwOjQ0OjA3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkgIGZha2VzcmM6IHJlbW92ZSBjdXN0b20gbWFyc2hhbGxlcgotCSAgUmVtb3ZlIG91ciBjdXN0b20gbWFyc2hhbGxlci4KLQkgIE1ha2UgdGhlIGJ1ZmZlciBpbiB0aGUgaGFuZG9mZiBzaWduYWwgc3RhdGljX3Njb3BlIHNvIHRoYXQgaXQgaXMgYWN0dWFsbHkKLQkgIHdyaXRhYmxlLgotCi0yMDEyLTAyLTA2IDA5OjQ2OjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0OiBpbXByb3ZlIGRlYnVnZ2luZwotCi0yMDEyLTAxLTA0IDE3OjEwOjE1ICswMTAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGZpeCBjb21waWxhdGlvbiB3aXRoIC0tZGlzYWJsZS1yZWdpc3RyeQotCSAgX19yZWdpc3RyeV9yZXVzZV9wbHVnaW5fc2Nhbm5lciBpcyBvbmx5IGRlZmluZWQgd2hlbgotCSAgR1NUX0RJU0FCTEVfUkVHSVNUUlkgaXMgbm90IGRlZmluZWQuCi0JICBnc3RyZWdpc3RyeS5jOiBJbiBmdW5jdGlvbiAnZ3N0X3JlZ2lzdHJ5X3NjYW5fcGx1Z2luX2ZpbGUnOgotCSAgZ3N0cmVnaXN0cnkuYzoxMTMxOjg6IGVycm9yOiAnX19yZWdpc3RyeV9yZXVzZV9wbHVnaW5fc2Nhbm5lcicgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3Mjg0Ci0KLTIwMTItMDItMDIgMTc6MTg6MjIgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IHJlc2V0IHRoZSBFT1MgZGV0ZWN0aW9uIG1hY2hpbmVyeSBhZnRlciBzZW5kaW5nIGFuIEVPUyBtZXNzYWdlCi0JICBUaGlzIHdpbGwgYWxsb3cgZGV0ZWN0aW5nIGZ1cnRoZXIgRU9TLCBmb3IgaW5zdGFuY2UgYWZ0ZXIgbG9vcGluZwotCSAgYSBzdHJlYW0gd2l0aG91dCBjaGFuZ2luZyBzdGF0ZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4Mjg5Ci0KLTIwMTItMDEtMDcgMjM6MDA6MTIgLTA1MDAgIFJ5YW4gTG9ydGllIDxkZXNydEBkZXNydC5jYT4KLQotCSogYXV0b2dlbi5zaDoKLQkgIGF1dG9nZW4uc2g6IGFsbG93IGNhbGxpbmcgZnJvbSBvdXQtb2YtdHJlZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzY2NAotCi0yMDEyLTAyLTAyIDE2OjU5OjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dHJhY2UuYzoKLQkgIHRyYWNlOiBwcmludCBjYXBzIGluIGR1bXAKLQotMjAxMi0wMi0wMiAxNjowNDoxMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZWZzOiB1cGRhdGUKLQotMjAxMi0wMi0wMiAxNTo1Nzo0OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBhZGQgZGVidWcgYW5kIHRyYWNlIGZvciBHc3RNZW1vcnkKLQotMjAxMi0wMi0wMiAxNTo1NTo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JICB0cmFjZTogZG9uJ3QgY2hlY2sgcmFuZG9tIHBvaW50ZXJzIGZvciBvYmplY3RzCi0JICBPbmx5IHNlZSBpZiB0aGUgdHJhY2VkIHBvaW50ZXIgaXMgYSBHT2JqZWN0IHdoZW4gaXQgd2FzIHJlZ2lzdGVyZWQgd2l0aCB0aGUKLQkgIHNwZWNpYWwgb2Zmc2V0IG9mIC0yLgotCi0yMDEyLTAyLTAyIDE1OjU0OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBVcGRhdGUgZGVidWcgY2F0ZWdvcmllcwotCSAgUmVtb3ZlIHNvbWUgY2F0ZWdvcmllcyBtYXJrZWQgZm9yIGRlbGV0aW9uLgotCSAgQWRkIGEgY2F0ZWdvcnkgZm9yIEdzdE1lbW9yeS4KLQotMjAxMi0wMi0wMiAxNTo1MjoxOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkqIGdzdC9nc3RzYW1wbGUuaDoKLQkgIHJlbW92ZSBUUkFDRV9OQU1FIGZyb20gaGVhZGVycwotCi0yMDEyLTAyLTAyIDEzOjE3OjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGFkZCBuZXcgdGVzdAotCi0yMDEyLTAyLTAyIDEzOjE1OjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBkZW50aXR5OiByZW1vdmUgcHJlcGFyZV9vdXRwdXRfYnVmZmVyCi0JICBDb3JyZWN0bHkgbWFyayBwYXNzdGhyb3VnaCBvbiB0aGUgYmFzZWNsYXNzIHNvIHRoYXQgaXQgY2FuIGNvcnJlY3RseSBkbyB0aGUKLQkgIGFsbG9jYXRpb24gb2YgdGhlIG91dHB1dCBidWZmZXJzLgotCSAgUmVtb3ZlIG91ciBjdXN0b20gcHJlcGFyZV9vdXRwdXRfYnVmZmVyIGZ1bmN0aW9uIG5vdyB0aGF0IHRoZSBiYXNlY2xhc3MgaXMKLQkgIHNtYXJ0ZXIuCi0KLTIwMTItMDItMDIgMTM6MTA6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogaW1wcm92ZSBwcmVwYXJlX291dHB1dF9idWZmZXIKLQkgIENsZWFuIHVwIHRoZSBwcmVwYXJlX291dHB1dF9idWZmZXIgZnVuY3Rpb24uCi0JICBSZXVzZSB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gaXQgaXMgd3JpdGFibGUgYW5kIHdoZW4gZG9pbmcgYW4KLQkgIGluLXBsYWNlIGJ1dCBub24tcGFzc3Rocm91Z2ggdHJhbnNmb3JtLgotCSAgTW92ZSB0aGUgY29weS1tZXRhZGF0YSBmdW5jdGlvbiBjYWxsIHRvIHRoZSBwcmVwYXJlX291dHB1dF9idWZmZXIgZGVmYXVsdAotCSAgZnVuY3Rpb24uIElmIHN1YmNsYXNzZXMgaW1wbGVtZW50IGEgY3VzdG9tIHByZXBhcmVfb3V0cHV0X2J1ZmZlciwgdGhleSBtdXN0IGFsc28KLQkgIGNvcHkgdGhlIG1ldGFkYXRhIHRoZW1zZWx2ZXMuCi0JICBSZW1vdmUgYSB1c2VsZXNzIG1lbW9yeSBjb3B5IGJlY2F1c2UgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIGFscmVhZHkgZGlkIHRoYXQuCi0KLTIwMTItMDItMDIgMTI6MzI6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5OiBvbmx5IG1hcCB3aGVuIHVzaW5nIHRoZSBtZW1vcnkKLQotMjAxMi0wMi0wMiAxMjozMjowNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcGx1Z2luczogcHJveHkgYWxsb2NhdGlvbiBxdWVyeQotCi0yMDEyLTAyLTAyIDEyOjMwOjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IHNpbXBsaWZ5IGNvZGUKLQkgIFdlIGFscmVhZHkgY2hlY2tlZCBwYXNzdGhyb3VnaCBhIGZldyBsaW5lcyBhYm92ZS4KLQotMjAxMi0wMi0wMiAxMjowNzoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBhZGQgc29tZSBwZXJmb3JtY2UgZGVidWcgaW5mbwotCSAgQWRkIHNvbWUgUEVSRk9STUFOQ0UgZGVidWcgbGluZXMgd2hlcmUgd2UgY29weSBhbmQgZG8gb3RoZXIgc3Vib3B0aW1hbCB0aGluZ3MuCi0KLTIwMTItMDItMDIgMTI6MDU6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogYWRkIGZsYWcgdG8gcHJveHkgYWxsb2NhdGlvbiBxdWVyeQotCSAgQWRkIGEgZmxhZyB0byBmb3JjZSB0aGUgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIHRvIGZvcndhcmQgdGhlIGFsbG9jYXRpb24gcXVlcnkKLQkgIGluc3RlYWQgb2YgZGlzY2FyZGluZyBpdC4KLQkgIFJlb3JkZXIgdGhlIHBhZCBmbGFncyBhIGJpdC4KLQotMjAxMi0wMi0wMiAwMTozMDoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3R5cGVmaW5kaGVscGVyLmM6Ci0JICB0eXBlZmluZDogcGFzcyBleHRlbnNpb25zIGFzIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGluIGEgc2ltcGxlIHN0cmluZwotCSAgRml4IGFubm95aW5nIGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIoKSBmdW5jdGlvbiBzaWduYXR1cmUuIEEgc2ltcGxlCi0JICBzdHJpbmcgd2l0aCBjb21tYS1zZXBhcmF0ZWQgZXh0ZW5zaW9ucyB3b3JrcyBqdXN0IGFzIHdlbGwgYW5kIHNhdmVzCi0JICBsaW5lcyBvZiBjb2RlLCBjYXN0cywgcmVsb2NhdGlvbnMgYW5kIHVsdGltYXRlbHkga2l0dGVucy4KLQotMjAxMi0wMS0zMSAxNzo0MToxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBmaXggcmFjZSBpbiBzdGFydHVwCi0JICBNYXJrIHJlbmVnb3RpYXRlIGJlZm9yZSBzdGFydGluZyB0aGUgcHVzaGluZyB0aHJlYWQuCi0JICBEbyBhbHNvIGNoZWNrIGlmIHdlIGFyZSBzdGFydGluZyBpbiB0aGUgZ2V0X3JhbmdlIGZ1bmN0aW9uLgotCi0yMDEyLTAxLTMxIDE2OjI3OjU1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogZG9uJ3QgY3Jhc2ggb24gbWlzc2luZyB0ZW1wbGF0ZQotCSAgU29tZSByZXF1ZXN0IHBhZHMgZG9uJ3QgaGF2ZSBhIHBhZHRlbXBsYXRlIChtb3N0bHkgdGhvc2UgZnJvbSBlbmNvZGViaW4pLiBBdm9pZAotCSAgY3Jhc2hpbmcgaW4gdGhpcyBjYXNlLgotCi0yMDEyLTAxLTMxIDEyOjIwOjQxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5oOgotCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9jb250cm9sLXNvdXJjZXMuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvdGV4dC1jb2xvci1leGFtcGxlLmM6Ci0JICBjb250cm9sbGVyOiBjb25zdHJ1Y3R1cmVzIGZvciBjb250cm9sIHNvdXJjZXMgcmV0dXJuIEdzdENvbnRyb2xTb3VyY2UKLQkgIERvbid0IHJldHVybiB0aGUgc3BlY2lmaWMgdHlwZXMuIEluIG1vc3QgY2FzZXMgdGhlcmUgaXMgbm8gc3BlY2lmaWMgYXBpIHRoZXJlCi0JICBhbnl3YXkuCi0KLTIwMTItMDEtMzEgMTI6MTA6MjEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkgIGRvbid0IGRvIGxvZ2ljIGluIGdfYXNzZXJ0Li4uCi0KLTIwMTItMDEtMzAgMTk6MTc6MDAgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuaDoKLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbC1zb3VyY2VzLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL3RleHQtY29sb3ItZXhhbXBsZS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSAgY29udHJvbGxlcjogcmVuYW1lIGNvbnRyb2wtYmluZGluZ3MKLQkgIGdzdF9jb250cm9sX2JpbmRpbmdfeHh4IC0+IGdzdF94eHhfY29udHJvbF9iaW5kaW5nIGZvciBjb25zaXN0ZW5jeS4KLQotMjAxMi0wMS0zMCAxNDo0ODo0NCAtMDIwMCAgSm/Do28gUGF1bG8gUGl6YW5pIEZsb3IgPGpvYW9waXphbmlAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0cHJlc2V0Lmg6Ci0JICBGaXhlcyB0aGUgbGFjayBvZiBhbiBpbmNsdWRlIGRpcmVjdGl2ZSBpbiBnc3QvZ3N0cHJlc2V0LmgKLQkgIEl0IGJsb2NrZWQgdGhlIGJ1aWxkIG9mIGV4dGVybmFsIGxpYnJhcmllcyBkZXBlbmRpbmcgb24gZ3N0cmVhbWVyLWNvcmUgKG5hbWVseSwgZ3N0cmVhbWVybW0pLgotCSAgQ29tcGxldGUgYnVnIHJlcG9ydCBhdCBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY5MDM2Ci0KLTIwMTItMDEtMzAgMTg6MTc6MzQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JICBjb250cm9sc291cmNlOiBzaW5rIHRoZSBmbG9hdGluZyByZWYKLQkgIGNvbnRyb2wgc291cmNlcyBjYW4gYmUgdXNlZCBvbiBzZXZlcmFsIGNvbnRyb2wgYmluZGluZ3MuCi0KLTIwMTItMDEtMzAgMTc6MTU6MjEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjsgcmVtb3ZlIElOX0NBUFMgYnVmZmVyIGZsYWcKLQkgIFRoZSBJTl9DQVBTIGJ1ZmZlciBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBIRUFERVIKLQkgIGZsYWcuCi0KLTIwMTItMDEtMzAgMTY6MDk6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczsgdXBkYXRlIGZvciBuZXcgYXBpCi0KLTIwMTItMDEtMzAgMTU6NTk6MDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgcXVlcnk6IHBhc3MgYWxsb2NhdG9yIGluIHF1ZXJ5Ci0JICBQbGFjZSB0aGUgYWxsb2NhdG9yIG9iamVjdCBpbiB0aGUgQUxMT0NBVElPTiBxdWVyeSBpbnN0ZWFkIG9mIHRoZSBuYW1lLiBUaGlzCi0JICBhbGxvd3MgdXMgdG8gZXhjaGFuZ2UgYWxsb2NhdG9ycyB0aGF0IGFyZSBub3QgaW4gdGhlIGdsb2JhbCBwb29sIG9mIGFsbG9jYXRvcnMuCi0JICBVcGRhdGUgZWxlbWVudHMgZm9yIHRoZSBuZXcgYXBpCi0KLTIwMTItMDEtMzAgMTU6NTc6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogYWRkIG1lbW9yeSB0eXBlCi0JICBBZGQgbWVtb3J5IHR5cGUgd2hlbiByZWdpc3RlcmluZyBtZW1vcnkgYWxsb2NhdG9ycy4gQWRkIGdldHRlciBmb3IgdGhlIG1lbW9yeQotCSAgdHlwZS4KLQotMjAxMi0wMS0yOSAyMjo1ODo1MSArMDAwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgotCSAgdmFsdmU6IFJlcHVzaCBzdGlja3kgZXZlbnRzIGFmdGVyIGRpc2FibGluZyBkcm9wcGluZwotCi0yMDEyLTAxLTMwIDEzOjI4OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGFkZCBib3hlZCBHVHlwZSBmb3IgdGhlIGFsbG9jYXRvcgotCi0yMDEyLTAxLTMwIDEzOjAyOjEzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBtZW1vcnk6IG1ha2UgdGhlIGFsbG9jYXRvciByZWZjb3VudGVkCi0JICBBZGQgcmVmY291bnRpbmcgdG8gdGhlIEdzdEFsbG9jYXRvciBvYmplY3QuCi0JICBSZW1vdmUgY29uc3QgZnJvbSBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgYWxsb2NhdG9yIGlzIHJlZmNvdW50ZWQgbm93LgotCSAgUmVuYW1lIHRoZSB2bWV0aG9kcyBmb3IgY29uc2lzdGVuY3kKLQkgIEV4cG9zZSB0aGUgY29uc3RydWN0b3IgZm9yIEdzdEFsbG9jYXRvciBhbmQgYWRkIGEgZGVzdHJveSBub3RpZnkgZm9yIHRoZQotCSAgdXNlcl9kYXRhLiBUaGlzIHNob3VsZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSBhbGxvY2F0b3JzIHRoYXQgYXJlIG5vdAotCSAgcmVnaXN0ZXJlZCBhbmQgc2hhcmVkIGdsb2JhbGx5IGFsb25nIHdpdGggdGhlIHBvc3NpYmlsaXR5IHRvIGRlc3Ryb3kgdGhlbQotCSAgcHJvcGVybHkuCi0JICBVcGRhdGUgZGVmcyB3aXRoIG5ldyBzeW1ib2xzLgotCi0yMDEyLTAxLTMwIDEwOjMwOjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZSBmb3IgZ2FwIGV2ZW50Ci0KLTIwMTItMDEtMzAgMTA6MDc6NTEgKzAxMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3QuaDoKLQkgIGNvcmU6IGRvbid0IHNoaXAgZ3N0dHJhY2UuaCBwcml2YXRlIGhlYWRlcgotCSAgSW5jbHVkZSBpdCBleHBsaWNpdGVseSBpbiBnc3QuYyBhbmQgbm8gbG9uZ2VyIGluY2x1ZGUgaXQgaW4gZ3N0LmguCi0JICBUaGF0IGhlYWRlciB3YXMgbWFkZSBwcml2YXRlIGluIDE5NjliOTQyNjdiNGYzNzdlYTI2NjM4NzZhZTg3MjA3MTc4ODk2OTMuCi0KLTIwMTItMDEtMjggMTg6NTA6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiByZXF1aXJlIGEgdmFsaWQgZHVyYXRpb24gZm9yIHRoZSBHQVAgZXZlbnQKLQotMjAxMi0wMS0yOCAxODo0OTo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogcmVmIG5ldyBlbnVtIHR5cGUgaW4gZ3N0X2luaXQoKQotCi0yMDEyLTAxLTI3IDE4OjU3OjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBkb2NzOiBhZGQgc29tZSAob3V0KSBhbm5vdGF0aW9ucyBmb3Igc3RyZWFtIGNvbmZpZyBwYXJzZXIgZnVuY3Rpb25zCi0KLTIwMTItMDEtMjcgMTg6NTY6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IGFkZCBjb25zdHJ1Y3RvciBhbmQgcGFyc2UgZnVuY3Rpb24gZm9yIG5ldyBHQVAgZXZlbnQKLQkgIChXaGF0ZXZlciB5b3UgZG8sIGRvbid0IG1lbnRpb24gdGhlIGZpbGxlciBldmVudC4pCi0KLTIwMTItMDEtMjcgMTg6Mzc6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGRvY3M6IEdTVF9FVkVOVF9TVFJFQU1fQ09ORklHIGlzIGltcGxlbWVudGVkIG5vdwotCi0yMDEyLTAxLTI3IDE3OjU3OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIGRvY3M6IG1lbnRpb24gY29kZWMgZGF0YSAvIHN0cmVhbSBoZWFkZXIgY2hhbmdlIGluIHBvcnRpbmcgZG9jcwotCi0yMDEyLTAxLTI4IDE0OjM1OjUxICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0aW5kZXguYzoKLQkgIFVzZSBtYWNyb3MgdG8gcmVnaXN0ZXIgYm94ZWQgdHlwZXMgdGhyZWFkIHNhZmVseQotCi0yMDEyLTAxLTI4IDA4OjM4OjAzICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBVcGRhdGUgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIgdG8gMC4xMSBzdHlsZSBjYXBzCi0JICBQYXNzIHRoZSBkZXNpcmVkIGNhcHMgZXhwbGljaXRlbHkKLQotMjAxMi0wMS0yNyAxOTowMDowMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogRml4IG1lbW9yeSBsZWFrCi0KLTIwMTItMDEtMjcgMTg6NTM6NDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IERvbid0IHVucmVmIHBsdWdpbiBmZWF0dXJlcyBtdWx0aXBsZSB0aW1lcwotCSAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIHVucmVmcyB0aGVtIHRvby4KLQotMjAxMi0wMS0yNyAxNzo1MDozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgbmV3IHN0cmVhbSBjb25maWcgZnVuY3Rpb25zIHRvIGRvY3MKLQotMjAxMi0wMS0yNyAxNzo0OTo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6Ci0JICB0ZXN0czogZml4IHNpbXBsZS1sYXVuY2gtbGluZXMgY29tcGlsYXRpb24KLQkgIERvbid0IHVzZSByZW1vdmVkIEFQSS4KLQotMjAxMi0wMS0yNyAxODo0Njo0OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JICBzZWdtZW50OiBBZGQgcGFkZGluZyB0byB0aGUgcHVibGljIHN0cnVjdAotCi0yMDEyLTAxLTI3IDE3OjQ1OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBkb24ndCByZWYgR1R5cGUgZm9yIHByaXZhdGUgZW51bSBmb3Igd2hpY2ggdGhlcmUncyBubyBHVHlwZSBhbnkgbW9yZQotCi0yMDEyLTAxLTI3IDE3OjQ1OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogdXBkYXRlIC5kZWYgZm9yIG5ldyBhbmQgcmVtb3ZlZCBBUEkKLQotMjAxMi0wMS0yNyAxNzozOToxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudDogYWRkIGNvbnN0cnVjdCBhbmQgcGFyc2UgQVBJIGZvciB0aGUgbmV3IFNUUkVBTSBDT05GSUcgZXZlbnQKLQkgIGNvZGVjIGRhdGEgYW5kIHN0cmVhbSBoZWFkZXJzIGRvbid0IGJlbG9uZyBpbnRvIGNhcHMsIHNpbmNlIHRoZXkKLQkgIGFyZSBub3QgbmVnb3RpYXRlZC4gV2Ugc2lnbmFsIHRoZW0gdXNpbmcgdGhlIFNUUkVBTSBDT05GSUcgZXZlbnQKLQkgIGluc3RlYWQuCi0KLTIwMTItMDEtMjcgMTg6MjQ6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSAgdHJhY2U6IHJlbW92ZSBmcm9tIHB1YmxpYyBoZWFkZXJzCi0KLTIwMTItMDEtMjcgMTI6MTY6MDUgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGZpeCBkb2N1bWVuYXRpb24gdHlwbwotCi0yMDEyLTAxLTI3IDE3OjUwOjQyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JKiBnc3QvZ3N0dHJhY2UuaDoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIHRyYWNlOiByZXdvcmsgYWxsb2MgdHJhY2luZwotCSAgUmVtb3ZlIHRyYWNlLCB3ZSB1c2UgZGVidWcgbG9nIGZvciB0aGF0Ci0JICBNYWtlIGFsbG9jIHRyYWNlIHNpbXBsZXIsIHJlbW92aW5nIHNvbWUgbWV0aG9kcy4KLQkgIEFjdGl2YXRlIGFsbG9jIHRyYWNlIHdpdGggYSBHU1RfVFJBQ0U9MyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQkgIER1bXAgbGVha2VkIG9iamVjdHMgYXRleGl0LgotCSAgUHJvdmlkZSBhbiBvZmZzZXQgaW4gdGhlIG9iamVjdCB3aGVyZSB0aGUgR1R5cGUgY2FuIGJlIGZvdW5kIHNvIHRoYXQgbW9yZQotCSAgdmVyYm9zZSBpbmZvIGNhbiBiZSBnaXZlbiBmb3Igb2JqZWN0cy4KLQkgIFJlbW92ZSAtVCBvcHRpb24gZnJvbSBnc3QtbGF1bmNoIGJlY2F1c2UgdHJhY2luZyBpcyBub3cgdHJpZ2dlcmVkIHdpdGggdGhlCi0JICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQotMjAxMi0wMS0yNSAxMjozNTo0MyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogYW5zd2VyIGNhcHMgcXVlcmllcyB3aXRoIG91ciB0eXBlZm91bmQgY2FwcwotCSAgVGhpcyBhdm9pZHMgbWVyZWx5IGZvcndhcmRpbmcgdGhlIGV2ZW50IHRvIHRoZSBzaW5rLCBhbmQgZ2V0dGluZwotCSAgc29tZXRoaW5nIHVzZWxlc3Mgc3VjaCBhcyBBTlkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3NTcxCi0KLTIwMTItMDEtMjcgMTY6MTg6MDAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkgIHR5cGVmaW5kOiBEbyB0eXBlZmluZGluZyBmcm9tIGEgc2VwYXJhdGUgdGhyZWFkIGFuZCBub3QgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uCi0KLTIwMTItMDEtMjcgMTU6MzI6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBtZW1vcnkgbGVhawotCSAgdW5tYXAgdGhlIGJ1ZmZlciBtZW1vcnkgb24gZXJyb3JzLgotCi0yMDEyLTAxLTI3IDE1OjMyOjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICB0cmFjZTogbWFrZSBhbGxvYyB0cmFjZSB3b3JrIGZvciBtaW5pb2JqZWN0IGFnYWluCi0KLTIwMTItMDEtMjcgMTU6MDk6MzUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5oCi0KLTIwMTItMDEtMjcgMTU6MDI6NTIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuaDoKLQkgIGNvbGxlY3RwYWRzMjogTW92ZSBwcml2YXRlIGZpZWxkcyBmcm9tIHRoZSBwdWJsaWMgc3RydWN0cyB0byBwcml2YXRlIHN0cnVjdHMKLQkgIEZpeGVzIGJ1ZyAjNjY4NzY0LgotCi0yMDEyLTAxLTI3IDEzOjA1OjQ4ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xiaW5kaW5nYXJnYi5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sYmluZGluZ2RpcmVjdC5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmM6Ci0JICBjb250cm9sbGVyOiBubyBmYW5jeSB1dGY4IGNoYXJzIGluIHRoZSBnaSBhbm5vdGF0aW9ucwotCi0yMDEyLTAxLTI3IDEyOjUwOjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICB0ZXN0czogZml4IHNvbWUgbW9yZSBsZWFrcwotCi0yMDEyLTAxLTI3IDEyOjMzOjMyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IEZpeCBoYW5kbGluZyBvZiB0aGUgbmV3IHN0cmVhbS1zdGFydCBldmVudAotCi0yMDEyLTAxLTI3IDExOjMyOjEyICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgZ3N0cGx1Z2luOiBhZGQgYSBmZXcgY29uc3RzIHRvIHJlYWQgb25seSBkYXRhCi0KLTIwMTItMDEtMjcgMTI6MjI6NDggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGJpbmRpbmdhcmdiLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xiaW5kaW5nZGlyZWN0LmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuYzoKLQkgIGNvbnRyb2xsZXI6IGFkZCBnaSBhbm5vdGF0aW9ucwotCi0yMDEyLTAxLTI3IDEyOjE0OjI4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogRml4IHVuaXQgdGVzdAotCi0yMDEyLTAxLTI3IDEyOjEwOjA5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIHRlc3RzOiBmaXggbGVha3MKLQotMjAxMi0wMS0yNyAxMTo0MDozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBhdm9pZCBtZW1vcnkgbGVhawotCSAgVW5yZWYgdGhlIG9sZCBtZW1vcnkgaW4gbWFrZV9tYXBwZWQuCi0JICBBZGQgc29tZSBkZWJ1ZyBpbmZvCi0KLTIwMTItMDEtMjcgMTE6NDA6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogYXZvaWQgY2FwcyBsZWFrCi0KLTIwMTItMDEtMjcgMTE6MDE6MjcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5L2Zha2V7c3JjLHNpbmt9OiBJbmNsdWRlIGV2ZW50IHR5cGUgbmFtZSBpbiB0aGUgZGVidWcgb3V0cHV0Ci0KLTIwMTItMDEtMjcgMTA6NTQ6NTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSAgZXZlbnQ6IE1hcmsgdGhlIG5ldyBHQVAgZXZlbnQgYXMgbm9uLXN0aWNreQotCi0yMDEyLTAxLTI3IDEwOjQ2OjAyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmg6Ci0JICBjb2xsZWN0cGFkczI6IERyb3AgdGhlIHN0cmVhbS1zdGFydCBhbmQgc3RyZWFtLWNvbmZpZyBldmVudHMgYnkgZGVmYXVsdAotCi0yMDEyLTAxLTI3IDEwOjQyOjA5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudCByZWJhc2UKLQotMjAxMi0wMS0yNyAxMDo0MTowNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogU2VuZCB0aGUgc3RyZWFtLXN0YXJ0IGV2ZW50IGFzIGZpcnN0IGV2ZW50IGV2ZXIKLQotMjAxMi0wMS0yNyAxMDozMDo0MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBldmVudDogQWRkIGNvbnN0cnVjdG9yIGFuZCBkb2NzIGZvciB0aGUgbmV3IFNUUkVBTV9TVEFSVCBldmVudAotCi0yMDEyLTAxLTI2IDE5OjI4OjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGFkZCB1c2VyIGRhdGEgdG8gY2hhaW4gZnVuY3Rpb25zCi0KLTIwMTItMDEtMjYgMTg6NTY6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogZml4IHR5cG8KLQotMjAxMi0wMS0yNiAxODoyMjoyOSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdsaXN0OiByZXN0b3JlIGRhdGUvdGltZSB0eXBlIHRvIEdzdERhdGVUaW1lCi0JICBUaGUgY2hhbmdlIHRvIEdEYXRlVGltZSB3YXMgYXBwYXJlbnRseSBhY2NpZGVudGFsLCBhbmQKLQkgIGJyZWFrcyBwbHVnaW5zIHRyeWluZyB0byBmZWVkIGEgR3N0RGF0ZVRpbWUgdG8gdGhlIHRhZ2xpc3QgQVBpLgotCi0yMDEyLTAxLTI2IDE5OjEyOjE2ICswMjAwICBQZXRlcmlzIEtyaXNqYW5pcyA8cGVjaXNrQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBhcnNlLmM6Ci0JICBnc3Q6IGdzdF9wYXJzZV9sYXVuY2ggbm93IHJldHVybnMgYSBmbG9hdGluZyByZWZlcmVuY2UKLQotMjAxMi0wMS0yNiAxODo1Mzo1MSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGdzdHN0cnVjdHVyZTogU2V0ICJ0cmFuc2ZlciBub25lIiB0byByZXR1cm4gdmFsdWVzIHRoYXQgc2hvdWxkbid0IGJlIGZyZWVkCi0KLTIwMTAtMTItMDQgMTg6NTM6NTUgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogY2FsbCAtPnJlbGVhc2VfcGFkKCkgdG8gY2xlYW4gdXAgcGFkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2MDExCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAyNTYyCi0KLTIwMTItMDEtMjYgMTY6MzE6NTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBldmVudDogYWRkIHNvbWUgbW9yZSBldmVudHMKLQkgIEFkZCBzb21lIG1vcmUgbmV3IGV2ZW50cyB0aGF0IHdlIHdhbnQgdG8gaW1wbGVtZW50IGxhdGVyLgotCi0yMDEyLTAxLTI2IDE1OjE1OjIxICswMTAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPGFtb3JhbGVzQGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkgIGdzdG1lbW9yeTogYWRkIG1pc3NpbmcgcGFyYW1ldGVyCi0KLTIwMTItMDEtMjYgMTQ6NTc6MTQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogRml4IGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMi0wMS0yNiAxNDo1NTozMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBVc2UgY29ycmVjdCBzaXplIGZvciBjYXBzIGFsbG9jYXRpb24KLQotMjAxMi0wMS0yNiAxNDo0NTozMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSAgY2FwczogTWFrZSBHc3RDYXBzIHB1YmxpYyBzdHJ1Y3QgbW9yZSBvcGFxdWUgYnkgbW92aW5nIHRoZSBwcml2YXRlIHBvaW50ZXIgaW50byB0aGUgaW1wbGVtZW50YXRpb24KLQotMjAxMi0wMS0yNiAxNDozMzoxMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkgIGNhcHM6IFN0b3JlIGEgcG9pbnRlciB0byBHc3RDYXBzIGluIEdzdFN0YXRpY0NhcHMKLQkgIC4uLmluc3RlYWQgb2YgdXNpbmcgaGFja2lzaCBzdWJjbGFzcyBvZiBHc3RDYXBzLCB3aGljaCBhbHNvCi0JICBoYWQgc29tZSB0aHJlYWQtc2FmZXR5IHByb2JsZW1zLgotCi0yMDEyLTAxLTI2IDEzOjI0OjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSAgZXZlbnQ6IHJlbW92ZSB0aGUgc3RpY2t5IGV2ZW50IGluZGV4Ci0JICBXZSBkb24ndCB1c2UgdGhlIHN0aWNreSBldmVudCBpbmRleCBhbnltb3JlLCBvcmRlcmluZyBvZiB0aGUgZXZlbnRzIGFyZSBob3cgdGhleQotCSAgd2VyZSBzZW50IGluaXRpYWxseS4KLQkgIEFkZCBzb21lIG1vcmUgcGFkZGluZyBiZXR3ZWVuIHRoZSBldmVudCBudW1iZXJzIHNvIHRoYXQgd2UgY2FuIGluc2VydCBuZXcgZXZlbnRzCi0JICBsYXRlci4KLQotMjAxMi0wMS0yNiAxMDo0ODowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgotCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgotCSAgZG9jczogcmVtb3ZlIGNvbGxlY3RwYWRzIGZyb20gZG9jcywgZml4IGJ1aWxkCi0KLTIwMTItMDEtMjYgMTA6MjI6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogdXNlIEdzdFZhbHVlQXJyYXkgaW5zdGVhZCBvZiBHVmFsdWVBcnJheSBmb3Igc3RvcmluZyBvcHRpb25zIGluIHRoZSBjb25maWcKLQkgIFNpbmNlIEdWYWx1ZUFycmF5IGlzIGRlcHJlY2F0ZWQuIEl0J3MgYWxsIG9ubHkgaW50ZXJuYWwgYW55d2hlcmUgaGVyZSwKLQkgIGJ1dCBpZiB3ZSB1c2UgR3N0VmFsdWVBcnJheSB0aGUgb3B0aW9uIHN0cmluZ3MgZ2V0IHNlcmlhbGl6ZWQgbmljZWx5Ci0JICBpbiB0aGUgZGVidWcgbG9ncyBhdCBsZWFzdC4KLQotMjAxMi0wMS0yNiAwOToyNjo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29sczogZ3N0LWluc3BlY3Q6IHN1cHByZXNzIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGZvciBHX1RZUEVfVkFMVUVfQVJSQVkKLQkgIEZvciBub3cgYW55d2F5LgotCi0yMDEyLTAxLTI2IDExOjQyOjI5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBjb2xsZWN0cGFkczI6IFVuaXQgdGVzdCBpcyB2YWxncmluZCBjbGVhbiBub3cKLQotMjAxMi0wMS0yNiAxMTo0MDo1MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMyLmM6Ci0JICBjb2xsZWN0cGFkczI6IEZpeCB1bml0IHRlc3QgdG8gYWN0dWFsbHkgd29yayBhZ2FpbgotCi0yMDEyLTAxLTI2IDExOjM4OjI5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbGxlY3RwYWRzMi5jOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3RsaWJzY3BwLmNjOgotCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JICBjb2xsZWN0cGFkczI6IFBvcnQgY29sbGVjdHBhZHMgdW5pdCB0ZXN0IHRvIGNvbGxlY3RwYWRzMgotCSAgQ3VycmVudGx5IGZhaWxzIGJ1dCByZWFsbHkgc2hvdWxkbid0LgotCi0yMDEyLTAxLTI2IDExOjAxOjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGFkZCBwcm9iZSBpZCB0byB0aGUgaW5mbwotCi0yMDEyLTAxLTI2IDEwOjQ4OjU2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGNvbGxlY3RwYWRzOiBSZW1vdmUgb2xkIGNvbGxlY3RwYWRzCi0JICBTdGlsbCBoYXZlIHRvIHJlbmFtZSBjb2xsZWN0cGFkczIgdG8gY29sbGVjdHBhZHMgYmVmb3JlIHRoZSAxLjAgcmVsZWFzZS4KLQotMjAxMi0wMS0yNiAxMDozMDoyNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5oOgotCSAgY29sbGVjdHBhZHMyOiBEb24ndCBmb3J3YXJkIENBUFMgZXZlbnQgYXV0b21hdGljYWxseQotCi0yMDEyLTAxLTI1IDE4OjQ5OjE1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmg6Ci0JICBjb2xsZWN0cGFkczI6IEZpeCBoYW5kbGluZyBvZiB0aGUgZXZlbnQgZnVuY3Rpb24gYW5kIGRvY3VtZW50IGl0Ci0JICBUaGUgZXZlbnQgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gZm9yd2FyZC9kcm9wIHRoZSBldmVudCBpbiBhbnkgY2FzZQotCSAgbm93IGFuZCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGV2ZW50LgotCi0yMDEyLTAxLTI1IDE4OjM2OjQyICswMTAwICBKYXNvbiBEZVJvc2UgPGpkZXJvc2VAbm92YWN1dC5jb20+Ci0KLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSAgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSBub3cgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZQotCi0yMDEyLTAxLTI1IDE5OjQxOjAzICswMjAwICBQZXRlcmlzIEtyaXNqYW5pcyA8cGVjaXNrQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBnc3RfcGlwZWxpbmVfbmV3IG5vdyByZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJlbmNlLgotCi0yMDEyLTAxLTI1IDE3OjI3OjQwICswMjAwICBQZXRlcmlzIEtyaXNqYW5pcyA8cGVjaXNrQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBnc3Q6IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbiByZXR1cm5zIGEgbmV3IHJlZmVyZW5jZQotCi0yMDEyLTAxLTI1IDE1OjE0OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogdXNlIEdBcnJheSBmb3IgaW50ZXJuYWwgYXJyYXlzIGluc3RlYWQgb2YgdGhlIG5vdy1kZXByZWNhdGVkIEdWYWx1ZUFycmF5Ci0KLTIwMTItMDEtMjUgMTY6MDE6MDIgKzAyMDAgIFBldGVyaXMgS3Jpc2phbmlzIDxwZWNpc2tAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGdzdDogQ2hhbmdlZCBpbnRyb3NwZWN0aW9uIHRyYW5zZmVyIGZsYWcgdG8gKHRyYW5zZmVyIGZsb2F0aW5nKQotCSAgZm9yIGdzdF9wYWRfbmV3LCBnc3RfZ2hvc3RfcGFkX25ldyBhbmQgZ3N0X2Jpbl9uZXcgY29uc3R1Y3RvcnMuIEZpeGVzCi0JICBzZWdmYXVsdHMgZHVlIG9mIHRyYW5zZmVyIGZ1bGwgYW5kIGZsb2F0aW5nIHJlZiBwcm9ibGVtLgotCi0yMDEyLTAxLTI1IDEzOjQ2OjEzICswMTAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYzQ2M2JjMCB0byA3ZmRhNTI0Ci0KLTIwMTItMDEtMjQgMTQ6Mzc6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogYWRkIGZsYWdzIHRvIHRoZSBtYXBpbmZvCi0KLTIwMTItMDEtMjAgMTY6MTA6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogbWFrZSBndWludDggKiBmb3IgZWFzeSB1c2FnZQotCi0yMDEyLTAxLTIwIDE0OjU2OjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1lbW9yeTogYWRkIG1ldGhvZCB0byBjcmVhdGUgbWFwcGVkIG1lbW9yeQotCSAgQWRkIGEgbWV0aG9kIHRvIGNyZWF0ZSBhIEdzdE1lbW9yeSB3aXRoIHRoZSBkZXNpcmVkIG1hcHBpbmcuIE1ha2VzIGEgY29weSBvZiB0aGUKLQkgIG1lbW9yeSBpZiBpdCBpcyBjdXJyZW50bHkgaW4gdXNlLgotCi0yMDEyLTAxLTIwIDE0OjIzOjU3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9iaXRyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgotCSogdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9hZGFwdGVyX3Rlc3QuYzoKLQkgIEFkZCBuZXcgR3N0TWFwSW5mbwotCSAgVXNlIGEgc3RydWN0dXJlIHRvIGhvbGQgaW5mbyBhYm91dCB0aGUgbWFwcGluZy4gVGhlIGFwcGxpY2F0aW9uIHRoZW4ga2VlcHMgdHJhY2sKLQkgIG9mIHRoaXMgc3RhdGUgYW5kIHdlIGNhbiB1c2UgaXQgdG8gdW5tYXAgdGhlIG1lbW9yeSBhZ2FpbiBsYXRlci4KLQotMjAxMi0wMS0yNSAxMTo0OTo1MCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5oOgotCSAgY29udHJvbGJpbmRpbmdzOiBuYW1lIGlzIG5vdCBhIGNvbnN0Ci0JICBJdCBnZXRzIG1vZGlmaWVkIGR1cmluZyB0aGUgbGlmZSBvZiB0aGUgb2JqZWN0LiBGaXhlcyBidWlsZC4KLQotMjAxMi0wMS0yNSAxMTo0MzoxMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMi0wMS0yNSAxMTozNzo0MCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAyYTU5MDE2IHRvIGM0NjNiYzAKLQotMjAxMi0wMS0yNCAyMTo1MzoxNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGJpbmRpbmdhcmdiLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xiaW5kaW5nZGlyZWN0LmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xiaW5kaW5nZGlyZWN0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y29udHJvbGxlci5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSAgY29udHJvbGxlcjogY2xlYW51cCB0aGUgY29udHJvbC1iaW5kaW5nIGNvbnN0cnVjdGlvbgotCSAgVGhpcyBpcyBub3cgYmluZGluZ3MgZmlyZW5kbHkgYXMgX25ldyBpcyBqdXN0IGEgY2xhc3NpYyBjIGNvbnZlbmllbmNlIGFuZCBhbGwKLQkgIHRoZSB3b3JrIGlzIGRvbmUgaW4gYSBjb25zdHJ1Y3Rvci4gQXMgYSBzaWRlIGVmZmVjdCBfbmV3IG5ldmVyIGZhaWxzLgotCSAgRml4IHRoZSB0ZXN0cy4KLQotMjAxMi0wMS0yNCAxNDo0MDozMyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IGhhbmRsZSBOVUxMIGRlc3QgaW4gYml0bWFzay9iaXRtYXNrIGludGVyc2VjdGlvbgotCi0yMDExLTEyLTAxIDEyOjQzOjAzICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JICB0ZXN0czogYWRkIGJhc2ljIHRlc3RzIGZvciBuZXcgc3RlcHBlZCByYW5nZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjUyOTQKLQotMjAxMS0xMS0zMCAxNDo0NToxMiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdHZhbHVlOiBhZGQgc3RlcHBlZCByYW5nZXMKLQkgIGludCBhbmQgaW50NjQgcmFuZ2VzIGNhbiBub3cgaGF2ZSBhbiBvcHRpb25hbCBzdGVwIChkZWZhdWx0aW5nIHRvIDEpLgotCSAgTWVtYmVycyBvZiB0aGUgcmFuZ2UgYXJlIHRob3NlIHZhbHVlcyB3aXRoaW4gdGhlIG1pbiBhbmQgbWF4IGJvdW5kcwotCSAgd2hpY2ggYXJlIGEgbXVsdGlwbGUgb2YgdGhpcyBzdGVwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NTI5NAotCi0yMDExLTExLTMwIDE3OjU4OjA3ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIGdzdHV0aWxzOiBhZGQgYSA2NCBiaXQgdmVyc2lvbiBvZiBHQ0QgY2FsY3VsYXRpb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjUyOTQKLQotMjAxMS0xMS0wNCAxODoyNjoxNSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IGVuZm9yY2UgaWRlbnRpY2FsIGJhc2ljIHR5cGVzIGluIGxpc3RzLCBhcnJheXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjI1ODcKLQotMjAxMi0wMS0yMyAxMDozMjowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSAgYmVuY2htYXJrczogYWRkIG1pc3NpbmcgaW5jbHVkZQotCi0yMDEyLTAxLTIzIDExOjAzOjA5ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBvYmplY3Q6IHJlZ2lzdGVyIGFsbCBwcm9wZXJ0aWVzIGluIG9uZSBnbwotCi0yMDEyLTAxLTIzIDExOjAyOjQ1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWNvbnRyb2xsZXIudHh0OgotCSAgZG9jczogdXBkYXRlIGNvbnRyb2xsZXIgYXBpIGRlc2lnbgotCi0yMDEyLTAxLTIxIDIwOjAzOjUyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuaDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xiaW5kaW5nYXJnYi5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sYmluZGluZ2FyZ2IuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGJpbmRpbmdkaXJlY3QuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGJpbmRpbmdkaXJlY3QuaDoKLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9jb250cm9sLXNvdXJjZXMuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvdGV4dC1jb2xvci1leGFtcGxlLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNvbnRyb2xsZXI6IGFsbG93IGRpZmZlcmVudCBjb250cm9sYmluZGluZ3MKLQkgIE1ha2UgY29udHJvbGJpbmRpbmcgYW4gYWJzdHJhY3QgYmFzZWNsYXNzLiBNb3ZlIGltcGxlbWVudGF0aW9uIHRvIGNvbnRyb2wtCi0JICBiaW5kaW5nLWRpcmVjdCBhbmQgYWRkIGEgY29udHJvbC1iaW5kaW5nLWFyZ2IuIEFkZCBhbiBleGFtcGxlLgotCi0yMDEyLTAxLTIyIDIyOjQ0OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGZvcm1hdC5jOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JICBSZXBsYWNlIGRlcHJlY2F0ZWQgR1N0YXRpY011dGV4IHdpdGggR011dGV4Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyMjA3Ci0KLTIwMTItMDEtMjIgMTU6MjM6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgdG9vbHM6IGZpeCB0eXBvIGluIGdzdC1pbnNwZWN0IGRlYnVnIG1lc3NhZ2UKLQotMjAxMi0wMS0yMiAwMTozOTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGVycm9yLmM6Ci0JKiBnc3QvZ3N0ZXJyb3IuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIFVzZSBHTGliJ3MgdHlwZSBmb3IgR0Vycm9yIGluc3RlYWQgb2Ygb3VyIG93bgotCSAgV2UgaW50cm9kdWNlZCBvdXIgb3duIHdoZW4gR0xpYiBkaWRuJ3Qgd2FudCB0byBhZGQgYSBHVHlwZQotCSAgZm9yIEdFcnJvci4gQnV0IG5vdyB0aGF0IHRoZXJlIGlzIG9uZSwgd2UgY2FuIHVzZSBHTGliJ3MKLQkgIHVuY29uZGl0aW9uYWxseSBhbmQgcmVtb3ZlIG91ciB2ZXJzaW9uLgotCi0yMDEyLTAxLTIyIDAxOjI3OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBmaXggc2l6ZSBvZiBhdG9taWMgY291bnRlcgotCi0yMDEyLTAxLTIyIDAxOjI1OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZXJyb3IuYzoKLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dGFzay5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXIuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0YnVmZmVyc3RyZXNzLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGNsb2Nrc3RyZXNzLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JKiB0b29scy9nc3QtdHlwZWZpbmQuYzoKLQkgIFVzZSByZWNlbnQgR0xpYiBBUEkgdW5jb25kaXRpb25hbGx5IG5vdyB0aGF0IHdlIGRlcGVuZCBvbiB0aGUgbGF0ZXN0IEdMaWIKLQotMjAxMi0wMS0yMiAwMDo0MjozNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3R0cmFjZS5jOgotCSogZ3N0L2dzdHRyYWNlLmg6Ci0JICB0cmFjZTogZG9uJ3QgdXNlIGRlcHJlY2F0ZWQgR1N0YXRpY011dGV4IEFQSSBpbiAoc3RpbGwpIHB1YmxpYyBoZWFkZXIKLQotMjAxMi0wMS0yMSAxMjo1Njo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgc2NyaXB0czogc2V0IEdJX1RZUEVMSUJfUEFUSCBpbiBnc3QtdW5pbnN0YWxsZWQKLQkgIFNvIHB5Z2kgZmluZHMvdXNlcyB0aGUgbG9jYWwgZy1pIGZpbGVzLgotCi0yMDEyLTAxLTIwIDE4OjA2OjA0ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaC5pbjoKLQkgIGxpYmNoZWNrOiBtYWtlIHRoZSBkZWZpbml0aW9uIG9mIGZhaWwgbm90IGZhaWwgd2l0aCBub24gR0NDIGNvbXBpbGVycwotCi0yMDEyLTAxLTIwIDE0OjQyOjMxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbC1zb3VyY2VzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNvbnRyb2xsZXI6IGltcHJvdmUgY29udHJvbCBiaW5kaW5nIGhhbmRsaW5nCi0JICBDaGFuZ2UgX3NldF9jb250cm9sX2JpbmRpbmcgdG8gX2FkZF9jb250cm9sX2JpbmRpbmcgYW5kIHRha2Ugb3duZXJzaGlwLiBBZGQgYQotCSAgX3JlbW92ZV9jb250cm9sX2JpbmRpbmcgZnVuY3Rpb24uCi0KLTIwMTItMDEtMjAgMDg6Mjc6NTcgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuYzoKLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5oOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbC1zb3VyY2VzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNvbnRyb2xsZXI6IHJlbW92ZSBjb252ZW5pZW5jZSBhcGkgZm9yIGNvbnRyb2wgc291cmNlcwotCSAgVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBraW5kcyBvZiBjb250cm9sLWJpbmRpbmdzLgotCi0yMDEyLTAxLTE5IDE1OjE3OjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGhhbmRsZSBOVUxMIGZyb20gZ2V0Y2FwcwotCSAgSWYgdGhlIGdldGNhcHMgZnVuY3Rpb25zIHJldHVybnMgTlVMTCwgcmV0dXJuIEZBTFNFIGZyb20gdGhlIENBUFMgcXVlcnkuCi0KLTIwMTItMDEtMTkgMTU6MTc6MzMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBoYW5kbGUgbGlzdHMgY29ycmVjdGx5Ci0KLTIwMTItMDEtMTcgMTY6MjM6MzMgLTA1MDAgIENvbGluIFdhbHRlcnMgPHdhbHRlcnNAdmVyYnVtLm9yZz4KLQotCSogY29tbW9uOgotCSogY29uZmlndXJlLmFjOgotCSAgYnVpbGQ6IGFkZCAtLWRpc2FibGUtZmF0YWwtd2FybmluZ3MgY29uZmlndXJlIG9wdGlvbgotCSAgSXQncyByZWFzb25hYmxlIHRvIGJ1aWxkIGZyb20gZ2l0LCBidXQgbm90IHdhbnQgdG8gdHVybiBhbGwgY29tcGlsZXIKLQkgIHdhcm5pbmdzIGludG8gZmF0YWwgZXJyb3JzLiAgRm9yIGV4YW1wbGUsIEdOT01FJ3MgamhidWlsZCBoZWxwcyBwZW9wbGUKLQkgIGdldCBuZXdlciB2ZXJzaW9ucyBvZiBzb2Z0d2FyZSB0aGFuIGNhbWUgZnJvbSB0aGVpciBkaXN0cmlidXRpb24sIGJ1dAotCSAgdGhleSBtYXkgbm90IG5lY2Vzc2FyaWx5IHdhbnQgdG8gaGFjayBvbiBpdC4KLQotMjAxMi0wMS0xOSAxMjo1Nzo0OCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYzoKLQkgIHRlc3RzOiBjbG9ja3N0cmVzczogcGVyZm9ybSBzYW5pdHkgY2hlY2sgb24gdGhyZWFkIG51bWJlciBhcmd1bWVudAotCi0yMDEyLTAxLTE5IDA5OjEyOjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5IGltcHJvdmVtZW50cwotCSAgTWFrZSB0aGUgbWVtb3J5IG9iamVjdCBzaW1wbHkgbWFuYWdlIHRoZSBkYXRhIHBvaW50ZXIgYW5kIHRoZSBtYXhzaXplIGFuZCBtb3ZlCi0JICB0aGUgb2Zmc2V0IGFuZCBzaXplIGhhbmRsaW5nIHRvIGNvbW1vbiBmdW5jdGlvbmFsaXR5LgotCSAgVXNlIHRoZSBSRUFET05MWSBmbGFnIHRvIHNldCBhIHJlYWRvbmx5IGxvY2suCi0JICBSZW1vdmUgdGhlIGRhdGEgYW5kIHNpemUgZmllbGRzIGZyb20gdGhlIHVubWFwIG1ldGhvZC4gV2UgbmVlZCBhbiBleHBsaWNpdAotCSAgcmVzaXplIG9wZXJhdGlvbiBpbnN0ZWFkIG9mIHVzaW5nIHRoZSB1bm1hcCBmdW5jdGlvbi4KLQkgIE1ha2UgaW50ZXJuYWwgaGVscGVyIGxvY2sgYW5kIHVubG9jayBmdW5jdGlvbnMuCi0JICBVcGRhdGUgdW5pdCB0ZXN0IGFuZCB1c2VycyBvZiB0aGUgb2xkIEFQSS4KLQotMjAxMi0wMS0xOSAxMTo0Mzo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGRvY3M6IGZpeCB0eXBvIGluIGJ1cyBkb2NzCi0KLTIwMTItMDEtMTMgMTc6NDU6MTcgLTA1MDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBhZGQgdmlzdWFsIHN0dWRpbyBJREUgZmlsZXMgYW5kIE9TIFggLkRTX1N0b3JlIGZpbGVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3ODk5Ci0KLTIwMTItMDEtMTkgMDk6Mjc6MDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGJ1cy5oOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHBvbGwuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRhdGFxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RkYXRhcXVldWUuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0YnVmZmVyc3RyZXNzLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmM6Ci0JICBVcGRhdGUgZm9yIG5ldyBndGhyZWFkIEFQSQotCi0yMDEyLTAxLTE4IDE2OjUyOjU1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlLmFjOiBHSU8gY2hlY2sgaXMgbm93IGluIGdzdC1nbGliMi5tNAotCi0yMDEyLTAxLTE4IDE2OjQ1OjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDA4MDcxODcgdG8gMmE1OTAxNgotCi0yMDEyLTAxLTE4IDE2OjE0OjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlLmFjOiBSZXF1aXJlIEdMaWIgMi4zMS4xMCBhbmQgaW1wcm92ZSBHSU8gY2hlY2sKLQotMjAxMi0wMS0xOCAxMjowNzo0NiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBiYXNldHJhbnNmb3JtOiBBbHdheXMgY2FsbCA6OnByb3Bvc2VfYWxsb2NhdGlvbiB2ZnVuYwotCSAgQW5kIG9ubHkgZm9yd2FyZCB0aGUgYWxsb2NhdGlvbiBxdWVyeSBpZiB3ZSdyZSB3b3JraW5nIGluCi0JICBwYXNzdGhyb3VnaCBtb2RlIGlmIG5vIDo6cHJvcG9zZV9hbGxvY2F0aW9uIGlzIGltcGxlbWVudGVkLgotCSAgSW4gcGxhY2UgYnVmZmVyIHRyYW5zZm9ybWF0aW9ucyB3aWxsIGNoYW5nZSB0aGUgYnVmZmVyCi0JICBjb250ZW50IGFuZCByZXF1aXJlIGV4cGxpY2l0IGhhbmRsaW5nIG9mIGFsbCBtZXRhcy4KLQotMjAxMi0wMS0xOCAxMTozNzo1NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogRG9uJ3QgZm9yd2FyZCB0aGUgYWxsb2NhdGlvbiBxdWVyeSBieSBkZWZhdWx0Ci0JICBUaGlzIGhhcyB0byBiZSBoYW5kbGVkIGV4cGxpY2l0ZWx5IGJ5IGVsZW1lbnRzIHRvCi0JICBtYWtlIHN1cmUgdGhhdCB0aGV5IHN1cHBvcnQgYWxsIHRoZSBtZXRhcyBwYXNzZWQKLQkgIGluIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5LgotCSAgTWV0YXMgaGF2ZSB0byBzdXBwb3J0ZWQgZXhwbGljaXRlbHksIG90aGVyd2lzZSB0aGUKLQkgIHF1ZXJ5IHdpbGwgZmFpbC4gQWxsIGVsZW1lbnRzIGluIGEgY2hhaW4gbmVlZCB0bwotCSAgc3VwcG9ydCBhIHNwZWNpZmljIG1ldGEgdG8gYWxsb3cgaXRzIHVzYWdlLgotCi0yMDEyLTAxLTE4IDAxOjMxOjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZXRhLmM6Ci0JICBnc3Q6IHN1cHByZXNzIHNvbWUgbW9yZSBkZXByZWNhdGVkIHRocmVhZCBhcGkgdW50aWwgd2UgZml4IGl0IHVwCi0JICBXaGljaCBzaG91bGQgYmUgc29vbiwgc2luY2Ugd2UgYWxyZWFkeSBkZXBlbmQgb24gYW4gdW5zdGFibGUgZ2xpYiBmb3IgLWJhc2UuCi0KLTIwMTItMDEtMTggMDE6MTg6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0bmV0LmRlZjoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IHVwZGF0ZSAuZGVmIGZpbGVzIGZvciBhcGkgY2hhbmdlcwotCi0yMDEyLTAxLTE3IDIzOjU3OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogbGlicy9nc3QvTWFrZWZpbGUuYW06Ci0JICBjb25maWd1cmU6IHJlbW92ZSAgLS1kaXNhYmxlLW5ldCBvcHRpb24gYW5kIGFsd2F5cyBidWlsZCBsaWJnc3RuZXQKLQkgIEl0IHNob3VsZCB3b3JrIGV2ZXJ5d2hlcmUgbm93LCBhbmQgLWJhc2UgYW5kIC1nb29kIGRlcGVuZCBvbgotCSAgdGhlIEdzdE5ldE1ldGEgQVBJLgotCi0yMDEyLTAxLTE3IDIzOjUyOjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgY29uZmlndXJlOiByZW1vdmUgc29tZSBzb2NrZXQgY3J1ZnQKLQotMjAxMC0wNS0wNSAxNjozMzo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIG5ldDogcG9ydCB0byB1c2UgZ2lvJ3MgbmV0d29ya2luZyBBUEkKLQkgIFNvbWUgd2FydHMgc3RpbGwsIGJ1dCBpdCdzIGEgc3RhcnQuCi0KLTIwMTItMDEtMTcgMTY6NTA6MTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBuZXQ6IEFkZCBHSU8gdG8gdGhlIGdpLXNjYW5uZXIgcGFja2FnZXMKLQotMjAxMi0wMS0xNiAxMzozNDoyOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmg6Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluOgotCSAgbmV0YWRkcmVzc21ldGE6IFVzZSBHU29ja2V0QWRkcmVzcyBpbnN0ZWFkIG9mIG91ciBvd24gd3JhcHBlciB0eXBlCi0KLTIwMTItMDEtMTYgMTU6NTc6MzUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogbWFrZSB3cml0YWJpbGl0eSBjaGVjayBpbnRvIGEgbWV0aG9kCi0JICBVc2UgYSBtZXRob2QgdG8gY2hlY2sgZm9yIHdyaXRhYmlsaXR5IGluc3RlYWQgb2YgYSBtYWNybyBzbyB0aGF0IHdlIGNhbiBjaGFuZ2UKLQkgIHRoZSBpbXBsZW1lbnRhdGlvbiBtb3JlIGVhc2lseS4KLQotMjAxMi0wMS0xNiAxMjoyNDo0OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lbW9yeS5jOgotCSAgdGVzdHM6IGltcHJvdmUgbWVtb3J5IHRlc3QKLQotMjAxMi0wMS0xNiAxMjoyNDoyMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBpbXByb3ZlIGRvY3MKLQotMjAxMi0wMS0xMSAxMDo1OTo1MyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogZW5zdXJlIGF1dG9tYWdpYyBfdW5tYXAgaW4gc29tZSBtb3JlIGNhc2VzCi0KLTIwMTEtMTEtMTUgMTc6NDI6NTYgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGF1dG9tYXRpY2FsbHkgdW5tYXAgb24gY2xlYXJpbmcKLQkgIFdoZW4gX2NsZWFyIGdldHMgY2FsbGVkIGJldHdlZW4gX21hcCBhbmQgX3VubWFwLCBidWZmZXJzCi0JICB3aWxsIGJlIHVucmVmZmVkLiBJZiB0aGUgYWRhcHRlciB3YXMgbWFwcGVkLCBtZW1vcnkgbGVha3MKLQkgIG1heSBvY2N1ci4KLQkgIFdoaWxlIGNhbGxpbmcgX2NsZWFyIGJldHdlZW4gX21hcCBhbmQgX3VubWFwIGRvZXMgbm90IHNlZW0KLQkgIGxpa2Ugc3VjaCBhIGdyZWF0IGlkZWEsIHRoaXMgaXMgcG9zc2libGUgaW4gdGhlIGF1ZGlvCi0JICBlbmNvZGVyIGJhc2UgY2xhc3MsIGFzIF9jbGVhciBtYXkgYmUgY2FsbGVkIGluIF9maW5pc2hfZnJhbWUuCi0JICBTaW5jZSB0aGUgYXVkaW8gZW5jb2RlciByZWxpZXMgb24gZmx1c2hpbmcgdG8ga2VlcCB0cmFjayBvZgotCSAgdGltZXN0YW1wcywgZGVsYXlpbmcgZmx1c2hpbmcgdGlsbCBhZnRlciBoYW5kbGVfZnJhbWUgc2VlbXMKLQkgIGRhbmdlcm91cy4KLQkgIFNvLCB3ZSB1bm1hcCBvbiBjbGVhciwgYXMgdGhlIG5leHQgdW5tYXAgd2lsbCBkbyBub3RoaW5nLgotCSAgVGhpcyBtYWtlcyBfY2xlYXIgc2FmZSB0byBjYWxsIGJldHdlZW4gX21hcCBhbmQgX3VubWFwLAotCSAgd2hpbGUgYXZvaWRpbmcgbGVha2luZyB0aGUgbWFwcGVkIGJ1ZmZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjQxMzMKLQotMjAxMi0wMS0xMyAxNDoyMDozMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogcHJldmVudCB1bmxpa2VseSBjYXBzIGxlYWsKLQotMjAxMi0wMS0xMyAxMDo0MzoxMiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogcGx1ZyBmYWN0b3J5IGxlYWsgb24gZXJyb3IKLQotMjAxMi0wMS0xMyAwMDoyMjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYwotCi0yMDEyLTAxLTEyIDIwOjQ2OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgUmVtb3ZlIEdTVF9UWVBFX0RBVEUsIG91ciBvd24gR0RhdGUgdHlwZQotCSAgV2hpY2ggd2UgaGFkIHRvIGFkZCBiZWNhdXNlIEdMaWIgZGlkbid0IGhhdmUgaXQKLQkgIGJhY2sgaW4gdGhlIGRheS4gUG9ydCBldmVyeXRoaW5nIHRvIHBsYWluIG9sZAotCSAgR19UWVBFX0RBVEUsIHdoaWNoIGlzIGFsc28gYSBib3hlZCB0eXBlLiBJZGVhbGx5Ci0JICB3ZSdkIGp1c3QgdXNlIEdEYXRlVGltZSBmb3IgZXZlcnl0aGluZywgYnV0IGl0Ci0JICBkb2Vzbid0IHN1cHBvcnQgbm90IHNldHRpbmcgc29tZSBvZiB0aGUgZmllbGRzCi0JICB1bmZvcnR1bnRlbHkgKHdoaWNoIHdvdWxkIGJlIHZlcnkgdXNlZnVsIGZvcgotCSAgdGFnIGhhbmRsaW5nIGluIGdlbmVyYWwsIGlmIHdlIGNvdWxkIGV4cHJlc3MKLQkgIDIwMTItMDEgZm9yIGV4YW1wbGUpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjM1MQotCi0yMDEyLTAxLTEyIDE5OjUzOjExICswMDAwICBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDBAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBjbGVhciBhZGFwdGVyIGluIHJlc2V0IHNvIGJhc2VwYXJzZSBpcyByZXVzYWJsZQotCSAgR3N0QmFzZVBhcnNlIHdhcyBub3QgY2xlYXJpbmcgaXRzIGFkYXB0ZXIgb24gcmVzZXQgY2F1c2luZwotCSAgcHJvYmxlbXMgd2hlbiBhIHBpcGVsaW5lIHdlbnQgZm9yIGV4YW1wbGUgZnJvbSBQTEFZSU5HIHRvIE5VTEwKLQkgIHN0YXRlIGFuZCB0aGVuIGJhY2sgdG8gUExBWUlORyBhZ2Fpbi4gVGhlIGRhdGEgZnJvbSB0aGUgbGFzdAotCSAgc3RyZWFtIHdvdWxkIGJlIHVzZWQgaW4gdGhlIHBhcnNlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Njc0NDQKLQotMjAxMi0wMS0xMiAxNTo1MDo1MyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3RpbnNwZWN0OiBmaXggZmVhdHVyZXMgYW5kIGxpc3QgbGVha3MKLQotMjAxMi0wMS0xMiAxMTowMzoxMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IGFkZCBuZXcgQVBJIHRvIC5kZWYgZmlsZQotCi0yMDEyLTAxLTExIDEyOjE5OjIwICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgZ3N0c3RydWN0dXJlOiBjbGFyaWZ5IF9nZXQgZG9jcyBhYm91dCB0aGUgcmV0dXJuZWQgcmVmZXJlbmNlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3Njg5Ci0KLTIwMTItMDEtMTAgMTM6MDA6MDcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTItMDEtMDYgMTY6Mzk6MDQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IFNlbmQgY2FwcyBhZ2FpbiBhZnRlciBhY3RpdmF0aW9uCi0JICBBdm9pZHMgZW5kaW5nIHVwIGluIGNhc2VzIHdoZXJlIHR5cGVmaW5kIGdldHMgYWN0aXZhdGVkIGluIHB1bGwtbW9kZQotCSAgYW5kIGNhcHMgbmV2ZXIgZ2V0IHNlbnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3MzM3Ci0KLTIwMTItMDEtMDkgMTU6NTk6MDkgKzAwMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgQWRkIGxhdGVzdCBzcGVjZmlsZSBjaGFuZ2VzCi0KLTIwMTItMDEtMDkgMTU6NTg6NDUgKzAwMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6Ci0JICBBbHNvIGFkZCBoZWFkZXJmaWxlCi0KLTIwMTItMDEtMDkgMTU6NTc6NTEgKzAwMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBGaXggZG90ZmlsZSBBUEkgdG8gYmUgZXhwb3J0ZWQgc2luY2UgbWFjcm9zIGNhbid0IGJlIEdJIGJvdW5kCi0KLTIwMTItMDEtMDkgMTM6MTk6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkgIHRlc3RzOiBpZ25vcmUgbmV3IG1lbW9yeSB0ZXN0IGJpbmFyeQotCi0yMDEyLTAxLTA5IDAzOjE0OjQxIC0wNTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmM6Ci0JICBGaXggcHJpbnRmIGZvcm1hdCBidWlsZCB3YXJuaW5ncwotCi0yMDEyLTAxLTA5IDEzOjEwOjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zIGZvciBuZXcgc3RyaW5ncwotCi0yMDEyLTAxLTA2IDE1OjAxOjI0ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogQWxsb3cgTlVMTCBkZXN0IHdoZW4gc3VidHJhY3RpbmcgYml0bWFzawotCSAgSGFwcGVucyB3aGVuIGNoZWNraW5nIGZvciBzdWJzZXRzIG9mIGNhcHMKLQotMjAxMi0wMS0wNiAxMzozMjo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBlbnN1cmUgd3JpdGFibGUgbWVtb3J5IGluIG1lbXNldAotCi0yMDEyLTAxLTA2IDEzOjEwOjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lbW9yeS50eHQ6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVtb3J5LmM6Ci0JICBtZW1vcnk6IGNoZWNrIHNlbWFudGljcyBvZiBuZXN0ZWQgbWFwcGluZ3MKLQkgIENvdW50IGhvdyBtYW55IG1hcHBpbmdzIGFyZSBjdXJyZW50bHkgYWN0aXZlIGFuZCBhbHNvIHdpdGggd2hhdCBhY2Nlc3MgcGF0dGVybi4KLQkgIFVwZGF0ZSB0aGUgZGVzaWduIGRvYyB3aXRoIHJlc3RyaWN0aW9ucyBvbiB0aGUgYWNjZXNzIHBhdHRlcm5zIGZvciBuZXN0ZWQKLQkgIG1hcHBpbmdzLgotCSAgQ2hlY2sgaWYgbmVzdGVkIG1hcHBpbmdzIG9iZXkgdGhlIGFjY2VzcyBtb2RlIHJlc3RyaWN0aW9ucyBvZiB0aGUgZGVzaWduIGRvYy4KLQkgIEFkZCB2YXJpb3VzIHVuaXQgdGVzdHMgdG8gY2hlY2sgdGhlIGRlc2lyZWQgYmVoYXZpb3VyLgotCi0yMDEyLTAxLTA2IDEzOjA2OjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiB1bm1hcCB3aXRoIHRoZSByaWdodCBkYXRhIHBvaW50ZXIKLQkgIFVzZSB0aGUgb3JpZ2luYWwgZGF0YSBwb2ludGVyIHRvIHVubWFwIHRoZSBidWZmZXIgbWVtb3J5LgotCi0yMDEyLTAxLTA2IDEwOjM5OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JICBkb2NzOiBpbXByb3ZlIG1lbW9yeSBkb2NzCi0KLTIwMTItMDEtMDYgMDc6MDI6MzYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogaGFuZGxlIC0xIHNpemUgaW4gdW5tYXAKLQkgIGhhbmRsZSAtMSBpbiB1bm1hcCBjb3JyZWN0bHkgd2hlbiB0aGUgb2Zmc2V0IGlzIG1vZGlmaWVkLgotCi0yMDEyLTAxLTA2IDA2OjQzOjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVtb3J5LmM6Ci0JICBtZW1vcnk6IGltcHJvdmUgc2VtYW50aWNzIG9mIHVubWFwCi0JICBNYWtlIGFuIHVubWFwIGNhbGwgd2l0aCBhIGRpZmZlcmVudCBkYXRhIHBvaW50ZXIgdGhhbiB0aGUgbWFwIGNhbGwgdXBkYXRlIHRoZQotCSAgb2Zmc2V0IGZpZWxkLiBUaGlzIGFsbG93cyBmb3IgYm90aCBvZmZzZXQgYW5kIHNpemUgYWRqdXN0ZW1lbnRzIGluIHRoZSB1bm1hcAotCSAgY2FsbC4KLQotMjAxMS0xMS0yOSAxNDoyMjo0NCArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZG9uJ3QgY29tcGVuc2F0ZSBmb3IgcmVuZGVyLWRlbGF5IHR3aWNlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3Mjk4Ci0KLTIwMTItMDEtMDUgMTg6MTU6MjAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogYWRkIG1vcmUgY2hlY2tzCi0JICBBZGQgY2hlY2sgZm9yIG1hcHBpbmcgYW5kIHJlc2l6aW5nCi0KLTIwMTItMDEtMDUgMTc6Mjg6MjggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVtb3J5LnR4dDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogdGFrZSBvZmZzZXQgaW50byBhY2NvdW50Ci0JICBUYWtlIHRoZSBvZmZzZXQgaW50byBhY2NvdW50IHdoZW0gbWFwcGluZyBhbmQgdW5tYXBwaW5nIHRoZSBidWZmZXIuCi0KLTIwMTItMDEtMDUgMTc6MDI6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVtb3J5LnR4dDoKLQkgIGRvY3M6IGNsYXJpZnkgcmVzaXplIGFuZCBjdXJyZW50IG1hcHBpbmdzCi0KLTIwMTItMDEtMDUgMTY6NDE6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVtb3J5LnR4dDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogY2xhcmlmeSBuZXN0ZWQgbWFwcGluZ3MsIGFkZCB1bml0IHRlc3QKLQotMjAxMi0wMS0wNSAxMjozMDowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IGFkZCBuZXcgQVBJIHRvIC5kZWYgZmlsZQotCi0yMDEyLTAxLTA1IDEzOjIyOjQyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVtb3J5LmM6Ci0JICB0ZXN0czogYWRkIG1vcmUgbWVtb3J5IHVuaXQgdGVzdHMKLQkgIENoZWNrIGZvciB1bm1hcCB3aXRoIGludmFsaWQgc2l6ZQotCi0yMDEyLTAxLTA1IDEzOjExOjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYzoKLQkgIHRlc3RzOiBhZGQgdW5pdCB0ZXN0IGZvciBHc3RNZW1vcnkKLQkgIEFkZCBhIEdzdE1lbW9yeSB1bml0IHRlc3QKLQkgIEFkZCBzb21lIG1vcmUgYXNzZXJ0cyBpbiBHc3RNZW1vcnkgdG8gY2F0Y2ggaW52YWxpZCBjYXNlcy4KLQotMjAxMi0wMS0wNSAxMzowOToyOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBhZGQgbWFjcm8gdG8gY2hlY2sgZm9yIG1lbW9yeSByZWZjb3VudAotCi0yMDEyLTAxLTA1IDEyOjM5OjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lbW9yeS50eHQ6Ci0JICBpbXByb3ZlIGRvY3MgYSBsaXR0bGUKLQotMjAxMS0xMi0xNiAxMzoxMTozNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IEFkZCB0ZXN0cyBmb3IgdGhlIGJpdG1hc2sgdHlwZQotCi0yMDExLTEyLTE2IDEyOjM5OjE1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBBZGQgImJpdG1hc2siIGFzIGFsaWFzIGZvciAoR3N0Qml0bWFzaykgd2hlbiAoZGUtKXNlcmlhbGl6aW5nIHZhbHVlcwotCi0yMDExLTEyLTE2IDEyOjMyOjI2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIHZhbHVlOiBBZGQgNjQtYml0IGJpdG1hc2sgdHlwZQotCi0yMDEyLTAxLTAxIDE2OjMyOjI3ICswMTAwICBJZGFyIFRvbGxlZnNlbiA8aXRvbGxlZnNAY2lzY28uY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgYnVpbGQ6IGRvbid0IG91dHB1dCBjb25maWd1cmUgb3B0aW9ucyB2aWEgYXV0b2dlbiBpZiAkTk9DT05GSUdVUkUgaXMgc2V0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3Mjk2Ci0KLTIwMTItMDEtMDUgMDA6MzA6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LWkxOG4tYXBwLmg6Ci0JKiBnc3QvZ3N0LWkxOG4tbGliLmg6Ci0JICBnc3Q6IGluY2x1ZGUgbG9jYWxlLmggYmVmb3JlIGFueSBvdGhlciBpMThuIGhlYWRlcnMKLQkgIFRoaXMgaXMgYWxzbyBob3cgd2UgZG8gaXQgaW4gLWJhc2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3MjkwCi0KLTIwMTItMDEtMDEgMTY6NDY6MDQgKzAxMDAgIElkYXIgVG9sbGVmc2VuIDxpdG9sbGVmc0BjaXNjby5jb20+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgZ3N0Y29uZmlnLmg6IGFkZHMgYW5kIHVzZXMgU3VuUHJvIHZpc2liaWxpdHkgYXR0cmlidXRlIGZvciBwcm9wZXIgZnVuY3Rpb24gZXhwb3J0cwotCSAgRGVmaW5lIEdTVF9FWFBPUlQgZm9yIFN1blByby4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjcyODkKLQotMjAxMi0wMS0wMSAxNjo0NzoxNCArMDEwMCAgSWRhciBUb2xsZWZzZW4gPGl0b2xsZWZzQGNpc2NvLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBwbHVnaW5zOiBleHBsaWNpdGx5IGNhc3QgaW5pdGlhbGl6YXRpb24gdmFsdWVzIHRvIHRoZSBjb3JyZWN0IHR5cGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjcyODgKLQotMjAxMi0wMS0wMSAyMDoxNzo0MSArMDEwMCAgSWRhciBUb2xsZWZzZW4gPGl0b2xsZWZzQGNpc2NvLmNvbT4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIHBvbGw6IGluY2x1ZGUgY29ycmVjdCBwb2xsLmggYmFzZWQgb24gYXV0b2NvbmYgdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzI4NgotCi0yMDEyLTAxLTA0IDIzOjQ2OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBjaGVjayBmb3Igc3lzL3BvbGwuaAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzI4NgotCi0yMDEyLTAxLTA0IDE5OjUwOjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGE2MmYzZDQgdG8gMDgwNzE4NwotCi0yMDEyLTAxLTA0IDEwOjA0OjExICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IG9ubHkgcmVzZXJ2ZSA2IGV4dHJhIGZsYWdzCi0JICBPbmx5IHJlc2VydmUgNiBleHRyYSBmbGFncyBpbnN0ZWFkIG9mIDEwIHNvIHRoYXQgbW9yZSBtZWRpYSBzcGVjaWZpYyBmbGFncwotCSAgYXJlIGF2YWlsYWJsZS4KLQotMjAxMi0wMS0wMyAxNToyNTozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkgIEdTVF9GTE9XX1VORVhQRUNURUQgLT4gR1NUX0ZMT1dfRU9TCi0KLTIwMTItMDEtMDMgMTU6MDU6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rjb21wYXQuaDoKLQkgIGNvbXBhdDogcmVzdG9yZSBVTkVYUEVDVEVECi0KLTIwMTItMDEtMDMgMTU6MDM6MzggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSAgZG9jczogZml4IHNvbWUgZG9jcwotCi0yMDEyLTAxLTAzIDE0OjQ1OjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZQotCi0yMDEyLTAxLTAzIDE0OjQzOjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIHRhZ2xpc3Q6IGF2b2lkIGV4cG9zaW5nIHRoZSBsaXN0cyBpbiB0YWdzCi0KLTIwMTItMDEtMDMgMTM6NDI6MTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnbGlzdDogYWRkIG1pc3NpbmcgZnVuY3Rpb25zCi0JICBBZGQgbWlzc2luZyBhbmQgZXNzZW50aWFsIGZ1bmN0aW9ucyBub3cgdGhhdCB3ZSBjYW4ndCBkaXJlY3RseSB1c2UgR3N0U3RydWN0dXJlCi0JICBtZXRob2RzIG9uIHRoZSB0YWdsaXN0IGFueW1vcmUuCi0KLTIwMTItMDEtMDMgMTA6NDI6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5oOgotCSAgdmFsdWU6IGFkZCBtYWNybyB0byBjaGVjayBpZiBhIGd2YWx1ZSBob2xkcyBhIHNhbXBsZQotCi0yMDEyLTAxLTAyIDE1OjQ3OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgotCSAgZG9jczogZml4IGJ1aWxkIG9mIGRvY3MgZXhhbXBsZXMKLQkgIFVwZGF0ZSBmb3IgcmVnaXN0cnkgbWV0aG9kIHJlbmFtZQotCi0yMDEyLTAxLTAyIDE1OjM5OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB0dXJuIGFzc2VydCBpbnRvIGEgcmVhbCBlcnJvcgotCSAgUG9zdCBhIHJlYWwgZXJyb3IgaW5zdGVhZCBvZiBqdXN0IGFzc2VydGluZy4KLQotMjAxMi0wMS0wMiAxNTozODoyNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBoYW5kbGUgbGF0ZW5jeSBldmVudAotCi0yMDEyLTAxLTAyIDAyOjMyOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcmVnaXN0cnk6IGdldCByaWQgb2YgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfKigpIGNvbnZlbmllbmNlIG1hY3JvcwotCSAgVGhleSdyZSBub3QgcmVhbGx5IHdvcnRoIGl0OiBoYXJkbHkgc2F2ZSBhbnkgdHlwaW5nLCBhbmQgYXJlbid0Ci0JICBncmVhdCBmb3IgYmluZGluZ3Mgb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uLgotCi0yMDEyLTAxLTAyIDAyOjIyOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICByZWdpc3RyeTogcmVuYW1lIGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCgpIHRvIGdzdF9yZWdpc3RyeV9nZXQoKQotCSAgSXQncyBub3QgcmVhbGx5IGEgZGVmYXVsdCBpZiB0aGVyZSBpcyBvbmx5IG9uZSB0aGF0IGNhbid0IGJlIGNoYW5nZWQuCi0JICBTaG91bGQgd2UgcmV0dXJuIGEgcmVmIGxpa2UgZS5nLiBnX3ZvbHVtZV9tb25pdG9yX2dldCgpIGRvZXM/Ci0KLTIwMTItMDEtMDIgMDI6MjE6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3R0YWdsaXN0LmMKLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYwotCi0yMDEyLTAxLTAyIDAwOjE3OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnczogYWRkIEdTVF9UQUdfTEFOR1VBR0VfTkFNRQotCSAgQVBJOiBHU1RfVEFHX0xBTkdVQUdFX05BTUUKLQotMjAxMi0wMS0wMSAyMDo1OToyMiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jb250cm9sbGVyLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBjb250cm9sbGVyIGRlc2lnbiBkb2MKLQotMjAxMi0wMS0wMSAyMDo1NzozNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBjb250cm9sbGVyOiByZW5hbWUgc29tZSB0ZXN0cwotCi0yMDEyLTAxLTAxIDIwOjU1OjIwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSAgY29udHJvbGxlcjogc3VwcG9ydCBjb250cm9sIG1hcHBpbmcgZm9yIGVudW1zCi0JICBBZGQgYSBtYXBwaW5nIGZvciBlbnVtIHR5cGVzIChzdXBwb3J0aW5nIHNwYXJzZSBlbnVtcykuIEFkZCBhIHRlc3QuCi0KLTIwMTItMDEtMDEgMjA6NDM6NTEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3Rjb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbC1zb3VyY2VzLmM6Ci0JICBjb250cm9sbGVyOiByZW1vdmUgbm9uc2Vuc2UgcGFydHMgZnJvbSB0ZXN0IG9iamVjdCBwcm9wZXJ0eSBkZXNjcmlwdGlvbnMKLQotMjAxMi0wMS0wMSAxODo1NDoyMyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSAgaW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2U6IGZpeCBjdWJpYyBpbnRlcnBvbGF0aW9uIGZvciBhcnJheXMKLQotMjAxMi0wMS0wMSAxODo1MDo1NSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9jb250cm9sLXNvdXJjZXMuYzoKLQkgIGF1ZGlvLWV4YW1wbGU6IGFsc28gcGxvdCByZXZlcnNlLXNhdwotCi0yMDEyLTAxLTAxIDE4OjQzOjIzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkgIGxmb2NvbnRyb2xzb3VyY2U6IGNsZWFudXBzIGFuZCBmaXggdHJpYW5nbGUgY2FsY3VsYXRpb25zCi0KLTIwMTItMDEtMDEgMTg6MzQ6MTIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgotCSAgYXVkaW8tZXhhbXBsZTogZml4IHRoZSBleGFtcGxlCi0JICBXZSBuZWVkIHRvIHNjYWxlIHRoZSBmcmVxdWVuY3kgdmFsdWVzLgotCi0yMDEyLTAxLTAxIDE1OjE2OjA2ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbC1zb3VyY2VzLmM6Ci0JICBsZm9jb250cm9sc291cmNlOiBtYWtlIGNoYWluYWJsZQotCSAgTm93IHRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgY29udHJvbHNvdXJjZSBhcmUgaW4gdHVybiBjb250cm9sYWJsZS4gQWRkIGFuIGV4YW1wbGUKLQkgIHRvIHNob3cgdGhlIHVzYWdlLgotCi0yMDEyLTAxLTAxIDE1OjAxOjIyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JICBjb250cm9sbGVyOiBhZGQgbG9nZ2luZyBhbmQgZml4IGFycmF5IGZ1bmN0aW9ucwotCi0yMDEyLTAxLTAxIDE0OjU1OjM1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkgIGNvbnRyb2xsZXI6IGNsZWFudXAgdGhlIHRlc3RzCi0KLTIwMTItMDEtMDEgMTQ6Mjg6NTQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3Rjb250cm9sYmluZGluZy5jOgotCSAgY29udHJvbGxlcjogYWRkIG1vcmUgZGVidWcgbG9nZ2luZwotCi0yMDExLTEyLTMxIDE3OjM3OjIwIC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBjb252ZXJ0IE1ha2VmaWxlIHNwYWNlcyB0byB0YWJzCi0KLTIwMTEtMTItMzEgMTU6NTI6MTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbC1zb3VyY2VzLmM6Ci0JICBjb250cm9sbGVyOiBhbHNvIHRlc3QgYXJyYXkgZnVuY3Rpb25zCi0JICBJbXByb3ZlIHRoZSBleGFtcGxlIHRvIGFsc28gY29sbGVjdCB2YWx1ZSBhcnJheXMgYW5kIHBsb3QgdGhlbS4KLQotMjAxMS0xMi0zMSAxNToyNjoyNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgY29udHJvbGxlcjogcmVtb3ZlIG9ic29sZXRlIEZJWE1FIGNvbW1lbnQKLQotMjAxMS0xMi0zMSAwOTo1Njo1MyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBjb250cm9sbGVyOiBmaXggdGVzdHMKLQkgIFNldCBhIGRlZmluZWQgdmFsdWUgdG8gY2hlY2sgZm9yIG5vLWNoYW5nZS4KLQotMjAxMS0xMi0zMCAxODozNTo0MCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuYzoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmg6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3Rjb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9jb250cm9sLXNvdXJjZXMuYzoKLQkgIGNvbnRyb2wtc291cmNlczogdHVybiBpbnRvIEdzdE9iamVjdHMKLQkgIFRoaXMgaXMgYSBwcmVwYXJhdGlvbiBmb3IgY2hhaW5pbmcgdGhlbS4KLQotMjAxMS0xMi0zMCAxOTozNzozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtYXJzaGFsLmxpc3Q6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSAgcmVnaXN0cnk6IHJlbW92ZSBwYWRkaW5nIGFuZCBzaWduYWwgdmZ1bmNzCi0JICBBbmQgZml4IHNpZ25hbCBHVHlwZXMgYW5kIG1hcnNoYWxsZXIuIE5vIG9uZSB3aWxsIGV2ZXIKLQkgIG5lZWQgdG8gc3ViY2xhc3Mgb3VyIHJlZ2lzdHJ5LCBzbyBqdXN0IHJlbW92ZSB0aGUgcGFkZGluZwotCSAgYW5kIHRoZSBzaWduYWwgdmZ1bmNzLgotCi0yMDExLTEyLTMwIDE1OjM5OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogZGlzYWJsZSBHc3RJbmRleCB1bml0IHRlc3QKLQotMjAxMS0xMi0zMCAxNTozMToxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGluZGV4LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGluZGV4Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdG1lbWluZGV4LmM6Ci0JICBpbmRleDogcmVuYW1lIEdzdEFzc29jRmxhZ3MgdG8gR3N0SW5kZXhBc3NvY2lhdGlvbkZsYWdzCi0JICBKdXN0IGluIGNhc2Ugd2UgcmVzdXJyZWN0IHRoaXMgbGF0ZXIuCi0KLTIwMTEtMTItMzAgMTU6MjQ6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGluZGV4LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGluZGV4Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdG1lbWluZGV4LmM6Ci0JICBiYXNlOiBkaXNhYmxlIHVudXNlZCBpbmRleCBBUEkgYW5kIG1ha2UgZnVuY3Rpb25zIHN0YXRpYwotCSAgSXQncyBzaW1wbHkgcHJpdmF0ZSBoZWxwZXIgQVBJIGZvciBub3csIHVudGlsIHNvbWVvbmUKLQkgIGZpeGVzIHVwIEdzdEJhc2VQYXJzZSBub3QgdG8gbmVlZCBpdCBhbnkgbW9yZS4KLQotMjAxMS0xMi0zMCAxNToyNDozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IHJlbW92ZSBpbmRleCBBUEkgZnJvbSAuZGVmIGZpbGUKLQotMjAxMS0xMi0zMCAxNTowNjozNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBlbGVtZW50OiBhZGQgTEFSR0UgcGFkZGluZyB0byBjbGFzcyBzdHJ1Y3R1cmUKLQkgIEZvdXIgc2xvdHMgZm9yIGV4cGFuc2lvbiBpcyBub3QgYSBsb3QuCi0KLTIwMTEtMTItMzAgMTU6MDM6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RpbmRleC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RpbmRleC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RtZW1pbmRleC5jOgotCSogcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvaW5kZXhlcnMvLmdpdGlnbm9yZToKLQkqIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgotCSogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5jOgotCSogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5oOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGluZGV4OiByZW1vdmUgR3N0SW5kZXggYW5kIEdzdEluZGV4RmFjdG9yeSBmb3Igbm93Ci0JICBUaGVyZSBhcmUgbWFueSBnb29kIHVzZSBjYXNlcyBmb3IgR3N0SW5kZXggYW5kIHdlIHdhbnQKLQkgIHRvIGFkZCBpdCBiYWNrIGFnYWluIGluIHNvbWUgZm9ybSwgYnV0IHBvc3NpYmx5IG5vdCB3aXRoCi0JICB0aGUgY3VycmVudCBBUEksIHdoaWNoIGlzIHZlcnkgcG93ZXJmdWwgKG1heWJlIHRvbyBwb3dlcmZ1bCksCi0JICBidXQgYWxzbyBhIGJpdCBjb25mdXNpbmcuIEF0IHRoZSB2ZXJ5IGxlYXN0IHdlJ2QgbmVlZCB0bwotCSAgbWFrZSB0aGUgQVBJIGJpbmRpbmdzLWZyaWVuZGx5LgotCi0yMDExLTEyLTMwIDE3OjU3OjQxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IHVucmVmIHRoZSB0d28gY290bnJvbGxlciB0eXBlcyBpbiBfZGVpbml0KCkKLQotMjAxMS0xMi0zMCAxNzo1MTowMSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkgIGNvbnRyb2xsZXI6IGFkZCBtb3JlIHRlc3RzIHRvIGNvcmUgY29udHJvbGxlciBzdWl0ZQotCSAgRXh0ZW5kIHRoZSBkdW1teSBjb250cm9sLXNvdXJjZSB0byBhbGxvdyB0ZXN0aW5nIHRoZSBzeW5jIGNvZGUgcGF0aC4gQWRkIHRlc3QKLQkgIGZvciAxOjEgYW5kIDI6MSB2YWx1ZSA8LT4gY29udHJvbC1zb3VyY2Ugc3luYy4KLQotMjAxMS0xMi0zMCAxMzo1MjowOCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkgIGNvbnRyb2xsZXI6IGFkZCBhIHRlc3QgZm9yIGJpbmRpbmdzIGNvbnRyb2wgc291cmNlcyBtdWx0aXBsZSB0aW1lcwotCi0yMDExLTEyLTMwIDEyOjU5OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdGgtY29tcGF0Lmg6Ci0JICBtYXRoLWNvbXBhdDogbW92ZSBzdGF0aWMgdmFyaWFibGUgZm9yIE5BTiBpbnRvICNpZm5kZWYgTkFOIGJsb2NrCi0JICBBbmQgdXNlIEdfR05VQ19VTlVTRUQgaW5zdGVhZCBvZiBfX2F0dHJpYnV0ZV91c2VkX18KLQotMjAxMS0xMi0zMCAxMzozMjoxOCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21hdGgtY29tcGF0Lmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmM6Ci0JICBjb250cm9sbGVyOiB1c2UgTkFOIGluc3RlYWQgb2YgRlBfTkFOICh3aGljaCBpcyB0aGUgY2xhc3MpCi0JICBBbHNvIGFkZCBhIGZhbGxiYWNrIGRlZmluZSB0byBtYXRoLWNvbXBhdC5oLgotCSAgRml4ZXMgIzY2Njg4NwotCi0yMDExLTEyLTI5IDE2OjU2OjQ2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dC1zZWxlY3RvcjogRG8gbm90IGZhbHNlIHdhcm4gYWJvdXQgdW5saW5rZWQgcGFkCi0JICBXaGVuIG91dHB1dC1zZWxlY3RvciBkaWRuJ3QgcmVjZWl2ZSBhIG5ld3NlZ21lbnQgZXZlbnQgaXQgd291bGQKLQkgIHdhcm4gYWJvdXQgcGFkIGJlaW5nIHVubGlua2VkIHdoZW4gc3dpdGNoaW5nIHBhZHMuIE1ha2luZyB0aGUgbG9ncwotCSAgd3JvbmcgYW5kIG1pc2xlYWRpbmcuCi0KLTIwMTEtMTItMjkgMTY6NDk6MzkgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMi0yOCAxNToxMzowOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHRlc3RzOiBGaXggbGVhayBpbiBwYWQgY2hlY2sKLQotMjAxMS0xMi0yOCAxNDo1MTo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBkZWluaXQgbWV0YSBmbGFncyB0b28KLQotMjAxMS0xMi0yOCAxMjoyNTo1OSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogSW5pdGlhbGl6ZSBuZXcgR3N0TWV0YUZsYWdzIGluIGluaXRfcG9zdCgpCi0KLTIwMTEtMTItMDEgMTk6MDU6NTkgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIGdzdHF1ZXJ5OiBTbWFsbCBkb2MgZml4dXBzCi0KLTIwMTEtMTItMTYgMDI6MjA6MjcgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdHNhbXBsZS5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHRyYWNlLmg6Ci0JICB3aW4zMjogZml4IGV4cG9ydGVkIHZhcmlhYmxlcyBmb3IgVlMgMjAxMAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjIxOQotCi0yMDExLTEyLTI3IDEzOjQ4OjM2ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmM6Ci0JICB0cmlnZ2VyY29udHJvbHNvdXJjZTogZml4IGNvbnRyb2wgcmVhY2hlcyBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24KLQkgIFJldHVybiBOQU4gYW5kIGNoZWNrIHRoZSB2YWx1ZSBmdXJ0aGVyIHVwLgotCSAgRml4ZXMgIzY2Njg5MAotCi0yMDExLTEyLTI3IDExOjQwOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5jOgotCSAgY29udHJvbGxlcjogcXVpY2stZml4IGNvbXBpbGVyIHdhcm5pbmcgYnJlYWtpbmcgdGhlIGJ1aWxkCi0JICBUaGlzIGlzIGxpa2VseSBub3QgdGhlIHByb3BlciBmaXguCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY2ODkwCi0KLTIwMTEtMTItMjcgMTE6MzU6MjggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6Ci0JICB0ZXN0czogY2FuJ3QgYWNjZXNzIHByaXZhdGUgcmVnaXN0cnkgc3RydWN0dXJlIG1lbWJlcnMgZGlyZWN0bHkgYW55IGxvbmdlcgotCi0yMDExLTEyLTI3IDExOjI0OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSAgY29udHJvbGxlcjogZml4IGNvbXBpbGVyIHdhcm5pbmcgaW4gaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZQotCSAgZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzo1NDogd2FybmluZzogdHlwZSBxdWFsaWZpZXJzIGlnbm9yZWQKLQkgIG9uIGZ1bmN0aW9uIHJldHVybiB0eXBlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY2ODkwCi0KLTIwMTEtMTItMjYgMTg6NDQ6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IHJlbW92ZSAiZmQiIHByb3BlcnR5Ci0JICBJdCdzIG5vIGxvbmdlciB1c2VmdWwsIHNpbmNlIHdlIGRvbid0IHVzZSBtbWFwIGFueSBtb3JlIGFueXdheSwKLQkgIGFuZCB3ZSBtaWdodCB1c2UgYSBkaWZmZXJlbnQgQVBJIGZvciBJL08gaW4gZnV0dXJlIChzdWNoIGFzIEdJTykuCi0KLTIwMTEtMTItMjYgMTg6NDE6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5OiBtb3ZlIHByaXZhdGUgYml0cyBpbnRvIHByaXZhdGUgc3RydWN0Ci0KLTIwMTEtMTItMjYgMTE6MjY6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBtaWNyby1vcHRpbWlzYXRpb246IGF2b2lkIHNvbWUgdW5uZWNlc3NhcnkgZ192YWx1ZV91bnNldCgpCi0JICBXZSBrbm93IHRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlIGFuZCBjYW4gc2F2ZSB1cyB0aGUgZnVuY3Rpb24KLQkgIGNhbGxzIGFuZCBHVmFsdWVUYWJsZSBsb29rdXBzLgotCi0yMDExLTEyLTI1IDIzOjQxOjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogQW5kcm9pZC5tazoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JKiBsaWJzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RwLXByaXZhdGUuaDoKLQkqIHBrZ2NvbmZpZy9NYWtlZmlsZS5hbToKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wucGMuaW46Ci0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3RsaWJzY3BwLmNjOgotCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JKiB3aW4zMi9NQU5JRkVTVDoKLQkqIHdpbjMyL3ZzNi9nc3RyZWFtZXIuZHN3OgotCSogd2luMzIvdnM2L2xpYmdzdGRhdGFwcm90b2NvbC5kc3A6Ci0JICBsaWJzOiByZW1vdmUgZ2RwIGRhdGFwcm90b2NvbCBsaWJyYXJ5Ci0JICBNYWRlIHByaXZhdGUgYW5kIG1vdmVkIHRvIGdkcCBwbHVnaW4gaW4gLWJhc2UgZm9yCi0JICB0aGUgdGltZSBiZWluZywgdW50aWwgd2UgZmlndXJlIG91dCB3aGF0IHdlIGRvIHdpdGgKLQkgIGdkcCBhbmQgMC4xMS4KLQotMjAxMS0xMi0yNSAyMTowMjo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSAgdGVzdHM6IGZpeCB1bnVzZWQtdmFyaWFibGUgY29tcGlsZXIgd2FybmluZwotCi0yMDExLTEyLTI1IDIxOjAxOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogdXBkYXRlIGV4cG9ydHMgZm9yIG5ldyBBUEkKLQotMjAxMS0xMi0yNSAyMDo0OTo0MSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1jb250cm9sbGVyLnR4dDoKLQkgIGRvY3M6IGFkZCB0aGUgc3RhcnQgb2YgYSBkZXNpZ24gZG9jdW1lbnQgZm9yIGNvbnRyb2xsZXIKLQotMjAxMS0xMi0yNSAxODo0OTowMSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBjb250cm9sbGVyOiBzcGxpdCBhbmQgY2xlYW51cCB0aGUgdGVzdHMKLQkgIFRoZSBjb250cm9sbGVyIG9iamVjdCB3YXMgb25jZSBjb3BpZWQgZnJvbSBidXp6dGFyZHMgdW5pdCB0ZXN0cy4gQ2hhbmdlCi0JICBUZXN0TW9ub1NvdXJjZSB0byBUZXN0T2JqIGFzIGl0IGlzIG5vdCBhIGZ1bGwgZmxlZGdlZCBlbGVtZW50LiBTcGxpdCB0aGUgdGVzdHMKLQkgIGludG8gYSBjb3JlIGFuZCBsaWJyYXJ5IHRlc3Qgc3VpdGUuCi0KLTIwMTEtMTItMjIgMjM6NDg6MzAgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuaDoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbHNvdXJjZS5oOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZXByaXZhdGUuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlcHJpdmF0ZS5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bGlic2NwcC5jYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbC1zb3VyY2VzLmM6Ci0JICBjb250cm9sbGVyOiBtb3ZlIEdWYWx1ZSBoYW5kbGluZyBmcm9tIGNvbnRyb2wtc291cmNlcyB0byAtYmluZGluZwotCSAgQ29udHJvbFNvdXJjZXMgYXJlIG5vdyBnZG91YmxlIGJhc2VkLiBBIGNvbnRyb2wgc291cmNlIGlzIG1hcHBlZCB0byBhCi0JICBwYXJ0aWN1bGxhciBHT2JqZWN0IHByb3BlcnR5IHVzaW5nIGEgQ29udHJvbEJpbmRpbmcuCi0KLTIwMTEtMTItMjAgMjI6MzY6MTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbGJpbmRpbmcuaDoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkgIGNvbnRyb2xsZXI6IG1vdmUgR3N0Q29udHJvbGxlZFByb3BlcnR5IGludG8gYSBzZXBhcmF0ZSBjbGFzcwotCSAgQWRkIGEgR3N0Q29udHJvbEJpbmRpbmcgY2xhc3MuIFRoaXMgaXMgYSBwcmVwYXJhdGlvbiBmb3IgbWFraW5nIHRoZQotCSAgY29udHJvbHNvdXJjZXMgZ2VuZXJhdGUgZG91YmxlIHZhbHVlZCBjb250cm9sIGN1cnZlcyBhbmQgZG8gdGhlIGdwYXJhbXNwZWMKLQkgIG1hcHBpbmcgaW4gdGhlIGNvbnRyb2wgYmluZGluZy4gTm93IHRoZSBBUEkgaW4gR3N0T2JqZWN0IGlzIGFnYWluIG1vc3RseQotCSAgZm9yIGNvbnZlbmllbmNlLgotCi0yMDExLTEyLTI1IDEyOjQ3OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYwotCi0yMDExLTEyLTI1IDEyOjM5OjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiByZXR1cm4gYW55IHJlbWFpbmluZyBkYXRhIG9uIEVPUyBiZWZvcmUgcmV0dXJuaW5nIEZMT1dfVU5FWFBFQ1RFRAotCi0yMDExLTEyLTI1IDEyOjI5OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiBtaW5vciBjb3NtZXRpYyBjaGFuZ2VzCi0JICBSZW5hbWUgd29mZnNldCB2YXJpYWJsZSwgbWFpbnRhaW4gc2VwYXJhdGUgYnl0ZXNfcmVhZCBpbiBhZGRpdGlvbgotCSAgdG8gbGVuZ3RoIHZhcmlhYmxlLgotCi0yMDExLTEyLTI1IDEyOjEzOjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkgIGNvbGxlY3RwYWRzMjogZml4IHVwIGNvbXBpbGF0aW9uIGFmdGVyIG1lcmdlCi0KLTIwMTEtMTItMjUgMTE6NTg6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmMKLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYwotCSAgRGl0IG5vdCBtZXJnZSBjb250cm9sbGVyIG9yIGJhc2V0cmFuc2Zvcm0gY2hhbmdlcy4KLQotMjAxMS0xMi0yNCAxNDo1OToxNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmctdG8tMC4xMQotCSAgVXBkYXRlIGdzdF9wYWRfZ2V0X2NhcHMgLT4gZ3N0X3BhZF9xdWVyeV9jYXBzIGNoYW5nZQotCi0yMDExLTEyLTIzIDE1OjM3OjQ1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkgIGJ1ZmZlcnBvb2w6IGNsZWFudXAgbWV0YWRhdGEgaW4gcmVzZXRfYnVmZmVyCi0JICBVc2UgdGhlIHJlc2V0X2J1ZmZlciB2bWV0aG9kIHRvIHJlbW92ZSB0aGUgdW5wb29sZWQgbWV0YWRhdGEgZnJvbSB0aGUgYnVmZmVyLgotCi0yMDExLTEyLTIyIDE2OjAwOjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZjogdXBkYXRlIGZvciBuZXcgc3ltYm9scwotCi0yMDExLTEyLTIyIDE1OjU1OjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogaGFuZGxlIG1ldGFkYXRhIGluIHRoZSBwb29sCi0JICBNYXJrIGFsbCBtZXRhZGF0YSBvbiB0aGUgYWxsb2NhdGVkIGJ1ZmZlcnMgd2l0aCBhIFBPT0xFRCBmbGFnLiBXaGVuIGEgYnVmZmVyCi0JICByZXR1cm5zIHRvIHRoZSBwb29sLCByZW1vdmUgYWxsIG1ldGFkYXRhIHRoYXQgZGlkIG5vdCBoYXZlIHRoZSBQT09MRUQgZmxhZy4gVGhpcwotCSAgbWFrZXMgc3VyZSB0aGF0IHdlIG5ldmVyIGxlYXZlIHVua25vd24gbWV0YWRhdGEgdG8gdGhlIGJ1ZmZlcnMgaW4gdGhlIHBvb2wuCi0KLTIwMTEtMTItMjIgMTU6NTQ6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogYWRkIGZvcmVhY2ggZnVuY3Rpb24gZm9yIHRoZSBtZXRhZGF0YQotCi0yMDExLTEyLTIyIDE1OjUzOjE5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgYnVmZmVybGlzdDogc21hbGwgZG9jIGZpeAotCi0yMDExLTEyLTIyIDE1OjUyOjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSAgbWV0YTogYWRkIG1ldGFkYXRhIGZsYWdzCi0JICBBZGQgbWV0YWRhdGEgZmxhZ3Mgc28gdGhhdCB3ZSBjYW4gc2V0IGV4dHJhIHByb3BlcnRpZXMgb2YgdGhlIG1ldGFkYXRhCi0KLTIwMTEtMTItMDIgMTQ6MTA6MzIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIHBpcGVsaW5lOiBvbmx5IGhhdmUgYSB0b3AtbGV2ZWwgcGlwZWxpbmUgZG8gcGlwZWxpbmUgbWFuYWdlbWVudAotCSAgRml4ZXMgIzY2NTM5MC4KLQotMjAxMS0xMi0yMiAxMTowODo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIGNvbnRyb2xsZXI6IGZpeCBHVHlwZSBuYW1lIG9mIGludGVycG9sYXRpb24gbW9kZSBlbnVtCi0KLTIwMTEtMTItMjEgMTE6MTM6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmOiB1cGRhdGUKLQotMjAxMS0xMi0yMSAxMTowODozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JICBjYXBzOiByZW5hbWUgdmFyaWFibGUgZm9yIGNvbnNpc3RlbmN5Ci0JICBSZW5hbWUgdGhlIHZhcmlhYmxlIGZvciBHU1RfQ0FQU19OT05FIHRvIF9nc3RfY2Fwc19ub25lIGZvciBjb25zaXN0ZW5jeSBhbmQgdG8KLQkgIGhpZSB0aGUgZmFjdCB0aGF0IE5PTkUgY2FwcyBhcmUgYWxzbyBhY2NpZGVudGFsbHkgZW1wdHkgY2Fwcy4KLQotMjAxMS0xMi0xOSAxNDoyNzo0NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogSWYgdGhlIGZpbHRlcmVkIHBlZXIgY2FwcyBhcmUgYWxyZWFkeSBlbXB0eSBlcnJvciBvdXQgZWFybHkKLQotMjAxMS0xMi0yMCAxMzoyMTozNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZWY6IHVwZGF0ZSBkZWZzCi0KLTIwMTEtMTItMjAgMTM6MTQ6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSAgY2FwczogYWRkIEFOWSBhbmQgRU1QVFkgc2luZ2xldG9ucwotCSAgQWRkIGEgc2luZ2xldG9uIGZvciBBTlkgYW5kIEVNUFRZIGNhcHMgYW5kIG1ha2UgdGhlIEdTVF9DQVBTX0FOWSBhbmQKLQkgIEdTVF9DQVBTX05PTkUgcG9pbnQgdG8gdGhlbS4gVGhpcyBtYWtlcyB0aGUgQVBJIG1vcmUgY29uc2lzdGVudCBub3cKLQkgIHRoYXQgdGhlIG1hY3JvIGRvZXMgbm90IG1hZ2ljYWxseSBjcmVhdGUgYSByZWYuIEl0IGFsc28gc29sdmVzIHNvbWUgbGVha3MgaW4KLQkgIHBsYWNlcyB3aGVyZSB0aGUgbWFjcm8gd2FzIHVzZWQgdG8gcmVnaXN0ZXIgYSBwYWR0ZW1wbGF0ZS4KLQotMjAxMS0xMi0yMCAxMzoxMzowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHR5cGVmaW5kLmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuaDoKLQkgIHJlbW92ZSBjb25zdCBpbiBnc3RfdHlwZV9maW5kX3JlZ2lzdGVyKCkKLQkgIFJlbW92ZSB0aGUgY29uc3QgZnJvbSB0aGUgR3N0Q2FwcyBpbiBnc3RfdHlwZV9maW5kX3JlZ2lzdGVyKCkgYmVjYXVzZSB0aGUKLQkgIGZ1bmN0aW9uIHRha2VzIGEgcmVmIHRvIHRoZSBjYXBzLgotCi0yMDExLTEyLTIwIDEyOjU5OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0Y29udHJvbGxlci5kZWY6Ci0JICBkZWZzOiB1cGRhdGUKLQotMjAxMS0xMi0yMCAxMTozODoxOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuYzoKLQkgIGNvbnRyb2xsZXI6IHJlbW92ZSB1bnVzZWQgcGFyZW50X2NsYXNzIHZhcnJpYWJsZSBmcm9tIGNvbnRyb2xzb3VyY2UKLQotMjAxMS0xMi0xOSAyMzozMjo1NyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDoKLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkgIGNvbnRyb2xsZXI6IGNsZWFudXAgaW50ZXJwb2xhdGlvbiBtb2RlcwotCSAgUmVtb3ZlIGRlcHJlY2F0ZWQvdW5pbXBsZW1lbnRlZCBtb2Rlcy4gVHVybiBpbnRlcnBvbGF0aW9uIG1vZGUgaW50byBhIGdvYmplY3QKLQkgIHByb3BlcnR5LiBVcGRhdGUgZG9jcyBhbmQgZXhhbXBsZXMuCi0KLTIwMTEtMTItMTkgMTE6MTM6NDUgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2Vwcml2YXRlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmg6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6Ci0JICBjb250cm9sc291cmNlczogcmVmYWN0b3IgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZQotCSAgTW92ZSBtb3N0IG9mIHRoZSBjb2RlIHRvIGEgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuIFNwbGl0IG91dCB0aGUgdHJpZ2dlcgotCSAgJ2ludGVycG9sYXRpb24gbW9kZScgdG8gYSBuZXcgY29udHJvbCBzb3VyY2UgY2xhc3MuIE1vdmUgdGVzdHMgYW5kIGV4YW1wbGVzIHRvCi0JICBuZXcgYXBpLiBVcGRhdGUgZG9jcy4KLQkgIEZpeGVzICM2MTAzMzgKLQotMjAxMS0xMi0xOSAyMjowMTowMiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6Ci0JICBjb250cm9sc291cmNlOiBjbGVhbiB1cCBsZm8gY29udHJvbCBzb3VyY2UKLQkgIFJlbW92ZSBwYXJlbnRfY2xhc3MgYW5kIHVzZSB2YXIgZnJvbSBHX0RFRklORV9UWVBFIG1hY3JvLiBSZW1vdmUgdW51c2VkIGRpc3Bvc2UKLQkgIGltcGxlbWVudGF0aW9uLgotCi0yMDExLTEyLTE5IDIwOjU3OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgd2luMzI6IGFkZCBuZXcgY29sbGVjdHBhZHMyIGZ1bmN0aW9uIHRvIC5kZWYgZmlsZQotCi0yMDExLTEyLTE2IDE3OjU5OjIyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmg6Ci0JICBjb2xsZWN0cGFkczI6IGFkZCBjb252ZW5pZW5jZSBjbGlwcGluZyBmdW5jdGlvbgotCSAgLi4uIHdoaWNoIGFsc28gY29udmVydHMgdG8gcnVubmluZyB0aW1lOyB1c2VmdWwgZm9yIHR5cGljYWwgbXV4ZXIuCi0KLTIwMTEtMTItMTkgMTc6Mzg6MTggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGRvIG5vdCBkZWxheSBzcGFyc2Ugc3RyZWFtIG5ld3NlZ21lbnQgdXBkYXRlcwotCi0yMDExLTEyLTE5IDE3OjAwOjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IG1ha2Ugc3ViY2xhc3NlcyBhZGQgb3RoZXIgZmxhZ3MKLQkgIEFkZCBHU1RfTUFQX0ZMQUdfTEFTVCBzbyB0aGF0IGltcGxlbWVudGF0aW9ucyBjYW4gYWRkIGFkZGl0aW9uYWwgZmxhZ3Mgd2hlbgotCSAgbWFwcGluZyBtZW1vcnkuCi0KLTIwMTEtMTItMTkgMTI6MzM6MTggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IHN1Z2dlc3Rpb24gY29tcGF0aWJsZSB3aXRoIHVwc3RyZWFtIGlzIG5vdCBtdWNoIG9mIGEgc3VnZ2VzdGlvbgotCSAgLi4uIGluIHRoYXQgdXBzdHJlYW0gaXMgYWxyZWFkeSBjb21wbHlpbmcgd2l0aCB0aGF0IHN1Z2dlc3Rpb24uCi0JICBGaXhlcyAjNjY2MTc0LgotCi0yMDExLTEyLTE1IDE0OjMxOjA1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkgIGNvbGxlY3RwYWRzMjogZGVsYXkgY29sbGVjdGluZyBidWZmZXIgaWYgYSBwYWQgbmV3bHkgc2V0IHdhaXRpbmcKLQkgIC4uLiBhcyBjb21tZW50ZWQ7IG1ha2UgY29kZSBjb3JyZXNwb25kIHRvIGl0IChhZ2FpbikuCi0KLTIwMTEtMTItMTUgMTY6MDY6MzAgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSAgY29udHJvbGxlcjogdXNlciB0aGUgcGFyZW50X2NsYXNzIHZhcnMgZnJvbSBHX0RFRklORV9UWVBFCi0KLTIwMTEtMTItMTQgMTI6MTM6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHBhZDogYWxsb3cgTlVMTCBhcyBmaWx0ZXIgY2FwcyBhcmd1bWVudCB3aXRoIHF1ZXJ5X2NhcHMoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjE1NAotCi0yMDExLTEyLTEyIDEzOjA1OjM2ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiBkbyBub3QgbWlzdGFrZSBzaG9ydCByZWFkcyBmb3IgRU9TCi0JICBXaGlsZSBsb2NhbCBmaWxlc3lzdGVtcyB3aWxsIHVzdWFsbHkgbm90IGNhdXNlIHNob3J0IHJlYWRzLAotCSAgdGhpcyBtYXkgaGFwcGVuIG9uIHNlZWthYmxlIGZpbGVzIG9uIHNvbWUgcmVtb3RlIGZpbGVzeXN0ZW1zLgotCSAgSW5zdGVhZCwgbG9vcCB0aWxsIHdlIGdldCB0aGUgcmVxdWVzdGVkIGFtb3VudCBvZiBkYXRhLCBvcgotCSAgYW4gYWN0dWFsIEVPUyAoaWUsIDAgYnl0ZXMpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NTkyMQotCi0yMDExLTExLTE0IDAyOjI2OjMxICswMTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBDbGVhciBxdWV1ZWQgZnJhbWVzIHdpdGggb3RoZXIgcXVldWVzCi0KLTIwMTEtMTItMTIgMTI6MTE6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgIGVsZW1lbnRmYWN0b3J5OiB1c2UgbmV3ICd0cmFuc2ZlciBmbG9hdGluZycgYW5ub3RhdGlvbiBmb3IgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCkKLQkgIFJlcXVpcmVzIGdvYmplY3QtaW50cm9zcGVjdGlvbiAxLjMxLjEgKG9sZGVyIHZlcnNpb25zIHdpbGwKLQkgIGVycm9yIG91dCB3aXRoIHRoYXQpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NDA5OQotCi0yMDExLTEyLTEyIDEyOjA5OjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vY3MucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vc3IucG86Ci0JICBwbzogdXBkYXRlIGxhbmd1YWdlcwotCi0yMDExLTEyLTEyIDEyOjAwOjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTItMTIgMTE6NTQ6NTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgotCSogZ3N0L2dsaWItY29tcGF0LmM6Ci0JICBnbGliLWNvbXBhdDogQWRkIGxpY2Vuc2UgYm9pbGVycGxhdGUgZm9yIExHUEwKLQotMjAxMS0xMi0xMCAwMToxNjowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby91ay5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTEtMTItMTAgMTE6MDg6MjIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogc2F5IHdlIGhhbmRsZSBSRUNPTkZJR1VSRSBldmVudAotCSAgV2UgaGFuZGxlIHRoZSBSRUNPTkZJR1VSRSBldmVudCBzbyByZXR1cm4gVFJVRSBmcm9tIHRoZSBldmVudCBoYW5kbGVyLgotCi0yMDExLTEyLTEwIDExOjA3OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGRvbid0IGZvcndhcmQgb24gTlVMTCBwYWRzCi0JICBUaGUgaXRlcmF0b3IgY2FuIHJldHVybiBOVUxMIGluIHNvbWUgY2FzZXMsIGF2b2lkIHB1c2hpbmcgb24gdGhvc2UKLQkgIE5VTEwgcGFkcy4KLQotMjAxMS0xMi0wNyAxNjowMTowNyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RwcmVzZXQuYzoKLQkqIGdzdC9nc3RwcmVzZXQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcHJlc2V0OiBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gc3BlY2lmeSBhbiBleHRyYSBwcmVzZXQgZGlyCi0JICBBbiBleHRyYSBhcHBsaWNhdGlvbiBwcmVzZXQgZGlyIGhlbHAgdG8gb3JnYW5pemUgcHJlc2V0cyBjcmVhdGVkIGZvciBzcGVjaWFsCi0JICBwdXJwb3Nlcy4gRml4ZXMgIzY2MDc2MAotCSAgQVBJOiBnc3RfcHJlc2V0X3NldF9hcHBfZGlyKCksIGdzdF9wcmVzZXRfZ2V0X2FwcF9kaXIoKQotCi0yMDExLTEyLTA5IDEwOjAxOjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IHN0b3Agd2hlbiBuZWdvdGlhdGlvbiBmYWlscwotCi0yMDExLTEyLTA4IDE3OjMyOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTItMDggMTg6MDA6MDAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEZpeCBjb2RlIHBhdGggdG8gY29tZSB1cCB3aXRoIHBvc3NpYmxlIGNhcHMgaWYgaW5jb21wYXRpYmxlIGNhcHMgYXJlIHByb3ZpZGVkIHRvIGJ1ZmZlcl9hbGxvYygpCi0JICBQcmV2aW91cyBjb2RlIGNvdWxkIGFsbW9zdCBuZXZlciB3b3JrIGFuZCB0aGlzIHNob3VsZCBiZSBzbGlnaHRseQotCSAgYmV0dGVyLgotCi0yMDExLTEyLTA4IDE3OjIxOjMwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBGYWxsIGJhY2sgdG8gdXBzdHJlYW0gcHJvdmlkZWQgY2FwcyBpZiBzdWdnZXN0ZWQgY2FwcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgc2lua3BhZAotCi0yMDExLTEyLTA4IDE3OjA3OjA1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBGYWxsIGJhY2sgdG8gdXBzdHJlYW0gcHJvdmlkZWQgY2FwcyBpZiBmaXhhdGlvbiBvZiBzdWdnZXN0ZWQgY2FwcyBmYWlsZWQKLQotMjAxMS0xMi0wOCAxNzowMjoyOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogUmVmYWN0b3IgZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYygpIGNvZGUKLQkgIERvbid0IGNoZWNrIGlmIHVwc3RyZWFtIHByb3ZpZGVkIGNhcHMgYXJlIGNvbXBhdGlibGUgd2l0aCB1cHN0cmVhbQotCSAgYW5kIGRvbid0IHRyeSB0byBmaXhhdGUgdGhlc2UgY2Fwcy4gVGhleSBtdXN0IGJlIGZpeGF0ZWQgaW4gYW55IGNhc2UuCi0KLTIwMTEtMTItMDggMDA6NDk6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiB1cGRhdGUgLmRlZiBmaWxlcyBmb3IgbGF0ZXN0IEFQSSBhZGRpdGlvbnMKLQotMjAxMS0xMi0wOCAwMDo0Nzo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JICB0ZXN0czogZml4IHVwIHNlbGVjdG9yIHRlc3QgYWZ0ZXIgbWVyZ2UKLQotMjAxMS0xMi0wOCAwMDozOToxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdGluZGV4ZmFjdG9yeS5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYwotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYwotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYwotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jCi0JICBOb3RlOiBkaWQgbm90IG1lcmdlIGFueSBvZiB0aGUgYmFzZXRyYW5zZm9ybSBjaGFuZ2VzIGZyb20gMC4xMC4KLQotMjAxMS0xMi0wNyAxNzo1Nzo0OSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGRvIG5vdCB1c2UgYSBieXRlIHZhbHVlIGluc3RlYWQgb2YgYSB0aW1lIHZhbHVlIHdoZW4gYmlzZWN0aW5nCi0JICBUaGlzIGZpeGVzIEZMQUMgc2Vla2luZyBvbiBzb21lIEZMQUMgZmlsZXMuCi0KLTIwMTEtMTItMDcgMTE6MDQ6NDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSAgc2VsZWN0b3I6IFB1c2ggbmV3c2VnbWVudCBldmVudHMgYmVmb3JlIGFueSBidWZmZXJzIGFyZSBwdXNoZWQgaW4gdGhlIHVuaXQgdGVzdAotCi0yMDExLTEyLTA3IDExOjAxOjQ5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBEb24ndCBzZW5kIGEgTkVXU0VHTUVOVCBldmVudCBpZiBhIGJ1ZmZlciBhcnJpdmVkIGJlZm9yZSB0aGUgc2VnbWVudCB3YXMgY29uZmlndXJlZAotCi0yMDExLTEyLTA3IDExOjAxOjMxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0c2VsZWN0b3I6IERvbid0IHNlbmQgbGFzdCBzZWdtZW50L2J1ZmZlciB3aGVuIG5vIHNlZ21lbnQgd2FzIGNvbmZpZ3VyZWQgeWV0Ci0KLTIwMTEtMTItMDcgMDk6NTA6NDAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IElmIHN1Z2dlc3RlZCBjYXBzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHVwc3RyZWFtIHRyeSB0byBjb21lIHVwIHdpdGggY29tcGF0aWJsZSBjYXBzCi0JICBGaXhlcyBidWcgIzY2MjE5OS4KLQotMjAxMS0xMi0wNiAyMzo1Mjo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzoKLQkgIGluZGV4ZmFjdG9yeTogZml4IG1lbW9yeSBsZWFrCi0JICBJbnRyb2R1Y2VkIGJ5IGNvbW1pdCBiZDMwMmJiNiBwbHVnaW5mZWF0dXJlOiBhdm9pZCBkdXBsaWNhdGluZyBmZWF0dXJlLT5uYW1lCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU5NDY2Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1NzAzCi0KLTIwMTEtMTItMDYgMTg6MDk6MTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogcHV0IG5ldyBldmVudCBwcm9iZSB0eXBlIG5leHQgdG8gb3RoZXIgZXZlbnQgdHlwZXMKLQotMjAxMS0xMi0wNSAyMToyMDo1MiArMDEwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgQWRkIEdTVF9QQURfUFJPQkVfVFlQRV9IQU5ETEVfRkxVU0gKLQotMjAxMS0xMi0wNiAxNDo1NToxNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkgIGZha2VzaW5rOiBNYWtlIGV2ZW50L2J1ZmZlciB2ZXJib3NlIG91dHB1dCBjb25zaXN0ZW50IHdpdGggaWRlbnRpdHkKLQotMjAxMS0xMi0wNiAxNDo1NToxMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5OiBQcmludCBidWZmZXIgZmxhZ3MgaW4gdGhlIHZlcmJvc2Ugb3V0cHV0Ci0KLTIwMTEtMTItMDYgMTQ6NTM6NDcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkgIGZha2VzcmM6IE1ha2UgZXZlbnQvYnVmZmVyIHZlcmJvc2Ugb3V0cHV0IGNvbnNpc3RlbnQgd2l0aCBpZGVudGl0eSBhbmQgcHJpbnQgYnVmZmVyIGZsYWdzCi0KLTIwMTEtMTItMDYgMTQ6NDY6NDYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHRlc3RzOiBkb24ndCBpbmNsdWRlIGdsaWIvZ3RocmVhZC5oIGRpcmVjdGx5Ci0JICBUaGUgZ190aHJlYWQgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgYWZ0ZXIgaW5jbHVkaW5nIGdsaWIuaCBhcyBwZXIgZG9jcy4KLQotMjAxMS0xMi0wNiAxNDoyMzozOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBjb250cm9sbGVyOiBwb3J0IHRoZSB0ZXN0IHRvIG5ldyBhcGkgYXMgd2VsbAotCi0yMDExLTEyLTA2IDE0OjIzOjEyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y29udHJvbHNvdXJjZS5jOgotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuaDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkgIGNvbnRyb2xsZXI6IGZpeCBncG9pbnRlciB2cy4gZ3BvaW50ZXIqIG1lc3MgdXAKLQotMjAxMS0xMi0wNiAxNDoyNDoxNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiByZW1vdmUgR1NUX0ZMT1dfUkVTRU5ECi0JICBJdCBpcyB1bnVzZWQgYW5kIHVuZGVmaW5lZC4KLQotMjAxMS0xMi0wNiAxNDowMTo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgYmFzZXNyYzogYWRkIGFzeW5jIHN0YXJ0IG9wdGlvbgotCSAgQWRkIGEgbWV0aG9kIHRvIGVuYWJsZSBhc3luYyBzdGFydCBiZWhhdmlvdXIuIFRoZSBzdWJjbGFzcyBjYW4gdGhlbiBjb21wbGV0ZSB0aGUKLQkgIHN0YXJ0IG9wZXJhdGlvbiBmcm9tIGFueSBvdGhlciB0aHJlYWQgYnkgY2FsaW5nIGdzdF9iYXNlX3NyY19zdGFydF9jb21wbGV0ZSgpLgotCSAgVGhlIGJhc2UgY2xhc3MgY2FuIHdhaXQgZm9yIHRoZSBzdGFydCB0byBjb21wbGV0ZSB3aXRoCi0JICBnc3RfYmFzZV9zcmNfc3RhcnRfd2FpdCgpLgotCi0yMDExLTEyLTA2IDEzOjU4OjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkgIGZpeCBjb21waWxhdGlvbgotCi0yMDExLTEyLTA2IDEzOjQ3OjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IGNsZWFudXAgZXJyb3IgcGF0aAotCi0yMDExLTEyLTA2IDEzOjM5OjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgIGZpeCBjb21waWxhdGlvbgotCi0yMDExLTEyLTA2IDA4OjQ4OjU3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBjb250cm9sbGVyOiB1c2UgX09CSkVDVCBsb2dnaW5nIHZhcmlhbnRzIG1vcmUKLQotMjAxMS0xMi0wNiAwODozNTo1NyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbHNvdXJjZS5oOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSAgY29udHJvbGxlcjogcmVtb3ZlIEdzdFZhbHVlQXJyYXkKLQkgIEluc3RlYWQgcGFzcyB0aGUgdmFsdWVzIGFzIGFyZ3VtZW50cy4gVGhpcyBzaW1wbGlmaWVzIHRoYXQgY29kZSBhbmQgaGVscHMKLQkgIGJpbmRpbmdzLgotCi0yMDExLTEyLTA2IDA4OjM1OjEwICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSAgY29udHJvbGxlcjogcmVtb3ZlIGdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5cwotCSAgT25lIGNhbiBlYXNpbGx5IGxvb3Agb3ZlciB0aGUgY29udHJvbGxlZCBwcm9wZXJ0aWVzIG1hbnVhbGx5LiBUaGlzIGlzIHN0ZXAgMSBpbgotCSAgcmVtb3ZpbmcgR3N0VmFsdWVBcnJheS4KLQotMjAxMS0xMi0wNCAwNzozMzozMiArMDEwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgY29ycmVjdCByZXR1cm4gdmFsdWUgaW4gZ3N0X3B1c2hfc3RpY2t5Ci0KLTIwMTEtMTItMDUgMTE6MDc6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIG1ha2Ugc29tZSBtYWNyb3MgaW50byBpbmxpbmUgZnVuY3Rpb25zCi0KLTIwMTEtMTItMDUgMTA6MjQ6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkgIG1ha2Ugc29tZSBtb3JlIG1hY3JvcyBhcyBpbmxpbmUgZnVuY3Rpb25zCi0JICBNYWtlIHNvbWUgbWFjcm9zIGFzIGlubGluZSBmdW5jdGlvbnMgZm9yIGFkZGVkIHR5cGUgY2hlY2tpbmcuCi0JICBVU2UgbmV3IGdzdF9jYXBzX3Rha2UoKSBpbiB0eXBlZmluZAotCi0yMDExLTEyLTA1IDEwOjIzOjA0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogcmVtb3ZlIHNvbWUgb2xkIG1ldGhvZHMKLQotMjAxMS0xMi0wNCAyMToxOTowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBjaGVjazogYWxsb3cgbm9uLWpvaW5hYmxlIHRocmVhZHMgaW4gcHJpdmF0ZSBnX3RocmVhZF9jcmVhdGUoKSBjb3B5Ci0JICBMb29rcyBsaWtlIHNvbWUgdGVzdHMgdXNlIG5vbi1qb2luYWJsZSB0aHJlYWRzIGFmdGVyIGFsbC4KLQotMjAxMS0xMi0wNCAxNTo0MjowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiByZW1vdmUgcmVtb3ZlZCB0YWcgbGlzdCBmdW5jdGlvbnMgZnJvbSBkb2NzIGFzIHdlbGwKLQotMjAxMS0xMi0wNCAxNTozODowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdG9iamVjdC5oCi0JICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYwotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jCi0JICB0b29scy9nc3QteG1saW5zcGVjdC5jCi0KLTIwMTEtMTItMDQgMTQ6Mzg6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBTdXBwcmVzcyBkZXByZWNhdGlvbiB3YXJuaW5ncyBpbiBzZWxlY3RlZCBmaWxlcywgZm9yIGdfc3RhdGljX3JlY19tdXRleF8qIG1vc3RseQotCSAgR1N0YXRpY1JlY011dGV4IGlzIHBhcnQgb2Ygb3VyIEFQSS9BQkksIG5vdCBtdWNoIHdlIGNhbiBkbyBoZXJlIGluIDAuMTAuCi0KLTIwMTEtMTItMDQgMTM6MzU6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICBXb3JrIGFyb3VuZCBkZXByZWNhdGVkIHRocmVhZCBBUEkgaW4gZ2xpYiBtYXN0ZXIKLQkgIEFkZCBwcml2YXRlIHJlcGxhY2VtZW50cyBmb3IgZGVwcmVjYXRlZCBmdW5jdGlvbnMgc3VjaCBhcwotCSAgZ19tdXRleF9uZXcoKSwgZ19tdXRleF9mcmVlKCksIGdfY29uZF9uZXcoKSBldGMuLCBtb3N0bHkKLQkgIHRvIGF2b2lkIHRoZSBkZXByZWNhdGlvbiB3YXJuaW5ncy4gV2UgY2FuJ3QgY2hhbmdlIG1vc3Qgb2YKLQkgIHRoZXNlIGluIDAuMTAgYmVjYXVzZSB0aGV5J3JlIHBhcnQgb2Ygb3VyIEFQSSBhbmQgQUJJLgotCi0yMDExLTEyLTA0IDEzOjA5OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9nc3RidWZmZXJzdHJlc3MuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0cG9sbHN0cmVzcy5jOgotCSAgYmVuY2htYXJrczogZ190aHJlYWRfY3JlYXRlKCkgaXMgZGVwcmVjYXRlZCBpbiBHTGliIG1hc3RlciwgdXNlIGdfdGhyZWFkX3RyeV9uZXcoKSBpbnN0ZWFkCi0KLTIwMTEtMTItMDQgMTM6MDQ6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIG5ldDogaW5pdGlhbGlzZSBHRXJyb3IgdmFyaWFibGVzIHRvIE5VTEwKLQotMjAxMS0xMi0wNCAxMTo0MzoxMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogVXBkYXRlIGRlZnMgZmlsZXMKLQotMjAxMS0xMi0wNCAxMTo0MjozOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBnc3RxdWVyeTogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlCi0KLTIwMTEtMTItMDQgMTE6MzI6NTcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBnc3RzZWdtZW50OiBJbml0aWFsaXplIHdpdGggcHJvcGVyIHR5cGUKLQotMjAxMS0xMi0wMyAxNzo0MDo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyLmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6Ci0JKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSAgZ190aHJlYWRfaW5pdCgpIGlzIGRlcHJlY2F0ZWQgaW4gZ2xpYiBtYXN0ZXIKLQkgIEl0J3Mgbm90IG5lZWRlZCBhbnkgbG9uZ2VyLgotCi0yMDExLTEyLTAzIDE2OjAyOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSAgdGFnc2V0dGVyOiB1cGRhdGUgZm9yIHRocmVhZCBBUEkgZGVwcmVjYXRpb25zIGluIGdsaWIgbWFzdGVyCi0KLTIwMTEtMTItMDMgMTU6MzY6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgdGFnbGlzdDogdXBkYXRlIGZvciB0aHJlYWQgQVBJIGRlcHJlY2F0aW9ucyBpbiBnbGliIG1hc3RlcgotCi0yMDExLTEyLTAzIDE1OjE4OjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdsaXN0OiByZW1vdmUgZ3N0X3RhZ19saXN0X2dldF97Y2hhcix1Y2hhcn0KLQkgIFRob3NlIGFyZSB1bnVzZWQgYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkIGFueXdoZXJlIGFueXdheQotCSAgcmVhbGx5LgotCi0yMDExLTEyLTAzIDE0OjA2OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IHJlbW92ZSBzb21lIG1hY3JvcyB0aGF0IG5vIGxvbmdlciBleGlzdAotCi0yMDExLTEyLTAzIDEzOjU4OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JICBnX3RocmVhZF9jcmVhdGUoKSBpcyBkZXByZWNhdGVkIGluIEdMaWIgbWFzdGVyLCB1c2UgZ190aHJlYWRfdHJ5X25ldygpIGluc3RlYWQKLQotMjAxMS0xMi0wMyAwNzowNjoxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHVzZSBkdHMgYW5kIHB0cyBmb3Igc3luYwotCSAgRmlyc3QgdXNlIERUUywgdGhlbiBmYWxsIGJhY2sgdG8gUFRTIGZvciBzeW5jaHJvbml6YXRpb24uCi0KLTIwMTEtMTItMDMgMDc6MDE6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBzbWFsbCBjbGVhbnVwcwotCi0yMDExLTEyLTAzIDA2OjQ1OjI2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogbWVyZ2UgcHJlcm9sbCBmdW5jdGlvbnMKLQkgIElubGluZSBhIGZ1bmN0aW9uIHRoYXQgaXMgb25seSBjYWxsZWQgZnJvbSBvbmUgcGxhY2UgdG8gbWFrZSB0aGluZ3MgYSBsaXR0bGUKLQkgIGVhc2llciB0byBmb2xsb3cuCi0KLTIwMTEtMTItMDMgMDY6Mjk6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBtb3JlIGNsZWFudXBzCi0JICBEb24ndCBwYXNzIGFyb3VuZCB0aGUgb2JqZWN0IHR5cGUsIHdlIGNhbiBmaW5kIHRoYXQgdmVyeSBlZmZpY2llbnRseSBmcm9tIHRoZQotCSAgb2JqZWN0IGl0c2VsZiBub3cuCi0KLTIwMTEtMTItMDIgMjM6MTM6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBjbGVhbiB1cCBtZXRob2QgbmFtZXMKLQotMjAxMS0xMi0wMiAyMjo1MDo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IG1lcmdlIHJlbmRlcl9vYmplY3QgaW50byBjaGFpbgotCSAgTWVyZ2UgdGhlIHJlbmRlcl9vYmplY3QgY29kZSB3aXRoIHRoZSBjaGFpbiBtZXRob2QuIEl0IGlzIG9ubHkgY2FsbGVkIGZyb20gdGhlcmUKLQkgIGFuZCB0aGVyZSBhcmUgcXVpdGUgYSBmZXcgdmFyaWFibGVzIHRoYXQgY2FuIGJlIHJldXNlZCB0byBtYWtlcyB0aGluZ3MgbGVzcwotCSAgY29uZnVzaW5nLgotCi0yMDExLTEyLTAyIDIyOjM2OjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogcmVtb3ZlIG9ic29sZXRlIGNvZGUKLQkgIFJlbW92ZSBzb21lIG1vcmUgY29kZSBub3cgdGhhdCB0aGUgcmVuZGVyX29iamVjdCBldGhvZCBpcyBvbmx5Ci0JICBjYWxsZWQgd2l0aCBidWZmZXJzIG9yIGJ1ZmZlcmxzdHMuCi0KLTIwMTEtMTItMDIgMjI6MjA6MDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBiYXNlc2luazogY2xlYW4gdXAgZXZlbnQgaGFuZGxpbmcKLQkgIEFkZCBuZXcgd2FpdF9lb3Mgdm1ldGhvZCB0byB3YWl0IGZvciB0aGUgZW9zIHRpbWVvdXQgYmVmb3JlIHBvc3RpbmcgdGhlIEVPUwotCSAgbWVzc2FnZSBvbiB0aGUgYnVzLgotCSAgQWRkIGRlZmF1bHQgZXZlbnQgaGFuZGxlci4gTW92ZSB0aGUgZGVmYXVsdCBldmVudCBhY3Rpb25zIGluIHRoZXJlLiBDYWxsIHRoZQotCSAgZXZlbnQgdm1ldGhvZCBmcm9tIHRoZSBwYWQgZXZlbnQgaGFuZGxlci4gU3ViY2xhc3NlcyBhcmUgbm93IHN1cHBvc2VkIHRvIGNoYWluCi0JICB1cCB0byB0aGUgcGFyZW50IGV2ZW50IGhhbmRsZXIgb3IgdW5yZWYgdGhlIGV2ZW50IGFuZCBkbyB0aGVpciBvd24gdGhpbmcuCi0JICBBdm9pZCBwYXNzaW5nIHVudXNlZCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9ucy4KLQotMjAxMS0xMi0wMiAxMzoxOTozOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5OiB1bmxvY2sgY2xvY2sgd2FpdCB3aGVuIGFwcHJvcHJpYXRlCi0JICAuLi4gbm90YWJseSBGTFVTSCBhbmQgc3RhdGUgY2hhbmdlIHRvIFJFQURZLgotCi0yMDExLTEyLTAyIDEzOjM1OjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogc21hbGwgY2xlYW51cAotCSAgQXZvaWQgcGFzc2luZyBhcm91bmQgdGhlIHNlZ21lbnQuCi0KLTIwMTEtMTItMDIgMTM6Mjg6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIGJhc2VzaW5rOiByZW1vdmUgY2xpcF9zZWdtZW50Ci0JICBXZSBvbmx5IG5lZWQgb25lIHNlZ21lbnQgbm93IHRoYXQgdGhlIHByZXJvbGwgcXVldWUgaXMgZ29uZS4KLQotMjAxMS0xMi0wMiAxMjo0Mjo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IG1vcmUgY2xlYW51cHMKLQkgIFJlbW92ZSBzb21lIHVubmVlZGVkIGZ1bmN0aW9ucywgaW5saW5lIHRoZSBjb2RlLgotCSAgUmVtb3ZlIHRoZSBxdWV1ZV9vYmplY3QgZnVuY3Rpb25zLCB3ZSBjYW4gcHJvY2VlZCB3aXRoIHRoZSByZW5kZXJpbmcKLQkgIGltbWVkaWF0ZWx5LgotCi0yMDExLTEyLTAyIDEyOjIwOjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBiYXNlc2luazogcmVtb3ZlIG9ic29sZXRlIGNvZGUKLQkgIFJlbW92ZSB0aGUgcHJlcm9sbCBxdWV1ZSBhbmQgcHJvY2VlZCBkaXJlY3RseSB0byB0aGUgcmVuZGVyaW5nIG9mIG9iamVjdHMuCi0KLTIwMTEtMTItMDEgMjM6MzU6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RidXMuYwotCSAgZ3N0L2dzdGV2ZW50LmMKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCi0KLTIwMTEtMTItMDEgMTg6NTA6MzIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnbGlzdDogbWFrZSBzb21lIHRhZ3Mgb2YgdHlwZSBHc3RTYW1wbGUKLQkgIE1ha2UgdGhlIGltYWdlIGFuZCBhdHRhY2htZW50IHRhZ3Mgb2YgdHlwZSBHc3RTYW1wbGUgc28gdGhhdCB3ZSBjYW4gaW5jbHVkZQotCSAgZXh0cmEgY2FwcyBhbmQgaW5mbyBhbG9uZyB3aXRoIHRoZSBidWZmZXIgZGF0YS4KLQotMjAxMS0xMi0wMSAxODo0OTozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSogZ3N0L2dzdHNhbXBsZS5oOgotCSAgc2FtcGxlOiByZW1vdmUgY29uc3QKLQkgIFRoZSB3cml0YWJpbGl0eSBvZiB0aGUgc3RydWN0dXJlIGlzIGVuc3VyZWQgYnkgdGhlIHJlZmNvdW50IG9mIHRoZSBwYXJlbnQKLQkgIG1pbmlvYmplY3QgYW5kIHdlJ3JlIGZpbmUgaWYgdGhlIHBhcmVudCBpcyB3cml0YWJsZS4KLQotMjAxMS0xMi0wMSAxNjo0NjowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNpbmsuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGJhc2VzaW5rOiBsYXN0LWJ1ZmZlciAtPiBsYXN0LXNhbXBsZQotCSAgUmVuYW1lIHRoZSBsYXN0LWJ1ZmZlciBwcm9wZXJ0eSB0byBsYXN0LXNhbXBsZSBhbmQgbWFrZSBpdCByZXR1cm4gdGhlIG5ldwotCSAgR3N0U2FtcGxlIHR5cGUgc28gdGhhdCB3ZSBjYW4gaW5jbHVkZSBjYXBzIGFuZCB0aW1pbmcgaW5mbyBpbiBvbmUgbmljZSBidW5kbGUuCi0KLTIwMTEtMTItMDEgMTY6Mzc6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdHNhbXBsZS5jOgotCSogZ3N0L2dzdHNhbXBsZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBzYW1wbGU6IGFkZCBuZXcgc2FtcGxlIG1pbmlvYmplY3QKLQkgIEFkZCBhIG5ldyBzaW1wbGUgbWluaW9iamVjdCB0aGF0IGlzIGEgY29tYmluYXRpb24gb2YgYSBHc3RCdWZmZXIsIEdzdENhcHMsCi0JICBHc3RTZWdtZW50IGFuZCBvdGhlciBhcmJpdHJhcnkgaW5mbyBvcmdhbml6ZWQgaW4gYSBHc3RTdHJ1Y3R1cmUuIFRoaXMgb2JqZWN0IGNhbgotCSAgYmUgdXNlZCB0byBleGNoYW5nZSBzYW1wbGVzIGJldHdlZW4gYW4gZWxlbWVudCBhbmQgdGhlIGFwcGxpY2F0aW9uIG9yIGZvcgotCSAgc3RvcmluZyBhbGJ1bSBhcnQgaW4gdGFncyBldGMuCi0KLTIwMTEtMTItMDEgMTY6MjU6MDcgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogdXNlIEdTVF9NRVNTQUdFX1NPVVJDRV9OQU1FKCkgd2hpY2ggYWxzbyB0YWtlcyBjYXJlIG9mIHNyYz1OVUxMLgotCi0yMDExLTEyLTAxIDE1OjM1OjI2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuczogYWRkIHNvbWUgbW9yZSBkZWJ1ZwotCi0yMDExLTEyLTAxIDE1OjM1OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGFkZCBzb21lIG1vcmUgZGVidWcKLQotMjAxMS0xMi0wMSAxNTozNDowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBhZGQgY29weSBmbGFnIGZvciBtZXRhCi0JICBBZGQgYSBmbGFnIHRvIGNvbnRyb2wgaWYgdGhlIG1ldGEgc2hvdWxkIGJlIGNvcGllZCBvciBub3QgaW5zdGVhZCBvZiBhbHdheXMKLQkgIGNvcHlpbmcuCi0KLTIwMTEtMTEtMjkgMTk6MDg6NDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiByZW1vdmUgb2xkIHByb3BlcnR5Ci0KLTIwMTEtMTEtMzAgMTM6NTk6NDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEFsd2F5cyBpbnRlcnNlY3QgdGhlIHN1Z2dlc3RlZCBzaW5rIGNhcHMgd2l0aCB0aGUgcGVlciBjYXBzCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB3ZSBnZXQgY29ycmVjdCBhbmQgY29tcGxldGUgY2Fwcy4gVGhlIHN1Z2dlc3RlZCBjYXBzCi0JICBjb3VsZCBiZSBpbmNvbXBsZXRlLCBlLmcuIHZpZGVvL3gtcmF3LXJnYiB3aXRob3V0IGFueSBmaWVsZHMsIGFuZCBieQotCSAgaW50ZXJzZWN0aW5nIHdpdGggdGhlIHBlZXIgY2FwcyB3ZSBnZXQgc29tZXRoaW5nIHVzYWJsZS4KLQkgIEZpeGVzIGJ1ZyAjNjYyMTk5LgotCi0yMDExLTExLTMwIDEyOjM5OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGluZm86IG1vdmUgRklYTUUgbG9nIGxldmVsIGFmdGVyIFdBUk5JTkcKLQkgIFNvIGl0J3Mgbm93IEVSUk9SIDwgV0FSTklORyA8IEZJWE1FIDwgSU5GTyBhbmQgKjo1IGJlY29tZXMgKjo2LgotCi0yMDExLTExLTMwIDAwOjI0OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudDogd2FybiBhbmQgZmFpbCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ld3NlZ21lbnQgZXZlbnRzIGluIEdTVF9GT1JNQVRfVU5ERUZJTkVECi0KLTIwMTEtMTEtMjkgMTU6NTM6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjoga2VlcCB0aGUgZWxlbWVudCBmbGFncyB1cC10by1kYXRlCi0JICBLZWVwIHRoZSByZXF1aXJlL3Byb3ZpZGVfY2xvY2sgZmxhZ3MgdXAgdG8gZGF0ZS4KLQotMjAxMS0xMS0yOSAxMTo0NzozNCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBzb3VyY2UgYW5kIHNpbmsgcGFkcyBwcm94eSBjYXBzCi0KLTIwMTEtMTEtMjggMjE6MTU6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMS0yOCAxODoyMzo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIHVwZGF0ZSBmb3IgaW5kZXhhYmxlIGNoYW5nZQotCi0yMDExLTExLTI4IDE4OjEyOjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGVsZW1lbnQ6IGFkZCBpbmRleGFibGUgZmxhZwotCSAgUmVtb3ZlIHRoZSBpc19pbmRleGFibGUgbWV0aG9kIGNoZWNrIGFuZCB1c2UgYW4gZWxlbWVudCBmbGFnIHRvIGNoZWNrIGlmIHRoZQotCSAgZWxlbWVudCBjYW4gdXNlIGFuIGluZGV4LgotCi0yMDExLTExLTI4IDE3OjUwOjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZQotCi0yMDExLTExLTI4IDE3OjIyOjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBlbGVtZW50OiB1c2UgZmxhZ3MgZm9yIHJlcXVpcmUvcHJvdmlkZSBjbG9jawotCSAgUmVtb3ZlIHRoZSBfcmVxdWlyZS9fcHJvdmlkZV9jbG9jaygpIG1ldGhvZHMgYW5kIHVzZSBlbGVtZW50IGZsYWdzIHRvIG1hcmsKLQkgIGVsZW1lbnRzIGluc3RlYWQgb2YgbG9va2luZyBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZtZXRob2QuCi0KLTIwMTEtMTEtMjggMTY6NTQ6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICBlbGVtZW50OiBjbGVhbiB1cCBlbGVtZW50IGZsYWdzCi0JICBDbGVhbiB1cCB0aGUgZWxlbWVudCBmbGFncwotCi0yMDExLTExLTI4IDE1OjM1OjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBhZGQgc3RpY2t5IGN1c3RvbSBxdWFyawotCi0yMDExLTExLTI4IDE0OjI0OjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkgIGNhcHM6IF9DQVBTX0ZMQUdTXyAtPiBDQVBTX0ZMQUdfCi0KLTIwMTEtMTEtMjggMTI6MzA6MTUgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZ3N0ZWxlbWVudDogYWRkIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVfZnJvbV9zdGF0aWMKLQkgIFRoaXMgZnVuY3Rpb24gaGVscHMgZW5zdXJlIHRoZSBwYWQgdGVtcGxhdGUgaXMgdW5yZWZmZWQKLQkgIHdpdGhvdXQgaGF2aW5nIHRvIGNvbXBsaWNhdGUgdGhlIGNhbGxpbmcgY29kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjI2NjQKLQotMjAxMS0xMS0yOCAxMzo1NDo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBIYW5kbGUgc3RpY2t5IGV2ZW50IGVycm9ycwotCSAgVXNlIEdzdEZsb3dSZXR1cm4gdG8gaW50ZXJuYWxseSBwYXNzIGV2ZW50cyBiZXR3ZWVuIHBhZHMuCi0JICBXaGVuIHdlIHN0aWNreSBldmVudHMgY2F1c2UgYW4gZXJyb3IsIHRyYW5zbGF0ZSB0aGlzIGVycm9yIGludG8gYSBHc3RGbG93UmV0dXJuLgotCSAgQ2FwcyBldmVudHMgd2lsbCwgZm9yIGV4YW1wbGUsIGdlbmVyYXRlIGEgTk9UX05FR09USUFURUQgcmV0dXJuIHdoZW4gdGhlIGV2ZW50Ci0JICBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yLgotCSAgVGhpcyBhbGxvd3MgdXMgdGhlbiB0byByZWZ1c2Ugc2VuZGluZyBidWZmZXJzIGlmIG9uZSBvZiB0aGUgc3RpY2t5IGV2ZW50cyBpcwotCSAgcmVmdXNlZCBhbmQgZ2VuZXJhdGUgYSBjb3JyZWN0IGVycm9yIHJldHVybiB2YWx1ZS4KLQotMjAxMS0xMS0yOCAxMzo1MjowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYzoKLQkgIHRlc3RzOiBkb24ndCByZXR1cm4gRkFMU0UgZnJvbSBldmVudHMKLQkgIFJldHVybmluZyBGQUxTRSBmcm9tIHRoZSBldmVudCBoYW5kbGVyIHNodXRzIGRvd24gdGhlIHNlbmRlci4KLQotMjAxMS0xMS0yOCAxMzo1MToxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdDogZml4IHJlZmNvdW50IGVycm9yCi0KLTIwMTEtMTEtMjggMTE6MTU6MjcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWV0YS5jOgotCSAgZ3N0bWV0YTogU29tZSBtb3JlIGRvY3MKLQotMjAxMS0xMS0yOCAxMDo1NToyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBldmVudDogYWRkIGN1c3RvbSBkb3duc3RyZWFtIHN0aWNreSBldmVudAotCi0yMDExLTExLTI4IDAxOjEyOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZml4IHVwIGNvbW1lbnQgYWZ0ZXIgbWVyZ2UgZnJvbSAwLjEwCi0KLTIwMTEtMTEtMjggMDE6MTE6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMS0yOCAwMToxMDoyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCByZWZhY3RvcmluZyBvZiBkcmFpbmluZy1vbi1lb3MsIG11bmdlIGZsb3cgcmV0dXJuIHRvIEZMT1dfT0sKLQotMjAxMS0xMS0yOCAwMTowMDoyOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCB1cCBuZXcgYnVmZmVybGlzdCBjb2RlIGZvciAwLjExCi0KLTIwMTEtMTEtMjggMDA6NDA6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmMKLQotMjAxMS0xMS0wMyAxMDozNDo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGFkZCBidWZmZXJsaXN0IHN1cHBvcnQKLQkgIFdlIHdhbnQgdG8gbWFpbnRhaW4gYnVmZmVyIGxpc3RzIGlmIHBvc3NpYmxlLgotCi0yMDExLTExLTAzIDEzOjAyOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogc3BsaXQgb3V0IGRyYWluaW5nIG9mIHF1ZXVlIG9uIEZMT1dfVU5FWFBFQ1RFRCBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9uCi0KLTIwMTEtMTEtMDMgMDg6NTU6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBwYXNzIGl0ZW0gdHlwZSBlbnVtIHRvIF9lbnF1ZXVlIGluc3RlYWQgb2Ygc2ltcGxlIGlzYnVmZmVyIGJvb2xlYW4KLQkgIEF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IEdTVF9JU19FVkVOVCgpCi0KLTIwMTEtMTEtMjcgMjA6MzI6MTQgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmg6Ci0JICBjYXBzOiBmaXggY29tcGlsYXRpb24gd2FybmluZwotCSAgR1NUX1NUQVRJQ19DQVBTIGlzIG1pc3NpbmcgaW5pdGlhbGl6ZXIgZm9yIEdzdE1pbmlPYmplY3QncyBuX3dlYWtfcmVmcyBhbmQKLQkgIHdlYWtfcmVmcyByZXN1bHRpbmcgaW4gY29tcGlsYXRpb24gd2FybmluZyAobGx2bS1nY2MgIC1XYWxsKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NDkyNwotCi0yMDExLTExLTI3IDIyOjI2OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTEtMjcgMjA6MzY6MzEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkgIHdhcm5pbmdzOiBhdm9pZCBzZXQtYnV0LXVudXNlZCB3YXJuaW5ncyB3aXRoIGxvYWQtc2F2ZSBkaXNhYmxlZAotCi0yMDExLTExLTI2IDE3OjM0OjEyICswMTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggYnJva2VuIGRlZmF1bHQgY2FwcyBxdWVyeQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NDg4MAotCi0yMDExLTExLTI2IDE5OjUxOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTEtMjYgMTk6NDU6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXJpLmg6Ci0JICB1cmk6IGZpeCB3cm9uZyBHX0dOVUNfTUFMTE9DCi0JICBfZ2V0X3Byb3RvY29scygpIHBvaW50cyB0byBjb25zdCBtZW1vcnkgaW4gMC4xMAotCSAgZGVzcGl0ZSB0aGUgbm9uLWNvbnN0IHJldHVybiB2YWx1ZS4KLQotMjAxMS0xMS0yNiAxOTo0NDoyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdGJ1ZmZlci5oCi0JICBnc3QvZ3N0YnVmZmVybGlzdC5oCi0JICBnc3QvZ3N0Y2Fwcy5oCi0JICBnc3QvZ3N0ZGF0ZXRpbWUuaAotCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmgKLQkgIGdzdC9nc3RldmVudC5oCi0JICBnc3QvZ3N0Z2hvc3RwYWQuaAotCSAgZ3N0L2dzdGluZGV4ZmFjdG9yeS5oCi0JICBnc3QvZ3N0aXRlcmF0b3IuaAotCSAgZ3N0L2dzdG1lc3NhZ2UuaAotCSAgZ3N0L2dzdG1pbmlvYmplY3QuaAotCSAgZ3N0L2dzdHBpcGVsaW5lLmgKLQkgIGdzdC9nc3RxdWVyeS5oCi0JICBnc3QvZ3N0c2VnbWVudC5oCi0JICBnc3QvZ3N0c3RydWN0dXJlLmgKLQkgIGdzdC9nc3R0YWdsaXN0LmgKLQkgIGdzdC9nc3R1cmkuaAotCSAgZ3N0L2dzdHZhbHVlLmgKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmgKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaAotCSAgTm90ZTogY2FuJ3QgdXNlIEdfR05VQ19NQUxMT0Mgd2l0aCBHc3RDYXBzIHJldHVybgotCSAgdmFsdWVzIGluIDAuMTEgYmVjYXVzZSBvZiB0aGUgRU1QVFkrQU5ZIHNpbmdsZXRvbnMuCi0KLTIwMTEtMTEtMjYgMTg6NTg6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkgIGxpYnM6IHNwcmlua2xlIHNvbWUgR19HTlVDX01BTExPQwotCSAgTWF5YmUgZ2NjIGNhbiBkbyBzb21ldGhpbmcgY2xldmVyIHdpdGggdGhhdCwgb3IgYXQgbGVhc3QKLQkgIHdhcm4gdXMgaWYgd2UgZG9uJ3Qgc2F2ZSB0aGUgcmV0dXJuIHZhbHVlIHNvbWV3aGVyZS4KLQotMjAxMS0xMS0yNiAxODo1Nzo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5oOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuaDoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKLQkqIGdzdC9nc3RpbmRleGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RpdGVyYXRvci5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkqIGdzdC9nc3RwYXJhbXNwZWNzLmg6Ci0JKiBnc3QvZ3N0cGFyc2UuaDoKLQkqIGdzdC9nc3RwaXBlbGluZS5oOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIGdzdC9nc3Rwb2xsLmg6Ci0JKiBnc3QvZ3N0cHJlc2V0Lmg6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSogZ3N0L2dzdHVyaS5oOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JICBnc3Q6IHNwcmlua2xlIHNvbWUgR19HTlVDX01BTExPQwotCSAgTWF5YmUgZ2NjIGNhbiBkbyBzb21ldGhpbmcgY2xldmVyIHdpdGggdGhhdCwgb3IgYXQgbGVhc3QKLQkgIHdhcm4gdXMgaWYgd2UgZG9uJ3Qgc2F2ZSB0aGUgcmV0dXJuIHZhbHVlIHNvbWV3aGVyZS4KLQotMjAxMS0xMS0yNSAyMzo1NDo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTExLTI1IDIzOjE1OjIzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogdXBkYXRlIHBvcnRpbmcgZG9jcy4KLQotMjAxMS0xMS0xNiAwMTowNDo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGJ1ZmZlcjogYWRkIGdzdF9idWZmZXJfe3NldCxnZXR9X3FkYXRhKCkKLQkgIEFsbG93cyBwZW9wbGUvdXMgdG8gYXR0YWNoIGFyYml0cmFyeSBtZXRhZGF0YSB0byBidWZmZXJzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NDcyMAotCSAgQVBJOiBnc3RfYnVmZmVyX3NldF9xZGF0YSgpCi0JICBBUEk6IGdldF9idWZmZXJfZ2V0X3FkYXRhKCkKLQotMjAxMS0xMS0yNSAwNzoxMToyNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBmaXggYmxvY2tpbmcgcHJvYmUgZW1pc3Npb24KLQkgIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBibG9ja2luZyBwcm9iZSwgb25seSB0aGVuIGNoZWNrIGlmIG9uZSB0aGUKLQkgIGJsb2NraW5nIGZsYWdzIG9mIHRoZSBob29rIG1hdGNoZXMuCi0JICBBZGQgc29tZSBtb3JlIGRlYnVnLgotCSAgTWFrZSB0aGUgcGFkIHVuaXQgdGVzdCBsZXNzIHJhY3kuCi0KLTIwMTEtMTEtMjQgMTc6NDc6MDkgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIEFkZCB0ZXN0IGZvciBQQURfUFJPQkVfVFlQRV9CTE9DSyBhbmQgUEFEX1BST0JFX1RZUEVfQkxPQ0tJTkcKLQotMjAxMS0xMS0yNSAwNTo1NDowOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogZml4IGRlYnVnIG9mIHF1ZXJ5IHJlc3VsdAotCi0yMDExLTExLTI0IDIyOjUyOjE5ICswMTAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBmaXggdHlwbyBpbiBkb2MKLQkgIENhdXNlcyBhIHdhcm5pbmcgZnJvbSB0aGUgaW50cm9zcGVjdGlvbiBzY2FubmVyLgotCi0yMDExLTExLTI0IDIxOjM2OjEyICswMTAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNmaWx0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSAgY2hlY2s6IGRyb3AgY2FwcyBhcmd1bWVudCBmcm9tIGdzdF9jaGVja19zZXR1cF97c3JjLHNpbmt9X3BhZAotCSAgQ2FsbGluZyBzZXRfY2FwcyBhdCB0aGF0IHBvaW50IGlzIG5vdCB1c2VmdWwgaW4gMC4xMCAoRklYTUUgY29tbWVudCEpLCBhbmQgaW4KLQkgIDAuMTEgaXQgaXMgdG90YWxseSBwb2ludGxlc3M6IHRoZSBjYXBzIGV2ZW50IGRvZXNuJ3Qgc3RpY2sgdG8gYSBmbHVzaGluZyBwYWQuCi0KLTIwMTEtMTEtMjQgMTQ6MDc6MTQgKzAxMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZSBmb3IgYnl0ZV93cml0ZXJfcHV0X2J1ZmZlcgotCi0yMDExLTExLTI0IDExOjIzOjA3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdHBhZC5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jCi0KLTIwMTEtMTEtMjQgMTE6MTU6MjkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFJlbW92ZSBnX3dhcm5pbmcoKSBpZiBwYWQgYWNjZXB0ZWQgY2FwcyB0aGF0IGFyZSBub3QgYSBzdWJzZXQgb2YgdGhlIHBhZCBjYXBzCi0JICBUaGlzIGNoZWNrIGlzIGNvcnJlY3QgYnV0IHVuZm9ydHVuYXRlbHkgaXQncyBpbXBvc3NpYmxlIHRvIGltcGxlbWVudAotCSAgaW4gYSB0aHJlYWRzYWZlIHdheSBiZWNhdXNlIHRoZSBjYXBzIGNvdWxkIGhhdmUgY2hhbmdlZCBpbiB0aGUgbWVhbnRpbWUuCi0JICBGaXhlcyBidWcgIzY1OTYwNi4KLQotMjAxMS0xMC0wMyAxMjozNDoyMCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogY2hlY2sgZmlsbGVkIHN0YXRlIG9mIHF1ZXVlcyBldmVuIGlmIGFub3RoZXIgb25lIGlzIGVtcHR5Ci0JICBUaGlzIHdpbGwgYXZvaWQgYSBjYXNlIHdoZXJlIG92ZXJydW4gaXMgbmV2ZXIgc2lnbmFsbGVkIGlmIHNvbWUKLQkgIHN0cmVhbSBuZXZlciBwcm9kdWNlcyBhbnkgZGF0YSwgY2F1c2luZyBwbGF5YmluMiB0byBub3QgZW5kIHByZXJvbGwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYwNzc4Ci0KLTIwMTEtMTEtMjQgMDk6MzE6MTQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB0ZXN0czogQ2hlY2sgZm9yIGRhdGFmbG93IHdpdGggaW5jb21wYXRpYmxlIGNhcHMKLQkgIFRoaXMgdGVzdCBjdXJyZW50bHkgZmFpbHMsIGJ1dCBpcyB0aGVyZSB0byBlbnN1cmUgd2UgZml4IHRoaXMgaXNzdWUKLQkgIGFuZCBrZWVwIGl0IGZpeGVkLCBzaW5jZSBpdCBjb21wbGV0ZWx5IGJyZWFrcyBkZWxheWVkIG5lZ290aWF0aW9uCi0JICB1c2UtY2FzZXMuCi0JICBUaGlzIGJlaGF2aW91ciBzdGFydGVkIGJyZWFraW5nIHNpbmNlCi0JICBkZDY1YWFlOWExNzdmN2IxMWRjZWYwZjY5MGE3OGQ2OThmNjY3Y2Q0Ci0KLTIwMTEtMTEtMjQgMDk6MzE6MDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB0ZXN0czogQWRkIGNvbW1lbnRzIHRvIGdzdHBhZCB0ZXN0cwotCi0yMDExLTExLTI0IDA5OjMwOjE0ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdHM6IFJlbW92ZSAiI2lmIDAiIGJsb2NrIGZvciBiZWhhdmlvdXIgdGhhdCBub3cgd29ya3MKLQotMjAxMS0xMS0yNCAwOToyODozMiArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHRlc3RzOiBSZW1vdmUgY29tbWVudGVkIGJsb2NrCi0JICBUaGlzIGJlaGF2aW91ciBpcyBhY3R1YWxseSB0ZXN0ZWQgaW4gdGVzdF9wdXNoX3VubGlua2VkCi0KLTIwMTEtMTEtMjQgMDE6MDY6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgdG9vbHM6IG1ha2UgZ3N0LWluc3BlY3QgcHJpbnQgYSBuYXN0eSBkZWJ1ZyBtZXNzYWdlIGZvciBub24tZ3JhdGEgcHJvcGVydHkgdHlwZQotCSAgVHJ5IHRvIGVyYWRpY2F0ZSBwcm9wZXJ0aWVzIG9mIGxvbmcvdWxvbmcvY2hhci91Y2hhciB0eXBlLgotCi0yMDExLTExLTIzIDE3OjUwOjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICBldmVudDogYWRkIFNUSUNLWV9NVUxUWSBldmVudHMKLQkgIEFkZCBhIG5ldyBldmVudCBmbGFnIGZvciBzdGlja3kgZXZlbnRzIHNvIHRoYXQgbXVsdGlwbGUgZXZlbnRzIG9mIHRoYXQgdHlwZSBjYW4KLQkgIGJlIHN0b3JlZCBvbiBhIHBhZCBhdCB0aGUgc2FtZSB0aW1lLiBDaGFuZ2UgdGhlIF9nZXRfc3RpY2t5X2V2ZW50KCkgZnVuY3Rpb24gdG8KLQkgIGxvb3Agb3ZlciB0aGUgbXVsdGlwbGUgZXZlbnRzIG9mIGEgdHlwZS4KLQkgIENoYW5nZSB0aGUgZm9yZWFjaCBmdW5jdGlvbiB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlbW92ZWQgYW5kIG1vZGlmeSB0aGUgc3RpY2t5Ci0JICBldmVudHMgb24gYSBwYWQuCi0JICBVc2UgYW4gdmFyaWFibGUgc2l6ZSBhcnJheSBub3cgdG8gc3RvcmUgdGhlIGV2ZW50cy4gVGhpcyBjb3VsZCBsYXRlciBiZQotCSAgb3B0aW1pemVkIHNvbWUgbW9yZS4KLQotMjAxMS0xMS0yMyAxNzozOTo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBoYW5kbGUgTlVMTCBtZXNzYWdlIHNyYyBpbiBkZWJ1ZwotCi0yMDExLTExLTIzIDE3OjM4OjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgYnVmZmVybGlzdDogYXZvaWQgcmVhZGluZyBwYXN0IHRoZSBhcnJheQotCSAgV2hlbiB0aGUgZm9yZWFjaCBmdW5jdGlvbiB0b2xkIHVzIHRvIHJlbW92ZSB0aGUgYnVmZmVyIGZyb20gdGhlIGxpc3QsIGRlY3JlYXNlCi0JICB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciBlbHNlIHdlIG1pZ2h0IHJlYWQgcGFzdCB0aGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheS4KLQotMjAxMS0xMS0yMyAxMzo0Mjo1NiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IFJldHVybiB0ZW1wbGF0ZSBjYXBzIGluc3RlYWQgb2Ygb3RoZXIgc2lkZSdzIHBlZXIgY2FwcyBpZiBnZXRfc2lua19jYXBzIHZmdW5jIGlzIG5vdCBpbXBsZW1lbnRlZAotCSAgVXNpbmcgZ3N0X3BhZF9wcm94eV9nZXRfY2FwcygpIGJyZWFrcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZAotCSAgcGFyc2VycyBiZWNhdXNlIGl0IHdpbGwgcHJvcGFnYXRlIHRoZSBvdGhlciBzaWRlJ3MgZmllbGRzIGxpa2UgInBhcnNlZCIKLQkgIGFuZCAiZnJhbWVkIiBhbmQgYWxzbyBicmVha3MgcGFyc2VyL2NvbnZlcnRlcnMuCi0JICBGaXhlcyBidWcgIzY2NDIyMS4KLQotMjAxMS0xMS0yMyAxMTowMzoxOSArMDEwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKLQkgIGJ5dGV3cml0ZXI6IGFkZCBtZXRob2QgdG8gd3JpdGUgb3V0IGEgYnVmZmVyCi0JICBJbiAwLjEwLCB0aGlzIGNhbiBiZSBkb25lIHdpdGggYSBvbmUtbGluZXIgYnkgdXNpbmcgR1NUX0JVRkZFUl9EQVRBL1NJWkUgd2l0aAotCSAgcHV0X2RhdGEuIEEgMC4xMSB1c2VyIGhhcyB0byByZXNvcnQgdG8gZ3N0X2J1ZmZlcl9tYXAsIHdoaWNoIGlzIGxlc3MgY29udmVuaWVudAotCSAgYW5kIG1pZ2h0IHJlcXVpcmUgYSBtZW1jcHkgaW50ZXJuYWxseS4KLQkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXIoKQotCi0yMDExLTExLTIzIDA4OjE3OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHRha2UgcGVlcnBhZCBjb3JyZWN0bHkKLQkgIERvbid0IHRha2UgdGhlIHBlZXJwYWQgdG9vIGVhcmx5LCBpdCBtaWdodCBjaGFuZ2UgYmVjYXVzZSBvZiB0aGUKLQkgIHByb2Jlcy4KLQotMjAxMS0xMS0yMiAxODozMjo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiByZXdvcmsgc3RpY2t5IGV2ZW50cwotCSAgUmV3cml0ZSBzdGlja3kgZXZlbnRzLCB0cnlpbmcgdG8gbWFrZSBpdCBhIGJpdCBtb3JlIHNpbXBsZS4KLQkgIFdoZW4gc3RpY2t5IGV2ZW50cyBhcmUgcHVzaGVkIG9uIGEgc3JjcGFkLCBzdG9yZSB0aGVtIGluIHRoZSBzdGlja3kgZXZlbnQKLQkgIGFycmF5IGFuZCBtYXJrIHRoZSBldmVudCB3aXRoIHJlY2VpdmVkID0gRkFMU0UuCi0JICBXaGVuIHRoZSBzdGlja3kgZXZlbnQgaXMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHBlZXIgcGFkLCBtYWtlCi0JICByZWNlaXZlZCA9IFRSVUUuCi0JICBLZWVwIGEgUEVORElOR19FVkVOVFMgcGFkIGZsYWcgdGhhdCBpcyBzZXQgd2hlbiBvbmUgb2YgdGhlIGV2ZW50cyBpcyBpbgotCSAgdGhlIHJlY2VpdmVkID0gRkFMU0Ugc3RhdGUgZm9yIHNvbWUgcmVhc29uLgotCSAgd2hlbiBhY3RpdmF0aW5nIGEgc2lua3BhZCwgbWFyayBhbGwgZXZlbnRzIHJlY2VpdmVkID0gRkFMU0Ugb24gdGhlIHBlZXIKLQkgIHNyY3BhZC4KLQkgIFdoZW4gcHVzaGluZyBhIGJ1ZmZlciwgY2hlY2sgdGhlIFBFTkRJTkdfRVZFTlRTIGZsYWcgYW5kIGlmIGl0IGlzIHNldCwgcHVzaCBhbGwKLQkgIGV2ZW50cyB0byB0aGUgcGVlciBwYWQgZmlyc3QuCi0KLTIwMTEtMTEtMjIgMTg6MzI6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGFsc28gbGV0IGNhcHMgZXZlbnRzIGdvIHRocm91Z2gKLQotMjAxMS0xMS0yMiAxNjo0MzozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBhZGQgbmV3IGZsYWdzCi0KLTIwMTEtMTEtMjEgMTg6NTY6MTkgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBhZGFwdGVyOiBmaXggcmV0dXJuIHR5cGUgb2YgX21hcCgpIHRvIGdjb25zdHBvaW50ZXIKLQkgIEZpeGVzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIE9TWDoKLQkgIGdzdGFkYXB0ZXIuaDo4Mjogd2FybmluZzogdHlwZSBxdWFsaWZpZXJzIGlnbm9yZWQgb24gZnVuY3Rpb24gcmV0dXJuIHR5cGUKLQkgIGdzdGFkYXB0ZXIuYzo0MTI6IHdhcm5pbmc6IHR5cGUgcXVhbGlmaWVycyBpZ25vcmVkIG9uIGZ1bmN0aW9uIHJldHVybiB0eXBlCi0JICBjb25zdCBncG9pbnRlciBpcyBub3QgdGhlIHNhbWUgYXMgZ2NvbnN0cG9pbnRlciBvciBjb25zdCB2b2lkICouCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0NDkxCi0KLTIwMTEtMTEtMjIgMTI6NDY6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogdXBkYXRlIGRlZnMgZmlsZXMKLQotMjAxMS0xMS0yMiAxMjo0NTo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBwYWRkIHJldHVybiB2YWx1ZSBmcm9tIF9taW5pX29iamVjdF9yZXBsYWNlKCkKLQotMjAxMS0xMS0yMSAxODo1NjoxOSArMDEwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBGaXggcHJpbnRmIGZvcm1hdCBjb21waWxlciB3YXJuaW5ncyBvbiBPU1gvNjRiaXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjQ0OTEKLQotMjAxMS0xMS0yMSAxNzo0Njo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdHM6IGltcHJvdmUgcGFkIHRlc3RzCi0KLTIwMTEtMTEtMjEgMTc6NDM6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IGxvY2tpbmcgb3JkZXIgZXJyb3IKLQotMjAxMS0xMS0yMSAxNzo0MzowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogZml4IHByaW50IGZvcm1hdAotCi0yMDExLTExLTIxIDE1OjQ3OjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBBZGQgZGVzdHJveSBub3RpZnkgdG8gcGFkIGZ1bmN0aW9ucwotCSAgQWRkIF9mdWxsIHZhcmlhbnRzIG9mIHRoZSBwYWQgZnVuY3Rpb24gc2V0dGVycyB0aGF0IHRha2UgYSBkZXN0cm95IG5vdGlmeS4KLQkgIE1ha2Ugc29tZSBtYWNyb3MgdGhhdCBtYWtlIHRoZSBvbGQgbWV0aG9kIG5hbWUgcGFzcyBOVUxMIHRvIHRoaXMgbmV3Ci0JICBmdW5jdGlvbi4KLQotMjAxMS0xMS0yMSAxMzoyOTowNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSAgcGFkOiBNZXJnZSBwYWQgbW9kZSBhY3RpdmF0aW9uIGZ1bmN0aW9ucwotCSAgQWRkIHRoZSBwYWQgbW9kZSB0byB0aGUgYWN0aXZhdGUgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgZnVuY3Rpb24KLQkgIGZvciBhbGwgYWN0aXZhdGlvbiBtb2Rlcy4gVGhpcyBtYWtlcyB0aGUgY29yZSBsb2dpYyBzbWFsbGVyIGFuZCBhbGxvd3MgZm9yIHNvbWUKLQkgIGVsZW1lbnRzIHRvIG1ha2UgdGhlaXIgYWN0aXZhdGlvbiBjb2RlIGVhc2llci4gSXQgd291bGQgYWxsb3cgdXMgdG8gYWRkIG1vcmUKLQkgIHNjaGVkdWxpbmcgbW9kZXMgbGF0ZXIgd2l0aG91dCBoYXZpbmcgdG8gYWRkIG1vcmUgYWN0aXZhdGUgZnVuY3Rpb25zLgotCi0yMDExLTExLTE4IDE4OjA4OjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNjaGVkdWxpbmcudHh0OgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBkb2NzOiB1cGRhdGUgZGVzaWduIGRvYwotCSAgYWxzbyBmaXggZGVmYXVsdCBhbGlnbm1lbnQgdmFsdWUgKDAgPT0gbm8tYWxpZ25tZW50KQotCi0yMDExLTExLTE4IDE3OjI3OjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBxdWVyeTogaW1wcm92ZSBzY2hlZHVsaW5nIHF1ZXJ5Ci0JICBUdXJucyBzb21lIGJvb2xlYW4gYXJndW1lbnRzIGluIHRoZSBzY2hlZHVsaW5nIHF1ZXJ5IHRvIGZsYWdzLCB3aGljaCBhcmUgZWFzaWVyCi0JICB0byBleHRlbmQgYW5kIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byByZWFkLgotCSAgTWFrZSBleHRyYSBtZXRob2RzIGZvciBjb25maWd1cmluZyBhbmQgcXVlcnlpbmcgdGhlIHN1cHBvcnRlZCBzY2hlZHVsaW5nIG1vZGVzLgotCSAgVGhpcyBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gYWRkIG5ldyBtb2RlcyBsYXRlci4KLQotMjAxMS0xMS0xOCAxNDowODo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBxdWVyeTogbW92ZSBmbGFncyBjbG9zZXIgdG8gYnVmZmVyaW5nIHF1ZXJ5Ci0KLTIwMTEtMTEtMTggMTM6NDY6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgcGFkOiBhZGQgcGFyZW50IHRvIGFjdGl2YXRlIGZ1bmN0aW9ucwotCi0yMDExLTExLTE4IDEyOjM1OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JICBwYWQ6IGZpeCBzY2hlZHVsaW5nIG1vZGUgZW51bXMKLQkgIEdzdFBhZEFjdGl2YXRlTW9kZSAtPiBHc3RQYWRNb2RlCi0JICBHU1RfUEFEX0FDVElWQVRFXyogLT4gR1NUX1BBRF9NT0RFXyoKLQotMjAxMS0xMS0xNyAxNjoxNDozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBmaXggZm9yIG5ldyBnZXRyYW5nZSBtZXRob2Qgc2lnbmF0dXJlCi0JICBnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2VfZXh0IC0+IGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZQotCi0yMDExLTExLTE3IDEyOjQwOjQ1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOgotCSAgcGFkOiBhZGQgcGFyZW50IHRvIG90aGVyIGZ1bmN0aW9ucwotCSAgQWRkIHBhcmVudCB0byBjaGFpbiwgY2hhaW5fbGlzdCwgZ2V0cmFuZ2UgYW5kIGV2ZW50IGZ1bmN0aW9ucy4KLQotMjAxMS0xMS0xNyAwODoyMTowNSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBtb3ZlIGZpZWxkcyBvdXQgb2YgcmVzZXJ2ZWQgYW5kIHJlc3RvcmUgcGFkZGluZwotCSAgRG8gdGhlIDAuMTEgQUJJIGNoYW5nZXMuIEFkZCBleHRyYSBmaWVsZHMgZm9yIGRlc3Ryb3lfbm90aWZ5IGFuZCBkcm9wIHRoZSBxZGF0YQotCSAgaGFjay4gUmVuYW1lIF9hZGRfcGFkX2Z1bGwgdG8gX2FkZF9wYWQgYW5kIHJlbW92ZSB0aGUgb2xkIF9hZGRfcGFkLgotCi0yMDExLTExLTE2IDE3OjQ5OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIGFkZCBwYXJlbnQgdG8gaW50ZXJuYWwgbGlua3MKLQotMjAxMS0xMS0xNiAxNzoyMjo1NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSAgcGFkOiBhZGQgcGFyZW50IHRvIHRoZSBxdWVyeSBmdW5jdGlvbgotCi0yMDExLTExLTE2IDEyOjM2OjUxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgR3N0UGFkRmxhZ3M6IHJlbmFtZSBmbGFncyBHU1RfUEFEXyogLT4gR1NUX1BBRF9GTEFHXyoKLQotMjAxMS0xMS0xNiAxMjoxMDo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIHBsdWdpbnM6IHJlbW92ZSBvYnNvbGV0ZSBwYXJlbnQgY2hlY2tzCi0KLTIwMTEtMTEtMTYgMTI6MDg6MjIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGtlZXAgdGhlIHBhcmVudCBhbGl2ZSB3aGVuIHJlcXVlc3RlZAotCSAgQWRkIGEgbmV3IHBhZCBmbGFnIE5FRURfUEFSRU5UIHRoYXQgZW5zdXJlcyB0aGF0IHRoZSBwYXJlbnQgb2YgYSBwYWQgaXMKLQkgIHJlZmZlZCBhbmQgbm90IE5VTEwgd2hlbiB0aGUgZXZlbnQsIHF1ZXJ5IGFuZCBpbnRlcm5hbCBsaW5rcyBmdW5jdGlvbnMKLQkgIGFyZSBjYWxsZWQuCi0JICBXaGVuIGEgcGFkIGlzIGFkZGVkIHRvIGFuIGVsZW1lbnQgYXV0b21hdGljYWxseSBtYWtlIHN1cmUgdGhlIE5FRURfUEFSRU5UIGZsYWcKLQkgIGlzIGVuYWJsZWQuCi0KLTIwMTEtMTEtMTYgMTA6Mjk6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZG9uJ3QgcmVxdWlyZSBwYXJlbnQgZWxlbWVudCB0byBwcm94eQotCi0yMDExLTExLTE2IDEwOjE2OjU1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgdXBkYXRlIHBvcnRpbmcgZG9jCi0KLTIwMTEtMTEtMTUgMTg6MTY6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgcGFkOiBtb3ZlIHF1ZXJ5IGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0b2dldGhlcgotCSAgTW92ZSB0aGUgY2FwcyBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gdGhlIG90aGVyIHF1ZXJ5IGZ1bmN0aW9ucy4KLQotMjAxMS0xMS0xNSAxNzo1MDozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIF9xdWVyeV9wZWVyXyooKSAtPiBfcGVlcl9xdWVyeV8qKCkKLQotMjAxMS0xMS0xNSAxNzo0MDoxOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBfYWNjZXB0X2NhcHMoKSAtPiBfcXVlcnlfYWNjZXB0X2NhcHMoKQotCi0yMDExLTExLTE1IDE3OjExOjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKLQkgIF9wZWVyX2dldF9jYXBzKCkgLT4gcGVlcl9xdWVyeV9jYXBzKCkKLQotMjAxMS0xMS0xNSAxNjo0NjozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHBhZDogX2dldF9jYXBzKCkgLT4gX3F1ZXJ5X2NhcHMoKQotCi0yMDExLTExLTE1IDE2OjE2OjUzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBmaXggZG9jcwotCi0yMDExLTExLTE1IDE2OjEzOjU5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBmaXggdGhlIHByb3h5IGZ1bmN0aW9ucwotCSAgZml4IHRoZSBwcm94eSBmdW5jdGlvbnMgZm9yIHF1ZXJ5X2FjY2VwdF9jYXBzIGFuZCBxdWVyeV9jYXBzIHRvIHVzZSB0aGUgcGFkCi0JICBmb3J3YXJkIGhlbHBlciBmdW5jdGlvbnMgd2hpY2ggY29ycmVjdGx5IGZvcndhcmRzIG9uIHRoZSBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzLgotCi0yMDExLTExLTE1IDE2OjEzOjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGltcHJvdmUgc29tZSBmbGFnIG1hY3JvcwotCi0yMDExLTExLTE1IDE2OjEzOjE1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGZpeCBkZWJ1ZyBsaW5lCi0KLTIwMTEtMTEtMTUgMTE6MjA6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBwYWQ6IHJlbW92ZSBnZXRjYXBzIGFuZCB1c2UgY2FwcyBxdWVyeQotCSAgUmVtb3ZlIHRoZSBnZXRjYXBzIGZ1bmN0aW9uIG9uIHRoZSBwYWQgYW5kIHVzZSB0aGUgQ0FQUyBxdWVyeSBmb3IKLQkgIHRoZSBzYW1lIGVmZmVjdC4KLQkgIEFkZCBQUk9YWV9DQVBTIHRvIHRoZSBwYWQgZmxhZ3MuIFRoaXMgaW5zdHJ1Y3RzIHRoZSBkZWZhdWx0IGNhcHMgZXZlbnQgYW5kIHF1ZXJ5Ci0JICBoYW5kbGVycyB0byBwYXNzIG9uIHRoZSBDQVBTIHJlbGF0ZWQgcXVlcmllcyBhbmQgZXZlbnRzLiBUaGlzIHNpbXBsaWZpZXMgYSBsb3QKLQkgIG9mIGVsZW1lbnRzIHRoYXQgcGFzc3Ryb3VnaCBjYXBzIG5lZ290aWF0aW9uLgotCSAgTWFrZSB0d28gdXRpbGl0eSBmdW5jdGlvbnMgdG8gcHJveHkgY2FwcyBxdWVyaWVzIGFuZCBhZ2dyZWdhdGUgdGhlIHJlc3VsdC4gTmVlZHMKLQkgIHRvIHVzZSB0aGUgcGFkIGZvcndhcmQgZnVuY3Rpb24gaW5zdGVhZCBsYXRlci4KLQkgIE1ha2UgdGhlIF9xdWVyeV9wZWVyXyB1dGlsaXR5IGZ1bmN0aW9ucyB1c2UgdGhlIGdzdF9wYWRfcGVlcl9xdWVyeSgpIGZ1bmN0aW9uIHRvCi0JICBtYWtlIHN1cmUgdGhlIHByb2JlcyBhcmUgZW1pdGVkIHByb3Blcmx5LgotCi0yMDExLTExLTE0IDExOjI2OjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIHF1ZXJ5OiBhZGQgY2FwcyBxdWVyeQotCi0yMDExLTExLTE0IDA5OjU3OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBxdWVyeTogcmVtb3ZlIEdTVF9RVUVSWV9MQVNUCi0KLTIwMTEtMTEtMTQgMTA6Mjc6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBmaXggZG9jcwotCi0yMDExLTExLTEyIDEwOjI5OjMwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkgIGNvbnRyb2xsZXI6IHJlbW92ZSBmdW5jdGlvbnMgdG8gYWRkL3JlbW92ZSBjb250cm9sbGVkIHByb3BlcnRpZXMKLQkgIE1ha2UgdGhhdCBpbXBsaXppdCB3aXRoIGF0dGFjaGluZy9kZXRhY2hpbmcgY29udHJvbHNvdXJjZXMuIFRoaXMgaXMgYSBsb3QgZWFzaWVyCi0JICBhbmQgaGFzIGxlc3MgaW52YWxpZCBzdGF0ZSAoY29udHJvbGxlZCBwcm9wZXJ0eSB3aXRob3V0IGNvbnRyb2wgc291cmNlKS4KLQotMjAxMS0xMS0xMyAyMzoyNToyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBwbHVnaW5zLCB0b29sczogdXBkYXRlIGZvciBnZXRfcHJvdG9jb2xzKCkgcmV0dXJuIHZhbHVlIGNoYW5nZQotCi0yMDExLTExLTEzIDIzOjE0OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHVyaS5oOgotCSAgdXJpOiBjbGVhbiB1cCBoZWFkZXIgZmlsZXMKLQkgIFRhYnMgdG8gc3BhY2VzLgotCi0yMDExLTExLTEzIDIzOjA3OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkgIHVyaWhhbmRsZXI6IGZpeCByZXR1cm4gdHlwZSBvZiBnZXRfcHJvdG9jb2xzKCkKLQotMjAxMS0xMS0xMyAyMDo1NjowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0dXJpLmg6Ci0JICB1cmloYW5kbGVyOiBmaXggcmV0dXJuIHR5cGUgb2YgX2dldF91cmlfdHlwZSgpCi0JICBSZXR1cm4gYSBHc3RVUklUeXBlIGFuZCBub3QgYSBwbGFpbiBndWludC4KLQotMjAxMS0xMS0xMyAxNzo0NToxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6Ci0JICB0ZXN0czogdXBkYXRlIHVuaXQgdGVzdHMgZm9yIFVSSSBoYW5kbGVyIEFQSSBjaGFuZ2VzCi0KLTIwMTEtMTEtMTMgMTc6NDQ6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBlbGVtZW50czogdXBkYXRlIGZkICsgZmlsZSBzb3VyY2VzIGFuZCBzaW5rcyBmb3IgR3N0VXJpSGFuZGxlciBjaGFuZ2VzCi0KLTIwMTEtMTEtMTMgMTc6NDQ6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHVyaS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB1cmloYW5kbGVyOiBwYXNzIEdFcnJvciBhcmd1bWVudCB0byBnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSgpCi0JICBBbHNvIGxldCBnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSBjaGVjayBhbHJlYWR5IGlmIHRoZSBwcm90b2NvbAotCSAgaXMgc3VwcG9ydGVkLCBzbyB0aGF0IG5vdCBldmVyeSB1cmkgaGFuZGxlciBoYXMgdG8gZG8gdGhhdAotCSAgaXRzZWxmLgotCi0yMDExLTExLTEzIDE1OjUxOjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHVyaS5oOgotCSAgdXJpaGFuZGxlcjogbWFrZSBfZ2V0X3VyaSgpIHJldHVybiBhIGNvcHkKLQkgIEZvciB0aHJlYWQtc2FmZXR5LgotCi0yMDExLTExLTEzIDE1OjM3OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSAgdXJpaGFuZGxlcjogcmVtb3ZlICJuZXctdXJpIiBzaWduYWwKLQkgIE5vIG9uZSBidXQgZmlsZXNyYyB1c2VkIHRoYXQgQVBJLiBTaG91bGQgcHJvYmFibHkgYmUgcmVwbGFjZWQgYnkKLQkgIHJlcXVpcmluZyBhbiAidXJpIiBwcm9wZXJ0eSBpbnN0ZWFkLCBhbmQgdGhlbiBvYmplY3RzIGNhbiBkbyBhCi0JICBub3RpZnkgb24gdGhhdC4gQWxzbyByZW1vdmVkIGludGVyZmFjZSBzdHJ1Y3R1cmUgcGFkZGluZywgaXQncwotCSAgbm90IG5lZWRlZC4KLQotMjAxMS0xMS0xMyAxMzoyMzowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYwotCi0yMDExLTExLTEyIDE2OjQyOjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGdzdC1pbnNwZWN0OiBwcmludCBjdXJyZW50IHZhbHVlIGFzIGRlZmF1bHQgdmFsdWUKLQkgIEluc3RlYWQgb2YgcHJpbnRpbmcgc2VwYXJhdGUgJ0N1cnJlbnQnIGFuZCAnRGVmYXVsdCcgdmFsdWVzCi0JICAodGhlIGZvcm1lciBvYnRhaW5lZCB2aWEgZ19vYmplY3RfZ2V0KCkgYW5kIHRoZSBsYXR0ZXIgZnJvbQotCSAgdGhlIHByb3BlcnR5IEdQYXJhbVNwZWMpLCBzaW1wbHkgcHJpbnQgdGhlIEN1cnJlbnQgdmFsdWUgYXMKLQkgIHRoZSBEZWZhdWx0IHZhbHVlLiBUaGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbyBmb3IgYWxtb3N0Ci0JICBhbGwgZWxlbWVudHMgYW5kIGF2b2lkcyBjb25mdXNpb24gaWYgYSBzdWJjbGFzcyBvZiBhIGJhc2UKLQkgIGNsYXNzIGNob29zZXMgYSBkaWZmZXJlbnQgZGVmYXVsdCB0aGFuIHRoZSBiYXNlIGNsYXNzLgotCi0yMDExLTExLTEyIDE0OjU1OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIGdzdCwgY29udHJvbGxlcjogcmVwbGFjZSBnX2xpc3RfcHJlcGVuZCArIHJldmVyc2Ugd2l0aCBHUXVldWUKLQotMjAxMS0xMS0xMiAxNDowNDoxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGRvY3M6IGZpeCB0eXBvIGluIGJ1ZmZlciBkb2NzCi0KLTIwMTEtMTEtMTIgMDE6NTQ6NDQgKzAxMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogZml4IGNhcHMgdW5yZWYgaW4gdHJhbnNmb3JtX2NhcHMgZmlsdGVyIHN1YnNldCBjaGVjawotCSAgSSBkaWQgbm90IHRlc3QgdGhpcywgYnV0IHRoZSBjb2RlIGxvb2tlZCB2ZXJ5IHdyb25nLgotCi0yMDExLTExLTEyIDAxOjUxOjExICswMTAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBkbyBub3QgcmV0dXJuIGEgcmVmIGZyb20gcGFyc2VfYWNjZXB0X2NhcHMKLQkgIE1ha2VzIHRoaXMgZXhhY3RseSBsaWtlIGdzdF9ldmVudF9wYXJzZV9jYXBzLiBUaGlzIGlzIHdoYXQgY3VycmVudCBjb2RlCi0JICBleHBlY3RzLCBzbyBpdCBmaXhlcyBzb21lIGxlYWtzLgotCi0yMDExLTExLTExIDE3OjE3OjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci1kb2NzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3Lmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZXByaXZhdGUuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlcHJpdmF0ZS5oOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0Lmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6Ci0JICAuaDogZml4IGhlYWRlciBmaWxlcwotCSAgRW5zdXJlIGNvcnJlY3QgaW5kZW50YXRpb24gYW5kIHJldGFiCi0JICBNYWtlIHN1cmUgYWxsIHN0cnVjdHVyZSBoYXZlIHBhZGRpbmcKLQotMjAxMS0xMS0xMSAxNjo1Mjo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkqIGdzdC9nc3RidXMuaDoKLQkqIGdzdC9nc3RjaGlsZHByb3h5Lmg6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuaDoKLQkqIGdzdC9nc3RkYXRldGltZS5oOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSogZ3N0L2dzdGZvcm1hdC5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0aW5kZXguaDoKLQkqIGdzdC9nc3RpbmRleGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RpdGVyYXRvci5oOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkqIGdzdC9nc3RwYXJhbXNwZWNzLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmg6Ci0JKiBnc3QvZ3N0cHJlc2V0Lmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKLQkqIGdzdC9nc3R0YXNrLmg6Ci0JKiBnc3QvZ3N0dGFza3Bvb2wuaDoKLQkqIGdzdC9nc3R0cmFjZS5oOgotCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIC5oOiBmaXggaGVhZGVyIGZpbGVzCi0JICBFbnN1cmUgY29ycmVjdCBpbmRlbnRhdGlvbiBhbmQgOnJldGFiLgotCSAgTWFrZSBzdXJlIGFsbCBzdHJ1Y3R1cmVzIGhhdmUgcGFkZGluZwotCSAgRml4IHVwIHNvbWUgb2xkIEFCSSBhZGRpdGlvbnMuCi0KLTIwMTEtMTEtMTEgMTc6MDQ6NTIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGRvY3M6IGZpeCBpbnZhbGlkIHhtbAotCi0yMDExLTExLTExIDEwOjAwOjM1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGF2b2lkIDwgLTEgc2l6ZXMKLQotMjAxMS0xMS0xMSAwMTo0NzozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIGJ1ZmZlciwgbWVtb3J5OiBtYWtlIHNpemUgYXJndW1lbnRzIHdoZXJlIC0xIGlzIGFsbG93ZWQgc2lnbmVkCi0KLTIwMTEtMTEtMTEgMDE6NDQ6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiB1cGRhdGUgLmRlZiBmaWxlIGZvciBsYXRlc3QgQVBJIGNoYW5nZXMKLQotMjAxMS0xMS0xMCAxOTozNzoyOCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46Ci0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkqIGdzdC9nc3Rjb250cm9sbGVyLmg6Ci0JKiBnc3QvZ3N0Y29udHJvbHNvdXJjZS5jOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgotCSAgY29udHJvbGxlcjogbWVyZ2UgY29udHJvbGxlciBpbnRvIGdzdG9iamVjdAotCSAgVGhpcyBtYWtlIHRoZSBjb250cm9sbGVyIGV2ZW4gbW9yZSBsaWdodHdlaWdodCAobm8gZXh0cmEgb2JqZWN0LCBubyBleHRyYSBsb2NrLAotCSAgbGVzcyBpbmRpcmVjdGlvbnMpLiBGb3Igb2JqZWN0IHRoYXQgZG9uJ3QgdXNlIHRoZSBjb250cm9sbGVyIHRoZSBvbmx5ICdvdmVyaGVhZCcKLQkgIGlzIGEgMyB1bnVzZWQgZmllbGRzIGluIHRoZSBnc3Rfb2JqZWN0IHN0cnVjdHVyZS4KLQotMjAxMS0xMS0xMCAxODo1ODozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaDoKLQkgIG5ldG1ldGE6IGF2b2lkIHVzaW5nIGdbdV1sb25nIGluIGhlYWRlcnMKLQotMjAxMS0xMS0xMCAxODoxODoyNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiByZW1vdmUgZmx1c2ggZnJvbSBfdW5tYXAKLQotMjAxMS0xMS0xMCAxNjowMjo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBpbXBsZW1lbnQgYSBkZWZhdWx0IGdldF9jYXBzIGZ1bmN0aW9uCi0JICBEb24ndCByZWx5IG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYSB2bWV0aG9kIHRvIHRyaWdnZXIgdGhlIGRlZmF1bHQKLQkgIGltcGxlbWVudGF0aW9uIGJ1dCBtYWtlIGEgcmVhbCBkZWZhdWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1ldGhvZCB0aGF0IHRoZQotCSAgc3ViY2xhc3MgY2FuIGNoYWluIHVwIHRvLgotCi0yMDExLTExLTEwIDE0OjEzOjU0ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgZ3N0YnVmZmVyOiByZW1vdmUgaW5jb3JyZWN0IGFzc2VydGlvbgotCSAgT2Zmc2V0IGFuZCBzaXplcyBoYXZlIG5vIGJlYXJpbmcgb24gZWFjaCBvdGhlciBoZXJlLgotCi0yMDExLTExLTEwIDEzOjU5OjI4ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogVXBkYXRlIGRlZiBmaWxlcwotCi0yMDExLTExLTEwIDEzOjUzOjMzICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkgIGdzdDogTW9yZSBpbnRyb3NwZWN0aW9uIGFubm90YXRpb25zCi0KLTIwMTEtMTEtMTAgMTM6NTE6MjggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBnc3RtZW1vcnk6IFJlZ2lzdGVyIGEgR0JveGVkIEdUeXBlCi0JICBBbGxvd3MgdXNpbmcgaXQgZnJvbSBnLWkKLQotMjAxMS0xMS0xMCAxMzo1MDoyMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBpbnRyb3NwZWN0aW9uOiBBZGQgLS13YXJuLWFsbCB0byBpbnRyb3NwZWN0aW9uIHNjYW5uZXIKLQkgIC4uLiBhbmQgbGV0J3MgZ2V0IGZpeGluZyBhbGwgdGhvc2UgZG9jcyAhCi0KLTIwMTEtMTEtMTAgMTM6Mzg6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogZml4IHZtZXRob2RzCi0JICBNYWtlIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhbnNmb3JtX2NhcHMgdm1ldGhvZCBzbyB0aGF0IHN1YmNsYXNzZXMKLQkgIGNhbiBjYWxsIGludG8gaXQuCi0JICBNYWtlIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0cmFuc2Zvcm1fc2l6ZS4KLQkgIEF2b2lkIGRvaW5nIHNvbWV0aGluZyBpbiB0aGUgdm1ldGhvZCB0cmFtcG9saW5lLgotCi0yMDExLTExLTEwIDEzOjM3OjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6Ci0JICB0ZXN0czogb25seSBvdmVycmlkZSB3aGVuICE9IE5VTEwKLQkgIE9ubHkgb3ZlcnJpZGUgdGhlIG1ldGhvZHMgaW4gdGhlIHVuaXQgdGVzdHMgd2hlbiAhPSBOVUxMIG90aGVyd2lzZSB3ZSBtaWdodAotCSAgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0KLTIwMTEtMTEtMTAgMTM6MzY6MTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmg6Ci0JICBwdXNoc3JjOiBtYWtlIGFsbG9jIG1ldGhvZCBhIHZtZXRob2QKLQotMjAxMS0xMS0xMCAxMjozMzo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHJlb3JkZXIgdm1ldGhvZCBhY2NvcmRpbmcgdG8gLmggZmlsZQotCi0yMDExLTExLTEwIDEyOjMzOjMzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBiYXNlc2luazogaW1wcm92ZSBjb21tZW50cwotCi0yMDExLTExLTEwIDEyOjMzOjEwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGRvbid0IGRvIHRoaW5ncyBpbiB0aGUgdm1ldGhvZCB0cmFtcG9saW5lCi0KLTIwMTEtMTEtMTAgMTI6MDk6NTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBhZGQgYSBkZWZhdWx0IHNldF9jbG9jayBpbXBsZW1lbnRhdGlvbgotCSAgQWRkIGEgZGVmYXVsdCBzZXRfY2xvY2sgaW1wbGVtZW50YXRpb24gYW5kIGF2b2lkIGRvaW5nIHdvcmsgaW4gdGhlIHZtZXRob2QKLQkgIHRyYW1wb2xpbmUuIFRoaXMgcmVxdWlyZXMgc3ViY2xhc3NlcyB0byBjaGFpbiB1cC4KLQotMjAxMS0xMS0xMCAxMjowODo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IGRvbid0IGRvIGFueXRoaW5nIGluIHRoZSB2bWV0aG9kIHRyYW1wb2xpbmUKLQkgIEF2b2lkIGRvaW5nIHN0dWZmIGluIHRoZSB2bWV0aG9kIHRyYW1wb2xpbmUsIGp1c3QgbGV0IHRoZSBkZWZhdWx0Ci0JICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWV0aG9kIHRha2UgY2FyZSBvZiB0aGluZ3MuCi0KLTIwMTEtMTEtMTAgMTI6MDg6MTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBmaXggc29tZSBkb2NzCi0KLTIwMTEtMTEtMTAgMTE6NDI6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBhZGFwdGVyOiB1c2UgZ3BvaW50ZXIgZm9yIHJldHVybiB0eXBlcwotCi0yMDExLTExLTEwIDExOjEyOjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIGRvYwotCi0yMDExLTExLTEwIDEwOjU4OjQyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgcGFkOiByZW1vdmUgR3N0UGFkRml4YXRlQ2Fwc0Z1bmN0aW9uCi0JICBUaGUgZml4YXRlIGNhcHMgZnVuY3Rpb24gd2FzIG5vdCB1c2VkIGV4dGVybmFsbHkgYW5kIHdlIGhhdmUgdm1ldGhvZHMgaW4gdGhlCi0JICBiYXNlIGNsYXNzZXMgd2hlcmUgaXQgaXMgbmVlZGVkLgotCSAgVXBkYXRlIHNvbWUgZG9jcy4KLQkgIHNpbXBsaWZ5IHNvbWUgZml4YXRlIGZ1bmN0aW9ucyBpbiB0aGUgYmFzZSBjbGFzc2VzLiBBbHNvIHBhc3MgdGhlIHVudHJ1bmNhdGVkCi0JICBjYXBzIHRvIHRoZSB2bWV0aG9kLgotCi0yMDExLTExLTA5IDE3OjQzOjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGRvbid0IHN0b3JlIGV2ZW50cyBvbiBmbHVzaGluZyBwYWRzCi0JICBjaGVjayB0aGUgZmx1c2hpbmcgc3RhdGUgb2YgdGhlIHBhZCBiZWZvcmUgc3RvcmluZyB0aGUgZXZlbnQuCi0KLTIwMTEtMTEtMDkgMTc6MzY6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBwYWQ6IG1ha2UgYW4gQUNDRVBUX0NBUFMgcXVlcnkKLQkgIFJlcGxhY2UgdGhlIGFjY2VwdGNhcHMgZnVuY3Rpb24gd2l0aCBhIHF1ZXJ5LgotCi0yMDExLTExLTA5IDE3OjI1OjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgcGFkOiByZWZ1c2UgZXZlbnRzIGluIGZsdXNoaW5nCi0JICB3aGVuIHdlIGFyZSBmbHVzaGluZywgZG9uJ3Qgc3RvcmUgdGhlIGV2ZW50IG9uIHRoZSBwYWQgYnV0IHNpbXBseSByZXR1cm4gRkFMU0UuCi0JICBEb24ndCBkZWFjdGl2YXRlIHRoZSBzcmNwYWQsIHdlIG5lZWQgaXQgdG8gYmUgYWN0aXZlIGluIG9yZGVyIHRvIHB1c2ggdGhlCi0JICBjYXBzLiBEb3duc3RyZWFtIGNhbiBjaGFuZ2UgdGhlIHNjaGVkdWxpbmcgbW9kZSBvZiBhbiBhY3RpdmUgcGFkLgotCi0yMDExLTExLTA5IDE3OjE5OjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBlbGVtZW50OiByZW1vdmUgbW9yZSBxdWVyeV90eXBlcwotCi0yMDExLTExLTA5IDExOjA1OjU5ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBBbmRyb2lkLm1rOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkgIEFuZHJvaWQ6IGJ1aWxkIGF1ZGlvIGNvbnRyb2xsZXIgZXhhbXBsZQotCSAgQWRkIGJ1aWxkc3lzdGVtIGhvb2tzIGZvciBidWlsZGluZyB0aGUgYXVkaW9jb250cm9sbGVyIGV4YW1wbGUKLQkgIHdpdGggdGhlIE5ESy4KLQkgIFNpZ25lZC1vZmYtYnk6IFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQGNvbGxhYm9yYS5jb20+Ci0KLTIwMTEtMTEtMDkgMTI6MjE6MTcgKzAxMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHRlc3RzOiBwYWQ6IGFkZCB0ZXN0cyBmb3Igc3RpY2t5IGNhcHMgaGFuZGxpbmcKLQkgIHRlc3Rfc3RpY2t5X2NhcHNfZmx1c2hpbmcgaXMgY3VycmVudGx5IGZhaWxpbmcuCi0KLTIwMTEtMTEtMDkgMTI6MTI6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIHVwZGF0ZSBjb21tb24KLQotMjAxMS0xMS0wOSAxMjowMzoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTExLTA5IDEyOjAyOjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmcgZG9jCi0KLTIwMTEtMTEtMDkgMTE6NDc6MTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICByZW1vdmUgcXVlcnkgdHlwZXMKLQkgIEl0IHdhcyBub3QgcmVhbGx5IHVzZWZ1bAotCi0yMDExLTExLTA4IDE4OjA5OjI4ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogY29uc2lkZXIgbGlzdHMgYW5kIHJhbmdlcyBlcXVhbCBpZiB0aGV5IGhvbGQgdGhlIHNhbWUgc2V0Ci0JICBUaGlzIGZpeGVzIGNhcHMgb3BlcmF0aW9ucyB3aGVuIGRpZmZlcmVudCBlbGVtZW50cyBhZHZlcnRpc2Ugc29tZQotCSAgb2YgdGhlaXIgY2FwcycgcHJvcGVydGllcyBkaWZmZXJlbnRseSAoZWcsIGZvciBhdWRpbyBjaGFubmVscywgZWl0aGVyCi0JICBhIHJhbmdlIGZyb20gMSB0byAyLCBvciBhIGxpc3Qgb2YgMSBhbmQgMikuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzNjQzCi0KLTIwMTEtMTEtMDkgMTE6MjQ6MjYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHRlc3RzOiBhZGQgYSBzdWJzZXQgdGVzdCBmb3Igc3RydWN0dXJlCi0KLTIwMTEtMTEtMDkgMTE6MjI6MzYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIHBhZDogYWRkIG1vcmUgcXVlcmllcwotCSAgQWRkIG1vcmUgcXVlcnkgZnVuY3Rpb25zIHRvIHByZXBhcmUgZm9yIGRvaW5nIG1vcmUgd2l0aCBxdWVyaWVzCi0KLTIwMTEtMTAtMjggMTM6Mzk6NTggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRwYXJhbXMueG1sOgotCSAgZG9jczogYWxzbyBmaXggd3JvbmcgY2FsbCBvcmRlciBmb3IgY29udHJvbGxlciBpbiBtYW51YWwKLQotMjAxMS0xMS0wOCAxNzozMjoxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1wcm9iZXMudHh0OgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBpbnN0YWxsIHF1ZXJ5IHByb2JlcwotCSAgRmlyZSBxdWVyeSBwcm9iZXMgYWNjb3JkaW5nIHRvIHVwZGF0ZWQgZGVzaWduIGRvYy4KLQotMjAxMS0xMS0wOCAxNTo1MTo0OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiByZW1vdmUgbG9jay91bmxvY2tfZnVsbCB2ZXJzaW9ucyBvZiBzdHJlYW0tbG9jawotCi0yMDExLTExLTA4IDE1OjQ4OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGFkZCBkZWZpbmVzIGZvciBxdWVyeSBwcm9iZXMKLQotMjAxMS0xMS0wOCAxMzozMDoxOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBmaXggdW5pdCB0ZXN0Ci0KLTIwMTEtMTEtMDggMTM6MTM6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogdXBkYXRlIGRvY3MKLQotMjAxMS0xMS0wOCAxMzowMjowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdDogcG9ydCB0byAwLjExCi0KLTIwMTEtMTEtMDggMTI6NTQ6MTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RlbGVtZW50LmgKLQkgIGdzdC9nc3RnaG9zdHBhZC5jCi0JICBnc3QvZ3N0bWluaW9iamVjdC5jCi0KLTIwMTEtMTEtMDggMTI6NDc6MzMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtcHJvYmVzLnR4dDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogYWRkIHB1bGwgbW9kZSBwcm9iZXMKLQkgIEFsbG93IHByb2JlcyB0byBpbnNwZWN0IHRoZSBvZmZzZXQgYW5kIHNpemUgZnJvbSBhIHByb2JlIGluIHB1bGwgbW9kZSBhbmQgYWxsb3cKLQkgIHRoZSBwcm9iZSB0byBtb2RpZnkgdGhlIGJ1ZmZlci4KLQkgIFVwZGF0ZSBkZXNpZ24gZG9jIGEgbGl0dGxlLgotCi0yMDExLTExLTA4IDEyOjIyOjIxICswMTAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB0ZXN0czogcGFkOiBhZGQgdGVzdCB0byB2ZXJpZnkgZmx1c2hpbmcgYmVoYXZpb3VyCi0JICBTZWVtcyBsaWtlIGEgdHJpdmlhbCBjYXNlLCBidXQgdGhpcyB3YXMgYWN0dWFsbHkgYnJva2VuIGluIDAuMTEgcmVjZW50bHkuCi0KLTIwMTEtMTEtMDggMTE6MDQ6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jOgotCSAgcGFkOiBBZGQgR3N0UGFkUHJvYmVJbmZvCi0JICBNYWtlIGEgbmV3IEdzdFBhZFByb2JlSW5mbyBzdHJ1Y3R1cmUgYW5kIHBhc3MgdGhpcyBpbiB0aGUgcHJvYmUgY2FsbGJhY2suIFRoaXMKLQkgIGFsbG93cyB1cyB0byBhZGQgbW9yZSB0aGluZ3MgbGF0ZXIgYW5kIGFsc28gYWxsb3cgdGhlIGNhbGxiYWNrIHRvIHJlcGxhY2Ugb3IKLQkgIG1vZGlmeSB0aGUgcGFzc2VkIG9iamVjdC4KLQotMjAxMS0xMS0wOCAwODoyNjoyOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudDogbG9nIGNyZWF0aW9uIG9mIHFvcyBldmVudHMgYXQgTE9HIGxldmVsIGluc3RlYWQgYXQgSU5GTwotCi0yMDExLTExLTA3IDE2OjU3OjM3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGltcHJvdmUgcGFyYW1ldGVyIGRvY3MKLQotMjAxMS0xMS0wOCAwMDozMjozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIGRvY3M6IGZpeCBTaW5jZTogbWFya2VycyBmb3IgQVBJIGFkZGVkIGFmdGVyIDAuMTAuMzUKLQotMjAxMS0xMS0wOCAwMDoxNTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IHVwZGF0ZSAuZGVmIGZpbGUgZm9yIG5ldyBBUEkKLQkgIEFQSTogZ3N0X2NhcHNfaXNfc3RyaWN0bHlfZXF1YWwoKQotCi0yMDExLTExLTA3IDE3OjE3OjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0dmFsdWUuYwotCi0yMDExLTExLTA3IDE3OjA0OjEzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcXVldWUtZXJyb3IuYzoKLQkgIHBhZDogcmV3b3JrIHBhZCBwcm9iZXMKLQkgIE1ha2UgYSBzZXBhcmF0ZSBjb29raWUgdG8gZGV0ZWN0IGNoYW5jZ2VzIGluIHRoZSBsaXN0IG9mIHByb2JlcyBhbmQga2VlcGluZwotCSAgdHJhY2sgb2Ygd2hhdCBob29rcyBoYXZlIGJlZW4gaW52b2tlZCB5ZXQuCi0JICBSZW1vdmUgdGhlIHJlcXVpcmVtZW50IHRvIGhhdmUgcHJvYmVzIG9uIHNyY3BhZHMgaW4gcHVzaCBtb2RlIGFuZCBzaW5rcGFkcyBpbgotCSAgcHVsbCBtb2RlLgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1Zy4KLQkgIEtlZXAgdHJhY2sgb2Ygd2hhdCBjYWxsYmFja3MgZ290IGV4ZWN1dGVkLiBJZiBubyBjYWxsYmFjayBpcyBjYWxsZWQgYW5kIHdlIGFyZSBhCi0JICBibG9ja2luZyBwYWQsIGxldCB0aGUgaXRlbSBwYXNzLiBUaGlzIGFsbG93cyB5b3UgdG8gYmxvY2sgcGFkcyBvbiBzZWxlY3RlZAotCSAgaXRlbXMgb25seS4KLQkgIEV4cGxpY2l0bHkgaGF2ZSBhbiBVUFNUUkVBTSBhbmQgRE9XTlNUUkVBTSBQYWRQcm9iZVR5cGUuIFRoaXMgYWxsb3dzIHlvdSB0byBvbmx5Ci0JICBibG9jayB0aGUgcGFkIG9uIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gaXRlbXMuCi0JICBBZGQgY29udmVuaWVuY2UgbWFjcm9zIHRvIG9ubHkgYmxvY2sgb24gZG93bnN0cmVhbS91cHN0cmVhbSBpdGVtcy4KLQotMjAxMS0xMC0yNyAxMjo1OTo1NyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBnc3RjYXBzOiByZW1vdmUgdW5uZWVkZWQgdXNlIG9mIGdpbnQ2NAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2Mjc3NwotCi0yMDExLTEwLTI3IDEyOjI0OjEzICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogcXVpY2tlciB2ZXJzaW9uIG9mIGludGVyc2VjdGlvbiB3aGVuIHdlIGRvIG5vdCBuZWVkIHRoZSByZXN1bHQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjI3NzcKLQotMjAxMS0xMC0yNyAxMjowMjo0MyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGdzdHN0cnVjdHVyZTogc2ltcGxpZnkgcmV0dXJuIHN0YXRlbWVudCBpbiBnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjI3NzcKLQotMjAxMS0xMC0yNyAxMTo0MTozMCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGdzdHN0cnVjdHVyZTogZWFybHkgb3V0IHdoZW4gd2Uga25vdyBhIHZhbHVlIGNhbm5vdCBiZSBhIHN1YnNldAotCSAgSWYgdHdvIHZhbHVlcyBjYW4gYmUgb3JkZXJlZCwgYnV0IGFyZSB1bmVxdWFsLCB0aGV5IGFyZQotCSAgbmVjZXNzYXJpbHkgZGlzdGluY3QsIHRodXMgb25lIGNhbm5vdCBiZSBhIHN1YnNldCBvZiB0aGUgb3RoZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyNzc3Ci0KLTIwMTEtMTAtMjcgMTA6MzU6NTMgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdHZhbHVlOiBxdWlja2VyIHRlc3QgZm9yIHN1YnN0cmFjdGlvbiBlbXB0aW5lc3MKLQkgIFdoZW4gd2UgZG8gbm90IGNhcmUgYWJvdXQgdGhlIGFjdHVhbCByZXN1bHRpbmcgc2V0LAotCSAgYnV0IG9ubHkgd2hldGhlciBpdCBpcyBlbXB0eSBvZiBub3QsIHdlIGNhbiBza2lwIGEgZmFpciBiaXQKLQkgIG9mIEdWYWx1ZSBqdWdnbGluZy4KLQkgIEFkZCBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBzbywgc2luY2Ugd2UgY2Fubm90IGp1c3QgcGFzcyBOVUxMCi0JICB0byB0aGUgZXhpc3RpbmcgQVBJIGFzIGl0IG1heSBiZSBwYXJ0IG9mIHRoZSBBUEkgY29udHJhY3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyNzc3Ci0KLTIwMTEtMTAtMjcgMDk6NDU6NDEgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBnc3RzdHJ1Y3R1cmU6IHJlamlnIHRlc3Qgb3JkZXJpbmcgZm9yIHNwZWVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyNzc3Ci0KLTIwMTEtMTEtMDcgMTI6Mjg6MjIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBkb2NzOiBtZW50aW9uIG1vcmUgYXBpIGNoYW5nZXMgaW4gdGhlIHBvcnRpbmcgZ3VpZGUKLQotMjAxMS0xMS0wNyAxMDo0MDoyMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGZpeCBjb21waWxhdGlvbgotCi0yMDExLTExLTA3IDEwOjAxOjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYwotCi0yMDExLTExLTA2IDAwOjA3OjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkgIFJldmVydCAiY29udHJvbGxlcjogZml4IGdfcmV0dXJuIHN0YXRlbWVudCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNTkzZDJiMjk3YmQ3YjVjZTlkYmNkZjJmMWFlMmI3NjI0ZDk0ZDZhZS4KLQkgIGdzdF9jb250cm9sbGVyX3NldF9kaXNhYmxlZCAoKSByZXR1cm5zIGEgdm9pZC4KLQotMjAxMS0xMS0wNSAxMjoxMDoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogcmVtb3ZlIHJlZnMgdG8gcmVtb3ZlZCBBUEkKLQotMjAxMS0xMS0wNCAyMTozNzo0NSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGNvbnRyb2xsZXI6IHRoZSBvYmplY3QgbmVlZHMgYSByZWYgdG8gdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBjb252ZW5pZW5jZSBhcGkKLQkgIEFkZCBhIGhhY2sgdG8gZW5zdXJlIHRoZSBvYmplY3Qgd2lsbCBoYXZlIGEgcmVmIHRvIHRoZSBjb250cm9sbGVyIG9uY2Ugd2UKLQkgIGNyZWF0ZSBpdC4gRml4ZXMgdGhlIGF1ZGlvIGV4YW1wbGUgKHRoYXQgdXNlcyB0aGUgY29udHJvbGxlciBhcGkgZGlyZWN0bHkpLgotCi0yMDExLTExLTA0IDIxOjM3OjIxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y29udHJvbGxlci5jOgotCSAgY29udHJvbGxlcjogZml4IGdfcmV0dXJuIHN0YXRlbWVudAotCi0yMDExLTExLTA0IDIxOjM1OjU1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y29udHJvbGxlci5jOgotCSAgY29udHJvbGxlcjogbG9nZ2luZyB0d2Vha3MKLQkgIERvbid0IGxvZyBpbiBfbmV3IGJlZm9yZSB3ZSBoYXZlIHRoZSBsb2cgY2F0ZWdvcnkuIFVzZSBfT0JKRUNUIHZhcmlhbnRzLgotCi0yMDExLTExLTA1IDAxOjI3OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNvbnRyb2xsZXIuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGdzdDogZml4IHNvbWUgY29tcGlsZXIgd2FybmluZ3MKLQkgIGdzdG9iamVjdC5jOiBJbiBmdW5jdGlvbiAnZ3N0X29iamVjdF9oYXNfYWN0aXZlX2F1dG9tYXRpb24nOgotCSAgZ3N0b2JqZWN0LmM6MTA3NjozOiBlcnJvcjogJ3JldHVybicgd2l0aCBubyB2YWx1ZSwgaW4gZnVuY3Rpb24gcmV0dXJuaW5nIG5vbi12b2lkCi0JICBnc3Rjb250cm9sbGVyLmM6IEluIGZ1bmN0aW9uICdnc3RfY29udHJvbGxlcl9pc19hY3RpdmUnOgotCSAgZ3N0Y29udHJvbGxlci5jOjUwOTozOiBlcnJvcjogJ3JldHVybicgd2l0aCBubyB2YWx1ZSwgaW4gZnVuY3Rpb24gcmV0dXJuaW5nIG5vbi12b2lkCi0KLTIwMTEtMTEtMDQgMjA6NTA6NTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y29udHJvbGxlci5jOgotCSogZ3N0L2dzdGNvbnRyb2xsZXIuaDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkgIGNvbnRyb2xsZXI6IGFkZCBhcGkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBjb250cm9sbGVycyAobmVlZGVkIGZvciBlLmcuIHZvbHVtZSkKLQotMjAxMS0xMS0wNCAyMDozMjozMiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG9iamVjdC5oOgotCSAgY29udHJvbGxlcjogcmVtb3ZlIG9ic29sZXRlIGNvbW1lbnRzIGZyb20gYXBpIHRyYW5zaXRpb24KLQotMjAxMS0xMS0wNCAxNDowMDoyNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2dzdGxpYnNjcHAuY2M6Ci0JICBjb250cm9sbGVyOiBmaXggdGVzdHMgYWZ0ZXIgbW92ZSBhbmQgQVBJIGNoYW5nZXMKLQotMjAxMS0xMS0wNCAxMTo0MjozNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBjb250cm9sbGVyOiBwb3J0IHRvIG5ldyBjb250cm9sbGVyIGFwaQotCi0yMDExLTExLTA0IDExOjM5OjI1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgotCSAgY29udHJvbGxlcjogdXBkYXRlIGRvY3MgZm9yIGNvbnRyb2xsZXIgbW92ZQotCi0yMDExLTExLTA0IDExOjM0OjExICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkqIGdzdC9nc3Rjb250cm9sbGVyLmM6Ci0JKiBnc3QvZ3N0Y29udHJvbGxlci5oOgotCSogZ3N0L2dzdGNvbnRyb2xzb3VyY2UuYzoKLQkqIGdzdC9nc3Rjb250cm9sc291cmNlLmg6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVycHJpdmF0ZS5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2xpYi5jOgotCSAgY29udHJvbGxlcjogbW92ZSB0byBjb3JlL2dzdG9iamVjdAotCSAgTW92ZSB0aGUgY29udHJvbGxlciB0byBnc3RvYmplY3QgYXMgYSBzaW1wbGUgZGVsZWdhdGUuIFRoZSBjb250cm9sbGVyIGFuZAotCSAgY29udHJvbHNvdXJjZSBhcmUgbm90IGNsYXNzZXMgaW4gY29yZS4gVGhlIGNvbnRyb2xzb3VyY2VzIHN0YXkgc2VwYXJhdGUgYXMgYSBsaWIKLQkgIGZvciBub3cuIFRoaXMgd2F5IHdlIGNhbiBhdm9pZCB0aGUgcWRhdGEgbG9va3Vwcy4KLQkgIEFsc28gcmVtb3ZlIGNvbnRyb2xsZXJfaW5pdCgpLiBUaGVyZSBpcyBubyBtb3JlIG5lZWQgdG8gbGluayB0byBjb250cm9sbGVyIGZvcgotCSAgZWxlbWVudHMuCi0JICBBbHNvIHNhbml0aXplIHRoZSBBUEkuIFdlIG5vdyBoYXZlIGZ1bmN0aW9ucyB0byBhZGQgcHJvcGVydGllcyBsaWtlIHdlIGhhZAotCSAgbWV0aG9kcyB0byByZW1vdmUgdGhhdC4gVGhhdCBhdm9pZHMgdGhlbiByZWYgY291bnQgaGFja3Mgd2UgaGFkIGluIF9uZXcuCi0KLTIwMTEtMTEtMDMgMTg6MjM6MTMgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBkb2NzOiBzbWFsbCBjbGFyaWZpY2F0aW9uCi0KLTIwMTEtMTEtMDMgMTg6MjI6MTYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBtaXNzaW5nIHJlbmFtZSBpZmFjZS0+aW50ZXJmYWNlIGluIHRoZSBkb2NzCi0KLTIwMTEtMTEtMDQgMTk6MTc6MDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogZml4IHRoZSBpdGVyYXRvciBjb3B5Ci0KLTIwMTEtMTEtMDQgMTk6MTE6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RiaW4uYwotCi0yMDExLTExLTAzIDE1OjM2OjU5ICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBPbmx5IHVzZSB0aGUgY2FjaGVkIHRyYW5zZm9ybSBvbiBzdHJpY3RseSBlcXVhbCBjYXBzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMzMzCi0KLTIwMTEtMTEtMDMgMTU6MzU6MzIgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZC5zaW1vbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkgIGNhcHM6IEFkZCBnc3RfY2Fwc19pc19zdHJpY3RseV9lcXVhbAotCi0yMDExLTExLTA0IDE4OjQ3OjEwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkgIHRlc3RzOiBmaXggdGVzdHMKLQkgIFNpbmNlIGJsb2NrcyBhcmUgbm90IG9uIGJvdGggZGlyZWN0aW9ucywgd2UgbmVlZCB0byBjaGVjayBpbiB0aGUgYmxvY2sgY2FsbGJhY2sKLQkgIGlmIHdlIGFyZSBub3QgYmxvY2tpbmcgb24gYW4gdXBzdHJlYW0gZXZlbnQgYW5kIGxldCBpdCBwYXNzLgotCi0yMDExLTExLTA0IDE4OjE5OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXByb2Jlcy50eHQ6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IG1ha2UgcHJvYmVzIHdvcmsgb24gYWxsIHBhZHMKLQkgIGZpeGVzICM2NDQ5MDcKLQotMjAxMS0xMC0xNSAyMjo1MjoyNSArMDMwMCAgUGV0ZXJpcyBLcmlzamFuaXMgPHBlY2lza0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RjbG9jay5oOgotCSAgaW50cm9zcGVjdGlvbjogYWRkIFZhbHVlIGFubm90YXRpb25zIGZvciBHU1RfU0VDT05ELCBHU1RfTVNFQ09ORCwgR1NUX1VTRUNPTkQsIEdTVF9OU0VDT05EIGNvbnN0YW50cwotCSAgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHdvbid0IHBhcnNlIHRoZW0gcHJvcGVybHkgb3RoZXJ3aXNlLgotCSAgU3RpbGwgbmVlZCB0byBmb3JjZSB0aGUgcmlnaHQgdHlwZSB0aG91Z2ggKGVpdGhlciBHc3RDbG9ja1RpbWUgb3IKLQkgIGd1aW50NjQpLCBidXQgVHlwZTogeHl6IGhhcyBubyBlZmZlY3QgZm9yIG1lIGhlcmUsIHNvIHNvbWVvbmUgd2l0aAotCSAgYSBuZXdlciBnLWkgbmVlZHMgdG8gdGVzdCB0aGlzLgotCSAgU29tZSBvdGhlciBkZWZpbmVzIGFyZSBhbHNvIG1pc3NpbmcsIGUuZy4gR1NUX0NMT0NLX1RJTUVfTk9ORS4KLQotMjAxMS0xMS0wNCAwMDowMzowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogc3VwcHJlc3MgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzIGlmIGdzdCBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjI5NTIKLQotMjAxMS0xMS0wNCAwMDowMjowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogZml4IHR5cG8gYXJvdW5kIEdMSUJfRVhUUkFfQ0ZMQUdTIGluIEdTVF9BTExfQ1hYRkxBR1MKLQotMjAxMS0xMS0wMyAyMzowODo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKLQkgIHF1ZXVlOiB1c2Ugc3RhdGljYWxseSBhbGxvY2F0ZWQgR1F1ZXVlCi0KLTIwMTEtMTEtMDMgMjI6NTg6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IHVzZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBHUXVldWUKLQkgIEJlY2F1c2Ugd2UgY2FuLgotCi0yMDExLTExLTAzIDIyOjUxOjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuaDoKLQkgIGNvbGxlY3RwYWRzMjogdXNlIGZsYWdzIGVudW0gaW5zdGVhZCBvZiBndWludCBpbiBzdHJ1Y3R1cmUKLQotMjAxMS0xMS0wMyAwODo0NzoyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiB1c2Ugc3RhdGljYWxseSBhbGxvY2F0ZWQgR1F1ZXVlCi0KLTIwMTEtMTEtMDMgMTc6NDk6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSAgZml4IHJlcXVlc3QgcGFkCi0JICBNYWtlIGFsbCByZXF1ZXN0IHBhZHMgdGFrZSBfJXUgaW4gdGhlIHRlbXBsYXRlLgotCSAgRml4IHVwIHVuaXQgdGVzdHMuCi0KLTIwMTEtMTEtMDMgMTY6NDk6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RuZXQuZGVmOgotCSAgZGVmOiB1cGRhdGUgZGVmcwotCi0yMDExLTExLTAzIDE2OjQ2OjM1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5oOgotCSAgbmV0OiBhZGQgbmV0IGFkZHJlc3MgbWV0YWRhdGEKLQotMjAxMS0xMS0wMyAxNDoyNjoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oOgotCSAgbmV0dGltZTogY2xlYW4gdXAgaGVhZGVyCi0KLTIwMTEtMTEtMDMgMTQ6MTQ6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YXNrLmM6Ci0JICB0YXNrOiBkb24ndCB1c2UgbG9jay91bmxvY2tfZnVsbAotCi0yMDExLTExLTAzIDExOjMwOjUyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0Z2hvc3RwYWQuYwotCi0yMDExLTExLTAyIDEyOjM3OjE1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHNtYWxsIGNsZWFudXAKLQotMjAxMS0xMC0yNSAxNzoyNjo1MCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IERvbid0IGNhY2hlIGludGVybmFsIHByb3h5IHBhZCB0YXJnZXQKLQkgIFRoZSBpbnRlcm5hbCBwcm94eSBwYWQgdGFyZ2V0IGlzIHNpbXBseSBhIGNhY2hlIG9mIHRoZSBpbnRlcm5hbCBwcm94eSBwYWQKLQkgIHBlZXIuIFRoaXMgcGF0Y2ggdXNlcyB0aGUgd2VsbCBpbXBsZW1lbnQgR3N0UGFkIHBlZXIgaGFuZGxpbmcgdG8gb2J0YWluIHRoZQotCSAgdGFyZ2V0LiBUaGlzIGZpeGVzIGlzc3VlcyB3aXRoIHRhcmdldCBub3QgYmVpbmcgc2V0IGluIGJvdGggZGlyZWN0aW9uIHdoZW4KLQkgIHR3byBnaG9zdHBhZHMgYXJlIGxpbmtlZCB0b2dldGhlciAoZW1wdHkgYmluKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTg1MTcKLQotMjAxMS0xMS0wMiAxMjowNjo0NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHV0aWxzOiByZW1vdmUgX2ZvdW5kX3RhZ3NfIEFQSQotCSAgcmVtb3ZlIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3MoKSBhbmQgZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkKCksIHRoZXkgYXJlCi0JICBub3RoaW5nIG1vcmUgdGhhbiBhIHdyYXBwZXIgYXJvdW5kIGdzdF9wYWRfcHVzaF9ldmVudCgpCi0KLTIwMTEtMTEtMDIgMTA6Mjk6MDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbW1vbgotCSAgY29uZmlndXJlLmFjCi0KLTIwMTEtMTAtMzAgMjE6MzM6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogaW1wcm92ZSBkb2NzCi0KLTIwMTEtMTAtMjkgMDk6NDM6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBldmVudDogbWFrZSBHc3RTZWdtZW50IGFyZ3VtZW50IGNvbnN0Ci0KLTIwMTEtMTAtMjkgMDk6NDE6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiByZW1vdmUgbWV0YXRpbWluZyBmcm9tIGRvY3MKLQotMjAxMS0xMC0yOSAwOToyNjo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0dGFzay5jOgotCSogZ3N0L2dzdHRhc2suaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFzay5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB0YXNrOiBhcGkgY2xlYW51cAotCSAgZ3N0X3Rhc2tfY3JlYXRlKCkgLT4gZ3N0X3Rhc2tfbmV3KCkKLQotMjAxMS0xMC0yOSAwOTowMjowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc3RydWN0dXJlOiBjbGVhbnVwIEFQSQotCSAgZ3N0X3N0cnVjdHVyZV9lbXB0eV9uZXcoKSAtPiBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgpCi0JICBnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ldygpIC0+IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5KCkKLQkgIGdzdF9zdHJ1Y3R1cmVfaWRfbmV3KCkgLT4gZ3N0X3N0cnVjdHVyZV9uZXdfaWQoKQotCi0yMDExLTEwLTI5IDA4OjM4OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkgIG1ldGE6IHJlbW92ZSB0aW1pbmcgbWV0YWRhdGEKLQkgIFRoaXMgaXMgbm93IG9uIGJ1ZmZlcnMgYnkgZGVmYXVsdAotCi0yMDExLTEwLTI5IDA4OjI0OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJsaXN0OiBjbGVhbiB1cCBBUEkKLQkgIGdzdF9idWZmZXJfbGlzdF9sZW4oKSAtPiBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoKCkKLQkgIGdzdF9idWZmZXJfbGlzdF9zaXplZF9uZXcoKSAtPiBnc3RfYnVmZmVyX2xpc3RfbmV3X3NpemVkKCkKLQotMjAxMS0xMS0wMSAxNDoxNzoyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogc2ltcGxpZnkgZ3N0X2FkYXB0ZXJfdGFrZV9saXN0KCkKLQkgIFVzZSBhIHN0YWNrLWFsbG9jYXRlZCBHUXVldWUgdG8gYXNzZW1ibGUgb3VyIEdMaXN0LgotCi0yMDExLTExLTAxIDEwOjU2OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIGRvY3M6IG1lbnRpb24gR3N0QWN0aXZhdGVNb2RlIHJlbmFtZSBpbiBwb3J0aW5nIGRvYwotCi0yMDExLTExLTAxIDAwOjI1OjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHBhZDogcmVuYW1lIEdzdEFjdGl2YXRlTW9kZSB0byBHc3RQYWRBY3RpdmF0ZU1vZGUKLQkgIFRoZXNlIG1pZ2h0IGJlIHVzZWZ1bDoKLQkgIHNlZCAtaSAtZSAncy9Hc3RBY3RpdmF0ZU1vZGUvR3N0UGFkQWN0aXZhdGVNb2RlL2cnIGBnaXQgZ3JlcCBHc3RBY3RpdmF0ZU1vZGUgfCBzZWQgLWUgJ3MvOi4qLy8nIHwgc29ydCAtdWAKLQkgIHNlZCAtaSAtZSAncy9HU1RfQUNUSVZBVEVfL0dTVF9QQURfQUNUSVZBVEVfL2cnICAgIGBnaXQgZ3JlcCBHU1RfQUNUSVZBVEVfICAgfCBzZWQgLWUgJ3MvOi4qLy8nIHwgc29ydCAtdWAKLQotMjAxMS0xMS0wMSAwMDoxMzozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtcHJvYmVzLnR4dDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogbGlicy9nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcXVldWUtZXJyb3IuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcGFkOiByZW5hbWUgR3N0UHJvYmVUeXBlIGFuZCBHc3RQcm9iZVJldHVybiB0byBHc3RQYWRQcm9iZXtUeXBlLFJldHVybn0KLQkgIEJldHRlciBub3cgdGhhbiBsYXRlciBpbiB0aGUgY3ljbGUuIFRoZXNlIG1pZ2h0IGNvbWUgaW4gaGFuZHk6Ci0JICBzZWQgLWkgLWUgJ3MvR3N0UHJvYmVSZXR1cm4vR3N0UGFkUHJvYmVSZXR1cm4vZycgICBgZ2l0IGdyZXAgR3N0UHJvYmVSZXR1cm4gIHwgc2VkIC1lICdzLzouKi8vJyB8IHNvcnQgLXVgCi0JICBzZWQgLWkgLWUgJ3MvR1NUX1BST0JFXy9HU1RfUEFEX1BST0JFXy9nJyAgICAgICAgICBgZ2l0IGdyZXAgR1NUX1BST0JFXyAgICAgIHwgc2VkIC1lICdzLzouKi8vJyB8IHNvcnQgLXVgCi0JICBzZWQgLWkgLWUgJ3MvR3N0UHJvYmVUeXBlL0dzdFBhZFByb2JlVHlwZS9nJyAgICAgICBgZ2l0IGdyZXAgR3N0UHJvYmVUeXBlICAgIHwgc2VkIC1lICdzLzouKi8vJyB8IHNvcnQgLXVgCi0KLTIwMTEtMTAtMzEgMjM6MzI6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHRhZ2xpc3Q6IHJlbW92ZSBnc3RfdGFnX2xpc3RfZ2V0Xypsb25nKigpCi0JICBObyBvbmUgdXNlcyB0aGlzIG9yIHNob3VsZCBldmVyIG5lZWQgdG8gdXNlIGl0LCBzaW5jZQotCSAgdGhlIHNpemUgaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFueXdheS4gSWYgbm9ybWFsCi0JICBpbnRlZ2VycyBkb24ndCBkbywgb25lIHNob3VsZCB1c2UgNjQtYml0IGludGVnZXJzLgotCi0yMDExLTEwLTMxIDE5OjA0OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBVcGRhdGUgLmRlZiBmaWxlIGZvciByZW1vdmVkL2NoYW5nZWQgQVBJCi0KLTIwMTEtMTAtMzEgMTk6MjM6NDEgKzAxMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogZml4IGNyYXNoL3dhcm5pbmcgaW4gZmluZF90cmFuc2Zvcm0gd2hlbiBwYWQgaXMgdW5saW5rZWQKLQkgIExvb2tzIGxpa2UgdGhlIHJldmVydCBjb25mbGljdCBpbiBjb21taXQgYTQ0MjcxIHdhcyByZXNvbHZlZCBpbmNvcnJlY3RseS4KLQotMjAxMS0xMC0zMSAxNzo0NTo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogbWFrZSBHTElCX0VYVFJBX0NGTEFHUyBvdmVyd3JpdGFibGUKLQkgIE1ha2UgJ21ha2UgR0xJQl9FWFRSQV9DRkxBR1M9Li4uJyB3b3JrLgotCi0yMDExLTEwLTMxIDE0OjE2OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3RmaWx0ZXIuYzoKLQkqIGdzdC9nc3RmaWx0ZXIuaDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBmaWx0ZXI6IHJlbW92ZSBnc3RfZmlsdGVyX3J1bigpIGFuZCBkZXByZWNhdGVkIGZpbHRlciBmdW5jCi0JICBJZiBzb21lb25lIHdhbnRzIHRvIHJlc3VycmVjdCB0aGlzLCBwbGVhc2UgdXNlIGEgbGVzcwotCSAgZ2VuZXJpYyBuYW1lIHNwYWNlIGZvciBpdC4KLQotMjAxMS0xMC0zMSAxNDowMzoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYwotCi0yMDExLTEwLTMwIDEwOjI2OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHRhZ2xpc3Q6IHJlbmFtZSBfbmV3KCkgdG8gX25ld19lbXB0eSgpIGFuZCBuZXdfZnVsbCooKSB0byBuZXcqKCkKLQotMjAxMS0xMC0zMCAyMTo1NDozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RmaWx0ZXIuYzoKLQkqIGdzdC9nc3RmaWx0ZXIuaDoKLQkgIGZpbHRlcjogZGVwcmVjYXRlIGdzdF9maWx0ZXJfcnVuKCkKLQkgIEl0J3Mgbm90IHJlYWxseSB1c2VkIG91dHNpZGUgb2YgY29yZSBhdCBhbGwsIGFuZCBoYXMKLQkgIHNlcmlvdXMgbmFtZXNwYWNlIGlzc3Vlcy4gSWYgYW55b25lIGZlZWxzIHRoZSBuZWVkIHRvCi0JICByZXZpdmUgdGhpcyBvbmUsIHBsZWFzZSB1c2UgYSBsZXNzIGdlbmVyaWMgbmFtZSBzcGFjZS4KLQkgIEFQSTogZGVwcmVjYXRlIGdzdF9maWx0ZXJfcnVuKCkKLQkgIEFQSTogZGVwcmVjYXRlIEdzdEZpbHRlckZ1bmMKLQotMjAxMS0xMC0zMCAyMTozOTozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGRvbid0IHVzZSBzb29uLXRvLWJlLWRlcHJlY2F0ZWQgZ3N0X2ZpbHRlcl9ydW4oKQotCSAgTGluZXMtb2YtY29kZSBzYXZpbmdzIGFyZSBuZWdsaWdpYmxlIGFueXdheS4KLQotMjAxMS0xMC0zMCAyMToyMTo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgotCSAgcGx1Z2luZmVhdHVyZTogZGVwcmVjYXRlIGdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyKCkKLQkgIEl0J3Mgb25seSB1c2VkIGludGVybmFsbHkgYW55d2F5IGFuZCB0aGUgaGVscGVyIHN0cnVjdAotCSAgaGFzIG5hbWVzcGFjZSBpc3N1ZXMuCi0JICBBUEk6IGRlcHJlY2F0ZWQgZ3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIoKQotCSAgQVBJOiBkZXByZWNhdGVkIEdzdFR5cGVOYW1lRGF0YQotCi0yMDExLTEwLTMwIDEwOjA1OjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdsaXN0OiBtYWtlIG9wYXF1ZQotCSAgSGlkZSB0aGUgZmFjdCB0aGF0IGl0J3MganVzdCBhIEdzdFN0cnVjdHVyZSBmcm9tIHRoZSBBUEkuIFdlCi0JICBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcyBpbiBmdXR1cmUgKGUuZy4gdG8gYWRkIHJlZmNvdW50aW5nKS4KLQkgIEFsc28sIGl0IGNhdXNlZCBwcm9ibGVtcyBmb3IgYmluZGluZ3MgKHRob3VnaCB0aGF0J3MgbW9zdGx5Ci0JICB0aGUgd2F5IHdlIHR5cGVkZWZlZCBpdCB0byBHc3RTdHJ1Y3R1cmUpLgotCi0yMDExLTEwLTMwIDEwOjAwOjI4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTAtMzAgMDk6NTg6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHRhZ2xpc3Q6IGFkZCB0b19zdHJpbmcgYW5kIG5ld19mcm9tX3N0cmluZyBmdW5jdGlvbnMKLQkgIFdlIHdhbnQgdG8gbWFrZSBHc3RUYWdMaXN0IG9wYXF1ZSBhbmQgbm90IGhhdmUgcGVvcGxlIHVzZQotCSAgR3N0U3RydWN0dXJlIEFQSSBvbiBpdC4KLQkgIEFQSTogZ3N0X3RhZ19saXN0X3RvX3N0cmluZygpCi0JICBBUEk6IGdzdF90YWdfbGlzdF9uZXdfZnJvbV9zdHJpbmcoKQotCi0yMDExLTEwLTMwIDA5OjMxOjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTAtMzAgMDE6NDY6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgdGFnbGlzdDogYXZvaWQgcG9pbnRsZXNzIHRhZyBuYW1lIC0+IHF1YXJrIGxvb2t1cHMKLQkgIFdlIG5ldmVyIGdldCBhIHRhZyBuYW1lIHF1YXJrIGZyb20gYSBjYWxsZXIsIGl0J3MgYWx3YXlzIGEKLQkgIHN0cmluZywgZnJvbSB3aGljaCB3ZSdsbCB0cnkgdG8gbG9vayB1cCBvdXIgdGFnIGluZm8gaW4gdGhlCi0JICBoYXNoIHRhYmxlLCBzbyBjaGFuZ2UgdGhlIGhhc2ggdGFibGUga2V5IGZyb20gcXVhcmsgdG8gc3RyaW5nLgotCSAgQXZvaWRzIGEgYnVuY2ggb2YgcG9pbnRsZXNzIHN0cmluZyA9PiBxdWFyayBsb29rdXAgaW4gdGhlCi0JICBnbG9iYWwgcXVhcmsgdGFibGUuIFdlIG5lZWQgdG8gZG8gYW4gZXh0cmEgc3RyaW5nID0+IHF1YXJrCi0JICBjb252ZXJzaW9uIG5vdyB3aGVuIHdlIGNvcHkgYSB0YWdsaXN0LCBidXQgaW4gdGhhdCBjYXNlIHdlJ3JlCi0JICBpbiBhIHNsb3cgcGF0aCBhbnl3YXkuCi0KLTIwMTEtMTAtMzAgMDA6NDQ6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHRhZ2xpc3Q6IGFkZCBnc3RfdGFnX2xpc3RfaXNfZXF1YWwoKQotCSAgQVBJOiBnc3RfdGFnX2xpc3RfaXNfZXF1YWwoKQotCi0yMDExLTEwLTI5IDIzOjUyOjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBpZGVudGljYWwgc3RydWN0dXJlcyBhcmUgZGVmaW5pdGVseSBlcXVhbAotCi0yMDExLTEwLTI5IDIwOjA2OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIHRhZ2xpc3Q6IGZpeCBzdHJpbmcgZm9yIEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FCi0JICBGb3IgaGlzdG9yaWNhbCByZWFzb25zIGl0IHdhcyBtYXBwZWQgdG8gYSBtdXNpY2JyYWlueiBwcmVmaXgsCi0JICBidXQgaXQncyBub3QgcmVhbGx5IG11c2ljYnJhaW56LXNwZWNpZmljIGF0IGFsbC4KLQotMjAxMS0xMC0yOSAxOTo1OTowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JICBlbGVtZW50ZmFjdG9yeTogbW92ZSBwcml2YXRlIGZ1bmN0aW9ucyBmb3IgcmVnaXN0cnkgdG8gcHJpdmF0ZSBoZWFkZXIKLQotMjAxMS0xMC0yOCAyMTo0MDo0NyArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBmaXggaW52YWxpZCBhY2Nlc3MgdG8gdW5yZWZmZWQgYWxsb2NhdGlvbiBxdWVyeQotCi0yMDExLTEwLTI4IDE2OjQ1OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IGZpeCBkb2NzIHNvbWUgbW9yZQotCi0yMDExLTEwLTI4IDE2OjI3OjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYwotCi0yMDExLTEwLTI4IDE2OjA4OjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgotCSAgdGVzdHM6IGZpeCBzZWdtZW50IGNoZWNrCi0KLTIwMTEtMTAtMjggMTU6NTI6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSAgc2VnbWVudDogcmVtb3ZlIEdTVF9TRUVLX1RZUEVfQ1VSCi0KLTIwMTEtMTAtMjggMTU6NTI6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogaW1wcm92ZSBkb2NzCi0KLTIwMTEtMTAtMjggMTM6MDI6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKLQkgIGJ5dGV3cml0ZXI6IEFkZCBwYWRkaW5nCi0KLTIwMTEtMTAtMjggMTM6MDI6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oOgotCSAgYml0cmVhZGVyOiBBZGQgcGFkZGluZwotCi0yMDExLTEwLTI4IDEzOjAyOjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6Ci0JICBieXRlcmVhZGVyOiBBZGQgcGFkZGluZwotCi0yMDExLTEwLTI4IDEyOjMxOjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlCi0KLTIwMTEtMTAtMjggMTI6Mjg6NDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgZG9jczogdXBkYXRlCi0KLTIwMTEtMTAtMjggMTI6Mjc6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZSBmb3IgbmV3IGFwaQotCi0yMDExLTEwLTI4IDEyOjE3OjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkgIGNoZWNrOiBhbHNvIGRlYnVnIHRoZSBEVFMKLQotMjAxMS0xMC0yOCAxMjoxNjoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkgIGFkYXB0ZXI6IHVzZSBwdHMvZHRzIG9uIGJ1ZmZlcnMKLQotMjAxMS0xMC0yOCAxMjoyNDowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSAgY29tcGF0OiBhZGQgdGltZXN0YW1wIGNvbXBhdCBkZWZpbmVzCi0KLTIwMTEtMTAtMjggMTI6MTU6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSAgYnVmZmVyOiBhZGQgcHRzL2R0cyB0byBidWZmZXJzCi0KLTIwMTEtMTAtMjggMTE6NTM6MzIgKzAyMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZC5zaW1vbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEFsc28gZnVzaCB0aGUgY2FjaGUgd2hlbiBjaGFuZ2luZyB0aGUgdXBzdHJlYW0gY2FwcyBzdWdnZXN0aW9uCi0KLTIwMTEtMTAtMjggMTE6NTA6MjMgKzAyMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZC5zaW1vbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEFkZCBkZWJ1ZyBvdXRwdXQgd2hlbiByZXR1cm5pbmcgYSBjYWNoZWQgdHJhbnNmb3JtCi0KLTIwMTEtMTAtMjggMTE6MzM6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMC0yOCAxMTozMDo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmg6Ci0JICBjb29sZWN0cGFkczI6IHBvcnQgdG8gMC4xMQotCi0yMDExLTEwLTI4IDExOjEzOjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTAtMjggMTA6NTQ6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSAgY29sbGVjdHBhZHMyOiBGaXggcmVmY291bnQgaGFuZGxpbmcgaWYgYSBidWZmZXIgd2FzIGRyb3BwZWQgZHVlIHRvIGNsaXBwaW5nCi0KLTIwMTEtMTAtMjggMTA6Mzc6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBjb2xsZWN0cGFkczI6IE1lcmdlIHRoZSBjbGlwIGFuZCBwcmVwYXJlX2J1ZmZlciBmdW5jdGlvbiBpbnRvIG9uZQotCi0yMDExLTEwLTI4IDEwOjE3OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmg6Ci0JICBjb2xsZWN0cGFkczI6IE1lcmdlIGNsaXBwaW5nIEFQSSBmcm9tIG9sZCBjb2xsZWN0cGFkcwotCi0yMDExLTEwLTI4IDA5OjE5OjI5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IG1ha2UgZGVmYXVsdCBxdWVyeSBmdW5jdGlvbiBuYW1lIHNob3cgdXAgaW4gZ3N0LWluc3BlY3QKLQotMjAxMS0wOS0yNyAxNTo0ODo1MiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmM6Ci0JICBjb2xsZWN0cGFkczI6IGF2b2lkIGhhbmdpbmcgaW4gY2FzZSBvZiBzcGFyc2UgbmV3c2VnbWVudCBldmVudHMKLQkgIC4uLiBpbiB0aGUgZXh0ZW50IHRoYXQgYSBub24td2FpdGluZyBwYWQgKHNvIGluZGljYXRlZCBieSBuZXdzZWdtZW50KQotCSAgdHVybnMgb3V0IHRvIHByb3ZpZGUgdGhlIGJlc3QgYnVmZmVyLCB3aGljaCBpcyB0aGVuIGZvcmNlZCB0byB3YWl0aW5nCi0JICBmb3IgYm9vay1rZWVwaW5nIHB1cnBvc2VzLCBidXQgdGhhdCBzaG91bGQgb25seSBiZSB0ZW1wb3JhcnkuCi0JICBTZWUgYnVnICM0MTU3NTQuCi0KLTIwMTEtMTAtMjggMDk6Mzg6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5jOgotCSAgY29sbGVjdHBhZHMyOiBVc2UgR19ERUZJTkVfVFlQRSBpbnN0ZWFkIG9mIEdTVF9CT0lMRVJQTEFURQotCi0yMDExLTEwLTI4IDA5OjM1OjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBjb2xsZWN0cGFkczI6IEFkZCB0byB0aGUgZG9jdW1lbnRhdGlvbgotCi0yMDExLTEwLTI4IDA5OjI2OjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgd2luMzI6IEFkZCBuZXcgY29sbGVjdHBhZHMyIEFQSQotCi0yMDExLTEwLTI4IDA5OjE4OjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzMi5oOgotCSAgYmFzZTogQWRkIGNvbGxlY3RwYWRzMgotCSAgVGhpcyBoYW5kbGVzIG11eGluZyBvZiBzcGFyc2Uvc3VidGl0bGUgc3RyZWFtcyBhbmQgaGFzCi0JICBsb3RzIG9mIGNsZWFudXAuIFN0aWxsIG1pc3NpbmcgaXMgc3BlY2lhbCBzdXBwb3J0IGZvcgotCSAgbGl2ZSBzdHJlYW1zIGJ1dCB0aGlzIGNhbiBiZSBhZGRlZCBsYXRlciB3aXRob3V0IGJyZWFraW5nCi0JICBBUEkvQUJJLgotCSAgQmFzZWQgb24gdGhlIHZlcnNpb24gZnJvbSB0aGUgdmlkZW9taXhlciBwbHVnaW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE1NzU0Ci0KLTIwMTEtMTAtMjcgMTc6MDk6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jOgotCSAgdGVzdHM6IGZpeCBjb21waWxhdGlvbgotCi0yMDExLTEwLTI3IDE3OjA5OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZQotCi0yMDExLTEwLTI3IDE3OjA5OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkgIGNhcHM6IGFkZCBlbXB0eV9zaW1wbGUgdmFyaWFudHMKLQotMjAxMS0xMC0yNyAxNjo1MToxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSAgdGVzdHM6IGZpeCBjb21waWxhdGlvbgotCi0yMDExLTEwLTI3IDE0OjU2OjI0ICswMTAwICBKb2hhbiBCb3Vsw6kgPGJvaGFuLmdub21lQHJldHJvcGFnYW5kYS5pbmZvPgotCi0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSAgY2FwczogdXNlIEdfR05VQ19OVUxMX1RFUk1JTkFURUQgZm9yIGdzdF9jYXBzX25ld19zaW1wbGUoKSBhbmQgZ3N0X2NhcHNfbmV3X2Z1bGwoKQotCSAgSWYgeW91IGdldCB3YXJuaW5ncywgdXNlIGdzdF9jYXBzX25ld19lbXB0eSgpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MzM0NgotCi0yMDExLTEwLTI3IDE1OjI3OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYwotCi0yMDExLTEwLTI3IDEzOjI1OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSAgc3RydWN0dXJlOiB1c2UgR19HTlVDX05VTExfVEVSTUlOQVRFRCBmb3IgZ3N0X3N0cnVjdHVyZV9uZXcoKQotCSAgSWYgeW91IGdldCBhIHdhcm5pbmcsIHVzZSBnc3Rfc3RydWN0dXJlX2VtcHR5X25ldygpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MzM0NgotCi0yMDExLTEwLTI3IDIzOjA4OjE0ICsxMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogRml4IHJlZmNvdW50IGxlYWsKLQkgIERvbid0IGxlYWsgcGVlcmNhcHMgYW5kIGEgcmVmIHRvIHRoZSBiYXNldHJhbnNmb3JtIHdoZW4gcmV0dXJuaW5nCi0JICB0aGUgY2FjaGVkIGNhcHMuCi0KLTIwMTEtMTAtMjcgMTA6Mzg6MTAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgY29udHJvbGxlcjogZml4IHdyb25nIG9yZGVyIG9mIGNhbGxzIGluIHRoZSBkb2NzLgotCi0yMDExLTEwLTI2IDEyOjIzOjA3ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBjbGFyaWZ5IGRvY3MgZm9yIHN0ZXAgZXZlbnQKLQotMjAxMS0xMC0xOCAyMzoxOTo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGFkZCBzdXBwb3J0IGZvciBHU1RfUkVHSVNUUllfUkVVU0VfUExVR0lOX1NDQU5ORVI9bm8KLQkgIFRoaXMgd2lsbCBtYWtlIHN1cmUgd2Ugc3Bhd24gYSBuZXcgcGx1Z2luIHNjYW5uZXIgaGVscGVyIGZvciBlYWNoIHBsdWdpbgotCSAgdG8gYmUgaW50cm9zcGVjdGVkLCB3aGljaCBoZWxwcyB3aXRoIG1ha2luZyBzdXJlIHdlIGRvbid0IGxvYWQgdG9vIG1hbnkKLQkgIHNoYXJlZCBvYmplY3RzIChsaWJzLCBwbHVnaW5zKSBhdCB0aGUgc2FtZSB0aW1lIG9uIHN5c3RlbXMgd2hlcmUgdGhlcmUKLQkgIGlzIGEgaGFyZCBsaW1pdCBsaWtlIG9uIEFuZHJvaWQuCi0JICBBIGJldHRlciB2ZXJzaW9uIG1pZ2h0IHJlLXVzZSB0aGUgc2Nhbm5lciBmb3IgdXAgdG8gTiB0aW1lcywgdGhvdWdoCi0JICBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoYXQgd291bGQgYWN0dWFsbHkgaW1wcm92ZSB0aGluZ3MgZHJhbWF0aWNhbGx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjA5MQotCi0yMDExLTEwLTIxIDEwOjIzOjA0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBObyBuZWVkIHRvIHJlcXVpcmUgd3JpdGFibGUgY2FwcyBmb3IgX2FwcGVuZC9fbWVyZ2Ugc2Vjb25kIGNhcHMKLQkgIFRoZSBzZWNvbmQgY2FwcyBvd25lcnNoaXAgaXMgdHJhbnNmZXJlZCwgbm8gbmVlZCB0byByZXF1aXJlIGl0IHRvCi0JICBiZSB3cml0YWJsZSBmcm9tIHRoZSBjYWxsZXIgZnVuY3Rpb24uIEluc3RlYWQsIF9hcHBlbmQgYW5kIF9tZXJnZQotCSAgbWFrZSBpdCB3cml0YWJsZSBvbiB0aGVpciBvd24uCi0JICBEaXNjb3ZlcmVkIGJlY2F1c2Ugb2YgYW4gYXNzZXJ0aW9uIG9uIGVuY29kaW5nLXByb2ZpbGUuYyBpbgotCSAgX2dldF9pbnB1dF9jYXBzIHVzaW5nIF9tZXJnZSBidXQgbm90IHBhc3Npbmcgd3JpdGFibGUgY2Fwcy4KLQotMjAxMS0xMC0yMSAxNDoyMDo0MCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSogZ3N0L2dzdHRhZ3NldHRlci5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9hcm0uaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaHBwYS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzMyLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3NwYXJjLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgotCSAgaW50ZXJmYWNlczogY2xlYW4gdXAgdGhlIHVzZSBvZiBpZmFjZSBhbmQgY2xhc3Mva2xhc3MKLQotMjAxMS0xMC0yMSAxMToxNToxMSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3N0YXR1cy0wLjExLTE0LWp1bi0yMDExLnR4dDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgZG9jczogc3BlbGxpbmcgYW5kIGZvcm1hdHRpbmcgZml4ZXMKLQotMjAxMS0xMC0yMSAxMDo1Mjo0NiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdpbmcgb3JpZ2luL21hc3RlcgotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdGJpbi5jCi0JICBnc3QvZ3N0YnVzLmMKLQkgIGdzdC9nc3RkZWJ1Z3V0aWxzLmMKLQkgIGdzdC9nc3RwYWQuYwotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYwotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMKLQotMjAxMS0xMC0yMCAxNjo1OTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBGaXggZG9jdW1lbnRhdGlvbiwgaXQncyBwcmVfcHVzaF9mcmFtZSBhbmQgbm90IHByZV9wdXNoX2J1ZmZlcgotCi0yMDExLTEwLTIwIDE0OjAyOjQ0ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBjYWNoZSB0cmFuc2Zvcm1lZCBjYXBzIHdoZXJlIGFwcHJvcHJpYXRlCi0JICBTcGVlZHMgdXAgbmVnb3RpYXRpb24gYSBmYWlyIGJpdCBvbiBhIGNvbnRyaXZlZCBwaXBlbGluZQotCSAgd2l0aCBhIGRvemVuIGNvbG9yc3BhY2UgY29udmVyc2lvbnMuCi0JICBIb3BlZnVsbHkgY2xlYXJzIG91dCB0aGUgY2FjaGUgZXZlcnkgdGltZSBpdCBvdWdodCB0by4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjIyOTEKLQotMjAxMS0xMC0yMCAxMDo0NTozMCAtMDMwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9AY29sbGFib3JhLmNvbT4KLQotCSogQW5kcm9pZC5tazoKLQkgIEZpeCBicm9rZW4gYW5kcm9pZCBidWlsZGluZyBkdWUgdG8gbmFtZSBjaGFuZ2UgaW4gMDFkODcyNTBhODQ1ZTU1ZDYKLQotMjAxMS0xMC0yMCAwODozMToxOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZWJhcnNlOiBBZGQgZGV0ZWN0IHZmdW5jIHRvIGFsbG93IHN1YmNsYXNzZXMgdG8gZG8gZm9ybWF0IGRldGVjdGlvbiBiZWZvcmUgYW55dGhpbmcgZWxzZQotCSAgQVBJOiBHc3RCYXNlUGFyc2VDbGFzczo6ZGV0ZWN0KCkKLQkgIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIGZpcnN0IGJ1ZmZlcnMgdW50aWwgdGhlIHN1YmNsYXNzIGhhcyBmaW5pc2hlZCBkZXRlY3Rpb24KLQkgIGFuZCBvbmx5IGFmdGVyd2FyZHMgdGhlIG9yaWdpbmFsIGJ1ZmZlcnMgYXJlIGhhbmRsZWQgYXMgYmVmb3JlLiBUaGUgdmZ1bmMgYWxsb3dzCi0JICBkZXRlY3Rpb24gb2YgdGhlIHN0cmVhbSBmb3JtYXQgd2l0aG91dCBicmVha2luZyB0aGUgdXBzdHJlYW0gZnJhbWluZy4KLQotMjAxMS0xMC0yMCAwODo1Nzo1NyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBub3Qgb25seSBkZXNjcmliZSBjb25kaXRpb25zIGluIHRoZSBkb2NzLCBhbHNvIGNoZWNrIHRoZW0gaW4gdGhlIGNvZGUKLQkgIFdoZW4gYmxvY2tpbmcgcGFkcywgY2hlY2sgaWYgdGhlIHBhZCBpcyBpbiB0aGUgcmlndCBkaXJlY3Rpb24uIExvZyBzb21lIGluZm8KLQkgIGZvciB0aGUgZGV2ZWxvcGVyIGFuZCByZXR1cm4gRkFMU0UsIGluc3RlYWQgb2YganVzdCBsb2NraW5nIHVwLgotCi0yMDExLTEwLTE5IDIzOjA3OjQ2ICswMjAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBSZXZlcnQgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIHRvIGNvbnN0IHN0cmluZyByZXR1cm4KLQkgIFJldHVybmluZyBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgbWFrZXMgbm8gc2Vuc2UuIEl0J3MgdW5leHBlY3RlZCBmb3IgYQotCSAgZ2V0dGVyLCBhbmQgYWxzbyB0aGlzIGJlaGF2ZXMgZGlmZmVyZW50bHkgaW4gMC4xMCwgc28gaXQgd291bGQgbWFrZSBmdXR1cmUKLQkgIG1lcmdlcyBoYXJkZXIuCi0JICBFeGNlcHQgZm9yIHRoZXNlIHR3byBwbGFjZXMgaGVyZSBpbiBjb3JlIHdoaWNoIHdlcmUgdXBkYXRlZCBmb3IgdGhlIG5ldwotCSAgc2VtYW50aWMsIHRoZSByZXR1cm4gdmFsdWUgaXMgZ2V0dGluZyBsZWFrZWQgYWxsIG92ZXIgdGhlIHBsYWNlLgotCi0yMDExLTEwLTE5IDEyOjEyOjM2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgZ3N0b2JqZWN0OiBBZGQgKHNraXApIGFubm90YXRpb24gdG8gZ3N0X29iamVjdF9yZWZfc2luawotCi0yMDExLTEwLTE5IDExOjU5OjI5ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBnc3RpdGVyYXRvcjogQWRkIHNraXAgYW5ub3RhdGlvbiBmb3IgY3JlYXRpbmcgR3N0SXRlcmF0b3IKLQkgIE5vdCByZWFsbHkgdXNlZnVsIGZvciBiaW5kaW5ncwotCi0yMDExLTA4LTI5IDEzOjU2OjE5IC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIGludHJvc3BlY3Rpb246IFNraXAgZ3N0X3BvbGwgYXBpcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY0MAotCi0yMDExLTA4LTI5IDEzOjU1OjEzIC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBpbnRyb3NwZWN0aW9uOiBTa2lwIEdUeXBlIGFuZCBHVmFsdWUgdHJhbnNmb3JtIGFwaXMKLQkgIFRoZXNlIGRvIG5vdCBtYWtlIHNlbnNlIHRvIGV4cG9zZSB0byBsYW5ndWFnZSBiaW5kaW5ncwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY0MAotCi0yMDExLTA4LTI5IDEzOjU0OjIxIC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdC5jOgotCSAgaW50cm9zcGVjdGlvbjogU2tpcCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwCi0JICBJdCB1c2VzIEdPcHRpb25Hcm91cCB3aGljaCBpcyBub3Qgd3JhcHBhYmxlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3NjQwCi0KLTIwMTEtMDgtMjkgMTM6NTM6MzkgLTAzMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKLQkgIGludHJvc3BlY3Rpb246IEFkZCBtaXNzaW5nIGFubm90YXRpb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3NjQwCi0KLTIwMTEtMDgtMjkgMTM6NTI6MjYgLTAzMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBpbnRyb3NwZWN0aW9uOiBSZW5hbWUgZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCB0byBnc3RfYnVzX2FkZF93YXRjaAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY0MAotCi0yMDExLTA4LTI5IDEzOjUwOjQwIC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdGluZGV4Lmg6Ci0JICBTeW5jIGRvY3VtZW50YXRpb24gYXJndW1lbnRzCi0JICBUaGUgaW50cm9zcGVjdGlvbiBzY2FubmVyIHdhcm5zIGlmIHRoZSBoZWFkZXIgYW5kIHRoZSBzb3VyY2UKLQkgIHVzZXMgbWlzbWF0Y2hpbmcgcGFyYW1ldGVyIG5hbWVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY0MAotCi0yMDExLTA4LTI5IDEzOjUwOjAyIC0wMzAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgZ3N0X3N0cnVjdHVyZV9nZXRfdHlwZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzY0MAotCi0yMDExLTEwLTE4IDE5OjIxOjU4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBwcm90ZWN0IGFnYWluc3QgbnVsbCBtZXNzYWdlIHNvdXJjZXMKLQkgIE1lc3NhZ2Ugc291cmNlcyBjYW4gYmUgbnVsbCwgY2hlY2sgaWYgaXQgaXMgYmVmb3JlIHRyeWluZyB0bwotCSAgYWNjZXNzIGl0cyBuYW1lLgotCi0yMDExLTEwLTE4IDA4OjQ4OjM3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGFkZCBzaW5jZSBkb2MgdG8gbmV3IGdldGNhcHMgZnVuY3Rpb24KLQotMjAxMS0xMC0xOCAxNDowODoxOSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGxvZ2dpbmc6IG1vcmUgbG9nZ2luZyBhbmQgcHJlZmVyIGh1bWFuIHJlYWRhYmxlIGRldGFpbHMgb3ZlciBtZW1vcnkgbG9jYXRpb25zCi0KLTIwMTEtMTAtMTggMTQ6MDU6MzcgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBkZWJ1Z3V0aWxzOiBpbXByb3ZlIGRpc3BsYXkgb2YgZ2hvc3QtIGFuZCBwcm94eXBhZHMKLQkgIEhhbmRsZSB2aXJ0dWFsIGxpbmtzIGJldHdlZW4gZ2hvc3QgYW5kIHByb3h5cGFkcyB3aGVuIGl0ZXJhdGluZyBwYWRzIGluc3RlYWQgb2YKLQkgIHdoZW4gbGlua2luZy4gQmVzaWRlcyB1c2luZyBsZXNzIGNvZGUgdGhpcyBwcm92aWRlcyBhIG1vcmUgYWNjdXJhdGUgcGljdHVyZS4KLQotMjAxMS0xMC0xOCAxMzo1NDo1MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIGNvbnRyb2xsZXI6IEFkZCBnLWkgYW5ub3RhdGlvbnMgYW5kIHJlbW92ZSAiU2luY2U6IiBtYXJrZXJzCi0KLTIwMTEtMTAtMTcgMTQ6NDI6MDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGFkZCBnZXRjYXBzIGZ1bmN0aW9uCi0JICBBZGRzIGEgZ2V0Y2FwcyBmdW5jdGlvbiB0byB0aGUgc2luayBwYWQgdG8gbWFrZSBwYXJzZXJzIHByb3BhZ2F0ZQotCSAgZG93bnN0cmVhbSBjYXBzIHJlc3RyaWN0aW9ucyB0byB1cHN0cmVhbS4KLQkgIFRoZSBwaXBlbGluZSAiYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMCAhIGZhYWMgISBhYWNwYXJzZSAhCi0JICAiYXVkaW8vbXBlZywgdmVyc2lvbj0oaW50KTQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhZHRzIiAhIGZpbGVzaW5rIgotCSAgd291bGRuJ3Qgd29yayBiZWNhdXNlIGFhY3BhcnNlIHdvdWxkbid0IHByb3BhZ2F0ZSB0aGUgYWR0cyByZXN0cmljdGlvbgotCSAgdXBzdHJlYW0gdG8gZmFhYy4KLQkgIFRoaXMgcGF0Y2ggYWRkcyBhIGRlZmF1bHQgZ2V0Y2FwcyB0byB0aGUgc2luayBwYWQgdG8gc2ltcGx5IHByb3h5Ci0JICBkb3duc3RyZWFtIGNhcHMgYW5kIGFsc28gYWRkcyBhICdnZXRfc2lua19jYXBzJyBmdW5jdGlvbiBwb2ludGVyCi0JICB0byBHc3RCYXNlUGFyc2VDbGFzcyBmb3Igc3ViY2xhc3NlcyB0aGF0IG5lZWQgbW9yZSByZWZpbmVkIGdldGNhcHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxODc0Ci0KLTIwMTEtMTAtMTggMTI6Mzk6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogYWxzbyB1cGRhdGUgdGhlIHN0cmVhbSB0aW1lCi0KLTIwMTEtMTAtMTggMTA6NTg6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBGaXggaGFuZGxpbmcgb2YgcXVldWVkIGZyYW1lcwotCSAgZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSgpIGFscmVhZHkgZnJlZXMgdGhlIGZyYW1lLCBubyBuZWVkIHRvCi0JICBkbyBpdCBhbm90aGVyIHRpbWUgYWdhaW4uCi0KLTIwMTEtMTAtMTcgMjE6Mzg6NTYgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JICB0ZXN0czogZml4IHBhZHRlbXBsYXRlIGxlYWsgaW4gc2VsZWN0b3IgdGVzdAotCSAgSW4gMC4xMSwgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlIHJldHVybnMgYSByZWZlcmVuY2UuCi0KLTIwMTEtMTAtMTcgMjE6Mzc6MTcgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IGJ1ZmZlci9ldmVudCBsZWFrIHdoZW4gcGFkIGlzIGZsdXNoaW5nCi0JICBBcHBhcmVudGx5IHRoaXMgZ290IGxvc3Qgd2hpbGUgcmVmYWN0b3JpbmcgcHJvYmVzLgotCi0yMDExLTEwLTE3IDE3OjAwOjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiByZW1vdmUgdGhlIG1lbW9yeSBmcm9tIHRoZSB0bXBidWYKLQkgIFdlIHVzZSBhIHRtcGJ1ZiB0byBob2xkIGEgdGVtcG9yYXJ5IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgbWVtb3J5LiBXZSBuZWVkIHRvCi0JICByZW1vdmUgdGhhdCBtZW1vcnkgd2hlbiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KLQotMjAxMS0xMC0xNyAxMzo1NTozNSArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGZpeCByYWNlIGNvbmRpdGlvbiBhbmQgbWVtb3J5IGxlYWsgaW4gZ3N0X3N0YXRpY19jYXBzX2dldAotCSAgVGhpcyB3YXMgbGVha2luZyB0aGUgUHRyQXJyYXkgZnJvbSBjYXBzLT5wcml2LCBhcyBzZXQgdXAgYnkgdGhlIG90aGVyIGNhbGwgdG8KLQkgIGdzdF9jYXBzX2luaXQuIEFsc28sIHRoZSB0aHJlYWQgc2FmZXR5IGlzc3VlIHByZXNlbnRlZCBpbiB0aGUgY29tbWVudCBhYm92ZSB3YXMKLQkgIG5vdCB0YWtlbiBjYXJlIG9mIGFueW1vcmUuIFdlIG5vdyB6ZXJvIHRoZSByZWZjb3VudCBhZ2FpbiB3aGVuIHB1Ymxpc2hpbmcgdGhlCi0JICBzdHJ1Y3R1cmUuCi0JICBGaXhlcyAjNjYxNjI5LgotCi0yMDExLTEwLTE3IDA5OjI4OjQzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGdzdGNoZWNrOiBNYWtlIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCBtb3JlIHVzZWZ1bAotCSAga25vd2luZyB3aGljaCBtaW5pb2JqZWN0IGZhaWxlZCBoZWxwcyB1cyBsb2NhdGUgaXQgaW4gZGVidWcgbG9ncwotCi0yMDExLTEwLTE3IDA5OjI4OjI0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGdzdGNoZWNrOiBNYWtlIF9jaGVja19idWZmZXJfZGF0YSBhIGJpdCBtb3JlIHZlcmJvc2UKLQotMjAxMS0xMC0xNyAwOToyNzo0OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RyZWdpc3RyeS5jOgotCSAgY2hlY2s6IERvbid0IGxlYWsgdGhlIGZlYXR1cmUgbmFtZQotCi0yMDExLTEwLTE3IDA5OjI3OjI2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBnc3RyZWdpc3RyeTogRG9uJ3QgbGVhayBmZWF0dXJlIG5hbWUKLQotMjAxMS0xMC0xNiAyMToxMjowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogZ2l2ZSB3YXRjaCBzb3VyY2UgYSBuYW1lCi0JICBHaXZlIG91ciBHU291cmNlIGEgbWVhbmluZ2Z1bCBuYW1lLiBTb3VyY2UgbmFtZXMgY2FuIGJlCi0JICB1c2VkIGZvciBkZWJ1Z2dpbmcgYW5kIHByb2ZpbGluZywgZm9yIGV4YW1wbGUgd2l0aAotCSAgc3lzdGVtdGFwIG9yIGdkYi4KLQotMjAxMS0xMC0xNCAwOTozNTowOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZ3N0YnVmZmVyOiBBZGQgdHJhbnNmZXIgYW5ub3RhdGlvbnMgZm9yIGdzdF9idWZmZXJfam9pbigpCi0KLTIwMTEtMTAtMTYgMTc6NDI6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlCi0KLTIwMTEtMTAtMTYgMTc6MDM6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlCi0KLTIwMTEtMTAtMTYgMTc6MDA6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmcgbGlzdAotCi0yMDExLTEwLTE2IDE0OjQ1OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RpbmRleC5jOgotCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkgIGZpeCBtb3JlIHBhcmVudF9jbGFzcwotCi0yMDExLTEwLTE2IDE0OjIwOjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0ZXZlbnQuaAotCi0yMDExLTEwLTE2IDE0OjE3OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIHBhZHRlbXBsYXRlOiBjbGVhbiB1cCBwYXJlbnRfY2xhc3MKLQotMjAxMS0xMC0xNCAxMjo1NzozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBjbGVhbiB1cCBwYXJlbnRfY2xhc3MgaGFuZGxpbmcKLQotMjAxMS0xMC0xNCAwOTozNTowOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZ3N0YnVmZmVyOiBBZGQgdHJhbnNmZXIgYW5ub3RhdGlvbnMgZm9yIGdzdF9idWZmZXJfam9pbigpCi0KLTIwMTEtMTAtMTQgMDk6Mjc6MzggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IERvbid0IGxlYWsgcGx1Z2luIGZlYXR1cmUgbGlzdAotCi0yMDExLTEwLTEzIDE3OjMzOjA2ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IGZpeCB0eXBvIGluIHRoZSBkb2NzCi0KLTIwMTEtMTAtMTMgMTY6NDg6MDIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBkZWJ1Z3V0aWxzOiBzaG93IGlmIGFuIGVsZW1lbnQgaXMgc3RhdGUtbG9ja2VkCi0KLTIwMTEtMTAtMTMgMTY6NDI6MTAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGxvZ2dpbmc6IHVzZSBfT0JKRUNUIHZhcmlhbnRzIG1vcmUKLQotMjAxMS0xMC0xMyAxMjoyMzo1OSArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBmaXggY2FwcyBsZWFrCi0KLTIwMTEtMTAtMTMgMTA6MTk6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IFVzZSBhbiBpbmxpbmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIG1hY3JvIGZvciBnc3RfYnVmZmVyX3JlcGxhY2UoKQotCSAgVGhpcyBnaXZlcyB1cyB0eXBlIGNoZWNrcyBieSB0aGUgY29tcGlsZXIgYW5kIG1vcmUgdXNlZnVsIGNvbXBpbGVyIGVycm9ycy4KLQotMjAxMS0xMC0xMyAxMDoxODo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5oOgotCSAgZXZlbnQ6IFVzZSBhbiBpbmxpbmUgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIG1hY3JvIGZvciBnc3RfZXZlbnRfcmVwbGFjZSgpCi0JICBUaGlzIGdpdmVzIHVzIHR5cGUgY2hlY2tzIGJ5IHRoZSBjb21waWxlciBhbmQgbW9yZSB1c2VmdWwgY29tcGlsZXIgZXJyb3JzLgotCi0yMDExLTEwLTEzIDA4OjUxOjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0dXRpbHMuYwotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMKLQotMjAxMS0xMC0xMiAxODoxNDowMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBEbyBub3QgdW5yZWYgdGhlIGludGVybmFsIHBhZCB0d2ljZQotCSAgZ192YWx1ZV91bnNldCBzaG91bGQgYWxyZWFkeSB1bnJlZiB0aGUgaW50ZXJuYWwgcHJveHlwYWQsIG5vCi0JICBuZWVkIHRvIGRvIGl0IGFnYWluCi0KLTIwMTEtMTAtMTIgMTc6MTc6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogcHJvcGVybHkgYWRqdXN0IHN0YXJ0IHRpbWUKLQkgIFdoZW4gd2UgZG8gYSBub24tZmx1c2hpbmcgc2VlayBhbmQgY2xvc2VkIHRoZSBjdXJyZW50IHNlZ21lbnQsCi0JICBtYWtlIHN1cmUgdGhhdCB3ZSBvcGVuIHRoZSBuZXh0IHNlZ21lbnQgZnJvbSB3aGVyZSB3ZSBjbG9zZWQuCi0KLTIwMTEtMTAtMTIgMTQ6Mzc6MzEgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IGFkZCB0cmFuc2ZlciB0eXBlIGZvciBnc3RfZXZlbnRfbmV3X2NhcHMgYXJndW1lbnQKLQkgIFRoZXNlIGFubm90YXRpb25zIGFyZSB1c2VmdWwgdG8gaHVtYW5zIGFzIHdlbGwuLi4KLQotMjAxMS0xMC0xMiAxNDozNDoyNCArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBmaXggY2FwcyBsZWFrCi0JICBnc3RfZXZlbnRfbmV3X2NhcHMgZG9lcyBub3Qgc3RlYWwgYSByZWZlcmVuY2UgdG8gdGhlIGNhcHMuCi0KLTIwMTEtMTAtMTIgMTM6MzE6NDggKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IGZpeCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgdHJhbnNmZXIgdHlwZQotCi0yMDExLTEwLTExIDEzOjU0OjQ1ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdGVzdHM6IEZpeCBtb3JlIGxlYWtzCi0KLTIwMTEtMTAtMTEgMTM6NTM6MzkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIGNhcHNmaWx0ZXI6IERvbid0IGxlYWsgY2FwcwotCi0yMDExLTEwLTExIDEzOjUxOjU0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBGaXggYSBjYXBzIGxlYWsgYW5kIG1vdmUgYSBjb2RlYmxvY2sKLQkgIFRoZSByZXN1bHQgZnJvbSB0aGUgYmxvY2sgb2YgY29kZSB0aGF0IHdhcyBtb3ZlZCB3b3VsZCBvbmx5IGhhdmUKLQkgIGJlZW4gdXNlZCBpZiAncGVlcmNhcHMnIHdhcyBwcmVzZW50LgotCi0yMDExLTEwLTExIDEzOjUxOjM3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdDogTW9yZSAndHJhbnNmZXInIGFubm90YXRpb25zCi0KLTIwMTEtMTAtMTAgMTk6NDE6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBjYXRjaCBpbnZhbGlkIGluc3RhbmNlIHNpemVzIGluIGdzdF90eXBlX3JlZ2lzdGVyX3N0YXRpY19mdWxsKCkKLQkgIEFkZCBndWFyZHMgdG8gY2F0Y2ggb3Zlcmx5IGxhcmdlIGluc3RhbmNlIHNpemVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDk1NQotCi0yMDExLTEwLTEwIDE5OjMwOjM0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHV0aWxzOiByZW1vdmUgZ3N0X3R5cGVfcmVnaXN0ZXJfc3RhdGljX2Z1bGwoKQotCSAgSXQgd2FzIG9ubHkgcmVhbGx5IHVzZWQgYnkgR1NUX0JPSUxFUlBMQVRFLCBhbmQgdGhhdCBpcyBubyBtb3JlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDk1NQotCi0yMDExLTEwLTEwIDExOjQ3OjQyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogYXZvaWQgdHJ5aW5nIHRvIGFsbG9jIGVub3Jtb3VzIGJ1ZmZlcgotCSAgSWYgYSBjbGFzcyBleHRlbmRpbmcgYmFzZXNyYyBkb2Vzbid0IHNldCBibG9ja3NpemUsIGJhc2VzcmMKLQkgIHdvdWxkIHRyeSB0byBhbGxvY2F0ZSBhIChndWludCktMSBzaXplZCBidWZmZXIsIHdoaWNoIGlzIGVub3Jtb3VzCi0JICBhbmQgbGlrZWx5IHdvdWxkIGZhaWwuCi0JICBBdm9pZCBpdCBhbmQgZXJyb3Igb3V0LgotCi0yMDExLTEwLTEwIDE3OjE3OjM3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vd3RheS9wb3J0aW5nLWxpc3QtMC4xMS50eHQ6Ci0JICBwb3J0aW5nOiB1cGRhdGUKLQotMjAxMS0xMC0xMCAxNzowNDozOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IElmIHdlIGRvbid0IGNvbnRyb2wgYSBwYWQvdGVtcGxhdGUsIHJldHVybiBwcm9wZXIgY2FwcwotCSAgSWYgdGhlcmUncyBhIGZpbHRlciwgd2UgY2FuIHJldHVybiB0aGF0IGluIF9nZXRfY2FwcygpCi0KLTIwMTEtMTAtMTAgMTY6NTI6NDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBnc3RwYWQ6IFNwZWNpZnkgdHJhbnNmZXIgZnVsbCBmb3IgZ3N0X3BhZF9nZXRfY2FwcygpCi0JICBJdCBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHJldHVybmVkIGNhcHMuCi0KLTIwMTEtMTAtMTAgMTE6MDI6MDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBnc3RwYWQ6IEFkZCBkZWJ1ZyB0byBrbm93IHdoYXQgZXZlbnRzIGFyZSB0cmFuc2ZlcnJlZCBiZXR3ZWVuIHBhZHMKLQotMjAxMS0xMC0xMCAxMDozODoxMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGdzdHBhZDogVW5zZXQgRU9TIGV2ZW50IG9uIEZMVVNIX1NUT1AKLQotMjAxMS0xMC0wNyAxMTo0OToxOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGdzdHBhZDogRG9uJ3QgaWdub3JlIGRvd25zdHJlYW0gRmxvd1JldHVybiB3aXRoIElETEUgcHJvYmVzCi0JICBJZiBwdXNoZ2luIGRvd25zdHJlYW0gcmV0dXJuZWQgYSBub24tb2sgdmFsdWUgKGxpa2UgR1NUX0ZMT1dfV1JPTkdfU1RBVEUpLAotCSAgd2UgZG9uJ3Qgd2FudCB0byBlbmQgdXAgcmV0dXJuaW5nIGEgZGlmZmVyZW50IHZhbHVlIChHU1RfRkxPV19PSyBpbiB0aGlzCi0JICBjYXNlKSBpZiBJRExFIHByb2JlcyBhcmUgcHJlc2VudC4KLQotMjAxMS0xMC0xMCAxMzoyMzowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vd3RheS9wb3J0aW5nLWxpc3QtMC4xMS50eHQ6Ci0JICBwb3J0aW5nOiB1cGRhdGUKLQotMjAxMS0xMC0xMCAxMjo1NDo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vd3RheS9wb3J0aW5nLWxpc3QtMC4xMS50eHQ6Ci0JICBwb3J0aW5nOiB1cGRhdGUKLQotMjAxMS0xMC0xMCAxMjozODozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vd3RheS9wb3J0aW5nLWxpc3QtMC4xMS50eHQ6Ci0JICBwb3J0aW5nOiB1cGRhdGUKLQotMjAxMS0xMC0xMCAxMjoyNzo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vd3RheS9wb3J0aW5nLWxpc3QtMC4xMS50eHQ6Ci0JICBwb3J0aW5nOiB1cGRhdGUKLQotMjAxMS0xMC0xMCAxMTo0OTo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vd3RheS9wb3J0aW5nLWxpc3QtMC4xMS50eHQ6Ci0JICBwb3J0aW5nOiB1cGRhdGUKLQotMjAxMS0xMC0xMCAxMTozNjoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSAgY29tcGF0OiBhZGQgY29tcGF0IGRlZmluZSBmb3IgVU5FWFBFQ1RFRAotCi0yMDExLTEwLTEwIDExOjMzOjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEdTVF9GTE9XX1VORVhQRUNURUQgLT4gR1NUX0ZMT1dfRU9TCi0KLTIwMTEtMTAtMTAgMTE6MzA6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlCi0KLTIwMTEtMTAtMDkgMTE6NDk6NDUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JICB0ZXN0czogdGVlOiBSZW1lbWJlciB0byBpbml0aWFsaXplIHZhcmlhYmxlcyB0byBOVUxMCi0JICBhcHBfdGhyZWFkIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIHRvIE5VTEwsIG90aGVyd2lzZSB0ZXN0cwotCSAgd2lsbCB0cnkgdG8gdXNlIGl0IGFuZCBjcmFzaAotCi0yMDExLTEwLTA4IDIwOjU2OjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgVXBkYXRlIGNvbW1vbiBmb3IgY2hlY2stZXhwb3J0cyBzY3JpcHQgY2hhbmdlcwotCi0yMDExLTEwLTA4IDIwOjQ2OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBlbGVtZW50ZmFjdG9yeTogZG9uJ3QgZXhwb3J0IHByaXZhdGUgX2dzdF9lbGVtZW50Y2xhc3NfZmFjdG9yeSBxdWFyawotCi0yMDExLTEwLTA4IDIwOjE1OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGluZm86IG1ha2UgX2dzdF9kZWJ1Z19pbml0KCkgcHJpdmF0ZSBmb3Igbm93Ci0JICBUaGlzIHdhcyBhIEZJWE1FIGZvciAwLjExLiBJIGd1ZXNzIGEgY2FzZSBjb3VsZCBiZSBtYWRlIHRvIGtlZXAgaXQgYXJvdW5kCi0JICBzZXBhcmF0ZWx5IGZvciBhcHBzIG9yIGxpYnJhcmllcyB0aGF0IG9ubHkgd2FudCB0byB1c2UgR1N0cmVhbWVyJ3MgZGVidWdnaW5nCi0JICBzeXN0ZW0sIGJ1dCBpdCBzZWVtcyBtb3JlIGxpa2VseSB0aGV5J2QganVzdCBjb3B5IHRoZSB0d28gc291cmNlIGZpbGVzIGludG8KLQkgIHRoZWlyIG93biB0cmVlIGlmIHRoZSBjYXNlLiBBbHNvLCB0aGluZ3MgbGlrZSB0eXBlcyB3b3VsZG4ndCBiZSBpbml0aWFsaXNlZAotCSAgd2l0aG91dCBnc3RfaW5pdCgpLiBXZSBjYW4gc3RpbGwgbWFrZSBpdCBwdWJsaWMgYWdhaW4gaWYgYW55b25lIG5lZWRzIGl0LAotCSAgYnV0IHRoZW4gd2Ugc2hvdWxkIG1ha2UgaXQgYSBwcm9wZXIgZnVuY3Rpb24gYW5kIG5vdCBoaWRlIGl0IGJlaGluZAotCSAgdW5kZXJzY29yZXMuCi0KLTIwMTEtMTAtMDggMTk6NTQ6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIHN5bWJvbC1leHBvcnRzCi0KLTIwMTEtMTAtMDggMTQ6MTc6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkqIGdzdC9wYXJzZS8uZ2l0aWdub3JlOgotCSogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkqIGdzdC9wYXJzZS90eXBlcy5oOgotCSAgZ3N0cGFyc2U6IHByZWZpeCBnZW5lcmF0ZWQgcGFyc2VyIGZ1bmN0aW9ucyBzbyB0aGV5IGRvbid0IGdldCBleHBvcnRlZAotCSAgRG9uJ3QgZXhwb3J0IHRob3NlIDM1LXNvbWV0aGluZyByYW5kb20gX2dzdF9wYXJzZV95eSogc3ltYm9scy4gVGhlc2Ugd2VyZQotCSAgbmV2ZXIgaW4gYW55IGhlYWRlciBmaWxlcyBhbmQgYWxzbyBibGFja2xpc3RlZCBmcm9tIG91ciAuZGVmIGZpbGVzLCBpbgotCSAgY2FzZSBhbnlvbmUgd29uZGVycy4KLQotMjAxMS0xMC0wOCAxMzozNzowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBpbmZvOiByZW5hbWUgX19nc3RfZGVidWdfKiB0byBfZ3N0X2RlYnVnXyogYW5kIGZpeCBzeW1ib2wgZXhwb3J0IHJlZ2V4cAotCSAgT25seSBleHBvcnQgR1N0cmVhbWVyIHN5bWJvbHMgd2l0aCBvbmUgbGVhZGluZyB1bmRlcnNjb3JlLCBub3QgdHdvCi0JICBvciBtb3JlIGxlYWRpbmcgdW5kZXJzY29yZXMuCi0JICBSZXF1aXJlcyBhIHJlYnVpbGQgb2YgdGhlIGVudGlyZSBzdGFjaywgc29ycnkuCi0KLTIwMTEtMTAtMDggMTU6MTY6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIGRvYwotCi0yMDExLTEwLTA4IDE0OjI1OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTAtMDggMTQ6MjM6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlCi0KLTIwMTEtMTAtMDggMTI6MDg6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBhdGUgcG9ydGluZyBsaXN0Ci0KLTIwMTEtMTAtMDggMDk6NDE6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0xMC0wOCAwOToyODowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdHBhZC5jCi0KLTIwMTEtMTAtMDcgMDk6NDU6MjAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBwaXBlbGluZTogVXNlIHBpcGVsaW5lIGNhdGVnb3J5IGZvciBvbmUgbW9yZSBsb2cgbWVzc2FnZQotCSAgTWFrZXMgZGVidWdnaW5nIGVhc2llci4KLQotMjAxMS0xMC0wNyAxNjozNjoxMCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSAgR1NUX1BUUl9GT1JNQVQ6IEFkZCBHc3RCdWZmZXIgcHRyIGZvcm1hdCBhbmQgdXNlIGluIEdTVF9TQ0hFRFVMSU5HCi0JICBHc3RCdWZmZXIgcG9pbnRlcnMgY2FuIG5vdyBiZSBwcmludGVkIHVzaW5nIEdTVF9QVFJfRk9STUFULiBUaGlzIGlzIHVzZWQKLQkgIGluIHRoZSB2ZXJ5IHVzZWZ1bCBHU1RfU0NIRURVTElORyBkZWJ1ZyBsb2dzIGluIGdzdHBhZC5jIGFuZCBhbGxvd3MgZm9yCi0JICBlYXNpZXIgYW5kIG1vcmUgaW5mb3JtYXRpb24gdHJhY2tpbmcgb2YgYnVmZmVyIHByb2dyZXNzIHRocm91Z2ggYQotCSAgcGlwZWxpbmUgd2l0aCBqdXN0IGRlYnVnIGxvZ2dpbmcuCi0KLTIwMTEtMTAtMDcgMTM6NTU6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JICB0ZXN0czogZml4IGNvbXBpbGVyIHdhcm5pbmdzIGluIHNpbmtzIHRlc3QKLQotMjAxMS0xMC0wNyAxMzo1NDo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGRhdGFxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RkYXRhcXVldWUuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3RsaWJzY3BwLmNjOgotCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBiYXNlOiBtYWtlIEdzdERhdGFRdWV1ZSBwcml2YXRlIEFQSSBmb3IgbXVsdGlxdWV1ZQotCSAgVGhlcmUncyBubyBjb2RlIHRoYXQgdXNlcyBpdCBvdGhlciB0aGFuIG11bHRpcXVldWUsIHNvIG1ha2UgaXQgcHJpdmF0ZQotCSAgdG8gbXVsdGlxdWV1ZSBmb3Igbm93LiBUaGF0IHdheSB3ZSBjYW4gYWxzbyBkbyBvcHRpbWlzYXRpb25zIHRoYXQKLQkgIHJlcXVpcmUgQVBJL0FCSSBicmVha3MuIElmIGFueW9uZSBldmVyIHdhbnRzIHRvIHVzZSBpdCwgd2UgY2FuIHN0aWxsCi0JICBtYWtlIGl0IHB1YmxpYyBhZ2Fpbi4KLQotMjAxMS0xMC0wNiAxNzoyNzo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTEwLTA2IDE3OjI2OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS93dGF5L3BvcnRpbmctbGlzdC0wLjExLnR4dDoKLQkgIHBvcnRpbmc6IHVwZGF0ZSBsaXN0Ci0KLTIwMTEtMTAtMDYgMTQ6MzQ6MDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzZW5kIGR1cmF0aW9uIG1lc3NhZ2Ugd2hlbiB1cGRhdGluZyBpbnRlcm5hbCBkdXJhdGlvbgotCi0yMDExLTEwLTA2IDE0OjA0OjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS93dGF5L3BvcnRpbmctbGlzdC0wLjExLnR4dDoKLQkgIHBvcnRpbmc6IHVwZGF0ZSBsaXN0Ci0KLTIwMTEtMTAtMDYgMTA6NTk6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgdXBkYXRlIHBvcnRpbmcgbGlzdAotCi0yMDExLTEwLTA1IDIwOjA2OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS93dGF5L3BvcnRpbmctbGlzdC0wLjExLnR4dDoKLQkgIHBvcnRpbmc6IHVwZGF0ZSBsaXN0Ci0KLTIwMTEtMTAtMDUgMTM6NDM6NDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmcgc3RhdHVzCi0KLTIwMTEtMTAtMDUgMTE6MjA6MzcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgZ3N0YnVmZmVycG9vbDogVXNlIGdsaWIgY29tcGF0IG1hY3JvcyBmb3IgYXRvbWljIHBvaW50ZXJzCi0KLTIwMTEtMTAtMDQgMTg6NTU6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgdXBkYXRlIHBvcnRpbmcgbGlzdAotCi0yMDExLTEwLTA0IDE4OjU1OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGltcHJvdmUgZG9jcwotCi0yMDExLTEwLTA0IDE3OjM5OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTAtMDQgMTc6MzY6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcG9ydGluZy1saXN0LTAuMTEudHh0OgotCSAgdXBkYXRlIHBvcnRpbmcgbGlzdAotCi0yMDExLTEwLTA0IDE1OjU1OjA1ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBnc3RldmVudDogc3BlY2lmeSAodHJhbnNmZXIpIGZvciBnc3RfZXZlbnRfbmV3X3NlZ21lbnQKLQotMjAxMS0xMC0wNCAxMzoxNjoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vd3RheS9wb3J0aW5nLWxpc3QtMC4xMS50eHQ6Ci0JICBhZGQgcG9ydGluZyBsaXN0Ci0KLTIwMTEtMDktMjYgMTQ6MzY6NDYgKzA0MDAgIFN0YXMgU2VyZ2VldiA8c3RzcEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IFJldHVybiBzdWNjZXNzIGlmIG9wdGlvbmFsIHN0YXJ0L3N0b3AgbWV0aG9kIGlzIG5vdCBwcm92aWRlZAotCSAgVGhpcyBhbGxvd3MgdG8gbm90IGltcGxlbWVudCB0aGUgb3B0aW9uYWwgc3RhcnQvc3RvcCBtZXRob2RzLgotCi0yMDExLTEwLTAzIDEwOjA2OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jCi0KLTIwMTEtMTAtMDMgMDk6Mjk6MTAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIGdzdHF1ZXJ5OiBNYWtlIGRlYnVnZ2luZyBtZXNzYWdlIG1vcmUgaW5mb3JtYXRpdmUKLQkgIEZvciBhbGwgdGhlIG5ld2NvbWVycyBvdXQgdGhlcmUgd2hvIHN0aWxsIGRvbid0IGtub3cgdGhlIHZhbHVlcyBvZgotCSAgR3N0UXVlcnlUeXBlIGVudW0gYnkgaGVhcnQuLi4KLQkgIC4uLiBhbmQgb2xkLXRpbWVycyB3aG8ndmUgZ290IGJldHRlciB0aGluZ3MgdG8gZG8gOikKLQotMjAxMS0wOS0zMCAxNToyNToyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG1ha2UgZXN0aW1hdGluZyB0aGUgcG9zaXRpb24gaW4gcXVlcnkgaGFuZGxlciBhY3R1YWxseSB3b3JrCi0JICBObyBwb2ludCBlc3RpbWF0aW5nIGlmIHdlIGRvbid0IHNldCB0aGUgcmVzdWx0IGFmdGVyd2FyZHMuCi0KLTIwMTEtMDktMjYgMTM6MTQ6NDIgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBhbnN3ZXIgcG9zaXRpb24gcXVlcnkgaW4gc3RyZWFtIHRpbWUgYW5kIHRyeSB1cHN0cmVhbSBmaXJzdAotCSAgTGV0IHRoZSBkZW11eGVyIGhhdmUgZmlyc3Qgc2F5IGFzIHdlbGwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU5NDg1Ci0KLTIwMTEtMDktMzAgMTQ6NTI6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Lmg6Ci0JICBnc3QuaDogaW5jbHVkZSBoZWFkZXIgZm9yIGF0b21pYyBxdWV1ZQotCi0yMDExLTA5LTMwIDE0OjUwOjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSAgdGVzdHM6IGFkZCBtaW5pbWFsIHRlc3QgZm9yIEdzdEF0b21pY1F1ZXVlCi0JICBKdXN0IG5ldyArIGZyZWUuCi0KLTIwMTEtMDktMjkgMTg6MDY6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JICB1cGRhdGUgcmVsZWFzZSBub3RlcwotCSAgQ2hhbmdlIHRoZSBtYWlsIGFkZHJlc3NlcyB0byB0aGUgZnJlZWRlc2t0b3Agb25lcwotCi0yMDExLTA5LTI5IDE3OjA0OjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgYmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjExLjEgPT09Ci0KLTIwMTEtMDktMjkgMTY6NTA6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSRUxFQVNFIDAuMTEuMQotCi0yMDExLTA5LTI4IDE4OjQ2OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JICBtZW1vcnk6IGZpeCBtZW1vcnkgYWxpZ25tZW50Ci0JICBGaXggY29tcGlsYXRpb24gd2hlbiBQT1NJWF9NRU1BTElHTiBpcyBub3Qgc2V0LgotCSAgRGVidWcgdGhlIGNvbmZpZ3VyZWQgYWxpZ25tZW50LgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDMwMAotCi0yMDExLTA5LTI4IDE4OjQ0OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGltcHJvdmUgZGVidWcKLQotMjAxMS0wOS0yOCAxMToyODoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICB0cmFuc2Zvcm06IGZpeCBhZnRlciBtZXJnZQotCi0yMDExLTA5LTI4IDExOjI0OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDktMjggMTE6MTY6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBkb2NzOiBmaXggc29tZSBtb3JlIGRvY3MKLQotMjAxMS0wOS0yNiAxOTo1MjoxMyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogc2VuZCBkZWxheWVkIGV2ZW50cyBlYXJsaWVyCi0JICBTb21lIGVsZW1lbnRzIChzdWNoIGFzIHZpZGVvcmF0ZSkgbWlnaHQgcHVzaCBidWZmZXJzIGVhcmx5LAotCSAgZm9yIGluc3RhbmNlIGluIGluIHRyYW5zZm9ybV9pcC4gV2Ugd2FudCBldmVudHMgKGFuZCBpbiBwYXJ0aWN1bGFyCi0JICBhbnkgTkVXU0VHTUVOVCBldmVudCkgdG8gYmUgcHVzaGVkIGJlZm9yZSB0aGF0LgotCSAgVGhpcyBmaXhlcyB0cmFuc21hZ2VkZG9uIHdlZGdpbmcgb24gY29udmVydGluZyBhIGZpbGUgc3RhcnRpbmcKLQkgIHdpdGggYSBub24gemVybyBvZmZzZXQgdG8gT2dnLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDE2NQotCi0yMDExLTA5LTI2IDIwOjQ3OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuaDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIGRvY3M6IGZpeCBkb2NzCi0KLTIwMTEtMDktMjYgMTk6MjU6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wOS0yNiAxOToyNDoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIHNlZ21lbnQ6IGltcHJvdmUgQVBJIGRvY3MgYSBsaXR0bGUKLQotMjAxMS0wOS0yNiAwMDozMDo0NyArMDMwMCAgUmFpbW8gSsOkcnZpIDxyYWltby5qYXJ2aUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgZ3N0OiBGaXggY29tcGlsZXIgd2FybmluZ3Mgb24gNjQgYml0IG1pbmd3LXc2NAotCSAgRml4ZXMgYnVnICM2NjAwODMuCi0KLTIwMTEtMDktMjUgMTY6MTA6NTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzoKLQkgIGV4YW1wbGVzOiBmaXggYm9ndXMgZ19vYmplY3RfdW5yZWYgaW4gaGVsbG93b3JsZCBleGFtcGxlCi0JICBHTWFpbkxvb3AgaXMgbm90IGEgR09iamVjdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD00MjQxNDMKLQotMjAxMS0wOS0yMyAxMzowOToyNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdGNhcHMuYwotCSAgZ3N0L2dzdHBhZC5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaAotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMKLQotMjAxMS0wOS0yMSAxMzo0Mzo0OCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgVXBkYXRlIGNvbW1vbiB0byAwLjExIGJyYW5jaAotCi0yMDExLTA5LTIwIDEzOjA0OjA2ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBkZWxheSBzZXJpYWxpemVkIGV2ZW50cyB3aGVuIHNyYyBjYXBzIGFyZSBub3Qgc2V0IHlldAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTU3MQotCi0yMDExLTA5LTEzIDE3OjA0OjMxICswNDAwICBTdGFzIFNlcmdlZXYgPHN0c3BAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFNldCBjYXBzIG9uIHBhZCBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHBhZCBpcyBsaW5rZWQKLQkgIFRoaXMgYWxsb3dzIHRoZSBzZXRjYXBzIGhhbmRsZXIgYW5kIG5vdGlmeTo6Y2FwcyB0byBsaW5rCi0JICB0aGUgcGFkIGRvd25zdHJlYW0gYW5kIGRvZXNuJ3QgcmVxdWlyZSBoYWNrcyB0byBhbHdheXMKLQkgIHByb3ZpZGUgYSBwZWVyIHRvIHRoZSBwYWQsIGxpa2UgaW4gZGVjb2RlYmluMi4KLQotMjAxMS0wOS0xNSAxMTo0OTo0MyAtMDcwMCAgRmFicml6aW8gKE1pc3RvKSBNaWxvIDxtaXN0b2JhYW5AZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogdXNlIGdfdmFsdWVfdGFrZV9zdHJpbmcoKSBhbmQgZ3N0X3ZhbHVlX2dldF9jYXBzKCkgaW5zdGVhZCBvZiBhY2Nlc3NpbmcgaW50ZXJuYWwgZmllbGRzCi0KLTIwMTEtMDktMTYgMTM6Mzg6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGFkZCBtb3JlIGRlYnVnIGxvZ2dpbmcgZm9yIG90aGVyIGNoYWluIGZ1bmN0aW9uIGNvZGUgcGF0aCBhcyB3ZWxsCi0KLTIwMTEtMDktMTYgMTM6MTM6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGZpeCB1cCBwcmludGYgZm9ybWF0IGluIGRlYnVnIG1lc3NhZ2UKLQkgIFdoaWNoIEkgbWVzc2VkIHVwLgotCi0yMDExLTA5LTE1IDEzOjIwOjE1ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBtYWtlIHNvbWUgZGVidWcgdHJhY2VzIG1vcmUgdXNlZnVsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU5MTM5Ci0KLTIwMTEtMDktMTQgMjI6NTQ6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2dzdGN2c3Rlc3Quc2g6Ci0JICBzY3JpcHRzOiByZW1vdmUgZ3N0Y3ZzdGVzdC5zaAotCi0yMDExLTA5LTEzIDIzOjA0OjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6Ci0JICBsZm9jb250cm9sc291cmNlOiBmaXggY2xhbmcgY29tcGlsZXIgd2FybmluZwotCSAgQ2FzdCBlbnVtIHRvIGludCBiZWZvcmUgY2hlY2tpbmcgZm9yIG5lZ2F0aXZlIHZhbHVlcywgd2hpY2ggYXJlCi0JICBpbXBvc3NpYmxlIGFjY29yZGluZyB0byB0aGUgZW51bSBsaXN0LgotCSAgZ3N0bGZvY29udHJvbHNvdXJjZS5jOjY1Mjo0NTogZXJyb3I6IGNvbXBhcmlzb24gb2YgdW5zaWduZWQgZW51bSBleHByZXNzaW9uIDwgMAotCSAgaXMgYWx3YXlzIGZhbHNlIFstV2Vycm9yLC1XdGF1dG9sb2dpY2FsLWNvbXBhcmVdCi0JICBpZiAod2F2ZWZvcm0gPj0gbnVtX3dhdmVmb3JtcyB8fCB3YXZlZm9ybSA8IDApIHsKLQkgIH5+fn5+fn5+IF4gfgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzEzNwotCi0yMDExLTA5LTEzIDIxOjU4OjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSAgdGVzdHM6IG1ha2Ugc3VyZSBmaWxlc3JjIHJldHVybnMgZXNjYXBlZCBVUklzIGV2ZW4gaWYgdGhlIGlucHV0IHdhcyB1bmVzY2FwZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ2NzMKLQotMjAxMS0wOS0xMCAxODoxNTo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBtb3ZlIGxvZyBtZXNzYWdlcyBmb3IgY2FwcyBjcmVhdGlvbi9mcmVlaW5nIGludG8gVFJBQ0UgY2F0ZWdvcnkKLQkgIFJlZHVjZSBTUEFNIGZvciBHU1RfQ0FQUzo1LgotCi0yMDExLTA5LTA5IDEyOjU2OjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBPbmx5IGRvIHRoZSBzdWJzZXQgY2hlY2sgaW4gZ3N0X3BhZF9hY2NlcHRfY2FwcygpIGlmIHRoZSBwYWQgY2xhaW1zIHRvIGFjY2VwdCB0aGUgY2FwcwotCi0yMDExLTA5LTA3IDE3OjIxOjU1IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBtYWtlIGl0IGVhc3kgdG8gb3ZlcnJpZGUgdGhlIHBhZCBxdWVyeQotCSAgQWRkIGEgdm1ldGhvZCB0byBoYW5kbGUgdGhlIHBhZCBxdWVyeS4KLQkgIEluc3RhbGwgYSBkZWZhdWx0IGhhbmRsZXIgZm9yIHRoZSBwYWQgcXVlcnkuCi0JICBVc2UgdGhlIG5ldyBxdWVyeSBmdW5jdGlvbiBpbiBmaWxlc2luawotCi0yMDExLTA5LTA4IDE0OjM5OjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBSZXZlcnQgIlJldmVydCAiYmFzZXRyYW5zZm9ybTogVXNlIGNoZWNrIGZvciBzdWJzZXRzIGFuZCBub3Qgbm9uLWVtcHR5IGludGVyc2VjdGlvbiB0byBjaGVjayBpZiBjYXBzIGFyZSBjb21wYXRpYmxlIiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMGJjNmQ0OWM5NTAyMTBiZjQyMjYxNWZiOGRjOThjNWFkY2Q1ZTQ1Ni4KLQkgIENvbmZsaWN0czoKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCi0KLTIwMTEtMDktMDggMTQ6MzE6NTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBSZXZlcnQgIlJldmVydCAicGFkOiBDaGVjayBmb3Igc3Vic2V0cywgbm90IG5vbi1lbXB0eSBpbnRlcnNlY3Rpb25zIHRvIGNoZWNrIGlmIGNhcHMgYXJlIGNvbXBhdGlibGUiIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyYmZhZGE1NTgxZTM1YTJkMzcxODhmNDhhMmM3NDQyNjQ0ZjEwYmIzLgotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdHBhZC5jCi0JICBGb3IgMC4xMSB3ZSB3YW50IHRvIGVuZm9yY2UgdGhhdCBvbmx5IHN1YnNldHMgb2YgdGhlIHBhZAotCSAgY2FwcyBhcmUgYWxsb3dlZC4gVGhpcyBicmVha3MgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IKLQkgIHNvbWUgZWxlbWVudHMsIHdoaWNoIGlzIHdoeSB3ZSBvbmx5IHByaW50IGEgd2FybmluZyBpbgotCSAgMC4xMC4KLQotMjAxMS0wOS0wOCAxNDozMDowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RwYWQuYwotCi0yMDExLTA5LTA4IDE0OjI5OjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgUmV2ZXJ0ICJwYWQ6IFVzZSBnc3RfcGFkX2FjY2VwdF9jYXBzKCkgaW5zdGVhZCBvZiBtYW51YWxseSBjaGVja2luZyB3aGVuIGNvbmZpZ3VyaW5nIGEgc2lua3BhZCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZDNjYWQyOGRhOTM2YjAzN2Q4NzdkYzcwYzAyMjg2YjgxYjY4MDI4NC4KLQkgIEl0IGNhdXNlcyBwZXJmb3JtYW5jZSBwcm9ibGVtcyBiZWNhdXNlIGFjY2VwdGNhcHMoKSBwcm9wYWdhdGVzIGRvd25zdHJlYW0uCi0KLTIwMTEtMDktMDggMTQ6MjM6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBkb2NzL2Rlc2lnbi9kcmFmdC1idWZmZXIyLnR4dAotCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dAotCSAgZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQKLQkgIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVybGlzdC50eHQKLQkgIGRvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQKLQkgIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0Ci0JICBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQKLQkgIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0Ci0JICBnc3QvZ3N0Y2Fwcy5jCi0JICBnc3QvZ3N0ZXZlbnQuaAotCSAgZ3N0L2dzdGdob3N0cGFkLmMKLQkgIGdzdC9nc3RpbnRlcmZhY2UuYwotCSAgZ3N0L2dzdHBhZC5jCi0JICBnc3QvZ3N0cGFkLmgKLQkgIGdzdC9nc3R1dGlscy5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYwotCSAgbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYwotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYwotCSAgdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jCi0JICB0b29scy9nc3QtbGF1bmNoLjEuaW4KLQotMjAxMS0wOS0wOCAxMzo0MToxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogVXNlIGdzdF9wYWRfYWNjZXB0X2NhcHMoKSBpbnN0ZWFkIG9mIG1hbnVhbGx5IGNoZWNraW5nIHdoZW4gY29uZmlndXJpbmcgYSBzaW5rcGFkCi0KLTIwMTEtMDktMDggMTM6NDA6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFByaW50IGEgZ193YXJuaW5nKCkgaWYgcGFkIGFjY2VwdCBjYXBzIHRoYXQgYXJlIG5vdCBhIHN1YnNldCBvZiBpdHMgY2FwcwotCSAgSW4gMC4xMSBvbmx5IHN1YnNldHMgYXJlIHN1cHBvcnRlZCBhZ2FpbiBhcyBkb2N1bWVudGVkIGluc3RlYWQgb2YgYWxzbwotCSAgYWxsb3dpbmcgbm9uLWVtcHR5IGludGVyc2VjdGlvbnMuCi0KLTIwMTEtMDktMDggMTM6MjY6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIFJldmVydCAiYmFzZXRyYW5zZm9ybTogVXNlIGNoZWNrIGZvciBzdWJzZXRzIGFuZCBub3Qgbm9uLWVtcHR5IGludGVyc2VjdGlvbiB0byBjaGVjayBpZiBjYXBzIGFyZSBjb21wYXRpYmxlIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA1ZTVjYzVlODllN2UyODU4YTYzNTJmYTRjODFhMzc0ZjZlNWE2Mjk3LgotCSAgU2VlIGJ1ZyAjNjU4NTQxLgotCi0yMDExLTA5LTA4IDEzOjI2OjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgUmV2ZXJ0ICJwYWQ6IENoZWNrIGZvciBzdWJzZXRzLCBub3Qgbm9uLWVtcHR5IGludGVyc2VjdGlvbnMgdG8gY2hlY2sgaWYgY2FwcyBhcmUgY29tcGF0aWJsZSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMGM1ZDUwMjA3MzI2ZDc0YTQ4MDViY2Q4OThiZmFjODg3NTQwZjEyYi4KLQkgIFNlZSBidWcgIzY1ODU0MS4KLQotMjAxMS0wOS0wNyAxMzoxNDozOCArMDIwMCAgUGlvdHIgRnVzaWsgPGZveEBzY2VuZS5wbD4KLQotCSogUkVBRE1FOgotCSogZG9jcy9SRUFETUU6Ci0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1idWZmZXIyLnR4dDoKLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtYWN0aXZhdGlvbi50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVybGlzdC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWNhcHMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWZyYW1lc3RlcC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGVsZW1lbnQudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWxhdGVuY3kudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW1pc3NpbmctcGx1Z2lucy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zdHJlYW0tc3RhdHVzLnR4dDoKLQkqIGRvY3MvZmFxL01ha2VmaWxlLmFtOgotCSogZG9jcy9mYXEvZGVwZW5kZW5jaWVzLnhtbDoKLQkqIGRvY3MvZmFxL2dlbmVyYWwueG1sOgotCSogZG9jcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1jbG9ja3MueG1sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSogZG9jcy9tYW51YWwvZGlhZ3JhbXMtZ2VuZXJhbC5zdmc6Ci0JKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6Ci0JKiBkb2NzL21hbnVhbC9pbnRyby1nc3RyZWFtZXIueG1sOgotCSogZG9jcy9wd2cvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC10YWdnaW5nLnhtbDoKLQkqIGRvY3MvcHdnL2ludHJvLWJhc2ljcy54bWw6Ci0JKiBkb2NzL3B3Zy9pbnRyby1wcmVmYWNlLnhtbDoKLQkqIGRvY3MvcHdnL290aGVyLWJhc2UueG1sOgotCSogZG9jcy9wd2cvb3RoZXItc291cmNlLnhtbDoKLQkqIGRvY3MvcmFuZG9tL2F1dG9wbHVnMjoKLQkqIGRvY3MvcmFuZG9tL2JiYi9vcHRpb25hbC1wcm9wZXJ0aWVzOgotCSogZG9jcy9yYW5kb20vYmJiL3N0cmVhbXNlbGVjdGlvbjoKLQkqIGRvY3MvcmFuZG9tL2NhcHM6Ci0JKiBkb2NzL3JhbmRvbS9jb21wYW55L2d2YWRlYy50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9lbnNvbmljL2RyYWZ0LWJ1ZmZlcnBvb2xzLnR4dDoKLQkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZW1iZWRkZWQudHh0OgotCSogZG9jcy9yYW5kb20vZW5zb25pYy9tZWRpYS1kZXZpY2UtZGFlbW9uLnR4dDoKLQkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcGx1Z2luZG9jcy50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9lbnNvbmljL3Byb2ZpbGluZy50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9lb3M6Ci0JKiBkb2NzL3JhbmRvbS9oaWVyYXJjaHk6Ci0JKiBkb2NzL3JhbmRvbS9pMThuOgotCSogZG9jcy9yYW5kb20vaW50ZXJmYWNlczoKLQkqIGRvY3MvcmFuZG9tL25lZ290aWF0aW9uOgotCSogZG9jcy9yYW5kb20vb21lZ2Evc2NoZWQvY2hhaW5zOgotCSogZG9jcy9yYW5kb20vb21lZ2EvdGVzdGluZy9mcmFtZXdvcms6Ci0JKiBkb2NzL3JhbmRvbS9wbHVnaW5zOgotCSogZG9jcy9yYW5kb20vcnRwOgotCSogZG9jcy9yYW5kb20vc2xvbW8vY29udHJvbGxlci50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9zb3VyY2VzOgotCSogZG9jcy9yYW5kb20vc3RyZWFtaGVhZGVyOgotCSogZG9jcy9yYW5kb20vdGVzdGluZy9zeW50YXg6Ci0JKiBkb2NzL3JhbmRvbS90eXBlczI6Ci0JKiBkb2NzL3JhbmRvbS91cmFldXMvZ3N0cmVhbWVyX2FuZF9taWRpLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3Zpcy10cmFuc2Zvcm06Ci0JKiBkb2NzL3JhbmRvbS93dGF5L2NhcHMtbmVnb2NpYXRpb246Ci0JKiBkb2NzL3JhbmRvbS93dGF5L3RocmVhZGluZzoKLQkqIGRvY3MvcmFuZG9tL3d0YXkvdGhyZWFkc19oaWxldmVsOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGludGVyZmFjZS5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHBhcmFtc3BlY3MuaDoKLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NhcHNuZWdvLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkqIHdpbjMyL1JFQURNRS50eHQ6Ci0JICBkb2NzLCBnc3Q6IHR5cG8gZml4ZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTg0NDkKLQotMjAxMS0wOS0wNyAxNTowNzoyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSAgZG9jczogZml4IG1ha2UgZGlzdGNoZWNrCi0JICBObyBwb2ludCByZW1vdmluIHRob3NlIGVtcHR5IG92ZXJyaWRlIGZpbGVzIGZyb20gZ2l0LCB0aGV5J2xsCi0JICBqdXN0IGJlIHJlLWNyZWF0ZWQgbGF0ZXIsIHNvIGxldCdzIHRlbGwgZ3RrLWRvYyBhYm91dCB0aGVtLCBzbwotCSAgaXQgY2FuIGNsZWFuIHRoZW0gdXAgcHJvcGVybHkuCi0KLTIwMTEtMDktMDcgMTY6MDI6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IElmIHRoZXJlJ3Mgbm8gcGVlciB3ZSBzdGlsbCBoYXZlIHRvIHRyYW5zZm9ybSBBTlkgY2FwcyBpbiBnZXRjYXBzKCkKLQkgIE90aGVyd2lzZSBlbGVtZW50cyBsaWtlIGNhcHNmaWx0ZXIgd2lsbCByZXR1cm4gQU5ZIGNhcHMgaWYgbm8KLQkgIHBlZXIgaXMgcHJlc2VudCBpbnN0ZWFkIG9mIHRoZSBmaWx0ZXIgY2Fwcy4gVGhlIHRyYW5zZm9ybV9jYXBzKCkKLQkgIHZmdW5jIGNvdWxkIGRvIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgdGVtcGxhdGUgY2FwcyB0aGF0IGRvIG5vdAotCSAgcmVzdWx0IGluIHRoZSB1bm1vZGlmaWVkIHRlbXBsYXRlIGNhcHMuCi0KLTIwMTEtMDktMDcgMTQ6MDU6MDMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgZG9jczogY2xlYW51cCBtYWtlZmlsZXMKLQkgIFJlbW92ZSBjb21tZW50ZWQgb3V0IHBhcnRzIHRoYXQgd2UgZG9uJ3QgbmVlZC4gUmVtb3ZlICJ0aGUgd2luZ28gYWRkaXRpb24iIC0gbm8KLQkgIHNvIHVzZWZ1bCBhZnRlciBhbGwuIE5hcnJvdyBkb3duIGZpbGUtZ2xvYnMgZm9yIHBsdWdpbiBkb2NzLgotCi0yMDExLTA5LTA3IDEzOjUwOjA4ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZG9jczogZXNjYXBlICUgaW4gZG9jYmxvYgotCi0yMDExLTA5LTAyIDE5OjQ2OjA2ICswNDAwICBTdGFzIFNlcmdlZXYgPHN0YXNAc3Rhcy4obm9uZSk+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IFVzZSBnc3RfcGFkX3NldF9jYXBzKCkgaW5zdGVhZCBvZiBtYW51YWxseSBjaGFuZ2luZyBjYXBzCi0JICBnc3RfcGFkX3NldF9jYXBzKCkgZG9lcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBidXQgYWRkaXRpb25hbGx5IGNhbGxzCi0JICB0aGUgcGFkJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KLQkgIEZpeGVzIGJ1ZyAjNjU4MDc2LgotCi0yMDExLTA5LTA2IDIxOjI0OjEwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYTM5ZWI4MyB0byAxMWYwY2Q1Ci0KLTIwMTEtMDktMDYgMTU6Mzk6NTIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2MDVjZDlhIHRvIGEzOWViODMKLQotMjAxMS0wOS0wNiAxMjoxNzowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogVXNlIGNoZWNrIGZvciBzdWJzZXRzIGFuZCBub3Qgbm9uLWVtcHR5IGludGVyc2VjdGlvbiB0byBjaGVjayBpZiBjYXBzIGFyZSBjb21wYXRpYmxlCi0KLTIwMTEtMDktMDYgMTI6MTk6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IENoZWNrIGZvciBzdWJzZXRzLCBub3Qgbm9uLWVtcHR5IGludGVyc2VjdGlvbnMgdG8gY2hlY2sgaWYgY2FwcyBhcmUgY29tcGF0aWJsZQotCSAgUGFkcyBzaG91bGQgb25seSBhY2NlcHQgY2FwcyB0aGF0IGFyZSBhIHN1YnNldCBvZiB0aGUgcGFkIGNhcHMsIGUuZy4KLQkgIHRoZXkgc2hvdWxkIGFjY2VwdCBvbmx5IGNhcHMgdGhhdCBoYXZlIGEgbm9uLWVtcHR5IGludGVyc2VjdGlvbiBhbmQKLQkgIGF0IGxlYXN0IGFsbCBmaWVsZHMgb2YgdGhlIHBhZCBjYXBzLgotCSAgV2l0aG91dCB0aGlzIGEgcGFkIHRoYXQgd2FudHMgZm9yIGV4YW1wbGUKLQkgICJ2aWRlby94LWgyNjQsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSIKLQkgIHdpbGwgYmUgaGFwcHkgdG8gYWNjZXB0Ci0JICAidmlkZW8veC1oMjY0Ii4KLQotMjAxMS0wOC0yOSAxNzowNjoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1pbmlvYmplY3Q6IGNoYW5nZSB0byBHU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEUKLQkgIEFwcGVuZCBfVFlQRSB0byB0aGUgbWFjcm8gZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgc2ltaWxhciBtYWNyb3MuCi0KLTIwMTEtMDgtMjkgMTU6MzQ6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBpbml0OiBhZGQgX2dldF90eXBlKCkgZnVuY3Rpb25zCi0JICBSZW1vdmUgZ3N0X21pbmlfb2JqZWN0X3JlZ2lzdGVyKCkgYW5kIGFkZCBhIEdTVF9ERUZJTkVfTUlOSV9PQkpFQ1QgbWFjcm8gdG8KLQkgIGRlZmluZSBhIF9nZXRfdHlwZSgpIGZ1bmN0aW9uIGZvciB0aGUgYm94ZWQgbWluaW9iamVjdC4KLQkgIFJlbW92ZSBhIGJ1bmNoIG9mIGN1c3RvbSBfZ2V0X3R5cGUoKSBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZQotCSAgbWluaW9iamVjdCBtYWNyby4KLQkgIFJlbmFtZSBzb21lIF9pbml0IG1ldGhvZCB0byBfcHJpdl8qX2luaXRpYWxpemUoKSBsaWtlIHRoZSByZXN0IG9mIHRoZW0uCi0JICBJbnNwaXJlZCBieSBwYXRjaCBmcm9tIEpvaGFuIERhaGxpbiBhbmQgc2VlIGJ1ZyAjNjU3NjAzCi0KLTIwMTEtMDgtMjkgMTM6Mjc6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3Rmb3JtYXQuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdDogYWRkIHNvbWUgX3ByaXYgcHJlZml4ZXMgdG8gcHJpdmF0ZSBtZXRob2RzCi0KLTIwMTEtMDgtMjkgMTI6Mzg6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pLW9iamVjdDogdXNlIHJlZi91bnJlZiBkaXJlY3RseSBpbiBib3hlZCBjb3B5L2ZyZWUKLQkgIEdMaWIgd2lsbCBub3QgY2FsbCBvdXIgY29weS9mcmVlIHdpdGggYSBOVUxMIG9iamVjdAotCi0yMDExLTA4LTI2IDE0OjM3OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0bWVzc2FnZS5jCi0JICBnc3QvZ3N0cXVlcnkuYwotCSAgZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmMKLQkgIGdzdC9nc3RzZWdtZW50LmMKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaAotCSAgbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jCi0KLTIwMTEtMDgtMjYgMTQ6MTg6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYmFzZTogcmVuYW1lIGFsbG9jYXRpb24gdm1ldGhvZHMKLQkgIE5hbWUgdGhlIGFsbG9jYXRpb24gdm1ldGhvZCBvbiBzcmNwYWQgZGVjaWRlX2FsbG9jYXRpb24gYmVjYXVzZSBzb3VyY2UgcGFkcyB3aWxsCi0JICBoYXZlIHRvIGRlY2lkZSB3aGF0IGFsbG9jYXRpb24gcGFyYW1ldGVycyB3aWxsIGJlIHVzZWQuCi0JICBOYW1lIHRoZSBhbGxvY2F0aW9uIHZtZXRob2Qgb24gc2lua3BhZHMgcHJvcG9zZV9hbGxvY2F0aW9uIGJlY2F1c2UgdGhleSB3aWxsCi0JICBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgYWxsb2NhdGlvbiBxdWVyeSB3aXRoIGEgcHJvcG9zZWQgdmFsdWVzIGZvciB1cHN0cmVhbS4KLQotMjAxMS0wOC0yNiAxNDoxNzoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBpbXByb3ZlIGZsYWdzCi0JICBSZW5hbWUgRFJPUCB0byBERUNPREVfT05MWS4KLQkgIEFkZCBEUk9QUEFCTEUgZmxhZyB0byBtYXJrIGJ1ZmZlcnMgdGhhdCBjYW4gYmUgZHJvcHBlZCB0byBzYXZlIGJhbmR3aWR0aCB3aXRob3V0Ci0JICBkZXN0cm95aW5nIHRoZSBzdHJlYW0uCi0KLTIwMTEtMDgtMjYgMTQ6MDk6NDcgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHRyYWNlLmg6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuaDoKLQkgIGRvY3M6IGFkZCBzaW5jZSAwLjEwLjM2IG9uIHRoZSBuZXcgX05PTkUgZW51bSB2YWx1ZXMKLQotMjAxMS0wOC0yNiAwMDoxMzoxNiArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmM6Ci0JICBzdGVwcGluZzogdXNlIHRoZSBwcm9wZXIgYXJndW1lbnQgb3JkZXIKLQkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KLQotMjAxMS0wOC0yNiAwMDowNjoxMiArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgotCSAgZmlsZWluZGV4OiBleHBsaWNpdGx5IGNhc3QgdG8gdGhlIGVudW0gdHlwZXMKLQkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KLQotMjAxMS0wOC0yNiAwMDowMDoyNSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmRlcjogdXNlIEdTVF9UWVBFX0ZJTkRfTk9ORSBpbnN0ZWFkIG9mIDAKLQkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KLQotMjAxMS0wOC0yNSAyMzo1Mzo1OCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkgIGxmb2NvbnRyb2xzb3VyY2U6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMjUgMjM6NDk6MzggKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHR5cGVmaW5kLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JICB0eXBlZmluZDogYWRkIEdTVF9UWVBFX0ZJTkRfTk9ORSBhbmQgdXNlIGl0Ci0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMjUgMjM6MjY6MDggKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogdXNlIHRoZSBlbnVtIHZhbHVlcyBmb3IgMCBhbmQgZG9uJ3QgYWJ1c2Ugb24gZ2Jvb2xlYW4gY29pbmNpZGVuY2UKLQkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KLQotMjAxMS0wOC0yNSAyMzowNjo1NiArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwdXQgdGhlIGFyZ3VtZW50cyBvZiBnX3JldHVybl92YWxfaWZfZmFpbCBpbiB0aGUgcHJvcGVyIG9yZGVyCi0KLTIwMTEtMDgtMjUgMjI6NDg6NTQgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBhcnNlLmM6Ci0JICBwYXJzZTogdXNlIEdTVF9QQVJTRV9GTEFHX05PTkUgaW5zdGVhZCBvZiAwCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMjUgMjI6NDI6MDggKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogZXhwbGljaXRseSBjYXN0IHRvIHRoZSBlbnVtIHR5cGUKLQkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KLQotMjAxMS0wOC0yNSAyMjoyOTo0NSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBtaW5vciBjaGFuZ2VzIHJlbGF0ZWQgdG8gZW51bSB0eXBlcwotCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgotCi0yMDExLTA4LTI1IDIyOjA1OjI2ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3R0cmFjZS5jOgotCSogZ3N0L2dzdHRyYWNlLmg6Ci0JICB0cmFjZTogYWRkIEdTVF9BTExPQ19UUkFDRV9OT05FIGZvciBjb25zaXN0ZW5jeSBhbmQgdXNlIGl0Ci0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMjUgMjE6NTI6MDUgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMjUgMjE6NDk6MjkgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JICB0YWdzZXR0ZXI6IHVzZSBHU1RfVEFHX01FUkdFX1VOREVGSU5FRCBpbnN0ZWFkIG9mIEZBTFNFCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMjUgMjE6MzA6NTcgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IHVzZSBHU1RfU0VFS19GTEFHX05PTkUgaW5zdGVhZCBvZiAwCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMjUgMjE6MjU6NDYgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeWNodW5rczogZXhwbGljaXRseSBjYXN0IHRvIHRoZSBlbnVtIHR5cGVzCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMjUgMjE6MTg6MTUgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogbWlub3IgY2hhbmdlcyByZWxhdGVkIHRvIGVudW0gdHlwZXMKLQkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KLQotMjAxMS0wOC0yNSAyMTowMzo1MyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIHBhZHRlbXBsYXRlOiBleHBsaWNpdGx5IGNhc3QgdG8gdGhlIGVudW0gdHlwZXMKLQkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KLQotMjAxMS0wOC0xNiAyMzowMDo0NyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMTYgMjI6NTE6MjkgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgcmlnaHQgZW51bSB0eXBlcwotCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgotCi0yMDExLTA4LTE2IDIyOjQxOjMyICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBleHBsaWNpdGx5IGNhc3QgdG8gdGhlIGVudW0gdHlwZQotCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgotCi0yMDExLTA4LTE2IDIyOjM3OjA4ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RpbmRleC5jOgotCSAgaW5kZXg6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0KLTIwMTEtMDgtMTYgMjI6Mjk6NTkgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGZvcm1hdC5jOgotCSAgZm9ybWF0OiB1c2UgR1NUX0ZPUk1BVF9VTkRFRklORUQgYW5kIGZldyBjYXN0cyB0byBHc3RGb3JtYXQKLQkgIEZpeGVzIHdhcm5pbmcgIzE4ODogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlIHJlcG9ydGVkIGJ5IElDQy4KLQotMjAxMS0wOC0yNiAxMzowMjozNCArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYmFzZXRyYW5zZm9ybTogRml4IGJvZGdlZCBwcmV2aW91cyBjb21taXQKLQotMjAxMS0wOC0yNiAxMjozNzo0MyArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBiYXNldHJhbnNmb3JtOiBVc2UgR3N0UGFkRGlyZWN0aW9uIGluIHRoZSBxdWVyeSB2ZnVuYwotCSAgV2ltIHN1Z2dlc3RlZCB0aGF0IHVzaW5nIEdzdFBhZERpcmVjdGlvbiBpbnN0ZWFkIG9mIGEgR3N0UGFkIGluIHRoZQotCSAgYXJndW1lbnRzIHRvIHRoZSBuZXcgcXVlcnkgdmZ1bmMgd291bGQgYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIG90aGVyCi0JICBmdW5jdGlvbnMuCi0KLTIwMTEtMDgtMjYgMTM6NDA6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogcmVuYW1lIF9DTElQIHRvIF9EUk9QIGZsYWcKLQkgIFdlIGNhbiBhbHNvIHVzZSBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBhIGZyYW1lIHNob3VsZCBiZSBkZWNvZGVkIGJ1dCBub3QKLQkgIGRpc3BsYXllZCByZWdhcmRsZXNzIG9mIHRoZSB0aGUgc2VnbWVudCBib3VuZGFyaWVzIHNvIHdlIHVzZSB0aGUgbW9yZSBnZW5lcmljCi0JICBfRFJPUC4KLQotMjAxMS0wOC0yNiAxMjoyODoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IHJlbW92ZSBzb21lIHVudXNlZCB2YXJpYWJsZXMKLQotMjAxMS0wOC0yNiAxMTo0NDoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IGFkZCB2bWV0aG9kIHRvIGNvbmZpZ3VyZSB1cHN0cmVhbSBidWZmZXJwb29sCi0JICBBZGQgYSB2bWV0aG9kIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIHRvIGluZmx1ZW5jZSB0aGUgYnVmZmVycG9vbCB0aGF0IHVwc3RyZWFtCi0JICBlbGVtZW50cyB3aWxsIHVzZS4KLQotMjAxMS0wOC0yNiAxMToyNDo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IHVzZSBwYWQgZGlyZWN0aW9uIGxpa2Ugb3RoZXIgdm1ldGhvZHMKLQotMjAxMS0wOC0yNiAxMTowOTowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oCi0KLTIwMTEtMDgtMjYgMTA6NTc6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1cmkuaDoKLQkgIHVyaTogc29tZSBkb2MgZml4ZXMKLQotMjAxMS0wOC0yNSAxMTowMjoxNiArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBCYXNlVHJhbnNmb3JtOiBBZGQgYSBxdWVyeSB2ZnVuYwotCi0yMDExLTA3LTIwIDE0OjA1OjI3ICswMjAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBkb24ndCBhc3N1bWUgX2dldF9jYXBzIHN0aWxsIGhhcyB0byBiZQotCSAgX3NldF9jYXBzIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIGlzIGFjdHVhbGx5IHB1c2hlZCwgc28gdGhlcmUKLQkgIGlzIGEgcmVhc29uYWJseSBiaWcgd2luZG93IGJldHdlZW4gd2hlbiB0aGUgaW5pdGlhbCBjYXBzIGFyZSByZXRyaWV2ZWQKLQkgIGFuZCB3aGVuIHRoZSBjYXBzIGFyZSBzZXQgb24gb3VyIHNyYyBwYWQuIFNvIHdlIGNhbid0IGFzc3VtZSB0aGUgbm90Ci0JICBoYXZpbmcgbmVnb3RpYXRlZCBjYXBzIG9uIG91ciBzcmMgcGFkIG1lYW5zIF9nZXRfY2FwcyBzdGlsbCBoYXMgdG8gYmUKLQkgIGNhbGxlZC4KLQkgIEluc3RlYWQgc2ltcGx5IGFsd2F5cyBzdWdnZXN0IHRoZSBuZXcgY2FwcyBvbiBidWZmZXJfYWxsb2MuCi0KLTIwMTEtMDgtMjUgMTg6MDQ6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogYWRkIGNsaXAgZmxhZwotCi0yMDExLTA4LTI1IDE2OjIxOjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IHJld29yayBmbGFncyBhIGxpdHRsZQotCSAgUmVvcmRlciBidWZmZXIgZmxhZ3MgYW5kIGFkZCBzb21lIG5ldyBvbmVzLgotCSAgUmVtb3ZlIHRoZSBtZWRpYSBzcGVjaWZpYyBmbGFncywgd2UgY2FuIG5vdyBlYXNpbHkgZG8gdGhpcyB3aXRoIHRoZSBGTEFHX0xBU1QKLQkgIGZsYWcgYmVjYXVzZSB3ZSBkb24ndCBleHRlbmQgZnJvbSBHc3RCdWZmZXIgYW55bW9yZS4KLQotMjAxMS0wOC0yNSAxNjoyMDoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBidWZmZXI6IGFsd2F5cyBjb3B5IGFsbCBidWZmZXIgZmxhZ3Mgd2hlbiBhc2tlZAotCSAgRG9uJ3QgdHJ5IHRvIGJlIHNtYXJ0IGFuZCBjb3B5IG9ubHkgYSBzdWJzZXQgb2YgYnVmZmVyIGZsYWcKLQotMjAxMS0wOC0yNSAxNjoxOTo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB1cGRhdGUgZGVmcwotCi0yMDExLTA4LTI1IDE0OjA5OjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IHBsdXJhbGl6ZSB0aGUgYnVmZmVyIGZsYWdzCi0KLTIwMTEtMDgtMjUgMTI6Mzg6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzoKLQkgIGJhc2VzaW5rOiByZW1vdmUgcHJlcm9sbC1xdWV1ZS1sZW4gcHJvcGVydHkKLQkgIFJlbW92ZSB0aGUgcHJlcm9sbC1xdWV1ZS1sZW4gcHJvcGVydHkgYW5kIG1vdmUgaXRzIHZhcmlhYmxlcyB0byBhIHByaXZhdGUKLQkgIHNlY3Rpb24gc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIHRoZW0gbGF0ZXIuCi0KLTIwMTEtMDgtMjQgMTA6NDM6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RvYmplY3QuYwotCi0yMDExLTA4LTIzIDE4OjE5OjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGVuc3VyZSBzdGFydF90aW1lIHJlc2V0IHVwb24gZmx1c2gKLQotMjAxMS0wOC0yMyAxMTo1NToxNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBnc3RvYmplY3Q6IGFsc28gcmVtb3ZlIHRoZSBjYXN0IGFzIHRoaXMgaXMgY2F1c2luZyB0aGUgdHJvdWJsZQotCi0yMDExLTA4LTIzIDExOjQxOjAyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGdzdG9iamVjdDogdXNlIHRoZSBhdG9taWMgbWFjcm9zIHRvIGRlYWwgd2l0aCB0aGUgZ2xpYiBjaGFuZ2UgaW4gdGhlIGltcGwuCi0KLTIwMTEtMDgtMjIgMTI6NDk6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkgIG9iamVjdDogbWFrZSBfcmVwbGFjZSBsaWtlIHRoZSBtaW5pb2JqZWN0IHZlcnNpb24KLQotMjAxMS0wOC0yMiAxMjozMzozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdGJ1ZmZlci5oCi0JICBnc3QvZ3N0Y2Fwcy5jCi0JICBnc3QvZ3N0Y2Fwcy5oCi0JICBnc3QvZ3N0ZXZlbnQuYwotCi0yMDExLTA4LTIyIDEyOjE5OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9jYXBzbGlzdC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB2YWx1ZTogcmVtb3ZlIG91ciBGT1VSQ0MgR1R5cGUKLQkgIFJlbW92ZSBvdXIgY3VzdG9tIGZvdXJjYyBHVmFsdWUuCi0KLTIwMTEtMDgtMjEgMTQ6MDc6MDggLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBvYmplY3Q6IG1ha2UgZ3N0X29iamVjdF9yZXBsYWNlKCkgYXRvbWljCi0KLTIwMTEtMDgtMjAgMTQ6MDc6NTUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGRvY3M6IG1vcmUgY2xhcmlmaWNhdGlvbiBmb3IgZWxlbWVudCBkb2NzCi0JICBEb24ndCBzdWdnZXN0IGRlcHJlY2F0ZWQgbWV0aG9kIGluIHRoZSBkZXNjdGlvbiBkb2NzIGFuZCB0cnkgdG8gYmUgbW9yZSBoZWxwZnVsCi0JICBpbiBvdGhlciBwbGFjZXMgYnkgc3VnZ2VzdGluZyByZWxhdGVkIGZ1bmN0aW9ucy4KLQotMjAxMS0wOC0yMCAwOTo1NjowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZG9jczogc21hbGwgY2xhcmlmaWNhdGlvbiBpbiB0aGUgZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIGRvY3MKLQkgIE1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQgb25lIHNob3VsZCBwYXNzIHRoZSB0ZW1wbGF0ZSBuYW1lLgotCi0yMDExLTA4LTE4IDIwOjQ2OjAxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZG9uJ3QgdXNlID09IGluIGRlYnVnIHN0cmluZwotCSAgSXQgbWVzc2VzIHVwIEdTVF9ERUJVRz0qOjUgbWFrZSBmb28vYmFyLnZhbGdyaW5kLCBiZWNhdXNlCi0JICBvdXIgTWFrZWZpbGUgbG9va3MgZm9yICc9PScgYXMgbWFya2VyIG9mIHZhbGdyaW5kIG91dHB1dC4KLQotMjAxMS0wOC0xOCAyMDo0NDowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGZpeCBjcmFzaCBvbiBzZWVrIGZyb20gc3RyZWFtaW5nIHRocmVhZCBvbiBuZXdzZWdtZW50IGV2ZW50Ci0JICBFdmVudCBpZiBpdCdzIG5vdCBhbGxvd2VkLCB3ZSBjYW4gZWFzaWx5IHByZXZlbnQgaXQsIHNvIGxldCdzIGRvCi0JICB0aGF0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1Njc3MQotCi0yMDExLTA4LTE3IDE3OjU2OjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHN0cnVjdHVyZTogYWRkIG1ldGhvZCB0byBmaXhhdGUgb25lIGZpZWxkCi0KLTIwMTEtMDgtMTcgMTc6MTY6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogYWRkIGRlZmF1bHQgZml4YXRlIGZ1bmN0aW9uCi0JICBBZGQgYSBkZWZhdWx0IGZpeGF0ZSBmdW5jdGlvbiB3aGljaCBkb2VzIGdzdF9jYXBzX2ZpeGF0ZSgpIGJlY2F1c2UKLQkgIGdzdF9wYWRfZml4YXRlKCkgZG9lcyBub3QgZG8gdGhhdCBhbnltb3JlLgotCi0yMDExLTA4LTE3IDA5OjI1OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGRvY3M6IGltcHJvdmUgc29tZSBkb2NzCi0KLTIwMTEtMDgtMTYgMTg6Mjk6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogcmV0dXJuIHByb2Nlc3NlZCBudW1iZXIgb2YgYnl0ZXMKLQkgIE1ha2UgX2ZpbGwsIF9leHRyYWN0IGFuZCBfbWVtc2V0IHJldHVybiB0aGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUKLQkgIGhhbmRsZWQgaW4gY2FzZSB0aGUgYnVmZmVyIHNpemUgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgc2l6ZS4KLQotMjAxMS0wOC0xNiAxNzoxOToyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgZG9jczogZml4IHR5cG8gaW4gZWxlbWVudCBmYWN0b3J5IGRvY3VtZW50YXRpb24KLQotMjAxMS0wOC0xNiAxNzozMjoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JICBidWZmZXI6IHJlbmFtZSBQUkVST0xMIC0+IExJVkUgZmxhZwotCSAgUmVuYW1lIHRoZSBHU1RfQlVGRkVSX0ZMQUdfUFJFUk9MTCB0byBHU1RfQlVGRkVSX0ZMQUdfTElWRSBhbmQgZ2l2ZSB0aGUgbmV3IGZsYWcKLQkgIGEgbWVhbmluZy4gVGhlIG9sZCBQUkVST0xMIGZsYWcgbmV2ZXIgaGFkIGEgY2xlYXIgbWVhbmluZy4KLQotMjAxMS0wOC0xNSAyMTowNTozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBmaXggY29tcGlsZXIgd2FybmluZyByZXBvcnRlZCBieSBJQ0MKLQkgIFRoZSBNQVggbWFjcm8gZXhwYW5kcyB0byBjb2RlIHRoYXQgY2hlY2tzIGlmIGFuIHVuc2lnbmVkIGludGVnZXIgaXMgPCAwLgotCSAgRml4ZXMgd2FybmluZyAjMTg2OiBwb2ludGxlc3MgY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBpbnRlZ2VyIHJlcG9ydGVkIGJ5IElDQy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTYyNjUKLQotMjAxMS0wOC0xMCAxMTozOToyMyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgZW51bSB0eXBlCi0JICBGaXhlcyB3YXJuaW5nICMxODg6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZSByZXBvcnRlZCBieSBJQ0MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2MjY1Ci0KLTIwMTEtMDgtMTAgMTE6MDc6NDkgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGdzdHN0YXRlOiBleHBsaWNpdGx5IGNhc3QgdG8gdGhlIGVudW0gdHlwZQotCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NjI2NQotCi0yMDExLTA4LTA5IDIzOjQyOjI2ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgcmlnaHQgZW51bSB0eXBlcwotCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NjI2NQotCi0yMDExLTA4LTA5IDIzOjMzOjQzICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RlcnJvci5jOgotCSAgZ3N0ZXJyb3I6IGV4cGxpY2l0bHkgY2FzdCB0byB0aGUgcmlnaHQgR3N0R0Vycm9yIGNvZGUgZW51bSB0eXBlcwotCSAgRml4ZXMgd2FybmluZyAjMTg4OiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUgcmVwb3J0ZWQgYnkgSUNDLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NjI2NQotCi0yMDExLTA4LTA5IDIzOjI2OjEzICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBkZWJ1Z3V0aWxzOiB1c2UgR1NUX1NUQVRFX1ZPSURfUEVORElORyBmb3IgR3N0U3RhdGUgaW5zdGVhZCBvZiAwCi0JICBGaXhlcyBhIHdhcm5pbmcgcmVwb3J0ZWQgYnkgSUNDLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NjI2NQotCi0yMDExLTA4LTA5IDIyOjQ4OjUzICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSAgY2FwczogZGVmaW5lIEdTVF9DQVBTX0ZMQUdTX05PTkUgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgZW51bWVyYXRpb25zCi0JICBVc2UgdGhlbSB0byBmaXggd2FybmluZ3Mgd2hlbiBidWlsZGluZyB3aXRoIElDQy4KLQkgIEFQSTogR1NUX0NBUFNfRkxBR1NfTk9ORQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NjI2NQotCi0yMDExLTA4LTA5IDIyOjI5OjQ0ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogdXNlIEdzdERlYnVnTGV2ZWwgZW51bSB0eXBlIHRvIGZpeCBhIHdhcm5pbmcgYnVpbGRpbmcgd2l0aCBJQ0MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTYyNjUKLQotMjAxMS0wOC0xNSAxNjo0NTozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBtYWtlIGZpeGF0ZSBjYXBzIGJlaGF2ZSBsaWtlIG90aGVyIGZ1bmN0aW9ucwotCSAgSW5zdGFsbCBhIGRlZmF1bHQgZml4YXRlIGNhcHMgZnVuY3Rpb24gb24gcGFkcyBsaWtlIGFsbCB0aGUgb3RoZXIgcGFkIGZ1bmN0aW9ucy4KLQotMjAxMS0wOC0xNSAxNjo0NTowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZWZzOiB1cGRhdGUgZm9yIG5ldyBzeW1ib2xzCi0KLTIwMTEtMDgtMTUgMTQ6NDM6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wOC0xNSAxNDo0MDozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBjYXBzOiBhZGQgZml4YXRlIGZ1bmN0aW9uCi0JICBBZGQgYSBmaXhhdGUgZnVuY3Rpb24gYW5kIHVzZSBpdCBpbiBnc3RwYWQuYwotCi0yMDExLTA4LTE1IDE0OjMyOjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JICBzdHJ1Y3R1cmU6IGFkZCBmdW5jdGlvbiB0byBmaXhhdGUKLQkgIEFkZCBhIGZ1bmN0aW9uIHRvIGZpeGF0ZSBhIHN0cnVjdHVyZSBhbmQgdXNlIGl0IGZvciB0aGUgZGVmYXVsdCBmaXhhdGUgZnVuY3Rpb24KLQkgIGluIGdzdHBhZC5jLgotCi0yMDExLTA4LTE1IDEzOjE3OjQ0ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IGFkZCBGYXJzaWdodCBhbmQgTmljZSBzdXBwb3J0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2NTU3Ci0KLTIwMTEtMDgtMTUgMTQ6MTc6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IGRlZmF1bHQgYWNjZXB0Y2FwcwotCSAgTWFrZSB0aGUgYWNjZXB0Y2FwcyBmdW5jdGlvbiBiZWhhdmUgbGlrZSBhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyB3aXRoIGEgZGVmYXVsdAotCSAgaW1wbGVtZW50YXRpb24uIERvbid0IHRyeSB0byBjaGFpbiB1cCB0byB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IHdhcwotCSAgc2V0IHRvIE5VTEwgZXhwbGljaXRseSBidXQgcmV0dXJuIEZBTFNFIGluc3RlYWQuCi0JICBGaXggc29tZSBkb2NzCi0KLTIwMTEtMDgtMTUgMTM6MjQ6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogZml4IHNvbWUgbWFjcm9zCi0JICBSZW1vdmUgYSByYXRoZXIgdXNsZXNzIG1hY3JvIHRvIGNoZWNrIGlmIGEgcGFkIG1vZGUgaXMgYWN0aXZlIGFuZAotCSAgYWRkIEdTVF9QQURfSVNfQUNUSVZFKCkuCi0KLTIwMTEtMDgtMTUgMTI6MTg6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgcG9ydGluZyBkb2MKLQotMjAxMS0wOC0xNSAxMjoxNjozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcGFkOiByZW1vdmUgZ3N0X3BhZF9nZXRfbmVnb3RpYXRlZF9jYXBzKCkKLQkgIFJlbW92ZSBnc3RfcGFkX2dldF9uZWdvdGlhdGVkX2NhcHMoKSwgaXQgZG9lcyBub3QgcmVhbHkgZG8gd2hhdCBpdCBzYXlzLAotCSAgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgcmV0dXJucyB0aGUgY3VycmVudGx5IG5lZ290aWF0ZWQgY2FwcyBvbiB0aGUgcGFkCi0JICBjb3JyZWN0bHkuCi0KLTIwMTEtMDgtMTIgMTk6Mjc6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggZGVhZGxvY2sgaW4gZXJyb3IgcGF0aAotCSAgRG9uJ3QgbG9jayB0aGUgc2FtZSBsb2NrIHR3aWNlLiBTcG90dGVkIGJ5IEpvc2VwIFRvcnJlIFZhbGxlcy4KLQotMjAxMS0wOC0xMiAxMjo0NTowMSArMDMwMCAgUGV0ZXJpcyBLcmlzamFuaXMgPHBlY2lza0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgaXRlcmF0b3I6IEZpeCBnc3RfaXRlcmF0b3JfbmV4dCgpIGVsZW1lbnQgYW5ub3RhdGlvbgotCi0yMDExLTA4LTExIDA5OjMxOjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgotCSAgZG9jczogZml4IHR5cG8gaW4gUFdHCi0JICBSQkcgLT4gUkdCLiBTcG90dGVkIGJ5IFdpbGwgVGhvbXBzb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2MzI2Ci0KLTIwMTEtMDgtMTEgMTA6MDk6NDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IHJlbW92ZWQgbm9uLXNlbnNlIGNvbW1lbnQKLQotMjAxMS0wOC0xMCAxNzowNzo1NCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdGRlYnVndXRpbHMuYwotCSAgZ3N0L2dzdGVsZW1lbnRkZXRhaWxzLmgKLQkgIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jCi0JICB0b29scy9nc3QtcnVuLmMKLQotMjAxMS0wOC0wOCAxOTozNjowNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudGRldGFpbHMuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSAgcmVnaXN0cnk6IG1vdmUgdXRmLTggdmFsaWRhdGlvbiB0byByZWdpc3RyeSBzYXZpbmcgdGltZQotCSAgSW5zdGVhZCBvZiBjaGVja2luZyBmb3IgdmFsaWQgdXRmLTggZWxlbWVudC1kZXRhaWxzIGV2ZXJ5IHRpbWUgd2UgY3JlYXRlCi0JICBlbGVtZW50cyAoZnJvbSBwbHVnaW4taW5pdCBvciByZWdpc3RyeSksIGRvIGl0IGJlZm9yZSB3ZSBzYXZlIHRoZSByZWdpc3RyeS4KLQkgIEZpeGVzICM2NTYxOTMuCi0KLTIwMTEtMDgtMTAgMTE6MDE6NTggKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgRml4IGFuZCBjbGFyaWZ5IGRlYnVnIHN0YXRlbWVudHMKLQkgIEZpeGVzIGJ1aWxkIG9uIE1hY09TWAotCSAgU2lnbmVkLW9mZi1ieTogRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLTIwMTEtMDgtMDUgMTA6NTk6NDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBnc3RidWZmZXI6IENsYXJpZnkgZG9jCi0KLTIwMTEtMDgtMDcgMDk6MTQ6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6Ci0JICBkb2NzOiBmaXggaGVsbG93b3JsZCBjb21waWxlIGNvbW1hbmQgbGluZSBmb3IgbmV3ZXIgZ2NjCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2MDkyCi0KLTIwMTEtMDgtMDYgMTg6MjA6NTEgKzAyMDAgIFNoYXVuIEhvb3BlcyA8aG9vcGVzMDFAc3R1ZGVudC51d2EuZWR1LmF1PgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogaW1wcm92ZSBkb3QgZmlsZSBmbG93IGxheW91dAotCSAgSXRlcmF0ZSBzb3VyY2UtIGFuZCBzaW5rLXBhZHMgc2VwYXJhdGVseSB0byBlbnN1cmUgdGhhdCB0aGUgZ3JhcGggcmVmbGVjdHMgdGhlCi0JICB1cHN0cmVhbS9kb3duc3RyZWFtIG9yZGVyLiBGaXhlcyAjNjQzMjY5Ci0KLTIwMTEtMDgtMDYgMTQ6MTc6NTAgKzAyMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgZ3N0cmVhbWVyLnNwZWM6IG1ha2UgYnVpbGRhYmxlIGFuZCBwYXJhbGxlbAotCi0yMDExLTA4LTA1IDEyOjEyOjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LXJ1bi5jOgotCSAgdG9vbHM6IG1ha2UgdW52ZXJzaW9uZWQgd3JhcHBlciBsb29rIGZvciAtMC4xMCB0b29scyBvbmx5Ci0JICBEb24ndCB3YW50IChpbmNvbXBhdGlibGUpIDAuMTEgdG9vbHMgdG8gYmUgcGlja2VkIHVwIGJ5IGFjY2lkZW50LgotCi0yMDExLTA4LTA0IDE4OjAwOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgYmFzZXNyYzogYWRkIGFsbG9jIHZtZXRob2QKLQkgIE1ha2UgYW4gYWxsb2Mgdm1ldGhvZCBzbyB0aGF0IHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIG9yIGNhbGwgdGhlIGRlZmF1bHQKLQkgIGltcGxlbWVudGF0aW9uIHdoZW4gdGhleSB3YW50LgotCi0yMDExLTA4LTA0IDE3OjI2OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZSBkZWZzCi0KLTIwMTEtMDgtMDQgMTc6MTI6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogY2xlYW51cHMgYW5kIG1hcmsgcmVjb25maWd1cmUKLQkgIERvbid0IGFidXNlIHRoZSByZXN1bHQgdmFyaWFibGUuCi0JICBNYXJrIHRoZSBzcmNwYWQgd2l0aCBhIHJlY29uZmlndXJlIHNvIHRoYXQgbmVnb3RpYXRpb24gaGFwcGVucy4KLQotMjAxMS0wOC0wNCAxNzoxMjoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBhZGQgbWV0aG9kIHRvIG1hcmsgcmVjb25maWd1cmUKLQotMjAxMS0wOC0wNCAxNjo1Njo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiByZW1vdmUgbmVnb3RpYXRpb24gZnJvbSB0aGUgc3RhdGUgY2hhbmdlCi0JICBSZW1vdmUgdGhlIG5lZ290aWF0aW9uIGZyb20gdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiwgaXQgY2F1c2VzIGRhdGEgdHJhbnNmZXIKLQkgIGFuZCBidWZmZXJwb29sIG5lZ290aWF0aW9uLCB3aGljaCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgZG9uZS4gU2luY2Ugd2UgaGF2ZSB0aGUKLQkgIHJlY29uZmlndXJlIHN0YXRlIG9uIHRoZSBwYWQsIHRoZSBjcmVhdGUgZnVuY3Rpb24gd2lsbCBkbyB0aGUgbmVnb3RpYXRpb24gYXMKLQkgIHNvb24gYXMgaXQgZ2V0cyBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLQotMjAxMS0wOC0wNCAxNjozNDo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIGJhc2VzcmM6IGV4cG9zZSBzZXRfY2FwcyBtZXRob2QKLQkgIEV4cG9zZSBhIHByZXZpb3VzbHkgc3RhdGljIG1ldGhvZCBzbyB0aGF0IGN1c3RvbSBuZWdvdGlhdGUgaW1wbGVtZW50YXRpb24gY2FuCi0JICBjYWxsIGl0IGFuZCBkbyB0aGUgcmlnaHQgdGhpbmcuCi0KLTIwMTEtMDgtMDQgMTM6NDg6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogUEFVU0VEPC0+UExBWSBkb2Vzbid0IGNoYW5nZSBwb29sIHN0YXRlCi0JICBEb24ndCBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBidWZmZXJwb29sIHdoZW4gZ29pbmcgYmV0d2VlbiBQQVVTRUQgYW5kIFBMQVlJTkcsCi0JICBpdCB3aWxsIGRlYWxsb2MgYW5kIHJlYWxsb2MgYWxsIGJ1ZmZlcnMsIHdoaWNoIGlzIGNsZWFybHkgdG9vIGludmFzaXZlLiBXZSB3aWxsCi0JICBuZWVkIHRvIGFkZCBzb21lIG90aGVyIHdheSBvZiB1bmJsb2NraW5nIHRoZSBidWZmZXJwb29sLgotCi0yMDExLTA4LTA0IDExOjAwOjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgZml4IGRlZmF1bHQgYWxpZ25tZW50Ci0JICBBIDAgYWxpZ25tZW50IGlzIHRoZSBkZWZhdWx0LgotCi0yMDExLTA4LTA0IDEwOjU0OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVycG9vbDogYWRkIGdzdF9idWZmZXJfcG9vbF9pc19hY3RpdmUoKQotCi0yMDExLTA4LTAzIDExOjU3OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgYmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjExLjAgPT09Ci0KLTIwMTEtMDgtMDIgMjA6NTU6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSRUxFQVNFIDAuMTEKLQotMjAxMS0wOC0wMyAxMTowNDoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBwb3J0aW5nLXRvLTAuMTE6IEFkZCBzZWN0aW9uIGFib3V0IEdzdEl0ZXJhdG9yCi0KLTIwMTEtMDgtMDEgMTg6MTI6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBkb24ndCBhZGQgdGhlIHNhbWUgb3B0aW9uIHR3aWNlCi0JICBNYWtlIHN1cmUgdGhhdCB3ZSBvbmx5IGFkZCBhbiBvcHRpb24gdG8gdGhlIGFycmF5IG9uY2UuCi0KLTIwMTEtMDctMzAgMTQ6MDQ6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJwb29sOiBhZGQgbWV0aG9kIHRvIGNoZWNrIGZvciBhbiBvcHRpb24KLQkgIEFkZCBhIG1ldGhvZCB0byBjaGVjayBpZiBhbiBvcHRpb24gaXMgc3VwcG9ydGVkIG9uIHRoZSBidWZmZXJwb29sLgotCi0yMDExLTA3LTI5IDE3OjEwOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGJ1ZmZlcnBvb2w6IGFkZCBvcHRpb25zIEFQSSB0byBidWZmZXJwb29sCi0JICBNYWtlIGl0IHBvc3NpYmxlIHRvIHF1ZXJ5IHRoZSBzdXBwb3J0ZWQgb3B0aW9ucyBvZiBhIGJ1ZmZlcnBvb2wgYW5kIGVuYWJsZQotCSAgb3B0aW9ucy4gVGhpcyBpcyBhIGJpdCBtb3JlIGdlbmVyaWMgdGhhbiB0aGUgQVBJIHRvIGVuYWJsZSBtZXRhZGF0YS4gVGhlIHB1cnBvc2UKLQkgIGlzIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gYWRkIG5ldyBjdXN0b20gY29uZmlnIG9wdGlvbnMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YKLQkgIHRoZSBidWZmZXJwb29sIHdoZW4gc3VwcG9ydGVkLgotCi0yMDExLTA3LTI4IDEyOjExOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBlbGVtZW50OiBkb24ndCB1c2UgR19DT05TVF9SRVRVUk4KLQkgIEl0J3MgYmVlbiBkZXByZWNhdGVkIGluIG5ld2VyIEdMaWIgdmVyc2lvbnMKLQotMjAxMS0wNy0yOCAxMjowMTo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbDoKLQkgIG1hbnVhbDogdXBkYXRlIGZvciBwb3NpdGlvbi9kdXJhdGlvbiBxdWVyeSBBUEkgY2hhbmdlCi0KLTIwMTEtMDctMjcgMDA6Mjg6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL2ZyYW1lc3RlcDEuYzoKLQkgIHRlc3RzOiB1cGRhdGUgZm9yIHF1ZXJ5IEFQSSBjaGFuZ2VzCi0KLTIwMTEtMDctMjcgMDA6Mjg6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHBsdWdpbnM6IHVwZGF0ZSBmb3IgcXVlcnkgQVBJIGNoYW5nZXMKLQotMjAxMS0wNy0yNyAwMDoyNjo0MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2U6IHVwZGF0ZSBmb3IgcXVlcnkgQVBJIGNoYW5nZXMKLQotMjAxMS0wNy0yNyAwMDoxNzowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICBnc3Q6IGZpeCBhd2t3YXJkIGRlc3RfZm9ybWF0IGlub3V0IHBhcmFtZXRlciBpbiBxdWVyeSB1dGlsaXR5IGZ1bmN0aW9ucwotCSAgVGhlIGlkZWEgd2FzIG9yaWdpbmFsbHkgdGhhdCBpZiBvbmUgcGFzc2VkICZkZXN0X2ZtdCB3aXRoCi0JICBkZXN0X2ZtdD1HU1RfRk9STUFUX0RFRkFVTFQsIHRoZW4gdGhlIGNvZGUgYW5zd2VyaW5nIHRoZSBxdWVyeQotCSAgY291bGQgY2hhbmdlIGRlc3RfZm10IHRvIHRoZSBhY3R1YWwgZGVmYXVsdCBmb3JtYXQgdXNlZC4gSG93ZXZlciwKLQkgIGluIG1vcmUgdGhhbiBoYWxmIGEgZGVjYWRlIG9mIEdTdHJlYW1lciAwLjEwIG5vIHBpZWNlIG9mIGNvZGUgaW4KLQkgIEdTdHJlYW1lciBoYXMgZXZlciB1c2VkIHRoYXQgZmVhdHVyZSwgbm9yIGFyZSB0aGVyZSB0aGF0IG1hbnkKLQkgIHVzZXJzIG9mIHRoaXMgQVBJIHRoYXQgYWN0dWFsbHkgY2hlY2sgd2hldGhlciB0aGUgZm9ybWF0IHJldHVybmVkCi0JICBpcyB0aGUgb3JpZ2luYWwgZm9ybWF0IHBhc3NlZCBiZWZvcmUgdXNpbmcgdGhlIHZhbHVlcyByZXR1cm5lZC4KLQkgIEFsc28sIGl0J3MganVzdCBhbm5veWluZy10by11c2UgQVBJIGluIGl0cyBvd24gcmlnaHQuCi0JICBGb3IgYWxsIHRoZXNlIHJlYXNvbnMsIG1ha2UgaXQgc28gdGhhdCB0aGUgZGVzdGluYXRpb24gZm9ybWF0IGlzCi0JICBwYXNzZWQgZGlyZWN0bHkgYW5kIGNhbid0IGJlIGNoYW5nZWQgYnkgdGhlIGVsZW1lbnQgcXVlcmllZC4KLQotMjAxMS0wNy0yNyAxMjo1MDozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA3LTI3IDEyOjQ5OjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGFkZCBtb3JlIGNvbW1lbnRzCi0KLTIwMTEtMDctMjcgMTI6NDU6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zOiBhbHNvIHBhc3MgYWxsb2NhdGlvbiBxdWVyeSBpbiBpbl9wbGFjZQotCSAgV2hlbiB3ZSBhcmUgZG9pbmcgYW4gaW5fcGxhY2UgdHJhbnNmb3JtLCBkb24ndCBkbyB0aGUgYWxsb2NhdGlvbiBxdWVyeSBidXQgbGV0Ci0JICB0aGUgdXBzdHJlYW0gZWxlbWVudCBkZWNpZGUuCi0KLTIwMTEtMDctMjYgMjI6NDE6NTkgLTA3MDAgIEV2YW4gTmVtZXJzb24gPGV2YW5AY29ldXMtZ3JvdXAuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JICBiYXNlOiBhZGQgbWlzc2luZyAob3V0KSBhbm5vdGF0aW9uIGZvciBieXRlIHJlYWRlci93cml0ZXIgZnVuY3Rpb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1MzgxCi0KLTIwMTEtMDctMjcgMTA6MDk6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgIGVsZW1lbnRmYWN0b3J5OiBmaXggZy1pIGFubm90YXRpb24gZm9yIF9jcmVhdGUoKSBhbmQgX21ha2UoKSB0byBhbGxvdyBOVUxMIG9iamVjdCBuYW1lcwotCi0yMDExLTA3LTI2IDE4OjQ4OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGltcHJvdmUgdGhlIGdldGNhcHMgZnVuY3Rpb24KLQkgIFJlZmFjdG9yIGNhbGxpbmcgdGhlIEdFVENBUFMgZnVuY3Rpb24gYW5kIGNoZWNrcy4KLQkgIE1vdmUgdGhlIGZpbHRlciBjb2RlIGluIG9uZSBwbGFjZS4KLQkgIFdoZW4gdXNpbmcgZml4ZWQgcGFkIGNhcHMsIGdldCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgY2FwcyBhbmQgdGhlbiBmYWxsYmFjawotCSAgdG8gdGhlIEdFVENBUFMgZnVuY3Rpb24uIFdlIHVzZWQgdG8gc2ltcGx5IGlnbm9yZSB0aGUgR0VUQ0FQUyBmdW5jdGlvbiwgd2hpY2gKLQkgIHJlc3VsdGVkIGluIHRyYW5zZm9ybSBlbGVtZW50cyByZXR1cm5pbmcgdGhlIHRlbXBsYXRlIGNhcHMgaW5zdGVhZCBvZiBkb2luZyB0aGUKLQkgIGNhcHMgdHJhbnNmb3JtLgotCi0yMDExLTA3LTI2IDE1OjQzOjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IG9ubHkgdXBkYXRlIGNhcHMgd2hlbiBjaGFuZ2VkCi0JICBPbmx5IGNhbGwgdGhlIGV2ZW50IGZ1bmN0aW9uIHdpdGggdGhlIGNhcHMgZXZlbnQgd2hlbiB0aGUgY2FwcyBjaGFuZ2VkLgotCi0yMDExLTA3LTI2IDE0OjM3OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGFkZCBzb21lIG1vcmUgZGVidWcgaW5mbwotCi0yMDExLTA3LTI2IDEyOjIxOjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBiYXNlc2luazogbWFrZSBpdCBlYXN5IHRvIG92ZXJyaWRlIHRoZSBwYWQgcXVlcnkKLQkgIEFkZCBhIHZtZXRob2QgdG8gaGFuZGxlIHRoZSBwYWQgcXVlcnkuCi0JICBJbnN0YWxsIGEgZGVmYXVsdCBoYW5kbGVyIGZvciB0aGUgcGFkIHF1ZXJ5LgotCSAgQWRkIGEgdm1ldGhvZCB0byBzZXR1cCB0aGUgYWxsb2NhdGlvbiBwcm9wZXJ0aWVzLgotCSAgVXNlIHRoZSBuZXcgcXVlcnkgZnVuY3Rpb24gaW4gZmlsZXNpbmsKLQotMjAxMS0wNy0yNiAxMjoyMDo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBiYXNlc3JjOiBpbXByb3ZlIGRvY3MKLQotMjAxMS0wNy0yNiAxMjoyMDowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBhZGQgYWxsb2NhdGlvbiBxdWVyeSBqdXN0IGJlY2F1c2UKLQotMjAxMS0wNy0yNSAxNToyMToyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIHBvbGw6IGltcHJvdmUgZGVidWdnaW5nCi0KLTIwMTEtMDctMjUgMTI6NTM6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgbWluaW9iamVjdDogYXZvaWQgcmFjZSBpbiBidWZmZXJwb29sIHJlbGVhc2UKLQkgIEF2b2lkIHBsYXlpbmcgd2l0aCB0aGUgcmVmY291bnQgdG8gZGVjaWRlIHdoZW4gYSBidWZmZXIgaGFzIGJlZW4gcmVjeWNsZWQgYnkgdGhlCi0JICBkaXNwb3NlIGZ1bmN0aW9uLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIHRoZW4gdGVtcG9yYXJpbHkgY2FuIGhhdmUgYSBidWZmZXIgd2l0aAotCSAgYSByZWZjb3VudCA+IDEgYmVpbmcgYWNxdWlyZWQgZnJvbSB0aGUgcG9vbCwgd2hpY2ggaXMgbm90IHdyaXRhYmxlLiBJbnN0ZWFkIHVzZQotCSAgYSBzaW1wbGUgYm9vbGVhbiByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZGlzcG9zZSBmdW5jdGlvbiB0byBpbmZvcm0gdGhlIGNhbGxlZAotCSAgdGhhdCB0aGUgb2JqZWN0IHdhcyByZWN5Y2xlZCBvciBub3QuCi0KLTIwMTEtMDctMjUgMTI6NDk6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogdXNlIERFQlVHIGluc3RlYWQgb2YgRVJST1IgZm9yIGxvZ2dpbmcKLQkgIERvbid0IHVzZSB0aGUgRVJST1IgbG9nIGNhdGVnb3J5IGJlY2F1c2UgdGhlIGFsbG9jYXRpb24gZmFpbHVyZSBtaWdoIG9ubHkgYmUKLQkgIGJhY2F1c2Ugb2YgYSBzdGF0ZSBjaGFuZ2UuCi0KLTIwMTEtMDctMjUgMTI6MTQ6MTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBzdGFydCB3aXRoIHJhaXNlZCBjb250cm9sIHNvY2tldAotCSAgSW4gdGhlIGluYWN0aXZlIHN0YXRlLCB0aGUgY29udHJvbCBzb2NrZXQgc2hvdWxkIGJlIGluIHRoZSByYWlzZWQgc3RhdGUsIHdlIHdpbGwKLQkgIHJlbGVhc2UgaXQgd2hlbiB3ZSBzdGFydC4KLQotMjAxMS0wNy0yNCAxMToyNDo0NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1jbG9jay54bWw6Ci0JKiBkb2NzL3B3Zy9idWlsZGluZy1jaGFpbmZuLnhtbDoKLQkgIHB3ZDogZGlzY29udGlub3VzIGV2ZW50IC0+IG5ld3NlZ21lbnQgZXZlbnQKLQkgIEZpeCBhIDAuOCBsZWZ0b3ZlciBhcyBtZW50aW9uZWQgb24gYnVnICM2MjExMjEuCi0KLTIwMTEtMDctMjQgMDk6MDU6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICB0YWxrIGFib3V0IHRoZSBiYXNldHJhbnNmb3JtIHNpbmtfZXZlbnQgdm1ldGhvZAotCi0yMDExLTA3LTIzIDA4OjAwOjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVycHJpdmF0ZS5oOgotCSAgY29udHJvbGxlcjogZml4IGJ1aWxkIGZhaWx1cmUgZHVlIHRvIGNvbXBpbGVyIHdhcm5pbmcKLQkgIFByZXN1bWFibHkgd2l0aCBuZXdlciBHTGliIHZlcnNpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1MTU1Ci0KLTIwMTEtMDctMjIgMjE6MTc6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBiYXNldHJhbnNmb3JtOiBmaXggc2luayBldmVudCBoYW5kbGluZwotCSAgSW1wbGVtZW50IHRoZSBzaW5rIGV2ZW50IGhhbmRsaW5nIGxpa2UgdGhlIHNyYyBldmVudCBoYW5kbGVyLiBNYWtlIHRoZSBkZWZhdWx0Ci0JICBpbXBsZW1lbnRhdGlvbiBwYXJzZSBhbmQgZm9yd2FyZCB0aGUgZXZlbnQuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gYWN0dWFsbHkKLQkgIHJldHVybiBhbiBlcnJvciB2YWx1ZSBmcm9tIHRoZSBldmVudCBoYW5kbGVyLgotCi0yMDExLTA3LTIyIDE5OjE5OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGhhbmRsZSBmYWlsdXJlcwotCSAgSGFuZGxlIGZhaWx1cmUgdG8gYWN0aXZhdGUgdGhlIGJ1ZmZlcnBvb2wuCi0KLTIwMTEtMDctMjIgMTk6MTE6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zOiBpbXByb3ZlIGRlYnVnZ2luZy4KLQotMjAxMS0wNy0yMSAxODo1MDoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBhZGQgcmVzZXRfYnVmZmVyIHZtZXRob2QKLQkgIEFkZCBhIHZtZXRob2QgdG8gcmVzZXQgYSBidWZmZXIgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiBBZGQgYSBkZWZhdWx0Ci0JICBpbXBsZW1lbnRhdGlvbiB0aGF0IHJlc2V0cyB0aGUgZmxhZ3MsIHRpbWVzdGFtcHMgYW5kIG9mZnNldHMuCi0JICBBZGQgc29tZSBtb3JlIGRvY3MuCi0KLTIwMTEtMDctMjEgMTc6NDI6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGJhc2V0cmFuczogUmVtb3ZlIHJlZiBpbiBwYXNzdGhyb3VnaAotCSAgUmVtb3ZlIHRoZSByZXF1aXJlbWVudCB0byBoYXZlIHRvIHJldHVybiBhIHJlZiB0byB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gaW4KLQkgIHBhc3N0aHJvdWdoIG1vZGUuIFRoaXMgc2F2ZXMgYSBmZXcgcmVmL3VucmVmIGN5Y2xlcyBhbmQgZml4ZXMgYW5vdGhlciAwLjExCi0JICBGSVhNRS4KLQotMjAxMS0wNy0yMSAxNzoyOToxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IG1ha2UgbmV3ICBjb3B5X21ldGFkYXRhIHZtZXRob2QKLQkgIE1ha2UgYSBuZXcgY29weV9tZXRhZGF0YSB2bWV0aG9kIGFuZCBtb3ZlIHRoZSBjb2RlIHRvIGNvcHkgdGhlIHRpbWVzdGFtcHMsIGZsYWdzCi0JICBhbmQgb2Zmc2V0cyBpbnRvIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGdpdmUgdGhlCi0JICBzdWJjbGFzc2VzIGEgY2hhbmNlIHRvIG92ZXJyaWRlIHRoZSBjb3B5IG1ldGhvZC4KLQotMjAxMS0wNy0yMSAxNjo0OToxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYwotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jCi0KLTIwMTEtMDctMjEgMTY6Mzk6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zOiBhdm9pZCBpbnRlcm1lZGlhdGUgbWV0aG9kCi0JICBTaW1wbHkgY2FsbCB0aGUgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIG1ldGhvZCBpbnN0ZWFkIG9mIGNhbGxpbmcgYW4gaW50ZXJtZWRpYXRlCi0JICBmdW5jdGlvbi4KLQotMjAxMS0wNy0yMSAxNjozMDowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBtb3ZlIHRoZSBtZXRhZGF0YSBjb3B5IGNvZGUKLQkgIE1vdmUgdGhlIG1ldGFkYXRhIGNvcHkgY29kZSB0byB0aGUgZGVmYXVsdCBwcmVwYXJlX291dHB1dF9idWZmZXIgaW1wbGVtZW50YXRpb24uCi0KLTIwMTEtMDctMjEgMTU6NDk6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogbW92ZSBwcmVwYXJlX291dHB1dF9idWZmZXIgY29kZQotCSAgTW92ZSB0aGUgY29kZSBmb3IgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIHRvIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gdGhpcyBhbGxvd3MKLQkgIHVzIHRvIHNpbXBsaWZ5IHNvbWUgdGhpbmdzIGFuZCBoYXZlIHN1YmNsYXNzZXMgY2FsbCBpbnRvIHRoZSBkZWZhdWx0Ci0JICBpbXBsZW1lbnRhdGlvbiB3aGVuIG5lZWRlZC4KLQotMjAxMS0wNy0yMSAxNTo0ODoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBvbmx5IGdldCBzaXplIGZvciBkZWJ1ZwotCi0yMDExLTA3LTIxIDE0OjE4OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuczogZml4IGNvbW1lbnQgYW5kIHdhcm4KLQkgIEVtaXQgYSB3YXJuaW5nIGluIHRoZSBkZWJ1ZyBsb2cgd2hlbiBzb21ldGhpbmcgc2VlbXMgd2VpcmQuCi0KLTIwMTEtMDctMjEgMTQ6MTQ6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogb25seSBnZXQgY2FwcyBmb3Igc2l6ZSB0cmFuc2Zvcm0KLQkgIERlbGF5IGdldHRpbmcgdGhlIGNhcHMgdW50aWwgd2UgbmVlZCB0byBjYWxsIHRoZSB0cmFuc2Zvcm1fc2l6ZSBmdW5jdGlvbi4KLQotMjAxMS0wNy0yMSAxMzo1NjoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgYmFzZXRyYW5zOiByZW1vdmUgdXNlbGVzcyB2YXJpYWJsZXMgZnJvbSBwcmVwYXJlX291dHB1dF9idWZmZXIKLQkgIFJlbW92ZSB0aGUgY2FwcyBhbmQgc2l6ZSBmcm9tIHRoZSBwcmVwYXJlX291dHB1dF9idWZmZXIgZnVuY3Rpb24uIHdpdGgKLQkgIGJ1ZmZlcnBvb2xzIGFuZCBjYXBzbmVnbyBkb25lIGRpZmZlcmVudGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgaW4gbW9zdCBjYXNlcyBhbmQKLQkgIGlmIHdlIGRvLCB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgdHJhbnNmb3JtX3NpemUgZnVuY3Rpb24gYW5kIGdldCB0aGUgY2FwcyBmcm9tCi0JICB0aGUgc3JjcGFkLgotCi0yMDExLTA3LTE4IDE3OjIyOjQxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWNsb2Nrcy54bWw6Ci0JICBkb2NzOiBjbGFyaWZ5IGNsb2NrcyBkb2NzIGluIG1hbnVhbAotCSAgQWZ0ZXIgYSBxdWVzdGlvbiBvbiB0aGUgbWFpbGluZyBsaXN0LCBtZW50aW9uIHRoYXQgKmZsdXNoaW5nKiBzZWVrcyByZXNldCB0aGUKLQkgIHJ1bm5pbmcgdGltZS4KLQotMjAxMS0wNy0xNiAyMjowMDoxNSArMDMwMCAgUmFsdWNhIEVsZW5hIFBvZGl1YyA8cmFsdWNhZWxlbmExOTg1QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgZG9jczogcmVtb3ZlZCBkb3VibGUgbmVnYXRpb24gaW4gZXZlbnQvbWVzc2FnZSBzZXEgbnVtIGRlc2NyaXB0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0NzUxCi0KLTIwMTEtMDctMTYgMTI6MjE6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6Ci0JICB0ZXN0czogbWFrZSBzdXJlIG5vbi1BU0NJSSBjaGFycyBpbiBmaWxlbmFtZXMgYXJlIGVzY2FwZWQgd2hlbiBjcmVhdGluZyBVUklzIGZyb20gdGhlbQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDY3MwotCi0yMDExLTA3LTE1IDE2OjA0OjExICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGRvbid0IGFjY2lkZW50YWxseSBkaXNhYmxlIHRoZSBwb29sCi0JICBXaGVuIHdlIHNldCBhIHBvb2wgYW5kIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgcG9vbCwgZG9uJ3QgZGlzYWJsZSB0aGUgcG9vbC4KLQotMjAxMS0wNy0xNSAxMzoyNzoxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IGNhbGwgcmVsZWFzZV9idWZmZXIgYWZ0ZXIgYWxsb2MKLQkgIEFmdGVyIHdlIGFsbG9jYXRlZCBhIG5ldyBidWZmZXIsIGNhbGwgdGhlIHJlbGVhc2VfYnVmZmVyIHZtZXRob2QgdG8gcHV0IHRoZSBuZXcKLQkgIGJ1ZmZlciBpbiB0aGUgcG9vbCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoYXQgdGhlIHBvb2wgdXNlcyB0aGUgZGVmYXVsdAotCSAgcmVsZWFzZV9tZXRob2QgaW1wbGVtZW50YXRpb24uCi0KLTIwMTEtMDctMTUgMTE6NTI6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSAgYnVmZmVycG9vbDogYWRkIG1hY3JvIHRvIGNoZWNrIGZvciBmbHVzaGluZwotCi0yMDExLTA3LTE1IDExOjUxOjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGltcHJvdmUgZGVidWcgbWVzc2FnZQotCi0yMDExLTA3LTE0IDEyOjQ1OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZml4IHByaW50ZiBmb3JtYXQgaW4gZGVidWcgbWVzc2FnZQotCi0yMDExLTA3LTEzIDExOjM5OjE1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHVuc2V0IFBMQVlJTkcgdHJhbnNpdGlvbiBmbGFnIHdoZW4gdHJhbnNpdGlvbiBjb21wbGV0ZWQKLQotMjAxMS0wNy0xMiAxNDowNzo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBmaXggcmVzaXplIGZ1bmN0aW9uIHNvbWUgbW9yZQotCSAgRG9uJ3QgcmVtb3ZlIG1lbW9yeSBibG9ja3MgZnJvbSB0aGUgYnVmZmVyIHdoZW4gd2UgY2xpcCBhbmQgcmVzaXplLCBpbnN0ZWFkIHNldAotCSAgdGhlIG1lbW9yeSBvZmZzZXQgYW5kIHNpemUgdG8gMC4gVGhpcyBhbGxvd3MgdXMgdG8gbWFrZSB0aGUgYnVmZmVyIGxhcmdlciBhZ2FpbgotCSAgbGF0ZXIuCi0KLTIwMTEtMDctMTIgMTM6NDA6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogaW1wcm92ZSBzaXplIGhhbmRsaW5nCi0JICBBbHNvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtdWx0aXBsZSBlbXB0eSBtZW1vcnkgYmxvY2tzIGFyZSBpbiB0aGUgYnVmZmVyLgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhpcy4KLQotMjAxMS0wNy0xMiAxMjowMDo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBmaXggX3Jlc2l6ZSBzb21lIG1vcmUKLQkgIEFkZCBtb3JlIGRlYnVnLgotCSAgQWxvdyByZXNpemUgdG8gMCBieXRlcy4KLQkgIERvIGNsaXBwaW5nIGNvcnJlY3RseS4KLQkgIEFkZCBtb3JlIHVuaXQgdGVzdHMuIEFsc28gYWRkIGEgZmFpbGluZyB0ZXN0OiB3aGVuIHdlIHJlc2l6ZSB0byAwIGFuZCB0aGVuCi0JICB0cnkgdG8gcmVzaXplIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNpemUgaXQgZmFpbHMgYmVjYXVzZSB0aGUgbWVtb3J5IHdhcwotCSAgcmVtb3ZlZC4KLQotMjAxMS0wNy0xMSAxODowMDo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBmaXggbmVnYXRpdmUgb2Zmc2V0cyBzb21lIG1vcmUKLQkgIEFsbG93IGZvciBuZWdhdGl2ZSBvZmZzZXRzIHdoZW4gZG9pbmcgbWVtb3J5IGNvcHkgYW5kIHNoYXJlLgotCSAgQWRkIGZhc3QgcGF0aCBpbiB0aGUgX2dldF9zaXplcygpIGZ1bmN0aW9uLgotCSAgRml4IHJlc2l6ZSBmb3IgbmVnYXRpdmUgb2Zmc2V0IGFuZCBleHBhbmRpbmcgdGhlIGJ1ZmZlci4KLQkgIEFkZCBzb21lIHVuaXQgdGVzdHMuCi0KLTIwMTEtMDctMTEgMTY6NDM6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogYWRkIGRlZnMgZm9yIG5ldyBtZXRob2RzCi0KLTIwMTEtMDctMTEgMTY6NDI6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogZml4IF9yZXNpemUgYmV0dGVyCi0KLTIwMTEtMDctMTEgMTY6MTc6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVyOiBhZGQgYXBpIHRvIGdldCB0aGUgY3VycmVudCBtZW1vcnkgb2Zmc2V0Ci0JICBBbHNvIHJldHVybiB0aGUgb2Zmc2V0IGluIGEgR3N0TWVtb3J5IGJsb2NrIHdpdGggdGhlIGdldF9zaXplcygpIG1ldGhvZC4gVGhpcwotCSAgYWxsb3dzIHVzIHRvIGZpZ3VyZSBvdXQgaG93IG11Y2ggcHJlZml4IHRoZXJlIGlzIHVudXNlZC4KLQkgIENoYW5nZSB0aGUgcmVzaXplIGZ1bmN0aW9uIHNvIHRoYXQgYSBuZWdhdGl2ZSBvZmZzZXQgY2FuIGJlIGdpdmVuLiBUaGlzIHdvdWxkCi0JICBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlc2l6ZSB0aGUgYnVmZmVyIHNvIHRoYXQgdGhlIHByZWZpeCBiZWNvbWVzIGF2YWlsYWJsZS4KLQkgIEFkZCBnc3RfYnVmZmVyX2dldF9zaXplcygpIHRvIHJldHVybiB0aGUgb2Zmc2V0IGFuZCBtYXhzaXplIGFzIHdlbGwgYXMgdGhlIHNpemUuCi0JICBBbHNvIGNoYW5nZSB0aGUgYnVmZmVyIHJlc2l6ZSBtZXRob2Qgc28gdGhhdCB3ZSBjYW4gc3BlY2lmeSBhIG5lZ2F0aXZlIG9mZnNldAotCSAgdG8gcmVtb3ZlIHByZWZpeCBieXRlcy4KLQotMjAxMS0wNy0xMSAxNDo0MDowNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogYWRkIHNvbWUgbWVtb3J5IHdyYXBwZWQgYnVmZmVyIGFsbG9jYXRpb24gaGVscGVycwotCi0yMDExLTA3LTExIDEyOjExOjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgbWluaW9iamVjdDogY2xlYW51cCBoZWFkZXJzCi0KLTIwMTEtMDctMTEgMTE6NDA6MDggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBlYXQgaW5jb21pbmcgY2FwcyBldmVudAotCSAgLi4uIGFzIGl0IGlzIHR5cGljYWxseSB1cCB0byBiYXNlY2xhc3MgdG8gc2V0IHByb3BlciBzcmMgY2Fwcy4KLQotMjAxMS0wNy0xMSAxMTozNzoyOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYXZvaWQgaW5hZHZlcnRlbnRseSBkcm9wcGluZyBhbiBldmVudAotCSAgLi4uIHBhcnRpY3VsYXJseSBhIG5vbi1zdGlja3kgc2VyaWFsaXplZCBldmVudCB0aGF0IGhhcHBlbnMgdG8gcGFzcwotCSAgd2hlbiBhbiBldmVudCB1cGRhdGUgaXMgcGVuZGluZy4KLQotMjAxMS0wNy0wNCAxMjo1ODo1NCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiB0cnkgaGFyZGVyIHRvIGFycmFuZ2UgaW5jcmVhc2luZyBwb3NpdGlvbiByZXBvcnRpbmcKLQkgIC4uLiByYXRoZXIgdGhhbiBoYXZpbmcgYSBtb21lbnRhcnkgZGVjcmVhc2luZyBvbmUgd2hpbGUgdHJhbnNpdGlvbmluZwotCSAgdG8gUExBWUlORy4KLQkgIEZpeGVzICM2MjgwMjEuCi0KLTIwMTEtMDctMDggMTY6MDc6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBhZGQgbmV3IEFQSSB0byAuZGVmIGZpbGUKLQotMjAxMS0wNy0wNiAxNToxMzozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogbWFrZSBpZHggYXJndW1lbnQgdG8gZ3N0X2J1ZmZlcl90YWtlX21lbW9yeSgpIHNpZ25lZAotCSAgU2luY2UgLTEgaXMgYWNjZXB0YWJsZSwgaXQgc2hvdWxkIGJlIHNpZ25lZC4KLQotMjAxMS0wNy0wNyAxNDo1NzoxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGZpeCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgaW4gZGVidWcgbWVzc2FnZXMKLQkgIERvbid0IHVzZSBidWZmZXJzIHRoYXQgd2UndmUgZ2l2ZW4gYXdheSBvciB1bnJlZmVkIGluIGRlYnVnIG1lc3NhZ2VzLgotCi0yMDExLTA3LTA3IDExOjE0OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGZpeCBhZnRlciBtZXJnZQotCi0yMDExLTA3LTA3IDExOjEzOjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYwotCi0yMDExLTA3LTA2IDE2OjA4OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IGFkZCBtZW1zZXQgZnVuY3Rpb24KLQotMjAxMS0wNy0wNiAxMjowOToyOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogZml4IGd1YXJkcyBmb3IgZ3N0X2J1ZmZlcl90YWtlX21lbW9yeSgpCi0JICBTaW5jZSBpZHggPSAtMSBtYWtlcyBpdCBkZWZhdWx0IHRvIGlkeD1sZW4sIGxlbiBpcyBhbHNvCi0JICBhIHZhbGlkIGlucHV0IGlkeC4KLQotMjAxMS0wNy0wNSAxNjozODowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBhZGQgY2xhc3MgcmVmL3VucmVmCi0KLTIwMTEtMDctMDUgMTY6MzI6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgotCSAgdGVzdDogZGlzYWJsZSBmYWlsaW5nIHVuaXQgdGVzdHMKLQkgIERpc2FibGUgdW5pdCB0ZXN0cyB0aGF0IGFyZSBmYWlsaW5nIHVudGlsIHNvbWVvbmUgcG9ydHMgdGhpcyB0byAwLjExCi0KLTIwMTEtMDctMDUgMTY6MjA6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JICBxdWV1ZTogZml4IHVuaXQgdGVzdAotCSAgU2V0IHRoZSByaWdodCBwb3NpdGlvbiBtZW1iZXIgaW4gdGhlIHNlZ21lbnQgZXZlbnQuCi0JICBBZGQgc29tZSBkZWJ1ZyB0byBxdWV1ZS4KLQotMjAxMS0wNy0wNSAwMDoxMDoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBnc3Q6IG1ha2UgY29tcGlsZXIgd2FybiBhYm91dCB1bnN0YWJsZSBBUEkgaWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkgaXMgbm90IGRlZmluZWQKLQkgIEFuZCBkZWZpbmUgaXQgaW4gb3VyIG93biBidWlsZC4KLQotMjAxMS0wNy0wNSAwMDoxMjoxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IHVwZGF0ZSAuZGVmIGZpbGVzIGZvciBsYXRlc3QgQVBJIGNoYW5nZXMvYWRkaXRpb25zCi0KLTIwMTEtMDYtMzAgMTc6Mzk6MzcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGRvIG5vdCBzbmVha2lseSBtZXNzIHdpdGggY3VycmVudCBvZmZzZXQgd2hlbiB1cGRhdGluZyBsZW5ndGgKLQotMjAxMS0wNi0yOCAyMjoxODo0NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogdW5yZWYgYWxsb2NhdGlvbiBxdWVyeSB3aGVuIG5vIGxvbmdlciBuZWVkZWQKLQotMjAxMS0wNi0yOCAxOTowMTo1NyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogYXZvaWQgaXRlcmF0aW5nIG92ZXIgYSBzaW5nbGUgTlVMTCBwYWQKLQotMjAxMS0wNi0yMCAyMzoyODowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3RpbnRlcmZhY2UuYzoKLQkqIGdzdC9nc3RpbnRlcmZhY2UuaDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW50ZXJmYWNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2FybS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9ocHBhLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjMzIuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjNjQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3Rfc3BhcmMuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0Lmg6Ci0JICBSZW1vdmUgR3N0SW1wbGVtZW50c0ludGVyZmFjZQotCSAgSXQgd2FzIGEgYml0IHRvbyBjbGV2ZXIsIGFuZCBkaWRuJ3QgcmVhbGx5IHdvcmsgYXMgYW4gQVBJLAotCSAgY29uZnVzaW5nIHBlb3BsZSB0byBubyBlbmQuIEJldHRlciBpbXBsZW1lbnQgc3BlY2lmaWMgbWV0aG9kcwotCSAgd2hldGhlciBhbiBpbnRlcmZhY2UgaXMgdXNhYmxlL2F2YWlsYWJsZS9yZWFkeSBvbiB0aGUgaW50ZXJmYWNlCi0JICBpdHNlbGYsIG9yIGV2ZW4gYWRkIEdFcnJvciBhcmd1bWVudHMsIHJhdGhlciB0aGFuIHRyeSB0byBoYXZlCi0JICBwZXItaW5zdGFuY2UgaW50ZXJmYWNlcy4KLQotMjAxMS0wNi0yNSAxMzo1MTo1MiAtMDcwMCAgRW1tYW51ZWwgUGFjYXVkIDxlbW1hbnVlbC5wYWNhdWRAbGFwcC5pbjJwMy5mcj4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IENoZWNrIGZvciBQUl9TRVRfTkFNRSBiZWZvcmUgdXNpbmcKLQkgIEZpeGVzOiAjNjUzMTcyLgotCSAgU2lnbmVkLW9mZi1ieTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLTIwMTEtMDYtMjMgMTE6Mjc6NTIgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNjliOTgxZiB0byA2MDVjZDlhCi0KLTIwMTEtMDYtMjMgMTg6MDM6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBxdWVyeTogYWRkIG1ldGhvZCB0byBjaGVjayBmb3IgbWV0YWRhdGEKLQkgIEFkZCBhIG1ldGhvZCB0byBjaGVjayBpZiBhIGNlcnRhaW4gbWV0YWRhdGEgaXMgc3VwcG9ydGVkIGluIHRoZSBBTExPQ0FUSU9OCi0JICBxdWVyeS4KLQotMjAxMS0wNi0yMiAxODowNzoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBkZXNpZ24gZG9jcyBhIGxpdHRsZQotCSAgVXBkYXRlIHRoZSBkZXNpZ24gZG9jIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHZpZGVvbWV0YWRhdGEuCi0KLTIwMTEtMDYtMjIgMTc6MTI6MzQgKzAyMDAgIEtvb3AgTWFzdCA8a3dtIGF0IEZyZWVCU0Qub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiB1c2UgJiBpbnN0ZWFkIG9mICYmIGZvciBtYXNraW5nIGJpdHMKLQkgIFNlZSAjNjUzMTM3Ci0KLTIwMTEtMDYtMjIgMTc6MDk6NTIgKzAyMDAgIEtvb3AgTWFzdCA8a3dtIGF0IEZyZWVCU0Qub3JnPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IHJlbW92ZSByZWR1bmRhbnQgKCkKLQkgIFNlZSAjNjUzMTM3Ci0KLTIwMTEtMDYtMjIgMTc6MDU6MjcgKzAyMDAgIEtvb3AgTWFzdCA8a3dtIGF0IEZyZWVCU0Qub3JnPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggc2Vla3N0b3AKLQkgIFNlZSAjNjUzMTM3Ci0KLTIwMTEtMDYtMjIgMTY6NTg6NTMgKzAyMDAgIEtvb3AgTWFzdCA8a3dtIGF0IEZyZWVCU0Qub3JnPgotCi0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgc2VnbWVudDogY2FzdCB0byByaWdodCB0eXBlCi0JICBTZWUgIzY1MzEzNwotCi0yMDExLTA2LTIyIDE2OjM4OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIHVyaTogcmVtb3ZlIHNvbWUgX2Z1bGwgdmFyaWFudHMKLQotMjAxMS0wNi0yMiAxNjoxNjo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIHRhZ3M6IFJlbW92ZSBjcmF6eSB0YWcgbWVzc2FnZXMKLQkgIERvbid0IG1peCBtZXNzYWdlcyBhbmQgcGFkcyBhbmQgdGFncy4KLQkgIE1ha2UgdGhlIHNpbmsgcG9zdCB0YWcgbWVzc2FnZXMgd2hlbiBhIHRhZyBldmVudCBpcyByZWNlaXZlZC4KLQkgIFNpbmNlIHRhZ3MgYXJlIHN0aWNreSBvbiBwYWRzIG5vdywgdGhleSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlcmUKLQkgIHdoZW4gbmVlZGVkLgotCi0yMDExLTA2LTIyIDEyOjI4OjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgY2FwczogSGlkZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzCi0JICBNYWtlIHRoZSBBcnJheSBvZiBzdHJ1Y3R1cmVzIHByaXZhdGUuIFRoaXMgc2hvdWxkIGFsbG93IHVzIHRvIGltcGxlbWVudAotCSAgdGhlIGFycmF5IG1vcmUgZWZmaWNpZW50bHkgb3Igd2l0aCBzb21lIHByZWFsbG9jYXRlZCBzdHJ1Y3R1cmVzIHdoZW4KLQkgIHdlIHdhbnQgdG8gbGF0ZXIuCi0JICBBZGQgYSBuZXcgbWV0aG9kIHRvIGNsZWFuIHVwIGEgc3RhdGljIHN0cnVjdHVyZSBzbyB0aGF0IHdlIGNhbiByZW1vdmUgc29tZSBjb2RlCi0JICB0aGF0IHBva2VzIGludG8gdGhlIHByaXZhdGUgYml0cyBvZiB0aGUgY2Fwcy4KLQotMjAxMS0wNi0yMiAxMjoyNjoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgbmVnb3RpYXRpb24gZGVzaWduIGRvYwotCi0yMDExLTA2LTIyIDExOjQyOjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIG1lbW9yeTogcmVuYW1lIEdzdE1lbW9yeUFsbG9jYXRvciAtPiBHc3RBbGxvY2F0b3IKLQkgIHNpbXBsaWZ5IHRoZSBuYW1lIG9mIHRoZSBhbGxvY2F0b3Igb2JqZWN0LgotCi0yMDExLTA2LTIxIDE3OjU0OjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBjb25maWd1cmUuYWMKLQkgIHdpbjMyL2NvbW1vbi9jb25maWcuaAotCSAgd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaAotCi0yMDExLTA2LTIxIDE3OjQ3OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0OgotCSAgZG9jczogdXBkYXRlIGJ1ZmZlcnBvb2wgZGVzaWduIGRvYwotCi0yMDExLTA2LTIxIDE3OjQ3OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGltcHJvdmUgZGVidWdnaW5nCi0KLTIwMTEtMDYtMjEgMTU6MTU6NDQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9tYW51YWwvY29tbXVuaWNhdGlvbi5wbmc6Ci0JICBpbWFnZXM6IHN0cmlwIGltYWdlcyBvZiBleHRyYSB0ZXh0IHRhZ3MKLQotMjAxMS0wNi0yMSAxMjozMjo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IHJldHVybiBlbXB0eSBtZXRhZGF0YSBhcnJheQotCSAgUmV0dXJuIGEgc3RyaW5nIGFycmF5IHdpdGggTlVMTCBpbnN0ZWFkIG9mIE5VTEwgZnJvbSB0aGUgZGVmYXVsdCBnZXRfbWV0YXMKLQkgIGZ1bmN0aW9uLgotCi0yMDExLTA2LTIxIDEyOjMxOjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHVzZSBldmVudCBmdW5jdGlvbiBkaXJlY3RseQotCSAgV2Ugd2lsbCBuZXZlciBnbyBpbiB0aGlzIGNvZGUgcGF0aCBmb3IgQ0FQUyBldmVudHMgc28gZGlyZWN0bHkgY2FsbCB0aGUgZXZlbnQKLQkgIGZ1bmN0aW9uLgotCi0yMDExLTA2LTIxIDEwOjI5OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IG5vdGlmeSBjYXBzIGFmdGVyIHdlIHN0b3JlIHRoZSBuZXcgY2FwcwotCSAgbm90aWZ5IGNhcHMgYWZ0ZXIgd2Ugc3RvcmUgdGhlIG5ldyBjYXBzIHNvIHRoYXQgdGhlIG5ldyBjYXBzIGFyZSBhY3R1YWxseQotCSAgdmlzaWJsZSBmb3IgdGhlIGFwcC4KLQotMjAxMS0wNi0yMCAxNzozMjo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBhY3RpdmF0ZSB0aGUgYnVmZmVycG9vbAotCSAgYWx3YXlzIGFjdGl2YXRlIHRoZSBidWZmZXJwb29sLCBldmVuIGlmIHdlIGdldCBpdCBmcm9tIHRoZSBhbGxvY2F0aW9uCi0JICBxdWVyeS4KLQotMjAxMS0wNi0yMCAxNzozMjoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBhbHdheXMgYWN0aXZhdGUgdGhlIHBvb2wgd2UgZ2V0Ci0JICBBY3RpdmF0ZSB0aGUgcG9vbCB3aGVuIHdlIGdldCBpdCBmcm9tIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5LgotCi0yMDExLTA2LTIwIDE2OjQ3OjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYmFzZXRyYW5zZm9ybTogaW5wcm92ZSBhbGxvY2F0aW9uIGhhbmRsaW5nCi0JICBBZGQgdm1ldGhvZCBmb3Igc3ViY2xhc3NlcyB0byBpbmZsdWVuY2UgdGhlIHBvb2wgYW5kIGFsbG9jYXRvci4KLQkgIExvZyB3aGVuIHF1ZXJ5IGZhaWxzLgotCSAgUmVzcGVjdCBuZWdvdGlhdGVkIGFsbG9jYXRvciBhbmQgYWxpZ25tZW50LgotCi0yMDExLTA2LTIwIDE2OjQ2OjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IEltcHJvdmUgbG9nZ2luZwotCSAgTG9nIHdoZW4gdGhpbmdzIGZhaWwuCi0JICBGaXggYSBxdWVyeSBsZWFrLgotCi0yMDExLTA2LTIwIDE2OjQ0OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBpbXByb3ZlIGRlYnVnCi0JICBMb2cgYSBkZWJ1ZyBsaW5lIHdoZW4gdGhlcmUgaXMgbm8gdGFyZ2V0IHBhZCBhbmQgd2hlbiB0aGlzIG1ha2VzIHRoZSBkZWZhdWx0Ci0JICBpbXBsZW1lbnRhdGlvbiBmYWlsLgotCSAgVGFrZSB0aGUgaW50ZXJuYWwgcGFkcyBkaXJlY3RseSB3aGVuIHdlIGNhbi4KLQotMjAxMS0wNi0yMCAxNTo0MDo1MSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogYnVtcCByZXF1aXJlZCBHTGliIHRvIDIuMjYKLQotMjAxMS0wNi0yMCAxMzoyNjowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBhZGQgZnVuY3Rpb24gdG8gc2V0IG1ldGFkYXRhIGFwaQotCSAgQWRkIGEgZnVuY3Rpb24gdG8gcmV0cmlldmUgYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIG1ldGFkYXRhIGFwaXMgZnJvbSB0aGUgdGhlCi0JICBidWZmZXJwb29sLgotCSAgQWRkIGZ1bmN0aW9ucyB0byBjb25maWd1cmUgYW5kIHF1ZXJ5IHRoZSBjb25maWd1cmVkIG1ldGFkYXRhIGFwaXMgaW4gYQotCSAgYnVmZmVycG9vbCBjb25maWd1cmF0aW9uLgotCi0yMDExLTA2LTE5IDEzOjE1OjE5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgZ3N0YnVmZmVyOiBNaW5vciBmaXggdG8gZG9jcwotCSAgQWRkcyBtaXNzaW5nIHBhcmFtZXRlciB0byBkb2NzIG9mIGdzdF9idWZmZXJfY29weV9yZWdpb24KLQotMjAxMS0wNi0xOCAxNzozNTo0MSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0cGFkOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGRvX2V2ZW50X2FjdGlvbnMKLQkgIGRvX2V2ZW50X2FjdGlvbnMgd2FzIGFsd2F5cyB1c2VkIGFzIFRSVUUKLQotMjAxMS0wNi0xOCAxNDozODo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHJlcXVpcmVtZW50IHRvID49IDAuNi44Ci0JICBGb3IgLS1hZGQtaW5pdC1zZWN0aW9uCi0KLTIwMTEtMDYtMTYgMTc6Mjc6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBCdW1wIGdpdCB2ZXJzaW9uIGFmdGVyIHVucGxhbm5lZCAwLjEwLjM1IHJlbGVhc2UKLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi8wLjEwLjM1JwotCi0yMDExLTA2LTE0IDE3OjU3OjIxICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogRml4IHR5cG8gaW4gZG9jdW1lbnRhdGlvbgotCSAgRml4ZXMgIzY1MjU3Ny4KLQotMjAxMS0wNi0xNiAxMDo1NToxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgUmV2ZXJ0ICJ1dGlsczogcmVtb3ZlIHNvbWUgbWFjcm9zIG5vdyBpbiBnbGliIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBkZTI5YWU3YjkyOWNlZGJmNmI5ODM4ZWE1M2IwNWVmYWJkY2U0Y2U3LgotCSAgUmUtYWRkcyBHRkxPQVRfVE9fTEUsIEdGTE9BVF9UT19CRSwgR0RPVUJMRV9UT19MRSwgYW5kIEdET1VCTEVfVE9fQkUuCi0JICBUdXJucyBvdXQgdGhlc2UgYXJlbid0IGluIEdMaWIgeWV0IGFmZXIgYWxsIChzaW5jZSB3ZSBkaWRuJ3QKLQkgIGFjdHVhbGx5IG9wZW4gYSBidWcgdG8gZ2V0IHRoZW0gYWRkZWQuLikKLQotPT09IHJlbGVhc2UgMC4xMC4zNSA9PT0KLQotMjAxMS0wNi0xNSAxOToxNToyNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMC4xMC4zNQotCSAgVGhpcyBpcyBhbiBhZC1ob2MgcmVsZWFzZSB0aGF0IGlzIGFsbW9zdCBpZGVudGljYWwgdG8gMC4xMC4zNDoKLQkgICogd29yayBhcm91bmQgR0xpYiBhdG9taWMgb3BzIEFQSSBjaGFuZ2UKLQkgICogc29tZSBtaW5vciB3aW4zMi9taW5ndyBmaXhlcwotCSAgKiBkb24ndCB1c2UgR19DT05TVF9SRVRVUk4gaW4gcHVibGljIGhlYWRlcnMKLQotMjAxMS0wNi0xNSAxNjo1NjozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBmaXggcmVmY291bnRpbmcgcHJvYmxlbQotCi0yMDExLTA2LTA5IDE3OjEzOjM1ICswMTAwICBKYXZpZXIgSmFyZMOzbiA8amphcmRvbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSogZ3N0L2dzdGZvcm1hdC5oOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmg6Ci0JKiBnc3QvZ3N0dHJhY2UuaDoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIFVzZSAiY29uc3QiIGluc3RlYWQgR19DT05TVF9SRVRVUk4KLQkgIEdfQ09OU1RfUkVUVVJOIHdpbGwgYmUgZGVwcmVjYXRlZCBzb29uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MjIxMQotCi0yMDExLTA2LTA0IDAwOjMwOjE1IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaDoKLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0cG9sbC5jOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9nc3RjbG9ja3N0cmVzcy5jOgotCSAgV29yayBhcm91bmQgY2hhbmdlcyBpbiBnX2F0b21pYyBBUEkKLQkgIFNlZSAjNjUxNTE0IGZvciBkZXRhaWxzLiAgSXQncyBhcHBhcmVudGx5IGltcG9zc2libGUgdG8gd3JpdGUgY29kZQotCSAgdGhhdCBhdm9pZHMgYm90aCB0eXBlIHB1bm5pbmcgd2FybmluZ3Mgd2l0aCBvbGQgZ19hdG9taWMgaGVhZGVycyBhbmQKLQkgIGFzc2VydGlvbnMgaW4gdGhlIG5ldy4gIFRodXMsIG1hY3JvcyBhbmQgYSB2ZXJzaW9uIGNoZWNrLgotCi0yMDExLTA1LTI1IDEzOjQwOjMwICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBzeXN0ZW1jbG9jazogUGxhY2F0ZSBnY2MgYnkgZGVmaW5pbmcgRVdPVUxEQkxPQ0sgdG8gc29tZXRoaW5nCi0KLTIwMTEtMDUtMjUgMTI6NDc6NTEgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9sbDogRml4IFdBS0VfRVZFTlQoKSB0byBiZWhhdmUgcG9zaXhseSBvbiBXaW5kb3dzCi0KLTIwMTEtMDYtMTQgMTU6MTg6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JKiBkb2NzL3JhbmRvbS9zdGF0dXMtMC4xMS0xNC1qdW4tMjAxMS50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgZG9jcwotCi0yMDExLTA2LTEzIDE5OjEwOjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDYtMTMgMTY6MzE6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9iaXRyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jOgotCSAgYnVmZmVyOiBhZGQgaW5kZXggdG8gX3Rha2VfbWVtb3J5KCkKLQkgIEFkZCBhbiBpbmRleCB0byBnc3RfYnVmZmVyX3Rha2VfbWVtb3J5KCkgc28gdGhhdCB3ZSBjYW4gYWxzbyBpbnNlcnQgbWVtb3J5IGF0IGEKLQkgIGNlcnRhaW4gb2Zmc2V0LiBUaGlzIGlzIG1vc3RseSBpbnRlcmVzdGluZyB0byBwcmVwZW5kIGEgaGVhZGVyIG1lbW9yeSBibG9jayB0bwotCSAgdGhlIGJ1ZmZlci4KLQotMjAxMS0wNi0xMyAxNjozMDoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBkb24ndCBmb3J3YXJkIHNjaGVkdWxpbmcgcXVlcnkKLQkgIFRoZSBzY2hlZHVsaW5nIHF1ZXJ5IHNob3VsZCBub3QgYmUgZm9yd2FyZGVkLCBiZWNhdXNlIGVsZW1lbnRzIG5lZWQgdG8gaW1wbGVtZW50Ci0JICBzcGVjaWFsIGNvZGUgdG8gaGFuZGxlIGRpZmZlcmVudCBzY2hlZHVsaW5nIG1ldGhvZHMuCi0KLTIwMTEtMDYtMTMgMTI6MDc6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkgIGJhc2VzcmM6IEFsbG9jYXRvciBidWZmZXJzIGZyb20gbmVnb3RpYXRlZCBhbGxvY2F0b3IKLQkgIEFsbG9jYXRlIGJ1ZmZlcnMgZnJvbSB0aGUgbmVnb3RpYXRlZCBhbGxvY2F0b3Igb3IgYnVmZmVycG9vbC4KLQkgIEhhbmRsZSB0aGUgc3RhdGUgb2YgdGhlIGJ1ZmZlcnBvb2wgd2hlbiBmbHVzaGluZy4KLQkgIEFkZCBmaWxsIG1ldGhvZCB0byBwdXNoc3JjLgotCi0yMDExLTA2LTEzIDEyOjA0OjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGFkZCBtb3JlIGRlYnVnCi0KLTIwMTEtMDYtMTMgMTE6NTE6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBzbWFsbCBpbmRlbnRhdGlvbiBmaXgKLQotMjAxMS0wNi0xMyAxMTo1MDo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiBwYXNzIHRoZSBhbGxvY2F0b3IgYXMgY29uc3QKLQotMjAxMS0wNi0xMyAxMDoxOTozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIGJhc2VzcmM6IG5lZ290aWF0ZSBhbGxvY2F0aW9uCi0JICBBZGQgdm1ldGhvZCB0byBjb25maWd1cmUgYWxsb2NhdGlvbiBtZXRob2RzLgotCSAgUmVtb3ZlIHNvbWUgdW51c2VkIHZhcmlhYmxlcwotCi0yMDExLTA2LTExIDIwOjQ1OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBhZGQgc29tZSBtb3JlIGNoZWNrcwotCSAgTWFrZSBzdXJlIHRoYXQgdGhlIGFsaWdubWVudCBpcyB2YWxpZC4KLQkgIFdoZW4gd2UgaGF2ZSBhIDAgc2l6ZSAodmFyaWFibGUgYnVmZmVyIHNpemUpLCB3ZSBjYW4ndCBoYXZlIGEgYnVmZmVycG9vbC4KLQotMjAxMS0wNi0xMSAxOTo1NDo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogc2V0IGFsbCBkZWZhdWx0IHZhbHVlcwotCSAgRmlsbCBhbGwgcXVlcnkgdmFsdWVzIHdpdGggZ29vZCBkZWZhdWx0cy4KLQotMjAxMS0wNi0xMSAxODo1Mjo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJ1ZmZlcnBvb2w6IHJlbW92ZSBwb3N0Zml4IHBhcmFtZXRlcgotCSAgUmVtb3ZlIHRoZSBwb3N0Zml4IHBhcmFtZXRlciwgaXQncyBub3QgdXNlZCBhbmQgY2FuIGJlIGRvbmUgZGlmZmVyZW50bHkuCi0KLTIwMTEtMDYtMTAgMTc6NTA6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiB1c2Ugc2FtZSBhbGlnbm1lbnQgdmFsdWVzIGFzIEdzdE1lbW9yeQotCSAgVXNlIHRoZSBzYW1lIGFsaWdubWVudCB2YWx1ZXMgZm9yIHRoZSBidWZmZXJwb29sIGFzIHdlIHVzZSBmb3IgdGhlIEdzdE1lbW9yeQotCSAgQVBJLgotCi0yMDExLTA2LTEwIDE3OjMyOjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IHVzZSBuZXcgX2NoZWNrX3JlY29uZmlndXJlKCkgbWV0aG9kCi0KLTIwMTEtMDYtMTAgMTc6MzI6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogYWRkIF9jaGVja19yZWNvbmZpZ3VyZSgpIG1ldGhvZAotCSAgQWRkIGEgbWV0aG9kIHRvIGNoZWNrIGFuZCBjbGVhciB0aGUgUkVDT05GSUdVUkUgZmxhZyBvbiBhIHBhZC4KLQotMjAxMS0wNi0xMCAxNjo0NzoyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBhZGQgc3VwcG9ydCBmb3IgYnVmZmVyIGluIG1lbW9yeQotCSAgRml4IHRoZSBjb2RlIHRvIHN1cHBvcnQgYWxsb2NhdGluZyB0aGUgYnVmZmVyIGFuZCBtZW1vcnkgaW4gb25lIG1lbW9yeSBibG9jay4KLQkgIEFkZCBhbiBleHRyYSB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbWVtb3J5IG9mIHRoZSBidWZmZXIuCi0JICBUaGlzIGNvZGUgaXMgZGlzYWJsZWQgc3RpbGwgYmVjYXVzZSBvZiBjb21wbGljYXRpb25zLgotCi0yMDExLTA2LTEwIDE2OjQ2OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGV4cG9zZSBkZWZhdWx0IGFsaWdubWVudAotCSAgRXhwb3J0IHRoZSBnc3RfbWVtb3J5X2FsaWdubWVudCB2YXJpYWJsZSBzbyB0aGF0IG90aGVycyBjYW4ga25vdyB0aGUgZGVmYXVsdAotCSAgY29uZmlndXJlZCBhbGlnbm1lbnQgb2YgdGhlIHN5c3RlbS4KLQotMjAxMS0wNi0xMCAxNjoxOTo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiBmaXggaXNfc3BhbgotCSAgU3VidHJhY3QgdGhlIG9mZnNldCBvZiB0aGUgcGFyZW50IGZyb20gaXNfc3Bhbi4KLQotMjAxMS0wNi0xMCAxMzo1OTozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtb3J5OiByZXNwZWN0IGNvbmZpZ3VyZWQgYWxpZ25tZW50Ci0JICBNb3ZlIHRoZSBhbGlnbm1lbnQgZnJvbSBHc3RCdWZmZXIgdG8gR3N0TWVtb3J5LgotCSAgbWFrZSBzdXJlIG1lbW9yeSBpcyBhdCBsZWFzdCBhbGlnbmVkIHRvIHRoZSBjb25maWd1cmVkIHZhbHVlcy4KLQotMjAxMS0wNi0xMCAxMzo0MDo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgYnVmZmVyOiBtYWtlIG5ldyBfYnVmZmVyX2FsbG9jYXRlIG1ldGhvZAotCSAgTWFrZSBhIG5ldyBtZXRob2QgdG8gYWxsb2NhdGUgYSBidWZmZXIgKyBtZW1vcnkgdGhhdCB0YWtlcyB0aGUgYWxsb2NhdG9yIGFuZCB0aGUKLQkgIGFsaWdubWVudCBhcyBwYXJhbWV0ZXJzLiBQcm92aWRlIGEgbWFjcm8gZm9yIHRoZSBvbGQgbWV0aG9kIGJ1dCBwcmVmZXIgdG8gdXNlCi0JICB0aGUgbmV3IG1ldGhvZCB0byBlbmNvdXJhZ2UgcGx1Z2lucyB0byBuZWdvdGlhdGUgdGhlIGFsbG9jYXRvciBwcm9wZXJseS4KLQotMjAxMS0wNi0xMCAxMjo0NDo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRvY3M6IHVwZGF0ZSBmb3IgZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemUKLQkgIEFkZCB0byBzZWN0aW9ucyBmaWxlIGFuZCBhZGQgU2luY2U6IG1hcmtlci4gQWxzbyB1cGRhdGUKLQkgIHdpbjMyIC5kZWYgZmlsZS4KLQkgIEFQSTogZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemUoKQotCi0yMDExLTA2LTEwIDEzOjQ0OjE5ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06Ci0JICBkZXNpZ246IHBhcnQtYnVmZmVybGlzdC50eHQgd2FzIG1lcmdlZCBpbnRvIGFub3RoZXIgZG9jCi0KLTIwMTEtMDYtMTAgMTM6MzQ6NTkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IFVwZGF0ZSBzZWN0aW9ucyBmaWxlcyBmb3IgYWRkZWQvcmVtb3ZlZCBzeW1ib2xzCi0KLTIwMTEtMDYtMTAgMTM6MTA6NDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBVcGRhdGUgZm9yIGFkZGVkL3JlbW92ZWQgc3ltYm9scwotCi0yMDExLTA2LTEwIDEzOjA0OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBiYXNlc3JjOiBhZGQgZmlsbCB2bWV0aG9kIHRvIGJhc2VzcmMKLQkgIEFkZCBhIG5ldyBmaWxsIHZpcnR1YWwgbWV0aG9kIHRvIGJhc2VzcmMuIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGZpbGwKLQkgIGEgcHJvdmlkZWQgYnVmZmVyIHdpdGggZGF0YS4KLQkgIEFkZCBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNyZWF0ZSBtZXRob2QgdGhhdCBhbGxvY2F0ZXMgYSBidWZmZXIgYW5kCi0JICBjYWxscyB0aGUgZmlsbCBtZXRob2Qgb24gaXQuIFRoaXMgd291bGQgYWxsb3cgdGhlIGJhc2UgY2xhc3MgdG8gaW1wbGVtZW50Ci0JICBidWZmZXJwb29sIGFuZCBhbGxvY2F0b3IgbmVnb3RpYXRpb24gb24gYmVoYWxmIG9mIHRoZSBzdWJjbGFzc2VzLgotCSAgRml4IHRoZSBibG9ja3NpemUgcHJvcGVydHkuCi0JICBNYWtlIGZpbGVzcmMgdXNlIHRoZSBuZXcgZmlsbCBtZXRob2QuCi0KLTIwMTEtMDYtMTAgMTI6MDk6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jCi0JICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaAotCSAgZ3N0L2dzdHBhZC5oCi0JICBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jCi0JICBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oCi0KLTIwMTEtMDYtMTAgMTE6NTU6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgZXZlbnQ6IGFkZCByZXNldF90aW1lIGJvb2xlYW4gdG8gZmx1c2hfc3RvcCBldmVudAotCSAgQWRkIGEgYm9vbGVhbiB0byB0aGUgZmx1c2hfc3RvcCBldmVudCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBmbHVzaGVzCi0JICB0aGF0IGRvbid0IHJlc2V0X3RpbWUuCi0JICBNYWtlIGJhc2VzaW5rIHBvc3QgYXN5bmNfZG9uZSB3aXRoIHRoZSByZXNldF90aW1lIHByb3BlcnR5IGZyb20gdGhlIGZsdXNoIHN0b3AKLQkgIGV2ZW50LgotCSAgRml4IHNvbWUgdW5pdCB0ZXN0cwotCi0yMDExLTA2LTA5IDE3OjEzOjM1ICswMTAwICBKYXZpZXIgSmFyZMOzbiA8amphcmRvbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSogZ3N0L2dzdGZvcm1hdC5oOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmg6Ci0JKiBnc3QvZ3N0dHJhY2UuaDoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIFVzZSAiY29uc3QiIGluc3RlYWQgR19DT05TVF9SRVRVUk4KLQkgIEdfQ09OU1RfUkVUVVJOIHdpbGwgYmUgZGVwcmVjYXRlZCBzb29uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MjIxMQotCi0yMDExLTA2LTA5IDEzOjM3OjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHVzZSBuZXcgZXZlbnQgbWV0aG9kcyB0byByZXBsYWNlIGV2ZW50cwotCSAgVXNpbmcgdGhlIG5ldyBldmVudCBtZXRob2RzLCB3ZSBjYW4gYXRvbWljYWxseSB0cmFuc2ZlciB0aGUgZXZlbnQgZnJvbSB0aGUKLQkgIHBlbmRpbmcgbGlzdCB0byB0aGUgYWN0aXZlIGxpc3QuCi0KLTIwMTEtMDYtMDkgMTM6MzY6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5oOgotCSAgZXZlbnQ6IG1ha2UgbWFjcm9zIGZvciBuZXcgbWluaW9iamVjdCBtZXRob2RzCi0KLTIwMTEtMDYtMDkgMTM6MzU6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgbWluaW9iamVjdDogYWRkIG5ldyBtZXRob2RzIHRvIG1hbmFnZSBtaW5pb2JqZWN0IHBvaW50ZXJzCi0JICBBZGQgYSBuZXcgbWV0aG9kIHRvIHN0ZWFsIHRoZSBtaW5pb2JqZWN0IHN0b3JlZCBhdCBhIGxvY2F0aW9uLgotCSAgQWRkIGEgbmV3IG1ldGhvZCB0byBzdG9yZSBhIG1pbmlvYmplY3QgaW4gYSBsb2NhdGlvbiBhbmQgdGFraW5nIG93bmVyc2hpcAotCSAgb2YgdGhlIG1pbmlvYmplY3QuCi0KLTIwMTEtMDYtMDkgMTM6MzQ6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogZml4IGhlYWRlcgotCi0yMDExLTA2LTA5IDEyOjMxOjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGZpeCBzcHVyaW91cyBpbmNsdWRlCi0KLTIwMTEtMDYtMDkgMTI6MDE6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jCi0KLTIwMTEtMDYtMDkgMTE6Mzk6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICBwYWQ6IGZvcndhcmQgZXZlbnRzIGJ5IGRlZmF1bHQKLQkgIEFsd2F5cyBmb3J3YXJkIGFsbCBldmVudHMgaW4gdGhlIGRlZmF1bHQgaGFuZGxlci4gUHJldmlvdXNseSBpdCB1c2VkIHRvIG5vdAotCSAgZm9yd2FyZCBjYXBzIGV2ZW50cyBieSBkZWZhdWx0LiBJdCBtYWtlcyBtb3JlIHNlbnNlIHRvIGZvcndhcmQgdGhlIGNhcHMgZXZlbnRzLAotCSAgaWYgdGhlIGVsZW1lbnQgaXMgaW50ZXJlc3RlZCBpbiB0aGUgY2FwcywgaXQgd2lsbCBpbXBsZW1lbnQgYW4gZXZlbnQgaGFuZGxlciB0bwotCSAgcmV0cmlldmUgdGhlIGNhcHMgYW5kIHRoZW4gaXQgY2FuIGRlY2lkZSB0byBmb3J3YXJkIG9yIG5vdC4gSWYgdGhlIGVsZW1lbnQgaGFzCi0JICBubyBldmVudCBoYW5kbGVyLCBpdCBwcm9iYWJseSBqdXN0IGRvZXNuJ3QgY2FyZSBhYm91dCBjYXBzIGFuZCBpdCBwcm9iYWJseSBpcwotCSAgYWxzbyBub3QgZ29pbmcgdG8gbW9kaWZ5IHRoZSBkYXRhIGluIGEgd2F5IHRoYXQgbmVlZHMgYSBjYXBzIGNoYW5nZS4KLQotMjAxMS0wNi0wOSAxMToxMzo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBmaXggdHlwbyBpbiBkb2NzCi0KLTIwMTEtMDYtMDggMTg6MjI6MzYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmMvZmRzcmM6IGluZGljYXRlIGR5bmFtaWMgc2l6ZSBoYW5kbGluZyB0byBiYXNlc3JjCi0KLTIwMTEtMDYtMDggMTg6MjI6MDMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgYmFzZXNyYzogYWRkIGR5bmFtaWMgc2l6ZSBoYW5kbGluZwotCSAgVGhpcyBhbGxvd3Mgc3ViY2xhc3MgdG8gaW5kaWNhdGUgdGhhdCBzaXplIHJlcG9ydGVkIGJ5IHNyYyBtYXkgbm90IGJlIHN0YXRpYwotCSAgYW5kIHNob3VsZCBhcyBzdWNoIGJlIHVwZGF0ZWQgcmVndWxhcmx5LCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gcmVhbGx5Ci0JICBuZWVkZWQuCi0JICBQYXJ0aWN1bGFyIGV4YW1wbGVzIGFyZSBmaWxlc3JjIG9yIGZkc3JjIHJlYWRpbmcgZnJvbSBhIGZpbGUgdGhhdCBpcyBzdGlsbAotCSAgZ3Jvd2luZyAoZS5nLiBiZWluZyBkb3dubG9hZGVkKS4KLQkgIEZpeGVzICM2NTIwMzcuCi0KLTIwMTEtMDYtMDggMjA6MTQ6MTYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIFJldmVydCAiYmFzZXNyYzogU2VuZCBhbiB1cGRhdGUgTkVXU0VHTUVOVCBldmVudCBkb3duc3RyZWFtIGlmIHRoZSBkdXJhdGlvbiBjaGFuZ2VzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5MzRmYWYxNjNjYWYxMGVkM2Q1NGQ4MWZkN2I3OTMwNjk5MTNkZmZkLgotCSAgT3JpZ2luYWwgY29tbWl0IGxlYWRzIHRvIHBvc3NpYmx5IHNlbmRpbmcgbmV3c2VnbWVudCBldmVudCBkb3duc3RyZWFtCi0JICBpbiBwdWxsIG1vZGUuICBJbiBwdXNoIG1vZGUsIHF1aXRlIHNvbWUgZG93bnN0cmVhbSBlbGVtZW50cwotCSAgYXJlIGxpa2VseSB0byBvbmx5IGV4cGVjdCBuZXdzZWdtZW50IGV2ZW50IGZvbGxvd2luZyBhIHNlZWsgdGhleSBwZXJmb3JtZWQKLQkgIGFuZCBhcyBzdWNoIG1heSBoYXZlIHRoZWlyIHN0YXRlIG1lc3NlZCB1cC4KLQotMjAxMS0wNi0wOCAxODozNToxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgYmFzZXNpbms6IGlubGluZSB0aGUgY2xpcCBzZWdtZW50Ci0KLTIwMTEtMDYtMDggMTc6MjU6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSAgbWVzc2FnZTogcmVuYW1lIHZhcmlhYmxlCi0JICBSZW5hbWUgdGhlIG5ld19iYXNlX3RpbWUgdmFyaWFibGUgdG8gcmVzZXRfdGltZSwgd2hpY2ggbG9va3MgYmV0dGVyLgotCi0yMDExLTA2LTA4IDE2OjQxOjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSAgc2VnbWVudDogc2VwYXJhdGUgdGhlIHNlZWsgYW5kIHNlZ21lbnQgZmxhZ3MKLQkgIFNlcGFyYXRlIHRoZSBzZWVrIGZsYWdzIGFuZCBzZWdtZW50IGZsYWdzIGFzIHNlcGFyYXRlIGVudW1zIGJlY2F1c2Ugd2UgbWlnaHQKLQkgIHdhbnQgdG8gaGF2ZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIGJvdGguCi0KLTIwMTEtMDYtMDggMTM6NDA6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBtZXNzYWdlOiBtb3ZlIHRoZSBuZXdfYmFzZV90aW1lIGZsYWcgdG8gYXN5bmNfZG9uZQotCSAgTW92ZSB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEgbmV3X2Jhc2VfdGltZSBzaG91bGQgYmUgZGlzdHJpYnV0ZWQgdG8gdGhlCi0JICBwaXBlbGluZSwgZnJvbSB0aGUgYXN5bmNfc3RhcnQgdG8gdGhlIGFzeW5jX2RvbmUgbWVzc2FnZS4gVGhpcyB3b3VsZCBhbGxvdyB1cyB0bwotCSAgZGVjaWRlIHdoZW4gdG8gcmVzZXQgdGhlIHBpcGVsaW5lIHRpbWUgYmFzZWQgb24gb3RoZXIgcmVhc29ucyB0aGFuIHRoZQotCSAgRkxVU0hfU1RBUlQgZXZlbnQuCi0JICBUaGUgbWFpbiBnb2FsIGV2ZW50dWFsbHkgaXMgdG8gbWFrZSB0aGUgRkxVU0ggZXZlbnRzIG5vdCByZXNldCB0aW1lIGF0IGFsbCBidXQKLQkgIHJlc2V0IHRoZSB0aW1lIGJhc2VkIG9uIHRoZSBmaXJzdCBidWZmZXIgb3Igc2VnbWVudCB0aGF0IHByZXJvbGxzIHRoZSBwaXBlbGluZQotCSAgYWdhaW4uCi0KLTIwMTEtMDYtMDggMTM6Mzk6MTkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogVXBkYXRlIGdzdHJlYW1lci1zZWN0aW9ucyBmb3IgbmV3L3JlbW92ZWQgQVBJCi0KLTIwMTEtMDYtMDggMTM6MzA6NDkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBnc3RidWZmZXI6IFJlbW92ZSBkZXByZWNhdGVkIEdTVF9CVUZGRVJfKiBtYWNyb3MKLQkgIGRhdGEsIHNpemUsIG1hbGxvY2RhdGEgYW5kIGZyZWVfZnVuYyBubyBsb25nZXIgZXhpc3QuCi0KLTIwMTEtMDYtMDggMTM6MDY6MTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBVcGRhdGUgZm9yIGFkZGVkL3JlbW92ZWQgc3ltYm9scwotCi0yMDExLTA2LTA4IDEyOjU4OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IHJlbW92ZSBzZXRjYXBzIGZ1bmN0aW9uCi0JICBSZW1vdmUgdGhlIHNldGNhcHMgZnVuY3Rpb24sIGVsZW1lbnRzIHNob3VsZCB1c2UgdGhlIGNhcHMgZXZlbnQgdG8gYmUgaW5mb3JtZWQKLQkgIG9mIHRoZSBmb3JtYXQuCi0KLTIwMTEtMDYtMDggMTI6MDQ6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVtb3J5LnR4dDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6Ci0JICBtZW1vcnk6IFJlcXVpcmUgaW1wbGVtZW50YXRpb24gdG8gaW1wbGVtZW50IF9zaGFyZQotCSAgUmVxdWlyZSB0aGUgbWVtb3J5IGltcGxlbWVudGF0aW9ucyB0byBpbXBsZW1lbnQgYSBzaGFyZSBvcGVyYXRpb24uIFRoaXMgYWxsb3dzCi0JICB1cyB0byByZW1vdmUgdGhlIGZhbGxiYWNrIHNoYXJlIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgYSBkaWZmZXJlbnQgYWxsb2NhdG9yCi0JICBpbXBsZW1lbnRhdGlvbiBhbmQgY29tcGxpY2F0ZXMgdGhpbmdzIHRvbyBtdWNoLgotCSAgVXBkYXRlIGRlc2lnbiBkb2MgYSBiaXQuCi0KLTIwMTEtMDYtMDggMTE6MDM6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgbWVtb3J5OiBjbGVhbnVwcyBhbmQgaW1wcm92ZSBkb2NzCi0JICBNYWtlIHRoZSBmYWxsYmFjayBjb3B5IHVzZSB0aGUgc2FtZSBtZW1vcnkgYWxsb2NhdG9yIGFzIHRoZSBvcmlnaW5hbCBvYmplY3QuCi0JICBJbXByb3ZlIHNvbWUgZG9jcy4KLQkgIFJlcXVpcmUgYW4gYWxsb2MgZnVuY3Rpb24gd2hlbiByZWdpc3RlcmluZyBhbiBhbGxvY2F0b3IuCi0JICBSZW1vdmUgZ3N0X21lbW9yeV9hbGxvY2F0b3JfZ2V0X2RlZmF1bHQoKSBhbmQgbWVyZ2UgdGhlIGZlYXR1cmUgaW4KLQkgIGdzdF9tZW1vcnlfYWxsb2NhdG9yX2ZpbmQoKQotCSAgRml4IGxvY2tzIG9uIHRoZSBoYXNodGFibGUuCi0JICBSZW1vdmUgZGVmaW5lZCBidXQgbm90LWltcGxlbWVudGVkIGdzdF9tZW1vcnlfc3BhbigpIG1ldGhvZC4KLQotMjAxMS0wNi0wNyAxODoxODoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1tZW1vcnkudHh0OgotCSAgZG9jczogYWRkIGJlZ2lubmluZ3Mgb2YgbWVtb3J5IGRlc2lnbiBkb2MKLQotMjAxMS0wNi0wNyAxNzo1NDozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiBwYXNzIHVzZXJfZGF0YSB0byB0aGUgYWxsb2MgZnVuY3Rpb24KLQkgIFBhc3MgdGhlIHVzZXIgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gX3JlZ2lzdGVyIHRvIHRoZSBhbGxvYyBmdW5jdGlvbiBvZiBhbgotCSAgYWxsb2NhdG9yLgotCi0yMDExLTA2LTA3IDE3OjM0OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGZpeCBzb21lIHR5cG9zCi0KLTIwMTEtMDYtMDcgMTc6MDM6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmg6Ci0JICBmaWxlc3JjOiByZW1vdmUgTU1BUCBjb2RlCi0JICBSZW1vdmUgdGhlIG1tYXAgY29kZSwgaXQgd2FzIGRpc2FibGVkIGFuZCBwcm9iYWJseSBuZWVkcyBhIGNvbXBsZXRlIHJld3JpdGUKLQkgIGFueXdheSBpZiB0aGlzIGlzIHRvIGJlIHBvcnRlZCB0byAwLjExLgotCi0yMDExLTA2LTA3IDE2OjM1OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIHF1ZXJ5OiBhZGQgbWV0aG9kcyB0byBxdWVyeSBhbGxvY2F0b3JzCi0JICBBZGQgQVBJIHRvIGFkZCBhbmQgcXVlcnkgYWxsb2NhdG9yIGltcGxlbWVudGF0aW9ucyB0by9mcm9tIHRoZSBBTExPQ0FUSU9OIHF1ZXJ5LgotCi0yMDExLTA2LTA3IDE2OjE0OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiB1c2UgYWxsb2NhdG9ycyB0byBhbGxvY2F0ZSBtZW1vcnkKLQkgIFJlbmFtZSB0aGUgR3N0TWVtb3J5SW1wbCB0byBHc3RNZW1vcnlBbGxvY2F0b3IgYmVjYXVzZSB0aGF0J3MgcmVhbGx5IHdoYXQgaXQgaXMuCi0JICBBZGQgYW4gYWxsb2Mgdm1ldGhvZCB0byB0aGUgYWxsb2NhdG9yIG1lbWJlcnMuCi0JICBJbXByb3ZlIHJlZ2lzdHJhdGlvbiBvZiBhbGxvY2F0b3JzLgotCSAgQWRkIG1ldGhvZHMgdG8gZ2V0IGFuZCBzZXQgdGhlIGRlZmF1bHQgYWxsb2NhdG9yCi0JICBBbHdheXMgdXNlIGFuIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBtZW1vcnksIHVzZSB0aGUgZGVmYXVsdCBhbGxvY2F0b3Igd2hlbiBOVUxMCi0JICBpcyBwYXNzZWQuCi0JICBBZGQgdXNlcl9kYXRhIHRvIHRoZSBhbGxvY2F0b3IgSW5mbyBzbyB0aGF0IHdlIGNhbiBwYXNzIGV4dHJhIGluZm8gdG8gdGhlCi0JICBhbGxvY2F0b3IgbmV3IG1ldGhvZC4KLQotMjAxMS0wNi0wNyAxMzowMzoyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWV0YS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKLQkgIGRvY3M6IG1pbm9yIGZpeCBhbmQgY2xhcmlmaWNhdGlvbgotCi0yMDExLTA2LTA3IDEzOjM4OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGV2ZW50OiBtb3ZlIHNvbWUgbW9yZSBkZWZpbmVzIG9uIHRvcAotCi0yMDExLTA2LTA3IDEzOjI1OjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICBmaXggc29tZSBjaXJjdWxhciBpbmNsdWRlcwotCSAgdHlwZWRlZiBzb21lIHN0cnVjdHMgYmVmb3JlIGluY2x1ZGluZyBvdGhlciBmaWxlcyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMKLQkgIGluIHRoZSBoZWFkZXIgZmlsZXMuCi0KLTIwMTEtMDYtMDcgMTE6MDE6MzYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBVcGRhdGUgZm9yIGFkZGVkL3JlbW92ZWQgc3ltYm9scwotCi0yMDExLTA2LTA2IDEyOjIzOjA0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JICBjaGVjay90ZWU6IFBhZHMgbmVlZCB0byBiZSBhY3RpdmF0ZWQgYmVmb3JlIGNhcHMgYXJlIHNldAotCSAgQWxzbyBhZGQgZGVidWdnaW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uCi0KLTIwMTEtMDYtMDcgMTA6NTI6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICB1dGlsczogcmVtb3ZlIHByb3h5X3NldGNhcHMKLQkgIFJlbW92ZSBwcm94eV9zZXRjYXBzLCBlbGVtZW50cyBzaG91bGQgdXNlIHRoZSBjYXBzIGV2ZW50IGFuZCBmb3J3YXJkIGNhcHMKLQkgIHRoZW1zZWx2ZXMuCi0KLTIwMTEtMDYtMDcgMTA6NTE6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dHNlbGVjdG9yOiBmaXggcmVmY291bnRpbmcgb2YgZXZlbnRzCi0JICBfcGFkX2V2ZW50X2ZvcndhcmQoKSB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGNhcHMuCi0KLTIwMTEtMDYtMDcgMTA6NDk6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogSW1wcm92ZSBwYWQgZXZlbnQgZm9yd2FyZCBjb2RlCi0JICBSZXR1cm4gVFJVRSB3aGVuIHRoZSBwYWQgaGFzIG5vIHBhcmVudCBvciB3aGVuIHRoZXJlIGFyZSBubyBpbnRlcm5hbGx5IGxpbmtlZAotCSAgcGFkcy4KLQotMjAxMS0wNi0wNyAxMDowNDo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHBsdWdpbnM6IHVzZSB0aGUgY2FwcyBldmVudAotCSAgVXNlIHRoZSBjYXBzIGV2ZW50IGFuZCBhdm9pZCB1c2luZyB0aGUgc2V0Y2FwcyBmdW5jdGlvbi4gVXNlIHNvbWUgb2YgdGhlIG5ldyBwYWQKLQkgIGZvcndhcmQgZnVuY3Rpb25zIHRvIGltcGxlbWVudCBkZXNpcmVkIGJlaGF2aW91ci4KLQotMjAxMS0wNi0wNyAxMDowMjowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBSZW5hbWUgYW5kIHJld29yayB0aGUgZGlzcGF0Y2hlciBmdW5jdGlvbgotCSAgUmVuYW1lIGdzdF9wYWRfZGlzcGF0Y2hlcigpIHRvIGdzdF9wYWRfZm9yd2FyZCgpIGFuZCBtYWtlIGl0IG1vcmUgdXNlZnVsIGJ5Ci0JICBpdGVyYXRpbmcgdGhlIGludGVybmFsIGxpbmtzIG9mIGEgcGFkIGFuZCBoYW5kbGluZyByZXN5bmMgcHJvcGVybHkuCi0JICBBZGQgYSBtZXRob2QgZ3N0X3BhZF9ldmVudF9mb3J3YXJkKCkgdGhhdCB1bmNvbmRpdGlvbmFsbHkgZm9yd2FyZHMgYW4gZXZlbnQgdG8KLQkgIGFsbCBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzLgotCSAgVXBkYXRlIHNvbWUgcGFkIGNvZGUgdG8gdXNlIHRoZSBuZXcgZm9yd2FyZCBmdW5jdGlvbi4KLQotMjAxMS0wNi0wNyAwOTo0MzoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBjYXBzOiB1c2UgdGhlIGNhcHMgZXZlbnQKLQkgIFVzZSB0aGUgY2FwcyBldmVudCBpbnN0ZWFkIG9mIGdzdF9wYWRfc2V0X2NhcHMoKSBhbmQgdGhlIHNldGNhcHMgZnVuY3Rpb24KLQotMjAxMS0wNi0wNiAxNjoxMTozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXIudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJsaXN0LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0ZWxlbWVudC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdG9iamVjdC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWxhdGVuY3kudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW1ldGEudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtcHJvYmVzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbXMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKLQkgIGRvY3M6IGdvIG92ZXIgZGVzaWduIGRvY3MgYW5kIGZpeCB0aGluZ3MKLQkgIFJlbW92ZSBidWZmZXJsaXN0IHBhcnQsIGl0J3MgbWVyZ2VkIHdpdGggcGFydC1idWZmZXIudHh0Ci0KLTIwMTEtMDYtMDYgMTE6MjE6MjMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IEFkZCBlbnVtL2ZsYWdzIChkZSlyZWdpc3RyYXRpb24gaW4gZ3N0XyhkZSlpbml0Ci0KLTIwMTEtMDYtMDYgMTE6MjA6MjkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogRG9uJ3QgYWNjZXB0IHNlZ21lbnRzIGFmdGVyIEVPUwotCSAgQW5kIHJlZmFjdG9yIHRoZSBjb2RlIHNsaWdodGx5IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uCi0JICBUaGlzIHNvbHZlcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSBiZGJjMDY5MwotCi0yMDExLTA2LTA2IDEwOjI3OjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBjaGVjay9naG9zdHBhZDogQWN0aXZhdGUgcGFkcyBiZWZvcmUgY2hlY2tpbmcgZm9yIGNhcHMgZm9yd2FyZGluZy9zZXR0aW5nCi0JICBUaGlzIGlzIG5vdyBkb25lIHZpYSBpbi1iYW5kIGV2ZW50cywgc28gdGhlIHBhZHMgbmVlZCB0byBiZSBhY3RpdmUKLQotMjAxMS0wNi0wNSAxODoxMToyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6Ci0JICBkb2NzOiB1cGRhdGUgZm9yIEFQSSBjaGFuZ2VzCi0JICBBbHNvIHJlbW92ZSBHU1RfUEFEX0NIRUNLR0VUUkFOR0VGVU5DIG1hY3JvCi0KLTIwMTEtMDYtMDUgMTU6NDY6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDYtMDQgMTU6NDI6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICBwYXJzZTogYWRkIHByb3RvdHlwZXMgZm9yIHVudXNlZCBmdW5jdGlvbnMgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZwotCSAgVGhlIHdhcm5pbmcgaXMgbmV2ZXIgZmF0YWwsIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIC1XZXJyb3IgZm9yIHRoZQotCSAgcGFyc2VyIGhlbHBlciBsaWJyYXJ5IGJ1aWxkLCBidXQgdGhlIHdhcm5pbmdzIGFyZSBhbm5veWluZyBhbnl3YXkuCi0KLTIwMTEtMDYtMDUgMTQ6MTA6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9NYWtlZmlsZS5hbToKLQkqIHRvb2xzL2dzdC1ydW4uYzoKLQkgIHRvb2xzOiByZW1vdmUgdW52ZXJzaW9uZWQgZ3N0LWxhdW5jaCwgZ3N0LWluc3BlY3QgYW5kIGdzdC10eXBlZmluZAotCSAgVGhlIHVudmVyc2lvbmVkIHRvb2wgd3JhcHBlcnMgYXJlIGNvbmZ1c2luZyBhbmQgYW5ub3lpbmcgZm9yIHBhY2thZ2VycywKLQkgIHVzZXJzIGFuZCBkZXZlbG9wZXJzIGFsaWtlLiBBIGdzdC1sYXVuY2ggcGlwZWxpbmUgdGhhdCB3b3JrcyBpbiAwLjEwCi0JICB3aWxsIGxpa2VseSBub3Qgd29yayBpbiAwLjExIChlLmcuIGJlY2F1c2UgZWxlbWVudHMgb3IgcHJvcGVydGllcyBnZXQKLQkgIHJlbmFtZWQsIG9yIHN5bnRheCBjaGFuZ2VzKS4gVGhlIHVudmVyc2lvbmVkIHRvb2xzIGFsc28geWllbGQgdXNlbGVzcwotCSAgcmVzdWx0cyB3aGVuIHVzZWQgd2l0aCBnZGIgb3IgdmFsZ3JpbmQuIFBhY2thZ2VycyBuZWVkIHRvIGNvLW9yZGluYXRlCi0JICB0aGUgcGFja2FnaW5nIG9mIGFsbCBtYWpvciB2ZXJzaW9ucyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGNvbmZsaWN0cwotCSAgd2hlbiBib3RoIHRyeSB0byBpbnN0YWxsIHRoZSBzYW1lIGZpbGVzLiBXaGVuIHR3byBtYWpvciB2ZXJzaW9ucyBhcmUKLQkgIGluIHVzZSAoZS5nLiAwLjEwIGFuZCAwLjExLzEuMCksIGl0IG1heSBiZSB1bmNsZWFyICh3aGVuIGxvb2tpbmcgYXQKLQkgIHRoaW5ncyBvbiBJUkMvcGFzdGViaW4vbWFpbGluZyBsaXN0IGV0Yy4pIHdoaWNoIHZlcnNpb24gaXMgYWN0dWFsbHkKLQkgIGJlaW5nIHVzZWQgd2hlbiB0aGVyZSBhcmUgdW52ZXJzaW9uZWQgd3JhcHBlcnMuIEZvciBhbGwgdGhlc2UgcmVhc29ucywKLQkgIGl0IHNlZW1zIGJlc3QgdG8ganVzdCByZW1vdmUgdGhlbSBmb3Igbm93LgotCi0yMDExLTA2LTA0IDE2OjA0OjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdG1hcnNoYWwuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RtYXJzaGFsLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogdXBkYXRlIGV4cG9ydHMgYW5kIG90aGVyIHRoaW5ncwotCi0yMDExLTA2LTA0IDE1OjQ0OjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIGZvciBuZXcgdHJhbnNsYXRhYmxlIHN0cmluZyBhbmQgcmVtb3ZlZCBzdHJpbmdzCi0KLTIwMTEtMDYtMDQgMTU6MjM6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiByZW1vdmUgR1NUX1hNTCBkZWJ1ZyBjYXRlZ29yeSBhcyB3ZWxsCi0KLTIwMTEtMDYtMDQgMTU6MjI6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBBbmRyb2lkLm1rOgotCSogTWFrZWZpbGUuYW06Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXIucGMuaW46Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5jOgotCSogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5oOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R4bWwuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfYXJtLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2hwcGEuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGM2NC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9zcGFyYy5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaDoKLQkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkqIHRvb2xzLy5naXRpZ25vcmU6Ci0JKiB0b29scy9NYWtlZmlsZS5hbToKLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkqIHRvb2xzL2dzdC14bWxsYXVuY2guMS5pbjoKLQkgIFJlbW92ZSBldmVyeXRoaW5nIGxpYnhtbDItIGFuZCBsb2Fkc2F2ZS1yZWxhdGVkCi0KLTIwMTEtMDYtMDQgMTQ6NDE6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICB0b29sczogcmVtb3ZlIFNJR1VTUiogaGFuZGxpbmcgZnJvbSBnc3QtbGF1bmNoCi0JICBSZW1vdmUgU0lHVVNSKiBoYW5kbGluZyBmcm9tIGdzdC1sYXVuY2gsIHNpbmNlIGl0IG1pZ2h0IGludGVyZmVyZQotCSAgd2l0aCBvdGhlciB0aGluZ3MgKGUuZy4gbGlibGVha3MpLCBhbmQgc2hvdWxkIGJlIGRvbmUgZGlmZmVyZW50bHkKLQkgIGFueXdheSAoZWl0aGVyIHZpYSBzdXBwb3J0IGZvciBzaW1wbGUgdGltZWQtY29tbWFuZHMgc2NyaXB0aW5nIG9yCi0JICByZW1vdGUgY29udHJvbCB2aWEgREJ1cyBvciBzbykuCi0KLTIwMTEtMDYtMDQgMTQ6Mjg6MDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkqIHRvb2xzLy5naXRpZ25vcmU6Ci0JKiB0b29scy9CVUdTOgotCSogdG9vbHMvTWFrZWZpbGUuYW06Ci0JKiB0b29scy9SRUFETUU6Ci0JKiB0b29scy9nc3QteG1saW5zcGVjdC4xLmluOgotCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkqIHRvb2xzL3htbDJ0ZXh0LnhzbDoKLQkgIHRvb2xzOiByZW1vdmUgZ3N0LXhtbGluc3BlY3QKLQkgIFBlb3BsZSBzaG91bGQganVzdCBxdWVyeSB0aGUgcmVnaXN0cnkgdGhlbXNlbHZlcyBvciB3cml0ZSBhIHNtYWxsCi0JICBweXRob24gc2NyaXB0IGlmIHRoZXkgbmVlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgKHdoaWNoIGlzIGxpa2VseQotCSAgbGVzcyB3b3JrIHRoYW4gcGFyc2luZyB0aGUgWE1MIHRoYXQgdGhpcyBzY3JpcHQgb3V0cHV0cywgYW5kIEknbQotCSAgbm90IGF3YXJlIG9mIGFueXRoaW5nIHVzaW5nIHRoZSB4bWwydGV4dCB4c2wgZWl0aGVyKS4KLQotMjAxMS0wNi0wNCAxNDoyMjowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZmFxL3VzaW5nLnhtbDoKLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSogdG9vbHMvLmdpdGlnbm9yZToKLQkqIHRvb2xzL01ha2VmaWxlLmFtOgotCSogdG9vbHMvZ3N0LWZlZWRiYWNrLW0ubToKLQkqIHRvb2xzL2dzdC1mZWVkYmFjay4xLmluOgotCSAgdG9vbHM6IHJlbW92ZSBnc3QtZmVlZGJhY2sKLQkgIEl0J3Mgbm90IHJlYWxseSB0aGF0IHVzZWZ1bCwgYW5kIG5vIG9uZSdzIGJlZW4gdXNpbmcgaXQgZm9yIHllYXJzLgotCi0yMDExLTA2LTA0IDE0OjEzOjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6Ci0JICB0b29scywgdGVzdHM6IGZpeCBzb21lIHVudXNlZC1idXQtc2V0LXZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmdzCi0KLTIwMTEtMDYtMDQgMTQ6MDI6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgZm9yIG5ldyB0cmFuc2xhdGFibGUgc3RyaW5nCi0KLTIwMTEtMDYtMDQgMDA6MzA6MTUgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGNsb2Nrc3RyZXNzLmM6Ci0JICBXb3JrIGFyb3VuZCBjaGFuZ2VzIGluIGdfYXRvbWljIEFQSQotCSAgU2VlICM2NTE1MTQgZm9yIGRldGFpbHMuICBJdCdzIGFwcGFyZW50bHkgaW1wb3NzaWJsZSB0byB3cml0ZSBjb2RlCi0JICB0aGF0IGF2b2lkcyBib3RoIHR5cGUgcHVubmluZyB3YXJuaW5ncyB3aXRoIG9sZCBnX2F0b21pYyBoZWFkZXJzIGFuZAotCSAgYXNzZXJ0aW9ucyBpbiB0aGUgbmV3LiAgVGh1cywgbWFjcm9zIGFuZCBhIHZlcnNpb24gY2hlY2suCi0KLTIwMTEtMDYtMDMgMTg6MTA6MjQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBnc3RwYWQ6IFNtYWxsIGRvYyBmaXh1cAotCi0yMDExLTA2LTAzIDE1OjUzOjIxICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogVXBkYXRlIC5kZWYgZm9yIGxhdGVzdCBBUGkgY2hhbmdlcwotCi0yMDExLTA2LTAzIDE3OjI0OjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGNsZWFuIHVwIHByb2JlIGZsYWdzCi0KLTIwMTEtMDYtMDMgMTc6MjQ6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtcHJvYmVzLnR4dDoKLQkgIGRvY3M6IGZpcnN0IHZlcnNpb24gb2YgcHJvYmVzIGRvY3VtZW50Ci0KLTIwMTEtMDYtMDMgMTY6NDY6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogY2hlY2sgZmx1c2hpbmcgaW4gcHVsbHJhbmdlIHRvbwotCi0yMDExLTA2LTAzIDEzOjU2OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGNsZWFudXBzCi0JICBVc2UgZGVmaW5lcyBpbnN0ZWFkIG9mIGhhcmRjb2RlZCB2YWx1ZXMgZm9yIG1hc2tzLgotCi0yMDExLTA2LTAzIDEzOjI1OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IGZpeCBzb21lIG1vcmUgMC4xMSBmaXhtZXMKLQkgIGRvbid0IGFsbG93IHNwYWNlcyBpbiBzdHJ1Y3R1cmUgbmFtZXMgYW5kIGZpeCB1bml0IHRlc3RzLgotCi0yMDExLTA2LTAzIDEyOjQzOjMyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1hbGxvY2F0aW9uLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVycG9vbC50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgYnVmZmVycG9vbCBkZXNpZ24gZG9jCi0JICBNb3ZlIHRoZSBidWZmZXJwb29sIGRlc2lnbiBkb2MgZnJvbSBkcmFmdCB0byBwYXJ0IGFuZCBtZXJnZSBpdCB3aXRoCi0JICB0aGUgYWxsb2NhdGlvbiBkcmFmdC4KLQotMjAxMS0wNi0wMyAxMjo0MDo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBtYWtlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciB0byB3YWl0Ci0JICBUaGUgbW9zdCBjb21tb24gY2FzZSBpcyB0byBub3Qgc3BlY2lmeSBhbnkgZmxhZ3Mgd2hlbiBkb2luZyB0aGUgYWxsb2NhdGlvbi4gTWFrZQotCSAgdGhlIGFsbG9jYXRpb24gZnJvbSBhIHBvb2wgd2l0aCBhIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgYmxvY2sgYnkgZGVmYXVsdCBmb3IKLQkgIHRoaXMgcmVhc29uLgotCi0yMDExLTA2LTAzIDExOjE1OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogdXBkYXRlIHBvcnRpbmcgZG9jCi0KLTIwMTEtMDYtMDIgMTk6MjQ6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHVzZSBjYXBzIGV2ZW50IGluc3RlYWQgb2Ygc2V0Y2FwcwotCi0yMDExLTA2LTAyIDE5OjIzOjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSAgZ2hvc3RwYWQ6IHJlbW92ZSBzZXRjYXBzIGZ1bmN0aW9ucwotCSAgUmVtb3ZlIHRoZSBzZXRjYXBzIGZ1bmN0aW9ucywgaXQgaXMgbm93IGhhbmRsZWQgd2l0aCB0aGUgY2FwcyBldmVudC4KLQotMjAxMS0wNi0wMiAxODoyODo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBwYXNzIHRoZSByaWdodCBhbGlnbm1lbnQKLQotMjAxMS0wNi0wMiAxODoyODoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSAgbWVtbW9yeTogc21hbGwgY2xlYW51cAotCi0yMDExLTA2LTAyIDE4OjEzOjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JICBtZW1vcnk6IGZpeCBhbGlnbm1lbnQgY2FsY3VsYXRpb25zCi0JICBGaXggdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbi4KLQkgIEltcHJvdmUgZG9jdW1lbnRhdGlvbi4KLQotMjAxMS0wNi0wMiAxODoxMzoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIHBvb2w6IGRlYnVnIHRoZSBjb25maWcKLQotMjAxMS0wNi0wMiAxNTozODo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICB1dGlsczogcmVtb3ZlIHNvbWUgbWFjcm9zIG5vdyBpbiBnbGliCi0JICBXZSBkZXBlbmQgb24gdGhlIHJpZ2h0IGdsaWIgbm93Ci0KLTIwMTEtMDYtMDIgMTU6Mzg6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogZml4IGEgRklYTUUKLQotMjAxMS0wNi0wMiAxNTozODowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogdXNlIGdfcHJpbnRlcnIoKSBhcyBzdGF0ZWQgaW4gdGhlIEZJWE1FCi0KLTIwMTEtMDYtMDIgMTU6Mzc6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBzbWFsbCBjbGVhbnVwcwotCi0yMDExLTA2LTAyIDE0OjA5OjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGVsZW1lbnQ6IGlubGluZSB0aGUgcmVjdXJzaWNlIHN0YXRlIGxvY2sKLQotMjAxMS0wNi0wMiAxMzo0NjoyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBpbmxpbmUgdGhlIHJlY3Vyc2l2ZSBzdHJlYW0gbG9jawotCi0yMDExLTA2LTAyIDEzOjM1OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IHJlbW92ZSB1bnVzZWQgZmllbGRzIGFuZCBtZXRob2RzIGFuZCBzaWduYWxzCi0KLTIwMTEtMDYtMDIgMTM6MjM6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogdXNlIG5ldyBnc3RfdmFsdWVfZml4YXRlIGluc3RlYWQKLQkgIFVzZSB0aGUgbmV3IGdzdF92YWx1ZV9maXhhdGUoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIG91ciBvd24gdmVyc2lvbi4KLQotMjAxMS0wNi0wMiAxMzoyMTo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIHZhbHVlOiBhZGQgZnVuY3Rpb24gdG8gZml4YXRlIGEgdmFsdWUKLQkgIEFkZCBhIGZ1bmN0aW9uIHRvIGZpeGF0ZSBhIEdWYWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyBpcyBpbiBHc3RQYWQuCi0KLTIwMTEtMDYtMDIgMTM6MTg6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSAgY2FwczogcmVtb3ZlIHNvbWUgY3VzdG9tIHJlZmNvdW50aW5nIG1ldGhvZHMKLQkgIFJlbW92ZSBzb21lIGN1c3RvbSBtYWRlIHJlZmNvdW50aW5nIG1ldGhvZHMgYW5kIHVzZSB0aGUgbWluaW9iamVjdCBvbmVzIGluc3RlYWQuCi0KLTIwMTEtMDYtMDIgMTI6NDA6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogb3B0aW1pemUgbGlua2luZwotCSAgT3B0aW1pemUgbGlua2luZyBieSBvbmx5IHJlbGVhc2luZyB0aGUgcGFkIGxvY2tzIHdoZW4gdGhlcmUgYXJlIGxpbmsgZnVuY3Rpb25zCi0JICBpbnN0YWxsZWQgb24gdGhlIHBhZHMuCi0JICBBZGQgc29tZSBHX0xJS0VMWSBoZXJlIGFuZCB0aGVyZS4KLQkgIE1vdmUgZXJyb3IgcGF0aHMgb3V0IG9mIHRoZSBtYWluIGNvZGUgZmxvdy4KLQotMjAxMS0wNi0wMiAxMjozOTozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiByZW1vdmUgZGVwcmVjYXRlZCBoYXZlLWRhdGEgc2lnbmFsCi0KLTIwMTEtMDYtMDIgMTE6MjE6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkIGlkbGUgcHJvYmUgZm9yIHB1bGwgbWV0aG9kIHRvbwotCi0yMDExLTA2LTAyIDExOjAxOjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IG1vcmUgY2xlYW51cHMKLQkgIFVzZSBtaW5pb2JqZWN0IHVucmVmIHdoZW4gd2UgY2FuCi0JICBSZXVzZSBleGlzdGluZyBkYXRhIHR5cGUgaWRlbnRpZmllciBpbnN0ZWFkIG9mIGFuIGV4dHJhIGJvb2xlYW4uCi0KLTIwMTEtMDYtMDEgMTk6NDc6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYwotCi0yMDExLTA2LTAxIDE5OjI3OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcXVldWUtZXJyb3IuYzoKLQkgIHBhZDogZnVydGhlciBpbXByb3ZlIHByb2JlcyBhbmQgcGFkIGJsb2NraW5nCi0JICBLZWVwIHRyYWNrIG9mIGluc3RhbGxlZCBudW1iZXIgb2YgcHJvYmVzIHRvIHNob3J0Y3V0IGVtaXNzaW9uLgotCSAgQWxsb3cgTlVMTCBjYWxsYmFja3MsIHRoaXMgaXMgdXNlZnVsIGZvciBibG9ja2luZyBwcm9iZXMuCi0JICBJbXByb3ZlIHByb2JlIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgbWFzaywgYW4gZW1wdHkgbWFzayBmb3IgdGhlIGRhdGEgb3IgdGhlCi0JICBzY2hlZHVsaW5nIGZsYWdzIGVxdWFscyB0aGF0IGFsbCBwcm9iZXMgbWF0Y2guCi0JICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCi0JICBEb24ndCBjaGVjayB0aGUgZmx1c2hpbmcgZmxhZyBpbiB0aGUgcHJvYmUgY2FsbGJhY2sgaGFuZGxlciwgdGhpcyBuZWVkcyB0byBiZQotCSAgZG9uZSBiZWZvcmUgY2FsbGluZyB0aGUgaGFuZGxlci4KLQkgIEZpeCBibG9ja2luZyBwcm9iZXMuCi0JICBGaXggdW5pdCB0ZXN0cwotCi0yMDExLTA1LTMxIDE5OjE2OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogbGlicy9nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgotCSAgcGFkOiBpbXBsZW1lbnQgcGFkIGJsb2NrIHdpdGggcHJvYmVzCi0KLTIwMTEtMDUtMzAgMTk6MDM6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcXVldWUtZXJyb3IuYzoKLQkgIHV0aWxzOiByZW1vdmUgX2Z1bGwgdmFyaWFudHMgb2YgcHJvYmVzCi0JICBSZW1vdmUgdGhlIF9mdWxsIHZhcmlhbnRzIGFuZCBhZGQgdGhlIGRlc3Ryb3kgbm90aWZ5IHRvIHRoZSByZWd1bGFyIG1ldGhvZHMuCi0KLTIwMTEtMDYtMDEgMTU6Mjk6MjAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2FybS5oOgotCSAgY2hlY2svYWJpOiBJZ25vcmUgR3N0WE1MKiBvbiBhcm0gd2hlbiBub3QgcHJlc2VudAotCi0yMDExLTA1LTMxIDE4OjMxOjUzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IFVzZSBsb2NhbCBwcml2IHZhcmlhYmxlIGluc3RlYWQgb2YgdHJhbnMtPnByaXYKLQotMjAxMS0wNS0zMSAxODozMDo1MCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIGdzdHNlZ21lbnQ6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnQKLQkgIGJhc2UgaXMgdW5jb25kaXRpb25hbGx5IHdyaXR0ZW4gYSBjb3VwbGUgb2YgbGluZXMgYmVsb3cKLQotMjAxMS0wNS0zMSAxODozMDozMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBnc3Q6IFJlbW92ZSBvYnZpb3VzIGRlYWQgYXNzaWdubWVudHMKLQotMjAxMS0wNS0zMSAxMzo0Mzo0NyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dHNlbGVjdG9yOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50Ci0KLTIwMTEtMDUtMzAgMTg6Mjk6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFJld29yayBwYWQgYmxvY2tpbmcsIGFub3RoZXIgYXR0ZW1wdAotCSAgTWFrZSB0aGUgUGFkQmxvY2sgY2FsbGJhY2sgdGFrZSBhIEdzdEJsb2NrVHlwZSBwYXJhbWV0ZXIgdG8gaGFuZGxlIHRoZSBkaWZmZXJlbnQKLQkgIGtpbmQgb2Ygc3RhZ2VzIGluIHRoZSBwYWQgYmxvY2suIFRoaXMgcHJvdmlkZXMgZm9yIG1vcmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLQkgIGluIHRoZSBwYWQgYmxvY2sgQVBJLgotCSAgU2VwYXJhdGUgYmxvY2tpbmcgYW5kIHVuYmxvY2tpbmcgaW50byBkaWZmZXJlbnQgbWV0aG9kcywgb25seSBibG9ja2luZyBjYW4gZG8gYQotCSAgY2FsbGJhY2ssIHVuYmxvY2sgaXMgYWx3YXlzIGltbWVkaWF0ZWx5LiBBbHNvIHJlbW92ZWQgc3luY2hyb25vdXMgYmxvY2tpbmcsIGl0Ci0JICBjYW4gYWx3YXlzIGJlIGltcGxlbWVudGVkIHdpdGggYSBjYWxsYmFjay4KLQotMjAxMS0wNS0zMCAxMzo0MDowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgUmV2ZXJ0ICJwYWQ6IHJld29yayBwYWQgYmxvY2tpbmcsIGZpcnN0IHBhcnQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDQxNWRhODlmM2M5ZmU0NmZjMzM2MTIzNmRmOWEzYjc2ZTYwN2UxMzguCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0cGFkLmMKLQotMjAxMS0wNS0zMCAxMjoyNzozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBpbXByb3ZlIGRlYnVnZ2luZwotCi0yMDExLTA1LTMwIDExOjMzOjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogQ29uc2lkZXIgIjEiIGFuZCAiezF9IiBhcyBlcXVhbCBpbiBnc3RfdmFsdWVfY29tcGFyZSgpCi0JICBQcmV2aW91c2x5IHRoaXMgd2FzIG9ubHkgZG9uZSBpbiB0aGUgaXNfc3Vic2V0KCkgY2hlY2sgYnV0Ci0JICBoYXZpbmcgaXQgb25seSB0aGVyZSBicmluZ3MgdXMgaW50byBkZWZpbml0aW9uLWhlbGwgd2hlcmUKLQkgICIxIiBhbmQgInsxfSIgYXJlIHN1YnNldCBvZiBlYWNoIG90aGVyIGJ1dCBub3QgZXF1YWwuCi0KLTIwMTEtMDUtMzAgMDc6NDQ6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBEb24ndCBhY2Nlc3MgdGhlIEdzdE1lc3NhZ2Ugc3RydWN0dXJlIGRpcmVjdGx5Ci0KLTIwMTEtMDUtMzAgMDc6NDE6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDUtMzAgMDc6MzY6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogRml4IHN1YnNldCBjaGVjayBmb3IgZXF1aXZhbGVudCBsaXN0cyBhbmQgc2NhbGFyIHZhbHVlcwotCSAgRm9yIGV4YW1wbGUgInsgMSB9IiBhbmQgIjEiIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYnV0Ci0JICBib3RoIGFyZSBhIHN1YnNldCBvZiBlYWNoIG90aGVyLiBBbHNvIGFkZCBhIHVuaXQgdGVzdAotCSAgZm9yIHRoaXMuCi0KLTIwMTEtMDUtMjkgMTk6Mjg6MzQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2ZhcS9nZW5lcmFsLnhtbDoKLQkgIGRvY3M6IGZpeCBidWd6aWxsYSBVUkwKLQkgIGh0cHAgLT4gaHR0cAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MTM2MgotCi0yMDExLTA1LTI4IDEwOjI0OjM3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBkb2NzOiB4cmVmcyBtb3JlIGFwaSBhcm91bmQgR3N0U3RhdGVDaGFuZ2UgYW5kIEdzdFN0YXRlQ2hhbmdlUmV0dXJuLgotCi0yMDExLTA1LTI4IDA5OjUxOjQ1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBkb2NzOiB4cmVmIHRoZSBhc3luYyBtZXNzYWdlcyB0byBHc3RTdGF0ZUNoYW5nZQotCi0yMDExLTA1LTI3IDE3OjIwOjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHJld29yayBwYWQgYmxvY2tpbmcsIGZpcnN0IHBhcnQKLQkgIE1ha2UgcGFkIGJsb2NrIGNhbGwgdGhlIGNhbGxiYWNrIGFzIHNvb24gYXMgdGhlIHBhZCBpcyBub3QgaW4gdXNlLiBUaGlzIG1ha2VzIGl0Ci0JICBwb3NzaWJsZSB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQsIG5vIGFjdGl2aXR5IGlzIGhhcHBlbmluZwotCSAgb24gdGhlIHBhZCBhbmQgdGhhdCBubyBhY3Rpdml0eSB3aWxsIGV2ZXIgaGFwcGVuIHVudGlsIHRoZSBwYWQgaXMgdW5ibG9ja2VkCi0JICBhZ2Fpbi4gVGhpcyBtYWtlcyBwYWQgYmxvY2tpbmcgd29yayB3aGVuIHRoZXJlIGlzIG5vIGRhdGFmbG93IG9yIGFmdGVyIEVPUyBhbmQKLQkgIGdyZWF0bHkgaGVscHMgZHluYW1pYyBwaXBlbGluZXMuCi0JICBNb3ZlIHRoZSBwcm9iZSBoYW5kbGluZyByaWdodCB3aGVyZSB3ZSB3YWl0IG9uIHRoZSBwYWQgYmxvY2suIFRoZSB0d28gYXJlCi0JICByZWxhdGVkIGJ1dCBub3QgdGhlIHNhbWUgYW5kIHRoZSBwcm9iZSBjYW4gZXZlbnR1YWxseSBpbmZsdWVuY2UgdGhlIHBhZAotCSAgYmxvY2tpbmcgYXMgd2UnbGwgc2UgbGF0ZXIuCi0JICBGaXggdXAgc29tZSBicm9rZW4gdW5pdCB0ZXN0cyBvciB0ZXN0cyB0aGF0IGZhaWwgd2l0aCB0aGUgbmV3IGJlaGF2aW91ci4KLQotMjAxMS0wNS0yNyAxNzoxODowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IHJlbW92ZSBkZXByZWNhdGVkIGNsZWFuIHNodXRkb3duIG1ldGhvZAotCi0yMDExLTA1LTI3IDE0OjAwOjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiBkZWFjdGl2YXRlIHRoZSBwYWQgYWZ0ZXIgcmVtb3ZpbmcgaXQKLQkgIFdoZW4gcmVsZWFzaW5nIHRoZSByZXF1ZXN0IHBhZCwgZmlyc3QgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQgYW5kIHRoZW4KLQkgIGRlYWN0aXZhdGUgaXQuIElmIHdlIGRvIGl0IHRoZSBvdGhlciB3YXkgYXJvdW5kLCBhIGdzdF9wYWRfcHVzaCBvbiB0aGUgZWxlbWVudAotCSAgbWlnaHQgcmV0dXJuIHdyb25nLXN0YXRlIGJlZm9yZSB3ZSBoYWQgYSBjaGFuY2UgdG8gZGV0ZWN0IHRoZSByZW1vdmVkIHBhZCBpbiB0aGUKLQkgIGNoYWluIGZ1bmN0aW9uLgotCi0yMDExLTA1LTI3IDE1OjE0OjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IGNhdGNoIGFuZCBwcmludCBtaXNzaW5nLXBsdWdpbiBtZXNzYWdlcyBpbiBnc3QtbGF1bmNoCi0JICBTbyB0aGF0IHVzZXJzIGdldCBzb21lIGZlZWRiYWNrIGlmIHRoZXkncmUgdXNpbmcgYSBwaXBlbGluZQotCSAgbGlrZSAgc3JjICEgZGVjb2RlYmluMiAhIHNpbmsgIGFuZCBhcmUgbWlzc2luZyBhbiBlbGVtZW50LgotCi0yMDExLTA1LTI3IDE0OjAyOjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBGaXggZm9yIFNFR01FTlQgZXZlbnQgQVBJIGNoYW5nZXMKLQotMjAxMS0wNS0yNyAxMzo1ODoyNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wNS0yNyAxMzo1NTozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgY2FwczogQWRkIGdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmUoKQotCSAgQVBJOiBnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlKCkKLQkgIFRoaXMgYWxsb3dzIHRvIGNoZWNrIGlmIGEgc3RydWN0dXJlIGlzIGEgc3Vic2V0IG9mIGdpdmVuCi0JICBjYXBzIHdpdGhvdXQgYWxsb2NhdGluZyBhIG5ldyBjYXBzIGluc3RhbmNlIGZvciBpdC4KLQotMjAxMS0wNS0yNyAxMzo0NzoxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBzdHJ1Y3R1cmU6IEFkZCBnc3Rfc3RydWN0dXJlX2lzX3N1YnNldCgpCi0JICBBUEk6IGdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0KCkKLQotMjAxMS0wNS0yNyAxMzozODo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogT3B0aW1pemUgZ3N0X2NhcHNfaXNfc3Vic2V0KCkKLQkgIC4uYW5kIGFzIGEgcmVzdWx0IGdzdF9jYXBzX2lzX2VxdWFsKCkgYW5kIG90aGVycy4KLQkgIFRoaXMgbm93IG9ubHkgY2hlY2tzIGlmIGZvciBldmVyeSBzdWJzZXQgc3RydWN0dXJlIHRoZXJlIGlzCi0JICBhIHN1cGVyc2V0IHN0cnVjdHVyZSBpbiB0aGUgc3VwZXJzZXQgY2Fwcy4gUHJldmlvdXNseSB3ZSB3ZXJlCi0JICBzdWJ0cmFjdGluZyBvbmUgZnJvbSBhbm90aGVyLCBjcmVhdGluZyBjb21wbGV0ZWx5IG5ldyBjYXBzCi0JICBhbmQgdGhlbiBldmVuIHNpbXBsaWZpZWQgdGhlbS4KLQkgIFRoZSBuZXcgaW1wbGVtZW50aW9uIG5vdyBpcyBhYm91dCAxLjI3IHRpbWVzIGZhc3RlciBhbmQgZG9lc24ndAotCSAgYnJlYWsgdGhlIC1iYXNlIHVuaXQgdGVzdHMgYXJlIGFueXRoaW5nIGFueW1vcmUuCi0KLTIwMTEtMDUtMjcgMTM6Mzc6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IEZpeCBzdWJzZXQgY2hlY2sgaW4gZ3N0X2NhcHNfbWVyZ2UoKQotCSAgQ2FwcyBBIGFyZSBhIHN1YnNldCBvZiBjYXBzIEIgZXZlbiBpZiBjYXBzIEIgZG9lc24ndAotCSAgaGF2ZSBhbGwgZmllbGRzIG9mIGNhcHMgQS4KLQkgIEFsc28gYWRkIGEgdW5pdCB0ZXN0IGZvciB0aGlzLgotCi0yMDExLTA1LTI3IDEyOjU2OjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIFJldmVydCAiY2FwczogT3B0aW1pemUgZ3N0X2NhcHNfaXNfc3Vic2V0KCkiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDMyMjQ4YTliODUyYmNiNTY4YTViNjQyMjk5ZWNjOGU1YmY0OGVhMTMuCi0JICBUaGlzIGJyZWFrcyBzb21lIHRlc3RzIGluIC1iYXNlIGFuZCB0aGUgZmFpbHVyZXMgc2hvdWxkCi0JICBiZSBmaXhlZCBmaXJzdC4KLQotMjAxMS0wNS0yNyAxMjo0NTo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBPcHRpbWl6ZSBnc3RfY2Fwc19pc19zdWJzZXQoKQotCSAgLi5hbmQgYXMgYSByZXN1bHQgZ3N0X2NhcHNfaXNfZXF1YWwoKSBhbmQgb3RoZXJzLgotCSAgVGhpcyBub3cgb25seSBjaGVja3MgaWYgZm9yIGV2ZXJ5IHN1YnNldCBzdHJ1Y3R1cmUgdGhlcmUgaXMKLQkgIGEgc3VwZXJzZXQgc3RydWN0dXJlIGluIHRoZSBzdXBlcnNldCBjYXBzLiBQcmV2aW91c2x5IHdlIHdlcmUKLQkgIHN1YnRyYWN0aW5nIG9uZSBmcm9tIGFub3RoZXIsIGNyZWF0aW5nIGNvbXBsZXRlbHkgbmV3IGNhcHMKLQkgIGFuZCB0aGVuIGV2ZW4gc2ltcGxpZmllZCB0aGVtLgotCSAgVGhlIG5ldyBpbXBsZW1lbnRpb24gbm93IGlzIGFib3V0IDEuMjcgdGltZXMgZmFzdGVyLgotCi0yMDExLTA1LTI3IDExOjQ1OjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBEcm9wIHN0aWNreSBldmVudHMgcHVzaGVkIG9uIGZsdXNoaW5nIHNyY3BhZHMgaW5zdGVhZCBvZiBhY3RpdmF0aW5nIHRoZW0gaW1tZWRpYXRlbHkKLQotMjAxMS0wNS0yNiAxNDo1NjoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IFBhc3MgdGhlIGNvbXBsZXRlIGNhcHMgdG8gdHJhbnNmb3JtX2NhcHMKLQkgIEluc3RlYWQgb2YgcGFzc2luZyBpdCBzdHJ1Y3R1cmUgYnkgc3RydWN0dXJlLiBUaGlzIGFsbG93cwotCSAgYmV0dGVyIG9wdGltaXplZCB0cmFuc2Zvcm1fY2FwcyBmdW5jdGlvbnMgYW5kIGFsbG93cyBiZXR0ZXIKLQkgIHRyYW5zZm9ybWF0aW9uIGRlY2lzaW9ucy4KLQkgIFNlZSBidWcgIzYxOTg0NC4KLQotMjAxMS0wNS0yNyAwOTowNTo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogU2VuZCBhbiB1cGRhdGUgTkVXU0VHTUVOVCBldmVudCBkb3duc3RyZWFtIGlmIHRoZSBkdXJhdGlvbiBjaGFuZ2VzCi0JICBUaGlzIGFsbG93cyBzdHJlYW1pbmcgdGhlIGNvbXBsZXRlIGZpbGUgZm9yIGZpbGVzIHRoYXQgaGF2ZSBncm93biBzaW5jZQotCSAgc3RyZWFtaW5nIHN0YXJ0ZWQuCi0JICBGaXhlcyBidWcgIzY0Nzk0MC4KLQotMjAxMS0wNS0yNiAxOTo0NToxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiByZWZhY3RvciBfcHVzaF9ldmVudAotCSAgUmV3b3JrIF9wdXNoX2V2ZW50KCkgYSBsaXR0bGUgc28gdGhhdCBpdCBkcm9wcyBldmVudHMgb24gYmxvY2tpbmcgcGFkcy4KLQkgIE1ha2Ugc3VyZSB0aGF0IGV2ZW50cyBhcmUgZm9yd2FyZGVkIHdoZW4gd2UgdW5ibG9jay4KLQkgIEFkZCBjb3VudGVyIG9uIHRoZSBwYWQgdG8ga2VlcCB0cmFjayBvZiBidXN5IHBhZHMuCi0KLTIwMTEtMDUtMjYgMTg6MjE6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogcmVmYWN0b3IgcHJlIGFuZCBwb3N0IGNoYWluIGNvZGUKLQotMjAxMS0wNS0yNiAxNzo1MDoxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBrZWVwIGNvdW50ZXIgZm9yIGFjdGl2ZSBwYWRzCi0JICBLZWVwIGEgY291bnRlciB0byBtYXJrIHRoZSBhbW91bnQgb2YgdGhyZWFkcyBjdXJyZW50bHkgcHVzaGluZyBkYXRhIG9uIHRoZSBwYWQuCi0KLTIwMTEtMDUtMjYgMTc6Mzk6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogcmVmYWN0b3IgcHJlIHB1c2ggY29kZQotCSAgUmVmYWN0b3IgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBhcyB0aGUgZmlyc3Qgc3RlcCBvZiBhIHB1c2ggb3BlcmF0aW9uIHdoZXJlCi0JICB3ZSBjaGVjayB0aGUgcHJvYmVzIGFuZCBibG9ja2luZyBhbmQgcmVzb2x2ZSB0aGUgcGVlci4KLQotMjAxMS0wNS0yNiAxNzowODowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHBhZDogcmVtb3ZlIHBhZCBjYWNoZQotCSAgUmVtb3ZlIHRoZSBwYWQgY2FjaGUgYXMgdGhpcyBpcyBnb2luZyB0byBiZSByZXdvcmtlZCBmb3IgbmV3IHBhZCBibG9ja2luZyBhbmQKLQkgIHByb2Jlcy4KLQotMjAxMS0wNS0yNiAxNjo0ODoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBzaW1wbGlmeSBoYW5kbGluZyBvZiBidWZmZXIgbGlzdHMKLQkgIEltcGxlbWVudCBhIGRlZmF1bHQgYnVmZmVyLWxpc3QgZnVuY3Rpb24gaW4gY2FzZSB0aGUgZWxlbWVudCBkb2Vzbid0IGltcGxlbWVudAotCSAgb25lLgotCSAgQWxzbyBwYXNzIGJ1ZmZlci1saXN0cyB0byB0aGUgaGF2ZS1kYXRhIHNpZ25hbCwgdGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHNvbWUKLQkgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgY29kZS4KLQotMjAxMS0wNS0yNiAxNjoxNTo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHBhZDogcmVtb3ZlIG9sZCBnc3RfcGFkX3NldF9ibG9ja2VkIG1ldGhvZHMKLQotMjAxMS0wNS0yNiAxNDoxNDoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSAgcHVzaHNyYzogRml4IGluZmluaXRlIHJlY3Vyc2lvbiBpbiBwdXNoc3JjIHF1ZXJ5IGhhbmRsZXIKLQotMjAxMS0wNS0yNiAxMzozNjo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wNS0yNSAxNjowMjoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIGdzdDogd2UgY2FuIG5vdyB1c2UgR0xpYiAyLjI0IEFQSSB1bmNvbmRpdGlvbmFsbHkKLQotMjAxMS0wNS0yNSAxNTo1NDowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogYnVtcCBHTGliIHJlcXVpcmVtZW50IHRvID49IDIuMjQKLQkgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3dpa2kvUmVsZWFzZVBsYW5uaW5nL0dMaWJSZXF1aXJlbWVudAotCi0yMDExLTA1LTI1IDE1OjM4OjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIGRvY3M6IHVwZGF0ZSByZWxlYXNlIGluc3RydWN0aW9ucyBmb3IgZ25vbWUgY2hhbmdlCi0KLTIwMTEtMDUtMjUgMTM6NDA6MzAgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIHN5c3RlbWNsb2NrOiBQbGFjYXRlIGdjYyBieSBkZWZpbmluZyBFV09VTERCTE9DSyB0byBzb21ldGhpbmcKLQotMjAxMS0wNS0yNSAxMjo0Nzo1MSArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBwb2xsOiBGaXggV0FLRV9FVkVOVCgpIHRvIGJlaGF2ZSBwb3NpeGx5IG9uIFdpbmRvd3MKLQotMjAxMS0wNS0yNCAyMDoyODoxOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKLQkgIHJlZ2lzdHJ5YmluYXJ5OiBzbWFsbCBjbGVhbnVwcwotCSAgUmVtb3ZlIHVubmVlZGVkIGJyYWNlcyBmcm9tIHN0cmluZyBkZWZpbmUuIFNtYWxsIGRvYyBpbXByb3ZlbWVudC4KLQotMjAxMS0wNS0yNCAyMDoyNzowMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JICBwcmVzZXQ6IHVzZSBndWludCBmb3IgdGhlIHZlcnNpb24gbnVtYmVyIHBhcnRzCi0JICBVc2UgdW5zaWduZWQgaW50ZWdlcnMgZm9yIGV4dHJhIHNhZmV0eSAobGlrZSB3ZSBkbyBpbiBwbHVnaW4gdmVyc2lvbiBwYXJzaW5nKS4KLQotMjAxMS0wNS0yNCAxODozOTo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgcmVtb3ZlIHNvbWUgbW9yZSBkZXByZWNhdGVkIG1ldGhvZHMKLQotMjAxMS0wNS0yNCAxODoyOTo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmg6Ci0JICBwYWR0ZW1wbGF0ZTogcmVtb3ZlIHVudXNlZCBmbGFnCi0KLTIwMTEtMDUtMjQgMTg6MTc6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6Ci0JICBmZWF0dXJlOiB1c2Ugb2JqZWN0IG5hbWUKLQkgIFJlbW92ZSB0aGUgbmFtZSBwcm9wZXJ0eSBmcm9tIHRoZSBwbHVnaW4gZmVhdHVyZSBhbmQgcG9ydCBjb2RlIHRvIHVzZSB0aGUgb2JqZWN0Ci0JICBuYW1lIGluc3RlYWQuCi0KLTIwMTEtMDUtMjQgMTg6MTY6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIHJlbW92ZSBvbGQgZ2xpYiBjaGVjawotCi0yMDExLTA1LTI0IDE3OjQzOjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDUtMjQgMTc6MzY6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHNjaGVkdWxpbmc6IHBvcnQgdG8gbmV3IHNjaGVkdWxpbmcgcXVlcnkKLQotMjAxMS0wNS0yNCAxMjo1MjowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1zY2hlZHVsaW5nLnR4dDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSAgcXVlcnk6IGFkZCBTQ0hFRFVMSU5HIHF1ZXJ5Ci0JICBBZGQgYSBuZXcgcXVlcnkgdG8gcmVwbGFjZSB0aGUgY2hlY2tnZXRyYW5nZSBmdW5jdGlvbi4KLQotMjAxMS0wNS0yNCAxOTo0Mzo1OCArMDUzMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgY2hlY2s6IGFkZCBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA5NzMKLQotMjAxMS0wNS0yNCAxNjoxNDo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dHNlbGVjdG9yOiBGb3J3YXJkIHN0aWNreSBldmVudHMgdG8gbmV3bHkgY3JlYXRlZCBzcmNwYWRzCi0KLTIwMTEtMDUtMjQgMTY6MTM6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiBGb3J3YXJkIHN0aWNreSBldmVudHMgdG8gbmV3bHkgY3JlYXRlZCBzcmNwYWRzCi0KLTIwMTEtMDUtMjQgMTY6MDg6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IEFkZCBnc3RfcGFkX3N0aWNreV9ldmVudHNfaXRlcmF0ZSgpIGZ1bmN0aW9uCi0KLTIwMTEtMDUtMjQgMTM6Mjc6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogRml4IGZvciBHc3RJdGVyYXRvciBBUEkgY2hhbmdlcwotCi0yMDExLTA1LTI0IDEzOjI4OjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIFJldmVydCAiZGVidWd1dGlsczogRml4IGZvciBHc3RJdGVyYXRvciBBUEkgY2hhbmdlcyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZTFjYzMxNzZkNmZiODAyM2JiZTBjNzMzNjE1YjJhOGM0MjBhMjA3Ny4KLQkgIFRoaXMgaXMgbm90IHRoZSAwLjExIGJyYW5jaC4uLgotCi0yMDExLTA1LTI0IDEzOjI3OjA5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IEZpeCBmb3IgR3N0SXRlcmF0b3IgQVBJIGNoYW5nZXMKLQotMjAxMS0wNS0yNCAwOTo0ODo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdHBhZC5oCi0KLTIwMTEtMDUtMjQgMDA6MjY6NDAgKzAzMDAgIEtpcHAgQ2Fubm9uIDxrY2Fubm9uQGNpdGEudXRvcm9udG8uY2E+Ci0KLQkqIGdzdC9nc3RjbG9jay5oOgotCSAgY2xvY2s6IGltcHJvdmUgdGhlIEdTVF9USU1FX0ZPUk1BVC9BUkdTIGRvY3MKLQotMjAxMS0wNS0yMyAyMzo0MDoyMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBkb2NzOiBoaWRlIHRoaXMgZnJvbSB0aGUgZG9jcwotCi0yMDExLTA1LTIzIDE4OjMwOjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiB1c2UgR1NUX1NFR01FTlRfRk9STUFUIGZvciBzZWdtZW50cwotCi0yMDExLTA1LTIzIDE4OjE1OjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIHRyYW5zZm9ybTogZml4ZXMgZm9yIGJ1ZmZlcnBvb2wgaGFuZGxpbmcKLQkgIERvbid0IGVycm9yIG91dCB3aGVuIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5IHJldHVybnMgc3VjY2Vzcy4KLQkgIERvIGJ1ZmZlcnBvb2wgcXVlcnkgYWZ0ZXIgd2UgcHVzaGVkIHRoZSBjYXBzIGV2ZW50IGRvd25zdHJlYW0gc28gdGhhdCB3ZSBjYW4gZ2V0Ci0JICBhIGdvb2QgYnVmZmVycG9vbCBzdWdnZXN0aW9uLgotCSAgQWxzbyBwcm94eSB0aGUgYnVmZmVycG9vbCBxdWVyeSBkb3duc3RyZWFtIHdoZW4gd2Ugb3BlcmF0ZSBpbiBpbl9wbGFjZSBtb2RlLgotCi0yMDExLTA1LTIzIDE4OjE0OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGltcHJvdmUgZGVidWdnaW5nCi0KLTIwMTEtMDUtMjMgMTY6NTM6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgdHJhbnNmb3JtOiByZXNldCByZWNvbmZpZ3VyZSBzdGF0ZQotCSAgV2hlbiB3ZSBuZWdvdGlhdGUgbmV3IGNhcHMsIHJlc2V0IHRoZSByZWNvbmZpZ3VyZSBzdGF0ZS4KLQotMjAxMS0wNS0yMCAxODo1NjozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBXSVAgaGFuZGxlIGJ1ZmZlcnBvb2wKLQotMjAxMS0wNS0yMSAxOTowNjowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBhdm9pZCBjYWxsaW5nIF9zZXRfY2FwcygpIG9uIHRoZSBzcmNwYWQKLQkgIEF2b2lkIGluc3RhbGxpbmcgYSBzZXRjYXBzIGZ1bmN0aW9uIG9uIHRoZSBzcmNwYWQgYW5kIGNhbGxpbmcgdGhlIHNldGNhcHMKLQkgIGZ1bmN0aW9uLCB3ZSBjYW4gZG8gbW9yZSBlZmZpY2llbnRseSB3aXRoIHNlbmRpbmcgdGhlIGV2ZW50IG91cnNlbGYgYW5kIGNhbGxpbmcKLQkgIG91ciB2bWV0aG9kLgotCi0yMDExLTA1LTIwIDE2OjAzOjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0cGFkLmgKLQkgIGdzdC9nc3RwbHVnaW4uaAotCi0yMDExLTA1LTIwIDE1OjU4OjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IHJlbW92ZSBzb21lIG1vcmUgY29kZQotCSAgUmVtb3ZlIHNvbWUgbW9yZSB1bnVzZWQgY29kZSBmcm9tIGJhc2V0cmFuc2Zvcm0uCi0JICBQcmVwYXJlIGZvciBpbXBsZW1lbnRpbmcgYnVmZmVycG9vbHMuCi0KLTIwMTEtMDUtMjAgMTU6NTA6MDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgd2luMzI6IGFkZCBuZXcgYXBpCi0KLTIwMTEtMDUtMjAgMTU6NDg6MDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSAgZGVwcmVjYXRpb24tZ3VhcmRzOiBmaXh1cCBmb3IgY29tbWl0IDlmZjRlYzMxMDRkMjUxMGI4ZjM3OWZmMzhjNjcxNjgyZmY3OTVlMzMKLQkgIFJlbW92ZSB0aGUgZGVwcmVjYXRpb24gZ3VhcmRzIGZvciBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMgYWdhaW4gKGV2ZW4gdGhvdWdoIGl0Ci0JICBpcyBkZXByZWNhdGVkKSBhcyB3ZSB1c2UgaXQgaW4gdGhlIHRlc3RzLiBSZW1vdmUgIl8iIGZvciBpbnRsaW5rZnVuYy4KLQotMjAxMS0wNS0yMCAxMzowNjo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wNS0yMCAxMzowMzo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBPbmx5IHJlaW5pdCB0aGUgY2FjaGVkIEdzdENsb2NrSUQgaWYgaXQgaXMgZm9yIHRoZSBzYW1lIGNsb2NrCi0JICBUaGUgY2xvY2sgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBjbG9jayBJRCB3YXMgY3JlYXRlZCBhbmQgaW4KLQkgIHRoYXQgY2FzZSB3ZSBoYXZlIHRvIHJlcXVlc3QgYSBuZXcgb25lLgotCi0yMDExLTA1LTIwIDEyOjQzOjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGVsZW1lbnQ6IGFkZCBtZXRob2QgdG8gZ2V0IG1ldGFkYXRhCi0JICBBZGQgYSBtZXRob2QgdG8gZ2V0IHRoZSBtZXRhZGF0YSBmcm9tIGEga2xhc3MuCi0KLTIwMTEtMDUtMjAgMTI6NDM6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSAgZmFjdG9yeTogZml4IHR5cG8KLQotMjAxMS0wNS0yMCAxMjoxODo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogQWx3YXlzIHNlbmQgYSBTRUdNRU5UIGV2ZW50IHdoZW4gdGhlIGFjdGl2ZSBwYWQgY2hhbmdlcwotCi0yMDExLTA1LTIwIDEyOjE2OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBGaXggY29weSZwYXN0ZSBtaXN0YWtlIGluIHRoZSBzcmNwYWQgZXZlbnQgZnVuY3Rpb24KLQotMjAxMS0wNS0yMCAxMjowNzo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeQotCi0yMDExLTA1LTIwIDEyOjAwOjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBTZW5kIHVwc3RyZWFtIGV2ZW50cyB0byBhbGwgc2lua3BhZHMsIG5vdCBvbmx5IHRoZSBzZWxlY3RlZCBvbmUKLQkgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IFNFRUsgZXZlbnRzIGFyZSBzZW50IHRvIGFsbCB1cHN0cmVhbSBlbGVtZW50cywgd2hpY2ggaXMKLQkgIHJlcXVpcmVkIGlmIGRpZmZlcmVudCBzdHJlYW1zIGFyZSBjb21wbGV0ZWx5IGRpc3RpbmN0IHBpcGVsaW5lIHBhcnRzLiBBbHNvIHRoaXMKLQkgIGFsbG93cyBRb1MgdG8gYmUgZG9uZSBvbiBkZXNlbGVjdGVkIHN0cmVhbXMsIGZsdXNoZXMgdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHksCi0JICBldGMuCi0KLTIwMTEtMDUtMjAgMTE6MzY6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkIHBlbmRpbmcgZXZlbnQgZm9yIHN0aWNreSBldmVudHMKLQkgIENoYW5nZSB0aGUgc3RpY2t5IGV2ZW50IGFycmF5IHNvIHRoYXQgaXQgY29udGFpbnMgYSBwZW5kaW5nIGFuZCBhbiBhY3RpdmUgZXZlbnQuCi0JICBFdmVudHMgb24gdGhlIHNpbmtwYWQgYXJlIGNvcGllZCB0byB0aGUgcGVuZGluZyBhcnJheSBhbmQgYWZ0ZXIgdGhlIGV2ZW50ZnVuYwotCSAgcmV0dXJuZWQgVFJVRSwgbW92ZWQgdG8gdGhlIGFjdGl2ZSBldmVudC4gVGhpcyBhbGxvd3MgdXMgdG8gcXVldWUgbmV3IGV2ZW50cwotCSAgbGlrZSB3aGVuIHdlIGRvIHBlci1wYWQgb2Zmc2V0cyB3aXRob3V0IHJlbW92aW5nIHRoZSBjdXJyZW50bHkgYWN0aXZlIGV2ZW50LgotCSAgUmVtb3ZlIHRoZSBhY3RpdmUgYXJndW1lbnQgZnJvbSB0aGUgZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50KCkgbWV0aG9kLCB0aGUKLQkgIHBlbmRpbmcgZXZlbnRzIGFyZSBub3Qgc29tZXRoaW5nIHdlIHdhbnQgdG8gZXhwb3NlLgotCi0yMDExLTA1LTIwIDAwOjM5OjEwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwcmVzZXQuYzoKLQkqIGdzdC9nc3RwcmVzZXQuaDoKLQkgIHByZXNldDogaW5jbHVkZSBjbGVhbnVwCi0JICBPbmx5IGhhdmUgaW5jbHVkZSBpbiB0aGUgaW5zdGFsbGVkIGhlYWRlciB3ZSBuZWVkIHRvIHVzZSBpdC4gTW92ZSB0aGUgaW5jbHVkZXMKLQkgIG5lZWRlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG8gdGhlIGMgZmlsZS4KLQotMjAxMS0wNS0xOSAyMzoxOTozMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkgIGRvY3M6IHVwZGF0ZSBwbHVnaW4gaW50cm9zcGVjdGlvbiBkYXRhCi0JICBOb3cgbW9yZSBmaWxlcyBhcmUgbWVyZ2VkIGFuZCBwcm9kdWNlZCBpbiBhIGNhbm9uaWNhbCBmYXNoaW9uLCB3aGljaCBob3BlZnVsbHkKLQkgIGNyZWF0ZXMgbGVzcyBvciBubyBkZWx0YSBpbiB0aGUgZnV0dXJlLgotCi0yMDExLTA1LTE5IDIyOjU2OjI4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA5ZTViYmQ1IHRvIDY5Yjk4MWYKLQotMjAxMS0wNS0xOSAxOTowNzoyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdHM6IGNhcHMgYXJlIG5vdCBzdG9yZWQgb24gZmx1c2hpbmcgcGFkcwotCSAgQ2FwcyBhcmUgbm93IGFsc28gc3RvcmVkIG9uIGZsdXNoaW5nIHBhZHMgaW4gdGhlIGluYWN0aXZlIHN0YXRlLgotCi0yMDExLTA1LTE5IDE5OjAxOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGFwcGx5IHBhZCBvZmZzZXQgb24gc2lua3BhZCBldmVudHMgdG9vCi0JICBBcHBseSB0aGUgcGFkIG9mZnNldCBpbiB0aGUgc2VuZF9ldmVudCgpIGZ1bmN0aW9uIGFzIHdlbGwuCi0KLTIwMTEtMDUtMTkgMTg6Mjc6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkIHBlci1wYWQgb2Zmc2V0cwotCSAgV2hlbiBsaW5raW5nIHBhZHMgYW5kIHdoZW4gY29weWluZyBhIHNlZ21lbnQgZXZlbnQgZnJvbSB0aGUgc291cmMgcGFkIHRvIHRoZQotCSAgc2lua3BhZCwgYXBwbHkgdGhlIHNyYyBhbmQgc2lua3BhZCBvZmZzZXRzIHRvIHRoZSBzZWdtZW50IGJhc2UuIE1ha2Ugc3VyZSB0aGF0Ci0JICB3ZSBvbmx5IG1vZGlmeSB0aGUgZXZlbnQgc3RvcmVkIG9uIHRoZSBzaW5rcGFkIGFuZCBuZXZlciB0aGUgb25lIG9uIHRoZSBzb3VyY2UKLQkgIHBhZC4KLQkgIFdoZW4gY2hhbmdpbmcgdGhlIHBhZCBvZmZzZXQsIHBlcmZvcm0gdGhlIHNlZ21lbnQgY29weSB3aXRoIHRoZSB1cGRhdGVkIG9mZnNldHMuCi0JICBXaGVuIHB1c2hpbmcgYSBzZWdtZW50IGV2ZW50LCBhcHBseSB0aGUgc3JjcGFkIG9mZnNldCBiZWZvcmUgc2VuZGluZyB0aGUgZXZlbnQKLQkgIHRvIHRoZSBwZWVyIHBhZC4KLQkgIFRoaXMgcGFydCBpcyBtaXNzaW5nIHRoZSBhZGp1c3RtZW50IG9mIHRoZSBzZWdtZW50IGV2ZW50IG9uIHRoZSBzaW5rcGFkLCB3aGljaAotCSAgaXMgZm9yIGEgbGF0ZXIgcGF0Y2guCi0KLTIwMTEtMDUtMTkgMTY6MjY6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogYWRkIG1ldGhvZHMgdG8gYWRqdXN0IHRoZSBvZmZzZXQKLQkgIEFkZCBtZXRob2RzIHRvIGFkanVzdCB0aGUgb2Zmc2V0LiBUaGlzIHdpbGwgYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHNlZ21lbnQgZXZlbnRzCi0JICB3aXRoIGFuIG9mZnNldCBzbyB0aGF0IHdlIGNhbiB0d2VhayB0aGUgdGltaW5nIG9mIHRoZSBzdHJlYW0gb24gYSBwZXItcGFkIGJhc2UuCi0KLTIwMTEtMDUtMTkgMTI6MTE6NDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgotCSAgaW5wdXRzZWxlY3RvcjogUG9ydCB0byB0aGUgbmV3IHNlZ21lbnQgQVBJCi0JICBUaGUgc3dpdGNoIGFjdGlvbiBzaWduYWwgd2l0aCB0aGUgc3RvcCBhbmQgc3RhcnQgcnVubmluZyB0aW1lcwotCSAgaXMgbm90IG5lY2Vzc2FyeSBhbnltb3JlLiBDbG9zaW5nIG9mIHNlZ21lbnRzIGlzIG5vdCBuZWNlc3NhcnkKLQkgIGFuZCBhZGp1c3RpbmcgdGhlIHN0YXJ0IHJ1bm5pbmcgdGltZSBvZiBhIHNlZ21lbnQgY2FuIGxhdGVyIGJlCi0JICBkb25lIHdpdGggbmV3IEdzdFBhZCBBUEkuCi0KLTIwMTEtMDUtMTkgMTE6MzA6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RnaG9zdHBhZC5oCi0KLTIwMTEtMDUtMTggMTk6NDM6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogc3RvcmUgc3RpY2t5IGV2ZW50cyBvbiBmbHVzaGluZyBzaW5rcGFkcyB0b28KLQkgIEZpcnN0IHN0b3JlIHRoZSBzdGlja3kgZXZlbnQgb24gdGhlIHNpbmtwYWQgaW4gdGhlIGluYWN0aXZlIHN0YXRlLCB0aGVuIGNoZWNrCi0JICBmb3IgdGhlIGZsdXNoaW5nIGZsYWcuIFdlIHdhbnQgdG8gaGF2ZSB0aGUgZXZlbnRzIG9uIHNpbmtwYWRzIGF0IGFsbCB0aW1lcywKLQkgIHJlYWR5IHRvIGJlIGFjdGl2YXRlZCB3aGVuIHRoZSBwYWQgYmVjb21lcyBhY3RpdmUuCi0KLTIwMTEtMDUtMTggMTg6NTM6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogbW92ZSBjYXBzIGNoZWNrIHRvIGNlbnRyYWwgbG9jYXRpb24KLQkgIE1ha2UgYSBmdW5jdGlvbiB0byBjYWxsIHRoZSBldmVudGZ1bmMgYW5kIHBlcmZvcm0gYSBjYXBzIGNoZWNrIHdoZW4gd2UgYXJlCi0JICBkaXNwYXRjaGluZyBhIGNhcHMgZXZlbnQuCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBhbGwgY29kZSBwYXRocyBjb3JyZWN0bHkgY2hlY2sgdGhhdCB0aGUgY2FwcyBhcmUKLQkgIGFjY2VwdGFibGUgYmVmb3JlIHNlbmRpbmcgdGhlIGNhcHMgdG8gdGhlIGV2ZW50ZnVuY3Rpb24uCi0KLTIwMTEtMDUtMTggMTg6NTI6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IGF2b2lkIGNhbGxpbmcgc2V0Y2FwcyB0b28gbWFueSB0aW1lcwotCSAgRG9uJ3QgY2FsbCBzZXRjYXBzLCB0aGUgY2FwcyBldmVudCB3aWxsIHRha2UgY2FyZSBvZiBwcm9wYWdhdGluZyB0aGUgY2FwcyBvbiBhbGwKLQkgIHBhZHMuCi0KLTIwMTEtMDUtMTggMTg6NDg6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IGFkZCBhbGxvY2F0aW9uIHF1ZXJ5IG5hbWUKLQkgIEFkZCBBTExPQ0FUSU9OIHF1ZXJ5IG5hbWUgYW5kIGd1YXJkIHNvbWUgZnVuY3Rpb25zIGFnYWluc3QgaW52YWxpZCBxdWVyaWVzLgotCi0yMDExLTA1LTE4IDE2OjU2OjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBldmVudDogTWFrZSBTRUdNRU5UIGV2ZW50IHBhcnNpbmcgQVBJIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSBvdGhlcnMKLQotMjAxMS0wNS0xOCAxNjo0Nzo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiByZWxheCBjYXBzIGNoZWNrCi0JICBBbHNvIHJ1biB0aGUgY2FwcyB0cmFuc2Zvcm0gZnVuY3Rpb24gb24gQU5ZIGNhcHMsIGxpa2Ugd2UgdXNlZCB0byBkbyBiZWZvcmUuCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBjYXBzZmlsdGVyIGhhcyBhIGNoYW5jZSB0byBmaWx0ZXIgQU5ZIGNhcHMgYXMgd2VsbC4KLQotMjAxMS0wNS0xOCAxNjoyOToxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogRG9uJ3QgZm9yZ2V0IHRvIHRha2UgdGhlIG9iamVjdCBsb2NrIHdoZW4gZ2V0dGluZyBhIHN0aWNreSBldmVudAotCi0yMDExLTA1LTE4IDE2OjI2OjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBBZGQgZnVuY3Rpb24gdG8gZ2V0IHN0aWNreSBldmVudHMgZnJvbSBhIHBhZAotCSAgQVBJOiBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQoKQotCi0yMDExLTA1LTE4IDE1OjQzOjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IGZpeCBldmVudCBjb3B5Ci0JICBGaXggcGFyZW50IHJlZmNvdW50IG9uIGV2ZW50IGNvcHkuCi0JICBGaXggdW5pdCB0ZXN0LgotCi0yMDExLTA1LTE4IDE1OjI5OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IG5vdGlmeSBjYXBzIHByb3BlcnR5IGNoYW5nZSBpbiBjYWxsc2V0Y2FwcwotCSAgTm90aWZ5IHRoZSBjYXBzIHByb3BlcnR5IGNoYW5nZSBpbiB0aGUgYmFja3dhcmRzIGNvbXBhdGlibGUgZnVuY3Rpb24gdG8gY2FsbCB0aGUKLQkgIHNldGNhcHMgZnVuY3Rpb24uCi0KLTIwMTEtMDUtMTggMTY6MDk6MTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGZkMzUwNzMgdG8gOWU1YmJkNQotCi0yMDExLTA1LTE4IDE1OjA0OjQ4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiByZW1vdmUgR3N0UHJveHlQYWQgZnJvbSBwcml2YXRlIHNlY3Rpb24KLQotMjAxMS0wNS0xOCAxNTowMjowMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBkb2NzOiB1c2UgdGhlIHNhbWUgbmFtZSBmb3IgdGhlIGFyZ3VtZW50IGluIHByb3RvdHlwZSBhbmQgZG9jcwotCi0yMDExLTA1LTE4IDE0OjU5OjQ1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkgIG1hbnVhbDogcHV0IGdlbmVyYXRlZCBzb3VyY2VzIHRvIEJVSUxUX1NPVVJDRVMgYW5kIGNsZWFuIHRoZW0gb24gbWFrZSBjbGVhbgotCi0yMDExLTA1LTE4IDEzOjE5OjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDUtMTggMTM6MTQ6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RtaW5pb2JqZWN0LmMKLQkgIGdzdC9nc3RwYWQuYwotCSAgZ3N0L2dzdHBhZC5oCi0JICBnc3QvZ3N0cGx1Z2luLmgKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmMKLQotMjAxMS0wNS0xOCAxNDoxMDoxMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBtYW51YWw6IHJlaW5zZXJ0IG1pc3Npbmcgc3BhY2UgdG8gZml4IHByZXZpb3VzIGNvbW1pdAotCi0yMDExLTA1LTE4IDEzOjU0OjQyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkgIG1hbnVhbDogc2ltcGxpZnkgdGhlIHNuaXBldCBleHRyYWN0aW9uIHJ1bGVzCi0JICBVc2UgJDwgaW5zdGVhZCBvZiByZXBlYXRpbmcgdGhlIG5hbWUgb2YgdGhlIGRlcGVuZGVuY3kuCi0KLTIwMTEtMDUtMTggMTA6NTk6MzggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgbWFudWFsOiBkb24ndCBleHRyYWN0IHRoZSB4bWwgZXhhbXBsZSBhbnltb3JlLCBpdHMgZ29uZQotCSAgQXMgYSBmb2xsb3d1cCBmb3IgY29tbWl0IGNkYTVhMzUzZDI3MzI2YzAyNzJhNzljOTJjMTFjMjIxYTQwOTJkYTQgZG9uJ3QgdHJ5Ci0JICBleHRyYWN0aW5nIGFuIGV4YW1wbGUgdGhhdCBoYXMgYmVlbiByZW1vdmVkLgotCi0yMDExLTA1LTE4IDEyOjIzOjM5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA0NmRmY2VhIHRvIGZkMzUwNzMKLQotMjAxMS0wNS0xOCAxMToyMTo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgZG9jczogdXBkYXRlIGRvY3Mgc29tZSBtb3JlCi0KLTIwMTEtMDUtMTggMTE6MDg6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHBhZDogcmV3b3JrIHN0aWNreSBldmVudHMgYSBsaXR0bGUKLQkgIFVwZGF0ZSB0aGUgZGVzaWduIGRvY3Mgd2l0aCBzb21lIGNsZWFyIHJ1bGVzIGZvciBob3cgc3RpY2t5IGV2ZW50cyBhcmUKLQkgIGhhbmRsZWQuCi0JICBSZWltcGxlbWVudCB0aGUgc3RpY2t5IHRhZ3MsIHVzZSBhIHNtYWxsIHN0cnVjdHVyZSB0byBob2xkIHRoZSBldmVudCBhbmQgaXRzCi0JICBjdXJyZW50IHN0YXRlIChhY3RpdmUgb3IgaW5hY3RpdmUpLgotCSAgRXZlbnRzIG9uIHNpbmtwYWRzIG9ubHkgYmVjb21lIGFjdGl2ZSB3aGVuIHRoZSBldmVudCBmdW5jdGlvbiByZXR1cm5lZCBzdWNjZXNzCi0JICBmb3IgdGhlIGV2ZW50LgotCSAgV2hlbiBsaW5raW5nLCBvbmx5IHVwZGF0ZSBldmVudHMgdGhhdCBhcmUgZGlmZmVyZW50LgotCSAgQXZvaWQgbWFraW5nIGEgY29weSBvZiB0aGUgZXZlbnQgYXJyYXksIHVzZSB0aGUgb2JqZWN0IGxvY2sgdG8gcHJvdGVjdCB0aGUgZXZlbnQKLQkgIGFycmF5IGFuZCByZWxlYXNlIGl0IG9ubHkgdG8gY2FsbCB0aGUgZXZlbnQgZnVuY3Rpb24uIFRoaXMgd2lsbCBuZWVkIHRvIGNoZWNrCi0JICBpZiBzb21ldGhpbmcgY2hhbmdlZCwgbGF0ZXIuCi0JICBEaXNhYmxlIGEgdGVzdCBpbiB0aGUgdW5pdCB0ZXN0LCBpdCBjYW4ndCB3b3JrIHlldC4KLQotMjAxMS0wNS0xNyAyMjoxNzoxNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG1haW50YWluIGZyYW1lIHN0YXRlIGR1cmluZyBmcmFtZSBwYXJzaW5nIHJvdW5kCi0JICBTZWUgIzY1MDA5My4KLQotMjAxMS0wNS0xMiAxMTo1NToyMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBwcm92aWRlIGxhdGVuY3kgcXVlcnkgc3VwcG9ydAotCi0yMDExLTA1LTE3IDIyOjE1OjM4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbWFrZSBtaW5pbXVtIGZyYW1lIHNpemUgaGFuZGxpbmcgbW9yZSBlZmZpY2llbnQgYW5kIGNvbnZlbmllbnQKLQkgIFdoaWxlIHNvbWUgZm9ybWF0cyBhbGxvdyBzdWJjbGFzcyB0byBkZXRlcm1pbmUgYSBzcGVjaWZpYyBzdWJzZXF1ZW50Ci0JICBuZWVkZWQgZnJhbWUgc2l6ZSwgb3RoZXJzIG1heSB0byBuZWVkIHRvIHNjYW4gZm9yIG1hcmtlcnMgYW5kIGNhbiBvbmx5Ci0JICByZXF1ZXN0ICdhZGRpdGlvbmFsIGRhdGEnIGJ5IHdoYXRldmVyIHJlYXNvbmFibGUgYXZhaWxhYmxlIHN0ZXAuCi0JICBJbiBwdXNoIG1vZGUsIHRyeWluZyB0byBtaW5pbWl6ZSBhZGRpdGlvbmFsIGxhdGVuY3kgbGVhZHMgdG8gc3RlcCBzaXplCi0JICBiZWluZyB0aGUgbmV4dCBpbnB1dCBidWZmZXIuICBJbiBwdWxsIG1vZGUsIGFueSByZWFzb25hYmxlIHN0ZXAgc2l6ZQotCSAgKHN1Y2ggYXMgYWxyZWFkeSB1c2VkIGJ5IGJ1ZmZlciBjYWNoaW5nKSBjYW4gYmUgYXBwbGllZC4KLQotMjAxMS0wNS0xNyAyMjozODoxNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHNldCBjb3JyZWN0IGJ1ZmZlciBzaXplCi0KLTIwMTEtMDUtMDYgMTA6NTQ6MDggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGluc3BlY3Q6IHNob3cgZmxhZ3MgdGhlIHNhbWUgd2F5IHRoZXkgbmVlZCB0byBiZSBlbnRlcmVkCi0JICBUaGUgKGRlKXNlcmlhbGlzYXRpb24gdXNlcyAiKyIgYW5kIG5vdCAiIHwgIi4KLQotMjAxMS0wNC0yOCAxMTozNDozOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICBwbHVnaW5mZWF0dXJlOiBhdm9pZCBkdXBsaWNhdGluZyBmZWF0dXJlLT5uYW1lCi0JICBUaGUgZmVhdHVyZSBuYW1lIGlzIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2Ugb3ZlciB0aW1lIGFueXdheS4gSW4gb3JkZXIgdG8gZW5mb3JjZQotCSAgdGhpcyBwYXJlbnRpemUgZmVhdHVyZXMgdG8gdGhlIHJlZ2lzdHJ5IGFuZCBtYWtlIHRoZSBmZWF0dXJlLT5uYW1lIHBvaW50aW5nIHRvCi0JICBHc3RPYmplY3Q6bmFtZS4gSW4gMC4xMSB3ZSBjb3VsZCBjb25zaWRlciBvZiByZW1vdmluZyB0aGUgZmVhdHVyZS0+bmFtZSB2YXJpYWJsZQotCSAgKEZJWE1FIGNvbW1lbnQgYWRkZWQpLgotCSAgRml4ZXM6ICM0NTk0NjYKLQotMjAxMS0wNS0wMiAxNTozNjoxNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkgIGRvY3M6IGFkZCBkZXByZWNhdGlvbiBndWFyZHMKLQkgIE1vdmUgR3N0UGFkSW50TGlua0Z1bmN0aW9uIHRvIHByaXZhdGUgaGVhZGVyIHRvIGF2b2lkIGEgZG96ZW4gI2lmZGVmcy4gVXNlIGEKLQkgIGdwb2ludGVyIGluIHB1YmxpYyBoZWFkZXIgaW5zdGVhZC4KLQotMjAxMS0wNS0xNyAxOTowMzozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBkb24ndCBwdXNoIHN0aWNreSBldmVudHMgb24gZmx1c2gKLQkgIE9ubHkgYWxsb3cgc2VyaWFsaXplZCBhbmQgbm9uLWZsdXNoIGV2ZW50cyBmb3J3YXJkIHRoZSBzdGlja3kgZXZlbnRzLgotCi0yMDExLTA1LTE3IDE4OjIzOjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIHRlc3Q6IHJlc2V0IHBhZCBjYXBzIHByb3Blcmx5Ci0KLTIwMTEtMDUtMTcgMTg6MjM6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkIG1vcmUgZGVidWcKLQotMjAxMS0wNS0xNyAxODoyMTozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogcmVtb3ZlIHVudXNlZCBjb2RlCi0JICBUaGUgY29kZSB0byBtYWtlIHN1cmUgdGhhdCBjYXBzIGFyZSBwcm9wZXJseSBzZXQgb24gYm90aCBwYWRzLCBpdCBub3cgaGFwcGVucwotCSAgYXV0b21hdGljYWxseSB3aXRoIHRoZSBjYXBzIGV2ZW50LgotCi0yMDExLTA1LTE3IDE3OjUzOjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgotCSAgdGVzdHM6IGZpeCB0ZXN0cwotCSAgUmVtb3ZlIHRoZSB0ZXN0cyB0aGF0IGhhbmRsZSBpbmNvbXBhdGlibGUgZm9ybWF0cywgd2UgZG9uJ3Qgd2FudCB0aGF0IGFueW1vcmUuCi0KLTIwMTEtMDUtMTcgMTc6NTE6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBzZWdtZW50OiBoYW5kbGUgd3JhcGFyb3VuZCBiZXR0ZXIKLQkgIE5vdyB0aGF0IHdlIHVzZSB1bnNpZ25lZCB2YWx1ZXMgZm9yIHRoZSBzZWdtZW50LCBoYW5kbGUgd3JhcGFyb3VuZCB3aGVuIHNlZWtpbmcKLQkgIGJldHRlci4KLQotMjAxMS0wNS0xNyAxNjo1MDo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiByZW1vdmUgdW5yZWYsIHRoZSBvYmplY3QgaXMgTlVMTAotCi0yMDExLTA1LTE3IDE0OjAxOjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGV2ZW50OiBUaGUgUkVDT05GSUdVUkUgZWxlbWVudCBvbmx5IGV4aXN0cyBpbiAwLjExCi0JICBJbXBsZW1lbnRpbmcgaXQgcHJvcGVybHkgaW4gMC4xMCBzZWVtcyB0byBiZSBpbXBvc3NpYmxlLgotCi0yMDExLTA1LTE3IDEzOjEzOjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZhbHZlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHRlc3RzOiBVcGRhdGUgZm9yIGNhcHMvcGFkIHRlbXBsYXRlIHJlbGF0ZWQgQVBJIGNoYW5nZXMKLQotMjAxMS0wNS0xNyAxMjoyNToyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNlOiBVcGRhdGUgZm9yIGNhcHMvcGFkIHRlbXBsYXRlIHJlbGF0ZWQgQVBJIGNoYW5nZXMKLQotMjAxMS0wNS0xNyAxMjowNDoyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZ3N0OiBVcGRhdGUgZm9yIGNhcHMvcGFkIHRlbXBsYXRlIHJlbGF0ZWQgQVBJIGNoYW5nZXMKLQotMjAxMS0wNS0xNyAxMjoxMjoyMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogQ29uc2lkZXIgR3N0UGFkVGVtcGxhdGUgYXMgaW1tdXRhYmxlCi0JICBEb24ndCBjb3B5IHRoZSB0ZW1wbGF0ZXMgd2hlbiBjcmVhdGluZyBzdWJjbGFzc2VzIGJ1dCBvbmx5IGluY3JlYXNlCi0JICB0aGVpciByZWZjb3VudC4KLQotMjAxMS0wNS0xNyAxMjoxMDoyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JICBwYWR0ZW1wbGF0ZTogQ3JlYXRlIHBhZCB0ZW1wbGF0ZXMgd2l0aCBmbG9hdGluZyByZWZzCi0JICBBbmQgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGZsb2F0aW5nIHJlZiBpbiBnc3RfZWxlbWVudF9hZGRfcGFkX3RlbXBsYXRlKCkKLQotMjAxMS0wNS0xNyAxMjowNzowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIHBhZHRlbXBsYXRlOiBJbXByb3ZlIHJlZmVyZW5jZSBoYW5kbGluZyBvZiB0aGUgdGVtcGxhdGUncyBjYXBzCi0JICBnc3RfcGFkX3RlbXBsYXRlX25ldygpIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBjYXBzIGFueW1vcmUuCi0KLTIwMTEtMDUtMTYgMTM6Mzk6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgbWluaW9iamVjdDogZGVsYXkgcHJpdmF0ZSBkYXRhIGluaXRpYWxpc2F0aW9uIHVudGlsIGFjdHVhbGx5IG5lZWRlZAotCSAgV2Ugb25seSB1c2UgdGhlIHByaXZhdGUgaW5zdGFuY2UgZGF0YSBmb3Igd2VhayByZWZlcmVuY2VzIGZvciBub3csCi0JICBzbyBjYW4gZGVsYXkgaW5pdGlhbGlzYXRpb24gdW50aWwgYWN0dWFsbHkgbmVlZGVkIChtaWNyb29wdGltaXNhdGlvbikKLQotMjAxMS0wNS0xNyAxMTo1OTowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIHBhZDogTGV0IHRlbXBsYXRlIHJlbGF0ZWQgZnVuY3Rpb25zIHJldHVybiBuZXcgcmVmZXJlbmNlcwotCSAgZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcygpLCBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcygpCi0JICBhbmQgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlKCkgcmV0dXJuIGEgbmV3IHJlZmVyZW5jZSBvZiB0aGUKLQkgIGNhcHMgb3IgdGVtcGxhdGUgbm93IGFuZCB0aGUgcmV0dXJuIHZhbHVlIG5lZWRzIHRvIGJlCi0JICB1bnJlZmZlZCBhZnRlciB1c2FnZS4KLQotMjAxMS0wNS0xNyAxMTo0NTo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JICBSZXZlcnQgImV2ZW50OiBleGFtcGxlIG9mIGhvdyB0byBvcHRpbWl6ZSBldmVudHMiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGZhMjhlMmM1ZTZlNWUxNzJiZTMwOGMwYzUwZjQ0ZWQ2ZjM5ZTFhNzEuCi0JICBUaGUgb3B0aW1pemF0aW9uIG9ubHkgaGFzIG1pbmltYWwgaW1wYWN0IG9uIHRoZSBwZXJmb3JtYW5jZSBhbmQKLQkgIG1ha2VzIGV2ZXJ5dGhpbmcgbW9yZSBjb21wbGV4LgotCi0yMDExLTA1LTE3IDExOjQ1OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBSZXZlcnQgImV2ZW50OiB1cGRhdGUgdGhlIHN0cnVjdHVyZSB3aGVuIG5lZWRlZCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOTA1MTAwY2RiZTU4MGQ0ZDE4MmJmZDlkNWVjOWIzNjhhMTEwZjQ2NC4KLQotMjAxMS0wNS0xNyAxMToyMjo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogRml4IGNvbXBpbGF0aW9uCi0KLTIwMTEtMDUtMTcgMTE6MjA6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOgotCSAgUmV2ZXJ0ICJxdWVyeTogYWxsb3cgX21ha2Vfd3JpdGFibGUgb24gcXVlcnkgaGFuZGxlcnMiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGNmNGZiYzAwNWM1YzUzMGMyYTUwOWE5NDNhMDViOTFkNmM5YWYzZmIuCi0JICBUaGlzIGNoYW5nZSBkaWQgbm90IGltcHJvdmUgdGhlIHNpdHVhdGlvbiBmb3IgYmluZGluZ3MgYmVjYXVzZQotCSAgcXVlcmllcyBhcmUgdXN1YWxseSBjcmVhdGVkLCB0aGVuIGRpcmVjdGx5IHBhc3NlZCB0byBhIGZ1bmN0aW9uCi0JICBhbmQgbm90IHN0b3JlZCBlbHNld2hlcmUsIGFuZCB0aGUgd3JpdGFiaWxpdHkgcHJvYmxlbSB3aXRoCi0JICBtaW5pb2JqZWN0cyB1c3VhbGx5IGhhcHBlbnMgd2l0aCBidWZmZXJzIG9yIGNhcHMgaW5zdGVhZC4KLQotMjAxMS0wNS0xNyAxMToxOToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIFJldmVydCAiYmluOiBEZXJlZmVyZW5jZSBHc3RRdWVyeSoqIGJlZm9yZSBwYXNzaW5nIGl0IHRvIEdTVF9RVUVSWV9UWVBFX05BTUUiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDQzN2M5MmI0MDNlMGM3ZGE5YjlkNDUwOWVmNGZmYmQwNTcxMGRmMmIuCi0KLTIwMTEtMDUtMTcgMTE6MTk6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSAgUmV2ZXJ0ICJnaG9zdHBhZDogZml4IGdfcmV0dXJuXyogd2l0aCBuZXcgcXVlcnkiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDg3N2MxYzI4ZmY5NTdjYTkyOTExZWFkZmM3ODVmODY2MWQ5ZTAxMjcuCi0KLTIwMTEtMDUtMTcgMDk6NDA6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZgotCi0yMDExLTA1LTE3IDA5OjM1OjU0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSAgc3RydWN0dXJlOiBNYWtlIGJvdGggcGFyYW1ldGVycyB0byBnc3Rfc3RydWN0dXJlX2lzX2VxdWFsKCkgY29uc3QKLQotMjAxMS0wNS0xNyAwOTozMzo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogVXBkYXRlIFNpbmNlIG1hcmtlcnMgdG8gdGhlIGNvcnJlY3QgdmVyc2lvbgotCi0yMDExLTA1LTE3IDA5OjMzOjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHN0cnVjdHVyZTogQWRkIGdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0KCkKLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3QoKQotCi0yMDEwLTA5LTEwIDE4OjMzOjM0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZ3N0c3RydWN0dXJlOiBBZGQgZ3N0X3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0IEFQSQotCSAgQWxsb3dzIGNoZWNraW5nIGlmIHR3byBzdHJ1Y3R1cmVzIGNhbiBpbnRlcnNlY3Qgd2l0aG91dCBoYXZpbmcgdG8KLQkgIGdvIHRocm91Z2ggR3N0Q2FwcwotCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjkzMDAKLQotMjAxMC0wOS0xMCAxODoxNDowNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdHJ1Y3R1cmU6IE5ldyBBUEk6IGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwKLQkgIEFsbG93cyBjaGVja2luZyBlcXVhbGl0eSBvZiBHc3RTdHJ1Y3R1cmUgd2l0aG91dCBoYXZpbmcgdG8gY3JlYXRlCi0JICBpbnRlcm1lZGlhcnkgR3N0Q2Fwcy4KLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9pc19lcXVhbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTMwMAotCi0yMDExLTA1LTE2IDE5OjA5OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHRlc3RzOiBzZXQgZWxlbWVudHMgaW4gUEFVU0VECi0JICBTZXQgZWxlbWVudHMgaW4gUEFVU0VEIGJlZm9yZSB0cnlpbmcgdG8gc2V0IGNhcHMgb24gcGFkcy4KLQotMjAxMS0wNS0xNiAxOTowNToyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICB0ZXN0OiBmaXggZ2hvc3RwYWQgdGVzdAotCSAgV2UgbmVlZCB0byBoYXZlIGFjdGl2YXRlZCBwYWRzIGJlZm9yZSB3ZSBjYW4gcGFzcyBhcm91bmQgY2Fwcy4KLQkgIERvbid0IHNldCBOVUxMIGNhcHMgb24gcGFkcy4KLQotMjAxMS0wNS0xNiAxOTowNDozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBhdm9pZCBzZXR0aW5nIE5VTEwgY2FwcyBvbiBwYWRzCi0KLTIwMTEtMDUtMTYgMTg6NDg6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogZml4IGJ1ZmZlciByZWZjb3VudGluZwotCSAgV2hlbiB3ZSBmYWlsIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIsIHNldCB0aGUgYnVmZmVyIHBvaW50ZXIgdG8gTlVMTCBvcgotCSAgZWxzZSB0aGUgY2FsbGluZyBmdW5jdGlvbiB3aWxsIHRyeSB0byB1bnJlZiBpdC4KLQkgIFJlbW92ZSBzb21lIG9sZCBjb21tZW50cwotCi0yMDExLTA1LTE2IDE4OjI5OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIGNhcHNmaWx0ZXI6IGFsbG93IE5VTEwgZmlsdGVycyBhbmQgZml4IHJlZmNvdW50aW5nCi0KLTIwMTEtMDUtMTYgMTg6MTI6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBvbmx5IGFkZCB0aGUgc3RydWN0dXJlIHdoZW4gd2UgY291bGQgc2V0IHRoZSBwYXJlbnQKLQotMjAxMS0wNS0xNiAxNzo1Mzo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogZml4IGdfcmV0dXJuXyogd2l0aCBuZXcgcXVlcnkKLQotMjAxMS0wNS0xNiAxNzoyNDoxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IFVwZGF0ZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKLQotMjAxMS0wNS0xNiAxNjo1OToyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBoYW5kbGUgbW9yZSBmb3JtYXRzCi0JICBVc2UgdGhlIHNlZ21lbnQgZm9ybWF0IGluc3RlYWQgb2YgYSBoYXJkY29kZWQgX1RJTUUuCi0KLTIwMTEtMDUtMTYgMTY6NTc6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBoYW5kbGUgbW9yZSBmb3JtYXRzCi0JICBEb24ndCBoYXJkY29kZSBHU1RfRk9STUFUX1RJTUUgaW4gcGxhY2VzLCB3ZSBjYW4gd29yayB3aXRoIG1hbnkgZm9ybWF0cy4KLQotMjAxMS0wNS0xNiAxNjo1NDowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnMC4xMScgb2Ygc3NoOi8vZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvZ3N0cmVhbWVyL2dzdHJlYW1lciBpbnRvIDAuMTEKLQotMjAxMS0wNS0xNiAxNjo1MzowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dAotCSAgZ3N0L2dzdGJpbi5jCi0JICBnc3QvZ3N0ZWxlbWVudC5jCi0JICBnc3QvZ3N0ZWxlbWVudC5oCi0JICBnc3QvZ3N0Z2hvc3RwYWQuYwotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYwotCSAgZ3N0L2dzdG1pbmlvYmplY3QuaAotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMKLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYwotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYwotCi0yMDExLTA1LTE2IDE2OjEwOjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgotCSogZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sOgotCSAgdXBkYXRlIG1hbnVhbCBjb2RlIGV4YW1wbGVzIGZvciBuZXcgX2dldF9jYXBzKCkKLQotMjAxMS0wNS0xMyAwODozNDozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdGVzdF90cmFuc2Zvcm0uYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgotCSAgdGVzdHM6IFVwZGF0ZSBmb3IgbmVnb3RpYXRpb24gcmVsYXRlZCBBUEkgY2hhbmdlcwotCi0yMDExLTA1LTExIDE1OjM4OjA5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICBlbGVtZW50czogVXBkYXRlIGZvciBuZWdvdGlhdGlvbiByZWxhdGVkIEFQSSBjaGFuZ2VzCi0JICBUaGUgZmlsdGVyIGNhcHMgYXJlIG9ubHkgZm9yd2FyZGVkIGFuZCByZXR1cm5lZCBpbnN0ZWFkCi0JICBvZiBBTlkgY2FwcyBpbiB0aGUgY29yZSBlbGVtZW50cyBiZWNhdXNlIHRoZXkgZG9uJ3QgZG8KLQkgIGFueXRoaW5nIGNhcHMgc3BlY2lmaWMuCi0KLTIwMTEtMDUtMTEgMTU6MTI6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBiYXNlOiBJbXByb3ZlIG5lZ290aWF0aW9uIHdpdGggbmV3IGdldGNhcHMoKSBmaWx0ZXIKLQotMjAxMS0wNS0xMCAxNzo1NjozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICBnc3Q6IEFkZCBhIGZpbHRlciBjYXBzIHBhcmFtZXRlciB0byBhbGwgZ2V0X2NhcHMoKSBmdW5jdGlvbnMKLQkgIFRoaXMgaXMgdXNlZCB0byBwYXNzIHRoZSBwb3NzaWJsZSBjYXBzIGFuZCBwcmVmZXJlbmNlcyB0bwotCSAgdGhlIHBhZCBhbmQgdG8gYWxsb3cgYmV0dGVyIG5lZ290aWF0aW9uIGRlY2lzaW9ucy4KLQotMjAxMS0wNC0xOSAyMDowNTowNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBhZGp1c3QgaW5wdXQgZGF0YSByYXRlIGVzdGltYXRpb24KLQkgIC4uLiBiZWluZyBhd2FyZSBvZiBwb3NzaWJsZSBpbml0aWFsIGhpZ2hlciBidXJzdCByYXRlLgotCi0yMDExLTA1LTEzIDE4OjA3OjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkgIFJld29yayBHc3RTZWdtZW50IGhhbmRsaW5nCi0JICBJbXByb3ZlIEdzdFNlZ21lbnQsIHJlbmFtZSBzb21lIGZpZWxkcy4gVGhlIGlkZWEgaXMgdG8gaGF2ZSB0aGUgR3N0U2VnbWVudAotCSAgc3RydWN0dXJlIHJlcHJlc2VudCB0aGUgdGltaW5nIHN0cnVjdHVyZSBvZiB0aGUgYnVmZmVycyBhcyB0aGV5IGFyZSBnZW5lcmF0ZWQgYnkKLQkgIHRoZSBzb3VyY2Ugb3IgZGVtdXhlciBlbGVtZW50LgotCSAgZ3N0X3NlZ21lbnRfc2V0X3NlZWsoKSAtPiBnc3Rfc2VnbWVudF9kb19zZWVrKCkKLQkgIFJlbmFtZSB0aGUgTkVXU0VHTUVOVCBldmVudCB0byBTRUdNRU5ULgotCSAgTWFrZSBwYXJzaW5nIG9mIHRoZSBTRUdNRU5UIGV2ZW50IGludG8gYSBHc3RTZWdtZW50IHN0cnVjdHVyZS4KLQkgIFBhc3MgYSBHc3RTZWdtZW50IHN0cnVjdHVyZSB3aGVuIG1ha2luZyBhIG5ldyBTRUdNRU5UIGV2ZW50LiBUaGlzIGFsbG93cyB1cyB0bwotCSAgcGFzcyB0aGUgdGltaW5nIGluZm8gZGlyZWN0bHkgdG8gdGhlIG5leHQgZWxlbWVudC4gTm8gYWNjdW11bGF0aW9uIGlzIG5lZWRlZCBpbgotCSAgdGhlIHJlY2VpdmluZyBlbGVtZW50LCBhbGwgdGhlIGluZm8gaXMgaW5zaWRlIHRoZSBlbGVtZW50LgotCSAgUmVtb3ZlIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50KCk6IFRoaXMgZnVuY3Rpb24gYXMgdXNlZCB0byBhY2N1bXVsYXRlCi0JICBzZWdtZW50cyByZWNlaXZlZCBmcm9tIHVwc3RyZWFtLCB3aGljaCBpcyBub3cgbm90IG5lZWRlZCBhbnltb3JlIGJlY2F1c2UgdGhlCi0JICBzZWdtZW50IGV2ZW50IGNvbnRhaW5zIHRoZSBjb21wbGV0ZSB0aW1pbmcgaW5mb3JtYXRpb24uCi0KLTIwMTEtMDUtMTYgMTA6MjU6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFJlLWltcGxlbWVudCBub3RpZnk6OmNhcHMKLQotMjAxMS0wNS0xNCAxNDowMjowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgZG9jczogZml4IHVwIHNvbWUgU2luY2UgbWFya2VycyBhbmQgdXBkYXRlIGZvciBuZXcgbXVsdGlxdWV1ZSBhcmdzCi0KLTIwMTEtMDUtMTIgMTY6NDg6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IERvbid0IGludGVycHJldGUgcGlwZWxpbmVzIHdpdGhvdXQgc2luayBlbGVtZW50cyBhcyBhbHdheXMgYmVpbmcgaW4gRU9TIHN0YXRlCi0JICBTb21lIHRlc3RzIChlLmcuIGVsZW1lbnRzL2NhcHNmaWx0ZXIpIGhhdmUgcGlwZWxpbmVzIHdpdGggZGFuZ2xpbmcKLQkgIHNpbmtwYWRzIGFuZCB3aXRob3V0IGEgc2luayBlbGVtZW50LiBUaGVzZSBwaXBlbGluZXMgY2FuIG5ldmVyIHBvc3QKLQkgIGFuIEVPUyBtZXNzYWdlIChiZWNhdXNlIHRoaXMgaXMgb25seSB2YWxpZCBieSBhIHNpbmspIGFuZCBhcyBzdWNoCi0JICBzaG91bGQgbmV2ZXIgZ2V0IGFuIEVPUyBtZXNzYWdlIHBvc3RlZCBieSB0aGUgYmluLgotCi0yMDExLTA1LTEyIDE1OjUxOjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBzeXN0ZW1jbG9jazogT25seSByZXRyeSB3cml0aW5nIHRvIHRoZSBzb2NrZXQgZm9yIEVBR0FJTiwgRVdPVUxEQkxPQ0sgYW5kIEVJTlRSCi0JICBGaXhlcyBpbmZpbml0ZSBsb29wIGluIHNvbWUgY2FzZXMsIGJ1ZyAjNjUwMDAyLgotCi0yMDExLTA1LTEyIDA5OjU5OjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWluaW9iamVjdDogQWRkIG5ldyBtaW5pb2JqZWN0IHdlYWsgcmVmL3VucmVmIGZ1bmN0aW9ucyB0byB0aGUgZG9jcwotCi0yMDExLTA1LTEyIDA5OjU1OjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JICBtaW5pb2JqZWN0OiBNaW5vciBjbGVhbnVwIG9mIGxhc3QgY29tbWl0Ci0KLTIwMTEtMDUtMTEgMTM6MDk6MTkgLTA0MDAgIEpvc8OpIEFsYnVycXVlcnF1ZSA8amFhbGJ1cnF1QHN2bi5nbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IEFkZCB3ZWFrIHJlZmVyZW5jaW5nIGZ1bmN0aW9uYWxpdHkKLQkgIEFQSTogZ3N0X21pbmlfb2JqZWN0X3dlYWtfcmVmKCkKLQkgIEFQSTogZ3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWYoKQotCSAgQWRkIHdlYWsgcmVmZXJlbmNpbmcgZnVuY3Rpb25hbGl0eSB0byBHc3RNaW5pT2JqZWN0LCB3aGljaAotCSAgYWxsb3dzIHRvIGdldCBub3RpZmljYXRpb25zIHdoZW4gYW4gbWluaSBvYmplY3QgaXMgZGVzdHJveWVkCi0JICBidXQgZG9lc24ndCBpbmNyZWFzZSB0aGUgcmVhbCByZWZjb3VudC4gVGhpcyBpcyBtb3N0bHkKLQkgIHVzZWZ1bCBmb3IgYmluZGluZ3MuCi0JICBGaXhlcyBidWcgIzYwOTQ3My4KLQotMjAxMS0wMy0xOSAxMDoyODo0OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmg6Ci0JICBpbnB1dHNlbGVjdG9yOiBBZGQgc3luYyBtb2RlIHRoYXQgc3luY3MgaW5hY3RpdmUgcGFkcyB0byB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBhY3RpdmUgcGFkCi0JICBGaXhlcyBidWcgIzY0NTAxNy4KLQotMjAxMS0wMy0yMiAxMzoxOTo0NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBBZGQgbW9kZSB0byBzeW5jaHJvbml6ZSBkZWFjdGl2YXRlZC9ub3QtbGlua2VkIHN0cmVhbXMgYnkgdGhlIHJ1bm5pbmcgdGltZQotCSAgRml4ZXMgYnVnICM2NDUxMDcsICM2MDA2NDguCi0KLTIwMTEtMDQtMTggMTQ6MjY6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IE9ubHkgcG9zdCBFT1MgbWVzc2FnZXMgYWZ0ZXIgcmVhY2hpbmcgdGhlIFBMQVlJTkcgc3RhdGUKLQkgIEZpeGVzIGJ1ZyAjNjQ3NzU2LgotCi0yMDExLTA1LTEwIDE2OjM3OjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGVsZW1lbnQ6IEFkZCBHc3RFbGVtZW50OjpzdGF0ZV9jaGFuZ2VkIHZmdW5jCi0JICBBUEk6IEdzdEVsZW1lbnQ6OnN0YXRlX2NoYW5nZWQKLQkgIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50IGhhcyBjaGFuZ2VkIGFuZAotCSAgYmVmb3JlIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlLWNoYW5nZWQgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGJ1cy4KLQotMjAxMS0wNS0wNiAxNjo0NDoyOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnaG9zdHBhZDogQWRkIGRvY3MgZm9yIGFsbCB0aGUgbmV3LCBwdWJsaWMgZnVuY3Rpb25zCi0KLTIwMTEtMDUtMDYgMTY6MTU6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBBZGQgZ3VhcmRzIGFnYWluc3QgaW52YWxpZCBwYXJhbWV0ZXJzIHRvIHRoZSBuZXcsIHB1YmxpYyBmdW5jdGlvbnMKLQotMjAxMS0wNS0wNiAxNjowMDoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdob3N0cGFkOiBSZW5hbWUgZ2hvc3RwYWQvcHJveHlwYWQgZGVmYXVsdCBmdW5jdGlvbnMKLQkgIEFQSTogZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQKLQkgIEFQSTogZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQKLQkgIEFQSTogZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQKLQkgIEFQSTogZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQKLQkgIEFQSTogZ3N0X2dob3N0X3BhZF9saW5rX2RlZmF1bHQKLQkgIEFQSTogZ3N0X2dob3N0X3BhZF9zZXRjYXBzX2RlZmF1bHQKLQkgIEFQSTogZ3N0X2dob3N0X3BhZF91bmxpbmtfZGVmYXVsdAotCSAgQVBJOiBnc3RfcHJveHlfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdAotCSAgQVBJOiBnc3RfcHJveHlfcGFkX2J1ZmZlcmFsbG9jX2RlZmF1bHQKLQkgIEFQSTogZ3N0X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0Ci0JICBBUEk6IGdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0Ci0JICBBUEk6IGdzdF9wcm94eV9wYWRfY2hlY2tnZXRyYW5nZV9kZWZhdWx0Ci0JICBBUEk6IGdzdF9wcm94eV9wYWRfZXZlbnRfZGVmYXVsdAotCSAgQVBJOiBnc3RfcHJveHlfcGFkX2ZpeGF0ZWNhcHNfZGVmYXVsdAotCSAgQVBJOiBnc3RfcHJveHlfcGFkX2dldGNhcHNfZGVmYXVsdAotCSAgQVBJOiBnc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHQKLQkgIEFQSTogZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQKLQkgIEFQSTogZ3N0X3Byb3h5X3BhZF9xdWVyeV9kZWZhdWx0Ci0JICBBUEk6IGdzdF9wcm94eV9wYWRfcXVlcnlfdHlwZV9kZWZhdWx0Ci0JICBBUEk6IGdzdF9wcm94eV9wYWRfc2V0Y2Fwc19kZWZhdWx0Ci0KLTIwMTEtMDUtMDYgMTU6NTA6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSAgZ2hvc3RwYWQ6IE1ha2UgYWxsIHRoZSBpbnRlcm5hbCBjYXBzIGZ1bmN0aW9ucyBwdWJsaWMKLQkgIFRoaXMgaXMgdXNlZnVsIGlmIGdob3N0cGFkL3Byb3h5cGFkcyBzaG91bGQgYmUgdXNlZCBidXQKLQkgIGFkZGl0aW9uYWwgY29kZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGUuZy4gZm9yIHRyYWNraW5nCi0JICBzZWdtZW50cyBpbiB0aGUgZXZlbnQgZnVuY3Rpb24uCi0KLTIwMTEtMDUtMDYgMTU6MjU6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBPbmx5IGltcGxlbWVudCB0aGUgaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyBmdW5jdGlvbiBvbiBwcm94eXBhZHMKLQkgIGdob3N0cGFkcyBpbmhlcml0IGl0IGZyb20gdGhlaXIgcGFyZW50IGNsYXNzLiBBbHNvIG1ha2UgaXQgdGhyZWFkc2FmZS4KLQotMjAxMS0wNS0wNiAxNToxNjowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdob3N0cGFkOiBBUEk6IEV4cG9zZSBnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbCgpCi0JICBUaGlzIGFsbG93cyB0byBnZXQgdGhlIGludGVybmFsIHBhZCBvZiBnaG9zdHBhZHMgYW5kCi0JICBwcm94eXBhZHMgd2l0aG91dCB1c2luZyBnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MoKQotCSAgYW5kIGlzIG11Y2ggbW9yZSBjb252ZW5pZW50LgotCSAgVGhlIGludGVybmFsIHBhZCBvZiBhIGdob3N0cGFkIGlzIHRoZSBwYWQgb2YgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbgotCSAgdGhhdCBpcyB1c2VkIHRvIGxpbmsgdG8gdGhlIGdob3N0cGFkIHRhcmdldC4KLQotMjAxMS0wNS0wNSAxNzo1NDo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogV2hlbiB0cnlpbmcgdG8gZml4YXRlIHRoZSBzaW5rIHN1Z2dlc3Rpb24gcHJlZmVyIGl0cyBzdHJ1Y3R1cmUgb3JkZXIKLQotMjAxMS0wNS0wNSAxMToyODozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogTWVyZ2Ugc3RydWN0dXJlcyB3aGVuIGludGVyc2VjdGluZyBpbnN0ZWFkIG9mIGFwcGVuZGluZyB0aGVtCi0JICBUaGlzIHByZXZlbnRzIGFkZGluZyBkdXBsaWNhdGVzIG92ZXIgYW5kIG92ZXIgYWdhaW4gdG8gdGhlIHJlc3VsdGluZwotCSAgY2FwcyBpZiB0aGV5IGFscmVhZHkgZGVzY3JpYmUgdGhlIG5ldyBpbnRlcnNlY3Rpb24gcmVzdWx0LgotCSAgV2hpbGUgdGhpcyBjaGFuZ2VzIGludGVyc2VjdGlvbiBmcm9tIE8obiptKSB0byBPKG5eMiptKSwgaXQgcmVzdWx0cyBpbgotCSAgc21hbGxlciBjYXBzLCB3aGljaCBpbiB0aGUgZW5kIHdpbGwgZGVjcmVhc2UgZnVydGhlciBwcm9jZXNzaW5nIHRpbWVzLgotCSAgRm9yIGV4YW1wbGUgaW4gYW4gYXVkaW9jb252ZXJ0ICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9jb252ZXJ0IHBpcGVsaW5lLAotCSAgd2hlbiBmb3J3YXJkaW5nIHRoZSBkb3duc3RyZWFtIGNhcHMgcHJlZmVyZW5jZSBpbiBiYXNldHJhbnNmb3JtCi0JICAoc2VlIGUyNmRhNzJkZTI1YTkxYzNlYWFkOWY3YzhiMmY1M2JhODg4YTAzOTQpIHRoaXMgcmVzdWx0cyBpbgotCSAgMTYgaW5zdGVhZCBvZiAxOTEgY2FwcyBzdHJ1Y3R1cmVzLgotCi0yMDExLTA1LTA0IDExOjI5OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBJbiBnZXRjYXBzKCkgcHJlZmVyIHRoZSBjYXBzIG9yZGVyIGFuZCBjYXBzIG9mIGRvd25zdHJlYW0gaWYgcG9zc2libGUKLQotMjAxMS0wNS0wMyAxNzoyNjo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogUHJlZmVyIGNhcHMgb3JkZXIgZ2l2ZW4gYnkgdGhlIHN1YmNsYXNzIG9mIHRoZSB0ZW1wbGF0ZSBjYXBzIG9yZGVyCi0KLTIwMTEtMDQtMjAgMjI6NTI6MzYgKzAyMDAgIE1pZ3VlbCBBbmdlbCBDYWJyZXJhIE1veWEgPG1hZG1hYzI1MDFAZ21haWwuY29tPgotCi0JKiBnc3QvcGFyc2UvdHlwZXMuaDoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIHBhcnNlOiBkb24ndCB1bmVzY2FwZSBpbnNpZGUgcXVvdGVzCi0JICBFc2NhcGVkIGNoYXJhY3RlcnMgaW5zaWRlIHF1b3RlZCBzdHJpbmdzIGFyZSBzdXBwb3NlZCB0byBiZSB1bmVzY2FwZWQgYnkKLQkgIGRlc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMsIG5vdCBieSBwYXJzaW5nIGZ1bmN0aW9ucy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDgwMjUKLQotMjAxMS0wNC0xOCAxMDowNDoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogUmVtb3ZlIHVubmVjZXNzYXJ5IEZJWE1FCi0JICBSZXNldHRpbmcgdGhlIHJlc3VsdCBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gcmVzeW5jaW5nIGJlY2F1c2UKLQkgIHBhZHMgdGhhdCBwcmV2aW91c2x5IGdvdCB0aGUgZXZlbnQgd2lsbCBiZSBza2lwcGVkIGFuZCB3ZQotCSAgbmVlZCB0byBjb25zaWRlciB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgcHVzaGVzLgotCi0yMDExLTA0LTE4IDA5OjUzOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IElmIGFjdGl2YXRpbmcgb25lIHBhZCBmYWlsZWQgZXJyb3Igb3V0IGVhcmx5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFjdGl2YXRlIHRoZSBuZXh0IHBhZHMKLQkgIElmIG9uZSBwYWQgZmFpbHMgdG8gYWN0aXZhdGUgdGhlIGNvbXBsZXRlIGFjdGl2YXRpb24gcHJvY2VzcyB3aWxsIGZhaWwKLQkgIGFueXdheSBhbmQgdHJ5aW5nIHRvIGFjdGl2YXRlIHRoZSBvdGhlciBwYWRzIG9ubHkgd2FzdGVzIHRpbWUuCi0KLTIwMTEtMDQtMTggMDk6NDk6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IElmIGFjdGl2YXRpbmcgb25lIHBhZCBmYWlsZWQgZXJyb3Igb3V0IGVhcmx5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFjdGl2YXRlIHRoZSBuZXh0IHBhZHMKLQkgIElmIG9uZSBwYWQgZmFpbHMgdG8gYWN0aXZhdGUgdGhlIGNvbXBsZXRlIGFjdGl2YXRpb24gcHJvY2VzcyB3aWxsIGZhaWwKLQkgIGFueXdheSBhbmQgdHJ5aW5nIHRvIGFjdGl2YXRlIHRoZSBvdGhlciBwYWRzIG9ubHkgd2FzdGVzIHRpbWUuCi0KLTIwMTEtMDUtMTQgMDk6MzE6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMC4xMC4zNCA9PT0KLQotMjAxMS0wNS0xNCAwMTowMDoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMC4xMC4zNAotCi0yMDExLTA1LTEzIDA4OjM4OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKLQkgIG1ldGE6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgdW5pdCB0ZXN0IGFmdGVyIHJlbW92YWwgb2YgdGhlIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBmdW5jdGlvbnMKLQotMjAxMS0wNS0wNCAxNTozMTo1NiArMDMwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZG8gbm90IHNldCBmaXJzdCBidWZmZXIgdGltZXN0YW1wIHRvIDAgZm9yIGxpdmUgc291cmNlcwotCSAgRG9pbmcgc28gYXZvaWRzIGEgbGFyZ2UgdGltZXN0YW1wIGdhcCBiZXR3ZWVuIGZpcnN0IGFuZCBzZWNvbmQgYnVmZmVyCi0JICBmb3IgbGl2ZSBzb3VyY2VzIHdoaWNoIHRha2UgdGltZSB0byBzdGFydCB1cC4KLQkgIFRoZSBmaXJzdCBidWZmZXIgbm93IGhhcyBhICJsaXZlIiB0aW1lc3RhbXAgYmFzZWQgb24gdGhlIHJ1bm5pbmcgdGltZSwKLQkgIGFzIG90aGVyIGJ1ZmZlcnMgZG8uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5MzY5Ci0KLTIwMTEtMDUtMTEgMTk6MTA6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXRhLmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSAgbWV0YTogcmVtb3ZlIChkZSlzZXJpYWxpemUgZnVuY3Rpb25zCi0JICBBZGQgYSBHVHlwZSB0byB0aGUgbWV0YWRhdGEgdG8gaWRlbnRpZnkgdGhlIEdzdE1ldGFJbmZvLgotCSAgV2UgY2FuIHJlbW92ZSB0aGUgKGRlKXNlcmlhbGl6ZSBmdW5jdGlvbnMgZm9yIHRoZSBtZXRhZGF0YSBiZWNhdXNlIHdlIGNhbgotCSAgcmVnaXN0ZXIgR1R0eXBlIHRyYW5zZm9ybSBmdW5jdGlvbnMgYmV0d2VlbiB2YXJpb3VzIHR5cGVzIHRvIGltcGxlbWVudAotCSAgc2VyaWFsaXphdGlvbiBsYXRlci4KLQotMjAxMS0wNS0xMSAxODoxNzo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JICBzdHJ1Y3R1cmU6IG1vcmUgY2xlYW51cHMKLQkgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3R5cGUoKSAtPiBfZ3N0X3N0cnVjdHVyZV90eXBlIHRvIGF2b2lkIG1ldGhvZCBjYWxscyBmb3IKLQkgIGdldHRpbmcgdGhlIEdUeXBlIHRoYXQgaW5pdGlhbGl6ZWQgYXQgdGhlIHN0YXJ0LgotCSAgSGlkZSBzb21lIHN0cnVjdHVyZSBmaWVsZHMgaW4gcHJpdmF0ZSBkYXRhIHNvIHRoYXQgd2UgY2FuIGNoYW5nZSB0aGUKLQkgIGltcGxlbWVudGF0aW9uLgotCSAgTW92ZSBzdHJ1Y3R1cmUgZXF1YWxpdHkgY2hlY2sgZnJvbSBjYXBzLmMgdG8gc3RydWN0dXJlLmMgd2hlcmUgaXQgYmVsb25ncy4KLQotMjAxMS0wNS0xMSAxODowNzoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiByZW1vdmUgb2Jzb2xldGUgY29kZQotCSAgUmVtb3ZlIHNvbWUgb2Jzb2xldGUgY29kZS4KLQkgIERvbid0IHRyeSB0byByZWNvbmZpZ3VyZSB3aGVuIHdlIGRvbid0IGhhdmUgc2luayBjYXBzLgotCi0yMDExLTA1LTExIDE2OjQ2OjQ5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBEZXJlZmVyZW5jZSBHc3RRdWVyeSoqIGJlZm9yZSBwYXNzaW5nIGl0IHRvIEdTVF9RVUVSWV9UWVBFX05BTUUKLQotMjAxMS0wNS0xMSAxNjowMzo0MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudDogdXBkYXRlIHRoZSBzdHJ1Y3R1cmUgd2hlbiBuZWVkZWQKLQkgIFdoZW4gd2UgZ2V0IHRoZSBzdHJ1Y3R1cmUgb2YgYW4gZXZlbnQsIG1ha2Ugc3VyZSBpdCBhbHNvIGNvbnRhaW5zIHRoZSBmaWVsZHMKLQkgIHRoYXQgd2Uga2VlcCBpbiBmYXN0IHZhcmlhYmxlcywgdGhpcyB3YXkgd2UgY2FuIGVhc2lseSBzZXJpYWxpemUgYW5kIGRlYnVnCi0JICB0aGUgZXZlbnRzLiBXZSB3b3VsZCBwcm9iYWJseSBsYXRlciBzaW1wbHkgcHJlZmVyIHRvIHJlZ2lzdGVyIGEgdHJhbnNmb3JtCi0JICBmdW5jdGlvbiB0byBHX1RZUEVfU1RSSU5HIGFuZCBHX1RZUEVfQllURUFSUkFZIGV0Yy4uCi0KLTIwMTEtMDUtMTEgMTY6MDE6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBjbGVhbnVwcwotCSAgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgdHlwZSBpcyAwLCB0aGUgaW5pdCBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbmNlCi0JICBpbiB0aGUgYmVnaW5uaW5nLgotCi0yMDExLTA1LTExIDEyOjA0OjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSAgZXZlbnQ6IGNsZWFuIHVwIHNvbWUgbWFjcm9zCi0JICBBdm9pZCBleGVjdXRpbmcgYSBtZXRob2QgZm9yIEdTVF9UWVBFX0VWRU5UIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgdHlwZSB2YXJpYWJsZQotCSAgZGlyZWN0bHkuIFdlIGNhbiBkbyB0aGlzIGJlY2F1c2Ugd2UgcmVnaXN0ZXIgaXQgYmVmb3JlIGFueXRoaW5nIGVsc2UuCi0KLTIwMTEtMDUtMTEgMTU6NDg6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IEZpeCBHU1RfREVCVUcgcGFyYW1ldGVycyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGZvcm1hdCBzdHJpbmcKLQotMjAxMS0wNS0xMSAxNToyNjowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogSW1wbGVtZW50IHN1cHBvcnQgZm9yIHBhZCByZWNvbmZpZ3VyYXRpb24gYWdhaW4KLQotMjAxMS0wNS0xMSAxNToxODo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSAgY2Fwc2ZpbHRlcjogRml4IGRlYWRsb2NrLCBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoKSBhbHJlYWR5IHRha2VzIHRoZSBwYWQncyBvYmplY3QgbG9jawotCi0yMDExLTA1LTExIDExOjA2OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IGV4YW1wbGUgb2YgaG93IHRvIG9wdGltaXplIGV2ZW50cwotCSAgVXNlIGEgc3RydWN0dXJlIGZvciB0aGUgUW9TIGV2ZW50IGJ5ICdleHRlbmRpbmcnIHRoZSBHc3RFdmVudEltcGwgc3RydWN0dXJlLgotCSAgVGhpcyBzaG91bGQgYXZvaWQgYWxsb2NhdGlvbiBvZiBHc3RTdHJ1Y3R1cmVzIGFuZCBpdHMgY29udGVudHMuCi0KLTIwMTEtMDUtMTAgMTE6MTE6MTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gYWRkaW5nIGEgcGFkCi0JICBUaGlzIHNlZW1zIHRvIGJlIGEgcmVncmVzc2lvbiwgYW5kIHdhcyBjYXVzaW5nIGNyYXNoZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5ODc4Ci0KLTIwMTEtMDUtMTAgMTg6MzY6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mZHNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBxdWVyeTogYWxsb3cgX21ha2Vfd3JpdGFibGUgb24gcXVlcnkgaGFuZGxlcnMKLQkgIFBhc3MgYSBHc3RRdWVyeSAqKiB0byB0aGUgcXVlcnkgaGFuZGxlcnMgc28gdGhhdCB0aGV5IGNhbiBtYWtlIHRoZSBxdWVyeQotCSAgd3JpdGFibGUgYmVmb3JlIHVzaW5nIGEgc2V0dGVyIG9uIGl0LgotCSAgUG9ydCBjb2RlIHRvIG5ldyBBUEkuCi0KLTIwMTEtMDUtMTAgMTY6NDY6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBwb3J0aW5nOiB1cGRhdGUgcG9ydGluZyBkb2MKLQotMjAxMS0wNS0xMCAxNjo0MTozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICBlbGVtZW50OiB1c2UgcmVxdWVzdF9uZXdfcGFkX2Z1bGwgYXMgdGhlIGRlZmF1bHQKLQkgIEFkZCBHc3RDYXBzIHRvIHJlcXVlc3RfbmV3X3BhZCBzbyB0aGF0IHJlcXVlc3RfbmV3X3BhZF9mdWxsIGNhbiBiZSByZW1vdmVkLgotCSAgRml4IGVsZW1lbnRzLgotCi0yMDExLTA1LTEwIDE2OjIzOjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmcgZG9jCi0KLTIwMTEtMDUtMTAgMTU6NDE6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IG1ha2Ugc3VyZSBxdWVyeSBpcyB3cml0YWJsZQotCSAgTWFrZSBzdXJlIHRoZSBRdWVyeSBpcyB3cml0YWJsZSBiZWZvcmUgZXhlY3V0aW5nIHRoZSBzZXR0ZXJzLgotCi0yMDExLTA1LTEwIDE1OjMzOjUzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IEhpZGUgR3N0U3RydWN0dXJlIGluIHF1ZXJpZXMKLQkgIEhpZGUgdGhlIEdzdFN0cnVjdHVyZSBmcm9tIHRoZSBxdWVyeSBBUEkuCi0JICBSZW5hbWUgc29tZSBtZXRob2RzIHRvIG1hdGNoIHRoZSBtb3JlIGNvbW1vbiBuYW1lcyBpbiBHT2JqZWN0IGxpYnJhcmllcy4KLQkgIEFkZCBzb21lIG1vcmUgdXNlZnVsIHF1ZXJ5IEFQSS4KLQotMjAxMS0wNS0xMCAxMzozNDoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgbWVzc2FnZTogaGlkZSB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUgZmllbGQKLQkgIE1ha2UgYSBwcml2YXRlIHN0cnVjdHVyZSB0byBob2xkIHRoZSBHc3RTdHJ1Y3R1cmUgYml0cyBvZiB0aGUgbWVzc2FnZS4KLQkgIEFkZCBzb21lIG1vcmUgdXNlZnVsIG1hY3JvcyBsaWtlIHdlIGhhdmUgZm9yIGV2ZW50cy4KLQotPT09IHJlbGVhc2UgMC4xMC4zMyA9PT0KLQotMjAxMS0wNS0xMCAwODo1NToxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAwLjEwLjMzCi0JICBIaWdobGlnaHRzOgotCSAgLSBuZXcgcGFyc2VyIGJhc2UgY2xhc3M6IEdzdEJhc2VQYXJzZQotCSAgLSBuZXcgY29yZSBlbGVtZW50OiBmdW5uZWwKLQkgIC0gT1NYIG11bHRpLWFyY2ggZml4ZXMKLQkgIC0gbmV3IFFvUyB0eXBlIGZvciBRb1MgZXZlbnRzCi0JICAtIG5ldyBwcm9ncmVzcyBtZXNzYWdlIEFQSSB0byBub3RpZnkgYXBwbGljYXRpb25zIG9mIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zCi0JICAtIGNvdW50bGVzcyBvdGhlciBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCi0KLTIwMTEtMDUtMTAgMTI6Mjk6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmg6Ci0JICBjYXBzOiBmaXggdGhlIG1hY3JvcyBhIGxpdHRsZQotCi0yMDExLTA1LTEwIDExOjUwOjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSAgZXZlbnQ6IEhpZGUgdGhlIEdzdFN0cnVjdHVyZQotCSAgSGlkZSB0aGUgR3N0U3RydWN0dXJlIG9mIHRoZSBldmVudCBpbiB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcGFydCBzbyB0aGF0Ci0JICB3ZSBjYW4gY2hhbmdlIGl0LgotCSAgQWRkIG1ldGhvZHMgdG8gY2hlY2sgYW5kIG1ha2UgdGhlIGV2ZW50IHdyaXRhYmxlLgotCSAgQWRkIGEgbmV3IG1ldGhvZCB0byBnZXQgYSB3cml0YWJsZSBHc3RTdHJ1Y3R1cmUgb2YgdGhlIGVsZW1lbnQuCi0JICBBdm9pZCBkaXJlY3RseSBhY2Npc2luZyB0aGUgZXZlbnQgc3RydWN0dXJlLgotCi0yMDExLTA1LTA5IDE4OjQ4OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IF9xb3NfZnVsbCAtPiBfcW9zCi0KLTIwMTEtMDUtMDkgMTc6NTE6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSogZ3N0L2dzdHNlZ21lbnQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkgIHNlZ21lbnQ6IHJlbW92ZSBfZnVsbCB2ZXJzaW9uCi0JICBSZW5hbWUgdGhlIF9mdWxsIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbnMgdG8gdGhlIG5vcm1hbCBmdW5jdGlvbiBuYW1lcy4KLQotMjAxMS0wNS0wOSAxNjozOToxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIHNlZ21lbnQ6IHJlbW92ZSBhYnNfcmF0ZSBmcm9tIHNlZ21lbnQgc3RydWN0dXJlCi0JICBSZW1vdmUgdGhlIGFic19yYXRlIGZpZWxkIGZyb20gdGhlIHNlZ21lbnQgc3RydWN0dXJlLCB3ZSBjYW4gdHJpdmlhbGx5IGNvbXB1dGUKLQkgIGl0IHdoZW4gbmVlZGVkLgotCi0yMDExLTA1LTA5IDE2OjIxOjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKLQkgIGNhcHM6IHJlbW92ZSBjYXBzIGZyb20gYnVmZmVycyBhbmQgcGFkcwotCSAgUmVtb3ZlIHRoZSBHc3RDYXBzIGZyb20gYnVmZmVycyBhbmQgcGFkcy4gV2Ugbm93IHVzZSBDQVBTIGV2ZW50cyB0byBuZWdvdGlhdGUKLQkgIGZvcm1hdHMgYmV0d2VlbiBlbGVtZW50LgotCi0yMDExLTA1LTA5IDE1OjA2OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IFVzZSBDQVBzIGV2ZW50Ci0JICBVc2UgdGhlIGNhcHMgZXZlbnQgdG8gY29uZmlndXJlIGJhc2V0cmFuc2Zvcm0uCi0JICBSZW1vdmUgZm9yY2VfYWxsb2MgaGFjaywgd2UgZG9uJ3QgbmVlZCB0aGlzIGluIDAuMTEgd2l0aCBuZXcgdXBzdHJlYW0KLQkgIG5lZ290aWF0aW9uLgotCSAgQXZvaWQgZ2V0dGluZyBzb21lIHBhZCBjYXBzLgotCi0yMDExLTA1LTA5IDE1OjA2OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogYWRkIHNvbWUgbW9yZSBkZWJ1ZwotCi0yMDExLTA1LTA4IDExOjAyOjE2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogQWRkIG5ldyBzeW1ib2xzCi0KLTIwMTEtMDUtMDggMTE6MDE6NTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBnc3RidWZmZXI6IEZpeCB1bml0aWFsaXplZCB2YXJpYWJsZXMKLQotMjAxMS0wNS0wOSAxMDo1NDoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkgIHRvb2xzOiBhdm9pZCB1c2luZyBwYWQgY2FwcwotCSAgQXZvaWQgZGlyZWN0bHkgYWNjZXNzaW5nIHRoZSBwYWQgY2FwcywgdXNlIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcygpIGluc3RlYWQuCi0KLTIwMTEtMDUtMDggMTM6MTQ6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wNS0wOCAxMzowNzoxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHVzZSBDQVBTIGV2ZW50IGluc3RlYWQgb2Ygc2V0Y2FwcyBmdW5jdGlvbgotCi0yMDExLTA1LTA4IDEyOjQ2OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBiYXNlOiBhdm9pZCB1c2luZyBidWZmZXIgY2FwcwotCSAgQ29tbWVudCBhbGwgY29kZSB1c2luZyBidWZmZXIgY2Fwcy4KLQkgIFJld29yayBjYXBzZmlsdGVyIGNvZGUgYSBsaXR0bGUuCi0JICBGaXggc29tZSB1bml0IHRlc3RzCi0KLTIwMTEtMDUtMDggMTI6NDM6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogaW1wcm92ZSBjYXBzIGV2ZW50IGhhbmRsaW5nCi0JICBGaXggcmVwbGFjZSBvZiBjYXBzIGV2ZW50cyB3aGVuIGxpbmtpbmc6IHdlIG5lZWQgdG8gdW5yZWYgdGhlIG9sZCBvbmVzLgotCSAgTWFrZSBzdXJlIHdlIHBhc3MgZXJyb3IgdmFsdWVzIGFyb3VuZC4KLQkgIE1vdmUgYmFja3dhcmQgY29tcGF0IGNvZGUgaW50byB0aGUgZGVmYXVsdCBoYW5kbGVyIGZvciBub3cuCi0KLTIwMTEtMDUtMDggMTI6Mzg6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IGRvbid0IHJlZiB0aGUgY2FwcwotCSAgVXNlIGEgZGlmZmVyZW50IHdheSBvZiBnZXR0aW5nIHRoZSBjYXBzIGZyb20gdGhlIGNhcHMgZXZlbnQgc28gdGhhdCBubwotCSAgcmVmY291bnRpbmcgaGFwcGVucy4KLQotMjAxMS0wNS0wOCAxMjozNzo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBhdm9pZCB1c2luZyBidWZmZXIgY2FwcwotCi0yMDExLTA1LTA2IDIzOjQwOjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZG9uJ3QgcG9zdCBsb2FkcyBvZiBlbXB0eSB0YWdsaXN0cwotCSAgT25seSBwb3N0IGJpdHJhdGUgdXBkYXRlcyBpZiB0aGVyZSdzIHNvbWV0aGluZyB0byBwb3N0LCBkb24ndAotCSAgcG9zdCBlbXB0eSB0YWdsaXN0cyBpZiBub3RoaW5nIGNoYW5nZWQuCi0KLTIwMTEtMDUtMDYgMTk6MDQ6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHBhZDogYXZvaWQgdXNpbmcgdGhlIG9sZCBHU1RfUEFEX0NBUFMKLQkgIERvbid0IHVzZSBHU1RfUEFEX0NBUFMgYnV0IGluc3RlYWQgdXNlIHRoZSBuZXcgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkKLQkgIG1ldGhvZC4KLQkgIEF2b2lkIHNldHRpbmcgY2FwcyBvbiBidWZmZXJzLgotCi0yMDExLTA1LTA2IDE5OjAzOjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGFkZCAyIG5ldyBjYXBzIG1ldGhvZHMKLQkgIEFkZCBtZXRob2QgdG8gZ2V0IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBjYXBzIG9uIHRoZSBwYWQuCi0JICBBZGQgYSBtZXRob2QgdG8gY2hlY2sgaWYgY2FwcyBhcmUgY29uZmlndXJlZCBvbiBhIHBhZC4KLQotMjAxMS0wNS0wNiAxNzo1OTozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIHBhZDogaW1wbGVtZW50IGZpeGVkIGNhcHMgd2l0aCBhbiBvYmplY3QgZmxhZwotCSAgSW1wbGVtZW50IGZpeGVkIGNhcHMgd2l0aCBhbiBvYmplY3QgZmxhZyBpbnN0ZWFkIG9mIGEgY3VzdG9tIGdldGNhcHMgZnVuY3Rpb24uCi0KLTIwMTEtMDUtMDYgMTc6MzA6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZG9uJ3QgdXNlIGJ1ZmZlciBjYXBzIGZvciBuZWdvdGlhdGlvbgotCSAgRG9uJ3QgdXNlIHRoZSBidWZmZXIgY2FwcyBmb3IgbmVnb3RpYXRpb24gYW55bW9yZSBidXQgdXNlIHRoZSBDQVBTIGV2ZW50cy4KLQkgIE1ha2UgdGhlIF9zZXRfY2FwcyBtZXRob2QgcHJvZHVjZSB0aGUgQ0FQUyBldmVudCwgYWRkIHNvbWUgYmFja3dhcmQKLQkgIGNvbXBhdGliaWxpdHkgY29kZSB0byB0cmlnZ2VyIHRoZSBzZXRjYXBzIGZ1bmN0aW9ucyBvbiBzcmMgYW5kIHNpbmtwYWRzLgotCSAgUmVtb3ZlIGFsbCBuZWdvdGlhdGlvbiBjb2RlIGZyb20gdGhlIGNoYWluIGZ1bmN0aW9ucy4KLQkgIERvbid0IHVzZSB0aGUgR1NUX1BBRF9DQVBTIHZhcmlhYmxlIGFueW1vcmUgdG8gc3RvcmUgdGhlIGNhcHMgYnV0IHJldHJpZXZlIHRoZQotCSAgY2FwcyBmcm9tIHRoZSBzdGlja3kgZXZlbnQgYXJyYXkuCi0KLTIwMTEtMDUtMDYgMTY6MTQ6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JICBzZWxlY3RvcjogZG9uJ3QgdW5zZXQgY2FwcwotCi0yMDExLTA1LTA2IDE2OjE0OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IGRvbid0IHVuc2V0IGNhcHMKLQotMjAxMS0wNS0wNiAxNjoxMzo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGNoZWNrOiBsZXQgdGhlIG5vcm1hbCBjb2RlIHVuc2V0IGNhcHMKLQotMjAxMS0wNS0wNiAxNjoxMTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0c2VsZWN0b3I6IGhhbmRsZSBOVUxMIHBhZHMgaW4gc29tZSBjYXNlcwotCi0yMDExLTA1LTA2IDE2OjExOjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IGxldCB0aGUgcGFkIGNsZWFuIHVwIGluIGFjdGl2YXRlCi0KLTIwMTEtMDUtMDYgMTU6NTU6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBkb24ndCBtZXNzIHdpdGggcGFkIGNhcHMgaW4gYWN0aXZhdGUKLQkgIFdoZW4gZGVhY3RpdmF0aW5nIGEgcGFkLCBsZXQgdGhlIHBhZCBkZWNpZGUgd2hhdCBmaWVsZHMgdG8gY2xlYXIuCi0KLTIwMTEtMDUtMDYgMTU6NTE6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IG9ubHkgYWxsb3cgZml4ZWQgY2FwcyBpbiBjYXBzIGV2ZW50Ci0KLTIwMTEtMDUtMDYgMTM6MDE6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBJbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZSgpCi0KLTIwMTEtMDUtMDYgMTI6MjM6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBwb3J0aW5nOiB1cGRhdGUgcG9ydGluZyBkb2MKLQotMjAxMS0wNS0wNiAxMjoxOToxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGVsZW1lbnQ6IHJlbmFtZSBnc3RfZWxlbWVudF9sb3N0X3N0YXRlX2Z1bGwoKQotCSAgUmVuYW1lIGdzdF9lbGVtZW50X2xvc3Rfc3RhdGVfZnVsbCgpIHRvIGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUoKSBhbmQKLQkgIHJlbW92ZSB0aGUgb2xkIG1ldGhvZCBuYW1lLgotCi0yMDExLTA1LTA2IDEyOjA5OjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGNsZWFuIHVwIHRoZSAuaCBmaWxlIGEgYml0Ci0KLTIwMTEtMDUtMDYgMTE6MTQ6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JKiBnc3QvZ3N0Y29udGV4dC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBwYWQ6IGltcGxlbWVudCBtb3JlIHN0aWNreSBldmVudHMKLQkgIFJlbW92ZSB0aGUgY29udGV4dCBhZ2FpbiwgYWRkaW5nIGFuIGV4dHJhIGxheWVyIG9mIHJlZmNvdW50aW5nIGFuZCBvYmplY3QKLQkgIGNyZWF0aW9uIHRvIG1hbmFnZSBhbiBhcnJheSBpcyB0b28gY29tcGxpY2F0ZWQgYW5kIGluZWZmaWNpZW50LiBVc2UgYSBzaW1wbGUKLQkgIGFycmF5IGFnYWluLgotCSAgQWxzbyBpbXBsZW1lbnQgZXZlbnQgdXBkYXRlcyB3aGVuIGNhbGxpbmcgZ3N0X3BhZF9jaGFpbigpIGFuZAotCSAgZ3N0X2V2ZW50X3NlbmRfZXZlbnQoKSBkaXJlY3RseS4KLQotMjAxMS0wNS0wNiAxMTozNTozNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgaW5mbzogYXZvaWQgcmVkZWZpbml0aW9uIG9mIHN5bWJvbHMgd2hlbiBkZWJ1Z2dpbmcgaXMgb2ZmCi0JICBUaGUgcmVmYWN0b3Jpbmcgb2YgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24oKSBub3cgY2F1c2VzIGJ1aWxkIGZhaWx1cmUgd2hlbgotCSAgZGVidWctbG9nZ2luZyBpcyB0dXJuZWQgb2ZmLiBKdXN0IG1vdmUgaXQgdG8gdGhlIGNvbmRpdGlvbmFsIHBhcnQgb2YgdGhlIGhlYWRlci4KLQotMjAxMS0wNS0wNiAxMTowMDoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBldmVudDogcmVvcmRlciBldmVudHMKLQkgIFJlb3JkZXIgdGhlIHN0aWNreSBldmVudHMgc28gdGhhdCB0aGV5IGFyZSBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgcHVzaGVkLgotCi0yMDExLTA1LTA1IDE5OjI0OjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHNpbXBsaWZ5IHNvbWUgbW9yZQotCSAgSWYgd2UgZ2V0IGEgY29udGV4dCBpbiB0aGUgY2hhaW4gZnVuY3Rpb25zIHdlIGFsd2F5cyBuZWVkIHRvIGRvIGEgZnVsbCB1cGRhdGUgb2YKLQkgIHRoZSBjb250ZXh0IG9uIHRoZSBwZWVyIHBhZC4KLQotMjAxMS0wNS0wNSAxODo1Njo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBpbXByb3ZlIGNvbnRleHQgcGFzc2luZyBzb21lIG1vcmUKLQkgIFBhc3MgdGhlIGNvbnRleHQgZG93bnN0cmVhbSB3aGVuIGl0IGdvdCB1cGRhdGVkLgotCSAgSGF2ZSB0d28gd2F5cyBvZiBpbmZvcm1pbmcgZG93bnN0cmVhbSBvZiBldmVudHMsIGRvIGEgZnVsbCBjb250ZXh0IHVwZGF0ZSB3aGVuCi0JICB0aGUgQ09OVEVYVF9QRU5ESU5HIGZsYWcgaXMgc2V0IGFuZCBzaW1wbHkgZm9yd2FyZCB0aGUgZXZlbnQgb3RoZXJ3aXNlLgotCSAgU2V0IHRoZSBDT05URU5UX1BFTkRJTkcgZmxhZyB3aGVuIGxpbmtpbmcgcGFkcy4KLQkgIFdlIGRvbid0IG5lZWQgdG8gb2xkIGNvbnRleHQgYW55bW9yZSB3aGVuIHVwZGF0aW5nIHRoZSBjb250ZXh0IG9mIGEgcGFkLgotCi0yMDExLTA1LTA1IDE4OjIxOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBEb24ndCBnZXQgdGhlIHBhcmVudCB0d2ljZSBpbiB0aGUgc2V0Y2FwcyBmdW5jdGlvbgotCi0yMDExLTA1LTA1IDE2OjU5OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBGaXggcmVmY291bnQgbGVhayBvZiB0aGUgcGFyZW50IGluIHRoZSBkZWZhdWx0IGV2ZW50IGRpc3BhdGNoIGZ1bmN0aW9uCi0KLTIwMTEtMDUtMDUgMTY6MzI6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogaW1wcm92ZSBwYXNzaW5nIGFyb3VuZCB0aGUgY29udGV4dAotCSAgSW1wcm92ZSBwYXNzaW5nIGFyb3VuZCB0aGUgY29udGV4dCwgb25seSBzZW5kIHRoZSBjb250ZXh0IHRvIHRoZSBwZWVyIGVsZW1lbnQKLQkgIHdoZW4gdGhlIENPTlRFWFRfUEVORElORyBmbGFnIGlzIHNldC4KLQotMjAxMS0wNS0wNSAxNjowNToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IFVwZGF0ZSBleHBvcnRzCi0KLTIwMTEtMDMtMTcgMTE6NTI6NDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgotCSAgdGVzdHM6IFVwZGF0ZSBmb3IgbmV3IEdzdEl0ZXJhdG9yIEFQSQotCi0yMDExLTAzLTE3IDExOjMyOjI0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZG9jcy9kZWY6IEFkZCBuZXcgc3ltYm9scywgcmVtb3ZlIG9sZCBzeW1ib2xzCi0KLTIwMTEtMDMtMTcgMTE6MzI6MTEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICBlbGVtZW50czogVXBkYXRlIGV2ZXJ5dGhpbmcgZm9yIHRoZSBuZXcgR3N0SXRlcmF0b3IgQVBJCi0KLTIwMTEtMDMtMTcgMTE6MzE6NTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGZvcm1hdC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3Q6IFVwZGF0ZSBldmVyeXRoaW5nIGZvciB0aGUgbmV3IEdzdEl0ZXJhdG9yIEFQSQotCi0yMDExLTAzLTE2IDEwOjUwOjM5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuaDoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIGl0ZXJhdG9yOiBSZWZhY3RvciBHc3RJdGVyYXRvciB0byBiZSBtb3JlIGJpbmRpbmcgZnJpZW5kbHkgYW5kIGhhdmUgc2FuZXIgcmVmY291bnRpbmcKLQkgIEZpeGVzIGJ1ZyAjNjM4OTg3LgotCi0yMDExLTAxLTA4IDEyOjI3OjU1IC0wMjAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuaDoKLQkgIGl0ZXJhdG9yOiByZWdpc3RlciBhcyBhIGJveGVkIHR5cGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg5ODcKLQotMjAxMS0wMS0wOCAxMjoxNDo0MCAtMDIwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgaXRlcmF0b3I6IHVzZSBHU2xpY2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg5ODcKLQotMjAxMS0wMS0wOCAxMjoxMjo0MSAtMDIwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgaXRlcmF0b3I6IGZyZWUgc3RydWN0IGluIGdzdF9pdGVyYXRvcl9mcmVlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4OTg3Ci0KLTIwMTEtMDEtMDggMTI6MDc6NTUgLTAyMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkqIGdzdC9nc3RpdGVyYXRvci5oOgotCSAgaXRlcmF0b3I6IHN0b3JlIHNpemUgaW4gdGhlIHN0cnVjdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODk4NwotCi0yMDExLTA1LTA1IDExOjI4OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBNZXJnZSBzdHJ1Y3R1cmVzIHdoZW4gaW50ZXJzZWN0aW5nIGluc3RlYWQgb2YgYXBwZW5kaW5nIHRoZW0KLQkgIFRoaXMgcHJldmVudHMgYWRkaW5nIGR1cGxpY2F0ZXMgb3ZlciBhbmQgb3ZlciBhZ2FpbiB0byB0aGUgcmVzdWx0aW5nCi0JICBjYXBzIGlmIHRoZXkgYWxyZWFkeSBkZXNjcmliZSB0aGUgbmV3IGludGVyc2VjdGlvbiByZXN1bHQuCi0JICBXaGlsZSB0aGlzIGNoYW5nZXMgaW50ZXJzZWN0aW9uIGZyb20gTyhuKm0pIHRvIE8obl4yKm0pLCBpdCByZXN1bHRzIGluCi0JICBzbWFsbGVyIGNhcHMsIHdoaWNoIGluIHRoZSBlbmQgd2lsbCBkZWNyZWFzZSBmdXJ0aGVyIHByb2Nlc3NpbmcgdGltZXMuCi0JICBGb3IgZXhhbXBsZSBpbiBhbiBhdWRpb2NvbnZlcnQgISBhdWRpb2NvbnZlcnQgISBhdWRpb2NvbnZlcnQgcGlwZWxpbmUsCi0JICB3aGVuIGZvcndhcmRpbmcgdGhlIGRvd25zdHJlYW0gY2FwcyBwcmVmZXJlbmNlIGluIGJhc2V0cmFuc2Zvcm0KLQkgIChzZWUgZTI2ZGE3MmRlMjVhOTFjM2VhYWQ5ZjdjOGIyZjUzYmE4ODhhMDM5NCkgdGhpcyByZXN1bHRzIGluCi0JICAxNiBpbnN0ZWFkIG9mIDE5MSBjYXBzIHN0cnVjdHVyZXMuCi0KLTIwMTEtMDUtMDQgMTE6Mjk6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEluIGdldGNhcHMoKSBwcmVmZXIgdGhlIGNhcHMgb3JkZXIgYW5kIGNhcHMgb2YgZG93bnN0cmVhbSBpZiBwb3NzaWJsZQotCi0yMDExLTA1LTAzIDE3OjI2OjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBQcmVmZXIgY2FwcyBvcmRlciBnaXZlbiBieSB0aGUgc3ViY2xhc3Mgb2YgdGhlIHRlbXBsYXRlIGNhcHMgb3JkZXIKLQotMjAxMS0wNS0wMyAxNDoxMzo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogVXNlIHRoZSByZWNvbmZpZ3VyZSBmbGFnIG9uIHRoZSBwYWQgaW5zdGVhZCBvZiB0aGUgZXZlbnQKLQotMjAxMS0wNS0wMyAxNDoxMTozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogVXNlIG5ldyByZWNvbmZpZ3VyZSBmbGFnIG9uIHRoZSBwYWRzIGluc3RlYWQgb2YgdGhlIHJlY29uZmlndXJlIGV2ZW50Ci0KLTIwMTEtMDUtMDMgMTM6NDI6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IEtlZXAgdHJhY2sgb2YgcmVjb25maWd1cmUgZXZlbnRzIGFuZCB0aGUgcGFkLW5lZWRzLXJlY29uZmlndXJpbmcgc3RhdHVzCi0KLTIwMTEtMDUtMDMgMTM6MDU6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGV2ZW50OiBSZW5hbWUgcmVuZWdvdGlhdGUgZXZlbnQgdG8gcmVjb25maWd1cmUKLQkgIEluIDAuMTEgdGhpcyBldmVudCB3aWxsIGFsc28gZG8gcmVjb25maWd1cmF0aW9uIG9mIGJ1ZmZlciBwb29scwotCSAgYW5kIHNpbWlsYXIgdGhpbmdzLCBub3QganVzdCByZW5lZ290aWF0aW9uLgotCi0yMDEwLTAzLTE3IDIxOjI0OjU1ICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogU2VuZCByZW5lZ290aWF0ZSBldmVudCBvbiBsaW5rCi0KLTIwMTAtMDMtMTcgMjE6MTc6MTAgKzAwMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBEcm9wIHJlbmVnb3RpYXRlIGV2ZW50IGlmIHRoZXJlIGlzIG5vIGdldGNhcHMgZnVuY3Rpb24gb24gYSBzaW5rIHBhZAotCSAgSWYgdGhlcmUgaXMgbm8gY3VzdG9tIGdldGNhcHMgZnVuY3Rpb24gb24gYSBzaW5rIHBhZCwgdGhlbiBjaGFuZ2VzIGluCi0JICBkb3duc3RyZWFtIGNhcHMgd2lsbCBuZXZlciBiZSBwcm9wYWdhdGVkLCBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiB0cnlpbmcgdG8KLQkgIHJlbmVnb3RpYXRlIHRoZSBjYXBhYmlsaXRpZXMuCi0KLTIwMTEtMDQtMjYgMTY6Mzk6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IE9ubHkgcmVuZWdvdGlhdGUgb25jZSBhZnRlciByZWNlaXZpbmcgYSByZW5lZ290aWF0ZSBldmVudAotCSAgQWxzbyBtYWtlIHRoaXMgdGhyZWFkc2FmZS4KLQotMjAxMS0wMS0xNyAxNDoxMzo0NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogSGFuZGxlIHRoZSBuZXcgcmVuZWdvdGlhdGUgZXZlbnQKLQkgIE1ha2VzIGJhc2VzcmMgaGFuZGxlIHRoZSBuZXcgcmVuZWdvdGlhdGUgZXZlbnQgYnkgdXNpbmcgYQotCSAgcmVuZWdvdGlhdGUgZmxhZy4KLQotMjAxMS0wNC0yNiAxNjo0ODowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogQWxzbyBjYWxsIGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZSgpIG9uIHJlbmVnb3RpYXRlIGV2ZW50cwotCi0yMDExLTAxLTE3IDE0OjEzOjQ2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBIYW5kbGUgdGhlIG5ldyByZW5lZ290aWF0ZSBldmVudAotCSAgTGV0IGJhc2V0cmFuc2Zvcm0gcHVzaCBhIHJlbmVnb3RpYXRlIGV2ZW50IHVwc3RyZWFtCi0JICB3aGVuIGl0IGdldHMgYSBuZXcgc3VnZ2VzdGlvbgotCi0yMDExLTAxLTE3IDExOjUxOjQ5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGV2ZW50OiBBZGRpbmcgbmV3IHJlbmVnb3RpYXRlIGV2ZW50Ci0KLTIwMTEtMDUtMDUgMTM6MTA6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogcGFzcyB0aGUgY29udGV4dCBhcm91bmQKLQkgIFBhc3MgdGhlIGNvbnRleHQgZnJvbSBzcmNwYWQgdG8gc2lua3BhZCBiZWZvcmUgZGF0YWZsb3cgd2hlbiBzb21ldGhpbmcKLQkgIGNoYW5nZWQuCi0KLTIwMTEtMDUtMDUgMTE6MTc6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogdXBkYXRlIHRoZSBjb250ZXh0IGxhenlseQotCi0yMDExLTA1LTA1IDExOjE2OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IGluaXQgdGhlIEdUeXBlIGVhcmx5Ci0KLTIwMTEtMDUtMDUgMTE6MTY6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogdXBkYXRlIGRlZnMKLQotMjAxMS0wNS0wNSAxMDo0MDoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNvbnRleHQuYzoKLQkqIGdzdC9nc3Rjb250ZXh0Lmg6Ci0JICBjb250ZXh0OiBhZGQgZm9yZWFjaCBmdW5jdGlvbgotCSAgQWRkIGEgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGFsbCBzdG9yZWQgZXZlbnRzLgotCi0yMDExLTA1LTA1IDEwOjM3OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0Y29udGV4dC5jOgotCSogZ3N0L2dzdGNvbnRleHQuaDoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBSZXZlcnQgImNvbnRleHQ6IHVzZSBjb250ZXh0IG9uIGJ1ZmZlcnMgaW5zdGVhZCBvZiBjYXBzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5ZWYxMzQ2YjFmYTBiZDJiYjQyY2Q5OTFhNTJmZjMwOGE3MjhiZGI2LgotCSAgV2F5IHRvIG11Y2ggZm9yIG9uZSBjb21taXQgYW5kIEknbSBub3Qgc3VyZSB3ZSB3YW50IHRvIGdldCByaWQgb2YgdGhlIHBhZCBjYXBzCi0JICBqdXN0IGxpa2UgdGhhdC4gSXQncyBuaWNlIHRvIGhhdmUgdGhlIGJ1ZmZlciBhbmQgaXRzIHR5cGUgaW4gb253IG5pY2UgYnVuZGxlCi0JICB3aXRob3V0IGhhdmluZyB0byBkcmFnIHRoZSBjb21wbGV0ZSBjb250ZXh0IHdpdGggaXQuCi0KLTIwMTEtMDQtMjAgMjI6NTI6MzYgKzAyMDAgIE1pZ3VlbCBBbmdlbCBDYWJyZXJhIE1veWEgPG1hZG1hYzI1MDFAZ21haWwuY29tPgotCi0JKiBnc3QvcGFyc2UvdHlwZXMuaDoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIHBhcnNlOiBkb24ndCB1bmVzY2FwZSBpbnNpZGUgcXVvdGVzCi0JICBFc2NhcGVkIGNoYXJhY3RlcnMgaW5zaWRlIHF1b3RlZCBzdHJpbmdzIGFyZSBzdXBwb3NlZCB0byBiZSB1bmVzY2FwZWQgYnkKLQkgIGRlc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMsIG5vdCBieSBwYXJzaW5nIGZ1bmN0aW9ucy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDgwMjUKLQotMjAxMS0wNC0xOCAxNDoyNjozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogT25seSBwb3N0IEVPUyBtZXNzYWdlcyBhZnRlciByZWFjaGluZyB0aGUgUExBWUlORyBzdGF0ZQotCSAgRml4ZXMgYnVnICM2NDc3NTYuCi0KLTIwMTEtMDQtMTggMTA6MDQ6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IFJlbW92ZSB1bm5lY2Vzc2FyeSBGSVhNRQotCSAgUmVzZXR0aW5nIHRoZSByZXN1bHQgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHJlc3luY2luZyBiZWNhdXNlCi0JICBwYWRzIHRoYXQgcHJldmlvdXNseSBnb3QgdGhlIGV2ZW50IHdpbGwgYmUgc2tpcHBlZCBhbmQgd2UKLQkgIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHB1c2hlcy4KLQotMjAxMS0wNC0xOCAwOTo1Mzo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBJZiBhY3RpdmF0aW5nIG9uZSBwYWQgZmFpbGVkIGVycm9yIG91dCBlYXJseSBpbnN0ZWFkIG9mIHRyeWluZyB0byBhY3RpdmF0ZSB0aGUgbmV4dCBwYWRzCi0JICBJZiBvbmUgcGFkIGZhaWxzIHRvIGFjdGl2YXRlIHRoZSBjb21wbGV0ZSBhY3RpdmF0aW9uIHByb2Nlc3Mgd2lsbCBmYWlsCi0JICBhbnl3YXkgYW5kIHRyeWluZyB0byBhY3RpdmF0ZSB0aGUgb3RoZXIgcGFkcyBvbmx5IHdhc3RlcyB0aW1lLgotCi0yMDExLTA0LTE4IDA5OjQ5OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBJZiBhY3RpdmF0aW5nIG9uZSBwYWQgZmFpbGVkIGVycm9yIG91dCBlYXJseSBpbnN0ZWFkIG9mIHRyeWluZyB0byBhY3RpdmF0ZSB0aGUgbmV4dCBwYWRzCi0JICBJZiBvbmUgcGFkIGZhaWxzIHRvIGFjdGl2YXRlIHRoZSBjb21wbGV0ZSBhY3RpdmF0aW9uIHByb2Nlc3Mgd2lsbCBmYWlsCi0JICBhbnl3YXkgYW5kIHRyeWluZyB0byBhY3RpdmF0ZSB0aGUgb3RoZXIgcGFkcyBvbmx5IHdhc3RlcyB0aW1lLgotCi0yMDExLTA1LTA1IDEyOjI4OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBSZW1vdmUgbm93YWRheXMgdW51c2VkIGFuZCB1bmluaXRpYWxpemVkIHNldGNhcHMgdmFyaWFibGUKLQotMjAxMS0wNS0wNSAxMjoyNzo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQKLQkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jCi0JICBnc3QvZ3N0bWluaW9iamVjdC5jCi0KLTIwMTEtMDUtMDQgMTg6NTk6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JKiBnc3QvZ3N0Y29udGV4dC5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGNvbnRleHQ6IHVzZSBjb250ZXh0IG9uIGJ1ZmZlcnMgaW5zdGVhZCBvZiBjYXBzCi0JICBQdXQgdGhlIHNyY3BhZCBjb250ZXh0IG9uIGJ1ZmZlcnMgaW5zdGVhZCBvZiBjYXBzLiBUaGlzIGFsbG93cyB1cyB0byBhc3NvY2lhdGUKLQkgIGFsbCB0aGUgcmVsZXZhbnQgaW5mbyBjb250YWluZWQgaW4gZXZlbnRzIHdpdGggYSBidWZmZXIuCi0KLTIwMTEtMDUtMDQgMTU6Mjk6NDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgdGVzdHM6IGZpeCBjb21waWxlciB3YXJuaW5nIGluIG5ldyBtaW5pb2JqZWN0IHRlc3QKLQkgIGdzdC9nc3RtaW5pb2JqZWN0LmM6IEluIGZ1bmN0aW9uIOKAmHRlc3RfZHVwX251bGxfbWluaV9vYmplY3TigJk6Ci0JICBnc3QvZ3N0bWluaW9iamVjdC5jOjQ1OTo3OiB3YXJuaW5nOiBhc3NpZ25tZW50IGZyb20gaW5jb21wYXRpYmxlIHBvaW50ZXIgdHlwZQotCi0yMDExLTA1LTA0IDE1OjUzOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y29udGV4dC5oOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IHVzZSB0aGUgY29udGV4dCB0byBzdG9yZSBzdGlja3kgZXZlbnRzCi0JICBTdG9yZSB0aGUgc3RpY2t5IGV2ZW50cyBpbiB0aGUgY29udGV4dCBvZiBhIHNvdXJjZSBwYWQuCi0KLTIwMTEtMDUtMDQgMTU6MjA6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3Rjb250ZXh0LmM6Ci0JKiBnc3QvZ3N0Y29udGV4dC5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBjb250ZXh0OiBhZGQgaGVscGVyIG9iamVjdCB0byBtYW5hZ2UgZXZlbnRzCi0JICBBZGQgYSBoZWxwZXIgb2JqZWN0IHRvIG1hbmFnZSB0aGUgZXZlbnRzIHRoYXQgZGVmaW5lIHRoZSBjb250ZXh0IG9mIGEgYnVmZmVyIGFuZAotCSAgYSBzdHJlYW0uCi0KLTIwMTEtMDUtMDQgMTE6MDc6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogdXBkYXRlIGRlZnMKLQotMjAxMS0wNS0wNCAxMTowMzowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JICBldmVudDogYWRkIG5ldyBDQVBTIGV2ZW50Ci0JICBBZGQgYSBuZXcgQ0FQUyBldmVudCB0aGF0IHdpbGwgYmUgdXNlZCB0byBuZWdvdGlhdGUgZG93bnN0cmVhbSBlbGVtZW50cy4gSXQnbGwKLQkgIGFsc28gc3RpY2sgb24gcGFkIHNvIHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgR3N0Q2FwcyBmaWVsZCBvbiBwYWRzIGFuZCB0aGUKLQkgIEdzdENhcHMgZmllbGQgb24gYnVmZmVycy4KLQotMjAxMS0wNS0wMyAxODo1ODoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IG1vcmUgc3RpY2t5IGV2ZW50cyB3b3JrCi0JICBDb3B5IHRoZSBzdGlja3kgZXZlbnRzIGZyb20gdGhlIHNyY3BhZCB0byB0aGUgc2lua3BhZCB3aGVuIGxpbmtpbmcgcGFkcy4gU2V0IHRoZQotCSAgU1RJQ0tZX1BFTkRJTkcgZmxhZyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3RpY2t5IGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBiZWZvcmUKLQkgIHB1c2hpbmcgdGhlIG5leHQgYnVmZmVyIHRvIHRoZSBlbGVtZW50LgotCi0yMDExLTA1LTAzIDE2OjExOjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogaW1wcm92ZSBwb3J0aW5nIGRvYwotCi0yMDExLTA1LTAyIDE4OjQ1OjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmcgZG9jdW1lbnQKLQotMjAxMS0wNS0wMiAxMTozMDowNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgbWluaW9iamVjdDogRml4IGR1cF9taW5pX29iamVjdCBmdW5jdGlvbiB0byBoYW5kbGUgTlVMTCBndmFsdWVzCi0JICBnX3ZhbHVlX2R1cF9vYmplY3QgaGFuZGxlcyBndmFsdWVzIHRoYXQgY29udGFpbiBOVUxMIHBvaW50ZXJzLAotCSAgZ3N0X3ZhbHVlX2R1cF9taW5pX29iamVjdCBzaG91bGQgZG8gdGhlIHNhbWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5MTk1Ci0KLTIwMTEtMDUtMDMgMTM6NTU6NDMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGRvY3M6IGl0IGl0cyAlVFJVRSAoY29uc3RhbnQpCi0JICBBcyBzcG90dGVkIGJ5IFRpbS4KLQotMjAxMS0wNS0wMiAxNjoyMjo1NiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgIGRvY3M6IGZpeCBjb3B5J24ncGFzdGUgZG9jIGhlYWRlciBtaXN0YWtlCi0KLTIwMTEtMDUtMDIgMTY6MjA6MjQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JICBkb2NzOiBhZGQgdHdvIHRyaXZpYWwgZG9jIGJsb2JzCi0KLTIwMTEtMDUtMDIgMTY6MDM6MjkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGRvY3M6IGFkZCBtaXNzaW5nIHBhcmFtZXRlciBkb2NzCi0KLTIwMTEtMDUtMDIgMTY6MDA6NTIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgotCSAgZG9jczogYWRkIGRvY3MgZm9yIEdzdERQUGFja2V0aXplcgotCi0yMDExLTA1LTAyIDE1OjUyOjU4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjYXBzLmg6Ci0JICBkb2NzOiBpbXByb3ZlIHRoZSBzeW50YXggZm9yIHRoZSBjYXBzaW50ZXJzZWN0bW9kZSBkb2NzCi0KLTIwMTEtMDUtMDIgMTU6NDg6MDEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGRvY3M6IGZpeHVwIGJyb2tlbiB4cmVmCi0KLTIwMTEtMDUtMDIgMTU6NDY6NTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgbmV3IGFwaSB0byAtc2VjdGlvbi50eHQKLQotMjAxMS0wNS0wMiAxNTozNTo1MiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YXRvbWljcXVldWUuaDoKLQkgIGRvY3M6IGZpeCBndGstZG9jIHN5bnRheAotCi0yMDExLTA1LTAyIDE1OjMwOjEzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JICBkb2NzOiBkb24ndCBkdXBsaWNhdGUgaW5mbyB0aGF0IHdlIHRha2UgZnJvbSBlbGVtZW50LWRldGFpbHMKLQotMjAxMS0wNC0yOCAxNTozNzowMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogcmVtb3ZlIG5vbiBleGlzdGluZyBzeW1ib2wKLQotMjAxMS0wNC0yOCAxNTowNToyOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6Ci0JICBkb2NzOiB3ZSBkb24ndCBuZWVkIHRvIGRvY3VtZW50IHByaXZhdGUgbWVtYmVycyBpbiBvcGFxdWUgc3RydWN0cwotCi0yMDExLTA0LTI5IDEzOjQzOjA3ICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdHByZXNldC5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cHJlc2V0LmM6Ci0JICBjb3JlOiBzdG9yZSBwcmVzZXRzLCByZWdpc3RyeSBhbmQgcGx1Z2lucyBpbiBYREcgZGlyZWN0b3JpZXMuCi0JICBQcmVzZXRzIGFuZCBwbHVnaW5zIG1vdmVkIHRvICRYREdfREFUQV9IT01FL2dzdHJlYW1lci0wLjExLwotCSAgcm9vdCBkaXJlY3RvcnkuIFJlZ2lzdHJ5IG1vdmVkIHRvICRYREdfQ0FDSEVfSE9NRS9nc3RyZWFtZXItMC4xMS8uCi0JICBGaXhlcyBidWcgIzUxODU5Ny4KLQotMjAxMS0wNS0wMyAwOTo0MTo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCSAgZ3N0L2dzdGJ1cy5jCi0KLTIwMTEtMDUtMDIgMTg6MzQ6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgZXZlbnQ6IGFkZCBzdGlja3kgZmxhZ3MgdG8gZXZlbnRzCi0JICBBZGQgdGhlIHN0aWNreSBmbGFnIHRvIGV2ZW50cyBhbmQgYSBzdGlja3kgaW5kZXguCi0JICBLZWVwIHN0aWNreSBldmVudHMgaW4gYW4gYXJyYXkgb24gZWFjaCBwYWQuCi0JICBSZW1vdmUgR1NUX0VWRU5UX1NSQygpLCBpdCBpcyBjYXVzaW5nIHJlZmN5Y2xlcyB3aXRoIHN0aWNreSBldmVudHMsIHdhcyBub3QgdXNlZAotCSAgYW5kIGlzIG5vdCB2ZXJ5IGludGVyZXN0aW5nIGFueXdheS4KLQotMjAxMS0wNS0wMiAxMTowOTo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIHF1ZXJ5OiBpbXByb3ZlIGFsbG9jYXRpb24gcGFyYW1ldGVycyBxdWVyeQotCSAgVXNlIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhvc2UgdXNlZCBmb3IgdGhlIGJ1ZmZlcnBvb2wuIE1ha2Ugc3VyZSB3ZSBjYW4gcGFzcwotCSAgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFtb3VudCBvZiBidWZmZXJzIG5lZWRlZC4KLQotMjAxMS0wNC0zMCAxNjo1NTozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3RhdGljZWxlbWVudHMueG1sOgotCSogcG8vZGUucG86Ci0JKiBwby9mci5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICAwLjEwLjMyLjQgcHJlLXJlbGVhc2UKLQotMjAxMS0wNC0yOSAyMzo0NDo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JICBwbHVnaW5mZWF0dXJlOiBpbmNsdWRlIHBsdWdpbi5oIGluIGhlYWRlciB3aGVyZSB3ZSB1c2UgYSBHc3RQbHVnaW4gcG9pbnRlcgotCSAgU2hvdWxkIGZpeCBpc3N1ZSB3aXRoIGdzdHJlYW1lcm1tIGJ1aWxkIHdoZXJlIDxnc3QvZ3N0aW5kZXguaD4gaXMgaW5jbHVkZWQKLQkgIGRpcmVjdGx5IGluc3RlYWQgb2YgZ3N0L2dzdC5oLgotCi0yMDExLTA0LTI5IDEzOjQyOjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIHRyYW5zZm9ybTogZG8gcGFkX2FsbG9jIGZhbGxiYWNrIGNvcnJlY3RseQotCi0yMDExLTA0LTI5IDEzOjI2OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgotCSogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOgotCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgUmVtb3ZlIHBhZF9hbGxvYywgdGhpcyBjYW4gbm93IGJlIGRvbmUgYmV0dGVyCi0JICBSZW1vdmUgcGFkX2FsbG9jIGFuZCBhbGwgcmVmZXJlbmNlcy4gVGhpcyBjYW4gbm93IGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSBhbmQKLQkgIG1vcmUgZmxleGlibGUgd2l0aCB0aGUgQUxMT0NBVElPTiBxdWVyeSBhbmQgdGhlIGJ1ZmZlcnBvb2wgb2JqZWN0cy4gVGhlcmUgaXMgbm8KLQkgIHJldmVyc2UgbmVnb3RpYXRpb24geWV0IGJ1dCB0aGF0IHdpbGwgYmUgZG9uZSB3aXRoIGFuIGV2ZW50IGxhdGVyLgotCi0yMDExLTA0LTI5IDEyOjExOjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBpbml0IHRoZSBBTExPQ0FUSU9OIHF1ZXJ5IGNvcnJlY3RseQotCSAgRG9uJ3QgYWRkIHRoZSAncG9vbCcgcHJvcGVydHkgaW5zdGVhZCBvZiBhZGRpbmcgaXQgd2l0aCBhIE5VTEwgYXJyYXkuCi0KLTIwMTEtMDQtMjkgMTA6NTA6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHF1ZXJ5OiBmaXggcGFyc2luZyBvZiB0aGUgQUxMT0NBVElPTiBxdWVyeQotCSAgQWRkIG1ldGhvZHMgZm9yIHBhcnNpbmcgdGhlIGNhcHMgYW5kIHRoZSBuZWVkX3Bvb2wgYm9vbGVhbi4KLQotMjAxMS0wNC0yOCAxNjoyMDoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcXVlcnk6IGZpeCB0eXBvIGluIG1ldGhvZCBuYW1lIGFuZCBpbXByb3ZlIGRvY3MKLQkgIEZpeGVkIHR5cG8gaW4gbWV0aG9kIG5hbWUgYW5kIGFkZC9pbXByb3ZlIHRoZSBkb2NzLgotCi0yMDExLTA0LTI4IDE1OjMxOjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1hbGxvY2F0aW9uLnR4dDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJwb29sOiBhZGQgcXVlcnkgdG8gcmVxdWVzdCBwb29sIGFuZCBjb25maWd1cmF0aW9uCi0JICBBZGQgYSBxdWVyeSB0byByZXF1ZXN0IGFsbG9jYXRpb24gcGFyYW1ldGVycyBhbmQgb3B0aW9uYWxseSBhIGJ1ZmZlcnBvb2wgYXMKLQkgIHdlbGwuIFRoaXMgc2hvdWxkIGFsbG93IGVsZW1lbnRzIHRvIGRpc2NvdmVyIGRvd25zdHJlYW0gY2FwYWJpbGl0aWVzIGFuZCBhbHNvCi0JICB1c2UgdGhlIGRvd25zdHJlYW0gYWxsb2NhdG9ycy4KLQotMjAxMS0wNC0yNyAxODoxMDo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBmaXggdGltZW91dCBoYW5kbGluZwotCi0yMDExLTA0LTI3IDE3OjU2OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1idWZmZXJwb29sLnR4dDoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBmaXggc29tZSBkb2NzCi0KLTIwMTEtMDQtMjcgMTc6NTU6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSAgZXZlbnQ6IGltcHJvdmUgYXJndW1lbnQgbmFtZXMgb2Ygc2VnbWVudHMKLQotMjAxMS0wNC0yNyAxMTo0OToxMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBwby9iZy5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICAwLjEwLjMyLjMgcHJlLXJlbGVhc2UKLQotMjAxMS0wNC0yNiAxNTo0Mjo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGJ1cy5oOgotCSAgUmV2ZXJ0IGxvY2tmcmVlIEdzdEJ1cyBmb3IgdGhlIHJlbGVhc2UKLQkgIERyb3AgaW4gb2xkIEdzdEJ1cyBjb2RlIGZvciB0aGUgcmVsZWFzZSB0byBwbGF5IGl0IHNhZmUsIHNpbmNlCi0JICByZWdyZXNzaW9ucyB0aGF0IGFyZSBhcHBhcmVudGx5IGhhcmQgdG8gdHJhY2sgZG93biBhbmQgcmVwcm9kdWNlCi0JICBoYXZlIGJlZW4gcmVwb3J0ZWQgKG9uIHdpbmRvd3MvT1NYIG1vc3RseSkgYWdhaW5zdCB0aGUgbG9ja2ZyZWUKLQkgIHZlcnNpb24sIGFuZCBtb3JlIHRpbWUgaXMgbmVlZGVkIHRvIGZpeCB0aGVtLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAwMzM5MWE4OTcwMDFkMzVkMWQyOTBmMjdkZDEyZTk4YThiNzI5ZmI0LgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA0M2NkYmMxN2U2Zjk0NGNkZjAyYWVlZDc4ZDFkNWY2YmRlNTE5MGM5LgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA4MGViMTYwZTBmNjIzNTAyNzFmMDYxZGFhNWYyODlkOWQ0Mjc3Y2Y0LgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBjNDFiMGFkZTI4NzkwZmZkYjBlNDg0YjQxY2Q3OTI5YzRlMTQ1ZGVjLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA4NzRkNjBlNTg5OWRkNWI4OTg1NDY3OWQxYTRhZDAxNmE1OGJhNGUwLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA3OTM3MGQ0YjE3ODFhZjljOWE2NWYyZDFlMzQ5ODEyNGQ4YzRjNDEzLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyY2IzZTUyMzUxOTZlYjcxZmIyNWUwYTRhNGI4NzQ5ZDZkMGE4NDUzLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBiZDFjNDAwMTE0MzRjMWVmYWE2OTZkYzk4ZWY4NTVlZjljY2U5YjI4LgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA0YmY4ZjE1MjRmNmUzMzc0YjNmM2JjNTczMjIzMzc3MjNkMDZiOTI4LgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAxNGQ3ZGIxYjUyN2IwNWYwMjk4MTkwNTdhZWY1YzEyM2FjN2UwMTNkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NzQ5MwotCi0yMDExLTA0LTI1IDExOjEwOjQ3ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3Rmb3JtYXQuYzoKLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBTbWFsbCBjb3NtZXRpYyBjbGVhbnVwcwotCSAgTWFrZSBzdXJlIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gZ19yZXR1cm5fKiBhcmUgb2YgdGhlIHJpZ2h0IHR5cGUuCi0KLTIwMTEtMDQtMjUgMTA6NTY6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBtaXhpbmcgb2YgcmV0dXJuIHZhbHVlcwotCi0yMDExLTA0LTI1IDEwOjMwOjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDQtMTUgMjI6MDA6MTEgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIG1pbm9yIGlubGluZSBkb2N1bWVudGF0aW9uIGZpeAotCi0yMDExLTA0LTI0IDE0OjAyOjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGMzY2FmZTEgdG8gNDZkZmNlYQotCi0yMDExLTA0LTI0IDExOjQ0OjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgdGVzdHM6IGNsZWFuIHVwIHByb3Blcmx5IGluIHRoZSBiaW4gdGVzdF9saW5rX3N0cnVjdHVyZV9jaGFuZ2UgdW5pdCB0ZXN0Ci0JICBEb24ndCBmb3JnZXQgdG8gc2V0IHRoZSBwaXBlbGluZSBiYWNrIHRvIE5VTEwgc3RhdGUsIHdoaWNoIG1ha2VzCi0JICB2YWxncmluZCBoYXBweSBhZ2Fpbi4KLQotMjAxMS0wNC0yNCAwOTo1ODo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IHdoZW4gcmVtb3ZpbmcgYSBjYWNoZWQtYnV0LW5vLWxvbmdlci1leGlzdGluZyBwbHVnaW4sIG9ubHkgcmVtb3ZlIGZlYXR1cmVzIHRoYXQgYmVsb25nIHRvIGl0Ci0JICBXaGVuIGEgcGx1Z2luIGZpbGUgbm8gbG9uZ2VyIGV4aXN0cywgZS5nLiBiZWNhdXNlIGl0J3MgYmVlbiByZW1vdmVkIG9yCi0JICByZW5hbWVkLCBkb24ndCByZW1vdmUgYWxsIGZlYXR1cmVzIGluIHRoZSByZWdpc3RyeSBiYXNlZCBvbiB0aGUgKm5hbWUqCi0JICBvZiB0aGUgcGx1Z2luIHRoZXkgYmVsb25nIHRvLCBidXQgb25seSByZW1vdmUgdGhvc2Ugd2hvIGFjdHVhbGx5IGJlbG9uZwotCSAgdG8gdGhhdCBwYXJ0aWN1bGFyIHBsdWdpbiAob2JqZWN0L3BvaW50ZXIpLgotCSAgVGhpcyBmaXhlcyBpc3N1ZXMgb2YgcGx1Z2luIGZlYXR1cmVzIGRpc2FwcGVhcmluZyB3aGVuIGEgcGx1Z2luIC5zbyBmaWxlCi0JICBpcyByZW5hbWVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDA5NAotCi0yMDExLTA0LTI0IDA5OjUzOjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSogZ3N0L2dzdHR5cGVmaW5kLmM6Ci0JICBwbHVnaW5mZWF0dXJlOiBzdG9yZSBwb2ludGVyIHRvIHBsdWdpbiBpbiBhZGRpdGlvbiB0byB0aGUgcGx1Z2luIG5hbWUKLQkgIFNvIHdlIGNhbiByZWxpYWJseSByZW1vdmUgcGx1Z2luIGZlYXR1cmVzIGZvciBhIHNwZWNpZmljIHBsdWdpbiBsYXRlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQwOTQKLQotMjAxMS0wNC0yNCAxMTowNTo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IHVzZSBUUkFDRSBsb2cgbGV2ZWwgdG8gbG9nIGZpbGVzIHRoYXQgZG9uJ3QgbG9vayBsaWtlIHBsdWdpbnMKLQkgIEN1dHMgZG93biB0aGUgbm9pc2UgaW4gdW5pbnN0YWxsZWQgc2V0dXBzLgotCi0yMDExLTA0LTE5IDIwOjM1OjA0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBmaXggbmVnb3RpYXRpb24gcmVncmVzc2lvbgotCSAgRml4dXAgcGF0Y2ggZm9yIDgzNTk3NzY3YjE2OWRkNmMzOWEwN2I2MTQ0YTY1MGMxZjA5ODgyNWEKLQkgIFVzZSBhIHNlcGFyYXRlIHZhcmlhYmxlIGZvciBrbm93aW5nIGlmIGEgcGFkIGFsbG9jIGhhcyBiZWVuIG1hZGUKLQkgIGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIHRoZSBmbG93IHJldHVybiB0aGF0IG1pZ2h0IG5vdCBiZSB0aGUKLQkgIHJlc3VsdCBvZiB0aGUgcGFkIGFsbG9jCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ4MjIwCi0KLTIwMTEtMDQtMjEgMTI6MzM6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIHRlc3RzOiBhZGQgc2ltcGxlIHBpcGVsaW5lLWluLXBpcGVsaW5lIHVuaXQgdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0ODI5NwotCi0yMDExLTA0LTIwIDE1OjM5OjE2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBhbHNvIGFsbG93IHBvcHBpbmcgYSBtZXNzYWdlIHdpdGhvdXQgdGltZW91dCBpZiBubyBwb2xsIGF2YWlsYWJsZQotCSAgLi4uIHdoaWNoIGhhcHBlbnMgaW4gcGFydGljdWxhciBmbHVzaGluZyBhIGJ1cywgcG9zc2libHkgYXMgcGFydAotCSAgb2YgYSBzdGF0ZSBjaGFuZ2UsIGUuZy4gd2hlbiBoYXZpbmcgYSBwaXBlbGluZSBpbiBhIHBpcGVsaW5lCi0JICBhbmQgdGhlbiBjaGFuZ2luZyBzdGF0ZSBiYWNrIHRvIE5VTEwuIFRoZSBpbnRlcmlvciBwaXBlbGluZQotCSAgd2lsbC9taWdodCB0aGVuIGZsdXNoIHRoZSBidXMsIHdoaWNoIGlzIGEgY2hpbGQgYnVzIGZyb20gdGhlCi0JICBwYXJlbnQgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIHBvbGwgYW55bW9yZSB0aGVzZSBkYXlzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0ODI5NwotCi0yMDExLTA0LTIwIDE5OjA4OjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZSBkZWZzCi0KLTIwMTEtMDQtMjAgMTk6MDM6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiByZW1vdmUgdW51c2VkIHZhcmlhYmxlCi0KLTIwMTEtMDQtMjAgMTk6MDA6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBkb24ndCB0b3VjaCBiYXNlX3RpbWUgb3IgY2xvY2sgaW4gc3RhdGUgY2hhbmdlCi0JICBEb24ndCB0b3VjaCB0aGUgYmFzZV90aW1lIG9yIHRoZSBjbG9jayB3aGVuIHNldHRpbmcgYW4gZWxlbWVudCB0byB0aGUgUkVBRFkgb3IKLQkgIE5VTEwgc3RhdGUuIEl0IGlzIHRoZSBwYXJlbnQgdGhhdCB3aWxsIG1hbmFnZSB0aGlzIGZvciB1cy4KLQotMjAxMS0wNC0xOSAyMDo1MjowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JICBidWZmZXJsaXN0OiBJbXBsZW1lbnQgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKQotCi0yMDExLTA0LTE5IDE5OjMwOjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDQtMTkgMTg6NTc6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogYWRkIG1ldGhvZCB0byBjb21wYXJlIGJ1ZmZlciBkYXRhCi0JICBBZGQgbWV0aG9kIHRvIGNvbXBhcmUgdGhlIGRhdGEgaW4gYSBidWZmZXIuCi0KLTIwMTEtMDQtMTkgMTY6MjE6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCi0yMDExLTA0LTE5IDE0OjA1OjIzICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogdW5sb2NrIGJlZm9yZSBmcmVlaW5nIHRoZSBjYWNoZSB0byBhdm9pZCBkZWFkbG9jawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0ODE5OQotCi0yMDExLTA0LTE0IDEwOjE1OjI2ICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogZG9uJ3QgdW5yZWYgdHJhbnMgdW50aWwgdGhlIGZ1bmN0aW9uIGlzIGRvbmUgdXNpbmcgaXQKLQkgIHRyYW5zLT5wcml2LT5mb3JjZV9hbGxvYyA9IEZBTFNFIHdvdWxkIGNyYXNoIGlmIHRoZSByZWYgaGVsZCBpcyB0aGUgbGFzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0ODIxNQotCi0yMDExLTA0LTE5IDEzOjIzOjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZGV4LmM6Ci0JICBkb2NzOiBhZGQgbm90ZS93YXJuaW5nIHRvIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkKCkgZG9jcyBhYm91dCB0aGUgT0JKRUNUX0xPQ0sKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDY4MTEKLQotMjAxMS0wNC0xOSAxMzowNTo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGRvbid0IGRlYWRsb2NrIHdoZW4gc2V0dGluZyBleHRlcm5hbCBpbmRleAotCSAgUHJvdGVjdCBpbmRleCB3aXRoIGl0cyBvd24gbG9jay4gZ3N0X2luZGV4X2dldF93cml0ZXJfaWQoKSBtYXkgdGFrZQotCSAgdGhlIG9iamVjdCBsb2NrIGludGVybmFsbHkgKHRoZSBkZWZhdWx0IHJlc29sdmVyLCBHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSCwKLQkgIHdpbGwgYW55d2F5KSwgc28gaWYgd2UncmUgdXNpbmcgdGhhdCB0byBwcm90ZWN0IHRoZSBpbmRleCBhcyB3ZWxsLAotCSAgd2UnbGwgZGVhZGxvY2suCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2ODExCi0KLTIwMTEtMDQtMTkgMTE6NTE6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBtYWtlIGZtdGxpc3QgY29uc3RhbnQKLQotMjAxMS0wNC0xOSAxMTo0ODowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBxdWVyeTogY29uc3QtaWZ5IGZvcm1hdHMgYXJndW1lbnRzIHRvIGdzdF9xdWVyeV9zZXRfZm9ybWF0c3YoKQotCi0yMDExLTA0LTE4IDE4OjE5OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYXJhbXNwZWNzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6Ci0JICB0ZXN0czogVXNlIEdfREVGSU5FX1RZUEUgaW5zdGVhZCBvZiBHU1RfQk9JTEVSUExBVEUKLQotMjAxMS0wNC0xOCAxODoxOToyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXtzaW5rLHNyY306IERvbid0IHRyeSB0byBmaXhhdGUgQU5ZIGNhcHMKLQotMjAxMS0wNC0xOCAxODowNzowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIGVsZW1lbnRzOiBVc2UgR19ERUZJTkVfVFlQRSBpbnN0ZWFkIG9mIEdTVF9CT0lMRVJQTEFURQotCi0yMDExLTA0LTE4IDE3OjMzOjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXQ6IFVzZSBHX0RFRklORV9UWVBFIGluc3RlYWQgb2YgR1NUX0JPSUxFUlBMQVRFCi0KLTIwMTEtMDQtMTggMTc6MzI6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSAgYmFzZTogVXNlIEdfREVGSU5FX1RZUEUgaW5zdGVhZCBvZiBHU1RfQk9JTEVSUExBVEUKLQotMjAxMS0wNC0xOCAxNzoyODozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIHV0aWxzOiBSZW1vdmUgR1NUX0JPSUxFUlBMQVRFIGFuZCBmcmllbmRzCi0KLTIwMTEtMDQtMTggMTA6NDc6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IE1ha2UgdGhlIHNpemUgcGFyYW1ldGVyIG9mIGdzdF9wYWRfYWxsb2NfYnVmZmVyKCkgdW5zaWduZWQKLQkgIEludGVybmFsbHkgZ3VpbnRzIHdlcmUgdXNlZCBldmVyeXdoZXJlIGFscmVhZHkuCi0KLTIwMTEtMDQtMTggMTA6NDE6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IERvbid0IGFsbG93IGZpeGF0aW5nIEFOWSBjYXBzIGFuZCByZW1vdmUgRklYTUUKLQotMjAxMS0wNC0xOCAxMDozNjo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IEVuYWJsZSBEVVJBVElPTiBxdWVyeSBjYWNoaW5nCi0JICBFbGVtZW50cyBtdXN0IG5vdyBwb3N0IGEgRFVSQVRJT04gbWVzc2FnZSBvbiB0aGUgYnVzIGlmIHRoZXkKLQkgIGNoYW5nZSB0aGUgZHVyYXRpb24gaW4gUEFVU0VEIG9yIFBMQVlJTkcuCi0KLTIwMTEtMDQtMTYgMTU6MjA6MDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgZG9jczogcmVtb3ZlIHJlZmVyZW5jZSB0byBiYXNlcGFyc2UgQVBJIHRoYXQgZGlkbid0IG1ha2UgaXQKLQotMjAxMS0wNC0xNiAxNjowNjowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wNC0xNiAxNToyODo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBBZGQgdGVzdCBmb3IgaW5oZXJpdGluZyBtZXRhZGF0YS9wYWQgdGVtcGxhdGVzCi0KLTIwMTEtMDQtMTYgMTU6MjQ6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2U6IFVwZGF0ZSBkb2NzIHRvIHNheSBjbGFzc19pbml0IGluc3RlYWQgb2YgYmFzZV9pbml0Ci0JICBBbmQgcmVtb3ZlIGEgdXNlbGVzcyBiYXNlX2luaXQgaW4gYmFzZXNyYwotCi0yMDExLTA0LTE2IDE1OjIzOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgbmV0OiBVc2UgR19ERUZJTkVfVFlQRQotCi0yMDExLTA0LTE2IDE1OjIzOjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBnc3Q6IERvbid0IHVzZSBiYXNlX2luaXQgYW5kIHVzZSBHX0RFRklORV9UWVBFIGluc3RlYWQgb2YgR1NUX0JPSUxFUlBMQVRFCi0KLTIwMTEtMDQtMTYgMTU6MDM6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSAgZWxlbWVudDogSW5oZXJpdCBlbGVtZW50IG1ldGFkYXRhIGFuZCBwYWQgdGVtcGxhdGVzIGZyb20gcGFyZW50IGNsYXNzZXMKLQkgIFRoaXMgYWxsb3dzIHRvIGFkZCBwYWQgdGVtcGxhdGVzIGFuZCBzZXQgbWV0YWRhdGEgaW4gY2xhc3NfaW5pdCBpbnN0ZWFkIG9mCi0JICBiYXNlX2luaXQuIGJhc2VfaW5pdCBpcyBhIGNvbmNlcHQgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFsbW9zdCBhbGwKLQkgIGxhbmd1YWdlcyBhbmQgY29weWluZyB0aGUgdGVtcGxhdGVzL21ldGFkYXRhIGZvciBzdWJjbGFzc2VzIGlzIHRoZSBtb3JlCi0JICBpbnR1aXRpdmUgd2F5IG9mIGRvaW5nIHRoaW5ncy4KLQkgIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHBhZCB0ZW1wbGF0ZXMgb2YgcGFyZW50IGNsYXNzZXMgYnkgYWRkaW5nIGEgbmV3Ci0JICB0ZW1wbGF0ZSB3aXRoIHRoZSBzYW1lIG5vdy4KLQkgIEFsc28gZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSgpIG5vdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlCi0JICBwYWQgdGVtcGxhdGUsIHdoaWNoIHdhcyBhc3N1bWVkIGJ5IGFsbCBjb2RlIGJlZm9yZSBhbnl3YXkuCi0JICBGaXhlcyBidWcgIzQ5MTUwMS4KLQotMjAxMS0wNC0xNiAxNDo1NjowMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICAwLjEwLjMyLjIgcHJlLXJlbGVhc2UKLQotMjAxMS0wNC0xNiAxNDo1NDowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMS0wNC0xNiAxNDo1Mjo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGdzdC1sYXVuY2g6IHJlbW92ZSBuZXdsaW5lIGZyb20gdHJhbnNsYXRhYmxlIHN0cmluZwotCi0yMDExLTA0LTE2IDEzOjQ5OjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSAgZ3N0OiBnb2JqZWN0LWludHJvc3BlY3Rpb24gc2Nhbm5lciBkb2Vzbid0IG5lZWQgdG8gc2NhbiBvciB1cGRhdGUgcGx1Z2luIGluZm8KLQotMjAxMS0wNC0xNiAxNDozNDowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkgIGdzdDogbWFrZSBzdXJlIGdvYmplY3QtaW50cm9zcGVjdGlvbiBzY2FubmVyIGNhbGxzIGdzdF9pbml0KCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDc5MjIKLQotMjAxMS0wNC0xNiAxMDo0NToxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBsaWJzOiBnb2JqZWN0LWludHJvc3BlY3Rpb24gc2Nhbm5lciBkb2Vzbid0IG5lZWQgdG8gc2NhbiBvciB1cGRhdGUgcGx1Z2luIGluZm8KLQkgIE1ha2Ugc3VyZSB0aGUgc2Nhbm5lciBkb2Vzbid0IGxvYWQgb3IgaW50cm9zcGVjdCBvciBjaGVjayBhbnkgcGx1Z2lucywKLQkgIChlc3BlY2lhbGx5IG5vdCBvdXRzaWRlIHRoZSBidWlsZCBkaXJlY3RvcnkpLgotCi0yMDExLTA0LTE2IDEwOjMzOjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkgIGxpYnM6IG1ha2Ugc3VyZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gc2Nhbm5lciBjYWxscyBnc3RfaW5pdCgpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ3OTIyCi0KLTIwMTEtMDQtMTYgMTA6MTc6MjQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICB3aW4zMjogYWRkIG5ldyBiYXNlcGFyc2UgQVBJIHRvIGxpYmdzdGJhc2UuZGVmCi0KLTIwMTEtMDQtMTYgMDk6MzM6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDQtMTYgMDk6MzI6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBBZGQgZXhwb3J0cyBmb3IgdGhlIEdzdFBhcnNlQ29udGV4dCBhbmQgR3N0QnVmZmVyTGlzdEl0ZXJhdG9yIHR5cGVzCi0KLTIwMTEtMDQtMTYgMDg6NTk6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDQtMTUgMjA6NTg6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JICBwbHVnaW5sb2FkZXI6IG9ubHkgcnVuIGdzdC1wbHVnaW4tc2Nhbm5lciB3aXRoIC91c3IvYmluL2FyY2ggd3JhcHBlciBvbiBPUyBYID49IDEwLjUKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBEYW5pZWwgTWFja3MgPGRtYWNrc0BuZXRzcGFjZS5vcmc+Ci0JICBFYXJsaWVyIHZlcnNpb25zIG9mIE9TWCBkb24ndCBzdXBwb3J0IHByb3BlciBtdWx0aWFyY2ggYW5kCi0JICB0cnlpbmcgdG8gdXNlIC91c3IvYmluL2FyY2ggLWZvbyB3aXRoIHRob3NlIHZlcnNpb25zIHdvdWxkCi0JICBqdXN0IGJyZWFrIHRoaW5ncy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTUzNTcKLQotMjAxMS0wNC0xNSAxOTowNzo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogZXhwb3NlIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUoKSBmb3IgY29tcGxldGVuZXNzCi0JICBBUEk6IGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUoKQotCi0yMDExLTA0LTE1IDE4OjUyOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogaW5pdCBmcmFtZXMgb24gdGhlIHN0YWNrIHdpdGggZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCgpCi0JICBGcmFtZXMgbXVzdCBub3cgYmUgaW5pdGVkIHRoaXMgd2F5LCBjYW4ndCBqdXN0IHplcm8gdGhlbQotCSAgb3V0IGFuZCB1c2UgdGhlbS4KLQotMjAxMS0wNC0xNSAxODozODo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG1vcmUgZGVidWcgbG9nZ2luZywgbWlub3IgY2xlYW4tdXAKLQkgIFRyYWNlIGZyYW1lcywgc3BsaXQgb3V0IGNvZGUgdG8gcXVldWUgYSBmcmFtZSBmb3IgbGF0ZXIuCi0KLTIwMTEtMDQtMTUgMTg6MDA6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogY2hhbmdlIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQoKSB0byBub3QgdGFrZSBhIEdzdEJhc2VQYXJzZSBhcmd1bWVudAotCi0yMDExLTA0LTE1IDE3OjQxOjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IG1ha2UgR3N0QmFzZVBhcnNlRnJhbWUgaGFuZGxpbmcgbW9yZSBiaW5kaW5ncy1mcmllbmRseQotCSAgQ2hhbmdlIHNlbWFudGljcyBvZiBnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lKCkgYW5kIG1ha2UgaXQgdGFrZQotCSAgb3duZXJzaGlwIG9mIHRoZSB3aG9sZSBmcmFtZSwgbm90IGp1c3QgdGhlIGZyYW1lIGNvbnRlbnRzLiBUaGlzCi0JICBpcyBtb3JlIGluIGxpbmUgd2l0aCBob3cgZ3N0X3BhZF9wdXNoKCkgZXRjLiB3b3JrLiBKdXN0IHRyYW5zZmVyaW5nCi0JICB0aGUgY29udGVudCwgYnV0IG5vdCB0aGUgY29udGFpbmVyIG9mIHNvbWV0aGluZyB0aGF0J3Mgbm90IHJlYWxseQotCSAga25vd24gdG8gYmUgYSBjb250YWluZXIgaXMgaGFyZCB0byBhbm5vdGF0ZSBwcm9wZXJseSBhbmQgcHJvYmFibHkKLQkgIHdvbid0IHdvcmsuIFdlIG1hcmsgZnJhbWVzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgbm93IHdpdGggYSBwcml2YXRlCi0JICBmbGFnIGluIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQoKSwgc28gZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSgpCi0JICBvbmx5IGZyZWVzIHRoZSBjb250ZW50cyBpbiB0aGF0IGNhc2UgYnV0IG5vdCB0aGUgZnJhbWUgc3RydWN0IGl0c2VsZi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg4NTcKLQkgIEFQSTogZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfbmV3KCkKLQotMjAxMS0wNC0xNSAxNTowMjoyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiByZWdpc3RlciBib3hlZCB0eXBlIGZvciBHc3RCYXNlRnJhbWVQYXJzZQotCSAgVG8gbWFrZSB0aGlzIHVzYWJsZSBmb3IgYmluZGluZ3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4ODU3Ci0KLTIwMTEtMDQtMTUgMTM6NTc6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBBZGQgbWlzc2luZyApIHRvIHRoZSByaW5nLWJ1ZmZlci1tYXgtc2l6ZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbgotCi0yMDExLTA0LTE1IDEwOjUzOjU2ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IFJlbW92ZSB1bnVzZWQgYnV0IHNldCB2YXJpYWJsZQotCSAgR0NDIDQuNi4wIHNwaXRzIHdhcm5pbmdzIGFib3V0IHRoZXNlLgotCi0yMDExLTA0LTE0IDE2OjA2OjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JICBidWZmZXJsaXN0OiBBZGQgYm94ZWQgdHlwZSBmb3IgR3N0QnVmZmVyTGlzdEl0ZXJhdG9yIGZvciBnb2JqZWN0LWludHJvc3BlY3Rpb24KLQotMjAxMS0wNC0xNCAxNTo1OToyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogZ3N0L2dzdHBhcnNlLmg6Ci0JICBwYXJzZTogQWRkIGJveGVkIHR5cGUgZm9yIEdzdFBhcnNlQ29udGV4dCBmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uCi0KLTIwMTEtMDQtMTQgMTU6NTE6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGZpbHRlci5jOgotCSogZ3N0L2dzdGludGVyZmFjZS5jOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGdzdDogQWRkIHNvbWUgbW9yZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gYW5ub3RhdGlvbnMKLQotMjAxMS0wNC0xNCAwOTowNzo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogRG9uJ3QgbGVhayB0aGUgc2lua3BhZCBuYW1lCi0KLTIwMTEtMDQtMTQgMDk6MDc6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBEb24ndCBsZWFrIHBhZHMgaW4gdGhlIG5hbWVkIHBhZHMgdW5pdCB0ZXN0Ci0KLTIwMTEtMDQtMTQgMDg6NTk6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBGaXggY2FwcyBsZWFrcyBpbiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9hY2NlcHRfe2FueSxhbGx9X2NhcHNfaW5fZGlyZWN0aW9uKCkKLQotMjAxMS0wNC0xMyAwOToyMDoxMyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9wYXJzZS9wYXJzZS5sOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSAgcGFyc2VyOiBBbGxvdyBlbGVtZW50IG5hbWVzIHRvIGJlZ2luIHdpdGggZGlnaXRzCi0KLTIwMTEtMDQtMTMgMTA6MjQ6MzMgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHRlc3RzOiBBZGQgdGVzdCBmb3IgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IKLQotMjAxMS0wMS0wNiAxODoxMTozMSArMDEwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvcmF2bmFzQGNpc2NvLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIGVsZW1lbnRzOiBGaXggcGFkIGNhbGxiYWNrcyBzbyB0aGV5IGhhbmRsZSB3aGVuIHBhcmVudCBnb2VzIGF3YXkKLQkgIDEpIFdlIG5lZWQgdG8gbG9jayBhbmQgZ2V0IGEgc3Ryb25nIHJlZiB0byB0aGUgcGFyZW50LCBpZiBzdGlsbCB0aGVyZS4KLQkgIDIpIElmIGl0IGhhcyBnb25lIGF3YXksIHdlIG5lZWQgdG8gaGFuZGxlIHRoYXQgZ3JhY2VmdWxseS4KLQkgIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHNhZmVseSBtb2RpZnkgYSBydW5uaW5nIHBpcGVsaW5lLiBIYXMgYmVlbgotCSAgb2JzZXJ2ZWQgd2hlbiBhIHN0cmVhbWluZyB0aHJlYWQgaXMgZG9pbmcgYSBidWZmZXJfYWxsb2MoKSB3aGlsZSBhbgotCSAgYXBwbGljYXRpb24gdGhyZWFkIHNlbmRzIGFuIGV2ZW50IG9uIGEgcGFkIGZ1cnRoZXIgZG93bnN0cmVhbSwgYW5kIGZyb20KLQkgIHdpdGhpbiBhIHBhZCBwcm9iZSAoaG9sZGluZyBTVFJFQU1fTE9DSykgY2FycmllcyBvdXQgdGhlIHBpcGVsaW5lIHBsdW1iaW5nCi0JICB3aGlsZSB0aGUgc3RyZWFtaW5nIHRocmVhZCBoYXMgaXRzIGJ1ZmZlcl9hbGxvYygpIGluIHByb2dyZXNzLgotCi0yMDExLTAxLTA2IDE4OjExOjMxICswMTAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9yYXZuYXNAY2lzY28uY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2U6IEZpeCBwYWQgY2FsbGJhY2tzIHNvIHRoZXkgaGFuZGxlIHdoZW4gcGFyZW50IGdvZXMgYXdheQotCSAgMSkgV2UgbmVlZCB0byBsb2NrIGFuZCBnZXQgYSBzdHJvbmcgcmVmIHRvIHRoZSBwYXJlbnQsIGlmIHN0aWxsIHRoZXJlLgotCSAgMikgSWYgaXQgaGFzIGdvbmUgYXdheSwgd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5LgotCSAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gc2FmZWx5IG1vZGlmeSBhIHJ1bm5pbmcgcGlwZWxpbmUuIEhhcyBiZWVuCi0JICBvYnNlcnZlZCB3aGVuIGEgc3RyZWFtaW5nIHRocmVhZCBpcyBkb2luZyBhIGJ1ZmZlcl9hbGxvYygpIHdoaWxlIGFuCi0JICBhcHBsaWNhdGlvbiB0aHJlYWQgc2VuZHMgYW4gZXZlbnQgb24gYSBwYWQgZnVydGhlciBkb3duc3RyZWFtLCBhbmQgZnJvbQotCSAgd2l0aGluIGEgcGFkIHByb2JlIChob2xkaW5nIFNUUkVBTV9MT0NLKSBjYXJyaWVzIG91dCB0aGUgcGlwZWxpbmUgcGx1bWJpbmcKLQkgIHdoaWxlIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGhhcyBpdHMgYnVmZmVyX2FsbG9jKCkgaW4gcHJvZ3Jlc3MuCi0KLTIwMTEtMDEtMDYgMTg6MTE6MzEgKzAxMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b3Jhdm5hc0BjaXNjby5jb20+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IEZpeCBwYWQgY2FsbGJhY2tzIHNvIHRoZXkgaGFuZGxlIHdoZW4gcGFyZW50IGdvZXMgYXdheQotCSAgMSkgV2UgbmVlZCB0byBsb2NrIGFuZCBnZXQgYSBzdHJvbmcgcmVmIHRvIHRoZSBwYXJlbnQsIGlmIHN0aWxsIHRoZXJlLgotCSAgMikgSWYgaXQgaGFzIGdvbmUgYXdheSwgd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5LgotCSAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gc2FmZWx5IG1vZGlmeSBhIHJ1bm5pbmcgcGlwZWxpbmUuIEhhcyBiZWVuCi0JICBvYnNlcnZlZCB3aGVuIGEgc3RyZWFtaW5nIHRocmVhZCBpcyBkb2luZyBhIGJ1ZmZlcl9hbGxvYygpIHdoaWxlIGFuCi0JICBhcHBsaWNhdGlvbiB0aHJlYWQgc2VuZHMgYW4gZXZlbnQgb24gYSBwYWQgZnVydGhlciBkb3duc3RyZWFtLCBhbmQgZnJvbQotCSAgd2l0aGluIGEgcGFkIHByb2JlIChob2xkaW5nIFNUUkVBTV9MT0NLKSBjYXJyaWVzIG91dCB0aGUgcGlwZWxpbmUgcGx1bWJpbmcKLQkgIHdoaWxlIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGhhcyBpdHMgYnVmZmVyX2FsbG9jKCkgaW4gcHJvZ3Jlc3MuCi0KLTIwMTEtMDQtMTMgMTc6MjY6NTQgKzAyMDAgIEphbm5lIEdydW5hdSA8amFubmUuZ3J1bmF1QGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogcHJldmVudCBjYWxjdWxhdGlvbiB3aXRoIEdTVF9DTE9DS19USU1FX05PTkUgaW4gdXBkYXRlX3RpbWVfbGV2ZWwoKQotCi0yMDExLTA0LTExIDE1OjA4OjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdGVzdF90cmFuc2Zvcm0uYzoKLQkgIHRlc3RzOiBmaXggdW51c3VlZC1idXQtYXNzaWduZWQtdmFyaWFibGUgd2FybmluZ3Mgd2l0aCBnY2MgNC42Ci0KLTIwMTEtMDQtMTEgMTM6MDQ6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICB0ZXN0czogZGlzYWJsZSB0ZXN0X21hbnlfYmlucyB1bml0IHRlc3QgZm9yIG5vdwotCSAgSXQgZmFpbHMgb24gdGhlIE9TWCBib3QgKGJvdGggd2l0aCBnaXQgYW5kIHRoZSBsYXN0IHJlbGVhc2UpLCBhbmQKLQkgIGl0IGRvZXNuJ3QgcmVhbGx5IHRlc3QgYW55dGhpbmcgdXNlZnVsLCBzbyBtYXkganVzdCBhcyB3ZWxsIGRpc2FibGUKLQkgIGl0IGZvciBub3cuCi0KLTIwMTEtMDQtMTEgMTI6NTE6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JICBwbHVnaW5sb2FkZXI6IGZpeCBjb21waWxlciB3YXJuaW5ncwotCSAgQ2FzdCBzdHJpbmcgY29uc3RhbnRzIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkuCi0KLTIwMTEtMDQtMTEgMTI6MDQ6MzQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICB0ZXN0czogYWxsb3cgbW9yZSB0aW1lIGZvciB0aGUgdGVzdF9tYW55X2JpbnMgcGlwZWxpbmUgdG8gcHJlcm9sbAotCSAgSG9wZWZ1bGx5IG1ha2VzIHRoaXMgdGVzdCB3b3JrIG9uIHRoZSBPU1ggYnVpbGQgYm90IGFuZCBvdGhlcgotCSAgbm90LXNvLXBvd2VyZnVsIG1hY2hpbmVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjYyNAotCi0yMDExLTA0LTExIDExOjI5OjAwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSAgcGx1Z2lubG9hZGVyOiBtYWtlIHN1cmUgZ3N0LXBsdWdpbi1zY2FubmVyIGlzIGNhbGxlZCB3aXRoIHRoZSByaWdodCBhcmNoIG9uIE9TWAotCSAgT24gT1NYLCBHU3RyZWFtZXIgbWlnaHQgYmUgYnVpbHQgYXMgYSAnZmF0L3VuaXZlcnNhbCcgYmluYXJ5IGNvbnRhaW5pbmcKLQkgIGJvdGggMzItYml0IGFuZCA2NC1iaXQgY29kZS4gV2UgbXVzdCB0YWtlIGNhcmUgdGhhdCBnc3QtcGx1Z2luLXNjYW5uZXIKLQkgIGlzIGV4ZWN1dGVkIHdpdGggdGhlIHNhbWUgYXJjaGl0ZWN0dXJlIGFzIHRoZSBHU3RyZWFtZXIgY29yZSwgb3RoZXJ3aXNlCi0JICBiYWQgdGhpbmdzIG1heSBoYXBwZW4gYW5kIGNvcmUvc2Nhbm5lciB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvbW11bmljYXRlCi0JICBwcm9wZXJseS4KLQkgIFNob3VsZCBmaXggaXNzdWVzIHdpdGggKDMyLWJpdCkgZmlyZWZveCB1c2luZyBhIDMyLWJpdCBHU3RyZWFtZXIgY29yZQotCSAgd2hpY2ggdGhlbiBzcGF3bnMgYSAndW5pdmVyc2FsJyBnc3QtcGx1Z2luLXNjYW5uZXIgYmluYXJ5IHdoaWNoIGdldHMKLQkgIHJ1biBpbiA2NC1iaXQgbW9kZSwgY2F1c2luZyAxMDAlIGNwdSB1c2FnZSAvIGJ1c3kgbG9vcHMgb3IganVzdCBoYW5naW5nCi0JICBmaXJlZm94IHVudGlsIGtpbGxlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTUzNTcKLQotMjAxMS0wNC0xMSAxMTowNToyNCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEFsbG93IHRyYWNraW5nIG9mIGJ1ZmZlcnMgaW4gR1NUX1NDSEVEVUxJTkcgZGVidWcgb3V0cHV0Ci0JICBBcyBHU1RfU0NIRURVTElORyByZXBvcnRzIHdoZW4gYnVmZmVycyBwYXNzIHRocm91Z2ggcGFkcyBkdWUgdG8KLQkgIGdzdF9wYWRfcHVzaCBjYWxscywgdGhleSBhcmUgYSBnb29kIHdheSBvZiB0cmFja2luZyB0aGUgcHJvZ3Jlc3Mgb2YKLQkgIGJ1ZmZlcnMgdGhyb3VnaCBwaXBlbGluZXMuIEFzIHN1Y2gsIGFkZGluZyBvdXRwdXQgb2YgdGhlIGJ1ZmZlciBwb2ludGVycwotCSAgdG8gdGhlc2UgbWVzc2FnZXMgYWxsb3dzIHRyYWNraW5nIG9mIHNwZWNpZmljIGJ1ZmZlcnMsIGVhc2luZyBkZWJ1Z2dpbmcuCi0KLTIwMTEtMDQtMTEgMTA6NTM6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHBvcnQgdG8gMC4xMQotCi0yMDExLTA0LTExIDEwOjI2OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBhbmRyb2lkL2Jhc2UubWsKLQkgIGFuZHJvaWQvY29udHJvbGxlci5tawotCSAgYW5kcm9pZC9kYXRhcHJvdG9jb2wubWsKLQkgIGFuZHJvaWQvZWxlbWVudHMubWsKLQkgIGFuZHJvaWQvZ3N0LWluc3BlY3QubWsKLQkgIGFuZHJvaWQvZ3N0LWxhdW5jaC5tawotCSAgYW5kcm9pZC9nc3QtcGx1Z2luLXNjYW5uZXIubWsKLQkgIGFuZHJvaWQvZ3N0Lm1rCi0JICBhbmRyb2lkL2luZGV4ZXJzLm1rCi0JICBhbmRyb2lkL25ldC5tawotCSAgd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmCi0KLTIwMTEtMDQtMTEgMTA6MjA6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogYWRkIEZJWE1FCi0KLTIwMTEtMDEtMjcgMTQ6MzM6MDggKzAxMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiAuZ2l0aWdub3JlOgotCSogQW5kcm9pZC5tazoKLQkqIGFuZHJvaWQvTk9USUNFOgotCSogYW5kcm9pZC9iYXNlLm1rOgotCSogYW5kcm9pZC9jb250cm9sbGVyLm1rOgotCSogYW5kcm9pZC9kYXRhcHJvdG9jb2wubWs6Ci0JKiBhbmRyb2lkL2VsZW1lbnRzLm1rOgotCSogYW5kcm9pZC9nc3QtaW5zcGVjdC5tazoKLQkqIGFuZHJvaWQvZ3N0LWxhdW5jaC5tazoKLQkqIGFuZHJvaWQvZ3N0LXBsdWdpbi1zY2FubmVyLm1rOgotCSogYW5kcm9pZC9nc3QubWs6Ci0JKiBhbmRyb2lkL2dzdC9nc3Rjb25maWcuaDoKLQkqIGFuZHJvaWQvZ3N0L2dzdGVudW10eXBlcy5jOgotCSogYW5kcm9pZC9nc3QvZ3N0ZW51bXR5cGVzLmg6Ci0JKiBhbmRyb2lkL2dzdC9nc3RtYXJzaGFsLmM6Ci0JKiBhbmRyb2lkL2dzdC9nc3RtYXJzaGFsLmg6Ci0JKiBhbmRyb2lkL2dzdC9nc3R2ZXJzaW9uLmg6Ci0JKiBhbmRyb2lkL2dzdC9wYXJzZS9ncmFtbWFyLm91dHB1dDoKLQkqIGFuZHJvaWQvZ3N0L3BhcnNlL2dyYW1tYXIudGFiLmM6Ci0JKiBhbmRyb2lkL2dzdC9wYXJzZS9ncmFtbWFyLnRhYi5oOgotCSogYW5kcm9pZC9nc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkuYzoKLQkqIGFuZHJvaWQvaW5kZXhlcnMubWs6Ci0JKiBhbmRyb2lkL25ldC5tazoKLQkqIGFuZHJvaWQvdG9vbHMubWs6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06Ci0JKiB0b29scy9NYWtlZmlsZS5hbToKLQkgIGFuZHJvaWQ6IG1ha2UgaXQgcmVhZHkgZm9yIGFuZHJvZ2VuaXplcgotCSAgUmVtb3ZlIHRoZSBhbmRyb2lkLyB0b3AgZGlyCi0JICBGaXhlIHRoZSBNYWtlZmlsZS5hbSB0byBiZSBhbmRyb2dlbml6ZWQKLQkgIFRvIGJ1aWxkIGdzdHJlYW1lciBmb3IgYW5kcm9pZCB3ZSBhcmUgbm93IHVzaW5nIGFuZHJvZ2VuaXplciB3aGljaCBnZW5lcmF0ZXMgdGhlIG5lZWRlZCBBbmRyb2lkLm1rIGZpbGVzLgotCSAgQW5kcm9nZW5pemVyIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwOi8vZ2l0LmNvbGxhYm9yYS5jby51ay8/cD11c2VyL2RlcmVrL2FuZHJvZ2VuaXplci5naXQKLQotMjAxMS0wNC0wOSAyMzo1NDoyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0cmFjZS5jOgotCSAgdHJhY2U6IGRvbid0IHB1dCBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIGludG8gZ19yZXR1cm5faWZfZmFpbCgpCi0KLTIwMTEtMDQtMDkgMjI6NTc6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgZG9jczogbWlub3IgZml4ZXMgZm9yIGJhc2VwYXJzZSBkb2NzCi0JICBDbGFzcyB2ZnVuYyByZWZlcmVuY2VzIHN0aWxsIGFyZW4ndCByaWdodCwgbm8gaWRlYSB3aGF0Ci0JICB0aGUgY29ycmVjdCBtYXJrdXAgZm9yIHRob3NlIGlzLgotCi0yMDExLTA0LTA5IDE4OjA0OjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IHVucmVmIGV2ZW50IGluIGRlZmF1bHRfc2VuZF9ldmVudCBpbiBjYXNlIGVsZW1lbnQgaGFzIG5vIHBhZHMKLQkgIFNwb3R0ZWQgYnkgIEhhYWtvbiBTcG9yc2hlaW0uCi0KLTIwMTEtMDQtMDkgMDQ6MDc6MDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkgIGNoZWNrOiBJZ25vcmUgbmV3IGdzdG1ldGEgYmluYXJ5Ci0KLTIwMTEtMDQtMDkgMDQ6MDU6NDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkgIGRlc2lnbjogZHJhZnQtYnVmZmVyMi50eHQgbm8gbG9uZ2VyIGV4aXN0cwotCi0yMDExLTA0LTA5IDA0OjA1OjIwICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSAgZ3N0OiBEb24ndCBmb3JnZXQgdG8gZGlzdCBnc3RlbGVtZW50bWV0YWRhdGEuaAotCi0yMDExLTA0LTA4IDE5OjA3OjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbWlub3IgdmFyaWFibGUgbmFtZSBjbGVhbi11cAotCi0yMDExLTA0LTA4IDE1OjMxOjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBiYXNlcGFyc2U6IHJlbmFtZSBfc2V0X2ZyYW1lX3Byb3BzKCkgdG8gX3NldF9mcmFtZV9yYXRlKCkKLQkgIFNlZW1zIGxpa2UgdGhlIGJlc3QgZml0IHRvIHdoYXQgaXQgZG9lcywgYW5kIGlzIHNob3J0ZXIgdGhhbgotCSAgc2V0X2ZyYW1lX3Byb3BlcnRpZXMoKSB3aGljaCBtaWdodCBhbHNvIGhhdmUgYmVlbiBjb25mdXNpbmcKLQkgIGJlY2F1c2Ugb2YgR3N0QmFzZVBhcnNlRnJhbWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4ODU3Ci0KLTIwMTEtMDQtMDYgMTc6NDM6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHJlcGxhY2UgZm9ybWF0IGZsYWdzIHdpdGggZ3N0X2Jhc2VfcGFyc2Vfc2V0X3twYXNzdGhyb3VnaCxzeW5jYWJsZSxoYXNfdGltaW5nX2luZm99Ci0JICBUaGlzIGlzIG1vcmUgaW4gbGluZSB3aXRoIGUuZy4gR3N0QmFzZVRyYW5zZm9ybSdzIEFQSSwgYW5kIG1ha2VzIGZvciBuaWNlcgotCSAgdG8gcmVhZCBjb2RlLiBObyBnZXR0ZXJzIGZvciBub3cgc2luY2UgSSBkb24ndCBzZWUgYW55IHVzZSBjYXNlIGZvciB0aGVtLAotCSAgdGhlIEFQSSBpcyBmb3Igc3ViY2xhc3Nlcywgd2hpY2ggdXN1YWxseSBrbm93IHdoYXQgZm9ybWF0IHRoZXkncmUKLQkgIGRlYWxpbmcgd2l0aCBhbHJlYWR5IGFuZCBoZW5jZSBrbm93IHdoYXQgdGhleSd2ZSBzZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4ODU3Ci0KLTIwMTEtMDQtMDQgMTc6NTg6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogbWFrZSBEUkFJTiBhbmQgU1lOQyBmbGFncyBvbiBiYXNlcGFyc2UsIG5vdCB0aGUgZnJhbWUsIGFuZCBjaGFuZ2UgdG8gRFJBSU5JTkcgYW5kIExPU1RfU1lOQwotCSAgVGhlIGZpcnN0IGJlY2F1c2UgaXQgc2VlbXMgYSBiZXR0ZXIgZml0IGNvbmNlcHR1YWxseSwgdGhlIHNlY29uZAotCSAgdG8gZXhwcmVzcyBib29sZWFubmVzcy4gQWxzbyBjaGFuZ2UgdGhlIGFjY2Vzc29yIG1hY3JvcyBmb3Igc3ViY2xhc3NlcwotCSAgdG8gR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcgYW5kIEdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg4NTcKLQotMjAxMS0wNC0wMiAxNDoxODo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGFkZCBzb21lIHBhZGRpbmcgdG8gR3N0QmFzZVBhcnNlRnJhbWUKLQkgIEVzcC4gc2luY2UgaXQncyB1c3VhbGx5IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4ODU3Ci0KLTIwMTEtMDQtMDIgMTQ6MDg6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBmaXggdHlwbyBpbiBkb2NzIGZvciBHU1RfQkFTRV9QQVJTRV9GT1JNQVRfRkxBR19QQVNTVEhST1VHSAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODg1NwotCi0yMDExLTA0LTAyIDE0OjA0OjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogdXNlIEdRdWV1ZSBpbnN0ZWFkIG9mIEdMaXN0IGZvciBxdWV1ZWQgZnJhbWVzCi0JICBhbmQgbWFrZSBidWZmZXIgbWV0YWRhdGEgd3JpdGFibGUgYmVmb3JlIHNldHRpbmcgY2FwcyBvbiBxdWV1ZWQKLQkgIGJ1ZmZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDYzNDEKLQotMjAxMS0wNC0wMiAxMzowMjowMSArMDEwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVybWVyYWxpQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGFkZCBHU1RfQkFTRV9QQVJTRV9GTE9XX1FVRVVFRCB0byBxdWV1ZSBidWZmZXJzIHVudGlsIGNhcHMgYXJlIGtub3duCi0JICBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFyc2VyIGxpa2UgZmxhY3BhcnNlIG9yIGgyNjRwYXJzZSB3aGljaCBtYXkgbmVlZCB0byBwcm9jZXNzCi0JICBzb21lIGJ1ZmZlcnMgYmVmb3JlIHRoZXkgY2FuIGNvbnN0cnVjdCB0aGUgZmluYWwgY2FwcywgaW4gd2hpY2ggY2FzZSB0aGV5IG1heQotCSAgd2FudCB0byBkZWxheSBwdXNoaW5nIHRoZSBpbml0aWFsIGJ1ZmZlcnMgdW50aWwgdGhlIGZ1bGwgYW5kIHByb3BlciBjYXBzIGFyZQotCSAga25vd24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2MzQxCi0KLTIwMTEtMDMtMzEgMTU6NTA6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBhZGQgdG8gZG9jcyBhbmQgZml4IHVwIGd0ay1kb2MgbWFya3VwIGEgbGl0dGxlCi0JICBBbmQgYWRkIFNpbmNlIG1hcmtlcnMuCi0KLTIwMTEtMDMtMzEgMTQ6NDg6NDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogcmVwbGFjZSBzZXRfc2VlaygpIHdpdGggX3NldF9hdmVyYWdlX2JpdHJhdGUoKSBhbmQgRkxBR19TWU5DQUJMRQotCSAgVGhpcyBtYWtlcyBtb3JlIHNlbnNlIGNvbmNlcHR1YWxseSwgc2luY2UgdGhlIGJpdHJhdGUgbWF5IGJlIHVzZWQKLQkgIHRvIGVzdGltYXRlIGEgc2VlayBwb3NpdGlvbiBpZiB0aGVyZSdzIG5vIHNlZWsgdGFibGUgb3IganVzdCBmb3IKLQkgIGR1cmF0aW9uIHJlcG9ydGluZy9lc3RpbWF0aW9uIGlmIHdlIGNhbid0IHNlZWsuIEFsc28sIGV2ZW4gaWYgdGhlCi0JICBmb3JtYXQgaXMgbm90IHN5bmNhYmxlLCB3ZSBjb3VsZCBzdGlsbCBzZWVrIGJ5IHB1c2hpbmcgZGF0YSBmcm9tIHRoZQotCSAgc3RhcnQgYW5kIHVzaW5nIHRoZSBzZWdtZW50IHRvIG1ha2UgZG93bnN0cmVhbSBjbGlwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODg1NwotCi0yMDExLTAzLTI0IDE3OjMwOjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHJlbmFtZSBHc3RCYXNlRm9ybWF0IHRvIEdzdEJhc2VGb3JtYXRGbGFncyBhbmQgZml4IHVwIGFzc29jaWF0ZWQgQVBJCi0JICBBbHNvIGNoYW5nZSBnc3RfYmFzZV9wYXJzZV9zZXRfZm9ybWF0KHBhcnNlLGZsYWdzLHN3aXRjaF9vbikgdG8KLQkgIGdzdF9iYXNlX3BhcnNlX3NldF9mb3JtYXRfZmxhZ3MocGFyc2UsZmxhZ3MpIHdoaWNoIGlzIG1vcmUgaW4gbGluZQotCSAgd2l0aCB0aGUgcmVzdCBvZiBvdXIgQVBJIGFuZCBob3cgdGhlIGZ1bmN0aW9uIGlzIHVzZWQuCi0KLTIwMTEtMDMtMTMgMjM6NDM6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogZG9uJ3QgZXhwb3NlIEdzdEFkYXB0ZXIgaW4gcHVibGljIGhlYWRlcgotCSAgTm9uZSBvZiB0aGUgZXhpc3Rpbmcgc3ViY2xhc3NlcyBuZWVkcyBhY2Nlc3MgdG8gdGhhdCwgc28gdGhlcmUncwotCSAgbm8gcmVhc29uIHRvIGV4cG9zZSBpdCBmb3Igbm93LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUxODg1NwotCi0yMDExLTAzLTEzIDIzOjM4OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IG1vdmUgdmFyaW91cyBzZWdtZW50LXJlbGF0ZWQgbWVtYmVycyBpbnRvIHRoZSBwcml2YXRlIGluc3RhbmNlIHN0cnVjdAotCSAgSWYgbm9uZSBvZiB0aGUgZXhpc3Rpbmcgc3ViY2xhc3NlcyB1c2VzIHRoZXNlLCB0aGVyZSdzIHByb2JhYmx5IG5vCi0JICBuZWVkIHRvIGV4cG9zZSB0aGVtIGF0IHRoZSBtb21lbnQuIEtlZXAgdGhlIHNlZ21lbnQgaXRzZWxmIGV4cG9zZWQKLQkgIHRob3VnaC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MTg4NTcKLQotMjAxMS0wMy0xMyAyMzozMDo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHJlbW92ZSB1bnVzZWQgR1NUX0JBU0VfUEFSU0Vfe1NJTkssU1JDfV9OQU1FCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE4ODU3Ci0KLTIwMTEtMDMtMTIgMTY6MTY6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiByZS1pbmRlbnQgaGVhZGVyCi0KLTIwMTEtMDMtMTIgMTU6MzQ6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggdXAgR1R5cGUgbmFtZSBhbmQgbWFrZSBfZ2V0X3R5cGUoKSBmdW5jdGlvbiB0aHJlYWQtc2FmZQotCSAgUmVuYW1lIEdUeXBlIGZyb20gR3N0QmFzZVBhcnNlQmFkIHRvIEdzdEJhc2VQYXJzZS4KLQotMjAxMS0wMy0xMiAxNToyOTozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JICBsaWJzOiBhZGQgR3N0QmFzZVBhcnNlIHdoaWNoIHdhcyBtb3ZlZCBmcm9tIC1iYWQKLQotMjAxMS0wMi0yMyAxNzoyNDoxNCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG1ha2VfbWV0YWRhdGFfd3JpdGFibGUoKSBmaXgKLQotMjAxMS0wMi0yMSAxMzoyNDowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlbmFtZSBHVHlwZSBmcm9tIEdzdEF1ZGlvQmFzZVBhcnNlQmFkIHRvIEdzdEJhc2VQYXJzZUJhZAotCSAgV2UgdXNlIGl0IGZvciB2aWRlbyBhcyB3ZWxsIG5vdy4KLQotMjAxMS0wMi0xOCAxNTowNTozMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2UKLQotMjAxMS0wMi0xOCAxNTowNTowMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB1c2UgZGVsdGEtdW5pdCBmbGFncyBpbnN0ZWFkIG9mIG5vbmUKLQotMjAxMS0wMi0xNyAxMzoyMjoyOCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHVwZGF0ZSBkb2N1bWVudGF0aW9uIGZvciBBUEkgY2hhbmdlcwotCi0yMDEwLTEwLTEzIDE1OjM5OjU1IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IENyZWF0ZSBiYXNlcGFyc2UgbGlicmFyeQotCi0yMDExLTAyLTA3IDE0OjQ2OjU3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogdHVuZSBRVUVSWV9TRUVLSU5HIHJlc3BvbnNlCi0JICBFdmVuIGlmIHdlIGN1cnJlbnRseSBkbyBub3QgaGF2ZSBhIGR1cmF0aW9uIHlldCwgYXNzdW1lIHNlZWthYmxlIGlmCi0JICBpdCBsb29rcyBsaWtlIHdlJ2xsIGxpa2VseSBiZSBhYmxlIHRvIGRldGVybWluZSBpdCBsYXRlciBvbgotCSAgKHdoaWNoIGNvaW5jaWRlcyB3aXRoIG5lZWRlZCBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIHNlZWtpbmcpLgotCSAgRml4ZXMgIzY0MTA0Ny4KLQotMjAxMS0wMi0wOCAyMzozOToyNCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IFVwZGF0ZSBtaW4vbWF4IGJpdHJhdGUgYmVmb3JlIGZpcnN0IHBvc3RpbmcgdGhlbQotCSAgVGhpcyBhdm9pZHMgcG9zdGluZyBhbiBpbml0aWFsIG1pbi1iaXRyYXRlIG9mIEdfVUlOVE1BWCBhbmQgbWF4LWJpdHJhdGUKLQkgIG9mIDAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQxODU3Ci0KLTIwMTEtMDEtMjEgMTQ6NTM6MzkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB0dW5lIGRlZmF1bHQgZHVyYXRpb24gZXN0aW1hdGUgdXBkYXRlIGludGVydmFsCi0JICBSYXRoZXIgdGhhbiBhIGZpeGVkIGRlZmF1bHQgZnJhbWUgY291bnQsIGVzdGltYXRlIGZyYW1lIGNvdW50IHRvIGFpbSBmb3IKLQkgIGFuIGludGVydmFsIGR1cmF0aW9uIGRlcGVuZGluZyBvbiBmcHMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIG9sZAotCSAgZml4ZWQgZGVmYXVsdC4KLQotMjAxMS0wMS0xNCAxNToxNjowNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJldmVyc2UgcGxheWJhY2s7IG1pbmQga2V5ZnJhbWVzIGZvciBmcmFnbWVudCBib3VuZGFyeQotCi0yMDExLTAxLTEyIDE0OjQwOjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZW5zdXJlIG5vbi1lbXB0eSBjYW5kaWRhdGUgZnJhbWVzCi0KLTIwMTEtMDEtMTEgMTU6MjQ6MjMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBjbGFyaWZ5IHNvbWUgZGVidWcgc3RhdGVtZW50cwotCi0yMDExLTAxLTExIDE1OjI0OjAyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcHJvcGVybHkgdHJhY2sgdXBzdHJlYW0gdGltZXN0YW1wcwotCSAgLi4uIHJhdGhlciB0aGFuIHdpdGggYSBkZWxheS4KLQotMjAxMS0wMS0xMSAxNToyMzoyOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG5lZWQgcHJvcGVyIGZyYW1lIGR1cmF0aW9uIHRvIG9idGFpbiBzZW5zaWJsZSBmcmFtZSBiaXRyYXRlCi0KLTIwMTEtMDEtMTEgMTU6MjI6NTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcm9wZXIgaW5pdGlhbCB2YWx1ZXMgZm9yIGluZGV4IHRyYWNraW5nIHZhcmlhYmxlcwotCi0yMDExLTAxLTExIDEyOjA1OjEzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYXJyYW5nZSBmb3IgY29uc2lzdGVudCBldmVudCBoYW5kbGluZwotCi0yMDExLTAxLTEwIDE2OjU5OjU5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogaGVhZGVyIHN0eWxlIGNsZWFuaW5nCi0KLTIwMTEtMDEtMTAgMTc6MDc6MzggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcm92aWRlIHNvbWUgbW9yZSBpbml0aWFsIGZyYW1lIG1ldGFkYXRhIGluIHBhcnNlX2ZyYW1lCi0JICAuLi4gYW5kIGRvY3VtZW50IGFjY29yZGluZ2x5LgotCi0yMDExLTAxLTEwIDE2OjU2OjM2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHJlZmFjdG9yIHBhc3N0aHJvdWdoIGludG8gZm9ybWF0IGZsYWdzCi0JICBBbHNvIGFkZCBhIGZvcm1hdCBmbGFnIHRvIHNpZ25hbCBiYXNlcGFyc2UgdGhhdCBzdWJjbGFzcy9mb3JtYXQgY2FuIHByb3ZpZGUKLQkgIChwYXJzZWQpIHRpbWVzdGFtcCByYXRoZXIgdGhhbiBhbiBlc3RpbWF0ZWQgb25lLiAgSW4gcGFydGljdWxhciwgc3VjaCAic3Ryb25nIgotCSAgdGltZXN0YW1wIHRoZW4gYWxsb3dzIHRvIGUuZy4gZGV0ZXJtaW5lIGR1cmF0aW9uLgotCi0yMDExLTAxLTEwIDE1OjM0OjQ4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGludHJvZHVjZSBhIGJhc2VwYXJzZSBmcmFtZSB0byBzZXJ2ZSBhcyBjb250ZXh0Ci0JICAuLi4gYW5kIGFkanVzdCBzdWJjbGFzcyBwYXJzZXJzIGFjY29yZGluZ2x5Ci0KLTIwMTEtMDEtMDcgMTY6Mzk6NTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogcmVzdHJpY3QgZHVyYXRpb24gc2Nhbm5pbmcgdG8gcHVsbCBtb2RlIGFuZCBhdm9pZCBleHRyYSBzZXRfY2FwcyBjYWxsCi0KLTIwMTEtMDEtMDcgMTU6NTg6NDkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogdXBkYXRlIHNvbWUgZG9jdW1lbnRhdGlvbgotCSAgQWxzbyBhZGQgc29tZSBtb3JlIGRlYnVnLgotCi0yMDExLTAxLTA2IDExOjQxOjQ0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYWxsb3cgaW5jcmVhc2luZyBtaW5fc2l6ZSBmb3IgY3VycmVudCBmcmFtZSBwYXJzaW5nIG9ubHkKLQkgIEFsc28gY2hlY2sgdGhhdCBzdWJjbGFzcyBhY3R1YWxseSBlaXRoZXIgZGlyZWN0cyB0byBza2lwIGJ5dGVzIG9yCi0JICBpbmNyZWFzZXMgZXhwZWN0ZWQgZnJhbWUgc2l6ZSB0byBhdm9pZCBnb2luZyBub3doZXJlIGluIGJvZ3VzCi0JICBpbmRlZmluaXRlIGxvb3BpbmcuCi0KLTIwMTEtMDEtMTQgMTU6MjY6MzcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFlc3BhcnNlOiBmaXggcmVmYWN0b3IgcmVncmVzc2lvbiBpbiBsb29wIGJhc2VkIHBhcnNpbmcKLQotMjAxMS0wMS0wNiAxMToxNjo1NiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHBhc3MgYWxsIGF2YWlsYWJsZSBkYXRhIHRvIHN1YmNsYXNzIHJhdGhlciB0aGFuIG1pbmltdW0KLQkgIEFsc28gcmVkdWNlIHNvbWUgYWRhcHRlciBjYWxscyBhbmQgYWRkIGEgZmV3IGRlYnVnIHN0YXRlbWVudHMuCi0KLTIwMTAtMTItMTAgMTU6NTk6NDkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggcmV2ZXJzZSBwbGF5YmFjayBoYW5kbGluZwotCi0yMDEwLTEyLTEwIDE0OjU2OjEzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbWlub3IgdHlwbyBhbmQgZGVidWcgc3RhdGVtZW50IGNsZWFudXAKLQotMjAxMC0xMi0xMCAxNDo0MDowNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiByZWR1Y2UgbG9ja2luZwotCSAgLi4uIHdoaWNoIGlzIGVpdGhlciBhbHJlYWR5IG11dGUgYW5kL29yIGltcGxpY2l0bHkgaGFuZGxlZCBieSBTVFJFQU1fTE9DSy4KLQotMjAxMS0wMS0xNCAxNDowODozOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGF2b2lkIGxvb3AgaW4gZnJhbWUgbG9jYXRpbmcgaW50ZXJwb2xhdGlvbgotCi0yMDExLTAxLTE0IDE2OjMwOjExIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogYmFzZXBhcnNlOiBCZSBjYXJlZnVsIHRvIG5vdCBsb3NlIHRoZSBldmVudCByZWYKLQkgIERvbid0IHVucmVmIHRoZSBldmVudCBpZiBpdCBoYXNuJ3QgYmVlbiBoYW5kbGVkLCBiZWNhdXNlIHRoZSBjYWxsZXIKLQkgIGFzc3VtZXMgaXQgaXMgc3RpbGwgdmFsaWQgYW5kIG1pZ2h0IHJldXNlIGl0LgotCSAgSSByYW4gaW50byB0aGlzIHByb2JsZW0gd2hlbiB0cmFuc2NvZGluZyBhbiBBVkkgKHdpdGggbXAzIGluc2lkZSkKLQkgIHRvIGdwcC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzk1NTUKLQotMjAxMS0wMS0xMyAxNjoyNzowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBkb2NzOiBtaW5vciBiYXNlcGFyc2UgZG9jcy9jb21tZW50IGZpeGVzCi0JICBSZW1vdmUgY29weSduJ3Bhc3RlIGxlZnRvdmVycy4KLQotMjAxMC0xMS0wOCAxOTo1ODozMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGluY3JlYXNlIGtleWZyYW1lIGF3YXJlbmVzcwotCSAgLi4uIHdoaWNoIGlzIG5vdCBwYXJ0aWN1bGFyIHJlbGV2YW50IGZvciBhdWRpbyBwYXJzaW5nLCBidXQgbW9yZSBzbwotCSAgaW4gdmlkZW8gY2FzZXMuICBJbiBwYXJ0aWN1bGFyLCBhdXRvLWRldGVybWluZSBpZiBkZWFsaW5nIHdpdGggdmlkZW8gKGNhcHMpLgotCi0yMDEwLTExLTMwIDE1OjQxOjAyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYXZvaWQgdW5leHBlY3RlZCBzdHJheSBtZXRhZGF0YQotCi0yMDEwLTExLTMwIDE1OjQwOjI4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogdXNlIHByb3BlciBfTk9ORSBvdXRwdXQgdmFsdWUgd2hlbiBhcHBsaWNhYmxlCi0KLTIwMTAtMTEtMjUgMTg6NTY6NDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzCi0KLTIwMTAtMTEtMjUgMTc6MTQ6MjMgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2U6IGZpeCBwb3NzaWJsZSBkaXZpc2lvbi1ieS16ZXJvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1Nzg2Ci0KLTIwMTAtMTEtMTcgMTY6MjM6NDIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB1c2UgY29ycmVjdCBvZmZzZXQgd2hlbiBhZGRpbmcgaW5kZXggZW50cnkKLQkgIC4uLiBiZWFyaW5nIGluIG1pbmQgdGhhdCBCVUZGRVJfT0ZGU0VUIGlzIG1lZGlhIHNwZWNpZmljIGFuZCBtYXkgbm90Ci0JICByZWZsZWN0IHRoZSBiYXNpYyBvZmZzZXQgYWZ0ZXIgaGF2aW5nIGJlZW4gcGFyc2VkLgotCi0yMDEwLTExLTE3IDE0OjMwOjA5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZW5oYW5jZW1lbnRzIGZvciB0aW1lc3RhbXAgbWFya2VkIGZyYW1lZCBmb3JtYXRzCi0JICBUaGF0IGlzLCBhcyBzdWNoIGZvcm1hdHMgYWxsb3cgc3ViY2xhc3MgdG8gZXh0cmFjdCBwb3NpdGlvbiBmcm9tIGZyYW1lLAotCSAgaXQgaXMgcG9zc2libGUgdG8gZXh0cmFjdCBkdXJhdGlvbiAoaWYgbm90IG90aGVyd2lzZSBwcm92aWRlZCkKLQkgIGZyb20gKG5lYXIpIGxhc3QgZnJhbWUsIGFuZCBhIHNlZWsgY2FuIGZhaXJseSBhY2N1cmF0ZWx5IHRhcmdldCB0aGUgcmVxdWlyZWQKLQkgIHBvc2l0aW9uLgotCSAgRml4ZXMgIzYzMTM4OS4KLQotMjAxMC0xMS0xNiAxNzowNjoxNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlZmFjdG9yIGZyYW1lIHNjYW5uaW5nIHBlZm9ybWVkIGJ5IF9sb29wCi0KLTIwMTAtMTEtMTYgMTg6MDQ6MDAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzbGlnaHRseSBvcHRpbWl6ZSBzZW5kaW5nIG9mIHBlbmRpbmcgbmV3c2VnbWVudCBldmVudHMKLQotMjAxMC0xMS0xNiAxNzowNDozNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG1pbm9yIGZpeGVzIGFuZCBlbmhhbmNlbWVudHMKLQkgIEFycmFuZ2UgZm9yIHVwc3RyZWFtIGFzIHdlbGwgYXMgZG93bnN0cmVhbSBmbHVzaGluZyB3aGVuIHNlZWtpbmcuCi0JICBBbHNvIGRldGVybWluZSB1cHN0cmVhbSBzaXplIGFzIHdlbGwgYXMgc2Vla2FiaWxpdHkuICBBZGp1c3Qgc29tZSBjb21tZW50cwotCSAgdG8gcmVhbGl0eSBhbmQgZW1wbG95IGRlYnVnIHN0YXRlbWVudCBpbiBwcm9wZXIgb3JkZXIuCi0KLTIwMTAtMTAtMjkgMTQ6MDg6NTggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB1c2Ugb25seSB1cHN0cmVhbSBkdXJhdGlvbiBpZiBpdCBwcm92aWRlcyBvbmUKLQotMjAxMC0xMC0yNSAxNDoxNTo1MCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlZmxvdyB1cGRhdGVfYml0cmF0ZSBjb2RlCi0JICAuLi4gd2hpY2ggbWFrZXMgbG9jYWwgdmFyaWFibGVzIHJlcHJlc2VudCByZWFsIHN0YXRlIGJldHRlciwgYW5kIGF2b2lkcwotCSAgdHJpZ2dlcmluZyB1bm5lZWRlZCB1cGRhdGVzL2FjdGlvbnMuCi0KLTIwMTAtMTAtMjUgMTQ6MTM6NTEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBhZGQgc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzCi0KLTIwMTAtMTAtMTEgMTc6NDk6NDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwZXJmb3JtIGJpdHJhdGUgaGFuZGxpbmcgYW5kIHBvc3RpbmcgYWZ0ZXIgbmV3c2VnbWVudCBzZW5kaW5nCi0KLTIwMTAtMTAtMTEgMTc6MzY6MTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBpbW1lZGlhdGVseSBwb3N0IHN1YmNsYXNzIHByb3ZpZGVkIGJpdHJhdGUKLQotMjAxMC0xMC0wNSAxMToxNzo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBSZXZlcnQgImJhc2VwYXJzZTogYWRkIHNraXAgcHJvcGVydHkiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGI1YTNkNjAzNjNkODM3YTEwZjA1MzNjMTQxZWM5M2QxMGI3NDIzMTIuCi0JICBSZXZlcnRpbmcgdGhpcyBmb3Igbm93LCBzaW5jZSBubyBvbmUgcmVhbGx5IHNlZW1zIHRvIHJlbWVtYmVyIHdoeSB0aGlzCi0JICBwcm9wZXJ0eSBleGlzdHMgb3Igd2hhdCBpdCBjb3VsZCBwb3NzaWJseSBiZSBnb29kIGZvci4gSXQgc2VlbXMgdG8gaGF2ZQotCSAgYmVlbiBpbiB0aGUgb3JpZ2luYWwgbXAzcGFyc2Ugc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aW1lIGFuZCB3YXMgYmFjay0KLQkgIHBvcnRlZCBmcm9tIHRoZXJlLgotCi0yMDEwLTEwLTAzIDIzOjUwOjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyOiBMZXQgdGhlIGZvcm1hdCBzdHJpbmcgYWdyZWUgd2l0aCB0aGUgcGFyYW1ldGVycyB0byBmaXggY29tcGlsZXIgd2FybmluZwotCi0yMDEwLTA5LTIyIDE1OjQ0OjQzICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogRml4IGRlYnVnIG91dHB1dAotCSAgV2UgbG9zZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIgYWZ0ZXIgZ3N0X3BhZF9wdXNoKCksIHNvIHRoZSBkZWJ1ZwotCSAgcHJpbnQgc2hvdWxkIGhhcHBlbiBiZWZvcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyMjc2Ci0KLTIwMTAtMDktMjkgMTY6MTI6NDIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzdXBwb3J0IHJldmVyc2UgcGxheWJhY2sKLQkgIC4uLiBpbiBwdWxsIG1vZGUgb3IgdXBzdHJlYW0gZHJpdmVuLgotCi0yMDEwLTA5LTI3IDEyOjE2OjQzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVtb3ZlIGRvbmUgVE9ET3MgYW5kIHVwZGF0ZSBkb2N1bWVudGF0aW9uCi0KLTIwMTAtMDktMjUgMTQ6NDA6NTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB1c2UgZGV0ZXJtaW5lZCBzZWVrYWJpbGl0eSBpbiBhbnN3ZXJpbmcgU0VFS0lORyBxdWVyeQotCi0yMDEwLTA5LTI1IDE0OjMyOjA2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYWRkIHNraXAgcHJvcGVydHkKLQotMjAxMC0wOS0yMiAxNTowNzowOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiB1c2UgX3NldF9mcmFtZV9wcm9wcyB0byBjb25maWd1cmUgZnJhbWUgbGVhZF9pbiBhbmQgbGVhZF9vdXQKLQkgIC4uLiBwcm92aWRlZCBhIGNvcnJlc3BvbmRpbmcgZGVjb2RlciB3aXRoIHN1ZmZpY2llbnQgbGVhZGluZyBhbmQgZm9sbG93aW5nCi0JICBmcmFtZXMgdG8gY2Fycnkgb3V0IGZ1bGwgZGVjb2RpbmcgZm9yIGEgcGFydGljdWxhciBzZWdtZW50LgotCi0yMDEwLTA5LTIyIDE0OjEzOjE3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHVzZSBfc2V0X2R1cmF0aW9uIHRvIGNvbmZpZ3VyZSBkdXJhdGlvbiB1cGRhdGUgaW50ZXJ2YWwKLQkgIC4uLiBhcyBpdCBsb2dpY2FsbHkgYmVsb25ncyB0aGVyZSBhcyBvbmUgb3IgdGhlIG90aGVyOyBlaXRoZXIgc3ViY2xhc3MKLQkgIGNhbiBwcm92aWRlIGEgZHVyYXRpb24sIG9yIGFuIGVzdGltYXRlIG11c3QgYmUgbWFkZSAocmVndWFybHkgdXBkYXRlZCkuCi0KLTIwMTAtMDktMjIgMTM6NTU6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBsb2NhbGl6ZSB1c2Ugb2YgcHJvdmlkZWQgZnBzIGluZm9ybWF0aW9uCi0KLTIwMTAtMDktMjIgMTI6MTM6MTIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzZWVrIHRhYmxlIGFuZCBhY2N1cmF0ZSBzZWVrIHN1cHBvcnQKLQotMjAxMC0wOS0yMSAxMzo1NzoxMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHByb3BlciBhbmQgbW9yZSBleHRlbmRlZCBzZWdtZW50IGFuZCBzZWVrIGhhbmRsaW5nCi0JICBUaGF0IGlzLCBsb29wIHBhdXNlIGhhbmRsaW5nLCBzZWdtZW50IHNlZWsgc3VwcG9ydCwgbmV3c2VnbWVudCBmb3IgZ2FwcywgZXRjCi0KLTIwMTAtMDktMjEgMTA6NTc6MDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogYWRkIGluZGV4IHN1cHBvcnQKLQotMjAxMC0wOS0yMSAwOTo1OTo1NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlZmFjdG9yIHN0YXRlIHJlc2V0Ci0KLTIwMTAtMDktMjAgMTY6Mzk6MzcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcmV2ZW50IGluZGVmaW5pdGUgcmVzeW5jaW5nCi0KLTIwMTAtMDktMjAgMTM6NTc6NTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzcGVjaWZpYyBFT1MgaGFuZGxpbmcgaWYgbm8gb3V0cHV0IHNvIGZhcgotCi0yMDEwLTA5LTIwIDEzOjMxOjU3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYWRqdXN0IF9zZXRfZnJhbWVfcHJvcCBkb2N1bWVudGF0aW9uIGFuZCBzZXQgZGVmYXVsdCBhcyBjbGFpbWVkCi0KLTIwMTAtMDktMjAgMTM6MzA6NTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggYml0cmF0ZSBjb3B5LWFuZC1wYXN0ZSBhbmQgdXBkYXRlIGhldXJpc3RpYwotCi0yMDEwLTA5LTE3IDE4OjMzOjI5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcG9zdCBkdXJhdGlvbiBtZXNzYWdlIGlmIGF2ZXJhZ2UgYml0cmF0ZXMgaXMgdXBkYXRlZAotCi0yMDEwLTA5LTE3IDE4OjI0OjIyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHJlbW92ZSBpc19zZWVrYWJsZSB2bWV0aG9kIGFuZCB1c2UgYSBzZXRfc2VlayBpbnN0ZWFkCi0JICBTZWVrYWJpbGl0eSwgbGlrZSBkdXJhdGlvbiwgZXRjIGlzIHVubGlrZWx5IHRvIGNoYW5nZSAoZnJlcXVlbnRseSksIGFuZAotCSAgdGhlIGRlZmF1bHQgYXNzdW1wdGlvbiBjb3ZlcnMgbW9zdCBjYXNlcywgc28gbGV0IHN1YmNsYXNzIHNldCB3aGVuIG5lZWRlZC4KLQkgIEF0IHRoZSBzYW1lIHRpbWUsIGFsbG93IHN1YmNsYXNzIHRvIGluZGljYXRlIGlmIGl0IGhhcyBzZWVrLW1ldGFkYXRhICh0YWJsZSkKLQkgIGF2YWlsYWJsZSwgYW5kIHBvc3NpYmx5IGhhdmUgaXQgcHJvdmlkZSBhbiBhdmVyYWdlIGJpdHJhdGUuCi0KLTIwMTAtMDktMTcgMTc6MjE6NDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogYWRkIGFub3RoZXIgaG9vayBmb3Igc3ViY2xhc3MgcHJpb3IgdG8gcHVzaGluZyBidWZmZXIKLQkgIC4uLiBhbmQgYWxsb3cgc3ViY2xhc3MgdG8gcGVyZm9ybSBjdXN0b20gc2VnbWVudCBjbGlwcGluZywgb3IgdG8KLQkgIGVtaXQgdGFncyBvciBtZXNzYWdlcyBhdCB0aGlzIHRpbWUuCi0KLTIwMTAtMDktMTcgMTc6MTk6MzcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiAwIGNvbnZlcnRzIHRvIDAgYnkgZGVmYXVsdAotCi0yMDEwLTA5LTE2IDE4OjU2OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHJlZmFjdG9yIGNvbnZlcnNpb24gdXNpbmcgaGVscGVyIGZ1bmN0aW9uIGFuZCBleHBvcnQgZGVmYXVsdCBjb252ZXJ0Ci0KLTIwMTAtMDktMTYgMTg6MzU6NDcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzdHJlYW1saW5lIHF1ZXJ5IGhhbmRsaW5nCi0KLTIwMTAtMDktMTYgMTE6NTE6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogY2xlYW51cCBzdHJ1Y3QgYW5kIHJlbW92ZSB1bnVzZWQgbWVtYmVyCi0KLTIwMTAtMDktMjIgMTY6MDc6MjQgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBBbGxvdyBjaGFpbmluZyBvZiBzdWJjbGFzcyBldmVudCBoYW5kbGVycwotCSAgVGhpcyBhbGxvd3MgdGhlIGNoaWxkIGNsYXNzIHRvIGNoYWluIGl0cyBldmVudCBoYW5kbGVyIHdpdGgKLQkgIEdzdEJhc2VQYXJzZSwgc28gdGhhdCBzdWJjbGFzc2VzIGRvbid0IGhhdmUgdG8gZHVwbGljYXRlIGFsbCB0aGUgZGVmYXVsdAotCSAgZXZlbnQgaGFuZGxpbmcgbG9naWMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyMjc2Ci0KLTIwMTAtMDgtMjcgMTg6MzU6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBEb24ndCB1c2UgR1NUX0ZMT1dfSVNfRkFUQUwoKQotCSAgQWxzbyBkb24ndCBwb3N0IGFuIGVycm9yIG1lc3NhZ2UgZm9yIFVORVhQRUNURUQgYW5kIGRvIGl0Ci0JICBmb3IgTk9UX0xJTktFRC4KLQotMjAxMC0wOS0wNiAxNDoxMjowMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG5vbi1USU1FIHNlZWsgZXZlbnQgaXMgc2ltcGx5IG5vdCBoYW5kbGVkCi0KLTIwMTAtMDYtMTUgMTU6MzQ6MDUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggc2VlayBldmVudCByZWYgaGFuZGxpbmcKLQotMjAxMC0wNi0xNSAxNTozMzozNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHByZXZlbnQgYXJpdGhtZXRpYyBvdmVyZmxvd3MgaW4gcHVsbCBtb2RlIGJ1ZmZlciBjYWNoZSBoYW5kbGluZwotCi0yMDEwLTA2LTE1IDE1OjMyOjM0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZml4IHNlZWsgaGFuZGxpbmcKLQkgIEFsbG93IGEgZmV3IG1vcmUgc2VlayBldmVudCB0eXBlIGNvbWJpbmF0aW9ucywgYW5kIHJlYWxseSB1c2UgdGhlIHJlc3VsdAotCSAgb2YgZ3N0X3NlZ21lbnRfc2V0X3NlZWsgdG8gcGVyZm9ybSB0aGUgc2Vlay4gIEFsc28gYWRkIHNvbWUgZGVidWcuCi0KLTIwMTAtMDMtMjYgMTg6NTY6NDkgKzAwMDAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBEb24ndCBlbWl0IGJpdHJhdGUgdGFncyB0b28gZWFybHkKLQkgIFdlIHdhaXQgdG8gcGFyc2UgYSBtaW5pbXVtIG51bWJlciBvZiBmcmFtZXMgKDEwLCBhcmJpdHJhcmlseSkgYmVmb3JlCi0JICBlbWl0aW5nIGJpdHJhdGUgdGFncyBzbyB0aGF0IG91ciBlYXJseSBlc3RpbWF0ZXMgYXJlIG5vdCB3aWxkbHkKLQkgIGluYWNjdXJhdGUgZm9yIHN0cmVhbXMgdGhhdCBzdGFydCB3aXRoIGEgc2lsZW5jZS4gSWYgdGhlIHN0cmVhbSBlbmRzCi0JICBiZWZvcmUgdGhhdCwgd2UganVzdCBlbWl0IHRoZSB0YWdzIGFueXdheS4KLQkgIFdoaWxlIGl0IF93b3VsZF8gYmUgbmljZXIgdG8gYmUgc3BlY2lmeSB0aGUgdGhyZXNob2xkIHRvIHN0YXJ0IHB1c2hpbmcKLQkgIHRoZSB0YWdzIGluIHRlcm1zIG9mIGR1cmF0aW9uLCB0aGlzIHdvdWxkIGludHJvZHVjZSBtb3JlIGNvbXBsZXhpdHkgdGhhbgotCSAgdGhpcyBtZXJpdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE0OTkxCi0KLTIwMTAtMDMtMjYgMTg6MjA6MjQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBTZXQgdGhlIGxhc3Qgc3RvcCB0byB0aGUgYnVmZmVyIHN0YXJ0dGltZSBpZiB0aGUgZHVyYXRpb24gaXMgaW52YWxpZAotCSAgLi4uaW5zdGVhZCBvZiBub3Qgc2V0dGluZyBpdCBhdCBhbGwuCi0KLTIwMTAtMDMtMjYgMTg6MTk6MDAgKzAxMDAgIEpvc2h1YSBNLiBEb2UgPGpvc2hAam9zaGRvZS5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IFNlbmQgTkVXU0VHTUVOVCBldmVudCB3aXRoIGNvcnJlY3Qgc3RhcnQgYW5kIHBvc2l0aW9uCi0JICBJbnN0ZWFkIG9mIHRha2luZyB0aGUgbGFzdCBzdG9wICh3aGljaCBjb3VsZCBiZSBidWZmZXIgZW5kdGltZSBpbnN0ZWFkCi0JICBvZiBzdGFydHRpbWUpIGFsd2F5cyB0YWtlIHRoZSBidWZmZXIgc3RhcnR0aW1lLgotCSAgRml4ZXMgYnVnICM2MTQwMTYuCi0KLTIwMTAtMDMtMjUgMTc6MDk6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGF1ZGlvcGFyc2VyczogcmVtb3ZlIHVudXNlZCBHc3RCYXNlUGFyc2VDbGFzc1ByaXZhdGUgc3RydWN0dXJlCi0KLTIwMTAtMDMtMjUgMTE6MjI6NTggKzAwMDAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGF1ZGlvcGFyc2VyczogQWRkIGJpdHJhdGUgY2FsY3VsYXRpb24gdG8gYmFzZXBhcnNlCi0JICBUaGlzIG1ha2VzIGJhc2VwYXJzZSBrZWVwIGEgcnVubmluZyBhdmVyYWdlIG9mIHRoZSBzdHJlYW0gYml0cmF0ZSwgYXMKLQkgIHdlbGwgYXMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYml0cmF0ZXMuIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGEKLQkgIHZmdW5jIHRvIG1ha2Ugc3VyZSB0aGF0IHBlci1mcmFtZSBvdmVyaGVhZCBmcm9tIHRoZSBjb250YWluZXIgaXMgbm90Ci0JICBhY2NvdW50ZWQgZm9yIGluIHRoZSBiaXRyYXRlIGNhbGN1bGF0aW9uLgotCSAgV2UgdGFrZSBjYXJlIG5vdCB0byBvdmVycmlkZSB0aGUgYml0cmF0ZSwgbWluaW11bS1iaXRyYXRlLCBhbmQKLQkgIG1heGltdW0tYml0cmF0ZSB0YWdzIGlmIHRoZXkgaGF2ZSBiZWVuIHBvc3RlZCB1cHN0cmVhbS4gV2UgYWxzbwotCSAgcmF0ZS1saW1pdCB0aGUgZW1pc3Npb24gb2YgYml0cmF0ZSBzbyB0aGF0IGl0IGlzIG9ubHkgdHJpZ2dlcmVkIGJ5IGEKLQkgIGNoYW5nZSBvZiA+MTAga2Jwcy4KLQotMjAxMC0wMS0xNCAxMTo1MDozMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IHJlbmFtZSBiYXNlcGFyc2UgR1R5cGUgbmFtZSB0byBhdm9pZCBwb3NzaWJsZSBjb25mbGljdHMKLQotMjAxMC0wMS0wNSAxNTowNTowNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IGRvY3VtZW50YXRpb24gZml4ZXMKLQotMjAwOS0xMi0yMSAxODoxODozOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGFkanVzdCBzZWVrIGhhbmRsaW5nIGFuZCBuZXdzZWdtZW50IHNlbmRpbmcKLQkgIFBlcmZvcm0gc2FuaXR5IGNoZWNrIG9uIHR5cGUgb2Ygc2VlaywgYW5kIG9ubHkgcGVyZm9ybSBvbmUgdGhhdCBpcwotCSAgYXBwcm9wcmlhdGVseSBzdXBwb3J0ZWQuICBBZGp1c3QgZG93bnN0cmVhbSBuZXdzZWdtZW50IGV2ZW50Ci0JICB0byBmaXJzdCBidWZmZXIgdGltZXN0YW1wIHRoYXQgaXMgc2VudCBkb3duc3RyZWFtLgotCi0yMDA5LTEyLTIxIDExOjU5OjQ1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbWlub3IgcmVmYWN0b3IgY2xlYW51cAotCSAgQWxzbyBhZGQgc29tZSBkZWJ1ZyBsb2dnaW5nLgotCi0yMDA5LTEyLTE4IDIxOjAyOjQwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogaW1wbGVtZW50IGxlZnRvdmVyIGRyYWluaW5nIGluIHB1bGwgbW9kZQotCi0yMDA5LTEyLTE2IDE4OjM4OjMzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcHJvdmlkZSBkZWZhdWx0IGNvbnZlcnNpb24gdXNpbmcgYnBzIGlmIG5vIGZwcyBhdmFpbGFibGUKLQkgIEFsc28gc3RvcmUgZXN0aW1hdGVkIGR1cmF0aW9uIGFzIHN1Y2gsIHJhdGhlciB0aGFuIHByZXRlbmRpbmcgb3RoZXJ3aXNlCi0JICAoZS5nLiBzZXQgYnkgc3ViY2xhc3MpLgotCi0yMDA5LTEyLTE4IDEzOjMwOjI5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogY2hlY2sgZm9yIHJlbWFpbmluZyBkYXRhIHdoZW4gZHJhaW5pbmcgaW4gcHVzaCBtb2RlCi0KLTIwMDktMTItMTggMTM6MzA6MDcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggcHVsbCBtb2RlIGNhY2hlIHNpemUgY29tcGFyaXNvbgotCi0yMDA5LTEyLTExIDEwOjI1OjE2IC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2U6IGZpeCBhIGZvcm1hdCBzdHJpbmcgYXMgcmVwb3J0ZWQgb24gaXJjLgotCi0yMDA5LTEwLTI5IDE1OjE4OjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGN1c3RvbSBidWZmZXJmbGFnIGluZGljYXRlcyBub3QgdG8gY291bnQgZnJhbWUgaW4gc3RhdHMKLQotMjAwOS0xMS0yNyAxNzoyNzozMiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IHJlZmVyZW5jZSBHc3RCYXNlUGFyc2Ugbm93IGxpdmVzIGhlcmUKLQotMjAwOS0xMS0yOCAxODoxMzozMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgotCSAgYXVkaW9wYXJzZXJzOiByZW5hbWUgJ2FhY3BhcnNlJyBwbHVnaW4gdG8gZ2VuZXJpYyAnYXVkaW9wYXJzZXJzJyBwbHVnaW4KLQotMjAwOS0xMC0yOSAxNjowNTowMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVzZXQgcGFzc3Rocm91Z2ggbW9kZSB0byBkZWZhdWx0IChkaXNhYmxlZCkgb24gYWN0aXZhdGlvbgotCi0yMDA5LTEwLTI5IDE1OjE2OjU5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBlbnN1cmUgYnVmZmVyIG1ldGFkYXRhIGlzIHdyaXRhYmxlCi0KLTIwMDktMTAtMjggMTQ6MDY6MTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGZpeC9lbmhhbmNlIERJU0NPTlQgbWFya2luZwotCSAgSW4gcGFydGljdWxhciwgY29uc2lkZXIgRElTQ09OVCA9PSAhc3luYywgYW5kIGFsbG93IHN1YmNsYXNzIHRvIHF1ZXJ5Ci0JICBzeW5jIHN0YXRlLCBhcyBpdCBtYXkgd2FudCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2tzIGRlcGVuZGluZwotCSAgb24gd2hldGhlciBzeW5jIHdhcyBhY2hpZXZlZCBlYXJsaWVyIG9uLgotCSAgQWxzbyBhcnJhbmdlIGZvciBzdWJjbGFzcyB0byBxdWVyeSB3aGV0aGVyIGxlZnRvdmVyIGRhdGEgaXMgYmVpbmcgZHJhaW5lZC4KLQotMjAwOS0xMS0yMyAxNTo0ODoyNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogYWRkIHRpbWVzdGFtcCBoYW5kbGluZywgYW5kIGRlZmF1bHQgY29udmVyc2lvbgotCSAgSW4gcGFydGljdWxhciwgKG9wdGlvbmFsbHkpIHByb3ZpZGUgYmFzZXBhcnNlIHdpdGggYSBub3Rpb24gb2YgZnJhbWVzIHBlciBzZWNvbmQKLQkgIChhbmQgdGhlcmVmb3JlIGFsc28gZnJhbWUgZHVyYXRpb24pIGFuZCBoYXZlIGl0IHRyYWNrIGZyYW1lIGFuZCBieXRlIGNvdW50cy4KLQkgIFRoaXMgd2F5LCBzdWJjbGFzcyBjYW4gcHJvdmlkZSBiYXNlcGFyc2Ugd2l0aCBmcHMgYW5kIGhhdmUgaXQgcHJvdmlkZSBkZWZhdWx0Ci0JICBidWZmZXIgdGltZSBtZXRhZGF0YSBhbmQgY29udmVyc2lvbnMsIHRob3VnaCBzdWJjbGFzcyBjYW4gc3RpbGwgaW5zdGFsbAotCSAgY2FsbGJhY2tzIHRvIGhhbmRsZSBzdWNoIGl0c2VsZi4KLQotMjAwOS0xMC0yOCAxMjowMjowMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZG9jdW1lbnRhdGlvbiBmaXhlcwotCi0yMDA5LTEwLTI4IDEyOjAwOjA4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB1c2VfZml4ZWRfY2FwcyBmb3Igc3JjIHBhZAotCSAgQWZ0ZXIgYWxsLCBzdHJlYW0gaXMgYXMtaXMsIGFuZCB0aGVyZSBpcyBsaXR0bGUgbW9sZGluZyB0byBkb3duc3RyZWFtJ3MKLQkgIHRhc3RlIHRoYXQgY2FuIGJlIGRvbmUuICBJZiBzdWJjbGFzcyBjYW4gYW5kIHdhbnRzIHRvIGRvIHNvLCBpdCBjYW4KLQkgIHN0aWxsIG92ZXJyaWRlIGFzIHN1Y2guCi0KLTIwMDktMTEtMjAgMTc6MzI6MTMgKzAxMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYWFjcGFyc2U6IEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncwotCi0yMDA5LTEwLTExIDExOjIyOjExICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBmaXggd2FybmluZ3MgaW4gbWFjb3N4IHNub3cgbGVvcGFyZAotCi0yMDA5LTA5LTI1IDE3OjAyOjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYWFjcGFyc2U6IGZvcmVnbyAoYm9ndXMpIHBhcnNpbmcgb2YgYWxyZWFkeSBwYXJzZWQgKHJhdykgaW5wdXQKLQotMjAwOS0wOC0wNyAxMzowNzoxNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcHJldmVudCBpbmZpbml0ZSBsb29wIHdoZW4gZHJhaW5pbmcKLQotMjAwOS0wOC0wNyAxMzowNjoyOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZml4IG1pbm9yIG1lbW9yeSBsZWFrCi0KLTIwMDktMDctMTQgMTQ6MDg6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBhYWNwYXJzZTogQWRkIGZ1bmN0aW9uIGZvciB0aGUgYmFzZXBhcnNlIHN1YmNsYXNzIHRvIHB1c2ggYnVmZmVycyBkb3duc3RyZWFtCi0JICBBbHNvIGhhbmRsZSB0aGUgY2FzZSBncmFjZWZ1bGx5IHdoZXJlIHRoZSBzdWJjbGFzcyBkZWNpZGVzIHRvIGRyb3AKLQkgIHRoZSBmaXJzdCBidWZmZXJzIGFuZCBoYXMgbm8gY2FwcyBzZXQgeWV0LiBJdCdzIHN0aWxsIHJlcXVpcmVkIHRvCi0JICBoYXZlIHZhbGlkIGNhcHMgc2V0IHdoZW4gdGhlIGZpcnN0IGJ1ZmZlciBzaG91bGQgYmUgcGFzc2VkIGRvd25zdHJlYW0uCi0KLTIwMDktMDctMTQgMTQ6MDc6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBzZWVrIGV2ZW50IGxlYWtpbmcKLQotMjAwOS0wNi0wMSAxMzo1NjoxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcHJvcGFnYXRlIHJldHVybiB2YWx1ZSBvZiBHc3RCYXNlUGFyc2U6OnNldF9zaW5rX2NhcHMoKQotCSAgZ3N0X2Jhc2VfcGFyc2Vfc2lua19zZXRjYXBzKCkgcHJlc3VtYWJseSBzaG91bGQgZmFpbCBpZiB0aGUgc3ViY2xhc3MKLQkgIHJldHVybnMgRkFMU0UgZnJvbSBpdHMgOjpzZXRfc2lua19jYXBzKCkgZnVuY3Rpb24uCi0KLTIwMDktMDYtMDEgMTM6NDc6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGRvbid0IHRyeSB0byBHU1RfTE9HIGFuIGFscmVhZHktZnJlZWQgY2FwcyBzdHJpbmcKLQkgIFRoZSBwcm9wZXIgd2F5IHRvIGxvZyBjYXBzIGlzIHZpYSBHU1RfUFRSX0ZPUk1BVCBhbnl3YXkuCi0KLTIwMDktMDUtMjYgMTk6NDM6NTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGZpeCBkZWJ1ZyBjYXRlZ29yeQotCi0yMDA5LTA0LTI3IDIyOjM5OjE1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggKHJlZ3Jlc3Npb24gaW4pIG5ld3NlZ21lbnQgaGFuZGxpbmcKLQkgIChhYWNwYXJzZSwgYW1ycGFyc2UsIGZsYWNwYXJzZSkuICBGaXhlcyAjNTgwMTMzLgotCi0yMDA5LTA0LTA3IDA0OjUzOjAyICswMzAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBzbGlnaHRseSBicm9rZW4gYnVmZmVyLWluLXNlZ21lbnQgY2hlY2sgKGFhY3BhcnNlLCBhbXJwYXJzZSwgZmxhY3BhcnNlKQotCi0yMDA5LTA0LTA1IDAzOjUwOjE5ICswMzAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBwdXNoIG1vZGUgc2Vla2luZyAoYWFjcGFyc2UsIGFtcnBhcnNlKQotCSAgU2VuZGluZyB0aGUgZmx1c2gtc3RhcnQgZXZlbnQgZm9yd2FyZCBiZWZvcmUgdGFraW5nIHRoZSBzdHJlYW0gbG9jayBhY3R1YWxseQotCSAgd29ya3MsIGluIGNvbnRyYXN0IHRvIGRlYWRsb2NraW5nIGluIGRvd25zdHJlYW0gcHJlcm9sbF93YWl0IChodW5rIDEpLgotCSAgQWZ0ZXIgdGhhdCB3ZSBnZXQgdGhlIGNoYWluIGZ1bmN0aW9uIGJlaW5nIHN0dWNrIGluIGEgYnVzeSBsb29wLiBUaGlzIGlzIGZpeGVkCi0JICBieSB1cGRhdGluZyB0aGUgbWluaW11bSBmcmFtZSBzaXplIGluc2lkZSB0aGUgc3luY2hyb25pemF0aW9uIGxvb3AgYmVjYXVzZSB0aGUKLQkgIHN1YmNsYXNzIGFza3MgZm9yIG1vcmUgZGF0YSBpbiB0aGlzIHdheSAoaHVuayAyKS4KLQkgIEZpbmFsbHksIHRoaXMgbGVhZHMgdG8gYSB2ZXJ5IHByb2JhYmxlIGNyYXNoIGJlY2F1c2UgdGhlIHN1YmNsYXNzIGNhbiBmaW5kIGEKLQkgIHZhbGlkIGZyYW1lIHdpdGggYSBzaXplIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBkYXRhIGluIHRoZQotCSAgYWRhcHRlci4gVGhpcyBtYWtlcyB0aGUgc3Vic2VxdWVudCBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciBjYWxsIHJldHVybiBOVUxMLAotCSAgd2hpY2ggaXMgbm90IGV4cGVjdGVkIChodW5rIDMpLgotCi0yMDA5LTAzLTMxIDE2OjA3OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBEZWxheSBuZXdzZWdtZW50IGFzIGxvbmcgYXMgcG9zc2libGUuCi0JICBJZiBuZXdzZWdtZW50IGlzIHNlbnQgKHRvbykgZWFybHksIGNhcHMgbWF5IG5vdCB5ZXQgYmUgZml4ZWQvc2V0LAotCSAgYW5kIGRvd25zdHJlYW0gbWF5IG5vdCBoYXZlIGJlZW4gbGlua2VkLgotCi0yMDA5LTAyLTI3IDExOjI0OjM3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmV2ZXJ0IGxhc3QgY2hhbmdlIGFuZCBwcm9wZXJseSBmaXgKLQkgIEJhc2VwYXJzZSBpbnRlcm5hbHkgYnJlYWtzIHRoZSBzZW1hbnRpY3Mgb2YgYSBfY2hhaW4gZnVuY3Rpb24gYnkgY2FsbGluZyBpdCB3aXRoCi0JICBidWZmZXI9PU5VTEwuIFRoZSByZXNvbiBJIGJlbGl2ZWQgaXQgd2FzIG9rYXkgdG8gcmVtb3ZlIGl0IHdhcyB0aGF0IHRoZXJlIGlzCi0JICBhbHNvIGFuIHVuY2hlY2tlZCBhY2Nlc3MgdG8gYnVmZmVyIGxhdGVyIGluIF9jaGFpbi4gQWN0dWFsbHkgdGhhdCBjb2RlIGlzIHdyb25nLAotCSAgYXMgaXQgbW9zdCBwcm9iYWJseSB3YW50cyB0byBzZXQgZGlzY29udCBvbiB0aGUgb3V0Z29pbmcgYnVmZmVyLgotCi0yMDA5LTAyLTI2IDExOjAyOjA2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVtb3ZlIGNoZWNrcyBmb3IgYnVmZmVyPT1OVUxMCi0JICBBY2NvcmRpZm4gdG8gZG9jcyBmb3IgR3N0UGFkQ2hhaW5GdW5jdGlvbiBidWZmZXIgY2Fubm90IGJlIE5VTEwuIElmIHdlIHdvdWxkCi0JICBsZWF2ZSB0aGUgY2hlY2ssIHdlIHdvdWxkIGFsc28gbmVlZCBtb3JlIHN1Y2ggY2hlY2sgYmVsb3cuCi0KLTIwMDktMDEtMzAgMTg6MTg6MTAgKzAwMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBGaXggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBwYXJzZV9mcmFtZSBmdW5jdGlvbi4KLQkgIEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBkZWZhdWx0IHBhcnNlX2ZyYW1lIGZ1bmN0aW9uIGluIGJvdGgKLQkgIGNvcGllcyBvZiBHc3RCYXNlUGFyc2UKLQotMjAwOC0xMS0xMyAxNDoyMTozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvOiBGaXggYmFzZXBhcnNlIHR5cGUgbmFtZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICAqIGdzdC9hbXJwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIEZpeCBiYXNlcGFyc2UgdHlwZSBuYW1lLgotCi0yMDA4LTExLTEzIDEyOjU5OjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEFkZCB0d28gbmV3IGJhc2VwYXJzZSBiYXNlZCBwYXJzZXJzIChhYWMgYW5kIGFtcikgZnJvbSBCdWcgIzUxODg1Ny4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9hYWNwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2FhY3BhcnNlL2dzdGFhY3BhcnNlLmM6Ci0JICAqIGdzdC9hYWNwYXJzZS9nc3RhYWNwYXJzZS5oOgotCSAgKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICAqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuaDoKLQkgICogZ3N0L2FtcnBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYW1ycGFyc2UvZ3N0YW1ycGFyc2UuYzoKLQkgICogZ3N0L2FtcnBhcnNlL2dzdGFtcnBhcnNlLmg6Ci0JICAqIGdzdC9hbXJwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgICogZ3N0L2FtcnBhcnNlL2dzdGJhc2VwYXJzZS5oOgotCSAgQWRkIHR3byBuZXcgYmFzZXBhcnNlIGJhc2VkIHBhcnNlcnMgKGFhYyBhbmQgYW1yKSBmcm9tIEJ1ZyAjNTE4ODU3LgotCi0yMDExLTAzLTIwIDAwOjU2OjA4ICswMTAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZVsyXTogTWFrZSBzcmMgcXVlcnkgTVQtc2FmZQotCSAgSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZWxlbWVudCBtaWdodCBiZSBnb2luZyBkb3duIHdoaWxlIHRoZSBldmVudCBhcnJpdmVzCi0KLTIwMTEtMDMtMjAgMDA6NTY6MDggKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBNYWtlIHNyYyBxdWVyeSBNVC1zYWZlCi0JICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBlbGVtZW50IG1pZ2h0IGJlIGdvaW5nIGRvd24gd2hpbGUgdGhlIGV2ZW50IGFycml2ZXMKLQotMjAxMS0wNC0wOCAxNDo1NjozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZVsyXTogVW5yZWYgZXZlbnRzIGlmIHRoZSBwYXJlbnQgZWxlbWVudCBkaXNhcHBlYXJlZAotCi0yMDExLTAzLTIxIDE2OjAxOjA1ICswMTAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZVsyXTogTWFrZSB1cHN0cmVhbSBldmVudHMgTVQtc2FmZQotCi0yMDExLTA0LTA4IDE0OjU1OjA5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2U6IFVucmVmIGV2ZW50cyBpZiB0aGUgcGFyZW50IGVsZW1lbnQgZGlzYXBwZWFyZWQKLQkgIEFuZCBhbHNvIHVucmVmIGV2ZW50cyBpZiB0aGUgYmFzZXRyYW5zZm9ybSBzdWJjbGFzcyBoYXMgbm8KLQkgIGV2ZW50IGhhbmRsZXIgYW5kIHRoZSBldmVudCBpcyBub3QgZm9yd2FyZGVkIGF0IGFsbC4KLQotMjAxMS0wMy0yMSAxNjowMTowNSArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZTogTWFrZSB1cHN0cmVhbSBldmVudHMgTVQtc2FmZQotCi0yMDExLTAzLTI5IDExOjU3OjA2ICswMjAwICBTdGlhbiBTZWxuZXMgPHN0aWFzZWxuQGNpc2NvLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIGdzdHF1ZXVlLCBnc3RxdWV1ZTI6IGNoZWNrIGlmIHBhcmVudCBvZiBwYWQgaXMgTlVMTCBpbiBfZ2V0Y2FwcwotCSAgUGFyZW50IG9mIHRoZSBwYWQgKHRoZSBxdWV1ZSkgbWF5IGJlIHNldCB0byBOVUxMIHdoaWxlIHRoZXJlIGlzCi0JICBhIGJ1ZmZlciBhbGxvYyBnb2luZyBvbi4KLQotMjAxMS0wNC0wOCAxNDo1MDoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogRml4IGdldGNhcHMgYW5kIGV2ZW50IGZ1bmN0aW9uIGZyb20gbGFzdCBjb21taXQKLQkgIFJldHVybiBBTlkgY2FwcyBpZiB0aGUgcGFyZW50IGRpc2FwcGVhcmVkLCBpLmUuIHRoZSB0ZW1wbGF0ZSBjYXBzCi0JICBhbmQgZG9uJ3QgbGVhayBldmVudHMgaWYgdGhlIHBhcmVudCBkaXNhcHBlYXJlZC4KLQotMjAxMS0wNC0wMSAwODo0NjoxNCArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFByb3RlY3QgYWdhaW5zdCBwYWQtcGFyZW50IGRpc2FwcGVhcmluZwotCi0yMDEwLTEyLTE0IDE2OjA2OjQ2ICswMTAwICBTdGlhbiBTZWxuZXMgPHN0aWFuLnNlbG5lc0B0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgaXRlcmF0b3I6IHJlc3luYyB0byBhdm9pZCBpbmZpbml0ZSBsb29wCi0KLTIwMTEtMDQtMDggMDk6MjA6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5ncwotCi0yMDExLTA0LTA4IDA5OjE1OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBSZW1vdmVkIHVudXNlZCBHQ29uZAotCi0yMDExLTA0LTA4IDA5OjA3OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBBZGQgYW5vdGhlciBjaGVjayBmb3IgdGhlIGZsdXNoaW5nIGZsYWcgYWZ0ZXIgdGFraW5nIHRoZSBsb2NrCi0JICBUaGlzIHByZXZlbnRzIGFub3RoZXIgcG90ZW50aWFsIGRlYWRsb2NrIHdoZW4gZmx1c2hpbmcgdGhlIHBhZAotCSAgYXQgZXhhY3RseSB0aGUgcmlnaHQgdGltZS4KLQotMjAxMS0wNC0wNyAxMToyNDozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogSW1tZWRpYXRlbHkgZHJvcCBtZXNzYWdlcyBhZnRlciBjYWxsaW5nIHRoZSBzeW5jIGhhbmRsZXIgaWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzIGJ1cwotCSAgT3RoZXJ3aXNlIHdlIG1pZ2h0IHdhaXQgZm9yZXZlciBmb3IgdGhlIG1lc3NhZ2UgdG8gYmUgcG9wcGVkIGZyb20KLQkgIHRoZSBxdWV1ZSBpZiBhIHN5bmMgaGFuZGxlciByZXR1cm5lZCBHU1RfQlVTX0FTWU5DLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NzAwNQotCi0yMDExLTA0LTA3IDExOjE5OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IFVzZSBhIGNvbnN0cnVjdC1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gY2hpbGQgYnVzZXMgYW5kIG5vcm1hbCBidXNlcwotCSAgVGhpcyBhbGxvd3MgdG8gb25seSBjcmVhdGUgdGhlIHNvY2tldHBhaXIgd2hlbiBpdCBpcyByZWFsbHkgcmVxdWlyZWQgaW5zdGVhZAotCSAgb2YgYWx3YXlzIGNyZWF0aW5nIGl0IGFuZCBpbW1lZGlhdGVseSBkZXN0cm95aW5nIGl0IGFnYWluIGZvciBjaGlsZCBidXNlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDcwMDUKLQotMjAxMS0wNC0wNyAyMDo0NzoyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jOgotCSAgdGVzdHM6IGFkZCBzb21lIGJhc2ljIHVuaXQgdGVzdHMgZm9yIHF1ZXVlMgotCi0yMDExLTA0LTA3IDIwOjQ1OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZml4IGJ1ZmZlciBsZWFrIG9uIGVvcyB3aGVuIHVzaW5nIHRoZSByaW5nIGJ1ZmZlcgotCi0yMDExLTAxLTExIDE0OjI3OjM1ICswMTAwICBJZGFyIFRvbGxlZnNlbiA8aXRvbGxlZnNAY2lzY28uY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBGaXhlcyBtZW1vcnkgbGVhayBvbiBvdXRfZmx1c2hpbmcgZXJyb3IgaW4gZ3N0X3F1ZXVlMl9jcmVhdGVfcmVhZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDY5NzIKLQotMjAxMS0wNC0wNyAxOTo0NDo0NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBtaW5vciBtZW1vcnkgbGVhawotCi0yMDExLTA0LTA3IDE3OjM0OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkgIGZ1bm5lbDogbWlub3IgZWxlbWVudCBkZXNjcmlwdGlvbiBmaXgKLQotMjAxMS0wNC0wNyAxNjoxMzo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA0LTA3IDE2OjAyOjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IGFkZCBOT19TSEFSRSBmbGFnIHRvIG1lbW9yeQotCSAgQWRkIGEgTk9fU0hBUkUgZmxhZyB0byBtZW1vcnkgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQgbm90IGJlIHNoYXJlZAotCSAgYmV0d2VlbiBidWZmZXJzLgotCi0yMDExLTA0LTA3IDE2OjA4OjM0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6Ci0JICBkb2NzOiByZW1vdmUgZmlsZSBhcyB3ZSBoYXZlIGRvY3MvZGVzaWduL3BhcnQtbWlzc2luZy1wbHVnaW5zLnR4dAotCi0yMDExLTA0LTA3IDEwOjQ4OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBIYW5kbGUgdGFnIGFuZCBjdXN0b20gZG93bnN0cmVhbSBldmVudHMgdGhlIHNhbWUKLQkgIEVzcGVjaWFsbHkgZHJvcCB0YWcgZXZlbnRzIHdoZW4gZmx1c2hpbmcgdG8gbm90IHNlbmQgdGhlbSBvdmVyCi0JICBhbmQgb3ZlciBhZ2Fpbi4KLQkgIFNob3VsZCd2ZSBiZWVuIGluIHRoZSBsYXN0IGNvbW1pdCBhbHJlYWR5IGJ1dCBJIGZvcmdvdCB0byBjYWxsCi0JICBnaXQgcmViYXNlIC0tY29udGludWUuLi4KLQotMjAxMS0wNC0wNyAxMDo0MDoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmxhCi0KLTIwMTEtMDQtMDcgMTA6Mjk6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IFNlbmQgc3luY3Jvbml6ZWQgY3VzdG9tIGRvd25zdHJlYW0vYm90aCBldmVudHMgZG93bnN0cmVhbSBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkCi0JICBJbnN0ZWFkIG9mIGp1c3Qgc2lsZW50bHkgZHJvcHBpbmcgdGhlbS4gVGhlIHNhbWUgd2FzIGRvbmUgZm9yIHRhZyBldmVudHMKLQkgIGJlZm9yZSBhbHJlYWR5LgotCSAgRml4ZXMgYnVnICM2MzU3MTguCi0KLTIwMTEtMDQtMDYgMTk6MTk6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkgIG1lbW9yeTogZG9uJ3QgZm9sbG93IHRoZSBwYXJlbnQgaW4gdGhlIGZhbGxiYWNrIHNoYXJlCi0KLTIwMTEtMDQtMDYgMTg6NTc6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBidWZmZXI6IG1ha2UgbWVtb3J5IHdyaXRhYmxlIGluIF9wZWVrCi0JICBNYWtlIHRoZSBtZW1vcnkgd3JpdGFibGUgd2hlbiB3ZSBhcmUgYXNrZWQgdG8gX3BlZWsgd2l0aCBNQVBfV1JJVEUuCi0JICBJbXByb3ZlIGRlYnVnZ2luZyBvZiBtaW5pb2JqZWN0LgotCi0yMDExLTA0LTA2IDE2OjM3OjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgbWluaW9iamVjdDogZml4IGRlYnVnCi0KLTIwMTEtMDQtMDYgMTQ6MjA6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDQtMDYgMTQ6MDY6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogQWRkIHByaXZhdGUgQVBJIHRvIHNldCBhIEdzdEJ1cyBpbiBjaGlsZCBtb2RlCi0JICBUaGlzIGlzIHVzZWQgYnkgR3N0QmluIHRvIGNyZWF0ZSBhIGNoaWxkIGJ1cyB3aXRob3V0Ci0JICBhIHNvY2tldHBhaXIgYmVjYXVzZSBjaGlsZCBidXNlcyB3aWxsIGFsd2F5cyB3b3JrCi0JICBzeW5jaHJvbm91cy4gT3RoZXJ3aXNlIHRvbyBtYW55IHNvY2tldHMgY291bGQgYmUKLQkgIGNyZWF0ZWQgYW5kIHRoZSBsaW1pdCBvZiBmaWxlIGRlc2NyaXB0b3JzIGZvciB0aGUKLQkgIHByb2Nlc3MgY291bGQgYmUgcmVhY2hlZC4KLQkgIEZpeGVzIGJ1ZyAjNjQ2NjI0LgotCi0yMDExLTA0LTA2IDEzOjU2OjQ5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgUmV2ZXJ0ICJidXM6IE9ubHkgY3JlYXRlIHRoZSBzaWduYWxsaW5nIHNvY2tldCBwYWlyIHdoZW4gcmVxdWlyZWQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDRiZjhmMTUyNGY2ZTMzNzRiM2YzYmM1NzMyMjMzNzcyM2QwNmI5MjguCi0KLTIwMTEtMDQtMDYgMTM6NTY6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBSZXZlcnQgImJ1czogQ2hlY2sgaWYgcGVuZGluZyBtZXNzYWdlcyBhcmUgaW4gdGhlIHF1ZXVlIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBiZDFjNDAwMTE0MzRjMWVmYWE2OTZkYzk4ZWY4NTVlZjljY2U5YjI4LgotCi0yMDExLTA0LTA2IDExOjM4OjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgY2hlY2tzOiBtYWtlIHRlc3RzX21hbnlfYmlucyBpbiBiaW4gdW5pdCB0ZXN0IGEgYml0IGZhc3RlcgotCSAgTm90IGRvaW5nIGV4cGVuc2l2ZSBjaGVja3Mgd2hlbiBsaW5raW5nIGVsZW1lbnRzIG1ha2VzIHRoaW5ncwotCSAgbXVjaCBmYXN0ZXIuCi0KLTIwMTEtMDQtMDYgMTE6MzA6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICBjaGVja3M6IGFkZCBzb21lIHF1ZXVlcyB0byB0ZXN0X21hbnlfYmlucyB1bml0IHRlc3QKLQkgIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY2FsbHMgaW4gYSByb3cgcGVyIHRocmVhZC4KLQotMjAxMS0wNC0wNiAxMjowMzoxOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGJ1czogQ2hlY2sgaWYgcGVuZGluZyBtZXNzYWdlcyBhcmUgaW4gdGhlIHF1ZXVlCi0JICBXZSBjYW4ndCByZWx5IGNvbXBsZXRlbHkgb24gdGhlIHBvbGwgZmQgYmVjYXVzZSB0aGUgZmQgbWlnaHQgYmUKLQkgIGNyZWF0ZWQgYWZ0ZXIgbWVzc2FnZXMgd2VyZSBwb3N0ZWQgdG8gdGhlIGJ1cy4KLQotMjAxMS0wNC0wNiAxMTo0NToyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IEdzdERhdGUvR0RhdGUgaGFzIGEgYWJicmV2aWF0aW9uIG5vdwotCi0yMDExLTA0LTAzIDE2OjExOjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgY2hlY2tzOiBhZGQgR3N0QmluIHVuaXQgdGVzdCB0aGF0IGNyZWF0ZXMgYSBsb3Qgb2YgYmlucwotCSAgQ3VycmVudGx5IGZhaWxzIChpbiBub3JtYWwgY2lyY3Vtc3RhbmNlcykgYmVjYXVzZSB3ZSBjcmVhdGUgYQotCSAgc29ja2V0IHBhaXIgZm9yIGVhY2ggYmluJ3MgYnVzIGFuZCBleGhhdXN0IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlCi0JICBmaWxlIGRlc2NyaXB0b3JzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjYyNAotCi0yMDExLTA0LTA1IDE2OjIyOjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgYnVzOiBPbmx5IGNyZWF0ZSB0aGUgc2lnbmFsbGluZyBzb2NrZXQgcGFpciB3aGVuIHJlcXVpcmVkCi0JICBPdGhlcndpc2UgYSBuZXcgb25lIHdvdWxkIGJlIGNyZWF0ZWQgZm9yIGV2ZXJ5IHNpbmdsZSBidXMgYW5kCi0JICB0aGUgcHJvY2VzcyBjb3VsZCBlYXNpbHkgcnVuIG91dCBvZiBmaWxlIGRlc2NyaXB0b3JzLgotCSAgRml4ZXMgYnVnICM2NDY2MjQuCi0KLTIwMTEtMDQtMDUgMTQ6MzY6NDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IEFkZCBkYXRlIGFzIGEgdHlwZSBhYmJyZXZpYXRpb24gb2YgR0RhdGUKLQkgIFNlZSBidWcgIzY0NjY5Ni4KLQotMjAxMS0wNC0wNCAxNTo1NjozMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMWNjYmUwOSB0byBjM2NhZmUxCi0KLTIwMTEtMDQtMDQgMTE6MTc6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wNC0wNCAwMzozMzo0NiArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIGdzdHBvbGw6IHJldHJ5IHJlYWRpbmcgdGhlIGNvbnRyb2wgc29ja2V0IHRvIHJlbGVhc2UgcHJvcGVybHkgYWxsIHdha2V1cHMKLQkgIGlmIHNldC0+Y29udHJvbF9wZW5kaW5nIGlzIHNldCB0byAwIGJ1dCB3ZSBkaWRuJ3Qgbm90IHN1Y2NlZCByZWFkaW5nCi0JICB0aGUgY29udHJvbCBzb2NrZXQsIGZ1dHVyZSBjYWxscyB0byBnc3RfcG9sbF93YWl0KCkgd2lsbCBiZSBhd2Fpa2VuCi0JICBieSB0aGUgY29udHJvbCBzb2NrZXQgd2hpY2ggd2lsbCBub3QgYmUgcmVsZWFzZWQgcHJvcGVybHkgYmVjYXVzZQotCSAgc2V0LT5jb250cm9sX3BlbmRpbmcgaXMgYWxyZWFkeSAwLCBjYXVzaW5nIGFuIGluZmluaXRlIGxvb3AuCi0KLTIwMTEtMDQtMDQgMTA6MTg6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IERvbid0IGFsbG93IGludmFsaWQgR0RhdGVzIGluIGFsbCBzdHJ1Y3R1cmVzIGFuZCBkb24ndCBhbGxvdyBOVUxMIEdEYXRlcyBpbiB0YWdsaXN0cwotCSAgU29tZSBjb2RlIChlLmcuIGdzdHZvcmJpc3RhZy5jKSBhc3N1bWVzIG5vbi1OVUxMIEdEYXRlcyBpbiB0YWdsaXN0cyBhbmQKLQkgIGV4cGxvZGVzIG90aGVyd2lzZSBhbmQgTlVMTCBvciBpbnZhbGlkIEdEYXRlcyBkb24ndCBtYWtlIG11Y2ggc2Vuc2UgYW55d2F5LgotCi0yMDExLTAzLTI1IDE1OjU2OjA3ICswMTAwICBUaG9tYXMgS3Jpc3RlbnNlbiA8dGhvbWFzLmtyaXN0ZW5zZW5AY2lzY28uY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9sbDogZG9uJ3QgY2FsbCBXU0FXYWl0Rm9yTXVsdGlwbGVFdmVudHMgd2l0aCBubyBldmVudHMKLQkgIEZpeGVzIGVycm9yIGNhdWdodCBieSBNaWNyb3NvZnQgQXBwbGljYXRpb24gVmVyaWZpZXIuCi0KLTIwMTEtMDQtMDMgMTY6MTg6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGRvY3M6IGFkZCBwb2ludGVyIHRvIHBhcnQtc2Vla2luZy50eHQgZGVzaWduIGRvY3MgdG8gZXZlbnQgc2VlayBmbGFncyBkb2NzCi0KLTIwMTEtMDQtMDMgMTY6MTg6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSAgY2hlY2tzOiBpZ25vcmUgbmV3IGZ1bm5lbCB1bml0IHRlc3QgYmluYXJ5Ci0KLTIwMTEtMDQtMDIgMTQ6NTE6MTggKzAxMDAgIEJhc3RpZW4gTm9jZXJhIDxoYWRlc3NAaGFkZXNzLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICB1dGlsczogQXZvaWQgdXNpbmcgInR5cGUiIGFzIG5hbWUgZm9yIGEgdmFyaWFibGUgYW5kIGEgbWFjcm8gYXJndW1lbnQgaW4gR1NUX0JPSUxFUlBMQVRFCi0JICBUaGlzIGNhdXNlZCAicmUtZGVjbGFyYXRpb24iIHByb2JsZW1zLgotCSAgLi9jbHV0dGVyLWdzdC12aWRlby1zaW5rLmM6IEluIGZ1bmN0aW9uIOKAmGNsdXR0ZXJfZ3N0X3ZpZGVvX3NpbmtfaW5pdF9pbnRlcmZhY2Vz4oCZOgotCSAgLi9jbHV0dGVyLWdzdC12aWRlby1zaW5rLmM6MjMxOjE6IHdhcm5pbmc6IGRlY2xhcmF0aW9uIG9mIOKAmENsdXR0ZXJHc3RWaWRlb1NpbmvigJkgc2hhZG93cyBhIGdsb2JhbCBkZWNsYXJhdGlvbiBbLVdzaGFkb3ddCi0JICAuL2NsdXR0ZXItZ3N0LXZpZGVvLXNpbmsuaDo2NDo0NDogd2FybmluZzogc2hhZG93ZWQgZGVjbGFyYXRpb24gaXMgaGVyZSBbLVdzaGFkb3ddCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2NTMxCi0KLTIwMTEtMDQtMDEgMTM6NTY6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogV2hlbiByZXF1ZXN0aW5nIGFuIGV4aXN0aW5nIHBhZCBwcmludCBhIGdfY3JpdGljYWwoKSBpbnN0ZWFkIG9mIHVzaW5nIGFuIGFzc2VydGlvbgotCSAgU29tZSBhcHBsaWNhdGlvbnMgYXJlIHJlcXVlc3RpbmcgdGhlIHNhbWUgcGFkIG5hbWUgbXVsdGlwbGUgdGltZXMKLQkgIGFuZCB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZCBhbmQgZGlmZmVyZW50IGZyb20gZWxlbWVudCB0byBlbGVtZW50Ci0JICBidXQgd2UgZG9uJ3Qgd2FudCB0byBicmVhayBhcHBsaWNhdGlvbnMgdGhhdCB3b3JrIGp1c3QgZmluZS4KLQkgIEluIDAuMTEgdGhpcyBjaGVjayBzaG91bGQgYmUgYW4gYXNzZXJ0aW9uIGFnYWluLCBhbHRob3VnaCBlbGVtZW50cwotCSAgaGF2ZSB0byBkbyBtYW51YWwgY2hlY2tpbmcgaWYgdGhlIHBhZCBhbHJlYWR5IGV4aXN0cyBhZ2FpbiBiZWNhdXNlCi0JICBpdCBjYW4ndCBiZSBkb25lIGluIGEgdGhyZWFkc2FmZSB3YXkgaGVyZS4KLQotMjAxMS0wNC0wMSAxMzo1MzozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBVc2UgZ2ludDY0L2d1aW50NjQgc3RyaW5nIHBhcnNpbmcgZnVuY3Rpb25zCi0JICBBbmQgY2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIHBhZCBuYW1lcyBhcmUgaW5zaWRlIHRoZSB2YWxpZAotCSAgZ2ludC9ndWludCByYW5nZS4KLQotMjAxMS0wNC0wMSAxMzo1MTozMSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogc3RydG9bdV1sKCkgcmV0dXJucyBhIGdbdV1sb25nCi0KLTIwMTEtMDQtMDEgMTA6NDc6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wNC0wMSAxMDo0NjowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBwb3J0aW5nIGd1aWRlIHdpdGggYnVmZmVybGlzdCBjaGFuZ2VzCi0KLTIwMTEtMDMtMzEgMTk6MjU6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgotCSAgZGVzaWduIGRvY3M6IGRvY3VtZW50IGV4cGVjdGVkIGJlaGF2aW91ciBmb3IgQUNDVVJBVEUgYW5kIEtFWV9VTklUIHNlZWsgZmxhZ3MKLQotMjAxMS0wMy0zMSAxODozOTo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JICBieXRld3JpdGVyOiBkb24ndCBhZGQgTlVMTCBkYXRhCi0KLTIwMTEtMDMtMzEgMTc6NTU6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0LmgKLQotMjAxMS0wMy0zMSAxNzo1MTowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVybGlzdDogc2ltcGxpZnkgYnVmZmVybGlzdHMKLQkgIFdlIG5vdyBoYXZlIG11bHRpcGxlIG1lbW9yeSBibG9ja3MgYXMgcGFydCBvZiB0aGUgYnVmZmVycyBhbmQgd2UgY2FuIHRoZXJlZm9yZQotCSAgcmVkdWNlIHRoZSBidWZmZXJsaXN0IHRvIGEgc2ltcGxlIGFycmF5IG9mIGJ1ZmZlcnMuCi0KLTIwMTEtMDMtMzEgMTA6NTM6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgotCSAgZ3N0YWJpOiBBZGQgc29tZSBuZXcgc3RydWN0dXJlcyBmb3IgeDg2LTY0Ci0KLTIwMTEtMDMtMzEgMTA6NDY6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3g4Nl82NC5oOgotCSAgbGlic2FiaTogQWRkIGxvdHMgb2YgbmV3IHN0cnVjdHVyZXMgZm9yIHg4Ni02NAotCi0yMDExLTAzLTMxIDEwOjMxOjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogdXBkYXRlIHBvcnRpbmcgZG9jCi0KLTIwMTEtMDMtMzAgMjA6MDU6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JICBmdW5uZWw6IGZpeCBmb3IgQVBJIGNoYW5nZQotCi0yMDExLTAzLTMwIDE5OjU4OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExLWZkbwotCSAgQ29uZmxpY3RzOgotCSAgZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeQotCSAgZ3N0L2dzdGVsZW1lbnQuYwotCi0yMDExLTAzLTMwIDE5OjAxOjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkgIGRvY3M6IHVwZGF0ZSBkb2NzCi0KLTIwMTEtMDMtMzAgMTg6NDU6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZG9jczogdXBkYXRlIGRvY3VtZW50YXRpb24KLQotMjAxMS0wMy0zMCAxNjo0Nzo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGJ1ZmZlcjogbW9yZSBBUEkgdHdlYWtzCi0JICBfdHJpbSAtPiBfcmVzaXplCi0JICBfY3JlYXRlX3N1YiAtPiBjb3B5X3JlZ2lvbgotCi0yMDExLTAzLTMwIDE1OjI5OjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlci50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmxpc3QudHh0OgotCSAgZGVzaWduOiB1cGRhdGUgZGVzaWduIGRvY3MKLQotMjAxMS0wMy0zMCAxMzowNDozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dDoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGRlc2lnbjogdXBkYXRlIGRvY3MKLQotMjAxMS0wMy0zMCAxMDo0ODo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogTWFrZSBhc3NpZ25tZW50IG9mIHF1ZXVlIElEcyBhbmQgcGFkIG5hbWVzIHRocmVhZHNhZmUKLQkgIEFsc28gYWRkIGEgdGVzdCBmb3IgbmFtaW5nIHBhZHMgYnkgdGhlIGNhbGxlciBhbmQgcmV0dXJuIE5VTEwKLQkgIHdoZW4gcmVxdWVzdGluZyBhbiBhbHJlYWR5IGV4aXN0aW5nIHBhZC4KLQotMjAxMS0wMy0yOSAyMzo1ODo0MyArMDIwMCAgQW5kcmVhcyBGcmlzY2ggPGZyYXhpbmFzQG9wZW5kcmVhbWJveC5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogU2V0IHRoZSBzaW5nbGUgcXVldWUgSUQgdG8gdGhlIElEIG9mIHRoZSByZXF1ZXN0ZWQgcGFkIGlmIG9uZSB3YXMgZ2l2ZW4gYnkgdGhlIGNhbGxlcgotCi0yMDExLTAzLTI5IDE5OjE3OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1lbW9yeTogZnVydGhlciBtZW1vcnkgdHdlYWtpbmcKLQkgIEFsbG93IGZvciBhdXRvbWF0aWMgbWVyZ2luZyBvZiBtZW1vcnkgYmxvY2sgaW4gdGhlIF9tYXAgZnVuY3Rpb24gYW5kIGF1dG9tYXRpYwotCSAgZnJlZWluZyBvZiB0aGUgdGVtcG9yYXJ5IG1lbW9yeS4KLQkgIFJlbW92ZSBzb21lIHVubmVlZGVkIGZ1bmN0aW9ucy4KLQkgIEFkZCBwb3NzaWJpbGl0eSB0byBmb3JjZSB3cml0YWJsZSBzcGFubmVkIG1lbW9yeS4KLQotMjAxMS0wMy0yOSAxNzoxNzo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBpbXBsZW1lbnQgQ09QWV9NRVJHRQotCi0yMDExLTAzLTI5IDE2OjUyOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGJ1ZmZlcjogY2xlYW4gdXAgX3NwYW4gYW5kIGFkZCBtb3JlIGdfcmV0dXJuX2lmLi4KLQotMjAxMS0wMy0yOSAxNjoyMjo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBGaXggc2FuaXR5IGNoZWNrcyBmb3IgcmVxdWVzdCBwYWQgdGVtcGxhdGVzIHdpdGhvdXQgJQotCi0yMDExLTAzLTI5IDEzOjUxOjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IG9wdGltaXplIG1lbW9yeSBoYW5kbGluZwotCi0yMDExLTAzLTI5IDExOjU3OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IEFkZCBzb21lIG1vcmUgc2FuaXR5IGNoZWNrcyB0byB0aGUgcGFkIG5hbWUgY2hlY2tpbmcgb2YgcmVxdWVzdCBwYWRzIGluIGFsbCBjYXNlcwotCSAgRXNwZWNpYWxseSBjaGVjayBpZiBhIHBhZCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cy4KLQotMjAxMS0wMy0yOSAxMTo1MjowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBDaGVjayAldSB0b28gd2hlbiB0cnlpbmcgdG8gZmluZCBhIHBhZCB0ZW1wbGF0ZSBmb3IgYSByZXF1ZXN0IHBhZAotCi0yMDExLTAzLTI5IDExOjMxOjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IG1vdmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBpbiBwcml2YXRlIHN0cnVjdAotCi0yMDExLTAzLTI4IDIxOjAxOjEzICswMjAwICBGcmF4aW5hcyA8YW5kcmVhcy5mcmlzY2hAbXVsdGltZWRpYS1sYWJzLmRlPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IEZpeCBhcmJpdHJhcnkgc2luayArIHNvdXJjZSBwYWQgbmFtaW5nCi0JICBVc2UgdGhlIHN0cmluZyBwcm92aWRlZCBieSB0aGUgY2FsbGVyIGZvciB0aGUgc2lua3BhZCBuYW1lCi0JICBpZiBwb3NzaWJsZS4gTm90ZSB0aGF0IGFsbCBzYW5pdHkgY2hlY2tpbmcgZm9yIHRoaXMgbmFtZQotCSAgaXMgYWxyZWFkeSBkb25lIGluIEdzdEVsZW1lbnQuCi0JICBGaXhlcyBCdWcgIzY0NTkzMQotCi0yMDExLTAzLTI5IDExOjE4OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkgIGZ1bm5lbDogQWRkIHNvbWUgbW9yZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBiZWhhdmlvdXIgb2YgZnVubmVsCi0KLTIwMTEtMDMtMjkgMTE6MDg6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSAgZnVubmVsOiBTZW5kIGEgbmV3c2VnbWVudCBldmVudCBhZnRlciBmbHVzaC1zdG9wCi0KLTIwMTEtMDMtMjkgMTE6MDc6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSAgZnVubmVsOiBTb21lIHJhbmRvbSBjbGVhbnVwCi0KLTIwMTEtMDMtMjkgMTA6NTY6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jOgotCSAgZnVubmVsOiBVc2UgYSBHc3RQYWQgc3ViY2xhc3MgZm9yIHRoZSBzaW5rcGFkcyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwYWQncyBlbGVtZW50IHByaXZhdGUgZGF0YQotCi0yMDExLTAzLTI5IDEwOjQyOjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3RhdGljZWxlbWVudHMueG1sOgotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5oOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkgIGZ1bm5lbDogSW50ZWdyYXRlIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgcmVuYW1lIHRoZSB0eXBlcwotCi0yMDExLTAzLTI5IDEwOjM5OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZnVubmVsLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYzoKLQkgIGZ1bm5lbDogSW1wb3J0IGZ1bm5lbCBlbGVtZW50IGZyb20gZmFyc2lnaHQyCi0KLTIwMTEtMDMtMjkgMTE6MDc6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXI6IG1vcmUgYnVmZmVyIHVwZGF0ZXMKLQotMjAxMS0wMy0yOCAyMDoyMDozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZWZzOiBmaXggZGVmcwotCi0yMDExLTAzLTI4IDIwOjExOjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExLWZkbwotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2dzdC5jCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMKLQotMjAxMS0wMy0yOCAxOToxOTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBidWZmZXI6IGZpeCBzdWJidWZmZXJzCi0KLTIwMTEtMDMtMjggMTY6NDA6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogaW1wbGVtZXQgdHJpbSBhbmQgc2V0X3NpemUKLQotMjAxMS0wMy0yOCAxNTo1MjoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVyOiBtb3JlIGZpeGVzCi0KLTIwMTEtMDMtMjggMTA6Mjg6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIGJ1ZmZlcjogYWRkIG1vcmUgbWV0aG9kcwotCi0yMDExLTAzLTI0IDIxOjIxOjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IGFkZCBjbGFzcyBpbml0Ci0KLTIwMTEtMDMtMjQgMjE6MTg6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXI6IGZpeCByZW1haW5pbmcgdW5pdCB0ZXN0cwotCi0yMDExLTAzLTI0IDIwOjA5OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGZpeCB1bml0IHRlc3QKLQotMjAxMS0wMy0yNCAxMzowMTowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgbWVtb3J5OiByZW1vdmUgbWVtb3J5IG1ldGFkYXRhIGFnYWluCi0KLTIwMTEtMDMtMjQgMTE6NDk6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgotCSAgbWVtb3J5OiBtb3JlIGZpeGVzCi0JICBBdXRvbWF0aWNhbGx5IG1ha2UgdGhlIG1lbW9yeSBvZiBhIGJ1ZmZlciB3cml0YWJsZSB3aGVuIHRoZSBidWZmZXIgaXMgd3JpdGFibGUKLQkgIGFuZCB0aGUgbWVtb3J5IGlzIGFza2VkIHRvIG1hcHBlZCBXUklURS4KLQkgIEFkZCBkb2NzCi0KLTIwMTEtMDMtMjMgMjA6NTI6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKLQkgIG1lbW9yeTogbW9yZSB3b3JrIG9uIGltcGxlbWVudGluZyBidWZmZXIgbWVtb3J5Ci0KLTIwMTEtMDMtMjIgMjA6NTE6MDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9iaXRyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOgotCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6Ci0JICBtZW1vcnk6IG1vcmUgd29yayBvbiBwb3J0aW5nIHRoZSB1bml0IHRlc3RzCi0KLTIwMTEtMDMtMjEgMTk6MTU6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZGVudGl0eS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKLQkgIHRlc3RzOiBtYWtlIHNvbWUgdGVzdHMgY29tcGlsZQotCi0yMDExLTAzLTIxIDE4OjEzOjU1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkqIHRlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvYWRhcHRlcl90ZXN0LmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBtZW1vcnk6IHBvcnQgY29kZSB0byBuZXcgYnVmZmVyIGRhdGEgQVBJCi0KLTIwMTEtMDMtMjEgMTM6MDc6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkgIG1lbW9yeTogbW9yZSBmaXhlcwotCSAgRml4IHNwYW4gYW5kIGlzX3NwYW4KLQkgIEltcGxlbWVudCBidWZmZXIgbWVtb3J5Ci0KLTIwMTEtMDMtMjEgMDk6NTE6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIFdJUCB1c2UgbWVtb3J5IGluIGJ1ZmZlcgotCi0yMDExLTAzLTIwIDExOjQyOjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVtb3J5LmM6Ci0JKiBnc3QvZ3N0bWVtb3J5Lmg6Ci0JICBtZW1vcnk6IG1vcmUgaW1wcm92ZW1lbnRzCi0KLTIwMTEtMDMtMTkgMTA6NDU6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogbW9yZSBtZW1vcnkgaW1wcm92ZW1lbnRzCi0KLTIwMTEtMDMtMTggMjE6NDU6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuYzoKLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogYWRkIG1vcmUgbWVtb3J5IG9wZXJhdGlvbnMKLQotMjAxMS0wMy0xOCAxOToyODoxNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdG1lbW9yeS5jOgotCSogZ3N0L2dzdG1lbW9yeS5oOgotCSAgbWVtb3J5OiBhZGQgbWVtb3J5IGltcGxlbWVudGF0aW9uCi0KLTIwMTEtMDMtMTggMTg6MzU6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZW1vcnkuaDoKLQkgIG1lbW9yeTogYWRkIEFQSSBmb3IgaGFuZGxpbmcgbWVtb3J5IGJsb2NrcwotCSAgQWRkcyBzb21lIEFQSSB0byBoYW5kbGUgbWVtb3J5IGJsb2Nrcy4KLQotMjAxMS0wMy0wOCAxODoxODoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1ldGEuaDoKLQkgIG1ldGE6IGZpeCBkb2NzCi0KLTIwMTEtMDMtMjggMjE6MjE6MDAgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IFJldHVybiBGQUxTRSBpZiB3ZSBkb24ndCBoYW5kbGUgYW4gZXZlbnQKLQkgIGJhc2VzcmMncyBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgcmV0dXJucyBUUlVFIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUKLQkgIGV2ZW50IGlzIGhhbmRsZWQgb3Igbm90LiBUaGlzIGZpeGVzIHRoZSBoYW5kbGVyIHRvIGNvbmZvcm0gd2l0aCB0aGUKLQkgIGV4cGVjdGVkIGJlaGF2aW91ciAod2hpY2ggaXMgdG8gb25seSByZXR1cm4gVFJVRSB3aGVuIHRoZSBldmVudCBoYXMKLQkgIGFjdHVhbGx5IGJlbm4gaGFuZGxlZCkuIGdzdF9iaW5fZG9fbGF0ZW5jeV9mdW5jKCkgZGVwZW5kZWQgb24gdGhpcwotCSAgKGluY29ycmVjdCkgYmVoYXZpb3VyLCBhbmQgaXMgbm93IG1vZGlmaWVkIGFzIHdlbGwuCi0JICAoUmVtYWluaW5nIDEtbGluZXIgY2hhbmdlIGluIGdzdGJhc2VzcmMuYyBpcyB0byBrZWVwIGdzdC1pbmRlbnQgaGFwcHkpCi0KLTIwMTEtMDMtMjUgMjI6MDg6NDEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMTkzYjcxNyB0byAxY2NiZTA5Ci0KLTIwMTEtMDMtMjUgMTQ6NTU6MzkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGI3N2UyYmYgdG8gMTkzYjcxNwotCi0yMDExLTAzLTI1IDA5OjI3OjU4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGQ4ODE0YjYgdG8gYjc3ZTJiZgotCi0yMDExLTAzLTI1IDA4OjU5OjM3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDZhYWEyODYgdG8gZDg4MTRiNgotCi0yMDExLTAzLTI0IDE4OjQ4OjQxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2YWVjNmI5IHRvIDZhYWEyODYKLQotMjAxMS0wMy0yNCAxODoyNzowOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSAgZG9jczogZml4IHNvbWUgZ3RrLWRvYyB3YXJuaW5ncwotCSAgRG9jdW1lbnQgdGhlIHF1ZXVlIGxlYWt5IGVudW1zLgotCi0yMDExLTAzLTI0IDE4OjI1OjA4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IHNldCBtYXggdmFsdWUgZm9yIHRvIHRoZSBtYXRjaGluZyBvbmUgZm9yIHRoZSBkYXRhdHlwZQotCSAgVGhlIHByb3BlcnR5IGlzIGd1aW50NjQsIHNvIHVzZSBHX01BWFVJTlQ2NCBpbnN0ZWFkIG9mIEdfTUFYVUlOVC4KLQotMjAxMS0wMy0yNCAxMzoyMjo1NyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBkb2NzOiBjbGVhbnVwIGFuZCB4cmVmIGZpeGVzCi0JICBEZWFsIHdpdGggdGhlIGhpbnRzIGZyb20gZ3RrLWRvYyBhbmQgZml4IHRoZSB4cmVmcy4gQXBwbHkgYSB3b3JrLWFyb3VuZCBmb3IgKCkKLQkgIHByZWNlZGVuY2Ugb3ZlciBALiBNb3ZlICJNVCBTYWZlIiB0ZXh0IHRvIGRvYyBib2R5IGluIG1hbnkgcGxhY2VzLiBUcmltIGVvbAotCSAgd2hpdGVzcGFjZXMuCi0KLTIwMTEtMDMtMjMgMTY6NDI6MjQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHByaW50IGZsb3cgcmV0dXJuIGFzIGEgbmFtZSBpbiBkZWJ1ZyBsb2cKLQotMjAxMS0wMy0yMyAxNzoxMzo1OCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICBkb2NzOiBkbyB4cmVmcyBmb3Igbm9uIGluc3RhbGxlZCBib29rcyB0b28KLQkgIEdldCB0aGUgeHJlZnMgZnJvbSB0aGUgYnVpbGRkaXIgZm9yIHRoZSBib29rcyBpbiB0aGUgc2FtZSBwYWNrYWdlcy4gVGhpcyBmaXhlcwotCSAgdGhlIGNyb3NzIHJlZmVyZW5jZXMgaWYgb25lIGRvZXMgbm90IGhhdmUgdGhlIGRvY3MgYWxyZWFkeSBpbnN0YWxsZWQuCi0KLTIwMTAtMDQtMTkgMjA6Mzk6NTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogS2VlcCBkb3duc3RyZWFtIGNhcHMgb3JkZXIgd2hlbiBmaXhhdGluZwotCSAgVGhpcyBhbGxvd3MgdXNlIHRvIHVzZSB0aGUgZmlyc3QgaW50ZXJzZWN0aW5nIGZvcm1hdCBwcmVmZXJlZCBieSBkb3duc3RyZWFtLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxNzA0NQotCi0yMDEwLTA0LTE5IDIwOjQwOjU2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IFJldGFpbiBjYXBzIG9yZGVyIHdoZW4gZ2V0dGluZyBjYXBzCi0JICBJZiB0aGUgZWxlbWVudCBnYXZlIHVzIGNhcHMgaW4gYSBzcGVjaWZpYyBvcmRlciwgbGV0J3MgcmV0YWluIHRoYXQKLQkgIGJ5IGludGVyc2VjdGluZyBhZ2FpbnN0IHRoZSB0ZW1wbGF0ZSBidXQgcmV0YWluaW5nIHRoZSBvcmRlciBnaXZlbgotCSAgYnkgdGhlIGVsZW1lbnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE3MDQ1Ci0KLTIwMTEtMDItMjUgMTA6MjU6MjYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgdGVzdHM6IGNhcHM6IFRlc3RzIGZvciB0aGUgbmV3IGNhcHMgaW50ZXJzZWN0aW9uIG1vZGUKLQkgIEFkZHMgdGVzdCBjYXNlcyBmb3IgdGhlIGNhcHMgJ2ZpcnN0JyBpbnRlcnNlY3QgbW9kZQotCSAgQWRkcyBhbm90aGVyIHRlc3QgZm9yIHRoZSAnemlnemFnJyBtb2RlCi0JICBGaXhlcyAjNjE3MDQ1Ci0KLTIwMTEtMDItMjUgMDg6NTA6MTIgLTAzMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3RjYXBzOiBuZXcgQVBJIDogZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwKLQkgIEp1c3QgbGlrZSBnc3RfY2Fwc19pbnRlcnNlY3QsIGJ1dCBhZGRzIGEgbmV3IHBhcmFtZXRlciAnbW9kZScKLQkgIHRoYXQgYWxsb3dzIHNlbGVjdGluZyB0aGUgaW50ZXJzZWN0aW9uIGFsZ29yaXRobSB0byB1c2UuCi0JICBDdXJyZW50bHkgd2UgaGF2ZSBHU1RfQ0FQU19JTlRFUlNFQ1RfTU9ERV9aSUdfWkFHIChkZWZhdWx0KSBhbmQKLQkgIEdTVF9DQVBTX0lOVEVSU0VDVF9NT0RFX0ZJUlNULgotCSAgQVBJOiBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbAotCSAgQVBJOiBHc3RDYXBzSW50ZXJzZWN0TW9kZQotCSAgQVBJOiBHU1RfQ0FQU19JTlRFUlNFQ1RfTU9ERV9aSUdfWkFHCi0JICBBUEk6IEdTVF9DQVBTX0lOVEVSU0VDVF9NT0RFX0ZJUlNUCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE3MDQ1Ci0KLTIwMTEtMDMtMTIgMTc6MDE6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bGlic2NwcC5jYzoKLQkgIHRlc3RzOiBhZGQgbGlic2NwcCB1bml0IHRlc3QgdG8gbWFrZSBzdXJlIGcrKyBsaWtlcyBvdXIgbGlicmFyeSBoZWFkZXJzCi0KLTIwMTEtMDMtMTIgMTY6NTg6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgotCSAgYnl0ZXJlYWRlciwgYnl0ZXdyaXRlcjogZml4IHVwIGlubGluZSBmdW5jdGlvbnMgdG8gbWFrZSBnKysgaGFwcHkKLQkgIGdzdGJ5dGVyZWFkZXIuaDogSW4gZnVuY3Rpb24g4oCYZ3VpbnQ4KiBnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkKEdzdEJ5dGVSZWFkZXIqLCBndWludCnigJk6Ci0JICBnc3RieXRlcmVhZGVyLmg6MjQ5Ojc1OiBlcnJvcjogaW52YWxpZCBjb252ZXJzaW9uIGZyb20g4oCYdm9pZCrigJkgdG8g4oCYZ3VpbnQ4KuKAmQotCSAgZ3N0Ynl0ZXdyaXRlci5oOiBJbiBmdW5jdGlvbiDigJhnYm9vbGVhbiBfZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlX2lubGluZShHc3RCeXRlV3JpdGVyKiwgZ3VpbnQp4oCZOgotCSAgZ3N0Ynl0ZXdyaXRlci5oOjE5Njo3NTogZXJyb3I6IGludmFsaWQgY29udmVyc2lvbiBmcm9tIOKAmHZvaWQq4oCZIHRvIOKAmGd1aW50OCrigJkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDU1OTUKLQotMjAxMS0wMy0yMiAxNjoyNjo1NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBnc3RlbGVtZW50OiBGaXggdHlwbyBpbiB0aGUgZG9jcwotCSAgR1NUX0VMRU1FTlRfSU5GTyB3aWxsIHBvc3QgYSBJTkZPIG1lc3NhZ2UsIG5vdCBhIFdBUk5JTkcKLQotMjAxMS0wMy0xOCAwODoyMjoyMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkgIHRhZ3NldHRlcjogUmVtb3ZpbmcgdW51c2VkIGRlYnVnIGNhdGVnb3J5Ci0JICB0YWdzZXR0ZXIncyBkZWJ1ZyBjYXRlZ29yeSBoYWQgYSB0eXBvIGFuZCB3YXMgdW51c2VkLiBSZW1vdmluZyBpdC4KLQotMjAxMS0wMy0xOCAxOTozNDo1NyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogYXV0b2dlbi5zaDoKLQkgIGF1dG9nZW46IHdpbmdvIHNpZ25lZCBjb21tZW50Ci0KLTIwMTEtMDMtMjIgMTE6MDQ6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IERvbid0IGxlYWsgb2JqZWN0cyB3aGVuIGZsdXNoaW5nIGFmdGVyIGRlcXVldWVpbmcgYW5kIGJlZm9yZSBwdXNoaW5nIHRoZSBvYmplY3QKLQotMjAxMS0wMy0yMSAxNzo1NDoxMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgotCSAgbXVsdGlxdWV1ZTogUmVhbGx5IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQotMjAxMS0wMy0yMSAxNzo1MjoxMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBJbmNyZW1lbnQgdW5pcXVlIGl0ZW0gY291bnRlciB3aXRoIGF0b21pYyBvcGVyYXRpb25zCi0JICBCZWZvcmUgaXQgd2FzIG9ubHkgcHJvdGVjdGVkIGJ5IHRoZSBzdHJlYW0gbG9jayBidXQgZXZlcnkgcGFkCi0JICBoYXMgaXRzIG93biBzdHJlYW0gbG9jaywgbWFraW5nIHRoZSBwcm90ZWN0aW9uIHJhdGhlciB1c2VsZXNzLgotCi0yMDExLTAzLTIxIDE3OjE3OjIyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBVbmJsb2NrIGFsbCB3YWl0aW5nIHBhZHMgd2hlbiBzaHV0dGluZyBkb3duCi0KLTIwMTEtMDMtMjEgMTI6Mzk6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQotMjAxMS0wMy0yMSAxNjoyODozNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogRXhpdCBsb29wIGZ1bmN0aW9uIGlmIHRoZSBwYWQgaXMgZmx1c2hpbmcKLQkgIEZpeGVzIHBvc3NpYmxlIGRlYWRsb2NrcyB3aGVuIGZsdXNoaW5nIGFuIHVubGlua2VkIHBhZCB0aGF0IHdhaXRzCi0JICBmb3Igb3RoZXIgcGFkcyB0byBhZHZhbmNlLgotCi0yMDExLTAzLTE5IDE3OjA2OjEyIC0wNTAwICBKYXNvbiBELiBDbGludG9uIDxtZUBqYXNvbmNsaW50b24uY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGJ1aWxkOiBmaXggYnVpbGQgd2l0aCAtV2Vycm9yIHdpdGggR0NDIDQuNi4wCi0JICBUaGlzIHRvdWNoZXMgdGhyZWUgYXJlYXMgb2YgY29kZSwgcmVtb3ZlcyB1bnVzZWQgdmFyaWFibGVzIGFuZCBkaXNjYXJkcwotCSAgcmV0dXJuIHZhbHVlcyBmcm9tIHR3byBmdW5jdGlvbnMgd2l0aCAodm9pZCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1MjY3Ci0KLTIwMTEtMDMtMTkgMTA6Mzk6MjggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGV2ZW50OiBBZGQgc2luY2UgbWFya2VyIHRvIEdTVF9FVkVOVF9TSU5LX01FU1NBR0UKLQotMjAxMS0wMy0xOSAwODo1NTo1NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogU3RvcCB3YWl0aW5nIGZvciBhIHBhZCBzd2l0Y2ggd2hlbiB0aGUgcGFkIGlzIGZsdXNoaW5nCi0KLTIwMTEtMDMtMTkgMDg6NTA6MDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IE1vdmUgbG9ja2luZyBhbmQgc2lnbmFsbGluZyBtYWNyb3MgZnJvbSB0aGUgaGVhZGVyIHRvIHRoZSBzb3VyY2UgZmlsZQotCi0yMDExLTAzLTE3IDIzOjQyOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suaDoKLQkgIHRhc2s6IGZpeCBHU1RfVEFTS19CUk9BRENBU1QKLQkgIFN1cnByaXNpbmdseSBlbm91Z2gsIHlvdSBjYW4ndCAiYnJlYWRjYXN0IiBvbiBhIEdDb25kLgotCSAgU3BvdHRlZCBieSBSdW5lIFPDpnRyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDUwMjIKLQotMjAxMS0wMy0xNyAxNDoyMToxNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogSG9sZCB0aGUgc2VsZWN0b3IgbG9jayB3aGlsZSByZWFkaW5nIHByb3BlcnRpZXMgb2YgdGhlIGFjdGl2ZSBwYWQKLQotMjAxMS0wMy0xNyAxNDoxMDo0OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogTWFrZSBzdXJlIHRoYXQgRU9TIGlzIGFsd2F5cyBzZW50IGRvd25zdHJlYW0gZm9yIHRoZSBhY3RpdmUgcGFkCi0JICBJdCBjYW4gaGFwcGVuIHRoYXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgcGFkIGdvdCB0aGUgRU9TIGV2ZW50Ci0JICBiZWZvcmUgaXQgd2FzIGFjdGl2YXRlZCBhbmQgdGhlIHByZXZpb3VzbHkgYWN0aXZlIHBhZCBnb3QgdGhlCi0JICBFT1MgZXZlbnQgYWZ0ZXIgaXQgd2FzIGRlYWN0aXZhdGVkLiBJbiB0aGF0IGNhc2Ugd2UgaGF2ZSB0bwotCSAgc2VuZCB0aGUgRU9TIGV2ZW50IGZyb20gYW4gaW5hY3RpdmUgcGFkIGRvd25zdHJlYW0uCi0KLTIwMTEtMDMtMTYgMTg6MTk6MTEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFJldHVybiBHU1RfRkxPV19PSyB1bnRpbCB0aGUgc2VsZWN0ZWQgcGFkIHB1c2hlZCBzb21ldGhpbmcgZG93bnN0cmVhbQotCSAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgZHVyaW5nIHN3aXRjaGVzIGF0IG5vIHBvaW50IGluIHRpbWUgYWxsIHBhZHMKLQkgIGhhdmUgcmV0dXJuZWQgbm90LWxpbmtlZCwgd2hpY2ggY2FuIGhhcHBlbiB3aGVuIHBsYXlpbmcgYW4gYXVkaW8tb25seQotCSAgZmlsZSB3aXRoIHBsYXliaW4yIGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgc3RyZWFtcyBmb3IgZXhhbXBsZS4KLQkgIEZpeGVzIGJ1ZyAjNjQ0OTM1LgotCi0yMDExLTAzLTE3IDEwOjUzOjQ5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXRpbHM6IFJlbW92ZSBkZXByZWNhdGVkIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3tzaW5rLHNyY31fY2FwcygpCi0KLTIwMTEtMDMtMTcgMTA6NTA6NDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZ3N0YnVmZmVybGlzdC5jCi0KLTIwMTEtMDMtMTYgMTI6MDE6MjEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IERvY3VtZW50IHRoYXQgcGFkIGJsb2NrcyBvbmx5IG1ha2Ugc2Vuc2UgZm9yIHNpbmsgcGFkcyBpbiBwdWxsIG1vZGUgYW5kIHNyYyBwYWRzIGluIHB1c2ggbW9kZQotCSAgU2VlIGJ1ZyAjNjQ0OTA3LgotCi0yMDExLTAzLTE2IDExOjUzOjUzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogVGhlIGludGVybmFsbHkgbGlua2VkIHBhZCBvZiB0aGUgcHJveHlwYWQgaXMgdGhlIGdob3N0cGFkCi0JICBQcmV2aW91c2x5IHdlIHdlcmUgcmV0dXJuaW5nIHRoZSBwZWVycGFkLCB3aGljaCBpcyB0aGUgdGFyZ2V0Ci0JICBvZiB0aGUgZ2hvc3RwYWQuCi0KLTIwMTEtMDItMjUgMTY6MjA6NDkgKzAxMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZ0BheGlzLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6Ci0JICBidWZmZXJsaXN0OiBVc2UgYSBHUXVldWUgaW5zdGVhZCBvZiBhIEdMaXN0Ci0JICBBZGRpbmcgYSBidWZmZXIgdG8gdGhlIGVuZCBvZiBhIEdzdEJ1ZmZlckxpc3QgaXMgc3VwcG9zZWQgdG8gYmUgYSBmYXN0Ci0JICBvcGVyYXRpb24sIGJ1dCBpdCB3YXMgbm90IHNpbmNlIHRoZSBpdGVyYXRvciBkb2VzIG5vdCBhZHZhbmNlIGl0cwotCSAgbmV4dHBvaW50ZXIgd2hlbiBhZGRpbmcgYnVmZmVycyBhbmQgR0xpc3QgZG9lcyBub3QgaGF2ZSBhIHRhaWwgcG9pbnRlci4KLQkgIFVzaW5nIGEgR1F1ZXVlIHRvIHN0b3JlIHRoZSBidWZmZXJzIG1ha2VzIGl0IGVhc2llciB0byBhZGQgYnVmZmVycyB0bwotCSAgdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQgdGhpcyBvcGVyYXRpb24gd2lsbCBub3cgYmUgbXVjaCBtb3JlIGVmZmljaWVudC4KLQkgIEFkZGluZyBhbiBlbnRpcmUgR0xpc3Qgb2YgYnVmZmVycyB1c2luZwotCSAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZF9saXN0KCkgd2lsbCBob3dldmVyIGhhdmUgdG8gaXRlcmF0ZSBvdmVyCi0JICB0aGUgbGlzdCBiZWluZyBhZGRlZCB0byBiZSBhYmxlIHRvIHVwZGF0ZSB0aGUgdGFpbCBwb2ludGVyIGluIHRoZQotCSAgR1F1ZXVlLgotCi0yMDExLTAzLTEwIDE3OjQ4OjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHV0aWxzOiBmaXggQUJJIGJyZWFrIHdoZW4gY29tcGlsaW5nIGdzdHJlYW1lciB3aXRoIC1ER1NUX0RJU0FCTEVfREVQUkVDQVRFRAotCSAgR1NUX0RJU0FCTEVfREVQUkVDQVRFRCBzaG91bGQgb25seSBhZmZlY3QgdmlzaWJpbGl0eSBvZiBkZWNsYXJhdGlvbnMgaW4gaGVhZGVycywKLQkgIG5vdCBhY3R1YWxseSByZW1vdmUgc3ltYm9scy4gU2VlIEdpdERldmVsb3Blckd1aWRlbGluZXMgYW5kIERlcHJlY2F0aW5nQVBJCi0JICBwYWdlcyBpbiB3aWtpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQwMjE0MQotCi0yMDExLTAzLTEwIDE2OjQ2OjA0ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogVXBkYXRlIC5kZWYgZmlsZSBmb3IgQVBJIGFkZGl0aW9uCi0KLTIwMTEtMDMtMTAgMTA6MjU6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wMy0wOSAxNjoxNTozMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6Ci0JICBwd2c6IGZpeCBlbGVtZW50IG5hbWUgInZpZGVvZHJvcCIgdG8gInZpZGVvcmF0ZSIKLQotMjAxMS0wMy0wOCAxMjoxMTowOCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgIHRlc3Q6IGFkZCB0ZXN0cyBmb3IgbmV3IGVsZW1lbnRfZmFjdG9yeSBhcGkuCi0KLTIwMTAtMDYtMjMgMjI6MDA6MDQgKzAyMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdHV0aWxzOiByZXBsYWNlIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3tzaW5rLHNyY31fY2FwcwotCSAgQWRkIG5ldyBmdW5jdGlvbnMgdG8gY2xhcmlmeSBob3cgdGhlIGNhcHMgYXJlIGNvbXBhcmVkIHRvIHRoZSB0ZW1wbGF0ZSBjYXBzIG9mCi0JICB0aGUgZWxlbWVudCBmYWN0b3J5LiBJbXByb3ZlIHRoZSBkb2NzIHRvIHBvaW50IG91dCB0aGUgZGlmZmVyZW5jZS4KLQkgIERlcHJlY2F0ZTogZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fe3NyY3xzaW5rfV9jYXBzCi0JICBBUEk6IGFkZCBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl97c3JjfHNpbmt9X3thbnl8YWxsfV9jYXBwcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTQwMjE0MQotCi0yMDExLTAzLTA3IDIzOjEzOjU2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JICB0ZXN0czogYWRkIGEgdW5pdCB0ZXN0IGZvciBnc3RfY2Fwc19uZXdfc2ltcGxlCi0JICBBZGQgYSB0ZXN0IGZvciB0aGUgY3Jhc2ggaW4gYnVnICM2NDIyNzEuCi0KLTIwMTEtMDMtMDggMTg6MDU6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWV0YS50eHQ6Ci0JICBkb2NzOiByZW5hbWUgZHJhZnQgdG8gb2ZmaWNpYWwgZG9jCi0KLTIwMTEtMDMtMDggMTY6NTg6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RtZXRhLmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYzoKLQkgIG1ldGE6IGltcGxlbWVudCB0cmFuc2Zvcm0gZnVuY3Rpb24KLQkgIFJlcGxhY2Ugc3ViYnVmZmVyIGFuZCBjb3B5IHZtZXRob2RzIGJ5IGEgbW9yZSBnZW5lcmljIHRyYW5zZm9ybSBmdW5jdGlvbiB0aGF0Ci0JICBjYW4gdGhlbiBiZSBwYXJhbWV0cmlzZWQgYnkgdHJhbnNmb3JtIHNwZWNpZmljIGRhdGEuIFRoaXMgc2hvdWxkIGFsbG93IHVzIHRvCi0JICBpbXBsZW1lbnQgbWFrZS13cml0YWJsZSBhbmQgbW9yZSBmdXR1cmUgdHJhbnNmb3JtIGZ1bmN0aW9ucy4KLQotMjAxMS0wMy0wOCAxNzowNjozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTAzLTA4IDExOjU1OjI5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgdGVzdHM6IGFkZCB0ZXN0IHRvIGNyZWF0ZSBhIGZhY3RvcnkKLQotMjAxMS0wMy0wOCAxMDozNjozMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgdGVzdHM6IHN0YXJ0IGEgbmV3IHRlc3Qgc3VpdGUgZm9yIGVsZW1lbnQgZmFjdG9yaWVzCi0JICBNb3ZlIG9uZSB0ZXN0IGZyb20gZ3N0ZWxlbWVudCBzdWl0ZS4KLQotMjAxMS0wMy0wOCAxMTozNDoxOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIHBhZHRlbXBsYXRlOiBhZGQgbWlzc2luZyA7IGluIGV4YW1wbGUgKGFuZCB0cmltIHdoaXRlc3BhY2UpCi0KLTIwMTEtMDMtMDggMDk6NTg6NTUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBnc3Rfc3RydWN0dXJlX2VtcHR5X25ldygpIGRvZXMgYmV0dGVyIGVycm9yIGNoZWNraW5nCi0JICBObyBuZWVkIHRvIGNoZWNrIGZvciBtZWRpYV90eXBlIT1OVUxMIGFzIHRoZSBmdW5jdGlvbiB3ZSBjYWxsIHRoYXQgYWN0dWFsIGNyZWF0ZQotCSAgdGhlIHN0cnVjdHVyZSBkb2VzIGEgZnVsbCBjaGVjayBhbnl3YXkuCi0KLTIwMTEtMDMtMDggMTA6MDY6MjMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGNhcHMsc3RydWN0dXJlOiB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2UKLQotMjAxMS0wMy0wNCAwODoyODoyNSArMTAwMCAgSm9uYXRoYW4gTWF0dGhldyA8am9uYXRoYW5AZDE0bi5vcmc+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBkb24ndCBjcmVhdGUgYnJva2VuIGNhcHMgZm9yIGludmFsaWQgbWVkaWEgdHlwZXMKLQkgIENoZWNrIGlmIHN0cnVjdHVyZSBoYXMgYmVlbiBjcmVhdGVkIGJlZm9yZSBhcHBlbmRpbmcgaXQgdG8gdGhlIGNhcHMuIEZyZWUgdGhlCi0JICBjYXBzIGluIHRoZSBjYXNlIG9mIGFuIGVycm9yIHRvIG5vdCBjb25jZWFsIGl0IGJlIHJldHVybmluZyBlbXB0eSBjYXBzLgotCSAgRml4ZXMgIzY0MjI3MQotCi0yMDExLTAzLTA3IDE2OjIxOjQ3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jOgotCSAgZXhhbXBsZXM6IHVwZGF0ZSBoZWxsbyB3b3JsZCBleGFtcGxlCi0JICBPdXIgaGVsbG93b3JsZCBleGFtcGxlIHRoYXR3IGUgcmVmZXJlbmNlIGZyb20gdGhlIG1hbnVhbCBoYXMgYmVlbiBhIGJpdAotCSAgY29tcGxpY2F0ZWQgdG8gc2VydmUgYSBmaXJzdCBjb250YWN0IHdpdGggZ3N0cmVhbWVyLiBTaW5jZSB3ZSBoYXZlIGFuZAotCSAgcHJvbW90ZSBwbGF5YmluMiBhcyBhIHBsYXliYWNrIGFwaSB1c2UgaXQgaGVyZS4KLQkgIEJhc2VkIG9uIHdvcmsgZnJvbSBNYXRoaWFzIEhhc3NlbG1hbm4gPG1hdGhpYXMuaGFzc2VsbWFubkBnbXguZGU+Ci0JICBGaXhlcyAjNDI0MTQzCi0KLTIwMTEtMDMtMDQgMTk6MDI6MzMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgotCSAgZG9jczogdXBkYXRlIG1ldGFkYXRhIGRyYWZ0Ci0KLTIwMTEtMDMtMDQgMTg6MTE6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiByZW1vdmUgRklYTUUKLQkgIE5vdyB0aGF0IHdlIGRvbid0IHN1YmNsYXNzIGJ1ZmZlcnMgYW55bW9yZSwgdGhlIEZJWE1FIGFib3V0IGxpbWl0ZWQKLQkgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGNvcHkgZnVuY3Rpb24gaXMgaXJyZWxldmFudC4KLQotMjAxMS0wMy0wNCAxNzo0MzoyNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBhZGQgZmxhZyByZWdpc3RyYXRpb24KLQotMjAxMS0wMy0wNCAxNzoyNTowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgcGFkOiBtb3JlIHByZXJvbGwgbG9jayB0byBiYXNlc2luawotCSAgTW92ZSB0aGUgcHJlcm9sbCBsb2NrIHRvIGJhc2VzaW5rIHdoZXJlIGl0IGJlbG9uZ3MuCi0KLTIwMTEtMDMtMDQgMTY6MDU6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcnBvb2wudHh0OgotCSAgZG9jczogdXBkYXRlIGJ1ZmZlcnBvb2wgZHJhZnQKLQotMjAxMS0wMy0wNCAxMjowNjoxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IGFkZCBtb3JlIGRlYnVnIGluZm8KLQotMjAxMS0wMy0wMyAxODozODozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IGFkZCBkZWJ1ZwotCi0yMDExLTAzLTAzIDE4OjIxOjMxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSAgYnVmZmVycG9vbDogYWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvCi0KLTIwMTEtMDMtMDMgMTY6MzE6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkgIGJ1ZmZlcnBvb2w6IGFkZCBjYXBzIHRvIHRoZSBjb25maWcKLQkgIEFkZCB0aGUgY2FwcyB0byB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIG9mIHRoZSBwb29sLgotCSAgSW5pdGlhbGl6ZSB0aGUgcHJpdmF0ZSBkYXRhCi0KLTIwMTEtMDMtMDIgMTE6NTc6NDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogdXBkYXRlIGRlZnMKLQotMjAxMS0wMy0wMiAxMTo1NzowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiByZWxlYXNlIGJ1ZmZlciB0byBwb29sIGluIGRpc3Bvc2UKLQkgIFVzZSB0aGUgZGlzcG9zZSBtZXRob2QgdG8gcmVsZWFzZSB0aGUgYnVmZmVyIHRvIHRoZSBwb29sIHdoZW4gaXQgaXMgY29uZmlndXJlZC4KLQotMjAxMS0wMi0yMiAxMjozNTo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXI6IGFkZCBwb29sIHRvIGJ1ZmZlciBzdHJ1Y3R1cmUKLQkgIEtlZXAgYSBwb2ludGVyIHRvIHRoZSBidWZmZXJwb29sLiBSZWxlYXNlIHRoZSBidWZmZXIgdG8gdGhlIHBvb2wgd2hlbgotCSAgZmluYWxpemluZy4gTWFrZSBzdXJlIHRoZSBwb29sIHNldHMgaXRzZWxmIGFzIHRoZSBwb29sIG1lbWJlciBvZiBidWZmZXJzIHRoYXQgaXQKLQkgIHNlbmRzIG91dC4KLQotMjAxMS0wMi0yMiAxMjozNTowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBhZGQgcG9vbCBmbGFncyB0eXBlCi0KLTIwMTEtMDItMjIgMTE6MDU6MDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkb2NzOiB1cGRhdGUgYnVmZmVycG9vbCBkb2NzCi0KLTIwMTEtMDItMjEgMTg6NDM6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBSZWZhY3RvciBzdG9wcGluZyBvZiB0aGUgcG9vbAotCSAgTW92ZSBzb21lIG1ldGhvZHMgYXJvdW5kLgotCSAgTWFrZSBzdXJlIHdlIGNoZWNrIGZvciBjb25maWcgcGFyc2luZyBlcnJvcnMuCi0JICBJbmNyZW1lbnQgdGhlIG91dHN0YW5kaW5nIGJ1ZmZlcnMgYmVmb3JlIGNhbGxpbmcgYWNxdWlyZSBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlCi0JICB0aGF0IHNldF9hY3RpdmUoKSBkb2Vzbid0IGZyZWUgdGhlIHBvb2wgZnJvbSB1bmRlciB1cy4KLQotMjAxMS0wMi0yMSAxNzozMzozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBSZXdvcmsgYnVmZmVyIG1hbmFnZW1lbnQgYSBsaXR0bGUKLQkgIEFkZCBzdGFydC9zdG9wIG1ldGhvZHMgdG8gYWxsb3cgZm9yIGJ1bGsgYWxsb2NhdGlvbiBvZiBidWZmZXJzLgotCSAgRnJlZSBidWZmZXJzIG9ubHkgd2hlbiBhbGwgb3V0c3RhbmRpbmcgYnVmZmVycyByZXR1cm5lZC4KLQkgIE1ha2UgdGhpbmdzIG1vcmUgdGhyZWFkc2FmZSB3cnQgZmx1c2hpbmcgYW5kIHN0YXJ0aW5nL3N0b3BwaW5nIGJ5Ci0JICBrZWVwaW5nIHRyYWNrIG9mIHN0YXJ0IGFuZCBzdG9wIG1ldGhvZCBjYWxscy4KLQotMjAxMS0wMi0yMSAxMjoxODo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBtZW1vcnkgbWFuYWdlbWVudCBjbGVhbnVwcwotCSAgVXNlIGEgbG9jayB0byBwcm90ZWN0IGNvbmN1cnJlY3QgZXhlY3V0aW9uIG9mIHNldF9jb25maWcgYW5kIHNldF9hY3RpdmUuCi0JICBTdGFydCBmcmVlaW5nIHRoZSBidWZmZXJzIHdoZW4gZmx1c2hpbmcgYW5kIGFsbCBidWZmZXJzIGFyZSByZXR1cm5lZCB0byB0aGUKLQkgIHBvb2wuCi0JICBNYWtlIGEgY29weSBvZiB0aGUgY29uZmlnIHRvIGF2b2lkIGNyYXNoaW5nIHdpdGggY29uY3VycmVudCBhY2Nlc3MuCi0KLTIwMTEtMDItMTggMTY6MzU6NDYgKzAxMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IGFsc28gYWxsb3cgTlVMTCBwYXJhbXMgaW4gX2FjcXVpcmUKLQotMjAxMS0wMi0xOCAxNjoxNTozMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RidWZmZXJwb29sLmg6Ci0JICBidWZmZXJwb29sOiBtb3JlIHVwZGF0ZXMKLQkgIEtlZXAgdHJhY2sgaWYgdGhlIGJ1ZmZlciBpcyBjb25maWd1cmVkIGFuZCBibG9jayBhY3RpdmF0aW9uIHdoZW4gbm90IGNvbmZpZ3VyZWQKLQkgIHlldC4KLQkgIEtlZXAgdHJhY2sgb2Ygb3V0c3RhbmRpbmcgYnVmZmVycyBhbmQgZGlzYWxsb3cgY29uZmlndXJhdGlvbiB3aGVuIG5vdCBhbGwKLQkgIGJ1ZmZlcnMgYXJlIHJldHVybmVkIHRvIHRoZSBwb29sLiBXZSBuZWVkIHRvIGRvIHRoaXMgb3IgZWxzZSB3ZSBtaWdodCBlbmQgdXAKLQkgIHdpdGggd3JvbmcgYnVmZmVycyBpbiB0aGUgcG9vbC4KLQkgIEFkZCByZXR1cm4gdmFsdWUgdG8gc2V0X2FjdGl2ZS4KLQkgIFNtYWxsIGNsZWFudXBzLiBGaXggZmluYWxpemUuCi0KLTIwMTEtMDItMTggMTI6NTA6MjEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSAgYnVmZmVycG9vbDogcmVuYW1lICdmbHVzaGluZycgdG8gJ2FjdGl2ZScKLQkgIFJlbmFtZSB0aGUgZmx1c2hpbmcgdmFyaWFibGUgYW5kIG1ldGhvZHMgdG8gYWN0aXZlIHRvIGJldHRlciBtYXRjaAotCSAgdGhlIG90aGVyIGdzdHJlYW1lciBuYW1lIGNvbnZlbnRpb25zCi0KLTIwMTEtMDItMTcgMTg6Mzc6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JICBidWZmZXJwb29sOiBwcmVhbGxvYyB3aGVuIHVuc2V0IGZsdXNoaW5nCi0JICBBY2NvcmRpbmcgdG8gdGhlIGRlc2lnbiBkb2Mgd2UgbmVlZCB0byBwcmVhbGxvYyBidWZmZXJzIHdoZW4gd2UgdW5zZXQgdGhlCi0JICBmbHVzaGluZyBzdGF0ZSwgbm90IGluIHNldF9jb25maWcuCi0JICBTZXQgdGhlIGZsdXNoaW5nIHN0YXRlIGJldHRlci4KLQotMjAxMS0wMi0xNyAxNzoyOToyNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuYzoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JICBidWZmZXJwb29sOiB1c2UgcXVhcmtzIGZvciBzdHJ1Y3R1cmUgZmllbGRzCi0KLTIwMTEtMDItMTcgMTY6NDY6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJwb29sLmM6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJwb29sOiB1c2UgR3N0U3RydWN0dXJlIHRvIGNvbmZpZ3VyZSB0aGUgcG9vbAotCSAgVXNlIGEgR3N0U3RydWN0dXJlIHRvIHByb3ZpZGUgdGhlIHBvb2wgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbi4gQWxzbwotCSAgcHJvdmlkZSBzb21lIGhlbHBlciBtZXRob2RzIHRvIGNvbmZpZ3VyZSBzdWNoIGEgc3RydWN0dXJlLgotCSAgZG9uJ3QgcGFzcyB0aGUgY29uZmlnIGluIGFsbG9jX2J1ZmZlciwgcG9vbCBpbXBsZW1lbnRhdGlvbiB3aWxsIGFscmVhZHkgaGF2ZQotCSAgcGFyc2VkIGl0IGR1cmluZyBzZXRfY29uZmlnLgotCSAgVXBkYXRlIGRlZnMKLQotMjAxMS0wMi0xNyAxMjo1NTozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBmaXggZGVmcwotCi0yMDEwLTExLTAyIDE4OjU2OjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0YnVmZmVycG9vbC5jOgotCSogZ3N0L2dzdGJ1ZmZlcnBvb2wuaDoKLQkgIGJ1ZmZlcnBvb2w6IGFkZCBzaW1wbGUgYnVmZmVycG9vbCBoZWxwZXIgb2JqZWN0Ci0KLTIwMTEtMDMtMDIgMTE6MDg6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9nc3RyZWdpc3RyeS5oCi0KLTIwMTEtMDMtMDIgMTM6NTU6MzYgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2ZhcS9naXQueG1sOgotCSAgZmFxOiBNaW5vciB1cGRhdGUgdG8gc3NoIGtleSBnZW5lcmF0aW9uIGNvbW1hbmRzCi0JICBmZC5vIHJlcXVpcmVzIFJTQSBrZXlzLCBhbmQgaW4gZ2VuZXJhbCwgdXNlcnMgd291bGQgcHJvYmFibHkgd2FudCB0bwotCSAgbWFrZSBhIHBlci1zZXJ2ZXIga2V5IGZpbGUgcmF0aGVyIHRoYW4gb3ZlcndyaXRlIGlkX3JzYSwgaWRfcnNhLnB1Yi4KLQotMjAxMS0wMi0yOCAxODo0Mzo0MSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogZXhwb3J0IHBsdWdpbiBkZXNjcmlwdGlvbiBtb3JlIHBsYXRmb3JtIGluZGVwZW5kZW50Ci0JICBGaXhlcyAjNjQyNTA0LgotCi0yMDExLTAyLTI4IDE4OjMyOjA3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDFkZTdmNmEgdG8gNmFlYzZiOQotCi0yMDExLTAyLTI4IDE1OjAxOjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JICBkb2NzOiB0eXBvIGZpeGVzCi0JICBjb252aW5pZW5jZSAtPiBjb252ZW5pZW5jZQotCi0yMDExLTAyLTI4IDE0OjU2OjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIHRvb2xzOiBwcmludCAicGFkLWFkZGVkIiwgInBhZC1yZW1vdmVkIiBhbmQgIm5vLW1vcmUtcGFkcyIgc2lnbmFscyBmb3IgZWxlbWVudHMgd2l0aCBzb21ldGltZXMgcGFkcwotCSAgSXQncyBvZnRlbiBub3Qgb2J2aW91cyB0byBwZW9wbGUgdGhhdCBlbGVtZW50cyBsaWtlIGUuZy4gdXJpZGVjb2RlYmluCi0JICAob3IgZGVtdXhlcnMpIGF1dG9tYXRpY2FsbHkgc3VwcG9ydCB0aGUgc3RhbmRhcmQgc2lnbmFscyBvZiB0aGUKLQkgIEdzdEVsZW1lbnQgY2xhc3MsIHNvIGxldCdzIHByaW50IHRoZSB1c2VmdWwgcGFkLXJlbGF0ZWQgb25lcyBmb3IKLQkgIGVsZW1lbnRzIHdpdGggc29tZXRpbWVzIHBhZHMuCi0KLTIwMTEtMDItMjggMTY6Mjc6MDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBkb2NzOiBzbWFsbCB1cGRhdGVzIGFzIHN1Z2dlc3RlZCBvbiBhIGJsb2cKLQkgIExpbmsgZnJvbSBjb252aW5pZW5jZSBhcGkgdG8gdGhlIHVuZGVybHlpbmcgYXBpLgotCi0yMDExLTAyLTI4IDEwOjA1OjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkgIG1ldGE6IGFkZCB0aW1pbmcgbWV0YWRhdGEKLQotMjAxMS0wMi0yOCAxMDowNTozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkgIG1pbmlvYmplY3Q6IGZpeCB3aGl0ZXNwYWNlCi0KLTIwMTEtMDItMjggMDk6Mzk6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXRhLmM6Ci0JICB0ZXN0czogYWRkIG1lbW9yeSB1bml0IHRlc3QKLQotMjAxMS0wMi0yNyAyMDo1NDo1OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1ldGEuYzoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JICBtZXRhOiBzaW1wbGlmeSBhIGJpdAotCi0yMDExLTAyLTI3IDIwOjQyOjE1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWV0YS5jOgotCSogZ3N0L2dzdG1ldGEuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWV0YTogYWRkIGRlZmF1bHQgbWVtb3J5IG1ldGFkYXRhCi0JICBBZGQgYSBtZXRhZGF0YSBpbXBsZW1lbnRhdGlvbiBmb3Igbm9ybWFsbCBtYWxsb2NlZCBtZW1vcnkuCi0KLTIwMTEtMDItMjcgMTk6NDA6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtZXRhLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBtZXRhOiBzZXBhcmF0ZSBhZGQgYW5kIGdldCBtZXRob2RzCi0JICBNYWtlIHNlcGFyYXRlIGFwaSBmb3IgZ2V0dGluZyBhbmQgYWRkaW5nIG1ldGFkYXRhLiBUaGlzIGFsbG93cyB1cyB0byBwYXNzIGV4dHJhCi0JICBwYXJhbWV0ZXJzIHRvIHRoZSBpbml0IGZ1bmN0aW9ucyB3aGVuIGNyZWF0aW5nIG1ldGFkYXRhLCB3aGljaCBpcyBuZWVkZWQgZm9yCi0JICBzcGVjaWZpYyBBUEkgaW1wbGVtZW50YXRpb25zLgotCSAgQWRkIGJlZ2lubmluZ3Mgb2YgbWVtb3J5IG1ldGFkYXRhLgotCi0yMDExLTAyLTI3IDEyOjIxOjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1idWZmZXIyLnR4dDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRvY3M6IHVwZGF0ZSBkb2NzIGFuZCBkZWZzCi0KLTIwMTEtMDItMjYgMTg6MTQ6MzYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogcmVtb3ZlIHVzZWxlc3MgbWV0aG9kCi0JICBSZW1vdmUgdGhlIG1ldGhvZCB0byByZXRyaWV2ZSBtZXRhZGF0YSBieSBhcGkuIE9uZSB3aWxsIGFsd2F5cyB1c2UgdGhlCi0JICBHc3RNZXRhSW5mbyB0byBnZXQgbWV0YWRhdGEuCi0KLTIwMTEtMDItMjUgMTY6MzE6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogcmVtb3ZlIG93bmVyX3ByaXYgbm93IHRoYXQgd2UgaGF2ZSBtZXRhZGF0YQotCSAgTm93IHRoYXQgd2UgaGF2ZSBtZXRhZGF0YSB3ZSBjYW4gcmVtb3ZlIHRoZSBvd25lcl9wcml2IGZpZWxkLgotCi0yMDExLTAyLTI1IDEzOjIzOjE5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IGZpeCBkZWZzCi0KLTIwMTEtMDItMjUgMTM6MTU6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcm1ldGEuYzoKLQkqIGdzdC9nc3RtZXRhLmM6Ci0JKiBnc3QvZ3N0bWV0YS5oOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jOgotCSAgbWV0YWRhdGE6IFJlbmFtZSB0byBHc3RNZXRhCi0JICBSZW5hbWUgdG8gdGhlIHNob3J0ZXIgR3N0TWV0YQotCSAgQWRkIGRvY3MKLQkgIEFkZCBhcGkgdG8gZ2V0IG1ldGFkYXRhIGJ5IEFQSQotCi0yMDExLTAyLTI1IDEwOjM3OjA3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IGZpeCBkZWZzCi0KLTIwMTAtMTEtMTUgMTE6NDk6MjQgKzAxMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWwgYXQgYmFzZS1hcnQubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGZpeCBtZW1vcnkgY29ycnVwdGlvbgotCi0yMDEwLTA0LTA3IDExOjM0OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlcm1ldGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJtZXRhLmM6Ci0JICBidWZmZXJtZXRhOiBmaXggY29tcGlsYXRpb24KLQotMjAxMC0wMi0yNiAxMzoxMTo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVyMi50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVybWV0YS5oOgotCSAgdXBkYXRlcwotCi0yMDA5LTEyLTI3IDIyOjAzOjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybWV0YS5jOgotCSAgbWV0YTogaW1wcm92ZSB0ZXN0IGEgbGl0dGxlCi0KLTIwMDktMTItMTcgMTI6MzQ6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVybWV0YS5jOgotCSogZ3N0L2dzdGJ1ZmZlcm1ldGEuaDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcm1ldGEuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVybWV0YTogYWRkIGJlZ2lubmluZ3Mgb2YgYnVmZmVyIG1ldGFkYXRhCi0JICBBZGQgZmlyc3QgaW1wbGVtZW50YXRpb24gb2YgYXJiaXRyYXJ5IGJ1ZmZlciBtZXRhZGF0YS4gV2UgdXNlIGEgc2ltcGxlIGxpbmtlZAotCSAgbGlua2VkIG9mIHNsaWNlIGFsbG9jYXRlZCBtZXRhZGF0YSBjaHVua3MuIEZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgY291bGQgdXNlCi0JICBzb21ldGhpbmcgbW9yZSBwZXJmb3JtYW50LgotCSAgQWRkIGdldCwgcmVtb3ZlLCBpdGVyYXRlIG1ldGhvZHMgdG8gaGFuZGxlIHRoZSBtZXRhZGF0YS4KLQotMjAxMS0wMi0yNSAxMDoxOToyNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVyMi50eHQ6Ci0JICBkZXNpZ246IGFkZCBhcGkgdGFnCi0JICBXZSB3YW50IHRvIGZpbmQgbWV0YWRhdGEgYmFzZWQgb24gdGhlIEFQSSBpdCBpbXBsZW1lbnRzIGFuZCBiYXNlZCBvbiB0aGUKLQkgIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgotCi0yMDExLTAyLTI0IDE3OjExOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgdXJpOiBtYWtlIHdpbjMyIGJ1aWxkYm90IGhhcHB5Ci0JICBnc3R1cmkuYzo4NTQ6MTY6IGVycm9yOiB1bnVzZWQgdmFyaWFibGUgJ2Fic19jbGVhbicKLQkgIGdzdHVyaS5jOjc4ODoxOiBlcnJvcjogJ2dzdF9maWxlX3V0aWxzX2Nhbm9uaWNhbGlzZV9wYXRoJyBkZWZpbmVkIGJ1dCBub3QgdXNlZAotCi0yMDExLTAyLTI0IDE1OjMyOjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6Ci0JICBmaWxlc3JjLCBmaWxlc2luazogZml4IFVSSSBjcmVhdGlvbiByZWdyZXNzaW9uIGZvciBub24tYWJzb2x1dGUgbG9jYXRpb25zCi0JICBQYXNzaW5nIGUuZy4gbG9jYXRpb249Zm9vIHdvdWxkIGxlYWQgdG8gd2FybmluZ3MgYmVjYXVzZSBnX2ZpbGVuYW1lX3RvX3VyaSgpCi0JICB3YW50cyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggYW5kIHJldHVybnMgTlVMTCBvdGhlcndpc2UuIFVzZSBicmFuZC1uZXcKLQkgIGdzdF9maWxlbmFtZV90b191cmkoKSBpbnN0ZWFkLCB3aGljaCB3aWxsIHRyeSBoYXJkZXIgdG8gY3JlYXRlIGEgcHJvcGVyCi0JICBVUkkgZm9yIHVzLgotCSAgQWxzbyBhZGQgdW5pdCB0ZXN0LgotCi0yMDExLTAyLTI0IDE1OjE4OjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXJpOiBhZGQgZ3N0X2ZpbGVuYW1lX3RvX3VyaSgpIHRoYXQgdGFrZXMgcmVsYXRpdmUgZmlsZW5hbWVzCi0JICBBZGQgZnVuY3Rpb24gdGhhdCAodW5saWtlIHRoZSBHTGliIGVxdWl2YWxlbnQpIGFsc28gYWNjZXB0cyBwYXRocyB0aGF0Ci0JICBhcmVuJ3QgYWJzb2x1dGUgYW5kIHdpbGwgY2xlYW4gdXAgcmVsYXRpdmUgbWFya2VycyBzdWNoIGFzIC4vIGFuZCAuLi8KLQkgIGJlZm9yZSBmb3JtaW5nIGEgVVJJLgotCSAgRml4ZXMgd2FybmluZ3Mgd2l0aCBlLmcuIGZpbGVzcmMgbG9jYXRpb249Zm9vICEgdHlwZWZpbmQgY2F1c2VkIGJ5IHRoZQotCSAgcmVjZW50IHN3aXRjaCB0byBnX2ZpbGVuYW1lX3RvX3VyaSgpLCBidXQgYWxzbyBhY3R1YWxseSBjcmVhdGVzIHZhbGlkCi0JICBVUklzIGZvciB0aGUgZmlyc3QgdGltZS4KLQkgIFdpbmRvd3MgY29kZSBwYXRocyBjb3VsZCBuZWVkIHNvbWUgbW9yZSB3b3JrLCBlLmcuIHdlIGRvbid0IGNsZWFuIHVwCi0JICB0aGUgcmVsYXRpdmUgbWFya2VycyB0aGVyZSBmb3Igbm93IChiZWNhdXNlIHBhdGggY291bGQgaGF2ZSBcIGFuZCAvCi0JICBhcyBzZXBhcmF0b3JzKS4KLQkgIEFQSTogZ3N0X2ZpbGVuYW1lX3RvX3VyaSgpCi0KLTIwMTEtMDItMjQgMTY6MjA6MDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOgotCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JICB0ZXN0czogcmVmaXggdGhlIHRlc3RzIChtaXNzaW5nICNlbmRpZikKLQotMjAxMS0wMi0yNCAxNjoxMToxNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIE1ha2VmaWxlLmFtOiBhZGQgbmV3IGFiaSBoZWFkZXJzIHRvIG5vZGlzdF9IRUFERVJTCi0KLTIwMTEtMDItMjEgMTE6MjQ6NDUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogYWRkIGluZGV4IHN1cHBvcnQKLQkgIFdoZW4gb3B0aW9uICItaSIgaXMgZ2l2ZW4sIHNldCBhbiBpbmRleCBvYmplY3Qgb24gdGhlIHBpcGVsaW5lIGFuZCBjb21wdXRlCi0JICBzdGF0aXN0aWNzIGZvciBhbGwgaW5kZXggd3JpdGVycy4gUHJpbnQgYSBzdW1hcnkgd2hlbiBzaHV0dGluZyBkb3duIHRoZQotCSAgcGlwZWxpbmUuCi0KLTIwMTEtMDItMjQgMTU6MTI6MTQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9hcm0uaDoKLQkgIHRlc3RzOiBhZGQgYWJpIGNoZWNrIGRhdGEgZm9yIEFSTSAobGlicykKLQotMjAxMS0wMi0yNCAxNTowMjozNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2FybS5oOgotCSAgdGVzdHM6IGFkZCBhYmkgY2hlY2sgZGF0YSBmb3IgQVJNCi0KLTIwMTEtMDItMjQgMTM6NTU6MzUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIGJ1ZmZlcjogYWRkIG93bmVyIHByaXZhdGUgYXMgaW50ZXJtZWRpYXRlIHNvbHV0aW9uCi0JICBBZGQgYW4gb3duZXIgcHJpdmF0ZSBmaWVsZCB3aGVyZSB0aGUgb3duZXIgb2YgYSBidWZmZXIgY2FuIHN0b3JlIHNvbWUgZXh0cmEKLQkgIGluZm9ybWF0aW9uLiBXZSBjYW4gdXNlIHRoaXMgdG8gaW1wbGVtZW50IG1vc3Qgb2YgdGhlIHN1YmNsYXNzaW5nIHRoYXQgaGFwcGVucwotCSAgbm93LiBMYXRlciB0aGlzIHdpbGwgYmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQgYnkgYXJiaXRyYXJ5IGJ1ZmZlciBtZXRhZGF0YS4KLQotMjAxMS0wMi0yNCAxMDoyODoyMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IHJlbW92ZSBwb2lzb25pbmcKLQotMjAxMS0wMi0yMyAxNjo0ODowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBtaW5pb2JqZWN0OiBjbGVhbnVwcwotCSAgVXNlIHRoZSBzdG9yZWQgc2l6ZSBpbiB0aGUgbWluaW9iamVjdCB0byBmcmVlIHRoZSBtaW5pb2JqZWN0LgotCSAgUmVmYWN0b3Igc29tZSBpbml0IG1ldGhvZHMuCi0KLTIwMTEtMDItMjMgMTU6NDM6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BvcnRpbmctdG8tMC4xMS50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgcG9ydGluZyBndWlkZQotCi0yMDExLTAyLTIzIDEyOjU0OjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgZG9jczogdXBkYXRlIHBvcnRpbmcgZ3VpZGUKLQotMjAxMS0wMi0yMyAxMjo0NDo1NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuaDoKLQkgIGNhcHM6IHdhcm4gd2hlbiBtYWtlX3dyaXRhYmxlIHJlc3VsdCBpcyBpZ25vcmVkCi0KLTIwMTEtMDItMjMgMTI6MDg6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogZml4IGRlZnMKLQotMjAxMS0wMi0yMyAxMjowMTo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiBmaXggdHlwZSByZWdpc3RyYXRpb24KLQkgIFdlIG5lZWQgdG8gaGF2ZSB0aGUgdHlwZXMgb2YgdGhlIG1pbmlvYmplY3RzIGJlZm9yZSByZWdpc3RlcmluZyB0aGUKLQkgIHRyYW5mb3Jtcy4KLQotMjAxMS0wMi0yMyAxMjowMToxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBlbGVtZW50ZmFjdG9yeTogaW1wcm92ZSBjYXBzIHN0cmluZyBtYW5hZ2VtZW50Ci0KLTIwMTEtMDItMjMgMTI6MDA6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiBjbGVhciBmbGFncyBpbiBpbml0Ci0KLTIwMTEtMDItMjMgMTI6MzM6NTggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvcnVubmluZy54bWw6Ci0JICBkb2NzOiB0ZWxsIHRoYXQgT1JDX0NPREUgY2FuIGNvbnRhaW4gYSBsaXN0IG9mIGZsYWdzCi0KLTIwMTEtMDItMjMgMTA6MzE6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JICBtaW5pb2JqZWN0OiBmaXggZmxhZ3MKLQotMjAxMS0wMi0yMiAxOTozMDo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBmaXggY29tcGlsYXRpb24gYWZ0ZXIgcmViYXNlCi0KLTIwMTAtMTEtMDIgMTM6MzE6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBpbXByb3ZlIHR5cGUgcmVnaXN0cmF0aW9uCi0KLTIwMTAtMTEtMDIgMTI6NTg6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICBmaXggY29tcGlsYXRpb24KLQotMjAwOS0xMi0wNyAyMDozMjoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSAgZml4IG1hY3JvcwotCi0yMDA5LTEyLTA1IDE1OjE4OjA5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHNldCBib3hlZCB0eXBlIGNvcnJlY3RseQotCi0yMDA5LTEyLTA1IDE0OjE2OjU3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBtaW5pb2JqZWN0OiBzbWFsbCBmaXhlcwotCSAgTWFrZSBkYXRhZmxvdyBoYXBwZW4uCi0KLTIwMDktMTItMDQgMjM6NTI6MzIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaDoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiBtb3JlIGJveGVkIHR5cGUgZml4aW5nCi0JICBNb3JlIG1pbmlvYmplY3QgZml4aW5nLCBsZWFrcyBob3JyaWJseSBzb21ld2hlcmUuLgotCi0yMDA5LTEyLTA0IDIyOjMyOjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0bWFyc2hhbC5saXN0OgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBtaW5pb2JqZWN0OiBtYWtlIHF1ZXJpZXMgYSBib3hlZCB0eXBlCi0JICBNb3JlIG1pbmlvbmplY3Qgc3R1ZmYuCi0KLTIwMDktMTItMDMgMjA6NDk6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2VzOiBtYWtlIG1lc3NhZ2UgYSBzaW1wbGUgYm94ZWQgdHlwZQotCi0yMDA5LTEyLTAyIDIxOjIxOjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JICBtaW5pb2JqZWN0OiB3b3JrIG9uIG1ha2luZyBjYXBzIGEgYm94ZWQgdHlwZQotCSAgTW9yZSB3b3JrIG9uIG1ha2luZyBtaW5pb2JqZWN0IGEgc2ltcGxlIGFsbG9jYXRlZCBzdHJ1Y3QuCi0KLTIwMDktMTEtMjkgMDA6MjE6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBtaW5pb2JqZWN0OiBtYWtlIG1pbmlvYmplY3QgYSBib3hlZCB0eXBlCi0JICBGaXJzdCBhdHRlbXB0IGF0IG1ha2luZyBtaW5pb2JqZWN0IGEgc2ltcGxlIGJveGVkIHR5cGUuCi0KLTIwMTEtMDItMjIgMTk6MDk6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg6Ci0JICBsaWJzOiBjbGVhbnVwcyBmb3IgMC4xMQotCSAgUmVtb3ZlIGRlcHJlY2F0ZWQgc3R1ZmYsIGZpeCBwYWRkaW5nLCByZWFycmFuZ2UgbWV0aG9kcy4KLQotMjAxMS0wMi0yMiAxNjowNDoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5oOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0aW5kZXguaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suaDoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSAgY2xlYW51cHMKLQkgIEZpeCBwYWRkaW5nLCByZW1vdmUgZGVwcmVjYXRlZCBzeW1ib2xzLgotCi0yMDExLTAyLTIyIDE1OjA4OjUxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDItMjIgMTQ6MTE6NTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCSAgZ3N0L2dzdGVsZW1lbnQuYwotCSAgZ3N0L2dzdGVsZW1lbnQuaAotCSAgZ3N0L2dzdHBhZC5jCi0JICBnc3QvZ3N0dXRpbHMuYwotCSAgbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbQotCSAgbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbQotCSAgbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZgotCi0yMDExLTAyLTE0IDE4OjA1OjA5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEJlIHNtYXJ0ZXIgd2l0aCBwYWQgYWxsb2NzCi0JICBBdm9pZCBkb2luZyB1bm5lY2Vzc2FyeSBwYWQtYWxsb2NzIHdoZW4gb24gcGFzc3Rocm91Z2ggbW9kZS4KLQkgIElmIG11bHRpcGxlIGJhc2V0cmFuc2Zvcm0gZWxlbWVudHMgYXJlIG9uIGEgcGlwZWxpbmUsIHRoZXkKLQkgIHdvdWxkIGRvIGEgcGFkLWFsbG9jIGZvciBlYWNoIHJlY2VpdmVkIGJ1ZmZlciwgZWFjaCBlbGVtZW50Ci0JICB3b3VsZCBkbyB0aGlzLCBzbyB3ZSB3b3VsZCBoYXZlIGxvdHMgb2YgcGFkIGFsbG9jcyBvbiB0aGUKLQkgIHBpcGVsaW5lIGZvciBhIHNpbmdsZSBidWZmZXIgYmVpbmcgcHVzaGVkIHRocm91Z2ggaXQuCi0JICBUaGlzIHBhdGNoIGF0dGVtcHRzIHRvIHJlZHVjZSB0aGlzIGFtb3VudCBieSBhdm9pZGluZwotCSAgZG9pbmcgcGFkLWFsbG9jcyBpZiB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBkb25lIGl0Ci0JICBhZnRlciB0aGUgbGFzdCBwdXNoZWQgYnVmZmVyLiBTbyBpdCB3aWxsIG9ubHkgYmUgYWxsb3dlZAotCSAgdG8gZG8gYSBuZXcgcGFkLWFsbG9jIGFmdGVyIGl0IGhhcyBwdXNoZWQgYSBidWZmZXIsIHNvIHdlIGdldAotCSAgMXgxIHBhZC1hbGxvYyBhbmQgYnVmZmVyIHJhdGlvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQyMzczCi0KLTIwMTEtMDItMjEgMTM6Mzk6MzggKzAxMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGdzdC9nc3RpbmRleC5jOgotCSAgZG9jczogZml4IHR5cG8gaW4gZ3N0X2luZGV4X25ldygpIGRvY3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDI4NjkKLQotMjAxMS0wMi0yMSAxMjo0NDowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkgIGZha2VzaW5rOiBwcmludCBuZXcgTUVESUE0IGZsYWcgYXMgd2VsbAotCi0yMDExLTAxLTAzIDExOjM3OjA1ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JICBtaW5pb2JqZWN0LCBidWZmZXI6IHN0ZWFsIG1pbmlvYmplY3QgZmxhZyBmb3IgdXNlIGFzIE1FRElBNCBidWZmZXIgZmxhZwotCSAgVGhpcyB3YXMgcmVxdWlyZWQgdG8gYWRkIGEgbmV3IE1FRElBNCBidWZmZXIgZmxhZyBmb3IgaW5kaWNhdGluZwotCSAgcHJvZ3Jlc3NpdmUvbWl4ZWQgdGVsZWNpbmUgdmlkZW8gYnVmZmVycy4gVGhlcmUgaXMgbm8gc3BhY2UgZm9yCi0JICBhZGRpdGlvbmFsIGZsYWdzIGluIEdzdEJ1ZmZlciwgc28gc3RlYWwgb25lIGZyb20gR3N0TWluaU9iamVjdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDI2NzEKLQotMjAxMS0wMi0yMCAxNjoxMToyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmg6Ci0JICBkb2NzOiBhZGQgc29tZSBtb3JlIFNpbmNlOiBtYXJrZXJzIHRvIGF0b21pYyBxdWV1ZSBkb2NzCi0KLTIwMTEtMDItMjEgMTE6NTU6NTAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgUmV2ZXJ0ICJlbGVtZW50OiBDYWxsIC0+cmVsZWFzZV9wYWQoKSB0byBjbGVhbiB1cCBwYWQiCi0JICBUaGlzIGNvbW1pdCBjaGFuZ2VzIHRoZSByZXF1ZXN0IHBhZCBiZWhhdmlvdXIgZm9yIHBsdWdpbnMgYW5kIGFwcGxpY2F0aW9ucy4KLQkgIFJlb3BlbnMgQnVnICM0MDI1NjIKLQkgIFRoZSBwcm9wZXIgZml4IGZvciB0aGF0IGJ1ZyBpcyB0byBrZWVwIHRyYWNrIG9mIGNyZWF0ZWQgcmVxdWVzdCBwYWRzLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBhNWU0NGZmZmZhYTZkN2E4ZDdhZjhkY2I3N2UzNzk5MDk5NjI1M2E1LgotCi0yMDExLTAyLTIxIDEwOjAzOjE2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmRleC5jOgotCSAgaW5kZXg6IGFkZCBGSVhNRS0wLjExOiBjb21tZW50cwotCi0yMDExLTAyLTE1IDEwOjU3OjA4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmRleC5jOgotCSAgZG9jczogaW1wcm92ZSBpbmRleCBkb2NzCi0KLTIwMTEtMDItMTggMTc6MDk6MTQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1wcm9ncmVzcy50eHQ6Ci0JICBkb2NzOiBzcGVsbC1jaGVjawotCi0yMDExLTAyLTE1IDE5OjE1OjE2IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgZmFrZXNpbms6IHByaW50IGJ1ZmZlciBmbGFncwotCi0yMDEwLTEyLTA0IDE4OjUzOjU1IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IENhbGwgLT5yZWxlYXNlX3BhZCgpIHRvIGNsZWFuIHVwIHBhZAotCSAgRml4ZXMgIzYzNjAxMSBhbmQgIzQwMjU2Mi4KLQotMjAxMS0wMi0xNyAxNDo1MDo0MCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0aW5kZXguYzoKLQkgIGluZGV4OiBmaXggY3JlYXRpb24gb2Ygd3JpdGVyIGlkIGZvciB1bnBhcmVudGVkIHBhZHMKLQkgIEFsc28gZG8gc29tZSBjbGVhbnVwIGluIHRoZSBpbXBsLgotCi0yMDExLTAyLTE3IDEwOjM0OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBhZGQgKGRlKXNlcmlhbGlzYXRpb24gZnVuY3Rpb24gZm9yIHVjaGFyCi0JICAuLiBzaW5jZSB3ZSBzYWRseSBoYXZlIGEgcGx1Z2luIGluIC1nb29kIHRoYXQgaGFzIGEgdWNoYXIgcHJvcGVydHkKLQkgIChjbW1sZW5jKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjUyMgotCi0yMDExLTAyLTE2IDE5OjU0OjU3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YXRvbWljcXVldWUuYzoKLQkgIGF0b21pY3F1ZXVlOiBmaXggaW5jbHVkZSBvcmRlciBhdG9taWNxdWV1ZTogZml4IGluY2x1ZGUgb3JkZXIjIFBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmcKLQotMjAxMC0xMC0yOCAxMzoyNzo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGJ1cy5oOgotCSAgYnVzOiBtYWtlIHRoZSBidXMgYWxtb3N0IGxvY2tmcmVlCi0JICBVc2UgbmV3IEdzdFBvbGwgZnVuY3Rpb25hbGl0eSB0byB3YWtldXAgdGhlIG1haW5sb29wLgotCSAgVXNlIGFuIGF0b21pYyBxdWV1ZSBvbiB0aGUgd3JpdGVyIHNpZGUgdG8gcG9zdCB0aGUgbWVzc2FnZXMuCi0JICBUaGUgcmVhZGVyIHNpZGUgaXQgcHJvdGVjdGVkIHdpdGggdGhlIGxvY2sgc3RpbGwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IG11bHRpcGxlCi0JICBjb25jdXJyZW50IHJlYWRlcnMuCi0KLTIwMTEtMDItMTYgMTc6MjE6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogZml4IGRlZnMgZmlsZSBmb3IgbmV3IHN5bWJvbHMKLQotMjAxMS0wMi0xNiAxNzoxNDoxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6Ci0JICBhdG9taWNxdWV1ZTogdXNlIGNvcnJlY3QgYXJyYXkgc2l6ZXMKLQotMjAxMS0wMi0xNiAxNjoyMTo1OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6Ci0JICBhdG9taWNxdWV1ZTogZml4IGRvY3Mgc29tZSBtb3JlCi0KLTIwMTEtMDItMTYgMTY6MTk6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6Ci0JKiBnc3QvZ3N0YXRvbWljcXVldWUuaDoKLQkgIGF0b21pY3F1ZXVlOiBhZGQgcmVmY291bnRpbmcgYW5kIGRvY3MKLQotMjAxMS0wMi0xNiAxMjo0ODo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmM6Ci0JICBhdG9taWNxdWV1ZTogbWFrZSBzdXJlIGEgbWluIGluaXRpYWxfc2l6ZSBpcyB1c2VkCi0KLTIwMTAtMTAtMjggMTY6MDI6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3RhdG9taWNxdWV1ZS5jOgotCSogZ3N0L2dzdGF0b21pY3F1ZXVlLmg6Ci0JICBhdG9taWNxdWV1ZTogYWRkIGFuIGF0b21pYyBxdWV1ZQotCSAgQWRkIGFuIGF0b21pYyBxdWV1ZS4gVGhlIHF1ZXVlIGNhbiBiZSB1c2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBzaW11bHRhbmVvdXNseQotCSAgYW5kIHdpdGhvdXQgdGFraW5nIGFueSBsb2NrcyBvciBkb2luZyBhbnkgYmxvY2tpbmcgb3BlcmF0aW9ucy4gVGhpcyBtYWtlcyBpdAotCSAgaGlnaGx5IHNjYWxhYmxlIGZvciB0aGluZ3MgbGlrZSB0aGUgYnVzLCBidWZmZXJwb29scyBhbmQgb2JqZWN0IHJlY3ljbGluZy4KLQotMjAxMS0wMi0xNiAxNzoxNDo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOgotCSAgY2hlY2s6IGZpeCBhIGxlYWsgaW4gdGhlIGJ1cyB1bml0IHRlc3QKLQotMjAxMS0wMi0xNiAxNzoyODoxNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZGVpbml0OiBhZGQgcHJvZ3Jlc3MgdHlwZSBjbGFzcyB1bnJlZgotCi0yMDExLTAyLTE2IDE1OjEzOjA1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IHRlbGwgYWxzbyB3aGF0IHBhZCBhIHBhZCBpcyBhbHJlYWR5IGxpbmtlZCBhZ2FpbnN0Ci0KLTIwMTEtMDItMTUgMjI6NTY6MzUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOgotCSAgZmlsZXtzaW5rLHNyY306IENoZWNrIGlmIG5vbi1VUkkgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCwgYnV0IG9ubHkgZm9yIHRoZSBVUkkgbm90IHRoZSBsb2NhdGlvbiBwcm9wZXJ0eQotCi0yMDExLTAyLTE1IDIyOjQ5OjI2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzoKLQkgIGZpbGV7c3JjLHNpbmt9OiBGaXggdW5pdCB0ZXN0cwotCSAgZmlsZXNpbmsgYW5kIGZpbGVzcmMgc2hvdWxkIHJldHVybiBleGFjdGx5IHRoZSBzYW1lIFVSSSBhcyBwYXNzZWQKLQkgIGFuZCBtdXN0IG5vdCBlc2NhcGUgcGF0aCBzZXBhcmF0b3JzLgotCi0yMDExLTAyLTE1IDIyOjQ4OjQ0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSAgZmlsZXNpbms6IEZpeCBlc2NhcGluZyBvZiBVUklzCi0JICBFc3BlY2lhbGx5IGRvbid0IGVzY2FwZSAvIGFzIHBhdGggc2VwYXJhdG9ycwotCi0yMDExLTAyLTE1IDIyOjA1OjMxICswMTAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmM6IEZpeCBlc2NhcGluZyBvZiBmaWxlIHVyaXMKLQkgIEZpeGVzIGJ1ZyAjNjQyMzkzLgotCi0yMDExLTAyLTE1IDE4OjI2OjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkgIG1lc3NhZ2U6IGFkZCB0aW1lb3V0IHRvIHByb2dyZXNzIG1lc3NhZ2UKLQkgIEFkZCBhIHRpbWVvdXQgbWVtYmVyIHRvIHRoZSBwcm9ncmVzcyBtZXNzYWdlcyB0byBsZXQgdGhlIGFwcGxpY2F0aW9uIGtub3cgYWJvdXQKLQkgIHRoZSB0aW1lb3V0IHNvIHRoYXQgaXQgY2FuIGRvIHNvbWUgZ3VpIHRoaW5ncyB3aXRoIGl0LgotCi0yMDExLTAyLTE1IDE4OjE0OjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXByb2dyZXNzLnR4dDoKLQkgIGRlc2lnbjogbWVudGlvbiB0aW1lb3V0IGluIHRoZSBwcm9ncmVzcyBtZXNzYWdlCi0KLTIwMTEtMDItMTUgMTc6MjA6MDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtcHJvZ3Jlc3MudHh0OgotCSAgZGVzaWduOiBtYWtlIHByb2dyZXNzIGRyYWZ0IG9mZmljaWFsCi0KLTIwMTEtMDEtMDYgMTg6NTU6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXByb2dyZXNzLnR4dDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkgIG1lc3NhZ2U6IHJlbmFtZSBjYXRlZ29yeSB0byBjb2RlCi0KLTIwMTEtMDEtMDYgMTU6NTg6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBhZGQgbmV3IG1lc3NhZ2UgcXVhcmsKLQotMjAxMS0wMS0wNiAxNTo1ODoyMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtcHJvZ3Jlc3MudHh0OgotCSAgZG9jczogYWRkIG1vcmUgc3RhbmRhcmQgY2F0ZWdvcmllcwotCi0yMDExLTAxLTA1IDEzOjUzOjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IHJlZ2lzdGVyIG5ldyB0eXBlCi0KLTIwMTEtMDEtMDUgMTM6NDg6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6Ci0JICBjaGVjazogYWRkIHByb2dyZXNzIG1lc3NhZ2UgdW5pdCB0ZXN0Ci0KLTIwMTEtMDEtMDUgMTM6NDE6MDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1lc3NhZ2U6IGFkZCBwcm9ncmVzcyBtZXNzYWdlIGZ1bmN0aW9ucwotCi0yMDExLTAxLTA1IDEzOjM5OjE5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1wcm9ncmVzcy50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgcHJvZ3Jlc3MgZmllbGQKLQkgIEF2b2lkIG5hbWluZyB0aGUgcHJvZ3Jlc3MgZnJlZSB0ZXh0IGZpZWxkICdtZXNzYWdlJyBhcyBpdCBjb25mbGljdHMgd2l0aCB0aGUKLQkgIG1lc3NhZ2UgaXRzZWxmLgotCi0yMDExLTAyLTE1IDE0OjQyOjU4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZG9uJ3QgcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiBmaWxlIHVwc3RyZWFtIGluIHB1bGwgbW9kZQotCSAgLi4uIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBwcmVtYXR1cmUgZW9zIGJlaW5nIHJlcG9ydGVkIGRvd25zdHJlYW0sCi0JICByYXRoZXIgdGhhbiBhIHN1Y2Nlc3NmdWwgcGFydGlhbCByZWFkIHdoaWNoIHdvdWxkIHJlc3VsdCB3aGVuCi0JICBwZXJmb3JtZWQgZGlyZWN0bHkgb24gZS5nLiBiYXNlc3JjLgotCi0yMDExLTAxLTI2IDE2OjQ2OjI1ICswODAwICBDaGVuIFJ1aSA8cnVpLmNoZW5AdGlldG8uY29tPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiByZXR1cm4gcmVhbCBlcnJvciBpbiBjb21wYXRpYmxlIGxpbmsgY2hlY2sKLQkgIFdlIG5lZWQgdG8gZW5zdXJlIHdlIGNhbGwgZ3N0X3BhZF9jaGVja19saW5rKCkgd2l0aCB0aGUgdHdvIHBhZHMgaW4gdGhlIGNvcnJlY3QKLQkgIG9yZGVyLiBUaGUgb3JkZXIgZGVwZW5kcyBvbiB3aGV0ZXIgd2UgaXRlcmF0ZSBzcmMgb3Igc2luayBwYWRzLgotCSAgU2lnbmVkLW9mZi1ieTogQ2hlbiBSdWkgPHJ1aS5jaGVuQHRpZXRvLmNvbT4KLQotMjAxMS0wMi0xNCAxNzozMToyNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBDaGVjayBzaW5rcGFkIGZvciBmbHVzaGluZwotCSAgQ2hlY2sgdGhlIHNpbmtwYWQgZm9yIHRoZSBmbHVzaGluZyBzdGF0ZSBiZWZvcmUgY2FsbGluZyB0aGUgY2hhaW5mdW5jdGlvbiBvbiB0aGUKLQkgIHBhZC4gV2UgZG8gdGhpcyBieSBjaGVja2luZyB0aGUgY2FjaGUgKHdoaWNoIGlzIGFsc28gY2xlYXJlZCBvbiB0aGUgc3JjcGFkIHdoZW4KLQkgIHRoZSBzaW5rIGlzIHNldCB0byBmbHVzaGluZykuCi0JICBGaXhlcyAjNjQxOTI4Ci0KLTIwMTEtMDItMTEgMTc6NDc6MTcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IENoZWNrIGZvciBwYWQgYWxsb2MgY2FwcyB3aGVuIHN1Z2dlc3Rpb24gaXMgbm90IGZpeGVkCi0JICBJZiBhZnRlciBjb21wdXRpbmcgdGhlIHN1Z2dlc3Rpb24gd2l0aCBkb3duc3RyZWFtIGNhcHMgd2Ugc3RpbGwgaGF2ZQotCSAgYSBub24tZml4ZWQgc3VnZ2VzdGlvbiBjYXBzIHRyeSB0byBpbnRlcnNlY3Qgd2l0aCB0aGUgaW5wdXQgY2FwcwotCSAgb2YgdGhlIHBhZCBhbGxvYyB0byBhdm9pZCB1c2VsZXNzIHJlbmVnb3RpYXRpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjEzMAotCi0yMDExLTAyLTE0IDE0OjAwOjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogaW1wcm92ZSBkdXJhdGlvbiBjYWxjdWxhdGlvbgotCSAgS2VlcCB0cmFjayBvZiB0aGUgYXZlcmFnZSBkaXN0YW5jZSBiZXR3ZWVuIGluY29tbWluZyB0aW1lc3RhbXBzIGFuZAotCSAgdXNlIHRoYXQgdG8gZXN0aW1hdGUgdGhlIGZyYW1lIGR1cmF0aW9uIHdoZW4gYnVmZmVycyBoYXZlIG5vIGR1cmF0aW9uIHNldCBvbgotCSAgdGhlbS4KLQotMjAxMS0wMi0xNCAxMzo0OToxMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGltcHJvdmUgcmF0ZSBjYWxjdWxhdGlvbgotCSAgV2hlbiB0aGVyZSBpcyBubyBkdXJhdGlvbiBvbiBpbnB1dCBidWZmZXJzLCBhc3N1bWUgdGhlIHJhdGUgaXMgMS4wCi0JICBpbnN0ZWFkIG9mICh0aGUgdW5kZWZpbmVkKSAwLjAuCi0KLTIwMTEtMDItMTQgMTM6NDc6MDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBpbXByb3ZlIGF2ZXJhZ2UgZHVyYXRpb24gY2FsY3VsYXRpb24KLQkgIEltcHJvdmUgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBkdXJhdGlvbi4gV2hlbiB3ZSBoYXZlIG5vIGlucHV0IGR1cmF0aW9uIHNldCBvbgotCSAgdGhlIGlucHV0IGJ1ZmZlcnMgc3RvcCBpcyBzZXQgdG8gc3RhcnQgYW5kIHRoZW4gd2UgZW5kIHVwIHVzaW5nIGEgMCBkdXJhdGlvbiBpbgotCSAgdGhlIGF2ZXJhZ2UgY2FsY3VsYXRpb24uCi0KLTIwMTEtMDItMTQgMTI6MjE6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiByZW5hbWUgdmFyaWFibGUKLQkgIFJlbmFtZSBhbiBpbnRlcm5hbCB2YXJpYWJsZSB0byBiZXR0ZXIgcmVmbGFjdCB3aGF0IGl0cyB2YWx1ZSBtZWFucy4KLQotMjAxMS0wMi0xNCAxNTozOToyMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2UtbGF1bmNoOiB0cmltIHdoaXRlc3BhY2VzCi0KLTIwMTEtMDItMTQgMTU6Mzc6MjMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlLWxhdW5jaDogZml4IHR5cG8gaW4gcGFkLWxpc3QgbGVuZ3RoIGNvbXBhcmlzaW9uCi0JICBJdCB3YXMgY29tcGFyaW5nIHRoZSBsZW5ndGggd2l0aCBpdHNlbGYuCi0JICBGaXhlcyAjNjQyMDcxLgotCi0yMDExLTAyLTE0IDEyOjUyOjMwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBmOTRkNzM5IHRvIDFkZTdmNmEKLQotMjAxMS0wMi0xMyAyMjo1NjoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGdzdC1sYXVuY2g6IHByZXR0eS1wcmludCBkYXRldGltZSB0YWdzCi0KLTIwMTEtMDItMTAgMjM6MzA6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3RyZWFtZXIuZG9hcDoKLQkgIGdzdHJlYW1lci5kb2FwOiB1cGRhdGUgbWFpbGluZyBsaXN0IGhvc3QKLQotMjAxMS0wMi0xMCAxNDo1MzozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGZpeCBzb21lIGNvbW1lbnRzCi0KLTIwMTEtMDItMTAgMTQ6NTA6MDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBrZWVwIHRyYWNrIG9mIGVhcmxpZXN0IFFvUyB0aW1lc3RhbXAKLQkgIEtlZXAgdHJhY2sgb2YgdGhlIGVhcmxpZXN0IGFsbG93ZWQgdGltZXN0YW1wIGFjY29yZGluZyB0byB0aGUgbGF0ZXN0Ci0JICBRb1MgcmVwb3J0IGFuZCBkcm9wIGJ1ZmZlcnMgYmVmb3JlIHRoYXQgdGltZS4gQWN0aXZhdGUgdGhpcyBmaWx0ZXIKLQkgIHdoZW4gdGhyb3R0bGluZyBpcyBlbmFibGVkLiBXZSBjb3VsZCBsYXRlciBhbHNvIGFjdGl2YXRlIHRoaXMgaW4gdGhlCi0JICBvdGhlciBRb1MgY2FzZXMuCi0JICBTZWUgIzYzODg5MQotCi0yMDExLTAyLTEwIDE0OjE3OjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogdXNlIG5ldyBRb1MgdHlwZQotCSAgVXNlIHRoZSBuZXcgUW9TIHR5cGUgYW5kIHNlbmQgdGhyb3R0bGluZyBRb1MgbWVzc2FnZXMuCi0KLTIwMTEtMDItMTAgMTM6NDI6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBiYXNlc2luazogYWRkIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSBhIHRocm90dGxlLXRpbWUKLQkgIEFkZCBhIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgdGhyb3R0bGUgdGltZSBvbiBhIHNpbmsuIFRoZQotCSAgcHJvcGVydHkgaXMgbm90IHlldCB1c2VkLgotCSAgU2VlICM2Mzg4OTEKLQotMjAxMS0wMi0xMCAxMjowMjowMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZXZlbnQ6IGFkZCBRb1MgZXZlbnQgdHlwZQotCSAgQWRkIGEgcGFyYW1ldGVyIHRvIHRoZSBRb1MgZXZlbnQgdG8gc3BlY2lmeSB0aGUgUW9TIGV2ZW50IHR5cGUuCi0JICBVcGRhdGUgZG9jcyBhbmQgYWRkIHVuaXQgdGVzdC4KLQkgIFNlZSAjNjM4ODkxCi0KLTIwMTEtMDItMTAgMTI6MDA6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSAgY2xvY2s6IGZpeCBwYXJhbWV0ZXIgZG9jcwotCi0yMDExLTAyLTEwIDEwOjQ5OjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6Ci0JICBkZXNpZ246IHR3ZWFrIGRvY3MgYSBsaXR0bGUKLQotMjAxMS0wMi0xMCAxMDozNDo1NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgotCSAgZGVzaWduOiB1cGRhdGUgUW9TIGRvY3VtZW50Ci0JICBBZGQgbmV3IFFvUyB0eXBlcyBhbmQgdGFsayBhYm91dCB0aGUgbmV3IHRocm90dGxlIFFvUyBtZXNzYWdlLgotCi0yMDExLTAyLTEwIDEzOjQ2OjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVycG9vbC50eHQ6Ci0JICBkb2NzOiBmaXggc29tZSB0eXBvcyBpbiB0aGUgYnVmZmVycG9vbCBkcmFmdAotCi0yMDExLTAyLTEwIDEwOjE5OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBldmVudHM6IGZpeCBnLWkgYW5ub3RhdGlvbiBmb3IgZ3N0X2V2ZW50X25ld190YWcoKSB3aGljaCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHRhZyBsaXN0Ci0KLTIwMTEtMDItMTAgMDA6MDI6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGRvY3M6IG1lbnRpb24gdGhhdCBpdCdzIG5lY2Vzc2FyeSB0byBzZXQgdGhlIHN0YXRlIG9mIGVsZW1lbnRzIGFkZGVkIHRvIGFuIGFscmVhZHktcnVubmluZyBwaXBlbGluZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTYzMQotCi0yMDExLTAyLTA5IDE2OjIyOjA0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1idWZmZXJwb29sLnR4dDoKLQkgIGRlc2lnbjogYWRkIGRyYWZ0IGZvciBmaXJzdCBpZGVhcyBmb3IgYSBidWZmZXJwb29sIGZlYXR1cmUKLQkgIEFkZCBhIGZpcnN0IGRyYWZ0IHdpdGggc29tZSBpZGVhcyBhbmQgdXNlIGNhc2VzIGZvciB0aGUgaW1wbGVtZW50YXRpb24KLQkgIGZvciBidWZmZXJwb29scy4gVGhlIHB1cnBvc2UgaXMgdG8gYmUgYWJsZSB0byBtYWtlIGVsZW1lbnRzIG5lZ290aWF0ZQotCSAgdGhlaXIgYnVmZmVyIHJlcXVpcmVtZW50cyBhcyB3ZWxsIGFzIHByb3ZpZGUgYW4gaW5mcmFzdHJ1Y3R1cmUgdG8KLQkgIHByZWFsbG9jYXRlIGFuZCByZXVzZSBidWZmZXJzIGluIGFuIGVhc3kgd2F5LgotCi0yMDExLTAyLTA5IDE1OjIzOjEzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICBkb2NzOiBjbGFyaWZ5IHRoZSBOT01JTkFMX0JJVFJBVEUgZG9jcwotCSAgVGVsbCB0aGF0IGl0cyBhIHRhcmdldCBiaXRyYXRlIGFuZCBhY3R1YWwgdmFsdWVzIG1pZ2h0IGJlIGRpZmZlcmVudC4KLQotMjAxMS0wMi0wMyAxNToxNzoxMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBwb2xsOiB0cmlnZ2VyIHJlYnVpbGQgc2V0dXAgaW4gX25ldwotCSAgRmFpbGluZyB0byBkbyBzbyBpbiB0aGUgV2luZG93cyBjYXNlIChpbXBsaWNpdGx5IHRyaWdnZXJlZCBvdGhlcndpc2UpCi0JICB3b3VsZCBoYXZlIGEgc3Vic2VxdWVudCBfd2FpdCByZXR1cm4gaW1tZWRpYXRlbHkgbGVhZGluZyB0byBoaWdoIENQVQotCSAgdXNhZ2UgdGltZW91dCBsb29wcy4KLQkgIEZpeGVzICM2NDA2NzUuCi0KLTIwMTEtMDItMDMgMTA6NTM6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGluZm86IG1ha2UgYWRkaW5nL3JlbW92aW5nIG9mIGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCgpIHdvcmsgcHJvcGVybHkKLQkgIE1ha2UgYWRkaW5nL3JlbW92aW5nIGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCgpIHdvcmsgcmVsaWFibHkgaW4gYWxsCi0JICBjaXJjdW1zdGFuY2VzLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBkZXBlbmRpbmcgb24gcGxhdGZvcm0gYW5kIGxpbmtlcgotCSAgZmxhZ3MgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IG1pZ2h0IHJlc29sdmUgdG8gZGlmZmVyZW50IGFkZHJlc3NlcywKLQkgIHdoaWNoIG1hZGUgaXQgaW1wb3NzaWJsZSB0byByZW1vdmUgdGhlIGRlZmF1bHQgbG9nIGZ1bmN0aW9uIGFkZGVkCi0JICBpbiBnc3RfaW5pdCgpIGZyb20gYXBwbGljYXRpb24gY29kZSAoYmVjYXVzZSB0aGUgcG9pbnRlciB2YWx1ZXMKLQkgIGRpZG4ndCBtYXRjaCkuIFRoZSBuZXcgYXBwcm9hY2ggc2hvdWxkIGtlZXAgdGhpbmdzIHNpbXBsZSBieSBwYXNzaW5nCi0JICBOVUxMIGZvciB0aGUgZGVmYXVsdCBmdW5jdGlvbiwgd2hpY2ggdGhlIGNvZGUgaW4gbGliZ3N0cmVhbWVyIGNhbgotCSAgdGhlbiBoYW5kbGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI1Mzk2Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwNzcxCi0KLTIwMTEtMDItMDMgMTA6Mjg6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgUmV2ZXJ0ICJpbmZvOiB1c2UgdGhlIHB1YmxpY2x5IHZpc2libGUgYWRkcmVzcyB0byBmaXggdGhlIHRlc3RzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBlYjU2Njg3YTZkZmQyMDc1MDdhNGNhMDAwZWFlNTNmOTNiNWUzM2VhLgotCSAgV2hpbGUgdGhpcyBjb21taXQgbWF5IGhhdmUgZml4ZWQgYSBwcm9ibGVtIG9uIG9uZSBvZiB0aGUgYnVpbGQgYm90cywKLQkgIGl0IGRpZG4ndCBhY3R1YWxseSBmaXggdGhlIG9yaWdpbmFsIGJ1ZyByZXBvcnRlZCBmb3Igd2luMzIuCi0JICBBbHNvLCBpdCBjYXVzZXMgb3RoZXIgcHJvYmxlbXMsIHN1Y2ggYXMgdGhlIGxvb2t1cCBmYWlsaW5nIHdoZW4KLQkgIGNhbGxlZCBmcm9tIEMrKyBjb2RlIChnc3QtcGhvbm9uLCBhbWFyb2spLgotCSAgVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBkaWZmZXJlbnRseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDA3NzEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUzOTYKLQotMjAxMS0wMi0wMiAxNTozNTo0NSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IHByb3Blcmx5IGlkZW50aXR5IGRlcXVldWVkIGV2ZW50IGFzIHN1Y2gKLQkgIC4uLiB3aGljaCBhdm9pZHMgdGVybWluYXRpbmcgd2l0aCBFUlJPUiByYXRoZXIgdGhhbiBVTkVYUEVDVEVELgotCi0yMDExLTAyLTAyIDAyOjA3OjU4ICswMDAwICBQZXRlciBDb2xsaW5nYm91cm5lIDxwZXRlckBwY2MubWUudWs+Ci0KLQkqIHNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiB1c2UgJEdTVF9QUkVGSVggdmFyaWFibGUKLQkgIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNoYW5nZSB0aGUgcHJlZml4IGJ5IGVkaXRpbmcgdGhlIHNjcmlwdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDEyMTIKLQotMjAxMC0wOC0xOSAyMjo0MzowNyArMDMwMCAgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5Abm9raWEuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdsaXN0OiBhZGQgYSBuZXcgImVuY29kZWQtYnkiIHRhZwotCSAgVXNlY2FzZTogSUQzdjIgVEVOQyAoIkVuY29kZWQgYnkiKSBmcmFtZS4KLQkgIEFQSTogR1NUX1RBR19FTkNPREVEX0JZCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI3MjY4Ci0KLTIwMTEtMDEtMjkgMTg6MDI6MTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6Ci0JICBuZXQ6IHVzZSBzb2NrbGVuX3Qgd2hlcmUgYXBwcm9wcmlhdGUgcmF0aGVyIHRoYW4gc3BlY2lmaWMgdHlwZQotCSAgSW4gcGFydGljdWxhciwgZml4ZXMgQ3lnd2luIGJ1aWxkIHdoZXJlIHNvY2tsZW5fdCBpcyBkZWZpbmVkIGFzIGludAotCSAgaW4gbGluZSB3aXRoIG5hdGl2ZSB3aW4zMiBhcGkgZGVmaW5pdGlvbi4KLQotMjAxMS0wMS0zMSAxNTo1ODoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKLQkgIGJ1czogaG9ub3VyIGFueSBwZXItdGhyZWFkIGRlZmF1bHQgbWFpbiBjb250ZXh0IHNldCB2aWEgZ19tYWluX3RocmVhZF9wdXNoX3RocmVhZF9kZWZhdWx0KCkKLQkgIE1ha2VzIGdzdF9idXNfYWRkX3dhdGNoKCksIGdzdF9idXNfYWRkX3dhdGNoX2Z1bGwoKSwgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKCksCi0JICBhbmQgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwoKSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgYXV0b21hdGljYWxseSBwaWNrIHVwCi0JICBhbnkgbm9uLWRlZmF1bHQgbWFpbiBjb250ZXh0cyBzZXQgZm9yIHRoZSBjdXJyZW50IHRocmVhZCB2aWEKLQkgIGdfbWFpbl90aHJlYWRfcHVzaF90aHJlYWRfZGVmYXVsdCgpLgotCi0yMDExLTAxLTI4IDE1OjM2OjMzIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIHZhbHZlOiBPbmx5IHNldCBkaXNjb250IG9uIHRoZSBmaXJzdCBidWZmZXIgYWZ0ZXIgZHJvcHMKLQkgIFJlc2V0IHRoZSBkaXNjb250IG1lbWJlciBhZnRlciBzZXR0aW5nIGRpc2NvbnQgb24gdGhlIGZpcnN0IGJ1ZmZlciBhZnRlcgotCSAgZHJvcHBpbmcuCi0KLTIwMTEtMDEtMjggMTk6MDg6MDggKzAwMDAgIEJhc3RpZW4gTm9jZXJhIDxoYWRlc3NAaGFkZXNzLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIEdzdEVsZW1lbnQ6IEZpeCB3YXJuaW5nIHdpdGggR0NDIDQuNgotCSAgZ3N0ZWxlbWVudC5jOiBJbiBmdW5jdGlvbiDigJhnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWTigJk6Ci0JICBnc3RlbGVtZW50LmM6MTA1MjoxODogZXJyb3I6IHZhcmlhYmxlIOKAmHRtcOKAmSBzZXQgYnV0IG5vdCB1c2VkIFstV2Vycm9yPXVudXNlZC1idXQtc2V0LXZhcmlhYmxlXQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MDg1MAotCi0yMDExLTAxLTI3IDA5OjI4OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgaWRlbnRpdHk6IHByaW50IHVuc2V0IGJ1ZmZlciB0aW1lc3RhbXBzIG9yIGR1cmF0aW9ucyBhcyAnbm9uZScKLQkgIExpa2UgZmFrZXNpbmsgYW5kIGZha2VzcmMgZG8uCi0KLTIwMTEtMDEtMTIgMTY6MDM6MzAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBkb24ndCB0YWtlIG9iamVjdCBsb2NrIGZvciByZWFkaW5nIHRoZSBmb3VuZCBjYXBzCi0JICBPbmNlIHdlIHN3aXRjaCB0byBub3JtYWwgbW9kZSwgd2UncmUgbm90IHR5cGVmaW5kaW5nIGFueW1vcmUgYW5kIHRodXMgdGhlIGNhcHMKLQkgIHdpbGwgbm90IGNoYW5nZS4gVGhlcmVmb3JlIGNhbiBhdm9pZCB0aGUgb2JqZWN0IGxvY2sgaW4gdGhlIGRhdGEtZmxvdyBwYXRoLgotCSAgVGhlIGxvY2tpbmcgd2FzIGFkZGVkIGluIG9yZGVyIHRvIGZpeCBidWcgIzYwODg3Ny4KLQotMjAxMS0wMS0yNSAwOTozOTo0NSArMDgwMCAgWmhhbmcgV2FubWluZyA8V2FubWluZy5aaGFuZ0B0aWV0by5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OgotCSogZG9jcy9yYW5kb20vY2FwczoKLQkqIGRvY3MvcmFuZG9tL29tZWdhL1RPRE8tMC4xLjA6Ci0JKiBkb2NzL3JhbmRvbS90aG9tYXN2cy9jYXB0dXJpbmc6Ci0JKiBkb2NzL3JhbmRvbS93dGF5L2V2ZW50czoKLQkqIGRvY3MvcmFuZG9tL3d0YXkvZXZlbnRzMzoKLQkqIGRvY3Mvc2xpZGVzL291dGxpbmU6Ci0JICBkb2NzOiBmaXggYSBmZXcgbW9yZSB0eXBvcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MDUwMgotCi0yMDExLTAxLTI1IDE4OjQ4OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIGRvY3M6IGZsZXNoIG91dCB0eXBlZmluZGVsZW1lbnQgZG9jcyBzb21lIG1vcmUKLQkgIE1lbnRpb24gdGhhdCBoYXZlLXR5cGUgc2lnbmFsIG1heSBiZSBlbWl0dGVkIGZyb20gc3RyZWFtaW5nCi0JICB0aHJlYWQgb3IgYXBwbGljYXRpb24gdGhyZWFkLCBhbmQgZml4IGEgdHlwby4KLQotMjAxMS0wMS0xMiAxNjowMzo1NyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IGNvZGUgYW5kIGNvbW1lbnQgY2xlYW51cHMKLQkgIE1ha2UgY29kZSB0d28gcGxhY2VzIG9mIHRoZSBjb2RlIHRoZSBwdXNoZXMgdGhlIGJ1ZmZlciBzdG9yZSBtb3JlIHNpbWlsYXIuIE1vcmUKLQkgIGNvbW1lbnRzIGFuZCBkZWJ1ZyBsb2dnaW5nLgotCi0yMDExLTAxLTEyIDEzOjA1OjA2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0cmFjZS5jOgotCSAgdHJhY2U6IGVuc3VyZSBtZXNzYWdlcyBhcmUgXDAgdGVybWluYXRlZAotCi0yMDExLTAxLTEyIDEyOjU4OjQ0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIG5ldHRpbWVwcm92aWRlcjogaGFuZGxlIGludmFsaWQgbmV0d29yayBhZGRyZXNzZXMgZWFybGllcgotCSAgSGFuZGxlIGluZXRfYXRvbigpIHJldHVybiBjb2RlLgotCi0yMDExLTAxLTEyIDEyOjQ0OjU5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgotCSAgY2hlY2tzOiBhZGQgYSBjb21tZW50IHRvIGluZGljYXRlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBsZWF2ZSBvdXQgdGhlICdicmVhaycKLQotMjAxMS0wMS0xMiAxMjo0MzowNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5OiByZW1vdmUgZGVhZCBjb2RlCi0JICBUaGUgR0Vycm9yIGlzIG9ubHkgdXNlZCBmb3IgdGhlIG1tYXAgb3BlcmF0aW9ucy4gSWYgd2UgaGF2ZSBhbiBlcnJvciB3ZSBoYW5kbGUKLQkgIGFuZCBjbGVhbiBpdCB0aGVyZSBhbHJlYWR5LgotCi0yMDExLTAxLTEyIDA5OjMzOjUzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgZG9jczogc21hbGwgY29udHJvbGxlciBhcGkgZG9jcyBpbXByb3ZlbWVudAotCi0yMDExLTAxLTExIDE1OjA5OjUyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogY2Fub25pY2FsaXplIHNpZ25hbCBuYW1lCi0KLTIwMTEtMDEtMTEgMTU6MDk6MzAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIGRvY3M6IG1lbnRpb24gaGF2ZS10eXBlIHNpZ25hbCBpbiB0aGUgZG9jcy4KLQotMjAxMS0wMS0yNSAwOToxNTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIGRvY3M6IG1pbm9yIGdzdC1sYXVuY2ggbWFuIHBhZ2UgZml4Ci0JICBUcmFuc21pdHRlci9yZWNlaXZlciBwaXBlbGluZXMgd2VyZSBtaXNsYWJlbGxlZC4gU3BvdHRlZCBieSBNYWppbi4KLQotMjAxMS0wMS0yNSAxNjowOToxOCArMTAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlIHRlc3Q6IFJlbW92ZSB3b3JrYXJvdW5kIGZvciBwYWRfdGFzayBoYW5ncwotCSAgUmVtb3ZlIGNvZGUgdGhhdCBpc24ndCBuZWVkZWQgYW55IGxvbmdlciwgd2hpY2ggc2V0cyB0aGUgbXVsdGlxdWV1ZQotCSAgdG8gUExBWUlORyBhbmQgYmFjayBiZWZvcmUgdW5yZWZmaW5nLCBpbiBvcmRlciB0byBhdm9pZCBhIGRlYWRsb2NrCi0JICB3YWl0aW5nIGZvciBnc3RwYWQgdGFza3MgdGhhdCB3ZXJlIG5ldmVyIHN0YXJ0ZWQuIFRoZSBwcm9ibGVtIHNlZW1zCi0JICB0byBoYXZlIGJlZW4gZml4ZWQgbG9uZyBhZ28uCi0KLTIwMTEtMDEtMjUgMDA6MjA6MzQgKzA4MDAgIENhaSBZdWFucWluZyA8Y2tqYWNrZXRAZ21haWwuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LU1ULXJlZmNvdW50aW5nLnR4dDoKLQkgIGRlc2lnbiBkb2NzOiBmaXggMiB0eXBvcyBpbiBwYXJ0LU1ULXJlZmNvdW50aW5nCi0KLTIwMTEtMDEtMjQgMTc6NDY6MTUgKzA4MDAgIFlhbmcgWGljaHVhbiA8eGljaHVhbi55YW5nQHRpZXRvLmNvbT4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1nc3RiaW4udHh0OgotCSAgZGVzaWduIGRvY3M6IHBhcnQtZ3N0YmluLnR4dCBmaXggdHlwbwotCSAgU2lnbmVkLW9mZi1ieTogWWFuZyBYaWNodWFuIDx4aWNodWFuLnlhbmdAdGlldG8uY29tPgotCi0yMDExLTAxLTE5IDE1OjQ4OjI2ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmxpc3QudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXByZXJvbGwudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1wdXNoLXB1bGwudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zY2hlZHVsaW5nLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6Ci0JICBkZXNpZ24gZG9jczogZml4IGEgZmV3IHR5cG9zIGFuZCBhIHRoaW5rbwotCi0yMDExLTAxLTExIDE3OjQzOjU3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNsb2NrOiBBUEk6IEFkZCBmdW5jdGlvbiB0byByZS1pbml0IHBlcmlvZGljIEdzdENsb2NrSURzCi0KLTIwMTEtMDEtMjAgMTQ6Mzc6MjUgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JICBnc3RwbHVnaW5sb2FkZXI6IGRvIG5vdCBsZWFrIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcKLQkgIFRoZSBkZXNjcmlwdGlvbiBzdHJpbmcgd2FzIGNoYW5nZWQgdG8gYW4gaW5saW5lZCBzdHJpbmcgYSB3aGlsZSBiYWNrLgotCSAgKEJ1dDogbm8gbmVlZCB0byBpbnRlcm4gdGhlIGNvbnN0IHN0cmluZ3MgaGVyZSwgd2UganVzdCB1c2UgdGhlIGludGVybmluZwotCSAgdG8gYXZvaWQgYWxsb2NhdGluZyBkdXBsaWNhdGVzIGFuZCBtYWtlIG1lbW9yeSBtYW5hZ2VtZW50IGVhc2llciwKLQkgIHNpbmNlIHRoZSBzdHJpbmdzIHdpbGwgYmUgYXJvdW5kIGZvciB0aGUgbGlmZS10aW1lIG9mIHRoZSBhcHAgYW55d2F5KS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDAwNzEKLQotMjAxMS0wMS0yMiAxNTozMzo1OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBjbGFyaWZ5IGRvY3MKLQotMjAxMS0wMS0xMSAxMDozMzozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgotCSAgZGVzaWduOiB1cGRhdGUgYnVmZmVyaW5nIGRvYwotCSAgQWRkIHN0cmF0ZWdpZXMgdG8gYnVmZmVyaW5nIGRvYwotCi0yMDExLTAxLTI0IDExOjUzOjEyICswMjAwICBNYXJ0IFJhdWRzZXBwIDxtYXJ0LnJhdWRzZXBwQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suaDoKLQkgIGRvY3M6IGFkZCBtaXNzaW5nICJTaW5jZTogMC4xMC4zMiIgbWFya2VycyBmb3IgR3N0Q2xvY2sKLQkgIFNpbmNlIHRhZ3Mgd2VyZSBtaXNzaW5nIGZvciBnc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0KCkKLQkgIGFuZCBHU1RfQ0xPQ0tfRE9ORS4KLQotMjAxMS0wMS0yNCAxMDo1NjoyMSArMDIwMCAgTWFydCBSYXVkc2VwcCA8bWFydC5yYXVkc2VwcEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBkb2NzOiBGaXggR3N0UXVldWUyOnJpbmctYnVmZmVyLW1heC1zaXplIHByb3BlcnR5IFNpbmNlIHRhZyAoMC4xMC4zMSwgbm90IDAuMTAuMzApCi0KLTIwMTEtMDEtMjQgMTA6MjY6NDUgKzAyMDAgIE1hcnQgUmF1ZHNlcHAgPG1hcnQucmF1ZHNlcHBAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBkb2NzOiBhZGQgbWlzc2luZyAiU2luY2U6IDAuMTAuMzEiIG1hcmtlciBmb3IgZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lKCkKLQotMjAxMS0wMS0yNCAxNDoyMjoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIHRlc3RzOiBhZGQgdW5pdCB0ZXN0IGZvciByZWFkLWJleW9uZC1lbmQtb2Ytc3RyaW5nIGJ1ZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTY3NAotCi0yMDExLTAxLTI0IDE0OjE2OjM3ICswMDAwICBNaWd1ZWwgQW5nZWwgQ2FicmVyYSBNb3lhIDxtYWRtYWMyNTAxQGdtYWlsLmNvbT4KLQotCSogZ3N0L3BhcnNlL3R5cGVzLmg6Ci0JICBwYXJzZS1sYXVuY2g6IGRvbid0IHJlYWQgcGFzdCBlbmQgb2Ygc3RyaW5nIGlmIGxhc3QgY2hhcmFjdGVyIGlzIGFuIGVzY2FwZSBjaGFyCi0JICBXaGVuIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIHByb3BlcnR5IHZhbHVlIGlzIGEgYmFja3NsYXNoCi0JICB0aGUgdW5lc2NhcGluZyBjb2RlIHJlYWRzIG9uZSBieXRlIHBhc3MgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTY3NAotCi0yMDExLTAxLTE0IDA5OjIxOjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWxzLm1hazoKLQkgIGRvY3M6IGhhY2sgYSBjaGFyc2V0PXV0Zi04IGludG8gcHdnL2FkbSBodG1sIHZlcnNpb25zCi0JICBTbyB0aGUgZW5jb2Rpbmcgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50IGlzIHJlc3BlY3RlZCBhbmQKLQkgIGRpc3BsYXlzIHByb3Blcmx5IGluIGJyb3dzZXJzIHdoZXJlIHRoZSBlbmNvZGluZyBhdXRvZGV0ZWN0aW9uCi0JICBmYWlscyB0byByZWNvZ25pc2UgdGhhdCBpdCdzIHV0Zi04LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTQ0OAotCi0yMDExLTAxLTEzIDE1OjQxOjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGNoZWNrOiBkb24ndCBsZWFrIHhtbCBmaWxlIG5hbWUgaWYgR1NUX0NIRUNLX1hNTCBpcyBzZXQKLQkgIFNwb3R0ZWQgYnkgbnZpbmVldGhAZ21haWwuY29tCi0KLTIwMTEtMDEtMjMgMjM6NDU6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDAuMTAuMzIgPT09Ci0KLTIwMTEtMDEtMjEgMTA6MjU6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDAuMTAuMzIKLQotMjAxMS0wMS0yMCAxOTowNzozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIFJldmVydCAiY29uZmlndXJlOiByZXF1aXJlIGdvYmplY3QtaW50cm9zcGVjdGlvbiA+PSAwLjkuMTIiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDNhNTlkNDE2YWY2ZDBmOGI2MWUyNDYwODMwZWI2ZjExMzg5MjllYzIuCi0JICBSZXZlcnRpbmcgdGhpcywgYXMgdGhlIGZlYXR1cmUgd2UgYnVtcGVkIHRoZSByZXF1aXJlbWVudCBmb3IKLQkgIGRpZG4ndCBhY3R1YWxseSB3b3JrIHByb3Blcmx5IG9yIGhlbHAgd2l0aCB0aGUgaXNzdWUgd2Ugd2VyZQotCSAgdHJ5aW5nIHRvIGZpeCAoYW5kIGl0IHdhcyBmaXhlZCBkaWZmZXJlbnRseSBpbiB0aGUgZW5kKS4KLQotMjAxMS0wMS0xOCAyMjo1MTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sOgotCSAgZG9jczogZml4IHNwZWxsaW5nIG9mICd0aHJlc2hvbGQnIGluIGFwcCBkZXYgbWFudWFsCi0KLTIwMTEtMDEtMTggMTA6MTA6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMzEuNCBwcmUtcmVsZWFzZQotCi0yMDExLTAxLTE4IDA5OjA0OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgZ29iamVjdC1pbnRyb3NwZWN0aW9uOiB0cnkgaGFyZGVyIHRvIG1ha2UgZy1pci1zY2FubmVyIHVzZSB0aGUgcmlnaHQgbGliZ3N0cmVhbWVyCi0JICBBcHBseSBmaXggZnJvbSBsaWJnc3RiYXNlIHRvIGFsbCBjb3JlIGxpYnMgbm93IHRoYXQgd2Uga25vdyB0aGF0IGl0Ci0JICB3b3Jrcy4gU2hvdWxkIGZpeCBwcm9ibGVtcyB3aXRoIGctaXItc2Nhbm5lciB1c2luZyB0aGUgd3JvbmcKLQkgIChpZS4gc3lzdGVtKSBsaWJnc3RyZWFtZXIsIGxlYWRpbmcgdG8gbGlua2luZyBlcnJvcnMgc3VjaCBhcwotCSAgdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZ3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdCcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3NTQ5Ci0KLTIwMTEtMDEtMTQgMDA6MjA6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbHMubWFrOgotCSogZG9jcy9wd2cvcHdnLnhtbDoKLQkgIGRvY3M6IGZpeCBnYXJibGVkIFVURi04IGNoYXJhY3RlcnMgd2hlbiBnZW5lcmF0aW5nIGFwcCBkZXYgbWFudWFsIHBzL3BkZgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTQ0OAotCi0yMDExLTAxLTEzIDIwOjEyOjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkgIGdvYmplY3QtaW50cm9zcGVjdGlvbjogYW5vdGhlciBhdHRlbXB0IHRvIG1ha2UgZy1pIGZpbmQgdGhlIHJpZ2h0IGxpYmdzdHJlYW1lcgotCSAgVHVybnMgb3V0IGctaSBwdXRzIHRoZSBhZGRpdGlvbmFsIC1MIHdlIHNwZWNpZnkgYXQgdGhlIGVuZCwgaGVscGZ1bGx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNzU0OQotCi0yMDExLTAxLTEyIDE1OjQ2OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiByZXF1aXJlIGdvYmplY3QtaW50cm9zcGVjdGlvbiA+PSAwLjkuMTIKLQkgIEVhcmxpZXIgdmVyc2lvbnMgZG9uJ3QgaG9ub3VyIHRoZSAtTC8tLWxpYnJhcnktcGF0aCBvcHRpb24sCi0JICB3aGljaCB3ZSBuZWVkLiBTZWUgY29tbWl0IDRkMGNjZGFkIGluIGdvYmplY3QtaW50cm9zcGVjdGlvbiBnaXQuCi0KLTIwMTEtMDEtMTIgMTA6MTc6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSAgY29udHJvbGxlcjogdXBkYXRlIGctaSBpbmNsdWRlIHBhdGhzIGFzIHdlbGwgZm9yIGhlYWRlciBjaGFuZ2VzCi0JICBIb3BlZnVsbHkgbWFrZXMgTHVjaWQgYW5kIE1hdmVyaWNrIGJ1aWxkIGJvdHMgaGFwcHkgYWdhaW4KLQotMjAxMS0wMS0xMSAxODozOTowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgMC4xMC4zMS4zIHByZS1yZWxlYXNlCi0KLTIwMTEtMDEtMTEgMTg6Mzg6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9MSU5HVUFTOgotCSogcG8vZ2wucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3N2LnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMS0wMS0xMSAxOToyNjo0MCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oOgotCSAgY29udHJvbGxlcjogRml4IGhlYWRlcnMgdG8gdXNlIDwgPiBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzCi0JICBUaGUgYmVoYXZpb3Igb2YgIiAiIGluIGluY2x1ZGUgc3RhdGVtZW50cyBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIC0KLQkgIHNlZSB0aGUgQyBzdGFuZGFyZCwgc2VjdGlvbiA2LjEwLjIgb3IKLQkgIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE1OTMKLQotMjAxMS0wMS0xMSAxOToxNDoyOCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBnc3RuZXQ6IEZpeCAtLWMtaW5jbHVkZSBmb3IgZ2lyIGdlbmVyYXRpb24KLQkgIFByZXZpb3VzbHkgaXQgd2FzIC0gcHJvYmFibHkgZHVlIHRvIGNvcHkvcGFzdGUgZXJyb3IgLSBsb29raW5nIGZvcgotCSAgZ3N0YmFzZSBoZWFkZXJzLgotCSAgSXQncyBjaGFuZ2VkIG5vdyB0byBvbmx5IGluY2x1ZGUgdGhlIG9uZSBwdWJsaWMgaGVhZGVyIGZvciBnc3RuZXQuaAotCi0yMDExLTAxLTExIDEzOjQ3OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkgIGdvYmplY3QtaW50cm9zcGVjdGlvbjogbWFrZSBnLWlyLXNjYW5uZXIgdHJ5IGhhcmRlciB0byBmaW5kIHRoZSByaWdodCBsaWJnc3RyZWFtZXIKLQkgIEl0J3Mgbm90IHF1aXRlIGNsZWFyIHRvIG1lIHdoeSBnLWlyLXNjYW5uZXIgZG9lc24ndCBnZXQgdGhpcyBpbmZvIGZyb20KLQkgIHRoZSBwa2ctY29uZmlnIGZpbGUsIG5vciB3aHkgbGlidG9vbCBkb2Vzbid0IGdldCBpdCBmcm9tIHRoZSAubGEuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3NTQ5Ci0KLTIwMTEtMDEtMTEgMTM6MDU6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JICBwa2djb25maWc6IGFsc28gYWRkIGxpYmRpciB0byAtdW5pbnN0YWxsZWQgLnBjIGZpbGVzCi0JICBUaGlzIHdheSB3ZSBjYW4gZmluZCB0aGUgcGF0aHMgdG8gcGFzcyBlLmcuIGctaXItc2Nhbm5lciBmb3IKLQkgIHVuaW5zdGFsbGVkIHNldHVwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzkwMzkKLQotMjAxMS0wMS0xMSAxNTo0OToyMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZTU3MmM4NyB0byBmOTRkNzM5Ci0KLTIwMTEtMDEtMTEgMTU6MTA6MzIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgdmFsdmU6IGZpeGUgdGhlIHByb3BlcnR5IGxpbmsgYW5kIHRoZSBzaWNlIGRvY3MKLQotMjAxMS0wMS0xMSAxMjo0NjozMSArMDAwMCAgUmFpbW8gSsOkcnZpIDxyYWltby5qYXJ2aUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBnc3Rwb2xsOiBmaXggY29tcGlsZXIgd2FybmluZyB3aXRoIE1pbmdXCi0JICBnc3Rwb2xsLmM6IEluIGZ1bmN0aW9uICdnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkJzoKLQkgIGdzdHBvbGwuYzo2OTI6MTA6IHdhcm5pbmc6IGFzc2lnbm1lbnQgbWFrZXMgaW50ZWdlciBmcm9tIHBvaW50ZXIgd2l0aG91dCBhIGNhc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg5MDAKLQotMjAxMS0wMS0xMCAxNDozNzo0MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6Ci0JICB0ZXN0OiBvdXRwdXRzZWxlY3RvcjogQWRkIGFub3RoZXIgbmVnb3RpYXRpb24gdGVzdAotCSAgQWRkcyBhbiB1bml0IHRlc3QgdG8gY2hlY2sgdGhhdCB0aGUgb3V0cHV0LXNlbGVjdG9yIHdvcmtzCi0JICB3aGVuIG5lZ290aWF0aW5nIGJlZm9yZSBzcmNwYWRzIGFyZSByZXF1ZXN0ZWQKLQotMjAxMS0wMS0xMCAxNDoxOToxNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dHNlbGVjdG9yOiBJbXByb3ZlIGdldCBhbmQgc2V0IGNhcHMgZnVuY3Rpb25zCi0JICBJbXByb3ZlIHNpbmsgcGFkIGdldGNhcHMgYW5kIHNldGNhcHMgYnkgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUKLQkgIG5vIHNyYyBwYWRzIGV4aXN0IHlldAotCi0yMDExLTAxLTEwIDE2OjM1OjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGNjYmFhODUgdG8gZTU3MmM4NwotCi0yMDExLTAxLTEwIDE0OjUyOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDQ2NDQ1YWQgdG8gY2NiYWE4NQotCi0yMDExLTAxLTEwIDA5OjU5OjE5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2VsZWN0b3IuYzoKLQkgIHRlc3RzOiBzZWxlY3RvcjogdW5yZWYgcGVlciBwYWQKLQkgIERvIG5vdCBmb3JnZXQgdG8gdW5yZWYgcGVlcidzIHBhZCBvbiBvdXRwdXQtc2VsZWN0b3IgbmVnb3RpYXRpb24KLQkgIHRlc3RzCi0KLTIwMTEtMDEtMTAgMTM6MTg6MTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogbWFrZSBzdXJlIHdlIHdhaXQgYW5kIHJlbGVhc2UgdGhlIGxpdmUgbG9jawotCSAgTWFrZSBzdXJlIHdlIHJlbGVhc2UgdGhlIGxpdmUgbG9jayBhbmQgd2FpdCBpbiBhbGwgY2FzZXMgd2hlbiB3ZSBuZWVkIHRvIHdhaXQKLQkgIGZvciB0aGUgcGxheWluZyBvciBmbHVzaGluZyBzdGF0ZSBjaGFuZ2UuCi0JICBGaXhlcyAjNjM1Nzg1Ci0KLTIwMTEtMDEtMDggMTQ6NTI6MjcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IERvbid0IHJlcGxhY2UgdmFsaWQgZXhpc3RpbmcgcGx1Z2lucyBieSBibGFja2xpc3RlZCBvbmVzCi0JICBPbmx5IHJlcGxhY2UgZXhpc3RpbmcgcGx1Z2lucyBieSBibGFja2xpc3RlZCBvbmVzIGlmIHRoZXkgY29ycmVzcG9uZAotCSAgdG8gdGhlIGV4YWN0IHNhbWUgcGx1Z2luLiBJZiB0aGV5J3JlIG5vdCB0aGUgc2FtZSwga2VlcCB0aGUgZXhpc3RpbmcKLQkgIHZhbGlkIG9uZS4KLQkgIEZpeGVzICM2Mzg5NDEKLQotMjAxMS0wMS0wOCAwMjoxOTozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC1lbGVtZW50LWNoZWNrLm00LmluOgotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBjb25maWd1cmUsIGdzdC11bmluc3RhbGxlZDogcmVtb3ZlIGEgZmV3IGJhc2hpc20KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg5NjEKLQotMjAxMS0wMS0wNyAxMjoxMzozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICAwLjEwLjMxLjIgcHJlLXJlbGVhc2UKLQotMjAxMS0wMS0wNyAwMjoxODozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6Ci0JICBpbmRleGVyczogZml4IHR3byBzbWFsbCBsZWFrcwotCSAgZWxlbWVudCBmYWN0b3J5IHBsdWdpbl9uYW1lcyBhcmUgaW50ZXJuZWQgc3RyaW5ncyB0aGVzZSBkYXlzLgotCi0yMDExLTAxLTA3IDAwOjUzOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogbmV2ZXIgZGlzYWJsZSBnX2Fzc2VydCgpIGFuZCBjYXN0IGNoZWNrcyBmb3IgdGhlIHVuaXQgdGVzdHMKLQkgIFRoZSB1bml0IHRlc3RzIGFyZSByaWRkbGVkIHdpdGggZ19hc3NlcnQoKSBhbmQgZnJpZW5kcywgbWFrZSBzdXJlIHdlCi0JICBkb24ndCBkaXNhYmxlIGFzc2VydCBhbmQgY2FzdCBjaGVja3MgZm9yIHRoZSB1bml0IHRlc3RzIGV2ZW4gaWYKLQkgIHRoaXMgaGFzIGJlZW4gc3BlY2lmaWVkIGZvciB0aGUgcmVzdCBvZiB0aGUgY29kZSBiYXNlLCBlLmcuIHZpYQotCSAgLS1kaXNhYmxlLWdsaWItYXNzZXJ0cy4KLQotMjAxMS0wMS0wNiAxOTo0MDoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGlnbm9yZSBvbGQgbGliZ3N0dmFsdmUuc28gYW5kIGxpYmdzdHNlbGVjdG9yLnNvIHBsdWdpbnMgdG8gbWluaW1pemUgdXBncmFkZSBwYWluCi0JICBJZ25vcmUgcGx1Z2lucyB3aGljaCBoYXZlIGJlZW4gbW92ZWQgaW50byBjb3JlZWxlbWVudHMsIHNvIGl0J3MKLQkgIHN0aWxsIHBvc3NpYmxlIHRvIGp1c3QgdXBncmFkZSBHU3RyZWFtZXIgY29yZSB3aXRob3V0IGhhdmluZyB0bwotCSAgdXBncmFkZSB0aGUgd2hvbGUgc3RhY2suCi0KLTIwMTEtMDEtMDYgMTk6MjE6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIFJldmVydCAicGFkdGVtcGxhdGU6IGFsbG93IGRpc2FibGluYmcgdGhlIHRlbXBsYXRlIG5hbWUgY29uZm9ybWFuY2UgY2hlY2tzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBmOTAzOWMyMjA0MGUxYTM4YTM2OTFiYzRkMjk5YWY0MjdjOTYzMjU1LgotCSAgV2UgdXNlIC1ER19ESVNBQkxFX0FTU0VSVFMgZm9yIHJlbGVhc2VzIGFuZCBwcmUtcmVsZWFzZXMsIGJ1dAotCSAgZG9uJ3Qgd2FudCB0byBkaXNhYmxlIHBhZCBuYW1lIGNoZWNraW5nIGZvciByZWxlYXNlcyBpbiBnZW5lcmFsLAotCSAgSSB0aGluay4gTmVlZCBhIGJldHRlciBzb2x1dGlvbiBoZXJlLiBGaXhlcyBwYWQgdW5pdCB0ZXN0IGluCi0JICBwcmUtcmVsZWFzZS9yZWxlYXNlIG1vZGUuCi0KLTIwMTEtMDEtMDQgMTI6NDI6NTAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JICBvdXRwdXQtc2VsZWN0b3I6IEFkZCBwYWQtbmVnb3RpYXRpb24tbW9kZSBwcm9wZXJ0eQotCSAgQWRkcyBnZXRjYXBzL3NldGNhcHMgdG8gb3V0cHV0LXNlbGVjdG9yIGFuZCBhZGRzIGEgcHJvcGVydHkKLQkgIHRvIHNlbGVjdCB3aGljaCB0eXBlIG9mIG5lZ290aWF0aW9uIHNob3VsZCBiZSBkb25lLgotCSAgVGhlIGF2YWlsYWJsZSBtb2RlcyBhcmU6Ci0JICAqIG5vbmU6ICAgbm8gbmVnb3RpYXRpb24gKGN1cnJlbnQgYmVoYXZpb3IpLCBnZXRjYXBzIHJldHVybiBBTlkgYW5kCi0JICBzZXRjYXBzIGFyZW4ndCBzZXQgb24gYW55IG9mIHRoZSBwZWVycwotCSAgKiBhbGw6ICAgIHVzZSBhbGwgcGFkcyAoZGVmYXVsdCksIGdldGNhcHMgcmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIG9mCi0JICBwZWVyIHBhZHMgYW5kIHNldGNhcHMgaXMgc2V0IG9uIGFsbCBwZWVycwotCSAgKiBhY3RpdmU6IGdldGNhcHMgYW5kIHNldGNhcHMgYXJlIHByb3hpZWQgdG8gdGhlIGFjdGl2ZSBwYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzgzODEKLQotMjAxMS0wMS0wNiAxODoxODoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgZG9jczogbWVudGlvbiBleHRyYSBpbnB1dC1zZWxlY3RvciBwYWQgcHJvcGVydGllcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODM4MQotCi0yMDExLTAxLTA2IDE3OjQ3OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL2VsLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wOS0yMyAxMjo0OTo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiBhdm9pZCB1bm5lY2Vzc2FyeSBtYWxsb2MvZnJlZSBmb3IgZWFjaCBsb2cgZnVuY3Rpb24gY2FsbCBvbiBNU1ZDCi0JICBBdm9pZCB1bm5lY2Vzc2FyeSBtYWxsb2MvZnJlZSB0byBnZXQgdGhlIGZpbGUgYmFzZW5hbWUgb24gTVNWQyB0byBhdm9pZAotCSAgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgd2hlbiBkb2luZyBHU1RfREVCVUc9Zm9vOjUgb3Igc28gKHNpbmNlIGl0IHdvdWxkIGJlCi0JICBkb25lIGJlZm9yZSB0aGUgY2F0ZWdvcnkgbG9nIGxldmVsIGZpbHRlcmluZykuCi0KLTIwMTEtMDEtMDYgMTc6Mjk6NDYgKzAwMDAgIGNocmlzdGlhbiBzY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBVcGRhdGUgc3BlYyBmaWxlIHdpdGggbGF0ZXN0IGNoYW5nZXMgYW5kIGVuYWJsZSBHSVIKLQotMjAxMS0wMS0wNSAxMjo1OTo0OCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIG9iamVjdDogRml4IGNyZWF0aW9uIG9mIGRlZmF1bHQgbmFtZQotCSAgQ2hhbmdlIHRoZSBmaXhlZCBhbGxvY2F0aW9uICghKSB0byBnX3N0cmR1cF9wcmludGYoKS4KLQotMjAxMC0xMi0yMCAxMzozMDo0MyArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBHc3RFbGVtZW50OiBBZGQgYSBtb3JlIGZsZXhpYmxlIHdheSB0byBnZXQgcmVxdWVzdCBwYWRzLgotCSAgVGhlIG5ldyByZXF1ZXN0X25ld19wYWRfZnVsbCB2bWV0aG9kIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgY2FwcyBmaWVsZCwKLQkgIHdoaWNoIGFsbG93cyBlbGVtZW50cyB0byB0YWtlIGJldHRlciBkZWNpc2lvbiBwcm9jZXNzLgotCSAgQWxzbywgYWRkIGEgZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQoKSBmdW5jdGlvbiB0byBhbGxvdyBkZXZlbG9wZXJzIHRvIGJlCi0JICBhYmxlIHRvIHNwZWNpZnkgd2hpY2ggcGFkIHRlbXBsYXRlIHRoZXkgd2FudCBhIHBhZCBvZi4KLQkgIENvbnZlcnQgZ3N0dXRpbHMgdG8gdXNlIHRoYXQgbmV3IG1ldGhvZCBpbnN0ZWFkIG9mIHRoZSBvbGQgb25lIHdoZW4gbW9yZQotCSAgZWZmaWNpZW50LgotCSAgVGhpcyBpcyB1c2VmdWwgZm9yIGJlaW5nIGFibGUgdG8gcmVxdWVzdCBwYWRzIGluIGEgbW9yZSBmbGV4aWJsZSB3YXksCi0JICBlc3BlY2lhbGx5IHdoZW4gdGhlIGVsZW1lbnQgY2FuIHByb3ZpZGUgcGFkcyB3aG9zZSBjYXBzIGRlcGVuZCBvbgotCSAgcnVudGltZSBjb25maWd1cmF0aW9uIGFuZCB0aGVyZWZvcmUgY2FuJ3QgcHJvdmlkZSBwcmUtcmVnaXN0ZXJlZAotCSAgcGFkIHRlbXBsYXRlcy4KLQkgIEFQSTogR3N0RWxlbWVudDo6cmVxdWVzdF9uZXdfcGFkX2Z1bGwKLQkgIEFQSTogZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzczMDAKLQotMjAxMS0wMS0wNSAxNTo1MzoyOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmg6Ci0JICBpbnB1dHNlbGVjdG9yOiByZW1vdmUgInNlbGVjdC1hbGwiIHByb3BlcnR5Ci0JICBzZWxlY3QtYWxsIG1vZGUgaXMgYSBiaXQgYnJva2VuIChlLmcuIG5ld3NlZ21lbnQgZXZlbnQKLQkgIGhhbmRsaW5nKSwgc28gcmVtb3ZlIHRoYXQgZm9yIG5vdy4gVGhlIGZ1bm5lbCBlbGVtZW50Ci0JICBpbiBmYXJzaWdodCBwcm92aWRlcyBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM5MDQyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4MzgxCi0KLTIwMTEtMDEtMDUgMTU6MzY6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IHJlbW92ZSBzYWZldHkgY2hlY2sgZm9yIEdMaWIgPCAyLjgKLQkgIERvbid0IHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseSB1c2luZyBHTGliIDwgMi44IGF0IHJ1bnRpbWUgYW55bW9yZS4KLQotMjAxMS0wMS0wNSAxMToyNjoxMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSAgZ3N0ZGF0ZXRpbWU6IERpc2FibGUgdXNhZ2Ugb2YgR0RhdGVUaW1lIG9uIE1hY09TWAotCSAgR0xpYidzIEdEYXRlVGltZSBkb2Vzbid0IGhhbmRsZSBwcm9wZXJseSB0aGUgZ210IG9mZnNldC4gVGhlcmVmb3JlCi0JICB1c2Ugb3VyIG93biBpbnRlcm5hbCB2ZXJzaW9uIGluc3RlYWQgb24gTWFjT1NYLgotCSAgU2VlIGJ1ZyAjNjM4NjY2Ci0KLTIwMTEtMDEtMDUgMTA6NTY6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXByb2dyZXNzLnR4dDoKLQkgIGRlc2lnbjogbW9yZSB1cGRhdGVzIGZvciB0aGUgcHJvZ3Jlc3MgbWVzc2FnZXMKLQotMjAxMS0wMS0wNCAxODozNjo0MSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLXNpZ25hbHMueG1sOgotCSAgcHdnOiBGaXggbGluayB0byBHT2JqZWN0IGRvY3VtZW50YXRpb24KLQkgIEJldHRlciBoYXZlIGdub21lLm9yZyB0aGFuIHZpYWdyYSA6KQotCi0yMDExLTAxLTAzIDIwOjMyOjIzICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSAgcGx1Z2lubG9hZGVyOiBBbHdheXMgbWFyayByZWNlcHRpb24gYXMgY29tcGxldGUgYWZ0ZXIgRVhJVAotCSAgQXZvaWRzIHdhaXRpbmcgZm9yZXZlciBvbiBnc3RfcG9sbF93YWl0IHdoZW4gdXNpbmcgdGhlIHNlbGVjdAotCSAgYmFja2VuZC4KLQkgIEZpeGVzICM2MzcwNTcKLQotMjAxMS0wMS0wNCAwMDo0ODoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIGdzdGluZm86IGRvbid0IHVzZSBwcmludGYgZXh0ZW5zaW9ucyBpZiBHTGliIGlzbid0IHVzaW5nIHRoZSBzeXN0ZW0gcHJpbnRmCi0JICBNaWdodCBoZWxwIHdpdGggaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODU5OQotCi0yMDExLTAxLTAzIDIwOjE5OjA1ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIGdzdHBvbGw6IEZpeCBmb3IgKHApc2VsZWN0IGJhY2tlbmQKLQkgIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHJldmVudHMgZmllbGQgb2YgZWFjaCBwb2xsZmQgd2hlbiByZWFkaW5nIHRoZSByZXN1bHRzCi0JICBmcm9tIHNlbGVjdCBlbHNlIHdlJ2xsIGVuZCB1cCB3aXRoIHN0cmF5IGluZm8gZnJvbSBwcmV2aW91cyBjYWxscyB0bwotCSAgc2VsZWN0LgotCi0yMDExLTAxLTAzIDAxOjA2OjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogbWFrZSBuZXcgZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UoKSB3b3JrIHByb3Blcmx5Ci0JICBGaXggZnJlZWluZyBvZiBwYXJ0aWFsbHktaW5pdGVkIGxpc3QgdmFsdWUgd2hlbiBib3RoIHZhbHVlcwotCSAgcGFzc2VkIGFyZSBlcXVhbCBhbmQgd2Ugd2FudCB0byByZXR1cm4gYSBzaW5nbGUgbm9uLWxpc3QKLQkgIHZhbHVlIGFzIHJlc3VsdC4gRml4ZXMgdW5pdCB0ZXN0LiBBbHNvIGZpeCB1cCBkb2NzIGEgYml0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNzc3NgotCi0yMDEwLTEyLTIxIDIzOjAzOjEyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdGFnczogZG9uJ3QgcHJvZHVjZSBkdXBsaWNhdGVkIGVudHJpZXMgd2hlbiBtZXJnaW5nIHNhbWUgdmFsdWUgdHdpY2UKLQkgIEFkZCBhIHZhcmlhbnQgb2YgZ3N0X3ZhbHVlX2xpc3RfY29uY2F0KCkgdGhhdCBza2lwcyBkdXBsaWNhdGVzIGFuZCB1c2UgdGhhdCB3aGVuCi0JICBtZXJnaW5nIHRhZ2xpc3RzLgotCSAgQVBJOiBnc3RfdmFsdWVfbGlzdF9tZXJnZSgpCi0KLTIwMTEtMDEtMDIgMTY6NTg6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmMsIGJhc2VzaW5rOiBhZGQgc29tZSBGSVhNRXMgZm9yIHRoZSB0eXBlIG9mIHRoZSBibG9ja3NpemUgcHJvcGVydHkKLQotMjAxMC0xMi0zMSAxMjowODoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogbWFrZSBwYWQncyBnZXRfdHlwZSBmdW5jdGlvbiB0aHJlYWQtc2FmZQotCi0yMDEwLTEyLTMxIDExOjM3OjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RzZWxlY3Rvci1tYXJzaGFsLmxpc3Q6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHNlbGVjdG9yLmM6Ci0JICBjb3JlZWxlbWVudHM6IHJlbW92ZSB1bnVzZWQgZmlsZXMKLQotMjAxMC0xMi0zMSAxMjoyNzo0NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogUHJvdGVjdGVkIGdfb2JqZWN0X25vdGlmeSgpIGNhbGxzIGZvciB0aGUgYWN0aXZlLXBhZCB3aXRoIGEgcmVjdXJzaXZlIG11dGV4Ci0JICBUaGlzIHdvcmtzIGFyb3VuZCBhIHRocmVhZCBzYWZldHkgcHJvYmxlbSBpbiBHTGliIDwgMi4yNi4wIGFuZCBzaG91bGQKLQkgIGJlIHJlbW92ZWQgd2hlbiB3ZSBkZXBlbmQgb24gMi4yNi4wLgotCSAgRml4ZXMgYnVnICM2MDc1MTMuCi0KLTIwMTAtMTItMzEgMTY6NTI6NTQgKzA4MDAgIFpoYW5nIFdhbm1pbmcgPFdhbm1pbmcuWmhhbmdAdGlldG8uY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHRlc3RzOiBmaXggdHlwbwotCSAgU2lnbmVkLW9mZi1ieTogWmhhbmcgV2FubWluZyA8V2FubWluZy5aaGFuZ0B0aWV0by5jb20+Ci0KLTIwMTAtMTItMzEgMTY6NTA6NTcgKzA4MDAgIFpoYW5nIFdhbm1pbmcgPFdhbm1pbmcuWmhhbmdAdGlldG8uY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSAgZ3N0ZmRzaW5rOiBmaXggdHlwbwotCSAgU2lnbmVkLW9mZi1ieTogWmhhbmcgV2FubWluZyA8V2FubWluZy5aaGFuZ0B0aWV0by5jb20+Ci0KLTIwMTAtMTItMzEgMTY6NTA6MTcgKzA4MDAgIFpoYW5nIFdhbm1pbmcgPFdhbm1pbmcuWmhhbmdAdGlldG8uY29tPgotCi0JKiBkb2NzL3JhbmRvbS9lbnNvbmljL2RyYWZ0LWJ1ZmZlcnBvb2xzLnR4dDoKLQkgIGRvY3M6IGZpeCB0eXBvCi0JICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXYW5taW5nIDxXYW5taW5nLlpoYW5nQHRpZXRvLmNvbT4KLQotMjAxMC0xMi0zMSAwMTowOTo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2ljbGVzL291dHB1dC1zZWxlY3Rvci10ZXN0LmM6Ci0JICB0ZXN0czogcmVtb3ZlIG91dHB1dC1zZWxlY3RvciB0ZXN0IHdoaWNoIG5lZWRzIGVsZW1lbnRzIGZyb20gLWJhc2UKLQkgIE1vdmUgaXQgdG8gLWJhc2UgaW5zdGVhZC4KLQotMjAxMC0xMi0zMSAwMDo1OTo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkgIGNoZWNrczogZW5hYmxlIGlucHV0LXNlbGVjdG9yIGFuZCBvdXRwdXQtc2VsZWN0b3IgdW5pdCB0ZXN0cyBhZnRlciBtb3ZlCi0KLTIwMTAtMTItMzEgMDA6NDg6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JICBkb2NzOiBhZGQgaW5wdXQtc2VsZWN0b3IgYW5kIG91dHB1dC1zZWxlY3RvciB0byBkb2NzCi0KLTIwMTAtMTItMzEgMDA6NDU6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBjb3JlZWxlbWVudHM6IEdTVF9CT0lMRVJQTEFURSBhbHJlYWR5IHNldHMgcGFyZW50X2NsYXNzCi0KLTIwMTAtMTItMzEgMDA6NDM6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0LXNlbGVjdG9yLCBvdXRwdXQtc2VsZWN0b3I6IG1pbm9yIGNsZWFuLXVwcwotCi0yMDEwLTEyLTMwIDE4OjU3OjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgY29yZWVsZW1lbnRzOiBtb3ZlIGlucHV0LXNlbGVjdG9yIGFuZCBvdXRwdXQtc2VsZWN0b3IgdG8gY29yZQotCSAgTW92ZWQgdG8gY29yZSBmcm9tIGdzdC1wbHVnaW5zLWJhZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQzMDYKLQotMjAxMC0xMS0yNCAxMjoyMjowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9pY2xlcy9vdXRwdXQtc2VsZWN0b3ItdGVzdC5jOgotCSAgb3V0cHV0LXNlbGVjdG9yLXRlc3Q6IGRvbid0IGhhcmRjb2RlIHZpZGVvc2lua3MgYW5kIHVzZSBtb3JlIGNvbG9yc3BhY2UgY29udi4KLQkgIFVzZSBhdXRvdmlkZW9zaW5rIGluc3RlYWQgb2YgaGFyZGNvZGVkIHNpbmtzLiBVc2UgYW4gYWRkaXRpb25hbCBjb2xvcnNwYWNlCi0JICBjb252ZXJ0ZXIgYmV0d2VlbiB2aWRlb3Rlc3RzcmMgYW5kIHRpbWVvdmVybGF5LgotCi0yMDEwLTA5LTE3IDA5OjUyOjEyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0c2VsZWN0b3I6IEF2b2lkIGxvc2luZyB0aGUgbGFzdF9idWZmZXIgd2hlbiBzd2l0Y2hpbmcKLQkgIFRoaXMgcGF0Y2ggbWFrZXMgb3V0cHV0c2VsZWN0b3IgdGFrZSBhbiBleHRyYSByZWYgd2hlbiBwdXNoaW5nCi0JICB0aGUgbGFzdF9idWZmZXIgdG8gYXZvaWQgaXQgbG9zaW5nIGl0IGR1cmluZyB0aGUgc3dpdGNoIGZ1bmN0aW9uLgotCSAgVGhpcyBtYWtlcyByZXNlbmQtbGF0ZXN0IHByb3Blcmx5IHdvcmsgaWYgdGhlIGFjdGl2ZS1wYWQgaXMgY2hhbmdlZAotCSAgZHVyaW5nIHRoZSBzd2l0Y2ggZnVuY3Rpb24gYnVmZmVyIHB1c2hpbmcgKG9uIGEgcGFkIHByb2JlLCBmb3IgZXhhbXBsZSkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5OTE3Ci0KLTIwMTAtMDktMTcgMDk6NDQ6MDIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBvdXRwdXRzZWxlY3RvcjogUmVjaGVjayBwZW5kaW5nIHN3aXRjaCBhZnRlciBwdXNoaW5nIGJ1ZmZlcgotCSAgVGhpcyBwYXRjaCBtYWtlcyBvdXRwdXQtc2VsZWN0b3IgYWx3YXlzIHJlY2hlY2sgaWYgdGhlcmUncyBhCi0JICBwZW5kaW5nIHBhZCBzd2l0Y2ggYWZ0ZXIgcHVzaGluZyBhIGJ1ZmZlciwgcHJldmVudGluZyB0aGF0Ci0JICBpdCBwdXNoZXMgYSBidWZmZXIgb24gdGhlICd3cm9uZycgcGFkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTkxNwotCi0yMDEwLTExLTAxIDIzOjA0OjQ0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogbG9nIHRpbWVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm0KLQotMjAxMC0xMS0wMSAyMjo0MDozNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IG1vdmUgcmVvY2N1cmluZyBsb2dzIHRvIExPRyBhbmQgcmVtb3ZlIGEgZG91YmxlIGluZm8KLQkgIExlc3MgZGVidWcgc3BldyBpbiBERUJVRyBjYXRlZ29yeS4gTm8gbmVlZCB0byBsb2cgcGFkIGFnYWluIGlmIHdlIHVzZQotCSAgR1NUX0xPR19PQkpFQ1QocGFkLC4uLikuCi0KLTIwMTAtMTAtMTkgMTM6NDM6MTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICB2YXJpb3VzIChnc3QpOiBhZGQgbWlzc2luZyBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIGZsYWdzCi0JICBDYW5vbmljYWxpemUgcHJvcGVydHkgbmFtZXMgYXMgbmVlZGVkLgotCi0yMDEwLTA5LTA2IDExOjAzOjA3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3Rvcjogc3luYyB3aXRoIGNvcHkgaW4gLWJhc2UKLQkgIFVzZSBfZ2V0X2NhcHNfcmVmZmVkIHRvIGF2b2lkIGNvcGllcy4KLQotMjAxMC0wOC0yNCAxMTo1MDo0NyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBvdXRwdXRzZWxlY3RvcjogbW92ZSB0aGUgZGVidWcgaW5pdCB0byB0aGUgYm9pbGVycGxhdGUgbWFjcm8KLQotMjAxMC0wOC0yNCAxMTo1MDowOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IHVzZSBHU1RfQk9JTEVSUExBVEUgbWFjcm8KLQotMjAxMC0wMy0yMiAxMzoxNjozMyArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSAgQWRkIC1Xd3JpdGUtc3RyaW5ncwotCSAgYW5kIGZpeCBpdHMgd2FybmluZ3MKLQotMjAxMC0wMy0yMSAyMTozOToxOCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSAgQWRkIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgdG8gY29uZmlndXJlIGZsYWdzCi0JICBBbmQgZml4IGFsbCB3YXJuaW5ncwotCi0yMDEwLTAzLTE4IDE3OjMwOjI2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHMgPT4gZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlCi0KLTIwMTAtMDEtMjUgMTI6MjE6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIFJldmVydCAiaW5wdXRzZWxlY3RvcjogUHJvdGVjdCBnX29iamVjdF9ub3RpZnkoKSB3aXRoIHRoZSBvYmplY3QncyBtdXRleCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgN2UwNjc2MTVmZmI1NjE0ZjA2OGY3NzUzYzEwZGRlOTlhZmU0OWMzYywgaXQncyBjYXVzaW5nCi0JICBkZWFkbG9ja3Mgd2l0aCBwbGF5YmluMi4KLQotMjAxMC0wMS0yNCAyMDo1MzowMCArMDEwMCAgS2lwcCBDYW5ub24gPGtjYW5ub25AbGlnby5jYWx0ZWNoLmVkdT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBQcm90ZWN0IGdfb2JqZWN0X25vdGlmeSgpIHdpdGggdGhlIG9iamVjdCdzIG11dGV4Ci0JICBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgdGhyZWFkIHVuc2FmZXR5IG9mIGdfb2JqZWN0X25vdGlmeSgpCi0JICBGaXhlcyBidWcgIzYwNzUxMy4KLQotMjAwOS0xMS0wOSAxMTo0OToxNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogUmVtb3ZlIHVzZWxlc3MgdmFyaWFibGVzIGFuZCBmaXggYSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmdzCi0JICBNZXJnZWQgZnJvbSBnc3QtcGx1Z2lucy1iYXNlLCBkZmQ1MWFhODJhOWUxYzk5MjQzNzUxODM3OTZlYWI3MGU1NzRhMjMxLgotCi0yMDA5LTExLTA5IDExOjQ4OjM5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBNYWtlIHN1cmUgdGhhdCBydW5uaW5nX3RpbWUtPnRpbWVzdGFtcCBjYWxjdWxhdGlvbiBuZXZlciBiZWNvbWVzIG5lZ2F0aXZlCi0JICBNZXJnZWQgZnJvbSBnc3QtcGx1Z2lucy1iYXNlLCBmMzY1Mzg1NDU4NTg2NGEwOWQzNWUwMzc4NTM0MDczMzJlYTY5MDFmLgotCi0yMDA5LTExLTA5IDExOjQ4OjAwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBVc2UgdGhlIHN0YXJ0IHRpbWUgKGkuZS4gdGltZXN0YW1wKSBhcyB0aGUgbGFzdCBzdG9wCi0JICBVc2luZyB0aGUgZW5kIHRpbWUgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byByZXBsYWNlIGJ1ZmZlcnMsIHdoaWNoIGlzCi0JICBhIGJpZyBwcm9ibGVtIGZvciBzdWJ0aXRsZXMgdGhhdCBjb3VsZCBoYXZlIHZlcnkgbG9uZyBkdXJhdGlvbnMuCi0JICBNZXJnZWQgZnJvbSBnc3QtcGx1Z2lucy1iYXNlLCAyNzAzNGJlNDYxMTIzMWNjNTVmYTNkM2UyNTNiYWE0MGM2YmZmNDFkLgotCi0yMDA5LTExLTA5IDExOjQ3OjE1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBJbXByb3ZlIGRlYnVnZ2luZwotCSAgTWVyZ2VkIGZyb20gZ3N0LXBsdWdpbnMtYmFzZS4KLQotMjAwOS0xMS0wNSAxMzo1Mzo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBSZXZlcnQgImlucHV0c2VsZWN0b3I6IHVzZSBnZXRfY2Fwc19yZWZmZWQoKSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNDllYzRmNzk2YTBlM2Y4OGE4NTE3MDg3ODJjODUzYmFmNGIwNTcyNC4KLQkgIFdlIGNhbid0IHVzZSB0aGlzIG5ldyBmdW5jdGlvbiB5ZXQuCi0KLTIwMDktMTEtMDUgMTM6Mjk6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogdXNlIGdldF9jYXBzX3JlZmZlZCgpCi0KLTIwMDktMTEtMDQgMDA6MjE6MTkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBhbHNvIGFkZCBpbmxpbmUgdG8gdGhlIHByb3RvIHRvIGZpeCB0aGUgYnVpbGQKLQotMjAwOS0xMS0wMyAxODoxNDoxMiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBnc3Q6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzIGFuZCByZXN1bHRpbmcgdW51c2VkIHZhcmlhYmxlcwotCSAgTWVyZ2VkIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSwgOGNkMWI1MjA5YjY4OTQ0ZTFiZTU2Y2E4YmI2OWU0NmQ0YWJiN2EzNC4KLQotMjAwOS0xMS0wMyAxODoxMjoyMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogVXNlIHRoZSBzYW1lIGl0ZXJhdGUgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb24gYXMgaW4gZ3N0LXBsdWdpbnMtYmFzZQotCi0yMDA5LTExLTAzIDE4OjExOjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dC1zZWxlY3RvcjogUmVtb3ZlIEdTVF9ERUJVR19GVU5DUFRSIHdoZXJlIHRoZXkncmUgcG9pbnRsZXNzCi0JICBUaGVyZSdzIG5vdCBtdWNoIHBvaW50IGluIHVzaW5nIEdTVF9ERUJVR19GVU5DUFRSIHdpdGggR09iamVjdAotCSAgdmlydHVhbCBmdW5jdGlvbnMgc3VjaCBhcyBnZXRfcHJvcGVydHksIHNldF9wcm9wZXJ5LCBmaW5hbGl6ZSBhbmQKLQkgIGRpc3Bvc2UsIHNpbmNlIHRoZXknbGwgbmV2ZXIgYmUgdXNlZCBieSBhbnlvbmUgYW55d2F5LiBTYXZlcyBhCi0JICBmZXcgYnl0ZXMgYW5kIHBvc3NpYmx5IGEgc2l4dGVlbnRoIG9mIGEgcG9sYXIgYmVhci4KLQkgIE1lcmdlZCBmcm9tIGdzdC1wbHVnaW5zLWJhc2UsIDZmNGMxYWM1ODM0MWVlMTg5MjI1ZDMxM2RkZmU5YWUyNGE2NWM4OGMuCi0KLTIwMDktMTEtMDMgMTg6MDk6NTUgKzAxMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0LXNlbGVjdG9yOiBSZW1vdmUgUm9uYWxkIEJ1bHRqZSBmcm9tIEF1dGhvcnMgZmllbGQKLQkgIFJlcGxhY2VkIHdpdGggIkdTdHJlYW1lciBtYWludGFpbmVycwotCSAgPGdzdHJlYW1lci1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+IiBvciBqdXN0IHJlbW92ZWQsCi0JICBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBvdGhlciBhdXRob3JzLgotCSAgTWVyZ2VkIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSwgMGU5YmM1MTI1YWNhNTQ2ZDc3M2VkMTAwMmRmNTczZGQ4ZTJkYzEzNi4KLQotMjAwOS0xMS0wMyAxODowODowNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBzZXQgb3V0cHV0IGNhcHMgYmVmb3JlIHB1c2hpbmcKLQkgIFNldCB0aGUgb3V0cHV0IGNhcHMgb24gdGhlIHNyY3BhZCBiZWZvcmUgcHVzaGluZyB0aGUgYnVmZmVyIGJlY2F1c2UgZWxzZSBjb3JlCi0JICB3aWxsIGRvIGEgcmF0aGVyIGV4cGVuc2l2ZSBjaGVjayB0byBzZWUgaWYgd2UgY2FuIGFjdHVhbGx5IGFjY2VwdCB0aG9zZSBjYXBzIG9uCi0JICB0aGUgc3JjcGFkLgotCSAgTWVyZ2VkIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSwgYmRmYjRiNDZkNzQ2ZWYyOThmY2Y0NDI2MDg3OWMzNDJhZjRjYWZhMy4KLQotMjAwOS0xMS0wMyAxODowNjoxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBpbnN0YWxsIGFuIGFjY2VwdGNhcHMgZnVuY3Rpb24KLQkgIEluc3RhbGwgYSBjdXN0b20gYWNjZXB0Y2FwcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IGV4cGVuc2l2ZQotCSAgY2hlY2suIFdlIGFjY2VwdCB3aGF0ZXZlciBkb3duc3RyZWFtIGFjY2VwdHMgc28gd2UgcGFzcyBhbG9uZyB0aGUgYWNjZXB0Y2FwcwotCSAgY2FsbCB0byB0aGUgZG93bnN0cmVhbSBwZWVyLgotCSAgTWVyZ2VkIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSwgNWI3MmYyYWRmOTk2NzM5MDM2ZThkOWI1ZjkxMDA1NDU1ZDFmZmFjZS4KLQotMjAwOS0xMC0yNyAxMTo1MTowNSAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIHRlc3RzL2ljbGVzL291dHB1dC1zZWxlY3Rvci10ZXN0LmM6Ci0JICBSZW1vdmUgZXhlY3V0YWJsZSBiaXRzIGZyb20gbm9uLWV4ZWN1dGFibGUgZmlsZXMuCi0KLTIwMDktMDktMjUgMTE6MDc6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IFVzZSBuZXcgc2luZ2xlIGl0ZXJhdG9yIGZvciB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkcwotCSAgVGhpcyBmaXhlcyBhIGRlYWRsb2NrIGFuZCByZW1vdmVzIHNvbWUgdXNlbGVzcyBjb2RlLgotCi0yMDA5LTA4LTMxIDE5OjMxOjU3ICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dHNlbGVjdG9yOiBtYWtlIEdTVF9GT1JNQVRfVElNRSB0aGUgZGVmYXVsdCBzZWdtZW50IGZvcm1hdAotCi0yMDA5LTA4LTE5IDE3OjA1OjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBpbnB1dHNlbGVjdG9yOiBVc2UgaXRlcmF0ZSBpbnRlcm5hbCBsaW5rcyBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgZ2V0IGludGVybmFsIGxpbmtzCi0KLTIwMDktMDctMzEgMTE6Mjc6MDMgKzAzMDAgIFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taS4xLm15b2hhbmVuQG5va2lhLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0c2VsZWN0b3I6IGNoZWNrIGZvciBwZW5kaW5nIHNyY3BhZCBpbiBfZ2V0X3Byb3BlcnR5KCkKLQkgIElmIHRoZXJlIGlzIGEgcGVuZGluZyBzcmNwYWQsIHJldHVybiBpdCBpbnN0ZWFkIG9mIGFjdGl2ZSBzcmNwYWQKLQkgIGluIGdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5KCkgZnVuY3Rpb24uCi0KLTIwMDktMDYtMTIgMTA6MTQ6MjcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0c2VsZWN0b3I6IGRvIHRoZSBwYWRfYWxsb2MgZm9yIHRoZSBwYWQgdGhhdCBpcyBwZW5kaW5nIGFuZCBoYXZlIGEgZmFsbGJhY2sKLQkgIFdlIHNob3VsZCBkbyB0aGUgcGFkX2FsbG9jIGZvciB0aGUgcGVuZGluZyBwYWQgaWYgYW55LCBhcyB3ZSB3aWxsIHN3aXRjaCB0byB0aGF0Ci0JICBwYWQgb24gbmV4dCBfY2hhaW4oKSBjYWxsLiBBbHNvIGRvIGEgZmFsbGJhY2sgYWxsb2MsIGlmIHRoZXJlIGlzIG5vIG91dHB1dCB5ZXQgdG8KLQkgIG5vdCBmYWlsIHN0YXRlIHRyYW5zaXRpb25zIGluIGR5bmFtaWMgcGlwZWxpbmVzLgotCi0yMDA5LTA2LTAxIDE2OjMxOjQyICswMzAwICBMYXNzZSBMYXVra2FuZW4gPGV4dC1sYXNzZS4yLmxhdWtrYW5lbkBub2tpYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dC1zZWxlY3Rvcjogc2VyaWFsaXplIHNldHRpbmcgYW5kIGFjdHVhbCBjaGFuZ2luZyBvZiBuZXcgYWN0aXZlIHBhZAotCi0yMDA5LTA1LTA0IDEyOjI5OjU0ICswMzAwICBMYXNzZSBMYXVra2FuZW4gPGV4dC1sYXNzZS4yLmxhdWtrYW5lbkBub2tpYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIG91dHB1dC1zZWxlY3RvcjogdW5yZWYgbGF0ZXN0IGJ1ZmZlciBhbHNvIHdoZW4gcmVzZW5kaW5nIGhhcyBiZWVuIGRpc2FibGVkCi0KLTIwMDktMDQtMTYgMTc6MzI6MDMgKzAzMDAgIExhc3NlIExhdWtrYW5lbiA8ZXh0LWxhc3NlLjIubGF1a2thbmVuQG5va2lhLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgb3V0cHV0LXNlbGVjdG9yOiBrZWVwIHJlZiB0byBidWZmZXIgZm9yIHJlc2VuZGluZyBvbmx5IGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkCi0KLTIwMDktMDYtMDQgMTk6MDg6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogZG9uJ3QgbGVhayBwYWRzIGluIGl0ZXJhdG9yCi0KLTIwMDktMDYtMDQgMDg6NTY6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0c2VsZWN0b3I6IE5vdGlmeSB3aGVuIHRoZSB0YWdzIHByb3BlcnR5IG9mIHRoZSBzZWxlY3RvciBzaW5rcGFkcyBjaGFuZ2VzCi0JICBGaXJzdCBwYXJ0IG9mIGJ1ZyAjNTg0Njg2LgotCi0yMDA5LTA1LTI4IDEwOjM4OjUwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaDoKLQkgIHNlbGVjdG9yOiByZW1vdmUgbm90IG5lZWRlZCBpbnN0YW5jZSB2YXIgKHByZXZpb3VzIGNvbW1pdCkuCi0KLTIwMDktMDUtMjggMTA6MTI6NTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5oOgotCSAgb3V0cHV0c2VsZWN0b3I6IGltcGxlbWVudCBwYWRfYWxsb2Mgb24gYWN0aXZlIHBhZC4KLQotMjAwOS0wNC0yMyAxMTowNDo0NiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIGlucHV0LXNlbGVjdG9yOiBGb3J3YXJkIHNlZ21lbnQgZXZlbnRzIGZvciB0aGUgYWN0aXZlIHBhZCBpbW1lZGlhdGVseS4KLQkgIFdoZW4gYSBzZWdtZW50IGV2ZW50IGlzIHJlY2VpdmVkIG9uIHRoZSBhY3RpdmUgcGFkLCBmb3J3YXJkIGl0IGRvd25zdHJlYW0KLQkgIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGVmZXJyaW5nIGl0IHVudGlsIHRoZSBuZXh0IGRhdGEgYnVmZmVyIGFycml2ZXMuIFRoaXMKLQkgIGZpeGVzIHByb2JsZW1zIHdpdGggc2VnbWVudCB1cGRhdGVzIG5ldmVyIGJlaW5nIHNlbnQgZG93bnN0cmVhbSwgbGlrZSB0aG9zZQotCSAgbmVlZGVkIGZvciBzcGFyc2Ugc3RyZWFtcywgb3IgZm9yIGNsb3NpbmcgcHJldmlvdXNseSBvcGVuZWQgc2VnbWVudHMuCi0JICBUaGlzIGZpeGVzIHBsYXliYWNrIG9mIERWRCBtZW51cyB3aXRoIGEgc3RpbGwgdmlkZW8gZnJhbWUgYW5kIGFuIGF1ZGlvIHRyYWNrLAotCSAgZm9yIGV4YW1wbGUuCi0JICBGaXhlczogIzU3Nzg0MwotCi0yMDA5LTAzLTI3IDExOjIwOjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBvdXRwdXRzZWxlY3RvcjogcmVzZXQgc3RhdGUgd2hlbiBnb2luZyB0byBSRUFEWQotCSAgUmVzZXQgdGhlIGxhc3QtYnVmZmVyLCB0aGUgcGVuZGluZyBwYWQgYW5kIHRoZSBzZWdtZW50IHdoZW4gZ29pbmcgdG8gdGhlIFJFQURZCi0JICBzdGF0ZS4KLQkgIEZpeGVzICM1NzY3MTIuCi0KLTIwMDktMDMtMjQgMTU6MjM6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgc2VsZWN0b3I6IG1lcmdlIHRoZSB0YWdzCi0JICBNZXJnZSB0aGUgdGFncyByZWNlaXZlZCBvbiB0aGUgaW5wdXQtc2VsZWN0b3Igc2lua3BhZHMgaW5zdGVhZCBvZiBvbmx5IGtlZXBpbmcKLQkgIHRoZSBsYXN0IG9uZSB3ZSBzYXcuCi0KLTIwMDktMDItMjUgMTE6NDU6MDUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBkb2NzOiB2YXJpb3VzIGRvYyBmaXhlcwotCSAgTm8gc2hvcnQtZGVzYyBhcyB3ZSBoYXZlIHRoZW0gaW4gdGhlIGVsZW1lbnQgZGV0YWlscy4KLQkgIEFsc28ga2VlcCB0aGluZ3MgKE1ha2VmaWxlLmFtIGFuZCBzZWN0aW9ucy50eHQpIHNvcnRlZC4KLQkgIFJld29yZCBhbWJpZ291cyByZXR1cm5zLiBObyB0ZXh0IGFmdGVyIHNpbmNlIHBsZWFzZS4KLQotMjAwOS0wMi0xMSAxNzoyMToyMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXRzZWxlY3RvcjogRml4IGNvbXBpbGF0aW9uLCBhY3RpdmF0ZV9zaW5rcGFkKCkgaGFzIG5vIG5vdGlmeSBwYXJhbWV0ZXIKLQotMjAwOS0wMi0xMCAxNjoyMjo1NCAtMDgwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgaW5wdXQtc2VsZWN0b3I6IEFjdGl2YXRlIGFuZCBub3RpZnkgcGFkIGJlZm9yZSBwcm9jZXNzaW5nIGV2ZW50cy4KLQkgIEV2ZW50cyBzaG91bGQgdHJpZ2dlciBwYWQgc2VsZWN0aW9uIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbgotCSAgZXhwbGljaXRseSBzZWxlY3RlZCBwYWQsIHNvIHRoYXQgZXZlbnRzIHByaW9yIHRvIGZpcnN0IGJ1ZmZlciBkb24ndCBnZXQKLQkgIGxvc3QuCi0KLTIwMDktMDEtMzAgMTg6Mjc6MDMgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgIFVucmVmIGV2ZW50IGlmIHdlIGRvbid0IGZvcndhcmQgaXQsIHVucmVmIHBhZHMgd2hlbiBkb25lIHdpdGggdGhlbS4KLQotMjAwOC0xMi0wNCAxNzo1MTozNyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogRW5zdXJlIHdlIGVtaXQgbm90aWZ5OjphY3RpdmUtcGFkIHdoZW4gYXV0by1zZWxlY3RpbmcgYSBwYWQgZHVlIHRvIGl0IGhhdmluZyBhY3Rpdml0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICBFbnN1cmUgd2UgZW1pdCBub3RpZnk6OmFjdGl2ZS1wYWQgd2hlbiBhdXRvLXNlbGVjdGluZyBhIHBhZAotCSAgZHVlIHRvIGl0IGhhdmluZyBhY3Rpdml0eSBhbmQgdXMgbm90IGhhdmluZyBhbiBleGlzdGluZyBhY3RpdmUKLQkgIHBhZC4gRml4ZXMgIzU2MzE0NwotCi0yMDA4LTEwLTE1IDE3OjQ1OjM3ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogR3JhY2VmdWxseSBoYW5kbGUgdGhlIGNhc2VzIHdoZW4gd2UgZG9udCcgaGF2ZSBvdGhlcnBhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogKGdzdF9pbnB1dF9zZWxlY3Rvcl9ldmVudCksCi0JICAoZ3N0X2lucHV0X3NlbGVjdG9yX3F1ZXJ5KToKLQkgIEdyYWNlZnVsbHkgaGFuZGxlIHRoZSBjYXNlcyB3aGVuIHdlIGRvbnQnIGhhdmUgb3RoZXJwYWQuCi0JICBGaXhlcyAjNTU2NDMwCi0KLTIwMDgtMTAtMDcgMTM6MTQ6NDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOiBDaG9vc2UgcmlnaHQgcGFkIGZvciBzZW5kaW5nIGV2ZW50cy4gRml4ZXMgIzU1NTI0NAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIENob29zZSByaWdodCBwYWQgZm9yIHNlbmRpbmcgZXZlbnRzLiBGaXhlcyAjNTU1MjQ0Ci0KLTIwMDgtMDktMDggMjA6Mjc6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiBSZXNldCB0aGUgc2VsZWN0b3Igc3RhdGUgd2hlbiBnb2luZyB0byBSRUFEWS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogKGdzdF9zZWxlY3Rvcl9wYWRfcmVzZXQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9yZXNldCksIChnc3RfaW5wdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlKToKLQkgIFJlc2V0IHRoZSBzZWxlY3RvciBzdGF0ZSB3aGVuIGdvaW5nIHRvIFJFQURZLgotCi0yMDA4LTA5LTAxIDEzOjIzOjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogUmV1c2UgdGhlIGdldF9saW5rZWRfcGFkcyBmb3IgYm90aCBzb3VyY2UgYW5kIHNpbmtwYWRzIGJlY2F1c2UgdGhleSBhcmUgdGhlIHNhbWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IChnc3RfaW5wdXRfc2VsZWN0b3JfaW5pdCksCi0JICAoZ3N0X2lucHV0X3NlbGVjdG9yX2V2ZW50KSwgKGdzdF9pbnB1dF9zZWxlY3Rvcl9xdWVyeSk6Ci0JICBSZXVzZSB0aGUgZ2V0X2xpbmtlZF9wYWRzIGZvciBib3RoIHNvdXJjZSBhbmQgc2lua3BhZHMgYmVjYXVzZSB0aGV5IGFyZQotCSAgdGhlIHNhbWUuCi0JICBJbXBsZW1lbnQgYSBjdXN0dW0gZXZlbnQgaGFuZGxlciBhbmQgZ2V0IHRoZSBpbnRlcm5hbGx5IGxpbmtlZCBwYWQKLQkgIGRpcmVjdGx5IGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgZGVmYXVsdCAoc2xvd2VyKSBpbXBsZW1lbnRhdGlvbi4KLQotMjAwOC0wOC0yNyAxNTo0NToxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IEltcGxlbWVudCB0aGUgTEFURU5DWSBxdWVyeSBpbiBhIGJldHRlciB3YXkgYnkgdGFraW5nIHRoZSBsYXRlbmN5IG9mIGFsbCBzaW5rcGFkcyBhbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiAoZ3N0X2lucHV0X3NlbGVjdG9yX2luaXQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9xdWVyeSk6Ci0JICBJbXBsZW1lbnQgdGhlIExBVEVOQ1kgcXVlcnkgaW4gYSBiZXR0ZXIgd2F5IGJ5IHRha2luZyB0aGUgbGF0ZW5jeSBvZiBhbGwKLQkgIHNpbmtwYWRzIGFuZCB0YWtpbmcgdGhlIG1pbi9tYXggaW5zdGVhZCBvZiBqdXN0IHRha2luZyBhIHJhbmRvbSBwYWQuCi0KLTIwMDgtMDgtMDUgMDk6MDU6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiBNb3ZlIHRoZSBzZWxlY3QtYWxsIGxvZ2ljIGludG8gdGhlIGFjdGl2YXRpb24gb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYWQuIFdlIHdhbnQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogKGdzdF9zZWxlY3Rvcl9wYWRfYnVmZmVyYWxsb2MpLAotCSAgKGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4pLCAoZ3N0X2lucHV0X3NlbGVjdG9yX2dldGNhcHMpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmF0ZV9zaW5rcGFkKToKLQkgIE1vdmUgdGhlIHNlbGVjdC1hbGwgbG9naWMgaW50byB0aGUgYWN0aXZhdGlvbiBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkCi0JICBwYWQuIFdlIHdhbnQgdG8gcmVtZW1iZXIgdGhlIGxhc3QgcGFkIHdpdGggYWN0aXZpdHkgaW4gc2VsZWN0LWFsbCBtb2RlLgotCSAgRml4IHRoZSBnZXRjYXBzIGZ1bmN0aW9uLCB3ZSBjYW4gcHJvZHVjZSB0aGUgdW5pb24gb2YgdGhlIHVwc3RyZWFtIGNhcHMKLQkgIGluIHNlbGVjdC1hbGwgbW9kZSwgbm90IHRoZSBpbnRlcnNlY3Rpb24gbGlrZSBwcm94eV9nZXRjYXBzKCkgZG9lcy4KLQotMjAwOC0wNi0xOSAxMzoxODoyNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBvdXRwdXQtc2VsZWN0b3I6IFVzZSBCT0lMRVJQTEFURSBtYWNybyBhbmQgdXBkYXRlIHRlc3QgdG8gdGhlIGxhdGVzdCBhcGkgY2hhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICAqIHRlc3RzL2ljbGVzL291dHB1dC1zZWxlY3Rvci10ZXN0LmM6Ci0JICBVc2UgQk9JTEVSUExBVEUgbWFjcm8gYW5kIHVwZGF0ZSB0ZXN0IHRvIHRoZSBsYXRlc3QgYXBpIGNoYW5nZXMuCi0KLTIwMDgtMDYtMTIgMTQ6NDk6MTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRG8gbm90IHVzZSBzaG9ydF9kZXNjcmlwdGlvbiBpbiBzZWN0aW9uIGRvY3MgZm9yIGVsZW1lbnRzLiBXZSBleHRyYWN0IHRoZW0gZnJvbSBlbGVtZW50IGRldGFpbHMgYW5kIHRoZXJlIHdpbGwgYmUgd2FyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2RjMTM5NC9nc3RkYzEzOTQuYzoKLQkgICogZXh0L2l2b3JiaXMvdm9yYmlzZGVjLmM6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkgICogZXh0L21ldGFkYXRhL2dzdG1ldGFkYXRhZGVtdXguYzoKLQkgICogZXh0L215dGh0di9nc3RteXRodHZzcmMuYzoKLQkgICogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzoKLQkgICogZ3N0LWxpYnMvZ3N0L2FwcC9nc3RhcHBzaW5rLmM6Ci0JICAqIGdzdC9iYXllci9nc3RiYXllcjJyZ2IuYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICAqIGdzdC9yYXdwYXJzZS9nc3RhdWRpb3BhcnNlLmM6Ci0JICAqIGdzdC9yYXdwYXJzZS9nc3R2aWRlb3BhcnNlLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgICogZ3N0L3ZpZGVvc2lnbmFsL2dzdHZpZGVvYW5hbHlzZS5jOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvZ3N0dmlkZW9kZXRlY3QuYzoKLQkgICogZ3N0L3ZpZGVvc2lnbmFsL2dzdHZpZGVvbWFyay5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtc2luay5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LXNvdXJjZS5jOgotCSAgRG8gbm90IHVzZSBzaG9ydF9kZXNjcmlwdGlvbiBpbiBzZWN0aW9uIGRvY3MgZm9yIGVsZW1lbnRzLiBXZSBleHRyYWN0Ci0JICB0aGVtIGZyb20gZWxlbWVudCBkZXRhaWxzIGFuZCB0aGVyZSB3aWxsIGJlIHdhcm5pbmdzIGlmIHRoZXkgZGlmZmVyLgotCSAgQWxzbyBmaXhpbmcgdXAgdGhlIENoYW5nZUxvZyBvcmRlci4KLQotMjAwOC0wMy0yMCAxODoxMDoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IERvIGdfb2JqZWN0X25vdGlmeSgpIG9ubHkgd2hlbiBub3QgaG9sZGluZyB0aGUgbG9jayB0byBnZXQgdGhlIHByb3BlcnR5IGJlY2F1c2Ugb3RoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfYWN0aXZlX3BhZCksIChnc3RfaW5wdXRfc2VsZWN0b3Jfc3dpdGNoKToKLQkgIERvIGdfb2JqZWN0X25vdGlmeSgpIG9ubHkgd2hlbiBub3QgaG9sZGluZyB0aGUgbG9jayB0byBnZXQgdGhlIHByb3BlcnR5Ci0JICBiZWNhdXNlIG90aGVyd2lzZSB3ZSBydW4gaW50byBhIGRlYWRsb2NrIHdpdGggdGhlIGRlZXAtbm90aWZ5IGhhbmRsZXJzCi0JICB0aGF0IGFyZSBwb3NzaWJseSBpbnN0YWxsZWQuCi0KLTIwMDgtMDMtMjAgMTc6NDg6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiBSZWxlYXNlIHRoZSBzZWxlY3RvciBsb2NrIHdoZW4gcGFkIGFsbG9jIGhhcHBlbnMgb24gYSBub24gc2VsZWN0ZWQgcGFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiAoZ3N0X3NlbGVjdG9yX3BhZF9jbGFzc19pbml0KSwKLQkgIChnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50KSwgKGdzdF9zZWxlY3Rvcl9wYWRfYnVmZmVyYWxsb2MpLAotCSAgKGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4pLCAoZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9hY3RpdmVfcGFkKToKLQkgIFJlbGVhc2UgdGhlIHNlbGVjdG9yIGxvY2sgd2hlbiBwYWQgYWxsb2MgaGFwcGVucyBvbiBhIG5vbiBzZWxlY3RlZCBwYWQuCi0KLTIwMDgtMDMtMjAgMTc6MDc6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiBBZGQgcGFkIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSBiZWhhdmlvdXIgb2YgdGhlIHVuc2VsZWN0ZWQgcGFkLCBpdCBjYW4gcmV0dXJuIE9LIG9yIE4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogKGdzdF9zZWxlY3Rvcl9wYWRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NlbGVjdG9yX3BhZF9pbml0KSwgKGdzdF9zZWxlY3Rvcl9wYWRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc2VsZWN0b3JfcGFkX2dldF9wcm9wZXJ0eSksIChnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50KSwKLQkgIChnc3Rfc2VsZWN0b3JfcGFkX2J1ZmZlcmFsbG9jKSwgKGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4pLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfYWN0aXZlX3BhZCk6Ci0JICBBZGQgcGFkIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSBiZWhhdmlvdXIgb2YgdGhlIHVuc2VsZWN0ZWQgcGFkLCBpdCBjYW4KLQkgIHJldHVybiBPSyBvciBOT1RfTElOS0VELCBiYXNlZCBvbiB0aGUgdXNlIGNhc2UuCi0KLTIwMDgtMDMtMjAgMTY6NDg6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci4qOiBGaWd1cmUgb3V0IHRoZSBsb2NraW5nIGEgYml0IG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICAoZ3N0X3NlbGVjdG9yX3BhZF9nZXRfcnVubmluZ190aW1lKSwgKGdzdF9zZWxlY3Rvcl9wYWRfcmVzZXQpLAotCSAgKGdzdF9zZWxlY3Rvcl9wYWRfZXZlbnQpLCAoZ3N0X3NlbGVjdG9yX3BhZF9idWZmZXJhbGxvYyksCi0JICAoZ3N0X2lucHV0X3NlbGVjdG9yX3dhaXQpLCAoZ3N0X3NlbGVjdG9yX3BhZF9jaGFpbiksCi0JICAoZ3N0X2lucHV0X3NlbGVjdG9yX2NsYXNzX2luaXQpLCAoZ3N0X2lucHV0X3NlbGVjdG9yX2luaXQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9kaXNwb3NlKSwgKGdzdF9zZWdtZW50X3NldF9zdGFydCksCi0JICAoZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9hY3RpdmVfcGFkKSwKLQkgIChnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X2xpbmtlZF9wYWQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9pc19hY3RpdmVfc2lua3BhZCksCi0JICAoZ3N0X2lucHV0X3NlbGVjdG9yX2FjdGl2YXRlX3NpbmtwYWQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9yZXF1ZXN0X25ld19wYWQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9yZWxlYXNlX3BhZCksCi0JICAoZ3N0X2lucHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZSksIChnc3RfaW5wdXRfc2VsZWN0b3JfYmxvY2spLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9zd2l0Y2gpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaDoKLQkgIEZpZ3VyZSBvdXQgdGhlIGxvY2tpbmcgYSBiaXQgbW9yZS4KLQkgIE1hcmsgYnVmZmVycyB3aXRoIGRpc2NvbnQgYWZ0ZXIgc3dpdGNoaW5nLgotCSAgRml4IGluaXRpYWwgc2VnbWVudCBmb3J3YXJkaW5nLCBtYWtlIHN1cmUgdG8gb25seSBmb3J3YXJkIG9uZSBzZWdtZW50Ci0JICByZWdhcmRsZXNzIG9mIHdoYXQgdGhlIHNlcXVlbmNlIG9mIGJ1ZmZlcnMvc2VnbWVudHMgaXMuIFNlZSAjNTIyMjAzLgotCSAgSW1wcm92ZSBmbHVzaGluZyB3aGVuIGJsb2NrZWQuCi0JICBSZXR1cm4gTk9UX0xJTktFRCB3aGVuIGEgc3RyZWFtIGlzIG5vdCBzZWxlY3RlZC4KLQkgIE5vdCBBUEkgY2hhbmdlIGZvciB0aGUgc3dpdGNoIHNpZ25hbCBpbiB0aGUgZG9jcy4KLQkgIEZpeCBzdGFydC90aW1lL2FjY3VtIHZhbHVlcyBvZiB0aGUgbmV3IHNlZ21lbnQuCi0JICBDb3JyZWN0bHkgdW5sb2NrIGFuZCBmbHVzaCBhIGJsb2NraW5nIHNlbGVjdG9yIHdoZW4gZ29pbmcgdG8gUkVBRFkuCi0KLTIwMDgtMDMtMTQgMTc6MjI6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiBBZGQgbG90cyBvZiBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6IChnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50KSwKLQkgIChnc3Rfc2VsZWN0b3JfcGFkX2J1ZmZlcmFsbG9jKSwgKGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4pLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9jbGFzc19pbml0KSwKLQkgIChnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9wdXNoX3BlbmRpbmdfc3RvcCk6Ci0JICBBZGQgbG90cyBvZiBkZWJ1Z2dpbmcuCi0JICBGaXggdGltZSBtZW1iZXIgaW4gdGhlIG5ld3NlZ21lbnQgZXZlbnQuCi0KLTIwMDgtMDMtMTMgMTY6NDY6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci4qOiBWYXJpb3VzIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiAoZ3N0X3NlbGVjdG9yX3BhZF9jbGFzc19pbml0KSwKLQkgIChnc3Rfc2VsZWN0b3JfcGFkX2ZpbmFsaXplKSwgKGdzdF9zZWxlY3Rvcl9wYWRfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50KSwgKGdzdF9pbnB1dF9zZWxlY3Rvcl9jbGFzc19pbml0KSwKLQkgIChnc3RfaW5wdXRfc2VsZWN0b3JfaW5pdCksIChnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9yZXF1ZXN0X25ld19wYWQpLAotCSAgKGdzdF9pbnB1dF9zZWxlY3Rvcl9yZWxlYXNlX3BhZCksCi0JICAoZ3N0X2lucHV0X3NlbGVjdG9yX3B1c2hfcGVuZGluZ19zdG9wKSwKLQkgIChnc3RfaW5wdXRfc2VsZWN0b3Jfc3dpdGNoKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmg6Ci0JICBWYXJpb3VzIGNsZWFudXBzLgotCSAgQWRkZWQgdGFncyB0byB0aGUgcGFkcy4KLQkgIFNlbGVjdCBhY3RpdmUgcGFkIGJhc2VkIG9uIHRoZSBwYWQgb2JqZWN0IGluc3RlYWQgb2YgaXRzIG5hbWUuCi0JICBGaXggcmVmY291bnQgaW4gc2V0X2FjdGl2ZV9wYWQuCi0JICBBZGQgcHJvcGVydHkgdG8gZ2V0IHRoZSBudW1iZXIgb2YgcGFkcy4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgKGdzdF9vdXRwdXRfc2VsZWN0b3JfY2xhc3NfaW5pdCksCi0JICAoZ3N0X291dHB1dF9zZWxlY3Rvcl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5KToKLQkgIFZhcmlvdXMgY2xlYW51cHMuCi0JICBTZWxlY3QgdGhlIGFjdGl2ZSBwYWQgYmFzZWQgb24gdGhlIHBhZCBvYmplY3QgaW5zdGVhZCBvZiBpdHMgbmFtZS4KLQkgIEZpeCBsb2NraW5nIHdoZW4gc2V0dGluZyB0aGUgYWN0aXZlIHBhZC4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RzZWxlY3Rvci1tYXJzaGFsLmxpc3Q6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmM6IChjbGVhbnVwX3BhZCksCi0JICAoc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQpLCAocnVuX2lucHV0X3NlbGVjdG9yX2J1ZmZlcl9jb3VudCk6Ci0JICBGaXhlcyBmb3IgcGFkIGluc3RlYWQgb2YgcGFkbmFtZSBmb3IgcGFkIHNlbGVjdGlvbi4KLQotMjAwOC0wMi0yNiAxMjowMTozNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6IEZpeCBjaGFuZ2luZyB0byBzYW1lIHBhZCB0d2ljZSBiZWZvcmUgYSBjaGFpbiBjYWxsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgIEZpeCBjaGFuZ2luZyB0byBzYW1lIHBhZCB0d2ljZSBiZWZvcmUgYSBjaGFpbiBjYWxsLgotCi0yMDA4LTAyLTI1IDA4OjUzOjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci4qOiBBZGRlZCAic2VsZWN0LWFsbCIgcHJvcGVydHkgdG8gbWFrZSBpdCB3b3JrIGxpa2UgYWdncmVnYXRvciBpbiAwLjguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgotCSAgQWRkZWQgInNlbGVjdC1hbGwiIHByb3BlcnR5IHRvIG1ha2UgaXQgd29yayBsaWtlIGFnZ3JlZ2F0b3IgaW4gMC44LgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBGaXggcmVzZW5kLWxhdGVzdCBiZWhhdm9pdXIuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jOgotCSAgQWRkIHVuaXQgdGVzdHMgZm9yIHNlbGVjdG9yLgotCi0yMDA4LTAyLTA3IDEzOjQ4OjIwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOiBBZGQgYSBmaXhtZSBjb21tZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgQWRkIGEgZml4bWUgY29tbWVudC4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgRml4IHNhbWUgbGVhayBhcyBpbiBpbnB1dC1zZWxlY3Rvci4KLQkgICogdGVzdHMvaWNsZXMvb3V0cHV0LXNlbGVjdG9yLXRlc3QuYzoKLQkgIEltcHJvdmUgdGhlIHRlc3QuCi0KLTIwMDgtMDItMDEgMTc6MDg6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jOiBEb24ndCBsZWFrIGV2ZW50IG9uIHBhZHMgdGhhdCBhcmUgbm90IGxpbmtlZC4gRml4ZXMgIzUxMjgyNi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYzogKGdzdF9zZWxlY3Rvcl9wYWRfZXZlbnQpOgotCSAgRG9uJ3QgbGVhayBldmVudCBvbiBwYWRzIHRoYXQgYXJlIG5vdCBsaW5rZWQuIEZpeGVzICM1MTI4MjYuCi0KLTIwMDgtMDEtMjkgMDc6Mzg6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgUmVwbGFjZSB0aGUgc3dpdGNoIHBsdWdpbiB3aXRoIHRoZSBzZWxlY3RvciBwbHVnaW4uIEFkZCBvdXRwdXQtIHNlbGVjdG9yIGFzIHRoZSBvcHBvc2l0ZSBvZiBpbnB1dC1zZWxlY3RvbyAod2FzIHN3aXRjLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLnNpZ25hbHM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tZXRhZGF0YS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zZWxlY3Rvci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VuZHRvdWNoLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXN3aXRjaC54bWw6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RzZWxlY3Rvci1tYXJzaGFsLmxpc3Q6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0c2VsZWN0b3IuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9zZWxlY3Rvci52Y3Byb2o6Ci0JICAqIGdzdC9zd2l0Y2gvLmN2c2lnbm9yZToKLQkgICogZ3N0L3N3aXRjaC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2gtbWFyc2hhbC5saXN0OgotCSAgKiBnc3Qvc3dpdGNoL2dzdHN3aXRjaC5jOgotCSAgKiBnc3Qvc3dpdGNoL2dzdHN3aXRjaC5oOgotCSAgKiBnc3Qvc3dpdGNoL3N3aXRjaC52Y3Byb2o6Ci0JICAqIHRlc3RzL2ljbGVzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9pY2xlcy9vdXRwdXQtc2VsZWN0b3ItdGVzdC5jOgotCSAgUmVwbGFjZSB0aGUgc3dpdGNoIHBsdWdpbiB3aXRoIHRoZSBzZWxlY3RvciBwbHVnaW4uIEFkZCBvdXRwdXQtCi0JICBzZWxlY3RvciBhcyB0aGUgb3Bwb3NpdGUgb2YgaW5wdXQtc2VsZWN0b28gKHdhcyBzd2l0Y2gpLiBBZGQgYSB0ZXN0Ci0JICBmb3Igb3V0cHV0LXNlbGVjdG9yLiBBZGQgZG9jcyBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgdmNwcm9qIG5lZWRzCi0JICB1cGRhdGUuIEZpeGVzICM1MDAxNDIuCi0KLTIwMTAtMTItMzAgMDA6NDY6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSAgZG9jczogYWRkIHZhbHZlIGVsZW1lbnQgdG8gZG9jdW1lbnRhdGlvbgotCi0yMDEwLTEyLTMwIDAwOjQxOjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgotCSAgdmFsdmU6IHNvbWUgbWlub3IgY2xlYW4tdXBzCi0KLTIwMTAtMTItMzAgMDA6MzA6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICB2YWx2ZTogZml4IHR5cG8gaW4gcHJvcGVydHkgZGVzY3JpcHRpb24KLQkgIEFuZCByZXBocmFzZSB3aGlsZSBhdCBpdCwgdG8gbWFrZSBpdCBtb3JlIGNvbmNpc2UuCi0KLTIwMTAtMTItMzAgMDA6MjY6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jOgotCSAgdGVzdHM6IGVuYWJsZSB2YWx2ZSB1bml0IHRlc3QKLQotMjAxMC0xMi0zMCAwMDoyMjozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICBlbGVtZW50czogYWRkIG5ldyB2YWx2ZSBlbGVtZW50IHRvIGJ1aWxkCi0JICBNb3ZlZCBmcm9tIGdzdC1wbHVnaW5zLWJhZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMDgwOAotCi0yMDEwLTEwLTE5IDIzOjQwOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYzoKLQkgIHRlc3RzOiBmaXggdmFsdmUgdW5pdCB0ZXN0Ci0JICBnc3RfYnVmZmVyX3BhZF9hbGxvYygpIG5lZWRzIHNpbXBsZSBjYXBzIG9yIE5VTEwgY2FwcywKLQkgIEFOWSBjYXBzIGFyZSBub3QgYWxsb3dlZC4KLQotMjAxMC0wOS0yOCAxMzo1MjoyOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICB2YWx2ZTogbm8gbmVlZCB0byByZWYgdGhlIG9iamVjdCBpbiBfY2hhaW4KLQkgIERvbid0IHJlZiB0aGUgcGFkIGluIGNoYWluLCBsaWtlIGVsc2V3aGVyZQotCi0yMDEwLTA5LTMwIDE3OjQ4OjM1IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZhbHZlLmM6Ci0JICB0ZXN0czogRml4IGNhcHMgbGVhayBpbiB0aGUgdmFsdmUgdGVzdAotCi0yMDEwLTA5LTMwIDE3OjI0OjI5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZhbHZlLmM6Ci0JICB2YWx2ZTogQWRkIHVuaXQgdGVzdHMKLQkgIEFkZCBhIHVuaXQgdGVzdCBmb3IgdGhlIHZhbHZlIGVsZW1lbnQuCi0KLTIwMTAtMDktMzAgMTY6MjY6MTkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgotCSAgdmFsdmU6IE1ha2UgdGhlIGRyb3AgdmFyaWFibGUgaW50byBhbiBhdG9taWMuCi0JICBVc2luZyBhbiBhdG9taWMgYWxsb3dzIHVzIHRvIGF2b2lkIGxvY2tpbmcgdGhlIHdob2xlIG9iamVjdCBhbGwgdGltZSB0aW1lLgotCSAgQXMgc3VnZ2VzdGVkIGJ5IFN0ZWZhbiBLb3N0LgotCi0yMDEwLTA5LTMwIDE2OjIyOjA0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIHZhbHZlOiBDb3JyZWN0bHkgc2V0IHRoZSBESVNDT05UIGZsYWcgYWZ0ZXIgZHJvcHBpbmcgYnVmZmVycwotCi0yMDEwLTA5LTMwIDE2OjE2OjQ3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIHZhbHZlOiBSZW1vdmUgc3VwZXJmbG91cyBjaGVja2luZyBjYXN0cwotCi0yMDEwLTA5LTMwIDE2OjEzOjIzIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIHZhbHZlOiBGaXggc3R5bGUsIGltcHJvdmUgY29tbWVudHMKLQkgIE1pbm9yIGltcHJvdmVtZW50cyB0byB0aGUgY29tbWVudHMgYW5kIGJyZWFrIGEgZmV3IG92ZXJseSBsb25nIGxpbmVzCi0KLTIwMTAtMDktMjggMTQ6MjY6MTEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgdmFsdmU6IG1vdmUgZGVmYXVsdDogcGFyc3QgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgdG8gdGhlIGVuZAotCSAgTm93IHN1cmUgaWYgaXQgbWF0dGVycywgYnV0IHRoZSBwcmV2aW91cyBmb3JtIGxvb2tzIHdlaXJlZC4KLQotMjAxMC0wOS0yOCAxNDoyMzowMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICB2YWx2ZTogbW92ZSBkZWJ1Zy1jYXRlZ29yeSByZWdpc3RyYXRpb24gdG8gdHlwZSBpbml0Ci0KLTIwMTAtMDktMjggMTQ6MTU6MTMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgdmFsdmU6IHVzZSBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIG9uIHByb3BlcnRpZXMKLQotMjAxMC0wOS0yOCAxNDowNzozOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICB2YWx2ZTogR1NUX0JPSUxFUlBMQVRFIGFscmVhZHkgc2V0cyBwYXJlbnRfY2xhc3MKLQotMjAxMC0wMy0xOCAxNzozMDoyNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICB2YWx2ZTogZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHMgPT4gZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlCi0KLTIwMDktMDItMTAgMTg6NTI6NTQgKzAwMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgotCSAgZG9jczogZG9jdW1lbnQgdmFsdmUgZWxlbWVudAotCi0yMDA5LTAyLTEwIDE3OjU3OjE2ICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIGZzdmFsdmU6IHJlbmFtZSB0byB2YWx2ZQotCi0yMDA5LTAyLTEwIDE3OjU1OjQ3ICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuaDoKLQkgIGZzdmFsdmU6IHJlLWluZGVudCBnc3Qgc3R5bGUKLQotMjAwOC0xMi0xMyAwMDozMTo0NSAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICBmc3ZhbHZlOiBJZ25vcmUgZXJyb3JzIGlmIGRyb3BwaW5nIGlzIHNldCB0byB0cnVlCi0KLTIwMDgtMTItMTAgMTc6MDA6MzMgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgZnN2YWx2ZTogQWRkIGdldGNhcHMgcHJveHlpbmcgdG8gdGhlIHZhbHZlCi0KLTIwMDgtMDgtMjAgMTQ6MTE6MDIgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oOgotCSAgZnN2YWx2ZTogUmViYXNlIHZhbHZlIG9udG8gZ3N0ZWxlbWVudCBpbnN0ZWFkIG9mIGJhc2V0cmFuc2Zvcm0KLQotMjAwOC0wOC0xOSAxODo0OTo1MSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICBmc3ZhbHZlOiBSZXZlcnQgIkZpeCByZWZjb3VudGluZyBpc3N1ZXMgaW4gcHJlcGFyZV9vdXRwdXRfYnVmZmVyIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA2NWRkNDYwZjBhM2E5YzQ4ODJlNjM4Yzg2MjA4Zjc0ZWY2MmMzNDYwLgotCi0yMDA4LTA4LTA1IDExOjMwOjU3ICswMDAwICBzam9lcmRAbHVvbi5uZXQgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jOgotCSAgZnN2YWx2ZTogRml4IHJlZmNvdW50aW5nIGlzc3VlcyBpbiBwcmVwYXJlX291dHB1dF9idWZmZXIKLQkgIDIwMDgwODA1MTEzMDU3LWJlMGYyLTlkYzI3MDc4MWYwYTBmMjFjNjE2ZWQxMWRiZDFmMTk4ZmQxYjMyNmUuZ3oKLQotMjAwOC0wNC0wOSAxNjozMjoyMSArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIGZzdmFsdmU6IFJlbW92ZSB1bnVzZWQgZGlzcG9zZSBtZXRob2QgaW4gdmFsdmUKLQkgIDIwMDgwNDA5MTYzMjIxLTNlMmRjLTkyY2NiMmRiODc0ZTQ2ZTBkOTJjMTU1MjA1NzdjMWJlMGUyYmM2MTcuZ3oKLQotMjAwNy0xMi0xOSAyMDozMjozMCArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIGZzdmFsdmU6IERvbnQgaG9sZCB0aGUgb2JqZWN0IGxvY2sgd2hpbGUgY2FsbGluZyBiYXNlIGFsbG9jIGZ1bmN0aW9uCi0JICAyMDA3MTIxOTIwMzIzMC0zZTJkYy02NTE5MTc1ZDhkODE0OTY1MTViMmQ5MDYwYWMzMTY2NTA1NjBmNjkxLmd6Ci0KLTIwMDctMTItMTkgMjA6MzI6MTggKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmg6Ci0JICBmc3ZhbHZlOiBTZXQgdGhlIERJU0NPTlQgZmxhZyBhZnRlciBkcm9wcGluZyBidWZmZXJzCi0JICAyMDA3MTIxOTIwMzIxOC0zZTJkYy1iYzVmMDNkODhmZjU4MzcwNDBiOTIxNGRlMDE2Y2MxNDI3NzZkZmMyLmd6Ci0KLTIwMDctMTItMTkgMDA6NTc6MzkgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmg6Ci0JICBmc3ZhbHZlOiBVc2UgZG8gdGhlIGFsbG9jX2J1ZmZlciBmdW5jdGlvbiBpbiB0aGUgdmFsdmUKLQkgIDIwMDcxMjE5MDA1NzM5LTNlMmRjLTJhMGZkZmEyZjM4ZjAzYWI0NzkxZmU1YzRhYjg1ZTg3OTAxMTM2ODMuZ3oKLQotMjAwNy0xMS0yMSAyMDowODo1OCArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIGZzdmFsdmU6IE9ubHkgc2V0IHBhc3N0aHJvdWdoIHRvIFRSVUUgb24gbmV3ZXIgdmVyc2lvbnMgb2YgZ3N0Ci0JICAyMDA3MTEyMTIwMDg1OC0zZTJkYy1iMTZjZGVhYmJjM2MwNTYyYzZmYzdiMTFiOWI5NzkyYzkxMGY1NjllLmd6Ci0KLTIwMDctMTEtMjEgMTg6MTc6MjkgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JICBmc3ZhbHZlOiBDb21wYXJlIG1pbm9yLCBub3QgbWFqb3IKLQkgIDIwMDcxMTIxMTgxNzI5LTNlMmRjLWE1OTk3YzNiN2Y1Yzg2OTY2MzcwOTY5NzE0ZmFjZjhlZTI0MjY1OWQuZ3oKLQotMjAwNy0xMC0yNiAyMjozNzo0OSArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIGZzdmFsdmU6IE1ha2UgdGhlIHZhbHZlIGVsZW1lbnQgd29yayB3aXRoIGdzdCA8IDAuMTAuMTMKLQkgIDIwMDcxMDI2MjIzNzQ5LTNlMmRjLTE4ZjY4NWE0ZTQ1ZmJkY2U2NzdhYzc3NzU4Njg3NmZjNzE5ZDcyMjIuZ3oKLQotMjAwNy0xMC0yNCAyMjo0Mjo0NiArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuYzoKLQkgIGZzdmFsdmU6IFJlbmFtZSB2YWx2ZSB0byBmc3ZhbHZlCi0JICAyMDA3MTAyNDIyNDI0Ni0zZTJkYy1jNTQyMTZhZjJlZjBlZjNmMWEyMjA2ZDcyM2U4N2JlMmEyM2FiOGVkLmd6Ci0KLTIwMDctMTAtMjQgMjI6NDE6NDcgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmg6Ci0JICBmc3ZhbHZlOiBBZGQgdmFsdmUgZWxlbWVudAotCSAgMjAwNzEwMjQyMjQxNDctM2UyZGMtZjI4YWIwYzA3M2UyODM4OTRiNjVjMjJjNGY0NDM5N2M4OTdkZWMwMS5negotCi0yMDEwLTEyLTMwIDE4OjMxOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgZmFrZXNpbms6IG1ha2UgdmFyaWFibGUgc3RhdGljCi0KLTIwMTAtMTItMjkgMTE6NDg6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZml4IGRlYWRsb2NrCi0JICBPbmx5IGdvIGludG8gTElWRV9XQUlUIHdoZW4gdGhlIGFyZSBub3QgbGl2ZV9ydW5uaW5nIGFuZCBvbmx5IHN0b3Agd2FpdGluZyB3aGVuCi0JICBsaXZlX3J1bm5pbmcgaXMgVFJVRS4gSWYgd2UgZG9uJ3QgbG9vcCwgd2UgY291bGQgZGVhZGxvY2sgd2hlbiBjYWxsZWQgZnJvbQotCSAgb3V0c2lkZSBvZiBiYXNlc3JjLCBzdWNoIGFzIGJhc2VhdWRpb3NyYy4KLQkgIEZpeGVzICM2MzU3ODUKLQotMjAxMC0xMi0yOCAxNjo0MDoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgotCSAgY2hlY2s6IGFkZCBtb3JlIHNpbmsgdW5pdCB0ZXN0cwotCi0yMDEwLTEyLTI4IDE2OjIzOjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogYWxzbyBwcmVyb2xsIGFzeW5jPWZhbHNlIHNpbmtzCi0JICBBbHNvIHByZXJvbGwgYXN5bmM9ZmFsc2Ugc2lua3MgYWZ0ZXIgYSBmbHVzaC4KLQotMjAxMC0xMi0yMiAxNjo1NTozMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtcHJvZ3Jlc3MudHh0OgotCSAgZG9jczogZml4IHR5cG8KLQotMjAxMC0xMi0yNiAyMToyMDozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgUmV2ZXJ0ICJtaWNyby1vcHRpbTogaWYgKHgpIGlzIGNoZWFwZXIgdGhhbiBpZiAoeCA+IDApIGZvciB1bnNpZ25lZCBpbnRlZ2VycyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNmFhOGNhMzdlZWI5ZGViZmE2OTE5NzQxYTAyMzI1MGJmMjc4MjQ4Zi4KLQkgIFNlZSBodHRwOi8vYXJ0aWNsZS5nbWFuZS5vcmcvZ21hbmUuY29tcC52aWRlby5nc3RyZWFtZXIuZGV2ZWwvMzIyODIKLQotMjAxMC0xMi0yNCAxNDowMjowOCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICBlbGVtZW50czogcmVlbmFibGUgZmRzcmMvZmRzaW5rIG9uIE1TVkMKLQotMjAxMC0xMi0yMiAxNjozNjowOSAtMDgwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JICBGaXggR1N0YXRCdWYgZGVmaW5pdGlvbiBmb3Igd2luMzIgd2hlbiBidWlsZGluZyBhZ2FpbnN0IG9sZGVyIGdsaWIuIE5vdyBtYXRjaGVzIHVwc3RyZWFtIGdsaWIgZGVmaW5pdGlvbi4KLQotMjAxMC0xMi0yMiAyMjozNjowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiBhZGQgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGFubm90YXRpb24KLQotMjAxMC0xMi0yMiAxNjo0MjowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtcHJvZ3Jlc3MudHh0OgotCSAgZG9jczogYWRkIGRyYWZ0IGlkZWEgZm9yIHByb2dyZXNzIHJlcG9ydGluZwotCi0yMDEwLTEyLTIxIDEwOjMzOjU5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZml4IHR5cG8KLQotMjAxMC0xMi0yMCAxNzo0NjozNiArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAxNjk0NjJhIHRvIDQ2NDQ1YWQKLQotMjAxMC0xMi0xOSAxMjo0OTo1OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdsaXN0OiBEb24ndCBsZWFrIGNvcGllcyBvZiBlbXB0eSBzdHJpbmdzCi0KLTIwMTAtMTItMTcgMTk6MTk6NDAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JICBiYXNlOiBkb2N1bWVudGF0aW9uIGZpeHVwcyBhbmQgYW5ub3RhdGlvbgotCi0yMDEwLTEyLTE3IDE5OjE0OjQxICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGdzdDogZG9jdW1lbnRhdGlvbiBmaXh1cHMgYW5kIGFubm90YXRpb24KLQkgIFJlcG9ydGVkIGJ5IGVuYWJsaW5nIHRoZSAtLXdhcm4tYWxsIG9wdGlvbiBvZiBnLWlyLXNjYW5uZXIKLQotMjAxMC0xMi0xNyAxNTo0ODozNCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSAgZ3N0ZGF0ZXRpbWU6IEZpeCBkb2N1bWVudGF0aW9uCi0JICBzZWNvbmQgPT4gc2Vjb25kcwotCSAgbWljcm9zZWNvbmQgYXJndW1lbnQgd2FzIGRyb3BwZWQKLQotMjAxMC0xMi0wNCAxNTozMjowNiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBVc2UgYW4gYXRvbWljIGludGVnZXIgaW5zdGVhZCBvZiBhIGxvY2sgZm9yIGNoZWNraW5nIHRhZ3MgcHJlc2VuY2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzY0NTUKLQotMjAxMC0xMi0xNiAxMDo1NToyMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogSGFuZGxlIGRvd25zdHJlYW0gZ2l2aW5nIGEgYnVmZmVyIHdpdGggbmV3IGNhcHMgYnV0IGludmFsaWQgc2l6ZQotCSAgVGhpcyBjYW4gaGFwcGVuIGZvciBleGFtcGxlIHdoZW4gZG93bnN0cmVhbSBwcm9wb3NlZCBuZXcgY2FwcywgbGF0ZXIgcHJvcG9zZWQKLQkgIHRoZSBwcmV2aW91cyBjYXBzIGFnYWluIHdoaWNoIGluIHR1cm4gZW5hYmxlcyBwYXNzdGhyb3VnaCBtb2RlIGluIHVwc3RyZWFtCi0JICBlbGVtZW50cyBhbmQgdGhlIHdyb25nLXNpemVkIGJ1ZmZlciBhcHBlYXJzIGluIGFuIGVsZW1lbnQgd2hlcmUgdGhlIGNhcHMKLQkgIGNoYW5nZSBuZXZlciBoYXBwZW5lZC4gU2ltcGx5IGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciBpbiB0aGlzIGNhc2UuCi0JICBTZWUgYnVnICM2MzU0NjEuCi0KLTIwMTAtMTItMTUgMjM6MTk6NTQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IHVzZSB0aGUgcHVibGljbHkgdmlzaWJsZSBhZGRyZXNzIHRvIGZpeCB0aGUgdGVzdHMKLQkgIFRoZSAtQnN5bWJvbGljIGNoYW5nZSBjYXVzZXMgdXMgdG8gZ2V0IGEgZGlmZmVyZW50IGFkZHJlc3Mgd2hlbiBpbnRlcm5hbHkKLQkgIGxvb2tpbmcgdXAgdGhlIGZ1bmN0aW9uIHRoYW4gd2hhdCBhcHBsaWNhdGlvbiB3b3VsZCBnZXQgd2hlbiB0aGUgdXNlIHRoZSBzeW1ib2wKLQkgIHRoYXQgdGhleSBzZWUuIFRoaXMgbWFkZSByZW1vdmluZyB0aGUgZGVmYXVsdCBsb2doYW5kbGVyIHRvIGZhaWwsIGFzIGl0IGlzIHNldAotCSAgaW50ZXJuYWxseSBhbmQgcmVtb3ZlZCBleHRlcm5hbHkuCi0KLTIwMTAtMTItMTUgMTQ6NTU6MTIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDIwNzQyYWUgdG8gMTY5NDYyYQotCi0yMDEwLTEyLTE1IDEyOjEwOjAyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogdXNlIHRoZSAtQnN5bWJvbGljLWZ1bmN0aW9ucyBsaW5rZXIgZmxhZyBpZiBzdXBwb3J0ZWQKLQkgIFRoaXMgZmVhdHVyZSB0dXJucyBpbnRyYSBsaWJyYXJ5IGNhbGxzIGludG8gZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGFuZCB0aHVzIG1ha2VzCi0JICB0aGVtIGEgbGl0dGxlIGZhc3Rlci4gVGhlIGRvd25zaWRlIGlzIHRoYXQgdGhpcyBjYXVzZXMgcHJvYmxlbXMgZm9yIGUuZy4KLQkgIExEX1BSRUxPQUQgYmFzZWQgdG9vbHMuIFRodXMgYWRkIGEgY29uZmlndXJlIG9wdGlvbiB0byB0dXJuIGl0IG9mZi4KLQotMjAxMC0xMi0xNCAxOTowMDoxNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGltcHJvdmUgbGFzdF9zdG9wIGNhbGN1bGF0aW9uCi0JICBPbmx5IHVwZGF0ZSB0aGUgbGFzdF9zdG9wIHZhbHVlIHdoZW4gd2UgaGFkIGEgdmFsaWQgc3RvcCBwb3NpdGlvbiBmb3IgdGhlCi0JICBjbGlwcGluZyBvciBlbHNlIHRoZSBjbGlwcGluZyBjb2RlIGFzc3VtZXMgdGhlIHN0b3AgcG9zaXRpb24gZXh0ZW5kcyB0byB0aGUgZW5kCi0JICBvZiB0aGUgc2VnbWVudCwgd2hpY2ggbWFrZXMgdGhlIHBvc2l0aW9uIHJlcG9ydGluZyByZXR1cm4gd2VpcmQgdmFsdWVzLgotCi0yMDEwLTEyLTE0IDE1OjUyOjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZml4IG9iamVjdCB0eXBlIGhhbmRsaW5nIGluIHF1ZXVlZCBwcmVyb2xsCi0JICBGYWN0b3Igb3V0IHRoZSBtZXRob2QgdG8gZ2V0IHRoZSBvYmplY3QgdHlwZS4KLQkgIFdoZW4gcHJlcm9sbC1xdWV1ZS1sZW4gPiAwLCB1c2UgdGhlIHJpZ2h0IG9iamVjdCB0eXBlIGluc3RlYWQgb2YgaWdub3JpbmcKLQkgIGJ1ZmZlci1saXN0cy4KLQotMjAxMC0xMi0xMyAxNjoyMjo0NiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMDExYmNjOCB0byAyMDc0MmFlCi0KLTIwMTAtMTItMTEgMTA6MTA6MDQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBsaWJzOiBGaXggR0lSIGJ1aWxkIGZvciBzcmNkaXIgIT0gYnVpbGRkaXIKLQotMjAxMC0xMi0wOCAxNzo1MToxMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGNvbW1pdCAnMGVhYTI1Y2JmNWMwZTRiZjg2NTQ1ZmI2N2MxODFhMGVjZDJmMTljNycgaW50byAwLjExCi0KLTIwMTAtMTItMDggMTI6MTc6MzUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgZG9jczogZml4IHdyb25nIHVzZSBvZiBTaW5jZToga2V5d29yZAotCi0yMDEwLTEyLTA4IDExOjUyOjMxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSAgcmVnaXN0cnk6IG1haW50YWluIHRoZSB0eXBlZmluZCBleHRlbnNpb24gbGlzdCBvcmRlcgotCi0yMDEwLTEyLTA4IDExOjUxOjU5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkgIGRvY3M6IGFkZCAoKSB0byB4cmVmIHRoZSBmdW5jdGlvbi4KLQotMjAxMC0xMi0wNyAxOTozNTo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IHJlbW92ZSBzb21lIGRlYWQgY29kZSwgR1NUX0RFQlVHX0NPTE9SIGlzIG5ldmVyIGRlZmluZWQKLQotMjAxMC0xMi0wNyAxOTozNToyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICB1dGlsczogY29uc3QtaWZ5IGFyZ3VtZW50cyB0byBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IoKQotCi0yMDEwLTEyLTA3IDE4OjQ2OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVycm9yLmM6Ci0JICBkb2NzOiBnc3RfZXJyb3JfZ2V0X21lc3NhZ2UoKSByZXR1cm5zIHN0cmluZyBpbiBVVEYtOCwgbm90IGN1cnJlbnQgbG9jYWxlCi0JICBXZSB0ZWxsIGdldHRleHQgdG8gcmV0dXJuIGV2ZXJ5dGhpbmcgaW4gVVRGLTggZW5jb2RpbmcuCi0KLTIwMTAtMTItMDUgMjA6MTc6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHJlZ2lzdGVyIGdzdF9wYWRfZ2V0X2ZpeGVkX2NhcHNfZnVuYygpIHdpdGggdGhlIGRlYnVnIGxvZyBzeXN0ZW0KLQotMjAxMC0xMi0wNyAxODozNTo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkgIGRvY3M6IGxpYmdzdGJhc2U6IG1vcmUgZ29iamVjdCBpbnRyb3NwZWN0aW9uIGFubm90YXRpb25zCi0JICBNYW55IG9mIHRoZXNlIGFyZSBzdXBlcmZsdW91cyBhbmQgd2VyZSBhZGRlZCBmb3IgY2xhcml0eS4KLQotMjAxMC0xMi0wNyAxODozNTowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RlcnJvci5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RmaWx0ZXIuYzoKLQkqIGdzdC9nc3RmaWx0ZXIuaDoKLQkqIGdzdC9nc3Rmb3JtYXQuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGluZGV4LmM6Ci0JKiBnc3QvZ3N0aW5kZXhmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dGFzay5jOgotCSogZ3N0L2dzdHRhc2twb29sLmM6Ci0JKiBnc3QvZ3N0dHJhY2UuYzoKLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHVyaS5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5oOgotCSAgZG9jczogZ3N0OiBtb3JlIGdvYmplY3QgaW50cm9zcGVjdGlvbiBhbm5vdGF0aW9ucwotCSAgTWFueSBvZiB0aGVzZSBhcmUgc3VwZXJmbHVvdXMsIGFkZGVkIGZvciBjbGFyaXR5LgotCi0yMDEwLTEyLTA3IDE4OjQwOjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogdXBkYXRlIGRvY3MKLQotMjAxMC0xMi0wNyAxODozMzo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGRhdGFwcm90b2NvbC5kZWY6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IHVwZGF0ZSBkZWZzCi0KLTIwMTAtMTItMDcgMTg6MzI6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgY2hlY2s6IGRpc2FibGUgQUJJIGNoZWNrcwotCi0yMDEwLTEyLTA3IDE4OjMyOjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTAuMTEudHh0OgotCSAgcG9ydGluZzogdXBkYXRlIHBvcnRpbmcgZG9jdW1lbnQKLQotMjAxMC0xMi0wNyAxODoxNDozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNvbXBhdC5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHJlbW92ZSBnZXRfY2Fwc19yZWZmZWQgdmFyaWFudHMKLQkgIE1ha2UgdGhlIF9nZXRfY2FwcyBmdW5jdGlvbnMgYmVoYXZlIGxpa2UgdGhlIF9nZXRfY2Fwc19yZWZmZWQgdmFyaWFudHMgYW5kCi0JICByZW1vdmUgdGhlIF9yZWZmZWQgdmFyaWFudHMuIFRoaXMgbWVhbnMgdGhhdCBfZ2V0X2NhcHMgZG9lc24ndCByZXR1cm4gYSB3cml0YWJsZQotCSAgY2FwcyBhbnltb3JlIGFuZCBhbiBleHBsaWNpdCBfbWFrZV93cml0YWJsZSgpIGlzIG5lZWRlZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZQotCSAgY2Fwcy4KLQotMjAxMC0xMi0wNyAxODoxMjo1MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIHBvcnRpbmc6IHVwZGF0ZSBwb3J0aW5nIGRvYwotCi0yMDEwLTEyLTA3IDE2OjUyOjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IENsZWFuIHVwIC5oIGZpbGUKLQotMjAxMC0xMi0wNyAxNTo1Mzo1NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDEwLTEyLTA3IDE1OjMzOjA0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0Y29tcGF0Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RlbGVtZW50ZGV0YWlscy5oOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RlbGVtZW50bWV0YWRhdGEuaDoKLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6Ci0JICBlbGVtZW50OiByZXdvcmsgR3N0RWxlbWVudERldGFpbHMKLQkgIENsZWFuIHVwIHRoZSBHc3RFbGVtZW50IHN0cnVjdHVyZQotCSAgUmVwbGFjZSBHc3RFbGVtZW50RGV0YWlscyB3aXRoIG1ldGFkYXRhCi0KLTIwMTAtMTItMDcgMTU6MzE6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKLQkgIHBsdWdpbjogcmVtb3ZlIGRlcHJlY2F0ZWQgbWV0aG9kcwotCSAgUmVtb3ZlIG1vcmUgZGVwcmVjYXRlZCBtZXRob2RzIGFuZCBmaXggdW5pdCB0ZXN0LgotCi0yMDEwLTEyLTA3IDE1OjIxOjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOgotCSAgY2hlY2s6IHJlbW92ZSBkZXByZWNhdGVkIHRlc3RzCi0KLTIwMTAtMTItMDcgMTU6MjA6MTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkgIGNoZWNrOiBmaXggb2JqZWN0IHVuaXQgdGVzdAotCi0yMDEwLTEyLTA3IDE1OjE5OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICBvYmplY3Q6IGZpeCBkb2NzCi0KLTIwMTAtMTItMDcgMTM6MTk6MTAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBsaWJzOiBBZGQgLUkkKHRvcF9zcmNkaXIpL2xpYnMgdG8gZy1pci1zY2FubmVyIGNvbW1hbmRzCi0JICBXaXRob3V0IHRoaXMsIGl0IHdpbGwgZmFpbCBmaW5kaW5nIGFsbCBoZWFkZXJzLgotCi0yMDEwLTEyLTA3IDEyOjU3OjQwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIHBsdWdpbjogcmVjb21tZW5kICItLWdzdC1kaXNhYmxlLXJlZ2lzdHJ5LWZvcmsiIGFzIHdlbGwKLQkgIERpc2FibGluZyBmb3JraW5nIGhlbHBzIHdpdGggZGVidWdnaW5nIHRoZSBjYXVzZSBvZiB0aGUgY3Jhc2ggaW4gZ2RiLgotCi0yMDEwLTEyLTA3IDEyOjU2OjQ0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcGx1Z2luZG9jcy50eHQ6Ci0JICBkb2NzOiBzb21lIG5vdGVzIGFib3V0IG91ciBwbHVnaW4gZG9jcyB3b3JrZmxvdwotCi0yMDEwLTEyLTA3IDExOjU4OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSAgb2JqZWN0OiBSZW1vdmVkIGRlcHJlY2F0ZWQgZmllbGRzIGFuZCBtZXRob2RzCi0JICBNYWtlIEdzdE9iamVjdCBleHRlbmQgZnJvbSBHSW5pdGlhbGx5VW5vd25lZCwgcmVtb3ZlIHRoZSBGTE9BVElORyBmbGFnIGFuZCB1c2UKLQkgIEdPYmplY3QgbWV0aG9kcyBmb3IgbWFuYWdpbmcgdGhlIGZsb2F0aW5nIHJlZi4KLQkgIFJlbW92ZSBjbGFzcyBsb2NrLCBpdCB3YXMgYSB3b3JrYXJvdW5kIGZvciBhIGdsaWIgPCAyLjggYnVnLgotCSAgUmVtb3ZlIHRoZSBwYXJlbnQtc2V0IGFuZCBwYXJlbnQtdW5zZXQgc2lnbmFscywgYXR0ZW1wdCB0byBpbXBsZW1lbnQgd2l0aCBub3RpZnkKLQkgIGJ1dCBkaXNhYmxlZCBiZWNhdXNlIGRlYWRsb2NrcyBpbiBkZWVwLW5vdGlmeS4KLQotMjAxMC0xMi0wNiAyMDowMzo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIHBvcnRpbmc6IG1lbnRpb24gcmVtb3ZhbCBvZiBwcm90b2NvbCBwcm9wZXJ0eQotCi0yMDEwLTEyLTA2IDE5OjQwOjAzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaDoKLQkgIGxpYnM6IHJlbW92ZSBkZXByZWNhdGVkIGNvZGUKLQotMjAxMC0xMi0wNiAxOToyNDozMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBwb3J0aW5nIGRvYwotCi0yMDEwLTEyLTA2IDE5OjE4OjMxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5oOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBnc3QvZ3N0eG1sLmM6Ci0JKiBnc3QvZ3N0eG1sLmg6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkgIHJlbW92ZSBkZXByZWNhdGVkIHN5bWJvbHMgYW5kIG1ldGhvZHMKLQotMjAxMC0xMi0wNiAxMzo1MTo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcG9ydGluZy10by0wLjExLnR4dDoKLQkgIHBvcnRpbmc6IEFkZCBwb3J0aW5nIGRvYwotCi0yMDEwLTEyLTA2IDEzOjQ4OjMxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wbGFuLTAuMTEudHh0OgotCSAgcGxhbjogZml4IHR5cG8KLQotMjAxMC0xMS0xMSAxMDozODo1NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcGxhbi0wLjExLnR4dDoKLQkgIHBsYW46IGFkZCBzb21ldGhpbmcgYWJvdXQgR1ZhcmlhbnQgcmVnaXN0cnkKLQotMjAxMC0xMS0wOCAxODozOTozOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vdXNlLWNhc2VzLTAuMTEudHh0OgotCSAgYWRkIHNvbWUgdXNlLWNhc2VzCi0KLTIwMTAtMTEtMDggMTQ6MDg6MzYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BsYW4tMC4xMS50eHQ6Ci0JICBtb3JlIHVwZGF0ZXMKLQotMjAxMC0xMS0wOCAxMjoxNDoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcGxhbi0wLjExLnR4dDoKLQkgIG1vcmUgdXBkYXRlcwotCi0yMDEwLTExLTA4IDExOjE4OjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9wbGFuLTAuMTEudHh0OgotCSAgbW9yZSB1cGRhdGVzCi0KLTIwMTAtMTEtMDQgMTk6MzA6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3BsYW4tMC4xMS50eHQ6Ci0JICB3b3JrIG9uIHRvZG8gbGlzdCBmb3IgMC4xMSB3b3JrCi0KLTIwMTAtMTItMDYgMTM6MjE6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGFuZHJvaWQvYmFzZS5tazoKLQkqIGFuZHJvaWQvY29udHJvbGxlci5tazoKLQkqIGFuZHJvaWQvZGF0YXByb3RvY29sLm1rOgotCSogYW5kcm9pZC9lbGVtZW50cy5tazoKLQkqIGFuZHJvaWQvZ3N0LWluc3BlY3QubWs6Ci0JKiBhbmRyb2lkL2dzdC1sYXVuY2gubWs6Ci0JKiBhbmRyb2lkL2dzdC1wbHVnaW4tc2Nhbm5lci5tazoKLQkqIGFuZHJvaWQvZ3N0Lm1rOgotCSogYW5kcm9pZC9pbmRleGVycy5tazoKLQkqIGFuZHJvaWQvbmV0Lm1rOgotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIHRvb2xzL2dzdC1mZWVkYmFjay1tLm06Ci0JKiB0b29scy9nc3RyZWFtZXItY29tcGxldGlvbjoKLQkgIG1vcmUgMC4xMCAtPiAwLjExCi0KLTIwMTAtMTItMDYgMTI6MDM6MjkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogb3BlbiAwLjExIGJyYW5jaAotCi0yMDEwLTEyLTA2IDExOjE4OjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9sbDogcmV0dXJuIHdha2V1cCBldmVudCBpbiBHUG9sbEZECi0KLTIwMTAtMTItMDYgMTE6MDc6MzggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGFkZCBzb21lIGRlYnVnIHRvIGZhc3QgcHVzaCBwYXRoCi0JICAuLi4gc28gd2UgZG9uJ3QgbG9vc2UgdHJhY2sgYXQgdGltZXMgaXQgaXMgbmVlZGVkIHRoZSBtb3N0LgotCi0yMDEwLTEyLTA1IDE1OjU4OjQ4ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogRG9uJ3QgZm9yZ2V0IHRvIHVucmVmIHRoZSBjYWNoZWQgQ2xvY2tJZAotCi0yMDEwLTEyLTA1IDE0OjQ2OjI4ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgZ3N0Y2hlY2s6IERvbid0IGNoZWNrIHBhZCByZWZjb3VudCB0b28gZWFybHkKLQkgIEJlY2F1c2Ugb2YgdGhlIG5ldyBwYWQgY2FjaGluZyBzeXN0ZW0sIHRoZSBwZWVyIHBhZCBtaWdodCBzdGlsbAotCSAgaGF2ZSBhIHJlZmVyZW5jZSBvbiBhIHBhZC4gV2UgdGhlcmVmb3JlIGRlbGF5IHRoZSByZWZjb3VudCBjaGVja2luZwotCSAgdGlsICdhZnRlcicgd2UgdW5saW5rIHRoZSBwYWQgZnJvbSBhbnkgcG90ZW50aWFsIHBlZXIuCi0KLTIwMTAtMTItMDUgMTQ6MTE6NDUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGdzdGJpbjogTWFrZSBlbGVtZW50IG5hbWVzIGNsZWFyZXIgaW4gZGVidWcgc3RhdGVtZW50cwotCSAgUmVwbGFjZXMgY29uZnVzaW5nIG1lc3NhZ2VzIGxpa2U6Ci0JICAiTmFtZSBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gYmluIGJpbiwgbm90IGFkZGluZyIKLQkgIGJ5Ci0JICAiTmFtZSAnbmFtZScgaXMgbm90IHVuaXF1ZSBpbiBiaW4gJ2JpbicsIG5vdCBhZGRpbmciCi0KLTIwMTAtMTItMDQgMjE6MDY6MzQgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5OiBGaXggcGVybWlzc2lvbnMgaWYgdW1hc2sgaXMgYnJva2VuCi0JICBGaXhlczogIzU2NDA1Ni4KLQotMjAxMC0xMi0wNCAxNDoyMzo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhZnRlciBiYWNrc2xhc2ggaW4gTWFrZWZpbGUuYW0KLQotMjAxMC0xMi0wNCAxMzoxNDozOSArMDAwMCAgS29vcCBNYXN0IDxrd21ARnJlZUJTRC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogZml4IHRlc3Qgc28gaXQgd29ya3Mgd2l0aCBGcmVlQlNEJ3MgL2Jpbi9zaAotCSAgVXNlICc9JyBpbnN0ZWFkIG9mICc9PScuIEZpeGVzOgotCSAgY29uZmlndXJlOiB3b3JraW5nIGMrKyBjb21waWxlciBmb3VuZDogeWVzCi0JICB0ZXN0OiB4eWVzOiB1bmV4cGVjdGVkIG9wZXJhdG9yCi0JICBodHRwOi8vYnVnemlsbGEtYXR0YWNobWVudHMuZ25vbWUub3JnL2F0dGFjaG1lbnQuY2dpP2lkPTE3NTY5MgotCi0yMDEwLTEyLTAzIDExOjI5OjMwIC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgVXNlIGdfc25wcmludGYoKSBpbnN0ZWFkIG9mIHNucHJpbnRmKCkKLQotMjAxMC0xMi0wMyAxNjo0NDoyMyArMDEwMCAgQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQHN0ZXJpY3Nzb24uY29tPgotCi0JKiBBbmRyb2lkLm1rOgotCSogYW5kcm9pZC9OT1RJQ0U6Ci0JKiBhbmRyb2lkL2Jhc2UubWs6Ci0JKiBhbmRyb2lkL2NvbnRyb2xsZXIubWs6Ci0JKiBhbmRyb2lkL2RhdGFwcm90b2NvbC5tazoKLQkqIGFuZHJvaWQvZWxlbWVudHMubWs6Ci0JKiBhbmRyb2lkL2dzdC1pbnNwZWN0Lm1rOgotCSogYW5kcm9pZC9nc3QtbGF1bmNoLm1rOgotCSogYW5kcm9pZC9nc3QtcGx1Z2luLXNjYW5uZXIubWs6Ci0JKiBhbmRyb2lkL2dzdC5tazoKLQkqIGFuZHJvaWQvZ3N0L2dzdGNvbmZpZy5oOgotCSogYW5kcm9pZC9nc3QvZ3N0ZW51bXR5cGVzLmM6Ci0JKiBhbmRyb2lkL2dzdC9nc3RlbnVtdHlwZXMuaDoKLQkqIGFuZHJvaWQvZ3N0L2dzdG1hcnNoYWwuYzoKLQkqIGFuZHJvaWQvZ3N0L2dzdG1hcnNoYWwuaDoKLQkqIGFuZHJvaWQvZ3N0L2dzdHZlcnNpb24uaDoKLQkqIGFuZHJvaWQvZ3N0L3BhcnNlL2dyYW1tYXIub3V0cHV0OgotCSogYW5kcm9pZC9nc3QvcGFyc2UvZ3JhbW1hci50YWIuYzoKLQkqIGFuZHJvaWQvZ3N0L3BhcnNlL2dyYW1tYXIudGFiLmg6Ci0JKiBhbmRyb2lkL2dzdC9wYXJzZS9sZXguX2dzdF9wYXJzZV95eS5jOgotCSogYW5kcm9pZC9pbmRleGVycy5tazoKLQkqIGFuZHJvaWQvbmV0Lm1rOgotCSogYW5kcm9pZC90b29scy5tazoKLQkgIEFkZCBidWlsZCBzeXN0ZW0gZm9yIEFuZHJvaWQKLQotMjAxMC0xMi0wMyAxNjowMjowOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JICBjbG9jazogaW5pdCB2YXJpYWJsZXMgaW4gX3JlaW5pdCgpCi0JICBQcm9wZXJseSBpbml0aWFsaXplIHZhcmlhYmxlcyBpbiBfcmVpbml0KCkgdG9vCi0KLTIwMTAtMTAtMjEgMTg6MDg6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIGNsb2NrOiBtYWtlIHN5bmMgY2xvY2sgd2FpdCBsb2NrZnJlZQotCSAgTWFrZSB0aGUgY29tbW9uIGNhc2UgbG9ja2ZyZWUuCi0KLTIwMTAtMTItMDMgMTI6MDQ6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIGJpbmFyeXJlZ2lzdHJ5OiB1c2UgZnVuY3Rpb24gaW50cm9kdWNlZCBpbiBHTGliIDIuMjIgdW5jb25kaXRpb25hbGx5Ci0KLTIwMTAtMTItMDMgMTI6NDI6MTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBwb2xsOiBzbWFsbCBjbGVhbnVwcwotCi0yMDEwLTExLTAzIDE4OjM4OjExICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9sbDogbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGUgcmVhZGZkIG1lc3NhZ2VzCi0KLTIwMTAtMTEtMDMgMTg6MTY6MDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cG9sbC5jOgotCSogZ3N0L2dzdHBvbGwuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcG9sbDogYWRkIG1ldGhvZCB0byBnZXQgYSBHUG9sbEZECi0KLTIwMTAtMTEtMDMgMTc6NTY6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBwb2xsOiBSZWZhY3RvciBhbmQgbWFrZSBtb3JlIGxvY2tmcmVlCi0JICBSZWZhY3RvciB0aGUgd2FrZXVwIG9mIHRoZSBwb2xsIHRocmVhZC4KLQkgIEFsd2F5cyBtYWtlIGEgY29udHJvbCBzb2NrZXQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyLgotCSAgTWFrZSBtb3JlIG1ldGhvZHMgbG9ja2ZyZWUuCi0KLTIwMTAtMTAtMjEgMDI6MDI6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBwb2xsOiBtb3ZlIGxvY2sgdG8gd2hlcmUgaXQgbWFrZXMgbW9yZSBzZW5zZQotCi0yMDEwLTEwLTIxIDAxOjE1OjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgcG9sbDogbWFrZSB0aW1lciBwb2xscyBsb2NrZnJlZQotCSAgTWFrZSBzdXJlIHdlIGRvbid0IHRha2UgYSBtdXRleCBpbiB0aGUgbm9ybWFsIGNvZGUgcGF0aCBvZiB0aGUgdGltZXIKLQkgIHBvbGwuCi0KLTIwMTAtMTItMDIgMTc6NTE6NTggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IHJldHVybiB1cG9uIGlucHV0IHdoZW4gYWxyZWFkeSBlb3MKLQkgIC4uLiByYXRoZXIgdGhhbiBoYW5naW5nIGluY29taW5nIHRocmVhZCAoYXMgY29uc2lkZXJlZCBmdWxsIGluIGVvcykuCi0KLTIwMTAtMTItMDIgMTc6NDk6MDQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogZml4IGRvYyB0eXBvCi0KLTIwMTAtMTAtMTYgMTY6MTY6MTcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IHJlbW92ZSBzb21lIGNvbW1lbnRlZCBjb2RlCi0KLTIwMTAtMTItMDMgMTM6NTI6MDMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgZ3N0b2JqZWN0OiBhZGQgc3RkaW8uaCBmb3Igc25wcmludAotCi0yMDEwLTEyLTAzIDExOjI3OjE3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIHBpcGVsaW5lOiBVc2UgYW4gb2JqZWN0IGFzIGZpcnN0IGFyZ3VtZW50IHRvIEdTVF9XQVJOSU5HX09CSkVDVAotCi0yMDA5LTA0LTExIDE1OjA0OjQxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIG1pY3JvLW9wdGltOiBpZiAoeCkgaXMgY2hlYXBlciB0aGFuIGlmICh4ID4gMCkgZm9yIHVuc2lnbmVkIGludGVnZXJzCi0KLTIwMDktMDQtMTAgMDk6MDE6MjIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgZ3N0cXVlcnk6IFVzZSBzdHJ1Y3R1cmUgcHJvcGVydHkgZGlyZWN0bHksIGF2b2lkIGZ1bmN0aW9uIHZhcmlhYmxlLgotCSAgQWxsIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgY2FuIGFjY2VzcyB0aGUgc3RydWN0dXJlIGZpZWxkIG9mIGEgcXVlcnkgZGlyZWN0bHkuCi0JICBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gY2FsbCBnc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZSgpIHRvIGdldCBpdCwgYWxvbmcgd2l0aCBiZWluZwotCSAgYWJsZSB0byByZW1vdmUgc29tZSBmdW5jdGlvbiB2YXJpYWJsZXMgdGhhdCB3ZXJlIHVzZWQgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGF0Ci0JICBmdW5jdGlvbi4KLQotMjAwOS0wNC0xMCAwODo1MTowMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGdzdGluZm86IHJlbW92ZSB1c2VsZXNzIHRlcm5hcnkgb3BlcmF0b3IgdXNhZ2UuCi0KLTIwMTAtMDktMTQgMTM6MDg6NTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZ3N0ZXZlbnQ6IFVzZSBzdHJ1Y3R1cmUgcHJvcGVydHkgZGlyZWN0bHksIGF2b2lkIGZ1bmN0aW9uIHZhcmlhYmxlLgotCSAgQWxsIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgY2FuIGFjY2VzcyB0aGUgc3RydWN0dXJlIGZpZWxkIG9mIGFuIGV2ZW50IGRpcmVjdGx5LgotCSAgVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGNhbGwgZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUoKSB0byBnZXQgaXQsIGFsb25nIHdpdGggYmVpbmcKLQkgIGFibGUgdG8gcmVtb3ZlIHNvbWUgZnVuY3Rpb24gdmFyaWFibGVzIHRoYXQgd2VyZSB1c2VkIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgdGhhdAotCSAgZnVuY3Rpb24uCi0KLTIwMTAtMTItMDMgMTE6MTk6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkIHB1c2ggY2FjaGUgdG8gYnVmZmVybGlzdHMKLQkgIEFkZCB0aGUgcHVzaCBjYWhjZSBmb3IgdGhlIGJ1ZmZlcmxpc3QgcHVzaCBjb2RlIHBhdGggYXMgd2VsbC4KLQotMjAxMC0xMi0wMyAxMToxMToyNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBkb24ndCBjYWNoZSB0aGUgcGVlciBjaGFpbmZ1bmMKLQkgIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2FjaGUgdGhlIHBlZXIgY2hhaW5mdW5jdGlvbiBhcyB3ZSBjYW4ganVzdCBhcyBlZmZpY2llbnRseQotCSAgZ2V0IHRvIGl0IGZyb20gdGhlIHBlZXIgb2JqZWN0LiBBbHNvIG5vdCBjYWNoaW5nIHRoZSBjaGFpbiBmdW5jdGlvbiB3b3JrcyBiZXR0ZXIKLQkgIGJlY2F1c2UgdGhlbiB3ZSBhdXRvbWF0aWNhbGx5IGdldCB0aGUgbmV3IGNoYWluZnVuY3Rpb25zIHdoZW4gdGhleSBjaGFuZ2UuCi0KLTIwMTAtMTItMDMgMTA6NTI6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBwYWQ6IGNsZWFyIHBhZCBjYWNoZSB3aGVuIGluc3RhbGxpbmcgcHJvYmVzCi0JICBNb3ZlIHRoZSBtZXRob2QgdG8gY2xlYXIgdGhlIHBhZCBjYWNoZSBpbnRvIF9wcml2YXRlLmgKLQkgIENsZWFyIHRoZSBwYWQgY2FjaGUgd2hlbiBpbnN0YWxsaW5nIHBhZCBwcm9iZXMuCi0KLTIwMTAtMTAtMjAgMTc6MTE6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZXhwbGljaXRseSBpbmxpbmUgc29tZSBmdW5jdGlvbnMKLQotMjAxMC0xMC0xMyAwMjo0ODo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiByZW1vdmUgdW51c2VkIHZhcmlhYmxlCi0KLTIwMTAtMTAtMTMgMDI6NDI6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogaW52YWxpZGF0ZSBjYWNoZXMgb24gZmx1c2ggYW5kIHBhZCBibG9jawotCi0yMDEwLTEwLTEzIDAyOjIwOjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGRvbid0IHVucmVmIE5VTEwgY2FwcwotCi0yMDEwLTEwLTEzIDAyOjE3OjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGFkZCBpbnZhbGlkYXRlIGZ1bmN0aW9uCi0JICBNb3JlIHNtYWxsIG9wdGltaXNhdGlvbnMsIHJlbW92ZSB0aGUgdW5uZWVkZWQgdmFsaWQgYm9vbGVhbi4KLQkgIEFkZCBmdW5jdGlvbiB0byBpbnZhbGlkZSB0aGUgY2FjaGUuCi0JICBJbnZhbGlkYXRlIHRoZSBjYWNoZSBvbiB1bmxpbmsuCi0KLTIwMTAtMTAtMTMgMDE6Mzc6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogc21hbGwgY2xlYW51cAotCi0yMDEwLTEwLTEzIDAxOjI1OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGltcHJvdmUgcGFkIHB1c2ggY2FjaGluZwotCSAgQnVpbGQgdGhlIGNhY2hlIHdoaWxlIHdlIHB1c2ggZGF0YS4gV2hlbiB3ZSBkb24ndCBoYXZlIGEgY2FjaGUsIHdlIHJ1biB0aGUKLQkgIHNsb3dwYXRoIGFuZCBjb2xsZWN0IGNhY2hlYWJsZSBwcm9wZXJ0aWVzLiBXaGVuIGFsbCBjb25kaXRpb25zIGFyZSBtZXQsIGtlZXAgdGhlCi0JICBjYWNoZWQgZGF0YSBhcm91bmQgc28gdGhhdCB3ZSBjYW4gbW9yZSBlZmZpY2llbnRseSBwdXNoIGRhdGEgYXJvdW5kLgotCi0yMDEwLTEwLTEyIDEyOjI5OjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHByb3RvdHlwZSBvZiBwYWQgcHVzaCBjYWNoZQotCSAgUHJvdG90eXBlIG9mIGhvdyB3ZSBjYW4gY2FjaGUgdGhlIHBlZXIgYW5kIGNhcHMgZm9yIGEgcGFkIGxpbmsuCi0KLTIwMTAtMTItMDMgMTI6MjM6MjcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL2V4dHJhY3QucGw6Ci0JICBkb2NzOiBmaXggcHJldmlvdXMgZXh0cmFjdC5wbCBjb21taXQKLQkgIE1ha2UgaXQgYWxzbyB3b3JrIGluIHRoZSBzcmNkaXI9YnVpbGRkaXIgY2FzZSBhZ2Fpbi4KLQotMjAxMC0xMC0yMCAxMTo1ODowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IGF2b2lkIHRhc2sgbG9jayBmb3IgZWFjaCBpdGVyYXRpb24KLQkgIE1ha2UgdGhlIHRhc2sgc3RhdGUgYW4gYXRvbWljIHZhcmlhYmxlIHNvIHRoYXQgd2UgY2FuIGF2b2lkIHRha2luZyBhbmQgcmVsZWFzaW5nCi0JICB0aGUgdGFzayBsb2NrIGZvciBlYWNoIGl0ZXJhdGlvbi4KLQotMjAxMC0xMi0wMyAxMDoxODoxOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvZXh0cmFjdC5wbDoKLQkgIGRvY3M6IGZpeCBleGFtcGxlIG1hdGNoaW5nIGluIGV4dHJhY3QucGwKLQkgIFdoZW4gYnVpbGRpbmcgd2l0aCAkc3JjZGlyICE9ICRidWlsZGRpciBvdXRwdXQgd291bGQgY29udGFpbiB0aGUgYnVpbGRkaXIgcGF0aC4KLQkgIFN0cmlwIHRoZSBwYXRoIHdoZW4gc2Nhbm5pbmcgdGhlIHhtbCBmb3IgdGhlIGV4YW1wbGUgbWFya2Vycy4KLQotMjAxMC0xMS0xOSAxNTowNjowNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBkb2NzOiBxdWVyeSBkb2MgaW1wcm92ZW1lbnRzCi0JICBNb3JlIHhyZWZzLiBNZW50aW9uZWQgdGhhdCBzb21lIHF1ZXJpZXMgbmVlZCBhIHJ1bm5pbmcgcGlwZWxpbmUuCi0KLTIwMTAtMTEtMTkgMTE6NDM6NDAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JICBlbGVtZW50ZmFjdG9yeTogY2xhcmlmeSBsaXN0IGl0ZW0gdHlwZXMgaW4gY29tbWVudHMKLQotMjAxMC0xMS0xOSAxMDoyOTozNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgotCSAgcGFkdGVtcGxhdGU6IGFkZCB0d28gRklYTUUwLjExOiBjb21tZW50cwotCi0yMDEwLTExLTE5IDEwOjIzOjU0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSAgcGFkdGVtcGxhdGU6IGFsbG93IGRpc2FibGluYmcgdGhlIHRlbXBsYXRlIG5hbWUgY29uZm9ybWFuY2UgY2hlY2tzCi0KLTIwMTAtMTEtMTggMTY6MzE6MzAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JICBwYWR0ZW1wbGF0ZTogdGhlIHN1cHBsaWVkIGNhcHMgbWF5IG5vdCBiZSBOVUxMCi0JICBUaGVyZSBpcyBhIGVhcmxpZXIgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgY2hlY2suIEFsc28KLQkgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCBkb2VzIG5vdCBoYXZlIHN1Y2ggYSBjaGVjay4KLQotMjAxMC0xMS0wMyAxNjozNzoxMCArMDEwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVtb3Rpb24uY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JICBmYWtlc2luazogUHJpbnQgc2luay1tZXNzYWdlIGV2ZW50cyBsaWtlIGEgbWVzc2FnZSBhbmQgdGhlIEdzdE1lc3NhZ2Ugc3RydWN0dXJlCi0KLTIwMTAtMTEtMDEgMTU6MzI6NDMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1idWZmZXIyLnR4dDoKLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKLQkqIGRvY3MvZGVzaWduL2RyYWZ0LW1ldGFkYXRhLnR4dDoKLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1hY3RpdmF0aW9uLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJsaXN0LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtY29udmVudGlvbnMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1keW5hbWljLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zb3VyY2UudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWZyYW1lc3RlcC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJ1cy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGVsZW1lbnQudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdG9iamVjdC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbGF0ZW5jeS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWxpdmUtc291cmNlLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1taXNzaW5nLXBsdWdpbnMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXB1c2gtcHVsbC50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXF1ZXJ5LnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtcmVsYXRpb25zLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXNwYXJzZXN0cmVhbXMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zdGFuZGFyZHMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zdHJlYW0tc3RhdHVzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0OgotCSAgZGVzaWduLWRvY3M6IGFkZCBodG1sIG91dHB1dCB1c2luZyBhc2NpaWRvYwotCSAgVW5pZnkgdGhlIGFkLWhvYyBtYXJrdXAgdG8gYmUgYXNjaWlkb2Mgc3R5bGUgaW4gbWFueSBwbGFjZXMuIEFkZCBhICJodG1sIiB0YXJnZXQKLQkgIHRvIE1ha2VmaWxlIHRvIGdlbmVyYXRlIHRoZSBvdXRwdXQuCi0KLTIwMTAtMTAtMTkgMTQ6Mjc6MjAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgZ3N0b2JqZWN0OiBtb3JlIGRlZmF1bHQgbmFtZSBnZW5lcmF0aW9uIG1vcmUgZWZmaWNpZW50Ci0JICBTYXZlIH4yMDAwIG1hbGxvYy9tZW1jcHkvZnJlZSBwYWlycyBhdCBzdGFydHVwIGJ5IHJ1bm5pbmcgdG9fbG93ZXIgaW4tcGxhY2UuCi0JICBBbHNvIHNraXAgdGhlIG51bWJlcnMgYXMgd2UgY2FuLgotCi0yMDEwLTEwLTE4IDE0OjQ1OjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JICBwbHVnaW5mZWF0dXJlOiB1c2UgdGhlIHBhcmVudF9jbGFzcyBmcm9tIEdfREVGSU5FX1RZUEUgbWFjcm8gYW5kIGRyb3AgZXh0cmEgY29weQotCi0yMDEwLTEwLTIwIDE0OjI3OjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgZWxlbWVudGZhY3Rvcnk6IHVzZSBnX2ludGVybl9zdHJpbmcgZm9yIGludGVyZmFjZSBuYW1lcwotCi0yMDEwLTEwLTE4IDEzOjI5OjUzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeTogYWxzbyBpbnRlcm4gdGhlIHN0YXRpYyBjYXBzCi0KLTIwMTAtMTItMDMgMDA6MDA6MDkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBlbGVtZW50ZmFjdG9yeTogbWV0YS1kYXRhIGNhbiBiZSBOVUxMCi0KLTIwMTAtMTItMDIgMTY6Mjg6NDMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RkYXRldGltZS5jOgotCSAgZ3N0ZGF0ZXRpbWU6IEZpeCBoYW5kbGluZyBvZiB0aW1lem9uZXMKLQkgIEZpeCByZXR1cm5pbmcgb2YgdGltZXpvbmVzIG9uIHN5c3RlbXMgd2l0aCBnZGF0ZXRpbWUKLQkgIHRvIHVzZSBmbG9hdHMgb24gdGhlIG1hdGggZXhwcmVzc2lvbiB0byBhdm9pZAotCSAgdHJ1bmNhdGluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0LgotCSAgQWxzbyBhZGRzIGEgdGVzdCBmb3IgY292ZXJpbmcgdGhpcyBjYXNlLgotCi0yMDEwLTEyLTAyIDE5OjQ0OjQxICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkgIGdzdGRhdGFxdWV1ZTogRG9uJ3QgYnJlYWsgQUJJCi0JICBUaGUgb3JkZXIgb2YgdGhlIGZpZWxkIHdhcyB3cm9uZywgYW5kIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgZGlkbid0Ci0JICBlbmQgdXAgYmVpbmcgdGhlIHNhbWUuCi0KLTIwMTAtMTEtMjUgMTg6NDg6MDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JICBiYXNlc2luazogcmV3b3JrIHBvc2l0aW9uIHJlcG9ydGluZyBjb2RlCi0JICBVbmlmeSB0aGUgZGlmZmVyZW50IHBvc2l0aW9uIHJlcG9ydGluZyBjb2RlIHBhdGhzIHRvIG1ha2UgaXQgbW9yZQotCSAgdW5kZXJzdGFuZGFibGUuCi0JICBVc2Ugc3RhcnRfdGltZSB0byBnZXQgbW9yZSBhY2N1cmF0ZSBwb3NpdGlvbiByZXBvcnRpbmcgaW4gcGF1c2VkLgotCSAgRml4IHVuaXQgdGVzdHMgZm9yIG1vcmUgYWNjdXJhdGUgcmVwb3J0aW5nLgotCi0yMDEwLTExLTI1IDE2OjA2OjA3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogcGVyZm9ybSB3YWl0X3ByZXJvbGwgaW4gYSB3aGlsZSBsb29wCi0JICBXZSBuZWVkIHRvIGNvbnRpbnVlIGNhbGxpbmcgd2FpdF9wcmVyb2xsKCkgYXMgbG9uZyBhcyB0aGUgbmVlZF9wcmVyb2xsIHZhcmlhYmxlCi0JICBpcyB0cnVlLgotCi0yMDEwLTExLTE3IDE2OjQ2OjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiByZXR1cm4gaW1tZWRpYXRlbHkgZm9yIC0xIGNvbnZlcnNpb24KLQkgIFdoZW4gd2UgYXJlIGFza2VkIHRvIGNvbnZlcnQgLTEsIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aCBhIC0xIHJldHVybgotCSAgdmFsdWUuCi0KLTIwMTAtMTEtMTcgMTY6NDI6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IGEgY29udmVydCBxdWVyeSBjYW4gaGF2ZSBhIC0xIGlucHV0IHZhbHVlCi0JICBJdCBpcyBhbGxvd2VkIHRvIHBhc3MgLTEgdG8gdGhlIHNyY192YWwgZm9yIGEgY29udmVydC4KLQotMjAxMC0xMS0xNiAxMjoyMDozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgotCSAgYmFzZXNpbms6IGFsc28gcHJlcm9sbCBhZnRlciBhIGZsdXNoIHdpdGggYXN5bmM9ZmFsc2UKLQkgIE1ha2Ugc3VyZSB0byBwcmVyb2xsIGFmdGVyIGEgZmx1c2ggZXZlbiB3aGVuIHdlIGFyZSBhc3luYz1mYWxzZS4KLQkgIEFkZCB1bml0IHRlc3QuCi0JICBGaXhlcyAjNjM0OTY1Ci0KLTIwMTAtMTEtMTUgMTg6MjA6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogaW1wcm92ZSBkb2NzIGEgbGl0dGxlLgotCi0yMDEwLTExLTE1IDE4OjE3OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JICBjaGVjazogbG9jayBzcmMgc3RhdGUgdG8gYXZvaWQgZXJyb3IgY2FzZXMKLQkgIExvY2sgdGhlIHN0YXRlIG9mIHRoZSBzcmMgZWxlbWVudCBvciBlbHNlIHRoZSBwaXBlbGluZSBtaWdodCBnbyBpbnRvIHRoZSBlcnJvcgotCSAgc3RhdGUgd2hlbiB3ZSBzZXQgaXQgdG8gUEFVU0VEIGxhdGVyLgotCi0yMDEwLTExLTE1IDEyOjQ5OjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIHBpcGVsaW5lOiBhdm9pZCB1c2luZyBpbnZhbGlkIGNsb2NrIHRpbWVzCi0JICBCZSBleHRyYSBjYXJlZnVsIHRvIG5vdCB1c2UgaW52YWxpZCBjbG9jayB0aW1lcyBidXQgZ2l2ZSBhIHdhcm5pbmcgaW5zdGVhZC4gVGhpcwotCSAgc2hvdWxkIG1ha2UgdGhpbmdzIHdvcmsgYmV0dGVyIHdpdGggZmF1bHR5IGNsb2NrIGltcGxlbWVudGF0aW9ucy4KLQotMjAxMC0xMS0xMSAxMDo0MToxOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGltcHJvdmUgc29tZSBjb21tZW50cyBhYm91dCB0aGUgemlnemFnIGludGVyc2VjdGlvbgotCi0yMDEwLTEyLTAyIDEzOjA0OjMwICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogQWRkIHVudXNlZCBzeW1ib2xzIHRvIHByb3BlciBzZWN0aW9ucwotCi0yMDEwLTEyLTAyIDEzOjAzOjU3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IEFkZCBHc3REYXRlVGltZSBzZWN0aW9uIGFuZCB1cGRhdGUgaXQgZm9yIGxhdGVzdCBzeW1ib2xzCi0KLTIwMTAtMTAtMTkgMTg6MDk6NTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IE9ubHkgY2FsbCB1cGRhdGVfYnVmZmVyaW5nIGlmIG5lZWRlZC4KLQkgIHVwZGF0ZV9idWZmZXJpbmcgaXMgc28gYmlnIGl0IHdpbGwgbmV2ZXIgYmUgaW5saW5lZCAoYW5kIHNob3VsZG4ndCksCi0JICB3ZSB0aGVyZWZvcmUgbW92ZSB0aGUgY2hlY2sgb3V0c2lkZSBvZiBpdC4KLQotMjAxMC0xMC0xOSAxNzo0NToxNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogQXZvaWQgcmUtY2hlY2tpbmcgbWFueSB0aW1lcyB3aGV0aGVyIGFuIGl0ZW0gaXMgYSBidWZmZXIKLQkgIEF2b2lkcyBjYWxsaW5nIDYgdGltZXMgZ3N0X2J1ZmZlcl9nZXRfdHlwZSgpIGZvciBldmVyeSBpdGVtIGNvbWluZwotCSAgdGhyb3VnaCBxdWV1ZTIKLQotMjAxMC0xMC0xOSAxNzo0Mzo1NiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogUmVkdWNlIGFtb3VudCBvZiB0aW1lIGxvY2tzIGFyZSB0YWtlbgotCi0yMDEwLTEwLTE5IDE3OjQyOjM5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBGaXh1cCBkb2N1bWVudGF0aW9uIG9mIHNvbWUgcHJvcGVydGllcwotCi0yMDEwLTEwLTE5IDE3OjQwOjEzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKLQkgIHF1ZXVlMjogQXZvaWQgdXNlbGVzcyBzZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpIGNhbGN1bGF0aW9ucy4KLQkgICogQ2FjaGUgc3JjIGFuZCBzaW5rIHRpbWUKLQkgICogVXNlIGEgYm9vbGVhbiB0byBrbm93biB3aGV0aGVyIHNyYy9zaW5rIHRpbWUgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkCi0JICBBdm9pZHMgNTAlIG9mIGNhbGxzIHRvIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpCi0KLTIwMTAtMTAtMjAgMTc6NDE6MjggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBSZS11c2luZyBHc3RDbG9ja0lEIGluc3RlYWQgb2YgY29uc3RhbnRseSByZWNyZWF0aW5nIG9uZQotCSAgTWFrZXMgX3Npbmtfd2FpdF9jbG9jayBhdCBsZWFzdCAyIHRpbWVzIGZhc3Rlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI3NzgKLQotMjAxMC0xMC0yMCAxNzo0MDo0MyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdGNsb2NrOiBOZXcgQVBJIHRvIHJlLXVzZSBhIHNpbmdsZSBzaG90IEdzdENsb2NrSUQKLQkgIEFQSTogZ3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMjc3OAotCi0yMDEwLTEwLTIwIDEzOjUyOjAyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogUGFzcyBhbG9uZyBtaW5pb2JqZWN0IHR5cGUgdGhyb3VnaCB2YXJpb3VzIGZ1bmN0aW9ucwotCSAgQXZvaWRzIGRvaW5nIHVzZWxlc3MgR1NUX0lTXyoKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI3NzgKLQotMjAxMC0xMC0yMCAxMzowODowOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IFN3aXRjaCBlbmFibGVfbGFzdF9idWZmZXIgdG8gYW4gYXRvbWljIGludAotCSAgQXZvaWRzIGhhdmluZyB0byB0YWtlIGEgbG9jayB0byByZWFkL3dyaXRlIGl0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMjc3OAotCi0yMDEwLTEwLTE5IDE1OjUzOjI2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogUmVtb3ZlIHVzZWxlc3MgY2hlY2tzIGZyb20gZTQwNmY3Ci0JICBzcmNyZXN1bHQgd2FzIGJlaW5nIHJlY2hlY2tlZCBpbiBwbGFjZXMgaXQgY291bGRuJ3QgaGF2ZSBjaGFuZ2VkLgotCSAgcXVldWUgbGV2ZWwgd2FzIGJlaW5nIHJlY2hlY2tlZCBpbiBwbGFjZXMgaXQgY291bGRuJ3QgaGF2ZSBjaGFuZ2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMjc4MAotCi0yMDEwLTEwLTEzIDEzOjUwOjIyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkgIGdzdGRhdGFxdWV1ZTogT25seSBlbWl0IGdfY29uZF9zaWduYWwgd2hlbiBuZWVkZWQKLQkgIEtlZXAgdHJhY2sgb2Ygd2hpY2ggY29uZCB3ZSdyZSB3YWl0aW5nIGZvciBhbmQgb25seSBlbWl0IHdoZW4gbmVlZGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMjc3OQotCi0yMDEwLTEwLTIwIDE3OjEyOjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgc2VnbWVudDogbW92ZSBnX3JldHVybl9pZl9mYWlsIHRvIHdoZXJlIGl0IGlzIG5lZWRlZAotCi0yMDEwLTExLTAzIDExOjE0OjAzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZlcnNpb24uaC5pbjoKLQkgIHZlcnNpb246IFRha2UgbmFubyB2ZXJzaW9uIGludG8gYWNjb3VudCBpbiBHU1RfQ0hFQ0tfVkVSU0lPTigpCi0JICBJZiB0aGUgbmFubyBpcyA+IDAgdGhlIGN1cnJlbnQgdmVyc2lvbiBzaG91bGQgYmUgaGFuZGxlZCB0aGUgc2FtZSBhcwotCSAgbWljcm8gKyAxLgotCi0yMDEwLTExLTAxIDE2OjM0OjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBTZXQgdGhlIGV2ZW50IHNvdXJjZSBvYmplY3QgaWYgbm9uZSBpcyBzZXQgeWV0IGluIGdzdF9wYWRfcHVzaF9ldmVudCgpCi0JICBPdGhlcndpc2UgdGhlIHNvdXJjZSB3aWxsIHN0YXkgYXQgTlVMTCwgdGhlIGV2ZW50IGlzIHBhc3NlZCB0byB0aGUKLQkgIHBlZXJwYWQgdmlhIGdzdF9wYWRfc2VuZF9ldmVudCgpIGFuZCB0aGVuIHRoZSBwZWVycGFkIGlzIHNldCBhcwotCSAgc291cmNlIG9mIHRoZSBldmVudCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hdGluZyBwYWQuCi0KLTIwMTAtMTAtMzEgMTg6NDg6MTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50IGFuZCB1bnVzZWQgdmFyaWFibGUKLQotMjAxMC0xMC0zMSAxODo0Njo0MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnQgYW5kIG1vdmUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW50byBpbm5lciBibG9jawotCi0yMDEwLTEwLTMxIDE4OjIzOjAwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IFJlbW92ZSByZWR1bmRhbnQgdmFyaWFibGUKLQkgIE90aGVyIHRoYW4gc2F2aW5nIGFuIGltbWVuc2UgYW1vdW50IG9mIDQgYnl0ZXMgb2YgbWVtb3J5IHRoaXMKLQkgIHByZXZlbnRzIGNsYW5nIGZyb20gY29tcGxhaW5pbmcgYW5kIGtlZXBzIHRoZSByaW5nIGJ1ZmZlciBzdGF0ZQotCSAgaW4gYSBzaW5nbGUgdmFyaWFibGUgaW5zdGVhZCBvZiB0d28uCi0KLTIwMTAtMTAtMjAgMTA6MTg6MTggKzAyMDAgIERhdmlkIEhveXQgPGRob3l0QGxsbmwuZ292PgotCi0JKiBnc3QvZ3N0dGFzay5jOgotCSAgZ3N0dGFzazogU2V0IHRocmVhZCBuYW1lcyBvbiBXaW5kb3dzIHdpdGggTVNWQyBpZiBhIGRlYnVnZ2VyIGlzIGF0dGFjaGVkCi0JICBGaXhlcyBidWcgIzYzMjE2OC4KLQotMjAxMC0xMC0xOSAxNTo1MjozMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtYWNyb3MuaDoKLQkgIG1hY3JvczogRGVmaW5lIHJlc3RyaWN0IGtleXdvcmQgaWYgbm90IGF2YWlsYWJsZQotCSAgVGhpcyBjaGFuZ2UgYWx3YXlzIGRlZmluZXMgdGhlIHJlc3RyaWN0IGtleXdvcmQgaWYgYQotCSAgbm9uLUM5OSBDIGNvbXBpbGVyIGlzIHVzZWQuIEluIHRoZSBjYXNlIG9mIEdDQyA+PSA0Ci0JICBpdCB3aWxsIGJlIGRlZmluZWQgdG8gX19yZXN0cmljdF9fLCBpbiBhbGwgb3RoZXIKLQkgIGNhc2VzIHRvIG5vdGhpbmcuIFRoaXMgYWxsb3dzIHRvIHVzZSB0aGUgcmVzdHJpY3QKLQkgIGtleXdvcmQgdW5jb25kaXRpb25hbGx5LgotCi0yMDEwLTEyLTAxIDIzOjU3OjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQnVtcCBHTGliIHJlcXVpcmVtZW50IHRvID49IDIuMjIKLQkgIFNlZSBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93aWtpL1JlbGVhc2VQbGFubmluZy9HTGliUmVxdWlyZW1lbnQKLQotMjAxMC0xMi0wMSAyMzo1Njo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjEwLjMxID09PQotCi0yMDEwLTExLTMwIDE3OjQwOjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgUmVsZWFzZSAwLjEwLjMxCi0KLTIwMTAtMTEtMjcgMTk6MTM6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIHV0aWxzOiBhdm9pZCAndW51c2VkIGFyZ3VtZW50JyB3YXJuaW5ncyBjYXVzZWQgYnkgR1NUX0JPSUxFUlBMQVRFX0ZVTEwKLQkgIFRoZSB1bnVzZWQgZGF0YSBwYXJhbWV0ZXIgaW4gdGhlIGNsYXNzX2luaXQgdHJhbXBvbGluZSBmdW5jdGlvbgotCSAgc2VlbXMgdG8gY2F1c2Ugd2FybmluZ3Mgd2l0aCBzb21lIGMrKyBjb21waWxlcnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1ODY5Ci0KLTIwMTAtMTEtMDkgMjM6Mjc6MTcgLTAzMDAgIHJleW5hbGRvIDxyZXluYWxkb0BvcGVuZG90LmNsPgotCi0JKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSAgZG9jczogc29tZSBzbWFsbCBmaXhlcyB0byB0aGUgcGx1Z2luIHdyaXRlcidzIGd1aWRlCi0JICBGaXggd3JvbmdseSBwbGFjZWQgZXhhbXBsZSBhbmQgd2VpcmRseSBwaHJhc2VkICdub3RlJyBsYWNraW5nIHByb3BlcgotCSAgZm9ybWF0dGluZy4gRml4IG1pc3NpbmcgaGludCBmb3IgYXV0b2dlbi5zaCBsb2NhdGlvbiBhbmQgcmVwaHJhc2UKLQkgICdidWlsdCBhbmQgaW5zdGFsbGVkJyBzZW50ZW5jZS4gRml4IHdyb25nbHkgcGhyYXNlZCBhbmQgcmVkdW5kYW50Ci0JICBwYXJhZ3JhcGggaW4gUFdHCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM0OTIxCi0KLTIwMTAtMTEtMjcgMTE6MDI6NDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSAgbWFudWFsOiBJbXByb3ZlIHN0YXRlcyBkb2N1bWVudGF0aW9uCi0JICBCZSBtb3JlIGV4cGxpY2l0IGFib3V0IGJlaW5nIG9uIE5VTEwgYmVmb3JlIHVucmVmcwotCi0yMDEwLTExLTIwIDE0OjU0OjIzIC0wODAwICBFdmFuIE5lbWVyc29uIDxldmFuQGNvZXVzLWdyb3VwLmNvbT4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkgIGludHJvc3BlY3Rpb246IEluY2x1ZGUgZXhwb3J0ZWQgcGFja2FnZXMgaW5mb3JtYXRpb24gaW4gR0lScwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNTM4OQotCi0yMDEwLTExLTE4IDAwOjI5OjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMzAuNSBwcmUtcmVsZWFzZQotCi0yMDEwLTExLTE4IDAwOjI5OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBlbGVtZW50ZmFjdG9yeTogZml4IGNhcHMgbGVhayBpbiBlbGVtZW50IGZhY3RvcnkgbGlzdCB1dGlsaXR5IGZ1bmN0aW9ucwotCi0yMDEwLTExLTE3IDIzOjU1OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vc2sucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEwLTExLTE3IDA5OjM5OjM0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RkYXRldGltZS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkYXRldGltZTogQWRkIF9mcm9tX3VuaXhfZXBvY2ggdmFyaWFudHMKLQkgIEFkZHMgMiB2YXJpYW50cyBmb3IgdGhlIGdzdF9kYXRlX3RpbWVfZnJvbV91bml4X2Vwb2NoIGZ1bmN0aW9uLAotCSAgb25lIGZvciBVVEMgYW5kIGFub3RoZXIgZm9yIGxvY2FsIHRpbWUuCi0JICBBUEk6IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMKLQkgIEFQSTogZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUKLQkgIEZpeGVzICM2NTMwMzEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzUwMzEKLQotMjAxMC0xMS0wMyAxNDoyMTowMiArMDAwMCAgVmxhZGltaXIgRXJlbWVldiA8d2wyNzc2QGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdGgtY29tcGF0Lmg6Ci0JICBtYXRoLWNvbXBhdDogZG9uJ3QgcmUtZGVmaW5lIF9VU0VfTUFUSF9ERUZJTkVTIGlmIGFscmVhZHkgZGVmaW5lZAotCSAgVGhpcyBhdm9pZHMgY29tcGlsZXIgd2FybmluZ3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMzODg2Ci0KLTIwMTAtMTEtMDEgMTY6MDY6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgMC4xMC4zMC40IHByZS1yZWxlYXNlCi0KLTIwMTAtMTEtMDEgMTU6MzY6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9kZS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0xMC0zMSAyMDoxNzowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGRvbid0IGxlYWsgcGFkIHJlZiBpbiBwdWxsIG1vZGUgd2hlbiBmbHVzaGluZwotCSAgRml4IHBhZCBsZWFrIHdoZW4gcXVldWUyIGlzIGZsdXNoaW5nIG9yIGJlaW5nIHNodXQgZG93bi4KLQotMjAxMC0xMC0zMSAxOTo0NzoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBkb24ndCBzZW5kIHNlZWtzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlIHVwc3RyZWFtIGluIHB1bGwgbW9kZQotCSAgSWYgZG93bnN0cmVhbSBpcyBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlLCBzaG9ydC1jaXJjdWl0IGFueSBwdWxscyBiZXlvbmQKLQkgIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIHJldHVybiBGTE9XX1VORVhQRUNURUQgaW1tZWRpYXRlbHkgaW5zdGVhZCBvZgotCSAgc2VuZGluZyBhIHNlZWsgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgdXBzdHJlYW0sIHNpbmNlIHRoaXMgbWlnaHQKLQkgIGNvbmZ1c2UgdXBzdHJlYW0gZWxlbWVudHMgKGFuZC9vciBodHRwIHNlcnZlcnMsIGZvciBleGFtcGxlKS4gRml4ZXMKLQkgIHBsYXliYWNrIG9mIGFwcGxlIHRyYWlsZXJzIGluIHRvdGVtIGFuZCB5b3V0dWJlL2h0bWw1IGNsaXBzIGluCi0JICBXZWJraXRHVEsrLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMjk3NwotCi0yMDEwLTEwLTI4IDIzOjI4OjE1ICsxMDAwICBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbkBkMTRuLm9yZz4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiB1c2UgaW5wdXQgcG9zaXRpb24gZm9yIHF1ZXJpZXMgaWYgd2UgaGF2ZSBubyBvdXRwdXQgcG9zaXRpb24KLQotMjAxMC0xMC0yOCAxMzoyOTozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBmaXggcmV2ZXJzZSBuZWdvdGlhdGlvbgotCSAgV2hlbiB0aGUgZG93bnN0cmVhbSBlbGVtZW50IHN1Z2dlc3RzIGEgbmV3IGZvcm1hdCwgcGFzcyB0aGUgc3VnZ2VzdGlvbgotCSAgdXBzdHJlYW0gaWYgd2UgY2FuJ3QgY29udmVydCB0byBpdC4KLQkgIEZpeGVzICM2MzMxNDcKLQotMjAxMC0xMC0yNyAxODoxMjozNiArMDIwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IEZpeCB0cmFja2luZyBvZiB1bmxpbmtlZCBzdHJlYW1zLgotCSAgMzMwODJlYjllNDJjNTJlNGRmODQ4MTk1OTQ2ZjFiN2JiY2U3NjhjNSBpbnRyb2R1Y2VkIGEgYnVnCi0JICBwcmV2ZW50aW5nIHNwYXJzZSB1bmxpbmtlZCBzdHJlYW1zIGZyb20gYWR2YW5jaW5nIHByb3Blcmx5LAotCSAgbGVhZGluZyB0byB0aGUgcXVldWUgYmxvY2tpbmcuCi0JICBGaXhlczogIzYzMzE3NgotCi0yMDEwLTEwLTI3IDE4OjExOjM1ICswMjAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkgIHRlc3RzOiBBZGQgYSBtdWx0aXF1ZXVlIHNwYXJzZSBzdHJlYW1zIHRlc3QKLQotMjAxMC0xMC0yNyAxMzoxNjoxMSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gN2JiZDcwOCB0byAwMTFiY2M4Ci0KLTIwMTAtMTAtMjIgMTc6MzU6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgMC4xMC4zMC4zIHByZS1yZWxlYXNlCi0KLTIwMTAtMTAtMTggMTc6NDI6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgotCSAgYnl0ZXJlYWRlcjogY29uc3QtaWZ5IGJ5dGUgcmVhZGVyIGFyZ3VtZW50IGluIHBlZWsvc2NhbiBBUEkKLQkgIEJlY2F1c2Ugd2UgY2FuLgotCi0yMDEwLTEwLTIyIDExOjUyOjQ3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkgIGVsZW1lbnRmYWN0b3J5OiBGaXggNjRiaXQgY29uc3RhbnQKLQkgIEJhc2ljYWxseSB3ZSdyZSBub3QgbWVhbnQgdG8gcHV0IGFueXRoaW5nIG1vcmUgY29tcGxleCB0aGFuIHNpbXBsZSBudW1iZXJzLAotCSAgZHVlIHRvIHRoZSBkZWZpbml0aW9uIG9mIEdfR1VJTlQ2NF9DT05TVEFOVDoKLQkgIEdfR1VJTlQ2NF9DT05TVEFOVCh2YWwpCSh2YWwjI1VMKQotCSAgV2hpY2ggcHJldmlvdXNseSByZXN1bHRlZCBpbiAuLi4uIDEgPDwgNDlVTAotCi0yMDEwLTEwLTE4IDEwOjQ2OjU5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHJlY29tcHV0ZSBjb3JyZWN0IHJ1bm5pbmcgdGltZSBmb3IgYnVmZmVyIGVuZGluZyBmbHVzaGluZyBzdGVwCi0JICBQcmV2ZW50cyBkZWxheWluZy9oYW5naW5nIHdoZW4gcmVzdW1pbmcgUExBWUlORy4KLQkgIEZpeGVzICM2MzI0MzMuCi0KLTIwMTAtMTAtMTYgMTk6MTk6NDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci1kb2NzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLWRvY3MuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKLQkgIGRvY3M6IGZpeCBtaXNjLiBndGstZG9jIHdhcm5pbmdzIGluIGxpYnMKLQkgIChmb3IgZ3RrLWRvYyAxLjE1KQotCi0yMDEwLTEwLTE2IDE4OjI2OjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkgIFJldmVydCAibGlicy9nc3QvZGF0YXF1ZXVlOiBEb2N1bWVudCBnc3RfZGF0YV9xdWV1ZV9uZXdfZnVsbCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgODA3MjdjMTE3NzAzNTA3Zjc5MGE4NmIwOTYyYWIzZDkxNWU1YTQ5MS4KLQkgIFRoaXMgZG9lc24ndCBtYWtlIHNlbnNlLiBnc3RfZGF0YV9xdWV1ZV9uZXdfZnVsbCgpIGlzIGFscmVhZHkKLQkgIGRvY3VtZW50ZWQgYWJvdmUuIEFuZCB3ZSBuZWVkIHRoZSBkb2MgYmx1cmIgZm9yIF9uZXcoKSBoZXJlLgotCi0yMDEwLTEwLTE2IDE3OjAwOjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIGRvY3M6IGZsZXNoIG91dCByZWxlYXNlIGluc3RydWN0aW9ucyBhIGJpdCBtb3JlCi0KLTIwMTAtMTAtMTYgMTY6NTM6NDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFyc2UuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGRvY3M6IGFkZCBzb21lIGd0ay1kb2MgU2luY2U6IG1hcmtlcnMKLQkgIEFkZCBzb21lIGd0ay1kb2MgU2luY2U6IG1hcmtlcnMsIGZpeCBvbmUgU2luY2U6IG1hcmtlciwKLQkgIGZpeCB0eXBvLgotCi0yMDEwLTEwLTE2IDAwOjI1OjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMzAuMiBwcmUtcmVsZWFzZQotCi0yMDEwLTEwLTE2IDAwOjE0OjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0xMC0xNSAxOTo0NToxNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogdXNlZnVsIGZhY3RvcnkgbmFtZXMgZm9yIHVyaS1oYW5kbGVycyBvdXRwdXQKLQkgIEZpeGVzICM2MzIyMzYuCi0KLTIwMTAtMTAtMTQgMTI6MzE6MzIgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNWE2NjhiZiB0byA3YmJkNzA4Ci0KLTIwMTAtMTAtMTIgMTU6MTM6NDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgZGF0ZXRpbWU6IFVzZSBzZWNvbmRzIGFzIGRvdWJsZQotCSAgVXNlIHNlY29uZHMgYXMgZG91YmxlIHRvIG1ha2UgQVBJIHNpbWlsYXIgdG8gZ2xpYidzCi0JICBnZGF0ZXRpbWUuIEFsc28gbW92ZSB0aW1lem9uZSBwYXJhbWV0ZXIgdG8gdGhlCi0JICBmaXJzdCBwb3NpdGlvbiwganVzdCBsaWtlIGdsaWIncy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjg0MDgKLQotMjAxMC0xMC0xMSAxNjoxNToyOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSAgZ3N0ZGF0ZXRpbWU6IE1vdmUgZG9jIG91dHNpZGUgdGhlIGlmZGVmcwotCSAgTW92ZSB0aGUgZGF0ZXRpbWUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIG91dHNpZGUgdGhlCi0JICBpZmRlZnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjg0MDgKLQotMjAxMC0wOS0yNyAxOTozNTowOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5oOgotCSAgZGF0ZXRpbWU6IFVzZSBHRGF0ZVRpbWUgaWYgYXZhaWxhYmxlCi0JICBVc2UgR0RhdGVUaW1lIGludGVybmFsbHkgb24gR3N0RGF0ZVRpbWUgaWYgZ2xpYiBhbHJlYWR5Ci0JICBwcm92aWRlcyBpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjg0MDgKLQotMjAxMC0wOS0yOCAxNzo0NjoyOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JICBnbGliLXByaXZhdGU6IEFkZCBpbmNsdWRlIHByb3RlY3Rpb24gbWFjcm8KLQotMjAxMC0xMC0xMyAxMjo1MTowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogYWRkIGd1YXJkIHRvIGJ1ZmZlcl9zZXRfY2FwcygpIHRoYXQgY2hlY2tzIGlmIGNhcHMgYXJlIHNpbXBsZQotCi0yMDEwLTEwLTEzIDE1OjU2OjI2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgc3lzdGVtY2xvY2s6IGFkZCBhIG1pc3NpbmcgR19QQVJBTV9TVEFUSUNfU1RSSU5HUwotCi0yMDA5LTEwLTAxIDExOjE0OjA2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSAgbGlicy9nc3QvZGF0YXF1ZXVlOiBEb2N1bWVudCBnc3RfZGF0YV9xdWV1ZV9uZXdfZnVsbAotCi0yMDA5LTA5LTI4IDEzOjM1OjM1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSAgYmFzZS9nc3RkYXRhcXVldWU6IGlubGluZSBzb21lIGZ1bmN0aW9ucywgZ2V0IGxldmVscyB3aXRoIG1lbWNweS4KLQotMjAxMC0xMC0xMyAxMTo1NDowNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogUmVtb3ZlIHVudXNlZCBhcmd1bWVudCBmcm9tIGZpbmRfcmFuZ2UoKQotCi0yMDEwLTEwLTEzIDExOjUyOjI1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSAgZmRzaW5rOiBjbGVhbnVwIGdldF9wcm9wZXJ0eS9zZXRfcHJvcGVydHkKLQotMjAxMC0xMC0xMiAxODo0ODoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSAgcXVldWU6IGF2b2lkIGdfY29uZF9zaWduYWwgd2hlbiB3ZSBjYW4KLQkgIEtlZXAgdHJhY2sgb2Ygd2hhdCBjb25kIHdlIGFyZSB3YWl0aW5nIG9uIGFuZCBvbmx5IHNpZ25hbCB3aGVuIHNvbWUgb3RoZXIgdGhyZWFkCi0JICBpcyB3YWl0aW5nLgotCi0yMDEwLTEwLTExIDE5OjI3OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IGF2b2lkIGR1cGxpY2F0ZSB0eXBlIGNoZWNrIHdoZW4gZnJlZWluZyBtaW5pb2JqZWN0Ci0JICBnc3RfbWluaV9vYmplY3RfdW5yZWYoKSBoYXMgZ3VhcmRzIHRoYXQgY2hlY2sgdGhlIHR5cGUgYWxyZWFkeSwgc28KLQkgIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHJlLWNoZWNrIGl0IGhlcmUgYWdhaW4gd2hpbGUgZ2V0dGluZyB0aGUKLQkgIGNsYXNzICh0aGVyZSdzIG5vdCByZWFsbHkgbXVjaCBwb2ludCB0byB0aGF0IGFueXdheSwgc2luY2Ugd2UgZG9uJ3QKLQkgIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGdldF9jbGFzcywgc28gd2UnZCBjcmFzaCBhbnl3YXkgaWYKLQkgIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSBtaW5pIG9iamVjdCwgdGhlIG9ubHkgcXVlc3Rpb24gd291bGQKLQkgIGJlIGlmIHRoZXJlJ2QgYmUgYSB3YXJuaW5nIGJlZm9yZSB0aGUgY3Jhc2ggb3Igbm90KS4KLQotMjAxMC0xMC0xMSAxODo1NToxNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IERpcmVjdGx5IGluY3JlYXRlIG1pbmlfb2JqZWN0IGluIG1pbmlfb2JqZWN0X2ZyZWUoKQotCSAgU3BlZWRzIHVwIG1pbmlfb2JqZWN0X3VucmVmIGJ5IDI1JSBieSBhdm9pZGluZyB0aGUgdHlwZWNoZWNrIHdoaWNoCi0JICBpcyBhdm9pZGFibGUgaGVyZSBzaW5jZSBpdCBpcyBvbmx5IGNhbGxlZCBvbiBleGlzdGluZyBtaW5pb2JqZWN0cy4KLQotMjAxMC0xMC0xMSAxODozMDo1NCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IFJlbW92ZSBjb25mdXNpbmcgREVCVUdfUkVGQ09VTlQgZGVmaW5lCi0JICB0aGUgZGVidWdnaW5nIHN0YXRlbWVudHMgd2lsbCBiZSBzaWxlbmNlZCBhdXRvbWF0aWNhbGx5IGlmIGRlYnVnZ2luZwotCSAgaXMgZGlzYWJsZWQsIGFuZCB0aGUgdHlwZSBjaGVjayBpcyBhY3R1YWxseSByZXF1aXJlZC4KLQotMjAxMC0xMC0xMSAxODoxMDowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogcmVsZWFzZSBxdWV1ZTIgbG9jayBiZWZvcmUgbm90aWZ5Ci0JICBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBob2xkIHRoZSBsb2NrIHdoZW4gd2Ugbm90aWZ5IHRoZSB0ZW1wLWxvY2F0aW9uCi0JICBwcm9wZXJ0eSwKLQkgIEZpeGVzICM2MzE4NTMKLQotMjAxMC0xMC0xMSAxNjo0NToxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcXVldWU6IGFkZCBkZWJ1ZyBzdGF0ZW1lbnQKLQotMjAxMC0xMC0xMSAxMDoyNzo1MiArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzoKLQkgIHF1ZXVlOiBhcHBseSBzaW5rIHNlZ21lbnQgb24gdGhlIHNvdXJjZSBpZiBxdWV1ZSBpcyBlbXB0eQotCSAgQXBwbHkgdGhlIHNpbmsgc2VnbWVudCBvbiB0aGUgc291cmNlIGltbWVkaWF0bHkgd2hlbiBpdCBpcyByZWNlaXZlZAotCSAgYW5kIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHF1ZXVlLgotCSAgU29sdmVzICM0ODIxNDcKLQotMjAxMC0xMC0xMSAxNTo1MToyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBmaXggZG9jdW1lbnRhdGlvbiBmb3IgaXRlcmF0ZV9zb3VyY2VzCi0KLTIwMTAtMTAtMTEgMTY6NDE6MjYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBkb2NzOiB1c2UgdGhlIGd0ay1kb2Mgc2hvcnRjdXRzIHRvIGdldCBjb2xvdXJlZCBhbmQgeHJlZmVkIGV4YW1wbGUKLQotMjAxMC0xMC0xMSAxNDoyMDoxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogSW5pdGlhbGl6ZSB2YXJpYWJsZQotCi0yMDEwLTEwLTExIDEwOjU2OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IEltcHJvdmUgdHJhY2tpbmcgb2Ygc291cmNlIGVsZW1lbnRzCi0JICBUcmFjayBlbGVtZW50cyB0YWdnZWQgd2l0aCB0aGUgSVNfU09VUkNFIGZsYWcgaW4gYSBzaW1pbGFyIHdheSB3ZSB0cmFjayB0aGUgc2luawotCSAgZWxlbWVudHMuIFRoaXMgYWxsb3dzIHVzIHRvIGVmZmljaWVudGx5IGRpc3BhdGNoIGRvd25zdHJlYW0gZXZlbnRzIHRvIHRoZSByaWdodAotCSAgZWxlbWVudHMuCi0KLTIwMTAtMTAtMTEgMTA6NTU6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogdGFnIGFzIGEgU09VUkNFIGVsZW1lbnQKLQkgIFRhZyBhbGwgZWxlbWVudHMgZGVyaXZpbmcgZnJvbSB0aGUgYmFzZXNyYyB3aXRoIHRoZSBJU19TT1VSQ0UgZmxhZy4KLQotMjAxMC0xMC0xMSAxMDo1Mzo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGVsZW1lbnQ6IGFkZCBJU19TT1VSQ0UgZmxhZwotCSAgQWRkIHRoZSBHU1RfRUxFTUVOVF9JU19TT1VSQ0UgZmxhZyBzbyB0aGF0IHdlIGNhbiB0YWcgc291cmNlIGVsZW1lbnRzIGxpa2Ugd2UKLQkgIGNhbiB3aXRoIHNpbmsgZWxlbWVudHMuCi0KLTIwMTAtMTAtMDkgMTQ6MTg6NDQgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8b2dnLmsub2dnLmtAZ29vZ2xlbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgcmVnaXN0cnk6IGdfbWFwcGVkX2ZpbGVfdW5yZWYgZXhpc3RzIGFscmVhZHkgc2luY2UgR0xpYiAyLjIxLjMKLQotMjAxMC0xMC0xMCAxODoxNDo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogUmVwb3J0IHRoZSBvdXRwdXQgcG9zaXRpb24gb24gUE9TSVRJT04gcXVlcmllcyBvbiB0aGUgc3JjcGFkCi0JICBUaGVyZSBjYW4gYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gaW5wdXQgYW5kIG91dHB1dCBsYXN0X3N0b3AuCi0JICBGaXhlcyBidWcgIzYyOTQxMC4KLQotMjAxMC0xMC0wOCAxMjo0MzoyMCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBjNGE4YWRjIHRvIDVhNjY4YmYKLQotMjAxMC0xMC0wOCAxMjo1NDo1MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGFuZCBzaW1wbGlmeSBjb2RlCi0JICBvbGRpZCB3YXMgb25seSB1c2VkIHdoZW4gd2Ugd2VyZSBkb2luZyBtdWx0aXBsZSBwb3BzIHBlciBsb29wLgotCi0yMDEwLTEwLTA4IDEyOjUwOjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDVlM2M5YmYgdG8gYzRhOGFkYwotCi0yMDEwLTEwLTA4IDEyOjQ4OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLWRvY3MuaDoKLQkgIGJ5dGV3cml0ZXI6IEFkZCBtaXNzaW5nIGZpbGUKLQotMjAxMC0xMC0wOCAxMjoxODoyMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6Ci0JICBieXRld3JpdGVyOiBBZGQgdW5jaGVja2VkIHZhcmlhbnRzIG9mIHRoZSB3cml0aW5nIGZ1bmN0aW9ucwotCSAgVGhlc2UgZG9uJ3QgY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgYW5kIGFyZQotCSAgYXZhaWxhYmxlIGFzIGlubGluZSBmdW5jdGlvbnMgb25seS4KLQkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV91bmNoZWNrZWQKLQkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV91bmNoZWNrZWQKLQkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZV91bmNoZWNrZWQKLQkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZV91bmNoZWNrZWQKLQkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmVfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQKLQkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYnl0ZV93cml0ZXJfZmlsbF91bmNoZWNrZWQKLQotMjAxMC0xMC0wOCAwOTozNDo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSAgY29udHJvbGxlciwgZGF0YXByb3RvY29sOiBtYWtlIHB1YmxpYyBlbnVtIF9nZXRfdHlwZSgpIGZ1bmN0aW9ucyB0aHJlYWQtc2FmZQotCSAgTm90IHRoYXQgaXQgaXMgbGlrZWx5IHRvIG1hdHRlciBpbiBwcmFjdGljZSwgYnV0IHNpbmNlIHRoZXNlIGFyZSBwdWJsaWMKLQkgIEFQSSB0aGV5IHNob3VsZCBwcm9iYWJseSBiZSB0aHJlYWQtc2FmZS4KLQotMjAxMC0xMC0wOCAwMDozODozOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSAgZGF0YXByb3RvY29sLCBsZm9jb250cm9sc291cmNlOiBmaXggZW51bSB2YWx1ZSBuYW1lIGluIGVudW1zIHRoYXQgYXJlIHB1YmxpYyBBUEkKLQkgIFNvIHJ1bi10aW1lIGJpbmRpbmdzIGNhbiBpbnRyb3NwZWN0IHRoZSBuYW1lcyBjb3JyZWN0bHkgKHdlIGFidXNlIHRoaXMKLQkgIGZpZWxkIGFzIGRlc2NyaXB0aW9uIGZpZWxkIG9ubHkgaW4gZWxlbWVudHMsIG5vdCBmb3IgcHVibGljIEFQSQotCSAgKHdoZXJlIHRoZSBkZXNjcmlwdGlvbiBiZWxvbmdzIGludG8gdGhlIGd0ay1kb2MgY2h1bmspLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTk0NgotCi0yMDEwLTEwLTA4IDA5OjQ3OjEyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6Ci0JICBieXRld3JpdGVyOiBGaXggcG9zc2libGUgaW5maW5pdGUgbG9vcCBjYXVzZWQgYnkgYW4gb3ZlcmZsb3cKLQotMjAxMC0xMC0wNyAxODo0NjoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIGVsZW1lbnRzOiBtaW5vciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3aGVuIGRvaW5nIGdfb2JqZWN0X25vdGlmeSgpIGZvciB0aGUgImxhc3QtbWVzc2FnZSIgcHJvcGVydHkKLQkgIE1ha2Ugc3VyZSBwcm9wZXJ0eSBuYW1lcyBwYXNzZWQgdG8gZ19vYmplY3Rfbm90aWZ5KCkgYXJlIGluIHRoZSBjYW5vbmljYWwgZm9ybQotCSAgKGllLiAibGFzdC1tZXNzYWdlIiBub3QgImxhc3RfbWVzc2FnZSIpLCBzbyB0aGF0IGdfcGFyYW1fc3BlY19wb29sX2xvb2t1cCgpCi0JICBkb2Vzbid0IGhhdmUgdG8gZG8gc3RyZHVwL2Nhbm9uaWNhbGl6ZS9mcmVlIGZvciBldmVyeSBzaW5nbGUgbm90aWZ5IGNhbGwuCi0JICBUaGlzIG9ubHkgYXBwbGllcyB3aGVuIGJ1aWxkaW5nIGFnYWluc3Qgb2xkZXIgR0xpYiB2ZXJzaW9ucyAoPCAyLjI2KS4KLQotMjAxMC0xMC0wNyAxODoyNzowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKLQkgIGZha2VzaW5rOiB1c2UgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjKCkgYW5kIHJlbW92ZSB3b3JrLWFyb3VuZCBmb3Igb2xkIEdMaWIgdmVyc2lvbnMgaWYgcG9zc2libGUKLQkgIFVzZSBtb3JlIGVmZmljaWVudCBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoKSBpZiB3ZSdyZSBjb21waWxpbmcgYWdhaW5zdAotCSAgR0xpYiA+PSAyLjI2LCBhbmQgYWxzbyByZW1vdmUgd29yay1hcm91bmQgZm9yIGdfb2JqZWN0X25vdGlmeSgpIHRocmVhZC0KLQkgIHNhZmV0eSBpc3N1ZXMgd2l0aCBvbGRlciBHTGliIHZlcnNpb25zIGlmIGl0J3Mgbm90IG5lZWRlZCBhbnkgbW9yZS4KLQotMjAxMC0xMC0wNyAxODoyMToxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICB0ZWU6IHVzZSBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoKSBpZiBwb3NzaWJsZQotCSAgVXNlIG1vcmUgZWZmaWNpZW50IGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYygpIGlmIHdlJ3JlIGNvbXBpbGluZyBhZ2FpbnN0Ci0JICBHTGliID49IDIuMjYuCi0KLTIwMTAtMTAtMDcgMTg6MTk6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkgIGZha2VzcmM6IHVzZSBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoKSBpZiBwb3NzaWJsZQotCSAgVXNlIG1vcmUgZWZmaWNpZW50IGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYygpIGlmIHdlJ3JlIGNvbXBpbGluZyBhZ2FpbnN0Ci0JICBHTGliID49IDIuMjYuCi0KLTIwMTAtMTAtMDcgMTc6NTM6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6Ci0JICBpZGVudGl0eTogdXNlIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYygpIGFuZCByZW1vdmUgd29yay1hcm91bmQgZm9yIG9sZCBHTGliIHZlcnNpb25zIGlmIHBvc3NpYmxlCi0JICBVc2UgbW9yZSBlZmZpY2llbnQgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjKCkgaWYgd2UncmUgY29tcGlsaW5nIGFnYWluc3QKLQkgIEdMaWIgPj0gMi4yNiwgYW5kIGFsc28gcmVtb3ZlIHdvcmstYXJvdW5kIGZvciBnX29iamVjdF9ub3RpZnkoKSB0aHJlYWQtCi0JICBzYWZldHkgaXNzdWVzIHdpdGggb2xkZXIgR0xpYiB2ZXJzaW9ucyBpZiBpdCdzIG5vdCBuZWVkZWQgYW55IG1vcmUuCi0KLTIwMTAtMTAtMDcgMTc6MjM6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZHM6IHVzZSBuZXcgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjKCkgZm9yIGNhcHMgbm90aWZpZXMgaWYgYXZhaWxhYmxlCi0JICBJZiB3ZSdyZSBidWlsZGluZyBhZ2FpbnN0IEdMaWIgPj0gMi4yNi4wLCB3ZSBjYW4gdXNlIHRoZSBtb3JlIGVmZmljaWVudAotCSAgZ19vYmplY3Rfbm90aWZ5X2J5X2NhcHMoKSwgd2hpY2ggYXZvaWRzIHRoZSBwYXJhbSBzcGVjIGxvb2t1cC4KLQotMjAxMC0xMC0wNyAxNjoyNzoyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSAgY2xvY2s6IHJlbW92ZSB1bm5lY2Vzc2FyeSBnX29iamVjdF9ub3RpZnkoKSBjYWxsCi0JICBHT2JqZWN0IHdpbGwgZG8gdGhhdCBmb3IgdXMgd2hlbiBnX29iamVjdF9zZXQqKCkgaXMgY2FsbGVkLgotCi0yMDEwLTEwLTA3IDE5OjE4OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgcW9zIGRlc2lnbiBkb2MKLQkgIEZpeCBzb21lIHR5cG9zLgotCSAgY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBxdWFsaXR5IGZpZWxkIGZvciB2aWRlbyBkZWNvZGVycyB0byBzb21ldGhpbmcgdGhhdAotCSAgbWFrZXMgbW9yZSBzZW5zZS4KLQotMjAxMC0xMC0wNSAxNzowMjo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgQWRkIGdvYmplY3QtaW50cm9zcGVjdGlvbiB0ZW1wIGRpcmVjdG9yaWVzIHRvIENSVUZUX0RJUlMKLQotMjAxMC0xMC0wNSAxNTowNTo0MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSAgbGZvY29udHJvbHNvdXJjZTogdXNlIG1hdGgtY29tcGF0LmggZm9yIE1fUEkKLQotMjAxMC0xMC0wNSAxNDo0NTowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSAgZ3N0aW5mbzogcmVtb3ZlIHJhbmRvbSBNU1ZDIGNvbXBhdGliaWxpdHkgZGVmaW5lIGZvciBNX1BJIHRoYXQgZG9lc24ndCBiZWxvbmcgaGVyZQotCSAgQ29kZSB0aGF0IG5lZWRzIHRoaXMgc2hvdWxkIGluY2x1ZGUgZ3N0L21hdGgtY29tcGF0Lmggb3IgdXNlIEdfUEkuCi0KLTIwMTAtMTAtMDUgMTQ6MTY6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9tYXRoLWNvbXBhdC5oOgotCSAgZ3N0OiBhZGQgbWF0aC1jb21wYXQuaCBoZWFkZXIKLQkgIEFkZCBtaW5pbWFsIG1hdGgtY29tcGF0aC5oIGhlYWRlciB3aGVyZSB3ZSBjYW4gZGVmaW5lIGZhbGxiYWNrCi0JICB2ZXJzaW9ucyBmb3IgbWlzY2VsbGFuZW91cyBtYXRoIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBhbHdheXMKLQkgIGF2YWlsYWJsZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkdXBsaWNhdGUgdGhpcyBpbiBwbHVnaW5zLgotCSAgVGhlIGhlYWRlciBpcyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdCwgc28gbmVlZHMgdG8gYmUKLQkgIGluY2x1ZGVkIGV4cGxpY2l0bHkgZm9yIG5vdy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzA4MDIKLQotMjAxMC0xMC0wNSAxMTo0Nzo1OSArMDIwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogdG9vbHMvZ3N0LXBsb3QtdGltZWxpbmUucHk6Ci0JICB0b29sczogZml4IHBhcnNpbmcgb2YgdGltZXN0YW1wIGluIGdzdC1wbG90LXRpbWVsaW5lCi0KLTIwMTAtMDktMjUgMTQ6MjQ6NDYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGRvbid0IHRha2UgcHJlcm9sbC1sb2NrIGluIGdldF9wcm9wZXJ0eQotCSAgVXNlIGF0b21pYyBvcHMgdG8gcmVhZCBhbmQgd3JpdGUgbW9yZSBwcm9wZXJ0aWVzLiBUYWtpbmcgdGhlIHByZXJvbGwgbG9jayBpbiBnZXRfcHJvcGVydHkKLQkgIGNhbiBsb2NrIHVwIGFwcGxpY2F0aW9ucyByZWFkaW5nIHRoZSBwcm9wZXJ0eSBkdXJpbmcgcHJlcm9sbC4KLQotMjAxMC0xMC0wMiAxODoxMTozMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBiYXNlc2luazogYWRkIGEgZml4bWUgZm9yIDAuMTEKLQotMjAxMC0xMC0wNCAxNTo0OToxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGZvcm1hdCBuZWdhdGl2ZSB2YWx1ZXMgYmV0dGVyCi0JICBGb3JtYXQgbmVnYXRpdmUgdmFsdWVzIHByb3Blcmx5IGluIHRoZSBkZWJ1ZyBsb2cuCi0KLTIwMTAtMTAtMDMgMjM6NDE6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2JpdHJlYWRlci5jOgotCSAgYml0cmVhZGVyOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5ncwotCSAgZ2NjIGRvZXNuJ3Qgbm90aWNlIHRoYXQgdGhlIGNoZWNrIGFzc2VydGlvbiBtYWNyb3Mgd2lsbCBhYm9ydAotCSAgZnVydGhlciBleGVjdXRpb24gb2YgdGhlIHRlc3RzLgotCi0yMDEwLTEwLTAzIDIzOjMyOjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKLQkgIGJ5dGV3cml0ZXI6IEFkZCBpbmxpbmUgdmFyaWFudHMgb2YgYWxsIGltcG9ydGFudCBmdW5jdGlvbnMKLQotMjAxMC0xMC0wMyAxNToyNzozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXItZG9jcy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2JpdHJlYWRlci5jOgotCSAgYml0cmVhZGVyOiBBZGQgaW5saW5lZCBhbmQgdW5jaGVja2VkIHZlcnNpb25zIG9mIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zCi0JICBBUEk6IGdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWQKLQkgIEFQSTogZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZAotCSAgQVBJOiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NF91bmNoZWNrZWQKLQkgIEFQSTogZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzJfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkCi0JICBBUEk6IGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OF91bmNoZWNrZWQKLQkgIFRoaXMgYWxvbmUgbWFrZXMgZmxhY3BhcnNlIGFib3V0IDMgdGltZXMgZmFzdGVyLgotCi0yMDEwLTEwLTAzIDE0OjU5OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkgIGJ5dGV3cml0ZXI6IEFkZCBndWFyZHMgdG8gdGhlIGlubGluZWQgZ2V0X3Bvcy9nZXRfcmVtYWluaW5nL2dldF9zaXplL2V0YyBmdW5jdGlvbnMKLQotMjAxMC0xMC0wMyAxNDoyNDowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6Ci0JICBiaXRyZWFkZXI6IE9wdGltaXplIHBlZWtfYml0cy9nZXRfYml0cyBhIGJpdAotCSAgVXNlIGxvY2FsIHZhcmlhYmxlcyBpbnN0ZWFkIG9mIGRlcmVmZXJlbmNpbmcgdGhlIGJpdHJlYWRlcgotCSAgcG9pbnRlciBhbGwgdGhlIHRpbWUgYW5kIGRvbid0IGNvcHkgdGhlIHJlYWRlciBmb3IgcGVla19iaXRzLgotCi0yMDEwLTA5LTI3IDE5OjI5OjI0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIGdzdGRhdGV0aW1lOiBGaXggc3RyaW5nIHNlcmlhbGl6YXRpb24KLQkgIENvcnJlY3RseSBzZXJpYWxpemUgdHpvZmZzZXQgYXMgYSBnc3R2YWx1ZQotCi0yMDEwLTA5LTI0IDEyOjIyOjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogaW1wcm92ZSBhZGp1c3RfdGltZSgpCi0JICBBZGQgc29tZSBtb3JlIGNvbW1lbnRzLgotCSAgTWFrZSBzdXJlIHdlIGRvbid0IGVuZCB1cCB3aXRoIG5lZ2F0aXZlIHRpbWVzdGFtcHMuCi0KLTIwMTAtMDUtMjYgMjA6Mjk6MjIgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHJlbmRlcmRlbGF5IG5lZWRzIHRvIGJlIHN1YnRyYWN0ZWQgaW4gYWRqdXN0X3RpbWUoKQotCSAgbGF0ZW5jeSBpcyBhbHJlYWR5IHNpbmstbGF0ZW5jeSArIHJlbmRlci1kZWxheSwgYW5kIGhlcmUgd2Ugb25seQotCSAgd2FudCB0byBkZWFsIHdpdGggdGhlIHNpbmstbGF0ZW5jeS4KLQkgIEZpeGVzICM2MzA0MzYKLQotMjAxMC0wOS0yNCAwMDoxMzo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RtYXJzaGFsLmM6Ci0JICB3aW4zMjogZGVmaW5lIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgaW4gd2luMzIgY29uZmlnLmggYXMgd2VsbAotCi0yMDEwLTA5LTIzIDIwOjU3OjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSBmb3IgbmV3IHN0cmluZ3MKLQotMjAxMC0wOS0yMyAyMDo0ODoyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogcHJpbnQgR1NUX1BBUkFNX01VVEFCTEVfKiBwcm9wZXJ0eSBmbGFncwotCi0yMDEwLTA1LTA0IDA5OjM2OjQzICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogTWFrZSBhIFdBUk5JTkcgaW50byBhIERFQlVHIHN0YXRlbWVudAotCSAgRml4ZXMgYnVnICM2MzA0MzcuCi0KLTIwMTAtMDEtMTIgMTc6MTA6NTkgKzAxMDAgIFRyb25kIEFuZGVyc2VuIDx0cm9uZC5hbmRlcnNlbkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgY2xvY2s6IGZpeCByYWN5IHNodXRkb3duIGNsb2NrIGlkIGxlYWsKLQkgIENsb2NrIElEcyB3ZXJlIGxlYWtlZCBpZiB0aGUgY2xvY2sgZ290IGRpc3Bvc2VkIGJlZm9yZSB0aGUgd29ya2VyIHRocmVhZAotCSAgZ290IGEgY2hhbmNlIHRvIHJlYXAgdW5zY2hlZHVsZWQgZW50cmllcy4KLQkgIEZpeGVzIGJ1ZyAjNjMwNDM5LgotCi0yMDEwLTA5LTIzIDE4OjE4OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGF2b2lkIHVzZWxlc3MgbWVtY3B5Ci0JICBCZWNhdXNlIG9mIHRoZSBhd2t3YXJkIHJlZmNvdW50aW5nIGluIHByZXBhcmVfb3V0cHV0X2J1ZmZlciwgd2UgbWlnaHQgZW5kIHVwCi0JICB3aXRoIHdyaXRhYmxlIGJ1ZmZlcnMgdGhhdCBwb2ludCB0byB0aGUgc2FtZSBkYXRhLiBDaGVjayBmb3IgdGhvc2UgY2FzZXMgc28gdGhhdAotCSAgd2UgYXZvaWQgYSB1c2VsZXNzIG1lbWNweSBhbmQga2VlcCB2YWxncmluZCBxdWlldC4KLQkgIEZpeGVzICM2MjgxNzYKLQotMjAxMC0wOS0yMyAxNDozNzo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGZpeCAnbWFrZSBjaGVjaycgYnVpbGQgZm9yIHNldHVwcyB3aGVyZSBubyBjKysgY29tcGlsZXIgaXMgYXZhaWxhYmxlCi0JICBPbmx5IHRyeSB0byBidWlsZCAocHNldWRvLSlDKysgdW5pdCB0ZXN0IGlmIGEgd29ya2luZyBDKysgY29tcGlsZXIgaGFzIGJlZW4KLQkgIGZvdW5kLCBvdGhlcndpc2UgdGhlIGJ1aWxkIHdpbGwgZmFpbC4gKFdlIGRvIHRoaXMgdG8gbWFrZSBzdXJlIG91ciBoZWFkZXJzCi0JICBhcmUgJ0MrKyBjbGVhbicpLgotCi0yMDEwLTA5LTIzIDEwOjA4OjA1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnOiBBZGRzIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1IKLQkgIEFkZHMgYSBuZXcgdGFnIHRvIGluZGljYXRlIHRoZSBlcnJvciBpbiBob3Jpem9udGFsIHBvc2l0aW9uaW5nCi0JICBpbiBtZXRlcnMuIFRoaXMgaXMgb25lIG9mIHRoZSBhdmFpbGFibGUgJ2dwcyBlcnJvcicgZmllbGRzIGluCi0JICBleGlmLCBmb3IgZXhhbXBsZS4KLQkgIEFQSTogR1NUX1RBR19HRU9fTE9DQVRJT05fSE9SSVpPTlRBTF9FUlJPUgotCi0yMDEwLTA5LTIzIDE1OjM0OjU0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIFJldmVydCAicGFkOiB1c2UgYSBuZXN0ZWQgbG9jayB0byBhdm9pZCByZWZmaW5nIHRoZSBwZWVyIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5YjQyNGIxNTcwMzY2YjEwNzQ2YTc2MmU4YzljNGMxYjM1YjIxZTkxLgotCi0yMDEwLTA5LTIzIDE1OjEyOjMyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IHJlbW92ZSB2YXIgb25seSB1c2VkIGZvciBkZWJ1ZyBzdGF0ZW1lbnQKLQotMjAxMC0wOS0wNyAxNjo1NjozOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IHVzZSBhIG5lc3RlZCBsb2NrIHRvIGF2b2lkIHJlZmZpbmcgdGhlIHBlZXIKLQkgIEZpeGVzICM1MDM1OTIKLQotMjAxMC0wNy0xNSAxNTo0NzozNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNwcC5jYzoKLQkgIHRlc3RzOiByZWJ1aWxkIG9uZSB0ZXN0IHVzaW5nIGNwcAotCSAgVGhpcyBhaW1zIHRvIGNhdGNoIGNwcCBpc3N1ZXMgaW4gY29yZS4gQWRkIGMrKyBib2lsZXJwbGF0ZSB0byBjb25maWd1cmUuCi0KLTIwMTAtMDktMjEgMTg6MzM6MjYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBhYTBkMWQwIHRvIDVlM2M5YmYKLQotMjAxMC0wOS0xOSAxNjoxMDoxNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICB0ZXN0czogSGFuZGxlIG5ldyBhc3NlcnRpb24gaW4gZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyCi0KLTIwMTAtMDktMTggMTk6Mjk6MDkgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IEFkZCBjaGVjayBmb3IgcGF0dGVybiBiaXRzIG5vdCBpbiBtYXNrCi0KLTIwMTAtMDktMTcgMTk6NTM6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBVc2UgZ19maWxlX3Rlc3QoKSBpbnN0ZWFkIG9mIGFjY2VzcygpIHdoaWNoIGRvZXMgbm90IGV4aXN0IG9uIE1TVkM2Ci0JICBGaXhlcyBidWcgIzYyOTQ5NC4KLQotMjAxMC0wOS0xNyAxNzozNDo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJsaXN0OiBhZGQgZnVuY3Rpb24gdG8gYWRkIGEgbGlzdCBvZiBidWZmZXJzCi0JICBBZGQgYSBmdW5jdGlvbiB0byBhZGQgYSBsaXN0IG9mIGJ1ZmZlcnMgdG8gdGhlIGJ1ZmZlcmxpc3QuCi0KLTIwMTAtMDktMTcgMTU6NTE6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBhZGFwdGVyOiBhZGQgZnVuY3Rpb24gdG8gZ2V0IGEgbGlzdCBvZiBidWZmZXJzCi0JICBBZGQgYSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgYnVmZmVycyBjb250YWluaW5nIHRoZSBmaXJzdCBOIGJ5dGVzIGZyb20KLQkgIHRoZSBhZGFwdGVyLiBUaGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgYSBtZW1jcHkgYW5kIHNob3VsZCBtYWtlIGl0IHBvc3NpYmxlIHRvCi0JICB0cmFuc2ZlciB0aGUgbGlzdCB0byBhIEdzdEJ1ZmZlckxpc3QgbGF0ZXIuCi0KLTIwMTAtMDktMTcgMTU6MDc6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogcmV1c2UgbW9yZSBkYXRhIGluIF9wZWVrKCkKLQkgIE9wdGltaXplIF9wZWVrKCkgc29tZSBtb3JlIGJ5IHJldXNpbmcgYWxyZWFkeSBhc3NlbWJsZWQgZGF0YSB3aGVuIHdlIGNhbi4KLQotMjAxMC0wOS0xNyAxMzo1NzozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiBvcHRpbWl6ZSBfdGFrZSgpIGEgbGl0dGxlIG1vcmUKLQkgIFdoZW4gd2UgaGF2ZSBhbHJlYWR5IGFzc2VtYmxlZCBzb21lIGRhdGEgYmVmb3JlLCByZXVzZSB0aGlzIGRhdGEgYW5kIG9ubHkgY29weQotCSAgdGhlIHBhcnQgdGhhdCBpcyBuZXcuCi0KLTIwMTAtMDktMTcgMTI6NDg6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogcmVmYWN0b3IgYWRhcHRlciB0YWtlCi0JICBNb3ZlIHNvbWUgY29tbW9uIGNvZGUgaW50byBvbmUgcGxhY2UKLQotMjAxMC0wOS0xNyAxMjo0MDoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGFkZCBzdXBwb3J0IGZvciAwIHNpemVkIGJ1ZmZlcnMKLQkgIEFkZCBzdXBwb3J0IGZvciAwIHNpemVkIGJ1ZmZlcnMuIFRoaXMgaXMgaW50ZXJlc3RpbmcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUKLQkgIHRpbWVzdGFtcCBmdW5jdGlvbnMuCi0JICBGaXhlcyAjNjI5NTUzCi0KLTIwMTAtMDktMTcgMTA6MDE6MDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sOgotCSAgcHdnOiBNYWtlIGEgc2VudGVuY2UgY2xlYXJlci4KLQotMjAxMC0wOS0xNiAxOToyNzo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgZWxlbWVudGZhY3Rvcnk6IG1ha2Ugc3VyZSBnc3RyZWFtZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2hlbiBjcmVhdGluZyBlbGVtZW50cwotCSAgQWRkIGdzdF9pc19pbml0aWFsaXplZCgpIGd1YXJkIHRvIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgpLCBzbwotCSAgcGVvcGxlIHdobyBmb3Jnb3QgdG8gY2FsbCBnc3RfaW5pdCgpIGdldCBhIHVzZWZ1bCB3YXJuaW5nIGZvciB3aGF0Ci0JICBzZWVtcyB0byBiZSBhIGNvbW1vbiBlbm91Z2ggbWlzdGFrZS4KLQotMjAxMC0wOS0xNiAwMDozNzo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IG1pbm9yIGdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlKCkgY29kZSByZWZsb3cKLQkgIFNwcmlua2xlIHNvbWUgR19VTkxJS0VMWSgpLCByZXR1cm4gVFJVRS9GQUxTRSBjb25zdGFudHMsIGF2b2lkIGFuCi0JICB1bm5lY2Vzc2FyeSBnX3ZhbHVlX3Vuc2V0KCksIG1vdmUgZ192YWx1ZV9pbml0KCkrc2V0X2ludDY0X3JhbmdlKCkKLQkgIGNsb3NlciB0byB3aGVyZSB0aGV5J3JlIG5lZWRlZC4KLQotMjAxMC0wOS0xNiAwMDozMDoxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IGdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlKCkgb3B0aW1pc2F0aW9ucwotCSAgRG9uJ3QgY3JlYXRlIGEgbmV3IEdWYWx1ZUFycmF5IGNvcHkgZm9yIGV2ZXJ5IHNpbmdsZSBfYWRkX2J1ZmZlcmluZ19yYW5nZSgpCi0JICBjYWxsLCBidXQgYXBwZW5kIHRvIHRoZSBleGlzdGluZyB2YWx1ZSBhcnJheSBvd25lZCBieSB0aGUgc3RydWN0dXJlIGluc3RlYWQuCi0KLTIwMTAtMDktMTYgMDA6MDM6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IG1pY3JvLW9wdGltaXNhdGlvbiBmb3Igc29tZSBzZXR0ZXIgZnVuY3Rpb25zCi0JICBTcGxpdCBvdXQgZnVuY3Rpb25zIHRoYXQgZG8gdGhlIGFjdHVhbCB3b3JrLCBzbyB3ZSBhdm9pZCBkb2luZwotCSAgdGhlIHNhbWUgZ19yZXR1cm5faWZfZmFpbCgpIGNoZWNrcyBtdWx0aXBsZSB0aW1lcyBmb3IgZWFjaCBjYWxsLgotCi0yMDEwLTA5LTE1IDIzOjQyOjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc3RydWN0dXJlOiBhZGQgZ3N0X3N0cnVjdHVyZV97aWRffXRha2VfdmFsdWUoKQotCSAgQWRkIF9zZXRfdmFsdWUoKSB2YXJpYW50cyB0aGF0IHRha2Ugb3duZXJzaGlwIG9mIHRoZSB2YWx1ZSBwYXNzZWQKLQkgIGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBvZiB0aGUgdmFsdWUuIFRoaXMgaXMgdXNlZnVsIGZvciBzZXR0aW5nCi0JICB2YWx1ZXMgdG8gdGhpbmdzIHRoYXQgYXJlbid0IHJlZmNvdW50ZWQgKGUuZy4gR1ZhbHVlQXJyYXlzIG9yCi0JICBzdHJpbmdzIG9yIHN0cmluZyBhcnJheXMsIGV0Yy4pLgotCSAgQVBJOiBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUoKQotCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTgzMQotCi0yMDEwLTA5LTE2IDE5OjE5OjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IGZpeCBkb2Mgc3RyaW5nLCB3ZSBwb3N0IGVsZW1lbnQgbWVzc2FnZXMKLQotMjAxMC0wOS0xNiAxOTowNjozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBhZGQgbWVzc2FnZS1mb3J3YXJkIG9wdGlvbgotCSAgQWRkIGFuIG9wdGlvbiB0byBmb3J3YXJkIGFsbCB0aGUgaW50ZXJuYWwgbWVzc2FnZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUKLQkgIGZpbHRlcmVkIHN1Y2ggYXMgRU9TLCBTRUdNRU5UIGFuZCBBU1lOQyBtZXNzYWdlcy4KLQkgIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0bywgZm9yIGV4YW1wbGUsIGRldGVjdCB0aGF0IGEgcGFydGlhbCBwaXBlbGluZSBpcwotCSAgcHJlcm9sbGVkIG9yIHJlYWNoZWQgZW9zLgotCSAgVGhlIG9yaWdpbmFsIG1lc3NhZ2VzIGFyZSB3cmFwcGVkIGluc2lkZSBhbiBlbGVtZW50IG1lc3NhZ2UgYmVjYXVzZSB0aGUgcGFyZW50Ci0JICBiaW5zIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VlIHRob3NlIGludGVybmFsIG1lc3NhZ2VzIGVzY2FwZS4KLQotMjAxMC0wOS0xMiAxNjo1MDoxMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIHBsdWdpbjogdXNlIHN0cnN0cigpIGluc3RlYWQgb2YgZ19zdHJzdHJfbGVuKCkKLQkgIFNhdmVzIHVzIGEgc3RybGVuKCkgY2FsbC4KLQotMjAxMC0wOS0xNSAxMzoyOTo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogb25seSBwb3N0IGJ1ZmZlcmluZyBtZXNzYWdlIHdoZW4gcGVyY2VudCBjaGFuZ2VkCi0KLTIwMTAtMDktMTUgMTM6MTU6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGFsd2F5cyB1cGRhdGUgYnVmZmVyaW5nIHN0YXR1cwotCSAgVXBkYXRlIHRoZSBidWZmZXJpbmcgc3RhdHVzIGV2ZW4gd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGEgcXVldWUgc28gdGhhdCBFT1MgY2FuCi0JICBwcm9wZXJseSBmaW5pc2ggdGhlIGJ1ZmZlcmluZy4KLQotMjAxMC0wOS0xMyAyMDozOTo1MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGdzdHBhZDogRml4IGZsdXNoLXN0b3AgZXZlbnQgaGFuZGxpbmcKLQkgIEEgZmx1c2gtc3RvcCBldmVudCB3b3VsZCBtYWtlIGEgcGFkIHVuZmx1c2hpbmcsIGNhdXNpbmcgaXQKLQkgIHRvIHN0YXJ0IGFjdGluZyBhcyBhbiBhY3RpdmF0ZWQgcGFkLiBUaGlzLCBmb3IgZXhhbXBsZSwKLQkgIGNvdWxkIGxlYWQgdG8gdGhlIGNoYWluIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCB3aGVuIHN0dWZmCi0JICBpc24ndCBpbml0aWFsaXplZC4KLQkgIFRoaXMgY291bGQgaGFwcGVuZCB3aGVuIHNldHRpbmcgcXRkZW11eCB0byBOVUxMIHdoaWxlIGEgc2VlawotCSAgd2FzIGJlaW5nIGhhbmRsZWQgaW4gdGhlIHVwc3RyZWFtIGZpbGVzcmMgKGluIHB1c2ggbW9kZSkuCi0JICBUaGlzIHBhdGNoIG1ha2VzIGl0IGNoZWNrIGlmIGl0IGlzIGFjdGl2YXRlZCBiZWZvcmUgc2V0dGluZwotCSAgaXQgdG8gdW5mbHVzaGluZy4KLQotMjAxMC0wOS0xMyAxMToxNzozNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIGRvY3M6IGZpeCB3YXJuaW5ncyBwb2ludGVkIG91dCBieSBndGstZG9jCi0KLTIwMTAtMDktMTMgMDk6NTA6NTMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRhc2twb29sLmM6Ci0JICB0YXNrcG9vbDogbWFrZSBkZWJ1ZyBvbmx5IGNvZGUgY29uZGl0aW9uYWwKLQotMjAxMC0wOS0xMCAxNTowNzowMyAtMDQwMCAgQ29saW4gV2FsdGVycyA8d2FsdGVyc0B2ZXJidW0ub3JnPgotCi0JKiBnc3QvZ3N0ZXJyb3IuaDoKLQkgIGludHJvc3BlY3Rpb246IEJ1aWxkIHdpdGggbGF0ZXN0IGctaQotCSAgSGlkZSBhIGNvbXBhdGliaWxpdHkgdHlwZWRlZi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjkyNDEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NTA2MTYKLQotMjAxMC0wOS0wOSAyMjoyNDozOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JICBwbHVnaW5sb2FkZXI6IGRvbid0IGxlYWsgZW50cmllcyBmb3IgYmxhY2tsaXN0ZWQgZmlsZXMKLQotMjAxMC0wOS0wOSAyMTo1OToyOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOgotCSAgY2hlY2tzOiBhbmQgY2hlY2sgdGhlIHJpZ2h0IGVudi12YXIgKGZpeHVwIGxhc3QgY29tbWl0KQotCi0yMDEwLTA5LTA5IDIxOjU2OjI4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKLQkgIHRlc3RzOiBhbGxvdyBydW5uaW5nIHN0YXRlIHRlc3RzIGZvciBhbGwgZWxlbWVudHMKLQkgIE5vdyBvbmUgY2FuIHVzZSBHU1RfTk9fU1RBVEVfSUdOT1JFX0VMRU1FTlRTPTEgbWFrZSBnZW5lcmljL3N0YXRlcy5jaGVjawotCSAgdG8gdHJ5IGVsZW1lbnRzIHRoYXQgd291bGQgbm9ybWFseSBiZSBza2lwcGVkLgotCi0yMDEwLTA5LTA2IDE1OjE2OjE2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBnc3RvYmplY3Q6IGF2b2lkIHN0cmluZyBjcmVhdGlvbiB3aGVuIG5vdCBuZWVkZWQKLQotMjAxMC0wOS0wOSAxNjoxMTo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5OiBpZGVudGl0eSBpcyBHQVAgZmxhZyBhd2FyZSwgbm8gbmVlZCB0byBsZXQgaXQgYmUgdW5zZXQgYnkgYmFzZXRyYW5zZm9ybQotCi0yMDEwLTA5LTA5IDE1OjU3OjE1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGdzdC1sYXVuY2g6IGFkZCBhIHN5bmMgYnVzIGhhbmRsZXIgYW5kIG1vdmUgc3RhdGUtY2hhbmdlIGxvZ2dpbmcgdGhlcmUKLQkgIFRoZSBzeW5jIGhhbmRsZXIgaXMgY2FsbGVkIGZvciBhbGwgbWVzYWdlcywgdGhlIGV2ZW50IGxvb3Agd2UgcHJldmlvdXNseSB1c2VkCi0JICB3YXMgbm90LiBJbiB0aGUgc3luYyBoYW5kbGVyIHRyaWdnZXIgcGlwZWxpbmUgZG90IGR1bXBzIGFuZCBjYWxsIGFjY2VzcyBmb3IgYQotCSAgZmlsZSBpbiB0bXAtZGlyIHRvIGFkZCBtYXJrZXJzIGludGVyY2VwdGFibGUgYnkgc3RyYWNlIGFuZCBjby4KLQotMjAxMC0wOS0wOCAxODo0MToxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBzaW1wbGlmeSBjb2RlIGEgYml0Ci0JICBObyBuZWVkIHRvIGNhbGwgZ19zbGlzdF9sZW5ndGgoKSBoZXJlLgotCi0yMDEwLTA5LTA4IDA5OjM3OjQyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogYWRkIGEgdW5jaGVja2VkIHZhcmlhbnQgZm9yIHB1bGwKLQkgIEFkZCBpbnRlcm5hbCBfZ2V0X3JhbmdlX3VuY2hlY2tlZCB0aGF0cyBpcyBjYWxsZWQgZnJvbSBfZ2V0X3JhbmdlIGFuZAotCSAgX3B1bGxfcmFuZ2UuCi0KLTIwMTAtMDktMDcgMjM6NDg6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogYWRkIHVnbHkvYmFkL2ZmbXBlZyBwa2ctY29uZmlnIGRpcnMgdG8gUEtHX0NPTkZJR19QQVRICi0JICBTbyB3ZSBjYW4gZmlndXJlIG91dCBwbHVnaW4gZGlyZWN0b3JpZXMgb2Ygb3RoZXIgbW9kdWxlcyBwcm9wZXJseSBpbgotCSAgdGhlIHVuaW5zdGFsbGVkIHNldHVwIGNhc2UsIGZvciB1bml0IHRlc3RzIHRoYXQgbmVlZCBlbGVtZW50cyBmcm9tCi0JICBvdGhlciBtb2R1bGVzLgotCi0yMDEwLTA5LTA3IDEyOjAxOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgZG9jczogdXBkYXRlIHBsdWdpbiBkb2NzIGZvciByZWNlbnQgY2hhbmdlcwotCSAgQW5kIHNvcnRlZCBoaWVyYXJjaHkKLQotMjAxMC0wOS0wNyAxMTo0MTozNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBjMmUxMGJmIHRvIGFhMGQxZDAKLQotMjAxMC0wOS0wNyAxMTowOToxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogZG9uJ3QgdXNlIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCgpIG9uIE5VTEwgcG9pbnRlcnMKLQotMjAxMC0wOS0wNiAyMDoxOToyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zIGZvciBuZXcgc3RyaW5ncwotCi0yMDEwLTA5LTA2IDIwOjE2OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVycm9yLmM6Ci0JICBnc3RlcnJvcjogYWRkIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBmb3IgR1NUX0xJQlJBUllfRVJST1JfRU5DT0RFCi0JICBObyBpZGVhIHRob3VnaCB3aHkgd2UgZXZlbiBoYXZlIEdTVF9MSUJSQVJZX0VSUk9SX0VOQ09ERSBvciB3aGVuIG9uZQotCSAgd291bGQgd2FudCB0byB1c2UgdGhhdCBpbnN0ZWFkIG9mIEdTVF9TVFJFQU1fRVJST1JfRU5DT0RFLgotCi0yMDEwLTA5LTA2IDIwOjA2OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVycm9yLmM6Ci0JICBnc3RlcnJvcjogYXZvaWQgcG9pbnRsZXNzIHN0cmluZyBjb3B5aW5nCi0JICBUaGVyZSdzIG5vIG5lZWQgdG8gY3JlYXRlIHRoZXNlIHRhYmxlcyB3aXRoIGR1cGxpY2F0ZXMgb2YgdGhlCi0JICB1bnRyYW5zbGF0ZWQgZXJyb3IgbWVzc2FnZSBzdHJpbmcgY29uc3RhbnRzLCB3ZSBjYW4ganVzdCB1c2UKLQkgIG9sZC1mYXNoaW9uZWQgc3dpdGNoL2Nhc2UgYW5kIGNhbGwgZ2V0dGV4dCBkaXJlY3RseS4gVGhpcyBhbHNvCi0JICBtYWtlcyB0aGluZ3Mgc2xpZ2h0bHkgbW9yZSB0aHJlYWQgc2FmZSBhbmQgbW9yZSByb2J1c3QgdG8gYmFkCi0JICBpbnB1dCAoaW52YWxpZCBlcnJvciBjb2RlcykuCi0KLTIwMTAtMDktMDYgMTg6MzM6NTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgY2hlY2s6IEF2b2lkIGVycm9yOiBhcnJheSBzdWJzY3JpcHQgaXMgYWJvdmUgYXJyYXkgYm91bmRzCi0JICBDb3VsZCBoYXZlIGNvbWUgdXAgd2l0aCBzb21ldGhpbmcgYmV0dGVyIGZvciBteSAyMDAwdGggY29tbWl0Ci0JICB0byBHU3RyZWFtZXIuLi4KLQotMjAxMC0wOS0wNiAxNzowMToxOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBkb2NzOiBnaXZlIGEgcHJhY3RpY2FsIGV4YW1wbGUgZm9yIHRoZSBnc3Rfb2JqZWN0X2hhc19hbmNoZXN0b3IKLQotMjAxMC0wOS0wNiAxNDozMzo0NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgIGVsZW1lbnRmYWN0b3J5OiB1c2UgdGhlIHBhcmVudF9jbGFzcyBkZWZpbmVkIGJ5IEdfREVGSU5FX1RZUEUKLQotMjAxMC0wOS0wNiAxNDozMjowMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IHR1bmUgc2tpcHBpbmcgY2hlY2tzIGlmIHdlIGhhdmUgZGlzYWJsZWQgc3Vic3lzdGVtcwotCSAgU2tpcCBBQkkgdGVzdHMgaWYgc29tZSBzdWJzeXN0ZW1zIGFyZSBvZmYuIFJlbW92ZSBESVNBQkxFX0dTVF9ERUJVRyBmcm9tCi0JICBza2lwcGluZyBleHBvcnQgY2hlY2tzIGFzIHRoaXMgaXMgc2FmZSBub3cuCi0KLTIwMTAtMDktMDYgMTQ6MDk6NTIgKzAzMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeWNodW5rczogVXNlIHRoZSBjb3JyZWN0IHZhcmlhYmxlIGZvciBkZWJ1ZyBtZXNzYWdlCi0JICBEZWJ1ZyBwcmludCB3YXMgdXNpbmcgYSB2YXJpYWJsZSB0aGF0IHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0KLTIwMTAtMDgtMTAgMTQ6MDU6MjIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZWxlbWVudC1kZXRhaWxzOiBhbGxvdyBmb3IgYXJiaXRyYXJ5IGVsZW1lbnQgZGV0YWlscwotCSAgQWRkIGEgR3N0U3RydWN0dXJlIHRvIEdzdEVsZW1lbnRDbGFzcyBhbmQgR3N0RWxlbWVudEZhY3RvcnkuIEFkZCBzZXR0ZXJzL2dldHRlci4KLQkgIEhhbmRsZSBpdCBpbiB0aGUgcmVnaXN0cnkgY29kZS4gUHJpbnQgaXRlbXMgaW4gZ3N0LWluc3BlY3QuCi0JICBGaXhlcyAjMzk2Nzc0LgotCSAgQVBJOiBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YV9kYXRhKCksIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFfZGF0YV9kZXRhaWwoKQotCi0yMDEwLTA5LTA1IDE4OjU3OjU2IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGQzZDlhY2YgdG8gYzJlMTBiZgotCi0yMDEwLTA5LTA1IDEyOjEzOjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGNhMWM4NjcgdG8gZDNkOWFjZgotCi0yMDEwLTA5LTA1IDEwOjIyOjIwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBBZGQgbmV3IHN5bWJvbHMgZnJvbSBHc3RFbGVtZW50RmFjdG9yeUxpc3QKLQkgIEFuZCBoZXJlJ3MgYSByZW1pbmRlciBzaW5jZSBJIGZvcmdvdCB0byBwdXQgdGhlbSBpbiBteSBwcmV2aW91cwotCSAgY29tbWl0LgotCSAgQVBJOiBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyCi0JICBBUEk6IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMKLQkgIEFQSTogZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUKLQkgIEFQSTogZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZGVidWcKLQkgIEFQSTogZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jCi0JICBBUEk6IEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUKLQkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FOWQotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUwotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUgotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RBQkxFCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERVBBWUxPQURFUgotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUgotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRk9STUFUVEVSCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMKLQkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRQotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEEKLQkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1NVQlRJVExFCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTwotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQU5ZCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NVVhFUgotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFSU0VSCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIKLQkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTksKLQkgIEFQSTogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NSQwotCSAgQVBJOiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUgotCi0yMDEwLTA4LTMxIDExOjM3OjQyICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBidWZmZXJpbmdfcmFuZ2VzIHF1ZXJ5IHN1cHBvcnQKLQkgIEZpeGVzIGJ1ZyA2MjMxMjEKLQotMjAxMC0wOS0wMyAxOTo1ODo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgZ3N0cXVlcnk6IE9ubHkgZmlsbCB0aGUgc3RhcnQvc3RvcCB2YWx1ZXMgb2YgdGhlIGJ1ZmZlcmluZyByYW5nZXMgaWYgYSBub24tTlVMTCBwb2ludGVyIHdhcyBwcm92aWRlZAotCi0yMDEwLTA4LTMxIDExOjM1OjEyICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZ3N0cXVlcnk6IG5ldyBidWZmZXJpbmdfcmFuZ2VzIEFQSQotCSAgQWRkZWQgYSBuZXcgcXVlcnkgdHlwZSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGFyZWFzIG9mIHRoZQotCSAgbWVkaWEgY3VycmVudGx5IGJ1ZmZlcmVkLiBTZWUgYnVnIDYyMzEyMS4KLQkgIEFQSTogZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UKLQkgIEFQSTogZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMKLQkgIEFQSTogZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UKLQotMjAxMC0wOC0xNiAxOTowMToxNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JICBHc3RFbGVtZW50RmFjdG9yeTogQWRkIGxpc3RpbmcgZmVhdHVyZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYxODEKLQotMjAxMC0wOS0wMiAxMjo0NDowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgotCSAgZG9jczogbWVudGlvbiBHU1RfREVCVUdfT1BUSU9OUywgT1JDX0NPREUsIEdfREVCVUcgYW5kIEdfU0xJQ0UgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0JICBNZW50aW9uIGEgZmV3IG1vcmUgdXNlZnVsIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgJ1J1bm5pbmcgR1N0cmVhbWVyCi0JICBhcHBsaWNhdGlvbnMnIHNlY3Rpb24gb2YgdGhlIEFQSSByZWZlcmVuY2UuCi0KLTIwMTAtMDktMDIgMTQ6MTU6MjkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JICBmYWtlc3JjOiBmaXggdXNlIG9mIGVtcHR5IHN1YmJ1ZmZlcnMKLQkgIFJlbW92ZSBhIHNob3J0IGN1dCB0aGF0IHdhcyBpZ25vcmluZyBzcmMtPmRhdGEgYWxsb2NhdGlvbiBtb2RlLiBBbGwKLQkgIHRoZSBjYWxsZWQgY29kZS1wYXRoIGJlbG93IGhhbmRsZSBzaXplPT0wLgotCi0yMDEwLTA5LTAyIDAwOjAxOjI1ICswMTAwICBKZWZmcmV5IFMuIFNtaXRoIDx3aHlkb3VidEB5YWhvby5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0YnVmZmVybGlzdC5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKLQkgIEZpeCBjYXN0cyBpbiBhIGJ1bmNoIG9mIGlubGluZSBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gY29ycmVjdCBjb25zdC1uZXNzCi0JICBNYWtlIGNvZGUgaW5jbHVkaW5nIEdTdHJlYW1lciBoZWFkZXJzIGNvbXBpbGUgd2l0aCAtV2Nhc3QtcXVhbCBieQotCSAgbWFpbnRhaW5pbmcgY29uc3QtbmVzcyB3aGVuIGNhc3RpbmcuIEFsc28gZml4IGZ1bmN0aW9uIHNpZ25hdHVyZSBvZgotCSAgZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MoKTogdGhlIGJ5dGUgd3JpdGVyIHNob3VsZCBub3QgYmUgbWFya2VkIGFzCi0JICBjb25zdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjc5MTAKLQotMjAxMC0wOC0zMSAxODo0MDo0NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBidWlsZDogdXNlIG5ldyBBR19HU1RfUEtHX0NPTkZJR19QQVRIIG00IG1hY3JvIGZyb20gY29tbW9uCi0JICBTZXRzIHVwIGEgR1NUX1BLR19DT05GSUdfUEFUSCB2YXJpYWJsZSBmb3IgdXNlIGluIE1ha2VmaWxlLmFtCi0JICAoYXZvaWRzIHRyYWlsaW5nICc6JyBpbiBQS0dfQ09ORklHX1BBVEggdXNlZCkuIEEgdXNlZnVsIHNpZGUKLQkgIGVmZmVjdCBvZiB0aGlzIGlzIGFsc28gdGhhdCB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50Ci0JICBpcyBub3cgbG9nZ2VkIGluIHRoZSBjb25maWd1cmUgb3V0cHV0LgotCi0yMDEwLTA5LTAxIDExOjM0OjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1jbG9ja3MueG1sOgotCSAgbWFudWFsOiBpbXByb3ZlIGNsb2NrIGRvY3MgYSBsaXR0bGUKLQotMjAxMC0wOS0wMSAxMTowNjo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IEZpeCBtZW1vcnkgbGVha3MgaW4gdGhlIGludDY0cmFuZ2UgdGVzdHMKLQotMjAxMC0wOC0yNCAxMjoyNzozMCArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZ3N0dmFsdWU6IEFkZCBuZXcgR3N0SW50NjRSYW5nZSB0eXBlCi0JICBuZXcgR3N0SW50NjRSYW5nZSB0byBzdG9yZSBnaW50NjQgcmFuZ2VzLgotCSAgQVBJOiBHU1RfVFlQRV9JTlQ2NF9SQU5HRQotCSAgQVBJOiBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlCi0JICBBUEk6IGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluCi0JICBBUEk6IGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4Ci0JICBGaXhlcyBidWcgIzYyNzgyNi4KLQotMjAxMC0wOC0zMCAyMToyNjoxOCAtMDMwMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBkb2NzOiBUcml2aWFsIGNsZWFudXAgZm9yIEdTVF9ERUJVR19DQVRFR09SWV9HRVQKLQotMjAxMC0wOC0zMCAxNjowMjo1NSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IFJlLWluc3RhdGUgdGhlIGRlZmF1bHQgZm9yIGNvbG9yIHVzYWdlCi0JICBUaGlzIHdhcyBhY2NpZGVudGx5IHJlbW92ZWQgaW4gN2E3MjIwOTFiNmQxYjVkN2Y5NDA0ZmRlZjRjNjk1YTI5YTY1YTk4OQotCi0yMDEwLTA4LTMwIDEyOjQ3OjMxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgY2hlY2s6IFVzZSBnX3N0cmNtcDAgaW5zdGVhZCBvZiBzdHJjbXAKLQkgIEF2b2lkcyBzZWdmYXVsdHMgd2hlbiB1c2luZyBOVUxMIGFyZ3VtZW50cy4KLQotMjAxMC0wOC0yNyAxNTozNTo0OSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JICBxdWV1ZTogYWRkIHNpbGVudCBwcm9wZXJ0eSB0byBzdXBwcmVzcyBzaWduYWwgZW1pc3Npb24KLQkgIEFsbG93IHRvIHR1cm4gb2ZmIHNpZ25hbCBlbWlzc2lvbiBhbmQgdGhlcmVmb3JlIGV4dHJhIGxvY2tpbmcgaWYgdGhpcyBpcyBub3QgbmVlZGVkLgotCSAgRml4ZXMgIzYyMTI5OQotCi0yMDEwLTA4LTI4IDEwOjE2OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXRpbHM6IEFkZCBnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlKCkgdG8gdGhlIGRvY3MgYW5kIGV4cG9ydGVkIHN5bWJvbHMKLQotMjAxMC0wOC0yOCAxNzo1MToxNCArMTAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB0ZXN0czogUmVtb3ZlIGNoZWNrcyBmb3IgZGVwcmVjYXRlZCBmbG93IGNoZWNrIG1hY3JvcwotCSAgR1NUX0ZMT1dfSVNfRkFUQUwoKSBhbmQgR1NUX0ZMT1dfSVNfU1VDQ0VTUygpIGFyZSBkZXByZWNhdGVkLAotCSAgc28gYXJlbid0IGF2YWlsYWJsZSBmb3IgdGhlIHRlc3RzdWl0ZSBhbnkgbW9yZS4KLQotMjAxMC0wOC0yOCAwOTozNTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IEZpeCBpbnZlcnRlZCBhc3NlcnRpb24gbG9naWMgaW4gZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZSgpCi0KLTIwMTAtMDgtMjggMDk6MzA6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB1dGlsczogQWRkIGdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmUoKSB0byBjb21wYXJlIGZyYWN0aW9ucwotCSAgQW5kIHVzZSBpdCBmb3IgdGhlIGZyYWN0aW9uIGNvbXBhcmlzb25zIGluIGdzdHZhbHVlLmMgaW5zdGVhZAotCSAgb2YgdXNpbmcgY29tcGFyaXNvbnMgYnkgZmlyc3QgY29udmVydGluZyB0aGUgZnJhY3Rpb25zIHRvIGRvdWJsZS4KLQkgIFNob3VsZCBmaXggYnVnICM2MjgxNzQuCi0JICBBUEk6IGdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmUoKQotCi0yMDEwLTA4LTI4IDE3OjA0OjQzICsxMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9jYXBzbGlzdC5oOgotCSAgdGVzdHM6IEFkZCBhIGNvdXBsZSBvZiBleHRyYSBjYXBzIHN0cmluZ3MgdG8gdGVzdAotCi0yMDEwLTA4LTI3IDE2OjUyOjEyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBEb24ndCBkbyBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBsb29wIGZ1bmN0aW9uCi0JICBJbnN0ZWFkIHJldHVybiBhZnRlciBldmVyeSBpdGVyYXRpb24sIHdoaWNoIG1ha2VzIHN1cmUgdGhhdCB0aGUKLQkgIHN0cmVhbSBsb2NrIGlzIHJlbGVhc2VkIGZvciBhIHNob3J0IHRpbWUgYWZ0ZXIgZXZlcnkgaXRlcmF0aW9uLAotCSAgdGFzayBzdGF0ZSBjaGFuZ2VzIGFyZSBjaGVja2VkLCBldGMgYW5kIHRoaXMgYWxsb3dzIHRoZSB0YXNrCi0JICB0byBiZSBzdG9wcGVkIHByb3Blcmx5LgotCi0yMDEwLTA4LTI3IDE2OjQ5OjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBGbHVzaCB0aGUgZGF0YSBxdWV1ZSBpZiBkb3duc3RyZWFtIHJldHVybiBXUk9OR19TVEFURSB0b28KLQotMjAxMC0wOC0yNiAyMzozOTowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIGVsZW1lbnRzOiBTdG9wIHVzaW5nIEdTVF9GTE9XX0lTX0ZBVEFMKCkKLQotMjAxMC0wOC0yNiAyMzozNzowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZTogU3RvcCB1c2luZyBHU1RfRkxPV19JU19GQVRBTCgpCi0JICBBbmQgZG9jdW1lbnQgdGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgV1JPTkdfU1RBVEUuCi0KLTIwMTAtMDgtMjYgMjM6MDc6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IERlcHJlY2F0ZSBHU1RfRkxPV19JU19GQVRBTCgpIGFuZCBHU1RfRkxPV19JU19TVUNDRVNTKCkKLQkgIFRoZSBwcm9ibGVtIHdpdGggYm90aCBtYWNyb3MgaXMsIHRoYXQgdGhleSBzdWdnZXN0IHNvbWV0aGluZyB0aGF0IGlzbid0IHRydWUuCi0JICBJZiBHU1RfRkxPV19JU19GQVRBTCBpcyB0cnVlLCB0aGVyZSBjb3VsZCBzdGlsbCBiZSBhIHByb2JsZW0gZm9yIG1hbnkgZWxlbWVudHMKLQkgIGFuZCB0aGV5IHNob3VsZCBzdG9wIHdoYXQgdGhleSdyZSBjdXJyZW50bHkgZG9pbmcgYW5kIHJldHVybiB0aGF0IHZhbHVlCi0JICB1cHN0cmVhbSAoZS5nLiBub3QtbGlua2VkIGluIGEgcGFyc2VyKS4gSWYgR1NUX0ZMT1dfSVNfU1VDQ0VTUyBpcyBmYWxzZSwgaXQKLQkgIGNvdWxkIHN0aWxsIGJlIHRoYXQgdGhpcyBpcyAib2siIGZvciB0aGUgZWxlbWVudCAoZS5nLiBub3QtbGlua2VkIGZvciBhIGRlbXV4ZXIKLQkgIG9uIGEgZmV3IG9mIGl0cyBwYWRzIGJ1dCBub3QgYWxsKS4KLQkgIEl0J3MgYmV0dGVyIHRvIG5vdCBoYXZlIHRoZXNlICJjb252ZW5pZW5jZSIgbWFjcm9zIGJ1dCBpbnN0ZWFkIGxldCBwZW9wbGUKLQkgICp0aGluayogYWJvdXQgdGhlIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBmbG93IHJldHVybnMsIHRoYXQgbWFrZXMgc2Vuc2UgZm9yCi0JICB0aGVpciBlbGVtZW50LiBBbmQgd2Ugc2hvdWxkIGRvY3VtZW50IHRoZSBleHBlY3RlZCBoYW5kbGluZyBvZiBmbG93IHJldHVybnMgZm9yCi0JICBkaWZmZXJlbnQgY2xhc3NlcyBvZiBlbGVtZW50cyBpbiB0aGUgcGx1Z2luIHdyaXRlcidzIGd1aWRlLgotCSAgRml4ZXMgYnVnICM2MjgwMTQuCi0KLTIwMTAtMDgtMjcgMTE6MTE6MDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgZmFrZXNpbms6IGtlZXAgcHJvcGVydGllcyBpbiBvcmRlcgotCi0yMDEwLTA4LTI3IDEwOjIyOjI3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBBUkdfIC0+IFBST1BfIGZvciBwcm9wZXJ0eSBjb25zdGFudHMKLQotMjAxMC0wOC0yNiAxNzowNDoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZml4IG9uLWRpc2sgYnVmZmVyaW5nIGFnYWluCi0KLTIwMTAtMDgtMjYgMTU6MTI6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogcmVjb3ZlciBmcm9tIGludmFsaWQgZG93bnN0cmVhbSBzdWdnZXN0aW9ucwotCSAgV2hlbiB3ZSBhcmUgaGFuZGxpbmcgYSBidWZmZXIgYW5kIG5lZWQgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciwgaGFuZGxlIHRoZQotCSAgY2FzZSB3aGVuIGRvd25zdHJlYW0gc3VnZ2VzdHMgdXMgYSBmb3JtYXQgdGhhdCB3ZSBjYW4ndCBjb252ZXJ0IHRoZSBpbnB1dCBidWZmZXIKLQkgIHRvLiBJbiB0aGF0IGNhc2UsIGNoZWNrIGlmIHRoZXJlIGlzIGFub3RoZXIgZm9ybWF0IGF2YWlsYWJsZSBkb3duc3RyZWFtIGluc3RlYWQKLQkgIG9mIGZhaWxpbmcuCi0JICBGaXhlcyAjNjIxMzMyIGFuZCBzZWUgYWxzbyAjNjE0Mjk2Ci0KLTIwMTAtMDgtMjYgMTM6NDY6MzQgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIGdzdHBsdWdpbjogbG9hZCB0aGUgZ3N0LXB5dGhvbiBwbHVnaW4gbG9hZGVyIHdpdGggR19NT0RVTEVfQklORF9MQVpZLgotCi0yMDEwLTA4LTE2IDE0OjEyOjM1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnOiBBZGRzIEdTVF9UQUdfQVBQTElDQVRJT05fREFUQQotCSAgQWRkcyBHU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEEgZm9yIHJlcHJlc2VudGluZyBhcmJpdHJhcnkgcHJpdmF0ZQotCSAgZGF0YSB0aGF0IGFwcGxpY2F0aW9ucyBtaWdodCB3YW50IHRvIHN0b3JlIGludG8gdGFncy4gRXhpZi9pZDMsCi0JICBmb3IgZXhhbXBsZSwgaGF2ZSB0YWdzIGZvciB0aGlzLgotCSAgQVBJOiBHU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEEKLQkgIEZpeGVzICM2MjY2NTEKLQotMjAxMC0wOC0yNCAxMjo0NjozOCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIGdzdC1sYXVuY2g6IEZpeCBPSUxfQ1BVX0ZMQUdTIGRvY3MgZm9yIE9yYwotCi0yMDEwLTA4LTI0IDE2OjI0OjE5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIG1hbjogcmVtb3ZlIE9JTF9DUFVfRkxBR1MgZnJvbSBtYW4gcGFnZQotCSAgV2UncmUgdXNpbmcgT1JDIGluc3RlYWQgb2YgbGliT2lsIG5vdy4KLQotMjAxMC0wOC0yMyAxODoyMDoyMyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBWYWxncmluZCBkZWZpbmUgaXMgSEFWRV9WQUxHUklORF9WQUxHUklORF9ICi0KLTIwMTAtMDctMjcgMTg6MjQ6NDQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgQWxsb3cgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCgpIGJlZm9yZSBnc3RfaW5pdCgpCi0JICBDYWxsaW5nIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQoKSBiZWZvcmUgaW5pdGlhbGl6YXRpb24KLQkgIHNlZW1zIGxpa2UgdGhlICJvYnZpb3VzIiBvcmRlci4KLQotMjAxMC0wOC0yMyAxMzowNjoxOSArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnQGF4aXMuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOgotCSAgcXVldWU6IGZpeCBzZWdmYXVsdCBpbiB0ZXN0Ci0KLTIwMTAtMDgtMjMgMTA6NTg6MTYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkgIHJlZ2lzdHJ5Y2h1bmtzOiBpbnRlcm4gYWxsIEdzdFBsdWdpbkRlc2MgbWVtYmVycyB3aGVuIHVucGFja2luZwotCi0yMDEwLTA4LTIzIDEwOjU2OjMwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgZ3N0b2JqZWN0OiBmaXggbGVhayB3aGVuIG5hbWluZyBwYXJlbnRlZCBvYmplY3QKLQotMjAxMC0wOC0yMCAwMzowNzo1OCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdDogQWRkIGEgZ3N0X2lzX2luaXRpYWxpemVkKCkgQVBJCi0JICBGb3Igb25lLCB0aGlzIHdpbGwgYWxsb3cgbGlicmFyaWVzIHRoYXQgZXhwZWN0IGFwcGxpY2F0aW9ucyB0bwotCSAgaW5pdGlhbGl6ZSBHU3RyZWFtZXIgYmVmb3JlIHVzaW5nIHRoZWlyIEFQSSB0byBoYXZlIGEgY2hlY2sgZm9yIHRoaXMKLQkgIGNvbmRpdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjc0MzgKLQotMjAxMC0wOC0yMCAxODowNDo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiByZWxheCB0aGUgc291cmNlIGVsZW1lbnQgY2hlY2sKLQkgIFdoZW4gdGhlcmUgaXMgYSBzaW5rIGluc2lkZSBhIGJpbiwgdGhlIFNJTksgZmxhZyBpcyBzZXQgb24gdGhlIGJpbi4gV2hlbiB3ZSBhcmUKLQkgIHRyeWluZyB0byBpdGVyYXRlIHRoZSBzb3VyY2UgZWxlbWVudHMsIGFsc28gaW5jbHVkZSB0aGUgYmlucyB3aXRoIHRoZSBTSU5LIGZsYWcKLQkgIGJlY2F1c2UgdGhleSBjb3VsZCBhbHNvIGNvbnRhaW4gc291cmNlIGVsZW1lbnRzLCBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIGFsc28gYQotCSAgc291cmNlLgotCSAgVGhpcyBzb2x2ZXMgdGhlIGNhc2Ugd2hlcmUgc2VuZGluZyBhbiBFT1MgdG8gYSBwaXBlbGluZSBkaWRuJ3QgZ2V0IGRpc3BhdGNoZWQgdG8KLQkgIGFsbCBzb3VyY2UgZWxlbWVudHMuCi0JICBTZWUgIzYyNTU5NwotCi0yMDEwLTA4LTE5IDE3OjA3OjAwICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXMuaG9sbWJlcmdAYXhpcy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JICBxdWV1ZTogYWRkZWQgdW5pdCB0ZXN0IGZvciBuZXdzZWdtZW50IGV2ZW50cwotCi0yMDEwLTAzLTA1IDE3OjE4OjIzICswMTAwICBKb25hcyBIb2xtYmVyZyA8am9uYXMuaG9sbWJlcmdAYXhpcy5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKLQkgIHF1ZXVlOiBQdXNoIG5ld3NlZ21lbnQgd2hlbiBsaW5raW5nIGluIFBMQVlJTkcKLQkgIEZpeGVzICM2MTE5MTgKLQotMjAxMC0wOC0xMiAyMDoyMzo0NSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZWxlbWVudDogbGlua19tYW55IHNob3VsZCBhY3RpdmF0ZSBwYWRzIGlmIG5lZWRlZAotCSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IGRvZXMgc29tZSBtYWdpYyBhbmQgY3JlYXRlcyBnaG9zdHBhZHMKLQkgIGlmIG5lZWRlZCwgYnV0IGl0IGRpZG4ndCBzZXQgdGhlIG5ld2x5IGNyZWF0ZWQgZ2hvc3RwYWQgdG8KLQkgIGFjdGl2ZSBpZiBuZWVkZWQuIFRoaXMgcGF0Y2ggZml4ZXMgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2Nzg0Ci0KLTIwMTAtMDgtMTkgMTE6MTE6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkgIGRhdGV0aW1lOiBGaXggbWVtb3J5IGxlYWsgaW4gdGhlIHVuaXQgdGVzdCBieSB1bnJlZmZpbmcgR3N0RGF0ZVRpbWUgaW5zdGFuY2UgYWZ0ZXIgdXNhZ2UKLQotMjAxMC0wOC0xOSAxMDowMzowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzoKLQkgIHRlc3RzOiBmaXggY29tbWVudHMgaW4gdGVzdAotCi0yMDEwLTA4LTE5IDA5OjU4OjU1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBVc2UgR19HVUlOVDY0X0ZPUk1BVCB3aGVyZSBuZWVkZWQKLQkgIEZpeGVzIGJ1aWxkIG9uIG1hY29zeAotCi0yMDEwLTA4LTE4IDE1OjMxOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGNoZWNrOiBlbmFibGUgcXVldWUgdGVzdCBhZ2FpbgotCi0yMDEwLTA4LTE4IDE1OjEyOjQ1ICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXMuaG9sbWJlcmdAYXhpcy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JICBxdWV1ZTogZml4ZWQgcmFjeSB1bml0IHRlc3RzCi0JICBGaXhlcyAjNjAwMDA0Ci0KLTIwMTAtMDgtMTYgMTg6MDE6MjcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICBwbHVnaW5zOiBhZGQgZXhhbXBsZSBsYXVuY2ggbGluZXMgYW5kIG1vcmUgZXhwbGFuYXRpb24gdG8gdGhlIGRvY3MuCi0JICBUaGUgcGx1Z2lucyB3aGVyZSBhbG1vc3QgdW5kb2N1bWVudGVkIDovIC4uLgotCi0yMDEwLTA4LTEzIDE2OjE5OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggY29tcGlsYXRpb24KLQotMjAxMC0wNy0wNyAwODoyMDoyMSArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBGaXggYSBzcGVjaWFsIGNhc2UgZHVyaW5nIHJhbmdlIG1hbmFnZW1lbnQKLQkgIFdoZW4gYSByYW5nZSBjb250YWluZWQgbm8gZGF0YSwgaWYgaXQgd2FzIG5ldyBvciBuZXdseSBlbXB0eSwgaXQgd291bGQKLQkgIGJlIG1pc2hhbmRsZWQgaWYgaXQgd2VyZSB0aGUgY3VycmVudCByYW5nZS4KLQotMjAxMC0wNy0wNSAxMzo0MzowNSArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggbG9ja2luZyBhcm91bmQgaW5pdF9yYW5nZXMKLQkgIFRoaXMgZml4ZXMgYSBzZWdmYXVsdCB3aGVyZSB0aGUgcmVhZHkgdG8gcGF1c2VkIHN0YXRlIGNoYW5nZSBjYXVzZXMKLQkgIGZyZWVpbmcgYW5kIGFsbG9jYXRpb24gb2YgbmV3IHJhbmdlcyB3aGlsZSBhbm90aGVyIHRocmVhZCBpcyB0cnlpbmcgdG8KLQkgIHVzZSB0aGVtLgotCi0yMDEwLTA3LTAyIDE3OjQwOjA4ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IE1vcmUgcmluZyBidWZmZXIgZml4ZXMKLQkgIC0gU2V0IHJlYWRpbmdfcG9zIGNvcnJlY3RseSBpbiBfY3JlYXRlX3JlYWQgKCkKLQkgIC0gU2VlayB0byBkYXRhIGlmIGl0IGlzIGZ1cnRoZXIgdGhhbiBRVUVVRV9NQVhfQllURVMgKHF1ZXVlKSAtCi0JICBjdXJfbGV2ZWwuYnl0ZXMgYXdheS4gVGhpcyBzaG91bGQgYXZvaWQgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHJpbmcKLQkgIGJ1ZmZlciBpcyBmdWxsIGJ1dCB0aGUgZGF0YSBvZmZzZXQgZnJvbSB3aGljaCB3ZSBzaGFsbCByZWFkIGlzIG5vdCBpbgotCSAgdGhlIHJpbmcgYnVmZmVyLgotCSAgLSBPbmx5IHVwZGF0ZSB0aGUgbWF4X3JlYWRpbmdfcG9zIHRvIGEgbG93ZXIgdmFsdWUgdG8gcHJvdGVjdCBkYXRhIHdoZW4KLQkgIG5lY2Vzc2FyeQotCSAgLSBBbHdheXMgc2lnbmFsIGFuIEFERCBpbiBfbG9ja2VkX2VucXVldWUgKCkgc28gdGhhdCBhbiBFT1MgdW5sb2NrcyB0aGUKLQkgIHJlYWRlcgotCSAgLSBNb3JlIHVzZWZ1bCBkZWJ1ZyBvdXRwdXQKLQotMjAxMC0wNi0yOCAxNzo1MDowNiArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiByaW5nIGJ1ZmZlciBmaXhlcwotCSAgT25lIG11c3Qgbm90IGFmZmVjdCB0aGUgdmFsdWVzIG9mIHRoZSBjdXJyZW50IHJhbmdlIGJhc2VkIG9uIGEgcmVhZAotCSAgcmVxdWVzdCBiZWZvcmUgdGhlIGNvcnJlY3QgcmFuZ2UgaXMgYWN0aXZhdGVkLgotCi0yMDEwLTA2LTI1IDEyOjU4OjI3ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IEZpeCBidWdzCi0JICB1cGRhdGVfYnVmZmVyaW5nICgpIG5lZWRzIHRvIGJlIGNhbGxlZCBldmVyeSB0aW1lIHdlIHdyaXRlIHRvIHRoZSByaW5nCi0JICBidWZmZXIgc28gdGhhdCBhcHBsaWNhdGlvbnMgZG9uJ3QgZ2V0IHN0dWNrIHdhaXRpbmcgZm9yIGEgMTAwJSBidWZmZXJlZAotCSAgbWVzc2FnZSB3aGlsZSBxdWV1ZTIgaXMgd2FpdGluZyBmb3Igc3BhY2UKLQkgIF9jcmVhdGVfd3JpdGUgKCkgbXVzdCBvbmx5IGJlIGNhbGxlZCBmb3IgdGVtcCBmaWxlL3JpbmcgYnVmZmVyIGNhc2VzCi0KLTIwMTAtMDYtMTggMTc6NDM6NDAgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IGV4dGVuZCByaW5nIGJ1ZmZlciB0byBzdXBwb3J0IHJhbSBtb2RlCi0KLTIwMTAtMDYtMTggMTQ6MzY6MzMgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogbWVyZ2Ugd3JpdGUgYnVmZmVyIGZ1bmN0aW9ucyBhbmQgZml4IGJ1Z3MKLQkgIENhY2hlZCBkYXRhIGNvdWxkIGhhdmUgYmVlbiBvdmVyd3JpdHRlbiBzbyBpdCBpcyBub3cgcHJvdGVjdGVkIHVudGlsCi0JICBpdCBpcyByZWFkLiBTaW1pbGFybHkgZGF0YSB3YXMgb3ZlcnJlYWQgYXMgX2hhdmVfZGF0YSAoKSB3YXMgYWx3YXlzCi0JICBsb29raW5nIGZvciB0aGUgb3JpZ2luYWxseSByZXF1ZXN0ZWQgZGF0YSBldmVuIGlmIHBhcnQgb2YgaXQgaGFkIGJlZW4KLQkgIHJlYWQgYWxyZWFkeS4KLQotMjAxMC0wNi0xNyAxMDoxODo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogc21hbGwgY2xlYW51cAotCi0yMDEwLTA2LTE2IDE4OjI1OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBjbGVhbnVwIHdyaXRlX3RvX3JpbmdfYnVmZmVyCi0JICBVc2UgY3VyX2xldmVsLmJ5dGVzIHRvIHNlZSBob3cgbXVjaCBzcGFjZSBpcyBmcmVlIGluIHRoZSByaW5nYnVmZmVyLgotCSAgU2ltcGx5ZnkgdGhlIHdyaXRlIGZ1bmN0aW9uLCBhdm9pZCB0YWtpbmcgc3ViYnVmZmVycywgbW92ZSB3YWl0aW5nIGZvciBmcmVlCi0JICBzcGFjZSBpbiBvbmUgc3BvdCwgdXNlIHNpbXBseSBjb3VudGVyIHRvIHdyaXRlIGRhdGEgb2YgYSBidWZmZXIuCi0KLTIwMTAtMDYtMTYgMTc6MDM6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGNsZWFudXBzCi0JICBBZGQgYSBtYWNybyB0byBnZXQgdGhlIG1heCBzaXplIG9mIHRoZSBxdWV1ZSBpbiBieXRlcywgd2hpY2ggZGVwZW5kcyBvbiB0aGUKLQkgIG1heF9sZXZlbC5ieXRlcyBhbmQgdGhlIHJpbmdfYnVmZmVyX21heF9zaXplLgotCSAgU29tZSBjbGVhbnVwcy4KLQotMjAxMC0wNi0xNiAxNjoyMzowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQotMjAxMC0wNi0xNiAxNjoxMzoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogY2xlYW51cHMKLQkgIE1ha2Ugc3VyZSB0aGUgY3VyX2xldmVsLmJ5dGVzIGlzIHVwZGF0ZWQgYWZ0ZXIgd2UgY2hhbmdlIHRoZSB3cml0aW5nX3BvcyBvciB0aGUKLQkgIG1heF9yZWFkaW5nX3Bvcy4KLQkgIFJlZmFjdG9yIGdldF9mcmVlX3NwYWNlKCkKLQkgIEFkZCBzb21lIGNvbW1lbnRzCi0KLTIwMTAtMDYtMTYgMTI6MDA6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IHJlbW92ZSB1bm5lZWRlZCBzaWduYWwKLQotMjAxMC0wNi0xNiAxMjowMDozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogc2V0IGJ1ZmZlcmluZyBtb2RlIGNvcnJlY3RseQotCi0yMDEwLTA2LTE2IDExOjIwOjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggY2FsY3VsYXRpb24gb2YgYXZhaWxhYmxlIHJpbmdidWZmZXIgZGF0YQotCi0yMDEwLTA2LTE2IDExOjExOjMyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiByZWFkaW5nX3BvcyBpcyB1cGRhdGVkIGluIGNyZWF0ZV9yZWFkIG9ubHkKLQotMjAxMC0wNi0xNiAxMToxMToxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogcmVmYWN0b3IgYW5kIGFkZCBkZWJ1ZwotCi0yMDEwLTA2LTE2IDExOjEwOjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggZmx1c2hpbmcKLQotMjAxMC0wNi0xNiAxMTowOToyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogYWRkIGRlYnVnCi0KLTIwMTAtMDYtMTUgMTc6MjY6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGRvbid0IHRyeSB0byB3cml0ZSAwIGJ5dGVzCi0KLTIwMTAtMDYtMTUgMTY6MTI6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI7IGNsZWFudXBzIGFuZCBmaXhlcwotCSAgTWFrZSBhIG1hY3JvIGZvciBzb21lIGZyZXF1ZW50IGNoZWNrcwotCSAgRW1pdCB0aGUgcmVtb3ZlZCBzaWduYWwgaW4gYWxsIGNhc2VzIHdoZW4gd2UgcmVtb3ZlIHNvbWV0aGluZwotCi0yMDEwLTA2LTE1IDEyOjM3OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiByZWZhY3RvcmluZ3MKLQkgIENoZWNrIGFuZCBoYW5kbGUgc2VlayBlcnJvcnMKLQkgIFJlZmFjdG9yIHRoZSB3YWl0X2ZyZWVfc3BhY2UgZnVuY3Rpb24uCi0KLTIwMTAtMDYtMTYgMTI6MjQ6MjUgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogVXNlIHJpbmctYnVmZmVyLW1heC1zaXplIHByb3AgdG8gY29udHJvbCByaW5nIGJ1ZmZlcgotCi0yMDEwLTA2LTA2IDA5OjMwOjQ4ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IENsZWFuIHVwIGFuZCBpbXByb3ZlIGNvZGUKLQotMjAxMC0wNS0yNiAwNDoxMTo0OCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBGaXggY29uZGl0aW9ucyB3aGVyZSBiZWhhdmlvdXIgc2hvdWxkIGRpZmZlciBiZXR3ZWVuIHJpbmcgYnVmZmVyIGFuZCB0ZW1wIGZpbGUKLQotMjAxMC0wNS0xOSAxNjowNDoxNSArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBhZGQgdXNlZnVsIGRlYnVnIG1lc3NhZ2VzIGFuZCBmaXggYW4gYXNzdW1wdGlvbiBpbiBfaGF2ZV9kYXRhICgpCi0KLTIwMTAtMDUtMTggMTc6NDI6MDcgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZml4IGJ1ZmZlcmluZyBwZXJjZW50YWdlIGluIHJpbmcgYnVmZmVyIG1vZGUKLQotMjAxMC0wNS0xOCAxNzoyMTo0MCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiB2YXJpb3VzIHJpbmcgYnVmZmVyIGZpeGVzCi0JICAtIG1ha2UgX2dldF9yYW5nZSAoKSBlbWl0IHRoZSBkZWwgc2lnbmFsIG9uY2UgYSBidWZmZXIgaGFzIGJlZW4gcmVhZAotCSAgLSB1c2UgZG8ge30gd2hpbGUgKCk7IGZvciB3YWl0IGNvZGUgYXMgcXVldWUgaXMgbG9ja2VkIGFuZCBubyBkYXRhIGNvdWxkCi0JICBoYXZlIGJlZW4gcmVhZCBpbiB0aGUgbWVhbiB0aW1lIHNvIGl0IG1ha2VzIG5vIHNlbnNlIHRvIGNoZWNrIGJlZm9yZQotCSAgd2FpdGluZwotCSAgLSBtYWtlIF9pc19maWxsZWQgKCkgbW9yZSByb2J1c3QKLQotMjAxMC0wNS0wNyAwOTozMDo0NCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKLQkgIHF1ZXVlMjogcmluZyBidWZmZXIgd29yayBpbiBwcm9ncmVzcwotCi0yMDEwLTA1LTA1IDEwOjIxOjU1ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBBZGQgdXNlLXJpbmctYnVmZmVyIGFuZCByaW5nLWJ1ZmZlci1tYXgtc2l6ZSBwcm9wZXJ0aWVzCi0KLTIwMTAtMDYtMTUgMDg6NTk6MTEgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogYWRkIFNULUVyaWNzc29uIGNvcHlyaWdodAotCi0yMDEwLTA4LTEzIDE3OjIzOjMxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAzZThkYjFkIHRvIGVjNjAyMTcKLQotMjAxMC0wOC0xMiAyMjowODo0NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogeHJlZnMgZ2xpYiBzeW1ib2wgaW4gZG9jcwotCi0yMDEwLTA4LTEyIDE2OjA1OjM1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgZ3N0Y29sbGVjdHBhZHM6IEZpeCBkb2NzIGFib3V0IEdzdENvbGxlY3REYXRhIGxpc3QKLQkgIEFkZCB0byB0aGUgZG9jcyB0aGUgZmFjdCB0aGF0IGlzIG9ubHkgc2FmZSB0byBpdGVyYXRlCi0JICBHc3RDb2xsZWN0UGFkJ3MgZGF0YSBsaXN0IGluc2lkZSB0aGUgY29sbGVjdGVkIGNhbGxiYWNrLgotCSAgRml4ZXMgIzYxMDM2NgotCi0yMDEwLTA4LTEwIDEwOjU2OjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGJkMjA1NGIgdG8gM2U4ZGIxZAotCi0yMDEwLTA4LTA0IDExOjI0OjEyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnOiBBZGRzIEdTVF9UQUdfQVBQTElDQVRJT05fTkFNRSB0YWcKLQkgIEFkZHMgYSBuZXcgdGFnIGZvciByZXByZXNlbnRpbmcgYXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUKLQkgIGEgbWVkaWEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYwMjcKLQotMjAxMC0wOC0wOCAxNzo1Nzo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JICBidWZmZXJsaXN0OiBJbml0aWFsaXplIHRoZSBHVHlwZSBjYWNoZSBmb3IgdGhlIGJ1ZmZlcmxpc3QgYWdhaW4KLQkgIFRoaXMgd2FzIGFjY2lkZW50aWFsbHkgcmVtb3ZlZCB3aXRoIGxhc3QgY29tbWl0LgotCi0yMDEwLTA4LTA2IDE5OjM4OjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkgIGJ1ZmZlcmxpc3Q6IERvbid0IGNoYWluIHVwIGZpbmFsaXplIHRvIHRoZSBwYXJlbnQgY2xhc3MKLQkgIEdzdE1pbmlPYmplY3Q6OmZpbmFsaXplIGRvZXMgbm90aGluZyBhbmQgdGhpcyBwcmV2ZW50cyBhCi0JICBydW50aW1lLXR5cGUtY2hlY2sgY2FzdCBhbmQgZnVuY3Rpb24gY2FsbCBwZXIgYnVmZmVyIGxpc3QuCi0KLTIwMTAtMDctMjAgMDk6MjM6MTEgLTA1MDAgIFNoaXhpbiBaZW5nIDx6ZW5nLnNoaXhpbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3Q6IG1ha2UgX2dldF90eXBlKCkgaW4gZ3N0LyogdGhyZWFkIHNhZmUKLQkgIFRoaXMgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgaGVyZSBiZWNhdXNlIGV2ZXJ5dGhpbmcgaXMKLQkgIGluaXRpYWxpemVkIGZyb20gZ3N0X2luaXQoKSBhbHJlYWR5IGJ1dCB1c2luZyBHX0RFRklORV9UWVBFKCkKLQkgIHJlbW92ZXMgc29tZSBjb3B5JnBhc3RlIGJvaWxlcnBsYXRlIGNvZGUuCi0KLTIwMTAtMDgtMDYgMTk6MzQ6NDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6Ci0JICBwbHVnaW5zOiBBZGQgZGVjbGFyYXRpb25zIGZvciBfZ2V0X3R5cGUoKSBmdW5jdGlvbnMgdG8gZml4IGNvbXBpbGVyIHdhcm5pbmdzCi0KLTIwMTAtMDctMjAgMDk6MjM6NTQgLTA1MDAgIFNoaXhpbiBaZW5nIDx6ZW5nLnNoaXhpbkBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzoKLQkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0bWVtaW5kZXguYzoKLQkgIHBsdWdpbnM6IE1ha2UgKl9nZXRfdHlwZSgpIGluIHBsdWdpbnMvKiB0aHJlYWQgc2FmZQotCSAgSXQncyBub3QgcmVhbGx5IG5lZWRlZCBoZXJlIGJ1dCB1c2luZyBHX0RFRklORV9UWVBFKCkgcmVkdWNlcwotCSAgc29tZSBjb3B5JnBhc3RlIGJvaWxlcnBsYXRlIGNvZGUuCi0KLTIwMTAtMDgtMDYgMTg6NDM6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IE1ha2Ugc3VyZSB0aGUgYnVmZmVyIG1ldGFkYXRhIGlzIHdyaXRhYmxlIGJlZm9yZSBjaGFuZ2luZyBpdAotCi0yMDEwLTA4LTA1IDEzOjU2OjExICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAyMDA0ZDAzIHRvIGJkMjA1NGIKLQotMjAxMC0wOC0wNSAxMDowNDo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IHNwZWVkIHVwIHBhZCBsaW5raW5nIHV0aWxpdHkgZnVuY3Rpb25zIGJ5IG5vdCB0cnlpbmcgcGFkcyB0aGF0IHdpbGwgbmV2ZXIgd29yawotCSAgSW4gZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkKCksIHdoZW4gdHJ5aW5nIHRvIGZpbmQgYSBjb21wYXRpYmxlIHBhZCBvbiBhbgotCSAgZWxlbWVudCBmb3IgYSBnaXZlbiBwYWQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY2hlY2tpbmcgdGhlIGVsZW1lbnQncyBzaW5rIHBhZHMKLQkgIGlmIHRoZSBwYWQgdG8gbGluayBpcyBhIHNpbmsgcGFkIGFzIHdlbGwsIG9yIHRoZSBlbGVtZW50J3Mgc291cmNlIHBhZHMgaWYgdGhlCi0JICBnaXZlbiBwYWQgaXMgYSBzb3VyY2UgcGFkIGFscmVhZHksIHNpbmNlIHRob3NlIHdvdWxkIG5ldmVyIGJlIGFibGUgdG8gbGluawotCSAgYW55d2F5LiBTaG91bGQgc3BlZWQgdXAgbGlua2luZyB1c2luZyB0aGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIGEgbGl0dGxlIGJpdCwKLQkgIG9yIGF0IGxlYXN0IHJlZHVjZSBkZWJ1ZyBsb2cgb3V0cHV0LgotCi0yMDEwLTA4LTA1IDEwOjMyOjUzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiB0YWtlIHRoZSB0aW1lc3RhbXAgYSB0aWNrIGxhdGVyCi0JICBUaGUgbG9nZ2luZyBpcyBub3QgYW4gYXRvbWljIG9wZXJhdGlvbiBhbmQgYmVjYXVzZSBvZiB0aGUgbXVsdGktdGhyZWFkaW5nIHdlIGVuZAotCSAgdXAgd2l0aCBvdXQtb2Ytb3JkZXIgbG9nIGxpbmVzLiBUb29scyB0aGF0IHByZXNlbnQgdGhlIGxvZy1maWxlIHNob3VsZCBwcm9iYWJseQotCSAgcmVzb3J0IHRoZSBsaW5lcy4gVGhpcyBjaGFuZ2UganVzdCB0YWtlcyB0aGUgdGltZXN0YW1wIGEgYml0IGNsb3NlciB0byB0aGUKLQkgIGFjdHVhbCBsb2dnaW5nLgotCi0yMDEwLTA4LTA1IDA5OjM2OjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBkZWJ1ZzogbG9nZ2luZyBpbXByb3ZlbWVudHMKLQkgIFVzZSB0aGUgZXZlbnQgc2VyaWFsaXNhdGlvbi4gTG9nIGZvcm1hdHMgbmFtZSBpbnN0ZWFkIG9mIG51bWJlci4KLQotMjAxMC0wNy0xNSAxNTo0NjoyNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBkb24ndCB1c2UgYysrIGtleXdvcmRzIGFzIHZhcmlhYmxlIG5hbWVzCi0KLTIwMTAtMDctMTUgMTE6Mzc6MzAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBsb2cgc2VlayBldmVudCBkZXRhaWxzCi0KLTIwMTAtMDctMTIgMTA6NTA6NTMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6Ci0JICBtYW51YWw6IHVwZGF0ZSBnc3QtY29udHJvbGxlciBjaGFwdGVyCi0JICBUaGUgZG9jcyB3ZXJlIHN0aWxsIGRlc2NyaWJpbmcgZGVwcmVjYXRlZCBhcGkuIFVwZGF0ZSBpdCB0byB0ZWxsIGFib3V0Ci0JICBjb250cm9sLWNvdXJjZXMuCi0KLTIwMTAtMDctMDkgMTU6NTg6NTAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2xhdW5jaC9tcDNwYXJzZWxhdW5jaC5jOgotCSogdGVzdHMvZXhhbXBsZXMvcXVldWUvcXVldWUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL2ZyYW1lc3RlcDEuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvc3RyZWFtLXN0YXR1cy5jOgotCSogdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvdHlwZWZpbmQuYzoKLQkgIHRlc3RzOiBjbGVhbiB1cCBldmVudGxvb3AgaW4gZXhhbXBsZXMKLQkgIERvbid0IGxlYWsgdGhlIGJ1cy4gRG9uJ3QgcGFyc2UgbWVzc2FnZXMgd2l0aCB0aGUgbWV0aG9kIGZvciBlcnJvcnMgKHRyaWdnZXJzCi0JICBnb2JqZWN0IHdhcm5pbmcpLgotCi0yMDEwLTA3LTA4IDE0OjA4OjI3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvY2Fwc25lZ28uYzoKLQkgIGJlbmNobWFyazogaGFuZGxlIGVycm9ycyBmcm9tIHRoZSBwaXBlbGluZQotCSAgQ2F0Y2ggZXJyb3JzIGFuZCB3YXJuaW5ncyBvbiB0aGUgYnVzLiBUaGlzIGZpeGVzIGhhbmdpbmcgcGlwZWxpbmVzIGluIHRoZSBjYXNlCi0JICBvZiBidWdzIGVsc2V3aGVyZS4gQWxzbyBwcmludCBzdGF0ZS1jaGFuZ2UgbWVzc2FnZXMgdG8gZ2l2ZSBtb3JlIGRldGFpbCBvbiB0aGUgcHJvZ3Jlc3MuCi0KLTIwMTAtMDctMDYgMTg6MjA6NDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jOgotCSAgYmVuY2htYXJrOiBjbGVhbnVwIGxhc3QgY2hhbmdlIGluIGNhcHNuZWdvIGJlbmNobWFyawotCSAgQSBwYWQgbmFtZSBpcyBub3QgYSBmYWN0b3J5IG5hbWUuCi0KLTIwMTAtMDctMDYgMTQ6Mjk6MzkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhcnNlLmM6Ci0JICBkb2NzOiBtb3JlIGRvY3MgZm9yIGdzdF9wYXJzZV9sYXVuY2ggYW5kIGNvCi0JICBUZWxsIGFib3V0IGxpbWl0ZWQgcmV1c2FiaWxpdHkgb2Ygc29tZSBwYXJzZWQgcGlwZWxpbmVzLgotCi0yMDEwLTA3LTA1IDE2OjMyOjAwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBpbnNwZWN0OiBwYWQgaW5mbyBvdXRwdXQgaW1wcm92ZW1lbnRzCi0JICBEb24ndCBwcmludCBlbXB0eSBxdWVyeSB0eXBlcy4gQWxzbyBwcmludCBjYXBzLXZtZXRob2RzLgotCi0yMDEwLTA3LTA2IDE2OjQ3OjIyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogbG9nIGVsZW1lbnQ6cGFkIG5hbWVzIHdpdGggY2FwcwotCi0yMDEwLTA2LTMwIDExOjQ2OjExICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IGJldHRlciBlcnJvciBsb2dnaW5nIGluIGxpbmtfcGFkc19maWx0ZXJlZAotCi0yMDEwLTA2LTI0IDEwOjAwOjA0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgotCSAgdGVzdHM6IGFkZCBjb21tZW50cyB0ZWxsaW5nIHRoZSBtZWFuaW5nIG9mIHRoZSBhYmJyZXZpYXRpb25zCi0KLTIwMTAtMDctMDUgMTI6MTk6MjkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBhdm9pZCBzb21lIGNhcHMgbWFuaXB1bGF0aW9uCi0JICBBZnRlciB0aGUgaW50ZXJzZWN0IHdlIGhhdmUgd3JpdGFibGUgY2Fwcy4gQ29weSB0aGUgdGVtcGxhdGUgY2FwcyBzbyB0aGF0IGFsc28KLQkgIHRoZXJlIHdlIGhhdmUgd3JpdGFibGUgY2Fwcy4KLQotMjAxMC0wOC0wNSAwMTowOTowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSAgdGVzdHM6IGFkZCBiYXNpYyB1bml0IHRlc3QgZm9yIGdzdF9wYWRfcHJveHlfZ2V0Y2FwcygpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI0MjAzCi0KLTIwMTAtMDgtMDUgMDE6MDY6NTcgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBnc3R1dGlsczogTWFrZSBnc3RfcGFkX3Byb3h5X2dldGNhcHMoKSByZXR1cm4gZW1wdHkgY2FwcyBpZiBpdCdzIHdoYXQgdGhlIG90aGVyIHNpZGUgaGFzCi0JICBnc3RfcGFkX3Byb3h5X2dldGNhcHMoKSB3b3VsZCByZXR1cm4gdGhlIHBhZCB0ZW1wbGF0ZSBjYXBzIGlmIHRoZSBvdGhlciBzaWRlCi0JICByZXR1cm5lZCBlbXB0eSBjYXBzIG9yIGlmIHRoZSBpbnRlcnNlY3Rpb24gb2YgYWxsIHRoZSBjYXBzIG9uIHRoZSBvdGhlciBzaWRlCi0JICB3YXMgZW1wdHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI0MjAzCi0KLTIwMTAtMDgtMDQgMTk6MTk6NTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBJU08gQzg5IG9yIEM5OSBhbmQgd2hpY2ggcGFyYW1ldGVycyBhcmUgcmVxdWlyZWQKLQkgIFRoaXMgZmlyc3QgY2hlY2tzIHdoYXQgaXMgcmVxdWlyZWQgZm9yIElTTyBDOTkgc3VwcG9ydCBhbmQgc2V0cyB0aGUgcmVsZXZhbnQKLQkgIGNvbXBpbGVyIHBhcmFtZXRlcnMgYW5kIGlmIG5vIEM5OSBjb21waWxlciBpcyBmb3VuZCwgaXQgY2hlY2tzIGZvciBhCi0JICBDODkgY29tcGlsZXIuIFRoaXMgZW5hYmxlcyB1cyB0byBjaGVjayBmb3IgYW5kIHVzZSBDODkvQzk5IGZ1bmN0aW9ucwotCSAgdGhhdCBnY2MgaGlkZXMgZnJvbSB1cyB3aXRob3V0IHRoZSBjb3JyZWN0IGNvbXBpbGVyIHBhcmFtZXRlcnMuCi0KLTIwMTAtMDgtMDQgMTM6NDc6MjMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkgIGJ5dGVyZWFkZXI6IEZpeCBkb2NzCi0JICBGaXggdHlwbyBpbiBkb2NzIGZvciB0aGUgdW5zaWduZWQgcGVlayBmdW5jdGlvbnMKLQotMjAxMC0wNy0wNSAxMDowMDowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0OiByZW1vdmUgXG4gZnJvbSBkZWJ1ZyBzdGF0ZW1lbnRzCi0KLTIwMTAtMDgtMDMgMTE6Mzc6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZG9jczogZml4IGJ1aWxkIHdpdGggZ3RrLWRvYyBmcm9tIGdpdAotCSAgRm9yIHNvbWUgcmVhc29uIHRoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCBpcwotCSAgbm93IHBpY2tlZCB1cCwgd2hpY2ggdGhlbiBicmVha3MgdGhlIGJ1aWxkIGJlY2F1c2UgaXQncyBub3QgZG9jdW1lbnRlZCwKLQkgIHNvIGFkZCBpdCB0byB0aGUgc2VjdGlvbnMgZmlsZS4KLQkgIEJhc2VkIG9uIHBhdGNoIGJ5IFbDrWN0b3IgTWFudWVsIErDoXF1ZXogTGVhbCA8dmphcXVlekBpZ2FsaWEuY29tPi4KLQkgIEZpeGVzICM2MjU4NjIuCi0KLTIwMTAtMDctMTUgMjM6MDU6MDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBhZGQgY29tbWVudCBhbmQgbW9yZSBsb2dnaW5nCi0KLTIwMTAtMDctMjkgMTc6Mjc6MDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBkb3dubG9hZCBtb2RlOyBwcmV2ZW50IHJhbmdlIGNvcnJ1cHRpb24gZHVlIHRvIHJhY2UKLQkgIEN1cnJlbnQgcmFuZ2Ugd2FzIGJlaW5nIHVwZGF0ZWQgaW4gdGhlIHRocmVhZCBwZXJmb3JtaW5nIHNlZWssIGJ1dCBhcwotCSAgbm8gbG9ja3Mgd2VyZSBrZXB0IGZvciBhIHNob3J0IHNlY3Rpb24sIGRhdGEgZmxvdyBjb3VsZCByZXN1bWUgYmVmb3JlCi0JICBjdXJyZW50IHJhbmdlIHVwZGF0ZWQsIHNvIGRhdGEgZm9yIHRoZSBuZXcgcmFuZ2Ugd291bGQgYmUgYWNjZXB0ZWQgYXMKLQkgIGZyb20gdGhlIHByZXZpb3VzIHJhbmdlLgotCSAgUmF0aGVyLCByYW5nZSBzaG91bGQgYmUgdXBkYXRlZCBpbiBzZXJpYWxpemVkIG1hbm5lciBiYXNlZCBvbgotCSAgbmV3c2VnbWVudCBldmVudC4KLQotMjAxMC0wNS0yMiAxNjozMzoxMSAtMDUwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm0gZml4IGZvciB1cHN0cmVhbSBjYXBzLXJlbmVnb3RpYXRpb24KLQkgIElmIGluaXRpYWxseSBwYXNzLXRocm91Z2ggY2FwcyBhcmUgbmVnb3RpYXRlZCBiZXR3ZWVuIGEgdHJhbnNmb3JtIGVsZW1lbnQncwotCSAgc2luayBhbmQgc3JjIHBhZHMsIGJ1dCB0aGVuIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQgcmV0dXJucyBkaWZmZXJlbnQgY2FwcwotCSAgb24gYSBidWZmZXIgZnJvbSBwYWRfYWxsb2MoKSwgYmFzZXRyYW5zZm9ybSBnZXRzIHN0dWNrIHdpdGggcHJveHlfYWxsb2M9VFJVRQotCSAgZXZlbiB0aG91Z2ggdGhlIHVwc3RyZWFtIHBlZXIgZG9lc24ndCBhY2NlcHQgdGhlIGNhcHMsIGNhdXNpbmcKLQkgIGdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcygpIHRvIGJlIGNhbGxlZCBvbiBlYWNoIGJ1ZmZlciBpbiBfYnVmZmVyX2FsbG9jKCk6Ci0JICBpZiAoIWdzdF9jYXBzX2lzX2VxdWFsIChuZXdjYXBzLCBjYXBzKSkgewotCSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJjYXBzIGFyZSBuZXciKTsKLQkgIC8qIHdlIGhhdmUgbmV3IGNhcHMsIHNlZSBpZiB3ZSBjYW4gcHJveHkgZG93bnN0cmVhbSAqLwotCSAgPj4gICAgaWYgKGdzdF9wYWRfcGVlcl9hY2NlcHRfY2FwcyAocGFkLCBuZXdjYXBzKSkgewotCSAgLyogcGVlciBhY2NlcHRzIHRoZSBjYXBzLCByZXR1cm4gYSBidWZmZXIgaW4gdGhpcyBmb3JtYXQgKi8KLQkgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAicGVlciBhY2NlcHRlZCBuZXcgY2FwcyIpOwotCSAgd2hpY2ggaXMgdGFraW5nIH40MG1zL2ZyYW1lLgotCSAgVGhpcyBwYXRjaCBkb2VzIHR3byB0aGluZ3MuICAoMSkgaWYgdGhlIGJ1ZmZlciByZXR1cm5lZCBmcm9tIHBhZF9hbGxvYygpIGhhcwotCSAgbmV3IGNhcHMsIHRyaWdnZXIgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdG8gcHJveHkgdGhlIGJ1ZmZlci1hbGxvYyB0byBiZQotCSAgcmV2aXNpdGVkLCBhbmQgKDIpIGRpc2FibGUgcHJveHkgaWYgcGVlciBkb2VzIG5vdCBhY2NlcHQgbmV3IGNhcHMuICAoVGhlIGZpcnN0Ci0JICBwYXJ0IG1heSBub3QgYmUgc3RyaWN0bHkgbmVlZGVkLCBidXQgc2VlbWVkIGxpa2UgYSBnb29kIGlkZWEuKQotCSAgTm90ZSB0aGF0IHRoaXMgaXNzdWUgd291bGQgbm90IGFyaXNlIGV4Y2VwdCBpbiBjYXNlIG9mIGRvd25zdHJlYW0gZWxlbWVudHMKLQkgIHdobyBoYXZlIG9uIHRoZWlyIHRlbXBsYXRlLWNhcHMsIHNvbWUgdGhhdCB3b3VsZCBiZSBzdWl0YWJsZSBmb3IgcGFzcy10aHJvdWdoLAotCSAgYnV0IGF0IHJ1bnRpbWUgcGljayBtb3JlIHJlc3RyaWN0aXZlIGNhcHMgKGZvciBleCwgYWZ0ZXIgcXVlcnlpbmcgYSBkcml2ZXIgZm9yCi0JICB3aGF0IGZvcm1hdHMgaXQgYWN0dWFsbHkgc3VwcG9ydHMpLgotCi0yMDEwLTA3LTI3IDE0OjMwOjUxICswMjAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IGZpeCBjb21waWxhdGlvbiBvbiB3aW5kb3dzCi0JICBGaXggbWlzbWF0Y2hlZCBicmFja2V0cyAoIzYyNTI5NSkuCi0KLTIwMTAtMDctMjcgMDc6MjE6MTkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkgIGdzdGRhdGV0aW1lOiBGaXggbG9jYWx0aW1lIHVzYWdlCi0JICBsb2NhbHRpbWUgb25seSB0YWtlcyBvbmUgcGFyYW1ldGVyIGFuZCByZXR1cm5zIGEgc3RhdGljYWxseQotCSAgYWxsb2NhdGVkIHRtIHN0cnVjdC4gVXNlIGl0IGNvcnJlY3RseS4KLQkgIEZpeGVzICM2MjUzNjgKLQotMjAxMC0wMy0yOSAxODowNTo0MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBUcnkgc3VnZ2VzdGluZyBjYXBzIG9uIGJhZCBjYXBzIHBhZF9hbGxvYwotCSAgV2hlbiBiYXNldHJhbnNmb3JtIHJlY2VpdmVkIGFuIHVuc3VwcG9ydGVkIGNhcHMgb24gcGFkX2FsbG9jCi0JICBpdCBqdXN0IHJldHVybmVkIG5vdC1uZWdvdGlhdGVkLiBUaGlzIHBhdGNoIG1ha2VzIGl0IHF1ZXJ5Ci0JICB0aGUgYWxsb3dlZCBjYXBzIGJldHdlZW4gaGlzIHNpbmtwYWQgYW5kIHVwc3RyZWFtJ3Mgc3JjcGFkCi0JICB0byBmaW5kIGEgY2FwcyB0byBzdWdnZXN0LgotCSAgVGhpcyBoYXBwZW5zIHdoZW4gZGluYW1pY2FsbHkgc3dpdGNoaW5nIHBpcGVsaW5lIGVsZW1lbnRzCi0JICBhbmQgdXBzdHJlYW0gcGFkX2FsbG9jcyB3aXRoIHRoZSBwcmV2aW91cyBjYXBzIHRoYXQgd2FzCi0JICBiZWluZyB1c2VkLgotCSAgRml4ZXMgIzYxNDI5NgotCi0yMDEwLTA3LTI2IDE4OjUzOjU3ICswMjAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IGZsdXNoIGFnYWluIGFmdGVyIGV2ZXJ5IGxpbmUgb2YgZGVidWcgb3V0cHV0Ci0JICBnX3ByaW50ZXJyKCkgdXNlZCB0byBkbyB0aGlzIGZvciB1cy4gQWxzbyB1c2UgbGliYydzIGZwcmludGYoKSBmdW5jdGlvbnMsCi0JICB0byBtYWtlIHN1cmUgdGhlIHN0ZGVyciBwb2ludGVyIHdlIHVzZSBpcyBhY3R1YWxseSBjb21wYXRpYmxlIHdpdGggdGhlCi0JICBsaWJjIGxpbmtlZCBhZ2FpbnN0IGJ5IEdTdHJlYW1lciAod2hpY2ggYXBwYXJlbnRseSBtYXkgbm90IGFsd2F5cyBiZSB0aGUKLQkgIHNhbWUgYXMgd2hhdCBHTGliIGlzIGxpbmtlZCBhZ2FpbnN0IG9uIHdpbmRvd3MpLCBhbmQgd2UgZG9uJ3QgbmVlZCB0aGUKLQkgIGZ1bmN0aW9uYWxpdHkgZW5zdXJlZCBieSBnX2ZwcmludGYoKS4KLQkgIEZpeGVzICM2MjUyOTUuCi0KLTIwMTAtMDctMjYgMTg6NTM6MzUgKzAyMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIGZvciBuZXcgc3RyaW5ncwotCi0yMDEwLTA2LTIzIDExOjMxOjMzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogQWRkcyB0ZXN0cyBmb3IgZGF0ZXRpbWUKLQkgIEFkZHMgdGVzdHMgZm9yIGRhdGV0aW1lIGZpZWxkcyBpbiBnc3R2YWx1ZSB0ZXN0cwotCSAgRml4ZXMgIzU5NDUwNAotCi0yMDEwLTA2LTIzIDExOjMwOjAyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZ3N0c3RydWN0dXJlOiBBZGRzIGRhdGV0aW1lIGdldHRlciBmdW5jdGlvbgotCSAgQWRkcyBnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUgZnVuY3Rpb24KLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lCi0JICBGaXhlcyAjNTk0NTA0Ci0KLTIwMTAtMDYtMjEgMjM6NDI6NDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWc6IEFkZHMgR1NUX1RBR19EQVRFX1RJTUUgdGFnCi0JICBBZGRzIGEgbmV3IHRhZyB0aGF0IHJlcHJlc2VudHMgYSBkYXRlIGFuZCB0aW1lIGEgbWVkaWEgd2FzCi0JICBjcmVhdGVkCi0JICBBUEk6IEdTVF9UQUdfREFURV9USU1FCi0JICBGaXhlcyAjNTk0NTA0Ci0KLTIwMTAtMDctMjEgMjI6MDg6MjEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHRhZ2xpc3Q6IEFkZCBkYXRldGltZSBnZXQgZnVuY3Rpb25zCi0JICBBZGRzIF9kYXRlX3RpbWVfZ2V0IGFuZCBfZGF0ZV90aW1lX2dldF9pbmRleCBmdW5jdGlvbnMgdG8KLQkgIHRhZ2xpc3QuCi0JICBBUEk6IGdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lCi0JICBBUEk6IGdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4Ci0JICBGaXhlcyAjNTk0NTA0Ci0KLTIwMTAtMDctMjEgMjI6MDQ6MjMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0ZGF0ZXRpbWUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdHZhbHVlOiBBZGRzIGRhdGV0aW1lIGZ1bmN0aW9ucwotCSAgQWRkcyBhIGRhdGV0aW1lIGZ1bmN0aW9ucyB0byBnc3R2YWx1ZQotCSAgRml4ZXMgIzU5NDUwNAotCi0yMDEwLTA3LTE2IDE0OjA5OjEyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3RkYXRldGltZS5jOgotCSogZ3N0L2dzdGRhdGV0aW1lLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdGRhdGV0aW1lOiBBZGRzIEdzdERhdGVUaW1lCi0JICBBZGRzIEdzdERhdGVUaW1lIHRvIHJlcHJlc2VudCBkYXRlcyArIHRpbWUgKyB0aW1lem9uZQotCSAgaW5mb3JtYXRpb24uCi0JICBUZXN0cyBpbmNsdWRlZC4KLQkgIEFQSTogR3N0RGF0ZVRpbWUKLQkgIEFQSTogZ3N0X2RhdGVfdGltZV9nZXRfZGF5Ci0JICBBUEk6IGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoCi0JICBBUEk6IGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIKLQkgIEFQSTogZ3N0X2RhdGVfdGltZV9nZXRfaG91cgotCSAgQVBJOiBnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZAotCSAgQVBJOiBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUKLQkgIEFQSTogZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kCi0JICBBUEk6IGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQKLQkgIEFQSTogZ3N0X2RhdGVfdGltZV9uZXcKLQkgIEFQSTogZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZQotCSAgQVBJOiBnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2gKLQkgIEFQSTogZ3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWUKLQkgIEFQSTogZ3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YwotCSAgQVBJOiBnc3RfZGF0ZV90aW1lX3JlZgotCSAgQVBJOiBnc3RfZGF0ZV90aW1lX3VucmVmCi0JICBGaXhlcyAjNTk0NTA0Ci0KLTIwMTAtMDctMjYgMTQ6NTk6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IEZpeCB1c2FnZSBvZiBnbGliX2NoZWNrX3ZlcnNpb24oKQotCSAgSXQgcmV0dXJucyBOVUxMIGlmIHRoZSBpbnN0YWxsZWQgR0xpYiB2ZXJzaW9uIGlzIGFzIGxlYXN0IGFzCi0JICBuZXcgYXMgdGhlIHJlcXVpcmVkIHZlcnNpb24gYW5kIHNvbWUgZXhwbGFuYXRvcnkgc3RyaW5nIG90aGVyd2lzZS4KLQotMjAxMC0wNy0yMyAyMDo0NjoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29sczogbWFrZSBnc3QtaW5zcGVjdCBwcmludCB0aGUgcmVsZWFzZSBkYXRlIHRpbWUgc3RhbXAKLQotMjAxMC0wNi0yMSAxNzozNDo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogdXNlIG5ldyBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRV9XSVRIX05BTk8gbWFjcm8KLQotMjAxMC0wNi0yMCAwMTo1NTowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICBiaW5hcnlyZWdpc3RyeTogc2F2ZSBhbmQgbG9hZCByZWxlYXNlIGRhdGUgdGltZSBpbiBHc3RQbHVnaW5EZXNjCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzMDQwCi0KLTIwMTAtMDYtMjAgMDA6MzM6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6Ci0JICBwbHVnaW46IGFkZCByZWxlYXNlIGRhdGV0aW1lIGZpZWxkIHRvIEdzdFBsdWdpbkRlc2MgYW5kIHNldCBpdCBpZiBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIGlzIGRlZmluZWQKLQkgIFRoaXMgaXMgYSBzdHJpbmcgZGVzY3JpYmluZyBhIGRhdGUgYW5kL29yIGRhdGUvdGltZSBpbiBhIHNpbXBsZSBzdWJzZXQgb2YKLQkgIHRoZSBJU08tODYwMSBmb3JtYXQsIG5hbWVseSBlaXRoZXIgIllZWVktTU0tREQiIG9yICJZWVlZLU1NLUREVEhIOk1NWiIgKHdpdGgKLQkgICdUJyB0aGUgZGF0ZS90aW1lIHNlcGFyYXRvciBhbmQgdGhlICdaJyBpbmRpY2F0aW5nIFVUQykuCi0JICBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZmllbGQgaXMgdG8ga2VlcCB0cmFjayBvZiBwbHVnaW4gYW5kIGVsZW1lbnQgdmVyc2lvbnMKLQkgIG9uIGFuIGFic29sdXRlIHRpbWVsaW5lLCBzbyBpdCdzIHBvc3NpYmxlIHRvIGRldGVybWluZSB3aGljaCBvbmUgaXMgbmV3ZXIgd2hlbgotCSAgY29tcGFyaW5nIHR3byBkYXRlIHRpbWUgbnVtYmVycy4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGV4cHJlc3MgJ3JlcGxhY2VzJy10eXBlCi0JICByZWxhdGlvbnNoaXBzIGJldHdlZWVuIHBsdWdpbnMgYW5kIGVsZW1lbnQgZmFjdG9yaWVzIGluIGZ1dHVyZSwgZXZlbiBhY3Jvc3MKLQkgIGRpZmZlcmVudCBtb2R1bGVzIGFuZCBwbHVnaW4gbWVyZ2VzIG9yIHNwbGl0cyAoc291cmNlIG1vZHVsZSB2ZXJzaW9uIG51bWJlcnMKLQkgIGFyZW4ndCBwYXJ0aWN1bGFybHkgdXNlZnVsIGhlcmUsIHNpbmNlIHRoZXkgY2FuIG9ubHkgbWVhbmluZ2Z1bGx5IGJlIGNvbXBhcmVkCi0JICB3aXRoaW4gdGhlIHNhbWUgbW9kdWxlKS4gSXQgYWxzbyBhbGxvd3MgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgdG8gcmVsaWFibHkKLQkgIGNoZWNrIHRoYXQgYSBwbHVnaW4gaXMgcmVjZW50IGVub3VnaCB3aXRob3V0IG1ha2luZyBhc3N1bXB0aW9ucyBhYm91dCBtb2R1bGVzCi0JICBvciBtb2R1bGUgdmVyc2lvbnMuCi0JICBXZSB1c2UgYSBzdHJpbmcgaGVyZSB0byBrZWVwIHRoaW5ncyBzaW1wbGUgYW5kIGNsZWFyLCBlc3AuIG9uIHRoZSBidWlsZCBzeXN0ZW0KLQkgIHNpZGUgb2YgdGhpbmdzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzA0MAotCi0yMDEwLTA3LTIwIDA5OjI1OjIwIC0wNTAwICBTaGl4aW4gWmVuZyA8emVuZy5zaGl4aW5AZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cHJlc2V0LmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkgIHRlc3RzOiBtYWtlICpfZ2V0X3R5cGUoKSBpbiB0ZXN0cyB0aHJlYWQgc2FmZQotCSAgRXZlbiBpZiBpdCBzaG91bGRuJ3QgYmUgbmVlZGVkIGhlcmUuIFNlZSAjNjIzNDkxLgotCi0yMDEwLTA2LTA0IDExOjI0OjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IHdyaXRlIGRlYnVnZ2luZyBvdXRwdXQgdG8gZmlsZSBpZiBHU1RfREVCVUdfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQKLQkgIFRoaXMgY2hhbmdlcyBiZWhhdmlvdXIgc2xpZ2h0bHkgaW4gdGhhdCB3ZSBubyBsb25nZXIgb3V0cHV0IHRoaW5ncwotCSAgdmlhIGdfcHJpbnRlcnIoKSwgc28gYW55IG5vbi1zdGFuZGFyZCBnbGliIHByaW50ZXJyIGhhbmRsZXJzIGFyZSBubwotCSAgbG9uZ2VyIGNhbGxlZCB3aGVuIEdTVF9ERUJVRyBpcyBlbmFibGVkLiBIb3dldmVyLCB0aGlzIHNlZW1zIG5vdAotCSAgcmVhbGx5IGRlc2lyYWJsZSBpbiBtb3N0IGNhc2VzIGFueXdheSwgYW5kIHRoZSBHTGliIGRvY3MgYWxzbyBzYXkKLQkgIHRoYXQgbGlicmFyaWVzIHNob3VsZCBub3QgdXNlIGdfcHJpbnRlcnIoKSBmb3IgbG9nZ2luZy4KLQkgIE90aGVyIHN0ZGVyciBvdXRwdXQgKGUuZy4gd2FybmluZ3MsIG9yIGFwcGxpY2F0aW9uIG1lc3NhZ2VzKSB3aWxsCi0JICBvZiBjb3Vyc2Ugbm90IGJlIGNhcHR1cmVkIGluIHRoZSBsb2cgZmlsZSB0aGlzIHdheS4KLQkgIEdTVF9ERUJVR19GSUxFPS0gd2lsbCByZWRpcmVjdCBkZWJ1ZyBvdXRwdXQgdG8gc3Rkb3V0LgotCi0yMDEwLTA3LTIwIDIwOjQ5OjEyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBnc3RwYWQ6IEFzc3VtZSBwYWRzIGFyZSBjb21wYXRpYmxlIGlmIHdlIGRvbid0IGhhdmUgdGVtcGxhdGVzCi0JICBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW91ciBhcyBpZiB3ZSBoYWQgYSBwYWQgdGVtcGxhdGUgY2FwcyBvZgotCSAgR1NUX0NBUFNfQU5ZIG9uIGFueSBvZiB0aGUgcGFkcyAoaS5lLiB0aGUgYWN0dWFsIGNoZWNrIHdpbGwgYmUgZG9uZQotCSAgZHVyaW5nIGNhcHMgbmVnb3RpYXRpb24pLgotCi0yMDEwLTA3LTE3IDIxOjI4OjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBBbGxvdyB0aGUgc3ViY2xhc3MgdG8gYWRkIG5ldyBmaWVsZHMgdG8gY2FwcyB3aGVuIGdldHRpbmcgbmV3IGNhcHMgZnJvbSBkb3duc3RyZWFtCi0JICBUaGlzIHdhcyBhbHJlYWR5IGRvbmUgaW4gYWxsIG90aGVyIGNhc2VzIHdoZXJlIG5ldyBjYXBzIGFyZSBoYW5kbGVkCi0JICBleGNlcHQgdXBzdHJlYW0gbmVnb3RpYXRpb24uCi0KLTIwMTAtMDctMTIgMTQ6Mzk6MDAgKzAyMDAgIE1pY2hhZWwgQnVuayA8YnVua0BpYXQudW5pLWxlaXB6aWcuZGU+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1jbG9ja3MueG1sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtbWV0YWRhdGEueG1sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtdGhyZWFkcy54bWw6Ci0JKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSogZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbDoKLQkqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6Ci0JICBkb2NzOiBmaXggc29tZSB0eXBvcyBhbmQgYWRkIHNvbWUgbWlzc2luZyBsaW5rcyBpbiB0aGUgYXBwIGRldiBtYW51YWwKLQkgIEZpeGVzICM2MjQxNjQuCi0KLTIwMTAtMDctMTIgMTQ6MjI6NTAgKzAyMDAgIE1pY2hhZWwgQnVuayA8YnVua0BpYXQudW5pLWxlaXB6aWcuZGU+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LjEuaW46Ci0JICBkb2NzOiBmaXggdHlwbyBvbiBnc3QtaW5zcGVjdCBtYW4gcGFnZQotCSAgU2VlICM2MjQxNjQuCi0KLTIwMTAtMDctMDMgMTU6MDg6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgZ3N0Y2hlY2s6IGZpeCBzb21lIHNpbGx5IGxpc3QgaXRlcmF0aW9uIGNvZGUKLQkgIGdfbGlzdF9sZW5ndGgoKSBpcyBub3QgdGhlIGJlc3Qgd2F5IHRvIGNoZWNrIGlmIGEgbGlzdCBpcyBlbXB0eSBvciBub3QuCi0KLTIwMTAtMDctMTYgMTc6NTM6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5OiB1c2UgR1N0YXRCdWYgdW5jb25kaXRpb25hbGx5IGFuZCBhZGQgdHlwZWRlZiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLQkgIE5vIG5lZWQgdG8gY2x1dHRlciB0aGUgY29kZSB3aXRoICNpZiAjZWxzZSAjZW5kaWYuCi0JICBTZWUgIzYyMzg3NS4KLQotMjAxMC0wNy0xNiAxNzozMzozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkgIHN0cnVjdHVyZTogVXNlIGEgY29uc3QgR3N0U3RydWN0dXJlICogYXMgcGFyYW1ldGVyIGZvciBzb21lIG1vcmUgZ3N0X3N0cnVjdHVyZV9nZXQgdmFyaWFudHMKLQotMjAxMC0wNy0xNCAxOTo0Nzo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIFJldmVydCAiLWxhdW5jaDogZGlzYWJsZSBDTE9DS19MT1NUIG1lc3NhZ2UgaGFuZGxpbmciCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDFmOGViYTYxMWE2M2Y0NTc2NmMzOGM2NDAyODhlNDJiMjdiMTBiZDQuCi0JICBUaGlzIHNob3VsZCBiZSBmaXhlZCBub3cgKGFuZCBpZiBub3Qgc2hvdWxkIGJlIGZpeGVkKSBhbmQgdGhlCi0JICBjbG9jay1sb3N0IGhhbmRsaW5nIGlzIG5vdyBuZWVkZWQgZm9yIHBsYXliaW4yIGdhcGxlc3MgcGxheWJhY2suCi0JICBTZWUgYnVnICM1NzkxMjcuCi0KLTIwMTAtMDctMDggMjE6MDQ6NTQgKzAyMDAgIERhdmlkIEhveXQgPGRob3l0QGxsbmwuZ292PgotCi0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgcmVnaXN0cnliaW5hcnk6IEZpeCBjb21wYXRpYmlsaXR5IHdpdGggR0xpYiAyLjI1IHdoZW4gdXNpbmcgTVNWQwotCSAgTmV3ZXIgR0xpYiB1c2VzIGEgbmV3IHR5cGUgZm9yIGdfc3RhdCgpIGFuZCBmcmllbmRzIHRvIGltcHJvdmUKLQkgIFdpbmRvd3MgY29tcGF0aWJpbGl0eS4gT24gUE9TSVggdGhpcyBpcyBhIHR5cGVkZWYgdG8gc3RydWN0IHN0YXQuCi0JICBGaXhlcyBidWcgIzYyMzg3NS4KLQotMjAxMC0wNy0wOCAwNzo0ODowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSAgcGlwZWxpbmU6IElmIHRoZSBjdXJyZW50bHkgdXNlZCBjbG9jayBnZXRzIGxvc3QgdXBkYXRlIGl0IHRoZSBuZXh0IHRpbWUgd2hlbiBnb2luZyBmcm9tIFBBVVNFRCB0byBwbGF5aW5nCi0JICBGaXhlcyBidWcgIzYyMzgwNi4KLQotMjAxMC0wNy0wNSAxOTozMzowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogUmV0dXJuIHZhbHVlcyBpbiBzdHJlYW0gdGltZSBmb3IgdGhlIFBPU0lUSU9OIHF1ZXJ5Ci0JICBGaXhlcyBidWcgIzYyMzYyMi4KLQotMjAxMC0wNy0wNSAxODo1NDo0NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBJbXBsZW1lbnQgR3N0RWxlbWVudDo6Z2V0X3F1ZXJ5X3R5cGVzKCkKLQotMjAxMC0wNy0wNiAxMDoxMzowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBPbmx5IGFuc3dlciB0aGUgU0VHTUVOVCBxdWVyeSBpbiBwdWxsIG1vZGUKLQkgIE90aGVyd2lzZSB0aGUgZWxlbWVudCBoYW5kbGluZyB0aGUgc2Vla3Mgc2hvdWxkIGFuc3dlciB0aGlzIHF1ZXJ5LgotCSAgRml4ZXMgYnVnICM2MjM2MjIuCi0KLTIwMTAtMDctMDUgMTA6MzY6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEltcGxlbWVudCBQT1NJVElPTiBxdWVyeQotCSAgRml4ZXMgYnVnICM2MjM1NDEuCi0KLTIwMTAtMDYtMjUgMTY6MzE6MDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIEdzdFBhZDogRG8gbm90IGNhbGwgZ3N0X3BhZF9hY2NlcHRfY2FwcygpIHdoZW4gY2FwcyBjaGFuZ2UKLQkgIEluc3RlYWQganVzdCBjaGVjayB0aGF0IHRoZSBjYXBzIGludGVyc2VjdCB3aXRoIHRoZSBwYWQgdGVtcGxhdGUuCi0JICBUaGUgZWxlbWVudHMgc2hvdWxkIHByb3Blcmx5IGFjY2VwdC9yZWZ1c2UgdGhlIGNhcHMgaW4gc2V0Y2FwcygpLgotCSAgU2hhdmVzIG9mZiBjYWxsaW5nIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGFjY2VwdGNhcHMgd2hpY2ggZG9lcwotCSAgYW4gZXhwZW5zaXZlIGdzdF9wYWRfZ2V0X2NhcHMoKSAoc28gaWYgeW91IGhhdmUgNTAgb2YgdGhvc2UgZWxlbWVudHMgaW4KLQkgIGEgcm93LCB5b3UnZCBiZSBkb2luZyBmYWN0b3JpYWwoNTApIGdzdF9wYWRfZ2V0X2NhcHMuLi4pLgotCSAgRG9lcyBub3QgYnJlYWsgYW55IG1vZHVsZSB1bml0IHRlc3QgYW5kIG1vc3QgYXBwcyB3b3JrIGZpbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyNzQwCi0KLTIwMTAtMDctMDggMTY6MjQ6MjEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IEFkZCBtb3JlIGRldGFpbHMgYWJvdXQgZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkCi0KLTIwMTAtMDctMTYgMTE6MTY6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQuCi0KLT09PSByZWxlYXNlIDAuMTAuMzAgPT09Ci0KLTIwMTAtMDctMTQgMjM6NTk6NDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDAuMTAuMzAKLQotMjAxMC0wNy0xNCAxNzo1ODoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2RlLnBvOgotCSogcG8vaWQucG86Ci0JKiBwby96aF9DTi5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTAtMDctMTUgMTI6MDE6MjQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiByZW1vdmUgY29tbWEgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBlbnVtIHZhbHVlCi0JICBGaXhlcyB0aGUgYnVpbGQgZm9yIGMrKy4KLQotMjAxMC0wNy0xMSAxOTowMDo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkgIGNoZWNrczogYWRkIHVuaXQgdGVzdCBmb3IgcmVjZW50IHRhZ2xpc3QgbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hIGZpeAotCSAgU2VlICM2MjQxMTMuCi0KLTIwMTAtMDctMTEgMTg6NTk6NTMgKzAxMDAgIEVkdWFyZG8gRG9iYXkgPGVkdWRvYmF5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ2xpc3Q6IGZpeCBtZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEoKSBmb3IgbW9yZSB0aGFuIHR3byBzdHJpbmdzCi0JICBGaXhlcyAjNjI0MTEzLgotCi0yMDEwLTA3LTA4IDEzOjQ2OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgotCSAgLmdpdGlnbm9yZTogaWdub3JlIG5ldyBiYXNlc2luayB1bml0IHRlc3QgYmluYXJ5Ci0KLTIwMTAtMDctMDggMTM6NDM6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICB0b29sczogcmVtb3ZlIC1wIHNob3J0aGFuZCBmb3IgLS1uby1zaWd1c3ItaGFuZGxlcgotCSAgSXQncyBub3QgcmVhbGx5IG5lZWRlZCwgYW5kIGRvZXNuJ3QgbWFwIGFueSBsb25nZXIgYWZ0ZXIgdGhlIGxvbmcgb3B0aW9uCi0JICBoYXMgYmVlbiByZW5hbWVkLgotCi0yMDEwLTA3LTA2IDE1OjQ3OjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMjkuNCBwcmUtcmVsZWFzZQotCSAgQWxzbyBidW1wIGxpYnRvb2wgdmVyc2lvbnMgbm93ICh3aGljaCBJIG1lYW50IHRvIGRvIGZvciB0aGUgZmlyc3QKLQkgIHByZS1yZWxlYXNlIGJ1dCBmb3Jnb3QpLgotCi0yMDEwLTA3LTA2IDIzOjQ0OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vemhfQ04ucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEwLTA3LTA2IDE2OjIxOjA1ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNpbmsuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGJhc2VzaW5rOiBhZGQgYWNjZXNzb3JzIGZvciB0aGUgZW5hYmxlLWxhc3QtYnVmZmVyIHByb3BlcnR5LgotCSAgQVBJOiBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9lbmFibGVkCi0JICBBUEk6IGdzdF9iYXNlX3NpbmtfaXNfbGFzdF9idWZmZXJfZW5hYmxlZAotCi0yMDEwLTA3LTA2IDEyOjE4OjQ1ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogYWRkIG5ldyBlbmFibGUtbGFzdC1idWZmZXIgcHJvcGVydHkuCi0JICBBZGQgYSBuZXcgZW5hYmxlLWxhc3QtYnVmZmVyIHByb3BlcnR5LiBXaGVuIGZhbHNlLCBpdCBkaXNhYmxlcyBzdG9yaW5nIHRoZSBsYXN0Ci0JICByZWNlaXZlZCBidWZmZXIgaW4gYmFzZXNpbms6Omxhc3QtYnVmZmVyLiBUaGlzIGNhbiBiZSB1c2VmdWwgaW4gY2FzZXMgd2hlcmUKLQkgIGJ1ZmZlcnMgbmVlZCB0byBiZSByZWxlYXNlZCBhc2FwLgotCSAgQVBJOiBHc3RCYXNlU2luazo6ZW5hYmxlLWxhc3QtYnVmZmVyCi0KLTIwMTAtMDctMDYgMTA6NDg6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JICBjaGVja3M6IHJld3JpdGUgZ3N0dGFnc2V0dGVyIHRlc3QgdG8gdXNlIGZld2VyIGdfdXNsZWVwKCkKLQkgIFNvbWV0aGluZyBhYm91dCB0aGF0IHNlZW1zIHRvIGludGVyYWN0IGJhZGx5IHdpdGggc29tZSBzY2hlZHVsZXJzLAotCSAgc28gZG8gdGhpbmdzIGRpZmZlcmVudGx5LgotCSAgRml4ZXMgIzYyMzQ2OS4KLQotMjAxMC0wNy0wNiAxMDoxOTowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgbmV3IGFkZCBnc3RfY2xvY2tfaWRfd2FpdF9hc3luY19mdWxsKCkgdG8gZG9jcwotCSAgQVBJOiBhZGQgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmNfZnVsbAotCSAgU2VlICM2MjM1ODkuCi0KLTIwMTAtMDctMDYgMTA6Mjg6MTQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IEltcHJvdmUgZ3N0X3ZhbHVlX3tzZXR8Z2V0fV9jYXBzIGRvY3MKLQotMjAxMC0wNy0wNiAxMDozNTowOSArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogZXhwb3J0IGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwKLQotMjAxMC0wNy0wNiAxMDozMToyNSArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9ocHBhLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjMzIuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjNjQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3Rfc3BhcmMuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0Lmg6Ci0JICB0ZXN0czogcmVtb3ZlIEFCSSBjaGVja3MgZm9yIEdzdENsb2NrRW50cnkuCi0KLTIwMTAtMDctMDUgMTg6NDU6NTUgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5oOgotCSAgY2xvY2s6IGRvY3VtZW50IHRoYXQgR3N0Q2xvY2tFbnRyeSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbmEgb3BhcXVlIHN0cnVjdHVyZS4KLQotMjAxMC0wNy0wNSAxMzoxMDowOSArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjbG9jay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBjbG9jazogdXNlIHRoZSBuZXcgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmNfZnVsbC4KLQkgIFVzZSB0aGUgbmV3IGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwgaW4gZ3N0X2Nsb2NrX3NldF9tYXN0ZXIuCi0JICBBbHNvIGFkZCBzb21lIHRlc3RzLgotCi0yMDEwLTA3LTA1IDEzOjAxOjUzICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkgIGNsb2NrOiBmaXggcmVmY291bnRpbmcgYnVnIGluIGdzdF9jbG9ja19zZXRfbWFzdGVyLgotCSAgTWFrZSBzdXJlIGNsb2NrLT5jbG9ja2lkIGlzIHVucmVmZmVkIGJlZm9yZSBjbG9jay0+bWFzdGVyLgotCSAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGNsb2NrLT5jbG9ja2lkKSB0cmllcyB0byBhY2Nlc3MgY2xvY2stPm1hc3Rlci4gSWYKLQkgIGNsb2NrLT5tYXN0ZXIgaXMgdW5yZWZmZWQgYmVmb3JlIGFuZCBpdCdzIGRlYWxsb2NhdGVkLCBfdW5zY2hlZHVsZSBjb3VsZCBhY2Nlc3MKLQkgIGZyZWUnZCBtZW1vcnkuCi0KLTIwMTAtMDctMDUgMTI6NTY6NDAgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JICBjbG9jazogYWRkIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jX2Z1bGwuCi0JICBBZGQgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmNfZnVsbC4gSXQncyB0aGUgc2FtZSBhcyBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyBidXQKLQkgIGFsbG93cyBwYXNzaW5nIGEgR0Rlc3Ryb3lOb3RpZnkgdG8gZGVzdHJveSB1c2VyX2RhdGEuCi0KLTIwMTAtMDctMDUgMTc6NTA6MzMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBkb2NzOiBpbXByb3ZlIHRoZSBhcGkgZG9jcyBmb3IgbmV3IEdzdFBhZExpbmtDaGVja3MgYW5kIGl0cyB1c2UKLQotMjAxMC0wNy0wNSAxMjoyMTo1MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9SRUFETUU6Ci0JICBSRUFETUU6IHVwZGF0ZSBhZnRlciByZW1vdmFsIG9mICJvbGQiIGRpci4KLQkgIFJlbW92ZSAib2xkIiBhbmQgYWRkIGEgbGluZSBhYm91dCAiZXhhbXBsZXMiLgotCi0yMDEwLTA3LTA0IDE3OjM0OjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvb2xkL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL1RPRE86Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvYXBwcmVhZGVyLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvYXBwcmVhZGVyL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL2FwcHJlYWRlci9hcHByZWFkZXIuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9jdXR0ZXIvLmdpdGlnbm9yZToKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9jdXR0ZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY3V0dGVyL2N1dHRlci5jOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL2N1dHRlci9jdXR0ZXIuaDoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9ldmVudHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvZXZlbnRzL3NlZWsuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9oZWxsb3dvcmxkMi8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL2hlbGxvd29ybGQyL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL2hlbGxvd29ybGQyL2hlbGxvd29ybGQyLmM6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWFudWFsLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL21hbnVhbC9leHRyYWN0LnBsOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL21peGVyLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9taXhlci9taXhlci5oOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3Bpbmdwb25nLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGluZ3BvbmcvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGluZ3BvbmcvcGluZ3BvbmcuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9wbHVnaW5zLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9wbHVnaW5zL2V4YW1wbGUuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9wbHVnaW5zL2V4YW1wbGUuaDoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9wd2cvLmdpdGlnbm9yZToKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9wd2cvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcHdnL2V4dHJhY3QucGw6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWUyLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWUyL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3F1ZXVlMi9xdWV1ZTIuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9xdWV1ZTMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9xdWV1ZTMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWUzL3F1ZXVlMy5jOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3F1ZXVlNC8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3F1ZXVlNC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9xdWV1ZTQvcXVldWU0LmM6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcmV0YWcvLmdpdGlnbm9yZToKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9yZXRhZy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9yZXRhZy9yZXRhZy5jOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3JldGFnL3RyYW5zY29kZS5jOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3RocmVhZC8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3RocmVhZC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC9leGFtcGxlcy90aHJlYWQvdGhyZWFkLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9SdWxlczoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2FwcF9maXhhdGUuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9hdWRpb3NjYWxlLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvY2Fwcy5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2NhcHMuaDoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9jYXBzX3N0cmluZ3M6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvY29tcGF0aWJpbGl0eS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2Rlc2VyaWFsaXplLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvZW51bWNhcHMuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9lcmF0b3N0aGVuZXMuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9maWx0ZXJjYXBzLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvZml4ZWQuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9mcmFjdGlvbi1jb252ZXJ0LmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvZnJhY3Rpb24tbXVsdGlwbHktYW5kLXplcm8uYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9pbnRlcnNlY3QyLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvaW50ZXJzZWN0aW9uLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvbm9ybWFsaXNhdGlvbi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3JhbmRvbS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3JlbmVnb3RpYXRlLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvc2V0cy5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3NpbXBsaWZ5LmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvc3RyaW5nLWNvbnZlcnNpb25zLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvc3RydWN0dXJlLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvc3VidHJhY3QuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy91bmlvbi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kZWJ1Zy8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZGVidWcvY2F0ZWdvcnkuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZGVidWcvY29tbWFuZGxpbmUuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZGVidWcvZ2xvYmFsLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2RlYnVnL291dHB1dC5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kZWJ1Zy9wcmludGZfZXh0ZW5zaW9uLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2Rsb3Blbi8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kbG9wZW4vTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2Rsb3Blbi9kbG9wZW5fZ3N0LmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2Rsb3Blbi9sb2FkZ3N0LmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy9nc3QtaW5zcGVjdC1jaGVjay5pbjoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvc3RydWN0X2kzODYuaDoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvc3RydWN0X3NpemUuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvaW5kZXhlcnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvaW5kZXhlcnMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2luZGV4ZXJzL2NhY2hlMS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9pbmRleGVycy9pbmRleGR1bXAuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGFyc2UvLmdpdGlnbm9yZToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGFyc2UvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BhcnNlL3BhcnNlMS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wYXJzZS9wYXJzZTIuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3BsdWdpbi9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL1JFQURNRToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL2R5bmFtaWMuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL2xpbmtlZC5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wbHVnaW4vbG9hZGluZy5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wbHVnaW4vcmVnaXN0cnkuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL3N0YXRpYy5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wbHVnaW4vc3RhdGljMi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wbHVnaW4vdGVzdHBsdWdpbi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wbHVnaW4vdGVzdHBsdWdpbjIuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL3Rlc3RwbHVnaW4yX3MuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGx1Z2luL3Rlc3RwbHVnaW5fcy5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVmY291bnRpbmcvYmluLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL2VsZW1lbnQuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVmY291bnRpbmcvZWxlbWVudF9wYWQuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVmY291bnRpbmcvbWFpbmxvb3AuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVmY291bnRpbmcvbWVtLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL21lbS5oOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy9vYmplY3QuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVmY291bnRpbmcvcGFkLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL3NjaGVkLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3JlZmNvdW50aW5nL3RocmVhZC5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zdGF0ZXMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc3RhdGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zdGF0ZXMvYmluLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3N0YXRlcy9sb2NrZWQuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc3RhdGVzL3BhcmVudC5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvMTU5NTY2LmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvMTU5ODUyLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvcXVldWUuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGhyZWFkcy9zaWduYWxzLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvc3RhdGljcmVjLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkYi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3RocmVhZGMuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRkLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkZS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3RocmVhZGYuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGhyZWFkcy90aHJlYWRnLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkaC5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3RocmVhZGkuYzoKLQkgIFJlbW92ZSBvbGQgMC44IHRlc3RzIGFuZCBleGFtcGxlcyBmcm9tIGdpdCB0cmVlCi0JICBEb2Vzbid0IHJlYWxseSBsb29rIGxpa2UgYW55dGhpbmcncyB3b3J0aCBrZWVwaW5nLgotCi0yMDEwLTA3LTAzIDE2OjM5OjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSAgY2hlY2s6IHNraXAgc2lsbHkgdGVzdCB0aGF0IHNlZ2ZhdWx0cyB3aGVuIGluIGEgQ0tfRk9SSz1ubyBlbnZpcm9ubWVudAotCSAgU2VlICM2MjM0NjkuCi0KLTIwMTAtMDctMDMgMTU6MTM6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6Ci0JICBjaGVja3M6IG1ha2UgZmFrZXNyYyBjaGVjayB3b3JrIGluIGEgQ0tfRk9SSz1ubyBlbnZpcm9ubWVudAotCSAgUmVzZXQgaGF2ZV9lb3MgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHRlc3QuCi0JICBTZWUgIzYyMzQ2OS4KLQotMjAxMC0wNy0wMyAxNDowOTozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKLQkgIGNoZWNrczogcnVuIHRlc3RzIGNhbGxpbmcgZ3N0X2RlaW5pdCgpIGxhc3Qgc28gdGhpbmdzIHdvcmsgd2l0aCBDS19GT1JLPW5vCi0JICBCZWNhdXNlIGdzdF9pbml0KCkgd2lsbCBmYWlsIG9uY2UgZ3N0X2RlaW5pdCgpIGhhcyBiZWVuIGNhbGxlZC4KLQkgIFNlZSAjNjIzNDY5LgotCi0yMDEwLTA3LTAzIDE0OjA0OjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGNoZWNrczogZG9uJ3QgYXNzdW1lIGVsZW1lbnQgZmFjdG9yeSBpcyBub3QgbG9hZGVkIHlldAotCSAgSXQgbWF5IGFscmVhZHkgYmUgbG9hZGVkIGlmIGNoZWNrIGlzIGJlaW5nIHJ1biB3aXRoIENLX0ZPUks9bm8uCi0JICBTZWUgIzYyMzQ2OS4KLQotMjAxMC0wNy0wMSAxOTo1ODowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOgotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDoKLQkgIGRvY3M6IGZpeCBhIGNvdXBsZSBvZiB0eXBvcyBpbiB0aGUgbWFudWFsCi0JICBTcG90dGVkIGJ5IEFsZXhhbmRlciBTYXByeWtpbi4KLQkgIEZpeGVzICM2MjIzNzkuCi0KLTIwMTAtMDctMDEgMTc6NTY6MzMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSAgZ3N0Y2FwczogTWFrZSBzdXJlIF9ub3JtYWxpemUoKSBpcyBhcHBsaWVkIG9uIGFsbCBzdHJ1Y3R1cmVzLgotCSAgV2UgbmVlZCB0byB1c2UgZ3N0X2NhcHNfZ2V0X3NpemUoKSBpbiB0aGUgbG9vcCBjb3VudGVyIHNpbmNlIHNvbWUKLQkgIHN0cnVjdHVyZXMgY291bGQgYmUgYWRkZWQgd2hpbGUgaXRlcmF0aW5nLgotCSAgRml4ZXMgIzYyMzMwMQotCi0yMDEwLTA2LTMwIDEzOjE2OjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvaGlnaGxldmVsLXhtbC54bWw6Ci0JICBkb2NzOiB1cGRhdGUgJ1hNTCBpbiBHU3RyZWFtZXInIHNlY3Rpb24gaW4gYXBwbGljYXRpb24gZGV2ZWxvcGVyJ3MgbWFudWFsCi0KLTIwMTAtMDYtMjkgMTg6NDg6MDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMjkuMyBwcmUtcmVsZWFzZQotCi0yMDEwLTA2LTI1IDE5OjAzOjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IGltcGxlbWVudCBhY2NlcHRjYXBzIGZ1bmN0aW9uCi0JICBPdXIgYWNjZXB0Y2FwcyBmdW5jdGlvbiBjYW4gc2ltcGx5IGZvcndhcmQgdGhlIHF1ZXJ5LgotCi0yMDEwLTA2LTI4IDE1OjI4OjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgYXV0b21ha2UgcmVxdWlyZW1lbnQgdG8gMS4xMAotCSAgRm9yIG1haW50YWluYWJpbGl0eSByZWFzb25zIGFuZCAkKGJ1aWxkZGlyKS4KLQkgIEZpeGVzICM2MjI5NDQuCi0KLTIwMTAtMDYtMjggMTM6NTY6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICB0b29sczogbWVudGlvbiAtLWVvcy1vbi1zaHV0ZG93biBvbiBnc3QtbGF1bmNoIG1hbiBwYWdlCi0KLTIwMTAtMDYtMjggMTA6MjA6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIHV0aWxzOiBEb24ndCB1c2UgR19HTlVDX0NPTlNUIGZvciB0aGUgdWludDY0IHNjYWxpbmcgZnVuY3Rpb25zCi0JICBUaGV5IGFyZSBhY3R1YWxseSAqbm90KiBjb25zdCBmdW5jdGlvbnMgYmVjYXVzZSBvbiBhcmNoaXRlY3R1cmVzCi0JICB3aXRob3V0IGludDEyOCBpbnN0cnVjdGlvbnMgdGhlIHBhcmFtZXRlcnMgd2VyZSBjaGFuZ2VkLgotCSAgZ2NjIHJlLXVzZWQgdGhlIHBhcmFtZXRlcnMgb24gdGhlIHN0YWNrIGZvciBtdWx0aXBsZSBjYWxscyB0aG91Z2gKLQkgIGFuZCB0aGUgY2hhbmdlZCBwYXJhbWV0ZXJzIHdlcmUgdXNlZCBmb3IgdGhlIHNlY29uZCBjYWxsIHRoZW4uCi0JICBGaXhlcyBidWcgIzYyMzAwMy4KLQotMjAxMC0wNi0yNiAxNzo0ODozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICAwLjEwLjI5LjIgcHJlLXJlbGVhc2UKLQotMjAxMC0wNi0yNiAxNzo0Nzo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEwLTA2LTI2IDEwOjE2OjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiB0ZXN0cy9leGFtcGxlcy94bWwvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL3htbC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3htbC9jcmVhdGV4bWwuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3htbC9ydW54bWwuYzoKLQkgIGV4YW1wbGVzOiByZW1vdmUgeG1sIGV4YW1wbGUgYnVpbGQgc3lzdGVtIGJpdHMgYW5kIHB1cmdlIGZyb20gdHJlZQotCSAgRml4ZXMgbWFrZSBkaXN0Y2hlY2suCi0KLTIwMTAtMDYtMjYgMDk6NTk6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0eG1sLmM6Ci0JICB4bWw6IGtlZXAgZHVtbXkgZ3N0X3htbF9nZXRfdHlwZSgpIGZ1bmN0aW9uIGZvciBnLWkgZXZlbiBpZiByZXN0IG9mIEdzdFhNTCBpcyByZW1vdmVkCi0JICBBZGQgYSBtaW5pbWFsIGdzdF94bWxfZ2V0X3R5cGUoKSBmdW5jdGlvbiwgc28gdGhhdCBnb2JqZWN0LWludHJvc3BlY3Rpb24gZG9lc24ndAotCSAgYnJlYWsgdGhlIGNvbXBpbGF0aW9uIGlmIHdlJ3JlIGNvbXBpbGluZyB3aXRoIEdTVF9SRU1PVkVfREVQUkVDQVRFRCBkZWZpbmVkIG9yCi0JICAtLWRpc2FibGUtbG9hZHNhdmUgaGF2aW5nIGJlZW4gcGFzc2VkIHRvIGNvbmZpZ3VyZS4gVW50aWwgc29tZW9uZSBmaWd1cmVzIG91dAotCSAgYSBiZXR0ZXIgd2F5IGF0IGxlYXN0LgotCi0yMDEwLTA2LTI2IDAxOjAxOjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3R4bWwuYzoKLQkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6Ci0JICBEb24ndCBpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+IGZyb20gcHVibGljIGhlYWRlcnMgaWYgR1NUX0RJU0FCTEVfREVQUkVDQVRFRCBpcyBkZWZpbmVkCi0JICBTaW5jZSBldmVyeXRoaW5nIEdzdFhNTCByZWxhdGVkIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHdlIGNhbiBub3cgc2tpcCB0aGUKLQkgIGxpYnhtbCBpbmNsdWRlcyBmcm9tIHRoZSBwdWJsaWMgaGVhZGVycyB3aGVuIEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQgaXMKLQkgIGRlZmluZWQuCi0JICBTZWUgIzQ2MzQzNS4KLQotMjAxMC0wNi0yNiAwMDoxODoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL3R5cGVmaW5kLmM6Ci0JICBleGFtcGxlczogYWRkIG1pc3Npbmcgc3RkbGliLmggaW5jbHVkZSBpbiB0eXBlZmluZCBleGFtcGxlCi0KLTIwMTAtMDYtMjUgMjE6MjM6MjIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRvdC1kdW1wOiB0ZXJtaW5hdGUgdHJ1bmNhdGVkIHN0cmluZ3MgYW5kIGVzY2FwZSBzcGVjaWFsIGNoYXJzCi0JICBGaXhlcyBzeW50YXggZXJyb3JzIGluIGdlbmVyYXRlZCBkb3QgZmlsZXMgZm9yIGNhcHMgd2l0aCBzdHJpbmdzLgotCi0yMDEwLTA2LTI1IDE4OjUyOjAyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IG1vcmUgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlIG5ldyBmbGFncwotCi0yMDEwLTA2LTI1IDE4OjE4OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IG1ha2UgdGhlIE5PVEhJTkcgbGluayBjaGVjayBmbGFnIGJlIDAKLQkgIE1ha2UgdGhlIHBhZCBsaW5rIGNoZWNrIG9mIE5PVEhJTkcgYmUgMC4gVGhpcyB3YXkgd2UgaGF2ZSBhIGZsYWcgZm9yIGVhY2gKLQkgIGZlYXR1cmUgYW5kIDAgd2hlbiBubyBmbGFncyBhcmUgc2V0LgotCi0yMDEwLTA2LTI1IDE4OjI0OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2hwcGEuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGM2NC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9zcGFyYy5oOgotCSogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaDoKLQkgIHRlc3RzOiBSZW1vdmUgR3N0WE1MIHRlc3RzCi0KLTIwMTAtMDYtMjUgMTg6MTM6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3R4bWwuYzoKLQkqIGdzdC9nc3R4bWwuaDoKLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSogdG9vbHMvTWFrZWZpbGUuYW06Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3R4bWw6IERlcHJlY2F0ZSBHc3RYbWwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zCi0JICBQaXBlbGluZSBzZXJpYWxpc2F0aW9uIHRvIGFuZCBmcm9tIFhNTCBpcyBob3JyaWJseSBicm9rZW4gZm9yIGFsbAotCSAgYnV0IHRoZSBtb3N0IHNpbXBsZSB1c2UgY2FzZXMsIGFuZCB3aWxsIGxpa2VseSBuZXZlciBiZSBmaXhlZC4KLQkgIE1ha2Ugc3VyZSBldmVyeW9uZSBwbGF5aW5nIGFyb3VuZCB3aXRoIHRoZXNlIHRvb2xzIGlzIGF3YXJlIG9mCi0JICB0aGlzLCB0byBhdm9pZCBmcnVzdHJhdGlvbi4gU2VlIGNvdW50bGVzcyBidWcgcmVwb3J0cyBpbiBidWd6aWxsYS4KLQkgIEZpeGVzIGJ1ZyAjNjIyNjg1LgotCi0yMDEwLTA2LTI1IDE4OjExOjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICBjb250cm9sbGVyOiBGaXggYnVpbGQgd2l0aCBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQKLQotMjAxMC0wNi0yNCAxMjoxOToyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jOgotCSAgYmVuY2htYXJrczogVXNlIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsCi0JICBXZSdyZSB0ZXN0aW5nIGNhcHMgbmVnb3RpYXRpb24sIG5vdCBwYWQgbGlua2luZy4gQnJpbmdzIHRoZSBzdGFydHVwCi0JICB0aW1lIGRvd24gMTAwIGZvbGQuCi0KLTIwMTAtMDYtMjQgMTc6NTM6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JKiB0b29scy9nc3QteG1sbGF1bmNoLjEuaW46Ci0JICB0b29sczogZGVwcmVjYXRlIGdzdC14bWxsYXVuY2ggYW5kIHByaW50IGZhdCB3YXJuaW5nIGlmIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGl0Ci0JICBQaXBlbGluZSBzZXJpYWxpc2F0aW9uIHRvIGFuZCBmcm9tIFhNTCBpcyBob3JyaWJseSBicm9rZW4gZm9yIGFsbAotCSAgYnV0IHRoZSBtb3N0IHNpbXBsZSB1c2UgY2FzZXMsIGFuZCB3aWxsIGxpa2VseSBuZXZlciBiZSBmaXhlZC4KLQkgIE1ha2Ugc3VyZSBldmVyeW9uZSBwbGF5aW5nIGFyb3VuZCB3aXRoIHRoZXNlIHRvb2xzIGlzIGF3YXJlIG9mCi0JICB0aGlzLCB0byBhdm9pZCBmcnVzdHJhdGlvbi4gU2VlIGNvdW50bGVzcyBidWcgcmVwb3J0cyBpbiBidWd6aWxsYS4KLQotMjAxMC0wNi0yNCAxNzoyMjoxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGdzdC1sYXVuY2g6IHJlbmFtZSBuZXcgLS1uby1wbGF5IGNvbW1hbmQgbGluZSBvcHRpb24gdG8gLS1uby1zaWd1c3ItaGFuZGxlcgotCSAgLS1uby1wbGF5IHNlZW1zIGEgYml0IGNvbmZ1c2luZy4KLQkgIEZpeGVzICM2MjE4NjcuCi0KLTIwMTAtMDYtMjQgMTU6MDc6MTEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDczZmY5M2EgdG8gYTUxOTU3MQotCi0yMDEwLTA2LTIzIDExOjAyOjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuaDoKLQkgIGJpbmFyeXJlZ2lzdHJ5OiBpZ25vcmUgdGhlIHBsdWdpbiBjYWNoZSBpZiB0aGUgZmlsdGVyIGVudmlyb25tZW50IGhhcyBjaGFuZ2VkCi0JICBNYWtlIHN1cmUgdGhhdCB3ZSBwcm9wZXJseSB1cGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCB0aGUgY2FjaGUgZmlsZSB3aGVuZXZlcgotCSAgdGhlIGZpbHRlciBlbnZpcm9ubWVudCBjaGFuZ2VzIG9yIHRoZXJlJ3Mgbm8gbW9yZSBmaWx0ZXIgc2V0LgotCi0yMDEwLTA1LTI3IDEyOjM2OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JICBwbHVnaW5sb2FkaW5nOiBhZGQgc3VwcG9ydCBmb3Igd2hpdGVsaXN0aW5nIGJhc2VkIG9uIHBsdWdpbiBvciBzb3VyY2UgbW9kdWxlIG5hbWUgYW5kIHBhdGgKLQkgIFRoaXMgZmVhdHVyZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHVzZSBpbiBwbHVnaW4gbW9kdWxlcycgdW5pdCB0ZXN0cy4KLQkgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOiBnc3QtcGx1Z2lucy1nb29kIGlzIGJ1aWx0IGFnYWluc3QgYW4KLQkgIGluc3RhbGxlZCBHU3RyZWFtZXIgY29yZS4gQW4gb2xkZXIgdmVyc2lvbiBvZiBnc3QtcGx1Z2lucy1nb29kIGlzIGFsc28KLQkgIGluc3RhbGxlZCBpbiB0aGF0IHByZWZpeCwgYWxvbmcgd2l0aCByYW5kb20gb3RoZXIgcGx1Z2luIG1vZHVsZXMuIE5vdywKLQkgIHdoZW4gZG9pbmcgJ21ha2UgY2hlY2snIGluIHRoZSBqdXN0LWJ1aWx0IGdzdC1wbHVnaW5zLWdvb2QgdHJlZSwgd2UKLQkgIHdhbnQgdG8gb25seSBsb2FkIHBsdWdpbnMgZnJvbSBHU3RyZWFtZXIgY29yZSwgZ3N0LXBsdWdpbnMtYmFzZSwgYW5kCi0JICBnc3QtcGx1Z2lucy1nb29kLCBidXQgbm90IHJhbmRvbSBvdGhlciBtb2R1bGVzICh3ZSBkb24ndCB3YW50IGFueSB1bml0Ci0JICB0ZXN0cyB0byBmYWlsIGp1c3QgYmVjYXVzZSBzb21lIG1vZHVsZSBpbiBnc3QtcGx1Z2lucy1iYWQgaGFzIGEgYnJva2VuCi0JICBwbHVnaW5faW5pdCwgZm9yIGV4YW1wbGUpLiBBbHNvLCB3ZSB3YW50IHRvIG9ubHkgbG9hZCBnc3QtcGx1Z2lucy1nb29kCi0JICBtb2R1bGVzIGZyb20gdGhlIGxvY2FsbHktYnVpbHQgc291cmNlIHRyZWUsIGJ1dCBub3QgYW55IG9mIHRoZSBvbGRlcgotCSAgZ3N0LXBsdWdpbnMtZ29vZCBtb2R1bGVzIGluc3RhbGxlZC4gVGhpcyBpcyB1c3VhbGx5IGFzc3VyZWQgYnkgbG9hZGluZwotCSAgdGhlIG9uZXMgaW4gdGhlIHNvdXJjZSB0cmVlIGZpcnN0IChieSBhZGRpbmcgdGhhdCBwYXRoIGZpcnN0IHRvIHRoZQotCSAgcmlnaHQgZW52aXJvbm1lbnQgdmFyaWFibGVzKSwgYnV0IGl0IGdldHMgdHJpY2t5IHdoZW4gcGx1Z2lucyBhcmUKLQkgIG1vdmVkLCByZW1vdmVkLCBtZXJnZWQsIG9yIHJlbmFtZWQsIG9yIHRoZSBwbHVnaW4gZmlsZW5hbWUgY2hhbmdlcy4KLQkgIE5vdGUgdGhhdCAnbWFrZSBjaGVjaycgc2hvdWxkIHJlYWxseSB3b3JrIHJpZ2h0IHdpdGhvdXQgZG9pbmcKLQkgICdtYWtlIGluc3RhbGwnIG9yIHVuaW5zdGFsbGluZyB0aGUgb2xkIGdzdC1wbHVnaW5zLWdvb2QgcGFja2FnZSAob3IKLQkgIGFueSBvdGhlciBnc3QtcGx1Z2lucy1mb28gcGFja2FnZSkgZmlyc3QuCi0JICBFbnRlciBHU1RfUExVR0lOX0xPQURJTkdfV0hJVEVMSVNULiBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIG1heQotCSAgY29udGFpbiBzb3VyY2UtcGFja2FnZUBwYXRoLXByZWZpeCBwYWlycyBzZXBhcmF0ZWQgYnkgdGhlIHBsYXRmb3JtCi0JICBzZWFyY2ggcGF0aCBzZXBhcmF0b3IgKEdfU0VBUkNIUEFUSF9TRVBBUkFUT1JfUykuIFRoZSBzb3VyY2UgcGFja2FnZQotCSAgYW5kIHBhdGggcHJlZml4IGFyZSBzZXBhcmF0ZWQgYnkgdGhlICdAJyBjaGFyYWN0ZXIuIFRoZSBwYXRoIHByZWZpeCBpcwotCSAgZW50aXJlbHkgb3B0aW9uYWwsIGFzIGlzIHRoZSAnQCcgc2VwYXJhdG9yIGlmIG5vIHBhdGggaXMgZ2l2ZW4uCi0JICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGZpbHRlciBiYXNlZCBvbiBwbHVnaW4gbmFtZXMgaW5zdGVhZCBvZiB0aGUgbmFtZQotCSAgb2YgdGhlIHNvdXJjZS1wYWNrYWdlIGJ5IHNwZWNpZnlpbmcgb25lIG9yIG1vcmUgcGx1Z2luIG5hbWVzIHNlcGFyYXRlZAotCSAgYnkgY29tbWFzIGJlZm9yZSB0aGUgb3B0aW9uYWwgcGF0aCBwcmVmaXguCi0JICBJbiBzaG9ydCwgdGhlIGZvbGxvd2luZyBtYXRjaCBwYXR0ZXJucyBhcmUgcG9zc2libGU6Ci0JICBwbHVnaW4xLHBsdWdpbjJAcGF0aHByZWZpeCBvcgotCSAgcGx1Z2luMSxwbHVnaW4yQCogb3IganVzdAotCSAgcGx1Z2luMSxwbHVnaW4yIG9yCi0JICBzb3VyY2UtcGFja2FnZUBwYXRocHJlZml4IG9yCi0JICBzb3VyY2UtcGFja2FnZUAqIG9yIGp1c3QKLQkgIHNvdXJjZS1wYWNrYWdlCi0JICBTbyBmb3Igb3VyIGdzdC1wbHVnaW5zLWdvb2QgdW5pdCB0ZXN0IGV4YW1wbGUgYWJvdmUsIHdlICB3b3VsZCBzZXQgdGhlCi0JICBlbnZpcm9ubWVudCB2YXJpYWJsZSBvbiAqbml4IHRvIHNvbWV0aGluZyBsaWtlIHRoaXMgKHdpbGwgbGlrZWx5IGJlIGEKLQkgIHJlbGF0aXZlIHBhdGggaW4gcHJhY3RpY2UpOgotCSAgZ3N0cmVhbWVyOmdzdC1wbHVnaW5zLWJhc2U6Z3N0LXBsdWdpbnMtZ29vZEAvcGF0aC90by9zcmMvZ3N0LXBsdWdpbnMtZ29vZAotCSAgRml4ZXMgIzYxOTgxNSBhbmQgIzYxOTcxNy4KLQotMjAxMC0wNi0yMyAxNzoyNDowNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnc3RnaG9zdHBhZDogV2UgZG9uJ3QgbmVlZCBhbnkgY2hlY2tzIHdoZW4gbGlua2luZyB0YXJnZXQgcGFkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyNTA0Ci0KLTIwMTAtMDYtMjMgMTc6MDA6MTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3R1dGlsczogTmV3IGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIG1ldGhvZAotCSAgTGlua3MgdGhlIGVsZW1lbnRzIHdpdGggdGhlIHNwZWNpZmllZCBwYWQgbGlua2luZyBjaGVja3MuCi0JICBBUEk6Z3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjI1MDQKLQotMjAxMC0wNi0yMyAxNjo0NToxOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgR3N0UGFkOiBBZGQgbmV3IHBhZCBsaW5raW5nIG1ldGhvZCB3aXRoIGNvbmZpZ3VyYWJsZSBjaGVja3MuCi0JICBUbyBiZSB1c2VkIGZvciBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkIGFsbCBjaGVja3MgdG8gYmUgdmFsaWRhdGVkLgotCSAgQVBJOiBnc3RfcGFkX2xpbmtfZnVsbAotCSAgQVBJOiBHc3RQYWRMaW5rQ2hlY2sKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjI1MDQKLQotMjAxMC0wNi0xNSAxODoyNjowMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIHRhZzogQWRkcyBHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OIHRhZwotCSAgQWRkcyBhIG5ldyB0YWcgdG8gaW5mb3JtIGFib3V0IHRoZSBpbWFnZSBvcmllbnRhdGlvbiBhbmQgaG93Ci0JICB0byByb3RhdGUgYW5kIGZsaXAgaXQgYmVmb3JlIGRpc3BsYXkuCi0JICBOb3RlIHRoYXQgdGhpcyB0YWcgaXMgYSBzdHJpbmcgd2l0aCBhIHByZWRlZmluZWQgc2V0IG9mCi0JICBwb3NzaWJsZSB2YWx1ZXMuCi0JICBBUEk6IEdTVF9UQUdfSU1BR0VfT1JJRU5UQVRJT04KLQkgIEZpeGVzICM2MTk1MDgKLQotMjAxMC0wNi0yMiAxODo1MzoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkgIGdzdG9iamVjdDogZGVwcmVjYXRlIGdzdF9vYmplY3Rfe3NldHxnZXR9X25hbWVfcHJlZml4KCkKLQkgIFRoZSBuYW1lIHByZWZpeCBzdHVmZiBoYXMgbmV2ZXIgYmVlbiB1c2VkIGZvciBhbnl0aGluZyBhbmQgaXQgZG9lc24ndAotCSAgbG9vayBsaWtlIHdlJ2xsIGV2ZXIgd2FudCB0byB1c2UgaXQgZm9yIGFueXRoaW5nLgotCSAgRml4ZXMgIzYyMTAwNi4KLQotMjAxMC0wNi0yMiAxMDoyMDo1MyAtMDMwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIEFkZCBnb2JqZWN0LWludHJvc3BlY3Rpb24gYW5ub3RhdGlvbnMgZm9yIEdzdFBhZEludExpbmtGdW5jdGlvbgotCSAgRml4ZXMgYnVpbGQgd2l0aCBsYXRlc3QgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGZyb20gZ2l0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMjAyNQotCi0yMDEwLTA2LTIxIDExOjQxOjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBmaXggbWVyZ2luZyBvZiByYW5nZXMKLQkgIFdoZW4gd2UgbWVyZ2UgdHdvIHJhbmdlcywgZG9uJ3QgdXBkYXRhIHRoZSBjdXJyZW50IHJhbmdlIHdyaXRpbmdfcG9zIHdpdGgKLQkgIHdoZXJlZXZlciB3ZSB3ZXJlIHdyaXRpbmcgZWFybGllciBpbiB0aGUgbWVyZ2VkIHJhbmdlLiAgU3BvdHRlZCBieSBiaWxib2VkLgotCi0yMDEwLTA2LTE5IDExOjE5OjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICByZWdpc3RyeTogYWxzbyBza2lwIC5kZXBzIGRpcnMgd2hlbiBzY2FubmluZyBmb3IgcGx1Z2lucwotCSAgTm8gbmVlZCB0byBkZXNjZW5kIGludG8gLmRlcHMgZGlycyBpbiB1bmluc3RhbGxlZCBzZXR1cHMsIHdlIGtub3cKLQkgIHRoZXNlIGRvbid0IGNvbnRhaW4gYW55IHBsdWdpbnMuCi0KLTIwMTAtMDYtMTcgMTE6Mzk6MDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHRhZ2xpc3Q6IGFkZCBnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXggdG8gYXZvaWQgYSBjb3B5Ci0JICBBZGRzIGEgdmFyaWF0aW9uIG9mIHRoZSBfZ2V0X3N0cmluZ19pbmRleCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgY29weQotCSAgdGhlIHN0cmluZy4KLQkgIEFQSTogZ3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxODk2Ci0KLTIwMTAtMDYtMTggMTI6MDA6NTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IG1ha2Ugc3VyZSBidWZmZXJzJyBtZXRhZGF0YSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyBjYXBzIG9uIHRoZW0KLQkgIEZpeGVzIHdhcm5pbmdzIHdoZW4gdXNpbmcgcGxheWJpbjIgd2l0aCBkdmI6Ly8gc3RyZWFtcywgd2hlcmUgdHlwZWZpbmQKLQkgIGNvbWVzIGFmdGVyIG1wZWd0c3BhcnNlLgotCi0yMDEwLTA2LTE3IDE1OjUyOjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkgIGRvY3M6IHVwZGF0ZSBpbnRyb3NwZWN0ZWQgcGx1Z2luIGRvY3MgZm9yIGdzdGRvYy1zY2Fub2JqIGNoYW5nZXMKLQkgIFVwZGF0ZSBjb21tb24gZm9yIGxhdGVzdCBnc3Rkb2Mtc2Nhbm9iaiBhbmQgaW5zcGVjdCB4bWwgZmlsZXMgZm9yCi0JICBlc2NhcGluZyBhbmQgcGFkIHRlbXBsYXRlIG9yZGVyIGNoYW5nZXMuCi0KLTIwMTAtMDYtMTcgMTM6MTk6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogSW5pdGlhbGl6ZSBqaXR0ZXIgdG8gcHJldmVudCBwcmludGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGlmIHdhaXRpbmcgZm9yIHRoZSBjbG9jayBmYWlsZWQKLQotMjAxMC0wNi0xNyAxMDozNDo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIGZvciBuZXcgc3RyaW5ncwotCi0yMDEwLTA2LTE3IDA5OjMzOjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbDoKLQkgIG1hbnVhbDogZml4IGFub3RoZXIgdHlwbyBhbmQgc29tZSBpbmFjY3VyYWNpZXMKLQkgIEZpeCBhIHdyb25nIHN0YXRlbWVudCBhbmQgZmxlc2ggb3V0IHNlY3Rpb24gb24gbWVzc2FnZXMgYW5kIHF1ZXJpZXMKLQkgIGEgYml0LgotCi0yMDEwLTA2LTE3IDA5OjA1OjU4ICswMjAwICBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotCi0JKiBkb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sOgotCSAgbWFudWFsOiBGaXggYW5vdGhlciB0eXBvCi0KLTIwMTAtMDYtMTcgMDk6MDU6MjggKzAyMDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGRvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWw6Ci0JICBtYW51YWw6IEZpeCB0eXBvCi0KLTIwMTAtMDYtMTYgMTM6MTE6MDYgLTAzMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgIGVsZW1lbnRmYWN0b3J5OiBBZGQgYW4gYWxsb3ctbm9uZSBhbm5vdGF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxNzczCi0KLTIwMTAtMDYtMTYgMTM6MTA6MjYgLTAzMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgbWluaW9iamVjdDogQWRkIGludHJvc3BlY3Rpb24gYW5ub3RhdGlvbnMKLQkgIFRoZXNlIGFyZSByZXF1aXJlZCB0byBrbm93IGhvdyB0byB1bnJlZi9yZWYgYW5kCi0JICBjb252ZXJ0IHRvL2Zyb20gYSBHVmFsdWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxNzczCi0KLTIwMTAtMDYtMTYgMTM6MTA6MTMgLTAzMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBBZGQgb3V0IGFubm90YXRpb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxNzczCi0KLTIwMTAtMDYtMTYgMTM6MTA6MDYgLTAzMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIHF1ZXJ5OiBBZGQgb3V0IGFubm90YXRpb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxNzczCi0KLTIwMTAtMDYtMTYgMTM6MDk6NTcgLTAzMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgbWVzc2FnZTogQWRkIG91dCBhbm5vdGF0aW9ucwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTc3MwotCi0yMDEwLTA2LTE2IDEzOjAwOjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSAgZmRzaW5rOiBtYWtlIHN5bmMgcHJvcGVydHkgd29yayBjb3JyZWN0bHkKLQkgIERvbid0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGdldF90aW1lcyB2bWV0aG9kIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUgc3luYwotCSAgcHJvcGVydHkuCi0JICBTZXQgdGhlIGRlZmF1bHQgc3luYyBwcm9wZXJ0eSB0byBGQUxTRS4gSXQgdXNlZCB0byBiZSBzZXQgdG8gVFJVRSBidXQgYmVjYXVzZQotCSAgdGhlIGdldF90aW1lcyB3YXMgTlVMTCwgaXQgYWx3YXlzIGJlaGF2ZWQgbGlrZSBGQUxTRS4KLQkgIEZpeGVzICM2MjE1MzAKLQotMjAxMC0wNi0xNSAxODo0ODo1MyArMDIwMCAgQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGVsZW1lbnQ6IEltcHJvdmUgZ3N0X2VsZW1lbnRfZ2V0X25hbWUoKSBkb2NzCi0JICBGaXhlcyBidWcgIzYyMTY2MC4KLQotMjAxMC0wNi0xNSAxNjo0OTowNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDkzMzljY2MgdG8gMzU2MTdjMgotCi0yMDEwLTA2LTE1IDE2OjUzOjM1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA1YWRiMWNhIHRvIDkzMzljY2MKLQotMjAxMC0wNi0xNSAxNjozNDozNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNTdjODliNyB0byA1YWRiMWNhCi0KLTIwMTAtMDYtMTUgMTU6MzE6MTIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGM4MDQ5ODggdG8gNTdjODliNwotCi0yMDEwLTA2LTE1IDExOjQ4OjI2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgUmV2ZXJ0ICJHc3RQYWQ6IEFkZCBHU1RfUEFEX05FR09USUFCTEUgR3N0UGFkRmxhZyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZGMzOGU3NWQ4OGJkODkyMTg5NTgyMWY3YWZlZDAxY2FiMzBlNDZjOS4KLQkgIGJvb20KLQotMjAxMC0wNi0xNSAxMTo0ODoxNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBSZXZlcnQgImdzdHBhZDogUmV0dXJuIHBhZCB0ZW1wbGF0ZSBpbiBnZXRfY2FwcyBpZiBwYWQgaXMgbm90IG5lZ290aWFibGUiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDc0NjAzMjFhNjAwNDM4OTY2ZDcxNTJhYjJiNDMxOGJlNDhlYWRjZTAuCi0JICBjcmFjawotCi0yMDEwLTA2LTE1IDExOjQ4OjA3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBSZXZlcnQgInBhZDogZml4IGNvbW1lbnQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDhlOTJjYjRhN2Q1NmNkZmE0Njc0MzE1YzY0YjU4YzFiMWI5ZDgyMDguCi0JICB3aGF0ZXZlci4uLgotCi0yMDEwLTA2LTE1IDExOjQ3OjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgUmV2ZXJ0ICJlbGVtZW50OiBvbmx5IGNsZWFyIG5lZ290aWFibGUgd2hlbiBnb2luZyB0byBOVUxMIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA4ZjVlYzFmNzM3YzNiMzc1MzhiMjMwN2FlZjE2MGQ5ZDIxZjFjNDIyLgotCSAgYmxlZWVlaAotCi0yMDEwLTA2LTE1IDEwOjQ2OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGluZm86IGFkZCBkdW1teSBUUkFDRSBsb2cgbGV2ZWwgbWFjcm9zIGZvciB3aGVuIGRlYnVnZ2luZyBpcyBkaXNhYmxlZAotCSAgRm9yZ290IHRob3NlIHdoZW4gYWRkaW5nIHRoZSBvcmlnaW5hbCBBUEksIGp1c3QgbGlrZSB0aGUgQVBJIG1hcmtlcnMKLQkgIGluIHRoZSBjb21taXQgbWVzc2FnZToKLQkgIEFQSTogR1NUX1RSQUNFCi0JICBBUEk6IEdTVF9UUkFDRV9PQkpFQ1QKLQkgIEFQSTogR1NUX0NBVF9UUkFDRQotCSAgQVBJOiBHU1RfQ0FUX1RSQUNFX09CSkVDVAotCSAgQVBJOiBHU1RfTEVWRUxfVFJBQ0UKLQkgIEZpeGVzIGNvbXBpbGF0aW9uIHdpdGggLS1kaXNhYmxlLWdzdC1kZWJ1ZwotCi0yMDEwLTA2LTE1IDAxOjE1OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogcHJpbnQgbW9yZSBlcnJvcnMgdG8gc3RkZXJyIGFuZCBzdXBwcmVzcyBtb3JlIG91dHB1dCBpbiBxdWlldCBtb2RlCi0JICBJZiAtLXF1aWV0IGlzIGdpdmVuLCBkb24ndCBwcmludCBhbnl0aGluZyBidXQgZXJyb3JzLiBBbHNvLCBtYWtlCi0JICBzdXJlIGVycm9ycyBhcmUgYWx3YXlzIHByaW50ZWQgdG8gc3RkZXJyIGFuZCBub3QgdG8gc3Rkb3V0LgotCSAgRml4ZXMgIzYyMTU5NS4KLQotMjAxMC0wNi0xNCAxODowNzoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IG9ubHkgY2xlYXIgbmVnb3RpYWJsZSB3aGVuIGdvaW5nIHRvIE5VTEwKLQkgIERvbid0IGNsZWFyIHRoZSBuZWdvdGlhYmxlIGZsYWcgd2hlbiBnb2luZyB0byBSRUFEWSBiZWNhdXNlIHRoZW4gaXQgd2lsbCBuZXZlcgotCSAgYmUgc2V0IHRvIFRSVUUgYWdhaW4uCi0KLTIwMTAtMDYtMTQgMTc6MzM6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogZml4IGNvbW1lbnQKLQotMjAxMC0wNS0xNyAxNTowNjozNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnc3RwYWQ6IFJldHVybiBwYWQgdGVtcGxhdGUgaW4gZ2V0X2NhcHMgaWYgcGFkIGlzIG5vdCBuZWdvdGlhYmxlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4NjQ0Ci0KLTIwMTAtMDUtMTcgMTU6MDQ6NDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBHc3RQYWQ6IEFkZCBHU1RfUEFEX05FR09USUFCTEUgR3N0UGFkRmxhZwotCSAgQSBwYWQgaXMgJ25lZ290aWFibGUnIHdoZW4gaXRzIGNvbnRhaW5lciBlbGVtZW50IGlzIGluIGEgc3RhdGUgZ3JlYXRlcgotCSAgdGhhbiBHU1RfU1RBVEVfUkVBRFkKLQkgIEFQSTpnc3RfcGFkX2lzX25lZ290aWFibGUKLQkgIEFQSTpnc3RfcGFkX3NldF9uZWdvdGlhYmxlCi0JICBBUEk6R1NUX1BBRF9ORUdPVElBQkxFCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4NjQ0Ci0KLTIwMTAtMDYtMTQgMTY6NTE6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkgIGZha2VzaW5rOiB1c2UgbWV0aG9kIHRvIHNldCBzeW5jIHByb3BlcnR5Ci0JICBVc2UgdGhlIGJhc2VzaW5rIG1ldGhvZCB0byBjb25maWd1cmUgdGhlIHN5bmMgcHJvcGVydHkgaW5zdGVhZCBvZiBwb2tpbmcgdGhlCi0JICBwYXJlbnQgc3RydWN0dXJlLgotCi0yMDEwLTA2LTE0IDE2OjUwOjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogdXNlIHRoZSBkZWZhdWx0IGdldF90aW1lcyBmdW5jdGlvbgotCSAgVXNlIHRoZSBkZWZhdWx0IGdldF90aW1lcyBmdW5jdGlvbiBvZiBiYXNlc2luayBzbyB0aGF0IHdlIGhvbm91ciB0aGUgc3luYwotCSAgcHJvcGVydHkgaW5zdGVhZCBvZiBuZXZlciBzeW5jaHJvbml6aW5nIHRvIHRoZSBjbG9jay4KLQkgIEZpeGVzICM2MjE1MzAKLQotMjAxMC0wNi0xNCAxNjoyMDoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiByZWV2YWx1YXRlIHByb3h5X2FsbG9jIHdoZW4gcmVjb25maWd1cmVkCi0JICBXaGVuIHdlIHJlY29uZmlndXJlIHRoZSB0cmFuc2Zvcm0gZWxlbWVudCwgbWFrZSBzdXJlIHdlIHJlZXZhbHVhdGUgdGhlIHByb3h5aW5nCi0JICBvZiBidWZmZXJfYWxsb2MgdGhlIG5leHQgdGltZSBhcm91bmQuCi0JICBGaXhlcyAjNjIxMzMyCi0KLTIwMTAtMDYtMTQgMTU6Mzk6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvY2Fwc2xpc3QuaDoKLQkgIGNhcHM6IERvbid0IHVzZSBpbnZhbGlkIGZyYWN0aW9uIHJhbmdlIGluIHRoZSB1bml0IHRlc3QKLQotMjAxMC0wNi0xNCAxNTozMDowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IEFkZCBzb21lIG1vcmUgYXNzZXJ0aW9ucyBhbmQgY2hlY2tzIGZvciB2YWxpZCBpbnB1dCBwYXJhbWV0ZXJzCi0KLTIwMTAtMDUtMjcgMTU6MTM6MTggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IG9wdGltaXplIHByb2dyZXNzaXZlIG1hc2tlZF9zY2FuCi0JICBSZXRhaW4gdGhlIGxhc3Qgc2Nhbm5lZCBidWZmZXIgZW50cnkgYW5kIG9mZnNldCwgc28gd2UgY2FuIHJlc3VtZSBidWZmZXIKLQkgIHNjYW5uaW5nIHRoZXJlIGluIGNhc2Ugb2YgYSB0eXBpY2FsIHByb2dyZXNzaXZlIHNjYW4uCi0JICBBbHNvIHBvdGVudGlhbGx5IG9wdGltaXplIF9jb3B5IHN1YnNlcXVlbnRseSBvY2N1cnJpbmcgaW4gdGhhdCBhcmVhLgotCi0yMDEwLTA1LTI3IDEyOjE1OjIyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBhZGFwdGVyOiBhZGQgZXh0ZW5kZWQgbWFza2VkX3NjYW5fdWludDMyX3BlZWsgdGhhdCBhbHNvIHByb3ZpZGVzIG1hdGNoaW5nIHZhbHVlCi0JICBBbHNvIGFkZCB0byAuZGVmIGFuZCBkb2NzLgotCSAgRml4ZXMgIzYxOTgyOC4KLQkgIEFQSTogZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWsKLQotMjAxMC0wNi0xNCAxMzozODo0MSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB3aW4zMjogZml4IC5kZWYgZmlsZQotCi0yMDEwLTA2LTE0IDEyOjI1OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGRvY3M6IGFkZCBTaW5jZTogdGFnIGZvciBuZXcgZ3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlCi0KLTIwMTAtMDYtMTEgMTU6MzY6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgZG9jczogZml4IGV4YW1wbGUgdG8gdXNlIGEgY2F0ZWdvcnkgbmFtZSB0aGF0IGFjdHVhbGx5IGV4aXN0cwotCi0yMDEwLTA2LTE0IDExOjM5OjQwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdGNhcHM6IE5ldyBnc3RfY2Fwc19zdGVhbF9zdHJ1Y3R1cmUoKSBtZXRob2QKLQkgIFRoaXMgYWxsb3dzIHJlbW92aW5nIHN0cnVjdHVyZXMgZnJvbSBjYXBzIHdpdGhvdXQgdGhlbSBiZWluZyBmcmVlZC4gSGVscGZ1bCB3aGVuCi0JICBwbHVnaW5zIG5lZWQgdG8gbW92ZSBhcm91bmQgc3RydWN0dXJlcyB3aXRob3V0IGhhdmluZyB0byBkbyBhbiBleHBlbnNpdmUgc3RydWN0dXJlCi0JICBjb3B5LgotCSAgQVBJOmdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTUyNwotCi0yMDEwLTA2LTE0IDEzOjEwOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBEb24ndCBhZGQgR19USFJFQURTX01BTkRBVE9SWSB0byBHU1RfQUxMX0NGTEFHUwotCSAgSXQncyBhbHJlYWR5IGluY2x1ZGVkIGluIEdMSUJfRVhUUkFfQ0ZMQUdTCi0KLTIwMTAtMDYtMTQgMTM6MDc6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IHVzZSBHTElCX0VYVFJBX0NGTEFHUwotCi0yMDEwLTA2LTE0IDEzOjAyOjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDdhMGZkZjUgdG8gYzgwNDk4OAotCi0yMDEwLTA2LTE0IDEzOjAxOjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIGNhcHNmaWx0ZXI6IGZpeCBwcmludGYgZm9ybWF0Ci0KLTIwMTAtMDYtMTQgMTI6Mzk6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSAgY2Fwc2ZpbHRlcjogaW1wbGVtZW50IGN1c3RvbSBhY2NlcHRfY2FwcyBtZXRob2QKLQkgIEltcGxlbWVudCBhIGN1c3RvbSBhY2NlcHRjYXBzIGZ1bmN0aW9uLiBXZSBjYW4gc2ltcGx5IGNoZWNrIGlmIHRoZXJlIGlzIGFuCi0JICBpbnRlcnNlY3Rpb24gd2l0aCB0aGUgbmV3IGNhcHMuIFRoaXMgbWFrZXMgdGhlIGFjY2VwdCBjYXBzIGZ1bmN0aW9uIG11Y2ggZmFzdGVyLgotCSAgU2VlICM2MjExOTAKLQotMjAxMC0wNi0xNCAxMjozNjo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGJhc2V0cmFuc2Zvcm06IGFkZCBhY2NlcHRfY2FwcyB2bWV0aG9kCi0JICBBbGxvdyBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlIHRoZSBhY2NlcHRjYXBzIGZ1bmN0aW9uIGJlY2F1c2UgaW4gc29tZSBjYXNlcyBhCi0JICBjdXN0b20gaW1wbGVtZW50YXRpb24gY2FuIGJlIG11Y2ggbXVjaCBmYXN0ZXIgdGhhbiB0aGUgZGVmYXVsdCBvbmUuCi0JICBTZWUgIzYyMTE5MAotCi0yMDEwLTA2LTE0IDExOjMwOjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDZkYTNiYWIgdG8gN2EwZmRmNQotCi0yMDEwLTA2LTExIDE4OjQ5OjAyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSAgY2Fwc2ZpbHRlcjogUmVtb3ZlIHRyYW5zZm9ybV9zaXplCi0JICBHc3RCYXNlVHJhbnNmb3JtIG5vdyBhc3N1bWVzIHRoYXQgdGhlIHNpemUgaXMgdGhlIHNhbWUgaWYgdGhlcmUgaXMgbm90Ci0JICB0cmFuc2Zvcm1fc2l6ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjEzMzQKLQotMjAxMC0wNi0xMSAxODo0NjozMCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEFzc3VtZSBzaXplIGlzIHRoZSBzYW1lIGlmIG5vIHRyYW5zZm9ybV9zaXplL2dldF91bml0X3NpemUKLQkgIFN1YmNsYXNzZXMgdGhhdCBkb24ndCBpbXBsZW1lbiB0cmFuc2Zvcm1fc2l6ZSBzaG91bGQgYmUgYXNzdW1lZCB0byBwcm9kdWNlIG91dHB1dAotCSAgYnVmZmVycyBvZiB0aGUgc2FtZSBzaXplLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTMzNAotCi0yMDEwLTA2LTE0IDA4OjE4OjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogRG9uJ3QgaW5pdGlhbGl6ZSBhcnJheXMgZnJvbSB2YXJpYWJsZXMKLQotMjAxMC0wNi0xNCAwODoxMTozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBTdG9yZSByZXN1bHQgb2Ygc3RydG9sIGluIGFuIHVudXNlZCB2YXJpYWJsZSB0byByZWFsbHkgZml4IGEgY29tcGlsZXIgd2FybmluZy4uLgotCi0yMDEwLTA2LTEzIDIwOjUyOjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IENhc3QgcmV0dXJuIHZhbHVlIHRvIHZvaWQgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5nCi0KLTIwMTAtMDYtMTMgMTg6MTI6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3J0cG9vbC10ZXN0LmM6Ci0JICBydHBvb2wtdGVzdDogUHJldmVudCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UKLQotMjAxMC0wNi0xMyAxODowNTo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIG9iamVjdCB0byByZW5kZXIgaW4gX3JlbmRlcl9vYmplY3QoKQotCi0yMDEwLTA2LTEzIDE4OjAwOjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3R2YWx1ZTogQWRkIHNvbWUgYXNzZXJ0aW9uIGd1YXJkcyBhZ2FpbnN0IGludmFsaWQgcGFyYW1ldGVycyB0byBwdWJsaWMgQVBJCi0KLTIwMTAtMDYtMTMgMTc6MDg6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBSZW1vdmUgc29tZSBkZWFkIGFzc2lnbm1lbnRzCi0KLTIwMTAtMDYtMTMgMTc6MDY6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jOgotCSAgYnVmZmVyc3RyZXNzOiBDaGVjayBpZiB0aGUgbnVtYmVyIG9mIHRocmVhZHMgYW5kIGJ1ZmZlcnMgbWFrZXMgc2Vuc2UKLQotMjAxMC0wNi0xMyAxNzowMzo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL3JlYWQtbWV0YWRhdGEuYzoKLQkgIHJlYWQtbWV0YWRhdGE6IFN0b3AgaWYgc2V0dGluZyB0aGUgcGlwZWxpbmUgc3RhdGUgYmFjayB0byBOVUxMIGZhaWxzCi0KLTIwMTAtMDYtMTMgMTY6NTk6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbXBsZXhpdHkuYzoKLQkgIGNvbXBsZXhpdHk6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzIGFuZCB1bnVzZWQgdmFyaWFibGVzCi0KLTIwMTAtMDYtMTMgMTY6MzE6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBEb24ndCBpZ25vcmUgZmFpbHVyZSB0byBvcGVuIHRoZSB0ZW1wb3JhcnkgZmlsZSBsb2NhdGlvbgotCSAgQW5kIGltbWVkaWF0ZWx5IGxlYXZlIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gb24gZmFpbHVyZXMuCi0KLTIwMTAtMDYtMTMgMTY6Mjc6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IEZpeCBpdGVyYXRvciBhZ2dyZWdhdGlvbiBvZiBhbGwgcGFkcyBpbiB0aGUgaW50ZXJuYWwgbGlua3MgZmFsbGJhY2sKLQkgIGdfbGlzdF9wcmVwZW5kKCkgcmV0dXJucyB0aGUgbmV3IGhlYWQgb2YgdGhlIGxpc3QgYW5kIG5vdAotCSAgdXNpbmcgdGhpcyB3aWxsIGNyZWF0ZSBhIG1lbW9yeSBsZWFrIGFuZCBhIHNpbmdsZS1lbGVtZW50IGxpc3QuCi0KLTIwMTAtMDYtMTMgMTU6MjU6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkgIGl0ZXJhdG9yOiBBZGQgbmV3IEZJWE1FIGZvciAwLjExIGFuZCB1cGRhdGUgZ3N0X2l0ZXJhdG9yX2ZpbmRfY3VzdG9tIGRvY3MKLQkgIFRoZSBjb21wYXJlIGZ1bmN0aW9uIHNob3VsZCBvbmx5IHVucmVmIHRoZSBlbGVtZW50IGlmIGl0J3MKLQkgIG5vdCB0aGUgbWF0Y2hpbmcgZWxlbWVudC4KLQkgIEFsc28gdGhlIEZJWE1FIGluIF9mb2xkKCkgaXMgbm90IHJlbGV2YW50IGJlY2F1c2UgdGhlIHJlZi91bnJlZgotCSAgaGFwcGVucyBpbiB0aGUgZm9sZCBmdW5jdGlvbi4KLQotMjAxMC0wNi0xMyAxMToyNDoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgaXRlcmF0b3I6IElmIHRoZSBpdGVyYXRvciByZXN5bmMgaW4gZmluZF9jdXN0b20oKSBqdXN0IHJldHJ5Ci0KLTIwMTAtMDYtMTIgMDg6MjU6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNzMzZmNhOSB0byA2ZGEzYmFiCi0KLTIwMTAtMDYtMTIgMDg6MDQ6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBBZGQgdGVzdCBmb3IgZGVzZXJpYWxpemluZyBmb3VyY2NzCi0KLTIwMTAtMDYtMTEgMjI6NTY6MTMgKzAwMDAgIE1hcnRpbiBCaXNzb24gPG1hcnRpbi5iaXNzb25AZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IEZpeGVkIHNlcmlhbGl6YXRpb24gZm9yIHNob3J0IGZvdXJjY3MuCi0JICAiWTE2ICIgYW5kICJZOCAgIiB3ZXJlIG5vdCBkaXNwbGF5ZWQgcHJvcGVybHkgYmVjYXVzZSB0aGUgc3BhY2UKLQkgIGNoYXJhY3RlciBpcyBub3QgYWxudW0uICBBIHVuaXQgdGVzdCBpcyBhbHNvIGluY2x1ZGVkLgotCSAgRml4ZXMgYnVnICM2MjEyODIuCi0KLTIwMTAtMDYtMTEgMTY6MTI6MzMgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgZ3N0LWluc3BlY3Q6IHByaW50IHJhbmtzIHdpdGggb2Zmc2V0cyBmcm9tIG5hbWVzCi0KLTIwMTAtMDYtMDkgMTI6Mzk6NTQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmFkMTQ1YiB0byA3MzNmY2E5Ci0KLTIwMTAtMDYtMDkgMTI6MzA6NDkgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNDc2ODNjMSB0byBmYWQxNDViCi0KLTIwMTAtMDYtMDkgMTI6MTc6MDMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IGZpeCBjb21tZW50IHR5cG8gZXZlbiBtb3JlCi0KLTIwMTAtMDYtMDkgMTI6MDY6NTIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBkb2NzOiB1cGRhdGUgZG9jcyAoZm9ybWF0IGFuZCBzZWFyY2ggcGF0aCkuCi0JICBSZW1vdmUgb2Jzb2xldGUgeG1sIHJlZ2lzdHJ5IGNhY2hlIGV4dGVuc2lvbi4gVGVsbCB0aGF0IGNvbnRlbnQgYW5kIGxvY2F0aW9uIGlzCi0JICBpbnRlcm5hbCBkZXRhaWwuIERvY3VlbW50IHRoZSBwbHVnaW4gc2VhcmNoIG9yZGVyLgotCi0yMDEwLTA2LTA5IDEyOjA2OjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkgIGNvbW1lbnRzOiBhZGQgYSBmZXcgY29tbWVudHMgdG8gdGhlIHNwYXJzZWx5IGRvY3VtZW50ZWQgcGx1Z2luIGxvYWRlcgotCi0yMDEwLTA2LTA4IDExOjQxOjExICswMjAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogZml4IGNvbW1lbnQgdHlwbwotCi0yMDEwLTA2LTA4IDEyOjEyOjQyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiB1c2UgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV91bmNoZWNrZWQoKSBtYWNybyBvbmNlIG1vcmUKLQotMjAxMC0wNi0wOCAxMjoxMDozNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogdXNlIGEgc2FmZXIgbmFtZSBmb3IgdGVtcG9yYXJ5IHZhci4gdG8gbm90IHNoYWRvdyBvbmUgZnJvbSBvdXRlciBzY29wZQotCi0yMDEwLTA2LTA3IDEyOjIwOjQxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IHVzZSBnbGliIHR5cGVzIGluIG1vcmUgcGxhY2VzCi0JICBEbyBhIGJ1bmNoIG9mIGNoYXIgLT4gZ2NoYXIsIGludCAtPiBnaW50LCBkb3VibGUgLT4gZ2RvdWJsZSBjaGFuZ2VzLgotCi0yMDEwLTA2LTA3IDEyOjA3OjMwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IGp1c3QgY29tcHV0ZSBzdHJsZW4oKSBvbmNlCi0KLTIwMTAtMDYtMDcgMTA6MTY6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGRvbid0IHdhaXQgZm9yIGRhdGEgd2hlbiBFT1MKLQkgIFdoZW4gaW4gZG93bmxvYWQgbW9kZSBhbmQgd2UgbmVlZCB0byBwcm92aWRlIGRhdGEgZm9yIGFuIG9mZnNldCB0aGF0IHdlIGRvbid0Ci0JICBoYXZlLCBhbHNvIHBlcmZvcm0gYSBzZWVrIHRvIHRoZSByZXF1ZXN0ZWQgbG9jYXRpb24gd2hlbiB3ZSBhcmUgRU9TLiBUaGUgcmVhc29uCi0JICB3aHkgd2Ugc2hvdWxkbid0IHdhaXQgZm9yIG1vcmUgZGF0YSBpcyBiZWNhdXNlIGFmdGVyIEVPUywgdGhlcmUgc2ltcGx5IHdpbGwgYmUKLQkgIG5vIG1vcmUgZGF0YSBhbmQgd2UgZW5kIHVwIHdhaXRpbmcgZm9yZXZlci4KLQkgIEZpeGVzICM2MjA1MDAKLQotMjAxMC0wNi0wNyAwODoxODo0MCArMDIwMCAgTWFydGluIEJpc3NvbiA8bWFydGluLmJpc3NvbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IEFkZCBzdXBwb3J0IGZvciBwYXJzaW5nIHNob3J0IGZvdXJjY3MgZnJvbSBzdHJpbmdzCi0JICBGb3IgZXhhbXBsZSAiWTE2ICIgYW5kICJZOCAgIi4KLQotMjAxMC0wNi0wNiAyMzoxOTo1OCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgY2hlY2s6IHVzZSBnbG9iYmluZyBmb3Igc2VsZWN0aXZlIHRlc3QgaW52b2NhdGlvbiB2aWEgR1NUX0NIRUNLUwotCSAgVXNlIGdsaWIgZ2xvYmJpbmcgaW5zdGVhZCBvZiBzaW1wbGUgc3RyaW5nIG1hdGNoaW5nIHRvIGFsbG93IGUuZy4KLQkgIEdTVF9DSEVDS1M9InRlc3RfaW50ZXIqIiBtYWtlIGdzdC9nc3RjYXBzLmNoZWNrCi0KLTIwMTAtMDYtMDYgMjE6MjA6MjEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jOgotCSAgY2Fwc25lZ286IGFsc28gbWVhc3N1cmUgcGlwZWxpbmUgYnVpbGRpbmcgdGltZQotCi0yMDEwLTA2LTA1IDIzOjE4OjA5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogYXZvaWQgYSBjYXBzLWNvcHkKLQkgIFdlIGNhbiBzaW1wbHkgdHJ1bmNhdGUgdGhlIGNhcHMsIGFzICdvdGhlcmNhcHMnIGlzIHRoZSByZXN1bHQgb2YgaW50ZXJzZWN0Ci0JICBvcGVyYXRpb25zIGFuZCB0aHVzIG91cnMgYW5kIHdyaXRhYmxlLgotCi0yMDEwLTA2LTAzIDAxOjQ5OjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBpbmZvOiBhZGQgbmV3IFRSQUNFIGxvZyBsZXZlbCBhbmQgbW92ZSByZWZjb3VudGluZyB0aGVyZSBmcm9tIExPRyBsZXZlbAotCSAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBlYXNpbHkgZ2V0IGEgKjo1IGRlYnVnIGxvZyB3aXRob3V0IGFsbAotCSAgdGhlIHJlZmNvdW50aW5nIG5vaXNlLCBhbmQgZHJhc3RpY2FsbHkgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGxpbmVzCi0JICBvdXRwdXQgZm9yIGEgbm9ybWFsIGxvZyAoNDZtIHRvIDI4bSBmb3IgYSAyMG1pbiB2aWRlbykuIFRoZSBmdWxsIGxvZwotCSAgaW5jbHVkaW5nIHJlZmNvdW50aW5nIGluZm9ybWF0aW9uIGNhbiBzdGlsbCBiZSBnb3R0ZW4gdXNpbmcgKjo3LgotCSAgRml4ZXMgIzYyMDQ2MC4KLQotMjAxMC0wNi0wNCAxNzoxMDowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IFVzZSBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIGZvciBzdGFuZGFyZCBwcm9wZXJ0aWVzCi0KLTIwMTAtMDYtMDMgMTc6MjE6MDAgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxAYmFzZS1hcnQubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogTWFrZSBnc3RfYmFzZV9zaW5rX3F1ZXJ5IHJldHVybiBUUlVFIGlmIHRoZSBzZWdtZW50IHF1ZXJ5IHN1Y2NlZWRlZC4KLQkgIEZpeGVzIGJ1ZyAjNjIwNDkwLgotCi0yMDEwLTA2LTAxIDIzOjQ4OjU5IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDE3Zjg5ZTUgdG8gNDc2ODNjMQotCi0yMDEwLTA2LTAxIDIyOjU0OjIwIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGZkN2NhMDQgdG8gMTdmODllNQotCi0yMDEwLTA1LTI0IDE3OjI1OjUyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZHM6IEltcHJvdmUgcmVhZGFiaWxpdHkgZm9yIGdzdF9wYWRfZml4YXRlX2NhcHMoKQotCSAgSnVzdCB0cnVuY2F0ZSBhbmQgdGhlbiBmaXhhdGUuIFdlIGNoZWNrIGZvciBlbXB0eSBjYXBzIGluIHRoZSBiZWdpbiBhbmQgYQotCSAgZml4YXRlLWZ1bmMgdGhhdCBlbXB0aWVzIGEgY2FwcyB3b3VsZCBiZSBicm9rZW4uIEl0IGFsc28gaGVscHMgbGF6eSBjYXBzIGltcGwuCi0JICBpbiBidWcgNjE4ODUzIGJ5IGF2b2lkaW5nIHRoZSBnc3RfY2Fwc19nZXRfc2l6ZSgpLgotCi0yMDEwLTA2LTAxIDExOjQ2OjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIGNoZWNrOiBsb2cgcGx1Z2lucyBhdmFpbGFibGUgdG8gdW5pdCB0ZXN0cyBhbmQgdGhlaXIgcGF0aHMKLQotMjAxMC0wNi0wMSAxMTo0NToxMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgd2luMzI6IGNvbW1pdCBNYWtlZmlsZSBjaGFuZ2VzIGZvciB3aW4zMi11cGRhdGUgYXMgd2VsbAotCi0yMDEwLTA1LTMxIDE1OjE0OjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2dzdG1hcnNoYWwuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RtYXJzaGFsLmg6Ci0JICB3aW4zMjogYWRkIHByZS1nZW5lcmF0ZWQgdmVyc2lvbnMgb2YgZ3N0bWFyc2hhbC5bY2hdIGFzIHdlbGwKLQkgIGFuZCBwdXQgdGhlbSBuZXh0IHRvIHRoZSBwcmUtZ2VuZXJhdGVkIGVudW10eXBlcyBmaWxlcyBmb3IgdGhvc2UKLQkgIG5vdCB1c2luZyBhdXRvdG9vbHMgZm9yIGJ1aWxkbGluZyBHU3RyZWFtZXIuCi0KLTIwMTAtMDUtMjcgMTU6MTA6MzQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKLQkgIHRlc3RzOiBhbHNvIGNoZWNrIGZvciBhZGFwdGVyIGJ1ZmZlciBtZXJnaW5nIGluIHVuaXQgdGVzdAotCi0yMDEwLTA1LTI3IDEyOjUwOjIyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiBmaXggX3RyeV90b19tZXJnZV91cAotCSAgVGhhdCBpcywgcHJvdmlkZSBjb3JyZWN0IHJldHVybiB2YWx1ZSAoYXMgZG9jdW1lbnRlZCksIGFuZCBhY3R1YWxseQotCSAgbG9vcCB0byBjb25zaWRlciBtb3JlIHRoYW4gdGhlIGZpcnN0IDIgYnVmZmVycy4KLQotMjAxMC0wNS0yNyAxMjo0ODoxOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBmaXggZG9jdW1lbnRhdGlvbiBnbGl0Y2gKLQotMjAxMC0wNS0yNiAxMTo1NDozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAzNTdiMGRiIHRvIGZkN2NhMDQKLQotMjAxMC0wNS0yNSAxOToxNzo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgZ3N0YmluOiB1bmxvY2sgX2dldF9zdGF0ZSgpIG9uIGVycm9yCi0JICBXaGVuIGFuIGVycm9yIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgb24gdGhlIGJ1cywgbWFyayB0aGUgYmluIGFzIGJlaW5nIGluIHRoZSBlcnJvcgotCSAgc3RhdGUgYW5kIHVubG9jayBhbGwgY3VycmVudCBfZ2V0X3N0YXRlKCkgY2FsbHMgd2l0aCBhbiBlcnJvci4KLQkgIEZpeGVzICM1MDU3NzAKLQotMjAxMC0wNS0yNCAxOTowNzozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWdzZXR0ZXIuYzoKLQkgIGNoZWNrczogYWRkIG11bHRpLXRocmVhZCB0ZXN0IGZvciB0YWdzZXR0ZXIKLQkgIFNlZSAjNjE5NTMzLgotCi0yMDEwLTA1LTI0IDE5OjA2OjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSAgdGFnc2V0dGVyOiBtYWtlIHN1cmUgb25seSBvbmUgdGhyZWFkIGNyZWF0ZXMgdGhlIFRhZ0RhdGEKLQotMjAxMC0wNS0yNCAxODoxNjoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkgIHRhZ3NldHRlcjogcHJvdGVjdCB0YWdzZXR0ZXIgb3BlcmF0aW9ucyB3aXRoIGEgbG9jawotCSAgU28gd2UgZG9uJ3QgY3Jhc2ggd2hlbiBhIG11eGVyIHRyaWVzIHRvIGFkZCB0YWdzIGZyb20gdHdvCi0JICB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUsIGVnLiBiZWNhdXNlIGl0IHJlY2VpdmVkIHRhZyBldmVudHMKLQkgIG9uIHR3byBpbnB1dCBwYWRzIHNpbXVsdGFuZW91c2x5LgotCSAgU2VlICM2MTk1MzMuCi0KLTIwMTAtMDUtMjIgMjM6MjY6MTYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IHVzZSBvdXIgbWFjcm9zIG1vcmUgb2Z0ZW4gaW4gdGhlIGNvZGUKLQotMjAxMC0wNS0yMiAyMzowNzoxMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogYWRkIGFwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkCi0JICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCBjYXBzIGlzICFOVUxMLCB3cml0YWJsZSBhbmQgc3RydWN0dXJlIGlzCi0JICAhTlVMTCB0b28uCi0KLTIwMTAtMDUtMjIgMjI6NDY6NDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgIHRlc3RzOiByZW5hbWUgdGVzdHN1aXRlCi0JICBQcmV2aW91cyBuYW1lIHdhcyBvbmx5IGFwcGxpY2FibGUgdG8gYSBmZXcgb2YgdGhlIHRlc3RzLgotCi0yMDEwLTA1LTIyIDIyOjQ1OjMzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGRvY3M6IHhyZWYgZnVuY3Rpb24gbmFtZQotCi0yMDEwLTA1LTIyIDIyOjQ0OjAyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiB1c2Ugb3VyIG1hY29zIG1vcmUKLQotMjAxMC0wNS0yMiAyMjozMzowOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3JhbmRvbS9lbnNvbmljL2xhenljYXBzLnR4dDoKLQkgIGRlc2lnbjogbW9yZSBwbGFubmluZyBvbiBsYXp5IGNhcHMuCi0KLTIwMTAtMDUtMjIgMTA6MDE6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBzdHJ1Y3R1cmU6IEFQSTogQWRkIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX3N0cmluZygpCi0KLTIwMTAtMDUtMTkgMTY6MjE6NDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9yYW5kb20vZW5zb25pYy9sYXp5Y2Fwcy50eHQ6Ci0JICBkZXNpZ246IGNvbGxlY3QgaWRlYXMgZm9yIGhhdmluZyBsYXp5IGNhcHMKLQkgIERlc2lnbiBkb2MgZm9yIGhhdmluZyBvbiB0aGUgZmx5IGV2YWx1YXRlZCBjYXBzIChzZWUgYnVnICM2MTg4NTMpLgotCi0yMDEwLTA1LTE5IDE1OjU3OjA4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkgIGRvY3M6IGFkZCBsaW5rcyBmb3IgR1NvdXJjZSBwcmlvcml0aWVzCi0JICBOb3cgaXQgaXMgeHJlZmZlZCB3aXRoIHRoZSBnbGliIGRvY3MsIHdoZXJlIHRoZSBwcmlvcml0eSBzY2FsZSBpcyBleHBsYWluZWQuCi0KLTIwMTAtMDUtMTkgMTQ6MDg6MjYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jOgotCSAgYmVuY2htYXJrOiBhZGQgY29tbWFuZGxpbmUgcGFyYW1ldGVycyBmb3IgY2Fwc25lZ28KLQkgIEFsbG93IHRvIHNwZWNpZnkgdGhlIGdyYXBoIHNpemUgYW5kIG9mZmVyIHR3byBmbGF2b3VycyAoYXVkaW8vdmlkZW8pLgotCi0yMDEwLTA1LTE5IDA5OjU2OjUxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NhcHNuZWdvLmM6Ci0JICBiZW5jaG1hcmtzOiBhZGQgYSBiZW5jaG1hcmsgZm9yIGNhcHNuZWdvdGlhdGlvbgotCSAgVGhlIHRlc3QgYnVpbGRzIGEgdHJlZSBsaWtlIGdyYXBoIGhhdmluZyBjb252ZXJzaW9uIGFuZCBiYXNldHJhbnNmb3JtIGVsZW1lbnRzLgotCi0yMDEwLTA1LTE4IDE3OjUxOjAxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvY2Fwcy5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9jb21wbGV4aXR5LmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9tYXNzLWVsZW1lbnRzLmM6Ci0JICBiZW5jaG1hcmtzOiB1c2UgZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCgpIGluc3RlYWQgb2Ygb3duIGltcGxlbWVudGF0aW9uCi0KLTIwMTAtMDUtMTggMTg6Mzg6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBhZGQgaml0dGVyIHRvIGRlYnVnIG91dHB1dAotCi0yMDEwLTA1LTE4IDE4OjM1OjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgbWluaW9iamVjdDogY2xlYW51cCB0eXBlIHJlZ2lzdHJhdGlvbiBhIGxpdHRsZQotCSAgV2UgY2FuIG1ha2Ugc29tZSBzdHJ1Y3RzIGNvbnN0IHN0YXRpYyB3aXRoIGxpdHRsZSBlZmZvcnQuCi0KLTIwMTAtMDUtMTcgMTM6MDk6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGRvbid0IHByaW50IFdBUk5JTkcgZGVidWcgc3RhdGVtZW50cyBmb3Igbm9ybWFsIHRoaW5ncyBsaWtlIEVPUywgcGFydCBJSQotCi0yMDEwLTA1LTE0IDE4OjIyOjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDRkNjdiZDYgdG8gMzU3YjBkYgotCi0yMDEwLTA1LTE0IDExOjUyOjAzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBjb21tZW50IGFuZCB3aGl0ZXNwYWNlIGNsZWFudXAKLQkgIE1ha2UgY29tbWVudCBtb3JlIHNwZWNpZmljLCByZXBvc2l0aW9uIGl0IGFuZCBhZGQgbW9yZSBvZiB0aGUga2luZC4KLQkgIE1vdmUgb25lIGlmZGVmJ2VkIGZ1bmN0aW9uIGFyb3VuZC4KLQotMjAxMC0wNS0xMyAwODoyMTozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IFNpbXBsaWZ5IGZyYWN0aW9ucyBiZWZvcmUgZG9pbmcgY2FsY3VsYXRpb25zIHRoYXQgY291bGQgY2F1c2Ugb3ZlcmZsb3dzCi0JICAuLi4gdG8gcHJldmVudCBzb21lIHVubmVjZXNzYXJ5IG92ZXJmbG93cyBmcm9tIGhhcHBlbmVuaW5nLgotCi0yMDEwLTA1LTEzIDA4OjAwOjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogR0NEIGlzIDAgaWYgYm90aCBwYXJhbWV0ZXJzIGFyZSAwLCBkb24ndCBkaXZpZGUgYnkgemVybwotCSAgQW5kIHR1cm4gb3ZlcmZsb3cgY2hlY2tzIGZyb20gYXNzZXJ0aW9ucyBpbnRvIHNpbXBsZSBjaGVja3MgdG8KLQkgIHJldHVybiBGQUxTRS4KLQotMjAxMC0wNS0xMyAwNzo1MToxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IFNpbXBsaWZ5IHJlc3VsdCBvZiBnc3RfZnJhY3Rpb25fbXVsdGlwbHkoKQotCi0yMDEwLTA1LTEwIDEzOjI1OjA0IC0wNDAwICBUcmlzdGFuIE1hdHRoZXdzIDx0cmlzdGFuQHNhdC5xYy5jYT4KLQotCSogZG9jcy9mYXEvdXNpbmcueG1sOgotCSAgZmFxOiB1cGRhdGVkIGxpbmUgYWJvdXQgamFjayBvdXRwdXQKLQotMjAxMC0wNS0wMyAxMTozMjoyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6Ci0JICB0ZXN0czogUmVhZCByZXR1cm4gdmFsdWUgdG8gbWFrZSBjbGFuZy9pY2MgaGFwcHkKLQotMjAxMC0wNS0wNiAxNjo0MTowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgUmV2ZXJ0ICJwYWQ6IGRvbid0IGNoZWNrIHR3aWNlIGZvciBjaGFuZ2VkIGNhcHMgcGVyIHB1c2giCi0JICBXZSBuZWVkIHRvIGNoZWNrIHRoZSBwYWQgY2FwcyBvbiB0aGUgc3JjcGFkIGFzIHdlbGwgYXMgb24gdGhlIHNpbmtwYWQuIFJldmVydAotCSAgdGhpcyBjb21taXQgYXMgaXQgcmVtb3ZlcyB0aGUgY2hlY2sgb24gdGhlIHNyY3BhZCBhbmQgY2FuIGxlYXZlIHRoZSBzcmNwYWQKLQkgIHVubmVnb3RpYXRlZCAob3IgbmVnb3RpYXRlZCB3aXRoIHdyb25nIGNhcHMpCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDA3ZGMxZTViNDk1ODBhODliZmVmMjdmZjI3NDc2ZDUxZmIzY2UyYzIuCi0KLTIwMTAtMDUtMDYgMTc6MDI6NDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBkb24ndCBjaGVjayB0d2ljZSBmb3IgY2hhbmdlZCBjYXBzIHBlciBwdXNoCi0JICBnc3RfcGFkX2NoYWluX2RhdGFfdW5jaGVja2VkKCkgZG9lcyB0aGUgc2FtZSBjaGVjayBhbHJlYWR5LgotCi0yMDEwLTA1LTA2IDE2OjUxOjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogcmVmbG93IHRvIHRydW5jYXRlIGNhcHMganVzdCBvbmNlCi0JICBXZSBnZXQgd3JpdGFibGUgY2FwcyBmcm9tIHRoZSBpbnRlcnNlY3Rpb24gKHVubGVzcyBpdCBmYWlsZWQpLiBBcyB3ZSB0cnVuY2F0ZQotCSAgdGhvc2UgYW55d2F5LCB3ZSBkb24ndCBuZWVkIHRvIG1hbnVhbHkgY29weSB0aGUgZmlyc3Qgc3RydWN0dXJlLgotCi0yMDEwLTA1LTA0IDEzOjI5OjAyICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogdG9vbHMvZ3N0LXJ1bi5jOgotCSAgdG9vbHM6IGZpeCBnc3QtcnVuIHdyYXBwZXIgdG8gd29yayBvbiBXaW5kb3dzCi0JICBGaXhlcyAjNjE3NjI1Ci0KLTIwMTAtMDUtMDMgMDA6MjY6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgotCSAgZG9jczogZG9jdW1lbnQgdGhhdCBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZyooKSB3cml0ZXMgdGhlIHRlcm1pbmF0b3IgdG9vCi0KLTIwMTAtMDUtMDUgMTI6MDE6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgZG9jczogY2xhcmlmeSB0aGUgcHVsbF9yYW5nZSBmdW5jdGlvbnMKLQkgIENsYXJpZnkgdGhlIGdzdF9wYWRfcHVsbF9yYW5nZSgpLCBHc3RCYXNlU3JjOjpjcmVhdGUoKSwgZ3N0X3BhZF9nZXRfcmFuZ2UoKQotCSAgYW5kIEdzdFBhZEdldFJhbmdlIGZ1bmN0aW9ucyBhIGxpdHRsZS4KLQkgIEZpeGVzICM2MTc3MzMKLQotMjAxMC0wNS0wNCAxMTo0NTowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBpbXByb3ZlIGRlYnVnZ2luZwotCi0yMDEwLTA0LTMwIDExOjI3OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiB1c2UgcmVmZmVkIF9nZXRfY2FwcygpIHZlcnNpb24KLQkgIFdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhIHdyaXRhYmxlIGNvcHkgc28gd2UgY2FuIHVzZSB0aGUgX3JlZmZlZAotCSAgdmVyc2lvbiBpbnN0ZWFkLgotCi0yMDEwLTA0LTI5IDIxOjU3OjE1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnczogQWRkcyBnZW8gbG9jYXRpb24gZGlyZWN0aW9uIHRhZ3MKLQkgIEFkZHMgMyBuZXcgZ2VvIGxvY2F0aW9uIHRhZ3MgaW52b2x2aW5nIGRpcmVjdGlvbiBhbmQKLQkgIG1vdmVtZW50IG9mIGNhcHR1cmUuIFRob3NlIGFyZToKLQkgIEFQSTogR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04KLQkgIEFQSTogR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OCi0JICBBUEk6IEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVECi0JICBGaXhlcyAjNjE3MjIzCi0KLTIwMTAtMDQtMTYgMDY6NTc6MDUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdzOiBBZGRzIEdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUiBhbmQgR1NUX1RBR19ERVZJQ0VfTU9ERUwKLQkgIEFkZHMgdGhvc2UgbmV3IHRhZ3MgdG8gZGVzY3JpYmUgdGhlIGRldmljZSBtYW51ZmFjdHVyZXIgYW5kCi0JICBtb2RlbCB1c2VkIHRvIGNyZWF0ZSBtZWRpYXMuCi0JICBBUEk6IEdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUgotCSAgQVBJOiBHU1RfVEFHX0RFVklDRV9NT0RFTAotCSAgRml4ZXMgIzYxNTk0MQotCi0yMDEwLTA1LTAyIDE5OjQzOjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtdGFnZ2luZy54bWw6Ci0JICBwd2c6IHJlbW92ZSBjb25mdXNpbmcgbWV0YWRhdGEgZXhhbXBsZSB3aXRoIDAuOCBjb2RlCi0JICBGaXhlcyAjNTM0MzE0LgotCi0yMDEwLTA1LTAyIDE5OjMwOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtbWV0YWRhdGEueG1sOgotCSAgbWFudWFsOiBhZGQgbWluaW1hbCB0YWcgcmVhZGluZyBleGFtcGxlCi0JICBTaG91bGQgcHJvYmFibHkgcHV0IHRoYXQgaW50byB0ZXN0cy9leGFtcGxlcyBhbmQgZmlndXJlIG91dCBob3cgdG8KLQkgIGdldCBpdCBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5LCBidXQgY2FuJ3QgYmUgYm90aGVyZWQgcmlnaHQgbm93LgotCi0yMDEwLTA0LTMwIDEzOjEwOjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdC5jOgotCSAgQnVtcCBHTGliIHJlcXVpcmVtZW50IHRvIDIuMjAKLQkgIFNlZSBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93aWtpL1JlbGVhc2VQbGFubmluZy9HTGliUmVxdWlyZW1lbnQKLQotMjAxMC0wNC0yOSAyMzoyOTozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogb25seSB3YXJuIGlmIG1ldGFkYXRhIGlzIG5vdCB3cml0YWJsZSB3aGVuIGl0IHNob3VsZCBiZSwgZG9uJ3QgcmV0dXJuIGFzIHdlbGwKLQkgIE1ha2Ugc3VyZSB3ZSBleGVjdXRlIHRoZSBzYW1lIGNvZGUgcGF0aCBpbiBnaXQgdmVyc2lvbnMgYW5kIGluIHJlbGVhc2VzLAotCSAgc28ganVzdCB3YXJuIHdoZW4gbWV0YWRhdGEgaXNuJ3Qgd3JpdGFibGUgd2hlbiB3ZSB3YW50IGl0IHRvIGJlIGluc3RlYWQKLQkgIG9mIGJhaWxpbmcgb3V0LgotCi0yMDEwLTA0LTI5IDIzOjI2OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IG1ha2UgJ2FkZGluZyBmbHVzaGluZyBwYWQnIHdhcm5pbmcgbW9yZSB1c2VmdWwKLQkgIFRoaXMgaXMgYSBwcmV0dHkgY29tbW9uIGlzc3VlIHdpdGggZ2hvc3QgcGFkcywgbGV0J3MgbWFrZQotCSAgdGhlIHdhcm5pbmcgbW9yZSBoZWxwZnVsIGFuZCB0ZWxsIHBlb3BsZSB3aGF0IHRoZXkgbmVlZAotCSAgdG8gZG8gdG8gZml4IGl0LgotCi0yMDEwLTA0LTI4IDE3OjE1OjQxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGdzdC1sYXVuY2g6IGFkZCAtcCBvcHRpb24gdG8gZGlzYWJsZSBwbGF5IGhhbmRsZXIuCi0JICBTYW1lIGxvZ2ljIGFzIGZvciB0aGUgZmF1bHQgaGFuZGxlci4gVGhpcyBpcyB1c2VmdWwgZm9yIHNvbWUgZGVidWcvdHJhY2luZyB0b29scwotCSAgdGhhdCBuZWVkIHRvIGdyYWIgU0lHVVNSMSBhbmQgU0lHVVNSMiB0aGVtIHNlbGYuCi0KLTIwMTAtMDQtMTUgMTA6MzY6NTIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGltcGxlbWVudCBwZXJjZW50YWdlIHBvc2l0aW9uIGFuZCBkdXJhdGlvbiBxdWVyaWVzCi0JICBJZiB1cHN0cmVhbSBkb2VzIG5vdCBoYW5kbGUgdGhlbSwgdGhlbiBpbXBsZW1lbnQgdGhvc2Ugb3Vyc2VsZi4KLQotMjAxMC0wNC0xNCAxNzo0NzozNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogdXNlIGdzdF9wYWRfcGVlcl9xdWVyeSBpbnN0ZWFkIG9mIHJlaW52ZW50aW5nLgotCi0yMDEwLTA0LTE0IDE3OjQ2OjU1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgcXVlcmllczogYWRkIG1vcmUgbG9nZ2luZwotCSAgTG9nIGh1bWFuIHJlYWRhYmxlIGZvcm1hdHMgYW5kIGxvZyBxdWVyeSByZXN1bHQuCi0KLTIwMTAtMDQtMTkgMjA6MzU6MzYgKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgY2FwczogRG8gbm90IGFsbG93IGZpeGF0aW5nIGVtcHR5IGNhcHMKLQkgIFBhc3NpbmcgZW1wdHkgY2FwcyB0byBnc3RfcGFkX2ZpeGF0ZV9jYXBzKCkgaXMgaW52YWxpZCwgYXMgZW1wdHkgY2FwcwotCSAgY2Fubm90IGJlIGZpeGF0ZWQuCi0KLTIwMTAtMDQtMjYgMjE6NTI6MDcgKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGNhcHMuaDoKLQkgIGNhcHM6IFVzZSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUIGZvciBtYWtlX3dyaXRhYmxlKCkKLQkgIFBlb3BsZSBvZnRlbiBjYWxsCi0JICBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLQkgIGluc3RlYWQgb2YKLQkgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLQkgIGFuZCBjYXVzZSBhIGJ1Zy4gV2FybmluZyBhYm91dCBhbiB1bnVzZWQgcmV0dXJuIHZhbHVlIGhlbHBzIGhlcmUuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxNjU0MSNjMiBmb3IgYW4gZXhhbXBsZS4KLQotMjAxMC0wNC0yMyAwNjoyNDo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlcnJvci5jOgotCSAgZ3N0OiBVc2UgR0Vycm9yIGJveGVkIHR5cGUgZnJvbSBHT2JqZWN0IDIuMjUuMiBpbnN0ZWFkIG9mIG91ciBvd24gaWYgcG9zc2libGUKLQotMjAxMC0wNC0yOSAxNDo1MDozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgQmFjayB0byBkZXZlbG9wbWVudC4KLQotMjAxMC0wNC0xNSAxNzoxMTo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBkb2NzOiBhZGQgc29tZSBtb3JlIGRvY3MgZm9yIHRoZSBldmVudHMKLQotPT09IHJlbGVhc2UgMC4xMC4yOSA9PT0KLQotMjAxMC0wNC0yNyAyMzo0MjoxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMC4xMC4yOQotCi0yMDEwLTA0LTI3IDIzOjQwOjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxMC0wNC0yNyAwOTo0MjowNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkgIHRlc3RzOiBhZGQgbW9yZSB0ZXN0cyBmb3IgY29udHJvbGxlcgotCSAgVGhlIHRlc3RzIHZlcmlmeSB0aGF0IGJ1ZyAjNjE2ODQ2IGlzIGluZGVlZCBmaXhlZC4KLQotMjAxMC0wNC0yNiAxNTo0MzoxNyArMDIwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgIGNvbnRyb2xsZXI6IEZpeCBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlcgotCSAgVGhlIGxvZ2ljIGluIHRoYXQgZnVuY3Rpb24gaXMgYnJva2VuLiBWYXJpb3VzIE5VTEwtY2hlY2tpbmcgYmFuZGFpZHMgZm9yCi0JICBndWFyYW50ZWVkIG5vbi1OVUxMIHZhcmlhYmxlcyBkaWRuJ3QgZXZlbiBoZWxwIHRoZXJlLgotCSAgVGhpcyBwYXRjaCB1cGRhdGVzIHRoZSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHByZXZpb3VzIGl0ZW0gZXhpc3RzCi0JICBiZWZvcmUgZmV0Y2hpbmcgaXQgaW5zdGVhZCBvZiBhZnRlci4gVGhpcyBtYWtlcyBhbGwgb3RoZXIgdGVzdHMKLQkgIHVubmVjZXNzYXJ5LgotCSAgSW4gcGFydGljdWxhciwgaXQgbWFrZXMgdGhlIGNoZWNrIGZvciBhbiBlbXB0eSBsaXN0IHVubmVjZXNzYXJ5LCBiZWNhdXNlCi0JICBmb3IgZW1wdHkgbGlzdHMgdGhlIG9ubHkgaXRlciBpcyB0aGUgYmVnaW4gaXRlciAoYW5kIHRoZSBlbmQgaXRlcikgYW5kCi0JICBzbyB0aGUgbmV3IGNoZWNrIGNhdGNoZXMgdGhhdCBjYXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxNjg0NgotCi0yMDEwLTA0LTI1IDIxOjE1OjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMjguMyBwcmUtcmVsZWFzZQotCi0yMDEwLTA0LTIwIDE3OjE3OjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JICBkb2FwOiB1cGRhdGUgcmVwb3NpdG9yeSBpbmZvIGZyb20gY3ZzLT5naXQgYW5kIG1haW50YWluZXJzCi0KLTIwMTAtMDQtMjMgMTQ6Mzk6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmM4NTg2NyB0byA0ZDY3YmQ2Ci0KLTIwMTAtMDQtMTYgMjA6MDk6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSogZG9jcy9wd2cvcHdnLnhtbDoKLQkgIGRvY3M6IENvbnNpc3RlbnRseSB1c2UgTXlGaWx0ZXIgaW5zdGVhZCBvZiBzb21ldGltZXMgRXhhbXBsZUZpbHRlciBpbiB0aGUgZXhhbXBsZQotCSAgRml4ZXMgYnVnICM2MTU1NzkuCi0KLTIwMTAtMDQtMTYgMTQ6MjI6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBwYWQ6IGFkZCBlbnVtcyBmb3IgY3VzdG9tIGZsb3cgcmV0dXJuIHN1Y2Nlc3MgYW5kIGVycm9yIGNvZGVzCi0JICBUaGlzIHdheSBwZW9wbGUgY2FuIGp1c3QgI2RlZmluZSB0aGVpciBvd24gY3VzdG9tIGZsb3cgcmV0dXJucyB0bwotCSAgb25lIG9mIHRoZXNlIHdpdGhvdXQgaGF2aW5nIHRoZSBjb21waWxlciAoZXNwLiBnY2MtNC41KSBjb21wbGFpbgotCSAgYWJvdXQgY29tcGFyaW5nIGludGVnZXJzIHRvIGFuIGVudW0gb3IgdGhlIGVudW0gbm90IGJlaW5nIGxpc3RlZAotCSAgRml4ZXMgIzYxNTg4MC4KLQkgIEFQSTogR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMQotCSAgQVBJOiBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18yCi0JICBBUEk6IEdTVF9GTE9XX0NVU1RPTV9FUlJPUl8xCi0JICBBUEk6IEdTVF9GTE9XX0NVU1RPTV9FUlJPUl8yCi0KLTIwMTAtMDQtMTUgMjI6MDU6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkgIGxmb2NvbnRyb2xzb3VyY2U6IFVzZSBjb3JyZWN0IHNldHRlciBmb3IgZG91YmxlIEdWYWx1ZXMKLQotMjAxMC0wNC0xNSAxMTowODowMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdzOiBkb2MgZml4ZXMKLQkgIEFkZHMgbWlzc2luZyAnOicgdG8gdGFncyBkb2NzCi0KLTIwMTAtMDQtMTUgMTE6Mzg6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IGZpeCBib2d1cyB2YXJpYWJsZSB0eXBlCi0JICBUaGUgcmVzdWx0IG9mIGdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbSgpIGlzIG5vdCBhIEdzdEl0ZXJhdG9yICouCi0KLTIwMTAtMDQtMTQgMTI6MjA6MTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgMC4xMC4yOC4yIHByZS1yZWxlYXNlCi0KLTIwMTAtMDQtMTQgMTI6MTI6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wNC0xNCAxMjo0Mzo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogbG9nIHdoYXQgc3RydWN0dXJlIHN0cmluZyB3ZSBmYWlsZWQgdG8gcGFyc2UKLQotMjAxMC0wNC0xNCAxNzo1NjoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBmaXggcmVmY291bnQgd2hlbiByZW1vdmluZyBlbGVtZW50cyBkdXJpbmcgc3RhdGUgY2hhbmdlCi0JICBXaGVuIGFuIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIGEgYmluIGJlY2F1c2UgaXQgY2F1c2VkIGEgc3RhdGUgY2hhbmdlIGVycm9yLAotCSAgZG9uJ3QgdW5yZWYgdGhlIGNoaWxkIHR3aWNlLgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgotCSAgQWRkIGEgdW5pdCB0ZXN0IGZvciB0aGlzIGVycm9yLgotCSAgRml4ZXMgIzYxNTc1NgotCi0yMDEwLTA0LTE0IDExOjUwOjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogbW9yZSBMREZMQUdTIC0+IExEQUREIGZpeGVzCi0KLTIwMTAtMDQtMTQgMTE6NDA6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBidWlsZDogJChMSUJNKSBiZWxvbmdzIGludG8gTElCQUREIG5vdCBMREZMQUdTCi0KLTIwMTAtMDQtMDggMDk6MTQ6MjQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgotCSogdG9vbHMvTWFrZWZpbGUuYW06Ci0JICBidWlsZDogd2hlbiBidWlsZGluZyBleGVjdXRhYmxlcywgcHV0IGxpYnMgdG8gbGluayB0byBpbnRvIExEQUREIGluc3RlYWQgb2YgTERGTEFHUwotCSAgVXNlIGZvb19MREFERCBpbnN0ZWFkIG9mIGZvb19MREZMQUdTIHRvIHNwZWNpZnkgdGhlIGxpYnJhcmllcyB0byBsaW5rIHRvLgotCSAgVGhpcyBzaG91bGQgbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIgaW4gdGhlIHJpZ2h0Ci0JICBvcmRlci4gU2VlICM2MTU2OTcuCi0KLTIwMTAtMDQtMTQgMTE6MTk6MTQgKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBSZW1vdmUgLVdjYXN0LWFsaWduCi0JICBBcHBhcmVudGx5IGdjYyB3YXJucyB0aGF0IEdzdE1pbmlPYmplY3QgaXMgbm90IGNhc3RhYmxlIHRvCi0JICBHc3RFdmVudC9NZXNzYWdlL0J1ZmZlciBkdWUgdG8gdGhlbSBjb250YWluaW5nIDY0Yml0IHZhcmlhYmxlcywgZXZlbgotCSAgdGhvdWdoIEFSTSBoYWNrZXJzIGNsYWltIHRoYXQgdGhvc2Ugb25seSBuZWVkIDRieXRlIGFsaWdubWVudC4gQW5kIGFzCi0JICBsb25nIGFzIGdjYyBiZWhhdmVzIHRoYXQgd2F5LCB0aGlzIHdhcm5pbmcgaXMgbm90IHZlcnkgdXNlZnVsLgotCSAgU28gd2UnbGwgcmVtb3ZlIHRoZSB3YXJuaW5nIHVudGlsIHRoaXMgcHJvYmxlbSBpcyBmaXhlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTU2OTgKLQotMjAxMC0wNC0xMyAxMDo0ODo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogcmVtb3ZlIHN1cGVyZmx1b3VzIHJldHVybiBzdGF0ZW1lbnRzIGF0IGVuZCBvZiBBQ19UUllfe0xJTkssQ09NUElMRX0gYmxvY2tzCi0JICBTcG90dGVkIGJ5IEpGIE1lcnRlbnMuIFNlZSAjNjE0NzY3LgotCi0yMDEwLTA0LTA1IDEzOjQ2OjIzIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBDaGFuZ2UgY2hlY2sgZm9yIHVpbnQxMjhfdAotCSAgQ2hlY2sgZm9yIGFiaWxpdHkgdG8gZGl2aWRlIHVpbnQxMjhfdCB2YWx1ZXMsIHNpbmNlIHRoYXQgd2hhdAotCSAgd2UgYWN0dWFsbHkgdXNlIGl0IGZvciAoaW4gZ3N0dXRpbHMuYykuICBUaGUgZXhpc3RlbmNlIG9mIGEKLQkgIHVpbnQxMjhfdCB0eXBlIGRvZXNuJ3QgbWVhbiB0aGUgY29tcGlsZXIgY2FuIGFjdHVhbGx5IGdlbmVyYXRlCi0JICBjb2RlIGZvciBpdC4gIEFsc28gbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGFjdHVhbGx5IGxpbmsgdGhlCi0JICByZXN1bHQgc3VjY2Vzc2Z1bGx5LgotCSAgRml4ZXMgYnVnICM2MTQ3NjcuCi0KLTIwMTAtMDQtMTIgMTU6MTM6NTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKLQkgIGRvY3M6IG1pbm9yIG1vdmluZy1wbHVnaW5zIGFkZGl0aW9uCi0KLTIwMTAtMDQtMDkgMTU6NDg6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGxhdW5jaDogbWFrZSAtcSBiZSBtb3JlIHF1aWV0Ci0JICBDb252ZXJ0IHNvbWUgZ19wcmludCBpbnRvIFBSSU5UIHNvIHRoYXQgdGhleSBhcmUgbm90IHByaW50ZWQgd2hlbiB0aGUgLXEgb3B0aW9uCi0JICBpcyBzZWxlY3RlZC4KLQotMjAxMC0wNC0wOSAxNToxOToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogYWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvCi0KLTIwMTAtMDQtMDkgMTM6MTI6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKLQkgIGZkc3JjOiBhbGxvdyBzcGVjaWZ5aW5nIHRoZSBzaXplIGluIGJ5dGVzIG9uIHRoZSB1cmkKLQkgIFBhcnNlIGEgc2l6ZT12YWx1ZSBmcm9tIHRoZSBxdWVyeSBzdHJpbmcgdG8gc3BlY2lmeSBhIHNpemUuIFRoaXMgaXMgaW50ZXJlc3RpbmcKLQkgIHdoZW4gcmVhZGluZyBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgYWN0dWFsbHkgaGFzIGEgc2l6ZSAoYW5kIGlzIG5vdAotCSAgc3RhdC1hYmxlLCBzdWNoIGFzIHRoZSBzb2NrZXQgb2YgYW4gaHR0cCBjb25uZWN0aW9uKQotCi0yMDEwLTA0LTA5IDEyOjM1OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiB3aGVuIEVPUyB3ZSBrbm93IHRoZSBkdXJhdGlvbgotCSAgV2hlbiB3ZSBhcmUgRU9TLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFuIHVwc3RyZWFtIHF1ZXJ5IGZvciB0aGUgZHVyYXRpb24gaW4gYnl0ZXMKLQkgIGJlY2F1c2Ugd2UgYWxyZWFkeSBrbm93IGl0IGlzIHRoZSBvZmZzZXQgb2YgdGhlIGxhc3Qgd3JpdHRlbiBieXRlLgotCi0yMDEwLTA0LTA5IDEzOjA4OjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeWNodW5rczogSW5pdGlhbGl6ZSB0eXBlZmluZC9lbGVtZW50IGZhY3RvcnkgcmVnaXN0cnkgY2h1bmtzIHdpdGggemVyb2VzCi0JICBUaGlzIG1ha2VzIHZhbGdyaW5kIHN0b3AgY29tcGxhaW5pbmcgYWJvdXQgcmVhZGluZyB1bml0aWFsaXphdGVkIG1lbW9yeSwKLQkgIHdoaWNoIGlzIG5vdCBpbml0aWFsaXplZCBiZWNhdXNlIGl0J3MganVzdCBjb21waWxlci1hZGRlZCBzdHJ1Y3QgcGFkZGluZy4uLgotCi0yMDEwLTA0LTA5IDExOjE5OjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGQ2NmE4YzMgdG8gZmM4NTg2NwotCi0yMDEwLTA0LTA4IDEwOjEwOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvLmdpdGlnbm9yZToKLQkgIC5naXRpZ25vcmU6IGFkZCBuZXcgLnN2ZyBmaWxlIGluIGRvY3MKLQotMjAxMC0wNC0wOCAxMDo0NzowMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgZG9jczogdXNlIGluZm9ybWFsZmlndXJlIHRhZyB0byBub3Qgc3ludGF4IGhpZ2hsaWdodCB0aGUgY29udGVudAotCi0yMDEwLTAzLTI1IDEwOjM1OjEzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9nc3QvZ3N0LXVuaXZlcnNlLmRvdDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICBkb2NzOiBhZGQgY29uY2VwdCBtYXAKLQkgIEFkZCBhIGdyYXBodml6IGRvdCBmaWxlLiBBZGQgcnVsZXMgdG8gcmVuZGVyIGl0IHRvIHN2ZyBhbmQgaW5jbHVkZSBpbiBkb2NzLgotCSAgTm9kZXMgYXJlIGNsaWNrYWJsZS4gSXQgaXMgYW4gYXR0ZW1wdCB0byBzaG93IGhvdyB0aGluZ3MgZml0IHRvZ2V0aGVyLgotCi0yMDEwLTA0LTA3IDE5OjMwOjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIGRvY3M6IGFkZCBhIGZldyBjb2RlIHNuaXBwZXRzIHRoYXQgc2hvdyBob3cgdG8gdXNlIGdzdF9tZXNzYWdlX3BhcnNlXyooKS4KLQotMjAxMC0wNC0wNyAxOTowNTowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBidWlsZDogYnVtcCBhdXRvY29uZiByZXF1aXJlbWVudCB0byAyLjYwIGZvciBnb2JqZWN0LWludHJvc3BlY3Rpb24ubTQKLQkgIFJlcXVpcmUgYXV0b2NvbmYgMi42MCAod2hpY2ggd2FzIHJlbGVhc2VkIGluIEp1bmUgMjAwNikuCi0JICBGaXhlcyAjNjAwNzE4LgotCi0yMDEwLTA0LTA3IDEyOjI5OjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlOiBmaXggbW9yZSBjb21waWxlciB3YXJuaW5ncwotCSAgRml4ICdncmFtbWFyLnRhYi5jOjgxNTo2OiB3YXJuaW5nOiAiWVlFTkFCTEVfTkxTIiBpcyBub3QgZGVmaW5lZCcKLQkgIGNvbXBpbGVyIHdhcm5pbmcgYW5kIHRoZSBzYW1lIGZvciBZWUxUWVBFX0lTX1RSSVZJQUwuIFRoZSB0d28KLQkgIHRyYW5zbGF0ZWQgc3RyaW5ncyBhcmVuJ3QgcGFydGljdWxhcmx5IGhlbHBmdWwsIHNvIGp1c3QgZGVmaW5lCi0JICBZWUVOQUJMRV9OTFMgdG8gMC4KLQotMjAxMC0wNC0wNyAxMjoyNDoxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZTogZml4IGNvbXBpbGVyIHdhcm5pbmcKLQkgIEZpeCAnZ3JhbW1hci55OjY2ODogcGFzc2luZyBhcmd1bWVudCAxIG9mIOKAmGdfZnJlZeKAmSBkaXNjYXJkcyBxdWFsaWZpZXJzCi0JICBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5cGUnIGNvbXBpbGVyIHdhcm5pbmcuCi0KLTIwMTAtMDQtMDcgMTY6MDU6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBtZXNzYWdlOiBhZGQgU2luY2U6IG1hcmtlcnMKLQotMjAxMC0wNC0wNyAwOTozMTozOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICB0ZXN0czogZ3N0c3lzdGVtY2xvY2s6IGRvbid0IGxlYWsgdGhlIHN5c3RlbSBjbG9jawotCi0yMDEwLTA0LTA1IDAwOjAxOjU2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IGZpeCBvdXQgb2Ygc291cmNlZGlyIGJ1aWxkIGZvciBjaGVjawotCSAgTW92ZSB0aGUgaW50ZXJuYWwgaGVhZGVyIHRvIG5vZGlzdCAoYXMgd2UgY29weSBpdCBhcm91bmQgYW55d2F5KS4KLQkgIFVzZSBidWlsZGRpciBpbiBwYXR0ZXJuIHN1YnN0aXR1dGlvbiBmb3IgaXQuCi0JICBGaXhlcyAjNjE0ODMuCi0KLTIwMTAtMDQtMDYgMTc6NDY6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZG9jczogZml4IHNvbWUgdHlwb3MKLQotMjAxMC0wMi0yMyAwOToxNjo1NSArMDEwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnQGF4aXMuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IGZpeCBnc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQoKQotCSAgS2VlcCB0cmFjayBvZiBwZW5kaW5nIG5ld3NlZ21lbnQgaW4gZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50KCkKLQkgIHRvIGF2b2lkIHB1c2hpbmcgbmV3c2VnbWVudCB1cGRhdGUgYmVmb3JlIG5ld3NlZ21lbnQuCi0KLTIwMTAtMDQtMDQgMTU6MjE6MTYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQGVuc29uaWMtZGVza3RvcC5sb2NhbGRvbWFpbj4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JICBkb2NzOiBpbXByb3ZlIGV2ZW50IGRvY3MKLQkgIFJlcGhyYXNlIGZpcnN0IHBhcmFncmFwaCBvZiBzZWN0aW9uIGRvY3MuIEFkZCBkZXRhaWwgdG8gZW9zIGV2ZW50IGRvY3MuCi0KLTIwMTAtMDMtMjkgMDg6NDM6MDUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRvb2xzL2dzdC1pbmRlbnQ6Ci0JICBnc3QtaW5kZW50OiBBZGQgLS1sZWF2ZS1wcmVwcm9jZXNzb3Itc3BhY2UgZm9yIGluZGVudCAyLjIuMTEKLQkgIEl0IHdhcyBwcmV2aW91c2x5IGJyb2tlbiwgd2hpY2ggaXMgd2h5IHdlIG5ldmVyIG5lZWRlZCBpdC4gVGhpcyBrZWVwcyBiYWNrd2FyZAotCSAgY29tcGF0aWJpbGl0eSB3aXRoIGluZGVudCA8PSAyLjIuMTEKLQotMjAxMC0wMy0zMSAxMDo0MzowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBsaWJzOiBwb2ludCBnb2JqZWN0LWludHJvc3BlY3Rpb24gc2Nhbm5lciB0byAubGEgZmlsZXMKLQkgIFBvaW50IGctaXItc2Nhbm5lciB0byB0aGUgLmxhIGZpbGUgb2Ygb3VyIGxpYnJhcnksIHdoaWNoIGhvcGVmdWxseQotCSAgbWFrZXMgaXQgZmluZCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIGluIGFsbCBjYXNlcyAoaWUuIG91ciBsb2NhbGx5Ci0JICBidWlsdCBsaWJnc3RyZWFtZXIgYW5kIG5vdCB0aGUgc3lzdGVtLWluc3RhbGxlZCBvbmUpLiBUaGlzIGlzIGFsc28KLQkgIGhvdyBpdCdzIGRvbmUgaW4gR3RrKyBhbmQgaG93IGl0J3MgZG9jdW1lbnRlZCBpbiB0aGUgd2lraSwgc2VlCi0JICBodHRwOi8vbGl2ZS5nbm9tZS5vcmcvR09iamVjdEludHJvc3BlY3Rpb24vQXV0b3Rvb2xzSW50ZWdyYXRpb24KLQkgIEJhc2VkIG9uIHBhdGNoZXMgYnkgVmluY2VudCBVbnR6IGFuZCBBbGFuIEtub3dsZXMuCi0JICBGaXhlcyAjNjAzNzEwLgotCi0yMDEwLTA0LTAyIDAxOjE2OjE2ICswMTAwICBQaGlsaXAgV2l0aG5hbGwgPHBoaWxpcEB0ZWNub2NvZGUuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgdXRpbHM6IFVzZSBHX0dOVUNfQ09OU1QgaW5zdGVhZCBvZiBHX0dOVUNfUFVSRSBmb3IgY29udmVyc2lvbiBmdW5jdGlvbnMKLQkgIEZpeGVzIGJ1ZyAjNjE0NjI5LgotCi0yMDEwLTA0LTAxIDEzOjE5OjA2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkgIHRlc3RzOiBEb24ndCBmb3JnZXQgdG8gdW5yZWYgdGhlIG5ld3NlZ21lbnQgZXZlbnQKLQotMjAxMC0wNC0wMSAxMjozNDo1MyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgY29tbW9uOiBVcGRhdGUgdG8gbGF0ZXN0IHJldmlzaW9uIGZvciBuZXcgc3VwcHJlc3Npb25zCi0KLTIwMTAtMDMtMzEgMjI6MDc6NTcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6Ci0JICB0ZXN0czogYWRkIHRlc3QgZm9yIHVwZGF0aW5nIHBsYXliYWNrIHJhdGUKLQkgIFRlc3RzIGlmIGEgc2VlayB3aXRoIGJvdGggcG9zaXRpb25zIGJlaW5nIEdTVF9TRUVLX1RZUEVfTk9ORSBpcyBoYW5kbGVkLgotCi0yMDEwLTAzLTMxIDE2OjU1OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1idWZmZXIyLnR4dDoKLQkgIGRvY3M6IGFkZCBjb3B5IGFuZCBjb252IGZ1bmN0aW9uIHRvIGJ1ZmZlcjIgZHJhZnQKLQotMjAxMC0wMy0zMSAxMDo1NDo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVyMi50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgYnVmZmVyMiBkcmFmdAotCi0yMDEwLTAzLTMxIDExOjI2OjI4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvbWFudWFsL2NvbW11bmljYXRpb24ucG5nOgotCSogZG9jcy9tYW51YWwvZGlhZ3JhbXMtZ2VuZXJhbC5zdmc6Ci0JKiBkb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sOgotCSAgZG9jczogaW1wcm92ZSBjb21tdW5pY2F0aW9uIHBpY3R1cmUgYW5kIHNlY3Rpb24KLQkgIEluZGljYXRlIHRoYXQgb25seSBtZXNzYWdlcyBnbyB2aWEgYnVzLiBBbHNvIGFkZCBxdWVyaWVzIGJldHdlZW4gZWxlbWVudHMuCi0KLTIwMTAtMDMtMzEgMTA6MjQ6MTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIGV2ZW50OiBVc2UgY29ycmVjdCB0eXBlIGZvciB0aGUgbWVzc2FnZSBwYXJhbWV0ZXIgaW4gZ3N0X2V2ZW50X3tuZXcscGFyc2V9X3NpbmtfbWVzc2FnZQotCSAgVGhlIHN0cnVjdCB3b3JrYXJvdW5kIHdhcyBvbmx5IG5lY2Vzc2FyeSBpbiBnc3RldmVudC5oLCBnc3R1dGlscy5oIGtub3dzIGFib3V0IEdzdE1lc3NhZ2UKLQotMjAxMC0wMy0zMSAwOTo1Njo1MCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL21hbnVhbC9jb21tdW5pY2F0aW9uLnBuZzoKLQkqIGRvY3MvbWFudWFsL2RpYWdyYW1zLWdlbmVyYWwuc3ZnOgotCSogZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbDoKLQkgIGRvY3M6IGFkZCBjb21tdW5pY2F0aW9uIG92ZXJ2aWV3IHRvIGRvY3MKLQkgIEFkZCBhIHNlY3Rpb24gdG8gdGhlIGJhc2ljcyB0aGF0IHNob3cgYnVmZmVycywgZXZlbnRzLCBtZXNzYWdlcyBhbmQgcXVlcmllcwotCSAgdG9nZXRoZXIgYW5kIGRlc2NyaWJlIHRoZSBiYXNpY3MuCi0KLTIwMTAtMDMtMzAgMTU6NTY6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXIucGMuaW46Ci0JICBwa2djb25maWc6IGFkZCBnaXJkaXIgYW5kIHR5cGVsaWJkaXIgdmFyaWFibGVzIHRvIC5wYyBmaWxlcwotCSAgU28gdGhhdCB0aGUgLWJhc2UgbGlicyBjYW4gZmlndXJlIG91dCB0aGUgcmlnaHQgaW5jbHVkZSBwYXRocyBmb3IgdGhlCi0JICBnb2JqZWN0LWludHJvc3BlY3Rpb24gdG9vbHMgZXZlbiBpZiBjb3JlIGdvdCBpbnN0YWxsZWQgaW50byBhIHByZWZpeAotCSAgdGhhdCdzIG5vdCB0aGUgc2FtZSBwcmVmaXggYXMgZ29iamVjdC1pbnRyb3NwZWN0aW9uIGlzIGluc3RhbGxlZCBpbgotCSAgb3IgaXQncyBiZWluZyBidWlsZCBpbiBhbiB1bmluc3RhbGxlZCBnc3RyZWFtZXIgc2V0dXAuCi0KLTIwMTAtMDMtMzAgMTU6MjI6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSBmb3IgbmV3IHN0cmluZwotCi0yMDEwLTAzLTMwIDE1OjIwOjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBhdXRvZ2VuLnNoOgotCSogY29uZmlndXJlLmFjOgotCSogbTQvLmdpdGlnbm9yZToKLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvY2hlY2stY2hlY2tzLm00OgotCSAgYnVpbGQ6IG1ha2UgYXV0b3Rvb2xzIHB1dCBpdHMgbTQgZmlsZXMgaW50byBtNC8gaW5zdGVhZCBvZiBjb21tb24vbTQvCi0JICBUaGlzIGlzIGhvdyB3ZSBkbyBpdCBpbiB0aGUgb3RoZXIgbW9kdWxlcywgYW5kIGdldHMgcmlkIG9mIHRoZSBhbm5veWluZwotCSAgZGlydHkgc3RhdHVzIGZvciBjb21tb24gd2hlbiBkb2luZyBnaXQgc3RhdHVzIChhdCBsZWFzdCBvbmNlIHlvdSBjbGVhbgotCSAgb3V0IHRoZSBvbGQgZmlsZXMgZnJvbSB0aGVyZSkuCi0KLTIwMTAtMDMtMzAgMTI6MzM6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkgIGJ1aWxkOiBidWlsZCBleGFtcGxlcyBzdWJkaXJlY3RvcmllcyBpbiBwYXJhbGxlbCBpZiByZXF1ZXN0ZWQKLQotMjAxMC0wMy0yOCAyMDo1NTowOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogUmVmYWN0b3IgY2FwcyBzdWdnZXN0aW9uIG9uIHBhZF9hbGxvYwotCSAgUmVmYWN0b3IgdGhlIGhhbmRsaW5nIG9mIHNpbmsgc3VnZ2VzdGlvbiBjYXBzIHZhcmlhYmxlCi0JICBzbyB0aGF0IGl0IGFsd2F5cyBoYXMgYSByZWYgdG8gdGhlIGNhcHMgaXQgcG9pbnRzIHRvLgotCSAgTWFrZXMgdGhlIGNvZGUgY2xlYXJlci4KLQotMjAxMC0wMy0yOSAxNjozNDowMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgZ3N0aW5mbzogYWRkIGEgY29tbWVudCBleHBsYWluaW5nIHRoZSByZWFzb24gZm9yIHVzaW5nIGZ1Y250aW9uIHByb3RvcyBoZXJlLgotCi0yMDEwLTAzLTI5IDE2OjEzOjU0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBnc3RpbmZvOiBhbHdheXMgZGVmaW5lIGR1bW15IGRlYnVnIGNhdGVnb3J5IGFzIGEgZnVuY3Rpb24gcHJvdG90eXBlCi0JICBJdCBkb2VzIG5vdCBzZWVtIHRvIG1ha2Ugc2Vuc2UgdG8gZGVmaW5lIHRoaXMgYXMgYSBmdW5jdGlvbiBvbmx5IGlmIHdlIGhhdmUKLQkgIHZhcmFyZ3MgbWFjcm9zLgotCi0yMDEwLTAzLTI4IDE1OjEwOjIwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBidWlsZDogZml4IHJlZGVjbGFyYXRpb24gZXJvcnMgd2hlbiBidWlsZGluZyB3aXRoIC0tZ3N0LWRpc2FibGUtZ3N0LWRlYnVnCi0JICBHaXZlIGR1bW15IHN5bWJvbHMgYSB1bmlxZSBuYW1lLgotCi0yMDEwLTAzLTI4IDE0OjQ5OjAzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBidWlsZDogbW92ZSBzb21lIHByb3RvdHlwZXMgb3V0IG9mICNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0JICBNb3ZlIHRoZSBwcm90b3R5cGVzIHVwIHRvZ2V0aGVyLiBXZSBvbmx5IGRlZmluZSB0aGUgbWFjcm9zIGRpZmZlcmVudGx5LgotCSAgRml4ZXMgYnVnICM2MTQxNjcgbW9zdGx5LgotCi0yMDEwLTAzLTI5IDE2OjA1OjQ0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSAgaW5mbzogcmVhZGQgdGhlIHVzZSBvZiBHc3REZWJ1Z0Z1bmNQdHIgdHlwZWRlZiBhbmQgdGVsbCB3aHkKLQkgIFRoaXMgcmV2ZXJ0cyB0aGUgcmVsYXRlZCBjaGFuZ2VzIGZyb20gM2Y0OTU0ZTQyZDA0NDBhN2E1OThhOTA4MzI1YzQ1ZWE5ZGIwNzZlNAotCSAgYW5kIGZmYjBhNGUxOTA1YTg3MzE5MWY4YzgwMjM0NjI2MWU4YzQ0MzUwNjUuCi0KLTIwMTAtMDMtMjkgMTA6MjI6NDMgKzAxMDAgIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+Ci0KLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgotCSAgbmV0OiBmaXggdHlwbyBpbiBuZXQgY2xpZW50IGNsb2NrIHN0cnVjdHVyZQotCSAgSXQncyBzb2NrYWRkcl9pbiwgbm90IHNvY2thZGRyX2lkLgotCi0yMDEwLTAzLTI2IDE3OjEyOjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogTWFrZWZpbGUuYW06Ci0JICBidWlsZDogYWRkIGNydWZ0IGFsZXJ0IGZvciBjb21tb24vc2hhdmUqCi0KLTIwMTAtMDMtMjggMjE6MDI6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogRml4IGJ1aWxkIGF0IGxlYXN0IHVudGlsIHRoZSBjb3JyZWN0IGZpeCBpcyBmb3VuZAotCSAgU2VlIGJ1ZyAjNjE0MTY3LgotCi0yMDEwLTAzLTI4IDE5OjEzOjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBNYWtlIHN0cnVjdHVyZSBhYmJyZXZpYXRpb25zIGFycmF5IG9uZS10aW1lIGluaXRpYWxpemF0aW9uIHRocmVhZHNhZmUKLQotMjAxMC0wMy0yOCAxODowNTozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgaXRlcmF0b3I6IEFkZCBGSVhNRSAwLjExIGZvciB1c2luZyBHU2xpY2UgZm9yIGFsbG9jYXRpb24KLQotMjAxMC0wMy0yOCAxODowNTozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3Rmb3JtYXQuYzoKLQkqIGdzdC9nc3RpbmRleC5jOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5oOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkqIGdzdC9nc3R0cmFjZS5jOgotCSAgZ3N0OiBVc2UgR1NsaWNlIGluc3RlYWQgb2Ygbm9ybWFsIGdfbWFsbG9jIGluIG1vcmUgcGxhY2VzCi0KLTIwMTAtMDMtMjggMTM6MTQ6MDYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuaDoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBidWlsZDogbW9yZSBzb21lIHByb3RvdHlwZXMgb3V0IGlmICNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0JICBUaGUgYnVpbGQgd2FzIGZhaWxpbmcgYmVjYXN1ZSBvZiBhIG5ldyB3YXJuaW5nLiBUaGVyZSBhcmUgc3RpbGwgZmFpbHVyZXMKLQkgICh0cmFja2VkIHZpYSBidWcgIzYxNDE2NykuCi0KLTIwMTAtMDMtMjUgMjA6MDQ6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMgZm9yIG5ld2x5LWFkZGVkIHN0cmluZ3MKLQotMjAxMC0wMy0yNSAxOTo1NjowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFscy5tYWs6Ci0JICBkb2NzOiBmaXggaW50ZXJtaXR0ZW50IG1ha2UgZGlzdGNoZWNrIGZhaWx1cmVzCi0JICBVc2UgLk5PVFBBUkFMTEVMIHdoZW4gYnVpbGRpbmcgZG9jcy4gVGhpcyBhdm9pZHMgaW50ZXJtaXR0ZW50Ci0JICBtYWtlIGRpc3RjaGVjayBmYWlsdXJlcyBsaWtlICdjcDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUKLQkgIGBidWlsZC9pbWFnZS5lbnRpdGllcyc6IEZpbGUgZXhpc3RzJyB3aGVuIHVzaW5nIC1qTi4KLQkgIEZpeGVzICM1OTA3MTguCi0KLTIwMTAtMDMtMjUgMTg6NTc6NDAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkgIGVsZW1lbnRmYWN0b3J5OiBBZGQgRklYTUUgMC4xMSB0byByZW1vdmUgR3N0RWxlbWVudERldGFpbHMgZnJvbSB0aGUgcHVibGljIEFQSQotCSAgSXQncyBub3QgbmVjZXNzYXJ5IGFueW1vcmUgdG8gZXhwb3NlIHRoaXMgYXMgcHVibGljIEFQSSBhbmQgdGhpcyBhbGxvd3MKLQkgIGVhc2llciBleHRlbnNpb24gb2YgdGhlIGVsZW1lbnQgZGV0YWlscyBieSBuZXcgZmllbGRzLgotCi0yMDEwLTAzLTI1IDE4OjQzOjA0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBoYW5kbGUgd3JpdGUgZXJyb3JzCi0JICBIYW5kbGUgd3JpdGUgZXJyb3JzIHRvIHRoZSB0ZW1wb3JhcnkgZG93bmxvYWQgZmlsZSBhbmQgcG9zdCBlcnJvcnMgd2hlbgotCSAgc29tZXRoaW5nIHdlbnQgd3JvbmcuCi0KLTIwMTAtMDMtMjUgMTg6MTM6MDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGFkZCBlbGVtZW50IHF1ZXJ5IGZ1bmN0aW9uCi0JICBBZGQgYW4gZWxlbWVudCBxdWVyeSBmdW5jdGlvbiB0aGF0IGlzIGEgbGl0dGxlIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIGdlbmVyaWMKLQkgIGRlZmF1bHQgcXVlcnkgaGFuZGxlci4KLQotMjAxMC0wMy0yNSAxODoxMjowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBpbXByb3ZlIGRvY3MgYSBsaXR0bGUKLQkgIE1lbnRpb24gdGhhdCBhIERVUkFUSU9OIG1lc3NhZ2UgZG9lcyBub3QgbWVhbiB0aGF0IG9uZSBjYW4gc2FmZWx5IHF1ZXJ5IHRoZQotCSAgZHVyYXRpb24gb24gYSBiaW4sIHRoYXQgb25seSB3b3JrcyB3aGVuIHRoZSBiaW4gaXMgcHJlcm9sbGVkLgotCi0yMDEwLTAzLTI1IDE4OjA1OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiByZW1vdmUgZml4ZWQgRklYTUUKLQotMjAxMC0wMy0yNSAxNzozNjo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IGFkZCB0aGUgYnVmZmVyaW5nIHBlcmNlbnQgaW4gQlVGRkVSSU5HIHF1ZXJ5Ci0KLTIwMTAtMDMtMjUgMTc6MjE6MDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGltcHJvdmUgYnVmZmVyIGxldmVsIG1lYXN1cmVtZW50IGluIGRvd25sb2FkIG1vZGUKLQkgIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGxldmVsIGluIHRoZSBjdXJyZW50IHJhbmdlIGluIGRvd25sb2FkIG1vZGUgc28KLQkgIHRoYXQgd2UgcG9zdCB0aGUgY29ycmVjdCBidWZmZXJpbmcgbWVzc2FnZXMuCi0KLTIwMTAtMDMtMjUgMTU6NTQ6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgbGliczogZG9uJ3QgdXNlIGZhbmN5IHNoZWxsIGZlYXR1cmVzIHdoZW4gaW52b2tpbmcgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHNjYW5uZXIKLQkgIEl0J3MgUE9TSVgsIGJ1dCB0Y3NoIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IGl0LgotCi0yMDEwLTAzLTI1IDEzOjQ2OjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkgIGxpYnM6IGZpeCBQS0dfQ09ORklHX1BBVEggdXNlZCB3aGVuIGNhbGxpbmcgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHNjYW5uZXIKLQkgIE91ciBvd24gcGtnY29uZmlnIGRpcmVjdG9yeSBzaG91bGQgY29tZSBmaXJzdCwgc28gdGhhdCBwa2ctY29uZmlnIHVzZXMKLQkgIHRoZSBpbi10cmVlIGxpYmdzdHJlYW1lciBhbmQgbm90IHNvbWUgZXh0ZXJuYWwgb25lIHdoZW4gLS1wa2c9Z3N0cmVhbWVyLTAuMTAKLQkgIGlzIHBhc3NlZCB0byBnLWlyLXNjYW5uZXIuCi0JICBTZWUgIzYwMzcxMC4KLQotMjAxMC0wMy0yNSAxMDoyNzowMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBHc3RBZGFwdGVyOiBhZGQgYSB1bmNoZWNrZWQgdmFyaWFudCBvZiBmbHVzaCBmb3IgaW50ZXJuYWwgdXNhZ2UKLQkgIFRyaW1zIG9mZiAxMC0yMCUgY3B1IHRpbWUgd2hlbiB1c2luZyBnc3RfYWRhcHRlcl90YWtlW19idWZmZXJdCi0KLTIwMTAtMDMtMTkgMTU6MTA6MDcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdzOiBBZGQgbmV3IF9VU0VSX1JBVElORyB0YWcKLQkgIEFkZHMgYSBuZXcgdGFnIGZvciB1c2VyIGZhdm9yaXRlIG1lZGlhIHJhdGluZy4KLQkgIFVzZXIgcmF0aW5nIGluZm9ybXMgaG93IG11Y2ggKGZyb20gMCB0byAxMDApIGEgdXNlcgotCSAgJ2xpa2VzJyBhIG1lZGlhLgotCSAgSGF2aW5nIGFuIHBlcmNlbnQgdWludCByYW5nZSBmb3IgdGhpcyBpcyBlYXN5IHRvIG1hcCBpbnRvIG90aGVyIHNjYWxlcywKLQkgIGxpa2Ugc29tZSBwbGF5ZXJzIHRoYXQgYWxsb3cgdXNlcnMgdG8gYXR0cmlidXRlICdzdGFycycgdG8gaXRzCi0JICBtZWRpYS4KLQkgIEFQSTogR1NUX1RBR19VU0VSX1JBVElORwotCSAgRml4ZXMgIzUyMDY5NwotCi0yMDEwLTAzLTI0IDE5OjAyOjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgcXVldWUyOiBhZGQgbW9yZSBpbmZvIGluIHRoZSBidWZmZXJpbmcgcXVlcnkKLQkgIEFkZCB0aGUgZXN0aW1hdGVkIGRvd25sb2FkIHRpbWUgYW5kIGVzdGltYXRlZCB0aW1lIGxlZnQgdG8gdGhlIGJ1ZmZlcmluZyBxdWVyeQotCSAgcmVzdWx0cyBhbG9uZyB3aXRoIHRoZSBlc3RpbWF0ZWQgZG93bmxvYWQgYW5kIHBsYXliYWNrIHNwZWVkLgotCi0yMDEwLTAzLTI0IDE4OjE4OjEzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaDoKLQkgIHF1ZXVlMjogaW1wbGVtZW50IGZsdXNoaW5nIGluIGRvd25sb2FkIGJ1ZmZlcmluZwotCSAgTWFpbnRhaW4gYSBzZXBhcmF0ZSB2YXJpYWJsZSB0byBjb250cm9sIHNyYyBhbmQgc2luayBmbG93cmV0dXJuIHZhbHVlcyBzbyB0aGF0Ci0JICB3ZSBjYW4gdW5sb2NrIHRoZSBzcmMgcGFydCB3aXRob3V0IHNodXR0aW5nIGRvd24gdGhlIHNpbmsgcGFydC4KLQkgIEFkZCBmbHVzaGluZyBmb3IgdXBzdHJlYW0gcHVsbCBiYXNlZCBlbGVtZW50cyB0aGF0IHVuYmxvY2tzIG91ciBnZXRyYW5nZQotCSAgZnVuY3Rpb24uIFRoaXMgaW1wbGVtZW50cyBzZWVraW5nIHdoZW4gYmxvY2tpbmcgZm9yIG1vcmUgZGF0YS4KLQkgIEFkZCBzb21lIGFyYml0cmFyeSB0aHJlc2hvbGQgYmVmb3JlIGF0dGVtcHRpbmcgYSBzZWVrLiBBZGQgYSBGSVhNRSBmb3IgdGhpcwotCSAgYmVjYXVzZSB3ZSBuZWVkIHRvIGZpbmQgYSBzZW5zaWJsZSB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGlucHV0IHJhdGUuCi0KLTIwMTAtMDMtMjQgMTg6NTA6MDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA1NWNkNTE0IHRvIGMxZDA3ZGQKLQotMjAxMC0wMy0yNCAxNzozMjo1NCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBSZW1vdmUgdW51c2VkIGNvZGUKLQkgIE9QVF9DRkxBR1Mgd2FzIG5ldmVyIEFDX1NVQlNUKCknZWQgc28gaXQgd2Fzbid0IHVzZWQuIEFuZCB0aGUgbGFzdCB0aW1lCi0JICBpdCB3YXMgdG91Y2hlZCB3YXMgaW4gMjAwNS4KLQotMjAxMC0wMy0yNCAxNTo0NzoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkgIGJ1aWxkOiBmaXggbWFrZSBkaXN0Y2hlY2sKLQkgIFRoZSBjaGFuZ2UgZnJvbSBHU1RfQUxMX0NGTEFHUyB0byBHU1RfT1BUSU9OX0NGTEFHUyBkcm9wcGVkIHRoZSBpbmNsdWRlcywKLQkgIHB1dHRpbmcgdGhlbSBiYWNrIGZpeGVzIG1ha2UgZGlzdGNoZWNrLgotCi0yMDEwLTAzLTI0IDE1OjE1OjIzICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIEZpeCB0ZXN0cyBhZnRlciBzZXRfZWxlbWVudF9kZXRhaWxzKCkgZGVwcmVjYXRpb24KLQotMjAxMC0wMy0yNCAxMzozMzo1OCArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2dpdC11cGRhdGUuc2g6Ci0JICBnaXQtdXBkYXRlOiBGaXggYW5kIHJlc3RydWN0dXJlIGxvZ2ljCi0KLTIwMTAtMDMtMTkgMjI6MzY6MDcgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBEZXByZWNhdGVkIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzKCkKLQkgIFVzZSBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUoKSBpbnN0ZWFkLiBJZiB5b3Ugd2FudCB0bwotCSAgY29udmVydCBhdXRvbWF0aWNhbGx5LCBoZXJlJ3MgYSBzY3JpcHQ6Ci0JICBmb3IgZmlsZSBpbiBgZ2l0IGdyZXAgLWwgR3N0RWxlbWVudERldGFpbHNgOyBkbwotCSAgc2VkIC1pIC1uIC1yICcKLQkgIDFoCi0JICAxIUgKLQkgICQgewotCSAgZwotCSAgcy8oKFwvXCpbXlxuXSpcKlwvKT9cbikqW15cbl0qR3N0RWxlbWVudERldGFpbHMgLiogPVxzKkdTVF9FTEVNRU5UX0RFVEFJTFNccypcKChcIlteXCJdKlwiLFxzKlwiW15cIl0qXCIsXHMqXCJbXlwiXSpcIixccyooXCJbXlwiXSpcIlxzKikqKVwpO1xuKiguKilnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyBcKChbXixdKiksXHMqW14pXSpcKS9cblxuXDVnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUgKFw2LCBcMykvCi0JICBzLygoXC9cKlteXG5dKlwqXC8pP1xuKSpbXlxuXSpHc3RFbGVtZW50RGV0YWlscyAuKiA9XHMqXHtccyooXCJbXlwiXSpcIixccypcIlteXCJdKlwiLFxzKlwiW15cIl0qXCIsXHMqKFwiW15cIl0qXCJccyopKilcfTtcbiooLiopZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHMgXCgoW14sXSopLFxzKlteKV0qXCkvXG5cblw1Z3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIChcNiwgXDMpLwotCSAgcAotCSAgfScgJGZpbGUKLQkgIH4vZ3N0L2dzdHJlYW1lci90b29scy9nc3QtaW5kZW50ICRmaWxlCi0JICBkb25lCi0KLTIwMTAtMDMtMjQgMTA6NTc6MDggKzAxMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMC0wMy0yMyAxOToyNTowOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IHJlbW92ZSB1bnVzZWQgQ0hFQ0tfQ0ZMQUdTIGFuZCBDSEVDS19MSUJTIGZyb20gTWFrZWZpbGUuYW0KLQotMjAxMC0wMy0yMyAxOToyMzoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogYWRkIG1hcHBpbmcgZm9yICh1aW50KSB0byBhbGxvdyBkZXNlcmlhbGlzYXRpb24gb2YgdW5zaWduZWQgaW50ZWdlcnMKLQkgIFVuc2lnbmVkIGludHMgYXJlIHVzZWQgaW4gdGFnbGlzdHMsIHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0bwotCSAgZGVzZXJpYWxpc2UgdGhlbSwgZXNwLiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIHRhZ2luamVjdCBBUEkuCi0KLTIwMTAtMDMtMjMgMTk6MjU6MjkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBpbXBsZW1lbnQgc2Vla2luZyBpbiBkb3dubG9hZCBtb2RlCi0JICBXaGVuIGluIGRvd25sb2FkIG1vZGUgYW5kIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0IGlzIHRvbyBmYXIgYXdheSwgYXR0ZW1wdCB0byBkbyBhCi0JICBzZWVrIHJlcXVlc3QgdG8gZmV0Y2ggdGhlIGRhdGEuCi0JICBLZWVwIHRyYWNrIG9mIGFsbCBkb3dubG9hZGVkIHBhcnRzIGFuZCBtZXJnZSByYW5nZXMgd2hlbiBuZWVkZWQuCi0JICBGaXhlcyAjNjAwODc3Ci0KLTIwMTAtMDMtMjIgMTE6MDY6MjEgLTAzMDAgIEFuZHLDqSBEaWViIE1hcnRpbnMgPGFuZHJlLmRpZWJAZ21haWwuY29tPgotCi0JKiBzY3JpcHRzL2dpdC11cGRhdGUuc2g6Ci0JICBnaXQtdXBkYXRlLnNoOiB1c2UgYXV0b2dlbi5zaCBpbnN0ZWFkIG9mIGF1dG9yZWdlbi5zaCBvbiBmcmVzaCByZXBvc2l0b3JpZXMuCi0JICBGaXhlcyAjNjEzNTkzLgotCi0yMDEwLTAzLTIyIDE3OjEwOjA2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nZXR0ZXh0Lmg6Ci0JICBnZXR0ZXh0OiBidWlsZCBmaXhlczogI2lmIC0+ICNpZmRlZgotCi0yMDEwLTAzLTE4IDEwOjIyOjA5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZS1sYXVuY2g6IG1ha2UgZGVsYXllZCBzZXQgcmVjdXJzaXZlCi0JICBSaWdodCBub3cgZGVsZXllZCBzZXQgd291bGQgb25seSB0cnkgZm9yIGZpcnN0IHNldCBvZiBjaGlsZHJlbi4gV2UgbmVlZCB0byBrZWVwCi0JICB0cnlpbmcgdG8gc3VwcG9ydCBhcmJpdHJhcnkgZGVlcCBoaWVyYXJjaGllcyAobGlrZSBpbiBwbGF5YmluMiB3aXRoIGF1dG8qc2lua3MpLgotCSAgQWxzbyBHc3RCaW4gd291bGQgbmVlZCB0byBhY3R1YWx5IGVtaXQgdGhlIGNoaWxkLWFkZGVkL3JlbW92ZWQgc2lnbmFsIGFzIGl0Ci0JICBpbXBsZW1lbnRzIHRoZSBpZmFjZS4gRml4ZXMgIzYxMzIxNS4KLQotMjAxMC0wMy0yMiAwODo0MDozNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46Ci0JICBwa2djb25maWc6IFVzZSBATElCTUAgaW5zdGVhZCBvZiAtbG0KLQotMjAxMC0wMy0xOSAwMTowMjozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkgIHBrZ2NvbmZpZzogYWRkIGJhY2sgc3VwcG9ydCBmb3IgYnVpbGRkaXIgIT0gc3JjZGlyIGNhc2UgaW4gdW5pbnN0YWxsZWQgc2V0dXAKLQkgIEF0dGVtcHQgdG8gYWRkIGJhY2sgc3VwcG9ydCBmb3IgYnVpbGRkaXIgIT0gc3JjZGlyLiBVc2UgYWJzb2x1dGUgcGF0aHMKLQkgIGluc3RlYWQgb2YgcmVsYXRpdmUgcGF0aHMgYmFzZWQgb24gcGNmaWxlZGlyIHRoaXMgdGltZSB0byBtYWtlIHRoaW5ncwotCSAgY2xlYXJlciAtIHRoZXJlJ3Mgbm90IHJlYWxseSBhbnkgbmVlZCBmb3IgdW5pbnN0YWxsZWQgdHJlZXMgdG8gYmUKLQkgIHJlbG9jYXRhYmxlIHdpdGhvdXQgcmUtcnVubmluZyBjb25maWd1cmUuCi0KLTIwMTAtMDMtMTggMTE6MTg6MzkgKzAwMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBJbXBsZW1lbnQgUW9TIG1lc3NhZ2UgcG9zdGluZwotCSAgQW5kIHNvbWUgbW9yZSBmb3IgYnVnICMzMjI5NDcKLQotMjAxMC0wMy0xOCAxMzo0MTozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBjYXRjaCwgcGFyc2UgYW5kIHN0b3JlIFFvUyBldmVudCB2YWx1ZXMKLQkgIENhdGNoLCBwYXJzZSBhbmQgc3RvcmUgdGhlIFFvUyB2YWx1ZXMgZnJvbSBRb1MgZXZlbnRzIGZvciBsYXRlciB1c2UuCi0KLTIwMTAtMDMtMTcgMTU6Mjk6NDggKzAwMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IEltcGxlbWVudCBRb1MgbWVzc2FnZSBwb3N0aW5nIGluIGJhc2VzaW5rCi0JICBQb3N0IFFvUyBtZXNzYWdlcyB3aGVuIGZyYW1lcyBhcmUgZHJvcHBlZC4KLQkgIFRoaXMgZ29lcyBhIGxpdHRsZSBmdXJ0aGVyIHRvd2FyZHMgcmVzb2x2aW5nIGJ1ZyAjMzIyOTQ3Ci0KLTIwMTAtMDMtMTcgMTk6MjY6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBtZXNzYWdlOiBpbXByb3ZlIGRvY3MgYSBsaXR0bGUKLQotMjAxMC0wMy0xNyAxOToxNjo0MiArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgbWVzc2FnZTogYWRkIFFvUyBtZXNzYWdlIHRvIGluZm9ybSBhcHBzIG9mIGxvc3QgZGF0YQotCSAgVGhpcyBoYXMgYmVlbiBpbXBsZW1lbnRlZCBhcyBwZXIgcGFydC1xb3MudHh0IGFuZCBwYXJ0aWFsbHkgYWRkcmVzc2VzCi0JICBidWcgIzMyMjk0NwotCi0yMDEwLTAzLTE3IDE2OjQ0OjA1ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSAgdGVzdDogUmVtb3ZlIG5lZWRsZXNzIGNhc3QKLQkgIEdzdFZhbHVlQXJyYXkubmFtZSBpcyBjb25zdCBub3cKLQotMjAxMC0wMy0xNyAxNDozMzozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkgIFJldmVydCAiQWRkIHNyY2RpciB0byBpbmNsdWRlcyBmb3Igb3V0LW9mLXNvdXJjZSBidWlsZHMiCi0JICBJIGRvbid0IGtub3cgaG93IHRoaXMgZXZlciB3b3JrZWQsIGFzIGl0IHNlZW1zIHRvIHB1dCAtSS4vLi4KLQkgIGFuZCAtSS4vLi4vbGlicyB2ZXJiYXRpbSBpbnRvIHRoZSBpbmNsdWRlcywgYXQgbGVhc3Qgd2l0aAotCSAgY3VycmVudCBhdXRvdG9vbHMgdmVyc2lvbnMuCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDI3OWE4MGZmMjdiYTRjOTBmNTI5ODFlODllNzEwZWIxMTgxYmMyMDEuCi0KLTIwMTAtMDMtMTcgMTU6NDY6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKLQkgIGRvY3M6IGF2b2lkIGNvbmZ1c2lvbiBiZXR3ZWVuIGV2ZW50cyBhbmQgbWVzc2FnZXMKLQotMjAxMC0wMy0xNyAxMjoxODoxOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5oOgotCSAgY29udHJvbGxlcjogTWFyayBwcm9wZXJ0eV9uYW1lIGluIEdzdFZhbHVlQXJyYXkgYXMgY29uc3QKLQkgIFRoaXMgd29uJ3QgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZCBmcm9tIGFueSBBUEkKLQotMjAxMC0wMy0xNyAxMjo0NTo0OSArMDIwMCAgTWFydCBSYXVkc2VwcCA8bGVpb0BnZW50b28ub3JnPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgZG9jczogZml4IHR5cG8KLQotMjAxMC0wMy0xNiAwOTo1NjoxNiArMDIwMCAgTWFydCBSYXVkc2VwcCA8bGVpb0BnZW50b28ub3JnPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSAgZG9jczogYWRkIG1pc3NpbmcgIlNpbmNlOiAwLjEwLjI2IiBtYXJrZXIgZm9yIGdzdF9kYXRhX3F1ZXVlX25ld19mdWxsKCkKLQotMjAxMC0wMy0xNiAwOTo0MjoyMSArMDIwMCAgTWFydCBSYXVkc2VwcCA8bGVpb0BnZW50b28ub3JnPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBkb2NzOiBmaXggc2luY2UgdGFnIGZvciBnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZCgpCi0JICBnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZCB3YXMgYWRkZWQgaW4gMC4xMC4yNiwgbm90IDAuMTAuMTYuCi0JICBBcHBhcmVudCB0eXBvIGluIGNvbW1pdCBmOWUzYjcyZiB3aGVuIHRoZSBBUEkgd2FzIGFkZGVkLgotCi0yMDEwLTAzLTE3IDEwOjUzOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JICBkb2NzOiBmaXggU2luY2UgbWFya2VycyBmb3IgZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdCooKQotCSAgQXMgdGhlIGhlYWRlcnMgd2VyZSBicm9rZW4gaW4gMC4xMC4yNiB0aGUgZnVuY3Rpb25zIHdlcmVuJ3QgcmVhbGx5Ci0JICB1c2FibGUgYmFjayB0aGVuLCBzbyB3ZSBzaG91bGQgYWR2ZXJ0aXNlIHRoZW0gYXMgYmVpbmcgdGhlcmUgb25seQotCSAgc2luY2UgMC4xMC4yNy4KLQkgIFNwb3R0ZWQgYnkgTWFydCBSYXVkc2VwcC4KLQotMjAxMC0wMy0xNiAxNzo1NjoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIGdzdDogdXNlICNpZiBHTElCX0NIRUNLX1ZFUlNJT04gaW5zdGVhZCBvZiAjaWZuZGVmIEdMSUJNQUNSTwotCSAgZm9yIGJldHRlciBncmVwcGFiaWxpdHkgYXQgdGhlIHRpbWUgd2UgYnVtcCBHTGliIHZlcnNpb24gcmVxdWlyZW1lbnRzLgotCi0yMDEwLTAzLTE0IDExOjQ3OjIzICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IGRlYWN0aXZhdGUgcGFkIGlmIHdlIGNhbid0IGdldCBsZW5ndGggb3IgaXQncyBhIGxlbmd0aCBvZiB6ZXJvLgotCSAgRml4ZXMgaXNzdWVzIHdoZW4gcmUtdXNpbmcgdHlwZWZpbmQgYWZ0ZXIgYSBmaWxlIG9mIGxlbmd0aCB6ZXJvLgotCi0yMDEwLTAzLTE2IDEwOjMyOjEyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBBY2NlcHQgbm9uLWZpeGVkIGNhcHMgc3VnZ2VzdGlvbnMKLQkgIFdoZW4gZG9pbmcgcGFkX2FsbG9jcywgdXNlIG5vbi1maXhlZCBjYXBzIHN1Z2dlc3Rpb25zIGFuZAotCSAgdHJ5IHRvIGZpeGF0ZSB0aGVtIGJlZm9yZSB1c2luZy4gVGhpcyBtYWtlcyBwb3NzaWJsZSB0bwotCSAgaGF2ZSBzdWdnZXN0ZWQgYnVmZmVyIHNpemUgd2l0aCAwIGluIGJhc2V0cmFuc2Zvcm0ganVzdAotCSAgdG8gc2lnbmFsIHVwc3RyZWFtIGEgcmVuZWdvdGlhdGlvbiBpcyBuZWVkZWQKLQkgIEZpeGVzICM1NzYyMzQKLQkgIEZpeGVzICM2MDkwNDYKLQotMjAxMC0wMy0xNiAxMDo0MDo0MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgotCSAgZG9jczogbWVyZ2UgUW9TIG1lc3NhZ2UgZmllbGRzCi0JICBUaGVyZSB3YXMgYWxyZWFkeSBhIHNlY3Rpb24gYWJvdXQgUW9TIG1lc3NhZ2VzIHRoYXQgaXMgbm93IG1lcmdlZCB3aXRoIHRoZSBuZXcKLQkgIGluZm9ybWF0aW9uLgotCi0yMDEwLTAzLTE2IDEwOjQ0OjAxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICBwd2c6IG1lbnRpb24gaG93IHRvIGJ1aWxkIGFmdGVyIHVzaW5nIHRoZSBwcm9qZWN0IHN0YW1wCi0KLTIwMTAtMDMtMTYgMDk6NTY6NDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IHNucHJpbnRmIG5lZWRzIHRvIGluY2x1ZGUgInN0ZGlvLmgiCi0KLTIwMTAtMDMtMTUgMTg6NDg6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKLQkgIGRvY3M6IHVwZGF0ZSBRT1MgZG9jcyB0byBpbmNsdWRlIFFPUyBtZXNzYWdlcwotCSAgQWRkIHNvbWUgZG9jcyBhYm91dCB0aGUgdmFsdWVzIG5lZWRlZCBmb3IgYSBRb1MgbWVzc2FnZSBhbmQgc29tZSB1c2UKLQkgIGNhc2VzLgotCSAgU2VlICMzMjI5NDcKLQotMjAxMC0wMy0xNSAxNzowNzo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IHVzZSBiaW9uaWMvbGliYyBmcmllbmRseSBhcmd1bWVudHMgdG8gcHJjdGwKLQkgIHByY3RsIGlzIHN1cHBvc2VkIHRvIHRha2UgNSBhcmd1bWVudHMuIEl0IHVzZWQgdG8gd29yayB3aXRoIDIgYXJndW1lbnRzIG9uIHNvbWUKLQkgIHZlcnNpb25zIG9mIGxpYmMgYmVjYXVzZSBpdCBpcyBkZWZpbmVkIGFzIGEgdmFyYWdzIGZ1bmN0aW9uIHRoZXJlLgotCSAgU2VlICM2MTE5MTEKLQotMjAxMC0wMy0xNSAxNTowNzozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IHVwZGF0ZSBkb2NzLgotCi0yMDEwLTAzLTE1IDE0OjQ0OjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIHRhZ2xpc3Q6IFdvcmsgYXJvdW5kIGd0ay1kb2MgcHJvYmxlbQotCi0yMDEwLTAzLTE1IDE0OjQ0OjE2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6Ci0JICBieXRld3JpdGVyOiBVc2UgY29ycmVjdCBndGstZG9jIHdvcmthcm91bmQKLQotMjAxMC0wMy0xNSAxNDowNTozNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IEhhbmRsZSBpdGVyYXRvciByZXN5bmNzIGluIGdzdF9wYWRfcHJveHlfc2V0Y2FwcygpCi0JICBGaXhlcyBidWcgIzYxMjg4MS4KLQotMjAxMC0wMy0xNSAxNDo0ODoxOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IGNvbmZpZ3VyZSB0aGUgb2JqZWN0IG5hbWUgYXMgdGhyZWFkIG5hbWUKLQkgIFdoZW4gd2UgaGF2ZSBwcmN0bCBhdmFpbGFibGUsIHVzZSBpdCB0byBzZXQgdGhlIGNvbmZpZ3VyZWQgb2JqZWN0IG5hbWUgYXMgdGhlCi0JICB0aHJlYWQgbmFtZSBmb3IgYmV0dGVyIGRlYnVnZ2luZy4KLQkgIEJhc2VkIG9uIHBhdGNoIGJ5IFJvYmVydCBTd2Fpbi4KLQotMjAxMC0wMy0xNSAxMzo0ODozMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBzZXQgYSBnb29kIG5hbWUgb24gdGhlIHRhc2sgb2YgdGhlIHBhZAotCSAgVXNlIHRoZSBlbGVtZW50OnBhZCBuYW1lcyB0byBjb25maWd1cmUgYSBnb29kIG5hbWUgZm9yIHRoZSBwYWQgdGFzay4KLQotMjAxMC0wMy0xNSAxMjoxMzo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suaDoKLQkgIHRhc2s6IHJldGFiCi0KLTIwMTAtMDMtMTUgMTA6MjY6MTggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSAgbG9nZ2luZzogcmVtb3ZlIGV4dHJhIG5ld2xpbmUKLQotMjAxMC0wMy0wNCAyMzozNjo1MCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IHR1cm4gZ19yZXR1cm5faWZfZmFpbCBpbnRvIGdfYXNzZXJ0LgotCSAgVGhpcyBlaXRoZXIgbXVzdCBuZXZlciBoYXBwZW4gKHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoaXMgY2FzZSkgYW5kIHRodXMgc2hvdWxkCi0JICB1c2UgYXNzZXJ0KCkgb3Igd2Ugc2hvdWxkIHVzZSBhIHRyYWRpdGlvbmFsIGlmIChwb2xsX2RhdGEtPm1lc3NhZ2UpIHJldHVybjsKLQkgIHRvIGF2b2lkIGRpZmZlcm5ldCBiZWhhdmlvdXIgb2YgaW50ZW5hbCBhcGkgd2hlbiBjb21waWxpbmcgd2l0aAotCSAgR19ESVNBQkxFX0NIRUNLUy4KLQotMjAxMC0wMy0wMyAyMzozNzowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogbW92ZSB0aGUgY2hlY2sgdG8gdGhlIHB1YmxpYyBhcGkuCi0JICBUaGlzIGF2b2lkcyBjcmVhdGluZyBlbXB0eSBjYXBzIGFuZCBkZXN0cm95aW5nIHRoZW0gaW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IuIFdlCi0JICBhbHNvIGF2b2lkIGRvdWJsZSBjaGVja2luZyBpbiBvdGhlciBjb2RlIHBhdGggd2hlcmUgd2UgY2FsbCB0aGUgaW50ZXJuYWwgYXBpLgotCi0yMDEwLTAzLTAzIDIzOjM0OjU4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiB0aGlzIGlzIGludGVybmFsIEFQSSB3aGVyZSB3ZSBuZWVkIHRvIGVuc3VyZSAhTlVMTCBoaWdoZXIgdXAKLQotMjAxMC0wMy0wMyAyMTo1MDoyMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBnc3Q6IHRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gd2hlcmUgd2UgYWxyZWFkeSBlbnN1cmUgIU5VTEwgd2hlbiBjYWxsaW5nCi0KLTIwMTAtMDItMjYgMDk6Mjk6MjMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IGZpeCBjYXNlIG9mIHBhZCBmbGFnCi0JICBEdWUgdG8gYSB0eXBvIHRoZSBjb2RlIHdhcyBhbHdheXMgc2hvd2luZyB0aGUgZmxhZyBhcyAncycgKGxvd2VyIGNhc2UpLgotCSAgRml4ZXMgIzYxMTA3NQotCi0yMDEwLTAyLTIzIDIzOjUwOjM2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBkZWJ1ZzogYWRkIHByZXR0eSBwcmludGVyIGZvciBldmVudHMKLQkgIEFkZGVyIGlzIHVzaW5nIEdTVF9QVFJfRk9STUFUIGZvciBldmVudHMgYWxyZWFkeSwgc28gd2UgbWlnaHQgYWN0dWFseQotCSAgaW1wbGVtZW50IHRoaXMgYW5kIHByaW50IG91dCBzb21lIHVzZWZ1bCBpbmZvLgotCi0yMDEwLTAzLTEzIDExOjAzOjU5ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkgIEFkZCBzb21lIDAuMTEgRklYTUVzIGZvciBHc3RQbHVnaW5Jbml0RnVuYwotCSAgU2VlIDhmZTYzMDAwZGUzMWJiMmJjZjM0NmQ1OTIzMGRlYTA2MTE3OTk3Y2QgZm9yIHdoeSBoYXZpbmcgYSBUUlVFL0ZBTFNFCi0JICByZXR1cm4gdmFsdWUgaXMgYSBiYWQgaWRlYS4KLQkgIEkndmUgc2Nhbm5lZCBhIGZldyBwbHVnaW5zIGFuZCB0aGV5IGdlbmVyYWxseSBnZXQgaXQgd3JvbmcgYW5kIGFyZW4ndAotCSAgdW5sb2FkYWJsZSB3aGVuIHRoZXkgcmV0dXJuIEZBTFNFLgotCi0yMDEwLTAzLTEyIDE5OjA3OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgZm9yIG5ldyBzdHJpbmdzCi0KLTIwMTAtMDMtMTIgMTk6MDU6MTYgKzAwMDAgIExlbyBTaW5nZXIgPGxzaW5nZXJAY2FsdGVjaC5lZHU+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBnc3RpbmZvOiBmaXggY29tcGlsYXRpb24gZXJyb3IgaWYgSEFWRV9SRUdJU1RFUl9QUklOVEZfU1BFQ0lGSUVSIGlzIHVuZGVmaW5lZAotCSAgVXNlICNpZiBIQVZFX0ZPTyBpbnN0ZWFkIG9mICNpZmRlZiBIQVZFX0ZPTy4KLQkgIEZpeGVzICM2MTI3MzMuCi0KLTIwMTAtMDMtMTIgMTY6NDI6NDcgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgcGx1Z2luczogRG8gbm90IGV2ZXIgdW5sb2FkIGEgcGx1Z2luIGFmdGVyIGNhbGxpbmcgaW50byBpdAotCSAgVGhpcyBpcyB3aGF0IGNhbiBoYXBwZW4gaW4gYSBwbHVnaW5faW5pdCBmdW5jdGlvbjoKLQkgIC0gQW4gZWxlbWVudCBiYXNlZCBvbiBHc3RCYXNlU2luayBpcyByZWdpc3RlcmVkCi0JICAtIE90aGVyIGVsZW1lbnRzIGZhaWwgdG8gcmVnaXN0ZXIKLQkgIC0gVGhlIHBsdWdpbl9pbml0IGZ1bmN0aW9uIHJldHVybnMgRkFMU0UKLQkgIE5vdyBpZiB0aGlzIHRoZSBwbHVnaW4gaXMgdGhlIGZpcnN0IHBsdWdpbiB0byBsaW5rIGFnYWluc3QKLQkgIGxpYmdzdGJhc2Uuc28sIGl0IHdpbGwgaGF2ZSBjYXVzZWQgbGliZ3N0YmFzZS5zbyB0byBiZSBsb2FkZWQgYW5kIHN0YXRpYwotCSAgc3RyaW5ncyBmcm9tIHRoYXQgbGlicmFyeSB3aWxsIGhhdmUgYmVlbiBhZGRlZCB0byBnb2JqZWN0IHdoaWxlCi0JICByZWdpc3RlcmluZyBHc3RCYXNlU2luay4KLQkgIFNvIHVubG9hZGluZyB0aGUgcGx1Z2luIHdpbGwgY2F1c2UgdGhvc2Ugc3RyaW5ncyB0byBnbyBzdGFsZSBhbmQgdGhlCi0JICBuZXh0IHBsdWdpbiB1c2luZyBHc3RCYXNlU2luayB3aWxsIGNyYXNoLiBTbyB3ZSBtdXN0IG5vdCB1bmxvYWQgbW9kdWxlcwotCSAgYWZ0ZXIgY2FsbGluZyBpbnRvIHRoZW0gZXZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NTcyODAwCi0KLTIwMTAtMDMtMTIgMTU6MzY6MzggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgIGludGVycG9sYXRpb25jb250cm9sc291cmNlOiBEb24ndCBwYXNzIE5VTEwgdG8gdGhlIEdTZXF1ZW5jZSBBUEkKLQotMjAxMC0wMy0xMiAxMzozMzowMCArMDAwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2dpdC11cGRhdGUuc2g6Ci0JICBnaXQtdXBkYXRlOiBGaXggZXJyb3IgcmV0dXJuIHZhbHVlIGFuZCBtYWtlIHRoZSBzY3JpcHQgZXhpdCBvbiBlcnJvcnMKLQkgIE5ld2VyIHZlcnNpb25zIG9mIEJBU0ggKDQueD8pIHNlZW0gdG8gZGlzbGlrZSB1c2luZyAtMSBmb3IgYSByZXR1cm4uIEV2ZW4KLQkgIHRob3VnaCBpdCdzIGRvY3VtZW50ZWQgYXMgYmVpbmcgc2lnbmVkLCBCQVNIIGNvbXBsYWlucyBhYm91dCBpdCwgc28gdXNlCi0JICAyNTUgaW5zdGVhZC4KLQotMjAxMC0wMy0xMiAxMzo1NDoyOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGUyNzJmNzEgdG8gNTVjZDUxNAotCi0yMDEwLTAyLTE3IDEzOjAyOjQzICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICBnc3Q6IFVzZSBHX1ZBTFVFX0NPTExFQ1RfSU5JVCBpZiBhdmFpbGFibGUKLQkgIFRoaXMgYnJpbmdzIHRvdGFsIGNhbGwgc3BlZWR1cHMgYmV0d2VlbiA1JSBhbmQgMjUlLgotCSAgZ3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3Q6ICs1JQotCSAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0OiArIDEwJQotCSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0OiArMjUlCi0JICBnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdDogKzUlCi0JICBNZWFzdXJlZCB1c2luZyB2YWxncmluZCB3aGVuIHJ1biBvdmVyIHRoZSBkaXNjb3Zlcnkgb2YgMjAwIG1lZGlhIGZpbGVzLgotCSAgRml4ZXMgIzYxMDI1NgotCi0yMDEwLTAzLTExIDIwOjI5OjI5ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cG9sbC5jOgotCSogdGVzdHMvY2hlY2svbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIHdpbjMyOiBGaXggYnVpbGQgZmFpbHVyZXMgb2YgdGVzdHMKLQotMjAxMC0wMy0wOSAyMDozODo0NyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIHRhZ3M6IEFkZHMgbmV3IGdlbyBsb2NhdGlvbiB0YWdzCi0JICBBZGRzIG5ldyB0YWdzIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlksCi0JICBHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZIGFuZCBHU1RfVEFHX0dFT19MT0NBVElPTl9TVUJMT0NBVElPTi4KLQkgIEFQSTogR1NUX1RBR19HRU9fTE9DQVRJT05fQ09VTlRSWQotCSAgQVBJOiBHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZCi0JICBBUEk6IEdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OCi0JICBGaXhlcyAjNjEyNDEwCi0KLTIwMTAtMDMtMTEgMTg6MzY6MzIgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdC5jOgotCSAgd2luMzI6IEFkZCBwcm90b3R5cGUgZm9yIERsbE1haW4oKQotCi0yMDEwLTAzLTExIDExOjQ2OjA5ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA5LTEyLTI4IDE3OjI1OjIwICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBnc3RyZWFtZXI6IHJlbW92ZSB1bm5lZWRlZCBjYXN0cwotCSAgR19QQVJBTV9TUEVDX1ZBTFVFX1RZUEUgZG9lcyBhbiBleHBlbnNpdmUgdHlwZSBjaGVjaywgd2hlcmVhcyB0aGUKLQkgIHZhbHVlX3R5cGUgZmllbGQgaXMgYSBwdWJsaWMgZmllbGQsIHNvIHdlIGNhbiBqdXN0IHVzZSBpdCBkaXJlY3RseS4KLQotMjAxMC0wMy0xMSAxMTozOTo0MCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBSZW1vdmUgLVdpbmxpbmUgZmxhZyBhZ2FpbgotCSAgSXQgdHJpZ2dlcnMgZm9yIGEgbG90IG9mIEdTdHJlYW1lciBBUEkgKGV2ZW4gdGhvdWdoIHRob3NlIHRyaWdnZXJzIGFyZQotCSAgd3JvbmcgbW9zdCBvZiB0aGUgdGltZSkuCi0JICBJIG1pc3NlZCBpdCBiZWNhdXNlIGl0IG9ubHkgdHJpZ2dlcnMgd2l0aCAtTzIsIGFuZCBJIHdhcyB1c2luZyAtTzAuCi0KLTIwMTAtMDMtMTEgMTE6MjA6MzUgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGRmOGE3YzggdG8gZTI3MmY3MQotCi0yMDEwLTAzLTExIDExOjEwOjQ0ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEFkZCBhIGJ1bmNoIG1vcmUgd2FybmluZyBmbGFncyB0byBjb25maWd1cmUKLQkgIE5vbmUgb2YgdGhlc2UgZmxhZ3MgY2F1c2Ugd2FybmluZ3MgYW55bW9yZSwgc28gbm8gZml4ZXMgbmVjZXNzYXJ5LgotCSAgVGhlIGZsYWdzIGFyZToKLQkgIC1XZm9ybWF0LW5vbmxpdGVyYWwKLQkgIC1XZm9ybWF0LXNlY3VyaXR5Ci0JICAtV29sZC1zdHlsZS1kZWZpbml0aW9uCi0JICAtV2Nhc3QtYWxpZ24KLQkgIC1XaW5saW5lCi0JICAtV2luaXQtc2VsZgotCSAgLVdtaXNzaW5nLWluY2x1ZGUtZGlycwotCSAgLVdhZGRyZXNzCi0JICAtV2FnZ3JlZ2F0ZS1yZXR1cm4KLQkgIC1Xbm8tbXVsdGljaGFyCi0JICAtV25lc3RlZC1leHRlcm5zCi0KLTIwMTAtMDMtMDIgMjI6NTg6MDYgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnRkZXRhaWxzLmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYXJzZS5jOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvcGFyc2UvdHlwZXMuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGluZGV4ZXJzLmM6Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGluZGV4ZXJzLmg6Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL3R5cGVmaW5kaGVscGVyLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEZpeGVzIGZvciAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzCi0JICBBbHNvIGFkZHMgdGhvc2UgZmxhZ3MgdG8gdGhlIGNvbmZpZ3VyZSB3YXJuaW5nIGZsYWdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNjkyCi0KLTIwMTAtMDMtMTEgMDk6Mzk6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBidWZmZXI6IGZpeCBwcmludGYgZm9ybWF0Ci0JICBVc2UgJXUgdG8gcHJpbnQgdW5zaWduZWQgaW50ZWdlcnMuCi0KLTIwMTAtMDMtMTEgMTA6Mjk6MjMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jOgotCSAgdGVzdHM6IGNhc3QgdGhlIGFyZy4gdG8gZml4IHRoZSBidWlsZCB3aXRoIG5ldyBjb21waWxlciBvcHRzLgotCSAgVGhpcyBpcyB1Z2x5LiBJIGFtIG5vdCBzdXJlIGlmIHdlIHJlYWxseSB3YW50IHRvIGhhdmUgc3VjaCBjYXN0cyBhbGwgb3ZlciB0aGUKLQkgIHBsYWNlLgotCi0yMDEwLTAzLTExIDEwOjE0OjA1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3QtaTE4bi1hcHAuaDoKLQkqIGdzdC9nc3QtaTE4bi1saWIuaDoKLQkgIGkxOG46IGRlZmluZSBkdW1teSBuZ2V0dGV4dCBpZiBpMThuIGlzIGRpc2FibGVkLgotCSAgV2UgY2Fubm90IGJsaW5kbHkgdXNlIGdldHRleHQgZnVuY3Rpb24gYW5kIG5vdCBkZWZpbmUgdGhlbSB3aGVuIG5vdCB1c2luZyBnZXR0ZXh0LgotCi0yMDEwLTAzLTExIDEwOjAwOjQ1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3QtaTE4bi1hcHAuaDoKLQkqIGdzdC9nc3QtaTE4bi1saWIuaDoKLQkgIGkxOG46IGZpeCB0aGUgYnVpbGQgd2l0aCBpMThuIGRpc2FibGVkLgotCSAgRG9uJ3QgaW5jbHVkZSBnZXR0ZXh0LmggaWYgIUVOQUJMRV9OTFMuCi0KLTIwMTAtMDMtMDQgMTA6NDQ6NTIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiBhbGxvdyBjb25maWd1cmFibGUgbWVtb3J5IGFsaWdubWVudC4gRml4ZXMgIzU5NjgzMgotCSAgVGhlIGFsaWdubWVudCBndWFyYW50ZWVkIGJ5IG1hbGxvYyBpcyBub3QgYWx3YXlzIHN1ZmZpY2llbnQuIEUuZy4gdmVjdG9yCi0JICBpbnN0cnVjdGlvbnMgb3IgaGFyZHdhcmUgc3Vic3lzdGVtcyB3YW50IHNwZWNpZmljYWxseSBhbGlnbmVkIGJ1ZmZlcnMuIFRoZQotCSAgYXR0YWNoZWQgcGF0Y2ggd2lsbCB1c2UgcG9zaXhfbWVtYWxpZ24gaWYgYXZhaWxhYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlcnMuCi0JICBUaGUgZGVzaXJlZCBhbGlnbm1lbnQgY2FuIGJlIHNldCB3aGVuIHJ1bm5pbmcgY29uZmlndXJlIHVzaW5nIHRoZSBuZXcKLQkgIC0td2l0aC1idWZmZXItYWxpZ25tZW50IG9wdGlvbi4KLQotMjAxMC0wMy0xMCAyMTo1MTo1MCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gOTcyMGE3ZCB0byBkZjhhN2M4Ci0KLTIwMTAtMDMtMTAgMjA6NTI6MDYgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSAgTWVyZ2UgYnJhbmNoICd3b3JrJwotCi0yMDEwLTAzLTAzIDExOjQ1OjM4ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0LmM6Ci0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSogZ3N0L2dzdGZvcm1hdC5jOgotCSogZ3N0L2dzdGZvcm1hdC5oOgotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JKiBnc3QvZ3N0dHJhY2UuaDoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIEZpeGVzIGZvciAtV3dyaXRlLXN0cmluZ3MKLQkgIFRoaXMgY2hhbmdlcyBzb21lIEFQSXMgaW4gY29tcGF0aWJsZSB3YXlzOgotCSAgLSBTb21lIGZ1bmN0aW9ucyBub3cgdGFrZSAiY29uc3QgY2hhciAqIiBhcmd1bWVudHMsIG5vdCAiY2hhciAqIgotCSAgLSBTb21lIHN0cnVjdHMgbm93IGhhdmUgImNvbnRzIGNoYXIgKiIgbWVtYmVycywgbm90ICJjaGFyICoiCi0JICBUaGUgY2hhbmdlcyBtYXkgY2F1c2Ugd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgd2l0aCB0aGUgcmlnaHQgd2FybmluZwotCSAgZmxhZ3MuIFlvdSd2ZSBiZWVuIHdhcm5lZC4KLQkgIEFsc28gYWRkcyAtV3dyaXRlLXN0cmluZ3MgYXMgYSB3YXJuaW5nIGZsYWcgaW4gY29uZmlndXJlLmFjLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTY5MgotCi0yMDEwLTAzLTAzIDEwOjMxOjI2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgotCSAgRml4ZXMgLVd1bmRlZiB3YXJuaW5ncwotCSAgLi4uIGFuZCBhZGRzIHRoYXQgZmxhZyB0byBjb25maWd1cmUuYWMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE2OTIKLQotMjAxMC0wMy0wMyAxMDozMTowNSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYzoKLQkgIGJlbmNobWFya3M6IFJlbW92ZSB1bm5lZWRlZCBnX3RocmVhZF9leGl0KCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE2OTIKLQotMjAxMC0wMy0wMyAxMDoyNjoxNCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBGaXhlcyBmb3IgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTY5MgotCi0yMDEwLTAzLTAyIDIzOjUxOjE4ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGluZGV4LmM6Ci0JKiBnc3QvZ3N0aW5kZXhmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBnc3QvZ3N0eG1sLmM6Ci0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kcC1wcml2YXRlLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhcmFtc3BlY3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWdzZXR0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdGVzdF90cmFuc2Zvcm0uYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvdGVzdHJ0cG9vbC5jOgotCSAgTWFrZSBjb2RlIHNhZmUgZm9yIC1XcmVkdW5kYW50LWRlY2xzCi0JICBBZGRzIHRoYXQgd2FybmluZyB0byBjb25maWd1cmUuYWMKLQkgIEluY2x1ZGVzIGEgdGlueSBjaGFuZ2Ugb2YgdGhlIEdTVF9CT0lMRVJQTEFURV9GVUxMKCkgbWFjcm86Ci0JICBUaGUgZ2V0X3R5cGUoKSBmdW5jdGlvbiBpcyBubyBsb25nZXIgZGVjbGFyZWQgYmVmb3JlIGJlaW5nIGRlZmluZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNjkyCi0KLTIwMTAtMDMtMTAgMjA6NDM6MzUgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDBiNmUwNzIgdG8gOTcyMGE3ZAotCi0yMDEwLTAzLTAzIDEwOjAwOjQxICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkgIE1ha2Ugc3VyZSBnZW5lcmF0ZWQgY29kZSBkb2Vzbid0IHJ1biB3aXRoIC1XZXJyb3IKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE2OTIKLQotMjAxMC0wMy0xMCAxNzowMzoyOSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBVcGRhdGUgdG8gY29tbW9uLyBjaGFuZ2VzIHRvIEVSUk9SX0NGTEFHUwotCi0yMDEwLTAzLTEwIDE5OjE3OjQyICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgUmV2ZXJ0ICJyZWdpc3RyeTogcmVtb3ZlIHVudXNlZCBmdW5jdGlvbiIKLQkgIFR1cm5zIG91dCAgdGhlIGZ1bmN0aW9uIGlzIG5vdCB1bnVzZWQsIGJ1dCB3YXMgaW4gYW4gI2lmZGVmIFdJTjMyCi0JICBzZWN0aW9uLgotCSAgV2hvb3BzLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA1N2Q1ZGI0MjRjNjhhYjVhNjFmMzNjZTM2Y2UwMTc5ZWIzMDI1MWFjLgotCi0yMDEwLTAzLTEwIDE2OjA5OjMzICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA3Y2M1ZWI0IHRvIDBiNmUwNzIKLQotMjAxMC0wMy0wMiAyMTowNzozMyArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5OiByZW1vdmUgdW51c2VkIGZ1bmN0aW9uCi0JICBBY3R1YWxseSwgdGhlcmUgd2FzIHR3byBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lLCBidXQgb25seSBvbmUgd2FzCi0JICB1c2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTY5MgotCi0yMDEwLTAzLTAyIDE2OjIwOjE1ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHJlbW92ZSB1bnVzZWQgZ3N0X2VsZW1lbnRfZGVmYXVsdF9lcnJvcigpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExNjkyCi0KLTIwMTAtMDMtMTAgMDc6MTU6MTUgKzAwMDAgIEplcmVteSBIdWRkbGVzdG9uIDxqZXJlbXlodUBmcmVlZGVza3RvcC5vcmc+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IFVzZSBtdWxxIGluc3RlYWQgb2YgbXVsIGFzIHNvbWUgYXNzZW1ibGVycyBjYW4ndCBndWVzcyB0aGUgc2l6ZSBvZiB0aGUgb3BlcmFuZHMKLQkgIEZpeGVzIGJ1ZyAjNjEyMzcwLgotCi0yMDEwLTAzLTEwIDAxOjA5OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDdhYTY1YjUgdG8gN2NjNWViNAotCi0yMDEwLTAzLTA5IDIxOjIwOjI3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDQ0ZWNjZTcgdG8gN2FhNjViNQotCi0yMDEwLTAyLTI2IDE2OjAzOjQ3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSogcGtnY29uZmlnL01ha2VmaWxlLmFtOgotCSogdG9vbHMvTWFrZWZpbGUuYW06Ci0JICBidWlsZDogTWFrZSBzb21lIG1vcmUgcnVsZXMgc2lsZW50IGlmIHJlcXVlc3RlZAotCi0yMDEwLTAyLTI2IDE1OjMyOjE0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBVc2UgYXV0b21ha2UgMS4xMSBzaWxlbnQgcnVsZXMgaW5zdGVhZCBvZiBzaGF2ZSBpZiBhdmFpbGFibGUKLQkgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIHVzZSBzb21ldGhpbmcgdGhhdCBpcyBzdGlsbCBtYWludGFpbmVkIGFuZAotCSAgYWxzbyBicmluZ3MgYmFjayBsaWJ0b29sIDEuNSBzdXBwb3J0LgotCi0yMDEwLTAyLTIyIDE2OjI1OjQ1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6Ci0JICBsZm9jb250cm9sc291cmNlOiBPcHRpbWl6ZSBnZXRfdmFsdWVfYXJyYXkoKQotCSAgRG9uJ3QgY29udmVydCBmcm9tIEdWYWx1ZSB0byB0aGUgYWN0dWFsIHR5cGUgZm9yIGV2ZXJ5IHNpbmdsZQotCSAgdmFsdWUuCi0KLTIwMTAtMDItMjIgMTU6MTg6NDEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgIGludGVycG9sYXRpb25jb250cm9sc291cmNlOiBPcHRpbWl6ZSBnZXRfdmFsdWVfYXJyYXkoKQotCSAgVGhpcyBtYWtlcyBpdCA+MTB4IGZhc3RlciBpZiBtb3JlIHRoYW4gYSBzaW5nbGUgdmFsdWUgaXMgcmVxdWVzdGVkCi0JICBieSBub3Qgc2VhcmNoaW5nIGluIHRoZSBHU2VxdWVuY2UgZm9yIGV2ZXJ5IHZhbHVlIGFuZCBjb252ZXJ0aW5nCi0JICB0aGUgdmFsdWUgZnJvbSBHVmFsdWUgdG8gdGhlIHJlYWwgdmFsdWUgdHlwZS4KLQotMjAxMC0wMi0yMSAxNzozNjo1NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jOgotCSAgY29udHJvbGxlcjogQWRkIGJlbmNobWFyayBmb3IgZ2V0dGluZyBhIHZhbHVlIGFycmF5IG9mIHRoZSBjb250cm9sIHBvaW50cwotCi0yMDEwLTAzLTA4IDIzOjI4OjA0ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIEZpeCB0eXBvcyBpbiBkb2N1bWVudGF0aW9uCi0KLTIwMTAtMDMtMDggMjM6MDQ6MjYgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBjYXBzOiBGYWlsIHdoZW4gZnJhY3Rpb25zIGFyZSBmb2xsb3dlZCBieSByYW5kb20gdGV4dAotCSAgUHJldmlvdXMgY29kZSB0cmVhdGVkICIxLzF5b3VybW9tIiB0aGUgc2FtZSBhcyAiMS8xIiBhbmQgIjF3aW1zbW9tIiB0aGUKLQkgIHNhbWUgYXMgIjEiLiBOb3cgdGhlIGNvZGUgaXMgc3RyaWN0ZXIgYW5kIHdpbGwgZmFpbCB0byBjb252ZXJ0IGEKLQkgIGZyYWN0aW9uIHdoZW4gZm9sbG93ZWQgYnkgZ2FyYmFnZSB0ZXh0LgotCi0yMDEwLTAzLTA5IDE3OjMyOjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDAuMTAuMjggPT09Ci0KLTIwMTAtMDMtMDggMjM6MDk6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDAuMTAuMjgKLQotMjAxMC0wMy0wOCAyMzowNjo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTAtMDMtMDggMjI6MDU6MjkgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBjYXBzOiBBbGxvdyAxL21heCBhcyB0aGUgbWluaW1hbCBmcmFjdGlvbiB2YWx1ZSA+IDAKLQkgIFRoaXMgaXMgdXNlZnVsIGZvciBmb3JtYXRzIHRoYXQgcmVxdWlyZSBhIHZhbGlkIGZyYW1lcmF0ZSAobGlrZQotCSAgdGhlb3JhZW5jKS4KLQotMjAxMC0wMy0wNCAxNToyMTozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IGZpeCB0eXBvIGluIGNvbW1lbnRzCi0KLT09PSByZWxlYXNlIDAuMTAuMjcgPT09Ci0KLTIwMTAtMDMtMDUgMjM6NDM6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDAuMTAuMjcKLQotMjAxMC0wMy0wNSAyMzo0MTowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTAtMDMtMDQgMTg6Mzk6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgZ3N0cG9sbDogZG9uJ3QgcGFzcyBub24tb2JqZWN0cyBhcyBmaXJzdCBhcmd1bWVudCB0byBHU1RfREVCVUdfT0JKRUNUKCkKLQkgIFRoaXMgbWF5IGNhdXNlIGNyYXNoZXMgd2hlbiBsb2dnaW5nIGlzIGVuYWJsZWQsIGVzcGVjaWFsbHkgb24gd2luZG93cy4KLQkgIEl0J3Mgbm90IHNhZmUgdG8gcGFzcyByYW5kb20gcG9pbnRlcnMgdG8gZ190eXBlX2NoZWNrX2luc3RhbmNlX2lzX2EoKS4KLQkgIEZpeGVzICM2MTE3MTkuCi0KLTIwMTAtMDMtMDMgMTk6NTQ6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgMC4xMC4yNi40IHByZS1yZWxlYXNlCi0KLTIwMTAtMDMtMDMgMTk6NDk6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wMy0wMyAxMjowNjozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgotCSAgZG9jczogZml4IHVwIGJ5dGV3cml0ZXIgZG9jIGNodW5rcyBmb3IgZmxvYXQgZnVuY3Rpb25zIGFzIHdlbGwKLQotMjAxMC0wMy0wMyAxMToyODoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDoKLQkgIGJ5dGV3cml0ZXI6IGZpeCBoZWFkZXJzIGZvciBmbG9hdC9kb3VibGUgd3JpdGluZyBmdW5jdGlvbnMKLQkgIFRoZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBnc3RfYnl0ZV93cml0ZXJfcHV0X3tmbG9hdDMyfGZsb2F0NjR9XyooKSBhbmQgbm90Ci0JICBnc3RfYnl0ZV93cml0ZXJfcHV0X3tmbG9hdHxkb3VibGV9XyooKS4KLQkgIFNwb3R0ZWQgYnk6IEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotMjAxMC0wMy0wMSAxMjowMjo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdzOiB0cnkgdG8gbWFrZSBjb21tZW50IGZvciB0cmFuc2xhdG9ycyBtb3JlIGhlbHBmdWwKLQotMjAxMC0wMi0yNiAxNTo0Njo1MCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBmaXggZW1lcmdlbmN5IHJlbmRlcmluZyB0aW1lc3RhbXAgdHJhY2tpbmcKLQkgIFNwZWNpZmljYWxseSwgaWYgYWxsIChpbmNsdWRpbmcgaW5pdGlhbCkgYnVmZmVycyB0dXJuIHVwIGxhdGUsCi0JICBlbWVyZ2VuY3kgcmVuZGVyaW5nIHNob3VsZCBhbHNvIGtpY2sgaW4gYXBwcm9wcmlhdGVseS4KLQkgIEZpeGVzICM2MTEwODcuCi0KLTIwMTAtMDItMjQgMDA6MzA6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgMC4xMC4yNi4zIHByZS1yZWxlYXNlCi0KLTIwMTAtMDItMjQgMDA6Mjk6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9iZy5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vbmwucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEwLTAyLTE5IDEzOjI2OjAxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZTogRG9uJ3QgcGFzcyBOVUxMIHBvaW50ZXJzIHRvIEdTZXF1ZW5jZSBBUEkKLQkgIFRoaXMgY2F1c2VzIGFzc2VydGlvbiBmYWlsdXJlcy4gRml4ZXMgYnVnICM2MTA0NDQuCi0KLTIwMTAtMDItMTkgMTM6MjA6MzYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg6Ci0JICBpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZTogQWRkIGNvbnN0IHF1YWxpZmllcnMgdG8gdmFsdWVzIGluIHRoZSBfc2V0IGZ1bmN0aW9ucwotCSAgVGhlIHZhbHVlcyBhcmUgbm90IG1vZGlmaWVkIGFuZCBhcmUgY29waWVkLCBhIGNvbnN0IGJlZm9yZSB0aGUgcGFyYW1ldGVyCi0JICBzaG91bGQgbWFrZSB0aGlzIGV2ZW4gbW9yZSBvYnZpb3VzLgotCi0yMDEwLTAyLTE4IDA5OjE3OjA2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkgIGNvbnRyb2xsZXI6IEFkZCBzb21lIEZJWE1FIDAuMTEgY29tbWVudHMKLQotMjAxMC0wMi0xNyAxMDowNDo1NCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkgIGNvcmVsZW1lbnRzOiBDb21iaW5lIHJlZHVuZGFudCBjb2RlCi0KLTIwMTAtMDItMTcgMDE6Mjc6MjIgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JICBGaXggY29tcGlsYXRpb24gb2YgZmRzaW5rIGFuZCBmZHNyYyB3aXRoIE1TVkMKLQotMjAxMC0wMi0xOCAxNDo1ODo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL3ZpLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMjYuMiBwcmUtcmVsZWFzZQotCi0yMDEwLTAyLTE4IDEzOjEyOjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zLy5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBpZ25vcmUgc29tZSBtb3JlIHRlbXBvcmFyeSBkb2NzIGNydWZ0Ci0KLTIwMTAtMDItMTggMTM6MDk6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIGJ1aWxkOiBmaXggaW5kZW50aW5nIGluIHdpbjMyLXVwZGF0ZSB0YXJnZXQKLQkgIE5vIGlkZWEgd2h5IHdlIG5lZWQgdG8gcnVuIGdzdC1pbmRlbnQgdHdpY2Ugb24gdGhhdCBmaWxlLCBidXQgaXQKLQkgIG9ubHkgc2VlbXMgdG8gc2V0dGxlIG9uIGEgZmluYWwgZm9ybWF0IHdpdGggbWluaW1hbCBkaWZmIHRvIHRoZQotCSAgb25lIGluIGdpdCBhZnRlciB0d28gcnVucy4KLQotMjAxMC0wMi0xOCAxMzowODozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBnc3RjaGVjazogbW9yZSBkZWJ1ZyBsb2dnaW5nIGZvciBnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0KCkKLQotMjAxMC0wMi0xOCAxMTo1MjoyOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgIGNvbGxlY3RwYWRzOiBJbXByb3ZlIGRvY3MgYWJvdXQgJ2RhdGEnIGF0dHJpYnV0ZQotCSAgQWRkcyBhIHJlbWluZGVyIHRvICdkYXRhJyBhdHRyaWJ1dGUgZG9jCi0JICBGaXhlcyAjNjEwMzY2Ci0KLTIwMTAtMDItMTggMTc6MTU6MzUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6Ci0JICBtZW1pbmRleDogYXZvaWQgYnVzeSBsb29wIHdoZW4gZG9pbmcgRVhBQ1QgbG9va3VwCi0JICBGaXhlcyAjNjEwMzY3LgotCi0yMDA5LTEyLTIyIDExOjA5OjEwICswODAwICBKb2hhbiBCaWxpZW4gPGpvYmlAbGl0bC5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBpbnRyb3NwZWN0aW9uOiBhZGQgYW5ub3RhdGlvbiBmb3IgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlCi0JICBzdGF0ZSBhbmQgcGVuZGluZyBhcmUgIm91dCIgYXJndW1lbnRzLgotCSAgRml4ZXMgIzYwNTE4OS4KLQotMjAxMC0wMi0xNyAxMjoxNjozNyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKLQkgIGZpbGVzcmM6IERvbid0IHVzZSBleHBlbnNpdmUgY2FzdCBjaGVja3MgaW4gX2NyZWF0ZQotCSAgX2NyZWF0ZSgpIGlzIGEgcGFkIGZ1bmN0aW9uIHNldCBieSBvdXJzZWx2ZXMsIHRoZXJlZm9yZSB3ZSdyZSBzdXJlIGJhc2VzcmMKLQkgIGlzIGEgR3N0RmlsZVNyYy4KLQkgIFNwZWVkcyB1cCBfY3JlYXRlKCkgYnkgMTclIGFuZCB0aGUgdG90YWwgY2FsbCBieSA4JSAoaW5zdHJ1Y3Rpb24gY2FsbHMgbWVhc3VyZW1lbnRzCi0JICBkb25lIHdpdGggdmFsZ3JpbmQpLgotCSAgRml4ZXMgIzYxMDI0NgotCi0yMDEwLTAyLTE3IDEyOjE0OjA5ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IERvbid0IHVzZSBleHBlbnNpdmUgY2FzdCBjaGVja3MgaW4gZ2V0X3JhbmdlLgotCSAgX2dldF9yYW5nZSgpIGlzIGEgcGFkIGZ1bmN0aW9uIHNldCBieSBvdXJzZWx2ZXMsIHRoZXJlZm9yZSB3ZSdyZSBjZXJ0YWluIHRoYXQKLQkgIHRoZSBwYXJlbnQgaXMgYSBHc3RCYXNlU3JjLgotCSAgU3BlZWRzIHVwIF9nZXRfcmFuZ2UgYnkgMzglLCBhbmQgdGhlIHRvdGFsIGNhbGwgYnkgMzAlLiAodmFsZ3JpbmQgaW5zdHJ1Y3Rpb24KLQkgIGNhbGxzIG1lYXN1cmVtZW50cykuCi0JICBGaXhlcyAjNjEwMjQ2Ci0KLTIwMTAtMDItMTcgMTE6MzE6MDcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgZmRzcmM6IGNsZWFudXAgcGFyYW1ldGVyIGluaXRpYWxpc2F0aW9uIGFuZCBhZGQgY29tZW1udCtsb2dnaW5nCi0JICBJbml0aWFsaXplIG5ld19mZCB3aXRoIERFRkFVTFRfRkQgYW5kIGZkIHdpdGggLTEuIFNldHRpbmcgdGhlIHByb3BlcnR5IHdpbGwgc2V0Ci0JICBuZXdfZmQgYW5kIGluIF91cGRhdGVfZmQoKSB3ZSBjZWhjayBmZCBhZ2FpbnN0IC0xLiBBbHNvIGFkZCBhIGNvbWVudCBhYm91dCB0aGUKLQkgIHdhcm5pbmcgd2UgZ2V0IGluIHRoZSBsb2cgZnJvbSBnc3RfcG9sbF9yZW1vdmVfZmQoKS4gV2UgY291bGQgZ2V0IHJpZCBvZiB0aGUKLQkgIHdhcm5pbmcgaWYgd2Ugd2FudCBieSB0cmFja2luZyBpZiBmZCBoYXMgYmVlbiBhZGRlZCB0byBmZHNldC4KLQotMjAxMC0wMi0xNyAwOTo1NTo1MiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1tZXRhZGF0YS50eHQ6Ci0JICBkZXNpZ246IHdyaXRlIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRhZy1oYW5kbGluZwotCSAgRG9jdW1lbnQgdGhlIHRhZ2hhbmRsaW5nIGluIGdzdHJlYW1lci4gTGlzdCBnYXBzIGFuZCBwcm9wb3NlIG5ldyBtZWNoYW5pc21zIHRvCi0JICBkZWFsIHdpdGggdGhlbS4KLQotMjAxMC0wMi0xNiAxMDoyNzoxOCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgdGFnbGlzdDogcmVtb3ZlIGJsYW5rIGxpbmVzIGluIHZhcmlhYmxlIGRlY2xhcmF0aW9ucwotCi0yMDEwLTAyLTE2IDExOjMwOjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkqIHRvb2xzL2dzdC10eXBlZmluZC5jOgotCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkqIHRvb2xzL3Rvb2xzLmg6Ci0JICB0b29sczogY2FsbCBnX3NldF9wcmduYW1lKCkgYmVmb3JlIGRvaW5nIHRoZSBvcHRpb24gcGFyc2luZwotCSAgZ19zZXRwcmduYW1lIGlzIGltcGxpY2l0bHkgY2FsbGVkIGJ5IGdfb3B0aW9uX2NvbnRleHRfbmV3KCkgd2l0aCBhIGNoZWNrCi0JICB0byBzZWUgaWYgaXQncyBiZWVuIHNldCBhbHJlYWR5LCBzbyBzZXQgaXQgYmVmb3JlIGdfb3B0aW9uX2NvbnRleHRfbmV3KCkKLQkgIE1vdmUgdmVyc2lvbiBwcmludGluZyBiYWNrIHVudGlsIGFmdGVyIHRoZSBvcHRpb25zIGhhdmUgYmVlbiBwYXJzZWQsCi0JICBvdGhlcndpc2UgaXQgd29uJ3Qgd29yaywgc2luY2UgaXQgZXZhbHVhdGVzIGEgZmxhZyBzZXQgYnkgdGhlCi0JICBvcHRpb24gcGFyc2VyLgotCi0yMDEwLTAyLTE2IDExOjI0OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIFJldmVydCAidG9vbHM6IE1vdmUgZ3N0X3Rvb2xzX3ByaW50X3ZlcnNpb24gY2FsbCB0byBhdm9pZCB3YXJuaW5nIGZyb20gbmV3IEdMaWIuIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5M2RkOTVmMDJlZjNmYTUzMGY1NGNlODFlOGZmYmE5NmYzYjY3OWNiLgotCSAgVGhpcyBjb21taXQgbWFkZSAtLXZlcnNpb24gbm90IHdvcmsgYW55IGxvbmdlci4gVGhlIGdfc2V0cHJnbmFtZSgpCi0JICB3YXJuaW5nIGlzIGZpeGVkIGluIHJlY2VudCBHTGliIHZlcnNpb25zLgotCi0yMDEwLTAyLTE2IDA4OjI2OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IG1ha2Ugc3VyZSBnc3QtcGx1Z2luLXNjYW5uZXIgZ2V0cyBpbnN0YWxsZWQgd2hlcmUgd2UgZXhwZWN0IGl0Ci0JICBBZGQgY2hlY2sgdG8gbWFrZSBzdXJlIGdzdC1wbHVnaW4tc2Nhbm5lciByZWFsbHkgZ2V0cyBpbnN0YWxsZWQgd2hlcmUKLQkgIHdlIHdpbGwgbG9vayBmb3IgaXQgbGF0ZXIsIGllLiBwYXRocyBhbmQgcHJlZml4ZXMgYXJlIHNldCBhdCBjb25maWd1cmUKLQkgIHRpbWUgYW5kIG5vdCBzcGVjaWZpZWQgdmlhIG1ha2UuCi0JICBGaXhlcyAjNjA5OTQxLgotCi0yMDEwLTAyLTE1IDIzOjAyOjU5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBkb2NzOiBwcmVmZXIgc2hvcnQgZGVzYyBmcm9tIEdzdEVsZW1lbnREZXRhaWxzCi0KLTIwMTAtMDItMTUgMDE6MjQ6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgZG9jczogZml4IGd0ay1kb2MgY2h1bmsgZm9yIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QoKQotCi0yMDEwLTAyLTE1IDAwOjMxOjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgcG8gZmlsZXMgZm9yIG5ldyBjb21tZW50cwotCi0yMDEwLTAyLTE1IDAwOjI5OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ3M6IHdyYXAgbG9uZyBzdHJpbmcgY29uc3RhbnRzCi0JICBBbmQgZml4IGluZGVudGluZyBpc3N1ZQotCi0yMDEwLTAyLTE1IDAwOjIxOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ3M6IGFkZCBzb21lIGNvbW1lbnRzIGZvciB0cmFuc2xhdG9ycyBzbyB0YWcgbW5lbW9uaWNzIGdldCB0cmFuc2xhdGVkIGNvcnJlY3RseQotCSAgV2Ugd2FudCAncHJldmlldyBpbWFnZScgdHJhbnNsYXRlZCBhcyBhIG5vdW4sIG5vdCBhcyAncHJldmlldyBbdGhlXSBpbWFnZScuCi0KLTIwMTAtMDItMDQgMTc6NDM6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBwYWQ6IGRvbid0IHByaW50IFdBUk4gZGVidWcgc3RhdGVtZW50cyBmb3Igbm9ybWFsIHRoaW5ncyBsaWtlIEVPUwotCi0yMDEwLTAyLTE0IDIzOjE1OjQ1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDk2ZGM3OTMgdG8gNDRlY2NlNwotCi0yMDEwLTAyLTEzIDE1OjE4OjA1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmQ6IFJlc2V0IHRoZSB3b3JraW5nIG1vZGUgd2hlbiBnb2luZyB0byBSRUFEWS9OVUxMCi0JICBUaGlzIGFsbG93cyBwcm9wZXJseSByZS11c2luZyB0eXBlZmluZCAoZWxzZSBpdCB3b3VsZCB0aGluayBpdCdzCi0JICBhbHJlYWR5IGRvbmUgdGhlIHR5cGVmaW5kaW5nIHdoZW4gYmVpbmcgcmUtdXNlZCB3aXRoIGFub3RoZXIKLQkgIHN0cmVhbSkuCi0KLTIwMTAtMDEtMjIgMTE6Mzg6NTkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGV3cml0ZXIuYzoKLQkgIGJ5dGV3cml0ZXI6IEFkZHMgYSB0ZXN0IGZvciBfZmlsbAotCi0yMDEwLTAxLTIyIDA5OjE5OjMxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBieXRld3JpdGVyOiBhZGQgX2ZpbGwgZnVuY3Rpb24KLQkgIEFkZHMgYSBuZXcgZnVuY3Rpb24gdG8gR3N0Qnl0ZVdyaXRlciB0aGF0IHdyaXRlcwotCSAgYSBjb25zdGFudCB2YWx1ZSB0byBhIG1lbW9yeSBhcmVhIChha2EgbWVtc2V0KS4KLQkgIFVzZWZ1bCBmb3IgYWRkaW5nIHBhZGRpbmcgdG8gYnVmZmVycy4KLQkgIEFsc28gdXBkYXRlcyAuZGVmIGZpbGUgYW5kIGRvY3MuCi0JICBBUEk6IGdzdF9ieXRlX3dyaXRlcl9maWxsKCkKLQotMjAxMC0wMS0yOCAxMTo1NzozMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZDogQXZvaWQgbWVzc2luZyBwYWRzIGFjdGl2YXRpb24KLQkgIFR5cGVmaW5kIG1pZ2h0IG1lc3MgdXAgcGFkcyBtb2RlcyAocHVsbC9wdXNoKSBpZiBhCi0JICBkb3duc3RyZWFtIGVsZW1lbnQgaXMgcGx1Z2dlZCBhbmQgaXRzIHBhZHMgYWN0aXZhdGVkCi0JICBpbiAnc3RlcCAyJyBvZiB0eXBlZmluZCBwYWRzIGFjdGl2YXRpb24uCi0JICBUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgZm9sbG93aW5nIHN0ZXBzIGRvbid0IGNoZWNrCi0JICBpZiB3ZSBhbHJlYWR5IGVtaXR0ZWQgdHlwZWZvdW5kIGR1ZSB0byB1cHN0cmVhbSBzZXR0aW5nCi0JICBjYXBzIG9uIGJ1ZmZlcnMgYmVpbmcgcHVsbGVkIGluIHRoZSB0eXBlZmluZCBoZWxwZXJzLgotCSAgQXZvaWQgdGhhdCBieSBjaGVja2luZyBpZiB0eXBlZm91bmQgaXMgYWxyZWFkeSBlbW1pdGVkLgotCSAgRml4ZXMgIzYwODAzNgotCi0yMDEwLTAyLTEyIDE0OjQ5OjUyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIGJhc2VzcmM6IE1ha2UgbG9ja2luZyBvZiB0aGUgc2VnbWVudCBhIGJpdCBtb3JlIHN0cmljdCBhbmQgdXBkYXRlIGRvY3VtZW50YXRpb24KLQkgIFVwZGF0aW5nIHRoZSBzZWdtZW50IHZhbHVlcyBtdXN0IG9ubHkgYmUgZG9uZSB3aGlsZSBob2xkaW5nIHRoZQotCSAgU1RSRUFNX0xPQ0sgYW5kIE9CSkVDVF9MT0NLLiBUaGlzIG1lYW5zLCByZWFkaW5nIGNhbiBiZSBkb25lIGFzCi0JICBsb25nIGFzIG9uZSBvZiB0aGVtIGlzIGhlbGQsIG5vdCBib3RoLCB3aGljaCByZW1vdmVzIHNvbWUgbG9jay11bmxvY2sKLQkgIGJsb2NrcyBmcm9tIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGNvZGUgcGF0aHMuCi0JICBBbHNvIGRvY3VtZW50LCB0aGF0IGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KCkgKm11c3QqIGJlIGNhbGxlZCBpbgotCSAgc3RhdGVzIDw9IFJFQURZIGFuZCBhZGQgYW4gYXNzZXJ0aW9uIGZvciB0aGlzLiBDaGFuZ2luZyB0aGUgZm9ybWF0Ci0JICBsYXRlciB3aWxsIGNvbXBsZXRlbHkgbWVzcyB1cCB0aGUgc2VnbWVudCBpbmZvcm1hdGlvbi4KLQotMjAxMC0wMi0wOCAwOToxMjowMSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWNsb2NrLnhtbDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWRwYXJhbXMueG1sOgotCSogZG9jcy9wd2cvYWR2YW5jZWQtaW50ZXJmYWNlcy54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC1yZXF1ZXN0LnhtbDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sOgotCSogZG9jcy9wd2cvYWR2YW5jZWQtdGFnZ2luZy54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6Ci0JKiBkb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JKiBkb2NzL3B3Zy9idWlsZGluZy1jaGFpbmZuLnhtbDoKLQkqIGRvY3MvcHdnL2J1aWxkaW5nLXBhZHMueG1sOgotCSogZG9jcy9wd2cvYnVpbGRpbmctcHJvcHMueG1sOgotCSogZG9jcy9wd2cvYnVpbGRpbmctdGVzdGFwcC54bWw6Ci0JKiBkb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sOgotCSAgcHdnOiBzZXZlcmFsIHR5cG8gZml4ZXMKLQkgIEZpeGVzICM2MDkyODYuCi0KLTIwMTAtMDItMDkgMTc6NTI6MTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGJhc2VzcmM6IFByb3RlY3Qgc2VnbWVudCB2YWx1ZXMgZnJvbSBjb25jdXJyZW50IGFjY2VzcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzCi0JICBUaGlzIGNvdWxkIGhhcHBlbiBlYXNpbHkgaW4gdGhlIHF1ZXJ5IGZ1bmN0aW9ucyBvciB3aGVuIHRoZSBzaXplIGlzIHNldAotCSAgb24gYXBwc3JjIGZyb20gc29tZSBub24tc3RyZWFtaW5nIHRocmVhZC4KLQotMjAxMC0wMi0wNCAyMToxMToyNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICB0eXBlZmluZGVsZW1lbnQ6IFByb3RlY3QgaW50ZXJuYWwgZmllbGRzIGZyb20gY29uY3VycmVudCBjaGFuZ2VzIGZyb20gZGlmZmVyZW50IHRocmVhZHMKLQkgIEZpeGVzIGJ1ZyAjNjA4ODc3LgotCi0yMDEwLTAyLTExIDIwOjE0OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogZG9uJ3QgbGVhayB0aW1lb3V0IEdTb3VyY2UKLQotMjAxMC0wMi0xMSAwMDoxODozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JICBkb2NzOiBmbGVzaCBvdXQgcmVsZWFzZSBkb2Mgc29tZSBtb3JlCi0KLTIwMTAtMDItMTEgMDE6MTA6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNQUlOVEFJTkVSUzoKLQkgIFVwZGF0ZSBNQUlOVEFJTkVSUywgYWRkIG15c2VsZgotCi0yMDEwLTAyLTExIDE5OjQ5OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBiYWNrIHRvIGRldmVsb3BtZW50Ci0JICBTbHVzaHkgZnJlZXplIHJlbWFpbnMgaW4gZWZmZWN0LgotCi09PT0gcmVsZWFzZSAwLjEwLjI2ID09PQotCi0yMDEwLTAyLTEwIDE5OjE3OjI4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBSZWxlYXNlIDAuMTAuMjYKLQotMjAxMC0wMi0xMCAxNTozMjowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTAtMDItMDkgMTU6NTI6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGRlZmluZSBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEIGluIHdpbjMyIGNvbmZpZy5oCi0JICBFdmVuIGlmIGl0J3Mgbm90IHVzZWQsIGl0IHN0aWxsIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIHRoaW5ncyB0bwotCSAgY29tcGlsZS4KLQotMjAxMC0wMi0wOSAxMDoxOTowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgZ3N0X3ByaXZhdGU6IE1TVkMgZG9lc24ndCBzZWVtIHRvIGxpa2UgI3dhcm5pbmcKLQkgIFZpc3VhbCBTdHVkaW8gY29tcGxhaW5zIGFib3V0ICJpbnZhbGlkIHByZXByb2Nlc3NvciBjb21tYW5kICd3YXJuaW5nJyIKLQkgIGV2ZW4gaWYgdGhlIGlmZGVmIGRvZXNuJ3QgdHJpZ2dlciwgc28ganVzdCByZW1vdmUgdGhpcyBhZ2Fpbi4KLQotMjAxMC0wMi0xMCAxNDo0MDoxNyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOgotCSAgdGVzdHM6IEZpeCBtdWx0aXF1ZXVlIHRlc3QgZm9yIGxhdGVzdCBjb21taXRzLgotCSAgVGhlIHByb2JsZW0gbGllcyBpbiB0aGUgZmFjdCB0aGF0IG11bHRpcXVldWUgd2lsbCBub3cgb3BlcmF0ZSBzb21ld2hhdAotCSAgc2ltaWxhcmx5IHRvIHRoZSBmbG93IGFnZ3JlZ2F0aW9uIGxvZ2ljIG9mIGRlbXV4ZXJzIGFuZCB0aGVyZWZvcmUKLQkgIHdpbGwgc3RvcHAgd2hlbmV2ZXIgYWxsIGRvd25zdHJlYW0gcGFkcyByZXR1cm4gTk9UX0xJTktFRCBhbmQvb3IKLQkgIFVORVhQRUNURUQgYW5kIHRoZXJlJ3Mgbm8gbW9yZSBidWZmZXJzIHRvIHB1c2guCi0JICBUaGUgbGF0ZXN0IGNvbW1pdHMgc2hvdWxkIG5vdCBhZmZlY3QgYW55IHJlZ3VsYXIgdXNlLWNhc2UsIGJ1dCB0aGUgYnVnCi0JICByZXBvcnQgd2lsbCBiZSBrZXB0IG9wZW4gc28gdGhlIHByZXZpb3VzIGJlaGF2aW91ciBjYW4gYmUgcmUtZXN0YWJsaXNoZWQKLQkgIGlmIG5lZWRlZC4KLQkgIEZpeGVzICM2MDk0ODYKLQotMjAxMC0wMi0wOSAxNTo1MToxOCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBEb24ndCBzdG9wIHRocmVhZHMgb24gVU5FWFBFQ1RFRCBhbmQgZm9yd2FyZCBmbG93IHJldHVybnMuCi0JICBXaGVuIGEgZG93bnN0cmVhbSBlbGVtZW50IHJldHVybnMgR1NUX0ZMT1dfVU5FWFBFQ1RFRCB3ZSB3YW50IHRvOgotCSAgKiBsZXQgdGhlIGRhdGFxdWV1ZSB0YXNrIHJ1bm5pbmcKLQkgICogZm9yd2FyZCB0aGUgZmxvdyByZXR1cm4gdXBzdHJlYW0uCi0JICBUaGlzIGFsbG93cyB1cHN0cmVhbSBlbGVtZW50cyB0byBwdXNoIEVPUywgYW5kIGhhdmUgdGhhdCBFT1MgZXZlbnQgY29tZQotCSAgZG93bnN0cmVhbS4KLQkgIEZpeGVzICM2MDkyNzQKLQotMjAxMC0wMi0wOSAxMzozNTowOCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6Ci0JICBSZXZlcnQgIm11bHRpcXVldWU6IGhhbmRsZSBVTkVYUEVDVEVEIGZsb3dyZXR1cm4gYmV0dGVyIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBmYmRmNGRjZWRhZDg2OTJmMWUzZDg4Mzg1NTExODg5ODdlNDYyZTc0LgotCSAgUGFydGx5IGZpeGVzICM2MDkyNzQKLQotMjAxMC0wMS0yOCAwNzoyNzo0OSArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBzY3JpcHRzL2dpdC11cGRhdGUuc2g6Ci0JICBnaXQtdXBkYXRlLnNoOiBGaXggaXNzdWVzCi0KLTIwMTAtMDItMDcgMDk6NTk6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgUmV2ZXJ0ICJkb2NzOiBmaXggQVNDSUkgYXJ0IHNvIHRoYXQgaXRlcmF0b3JzIGFyZSBhbGlnbmVkIHByb3BlcnR5IHRvIHRoZSBkaWFncmFtIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBhZTYwZDA2ZTllNDAxZDFlZDRkZTVlZjI1YjVjMjgzZGIwNjk2YTMxIChmaXhlczogIzYwOTE2NikKLQotMjAxMC0wMi0wNCAxODozMDo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICAwLjEwLjI1LjMgcHJlLXJlbGVhc2UKLQotMjAxMC0wMi0wNCAxNzo0NTo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2JnLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby96aF9DTi5wbzoKLQkgIHBvOiB0cmFuc2xhdGlvbiB1cGRhdGVzCi0KLTIwMTAtMDItMDEgMTI6NTA6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgZG9jczogZml4IEFTQ0lJIGFydCBzbyB0aGF0IGl0ZXJhdG9ycyBhcmUgYWxpZ25lZCBwcm9wZXJ0eSB0byB0aGUgZGlhZ3JhbQotCi0yMDEwLTAyLTAxIDE3OjQwOjA4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oOgotCSAgZ3N0Ynl0ZXdyaXRlcjogRml4IGRpZmZlcmVudCBmdW5jdGlvbiBuYW1lcyBpbiAuaCBhbmQgLmMKLQkgIGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlciB3YXNuJ3QgZGVjbGFyZWQKLQkgIGluIC5oLCBpbnN0ZWFkIHRoZXJlIHdhcyBfcmVzZXRfYW5kX2dldF9kYXRhX2FzX2J1ZmZlci4KLQkgIFJlcGxhY2UgaXQgd2l0aCB0aGUgcmVhbCBmdW5jdGlvbiBuYW1lLCB0aGF0IGlzIHNtYWxsZXIKLQkgIGFuZCBtYXRjaGVzIGdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfYnVmZmVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA4NzI2Ci0KLTIwMTAtMDEtMzEgMTc6MzA6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkgIGRvY3M6IGFkZCBzb21lIG1vcmUgU2luY2U6IG1hcmtlcnMgdG8gYnVmZmVyIGxpc3QgZG9jcwotCi0yMDEwLTAxLTMwIDE4OjU3OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiBmaXggdHlwbyBpbiB3YXJuaW5nIG1lc3NhZ2UKLQkgIFNwb3R0ZWQgYnkgYnNyZWVyZW5qQGdtYWlsLmNvbS4KLQkgIEZpeGVzICM2MDg0NDIuCi0KLTIwMTAtMDEtMzAgMTU6MTc6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMTVkNDdhNiB0byA5NmRjNzkzCi0KLTIwMTAtMDEtMzAgMTM6NDU6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBpbml0OiBkb24ndCBzcGV3IHdhcm5pbmcgYWJvdXQgbGF0ZSBnX3RocmVhZF9pbml0KClzIGlmIEdMaWIgPj0gMi4yMy4yCi0JICBMYXRlIGdfdGhyZWFkX2luaXQoKSBpcyBmaW5lIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyBhbmQgZG9uZSBhdXRvbWF0aWNhbGx5Ci0JICBmcm9tIGdfdHlwZV9pbml0KCkgdGhlcmUsIHNvIGRvbid0IHdhcm4gaWYgdGhlIGFwcGxpY2F0aW9uIGhhc24ndCBjYWxsZWQKLQkgIGdfdGhyZWFkX2luaXQoKSB5ZXQgd2hlbiBnc3RfaW5pdCgpIGlzIGNhbGxlZCB3aXRoIG5ldyBHTGliIHZlcnNpb25zLgotCSAgRml4ZXMgIzYwODM5OC4KLQotMjAxMC0wMS0yOSAwOTo0MTozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgotCSAgcGtnY29uZmlnOiBkb24ndCBwdXQgLURHX1RIUkVBRFNfTUFOREFUT1JZIGludG8gb3VyIHBrZy1jb25maWcgQ0ZMQUdTCi0JICBJZiB3ZSBmb3JjZSAtREdfVEhSRUFEU19NQU5EQVRPUlkgb250byBhcHBzLCB0aGVuIGdfdGhyZWFkX3N1cHBvcnRlZCgpCi0JICB3aWxsIGFsd2F5cyBldmFsdWF0ZSB0byBUUlVFLCBzbyB0aGUgdHlwaWNhbCB0aHJlYWQgaW5pdGlhbGlzYXRpb24KLQkgIGJvaWxlcnBsYXRlIGNvZGUgaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQoKSkgZ190aHJlYWRfaW5pdChOVUxMKTsgd2lsbAotCSAgbm8gbG9uZ2VyIHdvcmssIGFuZCB0aGUgdGhyZWFkaW5nIHN5c3RlbSBub3QgYmUgaW5pdGlhbGlzZWQgYW5kIHVzCi0JICBwcmludGluZyBhIHdhcm5pbmcgaW4gZ3N0X2luaXQuIFRoaXMgbWF5IGJlIGZpbmUgaW4gbW9zdCBjYXNlcywgc2luY2UKLQkgIGxhdGUgaW5pdGlhbGlzYXRpb24gaXMgYWxsb3dlZCBhbmQgYXV0b21hdGljYWxseSBkb25lIGluIGdfdHlwZV9pbml0KCkKLQkgIHNpbmNlIEdMaWIgMi4yMy4yLCBidXQgbGV0J3MgYmUgY2F1dGlvdXMgYW5kIG9ubHkgdXNlIHRoaXMgZGVmaW5lIHdoZW4KLQkgIGNvbXBpbGluZyBHU3RyZWFtZXIgaXRzZWxmLgotCSAgU2VlICM2MDgzOTguCi0KLTIwMTAtMDEtMjggMTU6NTU6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSAgcGlwZWxpbmU6IFRha2Ugc3RhcnRfdGltZSBhZnRlciBjaGFpbmluZyB1cCB0b28KLQkgIFJlZmFjdG9yIHRoZSBjb2RlIHRvIHRha2UgdGhlIGN1cnJlbnQgc3RhcnRfdGltZSB3aGVuIGdvaW5nIHRvIFBBVVNFRC4KLQkgIE1ha2Ugc3VyZSB3ZSBhbHNvIGNhbGwgdGhlIHN0YXJ0X3RpbWUgdXBkYXRlIGNvZGUgYWZ0ZXIgd2UgY2hhaW5lZCB1cCB0byB0aGUKLQkgIHBhcmVudCBiaW4uCi0JICBGaXhlcyAjNjA3ODQyCi0KLTIwMTAtMDEtMjYgMTg6NTk6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICAwLjEwLjI1LjIgcHJlLXJlbGVhc2UKLQotMjAxMC0wMS0yNyAwMDoyMzowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSAgY2hlY2tzOiBmaXggc3B1cmlvdXMgZ2hvc3QgcGFkIGNoZWNrIGZhaWx1cmUKLQotMjAxMC0wMS0yNiAxOTozNTo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICB3aW4zMjogdXBkYXRlIHdpbmRvd3MgaGVhZGVycyB0byBsYXRlc3QgdmVyc2lvbgotCi0yMDEwLTAxLTI2IDE5OjMyOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIGRvY3M6IG1pbm9yIHVwZGF0ZSB0byByZWxlYXNlIG5vdGVzCi0KLTIwMTAtMDEtMjYgMTg6NDU6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbiBmaWxlcwotCi0yMDEwLTAxLTI2IDE4OjM5OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9ydHBvb2wtdGVzdC5jOgotCSAgdGVzdHM6IGZpeCB3YXJuaW5nIGluIHJ0cG9vbC10ZXN0Ci0JICBUaGUgc3RyZWFtIHN0YXR1cyBtZXNzYWdlIG9iamVjdCBtYXkgYmUgb2YgYSBub24tR09iamVjdCB0eXBlLCBlLmcuCi0JICBHX1RZUEVfUE9JTlRFUiAoc2VlIEdzdEF1ZGlvU3JjKSwgc28gcHJpbnQgdGhhdCBwcm9wZXJseSBpbnN0ZWFkCi0JICBvZiBhc3N1bWluZyB0aGUgdmFsdWUgaG9sZHMgYW4gb2JqZWN0LgotCi0yMDEwLTAxLTI2IDEyOjQzOjA5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IGhhbmRsZSBVTkVYUEVDVEVEIGZsb3dyZXR1cm4gYmV0dGVyCi0JICBXaGVuIHdlIHJlY2VpdmUgYW4gVU5FWFBFQ1RFRCBmbG93cmV0dXJuIGZyb20gZG93bnN0cmVhbSwgd2UgbXVzdCBub3Qgc2h1dGRvd24KLQkgIHRoZSBwdXNoaW5nIHRocmVhZCBiZWNhdXNlIHVwc3RyZWFtIHdpbGwgYXQgc29tZSBwb2ludCBwdXNoIGFuIEVPUyB0aGF0IHdlIHN0aWxsCi0JICBuZWVkIHRvIHB1c2ggZnVydGhlciBkb3duc3RyZWFtLgotCSAgVG8gYWNoaWV2ZSB0aGlzLCBjb252ZXJ0IHRoZSBVTkVYUEVDVEVEIHJldHVybiB2YWx1ZSB0byBPSy4gQWRkIGEgZml4bWUgc28gdGhhdAotCSAgd2UgaW1wbGVtZW50IHRoZSByaWdodCBsb2dpYyB0byBwcm9wYWdhdGUgdGhlIGZsb3dyZXR1cm4gdXBzdHJlYW0gYXQgc29tZSBwb2ludC4KLQkgIEFsc28gY2xlYW4gdXAgdGhlIHVuaXQgdGVzdCBhIGxpdHRsZS4KLQkgIEZpeGVzICM2MDgxMzYKLQotMjAxMC0wMS0yNiAwODo1MjoxNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgotCSAgZG9jczogRml4IGJhc2ljcy1idXMgZG9jcwotCSAgRml4IHdyb25nIGluZm9ybWF0aW9uIGFib3V0IGJ1cyB3YXRjaCBmdW5jdGlvbnMgaW4gdGhlCi0JICBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBtYW51YWwuCi0JICBGaXhlcyAjNjA4MTI3Ci0KLTIwMTAtMDEtMjQgMjM6MTI6MjIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBiaW46IGFsc28gcmVtb3ZlIHByaXZhdGUgZnVuY3Rpb24gZnJvbSBkZWYgZmlsZQotCi0yMDEwLTAxLTI0IDIzOjA0OjI3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogbWFrZSBhIGludGVyZmFjZSB2bWV0aG9kIGltcGxlbWVudGF0aW9uIHN0YXRpYwotCSAgVGhpcyBzaG91bGQgbm90IGNhdXNlIGFueSB0cm91YmxlcyAtIHRoZSBtZXRob2RzIHdhc24ndCBpbiBhbnkgaGVhZGVyLgotCi0yMDEwLTAxLTI0IDIyOjIyOjA3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JICBjaGlsZHByb3h5OiByZW1vdmUgOyBhZnRlciB9Ci0KLTIwMTAtMDEtMjIgMTg6MDA6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGFkZCBzb21lIGRvY3MgdG8gbWFyayBuZXcgcHJvcGVydHkKLQotMjAxMC0wMS0yMiAxNzo1NTozOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IGFkZCBvcHRpb24gdG8gcmVtb3ZlIHRoZSB0ZW1wLWZpbGUKLQkgIEFkZCBhbiBvcHRpb24gdG8gYXV0b21hdGljYWxseSByZW1vdmUgdGhlIHRlbXAgZmlsZSAoVFJVRSBieSBkZWZhdWx0KS4gVGhpcwotCSAgc2hvdWxkIG1ha2UgaXQgcG9zc2libGUgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBrZWVwIHRoZSB0ZW1wIGZpbGUgYnkgb3RoZXIgbWVhbnMKLQkgIHRoYW4gaGFyZGxpbmtpbmcgb3IgaG9sZGluZyBhbiBmZCBvcGVuLgotCSAgRml4ZXMgIzYwNzczOQotCi0yMDEwLTAxLTIyIDAyOjAyOjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBkb24ndCBsZWFrIHVyaSBzdHJpbmcKLQotMjAxMC0wMS0yMSAxNjoxOTo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZGV4Lmg6Ci0JICBnc3RpbmRleDogcmV0YWIgLmggZmlsZQotCi0yMDEwLTAxLTIwIDE0OjEzOjExICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JKiB0b29scy9nc3QtdHlwZWZpbmQuYzoKLQkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6Ci0JICB0b29sczogUnVuIGdfdGhyZWFkX2luaXQoKSB1bmNvbmRpdGlvbmFsbHkKLQkgIFNpbmNlIHdlIGRlZmluZSBHX1RIUkVBRFNfTUFOREFUT1JZLCBnX3RocmVhZF9zdXBwb3J0ZWQoKSBldmFsdWF0ZXMgdG8KLQkgIFRSVUUgdW5jb25kaXRpb25hbGx5LCBzbyBjYWxsaW5nIGdfdGhyZWFkX2luaXQoKSBuZXZlciBoYXBwZW5lZC4KLQotMjAxMC0wMS0yMCAxMDo1ODoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkgIHBsdWdpbmxvYWRlcjogZml4IGNvbXBpbGVyIHdhcm5pbmcgb24gd2luMzIKLQkgIE1vdmUgdmFyaWFibGUgdGhhdCdzIG9ubHkgdXNlZCBvbiB1bml4IGludG8gdGhlIHVuaXggYmxvY2sgc28gdGhhdAotCSAgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgY29tcGxhaW4gYWJvdXQgdGhlIHVudXNlZCB2YXJpYWJsZSBvbiB3aW4zMgotCSAgKHNlZSAjNTk3NjYyKS4KLQotMjAxMC0wMS0yMCAwOTo0NTowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkgIHBsdWdpbmxvYWRlcjogdHJ5IHNjYW5uZXIgc2V0IHZpYSBlbnYgdmFyIGJlZm9yZSB1c2luZyB0aGUgaW5zdGFsbGVkIG9uZQotCSAgSWYgdGhlIEdTVF9QTFVHSU5fU0NBTk5FUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHdlIHNob3VsZCB0cnkKLQkgIHRoZSBzY2FubmVyIHNwZWNpZmllZCB0aGVyZSBmaXJzdCwgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBzY2FubmVyIGJpbmFyeQotCSAgaXMgdXNlZCBmb3IgdW5pbnN0YWxsZWQgc2V0dXBzIGFuZCBidWlsZHMgZnJvbSBzb3VyY2Ugd2hlbiB0aGVyZSdzCi0JICBhbHJlYWR5IGFuIGluc3RhbGxlZCB2ZXJzaW9uLgotCi0yMDEwLTAxLTIwIDA2OjU4OjI4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdC5jOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXIucGMuaW46Ci0JICBidWlsZDogRGVmaW5lIEdfVEhSRUFEU19NQU5EQVRPUlkgZXZlcnl3aGVyZQotCSAgV2UgcmVxdWlyZSB0aHJlYWRzIHRvIGJlIHN1cHBvcnRlZCBpbiBhbnkgY2FzZSBhbmQgZGVmaW5pbmcgdGhpcwotCSAgd2lsbCBzaW1wbGlmeSB0aGUgbXV0ZXgsIGNvbmRpdGlvbiB2YXJpYWJsZSwgZXRjLiBtYWNyb3MgZnJvbSBndGhyZWFkCi0JICB0byBub3QgYWx3YXlzIGNoZWNrIGlmIHRocmVhZHMgYXJlIHJlYWxseSBzdXBwb3J0ZWQuCi0JICBGaXhlcyBidWcgIzYwNzQ4MS4KLQotMjAxMC0wMS0wOCAyMDo1NjoxOCArMDEwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBwbHVnaW5sb2FkZXI6IGRpc2FibGUgZXh0ZXJuYWwgcGx1Z2luIGxvYWRlciBvbiBXaW5kb3dzIHVudGlsIGl0IGlzIHBvcnRlZCBwcm9wZXJseQotCSAgU2VlICM1OTc2NjIuCi0KLTIwMTAtMDEtMjAgMDE6MDk6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JKiBnc3QvcGFyc2UvcGFyc2UubDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgZ3N0X3ByaXZhdGUuaDogbWFrZSBzdXJlIGdzdF9wcml2YXRlLmggaXMgaW5jbHVkZWQgYmVmb3JlIGdsaWIuaAotCSAgRm9yIHRoZSByZWFzb24gb3V0bGluZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBnc3RfcHJpdmF0ZS5oIChpbmxpbmUKLQkgIGZ1bmN0aW9ucyBpbiBnbGliIG1heSBuZWVkIHRoZSBnX2xvZ19kb21haW4gdmFyaWFibGUpLiBBbHNvIGluY2x1ZGUKLQkgIGdzdF9wcml2YXRlLmggYmVmb3JlIHVzaW5nIGFueSBHX09TXyogZGVmaW5lcywgZXNwLiBpbiBwbHVnaW4gbG9hZGVyLgotCi0yMDEwLTAxLTIwIDAxOjMzOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIGRvY3M6IG1pbm9yIGd0ay1kb2MgbWFya3VwIGZpeGVzCi0KLTIwMTAtMDEtMjAgMDA6NTM6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMTRjZWM4OSB0byAxNWQ0N2E2Ci0KLTIwMTAtMDEtMTkgMTY6Mzk6MzggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6Ci0JICBkb2NzOiBzbWFsbCBkb2NzIHVwZGF0ZXMKLQotMjAxMC0wMS0xOSAxNDowNzoyMyArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZ3N0cGFkOiBkaXJlY3RseSBzZXQgdGhlIGNhcHMgd2hlbiBwdXNoaW5nIGJ1ZmZlciB3aXRoIGRpZmZlcmVudCBjYXBzLgotCSAgVGhpcyBjaGVjayBpcyBub3QgbmVjZXNhcnJ5IGFzIHdlIGFyZSBub3QgbmVnb3RpYXRpbmcgYW55bW9yZS4gQW5kIGl0IGNhbgotCSAgYmUgd3JvbmcgaWYgdXBzdHJlYW0gY2FuJ3QgcHJvZHVjZSB0aGlzIGNhcHMgYW55bW9yZSwgYnV0IGRvd25zdHJlYW0gY2FuCi0JICBwcm9jZXNzIHRoZW0gZmluZS4KLQotMjAxMC0wMS0xOCAxMzo1NzoyOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBtaW5pb2JqZWN0OiBUaGUgR1ZhbHVlIGNvbGxlY3Rpb24gZnVuY3Rpb24gY2FuIG5vdCBhc3N1bWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgaW5pdGlhbGl6ZWQKLQkgIC4uLmFuZCBpdCB3aWxsIHVzdWFsbHkgYmUgZWl0aGVyIGZpbGxlZCBieSB6ZXJvZXMgb3IgcmFuZG9tIHZhbHVlcy4KLQkgIEZpeGVzIGJ1ZyAjNjA3MjgzLgotCi0yMDEwLTAxLTE2IDIxOjUyOjA2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBPbmx5IHVzZSBzdWdnZXN0ZWQgY2FwcyBpbiBidWZmZXIgYWxsb2NhdGlvbiBpZiBhIHNpemUgd2FzIHN1Z2dlc3RlZCB0b28KLQotMjAxMC0wMS0xNiAxOTo0MToyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogcmVtb3ZlIHN1cGVyZmx1b3VzIGd1YXJkIGFnYWluc3QgTlVMTAotCSAgQWxsIGNhbGxlcnMgb2YgdGhpcyBzdGF0aWMgZnVuY3Rpb24gYWxyZWFkeSBjaGVjayBmb3IgTlVMTC1uZXNzCi0JICB0aGVtc2VsdmVzLCBzbyBubyBuZWVkIHRvIGRvIGl0IGFnYWluIChhbmQgaWYgd2UgZG8gaXQsIHdlIHNob3VsZAotCSAgcHJvYmFibHkgZG8gc28gYmVmb3JlIGRlcmVmZXJlbmNpbmcgdGhlIHBvaW50ZXIgZm9yIHRoZSBmaXJzdCB0aW1lKS4KLQotMjAwOS0xMi0xNyAxOTo0NTozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiBtaWNyby1vcHRpbWlzZSBzb21lIGdldHRlcnMKLQkgIEF2b2lkIGNoZWNraW5nIHRoZSBHVHlwZSBvZiB0aGUgdmFsdWUgdHdpY2UgKG9uY2Ugb24gb3VyIHNpZGUgYW5kCi0JICBvbmNlIGluIGdfdmFsdWVfZ2V0XyooKSkgYnkgYnktcGFzc2luZyBnX3ZhbHVlX2dldCgpIGFuZCBhY2Nlc3NpbmcKLQkgIHRoZSBHVmFsdWUgc3RydWN0dXJlIGRpcmVjdGx5LgotCi0yMDEwLTAxLTE1IDE4OjM2OjA3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgbWVzc2FnZTogdXBkYXRlIGRvY3MgYSBsaXR0bGUKLQotMjAxMC0wMS0xNSAwMDo0NjoyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JICBkb2NzOiBtaW5vciByZWxlYXNlIGRvY3MgdXBkYXRlCi0KLTIwMTAtMDEtMTQgMjA6MTk6MDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEhhbmRsZSBidWZmZXJzIHdpdGggTlVMTCBjYXBzIGNvcnJlY3RseQotCSAgVGhpcyBtZWFucyB0aGF0IHRoZSBjYXBzIGRpZG4ndCBjaGFuZ2Ugc28gZG9uJ3QgdHJ5IHRvIGhhbmRsZQotCSAgdGhlIE5VTEwgY2FwcyBhcyB0aGUgbmV3IGNhcHMuCi0KLTIwMTAtMDEtMTQgMTA6NDQ6MTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0dXJpLmg6Ci0JICBkb2NzOiBNb3ZlIGZpZWxkIHNwZWNpZmljIFNpbmNlIG1hcmtlcnMgYXQgdGhlIHNhbWUgbGluZQotCSAgRml4ZXMgZ29iamVjdC1pbnRyb3NwZWN0aW9uIHdhcm5pbmdzIGFib3V0IFNpbmNlIGJlaW5nIGRlZmluZWQgbXVsdGlwbGUgdGltZXMuCi0KLTIwMTAtMDEtMTMgMTA6MTc6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2ZhcS9mYXEueG1sOgotCSAgZmFxOiByZW1vdmUgcmV2aXNpb24gaGlzdG9yeSB0aGF0IG5vIG9uZSB1cGRhdGVzIG9yIGNhcmVzIGFib3V0IGFueXdheQotCi0yMDEwLTAxLTEzIDA5OjMyOjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9mYXEvZGV2ZWxvcGluZy54bWw6Ci0JKiBkb2NzL2ZhcS9naXQueG1sOgotCSAgZmFxOiBmaXggbGluayB0byBnc3QtdW5pbnN0YWxsZWQgb24gY2dpdAotCSAgRml4IGxpbmsgdG8gZ3N0LXVuaW5zdGFsbGVkIG5vdyB0aGF0IGl0J3MgYmVlbiBtb3ZlZCwgYW5kIGZpeCBhIHR5cG8KLQkgIHdoaWxlIHdlJ3JlIGF0IGl0LiBBbHNvIGFkZCBhIG5ldyBzZWN0aW9uIHRvICdCdWlsZGluZyBHU3RyZWFtZXIgZnJvbQotCSAgZ2l0JyB0aGF0IHBvaW50cyB0byB0aGUgJ0hvdyBkbyBJIGRldmVsb3AgYWdhaW5zdCBhbiB1bmluc3RhbGxlZCBjb3B5Ci0JICBvZiBHU3RyZWFtZXInIHNlY3Rpb24uCi0KLTIwMTAtMDEtMTMgMTA6MzI6NDYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogUkVBRE1FOgotCSAgZG9jczogd2UncmUgaW4gZ2l0IHNpbmNlIGEgd2hpbGUKLQotMjAxMC0wMS0xMyAxMDozMToyNiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIFJFQURNRToKLQkqIGRvY3MvZmFxL01ha2VmaWxlLmFtOgotCSogZG9jcy9mYXEvZGV2ZWxvcGluZy54bWw6Ci0JKiBkb2NzL2ZhcS9mYXEueG1sOgotCSogc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBzY3JpcHRzOiBtb3ZlIGdzdC11bmluc3RhbGxlZCBmcm9tIGRvY3MvZmFxIHRvIHNjcmlwdHMKLQkgIERvbid0IGluY2x1ZGUgdGhlIGxvbmcgZ3N0LXVuaW5zdGFsbGVkIHNjcmlwdCBpbiB2ZXJiYXRpbSBpbiB0aGUgZmFxIGFueW1vcmUKLQkgICh0aGVyZSBpcyBhIGxpbmsgdG8gY2dpdCkuIERpc3QgdGhlIHNjcmlwdCB1bmRlciBpdHMgbmV3IGxvY2F0aW9uLgotCi0yMDEwLTAxLTEyIDIxOjM0OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeTogYXZvaWQgc29tZSBtb3JlIHVubmVjZXNzYXJ5IG1hbGxvYy9mcmVlcwotCi0yMDEwLTAxLTEyIDIwOjIxOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeTogYXZvaWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJkdXAvZnJlZSB3aGVuIHJlYWRpbmcgdGhlIGJpbmFyeSByZWdpc3RyeQotCSAgU3RyaW5ncyBpbiB0aGUgYmluYXJ5IHJlZ2lzdHJ5IGFyZSBOVUwtdGVybWluYXRlZCwgc28gd2UgY2FuIGp1c3QgdXNlIHRoZW0KLQkgIGRpcmVjdGx5IGlmIHdlIG9ubHkgbmVlZCB0aGVtIHRlbXBvcmFyaWx5LCBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgbWFsbG9jcwotCSAgYW5kIGZyZWVzLgotCi0yMDEwLTAxLTEyIDE3OjM4OjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgdHlwZWZpbmRlbGVtZW50OiB1c2UgbmV3IHR5cGVmaW5kIGZ1bmN0aW9uCi0JICBSZWZhY3RvciBhIGxpdHRsZS4KLQkgIFVzZSB0aGUgbmV3IHR5cGVmaW5kIGhlbHBlciBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIGV4dGVuc2lvbiB0byBzcGVlZCB1cAotCSAgdHlwZWZpbmRpbmcuCi0KLTIwMTAtMDEtMTIgMTc6MzQ6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICB0eXBlZmluZDogYWRkIGEgbmV3IG1ldGhvZCB0aGF0IGFsc28gdXNlcyB0aGUgZmlsZSBleHRlbnNpb24KLQkgIEFkZCBhIG1ldGhvZCB0byBwZXJmb3JtIGdldF9yYW5nZSB0eXBlZmluZGluZyB0aGF0IGFsc28gdXNlcyB0aGUKLQkgIHVyaS9sb2NhdGlvbiBleHRlbnNpb24gYXMgYW4gZXh0cmEgaGludC4gSXQgd2lsbCBmaXJzdCB0cnkgdG8gY2FsbCB0aGUKLQkgIHR5cGVmaW5kIGZ1bmN0aW9ucyBvZiB0aGUgZmFjdG9yaWVzIHRoYXQgaGFuZGxlIHRoZSBnaXZlbiBleHRlbnNpb24uIFRoZSByZXN1bHQKLQkgIGlzIHRoYXQgaW4gdGhlIGNvbW1vbiBjYXNlLCB3ZSBvbmx5IGNhbGwgb25lIHR5cGVmaW5kIGZ1bmN0aW9uLCB3aGljaCBzcGVlZHMgdXAKLQkgIHRoZSB0eXBlZmluZGluZyBhIGxvdC4KLQotMjAxMC0wMS0xMSAxNDo1ODoxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgotCSAgZG9jczogdXBkYXRlIFFvUyBkb2N1bWVlbnQKLQkgIEFkZCBzb21lIGlkZWFzIGFib3V0IGEgbmV3IFFvUyBtZXNzYWdlLgotCSAgU2VlIGFsc28gIzMyMjk0NwotCi0yMDEwLTAxLTExIDExOjM4OjMyICswMTAwICBIw6V2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiBtYWtlIHJlbGVhc2VfcGFkIHRocmVhZHNhZmUKLQkgIFByb3RlY3QgdGhlIC0+cmVtb3ZlZCBmaWVsZCB3aXRoIHRoZSBvYmplY3QgbG9jayBhcyB3ZWxsLiBUYWtlIHRoZSBEWU4gbG9jawotCSAgZWFybGllciBzbyB0aGF0IHdlIGNhbiBtYXJrIHRoZSBwYWQgcmVtb3ZlZCBhbmQgYXZvaWQgYSByYWNlIGluIHBhZF9hbGxvYy4KLQkgIEZpeGVzICM2MDY0MzUKLQotMjAwOS0xMi0xMSAxNzo0Njo0MiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdGJ1cy5oOgotCSAgYnVzOiB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMTAtMDEtMTAgMjE6NDk6MjUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogZGVmZXIgZ2V0dGluZyB0aGUgY2xhc3NlcyB1bnRpbCB3ZSBhY3R1YWx5IG5lZWQgdGhlbQotCSAgVGhpcyBmdW5jdGlvbiBoYXMgYSBsb3Qgb2YgZWFybHkgcmV0dXJucy4gR2l2ZSB0aGVtIHNvZW0gbW9yZSBiZW5lZml0LgotCi0yMDEwLTAxLTEwIDIxOjQwOjI0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IGF2b2lkIGV4dHJhIGhvcCBpbiBnc3RfZWxlbWVudF9saW5rCi0JICBObyBuZWVkIHRvIGNhbGwgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkIHdpdGggZmlsdGVyPU5VTEwsIHdoaWNoIHdvdWxkCi0JICBjYWxsIGdzdF9lbGVtZW50X2xpbmtfcGFkcygpIGluIHRoYXQgd2F5LiBDYWxsIGl0IGRpcmVjdGx5IHRvIHNhdmUgYSBjYWxsIGFuZAotCSAgZXhwZW5zaXZlIGdvYmplY3QgdHlwZSBjaGVja3MuCi0KLTIwMTAtMDEtMTAgMTc6Mzk6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgY2hlY2s6IHJlbW92ZSBzb21lIGNydWZ0IGZyb20gaGVhZGVyIGZpbGUKLQkgIFJlbW92ZSBzb21lIGNydWZ0IGZyb20gdGhlIGdzdGNoZWNrIGhlYWRlciBmaWxlIHRoYXQncyBub3QgbmVlZGVkCi0JICBhbnkgbG9uZ2VyIG5vdyB0aGF0IHdlIHNoaXAgd2l0aCBvdXIgb3duIGNvcHkgb2YgbGliY2hlY2suCi0KLTIwMTAtMDEtMDcgMTc6NDE6MjYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wd2cvYWR2YW5jZWQtbWlkaS54bWw6Ci0JKiBkb2NzL3B3Zy9wd2cueG1sOgotCSAgcHdnOiByZW1vdmUgZW1wdHkgbWlkaSBzZWN0aW9uCi0KLTIwMTAtMDEtMDcgMTM6NDg6MjQgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIHNzaDovL2dpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L2dzdHJlYW1lci9nc3RyZWFtZXIKLQotMjAxMC0wMS0wNyAxMzo0Nzo1MCArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDxjaHJpc3RpYW4uc2NoYWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIFVwZGF0ZSBzcGVjIGZpbGUKLQotMjAxMC0wMS0wNiAyMDowODo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIGZvciBuZXcgdHJhbnNsYXRlZCBzdHJpbmdzCi0KLTIwMTAtMDEtMDYgMjA6MDY6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgZG9jczogbWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcyBmb3IgcmVjZW50bHktYWRkZWQgdGFncwotCSAgTWVudGlvbiB0aGUgdHlwZSBvZiB0aGUgdGFnIGluIHRoZSBndGstZG9jIGJsdXJiLCBzbyBwZW9wbGUga25vdwotCSAgd2hpY2ggYWNjZXNzb3IgQVBJIHRvIHVzZSwgYW5kIGZpeCB1cCB0aGUgZG9jIGJsdXJicyB0byBtYXRjaCB0aGUKLQkgIGFjdHVhbCB0YWcgZGVmaW5lLgotCi0yMDEwLTAxLTA2IDIwOjA0OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIHRhZ3M6IGZpeCB1cCB0cmFuc2xhdGVkIHN0cmluZ3MgZm9yIHNvbWUgbmV3IHRhZ3MKLQkgIEZpeCB1cCB0cmFuc2xhdGVkIHN0cmluZ3MgZm9yIHNvbWUgcmVjZW50bHktYWRkZWQgdGFncyB0byBtYXRjaCB0aGUKLQkgIGV4aXN0aW5nIHN0cmluZ3M6IHdlIHdhbnQgc2hvcnQgbW5lbW9uaWMtbGlrZSBzdHJpbmdzIGhlcmUgdGhhdCBzdGFydAotCSAgd2l0aCBhIGxvd2VyIGNhc2UgbGV0dGVyLgotCi0yMDEwLTAxLTA2IDE5OjE5OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICByZWdpc3RyeTogZGVwcmVjYXRlIHVzZWxlc3MgZ3N0X3JlZ2lzdHJ5X3htbF97cmVhZHx3cml0ZX1fY2FjaGUoKQotCSAgVGhlIG9ubHkgcmVhc29uIHRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHN0aWxsIGFyb3VuZCBpcyB0aGF0IGF0IHNvbWUKLQkgIHBvaW50IGluIHRoZSBwYXN0IHRoZXkgd2VyZSBpbiBhIHB1YmxpYyBoZWFkZXIsIHNvIHdlIGNhbid0IHJlYWxseQotCSAgcmVtb3ZlIHRoZW0gbm93IGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiBwcml2YXRlIGFsbCBhbG9uZwotCSAgKGFuZCBhcmVuJ3QgcmVhbGx5IHBhcnRpY3VsYXJseSB1c2VmdWwpLiBTaW5jZSB0aGVzZSBhcmUganVzdCBlbXB0eQotCSAgc3R1YnMgbm93IHRoYXQgZG8gbm90aGluZyBidXQgcmV0dXJuIEZBTFNFIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KLQkgIDAuMTEgYW55d2F5LCB3ZSBtYXkganVzdCBhcyB3ZWxsIGRlcHJlY2F0ZSB0aGVtIGZvcm1hbGx5LgotCi0yMDEwLTAxLTA2IDE5OjE4OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2twb29sLmM6Ci0JKiBnc3QvZ3N0dGFza3Bvb2wuaDoKLQkgIGRvY3M6IGFkZCBTaW5jZSBtYXJrZXJzIHRvIHRhc2sgcG9vbCBkb2NzIGFuZCBkb2N1bWVudCB0YXNrIGZ1bmN0aW9uCi0KLTIwMTAtMDEtMDYgMTg6NTA6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IG1vdmUgU0hBVkVfSU5JVCBiZWhpbmQgYWxsIGNoZWNrcwotCSAgTW92ZSBTSEFWRV9JTklUIGJlaGluZCBhbGwgb3RoZXIgY2hlY2tzLCBpbiBwYXJ0aWN1bGFyIEFHX0dTVF9DSEVDS19DSEVDS1MuCi0JICBUaGlzIHNob3VsZCBmaXggcHJvYmxlbXMgd2l0aCBoZWFkZXIgY2hlY2tpbmcgYW5kIGNoZWNraW5nIGZvciBsb2NhbHRpbWVfciwKLQkgIHdoaWNoIGNhdXNlcyBjb21waWxhdGlvbiBlcnJvcnMgd2l0aCBjbGVhbiBjaGVja291dHMgd2hlcmUgY29tbW9uL3NoYXZlIGhhcwotCSAgbm90IGJlZW4gY3JlYXRlZCB5ZXQgd2hlbiB0aG9zZSBjaGVja3MgYXJlIHJ1bi4gSXQgc2VlbXMgbGlrZSBTSEFWRV9JTklUCi0JICBjaGFuZ2VzIHRoZSBlbnZpcm9ubWVudCBzbyB0aGF0IGNoZWNrcyBkZXBlbmRpbmcgb24gYSBjb21waWxlciBuZWVkIHNoYXZlCi0JICB0byBleGlzdCBhdCB0aGF0IHBvaW50LCB3aGljaCB3aWxsIGZhaWwgaWYgQUNfT1VUUFVUIGhhc24ndCBjcmVhdGVkIGl0IHlldC4KLQkgIEZpeGVzICM2MDU5MzAuCi0KLTIwMTAtMDEtMDUgMDE6MzU6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5jOgotCSAgY2hlY2s6IHBhdGNoIGludGVybmFsIGNoZWNrIGNvcHkgc29tZSBtb3JlIHNvIHRoYXQgZmFpbHVyZXMgYWN0dWFsbHkgZmFpbAotCSAgSW5jbHVkZSB1bmlzdGQuaCBzbyB0aGF0IF9QT1NJWF9WRVJTSU9OIGlzIGFjdHVhbGx5IGRlZmluZWQgd2hlbgotCSAgaXQgc2hvdWxkIGJlIGRlZmluZWQuIFdpdGhvdXQgdGhhdCwgc3R1ZmYgbGlrZSBmYWlsX2lmKDEpIGRvZXNuJ3QKLQkgIGFjdHVhbGx5IGZhaWwsIHByZXN1bWFibHkgYmVjYXVzZSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSBkbyBpbmNsdWRlCi0JICB1bmlzdGQuaCBhbmQgdGhlbiBoYXZlIF9QT1NJWF9WRVJTSU9OIGRlZmluZWQuCi0JICBGaXhlcyAjNjA0NTY1IGV2ZW4gbW9yZS4KLQotMjAxMC0wMS0wNSAwMDowOToxMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGRvY3M6IGFkZCBtaXNzaW5nIHJldHVybnM6IHRhZwotCi0yMDA5LTEyLTMwIDIyOjU2OjU3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBzZXQgaXRlcmF0ZV9pbnRlcmFsX2xpbmtzIGZ1bmN0aW9uIG9uIHNvdXJjZSBwYWQKLQotMjAwOS0xMi0yNyAxOTozMzoyNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYnVmZmVyOiByZW1vdmUgdW5uZWVkZWQgY2FzdHMKLQotMjAwOS0xMi0wMiAxOTo0Nzo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgYnVmZmVyOiByZW1vdmUgc3ViYnVmZmVyIHN1YmNsYXNzCi0JICBNb3ZlIHRoZSBwYXJlbnQgYnVmZmVyIHBvaW50ZXIgaW50byB0aGUgR3N0QnVmZmVyIHN0cnVjdCBzbyB0aGF0IHdlIGNhbgotCSAgcmVtb3ZlIHRoZSBzdWJidWZmZXIgY2xhc3MgYW5kIHR5cGUuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8KLQkgIG1vcmUgbmF0dXJhbGx5IGltcGxlbWVudCBtZXRob2RzIHRvIGdldCB0aGUgcmVhbCB0eXBlIGFuZCBwYXJlbnQKLQkgIG9mIGEgc3ViYnVmZmVyIChTZWUgIzU0NTUwMSkuCi0JICBJdCBzaG91bGQgYWxzbyBiZSBzbGlnaHRseSBmYXN0ZXIgYmVjYXVzZSB0aGVyZSBpcyBubyBleHRyYSBvYmplY3QgaGllcmFyY2h5IHRvCi0JICBpbml0aWFsaXplIGFuZCBmcmVlLgotCi0yMDA5LTEyLTI0IDE5OjI1OjUyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogZG9uJ3Qga2VlcCBidWZmZXJzIHJlZmZlZCBsb25nZXIgdGhhbiBuZWVkZWQKLQkgIE1ha2Ugc3VyZSB3ZSB0YWtlIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyIGVhcmx5IHdpdGhvdXQgaW5jcmVhc2luZyBpdHMgcmVmY291bnQKLQkgIHdoZW4gd2UgZ28gaW4gdGhlIGNvbGxlY3QgZnVuY3Rpb24uIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIGNvcGllcyBuZWVkZWQgaW4KLQkgIG9yZGVyIHRvIG1ha2UgdGhlIGJ1ZmZlciB3cml0YWJsZSBpbiBtb3N0IGNhc2VzLgotCi0yMDA5LTEyLTI0IDE3OjIyOjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgbWluaW9iamVjdDogYXZvaWQgdW5uZWVkZWQgY2FzdHMKLQotMjAwOS0xMi0yNCAxNjo1MzoxNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IGF2b2lkIGRvaW5nIHN1YmJ1ZmZlcnMgd2hlbiB3ZSBjYW4KLQkgIEluIHNvbWUgY2FzZXMgd2UgY2FuIGF2b2lkIGFsbG9jYXRpbmcgYSBzdWJidWZmZXIgYW5kIGluc3RlYWQgc2ltcGx5IHJlZgotCSAgdGhlIGJ1ZmZlci4gQ2FsbGVycyBzaG91bGQgcGVyZm9ybSBfbWFrZV9tZXRhZGF0YV93cml0YWJsZSgpIGluIGFsbAotCSAgY2FzZXMgbm93LgotCi0yMDA5LTEyLTI0IDE1OjI1OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgY29sbGVjdHBhZHM6IGFkZCBhYmlsaXR5IHRvIGluc3RhbGwgY2xpcHBpbmcgZnVuY3Rpb25zCi0JICBBZGQgYSBtZXRob2QgdG8gaW5zdGFsbCBhIGNsaXBwaW5nIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBidWZmZXIgaXMKLQkgIHJlY2VpdmVkLiBVc2VycyBvZiBjb2xsZWN0cGFkcyBjYW4gdGhlbiBwZXJmb3JtIGNsaXBwaW5nIG9uIHRoZSBpbmNvbW1pbmcKLQkgIGJ1ZmZlcnMuCi0JICBBbHNvIHJldGFiIHRoZSBoZWFkZXIgZmlsZSBhIGxpdHRsZS4KLQkgIFNlZSAjNTkwMjY1Ci0KLTIwMDktMTItMjQgMTU6MTM6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWJ1ZmZlcjIudHh0OgotCSAgZG9jczogYWRkIHNvbWUgbW9yZSBidWZmZXIyIGlkZWFzCi0KLTIwMDktMTItMjQgMTQ6NDA6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBhdm9pZCBzb21lIG1vcmUgdHlwZSBjaGVja3MKLQotMjAwOS0xMi0yNCAxNDoyMjo1MiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBwaXBlbGluZTogYXZvaWQgc29tZSB0eXBlIGNoZWNrcwotCSAgQXZvaWQgdHlwZSBjaGVja3Mgd2hlbiB3ZSBjYW4KLQkgIERvbid0IG5lZWQgdG8gcGVlayB0aGUgcGFyZW50X2NsYXNzLCB0aGUgYm9pbGVycGxhdGUgZG9lcyB0aGF0IGZvciB1cy4KLQotMjAwOS0xMi0yMyAyMTozOToyMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgbGF1bmNoOiBhbHNvIHByaW50IGxlYWtlZCBvYmplY3RzCi0JICBNYWtlIHRoZSAtVCBvcHRpb24gYWxzbyBwcmludCB0aGUgbGVha2VkIG9iamVjdHMKLQotMjAwOS0xMi0yMyAyMTozNzo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JICB0cmFjZTogaW5jbHVkZSB0eXBlIG5hbWUgaW4gbGVha2VkIG9iamVjdHMKLQkgIFdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBhIEdPYmplY3QsIHByaW50IHRoZSB0eXBlIG5hbWUgYWxvbmcgd2l0aAotCSAgdGhlIHBvaW50ZXIgZm9yIGVhc2llciBkZWJ1Z2dpbmcuCi0KLTIwMDktMTItMjMgMjE6MjA6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHBhZDogRml4IHByb2JsZW0gd2l0aCBkZXN0cm95IGNhbGxiYWNrIG5vdCBiZWluZyBjYWxsZWQKLQkgIFdoZW4gd2UgdW5ibG9jayBhIHBhZCB3aXRoIHRoZSBzYW1lIHVzZXJfZGF0YSwgdGhlIGRlc3Ryb3kgY2FsbGJhY2sgaXMgbm90Ci0JICBjYWxsZWQuIFRoaXMgbGVhZHMgdG8gcmVmY291bnRpbmcgbGVha3MgdGhhdCBjYW5ub3QgYmUgYXZvaWRlZC4gSW5zdGVhZCBhbHdheXMKLQkgIGNhbGwgdGhlIGRlc3Ryb3kgbm90aWZ5IHdoZW5ldmVyIHdlIGluc3RhbGwgYSBuZXcgcGFkIGJsb2NrLgotCSAgSW4gcGFydGljdWxhciwgdGhpcyBmaXhlcyBhIG5hc3R5IHBhZCBsZWFrIGluIGRlY29kZWJpbjIuCi0JICBBbHNvIHVwZGF0ZSB0aGUgdW5pdCB0ZXN0IHRvIGhhdmUgbW9yZSBhY2N1cmF0ZSBjb21tZW50cyBhbmQgdGVzdCB0aGUgcmVxdWlyZWQKLQkgIGJlaGF2aW91ci4KLQotMjAwOS0xMi0yMiAyMjo1MjowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogc21hbGwgY2xlYW51cHMsIHVzZSBzb21lIEdfTElLRUxZCi0KLTIwMDktMTItMjIgMTU6Mjk6MjYgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogRG9uJ3QgY3Jhc2ggaWYgdGhlcmUgaXMgbm8gc291cmNlIHBhZAotCi0yMDA5LTEyLTIxIDE5OjExOjQ1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDQ3Y2IyM2EgdG8gMTRjZWM4OQotCi0yMDA5LTEyLTIxIDExOjU4OjEyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgZ3N0dGFnbGlzdDogQWRkcyBuZXcgdGFncwotCSAgQWRkcyB0aGUgZm9sbG93aW5nIG5ldyB0YWdzOgotCSAgR1NUX1RBR19TSE9XX05BTUUKLQkgIEdTVF9UQUdfU0hPV19TT1JUTkFNRQotCSAgR1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSCi0JICBHU1RfVEFHX1NIT1dfU0VBU09OX05VTUJFUgotCSAgR1NUX1RBR19MWVJJQ1MKLQkgIEdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUUKLQkgIEdTVF9UQUdfR1JPVVBJTkcKLQkgIEZpeGVzICM1OTk3NTkKLQotMjAwOS0xMi0xOSAxNDoyNzowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogYWx3YXlzIGNhbGwgb3VyIGNoZWNrIGNoZWNrcyBmb3IgdGhlIFNVQlVOSVQgY29uZGl0aW9uYWwKLQkgIFRoZSBTVUJVTklUIGNvbmRpdGlvbmFsIG5lZWRzIHRvIGJlIHNldCBldmVuIGlmIGNoZWNrIGlzIGRpc2FibGVkLiBBbHNvCi0JICByZW1vdmUgYSBGSVhNRSB0aGF0IGlzIG5vdCBuZWVkZWQgYW55IGxvbmdlciAvIGFmdGVyIGFsbC4KLQotMjAwOS0xMi0xOCAyMToyODozNSArMDAwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbGlzdC5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5jOgotCSAgY2hlY2s6IHBhdGNoIGludGVybmFsIGNoZWNrIGNvcHkgc28gaXQgd29ya3Mgd2l0aCBvdXIgYnVpbGQgc3lzdGVtCi0JICBGaXhlcyAjNjA0NTY1LgotCi0yMDA5LTEyLTE4IDIxOjI2OjAxICswMDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogY2hlY2stY2hlY2tzLm00OgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlLmFtOgotCSAgY2hlY2s6IHVwZGF0ZSBhdXRvdG9vbHMgYW5kIGRvY3Mgc3R1ZmYgZm9yIG5ldyBjaGVjayB2ZXJzaW9uCi0KLTIwMDktMTItMTcgMjA6MDk6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjaGVjay1jaGVja3MubTQ6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaC5pbjoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2Vycm9yLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19pbXBsLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xvZy5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbXNnLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wYWNrLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wcmludC5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19zdHIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5oOgotCSAgY2hlY2s6IHVwZGF0ZSBpbnRlcm5hbCBsaWJjaGVjayB0byAwLjkuOAotCi0yMDA5LTEyLTE1IDE4OjU1OjM4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiBwcmludGYgZm9ybWF0IGZpeGVzCi0KLTIwMDktMTItMTQgMTY6MjI6MTYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkgIGRvY3M6IGxpbmsgYnVzIGFuZCB0YXNrcwotCSAgQWRkIGEgbGluayBmcm9tIGJ1cyBzZWN0aW9uIGRvY3MgdG8gdGhlIHRhc2sgZG9jcy4gQWRkIGEgcGFyYWdyYXBoIHRvIHRhc2sgZG9jcwotCSAgdG8gdGVsbCBhYm91dCBtZXNzYWdlcyBhbmQgdGhlIGJ1cy4KLQotMjAwOS0xMi0xNCAxNToxMTo0MiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGRvY3M6IGFkZCBtb3JlIGRvY3MgYXJvdW5kIEdzdFN0YXRlIGFuZCBHc3RTdGF0ZUNoYW5nZQotCSAgVGFrZSByZXZpZXdlZCBkb2NzIGZyb20gZG9jcy9kZXNpZ24vcGFydC1zdGF0ZSB0byBoYXZlIHRoYXQgbW9yZSBwcm9taW5lbnQKLQkgIGluc2lkZSB0aGUgYXBpIGRvY3MuIEFkZCBhIGZldyBzZW50ZW5jZXMgdG8gbGluayB0aGluZ3MgYmV0dGVyIHRvZ2V0aGVyLgotCi0yMDA5LTEyLTE0IDE1OjExOjE0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgIGRvY3M6IHJldmlldyBhbmQgZml4IHNwZWxsaW5nCi0KLTIwMDktMTItMTQgMTE6MDU6NDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBnc3RlbGVtZW50ZmFjdG9yeTogc2V0IG9iamVjdCBuYW1lIGVhcmxpZXIgaWYgYXBwbGljYWJsZQotCSAgU2V0dGluZyBhbiBvYmplY3QgbmFtZSBpcyBuaWNlIGZvciBwcm9wZXIgZGVidWcgbG9nZ2luZy4gSWRlYWxseSB0aGlzIHdvdWxkCi0JICBzdGlsbCBoYXBwZW5zIGVhcmxpZXIgKC5lLmcgd2hlbiBwYWRzIGFyZSBhZGRlZCB0byBhbiBlbGVtZW50LCBpdHMgbm90IHlldCBzZXQpLgotCi0yMDA5LTEyLTE0IDExOjA3OjI1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGdzdG9iamVjdDogYWRkIGZpeG1lLTAuMTEgY29tbWVudAotCi0yMDA5LTEyLTA4IDExOjMwOjM5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGNvbW1lbnQ6IHNtYWxsIGNvbW1lbnQgY29ycmVjdGlvbgotCi0yMDA5LTEyLTExIDE2OjI2OjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IG5ldmVyIHNraXAgYSBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORwotCSAgTmV2ZXIgc2tpcCB0aGUgc3RhdGUgY2hhbmdlIHRvIHBsYXlpbmcsIGV2ZW4gaWYgdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBpbiB0aGUKLQkgIHJpZ2h0IHN0YXRlLiBXZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBhbHNvIGRpc3RyaWJ1dGUgdGhlIGJhc2VfdGltZSB3aGlsZSBkb2luZwotCSAgdGhlIHN0YXRlIGNoYW5nZSBhbmQgc2tpcHBpbmcgdGhpcyBzdGVwIHdvdWxkIGxlYXZlIHNvbWUgZWxlbWVudHMgd2l0aG91dCBhIG5ldwotCSAgYmFzZV90aW1lLgotCSAgRml4ZXMgIzYwMDMxMwotCi0yMDA5LTEyLTExIDE2OjE5OjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogYWRkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcKLQotMjAwOS0xMi0wOCAxNzoyMTo0NyArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiByZWxlYXNlIHBhZHMgaW4gZGlzcG9zZQotCSAgTWFrZSBzdXJlIHRvIHJlbGVhc2UgYWxsIHJlcXVlc3QtcGFkcyBpbiB0aGUgZGlzcG9zZS1tZXRob2QsIGluIGNhc2Ugb2YgYQotCSAgc2h1dGRvd24tcmFjZSwgd2hlcmUgYSBwYWQtYWxsb2MgaXMgYWJvdXQgdG8gaGFwcGVuLgotCSAgRml4ZXMgIzYwNDA5MQotCi0yMDA5LTEyLTA5IDEzOjI3OjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogdXNlIE5VTEwgaW5zdGVhZCBvZiAwIGZvciBwb2ludGVycwotCi0yMDA5LTEyLTA5IDA3OjI1OjMxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6Ci0JKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSAgdG9vbHM6IE1vdmUgZ3N0X3Rvb2xzX3ByaW50X3ZlcnNpb24oKSBmb3IgdGhlIHJlbWFpbmluZyB0b29scwotCi0yMDA5LTEyLTAzIDEyOjMxOjE5ICswMTAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IE1vdmUgZ3N0X3Rvb2xzX3ByaW50X3ZlcnNpb24gY2FsbCB0byBhdm9pZCB3YXJuaW5nIGZyb20gbmV3IEdMaWIuCi0JICBnX3NldHByZ25hbWUgaXMgaW1wbGljaXRseSBjYWxsZWQgYnkgZ19vcHRpb25fY29udGV4dF9uZXcoKSB3aXRoIGEgY2hlY2sKLQkgIHRvIHNlZSBpZiBpdCdzIGJlZW4gc2V0IGFscmVhZHkuCi0JICBGaXhlcyBidWcgIzYwNDA5My4KLQotMjAwOS0xMi0wOCAxNjo0MDo1NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IEZpeCBwcm94eV9zZXRjYXBzIHRvIG9ubHkgaXRlcmF0ZSBwYWRzIG9mIG90aGVyIGRpcmVjdGlvbgotCi0yMDA5LTEyLTA4IDE2OjIxOjQxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBmaXggcHJveHlfZ2V0Y2FwcwotCSAgTWFrZSBpdCByZXR1cm4gdGhlIHBhZHRlbXBsYXRlIGNhcHMgb24gZXJyb3JzIGFuZCBubyBwYXJlbnQuCi0JICBPbmx5IGludGVyc2VjdCBwYWRzIG9mIHRoZSBvcG9zaXRlIGRpcmVjdGlvbiBvZiB0aGUgc291cmNlIHBhZC4KLQotMjAwOS0xMi0wOCAxNjoxNDoyOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IFJlbmFtZSBwcm94eSBpdGVyYXRvciBmb2xkIGZ1bmN0aW9ucyB0byBoYXZlIGEgbW9yZSBtZWFuaW5nZnVsIG5hbWUKLQotMjAwOS0xMi0wOCAxNjowOTowMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IElmIG9uZSBpbnRlcnNlY3Rpb24gZ2F2ZSBlbXB0eSBjYXBzIGRvbid0IGNvbnRpbnVlIGl0ZXJhdGluZyBvdmVyIHRoZSBvdGhlciBwYWRzCi0KLTIwMDktMTItMDggMTU6MjQ6NDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogQWxsb3cgdXBkYXRlIE5FV1NFR01FTlQgZXZlbnRzIGFmdGVyIEVPUwotCSAgVGhpcyBhbGxvd3MgZGVtdXhlcnMgdG8gdXBkYXRlIHRoZSBzZWdtZW50IHN0b3Agb2YgYW4gYWxyZWFkeQotCSAgZmluaXNoZWQgc3RyZWFtLiBUaGlzIG1pZ2h0IGJlIG5lZWRlZCBpZiBzb21lIHN0cmVhbSBnb2VzIHRvCi0JICBFT1MgYmVmb3JlIHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9uZ2VzdCBzdHJlYW0gaXMga25vd24gdG8gcHJvcGVybHkKLQkgIHNldCB0aGUgc2VnbWVudCBzdG9wIG9mIGFsbCBzdHJlYW1zIHRvIHRoZSBzYW1lIHZhbHVlIGluIHRoZSBlbmQuCi0KLTIwMDktMTItMDcgMjA6NTI6MjIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIFVzZSBwbGFpbiBjYXN0aW5nIGluc3RlYWQgb2YgdHlwZWNoZWNraW5nCi0KLTIwMDktMTItMDcgMDk6NDU6MDAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IFVzZSBmYXN0IGdzdF92YWx1ZV9saXN0X3tzaXplfGdldF92YWx1ZX0gbWFjcm8gYWNjZXNzb3JzCi0JICBnc3RfdmFsdWVfbGlzdF9zaXplIGFuZCBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgd2lsbCBkbyBhIHNlcmllcyBvZgotCSAgZXh0cmEgY2hlY2tzIGR1ZSB0byBiZWluZyBwdWJsaWMgbWV0aG9kcy4KLQkgIFdoZW4gd2UgdXNlIHRoZW0gZnJvbSB3aXRoaW4gZ3N0dmFsdWUuYyB3ZSBjYW4gZGlyZWN0bHkgdXNlIHRoZW0gd2l0aG91dAotCSAgdGhlIGV4dHJhIGNoZWNrcy4KLQotMjAwOS0xMi0wNyAwOTo0NDowNiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSAgZ3N0dXJpOiBEb24ndCB1c2UgZ19zaWduYWxfZW1pdF9ieV9uYW1lLCB1c2UgdGhlIHNpZ25hbCBJRCBkaXJlY3RseQotCi0yMDA5LTExLTE4IDA5OjAxOjM1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKLQkgIHRlZTogYXZvaWQgZXhwZW5zaXZlIHR5cGVjaGVja3MsIGFuZCBhdm9pZCBnZXR0aW5nIHJlZiB0byBwYXJlbnQuCi0JICBTcGVlZHMgdXAgdGVlIHByb2Nlc3NpbmcgMiB0byA1IHRpbWVzLgotCi0yMDA5LTExLTEyIDA5OjA3OjAzICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBnc3RvYmplY3Q6IEF2b2lkIGRvdWJsZSBzdHJkdXAgd2hlbiBzZXR0aW5nIE5VTEwgbmFtZXMuCi0JICBJbnN0ZWFkIG9mIGNoYWluaW5nIHVwIHRvIGdzdF9vYmplY3Rfc2V0X25hbWUgKHdoaWNoIGRvZXMgdHlwZWNoZWNraW5nCi0JICBhbmQgc3RyZHVwJ3MgdGhlIG5hbWUgYWdhaW4pLCBqdXN0IHVzZSB0aGUgYWxyZWFkeSBhbGxvY2F0ZWQgbmV3Ci0JICBuYW1lLgotCi0yMDA5LTEyLTA0IDEyOjE2OjMyIC0wODAwICBQZXRlciB2YW4gSGFyZGVuYmVyZyA8cHZoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLXByb3BzLnhtbDoKLQkgIHB3ZzogbWFrZSB0aGUgZW51bSBleGFtcGxlIChiYXNlZCBvbiB2aWRlb3Rlc3RzcmMpIGFjdHVhbGx5IG1hdGNoIHZpZGVvdGVzdHNyYwotCi0yMDA5LTEyLTA0IDE2OjI4OjI3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBJZ25vcmUgc3RhdGUgY2hhbmdlIGZhaWx1cmVzIGZyb20gY2hpbGRyZW4gdGhhdCB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgYmluIGFscmVhZHkKLQkgIEZpeGVzIGJ1ZyAjNTg0NDQxLgotCi0yMDA5LTEyLTA0IDE1OjAwOjQ0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICByZWdpc3RyeTogVXNlIEdNYXBwZWRGaWxlIGZvciByZWFkaW5nIHRoZSByZWdpc3RyeQotCSAgRml4ZXMgYnVnICM2MDM3ODcuCi0KLTIwMDktMTItMDMgMTk6NDg6MTEgKzAxMDAgIEphdmllciBKYXJkw7NuIDxqamFyZG9uQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICByZWdpc3RyeTogU3Vic3RpdHV0ZSBkZXByZWNhdGVkIEdMaWIgc3ltYm9sOiBnX21hcHBlZF9maWxlX2ZyZWUKLQkgIFVzZSBnX21hcHBlZF9maWxlX3VucmVmIGlmIEdsaWIgPj0gMi4yMiBpcyBhdmFpbGFibGUKLQkgIEZpeGVzIGJ1ZyAjNTYwNDQyLgotCi0yMDA5LTExLTI3IDIwOjE2OjE1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogU2h1dCBkb3duIHRoZSBwYWQgdGFzayB3aGVuIHRoZSBpbml0aWFsIHNlZWsgZmFpbHMuCi0JICBTZXQgdGhlIHBhZCBmbHVzaGluZyBhbmQgc3RvcCB0aGUgcGFkIHRhc2sgd2hlbiB0aGUgaW5pdGlhbCBzZWVrIGZhaWxzCi0JICBkdXJpbmcgYWN0aXZhdGlvbi4gQXZvaWRzIHJhY3kgY2FsbHMgaW50byB0aGUgX2NyZWF0ZSgpIGZ1bmN0aW9uIHdoZW4KLQkgIEJhc2VTcmM6OnN0b3AoKSBoYXMgYWxyZWFkeSBydW4uCi0JICBGaXhlczogIzYwMzA1OQotCSAgQWxzbywgZml4IHNvbWUgbWlzc3BlbGxlZCBjb21tZW50cy4KLQotMjAwOS0xMi0wMyAyMDo1NTozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIC5wbyBmaWxlcyBhZnRlciBzdHJpbmcgY2hhbmdlcwotCSAgKFRoZSBxdWV1ZTIgc3RyaW5ncyBjb3VsZCB1c2Ugc29tZSB0aWR5aW5nIHVwKQotCi0yMDA5LTEyLTAzIDIwOjUzOjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc2luaywgZmlsZXNyYzogcHJpbnRmIGZvcm1hdCBmaXhlcwotCSAgZ3N0ZmlsZXNpbmsuYzozOTk6IGVycm9yOiBmb3JtYXQg4oCYJWTigJkgZXhwZWN0cyB0eXBlIOKAmGludOKAmSwgYnV0IGFyZ3VtZW50IDggaGFzIHR5cGUg4oCYc2l6ZV904oCZCi0JICBnc3RmaWxlc2luay5jOjM5OTogZXJyb3I6IGZvcm1hdCDigJglZOKAmSBleHBlY3RzIHR5cGUg4oCYaW504oCZLCBidXQgYXJndW1lbnQgOSBoYXMgdHlwZSDigJhnc2l6ZeKAmQotCSAgZ3N0ZmlsZXNyYy5jOjU4ODogZXJyb3I6IGZvcm1hdCDigJglMDhsbHjigJkgZXhwZWN0cyB0eXBlIOKAmGxvbmcgbG9uZyB1bnNpZ25lZCBpbnTigJksIGJ1dCBhcmd1bWVudCA4IGhhcyB0eXBlIOKAmG9mZl904oCZCi0KLTIwMDktMTItMDMgMTY6NDQ6MjggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogYWRkIHNwZWNpYWwgY2FzZSBmb3Igb25seSBvbmUgcGFkIGNvbmVjdGVkCi0JICBJdCBpcyBub3QgZWFzeSB0byBzZXR1cCBhIHRlZSBvbiB0aGUgZmx5LCB0aHVzIGFwcHMgbmVlZCB0byBhZGQgdGhlbSBhbHdheXMgaWYKLQkgIHRoZXkgbWlnaHQgbmVlZCB0aGVtLiBUaGlzIGNoYW5nZXMgdGhlIGNvZGUgc28sIHRoYXQgaWYgb25seSBvbmUgc3JjLXBhZCBpcwotCSAgYWN0aXZlLCB3ZSBwdXNoIGJ1ZmZlcnMgZGlyZWN0bHkuIEluIHRoZSBub3JtYWwgY29kZSBwYXRoIGFsbCBidWZmZXJzIGFyZSBwdXNoZWQKLQkgIHdpdGggYW4gZXh0cmEgcmVmLCB0aGF0IGZvcmNlcyBmb2xsb3d1cCBpbnBsYWNlIGVsZW1lbnRzIHRvIGNvcHkgdGhlIGRhdGEuCi0KLTIwMDktMTItMDMgMTY6MTE6NTkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogb25seSBtZXNzYWdlIG9uY2UgcGVyIHJlY2VpdmVkIGJ1ZmZlcgotCSAgQXZvaWRzIGNoZWNraW5nIGZvciBlYWNoIHNvdXJjZSBwYWQuIFRoZSBtZXNzYWdlcyB3b3VsZCBiZSBhbG1vc3QgaWRlbnRpY2FsCi0JICBhbnl3YXkuCi0KLTIwMDktMTItMDMgMTU6Mjc6MjEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9yYW5kb20vZW5zb25pYy9kcmFmdC1yZWdpc3RyeS1jaGFuZ2UtaG9va3MudHh0OgotCSAgZHJhZnRzOiBwbGFubmluZwotCi0yMDA5LTEyLTAzIDE2OjA1OjAzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgotCSAgdGVlOiByZW1vdmUgdW51c2VkIG9mZnNldCBtZW1iZXIKLQotMjAwOS0xMi0wMyAxNjowMjozNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiBvbmx5IG5vdGlmeSBhbGxvYy1wYWQgcHJvcGVydHkgaWYgY2hhbmdlZC4KLQotMjAwOS0xMi0wMiAxMzoyOToyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBldmVudDogZml4IGRvY3MgZm9yIF9jb3B5KCkKLQotMjAwOS0xMi0wMSAyMjozNzo1MSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIHRvb2xzOiBGaXggY2hlY2sgZm9yIFdpbmRvd3MKLQotMjAwOS0xMi0wMSAxODowOTowNCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nc3R0cmFjZS5jOgotCSAgTWFrZSBnY2MgaW5saW5lIGFzc2VtYmx5IGNvbmRpdGlvbmFsIG9uIGdjYwotCi0yMDA5LTEyLTAxIDE5OjI5OjI1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogUmVnaXN0ZXIgZGVidWcgZnVuY3B0ciBvbmx5IG9uY2UuCi0JICBNYWtlcyBjcmVhdGluZyBxdWV1ZSBlbGVtZW50cyAzLTQgdGltZXMgZmFzdGVyIGFuZCBhdm9pZHMgY29udGVudGlvbiBvbiB0aGUKLQkgIGdsb2JhbCBmdW5jcHRyIGxvY2suCi0KLTIwMDktMTItMDEgMTk6Mjc6NDcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYy9iYXNlc2luazogUmVnaXN0ZXIgZGVidWcgZnVuY3B0ciBvbmx5IG9uY2UuCi0JICBNYWtlcyBiYXNlc3JjL2Jhc2VzaW5rIGluaXRpYWxpemF0aW9uIDMtNCB0aW1lcyBmYXN0ZXIgYW5kIGF2b2lkcwotCSAgY29udGVudGlvbiBvbiB0aGUgZ2xvYmFsIGZ1bmNwdHIgbG9jawotCi0yMDA5LTEyLTAxIDE3OjU0OjU2ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdzdGdob3N0cGFkOiBSZWdpc3RlciBkZWJ1ZyBmdW5jcHRyIG9ubHkgb25jZS4KLQkgIFRoaXMgbWFrZXMgZ2hvc3RwYWQvcHJveHlwYWQgY3JlYXRpb24gNSB0aW1lcyBmYXN0ZXIgYW5kIGF2b2lkcyBjb250ZW50aW9uCi0JICBvdmVyIHRoZSBnbG9iYWwgZnVuY3B0ciBsb2NrLgotCSAgSSBhbHNvIG1vdmVkIHRoZSB0d28gY2xhc3MgaW5pdCBkb3duIGluIHRoZSBjb2RlIHRvIGF2b2lkIGhhdmluZyB0byBmb3J3YXJkCi0JICBkZWNsYXJlIGFsbCB0aGUgdmFyaW91cyBmdW5jdGlvbnMuCi0KLTIwMDktMTItMDEgMTc6NTQ6MTQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGdzdHBhZDogT25seSByZWdpc3RlciBkZWJ1ZyBmdW5jcHRyIG9uY2UuCi0JICBUaGlzIG1ha2VzIHBhZCBpbml0aWFsaXphdGlvbiAyIHRpbWVzIGZhc3RlciBhbmQgd2l0aG91dCBhbnkgY29udGVudGlvbgotCSAgb3ZlciB0aGUgZGVidWcgZnVuY3B0ciBnbG9iYWwgbG9jay4KLQotMjAwOS0xMi0wMSAxNzo1MzowMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBnc3RpbmZvOiBBUEk6IEFkZCBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiBtZXRob2QuCi0JICBUaGlzIGlzIGEgdmFyaWFudCBvZiBHU1RfREVCVUdfRlVOQ1BUUiB3aGljaCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuCi0KLTIwMDktMTItMDEgMTU6MDU6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gODdiZjQyOCB0byA0N2NiMjNhCi0KLTIwMDktMTItMDEgMTQ6MDg6MjkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IFVzZSBuZXcgQUdfR1NUX1BMQVRGT1JNIG1hY3JvCi0KLTIwMDktMTItMDEgMTQ6MTA6NTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZGE0Yzc1YyB0byA4N2JmNDI4Ci0KLTIwMDktMTEtMjggMjI6Mjk6MjkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBjbGlwIHN0ZXBwaW5nIGJvdW5kYXJpZXMKLQkgIFJvdW5kaW5nIGVycm9ycyB3aXRoIHRoZSBmbG9hdGluZyBwb2ludCByYXRlIGNvdWxkIG1ha2UgaXQgc28gdGhhdCB3ZQotCSAgZG9uJ3QgZW5kIHVwIGV4YWN0bHkgYXQgdGhlIHJlcXVpcmVkIHN0ZXBwaW5nIGR1cmF0aW9uLgotCSAgVXNlIHRoZSBzZWdtZW50IGNsaXBwaW5nIGJvdW5kYXJpZXMsIHdoaWNoIGFyZSBub3Qgc3ViamVjdCB0byByYXRlCi0JICBhZGp1c3RlbWVudHMsIGluc3RlYWQgdG8gZGV0ZWN0IHdoZW4gd2UgcmVhY2hlZCB0aGUgc3RlcHBpbmcgZHVyYXRpb24uCi0JICBBZGQgc29tZSBkZWJ1ZyBpbmZvIHJlbGF0ZWQgdG8gZ29pbmcgdG8gdGhlIFBBVVNFRCBzdGF0ZS4KLQotMjAwOS0xMS0yOCAxNzowMjoxNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6Ci0JICBkb2NzOiBmaXggYW5vdGhlciB0eXBvCi0KLTIwMDktMTEtMjggMTU6NDA6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWw6Ci0JICBkb2NzOiBmaXggdHlwbwotCi0yMDA5LTExLTI3IDE4OjU0OjMzICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNTNhMjQ4NSB0byBkYTRjNzVjCi0KLTIwMDktMTEtMjcgMTM6NDI6MzYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGdzdGV2ZW50OiBmaXggZG9jcwotCSAgRml4IGZsdXNoIHN0b3BzIGRvY3MsIHRob3NlIGFyZSBzZXJpYWxpemVkLCBub3Qgb3V0IG9mIGJvdW5kcy4KLQkgIFByb2JhYmx5IGEgY29weSBhbmQgcGFzdGUgbWlzdGFrZS4KLQotMjAwOS0xMS0yNyAxNjozOTozNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIGRvY3M6IGZpeCBicm9rZW4geHJlZnMKLQotMjAwOS0xMS0yNyAxNjozOTozNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBkb2NzOiBmaXggYnJva2VuIHhyZWZzCi0KLTIwMDktMTEtMjcgMTY6Mzk6MDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkgIGRvY3M6IGFkZCBtaXNzaW5nIHNlY3Rpb24gdG8gbGlicy1kb2NzCi0KLTIwMDktMTEtMjcgMTQ6MTg6MDIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHhtbC5jOgotCSAgZG9jczogbWFrZSBsaW5rcyB3b3JrIChuZWVkcyByZWNlbnQgZ3RrLWRvYykKLQotMjAwOS0xMS0yNyAxNDoxNzozNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICBkb2NzOiBhZGQgbWlzc2luZyBwYXJhbWV0ZXIgZG9jcwotCi0yMDA5LTExLTI3IDE0OjE2OjU0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICBkb2NzOiBlbmFibGUgZG9jcyBmb3IgR3N0T2JqZWN0Q2xhc3MgdG8gZml4IGxpbmtzCi0KLTIwMDktMTEtMjcgMTQ6MTU6MDggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG9iamVjdC5oOgotCSAgZ3N0b2JqZWN0OiBhZGQgRklYTUUtMC4xMSBjb21tZW50cwotCi0yMDA5LTExLTI1IDE4OjI1OjAxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R4bWwuYzoKLQkgIGRvY3M6IGJldHRlciB3YXkgdG8gbGluayBjbGFzcyBtZXRob2RzCi0KLTIwMDktMTEtMjUgMTg6MjQ6MTYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBkb2NzOiB1c2UgJyonIGluc3RlYWQgb2YgeHh4IHRvIGF2b2lkIGNyZWF0aW5nIGEgYnJvZWtuIHhyZWYKLQotMjAwOS0xMS0yNSAxNzozNzozMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZG9jczogZml4IG1vcmUgYm9ndXMgeHJlZnMKLQotMjAwOS0xMS0yNSAxNzoyNzozMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSAgZG9jczogYWRkIGRvY3MgZm9yIEdzdFBsdWdpbkZsYWdzCi0JICBUaGlzIGFsc28gbWFrZXMgbGlua3MgdG8gdGhlbSB3b3JrLgotCi0yMDA5LTExLTI1IDE1OjM5OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtaW50ZXJmYWNlcy54bWw6Ci0JICBkb2NzOiBpbXByb3ZlIEdzdE1peGVyIGFuZCBHc3RUdW5lciBkb2NzCi0JICBNZW50aW9uIHRoYXQgZWxlbWVudHMgaW1wbGVtZW50aW5nIEdzdE1peGVyIGFuZCBHc3RUdW5lciBuZWVkIHRvIGJlCi0JICBpbiB0aGUgcmlnaHQgc3RhdGUgYmVmb3JlIHRoZXkgY2FuIGJlIHVzZWQuIEFsc28gbWVudGlvbiBHTGliCi0JICBmdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgZmlsZW5hbWVzIHRvIGFuZCBmcm9tIFVSSXMuCi0JICBGaXhlcyAjNjAyODc3LgotCi0yMDA5LTExLTI1IDE2OjQ0OjA1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0ZGVidWd1dGlscy5oOgotCSogZ3N0L2dzdGZpbHRlci5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkqIGdzdC9nc3R1cmkuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIGRvY3M6IGZpeCB4cmVmcyBpbiBkb2NzCi0JICBGaXggdHlwb3MgaW4geHJlZnMsIGxpbmtzIHRvIG5vbiBleGlzdGluZyBmdW5jdGlvbnMgYW5kIHJld29yayBwbHVyYWwgZm9ybXMuCi0KLTIwMDktMTEtMjUgMTQ6NDE6MjYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG1hY3Jvcy5oOgotCSAgZG9jczogcmVtb3ZlIGd0a2RvYyBoZWFkZXIgYXMgdGhlc2UgdGhpbmdzIGRvbid0IGNvbWUgdXAgb24gb3VyIGRvY3MgZXZlbgotCi0yMDA5LTExLTI1IDE0OjIzOjUzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgZG9jczogYWRkIG1pc3NpbmcgcGFyYW1ldGVyIGRvYyBzdHJpbmcKLQotMjAwOS0xMS0yNSAxNDoyMTo1MCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGRvY3M6IGRvY3VtZW50IG5ldyBldmVudCBpbiBlbnVtCi0KLTIwMDktMTEtMjUgMTQ6MTg6MTQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBkb2NzOiBmaXggZ3RrLWRvYyBzeW50YXggZm9yIGRvYy1ibG9iIHN0YXJ0Ci0KLTIwMDktMTEtMjMgMTE6MzQ6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgcXVlcnk6IHdoaXRlc3BhY2UgZml4ZXMKLQotMjAwOS0xMS0yMyAxMTozMzo0OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVyMi50eHQ6Ci0JICBkb2NzOiBmaXggZ3JhbW1hcgotCi0yMDA5LTExLTIxIDE2OjM3OjM0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgYmFzZXNyYzogQWRkIGdzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudCgpCi0JICBNZXJnZSBuZXcgZnVuY3Rpb24gZnJvbSByZXNpbmR2ZCBpbnRvIHRoZSBwcmltYXJ5IEdzdEJhc2VTcmMgZm9yCi0JICBzdGFydGluZyBhIG5ldyBzZWFtbGVzcyBzZWdtZW50LgotCSAgQVBJOiBnc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQoKQotCi0yMDA5LTExLTIwIDE2OjAwOjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmM6Ci0JICBieXRld3JpdGVyOiBmaXggY29tcGlsZXIgd2FybmluZwotCSAgU29tZSBnY2MgdmVyc2lvbnMgd2FybiBhYm91dCBieXRld3JpdGVyIHdyaXRpbmcgdG8gbWVtb3J5IGFjY2Vzc2VkCi0JICB2aWEgYSBjb25zdCBndWludDggcG9pbnRlciwgZGVzcGl0ZSBvdXIgZXhwbGljaXQgY2FzdCB0byBndWludDggKi4KLQkgIFdvcmsgYXJvdW5kIHRoYXQgYnkgdXNpbmcgYW4gaW50ZXJtZWRpYXJ5IHZhcmlhYmxlLgotCSAgRml4ZXMgIzU5ODUyNi4KLQotMjAwOS0xMS0yMCAwOTozMzo0OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNoZWNrOiBPbmx5IGNoZWNrIGZvciBnbXAvZ3NsIGlmIGJ1aWxkaW5nIG9mIHRlc3RzIGlzIG5vdCBkaXNhYmxlZAotCi0yMDA5LTExLTE5IDE5OjAwOjA1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBDbGFtcCB0aGUgYmFzZSB0aW1lIGNvcnJlY3RseSBpbiBwb3NpdGlvbiByZXBvcnRpbmcKLQkgIFdoZW4gY2xhbXBpbmcgdGhlIGJhc2UgdGltZSwgY29ycmVjdGx5IHVzZSAnbm93JywgaW5zdGVhZCBvZgotCSAgJy1ub3cnIC0gdGhlIGludGVudCBpcyB0byBwcmV2ZW50ICdub3ctYmFzZScgZXZlciBiZWluZwotCSAgbmVnYXRpdmUsIHdoaWNoIHdvdWxkIGNhdXNlIGEgcG9zaXRpb24gcmVwb3J0IG91dHNpZGUgdGhlIHNlZ21lbnQuCi0JICBGaXhlczogIzYwMjQxOQotCi0yMDA5LTExLTA5IDEwOjUyOjQyIC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSAgZ3N0cGx1Z2luOiBBZGQgQysrIGVzY2FwZSBmb3IgZ3N0X3BsdWdpbl9kZXNjIGRlZmluZQotCSAgSW4gb3JkZXIgdG8gcHJvcGVybHkgZXhwb3J0IHRoZSBnc3RfcGx1Z2luX2Rlc2Mgc3ltYm9sCi0JICBmcm9tIERMTHMgaW4gTVNWQywgaXQgbmVlZHMgdG8gYmUgZXh0ZXJuICJDIi4KLQotMjAwOS0xMS0xOSAxMjo1OToyOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZS9ncmFtbWFyLnk6IHJlbW92ZSB1bnVzZWQgRVJST1IgZGVmaW5lCi0KLTIwMDktMTEtMTkgMTA6Mjk6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMTg2MTI1MiB0byA1M2EyNDg1Ci0KLTIwMDktMTEtMTYgMTU6NDc6NTcgKzAyMDAgIFByaWl0IExhZXMgPHBsYWVzQHBsYWVzLm9yZz4KLQotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBjaGVjazogZml4IHN5bWJvbCBleHBvcnRpbmcgd2hlbiBidWlsZGluZyB1bmRlciBldF9FRSBsb2NhbGUKLQkgIFtBLVpdIHJlZ2V4cCBmYWlscyB1bmRlciBldF9FRSBsb2NhbGUgYmVjYXVzZSBaIGluIEVzdG9uaWFuIGFscGhhYmV0IGlzCi0JICBsb2NhdGVkIGFmdGVyIFMgYW5kIHRoZXJlZm9yZSBjaGFyYWN0ZXJzIHN0YXJ0aW5nIHdpdGggJ1RVVi4uLicgYXJlIG5vdAotCSAgaW4gdGhlIHJhbmdlIGFueW1vcmUuCi0JICBGaXhlcyBidWcgIzYwMjA5My4KLQotMjAwOS0xMS0xOCAwNzo1OTozNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBIYW5kbGUgdGhlIG5ldyBzaW5rLW1lc3NhZ2UgZXZlbnQKLQotMjAwOS0xMS0xOCAwNzo1MjoyNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBldmVudDogQVBJOiBBZGQgc2luay1tZXNzYWdlIGV2ZW50Ci0JICBnc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZSgpCi0JICBnc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlKCkKLQkgIFRoaXMgZXZlbnQgaXMgdXNlZCBmb3Igc2VuZGluZyBhIEdzdE1lc3NhZ2UgZG93bnN0cmVhbSBhbmQgc3luY2hyb25pemVkCi0JICB3aXRoIHRoZSBzdHJlYW0sIHRvIGJlIHBvc3RlZCBieSB0aGUgc2luayBvbmNlIGl0IHJlYWNoZXMgdGhlIHNpbmsuCi0JICBGaXhlcyBidWcgIzYwMjI3NS4KLQotMjAwOS0xMS0xNiAwMDoxMjoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSogbGlicy9nc3QvaGVscGVycy8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkgIHBsdWdpbi1zY2FubmVyOiByZW5hbWUgcGx1Z2luLXNjYW5uZXIgaGVscGVyIGJpbmFyeSB0byBnc3QtcGx1Z2luLXNjYW5uZXIKLQkgIGFuZCBpbnN0YWxsIGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5ICQobGliZXhlY2Rpci9nc3RyZWFtZXItMC4xMCkgc28gdGhhdAotCSAgZXZlcnl0aGluZyBpcyB2ZXJzaW9uZWQgcHJvcGVybHkuCi0JICBOT1RFOiBydW4gJ21ha2UgY2xlYW4nIGFmdGVyIHVwZGF0aW5nOyBpZiB5b3UgYXJlIHJ1bm5pbmcgYW4gdW5pbnN0YWxsZWQgc2V0dXAsCi0JICB5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSB5b3VyIGdzdC11bmluc3RhbGxlZCBzY3JpcHQgKHVubGVzcyBpdCdzIHN5bWxpbmtlZAotCSAgdG8gZ3N0cmVhbWVyIGNvcmUgbWFzdGVyKSBhbmQgZXhpdC9lbnRlciB5b3VyIHVuaW5zdGFsbGVkIGVudmlyb25tZW50IHRvIGdldAotCSAgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQuIElmIHlvdSBhcmUgcnVubmluZyBhbiBpbnN0YWxsZWQgc2V0dXAsIHlvdSBzaG91bGQKLQkgIHJ1biAnbWFrZSB1bmluc3RhbGwnIGJlZm9yZSBtZXJnaW5nIHRoaXMgY2hhbmdlIG9yIHJlbW92ZSB0aGUgb2xkCi0JICBwbHVnaW4tc2Nhbm5lciBiaW5hcnkgbWFudWFsbHkuCi0JICBGaXhlcyAjNjAxNjk4LgotCi0yMDA5LTExLTE4IDA5OjEwOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgUmV2ZXJ0ICJzdHJ1Y3R1cmU6IGRvbid0IGNoZWNrIHR5cGUgdHdpY2UiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGY4NjQxODdiZjVmZGZhZjcxZjJlMDM4OTQ5ZTQwM2E0MmU2ZGFmMGUuCi0JICBSZXZlcnRpbmcgdGhpcyBhcyBpdCBjaGFuZ2VzIGJlaGF2aW91ciBhbmQgdGhlIGRvY3VtZW50YXRpb24gaXMKLQkgIGFtYmlndW91cyBhYm91dCB3aGV0aGVyIHRoZSBjYWxsZXIgbXVzdCBjaGVjayB0aGUgdHlwZSBmaXJzdCBvcgotCSAgbm90IChjYWxsIG11c3QgY2hlY2sgdHlwZSB2cy4gcmV0dXJucyBOVUxMIGlmIG5vdCBhIHN0cmluZykuIElmCi0JICBHTGliIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggR19ESVNBQkxFX0NIRUNLUyB0aGVuIGdfdmFsdWVfZ2V0X3N0cmluZygpCi0JICBtYXkgcmV0dXJuIGNvbXBsZXRlIGdhcmJhZ2UgZXZlbiBpZiB0aGUgdmFsdWUgZG9lcyBub3QgY29udGFpbgotCSAgYSBzdHJpbmcuIEJldHRlciBwbGF5IGl0IHNhZmUsIGVzcC4gc2luY2UgdGhlIGV4dHJhIGNoZWNrIGlzIGp1c3QKLQkgIGFuIGludGVnZXIgY29tcGFyaXNvbi4gRm9yIGZ1bmRhbWVudGFsIHR5cGVzIHdlIGNvdWxkIHJldHVybiB2YWx1ZXMKLQkgIGZyb20gdGhlIEdWYWx1ZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBieXBhc3MKLQkgIHRoZSBleHRyYSBjaGVjay4KLQotMjAwOS0xMS0xNyAxNzowNjowOCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IGRvbid0IGNoZWNrIHR5cGUgdHdpY2UKLQotMjAwOS0xMS0xNyAxODozNTo1NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RldmVudC5jOgotCSAgZXZlbnQ6IEFkZCBzdGVwIGV2ZW50IHF1YXJrCi0KLTIwMDktMTEtMTcgMTA6MDI6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IGFkZCBwYXRocyBmb3IgZ3N0LXFhLXN5c3RlbQotCi0yMDA5LTExLTE3IDA5OjA2OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06Ci0JICBkb2NzOiBzZXQgR1NUX1BMVUdJTl9TQ0FOTkVSIHdoZW4gY2FsbGluZyBndGtkb2Mtc2NhbmdvYmoKLQkgIE90aGVyd2lzZSB0aGUgZG9jcyBidWlsZCB3b24ndCB3b3JrIHByb3Blcmx5Ci0KLTIwMDktMTEtMTYgMTM6NTg6MTAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgc3RydWN0dXJlOiByZW1vdmUgc29tZSBibGFuayBsaW5lcyAocHJldmlvdXMgZ3N0LWluZGVudCBmYWlsdXJlKQotCi0yMDA5LTExLTE2IDEzOjUzOjQ0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogdXNlIGxvY2FsIHZhcmlhYmxlIGVhcmxpZXIKLQotMjAwOS0xMS0xNiAxMzo0OTozMiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IGRvbid0IGNoZWNrIGVudW0gdHlwZXMgdHdpY2UuCi0JICBHX1ZBTFVFX0hPTERTX0VOVU0odmFsdWUpIGlzIGRlZmluZWQgYXMgR19UWVBFX0NIRUNLX1ZBTFVFX1RZUEUgKHZhbHVlLAotCSAgR19UWVBFX0VOVU0pLiBKdXN0IGNoZWNrIGZvciB0aGUgcmlnaHQgZW51bS10eXBlIHJpZ2h0IGF3YXkuCi0KLTIwMDktMTEtMTQgMjI6MzU6MDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBjaGVjazogQWRkIGEgZGVidWcgc3RhdHVzIHRvIHRoZSBzeXN0ZW1jbG9jayB0ZXN0Ci0JICBOZXh0IHRpbWUgaXQgZmFpbHMgb24gYSBidWlsZGJvdCB3ZSBjYW4gc2VlIHdoaWNoIGNsb2NrIGlkCi0JICByZXR1cm4gaXQgaXMgZ2V0dGluZy4KLQotMjAwOS0xMS0xNiAxODoyNTo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgIFRPRE86IHJlbW92ZSBzdGVwcGluZyBmcm9tIFRPRE8KLQkgIFJlbW92ZSB0aGUgZnJhbWUgc3RlcHBpbmcgQVBJIGZyb20gdGhlIFRPRE8gbGlzdC4KLQotMjAwOS0xMS0xNiAxNDowMjowNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGZpeCBwb3NpdGlvbiByZXBvcnRpbmcKLQkgIE9ubHkgdXBkYXRlIHRoZSBjdXJyZW50IHN0cmVhbSB0aW1lIGFmdGVyIHdlIGNoZWNrZWQgaWYgd2UgZ290IGEgbmV3IHN0ZXAKLQkgIGV2ZW50LiBUaGlzIGltcHJvdmVzIHRoZSBwb3NpdGlvbiByZXBvcnRpbmcgYnkgdGhlIHNpbmsuCi0JICBTZWUgIzU5NTk1OAotCi0yMDA5LTExLTE2IDA5OjQ5OjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXRpbHM6IEFQSTogQWRkIG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBmdW5jdGlvbnMgZm9yIGZyYWN0aW9ucwotCSAgZ3N0X3V0aWxfZnJhY3Rpb25fYWRkKCkKLQkgIGdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5KCkKLQkgIFRoZXNlIHdvcmsgb24gcGxhaW4gaW50ZWdlcnMgaW5zdGVhZCBvZiBHVmFsdWVzIHRvCi0JICBrZWVwIHRoZSBvdmVyaGVhZCBhcyBsb3cgYXMgcG9zc2libGUuCi0KLTIwMDktMTEtMTYgMDk6Mjk6MTAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3R1dGlsczogQVBJOiBBZGQgZnJhY3Rpb24gaGVscGVyIGZ1bmN0aW9ucwotCSAgZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IoKQotCSAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uKCkKLQkgIGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSgpCi0JICBVc2luZyB0aGVzZSBpbnN0ZWFkIG9mIGdvaW5nIG92ZXIgR1ZhbHVlIGhhcyBtdWNoIGxvd2VyIG92ZXJoZWFkLgotCSAgQWxzbyBhZGQgZmxvYXQ8LT5mcmFjdGlvbiB0cmFuc2Zvcm0gZnVuY3Rpb25zIGZvciBHVmFsdWUuCi0KLTIwMDktMTEtMTMgMTU6NDU6NTIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgZGVidWc6IGFkZCBtb3JlIGRlYnVnIGxvZ2dpbmcgdG8gaGVscCB0cmFja2luZyBwYXJzaW5nIGVycm9ycwotCi0yMDA5LTExLTEzIDExOjQyOjAyICswMTAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIG1pbmlvYmplY3Q6IGF2b2lkIHJhY2Ugd2hlbiByZWN5Y2xpbmcgYnVmZmVycwotCSAgQXZvaWQgYSByYWNlIHdoZXJlIGEgbWluaW9iamVjdCBpcyByZWN5Y2xlZCBhbmQgcXVpY2tseSBmcmVlZCwgd2hpY2ggY2F1c2VzIHRoZQotCSAgZ190eXBlX2ZyZWVfaW5zdGFuY2UoKSB0byBiZSBjYWxsZWQgb24gdGhlIHNhbWUgb2JqZWN0IHR3aWNlLgotCSAgUmVmIHRoZSBvYmplY3QgYmVmb3JlIGNhbGxpbmcgdGhlIGZpbmFsaXplIG1ldGhvZCBhbmQgY2hlY2sgaWYgd2Ugc3RpbGwgbmVlZCB0bwotCSAgZnJlZSBpdCBhZnRlcndhcmQuCi0JICBBbHNvIGFkZCBhIHVuaXQgdGVzdCBmb3IgdGhpcyBjYXNlLgotCSAgRml4ZXMgIzYwMTU4NwotCi0yMDA5LTExLTEyIDE3OjAyOjQwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgd2hpdGVzcGFjZTogcmVtb3ZlIGJsYW5rcyBpbiBkb2MtY29tbWVudAotCi0yMDA5LTExLTA2IDE1OjQyOjU3ICswMzAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICByZWdpc3RyeTogSW1wb3J0IF9wcml2X2dzdF9kbGxfaGFuZGxlIGludG8gZ3N0cmVnaXN0cnkuYwotCSAgRml4ZXMgYnVnICM2MDE2NjguCi0KLTIwMDktMTEtMTIgMTQ6MTA6MDYgKzAzMDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogRG8gbm90IGxpc3QgbGliZ3N0Y2hlY2sgYXMgYSByZXF1aXJlbWVudCBmb3IgdGVzdHMvZXhhbXBsZXMvbWFudWFsCi0JICBGaXhlcyBidWcgIzYwMTY2OS4KLQotMjAwOS0xMS0xMSAxNzoxMjoxOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogRml4IHRyZWF0aW5nIGJhc2VfdGltZSBhcyB1bnNpZ25lZCBpbiBwb3NpdGlvbiBjYWxjdWxhdGlvbgotCSAgRWxlbWVudCBiYXNlX3RpbWUgaXMgYSBzaWduZWQgcXVhbnRpdHksIHdoaWNoIGxlYWRzIHRvIGJhc2VzaW5rIHJldHVybmluZwotCSAgYSBwb3NpdGlvbiBvZiAwIHdoZW4gZGVhbGluZyB3aXRoIGEgbmVnYXRpdmUgYmFzZSB0aW1lIC0gd2hpY2ggYXJlIHF1aXRlCi0JICBsZWdhbCB3aGVuIGNsb2NrcyAoc3VjaCBhcyB0aGUgYXVkaW8gY2xvY2spIGFyZSBjbG9zZSB0byAwLgotCSAgVGhpcyBkb2Vzbid0IG1hbmlmZXN0IGluIG5vcm1hbCBwaXBlbGluZXMsIG9mIGNvdXJzZSAtIGJ1dCBjYW4gaGFwcGVuCi0JICAoYXQgbGVhc3QpIHdoZW4gbWFudWFsbHkgc2V0dGluZyB0aGUgYmFzZSB0aW1lIG9uIGEgcGlwZWxpbmUuCi0KLTIwMDktMTEtMTAgMTg6MDM6NDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcmVnaXN0cnk6IEFQSTogQWRkIGdzdF97ZGVmYXVsdCx9X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfY29va2llKCkKLQkgIFRoaXMgcmV0dXJucyB0aGUgaW50ZXJuYWwgZmVhdHVyZSBsaXN0IGNvb2tpZSwgd2hpY2ggY2hhbmdlcyBldmVyeQotCSAgdGltZSBhIGZlYXR1cmUgaXMgYWRkZWQgb3IgcmVtb3ZlZC4gVGhpcyBjYW4gYmUgdXNlZCBieSBlbGVtZW50cwotCSAgdG8gY2hlY2sgaWYgdGhleSBzaG91bGQgdXBkYXRlIHRoZWlyIGNhY2hlZCBmZWF0dXJlIGxpc3RzLgotCi0yMDA5LTExLTEwIDExOjU1OjM0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZml4IHByaW50ZiBmb3JtYXQKLQkgIENhc3QgdGhlIHZhcmlhYmxlIHRvIGdpbnQgdG8gY29uZm9ybSB0byB0aGUgcHJpbnRmIGZvcm1hdCB1c2VkLgotCSAgSXQgaXMgY2FzdGVkIHJhdGhlciB0aGFuIGNoYW5naW5nIHRoZSBmb3JtYXQgYmVjYXVzZSB0aGUKLQkgIG1lc3NhZ2UgaXMgY3JlYXRlZCB3aXRoIGEgY2FzdCB0byBnaW50IHRvby4KLQotMjAwOS0xMS0xMCAxMDoxMDo1NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGF2b2lkIGNyYXNoaW5nIGR1ZSB0byBuZWdhdGl2ZSBwZXJjZW50Ci0JICBxdWV1ZTIgd291bGQgY3Jhc2ggd2hlbiB1c2luZyBzbWFsbCBidWZmZXIgc2l6ZXMgYmVjYXVzZQotCSAgaXQgd291bGQgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB0aGUgcGVyY2VudGFnZSwgcmVzdWx0aW5nCi0JICBpbiB0aGUgYnVmZmVyaW5nIEdzdE1lc3NhZ2Ugbm90IGJlaW5nIGNyZWF0ZWQgYW5kIHRyeWluZyB0byBiZQotCSAgdXNlZC4gVGhpcyBwYXRjaCB1c2VzIGEgZ2ludDY0IGluc3RlYWQgb2YgYSBnaW50IHRvIGRvIHRoZQotCSAgcGVyY2VudGFnZSBtYXRoLCBtYWtpbmcgaXQgaGFyZGVyIHRvIG92ZXJmbG93LgotCi0yMDA5LTExLTEwIDA5OjUyOjMwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogRml4IHNtYWxsIGRvYyB0eXBvCi0KLTIwMDktMTEtMTAgMDA6NTc6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkgIHJlZ2lzdHJ5Y2h1bmtzOiBmaXggY29tcGlsYXRpb24gd2l0aCBkZWJ1Z2dpbmcgZGlzYWJsZWQKLQkgIEFkZCB1Z2x5IGlmZGVmIHRvIGZpeCB1bnVzZWQgdmFyaWFibGUgd2FybmluZyB3aGVuIGNvbXBpbGluZyB3aXRoCi0JICBkZWJ1ZyBsb2dnaW5nIGRpc2FibGVkLgotCi0yMDA5LTExLTA5IDE2OjIwOjUyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHJhZnQtYnVmZmVycG9vbHMudHh0OgotCSogZG9jcy9yYW5kb20vZW5zb25pYy9kcmFmdC1yZWdpc3RyeS1jaGFuZ2UtaG9va3MudHh0OgotCSAgcGxhbm5pbmc6IGFkZCB0aG91Z2h0cyBhYm91dCBmb3JlaWduIHJlZ2lzdHJ5IGNhY2hlIHVwZGF0ZXMKLQotMjAwOS0xMS0wOSAxNDo1NTo1NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgaW5zcGVjdDogYWxsb3cgdG8gZ2V0IHBsdWdpbi1pbnN0YWxsLWluZm8gZm9yIGFsbCBpbnN0YWxsZWQgcGx1Z2lucwotCSAgSWYgbm8gcGx1Z2luIGlzIGdpdmVuLCBwcmludCB0aGUgaW5mbyBmb3IgYWxsIHBsdWdpbnMuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYQotCSAgc3RhcnRpbmcgcG9pbnQgdG8gZ2VuZXJhdGUgYSBwcm9maWxlIGFib3V0IHdoYXQgdGhlIGdzdHJlYW1lciBpbnN0YWxsYXRpb24gY2FuCi0JICBwb3RlbnRpYWx5IGhhbmRsZSAoZS5nLiBmb3IgTVRQIG9yIERMTkEpLgotCi0yMDA5LTExLTA5IDEyOjQyOjM1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6Ci0JICBkb2NzOiBkb24ndCBmb3JnZXQgdG8gdW5yZWYgdGhlIHBhZAotCi0yMDA5LTExLTA3IDIwOjIyOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogd2FrZSB1cCBsZXNzIG9mdGVuIHRvIGNoZWNrIGlmIHdlJ3ZlIGJlZW4gaW50ZXJydXB0ZWQKLQkgIENoZWNrIGlmIHdlJ3ZlIGJlZW4gaW50ZXJydXB0ZWQgb25seSBmb3VyIHRpbWVzIHBlciBzZWNvbmQgaW5zdGVhZAotCSAgb2YgdHdlbnR5IHRpbWVzIHBlciBzZWNvbmQsIHRvIHdha2UgdXAgdGhlIGNwdSBsZXNzIG9mdGVuIGFuZAotCSAgc2F2ZSBwb3dlciAoc2VlIGJ1ZyAjNjAwOTIyKS4KLQotMjAwOS0xMS0wNSAyMToxODoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIGdzdGNvbmZpZy5oOiBhZGQgZGVmaW5lIHRvIGZvcmNlIHByaW50ZiBmb3JtYXQgY2hlY2tpbmcgZm9yIGRlYnVnIG1lc3NhZ2VzCi0JICBGb3JjZSBwcmludGYgZm9ybWF0IGNoZWNraW5nIGZvciBkZWJ1ZyBtZXNzYWdlcyBpZiBHU1RfRElTQUJMRV9QUklOVEZfRVhURU5TSU9OCi0JICBpcyBkZWZpbmVkLiBUaGlzIGlzIHVzZWZ1bCB0byBxdWlja2x5IGNoZWNrIGNvZGUgZm9yIHByaW50ZiBmb3JtYXQgbWlzbWF0Y2hlcwotCSAgaW4gZGVidWdnaW5nIG1lc3NhZ2VzIHRoYXQgd291bGQgdXN1YWxseSBub3QgYmUgY2F1Z2h0ICh3aXRoIGdsaWJjK2djYyBhbmQKLQkgIHByaW50ZiBleHRlbnNpb25zIGJlaW5nIHVzZWQpLgotCSAgVG8gdXNlOiBtYWtlIGNsZWFuOyBtYWtlIENGTEFHUz0nLWcgLU8yIC1ER1NUX0RJU0FCTEVfUFJJTlRGX0VYVEVOU0lPTicKLQotMjAwOS0xMS0wNSAyMTowOToyOCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogTWFrZSBzdXJlIHdlIHVzZSB0aGUgbG9jYWwgbGliZ3N0YmFzZSBhbmQgbm90IGEgc3RyYXkgb3V0c2lkZSBvbmUuCi0JICBUaGVvcmV0aWNhbGx5IHdlIHNob3VsZCBhbHNvIGRvIHRoaXMgZm9yIGFsbCBsb2NhbCBsaWJyYXJpZXMgdG8gbWFrZSBzdXJlCi0JICB3ZSBkb24ndCB0ZXN0IHdpdGggYSAnc3RyYXknIG91dHNpZGUgbGlicmFyeS4KLQotMjAwOS0xMS0wNSAxODozNjozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5oOgotCSAgZG9jczogZml4IHR5cG8KLQotMjAwOS0xMS0wNSAxNTo1OTozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdsaXN0OiBhdm9pZCBsb29raW5nIHVwIEdzdFRhZ0luZm8gdHdpY2UgaW4gYSByb3cKLQkgIFBhc3MgdGhlIGluZm8gc3RydWN0dXJlIHRvIG91ciBpbnRlcm5hbCBmdW5jdGlvbiBpZiBhbHJlYWR5IGF2YWlsYWJsZS4KLQkgIEFsc28gY2xlYW4gdXAgd2FybmluZ3MgZm9yIHVua25vd24gdGFncy4KLQotMjAwOS0xMS0wNSAxODo1NTozMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICBnc3RyZWdpc3RyeWNodW5rczogV2UncmUgY2VydGFpbiBwbHVnaW5fbmFtZSBpcyBhbiBpbnRlcm4gc3RyaW5nLgotCSAgVGhlIG9ubHkgcGxhY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gY3JlYXRlcyB0aGUgcGx1Z2luX25hbWUgYXJndW1lbnQKLQkgIHdpdGggZ19pbnRlcm5fc3RyaW5nKCkuCi0JICBTaGF2ZXMgb2ZmIDElIGZyb20gcmVnaXN0cnkgbG9hZGluZy4KLQotMjAwOS0xMS0wNCAxOTozMzo1OCArMDAwMCAgQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOgotCSAgaW1wbGVtZW50IGJ1ZmZlcmluZy1sZWZ0IGFyZ3VtZW50IHRvIGJ1ZmZlciBtZXNzYWdlcwotCSAgVXNpbmcgdGhlIGN1cnJlbnQgZmlsbCBsZXZlbCBvZiB0aGUgcXVldWUsIGFuZCB0aGUgYXZlcmFnZSBpbnB1dAotCSAgcmF0ZSwgd2UgY2FuIGRldGVybWluZSBob3cgbG9uZyBpdCB3aWxsIHRha2UgdG8gZmluaXNoIGRvd25sb2FkaW5nCi0JICB0aGUgd2hvbGUgc3RyZWFtIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZS4KLQkgIEZpeGVzICM2MDA3MjYKLQotMjAwOS0xMS0wNSAxNToxMzowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBxdWVyeTogd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA5LTExLTA1IDE0OjAyOjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBmaXggbG9ja2luZwotCi0yMDA5LTExLTA1IDE0OjI5OjUwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IGRvbid0IHJlbGVhc2UgbXV0ZXggdHdpY2UKLQotMjAwOS0xMS0wNSAxNDoyOToxMiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBza2lwIHR5cGUgY2hlY2sgaW4gaW50ZXJuYWwgYXBpCi0KLTIwMDktMTEtMDUgMTI6MzY6MTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHBhZDogaW5kZW50YXRpb24gZml4Ci0KLTIwMDktMTEtMDUgMTI6NTQ6MzIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBwYWQ6IHJlbmFtZSBuZXcgYXBpIGZyb20gX3JlZmVkIHRvIF9yZWZmZWQuCi0JICBEdWUgdG8gcG9wdWxhciBkZW1hbmQgcmVuYW1lIHRoZSBuZXcgYXBpIGFzIHdlIHN0aWxsIGNhbi4KLQkgIEFQSTogZ3N0X3BhZF9nZXRfY2Fwc19yZWZmZWQoKSwgZ3N0X3BhZF9wZWVyX2dldF9jYXBzX3JlZmZlZCgpCi0KLTIwMDktMTEtMDQgMjI6NDI6NTIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IGFjY2VzcyBwYWR0ZW1wbGF0ZSBsaXN0IGRpcmVjdGx5IHRvIGF2b2lkIGNhbGwgYW5kIHR5cGUgY2hlY2suCi0KLTIwMDktMTEtMDQgMTg6NTg6MjYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGV2ZW50OiBBZGQgYSBGSVhNRSAwLjExIGZvciBoYXZpbmcgZmx1c2ggZXZlbnRzIHRoYXQgZG9uJ3QgcmVzZXQgcnVubmluZyB0aW1lCi0KLTIwMDktMTEtMDQgMTc6NTI6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JICByZWdpc3RyeWNodW5rczogRml4IGEgcHJpbnRmIGNvbXBpbGUgd2FybmluZyBvbiA2NC1iaXQgcGxhdGZvcm1zCi0KLTIwMDktMTEtMDQgMTc6MTU6NTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBNYWtlIHN1cmUgdGhhdCBub2JvZHkgc2V0cyB0aGUgcHJveHlwYWQgb3IgZ2hvc3RwYWQgaXRzZWxmIGFzIHRhcmdldAotCSAgRG9pbmcgdGhpcyB3aWxsIGxlYWQgdG8gdmVyeSBpbnRlcmVzdGluZyBjcmFzaGVzLCBsaWtlIHN0YWNrIG92ZXJmbG93cy4KLQotMjAwOS0xMS0wNCAxMTozNTo0NiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkgIHBsdWdpbiBsb2FkZXI6IERvbid0IGZhaWwgYWZ0ZXIgYSBzaG9ydCByZWFkL3dyaXRlCi0JICBUaGUgbG9naWMgdG8gaGFuZGxlIHNob3J0IHJlYWRzL3dyaXRlcyB3YXMgaW5jb3JyZWN0LCBjYXVzaW5nIHRoZQotCSAgcGFja2V0IGhhbmRsZXIgdG8gYXR0ZW1wdCB0byBoYW5kbGUgaW5jb21wbGV0ZSBwYWNrZXRzLgotCSAgR3JvdyB0aGUgcGFja2V0IHRyYW5zbWl0IGJ1ZmZlciBpbiBwcm9wb3J0aW9uIHRvIG9ic2VydmVkIHVzYWdlLAotCSAgY2F1c2luZyBmZXdlciByZWFsbG9jcy4KLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW4gdGhlIHJlZ2lzdHJ5IGNodW5rcyBjb2RlLgotCi0yMDA5LTExLTA0IDAxOjUxOjM4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkgIHBsdWdpbiBsb2FkZXI6IERvbid0IGNyYXNoIG9uIGJvZ3VzIHBsdWdpbiBkZXRhaWxzCi0JICBXaGVuIGludmFsaWQgcmVnaXN0cnkgY2h1bmtzIGFyZSByZWNlaXZlZCBmcm9tIHRoZSBjaGlsZCwgYW5kIHBhcnNpbmcKLQkgIGZhaWxzLCBkb24ndCBhY2Nlc3MgYW4gaW52YWxpZCBwbHVnaW4gcG9pbnRlci4gSW5zdGVhZCBhdHRlbXB0IHRvCi0JICBmaWd1cmUgb3V0IHdoaWNoIHBsdWdpbiBjYXVzZWQgdGhlIHByb2JsZW0gYW5kIGJsYWNrbGlzdCBpdC4KLQotMjAwOS0xMS0wNCAwMTo1NDozNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0b29scy9nc3QtaW5kZW50OgotCSAgZ3N0LWluZGVudDogVXNlIHRoZSBzYW1lIGxvZ2ljIHRvIGZpbmQgZ251aW5kZW50IGFzIHRoZSBnaXQgaG9vawotCi0yMDA5LTExLTAzIDE3OjMwOjE0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBidWlsZDogaW5jbHVkZSBzdGRpby5oIGZvciBGSUxFCi0KLTIwMDktMTEtMDMgMDE6MTg6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBkb2NzOiBhZGQgYW5vdGhlciBleGFtcGxlIHRvIHRoZSBnc3QtbGF1bmNoIG1hbiBwYWdlCi0JICBBZGQgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byByZWZlciB0byBzcGVjaWZpYyBwYWRzIGJ5IG5hbWUKLQkgIHdoZW4gY29uc3RydWN0aW5nIGEgcGlwZWxpbmUgc3RyaW5nLiBGaXhlcyAjNjAwMzgyLgotCi0yMDA5LTExLTAyIDA4OjQ4OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHR5cGVmaW5kLmM6Ci0JICBnc3R0eXBlZmluZDogYXZvaWQgb25lIG1vcmUgcnVuLXRpbWUgdHlwZSBjaGVjawotCi0yMDA5LTExLTAyIDA5OjIyOjM3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc3RydWN0dXJlOiBBUEk6IEFkZCBnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZHssX3R5cGVkfQotCi0yMDA5LTExLTAyIDA4OjI4OjIwICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkgIGdzdHR5cGVmaW5kOiBVc2UgX0NBU1QgdmFyaWFudHMgd2hlbiB0aGUgdHlwZSBoYXMgYWxyZWR5IGJlZW4gY2hlY2tlZC4KLQkgIFRoaXMgYXZvaWRzIGNoZWNraW5nIHRoZSB0eXBlIG5fdHlwZWZpbmRlcnMgKiA0IHRpbWVzIHdoZW4gbG9hZGluZyB0aGUKLQkgIHJlZ2lzdHJ5LgotCi0yMDA5LTExLTAxIDExOjI0OjQwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogSW1wbGVtZW50IGl0ZXJhdGUgaW50ZXJuYWwgbGlua3MKLQkgIFRoZSBpbnRlcm5hbGx5IGxpbmtlZCBwYWQgb2YgdGhlIGdob3N0IHBhZCBpcyBpdHMKLQkgIHByb3h5IHBhZCwgd2hpY2ggaXMgdGhlIHBhZCB0aGF0IGlzIGxpbmtlZCB0byB0aGUgZ2hvc3QKLQkgIHBhZHMgdGFyZ2V0LgotCi0yMDA5LTEwLTMxIDE2OjU2OjE3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIHBhcnNlcjogTWFrZSBzdXJlIHRoYXQgc2lnbmFsIHVzZXIgZGF0YSBpcyBmcmVlZCBieSBzZXR0aW5nIGEgR0Nsb3N1cmVOb3RpZnkKLQkgIC4uLmluc3RlYWQgb2YgdXNpbmcgYSBzZWNvbmQgbWVjaGFuaXNtIGFuZCBzdG9yaW5nIHRoZSB1c2VyIGRhdGEKLQkgIGluc2lkZSB0aGUgR09iamVjdHMgcWRhdGEuCi0KLTIwMDktMTAtMzEgMTY6NDk6MDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2VyOiBVc2UgR1NsaWNlIGZvciBhbGxvY2F0aW5nIHRoZSBzdHJ1Y3RzCi0KLTIwMDktMTAtMzEgMTY6NDM6MjYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2VyOiBBbHdheXMgZ2V0IERlbGF5ZWRMaW5rIGluZm9ybWF0aW9uIGZyb20gdGhlIG9iamVjdHMgcWRhdGEKLQkgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IGl0IGlzIGFsd2F5cyB2YWxpZC4KLQotMjAwOS0xMC0zMSAwOTo0ODoxOSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcG8vUE9URklMRVMuaW46Ci0JICBwbzogcXVldWUyIGhhcyBtb3ZlZCB0byBjb3JlCi0KLTIwMDktMTAtMjkgMTE6NDE6MzMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JICBxdWV1ZTI6IEFkZCB0byB0aGUgZG9jcwotCi0yMDA5LTEwLTI5IDExOjM4OjIxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogVXNlICJRdWV1ZSAyIiBhcyBsb25nIG5hbWUKLQotMjAwOS0xMC0yOSAxMTozNTowOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IFVzZSBHU1RfQk9JTEVSUExBVEVfRlVMTCgpIGFuZCBhZGQgcGFkIHRlbXBsYXRlcy9zZXQgZGV0YWlscyBpbiBiYXNlX2luaXQKLQotMjAwOS0xMC0yOSAxMTozMDo1NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IFVzZSBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUoKQotCi0yMDA5LTEwLTI5IDExOjMwOjExICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oOgotCSAgcXVldWUyOiBJbnRlZ3JhdGUgaW50byBjb3JlcGx1Z2lucwotCi0yMDA5LTEwLTI5IDExOjIxOjM2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmg6Ci0JICBxdWV1ZTI6IE1vdmUgc3RydWN0IGRlY2xhcmF0aW9ucyB0byBhIHNlcGFyYXRlIGhlYWRlcgotCi0yMDA5LTEwLTI5IDExOjE4OjIwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogTW92ZSBxdWV1ZTIgdG8gZ3N0cmVhbWVyIGNvcmVwbHVnaW5zCi0JICBGaXhlcyBidWcgIzU5OTk5Ni4KLQotMjAwOS0xMC0yOCAwMDo1OTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKLQkgIFJlbW92ZSBHU1RfREVCVUdfRlVOQ1BUUiB3aGVyZSB0aGV5J3JlIHBvaW50bGVzcwotCSAgVGhlcmUncyBub3QgbXVjaCBwb2ludCBpbiB1c2luZyBHU1RfREVCVUdfRlVOQ1BUUiB3aXRoIEdPYmplY3QKLQkgIHZpcnR1YWwgZnVuY3Rpb25zIHN1Y2ggYXMgZ2V0X3Byb3BlcnR5LCBzZXRfcHJvcGVyeSwgZmluYWxpemUgYW5kCi0JICBkaXNwb3NlLCBzaW5jZSB0aGV5J2xsIG5ldmVyIGJlIHVzZWQgYnkgYW55b25lIGFueXdheS4gU2F2ZXMgYQotCSAgZmV3IGJ5dGVzIGFuZCBwb3NzaWJseSBhIHNpeHRlZW50aCBvZiBhIHBvbGFyIGJlYXIuCi0KLTIwMDktMTAtMjcgMTU6MjM6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogYWRkIGN1c3RvbSBhY2NlcHRjYXBzIGZ1bmN0aW9uCi0KLTIwMDktMDgtMDYgMTI6MTg6MzYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IHBvc3QgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdXNpbmcgdGFzayBpZiBzbyBhcHByb3ByaWF0ZQotCSAgSWYgYSBkb3duc3RyZWFtIGVsZW1lbnQgcmV0dXJucyBhbiBlcnJvciB3aGlsZSB1cHN0cmVhbSBoYXMgYWxyZWFkeQotCSAgcHV0IGFsbCBkYXRhIGludG8gcXVldWUyIChpbmNsdWRpbmcgRU9TKSwgdXBzdHJlYW0gd2lsbCBubyBsb25nZXIKLQkgIGNoYWluIGludG8gcXVldWUyLCBzbyBpdCBpcyB1cCB0byBxdWV1ZTIgdG8gcGVyZm9ybSBzb21lCi0JICBFT1MgaGFuZGxpbmcgLyBtZXNzYWdlIHBvc3RpbmcgaW4gc3VjaCBjYXNlcy4gIFNlZSAjNTg5OTkxLgotCi0yMDA5LTA3LTE0IDE3OjAzOjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6Ci0JICBxdWV1ZTI6IGZpeCBsZWFrIGFuZCBpbXByb3ZlIGJ1ZmZlcmluZwotCSAgS2VlcCB0cmFjayBvZiB0aGUgbWF4IHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgY29tcGFyZSB0aGlzIHRvIHRoZSB3cml0ZSBwb3NpdGlvbgotCSAgaW4gdGhlIHRlbXAgZmlsZSB0byBnZXQgdGhlIGN1cnJlbnQgYW1vdW50IG9mIGJ1ZmZlcmVkIGRhdGEuCi0JICBGaXggbWVtbGVhayBvZiBhbGwgaW5jb21taW5nIGJ1ZmZlcnMuCi0JICBGaXhlcyAjNTg4NTUxCi0KLTIwMDktMDctMTAgMjE6MDE6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogZmx1c2ggZGlmZmVyZW50bHksIGF2b2lkaW5nIGRlYWRsb2NrcwotCSAgRG9uJ3QgZmx1c2ggdGhlIGZpbGUgYnkgY2xvc2luZyBhbmQgb3BlbmluZyBpdCBidXQgaW5zdGVhZCB1c2UgZ19mcmVvcGVuLiBUaGlzCi0JICBhdm9pZHMgYSBkZWFkbG9jayBpbiBzaHV0ZG93biBiZWNhdXNlIHdlIGVtaXQgdGhlIHRlbXAtbG9jYXRpb24gcHJvcGVydHkgY2hhbmdlCi0JICB3aXRoIHRoZSB3cm9uZyBsb2NrIGhlbGQuCi0KLTIwMDktMDctMTAgMTk6NDk6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKLQkgIHF1ZXVlMjogYWRkIHRlbXAtdGVtcGxhdGUgcHJvcGVydHkKLQkgIEFkZCBhIG5ldyB0ZW1wLXRlbXBsYXRlIHByb3BlcnR5IHNvIHRoYXQgcXVldWUyIGNhbiBzZWN1cmVseSBhbGxvY2F0ZSBhCi0JICB0ZW1wb3JhcnkgZmlsZW5hbWUuIERlcHJlY2F0ZSB0aGUgdGVtcC1sb2NhdGlvbiBwcm9wZXJ0eSBmb3Igc2V0dGluZyB0aGUKLQkgIGxvY2F0aW9uIGJ1dCBzdGlsbCB1c2UgaXQgdG8gbm90aWZ5IHRoZSBhbGxvY2F0ZWQgdGVtcCBmaWxlLgotCi0yMDA5LTAzLTIwIDE0OjE3OjE5ICswMTAwICBMUk4gPGxybjE5ODYgYXQgZ21haWwgZG90IGNvbT4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOgotCSAgd2luMzI6IGZpeCBzZWVraW5nIGluIGxhcmdlIGZpbGVzCi0JICBGaXggU2Vla2luZyBpbiBsYXJnZSBmaWxlcyBieSB1c2luZyB0aGUgNjQtYml0IHNlZWsgZnVuY3Rpb25zLgotCSAgRml4ZXMgIzU3NjAxOQotCi0yMDA4LTA4LTA3IDE1OjU4OjU4ICswMDAwICBGcmVkZXJpYyBDcm96YXQgPGZjcm96YXRAbWFuZHJpdmEub3JnPgotCi0JICBNYWtlIHN1cmUgZ2V0dGV4dCByZXR1cm5zIHRyYW5zbGF0aW9ucyBpbiBVVEYtOCBlbmNvZGluZyByYXRoZXIgdGhhbiBpbiB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcgKCM1NDY4MjIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogRnJlZGVyaWMgQ3JvemF0IDxmY3JvemF0QG1hbmRyaXZhLm9yZz4KLQkgICogZXh0L2Fsc2EvZ3N0YWxzYXBsdWdpbi5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvY2RwYXJhbm9pYS9nc3RjZHBhcmFub2lhc3JjLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmcy5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3BsdWdpbl9pbml0KToKLQkgICogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGJhc2VhdWRpb3NyYy5jOiAoX2RvX2luaXQpOgotCSAgKiBnc3QtbGlicy9nc3QvcGJ1dGlscy9wYnV0aWxzLmM6IChnc3RfcGJfdXRpbHNfaW5pdCk6Ci0JICAqIGdzdC1saWJzL2dzdC90YWcvdGFncy5jOiAoZ3N0X3RhZ19yZWdpc3Rlcl90YWdzX2ludGVybmFsKToKLQkgICogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluMi5jOiAoZ3N0X2RlY29kZV9iaW5fcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhY2suYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0dXJpZGVjb2RlYmluLmM6IChnc3RfdXJpX2RlY29kZV9iaW5fcGx1Z2luX2luaXQpOgotCSAgKiBzeXMvdjRsL2dzdHY0bC5jOiAocGx1Z2luX2luaXQpOgotCSAgTWFrZSBzdXJlIGdldHRleHQgcmV0dXJucyB0cmFuc2xhdGlvbnMgaW4gVVRGLTggZW5jb2RpbmcgcmF0aGVyCi0JICB0aGFuIGluIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZyAoIzU0NjgyMikuCi0KLTIwMDgtMDctMTAgMjE6MDY6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQ2xlYW51cCBQbHVnaW4gZG9jcy4gTGluayB0byBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzLiBGaXggc3ViLXNlY3Rpb24gdGl0bGVzLiBEcm9wIG1lbnRpbmluZyB0aGF0IGFsbCBvdXIgZXhhbXBsZSBwaXBlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMtb3ZlcnJpZGVzLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFzZS1wbHVnaW5zLnNpZ25hbHM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hZGRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHNhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvY29udmVydC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3JhdGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9yZXNhbXBsZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3Rlc3RzcmMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2RwYXJhbm9pYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWNvZGViaW4ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmZtcGVnY29sb3JzcGFjZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ25vbWV2ZnMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGlidmlzdWFsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9nZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wYW5nby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbGF5YmFjay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWV1ZTIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3VicGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGNwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRoZW9yYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10eXBlZmluZGZ1bmN0aW9ucy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11cmlkZWNvZGViaW4ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9yYXRlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvc2NhbGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW90ZXN0c3JjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZvbHVtZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12b3JiaXMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14dmltYWdlc2luay54bWw6Ci0JICAqIGV4dC9hbHNhL2dzdGFsc2FtaXhlci5jOgotCSAgKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOgotCSAgKiBleHQvYWxzYS9nc3RhbHNhc3JjLmM6Ci0JICAqIGV4dC9naW8vZ3N0Z2lvc2luay5jOgotCSAgKiBleHQvZ2lvL2dzdGdpb3NyYy5jOgotCSAgKiBleHQvZ2lvL2dzdGdpb3N0cmVhbXNpbmsuYzoKLQkgICogZXh0L2dpby9nc3RnaW9zdHJlYW1zcmMuYzoKLQkgICogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc2luay5jOgotCSAgKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzcmMuYzoKLQkgICogZXh0L29nZy9nc3RvZ2dkZW11eC5jOgotCSAgKiBleHQvb2dnL2dzdG9nZ211eC5jOgotCSAgKiBleHQvcGFuZ28vZ3N0Y2xvY2tvdmVybGF5LmM6Ci0JICAqIGV4dC9wYW5nby9nc3R0ZXh0b3ZlcmxheS5jOgotCSAgKiBleHQvcGFuZ28vZ3N0dGV4dHJlbmRlci5jOgotCSAgKiBleHQvcGFuZ28vZ3N0dGltZW92ZXJsYXkuYzoKLQkgICogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzoKLQkgICogZXh0L3RoZW9yYS90aGVvcmFlbmMuYzoKLQkgICogZXh0L3RoZW9yYS90aGVvcmFwYXJzZS5jOgotCSAgKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOgotCSAgKiBleHQvdm9yYmlzL3ZvcmJpc2VuYy5jOgotCSAgKiBleHQvdm9yYmlzL3ZvcmJpc3BhcnNlLmM6Ci0JICAqIGV4dC92b3JiaXMvdm9yYmlzdGFnLmM6Ci0JICAqIGdzdC9hZGRlci9nc3RhZGRlci5jOgotCSAgKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOgotCSAgKiBnc3QvYXVkaW9yZXNhbXBsZS9nc3RhdWRpb3Jlc2FtcGxlLmM6Ci0JICAqIGdzdC9hdWRpb3Rlc3RzcmMvZ3N0YXVkaW90ZXN0c3JjLmM6Ci0JICAqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvbG9yc3BhY2UuYzoKLQkgICogZ3N0L2dkcC9nc3RnZHBkZXBheS5jOgotCSAgKiBnc3QvZ2RwL2dzdGdkcHBheS5jOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluMi5jOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbjIuYzoKLQkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0dXJpZGVjb2RlYmluLmM6Ci0JICAqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuYzoKLQkgICogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmM6Ci0JICAqIGdzdC92aWRlb3JhdGUvZ3N0dmlkZW9yYXRlLmM6Ci0JICAqIGdzdC92aWRlb3NjYWxlL2dzdHZpZGVvc2NhbGUuYzoKLQkgICogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuYzoKLQkgICogZ3N0L3ZvbHVtZS9nc3R2b2x1bWUuYzoKLQkgICogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6Ci0JICAqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6Ci0JICBDbGVhbnVwIFBsdWdpbiBkb2NzLiBMaW5rIHRvIHNpZ25hbHMgYW5kIHByb3BlcnRpZXMuIEZpeCBzdWItc2VjdGlvbgotCSAgdGl0bGVzLiBEcm9wIG1lbnRpbmluZyB0aGF0IGFsbCBvdXIgZXhhbXBsZSBwaXBlbGluZXMgYXJlICJzaW1wbGUiCi0JICBwaXBlbGluZXMuCi0KLTIwMDgtMDYtMjQgMTY6MjI6NDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBEbyBub3QgZG91YmxlIG5vdGlmeS4gUmVtb3ZlIHRoZSB1bnN1ZWQgcmV0dXJuIHZhbHVlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKLQkgIERvIG5vdCBkb3VibGUgbm90aWZ5LiBSZW1vdmUgdGhlIHVuc3VlZCByZXR1cm4gdmFsdWUuCi0KLTIwMDgtMDQtMTEgMDE6MjU6MDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL2RyYWZ0LWtleWZyYW1lLWZvcmNlLnR4dDogRml4IHR5cG8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQta2V5ZnJhbWUtZm9yY2UudHh0OgotCSAgRml4IHR5cG8uCi0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKHVwZGF0ZV9idWZmZXJpbmcpLAotCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KToKLQkgIFNldCBidWZmZXJpbmcgbW9kZSBpbiB0aGUgbWVzc2FnZXMuCi0JICBTZXQgYnVmZmVyaW5nIHBlcmNlbnQgaW4gdGhlIHF1ZXJ5LgotCSAgKiB0ZXN0cy9leGFtcGxlcy9zZWVrL3NlZWsuYzogKHVwZGF0ZV9maWxsKSwgKG1zZ19zdGF0ZV9jaGFuZ2VkKSwKLQkgIChkb19zdHJlYW1fYnVmZmVyaW5nKSwgKGRvX2Rvd25sb2FkX2J1ZmZlcmluZyksIChtc2dfYnVmZmVyaW5nKToKLQkgIERvIHNvbWUgbW9yZSBmYW5jeSB0aGluZ3MgYmFzZWQgb24gdGhlIGJ1ZmZlcmluZyBtZXRob2QgaW4gdXNlLgotCi0yMDA4LTA0LTA5IDIxOjQwOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IEluY2x1ZGUgZXh0cmEgYnVmZmVyaW5nIHN0YXRzIGluIHRoZSBidWZmZXJpbmcgbWVzc2FnZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6ICh1cGRhdGVfYnVmZmVyaW5nKSwKLQkgIChnc3RfcXVldWVfY2xvc2VfdGVtcF9sb2NhdGlvbl9maWxlKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfcXVldWVfc3JjX2NoZWNrZ2V0cmFuZ2VfZnVuY3Rpb24pOgotCSAgSW5jbHVkZSBleHRyYSBidWZmZXJpbmcgc3RhdHMgaW4gdGhlIGJ1ZmZlcmluZyBtZXNzYWdlLgotCSAgSW1wbGVtZW50IEJVRkZFUklORyBxdWVyeS4KLQkgICogZ3N0L3BsYXliYWNrL2dzdHVyaWRlY29kZWJpbi5jOiAoZG9fYXN5bmNfc3RhcnQpLAotCSAgKGRvX2FzeW5jX2RvbmUpLCAodHlwZV9mb3VuZCksIChzZXR1cF9zdHJlYW1pbmcpLCAoc2V0dXBfc291cmNlKSwKLQkgIChnc3RfdXJpX2RlY29kZV9iaW5fY2hhbmdlX3N0YXRlKToKLQkgIE9ubHkgYWRkIGRlY29kZWJpbjIgd2hlbiB0aGUgdHlwZSBpcyBmb3VuZCBpbiBzdHJlYW1pbmcgbW9kZS4KLQkgIE1ha2UgdXJpZGVjb2RlYmluIGFzeW5jIHRvIFBBVVNFRCBldmVuIHdoZW4gd2UgZG9uJ3QgaGF2ZSBkZWNvZGViaW4yCi0JICBhZGRlZCB5ZXQuCi0KLTIwMDgtMDQtMDIgMTE6MDg6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogVXBkYXRlIHRoZSBlc3RpbWF0ZWQgaW5wdXQgZGF0YSB3aGVuIHdlIHB1c2ggb3V0IGEgYnVmZmVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKHVwZGF0ZV9vdXRfcmF0ZXMpLAotCSAgKGdzdF9xdWV1ZV9vcGVuX3RlbXBfbG9jYXRpb25fZmlsZSksCi0JICAoZ3N0X3F1ZXVlX2Nsb3NlX3RlbXBfbG9jYXRpb25fZmlsZSksIChnc3RfcXVldWVfaGFuZGxlX3NyY19ldmVudCksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpLCAoZ3N0X3F1ZXVlX3NldF9wcm9wZXJ0eSk6Ci0JICBVcGRhdGUgdGhlIGVzdGltYXRlZCBpbnB1dCBkYXRhIHdoZW4gd2UgcHVzaCBvdXQgYSBidWZmZXIuCi0JICBBZGQgc29tZSBkZWJ1ZyBpbmZvIGFib3V0IHRoZSB0ZW1wIGZpbGUuCi0JICBPbmx5IGZvcndhcmQgc3JjIGV2ZW50cyB3aGVuIHdlIGFyZSBub3QgdXNpbmcgYSB0ZW1wIGZpbGUuCi0JICBEb24ndCBibG9jayB0aGUgZHVyYXRpb24gcXVlcnksIHdlIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgYmV0dGVyLgotCSAgRG9uJ3QgbGVhayB0aGUgdGVtcCBmaWxlbmFtZS4KLQotMjAwOC0wMy0yNCAxNDowODoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBUaGUgcXVldWUgaXMgbmV2ZXIgZmlsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlIGF0IGFsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfaXNfZmlsbGVkKToKLQkgIFRoZSBxdWV1ZSBpcyBuZXZlciBmaWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gYnVmZmVycyBpbiB0aGUgcXVldWUgYXQgYWxsLgotCSAgRml4ZXMgIzUyMzk5My4KLQotMjAwOC0wMy0yMiAxNTowMDo1MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBVc2UgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyBldmVyeXdoZXJlIGZvciBHUGFyYW1TcGVjcyB0aGF0IHVzZSBzdGF0aWMgc3RyaW5ncyAoaS5lLiBhbGwpLiBUaGlzIGdpdmVzIHVzIGxlc3MgbWVtb3J5IHUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGV4dC9hbHNhL2dzdGFsc2FtaXhlcmVsZW1lbnQuYzoKLQkgIChnc3RfYWxzYV9taXhlcl9lbGVtZW50X2NsYXNzX2luaXQpOgotCSAgKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2FzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBleHQvYWxzYS9nc3RhbHNhc3JjLmM6IChnc3RfYWxzYXNyY19jbGFzc19pbml0KToKLQkgICogZXh0L2NkcGFyYW5vaWEvZ3N0Y2RwYXJhbm9pYXNyYy5jOgotCSAgKGdzdF9jZF9wYXJhbm9pYV9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9naW8vZ3N0Z2lvc2luay5jOiAoZ3N0X2dpb19zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBleHQvZ2lvL2dzdGdpb3NyYy5jOiAoZ3N0X2dpb19zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9naW8vZ3N0Z2lvc3RyZWFtc2luay5jOiAoZ3N0X2dpb19zdHJlYW1fc2lua19jbGFzc19pbml0KToKLQkgICogZXh0L2dpby9nc3RnaW9zdHJlYW1zcmMuYzogKGdzdF9naW9fc3RyZWFtX3NyY19jbGFzc19pbml0KToKLQkgICogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc2luay5jOiAoZ3N0X2dub21lX3Zmc19zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzcmMuYzogKGdzdF9nbm9tZV92ZnNfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9wYW5nby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRfb3ZlcmxheV9jbGFzc19pbml0KToKLQkgICogZXh0L3BhbmdvL2dzdHRleHRyZW5kZXIuYzogKGdzdF90ZXh0X3JlbmRlcl9jbGFzc19pbml0KToKLQkgICogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKGdzdF90aGVvcmFfZGVjX2NsYXNzX2luaXQpOgotCSAgKiBleHQvdGhlb3JhL3RoZW9yYWVuYy5jOiAoZ3N0X3RoZW9yYV9lbmNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC90aGVvcmEvdGhlb3JhcGFyc2UuYzogKGdzdF90aGVvcmFfcGFyc2VfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6IChnc3Rfdm9yYmlzX2VuY19jbGFzc19pbml0KToKLQkgICogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVydGVtcGxhdGUuYzoKLQkgIChnc3RfYXVkaW9fZmlsdGVyX3RlbXBsYXRlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YmFzZWF1ZGlvc2luay5jOgotCSAgKGdzdF9iYXNlX2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC1saWJzL2dzdC9hdWRpby9nc3RiYXNlYXVkaW9zcmMuYzoKLQkgIChnc3RfYmFzZV9hdWRpb19zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC1saWJzL2dzdC9jZGRhL2dzdGNkZGFiYXNlc3JjLmM6Ci0JICAoZ3N0X2NkZGFfYmFzZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC1saWJzL2dzdC9pbnRlcmZhY2VzL21peGVydHJhY2suYzoKLQkgIChnc3RfbWl4ZXJfdHJhY2tfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC1saWJzL2dzdC9ydHAvZ3N0YmFzZXJ0cGRlcGF5bG9hZC5jOgotCSAgKGdzdF9iYXNlX3J0cF9kZXBheWxvYWRfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC1saWJzL2dzdC9ydHAvZ3N0YmFzZXJ0cHBheWxvYWQuYzoKLQkgIChnc3RfYmFzZXJ0cHBheWxvYWRfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6Ci0JICAoZ3N0X2F1ZGlvX2NvbnZlcnRfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9hdWRpb3JhdGUvZ3N0YXVkaW9yYXRlLmM6IChnc3RfYXVkaW9fcmF0ZV9jbGFzc19pbml0KToKLQkgICogZ3N0L2F1ZGlvcmVzYW1wbGUvZ3N0YXVkaW9yZXNhbXBsZS5jOgotCSAgKGdzdF9hdWRpb3Jlc2FtcGxlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvYXVkaW90ZXN0c3JjL2dzdGF1ZGlvdGVzdHNyYy5jOgotCSAgKGdzdF9hdWRpb190ZXN0X3NyY19jbGFzc19pbml0KToKLQkgICogZ3N0L2dkcC9nc3RnZHBwYXkuYzogKGdzdF9nZHBfcGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluMi5jOiAoZ3N0X2RlY29kZV9iaW5fY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoZ3N0X3BsYXlfYmFzZV9iaW5fY2xhc3NfaW5pdCksCi0JICAocHJlcm9sbF91bmxpbmtlZCk6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChnc3RfcGxheV9iaW5fY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluMi5jOiAoZ3N0X3BsYXlfYmluX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYzogKGdzdF9wbGF5X3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9jbGFzc19pbml0KToKLQkgICogZ3N0L3BsYXliYWNrL2dzdHN0cmVhbWluZm8uYzogKGdzdF9zdHJlYW1faW5mb19jbGFzc19pbml0KToKLQkgICogZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXNlbGVjdG9yLmM6IChnc3Rfc2VsZWN0b3JfcGFkX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zdHJlYW1fc2VsZWN0b3JfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3R1cmlkZWNvZGViaW4uYzogKGdzdF91cmlfZGVjb2RlX2Jpbl9jbGFzc19pbml0KToKLQkgICogZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmM6IChnc3Rfc3ViX3BhcnNlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlfZmRfc2lua19jbGFzc19pbml0KToKLQkgICogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzaW5rLmM6IChnc3RfdGNwX2NsaWVudF9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jOiAoZ3N0X3RjcF9jbGllbnRfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuYzogKGdzdF90Y3Bfc2VydmVyX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmM6IChnc3RfdGNwX3NlcnZlcl9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC92aWRlb3JhdGUvZ3N0dmlkZW9yYXRlLmM6IChnc3RfdmlkZW9fcmF0ZV9jbGFzc19pbml0KToKLQkgICogZ3N0L3ZpZGVvc2NhbGUvZ3N0dmlkZW9zY2FsZS5jOiAoZ3N0X3ZpZGVvX3NjYWxlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdmlkZW90ZXN0c3JjL2dzdHZpZGVvdGVzdHNyYy5jOgotCSAgKGdzdF92aWRlb190ZXN0X3NyY19jbGFzc19pbml0KToKLQkgICogZ3N0L3ZvbHVtZS9nc3R2b2x1bWUuYzogKGdzdF92b2x1bWVfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy92NGwvZ3N0djRsZWxlbWVudC5jOiAoZ3N0X3Y0bGVsZW1lbnRfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy92NGwvZ3N0djRsbWpwZWdzaW5rLmM6IChnc3RfdjRsbWpwZWdzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvdjRsL2dzdHY0bG1qcGVnc3JjLmM6IChnc3RfdjRsbWpwZWdzcmNfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX2NsYXNzX2luaXQpOgotCSAgKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2NsYXNzX2luaXQpOgotCSAgVXNlIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgZXZlcnl3aGVyZSBmb3IgR1BhcmFtU3BlY3MgdGhhdCB1c2UKLQkgIHN0YXRpYyBzdHJpbmdzIChpLmUuIGFsbCkuIFRoaXMgZ2l2ZXMgdXMgbGVzcyBtZW1vcnkgdXNhZ2UsCi0JICBmZXdlciBhbGxvY2F0aW9ucyBhbmQgdGh1cyBsZXNzIG1lbW9yeSBkZWZyYWdtZW50YXRpb24uIERlcGVuZAotCSAgb24gY29yZSBDVlMgZm9yIHRoaXMuIEZpeGVzIGJ1ZyAjNTIzODA2LgotCi0yMDA3LTEyLTE0IDE4OjQ2OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IFVzZSBzZXBhcmF0ZSB0aW1lcnMgZm9yIGlucHV0IGFuZCBvdXRwdXQgcmF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAoZ3N0X3F1ZXVlX2luaXQpLCAoZ3N0X3F1ZXVlX2ZpbmFsaXplKSwKLQkgIChyZXNldF9yYXRlX3RpbWVyKSwgKHVwZGF0ZV9pbl9yYXRlcyksICh1cGRhdGVfb3V0X3JhdGVzKSwKLQkgIChnc3RfcXVldWVfbG9ja2VkX2VucXVldWUpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlKSwKLQkgIChnc3RfcXVldWVfY2hhaW4pLCAoZ3N0X3F1ZXVlX2xvb3ApOgotCSAgVXNlIHNlcGFyYXRlIHRpbWVycyBmb3IgaW5wdXQgYW5kIG91dHB1dCByYXRlcy4KLQkgIFBhdXNlIG1lYXN1cmluZyB0aGUgb3V0cHV0IHJhdGUgd2hlbiB3ZSBibG9jayBmb3IgbW9yZSBkYXRhLgotCSAgU2VlICM1MDMyNjIuCi0KLTIwMDctMTItMTQgMDk6MjQ6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogUGF1c2UgdGhlIHRpbWVyIHRvIG1lYXN1cmUgdGhlIGlucHV0IHJhdGUgd2hlbiB3ZSBibG9jayBiZWNhdXNlIHRoZSBxdWV1ZSBpcyBmaWxsZWQuIFNlZSAjNS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9jaGFpbik6Ci0JICBQYXVzZSB0aGUgdGltZXIgdG8gbWVhc3VyZSB0aGUgaW5wdXQgcmF0ZSB3aGVuIHdlIGJsb2NrIGJlY2F1c2UgdGhlCi0JICBxdWV1ZSBpcyBmaWxsZWQuIFNlZSAjNTAzMjYyLgotCi0yMDA3LTExLTMwIDE3OjQ3OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcGxheWJhY2svOiBSZWZhY3RvciBzb21lIGNvbW1vbiBjb2RlIHRvIGZpbHRlciBmYWN0b3JpZXMgYW5kIGNoZWNrIGNhcHMgY29tcGF0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3BsYXliYWNrL2dzdGZhY3RvcnlsaXN0cy5jOiAoY29tcGFyZV9yYW5rcyksIChwcmludF9mZWF0dXJlKSwKLQkgIChnZXRfZmVhdHVyZV9hcnJheSksIChkZWNvZGVyc19maWx0ZXIpLCAoc2lua3NfZmlsdGVyKSwKLQkgIChnc3RfZmFjdG9yeV9saXN0X2dldF9kZWNvZGVycyksIChnc3RfZmFjdG9yeV9saXN0X2dldF9zaW5rcyksCi0JICAoZ3N0X2ZhY3RvcnlfbGlzdF9maWx0ZXIpOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0ZmFjdG9yeWxpc3RzLmg6Ci0JICBSZWZhY3RvciBzb21lIGNvbW1vbiBjb2RlIHRvIGZpbHRlciBmYWN0b3JpZXMgYW5kIGNoZWNrIGNhcHMgY29tcGF0LgotCSAgKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4yLmM6IChnc3RfZGVjb2RlX2Jpbl9jbGFzc19pbml0KSwKLQkgIChnc3RfZGVjb2RlX2Jpbl9pbml0KSwgKGdzdF9kZWNvZGVfYmluX2Rpc3Bvc2UpLAotCSAgKGdzdF9kZWNvZGVfYmluX2F1dG9wbHVnX2NvbnRpbnVlKSwKLQkgIChnc3RfZGVjb2RlX2Jpbl9hdXRvcGx1Z19mYWN0b3JpZXMpLAotCSAgKGdzdF9kZWNvZGVfYmluX2F1dG9wbHVnX3NlbGVjdCksIChhbmFseXplX25ld19wYWQpLAotCSAgKGZpbmRfY29tcGF0aWJsZXMpOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbjIuYzogKGdzdF9wbGF5X2Jpbl9jbGFzc19pbml0KSwKLQkgIChnc3RfcGxheV9iaW5faW5pdCksIChnc3RfcGxheV9iaW5fZmluYWxpemUpLAotCSAgKGF1dG9wbHVnX2ZhY3Rvcmllc19jYiksIChhY3RpdmF0ZV9ncm91cCk6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKLQkgICogZ3N0L3BsYXliYWNrL2dzdHVyaWRlY29kZWJpbi5jOiAocHJveHlfdW5rbm93bl90eXBlX3NpZ25hbCksCi0JICAocHJveHlfYXV0b3BsdWdfY29udGludWVfc2lnbmFsKSwKLQkgIChwcm94eV9hdXRvcGx1Z19mYWN0b3JpZXNfc2lnbmFsKSwgKHByb3h5X2F1dG9wbHVnX3NlbGVjdF9zaWduYWwpLAotCSAgKHByb3h5X2RyYWluZWRfc2lnbmFsKToKLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mbyBhbmQgdXNlIGZhY3RvciBmaWx0ZXJpbmcgY29kZS4KLQotMjAwNy0xMS0xNiAxNTo0NDo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3BsYXliYWNrLzogQWRkIHBsYXliaW4yLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliYWNrLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9wbGF5YmFjay90ZXN0Ny5jOiAodXBkYXRlX3NjYWxlKSwgKHdhcm5pbmdfY2IpLCAoZXJyb3JfY2IpLAotCSAgKGVvc19jYiksIChhYm91dF90b19maW5pc2hfY2IpLCAobWFpbik6Ci0JICBBZGQgcGxheWJpbjIuCi0JICBBZGRlZCBnYXBsZXNzIHBsYXliYWNrIGV4YW1wbGUuCi0JICAqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uaDoKLQkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKLQkgICogZ3N0L3BsYXliYWNrL3Rlc3QuYzoKLQkgICogZ3N0L3BsYXliYWNrL2dzdHVyaWRlY29kZWJpbi5jOiAoZ3N0X3VyaV9kZWNvZGVfYmluX2NsYXNzX2luaXQpLAotCSAgKHBhZF9yZW1vdmVkX2NiKToKLQkgICogZ3N0L3BsYXliYWNrL2dzdHN0cmVhbWluZm8uaDoKLQkgIENoYW5nZSBlbWFpbC4KLQkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4yLmM6IChnc3RfcGxheV9iaW5fZ2V0X3R5cGUpLAotCSAgKGdzdF9wbGF5X2Jpbl9jbGFzc19pbml0KSwgKGluaXRfZ3JvdXApLCAoZ3N0X3BsYXlfYmluX2luaXQpLAotCSAgKGdzdF9wbGF5X2Jpbl9kaXNwb3NlKSwgKGdzdF9wbGF5X2Jpbl9zZXRfdXJpKSwKLQkgIChnc3RfcGxheV9iaW5fc2V0X3N1YnVyaSksIChnc3RfcGxheV9iaW5fc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcGxheV9iaW5fZ2V0X3Byb3BlcnR5KSwgKGdzdF9wbGF5X2Jpbl9oYW5kbGVfbWVzc2FnZSksCi0JICAocGFkX2FkZGVkX2NiKSwgKHBhZF9yZW1vdmVkX2NiKSwgKG5vX21vcmVfcGFkc19jYiksIChwZXJmb3JtX2VvcyksCi0JICAoZHJhaW5lZF9jYiksICh1bmxpbmtfZ3JvdXApLCAoYWN0aXZhdGVfZ3JvdXApLAotCSAgKHNldHVwX25leHRfc291cmNlKSwgKGdzdF9wbGF5X2Jpbl9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9wbGF5X2JpbjJfcGx1Z2luX2luaXQpOgotCSAgQWRkZWQgcmF3IGZpcnN0IHZlcnNpb24gb2YgcGxheWJpbjIuIERvZXMgY2hhaW5lZCBvZ2dzIGFuZCBnYXBsZXNzCi0JICBwbGF5YmFjayBmaW5lLiBObyBzdXBwb3J0IGZvciByYXcgc2lua3MgeWV0LiBObyB2aXN1YWxpc2F0aW9ucyBvcgotCSAgc3VidGl0bGVzIHlldC4KLQkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmM6IChnc3RfcGxheV9zaW5rX2dldF90eXBlKSwKLQkgIChnc3RfcGxheV9zaW5rX2NsYXNzX2luaXQpLCAoZ3N0X3BsYXlfc2lua19pbml0KSwKLQkgIChnc3RfcGxheV9zaW5rX2Rpc3Bvc2UpLCAoZ3N0X3BsYXlfc2lua192aXNfdW5ibG9ja2VkKSwKLQkgIChnc3RfcGxheV9zaW5rX3Zpc19ibG9ja2VkKSwgKGdzdF9wbGF5X3Npbmtfc2V0X3ZpZGVvX3NpbmspLAotCSAgKGdzdF9wbGF5X3Npbmtfc2V0X2F1ZGlvX3NpbmspLCAoZ3N0X3BsYXlfc2lua19zZXRfdmlzX3BsdWdpbiksCi0JICAoZ3N0X3BsYXlfc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X3BsYXlfc2lua19nZXRfcHJvcGVydHkpLAotCSAgKHBvc3RfbWlzc2luZ19lbGVtZW50X21lc3NhZ2UpLCAoZnJlZV9jaGFpbiksIChhZGRfY2hhaW4pLAotCSAgKGFjdGl2YXRlX2NoYWluKSwgKGdlbl92aWRlb19jaGFpbiksIChnZW5fdGV4dF9lbGVtZW50KSwKLQkgIChnZW5fYXVkaW9fY2hhaW4pLCAoZ2VuX3Zpc19lbGVtZW50KSwgKGdzdF9wbGF5X3NpbmtfZ2V0X21vZGUpLAotCSAgKGdzdF9wbGF5X3Npbmtfc2V0X21vZGUpLCAoZ3N0X3BsYXlfc2lua19yZXF1ZXN0X3BhZCksCi0JICAoZ3N0X3BsYXlfc2lua19yZWxlYXNlX3BhZCksIChnc3RfcGxheV9zaW5rX3NlbmRfZXZlbnRfdG9fc2luayksCi0JICAoZ3N0X3BsYXlfc2lua19zZW5kX2V2ZW50KSwgKGdzdF9wbGF5X3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmg6Ci0JICBBZGRlZCBFbGVtZW50IHRoYXQgYWJzdHJhY3RzIHRoZSBzaW5rcyBhbmQgdGhlaXIgcGlwZWxpbmVzIGZvciBwbGF5YmluMi4KLQotMjAwNy0xMC0xNSAxMTozODozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBGaXggcXVldWUgbmVnb3RpYXRpb24uIFNlZSAjNDg2NzU4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9pbml0KSwgKGdzdF9xdWV1ZV9wdXNoX29uZSk6Ci0JICBGaXggcXVldWUgbmVnb3RpYXRpb24uIFNlZSAjNDg2NzU4LgotCi0yMDA3LTA5LTIxIDE0OjM3OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IEZpeCBjb21waWxhdGlvbiB3cnQgcHJpbnRmIGFyZ3VtZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfcHVzaF9vbmUpOgotCSAgRml4IGNvbXBpbGF0aW9uIHdydCBwcmludGYgYXJndW1lbnRzLgotCi0yMDA3LTA5LTE3IDE3OjI0OjU1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgRml4IGEgYnVuY2ggb2YgY29tcGlsZSB3YXJuaW5ncyBzaG93biB3aXRoIEZvcnRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9wYW5nby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRfb3ZlcmxheV9pbml0KSwKLQkgIChnc3RfdGV4dF9vdmVybGF5X3NldF9wcm9wZXJ0eSk6Ci0JICAqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfaGFuZGxlX2RhdGFfcGFja2V0KToKLQkgICogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGJhc2VhdWRpb3NpbmsuYzoKLQkgIChnc3RfYmFzZV9hdWRpb19zaW5rX3JlbmRlcik6Ci0JICAqIGdzdC1saWJzL2dzdC9ydHAvZ3N0cnRjcGJ1ZmZlci5jOiAoZ3N0X3J0Y3BfbnRwX3RvX3VuaXgpLAotCSAgKGdzdF9ydGNwX3VuaXhfdG9fbnRwKToKLQkgICogZ3N0LWxpYnMvZ3N0L3J0c3AvZ3N0cnRzcG1lc3NhZ2UuYzogKGdzdF9ydHNwX21lc3NhZ2VfZ2V0X3R5cGUpOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3NlZWsvc2Vlay5jOiAoc2V0X3NjYWxlKToKLQkgIEZpeCBhIGJ1bmNoIG9mIGNvbXBpbGUgd2FybmluZ3Mgc2hvd24gd2l0aCBGb3J0ZS4KLQkgICogZ3N0L2F1ZGlvcmF0ZS9nc3RhdWRpb3JhdGUuYzoKLQkgIEFsd2F5cyBwdWxsIGluIGNvbmZpZy5oIGJlZm9yZSBpbmNsdWRpbmcgYW55IHN5c3RlbSBoZWFkZXJzLgotCi0yMDA3LTA5LTE3IDE2OjIyOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IEFsc28gZml4ICM0NzY1MTQgZm9yIHF1ZXVlMi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6ICh1cGRhdGVfYnVmZmVyaW5nKSwKLQkgIChnc3RfcXVldWVfbG9ja2VkX2ZsdXNoKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZSksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksCi0JICAoZ3N0X3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCksIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1bGwpOgotCSAgQWxzbyBmaXggIzQ3NjUxNCBmb3IgcXVldWUyLgotCi0yMDA3LTA4LTEwIDEwOjA4OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBQcmludGYgZm9ybWF0IGZpeGVzICgjNDY1MDI4KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6Ci0JICAqIGdzdC92aWRlb3JhdGUvZ3N0dmlkZW9yYXRlLmM6Ci0JICBQcmludGYgZm9ybWF0IGZpeGVzICgjNDY1MDI4KS4KLQotMjAwNy0wNi0yOCAxMTowNjo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBVc2Ugb3RoZXIgbWV0cmljcyBhcyB3ZWxsIHdoZW4gZXN0aW1hdGluZyB0aGUgYnVmZmVyIGxldmVsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGFwcGx5X3NlZ21lbnQpLCAodXBkYXRlX2J1ZmZlcmluZyk6Ci0JICBVc2Ugb3RoZXIgbWV0cmljcyBhcyB3ZWxsIHdoZW4gZXN0aW1hdGluZyB0aGUgYnVmZmVyIGxldmVsLgotCi0yMDA3LTA2LTI4IDEwOjIxOjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogU21hbGwgZGVidWcgaW1wcm92ZW1lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChtYWtlX2RlY29kZXIpLCAoc2V0dXBfc291cmNlKToKLQkgIFNtYWxsIGRlYnVnIGltcHJvdmVtZW50LgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChhcHBseV9zZWdtZW50KSwgKHVwZGF0ZV9idWZmZXJpbmcpLAotCSAgKHBsdWdpbl9pbml0KToKLQkgIFR3ZWFrIHRoZSByYXRlIGVzdGltYXRpb24gcGVyaW9kLgotCSAgV2hlbiBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIGZpbGxlZG5lc3MgaW4gcmF0ZSBlc3RpbWF0aW9uIG1vZGUsIGRvbid0Ci0JICBtaXggaXQgd2l0aCBvdGhlciBtZXRyaWNzLgotCi0yMDA3LTA2LTE2IDAzOjQyOjE0ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBGaXggY29tcGlsZSBlcnJvciBmcm9tIGlnbm9yZWQgcmV0dXJuIHZhbHVlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzoKLQkgIEZpeCBjb21waWxlIGVycm9yIGZyb20gaWdub3JlZCByZXR1cm4gdmFsdWUuCi0KLTIwMDctMDYtMTMgMTg6MjA6NTcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogRml4IGJ1aWxkIG9uIE1hY09TWC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfY3JlYXRlX3JlYWQpOgotCSAgRml4IGJ1aWxkIG9uIE1hY09TWC4KLQotMjAwNy0wNi0xMiAwODozODowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBGaXggYSBkaXZpc2lvbiBieSB6ZXJvIHdoZW4gdGhlIG1heCBwZXJjZW50IGlzIDw9IDAuIEZpeGVzICM0NDY1NzIuIGFsc28gdXBkYXRlIHRoZSBidWZmZXJpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoZXMgYnk6IFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzYW50b3MgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAodXBkYXRlX2J1ZmZlcmluZyksCi0JICAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKToKLQkgIEZpeCBhIGRpdmlzaW9uIGJ5IHplcm8gd2hlbiB0aGUgbWF4IHBlcmNlbnQgaXMgPD0gMC4gRml4ZXMgIzQ0NjU3Mi4KLQkgIGFsc28gdXBkYXRlIHRoZSBidWZmZXJpbmcgc3RhdHVzIHdoZW4gcmVjZWl2aW5nIGV2ZW50cy4gRml4ZXMgIzQ0NjU1MS4KLQotMjAwNy0wNi0xMSAxMTozMjoyNiArMDAwMCAgVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NhbnRvc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogV2FpdCBmb3IgcHJlcm9sbCBiZWZvcmUgYXR0ZW1wdGluZyB0byBmb3J3YXJkIGEgZHVyYXRpb24gcXVlcnkgdXBzdHJlYW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc2FudG9zIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9wZWVyX3F1ZXJ5KSwKLQkgIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSk6Ci0JICBXYWl0IGZvciBwcmVyb2xsIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGZvcndhcmQgYSBkdXJhdGlvbiBxdWVyeSB1cHN0cmVhbS4KLQkgIEZpeGVzICM0NDU1MDUuCi0KLTIwMDctMDYtMDcgMDk6MTE6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogRml4IGNvbXBpbGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9nZXRfcmFuZ2UpOgotCSAgRml4IGNvbXBpbGF0aW9uLgotCi0yMDA3LTA2LTA2IDEzOjM2OjI2ICswMDAwICBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc2FudG9zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBBZGQgcHVsbCBiYXNlZCBzY2hlZHVsaW5nIGFuZCBmaXggc29tZSBkZWFkbG9ja3MuIEZpeGVzICM0NDQ1MjMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc2FudG9zIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9pbml0KSwKLQkgIChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLCAoZ3N0X3F1ZXVlX2NoYWluKSwKLQkgIChnc3RfcXVldWVfZ2V0X3JhbmdlKSwgKGdzdF9xdWV1ZV9zcmNfY2hlY2tnZXRyYW5nZV9mdW5jdGlvbiksCi0JICAoZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCksIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVsbCk6Ci0JICBBZGQgcHVsbCBiYXNlZCBzY2hlZHVsaW5nIGFuZCBmaXggc29tZSBkZWFkbG9ja3MuIEZpeGVzICM0NDQ1MjMuCi0JICBEb2VzIG5vdCB5ZXQgY29tcGxldGVseSB3b3JrIGJlY2F1c2UgZHVyYXRpb24gcXVlcmllcyB1cHN0cmVhbSB3b24ndAotCSAgYmxvY2sgeWV0LgotCi0yMDA3LTA2LTA2IDA5OjA4OjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBTb21lIG1vcmUgZnNlZWtvIGNoZWNrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9jcmVhdGVfcmVhZCk6Ci0JICBTb21lIG1vcmUgZnNlZWtvIGNoZWNrcy4KLQotMjAwNy0wNi0wNSAxNzowMjoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiBJbmNsdWRlIHN0ZGlvIHRvIGRlZmluZSBmc2Vla28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3BsYXliYWNrL2dzdHF1ZXVlMi5jOiAoZ3N0X3F1ZXVlX2hhdmVfZGF0YSksCi0JICAoZ3N0X3F1ZXVlX2NyZWF0ZV9yZWFkKSwgKGdzdF9xdWV1ZV9yZWFkX2l0ZW1fZnJvbV9maWxlKSwKLQkgIChnc3RfcXVldWVfb3Blbl90ZW1wX2xvY2F0aW9uX2ZpbGUpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKToKLQkgIEluY2x1ZGUgc3RkaW8gdG8gZGVmaW5lIGZzZWVrby4KLQotMjAwNy0wNi0wNSAxNjoxNDoyMyArMDAwMCAgVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NhbnRvc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogQWRkIHN1cHBvcnQgZm9yIGZpbGViYXNlZCBidWZmZXJpbmcuIEZpeGVzICM0NDEyNjQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc2FudG9zIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKGdzdF9xdWV1ZV9jbGFzc19pbml0KSwKLQkgIChnc3RfcXVldWVfaW5pdCksIChnc3RfcXVldWVfZmluYWxpemUpLAotCSAgKGdzdF9xdWV1ZV93cml0ZV9idWZmZXJfdG9fZmlsZSksIChnc3RfcXVldWVfaGF2ZV9kYXRhKSwKLQkgIChnc3RfcXVldWVfY3JlYXRlX3JlYWQpLCAoZ3N0X3F1ZXVlX3JlYWRfaXRlbV9mcm9tX2ZpbGUpLAotCSAgKGdzdF9xdWV1ZV9vcGVuX3RlbXBfbG9jYXRpb25fZmlsZSksCi0JICAoZ3N0X3F1ZXVlX2Nsb3NlX3RlbXBfbG9jYXRpb25fZmlsZSksIChnc3RfcXVldWVfbG9ja2VkX2ZsdXNoKSwKLQkgIChnc3RfcXVldWVfbG9ja2VkX2VucXVldWUpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlKSwKLQkgIChnc3RfcXVldWVfaXNfZW1wdHkpLCAoZ3N0X3F1ZXVlX2lzX2ZpbGxlZCksCi0JICAoZ3N0X3F1ZXVlX2NoYW5nZV9zdGF0ZSksIChnc3RfcXVldWVfc2V0X3RlbXBfbG9jYXRpb24pLAotCSAgKGdzdF9xdWV1ZV9zZXRfcHJvcGVydHkpOgotCSAgQWRkIHN1cHBvcnQgZm9yIGZpbGViYXNlZCBidWZmZXJpbmcuIEZpeGVzICM0NDEyNjQuCi0KLTIwMDctMDUtMTcgMTU6MjI6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogVHdlYWsgdGhlIGJ1ZmZlcmluZyB0aHJlc2hvbGRzIGEgbGl0dGxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wbGF5YmFjay9nc3RxdWV1ZTIuYzogKHVwZGF0ZV9yYXRlcyk6Ci0JICBUd2VhayB0aGUgYnVmZmVyaW5nIHRocmVzaG9sZHMgYSBsaXR0bGUuCi0JICBVcGRhdGUgdGhlIGJ1ZmZlciBzaXplIHdpdGggdGhlIHByZXZpb3VzbHkgY2FsY3VsYXRlIHJhdGUgaW5zdGVhZCBvZgotCSAgb25seSB3aGVuIHdlIGNhbGN1bGF0ZSBhIG5ldyByYXRlIHNvIHRoYXQgd2UgZ2V0IHNtb290aGVyIGJ1ZmZlcmluZwotCSAgdXBkYXRlcy4KLQkgICogZ3N0L3BsYXliYWNrL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0dXJpZGVjb2RlYmluLmM6IChnc3RfdXJpX2RlY29kZV9iaW5fYmFzZV9pbml0KSwKLQkgIChnc3RfdXJpX2RlY29kZV9iaW5fY2xhc3NfaW5pdCksIChnc3RfdXJpX2RlY29kZV9iaW5faW5pdCksCi0JICAoZ3N0X3VyaV9kZWNvZGVfYmluX2ZpbmFsaXplKSwgKGdzdF91cmlfZGVjb2RlX2Jpbl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF91cmlfZGVjb2RlX2Jpbl9nZXRfcHJvcGVydHkpLCAodW5rbm93bl90eXBlKSwKLQkgIChhZGRfZWxlbWVudF9zdHJlYW0pLCAobm9fbW9yZV9wYWRzX2Z1bGwpLCAobm9fbW9yZV9wYWRzKSwKLQkgIChzb3VyY2Vfbm9fbW9yZV9wYWRzKSwgKG5ld19kZWNvZGVkX3BhZCksIChhcnJheV9oYXNfdmFsdWUpLAotCSAgKGdlbl9zb3VyY2VfZWxlbWVudCksIChoYXNfYWxsX3Jhd19jYXBzKSwgKGFuYWx5c2Vfc291cmNlKSwKLQkgIChyZW1vdmVfZGVjb2RlcnMpLCAobWFrZV9kZWNvZGVyKSwgKHJlbW92ZV9zb3VyY2UpLAotCSAgKHNvdXJjZV9uZXdfcGFkKSwgKHNldHVwX3NvdXJjZSksIChkZWNvZGVyX3F1ZXJ5X2luaXQpLAotCSAgKGRlY29kZXJfcXVlcnlfZHVyYXRpb25fZm9sZCksIChkZWNvZGVyX3F1ZXJ5X2R1cmF0aW9uX2RvbmUpLAotCSAgKGRlY29kZXJfcXVlcnlfcG9zaXRpb25fZm9sZCksIChkZWNvZGVyX3F1ZXJ5X3Bvc2l0aW9uX2RvbmUpLAotCSAgKGRlY29kZXJfcXVlcnlfbGF0ZW5jeV9mb2xkKSwgKGRlY29kZXJfcXVlcnlfbGF0ZW5jeV9kb25lKSwKLQkgIChkZWNvZGVyX3F1ZXJ5X3NlZWtpbmdfZm9sZCksIChkZWNvZGVyX3F1ZXJ5X3NlZWtpbmdfZG9uZSksCi0JICAoZGVjb2Rlcl9xdWVyeV9nZW5lcmljX2ZvbGQpLCAoZ3N0X3VyaV9kZWNvZGVfYmluX3F1ZXJ5KSwKLQkgIChnc3RfdXJpX2RlY29kZV9iaW5fY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQkgIE5ldyBlbGVtZW50IHRoYXQgaW50ZXJncmF0ZXMgYSBzb3VyY2UsIG9wdGlvbmFsIGJ1ZmZlcmluZyBlbGVtZW50IGFuZAotCSAgZGVjb2RlYmluLgotCi0yMDA3LTA1LTE3IDEzOjM2OjExICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IGZpeCBidWlsZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfZ2V0X3R5cGUpLAotCSAgKGdzdF9xdWV1ZV9jbGFzc19pbml0KSwgKGdzdF9xdWV1ZV9maW5hbGl6ZSksICh1cGRhdGVfdGltZV9sZXZlbCksCi0JICAoYXBwbHlfc2VnbWVudCksIChhcHBseV9idWZmZXIpLCAodXBkYXRlX2J1ZmZlcmluZyksCi0JICAocmVzZXRfcmF0ZV90aW1lciksICh1cGRhdGVfcmF0ZXMpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCksCi0JICAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9pc19maWxsZWQpLAotCSAgKGdzdF9xdWV1ZV9jaGFpbiksIChnc3RfcXVldWVfcHVzaF9vbmUpLCAoZ3N0X3F1ZXVlX2xvb3ApLAotCSAgKHBsdWdpbl9pbml0KToKLQkgIGZpeCBidWlsZC4KLQotMjAwNy0wNS0xNyAxMTo1Nzo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3BsYXliYWNrLzogT24gb3VyIHdheSB0byBwbGF5YmluMiB0aGlzIGlzIHRoZSBuZXcgbmV0d29yayBxdWV1ZSB0aGF0IGRvZXMgYnVmZmVyaW5nIGFsbCBieSBpdHNlbGYgdXNpbmcgaGlnaCBhbmQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3BsYXliYWNrL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGxheWJhY2svZ3N0cXVldWUyLmM6IChnc3RfcXVldWVfZ2V0X3R5cGUpLAotCSAgKGdzdF9xdWV1ZV9jbGFzc19pbml0KSwgKGdzdF9xdWV1ZV9pbml0KSwgKGdzdF9xdWV1ZV9maW5hbGl6ZSksCi0JICAoZ3N0X3F1ZXVlX2dldGNhcHMpLCAoZ3N0X3F1ZXVlX2J1ZmZlcmFsbG9jKSwKLQkgIChnc3RfcXVldWVfYWNjZXB0Y2FwcyksICh1cGRhdGVfdGltZV9sZXZlbCksIChhcHBseV9zZWdtZW50KSwKLQkgIChhcHBseV9idWZmZXIpLCAodXBkYXRlX2J1ZmZlcmluZyksIChyZXNldF9yYXRlX3RpbWVyKSwKLQkgICh1cGRhdGVfcmF0ZXMpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCksCi0JICAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9pc19lbXB0eSksCi0JICAoZ3N0X3F1ZXVlX2lzX2ZpbGxlZCksIChnc3RfcXVldWVfY2hhaW4pLCAoZ3N0X3F1ZXVlX3B1c2hfb25lKSwKLQkgIChnc3RfcXVldWVfbG9vcCksIChnc3RfcXVldWVfaGFuZGxlX3NyY19ldmVudCksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpLCAoZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCksCi0JICAoZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9xdWV1ZV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9xdWV1ZV9zZXRfcHJvcGVydHkpLCAoZ3N0X3F1ZXVlX2dldF9wcm9wZXJ0eSksIChwbHVnaW5faW5pdCk6Ci0JICBPbiBvdXIgd2F5IHRvIHBsYXliaW4yIHRoaXMgaXMgdGhlIG5ldyBuZXR3b3JrIHF1ZXVlIHRoYXQgZG9lcyBidWZmZXJpbmcKLQkgIGFsbCBieSBpdHNlbGYgdXNpbmcgaGlnaCBhbmQgbG93IHdhdGVybWFya3MuIEl0IGNhbiBhbHNvIG1lYXN1cmUgdXAgYW5kCi0JICBkb3duc3RyZWFtIGJhbmR3aWR0aCB0byBvcHRpbWFsbHkgc2l6ZSB0aGUgcXVldWUuCi0KLTIwMDktMTAtMjggMjI6MDM6NDQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2U6IEZpeCBtZW1sZWFrIG9mIHVudXNlZCBkZWxheWVkIGxpbmtzCi0JICBBdHRhY2ggdGhlIERlbGF5ZWRMaW5rIHN0cnVjdHVyZSB0byB0aGUgZWxlbWVudCwgc28gdGhhdCB3aGVuCi0JICB0aGUgZWxlbWVudCBpcyBkaXNwb3NlZCwgdGhlIERlbGF5ZWRMaW5rIGlzIGZyZWVkLgotCi0yMDA5LTA5LTA5IDE1OjM3OjExIC0wNTAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDogbWFrZSBfZml4YXRlX2NhcHMoKSBhbHNvIHRydW5jYXRlIHdoZW4gbmVlZGVkCi0JICBUaGUgZGVmYXVsdCBnc3RfcGFkX2ZpeGF0ZV9jYXBzKCkgcHJldmlvdXNseSB3b3VsZCBvbmx5IGZpeGF0ZSBlYWNoIGluZGl2aWR1YWwKLQkgIHN0cnVjdC4gSW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgc3RydWN0cywgdGhlIHJlc3VsdGluZyBjYXBzIHdvdWxkIHN0aWxsIG5vdAotCSAgYmUgZml4ZWQuIEluIHRoZSBzcGlyaXQgb2YgaG93IGluZGl2aWR1YWwgc3RydWN0cyBhcmUgZml4YXRlZCwgdGhpcyBwYXRjaAotCSAgY2hhbmdlcyBnc3RfcGFkX2ZpeGF0ZV9jYXBzKCkgdG8gcmVtb3ZlIGFsbCBidXQgdGhlIGZpcnN0IHN0cnVjdC4KLQkgIEZpeGVzICM1OTU4ODYKLQotMjAwOS0wOS0yMSAxMTo0NDoxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGluZm86IGZpeCBkb2NzCi0KLTIwMDktMTAtMjggMDk6MjY6MzIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGluZGV4LmM6Ci0JKiBnc3QvZ3N0aW5kZXhmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kLmM6Ci0JKiBnc3QvZ3N0eG1sLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSAgb3B0aW1pc2F0aW9uIDogVXNlIGdfb2JqZWN0X25ld3Ygd2hlcmUgcG9zc2libGUuCi0JICBUaGlzIGF2b2lkczoKLQkgICogdHJpcGxlLWNoZWNraW5nIGZvciB0aGUgR1R5cGUgd2hlbiB0eXBlLWNoZWNraW5nIGlzIGVuYWJsZWQgKHNlZSAjNTk3MjYwKQotCSAgKiBBdm9pZHMgZ29pbmcgdGhyb3VnaCBhbiBleHBlbnNpdmUgbm8tYXJndW1lbnQgY2hlY2tpbmcgd2hpY2ggbGFuZGVkIGluCi0JICBnbGliLTIuMjIKLQkgICogQXZvaWRzIGdvaW5nIHRocm91Z2ggMiBleHRyYWMgZnVuY3Rpb25zIChnX29iamVjdF9uZXcgLT4gZ19vYmplY3RfbmV3X3ZhbGlzdCkKLQotMjAwOS0xMC0yOCAxMDoxNToxMiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkgIGRvY3M6IGluY2x1ZGUgYW5ub3RhdGlvbiBnbG9zc2FyeSB0byBoYXZlIHdvcmtpbmcgbGlua3MuCi0KLTIwMDktMTAtMjggMTA6MTQ6MzYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdC5jOgotCSAgYW5ub3RhdGlvbnM6IGFkZCBhbm5vdGF0aW9ucyB0byBnc3RfaW5pdF9jaGVjayB0b28KLQotMjAwOS0xMC0yOCAwOTo1ODo1MiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBkb2NzOiB0ZWxsIG1vcmUgYWJvdXQgd2hhdCBoYXBwZW5zIGluIGdzdF9pbml0LgotCSAgQWRkIGxpbmtzIHRvIGdzdF91cGRhdGVfcmVnaXN0cnkgYW5kIHRoZSBlbnYtdmFycy4KLQotMjAwOS0xMC0yOCAwOToyMTowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0LmM6Ci0JICBkb2NzOiByZW1vdmUgcmVmZXJlbmNlIHRvIE9HSSBhbmQgcmVwaHJhc2Ugc2VjdGlvbnMgZG9jcwotCSAgVGhlIE9HSSBsaW5rcyBhcmUgZGVhZCwgc28gcmVtb3ZlIHRoZW0uIEFsc28gcmVtb3ZlIHRoZSBwYXJhZ3JhcGggdGhhdCBwb2ludGVkCi0JICB0byBPR0kgYW5kIERTLiBPbmx5IG1lbnRpb25pbmcgRFMgdGhlcmUgbWFkZSBpdCBhIGJ1dCBwb2ludGxlc3MuIEFkZCBhIGdlbmVyaWMKLQkgIHBhcmFncmFwaCBpbnN0ZWFkIHRoYXQgdGVsbHMgYSBiaXQgYWJvdXQgdGhlIHVzZWNhc2VzIGdzdHJlYW1lciBjb3ZlcnMuCi0KLTIwMDktMTAtMjggMDA6Mjk6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGluZGV4LmM6Ci0JKiBnc3QvZ3N0aW5kZXhmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFza3Bvb2wuYzoKLQkqIGdzdC9nc3R4bWwuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6Ci0JICBSZW1vdmUgR1NUX0RFQlVHX0ZVTkNQVFIgd2hlcmUgdGhleSdyZSBwb2ludGxlc3MKLQkgIFRoZXJlJ3Mgbm90IG11Y2ggcG9pbnQgaW4gdXNpbmcgR1NUX0RFQlVHX0ZVTkNQVFIgd2l0aCBHT2JqZWN0Ci0JICB2aXJ0dWFsIGZ1bmN0aW9ucyBzdWNoIGFzIGdldF9wcm9wZXJ0eSwgc2V0X3Byb3BlcnksIGZpbmFsaXplIGFuZAotCSAgZGlzcG9zZSwgc2luY2UgdGhleSdsbCBuZXZlciBiZSB1c2VkIGJ5IGFueW9uZSBhbnl3YXkuIFNhdmVzIGEKLQkgIGZldyBieXRlcyBhbmQgcG9zc2libHkgYSB0ZW50aCBvZiBhIHBvbGFyIGJlYXIuCi0KLTIwMDktMTAtMjggMDA6MDc6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIGNhcHNmaWx0ZXI6IHNwcmlua2xlIHNvbWUgR1NUX0RFQlVHX0ZVTkNQVFIKLQotMjAwOS0xMC0yNyAxNTo0NzozOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKLQkgIGRlc2lnbjogYWRkIHNvbWUgaWRlYXMgZm9yIFNLSVAgbW9kZSB0cmlja21vZGVzCi0KLTIwMDktMTAtMjMgMTA6MjA6MDIgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogYnVmZmVyaW5nIGlzIGltcGxlbWVudGVkIG5vdwotCi0yMDA5LTEwLTIyIDIxOjI0OjI0IC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgotCSAgbXVsdGlxdWV1ZTogbWFrZSBzdXJlIHBlcmNlbnQgaW5jcmVhc2VzCi0JICBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IHBvc3RlZCBwZXJjZW50IG1lc3NhZ2UgYW5kIG1ha2Ugc3VyZSB0aGUgbmV4dCBwZXJjZW50Ci0JICBtZXNzYWdlcyBhcmUgc3RyaWN0bHkgaW5jcmVhc2luZy4KLQotMjAwOS0xMC0yMiAxNjozODoxMiAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiByZWZhY3RvciBidWZmZXJpbmcgY29kZQotCSAgTW92ZSB0aGUgYnVmZmVyaW5nIHVwZGF0ZSBjb2RlIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gY2FsbCBpdAotCSAgd2hlbiB0aGUgYnVmZmVyaW5nIHN0YXRlIGNoYW5nZXMgZHVlIHRvIEVPUy4KLQkgIEF2b2lkIGRpdmlkaW5nIGJ5IDAuCi0KLTIwMDktMTAtMjIgMTQ6MDk6MDEgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBhZGQgYnVmZmVyaW5nIHN1cHBvcnQKLQkgIEFkZCBzdXBwb3J0IGZvciBidWZmZXJpbmcgbW9kZSB3aGVyZSB3ZSBwb3N0IEJVRkZFUklORyBtZXNzYWdlcyBiYXNlZCBvbiB0aGUKLQkgIGxldmVsIG9mIHRoZSBxdWV1ZXMuIEl0IGN1cnJlbnRseSBvcGVyYXRlcyBvbiB0aGUgZmlyc3QgcXVldWUgdGhhdCBnb2VzIG92ZXIgb3IKLQkgIHVuZGVyIHRoZSBoaWdoL2xvdyB0aHJlc2hvbGRzLgotCi0yMDA5LTEwLTIyIDE0OjA3OjMxIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IGRvbid0IGNoZWNrIHZpc2libGUgaXRlbXMgaW4gYnVmZmVyaW5nCi0JICBJbiBidWZmZXJpbmcgbW9kZSB3ZSB3YW50IHRvIGlnbm9yZSB0aGUgbWF4IHZpc2libGUgaXRlbXMgdG8gZGVjaWRlIHdoZW4gdGhlCi0JICBxdWV1ZSBpcyBmaWxsZWQuIEluc3RlYWQsIHdlIG9ubHkgbG9vayBhdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZC9vciB0aW1lIGluIHRoZQotCSAgcXVldWUuCi0KLTIwMDktMTAtMjEgMTE6MzA6NDAgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBob29rIHVwIGxvdy9oaWdoIHBlcmNlbnQKLQkgIEhvb2sgdXAgdGhlIGxvdy9oaWdoIHBlcmNlbnQgcHJvcGVydGllcyBmb3IgdGhlIGJ1ZmZlcmluZyBtb2RlLgotCi0yMDA5LTEwLTIxIDExOjI0OjQ3IC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgotCSAgbXVsdGlxdWV1ZTogaG9vayB1cCBwcm9wZXJ0eSBmb3IgYnVmZmVyaW5nCi0KLTIwMDktMTAtMjIgMTU6MjE6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogc21hbGwgY2xlYW51cHMKLQkgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW9uCi0JICBGaXggc29tZSB0eXBvCi0KLTIwMDktMTAtMjIgMDk6NDE6NTIgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogYWRkIEZJWE1FIGZvciB3cm9uZyBjb2RlCi0JICBOZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24KLQotMjAwOS0xMC0yMSAxNDoyMDoyOSAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBmaXggZGVidWcgb3V0cHV0Ci0KLTIwMDktMTAtMjEgMTQ6MTU6MDUgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogYXZvaWQgc2hhZG93aW5nIGZ1bmN0aW9uIGFyZ3VtZW50Ci0JICBEb24ndCBzaGFkb3cgdGhlIHNxIGFyZ3VtZW50IGluIHRoZSB1bmRlcnJ1bl9jYiBmdW5jdGlvbiBidXQgdXNlCi0JICBhIGRpZmZlcmVudCB2YXJpYWJsZSBuYW1lIHRvIGl0ZXJhdGUgdGhlIG90aGVyIHF1ZXVlcy4KLQkgIFVzZSB0aGUgc2FtZSB2YXJpYWJsZSBuYW1lIGluIHRoZSBvdmVycnVuX2NiIGZ1bmN0aW9uLgotCi0yMDA5LTEwLTIxIDE0OjEyOjEyIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IG1ha2UgcXVldWUgYXJnIGV4cGxpY2l0Ci0JICBNYWtlIHRoZSBxdWV1ZSBhcmd1bWVudCB0byBJU19GSUxMRUQgZXhwbGljaXQKLQotMjAwOS0xMC0yMSAxMToxNzowOCAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBmaXggcHJvcGVydGllcwotCSAgRml4IHByb3BlcnRpZXMsIG1ha2UgdGhlIGV4dHJhLXNpemUgcHJvcGVydGllcyBhcyBub3QgaW1wbGVtZW50ZWQuCi0KLTIwMDktMTAtMjUgMjE6MzU6MDkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IGFsbG93IHRvIGhpZGUvc2hvdyBwYWQgc3RhdHVzIHdpdGggZ3JhcGhkZXRhaWxzIGZsYWcKLQotMjAwOS0xMC0yNCAxMzoxNDoyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkgIHR5cGVmaW5kaGVscGVyOiBSZW1vdmUgb2Jzb2xldGUgRklYTUUKLQkgIEl0J3Mgbm90IG5lY2Vzc2FyeSAoYW5kIG5vdCBhIGdvb2QgaWRlYSkgdG8gY2FjaGUgdGhlIHR5cGVmaW5kIGZhY3RvcnkKLQkgIGxpc3QgYW55bW9yZS4KLQotMjAwOS0xMC0yNCAxMTo1ODoyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JICByZWdpc3RyeTogcHJpdmF0ZSBpcyBhIEMrKyBrZXl3b3JkLCBkb24ndCB1c2UgaXQKLQkgIC4uLm90aGVyd2lzZSBDKysgY29tcGlsZXJzIHdpbGwgY29tcGxhaW4gd2hlbiBpbmNsdWRpbmcgZ3N0cmVnaXN0cnkuaAotCi0yMDA5LTEwLTI0IDEwOjIxOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JICBkb2NzOiBhZGQgU2luY2UgdGFnIHRvIGRvY3MgZm9yIG5ldyBBUEkKLQkgIEFuZCB0ZWxsIGd0ay1kb2MgdGhhdCBHc3RSZWdpc3RyeVByaXZhdGUgaXMgcHJpdmF0ZS4KLQotMjAwOS0xMC0yMSAwOTo0ODo0MSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JICB0eXBlZmluZDogS2VlcCB0eXBlZmluZCBmYWN0b3JpZXMgc29ydGVkIGluIHRoZSByZWdpc3RyeS4gRml4ZXMgIzU5OTE0NwotCSAgVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGRvIHRoZSBzb3J0aW5nIGV2ZXJ5dGltZSB3ZSB1c2UgdHlwZWZpbmQKLQkgIFRoZSBiZWhhdmlvdXIgb2YgZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0IGhhcyBzdWJ0bGVseSBjaGFuZ2VkCi0JICBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgb3JkZXIgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkLCB3aGVyZWFzIG5vdwotCSAgaXQgcmV0dXJucyB0aGVtIHNvcnRlZCBieSByYW5rIGFuZCB0aGVuIGJ5IG5hbWUuCi0KLTIwMDktMTAtMjEgMDk6NDU6NDcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IENhY2hlIGVsZW1lbnQgYW5kIHR5cGVmaW5kIGZhY3Rvcmllcy4gRml4ZXMgNTk4ODk2Ci0JICBUaGlzIGF2b2lkcyB1bm5lZWRlZCBsaXN0L2ZpbHRlcmluZyBpZiB0aGUgcmVnaXN0cnkgaGFzbid0IGNoYW5nZWQKLQotMjAwOS0xMC0yMSAwOTo0MDo0OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBnc3RwbHVnaW5mZWF0dXJlOiBBUEkgOiBuZXcgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weSgpIG1ldGhvZAotCSAgVGhpcyBhbGxvd3MgY29weWluZyBBTkQgaW5jcmVtZW50aW5nIHRoZSByZWZjb3VudCBhdCB0aGUgc2FtZSB0aW1lLAotCSAgYXZvaWRpbmcgYSBkb3VibGUgaXRlcmF0aW8gb2YgdGhlIEdMaXN0Ci0KLTIwMDktMTAtMjQgMTA6MDU6NTkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JICBnc3RyZWdpc3RyeTogQWRkIGEgY29va2llIGZvciBkZXRlY3RpbmcgZmVhdHVyZSBsaXN0IGNoYW5nZXMKLQkgIFdlIGFsc28gY3JlYXRlIGEgcHJpdmF0ZSBzdHJ1Y3R1cmUsIHNpbmNlIHdlIHdpbGwgbmVlZCB0byBhZGQgbW9yZQotCSAgZGF0YSB0aGVyZSBpbiBmb2xsb3dpbmcgcGF0Y2hlcy4KLQotMjAwOS0xMC0yMyAxMzoxOTowNCAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIG1lc3NhZ2U6IGRvbid0IHVzZSB0eXBlY2hlY2tpbmcgY2FzdCBtYWNyb3MKLQkgIFNpbXBseSB1c2UgY2FzdGluZyBtYWNyb3MgZm9yIGFjY2Vzc2luZyB0aGUgbWVzc2FnZSBmaWVsZHMgbGlrZSB3ZSBkbyBmb3IKLQkgIGJ1ZmZlcnMgYW5kIGV2ZW50cy4gQXZvaWRzIHNvbWUgY29zdGx5IHR5cGVjaGVja2luZyB0aGF0IGRvZXMgbm90IHJlYWxseSBidXkgdXMKLQkgIG11Y2guCi0KLTIwMDktMTAtMjMgMTM6MTM6NTIgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBSZXZlcnQgImdzdG1lc3NhZ2U6IEF2b2lkIGV4cGVuc2l2ZSBzcmMvdHlwZS90aW1lc3RhbXAgZmV0Y2guIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA2MWNmOTNhMzM0Yjc5YTJkODQ5M2U1MzFjYzQ0YmE0NWE0MjA5ODA1LgotCi0yMDA5LTEwLTIzIDE3OjUxOjI3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgZ3N0bWVzc2FnZTogQXZvaWQgZXhwZW5zaXZlIHNyYy90eXBlL3RpbWVzdGFtcCBmZXRjaC4KLQkgIElmIHdlJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHdlIGhhdmUgYSB2YWxpZCBtZXNzYWdlLCB1c2UgdGhlIGVudHJpZXMKLQkgIGRpcmVjdGx5LgotCi0yMDA5LTEwLTIzIDE3OjQ3OjQzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgZ3N0Y2FwczogVXNlIGlubGluZWQgdmVyc2lvbiBvZiBfaXNfYW55KCkvX2lzX2VtcHR5KCkKLQkgIENBUFNfSVNfQU5ZIGFuZCBDQVBTX0lTX0VNUFRZIGFyZSB0aGUgZXF1aXZhbGVudCBvZiB0aGVpciBnc3RfY2Fwc18qCi0JICBjb3VudGVycGFydCBleGNlcHQgdGhhdCB0aGV5IGF2b2lkIHRoZSB0eXBlY2hlY2tpbmcgYW5kIGFyZSBpbmxpbmVkLgotCSAgQ0FQU19JU19FTVBUWV9TSU1QTEUgb25seSBjaGVja3MgZm9yIGVtcHR5IGNhcHMgKHdpdGhvdXQgY2hlY2tpbmcgaWYKLQkgIHRoZSBjYXBzIGlzIEFOWSkuCi0KLTIwMDktMTAtMjIgMTY6NDI6MTMgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBUT0RPOiBhZGQgaXRlbSB0byBUT0RPIGxpc3QKLQkgIFdlIGN1cnJlbnRseSBkbyBhIGxpdHRsZSB0b28gbXVjaCB3b3JrIHdoZW4gd2UgcHVzaCB0aGUgZmlyc3QgYnVmZmVyIGFyb3VuZAotCSAgcmVzdWx0aW5nIGluIGV4Y2Vzc2l2ZSBjYXBzIGNoZWNraW5nLiBXZSBjYW4gcHJvYmFibHkgbWFrZSB0aGlzIGEgbGl0dGxlIGxlc3MKLQkgIGV4cGVuc2l2ZS4KLQotMjAwOS0xMC0yMiAxMjo1Mjo0NiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIGdzdHBpcGVsaW5lOiBTaW1wbGlmeSBiYXNlIHRpbWUgY2hlY2tpbmcgc2xpZ2h0bHkKLQkgIFNpbXBsaWZ5IGNoZWNraW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIGJhc2UgdGltZSAtIGRvbid0IHJlLWNoZWNrCi0JICB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSB0aGF0IHdhcyBzZXQgMyBsaW5lcyBlYXJsaWVyLgotCi0yMDA5LTEwLTIyIDEzOjE1OjE1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICBnc3R1cmk6IE9wdGltaXNhdGlvbjogQXZvaWQgdHlwZS1jaGVja2luZyBpbiBzb3J0aW5nIG1ldGhvZC4KLQkgIFdlIGFscmVhZHkga25vdyB0aGUgbGlzdCBvbmx5IGNvbnRhaW5zIHBsdWdpbiBmZWF0dXJlcwotCi0yMDA5LTEwLTIyIDEzOjEzOjU2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0dXJpLmM6Ci0JICBnc3R1cmk6IE9wdGltaXNhdGlvbiA6IENhc3Qgd2hlbiB3ZSdyZSBzdXJlIG9mIHRoZSB0eXBlLgotCSAgQWxzbyBkaXJlY3RseSBhY2Nlc3MgR3N0RWxlbWVudEZhY3RvcnktPnVyaV90eXBlIGluc3RlYWQgb2YgZ29pbmcKLQkgIHRocm91Z2ggYSBmdW5jdGlvbiB0aGF0IHdpbGwgKG9uY2UgYWdhaW4pIGNoZWNrIHdoZXRoZXIgaXQncyBhCi0JICBHc3RFbGVtZW50RmFjdG9yeQotCi0yMDA5LTEwLTIyIDEyOjMzOjM3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSAgdGVzdHMvZmFrZXNpbms6IEFkZCBzb21lIGRlYnVnZ2luZwotCi0yMDA5LTEwLTIyIDEyOjMzOjAxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSAgdGVzdHMvZmFla3Npbms6IExvd2VyIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBhdm9pZCB0aW1lb3V0cwotCSAgV2UganVzdCBlbmQgdXAgd2l0aCB3YXkgdG9vIG11Y2ggY29udGVudGlvbiBpbiBnbGliIG90aGVyd2lzZS4KLQotMjAwOS0xMC0xOSAwOTowNjoxNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBnc3RyZWdpc3RyeTogVXNlIGhhc2ggdGFibGUgd2hlbiBmaW5kaW5nIGEgZmVhdHVyZS4gRml4ZXMgIzU5ODg5NQotCi0yMDA5LTEwLTIxIDE2OjI2OjAxIC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgdGVlOiBpbXBsZW1lbnQgY3VzdG9tIGFjY2VwdGNhcHMgZnVuY3Rpb24KLQkgIEltcGxlbWVudCBhIGN1c3RvbSBhY2NlcHRjYXBzIGZ1bmN0aW9uIG9uIHRoZSBzaW5rcGFkLiBXZSBjYW4gYWNjZXB0IGFueSBjYXBzIGFzCi0JICBsb25nIGFzIGl0IGlzIGFjY2VwdGVkIGJ5IGFsbCBkb3duc3RyZWFtIHBlZXIgZWxlbWVudHMuCi0KLTIwMDktMTAtMjEgMTM6Mzg6NTcgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBhdm9pZCBsb2NrIGZvciB0YWtpbmcgdGhlIGNvdW50ZXIKLQkgIFRoZSBjb3VudGVyIGZvciBpbmNvbW1pbmcgZGF0YSBpcyBhbHJlYWR5IHByb3RlY3RlZCB3aXRoIHRoZSBTVFJFQU1fTE9DSyBzbyB3ZQotCSAgZG9uJ3QgbmVlZCB0byBhZGQgYW5vdGhlciBsb2NrIGFyb3VuZCBpdC4KLQotMjAwOS0xMC0yMCAyMzoyODo1NCAtMDQwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkgIHJlZ2lzdHJ5OiBoYXNoIHRoZSBwbHVnaW4gYmFzZW5hbWUKLQkgIE1haW50YWluIGEgaGFzaHRhYmxlIG9mIHRoZSBwbHVnaW4gYmFzZW5hbWUuIFdlIGNhbiB0aGVuIHVzZSB0aGlzCi0JICBoYXNodGFibGUgdG8gc3BlZWR1cCB0aGUgc2VhcmNoIGZvciBhbiBleGlzdGluZyBwbHVnaW4gYW5kIGF2b2lkCi0JICBhIHdob2xlIGxvdCBvZiBzdHJjbXAgY2FsbHMuCi0KLTIwMDktMTAtMjAgMjM6Mjc6NDEgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSAgcmVnaXN0cnk6IHNwZWVkIHVwIF9zdHJsZW4KLQkgIE1ha2UgdGhlIF9zdHJsZW4gZnVuY3Rpb24gYSBsaXR0bGUgdGlnaHRlcgotCi0yMDA5LTEwLTIwIDIxOjQzOjU4IC0wNDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIHJlZ2lzdHJ5OiBuYW1lIGlzIG5ldmVyIE5VTEwKLQkgIFdoZW4gbG9va2luZyB1cCBhIGZlYXR1cmUgYnkgbmFtZSwgd2UgbmV2ZXIgY2FsbCB0aGlzIGludGVybmFsCi0JICBmdW5jdGlvbiB3aXRoIE5VTEwgc28gd2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBmb3IgaXQuCi0KLTIwMDktMTAtMjAgMjE6Mzk6MTEgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IHJlZmFjdG9yIHBsdWdpbiBsb29rdXAKLQkgIFdlIGtlZXAgbG9va3VwIHBsdWdpbnMgYnkgdGhlaXIgYmFzZW5hbWUuIEF2b2lkIGNyZWF0aW5nIGEgYmFzZW5hbWUKLQkgIGZyb20gYSBmaWxlbmFtZSBpZiB3ZSBjYW4uCi0KLTIwMDktMTAtMjAgMjE6MDE6NTUgLTA0MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGRvIHF1aWNrIGNoZWNrIGZvciAuIGZpbGVzCi0JICBEbyBhIHF1aWNrIGNoZWNrIGZvciAuIGZpbGVzIGJlZm9yZSBjYWxsaW5nIHRoZSBzdHJjbXAgZnVuY3Rpb25zCi0KLTIwMDktMTAtMjAgMTI6MjE6MDkgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0eG1sLmM6Ci0JICBSZW1vdmUgZXhlY3V0YWJsZSBiaXRzIG9uIHhtbCB1bml0IHRlc3QuCi0KLTIwMDktMTAtMTkgMTY6NDc6MTAgKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgZG9jczogRml4IGRvY3MgZm9yIGdzdF9jYXBzX3NldF9zaW1wbGUoKQotCi0yMDA5LTEwLTE5IDEzOjAyOjMwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBkb2NzOiBNb2RpZnkgZG9jcyBzdHJpbmcgc2xpZ2h0bHkuCi0JICBBcHBhcmVudGx5IHN0YXJ0aW5nIHRoZSBsYXN0IGxpbmUgb2YgYSBkb2NzIHN0cmluZyB3aXRoICdyZXR1cm5zJyBib3RoCi0JICBjb25mdXNlcyBhbmQgZW5yYWdlcyBndGstZG9jLiBVc2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgd29yZGluZyBpbnN0ZWFkLgotCi0yMDA5LTEwLTE5IDEyOjI5OjM1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkgIHBsdWdpbmxvYWRlcjogV2hlbiBhIHBsdWdpbiBpcyBibGFja2xpc3RlZCwgb3V0cHV0IGEgR1NUX0VSUk9SIGxpbmUuCi0KLTIwMDktMTAtMTkgMTM6MzA6MTAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29scy9nc3QtaW5zcGVjdDogQ2hlY2sgd2UncmUgbm90IGhhbmRsaW5nIE5VTEwgcG9pbnRlcnMuCi0KLTIwMDktMTAtMTkgMTM6Mjk6NDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29scy9nc3QtaW5zcGVjdDogUmVtb3ZlIGRlYWQgYXNzaWdubWVudAotCi0yMDA5LTEwLTE0IDEwOjU0OjMyICswMjAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSogZ3N0L2dzdHRyYWNlLmg6Ci0JICB0cmFjZTogRG8gbm90IHBvaXNvbiBnc3RfdHJhY2VfYWRkX2VudHJ5KCkKLQkgIFNpbmNlIGdzdF90cmFjZV9hZGRfZW50cnkoKSBpcyBhIG1hY3JvLCBnY2Mgd2lsbCBiYXJmIHdoZW4gaXQgaXMKLQkgIGRlZmluZWQgaW4gY2FzZSBpdCBoYXMgYmVlbiBwb2lzb25lZCBkdWUgdG8gdHJhY2Ugc3VwcG9ydCBiZWluZwotCSAgZGlzYWJsZWQuCi0KLTIwMDktMTAtMTggMjM6MTg6NTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSAgY29udHJvbGxlcjoganVzdCBjYXN0IGluIGludGVybmFsIEFQSSB3aGVyZSB3ZSBoYXZlIGNoZWNrZWQgcGFyYW1ldGVycyBhbHJlYWR5Ci0KLTIwMDktMTAtMTggMjM6MTU6MDcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICBjb250cm9sbGVyOiB1c2UgZ19zbGljZSBmb3IgY29udHJvbGxlZCBwcm9wZXJ0eSBzdHJ1Y3R1cmVzCi0JICBVc2UgZ19zbGlkZSBpbnN0ZWFkIG9mIG5vbWFsIGdfbmV3LCBBbHNvIGRvbid0IGluaXQgc3RydWN0IHdpdGggMCBhcyB3ZSBuZWVkIHRvCi0JICBpbml0IGl0IGFueXdheSB3aXRoIHRoZSByZWFsIHZhbHVlcy4KLQkgIEFsc28gam9pbiB0aGUgMyBmbGFncyBjaGVja3MgaW50byBvbmUuCi0KLTIwMDktMTAtMTggMTc6MTc6MTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkgIGxpYnMvYmFzZS90eXBlZmluZGhlbHBlcjogUmVtb3ZlIHVzZWxlc3MgdHlwZWNoZWNraW5nIGluIHRpZ2h0IGxvb3AKLQkgIFRoZSBsaXN0IGFnYWluc3Qgd2hpY2ggd2UgcnVuIHRoZSBjb21wYXJlZnVuYyB3aWxsIG9ubHkgY29udGFpbgotCSAgR3N0UGx1Z2luRmVhdHVyZSwgdGhlcmVmb3JlIHJlbW92ZSB0aGUgNiBleHBlbnNpdmUgdHlwZSBjaGVja3Mgd2UgZG8KLQkgIGZvciBldmVyeSBzaW5nbGUgY29tcGFyaXNpb24uCi0KLTIwMDktMTAtMTYgMTI6Mzk6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBmaXggdHlwbyBpbiBkb2NzCi0KLTIwMDktMTAtMTYgMDk6NDM6MDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgd2luMzI6IEFkZCBuZXcgQVBJIHN5bWJvbAotCi0yMDA5LTEwLTE2IDEwOjEzOjUzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA4NWQxNTMwIHRvIDA3MDJmZTEKLQotMjAwOS0xMC0wNyAxNTozMjoxOCArMDIwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkgIEltcHJvdmUgY2FwcyBzZXR0ZXJzIEFQSQotCSAgVGhpcyBwYXRjaCBhZGRzIGdzdF9jYXBzX3NldF92YWx1ZSgpIGFuZCBhbGxvd3MgZ3N0X2NhcHNfc2V0X3NpbXBsZSgpIHRvCi0JICB3b3JrIG9uIG5vbi1zaW1wbGUgY2Fwcy4gU2VlIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucwotCSAgYWJvdXQgd2hhdCB0aGV5IGRvLgotCSAgVGhlIGludGVudGlvbiBvZiB0aGVzZSBjaGFuZ2VzIGlzIHRvIGVhc2Ugd29ya2luZyB3aXRoIGNhcHMgaW4gY2FwcwotCSAgdHJhbnNmb3JtIGZ1bmN0aW9ucy4gQW4gZXhhbXBsZSBmb3IgdGhpcyB3b3VsZCBiZSBmZm1wZWdjb2xvcnNwYWNlLAotCSAgd2hlcmUgdGhlIGNhcHMgdHJhbnNmb3JtIGZ1bmN0aW9uIGNvdWxkIGJlIGNoYW5nZWQgdG8gbG9vayByb3VnaGx5IGxpa2UKLQkgIHRoaXMgKHBzZXVkb2NvZGUgYWhlYWQpOgotCSAgcmVzdWx0ID0gZ3N0X2NhcHNfY29weSAodGVtcGxhdGVfY2Fwcyk7Ci0JICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKSwKLQkgICJ3aWRoIik7Ci0JICBnc3RfY2Fwc19zZXRfdmFsdWUgKHJlc3VsdCwgdmFsdWUpOwotCSAgLyogc2FtZSBmb3IgaGVpZ2h0LCBmcmFtZXJhdGUgYW5kIHBhciAqLwotCSAgcmV0dXJuIGNhcHM7Ci0JICB3aGljaCBpcyBtdWNoIGNsZWFuZXIgYW5kIGVhc2llciB0byB1bmRlcnN0YW5kIHRoYW4gdGhlIGN1cnJlbnQgY29kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTc2OTAKLQotMjAwOS0xMC0wMiAxMDoxNTo1NSArMDIwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3htbC9NYWtlZmlsZS5hbToKLQkgIEFkZCBYTUxfTElCUyB3aGVuIGJ1aWxkaW5nIHRlc3RzIHRoYXQgdXNlIHhtbC1zcGVjaWZpYyBmdW5jdGlvbnMKLQotMjAwOS0xMC0xNSAxNjozNTo1OSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBwby9NYWtldmFyczoKLQkgIHBvOiBEb24ndCBjcmVhdGUgYmFja3VwIC5wbyBmaWxlcwotCSAgQXMgd2VsbCBhcyBwcmV2ZW50aW5nIGNyZWF0aW9uIG9mIHVzZWxlc3MgYmFja3VwIGZpbGVzLCBpdCB3b3JrcwotCSAgYXJvdW5kIGEgYnVnIGluIGdldHRleHQgMC4xNyBvbiBPUy9YCi0KLTIwMDktMTAtMTUgMTY6MzA6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZml4IHJhY2UgaW4gUExBWUlORy0+UEFVU0VELT5QTEFZSU5HCi0JICBXaGVuIHdlIHF1aWNrbHkgc3dpdGNoIGZyb20gUExBWUlORyB0byBQQVVTRUQgYW5kIGJhY2sgdG8gUExBWUlORyBpdCdzIHBvc3NpYmxlCi0JICBpbiBzb21lIGNhc2VzIHRoYXQgdGhlIHRhc2sgcmVmdXNlcyB0byBzdGFydCwgVGhpcyBpcyBiZWNhdXNlIHdoZW4gd2UgZ28gdG8KLQkgIFBBVVNFRCwgd2UgdW5zY2hlZHVsZSB0aGUgY2xvY2sgdGltZW91dCwgd2hpY2ggY291bGQgcmV0dXJuIFVOU0NIRURVTEVEIHdoZW4KLQkgIHdlJ3JlIGJhY2sgdG8gUExBWUlORywgY2F1c2luZyB0aGUgdGFzayB0byBQQVVTRSBhZ2FpbiB3aXRoIGEgd3Jvbmctc3RhdGUuCi0JICBUaGlzIHBhdGNoIGNoZWNrcyBpZiB3ZSBhcmUgcnVubmluZyB3aGVuIHdlIHJldHVybiB3aXRoIGFuIFVOU0NIRURVTEVEIHJldHVybgotCSAgdmFsdWUgYW5kIGlmIHdlIGFyZSwgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBidWZmZXIuCi0JICBGaXhlcyAjNTk3NTUwCi0KLTIwMDktMTAtMTUgMTI6MTY6MDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHByZXNldC5jOgotCSAgZG9jczogY2xhcmlmeSBwcmVzZXQgYXBpIGRvY3MKLQotMjAwOS0xMC0xNCAxNzo1Nzo0MCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIGRvY3M6IGZpeCBjb250cm9sbGVyIHNlY3Rpb25zIGRvY3MKLQotMjAwOS0xMC0xNCAxMDo0MDo1MCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDYzODBkNGIgdG8gODVkMTUzMAotCi0yMDA5LTEwLTE0IDEwOjE2OjMxICswMjAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBpdGVyYXRvcjogRml4IGEgZG9jdW1lbnRhdGlvbiB0eXBvCi0KLTIwMDktMTAtMTQgMDg6NTc6NTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIGJ1aWxkOiAuLi5hbmQgYWRkIG1pc3NpbmcgZW5kaWYKLQotMjAwOS0xMC0xNCAwODo1NzowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IEFsc28gZG9uJ3QgcnVuIG1ha2UgY2hlY2stZXhwb3J0cyBpZiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQKLQotMjAwOS0xMC0xNCAwODo1MDozMSArMDIwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IE9ubHkgcnVuIG1ha2UgY2hlY2stZXhwb3J0cyBpZiBubyBwdWJsaWMgQVBJIHdhcyBkaXNhYmxlZAotCSAgRml4ZXMgYnVnICM1OTgyOTcuCi0KLTIwMDktMTAtMTQgMDg6MzA6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBnc3RvYmplY3Q6IFJlcGxhY2UgcmVjdXJzaXZlIGdzdF9vYmplY3RfaGFzX2FuY2VzdG9yKCkgd2l0aCBhbiBpdGVyYXRpdmUgdmVyc2lvbgotCSAgVGhpcyBpcyBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBiZWNhdXNlIHRoZSBjb21waWxlciBjYW4ndCBkbyB0YWlsCi0JICByZWN1cnNpb24gaGVyZSBhbmQgaGFzIHRvIGtlZXAgYWxsIHN0YWNrIGZyYW1lcy4KLQkgIE5vdCB0aGF0IGVmZmljaWVuY3kgaXMgdGhhdCBpbXBvcnRhbnQgaGVyZSBidXQgSSBhbHJlYWR5IGhhZAotCSAgdGhlIGl0ZXJhdGl2ZSB2ZXJzaW9uIHNvbWV3aGVyZSBlbHNlIGFuZCBib3RoIGFyZSBlYXN5IHRvIHJlYWQuCi0KLTIwMDktMTAtMTQgMDg6Mjk6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6Ci0JICBnc3RvYmplY3Q6IEFkZCBzaW1wbGUgdW5pdCB0ZXN0IGZvciBnc3Rfb2JqZWN0X2hhc19hbmNlc3RvcigpCi0KLTIwMDktMTAtMTMgMTk6MTI6NTAgKzAzMDAgIFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taS4xLm15b2hhbmVuQG5va2lhLmNvbT4KLQotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICBuZXRjbGllbnRjbG9jazogZml4IHRpbWVzdGFtcCBjb21wYXJpc3Npb24sIEZpeGVzICM1OTc0MDcKLQotMjAwOS0xMC0xMiAyMTo1MTo1NSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6Ci0JICBjaGVjazogRGlzYWJsZSB0aGUgdGVzdF9mYWlsX2Fic3RyYWN0X25ldygpIHRlc3QgZW50aXJlbHkgb24gT1MvWAotCSAgRml4ZXMgYSBjb21waWxlciB3YXJuaW5nIGZyb20gdGhlIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGJ1dCBub3QKLQkgIHVzZWQuCi0KLTIwMDktMTAtMTIgMTQ6NTc6MzUgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICBkZWJ1ZzogTWFyayB0aGUgR1NUX1BPTEwgc3ltYm9sIGFzIGV4dGVybiB0byBhdm9pZCBtdWx0aXBseS1kZWZpbmVkIGVycm9yCi0KLTIwMDktMTAtMTIgMTQ6NDc6MzAgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29tbW9uOgotCSAgVXBkYXRlIGNvbW1vbiB0byA2MzgwZDRiMzcwZjA3OGYwY2NhNzI0MDQyOGVhOWY2NjM5NTcxZmY1Ci0KLTIwMDktMTAtMTIgMTQ6MjQ6MDQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSAgZ3N0cG9sbDogTWFrZSB0aGUgbmV3IEdTVF9QT0xMIGRlYnVnIGNvbXBsZXRlbHkgcHJpdmF0ZQotCSAgTWFrZSB0aGUgR1NUX1BPTEwgZGVidWcgY2F0ZWdvcnkgc3ltYm9sIHByaXZhdGUgdG8gbGliZ3N0cmVhbWVyLCBhcwotCSAgdGhlcmUgc2hvdWxkIGJlIG5vIGV4dGVybmFsIHVzZXJzIG9mIGl0LgotCi0yMDA5LTEwLTEyIDE0OjIyOjM0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkgIGNoZWNrczogRGlzYWJsZSBhIGZhaXJseSBzaWxseSBnc3RvYmplY3QgdGVzdCBvbiBPUy9YCi0JICBUaGlzIHRlc3QgdXNlZCB0byBTSUdCVVMgb24gT1MvWCBidXQgbm93IFNJR1NFR1YncyBpbnN0ZWFkIG9uCi0JICBTbm93IExlb3BhcmQuIEl0J3Mgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gZmlndXJlIG91dCB3aGljaCBwbGF0Zm9ybQotCSAgc2hvdWxkIHByb2R1Y2Ugd2hpY2ggZXJyb3IgZm9yIHdoYXQgaXMgZnVuZGFtZW50YWxseSBhIHByZXR0eSBzaWxseQotCSAgdGVzdCwgc28ganVzdCBkaXNhYmxlIGl0IG9uIE9TL1gKLQotMjAwOS0xMC0xMiAxMzo1MDo1MSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5jOgotCSAgbGlicy9nc3QvY2hlY2s6IE1ha2Ugd3JpdGluZyB0aHJlYWRzYWZlLiBCYWNrcG9ydGVkIGZyb20gbGliY2hlY2sgdHJ1bmsKLQotMjAwOS0xMC0xMiAxMzo0OTozNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2Vycm9yLmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmM6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcHJpbnQuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3J1bi5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmM6Ci0JICBsaWJzL2dzdC9jaGVjazogUnVuIGdzdC1pbmRlbnQgb24gbGliY2hlY2suCi0KLTIwMDktMTAtMTIgMTI6MDI6MzQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkgIGdzdHBsdWdpbmxvYWRlcjogRG9uJ3Qgd2FpdCBmb3JldmVyIG9uIGdzdF9wb2xsX3dhaXQuCi0JICBUaGlzIGFsbG93cyB0aGUgbWFjb3N4IHZlcnNpb25zIHRvIHByb3Blcmx5IGVycm9yIG91dCB3aGVuIGZkcyBhcmUgY2xvc2VkLgotCSAgVGhpcyBpcyBvbmx5IGEgdGVtcG9yYXJ5IGZpeCB1bnRpbCB0aGUgcGx1Z2lubG9hZGVyIGlzIHN3aXRjaGVkIHRvIG5vdAotCSAgdXNlIEdzdFBvbGwgYnV0IEdJT0NoYW5uZWxzLgotCi0yMDA5LTEwLTEyIDEyOjAxOjU5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgZ3N0cG9sbDogT25seSB0YWtlIGludG8gYWNjb3VudCBhY3RpdmUgZmRzCi0JICBUaGlzIGlzIG5lZWRlZCBzbyB0aGF0IHNlbGVjdCBwcm9wZXJseSBlcnJvcnMgb3V0IG9uIG1hY29zeCAoc2lnaCkKLQotMjAwOS0xMC0xMiAxMDowNzowMyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIGdzdHBvbGw6IEFkZCBzb21lIGRlYnVnZ2luZyBzdGF0ZW1lbnRzCi0KLTIwMDktMTAtMTIgMTA6MDE6MDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBnc3Rwb2xsOiBVc2UgdGhlIGVycm9yIGZkc2V0IHdoZW4gdXNpbmcgc2VsZWN0L3BzZWxlY3QuCi0JICBUaGlzIGlzIG5lZWRlZCB0byBwcm9wZXJseSBkZXRlY3QgZmRzIHRoYXQgYXJlIGNsb3NlZCBvciB0aGF0IGdvdAotCSAgYW4gZXJyb3IKLQotMjAwOS0xMC0xMiAwOTo1MDo0NiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIGdzdHBvbGw6IERvbid0IHVzZSBwb2xsIG9uIHN5c3RlbXMgd2l0aCBicm9rZW4gcG9sbAotCi0yMDA5LTEwLTEyIDA5OjUwOjAwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgZ3N0OiBBZGQgZGVidWdnaW5nIGNhdGVnb3J5IEdTVF9QT0xMIGZvciBnc3Rwb2xsCi0KLTIwMDktMTAtMTIgMDk6NDc6NTkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogRGV0ZWN0IGJyb2tlbiBwb2xsKCkKLQotMjAwOS0xMC0wOSAxNzo0NDoyOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogbGV0cyBrZWVwIC0xIGZvciBzZWdtZW5zdCBhcyB0aGV5IGFyZSBndWludDY0IGFuZCBub3QgR3N0Q2xvY2tUaW1lCi0KLTIwMDktMTAtMDkgMTc6MTE6MjcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHVzZSBHU1RfQ0xPQ0tfVElNRV9OT05FIGFuZCBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCBtb3JlCi0KLTIwMDktMTAtMDggMjM6MTA6NDAgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSAgcGx1Z2lubG9hZGVyOiBGaXggdmFsZ3JpbmQgd2FybmluZ3MgYnkgemVyb2luZyBwYWRkaW5nIGJ5dGVzLgotCi0yMDA5LTEwLTA4IDE3OjE5OjM4ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgotCSAgY2hlY2s6IEhvcGVmdWxseSBmaXggYW4gJ21heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQnIHdhcm5pbmcgb24gT1MvWAotCi0yMDA5LTEwLTA4IDE2OjIxOjQ1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSAgcmVnaXN0cnljaHVua3M6IEZpeCBhIGRlYnVnIGZvcm1hdCBzdHJpbmcgaGFyZGVyIHRvIHNhdGlzZnkgT1MvWCdzIGdjYy4KLQotMjAwOS0xMC0wOCAxNjowNTowOCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuYzoKLQkgIHJlZ2lzdHJ5Y2h1bmtzOiBGaXggZm9ybWF0IHN0cmluZyBmb3IgZGVidWcgZXJyb3IgbWVzc2FnZS4KLQotMjAwOS0xMC0wOCAxNToyMTo0OCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JICBwbHVnaW5sb2FkZXI6IE1vdmUgc3RkaW4gYW5kIHN0ZG91dCBvdXQgb2YgaGFybSdzIHdheQotCSAgSW4gdGhlIHBsdWdpbiBsb2FkZXIgc3VicHJvY2VzcywgbW92ZSBzdGRpbiBhbmQgc3Rkb3V0IHRvIG5ldyBmZCdzCi0JICBzbyB0aGF0IHBsdWdpbnMgcHJpbnRpbmcgdGhpbmdzIGR1cmluZyBwbHVnaW4gaW5pdCBvciAoKmdhc3AqKQotCSAgcG9zc2libHkgcmVhZGluZyBmcm9tIHN0ZGluIGRvbid0IGludGVyZmVyZSB3aXRoIHRoZSBkYXRhIHNlbnQgdG8KLQkgIGFuZCBmcm9tIHRoZSBwYXJlbnQuCi0KLTIwMDktMTAtMDggMTE6MTc6MTQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgcGx1Z2luIGRvY3M6IEFkZCBHU1RfUExVR0lOX1NDQU5ORVIgZW52IHZhciB0byB0aGUgaW5zcGVjdCBlbnZpcm9ubWVudAotCi0yMDA5LTEwLTA4IDEwOjU5OjE1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAzN2Y4OThiIHRvIGEzZTNjZTQKLQotMjAwOS0xMC0wOCAxMDozOToyOCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9saWJzLy5naXRpZ25vcmU6Ci0JICBnaXRpZ25vcmVzOiBJZ25vcmUgdGhlIGJ5dGV3cml0ZXIgY2hlY2sgYmluYXJ5Ci0KLTIwMDktMTAtMDggMTA6MzY6NTYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICByZWdpc3RyeTogRml4IGVycm9yIGhhbmRsaW5nIGluIHRoZSByZWdpc3RyeSBsb2FkZXIKLQkgIFdoZW4gdGhlIHBsdWdpbi1zY2FubmVyIGxvYWQgZmFpbHMgKGJlY2F1c2UgdGhlIGhlbHBlciBjYW4ndCBiZQotCSAgc3Bhd25lZCksIG1ha2Ugc3VyZSB0byBsb2FkIHRoZSBwbHVnaW4gdGhhdCBmYWlsZWQgaW4tcHJvY2Vzcywgc28KLQkgIHRoYXQgYWxsIHBsdWdpbnMgZG8gZ2V0IGxvYWRlZC4KLQotMjAwOS0xMC0wOCAxMDoyNjoyNyArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBjaGVjazogRml4IHRlc3QgcnVuIGluIHRlc3RzL2V4YW1wbGVzL21hbnVhbAotCSAgQWRkIHRoZSBHU1RfUExVR0lOX1NDQU5ORVIgZW52IHZhciB0byB0aGUgY2hlY2sgZW52aXJvbm1lbnQgaGVyZSB0b28KLQkgIHNvIHRoYXQgaXQgZG9lc24ndCBmYWlsIHdoZW4gbm8gaW5zdGFsbGVkIHNjYW5uZXIgaXMgYXZhaWxhYmxlLgotCi0yMDA5LTEwLTA4IDA5OjM0OjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGdzdGluZm86IGFkZCBiYWNrIGZpeCB0aGF0IHNob3VsZG4ndCBoYXZlIGJlZW4gcmV2ZXJ0ZWQKLQotMjAwOS0xMC0wOCAxMDo0Nzo0NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogbW9yZSBxdWV1ZSBvcHRpbWl6YXRpb25zCi0JICBTcGxpdCBnc3RfcXVldWVfbG9ja2VkX2VucXVldWUoKSBpbnRvIHZhcmlhbnQgZm9yIGJ1ZmZlciBhbmQgZXZlbnQgdG8gZ2V0IHJpZCBvZgotCSAgdGhlIGlmKCkgYW5kIG1ha2UgdGhlIGNvZGUgbW9yZSByZWFkYWJsZSAoY29uc3RhbnQgYm9vbGVhbiBwYXJhbWV0ZXJzIGFyZSBuZXZlcgotCSAgbmljZSkuIFJlbW92ZXMgdGhlIGlmIChpdGVtKSBjaGVja3MgYXMgd2UgZGVyZWZlcmVuY2UgdGhlIHBvaW50ZXIgYmVmb3JlIGFueXdheS4KLQkgIEFsc28gYXBwbHkgdGhlIHNhbWUgaWRlYSBvZiByZXVzaW5nIHRoZSBwcmV2aW91cyBrbm93bGVkZ2UgaW4KLQkgIGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSB0byByZW1vdmUgbW9yZSB0eXBlIGNoZWNrcy4KLQotMjAwOS0xMC0wOCAxMDo1MTo0OSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IHNwbGl0IGdzdF9tdWx0aV9xdWV1ZV9pdGVtX25ldwotCSAgU3BsaXQgZ3N0X211bHRpX3F1ZXVlX2l0ZW1fbmV3IGludG8gYnVmZmVyIGFuZCBldmVudCB2YXJpYW50IHRvIG1ha2Ugc2F2ZSBhbiBpZgotCSAgYW5kIG1ha2UgY29kZSBtb3JlIHJlYWRhYmxlLgotCi0yMDA5LTEwLTA4IDA4OjU1OjU5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIHBsdWdpbnMvZ3N0ZmlsZXNyYzogTWFrZSBhIGZhc3QtcGF0aCBmb3IgbGVuZ3RoID09IDAgYnVmZmVyIGNyZWF0aW9uLgotCSAgSWYgdGhlIHJlcXVlc3RlZCBsZW5ndGggaXMgMCwgd2UgZG9uJ3QgbmVlZCB0byByZWFkIGFueXRoaW5nIGZyb20gdGhlIGZpbGUuCi0KLTIwMDktMTAtMDggMDg6NTU6MjMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jOgotCSAgZ3N0L2NoZWNrL2NvbnNpc3RlbmN5Y2hlY2tlcjogQ2hlY2sgdHlwZSBvZiBtaW5pb2JqZWN0IGluIHByb2JlCi0KLTIwMDktMTAtMDggMDg6NTM6NTQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGdzdC9iYXNlL2Jhc2VzaW5rOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50LgotCSAgVGhlIGNvZGUgd2FzIHByZXZpb3VzbHk6Ci0JICAqIGNoZWNraW5nIGlmIHJldCB3YXMgIT0gT0sKLQkgICogLi4gYnV0IGlmIGl0IHdhcyBGTE9XX1NURVAsIHN3aXRoIGl0IHRvIE9LCi0JICAqIC4uIGFuZCB0aGVuIG5vdCB1c2luZyByZXQKLQkgIEluc3RlYWQgd2UganVzdCBtYWtlIGl0IG1vcmUgY29tcGFjdCBieSBjaGVja2luZyBpZiBpdCdzIE9LIG9yIFNURVAuCi0KLTIwMDktMTAtMDggMDg6NTM6MjYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGdzdG9iamVjdDogUmVtb3ZlIGRlYWQgYXNzaWdubWVudC4KLQkgIG9iamVjdCBpcyBubyBsb25nZXIgdXNlZCBhZnRlciB0aGF0IGxpbmUKLQotMjAwOS0xMC0wOCAwODo1MjoxOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdGluZGV4LmM6Ci0JICBnc3RpbmRleDogTWFrZSBzdXJlIHdyaXRlciBpcyBub24tTlVMTC4KLQkgIEZpeGVzIHRoZSBOVUxMIGRlcmVmZXJlbmNlIGEgZmV3IGxpbmVzIGxvd2VyICh3aGVyZSBpdCBnZXRzIHRoZSBvYmplY3QgdHlwZSkuCi0KLTIwMDktMDktMjkgMDg6MTM6NDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0YnVmZmVyc3RyZXNzLmM6Ci0JICBiZW5jaG1hcmtzOiBDbGVhbiB1cCBnc3RidWZmZXJzdHJlc3MuCi0KLTIwMDktMTAtMDggMDI6NDI6MTYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9jb21wbGV4aXR5LmM6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuYzoKLQkgIGJlbmNobWFya3M6IEZpeCB0aGUgY29tcGxleGl0eSBhbmQgbWFzcy1lbGVtZW50cyBiZW5jaG1hcmtzCi0KLTIwMDktMTAtMDggMDI6MjA6NTEgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkgIGNoZWNrczogRml4IHN0cmluZyBsZWFrcyBpbiB0aGUgbmV3IGNoaWxkcHJveHkgdGVzdAotCi0yMDA5LTEwLTA4IDAyOjAzOjA4ICswMTAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgcGx1Z2luOiBJZ25vcmUgYW4gZW1wdHkgZGVwZW5kZW5jeSBsaXN0LgotCSAgSWYgYSBwbHVnaW4gcmVnaXN0ZXJzIGFuIGVtcHR5IGRlcGVuZGVuY3kgc2V0LCBqdXN0IGlnbm9yZSBpdCByYXRoZXIKLQkgIHRoYW4gc2VyaWFsaXNpbmcgYW5kIGNoZWNraW5nIGFuIGVtcHR5IHNldC4KLQotMjAwOS0xMC0wOCAwMjowMTo1NCArMDEwMCAgSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWNodW5rcy5jOgotCSAgcmVnaXN0cnljaHVua3M6IEZpeCBvZmYtYnktb25lIGVycm9yLiBJbXByb3ZlIGRlYnVnLgotCSAgRml4IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIHNpemUgZ3VhcmQgZm9yIHVucGFja19lbGVtZW50LCBhbmQKLQkgIGltcHJvdmUgdmFyaW91cyBkZWJ1ZyBzdGF0ZW1lbnRzIGluIHRoZSBmYWlsdXJlIHBhdGhzLgotCSAgQWxzbywgc3dhcCBzb21lIGdfbmV3MCB0byBnX21hbGxvYzAgZm9yIHRoZSBmdW4gb2YgaXQuCi0KLTIwMDktMTAtMDcgMTY6MDI6NTggLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogVXNlIF93Zm9wZW4gb24gd2luMzIgdG8gb3BlbiBmaWxlcyB3aXRoIG5vbi1hc2NpaSBmaWxlbmFtZXMgY29ycmVjdGx5LgotCi0yMDA5LTEwLTA3IDIzOjMxOjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgotCSAgZG9jczogZml4IFNpbmNlOiB0YWdzIGluIGRvY3MgZm9yIG5ld2x5LWFkZGVkIEFQSQotCi0yMDA5LTEwLTA4IDAwOjA4OjQ3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiByZXZlcnQgdHdvIG9mIHRoZSBjaGFuZ2VzCi0JICBJdCBvbmx5IG5lZWRlZCBmb3IgdGhlIG5vbiBjb25zdGFudCBzdHJpbmcuCi0KLTIwMDktMTAtMDcgMjM6MzY6NDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IHVzZSBhICIlcyIgZm9ybWF0IHN0cmluZyB3aGVuIHByaW50aW5nIHRoZSBtZW1vcnkgZHVtcCBsaW5lCi0JICBXZSBrbm93IHRoYXQgdGhlIGNvbnRlbnQgaXMgc2F2ZSwgYnV0IHRoZSBjb21waWxlciBkb2VzIG5vdC4KLQotMjAwOS0xMC0wNyAyMzoyMzowOCArMDMwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgcGFyc2U6IGRvbid0IGZvcm1hdCB0aGUgc3RyaW5nIHR3aWNlCi0JICBXZSB3ZXJlIGZvcm1hdHRpbmcgdGhlIHN0cmluZyBvbmNlIGFuZCB0aGVuIHBhc3NpbmcgdGhlIHN0cmluZyBhcyBhIGZvcm1hdAotCSAgc3RyaW5nIHRvIHRoZSBsb2cgZnVuY3Rpb25zLgotCi0yMDA5LTEwLTA3IDExOjQzOjU0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgcGFkOiBhZGQgdmFyaWFudHMgb2YgZ3N0X3BhZF9nZXRfY2FwcygpIHRoYXQgZG9uJ3QgY29weSBjYXBzLiBGaXhlcyAjNTkwOTQxCi0JICBJbiBtb3N0IHBsYWNlcyBpbiBjb3JlIGFuZCBiYXNlY2xhc3NlcyB3ZSBqdXN0IG5lZWQgdGhlIGNhcHMgdG8gZG8gY2Fwcy0KLQkgIGludGVyc2VjdGlvbnMuIEluIHRoYXQgY2FzZSByZWYnZWQgY2FwcyBhcmUgZW5vdWdoIChubyBuZWVkIHRvIGNvcHkpLgotCSAgVGhpcyBwYXRjaCBhbHNvIHN3aXRjaGVzIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IGZ1bmN0aW9ucy4KLQkgIEFQSTogZ3N0X3BhZF9nZXRfY2Fwc19yZWZlZCgpLCBnc3RfcGFkX3BlZXJfZ2V0X2NhcHNfcmVmZWQoKQotCi0yMDA5LTA5LTI2IDIzOjQzOjM3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSAgdGVzdHM6IGFkZCBnaG9zdHBhZCB0ZXN0IGZvciBzZXR0aW5nIHRhcmdldCBhZ2FpbiBhZnRlciBwYWQgaXMgbGlua2VkCi0KLTIwMDktMDktMjYgMjM6NDI6MjIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICB0ZXN0czogcmVtb3ZlIGVtcHR5IGxpbmVzIGZyb20gd3JvbmcgaW5kZW50IHJ1bgotCi0yMDA5LTEwLTA3IDIwOjM4OjQ5ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXdyaXRlci5jOgotCSAgY2hlY2s6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgYnl0ZXdyaXRlciB0ZXN0Ci0KLTIwMDktMTAtMDcgMTg6MDc6MjYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICB3aW4zMjogYWRkIG5ldyBieXRlIHdyaXRlciBhbmQgcmVhZGVyIEFQSSB0byAuZGVmIGZpbGUKLQkgIEFQSTogZ3N0X2J5dGVfd3JpdGVyXyooKQotCi0yMDA5LTA4LTIwIDE0OjI0OjE5IC0wNzAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBlbGVtZW50ZmFjdG9yeTogZml4IHNwZWxsaW5nIGluIGNvbW1lbnQKLQotMjAwOS0xMC0wNyAxODo0MDo0NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogZmx1c2ggcXVldWUgdXBvbiBmYXRhbCBmbG93cmV0dXJuIGFuZCByZWxlYXNlIHVwc3RyZWFtIHRocmVhZAotCi0yMDA5LTA5LTIyIDE1OjQ0OjMxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkgIGRhdGFxdWV1ZTogZml4IEFQSSBkb2N1bWVudGF0aW9uIHR5cG8KLQotMjAwOS0xMC0wNyAxODozNzoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgYnl0ZXdyaXRlcjogQWRkIHRvIHRoZSBkb2NzCi0KLTIwMDktMTAtMDUgMTE6MjQ6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXdyaXRlci5jOgotCSAgYnl0ZXdyaXRlcjogQWRkIHVuaXQgdGVzdAotCi0yMDA5LTEwLTAzIDEzOjMwOjU0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmg6Ci0JICBieXRld3JpdGVyOiBBZGQgYSBnZW5lcmljIGJ5dGUgd3JpdGVyCi0JICBGaXhlcyBidWcgIzU5MDY2OS4KLQotMjAwOS0xMC0wMyAxNTo1NzowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkgIGJpdHJlYWRlci9ieXRlcmVhZGVyOiBBUEk6IEFkZCBnc3RfKGJpdHxieXRlKV9yZWFkZXJfZ2V0X3NpemUoKQotCSAgLi4uIGFuZCBHU1RfKEJZVEV8QklUKV9SRUFERVIoKSBjYXN0cy4KLQotMjAwOS0xMC0wMyAxMjozNDo1NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkgIGJ5dGVyZWFkZXIsYml0cmVhZGVyOiBSZW1vdmUgRklYTUUgMC4xMSB0byByZW1vdmUgbm9uLWlubGluZWQgZnVuY3Rpb25zCi0JICBUaGUgbm9ybWFsIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIHVzZWZ1bCB0byBoYXZlIGZvciBiaW5kaW5ncywgZXNwZWNpYWxseQotCSAgcnVudGltZS1jcmVhdGVkIGJpbmRpbmdzIGxpa2UgU2VlZCBvciBuZXcgR09iamVjdC1JbnRyb3NwZWN0aW9uIGJhc2VkCi0JICBQeXRob24gYmluZGluZ3MuCi0KLTIwMDktMTAtMDcgMTY6MzY6MzEgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBjaGVjazogQXR0ZW1wdCB0byBmaXggdHlwZS1wdW5uaW5nIHdhcm5pbmcgaW4gdGhlIGdzdGl0ZXJhdG9yIHRlc3QKLQotMjAwOS0xMC0wNyAxNjowMDoxMiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOgotCSAgY2hlY2s6IE1ha2Ugc3VyZSB0byBpbml0IHRoZSBkYXRhcHJvdG9jb2wgbGliLgotCSAgQ2FsbCB0aGUgZ3N0X2RwX2luaXQoKSBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgZGVidWcKLQkgIGNhdGVnb3J5IGlzIGluaXRpYWxpc2VkLCB0byBhdm9pZCBnX2NyaXRpY2FscyB3aGVuIHJ1bm5pbmcgd2l0aAotCSAgR1NUX0RFQlVHPTUKLQotMjAwOS0xMC0wNyAxNTo0Nzo0NSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOgotCSAgY2hlY2s6IFVzZSBHU1RfREVCVUcgaW5zdGVhZCBvZiBnX21lc3NhZ2UgaW4gdGhlIGdkcCB0ZXN0Ci0KLTIwMDktMTAtMDcgMTU6MTQ6NDYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBjaGVjazogQWRkIEdTVF9QTFVHSU5fU0NBTk5FUiBlbnYgdmFyIHRvIHRoZSBjaGVjayBlbnZpcm9ubWVudAotCi0yMDA5LTEwLTA3IDE0OjM0OjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICByZWdpc3RyeTogaW1wcm92ZSBwbHVnaW4gbG9hZGVyIGZhaWx1cmUgbWVzc2FnZSBmb3IgdW5pbnN0YWxsZWQgc2V0dXBzCi0JICBFdmVyeW9uZSBydW5uaW5nIGFuIHVuaW5zdGFsbGVkIGdpdCBzZXR1cCBpcyBnb2luZyB0byB3b25kZXIgYWJvdXQKLQkgIHRoaXMgZmFpbHVyZSBuZXh0IHRpbWUgdGhleSB1cGRhdGUsIHNvIGxldCdzIG1lbnRpb24gdGhlIHNvbHV0aW9uCi0JICBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KLQotMjAwOS0xMC0wNyAxMzo1OTo0NyArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEJlZWYgdXAgdGhlIHRlc3QgZm9yIF9fdWludDEyOF90IG9uIEdDQwotCSAgR0NDIDMuNC4zIG9uIHRoZSBTUEFSQyBidWlsZGJvdCBjcmFzaGVzIHdoZW4gYWN0dWFsbHkKLQkgIHVzaW5nIF9fdWludDEyOF90LiBCZWVmIHVwIHRoZSBjb25maWd1cmUgdGVzdCB0byBkZXRlY3QgdGhhdCB0aGUKLQkgIHR5cGUgaXMgYWN0dWFsbHkgdXNhYmxlLgotCi0yMDA5LTEwLTA3IDA5OjU2OjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgd2luMzI6IGFkZCBuZXcgQVBJIHRvIC5kZWYgZmlsZQotCSAgQW5kIGFkZCBBUEk6IG1hcmtlciBpbiBjb21taXQgbWVzc2FnZSB0aGF0IHdhcyBvbWl0dGVkIGluIHRoZSBvcmlnaW5hbAotCSAgY29tbWl0OgotCSAgQVBJOiBnc3RfZGF0YV9xdWV1ZV9uZXdfZnVsbCgpCi0KLTIwMDktMTAtMDcgMDk6NTU6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzLy5naXRpZ25vcmU6Ci0JICBiZW5jaG1hcmtzOiBhZGQgYnVmZmVyc3RyZXNzIGJpbmFyeSB0byAuZ2l0aWdub3JlCi0KLTIwMDktMTAtMDcgMDk6NDI6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGJ1bXAgR0xpYiByZXF1aXJlbWVudCB0byAyLjE4Ci0JICBCdW1wIEdMaWIgcmVxdWlyZW1lbnQgYXMgcGVyIHRoZSByZWxlYXNlIHBsYW5uaW5nIGRvY3MuCi0KLTIwMDktMTAtMDcgMTA6Mzc6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBtZXNzYWdlOiB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDktMTAtMDcgMTE6MTI6NTcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBwYWQ6IGZsaXAgdGhlIEdfVU5MSUtFTFkKLQkgIEl0cyBsaWtlbHkgdGhhdCB3ZSBoYXZlIGNhcHMgYW5kIHVubGlrZWx5IChlcnJvcikgb3RoZXJ3aXNlLgotCi0yMDA5LTEwLTA3IDExOjA0OjU2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgbmV3IHF1ZXVlIGFwaSB0byB0aGUgZG9jcyB0byBmaXggdGhlIGJ1aWxkCi0KLTIwMDktMDktMjggMTU6MjU6MjIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgcGx1Z2lucy9tdWx0aXF1ZXVlOiBBdm9pZCBpbnN0YW5jZSBjaGVjawotCSAgV2Uga25vdyBlYXJsaWVyIG9uIGluIHRoZSBjb2RlIHdoZXRoZXIgd2UncmUgaGFuZGxpbmcgYW4gZXZlbnQgb3IgYSBidWZmZXIsCi0JICBqdXN0IHBhc3MgdGhhdCBpbmZvcm1hdGlvbiB0aHJvdWdoLgotCSAgVGhpcyBjb21taXQgYW5kIHRoZSBwcmV2aW91cyBjb21taXQgcmVkdWNlIGluc3RydWN0aW9uIGZldGNoOgotCSAgKiB3aGVuIHB1c2hpbmcgYnVmZmVyIChfY2hhaW4pIGJ5IDEwJQotCSAgKiB3aGVuIHBvcHBpbmcgYnVmZmVyIChfbG9vcCkgYnkgMyUKLQotMjAwOS0wOS0yOCAxNToyNDowMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBwbHVnaW5zL211bHRpcXVldWU6IENhY2hlIGlucHV0L291dHB1dCB0aW1lLCBhdm9pZCBleHBlbnNpdmUgY2FsbHMuCi0JICAqIENhY2hlIHRoZSBpbnB1dC9vdXRwdXQgdGltZQotCSAgKiBPbmx5IHJlY2FsY3VsYXRlIGl0IHdoZW4gbmVlZGVkLgotCSAgQXZvaWRzIDUwJSBjYWxscyB0byBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUKLQotMjAwOS0xMC0wNyAxMDowMDowNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtaW5pdC54bWw6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9nc3RjbG9ja3N0cmVzcy5jOgotCSogdGVzdHMvYmVuY2htYXJrcy9nc3Rwb2xsc3RyZXNzLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9sYXVuY2gvbXAzcGFyc2VsYXVuY2guYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGJ1aWxkOiBzcHJpbnRmLCBzc2NhbmYgbmVlZCBzdGRpby5oCi0KLTIwMDktMTAtMDUgMTE6NDY6MzQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNoaWxkcHJveHkuYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSAgY2hpbGRwcm94eTogaW5pdGlhbGl6ZSBndmFsdWUgaW4gX3ZhbGlzdCBmdW5jdGlvbi4gRml4ZXMgIzU5NTYwMgotCSAgUmVmbG93IHRoZSBjb2RlIHRvIG1vdmUgZXJyb3IgaGFuZGxpbmcgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb25zLiBJbml0aWFsaXplCi0JICBndmFsdWUgbGlrZSB3ZSBkbyBpbiB0aGUgc2V0dGVyLiBBZGQgYSB1bml0LXRlc3QgbW9kdWxlIHdpdGggdHdvIHNpbXBsZSB0ZXN0cwotCSAgdGhlIGNhdGNoZSB0aGlzIGJ1Zy4KLQotMjAwOS0xMC0wMSAxNzozOTo0NSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHBhZDogZG9uJ3QgaW50ZXJzZWN0IHdpdGggYW55IGluIHByb3h5X3BhZF9nZXRfY2FwcwotCSAgV2UgaW5pdGlhbGl6ZSB0aGUgY2FwcyB3aXRoIGFueSBhbmQgaWYgYSBwYWQgaGFzIE5VTEwgY2FwcywganVzdCBza2lwIGl0IGluc3RlYWQKLQkgIG9mIGludGVyc2VjdGluZyB3aXRoIGFueS4gQWxzbyBhZGQgYnJhbmNoIHByZWRpY3Rpb24gaGVyZS4KLQotMjAwOS0wOS0zMCAxNjo0MTowNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGRvY3M6IHJlbmFtZSBhZ2dyZWdhdG9yIHRvIGFkZGVyIGluIHRoZSBkb2NzLgotCi0yMDA5LTA5LTMwIDA5OjQ3OjIzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIG1hbjogZml4IGNvcHkgYW5kIHBhc3QgbWlzdGFrZSBmb3IgLXEgb3B0aW9uCi0KLTIwMDktMTAtMDcgMDk6NTQ6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBnc3QtdW5pbnN0YWxsZWQ6IEV4dGVuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYWxsb3cgdXNpbmcgYW4gdW5pbnN0YWxsZWQgZ3N0cmVhbWVyLXNoYXJwCi0KLTIwMDktMDktMjggMTU6MTk6NDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgcGx1Z2lucy9tdWx0aXF1ZXVlOiBVc2UgbmV3IEdzdERhdGFRdWV1ZSBjb25zdHJ1Y3RvcgotCi0yMDA5LTA5LTI4IDE1OjE4OjM3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkgIGdzdGRhdGFxdWV1ZTogbmV3IGNvbnN0cnVjdG9yIHdoaWNoIHRha2VzIGNhbGxiYWNrcy4KLQkgIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIGdvaW5nIHRocm91Z2ggZ2xpYidzIHNpZ25hbGxpbmcgc3lzdGVtCi0KLTIwMDktMDktMjggMTM6MTk6MTAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgcGx1Z2lucy9tdWx0aXF1ZXVlOiBVc2UgY2FjaGVkIHZhbHVlIGluc3RlYWQgb2YgZXhwZW5zaXZlIG9iamVjdCBnZXQuCi0JICBUaGUgdGFzayB3aWxsIGFsd2F5cyBleGlzdCBhcyBsb25nIGFzIGl0cyBvd25lciAoaS5lLiB0aGUgcGFkKSBhbmQgdGhhdAotCSAgb3duZXIncyBvd25lciAoaS5lLiBtdWx0aXF1ZXVlKSBleGlzdC4KLQkgIFJlZHVjZXMgdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaGVzIGJ5IDM2JS4KLQotMjAwOS0wOS0yOCAxNTo0MTo1MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgcGx1Z2lucy9xdWV1ZTogVXNlIHByZXZpb3VzIGtub3dsZWRnZSBvZiBkYXRhIHR5cGUgdG8gYXZvaWQgdHlwZWNoZWNrLgotCSAgV2Uga25vdyB3aGV0aGVyIHdlIGhhdmUgYSBidWZmZXIgb3IgYW4gZXZlbnQsIHVzZSB0aGF0IGluc3RlYWQgb2YgZ29pbmcKLQkgIHRyb3VnaCB0aGUgZXhwZW5zaXZlIEdMaWIgdHlwZWNoZWNrLgotCSAgVGhlIG92ZXJhbGwgaW5zdHJ1Y3Rpb24gZmV0Y2ggcmVkdWN0aW9uIGludHJvZHVjZWQgYnkgdGhpcyBjb21taXQgYW5kIHRoZQotCSAgMiBwcmV2aW91cyBjb21taXRzOgotCSAgKiByZWNlaXZpbmcgYSBidWZmZXIgKF9jaGFpbikgYnkgMjAlCi0JICAqIHBvcHBpbmcgYSBidWZmZXIgKF9sb29wKSBieSAxNCUKLQkgIE51bWJlcnMgYWNxdWlyZWQgdGhyb3VnaCBjYWxsZ3JpbmQgcGFzc2luZyAxMDAwMDAgYnVmZmVycyB0aHJvdWdoIHF1ZXVlLgotCi0yMDA5LTA5LTI4IDE1OjIwOjA2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JICBwbHVnaW5zL3F1ZXVlOiBBdm9pZCB1c2VsZXNzIHNlZ21lbnRfdG9fcnVubmluZ190aW1lKCkgY2FsY3VsYXRpb25zLgotCSAgKiBDYWNoZSBzcmMgYW5kIHNpbmsgdGltZQotCSAgKiBVc2UgYSBib29sZWFuIHRvIGtub3cgd2hldGhlciBzcmMvc2luayB0aW1lIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkCi0JICBBdm9pZHMgNTAlIGNhbGxzIHRvIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpCi0KLTIwMDktMDktMjggMTM6MjE6MDcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHBsdWdpbnMvcXVldWU6IEp1c3QgY2FzdCB0byB0aGUgb2JqZWN0IHBhcmVudCBpbnN0ZWFkIG9mIHR5cGVjaGVja2luZy4KLQotMjAwOS0wOS0yMyAxNjoxOTozMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2JlbmNobWFya3MvZ3N0YnVmZmVyc3RyZXNzLmM6Ci0JICBiZW5jaG1hcms6IE5ldyBiZW5jaG1hcmsgZm9yIHRlc3RpbmcgY29udGVudGlvbiB3aGVuIGNyZWF0aW5nIGJ1ZmZlcnMKLQotMjAwOS0wOS0yMyAxNjoxNzowOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogRG9uJ3QgYWN0aXZhdGUgdHJhY2luZyBpZiBub3QgcmVxdWVzdGVkLgotCi0yMDA5LTEwLTA3IDA4OjM3OjA1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKLQkgIHRlc3RzOiBpbml0IG1vcmUgdmFyaWFibGVzIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgb24gb3N4Ci0JICBJbml0IHZhcmlhYmxlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgYW5kIG1ha2UgdGhlIGJ1aWxkIGJvdCBoYXBweQotCSAgKHRoZSBjb21waWxlciBtb3N0IGxpa2VseSBjb21wbGFpbnMgYWJvdXQgdGhpcyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdwotCSAgaGVyZSB0aGF0IGZhaWxfdW5sZXNzIHdpbGwgYWJvcnQvZXhpdCBpbiB0aGUgcGF0aCB3aGVyZSBpdCBmYWlscykuCi0KLTIwMDktMDktMjYgMTE6NDM6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIG11bHRpcXVldWU6IEltcHJvdmUgaXRlcmF0ZSBpbnRlcm5hbCBsaW5rcyBmdW5jdGlvbgotCSAgUGFkcyBoYXZlIHRoZWlyIEdzdFNpbmdsZVF1ZXVlIHN0b3JlZCBhcyBlbGVtZW50IHByaXZhdGUgZGF0YQotCSAgc28gdGhlcmUncyBubyBuZWVkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBzaW5nbGUgcXVldWVzCi0JICBldmVyeSB0aW1lLiBBbHNvIGV2ZXJ5IHBhZCBvbmx5IGhhcyBhIHNpbmdsZSBpbnRlcm5hbCBsaW5rIHNvCi0JICB1c2UgYSBzaW5nbGUgaXRlcmF0b3IgaW5zdGVhZCBvZiBhIGNvbXBsZXggY3VzdG9tIGl0ZXJhdG9yLgotCSAgU2V0IHRoZSBlbGVtZW50IHByaXZhdGUgZGF0YSBvZiB0aGUgcGFkIHRvIE5VTEwgd2hlbiBmcmVlaW5nIHRoZQotCSAgc2luZ2xlIHF1ZXVlLgotCi0yMDA5LTA5LTE3IDE2OjMwOjQzIC0wNDAwICBKb2hhbiBCaWxpZW4gPGpvYmlAbGl0bC5jb20+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgaW50cm9zcGVjdGlvbjogQWRkIGFubm90YXRpb25zIGZvciBnc3RfZWxlbWVudF9xdWVyeV97ZHVyYXRpb24scG9zaXRpb259Ci0JICBGaXhlcyBidWcgIzU5NTUxMS4KLQotMjAwOS0xMC0wNSAwMDoxMToyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6Ci0JICBieXRlcmVhZGVyOiBhZGQgaW5saW5lIHZlcnNpb24gb2YgZ3N0X2J5dGVfcmVhZGVyX3NraXAKLQotMjAwOS0xMC0wNyAwMDo0Nzo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9uIGZpbGVzIGZvciBuZXcgYW5kIGNoYW5nZWQgc3RyaW5ncwotCi0yMDA5LTA5LTI4IDIyOjQzOjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiB0YWtlIGxvY2tzIGFyb3VuZCBzbWFsbGVyIHNlY3Rpb24KLQkgIFdlIGRvbid0IG5lZWQgdGhlIGhvbGQgdGhlIHByb3h5IG11dGV4IGxvY2tlZCBmb3IgZ2V0dGluZyB0aGUgaW50ZXJuYWwgcGFkIGFuZAotCSAgZm9yIGxpbmtpbmcgdGhlIG5ldyB0YXJnZXQgcGFkIHdoZW4gd2UgcmV0YXJnZXQuIFNvIHRha2UgdGhlIGxvY2sgYSBsaXR0bGUgbGF0ZXIKLQkgIGFuZCByZWxlYXNlIGl0IGVhcmxpZXIuCi0JICBGaXhlcyAjNTk2MzY2Ci0KLTIwMDktMTAtMDQgMTk6NTE6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKLQkgIHRlc3RzOiBpbml0IHZhcmlhYmxlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgb24gb3N4Ci0JICBJbml0IHZhcmlhYmxlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgYW5kIG1ha2UgdGhlIGJ1aWxkIGJvdCBoYXBweQotCSAgKHRoZSBjb21waWxlciBtb3N0IGxpa2VseSBjb21wbGFpbnMgYWJvdXQgdGhpcyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdwotCSAgaGVyZSB0aGF0IGZhaWxfdW5sZXNzIHdpbGwgYWJvcnQvZXhpdCBpbiB0aGUgcGF0aCB3aGVyZSBpdCBmYWlscykuCi0KLTIwMDktMTAtMDMgMjE6MDg6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0aW5kZXguYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSogZ3N0L2dzdHhtbC5jOgotCSogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIGdzdDogcmVtb3ZlIG1vcmUgdW5uZWNlc3NhcnkgY2FzdCB3aGVuIHVzaW5nIGdfc2lnbmFsXyooKQotCi0yMDA5LTEwLTAzIDIwOjQ5OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBkYXRhcXVldWUsIGVsZW1lbnRzOiBhdm9pZCB1bm5lY2Vzc2FyeSBydW50aW1lIHR5cGUgY2hlY2tzCi0KLTIwMDktMTAtMDUgMTY6NDE6NTAgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIGRvY3M6IFVwZGF0ZSB0aGUgcmVsZWFzZSBzY3JpcHQKLQkgIFJlbW92ZSBvbGQgY3J1ZnQgZnJvbSB0aGUgcmVsZWFzZSBzY3JpcHQsIGFuZCBjaGFuZ2Ugc29tZSBDVlMKLQkgIHJlZmVyZW5jZXMgdG8gZXF1aXZhbGVudCBnaXQgY29tbWFuZHMKLQotMjAwOS0xMC0wNCAxNDozMDozNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JICBwbHVnaW5sb2FkZXI6IEFkZCBhIG1hZ2ljIG51bWJlciBhbmQgbWF4aW11bSBzaXplIGxpbWl0LgotCSAgR3VhcmQgYWdhaW5zdCBhIGhvc3RpbGUgY2hpbGQgcHJvY2VzcyB0aGF0IHNlbmRzIGJvZ3VzIGRhdGEKLQkgIGR1ZSB0byBtZW1vcnkgY29ycnVwdGlvbiBieSBhZGRpbmcgYSBtYWdpYyBudW1iZXIgdG8gZWFjaCBwYWNrZXQsCi0JICBhbmQgbGltaXQgdGhlIG1heGltdW0gc2l6ZSBvZiBhbnkgbWVzc2FnZSB0byAzMk1CCi0KLTIwMDktMDItMDkgMTM6MzM6MDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSAgcmVnaXN0cnk6IEFsc28gY2hlY2sgdGhlIGJpbmFyeSByZWdpc3RyeSBjaHVuayB2ZXJzaW9uIG9mIHRoZSBjaGlsZC4KLQkgIFdoZW4gdHJ5aW5nIHRvIGZpbmQgYSBmdW5jdGlvbiBwbHVnaW4tc2Nhbm5lciwgaW5jbHVkZSBhIGNoZWNrIG9uIHRoZQotCSAgdmVyc2lvbiBvZiB0aGUgYmluYXJ5IHJlZ2lzdHJ5IGNodW5rcyBpdCBzZW5kcywgdG8gbWFrZSBzdXJlIGl0J3MKLQkgIHdoYXQgd2UgdW5kZXJzdGFuZC4KLQotMjAwOS0wMi0wNiAwOTo0OTozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6Ci0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JKiBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmFtOgotCSAgcmVnaXN0cnk6IFN1cHBvcnQgaW5zdGFsbGVkL3VuaW5zdGFsbGVkIHBsdWdpbi1zY2FubmVyIGhlbHBlcgotCSAgQWRkIGEgc2ltcGxlIHZlcnNpb24gY2hlY2sgd2hlbiBzdGFydGluZyB0aGUgcGx1Z2luLXNjYW5uZXIgc28gd2UgY2FuCi0JICB2ZXJpZnkgd2UncmUgdGFsa2luZyB0byBvbmUgdGhhdCB0YWxrcyB0aGUgc2FtZSBsYW5ndWFnZS4KLQkgIEZpcnN0IHRyeSBhIHBsdWdpbi1zY2FubmVyIGluIHRoZSBpbnN0YWxsZWQgcGF0aCwgdGhlbiB0cnkgb25lIHZpYSB0aGUKLQkgIEdTVF9QTFVHSU5fU0NBTk5FUiBlbnYgdmFyIGlmIHRoYXQgZG9lc24ndCB3b3JrLgotCSAgVXBkYXRlIHRoZSB1bmluc3RhbGxlZCBzY3JpcHQuCi0JICBJbnN0YWxsIHRoZSBwbHVnaW4tc2Nhbm5lciB0byB0aGUgbGliZXhlYyBkaXIKLQotMjAwOS0wMS0zMCAxNDoxODoxMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIFJlbW92ZSBjaGVja2luZyBmb3IgYW5kIG1lbnRpb25zIG9mIGZvcmsgd2hlcmUgcG9zc2libGUuCi0JICBXZSBubyBsb25nZXIgdXNlIGZvcmsoKSBkaXJlY3RseSwgaW5zdGVhZCB1c2luZyBnbGliJ3Mgc3Bhd24KLQkgIGZ1bmN0aW9uYWxpdHksIHNvIGRvbid0IGNoZWNrIGZvciBpdCwgYW5kIGRvbid0IHVzZSBpdCBpbiB0aGUKLQkgIGRvY3VtZW50YXRpb24gbm90ZXMuCi0KLTIwMDktMDEtMzAgMTM6MDY6MTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBSZS1lbmFibGUgYW5kIGZpeCBkaXNhYmxlZCBiaXQgb2YgdGhlIHJlZ2lzdHJ5IHRlc3QKLQotMjAwOS0wMS0zMCAxMzowNDo1MiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIE9ubHkgbG9hZCB0aGUgcmVnaXN0cnkgY2FjaGUgb25jZSBwZXIgcHJvY2Vzcy4KLQkgIFdoZW4gdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5LCB3ZSBkb24ndCBuZWVkIHRvIHJlLXJlYWQgdGhlIHJlZ2lzdHJ5IGNhY2hlCi0JICBhbmQgd2FzdGUgdGltZSByZXBsYWNpbmcgYWxsIG91ciBleGlzdGluZywgaG9wZWZ1bGx5IGlkZW50aWNhbCwgcGx1Z2lucwotCSAgYW5kIGZlYXR1cmVzIHRoYXQgd2UncmUgYWJvdXQgdG8gcmUtc2NhbiBhbnl3YXkuCi0KLTIwMDktMDEtMjkgMTM6MjI6MTQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBBZGQgc29tZSBtb3JlIGRlYnVnIHRoZSByZWdpc3RyeS4KLQkgIEFkZCB0aGUgZnVsbCBzZXQgb2YgZGVidWcgYWJvdXQgd2h5IGl0J3MgZGVjaWRlZCB0aGF0IGEgZ2l2ZW4gcGx1Z2luIGlzCi0JICBzdGFsZSBvciBub3QsIGFuZCBpbmNsdWRlIHRoZSBwbHVnaW4gbmFtZSB3aGVuIGZpbmFsaXppbmcgaXQuCi0KLTIwMDktMDEtMjMgMjE6MTU6NDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSogZ3N0L2dzdHBsdWdpbmxvYWRlci5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgQWRkIHJlc3RhcnRpbmcgb2YgdGhlIHBsdWdpbiBsb2FkZXIgYW5kIGJsYWNrbGlzdGluZyBvZiBicm9rZW4gZmlsZXMKLQotMjAwOS0wMS0yMyAxNTo0NzowOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmM6Ci0JKiBnc3QvZ3N0cGx1Z2lubG9hZGVyLmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIFBsdWdpbiBsb2FkZXIgcGhhc2UgMgotCSAgcGhhc2UgMiAtIG1ha2UgdGhlIHBsdWdpbiBsb2FkZXIgcmVjZWl2ZSB0aGUgbGlzdCBvZiBwbHVnaW5zIHRvIGxvYWQgYW5kCi0JICBzZW5kIGJhY2sgdGhlIHJlc3VsdHMgYXN5bmNocm9ub3VzbHksIHNvIHdlIGRvbid0IGNvbnRleHQgc3dpdGNoIGJhY2sKLQkgIGFuZCBmb3J0aCBzbyBtdWNoLgotCi0yMDA5LTAzLTE0IDIzOjA3OjQwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuYzoKLQkqIGdzdC9nc3RwbHVnaW5sb2FkZXIuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnljaHVua3MuaDoKLQkqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvaGVscGVycy8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2hlbHBlcnMvcGx1Z2luLXNjYW5uZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RyZWdpc3RyeS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICByZWdpc3RyeTogQWRkIHJlZ2lzdHJ5IGhlbHBlciBwaGFzZSAxCi0JICBQaGFzZSAxIG9mIGFkZGluZyB0aGUgcmVnaXN0cnkgc2NhbiBoZWxwZXIKLQotMjAwOS0wOS0xNCAyMzozMToxMCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIHJlZ2lzdHJ5OiBSZWFycmFuZ2Ugc29tZSB0aGluZ3MuCi0JICBQcmVwYXJlIHRvIGxhbmQgdGhlIGV4dGVybmFsIHBsdWdpbiBoZWxwZXIgcHJvY2VzcwotCi0yMDA5LTEwLTA2IDE5OjQxOjM4ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQgLT4gMC4xMC4yNS4xCi0KLT09PSByZWxlYXNlIDAuMTAuMjUgPT09Ci0KLTIwMDktMTAtMDUgMTI6NTc6MDMgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkgIFJlbGVhc2UgMC4xMC4yNQotCi0yMDA5LTEwLTA1IDEyOjQxOjQyICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDktMTAtMDEgMTY6MjQ6NTIgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIDAuMTAuMjQuNCBwcmUtcmVsZWFzZQotCi0yMDA5LTA5LTMwIDE1OjUyOjMzICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSAgbGliZ3N0Y2hlY2s6IERvbid0IHVzZSBjaGFyYWN0ZXIgY2xhc3NlcyBpbiBzZWQgZXhwcmVzc2lvbnMKLQkgIEFwcGFyZW50bHkgdGhlIHNlZCB0aGF0IHNoaXBzIG9uIFNvbGFyaXMgMTAgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3RlcgotCSAgY2xhc3NlcyBsaWtlIFs6YWxudW06XSwgc28gZG9uJ3QgdXNlIHRoZW0uIFdlIGRvbid0IG5lZWQgdGhlbSBmb3IgdGhlCi0JICBzeW1ib2wgbmFtZXMgdGhhdCBhcmUgYmVpbmcgZXh0cmFjdGVkIGFueXdheS4KLQkgIEFsc28sIHVzZSAkKFNFRCkgaW5zdGVhZCBvZiAnc2VkJwotCSAgRml4ZXM6ICM1OTY4NzcKLQotMjAwOS0wOS0xNyAwMToyMDowMyArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgMC4xMC4yNC4zIHByZS1yZWxlYXNlCi0KLTIwMDktMDktMTUgMDk6NDE6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBGaXggR01QIHNjYWxpbmcgdW5pdCB0ZXN0Ci0JICBHTVAgb25seSB1c2VzICJ1bnNpZ25lZCBsb25nIGludCIsIHdoaWNoIGlzIDMyIGJpdAotCSAgb24gMzIgYml0IGFyY2hpdGVjdHVyZXMgYW5kIGNhbid0IGhvbGQgYSBndWludDY0LgotCSAgVGhpcyByZXN1bHRlZCBpbiBmYWxzZSB1bml0IHRlc3QgZmFpbHVyZXMgb24gMzIgYml0IGFyY2hpdGVjdHVyZXMuCi0JICBGaXhlcyBidWcgIzU5NTEzMy4KLQotMjAwOS0wOS0xNCAxMjo0NzoyNiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSAgRml4IG91dC1vZi10cmVlIGJ1aWxkCi0KLTIwMDktMDktMTQgMTQ6MDc6NTUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIGRvY3M6IEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgaXMgaW1wbGVtZW50ZWQgbm93YWRheXMuCi0JICBEb2NzIHdlcmUgc3RpbGwgbWVudGlvbiBpdCBhcyAibm90IHlldCBpbXBsZW1lbnRlZCIuCi0KLTIwMDktMDktMTIgMTM6NTI6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBpbnRyb3NwZWN0aW9uOiBCdWlsZCBwa2djb25maWcgYmVmb3JlIGFsbCBsaWJyYXJpZXMgYW5kIHNldCBQS0dfQ09ORklHX1BBVEgKLQkgIFRoaXMgd2F5IGctaXItc2Nhbm5lciBjYW4gZmluZCB0aGUgZ3N0cmVhbWVyLTAuMTAgcGtnLWNvbmZpZyBmaWxlLgotCi0yMDA5LTA5LTEyIDEzOjUxOjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIGludHJvc3BlY3Rpb246IERvbid0IHR5cGVkZWYgR3N0VGFnTGlzdCB0byBHc3RTdHJ1Y3R1cmUgZm9yIGdvYmplY3QtaW50cm9zcGVjdGlvbgotCi0yMDA5LTA5LTExIDIzOjIxOjMwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgMC4xMC4yNC4yIHByZS1yZWxlYXNlCi0KLTIwMDktMDktMTEgMjI6NDI6NTEgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIERvbid0IHVzZSBDKysgc3R5bGUgY29tbWVudHMKLQotMjAwOS0wOS0xMSAyMjoyMjozNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgbWVzc2FnZTogRGlzYWJsZSByZXN0cmljdGlvbiB0aGF0IHN0cnVjdHVyZSBjaGFuZ2VzIGFyZSBzaW5rIHBhZHMKLQkgIFRoZSBzdHJ1Y3R1cmVfY2hhbmdlIG1lc3NhZ2Ugd2FzIG9yaWdpbmFsbHkgZW1pdHRlZCBvbiBzb3VyY2UgcGFkcyBhbmQKLQkgIHRoZW4gcmVjZW50bHkgY2hhbmdlZCB0byBiZSBzaW5rIHBhZHMuIFRoaXMgY2F1c2VzIGEgZmFpbHVyZSBpbiB0aGUKLQkgIGdzdC1weXRob24gdGVzdHN1aXRlLiBEaXNhYmxlIHRoZSByZXN0cmljdGlvbiBzbyB0aGF0IHRoZSBwdWJsaXNoZWQKLQkgIGJlaGF2aW91ciBpcyBzdGlsbCBhbGxvd2VkLgotCi0yMDA5LTA5LTExIDE4OjI0OjE4ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKLQkgIGNoZWNrOiBGaXggdmVyc2lvbiBjaGVjayB0ZXN0cwotCSAgQWNjb21vZGF0ZSB0aGUgc2xpZ2h0bHkgY2hhbmdlZCBzZW1hbnRpY3MgaW4gdGhlIHBsdWdpbiB2ZXJzaW9uIGNoZWNrCi0JICB3aGVyZSBhIENWUyB2ZXJzaW9uIGp1c3QgYmVmb3JlIGEgcmVsZWFzZSBpcyBhY2NlcHRhYmxlLgotCi0yMDA5LTA5LTExIDIxOjIwOjU3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgYmluYXJ5cmVnaXN0cnk6IGRvbid0IGNyYXNoIGluIGNsZWFuaW5nIHVwIG9uIGVycm9yLgotCSAgRG9uJ3QgZGVyZWZlcmVuY2UgTlVMTCBwb2ludGVycy4KLQotMjAwOS0wNy0yMCAxMjo1NDowMCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBkZWJ1ZzogdXNlIGR1bW15IGNvZGUgdG8gYXZvaWQgc3B1cmlvdXMgc2VtaWNvbG9ucwotCSAgRml4ZXMgYnVnICM1ODkxNzMuCi0KLTIwMDktMDktMTAgMTE6NTM6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSAgd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA5LTA5LTEwIDExOjQxOjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgcGx1Z2luZmVhdHVyZTogaW1wcm92ZSB2ZXJzaW9uIGNoZWNrCi0JICBBbHNvIHBhcnNlIHRoZSBuYW5vIG9mIHRoZSB2ZXJzaW9uIGFuZCBhc3N1bWUgdGhhdCBYLlkuWi0xLjEgPj0gWC5ZLloKLQkgIFdpdGggdGhpcyBjaGFuZ2Ugd2UgY2FuIGFsc28gY2hlY2sgZGV2ZWxvcG1lbnQgdmVyc2lvbnMgYWdhaW5zdCB0aGUgdmVyc2lvbiBvZgotCSAgdGhlIHVwY29tbWluZyByZWxlYXNlLgotCi0yMDA5LTA5LTEwIDEwOjA1OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIHRhZ2xpc3Q6IEFkZCBGSVhNRSBmb3IgMC4xMSB0byBub3QgdHlwZWRlZiBHc3RUYWdMaXN0IHRvIGJlIGEgR3N0U3RydWN0dXJlCi0JICBTZWUgYnVnICM1MTg5MzQuCi0KLTIwMDktMDktMDkgMTY6Mjk6MTAgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgRml4IHR5cG8gaW4gaW5saW5lIGRvY3VtZW50YXRpb24KLQotMjAwOS0wOS0wOSAxNzo1Nzo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIFVwZGF0ZSBjb21tb24KLQotMjAwOS0wOS0wOSAxODozODoyOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IEFkZCBhIGNvbW1lbnQgdG8gdGhlIHNjYWxpbmcgZnVuY3Rpb25zIHRvIGV4cGxhaW4gd2h5IHRoZSByb3VuZGluZyBpcyBjb3JyZWN0Ci0KLTIwMDktMDktMDkgMTY6NDU6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IGRvbid0IHVucmVmIE5VTEwgY2FwcwotCSAgQ2FwcyBjYW4gYmUgTlVMTCBzbyBkb24ndCBjYWxsIHVucmVmIG9uIGl0IHVuY29uZGl0aW9uYWxseSwgaW5zdGVhZCB1c2UgYW4KLQkgIGV4aXN0aW5nIGV4aXQgcGFkIGZvciB0aGUgZnVuY3Rpb24uCi0KLTIwMDktMDktMDkgMTQ6NTM6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBVc2UgZ2NjJ3MgX191aW50MTI4X3QgZm9yIDY0Yml0IHVuc2lnbmVkIGludGVnZXIgc2NhbGluZwotCSAgVGhpcyBpcyBhdmFpbGFibGUgaW4gbmV3ZXIgZ2NjIHJlbGVhc2VzIGFuZCBpdCBzaG91bGQgb25seSBleGlzdAotCSAgb24gcGxhdGZvcm1zIHRoYXQgcHJvdmlkZSBzb21lIG5hdGl2ZSAxMjhiaXQgaW50ZWdlciBhcml0aG1ldGljCi0JICBpbnN0cnVjdGlvbnMuCi0JICBUaGUgeDg2LTY0IGFzc2VtYmx5IGZvciB0aGlzIGlzIHN0aWxsIGtlcHQgZm9yIG5vbi1nY2MgY29tcGlsZXJzCi0JICB0aGF0IGRvbid0IHByb3ZpZGUgX191aW50MTI4X3QgbWFnaWMuCi0KLTIwMDktMDktMDkgMDk6Mzg6NTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9yYW5kb20vZW5zb25pYy9kcmFmdC1idWZmZXJwb29scy50eHQ6Ci0JICBkZXNpZ246IGFkZCBpZGVhcyBmb3IgYnVmZmVyIG1hbmFnZW1lbnQKLQkgIFJpZ2h0IG5vdyB3ZSdyZSBvcGVyYXRpbmcgc3Vib3B0aW1hbCB3aGVuIHRhbGtpbmcgdG8ga2VybmVsIGludGVyZmFjZXMuIFdyaXRlCi0JICBkb2VzbiBzb21lIGlkZWFzLgotCi0yMDA5LTA5LTA3IDE4OjI3OjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgZml4IHdoaXRlc3BhY2UKLQotMjAwOS0wOS0wMyAxOTowNjoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBhZGFwdGVyOiBmaXggd2hpdGVzcGFjZQotCi0yMDA5LTA5LTA3IDE2OjE0OjU3ICswMjAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBkb2NzOiBGaXggdHlwbyBpbiBnc3RfdmFsdWVfdW5pb24oKQotCi0yMDA5LTA5LTA2IDE5OjQzOjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkgIGJpdHJlYWRlciwgYnl0ZXJlYWRlcjogYWRkIHNvbWUgRklYTUUgMC4xMSBjb21tZW50cyBhbmQgZml4IGluZGVudGluZwotCi0yMDA5LTA5LTA0IDE3OjE1OjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci1kb2NzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgotCSAgYnl0ZXJlYWRlcjogYWRkIHVuY2hlY2tlZCBhbmQgaW5saW5lIHZlcnNpb25zIG9mIHRoZSBmbG9hdCBnZXR0ZXJzL3BlZWtlcnMKLQkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdCpfdW5jaGVja2VkKCkKLQotMjAwOS0wOS0wNCAxNjo1MjowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6Ci0JICBieXRlcmVhZGVyOiBhZGQgaW5saW5lIHZlcnNpb25zIG9mIHRoZSBtb3N0IGNvbW1vbiBnZXR0ZXJzIGFuZCBzZXR0ZXJzCi0KLTIwMDktMDktMDIgMTE6MjA6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci1kb2NzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgotCSogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6Ci0JICBieXRlcmVhZGVyOiBhZGQgaW5saW5lZCBfdW5jaGVja2VkKCkgdmFyaWFudHMgZm9yIHNvbWUgZnVuY3Rpb25zCi0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCgpCi0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9wZWVrXypfdW5jaGVja2VkKCkKLQkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX2dldF8qX3VuY2hlY2tlZCgpCi0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl97cGVlayxnZXQsZHVwfV9kYXRhX3VuY2hlY2tlZCgpCi0KLTIwMDktMDktMDUgMTI6MzA6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgaW50cm9zcGVjdGlvbjogU3RyaXAgR3N0IHByZWZpeCBmcm9tIGFsbCB0eXBlcy9mdW5jdGlvbnMKLQotMjAwOS0wOS0wNSAxMjoyMjozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkgIGludHJvc3BlY3Rpb246IEZpeCBmb3Igb3V0LW9mLXRyZWUgYnVpbGRzCi0KLTIwMDktMDktMDUgMTI6MDQ6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgaW50cm9zcGVjdGlvbjogRml4IG91dC1vZi10cmVlIGJ1aWxkCi0KLTIwMDktMDktMDUgMTE6NTE6NTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgaW50cm9zcGVjdGlvbjogRml4IGJ1aWxkIGlmIGdpci1yZXBvc2l0b3J5IGlzIG5vdCBpbnN0YWxsZWQKLQotMjAwOS0wOS0wNSAwOTozNjoyMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkgIG5ldDogQWRkIGdvYmplY3QtaW50cm9zcGVjdGlvbiBzdXBwb3J0Ci0KLTIwMDktMDktMDUgMDk6MzQ6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06Ci0JICBkYXRhcHJvdG9jb2w6IEFkZCBnb2JqZWN0LWludHJvc3BlY3Rpb24gc3VwcG9ydAotCSAgQmVjYXVzZSBvZiBhIGJ1ZyBpbiBnb2JqZWN0LWludHJvc3BlY3Rpb24gdGhpcyBpcyBkaXNhYmxlZCBmb3Igbm93LgotCi0yMDA5LTA5LTA1IDA5OjI4OjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkgIGNvbnRyb2xsZXI6IEFkZCBnb2JqZWN0LWludHJvc3BlY3Rpb24gc3VwcG9ydAotCi0yMDA5LTA5LTA1IDA5OjI3OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBjaGVjazogQWRkIGdvYmplY3QtaW50cm9zcGVjdGlvbiBzdXBwb3J0Ci0KLTIwMDktMDktMDUgMDk6MjM6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiAuZ2l0aWdub3JlOgotCSogZ3N0Ly5naXRpZ25vcmU6Ci0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSAgZ3N0YmFzZTogQWRkIGdvYmplY3QtaW50cm9zcGVjdGlvbiBzdXBwb3J0Ci0KLTIwMDktMDktMDQgMjA6NTY6NDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvLmdpdGlnbm9yZToKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuYzoKLQkgIGdzdDogQWRkIGdvYmplY3QtaW50cm9zcGVjdGlvbiBzdXBwb3J0Ci0JICBQYXJ0aWFsbHkgZml4ZXMgYnVnICM1NTA2MTYuCi0KLTIwMDktMDktMDUgMTA6MTk6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gOTRmOTVlMyB0byAxOWZhNGYzCi0KLTIwMDktMDktMDQgMTk6Mzc6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkgIGRvY3M6IGZpeCBkb2NzIGZvciBnc3RfYnl0ZV9yZWFkZXJfe2dldHxwZWVrfV9mbG9hdCooKQotCi0yMDA5LTA5LTA0IDExOjM1OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGV2ZW50OiB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDktMDktMDQgMDk6NTE6MjYgKzAyMDAgIEF1cmVsaWVuIEdyaW1hdWQgPGdzdGVsenpAeWFob28uZnI+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogT25seSB1bnJlZiBFT1MgbWVzc2FnZSBhZnRlciBpdCBpcyBub3QgdXNlZCBhbnltb3JlCi0JICBGaXhlcyBidWcgIzU5NDEwNy4KLQotMjAwOS0wOS0wMiAxODo1NDowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHN0YXRlczogcG9zdCBzdHJ1Y3R1cmUgY2hhbmdlIG9uIHNpbmtwYWRzCi0JICBQb3N0IHRoZSBzdHJ1Y3R1cmUgY2hhbmdlIG1lc3NhZ2VzIG9uIHRoZSBzaW5rcGFkcyBvZiB0aGUgZWxlbWVudHMuIFRoaXMgYWxsb3dzCi0JICB1cyB0byBjYXRjaCB1bmxpbmtlZCBwYWRzIGVhcmxpZXIgd2l0aG91dCBlbmRpbmcgdXAgd2l0aCBpbmNvbnNpc3RlbnQgZWxlbWVudAotCSAgZGVncmVlcy4KLQotMjAwOS0wOS0wMiAxODoxMzoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBhdm9pZCBmYWxzZSAnbG9vcCBkZXRlY3RlZCcgd2FybmluZ3MKLQkgIFdoZW4gd2UgZGV0ZWN0IGEgcGFkIHVubGluayBpbiBwcm9ncmVzcywgd2Ugd2lsbCBub3QgYmUgdXBkYXRpbmcgdGhlIGRlZ3JlZSBvZgotCSAgdGhlIHBhcmVudCBlbGVtZW50LiBUaGlzIGNhbiBjYXVzZSBmYWxzZSBsb29wIGRldGVjdGVkIHdhcm5pbmdzIGJlY2F1c2UgdGhlCi0JICBkZWdyZWUgY291bnRlciBpcyBpbnZhbGlkLiBIYW5kbGUgdGhpcyBjYXNlIGJ5IG1hcmtpbmcgdGhlIGl0ZXJhdG9yIGFzICdkaXJ0eScKLQkgIHdoZW4gd2UgZGV0ZWN0IGEgcGFkIHVubGluayBhbmQgYXZvaWQgZW1pdGluZyB0aGUgd2FybmluZyBpbiB0aGlzIGNhc2UuIFdlIGhhdmUKLQkgIHRvIGNvbnRpbnVlIG91ciBzdGF0ZSBjaGFuZ2UgYXMgZ29vZCBhcyB3ZSBjYW4sIHdlIHdpbGwgZXZlbnR1YWxseSByZXN5bmMgd2hlbgotCSAgdGhlIHBhZCB1bmxpbmsgY29tcGxldGVkLgotCi0yMDA5LTA5LTAxIDE2OjQ5OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgYmFzZXNyYzogd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA5LTA5LTAxIDE2OjQ5OjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBidWZmZXI6IHdoaXRlc3BhY2UgZml4ZXMKLQotMjAwOS0wOS0wMSAxMjowNzozMSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkgIGRpc3Q6IERvbid0IGxpc3QgdGhlIHN0cmVhbXMgc3ViZGlyIHR3aWNlIGluIGV4YW1wbGVzIE1ha2VmaWxlCi0JICBMaXN0aW5nIHRoZSAnc3RyZWFtcycgc3ViZGlyIHR3aWNlIGluIERJU1RfU1VCRElSUyBicmVha3MgZGlzdGNoZWNrLgotCi0yMDA5LTA5LTAxIDEyOjA1OjUxICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGdzdGJpbjogRG9uJ3QgcHJvcGFnYXRlIGEgTlVMTCBjYWNoZWQgaW5kZXggdG8gYWRkZWQgZWxlbWVudHMKLQkgIFdoZW4gYW4gZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgYmluLCBvbmx5IHNldCB0aGUgaW5kZXggaWYgd2UgaGF2ZSBhCi0JICBjYWNoZWQgaW5kZXgsIHJhdGhlciB0aGFuIHNldHRpbmcgYSBOVUxMIGluZGV4IG9uIGVsZW1lbnRzIHRoYXQgbWlnaHQKLQkgIGhhdmUgYSBkZWZhdWx0IGluZGV4IG9iamVjdCBvZiB0aGVpciBvd24uCi0KLTIwMDktMDctMTkgMjE6MjM6MTggKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIGRvY3M6IEFkZCBhIG5vdGUgYWJvdXQgcmVnZW5lcmF0aW5nIHRoZSBjaGFuZ2Vsb2cgaW4gdGhlIHJlbGVhc2Ugc2NyaXB0Ci0KLTIwMDktMDktMDEgMTA6MDM6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogZG9uJ3QgdGFrZSBvYmplY3QgbG9jayBmb3IgZ19jcml0aWNhbCgpIGFuZCBmbGVzaCBvdXQgd2FybmluZyBtZXNzYWdlIHNvbWUgbW9yZQotCi0yMDA5LTA5LTAxIDEwOjIxOjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBpdGVyYXRvcjogQWRkIHVuaXQgdGVzdCBmb3IgdGhlIHNpbmdsZSBpdGVyYXRvcgotCi0yMDA5LTA5LTAxIDEwOjIwOjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBpdGVyYXRvcjogT25seSB2aXNpdCB0aGUgZWxlbWVudCBhIHNpbmdsZSB0aW1lIGluIHRoZSBzaW5nbGUgaXRlcmF0b3IKLQotMjAwOS0wOS0wMSAwNzoyNzoyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgaXRlcmF0b3I6IEZpeCBzaW5nbGUgaXRlcmF0b3IgZm9yIE5VTEwgb2JqZWN0cyBhbmQgbm9uLUdUeXBlSW5zdGFuY2Ugb2JqZWN0cwotCSAgRml4ZXMgYnVnICM1OTM3MTkuCi0KLTIwMDktMDktMDEgMDA6MDA6NTcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGRlYnVnOiBtb3JlIGRldGFpbCBpbiB3cm9uZy1zdGF0ZS1vbi1kaXNwb3NlIGVycm9yLgotCSAgQWxzbyB0ZWxsIGluIHdoaWNoIHN0YXRlIHRoZSBlbGVtZW50IGFjdHVhbHkgaXMgYW5kIGlmIGl0IGlzIGV2ZW50dWFseQotCSAgc3RhdGUtbG9ja2VkLgotCi0yMDA5LTA4LTMxIDIwOjM4OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkgIGl0ZXJhdG9yOiBmaXggZG9jcyBmb3IgX25ld19zaW5nbGUoKS4KLQotMjAwOS0wOC0zMSAxNjo1NjoyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuaDoKLQkgIGRvY3M6IGl0J3MgaXRzCi0JICBUaGUgcGFuZGEgc2F5cyBubyEKLQotMjAwOS0wOC0yOSAyMDo0NDozNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgcmVnaXN0cnk6IGZpbGwgaW4gZWxlbWVudGZhY3Rvcnkgd2hlbiByZWdpc3RlcmluZyBlbGVtZW50Ci0JICBlbGVtZW50ZmFjdG9yeSBmaWVsZCBpcyBmaWxsZWQgaW4gYnkgZ3N0X2VsZW1lbnRfYmFzZV9jbGFzc19pbml0LAotCSAgYnV0IGl0IG5lZWRzIHNvbWUgaW5mbyBzZXQgb24gdGhlIGVsZW1lbnQncyB0eXBlLCBzbyBoYXZlIGl0Ci0JICBhdmFpbGFibGUgcHJpb3IgdG8gY2xhc3Mgc3RydWN0dXJlIGNyZWF0aW9uIHNwaW5uaW5nIHVwLgotCSAgVGhpcyBhZmZlY3RzIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIHdlbGwta25vd24vcHVibGljIHR5cGUgKGUuZy4gcGlwZWxpbmUpCi0JICBhbmQgY2FuIGJlIGNyZWF0ZWQgYnkgb3RoZXIgbWVhbnMgdGhhbiBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UKLQkgICh3aGljaCB3aWxsIGFsc28gZmlsbCBpbiB0aGUgZWxlbWVudCdzIGZhY3RvcnkpLgotCi0yMDA5LTA4LTMxIDExOjQ1OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiB1c2UgMTI4Yml0cyBkaXZpc2lvbiBvbiB4ODZfNjQKLQotMjAwOS0wOC0yOSAwNDo0NDo1MSArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgc3lzdGVtY2xvY2s6IGZpeCBjb21waWxhdGlvbiBvZiB3aW4zMiBjb2RlCi0JICBGaXhlcyAjNTkzNDYwLgotCi0yMDA5LTA4LTI4IDE4OjM3OjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IGNhY2hlIGluZGV4Ci0JICBDYWNoZSB0aGUgbGFzdCBpbmRleCB0aGF0IHdhcyBzZXQgd2l0aCBfc2V0X2luZGV4KCkgYW5kIHJldHVybiB0aGlzIGluIHRoZQotCSAgX2dldF9pbmRleCgpIGNhbGwuCi0JICBTZXQgdGhlIGNhY2hlZCBpbmRleCBvbiBuZXdseSBhZGRlZCBlbGVtZW50cy4KLQkgIEZpeGVzICM1NjY4ODEKLQotMjAwOS0wOC0yOCAxODozNTo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IGJldHRlciB0eXBlIGNoZWNrcwotCSAgQWRkIEdTVF9DTE9DSyB0eXBlY2hlY2sgZm9yIF9zZXRfY2xvY2soKS4KLQkgIEFsbG93IHNldHRpbmcgTlVMTCBpbmRleGVzIG9uIGVsZW1lbnQgKGNsZWFyIHRoZSBjdXJyZW50IGluZGV4KQotCSAgU29tZSB3aGl0ZXNwYWNlIGZpeGVzLgotCi0yMDA5LTA4LTI4IDE4OjE0OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgZWxlbWVudDsgd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA5LTA4LTI4IDE4OjA2OjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGRlZnM6IGFkZCBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSB0byBkZWZzCi0KLTIwMDktMDgtMjggMTg6MDM6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA5LTA4LTI4IDE3OjU5OjE1ICswMjAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIENoZWNrIHN1Z2dlc3RlZCBjYXBzIGZvciBwcm94eSBhbGxvYwotCSAgQmVjYXVzZSB3ZSBhcmUgdHJ5aW5nIHRvIHJlc29sdmUgYSBzdWdnZXN0aW9uIGhlcmUgd2UgZG9uJ3QgbmVlZAotCSAgdG8gY2hlY2sgb24gY2FwcyBmb3IgcHJveHlfYWxsb2MgYnV0IHdlIG5lZWQgdG8gY2hlY2sgb24gdGhlCi0JICBzdWdnZXN0ZWQgY2FwcyBpbnN0ZWFkLgotCi0yMDA5LTA4LTI4IDE3OjQ5OjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JICBxdWV1ZTogd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA5LTA4LTI4IDE3OjAyOjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIHN5c3RlbWNsb2NrOiB1c2UgcHJlZm9ybWFuY2UgY291bnRlcnMgb24gd2luZG93cwotCSAgQmFzZWQgb24gY2xvY2sgaW1wbGVtZW50YXRpb24gYnkgSMOldmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQkgIFRyeSB0byBnZXQgdGhlIHRpbWUgb24gd2luZG93cyB1c2luZyB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnMuIFRoZXNlIGhhdmUgYSBtdWNoCi0JICBoaWdoZXIgcmVzb2x1dGlvbiBhbmQgYWNjdXJhY3kgdGhhbiB0aGUgcmVndWxhciBnZXRjdXJyZW50dGltZSgpLiBCZSBjYXJlZnVsIHRvCi0JICBmYWxsIGJhY2sgdG8gcmVndWxhciBnZXRjdXJyZW50dGltZSgpIG9yIHBvc2l4IGNsb2NrcyB3aGVuIHBlcmZvcm1hbmNlIGNvdW50ZXJzCi0JICBhcmUgbm90IGF2YWlsYWJsZS4KLQotMjAwOS0wOC0yOCAxNjowNzoxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6Ci0JICBzeXN0ZW1jbG9jazogZml4IGluZGVudGF0aW9uCi0KLTIwMDktMDgtMjggMTU6MzI6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IHVzZSBzaGlmdCBpbnN0ZWFkIG9mIGRpdmlzaW9uCi0JICBXZSBjYW4gdXNlIGEgc2hpZnQgZm9yIHNjYWxpbmcgdGhlIGRlbm9taW5hdG9yIGluc3RlYWQgb2YgYSBkaXZpZGUgc2luY2UgdGhlCi0JICBkZW5vbSBpcyBhbHdheXMgcG9zaXRpdmUuIFRoaXMgYXZvaWRzIGhhdmluZyB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgY29kZSBmb3IgdGhlCi0JICBkaWZmZXJlbnQgcm91bmRpbmcgcnVsZXMgd2hlbiBzY2FsaW5nIG5lZ2F0aXZlIHZhbHVlcy4KLQotMjAwOS0wOC0yOCAxMzo0NTozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogbWFrZSBpbmxpbmluZyBleHBsaWNpdAotCi0yMDA5LTA4LTI4IDEyOjQzOjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiBvcHRpbWl6ZSBmb3IgeDg2XzY0IHdpdGggc29tZSBpbmxpbmUgYXNtCi0JICA2NGJpdCB4ODYgaGFzIG5hdGl2ZSA2NHg2NC0+MTI4IGJpdCBtdWx0aXBseSB0aGF0IHdlIGNhbiB1c2Ugd2l0aCBzb21lIGlubGluZQotCSAgYXNzZW1ibGVyIHRvIHNwZWVkIHVwIGxhcmdlIG11bHRpcGxpY2F0aW9ucy4KLQkgIFVzZSBic3IgdG8gZmluZCB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgbW9yZSBlZmZpY2llbnRseS4KLQotMjAwOS0wOC0yOCAxMjozMzozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogZmFjdG9yIG91dCB0aGUgbGVhZGluZyB6ZXJvIGNvdW50IGNvZGUKLQotMjAwOS0wOC0yOCAxMjozMDo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogcGFzcyBjb3JyZWN0aW9uIGZhY3RvciBhcm91bmQKLQkgIFBhc3MgdGhlIGNvcnJlY3Rpb24gZmFjdG9yIGFyb3VuZCB0byBnZXQgcmlkIG9mIHRoZSBlbnVtLCBzb21lIGNvZGUKLQkgIGFuZCBzb21lIGJyYW5jaGVzLgotCi0yMDA5LTA4LTI4IDEyOjIxOjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHV0aWxzOiB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDktMDgtMjggMTI6MTk6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IG1vdmUgY29tbW9uIGNvcnJlY3Rpb24gY29kZSBpbiBhIG1hY3JvCi0KLTIwMDktMDgtMjQgMTg6MDE6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIGJhc2VzaW5rOiB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDktMDgtMjYgMTY6NTE6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkgIGl0ZXJhdG9yOiBBbGxvdyB0byB1c2UgTlVMTCBhcyBvYmplY3QgZm9yIHRoZSBzaW5nbGUgaXRlcmF0b3IKLQotMjAwOS0wOC0yNiAxNjozOToxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkqIGdzdC9nc3RpdGVyYXRvci5oOgotCSAgaXRlcmF0b3I6IEFQSTogQWRkIGdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlKCkKLQkgIFRoaXMgYWxsb3dzICJpdGVyYXRpb24iIG92ZXIgYSBzaW5nbGUgb2JqZWN0IG9mIHNvbWUgdHlwZSwKLQkgIHdoaWNoIGhhcHBlbnMgb2Z0ZW4gZm9yIHRoZSBHc3RQYWRJdGVySW50TGlua3NGdW5jdGlvbiBmb3IgZXhhbXBsZS4KLQotMjAwOS0wOC0yNCAxNzo1NzoxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiByZXR1cm4gcmVzdWx0IG9mIF9zZXRfY2FwcygpCi0KLTIwMDktMDgtMjQgMTc6NTY6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDktMDgtMjIgMTQ6MjI6MzEgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0dHJhY2UuaDoKLQkqIGdzdC9nc3R4bWwuaDoKLQkgIEl0J3MgX19HTlVDX18sIG5vdCBfR05VQ18KLQkgIFRoaXMgYXBwZWFycyB0byBiZSBhbiA4IHllYXIgb2xkIGJ1Zy4KLQotMjAwOS0wOC0yMSAwOTo1OTo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICBkb2NzOiBhZGQgbGluayB0byBjZ2l0IHRhcmJhbGwgZG93bmxvYWQgb2YgZ3N0LXRlbXBsYXRlIGluIFBXRwotCSAgU28gcGVvcGxlIHdobyBjYW4ndCB1c2UgZ2l0IGZvciBzb21lIHJlYXNvbiBzdGlsbCBjYW4gZ2V0IGhvbGQKLQkgIG9mIHRoZSBjb2RlLiBTZWUgIzU5MTA2OS4KLQotMjAwOS0wOC0yMCAxMTo1NDo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JICBwbHVnaW5mZWF0dXJlOiBhZGQgZ3VhcmQgdG8gZ3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIKLQkgIFNvIHdlIGRvbid0IGp1c3QgY3Jhc2ggaWYgdGhlcmUncyBhIHJlZmNvdW50aW5nIGJ1ZyBzb21ld2hlcmUgZWxzZS4KLQotMjAwOS0wOC0xOSAxNjoyNDozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDoKLQkgIGRvY3M6IERvbid0IHRhbGsgYWJvdXQgdGhlIGRlcHJlY2F0ZWQgbGliZ25vbWUgYW5kIEdOT01FLVZGUwotCSAgSW5zdGVhZCB0YWxrIGFib3V0IEdJTyBhbmQgY2hhbmdlIHRoZSBvcHRpb24gcGFyc2luZyBleGFtcGxlIHRvCi0JICBub3QgaW5pdGlhbGl6ZSBsaWJnbm9tZSBidXQgb25seSBHVEsuCi0JICBGaXhlcyBidWcgIzU5MjIzMy4KLQotMjAwOS0wOC0xOSAxNToyNTo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZS5hbToKLQkgIGV4YW1wbGVzOiBMaW5rIHJ0cG9vbC10ZXN0IHRvIGxpYnB0aHJlYWQgZm9yIHVzaW5nIHRoZSBQT1NJWCB0aHJlYWRzCi0JICBBbHNvIHRoZSBvdGhlciBzdHJlYW1zIGV4YW1wbGUgY2FuIHJ1biB3aXRob3V0IHB0aHJlYWRzIHRoZXJlZm9yZQotCSAgZW5hYmxlIGl0IGV2ZW4gaWYgcHRocmVhZHMgYXJlIG5vdCBhdmFpbGFibGUuCi0JICBGaXhlcyBidWcgIzU5MjMxNC4KLQotMjAwOS0wOC0xOCAxNDo0NToyMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSAgdG9vbHM6IFVzZSBpdGVyYXRlX2ludGVybmFsX2xpbmtzIGluc3RlYWQgb2YgZGVwcmVjYXRlZCBnZXRfaW50ZXJuYWxfbGlua3MKLQotMjAwOS0wOC0xOCAxNDo0NTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBtdWx0aXF1ZXVlOiBVc2UgaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgZ2V0X2ludGVybmFsX2xpbmtzCi0KLTIwMDktMDgtMTggMTQ6MDU6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JICBnc3RwYWQ6IEFkZCBzb21lIERJU0FCTEVfREVQUkVDQVRFRCBtYXJrZXJzIGluIHRoZSBoZWFkZXIgdG9vCi0JICBUaGUgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBzb21lIHRpbWUgYW5kCi0JICB0aGVyZSBhbHJlYWR5IHdlcmUgR1NUX1JFTU9WRV9ERVBSRUNBVEVEIG1hcmtlcnMgaW4gdGhlIHNvdXJjZSBmaWxlLAotCSAgbm93IGFkZCB0aGVtIHRvIHRoZSBoZWFkZXIgdG9vLgotCSAgRml4ZXMgYnVnICM1OTIyMDkuCi0KLTIwMDktMDgtMTggMTE6Mzg6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6Ci0JICBkb2NzOiBVcGRhdGUgdGhlIGRlc2lnbiBkb2NzIGZvciBiaW4gc3RhdGUgY2hhbmdlcyBhY2NvcmRpbmcgdG8gbGFzdCBjb21taXQKLQotMjAwOS0wOC0xOCAxMTozNjozNiArMDIwMCAgQW50b2luZSBUcmVtYmxheSA8aGV4YTAwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgZ3N0YmluOiBEb24ndCB0cnkgdG8gY2hhbmdlIGNoaWxkcmVuJ3Mgc3RhdGUgaWYgdGhleSdyZSBhbHJlYWR5IGluIHRoZSBzdGF0ZSB3ZSB3YW50Ci0JICBGaXhlcyBidWcgIzM2ODUzNi4KLQotMjAwOS0wOC0xOCAxMTozMzoxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IEFsd2F5cyBnZXQgdGhlIHByb3h5cGFkJ3MgZ2hvc3RwYWQgdmlhIHRoZSBnaG9zdHBhZCBpbiB0aGUgc3JjIGNhcHMgY2hhbmdlIG5vdGlmeSBoYW5kbGVyCi0JICBCZWZvcmUgdGhlIHNpZ25hbCBoYW5kbGVyIHdvdWxkIGdldCB0aGUgZ2hvc3RwYWQgcGFzc2VkIGFzIHNlY29uZAotCSAgYXJndW1lbnQgYnV0IGl0IGNvdWxkJ3ZlIGFscmVhZHkgYmVlbiB1bnJlZmZlZCBhbmQgZGVzdHJveWVkLgotCSAgVGhpcyB3b3VsZCB0aGVuIGxlYWQgdG8gY3Jhc2hlcyBhbmQgYWxsIHRoYXQuCi0JICBOb3cgd2UgZ2V0IHRoZSBnaG9zdHBhZCBmcm9tIHRoZSBwcm94eSBwYWQsIHdoaWNoIHdlIGdldCBmcm9tIHRoZQotCSAgdGFyZ2V0IHBhZCBhcyBpdCdzIHBlZXIuCi0JICBGaXhlcyBidWcgIzU5MTMxOC4KLQotMjAwOS0wOC0xOCAwODo0NTowOCArMDIwMCAgTGF1cmVudCBHbGF5YWwgPHNwZ2xlZ2xlQHlhaG9vLmZyPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6Ci0JICBmaWxlc2luazogQWRkIHByb3BlcnR5IHRvIGFsbG93IHRvIGFwcGVuZCB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGUKLQkgIEZpeGVzIGJ1ZyAjNTkxNDQxLgotCi0yMDA5LTA4LTE0IDExOjUzOjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBSZW1vdmUgZHVwbGljYXRlZCBjaGVjayBmb3IgY2xvY2tfZ2V0dGltZQotCi0yMDA5LTA4LTE0IDExOjEyOjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIGdzdHV0aWxzOiBBZGQgc3BlY2lhbCByYW5kb20gdW5pdCB0ZXN0IGZvciA2NCBzY2FsaW5nIGZ1bmN0aW9ucwotCSAgVGhpcyB0ZXN0cyAxMDAwMDAgcmFuZG9tIG11bHRpcGxpY2F0aW9ucy9kaXZpc2lvbnMgb2YgYWxsIHNjYWxpbmcKLQkgIGZ1bmN0aW9uIHZhcmlhbnRzIGFuZCBjb21wYXJlcyB0aGUgcmVzdWx0IHdpdGggdGhlIHJlc3VsdCB0aGF0IGlzCi0JICBnZW5lcmF0ZWQgYnkgR01QIG9uIHRoZSBzYW1lIGlucHV0LgotCSAgRm9yIHRoaXMgY2hlY2sgZm9yIEdTTCBhbmQgR01QIGR1cmluZyBjb25maWd1cmUgYnV0IG9ubHkgdXNlCi0JICBpdCBmb3IgdGhpcyBzaW5nbGUgdW5pdCB0ZXN0LgotCSAgVGVzdGluZyBmdW5jdGlvbnMgd2VyZSBwcm92aWRlZCBieSBLaXBwIENhbm5vbiA8a2Nhbm5vbkBsaWdvLmNhbHRlY2guZWR1PgotCi0yMDA5LTA4LTEzIDE2OjMxOjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZ3N0dXRpbHM6IEFkZCBuZXcgc2NhbGluZyBmdW5jdGlvbnMgdG8gdGhlIGRvY3MKLQotMjAwOS0wOC0xMyAxNjoyMDo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSAgZ3N0dXRpbHM6IEFkZCAodmVyeSkgbWluaW1hbCB1bml0IHRlc3QgZm9yIHRoZSBuZXcgcm91bmRpbmcgc2NhbGluZyBmdW5jdGlvbnMKLQotMjAwOS0wOC0xMyAxNjoxMDozMSArMDIwMCAgS2lwcCBDYW5ub24gPGtjYW5ub25AbGlnby5jYWx0ZWNoLmVkdT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIGdzdHV0aWxzOiBBUEk6IEFkZCByb3VuZGluZyB0byBuZWFyZXN0IGFuZCBuZXh0IGludGVnZXIgdmVyc2lvbnMgb2YgdGhlIDY0IGJpdCBpbnRlZ2VyIHNjYWxpbmcgZnVuY3Rpb25zCi0JICBUaGUgbmV3IGZ1bmN0aW9ucyBhcmUKLQkgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQoKQotCSAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsKCkKLQkgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCgpCi0JICBnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCgpCi0JICBGaXhlcyBidWcgIzU5MDkxOS4KLQotMjAwOS0wOC0xMiAxMToxMDowNSArMDIwMCAgS2lwcCBDYW5ub24gPGtjYW5ub25AbGlnby5jYWx0ZWNoLmVkdT4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBnc3R1dGlsczogUmV2ZXJ0IHBhcnRzIG9mIGxhc3QgY2hhbmdlIHRvIG9wdGltaXplIHRoZSBzY2FsaW5nIGZ1bmN0aW9ucyBhZ2FpbgotCSAgUGFydGlhbGx5IGZpeGVzIGJ1ZyAjNTkwOTE5LgotCi0yMDA5LTA4LTExIDA5OjE2OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBnc3R1dGlsczogRml4IHZpb2xhdGlvbnMgb2Ygc3RyaWN0LWFsaWFzaW5nIHJ1bGVzIGluIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpCi0KLTIwMDktMDgtMTEgMDk6MTA6NDcgKzAyMDAgIEtpcHAgQ2Fubm9uIDxrY2Fubm9uQGxpZ28uY2FsdGVjaC5lZHU+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZ3N0dXRpbHM6IFJlZmFjdG9yIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpCi0JICBUaGlzIHdpbGwgbGF0ZXIgbWFrZSBpdCBwb3NzaWJsZSB0byBwcm92aWRlIHJvdW5kaW5nIHZlcnNpb25zCi0JICBvZiBpdCB3aXRob3V0IG11Y2ggY29kZSBkdXBsaWNhdGlvbi4KLQkgIFBhcnRpYWxseSBmaXhlcyBidWcgIzU5MDkxOS4KLQotMjAwOS0wOC0xMSAxNToyMDoxOCArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnIGF0IGF4aXMuY29tPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSAgYnVmZmVybGlzdDogdXBkYXRlIGRvYyBzdHJpbmcKLQotMjAwOS0wOC0xMSAxMzoyMTozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgotCSAgZ3N0c2VnbWVudDogQWN0dWFsbHkgc3RhcnQ9PXN0b3A9PXNlZ21lbnRfc3RhcnQgaXMgaW5zaWRlIHRoZSBzZWdtZW50Ci0JICBTdGlsbCB0aGUgb2xkIGNvZGUgd2FzIHdyb25nIGFzIGl0IGNsYWltZWQgdGhhdCBzdGFydD09c3RvcDxzZWdtZW50X3N0YXJ0Ci0JICB3b3VsZCBiZSBpbnNpZGUgdGhlIHNlZ21lbnQgYW5kIHJldHVybmVkIGluc2FuZSBjbGlwcGluZyBkaWZmZXJlbmNlcy4KLQotMjAwOS0wOC0xMSAxMzowMzowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6Ci0JICBnc3RzZWdtZW50OiBGaXggdW5pdCB0ZXN0IGFuZCBhZGQgYW4gYWRkaXRpb25hbCB0ZXN0Ci0JICBUaGUgcHJldmlvdXMgdGVzdCBhc3N1bWVkIHRoYXQgc3RhcnQ9c3RvcD1zZWdtZW50X3N0YXJ0IHdpbGwKLQkgIGJlIGluc2lkZSB0aGUgc2VnbWVudCBidXQgdGhpcyBpcyB3cm9uZy4KLQotMjAwOS0wOC0xMSAxMjo1OToxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBnc3RzZWdtZW50OiBDbGlwcGluZyBzaG91bGQgZGV0ZWN0IHN0YXJ0PXN0b3A8c2VnbWVudF9zdGFydCBhcyBvdXRzaWRlIHRoZSBzZWdtZW50Ci0JICBCZWZvcmUgaXQgcmV0dXJuZWQgdGhhdCBbc3RhcnQsc3RvcF0gaXMgaW5zaWRlIHRoZSBzZWdtZW50IGFuZCB0aGF0IHRoZQotCSAgZGlmZmVyZW5jZSBiZXR3ZWVuIHNlZ21lbnRfc3RhcnQgYW5kIHN0YXJ0IG5lZWRzIHRvIGJlIGNsaXBwZWQuIElmIHRoZQotCSAgY2xpcHBpbmcgaXMgZG9uZSBvbiBhIGJ1ZmZlciAobGlrZSBpbiBiYXNlYXVkaW9zaW5rKSB0aGlzIHdpbGwgcmVzdWx0Ci0JICBpbiB0aGUgZGF0YSBwb2ludGVyIGJlaW5nIGF0IGEgaW52YWxpZCBtZW1vcnkgcG9zaXRpb24uCi0JICBGaXhlcyBidWcgIzU4OTg0OS4KLQotMjAwOS0wOC0xMSAwNTo0NzoyMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKLQkgIGdzdGJ1czogVW5yZWYgcGlwZWxpbmUgYWZ0ZXIgdXNhZ2UgaW4gdGVzdF9jdXN0b21fbWFpbl9jb250ZXh0IHVuaXQgdGVzdAotCSAgVGhpcyBtYWtlcyB0aGUgY29yZSB1bml0IHRlc3RzIHZhbGdyaW5kIGNsZWFuIGFnYWluLgotCi0yMDA5LTA4LTExIDAyOjU0OjU1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKLQkgIGRvY3M6IGFkZCBFZHdhcmQncyBnaXQgcGx1Z2luIG1vdmluZyBob3d0byB0byBtb3ZpbmctcGx1Z2lucyBkb2N1bWVudAotCi0yMDA5LTA4LTEwIDE0OjMwOjM0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSAgY2hlY2tzOiBkb24ndCBmb3JnZXQgdG8gaW5jbHVkZSBjb25maWcuaCBpbiB0aGUgR3N0T2JqZWN0IHVuaXQgdGVzdAotCi0yMDA5LTA4LTEwIDEzOjA1OjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSAgY2hlY2tzOiB0cnkgdG8gZml4IEdzdE9iamVjdCB1bml0IHRlc3Qgb24gT1NYCi0JICBTZWVtcyBsaWtlIHdlIGdldCBTSUdCVVMgaW5zdGVhZCBvZiBTSUdTRUdWIGhlcmUgd2hlbiBHTGliIGNyYXNoZXMKLQkgIHdoZXJlIGl0IHNob3VsZG4ndCBjcmFzaCAoYW5kIHdlIGV2ZW4gaGF2ZSBhIHVuaXQgdGVzdCBmb3IgdGhhdCEpLgotCi0yMDA5LTA4LTEwIDEyOjAxOjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOgotCSAgY2hlY2tzOiBzZXQgcGlwZWxpbmVzIHRvIE5VTEwgc3RhdGUgaW4gcGFyc2UtbGF1bmNoIHVuaXQgdGVzdAotCSAgRml4ZXMgdGltZW91dHMgaW4gZ3N0X3Rhc2tfY2xlYW51cF9hbGwoKS4KLQotMjAwOS0wOC0xMCAxMTo0MjoyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKLQkgIGNoZWNrczogc2V0IHBpcGVsaW5lIGJhY2sgdG8gTlVMTCBzdGF0ZSBpbiBHc3RCdXMgdW5pdCB0ZXN0Ci0JICBGaXhlcyB0aW1lb3V0IGluIGdzdF90YXNrX2NsZWFudXBfYWxsKCkuCi0KLTIwMDktMDgtMTAgMTE6NDM6NTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgY2hlY2s6IGFkZCBzb21lIGxvZ2dpbmcgYmVmb3JlIGNhbGxpbmcgZ3N0X3Rhc2tfY2xlYW51cF9hbGwoKQotCi0yMDA5LTA4LTA4IDIyOjI3OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGNoZWNrOiBDYWxsIGdzdF90YXNrX2NsZWFudXBfYWxsKCkgaW4gR1NUX0VORF9URVNUCi0JICBUaGlzIGZpeGVzIG1hbnkgdW5pdCB0ZXN0cyB1bmRlciB2YWxncmluZCB0aGF0IHNob3dzCi0JICBsZWFraW5nIEdzdFRhc2tzIHRoYXQgYXJlIG5vdCByZWFsbHkgbGVha2VkIGJ1dCBqdXN0Ci0JICBub3QgdW5yZWZmZWQgYnkgdGhlIHRhc2sgdGhyZWFkIGJlZm9yZSB0aGUgdW5pdCB0ZXN0Ci0JICBzdG9wcGVkLgotCSAgRml4ZXMgYnVnICM1OTEwNDUuCi0KLTIwMDktMDgtMDggMTQ6NDc6NTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cwotCi0yMDA5LTA4LTA4IDE0OjQ3OjQwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkgIGdzdDogUmVtb3ZlIGRlYWQgYXNzaWdubWVudHMKLQotMjAwOS0wOC0wNyAwMjozNjoyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uZ2l0aWdub3JlOgotCSAgZ2l0aWdub3JlOiBpZ25vcmUgbmV3IHF1ZXVlLWVycm9yIHRlc3QKLQotMjAwOS0wOC0wNiAyMDo0MDowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSAgY2hlY2s6IGFkZCBpbnRlcm5hbC1jaGVjay5oIHRvIEJVSUxUX1NPVVJDRVMgaW4gYXR0ZW1wdCB0byBmaXggdGhlIGJ1aWxkCi0JICBGb3Igc29tZSBwZW9wbGUgdGhlIGJ1aWxkIG9mIGxpYmdzdGNoZWNrIHdhcyBicm9rZW4gYmVjYXVzZSB0aGUgbWFrZQotCSAgdGFyZ2V0IHRoYXQgY3JlYXRlcyB0aGUgaW50ZXJuYWwtY2hlY2suaCBmaWxlIHdhc24ndCBleGVjdXRlZCBmb3IKLQkgIHNvbWUgcmVhc29uLiBUaGlzIHNob3VsZCBob3BlZnVsbHkgZml4IHRoaXMuCi0KLTIwMDktMDgtMDYgMTg6Mzg6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgYXV0b2dlbi5zaDogb2xkZXIgYWNsb2NhbHMgZG9uJ3QgbGlrZSAtSS4gc28gdXNlIC1JIC4gaW5zdGVhZAotCi0yMDA5LTA4LTA2IDE4OjQ3OjMyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBnc3RidWZmZXI6IGFkZCBhZGRpdGlvbmFsIGNoZWNraW5nIGZvciB3cml0YWJpbGl0eQotCSAgQ2hlY2sgZm9yIG1ldGFkYXRhIHdyaXRhYmlsaXR5IHdoZW4gc2V0dGluZyBjYXBzIG9uIGJ1ZmZlciBvciB3aGVuIGNvcHlpbmcKLQkgIG1ldGFkYXRhIGZsYWdzLiBPbmx5IGVuYWJsZSB0aGVzZSBleHRyYSBhc3NlcnRpb25zIGluIGdpdCB2ZXJzaW9ucy4KLQkgIFRoaXMgc2hvdWxkIGhlbHAgdXMgZmluZCBiYWQgZWxlbWVudHMuCi0KLTIwMDktMDgtMDQgMTA6MjI6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjaGVjazogZGlzYWJsZSB1bml0IHRlc3Qgc3VwcG9ydCBvbiB3aW4zMiBmb3Igbm93Ci0JICBVbnRpbCB3ZSBtYWtlIHRoZSBpbnRlcm5hbCBsaWJjaGVjayB3b3JrIG9uIHdpbmRvd3MuCi0KLTIwMDktMDctMTkgMTc6MDQ6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiAuZ2l0aWdub3JlOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBjaGVjazogZml4IHN5bWJvbCBleHBvcnRpbmcKLQotMjAwOS0wNy0xNyAwMDo0NjozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogY2hlY2stY2hlY2tzLm00OgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5jOgotCSAgY2hlY2s6IGZpeCBpc3N1ZXMgd2l0aCAnbWFrZSBkaXN0Y2hlY2snCi0JICBTZWVtcyB0byB3b3JrIG5vdywgYXQgbGVhc3Qgb24gKm5peC4gT25lIG9mIHRoZSBjb25maWd1cmUgY2hlY2tzCi0JICBjYXVzZWQgdGhlc2Ugd2VpcmQgaXNzdWVzIC0gYnV0IHdoaWNoIG9uZT8KLQotMjAwOS0wOC0wNiAxNzoyNzoxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogYXV0b2dlbi5zaDoKLQkqIGNoZWNrLWNoZWNrcy5tNDoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9jaGVjay8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYy5pbjoKLQkgIGNoZWNrOiB1c2UgcHJpdmF0ZSBjb3B5IG9mIGNoZWNrIGZvciBsaWJnc3RjaGVjawotCSAgU2VlICM1NzcyNzUuIFNlZW1zIHRvIHdvcmsgZmluZSwgYnV0IGRvZXNuJ3QgZGlzdGNoZWNrIHlldC4KLQotMjAwOS0wNy0xNiAxODozOToxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW46Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfZXJyb3IuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2ltcGwuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xpc3QuaDoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2xvZy5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5oOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcHJpbnQuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50Lmg6Ci0JKiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5jOgotCSogbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmg6Ci0JICBjaGVjazogYWRkIGludGVybmFsIGNvcHkgb2YgY2hlY2stMC45LjYKLQkgIE5vdCBob29rZWQgdXAgeWV0LiBTZWUgIzU3NzI3NS4KLQotMjAwOS0wOC0wNiAxNDoxMTo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBkb2NzOiBmaXggU2luY2U6IHRhZyBmb3IgbmV3IGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QoKSBmdW5jdGlvbgotCi0yMDA5LTA3LTIyIDExOjI0OjU5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgdXRpbHM6IHVzZSBuZXcgX2NhcHNfY2FuX2ludGVyc2VjdCgpCi0KLTIwMDktMDctMjIgMTE6MjQ6MDggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiB1c2UgbmV3IF9jYXBzX2Nhbl9pbnRlcnNlY3QoKQotCi0yMDA5LTA3LTIyIDA5OjU0OjU1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgYmFzZXRyYW5zZm9ybTogdXNlIG5ldyBfY2Fwc19jYW5faW50ZXJzZWN0KCkKLQotMjAwOS0wNy0yMiAwOTozODoxMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGNhcHM6IGFkZCBnc3RfY2Fwc19jYW5faW50ZXJzZWN0KCkKLQkgIE9mdGVuIHdlIGRvbid0IG5lZWQgdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJzZWN0aW9uLiBBZGQgYSB2YXJpYW50IHRoYXQgb25seQotCSAgdHJpZXMgdG8gaW50ZXJzZWN0LiBJdCBjYW4gYnJlYWsgb3V0IGVhcmxpZXIgYW5kIGRvZXMgbGVzcyBHVmFsdWUgY29weWluZy4KLQkgIEFQSTogZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCgpCi0KLTIwMDktMDctMjIgMDk6MjQ6NTUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBvbmx5IGNoZWNrIGNhcHNfaXNfZml4ZWQoKSBpZiB0aGV5IGNoYW5nZWQKLQkgIFRoZSBwcmV2aW91cyBjb2RlIGNvdWxkIGNhbGwgZ3N0X2NhcHNfaXNfZml4ZWQoKSBmb3IgdGhlIHNhbWUgY2FwcyBtYW55IHRpbWVzLgotCi0yMDA5LTA3LTIxIDEzOjMxOjEzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBjYXBzOiBzcGxpdCBjYWxsYmFjayBmb3Igc3RydWN0dXJlIGludGVyc2VjdCBpbnRvIHR3byBmdW5jdGlvbnMKLQkgIFdlIGNhbGwgdGhpcyBzZXBhcmF0ZWx5LiB0aGVyZSBpcyBubyBtdWNoIGJlbmVmaXQgaW4gcmV1c2luZyB0aGUgY2FsbGJhY2suCi0JICBTcGxpdHRpbmcgaXMgbGV0IHVzIHJlbW92ZSBhIGJyYW5jaCBhbHNvLgotCi0yMDA5LTA3LTIxIDEzOjI3OjA5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBsb2dnaW5nOiBsb2cgaWYgd2UgY29weSBjYXBzIHRvIGJlIGFibGUgdG8gdHJhY2sgaXQKLQotMjAwOS0wNy0yMSAxMTozMjowMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogYWRkIGNvbW1lbnRzIGFib3V0IGdfcHRyX2FycmF5IHNpemUgYmVoYXZpb3VyCi0JICBKdXN0IGV4cGxhaW4gdGhlIGJlaGF2aW91ciB0byBhdm9pZCB0aGF0IHNvbWVvbmUgZWxzZSBpcyB3YXN0aW5nIHRpbWUgdHJ5aW5nIHRvCi0JICBpbXByb3ZlIHRoaXMgdG9vLgotCi0yMDA5LTA3LTIxIDExOjE0OjIwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgotCSAgZXhhbXBsZTogdW5yZWYgdGhlIGNsb2NrIGlkCi0KLTIwMDktMDctMjEgMTA6NTY6NTMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiB1c2UgY29ycmVjdCB2YXJpYWJsZSBpbiB0ZXN0Ci0KLTIwMDktMDctMjggMTY6MTM6MzcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICByZWdpc3RyeTogYWRkIGZpbGVuYW1lIHRvIGRlYnVnIG1lc3NhZ2UsIGxpa2UgZWxzZXdoZXJlCi0KLTIwMDktMDctMjEgMTA6Mzg6MTUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBmaXggY29tcGlsZXIgd2FybmluZyBhYm91dCB1bnVzZWQgdmFyIHdoZW4gZGlzYWJsaW5nIGRlYnVnIGxvZ2dpbmcKLQotMjAwOS0wOC0wNiAxMzoyOToyOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBwb3N0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXVzaW5nIHRhc2sKLQkgIElmIGRvd25zdHJlYW0gcmV0dXJucyBlcnJvciBhbmQgdXBzdHJlYW0gaGFzIGFscmVhZHkgZGVsaXZlcmVkCi0JICBldmVyeXRoaW5nIChpbmNsdWRpbmcgRU9TKSBhbmQgd2lsbCBubyBsb25nZXIgYmUgYXJvdW5kIHRvIGZpbmQKLQkgIG91dCB0aGF0IHdlIHBhdXNlZCAoYW5kIHdoeSksIHBvc3QgZXJyb3IgbWVzc2FnZS4gIEZpeGVzICM1ODk5OTEuCi0KLTIwMDktMDctMjggMTI6MDM6MzYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jOgotCSAgcXVldWU6IGFkZCB1bml0IHRlc3QKLQkgIE1ha2UgYSBkb3duc3RyZWFtIGVsZW1lbnQgcmV0dXJuIGFuIGVycm9yIGFmdGVyIHVwc3RyZWFtIGhhcyBhbHJlYWR5Ci0JICBwdXQgYWxsIGRhdGEgaW50byBxdWV1ZSAoaW5jbHVkaW5nIEVPUykuICBBcyBzdWNoLCB1cHN0cmVhbQotCSAgd2lsbCBub3QgYmUgYXJvdW5kIHRvIHBpY2sgdXAgdGhlIGVycm9yLCBzbyBpdCBpcyB1cCB0byBxdWV1ZSB0bwotCSAgYWN0IGFwcHJvcHJpYXRlbHkuICBTZWUgIzU4OTk5MS4KLQkgIE5vdGUgdGhlcmUgbWF5IGJlIGRvd25zdHJlYW0gZmF0YWwgZXJyb3JzIChlLmcuIG5lZ290aWF0aW9uKSB0aGF0IGRvCi0JICBub3Qgd2FycmFudCBhbiBlcnJvciBtZXNzYWdlIGFscmVhZHkgaGF2aW5nIGJlZW4gcG9zdGVkLgotCi0yMDA5LTA4LTA1IDE4OjAyOjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGNsYXJpZnkgX2NhcHNfaXNfZXF1YWwoKQotCi0yMDA5LTA4LTA1IDE3OjU4OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IHJlZmFjdG9yIG1ldGFkYXRhIG1vZGlmaWNhdGlvbnMKLQkgIENoZWNrIHdoZW4gd2UgbmVlZCB0byB0b3VjaCB0aGUgbWV0YWRhdGEgb2YgdGhlIG91dHB1dCBidWZmZXIgYWZ0ZXIgc2VsZWN0aW5nCi0JICB0aGUgb3V0cHV0IGJ1ZmZlciBzbyB0aGF0IHdlIGhhdmUgZXZlcnl0aGluZyBpbiBvbmUgcGxhY2UuCi0JICBBbHNvIHRha2UgZmxhZ3MgYW5kIHRpbWVzdGFtcCBtb2RpZmljYXRpb25zIGludG8gYWNjb3VudC4KLQotMjAwOS0wOC0wNSAxNzo1NToxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBvbmx5IHNldCBjYXBzIHdoZW4gZGlmZmVyZW50Ci0JICBXaGVuIHdlIGhhdmUgYW4gaW5wdXQgYnVmZmVyIHdpdGggY2FwcyBhbmQgd2hlbiB0aG9zZSBjYXBzIGFyZSBkaWZmZXJlbnQgZnJvbQotCSAgdGhlIGNhcHMgd2Ugd2FudCwgb25seSB0aGVuIG1ha2UgYSB3cml0YWJsZSBjb3B5IG9mIHRoZSBpbnB1dCBidWZmZXIgYXMgdGhlCi0JICBvdXRwdXQgYnVmZmVyIGFuZCBzZXQgdGhlIGNhcHMgb24gdGhhdCBvdXRwdXQgYnVmZmVyLiBUaGlzIGF2b2lkcyBzb21lIGNhc2VzCi0JICB3aGVyZSB3ZSB0b29rIGEgc3ViYnVmZmVyIGZvciBzZXR0aW5nIGNhcHMgdGhhdCB3ZXJlIHRoZSBzYW1lLgotCi0yMDA5LTA4LTA1IDE1OjI4OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGVuYWJsZSBvcHRpbWlzYXRpb24KLQkgIFdoZW4gd2UgaGF2ZSB0aGUgc2FtZSBpbnB1dCBhcyBvdXRwdXQgY2FwcywgcmV1c2UgdGhlIGlucHV0IGNhcHMgb2JqZWN0LiBBZnRlcgotCSAgdGhlIGNhcHMgcmVmY291bnRpbmcgaGFzIGJlZW4gc29ydGVkIG91dCBub3csIHdlIGNhbiBmaW5hbGx5IGVuYWJsZSB0aGlzCi0JICBvcHRpbWlzYXRpb24uCi0KLTIwMDktMDgtMDUgMTM6NDg6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHRlc3RzOiBkb24ndCBzZXQgY2FwcyBvbiB1bndyaXRhYmxlIGJ1ZmZlcnMKLQkgIFRha2UgdGhlIHJlZiBhZnRlciBzZXR0aW5nIHRoZSBjYXBzIG9uIGEgYnVmZmVyIGJlY2F1c2UgZWxzZSB0aGUgYnVmZmVyIGlzCi0JICB0ZWNoaW5pY2FsbHkgbm90IHdyaXRhYmxlLgotCi0yMDA5LTA4LTA1IDEzOjQ3OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBxdWV1ZTogZ2V0IGNhcHMgYWZ0ZXIgbWFraW5nIHdyaXRhYmxlCi0JICBHZXQgdGhlIGNhcHMgb2YgdGhlIGJ1ZmZlciBhZnRlciB3ZSBtYWRlIHRoZSBidWZmZXIgd3JpdGFibGUuIFRoaXMgZGlkIG5vdAotCSAgY2F1c2UgYW55IHByb2JsZW1zIGJ1dCBpdCdzIG5pY2VyIHRoaXMgd2F5LgotCi0yMDA5LTA4LTA1IDEzOjQ2OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIGNhcHNmaWx0ZXI6IGZpeCByZWZjb3VudGluZyBwcm9ibGVtCi0JICBNYWtlIHN1cmUgdGhlIG1ldGFkYXRhIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSBjYXBzIG9uIGEgYnVmZmVyLgotCi0yMDA5LTA4LTA1IDEzOjQ0OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IGZpeCByZWZjb3VudGluZyBwcm9ibGVtCi0JICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCi0JICBNYWtlIHN1cmUgdGhhdCB0aGUgb3V0cHV0IGJ1ZmZlciBoYXMgd3JpdGFibGUgbWV0YWRhdGEgYmVmb3JlIHdlIGF0dGVtcHQgdG8gc2V0Ci0JICBjYXBzIG9uIGl0LgotCSAgZml4ZXMgIzU4Mzk5OQotCi0yMDA5LTA4LTA1IDEzOjQ0OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgY2FwczogYWRkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW4gX3JlcGxhY2UKLQotMjAwOS0wOC0wNSAxMzo0MzoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgcGFkOiBBZGQgc29tZSBtb3JlIGRlYnVnZ2luZwotCi0yMDA5LTA4LTA1IDEzOjQxOjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBzbWFsbCBpbXByb3ZlbWVudHMKLQkgIFVucmVmIHRoZSB0YXJnZXQgcGFkIGFmdGVyIHdlIHVzZWQgaXQgZm9yIGRlYnVnZ2luZy4KLQkgIEFkZCBzb21lIG1vcmUgZGVidWcuCi0JICBPbmx5IHJlcGxhY2UgY2FwcyB3aGVuIHRoZXkgY2hhbmdlZC4KLQotMjAwOS0wNy0yOSAxMzo0NjozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGNsZWFudXBzIGluIHBvc2l0aW9uIHF1ZXJpZXMKLQkgIFVzZSBleGlzdGluZyBib29sZWFuIGZsYWcgdG8gcGFzcyBwb3NpdGlvbiBxdWVyaWVzIHVwc3RyZWFtLiBBbHNvIGFkZCB1cHN0cmVhbQotCSAgcXVlcmllcyBmb3IgdGhlIGxhc3QgcG9zaXRpb24gcXVlcmllcy4KLQotMjAwOS0wOC0wNSAxMzoyNTozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogZml4IGxpYnhtbDIgY2hlY2ssIHdoaWNoIGlzIG9ubHkgbmVlZGVkIGZvciB4bWwgbG9hZC9zYXZlIG5vdwotCSAgU2luY2UgdGhlIHJlZ2lzdHJ5IGRvZXNuJ3QgdXNlIGxpYnhtbDIgYW55IGxvbmdlciwgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5Ci0JICB0byBkaXNhYmxlIGJvdGggeG1sIGxvYWQvc2F2ZSAqYW5kKiB0aGUgcmVnaXN0cnkgdG8gZ2V0IHJpZCBvZiB0aGUgbGlieG1sMgotCSAgZGVwZW5kZW5jeSwgZGlzYWJsaW5nIGp1c3QgeG1sIGxvYWRpbmcvc2F2aW5nIGlzIGVub3VnaC4gRml4ZXMgIzU5MDg0MS4KLQotMjAwOS0wOC0wMiAxNDozMzo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogcmVuYW1lIHVuaW5zdGFsbGVkIHJlZ2lzdHJ5IGZpbGUgdG8gcmVnaXN0cnkuZGF0Ci0JICBXZSdyZSBub3QgdXNpbmcgdGhlIHhtbCByZWdpc3RyeSBhbnkgbG9uZ2VyIGFmdGVyIGFsbC4KLQotMjAwOS0wOC0wMiAxNDoyODozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogcmVmaW5lIHNlYXJjaCBwYXRocyBmb3IgdW5pbnN0YWxsZWQgcGx1Z2luIG1vZHVsZXMKLQkgIFVzZSBtb3JlIHJlZmluZWQgc2VhcmNoIHBhdGhzIGZvciBvdXIgcGx1Z2luIG1vZHVsZXMuIE5vdCBvbmx5IGRvZXMKLQkgIHRoaXMgbWFrZSB0aGluZ3MgbXVjaCBmYXN0ZXIgaW4gYW4gdW5pbnN0YWxsZWQgc2V0dXAsIGl0IGFsc28gbWFrZXMKLQkgIHN1cmUgd2UncmUgbm90IGFjY2lkZW50YWxseSB1c2luZyBvdXQtb2YtZGF0ZSBwbHVnaW5zIGJ1aWx0IGFnZXMKLQkgIGFnbyBhcyBwYXJ0IG9mIGEgKGZhaWxlZCkgJ21ha2UgZGlzdGNoZWNrJyB3aGVuIHdlIGZvcmdldCB0byBjbGVhbgotCSAgdXAgdGhlIGRpc3RjaGVjayBidWlsZCBkaXJlY3RvcnkuCi0KLTIwMDktMDctMjkgMjM6NDI6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkgIGRvY3M6IGRpc3QgR1N0cmVhbWVyLTEuMCBidWZmZXIgZGVzaWduIGRyYWZ0Ci0KLTIwMDktMDgtMDYgMDY6NTA6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgdGFnbGlzdDogQWRkIG5ldyBBTEJVTV9BUlRJU1QgdGFnIHRvIHRoZSBkb2NzCi0KLTIwMDktMDgtMDQgMTQ6MTM6MzQgKzAyMDAgIEpvaG4gTWlsbGlraW4gPGptaWxsaWtpbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnbGlzdDogQWRkIHN1cHBvcnQgZm9yIEFMQlVNX0FSVElTVCB0YWcKLQkgIFRoZSAiYWxidW0gYXJ0aXN0IiB0YWcgaXMgdXNlZCB3aGVuIHRoZSBhcnRpc3Qgb2YgYW4gZW50aXJlCi0JICBhbGJ1bSBkaWZmZXJzIGZyb20gdGhlIGFydGlzdCBvZiBhbiBpbmRpdmlkdWFsIHRyYWNrOyBmb3IgZXhhbXBsZSwKLQkgIHdoZW4gYSAiZ3Vlc3QgYXJ0aXN0IiBhcHBlYXJzIG9uIGFuIGFsYnVtLCBvciBvbiBjb21waWxhdGlvbnMuCi0JICBGaXhlcyBidWcgIzU5MDQzMC4KLQotMjAwOS0wNy0yOSAxMzozMzoxMSArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbi5zZWxuZXNAZ21haWwuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogUXVlcnkgdXBzdHJlYW0gZm9yIHRoZSBwb3NpdGlvbiBpZiBjb252ZXJzaW9uIGluIFBBVVNFRCBmYWlsZWQKLQkgIEZpeGVzIGJ1ZyAjNTkwMDQ1LgotCi0yMDA5LTA3LTI4IDIwOjQyOjIwICswMjAwICBLaXBwIENhbm5vbiA8a2Nhbm5vbkBsaWdvLmNhbHRlY2guZWR1PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGJhc2V0cmFuc2Zvcm06IEltcHJvdmUgZGVidWcgb3V0cHV0IGluIGdzdF9iYXNlX3RyYW5zZm9ybV9hY2NlcHRjYXBzKCkKLQkgIEZpeGVzIGJ1ZyAjNTg5NTI0LgotCi0yMDA5LTA3LTIyIDA5OjAxOjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBEb24ndCB1bnNldCBHQVAgZmxhZyBpZiB3b3JraW5nIGluIHBhc3N0aHJvdWdoIG1vZGUKLQkgIEZpeGVzIGJ1ZyAjNTg5MzE0LgotCi0yMDA5LTA4LTA2IDAxOjQzOjU3ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gZGV2ZWxvcG1lbnQgLT4gMC4xMC4yNC4xCi0KLT09PSByZWxlYXNlIDAuMTAuMjQgPT09Ci0KLTIwMDktMDgtMDUgMDA6NTE6MTYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSAgUmVsZWFzZSAwLjEwLjI0Ci0KLTIwMDktMDgtMDQgMjM6MDU6MjcgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDktMDgtMDMgMTU6MzE6MjIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkgIGJ5dGVyZWFkZXI6IGF2b2lkIHdyYXAtYXJvdW5kIGluIGJ1ZmZlciBzaXplIGNoZWNrcy4gIEZpeGVzICM1OTA2MjIuCi0KLTIwMDktMDctMzAgMTQ6NDE6MzAgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICAwLjEwLjI0LjUgcHJlLXJlbGVhc2UKLQotMjAwOS0wNy0yOCAyMToxNTo1MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IEdldCB0aGUgZmx1c2hpbmcgc3RhdGUgd2l0aCB0aGUgb2JqZWN0IGxvY2sgdGFrZW4uCi0JICBGaXhlcyAjNTkwMDU2Ci0KLTIwMDktMDctMjggMjE6MTQ6MTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBNYWtlIHN1cmUgdGhlIENvbGxlY3REYXRhIGxpc3QgaXMgdXAtdG8tZGF0ZSB3aGVuIHJlYWRpbmcvc2V0dGluZyBpdAotCSAgV2l0aG91dCB0aGlzLCB3ZSByaXNrZWQ6Ci0JICAqIENoZWNraW5nIHRoZSBmbHVzaGluZyBzdGF0ZSBvbiBhbiB1bmV4aXN0aW5nIGxpc3QKLQkgICogTm90IHNldHRpbmcgdGhlIGZsdXNoaW5nIHN0YXRlIG9uIHBhZHMgdGhhdCBoYWQganVzdCBiZWVuIGFkZGVkCi0JICBQYXJ0aWFsbHkgZml4ZXMgIzU5MDA1NgotCi0yMDA5LTA3LTI4IDIxOjEyOjI1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogU3BsaXQgb3V0IF9jaGVja19wYWRzIGludG8gYSB2ZXJzaW9uIHdpdGhvdXQgbG9jayB0YWtpbmcuCi0JICBUaGlzIGlzIHNvIHdlIGNhbiB1c2UgX2NoZWNrX3BhZHMgaW4gcGxhY2VzIHdoZXJlIHdlJ3ZlIGFscmVhZHkgdGFrZW4KLQkgIHRoZSBsb2NrIGluIHF1ZXN0aW9uLgotCSAgUGFydGlhbGx5IGZpeGVzICM1OTAwNTYKLQotMjAwOS0wNy0yOCAxNToyMzoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oOgotCSAgY2hlY2s6IG1ha2UgbmV3IEdzdFN0cmVhbUNvbnNpc3RlbmN5IHN0cnVjdHVyZSBwcml2YXRlCi0JICBUaGVyZSdzIG5vIG5lZWQgdG8gaGF2ZSBHc3RTdHJlYW1Db25zaXN0ZW5jeSBpbiBhIHB1YmxpYyBoZWFkZXIgZm9yCi0JICB0aGUgdGltZSBiZWluZywgc28gbWFrZSBpdCBwcml2YXRlLiBXaGlsZSB3ZSdyZSBhdCBpdCwgYWRkIGEgZ3RrLWRvYwotCSAgYmx1cmIgZm9yIGl0IHRob3VnaC4gUmUtZml4ZXMgIzU4ODc0NC4KLQotMjAwOS0wNy0yNCAxMzo1MDoxOSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIDAuMTAuMjMuNCBwcmUtcmVsZWFzZQotCi0yMDA5LTA3LTI0IDA5OjUwOjE5ICswMTAwICBSb2JpbiBTdG9ja2VyIDxyb2JpbkBuaWJvci5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogZG9uJ3QgaGFuZGxlIFNFRUtJTkcgcXVlcmllcyBmb3IgZm9ybWF0cyB0aGF0IGRvbid0IG1hdGNoIHRoZSBvbmUgdGhlIHNvdXJjZSBvcGVyYXRlcyBpbgotCSAgUmV0dXJuIEZBTFNFIGluIGJhc2VzcmMncyBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIgd2hlbiB3ZSBnZXQgYSBTRUVLSU5HIHF1ZXJ5IGZvcgotCSAgYSBmb3JtYXQgdGhhdCdzIG5vdCB0aGUgb25lIHRoZSBzb3VyY2Ugb3BlcmF0ZXMgaW4uIFByZXZpb3VzbHkgKGllLiBiZWZvcmUsIGluCi0JICB0aGUgZ2l0IHZlcnNpb24pIHdlIHdvdWxkIHJldHVybiBUUlVFIGluIHRoYXQgY2FzZSBhbmQgc2Vla2FibGU9RkFMU0UsIHdoaWNoCi0JICBpcyBtb3JlIGNvcnJlY3QsIGJ1dCBjYXVzZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMuIChCZWZvcmUgdGhhdAotCSAgd2Ugd291bGQgY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIHF1ZXJ5IHdoZW4gYW5zd2VyaW5nLCB3aGljaCB3YXMgY29tcGxldGVseQotCSAgYnJva2VuIHNpbmNlIGNhbGxlcnMgZG9uJ3QgZXhwZWN0IHRoYXQgb3IgY2hlY2sgZm9yIGl0KS4gU2luY2UgdGhlIFNFRUtJTkcKLQkgIHF1ZXJ5IGlzIGEgZmFpcmx5IHJlY2VudCBhZGRpdGlvbiwgbm90IGFsbCBkZW11eGVycywgcGFyc2VycyBhbmQgZGVjb2RlcnMKLQkgIGltcGxlbWVudCBpdCB5ZXQsIGluIHdoaWNoIGNhc2UgYW55IFNFRUtJTkcgcXVlcnkgYnkgYW4gYXBwbGljYXRpb24gd2lsbAotCSAganVzdCBiZSBwYXNzZWQgdXBzdHJlYW0gd2hlcmUgaXQgd2lsbCB0aGVuIGJlIGhhbmRsZWQgYnkgYmFzZXNyYy4gTm93LCBpZgotCSAgZS5nLiB0b3RlbSBkb2VzIGEgU0VFS0lORyBxdWVyeSBmb3IgVElNRSBmb3JtYXQgYW5kIHdlIGhhdmUgYSBkZW11eGVyIHRoYXQKLQkgIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBxdWVyeSwgYmFzZXNyYyB3b3VsZCBhbnN3ZXIgaXQgd2l0aCBzZWVrYWJsZT1GQUxTRSBpbgotCSAgbW9zdCBjYXNlcywgYW5kIHRvdGVtIGNhbiBvbmx5IHRha2UgdGhhdCBhcyBhdXRob3JpdGF0aXZlIGFuc3dlciwgbm90IGtub3dpbmcKLQkgIHRoYXQgdGhlIGRlbXV4ZXIgZG9lc24ndCBpbXBsZW1lbnQgdGhlIFNFRUtJTkcgcXVlcnkuIFRvIGF2b2lkIHRoaXMsIHdlIG1ha2UKLQkgIGJhc2VzcmMgcmV0dXJuIEZBTFNFIHRvIFNFRUtJTkcgcXVlcmllcyBpbiB1bmhhbmRsZWQgZm9ybWF0cy4gVGhhdCB3YXkKLQkgIGFwcGxpY2F0aW9ucyBsaWtlIHRvdGVtIGNhbiBmYWxsIGJhY2sgb24gYXNzdW1pbmcgc2Vla2FiaWxpdHkgZGVwZW5kaW5nIG9uCi0JICB3aGV0aGVyIGEgZHVyYXRpb24gaXMgYXZhaWxhYmxlLCBvciBzb21lc3VjaC4gRG93bnN0cmVhbSBlbGVtZW50cyBkb2luZwotCSAgc3VjaCBxdWVyaWVzIGFyZSBsaWtlbHkgdG8gZXF1YXRlIGFuIHVuaGFuZGxlZCBxdWVyeSB3aXRoIGEgbm9uLXNlZWthYmxlCi0JICByZXNwb25zZSBhcyB3ZWxsLCBzbyB0aGlzIHNob3VsZCBiZSBhbiBhY2NlcHRhYmxlIGZpeCBmb3IgdGhlIHRpbWUgYmVpbmcuCi0JICBTZWUgIzU4NDgzOCwgIzU4ODk0NCwgIzU4OTQyMyBhbmQgIzU4OTQyNC4KLQotMjAwOS0wNy0yNCAwMDo0MTo1NSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmVkYWFlZSB0byA5NGY5NWUzCi0KLTIwMDktMDctMjAgMTY6MTE6MDIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICBnc3RyZWdpc3RyeWJpbmFyeTogYWRkICsxIGFmdGVyIGVycm9yIGNoZWNraW5nCi0JICBUaGUgY3VycmVudCBjb2RlIG1hZGUgdGhlIGVycm9yIGNoZWNraW5nIHBvaW50bGVzcyBieSBjaGFuZ2luZyAtMSB0byAwIGluIGVycm9yCi0JICBjYXNlcy4gQWxzbyBkb24ndCBsZWFrIGEgcGFkIHRlbXBsYXRlIG9uIGVycm9yLgotCi0yMDA5LTA3LTIwIDE1OjUxOjIwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMjMuMyBwcmUtcmVsZWFzZQotCi0yMDA5LTA3LTIwIDE4OjAzOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFzay5jOgotCSAgdGVzdHM6IG1ha2Ugc3VyZSB0aGUgdGFza3MgYXJlIGpvaW5lZAotCSAgQ2FsbCBfY2xlYW5fYWxsKCkgb24gdGhlIHRhc2sgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgam9pbmVkIGFuZCBzdG9wcGVkLgotCSAgU2VlICM1ODkxMjcKLQotMjAwOS0wNy0yMCAxNTo0NDozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIHRhc2s6IGZpeCB0YXNrcG9vbCBsZWFrCi0JICBHc3RUYWtzIGRvZXMgbm90IGFsd2F5cyB1bnJlZiB0aGUgdGFza3Bvb2wgaXQgd2FzIGNyZWF0ZWQgZnJvbSBiZWNhdXNlIGl0Ci0JICBkZXBlbmRzIG9uIHdoZW4gdGhlIHBvb2wgcHJvdmlkZWQgYW4gSUQgZm9yIGpvaW5pbmcgdGhlIHRhc2suCi0JICBSZXdvcmsgc29tZSBjb2RlIHNvIHRoYXQgd2UgYWx3YXlzIHVucmVmIHRoZSBwb29sIGFuZCBvcHRpb25hbGx5IGpvaW4gd2hlbiB0aGUKLQkgIHBvb2wgcHJvdmlkZWQgYW4gaWQuCi0JICBGaXhlcyAjNTg5MTI3Ci0KLTIwMDktMDctMjAgMTM6MjY6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogbWFrZSB0YWcgcXVldWluZyB0aHJlYWRzYWZlCi0JICBTZWUgIzU4ODc0NQotCi0yMDA5LTA3LTEzIDA5OjIyOjA2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oOgotCSAgZ3N0Y2hlY2s6IEFkZCBhIHN0cmVhbSBjb25zaXN0ZW5jeSBjaGVja2luZyBoZWxwZXIgcm91dGluZS4gRml4ZXMgIzU4ODc0NAotCi0yMDA5LTA3LTIwIDExOjA0OjA1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgYmluYXJ5cmVnaXN0cnk6IGRvbid0IHVucmVmIE5VTEwgaWYgd2UgaGF2ZSBhbiBlYXJseSByZWFkIGVycm9yCi0KLTIwMDktMDctMTIgMTA6MDQ6MDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogU2VyaWFsaXplIHRhZ3MgaW50byB0aGUgZGF0YWZsb3cuIEZpeGVzICM1ODg3NDUKLQotMjAwOS0wNy0xNiAxNDoxNzowMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JICBkb2NzOiBmaXggQVBJIGRvY3MgZm9yIGdzdF97YWRhcHRlcnxieXRlX3JlYWRlcn1fbWFza2VkX3NjYW5fdWludDMyCi0JICBDbGFyaWZ5IGJ5dGUgcmVhZGVyIGRvY3MgYSBiaXQ6IG9mZnNldCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudAotCSAgcG9zaXRpb24gb2YgdGhlIHJlYWRlciwgbm90IHRvIHRoZSBzdGFydCBvZiB0aGUgZGF0YS4gQWxzbywgdGhlCi0JICBleGFtcGxlcyBpbiBib3RoIHRoZSBhZGFwdGVyIGRvY3MgYW5kIHRoZSBieXRlIHJlYWRlciBkb2NzIGhhdmUKLQkgIHRoZSBtYXNrIGFuZCBwYXR0ZXJuIGFyZ3VtZW50cyBzd2FwcGVkIChzZWUgIzU4NzU2MSkuIFNwb3R0ZWQKLQkgIGJ5IENhcmwtQW50b24gSW5nbWFyc3Nvbi4KLQotMjAwOS0wNy0xNiAxMzo1OTowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkgIHRhZ3M6IG9ubHkgZW1pdCBhIGdfd2FybmluZygpIGZvciBlbXB0eSB0YWcgc3RyaW5ncyBmb3IgZ2l0IHZlcnNpb25zCi0JICBGb3Igbm93LCBkb24ndCBzaG93IGEgZ193YXJuaW5nKCkgZm9yIGVtcHR5IHRhZyBzdHJpbmdzIGFuZCBOVUxMCi0JICB0YWdzIHdpdGggbm9uLWdpdCB2ZXJzaW9uczsgd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBmaXhlcyBpbiBvdXIKLQkgIHBsdWdpbiBtb2R1bGVzIHRvIG1ha2UgaXQgaW50byBhIHJlbGVhc2UgYmVmb3JlIHdlIGVuYWJsZSB0aGlzCi0JICB1bmNvbmRpdGlvbmFsbHkuCi0KLTIwMDktMDctMTQgMTg6NTk6MTMgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICAwLjEwLjIzLjIgcHJlLXJlbGVhc2UKLQotMjAwOS0wNy0xNCAxMjoxNTowNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIHZhbHVlOiBhZGQgZXhwbGFuYXRpb24gZm9yIHNob3J0Y3V0Ci0KLTIwMDktMDctMTAgMjA6MDQ6NDggKzAxMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiB0YWtlIHNpemUgb25jZQotCi0yMDA5LTA3LTEwIDE5OjE3OjA0ICswMTAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgdmFsdWU6IGZpeCBjYW5faW50ZXJzZWN0IHRvIGJlaGF2ZSBsaWtlIGludGVyc2VjdAotCSAgQWRkIGEgcXVpY2sgcmV0dXJuIGlmIHR3byB0eXBlcyBhcmUgdGhlIHNhbWUuIENoYW5nZSB0aGUgY2hlY2sgZm9yIHRoZQotCSAgaW50ZXJzZWN0aW9uIGZ1bmN0aW9uIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUgdXNlZCBpbiBpbnRlcnNlY3QoKS4gVGhlCi0JICBsYXRlciB0cmllcyBib3RoIGRpcmVjdGlvbnMuCi0KLTIwMDktMDctMTQgMDA6MDQ6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgZ3N0aW5mbzogbWFpbnRhaW4gQUJJIGNvbXBhdGliaWxpdHkgZXZlbiBpZiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQKLQotMjAwOS0wNy0wMiAxMjo0MDowNSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSAgc3RydWN0dXJlOiBDaGFuZ2UgTlVMTCBhbmQgZW1wdHkgc3RyaW5nIGhhbmRsaW5nCi0JICBEb24ndCBmb3JiaWQgdGhlIGVtcHR5IHN0cmluZyAiIiBpbiBnZW5lcmljIHN0cnVjdHVyZXMsIG9ubHkgaW4gdGFnbGlzdHMuCi0JICBQcm9wZXJseSBhbGxvdyB0aGUgTlVMTCBzdHJpbmcgYnkgYWRkaW5nIHNwZWNpYWwgY2FzZXMgZm9yIHNlcmlhbGlzaW5nCi0JICBhbmQgZGVzZXJpYWxpc2luZyBpdC4gcHJvcDE9KHN0cmluZylOVUxMIGlzIHRoZSBOVUxMIHN0cmluZywKLQkgIHByb3AxPShzdHJpbmcpIk5VTEwiIGlzIHRoZSBhY3R1YWwgc3RyaW5nIHdpdGggdGhlIHZhbHVlICJOVUxMIgotCi0yMDA5LTA3LTEzIDEyOjIzOjAyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA1ODQ1YjYzIHRvIGZlZGFhZWUKLQotMjAwOS0wNy0xMyAxMjowMDo0NyArMDIwMCAgQW5kb25pIE1vcmFsZXMgPHlsYXR1eWEgYXQgZ21haWwuY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICBmaWxlc2luazogRml4IHNlZ2ZhdWx0IHdpdGggTVNWQwotCSAgRG9uJ3QgdXNlIGRlcHJlY2F0ZWQgZmlsZW5vIG9uIE1TVkMgYnV0IHJlcGxhY2Ugd2l0aCBfZmlsZW5vCi0JICBGaXhlcyAjNTg3MDUyCi0KLTIwMDktMDctMTMgMDk6MzI6NTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSAgZG9jcy9kZXNpZ246IFVwZGF0ZSBNYWtlZmlsZS5hbSBmb3IgY2hhbmdlZCBmcmFtZXN0ZXAgZG9jdW1lbnQgbmFtZS4KLQotMjAwOS0wNy0xMCAxOToyNzoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICB0b29sczogdGhlIHBsdWdpbiBmZWF0dXJlcyBsaXN0ZWQgYnkgZ3N0LWluc3BlY3QgYXJlIHR5cGVmaW5kZXJzLCBub3QgdHlwZXMKLQotMjAwOS0wNy0xMCAxODo0NjozOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtYnVmZmVyMi50eHQ6Ci0JICBkb2NzOiBhZGQgZHJhZnQgZm9yIGFyYml0cmFyeSBidWZmZXIgbWV0YWRhdGEgaWRlYQotCi0yMDA5LTA3LTEwIDE4OjM1OjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWZyYW1lc3RlcC50eHQ6Ci0JICBkb2NzOiBtb3JlIGZyYW1lc3RlcCBkb2NzIG91dCBvZiBkcmFmdAotCi0yMDA5LTA3LTEwIDE4OjMzOjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1mcmFtZXN0ZXAudHh0OgotCSAgZG9jczogdXBkYXRlIGZyYW1lc3RlcCBkb2N1bWVudAotCSAgUmVtb3ZlIGV4cGVyaW1lbnRhbCBzdGF0dXMgZnJvbSB0aGUgZnJhbWVzdGVwIGRyYWZ0LgotCi0yMDA5LTA3LTA4IDE1OjE1OjA0ICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdG9vbHM6IEZpeCBjb21waWxhdGlvbiBpZiBvcHRpb24gcGFyc2luZyBpcyBkaXNhYmxlZAotCSAgRml4ZXMgYnVnICM1ODc5NzYuCi0KLTIwMDktMDctMDggMTU6MTA6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIHJlZ2lzdHJ5OiBVc2UgZ19idWlsZF9maWxlbmFtZSgpIGluc3RlYWQgb2YgZ19zdHJqb2luKCkgd2l0aCAvCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgZ2VuZXJhdGVkIGZpbGVuYW1lcyB1c2UgdGhlIHBsYXRmb3JtCi0JICBzcGVjaWZpYyBkaXJlY3Rvcnkgc2VwYXJhdG9yIGluc3RlYWQgb2YgLy4KLQkgIEZpeGVzIGJ1ZyAjNTg3OTczLgotCi0yMDA5LTA3LTA3IDIwOjEzOjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGRvY3M6IGFkZCAnU2luY2UnIHRhZyBmb3IgbmV3IEdTVF9ERUJVR19DQVRFR09SWV9HRVQgbWFjcm8KLQotMjAwOS0wNy0wNyAwMDoyMzo0MSArMDEwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogbWFrZSBpdCB0aGUgYmVzdCBvZiB3aW1zIGFuZCBlZHdhcmRzIHBhdGNoLgotCSAgQ2hlY2sgdGhlIHJpZ2h0IGZsdXNoaW5nIGZsYWcsIGJ1dCBzdGlsbCBhZGQgaXQgdG8gdGhlIHBhZC1saXN0LgotCi0yMDA5LTA2LTMwIDExOjI2OjM0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgaW5mbzogYWxsb3cgZ2V0dGluZyBvdGhlciBsb2cgY2F0ZWdvcmllcy4gRml4ZXMgIzU4NzQxNwotCSAgQWRkIGEgbmV3IG1hY3JvIEdTVF9ERUJVR19DQVRFR09SWV9HRVQgdG8gZ2V0IGEgbG9nIGNhdGVnb3J5IGJ5IG5hbWUuIFRoaXMKLQkgIGFsbG93cyBwbHVnaW5zIHRvIHVzZSBlLmcuIGNvcmUgY2F0ZWdvcmllcyBsaWtlIFBFUkZPUk1BTkNFIG9yIENMT0NLLgotCSAgQVBJOiBHU1RfREVCVUdfQ0FURUdPUllfR0VUCi0KLTIwMDktMDctMDYgMTk6NTE6NTcgKzAxMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBtYWtlIGNvbW1lbnQgYSBGSVhNRSBjb21tZW50Ci0KLTIwMDktMDctMDYgMTk6NTA6NTIgKzAxMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIGxvZ2dpbmc6IGxvZyBvYmplY3QgdHlwZSBpbiBtZXNzYWdlCi0KLTIwMDktMDctMDYgMTk6NDg6NTggKzAxMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgbG9nZ2luZzogdXNlIHBlcmYgY2F0ZWdvcnkgZm9yIGRyb3BwZWQgYnVmZmVycwotCi0yMDA5LTA2LTI5IDExOjI2OjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBjb2xsZWN0cGFkczogRG9uJ3QgZm9yd2FyZCBGTFVTSF9TVE9QIGlmIHNvbWUgaW5wdXQgc3RyZWFtcyBhcmUgc3RpbGwgZmx1c2hpbmcuCi0JICBUaGlzIGd1YXJhbnRlZXMgdGhhdCBvbmx5IG9uZSBGTFVTSF9TVE9QIGV2ZW50ICh0aGUgbGFzdCBvbmUpIHdpbGwgYmUgc2VudAotCSAgZG93bnN0cmVhbSB3aGVuIGEgZmx1c2hpbmcgc2VlayBpcyBiZWluZyBkb25lIHRocm91Z2ggY29sbGVjdHBhZHMuCi0KLTIwMDktMDYtMjQgMTE6MTE6MzUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIGNvbGxlY3RwYWRzOiBVcGRhdGUgdGhlIGNvb2tpZSB3aGVuIHNldHRpbmcgb3Vyc2VsdmVzIGFzIGZsdXNoaW5nLgotCSAgVGhpcyBmb3JjZXMgdGhlIHBhZCBzdGF0dXMgdG8gYmUgcmUtZXZhbHVhdGVkIG9uIHRoZSBuZXh0IF9jaGVja19wYWRzKCkuCi0KLTIwMDktMDYtMDkgMTQ6NTQ6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGJ1cy5oOgotCSogZ3N0L2dzdGNoaWxkcHJveHkuaDoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oOgotCSAgZG9jczogZml4IGd0ay1kb2MgLyo8IHByaXZhdGUgPiovIG1hcmtlcgotCi0yMDA5LTA2LTA5IDE0OjQ4OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kZWxlbWVudDogbG9nIHByb2JhYmlsaXR5IGluIGRlYnVnIG1lc3NhZ2UKLQotMjAwOS0wNi0zMCAxODoyMjoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IGZpeCBwYXJzaW5nIG9mIHRoZSBzdGVwIGRvbmUgbWVzc2FnZQotCSAgUGFyc2UgdGhlIGR1cmF0aW9uIGZpZWxkIHRvby4KLQotMjAwOS0wNi0yOSAxMToyNDoyNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICBiaW5hcnlyZWdpc3RyeTogVXNlIGxvY2FsIHZhbHVlcyBpbiB3aGlsZS9mb3IgbG9vcHMsIHVzZSBicmFuY2ggcHJlZGljdGlvbiBtYWNyb3MKLQotMjAwOS0wNi0yOSAxMToyMzozMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBTcHJlYWQgYnJhbmNoIHByZWRpY3Rpb24gbWFjcm9zLgotCSAgVGhlc2UgYXJlIGJhc2VkIG9uIHByb2ZpbGluZyBzZXZlcmFsIHBsYXliYWNrIHNjZW5hcmlvcyB1c2luZyBwbGF5YmluMi4KLQotMjAwOS0wNi0yOSAxMToyMDoxMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIFVzZSBsb2NhbCB2YXJpYWJsZXMgaW4gZm9yL3doaWxlIGxvb3BzLgotCSAgVGhpcyBtYWtlcyB0aGUgZ2VuZXJhdGVkIGNvZGUgZmFzdGVyIHNpbmNlOgotCSAgKiBJdCB3b24ndCBoYXZlIHRvIHJlYWQgYW4gdW5kaXJlY3QgdmFsdWUgKHdoaWNoIHdpbGwgbW9zdCBsaWtlbHkgYmUKLQkgIG91dHNpZGUgb2YgdGhlIEwxL0wyIGNhY2hlKQotCSAgKiBXZSBrbm93IHRoYXQgdmFsdWUgbmV2ZXIgY2hhbmdlcyAodGhlIGNvbXBpbGVyIGhhcyBubyBjbHVlIHRoYXQgaXQgZG9lc24ndCkuCi0KLTIwMDktMDYtMDkgMTk6MDg6MjYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIGxpYnMvY29udHJvbGxlcjogU2V0IGRlZmF1bHQgZ3N0IGRlYnVnZ2luZyBjYXRlZ29yeS4KLQotMjAwOS0wNi0yOSAxMTo1NzoxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvYmVuY2htYXJrcy9tYXNzLWVsZW1lbnRzLnNjbToKLQkgIHRlc3RzOiBmaXggZXhhbXBsZQotCi0yMDA5LTA2LTI5IDExOjU2OjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBidWZmZXJsaXN0OiB1c2UgZmFzdGVyIGdzdF9idWZmZXJfbGlzdF9nZXQoKQotCSAgVXNlIHRoZSBmYXN0ZXIgZ3N0X2J1ZmZlcl9saXN0X2dldCgpIHRvIGdldCB0aGUgZmlyc3QgYnVmZmVyIG9mIGEgbGlzdC4KLQotMjAwOS0wNi0yOSAxMTo1NToxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkgIGJ1ZmZlcmxpc3Q6IGZpeCBleGFtcGxlCi0JICBUaGUgX2RvIGZ1bmN0aW9uIG5vdyB0YWtlcyB1c2VyX2RhdGEgaW4gYWxsIGNhc2VzLgotCi0yMDA5LTA2LTI5IDExOjQ2OjAwICswMjAwICBPZ255YW4gVG9uY2hldiA8b2dueWFuQGF4aXMuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogdGFrZSB0aW1lc3RhbXAgbGF0ZXIKLQkgIE1ha2Ugc3VyZSB3ZSBkb24ndCBhY2NpZGVudGFsbHkgY2FzdCBhIGJ1ZmZlcmxpc3Qgb2YgYSBidWZmZXIgYW5kIHRyeSB0byB0YWtlCi0JICB0aGUgdGltZXN0YW1wIG9mIGl0LgotCSAgUmVmaXhlcyAjNTg1OTYwCi0KLTIwMDktMDYtMjkgMTE6MDc6MDAgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZyBhdCBheGlzLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkgIGRvY3M6IGZpeCBzb21lIHR5cG9zCi0KLTIwMDktMDYtMjkgMTE6MjQ6MDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBsb2dnaW5nOiBhZGQgYSBwZXJmb3JtYWNlIGxvZyBjYXRlZ29yeQotCSAgVGhpcyBjYXRlZ29yeSBjYW4gYmUgdXNlZCB0byBsb2cgc2xvdyBjb2RlIHBhdGggYW5kIGhlbHAgYXVkaXRpbmcgdGhlCi0JICBwZXJmb3JtYW5jZS4gQWRkIEZJWE1FLTAuMTEgdG8gc29tZSBxdWVzdGlvbmFibGUgY2F0ZWdvcmllcy4KLQotMjAwOS0wNi0yNyAxNjozNDozNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IGZpeCBpbnQtPmdpbnQgdG8gYmUgaW4gc3luYyB3aXRoIHRoZSAqLmggIGFuZCB1c2FnZQotCi0yMDA5LTA2LTI2IDEzOjMzOjUwICswMTAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogYXV0b2dlbi5zaDoKLQkgIGF1dG9nZW4uc2g6IFVzZSBwcmludGYgaW5zdGVhZCBvZiAnZWNobyAtbicuIENoZWNrIGZvciBhdXRvbWFrZS0xLjFbMDFdCi0JICBDaGVjayBmb3IgbW9yZSBhdXRvbWFrZSBjb21tYW5kIHZhcmlhbnRzLiBVc2UgcHJpbnRmIGluc3RlYWQgb2YgJ2VjaG8gLW4nCi0JICBmb3IgcG9ydGFiaWxpdHkKLQotMjAwOS0wNi0yNiAxMzo0MToxMSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZjgxMDAzMCB0byA1ODQ1YjYzCi0KLTIwMDktMDYtMjYgMTI6NTA6NTMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIHJlcXVlc3QtcGFkOiB0ZWxsIGFib3V0IHJlZiBjb3VudHMgaW4gcmVsZWFzZV9yZXF1ZXN0X3BhZCBkb2NzLgotCSAgSXQgaXMgbm90IHRvbyBvYnZpb3VzIHRoYXQgZ2V0dGluZyBhbmQgcmVsZWFzaW5nIHJlcXVlc3QgcGFkcyBpcyBub3QgZW50aWVybHkKLQkgIHN5bWV0cmljYWwgcmVnYXJkaW5nIHRvIHRoZSBwYWQgcmVmY291bnQuIEFkZCBhIG5vdGUgYWJvdXQgdGhhdCB0byB0aGUgZG9jcy4KLQkgIFRoaXMgbWlnaHQgZGVzZXJ2ZSBhIEZJWE1FLTAuMTEgdG9vLgotCi0yMDA5LTA2LTI1IDExOjI1OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGRvbid0IGRvIHRoaW5ncyB3aXRoIHNpZGUgZWZmZWN0cyB3aXRoaW4gYSBnX2Fzc2VydCgpCi0JICBNYWtlIHRoZSBidWZmZXJsaXN0IHN0dWZmIHdvcmsgcHJvcGVybHkgd2hlbiB0aGluZ3MgYXJlIGNvbXBpbGVkCi0JICB3aXRoIC1ER19ESVNBQkxFX0FTU0VSVC4KLQotMjAwOS0wNi0yNCAxODozMTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGNhcHMuYzoKLQkgIGNhcHM6IGF2b2lkIGRvaW5nIGxvZ2ljIGluIGdfYXNzZXJ0Ci0JICBNYWtlIHN1cmUgd2Ugc3RpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIHdoZW4gZ2xpYiBpcyBjb21waWxlZCB3aXRob3V0Ci0JICBhc3NlcnRpb25zLgotCi0yMDA5LTA2LTIyIDA1OjAwOjU0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogRmlyZSB0aGUgb3ZlcnJ1biBzaWduYWwgb24gRU9TCi0JICBGaXhlcyBzdGFydHVwIG9mIHNvbWUgc2hvcnQgTVBFRyBmaWxlcyB3aXRoIGRlY29kZWJpbjIvcGxheWJpbjIKLQkgIHdoZXJlIGFsbCB0aGUgZGF0YSBmaXRzIGluIHRoZSBtdWx0aXF1ZXVlIGFuZCBFT1MgYXJyaXZlcyBiZWZvcmUKLQkgIHRoZSBncm91cCBpcyBleHBvc2VkLgotCi0yMDA5LTA2LTI0IDE1OjEzOjM3ICswMTAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGYzYmI1MWIgdG8gZjgxMDAzMAotCi0yMDA5LTAzLTI4IDEzOjU5OjA4ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBHc3RTdHJ1Y3R1cmU6IFVzZSBkaXJlY3QgdmFsdWVzIGZvciByZXBldGl0aXZlIGNvbmRpdGlvbmFscyAoZm9yL3doaWxlKS4KLQotMjAwOS0wNi0yNCAxMDo0NTo1MiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSAgbWluaW9iamVjdHM6IERvbid0IGNoYWluIHVwIHRvIGVtcHR5IGZpbmFsaXplIG1ldGhvZC4KLQkgIElmIGV2ZXIgd2UgZG8gYW55dGhpbmcgaW4gbWluaV9vYmplY3RfZmluYWxpemUsIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIDQKLQkgIGNvcmUgbWluaW9iamVjdCBmaW5hbGl6ZSBtZXRob2RzIGNoYWluIGJhY2sgdXAgYWdhaW4uCi0KLTIwMDktMDMtMjcgMjA6MTc6MTUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBnc3RjYXBzOiBVc2UgZGlyZWN0IHZhbHVlcyBmb3IgcmVwZXRpdGl2ZSBjb25kaXRpb25hbHMgKGZvci93aGlsZSkuCi0KLTIwMDktMDYtMjQgMDk6Mjg6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuYzoKLQkgIG1ha2UgY2hlY2s6IGFkZCBjaGVjayBmb3IgZW51bSB0eXBlIGNsYXNzIHVucmVmcyBpbiBnc3RfZGVpbml0KCkgdG9vCi0JICBKdXN0IGJlY2F1c2Ugd2UgY2FuIHJlYWxseS4KLQotMjAwOS0wNi0yMyAxMzo0NDo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JKiBnc3QvZ3N0dHJhY2UuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdHJhY2U6IHVzZSBwcm9wZXIgbG9ja2luZyBpbiBHc3RUcmFjZQotCSAgUHJvdGVjdCB0aGUgYWxsb2NhdGVkIGxpc3Qgb2Ygb2JqZWN0cyB3aXRoIGEgbG9jayBzbyB0aGF0IHRyYWNlIGFjdHVhbGx5IHdvcmtzCi0JICByZWxpYWJseS4KLQkgIFNob3J0Y3V0IHRoZSBhbGxvYyB0cmFjZSBzb29uZXIgd2hlbiBkaXNhYmxlZC4KLQotMjAwOS0wNi0yMyAxMzozNDozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgb2JqZWN0OiBhbHNvIGFkZCBwb2ludGVycyB0byBkZWJ1ZwotCSAgQWRkIHRoZSBvYmplY3QgcG9pbnRlcnMgaW4gdGhlIGRlYnVnIGluZm8gZm9yIF9yZXBsYWNlLgotCi0yMDA5LTA2LTIzIDEyOjU2OjU5ICswMjAwICBDaGFkIEhhbm5hIDxjaGFubmFAbGlnby5jYWx0ZWNoLmVkdT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyOiBBZGQgR0FQIGZsYWcgc3VwcG9ydAotCSAgY2Fwc2ZpbHRlciBkb2Vzbid0IGFjdHVhbGx5IHRvdWNoIHRoZSBkYXRhIHNvIHdlIGRvbid0IHdhbnQgdGhlIEdBUCBmbGFnIHRvCi0JICBiZSB1bnNldCBieSBiYXNldHJhbnNmb3JtLgotCSAgRml4ZXMgYnVnICM1ODY1NjYuCi0KLTIwMDktMDYtMjMgMTA6MDU6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRlZnM6IGFkZCBuZXcgYnl0ZSByZWFkZXIgbWV0aG9kcwotCi0yMDA5LTA1LTIyIDE0OjQ3OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYzoKLQkgIGJ5dGVyZWFkZXI6IGFkZCBhIGJ1bmNoIG9mIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBzdHJpbmdzIGFuZCBhIGRhdGEgZHVwIGZ1bmN0aW9uCi0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YQotCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZwotCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4Ci0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2Ci0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyCi0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZwotCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOAotCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTYKLQkgIEFQSTogZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyCi0JICBBUEk6IGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZwotCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOAotCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZwotCSAgQVBJOiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4Ci0JICBBbmQgc29tZSBiYXNpYyB1bml0IHRlc3RzLiBGaXhlcyAjNTg2NTY4LgotCi0yMDA5LTA2LTIyIDE4OjE3OjI4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdsaXN0OiBmaXggdHlwbyBpbiB0YWcgZGVzY3JpcHRpb24KLQotMjAwOS0wNi0yMSAwMDoyNjozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXJsaXN0LmM6Ci0JICB0ZXN0czogZml4IGNyYXNoIGFuZCBsZWFrIGluIGJ1ZmZlcmxpc3RzIHVuaXQgdGVzdAotCSAgRG9uJ3QgYWNjZXNzIGFscmVhZHktZnJlZWQgaXRlcmF0b3IsIG1ha2VzIGNoZWNrLXZhbGdyaW5kIHdvcmsgYW5kIGZpeGVzCi0JICBjcmFzaCBvbiBQUEM7IHVucmVmIGJ1ZmZlciB3ZSdyZSBnb2luZyB0byBzdGVhbCB0byBtYWtlIHZhbGdyaW5kIGhhcHB5LgotCi0yMDA5LTA2LTIxIDAwOjA5OjUzICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGluaXQ6IEZpeCBpbmRlbnQsIGFuZCByZWYgdGhlIGdzdF9idWZmZXJfbGlzdF9pdGVtX2dldF90eXBlKCkgY2xhc3MKLQkgIEZpeCB0aGUgY2hlY2sgdGVzdHMgYnkgcmVmZmluZyB0aGUgR3N0QnVmZmVyTGlzdCBjbGFzcy4gUnVuIGdzdC1pbmRlbnQKLQkgIHRvIG1ha2UgZ2l0IGhhcHB5IGFib3V0IHNvbWUgZXhpc3Rpbmcgc3R1ZmYKLQotMjAwOS0wNi0xOSAyMTowMzo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBnc3QtaW5zcGVjdDogZml4IGJyb2tlbiBmbGFncyB0byBmbGFnIHN0cmluZyBzZXJpYWxpc2F0aW9uCi0JICBlLmcuIGNkcGFybm9pYXNyYyB3b3VsZCBzaG93IGZyYWdtZW50fGZ1bGwgZm9yIGEgZmxhZ3MgdmFsdWUgb2YgMi4KLQotMjAwOS0wNi0xOSAxOTozNTowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogYWRkIGJ1ZmZlci1saXN0IHN1cHBvcnQKLQotMjAwOS0wNi0xOSAxOToyNDo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkgIGJ1ZmZlcmxpc3Q6IHJlbW92ZSBvbGQgZW51bSBmcm9tIGRvY3MKLQotMjAwOS0wNi0xOSAxNDo0NTo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBnc3RpbmZvOiBkZWZpbmUgX19nc3RfZGVidWdfbWluIHRvIExPR19MRVZFTF9OT05FIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZAotCSAgSnVzdCBpbiBjYXNlIHNvbWVvbmUgd2hvIGNsZWFybHkgY2FuJ3QgYmUgZGV0ZXJyZWQgYnkgYW55IG51bWJlciBvZiBsZWFkaW5nCi0JICB1bmRlcnNjb3JlcyB1c2VzIHRoaXMgdmVyeSBwcml2YXRlIGJ1dCBzdGlsbCBzb21ld2hhdCBkb2N1bWVudGVkIHN5bWJvbAotCSAgZGlyZWN0bHkgaW4gdGhlaXIgY29kZSAoKmNvdWdoKiBxdGRlbXV4ICpjb3VnaCopLgotCi0yMDA5LTA2LTE5IDE1OjI5OjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJsaXN0OiBWYXJpb3VzIGNsZWFudXBzCi0JICBBZGQgbmV3IG1ldGhvZCB0byBpdGVyYXRlIGEgYnVmZmVybGlzdCB3aXRob3V0IGhhdmluZyB0byBhbGxvY2F0ZSBhbiBpdGVyYXRvci4KLQkgIEFkZCBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgYW4gaXRlbSBmcm9tIHRoZSBsaXN0IGJhc2VkIG9uIHRoZSBncm91cCBhbmQKLQkgIGluZGV4LgotCSAgUmVtb3ZlIHJlZHVuZGFudCBfZG9fZGF0YSBjYWxsYmFjayBhbmQgbWV0aG9kLgotCSAgVXBkYXRlIHVuaXQtdGVzdHMgYW5kIGFkZCBzb21lIG1vcmUgZm9yIHRoZSBuZXcgbWV0aG9kcy4KLQotMjAwOS0wNi0xOSAxNDoxMDozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBkb2NzOiBtYWtlIGd0ay1kb2MgaGFwcHkKLQotMjAwOS0wNi0xOSAxMzo1MTo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSAucG8gZmlsZXMgYWZ0ZXIgc3RyaW5nIGNoYW5nZXMKLQotMjAwOS0wNi0xOSAxMzo0ODo0OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JICBmZHNpbms6IGNsZWFuIHVwIHNvbWUgbW9yZSBlcnJvciBhbmQgZGVidWcgbWVzc2FnZXMKLQotMjAwOS0wNi0xOSAxMzo0Mjo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSAgdGFza3Bvb2w6IGZpeCB1bnVzZWQgdmFyaWFibGUgd2FybmluZyBpbiBjYXNlIGRlYnVnZ2luZyBpcyBkaXNhYmxlZAotCi0yMDA5LTA2LTE5IDEzOjQwOjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGdzdGluZm86IGZpeCBleHBvcnQgb2YgR1NUX0NBVF9CVUZGRVJfTElTVCB3aGVuIC0tZ3N0LWRpc2FibGUtZGVidWcgaXMgdXNlZAotCSAgTW92ZSBhbGwgdGhlIGNhdGVnb3JpZXMgdG8gZXhwb3J0IHRvIG9uZSBzaW5nbGUgcGxhY2UsIHNvIHdlIGRvbid0Ci0JICBhY2NpZGVudGFsbHkgdXBkYXRlIG9yIGFkZCB2YXJzIGluIG9uZSBwbGFjZSBidXQgbm90IHRoZSBvdGhlci4KLQotMjAwOS0wNi0xOCAxNjo1MDo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IHVzZSB0aGUgcmlnaHQgZmx1c2hpbmcgZmxhZy4KLQkgIFdlIG5lZWQgdG8gdXNlIHRoZSBwYWQgcHJpdmF0ZSBmbGFnIGJlY2F1c2UgdGhlIG90aGVyIHBhZCBmbGFnIGlzIHByb3RlY3RlZCB3aXRoCi0JICB0aGUgcGFkIGxvY2sgaW5zdGVhZC4KLQotMjAwOS0wNi0xOCAxNjo0MTo0NiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IFByb3Blcmx5IGhhbmRsZSBmbHVzaGluZyBwYWRzLgotCSAgSWYgYSBwYWQgaXMgZmx1c2hpbmcsIGl0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBhcyBlaXRoZXIgZW9zIG9yCi0JICBjb250YWluaW5nIGRhdGEuCi0KLTIwMDktMDYtMTggMTE6Mjc6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSAgZmRzaW5rOiBmaXggZXJyb3IgbWVzc2FnZQotCSAgVXNlcnMgc2hvdWxkIG5ldmVyIHNlZSB0aGUgdGVybSAnZmlsZSBkZXNjcmlwdG9yJywgbXVjaCBsZXNzIGEgZmlsZQotCSAgZGVzY3JpcHRvciBudW1iZXIsIGluIGFuIGVycm9yIG1lc3NhZ2UuIFB1dCB0aGF0IGludG8gdGhlIGRlYnVnCi0JICBzdHJpbmcgaW5zdGVhZCBhbmQgdXNlIHRoZSBkZWZhdWx0IGVycm9yIG1lc3NhZ2UuCi0KLTIwMDktMDYtMTggMTE6NDk6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6Ci0JICBmZHNpbms6IGFkZCB0aGUgbmV3IGZpZWxkIGluIHRoZSBoZWFkZXIKLQotMjAwOS0wNi0xOCAxMDo1NTozOSArMDIwMCAgQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluIGF0IGdhaWduYXJkLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkgIGZkc2luazogbWFrZSBmZHNpbmsgc2Vla2FibGUKLQkgIEltcGxlbWVudCB0aGUgc2FtZSBsb2dpYyBhcyBmaWxlc2luayB0byBpbXBsZW1lbnQgc2Vla2luZy4KLQkgIEZpeGVzICM1Nzg5MDgKLQotMjAwOS0wNi0xNyAxNjo0NToxNyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZ3N0ZWxlbWVudDogbW92ZWQgdGhlIGNsb2NrIHVucmVmIHRvIHRoZSByaWdodCBwbGFjZQotCi0yMDA5LTA2LTE3IDE2OjE3OjI3ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBnc3RlbGVtZW50OiB1bnJlZiB0aGUgY2xvY2sgd2hlbiB0aGUgZWxlbWVudCBjaGFuZ2VzIHRvIG51bGwgc3RhdGUKLQotMjAwOS0wNi0xNyAwMDoyOTo0MCArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIFJlcGxhY2VkIGRlcHJlY2F0ZWQgd2luMzItY29tcGF0aWJpbGl0eSBmdW5jdGlvbiB3aXRoIHVuZGVwcmVjYXRlZCBvbmUuCi0JICBGaXhlcyAjNTYwNDQyLgotCi0yMDA5LTA2LTE2IDE4OjMyOjEyICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGdzdGJpbjogc3dhcCB0aGUgbGluZXMgb2YgbXkgcHJldmlvdXMgY29tbWl0Ci0JICBGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIG15IHByZXZpb3VzIGNvbW1pdCB0aGF0IHJlbGVhc2VkIHRoZQotCSAgY2xvY2sgcHJvdmlkZXIgYW5kIGFmdGVyIHVzZWQgaXQgdG8gY3JlYXRlIHRoZSBjbG9jayBsb3N0IG1lc3NhZ2UuCi0KLTIwMDktMDYtMTYgMTc6NTE6MTIgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgZ3N0YmluOiByZW1vdmUgY2xvY2sgcmVmZXJlbmNlcyB3aGVuIGNsb2NrIGxvc3QgaGFwcGVucwotCSAgUmVtb3ZlIHJlZmVyZW5jZSB0byBjbG9jayBhbmQgY2xvY2sgcHJvdmlkZXIgc3RvcmVkIGluIHRoZSBiaW4KLQkgIHdoZW4gdGhlIGNsb2NrcHJvdmlkZXIgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIGJpbi4KLQotMjAwOS0wNi0xNiAxMzozNDozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgYmFzZXNpbms6IGFkZCBTaW5jZSB0YWcgZm9yIG5ldyBtZXRob2QKLQotMjAwOS0wNi0xNiAxMzozMjozNyArMDIwMCAgQnJhbmtvIFN1YmFzaWMgPGJyYW5rby5zdWJhc2ljIGF0IGF4aXMuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBiYXNlc2luazogYWRkIHN1cHBvcnQgZm9yIGJ1ZmZlciBsaXN0Ci0JICBGaXhlcyAjNTg1OTYwCi0KLTIwMDktMDYtMTYgMTE6MzQ6NTQgKzAyMDAgIEJyYW5rbyBTdWJhc2ljIDxicmFua28uc3ViYXNpYyBhdCBheGlzLmNvbT4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBnaG9zdHBhZDogQWRkIHN1cHBvcnQgZm9yIEdzdEJ1ZmZlckxpc3RzCi0JICBGaXhlcyAjNTg1ODM0Ci0KLTIwMDktMDYtMTYgMTE6MjE6NDIgKzAyMDAgIENocmlzdG9waGVyIEhhbHNlIFJvZ2VycyA8Y2hhbHNlcm9nZXJzIGF0IGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICBpdGVyYXRvcjogRXhwbGljaXRseSBtZW50aW9uIHJlZmNvdW50aW5nIGluIGRvY3MKLQkgIEZpeGVzICM1ODU5MzgKLQotMjAwOS0wNi0xNiAwODo0Mzo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGdzdHhtbDogZml4IChkZSlzZXJpYWxpc2F0aW9uIG9mIHByb3BlcnRpZXMgb2YgdHlwZSBHc3RTdHJ1Y3R1cmUKLQkgIHNvdXBodHRwc3JjIGhhcyBhIHByb3BlcnR5IG9mIHR5cGUgR3N0U3RydWN0dXJlLCB3aGljaCBjYXVzZXMgYW4KLQkgIGFzc2VydGlvbiB3aGVuIHNlcmlhbGlzaW5nIGl0IHRvIHhtbC4gRml4ZXMgIzU4NTEzNy4KLQotMjAwOS0wNi0xNSAyMDoxMTowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiBmaXggY29tcGlsZXIgd2FybmluZwotCSAgVGhlIGNvbXBpbGVyIHN1Z2dlc3RzIHRvIGFkZCBzb21lICgpIHRvIGluZGljYXRlIGlmIHRoZSAmJiBvciB0aGUgfHwgdGFrZXMKLQkgIHByaW9yaXR5LCBzbyByZWZsb3cgY29kZSBhIGJpdCBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCB5ZXQgYW5vdGhlciBsYXllcgotCSAgb2YgKCkuIEhvcGVmdWxseSB0aGlzIHdhcyB0aGUgaW50ZW5kZWQgbWVhbmluZyBvZiB0aGUgY29kZS4KLQotMjAwOS0wNi0xMSAxNTowMDo1MiArMDIwMCAgQXJub3V0IFZhbmRlY2FwcGVsbGUgPGFybm91dEBtaW5kLmJlPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBkb24ndCBsb2NrIHdoZW4gbWluLXRocmVzaG9sZCBhbmQgbWF4LXNpemUgY29uZmxpY3QuCi0JICBXaGVuIG1pbi10aHJlc2hvbGQgaXMgc2V0IG9uIGEgcXVldWUsIGl0IGlzIHBvc3NpYmxlIHRoYXQgb25lIG9mCi0JICB0aGUgbWluaW1hIHJlbWFpbnMgdW5zYXRpc2ZpZWQgd2hpbGUgb25lIG9mIHRoZSBtYXhpbWEgaXMgYWxyZWFkeQotCSAgcmVhY2hlZC4gVGhlcmVmb3JlLCBhbHdheXMgY29uc2lkZXIgdGhlIHF1ZXVlIG5vbi1lbXB0eSBpZiBpdCBpcyBmdWxsLgotCSAgRml4ZXMgIzU4NTQzMy4KLQotMjAwOS0wNi0xNSAxODo0NDo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBuZXh0IHN0YXRlIGNvcnJlY3RseQotCSAgV2hlbiB0aGUgY29udGludWUgZnVuY3Rpb24gaXMgc2NoZWR1bGVkLCBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBuZXh0IHN0YXRlIGluc3RlYWQKLQkgIG9mIHRoZSBwZW5kaW5nIHN0YXRlLgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgotCSAgZml4ZXMgIzU4NTU2OQotCi0yMDA5LTA2LTE1IDE4OjQ0OjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICBjb2xsZWN0cGFkczogZml4IC5oIGluZGVudGF0aW9uCi0KLTIwMDktMDYtMTUgMTg6NDM6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogYWRkIHNvbWUgbW9yZSBkZWJ1ZwotCi0yMDA5LTA2LTE1IDE4OjQyOjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSAgZGVidWc6IGFkZCBzb21lIG1vcmUgZGVidWcgdG8gZWxlbWVudCBhbmQgcGFkcwotCi0yMDA5LTA2LTE0IDE2OjU2OjMyICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IGZpeCBpbmNsdWRlIG9yZGVyIHRvIGdldCBjb25maWcuaCBiZWZvcmUgX21pbmd3LmgKLQkgIGNvbmZpZy5oIG11c3QgYWx3YXlzIGJlIGluY2x1ZGVkIGJlZm9yZSBhbnkgb3RoZXIgaW5jbHVkZXMsIGVpdGhlcgotCSAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB2aWEgZ3N0X3ByaXZhdGUuaC4gRml4ZXMgIzU4NTczMy4KLQotMjAwOS0wNi0xNCAxNjoxNzo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdGFnbGlzdDogYWRkIGZ1bmN0aW9ucyB0byBjcmVhdGUgYSBuZXcgdGFnbGlzdCB3aXRoIHRhZ3MgaW4gb25lIGdvCi0JICBBZGQgZnVuY3Rpb25zIHRvIGNyZWF0ZSBhIG5ldyB0YWcgbGlzdCBhbmQgc2V0IHRhZ3MgaW4gb25lIGdvLCB3aGljaAotCSAgaXMgbmljZSBmb3IgdXNlIGluIGNvbWJpbmF0aW9uIHdpdGggZnVuY3Rpb25zIHRoYXQgdGFrZSBvd25lcnNoaXAgb2YKLQkgIHRoZSB0YWdsaXN0LCBzdWNoIGFzIGdzdF9ldmVudF9uZXdfdGFnKCkgb3IgZ3N0X2VsZW1lbnRfZm91bmRfdGFncygpLgotCSAgQVBJOiBhZGQgZ3N0X3RhZ19saXN0X25ld19mdWxsKCkKLQkgIEFQSTogYWRkIGdzdF90YWdfbGlzdF9uZXdfZnVsbF92YWxpc3QoKQotCi0yMDA5LTA2LTEzIDE0OjU1OjQzICswMjAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBzY3JpcHRzL2dpdC12ZXJzaW9uLnNoOgotCSAgZ2l0LXZlcnNpb24uc2g6IG1ha2UgZXhlY3V0YWJsZQotCi0yMDA5LTA2LTEzIDE0OjUzOjI0ICswMjAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBzY3JpcHRzL2dpdC11cGRhdGUuc2g6Ci0JKiBzY3JpcHRzL2dpdC12ZXJzaW9uLnNoOgotCSAgVXBkYXRlIHNjcmlwdHMvY3ZzLXVwZGF0ZS5zaCB0byBnaXQtdXBkYXRlLnNoOyBhZGQgZ2l0LXZlcnNpb24uc2gKLQkgIGFkZCBzY3JpcHQgdG8gZ2V0IGdpdCB2ZXJzaW9ucwotCSAgZmlyc3QgdXBkYXRlIGFsbCwgdGhlbiBidWlsZAotCSAgYWRkIGdub25saW4gdG9vCi0JICBzcGVjaWZ5IHdoZXJlIHRvIHB1bGwgZnJvbQotCSAgYWxzbyB1cGRhdGUgc3VibW9kdWxlCi0JICByZW5hbWUgYW5kIGNoYW5nZSBjdnMtdXBkYXRlIHNjcmlwdCB0byBnaXQtdXBkYXRlCi0KLTIwMDktMDYtMTIgMTg6MzY6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgYnl0ZXJlYWRlcjogYWRkIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIoKQotCSAgQWRkIGEgcGF0dGVybiBzY2FuIGZ1bmN0aW9uIHNpbWlsYXIgdG8gdGhlIG9uZSByZWNlbnRseSBhZGRlZCB0bwotCSAgR3N0QWRhcHRlciwgYW5kIGEgdW5pdCB0ZXN0IChiYXNlZCBvbiB0aGUgYWRhcHRlciBvbmUpLgotCSAgRml4ZXMgIzU4NTU5Mi4KLQkgIEFQSTogYWRkIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIoKQotCi0yMDA5LTA0LTE3IDE3OjU5OjM4ICswMzAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAbm9raWEuY29tPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBGaXggcmVtYWluaW5nIC0tZGlzYWJsZS1nc3QtZGVidWcgQUJJIGJyZWFrYWdlLgotCSAgRml4ZXMgIzU3OTE3Ny4KLQotMjAwOS0wNi0xMiAxNzo1MToyMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGZpbGVzcmMvc2luazogdHVybiB0aGUgYnVzIG1lc3NhZ2VzIGludG8gZ193YXJuaW5nCi0JICBJdHMgYSBwcm9ncmFtbWluZyBlcnJvci4KLQotMjAwOS0wNi0xMiAxNTo0ODozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IGZpeCBkb2NzCi0KLTIwMDktMDYtMTIgMTM6MTg6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWZyYW1lc3RlcC50eHQ6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmM6Ci0JICBzdGVwcGluZzogbW9yZSBzdGVwcGluZyBpbXByb3ZlbWVudHMKLQkgIFVwZGF0ZSBkZXNpZ24gZG9jIHdpdGggc3RlcC1zdGFydCBkb2NzLgotCSAgQWRkIGVvcyBmaWVsZCB0byBzdGVwIGRvbmUgbWVzc2FnZQotCSAgd2hlbiBzdGVwcGluZyBpbiByZXZlcnNlLCB1cGRhdGUgdGhlIHNlZ21lbnQgdGltZSBmaWVsZC4KLQkgIEZsdXNoIG91dCB0aGUgY3VycmVudCBzdGVwIHdoZW4gd2UgYXJlIGZsdXNoaW5nLgotCi0yMDA5LTA2LTEwIDE1OjUxOjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogcG9zdCBzdGVwLXN0YXJ0Ci0JICB3aGVuIHdlIGNsaXAsIGFsc28gc3RvcCB0aGUgc3RlcHBpbmcuCi0JICBEb24ndCBkbyBRb1Mgd2hlbiBzdGVwcGluZwotCSAgUG9zdCBzdGVwLXN0YXJ0IHdoZW4gcXVldWVpbmcgYW5kIGFjdGl2YXRpbmcgdGhlIHN0ZXAuCi0KLTIwMDktMDYtMTAgMTU6NDg6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIG1lc3NhZ2U6IGFkZCBzdGVwLXN0YXJ0IG1lc3NhZ2UKLQotMjAwOS0wNi0xMSAxNDoxODowMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IG1vcmUgZWZmaWNpZW50IHZhbHVlIHRhYmxlIGxvb2t1cCBmb3IgZnVuZGFtZW50YWwgdHlwZXMKLQkgIFNtYWxsIG1pY3JvLW9wdGltaXNhdGlvbjogbG9vayB1cCB2YWx1ZSB0YWJsZSBmb3IgZnVuZGFtZW50YWwgdHlwZXMKLQkgIHZpYSBhbiBhcnJheSBkZWRpY2F0ZWQgdG8gZnVuZGFtZW50YWwgdHlwZXMgaW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoCi0JICBhIGhhc2ggdGFibGUgbG9va3VwLiBTaW5jZSB0aGVyZSBjYW4gYmUgb25seSAyNTUgZnVuZGFtZW50YWwgdHlwZXMsCi0JICB0aGUgdGFibGUgc2l6ZS9lZmZpY2llbmN5IHRyYWRlLW9mZiBzaG91bGQgYmUgYWNjZXB0YWJsZSwgZXNwLiBzaW5jZQotCSAgdGhlIG1vc3QgY29tbW9ubHktdXNlZCB0eXBlcyBhcmUgYWxsIGZ1bmRhbWVudGFsIHR5cGVzLiBUaGUgc2l6ZSBvZgotCSAgdGhlIHRhYmxlIGNvdWxkIHByb2JhYmx5IGJlIG1pbmltaXNlZCBmdXJ0aGVyIGlmIG5lZWRlZCBieSBhbGxvY2F0aW5nCi0JICB0aGUgdGFibGUgZHluYW1pY2FsbHkgYW5kIG9ubHkgZXhwYW5kaW5nIGl0IG9uIGRlbWFuZC4KLQotMjAwOS0wNi0xMSAxMzoxNjoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IGRvbid0IHB1dCBHVHlwZXMgaW50byBpbnQgdmFyaWFibGVzCi0JICBHVHlwZXMgYXJlIG5vdCBpbnRzIGFuZCBhcyBzdWNoIGFyZSBub3QgZ3VhcmFudGVlZCB0byBmaXQgaW50byBhbiBpbnQKLQkgICh3aXRoIHRoZSBleGNlcHRpb24gb2YgZnVuZGFtZW50YWwgdHlwZXMpLCBzbyB3ZSByZWFsbHkgc2hvdWxkbid0IHB1dAotCSAgdGhlbSBpbnRvIGludCB2YXJpYWJsZXMuIEV2ZW4gaWYgYSByYXRoZXIgdW5saWtlbHkgb2JzY3VyZSBjb3JuZXIgY2FzZSwKLQkgIHRoaXMgaGFzIGFjdHVhbGx5IGJlZW4gYSBwcm9ibGVtIGF0IHNvbWUgcG9pbnQgaW4gdGhlIHBhc3QsIHNlZSBjb21taXQKLQkgIDk5ZjE2NjU1ZjRjZmJjOGUwNmI1OTcyNDE3YmExMTI3OTA4M2E2NGUuCi0KLTIwMDktMDYtMTEgMTc6MDM6MDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjL3Npbms6IGltcHJvdmUgd2FybmluZyBtZXNzYWdlIGEgYml0ICh3cm9uZyBzdGF0ZSkKLQkgIFVuaWZ5IGFuZCB0dXJuIHRob3NlIGludG8gZWxlbWVudCB3YXJuaW5ncy4KLQotMjAwOS0wNi0xMSAxNDowMDowOSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgIGVsZW1lbnRmYWN0b3J5OiBGaXggYSBjb21waWxlciB3YXJuaW5nCi0JICBVc2UgKGdwb2ludGVyKSBpbnN0ZWFkIG9mIChncG9pbnRlciAqKSB0byBmaXggYSBzdHJpY3QtYWxpYXNpbmcgYnVpbGQgd2FybmluZy4KLQotMjAwOS0wNi0xMSAxMzoxNjoyOSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JKiBkb2NzL2ZhcS9NYWtlZmlsZS5hbToKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSogZG9jcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3B3Zy9NYWtlZmlsZS5hbToKLQkgIGRvY3M6IEJ1bXAgY29tbW9uLCBmaXggdGhlIHVwbG9hZCBsb2dpYyBpbmNsdXNpb24KLQkgIFVwZGF0ZSB0aGUgY29tbW9uIHN1Ym1vZHVsZSwgYW5kIGZpeCB0aGUgZG9jcyB1cGxvYWQgcnVsZXMgdG8gaW5jbHVkZQotCSAgdGhlIHJpZ2h0IG1ha2VmaWxlIHNuaXBwZXQgZnJvbSBjb21tb24uCi0KLTIwMDktMDYtMDkgMTE6MTM6MDQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBtdWx0aXF1ZXVlOiBVc2UgdGhlIHNsaWNlIGFsbG9jYXRvciBmb3IgTXVsdGlRdWV1ZUl0ZW1zCi0KLTIwMDktMDYtMTAgMjA6Mjk6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSAgTWFrZSBzdXJlIGNvbmZpZy5oIGlzIG9ubHkgaW5jbHVkZWQgb25jZQotCSAgRml4ZXMgYnVpbGQgcHJvYmxlbSBvbiB3aW4zMiAoIzU4NTA3NSkuCi0KLTIwMDktMDYtMTAgMTg6MDU6NDcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgcGx1Z2luOiBhZGQgc2luY2U6IHRhZ3MgZm9yIHRoZSBhcGkgZG9jcy4KLQkgIFRoZSBwcmV2aW91cyByZWxhdGVkIGNvbW1pdCBhZGRlZCBuZXcgQVBJLgotCSAgQVBJOiBhZGQgZ3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YSwgZ3N0X3BsdWdpbl9zZXRfY2FjaGVfZGF0YQotCi0yMDA5LTA2LTEwIDEyOjAyOjIzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIHBsdWdpbjogZml4IGxlYWtzIGludHJvZHVjZWQgYnkgZml4IGZvciAjNTg0Mzg5Ci0KLTIwMDktMDYtMDggMjM6NDM6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBzdHJ1Y3R1cmU6IGFkZCBnc3Rfc3RydWN0dXJlXypfZ2V0KigpIHZhcmFyZyBmdW5jdGlvbnMKLQkgIEFkZCBhIGJ1bmNoIG9mIHZhcmFyZyBnZXR0ZXIgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGNvbXBsZW1lbnQKLQkgIHRoZSB2YXJhcmcgc2V0dGVyIGZ1bmN0aW9ucywgYW5kIGEgYmFzaWMgdW5pdCB0ZXN0LiBGaXhlcyAjNTM0MjA4LgotCSAgQVBJOiBnc3Rfc3RydWN0dXJlX2dldCgpCi0JICBBUEk6IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0KCkKLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0KCkKLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0KCkKLQotMjAwOS0wNi0wOSAwMDoxNjowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIGRvY3M6IGEgZmV3IHNtYWxsIEFQSSBkb2MgZml4ZXMgYW5kIGFkZGl0aW9ucwotCi0yMDA5LTA2LTA4IDE5OjMzOjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGxvZ2dpbmc6IHdoZW4gbG9nZ2luZyB0YWdsaXN0cywgc2hvcnRlbiBsb25nIGJ1ZmZlciBkdW1wcwotCSAgRG9uJ3QgZHVtcCBodW5kcmVkcyBvZiBrQiBvZiBoZXhkYXRhIGludG8gZGVidWcgbG9ncyB3aGVuIGNvbnZlcnRpbmcKLQkgIHRhZ2xpc3RzIGNvbnRhaW5pbmcgaHVnZSBpbWFnZXMgaW50byBhIHN0cmluZy4gSW5zdGVhZCwgc2hvcnRlbiB0aGUKLQkgIGJ1ZmZlciBkYXRhIHNvIHRoYXQgdGhlIHN0cmluZyBpcyBzdGlsbCByZWFkYWJsZSBhbmQgZGVidWcgbG9ncwotCSAgc3RheSBtYW5hZ2FibGUuIENhbiBiZSB0dXJuZWQgb2ZmIHdpdGggR1NUX0RFQlVHX09QVElPTlM9ZnVsbC10YWdzLgotCSAgU2VlICM1ODQ5ODguCi0KLTIwMDktMDYtMDkgMTM6MDc6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgbXVsdGlxdWV1ZTogY2hlY2sgYnl0ZSByYW5nZSBldmVuIHdoZW4gd2UgaGF2ZSB0aW1lc3RhbXBzCi0JICBBcyBmb3VuZCBieSB0aGF5dGFuIG9uIElSQy4KLQkgIEFsc28gY2hlY2sgdGhlIGJ5dGUgbGltaXQsIGV2ZW4gaWYgd2UgaGF2ZSB0aW1lc3RhbXBzIGJlY2F1c2UgdGhlcmUgbWlnaHQganVzdAotCSAgbm90IGJlIGEgdGltZSBsaW1pdC4KLQotMjAwOS0wNi0wOSAxMjowNjozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHVwZGF0ZSBzZWdtZW50IHN0YXJ0L3N0b3AgZm9yIGNsaXBwaW5nCi0JICBXaGVuIHdlIHN0YXJ0IHN0ZXBwaW5nLCBzdG9yZSB0aGUgc3RhcnQvc3RvcCB2YWx1ZXMgb2YgdGhlIHNlZ21lbnQgYmVmb3JlIHdlCi0JICBpbnN0YWxsIG5ldyBzdGFydC9zdG9wIHZhbHVlcyBmb3IgY2xpcHBpbmcgaW4gbm9uLWZsdXNoaW5nIHN0ZXBzLgotCSAgZm9yIG5vbi1mbHVzaGluZyBzdGVwcywgdXBkYXRlIHRoZSBlbGVtZW50IHN0YXJ0IHRpbWUuIEZvciBmbHVzaGluZyBzdGVwcywgaXQKLQkgIGRvZXMgbm90IGNoYW5nZSBiZWNhdXNlIHJ1bm5pbmdfdGltZSBkb2VzIG5vdCBhZHZhbmNlCi0JICBNYWtlIHN1cmUgd2UgYWx3YXlzIHBlcmZvcm0gdGhlIHN0b3Bfc3RlcHBpbmcgb3BlcmF0aW9ucyBldmVuIHdoZW4gd2UgZHJvcAotCSAgZnJhbWVzLgotCi0yMDA5LTA2LTA5IDEwOjI1OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZG8gcHJvcGVyIGNsaXBwaW5nIGluIHN0ZXBwaW5nCi0JICBVcGRhdGUgdGhlIHN0b3AgcG9zaXRpb24gb2YgdGhlIHNlZ21lbnQgc28gdGhhdCB3ZSBjbGlwIGNvcnJlY3RseS4KLQkgIEFmdGVyIGNsaXBwaW5nIGluIG5vbi1mbHVzaGluZyBtb2RlLCByZXJlbmRlciB0aGUgcmVtYWluZGVyIG9mIHRoZSBidWZmZXIuCi0KLTIwMDktMDYtMDkgMTA6MjM6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBzZWdtZW50OiBtYWtlIGNvbnZlcnNpb24gbW9yZSBwcmVjaXNlCi0JICBNYWtlIHN1cmUgdGhlIGNvbnZlcnNpb24gZnJvbSBhbmQgdGhlIGNvbnZlcnNpb24gdG8gZ2l2ZSB0aGUgc2FtZSByZXN1bHRzLgotCi0yMDA5LTA2LTA4IDE1OjM5OjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICB1dGlsczogZ3N0X3V0aWxfdWludDY0X3NjYWxlKigpIG1pY3JvLW9wdGltaXNhdGlvbnMKLQkgIFNwcmlua2xlIEdfTElLRUxZL0dfVU5MSUtFTFk7IGFkZCBpbmxpbmVkIF9zY2FsZV9pbnRfdW5jaGVja2VkKCkKLQkgIHNvIHdlIGRvbid0IGRvIHNvbWUgY2hlY2tzIHR3aWNlIHdoZW4gY2FsbGluZyBpdCBmcm9tIF9zY2FsZSgpLgotCi0yMDA5LTA2LTA3IDIyOjQ5OjAxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOgotCSAgUmVtb3ZlIGRvdWJsZSBzZW1pY29sb25zIGF0IGVuZCBvZiBsaW5lCi0KLTIwMDktMDYtMDggMTc6Mzk6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWZyYW1lc3RlcC50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBzdGVwcGluZzogZG8gZmx1c2hpbmcgc3RlcHMgY29ycmVjdGx5Ci0JICBOb3RlIGluIHRoZSBkb2NzIHRoYXQgYSBmbHVzaGluZyBzdGVwIGluIFBMQVlJTkcgYnJpbmdzIHRoZSBwaXBlbGluZSB0byB0aGUgbG9zdAotCSAgc3RhdGUgYW5kIHNraXBzIHRoZSBkYXRhIGJlZm9yZSBwcmVyb2xsaW5nIGFnYWluLgotCSAgSW1wbGVtZW50IHRoZSBmbHVzaGluZyBzdGVwIGNvcnJlY3RseSBieSBpbnZhbGlkYXRpbmcgdGhlIGN1cnJlbnQgc3RlcAotCSAgb3BlcmF0aW9uLCB3aGljaCB3b3VsZCBhY3RpdmF0ZSB0aGUgbmV3IHN0ZXAgb3BlcmF0aW9uLgotCi0yMDA5LTA2LTA4IDE2OjE2OjI3ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBDaGFuZ2UgYXdrd2FyZCB3b3JkaW5nIGluIGEgdHJhbnNsYXRlYWJsZSBtZXNzYWdlLgotCi0yMDA5LTA2LTA4IDE2OjI3OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogYWRkIG5vbi1mbHVzaGluZyBzdGVwcwotCSAgQWRkIHN1cHBvcnQgZm9yIG5vbi1mbHVzaGluZyBzdGVwcyBhbmQgd2l0aCBkaWZmZXJlbnQgcmF0ZXMuCi0JICBDbGVhciBzdGVwIGluZm8gd2hlbiBmbHVzaGluZwotCi0yMDA5LTA2LTA3IDIzOjQ2OjU0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHJlZ2lzdHJ5OiBhbGxvdyBwbHVnaW5zIHRvIGNhY2hlIGV4dHJhIGRhdGEgaW4gcmVnaXN0cnkuIEZpeGVzICM1NzAyMzMKLQkgIEFkZCBhIEdzdFN0cnVjdHVyZSB0byBHc3RQbHVnaW4uIFBsdWdpbnMgY2FuIHJldGlldmUgaXQgaW4gcGx1Z2luX2luaXQgYW5kCi0JICBhY2Nlc3MgdGhlIGNhY2hlZCBpbmZvIG9yIGJ1aWxkIHRoZSBjYWNoZSBhbmQgc3RvcmUgaXQgdGhlcmUuCi0KLTIwMDktMDYtMDcgMjI6MDk6MTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICByZWdpc3RyeTogZG9uJ3QgcmVjcmVhdGUgZmVhdHVyZXMgb24gZmlyc3QgdXNlLiBGaXhlcyAjNTg0Mzg5Ci0JICBUaGUgZmlyc3QgdGltZSBvbmUgY2FsbHMgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCksIGdzdCByZWNyZWF0ZXMgdGhlIHBsdWdpbgotCSAgZmVhdHVyZSBhbmQgdGhlIGVsZW1lbnQgZmFjdG9yeS4gQXMgYSBzaWRlIGVmZmVjdCB3ZSByZWYgdGhlIGNsYXNzIHRvIGZpbGwKLQkgIGluIGRldGFpbCB3ZSBhbHJlYWR5IGhhdmUgZmlsbGVkIGZyb20gdGhlIHJlZ2lzdHJ5IGNhY2hlLiBUaGlzIHBhdGNoIGNoYW5nZXMKLQkgIHRoZSBiZWhhdmlvdXIgdG8ganVzdCB1cGRhdGUgdGhlIGV4aXN0aW5nIGVudHJpZXMuIFRoZSBmYWN0b3J5IGlzIG5vdyBhdHRhY2hlZAotCSAgdG8gdGhlIHR5cGUgYW5kIHNldCBpbiBnc3RfZWxlbWVudF9iYXNlX2NsYXNzX2luaXQoKS4KLQotMjAwOS0wNi0wNyAyMjoyMDo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogY29uZGl0aW9uYWxseSBjb21waWxlIHRoZSBzdHJlYW1zIGV4YW1wbGUKLQkgIERldGVjdCBwdGhyZWFkcy5oIGluIGNvbmZpZ3VyZS5hYwotCSAgT25seSBjb21waWxlIHRoZSBzdHJlYW1zIGV4YW1wbGUgd2hlbiBwdGhyZWFkcy5oIGlzIHByZXNlbnQuCi0JICBGaXhlcyAjNTg1MDM5Ci0KLTIwMDktMDYtMDcgMTc6MzI6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IHJlbW92ZSB0eXBlIGNoZWNrcyBhbmQgcmVkdW5kYW50IGNvZGUKLQotMjAwOS0wNi0wNyAxNTo0Mzo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB2YWx1ZTogZml4IGZyYWN0aW9uIHJhbmdlIGxjb3B5IGZ1bmN0aW9uCi0JICBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGJyb2tlbiBmb3IgMy41IHllYXJzLiBMdWNraWx5IG5vYm9keSBldmVyIHRyaWVkIHRvCi0JICBtYWtlIGEgZnJhY3Rpb24gcmFuZ2Ugb2JqZWN0IHByb3BlcnR5Li4uCi0KLTIwMDktMDYtMDcgMTU6MzU6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZ3N0dmFsdWU6IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cwotCSAgQWRkIGEgR1R5cGUtPkdzdFZhbHVlVGFibGUgaGFzaHRhYmxlIG1hcHBpbmcuCi0JICBBdm9pZCBfZ2V0X3R5cGUoKSBtdWx0aXBsZSB0aW1lcyB3aGVuIHdlIGNhbi4KLQkgIFVzZSBHU2xpY2UgZm9yIGZyYWN0aW9uIHJhbmdlIGR5bmFtaWMgbWVtb3J5Ci0JICBBZGQgR19MSUtFTFkgd2hlbiB3ZSBjYW4KLQkgIEltcHJvdmUgbG9va3VwIG9mIHRoZSB2YWx1ZSB0YWJsZSB1c2luZyB0aGUgaGFzaHRhYmxlCi0KLTIwMDktMDYtMDcgMTQ6MzA6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHN0cnVjdHVyZTogbm8gbmVlZCB0byBjbGVhciBvbiBpbml0Ci0JICBXZSBkb24ndCBuZWVkIHRvIGNsZWFyIHRoZSBmaWVsZCBvbiBpbml0IGJlY2F1c2Ugd2Ugd2lsbCBkbyB0aGF0IGFnYWluIGJlZm9yZSB3ZQotCSAgYXJlIGdvaW5nIHRvIHVzZSB0aGUgZmllbGQgbGF0ZXIuCi0KLTIwMDktMDYtMDUgMjA6NTc6MDUgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBnc3RzdHJ1Y3R1cmU6IEZpeCBzb21lIG1lbW9yeSBsZWFrcy4gU3ByaW5rbGUgR19MSUtFTFkvVU5MSUtFTFkKLQkgIEZpeCBzb21lIG1lbW9yeSBsZWFrcyBzaG93biBieSB0aGUgbmV3IHNlcmlhbGlzYXRpb24vZGVzZXJpYWxpc2F0aW9uIHVuaXQKLQkgIHRlc3QuIFNwbGl0IHRoZSBnc3Rfc3RyaW5nX3dyYXAgZnVuY3Rpb24gaW4gZ3N0dmFsdWUuYyBpbnRvIGNvbXBvbmVudHMgYW5kCi0JICB1c2UgdGhlbSB0byBtYWtlIGdzdF9zdHJpbmdfdGFrZV9hbmRfd3JhcCwgd2hpY2ggdGFrZXMgb3duZXJzaGlwIG9mIHRoZQotCSAgc3RyaW5nLCBhdm9pZGluZyBhIHN0cmR1cC4KLQkgIEFkZCBzb21lIEdfTElLRUxZL1VOTElLRUxZLCBhbmQgY2xlYW4gdXAgc29tZSBsZWFrcyBpbiBlcnJvciBwYXRocy4KLQotMjAwOS0wNi0wNSAxMTozNzoyNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogcmVwbHkgdG8gUVVFUllfU0VFS0lORyB3aXRoIG9yaWdpbmFsIGZvcm1hdC4gIEZpeGVzICM1ODQ4MzguCi0KLTIwMDktMDYtMDQgMTk6NDQ6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgY29uZmlndXJlOiByZW1vdmUgQUNfQ19JTkxJTkUgYW5kIHVwZGF0ZSB3aW4zMiBmaWxlcyB0byBnaXQKLQkgIFJlbW92ZSBBQ19DX0lOTElORSBjaGVjaywgc28gd2UgZG9uJ3QgZW5kIHVwIHdpdGggYW4gI3VuZGVmIGlubGluZSBpbgotCSAgY29uZmlnLmgsIHdoaWNoIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgTVNDViBhcHBhcmVudGx5LgotCSAgR0xpYiBkZWZpbmVzIGlubGluZSBmb3IgdXMgaW4gYSBzdWl0YWJsZSB3YXkgYWxyZWFkeSBhbnl3YXkuCi0JICBGaXhlcyAjNTg0ODM1LgotCSAgV2hpbGUgd2UncmUgYXQgaXQsIGFsc28gdXBkYXRlIHRoZSBvdGhlciB3aW4zMiBmaWxlcyB0byBnaXQgKGJ1bXAKLQkgIHZlcnNpb24sIGFkZCBuZXcgZGVmaW5lcyBhbmQgZW51bXMpLgotCi0yMDA5LTA2LTA0IDE4OjI2OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGdob3N0cGFkOiBhdm9pZCBleGNlc3NpdmUgbm90aWZ5IGZvciBjYXBzCi0JICBBdm9pZCBhbiBvYmplY3QgcHJvcGVydHkgbm90aWZ5IGlmIHRoZSBjYXBzIG9uIHRoZSBvdGhlciBwYWQgd2VyZSBhbHJlYWR5Ci0JICBzZXQgKGFuZCB0aHVzIG5vdGlmaWVkKS4KLQotMjAwOS0wNi0wNCAxNzoyNzowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IGZpeCBjbGlwcGVkIHN0YXJ0L3N0b3AgYWZ0ZXIgc3RlcAotCSAgVXNlIHRoZSBzZWdtZW50IGhlbHBlcnMgdG8gZ2V0IGEgbW9yZSBhY2N1cmF0ZSBjbGlwcGVkIHN0YXJ0L3N0b3AgcG9zaXRpb24gYWZ0ZXIKLQkgIGEgc3RlcHBpbmcgb3BlcmF0aW9uIGVuZGVkLgotCi0yMDA5LTA2LTA0IDEyOjM0OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogdXNlIG1vcmUgY29ycmVjdCBzZWdtZW50IG1ldGhvZHMKLQkgIFVzZSB0aGUgbW9yZSBjb3JyZWN0IG5ldyBzZWdtZW50IG1ldGhvZHMgZm9yIHVwZGF0aW5nIHRoZSBzZWdtZW50IGJlZm9yZSBhbmQKLQkgIGFmdGVyIGEgc3RlcC4KLQotMjAwOS0wNi0wNCAxMjo0ODo1MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc2VnbWVudDogYWRkIGdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUKLQkgIEFkZGVkIG5ldyBtZXRob2QgZm9yIGNsb3NpbmcgdGhlIHNlZ21lbnQgdG8gYSBzcGVjaWZpYyBydW5uaW5nIHRpbWUuCi0JICBBUEk6IEdzdFNlZ21lbnQ6OmdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUoKQotCi0yMDA5LTA2LTA0IDAwOjM3OjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIC5wbyBmaWxlcyBmb3Igc3RyaW5nIGNoYW5nZXMKLQkgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHBlb3BsZSB3aG8gZ2V0IHRoZW1zZWx2ZXMgYSBmcmVzaCBjaGVja291dAotCSAgZG9uJ3QgaW1tZWRpYXRlbHkgaGF2ZSBjaGFuZ2VkICpwbyBmaWxlcyBhZnRlciBydW5uaW5nIG1ha2UsIHdoaWNoCi0JICB3b3VsZCBjYXVzZSBhIGJpdCBvZiBoYXNzbGUgbmV4dCB0aW1lIHRoZSBmaWxlcyBhcmUgdXBkYXRlZC4gQmV0dGVyCi0JICB0byBrZWVwIHRoZW0gdXAtdG8tZGF0ZSB3aGVuIHN0cmluZ3MgY2hhbmdlLgotCi0yMDA5LTA2LTA0IDAwOjU0OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVycm9yLmM6Ci0JICBlcnJvcnM6IHJld29yZCBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGVycm9yIG1lc3NhZ2UgYW5kIHJlbW92ZSBidWd6aWxsYSBsaW5rCi0JICBSZXdvcmQgdGhpcyBtZXNzYWdlIGEgYml0IHRvIG1ha2UgaXQgY2xlYXJlciB3aGF0IGl0IG1lYW5zLCBuYW1lbHkgdGhhdAotCSAgdGhlIHN0YXRlIGNoYW5nZSBtYXkgaGF2ZSBmYWlsZWQgZm9yIGdvb2QgcmVhc29ucywgYnV0IHRoYXQgdGhlIGVsZW1lbnQKLQkgIGp1c3QgZmFpbGVkIHRvIHBvc3QgYSBwcm9wZXIgZXJyb3Igb24gdGhlIGJ1cy4gVGhpcyBpcyBub3QgYW4gaW50ZXJuYWwKLQkgIEdTdHJlYW1lciBidWcsIGFuZCB3ZSByZWFsbHkgZG9uJ3QgbmVlZCBwZW9wbGUgdG8gZmxvb2QgYnVnemlsbGEgd2l0aAotCSAgYnVnIHJlcG9ydHMgaWYgb25lIHN1Y2ggcGx1Z2luIGJ1ZyBldmVyIG1ha2VzIGl0IGludG8gdGhlIHdpbGQuCi0KLTIwMDktMDYtMDQgMDA6Mjk6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiByZWZlciB0byBlbGVtZW50LCBwYWQsIG9yIG9iamVjdCBpbiBzb21lIG1lc3NhZ2Ugc3RyaW5ncwotCSAgUmV2aXNpdCB0aGVzZSBzdHJpbmdzIG5vdyB0aGF0IHRoZSBjaGFuZ2UgcmVnYXJkaW5nIHRoZSBtZXNzYWdlIHNvdXJjZQotCSAgb2JqZWN0IGluIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCgpIGdvdCByZXZlcnRlZC4gVHJ5IHRvIHJlZmVyCi0JICBleHBsaWNpdGx5IHRvIHdoYXQga2luZCBvZiBlbGVtZW50IGl0IGlzIChlbGVtZW50LCBwYWQsIGV0Yy4pIGluIHNvbWUKLQkgIGNhc2VzLCB3aGljaCBpcyBuaWNlciB0aGFuIGhhdmluZyB0byBkZWR1Y2UgdGhpcyBpbmZvIChhbmQgd2UgY2FuCi0JICByZS11c2UgdGhlIGFscmVhZHkgZXhpc3RpbmcgdHJhbnNsYXRlZCBzdHJpbmdzIGZvciB0aGUgbW9zdCBjb21tb24KLQkgIGNhc2UpLiBJdCBhbHNvIG1ha2VzIGZvciBiZXR0ZXIgZXhhbXBsZSBjb2RlLCBzaW5jZSBpdCdzIGNsZWFyIG5vdwotCSAgdGhhdCB0aGUgbWVzc2FnZSBzb3VyY2Ugb2JqZWN0IGRvZXNuJ3QgaGF2ZSB0byBiZSBhbiBlbGVtZW50LgotCi0yMDA5LTA2LTAzIDIxOjEwOjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBBUEk6IGFkZCBHU1RfTUVTU0FHRV9TUkNfTkFNRSBtYWNybwotCSAgQWRkIEdTVF9NRVNTQUdFX1NSQ19OQU1FIG1hY3JvIHRoYXQgYWx3YXlzIHJldHVybnMgYSBub24tTlVMTCBzdHJpbmcuCi0JICBVc2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgbG9nZ2luZyBwdXJwb3Nlcy4KLQotMjAwOS0wNi0wMyAxOTowNjozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RzZWdtZW50LmM6Ci0JKiBnc3QvZ3N0c2VnbWVudC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc2VnbWVudDogYWRkIG1ldGhvZCBmb3IgY29udmVydGluZyB0byBwb3NpdGlvbgotCSAgQWRkIGdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uKCkgdGhhdCBjb252ZXJ0cyBhIHJ1bm5pbmdfdGltZSB0byBhIHBvc2l0aW9uIGluIHRoZQotCSAgc2VnbWVudC4gQSBmYXVsdHkgdmFyaWFudCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSB1c2VkIGluIGlucHV0c2VsZWN0b3IKLQkgIGJ1dCB3ZSdsbCBuZWVkIGl0IGZvciBmcmFtZSBzdGVwcGluZyB0b28uCi0JICBBUEk6IEdzdFNlZ21lbnQ6OmdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uKCkKLQotMjAwOS0wNi0wMyAxNTozOToxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms7IGhhbmRsZSBFT1MgY29ycmVjdGx5LgotCSAgSGFuZGxlIEVPUyBhbmQgYnVmZmVycyB3aXRob3V0IGEgdGltZXN0YW1wIGdyYWNlZnVsbHkuCi0JICBSZW1vdmUgYSB3YXJuaW5nIHRoYXQgaXMgbm90IHNvIG11Y2ggYSB3YXJuaW5nIG5vdyBhbnltb3JlLgotCi0yMDA5LTA2LTAzIDA5OjQ1OjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIFJldmVydCAiZ28gYmFjayB0byBhbGxvd2luZyBnZXR0ZXh0IDAuMTEuNSwgYnV0IGRvbid0IG1peCB3aXRoIGxpYnRvb2wgMi4yIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAzMWMwOWQ3MzhjZTdmNDdiZmY5ZDI5Mjk5NmU5NDg5YzI3NWU1NWExLgotCSAgUmV2ZXJ0aW5nIHRoaXMsIHNpbmNlIGl0IGJyZWFrcyBhdXRvZ2VuLnNoIGZvciBtZSBvbiBkZWJpYW4gc2lkLgotCSAgRmFpbHVyZSBpczogImxpYnRvb2wgMi4yIHJlcXVpcmVzIGF1dG9wb2ludCAwLjE3IG9yIGhpZ2hlciIgZXZlbiB0aG91Z2gKLQkgIDAuMTcgd2FzIGZvdW5kLgotCi0yMDA5LTA2LTAzIDA5OjQxOjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogYXV0b2dlbi5zaDoKLQkgIFJldmVydCAib25seSB1cGRhdGUgc3VibW9kdWxlIHdoZW4gaXQgaXMgbm90IG9uIGEgc3BlY2lmaWMgYnJhbmNoIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5M2I4MzMzM2FhZDUxOWM1NTU1MTU2NTc2ZjBiYWEzYmU3YjI2M2YzLgotCSAgUmV2ZXJ0aW5nIHNpbmNlIHRoaXMgZmFpbHMgb24gYSBmcmVzaCBjaGVja291dC4gQWxzbywgd2Ugc2hvdWxkbid0Ci0JICBkZXBlbmQgb24gcG9zc2libHkgdHJhbnNsYXRlZCBzdHJpbmdzLgotCi0yMDA5LTA2LTAzIDAxOjU2OjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sOgotCSAgZG9jczogZml4IHVwIHJlZmVyZW5jZSB0byBnc3QtbGF1bmNoLTAuOAotCSAgQWxzbyBtZW50aW9uIGRlY29kZWJpbjIsIHVyaWRlY29kZWJpbiwgYW5kIHBsYXliaW4yCi0KLTIwMDktMDYtMDMgMTA6Mzk6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBmb3JnZXQgcHJldmlvdXMgdGltZXMgd2hlbiBzdGVwcGluZwotCSAgV2hlbiB3ZSBzdGFydCBhIGZsdXNoaW5nIHN0ZXAgb3BlcmF0aW9uLCBmb3JnZXQgYWJvdXQgdGhlIHByZXZpb3VzIHN0cmVhbSB0aW1lCi0JICBzbyB0aGF0IHRoZSBwb3NpdGlvbiByZXBvcnRpbmcgd29ya3MgY29ycmVjdGx5LgotCi0yMDA5LTA2LTAzIDAxOjI1OjI2ICswMjAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGdvIGJhY2sgdG8gYWxsb3dpbmcgZ2V0dGV4dCAwLjExLjUsIGJ1dCBkb24ndCBtaXggd2l0aCBsaWJ0b29sIDIuMgotCi0yMDA5LTA2LTAzIDAxOjAxOjU3ICswMjAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgb25seSB1cGRhdGUgc3VibW9kdWxlIHdoZW4gaXQgaXMgbm90IG9uIGEgc3BlY2lmaWMgYnJhbmNoCi0KLTIwMDktMDYtMDIgMTM6NDU6NTIgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICB0b29sczogU2V0IHBpcGVsaW5lIHRvIFBBVVNFRCBiZWZvcmUgd2FpdGluZyBmb3IgbWFpbiBsb29wIGlkbGUKLQkgIFdoZW4gaXQgaXMgc2h1dHRpbmcgZG93biBhIHBpcGVsaW5lIGFmdGVyIGN0cmwtYywgc2V0IHBpcGVsaW5lIHRvCi0JICBwYXVzZWQgYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBtYWluIGxvb3AgdG8gY29tcGxldGUgYWxsIHBlbmRpbmcKLQkgIHRyYW5zYWN0aW9ucy4gIEZpeGVzICM1ODQ2NTcuCi0JICBJZiBzb21lIHBhcnQgb2YgdGhlIHBpcGVsaW5lIGlzIGdlbmVyYXRpbmcgc2lnbmFscyBvciBpZGxlIGZ1bmN0aW9ucwotCSAgYXQgYSBmYXN0IHJhdGUsIHdhaXRpbmcgZm9yIGEgbWFpbiBsb29wIGl0ZXJhdGlvbiBtYXkgbmV2ZXIgcmV0dXJuLgotCi0yMDA5LTA2LTAyIDE4OjM2OjEwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmU6IGZpeCBzZXJpYWxpc2F0aW9uIG9mIG5lc3RlZCBzdHJ1Y3R1cmVzLgotCSAgVXNlIHN0cmluZ193YXJwL3Vud3JhcCB0byBlc2NhcGUgZGVsaW1pdGVycywgb3RoZXJ3aXNlIGRlc2VyaWFsaXNhdGlvbiBmYWlscy4KLQkgIEFsc28gbW92ZSBHU1RfQVNDSUlfSVNfU1RSSU5HIHRvIHByaXZhdGUgaGVhZGVyIHRvIGF2b2lkIGtlZXBpbmcgaXQgaW4gc3luYy4KLQkgIEFsc28gdXNlICdcMCcgd2hlbiB0ZXJtaW5hdGluZyBhIHN0cmluZyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgotCi0yMDA5LTA2LTAyIDE1OjM3OjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZml4IHJlZ3Jlc3Npb24gaW4gdW5pdCB0ZXN0cwotCSAgU3RvcmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyIGFmdGVyIHByZXJvbGxpbmcuIFdoaWxlIHdlIGFyZSBwcmVyb2xsZWQgd2UKLQkgIHdhbnQgdG8gcmVwb3J0IHRoZSBwb3NpdGlvbiBvZiB0aGUgc2VnbWVudCBzdGFydCB2YWx1ZS4KLQotMjAwOS0wNi0wMSAyMDoyNjo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiB3aWRlbiBsb2cgbGV2ZWwgc3RyaW5ncyB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgbmV3IE1FTURVTVAKLQotMjAwOS0wNi0wMSAxOTozNzoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IHBvc3QgYSB3YXJuaW5nIG9uIGV4Y2Vzc2l2ZSBmcmFtZWRyb3BzCi0JICBXaGVuIHdlIGdvIGludG8gZW1lcmdlbmN5IHJlbmRlcmluZywgcG9zdCBhIHdhcm5pbmcgaW5mb3JtaW5nIHRoZSB1c2VyIGFib3V0Ci0JICB0aGlzIGZhY3QuCi0KLTIwMDktMDUtMzEgMTk6MTA6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBtb3JlIHN0ZXBwaW5nIGluIHJldmVyc2UKLQkgIEZpeCBzdGVwcGluZyBhbmQgcG9zaXRpb24gcmVwb3J0aW5nIGluIHJldmVyc2UgcGxheWJhY2suCi0KLTIwMDktMDUtMjkgMTY6MDY6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiB1c2Ugc3RhcnRfdGltZSBhcyB0aGUgc3RlcCBzdGFydAotCSAgVXNlIHRoZSBzdGFydF90aW1lIG9mIHRoZSBlbGVtZW50IGFzIHRoZSBwb2ludCBmcm9tIHdoZXJlIHRoZSBzdGVwIG9wZXJhdGlvbgotCSAgc3RhcnRzLiBUaGlzIGZpeGVzIHN0ZXBwaW5nIGluIGFsbCBwYXVzZWQgc3RhdGVzLgotCi0yMDA5LTA1LTE5IDE5OjQ1OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogY2F0Y2ggc3RlcCBjYXNlcyBpbiBfd2FpdF9wcmVyb2xsKCkKLQkgIFdoZW4gYSBzdWJjbGFzcyBpcyBibG9ja2luZyBpbiBfd2FpdF9wcmVyb2xsKCkgaW4gdGhlIF9yZW5kZXIgbWV0aG9kLCBtYWtlIHN1cmUKLQkgIHdlIGNhbiB1bmxvY2sgdGhlIHN1YmNsYXNzIGFuZCBkZXRlY3QgdGhpcyByZXR1cm4gdmFsdWUgZnJvbSB0aGUgcmVuZGVyIG1ldGhvZC4KLQotMjAwOS0wNS0xOSAxMDo1MDo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbms6IG1vcmUgc3RlcHBpbmcgaW4gcmV2ZXJzZSBmaXhlcwotCi0yMDA5LTA1LTE4IDE4OjQxOjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogc21hbGwgY2xlYW51cHMKLQotMjAwOS0wNS0xOCAxNTo0ODoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtZnJhbWVzdGVwLnR4dDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvZnJhbWVzdGVwMS5jOgotCSAgZnJhbWVzdGVwOiBpbXBsZW1lbnQgYmFja3dhcmRzIGZyYW1lc3RlcAotCSAgVXBkYXRlIGZyYW1lc3RlcCBkb2N1bWVudCwgd2Ugd2FudCB0byBwYXNzIHRoZSBmbHVzaCBmbGFnIGluIHRoZSBzdGVwLWRvbmUKLQkgIG1lc3NhZ2UuCi0JICBBZGQgZmx1c2ggZmxhZyB0byB0aGUgZ3N0bWVzc2FnZS4KLQkgIFVwZGF0ZSBleGFtcGxlcyB0byB1c2UgdGhlIG5ldyBzdGVwLWRvbmUgbWVzc2FnZSBhcGkuCi0JICBJbXBsZW1lbnQgZnJhbWVzdGVwIHdpdGggcGxheWJhY2sgcmF0ZXMgPCAwLjAgdG9vLgotCi0yMDA5LTA1LTE1IDE1OjI1OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogYWRkIGZyYW1lc3RlcHBpbmcgaW4gdGltZQotCi0yMDA5LTA1LTE1IDE1OjI0OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmM6Ci0JICBleGFtcGxlczogc3RlcCBpbiB0aW1lIGFzIHdlbGwKLQotMjAwOS0wNS0xNSAxMjowMjowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvZnJhbWVzdGVwMS5jOgotCSAgZXhhbXBsZTogcHJpbnQgc3RlcF9kb25lIG1lc3NhZ2UgYW5kIHN5bmMKLQkgIER1bXAgdGhlIHN0ZXBfZG9uZSBtZXNzYWdlIGNvbnRlbnRzLgotCSAgU3luYyBhZ2FpbnN0IHRoZSBjbG9jayB3aGVuIGdvaW5nIHRvIFBMQVlJTkcuCi0KLTIwMDktMDUtMTUgMTI6MDU6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBrZWVwIHRyYWNrIG9mIHN0ZXBwZWQgdGltZQotCSAgUGFzcyBydW5uaW5nX3RpbWUgYXJvdW5kIHNvIHRoYXQgdGhlIHN0ZXBwaW5nIGNvZGUgY2FuIGNhbGN1bGF0ZSB0aGUgZWxhcHNlZAotCSAgdGltZSBjb3JyZWN0bHkuCi0KLTIwMDktMDUtMTQgMTk6Mjk6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBtb3ZlIHN0dWZmIGFyb3VuZCwgbW9yZSBzdGVwcGluZwotCSAgTWFrZSBzdGFydCBhbmQgc3RvcF9zdGVwcGluZyBtZXRob2RzIGFuZCBtb3ZlIHRoZWlyIGludm9jYXRpb24gaW4gdGhlIHJpZ2h0Ci0JICBwbGFjZXMuCi0JICBQZXJmb3JtIHRoZSBhdHVhbCBzdGVwcGluZyBvcGVyYXRpb24gd2hlcmUgd2UgaGF2ZSBmdWxsIGNvbnRleHQgYWJvdXQgdGhlCi0JICB0aW1lc3RhbXBzLgotCi0yMDA5LTA1LTExIDE4OjU2OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL2ZyYW1lc3RlcDEuYzoKLQkgIEFkZCBmcmFtZSBzdGVwcGluZyBpbiBQQVVTRUQgZXhhbXBsZQotCi0yMDA5LTA1LTExIDE4OjU2OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZmlyc3Qgc3RhYiBhdCBmcmFtZSBzdGVwcGluZyBpbiBQQVVTRUQKLQkgIFVubG9jayB0aGUgcHJlcm9sbGVkIGZyYW1lIGFuZCByZWNoZWNrIGlmIHdlIG5lZWQgdG8gc3RlcC4KLQkgIEtlZXAgYSBzaW1wbGUgY291bnRlciBmb3IgdGhlIGZyYW1lcyB3ZSdyZSBhYm91dCB0byBza2lwIHdoaWxlIHN0ZXBwaW5nIGFuZAotCSAgcHJlcm9sbC9wb3N0IHN0ZXBfZG9uZSB3aGVuIHN0ZXBwaW5nIGZpbmlzaGVkLgotCi0yMDA5LTA2LTAxIDEyOjE5OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1mcmFtZXN0ZXAudHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RxdWFyay5jOgotCSogZ3N0L2dzdHF1YXJrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGFkZCBuZXcgQVBJIGZvciBmcmFtZXN0ZXBwaW5nCi0JICBBZGQgbmV3IFNURVAgZXZlbnQgYW5kIG1ldGhvZHMgZm9yIGNyZWF0aW5nL3BhcnNpbmcgdGhlIGV2ZW50Ci0JICBVcGRhdGUgZGVzaWduIGRvY3MuCi0JICBBZGQgbmV3IFNURVBfRE9ORSBtZXNzYWdlIGFuZCBtZXRob2QgdG8gY3JlYXRlL3BhcnNlLgotCSAgQVBJOiBHc3RFdmVudDo6Z3N0X2V2ZW50X25ld19zdGVwKCkKLQkgIEFQSTogR3N0RXZlbnQ6OmdzdF9ldmVudF9wYXJzZV9zdGVwKCkKLQkgIEFQSTogR3N0TWVzc2FnZTo6Z3N0X21lc3NhZ2VfbmV3X3N0ZXBfZG9uZSgpCi0JICBBUEk6IEdzdE1lc3NhZ2U6OmdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZSgpCi0KLTIwMDktMDYtMDEgMTA6MDU6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBzdHJ1Y3R1cmVzOiBkb24ndCBsZWFrIGludmFsaWQgb3IgZW1wdHkgc3RyaW5ncyB3aGVuIHdlIHdhcm4KLQkgIEZpeGVzIG1pbm9yIG1lbW9yeSBsZWFrIGluIHVuaXQgdGVzdHMgY2F1c2VkIGJ5IHRoZSByZWNlbnQgY2hhbmdlcy4KLQkgIFNpbmNlIHdlJ3JlIGV4cGVjdGVkIHRvIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBHVmFsdWUgaW4gdGhlIHN0cnVjdHVyZQotCSAgZmllbGQgc3RydWN0IGhlcmUsIHdlIG5lZWQgdG8gdW5zZXQgaXQgaWYgd2UgZG9uJ3QgdXNlIGl0LgotCi0yMDA5LTA2LTAxIDExOjA4OjMxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSAgY29udHJvbGxlcjogYWRkIHRlc3QgZm9yIGN1YmljIGludC4gYW5kIHRvbyBmZXcgY29udHJvbCBwb2ludHMKLQkgIEFkZGVkIGFub3RoZXIgdGVzdHMgdG8gY2hlY2sgc29tZSB3b3JyaWVzIGluIEJ1ZyAjNTgyNTY0LgotCi0yMDA5LTA1LTI4IDEyOjMxOjA4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgZmFrZXNyYzogYWRkIGEgRklYTUUgY29tbWVudCBmb3IgYmxvY2tzaXplIHZzLiBzaXplLW1heCBwcm9wZXJ0eSBpc3N1ZQotCi0yMDA5LTA1LTMxIDIxOjI3OjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgotCSAgaWRlbnRpdHk6IGhhY2sgYXJvdW5kIGdfb2JqZWN0X25vdGlmeSgpIGJ1ZyBieSBwcm90ZWN0aW5nIGl0IHdpdGggYSBsb2NrCi0JICBPdXQtb2YtYmFuZCBldmVudHMgbWlnaHQgbGVhZCB0byB1cyBjYWxsaW5nIGdfb2JqZWN0X25vdGlmeSgpIGZyb20gYQotCSAgbm9uLXN0cmVhbWluZyB0aHJlYWQsIHdoaWNoIGNhbiBjYXVzZSBjcmFzaGVzIGlmIGdfb2JqZWN0X25vdGlmeSgpIGlzCi0JICBiZWluZyBjYWxsZWQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCBhdCB0aGUgc2FtZSB0aW1lLiBTZWUgIzU1NDQ2MC4KLQotMjAwOS0wNS0zMSAyMjozNzo1OSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbnRyb2xsZXIuYzoKLQkgIGNvbnRyb2xsZXI6IHVzZSByZWFsIHdvcmxkIG51bWJlciBpbiBiZW5jaG1hcmsKLQotMjAwOS0wNS0zMSAyMjozNzowMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIHJlZ2lzdHJ5OiBmaXggY29tbWVudCBmb3JtYXR0aW5nCi0KLTIwMDktMDUtMzAgMjA6MzY6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JICBmYWtlc2luazogaGFjayBhcm91bmQgY3Jhc2hlciBidWcgaW4gZ19vYmplY3Rfbm90aWZ5KCkgZm9yIG91dC1vZi1iYW5kIGV2ZW50cwotCSAgR09iamVjdCBtYXkgY3Jhc2ggaWYgdHdvIHRocmVhZHMgZG8gY29uY3VycmVudCBnX29iamVjdF9ub3RpZnkoKSBvbiB0aGUgc2FtZQotCSAgb2JqZWN0LiBUaGlzIG1heSBoYXBwZW4gaWYgZmFrZXNpbmsgcmVjZWl2ZXMgYW4gb3V0LW9mLWJhbmQgZXZlbnQgc3VjaCBhcwotCSAgRkxVU0hfU1RBUlQgd2hpbGUgcHJvY2Vzc2luZyBhIGJ1ZmZlciBvciBzZXJpYWxpc2VkIGV2ZW50IGluIHRoZSBzdHJlYW1pbmcKLQkgIHRocmVhZC4gU2luY2UgdGhpcyBtYXkgaGFwcGVuIHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3MgZHVyaW5nIGEgY29tbW9uCi0JICBvcGVyYXRpb24gbGlrZSBhIHNlZWssIGFuZCB0aGVyZSBzZWVtcyB0byBiZSBsaXR0bGUgY2hhbmNlIG9mIGEgdGltZWx5IGZpeAotCSAgaW4gR09iamVjdCAoc2VlICMxNjYwMjApLCB3ZSBzaG91bGQgaGFjayBhcm91bmQgdGhpcyBpc3N1ZSBieSBwcm90ZWN0aW5nIGFsbAotCSAgb2YgZmFrZXNpbmsncyBkaXJlY3QgZ19vYmplY3Rfbm90aWZ5KCkgY2FsbHMgd2l0aCBhIGxvY2suCi0JICBBbHNvIGFkZCB1bml0IHRlc3QgZm9yIHRoZSBhYm92ZS4KLQkgIEZpeGVzICM1NTQ0NjAuCi0KLTIwMDktMDUtMzEgMTY6MTc6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgdGFnbGlzdHM6IG1ha2UgX2dldF97c3RyaW5nfHBvaW50ZXJ9IHJldHVybiBGQUxTRSBmb3IgTlVMTCB2YWx1ZXMKLQkgIE1ha2UgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcoKSByZXR1cm4gRkFMU0UgZm9yIE5VTEwgc3RyaW5ncyBhbmQKLQkgIGVtcHR5IHN0cmluZ3MsIGFuZCBnc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXIoKSByZXR1cm4gRkFMU0UgZm9yCi0JICBOVUxMIHBvaW50ZXJzLCBsaWtlIHdlIGRvIHdpdGggZGF0ZXMgYW5kIGJ1ZmZlcnMuCi0JICBGaXhlcyAjNTYwMzQ1LgotCi0yMDA5LTA1LTMwIDIwOjUwOjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgotCSAgdGFnbGlzdHM6IHdhcm4gaWYgc29tZW9uZSB0cmllcyB0byBhZGQgZW1wdHkgb3IgTlVMTCBzdHJpbmcgdGFncyB0byBhIHRhZ2xpc3QKLQkgIEFsc28gd2FybiBpZiBhbiBlbGVtZW50IG9yIGFwcGxpY2F0aW9uIHRyaWVzIHRvIGFkZCBhIGZpZWxkIHdpdGggYW4KLQkgIGVtcHR5IHN0cmluZyB0byBhIHN0cnVjdHVyZSAoTlVMTCBzdHJpbmdzIGFyZSBzdGlsbCBuZWVkZWQgYW5kCi0JICBhbGxvd2VkIHRob3VnaCkgYW5kIGRvIGFsbCB0aG9zZSBjaGVja3MgaW4gdGhlIHJpZ2h0IGZ1bmN0aW9uLgotCSAgRml4ZXMgIzU1OTY0My4KLQotMjAwOS0wNS0yOSAxODoyMjo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgc3RydWN0dXJlOiBhZGQgZ3N0X3N0cnVjdHVyZV9pZF9uZXcoKSBjb252ZW5pZW5jZSBmdW5jdGlvbgotCSAgQWRkIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3KCkgcGx1cwotCSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQoKSBhbmQgdXNlIGl0IGluIGEgZmV3IHBsYWNlcy4KLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9pZF9uZXcoKQotCi0yMDA5LTA1LTI5IDE4OjAwOjA2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZ3N0cXVhcmsuaDoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIG1pY3JvLW9wdGltaXNhdGlvbjogdXNlIEdTVF9RVUFSSyBpbiBtb3JlIHBsYWNlcwotCSAgVXNlIGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3KCkgaW4gY29tYmluYXRpb24gd2l0aCBHU1RfUVVBUksKLQkgIHJhdGhlciB0aGFuIGdzdF9zdHJ1Y3R1cmVfaWRfbmV3KCkgd2hlbiBjcmVhdGluZyBtZXNzYWdlLCBldmVudCwKLQkgIHF1ZXJ5IGFuZCB0YWdsaXN0IHN0cnVjdHVyZXMuIE1vc3RseSBqdXN0IGJlY2F1c2Ugd2UgY2FuLgotCi0yMDA5LTA1LTI5IDE2OjA0OjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogcmVzZXQgc3RhcnRfdGltZSBpbiBsb3N0IHN0YXRlCi0KLTIwMDktMDUtMjkgMTM6MDM6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIGRvY3M6IHVwZGF0ZSBlbGVtZW50IGFuIHBpcGVsaW5lIGRvY3MKLQotMjAwOS0wNS0yOSAxMjo0ODoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgIGRvY3M6IHJlbW92ZSBhIFRPRE8gaXRlbSB0aGF0IGlzIGZpeGVkIG5vdwotCi0yMDA5LTA1LTI5IDEyOjIxOjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBwaXBlbGluZTogZGVwcmVjYXRlIG9sZCBtZXRob2RzLCBmaXggdGVzdAotCSAgRGVwcmVjYXRlIHRoZSBvbGQgX3NldF9zdHJlYW1fdGltZSBhbmQgX2dldF9sYXN0X3N0cmVhbV90aW1lIG1ldGhvZHMgYmVjYXVzZQotCSAgdGhleSBhcmUgbm93IGVxdWl2YWxlbnQgdG8gdGhlIGJldHRlciBuYW1lZCBfc2V0L19nZXRfc3RhcnRfdGltZS4KLQotMjAwOS0wNS0yOCAxNjozMDo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkgIHBpcGVsaW5lOiB1c2UgU1RBUlRfVElNRSB0byBrZWVwIHRyYWNrIG9mIHRpbWUKLQkgIFVzZSB0aGUgZWxlbWVudCBTVEFSVF9USU1FIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJ1bm5pbmcgdGltZSB3aGVuIHRoZSBwaXBlbGluZQotCSAgcGF1c2VkIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgYmFzZV90aW1lLgotCSAgVGFrZSB0aGUgc3RhcnRfdGltZSBiZWZvcmUgc2V0dGluZyB0aGUgY2hpbGRyZW4gdG8gUEFVU0VEIHNvIHRoYXQgd2UgY2FuCi0JICBkaXN0cmlidXRlIHRoZSBzdGFydF90aW1lIHRvIHRoZSBjaGlsZHJlbi4KLQotMjAwOS0wNS0yOCAxNTo0MDowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBzZXQgdGhlIGJhc2VfdGltZSBhbmQgc3RhcnRfdGltZSBiZXR0ZXIKLQkgIFNpbXBseSBzZXQgdGhlIHN0YXJ0X3RpbWUgYW5kIGJhc2VfdGltZSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlCi0JICBzZXR0ZXJzLgotCi0yMDA5LTA1LTI3IDExOjM1OjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IG1ha2UgdGhlIGJpbiBzZXQgdGhlIHN0YXJ0X3RpbWUgb24gZWxlbWVudHMKLQkgIFNldCB0aGUgc3RhcnRfdGltZSBvZiB0aGUgYmluIG9uIHRoZSBlbGVtZW50cyB3aGVuIHRoZXkgYXJlIGFkZGVkIHRvIHRoZQotCSAgcGlwZWxpbmUgYW5kIHdoZW4gYSBzdGF0ZSBjaGFuZ2UgaGFwcGVucy4KLQotMjAwOS0wNS0yNiAxMTo1MzowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBlbGVtZW50OiBhZGQgc3RhcnRfdGltZSBmaWVsZCBhbiBtZXRob2RzCi0JICBBZGQgYSBzdGFydF90aW1lIGZpZWxkIGFuZCBzb21lIG1ldGhvZHMuIFRoZSBzdGFydF90aW1lIHdpbGwgY29udGFpbiB0aGUKLQkgIHJ1bm5pbmdfdGltZSBvZiB3aGVuIHRoZSBlbGVtZW50IGxhc3Qgd2VudCB0byBwYXVzZWQuIFRoaXMgdGltZSBjYW4gYmUgdXNlciB0bwotCSAgcmVwb3J0IHRoZSBwb3NpdGlvbiBpbiBQQVVTRUQgYnV0IGFsc28gdG8gZG8gbW9yZSBjb3JyZWN0IGNsaXBwaW5nIGFuZAotCSAgc3RlcHBpbmcgbGF0ZXIuCi0KLTIwMDktMDUtMjggMjI6MDI6MjEgKzAyMDAgIEFybm91dCBWYW5kZWNhcHBlbGxlIDxhcm5vdXRAbWluZC5iZT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGZpeCBfbWFza2VkX3NjYW5fdWludDMyKCkgYXQgYm91bmRhcmllcwotCSAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIGNvdWxkIHJldHVybiB2YWx1ZXMgc21hbGxlciB0aGFuIG9mZnNldAotCSAgaWYgdGhlIGZpcnN0IGJ5dGUocykgb2YgdGhlIG1hc2sgYXJlIDAgYW5kIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlCi0JICBiZWdpbm5pbmcgb2YgdGhlIGFkYXB0ZXIuCi0JICBBZGRlZCBleGFtcGxlcyB0byBkb2N1bWVudGF0aW9uIG9mIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMigpLgotCSAgQWxzbyBhZGRlZCBzb21lIG1vcmUgbWFza2VkIGJvdW5kYXJ5IHRlc3RzLgotCSAgRml4ZXMgIzU4NDExOAotCi0yMDA5LTA1LTI4IDE2OjM2OjMyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSAgcGFkOiBhZGQgcGFkIHByaXZhdGUgc3RydWN0dXJlCi0JICBBZGQgcGFkIHByaXZhdGUgc3RydWN0dXJlIGFuZCBtb3ZlIHRoZSBuZXcgY2hhaW5saXN0ZnVuYyBpbnRvIHRoZSBwcml2YXRlCi0JICBzdHJ1Y3QuIFRoaXMgYXZvaWRzIEFCSSBicmVha2FnZSBhbmQgYWxsb3dzIHVzIHRvIGV4cGFuZCBpbiB0aGUgZnV0dXJlLgotCi0yMDA5LTA1LTI3IDE2OjM0OjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgQWRkIG1pc3Npbmcgc3ltYm9sIHRvIHRoZSB3aW4zMiBleHBvcnRzCi0JICBUaGlzIHdhcyBhY2NpZGVudGlhbGx5IHJlbW92ZWQgYnkgbXkgbGFzdCBjb21taXQuCi0KLTIwMDktMDUtMjcgMTY6MTc6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGJ1ZmZlcjogYXZvaWQgbWVtb3J5IGxlYWtzCi0JICBBdm9pZCBsZWFraW5nIHRoZSBjYXBzIG9mIHRoZSBkZXN0IGJ1ZmZlciBhbmQgYXZvaWQgZG9pbmcgbmVlZGxlc3MgY2FwcwotCSAgcmVmcy4KLQkgIFdoZW4gdGhlIHNvdXJjZSBhbmQgdGFyZ2V0IGJ1ZmZlcnMgYXJlIHRoZSBzYW1lLCByZXR1cm4gaW1tZWRpYXRseS4KLQotMjAwOS0wNS0yNyAxNDozMjo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBUEk6IEFkZCBnc3RfbWVzc2FnZV97bmV3LHBhcnNlfV90YWdfZnVsbCgpIHRvIGdldC9zZXQgdGhlIHNvdXJjZSBwYWQKLQkgIEZpeGVzIGJ1ZyAjNTgyNTg4LgotCi0yMDA5LTA1LTI3IDE0OjA2OjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBSZXZlcnQgImVsZW1lbnQ6IFNldCB0aGUgb3JpZ2luYXRpbmcgcGFkIGFzIG1lc3NhZ2Ugc291cmNlIGluIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCAoKSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYmViZmRlNzUwMjdlOTc1YjdlN2M3NGM2MzU4YzViZTgzZWE0YWM5Zi4KLQkgIFRoaXMgY2hhbmdlIHNob3VsZG4ndCBiZSBkb25lIGluIGEgc3RhYmxlIHJlbGVhc2Ugc2VyaWVzIGFzCi0JICBhcHBsaWNhdGlvbnMgYXJlIGFjdHVhbGx5IGV4cGVjdGluZyB0aGUgc2VuZGVyIHRvIGJlIGFuCi0JICBHc3RFbGVtZW50LiBPbmUgZXhhbXBsZSBpcyB0b3RlbS4KLQotMjAwOS0wNS0yNiAxMTozNTo0OSArMDEwMCAgSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIFVwZGF0ZSBjb21tb24KLQotMjAwOS0wNS0yNiAxMDo0MToyOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgRml4ICdtYWtlIGRpc3RjaGVjaycKLQkgIFRoZSBjaGVjay1lbnVtLWdldHR5cGVzIHJ1bGUgZGlkbid0IHdvcmsgZm9yICdtYWtlIGRpc3RjaGVjaycgc2luY2UKLQkgIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgc291cmNlIGZpbGVzIGZyb20gdGhlCi0JICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHdoaWNoIGlzbid0IHRydWUgZHVyaW5nIGRpc3RjaGVja2luZy4KLQotMjAwOS0wNS0yNiAxMDozODo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFscy5tYWs6Ci0JICBtYW51YWxzLm1hazogYXR0ZW1wdCB0byBtYWtlICdtYWtlIGRpc3RjaGVjaycgd29yayB3aXRoIC1qTgotCSAgQXR0ZW1wdCB0byBmaXggdGhlICdjYW5ub3QgY3JlYXRlIHJlZ3VsYXIgZmlsZSBidWlsZC9pbWFnZS5lbnRpdGl0ZXM6Ci0JICBmaWxlIGV4aXN0cycgZXJyb3IgSSBnb3QuCi0KLTIwMDktMDUtMjUgMjM6NTg6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBkb2NzOiBmaXggY2RwYXJhbm9pYSBleGFtcGxlIHBpcGVsaW5lIGluIGdzdC1sYXVuY2ggbWFuIHBhZ2UKLQotMjAwOS0wNS0yNSAxODo0NDoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGVsZW1lbnQ6IGZpeCB0eXBvIGluIGNvbW1lbnRzCi0KLTIwMDktMDUtMjUgMTc6NDM6MzIgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZS5hbToKLQkgIGRpc3Q6IEZpeCB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIHRvIGRpc3Q6IHRlc3RydHBvb2wuaCwgbm90IHJ0cG9vbC10ZXN0LmgKLQotMjAwOS0wNS0yNSAxNzowMzowNSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBVcGRhdGUgY29tbW9uCi0KLTIwMDktMDUtMjUgMTY6NTQ6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSAgY2xvY2s6IHJlbW92ZSBhc3NlcnRpb24KLQkgIFJlbW92ZSBhbiBhc3NlcnRpb24sIHRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvciBpbiBhbGwgY2FzZXMuCi0JICBGaXhlcyAjNTgyMDEwCi0KLTIwMDktMDUtMjUgMTY6MjE6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgY2xvY2s6IGVuYWJsZSBtb25vdG9uaWMgY2xvY2sgd2hlbiB3ZSBjYW4KLQkgIEVuYWJsZSB0aGUgbW9ub3RvbmljIGNsb2NrIGJ5IGRlZmF1bHQgd2hlbiB3ZSBjYW4uCi0JICBGaXhlcyAjNTgzNTU0Ci0KLTIwMDktMDUtMjUgMTQ6NTI6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKLQkgIGRvY3M6IGFkZCBJbWFnZSB0byBkcmFmdCBrbGFzcyBkb2N1bWVudGF0aW9uCi0KLTIwMDktMDUtMjUgMTM6MDM6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIHBhZDoga2VlcCB0YXNrIHJlZiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrCi0JICBLZWVwIGEgcmVmIHRvIHRoZSB0YXNrIG9uIHRoZSBwYWQgc28gdGhhdCBhIGNvbmN1cnJlbnQgc3RvcCBjYW4gc3RvcCBhbmQgam9pbgotCSAgdGhlIHRhc2suCi0KLTIwMDktMDUtMjUgMTE6NTY6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YXNrLmM6Ci0JICBnc3R0YXNrOiBhdm9pZCBqb2luIHRvIHJldHVybiBlYXJseQotCSAgVW5zZXQgdGhlIHJ1bm5pbmcgZmxhZyBhZnRlciB3ZSByZWxlYXNlZCB0aGUgbG9jayBmb3IgcG9zdGluZyB0aGUgc3RyZWFtLXN0YXR1cwotCSAgbWVzc2FnZS4gSWYgd2Ugc2V0IHRoZSBydW5uaW5nIGZsYWcgdG8gRkFMU0UgdG9vIGVhcmx5LCB0aGUgam9pbiBtZXRob2Qgd2lsbAotCSAganVzdCBjb250aW51ZSB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBtZXNzYWdlIHRvIGJlIHBvc3RlZCwgbGVhZGluZyB0byBwb3RlbnRpYWwKLQkgIGNyYXNoZXMuCi0KLTIwMDktMDUtMjQgMjM6MTQ6MjYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHByZXNldC5jOgotCSAgcHJlc2V0OiBmaXggdXBkYXRlIHJ1bGUKLQkgIE9ubHkgdXBkYXRlIHRoZSBwcmVzZXQgZnJvbSBzeXN0ZW0sIGlmIHdlIGhhZCBhIHByZXNldCBiZWZvcmUgYW5kIHN5c3RlbQotCSAgdmVyc2lvbiBpcyBuZXdlci4KLQotMjAwOS0wNS0yMiAyMzo0NzozMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmM6Ci0JICBjb250cm9sbGVyOiBhZGQgYSBiZW5jaG1hcmsgdG8gdmVyaWZ5IHRoZSBzd2l0Y2ggdG8gZ3NlcXVlbmNlCi0KLTIwMDktMDUtMjIgMjM6NTA6NTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6Ci0JICBjb250cm9sbGVyOiBhZGQgbW9yZSBlcnJvciBoYW5kbGluZyB0byBleGFtcGxlCi0KLTIwMDktMDUtMjIgMjM6MTQ6NDEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICByZWdpc3RyeTogZG9uJ3QgZnJlZSBub2RlLWRhdGUgYW5kIGRlcmVmIGFnYWluLiBGaXhlcyAjNTgwNTc5Ci0JICBXaGVuIHdyaXRpbmcgYSBjYWNoZSBjaHVuayBmYWlscywgd2Ugd2VyZSBmcmVlaW5nIHRoZSBub2RlIGFuZCBqdW1wIHRvIGEgZmluYWwKLQkgIGNsZWFudXAgd2hpY2ggZGVyZWZlcmVuY2VkIGEgbnVsbCBwb2ludGVyLiBMZXZlIGZyZWVpbmcgdGhlIG5vZGUgdG8gdGhlIGNsZWFudXAKLQkgIGNvZGUgaW4gZmFpbF9mcmVlX2xpc3QuIChzb3JyeSBmb3IgY29tbWl0dGluZyB3cm9uZyBmaXggYmVmb3JlKS4KLQotMjAwOS0wNS0yMiAyMzoxMDowMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5OiBkb24ndCBmcmVlIG5vZGUtZGF0ZSBhbmQgZGVyZWYgYWdhaW4uIEZpeGVzICM1ODA1NzkKLQkgIFdoZW4gd3JpdGluZyBhIGNhY2hlIGNodW5rIGZhaWxzLCB3ZSB3ZXJlIGZyZWVpbmcgdGhlIG5vZGUgYW5kIGp1bXAgdG8gYSBmaW5hbAotCSAgY2xlYW51cCB3aGljaCBkZXJlZmVyZW5jZWQgYSBudWxsIHBvaW50ZXIuIExldmUgZnJlZWluZyB0aGUgbm9kZSB0byB0aGUgY2xlYW51cAotCSAgY29kZSBpbiBmYWlsX2ZyZWVfbGlzdC4KLQotMjAwOS0wNS0yMiAxNDoxNzo1NiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIGNvbnRyb2xsZXI6IGFkZCBHX0xJS0VMWSBhbmQgam9pbiB0d28gaWYgZm9yIHNhbWUgY29uZGl0aW9uCi0JICBBIEdfTElLRUxZIGZvciB0aGUgc2VxdWVuY2UhPU5VTEwgY2hlY2tzLiBKb2luIHR3byBpZnMgdG8gYW4gaWYtZWxzZS4gQWRkCi0JICBpbmRlbnQgZ3VpZGVzIHRvIGtlZXAgaW5kZW50IGZvcm0gYnJlYWtpbmcgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCi0KLTIwMDktMDUtMjIgMTI6NTc6MTAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkgIGdzdHR5cGVmaW5kaGVscGVyOiBGaXggaW5kZW50YXRpb24KLQotMjAwOS0wNS0yMiAxMjoyNDoyMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JICBkb2NzOiBmaXggZ3RrLWRvYyB3YXJuaW5ncwotCSAgTW92ZSBNVCBzYWZldHkgdG8gbWFpbiBkZXNjcmlwdGlvbiAoaXQgZG9lcyBub3QgYmVsb25nIHRvIFJldHVybjogb3IgU2luY2U6Ci0JICBzdGF0ZW1lbnQpLiBBZGQgYSBmZXcgbWlzc2luZyByZXR1cm4gZG9jcy4gRG93bmdyYWRlIGEgbm9ybWFsIGNvbW1lbnQgZnJvbWEgZG9jCi0JICBjb21tZW50LiBGaXggYSBkb2MgaGVhZGVyIHRvIG9ubHkgY29udGFpbiBzeW1ib2wgbmFtZS4KLQotMjAwOS0wNS0yMiAxMDoxOTozNiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZDNhOGZhYiB0byA4ODhlMGEyCi0KLTIwMDktMDUtMjIgMDk6NTE6NDQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZS5hbToKLQkgIGRpc3Q6IEFkZCBydHBvb2wtdGVzdC5oIHRvIHRoZSBzb3VyY2VzIGxpc3Qgc28gaXQgZ2V0cyBkaXN0ZWQuCi0JICBGaXhlcyB0aGUgZGlzdGNoZWNrCi0KLTIwMDktMDUtMjIgMDk6NDQ6MjUgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvYmVuY2htYXJrcy8uZ2l0aWdub3JlOgotCSAgZ2l0aWdub3JlczogSWdub3JlIHRoZSBjbG9ja3N0cmVzcyBiZW5jaG1hcmsgYmluYXJ5Ci0KLTIwMDktMDUtMjIgMDk6NDE6MzYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICBjb250cm9sbGVyOiBTaWxlbmNlIGEgd2FybmluZyBmcm9tIHRoZSBHU2VxdWVuY2UgYmVpbmcgTlVMTC4KLQkgIEZpeCBhIHdhcm5pbmcgdGhhdCBvY2N1cnMgd2hlbiB0aGUgc2VsZi0+cHJpdi0+dmFsdWVzIGlzIE5VTEwgYW5kCi0JICB0aGUgY29kZSB0cmllcyB0byByZXRyaWV2ZSBhbiBpdGVyYXRvciBmcm9tIGl0LiBUaGUgd2FybmluZyB3YXMgc2hvd2luZwotCSAgdXAgaW4gdGhlIGNoZWNrcyBmb3IgdGhlIHZvbHVtZSBlbGVtZW50LgotCi0yMDA5LTA1LTIyIDA5OjMzOjAyICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgZG9jczogRml4IHVwIHNvbWUgZG9jdW1lbnRhdGlvbiB3YXJuaW5ncy4KLQkgIFNpbmNlOiB0YWdzIHNob3VsZCBhbHdheXMgYmUgdGhlIGxhc3QgdGhpbmcgaW4gYSBkb2MgYmxvY2ssIGFwcGFyZW50bHkuCi0JICBBZGQgc29tZSBSZXR1cm5zOiBkZXNjcmlwdGlvbnMgdG8gc29tZSByZWNlbnQgZnVuY3Rpb25zLgotCi0yMDA5LTA1LTIxIDE3OjMyOjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGV2ZW50LmM6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIGRvY3M6IHVwZGF0ZSBkb2NzIGZvciBzdHJlYW1fdGltZS0+cnVubmluZ190aW1lCi0JICBDaGFuZ2Ugc29tZSBpbnN0YW5jZXMgd2hlcmUgd2Ugd3JvbmdseSByZWZlciB0byBzdHJlYW0gdGltZSB3aGVyZSBpdCBzaG91bGQgaGF2ZQotCSAgYmVlbiBydW5uaW5nIHRpbWUuCi0KLTIwMDktMDUtMjEgMTA6NTc6NDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBnc3QtbGF1bmNoOiBkb24ndCB1c2UgR19HVUlOVDMyX0ZPUk1BVCBpbiB0cmFuc2xhdGFibGUgc3RyaW5nCi0JICB4Z2V0dGV4dCBkb2Vzbid0IGhhbmRsZSB0aGlzIHZlcnkgd2VsbC4gRml4ZXMgIzU4MzQxOS4KLQotMjAwOS0wNS0yMCAxNzowNzozNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JICBhdXRvZ2VuLnNoOiBjYW4gcmVtb3ZlIHRoZSAtV25vLXBvcnRhYmlsaXR5IGZyb20gaGVyZSBub3cKLQkgIHNpbmNlIHdlIGFkZGVkIGl0IHRvIGNvbmZpZ3VyZS5hYy4KLQotMjAwOS0wNS0yMCAyMjoxODoxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiBpbXByb3ZlIHRoZSBmbHVzaCBmdW5jdGlvbgotCSAgUmVtb3ZlIGEgY29tcGFyZSBhbmQgYnJhbmNoIGZyb20gZmx1c2guCi0KLTIwMDktMDUtMjAgMTc6MjQ6MTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSAgY29udHJvbGxlcjogZml4IGFzc2VydGlvbiB3aGVuIGZyZWVpbmcgdGhlIGNvbnRyb2wgc291cmNlCi0KLTIwMDktMDUtMjAgMTI6NDg6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogcG90ZW50aWFsbHkgc2F2ZSBhIG1lbWNweSBpbiBfdGFrZQotCSAgRGlyZWN0bHkgdXNlIHRoZSBhc3NlbWJsZWRfZGF0YSBpbiBfdGFrZSgpIGZ1bmN0aW9ucyB3aGVuIHdlIGNhbiBpbnN0ZWFkIG9mCi0JICBjb3B5aW5nIGl0IG91dC4KLQotMjAwOS0wNS0yMCAxMTozNjoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBhZGFwdGVyOiBtaWNybyBvcHRpbWlzYXRpb25zCi0KLTIwMDktMDUtMjAgMTE6MTI6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogYXZvaWQgY29tcGFyaXNpb25zIGluIGZhc3QgcGF0aAotCSAgU21hbGwgdHdlYWtzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHVzZWxlc3MgY29tcGFyZXMgaW4gbG9vcHMuCi0KLTIwMDktMDUtMjAgMTA6Mjg6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOgotCSAgdGVzdHM6IG9uZSBtb3JlIGFkYXB0ZXIgdGVzdAotCi0yMDA5LTA1LTIwIDEwOjI3OjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGF2b2lkIGJyYW5jaCBpbiBjb3B5IGNvZGUKLQotMjAwOS0wNS0yMCAxMDo1NjoxMSArMDMwMCAgSGFubmVzIEJpc3RyeSA8YmlzdHJ5QGluZm9ybWF0aWsudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBsb2Fkc2F2ZTogZml4IHJlcXVlc3RwYWQgaGFuZGxpbmcgYW5kIHNlcmlhbGlzYXRpb24gb3JkZXIuCi0JICBTdXBwb3J0IHJlcXVlc3QgcGFkcyB3aGVuIGxvYWRpbmcuIFJldmVyc2UgcGFkIHNlcmlhbGlzYXRpb24gb3JkZXIgdG8KLQkgIHByZXNlcnZlIGl0IHdoZW4gcmVjcmVhdGluZyB0aGUgcGlwZWxpbmUuCi0KLTIwMDktMDUtMjAgMDA6NDU6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRlZnM6IGFkZCBuZXcgc3ltYm9sCi0KLTIwMDktMDUtMjAgMDA6NDQ6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgbmV3IHN5bWJvbCB0byBkb2NzCi0KLTIwMDktMDUtMjAgMDA6Mzc6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IGFkZCBfbWFza2VkX3NjYW5fdWludDMyCi0JICBBZGQgYSByZWFzb25hYmx5IG9wdGltaXplZCBuZXcgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyKCkgZnVuY3Rpb24KLQkgIHRvIHNjYW4gdGhlIGFkYXB0ZXIgZm9yIGEgcGF0dGVybiBhZnRlciBhcHBseWluZyBhIG1hc2suCi0JICBBZGQgc29tZSB1bml0IHRlc3RzLgotCSAgQVBJOiBHc3RBZGFwdGVyOjpnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIoKQotCSAgRml4ZXMgIzU4MzE4NwotCi0yMDA5LTA1LTE5IDIyOjEzOjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IG1vcmUgb3B0aW1pc2F0aW9ucwotCSAgUmVtb3ZlIGR1cGxpY2F0ZSBjb3B5IGNvZGUgKF9wZWVrX2ludG8gYW5kIF9jb3B5KSBhbmQgbWFrZSBhIHVuaWZpZWQKLQkgIG9wdGltaXplZCBjb3B5IGZ1bmN0aW9uLgotCi0yMDA5LTA1LTE5IDE3OjEyOjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBwYXNzIC1Xbm8tcG9ydGFiaWxpdHkgdG8gYXV0b21ha2UgdG8gc3VwcHJlc3Mgd2FybmluZ3MKLQkgIEdOVSBtYWtlIGlzIHJlcXVpcmVkLCBubyBwb2ludCBwcmV0ZW5kaW5nIG90aGVyd2lzZS4KLQotMjAwOS0wNS0xOCAwMTowMDozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rmb3JtYXQuaDoKLQkgIGRvY3M6IG1lbnRpb24gdGhhdCBHU1RfRk9STUFUX3tQRVJDRU5UfEJVRkZFUlN9IGFyZSBub3QgaW1wbGVtZW50ZWQKLQotMjAwOS0wNS0xNyAxMDo0NjozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JICBnc3RjbG9jazogRml4IEFCSSBicmVha2FnZSBvbiAzMiBiaXQgYXJjaGl0ZWN0dXJlcwotCSAgVGhlIHBhZGRpbmcgb2YgR3N0Q2xvY2sgaXMgYSBHc3RDbG9ja1RpbWUgYW5kIG5vdCBhCi0JICBncG9pbnRlciwgc28gYWRkaW5nIGEgcG9pbnRlciByZXF1aXJlcyB0aGUgcGFkZGluZwotCSAgc2l6ZSB0byBiZSBjaGFuZ2VkIGRlcGVuZGluZyBvbiB0aGUgcG9pbnRlciBzaXplLgotCSAgVXNlIGFuIHVuaW9uIGluc3RlYWQuCi0JICBGaXhlcyBidWcgIzU4Mjg3OC4KLQotMjAwOS0wNS0xNSAxNToyNDo0MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5oOgotCSAgW2dzdHZhbHVlXSBhZGRzIHNhZmV0eSBwYXJlbnRoZXNpcyB0byBtYWNyb3MgbWlzc2luZyB0aGVtLgotCi0yMDA5LTA1LTE1IDE0OjQyOjQ4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLQotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICBbZ3N0dXRpbHNdIEFkZHMgbW9yZSBzYWZldHkgdG8gR1NUX1dSSVRFXyogYW5kIEdTVF9SRUFEXyBtYWNyb3MuCi0JICBBZGRzIHNhZmV0eSAoICkgdG8gcGFyYW1ldGVycyBpbiBfR1NUX1BVVCBhbmQgX0dTVF9HRVQgbWFjcm9zLgotCSAgRml4ZXMgIzU4MjcwOC4KLQotMjAwOS0wMy0xOSAxMTozNzoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JICBjbG9jazogdXNlIHNlcWxvY2tzIHRvIHBhcmFsbGVsbGl6ZSByZWFkZXJzCi0KLTIwMDktMDQtMTYgMTU6NTM6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdGNsb2Nrc3RyZXNzLmM6Ci0JICBzdHJlc3M6IGFkZCBhIGNsb2NrIHN0cmVzc3Rlc3QKLQkgIEFkZCBhIHN0cmVzc3Rlc3QgZm9yIGdzdF9jbG9ja19nZXRfdGltZSgpLgotCi0yMDA5LTA1LTE1IDExOjAwOjUzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkgIE1ha2VmaWxlLmFtOiB1cGRhdGUgZm9yIGFkZGVkL21vdmVkL3JlbW92ZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGRpc3QtZWQuCi0KLTIwMDktMDUtMTIgMTE6Mjk6MjEgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIGRvY3M6IFJlbGVhc2Ugc2NyaXB0IG1vZGlmaWNhdGlvbnMKLQotMjAwOS0wNS0xNCAyMjoxMTo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZXByaXZhdGUuaDoKLQkgIGNvbnRyb2xsZXI6IFVzZSBvcmRlcmVkIEdTZXF1ZW5jZSBpbnN0ZWFkIG9mIEdMaXN0Ci0JICBUaGlzIG1ha2VzIGxvb2t1cHMgYW5kIGluc2VydGlvbnMgTyhsb2cgbikgaW5zdGVhZCBvZgotCSAgYWx3YXlzIE8obikgZm9yIGluc2VydGlvbnMgYW5kIE8obikgaW4gd29yc3QgY2FzZSBmb3IKLQkgIGxvb2t1cHMuCi0JICBGaXhlcyBidWcgIzU4MjU2NC4KLQotMjAwOS0wNS0xNCAxMjozMDoyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vZHJhZnQtZ2hvc3RwYWRzLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbGF0ZW5jeS50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LW1pc3NpbmctcGx1Z2lucy50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbS1zdGF0dXMudHh0OgotCSAgZG9jczogcmVuYW1lIGFuZCBkZWxldGUgc29tZSBkZXNpZ24gZG9jcwotCi0yMDA5LTA1LTE0IDEyOjMwOjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogUHJpbnQgdGhlIHBhdGggc3RyaW5nIGZvciBtZXNzYWdlIHNvdXJjZXMKLQkgIFRoaXMgcmVkdWNlcyBjb25mdXNpb24gaWYgdGhlIG1lc3NhZ2Ugc291cmNlIGlzIGEgcGFkCi0JICBhbmQgb25seSAic3JjIiBpcyBwcmludGVkIGFzIHNvdXJjZS4KLQotMjAwOS0wNS0xNCAxMjoyNToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5jOgotCSAgZWxlbWVudDogU2V0IHRoZSBvcmlnaW5hdGluZyBwYWQgYXMgbWVzc2FnZSBzb3VyY2UgaW4gZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkICgpCi0JICBGaXhlcyBidWcgIzU4MjU4OC4KLQotMjAwOS0wNS0xNCAxMTozNjoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBlbGVtZW50OiBhZGQgZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZV9mdWxsKCkKLQkgIEFkZCBhIGdzdF9lbGVtZW50X2xvc3Rfc3RhdGVfZnVsbCgpIHdpdGggYW4gZXh0cmEgYXJndW1lbnQgdG8gY29udHJvbAotCSAgZGlzdHJpYnV0aW9uIG9mIGEgbmV3IGJhc2VfdGltZS4gV2Ugd2lsbCBuZWVkIHRoaXMgZm9yIGZsdXNoaW5nIHN0ZXAKLQkgIG9wZXJhdGlvbnMuCi0JICBBUEk6IEdzdEVsZW1lbnQ6OmdzdF9lbGVtZW50X2xvc3Rfc3RhdGVfZnVsbCgpCi0KLTIwMDktMDUtMTMgMjM6NTI6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogZG9uJ3QgdXNlIHJlYWxsb2MsIGl0IGRvZXMgYSBtZW1jcHkKLQkgIERvbid0IHVzZSByZWFsbG9jIHRvIGdyb3cgdGhlIHNjcmF0Y2ggYXJlYSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIG1lbWNweSB0aGUKLQkgIG9sZCB1c2VsZXNzIGRhdGEgaW50byB0aGUgbmV3IGFyZWEgYmVmb3JlIHdlIHdyaXRlIG91ciBuZXcgc3R1ZmYgaW4gaXQuCi0KLTIwMDktMDUtMTMgMjM6Mzg6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6Ci0JICBkb2NzOiB1cGRhdGUgdHJpY2ttb2RlIGRvY3VtZW50Ci0KLTIwMDktMDUtMTMgMjI6NTE6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogdXNlIGdfcmVhbGxvYyBmb3IgcmVzaXppbmcgdGhlIGJ1ZmZlcgotCSAgVXNlIGdfcmVhbGxvYyBmb3IgcmVzaXppbmcgdGhlIGludGVybmFsIGJ1ZmZlciBpbnN0ZWFkIG9mIGEKLQkgIGxlc3MgZmFuY3kgX2ZyZWUvX21hbGxvYyBwYWlyLgotCi0yMDA5LTA1LTEzIDIxOjM1OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkgIGFkYXB0ZXI6IG1vdmUgbmV3IG1lbWJlciB0byBwcml2YXRlIHN0cnVjdAotCSAgTW92ZSB0aGUgbmV3IG1lbWJlcnMgdG8gYSBwcml2YXRlIHN0cnVjdCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgZW5vdWdoIHBhZGRpbmcKLQkgIGFueW1vcmUgb24gMzItYml0cyBwbGF0Zm9ybXMuCi0KLTIwMDktMDUtMTMgMTg6NTA6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgYWRhcHRlcjogdXBkYXRlIHNvbWUgZG9jcwotCi0yMDA5LTA1LTEzIDE3OjA5OjMyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKLQkgIHRlc3RzOiBhZGQgYW5vdGhlciB0ZXN0IGZvciBhZGFwdGVyIHRpbWVzdGFtcHMKLQotMjAwOS0wNS0xMyAxNjo0ODozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICB0ZXN0czogYWRkIG5ldyB0aW1lc3RhbXAgdW5pdCB0ZXN0Ci0KLTIwMDktMDUtMTMgMTY6MjY6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGRlZnM6IGFkZCBuZXcgc3ltYm9sCi0KLTIwMDktMDUtMTMgMTY6MDk6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSAgYWRhcHRlcjogYWRkIG1ldGhvZCB0byBrZWVwIHRyYWNrIG9mIHRpbWVzdGFtcHMKLQkgIEtlZXAgdHJhY2sgb2YgdGhlIHRpbWVzdGFtcCBhbmQgb2Zmc2V0IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBoZWFkIG9mIHRoZQotCSAgYWRhcHRlci4KLQkgIEFQSTogR3N0QWRhcHRlcjo6Z3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAoKQotCi0yMDA5LTA1LTEzIDE2OjIwOjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSAgYWRhcHRlcjogc21hbGwgY2xlYW51cHMKLQotMjAwOS0wNS0xMyAxMTowMzoyNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZGVidWd1dGlsczogc2hvdyBtb3JlIHBhZC1kZXRhaWxzCi0JICBTaG93IHBhZCBhY3RpdmF0aW9uIG1vZGUgYW5kIHBhZC1mbGFncyBpbnNpZGUgdGhlIHBhZC4gV3JpdGUgZG93biBzb21lIGlkZWFzCi0JICBhYm91dCBob3cgd2UgY291bGQgaW1wcm92ZSB0aGUgY2FwcyBsYXlvdXQuCi0KLTIwMDktMDUtMTMgMDA6Mjk6NTcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGRlYnVndXRpbHM6IGxheW91dCBpbXByb3ZlbWVudAotCSAgZG90IGRvZXMgbm90IHRha2UgdGhlIGhlYWQvdGFpbCBsYWJlbHMgaW50byBhY2NvdW50LiBGb3IgdW5maXhlZCBjYXBzIHRoZXkgZ2V0Ci0JICBxdWl0ZSBsYXJnZS4gRG91YmxlIHRoZSBwYWRkaW5nIHRvIG1ha2UgaXQgc29ydCBvZiByZWFkYWJsZSBpbiBtb3JlIGNhc2VzLiBBbHNvCi0JICBtYWtlIG5vcm1hbCBmb250IGJpZ2dlciBhbmQgY2Fwcy1sYWJlbCBmb250IHNtYWxsZXIgdG8gaW5jcmVhc2Ugb3VyIGx1Y2suCi0KLTIwMDktMDUtMTIgMjE6MDA6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIGNoZWNrczogY2hlY2sgZm9yIGVudW0gdHlwZXMgbm90IGNsYXNzX3JlZidlZCBpbiBnc3RfaW5pdCgpIGluICdtYWtlIGNoZWNrJwotCi0yMDA5LTA1LTEyIDIwOjU4OjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSAgSW5pdGlhbGlzZSBzb21lIG1vcmUgdHlwZXMgaW4gZ3N0X2luaXQoKSwgZXNwLiB0aGUgbmV3IGVudW0gdHlwZXMKLQkgIFBvc3NpYmx5IGZpeGVzIEdPYmplY3QgY2xhc3MgY3JlYXRpb24vdW5yZWYgcmFjZSBjb25kaXRpb25zIHdoZW4KLQkgIGNyZWF0aW5nIHRoZSBsYXN0LW1lc3NhZ2Ugc3RyaW5nIGluIGZha2VzaW5rIGZvciBldmVudHMgd2l0aAotCSAgc3RydWN0dXJlcyB0aGF0IGhhdmUgZmllbGRzIHdpdGggdGhlc2UgZW51bSB0eXBlcy4KLQotMjAwOS0wNS0xMiAyMDo1NjowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgc3lzdGVtY2xvY2s6IHJlbW92ZSBkdXBsaWNhdGUgX2dldF90eXBlKCkgZnVuY3Rpb24gZm9yIEdzdENsb2NrVHlwZQotCSAgUmVtb3ZlIHRoZSBzdGF0aWMgZ3N0X2Nsb2NrX3R5cGVfZ2V0X3R5cGUoKSBmdW5jdGlvbiBpbiB0aGUKLQkgIHN5c3RlbWNsb2NrIGNvZGUgaW4gZmF2b3VyIG9mIHRoZSBwdWJsaWMgb25lIGluIGdzdGVudW10eXBlcy5jLgotCi0yMDA5LTA0LTIyIDEwOjUzOjM3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgZ2hvc3RwYWQ6IHJlbW92ZSBkZXByZWNhdGVkIEFQSQotCSAgX2ludGVybmFsX2xpbmtfZnVuY3Rpb24oKSBpcyBkZXByZWNhdGVkIGFuZCBfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbigpCi0JICBpcyBhbHJlYWR5IHByb3ZpZGVkLgotCi0yMDA5LTA0LTIxIDExOjMzOjQzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBwYXJzZS1sYXVuY2g6IGFsbG93IHNwZWNpZnlpbmcgR3N0RWxlbWVudCBwcm9wZXJ0aWVzIHZpYSBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24KLQkgIElmIGRlc2VyaWFsaXppbmcgYSBwcm9wZXJ0eSBmYWlscywgY2hlY2sgaWYgdGhlIHZhbHVlIHR5cGUgaXMgYSBzdHJpbmcgYW5kIGlmIHNvCi0JICBhdHRlbXB0IHRvIGNyZWF0ZSBhIGJpbiBmcm9tIHRoZSBzdHJpbmcgdmFsdWUuIFRoaXMgYWxsb3dzIHRvIGUuZy4gc3BlY2lmeQotCSAgYXVkaW8tc2luay92aWRlby1zaW5rIGZvciBwbGF5YmluIG9uIGdzdC1sYXVuY2ggY29tbWFuZGxpbmUuCi0KLTIwMDktMDUtMTIgMTc6Mjk6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVybGlzdC50eHQ6Ci0JICBkb2NzOiBhZGQgc29tZSBkb2NzIGFib3V0IGJ1ZmZlciBsaXN0cwotCi0yMDA5LTA1LTEyIDE2OjE4OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVybGlzdC5jOgotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuaDoKLQkgIGJ1ZmZlcmxpc3Q6IG1ha2Ugb2JqZWN0cyBvcGFxdWUKLQotMjAwOS0wNS0xMiAxNTozMzoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkgIGJ1ZmZlcmxpc3Q6IGZpeCBhIGNvbW1lbnQKLQotMjAwOS0wNS0xMiAxMzoxMDo1NSArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnIGF0IGF4aXMuY29tPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBidWZmZXJsaXN0OiBob29rIHVwIHRoZSBwYWQgZnVuY3Rpb25zCi0JICBSZXVzZSBidWZmZXIgY29kZSBmb3IgYnVmZmVybGlzdHMuIE5vdCBzdXJlIGlmIHRoaXMgbWVhc3VyYWJseSBpbXBhY3RzIHBlcmZvcm1hbmNlCi0JICBmb3IgdGhlIHNpbXBsZSBidWZmZXIgY2FzZSwgaWYgaXQgZG9lcyBhZnRlciBkb2luZyBzb21lIGJlbmNobWFya3MsIHdlIGNhbgotCSAgZGVjb3VwbGUgaXQgbGF0ZXIuCi0JICBGaXhlcyAjNTcyMjg1Ci0KLTIwMDktMDUtMTIgMTI6MDg6NTYgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZyBhdCBheGlzLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYnVmZmVybGlzdDogYWRkIGRvY3MvYnVpbGQvZGVidWcvdW5pdHRlc3QKLQkgIFNlZSAjNTcyMjg1Ci0KLTIwMDktMDUtMTIgMTE6NTE6MzcgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZyBhdCBheGlzLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlcmxpc3QuYzoKLQkqIGdzdC9nc3RidWZmZXJsaXN0Lmg6Ci0JICBidWZmZXJsaXN0OiBhZGQgYnVmZmVybGlzdCBjb2RlCi0JICBCdWZmZXIgbGlzdHMgYXJlIGEgbWVhbnMgdG8gbWFuYWdlIGRpc2pvaW50IGJ1ZmZlcnMgYXMgb25lIGJ1ZmZlci4gSXQncyBhbHNvCi0JICBwb3NzaWJsZSB0byBwdXQgbWFueSBvZiB0aG9zZSBidWZmZXJzIGludG8gYSBsaXN0LgotCSAgVGhlIGlkZWEgaXMgdGhhdCB3aGVuIHN1cHBvcnQgaXMgYWRkZWQgdG8gdmFyaW91cyBlbGVtZW50cywgd2Ugd2lsbCBiZSBhYmxlIHRvCi0JICBtb3JlIGVmZmljaWVudGx5IHNsaWNlIGFuZCBkaWNlIGJ1ZmZlcnMsIHJlZHVjZSB0aGUgYW1vdW50IG9mIG1lbWNweSBhbmQgYWxzbwotCSAgcmVkdWNlIGRhdGEgcGFzc2luZyBvdmVyaGVhZC4KLQkgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBrZXB0IHNpbXBsZSBvbiBwdXJwb3NlLCByZXVzaW5nIGFsbCBvZiB0aGUgbWVtb3J5Ci0JICBtYW5hZ2VtZW50IGZlYXR1cmVzIHdlIGhhdmUgZm9yIG1pbmlvYmplY3RzIGFuZCBidWZmZXJzLgotCSAgQWNjZXNzIHRvIHRoZSBidWZmZXJsaXN0IG9iamVjdCBpcyBkb25lIHdpdGggYW4gaXRlcmF0b3IsIHdoaWNoIGFsbG93cyBmb3IKLQkgIGVmZmljaWVudCBpdGVyYXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgbGlzdC4KLQkgIFNlZSAjNTcyMjg1Ci0KLTIwMDktMDUtMTEgMDc6NDk6MzQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGdzdGJ1ZmZlcjogY29weSBuZXcgYnVmZmVyIGZsYWdzIHdoZW4gY29weWluZyBtZXRhZGF0YS4KLQotMjAwOS0wNC0yNyAxMDoxMzowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IG9wdGltaXplIHRha2luZyB0aGUgaGVhZGJ1ZmZlcgotCSAgV2hlbiBhIGFyZSByZXF1ZXN0ZWQgdG8gdGFrZSBhIGJ1ZmZlciBmcm9tIHRoZSBhZGFwdGVyIHRoYXQgaXMgZXhhY3RseSB0aGUKLQkgIGhlYWRidWZmZXIsIGRvbid0IG1ha2UgYSBzdWJidWZmZXIgb2YgaXQgYnV0IHJldHVybiB0aGF0IGhlYWQgYnVmZmVyLgotCSAgQWRkIGEgdW5pdC10ZXN0IGZvciB0aGlzIG5ldyBvcHRpbWlzYXRpb24uCi0KLTIwMDktMDUtMDUgMTc6NDE6MjQgKzAyMDAgIEFybm91dCBWYW5kZWNhcHBlbGxlIDxhcm5vdXRAbWluZC5iZT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIHR5cGVmaW5kOiBkb24ndCBsZWFrIHRoZSBmb3JjZS1jYXBzIHByb3BlcnR5Ci0JICBGaXhlcyAjNTgxMzIxCi0KLTIwMDktMDQtMjggMTk6MjA6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50OiBmaXggcG9zdGluZyBvZiBhc3luYy1zdGFydCBtZXNzYWdlcwotCSAgV2hlbiBhbiBlbGVtZW50IGxvc3QgaXRzIHN0YXRlIGJ1dCB3YXMgYnVzeSBkb2luZyBhIHN0YXRlIGNoYW5nZSwgc3RpbGwgcG9zdCB0aGUKLQkgIGFzeW5jLXN0YXJ0IG1lc3NhZ2Ugd2l0aCB0aGUgYmFzZV90aW1lIHJlc2V0IGZsYWcgb3IgZWxzZSB3ZSBtaWdodCBlbmQgdXAgd2l0aAotCSAgYW4gb2xkIGJhc2VfdGltZS4KLQkgIHRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2luayBpcyBnb2luIGFzeW5jIHRvIHBhdXNlZCBhbmQgdGhlbiBhIGZsdXNoaW5nIHNlZWsgaXMKLQkgIHBlcmZvcm1lZC4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgYmFzZV90aW1lIHRvIHJlbWFpbiB1bm1vZGlmaWVkIGJlY2F1c2UgdGhlCi0JICBhc3luYy1zdGFydCBtZXNzYWdlIHdhcyBub3Qgc2VudC4KLQotMjAwOS0wNS0xMCAxNzoyODozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIG5ldyBmdW5jdGlvbnMgdG8gdGhlIHdpbjMyIGV4cG9ydHMKLQotMjAwOS0wNS0xMCAxMToxNzoyNyArMDIwMCAgTWFyYy1BbmRyZSBMdXJlYXUgPG1hcmNhbmRyZS5sdXJlYXVAZ21haWwuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgUnVuIGxpYnRvb2xpemUgYmVmb3JlIGFjbG9jYWwKLQkgIFRoaXMgdW5icmVha3MgdGhlIGJ1aWxkIGluIHNvbWUgY2FzZXMuIEZpeGVzIGJ1ZyAjNTgyMDIxCi0KLTIwMDktMDUtMDcgMTY6Mzc6MzcgKzAyMDAgIEpvc8OpIEFsYnVycXVlcnF1ZSA8amFhbGJ1cnF1QHN2bi5nbm9tZS5vcmc+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICBBUEk6IEFkZCBnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY19mdWxsKCkKLQkgIFRoaXMgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgYmluZGluZ3MgdGhhdCBuZWVkIHRvIHByb3ZpZGUKLQkgIHNvbWUgYWRkaXRpb25hbCB1c2VyIGRhdGEgdG8gdGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbi4KLQkgIEZpeGVzIGJ1ZyAjNTQ1Nzg3LgotCi0yMDA5LTA1LTA3IDE2OjAxOjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBmaWxlc3JjOiBJbXByb3ZlIGRlYnVnZ2luZyBhIGJpdCBvbiBpbnZhbGlkIFVSSXMKLQotMjAwOS0wNS0wNyAxMDozNjo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBBZGQgbmV3IGZ1bmN0aW9ucyB0byB0aGUgZG9jcwotCi0yMDA5LTA1LTA3IDA5OjMxOjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmg6Ci0JICB0YWdzOiBBUEk6IEFkZCBmdW5jdGlvbnMgdG8gYWRkIHNpbmdsZSB0YWdzIHRvIEdzdFRhZ0xpc3Qgb3IgR3N0VGFnU2V0dGVyCi0JICBUaGUgbmV3IGZ1bmN0aW9ucyBhcmUgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZSgpCi0JICBhbmQgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSgpKS4gVGhpcyBmaXhlcyBidWcgIzU4MTE5OC4KLQotMjAwOS0wNS0wNyAwOToyODoxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1cmkuYzoKLQkgIEdzdFVSSUhhbmRsZXI6IFVzZSBnZXRfdHlwZV9mdWxsKCkgdm1ldGhvZCBpZiBzcGVjaWZpZWQgaW5zdGVhZCBvZiBnZXRfdHlwZSgpCi0JICBUaGlzIGZpeGVzIGJ1ZyAjNTgxMjgxIGFuZCBtYWtlcyBpdCBlYXNpZXIgZm9yIGJpbmRpbmdzIHRvCi0JICBpbXBsZW1lbnQgR3N0VVJJSGFuZGxlcnMuIGdldF9wcm90b2NvbHNfZnVsbCgpIHdhcyBhbHJlYWR5IHVzZWQKLQkgIGxpa2UgdGhpcy4KLQotMjAwOS0wNS0xMiAwMTo0ODozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSAucG8gZmlsZXMgZm9yIG5ldyBzdHJpbmdzIGZyb20gY29udGFpbmVyLWZvcm1hdCB0YWcKLQotMjAwOS0wNS0xMiAwMTozMDoxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JICBkb2NzOiBzbWFsbCB1cGRhdGUgdG8gcmVsZWFzZSBkb2NzCi0KLTIwMDktMDUtMTIgMDE6MTM6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IHJlbmFtZSBDVlMgLT4gZ2l0IGluIGEgY291cGxlIG9mIHBsYWNlcwotCi0yMDA5LTA1LTEyIDAwOjQ3OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBidW1wIHRoZSBHTGliIHJlcXVpcmVtZW50IHRvIEdMaWIgPj0gMi4xNgotCSAgYXMgcGVyIHRoZSBOZXcgUmVnaW1lIChzZWUgd2lraSkuCi0KLTIwMDktMDUtMTIgMDA6MDk6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOgotCSAgeG1scmVnaXN0cnk6IHJlbW92ZSB0aGUgb2xkIHhtbCByZWdpc3RyeQotCSAgTm8gcG9pbnQgaW4ga2VlcGluZyBpdCBhcm91bmQgcmVhbGx5LiBGaXhlcyAjNTc3OTI2LgotCi0yMDA5LTA1LTA3IDE2OjA4OjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgdGFnczogYWRkIGEgdGFnIGZvciB0aGUgY29udGFpbmVyIGZvcm1hdAotCSAgQVBJOiBhZGQgR1NUX1RBR19DT05UQUlORVJfRk9STUFUCi0KLTIwMDktMDUtMDggMTY6Mjg6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBiaW46IGZpeCBkZWJ1ZyBtZXNzYWdlCi0JICBNYWtlIHRoZSBkZWJ1ZyBtZXNzYWdlIHNob3cgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyAodGhlIG1lc3NhZ2UKLQkgIHJlcGxhY2VkIGhlcmUgaXMgbm90IG5lY2Vzc2FyaWx5IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9uZSB0aGF0Ci0JICByZXBsYWNlcyBpdCkuCi0KLTIwMDktMDUtMTIgMDA6MzQ6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YXNrLmM6Ci0JICBHc3RUYXNrOiBmaXggY29tcGlsYXRpb24KLQotMjAwOS0wNC0yNCAxOTozMjozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9ydHBvb2wtdGVzdC5jOgotCSAgdGVzdHM6IHNldCB0aGUgbGF0ZW5jeS10aW1lIHRvIHNvbWV0aGluZyBsb3cKLQotMjAwOS0wNC0yNCAxMzo1NToxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9ydHBvb2wtdGVzdC5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmM6Ci0JICB0ZXN0czogaW1wcm92ZSB0aGUgZXhhbXBsZQotCi0yMDA5LTA0LTI0IDEyOjM1OjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSogZ3N0L2dzdHRhc2twb29sLmg6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3Rlc3RydHBvb2wuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgVGFza1Bvb2w6IHJlbW92ZSBfc2V0X2Z1bmMoKQotCSAgUmVtb3ZlIHRoZSBzdGF0aWMgZnVuY3Rpb24gc2V0IG9uIHRoZSBUYXNrUG9vbCBiZWZvcmUgX3ByZXBhcmUoKSBpcyBjYWxsZWQgYW5kCi0JICBhbGxvdyBmb3IgYXNzaWduaW5nIGEgZnVuY3Rpb24gdG8gYSBUYXNrIHdoZW4gd2UgX3B1c2goKS4KLQkgIFVwZGF0ZSB0aGUgZXhhbXBsZXMKLQotMjAwOS0wNC0yMyAxOTo0Mjo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvcnRwb29sLXRlc3QuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvdGVzdHJ0cG9vbC5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmg6Ci0JICB0ZXN0czogYWRkIGV4YW1wbGUgb2YgY3VzdG9tIHRhc2twb29scwotCSAgQWRkIGFuIGV4YW1wbGUgdG8gZGVtb25zdHJhdGUgdGhlIHVzZSBvZiBhIGN1c3RvbSB0YXNrcG9vbCBhbmQgaG93IHRvIGNvbmZpZ3VyZQotCSAgaXQgb24gdGhlIHRhc2suIEN1cnJlbnRseSB0aGUgdGFza3Bvb2wgZG9lcyBub3QgZG8gbXVjaCB5ZXQgYnV0IGl0J2xsIGNyZWF0ZQotCSAgc29tZSBjdXN0b20gdGhyZWFkcyBsYXRlciBvbi4KLQotMjAwOS0wNC0yMyAxOTo0MTozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2twb29sLmg6Ci0JICB0YXNrcG9vbDogZml4IGEgY29tbWVudAotCi0yMDA5LTA0LTIzIDE5OjQxOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3N0cmVhbS1zdGF0dXMuYzoKLQkgIHRlc3RzOiBjbGVhbnVwIHNvbWUgY29kZQotCi0yMDA5LTA0LTIzIDE3OjQ4OjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICBQYWQ6IHBvc3QgU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURQotCSAgUG9zdCBhIHN0cmVhbS1zdGF0dXMgbWVzc2FnZSBpbmRpY2F0aW5nIHRoYXQgYSBuZXcgdGFzayB3YXMgY3JlYXRlZCBzbyB0aGF0IHRoZQotCSAgYXBwbGljYXRpb24gaGFzIGEgY2hhbmNlIHRvIGNoYW5nZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFzay4KLQkgIEZpeCB1bml0IHRlc3QgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIG5ldyByZWYgb2YgdGhlIG1lc3NhZ2UuCi0KLTIwMDktMDQtMjMgMTc6MjQ6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogYWRkIG5ldyB0YXNrIG1ldGhvZHMKLQotMjAwOS0wNC0yMyAxNzoxOToxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSAgR3N0VGFzazogYWRkIG1ldGhvZHMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBwb29sCi0JICBBZGQgZ2V0dGVyIGFuZCBzZXR0ZXIgZm9yIGNvbmZpZ3VyaW5nIHRoZSBHc3RUYXNrUG9vbCB0byB1c2UgZm9yIGEgR3N0VGFzay4KLQotMjAwOS0wNC0yMyAxNzowNToyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIFRhc2s6IHJlbWVtYmVyIHBvb2wKLQkgIFJlbWVtYmVyIHRoZSBwb29sIHdlIGN1cnJlbnRseSBoYXZlIG91ciB0YXNrIHJ1bm5pbmcgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IHRvCi0JICBqb2luIHRoZSB0YXNrIGxhdGVyIG9uLgotCSAgRml4IGEgbGVhayBvZiB0aGUgdGFza3Bvb2wuCi0KLTIwMDktMDQtMjMgMTY6NTM6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogdXBkYXRlIC5kZWZzIGZpbGUgd2l0aCB0YXNrcG9vbCBtZXRob2RzCi0KLTIwMDktMDQtMjMgMTY6NTM6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YXNrLmM6Ci0JICB0YXNrOiBmaXggZGVhZGxvY2sgZHVlIHRvIHR5cG8KLQotMjAwOS0wNS0xMiAwMDoyNToxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrLmg6Ci0JICBHc3RUYXNrOiB1c2UgR3N0VGFza1Bvb2wgZm9yIG1hbmFnaW5nIHRocmVhZHMKLQkgIFVzZSB0aGUgbmV3IEdzdFRhc2tQb29sIHRvIGhhbmRsZSBzdHJlYW1pbmcgdGhyZWFkcy4KLQotMjAwOS0wNC0yMyAxNjowMDo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSogZ3N0L2dzdHRhc2twb29sLmg6Ci0JICB0YXNrcG9vbDogZml4IGRvY3MsIG1ha2UgcHVzaC9qb2luIGdlbmVyaWMKLQkgIEZpeCBzb21lIG1vcmUgZG9jcy4KLQkgIE1ha2UgX3B1c2goKSByZXR1cm4gYSBnZW5lcmljIGlkICh0aGlzIGNhbiBiZSBzb21ldGhpbmcgZWxzZSB0aGFuIGEgR1RocmVhZCBpbgotCSAgc29tZSBjYXNlcykgYW5kIG1ha2UgX2pvaW4oKSB1c2UgdGhhdCBnZW5lcmljIGlkLgotCi0yMDA5LTA0LTIzIDE1OjQ0OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3R0YXNrcG9vbC5jOgotCSogZ3N0L2dzdHRhc2twb29sLmg6Ci0JICB0YXNrcG9vbDogYWRkIG5ldyBvYmplY3QgdG8gbWFuYWdlIHRocmVhZHMKLQkgIEFkZCBhIG5ldyBvYmplY3QgR3N0VGFza1Bvb2wgdG8gbWFuYWdlIHRoZSBzdHJlYW1pbmcgdGhyZWFkcy4KLQkgIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjcmVhdGUgYW5kIHVzZSBjdXN0b20gY29uZmlndXJlZCB0aHJlYWRzLgotCi0yMDA5LTA0LTIyIDEyOjA0OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3N0cmVhbS1zdGF0dXMuYzoKLQkgIGV4YW1wbGVzOiBzZXQgYnVzIGhhbmRsZXIgYmVmb3JlIHN0YXRlIGNoYW5nZQotCSAgV2UgbmVlZCB0byBzZXQgdGhlIGJ1cyBoYW5kbGVyIGJlZm9yZSBzdGFydGluZyB0aGUgcGlwZWxpbmUgb3Igd2UgbWlnaHQganVzdAotCSAgbWlzcyB0aGUgbWVzc2FnZSB3ZSBhcmUgbG9va2luZyBmb3IuCi0KLTIwMDktMDQtMjIgMTA6MTY6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvc3RyZWFtLXN0YXR1cy5jOgotCSAgdGVzdHM6IGFkZCBleGFtcGxlIGFwcCBmb3Igc3RyZWFtLXN0YXR1cwotCSAgQWRkIGFuIGV4YW1wbGUgYXBwbGljYXRpb24gdGhhdCBhZGp1c3RzIHRoZSB0aHJlYWQgcHJpb3JpdHkgb2YgYSB0YXNrIHVzaW5nIHRoZQotCSAgc3RyZWFtLXN0YXR1cyBtZXNzYWdlcy4KLQotMjAwOS0wNC0yMSAxOToxNTo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBUYXNrOiBhZGQgbWV0aG9kIHRvIHNldCB0aGUgcHJpb3JpdHkKLQkgIEFkZCBhIG1ldGhvZCB0byBjb25maWd1cmUgYSBwcmlvcml0eSBmb3IgdGhlIHRocmVhZHMgdXNlZCBieSBHc3RUYXNrLgotCi0yMDA5LTA0LTIxIDE2OjMwOjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgotCSAgdGVzdHM6IGFkZCBhIHVuaXQtdGVzdCBmb3IgdGhlIHN0cmVhbS1zdGF0dXMKLQkgIEFkZCBhIHVuaXQgdGVzdCBmb3IgdGhlIFNUUkVBTV9TVEFUVVMgbWVzc2FnZXMuCi0KLTIwMDktMDUtMTIgMDA6MDU6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSAgR3N0VGFzazogaW1wcm92ZSBkb2N1bWVudGF0aW9uCi0JICBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgY2FsbGJhY2tzLgotCi0yMDA5LTA0LTIxIDE1OjI1OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvY2xlYW51cC5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkgIHRlc3RzOiBmaXggdW5pdC10ZXN0cyBmb3IgbmV3IHN0cmVhbS1zdGF0dXMKLQkgIEZpeCB0aGUgdW5pdC10ZXN0cyBzbyB0aGF0IHRoZXkgZG9uJ3QgZmFpbCBvbiB0aGUgbmV3IHN0cmVhbS1zdGF0dXMgbWVzc2FnZXMKLQkgIHRoYXQgYXJlIGVtaXRlZCBub3cuCi0KLTIwMDktMDQtMjEgMTQ6NDY6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIEdzdFBhZDogaW5zdGFsbCB0aHJlYWQgY2FsbGJhY2tzIG9mIHRoZSB0YXNrCi0JICBJbnN0YWxsIHRocmVhZCBzdGF0dXMgY2FsbGJhY2tzIG9uIHRoZSB0YXNrIG9iamVjdCBvZiBhIHBhZCBhbmQgcG9zdAotCSAgU1RSRUFNX1NUQVRVUyBtZXNzYWdlcy4KLQotMjAwOS0wNC0yMiAxMDoxNDo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIG1lc3NhZ2U6IGNsYXJpZnkgc29tZSBkb2NzCi0KLTIwMDktMDQtMjEgMTQ6NDI6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0YXNrLmM6Ci0JICBUYXNrOiBjYWxsIGxlYXZlX3RocmVhZCBiZWZvcmUgc2lnbmFsaW5nCi0JICBDYWxsIHRoZSBsZWF2ZV90aHJlYWQgY2FsbGJhY2sgYmVmb3JlIHdlIHNpZ25hbCB0aGUgdGhyZWFkIHBlcmZvcm1pbmcgdGhlIF9qb2luCi0JICBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhlIGxpc3RlbmVyIHN0aWxsIGhhcyB2YWxpZCBpbmZvIGluIHRoZSBjYWxsYmFjay4KLQotMjAwOS0wNC0yMSAxMzo0MjowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBHc3RNZXNzYWdlOiBBZGQgU1RSRUFNX1NUQVRVUyBtZXNzYWdlIG1ldGhvZHMKLQkgIEFkZCBtZXRob2RzIHRvIGhhbmRsZSB0aGUgc3RyZWFtX3N0YXR1cyBtZXNzYWdlIHR5cGVzLgotCi0yMDA5LTA0LTIxIDEzOjA1OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cXVhcmsuYzoKLQkqIGdzdC9nc3RxdWFyay5oOgotCSAgcXVhcms6IGFkZCAib2JqZWN0IiBxdWFyawotCSAgQWRkIHRoZSBvYmplY3QgcXVhcmsgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBTVFJFQU1fU1RBVFVTIG1lc3NhZ2VzLgotCi0yMDA5LTA1LTExIDIzOjQ0OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFzay5oOgotCSAgVGFzazogcmVtb3ZlIGNyZWF0ZS9qb2luIG1ldGhvZHMKLQkgIFByZXBhcmUgZm9yIHVzaW5nIHRoZSBHc3RUYXNrUG9vbCBvYmplY3QuIFdlIGRvbid0IG5lZWQgdGhlIGNyZWF0ZSBhbmQgam9pbgotCSAgY2FsbGJhY2tzIGFueW1vcmUsIHRoZXkgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBwb29sLgotCi0yMDA5LTA0LTIwIDE3OjA3OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFzay5jOgotCSAgR3N0VGFzazogYWRkIHByaXZhdGUgZGF0YSwgZml4IHBhcmVudF9jbGFzcwotCSAgVXNlIHRoZSBwYXJlbnQgY2xhc3MgdGhhdCB0aGUgZ2xpYiBtYWNybyBnYXZlIHVzCi0JICBBY3R1YWxseSBhZGQgdGhlIHByaXZhdGUgZGF0YSB0byB0aGUgdGFzay4KLQotMjAwOS0wNC0yMCAxNzoxOToyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIEdzdFRhc2s6IGhvb2sgdXAgZW50ZXIvbGVhdmUvbm90aWZ5IGNhbGxiYWNrcwotCSAgSG9vcCB1cCB0aGUgbm90aWZ5L2VudGVyL2xlYXZlIGNhbGxiYWNrcy4KLQotMjAwOS0wNS0xMSAyMzoyMzoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBkZWZzOiBhZGQgbmV3IHN5bWJvbCB0byBkZWZzIGZpbGUKLQotMjAwOS0wNS0xMSAyMzoxOTo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YXNrLmM6Ci0JKiBnc3QvZ3N0dGFzay5oOgotCSAgR3N0VGFzazogYWxsb3cgc2V0dGluZyBjYWxsYmFja3MKLQkgIEFsbG93IHNldHRpbmcgdGhyZWFkIGNhbGxiYWNrcyB0aGF0IHdpbGwgYWxsb3cgdXMgdG8gY29udHJvbCB0aGUgdGhyZWFkcyB1c2VkIGJ5Ci0JICB0aGUgdGFzay4KLQotMjAwOS0wNC0yMyAxOTo0MDoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBiYXNlc3JjOiBkb24ndCBpZ25vcmUgcGFkX3N0YXJ0IHJldHVybiB2YWx1ZQotCi0yMDA5LTA0LTIxIDEzOjM0OjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1zdHJlYW0tc3RhdHVzLnR4dDoKLQkgIGRlc2lnbjogbW9yZSBTVFJFQU1fU1RBVFVTIHVwZGF0ZXMKLQkgIFBhc3MgdGhlIHRocmVhZCBvYmplY3QgaW4gYSBHVmFsdWUsIHdoaWNoIHdvdWxkIGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBmaWd1cmUKLQkgIG91dCB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGluc3RlYWQgb2YgdXMgaGF2aW5nIHRvIGV4cGxpY2l0bHkgY29kZSBpdCBpbiBhCi0JICBtZXNzYWdlIGZpZWxkLgotCi0yMDA5LTA0LTIxIDA5OjQ1OjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1zdHJlYW0tc3RhdHVzLnR4dDoKLQkgIGRlc2lnbjogdXBkYXRlIHN0cmVhbS1zdGF0dXMgZG9jdW1lbnQgc29tZSBtb3JlCi0KLTIwMDktMDQtMjAgMTU6NTU6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXN0cmVhbS1zdGF0dXMudHh0OgotCSAgZGVzaWduOiBhZGQgZmlyc3QgdmVyc2lvbiBvZiBzdHJlYW0tc3RhdHVzCi0JICBBZGQgdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIFNUUkVBTV9TVEFUVVMgbWVzc2FnZSBkZXNpZ24gZG9jcy4KLQkgIFRoaXMgbWVzc2FnZSB3aWxsIGJlIHVzZWQgdG8gZ2l2ZSBhcHBsaWNhdGlvbnMgbW9yZSBjb250cm9sIG92ZXIgdGhlCi0JICBzdHJlYW1pbmcgdGhyZWFkcy4KLQotMjAwOS0wNC0yMSAxNzo1MzowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIEdzdFRhc2s6IGFkZCBzb21lIG1vcmUgZG9jcwotCi0yMDA5LTA0LTIxIDE3OjE0OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBHc3RQYWQ6IHVzZSBuZXcgdGFzayBmdW5jdGlvbgotCSAgVXNlIHRoZSBuZXcgdGFza19zZXRfc3RhdGUgZnVuY3Rpb24gYW5kIGFjdHVhbGx5IHJldHVybiBpdHMgcmVzdWx0IHRvCi0JICB0aGUgY2FsbGVyLgotCi0yMDA5LTA1LTExIDIyOjU5OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrLmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEdzdFRhc2s6IHVuaWZ5IHRhc2sgc3RhdGUgZnVuY3Rpb25zCi0JICBBZGQgbmV3IGdzdF90YXNrX3NldF9zdGF0ZSgpIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHRhc2sgaW5zdGVhZCBvZgotCSAgZHVwbGljYXRpbmcgdGhlIGNvZGUgaW4gZWFjaCBmdW5jdGlvbi4KLQkgIEFQSTogR3N0VGFzazo6Z3N0X3Rhc2tfc2V0X3N0YXRlKCkKLQotMjAwOS0wNC0yMSAxMzozNzoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIE1lc3NhZ2U6IHNtYWxsIGluZGVudGF0aW9uIGNoYW5nZS4KLQotMjAwOS0wNS0wMiAxNDo0MzoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIEF2b2lkIHVubmVlZGVkIHR5cGUgY2hlY2tzCi0KLTIwMDktMDUtMDIgMTQ6Mzk6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGF2b2lkIGNhbGxpbmcgX2dldF9uYW1lKCkgdG9vIG11Y2gKLQkgIEF2b2lkIGNhbGxpbmcgZ3N0X3BsdWdpbl9nZXRfbmFtZSgpIHRvbyBtYW55IHRpbWVzIGJ1dCBpbnN0ZWFkIGNhY2hlCi0JICB0aGUgdmFsdWUuCi0KLTIwMDktMDUtMDIgMTQ6MzY6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIFVzZSBuZXcgX3JlZl9zaW5rIHdoZW4gd2UgY2FuCi0KLTIwMDktMDUtMDIgMTQ6MzM6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGdzdG9iamVjdDogYWRkIGdzdF9vYmplY3RfcmVmX3NpbmsKLQkgIEFkZCB0aGUgZ3N0X29iamVjdF9yZWZfc2luaygpIG1ldGhvZCB0byBtYXRjaCB0aGUgZ2xpYiBvbmUuCi0JICBBUEk6IEdzdE9iamVjdDo6Z3N0X29iamVjdF9yZWZfc2luaygpCi0KLTIwMDktMDUtMDIgMTM6MDY6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGdzdG9iamVjdDogYXZvaWQgdHlwZSBjaGVja3MKLQotMjAwOS0wNS0wMiAxMzowMjoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgZ3N0YnVmZmVyOiBhdm9pZCB0eXBlY2hlY2tzIGluIGZpbmFsaXplCi0JICBBdm9pZCB1c2VsZXNzIHR5cGVjaGVja2luZyBpbiB0aGUgZmluYWxpemUgb2YgYnVmZmVycyBhbmQgc3ViYnVmZmVycy4KLQotMjAwOS0wNS0wMiAxMjo1OTo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgZmFrZXNpbms6IGF2b2lkIHR5cGVjaGVjawotCi0yMDA5LTA0LTIwIDE0OjAxOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICAtbGF1bmNoOiBjb25uZWN0IHRvIGRlZXAtbm90aWZ5IHdpdGggcmlnaHQgbmFtZQotCSAgQ29ubmVjdCB0byB0aGUgcmlnaHQgc2lnbmFsIG5hbWUgd2l0aCAtIGluc3RlYWQgb2YgXy4KLQotMjAwOS0wNC0yNCAyMjowNjoxOSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogU3VwcG9ydCBuZXcgcHJpbnRmIGV4dGVuc2lvbnMgaW4gZ2xpYmMgMi4xMAotCSAgVGhlIHByaW50ZiBleHRlbnNpb24gbWVjaGFuaXNtIGNoYW5nZWQgaW4gZ2xpYmMgMi4xMCwgYW5kIHRoZSBvbGRlcgotCSAgcmVnaXN0ZXJfcHJpbnRmX2Z1bmN0aW9uIGlzIGRlcHJlY2F0ZWQuIERldGVjdCBhbmQgdXNlIHRoZSBuZXcKLQkgIG1lY2hhbmlzbSB3aGVyZSBhdmFpbGFibGUuCi0KLTIwMDktMDQtMjAgMTI6MjU6NTcgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIGRvY3M6IEZpeCBhIHR5cG8gaW4gdGhlIHJlbGVhc2Ugc2NyaXB0Ci0KLTIwMDktMDUtMTEgMjE6MTE6NDkgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudCAtPiAwLjEwLjIzLjEKLQotPT09IHJlbGVhc2UgMC4xMC4yMyA9PT0KLQotMjAwOS0wNS0xMCAyMjo0MTowNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFJlbGVhc2UgMC4xMC4yMwotCi0yMDA5LTA1LTEwIDIyOjM4OjQ1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA5LTA1LTA2IDE2OjEwOjExICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMjIuNCBwcmUtcmVsZWFzZQotCi0yMDA5LTA0LTI0IDE5OjM2OjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBHc3RCaW46IHNldCBQRU5ESU5HX1NUQVRFIGNvcnJlY3RseQotCSAgU2V0IHRoZSBwZW5kaW5nIHN0YXRlIGNvcnJlY3RseSB3aGVuIHdlIGFyZSBnb2luZyB0byBwZXJmb3JtIGFuIGFzeW5jCi0JICBzdGF0ZV9jb250aW51ZSBvbiB0aGUgYmluLgotCSAgRml4ZXMgIzU4MDEyMQotCi0yMDA5LTA0LTIxIDIwOjUwOjU1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIDAuMTAuMjIuMyBwcmUtcmVsZWFzZQotCi0yMDA5LTA0LTIxIDIyOjEyOjA0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBiMzk0MWVhIHRvIDZhYjExZDEKLQotMjAwOS0wNC0xNyAxNTo0Njo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHdpbjMyOiBkZWZpbmUgX19NU1ZDUlRfVkVSU0lPTl9fIHdoZW4gY29tcGlsaW5nIHdpdGggTWluZ1csIGZvciBfX3N0YXQ2NAotCSAgTmVlZCB0byBkZWZpbmUgdGhpcyB3aGVuIHVzaW5nIE1pbmdXLCBzbyB0aGF0IHRoZSBpbmNsdWRlcyBwcm92aWRlCi0JICBfX3N0YXQ2NCBhbmQgZnJpZW5kcy4gV2UgbmVlZCBhdCBsZWFzdCBXaW5kb3dzIFhQIFNQMiBmb3IgdGhpcy4KLQkgIEZpeGVzICM1Njg2MzIuCi0KLTIwMDktMDQtMTYgMjI6MjY6MDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkqIGdzdC9nc3RpbmZvLmg6Ci0JICBnc3RkZWJ1ZzogY29tcGV0ZSBzdHVicy4gRml4ZXMgIzU3OTE3Ny4KLQkgIEF2b2lkIGRlZmluZXMgd2hlbiBpbmNsdWRpbmcgZ3N0aW5mby5oIG91cnNlbGYgYW5kIGNvbXBsZXRlIHN0dWJzLiBTeW5jIHN0dWIKLQkgIHJldHVybnMgd2l0aCB0aGUgZGVmaW5lcy4KLQotMjAwOS0wNC0xNyAxMTo0NDoxMSArMDEwMCAgWWFha292IFNlbGtvd2l0eiA8eXNlbGtvd2l0ekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogZm9yaygpIGR1cmluZyByZWdpc3RyeSBzY2FubmluZyBpcyB1bnNhZmUgb24gQ3lnd2luCi0JICBGaXhlcyAjNTU1OTc4LgotCi0yMDA5LTA0LTE3IDExOjM5OjU5ICswMTAwICBZYWFrb3YgU2Vsa293aXR6IDx5c2Vsa293aXR6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L2dzdC5jOgotCSAgZ3N0X2luaXQ6IHJlbG9jYXRhYmlsaXR5IGlzIHVubmVjZXNzYXJ5IG9uIEN5Z3dpbgotCSAgU2VlICM1NTU5NzguCi0KLTIwMDktMDQtMTcgMTA6MTE6MjEgKzAxMDAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLQotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGdzdGluZm86IGRvbid0IGFzc3VtZSBHX0hBVkVfSVNPX1ZBUkFSR1MgaW1wbGllcyBJU08gQzk5Ci0JICBNYWtlcyBoZWFkZXJzIEMrKyBjbGVhbiwgZXNwLiB3aXRoIHRoZSBTdW4gY29tcGlsZXJzLgotCSAgRml4ZXMgIzU2NzY5Mi4KLQotMjAwOS0wNC0xNyAwOToxNzo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIEdzdFBsdWdpbjogZml4IGNvbXBpbGF0aW9uIGlmIGJvdGggSEFWRV9XSU4zMiBhbmQgSEFWRV9TSUdBQ1RJT04gYXJlIGRlZmluZWQKLQkgIE1vdmUgX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9pc19zZXR1cCBpbnRvIHRoZSBpZmRlZiBibG9jayB3aGVyZSBpdCdzCi0JICB1c2VkLiBGaXhlcyAjNTc4MjAxLgotCi0yMDA5LTA0LTE2IDEyOjAxOjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICAtbGF1bmNoOiBkaXNhYmxlIENMT0NLX0xPU1QgbWVzc2FnZSBoYW5kbGluZwotCSAgRGlzYWJsZSB0aGUgaGFuZGxpbmcgb2YgdGhlIENMT0NLX0xPU1QgbWVzc2FnZXMgdW50aWwgd2UgZml4ZWQgYW5kIHJlbGVhc2VkIHRoZQotCSAgZWxlbWVudHMgKHJ0c3BzcmMpIHRoYXQgYnJlYWsgd2hlbiB3ZSBxdWlja2x5IFBBVVNFL1BMQVkgdGhlIHBpcGVsaW5lLgotCSAgRml4ZXMgIzU3OTEyNwotCi0yMDA5LTA0LTE1IDIyOjI0OjQ1ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbGVhc2U6IEJ1bXAgdmVyc2lvbiB0byAwLjEwLjIyLjIgZm9yIHByZS1yZWxlYXNlCi0KLTIwMDktMDQtMTYgMDA6MDg6MjAgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIHdpbjMyOiBVcGRhdGUgd2luMzIgYnVpbGQgZmlsZXMKLQotMjAwOS0wNC0xNSAyMzoyNzozMSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmUucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9ydy5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zIGZyb20gVFAKLQotMjAwOS0wNC0xNSAyMjoxNzoxMCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBDaGFuZ2VMb2c6IHJlZ2VuZXJhdGUgY2hhbmdlbG9nIHdpdGggdGhlIGdlbi1jaGFuZ2Vsb2cgc2NyaXB0Ci0KLTIwMDktMDQtMTUgMjM6MjY6MTMgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBkb2NzOiByZW1vdmUgZXJyYW50IGd0ay1kb2MgY29tbWVudCBtYXJrZXIgdHJpZ2dlcmluZyBhIHdhcm5pbmcKLQotMjAwOS0wNC0xNiAwMDowMjowNyArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKLQkqIGdzdC9nc3RwYXJhbXNwZWNzLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIHBhcmFtc3BlY3M6IHJldmVydCBnc3RfcGFyYW1fc3BlY19pc19tdXRhYmxlKCkgZm9yIHJlbGVhc2UKLQkgIFJldmVydCB0aGUgZ3N0X3BhcmFtX3NwZWNfaXNfbXV0YWJsZSBBUEkgZm9yIHRoaXMgcmVsZWFzZSBzbyB3ZSBjYW4KLQkgIGRpc2N1c3MgaXQgYSBiaXQgZnVydGhlciBmaXJzdC4KLQotMjAwOS0wNC0xNSAyMzozMzoyMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIGxvZ2dpbmc6IGZpeCB1bnVzZWQgdmFyaWFibGUgd2FybmluZyB3aGVuIGRpc2FibGluZyBkZWJ1ZyBsb2dzLgotCSAgVGhlIHZhciB3YXMgTlVMTCBhbnl3YXksIGJhY2F1c2Ugb2YgdGhlIGlmZGVmcyB0aGVyZSwgdGhlIG1lc3NhZ2UgbWFrZXMgbm8KLQkgIHNlbnNlIGluY2x1ZGluZyBpdC4KLQotMjAwOS0wNC0xNSAyMzoxMjoxMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGdzdGRlYnVnOiBzaG93IGVuYWJsZWQvZGlzYWJsZWQgaW4gY29uZmlndXJlIGFuZCBmaXggYnVpbGQgZm9yIGRpc2FibGVkCi0JICBXaGVuIGl0cyBkaXNhYmxlZCwgd2UgcG9pc29uIHNvbWUgc3ltYm9scyB0byBmb3JjZSBhIGJ1aWxkIGVycm9yIGlmIHRoZXkgYXJlCi0JICB1c2VkLiBEdW5ubyBob3cgdXNlZnVsIHRoaXMgYWN1YWxseSBpcywgYnV0IHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgcG9pc29uaW5nCi0JICB3aGVuIHdlIGluY2x1ZGUgdGhpcyBvdXJzZWxmLiBBbHNvIGRvbid0IGRlZmluZSBzb21lIG9mIHRoZSBkdW1taWVzLCBhcyB0aGV5Ci0JICBhcmUgZ2V0dGluZyByZXBsYWNlZCB3aXRoIGRlZmluZXMgYW5kIHRoYXQgY3JlYXRlcyBjb2RlIHRoYXQgZG9lcyBub3QgY29tcGlsZS4KLQotMjAwOS0wNC0xNSAxOTo1ODozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkgIFVzZSBnX29uY2VfaW5pdF8qKCkgaW5zdGVhZCBvZiBHT25jZSBmb3IgdGhlIGVudW0gdHlwZXMKLQotMjAwOS0wNC0xNSAxMzowNToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSAgc3RhdGljcGFkdGVtcGxhdGU6IFVwZGF0ZSBkb2NzIG9mIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICgpCi0JICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAoKSBhY3R1YWxseSByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZQotCSAgY2FwcyBhbmQgaXQncyBjbGVhbmVyIHRvIHVucmVmIHRoZW0gYWZ0ZXIgdXNhZ2UuIFRoZSBjb3JlIHdpbGwsIGhvd2V2ZXIsCi0JICBhbHdheXMgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgY2FwcyBzbyB0aGlzIGRpZG4ndCByZXN1bHQgaW4gYSBtZW1vcnkKLQkgIGxlYWsuCi0KLTIwMDktMDQtMTQgMjI6MzI6MjEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiBnc3QvZ3N0cGFyYW1zcGVjcy5jOgotCSAgZG9jczogdXNlIHJlYWwgPG5vdGU+IHRhZ3MgYXMgdGhleSBsb29rIG5pY2UgaW4gbmV3IGd0ay1kb2MKLQotMjAwOS0wNC0xNCAxMjoyMDozNyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nc3RwYXJhbXNwZWNzLmM6Ci0JICBGaXggbG9ja2luZyBpbiBnc3RfcGFyYW1fc3BlY19pc19tdXRhYmxlCi0KLTIwMDktMDQtMTQgMjI6MDc6MzggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkgIGNvbnRyb2xsZXI6IGZhY3RvciBvdXQgZHVwbGljYXRlZCBjb2RlIGFuZCBhZGQgYSBkZXNjcmlwdGlvbiBmb3IgaXQuCi0JICBBbHNvIGZpeCB0eXBvIGluIHRoZSB0ZXN0cyB3aGlsZSByZXZpZXdpbmcgdGhlbS4KLQotMjAwOS0wNC0xNCAxOToxMjo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6Ci0JICBkb2NzOiBhZGQgc2ltcGxlIGRvYyBibHVyYgotCi0yMDA5LTA0LTE0IDE5OjExOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFyYW1zcGVjcy5jOgotCSAgcGFyYW1zcGVjczogYWRkIG5vdGUgYWJvdXQgcmFjeW5lc3MKLQkgIEFkZCBhIG5vdGUgYWJvdXQgcG90ZW50aWFsIHJhY3luZXNzIGluIF9pc19tdXRhYmxlKCkuCi0KLTIwMDktMDQtMTQgMTA6MzI6MDcgKzAyMDAgIExSTiA8bHJuMTk4NiBhdCBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JICBpbmZvOiB1c2UgbXV0ZXggdG8gZG8gY29uc29sZSBjb2xvcnMgb24gd2luZG93cwotCSAgVXNlIGEgc3RhdGljIG11dGV4IHRvIGtlZXAgdGhlIGNvbnNvbGUgY29sb3JzIGFuZCBjb250ZXh0IHRvZ2V0aGVyIHdoZW4KLQkgIGRlYnVnZ2luZyB3aXRoIGNvbG9ycyBvbiBXaW5kb3dzLgotCSAgRml4ZXMgIzUxNzIzMS4KLQotMjAwOS0wNC0xMyAxNDoyNzo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYXJhbXNwZWNzLmM6Ci0JKiBnc3QvZ3N0cGFyYW1zcGVjcy5oOgotCSAgZG9jczogYWRkIFNpbmNlOiB0YWdzIHRvIGd0ay1kb2MgY2h1bmtzIGZvciBuZXcgcGFyYW0gc3BlYyBBUEkKLQkgIEFuZCwgZm9yIG91ciByZWxlYXNlIG1hbmFnZXIsIHRoZSBpbi1jb21taXQtbWVzc2FnZSBrZXl3b3JkcwotCSAgZm9yIHRoZSBwcmV2aW91cyBjb21taXQ6Ci0JICBBUEk6IEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZCi0JICBBUEk6IEdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRAotCSAgQVBJOiBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HCi0JICBBUEk6IGdzdF9wYXJhbV9zcGVjX2lzX211dGFibGUKLQotMjAwOS0wMi0yMCAxMTowOToxOSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cGFyYW1zcGVjcy5jOgotCSogZ3N0L2dzdHBhcmFtc3BlY3MuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSAgQWRkIHBhcmFtIHNwZWMgZmxhZ3MgZm9yIHdoZW4gYSBwcm9wZXJ0eSBjYW4gYmUgY2hhbmdlZAotCSAgQWRkcyBHU1RfUEFSQU1fTVVUQUJMRSogZmxhZ3MgdG8gaW5kaWNhdGUgaW4gd2hpY2ggc3RhdGVzIGEKLQkgIHByb3BlcnR5IGNhbiBiZSBjaGFuZ2VkIGFuZCB0YWtlIGVmZmVjdC4gIEZpeGVzICM1NzE1NTkKLQotMjAwOS0wNC0xMCAxNDoxNTozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgLWxhdW5jaDogaGFuZGxlIGNsb2NrLWxvc3QgbWVzc2FnZXMKLQkgIFdoZW4gd2UgcmVjZWl2ZSBhIGNsb2NrLWxvc3QgbWVzc2FnZSwgd2UgbmVlZCB0byBzZWxlY3QgYSBuZXcgY2xvY2sgaW4gdGhlCi0JICBwaXBlbGluZSBieSBzZXR0aW5nIHRoZSBwaXBlbGluZSB0byBQQVVTRUQgYW5kIGJhY2sgdG8gUExBWUlORy4KLQotMjAwOS0wNC0wOSAxODoyNzoyMSArMDIwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3Rlci5jYT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIHRlZTogYWRkIHByb3BlcnR5IHRvIGNvbnRyb2wgdGhlIGFsbG9jIHBhZAotCSAgQWRkIGEgcHJvcGVydHkgdG8gY29udHJvbCB0aGUgcGFkIHVzZWQgZm9yIHByb3h5aW5nIHRoZSBidWZmZXJfYWxsb2MgZnVuY3Rpb24gb24KLQkgIHRoZSBzaW5rcGFkLgotCSAgRml4ZXMgIzU3Nzg5MS4KLQotMjAwOS0wNC0wOSAxMTo1MTo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgYmluOiBhbHdheXMgbWFyayBwZW5kaW5nX2FzeW5jX2RvbmUKLQkgIFdoZW4gd2UgZ2V0IGFuIEFTWU5DX0RPTkUgbWVzc2FnZSB3aGVuIGEgc3RhdGUgY2hhbmdlIHdhcyBidXN5LCBzZXQgdGhlCi0JICBwZW5kaW5nX2FzeW5jX2RvbmUgZmxhZyBzbyB0aGF0IGFmdGVyIHRoZSBzdGF0ZSBjaGFuZ2UgY29tcGxldGVzLCB0aGUgYmluIGNhbgotCSAgY2hlY2sgaWYgYWxsIGFzeW5jIGVsZW1lbnRzIGFyZSBmaW5pc2hlZC4gRG9uJ3Qgb25seSBkbyB0aGlzIGZvciB0aGUgYmluIGl0c2VsZgotCSAgYnV0IGZvciBhbGwgZWxlbWVudHMuCi0JICBUaGlzIGZpeGVzIHNvbWUgYmlucyBpbiBiaW5zIHRoYXQgc2ltdWxhdGUgYXN5bmMgc3RhdGUgY2hhbmdlcyBieSBwb3N0aW5nIEFTWU5DCi0JICBtZXNzYWdlcyAoc3VjaCBhcyBzZHBwYXJzZSBpbiB1cmlkZWNvZGViaW4vcGxheWJpbjIpLgotCi0yMDA5LTA0LTA5IDExOjQyOjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogZml4IGNvbXBpbGF0aW9uLCAlMDh4IG5lZWRzIGFuIHVuc2lnbmVkIGludAotCSAgJTA4eCBuZWVkcyBhbiB1bnNpZ25lZCBpbnQsIHNvIGdpdmUgaXQgdGhhdC4KLQotMjAwOS0wNC0wNiAwMToyNzoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEFQSTogYWRkIEZJWE1FIGFuZCBEVU1QTUVNIGxvZyBsZXZlbHMgYW5kIGNvbnZlbmllbmNlIG1hY3JvcwotCSAgVHdvIG5ldyBsb2cgbGV2ZWxzIHRvIGR1bXAgRklYTUVzIGludG8gdGhlIGxvZyBhbmQgdG8gbG9nIGRhdGEKLQkgIGluIGZvcm0gb2YgYSBoZXggZHVtcCAoIzU3ODExNCkuCi0JICBBUEk6IEdTVF9DQVRfRklYTUVfT0JKRUNUCi0JICBBUEk6IEdTVF9DQVRfTUVNRFVNUF9PQkpFQ1QKLQkgIEFQSTogR1NUX0NBVF9GSVhNRQotCSAgQVBJOiBHU1RfQ0FUX01FTURVTVAKLQkgIEFQSTogR1NUX0ZJWE1FX09CSkVDVAotCSAgQVBJOiBHU1RfTUVNRFVNUF9PQkpFQ1QKLQkgIEFQSTogR1NUX0ZJWE1FCi0JICBBUEk6IEdTVF9NRU1EVU1QCi0KLTIwMDktMDQtMDggMTg6MTM6NDIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JICBkb2NzOiB4cmVmIG1vcmUKLQotMjAwOS0wNC0wOCAxNzo0OToxOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgdGVzdHM6IHJlbW92ZSB0aGUgaGFja3MgdG8gd29ya2Fyb3VuZCB0aGUgcGFkLWxlYWsKLQotMjAwOS0wNC0wOCAxNToyNDo1OCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIHBhZHRlbXBsYXRlOiBlbmFibGUgY29kZSB0byBmaXggdGhlIGxlYWssIG5vdyB0aGF0IHRoZSBkZXBzIGhhdmUgYmVlbiByZWxlYXNlZAotCSAgR29vZCBhbmQgZmZtcGVnIGFyZSBhY3R1YWxseSBtdWx0aXBsZSByZWxlYXNlcyBiZXlvbmQsIHNvIHRoYXQgdGhpcyBpcyBub3cgc2FmZQotCSAgdG8gZG8uCi0KLTIwMDktMDQtMDQgMjE6MTg6MjMgKzAzMDAgIEZlbGlwZSBDb250cmVyYXMgPGZlbGlwZS5jb250cmVyYXNAZ21haWwuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZDBlYTg5ZSB0byBiMzk0MWVhCi0KLTIwMDktMDQtMDQgMTQ6NTM6MjEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBmOGIzZDkxIHRvIGQwZWE4OWUKLQotMjAwOS0wNC0wNCAxNDo0MjowNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIGdzdC1pbnNwZWN0OiByZW1vdmUgZGVhZCBhc3NpZ25tZW50Ci0JICBmaXJzdF9mbGFnIHdpbGwgYmUgZWl0aGVyOgotCSAgKiByZXdyaXR0ZW4gd2l0aG91dCBiZWluZyByZWFkIGlmIHdlIGxvb3AgYWdhaW4gKGxpbmUgMjg0KQotCSAgKiBub3QgcmVhZCBhZ2FpbiBpZiB3ZSBkb24ndCBsb29wCi0KLTIwMDktMDQtMDQgMTQ6Mzk6NTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGJhc2VzaW5rOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cy4KLQkgIHNzdGFydC9zc3RvcC9yc3RhcnQvcnN0b3AgYXJlIGFsbCBlaXRoZXI6Ci0JICAqIGFzc2lnbmVkIHZhbHVlcyBsYXRlciBvbiBiZWZvcmUgYmVpbmcgdXNlZCBpbiAnZG9fdGltZXM6JyAoRU9TIGFuZCBidWZmZXJzKQotCSAgKiBub3QgdXNlZCAobm9uLUVPUyBldmVudHMpCi0KLTIwMDktMDQtMDQgMTQ6Mzg6NTIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgYmFzZXNyYzogcmVtb3ZlIGRlYWQgYXNzaWdubWVudC4KLQkgIFRoZSB2YXJpYWJsZSB3aWxsIG5vdCBiZSByZWFkIGJlZm9yZSBpdCdzIGFzc2lnbmVkIGEgdmFsdWUgbGluZSA5NDIvOTQ1Ci0KLTIwMDktMDQtMDQgMTQ6Mzc6MTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICBnc3R0YWdsaXN0OiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgotCSAgV2UgZG9uJ3QgbmVlZCB0byBhbGxvY2F0ZSBhIHZhcmlhYmxlIGlmIGl0J3MgdGhlIHJldHVybiBvZiBhIGZ1bmN0aW9uIGNhbGwKLQkgIGFuZCB3ZSBvbmx5IGNoZWNrIGl0IG9uY2UuCi0KLTIwMDktMDQtMDQgMTQ6MzU6MzQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGdzdHN0cnVjdHVyZTogT25seSB1c2UgbWV0aG9kcyB1c2VkIGluIGdfKiBjaGVja3MgaWYgZ2xpYiBjaGVja3MgYXJlIGRpc2FibGVkCi0KLTIwMDktMDQtMDQgMTA6NTk6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgZ3N0OiBVc2UgZ19vbmNlX2luaXQqIG9yIEdfREVGSU5FX1RZUEUKLQotMjAwOS0wNC0wNCAxMDoyMDozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RpbmRleC5jOgotCSogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGludGVyZmFjZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkqIGdzdC9nc3R1cmkuYzoKLQkqIGdzdC9nc3R4bWwuYzoKLQkgIGdzdDogVXNlIEdfREVGSU5FX1RZUEUgYW5kIGZyaWVuZHMgb3IgYXQgbGVhc3QgZ19vbmNlX2luaXRfKiBpbiB0aGUgX2dldF90eXBlKCkgZnVuY3Rpb25zCi0KLTIwMDktMDQtMDQgMTA6MTg6NDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkgIGdzdDogVXNlIEdfREVGSU5FX1RZUEUgYW5kIGRvbid0IGNhbGwgZ190aHJlYWRfaW5pdCgpIGZyb20gY2xhc3NfaW5pdAotCSAgY2xhc3NfaW5pdCBpcyB0b28gbGF0ZSBmb3IgY2FsbGluZyBnX3RocmVhZF9pbml0KCkgYXMgZ190aHJlYWRfaW5pdCgpCi0JICBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGFueSBHT2JqZWN0IGZ1bmN0aW9uLgotCi0yMDA5LTA0LTAzIDEzOjQ2OjE4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIFVzZSBnX3NsaWNlX2NvcHkgaW5zdGVhZCBvZiBnX3NsaWNlX2R1cC4KLQkgIEEgKGJ1Z2d5KSBnbGliIGdfc2xpY2VfZHVwIG1hY3JvIG1heSBjYXVzZSBjb21waWxlciB3YXJuaW5ncyBvbiBlLmcuIHg4Nl82NC4KLQotMjAwOS0wNC0wMyAxMjoyMTo1NSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICBjb250cm9sbGVyOiByZW1vdmUgZGVhZCBhc3NpZ25tZW50LgotCSAgVGhlIHZhbHVlIG9mIHByb3AgaXMgYmVpbmcgb3ZlcndyaXR0ZW4ganVzdCBhZnRlciB3aXRob3V0IGJlaW5nIHJlYWQuCi0KLTIwMDktMDQtMDMgMTI6MjA6MzYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGdzdHN0cnVjdHVyZTogUmVtb3ZlIGRlYWQgYXNzaWdubWVudC4KLQkgICd0eXBlJyBpcyBuZXZlciB1c2VkIHVudGlsIGxpbmUgMTg0NyB3aGVyZSBpdCdzIG92ZXJ3cml0dGVuLgotCi0yMDA5LTA0LTAzIDEyOjE5OjQwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIGFkYXB0ZXI6IHJlbW92ZSBkZWFkIGFzc2lnbm1lbnQuCi0JICBUaGUgdmFsdWUgc2V0IHRvIHRvX2NvcHkgYXQgdGhhdCBsaW5lIGlzIG5ldmVyIHVzZWQsIGFuZCBpcyBvdmVyd3JpdHRlbgotCSAgZnVydGhlciBkb3duIGJlZm9yZSBiZWluZyByZWFkLgotCi0yMDA5LTA0LTAzIDEyOjE3OjMzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZ3N0YmluLmM6Ci0JICBnc3RiaW46IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCi0JICBUaGUgcmV0dXJuIHZhbHVlIG9mIGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSBpc24ndCB1c2VkIGFmdGVyIHRoYXQgY2FsbC4KLQotMjAwOS0wNC0wMyAxMjoxNTozOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBwaXBlbGluZTogcmVtb3ZlIHJlZHVuZGFudCBhc3NpZ25tZW50LgotCSAgSWYgdGhhdCBibG9jayBpcyBlbnRlcmVkLCB0aGVuIHN0YXJ0X3RpbWUgYmVjb21lcyBHU1RfQ0xPQ0tfVElNRV9OT05FLgotCSAgU2luY2Ugc3RhcnRfdGltZSBpcyBpbnZhbGlkLCB0aGUgY29kZSB3aWxsIGVudGVyIHRoZSBibG9jayBhdCBsaW5lIDQzNCBhbmQKLQkgIG5ld19iYXNlX3RpbWUgd2lsbCBiZSBzZXQgdGhlcmUuCi0KLTIwMDktMDQtMDMgMTI6MTM6MzggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgZ3N0cmVnaXN0cnliaW5hcnk6IHJlbW92ZSB2YXJpYWJsZSBvbmx5IHVzZWQgZm9yIGEgY2hlY2suCi0JICB0aGF0IHZhcmlhYmxlIGlzbid0IHVzZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhhdCBibG9jay4KLQotMjAwOS0wNC0wMyAxMjoxMzowMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgYmFzZXNpbmsgOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgotCSAgc3luYyBpcyBuZXZlciB1c2VkIGFueXdoZXJlIGluIHRoYXQgY29kZS4KLQotMjAwOS0wNC0wMyAxMjoxMjowOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBiYXNldHJhbnNmb3JtOiBtb3ZlIHVudXNlZCB2YXJpYWJsZSBpbiB0aGUgI2lmIDAgYmxvY2suCi0JICBUaGF0IHZhcmlhYmxlIGlzIG9ubHkgdXNlZCBieSB0aGUgY29kZSB3aGljaCBoYXMgYmVlbiBpZiAwJ2QKLQotMjAwOS0wNC0wMyAxMTo1Njo0OCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICBSZW1vdmUgdW51c2VkIGluY3JlbWVudHMgYXMgZGV0ZWN0IGJ5IExMVk0ncyBDTGFuZyBzdGF0aWMgYW5hbHl6ZXIuCi0KLTIwMDktMDQtMDMgMTE6NTI6NDkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RpbnRlcmZhY2UuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgZGV0ZWN0ZWQgYnkgTExWTSdzIENsYW5nIHN0YXRpYyBhbmFseXplci4KLQotMjAwOS0wNC0wMyAxMToxOTo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBkb2NzOiBpbXByb3ZlIEFQSSByZWZlcmVuY2UgZm9yIGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoKQotCi0yMDA5LTA0LTAyIDEzOjMyOjU4ICswMjAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBnc3QvZ3N0YmluLmg6Ci0JICBkb2NzOiBleHBsYWluIHJlZiBvd25lcnNoaXAgZm9yIGhhbmRsZV9tZXNzYWdlIGltcGxlbWVudGF0aW9ucwotCi0yMDA5LTA0LTAyIDEwOjQzOjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGdzdGNoZWNrOiBDYWxsIGdzdF9jaGVja19pbml0KCkgYmVmb3JlIGNyZWF0aW5nIHRoZSBzdWl0ZQotCSAgVGhpcyBhbGxvd3MgdXNpbmcgdGhlIEdTdHJlYW1lciBvciBHT2JqZWN0IEFQSSBpbiB0aGUgc3VpdGUKLQkgIGNyZWF0aW9uIGZ1bmN0aW9uLgotCi0yMDA5LTAzLTMxIDE4OjE0OjA4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgZ3N0LWxhdW5jaDogRml4ZXMgZXJyb3Igd2hlbiBESVNBQkxFX0ZBVUxUX0hBTkRMRVIgaXMgZGVmaW5lZAotCSAgV2hlbiBkZWZpbmVkLCB0aGlzIG1hY3JvIHByZXZlbnRlZCB0aGUgZGVjbGFyYXRpb24gb2YgJ3dhaXRpbmdfZW9zJywgY2F1c2luZyBhbiBlcnJvci4KLQotMjAwOS0wMy0yNiAxNzoyNTowOCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBjYXBzZmlsdGVyLiBBbHdheXMgY2FsbHMgX3N1Z2dlc3QsIGV2ZW4gd2l0aCBOVUxMIGNhcHMuIEZpeGVzICM1NzQ4MDUKLQotMjAwOS0wMy0zMCAxNTo0NTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6Ci0JICB0ZXN0czogRG9uJ3QgZGVmaW5lIGdsb2JhbCBidWZmZXJzIHZhcmlhYmxlLCBpdCdzIGFscmVhZHkgZGVmaW5lZCBieSBsaWJnc3RjaGVjawotCi0yMDA5LTAzLTMwIDEwOjMzOjUxICswMjAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSogZG9jcy9nc3QvYnVpbGRpbmcueG1sOgotCSAgZG9jczogU29tZSBncmFtbWFyIGFuZCB0eXBvIGNvcnJlY3Rpb25zLgotCi0yMDA5LTAzLTI5IDEzOjQxOjIyICswMjAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYW5hLmFtYW50ZXM+Ci0KLQkqIGRvY3MvZ3N0L2J1aWxkaW5nLnhtbDoKLQkgIEZpeCB0eXBvLgotCi0yMDA5LTAzLTI3IDE3OjMwOjIzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgYmluYXJ5cmVnaXN0cnk6IGluaXQgdmFyaWFibGUsIHRoYXQgaXMgcmVmZXJlbmNlZCBpbiBlcnJvciBjYXNlIGJlbG93IHRoZSBmYWlsOiBsYWJlbAotCi0yMDA5LTAzLTI3IDE2OjE1OjU1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIGNsb2NrOiB3YWtldXAgdGhlIGFzeW5jIHRocmVhZCBhIGJpdCBtb3JlCi0JICBBbHNvIHdha2UgdXAgdGhlIGFzeW5jIHRocmVhZCB3aGVuIGl0IGlzIGRvaW5nIGFuIGFzeW5jIHdhaXQgZm9yIGFuIGVudHJ5LgotCi0yMDA5LTAzLTI3IDE2OjE1OjEwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZWxlbWVudDogRml4IGEgbGl0dGxlIGRlYnVnIG1lc3NhZ2UKLQotMjAwOS0wMy0yNiAxMzowNzo1NiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIGJpbmFyeXJlZ2lzdHJ5OiBjaGVjayBmb3Igbm90IHJlYWRpbmcgYmV5b25kIHRoZSBkYXRhIGFyZWEuIEZpeGVzICM1NzY4NDIKLQkgIENoZWNrIGFsbCByZWFkcyBhZ2FpbnN0IHRoZSBlbmQgb2YgdGhlIGRhdGEgcmVnaW9uLiBSb2xsIGJhY2sgcmVnaXN0cmF0aW9uIG9mCi0JICBwYXJ0aWFsIHJlYWRzLgotCi0yMDA5LTAzLTI1IDExOjAzOjIyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9nc3QvYnVpbGRpbmcueG1sOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgIGRvY3M6IGFkZCBhIHBhZ2UgYWJvdXQgYnVpbGRpbmcgZ3N0cmVhbWVyIGFuZCBhcHBzCi0KLTIwMDktMDMtMjYgMTM6MDg6MDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBBZGRzIGZsYWcgZm9yIGVvcyBvbiBzaHV0ZG93biBpbiBnc3QtbGF1bmNoLiBGaXhlcyAjNTc1ODE0LgotCi0yMDA5LTAzLTI2IDIyOjA1OjMxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgY2xvY2s6IG1ha2UgVU5TQ0hFRFVMRUQgY2hlY2tzIHRocmVhZHNhZmUKLQkgIE1vdmUgdGhlIGNoZWNrcyBmb3IgdXNpbmcgYW4gdW5zY2hlZHVsZWQgZW50cnkgZnJvbSB0aGUgdW5zYWZlIEdzdENsb2NrIHRvIHRoZQotCSAgU3lzdGVtQ2xvY2sgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gdGhlIGNvcnJlY3QgbG9ja2luZy4KLQkgIGZpeCBhIGxlYWsgYW5kIHBvdGVudGlhbCBkZWFkbG9jayB0aGVuIHRoZSBhc3luYyB0aHJlYWQgZmFpbHMgdG8gc3RhcnQuCi0JICBTcHJpbmtsZSBzb21lIEdfTElLRUxZIGFyb3VuZCBiZWNhdXNlIHdlIGNhbi4KLQotMjAwOS0wMy0yNiAyMTo0MDoyMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBjbG9jazogcmVtb3ZlIHBlbmRpbmcgYXN5bmMgd2FrZXVwIHNvb25lcgotCSAgUmVtb3ZlIGEgcGVuZGluZyBhc3luYyB3YWtldXAgYmVmb3JlIHdlIGNoZWNrIGlmIHRoZSBuZXh0IGVudHJ5IGlzIFVOU0NIRURVTEVECi0JICBiZWNhdXNlIHdlIG1pZ2h0IGxlYXZlIHRoZSBjb250cm9sIHNvY2tldCBidXN5LgotCi0yMDA5LTAzLTI2IDE5OjMzOjQxICswMTAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSogZ3N0L2dzdHBvbGwuYzoKLQkgIGdzdHBvbGw6IENvcnJlY3RlZCBhIGRvY3VtZW50YXRpb24gdHlwby4KLQotMjAwOS0wMy0yNiAxOToxMzo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBjbG9jazogYWRkIHNvbWUgbW9yZSBjb21tZW50cy4KLQotMjAwOS0wMy0yNiAxODo0NjozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBjbG9jazogcmV3b3JrIHRoZSB3YWtldXAgb2YgZW50cmllcy4KLQkgIEtlZXAgYSBjb3VudGVyIGZvciB0aGUgYW1vdW50IG9mIG91dHN0YW5kaW5nIHdha2V1cHMgdGhhdCB3ZSBwcm9kdWNlIGFuZCBvbmx5Ci0JICBwZXJmb3JtIGEgd3JpdGUvcmVhZCB0byB0aGUgY29udHJvbCBzb2NrZXQgd2hlbiAxIG9yIDAgcmVzcGVjdGl2ZWx5LgotCSAgZG9uJ3QgcG9sbCB3aGVuIHdhaXRpbmcgZm9yIHRoZSBlbnRyaWVzIHRvIGJlIHVuYmxvY2tlZCBhbmQgY2xlYXIgdGhlaXIgd2FrZXVwCi0JICBjb3VudHMsIGp1c3QgYWN0IG9uIHRoZSBzaWduYWwgd2hlbiB0aGUgd2FrZXVwIGNvdW50IGlzIDAuCi0JICB1bnNjaGVkdWxlZCBlbnRyaWVzIHdpbGwgY2xlYXIgdGhlaXIgd2FrZXVwIGNvdW50IHRoZW1zZWx2ZXMuCi0JICBLZWVwIHRyYWNrIG9mIHdoZW4gd2Ugd2FrZXVwIHRoZSBhc3luYyB0aHJlYWQgYmVjYXVzZSB0aGUgbGlzdCBvZiBlbnRyaWVzIGhhcwotCSAgY2hhbmdlZC4KLQkgIGRvbid0IHRyeSB0byBzZWUgaWYgdGhlIGxpc3QgY2hhbmdlZCBiZWNhdXNlIHdlIGNhbid0IHJlYWxseSBrbm93IHdoZW4gb25lIGVudHJ5Ci0JICBpcyBhZGRlZCBtdWx0aXBsZSB0aW1lcy4KLQkgIE9ubHkgd2FrZSB1cCB0aGUgYXN5bmMgdGhyZWFkIHdoZW4gd2UgYWRkIGFuIGFzeW5jIGVudHJ5IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0Ci0JICBhbmQgdGhlIG9sZCBlbnRyeSB3YXMgQlVTWS4KLQotMjAwOS0wMy0yNSAxNzozMToxNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgZ3N0cG9sbDogRml4IHVwIGRvY3VtZW50YXRpb24gc3RyaW5ncy4KLQkgIE5vdGUgdGhlIGNoYW5nZWQgYmVoYXZpb3VyIG9mIGdzdF9wb2xsX3dhaXQgZm9yIHRpbWVyIEdzdFBvbGwncywgYW5kCi0JICBmaXggYSBjb3VwbGUgb2Ygc3BlbGxpbmcgZXJyb3JzLgotCi0yMDA5LTAzLTI2IDE1OjU1OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgY2xvY2s6IGZpeCAyIHdha2V1cCByYWNlcy4KLQkgIHdoZW4gYW4gZW50cnkgYmVpbmcgd2FpdGVkIG9uIGluIHRoZSBhc3luYyB0aHJlYWQgaXMgdW5zY2hlZHVsZWQsIGNsZWFyIHRoZQotCSAgd2FrZXVwIHF1ZXVlIHNvIHdlIGNhbiBjb250aW51ZSB3YWl0aW5nIG9uIG90aGVyIGVudHJpZXMuCi0JICBXaGVuIGFuIGVudHJ5IGJlaW5nIHdhaXRlZCBvbiBpbiB0aGUgYXN5bmMgdGhyZWFkIGlzIHVubG9ja2VkIGJlY2F1c2UgYW4gZWFybGllcgotCSAgZW50cnkgd2FzIGFkZGVkIHRvIHRoZSBsaXN0LCBzZXQgdGhlIGVudHJ5IHRvIE9LIGFnYWluLiBUaGlzIG1ha2VzIHN1cmUgdGhhdAotCSAgb25seSB0aGUgZW50cmllcyBiZWluZyB3YWl0ZWQgb24gaGF2ZSB0aGUgQlVTWSBmbGFnIHNldCBhbmQgd2FrZSB1cCB0aGUgdGltZXIKLQkgIHBvbGwgd2hlbiB0aGV5IGFyZSB1bnNjaGVkdWxlZC4KLQotMjAwOS0wMy0yNiAxNDo0NDowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgcmVnaXN0cnk6IGlnbm9yZSAuZ2l0IGRpcmVjdG9yeSB3aGVuIHJlY3Vyc2l2ZWx5IHNjYW5uaW5nIHBsdWdpbiBwYXRocyBmb3IgcGx1Z2lucwotCSAgU2F2ZXMgc29tZSBjeWNsZXMvcGFuZGFzIGZvciB0aG9zZSBvZiB1cyB3aG8gcnVuIHVuaW5zdGFsbGVkIHNldHVwcy4KLQotMjAwOS0wMy0yNiAxNDoxNjo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JICByZWdpc3RyeTogZG8gZnN5bmMoKSBiZWZvcmUgY2xvc2UoKSBhbmQgcmVuYW1lKCkKLQkgIFRoaXMgaGVscHMgcHJldmVudCBmaWxlc3lzdGVtL2RhdGEgaW5jb25zaXN0ZW5jaWVzIGluIGNlcnRhaW4KLQkgIGNpcmN1bXN0YW5jZXMgb24gY2VydGFpbiBmaWxlc3lzdGVtcyAobGlrZSBleHQ0LCB4ZnMsIHViaWZzKS4KLQkgIEFsc28gc2VlIGJ1ZyAjNTYyOTc2LgotCi0yMDA5LTAzLTI2IDAxOjA5OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBUEk6IGFkZCBnc3RfdGFnX2xpc3RfZ2V0X2J1ZmZlcntfaW5kZXh9Ci0JICBDb252ZW5pZW5jZSBBUEksIG1vc3RseSBmb3IgaW1hZ2UgdGFncywgc28gcGVvcGxlIGRvbid0IGhhdmUgdG8KLQkgIGZpZ3VyZSBvdXQgdGhlIHdob2xlIEdWYWx1ZS9Hc3RWYWx1ZSB0aGluZyBqdXN0IGZvciB0aGlzLgotCi0yMDA5LTAzLTI1IDIzOjAzOjM4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgc3lzdGVtY2xvY2s6IENsZWFuIHVwIHRoZSB0ZXN0cyBhIGJpdC4KLQkgIEFkZCBzb21lIGNsZWFudXBzIHRvIHRoZSBzeXN0ZW0gY2xvY2sgdGVzdHMsIHRvIGZyZWUgYWxsIHRoZSBtZW1vcnkgYW5kCi0JICB1bnNjaGVkdWxlL3VucmVmIGFsbCBjbG9jayBJRHMgd2UgYWxsb2NhdGUuCi0JICBVc2UgYSBtdXRleCBpbiBvbmUgdGVzdCB0byBhdm9pZCBwb3RlbnRpYWwgdGhyZWFkaW5nIHByb2JsZW1zIG9uIG11bHRpY29yZQotCSAgbWFjaGluZXMuCi0KLTIwMDktMDMtMjUgMjE6Mzc6MzggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBzeXN0ZW1jbG9jazogQWRkIGEgdGVzdCBmb3Igc3luYy9hc3luYyBjbG9ja2lkIGludGVyYWN0aW9ucwotCSAgVGhpcyB0ZXN0IHJhbmRvbWx5IGhhbmdzIGlmIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSByZWxpYWJpbGl0eSBvZgotCSAgdW5zY2hlZHVsaW5nIHN5bmMgYW5kIGFzeW5jIGNsb2NrSUQncyBvbiB0aGUgc3lzdGVtIGNsb2NrLgotCi0yMDA5LTAzLTI2IDExOjE3OjAxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIHNlZ21lbnQ6IFVzZSBnX3NsaWNlX2R1cCgpIG5vdwotCi0yMDA5LTAzLTI2IDExOjA4OjI3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dsaWItY29tcGF0Lmg6Ci0JKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIFJlbW92ZSBzb21lIGNvbXBhdGliaWxpdHkgc3R1ZmYgZm9yIEdMaWIgPCAyLjE0Ci0KLTIwMDktMDMtMjUgMDA6NTA6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICBBUEk6IGFkZCBHU1RfVEFHX1NVQlRJVExFX0NPREVDCi0JICBZZXMsICdjb2RlYycgaXNuJ3QgZXhhY3RseSB0aGUgYmVzdCB3b3JkLCBidXQgbGV0J3MgYmUgY29uc2lzdGVudCB3aXRoIEFVRElPX0NPREVDCi0JICBhbmQgVklERU9fQ09ERUMgKHdoaWNoIG1heSBiZSAncmF3JyBmb3JtYXRzIGFzIHdlbGwgYWZ0ZXIgYWxsKS4gUHJlcmVxdWlzaXRlIGZvcgotCSAgYnVnICAjNTc2NTUyLgotCi0yMDA5LTAzLTI0IDIxOjM5OjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgZG9jczogZ3N0LWxhdW5jaCBtYW4gcGFnZSBmaXgKLQkgIFRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIC0tZ3N0LWRlYnVnLWRpc2FibGUsIG5vdCAtLWdzdC1kaXNhYmxlLWRlYnVnLgotCSAgRml4ZXMgIzU3NjU1Ni4gU3BvdHRlZCBieSBCb2dkYW4gSGFyam9jLgotCi0yMDA5LTAzLTI0IDE5OjMzOjU2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGdzdHV0aWxzOiBpbXByb3ZlIHByb3BlcnR5IHNldCBhbmQgY29udmVydCBjb2RlCi0JICBVc2Ugc3RyaW5nIGRlc2VyaWFsaXNhdGlvbiBpbnN0ZWFkIG9mIGN1c3RvbSBwYXJzaW5nIGNvZGUgdG8gYWxsb3cgZm9yIGFsbAotCSAgc3VwcG9ydGVkIHdheXMgb2Ygc3BlY2lmeWluZyBwcm9wZXJ0eSB2YWx1ZXMuCi0JICBmaXhlcyAjNTc2NTgyLgotCi0yMDA5LTAzLTIzIDE1OjE4OjIxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSAgYnVpbGQ6IGRlZmluZSBzdHVicyB3aGVuIGRpc2FibGluZyBnc3QtZGVidWcgc3Vic3lzdGVtLiBGaXhlcyAjNTc1OTIyCi0JICBSdW5uaW5nIGNvbmZpZ3VyZSB3aXRoIGUuZy4gLS1kaXNhYmxlLWRzdC1kZWJ1ZyB3YXMgY29tcGlsaW5nIG91dCB0aGUgZGVidWcKLQkgIHN5c3RlbSAoQUJJIGJyZWFrKS4gTm93IHN0dWJzIGFyZSBhZGRlZCBhbmQgb25seSBpZiBvbmUgZG9lcyBlLmcuCi0JICBtYWtlIENGTEFHUz0iLURHU1RfUkVNT1ZFX0RJU0FCTEVEIiB0aGUgc3ltYm9scyBhcmUgb21taXR0ZWQuCi0KLTIwMDktMDMtMjMgMTI6MzQ6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBiYXNlc2luazogZml4IG9uY2UtcGVyLXNlY29uZCAnZW1lcmdlbmN5IHJlbmRlcmluZycgZm9yIGNhc2Ugd2hlcmUgYWxsIGJ1ZmZlcnMgYnV0IHRoZSB2ZXJ5IGZpcnN0IGFyZSBsYXRlCi0JICBEdWUgdG8gYSB0eXBvIGJhc2VzaW5rIGRpZG4ndCBkbyBhbnkgZW1lcmdlbmN5IHJlbmRlcmluZyBvZiBsYXRlIGJ1ZmZlcnMKLQkgIGlmIHRoZSBvbmx5IGJ1ZmZlciBldmVyIHJlbmRlcmVkIHdhcyB0aGUgZmlyc3Qgb25lIHdpdGggdGltZXN0YW1wIDAuIFRoaXMKLQkgIG1lYW5zIHRoYXQgaW4gY2FzZXMgd2hlcmUgdGhlIGRlY29kZXIgaXMgdmVyeSB2ZXJ5IHNsb3csIHdlJ2QgbmV2ZXIgc2VlCi0JICBhbnkgYnVmZmVycyBidXQgdGhlIHZlcnkgZmlyc3Qgb25lIHJlbmRlcmVkLiBGaXhlcyAjNTc2MzgxLgotCi0yMDA5LTAzLTIxIDAyOjM0OjA0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JICBkb2NzOiB0d2VhayB0aGUgcmVsZWFzZSBwcm9jZWR1cmUgc2NyaXB0Ci0KLTIwMDktMDMtMjAgMTQ6MTI6NTUgKzAxMDAgIExSTiA8bHJuMTk4NiBhdCBnbWFpbCBkb3QgY29tPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSAgd2luMzI6IGZpeCBzZWVraW5nIGluIGZpbGVzID40R0IKLQkgIFVzZSA2NC1iaXQgZnVuY3Rpb25zIG9uIHdpbmRvd3MgdG8gaW1wbGVtZW50IHNlZWtpbmcgaW4gZmlsZXMgYmlnZ2VyCi0JICB0aGFuIDRHQi4KLQkgIEZpeGVzICM1NzU5ODgKLQotMjAwOS0wMy0yMCAxMToyNjozMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgIGNvbnRyb2xsZXI6IEZpeCBnZW5lcmF0aW9uIG9mIGNvbnRyb2wtY2hhbmdlIGFycmF5cy4KLQkgIFdoZW4gZ2VuZXJhdGluZyBhcnJheXMgb2YgY29udHJvbCBjaGFuZ2VzIHRpbWVzdGFtcCB2YXJpYWJsZSB3YXMgdXNlZCBpbnN0ZWFkCi0JICB0aGUgbG9jYWwgdHMgdmFyaWFibGUgdGhhdCB3ZSBpbmNyZW1lbnQgd2hlbiBzdGVwcGluZyB0aHJvdWdoIHRoZSBhcnJheS4KLQkgIFBvaW50ZWQgb3V0IGJ5IE1hcnRpbiBQb2tvcm55LgotCi0yMDA5LTAzLTIwIDAwOjQyOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGRlYnVnZ2luZzogbWFrZSBHU1RfUFRSX0ZPUk1BVCB3b3JrIGZvciBxdWVyaWVzIGFzIHdlbGwKLQotMjAwOS0wMy0yMCAwMDozOTo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIEFQSTogYWRkIEdTVF9RVUVSWV9DQVNUCi0JICBiZWNhdXNlIHdlIGNhbiwgYW5kIGZvciBjb25zaXN0ZW5jeS4KLQotMjAwOS0wMy0xOSAyMToyNzo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBnc3RjaGVjazogZml4IGZvciBjaGVjayB2ZXJzaW9ucyA+IDAuOS42Ci0JICBBIG5ldyBhcmd1bWVudCBhbGxvd2VkX2V4aXRfdmFsdWUgd2FzIGFkZGVkIGluIFNWTiByZWNlbnRseSAoIzU3NDIxMykuCi0KLTIwMDktMDMtMTkgMTc6MTk6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGdzdHBhZDogZml4IGdzdF9wYWRfY2FuX2xpbmsKLQkgIFdlIHdlcmUgY29udmVydGluZyB0aGUgR3N0UGFkTGlua1JldHVybiB0byBhIGdib29sZWFuLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50Ci0JICB0byBkby4KLQotMjAwOS0wMy0xOSAxMDo0NDoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIGdzdC11bmluc3RhbGxlZDogYWRkIGdzdC1ydHNwLXNlcnZlciBiaXRzIGFuZCBicmVhayB1cCBvdmVybHkgbG9uZyBsaW5lcwotCSAgQWRkIHNvbWUgb2YgdGhlIGJpdHMgbmVlZGVkIGZvciBhbiB1bmluc3RhbGxlZCBnc3QtcnRzcC1zZXJ2ZXIgKHNvIGdkYiB3b3JrcwotCSAgb24gdGhlIGV4YW1wbGVzIGV0Yy4pLiBQeXRob24gYml0cyBhcmUgc3RpbGwgbWlzc2luZywgYW5kIHdlIG1pZ2h0IG5lZWQgYW4KLQkgIC11bmluc3RhbGxlZC5wYyBmaWxlIGFzIHdlbGwgaW4gdGhlIGZ1dHVyZS4gQnJlYWsgdXAgdmVyeSBsb25nIGxpbmVzIHRvIG1ha2UKLQkgIHRoZW0gZWFzaWVyIHRvIHJlYWQgYW5kIG1haW50YWluLiBBbHNvIHJlbW92ZSBnc3QtcGx1Z2lucyBwYXRocyBmcm9tIHRoZQotCSAgb2xkIGRheXMuCi0KLTIwMDktMDMtMTkgMTE6NDY6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcmFuZG9tL3d0YXkvcndsb2NrczoKLQkgIGRvY3M6IGludGVyZXN0aW5nIGlkZWEgZm9yIGZhc3QgcncgbG9ja3MKLQkgIC0tCi0KLTIwMDktMDMtMTkgMTE6MTE6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZGVmczogYWRkIG5ldyBzeW1ib2wgdG8gd2luZG93cyAuZGVmIGZpbGUKLQkgIEFkZCB0aGUgbmV3IHdpbmRvd3MgY21kLmV4ZSBjb2xvcmluZyBtZXRob2QgdG8gdGhlIC5kZWYgZmlsZS4KLQotMjAwOS0wMy0xOCAxNjozODo1MSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgZG9jczogbW9yZSBpbmZvIGFib3V0IHdoZW4gc3RhdGUgY2hhbmdlcyBjYW4gYmUgYXN5bmMgYW5kIHdoZW4gbm90LgotCi0yMDA5LTAzLTE4IDE5OjA3OjAwICswMTAwICBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuLmxlc3BpYXUgYXQgZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0aW5mby5oOgotCSAgaW5mbzogbW9yZSBpbmRlbnRhdGlvbiBmaXhlcwotCSAgRml4ZXMgIzUxNzIzMS4KLQotMjAwOS0wMy0xOCAxOTowNjoyMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdGluZm8uaDoKLQkgIGluZm86IGluZGVudGF0aW9uIGZpeAotCi0yMDA5LTAzLTE4IDE4OjU3OjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW5mby5jOgotCSAgaW5mbzogc2ltcGx5IHNvbWUgbW9yZQotCi0yMDA5LTAzLTE4IDE4OjQ1OjQxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGluZm8uYzoKLQkgIGluZm86IHJlZmFjdG9yIGRlYnVnIGNvbG9ycyBmb3Igd2luMzIgYW5kIG90aGVyCi0JICBSZWZhY3RvciB0aGUgZGVidWcgbGluZSBjb2RlIHRvIHVzZSBhcyBtdWNoIGNvZGUgYXMgcG9zc2libGUgZm9yIHRoZSB3aW4zMiBhbmQKLQkgIG90aGVyIGNvbG9yIGNvZGluZ3MuCi0JICBVcGRhdGUgZG9jcyB3aXRoIG5ldyBzeW1ib2wuCi0KLTIwMDktMDMtMTggMTc6MzA6MTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSAgd2luZG93czogaW5pdGlhbCBjb21taXQgZm9yIHRlcm1pbmFsIGNvbG9ycwotCi0yMDA5LTAzLTE4IDE3OjAxOjE2ICswMTAwICBaZWVzaGFuIEFsaSAoS2hhdHRhaykgPHplZXNoYW5hayBhdCBnbm9tZSBkb3Qgb3JnPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgZ3N0cGFkOiBmaXggZ3N0X3BhZF9jYW5fbGluaygpCi0JICBNb3ZlIHRoZSBnc3RfcGFkX2Nhbl9saW5rKCkgaW1wbGVtZW50YXRpb24gZnJvbSBnc3R1dGlscyB0byBnc3RwYWQgYW5kIHVzZQotCSAgZ3N0X3BhZF9saW5rX3ByZXBhcmUoKSB0byBtYWtlIGl0IHdvcmsgY29ycmVjdGx5IGFuZCBhbHNvIGNoZWNrIHRoZSBjYXBzLgotCSAgTWFrZSB0aGUgYnJva2VuIGltcGxlbWVudGF0aW9uIGluIGdzdHV0aWxzIHN0YXRpYy4KLQkgIFNtYWxsIGNsZWFudXBzIGluIHRoZSBfZ2V0X2ZpeGVkX2NhcHMoKSBmdW5jdGlvbi4KLQkgIEZpeGVzICM1NzU2ODIuCi0KLTIwMDktMDMtMTcgMjA6NDE6NDQgKzAwMDAgIERhdmlkIEFkYW0gPHphbmNoZXlAdWNjLmd1LnV3YS5lZHUuYXU+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGNvbmZpZy5oIG5lZWRzIHRvIGJlIGluY2x1ZGVkIGZpcnN0LCBlaXRoZXIgZGlyZWN0bHkgb3IgdmlhIGdzdF9wcml2YXRlLmgKLQkgIEZpeGVzIGJ1aWxkIHdpdGggLVdlcnJvciBjYXVzZWQgYnkgJ19GSUxFX09GRlNFVF9CSVRTIHJlZGVmaW5lZCcgd2FybmluZyBvbgotCSAgT3BlblNvbGFyaXMgd2hlcmUgX0ZJTEVfT0ZGU0VUX0JJVFMgbWF5IGJlIGRlZmluZWQgYm90aCBpbiBvdXIgY29uZmlnLmgKLQkgIGFuZCB2aWEgc3RkaW8uaCAoIzU3NTY5NSkuCi0KLTIwMDktMDMtMTcgMTk6MDI6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2ZhcS9kZXZlbG9waW5nLnhtbDoKLQkgIGZhcTogcmVtb3ZlIG91dGRhdGVkIGJpdHMgZnJvbSBpbmRlbnRpbmcgc2VjdGlvbgotCi0yMDA5LTAzLTE3IDEyOjA1OjMzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIGJpbjogZm9yd2FyZCBzZWdtZW50LXN0YXJ0IGxpa2Ugc2VnbWVudC1kb25lIGlmIHBhcmVudCBpcyBhbHNvIGEgYmluLCBmaXhlcyAjNTc1NTk4LgotCSAgQmluIGNvbGxlY3RzIHNlZ21lbnQtc3RhcnQgbWVzc2FnZXMgYW5kIHNlZ2VudC1kb25lIG1lc3NhZ2VzLiBpdCBwb3N0cyBhCi0JICBzZWdtZW50LWRvbmUgbWVzc2FnZSB0byBpdHMgcGFyZW50LCBvbmNlIGl0IGhhcyByZWNlaXZlZCBhIHNlZ21lbnQtZG9uZSBmb3IKLQkgIGVhY2ggc2VnbWVudC1zdGFydC4gSW1obyBpdCBzaG91bGQgYWxzbyBzZW5kIGEgc2VnbWVudC1zdGFydCBpZiBpdCByZWNlaXZlcyB0aGUKLQkgIGZpcnN0IHNlZ21lbnQgc3RhcnQgYW5kIGlmIHBhcmVudCBpcyAhPU5VTEwuIFRoaXMgaXMgbmVlZGVkIGZvciBiaW5zIGluIGJpbnMsCi0JICBzbyB0aGF0IGFsc28gaGlnaGVyIG9yZGVyIGJpbnMgY2FuIGdyb3VwIHNlZ21lbnQtc3RhcnRzIGFuZCBzZWdtZW50LWRvbmVzLgotCSAgUmlnaHQgbm93IGhpZ2hlciBvcmRlciBiaW5zIHdpbGwgcG9zdCBhIHNlZ21lbnQtZG9uZSBmb3IgZWFjaCBzZWdtZW50LWRvbmUKLQkgIHJlY2VpdmVkLgotCi0yMDA5LTAzLTE2IDIwOjEyOjQ1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL2ZhcS9naXQueG1sOgotCSAgZmFxOiBmaXggdHlwbyBpbiBnaXQgY29tbWFuZAotCi0yMDA5LTAzLTE1IDIzOjQwOjM2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgc3lzdGVtY2xvY2s6IHRoZXNlIHdhcm5pbmdzIGFyZSBzZXJpb3VzLCBnaXZlIG1vcmUgZGV0YWlsIGluIHRoZSBtZXNzYWdlCi0KLTIwMDktMDMtMTUgMjM6Mzc6MjkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IGFkZCBkZWJ1ZyBsb2dnaW5nIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHRyYWNlIGl0Ci0KLTIwMDktMDMtMTMgMTA6NTY6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgRml4IGluZGVudGF0aW9uIG9mIC5oIGZpbGVzCi0JICAtLQotCi0yMDA5LTAzLTEyIDEyOjIwOjI1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICB0YWdsaXN0czogYXBwbHkgZml4IGZvciByZXBsYWNlIGFsbCBhbHNvIHRvIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcy4gRml4ZXMgIzU3NDI0MQotCi0yMDA5LTAzLTEyIDEwOjQ4OjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIGRvY3M6IEltcHJvdmUgc29tZSBkb2NzCi0JICBSZW5hbWUgc29tZSBmdW5jdGlvbiB2YXJpYWJsZXMgYW5kIGFkZCBzb21lIFJldHVybjogdG8gbWFrZSB0aGUgZG9jcyBtb3JlIGhhcHB5LgotCi0yMDA5LTAzLTEyIDAwOjQxOjI0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgZG9jczogZml4IGxpbmtpbmcgdG8gY29uc3RhbnQgYW5kIGZ1bmN0aW9ucwotCi0yMDA5LTAzLTExIDE1OjIwOjM2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBkdW1wMmRvdDogZWxsaXBzaXplIGNhcHMgZmllbGRzLCBiZXR0ZXIgcGxhY2VtZW50IG9mIHVubmVnb3RpYXRlZCBjYXBzCi0JICBMb25nIGNhcHMgZmllbGRzIGxpa2UgZW51bXMgYXJlIGVsbGlwc2lzZWQuIElmIGNhcHMgYXJlIG5vdCBuZWdvdGlhdGVkLCB1c2UKLQkgIGhlYWQtIGFuZCB0YWlsbGFiZWwgdG8gcGxhY2UgdGhlbSBjbG9zZXIgdG8gdGhlIHBhZHMuIFVzZSBzbWFydGVyIHdheSB0byBpbmRlbnQuCi0KLTIwMDktMDMtMTEgMTA6Mjc6MTYgKzAyMDAgIExhc3psbyBQYW5keSA8bGFzemxvazJAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgZHVtcDJkb3Q6IG1ha2UgY2FwcyBpbiBET1QgZGVidWcgZ3JhcGhzIG1vcmUgcmVhZGFibGUuIEZpeGVzIDU3NDQ4NAotCSAgVXNlIGEgbW9ub3NwYWNlIGZvbnQgZm9yIGVkZ2UgbGFiZWxzIGFuZCBpbmRlbnQuCi0KLTIwMDktMDMtMTEgMTQ6MTE6MzAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIHBhZHRlbXBsYXRlOiBBbGxvdyAldSBhcyBjb252ZXJzaW9uIG1vZGlmaWVyIGFkZGl0aW9uYWwgdG8gJWQgYW5kICVzCi0KLTIwMDktMDMtMTEgMTE6MjM6MDUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgZ3N0YmFzZXNyYzogdW5zaWduZWQgbG9uZyBpcyAiJWx1Iiwgbm90ICIldWwiLiBGaXhlcyBidWlsZCBvbiBtYWNvc3gKLQotMjAwOS0wMy0xMCAyMTowODozNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBsb2dnaW5nOiBzb21lIGFkZGl0aW9uYWwgbG9nZ2luZyBmb3IgdHJhY2luZyBjYXBzIG5lZ290aWF0aW9uLgotCSAgRGVtb3RlIG9uZSBsb2cgdGhhdCBjYW4gY29tZSBxdWl0ZSBvZnRlbi4gUmVtb3ZlIG9uZSBmaXhtZSB0aGF0IGlzIGRvbmUuIEFwcGx5Ci0JICBnc3QtaW5kZW50IGNoYW5nZXMuCi0KLTIwMDktMDMtMTAgMjE6MDM6NDQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgY29tbWVudDogYWRkIGEgZml4bWUtMC4xMQotCi0yMDA5LTAzLTEwIDIxOjAxOjIxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgotCSAgZm9ybWF0dGluZzogdGFicyB0byBzcGFjZXMKLQotMjAwOS0wMy0wOSAyMzoxMToyNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNzAzMjE2MyB0byBmOGIzZDkxCi0KLTIwMDktMDMtMDkgMjA6MDc6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIGdzdHJlYW1lci5zcGVjOiBmaXggc3RyYXkgQEdMSUIyX1JFUUAgdGhhdCBkaWRuJ3QgZ2V0IGV4cGFuZGVkIHByb3Blcmx5Ci0KLTIwMDktMDMtMDkgMTY6MDk6MzggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgotCSAgZG9jczogcmV3b3JkIHN0dWZmIGFib3V0IGN1c3RvbSBtYWlubG9vcHMKLQkgIEZpeGVzICM1NzQyMjkuCi0KLTIwMDktMDMtMDkgMTY6MDE6MjAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGR1bXAyZG90OiBkb24ndCB1c2UgR1NUX1RJTUVfRk9STUFUIHdoZW4gYnVpbGRpbmcgZmlsZW5hbWVzLiBmaXhlcyAjNTc0NjIzCi0KLTIwMDktMDMtMDkgMTE6Mzk6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIHBhZDogY2FsbCBuZXcgY2FsbGJhY2tzIHNldCBpbiB0aGUgYmxvY2sgY2FsbGJhY2sKLQkgIEtlZXAgdHJhY2sgb2Ygd2hlbiBhIG5ldyBjYWxsYmFjayBpcyBpbnN0YWxsZWQgaW4gdGhlIGNhbGxiYWNrIGFuZCBjYWxsIHRoZSBuZXcKLQkgIGNhbGxiYWNrIGluIHRoYXQgY2FzZS4KLQkgIEFkZCB1bml0IHRlc3QgZm9yIGNoZWNraW5nIHBhZCBibG9ja2luZy4KLQkgIEZpeGVzICM1NzM4MjMuCi0KLTIwMDktMDMtMDggMTc6MjI6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgd2luMzI6IHVwZGF0ZSBlbnVtdHlwZXMgYW5kIGNvbmZpZy5oCi0KLTIwMDktMDMtMDggMTc6MTU6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgZG9jczogaW1wcm92ZSBkb2NzIGZvciBnc3RfdGFnX2xpc3RfZ2V0X2RhdGUqKCkKLQkgIE1lbnRpb24gdGhhdCB0aGUgZGF0ZSB2YWx1ZSBuZWVkcyB0byBiZSBmcmVlZCBhbmQgaG93IHRvIGZyZWUgaXQuCi0KLTIwMDktMDMtMDggMTI6MDI6MTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmZhNzM4ZCB0byA3MDMyMTYzCi0KLTIwMDktMDMtMDggMTE6MTc6NTAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gM2YxM2U0ZSB0byBmZmE3MzhkCi0KLTIwMDktMDMtMDggMDA6Mjc6MjYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGR1bXAyZG90OiBpbXByb3ZlIGNhcHMgbG9nZ2luZwotCSAgRmFjdG9yIG91dCBjb2RlIHRvIGRlc2NyaWJlIGNhcHMuIEltcHJvdmUgZm9ybWF0aW5nIChubyBcbiBpbiBjYXBzIGZpZWxkcykuCi0JICBDaGVjayBwZWVyIGNhcHMgdG9vIGFuZCBzaG93IGJvdGggaWYgdGhleSBkaWZmZXIuCi0KLTIwMDktMDMtMDcgMTE6NDM6MzEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gM2M3NDU2YiB0byAzZjEzZTRlCi0KLTIwMDktMDMtMDcgMTA6NDM6MzIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNTdjODNmMiB0byAzYzc0NTZiCi0KLTIwMDktMDMtMDYgMjI6MTA6MTAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IHJldmVydCBhY2NpZGVudGlhbCBjb21taXQgZnJvbSB0aGUgcXVldWUgKG1lIHNob3VsZCBzdGFydCB1c2luZyBicmFuY2hlcykKLQotMjAwOS0wMy0wNiAyMTo1OToyMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgYXBpZG9jczogbWFya3VwIGV4YW1wbGUgYXMgaGlnaGxpZ2h0YWJsZSBleGFtcGxlIGFuZCBjb3B5IHNhbWUgZm9yIHN0cnVjdHVyZQotCSAgc3RydWN0dXJlcyBjYW4gYmUgcHJpbnRlZCBsaWtlIHdlIGNhbiBkbyBmb3IgY2Fwcy4gTWFyayB0aGUgZXhhbXBsZSBzbyB0aGF0Ci0JICBndGstZG9jIGNhbiBwcmV0dHkgcHJpbnQgYW5kIHhyZWYgaXQuCi0KLTIwMDktMDMtMDQgMjE6MjE6NTYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgY29sbGVjdHBhZHM6IHJlbGlhYmx5IGdvIHRvIGVvcy4gRml4ZXMgIzU3NDE2MAotCSAgVXBkYXRlIGNvbGxlY3RwYWRzIHN0YXR1cyB3aGVuIHJlbW92aW5nIHBhZHMuCi0KLTIwMDktMDMtMDYgMTI6MDg6NDIgKzAxMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIGlkZW50aXR5OiBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgd2hlbiBzZW5kaW5nIG91dCB0aGUgbmV3c2VnbWVudCBldmVudCBpbiBzaW5nbGUtc2VnbWVudCBtb2RlLgotCSAgVGhpcyBtYWtlcyBpZGVudGl0eSBzaW5nbGUtc2VnbWVudD10cnVlICEgb2dnbXV4IHdvcmsgYWdhaW4gYWZ0ZXIgYSBjaGFuZ2UgaW4KLQkgIG9nZ211eCAoY29tbWl0IGIwZTNkNDQ5IGluIC1iYXNlKS4KLQotMjAwOS0wMy0wNSAxNzo0MjoyMiArMDEwMCAgQW5keSBXaW5nbyA8d2luZ29Ab2Jsb25nLm5ldD4KLQotCSAgYmFzZXNpbms6IHByb3BhZ2F0ZSBVUFNUUkVBTSBldmVudHMgaW4gcHVsbCBtb2RlIHRvbwotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3Npbmtfc2VuZF9ldmVudCk6IFByb3BhZ2F0ZQotCSAgdXBzdHJlYW0gZXZlbnRzIGluIHB1bGwgbW9kZSB0b28uCi0KLTIwMDktMDMtMDUgMTE6Mjk6NDggKzAxMDAgIEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIEdzdFBhZDogcmVsYXggZmFpbHVyZSB0byBkZWFjdGl2YXRlIHVubGlua2VkIHBhZHMKLQkgIFdoZW4gZGUvYWN0aXZhdGluZyBhIHBhZCBpbiBwdWxsIG1vZGUgdGhlIHBhZCBuZWVkcyB0byBkZS9hY3RpdmF0ZSB0aGUKLQkgIHBlZXIgcGFkIGl0IGlzIGNvbm5lY3RlZCB0bywgZmFpbHVyZSB0byBiZSBhYmxlIHRvIGRvIHRoaXMgaW4gYWN0aXZhdGlvbiBtb2RlCi0JICBpcyBhbiBlcnJvci4KLQkgIEhvd2V2ZXIgaWYgdGhlcmUgaXMgbm8gcGVlcnBhZCwgd2UgY2FuIHN0aWxsIGRlYWN0aXZhdGUgdGhlIHBhZCBjb3JyZWN0bHkgYW5kCi0JICBhc3N1bWUgdGhlIGFwcGxpY2F0aW9uIHdpbGwgZGVhY3RpdmF0ZSB0aGUgdW5saW5rZWQgcGVlciBwYWQgZXZlbnR1YWxseS4KLQkgIEZpeGVzICM1NzQxNjMuCi0KLTIwMDktMDMtMDUgMTE6MDI6NTkgKzAxMDAgIExSTiA8bHJuMTk4NiBhdCBnbWFpbCBkb3QgY29tPgotCi0JKiBnc3QvZ3N0cG9sbC5jOgotCSAgR3N0UG9sbDogc2V0IHRoZSByZXR1cm4gdmFsdWUgb24gd2luZG93cwotCSAgTWFrZSBzdXJlIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb25zIF9yZWFkL193cml0ZV9jb250cm9sKCkKLQkgIHJldHVybiB0aGUgYWN0dWFsIHJlc3VsdCBpbnN0ZWFkIG9mIGFsd2F5cyBGQUxTRSBvbiB3aW5kb3dzLgotCSAgRml4ZXMgIzU3NDIxMS4KLQotMjAwOS0wMy0wNCAxMDo0NjoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcHdnL2FkdmFuY2VkLW5lZ290aWF0aW9uLnhtbDoKLQkqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICBwd2c6IHVwZGF0ZSBmb3IgQ1ZTLXRvLWdpdCBtaWdyYXRpb24KLQkgIEZpeGVzICM1NzM5NDYuCi0KLTIwMDktMDMtMDQgMDk6MjA6NDMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgR3N0QWRhcHRlcjogRGlzY2FyZCBlbXB0eSBidWZmZXJzIGluIF9wdXNoKCkuIEZpeGVzICM1NzQwMjQKLQotMjAwOS0wMy0wMyAyMDowMTo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICBVcGRhdGUgLmdpdGlnbm9yZQotCi0yMDA5LTAzLTAzIDE5OjU4OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZ3N0LXVuaW5zdGFsbGVkOiBhZGQgYml0cyBmb3IgdW5pbnN0YWxsZWQgY2hlY2tvdXRzIG9mIGdzdC1vcGVubWF4IGFuZCB0b3RlbQotCi0yMDA5LTAzLTAyIDE2OjE3OjQ1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQVBJOiBBZGQgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCgpIGZvciBiaW5hcnkgc2VhcmNocyBvbiBhIHNvcnRlZCBhcnJheQotCSAgVGhpcyB3aWxsIGJlIG1vc3RseSB1c2VmdWwgaW4gYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSBzb21lIGtpbmQgb2YgaW50ZXJuYWwKLQkgIHNlZWsvaW5kZXggdGFibGUuIEN1cnJlbnRseSBhbG1vc3QgYWxsIG9mIHRoZW0gKG9yIGV2ZW4gYWxsIG9mIHRoZW0pCi0JICBhcmUgdXNpbmcgYSBsaW5lYXIgc2VhcmNoIGFsdGhvdWdoIHRoZSB1c2VkIGFycmF5IGlzIGFscmVhZHkgc29ydGVkLAotCSAgd2FzdGluZyBzb21lIENQVSB0aW1lIHdpdGhvdXQgZ29vZCByZWFzb24uCi0JICBGaXhlcyBidWcgIzU3MzYyMy4KLQotMjAwOS0wMi0yOCAxMToxNToyOSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgQnVtcCBnbGliIHJlcXVpcmVtZW50IHRvIDIuMTQKLQkgIEFsc28gcmVtb3ZlIGNvZGUgY29uZGl0aW9uYWwgb24gPCAyLjE0LgotCi0yMDA5LTAyLTI4IDEzOjM0OjA4IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL01BTklGRVNUOgotCSAgUmVtb3ZlIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbiBmcm9tIE1BTklGRVNULCBpdCBubyBsb25nZXIgZXhpc3RzCi0KLTIwMDktMDItMjcgMTM6MzU6MzUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSAgY2Fwc2ZpbHRlcjogUHJvcGVybHkgcmVzZXQgdGhlIGNhcHNmaWx0ZXIgd2hlbiBzZXR0aW5nIGNhcHMgQU5ZLgotCi0yMDA5LTAyLTI3IDEyOjM0OjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2Rlc2lnbi9kcmFmdC1mcmFtZXN0ZXAudHh0OgotCSAgZGVzaWduOiB1cGRhdGUgdGhlIGZyYW1lc3RlcCBkcmFmdAotCSAgVXBkYXRlIHRoZSBkb2NzIGEgbGl0dGxlLgotCSAgQWRkIHByb3BlcnR5IHRvIGFsbG93IGluY3JlbWVudGFsIHN0ZXBwaW5nIHNvIHRoYXQgd2UgY2FuIHJlZHVjZSBleGNlc3NpdmUKLQkgIHF1ZXVlaW5nLgotCi0yMDA5LTAyLTI2IDE1OjQwOjI2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGJhc2VzaW5rOiBtb3ZlIGxlZnQgb3ZlciBoYW5kbGluZyBvZiB0aGUgZXJyb3IgY2FzZSB0byB0aGUgYWN0aXZhdGVfZmFpbGVkIGxhYmVsLgotCSAgSWYgd2FzIGxlZnQgYXMgZGVhZCBjb2RlLgotCi0yMDA5LTAyLTI1IDE5OjU5OjU3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJ1aWxkOiBVcGRhdGUgc2hhdmUgaW5pdCBzdGF0ZW1lbnQgZm9yIGNoYW5nZXMgaW4gY29tbW9uLiBCdW1wIGNvbW1vbi4KLQotMjAwOS0wMi0yNSAxMDo1MTo1NyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIGJpbmFyeSByZWdpc3RyeTogRG9uJ3QgYXR0ZW1wdCB0byBwYXJzZSBlbXB0eSBjYXBzCi0KLTIwMDktMDItMjUgMTQ6MTk6MDggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5OiBTZXQgdHlwZWZpbmQgZmFjdG9yeSBjYXBzIHRvIE5VTEwgaW5zdGVhZCBvZiBlbXB0eSBjYXBzIGlmIHRoZXkgb3JpZ2luYWxseSB3ZXJlIE5VTEwKLQotMjAwOS0wMi0yNSAxMTozMTozOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gOWNmOGM5YiB0byBhNmNlNWM2Ci0KLTIwMDktMDItMjQgMTU6MTA6MTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIHJlZ2lzdHJ5YmluYXJ5OiBDaGVjayBpZiB0eXBlZmluZCBmYWN0b3J5IGNhcHMgYXJlIE5VTEwgYmVmb3JlIGNvcHlpbmcgdGhlbQotCi0yMDA5LTAyLTI0IDExOjQwOjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgUmVtb3ZlIHVuZGVjbGFyZWQgc3ltYm9scyBmcm9tIGRvY3MKLQkgIFJlbW92ZSBzb21lIHVuZGVjbGFyZWQgc3ltYm9scyBmcm9tIHRoZSBkb2NzLgotCi0yMDA5LTAyLTIzIDEzOjAxOjExIC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBDaGFuZ2UgaG93IHdpbjMyL2NvbW1vbi9jb25maWcuaCBpcyB1cGRhdGVkCi0JICBHZW5lcmF0ZSB3aW4zMi9jb21tb24vY29uZmlnLmgtbmV3IGRpcmVjdGx5IGZyb20gY29uZmlnLmguaW4sCi0JICB1c2luZyBzaGVsbCB2YXJpYWJsZXMgaW4gY29uZmlndXJlIGFuZCBzb21lIGhhcmQtY29kZWQgaW5mb3JtYXRpb24uCi0JICBDaGFuZ2UgdG9wLWxldmVsIG1ha2VmaWxlIHNvIHRoYXQgJ21ha2Ugd2luMzItdXBkYXRlJyBjb3BpZXMgdGhlCi0JICBnZW5lcmF0ZWQgZmlsZSB0byB3aW4zMi9jb21tb24vY29uZmlnLmgsIHdoaWNoIHdlIGtlZXAgaW4gc291cmNlCi0JICBjb250cm9sLiAgSXQncyBrZXB0IGluIHNvdXJjZSBjb250cm9sIHNvIHRoYXQgdGhlIGdpdCB0cmVlIGlzCi0JICBidWlsZGFibGUgZnJvbSBWUy4KLQotMjAwOS0wMi0yMyAxMDo1MjoxNCAtMDgwMCAgRGF2aWQgRmx5bm4gPGRhdmlkZkByZC5iYmMuY28udWs+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkgIEFkZCBzcmNkaXIgdG8gaW5jbHVkZXMgZm9yIG91dC1vZi1zb3VyY2UgYnVpbGRzCi0JICBXaGVuIHlvdSB1c2UgZ3N0cmVhbWVyIHVuaW5zdGFsbGVkIGFuZCBidWlsZCBvdXRzaWRlCi0JICB0aGUgc291cmNlIHRyZWUsIHRoZSBpbmNsdWRlcyBuZWVkIHRvIGJlIHNwZWNpZmllZCBmb3IKLQkgIGJvdGggdGhlIHNvdXJjZSB0cmVlIGFuZCB0aGUgYnVpbGQgdHJlZS4KLQkgIFNpZ25lZC1vZmYtYnk6IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0yMDA5LTAyLTIzIDE3OjM2OjIzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIEVycm9yIG91dCBtb3JlIHNwZWNpZmljYWxseSBvbiBlbXB0eSBjYXBzCi0JICBXaGVuIHdlIGdldCBlbXB0eSBjYXBzIGZyb20gdGhlIGdldGNhcHMgZnVuY3Rpb24gaW4gdGhlIGRlZmF1bHQgbmVnb3RpYXRlCi0JICBmdW5jdGlvbiwgcG9zdCBhIG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IuCi0KLTIwMDktMDItMjMgMTU6MjQ6MDAgKzAxMDAgIEFuZHkgV2luZ28gPHdpbmdvQG9ibG9uZy5uZXQ+Ci0KLQkgIGZpeCB1cmkgaGFuZGxlciBpdGVyYXRpb24gaW4gZ3N0LWluc3BlY3QKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYyAocHJpbnRfYWxsX3VyaV9oYW5kbGVycyk6IFdob29wcywgZml4IGl0ZXJhdGlvbi4KLQkgIEknbSBzdHVwaWQuCi0KLTIwMDktMDItMjMgMTI6MzM6MTMgKzAxMDAgIExSTiA8bHJuMTk4NiBhdCBnbWFpbCBkb3QgY29tPgotCi0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgRml4IHNpZ25lZCB3aGVuIGNvbXBpbGluZyB3aXRoIE1TeXMvTWluR1cKLQkgIGZpeCBzaWduZWQgaXNzdWVzIHdoZW4gY29tcGlsaW5nIHdpdGggTVN5cy9NaW5HVy4KLQkgIEZpeGVzICM1NzI1OTEuCi0KLTIwMDktMDItMjMgMTA6NTM6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIERvbid0IGZvcndhcmQgTEFURU5DWSBldmVudCB3aGVuIG5vdCByZWFkeQotCSAgV2hlbiB3ZSBhcmUgbm90IHJlYWR5IHRvIGhhbmRsZSBhIGxhdGVuY3kgcXVlcnkgKHdlIGFyZSBub3QgeWV0IHByZXJvbGxlZCkgd2UKLQkgIGFsc28gZG9uJ3QgdHJ5IHRvIGZvcndhcmQgdGhlIGxhdGVuY3kgZXZlbnQgYmVjYXVzZSB0aGF0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQKLQkgIGVycm9ycyB3aGVuIHVwc3RyZWFtIGlzIG5vdCB5ZXQgbGlua2VkLgotCi0yMDA5LTAyLTIyIDIyOjA5OjM5ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9jb3JlOgotCSAgUmVtb3ZlIGNvcmUgZmlsZSBmcm9tIHByZXZpb3VzIGNvbW1pdAotCi0yMDA5LTAyLTIyIDIwOjAxOjA1ICswMTAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIHRlc3RzL2NoZWNrL2NvcmU6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEdzdFBhZDogQWRkIGdzdF9wYWRfc2V0X2Jsb2NrZWRfYXN5bmNfZnVsbAotCSAgVGhpcyBhbGxvd3MgY29ubmVjdGluZyBhIEdEZXN0cm95Tm90aWZ5IGZvciB3aGVuIHRoZSBjYWxsYmFjayBpcyByZW1vdmVkL3JlcGxhY2VkLgotCSAgUGFydGlhbGx5IGZpeGVzICM1MTQ3MTcKLQotMjAwOS0wMi0yMiAxOTowNToyMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgSW5jbHVkZSBmbG9hdGluZyBwb2ludCB3cml0ZS9yZWFkIGZ1bmN0aW9ucyBpbiB0aGUgZG9jcyBieSB3b3JraW5nIGFyb3VuZCBhIGd0ay1kb2MgYnVnCi0KLTIwMDktMDItMjIgMTg6NTM6MTAgKzAxMDAgIEFsaSBTYWJpbCA8YWxpLnNhYmlsQGdtYWlsLmNvbT4KLQotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgVXNlIHRoZSBjb3JyZWN0IHVucmVmIGZ1bmN0aW9uCi0KLTIwMDktMDItMjIgMTg6NTE6MDggKzAxMDAgIEFsaSBTYWJpbCA8YWxpLnNhYmlsQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBDb252ZXJ0IHVucmVmL2NvcHkgZnVuY3Rpb25zIG9mIEdzdE1pbmlPYmplY3Qgc3ViY2xhc3NlcyB0byBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucwotCSAgdW5yZWYgYW5kIGNvcHkgZnVuY3Rpb25zIGFyZSBzb21ldGltZXMgdXNlZCBhcyBmdW5jdGlvbgotCSAgcG9pbnRlcnMgZm9yIGV4YW1wbGUgaW4gdGhlIGNhc2Ugb2YgZ19oYXNoX3RhYmxlX25ld19mdWxsCi0JICBhcyBhIEdEZXN0cm95Tm90aWZ5IGZ1bmN0aW9uLgotCSAgQ3VycmVudGx5IEdzdEJ1ZmZlciwgR3N0RXZlbnQsIEdzdE1lc3NhZ2UgYW5kIEdzdFF1ZXJ5Ci0JICBkZWZpbmUgdGhlaXIgcmVzcGVjdGl2ZSB1bnJlZiBhbmQgY29weSBmdW5jdGlvbnMgYXMKLQkgIG1hY3JvcywgbWFraW5nIHVzZSBvZiBnc3RfbWluaV9vYmplY3RfdW5yZWYvY29weS4KLQkgIFRoaXMgYXBwcm9hY2ggd29ya3MgdmVyeSB3ZWxsIGZvciBtb3N0IGNhc2VzLCBleGNlcHQKLQkgIGZvciBzb21lIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJpbmRpbmdzIChjdXJyZW50bHkgVmFsYSksCi0JICB3aGVyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2VtYW50aWNzIGFyZSBkZWZpbmVkCi0JICBkZWNsYXJhdGl2ZWx5LgotCSAgVGhlIHBvc3NpYmxlIHNvbHV0aW9ucyB3b3VsZCBiZSB0byBlaXRoZXIgY29udmVydCBhbGwKLQkgIHRoZSBtYWNyb3MgaW50byBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCBvciBjaGFuZ2UgdGhlCi0JICBzaWduYXR1cmUgb2YgZ3N0X21pbmlfb2JqZWN0X3VucmVmIHRvIHRha2UgYSB2b2lkKgotCSAgaW5zdGVhZCBvZiBhIEdzdE1pbmlPYmplY3QqLgotCSAgRml4ZXMgYnVnICM1NzI0ODAuCi0KLTIwMDktMDItMjIgMTU6MjI6MTYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICBVc2Ugc2hhdmUgKGh0dHA6Ly9naXQubGVzcGlhdS5uYW1lL2NnaXQvc2hhdmUvKSB0byBzaW1wbGlmeSBidWlsZCBvdXRwdXQKLQotMjAwOS0wMi0yMiAxNTo0NDozNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNWQ3YzljYyB0byA5Y2Y4YzliCi0KLTIwMDktMDItMjEgMTE6MTM6MzAgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gODBjNjI3ZCB0byA1ZDdjOWNjCi0KLTIwMDktMDItMTkgMTg6MDU6MDcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIEdzdEJ1ZmZlckZsYWdzOiBBZGQgIlNpbmNlOiAwLjEwLjIzIiBmb3IgdGhlIG5ld2x5IGFkZGVkIGZsYWdzCi0KLTIwMDktMDItMTkgMTY6MDQ6NDMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIEdzdEJ1ZmZlckZsYWdzOiBBZGQgMyBuZXcgbWVkaWEtc3BlY2lmaWMgYnVmZmVyIGZsYWdzLgotCSAgUGFydGlhbGx5IGZpeGVzICMxNjM1NzcKLQotMjAwOS0wMi0xOSAxMjo1NzoxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIHRvb2xzOiBwcmludCBub3JtYWwgb3V0cHV0IHRvIHN0ZG91dCwgYW5kIG9ubHkgZXJyb3JzIGFuZCB3YXJuaW5ncyB0byBzdGRlcnIgaW4gZ3N0LWxhdW5jaAotCSAgTGV0J3Mgbm90IHByaW50IGV2ZXJ5dGhpbmcgdG8gc3RkZXJyLiBTdXBwcmVzcyBzb21lIG1vcmUgJ25vcm1hbCcgbWVzc2FnZXMgd2hlbiAtLXF1aWV0IHdhcyBwYXNzZWQuCi0KLTIwMDktMDItMTkgMTI6NDU6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICB0b29sczogdXNlIGdfcHJpbnQqKCkgaW5zdGVhZCBvZiAqcHJpbnRmKCkgaW4gZ3N0LWxhdW5jaAotCSAgV2Ugc2hvdWxkIHVzZSBHTGliJ3MgZ19wcmludCooKSBmdW5jdGlvbnMgZm9yIHByaW50aW5nIHN0dWZmIGluIGdzdC1sYXVuY2gsIG5vdCBwcmludGYgYW5kIGZyaWVuZHMsIHNpbmNlIHdlJ3JlIHByaW50aW5nCi0JICB0cmFuc2xhdGVkIHN0cmluZ3MsIHdoaWNoIHdlIGdldCBpbiBVVEYtOCBlbmNvZGluZywgYW5kIEdMaWIncyBwcmludCBmdW5jdGlvbnMgZXhwZWN0IFVURi04IGVuY29kZWQgc3RyaW5ncyB3aGVyZWFzIHByaW50ZgotCSAgZXQgYWwuIGV4cGVjdCBzdHJpbmdzIGluIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIFVURi04LgotCSAgQWxzbyBhZGQgYSBQUklOVCBjb252ZW5pZW5jZSBtYWNybyBzbyB3ZSBkb24ndCBoYXZlIHRvIGxpdHRlciB0aGUgY29kZSB3aXRoIGlmICghcXVpZXQpIHN0YXRlbWVudHMuCi0KLTIwMDktMDItMTkgMTE6MTg6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6Ci0JKiBkb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sOgotCSogZG9jcy9yYW5kb20vbWltZXR5cGVzOgotCSAgZG9jczogZml4IGNvbnN0YW50cyBmb3IgR19MSVRUTEVfRU5ESUFOIGFuZCBHX0JJR19FTkRJQU4KLQkgIFdlIGdvdCB0aGUgY29uc3RhbnRzIGZvciBHX0xJVFRMRV9FTkRJQU4gYW5kIEdfQklHX0VORElBTiB0aGUgd3Jvbmcgd2F5IGFyb3VuZCBpbiBzb21lIGRvY3MgKGZpeGVzOiAjNTcyMzkyKS4gQWxzbyBtZW50aW9uCi0JICBHX0JZVEVfT1JERVIgaW4gdGhlIGF1ZGlvIHR5cGVzIHNlY3Rpb24uCi0KLTIwMDktMDItMTkgMTA6MjU6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIG5ldyBzeW1ib2xzIHRvIGRlZiBmaWxlcwotCSAgQWRkIHRoZSBuZXcgcmVxdWVzdF9tZXNzYWdlIHN5bWJvbHMgdG8gdGhlIHdpbmRvd3MgZGVmIGZpbGUuCi0KLTIwMDktMDItMTggMTU6MzE6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIEFkZCBtZXNzYWdlIHRvIHJlcXVlc3QgYSBzdGF0ZSBjaGFuZ2UKLQkgIEFkZCBhIEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUgdGhhdCBjYW4gYmUgcG9zdGVkIGJ5IGVsZW1lbnQgd2hlbiB0aGV5IHdvdWxkCi0JICBsaWtlIHRvIGhhdmUgdGhlIGFwcGxpY2F0aW9uIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHBpcGVsaW5lLiB0aGUgcHJpbWFyeSB1c2UKLQkgIGNhc2UgaXMgdG8gcGF1c2UgdGhlIHBpcGVsaW5lIHdoZW4gYW4gYXVkaW8gbWl4ZXIgaXMgbWl4aW5nIGEgaGlnaGVyIHByaW9yaXR5Ci0JICBzdHJlYW0gYnV0IGl0IGNhbiBhbHNvIGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgotCSAgQWRkIHNvbWUgZG9jcyBhbmQgYSB1bml0IHRlc3QuCi0JICBJbXBsZW1lbnQgdGhlIFJFUVVFU1RfU1RBVEUgbWVzc2FnZSBpbiBnc3QtbGF1bmNoLgotCSAgQVBJOiBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZSgpCi0JICBBUEk6IGdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGUoKQotCSAgQVBJOiBHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFCi0KLTIwMDktMDItMTYgMTI6NTg6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBDbGVhciB0YXJnZXQgd2hlbiB0aGUgdGFyZ2V0IHBhZCBkaXNhcHBlYXJzCi0JICBXaGVuIHRoZSB0YXJnZXQgcGFkIGRpc2FwcGVhcnMgKGJlY2F1c2UgaXQgd2FzIGV4cGxpY2l0bHkgdW5saW5rZWQgb3IgdGhlCi0JICBlbGVtZW50IHdhcyByZW1vdmVkL3VucmVmZmVkKSBtYWtlIHN1cmUgd2UgcmVjZWl2ZSBhIG5vdGlmeSB3aXRoIHRoZSB1bmxpbmsKLQkgIGZ1bmN0aW9uIG9uIHRoZSBwcm94eSBwYWQgYW5kIGNsZWFyIHRoZSB0YXJnZXQuIFdlIHVzZSBhIHNpbXBsZSBmbGFnIHRvIG5vdCBkbwotCSAgdGhpcyBhbmQgY2F1c2UgZGVhZGxvY2tzIHdoZW4gdGhlIHRhcmdldCB3YXMgY2hhbmdlZCBleHBsaWNpdGx5IHVzaW5nIHRoZQotCSAgZ2hvc3RwYWQgZnVuY3Rpb25zLgotCSAgVXBkYXRlIHRoZSB1bml0IHRlc3QgYmVjYXVzZSB3ZSBub3cgdW5yZWYgdGhlIHRhcmdldCBzb29uZXIgKGFuZCBjb3JyZWN0bHkpLgotCi0yMDA5LTAyLTE1IDE2OjM3OjE3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkgIGRvY3M6IGZvcm1hdCBhbmQgaW5kZW50IGV4YW1wbGVzLgotCi0yMDA5LTAyLTA5IDIyOjQ5OjA1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIGdzdC1sYXVuY2g6IGFkZCAtcS8tLXF1aWV0IG9wdGlvbiB0byBzdXByZXNzIGFueSBub24gZXJyb3Igb3V0cHV0LgotCSAgSGF2aW5nIG5vIG91dHB1dCBpcyBuaWNlIGZvciBzY3JpcHRpbmcuIEFsc28gdXBkYXRlIHRoZSBtYW5wYWdlLgotCi0yMDA5LTAyLTE0IDEzOjM1OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9mYXEvZGV2ZWxvcGluZy54bWw6Ci0JKiBkb2NzL2ZhcS9mYXEueG1sOgotCSogZG9jcy9mYXEvZ2V0dGluZy54bWw6Ci0JKiBkb2NzL2ZhcS9naXQueG1sOgotCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgotCSogZG9jcy9mYXEvc3RhcnQueG1sOgotCSogZG9jcy9mYXEvdHJvdWJsZXNob290aW5nLnhtbDoKLQkqIGRvY3MvZmFxL3VzaW5nLnhtbDoKLQkgIEZBUTogdXBkYXRlIGZvciBnaXQgYW5kIG1pc2NlbGxhbmVvdXMgc21hbGwgZml4ZXMgYW5kIGFkZGl0aW9ucwotCSAgUmVwbGFjZSBhbGwgbWVudGlvbnMgb2YgQ1ZTIHdpdGggZ2l0LiBBZGQgbGluayB0byBnc3QtdW5pbnN0YWxsZWQgc2NyaXB0IGluIGNnaXQgYW5kIHRvIFN1Ym1pdHRpbmdQYXRjaGVzIHBhZ2UgaW4gd2lraS4gRml4IHNvbWUgdHlwb3MuIFVwZGF0ZSBpbmRlbnRpbmcgcnVsZXMgdG8gd2hhdCB3ZSBhY3R1YWxseSB1c2UgKCM1NzE2NDYpLgotCi0yMDA5LTAyLTEzIDE2OjE3OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlICoucG8gZmlsZXMgZm9yIG5ld2x5LWFkZGVkIHRyYW5zbGF0YWJsZSBzdHJpbmdzCi0JICBUaGUgb25seSBwZW9wbGUgd2hvIHNob3VsZCBnZXQgY29uZmxpY3RzIG5vdyBhcmUgcGVvcGxlIHdobyBoYXZlIGNsb25lZCBhbmQgYnVpbHQgZ3N0cmVhbWVyIGJldHdlZW4gdGhlIHRpbWUgdGhvc2Ugc3RyaW5ncwotCSAgd2VyZSBhZGRlZCBhbmQgdGhpcyBjb21taXQuCi0KLTIwMDktMDItMTIgMTA6Mzg6MDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICB0YWdsaXN0OiBBUEk6IEFkZCBIT01FUEFHRSB0YWcKLQkgIFRoaXMgdGFnIHdpbGwgbGlzdCBhIGhvbWVwYWdlIGZvciB0aGUgbWVkaWEsCi0JICBpLmUuIHRoZSBhcnRpc3QncyBvciBtb3ZpZSdzIGhvbWVwYWdlLgotCSAgVGhpcyBpcyBkaWZmZXJlbnQgdG8gR1NUX1RBR19MT0NBVElPTiBhcyB0aGUgbGF0dGVyCi0JICBsaXN0cyB0aGUgb3JpZ2luYWwgbG9jYXRpb24gb2YgdGhlIG1lZGlhLgotCSAgRml4ZXMgYnVnICM1NzEyMjcuCi0KLTIwMDktMDItMDkgMTI6MDA6NDMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEJ1bXAgcmV2aXNpb24gdG8gdXNlIGZvciBjb21tb24gc3VibW9kdWxlLgotCi0yMDA5LTAyLTA4IDEwOjI4OjE2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHZlcnNpb24uaC5pbjoKLQkgIFJlcGxhY2Ugc29tZSBtZW50aW9ucyBvZiBDVlMgYnkgR0lUCi0KLTIwMDktMDItMDYgMTA6NTE6MjggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICBiaW5hcnkgcmVnaXN0cnk6IFJld3JpdGUgc2FuaXR5IGNoZWNrIHRvIGFjdHVhbHkgY2F0Y2ggc29tZXRoaW5nLgotCSAgVGhlIHByZXZpb3VzIGNvbW1pdCB3YXMgYm9ndXMsIGFzIHdhcyB0aGUgY2hlY2sgYmVmb3JlLiBXZSBqdXN0IHBvaW50IG0gdG8gdGhlIGZpbGUgZGF0YSwKLQkgIHNvIG5laXRoZXIgaXQgbm9yIGl0cyBtZW1iZXJzIHdpbGwgYmUgTlVMTC4gQmV0dGVyIGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIGRhdGEuCi0KLTIwMDktMDItMDUgMjM6MTE6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9NYWtldmFyczoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IGF2b2lkIGNvbmZsaWN0cyBvZiBsb2NhbCAqLnBvIGZpbGVzIHdpdGggZmlsZXMgaW4gZ2l0Ci0JICBNYWtlIGl0IHNvIHRoYXQgZmlsZW5hbWVzIGFuZCBsaW5lIG51bWJlcnMgYXJlIG9ubHkgc3RvcmVkIGluIHRoZSAqLnBvdCBmaWxlICh3aGljaCBpcyBub3QgaW4gZ2l0KSwgYnV0IG5vdCBpbiB0aGUKLQkgIGluZGl2aWR1YWwgKi5wbyBmaWxlcy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBoYXJkbHkgdXNlZnVsIGZvciB0cmFuc2xhdG9ycyBpbiBvdXIgY2FzZSwgYW5kIGl0IHNob3VsZCBhdm9pZCB0aGUgY29uc3RhbnQKLQkgIGNvbmZsaWN0cyBvZiBsb2NhbCAqLnBvIGZpbGVzIHdpdGggdGhlIG9uZXMgaW4gZ2l0IHdoaWNoIGFyZSBjYXVzZWQgYnkgdGhlIHNvdXJjZSBmaWxlcyBjaGFuZ2luZyBhbmQgdGhlIGxpbmUgbnVtYmVycwotCSAgYmVpbmcgdXBkYXRlZC4KLQkgIFRoaXMgY29tbWl0IGlzIGxpa2VseSB0byBjYXVzZSBvbmUgbGFzdCBtZXJnZSBjb25mbGljdCBmb3IgeW91LCB3aGljaCB5b3UgY2FuIHdvcmsgYXJvdW5kIHdpdGggImdpdCBjaGVja291dCBwby8qLnBvIgotCSAgYmVmb3JlIG1lcmdpbmcgb3IgcHVsbGluZy4gQWZ0ZXIgdGhhdCB0aGVyZSBzaG91bGQgKGhvcGVmdWxseSkgbm90IGJlIGFueSBtb3JlIGxvY2FsIG1vZGlmaWNhdGlvbnMgb2YgdGhlc2UgZmlsZXMuCi0KLTIwMDktMDItMDUgMTU6MjI6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHdpbjMyOiBhZGQgbmV3IEdzdFBvbGwgQVBJIHRvIGxpYmdzdHJlYW1lci5kZWYKLQotMjAwOS0wMi0wNSAxNzoyMzo0NCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBjbGVhbnVwOiByZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBpbiBfY2xhc3NfaW5pdCgpIGFuZCByZWluZGVudC4KLQotMjAwOS0wMi0wNSAxNzowNTo1NiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0YnVzLmM6Ci0JICBidXM6IHJlbW92ZSB1bnVzZWQgc2V0L2dldCBwcm9wZXJ0eSBmdW5jdGlvbnMKLQotMjAwOS0wMi0wNSAxNTo1NjoxOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIGJpbmFyeSByZWdpc3RyeTogY29tcGFyaW5nIGFycmF5cyBhZ2FpbnN0IE5VTEwgaXMgdXNlbGVzcwotCi0yMDA5LTAyLTA1IDEzOjU5OjQ4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHF1ZXVlOiByZW1vdmUgdW51c2VkIGNvZGUKLQkgIFNraXAgbG9vcGluZyB0aHJ1IGEgZHVtbXkgaW1wbGVtZW50YXRpb24uCi0KLTIwMDktMDItMDUgMTM6NTc6MDUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICB0ZXN0czogR3N0Q2xvY2tUaW1lIGlzIGFsd2F5cyA+PSAwCi0KLTIwMDktMDItMDUgMTM6NDI6MzAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkgIGNvbnRyb2xsZXI6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQotMjAwOS0wMi0wNCAxNzoyMDoyMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGNsZWFudXA6IEVpdGhlciBjaGVjayBhbHdheXMgZm9yIGludGVybmFsIGJlaW5nIE5VTEwgb3IgZG9uJ3QuCi0JICBJTUhPIHRoZSBnaG9zdHBhZCBpcyBib3JrZWQgaWYgaW50ZXJuYWwgaXMgTlVMTC4gU28gdGhlIGNoZWNrIGNhbiBnbyBhbmQgaXQgaXMKLQkgIHVzZWQgbGF0ZXIgdW5jaGVja2VkIGFueXdheS4KLQotMjAwOS0wMi0wNCAxNjoyNjoyMyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgY3Jhc2g6IERvbid0IGNyYXNoIG9uIG5vbiBleGlzdGVudCB0YWdzLgotCi0yMDA5LTAyLTA0IDE2OjE3OjM0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgbGVhazogRG9uJ3QgbGVhayB0eXBlIG5hbWUgaW4gZmFpbHVyZSBjYXNlcy4KLQotMjAwOS0wMi0wNCAxNjowNzozMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgY2hlY2s6IERvbid0IGFzc3VtZSBnc3RfcGFkX2dldF9wZWVyIHJldHVybnMgbm9uIE5VTEwgdmFsdWUuCi0KLTIwMDktMDItMDQgMTU6NDE6MjQgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBsZWFrOiBkb24ndCByZXR1cm4gd2l0aG91dCBjYWxsaW5nIHZhX2VuZAotCi0yMDA5LTAyLTAzIDE4OjA0OjQ2ICswMTAwICBKb25hcyBIb2xtYmVyZyA8am9uYXMuaG9sbWJlcmdAYXhpcy5jb20+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6Ci0JICBJbXBsZW1lbnQgdGhlIHN5c3RlbWNsb2NrIHdpdGggZ3N0cG9sbAotCSAgQWRkIGEgcHJvcGVydHkgdG8gc2VsZWN0IHRoZSBjbG9jayB0eXBlLCBjdXJyZW50bHkgUkVBTFRJTUUgYW5kIE1PTk9UT05JQyB3aGVuCi0JICBwb3NpeCB0aW1lcnMgYXJlIGF2YWlsYWJsZS4KLQkgIEltcGxlbWVudCB0aGUgc3lzdGVtY2xvY2sgd2l0aCBHc3RQb2xsIGluc3RlYWQgb2YgR0NvbmQuIFRoaXMgYWxsb3dzIHVzIHRvCi0JICBzY2hlZHVsZSB0aW1lb3V0cyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzc2lvbiBvbiBuZXdlciBrZXJuZWxzIGFuZCB3aXRoIHBwb2xsCi0JICBzdXBwb3J0LiBJdCdzIGFsc28gcmVzaWxpZW50IHRvIGNoYW5nZXMgdG8gdGhlIHN5c3RlbWNsb2NrIGJlY2F1c2Ugb2YgTlRQIG9yCi0JICBzaW1pbGFyLgotCi0yMDA5LTAyLTAzIDE3OjQ5OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdHBvbGwuYzoKLQkqIGdzdC9nc3Rwb2xsLmg6Ci0JICBHc3RQb2xsOiBhZGQgbWV0aG9kcyB0byB1c2UgZ3N0cG9sbCBmb3IgdGltZW91dHMKLQkgIEFkZCBhIHNwZWNpYWwgdGltZXIgbW9kZSBpbiBHc3RQb2xsIHRoYXQgbWFrZXMgaXQgb25seSB1c2UgdGhlIGNvbnRyb2wgc29ja2V0Ci0JICB3aXRoIGEgdGltZW91dCB0byBzY2hlZHVsZSB0aW1lb3V0cy4gQWxzbyBhZGQgYSBwYWlyIG9mIG1ldGhvZHMgdG8gd2FrZXVwIHRoZQotCSAgdGltZW91dCB0aHJlYWQuCi0JICBBUEk6IEdzdFBvbGw6OmdzdF9wb2xsX25ld190aW1lcigpCi0JICBBUEk6IEdzdFBvbGw6OmdzdF9wb2xsX3dyaXRlX2NvbnRyb2woKQotCSAgQVBJOiBHc3RQb2xsOjpnc3RfcG9sbF9yZWFkX2NvbnRyb2woKQotCi0yMDA5LTAyLTAzIDE1OjI3OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBHc3RCYXNlU2luazogdXNlIG5ldyB2YXJpYWJsZSB0byBzY2hlZHVsZSBwcmVyb2xsCi0JICBVc2UgYSBzZXBhcmF0ZSB2YXJpYWJsZSB0byBrZWVwIHRyYWNrIGlmIHdlIG5lZWQgdG8gY2FsbCB0aGUgcHJlcm9sbCBtZXRob2QKLQkgIGluc3RlYWQgb2YgYWJ1c2luZyB0aGUgY29tbWl0ZWQgdmFyaWFibGUuCi0KLTIwMDktMDItMDMgMTI6NTI6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6Ci0JICBHc3RCYXNlU2luazogYXZvaWQgY2FsbGluZyBwcmVyb2xsIG11bHRpcGxlIHRpbWVzCi0JICBGaXggYSByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgZml4IGZvciAjNTY3NzI1IGluIGNvbW1pdAotCSAgMWM3YWI0ZWQ0ZjE5YjYzYmEwNDZhNmYyZmU3ZDA5YTZjMTczNTdjNS4gV2Ugc2hvdWxkIG9ubHkgY2FsbCB0aGUgcHJlcm9sbAotCSAgZnVuY3Rpb24gb25jZSBuYW1lbHkgd2hlbiB3ZSBkaWQgbm90IHlldCBjb21taXQgdGhlIHN0YXRlIGNoYW5nZS4KLQkgIEFkZCBhIHVuaXQgdGVzdCB0byBjaGVjayB0aGF0IHdlIGNhbGwgdGhlIHByZXJvbGwgZnVuY3Rpb24gd2hlbiBpbnRlcnJ1cHRpbmcgdGhlCi0JICBjbG9ja193YWl0IChzZWUgIzU2NzcyNSkuCi0JICBBZGQgYSB1bml0IHRlc3QgdG8gY2hlY2sgdGhhdCB3ZSBvbmx5IGNhbGwgdGhlIHByZXJvbGwgZnVuY3Rpb24gb25jZS4KLQotMjAwOS0wMS0yOSAxMzozMDo0NSArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBGb3JjZSByZWNvbmZpZ3VyZSBvZiBiYXNldHJhbnNmb3JtIHRvIHJlY2hlY2sgYWxsb2MgcmVxdWVzdAotCSAgV2hpbGUgcmVjb25maWd1cmluZyBhIGJhc2V0cmFuc2Zvcm0gZWxlbWVudCB3ZSBuZWVkIGFsc28gdG8gcmVjaGVjawotCSAgdGhlIGFsbG9jIHJlcXVlc3QuIEJlY2F1c2UgaXQncyBwb3NzaWJsZSB0aGF0IGR1ZSB0byBjYXBzIGNoYW5nZXMKLQkgIHRoZSBwcm94eV9hbGxvYyBzdGF0ZSBpcyBub3QgY29ycmVjdCBhbnltb3JlLgotCSAgKFJlLWNvbW1pdCBhZnRlciBkaXNjdXNpb24gd2l0aCBXaW0gb24gSVJDKQotCi0yMDA5LTAyLTAyIDE0OjE5OjU3ICswMTAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICBnc3RyZWdpc3RyeWJpbmFyeTogTWFrZSBpdCBjb21waWxlIHdpdGggR1NUX0RJU0FCTEVfR1NUX0RFQlVHLgotCi0yMDA5LTAxLTMxIDIxOjM0OjI4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGRvY3MvLmdpdGlnbm9yZToKLQkqIGRvY3MvbGlicy90bXBsLy5naXRpZ25vcmU6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC8uZ2l0aWdub3JlOgotCSAgcmVwbzogUmVhcnJhbmdlIGdpdGlnbm9yZXMgaW4gZG9jcyBzdWJkaXIKLQkgIHRtcGwgZGlyZWN0b3JpZXMgYXJlIHJlbW92ZWQgYnkgbWFrZSBjbGVhbiwgd2hpY2ggZGVsZXRlcyB0aGUKLQkgIC5naXRpZ25vcmUuIFVzZSBhIC5naXRpZ25vcmUgaGlnaGVyIHVwIHRvIGlnbm9yZSB0aGUgdG1wbCBkaXJzIGluc3RlYWQuCi0KLTIwMDktMDEtMzEgMjE6MzI6MzYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3N0cmVzcy5jOgotCSAgY2hlY2s6IEZpeCBjb21tZW50IGFib3V0IHRoZSB0aW1lb3V0IGZvciBnZW5lcmljIHN0cmVzcyB0ZXN0LgotCSAgU2V0dGluZyB0aGUgdGltZW91dCB0byAwIG1ha2VzIGl0IGluZmluaXRlLCBzbyBmaXggdGhlIGNvbW1lbnQKLQkgIGFib3ZlIGFjY29yZGluZ2x5LgotCi0yMDA5LTAxLTMxIDIxOjMxOjQ4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOgotCSAgY2hlY2s6IEluY3JlYXNlIHRpbWVvdXQgZm9yIHRoZSB0ZWUgdGVzdAotCSAgVGhlIHRlZSBzdHJlc3MgdGVzdCBrZWVwcyB0aW1pbmcgb3V0IGZvciBtZSBvbiBvbmUgb2YgdGhlIHNsb3dlcgotCSAgbWFjaGluZXMsIHNvIGluY3JlYXNlIHRoZSB0aW1lb3V0IHRvIDMgbWlucy4KLQotMjAwOS0wMS0zMCAxNDo1NjowOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBVcGRhdGUgdGhlIHdpbjMyIGNvbmZpZy5oLmluIHRlbXBsYXRlIGZyb20gdGhlIG1haW4gY29uZmlnLmguaW4KLQotMjAwOS0wMS0zMCAyMjoxODoxNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgIEFkZCByZWxlYXNlaW5mbyB3aXRoIG9ubGluZSB1cmwuCi0KLTIwMDktMDEtMzAgMTg6MTc6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0aW50ZXJmYWNlLmg6Ci0JKiBnc3QvZ3N0dXJpLmg6Ci0JICBSZW1vdmUgYnJva2VuIGNsYXNzIHRvIGludGVyZmFjZSBjYXN0IG1hY3JvcyBmcm9tIEdzdFVyaUhhbmRsZXIgYW5kIEdzdEltcGxlbWVudHNJbnRlcmZhY2UgaGVhZGVycwotCSAgUmVtb3ZlIGNsYXNzLXRvLWludGVyZmFjZS1zdHJ1Y3QgY2FzdCBtYWNyb3Mgd2hpY2ggZG9uJ3Qgd29yaywKLQkgIGRvbid0IG1ha2Ugc2Vuc2UsIGFuZCBpbiBzb21lIGNhc2VzIHdvdWxkbid0IGV2ZW4gY29tcGlsZSBpZgotCSAgdXNlZC4gUmVtb3ZhbCBzaG91bGQgYmUgb2sgc2VlaW5nIHRoYXQgY29kZSB3aGljaCB1c2VzIGFueSBvZgotCSAgdGhlc2UgaXMgYnJva2VuIGFuZCBib3VuZCB0byBjcmFzaC4gRml4ZXMgIzU2NTYwNy4KLQkgIEFQSTogcmVtb3ZlIEdTVF9JTVBMRU1FTlRTX0lOVEVSRkFDRV9DTEFTUwotCSAgQVBJOiByZW1vdmUgR1NUX0lTX0lNUExFTUVOVFNfSU5URVJGQUNFX0NMQVNTCi0JICBBUEk6IHJlbW92ZSBHU1RfVVJJX0hBTkRMRVJfQ0xBU1MKLQotMjAwOS0wMS0zMCAxNjoyODoxNCArMDAwMCAgSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIGRvY3MvZ3N0L3RtcGwvLmdpdGlnbm9yZToKLQkgIFJlbW92ZSBnaXRpZ25vcmUgaW4gZG9jcy9nc3QvdG1wbC4KLQkgIFRoaXMgZ2l0aWdub3JlIGZpbGUgc2VlbXMgdG8gZ2V0IGRlbGV0ZWQgYnkgdGhlIGJ1aWxkLCBhbmQgZG9lc24ndAotCSAgc2VlbSB0byBiZSBkb2luZyBhbnl0aGluZyB1c2VmdWwgYW55d2F5LgotCi0yMDA5LTAxLTMwIDE2OjIxOjU1ICswMDAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogY29tbW9uOgotCSAgQnVtcCBjb21tb24KLQotMjAwOS0wMS0zMCAxNDo1OTowNyArMDAwMCAgSmFuIFNjaG1pZHQgLSBTdW4gTWljcm9zeXN0ZW1zIC0gRHVibGluIElyZWxhbmQgPGpzMjEyNDE5QGZsYWlsLihub25lKT4KLQotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBGaXggY29tcGlsYXRpb24gd2FybmluZyB3aXRoIEZvcnRlLgotCi0yMDA5LTAxLTMwIDEwOjQzOjU1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIFJldmVydCAiQ2hlY2sgc3VnZ2VzdGVkIGNhcHMgZm9yIHByb3h5IGFsbG9jIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA1MGFmZDQ1OTU3OTE5MTc3MmY0MmQxYTQ0ZjM5NTllNTMwYzVjMjY5LgotCSAgSXQgYnJlYWtzIHRoZSBpbnRlcmFjdGl2ZSB0ZXN0LXNjYWxlIHVuaXQgdGVzdC4KLQotMjAwOS0wMS0zMCAxMDo0Mjo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBSZXZlcnQgIkZvcmNlIHJlY29uZmlndXJlIG9mIGJhc2V0cmFuc2Zvcm0gdG8gcmVjaGVjayBhbGxvYyByZXF1ZXN0IgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAzYTQ2MDJkNzcxOWRlM2MzZWY3YWVjZTY4YjVmOTQ4OWQwNzgwMTYyLgotCSAgSXQgYnJlYWtzIHRoZSBpbnRlcmFjdGl2ZSB0ZXN0LXNjYWxlIHVuaXQgdGVzdC4KLQotMjAwOS0wMS0zMCAxMDoyOTo1NiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgQWxsb2NhdGUgZXZlcnl0aGluZyB0aGF0IGlzIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdHJ5IHdpdGggZ19tYWxsb2MwKCkKLQkgIEFsbG9jYXRlIGV2ZXJ5IHN0cnVjdHVyZSB0aGF0IGlzIGRpcmVjdGx5IHdyaXR0ZW4gdG8gdGhlIGJpbmFyeQotCSAgcmVnaXN0cnkgd2l0aCBnX21hbGxvYzAoKS4gT3RoZXJ3aXNlIHNvbWUgcGFydHMgb2YgaXQgd2lsbCBiZQotCSAgdW5pbml0aWFsaXplZCAoc3RydWN0IHBhZGRpbmcgYmVjYXVzZSBvZiBhbGlnbm1lbnQsIGV0YykgYW5kCi0JICB2YWxncmluZCB3aWxsIGNvbXBsYWluIGFib3V0IGl0LgotCi0yMDA5LTAxLTMwIDA4OjMwOjI4ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSAgVXNlIGEgc3ltYm9saWMgbGluayBmb3IgdGhlIHByZS1jb21taXQgY2xpZW50LXNpZGUgaG9vawotCi0yMDA5LTAxLTI5IDE1OjQ5OjI0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOgotCSAgTWFrZSBzdXJlIHRvIHRha2UgYSBjb3B5IG9mIHRoZSBzdHJpbmdzIHdlJ3JlIGdvaW5nIHRvIGZyZWUgbGF0ZXIuCi0KLTIwMDktMDEtMjYgMTc6MTU6MTUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIEFkZCBsb2dnaW5nIGluIGZhaWx1cmUgY2FzZS4gQWRkIG1vcmUgZGV0YWlscyB0byBhIHRvZG8gY29tbWVudC4KLQotMjAwOS0wMS0yNiAxNzoxNDowNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvYmVuY2htYXJrcy9pbml0LmM6Ci0JICBBZGQgYSB0cml2aWFsIHNvdXJjZSBmb3IgdHJhY2tpbmcgZ3N0X2luaXQgdGltZSBhY2Nyb3NzIHZlcnNpb25zLgotCi0yMDA5LTAxLTI2IDE3OjEzOjA5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgQWRkIHRvZG8gY29tbWVudHMuCi0KLTIwMDktMDEtMjkgMTM6Mzk6MjkgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgQ2hlY2sgc3VnZ2VzdGVkIGNhcHMgZm9yIHByb3h5IGFsbG9jCi0JICBCZWNhdXNlIHdlIGFyZSB0cnlpbmcgdG8gcmVzb2x2ZSBhIHN1Z2dlc3Rpb24gaGVyZSB3ZSBkb24ndCBuZWVkCi0JICB0byBjaGVjayBvbiBjYXBzIGZvciBwcm94eV9hbGxvYyBidXQgd2UgbmVlZCB0byBjaGVjayBvbiB0aGUgc3VnZ2VzdGVkCi0JICBjYXBzIGluc3RlYWQuCi0KLTIwMDktMDEtMjkgMTM6MzA6NDUgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgRm9yY2UgcmVjb25maWd1cmUgb2YgYmFzZXRyYW5zZm9ybSB0byByZWNoZWNrIGFsbG9jIHJlcXVlc3QKLQkgIFdoaWxlIHJlY29uZmlndXJpbmcgYSBiYXNldHJhbnNmb3JtIGVsZW1lbnQgd2UgbmVlZCBhbHNvIHRvIHJlY2hlY2sKLQkgIHRoZSBhbGxvYyByZXF1ZXN0LiBCZWNhdXNlIGl0J3MgcG9zc2libGUgdGhhdCBkdWUgdG8gY2FwcyBjaGFuZ2VzCi0JICB0aGUgcHJveHlfYWxsb2Mgc3RhdGUgaXMgbm90IGNvcnJlY3QgYW55bW9yZS4KLQotMjAwOS0wMS0yNyAyMzoxNDo0OSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkgIEltcHJvdmUgdGhlIGRvY3MgZm9yIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jKCkuCi0JICBJdHMgbWVudGlvbmVkIGluIHRoZSBzZWN0aW9uIGRvY3MsIGJ1dCBsZXRzIHJlcGVhdCBhdCB0aGUgZnVuY3Rpb24gZG9jcyB0aGF0IHRoZSBjYWxsYmFjayBjYW4gYmUgaW52b2tlZCBmcm9tIGFueSB0aHJlYWQuCi0KLTIwMDktMDEtMjcgMTc6NTM6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgIGRvY3M6IGRvbid0IHVzZSBFUlJPUl9DRkxBR1Mgd2hlbiBidWlsZGluZyAkZG9jbW9kdWxlLXNjYW4uYwotCSAgV2UgZG9uJ3Qgd2FudCB0byB1c2UgLVdhbGwgLVdlcnJvciBhbmQgZnJpZW5kcyB3aGVuIGJ1aWxkaW5nIHRoZSBndGstZG9jLWdlbmVyYXRlZAotCSAgJGRvY21vZHVsZS1zY2FuLmMsIHNpbmNlIHdlIGNhbid0IGVhc2lseSBmaXggc3R1ZmYgaWYgYSBjZXJ0YWluIGd0ay1kb2MvY29tcGlsZXIKLQkgIGNvbWJpbmF0aW9uIGJyZWFrcyB0aGUgYnVpbGQuIEZpeGVzIGJ1aWxkIG9uIHVidW50dSBpbnRyZXBpZC4KLQotMjAwOS0wMS0yNyAxNzo1MjoxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICBNYWtlIGdpdCBpZ25vcmUgYmFja3VwIGZpbGVzLgotCi0yMDA5LTAxLTI2IDIxOjI5OjAyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JICBEb24ndCBjaGVjayB0aW1lc3RhbXAgaGVyZSwgaXRzIGRvbmUgaW4gdGhlIGNhbGxlZCBmdW5jdGlvbiBhbnl3YXkuCi0KLTIwMDktMDEtMjYgMTI6NTI6MTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3Rwb2xsLmM6Ci0JICBBdm9pZCB1bm5lZWRlZCByZWFkcyBmcm9tIHRoZSBjb250cm9sIHNvY2tldAotCSAgQWRkIGEgbmV3IHZhcmlhYmxlIHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIHN0YXR1cyBvZiB0aGUgY29udHJvbCBzb2NrZXQuIFRoaXMKLQkgIGFsbG93cyB1cyB0byBhdm9pZCBkb2luZyBhIHJlYWQoKSBvbiB0aGUgY29udHJvbCBzb2NrZXQgd2hlbiB3ZSBkaWQgbm90IHdyaXRlCi0JICBhbnl0aGluZyB0byBpdC4KLQkgIEZpeGVzICM1Njg0MzguCi0KLTIwMDktMDEtMjUgMjI6MTc6MzEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBBZGQgbW9yZSBkZWJ1ZyBsb2dnaW5nIGZvciBmYWlsdXJlIGNhc2VzLgotCi0yMDA5LTAxLTI1IDIyOjExOjMyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uaDoKLQkgIERvY3VtZW50IHRoYXQgR1NUX1BMVUdJTl9ERUZJTkUgbWFjcm9zIHVzZSBQQUNLQUdFIGRlZmluZS4gRml4ZXMgIzU1OTcyMi4KLQkgIFBBQ0tBR0UgaXMgZGVmaW5lZCBieSBhdXRvZm9vLiBJZiBwZW9wbGUgdXNlIHNvbWV0aGluZyBkaWZmZXJlbnQsIHRoZXkgbWlnaHQgd2FudCB0byBkZWZpbmUgaXQgdGhlbXNlbGYuCi0KLTIwMDktMDEtMjUgMTc6NTg6NTIgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgRml4IHR5cG8KLQotMjAwOS0wMS0yNCAyMTo1MDowOCArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIE9ubHkgZnJlZSBsaXN0IG9mIGJ1ZmZlcnMgb25jZQotCi0yMDA5LTAxLTI0IDE0OjM3OjE0ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBkb2NzL1JFQURNRToKLQkgIEZpeCB0eXBvCi0KLTIwMDktMDEtMjMgMjM6MDg6MDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogcG8vLmdpdGlnbm9yZToKLQkgIElnbm9yZSBhbm90aGVyIGZpbGUKLQotMjAwOS0wMS0yMyAyMTo0NDoxMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBhZGQgZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbiB0byB0aGUgd2luMzIgZGVmcyBmaWxlCi0KLTIwMDktMDEtMjMgMTY6MDk6MzUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgVXBkYXRlIHdpbjMyIGNvbmZpZy5oIGZvciAwLjEwLjIyLjEgZGV2IGN5Y2xlLi4uCi0KLTIwMDktMDEtMjMgMTY6MDg6MDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogLmdpdGlnbm9yZToKLQkqIGRvY3MvZ3N0Ly5naXRpZ25vcmU6Ci0JKiBkb2NzL2xpYnMvLmdpdGlnbm9yZToKLQkqIGRvY3MvbGlicy90bXBsLy5naXRpZ25vcmU6Ci0JKiBsaWJzL2dzdC9iYXNlLy5naXRpZ25vcmU6Ci0JKiBsaWJzL2dzdC9jaGVjay8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvY29udHJvbGxlci8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sLy5naXRpZ25vcmU6Ci0JKiBsaWJzL2dzdC9uZXQvLmdpdGlnbm9yZToKLQkqIHBsdWdpbnMvaW5kZXhlcnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkgIFVwZGF0ZSBhIGJ1bmNoIG9mIGdpdGlnbm9yZXMgdG8gY2xlYW4gdXAgbXkgZ2l0IHN0YXR1cyBvdXRwdXQKLQotMjAwOS0wMS0yMyAwOTo1NDo1MyArMDEwMCAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBGaXggbGlua2luZyBmYWlsdXJlcyBvbiBTb2xhcmlzLiBGaXhlcyBidWcgIzU2ODQ4MS4KLQkgIExpbmsgbGliZ3N0cmVhbWVyIHdpdGggJChMSUJNKSBhcyBpdCB1c2VzIG1hdGggZnVuY3Rpb25zLgotCSAgQWRkIGEgY29uZmlndXJlIGNoZWNrIGZvciBzb2NrZXQgYW5kIG5zbCBsaWJyYXJ5IGFuZCBhZGQKLQkgIHRoZW0gdG8gTElCUyBpZiB0aGV5J3JlIGZvdW5kLiBUaGlzIGlzIG5lZWRlZCBvbiBTb2xhcmlzCi0JICBmb3Igc29ja2V0KCkgYW5kIGdldGhvc3RieW5hbWUoKS4KLQotMjAwOS0wMS0yMiAxODowMjoxOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBVcGRhdGUgY29tbW9uIHNuYXBzaG90LgotCi0yMDA5LTAxLTIyIDEzOjU4OjU3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSAgSW1wcm92ZSBkZWJ1ZyBvdXRwdXQgYnkgbG9nZ2luZyB0aGUgb2Zmc2V0cy4gRml4ZXMgYnVnICM1Njg2NzguCi0JICBJbiBjcmVhdGUoKSBhbHNvIGxvZyB0aGUgb2Zmc2V0cyBhbmQgbm90IG9ubHkgdGhlCi0JICBidWZmZXIgc2l6ZS4KLQotMjAwOS0wMS0yMiAxMzo1MTowMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb21tb246Ci0JICBGaXggcHJlLWNvbW1pdCBob29rCi0KLTIwMDktMDEtMjIgMTI6NTI6NTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBzc2g6Ly9naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC9nc3RyZWFtZXIvZ3N0cmVhbWVyCi0KLTIwMDktMDEtMjIgMTE6NTQ6NDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBBZGQgRG9jIGZvciBuZXcgdHlwZWZpbmQgbWV0aG9kLgotCi0yMDA5LTAxLTIyIDEwOjQ1OjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQgLT4gMC4xMC4yMi4xCi0KLTIwMDktMDEtMjIgMTA6MTY6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBzc2g6Ly9naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC9nc3RyZWFtZXIvZ3N0cmVhbWVyCi0KLTIwMDktMDEtMjIgMDU6MzU6MDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBJbnN0YWxsIGFuZCB1c2UgcHJlLWNvbW1pdCBpbmRlbnRhdGlvbiBob29rIGZyb20gY29tbW9uCi0KLTIwMDktMDEtMjEgMTI6NTA6MjkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBJZiBubyB0eXBlIHdhcyBmb3VuZCB1c2luZyB0aGUgdHlwZWZpbmQgZnVuY3Rpb25zLCB0cnkgZG9pbmcgYW4gdXBzdHJlYW0gVVJJIHF1ZXJ5IHRvIGd1ZXNzIHRoZSB0eXBlIGZyb20gdGhlIGV4dGVuc2lvbi4gU2VlICM1NjY2NjEuCi0KLTIwMDktMDEtMjEgMTI6NDg6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaDoKLQkgIEFkZCBuZXcgdHlwZWZpbmcgaGVscGVyIGZ1bmN0aW9uIHRvIGd1ZXNzIHRoZSBjYXBzIGJhc2VkIG9uIHRoZSBmaWxlIGV4dGVuc2lvbi4gU2VlICM1NjY2NjEuIEFQSTogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbigpCi0KLTIwMDktMDEtMjEgMTI6NDU6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgotCSAgQWxsb3cgYWRkaW5nIGEgdHlwZWZpbmRlciB3aXRob3V0IGEgdHlwZWZpbmQgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byBtYXAgdGhlIGNhcHMgdG8gdGhlIGV4dGVuc2lvbi4gU2VlICM1NjY2NjEuCi0KLTIwMDktMDEtMjEgMTI6NDM6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIFVwZGF0ZSB0aGUgbGFzdF9idWZmZXIgZXhhY3RseSB3aXRoIHRoZSBidWZmZXIgdGhhdCBjYXVzZWQgdGhlIHByZXJvbGwgYW5kIGFsc28gY2FsbCB0aGUgcHJlcm9sbCBtZXRob2Qgd2l0aCB0aGF0IHByZXJvbGwgYnVmZmVyLiBGaXhlcyAjNTY3NzI1LgotCi0yMDA5LTAxLTIxIDEyOjIxOjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSAgZG8gbm90IGNhbGwgdGhlIHVubGluayBmdW5jdGlvbiBvbiB0aGUgdGFyZ2V0IHBhZCB3aGVuIHRoZSBnaG9zdHBhZCBpcyB1bmxpbmtlZC4gQWRkIHNvbWUgdW5pdCB0ZXN0cyBmb3IgdGhpcyBiZWhhdmlvdXIuIEZpeGVzICM1NjY5MzYuCi0KLTIwMDktMDEtMjEgMDQ6Mjk6MjUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JICBhdXRvZ2VuLnNoIDogVXNlIGdpdCBzdWJtb2R1bGUKLQotPT09IHJlbGVhc2UgMC4xMC4yMiA9PT0KLQotMjAwOS0wMS0xOSAyMjo1ODo1OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiBwby9MSU5HVUFTOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjIyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbGVhc2UgMC4xMC4yMgotCi0yMDA5LTAxLTE5IDIxOjIwOjQwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwOS0wMS0xNyAyMTowNDo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGJ1cy5jOiBGaXggb3JkZXIgb2YgbWVtYmVycyBpbiBHc3RCdXNTb3VyY2Ugc3RydWN0dXJlIC0gdGhlIGZpcnN0IG1lbWJlciBtdXN0IGJlIHRoZSBwYXJlbnQgc3RydWN0dXJlIGllLiBHU291Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19zZXRfbWFpbl9jb250ZXh0KSwgKGdzdF9idXNfY3JlYXRlX3dhdGNoKToKLQkgIEZpeCBvcmRlciBvZiBtZW1iZXJzIGluIEdzdEJ1c1NvdXJjZSBzdHJ1Y3R1cmUgLSB0aGUgZmlyc3QgbWVtYmVyCi0JICBtdXN0IGJlIHRoZSBwYXJlbnQgc3RydWN0dXJlIGllLiBHU291cmNlLiBTaG91bGQgbWFrZSBidXMgc291cmNlcwotCSAgYXR0YWNoZWQgdG8gbm9uLWRlZmF1bHQgbWFpbiBjb250ZXh0cyB3b3JrIGluIGFsbCBjYXNlcyBub3cgKGllLgotCSAgcHJpbWFyaWx5IGluIGNhc2VzIHdoZXJlIHRoZSBjYWxsYmFjayBoYXMgYSBub24tTlVMTCB1c2VyIGRhdGEKLQkgIGFyZ3VtZW50KS4gRml4ZXMgIzU2MjE3MC4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOiAodGVzdF9jdXN0b21fbWFpbl9jb250ZXh0KToKLQkgIEFkZCB1bml0IHRlc3QgZm9yIHRoZSBhYm92ZSwgYmFzZWQgb24gY29kZSBieQotCSAgSnVzdGluIEthcm5lZ2VzIDxqdXN0aW4gYXQgYWZmaW5peCBjb20+LgotCi0yMDA5LTAxLTE1IDEwOjA0OjM3ICswMDAwICBKb25hcyBIb2xtYmVyZyA8am9uYXMuaG9sbWJlcmdAYXhpcy5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuaDogQSBzbWFsbCBkb2N1bWVudGF0aW9uIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEpvbmFzIEhvbG1iZXJnIDxqb25hcyBkb3QgaG9sbWJlcmcgYXQgYXhpcyBkb3QgY29tPgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBBIHNtYWxsIGRvY3VtZW50YXRpb24gZml4LgotCi0yMDA5LTAxLTExIDA5OjQ2OjUyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3R1dGlscy5oOiBJbml0aWFsaXplIGdfb25jZV9pbml0KiBkYXRhIHdpdGggMC4gRml4ZXMgYnVnICM1NjcyMjUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBJbml0aWFsaXplIGdfb25jZV9pbml0KiBkYXRhIHdpdGggMC4gRml4ZXMgYnVnICM1NjcyMjUuCi0KLTIwMDktMDEtMDkgMjM6Mzc6MTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IHByZS1yZWxlYXNlIDAuMTAuMjEuMwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIHByZS1yZWxlYXNlIDAuMTAuMjEuMwotCi0yMDA5LTAxLTA5IDE1OjQzOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLio6IEZpeCBkb2N1bWVudGF0aW9uIGZvciB0aGUgd2FpdF9jbG9jayBtZXRob2QsIHJlbmFtZSBiYXNlc2luayAtPiBzaW5rIGZvciBjb25zaXN0ZW5jeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCi0JICAoZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgRml4IGRvY3VtZW50YXRpb24gZm9yIHRoZSB3YWl0X2Nsb2NrIG1ldGhvZCwgcmVuYW1lIGJhc2VzaW5rIC0+IHNpbmsKLQkgIGZvciBjb25zaXN0ZW5jeS4KLQotMjAwOS0wMS0wOCAxMzo0MToxOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0LmM6IENyZWF0ZSBhIHJlZ2lzdHJ5IGlmIHRoZXJlIGlzIG5vbmUgYWxzbyB3aGVuIHRoZSBvcHRpb24gZm9yIGdzdC1kaXNhYmxlLXJlZ2lzdHJ5LXVwZGF0ZSBoYXMgYmVlbiBzZWxlY3RlZC4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICBDcmVhdGUgYSByZWdpc3RyeSBpZiB0aGVyZSBpcyBub25lIGFsc28gd2hlbiB0aGUgb3B0aW9uIGZvcgotCSAgZ3N0LWRpc2FibGUtcmVnaXN0cnktdXBkYXRlIGhhcyBiZWVuIHNlbGVjdGVkLiBGaXhlcyAjNTY3MDAyCi0KLTIwMDktMDEtMDYgMTg6MTA6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogUmVmIG5ldyBlbnVtIHR5cGUgaW4gZ3N0X2luaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKLQkgIFJlZiBuZXcgZW51bSB0eXBlIGluIGdzdF9pbml0LgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEFkZCByZWNlbnRseS1hZGRlZCBBUEkuCi0KLTIwMDktMDEtMDYgMTc6NTg6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFkZCBBUEkgZm9yIG1ha2luZyBhIEdTdHJlYW1lciBwbHVnaW4gJ2RlcGVuZGVudCcgb24gZXh0ZXJuYWwgZmlsZXMsIGRpcmVjdG9yaWVzIG9yIGVudmlyb25tZW50IHZhcmlhYmxlcywgc28gdGhhdCBHUy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6OgotCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDogKEdzdFBsdWdpbkRlcCksIChfR3N0UGx1Z2luUHJpdmF0ZSk6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5faW5pdCksIChnc3RfcGx1Z2luX2ZpbmFsaXplKSwKLQkgIChnc3RfcGx1Z2luX2NsYXNzX2luaXQpLCAoZ3N0X3BsdWdpbl9saXN0X2ZyZWUpLAotCSAgKGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfZW52X3ZhcnNfaGFzaCksCi0JICAoX3ByaXZfcGx1Z2luX2RlcHNfZW52X3ZhcnNfY2hhbmdlZCksCi0JICAoZ3N0X3BsdWdpbl9leHRfZGVwX2V4dHJhY3RfZW52X3ZhcnNfcGF0aHMpLAotCSAgKGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfaGFzaF9mcm9tX3N0YXRfZW50cnkpLAotCSAgKGdzdF9wbHVnaW5fZXh0X2RlcF9kaXJlbnRyeV9tYXRjaGVzKSwKLQkgIChnc3RfcGx1Z2luX2V4dF9kZXBfc2Nhbl9kaXJfYW5kX21hdGNoX25hbWVzKSwKLQkgIChnc3RfcGx1Z2luX2V4dF9kZXBfc2Nhbl9wYXRoX3dpdGhfZmlsZW5hbWVzKSwKLQkgIChnc3RfcGx1Z2luX2V4dF9kZXBfZ2V0X3N0YXRfaGFzaCksCi0JICAoX3ByaXZfcGx1Z2luX2RlcHNfZmlsZXNfY2hhbmdlZCksIChnc3RfcGx1Z2luX2V4dF9kZXBfZnJlZSksCi0JICAoZ3N0X3BsdWdpbl9leHRfZGVwX3N0cnZfZXF1YWwpLCAoZ3N0X3BsdWdpbl9leHRfZGVwX2VxdWFscyksCi0JICAoZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSksIChnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5X3NpbXBsZSk6Ci0JICAqIGdzdC9nc3RwbHVnaW4uaDogKEdzdFBsdWdpblByaXZhdGUpLCAoR3N0UGx1Z2luRmxhZ3MpLAotCSAgKEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX05PTkUpLAotCSAgKEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1JFQ1VSU0UpLAotCSAgKEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1BBVEhTX0FSRV9ERUZBVUxUX09OTFkpLAotCSAgKEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19TVUZGSVgpLAotCSAgKEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyksIChHc3RQbHVnaW5GaWx0ZXIpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9mZWF0dXJlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGx1Z2luX2RlcCksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX3BsdWdpbiksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW5fZGVwX3N0cnYpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW5fZGVwKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfcGx1Z2luKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6IChHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fU1RSKSwKLQkgIChHc3RCaW5hcnlQbHVnaW5FbGVtZW50KSwgKF9Hc3RCaW5hcnlEZXApLCAoR3N0QmluYXJ5RGVwKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChnc3RfcmVnaXN0cnlfeG1sX3NhdmVfcGx1Z2luKToKLQkgIEFkZCBBUEkgZm9yIG1ha2luZyBhIEdTdHJlYW1lciBwbHVnaW4gJ2RlcGVuZGVudCcgb24gZXh0ZXJuYWwgZmlsZXMsCi0JICBkaXJlY3RvcmllcyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHNvIHRoYXQgR1N0cmVhbWVyIGtub3dzIHdoZW4KLQkgIGl0IG5lZWRzIHRvIHJlLWxvYWQgR1N0cmVhbWVyIHBsdWdpbnMgdGhhdCB3cmFwIG90aGVyIHBsdWdpbiBzeXN0ZW1zLgotCSAgRml4ZXMgYnVnICMzNTA0NzcuCi0JICBBUEk6IGFkZCBnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5KCkKLQkgIEFQSTogYWRkIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlKCkKLQotMjAwOS0wMS0wNiAxMzowMDoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBBZGQgbGliZ3N0YXBwLTAuMTAgZnJvbSAtYmFzZSB0byBzZWFyY2ggcGF0aCBhbmQgcmVtb3ZlIHRoZSBvbGQgbGliIGZyb20gLWJhZCBmcm9tIHRoZSBzZWFyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgotCSAgQWRkIGxpYmdzdGFwcC0wLjEwIGZyb20gLWJhc2UgdG8gc2VhcmNoIHBhdGggYW5kIHJlbW92ZSB0aGUgb2xkCi0JICBsaWIgZnJvbSAtYmFkIGZyb20gdGhlIHNlYXJjaCBwYXRoLgotCi0yMDA5LTAxLTA1IDE1OjQyOjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFJlbGVhc2UgdGhlIG9iamVjdCBsb2NrIGJlZm9yZSBjYWxsaW5nIHRoZSBxdWVyeSBjb252ZXJ0IHBhZCBmdW5jdGlvbnMgdG8gYXZvaWQgZGVhZGxvY2tzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX2xhc3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX3BhdXNlZCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6Ci0JICBSZWxlYXNlIHRoZSBvYmplY3QgbG9jayBiZWZvcmUgY2FsbGluZyB0aGUgcXVlcnkgY29udmVydCBwYWQgZnVuY3Rpb25zCi0JICB0byBhdm9pZCBkZWFkbG9ja3MuCi0KLTIwMDktMDEtMDUgMTU6NDE6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidXMuYzogVGhlIGxvY2sgb3JkZXIgc2hvdWxkIGJlIG1haW5jb250ZXh0ID4gT0JKRUNUX0xPQ0sgc28gd2UgbmVlZCB0byByZWxlYXNlIHRoZSBvYmplY3QgbG9jayB3aGVuIHdha2luZyB1cC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfd2FrZXVwX21haW5fY29udGV4dCk6Ci0JICBUaGUgbG9jayBvcmRlciBzaG91bGQgYmUgbWFpbmNvbnRleHQgPiBPQkpFQ1RfTE9DSyBzbyB3ZSBuZWVkIHRvIHJlbGVhc2UKLQkgIHRoZSBvYmplY3QgbG9jayB3aGVuIHdha2luZyB1cCB0aGUgbWFpbmxvb3AgdG8gYXZvaWQgZGVhZGxvY2tzLgotCi0yMDA5LTAxLTA1IDEwOjE0OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IFVzZSBhbiBpdGVyYXRvciB0byBzZXQgdGhlIGNsb2NrIGFuZCB0aGUgaW5kZXggc28gdGhhdCB3ZSBjYW4gcmVsZWFzZSB0aGUgb2JqZWN0IGxvY2sgYXBwcm9wcmlhdGVseS4gRmkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3NldF9pbmRleF9mdW5jKSwgKGdzdF9iaW5fc2V0X2Nsb2NrX2Z1bmMpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpOgotCSAgVXNlIGFuIGl0ZXJhdG9yIHRvIHNldCB0aGUgY2xvY2sgYW5kIHRoZSBpbmRleCBzbyB0aGF0IHdlIGNhbiByZWxlYXNlCi0JICB0aGUgb2JqZWN0IGxvY2sgYXBwcm9wcmlhdGVseS4gRml4ZXMgIzU2NjM5My4KLQotMjAwOS0wMS0wMyAxODozOTozOCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBVc2UgdGhlIG5hbWUgb2YgdGhlIHBhZHMgaW5zdGVhZCBvZiBhIHBvaW50ZXIsIGhlbHBzIGluIGRlYnVnZ2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSk6Ci0JICBVc2UgdGhlIG5hbWUgb2YgdGhlIHBhZHMgaW5zdGVhZCBvZiBhIHBvaW50ZXIsIGhlbHBzIGluIGRlYnVnZ2luZy4KLQotMjAwOS0wMS0wMyAxODoxNjo1NCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdGluZGV4LmM6IEFkZCBhIGRlYnVnZ2luZyBjYXRlZ29yeSBmb3IgR3N0SW5kZXgsIGZpcnN0IGxpdHRsZSBzdGVwIGluIG1ha2luZyBpbmRleGluZyB0b3Atbm90Y2guCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfZ2V0X3R5cGUpOgotCSAgQWRkIGEgZGVidWdnaW5nIGNhdGVnb3J5IGZvciBHc3RJbmRleCwgZmlyc3QgbGl0dGxlIHN0ZXAgaW4gbWFraW5nCi0JICBpbmRleGluZyB0b3Atbm90Y2guCi0KLTIwMDktMDEtMDMgMTg6MTA6MDggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC86IEFzc2lnbiBkZWJ1ZyBzdGF0ZW1lbnRzIHRvIHJlbGV2YW50IGNhdGVnb3JpZXMgaW5zdGVhZCBvZiB0aGUgJ2RlZmF1bHQnIGNhdGVnb3J5IHNvIHRoZXkgZG9uJ3QgZ2V0IGxvc3QgaW4gZGVidS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwpLAotCSAgKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2Rpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZCk6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhZF9wcm94eV9nZXRjYXBzKSwgKGdzdF9wYWRfcHJveHlfc2V0Y2FwcyksCi0JICAoZ3N0X3BhZF9hZGRfZGF0YV9wcm9iZV9mdWxsKSwgKGdzdF9wYWRfYWRkX2V2ZW50X3Byb2JlX2Z1bGwpLAotCSAgKGdzdF9wYWRfYWRkX2J1ZmZlcl9wcm9iZV9mdWxsKSwgKGdzdF9wYWRfcmVtb3ZlX2RhdGFfcHJvYmUpLAotCSAgKGdzdF9wYWRfcmVtb3ZlX2V2ZW50X3Byb2JlKSwgKGdzdF9wYWRfcmVtb3ZlX2J1ZmZlcl9wcm9iZSk6Ci0JICBBc3NpZ24gZGVidWcgc3RhdGVtZW50cyB0byByZWxldmFudCBjYXRlZ29yaWVzIGluc3RlYWQgb2YgdGhlICdkZWZhdWx0JwotCSAgY2F0ZWdvcnkgc28gdGhleSBkb24ndCBnZXQgbG9zdCBpbiBkZWJ1Z2dpbmcuCi0KLTIwMDktMDEtMDEgMjE6Mjc6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGRlYnVndXRpbHMuYzogQWRkIHNvbWUgaWRlYXMsIGhvdyB0byBtYWtlIHRoZSBncmFwaCBzbWFsbGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBBZGQgc29tZSBpZGVhcywgaG93IHRvIG1ha2UgdGhlIGdyYXBoIHNtYWxsZXIuCi0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgQWRkIGEgY29tbWVudCBmcm9tIGEgZGVidWcgc2Vzc2lvbi4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBMb2cgbW9yZSBjb250ZXh0LgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JICBJbmRldC4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICBGaXggdHlwbyBpbiBkb2NzLgotCi0yMDA4LTEyLTI3IDE3OjQxOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YnVzLmM6IE1ha2UgR3N0QnVzU291cmNlIHdvcmsgd2l0aCBub24tZGVmYXVsdCBtYWluIGNvbnRleHRzICgjNTYyMTcwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2Rpc3Bvc2UpLCAoZ3N0X2J1c19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9idXNfd2FrZXVwX21haW5fY29udGV4dCksIChnc3RfYnVzX3NldF9tYWluX2NvbnRleHQpLAotCSAgKGdzdF9idXNfcG9zdCksIChnc3RfYnVzX3NvdXJjZV9wcmVwYXJlKSwgKGdzdF9idXNfc291cmNlX2ZpbmFsaXplKSwKLQkgIChnc3RfYnVzX2NyZWF0ZV93YXRjaCk6Ci0JICBNYWtlIEdzdEJ1c1NvdXJjZSB3b3JrIHdpdGggbm9uLWRlZmF1bHQgbWFpbiBjb250ZXh0cyAoIzU2MjE3MCkuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzogKG1lc3NhZ2VfZnVuY19lb3MpLCAobWVzc2FnZV9mdW5jX2FwcCksCi0JICAodGVzdF93YXRjaCksICh0ZXN0X3dhdGNoX3dpdGhfY3VzdG9tX2NvbnRleHQpLCAoZ3N0X2J1c19zdWl0ZSk6Ci0JICBBZGQgdGVzdCBjYXNlIGZvciBHc3RCdXNTb3VyY2Ugd2l0aCBhIG5vbi1kZWZhdWx0IG1haW4gY29udGV4dC4KLQkgICogdGVzdHMvY2hlY2svbGlicy8uY3ZzaWdub3JlOgotCSAgSWdub3JlIG1vcmUuCi0KLTIwMDgtMTItMjcgMTY6MjM6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBXcmFwIG11bHRpLWxpbmUgbWFjcm9zIGluIEdfU1RNVF97U1RBUlR8RU5EfS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKHVucGFja19lbGVtZW50KSwgKHVucGFja19jb25zdF9zdHJpbmcpLAotCSAgKHVucGFja19zdHJpbmcpOjoKLQkgIFdyYXAgbXVsdGktbGluZSBtYWNyb3MgaW4gR19TVE1UX3tTVEFSVHxFTkR9LgotCi0yMDA4LTEyLTIwIDE3OjMzOjQ0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIEFQSTogQWRkIFVSSSBxdWVyeSB0eXBlLiBUaGlzIGlzIHVzZWZ1bCB0byBxdWVyeSB0aGUgVVJJIG9mIGEgc2luay9zb3VyY2UgZWxlbWVudCBhbmQgY2FuIGJlIHVzZWQgYnkgZGVtdXhlcnMgdGhhdCBuZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RxdWFyay5jOgotCSAgKiBnc3QvZ3N0cXVhcmsuaDoKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfbmV3X3VyaSksIChnc3RfcXVlcnlfc2V0X3VyaSksCi0JICAoZ3N0X3F1ZXJ5X3BhcnNlX3VyaSk6Ci0JICAqIGdzdC9nc3RxdWVyeS5oOgotCSAgQVBJOiBBZGQgVVJJIHF1ZXJ5IHR5cGUuIFRoaXMgaXMgdXNlZnVsIHRvIHF1ZXJ5IHRoZSBVUkkKLQkgIG9mIGEgc2luay9zb3VyY2UgZWxlbWVudCBhbmQgY2FuIGJlIHVzZWQgYnkgZGVtdXhlcnMgdGhhdAotCSAgbmVlZCB0byBnZXQgZGF0YSBmcm9tIG90aGVyIGZpbGVzLgotCSAgVGhpcyBxdWVyeSBzaG91bGQgZ28gdXBzdHJlYW0gYnkgZGVmYXVsdC4KLQkgIEZpeGVzIGJ1ZyAjNTYyOTQ5LgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfcXVlcnkpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mZF9zcmNfcXVlcnkpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX3F1ZXJ5KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2ZpbGVfc3JjX3F1ZXJ5KToKLQkgIEltcGxlbWVudCBVUkkgcXVlcnkuCi0KLTIwMDgtMTItMTkgMTU6MTE6MDYgKzAwMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JICBEb24ndCBmb3J3YXJkIGdzdF9wYWRfc2V0X2NhcHMoKSBvbiBhIHNvdXJjZSBnaG9zdHBhZCB0byBpdHMgdGFyZ2V0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIERvbid0IGZvcndhcmQgZ3N0X3BhZF9zZXRfY2FwcygpIG9uIGEgc291cmNlIGdob3N0cGFkIHRvIGl0cyB0YXJnZXQuCi0JICBUaGF0IHdvdWxkIGNhdXNlIHRoZSBnaG9zdHBhZCB0byBlbWl0IG5vdGlmeTo6Y2FwcyB0d28gdGltZXMgKGZpc3QKLQkgIGZyb20gZ3N0X3BhZF9zZXRfY2FwcygpIGFuZCBhZnRlciBmcm9tIG9uX3NyY190YXJnZXRfbm90aWZ5KCkpLgotCi0yMDA4LTEyLTE5IDExOjI0OjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogQWRkIHNvbWUgbW9yZSB1bml0LXRlc3RzIGZvciB0aGUgZ2hvc3RwYWQgbm90aWZ5IHNpZ25hbCwgb25lIG9mIHdoaWNoIGN1cnJlbnRseSBmYWlscy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKGdob3N0X25vdGlmeV9jYXBzKSwKLQkgIChHU1RfU1RBUlRfVEVTVCk6Ci0JICBBZGQgc29tZSBtb3JlIHVuaXQtdGVzdHMgZm9yIHRoZSBnaG9zdHBhZCBub3RpZnkgc2lnbmFsLCBvbmUgb2Ygd2hpY2gKLQkgIGN1cnJlbnRseSBmYWlscy4KLQotMjAwOC0xMi0xOSAwOTo0NDo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogQWRkIGdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3MgdG8gdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEFkZCBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzIHRvIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMuCi0KLTIwMDgtMTItMTcgMTY6MTY6NDUgKzAwMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JICBJbiBhIHNvdXJjZSBnaG9zdHBhZCwgd2hlbiBjYXBzIGFyZSBjaGFuZ2VkIGluIHRoZSB0YXJnZXQgcGFkLCB0aGUgY2hhbmdlIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgZ2hvc3RwYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSAgSW4gYSBzb3VyY2UgZ2hvc3RwYWQsIHdoZW4gY2FwcyBhcmUgY2hhbmdlZCBpbiB0aGUgdGFyZ2V0IHBhZCwgdGhlCi0JICBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSBnaG9zdHBhZC4KLQkgIEZpeGVzICM1NjQ4NjMuCi0KLTIwMDgtMTItMTcgMDk6Mzc6NDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHV0aWxzLmM6IEFkZCBGSVhNRSBmb3IgMC4xMSB0byBzZXQgdGhlIHBhZCBhcyBtZXNzYWdlIHNvdXJjZSBhbmQgbm90IHRoZSBlbGVtZW50LiBPdGhlcndpc2UgaXQncyBpbXBvc3NpYmxlIHRvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9mb3VuZF90YWdzX2Zvcl9wYWQpOgotCSAgQWRkIEZJWE1FIGZvciAwLjExIHRvIHNldCB0aGUgcGFkIGFzIG1lc3NhZ2Ugc291cmNlIGFuZCBub3QKLQkgIHRoZSBlbGVtZW50LiBPdGhlcndpc2UgaXQncyBpbXBvc3NpYmxlIHRvIGRldGVjdCBmb3Igd2hpY2gKLQkgIHBhZCB0aGUgdGFncyB3ZXJlIGZvdW5kIHdpdGhvdXQgYWRkaW5nIGFuIGV2ZW50IHByb2JlCi0JICBvciBzb21ldGhpbmcgc2ltaWxhciB0byB0aGUgcGFkLgotCi0yMDA4LTEyLTE2IDIxOjMzOjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2ZhcS9nZW5lcmFsLnhtbDogVXBkYXRlIHRoZSBmYXEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9mYXEvZ2VuZXJhbC54bWw6Ci0JICBVcGRhdGUgdGhlIGZhcS4KLQotMjAwOC0xMi0xNiAxNTo1MTo1MiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBSZW5hbWUgYXBpIGFkZGVkIGluIHByZXZpb3VzIGNvbW1pdCBhbmQgYWRkIHNpbmNlIHRhZyB0byBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkgICogZ3N0L2dzdHRhZ3NldHRlci5oOgotCSAgUmVuYW1lIGFwaSBhZGRlZCBpbiBwcmV2aW91cyBjb21taXQgYW5kIGFkZCBzaW5jZSB0YWcgdG8gZG9jcy4KLQkgIEFQSTogZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncygpCi0KLTIwMDgtMTItMTYgMTQ6MDU6NDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQWRkIGZ1bmN0aW9uIHRvIHJlc2V0IHRhZ3NldHRlciBmb3IgZWxlbWVudCByZXVzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JICAqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKLQkgIEFkZCBmdW5jdGlvbiB0byByZXNldCB0YWdzZXR0ZXIgZm9yIGVsZW1lbnQgcmV1c2UuCi0JICBBUEk6IGdzdF90YWdfc2V0dGVyX2ZsdXNoKCkKLQotMjAwOC0xMi0xNiAwOTozNzo1MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0dGFnbGlzdC5jOiBBdm9pZCBjb3B5IG9mIGVtcHR5IHRhZ2xpc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIEF2b2lkIGNvcHkgb2YgZW1wdHkgdGFnbGlzdC4KLQotMjAwOC0xMi0xNiAwOToyMzoyMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBNb3JlIGNvbXBsZXRlIHVuaXQgdGVzdHMuIEZpeCBoYW5kbGluZyBvZiBlbXB0eSB0YWdsaXN0cyAodGhleSB3ZXJlIG5vdCBtZXJnZWQgYmVmb3JlKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JICBNb3JlIGNvbXBsZXRlIHVuaXQgdGVzdHMuIEZpeCBoYW5kbGluZyBvZiBlbXB0eSB0YWdsaXN0cyAodGhleSB3ZXJlCi0JICBub3QgbWVyZ2VkIGJlZm9yZSkuCi0KLTIwMDgtMTItMTYgMDc6MDc6MzYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogVXBkYXRlIEdzdFRhZ1NldHRlciBhbmQgR3N0VGFnTWVyZ2VNb2RlIGRvY3VtZW50YXRpb24uIE1lbnRpb24gdGhhdCB0YWdzIGNhbiBjb21lIGZyb20gZXZlbnRzIGFuZCBmcm9tIGFwcGxpY2F0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgICogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSAgVXBkYXRlIEdzdFRhZ1NldHRlciBhbmQgR3N0VGFnTWVyZ2VNb2RlIGRvY3VtZW50YXRpb24uIE1lbnRpb24KLQkgIHRoYXQgdGFncyBjYW4gY29tZSBmcm9tIGV2ZW50cyBhbmQgZnJvbSBhcHBsaWNhdGlvbi4gRml4IGV4YW1wbGUuCi0KLTIwMDgtMTItMTUgMTU6Mjc6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFJlbW92ZSB0aGUgc2VxbnVtIGVudHJ5IHRoYXQgd2UgaW1wbGVtZW50ZWQgaW4gMC4xMCBhbHJlYWR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBSZW1vdmUgdGhlIHNlcW51bSBlbnRyeSB0aGF0IHdlIGltcGxlbWVudGVkIGluIDAuMTAgYWxyZWFkeS4KLQkgIEFkZCBlbnRyeSBhYm91dCByZW1vdmluZyB0aGUgZm9ybWF0IHJldHVybiB2YWx1ZSBmb3IgcXVlcmllcy4KLQotMjAwOC0xMi0xNSAxMjo0Nzo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBFeHBvc2UgdGhlIHJlbmRlci1kZWxheSBhcyBhIHByb3BlcnR5IHNvIHRoaW5ncyBsaWtlIGFwcHNpbmsgY2FuIHVzZSBpdCB0byB0d2VhayB0aGUgc3luLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2luaXQpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5KToKLQkgIEV4cG9zZSB0aGUgcmVuZGVyLWRlbGF5IGFzIGEgcHJvcGVydHkgc28gdGhpbmdzIGxpa2UgYXBwc2luayBjYW4gdXNlIGl0Ci0JICB0byB0d2VhayB0aGUgc3luY2hyb25pc2F0aW9uLgotCi0yMDA4LTEyLTEwIDE1OjE5OjQ1ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDogQWxsb3cgY2hlY2sgdGVzdHMgdG8gdXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDogQWxsb3cgY2hlY2sgdGVzdHMgdG8gdXNlCi0JICBNQUlOX1NUQVJUX1RIUkVBRFMoKS9NQUlOX1NUT1BfVEhSRUFEUygpIG11bHRpcGxlIHRpbWVzLiBBbHNvIGFsbG93cwotCSAgQ0tfRk9SSz1ubyB0byBiZSB1c2VkIHdpdGggbXVsdGlwbGUgY2hlY2sgdGVzdCB0aGF0IHVzZSB0aHJlYWRzLgotCi0yMDA4LTEyLTA5IDE2OjIzOjU4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBGaXggYSBjYXBzIG1lbW9yeSBsZWFrIGludHJvZHVjZWQgYnkgdGhlIGxhc3QgY2hhbmdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkKToKLQkgIEZpeCBhIGNhcHMgbWVtb3J5IGxlYWsgaW50cm9kdWNlZCBieSB0aGUgbGFzdCBjaGFuZ2UuCi0KLTIwMDgtMTItMDkgMTU6NDU6MzYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHV0aWxzLmM6IENoZWNrIGlmIHRoZSBjYXBzIG9mIHRoZSBwYWRzIGFyZSBjb21wYXRpYmxlIGJlZm9yZSByZXR1cm5pbmcgYSBwYWQgYW5kIGNsYWltaW5nIGl0IGlzIGNvbXBhdGlibGUuIFRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQpOgotCSAgQ2hlY2sgaWYgdGhlIGNhcHMgb2YgdGhlIHBhZHMgYXJlIGNvbXBhdGlibGUgYmVmb3JlIHJldHVybmluZwotCSAgYSBwYWQgYW5kIGNsYWltaW5nIGl0IGlzIGNvbXBhdGlibGUuIFRoaXMsIGFtb25nIG90aGVyIHRoaW5ncywKLQkgIGZpeGVzIGEgYnVnIHdpdGggZ3N0LWxhdW5jaCB3aGVyZSBhbiBpbmNvbXBhdGlibGUgcGFkIGlzIGNob3NlbgotCSAgYW5kIGxpbmtpbmcgZmFpbHMuIEZpeGVzIGJ1ZyAjNTQ0MDAzLgotCi0yMDA4LTEyLTA5IDE0OjQ2OjI0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IFJldmVydCBhY2NpZGVudGlhbGx5IGNvbW1pdGVkIHBhdGNoIGZvciBidWcgIzQwNDYzMSB3aGljaCB0cmllcyB0byBwcmludCBhIGJhY2t0cmFjZSBpZiBhIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfaW5pdCk6Ci0JICBSZXZlcnQgYWNjaWRlbnRpYWxseSBjb21taXRlZCBwYXRjaCBmb3IgYnVnICM0MDQ2MzEgd2hpY2gKLQkgIHRyaWVzIHRvIHByaW50IGEgYmFja3RyYWNlIGlmIGEgdGVzdGNhc2UgaXMgdGVybWluYXRlZCBieQotCSAgYSBzaWduYWwuIFRoaXMgY29kZSB3YXMgbmV2ZXIgYWN0aXZhdGVkIGFzIHRoZSBjb3JyZXNwb25kaW5nCi0JICBjb25maWd1cmUuYWMgY2hhbmdlIHdhc24ndCBjb21taXR0ZWQuCi0KLTIwMDgtMTItMDkgMTA6NTg6MDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IFRoaXMgdGVzdCBzaG91bGQgcmV0dXJuIFRSVUUgbm93IGFzIHN5bmNpbmcgYW4gdW5jb250cm9sbGVkIG9iamVjdCB3aWxsIHN1Y2NlZWQgbm93ICh0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBUaGlzIHRlc3Qgc2hvdWxkIHJldHVybiBUUlVFIG5vdyBhcyBzeW5jaW5nIGFuIHVuY29udHJvbGxlZAotCSAgb2JqZWN0IHdpbGwgc3VjY2VlZCBub3cgKHRoZXJlJ3Mgbm90aGluZyB0byBzeW5jKS4KLQotMjAwOC0xMi0wOSAwOTo1NjoyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogQWdncmVnYXRlIHJldHVybiB2YWx1ZSBmb3IgZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMoKS4gTW9yZSBpbmZvIGluIGxvZ2dpbmcuIEEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIEFnZ3JlZ2F0ZSByZXR1cm4gdmFsdWUgZm9yIGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKCkuIE1vcmUgaW5mbyBpbgotCSAgbG9nZ2luZy4gQWx3YXlzIHNldCB2YWx1ZXMgb24gZmlyc3Qgc3luYy1jYWxsLgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuYzoKLQkgIE1pY3Jvb3B0aW1pemF0aW9ucy4KLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkgIEZpeCByZXR1cm4gY29kZSBhbmQgY29tbWVudC4KLQotMjAwOC0xMi0wOSAwOTowMDo1NyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0b29scy9nc3QtbGF1bmNoLjEuaW46IEZpeCBkZXNjcmlwdGlvbiBvZiBob3cgdG8gc3BlY2lmeSBhIHR5cGUgaW4gY2Fwcy4gRml4ZXMgIzU1Mzg3My4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBGaXggZGVzY3JpcHRpb24gb2YgaG93IHRvIHNwZWNpZnkgYSB0eXBlIGluIGNhcHMuIEZpeGVzICM1NTM4NzMuCi0JICBBbHNvIHJhbmdlcyBhbmQgbGlzdCBjb250YWluIHZhbHVlcyBhbmQgbm90IHByb3BlcnR5LWFzc2lnbm1lbnRzLgotCi0yMDA4LTEyLTA4IDIyOjI4OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiBDaGVjayBmb3IgY2hhbmdlZCBwYWRzLWxpc3QgYmVmb3JlIGNoZWNraW5nIHRoZSBsYXN0IHJldHVybmVkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfaGFuZGxlX2J1ZmZlcik6Ci0JICBDaGVjayBmb3IgY2hhbmdlZCBwYWRzLWxpc3QgYmVmb3JlIGNoZWNraW5nIHRoZSBsYXN0IHJldHVybmVkCi0JICBHc3RGbG93UmV0dXJuIGJlY2F1c2UgdGhlIHBhZCBjb3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBhbmQgd2UKLQkgIG5lZWQgdG8gaWdub3JlIHRoZSB2YWx1ZSBpbiB0aGF0IGNhc2UuCi0KLTIwMDgtMTItMDggMTg6MzU6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBBZGQgdm1ldGhvZCB0aGF0IGlzIGNhbGxlZCBiZWZvcmUgd2Ugc3RhcnQgdGhlIHRyYW5zZm9ybSBhbmQgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRyYW5nZSksIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIEFkZCB2bWV0aG9kIHRoYXQgaXMgY2FsbGVkIGJlZm9yZSB3ZSBzdGFydCB0aGUgdHJhbnNmb3JtIGFuZCB3aGljaCBjYW4KLQkgIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSB0cmFuc2Zvcm0sIHN1Y2ggYXMgZHluYW1pYyBwcm9wZXJ0aWVzLgotCi0yMDA4LTEyLTA1IDIwOjMyOjAzICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdC5jOiBTZWFyY2ggZm9yIHBsdWdpbnMgb24gd2luMzIgYmFzZWQgb24gdGhlIGxvY2F0aW9uIG9mIHRoZSBnc3RyZWFtZXIgRExMLiAgRml4ZXMgIzU0ODc4NgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIFNlYXJjaCBmb3IgcGx1Z2lucyBvbiB3aW4zMiBiYXNlZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhlCi0JICBnc3RyZWFtZXIgRExMLiAgRml4ZXMgIzU0ODc4NgotCi0yMDA4LTEyLTA0IDIwOjEwOjQyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQXBwYXJlbnRseSBBQ19DT05GSUdfTUFDUk9fRElSIGJyZWFrcyB3aGVuIHVzaW5nIG1vcmUgdGhhbiBvbmUgbWFjcm8gZGlyZWN0b3J5LCByZXZlcnRpbmcgbGFzdCBjaGFuZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQXBwYXJlbnRseSBBQ19DT05GSUdfTUFDUk9fRElSIGJyZWFrcyB3aGVuIHVzaW5nIG1vcmUKLQkgIHRoYW4gb25lIG1hY3JvIGRpcmVjdG9yeSwgcmV2ZXJ0aW5nIGxhc3QgY2hhbmdlLgotCi0yMDA4LTEyLTA0IDE5OjQ1OjA1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogU2V0IEFDX0NPTkZJR19NQUNST19ESVIgdG8gY29tbW9uL200IHRvIHBvaW50IGF1dG9jb25mIHRvIG91ciBNNCBtYWNyb3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgU2V0IEFDX0NPTkZJR19NQUNST19ESVIgdG8gY29tbW9uL200IHRvIHBvaW50IGF1dG9jb25mIHRvCi0JICBvdXIgTTQgbWFjcm9zLgotCi0yMDA4LTExLTI5IDEzOjI5OjE0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFJlcXVpcmUgZ2V0dGV4dCAwLjE3IGJlY2F1c2Ugb2xkZXIgdmVyc2lvbnMgZG9uJ3QgbWl4IHdpdGggbGlidG9vbCAyLjIuIEF0IGJ1aWxkIHRpbWUgYW4gb2xkZXIgZ2V0dGV4dCB2ZXJzaW9uIHdpbGwgcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQ3lnd2luIFBvcnRzIG1haW50YWluZXIKLQkgIDx5c2Vsa293aXR6IGF0IHVzZXJzIGRvdCBzb3VyY2Vmb3JnZSBkb3QgbmV0PgotCSAgKiBhdXRvZ2VuLnNoOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBSZXF1aXJlIGdldHRleHQgMC4xNyBiZWNhdXNlIG9sZGVyIHZlcnNpb25zIGRvbid0IG1peCB3aXRoIGxpYnRvb2wKLQkgIDIuMi4gQXQgYnVpbGQgdGltZSBhbiBvbGRlciBnZXR0ZXh0IHZlcnNpb24gd2lsbCBzdGlsbCB3b3JrLgotCSAgRml4ZXMgYnVnICM1NTYwOTEuCi0KLTIwMDgtMTEtMjcgMTE6MTI6MzAgKzAwMDAgIOydtOusuO2YlSA8aXdpbmdzQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBvbGwuYzogQWRkcyBzdXBwb3J0IGZvciBGRF9DT05ORUNUIGV2ZW50ICh3aW4zMikuIFNlZSAjNTYyMjU4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTog7J2066y47ZiVIDxpd2luZ3MgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L2dzdHBvbGwuYzogKGdzdF9wb2xsX2ZkX2N0bF93cml0ZSksIChnc3RfcG9sbF9mZF9oYXNfZXJyb3IpOgotCSAgQWRkcyBzdXBwb3J0IGZvciBGRF9DT05ORUNUIGV2ZW50ICh3aW4zMikuIFNlZSAjNTYyMjU4LgotCi0yMDA4LTExLTI0IDIwOjAyOjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogVHVybiBjb21tZW50IGludG8gZ3RrLWRvYyBjb21tZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIFR1cm4gY29tbWVudCBpbnRvIGd0ay1kb2MgY29tbWVudC4KLQotMjAwOC0xMS0yNCAxNToyNzo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFJldmVydCBxdWljayBhY2NlcGNhcHMgYXR0ZW1wdCwgaXQncyBub3QgZnVsbHkgZXF1aXZhbGVudCB0byB0aGUgb2xkIGJlaGF2aW91ciBhbmQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjY2VwdGNhcHMpOgotCSAgUmV2ZXJ0IHF1aWNrIGFjY2VwY2FwcyBhdHRlbXB0LCBpdCdzIG5vdCBmdWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQKLQkgIGJlaGF2aW91ciBhbmQgdGh1cyBjYXVzZXMgcmVncmVzc2lvbnMuCi0KLTIwMDgtMTEtMjQgMTE6NTY6NDQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBGaXggbWVtb3J5IGxlYWsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfdXJpX3NldF91cmkpOgotCSAgRml4IG1lbW9yeSBsZWFrLgotCi0yMDA4LTExLTI0IDA5OjU5OjA3ICswMDAwICBTaW1vbiBIb2xtIFRow7hnZXJzZW4gPG9kaWVAY3MuYWF1LmRrPgotCi0JICBnc3QvZ3N0cmVnaXN0cnkuYzogUmVkdWNlIHRoZSBudW1iZXIgb2Ygc3RhdCgpIGNhbGxzIGZvciBldmVyeSBmaWxlIGZyb20gdGhyZWUgdGltZXMgdG8gb25lIHRpbWUuIEZpeGVzIGJ1ZyAjNTYwMzYwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2ltb24gSG9sbSBUaMO4Z2Vyc2VuIDxvZGllIGF0IGNzIGRvdCBhYXUgZG90IGRrPgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOgotCSAgUmVkdWNlIHRoZSBudW1iZXIgb2Ygc3RhdCgpIGNhbGxzIGZvciBldmVyeSBmaWxlIGZyb20gdGhyZWUgdGltZXMKLQkgIHRvIG9uZSB0aW1lLiBGaXhlcyBidWcgIzU2MDM2MC4KLQotMjAwOC0xMS0yMiAxNTowOToyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFJlbmFtZSBhIHZhcmlhYmxlIHRvIG1ha2UgdGhlIGNvZGUgY2xlYXJlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYWNjZXB0Y2Fwcyk6Ci0JICBSZW5hbWUgYSB2YXJpYWJsZSB0byBtYWtlIHRoZSBjb2RlIGNsZWFyZXIuCi0KLTIwMDgtMTEtMjEgMjA6NTc6MTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBEb24ndCB3YXJuaW5nIG9uIG9mZnNldD09LTEuIFRha2VuIGZyb20gX2NoZWNrX2ltcGVyZmVjdF9vZmZzZXQoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBEb24ndCB3YXJuaW5nIG9uIG9mZnNldD09LTEuIFRha2VuIGZyb20gX2NoZWNrX2ltcGVyZmVjdF9vZmZzZXQoKS4KLQotMjAwOC0xMS0yMSAxODoyNjoxNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogQ2hlY2sgZm9yIGxvY2FsaG9zdCBpbiBVUkkgd2FzIGJhY2t3YXJkcywgZml4IGl0LiBGaXhlcyB1bml0IHRlc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBDaGVjayBmb3IgbG9jYWxob3N0IGluIFVSSSB3YXMgYmFja3dhcmRzLCBmaXggaXQuIEZpeGVzIHVuaXQgdGVzdC4KLQotMjAwOC0xMS0yMSAxNzoxNDo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEFkZCBiZWdpbm5pbmdzIG9mIGEgbW9yZSBvcHRpbWl6ZWQgYWNjZXB0Y2FwcyBmdW5jdGlvbiB0aGFuIHRoZSBkZWZhdWx0IGNvcmUgb25lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRjYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9maW5kX3RyYW5zZm9ybSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjY2VwdGNhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlKToKLQkgIEFkZCBiZWdpbm5pbmdzIG9mIGEgbW9yZSBvcHRpbWl6ZWQgYWNjZXB0Y2FwcyBmdW5jdGlvbiB0aGFuIHRoZSBkZWZhdWx0Ci0JICBjb3JlIG9uZS4KLQotMjAwOC0xMS0yMSAxNjo0ODo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBBdm9pZCBnZXR0aW5nIHRoZSBhY2NlcHRjYXBzIGZ1bmN0aW9uIHRvbyBlYXJseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjY2VwdF9jYXBzKToKLQkgIEF2b2lkIGdldHRpbmcgdGhlIGFjY2VwdGNhcHMgZnVuY3Rpb24gdG9vIGVhcmx5LgotCi0yMDA4LTExLTIxIDA4OjA5OjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0b29scy9nc3QtbGF1bmNoLmM6IE1ha2UgZ3N0LWxhdW5jaCBoYW5kbGUgTEFURU5DWSBtZXNzYWdlcyBhbmQgbWFrZSBpdCByZWNhbGN1bGF0ZSB0aGUgbGF0ZW5jeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKLQkgIE1ha2UgZ3N0LWxhdW5jaCBoYW5kbGUgTEFURU5DWSBtZXNzYWdlcyBhbmQgbWFrZSBpdCByZWNhbGN1bGF0ZSB0aGUKLQkgIGxhdGVuY3kuCi0KLTIwMDgtMTEtMjAgMjE6MDU6MTQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IFVzZSBnX2ZpbGVuYW1lX2Zyb21fdXJpKCkgZm9yIFVSSSBwYXJzaW5nIGluIGZpbGVzcmMgcmF0aGVyIHRoYW4gcm9sbGluZyBvdXQgb3duIHNsaWdoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBVc2UgZ19maWxlbmFtZV9mcm9tX3VyaSgpIGZvciBVUkkgcGFyc2luZyBpbiBmaWxlc3JjIHJhdGhlciB0aGFuIHJvbGxpbmcKLQkgIG91dCBvd24gc2xpZ2h0bHkgaW5jb3JyZWN0IHZlcnNpb24uIEZpeGVzIHVzZSBvZiBzb21lIHBhdGhzIG9uCi0JICB3aW4zMi4KLQotMjAwOC0xMS0yMCAyMDo0NDo1NiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogSW4gd2luMzIgY29kZXBhdGgsIGlmIHdlIGZhaWwgdG8gd3JpdGUgdGhlIHJlZ2lzdHJ5LCBjcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IgaXQgYW5kIHRyeSBhZ2EuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIEluIHdpbjMyIGNvZGVwYXRoLCBpZiB3ZSBmYWlsIHRvIHdyaXRlIHRoZSByZWdpc3RyeSwgY3JlYXRlIHRoZQotCSAgZGlyZWN0b3J5IGZvciBpdCBhbmQgdHJ5IGFnYWluLCBtYXRjaGluZyB0aGUgYmVoYXZpb3VyIGluIG5vbi13aW4zMgotCSAgY29kZXBhdGhzLgotCi0yMDA4LTExLTIwIDE0OjIzOjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IENoYW5naW5nIHRoZSByZW5kZXIgZGVsYXkgY2hhbmdlcyB0aGUgbGF0ZW5jeSBhbmQgc28gd2UgbXVzdCBwb3N0IGEgbGF0ZW5jeSBtZXNzYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSk6Ci0JICBDaGFuZ2luZyB0aGUgcmVuZGVyIGRlbGF5IGNoYW5nZXMgdGhlIGxhdGVuY3kgYW5kIHNvIHdlIG11c3QgcG9zdCBhCi0JICBsYXRlbmN5IG1lc3NhZ2UuCi0KLTIwMDgtMTEtMjAgMTA6MzU6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RxdWVyeS4qOiBBZGQgR3N0UXVlcnlUeXBlIGZvciBjdXN0b20gcXVlcmllcyBpbnN0ZWFkIG9mIGhhdmluZyB0byB1c2UgdGhlIG5vdC1zby12ZXJ5LWNvbnZlbmllbnQgcmVnaXN0cmF0aW9uIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIEFkZCBHc3RRdWVyeVR5cGUgZm9yIGN1c3RvbSBxdWVyaWVzIGluc3RlYWQgb2YgaGF2aW5nIHRvIHVzZSB0aGUKLQkgIG5vdC1zby12ZXJ5LWNvbnZlbmllbnQgcmVnaXN0cmF0aW9uIGluZnJhc3RydWN0dXJlIHRvIHJlZ2lzdGVyIG5ldwotCSAgdHlwZXMuCi0KLTIwMDgtMTEtMTkgMTI6MjA6MDMgKzAwMDAgIEFuZHJldyBGZXJlbiA8YWNmZXJlbkB5YWhvby5jb20+Ci0KLQkgIGdzdC9nc3RvYmplY3QuYzogVW5yZWYgdGhlIEdFbnVtQ2xhc3MgYWZ0ZXIgdXNhZ2UgYWdhaW4uIEZpeGVzIGJ1ZyAjNTYxNTAxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQW5kcmV3IEZlcmVuIDxhY2ZlcmVuIGF0IHlhaG9vIGRvdCBjb20+Ci0JICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeSk6Ci0JICBVbnJlZiB0aGUgR0VudW1DbGFzcyBhZnRlciB1c2FnZSBhZ2Fpbi4gRml4ZXMgYnVnICM1NjE1MDEuCi0KLTIwMDgtMTEtMTkgMTI6MDY6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uKjogQWRkIGRvLWxhdGVuY3kgc2lnbmFsIHdpdGggdGhlIG9sZCBkZWZhdWx0IGZhbGxiYWNrIGltcGxlbWVudGF0aW9uLiBUaGlzIGFsbG93cyBmb3IgY3VzdG9tIGxhdGVuY3kgY2FsYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKF9nc3RfYm9vbGVhbl9hY2N1bXVsYXRvciksIChnc3RfYmluX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSksIChnc3RfYmluX2RvX2xhdGVuY3lfZnVuYyksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6Ci0JICAqIGdzdC9nc3RiaW4uaDoKLQkgIEFkZCBkby1sYXRlbmN5IHNpZ25hbCB3aXRoIHRoZSBvbGQgZGVmYXVsdCBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbi4gVGhpcwotCSAgYWxsb3dzIGZvciBjdXN0b20gbGF0ZW5jeSBjYWxjdWxhdGlvbnMgZm9yIHdoZW4gdGhlIGRlZmF1bHQgaXMgbm90Ci0JICBzdWZmaWNpZW50LgotCSAgQVBJOiBHc3RCaW46OmRvLWxhdGVuY3kgc2lnbmFsLgotCi0yMDA4LTExLTE4IDEzOjM2OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogQWRkIG5ldyBzeW1ib2xzIHRvIC5kZWYgZmlsZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEFkZCBuZXcgc3ltYm9scyB0byAuZGVmIGZpbGUuCi0KLTIwMDgtMTEtMTggMDk6NTg6MzMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZCBtZXRob2QgdG8gcmVjYWxjdWxhdGUgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgbGF0ZW5jeSBvbiBhIGJpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3kpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICBBZGQgbWV0aG9kIHRvIHJlY2FsY3VsYXRlIGFuZCByZWRpc3RyaWJ1dGUgdGhlIGxhdGVuY3kgb24gYSBiaW4uCi0JICBBUEk6IGdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSgpLgotCi0yMDA4LTExLTE4IDA5OjUyOjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLmg6IERvY3VtZW50IHRoZSBmcmVlX2Z1bmMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgRG9jdW1lbnQgdGhlIGZyZWVfZnVuYy4KLQotMjAwOC0xMS0xNyAyMTo0MzowNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyLzogVXNlIGdzdF9ndWludDY0X3RvX2dkb3VibGUgaW5zdGVhZCBvZiBnc3RfdXRpbF9ndWludDY0X3RvX2dkb3VibGUgYXMgaXQgaXMgbWFwcGVkIHRvIGEgY2FzdCBvbiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6Ci0JICBVc2UgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSBpbnN0ZWFkIG9mIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZQotCSAgYXMgaXQgaXMgbWFwcGVkIHRvIGEgY2FzdCBvbiBub24td2luMzIgcGxhdGZvcm1zLgotCi0yMDA4LTExLTE3IDIxOjQxOjM1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBLZWVwIGxhc3QtdmFsdWUgYW5kIG9ubHkgY2FsbCBzZXRfcHJvcGVydHkgaWYgdmFsdWUgaGFzIGNoYW5nZWQuIFRoaXMgc3VwcmVzc2VzIGFsbCB0aGUgZ19vYmplYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmg6Ci0JICBLZWVwIGxhc3QtdmFsdWUgYW5kIG9ubHkgY2FsbCBzZXRfcHJvcGVydHkgaWYgdmFsdWUgaGFzIGNoYW5nZWQuIFRoaXMKLQkgIHN1cHJlc3NlcyBhbGwgdGhlIGdfb2JqZWN0X25vdGlmaWVzIHdlIHdvdWxkIHRyaWdnZXIgb3RoZXJ3aXNlLiBJdAotCSAgYWxzbyBhbGxvd3MgdGhlIHVzZXIgdG8gY2hhZ2UgdGhlIHZhbHVlIHdoaWxlIHRoZXJlIGlzIG5vIGNvbnRyb2xsZXIKLQkgIGNoYW5nZS4KLQotMjAwOC0xMS0xNyAyMToyNTozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0dmFsdWUuYzogRG9uJ3QgY3Jhc2ggaWYgZWl0aGVyIG9mIHRoZSBzdHJpbmcgR1ZhbHVlcyBpcyBlbXB0eS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIERvbid0IGNyYXNoIGlmIGVpdGhlciBvZiB0aGUgc3RyaW5nIEdWYWx1ZXMgaXMgZW1wdHkuCi0KLTIwMDgtMTEtMTcgMTU6NDg6MTQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYyAocHJpbnRfYWxsX3VyaV9oYW5kbGVycyk6IE5ldyBmdW5jdGlvbiwgcHJpbnRzIGEgc3VtbWFyeSBvZiB3aGF0IFVSSSBzY2hlbWVzIGFyZSBzdXBwb3J0ZWQgYnkgd2hhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMTEtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmMgKHByaW50X2FsbF91cmlfaGFuZGxlcnMpOiBOZXcgZnVuY3Rpb24sCi0JICBwcmludHMgYSBzdW1tYXJ5IG9mIHdoYXQgVVJJIHNjaGVtZXMgYXJlIHN1cHBvcnRlZCBieSB3aGF0Ci0JICBlbGVtZW50cy4KLQkgIChtYWluKTogUGx1bWIgaW4gc3VwcG9ydCBmb3IgLS11cmktaGFuZGxlcnMgb3IgLXUsIGFuZCBmaXggdGhlCi0JICBhcmdjIGNoZWNrIGZvciAtYSBhbmQgLXUuCi0KLTIwMDgtMTEtMTcgMDQ6NDk6MDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHV0aWxzLmg6IEFkZCBHX0dOVUNfUFVSRSB0byBnc3RfdXRpbF91aW50NjRfc2NhbGUqIGFuZCB0aGUgZG91YmxlPC0+dWludDY0IGNvbnZlcnNpb24gZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgQWRkIEdfR05VQ19QVVJFIHRvIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSogYW5kIHRoZSBkb3VibGU8LT51aW50NjQKLQkgIGNvbnZlcnNpb24gZnVuY3Rpb25zLgotCi0yMDA4LTExLTEzIDE4OjA5OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLmM6IEF2b2lkIGNvc3RseSB0eXBlY2hlY2tpbmcgZm9yIHRyaXZpYWxseSBjb3JyZWN0IHBvaW50ZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfZmluYWxpemUpOgotCSAgQXZvaWQgY29zdGx5IHR5cGVjaGVja2luZyBmb3IgdHJpdmlhbGx5IGNvcnJlY3QgcG9pbnRlcnMuCi0JICAqIGdzdC9nc3Rwb2xsLmM6IChnc3RfcG9sbF93YWl0KToKLQkgIEFkZCBzb21lIEdfTElLRUxZIGhlcmUgYW5kIHRoZXJlLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX3B1c2gpOgotCSAgQWRkIHNvbWUgZGVidWcgaW5mby4KLQotMjAwOC0xMS0xMyAxODowNTo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9yYW5kb20vd3RheS9wb2xsLXRpbWVvdXQ6IFNtYWxsIHR3ZWFrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS93dGF5L3BvbGwtdGltZW91dDoKLQkgIFNtYWxsIHR3ZWFrcy4KLQotMjAwOC0xMS0xMyAxODowMzoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvb2xkL3Rlc3RzdWl0ZS86IFJlbW92ZSByZWZlcmVuY2VzIHRvIGRlcHJlY2F0ZWQgQVBJIGdfbWVtX2NodW5rKi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvaW50ZXJzZWN0aW9uLmM6IChtYWluKToKLQkgICogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wbHVnaW4vbG9hZGluZy5jOiAobWFpbik6Ci0JICBSZW1vdmUgcmVmZXJlbmNlcyB0byBkZXByZWNhdGVkIEFQSSBnX21lbV9jaHVuayouCi0JICBGaXhlcyAjNTYwNDQyLgotCi0yMDA4LTExLTEyIDE2OjU1OjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBBZGQgLS1wbHVnaW4gb3B0aW9uLiBGaXhlcyAjNTYwMzAxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChtYWluKToKLQkgIEFkZCAtLXBsdWdpbiBvcHRpb24uIEZpeGVzICM1NjAzMDEuCi0KLTIwMDgtMTEtMTIgMTI6NDU6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvcmFuZG9tL3d0YXkvcG9sbC10aW1lb3V0OiBRdWljayBicmFpbmR1bXAgZm9yIGEgcG9zc2libGUgKG5vdCB0b3RhbGx5IHZlcmlmaWVkKSBhdG9taWMgY2FzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS93dGF5L3BvbGwtdGltZW91dDoKLQkgIFF1aWNrIGJyYWluZHVtcCBmb3IgYSBwb3NzaWJsZSAobm90IHRvdGFsbHkgdmVyaWZpZWQpIGF0b21pYyBjYXNlLgotCi0yMDA4LTExLTEyIDEwOjM5OjI1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS4qOiBEb24ndCB3cml0ZSBhbmQgY2hlY2sgYSBDUkMgZm9yIHRoZSBiaW5hcnkgcmVnaXN0cnkgZmlsZS4gSXQncyBndWFyYW50ZWVkIHRoYXQgdGhlIHJlZ2lzdHJ5IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jaHVuayksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9pbml0aWFsaXplX21hZ2ljKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6Ci0JICBEb24ndCB3cml0ZSBhbmQgY2hlY2sgYSBDUkMgZm9yIHRoZSBiaW5hcnkgcmVnaXN0cnkgZmlsZS4gSXQncwotCSAgZ3VhcmFudGVlZCB0aGF0IHRoZSByZWdpc3RyeSBpcyBjb21wbGV0ZWx5IHdyaXR0ZW4gKGl0J3MgZmlyc3Qgd3JpdHRlbgotCSAgdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgdGhlbiBtb3ZlZCkgYW5kIGlmIHRoZSByZWdpc3RyeSB3YXMgY29ycnVwdGVkCi0JICBieSBzb21lIGhhcmR3YXJlIGZhaWx1cmUgd2Ugd291bGQgaGF2ZSBiaWdnZXIgcHJvYmxlbXMuCi0JICBCdW1wIGJpbmFyeSByZWdpc3RyeSB2ZXJzaW9uIHRvIDAuMTAuMjEuMSBmb3IgdGhpcyBhcyBpdCdzIGFuCi0JICBpbmNvbXBhdGlibGUgY2hhbmdlIGFuZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVnaXN0cnkgZ2V0cyByZWJ1aWxkCi0JICBhZnRlciB0aGUgdXBkYXRlLgotCSAgVGhpcyBzYXZlcyBzb21lIG1pbGxpc2Vjb25kcyBmb3IgcmVhZGluZy93cml0aW5nIHRoZSByZWdpc3RyeS4KLQkgIEZpeGVzIGJ1ZyAjNTYwMzk5LgotCi0yMDA4LTExLTExIDE0OjUwOjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL3JhbmRvbS93dGF5L3BvbGwtdGltZW91dDogU29tZSBwc2V1ZG8gY29kZSBmb3IgaG93IHdlIGNvdWxkIGltcGxlbWVudCBjbG9jayB0aW1lb3V0cyB3aXRoIEdzdFBvbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vd3RheS9wb2xsLXRpbWVvdXQ6Ci0JICBTb21lIHBzZXVkbyBjb2RlIGZvciBob3cgd2UgY291bGQgaW1wbGVtZW50IGNsb2NrIHRpbWVvdXRzIHdpdGggR3N0UG9sbC4KLQotMjAwOC0xMS0xMCAxMzo1Njo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogVXBkYXRlIEF1dGhvciBzdHJpbmcgdG8gbWF0Y2ggb3RoZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkgIFVwZGF0ZSBBdXRob3Igc3RyaW5nIHRvIG1hdGNoIG90aGVycy4KLQotMjAwOC0xMS0wNiAxNTozNzoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IFJlb3JnYW5pemUgc29tZSBtb3JlLCBiZSBtb3JlIGNvbnNlcnZhdGl2ZSB3aXRoIHRoZSBHU1RfVFlQRV9BUlJBWSBub3QgYmVpbmcgZml4ZWQgYW5kIGlubGluZSB0aGUgdHJpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdHlwZV9pc19maXhlZCksIChnc3RfdmFsdWVfaXNfZml4ZWQpOgotCSAgUmVvcmdhbml6ZSBzb21lIG1vcmUsIGJlIG1vcmUgY29uc2VydmF0aXZlIHdpdGggdGhlIEdTVF9UWVBFX0FSUkFZIG5vdAotCSAgYmVpbmcgZml4ZWQgYW5kIGlubGluZSB0aGUgdHJpdmlhbCBjaGVjay4KLQotMjAwOC0xMS0wNiAxNTowOTozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGNhcHMuYzogQ2FsbGdyaW5kIG1pY3JvIG9wdGltaXNhdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2NvcHkpLCAoX2dzdF9jYXBzX2ZyZWUpLAotCSAgKGdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZSksIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlKSwKLQkgIChnc3RfY2Fwc19jb3B5X250aCksIChnc3RfY2Fwc19zZXRfc2ltcGxlKSwKLQkgIChnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCksIChnc3RfY2Fwc19pc19maXhlZCksCi0JICAoZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQpLCAoZ3N0X2NhcHNfaW50ZXJzZWN0KSwKLQkgIChnc3RfY2Fwc19zdWJ0cmFjdCksIChnc3RfY2Fwc19ub3JtYWxpemUpLCAoZ3N0X2NhcHNfZG9fc2ltcGxpZnkpLAotCSAgKGdzdF9jYXBzX3RvX3N0cmluZyk6Ci0JICBDYWxsZ3JpbmQgbWljcm8gb3B0aW1pc2F0aW9ucy4KLQkgIEF2b2lkIGFycmF5IGJvdW5kcyBjaGVja3MgYW5kIGZvcmNlIGlubGluZSBvZiB0cml2aWFsIGZ1bmN0aW9uLgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X3NldF9uYW1lX2RlZmF1bHQpOgotCSAgLTEgaXMgZXF1aXZhbGVudCB0byBsZXR0aW5nIGdsaWIgdG8gdGhlIHN0cmxlbiBidXQgdGhlbiB0aGVyZSBpcyBtb3JlCi0JICByb29tIGZvciBvcHRpbWlzYXRpb25zIGFuZCBpdCdzIG5vdCBvdXIgZmF1bHQuCi0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3X3dpdGhfc2l6ZSk6Ci0JICBubyBuZWVkIHRvIGNsZWFyIHRoZSBhcnJheSwgd2UncmUgY29vbC4KLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdHlwZV9pc19maXhlZCksIChnc3RfdmFsdWVfaXNfZml4ZWQpOgotCSAgVGhlIG1vc3QgY29tbW9uIF9pc19maXhlZCgpIGNoZWNrIGlzIGRvbmUgb24gZnVuZGFtZW50YWwgZ2xpYiBiYXNlCi0JICB0eXBlcyBzbyB3ZSBjaGVjayB0aGlzIGZpcnN0IGluc3RlYWQgb2YgZG9pbmcgYSBodWdlIGFtb3VudCBvZgotCSAgdXNlbGVzcyBHU1RfVFlQRV9BUlJBWSBjYWxscy4KLQotMjAwOC0xMS0wNiAxMjowMzoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGV2ZW50Lmg6IEFkZCBhIFNLSVAgc2VlayBmbGFnIGZvciB1c2Ugd2l0aCBhZHZhbmNlZCB0cmlja21vZGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgQWRkIGEgU0tJUCBzZWVrIGZsYWcgZm9yIHVzZSB3aXRoIGFkdmFuY2VkIHRyaWNrbW9kZXMuCi0JICBBUEk6IEdzdFNlZWtGbGFnczo6R1NUX1NFRUtfRkxBR19TS0lQCi0KLTIwMDgtMTEtMDUgMTY6NTc6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogTm8gbmVlZCB0byBtZW1zZXQsIHdlIGNhbiBjbGVhciB0aGUgdmFsdWUgb3Vyc2VsdmVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfaWRfZW1wdHlfbmV3X3dpdGhfc2l6ZSk6Ci0JICBObyBuZWVkIHRvIG1lbXNldCwgd2UgY2FuIGNsZWFyIHRoZSB2YWx1ZSBvdXJzZWx2ZXMuCi0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3R5cGVfaXNfZml4ZWQpLAotCSAgKGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jKToKLQkgIFNvbWUgb3B0aW1pc2F0aW9ucyBmcm9tIGEgZmV3IGNhbGxncmluZCBzZXNzaW9uczoKLQkgIFdoZW4gY2hlY2tpbmcgaWYgYSB0eXBlIGlzIGZpeGVkLCBjaGVjayBmb3IgdHJpdmlhbCBmdW5kYW1lbnRhbCB0eXBlcwotCSAgZmlyc3QgYmVmb3JlIGNoZWNraW5nIHR5cGVzIGZvciB3aGljaCB3ZSBuZWVkIHRvIGdldCB0aGUgdHlwZSBmb2xsb3dlZAotCSAgYnkgdGhlIGhlYXZ5IGR1dHkgdHlwZSBjaGVja3MsIHRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mCi0JICBnX3R5cGVfZnVuZGFtZW50YWwoKSBjYWxscyBhIGxvdC4KLQkgIFdoZW4gZ2V0dGluZyB0aGUgY29tcGFyZSBmdW5jdGlvbiwgZmlyc3QgY2hlY2sgZm9yIG91ciByZWdpc3RlcmVkIHR5cGVzLgotCSAgSWYgdGhhdCBmYWlscywgZG8gdGhlIGhlYXZ5IGR1dHkgZ190eXBlX2lzX2EoKSBjaGVja3MsIHJlZHVjZXMgdGhlCi0JICBhbW91bnQgb2YgZ190eXBlX2lzX2EoKSBjb25zaWRlcmFibHkuCi0KLTIwMDgtMTEtMDUgMTE6MTc6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IE11bWJsZSBzb21ldGhpbmcgYWJvdXQgcmVtb3ZpbmcgR3N0WE1MLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBNdW1ibGUgc29tZXRoaW5nIGFib3V0IHJlbW92aW5nIEdzdFhNTC4KLQotMjAwOC0xMS0wNCAxODoxMDowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBHZXQgdGhlIHNlcW51bSBiZWZvcmUgd2UgZGlzcG9zZSB0aGUgbWVzc2FnZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgR2V0IHRoZSBzZXFudW0gYmVmb3JlIHdlIGRpc3Bvc2UgdGhlIG1lc3NhZ2UuCi0KLTIwMDgtMTEtMDQgMTY6MTA6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFJlZmVyIHRvIHRoZSBmcmFtZXN0ZXBwaW5nIGRvY3VtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBSZWZlciB0byB0aGUgZnJhbWVzdGVwcGluZyBkb2N1bWVudC4KLQotMjAwOC0xMS0wNCAxNTo1Njo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQ29weSBzZXFudW1zIGZyb20gZXZlbnRzIHRvIG1lc3NhZ2VzIHNvIHRoYXQgdGhleSBjYW4gYWxsIGJlIHJlbGF0ZWQgYmFjayB0byBlYWNob3RoZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2hhbmRsZV9hc3luY19zdGFydCksCi0JICAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKSwgKGdzdF9iaW5fcXVlcnkpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspLAotCSAgKGdzdF9iYXNlX3NyY19sb29wKSwgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgQ29weSBzZXFudW1zIGZyb20gZXZlbnRzIHRvIG1lc3NhZ2VzIHNvIHRoYXQgdGhleSBjYW4gYWxsIGJlIHJlbGF0ZWQKLQkgIGJhY2sgdG8gZWFjaG90aGVyLgotCi0yMDA4LTExLTA0IDE1OjUyOjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0b29scy9nc3QtbGF1bmNoLmM6IFByaW50IHRoZSBtZXNzYWdlIHNlcW51bXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6Ci0JICBQcmludCB0aGUgbWVzc2FnZSBzZXFudW1zLgotCi0yMDA4LTExLTA0IDEzOjU2OjM3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5jIChnc3RfdXRpbF9zZXFudW1fbmV4dCk6IFJlZmFjdG9yIGZvciBjbGFyaXR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA4LTExLTA0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0dXRpbHMuYyAoZ3N0X3V0aWxfc2VxbnVtX25leHQpOiBSZWZhY3RvciBmb3IgY2xhcml0eS4KLQkgIEFsc28gYWRkIEFQSTogdG8gcHJldmlvdXMgY2hhbmdlbG9nIGVudHJ5LgotCi0yMDA4LTExLTA0IDEyOjIyOjUzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIEFkZCBzZXF1ZW5jZSBudW1iZXJzIHRvIGV2ZW50cyBhbmQgbWVzc2FnZXMuIFNlZSAjNTU5MjUwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA4LTExLTA0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgQWRkIHNlcXVlbmNlIG51bWJlcnMgdG8gZXZlbnRzIGFuZCBtZXNzYWdlcy4gU2VlICM1NTkyNTAuCi0JICAqIGdzdC9nc3R1dGlscy5jIChnc3RfdXRpbF9zZXFudW1fbmV4dCwgZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUpOgotCSAgTmV3IGZ1bmN0aW9ucy4KLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3RldmVudC5jIChfZ3N0X2V2ZW50X2NvcHksIGdzdF9ldmVudF9uZXcpOiBJbml0aWFsaXplIG5ldwotCSAgZXZlbnRzIHdpdGggYSBuZXcgc2VxdWVuY2UgbnVtYmVyLCBhbmQgY29weSBpdCB3aGVuIGNvcHlpbmcuCi0JICAoZ3N0X2V2ZW50X2dldF9zZXFudW0sIGdzdF9ldmVudF9zZXRfc2VxbnVtKTogQWNjZXNzb3JzIGZvciBhbgotCSAgZXZlbnQncyBzZXF1ZW5jZSBudW1iZXIuCi0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmMgKF9nc3RfbWVzc2FnZV9jb3B5LCBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tKToKLQkgIChnc3RfZXZlbnRfZ2V0X3NlcW51bSwgZ3N0X2V2ZW50X3NldF9zZXFudW0pOiBBcyB3aXRoIGV2ZW50cywgc28KLQkgIHdpdGggbWVzc2FnZXMuCi0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgZnVuY3Rpb25zIHRvIHRoZSBkb2NzLgotCi0yMDA4LTExLTA0IDExOjU1OjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL21hbnVhbC86IFNvbWUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgTWFudWFsIGZpeGVzIHRoYW5rcyB0bwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9pbnRyby1nc3RyZWFtZXIueG1sOgotCSAgKiBkb2NzL21hbnVhbC9pbnRyby1wcmVmYWNlLnhtbDoKLQkgIFNvbWUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgTWFudWFsIGZpeGVzIHRoYW5rcyB0bwotCSAgQW5kcmV3IEZlcmVuLiBGaXhlcyAjNTU4NDU5LgotCi0yMDA4LTExLTAzIDEyOjI5OjEwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBEb24ndCBib3RoZXIgd2l0aCB0aGUgR1RpbWVyIGlmIHdlIGRvbid0IG91dHB1dCB0aGUgcmVzdWx0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIERvbid0IGJvdGhlciB3aXRoIHRoZSBHVGltZXIgaWYgd2UgZG9uJ3Qgb3V0cHV0IHRoZSByZXN1bHRzLgotCi0yMDA4LTExLTAzIDEwOjU5OjQ5ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgbGlicy9nc3QvbmV0L01ha2VmaWxlLmFtOiBBZGQgV0lOMzJfTElCUyB0byBsaWJnc3RuZXQgTElCQURELiBGaXhlcyAjNTU3MzAwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCSAgKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICBBZGQgV0lOMzJfTElCUyB0byBsaWJnc3RuZXQgTElCQURELiBGaXhlcyAjNTU3MzAwLgotCi0yMDA4LTEwLTMxIDE1OjU0OjQ0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBPaCBteSwgc3R1ZGlwLCBzdHVwaWQgbWUuIFJlbW92ZSBkb3VibGUgc3RhdCgpIGNhbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICBPaCBteSwgc3R1ZGlwLCBzdHVwaWQgbWUuIFJlbW92ZSBkb3VibGUgc3RhdCgpIGNhbGwuCi0KLTIwMDgtMTAtMzEgMTQ6MjQ6NDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHByZXNldC5jOiBVc2UgZ191bmxpbmsgaW5zdGVhZCBvZiB1bmxpbmsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHByZXNldC5jOgotCSAgVXNlIGdfdW5saW5rIGluc3RlYWQgb2YgdW5saW5rLgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBVc2UgZ2xpYiB0eXBlLgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIEFkZCBhIEZJWE1FOi4KLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgICogZ3N0L2dzdHR5cGVmaW5kLmM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgRm9ybWF0dGluZyAmIHdoaXRlc3BhY2VzLgotCi0yMDA4LTEwLTMxIDA4OjUzOjI3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogRG9jIHR5cG8uIFVzZSByZXR1cm4gdmFsdWUgb2YgcGFyZW50X2NsYXNzLT5ldmVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICBEb2MgdHlwby4gVXNlIHJldHVybiB2YWx1ZSBvZiBwYXJlbnRfY2xhc3MtPmV2ZW50LgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgQ2hhaW4gdXAgYXQgdGhlIGVuZCBmb3IgY29uc2lzdGVuY3kuCi0KLTIwMDgtMTAtMzAgMTU6Mjk6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy86IENoYW5nZSB0byB4aW5jbHVkZSBiYXNlZCBidWlsZCAtIGl0cyBmYXN0ZXIgYW5kIGVhc2llciB0byBtYWludGFpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkgIENoYW5nZSB0byB4aW5jbHVkZSBiYXNlZCBidWlsZCAtIGl0cyBmYXN0ZXIgYW5kIGVhc2llciB0byBtYWludGFpbi4KLQotMjAwOC0xMC0zMCAxNDoxNToxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvOiBVc2UgZ191bmxpbmsoKSBhcyBub25lIG9mIHRoZXNlIGFyZSBkaXJlY3Rvcmllcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JICBVc2UgZ191bmxpbmsoKSBhcyBub25lIG9mIHRoZXNlIGFyZSBkaXJlY3Rvcmllcy4KLQotMjAwOC0xMC0yOSAxNzowNDo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBpcGVsaW5lLmM6IFNvbWUgbW9yZSBjb21tZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMpOgotCSAgU29tZSBtb3JlIGNvbW1lbnRzLgotCi0yMDA4LTEwLTI3IDE1OjAyOjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogSWYgd2UgaGF2ZSBhIGZpeGF0ZSBmdW5jdGlvbiwgY2FsbCBpdCBldmVuIGlmIHdlIGFscmVhZHkgaGF2ZSBmaXhlZCBjYXBzIGJlY2F1c2UgdGguLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZmluZF90cmFuc2Zvcm0pLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlKToKLQkgIElmIHdlIGhhdmUgYSBmaXhhdGUgZnVuY3Rpb24sIGNhbGwgaXQgZXZlbiBpZiB3ZSBhbHJlYWR5IGhhdmUgZml4ZWQgY2FwcwotCSAgYmVjYXVzZSB0aGUgc3ViY2xhc3MgbWlnaHQgYWRkIHNvbWUgY2Fwcy4gTWFrZXMgYXVkaW9jb252ZXJ0IGFkZCBhCi0JICBkZWZhdWx0IGNoYW5uZWwgbGF5b3V0LgotCi0yMDA4LTEwLTI0IDA5OjQxOjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogQ2xlYXIgdGhlIG91dHB1dCBidWZmZXIgdmFyaWFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlciksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlKToKLQkgIENsZWFyIHRoZSBvdXRwdXQgYnVmZmVyIHZhcmlhYmxlLgotCSAgQ2xlYW51cHMgdG8gdGhlIGVycm9yIHBhdGggaW4gdGhlIGdldHJhbmdlIGZ1bmN0aW9uLgotCSAgRml4ZXMgIzU1NzY0OS4KLQotMjAwOC0xMC0yMyAxMjo1Mjo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzLzogVXNlIGdzdF9idWZmZXJfdHJ5X25ld19hbmRfYWxsb2MoKSBhbmQgaGFuZGxlIGVycm9ycyBpbnN0ZWFkIG9mIHVzaW5nIGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYygpIHcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NyZWF0ZSk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2NyZWF0ZV9yZWFkKToKLQkgIFVzZSBnc3RfYnVmZmVyX3RyeV9uZXdfYW5kX2FsbG9jKCkgYW5kIGhhbmRsZSBlcnJvcnMgaW5zdGVhZCBvZgotCSAgdXNpbmcgZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKCkgd2hpY2ggYWJvcnRzIGlmIHRoZSBidWZmZXIgY291bGRuJ3QKLQkgIGJlIGFsbG9jYXRlZC4KLQotMjAwOC0xMC0yMyAwOTo0OTowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuYzogU2V0IHRoZSBsYXN0X3N0b3AgdG8gYSBtb3JlIG1lYW5pbmdmdWwgcG9zaXRpb24gd2hlbiBjb25maWd1cmluZyB0aGUgc2VnbWVudC4gaWUuIHRoZSBzdGFydC9zdG9wIG9mLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50X2Z1bGwpOgotCSAgU2V0IHRoZSBsYXN0X3N0b3AgdG8gYSBtb3JlIG1lYW5pbmdmdWwgcG9zaXRpb24gd2hlbiBjb25maWd1cmluZyB0aGUKLQkgIHNlZ21lbnQuIGllLiB0aGUgc3RhcnQvc3RvcCBvZiB0aGUgc2VnbWVudCBvciBjbGlwcGVkIGFnYWluc3QgdGhlCi0JICB1cGRhdGVkIHNlZ21lbnQgYm91bmRhcmllcy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFkZCBzb21lIHVuaXQgdGVzdHMgZm9yIHRoZSBsYXN0X3N0b3AuCi0KLTIwMDgtMTAtMjMgMDc6MTE6NTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmM6IFVzZSBHU1RfKFJFQUR8V1JJVEUpXyhGTE9BVHxET1VCTEUpXyhMRXxCRSkgaW5zdGVhZCBvZiBvdXIgb3duIGNvcGllcyBvZiB0aGVtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOgotCSAgVXNlIEdTVF8oUkVBRHxXUklURSlfKEZMT0FUfERPVUJMRSlfKExFfEJFKSBpbnN0ZWFkIG9mIG91ciBvd24KLQkgIGNvcGllcyBvZiB0aGVtLgotCi0yMDA4LTEwLTIzIDA3OjA5OjIxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIEFQSTogTW92ZSBmbG9hdCBlbmRpYW5uZXNzIGNvbnZlcnNpb24gbWFjcm9zIGZyb20gbGliZ3N0ZmxvYXRjYXN0IHRvIGNvcmUgYXMgaXQncyB1c2VmdWwgaW4gZ2VuZXJhbCwgZXZlbiBpbiBjb3JlLiBGaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgQVBJOiBNb3ZlIGZsb2F0IGVuZGlhbm5lc3MgY29udmVyc2lvbiBtYWNyb3MgZnJvbSBsaWJnc3RmbG9hdGNhc3QKLQkgIHRvIGNvcmUgYXMgaXQncyB1c2VmdWwgaW4gZ2VuZXJhbCwgZXZlbiBpbiBjb3JlLiBGaXhlcyBidWcgIzU1NTE5Ni4KLQkgIFRoaXMgYWRkcyBHRE9VQkxFX0ZST01fQkUsIEdET1VCTEVfRlJPTV9MRSwgR0RPVUJMRV9UT19CRSwKLQkgIEdET1VCTEVfVE9fTEUsIEdET1VCTEVfU1dBUF9MRV9CRSwgR0ZMT0FUX0ZST01fQkUsIEdGTE9BVF9GUk9NX0xFLAotCSAgR0ZMT0FUX1RPX0JFLCBHRkxPQVRfVE9fTEUsIEdGTE9BVF9TV0FQX0xFX0JFLgotCSAgQWxzbyBhZGQgR1NUX1JFQURfIGFuZCBHU1RfV1JJVEVfIG1hY3JvcyBmb3IgZmxvYXRzIGFuZCBkb3VibGVzOgotCSAgR1NUX1JFQURfRkxPQVRfTEUsIEdTVF9SRUFEX0ZMT0FUX0JFLCBHU1RfUkVBRF9ET1VCTEVfTEUsCi0JICBHU1RfUkVBRF9ET1VCTEVfQkUsIEdTVF9XUklURV9GTE9BVF9MRSwgR1NUX1dSSVRFX0ZMT0FUX0JFLAotCSAgR1NUX1dSSVRFX0RPVUJMRV9MRSwgR1NUX1dSSVRFX0RPVUJMRV9CRS4KLQotMjAwOC0xMC0yMiAxNDo0NzowNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBUEk6IEFkZCBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEgYW5kIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGEgdG8gZ2V0IGEgcG9pbnRlciB0byB0aGUgZGF0YSBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzogKGdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSksCi0JICAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBBUEk6IEFkZCBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEgYW5kIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGEKLQkgIHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIGhhdmUKLQkgIGEgZ3VhcmFudGVlZCBzaXplLgotCi0yMDA4LTEwLTIyIDE0OjI1OjE2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBGaXggYSBidWcgaW4gdGhlIG91dHB1dCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdCBzdW1tYXJ5IHdoZW4gLS1nc3QtZGlzYWJsZS1yZWdpc3RyeSBpcyBzdXBwbGllZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEZpeCBhIGJ1ZyBpbiB0aGUgb3V0cHV0IG9mIHRoZSBjb25maWd1cmUgc2NyaXB0IHN1bW1hcnkKLQkgIHdoZW4gLS1nc3QtZGlzYWJsZS1yZWdpc3RyeSBpcyBzdXBwbGllZAotCi0yMDA4LTEwLTIyIDEzOjQ3OjIwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS86IEZpeCB0aGUgbmFtZXMgb2YgMiBmdW5jdGlvbnMgaW4gdGhlIGRvY3Mgc3RyaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5jOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzoKLQkgIEZpeCB0aGUgbmFtZXMgb2YgMiBmdW5jdGlvbnMgaW4gdGhlIGRvY3Mgc3RyaW5ncy4KLQotMjAwOC0xMC0yMSAxNjozMDo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFByb3RlY3Qgc2lua19hbGxvYyBjYXBzIHdpdGggdGhlIHNpbmtwYWQgbG9jayB0byBhdm9pZCBuYXN0eSBjYXBzIHJlZmNvdW50IHByb2JsZW1zLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlciksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksIChnc3RfYmFzZV90cmFuc2Zvcm1fc3VnZ2VzdCk6Ci0JICBQcm90ZWN0IHNpbmtfYWxsb2MgY2FwcyB3aXRoIHRoZSBzaW5rcGFkIGxvY2sgdG8gYXZvaWQgbmFzdHkgY2FwcwotCSAgcmVmY291bnQgcHJvYmxlbXMgYXMgc2VlbiBpbiBiYW5zaGVlIGFuZCBtYXliZSBhbHNvIGluIGZhcnNpZ2h0Mi4KLQkgIFJlbW92ZSBhdG9taWMgaW50IG5vdyB0aGF0IHdlIG5lZWQgdG8gdGFrZSB0aGUgbG9jayBhbnl3YXlzLgotCi0yMDA4LTEwLTIwIDE1OjE4OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEltcGxlbWVudCBtb3JlIHNlZWtpbmcgaW4gcHVsbCBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZGVmYXVsdF9kb19zZWVrKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RlZmF1bHRfcHJlcGFyZV9zZWVrX3NlZ21lbnQpLAotCSAgKGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9zZWVrKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX2xhc3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX3BhdXNlZCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSk6Ci0JICBJbXBsZW1lbnQgbW9yZSBzZWVraW5nIGluIHB1bGwgbW9kZS4KLQkgIFVzZSBwYWQgY29udmVydCBmdW5jdGlvbnMgdG8gY29udmVydCBwb3NpdGlvbiB0byB0aGUgcmVxdWVzdGVkIGZvcm1hdC4KLQkgIEZpeCBwb3NpdGlvbi9kdXJhdGlvbiByZXBvcnRpbmcgaW4gcHVsbCBtb2RlLgotCSAgSW1wbGVtZW50IHBvc2l0aW9uIGFuZCBkdXJhdGlvbiByZXBvcnRpbmcgaW4gb3RoZXIgZm9ybWF0cyB0aGFuIHRpbWUuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEFkZCBtZW1iZXIgdG8ga2VlcCB0cmFjayBvZiB3aGVuIHRoZSBzZWdtZW50IGlzIHBsYXlpbmcuCi0KLTIwMDgtMTAtMjAgMTM6MzI6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogV2hlbiB3ZSB1c2UgZ3N0X3BhZF9hbGxvY19idWZmZXIoKSB3aXRob3V0IHdhbnRpbmcgdG8gc2V0IHRoZSBjYXBzIHdlIGFsc28gZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY29uZmlndXJlX3NyYyk6Ci0JICBXaGVuIHdlIHVzZSBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpIHdpdGhvdXQgd2FudGluZyB0byBzZXQgdGhlIGNhcHMgd2UKLQkgIGFsc28gZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgY2FwcyBhcmUgY29tcGF0aWJsZSBiZWNhdXNlIHRoZSBjYWxsZXIKLQkgIHByZXN1bWFibHkgaXMgZ29pbmcgdG8gcGVyZm9ybSBpdHMgb3duIGN1c3RvbSBjaGVja3MuIEZpeGVzIHNvbWUgY2FzZXMKLQkgIHdoZXJlIGJhc2V0cmFuc2Zvcm0gZWxlbWVudHMgd291bGQgZXJyb3Igb3V0IHdoZW4gaXQgd2FzIG5vdCBuZWVkZWQuCi0KLTIwMDgtMTAtMjAgMTM6Mjk6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBVcGRhdGUgY29tbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspOgotCSAgVXBkYXRlIGNvbW1lbnQuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUpOgotCSAgQWRkIHNvbWUgZGVidWcgaW5mby4KLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgQWRkIG5ldyBtZXRob2QuCi0KLTIwMDgtMTAtMTkgMTk6NTc6MjUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZGVmYXVsdF9kb19zZWVrKTsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X2RvX3NlZWspOwotCSAgUmVtb3ZlIGR1cGxpY2F0ZWQgYXNzaWdubWVudCBhbmQgbG9nIGEgbWVzc2FnZSBpbiBmYWlsdXJlIGNhc2UuCi0KLTIwMDgtMTAtMTkgMTA6MTM6MzkgKzAwMDAgIERpZyBHZSA8ZGlnLmdlLmNuQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmM6IEZpeCBjb3B5J24ncGFzdGUgYnVnIGluIGhlbGxvIHdvcmxkIGV4YW1wbGUgKCM1NTY5MDApLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogRGlnIEdlIDxkaWcuZ2UuY24gYXQgZ21haWwgY29tPgotCSAgKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzogKG1haW4pOgotCSAgRml4IGNvcHknbidwYXN0ZSBidWcgaW4gaGVsbG8gd29ybGQgZXhhbXBsZSAoIzU1NjkwMCkuCi0KLTIwMDgtMTAtMTcgMTM6Mjc6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUXVlcnkgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3aGVuIGFjdGl2YXRpbmcgdGhlIHBhZCBpbiBwdWxsIG1vZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGVfcHVsbCksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSk6Ci0JICBRdWVyeSB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdoZW4gYWN0aXZhdGluZyB0aGUgcGFkIGluIHB1bGwgbW9kZS4KLQkgIEltcGxlbWVudCBkdXJhdGlvbiBxdWVyeSBpbiBwdWxsIG1vZGUgYnkgdXNpbmcgdGhlIGluc3RhbGxlZCBwYWQgY29udmVydAotCSAgZnVuY3Rpb24gdG8gY29udmVydCBmcm9tIGJ5dGVzIHRvIHRoZSByZXF1ZXN0ZWQgZm9ybWF0LgotCi0yMDA4LTEwLTE2IDE0OjA5OjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgbWV0aG9kIHRvIGNvbW1pdCB0aGUgc3RhdGUgaW4gc3ViY2xhc3Nlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwpLAotCSAgKGdzdF9iYXNlX3NpbmtfZmx1c2hfc3RhcnQpLCAoZ3N0X2Jhc2Vfc2lua19mbHVzaF9zdG9wKSwKLQkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3RfYmFzZV9zaW5rX2xvb3ApLCAoZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGVfcHVsbCksCi0JICAoZ3N0X2Jhc2Vfc2lua19zZW5kX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgQWRkIG1ldGhvZCB0byBjb21taXQgdGhlIHN0YXRlIGluIHN1YmNsYXNzZXMuCi0JICBSZWZhY3RvciB0aGUgZmx1c2hfc3RhcnQgYW5kIGZsdXNoX3N0b3AgY29kZSBiZWNhdXNlIHdlIG5lZWQgaXQgZm9yCi0JICBmbHVzaGluZyB3aGlsZSBzZWVraW5nIHRvby4KLQkgIEltcGxlbWVudCB0aGUgYmVnaW5uaW5ncyBvZiBzZWVraW5nIGluIHB1bGwgbW9kZS4KLQkgIFVzZSB0aGUgc2VnbWVudCBsYXN0X3N0b3AgZmllbGQgZm9yIHRoZSBwdWxsaW5nIG9mZnNldC4KLQkgIEZpeCB0aGUgcGF1c2UgbWV0aG9kIGluIHB1bGwgbW9kZS4KLQkgIENvbmZpZ3VyZSB0aGUgc2VnbWVudCB0byBCWVRFUyBmb3IgcHVsbCBtb2RlLgotCSAgQVBJOiBHc3RCYXNlU2luazo6Z3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsKCkKLQotMjAwOC0xMC0xNiAxMzo1Njo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFVwZGF0ZSBzb21lIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICBVcGRhdGUgc29tZSBkb2NzLgotCi0yMDA4LTEwLTE0IDE3OjEwOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cXVhcmsuYzogRml4IHByaW50ZiBmb3JtYXQgd2FybmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVhcmsuYzogKF9wcml2X2dzdF9xdWFya3NfaW5pdGlhbGl6ZSk6Ci0JICBGaXggcHJpbnRmIGZvcm1hdCB3YXJuaW5nLgotCi0yMDA4LTEwLTE0IDEyOjM0OjU2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IEZpeCBmbG93IGFnZ3JlZ2F0aW9uIG9mIHRlZS4gRXJyb3Igb3V0IGltbWVkaWF0ZWx5IGZvciBhbGwgZmxvdyByZXR1cm5zIGV4Y2VwdCBPSyBhbmQgTk9UXy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2hhbmRsZV9idWZmZXIpOgotCSAgRml4IGZsb3cgYWdncmVnYXRpb24gb2YgdGVlLiBFcnJvciBvdXQgaW1tZWRpYXRlbHkgZm9yIGFsbCBmbG93IHJldHVybnMKLQkgIGV4Y2VwdCBPSyBhbmQgTk9UX0xJTktFRCwgcmV0dXJuIE5PVF9MSU5LRUQgaWYgYWxsIHBhZHMgYXJlIG5vdCBsaW5rZWQKLQkgIGFuZCByZXR1cm4gT0sgaWYgYXQgbGVhc3Qgb25lIHBhZCBpcyBsaW5rZWQuCi0JICBCZWZvcmUgd2UgZXJyb3JlZCBvdXQgb24gImZhdGFsIiBmbG93IHJldHVybnMgKGkuZS4gbm90IGZvciBXUk9OR19TVEFURSkKLQkgIGFuZCBvdGhlcndpc2UgcmV0dXJuZWQgdGhlIGZsb3cgcmV0dXJuIG9mIHRoZSBsYXN0IHBhZCwgd2hpY2ggaXMgd3JvbmcuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOiAoX2Zha2VfY2hhaW4pLCAoX2Zha2VfY2hhaW5fZXJyb3IpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKHRlZV9zdWl0ZSk6Ci0JICBBZGQgdW5pdCB0ZXN0cyBmb3IgdGhlIGZsb3cgYWdncmVnYXRpb24uCi0KLTIwMDgtMTAtMTMgMTc6MTk6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFJlbW92ZSBpdGVtIGZyb20gdGhlIHRvZG8gbGlzdCBiZWNhdXNlIGl0IHdhcyBmaXhlZCB3aXRoIHRoZSBsYXRlbmN5IHN0YXRlIGNoYW5nZSByZXdyaXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgUmVtb3ZlIGl0ZW0gZnJvbSB0aGUgdG9kbyBsaXN0IGJlY2F1c2UgaXQgd2FzIGZpeGVkIHdpdGggdGhlIGxhdGVuY3kKLQkgIHN0YXRlIGNoYW5nZSByZXdyaXRlcy4KLQkgICogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQ6Ci0JICBVcGRhdGUgc29tZSBkb2NzLgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnRfZnVsbCksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX25ld19zZWdtZW50X2Z1bGwpLCAoZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZSksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplKSwgKGdzdF9ldmVudF9uZXdfcW9zKSwKLQkgIChnc3RfZXZlbnRfcGFyc2VfcW9zKSwgKGdzdF9ldmVudF9uZXdfc2VlayksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX3NlZWspLCAoZ3N0X2V2ZW50X25ld19sYXRlbmN5KSwKLQkgIChnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeSk6Ci0JICBVc2UgcXVhcmtzIHRvIGNvbnN0cnVjdCBhbmQgcGFyc2UgZXZlbnRzLgotCSAgKiBnc3QvZ3N0cXVhcmsuYzogKF9wcml2X2dzdF9xdWFya3NfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3RxdWFyay5oOgotCSAgQWRkIHNvbWUgbW9yZSBxdWFya3MgdG8gdGhlIHRhYmxlLgotCSAgRW1pdCBhIHdhcm5pbmcgd2hlbiB0aGUgcXVhcmsgdGFibGVzIGFyZSBub3QgaW4gc3luYy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWRkIGFuIGFzc2VydC4KLQotMjAwOC0xMC0xMyAxNjo0Nzo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBwbHVnaW5zLzogRG9uJ3QgaW5zdGFsbCBzdGF0aWMgbGlicyBmb3IgcGx1Z2lucy4gRml4ZXMgIzU1MDg1MSBmb3IgY29yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSAgKiBwbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlLmFtOgotCSAgRG9uJ3QgaW5zdGFsbCBzdGF0aWMgbGlicyBmb3IgcGx1Z2lucy4gRml4ZXMgIzU1MDg1MSBmb3IgY29yZS4KLQotMjAwOC0xMC0xMyAxMDo1MDoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1cy5jOiBGaXggZGVhZGxvY2ssIGdfc291cmNlX2dldF9pZCgpIGNhbm5vdCBiZSBjYWxsZWQgaW4gZmluYWxpemUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19zb3VyY2VfZmluYWxpemUpLAotCSAgKGdzdF9idXNfYWRkX3dhdGNoX2Z1bGxfdW5sb2NrZWQpLCAoZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCksCi0JICAoZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKSwKLQkgIChnc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKSwKLQkgIChnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCksIChnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2gpOgotCSAgRml4IGRlYWRsb2NrLCBnX3NvdXJjZV9nZXRfaWQoKSBjYW5ub3QgYmUgY2FsbGVkIGluIGZpbmFsaXplLgotCSAgS2VlcCB0cmFjayBvZiB0aGUgd2F0Y2ggc291cmNlIGJ5IGtlZXBpbmcgYSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ugb2JqZWN0Ci0JICBpbnN0ZWFkLgotCSAgVXNlIHRoZSBidXMgbG9jayB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudAotCSAgd2F0Y2ggc291cmNlLgotCi0yMDA4LTEwLTEzIDA5OjIyOjIyICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvZ3N0YnVzLmM6IE9ubHkgYWxsb3cgb25lIGJ1cyB3YXRjaCB0byBiZSBzZXQgYXQgYSB0aW1lLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBkaXNwYXRjaGVyIHBvcHMgdGhlIG1lc3NhZ2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZSBvbiBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfc291cmNlX2ZpbmFsaXplKSwKLQkgIChnc3RfYnVzX2FkZF93YXRjaF9mdWxsKSwgKGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsKToKLQkgIE9ubHkgYWxsb3cgb25lIGJ1cyB3YXRjaCB0byBiZSBzZXQgYXQgYSB0aW1lLiBUaGlzIGlzIG5lY2Vzc2FyeQotCSAgYmVjYXVzZSB0aGUgZGlzcGF0Y2hlciBwb3BzIHRoZSBtZXNzYWdlIGZyb20gdGhlIGJ1cyBhbmQgdGhlIHNlY29uZAotCSAgd2F0Y2hlciB3aWxsIHRoZW4gZ2V0IE5VTEwgb3IgdGhlIG5leHQgbWVzc2FnZSAoYW5kIHRoZSBmaXJzdCB3b24ndAotCSAgZ2V0IHRoaXMgbmV4dCBtZXNzYWdlIHRoZW4sIGV0YykuIElmIG1vcmUgdGhhbiBvbmUgIndhdGNoZXIiIGlzCi0JICByZXF1aXJlZCBzaWduYWwgd2F0Y2hlcyBzaG91bGQgYmUgdXNlZC4gRml4ZXMgYnVnICM1MjYwNDQuCi0KLTIwMDgtMTAtMTIgMjI6MTY6MDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0b29scy9nc3QtbGF1bmNoLmM6IENoYW5nZSB0aGUgcHJpbnRpbmcgb2YgdGhlICdidWZmZXJpbmcuLi4nIG91dHB1dCB0byBhdm9pZCBwdXR0aW5nIGEgXHIgaW4gYSB0cmFuc2xhdGVhYmxlIHN0cmluZyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBDaGFuZ2UgdGhlIHByaW50aW5nIG9mIHRoZSAnYnVmZmVyaW5nLi4uJyBvdXRwdXQgdG8gYXZvaWQgcHV0dGluZwotCSAgYSBcciBpbiBhIHRyYW5zbGF0ZWFibGUgc3RyaW5nIChmbGFnZ2VkIGJ5IHRoZSBUUCkuCi0KLTIwMDgtMTAtMTAgMTU6Mzg6MDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHhtbC5jOiBDbGFyaWZ5IHRoYXQgdGhlIHNhdmVfdGh5c2VsZigpIGFuZCByZXN0b3JlX3RoeXNlbGYoKSB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiBHc3RPYmplY3QgbmVlZCB0byBiZSBvdmVycmlkLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHhtbC5jOgotCSAgQ2xhcmlmeSB0aGF0IHRoZSBzYXZlX3RoeXNlbGYoKSBhbmQgcmVzdG9yZV90aHlzZWxmKCkgdmlydHVhbAotCSAgZnVuY3Rpb25zIG9mIEdzdE9iamVjdCBuZWVkIHRvIGJlIG92ZXJyaWRlbiwgbm90Ci0JICBnc3Rfb2JqZWN0XyhzYXZlfHJlc3RvcmUpX3RoeXNlbGYoKSB3aGljaCBpcyBpbXBvc3NpYmxlLgotCSAgRml4ZXMgYnVnICM1NTU3MDAuCi0KLTIwMDgtMTAtMTAgMTU6Mjc6MzcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogUmV2ZXJ0IGEgcGF0Y2ggZnJvbSAyMSBtb250aHMgYWdvIHRoYXQgYnJva2UgY2FwcyBuZWdvdGlhdGlvbiBpbiBwdWxsIG1vZGUuIEJhc2ljYWxseSwgaGF2aW5nIGEgYnVmZmVyIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X3JhbmdlKSwgKGdzdF9wYWRfcHVsbF9yYW5nZSk6Ci0JICBSZXZlcnQgYSBwYXRjaCBmcm9tIDIxIG1vbnRocyBhZ28gdGhhdCBicm9rZSBjYXBzIG5lZ290aWF0aW9uIGluIHB1bGwKLQkgIG1vZGUuIEJhc2ljYWxseSwgaGF2aW5nIGEgYnVmZmVyIHBhc3Mgb3ZlciBhIHBhZCB3aWxsIHRyaWdnZXIgdGhlCi0JICBzZXRjYXBzIGZ1bmN0aW9uIHdoZW4gY2FwcyBjaGFuZ2UsIGp1c3QgbGlrZSBpbiBwdXNoIG1vZGUuCi0KLTIwMDgtMTAtMTAgMTU6MTI6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OiBVcGRhdGUgdGhlIGRvY3Mgc29tZSBtb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgotCSAgVXBkYXRlIHRoZSBkb2NzIHNvbWUgbW9yZS4KLQkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfcGVlayk6Ci0JICBJZiB3ZSBwdWxsIGEgYnVmZmVyIHdpdGggbm9uLXRyaXZpYWwgY2Fwcywgc3VnZ2VzdCB0aG9zZSBjYXBzIHdpdGggdGhlCi0JICBtYXggcHJvYmFiaWxpdHkuCi0KLTIwMDgtMTAtMTAgMTQ6MzE6MDMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IEFkZCBhbm90aGVyIGxpbWl0YXRpb24gb2YgcGFkLWJsb2NraW5nIHdpdGggc2VnbWVudCBzZWVrcyBub3QgcHVzaGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBBZGQgYW5vdGhlciBsaW1pdGF0aW9uIG9mIHBhZC1ibG9ja2luZyB3aXRoIHNlZ21lbnQgc2Vla3Mgbm90IHB1c2hpbmcKLQkgIEVPUyBldmVudHMuCi0KLTIwMDgtMTAtMTAgMTM6MjQ6MTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB3aW4zMi9jb21tb24vOiBBZGQgbmV3IHN5bWJvbHMgdG8gdGhlIHdpbjMyIGRlZnMgZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIG5ldyBzeW1ib2xzIHRvIHRoZSB3aW4zMiBkZWZzIGZpbGVzCi0KLTIwMDgtMTAtMTAgMTA6Mzg6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogVGhlIG1lc3NhZ2Ugc3JjIGNhbiBiZSBOVUxMLCBkb24ndCB0cnkgdG8gcHJpbnQgdGhlIG9iamVjdCBuYW1lcyBpbiB0aGF0IGNhc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksICh1cGRhdGVfZGVncmVlKSwKLQkgIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgVGhlIG1lc3NhZ2Ugc3JjIGNhbiBiZSBOVUxMLCBkb24ndCB0cnkgdG8gcHJpbnQgdGhlIG9iamVjdCBuYW1lcyBpbiB0aGF0Ci0JICBjYXNlLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZSk6Ci0JICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCi0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6IChydW5fcGlwZWxpbmUpLAotCSAgKEdTVF9TVEFSVF9URVNUKToKLQkgIEFkZCBzb21lIGRlYnVnLgotCSAgRml4IHRoZSB0ZXN0LCBwdWxsIGJhc2VkIHNpbmtzIGdvIEFTWU5DIHRvIFBBVVNFRCwganVzdCBsaWtlIG90aGVyCi0JICBzY2hlZHVsaW5nIG1vZGVzLgotCi0yMDA4LTEwLTEwIDEwOjAxOjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDogU21hbGwgZG9jIHVwZGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKLQkgIFNtYWxsIGRvYyB1cGRhdGUuCi0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19wYWRfZ2V0Y2FwcyksIChnc3RfYmFzZV9zaW5rX3BhZF9zZXRjYXBzKSwKLQkgIChnc3RfYmFzZV9zaW5rX2luaXQpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplKSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemUpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCksCi0JICAoZ3N0X2Jhc2Vfc2lua19sb29wKSwgKGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlKSwKLQkgIChnc3RfYmFzZV9zaW5rX25lZ290aWF0ZV9wdWxsKSwgKGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgQWRkIGJsb2Nrc2l6ZSBwcm9wZXJ0eSBhbmQgbWV0aG9kcyB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZGF0YQotCSAgdG8gcHVsbC4KLQkgIE5lZ290aWF0ZSBmaXJzdCBiZWZvcmUgYWN0aXZhdGluZyB1cHN0cmVhbSBpbiBwdWxsIG1vZGUgc28gdGhhdCB0aGV5IGNhbgotCSAgbmVnb3RpYXRlIHRoZW1zZWx2ZXMuCi0JICBXaGVuIHdlIG9wZXJhdGUgaW4gcHVsbCBtb2RlLCB3ZSBvbmx5IGFjY2VwdCB0aGUgY2FwcyB0aGF0IHdlCi0JICBuZWdvdGlhdGVkLgotCSAgTWFrZSB0aGUgc2luayBnbyBBU1lOQyB0byBQQVVTRUQsIGxpa2UgYWxsIG90aGVyIHNpbmtzLgotCSAgQVBJOiBHc3RCYXNlU2luazo6Z3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplKCkKLQkgIEFQSTogR3N0QmFzZVNpbms6OmdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZSgpCi0JICBBUEk6IEdzdEJhc2VTaW5rOjpibG9ja3NpemUKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nKSwKLQkgIChnc3RfYmFzZV9zcmNfc2V0X2xpdmUpLCAoZ3N0X2Jhc2Vfc3JjX2lzX2xpdmUpLAotCSAgKGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KSwgKGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5KSwKLQkgIChnc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZSksIChnc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXApLCAoZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXApLAotCSAgKGdzdF9iYXNlX3NyY19zZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2Vfc3JjX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgQWRkIHR5cGVjaGVja2luZyBpbiBwdWJsaWMgQVBJIGZ1bmN0aW9ucy4KLQkgIEFkZCBtZXRob2RzIHRvIGNvbnRyb2wgdGhlIGJsb2Nrc2l6ZSBpbiBzdWJjbGFzc2VzLgotCSAgQVBJOiBHc3RCYXNlU3JjOjpnc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZSgpCi0JICBBUEk6IEdzdEJhc2VTcmM6OmdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplKCkKLQotMjAwOC0xMC0xMCAwOToxMToxMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6IFdlIG5vdyBzZWUgMyBldmVudHMgZ28gdGhyb3VnaCBvdXIgcGFkLCBzaW5jZSBiYXNlc2luayBub3cgc2VuZHMgdXBzdHJlYW0gbGF0ZW5jeSBldmVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6IChwcm9iZV9kb19ub3RoaW5nKSwgKGRhdGFfcHJvYmUpLAotCSAgKGJ1ZmZlcl9wcm9iZSksIChldmVudF9wcm9iZSksIChHU1RfU1RBUlRfVEVTVCk6Ci0JICBXZSBub3cgc2VlIDMgZXZlbnRzIGdvIHRocm91Z2ggb3VyIHBhZCwgc2luY2UgYmFzZXNpbmsgbm93IHNlbmRzCi0JICB1cHN0cmVhbSBsYXRlbmN5IGV2ZW50cy4KLQotMjAwOC0xMC0wOCAxNToyMToxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBpcGVsaW5lLmM6IFJlbGVhc2UgdGhlIG9iamVjdCBsb2NrIGJlZm9yZSB0cnlpbmcgdG8gZmx1c2ggdGhlIGJ1cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOgotCSAgUmVsZWFzZSB0aGUgb2JqZWN0IGxvY2sgYmVmb3JlIHRyeWluZyB0byBmbHVzaCB0aGUgYnVzLgotCi0yMDA4LTEwLTA4IDE0OjIxOjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEZvcndhcmQgTEFURU5DWSBldmVudHMgdXBzdHJlYW1zIHNvIHRoYXQgZWxlbWVudHMga25vdyBhYm91dCB0aGUgdG90YWwgcGlwZWxpbmUgbGF0ZW5jeS4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3NlbmRfZXZlbnQpOgotCSAgRm9yd2FyZCBMQVRFTkNZIGV2ZW50cyB1cHN0cmVhbXMgc28gdGhhdCBlbGVtZW50cyBrbm93IGFib3V0IHRoZSB0b3RhbAotCSAgcGlwZWxpbmUgbGF0ZW5jeS4gRml4ZXMgIzU1NTMwNy4KLQotMjAwOC0xMC0wOCAxMToyMDoxNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogQWxsb3cgdGhyb3VnaCBxdWVyaWVzIHdoZW4gd2UgZG9uJ3Qga25vdyBob3cgYXMgb3RoZXJ3aXNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHF1ZXJ5IHRoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIEFsbG93IHRocm91Z2ggcXVlcmllcyB3aGVuIHdlIGRvbid0IGtub3cgaG93Ci0JICB0byBhZGp1c3QgdGhlbSAobm90IFRJTUUgb3IgQllURVMpLCBhcyBvdGhlcndpc2UgaXQncwotCSAgbm90IHBvc3NpYmxlIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIG9yZGVyCi0JICB0byBzZWVrIGluIG90aGVyIGZvcm1hdHMgYXQgYWxsLgotCi0yMDA4LTEwLTA4IDExOjEyOjE1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIGNoYW5nZWxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjaGFuZ2Vsb2cKLQotMjAwOC0xMC0wOCAxMToxMToyNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBQbGFjYXRlIGRvYyBwZW5kYW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0xMC0wOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogUGxhY2F0ZSBkb2MgcGVuZGFudHMuCi0KLTIwMDgtMTAtMDggMTA6Mzk6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RnaG9zdHBhZC4qOiBVbmJyZWFrIC1nb29kIGJ1aWxkLCBwcml2YXRlIGlzIGEgcmVzZXJ2ZWQgYysrIGtleXdvcmQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSAgVW5icmVhayAtZ29vZCBidWlsZCwgcHJpdmF0ZSBpcyBhIHJlc2VydmVkIGMrKyBrZXl3b3JkLgotCi0yMDA4LTEwLTA4IDEwOjE5OjExICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RnaG9zdHBhZC4qOiBGaXggdW5pbnRlbmRlZCBBUEkgcmVtb3ZhbDogcmUtYWRkIEdTVF9HSE9TVF9QQURfQ0FTVCB0byB0aGUgaGVhZGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA4LTEwLTA4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuaCAoR1NUX0dIT1NUX1BBRF9DQVNUKToKLQkgICogZ3N0L2dzdGdob3N0cGFkLmMgKEdTVF9HSE9TVF9QQURfQ0FTVCk6IEZpeCB1bmludGVuZGVkIEFQSQotCSAgcmVtb3ZhbDogcmUtYWRkIEdTVF9HSE9TVF9QQURfQ0FTVCB0byB0aGUgaGVhZGVyLgotCi0yMDA4LTEwLTA4IDEwOjEyOjQ1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RnaG9zdHBhZC5oIChHc3RQcm94eVBhZCwgR3N0UHJveHlQYWRDbGFzcywgR3N0R2hvc3RQYWQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMTAtMDggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5oIChHc3RQcm94eVBhZCwgR3N0UHJveHlQYWRDbGFzcywgR3N0R2hvc3RQYWQpCi0JICAoR3N0R2hvc3RQYWRDbGFzcyk6IFB1YmxpY2FsbHkgZXhwb3NlIHRoZXNlIHN0cnVjdHVyZXMgc28gYXMgdG8KLQkgIGFsbG93IGVhc3kgc3ViY2xhc3NpbmcgZnJvbSBDLiBIaWRlIHRoZSBtZW1iZXIgZGF0YSBiZWhpbmQgYQotCSAgcHJpdmF0ZSBvcGFxdWUgZGF0YSBwb2ludGVyLgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogQWRhcHQgdG8gc3RvcmUgaW5zdGFuY2UgZGF0YSBpbiB0aGUgdHlwZQotCSAgaW5zdGFuY2UncyBwcml2YXRlIGRhdGEgcmVnaW9uLCBub3QgaW4gdGhlIHB1YmxpYyBzdHJ1Y3QuCi0KLTIwMDgtMTAtMDggMTA6MDc6MTUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IElmIHdlIGNhbid0IGdldCBhIGNhY2hlIGZpbGUgZG9uJ3QgdHJ5IHRvIHNhdmUgc29tZXRoaW5nIHRvIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jYWNoZSk6Ci0JICBJZiB3ZSBjYW4ndCBnZXQgYSBjYWNoZSBmaWxlIGRvbid0IHRyeSB0byBzYXZlIHNvbWV0aGluZyB0byBpdC4KLQkgIERlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVycyB1c3VhbGx5IGlzbid0IGEgZ29vZCBpZGVhLgotCi0yMDA4LTEwLTA4IDA4OjU0OjU1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RnaG9zdHBhZC5jIChnc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdCk6IElmIHdlIGdvdCBhIHRlbXBsYXRlIHZpYSBnX29iamVjdF9nZXQoKSwgYmUgc3VyZSB0byB1bnJlZiBpdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0xMC0wOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9naG9zdF9wYWRfY29uc3RydWN0KTogSWYgd2UgZ290IGEKLQkgIHRlbXBsYXRlIHZpYSBnX29iamVjdF9nZXQoKSwgYmUgc3VyZSB0byB1bnJlZiBpdC4KLQkgICogZ3N0L2dzdGJ1ZmZlci5oIChHU1RfQlVGRkVSX0ZSRUVfRlVOQyk6IEZpeCBpbmNvcnJlY3QgZG9jLgotCi0yMDA4LTEwLTA3IDE1OjEyOjIxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgU3BhcmMgQUJJIGNoZWNrcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3Rfc3BhcmMuaDoKLQkgICogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3NwYXJjLmg6Ci0JICBBZGQgU3BhcmMgQUJJIGNoZWNrcwotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIENhc3Qgc2lnbmVkIGludGVnZXIgdG8gdW5zaWduZWQgdG8gYXZvaWQgYSBjb21waWxlciB3YXJuaW5nLgotCi0yMDA4LTEwLTA3IDEyOjI2OjQwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jOiBVc2UgbmV3IEdTVF9SRUFEX1VJTlQyNF8oTEV8QkUpIG1hY3Jvcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzogKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlKSwKLQkgIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZSksIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlKSwKLQkgIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlKSwgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZSksCi0JICAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlKSwgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlKSwKLQkgIChnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZSk6Ci0JICBVc2UgbmV3IEdTVF9SRUFEX1VJTlQyNF8oTEV8QkUpIG1hY3Jvcy4KLQotMjAwOC0xMC0wNyAxMjowMDo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBbHdheXMgdXNlIHRoZSB1bmFsaWduZWQgdmFyaWFudHMgb2YgR1NUX1JFQURfVUlOVCogYW5kIEdTVF9XUklURV9VSU5UKiBhcyBpdCdzIHRvbyBlYXN5IHRvIGJyZWFrIHRoZSBJU08gQyBzdHJpY3QgYWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFsd2F5cyB1c2UgdGhlIHVuYWxpZ25lZCB2YXJpYW50cyBvZiBHU1RfUkVBRF9VSU5UKiBhbmQgR1NUX1dSSVRFX1VJTlQqCi0JICBhcyBpdCdzIHRvbyBlYXN5IHRvIGJyZWFrIHRoZSBJU08gQyBzdHJpY3QgYWxpYXNpbmcgcnVsZXMgd2l0aCBzaW1wbGUKLQkgIGNhc3RzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgYW5kIHRoaXMgd291bGQgaW50cm9kdWNlIGhhcmQgdG8gZGVidWcKLQkgIGJ1Z3MuIEZpeGVzIGJ1ZyAjNTQ1NzE0LgotCSAgQVBJOiBBZGQgR1NUX1JFQURfVUlOVDI0XyhMRXxCRSkgYW5kIEdTVF9XUklURV9VSU5UMjRfKExFfEJFKS4KLQotMjAwOC0xMC0wNyAwNjo1NjoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogQWRkICdTaW5jZScgYml0cyB0byBndGstZG9jIGNodW5rcyBmb3IgbmV3IEFQSS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6IChHU1RfQlVGRkVSX0ZSRUVfRlVOQyk6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QpOgotCSAgQWRkICdTaW5jZScgYml0cyB0byBndGstZG9jIGNodW5rcyBmb3IgbmV3IEFQSS4KLQotMjAwOC0xMC0wNiAyMTo1Mjo1NyArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogRml4IGRvY3VtZW50YXRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgRml4IGRvY3VtZW50YXRpb24KLQotMjAwOC0xMC0wNiAxODowMzo1OCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBjaGFuZ2Vsb2csIGRvaAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjaGFuZ2Vsb2csIGRvaAotCi0yMDA4LTEwLTA2IDE4OjAxOjQyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuaCAoR1NUX0JVRkZFUl9GUkVFX0ZVTkMpOiBOZXcgQVBJLCBhIGZyZWUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgbWFsbG9jX2RhdGEgdG8gZnJlZSBpdC4gQi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA4LTEwLTA2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0YnVmZmVyLmggKEdTVF9CVUZGRVJfRlJFRV9GVU5DKTogTmV3IEFQSSwgYSBmcmVlIGZ1bmN0aW9uCi0JICB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBtYWxsb2NfZGF0YSB0byBmcmVlIGl0LiBCYXNpY2FsbHkgYSB3YXkKLQkgIHRvIGF2b2lkIHN1YmNsYXNzaW5nIHdoZW4gYWxsIHlvdSBuZWVkIGlzIGEgZGlmZmVyZW50IGZyZWUKLQkgIGZ1bmN0aW9uLCBpLmUuIGZyZWUoKSBpbnN0ZWFkIG9mIGdfZnJlZSgpLgotCSAgKiBnc3QvZ3N0YnVmZmVyLmMgKGdzdF9idWZmZXJfZmluYWxpemUpOiBGcmVlIG1hbGxvY19kYXRhIHZpYQotCSAgY2FsbGluZyB0aGUgZnJlZSBmdW5jdGlvbi4KLQkgIChnc3RfYnVmZmVyX2luaXQpOiBJbml0aWFsaXplIHRoZSBmcmVlIGZ1bmN0aW9uIHRvIGdfZnJlZS4KLQotMjAwOC0xMC0wNiAxNzo1NzoyNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0Z2hvc3RwYWQuKjogTmV3IGZ1bmN0aW9uLCBmaW5pc2hlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgZ2hvc3QgcGFkLiBVc2VmdWwgZm9yIGxhbmd1YWdlIGJpbmRpbmdzIGFuZCBzdWJjbGFzc2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0xMC0wNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jIChnc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdCk6IE5ldyBmdW5jdGlvbiwKLQkgIGZpbmlzaGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBnaG9zdCBwYWQuIFVzZWZ1bCBmb3IgbGFuZ3VhZ2UKLQkgIGJpbmRpbmdzIGFuZCBzdWJjbGFzc2VycyBvZiBHc3RHaG9zdFBhZC4gRml4ZXMgIzUzOTEwOC4KLQkgIChnc3RfZ2hvc3RfcGFkX25ld19mdWxsKTogVXNlIHRoZSBuZXcgY29uc3RydWN0b3IuCi0KLTIwMDgtMTAtMDYgMTY6MTU6MDIgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIGdzdC9nc3RiaW4uYzogS2VlcCB0cmFjayBvZiBwYWRzIHRoYXQgYXJlIGJlaW5nIGxpbmtlZC91bmxpbmtlZCBhbmQgcmVzeW5jIHRoZSBzdGF0ZSBjaGFuZ2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlIG9uIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9pbml0KSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAotCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAodXBkYXRlX2RlZ3JlZSksCi0JICAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25ldyksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgS2VlcCB0cmFjayBvZiBwYWRzIHRoYXQgYXJlIGJlaW5nIGxpbmtlZC91bmxpbmtlZCBhbmQgcmVzeW5jIHRoZSBzdGF0ZQotCSAgY2hhbmdlcy4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfZGlyZWN0aW9uKSwKLQkgIChnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiksIChnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiksCi0JICAoZ3N0X3BhZF9zZXRfY2hlY2tnZXRyYW5nZV9mdW5jdGlvbiksIChnc3RfcGFkX3VubGluayksCi0JICAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLCAoZ3N0X3BhZF9saW5rKSwKLQkgIChnc3RfcGFkX2V2ZW50X2RlZmF1bHRfZGlzcGF0Y2gpLCAoZ3N0X3BhZF9jaGFpbiksIChnc3RfcGFkX3B1c2gpLAotCSAgKGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSksIChnc3RfcGFkX2dldF9yYW5nZSksCi0JICAoZ3N0X3BhZF9wdWxsX3JhbmdlKToKLQkgIFNvbWUgY29kZSBjbGVhbnVwcywgdXNlIG1hY3JvcyB0byBjaGVjayBwYWQgZGlyZWN0aW9uLgotCSAgRG9uJ3QgbmVlZCB0byB0YWtlIHRoZSBsb2NrIG9uIHRoZSBwYWQgZGlyZWN0aW9uLgotCSAgUG9zdCBzdHJ1Y3R1cmUgY2hhbmdlIHdoZW4gcGFkcyBhcmUgbGlua2VkL3VubGlua2VkLgotCSAgQ2hhbmdlIHNvbWUgY2hlY2tzIGludG8gX3JldHVybl9pZl9mYWlsKCkuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkgICh0ZXN0X2xpbmtfc3RydWN0dXJlX2NoYW5nZV9zdGF0ZV9jaGFuZ2VkX3N5bmNfY2IpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9iaW5fc3VpdGUpOgotCSAgQWRkIHRlc3RjYXNlIGZvciBwYWQgbGluay91bmxpbmtlIHJlc3luYyBkdXJpbmcgYSBzdGF0ZSBjaGFuZ2UuCi0JICBGaXhlcyAjNTEwMzU0LgotCi0yMDA4LTEwLTA2IDE1OjMxOjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBJbXBsZW1lbnQgU1RSVUNUVVJFX0NIQU5HRUQgbWVzc2FnZXMuIFRoZXNlIG1lc3NhZ2VzIHdpbGwgYmUgdXNlZCB0byBzaWduYWwgdGhlIHBhcmVudCBiaW4gb2YgbGluay91bmxpbmsgb3BlcmF0aW9ucyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UpLAotCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2UpOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgSW1wbGVtZW50IFNUUlVDVFVSRV9DSEFOR0VEIG1lc3NhZ2VzLiBUaGVzZSBtZXNzYWdlcyB3aWxsIGJlIHVzZWQgdG8KLQkgIHNpZ25hbCB0aGUgcGFyZW50IGJpbiBvZiBsaW5rL3VubGluayBvcGVyYXRpb25zIHRoYXQgY291bGQgcmVxdWlyZSBhCi0JICByZXN5bmMgd2hlbiBkb2luZyBhIHN0YXRlIGNoYW5nZS4gU2VlICMjNTEwMzU0LgotCSAgQVBJOiBnc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZSgpCi0JICBBUEk6IGdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2UoKQotCi0yMDA4LTEwLTA2IDE1OjIxOjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cXVhcmsuKjogQWRkIHNvbWUgbW9yZSBxdWFya3MgZm9yIG5ldyBtZXNzYWdlLiBTZWUgIzUxMDM1NC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVhcmsuYzoKLQkgICogZ3N0L2dzdHF1YXJrLmg6Ci0JICBBZGQgc29tZSBtb3JlIHF1YXJrcyBmb3IgbmV3IG1lc3NhZ2UuIFNlZSAjNTEwMzU0LgotCi0yMDA4LTEwLTA2IDEyOjU3OjM5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiBhZGQgQVBJIHRhZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeTogYWRkIEFQSSB0YWcKLQotMjAwOC0xMC0wNiAxMjo0MTo1MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBZGQgYml0IHJlYWRlciBhbmQgYnl0ZSByZWFkZXIgY2xhc3NlcywgaW5jbHVkaW5nIGRvY3VtZW50YXRpb24gYW5kIGFuIGV4dGVuc2l2ZSB1bml0IHRlc3Qgc3VpdGUuIEZpeGVzIGJ1ZyAjNTUzNTU0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmM6IChnc3RfYml0X3JlYWRlcl9uZXcpLAotCSAgKGdzdF9iaXRfcmVhZGVyX25ld19mcm9tX2J1ZmZlciksIChnc3RfYml0X3JlYWRlcl9mcmVlKSwKLQkgIChnc3RfYml0X3JlYWRlcl9pbml0KSwgKGdzdF9iaXRfcmVhZGVyX2luaXRfZnJvbV9idWZmZXIpLAotCSAgKGdzdF9iaXRfcmVhZGVyX3NldF9wb3MpLCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyksCi0JICAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyksIChnc3RfYml0X3JlYWRlcl9za2lwKSwKLQkgIChnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuYzogKEdET1VCTEVfU1dBUF9MRV9CRSksCi0JICAoR0ZMT0FUX1NXQVBfTEVfQkUpLCAoZ3N0X2J5dGVfcmVhZGVyX25ldyksCi0JICAoZ3N0X2J5dGVfcmVhZGVyX25ld19mcm9tX2J1ZmZlciksIChnc3RfYnl0ZV9yZWFkZXJfZnJlZSksCi0JICAoZ3N0X2J5dGVfcmVhZGVyX2luaXQpLCAoZ3N0X2J5dGVfcmVhZGVyX2luaXRfZnJvbV9idWZmZXIpLAotCSAgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zKSwgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zKSwKLQkgIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyksIChnc3RfYnl0ZV9yZWFkZXJfc2tpcCksCi0JICAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCksIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDgpLAotCSAgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4KSwgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDgpLAotCSAgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlKSwgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlKSwKLQkgIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlKSwgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmUpLAotCSAgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZSksIChnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmUpLAotCSAgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlKSwgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2JpdHJlYWRlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9iaXRfcmVhZGVyX3N1aXRlKToKLQkgICogdGVzdHMvY2hlY2svbGlicy9ieXRlcmVhZGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2J5dGVfcmVhZGVyX3N1aXRlKToKLQkgIEFkZCBiaXQgcmVhZGVyIGFuZCBieXRlIHJlYWRlciBjbGFzc2VzLCBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbgotCSAgYW5kIGFuIGV4dGVuc2l2ZSB1bml0IHRlc3Qgc3VpdGUuIEZpeGVzIGJ1ZyAjNTUzNTU0LgotCi0yMDA4LTEwLTA2IDA4OjU4OjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEltcHJvdmUgcG9zaXRpb24gcmVwb3J0aW5nIHdoaWxlIGZsdXNoaW5nIGFuZCBvdGhlciBpbnRlcm1lZGlhdGUgc3RhdGUgY2hhbmdlcy4gRml4ZXMgIzUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSk6Ci0JICBJbXByb3ZlIHBvc2l0aW9uIHJlcG9ydGluZyB3aGlsZSBmbHVzaGluZyBhbmQgb3RoZXIgaW50ZXJtZWRpYXRlIHN0YXRlCi0JICBjaGFuZ2VzLiBGaXhlcyAjNTUzODc0LgotCi0yMDA4LTEwLTA2IDA4OjQ1OjQyICswMDAwICBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDBAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IEZpeCBzbWFsbCByZWZvdW50IGxlYWsgaW4gY2FwcyBjb21wYXRpYmlsaXR5IGNoZWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQW50b2luZSBUcmVtYmxheSA8aGV4YTAwIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfbGlua19jaGVja19jb21wYXRpYmxlX3VubG9ja2VkKToKLQkgIE9yaWdpbmFsIHBhdGNoIGJ5IDogU2ltb24gRGVzY2FyaWVzCi0JICBGaXggc21hbGwgcmVmb3VudCBsZWFrIGluIGNhcHMgY29tcGF0aWJpbGl0eSBjaGVjay4KLQkgIEZpeGVzICM1NTE2NzYuCi0KLTIwMDgtMTAtMDYgMDc6MzA6NTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9wd2cvYWR2YW5jZWQtcmVxdWVzdC54bWw6IEZpeCAwLjggYXBpIHVzYWdlIGluIGV4YW1wbGUuIEZpeGVzICM1NTQ1NjEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1yZXF1ZXN0LnhtbDoKLQkgIEZpeCAwLjggYXBpIHVzYWdlIGluIGV4YW1wbGUuIEZpeGVzICM1NTQ1NjEKLQkgICogZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JICBDaGFuZ2UgMC45IHRvIDAuMTAgaGVyZS4KLQotMjAwOC0xMC0wNiAwNzoxMzowMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL21hbnVhbC9iYXNpY3MtZGF0YS54bWw6IENoYW5nZSAiZXZlbnQtZXZlbnQgaW50ZXJhY3Rpb24iIHRvICJlbGVtZW50LWVsZW1lbnQgaW50ZXJhY3Rpb24iLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1kYXRhLnhtbDoKLQkgIENoYW5nZSAiZXZlbnQtZXZlbnQgaW50ZXJhY3Rpb24iIHRvICJlbGVtZW50LWVsZW1lbnQgaW50ZXJhY3Rpb24iLgotCSAgRml4ZXMgIzU1MjQ0OC4gQWxzbyBmaXggc2FtcGxlIGNvZGUgZm9yIHNlZWtpbmcgYW5kIGRvIG1vcmUgMC44LT4wLjEwCi0JICB1cGRhdGVzLgotCi0yMDA4LTEwLTA1IDEwOjAxOjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBCYWNrIHRvIGRldmVsb3BtZW50IC0+IDAuMTAuMjEuMQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQgLT4gMC4xMC4yMS4xCi0KLT09PSByZWxlYXNlIDAuMTAuMjEgPT09Ci0KLTIwMDgtMTAtMDIgMjM6NTk6NTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjIxCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbGVhc2UgMC4xMC4yMQotCi0yMDA4LTEwLTAyIDIyOjQyOjE4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDgtMDktMjggMjI6NDk6NTYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IDAuMTAuMjAuNCBwcmUtcmVsZWFzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIDAuMTAuMjAuNCBwcmUtcmVsZWFzZQotCi0yMDA4LTA5LTI4IDIxOjE5OjE1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgRml4IGFzc2VydGlvbiBpbiBiYXNldHJhbnNmb3JtIHdoZW4gdGhlIHN1YmNsYXNzIGNob29zZXMgbm90IHRvIGFsbG9jYXRlIGEgYnVmZmVyIGluIHByZXBhcmVfYnVmZmVyKCksIGFuZCBtYWtlIGNhcHNmLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc2ZpbHRlci5jOgotCSAgRml4IGFzc2VydGlvbiBpbiBiYXNldHJhbnNmb3JtIHdoZW4gdGhlIHN1YmNsYXNzIGNob29zZXMgbm90IHRvCi0JICBhbGxvY2F0ZSBhIGJ1ZmZlciBpbiBwcmVwYXJlX2J1ZmZlcigpLCBhbmQgbWFrZSBjYXBzZmlsdGVyIGVycm9yIG91dAotCSAgY2xlYW5seSBpZiByZXF1ZXN0ZWQgdG8gYXBwbHkgY2FwcyB0aGF0IGRvbid0IGNvbXBsZXRlbHkgc3BlY2lmeSB0aGUKLQkgIGJ1ZmZlci4gRml4ZXMgIzU1MTUwOQotCi0yMDA4LTA5LTI0IDE1OjAzOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogVGFrZSBuZXcgY2FwcyByZWYgYmVjYXVzZSBvdXIgb2xkIG9uZSBtaWdodCBoYXZlIGJlZW4gZ29uZSB3aGVuIHRoZSBzdWJjbGFzcyBwZXJmb3IuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKToKLQkgIFRha2UgbmV3IGNhcHMgcmVmIGJlY2F1c2Ugb3VyIG9sZCBvbmUgbWlnaHQgaGF2ZSBiZWVuIGdvbmUgd2hlbiB0aGUKLQkgIHN1YmNsYXNzIHBlcmZvcm1zIGEgZ3N0X3BhZF9zZXRfY2FwcygpIG9uIHRoZSBzcmNwYWQuIFNlZSAjNTQ4NzY0LgotCi0yMDA4LTA5LTE2IDE1OjM1OjA0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgQWxzbyBjb21taXQgQ2hhbmdlTG9nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEFsc28gY29tbWl0IENoYW5nZUxvZwotCi0yMDA4LTA5LTE2IDE1OjI0OjA0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgR2FoLiBDb21taXQgcHJlLXJlbGVhc2UgaW5mbyB0aGF0IHNob3VsZCBoYXZlIGdvbmUgaW4gbGFzdCB3ZWVrIGFscmVhZHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEdhaC4gQ29tbWl0IHByZS1yZWxlYXNlIGluZm8gdGhhdCBzaG91bGQgaGF2ZSBnb25lIGluIGxhc3Qgd2VlayBhbHJlYWR5LgotCSAgMjAwOC0wOS0xMCAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAwLjEwLjIwLjIgcHJlLXJlbGVhc2UKLQkgICogcG8vTElOR1VBUzoKLQkgICogcG8vaWQucG86Ci0JICAqIHBvL3B0X0JSLnBvOgotCSAgTmV3IHRyYW5zbGF0aW9ucy4KLQotMjAwOC0wOS0xNSAxNToxODowNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjb25maWd1cmUuYWM6IERvIG5vdCBwcm9iZSBhdmFpbGFiaWxpdHkgb2YgY2hlY2sgdW5pdCB0ZXN0IGxpYnJhcnkgd2hlbiBjcm9zcyBjb21waWxpbmcsIGFzIHRlc3Qgd291bGQgbm90IHdvcmsgYW55d2EuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBEbyBub3QgcHJvYmUgYXZhaWxhYmlsaXR5IG9mIGNoZWNrIHVuaXQgdGVzdCBsaWJyYXJ5IHdoZW4gY3Jvc3MKLQkgIGNvbXBpbGluZywgYXMgdGVzdCB3b3VsZCBub3Qgd29yayBhbnl3YXkuIEFsc28gY2xlYW51cCB2ZXJib3NlIG91dHB1dAotCSAgb2YgdGhlIGNoZWNrIHRlc3QuIEZpeGVzICM1NTE5NTIuCi0KLTIwMDgtMDktMTQgMjI6MDE6MzAgKzAwMDAgIEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMEBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IEF2b2lkIGxlYWtpbmcgdGhlIHBhcmVudCByZWYgd2hlbiB3ZSBmYWlsIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudCB1c2luZyBnc3RfZWxlbWVudF9zeW5jXy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogQW50b2luZSBUcmVtYmxheSA8aGV4YTAwIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KToKLQkgIEF2b2lkIGxlYWtpbmcgdGhlIHBhcmVudCByZWYgd2hlbiB3ZSBmYWlsIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiB0aGUKLQkgIGVsZW1lbnQgdXNpbmcgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCgpLiBGaXhlcyAjNTUxOTc4LgotCi0yMDA4LTA5LTExIDE2OjU2OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL21hbnVhbC9pbnRyby1tb3RpdmF0aW9uLnhtbDogUmVtb3ZlIHNvbWUgYml0cyB0aGF0IG5vIGxvbmdlciBhcHBseSwgdXBkYXRlIG90aGVycyAoIzU1MTY0MikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvaW50cm8tbW90aXZhdGlvbi54bWw6OgotCSAgUmVtb3ZlIHNvbWUgYml0cyB0aGF0IG5vIGxvbmdlciBhcHBseSwgdXBkYXRlIG90aGVycyAoIzU1MTY0MikuCi0KLTIwMDgtMDktMDkgMTg6NDc6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjogQWRkIEdTVF9EQVRBRElSLCBoYXJkLWNvZGUgY3B1IHRvIHg4Ni4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBBZGQgR1NUX0RBVEFESVIsIGhhcmQtY29kZSBjcHUgdG8geDg2LgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIFNwYWNlcyB0byB0YWJzLgotCi0yMDA4LTA5LTAzIDA1OjUyOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dGFnbGlzdC5oOiBGaXggU2luY2U6IG1hcmtlcnMgZm9yIG5ldyBnZW8gdGFncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgRml4IFNpbmNlOiBtYXJrZXJzIGZvciBuZXcgZ2VvIHRhZ3MuCi0KLTIwMDgtMDktMDIgMjA6MDA6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHRhZ2xpc3QuaDogRml4IGFjdHVhbCB0YWcgbmFtZSBkZWZpbmUgYWZ0ZXIgcmVuYW1pbmcgZnJvbSBhbHRpdHVkZSB0byBlbGV2YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIEZpeCBhY3R1YWwgdGFnIG5hbWUgZGVmaW5lIGFmdGVyIHJlbmFtaW5nIGZyb20gYWx0aXR1ZGUgdG8gZWxldmF0aW9uLgotCi0yMDA4LTA5LTAxIDE0OjA1OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IEFkZCBmYWxsYmFjayB3aGVuIGNhbGxpbmcgdGhlIGRlcHJlY2F0ZWQgZnVuY3Rpb24gb24gYW4gZWxlbWVudCB0aGF0IGltcGxlbWVudHMgdGhlIG5ldyBpbnRlcm5hbF9saW5rIGguLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChhZGRfdW5yZWZfcGFkX3RvX2xpc3QpLAotCSAgKGdzdF9wYWRfZ2V0X2ludGVybmFsX2xpbmtzX2RlZmF1bHQpOgotCSAgQWRkIGZhbGxiYWNrIHdoZW4gY2FsbGluZyB0aGUgZGVwcmVjYXRlZCBmdW5jdGlvbiBvbiBhbiBlbGVtZW50IHRoYXQKLQkgIGltcGxlbWVudHMgdGhlIG5ldyBpbnRlcm5hbF9saW5rIGhhbmRsZXIuCi0KLTIwMDgtMDktMDEgMTM6MzU6MzIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQWRkIG5ldyB0YWdzIGZvciBnZW8gbG9jYXRpb24gYW5kIGNsYXJpZnkgcHVycG9zZSBvZiBleGlzdGluZyBsb2NhdGlvbiB0YWcuIEZpeGVzICM0ODExNjkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgQWRkIG5ldyB0YWdzIGZvciBnZW8gbG9jYXRpb24gYW5kIGNsYXJpZnkgcHVycG9zZSBvZiBleGlzdGluZyBsb2NhdGlvbgotCSAgdGFnLiBGaXhlcyAjNDgxMTY5Ci0KLTIwMDgtMDktMDEgMTE6Mjc6NDUgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIGdzdC9nc3RwYWQuYzogVXNlIHRocmVhZC1zYWZlIGludGVybmFsIGxpbmtzIGl0ZXJhdG9yLiBGaXhlcyAjNTQ5NTA0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0KSwKLQkgIChnc3RfcGFkX2V2ZW50X2RlZmF1bHRfZGlzcGF0Y2gpLCAoZ3N0X3BhZF9kaXNwYXRjaGVyKToKLQkgIFVzZSB0aHJlYWQtc2FmZSBpbnRlcm5hbCBsaW5rcyBpdGVyYXRvci4gRml4ZXMgIzU0OTUwNC4KLQotMjAwOC0wOS0wMSAxMDo0MjowNCArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgQWRkIHRocmVhZHNhZmUgcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGZvciBnZXR0aW5nIGludGVybmFsIGxpbmtzIG9mIGFuIGVsZW1lbnQuIERlcHJlY2F0ZSB0aGUgb2xkIGludGVybmFsIGxpbmtzIGZ1bmN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfaW5pdCksCi0JICAoZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiksCi0JICAoaW50X2xpbmtfaXRlcl9kYXRhX2ZyZWUpLCAoaXRlcmF0ZV9wYWQpLAotCSAgKGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0KSwKLQkgIChnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MpLCAoZ3N0X3BhZF9nZXRfaW50ZXJuYWxfbGlua3MpOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBBZGQgdGhyZWFkc2FmZSByZXBsYWNlbWVudCBmdW5jdGlvbnMgZm9yIGdldHRpbmcgaW50ZXJuYWwgbGlua3Mgb2YgYW4KLQkgIGVsZW1lbnQuIERlcHJlY2F0ZSB0aGUgb2xkIGludGVybmFsIGxpbmtzIGZ1bmN0aW9ucy4KLQkgIEFQSTpHc3RQYWQ6OmdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24oKQotCSAgQVBJOkdzdFBhZDo6R3N0UGFkSXRlckludExpbmtGdW5jdGlvbgotCSAgQVBJOkdzdFBhZDo6Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzKCkKLQkgIEFQSTpHc3RQYWQ6OmdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0KCkKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2RvX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MpLAotCSAgKGdzdF9wcm94eV9wYWRfaW5pdCk6Ci0JICBJbXBsZW1lbnQgdGhyZWFkc2FmZSBpbnRlcm5hbCBsaW5rcy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6IChHU1RfU1RBUlRfVEVTVCksICh0ZWVfc3VpdGUpOgotCSAgVW5pdCB0ZXN0IGZvciBpbnRlcm5hbCBsaW5rcyBvbiB0ZWUuIFNlZSAjNTQ5NTA0LgotCi0yMDA4LTA4LTMwIDEyOjU3OjQ3ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbTogbGlicy90cmFuc2Zvcm0xIHRlc3QgcmVxdWlyZXMgbGlicy90ZXN0X3RyYW5zZm9ybS5jCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBsaWJzL3RyYW5zZm9ybTEgdGVzdCByZXF1aXJlcyBsaWJzL3Rlc3RfdHJhbnNmb3JtLmMKLQotMjAwOC0wOC0zMCAxMjowNzo0MSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBEaWUgZXZpbCBkZWFkbG9jaywgZGllICEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF9pbnRlcm5hbF9saW5rc19kZWZhdWx0KToKLQkgIERpZSBldmlsIGRlYWRsb2NrLCBkaWUgIQotCi0yMDA4LTA4LTMwIDExOjU1OjU5ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBGaXggYWxsIGxlYWtzIGR1ZSB0byB0aGUgYnVnIGluIGdzdF9wYWRfdGVtcGxhdGVfbmV3KCkgYnkgd2hpY2ggaXQgZG9lcyBub3Qgc3RlYWwgdGhlIHJlZmNvdW50IG9mIHRoZSBnaXZlbiBjYXBzIGFzIHMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCk6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6IChuYW1lX2lzX3ZhbGlkKSwgKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCBhbGwgbGVha3MgZHVlIHRvIHRoZSBidWcgaW4gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSBieSB3aGljaCBpdCBkb2VzCi0JICBub3Qgc3RlYWwgdGhlIHJlZmNvdW50IG9mIHRoZSBnaXZlbiBjYXBzIGFzIHN0YXRlZC4KLQkgIFJFVkVSVCBUSElTIENPTU1JVCBPTkNFIEZJWEVEICEKLQkgIFJFVkVSVCBUSElTIENPTU1JVCBPTkNFIEZJWEVEICEKLQkgIFJFVkVSVCBUSElTIENPTU1JVCBPTkNFIEZJWEVEICEKLQkgIFJFVkVSVCBUSElTIENPTU1JVCBPTkNFIEZJWEVEICEKLQkgIFJFVkVSVCBUSElTIENPTU1JVCBPTkNFIEZJWEVEICEKLQkgIFJFVkVSVCBUSElTIENPTU1JVCBPTkNFIEZJWEVEICEKLQotMjAwOC0wOC0yOSAxNzo1ODoyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGl0ZXJhdG9yLio6IEFmdGVyIDMgeWVhcnMgaXQncyBhYm91dCB0aW1lIHRvIHJldmlzZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgaXRlcmF0b3Igb2JqZWN0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmg6Ci0JICBBZnRlciAzIHllYXJzIGl0J3MgYWJvdXQgdGltZSB0byByZXZpc2UgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlCi0JICBpdGVyYXRvciBvYmplY3RzLgotCi0yMDA4LTA4LTI5IDE2OjEwOjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IE1ha2UgdGhlIGludGVybmFsIGxpbmtzIGZ1bmN0aW9uIGxlc3MgdGhyZWFkLXVuc2FmZSBhbmQgYWRkIHNvbWUgY29tbWVudHMsIGR1bm5vIHdoeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF9pbnRlcm5hbF9saW5rc19kZWZhdWx0KToKLQkgIE1ha2UgdGhlIGludGVybmFsIGxpbmtzIGZ1bmN0aW9uIGxlc3MgdGhyZWFkLXVuc2FmZSBhbmQgYWRkIHNvbWUKLQkgIGNvbW1lbnRzLCBkdW5ubyB3aHkuCi0KLTIwMDgtMDgtMjkgMTQ6MTI6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RfcHJpdmF0ZS5oOiBJbmNsdWRlIGdzdGluZm8uaCBldmVuIGlmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyBpcyBkZWZpbmVkLiBGaXhlcyBidWlsZCB3aXRoIC0tZGlzYWJsZS1nc3QtZGVidWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICBJbmNsdWRlIGdzdGluZm8uaCBldmVuIGlmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyBpcyBkZWZpbmVkLiBGaXhlcwotCSAgYnVpbGQgd2l0aCAtLWRpc2FibGUtZ3N0LWRlYnVnLgotCi0yMDA4LTA4LTI5IDAwOjM0OjU4ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdHBhZHRlbXBsYXRlLmM6IFJldmVydCBsYXN0IGNoYW5nZSwgc2luY2UgaXQgYnJlYWtzIGEgZmV3IHBsdWdpbnMsIGZmbXBlZywgYWxhdywgYW5kIG11bGF3LiAgQ29kZSBpcyBjb3JyZWN0LCBiLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6IFJldmVydCBsYXN0IGNoYW5nZSwgc2luY2UgaXQgYnJlYWtzCi0JICBhIGZldyBwbHVnaW5zLCBmZm1wZWcsIGFsYXcsIGFuZCBtdWxhdy4gIENvZGUgaXMgY29ycmVjdCwKLQkgIGJ1dCBzaG91bGRuJ3QgYmUgZW5hYmxlZCB1bnRpbCB3ZSd2ZSByZWxlYXNlZCBmaXhlZCB2ZXJzaW9ucwotCSAgb2YgLWdvb2QgYW5kIC1mZm1wZWcuCi0KLTIwMDgtMDgtMjggMjA6MTI6NTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdG9iamVjdC5jOiBQdXQgdGhlIGdzdF9vYmplY3RfZ2V0X25hbWUoKSBiYWNrIGluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RvYmplY3QuYzoKLQkgIFB1dCB0aGUgZ3N0X29iamVjdF9nZXRfbmFtZSgpIGJhY2sgaW4uCi0KLTIwMDgtMDgtMjggMTI6MzI6MTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHBhZHRlbXBsYXRlLmM6IFRoZSBvbGQgYmVoYXZpb3VyIHdhcyB0aGF0IGdzdF9wYWRfdGVtcGxhdGVfbmV3KCkgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBjYXBzLiBBcyB3ZSBub3cgY2FsbCBnLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JICBUaGUgb2xkIGJlaGF2aW91ciB3YXMgdGhhdCBnc3RfcGFkX3RlbXBsYXRlX25ldygpIHRha2VzIG93bmVyc2hpcCBvZgotCSAgdGhlIGNhcHMuIEFzIHdlIG5vdyBjYWxsIGdfb2JqZWN0X25ldygpIHdoaWNoIGNhbGxzIGdfb2JqZWN0X3NldCgpIGFuZAotCSAgd2hpY2ggY29waWVzIHRoZSBjYXBzLCB3ZSBoYXZlIHRvIHVucmVmIHRoZW0gdG8gbm90IGxlYWsgdGhlbS4gRml4ZXMKLQkgIG1ha2UgdmFsZ3JpZCBmb3IgbWUuCi0KLTIwMDgtMDgtMjggMTA6NDU6MDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHVyaS5jOiBEb24ndCBzZWdmYXVsdCBvbiBpbnB1dCBsaWtlICJ0ZWw6KzEtMTIzLTU1NS0xMjM0Ii4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXJpLmM6Ci0JICBEb24ndCBzZWdmYXVsdCBvbiBpbnB1dCBsaWtlICJ0ZWw6KzEtMTIzLTU1NS0xMjM0Ii4KLQotMjAwOC0wOC0yNyAwNzoxODozNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0b2JqZWN0LmM6IER1ZSB0byBwb3B1bGFyIHJlcXVlc3QgYWxzbyBpbmNsdWRlIE9iamVjdFR5cGUgaW4gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcoKS4gTWFrZXMgZ3N0LWxhdW5jaCAtdiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBEdWUgdG8gcG9wdWxhciByZXF1ZXN0IGFsc28gaW5jbHVkZSBPYmplY3RUeXBlIGluCi0JICBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZygpLiBNYWtlcyBnc3QtbGF1bmNoIC12IGJpdCBtb3JlIHVzZWZ1bC4KLQotMjAwOC0wOC0yNyAwMzowNDoyMyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBSZW1vdmUgY2hlY2sgaW4gZ3N0X3BhZF9xdWVyeV9jb252ZXJ0KCkgdGhhdCBzcmNfdmFsIG11c3QgYmUgcG9zaXRpdmUsIGJlY2F1c2UgdGhhdCdzIG5vdCBhIHJlcXVpcmVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiBSZW1vdmUgY2hlY2sgaW4gZ3N0X3BhZF9xdWVyeV9jb252ZXJ0KCkgdGhhdAotCSAgc3JjX3ZhbCBtdXN0IGJlIHBvc2l0aXZlLCBiZWNhdXNlIHRoYXQncyBub3QgYSByZXF1aXJlbWVudC4KLQkgIFRoaXMgY2F1c2VzIHByb2JsZW1zIHdpdGggY29udmVydGluZyBuZWdhdGl2ZSBncmFudWxlcG9zCi0JICB2YWx1ZXMgZm9yIERpcmFjLgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogU2FtZSwgZ3N0X3F1ZXJ5X25ld19jb252ZXJ0KCkuCi0KLTIwMDgtMDgtMjcgMDI6NTk6NTkgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogUmVtb3ZlIGNoZWNrIGluIGdzdF9wYWRfcXVlcnlfY29udmVydCgpIHRoYXQgc3JjX3ZhbCBtdXN0IGJlIHBvc2l0aXZlLCBiZWNhdXNlIHRoYXQncyBub3QgYSByZXF1aXJlbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogUmVtb3ZlIGNoZWNrIGluIGdzdF9wYWRfcXVlcnlfY29udmVydCgpIHRoYXQKLQkgIHNyY192YWwgbXVzdCBiZSBwb3NpdGl2ZSwgYmVjYXVzZSB0aGF0J3Mgbm90IGEgcmVxdWlyZW1lbnQuCi0JICBUaGlzIGNhdXNlcyBwcm9ibGVtcyB3aXRoIGNvbnZlcnRpbmcgbmVnYXRpdmUgZ3JhbnVsZXBvcwotCSAgdmFsdWVzIGZvciBEaXJhYy4KLQotMjAwOC0wOC0yNSAxMTowNjozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGNsb2NrLmM6IEFkZCBzb21lIG1vcmUgZGVidWdnaW5nIHRvIHRoZSBjbG9jayBzbGF2aW5nIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uKToKLQkgIEFkZCBzb21lIG1vcmUgZGVidWdnaW5nIHRvIHRoZSBjbG9jayBzbGF2aW5nIGNvZGUuCi0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIEFkZCBuZXcgYmFzZXRyYW5zZm9ybSBtZXRob2QuCi0KLTIwMDgtMDgtMjUgMTE6MDA6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogVGFrZSB0aGUgKHJlY3Vyc2l2ZSkgc3RhdGUgbG9jayBiZXR3ZWVuIGdldHRpbmcgdGhlIGxvY2tlZCBzdGF0ZSBvZiBhbiBlbGVtZW50IGFuZCBjaGFuZ2luZyB0aGUgZWxlbWVudC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpOgotCSAgVGFrZSB0aGUgKHJlY3Vyc2l2ZSkgc3RhdGUgbG9jayBiZXR3ZWVuIGdldHRpbmcgdGhlIGxvY2tlZCBzdGF0ZSBvZiBhbgotCSAgZWxlbWVudCBhbmQgY2hhbmdpbmcgdGhlIGVsZW1lbnQgc3RhdGUuIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0bwotCSAgbG9jayBhbiBlbGVtZW50J3Mgc3RhdGUgYW5kIHRoZW4gY2hhbmdlIGl0cyBzdGF0ZSB3aXRob3V0IHJhY2VzLgotCi0yMDA4LTA4LTI1IDEwOjUyOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IFdoZW4gYW4gZWxlbWVudCBpcyBpbiB0aGUgbG9ja2VkIHN0YXRlIHdlIHN0aWxsIHdhbnQgdG8gdXBkYXRlIHRoZSBiYXNlX3RpbWUgb2YgdGhlIGVsZW1lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSk6Ci0JICBXaGVuIGFuIGVsZW1lbnQgaXMgaW4gdGhlIGxvY2tlZCBzdGF0ZSB3ZSBzdGlsbCB3YW50IHRvIHVwZGF0ZSB0aGUKLQkgIGJhc2VfdGltZSBvZiB0aGUgZWxlbWVudC4KLQotMjAwOC0wOC0yMSAxMToxNzowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFVzZSB0aGUgcmVzdWx0IGZyb20gZ3N0X3BhZF9zZXRfY2FwcygpIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhlIGVsZW1lbnQgYWx3YXlzIGFjY2VwdGVkIHRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZWdvdGlhdGUpOgotCSAgVXNlIHRoZSByZXN1bHQgZnJvbSBnc3RfcGFkX3NldF9jYXBzKCkgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgZWxlbWVudAotCSAgYWx3YXlzIGFjY2VwdGVkIHRoZSBjYXBzIGNvbXB1dGVkIGJ5IHRoZSBkZWZhdWx0IG5lZ290aWF0ZSBmdW5jdGlvbi4KLQotMjAwOC0wOC0yMCAxMDo1MjowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgSW1wbGVtZW50IG1ldGhvZCBmb3IgcmVjb25maWd1cmluZyBiYXNldHJhbnNmb3JtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRyYW5nZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zdWdnZXN0KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIEltcGxlbWVudCBtZXRob2QgZm9yIHJlY29uZmlndXJpbmcgYmFzZXRyYW5zZm9ybS4KLQkgIEFQSTogR3N0QmFzZVRyYW5zZm9ybTo6Z3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlKCkKLQotMjAwOC0wOC0yMCAwNzoyMjoxMSArMDAwMCAgTXVycmF5IEN1bW1pbmcgPG11cnJheWNAbXVycmF5Yy5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBNZW50aW9uIHRoYXQgdGhpcyBpcyBqdXN0IGxpa2UgZ3N0X2J1ZmZlcl9tZXJnZSgpIGJ1dCB3aXRoIGV4dHJhIHVucmVmZmluZyBmb3IgQyBjb2RlcnMuIEFkdmlzZSBsYW5ndS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogTXVycmF5IEN1bW1pbmcgPG11cnJheWNAbXVycmF5Yy5jb20+Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgTWVudGlvbiB0aGF0IHRoaXMgaXMganVzdCBsaWtlIGdzdF9idWZmZXJfbWVyZ2UoKSBidXQgd2l0aCBleHRyYQotCSAgdW5yZWZmaW5nIGZvciBDIGNvZGVycy4gQWR2aXNlIGxhbmd1YWdlIGJpbmRpbmdzIG5vdCB0byB3cmFwIGl0LgotCSAgRml4ZXMgQnVnICM1MzM4NTYuCi0JICBBbHNvIGZpeCBmaWxlIGNvbW1lbnQuCi0KLTIwMDgtMDgtMjAgMDc6MDM6NDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IENhbGwgc3VwZXI6OmV2ZW50KCkgd2hlbiBub3QgaGFuZGxpbmcgaXQuIEZpeGVzICM1NDQ4NTUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmlld2VkIGJ5OiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgQ2FsbCBzdXBlcjo6ZXZlbnQoKSB3aGVuIG5vdCBoYW5kbGluZyBpdC4gRml4ZXMgIzU0NDg1NS4KLQotMjAwOC0wOC0xOSAxNzoyMzoxOCArMDAwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm9Abm52YS5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBVc2UgNjQgYml0IHZhcmlhbnRzIG9mIHN0YXQgZnVuY3Rpb25zIG9uIHdpbjMyLCB0byBlbmFibGUgc3VwcG9ydCBvZiBsYXJnZSBmaWxlcyB0aGVyZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIFVzZSA2NCBiaXQgdmFyaWFudHMgb2Ygc3RhdCBmdW5jdGlvbnMgb24gd2luMzIsIHRvIGVuYWJsZSBzdXBwb3J0Ci0JICBvZiBsYXJnZSBmaWxlcyB0aGVyZS4KLQkgIEZpeGVzICM1NDcyNzcuCi0KLTIwMDgtMDgtMTkgMTY6NDc6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSW1wcm92ZSBwb3NpdGlvbiByZXBvcnRpbmcgaW4gdGhlIGZsdXNoaW5nIHN0YXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19ldmVudCksIChnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkKSwKLQkgIChnc3RfYmFzZV9zaW5rX25lZ290aWF0ZV9wdWxsKSwgKGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIEltcHJvdmUgcG9zaXRpb24gcmVwb3J0aW5nIGluIHRoZSBmbHVzaGluZyBzdGF0ZS4KLQkgIEFsc28gcmVwb3J0IHRoZSBwb3NpdGlvbiB3aGVuIHdlIGFyZSBub3QgeWV0IHByZXJvbGxlZCBidXQgd2UKLQkgIGhhdmUgYSBuZXdzZWdtZW50IGV2ZW50LiBGaXhlcyAjNTQzNDQ0LgotCSAgSW1wcm92ZSB0aGUgcHVsbC1iYXNlZCBuZWdvdGlhdGlvbiBjb2RlLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGZha2VzaW5rX3N1aXRlKToKLQkgIEFkZCB0ZXN0Y2FzZSBmb3IgcG9zaXRpb24gcmVwb3J0aW5nIHdoaWxlIGZsdXNoaW5nIGluIFBBVVNFRCBhbmQKLQkgIFBMQVlJTkcuCi0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIFVwZGF0ZSB1bml0LXRlc3QsIHdlIGNhbiBub3cgcXVlcnkgdGhlIHBvc2l0aW9uIGFzIHNvb24gYXMgd2UgcmVjZWl2ZSBhCi0JICBORVdTRUdNRU5UIGV2ZW50LgotCi0yMDA4LTA4LTE5IDA4OjUyOjA1ICswMDAwICBKYXNvbiBaaGFvIDxlMzQyM2NAbW90b3JvbGEuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFdoZW4gdGhlIHN1YmNsYXNzIGV2ZW50IGhhbmRsZXIgcmVsZWFzZXMgdGhlIFBSRVJPTExfTE9DSywgd2UgY291bGQgYmUgaW4gdGhlIGZsdXNoaW5nIHMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IEphc29uIFpoYW8gPGUzNDIzYyBhdCBtb3Rvcm9sYSBkb3QgY29tPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QpOgotCSAgV2hlbiB0aGUgc3ViY2xhc3MgZXZlbnQgaGFuZGxlciByZWxlYXNlcyB0aGUgUFJFUk9MTF9MT0NLLCB3ZSBjb3VsZCBiZQotCSAgaW4gdGhlIGZsdXNoaW5nIHN0YXRlIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSB0aGUgZXZlbnQuIEZpeGVzICM1NDgzOTQuCi0KLTIwMDgtMDgtMTggMTE6Mjg6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbjogRG9jdW1lbnQgR1NUX1JFR0lTVFJZX1VQREFURSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBEb2N1bWVudCBHU1RfUkVHSVNUUllfVVBEQVRFIGVudmlyb25tZW50IHZhcmlhYmxlLgotCi0yMDA4LTA4LTE4IDA5OjU5OjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogSWYgdGhlIGVsZW1lbnQgaXMgY29uZmlndXJlZCBpbiBwYXNzdGhyb3VnaCBtb2RlIGJ1dCB0aGUgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIGdhdmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKToKLQkgIElmIHRoZSBlbGVtZW50IGlzIGNvbmZpZ3VyZWQgaW4gcGFzc3Rocm91Z2ggbW9kZSBidXQgdGhlCi0JICBwcmVwYXJlX291dHB1dF9idWZmZXIgZ2F2ZSB1cyBhIG5ldyBvdXRwdXQgYnVmZmVyLCBkaXNjYXJkIHRoYXQgYnVmZmVyCi0JICBhbmQgcmV1c2UgdGhlIGlucHV0IGJ1ZmZlci4KLQotMjAwOC0wOC0xNSAxNzowMTowNyArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuKjogUHJvdGVjdCBwYWRfYWxsb2Mgd2l0aCBhIG5ldyBsb2NrIHNvIHRoYXQgd2UgY2FuIGJlIHN1cmUgdGhhdCBub3RoaW5nIGlzIHBlcmZvcm1pbmcgYSBwYWRfLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgIDxvbGUuYW5kcmUucmF2bmFzIGF0IHRhbmRiZXJnIGNvbT4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfZmluYWxpemUpLCAoZ3N0X3RlZV9pbml0KSwKLQkgIChnc3RfdGVlX3JlcXVlc3RfbmV3X3BhZCksIChnc3RfdGVlX3JlbGVhc2VfcGFkKSwKLQkgIChnc3RfdGVlX2ZpbmRfYnVmZmVyX2FsbG9jKSwgKGdzdF90ZWVfYnVmZmVyX2FsbG9jKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKLQkgIFByb3RlY3QgcGFkX2FsbG9jIHdpdGggYSBuZXcgbG9jayBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIHRoYXQgbm90aGluZyBpcwotCSAgcGVyZm9ybWluZyBhIHBhZF9hbGxvYyB3aGVuIHJlbW92aW5nIHRoZSBwYWQuIEZpeGVzICM1NDc4MzUuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOiAoYnVmZmVyX2FsbG9jX2hhcm5lc3Nfc2V0dXApLAotCSAgKGJ1ZmZlcl9hbGxvY19oYXJuZXNzX3RlYXJkb3duKSwgKGFwcF90aHJlYWRfZnVuYyksCi0JICAoZmluYWxfc2lua3BhZF9idWZmZXJhbGxvYyksIChHU1RfU1RBUlRfVEVTVCksICh0ZWVfc3VpdGUpOgotCSAgQWRkZWQgdGVzdGNhc2UgZm9yIHNodXRkb3duIHJhY2UuCi0KLTIwMDgtMDgtMTQgMjA6MDU6MzMgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuaDogQWRkIGRvYwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIEFkZCBkb2MKLQotMjAwOC0wOC0xNCAxNjozNzoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEdvIG92ZXIgdGhlIGJ1ZmZlcl9hbGxvYyBmdW5jdGlvbiBhZ2FpbiBhbmQgbWFrZSBzdXJlIHdlIGFsd2F5cyBlbmQgdXAgYWxsb2NhdGluZyBhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlciksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICBHbyBvdmVyIHRoZSBidWZmZXJfYWxsb2MgZnVuY3Rpb24gYWdhaW4gYW5kIG1ha2Ugc3VyZSB3ZSBhbHdheXMgZW5kIHVwCi0JICBhbGxvY2F0aW5nIGEgYnVmZmVyLgotCSAgQWRkIHNvbWUgbW9yZSBkb2NzLgotCSAgQXZvaWQgZG9pbmcgcGFkIGFsbG9jIHdoZW4gd2UgaGF2ZSBhIHBlbmRpbmcgc3VnZ2VzdGlvbiBiZWNhdXNlIHdlCi0JICBjYW5ub3QgeWV0IGRlYWwgd2l0aCBjaGFuZ2luZyBjYXBzIGluIHRoYXQgY2FzZS4gRml4ZXMgIzU0NzcyOAotCi0yMDA4LTA4LTE0IDE0OjI2OjIwICswMDAwICBMdWMgUGlvbmNob24gPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+Ci0KLQkgIGRvY3MvbWFudWFsLzogQWRkIG9uZSBtb3JlIGltYWdlIHNob3dpbmcgZGlmZmVyZW50IHRpbWVzIHRvZ2V0aGVyIHdpdGggYSBkZXNjcmliaW5nIHBhcmFncmFwaC4gRml4ZXMgIzU0NzcyOS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6IEx1YyBQaW9uY2hvbiA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbDoKLQkgICogZG9jcy9tYW51YWwvY2xvY2tzLnBuZzoKLQkgICogZG9jcy9tYW51YWwvZGlhZ3JhbXMtY2xvY2tzLnN2ZzoKLQkgIEFkZCBvbmUgbW9yZSBpbWFnZSBzaG93aW5nIGRpZmZlcmVudCB0aW1lcyB0b2dldGhlciB3aXRoIGEgZGVzY3JpYmluZwotCSAgcGFyYWdyYXBoLiBGaXhlcyAjNTQ3NzI5LgotCi0yMDA4LTA4LTE0IDE0OjA0OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6IEFkZCBuZXcgbWV0aG9kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIEFkZCBuZXcgbWV0aG9kLgotCi0yMDA4LTA4LTE0IDEzOjU3OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogRG9uJ3Qgb3ZlcndyaXRlIHRoZSBvdXRzaXplIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGV4cGVjdGVkIHNpemUgb2YgYSBuZXcgYnVmZmVyIGJlY2EuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3N1Z2dlc3QpOgotCSAgRG9uJ3Qgb3ZlcndyaXRlIHRoZSBvdXRzaXplIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGV4cGVjdGVkIHNpemUgb2YgYSBuZXcKLQkgIGJ1ZmZlciBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgaXQgaW4gY2FzZSB3ZSBjYW5ub3QgcHJvY2VzcyB0aGUgbmV3Ci0JICBidWZmZXIuCi0JICBXaGVuIGNvbnZlcnRpbmcgdGhlIHNpemUgb2YgdGhlIG5ldyBidWZmZXIgdG8gYW4gdXBzdHJlYW0gc2l6ZSwgYWN0dWFsbHkKLQkgIHVzZSB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgYnVmZmVyLCBub3Qgc29tZSBvdGhlciByYW5kb20gdmFsdWUuCi0JICBVc2UgYW4gYXRvbWljIGludCB0byBzaWduYWwgdGhhdCBhIG5ldyB1cHN0cmVhbSBjYXBzIHN1Z2dlc3Rpb24gaXMKLQkgIGF2YWlsYWJsZS4KLQkgIFdoZW4gd2UgY2FuIGNvbnZlcnQgdGhlIGN1cnJlbnQgYnVmZmVyIHRvIGEgbmV3IGZvcm1hdCwgY2hlY2sgaWYgdGhlCi0JICBidWZmZXIgc2l6ZSBpcyBvZiB0aGUgZXhwZWN0ZWQgc2l6ZSBhbmQgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIG9mIHRoZQotCSAgZXhwZWN0ZWQgc2l6ZSB3aGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlLgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIHJlbW92ZSBpZmRlZmZlZCBjb2RlIGZyb20gdGhlIHVuaXQgdGVzdC4KLQotMjAwOC0wOC0xMiAxODo0ODo0MiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBwa2djb25maWcvOiBSZW1vdmUgLWxnc3Rjb250cm9sLTAuMTAgd2hpY2ggbmV2ZXIgd29ya2VkIGFueXdheSBhcyB0aGUgbGliIGlzIGNhbGxlZCBnc3Rjb250cm9sbGVyLTAuMTAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbjoKLQkgICogcGtnY29uZmlnL2dzdHJlYW1lci5wYy5pbjoKLQkgIFJlbW92ZSAtbGdzdGNvbnRyb2wtMC4xMCB3aGljaCBuZXZlciB3b3JrZWQgYW55d2F5IGFzIHRoZSBsaWIgaXMKLQkgIGNhbGxlZCBnc3Rjb250cm9sbGVyLTAuMTAuCi0KLTIwMDgtMDgtMTIgMDY6Mjc6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogUmVtb3ZlIGRvdWJsZSBpbnRlcmZhY2UgZnJvbSBkb2Mtc3RyaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjaGlsZHByb3h5Lmg6Ci0JICAqIGdzdC9nc3RwcmVzZXQuaDoKLQkgIFJlbW92ZSBkb3VibGUgaW50ZXJmYWNlIGZyb20gZG9jLXN0cmluZy4KLQotMjAwOC0wOC0xMiAwNjoxNjowMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlLzogRml4IGhlYWRpbmdzIGluIGRvY3MgYW5kIGd0ay1kb2Mgd2FybmluZ3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgRml4IGhlYWRpbmdzIGluIGRvY3MgYW5kIGd0ay1kb2Mgd2FybmluZ3MuCi0KLTIwMDgtMDgtMTEgMTk6MDQ6MDQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IERvbid0IHVzZSBnX21rc3RtcCgpIG9uIHdpbjMyLCBpdCdzIHVuc2FmZSBpZiBnbGliIGlzIHVzaW5nIGEgZGlmZmVyZW50IGxpYmMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICBEb24ndCB1c2UgZ19ta3N0bXAoKSBvbiB3aW4zMiwgaXQncyB1bnNhZmUgaWYgZ2xpYiBpcyB1c2luZyBhIGRpZmZlcmVudAotCSAgbGliYy4KLQkgIEZpeGVzICM1NDQ3NzYuCi0KLTIwMDgtMDgtMTEgMTU6MTQ6MjggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBGaXggYSAibWF5IGJlIHVzZWQgdW5pdGlhbGl6ZWQiIHdhcm5pbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICBGaXggYSAibWF5IGJlIHVzZWQgdW5pdGlhbGl6ZWQiIHdhcm5pbmcuCi0KLTIwMDgtMDgtMTEgMDg6MDY6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRG9jdW1lbnQgcHJlc2V0LWlmYWNlIHZtZXRob2RzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RwcmVzZXQuaDoKLQkgIERvY3VtZW50IHByZXNldC1pZmFjZSB2bWV0aG9kcy4KLQotMjAwOC0wOC0xMSAwNzowNzo0NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL21hbnVhbC9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbDogVHVybiB0aG91Z2h0cyBhYm91dCBIQUwgaW50byBhIG5vdGUtdGFnLiBSZW1vdmUgbWVudGlvbmluZyB0aGF0IGlzIG9ubHkgdXNlZCB0byAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbDoKLQkgIFR1cm4gdGhvdWdodHMgYWJvdXQgSEFMIGludG8gYSBub3RlLXRhZy4gUmVtb3ZlIG1lbnRpb25pbmcgdGhhdCBpcwotCSAgb25seSB1c2VkIHRvIGRpc2NvdmVyIGRldmljZXMuCi0KLTIwMDgtMDgtMDcgMTU6NDk6MDAgKzAwMDAgIEZyZWRlcmljIENyb3phdCA8ZmNyb3phdEBtYW5kcml2YS5vcmc+Ci0KLQkgIGdzdC9nc3QuYzogTWFrZSBzdXJlIGdldHRleHQgcmV0dXJucyB0cmFuc2xhdGlvbnMgaW4gVVRGLTggZW5jb2RpbmcgcmF0aGVyIHRoYW4gaW4gdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nICgjNTQ2OC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogRnJlZGVyaWMgQ3JvemF0IDxmY3JvemF0QG1hbmRyaXZhLm9yZz4KLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wcmUpOgotCSAgTWFrZSBzdXJlIGdldHRleHQgcmV0dXJucyB0cmFuc2xhdGlvbnMgaW4gVVRGLTggZW5jb2RpbmcgcmF0aGVyCi0JICB0aGFuIGluIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZyAoIzU0NjgyMikuCi0KLTIwMDgtMDgtMDcgMTI6Mjg6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjYXBzLmM6IEZpeCBzdWJzZXQgdGVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfc3RydWN0dXJlX2lzX3N1YnNldF9maWVsZCk6Ci0JICBGaXggc3Vic2V0IHRlc3QuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBJbXByb3ZlIHVuaXQgdGVzdCBzdWJzZXQgdGVzdHMgYW5kIGFkZCBhIHRlc3RjYXNlIGZvciB0aGUgc3Vic2V0IGZhaWx1cmUKLQkgIGNhc2VzLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF92YWx1ZV9zdWl0ZSk6Ci0JICBJbXByb3ZlIHN1YnRyYWN0aW9uIHVuaXQgdGVzdC4KLQotMjAwOC0wOC0wNyAwNzowMToxNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiBVbmxvY2ssIGluc3RlYWQgb2YgbG9ja2luZyBhZ2Fpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgVW5sb2NrLCBpbnN0ZWFkIG9mIGxvY2tpbmcgYWdhaW4uCi0KLTIwMDgtMDgtMDUgMTY6NTA6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuaDogQ2xhcmlmeSB0aGUgZG9jcyBhIGJpdCBtb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIENsYXJpZnkgdGhlIGRvY3MgYSBiaXQgbW9yZS4KLQotMjAwOC0wOC0wNSAxNTo0MjowMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6IERvbid0IGxlYWsgb2xkIHRhZ2xpc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOgotCSAgRG9uJ3QgbGVhayBvbGQgdGFnbGlzdC4KLQotMjAwOC0wOC0wNSAxNTowMzoyNyArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBBdm9pZCBvdmVyZmxvd3MgaW4gZml4YXRpb24gY29kZSB3aGVuIGRlYWxpbmcgd2l0aCBNQVhJTlQgdmFsdWVzLCB3aGljaCB2NGwyc3JjIHNlZW1zIHRvIGRvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uKToKLQkgIEF2b2lkIG92ZXJmbG93cyBpbiBmaXhhdGlvbiBjb2RlIHdoZW4gZGVhbGluZyB3aXRoIE1BWElOVCB2YWx1ZXMsIHdoaWNoCi0JICB2NGwyc3JjIHNlZW1zIHRvIGRvLgotCSAgRml4ZXMgIzU0NjMyOC4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgTWFrZSBhIHVuaXQgdGVzdCB0byBjaGVjayB0aGUgZml4LgotCi0yMDA4LTA4LTA1IDExOjEyOjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogVXNlIG5ldyBjYXBzIHN1Z2dlc3Rpb24gZmVhdHVyZSBvZiBiYXNldHJhbnNmb3JtIHRvIHJlcXVlc3QgYSBjYXBzIG5lZ290aWF0aW9uIHVwc3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGNvcHlfZnVuYyksCi0JICAoZ3N0X2NhcHNmaWx0ZXJfc2V0X3Byb3BlcnR5KToKLQkgIFVzZSBuZXcgY2FwcyBzdWdnZXN0aW9uIGZlYXR1cmUgb2YgYmFzZXRyYW5zZm9ybSB0byByZXF1ZXN0IGEgY2FwcwotCSAgbmVnb3RpYXRpb24gdXBzdHJlYW0uCi0KLTIwMDgtMDgtMDUgMTE6MTE6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgZnVuY3Rpb246Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBuZXcgZnVuY3Rpb246Ci0JICBBUEk6IEdzdEJhc2VUcmFuc2Zvcm06OmdzdF9iYXNlX3RyYW5zZm9ybV9zdWdnZXN0KCkKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fZmluYWxpemUpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY29uZmlndXJlX2NhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jYW5fdHJhbnNmb3JtKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZmluZF90cmFuc2Zvcm0pLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRyYW5nZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9hY3RpdmF0ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faXNfaW5fcGxhY2UpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3MpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZCksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3N1Z2dlc3QpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgUmV3cml0ZSBvZiBiYXNldHJhbnNmb3JtIHRvIHBlcmZvcm0gbmVnb3RpYXRpb24gb3V0c2lkZSBvZiB0aGUKLQkgIGJ1ZmZlcl9hbGxvYyBmdW5jdGlvbnMuICBGaXhlcyAjNTQ1ODUzLgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChidWZmZXJfYWxsb2NfY3QyKToKLQkgIFVwZGF0ZSB1bml0IHRlc3QuCi0KLTIwMDgtMDgtMDUgMDU6NDQ6MDIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jOiBPbmx5IHJ1biBwcmVzZXQgdGVzdHMgd2hlbiAkSE9NRSBpcyB3cml0YWJsZS4gUHJlbGltaW5hcnkgZml4IGZvciAjNTQ1NDMzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwcmVzZXQuYzoKLQkgIE9ubHkgcnVuIHByZXNldCB0ZXN0cyB3aGVuICRIT01FIGlzIHdyaXRhYmxlLiBQcmVsaW1pbmFyeSBmaXggZm9yCi0JICAjNTQ1NDMzLgotCi0yMDA4LTA4LTA0IDE1OjQ5OjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IEZpeCByYWNlIGZvciBiaW5zIHRoYXQgc2ltdWxhdGUgQVNZTkMgc3RhdGUgY2hhbmdlcyBieSBpbnNlcnRpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpLCAoYmluX2hhbmRsZV9hc3luY19kb25lKSwKLQkgIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgRml4IHJhY2UgZm9yIGJpbnMgdGhhdCBzaW11bGF0ZSBBU1lOQyBzdGF0ZSBjaGFuZ2VzIGJ5IGluc2VydGluZwotCSAgQVNZTkNfU1RBUlQgYW5kIEFTWU5DX0RPTkUgbWVzc2FnZXMgaW4gdGhlaXIgYnVzLiBXZSBuZWVkIHRvIGNoZWNrIGZvcgotCSAgcGVuZGluZyBBU1lOQyBtZXNzYWdlcyBldmVuIHdoZW4gdGhlIGJpbiBkb2VzIG5vdCBoYXZlIEFTWU5DIGNoaWxkcmVuLgotCSAgV2Ugbm90ZSBkZXRlY3QgdGhpcyBiZWhhdmlvdXIgYmVjYXVzZSB3ZSB3aWxsIHJlY2VpdmUgYW4gQVNZTkMgbWVzc2FnZQotCSAgdGhhdCBpcyBvcmlnaW5hdGluZyBmcm9tIHRoZSBiaW4gaXRzZWxmLgotCSAgRml4ZXMgcmFjZXMgd2l0aCBkZWNvZGViaW4yIHN0YXRlIGNoYW5nZXMuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFkZCBzb21lIG1vcmUgZGVidWcuCi0KLTIwMDgtMDgtMDQgMTM6MDE6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R0YWdsaXN0LmM6IEZpeCB0eXBvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0YWdsaXN0LmM6IChfZ3N0X3RhZ19pbml0aWFsaXplKToKLQkgIEZpeCB0eXBvLgotCi0yMDA4LTA4LTA0IDEyOjQ2OjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3R0YWdsaXN0LmM6IEFyZ2guIGFjdHVhbGx5IHNhdmUgdGhlIHRleHQgYmVmb3JlIGNvbW1pdHRpbmcuIE5vdyBhZGRzIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKCkgdG8gZ3N0Xy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICBBcmdoLiBhY3R1YWxseSBzYXZlIHRoZSB0ZXh0IGJlZm9yZSBjb21taXR0aW5nLiBOb3cgYWRkcwotCSAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEoKSB0byBnc3RfdGFnX3JlZ2lzdGVyKCkuCi0KLTIwMDgtMDgtMDQgMTI6MzA6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHRhZ2xpc3QuKjogRG8gYXMgdGltIHBvaW50ZWQgb3V0IGFuZCBhY3R1YWxseSByZWdpc3RlciB0aGUgbmV3IHRhZy4gQWxzbyBpbXByb3ZlIHRlIGRvY3MgYW5kIHVzZSBnc3RfdGFnX21lcmdlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIERvIGFzIHRpbSBwb2ludGVkIG91dCBhbmQgYWN0dWFsbHkgcmVnaXN0ZXIgdGhlIG5ldyB0YWcuIEFsc28gaW1wcm92ZQotCSAgdGUgZG9jcyBhbmQgdXNlIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKCkgbWV0aG9kIHRvIGFsbG93Ci0JICByZXRyaXZpbmcgYWxsIGtleXdvcmRzIG1lcmdlZCBpbiBvbmUgbGlzdC4KLQotMjAwOC0wOC0wMSAxMTo1Nzo0MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBSZXZlcnQgJ2FjY2lkZW50aWFsJyBjaGFuZ2Ugb2YgdGhlIGNvbmZpZ3VyZSBvcHRpb24gcmVtb3ZhbC4gV2Ugc3RpbGwgbmVlZCB0byBnZW5lcmF0ZSB0aGUgdHlwZXMgZmlsZSBpbiBjb25maWd1cmUgLS0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkgIFJldmVydCAnYWNjaWRlbnRpYWwnIGNoYW5nZSBvZiB0aGUgY29uZmlndXJlIG9wdGlvbiByZW1vdmFsLiBXZSBzdGlsbAotCSAgbmVlZCB0byBnZW5lcmF0ZSB0aGUgdHlwZXMgZmlsZSBpbiBjb25maWd1cmUgLS1kaXNhYmxlLWxvYWQtc2F2ZS4KLQotMjAwOC0wOC0wMSAxMTozNDowNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBBZGQgbmV3IHRhZ2xpc3QgaXRlbSBHU1RfVEFHX0tFWVdPUkRTLCBuZWVkZWQgZm9yICM1MjA2OTQgLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICBBZGQgbmV3IHRhZ2xpc3QgaXRlbSBHU1RfVEFHX0tFWVdPUkRTLCBuZWVkZWQgZm9yICM1MjA2OTQgLgotCi0yMDA4LTA4LTAxIDEwOjAyOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogQWRkICJuYW1lLXRlbXBsYXRlIiwgImRpcmVjdGlvbiIsICJwcmVzZW5jZSIgYW5kICJjYXBzIiBwcm9wZXJ0aWVzLCBzbyB0aGF0IGdzdF9wYWRfdGVtcGxhdGVfbmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIChnc3RfcGFkX3RlbXBsYXRlX2NsYXNzX2luaXQpLCAoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KSwKLQkgIChnc3RfcGFkX3RlbXBsYXRlX25ldyksIChnc3RfcGFkX3RlbXBsYXRlX3BhZF9jcmVhdGVkKSwKLQkgIChnc3RfcGFkX3RlbXBsYXRlX3NldF9wcm9wZXJ0eSksIChnc3RfcGFkX3RlbXBsYXRlX2dldF9wcm9wZXJ0eSk6Ci0JICBBZGQgIm5hbWUtdGVtcGxhdGUiLCAiZGlyZWN0aW9uIiwgInByZXNlbmNlIiBhbmQgImNhcHMiIHByb3BlcnRpZXMsCi0JICBzbyB0aGF0IGdzdF9wYWRfdGVtcGxhdGVfbmV3KCkgaXMganVzdCBhIHRoaW4gd3JhcHBlciBhcm91bmQKLQkgIGdfb2JqZWN0X25ldygpLCB3aGljaCBpcyBiZXR0ZXIgZm9yIGJpbmRpbmdzLiAoRml4ZXM6ICM1Mzk3NzIpCi0KLTIwMDgtMDctMzEgMTc6MTY6NTAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2dzdHVyaS5jOiBCZSBtb3JlIGxpYmVyYWwgaW4gd2hhdCBVUklzIHdlIGFjY2VwdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXJpLmM6Ci0JICBCZSBtb3JlIGxpYmVyYWwgaW4gd2hhdCBVUklzIHdlIGFjY2VwdC4KLQkgIERvIG5vdCB1bmVzY2FwZSBiaXRzIG9mIHRoZSBVUkkgZm9yIG5vIGFwcGFyZW50IHJlYXNvbiBiZWZvcmUgcGFzc2luZyB0bwotCSAgdGhlIGVsZW1lbnQuIEZpeGVzICM1NDUzNTIuCi0KLTIwMDgtMDctMzEgMTU6MjQ6MjEgKzAwMDAgIFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KLQotCSAgZ3N0L2dzdC5jOiBJbmNsdWRlIGdzdGNvbmZpZy5oIGFzIG1hY3JvcyBmcm9tIGl0IGFyZSB1c2VkLiBGaXhlcyBidWcgIzU0NTYwNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KLQkgICogZ3N0L2dzdC5jOgotCSAgSW5jbHVkZSBnc3Rjb25maWcuaCBhcyBtYWNyb3MgZnJvbSBpdCBhcmUgdXNlZC4gRml4ZXMgYnVnICM1NDU2MDcuCi0KLTIwMDgtMDctMzEgMTU6MjA6MzIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgUmVtb3ZlIEdTVF9ESVNBQkxFXyhFTlVNVFlQRVN8SU5ERVh8VVJJKSBldmVyeXdoZXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdC5jOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2Jpbl9zZXRfaW5kZXhfZnVuYyk6Ci0JICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9pbmRleCk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9mZWF0dXJlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGxvYWRfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X3htbF9yZWFkX2NhY2hlKSwgKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9mZWF0dXJlKToKLQkgICogcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogdG9vbHMvZ3N0LWluZGVudDoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2luZGV4X2luZm8pLCAocHJpbnRfZWxlbWVudF9saXN0KSwKLQkgIChwcmludF9wbHVnaW5fZmVhdHVyZXMpLCAocHJpbnRfZWxlbWVudF9mZWF0dXJlcyk6Ci0JICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6IChwcmludF9ldmVudF9tYXNrcyksCi0JICAocHJpbnRfZWxlbWVudF9pbmZvKToKLQkgICogd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOgotCSAgUmVtb3ZlIEdTVF9ESVNBQkxFXyhFTlVNVFlQRVN8SU5ERVh8VVJJKSBldmVyeXdoZXJlLgotCSAgRGlzYWJsaW5nIHRoZSBpbmRleGVycyBhbmQgVVJJIGhhbmRsZXIgY29kZSB3aWxsIG9ubHkgcmVkdWNlIHRoZQotCSAgcmVxdWlyZWQgYW1vdW50IG9mIG1lbW9yeSBieSBhIHZlcnkgc21hbGwgYW1vdW50IGJ1dCBvbiB0aGUgb3RoZXIgaGFuZAotCSAgcmVxdWlyZXMgbXVjaCBtb3JlIG1haW50YWluY2Ugd29yay4gQXBhcnQgZnJvbSB0aGF0IG1hbnkgcGxhY2VzIG9mCi0JICBjb2RlIGFyZSBicm9rZW4gd2hlbiBkaXNhYmxpbmcgdGhlbS4KLQkgIERpc2FibGluZyB0aGUgZW51bSB0eXBlcyBkb2Vzbid0IHJlZHVjZSB0aGUgcmVxdWlyZWQgYW1vdW50IG9mIG1lbW9yeQotCSAgYnkgbW9yZSB0aGFuIGEgZmV3IGJ5dGVzIGFuZCBtYWtlcyBpdCBoYXJkIHRvIGZpeCBidWdzIGxpa2UgIzUzOTc3MiwKLQkgIGkuZS4gdXNlIHRoZSBlbnVtcyBhcyBHT2JqZWN0IHByb3BlcnRpZXMuCi0KLTIwMDgtMDctMzEgMTM6MDY6NTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IEFkZCBzb21lIHRob3VnaHRzIGFuZCBwcm9ibGVtcyB3aXRoIHVwc3RyZWFtIHJlbmVnb3RpYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgIEFkZCBzb21lIHRob3VnaHRzIGFuZCBwcm9ibGVtcyB3aXRoIHVwc3RyZWFtIHJlbmVnb3RpYXRpb24uCi0KLTIwMDgtMDctMzEgMTI6NTA6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogUmVtb3ZlIHNpbGx5IHJlZHVuZGFudCBkZWJ1Zy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdCksCi0JICAoZ3N0X3BhZF9jb25maWd1cmVfc3JjKSwgKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpOgotCSAgUmVtb3ZlIHNpbGx5IHJlZHVuZGFudCBkZWJ1Zy4KLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4KLQkgIENsYXJpZnkgdGhlIGRvY3MgcmVnYXJkaW5nIG5ldyBjYXBzIHJlY2VpdmVkIGZyb20gcGFkX2FsbG9jLgotCi0yMDA4LTA3LTMxIDA5OjU1OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogTWFrZSBzZXR0aW5nIHRoZSBjYXBzIG1vcmUgdGhyZWFkc2FmZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2NhcHNmaWx0ZXJfZ2V0X3Byb3BlcnR5KSwgKGdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9jYXBzKToKLQkgIE1ha2Ugc2V0dGluZyB0aGUgY2FwcyBtb3JlIHRocmVhZHNhZmUuCi0KLTIwMDgtMDctMzEgMDg6Mzk6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0OiBVcGRhdGUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dDoKLQkgIFVwZGF0ZSBkb2NzLgotCi0yMDA4LTA3LTMxIDA4OjM3OjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IEFkZCBhbmQgdXNlIGEgY3VzdG9tIGFjY2VwdGNhcHMgZnVuY3Rpb24gaW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gdGhlIHBvdGVudGlhbGx5IGxlc3MuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCksCi0JICAoZ3N0X3F1ZXVlX2FjY2VwdGNhcHMpOgotCSAgQWRkIGFuZCB1c2UgYSBjdXN0b20gYWNjZXB0Y2FwcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGZhbGxpbmcgYmFjayB0byB0aGUKLQkgIHBvdGVudGlhbGx5IGxlc3Mgb3B0aW1pemVkIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCi0KLTIwMDgtMDctMjkgMTU6MzI6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RwYWQuYzogT25seSBzYW5pdHktY2hlY2sgdGhlIGJ1ZmZlciBzaXplIGlmIHJlcXVlc3RlZF9jYXBzID09IGJ1ZmZlcl9jYXBzIChpZS4gZG9uJ3QgdGFrZSBwYWQgY2FwcyBpbnRvIGFjY291bi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpOgotCSAgT25seSBzYW5pdHktY2hlY2sgdGhlIGJ1ZmZlciBzaXplIGlmIHJlcXVlc3RlZF9jYXBzID09IGJ1ZmZlcl9jYXBzCi0JICAoaWUuIGRvbid0IHRha2UgcGFkIGNhcHMgaW50byBhY2NvdW50LCB0aGV5J3JlIG5vdCByZWxldmFudCBoZXJlKQotCi0yMDA4LTA3LTI5IDE0OjMyOjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLio6IFJldmVydGluZyBhcyBub3QgZXZlcnl0aGluZyBpcyBjbGVhciB5ZXQuIE5lZWRzIHNvbWUgZ2VuZXJhbCBkZXNpZ24gd29yay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgotCSAgUmV2ZXJ0aW5nIGFzIG5vdCBldmVyeXRoaW5nIGlzIGNsZWFyIHlldC4gTmVlZHMgc29tZSBnZW5lcmFsIGRlc2lnbgotCSAgd29yay4KLQotMjAwOC0wNy0yOSAxMzozNjozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBDaGFuZ2VMb2c6IENoYW5nZUxvZyBzdXJnZXJ5IGZvciB0ZWUgY29tbWl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIENoYW5nZUxvZzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5IGZvciB0ZWUgY29tbWl0LgotCi0yMDA4LTA3LTI5IDEzOjMwOjAyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IENsZWFudXAgc2VjdGlvbi1maWxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBDbGVhbnVwIHNlY3Rpb24tZmlsZS4KLQotMjAwOC0wNy0yOSAxMTo1NzoxMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS4qOiBSZWxheSB0YWcgZXZlbnRzIGluIHRlZS4gRml4ZXMgcGFydHMgb2YgIzQ3NDAxNi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgotCSAgUmVsYXkgdGFnIGV2ZW50cyBpbiB0ZWUuIEZpeGVzIHBhcnRzIG9mICM0NzQwMTYuCi0KLTIwMDgtMDctMjkgMDA6NDU6MjkgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgQnVpbGQgdGhlIG5ldCBsaWJyYXJ5IGlmIHdlIGhhdmUgd2luc29jazIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBsaWJzL2dzdC9NYWtlZmlsZS5hbToKLQkgIEJ1aWxkIHRoZSBuZXQgbGlicmFyeSBpZiB3ZSBoYXZlIHdpbnNvY2syLgotCi0yMDA4LTA3LTI2IDEyOjAwOjM2ICswMDAwICBMdWMgUGlvbmNob24gPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+Ci0KLQkgIGRvY3MvbWFudWFsLzogUmVwbGFjZSBvbmUgZGlhZ3JhbSB3aXRoIHR3byBzZXBhcmF0ZSBvbmVzIGFuZCB1cGRhdGVzIG90aGVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6IEx1YyBQaW9uY2hvbiA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtdGhyZWFkcy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2RpYWdyYW1zLXBpcGVsaW5lcy5zdmc6Ci0JICAqIGRvY3MvbWFudWFsL2hlbGxvLXdvcmxkLnBuZzoKLQkgICogZG9jcy9tYW51YWwvbGlua2VkLWVsZW1lbnRzLnBuZzoKLQkgICogZG9jcy9tYW51YWwvbWltZS13b3JsZC5wbmc6Ci0JICAqIGRvY3MvbWFudWFsL3F1ZXVlLnBuZzoKLQkgICogZG9jcy9tYW51YWwvdGhyZWFkLWJ1ZmZlcmluZy5wbmc6Ci0JICAqIGRvY3MvbWFudWFsL3RocmVhZC1zeW5jaHJvbml6aW5nLnBuZzoKLQkgIFJlcGxhY2Ugb25lIGRpYWdyYW0gd2l0aCB0d28gc2VwYXJhdGUgb25lcyBhbmQgdXBkYXRlcyBvdGhlcnMuCi0JICBGaXhlcyAjNTQyNDAxLgotCi0yMDA4LTA3LTI1IDEwOjI0OjQzICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5oOiBGaXggbGluayBpbiBkb2N1bWVudGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBGaXggbGluayBpbiBkb2N1bWVudGF0aW9uLgotCi0yMDA4LTA3LTI0IDE3OjM4OjQzICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0bWVzc2FnZS5jOiBGaXggY29uZnVzaW5nIGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIEZpeCBjb25mdXNpbmcgZG9jdW1lbnRhdGlvbi4KLQotMjAwOC0wNy0yNCAxNToxMzoyNCArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6IHJldmVydCB0aGUgY2hhbmdlcyB0byB0aGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBBQkkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICByZXZlcnQgdGhlIGNoYW5nZXMgdG8gdGhlIGhlYWRlciBmaWxlIGZvciB0aGUgQUJJLgotCi0yMDA4LTA3LTI0IDE0OjQ3OjU4ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuKjogRG9uJ3QgY2FjaGUgdGhlIHNlZWthYmxlIHN0YXR1cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBEb24ndCBjYWNoZSB0aGUgc2Vla2FibGUgc3RhdHVzLgotCSAgRml4ZXMgYnVnICM1NDQxNzQKLQotMjAwOC0wNy0yNCAxMjozNjoyMCArMDAwMCAgUmVuZSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JICBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOiBBZGQgZmFrZXNpbmsgdG8gZXhhbXBsZSBjb2RlIHRvIGNsb3NlIHRoZSBwaXBlbGluZSBncmFwaC4gIFRoaXMgcHJldmVudHMgdGhlIHAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOiBBZGQgZmFrZXNpbmsgdG8gZXhhbXBsZQotCSAgY29kZSB0byBjbG9zZSB0aGUgcGlwZWxpbmUgZ3JhcGguICBUaGlzIHByZXZlbnRzIHRoZSBwcm9ncmFtIGZyb20KLQkgIHByaW50aW5nIGludGVybmFsIGRhdGEgZmxvdyBlcnJvcnMuCi0KLTIwMDgtMDctMjMgMTU6NDQ6MDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6IENvcnJlY3QgdHlwby4gRml4ZXMgYnVnICM1NDQzMjAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6Ci0JICBDb3JyZWN0IHR5cG8uIEZpeGVzIGJ1ZyAjNTQ0MzIwLgotCi0yMDA4LTA3LTIyIDE4OjEyOjU0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIEFDX0lTQ19QT1NJWCBtYWNybzsgaXQncyBicm9rZW4gb24gc29tZSBwbGF0Zm9ybXMgYW5kIG5vdCBuZWVkZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgUmVtb3ZlIEFDX0lTQ19QT1NJWCBtYWNybzsgaXQncyBicm9rZW4gb24gc29tZSBwbGF0Zm9ybXMgYW5kIG5vdCBuZWVkZWQuCi0JICBBZGQgY2hlY2sgKHRha2VuIGZyb20gLWJhc2UpIGZvciB3aW5zb2NrLCBhZGRzIFdJTjMyX0xJQlMKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgQWRkIFdJTjMyX0xJQlMgdG8gTElCQUREIGZvciBsaWJnc3RyZWFtZXIuIE5lZWRlZCBub3cgdGhhdCBnc3Rwb2xsIHVzZXMKLQkgIHdpbnNvY2suCi0JICBEZWZpbmUgR1NUX0VYUE9SVFMgd2hlbiBidWlsZGluZyBsaWJnc3RyZWFtZXIgKG9ubHkgdXNlZCBvbiB3aW4zMikKLQkgICogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICAqIGdzdC9nc3RpbmZvLmg6Ci0JICBVc2UgR1NUX0VYUE9SVCBpbnN0ZWFkIG9mIGxvY2FsbHktZGVmaW5lZCAoYW5kIGluY29ycmVjdCBJTVBPUlRfU1lNQk9MKQotCSAgZm9yIHN5bWJvbHMgdGhhdCB3ZSBuZWVkIHRvIGV4cG9ydCBpbiBib3RoIHRoZXNlIGZpbGVzLgotCSAgKiBnc3QvZ3N0cG9sbC5jOgotCSAgSW5jbHVkZSBnc3RfcHJpdmF0ZS5oIGhpZ2hlciB1cCB0byBhdm9pZCBzb21lIGNvbXBpbGUgcHJvYmxlbXMgb24gd2luMzIuCi0KLTIwMDgtMDctMjIgMDk6MjQ6MzcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IEZpeCB0eXBvcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIEZpeCB0eXBvcy4KLQotMjAwOC0wNy0yMiAwMDoyOTo1NSArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGNhcHMuYzogUHJldmlvdXMgY29tbWl0IHdhcyB3cm9uZyBOVUxMIGNhcHMgZG9lcyBub3QgZXhpc3QgYW5kIGluZGljYXRlIGFuIGVycm9yLCBzbyBhbHNvIGFkZCBhIEZJWE1FIHRvIGdzdF9jLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNhcHMuYzoKLQkgIFByZXZpb3VzIGNvbW1pdCB3YXMgd3JvbmcgTlVMTCBjYXBzIGRvZXMgbm90IGV4aXN0Ci0JICBhbmQgaW5kaWNhdGUgYW4gZXJyb3IsIHNvIGFsc28gYWRkIGEgRklYTUUgdG8KLQkgIGdzdF9jYXBzX2lzX2VxdWFsIHdoZXJlIE5VTEwgY2FwcyBhcmUgYWNjZXB0ZWQuCi0KLTIwMDgtMDctMjEgMjM6MDI6NDAgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjYXBzLmM6IEFsbG93IHBhc3Npbmcgb2YgTlVMTCB0byBnc3RfY2Fwc191bmlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6Ci0JICBBbGxvdyBwYXNzaW5nIG9mIE5VTEwgdG8gZ3N0X2NhcHNfdW5pb24KLQotMjAwOC0wNy0yMSAyMTozMjowNiArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmM6IEFkZCBpbiBkb2MgdGhhdCBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgY2FuIGFjY2VwdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgQWRkIGluIGRvYyB0aGF0IGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCBjYW4gYWNjZXB0Ci0JICBOVUxMIHRvIGNsZWFyIHRhcmdldAotCi0yMDA4LTA3LTE1IDIyOjUzOjAwICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC86IEdzdFJlZ2lzdHJ5UG9vbCBkb2Vzbid0IGV4aXN0OyBkb24ndCByZWZlciB0byBpdCBpbiBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBHc3RSZWdpc3RyeVBvb2wgZG9lc24ndCBleGlzdDsgZG9uJ3QgcmVmZXIgdG8gaXQgaW4gZG9jcy4KLQkgIERvbid0IHJlZmVyIHRvIGZ1bmN0aW9ucyB0aGF0IGRvbid0IGV4aXN0IGluIGRvY3MsIGl0J3MKLQkgIHVuaGVscGZ1bC4KLQotMjAwOC0wNy0xMiAxNzo1MToxNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0LmM6IEZpeCBzY2FubmluZyBvZiBwYXRocyBnaXZlbiB2aWEgLS1nc3QtcGx1Z2luLXBhdGguIEZpeGVzIGJ1ZyAjNTQyMTc1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIEZpeCBzY2FubmluZyBvZiBwYXRocyBnaXZlbiB2aWEgLS1nc3QtcGx1Z2luLXBhdGguIEZpeGVzIGJ1ZyAjNTQyMTc1LgotCi0yMDA4LTA3LTEyIDE3OjQzOjE1ICswMDAwICB0bWF0dGggPGxlLmJ1c2luZXNzbWFuQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9wd2cvYnVpbGRpbmctdGVzdGFwcC54bWw6IERvbid0IHVzZSBhbiB1bmRlY2xhcmVkIHZhcmlhYmxlIGluIHRoZSBleGFtcGxlIHByb2dyYW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiB0bWF0dGggPGxlIGRvdCBidXNpbmVzc21hbiBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBkb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbDoKLQkgIERvbid0IHVzZSBhbiB1bmRlY2xhcmVkIHZhcmlhYmxlIGluIHRoZSBleGFtcGxlIHByb2dyYW0uCi0JICBGaXhlcyBidWcgIzU0MjU3My4KLQotMjAwOC0wNy0xMiAwOTo1OTozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0ZGVidWd1dGlscy5jOiBTcXVlZXplIGdob3N0LXBhZCBsaW5rcyBhbmQgcmVtb3ZlIDw+IGZyb20gY2xhc3NuYW1lIGxhYmVscyB0byBzYXZlIG1vcmUgaG9yaXpvbnRhbCBzcGFjZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgU3F1ZWV6ZSBnaG9zdC1wYWQgbGlua3MgYW5kIHJlbW92ZSA8PiBmcm9tIGNsYXNzbmFtZSBsYWJlbHMgdG8gc2F2ZQotCSAgbW9yZSBob3Jpem9udGFsIHNwYWNlLgotCi0yMDA4LTA3LTExIDE5OjMwOjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6IEdpdmUgcmVxdWVzdCBhbmQgc29tZXRpbWVzIHBhZHMgYSBkaWZmZXJlbnQgc2hwZSBzdHlsZS4gQ29uZGVuc2UgdGhlIGdyYXBocyBhIGxpdHRsZSBtb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBHaXZlIHJlcXVlc3QgYW5kIHNvbWV0aW1lcyBwYWRzIGEgZGlmZmVyZW50IHNocGUgc3R5bGUuIENvbmRlbnNlIHRoZQotCSAgZ3JhcGhzIGEgbGl0dGxlIG1vcmUuCi0KLTIwMDgtMDctMTAgMDA6MzA6MDIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBEb24ndCByZXF1aXJlIGZsZXggYW5kIGJpc29uIGlmIHRoZSBwYXJzZXIgaXMgZGlzYWJsZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgRG9uJ3QgcmVxdWlyZSBmbGV4IGFuZCBiaXNvbiBpZiB0aGUgcGFyc2VyIGlzIGRpc2FibGVkLgotCi0yMDA4LTA3LTA4IDExOjIwOjIyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzogRG9uJ3QgdXNlIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIChfbGlzdF9maW5kX3NvcnRlZF9jdXN0b20pOgotCSAgRG9uJ3QgdXNlIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzLgotCi0yMDA4LTA3LTA4IDA5OjA0OjI1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RjaGlsZHByb3h5LmM6IEFkZCBGSVhNRXMgZm9yIDAuMTEgdG8gdXNlIEdTVF9UWVBFX09CSkVDVCBpbiB0aGUgc2lnbmF0dXJlIG9mIHRoZSB0aGUgY2hpbGQtYWRkZWQgLyAtcmVtb3ZlZCBzaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjaGlsZHByb3h5LmM6IChnc3RfY2hpbGRfcHJveHlfYmFzZV9pbml0KToKLQkgIEFkZCBGSVhNRXMgZm9yIDAuMTEgdG8gdXNlIEdTVF9UWVBFX09CSkVDVCBpbiB0aGUgc2lnbmF0dXJlCi0JICBvZiB0aGUgdGhlIGNoaWxkLWFkZGVkIC8gLXJlbW92ZWQgc2lnbmFscyBhcyBHc3RDaGlsZFByb3h5Ci0JICBvbmx5IHN1cHBvcnRzIEdzdE9iamVjdHMuCi0KLTIwMDgtMDctMDcgMTE6MDE6MjYgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6IEZpeCBtZW1sZWFrCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIEZpeCBtZW1sZWFrCi0KLTIwMDgtMDctMDYgMTI6NDk6NDMgKzAwMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgotCi0JICBnc3QvZ3N0cG9sbC5jOiBGaXggImlnbm9yZWQgcmV0dXJuIHZhbHVlIiBjb21waWxlciB3YXJuaW5nIHdpdGggbmV3ZXIgZ2xpYmMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRybyBhdCBubnZhIGRvdCBvcmc+Ci0JICAqIGdzdC9nc3Rwb2xsLmM6Ci0JICBGaXggImlnbm9yZWQgcmV0dXJuIHZhbHVlIiBjb21waWxlciB3YXJuaW5nIHdpdGggbmV3ZXIgZ2xpYmMuCi0KLTIwMDgtMDctMDUgMTY6Mjg6MjggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdGNoaWxkcHJveHkuYzogRml4IGNvcHkmcGFzdGUgZXJyb3IgaW4gZ3N0X2NoaWxkX3Byb3h5X3JlbW92ZWQoKSBkb2N1bWVudGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JICBGaXggY29weSZwYXN0ZSBlcnJvciBpbiBnc3RfY2hpbGRfcHJveHlfcmVtb3ZlZCgpIGRvY3VtZW50YXRpb24uCi0KLTIwMDgtMDctMDIgMTQ6NDM6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RwbHVnaW4uYzogUHJpbnQgZXJyb3IgZGVidWcgbWVzc2FnZSBpZiBwbHVnaW4gZGVzY3JpcHRpb24gZmllbGRzIHRoYXQgc2hvdWxkIGJlIHNldCBhcmUgTlVMTC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChDSEVDS19QTFVHSU5fREVTQ19GSUVMRCksIChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6Ci0JICBQcmludCBlcnJvciBkZWJ1ZyBtZXNzYWdlIGlmIHBsdWdpbiBkZXNjcmlwdGlvbiBmaWVsZHMgdGhhdCBzaG91bGQKLQkgIGJlIHNldCBhcmUgTlVMTC4KLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfY29uc3Rfc3RyaW5nKToKLQkgIERvbid0IGNyYXNoIGlmIHRoZSBzdHJpbmcgdG8gc2VyaWFsaXNlIGlzIE5VTEwgKGl0IHJlYWxseSBzaG91bGQKLQkgIG5vdCBiZSwgYnV0IGFwcGFyZW50bHkgdGhpcyB1c2VkIHRvIHdvcmsgd2l0aCB0aGUgeG1sIHJlZ2lzdHJ5IC4uLikuCi0KLTIwMDgtMDctMDIgMTI6MjM6MTIgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OiBGaXggcGFyc2luZyBvZiBsb2cgbWVzc2FnZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtcGxvdC10aW1lbGluZS5weToKLQkgIEZpeCBwYXJzaW5nIG9mIGxvZyBtZXNzYWdlcwotCi0yMDA4LTA3LTAxIDA5OjI3OjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6IFNvcnQgYWxwaGFiZXRpY2FsbHkgc28gbWFrZSBjaGVjay1leHBvcnRzIGRvZXNuJ3QgYmFyZi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6OgotCSAgU29ydCBhbHBoYWJldGljYWxseSBzbyBtYWtlIGNoZWNrLWV4cG9ydHMgZG9lc24ndCBiYXJmLgotCi0yMDA4LTA3LTAxIDA1OjUzOjMyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RldmVudC5jOiBVc2UgZ3N0X2Zvcm1hdF9nZXRfbmFtZSgpIHRvIGltcHJvdmUgZGVidWcgb3V0cHV0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgVXNlIGdzdF9mb3JtYXRfZ2V0X25hbWUoKSB0byBpbXByb3ZlIGRlYnVnIG91dHB1dC4KLQkgICogZ3N0L2dzdHByZXNldC5jOgotCSAgUmVtb3ZlICNpZmRlZidlZCBjb2RlLiBBZGQgVE9ETyBjb21tZW50LgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgQWRkIGRlYnVnIG91dHB1dCB0byBlYXNlIHNwb3R0aW5nIGZvcm1hdCAhPSBzZWdtZW50LmZvcm1hdCBhc3NlcnRpb25zLgotCi0yMDA4LTA2LTMwIDA5OjQyOjQzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IEFsc28gZW5hYmxlIHRoZSBHRFAgdW5pdCB0ZXN0IGFnYWluIG9uIFBQQyBub3cgdGhhdCB0aGUgYnVnIGlzIGZpeGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IChnc3RfZHBfc3VpdGUpOgotCSAgQWxzbyBlbmFibGUgdGhlIEdEUCB1bml0IHRlc3QgYWdhaW4gb24gUFBDIG5vdyB0aGF0IHRoZSBidWcKLQkgIGlzIGZpeGVkLgotCi0yMDA4LTA2LTMwIDA5OjM4OjQ1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogRG9uJ3Qgd3JpdGUgdG8gdGhlIHNhbWUgcmVnaW9uIG9mIG1lbW9yeSBhcyBhIHVpbnQ2NCBhbmQgdWludDE2IGFzIHRoaXMgYnJlYWtzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKLQkgIERvbid0IHdyaXRlIHRvIHRoZSBzYW1lIHJlZ2lvbiBvZiBtZW1vcnkgYXMgYSB1aW50NjQgYW5kIHVpbnQxNgotCSAgYXMgdGhpcyBicmVha3Mgc3RyaWN0IGFsaWFzaW5nIHJ1bGVzIGFuZCBhcHBhcmFudGx5IGJyZWFrcyBvbiBQUEMKLQkgIGFuZCBzMzkwLiBUaGFua3MgdG8gU2pvZXJkIFNpbW9ucyBmb3IgYW5hbHlzaW5nLiBGaXhlcyBidWcgIzM0ODExNC4KLQotMjAwOC0wNi0yOSAxNjoxMToyNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6IE9wdGltaXplIGxpc3QgaGFuZGxpbmcuIFVzZSBvd24gZmluZCBmdW5jdGlvbi4gRXhwbG9pdCB0aGF0IGZhY3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JICBPcHRpbWl6ZSBsaXN0IGhhbmRsaW5nLiBVc2Ugb3duIGZpbmQgZnVuY3Rpb24uIEV4cGxvaXQgdGhhdCBmYWN0IHRoYXQKLQkgIHRoZSBsaXN0IGlzIHNvcnRlZC4gQWxzbyBwYXNzIGJhY2sgdGhlIG5vZGUgYmVmb3JlLCBzbyB0aGF0IHdlIGNhbgotCSAgaW5zZXJ0IHF1aWNrbHkuIEhhdmUgYSBmYXN0IHBhdGggZm9yIGFwcGVuZC4KLQotMjAwOC0wNi0yOSAxNTowMDoyNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2Rlc2lnbi86IEZpeCB0d28gdHlwb3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtZnJhbWVzdGVwLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6Ci0JICBGaXggdHdvIHR5cG9zLgotCi0yMDA4LTA2LTI3IDA5OjAyOjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzoKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBTaG93IGNvbmZpZ3VyYXRpb24gc3VtYXJ5IGFmdGVyIGNvbmZpZ3VyZSBydW4uIEJhc2VkIG9uIHBhdGNoIGJ5Ci0JICBMdWMgUGlvbmNob24gPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+LiBGaXhlczogIzU0MDEzNAotCi0yMDA4LTA2LTI3IDA3OjAzOjA1ICswMDAwICBMdWMgUGlvbmNob24gPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+Ci0KLQkgIGRvY3MvbWFudWFsLzogQWRkIHNjYWxlIGZhY3RvciBmb3IgcGRmIG91dHB1dC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6IEx1YyBQaW9uY2hvbiAgPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSAgQWRkIHNjYWxlIGZhY3RvciBmb3IgcGRmIG91dHB1dC4KLQkgICogZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbDoKLQkgIFN3aXRjaGVkIHNlY3Rpb25zICJwYWRzIiBhbmQgImJpbnMiIGFuZCBhZGRlZCBhIHBpcGVsaW5lIGRpYWdyYW0uCi0JICAqIGRvY3MvbWFudWFsL2ludHJvLWdzdHJlYW1lci54bWw6Ci0JICBBZGRlZCBtb3JlIGluZm8gb24gZ3N0cmVhbWVyLgotCSAgKiBkb2NzL21hbnVhbC9pbnRyby1tb3RpdmF0aW9uLnhtbDoKLQkgIENvbW1lbnRlZCBvdXQgdGhlIHdob2xlIHNlY3Rpb24gImN1cnJlbnQgcHJvYmxlbSIsIHdoaWNoIHNvdW5kcwotCSAgaGlzdG9yaWNhbCBhbmQgc29tZWhvdyBvc29sZXRlOyBpdCBjb3VsZCBiZSB0dXJuZWQgaW4gYSBwb3NpdGl2ZQotCSAgd2F5IGFuZCByZXVzZWQgdG8gaW1wcm92ZSB0aGUgZGVzaWduIHByaW5jaXBsZXMuCi0JICAqIGRvY3MvbWFudWFsL2ludHJvLXByZWZhY2UueG1sOgotCSAgLSBVcGRhdGUgVVJMcyB0byBsaWJyYXJ5Lmdub21lLm9yZy4KLQkgIC0gRG8gbm90IG1lbnRpb24gR1RLKyBpbiBwcmVsaW1pbmFyeSByZWFkaW5nIChpcnJlbGV2YW50KS4KLQkgIC0gTWVudGlvbiBQbHVnaW4gV3JpdGVyJ3MgTWFudWFsIGFuZCBmdXJ0aGVyIHJlYWRpbmcgb25seSBpbiB0aGUKLQkgIHByZXZpb3VzIHNlY3Rpb24uCi0JICAtIEFkZGVkIGEgbGlzdCBvZiBtb3N0IHJlbGV2YW50IEdPYmplY3QvZ2xpYiB0b3BpY3MuCi0JICAqIGRvY3MvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL21hbnVhbC9iaW4tZWxlbWVudC1naG9zdC5maWc6Ci0JICAqIGRvY3MvbWFudWFsL2Jpbi1lbGVtZW50LWdob3N0LnBuZzoKLQkgICogZG9jcy9tYW51YWwvYmluLWVsZW1lbnQtbm9naG9zdC5maWc6Ci0JICAqIGRvY3MvbWFudWFsL2Jpbi1lbGVtZW50LW5vZ2hvc3QucG5nOgotCSAgKiBkb2NzL21hbnVhbC9iaW4tZWxlbWVudC5maWc6Ci0JICAqIGRvY3MvbWFudWFsL2Jpbi1lbGVtZW50LnBuZzoKLQkgICogZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQtbXVsdGkuZmlnOgotCSAgKiBkb2NzL21hbnVhbC9maWx0ZXItZWxlbWVudC1tdWx0aS5wbmc6Ci0JICAqIGRvY3MvbWFudWFsL2ZpbHRlci1lbGVtZW50LmZpZzoKLQkgICogZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQucG5nOgotCSAgKiBkb2NzL21hbnVhbC9nc3RyZWFtZXItb3ZlcnZpZXcucG5nOgotCSAgKiBkb2NzL21hbnVhbC9oZWxsby13b3JsZC5maWc6Ci0JICAqIGRvY3MvbWFudWFsL2hlbGxvLXdvcmxkLnBuZzoKLQkgICogZG9jcy9tYW51YWwvbGlua2VkLWVsZW1lbnRzLmZpZzoKLQkgICogZG9jcy9tYW51YWwvbGlua2VkLWVsZW1lbnRzLnBuZzoKLQkgICogZG9jcy9tYW51YWwvbWltZS13b3JsZC5maWc6Ci0JICAqIGRvY3MvbWFudWFsL21pbWUtd29ybGQucG5nOgotCSAgKiBkb2NzL21hbnVhbC9xdWV1ZS5maWc6Ci0JICAqIGRvY3MvbWFudWFsL3F1ZXVlLnBuZzoKLQkgICogZG9jcy9tYW51YWwvc2ltcGxlLXBsYXllci5wbmc6Ci0JICAqIGRvY3MvbWFudWFsL3NpbmstZWxlbWVudC5maWc6Ci0JICAqIGRvY3MvbWFudWFsL3NpbmstZWxlbWVudC5wbmc6Ci0JICAqIGRvY3MvbWFudWFsL3NyYy1lbGVtZW50LmZpZzoKLQkgICogZG9jcy9tYW51YWwvc3JjLWVsZW1lbnQucG5nOgotCSAgKiBkb2NzL21hbnVhbC9kaWFncmFtcy1nZW5lcmFsLnN2ZzoKLQkgICogZG9jcy9tYW51YWwvZGlhZ3JhbXMtcGlwZWxpbmVzLnN2ZzoKLQkgIFJlbW92ZWQgLmZpZywgYWRkZWQgLnBuZyBjb3VudGVycGFydC4KLQkgIEZpeGVzOiAjNTM5MTM3Ci0KLTIwMDgtMDYtMjYgMjA6Mjc6MDAgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS4qOiByZXZlcnQgZXh0cmEtc2l6ZS1idWZmZXJzIHN0dWZmLCBjYXVzZWQgc29tZSByYWNlIGNvbmRpdGlvbnMgYW5kIGV4dHJhLXNpemUtYnVmZmVycy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaDoKLQkgIHJldmVydCBleHRyYS1zaXplLWJ1ZmZlcnMgc3R1ZmYsIGNhdXNlZCBzb21lIHJhY2UgY29uZGl0aW9ucwotCSAgYW5kIGV4dHJhLXNpemUtYnVmZmVycyBpcyBub3QgdXNlZCBhbnltb3JlLiBEb2NzIG5lZWRzIHNvbWUgdXBkYXRlcwotCi0yMDA4LTA2LTI2IDEyOjUyOjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB3aW4zMi9jb21tb24vOiBVcGRhdGUgd2luMzIgZmlsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkgICogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFVwZGF0ZSB3aW4zMiBmaWxlcy4KLQotMjAwOC0wNi0yNiAxMjoyNDowOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGRlYnVndXRpbHMuaDogQWRkIG1pc3NpbmcgU2luY2UnIG1hcmtlcnMgdG8gZ3RrLWRvYyBibHVyYnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuaDogKEdzdERlYnVnR3JhcGhEZXRhaWxzKSwKLQkgIChHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKToKLQkgIEFkZCBtaXNzaW5nIFNpbmNlJyBtYXJrZXJzIHRvIGd0ay1kb2MgYmx1cmJzLgotCi0yMDA4LTA2LTI2IDExOjU5OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzogQWRkIHNvbWUgbW9yZSB0ZXN0cyB3aXRoIHN3aXRjaGluZyBjYXBzIGluIGJ1ZmZlcl9hbGxvYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYzogKGJ1ZmZlcl9hbGxvY19wdDEpLAotCSAgKHNldF9jYXBzX3B0MSksIChHU1RfU1RBUlRfVEVTVCksIChzZXRfY2Fwc19wdDIpLCAodHJhbnNmb3JtX2lwXzEpLAotCSAgKHNldF9jYXBzXzEpLCAoc2V0X2NhcHNfY3QxKSwgKHRyYW5zZm9ybV9jdDEpLAotCSAgKHRyYW5zZm9ybV9jYXBzX2N0MSksICh0cmFuc2Zvcm1fc2l6ZV9jdDEpLCAoYnVmZmVyX2FsbG9jX2N0MSksCi0JICAoc2V0X2NhcHNfY3QyKSwgKHRyYW5zZm9ybV9jdDIpLCAodHJhbnNmb3JtX2NhcHNfY3QyKSwKLQkgICh0cmFuc2Zvcm1fc2l6ZV9jdDIpLCAoYnVmZmVyX2FsbG9jX2N0Mik6Ci0JICBBZGQgc29tZSBtb3JlIHRlc3RzIHdpdGggc3dpdGNoaW5nIGNhcHMgaW4gYnVmZmVyX2FsbG9jLgotCi0yMDA4LTA2LTI1IDE3OjI3OjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9saWJzLzogTW9yZSB0ZXN0cywgcHJlcGFyZSBmb3IgdGVzdHMgd2l0aCBzd2l0Y2hpbmcgY2FwcyBpbiBidWZmZXJfYWxsb2MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOiAoZ3N0X3Rlc3RfdHJhbnNfYmFzZV9pbml0KSwKLQkgIChnc3RfdGVzdF90cmFuc19jbGFzc19pbml0KSwgKHJlc3VsdF9zaW5rX2NoYWluKSwKLQkgIChyZXN1bHRfYnVmZmVyX2FsbG9jKSwgKGdzdF90ZXN0X3RyYW5zX25ldyksIChnc3RfdGVzdF90cmFuc19mcmVlKSwKLQkgIChnc3RfdGVzdF90cmFuc19wdXNoKSwgKGdzdF90ZXN0X3RyYW5zX3BvcCk6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOiAoYnVmZmVyX2FsbG9jX3B0MSksCi0JICAoc2V0X2NhcHNfcHQxKSwgKEdTVF9TVEFSVF9URVNUKSwgKHNldF9jYXBzX3B0MiksICh0cmFuc2Zvcm1faXBfMSksCi0JICAoc2V0X2NhcHNfMSksIChzZXRfY2Fwc19jdDEpLCAodHJhbnNmb3JtX2N0MSksCi0JICAodHJhbnNmb3JtX2NhcHNfY3QxKSwgKHRyYW5zZm9ybV9zaXplX2N0MSksIChidWZmZXJfYWxsb2NfY3QxKSwKLQkgIChzZXRfY2Fwc19jdDIpLCAodHJhbnNmb3JtX2N0MiksICh0cmFuc2Zvcm1fY2Fwc19jdDIpLAotCSAgKHRyYW5zZm9ybV9zaXplX2N0MiksIChidWZmZXJfYWxsb2NfY3QyKSwKLQkgIChnc3RfYmFzZXRyYW5zZm9ybV9zdWl0ZSk6Ci0JICBNb3JlIHRlc3RzLCBwcmVwYXJlIGZvciB0ZXN0cyB3aXRoIHN3aXRjaGluZyBjYXBzIGluIGJ1ZmZlcl9hbGxvYy4KLQotMjAwOC0wNi0yNSAxNTozOTowMiArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLio6IEZpeCBkZWFkLWxvY2sgaW4gdW5kZXJydW5fY2IKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmg6Ci0JICBGaXggZGVhZC1sb2NrIGluIHVuZGVycnVuX2NiCi0KLTIwMDgtMDYtMjUgMTQ6NDk6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDogRml4IGRldmljZSBvcGVuL2Nsb3NlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgotCSAgRml4IGRldmljZSBvcGVuL2Nsb3NlIGRvY3MuCi0KLTIwMDgtMDYtMjUgMTQ6NDc6MTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQ2hhbmdlTG9nOiBNZW50aW9uIGJ1Z251bWJlciBmb3IgbGFzdCBjb21taXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogQ2hhbmdlTG9nOgotCSAgTWVudGlvbiBidWdudW1iZXIgZm9yIGxhc3QgY29tbWl0LgotCi0yMDA4LTA2LTI1IDE0OjQ0OjUyICswMDAwICBMdWMgUGlvbmNob24gPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+Ci0KLQkgIGRvY3MvbWFudWFsL21hbnVhbC54bWw6IC0gUmVvcmdhbmlzZWQgdGhlIHByZXZpb3VzICJpbnRyb2R1Y3Rpb24iIGJ1bmRsZSBpbnRvIEZvcmV3b3JkLAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogTHVjIFBpb25jaG9uICA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KLQkgICogZG9jcy9tYW51YWwvbWFudWFsLnhtbDoKLQkgIC0gUmVvcmdhbmlzZWQgdGhlIHByZXZpb3VzICJpbnRyb2R1Y3Rpb24iIGJ1bmRsZSBpbnRvIEZvcmV3b3JkLAotCSAgSW50cm9kdWN0aW9uLCBhbmQgQWJvdXQgR1N0cmVhbWVyLiBUaGUgdHdvIGZpcnN0IGFyZSA8cHJlZmFjZT4KLQkgIGRvY2Jvb2sgZWxlbWVudHMuIFRoZSBsYXRlciBpcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgYm9vay4KLQkgIC0gYWRkZWQgaW50cm8tZ3N0cmVhbWVyLnhtbCAoY29udGVudCBwYXJ0aWFsbHkgZnJvbQotCSAgaW50cm8tcHJlZmFjZS54bWwpCi0JICAtIG1vdmVkIGFwcGVuZGl4LXdpbjMyLnhtbCBpbnRvIGFwcGVuZGl4LWludGVncmF0aW9uLnhtbAotCSAgKiBkb2NzL21hbnVhbC9pbnRyby1wcmVmYWNlLnhtbDogZ3N0cmVhbWVyIHNlY3Rpb24gbW92ZWQuLi4KLQkgICogZG9jcy9tYW51YWwvaW50cm8tZ3N0cmVhbWVyLnhtbDogLi4uaGVyZS4gbmV3IGZpbGUuCi0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXdpbjMyLnhtbDogcmVtb3ZlZCBmaWxlLiBDb250ZW50IG1vdmVkLi4uCi0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDogLi4uaGVyZS4KLQkgICogZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sOiBzZWN0aW9uIGFib3V0IEdzdEVkaXRvciBtb3ZlZC4uLgotCSAgKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1jaGVja2xpc3QueG1sOiAuLi5oZXJlLgotCi0yMDA4LTA2LTI1IDE0OjMyOjUzICswMDAwICBMdWMgUGlvbmNob24gPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+Ci0KLQkgIGRvY3MvbWFudWFsLzogLSBFeHBsaWNpdGVseSBpbmNsdWRlIGdsaWIuaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6IEx1YyBQaW9uY2hvbiAgPGx1Yy5waW9uY2hvbkBub2tpYS5jb20+Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDoKLQkgICogZG9jcy9tYW51YWwvaGVsbG8td29ybGQuZmlnOgotCSAgLSBFeHBsaWNpdGVseSBpbmNsdWRlIGdsaWIuaC4KLQkgIC0gRG8gbm90IHVzZSBnbG9iYWwgdmFyaWFibGVzLgotCSAgLSBVc2UgZ19wcmludGVycigpIGluc3RlYWQgb2YgZ19wcmludCgpLgotCSAgLSBNaW5vciBmb3JtYXRpbmcvcmVuYW1pbmcgdG8gaW5jcmVhc2UgcmVhZGliaWxpdHkuCi0JICAtIFJlbmFtZWQgbmV3X3BhZCgpIHRvIG9uX3BhZF9hZGRlZCgpCi0JICAtIEltcHJvdmVkIGV4cGxlbmF0b3J5IGNvbW1lbnRzLgotCSAgLSByZW5hbWVkIG9nZyBwYXJzZXIgdG8gb2dnIGRlbXV4ZXIKLQkgIC0gVXNlICJhdXRvYXVkaW9zaW5rIiBpbnN0ZWFkIG9mICJhbHNhc2luayIuCi0JICBGaXhlczogIzUzODYxOQotCi0yMDA4LTA2LTI1IDE0OjI3OjM3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIENoYW5nZUxvZzogUmVtb3ZlIGN2cyBjb25mbGljdCBtYXJrZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogQ2hhbmdlTG9nOgotCSAgUmVtb3ZlIGN2cyBjb25mbGljdCBtYXJrZXIuCi0KLTIwMDgtMDYtMjUgMTQ6MjU6NDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9SRUFETUU6IERvY3VtZW50IHRoYXQgZm9yIHBsZ2luLWRvY3Mgd2UgZXh0cmF4dCBoZSBzaG9ydC1kZXNjIGZyb20gdGhlIGVsZW1lbnQgZGV0YWlscy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL1JFQURNRToKLQkgIERvY3VtZW50IHRoYXQgZm9yIHBsZ2luLWRvY3Mgd2UgZXh0cmF4dCBoZSBzaG9ydC1kZXNjIGZyb20gdGhlIGVsZW1lbnQKLQkgIGRldGFpbHMuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgIFRlbGwgdGhhdCBkZXZpY2VzIHNob3VsZCBiZSBjbG9zZWQgaW4gUEFVU0VEIC0+IFJFQURZLgotCSAgKiBkb2NzL21hbnVhbC9SRUFETUU6Ci0JICBEb2N1bWVudCBob3cgdGVzdHMgaW4gdGhlIG1hbnVhbCBhcmUgaGFuZGxlZC4KLQkgICogZG9jcy9tYW51YWxzLm1hazoKLQkgIFR5cG8gaW4gY29tbWVudC4KLQotMjAwOC0wNi0yNSAxMTo1MDowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBPbmx5IGNhcmUgYWJvdXQgbGF0ZW5jeSBtaW4gYW5kIG1heCB3aGVuIHRoZSBzaW5rIGlzIGFjdHVhbGx5IGEgbGl2ZSBzaW5rLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9xdWVyeV9sYXRlbmN5X2ZvbGQpOgotCSAgT25seSBjYXJlIGFib3V0IGxhdGVuY3kgbWluIGFuZCBtYXggd2hlbiB0aGUgc2luayBpcyBhY3R1YWxseSBhIGxpdmUKLQkgIHNpbmsuCi0KLTIwMDgtMDYtMjUgMTA6NTM6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OiBGaXggdHlwby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKLQkgIEZpeCB0eXBvLgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dDoKLQkgIEFkZCBub3RlcyBhYm91dCB3aHkgdHJhbnNmb3JtIG5lZWRzIHRvIGtub3cgaW5wdXQvb3V0cHV0IHNpemVzLgotCSAgQWRkIHNvbWUgaXNzdWVzIHRoYXQgbmVlZCB0byBiZSBzb2x2ZWQuCi0JICBBZGQgc29tZSBtb3JlIHVzZSBjYXNlcy4KLQkgICogdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jOiAoZ3N0X3Rlc3RfdHJhbnNfYmFzZV9pbml0KSwKLQkgIChnc3RfdGVzdF90cmFuc19jbGFzc19pbml0KSwgKHJlc3VsdF9zaW5rX2NoYWluKSwKLQkgIChyZXN1bHRfYnVmZmVyX2FsbG9jKSwgKGdzdF90ZXN0X3RyYW5zX25ldyksIChnc3RfdGVzdF90cmFuc19mcmVlKSwKLQkgIChnc3RfdGVzdF90cmFuc19wdXNoKSwgKGdzdF90ZXN0X3RyYW5zX3BvcCk6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOiAoYnVmZmVyX2FsbG9jX3B0MSksCi0JICAoc2V0X2NhcHNfcHQxKSwgKEdTVF9TVEFSVF9URVNUKSwgKHNldF9jYXBzX3B0MiksICh0cmFuc2Zvcm1faXBfMSksCi0JICAoc2V0X2NhcHNfMSksIChzZXRfY2Fwc19jdDEpLCAodHJhbnNmb3JtX2N0MSksCi0JICAodHJhbnNmb3JtX2NhcHNfY3QxKSwgKHRyYW5zZm9ybV9zaXplX2N0MSksIChidWZmZXJfYWxsb2NfY3QxKSwKLQkgIChnc3RfYmFzZXRyYW5zZm9ybV9zdWl0ZSk6Ci0JICBBZGQgc3Vwb3J0IGZvciBkaWZmZXJlbnQgcGFkIHRlbXBsYXRlcyBhbmQgYnVmZmVyLWFsbG9jLgotCSAgQWRkIG1vcmUgY2hlY2tzIGZvciBjYXBzIGFuZCBidWZmZXItYWxsb2MuCi0JICBBZGQgY2hlY2tzIGZvciBwcm94eSBidWZmZXIgYWxsb2MuCi0JICBBZGQgdW5pdCB0ZXN0IGZvciBjb3B5IHRyYW5zZm9ybS4KLQotMjAwOC0wNi0yNCAxOTo1Njo1MSArMDAwMCAgTHVjIFBpb25jaG9uIDxsdWMucGlvbmNob25Abm9raWEuY29tPgotCi0JICBkb2NzL21hbnVhbC86IFR5cG8gYW5kIGZvcm1hdHRpbmcgZml4ZXMgKCM1Mzg1OTQpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTHVjIFBpb25jaG9uICA8bHVjLnBpb25jaG9uQG5va2lhLmNvbT4KLQkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sOgotCSAgKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1saWNlbnNpbmcueG1sOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKLQkgICogZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwteG1sLnhtbDoKLQkgICogZG9jcy9tYW51YWwvaW50cm8tYmFzaWNzLnhtbDoKLQkgICogZG9jcy9tYW51YWwvaW50cm8tcHJlZmFjZS54bWw6Ci0JICBUeXBvIGFuZCBmb3JtYXR0aW5nIGZpeGVzICgjNTM4NTk0KS4KLQotMjAwOC0wNi0yNCAwNzo0OTozNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogRml4IHNvbWUgbWVtb3J5IGxlYWtzIGFuZCB1c2VzIG9mIG9iamVjdCBpbnN0YW5jZXMgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBvd24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBGaXggc29tZSBtZW1vcnkgbGVha3MgYW5kIHVzZXMgb2Ygb2JqZWN0IGluc3RhbmNlcyB0aGF0IHdlIGRvbid0Ci0JICBhY3R1YWxseSBvd24uCi0KLTIwMDgtMDYtMjIgMTk6MTk6MzUgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBBZGQgZnVuY3Rpb25hbGl0eSB0byBleHRyYS1zaXplLWJ1ZmZlcnMgcHJvcGVydHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBBZGQgZnVuY3Rpb25hbGl0eSB0byBleHRyYS1zaXplLWJ1ZmZlcnMgcHJvcGVydHkuCi0KLTIwMDgtMDYtMjIgMTQ6MzU6MTMgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBEb24ndCB1cGRhdGUgdGhlIGN1cl90aW1lIG9uIEdTVF9DTE9DS19USU1FX05PTkUgKCM1Mzc4MDQpIGFuZCBkb24ndCBhY3RpdmF0ZSB0aGUgcC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOgotCSAgRG9uJ3QgdXBkYXRlIHRoZSBjdXJfdGltZSBvbiBHU1RfQ0xPQ0tfVElNRV9OT05FICgjNTM3ODA0KSBhbmQgZG9uJ3QKLQkgIGFjdGl2YXRlIHRoZSBwYWRzIGlmIHRoZXkgYXJlIGFkZGVkIGluIFNUQVRFX05VTEwuCi0KLTIwMDgtMDYtMjEgMjE6MjA6MTMgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgQVBJIHRvIGRvYwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBBZGQgbmV3IEFQSSB0byBkb2MKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIEFQSTogZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lCi0KLTIwMDgtMDYtMjEgMTk6NDg6NTMgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLio6IEFsc28gc2V0dXAgcmVxdWVzdCBwYWRzIGFuZCBhbGxvdyBzZXR1cCBwYWRzIGJ5IG5hbWUgKCM1Mzc4MTIpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIEFsc28gc2V0dXAgcmVxdWVzdCBwYWRzIGFuZCBhbGxvdyBzZXR1cCBwYWRzIGJ5IG5hbWUgKCM1Mzc4MTIpCi0JICBBUEk6IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUKLQkgIEFQSTogZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWUKLQotMjAwOC0wNi0yMCAyMTowODo0NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrLzogVXNlIEhBVkVfVkFMR1JJTkRfSCBzb21lIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6Ci0JICBVc2UgSEFWRV9WQUxHUklORF9IIHNvbWUgbW9yZS4KLQotMjAwOC0wNi0yMCAxNjoyOToyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHNjcmlwdHMvY3ZzLXVwZGF0ZS5zaDogUGFzcyBhcmd1bWVudHMgdG8gbWFrZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzY3JpcHRzL2N2cy11cGRhdGUuc2g6Ci0JICBQYXNzIGFyZ3VtZW50cyB0byBtYWtlLgotCSAgUnVuIGF1dG9yZWdlbi5zaCBpZiBNYWtlZmlsZSBpcyBub3QgdGhlcmUuCi0KLTIwMDgtMDYtMjAgMTU6NTQ6NDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBEb24ndCBhc3N1bWUgdGhhdCA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4gZXhpc3RzIGp1c3QgYmVjYXVzZSB0aGUgYmluYXJ5IGlzIHRoZXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgIERvbid0IGFzc3VtZSB0aGF0IDx2YWxncmluZC92YWxncmluZC5oPiBleGlzdHMganVzdCBiZWNhdXNlCi0JICB0aGUgYmluYXJ5IGlzIHRoZXJlLgotCi0yMDA4LTA2LTIwIDEyOjA2OjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay86IEFkZCBzb21lIHRlc3QgYmFzZXRyYW5zZm9ybSBlbGVtZW50IGFuZCB0aGUgYmVnaW5uaW5ncyBvZiB2YXJpb3VzIHVuaXQgdGVzdHMgZm9yIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmM6IChnc3RfdGVzdF90cmFuc19iYXNlX2luaXQpLAotCSAgKGdzdF90ZXN0X3RyYW5zX2NsYXNzX2luaXQpLCAoZ3N0X3Rlc3RfdHJhbnNfaW5pdCksCi0JICAoZ3N0X3Rlc3RfdHJhbnNfc2V0X2RhdGEpLCAocmVzdWx0X3NpbmtfY2hhaW4pLAotCSAgKGdzdF90ZXN0X3RyYW5zX25ldyksIChnc3RfdGVzdF90cmFuc19mcmVlKSwgKGdzdF90ZXN0X3RyYW5zX3B1c2gpLAotCSAgKGdzdF90ZXN0X3RyYW5zX3BvcCk6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMS5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHRyYW5zZm9ybV9pcF8xKSwgKHNldF9jYXBzXzEpLCAoZ3N0X2Jhc2V0cmFuc2Zvcm1fc3VpdGUpOgotCSAgQWRkIHNvbWUgdGVzdCBiYXNldHJhbnNmb3JtIGVsZW1lbnQgYW5kIHRoZSBiZWdpbm5pbmdzIG9mIHZhcmlvdXMKLQkgIHVuaXQgdGVzdHMgZm9yIGl0LgotCi0yMDA4LTA2LTIwIDExOjI0OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IEluY3JlYXNlIGNvZGUgcmVhZGFiaWxpdHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfcGVlayk6Ci0JICBJbmNyZWFzZSBjb2RlIHJlYWRhYmlsaXR5LgotCSAgRG9uJ3QgdHJ5IHRvIGNvbXBhcmUgYnVmZmVyIG9mZnNldHMgd2hlbiB0aGVyIGFyZSBpbnZhbGlkLgotCi0yMDA4LTA2LTIwIDExOjA3OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbTogRGlzdCBzb21lIG1vcmUgZGVzaWduIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06Ci0JICBEaXN0IHNvbWUgbW9yZSBkZXNpZ24gZG9jcy4KLQkgICogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6Ci0JICBTbWFsbCBhZGRpdGlvbjogZ29vZCBwbHVnaW5zIG11c3RuJ3QgaGF2ZSBmdW5jdGlvbmFsIGNvZGUKLQkgIHdpdGhpbiBhc3NlcnRpb24gbWFjcm9zLgotCi0yMDA4LTA2LTIwIDEwOjMyOjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9kcmFmdC1mcmFtZXN0ZXAudHh0OiBTb21lIGlkZWFzIGFib3V0IGEgZnJhbWVzdGVwIEFQSQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LWZyYW1lc3RlcC50eHQ6Ci0JICBTb21lIGlkZWFzIGFib3V0IGEgZnJhbWVzdGVwIEFQSQotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dDoKLQkgIFN0YXJ0IGRlc2lnbiBhbmQgdXNlIGNhc2VzIGZvciBiYXNldHJhbnNmb3JtIGluIG9yZGVyIHRvIGdldCBpdAotCSAgZml4ZWQgc29vbi4KLQotMjAwOC0wNi0yMCAxMDoyMDowOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGJ1cy5jOiBNYWtlIGl0IGtub3duIHRoYXQgZ3N0X2J1c19wb2xsKCkgaXMgcHVyZSBldmlsIChmaXhlcyAjNTM4ODEwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmM6Ci0JICBNYWtlIGl0IGtub3duIHRoYXQgZ3N0X2J1c19wb2xsKCkgaXMgcHVyZSBldmlsIChmaXhlcyAjNTM4ODEwKS4KLQotMjAwOC0wNi0yMCAxMDoxNDo1NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzLzogUmVtb3ZlIHNob3J0X2Rlc2NyaXB0aW9uLiBBZGQgYmFzaWMgZG9jcyBmb3IgZ3N0dHlwZWZpbmRlbGVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIFJlbW92ZSBzaG9ydF9kZXNjcmlwdGlvbi4gQWRkIGJhc2ljIGRvY3MgZm9yIGdzdHR5cGVmaW5kZWxlbWVudC4KLQkgIFNpbXBsaWZ5IG1hcmt1cCBmb3IgZmFrZXNyYy9mZHNyYy4KLQotMjAwOC0wNi0yMCAxMDowNzoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiBBZGRlZCBTaW5jZSBkb2MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19jbGFzc19pbml0KToKLQkgIEFkZGVkIFNpbmNlIGRvYy4KLQotMjAwOC0wNi0yMCAxMDowMjoxNCArMDAwMCAgam9lbCBsYXJzc29uIDx0aWxsam9lbEBnbWFpbC5jb20+Ci0KLQkgIEFkZCB0aW1lb3V0IHByb3BlcnR5IGxpa2UgdWRwc3JjLiBGaXhlcyAjNTM4NjI4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogam9lbCBsYXJzc29uIDx0aWxsam9lbCBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3RfZmRfc3JjX2luaXQpLCAoZ3N0X2ZkX3NyY191cGRhdGVfZmQpLAotCSAgKGdzdF9mZF9zcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9mZF9zcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZmRfc3JjX2NyZWF0ZSk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKLQkgIEFkZCB0aW1lb3V0IHByb3BlcnR5IGxpa2UgdWRwc3JjLiBGaXhlcyAjNTM4NjI4LgotCSAgQWRkIHNvbWUgbW9yZSBkb2NzIGFuZCBleGFtcGxlIHBpcGVsaW5lcy4KLQotMjAwOC0wNi0yMCAwODo1NDo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWRkIG1ldGhvZCB0byBhbGxvdyBzaW5rcyB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgZGVsYXkgYmV0d2VlbiB0aGUgc3luYyB0aW1lcyBhbmQgdGhlIGFjdHVhbCByZW5kZXJpbmcgb2YgdGhlIGRhdGEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3kpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9yZW5kZXJfZGVsYXkpLCAoZ3N0X2Jhc2Vfc2lua193YWl0X2VvcyksCi0JICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBBZGQgbWV0aG9kIHRvIGFsbG93IHNpbmtzIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBkZWxheSBiZXR3ZWVuIHRoZSBzeW5jCi0JICB0aW1lcyBhbmQgdGhlIGFjdHVhbCByZW5kZXJpbmcgb2YgdGhlIGRhdGEuCi0JICBBUEk6IGdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSgpCi0JICBBUEk6IGdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheSgpCi0KLTIwMDgtMDYtMjAgMDg6NDU6MDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiBudW1iZXIgYmFjayB0byBkZXYgLT4gMC4xMC4yMC4xCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQnVtcCB2ZXJzaW9uIG51bWJlciBiYWNrIHRvIGRldiAtPiAwLjEwLjIwLjEKLQotMjAwOC0wNi0yMCAwODozOTo1NCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBUEk6IEFkZCBHU1RfVEFHX0FUVEFDSE1FTlQgZm9yIGdlbmVyaWMgZmlsZSBhdHRhY2htZW50cyB0byBzdHJlYW1zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3R0YWdsaXN0LmM6IChfZ3N0X3RhZ19pbml0aWFsaXplKToKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIEFQSTogQWRkIEdTVF9UQUdfQVRUQUNITUVOVCBmb3IgZ2VuZXJpYyBmaWxlIGF0dGFjaG1lbnRzIHRvIHN0cmVhbXMuCi0JICBGaXhlcyBidWcgIzUzODU2OC4KLQotMjAwOC0wNi0yMCAwODozNjo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogUmV2ZXJ0IG9uZSBjaGFuZ2UsIHRoYXQgbWFrZSByZXQgdmFsdWUgcG9zc2libGUgdW5pbml0aWFsaXplZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIFJldmVydCBvbmUgY2hhbmdlLCB0aGF0IG1ha2UgcmV0IHZhbHVlIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQuCi0KLTIwMDgtMDYtMjAgMDg6MzI6MzYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IFVzZSBmcmVlemUvdGhhdyBub3RpZnkgdG8gc3luYyBub3RpZnkgZW1pc3Npb24gYSBiaXQgKGl0cyBhbHNvIG1vcmUgZWZmaWNpZW50KS4gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICBVc2UgZnJlZXplL3RoYXcgbm90aWZ5IHRvIHN5bmMgbm90aWZ5IGVtaXNzaW9uIGEgYml0IChpdHMgYWxzbyBtb3JlCi0JICBlZmZpY2llbnQpLiBNb3ZlIGRlYnVnIG91dHB1dCB0byBMT0cgKGlzIGNhbGxlZCBhIGxvdCBpbiBhIGxvb3ApLgotCSAgQWx3YXlzIHVuc2V0IGdfdmFsdWVzIGlmIHRoZSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuCi0KLTIwMDgtMDYtMjAgMDg6Mjg6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSWYgd2UgaGF2ZSBub3Qgc2VlbiBhIGJ1ZmZlciBiZWZvcmUgRU9TLCB1c2UgdGhlIHNlZ21lbnQgdmFsdWVzIHRvIHJlcG9ydCB0aGUgY3VycmVudCBwby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLAotCSAgKGdzdF9iYXNlX3Npbmtfd2FpdF9lb3MpLCAoZ3N0X2Jhc2Vfc2lua19ldmVudCk6Ci0JICBJZiB3ZSBoYXZlIG5vdCBzZWVuIGEgYnVmZmVyIGJlZm9yZSBFT1MsIHVzZSB0aGUgc2VnbWVudCB2YWx1ZXMgdG8KLQkgIHJlcG9ydCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbnN0ZWFkIG9mIGludmFsaWQgcG9zaXRpb25zLgotCi0yMDA4LTA2LTIwIDA4OjIxOjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIElnbm9yZSBtb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC8uY3ZzaWdub3JlOgotCSAgSWdub3JlIG1vcmUuCi0KLTIwMDgtMDYtMjAgMDg6MTc6MDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgUmV3cml0ZSBoYW5kbGluZyBvZiBkZWZhdWx0IHZhbHVlcy4gRml4IG92ZXJmbG93IHdpdGggdW5zaWduZWQgdHlwZXMgaW4gbGluZWFyIGludGVycG9sYXRpb24uIFJlbW92ZSBub3cgb2Jzb2xldGUgX2ZpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBSZXdyaXRlIGhhbmRsaW5nIG9mIGRlZmF1bHQgdmFsdWVzLiBGaXggb3ZlcmZsb3cgd2l0aCB1bnNpZ25lZCB0eXBlcwotCSAgaW4gbGluZWFyIGludGVycG9sYXRpb24uIFJlbW92ZSBub3cgb2Jzb2xldGUgX2ZpcnN0X3ZhbHVlKCkgZnVuY3Rpb24uCi0JICBBZGQgbW9yZSB0ZXN0cy4gRml4ZXMgIzUzODIwMS4KLQotMjAwOC0wNi0yMCAwODoxNDoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEFkZCBkZWJ1ZyBpbmZvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpOgotCSAgQWRkIGRlYnVnIGluZm8uCi0JICBXaGVuIGEgYnVmZmVyIGlzIHdyaXRhYmxlLCBpdHMgbWV0YWRhdGEgaXMgYWxzbyB3cml0YWJsZSBzbyB3ZSBkb24ndAotCSAgbmVlZCB0byBzdWJidWZmZXIgKHdoaWNoIHRoZW4gbWFrZXMgdGhlIGJ1ZmZlciBub3Qtd3JpdGFibGUgYW55bW9yZSkuCi0KLT09PSByZWxlYXNlIDAuMTAuMjAgPT09Ci0KLTIwMDgtMDYtMTggMTA6NTg6MzUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3RyZWFtZXIuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4yMAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZWxlYXNlIDAuMTAuMjAKLQotMjAwOC0wNi0xOCAxMDo1NjoxOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDgtMDYtMTEgMjE6MTQ6MTcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IDAuMTAuMTkuMyBwcmUtcmVsZWFzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIDAuMTAuMTkuMyBwcmUtcmVsZWFzZQotCi0yMDA4LTA2LTExIDIwOjA3OjMxICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgUmVuYW1lIERBVEFESVIgdG8gR1NUX0RBVEFESVIgdG8gYXZvaWQgYnVpbGQgcHJvYmxlbXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIFJlbmFtZSBEQVRBRElSIHRvIEdTVF9EQVRBRElSIHRvIGF2b2lkIGJ1aWxkIHByb2JsZW1zCi0JICBvbiB3aW4zMi4gUGF0Y2ggQnk6IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCSAgRml4ZXM6ICM1MzY4NTcKLQotMjAwOC0wNi0wNSAxMDoxMzo0NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBjb25maWd1cmUuYWM6IEV4cGxpY2l0ZWx5IGxpbmsgd2l0aCAtbGRsIGlmIGRsYWRkcigpIGlzIGZvdW5kIHRoZXJlLiBCZWZvcmUgaXQgd2FzIGltcGxpY2l0ZWx5IGxpbmtlZCBieSB0aGUgZ21vZHVsZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBFeHBsaWNpdGVseSBsaW5rIHdpdGggLWxkbCBpZiBkbGFkZHIoKSBpcyBmb3VuZCB0aGVyZS4gQmVmb3JlIGl0IHdhcwotCSAgaW1wbGljaXRlbHkgbGlua2VkIGJ5IHRoZSBnbW9kdWxlIHBrZ2NvbmZpZyBmaWxlIGJ1dCBpbiBnbGliIDIuMTcuMAotCSAgLWxkbCBoYXMgbW92ZWQgZnJvbSBMaWJzIHRvIExpYnMucHJpdmF0ZS4gRml4ZXMgYnVnICM1MzY3NDQuCi0KLTIwMDgtMDYtMDUgMDk6NDI6MzEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBQdXQgcHJlLXJlbGVhc2UgY2hhbmVnbG9nIGVudHJ5IHdoZXJlIGl0IGFjdHVhbGx5IGhhcHBlbmVkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFB1dCBwcmUtcmVsZWFzZSBjaGFuZWdsb2cgZW50cnkgd2hlcmUgaXQgYWN0dWFsbHkgaGFwcGVuZWQKLQotMjAwOC0wNi0wNSAwOTo0MToyNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogMC4xMC4xOS4yIHByZS1yZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgMC4xMC4xOS4yIHByZS1yZWxlYXNlCi0KLTIwMDgtMDYtMDUgMDg6NTU6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RlcnJvci5jOiBGaXggdHlwbyAoc3BvdHRlZCBieSBGYWJyaWNpbyBHb2RveSwgIzUzNjcyMykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVycm9yLmM6IChfZ3N0X3N0cmVhbV9lcnJvcnNfaW5pdCk6Ci0JICBGaXggdHlwbyAoc3BvdHRlZCBieSBGYWJyaWNpbyBHb2RveSwgIzUzNjcyMykuCi0KLTIwMDgtMDYtMDQgMTE6NDc6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQWRkIHNvbWUgZGVidWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZCksCi0JICAoZ3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0KSwgKGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9xb3MpOgotCSAgQWRkIHNvbWUgZGVidWcuCi0JICBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2VuZXJhdGUgaW52YWxpZCBRb1MgbWVzc2FnZXMuCi0KLTIwMDgtMDYtMDQgMTE6MzE6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RldmVudC5jOiBBZGQgc29tZSBhc3NlcnQgYW5kIGRvY3MgZm9yIGludmFsaWQgaW5wdXQgdG8gdGhlIHFvcyBmdW5jdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfcW9zKToKLQkgIEFkZCBzb21lIGFzc2VydCBhbmQgZG9jcyBmb3IgaW52YWxpZCBpbnB1dCB0byB0aGUgcW9zIGZ1bmN0aW9uLgotCi0yMDA4LTA1LTMwIDE1OjQ4OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFRoZSByZXBvcnRlZCBwb3NpdGlvbiBtdXN0IGFsd2F5cyBiZSBzbWFsbGVyIHRoYW4gdGhlIGxhc3Qgc2VlbiB0aW1lc3RhbXBzIChvciB0aW1lc3RhbXAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzKSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6Ci0JICBUaGUgcmVwb3J0ZWQgcG9zaXRpb24gbXVzdCBhbHdheXMgYmUgc21hbGxlciB0aGFuIHRoZSBsYXN0IHNlZW4KLQkgIHRpbWVzdGFtcHMgKG9yIHRpbWVzdGFtcCArIGR1cmF0aW9uIGZvciByZXZlcnNlKS4KLQotMjAwOC0wNS0zMCAwNzozNjoxNyArMDAwMCAgUm9iIEJyYWRmb3JkIDxyb2JAcm9ic3Rlci5vcmcudWs+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeS5jOiBEb24ndCByZWN1cnNlIGludG8gLmRlYnVnIGRpcmVjdG9yaWVzIGFzIHNvbWUgZGlzdHJvcyBpbnN0YWxsIHRoZSBkZWJ1Z2dpbmcgc3ltYm9scyBuZXh0IHRvIHRoZSBwbC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUm9iIEJyYWRmb3JkIDxyb2IgYXQgcm9ic3RlciBkb3Qgb3JnIGRvdCB1az4KLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKToKLQkgIERvbid0IHJlY3Vyc2UgaW50byAuZGVidWcgZGlyZWN0b3JpZXMgYXMgc29tZSBkaXN0cm9zIGluc3RhbGwKLQkgIHRoZSBkZWJ1Z2dpbmcgc3ltYm9scyBuZXh0IHRvIHRoZSBwbHVnaW5zIGluIC5kZWJ1ZyBkaXJlY3RvcmllcwotCSAgYW5kIGRsb3BlbigpIGNyYXNoZXMgb24gdGhlbSBzb21ldGltZXMuIEZpeGVzIGJ1ZyAjNTA4MDcwLgotCSAgQWRkIEZJWE1FIGZvciAwLjExIHRvIG5vdCByZWN1cnNlIGludG8gZGlyZWN0b3JpZXMgYXQgYWxsIGJlY2F1c2UKLQkgIGl0J3MgdmVyeSBpbmNvbnNpc3RlbnQgdG8gdGhlIGJlaGF2aW91ciBvZiBvdGhlciBQQVRIIGVudmlyb25tZW50Ci0JICB2YXJpYWJsZXMuCi0KLTIwMDgtMDUtMjkgMTY6MzQ6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRml4IHBvc2l0aW9uIHF1ZXJ5IHJhbmdlIGNoZWNrcyBpbiByZXZlcnNlIHBsYXliYWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX2xhc3QpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgotCSAgRml4IHBvc2l0aW9uIHF1ZXJ5IHJhbmdlIGNoZWNrcyBpbiByZXZlcnNlIHBsYXliYWNrLgotCi0yMDA4LTA1LTI5IDA3OjE5OjQ3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RlbGVtZW50Lio6IERlcHJlY2F0ZWQgZ3N0X2VsZW1lbnRfZ2V0X3BhZCgpIGFzIGl0IGNhbid0IGJlIHVzZWQgc2FuZWx5LiBJdCdzIG5vdCBjbGVhciBvZiB0aGUgcmVmZXJlbmNlIHRvIHRoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBEZXByZWNhdGVkIGdzdF9lbGVtZW50X2dldF9wYWQoKSBhcyBpdCBjYW4ndCBiZSB1c2VkIHNhbmVseS4gSXQncyBub3QKLQkgIGNsZWFyIG9mIHRoZSByZWZlcmVuY2UgdG8gdGhlIHJlc3VsdGluZyBwYWQgbXVzdCBiZSByZWxlYXNlZCBsYXRlcgotCSAgb3Igbm90LCByZXN1bHRpbmcgaW4gcG9zc2libGUgbGVha3MuIEZpeGVzIGJ1ZyAjNTMzODY1LgotCi0yMDA4LTA1LTI4IDE2OjQ2OjA3ICswMDAwICBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdUBzdm4uZ25vbWUub3JnPgotCi0JICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogU21hbGwgZG9jIGZpeC4gRml4ZXMgIzUzNTI4NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEpvc8OpIEFsYnVycXVlcnF1ZSA8amFhbGJ1cnF1IGF0IHN2biBkb3QgZ25vbWUgZG90IG9yZz4KLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBTbWFsbCBkb2MgZml4LiBGaXhlcyAjNTM1Mjg1LgotCi0yMDA4LTA1LTI4IDEzOjQ4OjE3ICswMDAwICBCamFybmUgUm9zZW5ncmVuIDxiamFybmVAYXhpcy5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBNYWtlIHNlbmRpbmcgYW4gRU9TIGV2ZW50IHRvIHRoZSBiYXNlc3JjIG5vbi1ibG9ja2luZyBldmVuIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIGJsby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogQmphcm5lIFJvc2VuZ3JlbiA8Ymphcm5lIGF0IGF4aXMgZG90IGNvbT4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksIChnc3RfYmFzZV9zcmNfcGFkX2dldF9yYW5nZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLCAoZ3N0X2Jhc2Vfc3JjX3NldF9mbHVzaGluZyksCi0JICAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBNYWtlIHNlbmRpbmcgYW4gRU9TIGV2ZW50IHRvIHRoZSBiYXNlc3JjIG5vbi1ibG9ja2luZyBldmVuIGlmIHRoZQotCSAgaW1wbGVtZW50YXRpb24gZG9lcyBibG9ja2luZyB3YWl0cyBpbiB0aGUgY3JlYXRlIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUKLQkgIGJ5IHVubG9ja2luZyB0aGUgY3JlYXRlIGZ1bmN0aW9uIHdoZW4gRU9TIGlzIHNlbnQuCi0JICBGaXhlcyAjNTM1MjE4LgotCi0yMDA4LTA1LTI4IDEwOjQ0OjE1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IElmIHBvc3NpYmxlIHByaW50IHRoZSBlbGVtZW50IHR5cGUgb2YgR1ZhbHVlQXJyYXkgcHJvcGVydGllcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgotCSAgSWYgcG9zc2libGUgcHJpbnQgdGhlIGVsZW1lbnQgdHlwZSBvZiBHVmFsdWVBcnJheSBwcm9wZXJ0aWVzLgotCi0yMDA4LTA1LTI4IDA3OjQ3OjIyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RpdGVyYXRvci5jOiBSZW1vdmUgYW4gdW51c2VkIGZpZWxkIGZyb20gdGhlIHByaXZhdGUgR3N0TGlzdEl0ZXJhdG9yIHN0cnVjdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkgIFJlbW92ZSBhbiB1bnVzZWQgZmllbGQgZnJvbSB0aGUgcHJpdmF0ZSBHc3RMaXN0SXRlcmF0b3Igc3RydWN0LgotCi0yMDA4LTA1LTI3IDIwOjE5OjE3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiBBZGQgcGFyYW1ldGVyIGd1YXJkcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIEFkZCBwYXJhbWV0ZXIgZ3VhcmRzLgotCi0yMDA4LTA1LTI3IDE5OjQ3OjQ5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiBSZXZlcnQgdGVzdCBjaGFuZ2UgYW5kIGFkZCBjb21tZW50IHdoeSBpdCBzaG91bGQgbm90IHdvcmsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBSZXZlcnQgdGVzdCBjaGFuZ2UgYW5kIGFkZCBjb21tZW50IHdoeSBpdCBzaG91bGQgbm90IHdvcmsuCi0KLTIwMDgtMDUtMjcgMTg6MzE6MzkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IEV4dGVuZGluZyB0aGUgdGVzdCBhIGxpdHRsZSB0byB2ZXJpZnkgdGhhdCB3ZSBhbHNvIGdldCB0aGUgTlVMTCBzdGF0ZS0gY2hhbmdlIG1lc3NhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBFeHRlbmRpbmcgdGhlIHRlc3QgYSBsaXR0bGUgdG8gdmVyaWZ5IHRoYXQgd2UgYWxzbyBnZXQgdGhlIE5VTEwgc3RhdGUtCi0JICBjaGFuZ2UgbWVzc2FnZS4KLQotMjAwOC0wNS0yNyAxNjozNzozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHByZXNldC5jOiBBZGQgU2luY2U6IG1hcmtlcnMgdG8gZG9jcyBibHVyYnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHByZXNldC5jOiAoZ3N0X3ByZXNldF9kZWZhdWx0X2dldF9tZXRhKSwKLQkgIChnc3RfcHJlc2V0X2dldF9wcmVzZXRfbmFtZXMpLCAoZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMpLAotCSAgKGdzdF9wcmVzZXRfbG9hZF9wcmVzZXQpLCAoZ3N0X3ByZXNldF9zYXZlX3ByZXNldCksCi0JICAoZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0KSwgKGdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCksCi0JICAoZ3N0X3ByZXNldF9zZXRfbWV0YSk6Ci0JICBBZGQgU2luY2U6IG1hcmtlcnMgdG8gZG9jcyBibHVyYnMuCi0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIHJlY2VudGx5LWFkZGVkIEFQSS4KLQotMjAwOC0wNS0yNyAxNToxMTozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JICBjb25maWd1cmUuYWM6IEFkZCBEQVRBRElSIGZvciBzdG9yaW5nIHByZXNldHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBBZGQgREFUQURJUiBmb3Igc3RvcmluZyBwcmVzZXRzLgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46Ci0JICBBZGQgR3N0UHJlc2V0IHRvIGRvY3MuCi0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdC5oOgotCSAgKiBnc3QvZ3N0cHJlc2V0LmM6IChwcmVzZXRfZ2V0X3BhdGhzKSwgKHByZXNldF9za2lwX3Byb3BlcnR5KSwKLQkgIChwcmVzZXRfb3Blbl9hbmRfcGFyc2VfaGVhZGVyKSwgKHByZXNldF9wYXJzZV92ZXJzaW9uKSwKLQkgIChwcmVzZXRfbWVyZ2UpLCAocHJlc2V0X2dldF9rZXlmaWxlKSwKLQkgIChnc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X3ByZXNldF9uYW1lcyksCi0JICAoZ3N0X3ByZXNldF9kZWZhdWx0X2dldF9wcm9wZXJ0eV9uYW1lcyksCi0JICAoZ3N0X3ByZXNldF9kZWZhdWx0X2xvYWRfcHJlc2V0KSwKLQkgIChnc3RfcHJlc2V0X2RlZmF1bHRfc2F2ZV9wcmVzZXRzX2ZpbGUpLAotCSAgKGdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldCksCi0JICAoZ3N0X3ByZXNldF9kZWZhdWx0X3JlbmFtZV9wcmVzZXQpLAotCSAgKGdzdF9wcmVzZXRfZGVmYXVsdF9kZWxldGVfcHJlc2V0KSwgKGdzdF9wcmVzZXRfZGVmYXVsdF9zZXRfbWV0YSksCi0JICAoZ3N0X3ByZXNldF9kZWZhdWx0X2dldF9tZXRhKSwgKGdzdF9wcmVzZXRfZGVmYXVsdF9yYW5kb21pemUpLAotCSAgKGdzdF9wcmVzZXRfZGVmYXVsdF9yZXNldCksIChnc3RfcHJlc2V0X2dldF9wcmVzZXRfbmFtZXMpLAotCSAgKGdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzKSwgKGdzdF9wcmVzZXRfbG9hZF9wcmVzZXQpLAotCSAgKGdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQpLCAoZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0KSwKLQkgIChnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQpLCAoZ3N0X3ByZXNldF9zZXRfbWV0YSksCi0JICAoZ3N0X3ByZXNldF9nZXRfbWV0YSksIChnc3RfcHJlc2V0X2NsYXNzX2luaXQpLAotCSAgKGdzdF9wcmVzZXRfYmFzZV9pbml0KSwgKGdzdF9wcmVzZXRfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0cHJlc2V0Lmg6Ci0JICBBZGQgR3N0UHJlc2V0IHRvIGNvcmUuIEZpeGVzICMzOTY3NzkKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwcmVzZXQuYzogKGdzdF9wcmVzZXRfdGVzdF9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9wcmVzZXRfdGVzdF9zZXRfcHJvcGVydHkpLCAoZ3N0X3ByZXNldF90ZXN0X2NsYXNzX2luaXQpLAotCSAgKGdzdF9wcmVzZXRfdGVzdF9iYXNlX2luaXQpLCAoZ3N0X3ByZXNldF90ZXN0X2dldF90eXBlKSwKLQkgIChnc3RfcHJlc2V0X3Rlc3RfcGx1Z2luX2luaXQpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHJlbW92ZV9wcmVzZXRfZmlsZSksICh0ZXN0X3NldHVwKSwgKHRlc3RfdGVhcmRvd24pLAotCSAgKGdzdF9wcmVzZXRfc3VpdGUpOgotCSAgQWRkIEdzdFByZXNldCB1bml0IHRlc3RzLgotCi0yMDA4LTA1LTI3IDEwOjU5OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IFRoZSBkZWZhdWx0IGV2ZW50IGZ1bmN0aW9uIG9uIGEgc2lua3BhZCBzaG91bGQgcmV0dXJuIFRSVUUgd2hlbiB0aGVyZSBhcmUgbm8gaW50ZXJuYWwgbGlua3MgYnV0IHNob3VsZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2V2ZW50X2RlZmF1bHRfZGlzcGF0Y2gpOgotCSAgVGhlIGRlZmF1bHQgZXZlbnQgZnVuY3Rpb24gb24gYSBzaW5rcGFkIHNob3VsZCByZXR1cm4gVFJVRSB3aGVuCi0JICB0aGVyZSBhcmUgbm8gaW50ZXJuYWwgbGlua3MgYnV0IHNob3VsZCBjb2xsZWN0IHRoZSByZXR1cm4gdmFsdWVzIGZyb20KLQkgIHRoZSBpbnRlcm5hbCBsaW5rcyBvdGhlcndpc2UuCi0KLTIwMDgtMDUtMjcgMTA6NTc6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IFVzZSBmYXN0ZXIgYW5kIHNhZmVyIF9wYWRfcHVzaF9ldmVudCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NyY19ldmVudCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCk6Ci0JICBVc2UgZmFzdGVyIGFuZCBzYWZlciBfcGFkX3B1c2hfZXZlbnQoKS4KLQotMjAwOC0wNS0yNyAxMDo1MDo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQVBJOiBhZGQgZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZCgpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChlbGVtZW50X2ZpbmRfdW5saW5rZWRfcGFkKSwKLQkgIChnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkKSwgKGdzdF9iaW5fZmluZF91bmNvbm5lY3RlZF9wYWQpLAotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFQSTogYWRkIGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoKQotCSAgQVBJOiBkZXByZWNhdGUgZ3N0X2Jpbl9maW5kX3VuY29ubmVjdGVkX3BhZCgpICgjNDAxNDU2KQotCi0yMDA4LTA1LTI2IDEwOjA3OjA5ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgZ3N0LzogRml4ZWQgYSBidW5jaCBvZiB0eXBvcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzoKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICAqIGdzdC9nc3R0YXNrLmM6Ci0JICAqIGdzdC9nc3R0YXNrLmg6Ci0JICBGaXhlZCBhIGJ1bmNoIG9mIHR5cG9zLgotCi0yMDA4LTA1LTI1IDE2OjM0OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiAndW5jb25uZWN0ZWQgcGFkJyAtPiAndW5saW5rZWQgcGFkJyBmb3IgY29uc2lzdGVuY3kgKCM0MDE0NTYpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF91bmxpbmspLCAoZWxlbWVudF9maW5kX3VubGlua2VkX3BhZCksCi0JICAoZ3N0X2Jpbl9maW5kX3VuY29ubmVjdGVkX3BhZCksIChnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24pLAotCSAgKGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsKToKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICAndW5jb25uZWN0ZWQgcGFkJyAtPiAndW5saW5rZWQgcGFkJyBmb3IgY29uc2lzdGVuY3kgKCM0MDE0NTYpLgotCi0yMDA4LTA1LTI1IDE2OjEzOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3B3Zy9hZHZhbmNlZC10YWdnaW5nLnhtbDogU21hbGwgZG9jcyB1cGRhdGUsIGNhbid0IGJlIGJvdGhlcmVkIHRvIHJld3JpdGUgdGhlIG5vbnNlbnNpY2FsIGV4YW1wbGVzIHJpZ2h0IG5vdy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC10YWdnaW5nLnhtbDoKLQkgIFNtYWxsIGRvY3MgdXBkYXRlLCBjYW4ndCBiZSBib3RoZXJlZCB0byByZXdyaXRlIHRoZSBub25zZW5zaWNhbAotCSAgZXhhbXBsZXMgcmlnaHQgbm93LgotCi0yMDA4LTA1LTI1IDE0OjQ0OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0ZXZlbnQuaDogQ2xhcmlmeSBkb2NzIGZvciBHU1RfU0VFS19UWVBFX0NVUiAoIzUzNDUwNSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBDbGFyaWZ5IGRvY3MgZm9yIEdTVF9TRUVLX1RZUEVfQ1VSICgjNTM0NTA1KS4KLQotMjAwOC0wNS0yNSAxNDoxMzoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3BhcnNlL2dyYW1tYXIueTogUmVtb3ZlIHVubmVlZGVkIGNhc3RzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBSZW1vdmUgdW5uZWVkZWQgY2FzdHMuCi0KLTIwMDgtMDUtMjUgMTM6NTY6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEdldCBhbGwgbWlzc2luZyBlbGVtZW50cyBmcm9tIGEgcGFyc2UgbGF1bmNoIHN0cmluZyBpZiBwb3NzaWJsZSAoaWUuIGlmIHRoZSBGQVRBTF9FUlJPUlMgZmxhZyBoYXMgYmVlbiBzcGVjaWZpZWQpLiBGaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIEdldCBhbGwgbWlzc2luZyBlbGVtZW50cyBmcm9tIGEgcGFyc2UgbGF1bmNoIHN0cmluZyBpZiBwb3NzaWJsZQotCSAgKGllLiBpZiB0aGUgRkFUQUxfRVJST1JTIGZsYWcgaGFzIGJlZW4gc3BlY2lmaWVkKS4gRml4ZXMgIzUyODE3OC4KLQotMjAwOC0wNS0yNCAxNjozODoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgc29tZSB1bml0IHRlc3RzIGZvciB0aGUgbmV3IGdzdF9wYXJzZV9sYXVuY2gqX2Z1bGwoKSBBUEkuIChFeHBvc2VzIGEgcHJldmlvdXNseS1leGlzdGluZyBtZW1vcnkgbGVhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIEFkZCBzb21lIHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgZ3N0X3BhcnNlX2xhdW5jaCpfZnVsbCgpIEFQSS4KLQkgIChFeHBvc2VzIGEgcHJldmlvdXNseS1leGlzdGluZyBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgY29kZQotCSAgcGF0aCwgc28gYWRkaW5nIHRvIFZBTEdSSU5EX1RPX0ZJWCBmb3Igbm93KS4KLQotMjAwOC0wNS0yNCAxNTozMzo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQVBJOiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwoKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6Ci0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOiAoX0dzdFBhcnNlQ29udGV4dCk6Ci0JICAqIGdzdC9nc3RwYXJzZS5jOiAoZ3N0X3BhcnNlX2Vycm9yX3F1YXJrKSwgKGdzdF9wYXJzZV9jb250ZXh0X25ldyksCi0JICAoZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSksIChnc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cyksCi0JICAoZ3N0X3BhcnNlX2xhdW5jaHYpLCAoZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCksIChnc3RfcGFyc2VfbGF1bmNoKSwKLQkgIChnc3RfcGFyc2VfbGF1bmNoX2Z1bGwpOgotCSAgKiBnc3QvZ3N0cGFyc2UuaDogKEdTVF9QQVJTRV9GTEFHX05PTkUpLCAoR1NUX1BBUlNFX0ZMQUdfRkFUQUxfRVJST1JTKSwKLQkgIChHc3RQYXJzZUZsYWdzKSwgKEdzdFBhcnNlQ29udGV4dCk6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKSwKLQkgIChnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbCk6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgKiBnc3QvcGFyc2UvdHlwZXMuaDoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgbmV3IGdzdF9wYXJzZV8qX2Z1bGwgQVBJICgjNTI4MTc4KToKLQkgIEFQSTogZ3N0X3BhcnNlX2xhdW5jaF9mdWxsKCkKLQkgIEFQSTogZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCgpCi0JICBBUEk6IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsKCkKLQkgIEFQSTogZ3N0X3BhcnNlX2NvbnRleHRfbmV3KCkKLQkgIEFQSTogZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSgpCi0JICBBUEk6IGdzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzKCkKLQotMjAwOC0wNS0yMyAwNjo1MDoxMCArMDAwMCAgU3VyZXNoIEt1bWFyIFAgPHN1cmVzaGt1bWFyLnBwQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBBbHNvIHN1cHBvcnQgZmZtcGVnIGluIGdzdC11bmluc3RhbGxlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6IFN1cmVzaCBLdW1hciBQIDxzdXJlc2hrdW1hci5wcEBnbWFpbC5jb20+Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIEFsc28gc3VwcG9ydCBmZm1wZWcgaW4gZ3N0LXVuaW5zdGFsbGVkLgotCi0yMDA4LTA1LTIyIDIwOjI5OjIwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQWZ0ZXIgZGlzY3Vzc2lvbiBvbiBJUkMgdXNlIHRoZSBiaW5hcnkgcmVnaXN0cnkgYXMgZGVmYXVsdCBidXQgYWxsb3cgdG8gZGlzYWJsZSBpdCB3aXRoIC0tZGlzYWJsZS1iaW5hci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEFmdGVyIGRpc2N1c3Npb24gb24gSVJDIHVzZSB0aGUgYmluYXJ5IHJlZ2lzdHJ5IGFzIGRlZmF1bHQKLQkgIGJ1dCBhbGxvdyB0byBkaXNhYmxlIGl0IHdpdGggLS1kaXNhYmxlLWJpbmFyeS1yZWdpc3RyeS4KLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgdGhlIHR3byBuZXcgc3ltYm9scyBmb3IgdGhlIGJpbmFyeSByZWdpc3RyeS4KLQotMjAwOC0wNS0yMiAxNTozODo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogTW9yZSBndWFyZHMgYWdhaW5zdCBiYWQgaW5wdXQ7IHR5cG8gZml4OyBzb21lIG1pbm9yIGNsZWFuLXVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFyc2UuYzogKF9nc3RfcGFyc2VfZXNjYXBlKSwgKGdzdF9wYXJzZV9sYXVuY2h2KToKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24pOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OiAoZ3JhcGgpOgotCSAgTW9yZSBndWFyZHMgYWdhaW5zdCBiYWQgaW5wdXQ7IHR5cG8gZml4OyBzb21lIG1pbm9yIGNsZWFuLXVwcy4KLQotMjAwOC0wNS0yMiAwODozMzoyNyArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IElmIG5vdGhpbmcgZWxzZSBjYW4gYmUgdXNlZCwgdXNlIHRoZSBsYXN0IGJ1ZmZlcidzIHN0YXJ0IHRpbWUgYXMgdGhlIHNlZ21lbnQncyBsYXN0IHN0b3AuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpOgotCSAgSWYgbm90aGluZyBlbHNlIGNhbiBiZSB1c2VkLCB1c2UgdGhlIGxhc3QgYnVmZmVyJ3Mgc3RhcnQgdGltZSBhcwotCSAgdGhlIHNlZ21lbnQncyBsYXN0IHN0b3AuIEZpeGVzIGJ1ZyAjNTM0MjU4LgotCi0yMDA4LTA1LTIxIDE4OjMzOjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGFkLmM6IE1vdmUgc2l6ZSBzYW5pdHkgY2hlY2sgdG8gdGhlIHJpZ2h0IHBsYWNlOiBkb3duc3RyZWFtIG1heSByZXR1cm4gYSBidWZmZXIgd2l0aCBhIHNtYWxsZXIgc2l6ZSBpZiB0aGUgYnUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlcl9mdWxsKToKLQkgIE1vdmUgc2l6ZSBzYW5pdHkgY2hlY2sgdG8gdGhlIHJpZ2h0IHBsYWNlOiBkb3duc3RyZWFtIG1heSByZXR1cm4KLQkgIGEgYnVmZmVyIHdpdGggYSBzbWFsbGVyIHNpemUgaWYgdGhlIGJ1ZmZlciBjYXBzIGFyZSBkaWZmZXJlbnQgdGhhbgotCSAgdGhlIHJlcXVlc3RlZCBvbmVzLCBhcyBtYXkgaGFwcGVuIHdoZW4gZG9pbmcgcmV2ZXJzZSBuZWdvdGlhdGlvbi4KLQotMjAwOC0wNS0yMSAxNjowNjo1MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IFNtYWxsIGNsZWFudXBzLiBBZGQgbm90ZSBhZGJvdXQgZ19mb3BlbigpIG9uIHdpbmRvd3MgYW5kIHdoeSB3ZSBkb24ndCB1c2UgaXQgeWV0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3Npbmtfc2V0X2xvY2F0aW9uKSwKLQkgIChnc3RfZmlsZV9zaW5rX3JlbmRlcik6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX3NldF9sb2NhdGlvbiksCi0JICAoZ3N0X2ZpbGVfc3JjX3N0YXJ0KToKLQkgIFNtYWxsIGNsZWFudXBzLiBBZGQgbm90ZSBhZGJvdXQgZ19mb3BlbigpIG9uIHdpbmRvd3MgYW5kIHdoeSB3ZSBkb24ndAotCSAgdXNlIGl0IHlldC4KLQotMjAwOC0wNS0yMSAxNTo1Nzo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRG9uJ3QgdXNlIGdzdF9lbGVtZW50X2dldF9wYWQoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2xvYWRfYW5kX2xpbmspOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2xpbmtfcGFkcyksCi0JICAoZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMpOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQpLAotCSAgKGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkKSwgKGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCksCi0JICAoZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkKSwKLQkgIChnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0KToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aXF1ZXVlLmM6IChzZXR1cF9tdWx0aXF1ZXVlKSwKLQkgIChtcV9zaW5rcGFkX3RvX3NyY3BhZCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAocnVuX2RlbGF5ZWRfdGVzdCksCi0JICAoZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgdXNlIGdzdF9lbGVtZW50X2dldF9wYWQoKS4KLQotMjAwOC0wNS0yMSAxNTo1NDoyOCArMDAwMCAgRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlLmNvbnRyZXJhc0Bub2tpYS5jb20+Ci0KLQkgIGRvY3MvTWFrZWZpbGUuYW06IEZpeCBpbnN0YWxsaW5nIHBsdWdpbiBkb2N1bWVudGF0aW9uIHdoZW4gZ3RrLWRvYyBpcyBkaXNhYmxlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL01ha2VmaWxlLmFtOgotCSAgRml4IGluc3RhbGxpbmcgcGx1Z2luIGRvY3VtZW50YXRpb24gd2hlbiBndGstZG9jIGlzIGRpc2FibGVkLgotCi0yMDA4LTA1LTIxIDE1OjUxOjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL21hbnVhbC86IEF2b2lkIHVzaW5nIGEgYmFkIGZ1bmN0aW9uIGluIHRoZSBleGFtcGxlIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC1jb21wb25lbnRzLnhtbDoKLQkgIEF2b2lkIHVzaW5nIGEgYmFkIGZ1bmN0aW9uIGluIHRoZSBleGFtcGxlIGNvZGUuCi0KLTIwMDgtMDUtMjEgMTU6NDk6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjbG9jay5jOiBGaXggZGVidWcgb2YgdGhlIG5ldyBjbG9jayByYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbik6Ci0JICBGaXggZGVidWcgb2YgdGhlIG5ldyBjbG9jayByYXRlLgotCi0yMDA4LTA1LTIxIDExOjEwOjMyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjogQWRkIGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jaygpIHRvIHRoZSBleHBvcnRlZCBzeW1ib2xzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIEFkZCBnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2soKSB0byB0aGUgZXhwb3J0ZWQgc3ltYm9scy4KLQotMjAwOC0wNS0yMCAwODoyODoyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBVbnJlZiBldmVudHMgdGhhdCB0aGUgR3N0QmFzZVRyYW5zZm9ybTo6ZXZlbnQgdmZ1bmMgZGlkbid0IHdhbnQgdG8gaGF2ZSBmb3J3YXJkZWQgYi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbS5tdWxsZXIgYXQgY29sbGFib3JhIGNvIHVrPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudCk6Ci0JICBVbnJlZiBldmVudHMgdGhhdCB0aGUgR3N0QmFzZVRyYW5zZm9ybTo6ZXZlbnQgdmZ1bmMgZGlkbid0IHdhbnQgdG8KLQkgIGhhdmUgZm9yd2FyZGVkIGJ5IHRoZSBiYXNlIGNsYXNzLiBDbG9zZXMgYSBsZWFrIGluIGlkZW50aXR5LgotCSAgRml4ZXMgYnVnICM0NDY3NjMuCi0KLTIwMDgtMDUtMTkgMTY6MzY6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEV4cG9zZSBhIG1ldGhvZCB0aGF0IHdhcyBwcmV2aW91c2x5IHVzZWQgaW50ZXJuYWxseSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZSBjbG9jayBiZWNhdXNlIGl0IGNhbiBiZSB1c2VmdWwgZm9yIHN1Yi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEV4cG9zZSBhIG1ldGhvZCB0aGF0IHdhcyBwcmV2aW91c2x5IHVzZWQgaW50ZXJuYWxseSB0byBzeW5jaHJvbml6ZQotCSAgYWdhaW5zdCB0aGUgY2xvY2sgYmVjYXVzZSBpdCBjYW4gYmUgdXNlZnVsIGZvciBzdWJjbGFzc2VzIHRvby4KLQkgIEdzdEJhc2VTaW5rOjpnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2soKQotCi0yMDA4LTA1LTE5IDExOjU5OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGFkLmM6IEFkZCBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBzbWFsbGVyIGJ1ZmZlcnMgdGhhbiByZXF1ZXN0ZWQgKGFuZCBmYWxsYmFjayB0byBub3JtYWwgYnVmZmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2J1ZmZlcl9hbGxvY191bmNoZWNrZWQpOgotCSAgQWRkIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHNtYWxsZXIgYnVmZmVycwotCSAgdGhhbiByZXF1ZXN0ZWQgKGFuZCBmYWxsYmFjayB0byBub3JtYWwgYnVmZmVyIGFsbG9jIGlmIHdlIGRvKS4KLQotMjAwOC0wNS0xOSAxMToxMTo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBSZWZhY3RvciBhZGp1c3RpbmcgdGhlIHJ1bm5pbmdfdGltZSB3aXRoIGxhdGVuY3kgYW5kIG9mZnNldCBpbnRvIGEgc2VwYXJhdGUgbWV0aG9kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfYWRqdXN0X3RpbWUpLAotCSAgKGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayksIChnc3RfYmFzZV9zaW5rX3dhaXRfZW9zKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCk6Ci0JICBSZWZhY3RvciBhZGp1c3RpbmcgdGhlIHJ1bm5pbmdfdGltZSB3aXRoIGxhdGVuY3kgYW5kIG9mZnNldCBpbnRvIGEKLQkgIHNlcGFyYXRlIG1ldGhvZC4KLQkgIFdoZW4gZG9pbmcgY2xpcHBpbmcsIHdlIHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBzdWJjbGFzcyBnZXRfdGltZXMgbWV0aG9kLAotCSAganVzdCBpbiBjYXNlIHRoZSBEVVJBVElPTiBvciBUSU1FU1RBTVAgYXJlIG5vdCBzZXQuCi0KLTIwMDgtMDUtMTkgMTA6NDY6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGUoKSwgIzUzMzc0MC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzogKGdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGUpOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuaDoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBUEk6IGFkZCBnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlKCksICM1MzM3NDAuCi0KLTIwMDgtMDUtMTkgMTA6Mjk6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBVc2UgcmlnaHQgZXJyb3IgY29kZSB3aGVuIHR5cGVmaW5kaW5nIGZhaWxzLCBzbyB3ZSBjYW4gdXNlIHRoZSBkZWZhdWx0ICh0cmFuc2xhdGVkKSBlcnJvci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KToKLQkgIFVzZSByaWdodCBlcnJvciBjb2RlIHdoZW4gdHlwZWZpbmRpbmcgZmFpbHMsIHNvIHdlIGNhbiB1c2UKLQkgIHRoZSBkZWZhdWx0ICh0cmFuc2xhdGVkKSBlcnJvciBtZXNzYWdlcy4KLQotMjAwOC0wNS0xOSAxMDowMzowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFdoZW4gdGhlIHN1YmNsYXNzIGRpZCBub3Qgc2V0IGNhcHMgb24gb3V0Z29pbmcgYnVmZmVycywgY29uZmlndXJlIHRoZSBjYXBzIHdlIG5lZ290aWF0ZWQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwKLQkgIChnc3RfYmFzZV9zcmNfc3RhcnQpOgotCSAgV2hlbiB0aGUgc3ViY2xhc3MgZGlkIG5vdCBzZXQgY2FwcyBvbiBvdXRnb2luZyBidWZmZXJzLCBjb25maWd1cmUgdGhlCi0JICBjYXBzIHdlIG5lZ290aWF0ZWQgb24gdGhlIHNvdXJjZSBwYWQuCi0JICBXaGVuIHRoZSB0eXBlZmluZCBoZWxwZXIgZG9lcyBub3QgZmluZCBjYXBzLCBlcnJvciBvdXQgcHJvcGVybHkgaW5zdGVhZAotCSAgb2YgZG9pbmcgdGhpbmdzIHdpdGggTlVMTCBjYXBzLgotCi0yMDA4LTA1LTE4IDE4OjUzOjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dHlwZWZpbmQuaDogVGFicyB0byBzcGFjZXMsIG9oIHllcyEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuaDoKLQkgIFRhYnMgdG8gc3BhY2VzLCBvaCB5ZXMhCi0KLTIwMDgtMDUtMTggMTI6MTM6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5Ci0KLTIwMDgtMDUtMTggMTE6NTI6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6IEFkZCBEYXZpZCdzIGFuZCBCZW5qYW1pbidzIHRlc3RzIGZvciBhcnJheSBzdWJ0cmFjdGlvbiB0byB0aGUgdW5pdCB0ZXN0IHN1aXRlLCB3aGljaCBzdWdnZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6ICh0ZXN0X2ludGVyc2VjdDIpLCAoZ3N0X2NhcHNfc3VpdGUpOgotCSAgQWRkIERhdmlkJ3MgYW5kIEJlbmphbWluJ3MgdGVzdHMgZm9yIGFycmF5IHN1YnRyYWN0aW9uIHRvIHRoZQotCSAgdW5pdCB0ZXN0IHN1aXRlLCB3aGljaCBzdWdnZXN0cyB0aGF0ICMxNDc5MzEgaXMgZml4ZWQgdGhlc2UgZGF5cy4KLQotMjAwOC0wNS0xOCAxMTozNTo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGV2ZW50LmM6IERvY3VtZW50IHRoYXQgZ3N0X2V2ZW50X25ld190YWcoKSBhbmQgZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uKCkgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHRhZ2xpc3Qvc3RydWN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGV2ZW50LmM6Ci0JICBEb2N1bWVudCB0aGF0IGdzdF9ldmVudF9uZXdfdGFnKCkgYW5kIGdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbigpCi0JICB0YWtlIG93bmVyc2hpcCBvZiB0aGUgdGFnbGlzdC9zdHJ1Y3R1cmUgcGFzc2VkIHRvIHRoZW0uICgjNTMzNjM1KS4KLQotMjAwOC0wNS0xNyAxNzoyMDo1MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvTWFrZWZpbGUuYW06IERvbid0IGRlc2NlbmQgaW50byB0aGUgcGx1Z2lucyBkaXIgaWYgcGx1Z2luIGRvY3MgYnVpbGRpbmcgaXMgZGlzYWJsZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9NYWtlZmlsZS5hbToKLQkgIERvbid0IGRlc2NlbmQgaW50byB0aGUgcGx1Z2lucyBkaXIgaWYgcGx1Z2luIGRvY3MgYnVpbGRpbmcKLQkgIGlzIGRpc2FibGVkLgotCSAgKiBkb2NzL1JFQURNRToKLQkgIEFkZCBhIG5vdGUgYWJvdXQgdGhlIG5ldyB0eXBlOkdUeXBlTmFtZSBzeW50YXggZm9yIHRoZSBwbHVnaW4KLQkgIGRvY3VtZW50YXRpb24gLnR5cGVzIGZpbGUuCi0KLTIwMDgtMDUtMTcgMTM6NTQ6NTIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdG1lc3NhZ2UuKjogTWFyayB0aGUgZGVidWcgc3RyaW5nIHBhcmFtZXRlcnMgYXMgY29uc3QuIEZpeGVzIGJ1ZyAjNTMzNDkwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfZXJyb3IpLAotCSAgKGdzdF9tZXNzYWdlX25ld193YXJuaW5nKSwgKGdzdF9tZXNzYWdlX25ld19pbmZvKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIE1hcmsgdGhlIGRlYnVnIHN0cmluZyBwYXJhbWV0ZXJzIGFzIGNvbnN0LiBGaXhlcyBidWcgIzUzMzQ5MC4KLQotMjAwOC0wNS0xNiAyMTowOTo0NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IFNvcnQgYnVmZmVyIGNhY2hlIGxpc3QgYnkgZW5kIG9mZnNldHMuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIGRvbid0IHN0b3AgdG8gc2VhcmMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChoZWxwZXJfZmluZF9wZWVrKToKLQkgIFNvcnQgYnVmZmVyIGNhY2hlIGxpc3QgYnkgZW5kIG9mZnNldHMuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIGRvbid0Ci0JICBzdG9wIHRvIHNlYXJjaCBmb3IgYSBjYWNoZWQgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIHJlcXVlc3RlZCBkYXRhCi0JICB0b28gZWFybHkuCi0JICBBbHNvIHJlYWQgYSBtaW5pbXVtIG9mIDRrIGJ5dGVzIGluc3RlYWQgb2YgNTEyIGJ5dGVzIGFzIHRoaXMgaXMgYSBiaXQKLQkgIG1vcmUgZWZmaWNpZW50LiBGaXhlcyBidWcgIzQ1OTg2Mi4KLQotMjAwOC0wNS0xNCAxODoxNzozNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0aW5mby5jOiBFeHBsYWluIHdoeSB3ZSBjb3B5IHRoZSBsaXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6Ci0JICBFeHBsYWluIHdoeSB3ZSBjb3B5IHRoZSBsaXN0LgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIEltcHJvdmUgZG9jcy4KLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICBBZGQgb25lIGRlYnVnLWxvZyBzdGF0ZW1lbnQgdG8gaGVscCB0cmFjaW5nIHByb2JlbG1zIHdpdGggbGlua2luZyBwYWRzLgotCi0yMDA4LTA1LTE0IDE4OjA5OjAxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6IEFkZCBhIHRlc3QgZm9yIHJlbW92aW5nIHRoZSBkZWZhdWx0IGxvZyBoYW5kbGVyLiBTZWVtcyB0byBmYWlsIHVuZGVyIHdpbmRvd3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzoKLQkgIEFkZCBhIHRlc3QgZm9yIHJlbW92aW5nIHRoZSBkZWZhdWx0IGxvZyBoYW5kbGVyLiBTZWVtcyB0byBmYWlsIHVuZGVyCi0JICB3aW5kb3dzLgotCi0yMDA4LTA1LTE0IDEzOjUyOjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IFJlbGVhc2UgcGFkIGxvY2sgYmVmb3JlIGNhbGxpbmcgb3V0IHRvIGF2b2lkIGEgcG9zc2libGUgZGVhZGxvY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzKToKLQkgIFJlbGVhc2UgcGFkIGxvY2sgYmVmb3JlIGNhbGxpbmcgb3V0IHRvIGF2b2lkIGEgcG9zc2libGUgZGVhZGxvY2suCi0KLTIwMDgtMDUtMTQgMTA6MjI6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9wYXJzZS9ncmFtbWFyLnk6IFJlbW92ZSB1bm5lZWRlZCB2YWx1ZSB1bnNldC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgUmVtb3ZlIHVubmVlZGVkIHZhbHVlIHVuc2V0LgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF92YWx1ZV9zdWl0ZSk6Ci0JICBBZGQgdW5pdCB0ZXN0IGZvciBkZS9zZXJpYWxpemF0aW9uIG9mIGNhcHMuCi0KLTIwMDgtMDUtMTMgMTI6NTQ6MDAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IFVzZSBjdXN0b20gbWFyc2hhbGVycyB0aGF0IHRha2UgR3N0TWluaU9iamVjdCBhcyBmaXJzdCBwYXJhbWV0ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgKG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVF9PQkpFQ1QpLCAoZ3N0X2Zha2Vfc2lua19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1RfT0JKRUNUKSwKLQkgIChnc3RfZmFrZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICBVc2UgY3VzdG9tIG1hcnNoYWxlcnMgdGhhdCB0YWtlIEdzdE1pbmlPYmplY3QgYXMgZmlyc3QgcGFyYW1ldGVyLgotCSAgVXNpbmcgT0JKRUNUIGFzIHBhcmFtZXRlciB3aGlsZSBhIEdzdE1pbmlPYmplY3QgaXMgZ2l2ZW4gd2lsbCBsZWFkCi0JICB0byBhc3NlcnRpb25zIGlmIGJ1aWx0IHdpdGggR19FTkFCTEVfREVCVUcuIEZpeGVzIGJ1ZyAjNTI1NTMyLgotCi0yMDA4LTA1LTEzIDEyOjM4OjMxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IENsZWFuIHVwIG9uIEZMVVNIX1NUT1AgYW5kIG5vdCBGTFVTSF9TVEFSVC4gRm9yd2FyZCBib3RoIGV2ZW50cyBpbW1lZGlhdGVseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zZW5kX2NhY2hlZF9ldmVudHMpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgotCSAgQ2xlYW4gdXAgb24gRkxVU0hfU1RPUCBhbmQgbm90IEZMVVNIX1NUQVJULiBGb3J3YXJkIGJvdGggZXZlbnRzCi0JICBpbW1lZGlhdGVseS4KLQotMjAwOC0wNS0xMyAxMTo0NToyNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBGb3J3YXJkIEZMVVNIX1NUQVJUIGV2ZW50cyBpbW1lZGlhdGVseSBhbmQgY2xlYW4gdXAgaW5zdGVhZCBvZiBjYWNoaW5nIHRoZW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2hhbmRsZV9zcmNfcXVlcnkpLCAoc3RvcF90eXBlZmluZGluZyksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NlbmRfY2FjaGVkX2V2ZW50cyksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JICBGb3J3YXJkIEZMVVNIX1NUQVJUIGV2ZW50cyBpbW1lZGlhdGVseSBhbmQgY2xlYW4gdXAgaW5zdGVhZCBvZgotCSAgY2FjaGluZyB0aGVtLgotCi0yMDA4LTA1LTEzIDA3OjExOjA1ICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBDaGVjayB0aGUgY2FwcyBvZiB0aGUgYnVmZmVyIHJldHVybmVkIGJ5IGdzdF9wYWRfYWxsb2NfYnVmZmVyKCkgYW5kIGZhbGwgYmFjayB0byBkZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gZG90IG5ldD4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICBDaGVjayB0aGUgY2FwcyBvZiB0aGUgYnVmZmVyIHJldHVybmVkIGJ5IGdzdF9wYWRfYWxsb2NfYnVmZmVyKCkgYW5kCi0JICBmYWxsIGJhY2sgdG8gZGVmYXVsdCBuZWdvdGlhdGlvbiBpbiB0aGUgY2hhaW4gZnVuY3Rpb24gaWYgdGhlIGNhcHMKLQkgIGFyZSBkaWZmZXJlbnQgZnJvbSB3aGF0IHdhcyByZXF1ZXN0ZWQuIEZpeGVzIGJ1ZyAjNTI2NzY4LgotCi0yMDA4LTA1LTA5IDIwOjQ4OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBObywgbGV0J3Mgbm90IHVzZSBnX3NsaWNlX3tkdXB8Y29weX0gaGVyZSwgc2luY2UgdGhleSBvbmx5IGV4aXN0IHNpbmNlIEdMaWIgMi4xNCBhbmQgd2Ugc3RpbGwgZGVwZW5kIG9ubHkgb24gPj0gMi4xMi4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgotCSAgTm8sIGxldCdzIG5vdCB1c2UgZ19zbGljZV97ZHVwfGNvcHl9IGhlcmUsIHNpbmNlIHRoZXkgb25seSBleGlzdAotCSAgc2luY2UgR0xpYiAyLjE0IGFuZCB3ZSBzdGlsbCBkZXBlbmQgb25seSBvbiA+PSAyLjEyLiBBbHNvIGFkZAotCSAgdW5pdCB0ZXN0IGZvciBnc3Rfc2VnbWVudF9jb3B5KCkuCi0KLTIwMDgtMDUtMDkgMTg6MjU6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R1dGlscy5oOiBUcnkgdG8gZml4ICdkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QgYWxpYXNpbmcgcnVsZXMnIHdhcm5pbmdzIHdpdGggQysrIGNvbS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5oOiAoR1NUX0JPSUxFUlBMQVRFX0ZVTEwpOgotCSAgVHJ5IHRvIGZpeCAnZGVyZWZlcmVuY2luZyB0eXBlLXB1bm5lZCBwb2ludGVyIHdpbGwgYnJlYWsgc3RyaWN0Ci0JICBhbGlhc2luZyBydWxlcycgd2FybmluZ3Mgd2l0aCBDKysgY29tcGlsZXJzIGFuZCBHTGliID49IDIuMTQuMDogR0xpYgotCSAgY2hhbmdlZCB0aGUgZGVmYXVsdCBHVHlwZSB0eXBlZGVmIGZyb20gZ3Vsb25nIHRvIGdzaXplIGF0IHNvbWUgcG9pbnQsCi0JICBidXQga2VwdCBHVHlwZSB0eXBlZGVmJ2VkIHRvIGd1bG9uZyBmb3IgQysrIGZvciBBQkkgcmVhc29uczsgdGhlCi0JICBnX29uY2VfKiBmdW5jdGlvbnMgYWxsIHRha2UgYSBnc2l6ZSAqIHRob3VnaCwgc28gd29yayBhcm91bmQgdGhlIHR5cGUKLQkgIG1pc21hdGNoIGZvciBDKysgYnkgZG9pbmcgZXZlcnl0aGluZyBpbiBnc2l6ZSBhbmQgY2FzdGluZyB0byBHVHlwZQotCSAgbGF0ZXIuCi0KLTIwMDgtMDUtMDkgMTQ6MDI6NTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzaWduYWxzIHRvIHB1c2ggb3VyIGNvcmUgcGx1Z2luIGRvY3MgY292ZXJhZ2UgYmFjayB1cCB0byAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIEFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgc2lnbmFscyB0byBwdXNoIG91ciBjb3JlIHBsdWdpbiBkb2NzCi0JICBjb3ZlcmFnZSBiYWNrIHVwIHRvIDEwMCUuCi0KLTIwMDgtMDUtMDggMTQ6MjM6MTYgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIGdzdC9nc3RpbmZvLmggKEdTVF9GVU5DVElPTik6IFJldmVydGVkIEdTVF9GVU5DVElPTiB0byB0aGUgb2xkIHZlcnNpb24gYXMgd2UgZG9uJ3Qgd2FudCB0aGUgZnVsbCBzaWduYXR1cmUgaW4gQysrIGNvZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmggKEdTVF9GVU5DVElPTik6Ci0JICBSZXZlcnRlZCBHU1RfRlVOQ1RJT04gdG8gdGhlIG9sZCB2ZXJzaW9uIGFzIHdlIGRvbid0IHdhbnQgdGhlCi0JICBmdWxsIHNpZ25hdHVyZSBpbiBDKysgY29kZS4gQWxzbyBhZGRlZCBzdXBwb3J0IGZvciBNU1ZDLgotCi0yMDA4LTA1LTA4IDExOjM3OjAzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3R1dGlscy5oOiBJbnRlcm4gdGhlIHR5cGUgbmFtZSBzdHJpbmcsIHNpbWlsYXIgdG8gd2hhdCBHX0RFRklORV9UWVBFIGRvZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBJbnRlcm4gdGhlIHR5cGUgbmFtZSBzdHJpbmcsIHNpbWlsYXIgdG8gd2hhdCBHX0RFRklORV9UWVBFIGRvZXMuCi0KLTIwMDgtMDUtMDggMTE6Mjc6NTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHV0aWxzLmg6IE1ha2UgR1NUX0JPSUxFUlBMQVRFIHRocmVhZC1zYWZlIGlmIGJ1aWxkaW5nIHdpdGggR0xpYiAyLjE0IG9yIG5ld2VyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgTWFrZSBHU1RfQk9JTEVSUExBVEUgdGhyZWFkLXNhZmUgaWYgYnVpbGRpbmcgd2l0aCBHTGliIDIuMTQgb3IgbmV3ZXIuCi0KLTIwMDgtMDUtMDggMDU6NTU6MzQgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IERvbid0IHBhc3N0aHJvdWdoIGJ1ZmZlciBhbGxvY2F0aW9uIHRvbyBlYXNpbHkgaWYgdGhlIGNhcHMgY2hhbmdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBhIHBhdGNoIGJ5OiBTam9lcmQgU2ltb25zIDxzam9lcmQgYXQgbHVvbiBkb3QgbmV0PgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKLQkgIERvbid0IHBhc3N0aHJvdWdoIGJ1ZmZlciBhbGxvY2F0aW9uIHRvbyBlYXNpbHkgaWYgdGhlIGNhcHMgY2hhbmdlLgotCSAgVGhpcyBicmVha3Mgd2hlbiB3b3JraW5nIGluIHBhc3N0aHJvdWdoIG1vZGUgYW5kIHVwc3RyZWFtIGNoYW5nZXMKLQkgIGl0J3MgY2Fwcy4gRml4ZXMgYnVnICM1MjY3NjguCi0KLTIwMDgtMDUtMDcgMTk6MjQ6NDQgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIGdzdC9nc3RpbmZvLmMgKGdzdF9kZWJ1Z19sb2dfdmFsaXN0KTogSW1wcm92ZWQgdGhlIF9fRklMRV9fIHBhcnQgb2YgZGVidWcgb3V0cHV0IGZvciBNU1ZDLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmMgKGdzdF9kZWJ1Z19sb2dfdmFsaXN0KToKLQkgIEltcHJvdmVkIHRoZSBfX0ZJTEVfXyBwYXJ0IG9mIGRlYnVnIG91dHB1dCBmb3IgTVNWQy4KLQotMjAwOC0wNS0wNyAxOToxNToxNCArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19kZWZhdWx0X3F1ZXJ5KTogRGVjbGFyYXRpb24gYWZ0ZXIgc3RhdGVtZW50IGZpeCBmb3IgY29tcGlsZXJzIGxpa2UgTVNWQy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpOgotCSAgRGVjbGFyYXRpb24gYWZ0ZXIgc3RhdGVtZW50IGZpeCBmb3IgY29tcGlsZXJzIGxpa2UgTVNWQy4KLQotMjAwOC0wNS0wNyAxOTowOTowOCArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQotCSAgd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOiBEb24ndCBkZWZpbmUgR1NUX0ZVTkNUSU9OLCBpZiBHTGliIHN1cHBvcnRzIE1TVkMgd2UnZCBtdWNoIHJhdGhlciB1c2UgdGhlIHJlYWwgdGhpbmcgdGhhbiBoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgRG9uJ3QgZGVmaW5lIEdTVF9GVU5DVElPTiwgaWYgR0xpYiBzdXBwb3J0cyBNU1ZDIHdlJ2QgbXVjaCByYXRoZXIKLQkgIHVzZSB0aGUgcmVhbCB0aGluZyB0aGFuIGhhdmluZyAiPz8/IiB1bmNvbmRpdGlvbmFsbHkuCi0KLTIwMDgtMDUtMDcgMTg6NTE6MjIgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIGdzdC9nc3RpbmZvLmggKEdTVF9GVU5DVElPTik6IE1hZGUgR1NUX0ZVTkNUSU9OIGFuIGFsaWFzIGZvciBHX1NUUkZVTkMgdG8gYXZvaWQgZHVwbGljYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZm8uaCAoR1NUX0ZVTkNUSU9OKToKLQkgIE1hZGUgR1NUX0ZVTkNUSU9OIGFuIGFsaWFzIGZvciBHX1NUUkZVTkMgdG8gYXZvaWQgZHVwbGljYXRpb24uCi0KLTIwMDgtMDUtMDcgMDk6NDc6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiBTbWFsbCBjb2RlIGNsZWFudXAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6IChnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCk6Ci0JICBTbWFsbCBjb2RlIGNsZWFudXAuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSksCi0JICAoZ3N0X2Jhc2Vfc2lua19zZXRfZmx1c2hpbmcpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspOgotCSAgRml4IHNvbWUgY29tbWVudHMuCi0KLTIwMDgtMDUtMDcgMDk6MzQ6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy4qOiBBZGRlZCBmb3JtYXQgcHJvcGVydHkgdG8gY29udHJvbCB0aGUgZm9ybWF0IG9mIHRoZSBuZXdzZWdtZW50IGV2ZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3RfZmFrZV9zcmNfaW5pdCksIChnc3RfZmFrZV9zcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZmFrZV9zcmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9mYWtlX3NyY19zdGFydCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgotCSAgQWRkZWQgZm9ybWF0IHByb3BlcnR5IHRvIGNvbnRyb2wgdGhlIGZvcm1hdCBvZiB0aGUgbmV3c2VnbWVudCBldmVudHMuCi0JICBBUEk6IEdzdEZha2VTcmM6Zm9ybWF0Ci0KLTIwMDgtMDUtMDYgMDg6NDU6MDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6IEFkZCBnc3RfcGFkX2hhc19uYW1lKCkgdG8gdGhlIGV4cG9ydGVkIHN5bWJvbHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgZ3N0X3BhZF9oYXNfbmFtZSgpIHRvIHRoZSBleHBvcnRlZCBzeW1ib2xzLgotCi0yMDA4LTA1LTA2IDA4OjQzOjU3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIERvbid0IGFsbG93IG5lZ2F0aXZlIHNpemVzIHdoZW4gYWxsb2NhdGluZyBuZXcgYnVmZmVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlcl9mdWxsKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlcik6Ci0JICBEb24ndCBhbGxvdyBuZWdhdGl2ZSBzaXplcyB3aGVuIGFsbG9jYXRpbmcgbmV3IGJ1ZmZlcnMuCi0JICBGaXhlcyBidWcgIzQ2MTI1My4KLQotMjAwOC0wNS0wNSAxNjo0NzoyOSArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JICBnc3QvZ3N0YnVzLmM6IERvbid0IHByaW50IGEgd2FybmluZyBpZiB0aGUgcXVldWUgaXMgZW1wdHkgd2hlbiB3ZSB0cnkgdG8gcG9wIGhlcmUuIFRoYXQgY291bGQgaGFwcGVuIGlmIGFub3RoZXIgdGhyZWEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIG5ldD4KLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19zb3VyY2VfZGlzcGF0Y2gpOgotCSAgRG9uJ3QgcHJpbnQgYSB3YXJuaW5nIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSB3aGVuIHdlIHRyeSB0byBwb3AKLQkgIGhlcmUuIFRoYXQgY291bGQgaGFwcGVuIGlmIGFub3RoZXIgdGhyZWFkIG9yIGNhbGxiYWNrIHNldCB0aGUKLQkgIGJ1cyB0byBmbHVzaGluZyBiZXR3ZWVuIHRoZSBzb3VyY2UncyBjaGVjay9wcmVwYXJlIGFuZCB0aGUKLQkgIGRpc3BhdGNoIGJlaW5nIGNhbGxlZCAoIzUzMTUzOCkuCi0KLTIwMDgtMDUtMDUgMTY6MjU6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBTbWFsbCBkb2NzIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzoKLQkgIFNtYWxsIGRvY3MgZml4LgotCi0yMDA4LTA1LTA1IDE1OjUwOjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiBBZGQgdW5pdCB0ZXN0IGZvciBkZXNlcmlhbGl6aW5nIHVpbnQ2NHMgYW5kIGNoZWNrIHNvbWUgcmVhbGx5IGxhcmdlIG51bWJlcnMgaW4gdGhlIGludDY0IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKLQkgIEFkZCB1bml0IHRlc3QgZm9yIGRlc2VyaWFsaXppbmcgdWludDY0cyBhbmQgY2hlY2sgc29tZSByZWFsbHkgbGFyZ2UKLQkgIG51bWJlcnMgaW4gdGhlIGludDY0IHRlc3QuCi0KLTIwMDgtMDUtMDQgMTk6MDc6MjEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogVXNlICIlcyIgYXMgZm9ybWF0IHN0cmluZyBpbnN0ZWFkIG9mIHByaW50aW5nIHN0cmluZ3MgZGlyZWN0bHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKG5fcHJpbnQpLCAocHJpbnRfaGllcmFyY2h5KSwKLQkgIChwcmludF9pbnRlcmZhY2VzKSwgKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKSwKLQkgIChwcmludF9zaWduYWxfaW5mbyk6Ci0JICBVc2UgIiVzIiBhcyBmb3JtYXQgc3RyaW5nIGluc3RlYWQgb2YgcHJpbnRpbmcgc3RyaW5ncyBkaXJlY3RseS4KLQotMjAwOC0wNS0wNCAxNDoyNTowNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0Y2xvY2suYzogTWFrZSBzb21lIGNoZWNrcyBhY3R1YWxseSB1c2VmdWwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKToKLQkgIE1ha2Ugc29tZSBjaGVja3MgYWN0dWFsbHkgdXNlZnVsLgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pOgotCSAgUmVtb3ZlIHNvbWUgdW51c2VkIGNvZGUuIFVuc2lnbmVkIGludGVnZXJzIHRlbmQgdG8gYmUgPj0gMC4KLQotMjAwOC0wNS0wMyAxOToyMzo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogRml4ICdTaW5jZTonIHZlcnNpb24gaW4gZ3N0X3ZhbHVlX2R1cF9taW5pX29iamVjdCgpIGRvY3MgYmx1cmI6IHRoaXMgZnVuY3Rpb24gd2FzIG5vdCBpbiB0aGUgdW5zLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF92YWx1ZV9nZXRfbWluaV9vYmplY3QpOgotCSAgRml4ICdTaW5jZTonIHZlcnNpb24gaW4gZ3N0X3ZhbHVlX2R1cF9taW5pX29iamVjdCgpIGRvY3MgYmx1cmI6IHRoaXMKLQkgIGZ1bmN0aW9uIHdhcyBub3QgaW4gdGhlIHVuc2NoZWR1bGVkIDAuMTAuMTkgcmVsZWFzZS4KLQotMjAwOC0wNS0wMyAxOToxMzo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5LmM6IE9ubHkgcHJpbnQgb25lIGxvZyBtZXNzYWdlIHBlciBub24tcGx1Z2luIGZpbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKToKLQkgIE9ubHkgcHJpbnQgb25lIGxvZyBtZXNzYWdlIHBlciBub24tcGx1Z2luIGZpbGUuCi0KLTIwMDgtMDUtMDMgMTk6MDg6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmZvLmM6IEZpeCBhbGlnbm1lbnQgb2YgZGVidWcgbG9nIGNvbHVtbnMgb24gNjQtYml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6IChnc3RfZGVidWdfbG9nX2RlZmF1bHQpOgotCSAgRml4IGFsaWdubWVudCBvZiBkZWJ1ZyBsb2cgY29sdW1ucyBvbiA2NC1iaXQuCi0KLTIwMDgtMDUtMDMgMTY6NTI6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbGlicy86IElnbm9yZSBwcml2YXRlIGNvbnRyb2xsZXIgaGVhZGVycyBmb3IgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBJZ25vcmUgcHJpdmF0ZSBjb250cm9sbGVyIGhlYWRlcnMgZm9yIGRvY3MuCi0KLTIwMDgtMDUtMDMgMTU6MjU6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci86IE1vdmUgc29tZSBwcml2YXRlIGRlY2xhcmF0aW9ucyBpbnRvIHByaXZhdGUgaGVhZGVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2Vwcml2YXRlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvbGliLmM6Ci0JICBNb3ZlIHNvbWUgcHJpdmF0ZSBkZWNsYXJhdGlvbnMgaW50byBwcml2YXRlIGhlYWRlcnMuCi0KLTIwMDgtMDUtMDIgMTA6MTI6MzMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdGRlYnVndXRpbHMuYzogUmVtb3ZlIHNvbWUgY29kZSB0aGF0IGlzIHVudXNlZCBhZnRlciBTdGVmYW4ncyByZWZhY3RvcmluZyBhbmQgdXNlcyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBub3csLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzogKGRlYnVnX2R1bXBfZWxlbWVudF9wYWQpOgotCSAgUmVtb3ZlIHNvbWUgY29kZSB0aGF0IGlzIHVudXNlZCBhZnRlciBTdGVmYW4ncyByZWZhY3RvcmluZyBhbmQgdXNlcwotCSAgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgbm93LCByZXN1bHRpbmcgaW4gYSBjb21waWxlciB3YXJuaW5nLgotCi0yMDA4LTA1LTAxIDEzOjAzOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnkuYzogUnVuIGdfc3RyX2hhc19zdWZmaXgoKSBvbmx5IG9uIHRoZSBmaWxlIG5hbWUsIG5vdCB0aGUgZW50aXJlIGZpbGUgcGF0aC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOgotCSAgUnVuIGdfc3RyX2hhc19zdWZmaXgoKSBvbmx5IG9uIHRoZSBmaWxlIG5hbWUsIG5vdCB0aGUKLQkgIGVudGlyZSBmaWxlIHBhdGguCi0KLTIwMDgtMDQtMzAgMTQ6MjA6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogU2luY2Ugd2UncmUgbm90IGNhbGxlZCBvbmx5IGZyb20gdGhlIGNoYWluIGZ1bmN0aW9uIGFueSBsb25nZXIsIHdlIGNhbid0IGFzc3VtZSB0aGF0IHRoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9sZWFrX2Rvd25zdHJlYW0pOgotCSAgU2luY2Ugd2UncmUgbm90IGNhbGxlZCBvbmx5IGZyb20gdGhlIGNoYWluIGZ1bmN0aW9uIGFueSBsb25nZXIsCi0JICB3ZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGVyZSdzIGFsd2F5cyBkYXRhIGluIHRoZSBxdWV1ZSwgc28gbW92ZQotCSAgdGhlIGlzX2Z1bGwgY2hlY2sgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcCAob3RoZXJ3aXNlIHdlJ2QKLQkgIGhpdCB0aGUgYXNzZXJ0IHdoZW4gY2hhbmdpbmcgdGhlIGxpbWl0IHByb3BlcnRpZXMgd2hpbGUgdGhlCi0JICBxdWV1ZSBpcyBlbXB0eSBvciBub3QgcnVubmluZyB5ZXQpLgotCSAgQWxzbywgb25seSBzZXQgYSBkaXNjb250IGlmIGl0ZW1zIHdlcmUgYWN0dWFsbHkgcmVtb3ZlZCBmcm9tCi0JICB0aGUgcXVldWUuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6ICh0ZXN0X2xlYWt5X2Rvd25zdHJlYW0pOgotCSAgVGVzdCBjYXNlIGZvciB0aGUgYWJvdmUuCi0KLTIwMDgtMDQtMzAgMDk6MzU6NDMgKzAwMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZ0BheGlzLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBXaGVuIGNoYW5naW5nIHRociBtYXggY2FwYWNpdHkgb2YgYSBsZWFreSBxdWV1ZSwgaW1tZWRpYXRseSBkcm9wIGJ1ZmZlcnMgaW5zdGVhZCBvZiB3YWl0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKb25hcyBIb2xtYmVyZyA8am9uYXMgZG90IGhvbG1iZXJnIGF0IGF4aXMgZG90IGNvbT4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2xlYWtfZG93bnN0cmVhbSksCi0JICAoZ3N0X3F1ZXVlX2NoYWluKSwgKHF1ZXVlX2NhcGFjaXR5X2NoYW5nZSksCi0JICAoZ3N0X3F1ZXVlX3NldF9wcm9wZXJ0eSk6Ci0JICBXaGVuIGNoYW5naW5nIHRociBtYXggY2FwYWNpdHkgb2YgYSBsZWFreSBxdWV1ZSwgaW1tZWRpYXRseSBkcm9wIGJ1ZmZlcnMKLQkgIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSBwdXNoIG9uIHRoZSBzaW5rcGFkLiBGaXhlcyAjNTMwNjM3LgotCi0yMDA4LTA0LTMwIDA3OjU2OjM5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6IFJlZmFjdG9yIGNvZGUgYW5kIGZpeCBoYW5kbGluZyBvZiBnaG9zdHBhZHMgYW5kIHRoZWlyIHByb3h5cGFkcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgUmVmYWN0b3IgY29kZSBhbmQgZml4IGhhbmRsaW5nIG9mIGdob3N0cGFkcyBhbmQgdGhlaXIgcHJveHlwYWRzLgotCi0yMDA4LTA0LTI5IDExOjIzOjUxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgbWV0aG9kIHRvIGNvbnZlbmllbnRseSBjaGVjayB0aGUgbmFtZSBvZiBhIGN1c3RvbSBldmVudCB3aXRoIGdzdF9ldmVudF9oYXNfbmFtZSgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X2hhc19uYW1lKToKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWRkIG1ldGhvZCB0byBjb252ZW5pZW50bHkgY2hlY2sgdGhlIG5hbWUgb2YgYSBjdXN0b20gZXZlbnQgd2l0aAotCSAgZ3N0X2V2ZW50X2hhc19uYW1lKCkuCi0JICBSZWZvcm1hdCB0aGUgZXZlbnQgZG9jcyBzbyB0aGF0IHJlbGF0ZWQgbWV0aG9kcyBhcmUgcHV0IHRvZ2V0aGVyIGluc3RlYWQKLQkgIG9mIHRoZSBkZWZhdWx0IGFscGhhYmV0aWNhbCBzb3J0LgotCSAgVXBkYXRlIHVuaXQgdGVzdCB3aXRoIG5ldyBtZXRob2QuCi0JICBBUEk6IEdzdEV2ZW50Ojpnc3RfZXZlbnRfaGFzX25hbWUoKQotCi0yMDA4LTA0LTI4IDE4OjQ0OjQ4ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOiBEb24ndCBhZGQgYW4gZXhwbGljaXQgbGluayB0byBsaWJnc3RyZWFtZXItMC4xMC5sYTsgaXQncyBhbHJlYWR5IGluY2x1ZGVkIGluIEdTVF9PQkpfTElCUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkgIERvbid0IGFkZCBhbiBleHBsaWNpdCBsaW5rIHRvIGxpYmdzdHJlYW1lci0wLjEwLmxhOyBpdCdzIGFscmVhZHkKLQkgIGluY2x1ZGVkIGluIEdTVF9PQkpfTElCUy4KLQotMjAwOC0wNC0yOCAwOToyMTozMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0LmM6IFJlZ2lzdGVyIEdzdENsb2NrIHR5cGUgZnJvbSBhIHR5cGUtc2FmZSBjb250ZXh0LiBGaXhlcyBidWcgIzUzMDMxNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICBSZWdpc3RlciBHc3RDbG9jayB0eXBlIGZyb20gYSB0eXBlLXNhZmUgY29udGV4dC4gRml4ZXMgYnVnICM1MzAzMTcuCi0KLTIwMDgtMDQtMjYgMDA6MTM6MDMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JICB0b29scy9nc3QtcnVuLmM6IEluY2x1ZGUgPHVuaXN0ZC5oPiBjb25kaXRpb25hbGx5IG9uIEhBVkVfVU5JU1REX0ggYXMgZWxzZXdoZXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieSBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQkgICogdG9vbHMvZ3N0LXJ1bi5jOgotCSAgSW5jbHVkZSA8dW5pc3RkLmg+IGNvbmRpdGlvbmFsbHkgb24gSEFWRV9VTklTVERfSCBhcyBlbHNld2hlcmUuCi0KLTIwMDgtMDQtMjUgMTc6NTQ6MjggKzAwMDAgIEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMEBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogVXNlIHRoZSBHTGliIHN0dWZmIHRvIGNyZWF0ZSBhIHByaXZhdGUgc3RydWN0dXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX2luaXQpLAotCSAgKGdzdF9iaW5fZGlzcG9zZSk6Ci0JICBVc2UgdGhlIEdMaWIgc3R1ZmYgdG8gY3JlYXRlIGEgcHJpdmF0ZSBzdHJ1Y3R1cmUuCi0JICBBZGQgc29tZSBsb2NraW5nIGFyb3VuZCBzb21lIGRpc3Bvc2UgbWV0aG9kcyB0byBtYWtlIHRoZW0gYSBsaXR0bGUKLQkgIHNhZmVyLCBzZWUgIzUyOTcyMy4gUGF0Y2ggYnk6IEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMCBhdCBnbWFpbCBkb3QgY29tPgotCi0yMDA4LTA0LTI1IDEzOjIyOjMyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvOiBGaXggZG9jIHR5cG9zIGFuZCB1bmlmeSBjYXBzIGEgYml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICBGaXggZG9jIHR5cG9zIGFuZCB1bmlmeSBjYXBzIGEgYml0LgotCi0yMDA4LTA0LTI1IDEzOjA5OjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbjogRm9yZ290IHRvIGFsc28gYWRkIHRoZSBlbnZ2YXIgZG9jcyBoZXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIEZvcmdvdCB0byBhbHNvIGFkZCB0aGUgZW52dmFyIGRvY3MgaGVyZS4KLQotMjAwOC0wNC0yNSAxMDowMTo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgUmVmIHNvbWUgbW9yZSBjbGFzc2VzIGluIGdzdF9pbml0KCkgdG8gd29yayBhcm91bmQgdGhyZWFkLXNhZmV0eSBpc3N1ZXMgaW4gcHJlLTIuMTYgR0xpYnMsIGFuZCBhZGQgYmFzaWMgdW5pdCB0ZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCksIChnc3RfZGVpbml0KToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IChHU1RfU1RBUlRfVEVTVCksIChwaXBlbGluZV90aHJlYWQpLAotCSAgKHRlc3RfY29uY3VycmVudF9jcmVhdGUpLCAoZ3N0X3BpcGVsaW5lX3N1aXRlKToKLQkgIFJlZiBzb21lIG1vcmUgY2xhc3NlcyBpbiBnc3RfaW5pdCgpIHRvIHdvcmsgYXJvdW5kIHRocmVhZC1zYWZldHkKLQkgIGlzc3VlcyBpbiBwcmUtMi4xNiBHTGlicywgYW5kIGFkZCBiYXNpYyB1bml0IHRlc3QuCi0KLTIwMDgtMDQtMjUgMDc6MjI6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUmVhcnJhbmdlIHRoZSBsYXRlbmN5IHF1ZXJ5IGNvZGUuIFdlIGFsd2F5cyB3YW50IHRvIGRvIHRoZSB1cHN0cmVhbSBxdWVyeSwgZXZlbiBpZiB3ZSBhci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSksCi0JICAoZ3N0X2Jhc2Vfc2lua19zZW5kX2V2ZW50KToKLQkgIFJlYXJyYW5nZSB0aGUgbGF0ZW5jeSBxdWVyeSBjb2RlLiBXZSBhbHdheXMgd2FudCB0byBkbyB0aGUgdXBzdHJlYW0KLQkgIHF1ZXJ5LCBldmVuIGlmIHdlIGFyZSBub3QgbGl2ZSBzbyB0aGF0IHRoZSB1cHN0cmVhbSBlbGVtZW50cyBjYW4gZ2V0IHRoZQotCSAgbGF0ZW5jeSByZXN1bHRzIHRvby4gSWYgd2UgZmFpbCBkb2luZyB0aGUgcXVlcnkgYW5kIHdlIGFyZSBsaXZlLCB3ZQotCSAgcmV0dXJuIFRSVUUgYWZ0ZXJ3YXJkcy4KLQotMjAwOC0wNC0yNCAxNToxNDo1NCArMDAwMCAgSmFzb24gWmhhbyA8ZTM0MjNjQG1vdG9yb2xhLmNvbT4KLQotCSAgRW5hYmxlL2Rpc2FibGUgc2Nhbl9hbmRfdXBkYXRlX3JlZ2lzdHJ5KCkgYmFzZWQgb24gY29tbWFuZGxpbmUgc3dpdGNoIG9yIGVudmlyb25tZW50IHZhcmlhYmxlLiBGaXhlcyAjNTIwNDY4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogSmFzb24gWmhhbyA8ZTM0MjNjQG1vdG9yb2xhLmNvbT4KLQkgICogZG9jcy9nc3QvcnVubmluZy54bWw6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIEVuYWJsZS9kaXNhYmxlIHNjYW5fYW5kX3VwZGF0ZV9yZWdpc3RyeSgpIGJhc2VkIG9uIGNvbW1hbmRsaW5lIHN3aXRjaAotCSAgb3IgZW52aXJvbm1lbnQgdmFyaWFibGUuIEZpeGVzICM1MjA0NjguCi0JICAqIENoYW5nZUxvZzoKLQkgIEZpeCB0eXBvIGluIG15IHByZXZpb3VzIGNvbW1pdC4KLQotMjAwOC0wNC0yNCAwODoyNzo1OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogQWRkIGEgd2FybmluZyBvZiB3ZSBoaXQgdW5oYW5kbGVkIGZhY3RvcmllcyB3aGVuIHNhdmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIEFkZCBhIHdhcm5pbmcgb2Ygd2UgaGl0IHVuaGFuZGxlZCBmYWN0b3JpZXMgd2hlbiBzYXZpbmcuCi0JICBNb3JlIGRlYnVnIGxvZ2dpbmcgZGV0YWlsLCBidXQgbW92ZSB0byBMT0cgY2F0ZWdvcnkuCi0KLTIwMDgtMDQtMjQgMDY6NDY6NTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5LmM6IFRlbGwgdGhlICp0cnV0aCogd2hlbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBUZWxsIHRoZSAqdHJ1dGgqIHdoZW4gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uLgotCi0yMDA4LTA0LTIzIDE0OjU0OjIwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiBVbnJlZiB0aGUgZmFjdG9yeSBhZnRlciBpdCB3YXMgdXNlZCB0aGUgbGFzdCB0aW1lLCBub3QgYmVmb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKToKLQkgIFVucmVmIHRoZSBmYWN0b3J5IGFmdGVyIGl0IHdhcyB1c2VkIHRoZSBsYXN0IHRpbWUsIG5vdCBiZWZvcmUuCi0JICAqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzogKGdzdF9pbmRleF9mYWN0b3J5X21ha2UpOgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQgYW5kIGRvbid0IGxlYWsgYSByZWYgdG8gdGhlIGluZGV4IGZhY3Rvcnkgd2l0aAotCSAgZWFjaCBjYWxsLgotCi0yMDA4LTA0LTIzIDEzOjU1OjAxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeS5jOiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgSW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbi4KLQotMjAwOC0wNC0yMyAxMDoxNDozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0c2VnbWVudC5jOiBUaGUgZ2xpYiBtYWNybyBzZWVtcyB0byBiZSBib3JrZWQuIFVzZSBnX3NsaWNlX2NvcHkgZGlyZWN0bHkgYW5kIGNhc3QgaW4gdGhlIGhvcGUgdGhhdCB0aGlzIGZpeGVzIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgVGhlIGdsaWIgbWFjcm8gc2VlbXMgdG8gYmUgYm9ya2VkLiBVc2UgZ19zbGljZV9jb3B5IGRpcmVjdGx5IGFuZCBjYXN0Ci0JICBpbiB0aGUgaG9wZSB0aGF0IHRoaXMgZml4ZXMgdGhlIHdhcm5pbmcgb24gNjRiaXQuCi0KLTIwMDgtMDQtMjMgMDc6MDg6NTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuYzogRG9jdW1lbnQgdGhlIG5ldyBmdW5jdGlvbi4gVXNlIGdfc2xpY2VfZHVwKCkgKG5vIG5lZWQgZm9yIGdzdF9zZWdtZW50X2luaXQoKSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIERvY3VtZW50IHRoZSBuZXcgZnVuY3Rpb24uIFVzZSBnX3NsaWNlX2R1cCgpIChubyBuZWVkIGZvcgotCSAgZ3N0X3NlZ21lbnRfaW5pdCgpKS4KLQotMjAwOC0wNC0yMyAwNjo1NzozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBNb3ZlIEdQYXJhbVNlcGMgbWFjcm9zIHRvIHN0YW5kYXJ0IHNlY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIE1vdmUgR1BhcmFtU2VwYyBtYWNyb3MgdG8gc3RhbmRhcnQgc2VjdGlvbi4KLQkgICogZ3N0L2dzdGJpbi5jOgotCSAgRG4ndCBkb2N1bWVudCBfZ2V0X3R5cGUgLSBpdHMgaW4gcHJpdmF0ZSBzZWN0aW9uIGluIGRvY3MgYW55d2F5IGFuZAotCSAgdGhpcyBkb2MtYmxvYiB3YXMgaW5jb21wbGV0ZS4KLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBGaXggd3Jvbmcgc3ltYm9sIG5hbWVzIGluIGRvY3MuCi0JICAqIGdzdC9nc3RtYWNyb3MuaDoKLQkgIEFkZCBvbmNlIGRvYyBzZW50ZW5jZS4KLQkgICogdGVzdHMvY2hlY2svZ3N0Ly5jdnNpZ25vcmU6Ci0JICBJZ25vcmUgbW9yZS4KLQotMjAwOC0wNC0yMSAxMDoyNTowMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2dzdC9NYWtlZmlsZS5hbTogQW5kIHJlbW92ZSB0aG9zZSBsaWJzIGhlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JICBBbmQgcmVtb3ZlIHRob3NlIGxpYnMgaGVyZS4KLQotMjAwOC0wNC0yMSAwOToyOTozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9saWJzL01ha2VmaWxlLmFtOiBGaXggZG9jcyBidWlsZCBhZ2FpbiBieSBhZGRpbmcgbGliZ3N0bmV0LTAuMTAuc28gdG8gU0NBTk9CSl9ERVBTLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgIEZpeCBkb2NzIGJ1aWxkIGFnYWluIGJ5IGFkZGluZyBsaWJnc3RuZXQtMC4xMC5zbyB0byBTQ0FOT0JKX0RFUFMuCi0KLTIwMDgtMDQtMjEgMDg6MzQ6MDkgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogQWRkIHRoZSBtaW4tdGhyZXNob2xkIHRvIHRoZSBtaW4gbGF0ZW5jeSBpZiBwb3NzaWJsZS4gRml4ZXMgIzUyOTE0OC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSk6Ci0JICBBZGQgdGhlIG1pbi10aHJlc2hvbGQgdG8gdGhlIG1pbiBsYXRlbmN5IGlmIHBvc3NpYmxlLiBGaXhlcyAjNTI5MTQ4LgotCi0yMDA4LTA0LTIxIDA3OjQ1OjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjogU3R1cGlkIGVkaXRvciwgSSByZW1vdmVkIHRoYXQgbGluZSBhcyBpdCBzaG91bGQgZ28gaW4geWV0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkgIFN0dXBpZCBlZGl0b3IsIEkgcmVtb3ZlZCB0aGF0IGxpbmUgYXMgaXQgc2hvdWxkIGdvIGluIHlldC4KLQotMjAwOC0wNC0yMSAwNzo0MjoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzLzogUmVtb3ZlIGxpYnJhcnkgdHlwZXMgZnJvIGNvcmUgZG9jcyBhbmQgaGF2ZSB0aGVtIGluIGxpYnMgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMuaW46Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy50eXBlczoKLQkgIFJlbW92ZSBsaWJyYXJ5IHR5cGVzIGZybyBjb3JlIGRvY3MgYW5kIGhhdmUgdGhlbSBpbiBsaWJzIGRvY3MuCi0JICBSZWZvcm1hdCBhbmQgY2xlYW51cC4gQWRkIGNvbW1lbnQgZm9yIG1pbmlvYmplY3QgdHlwZXMuCi0KLTIwMDgtMDQtMjAgMTY6MzI6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R1cmkuYzogRml4IGxlYWs6IGdfc3RyZG93biBvcGVyYXRlcyBvbiB0aGUgc3RyaW5nIGluIHBsYWNlLCB3aGlsZSBnX2FzY2lpX3N0cmRvd24oKSByZXR1cm5zIGEgbmV3bHktYWxsb2NhdGVkIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1cmkuYzogKGdzdF91cmlfZ2V0X3Byb3RvY29sKToKLQkgIEZpeCBsZWFrOiBnX3N0cmRvd24gb3BlcmF0ZXMgb24gdGhlIHN0cmluZyBpbiBwbGFjZSwgd2hpbGUKLQkgIGdfYXNjaWlfc3RyZG93bigpIHJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgc3RyaW5nLgotCi0yMDA4LTA0LTIwIDA5OjU1OjI1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IFByaW50IHRoZSBVUkkgcHJvdG9jb2xzIGFuZCB0aGUgVVJJIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBlbGVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF91cmlfaGFuZGxlcl9pbmZvKSwKLQkgIChwcmludF9lbGVtZW50X2luZm8pOgotCSAgUHJpbnQgdGhlIFVSSSBwcm90b2NvbHMgYW5kIHRoZSBVUkkgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGVsZW1lbnQuCi0KLTIwMDgtMDQtMTkgMTY6MDU6NTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHRhZ2xpc3QuYzogVXNlIGdfdmFsdWVfdGFrZV9zdHJpbmcoKSBpbnN0ZWFkIG9mIHRoZSBkZXByZWNhdGVkIGdfdmFsdWVfc2V0X3N0cmluZ190YWtlX293bmVyc2hpcCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0YWdsaXN0LmM6IChnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk6Ci0JICBVc2UgZ192YWx1ZV90YWtlX3N0cmluZygpIGluc3RlYWQgb2YgdGhlIGRlcHJlY2F0ZWQKLQkgIGdfdmFsdWVfc2V0X3N0cmluZ190YWtlX293bmVyc2hpcCgpLgotCi0yMDA4LTA0LTE5IDE1OjQyOjE5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBSZXR1cm4gdGhlIG9sZCBDUkMgaW5zdGVhZCBvZiAwIGlmIHdlIGdpdmUgYSBOVUxMIGJ1ZmZlciBvciBhIGJ1ZmZlciB3aXRoIGEgbGVuZ3RoIG9mIDAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChfZ3N0X2NyYzMyKToKLQkgIFJldHVybiB0aGUgb2xkIENSQyBpbnN0ZWFkIG9mIDAgaWYgd2UgZ2l2ZSBhIE5VTEwgYnVmZmVyCi0JICBvciBhIGJ1ZmZlciB3aXRoIGEgbGVuZ3RoIG9mIDAuCi0KLTIwMDgtMDQtMTkgMTU6MzY6MjAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHVyaS5jOiBBIHZhbGlkIFVSSSBzY2hlbWUgY2FuIGFsc28gaW5jbHVkZSAnKycsICctJyBhbmQgJy4nIGFkZGl0aW9uYWwgdG8gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYXMgcGVyIFJGQyAzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHVyaS5jOiAoZ3N0X3VyaV9wcm90b2NvbF9jaGVja19pbnRlcm5hbCksCi0JICAoZ3N0X3VyaV9nZXRfcHJvdG9jb2wpLCAoZ3N0X3VyaV9oYXNfcHJvdG9jb2wpLAotCSAgKGdzdF91cmlfY29uc3RydWN0KSwgKGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpKToKLQkgIEEgdmFsaWQgVVJJIHNjaGVtZSBjYW4gYWxzbyBpbmNsdWRlICcrJywgJy0nIGFuZCAnLicgYWRkaXRpb25hbAotCSAgdG8gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYXMgcGVyIFJGQyAzOTg2IFNlY3Rpb24gMy4xLgotCSAgSGFuZGxlIFVSSSBzY2hlbWVzIGNhc2UgaW5zZW5zaXRpdmUgaW4gYWxsIHBsYWNlcyBhbmQgY29udmVydAotCSAgdG8gbG93ZXItY2FzZSB3aGVuIGNvbnN0cnVjdGluZyBhbiBVUkkgb3Igc2V0dGluZyBhbiBVUkkgd2l0aAotCSAgdGhlIEdzdFVSSUhhbmRsZXIgaW50ZXJmYWNlLiBGaXhlcyBidWcgIzUyODg2OC4KLQkgIEFsbCBlbGVtZW50cyBjYW4gc3RpbGwgYXNzdW1lIChhcyBiZWZvcmUpIHRoYXQgdGhleSB3aWxsCi0JICBnZXQgcGFzc2VkIFVSSXMgd2l0aCBhIGxvd2VyLWNhc2UgVVJJIHNjaGVtZSBieSB0aGUgR3N0VVJJSGFuZGxlcgotCSAgaW50ZXJmYWNlLgotCi0yMDA4LTA0LTE3IDEwOjA5OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBEb24ndCB1c2UgZ19hdG9taWNfc2V0X2ludCB3aGVyZSBpdCdzIG5vdCBuZWVkZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9zdGF0aWNfY2Fwc19nZXQpOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19lbnRyeV9uZXcpOgotCSAgRG9uJ3QgdXNlIGdfYXRvbWljX3NldF9pbnQgd2hlcmUgaXQncyBub3QgbmVlZGVkLgotCi0yMDA4LTA0LTE3IDA4OjQ1OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBGaXggMiBjYXBzIGxlYWtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2NhcHMpOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgRml4IDIgY2FwcyBsZWFrcy4KLQotMjAwOC0wNC0xNyAwODozNDoxNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogVXNlIGdfYXRvbWljX2ludF9zZXQoKSBoZXJlIHRvbyBpbnN0ZWFkIG9mIGFzc2lnbm1lbnQgKyBnX2F0b21pY19pbnRfZ2V0KCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfYXRvbWljX2ludF9zZXQpOgotCSAgVXNlIGdfYXRvbWljX2ludF9zZXQoKSBoZXJlIHRvbyBpbnN0ZWFkIG9mIGFzc2lnbm1lbnQgKwotCSAgZ19hdG9taWNfaW50X2dldCgpLgotCi0yMDA4LTA0LTE3IDA3OjE0OjQ2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3R1dGlscy4qOiBBUEk6IERlcHJlY2F0ZSBnc3RfYXRvbWljX2ludF9zZXQoKSwgZ19hdG9taWNfaW50X3NldCgpIHNob3VsZCBiZSB1c2VkIG5vdyB0aGF0IHdlIGRlcGVuZCBvbiBuZXcgZW5vdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFQSTogRGVwcmVjYXRlIGdzdF9hdG9taWNfaW50X3NldCgpLCBnX2F0b21pY19pbnRfc2V0KCkgc2hvdWxkIGJlIHVzZWQKLQkgIG5vdyB0aGF0IHdlIGRlcGVuZCBvbiBuZXcgZW5vdWdoIEdMaWIuCi0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3Rfc3RhdGljX2NhcHNfZ2V0KToKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfZW50cnlfbmV3KToKLQkgICogZ3N0L2dzdGluZm8uYzogKF9nc3RfZGVidWdfaW5pdCksIChnc3RfZGVidWdfc2V0X2NvbG9yZWQpLAotCSAgKGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQpLCAoX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcpLAotCSAgKGdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZCk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfc2V0X3Byb3BlcnR5KToKLQkgIFVzZSBnX2F0b21pY19pbnRfc2V0KCkgaW5zdGVhZCBvZiBnc3RfYXRvbWljX2ludF9zZXQoKS4KLQotMjAwOC0wNC0xNiAxODo0ODowMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cXVlcnkuYzogQWxzbyB1c2UgR19HSU5UNjRfQ09OU1RBTlQgZm9yIHRoZSBxdWVyaWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOgotCSAgQWxzbyB1c2UgR19HSU5UNjRfQ09OU1RBTlQgZm9yIHRoZSBxdWVyaWVzLgotCi0yMDA4LTA0LTE2IDE4OjM4OjE2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RtZXNzYWdlLmM6IFVzZSBHX0dJTlQ2NF9DT05TVEFOVCBpbiB2YXJhcmdzIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBVc2UgR19HSU5UNjRfQ09OU1RBTlQgaW4gdmFyYXJncyBmdW5jdGlvbi4KLQotMjAwOC0wNC0xNiAxNTo1MToxNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogSW5pdGlhbGl6ZSB0aGUgcmVnaXN0cnkgbWFnaWMgd2l0aCB6ZXJvZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMpOgotCSAgSW5pdGlhbGl6ZSB0aGUgcmVnaXN0cnkgbWFnaWMgd2l0aCB6ZXJvZXMuCi0KLTIwMDgtMDQtMTYgMTQ6MTg6NTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lio6IEFkZCBjcmMzMiBjaGVja3N1bSB0byB0aGUgYmluYXJ5IHJlZ2lzdHJ5IGZpbGUgYW5kIGNoZWNrIHRoaXMgYmVmb3JlIGFjY2VwdGluZyBhIHJlZ2lzdHJ5IGZpbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChfZ3N0X2NyYzMyKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2FjaGUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfY2hlY2tfbWFnaWMpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSAgQWRkIGNyYzMyIGNoZWNrc3VtIHRvIHRoZSBiaW5hcnkgcmVnaXN0cnkgZmlsZSBhbmQgY2hlY2sgdGhpcyBiZWZvcmUKLQkgIGFjY2VwdGluZyBhIHJlZ2lzdHJ5IGZpbGUuCi0JICBBbHNvIGZyZWUgdGhlIGRhdGEgbGlzdCB3aGVuIHdyaXRpbmcgdG8gdGhlIHJlZ2lzdHJ5IGZpbGUgZmFpbHMuCi0KLTIwMDgtMDQtMTYgMTM6MTY6NDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IElmIGFuIGVsZW1lbnQgc3VwcG9ydHMgdGhlIFVyaSBpbnRlcmZhY2UsIHJldHVybnMgYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBzdXBwb3J0ZWQgVVJJIHByb3RvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pOgotCSAgSWYgYW4gZWxlbWVudCBzdXBwb3J0cyB0aGUgVXJpIGludGVyZmFjZSwgcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIKLQkgIHRvIHRoZSBzdXBwb3J0ZWQgVVJJIHByb3RvY29scyBidXQgdGhpcyBwb2ludGVyIGNvbnRhaW5zIG5vdGhpbmcKLQkgIGRvbid0IHRyeSB0byBzYXZlIHRoYXQgYXMgaXQgd2lsbCBjb3JydXB0IHRoZSByZWdpc3RyeS4KLQkgIERvbid0IHVucmVmIHRoZSBwbHVnaW4gaWYgd2UgYWRkZWQgaXQgdG8gdGhlIHJlZ2lzdHJ5IGFscmVhZHkgYnV0Ci0JICBmYWlsIHRvIGxvYWQgYSBmZWF0dXJlIGFzIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luKCkgdGFrZXMgb3duZXJzaGlwCi0JICBvZiB0aGUgcGx1Z2luLgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQuCi0KLTIwMDgtMDQtMTYgMDg6MzA6NTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHRhZ2xpc3QuaDogQ2xhcmlmeSBzb21lIHRhZyBpdGVtIGRvY3MgYWZ0ZXIgZGlzY3Vzc2lvbiBvbiBpcmMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIENsYXJpZnkgc29tZSB0YWcgaXRlbSBkb2NzIGFmdGVyIGRpc2N1c3Npb24gb24gaXJjLgotCi0yMDA4LTA0LTE1IDA2OjIzOjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6IFJlbW92ZSBjb21tZW50ZWQgb3V0IHBsdWdpbnMgKHRoZXkgaGF2ZSB0aGVpciBvd24gZG9jcykuIFVwZGF0ZSBjb21tZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgUmVtb3ZlIGNvbW1lbnRlZCBvdXQgcGx1Z2lucyAodGhleSBoYXZlIHRoZWlyIG93biBkb2NzKS4gVXBkYXRlCi0JICBjb21tZW50cy4KLQotMjAwOC0wNC0xNSAwNjoxNjozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBBZGQgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSBhbmQgR1NUX1BBUkFNX1VTRVJfU0hJRlQuIE1vdmUgcGFyYW1zcGVjIGRvY3MgdG8gb3duIHNlY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHBhcmFtc3BlY3MuYzoKLQkgICogZ3N0L2dzdHBhcmFtc3BlY3MuaDoKLQkgIEFkZCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIGFuZCBHU1RfUEFSQU1fVVNFUl9TSElGVC4gTW92ZSBwYXJhbXNwZWMKLQkgIGRvY3MgdG8gb3duIHNlY3Rpb24uCi0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgVGhpcyBub3cgb25seSBkb2N1bWVudHMgR1ZhbHVlLgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkgIFJlbW92ZSBHU1RfUEFSQU1fQ09OVFJPTExBQkxFLgotCi0yMDA4LTA0LTE1IDA1OjU0OjEzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvUkVBRE1FOiBDb3JyZWN0IGZpbGUgcGF0aC4gVGVsbCBhYm91dCBob3cgdG8gdXNlIC1vdmVycmlkZXMudHh0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvUkVBRE1FOgotCSAgQ29ycmVjdCBmaWxlIHBhdGguIFRlbGwgYWJvdXQgaG93IHRvIHVzZSAtb3ZlcnJpZGVzLnR4dC4KLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtdGFncmVhZGluZy50eHQ6Ci0JICBTbWFsbCBkZXNpZ24gdXBkYXRlLgotCi0yMDA4LTA0LTE0IDEyOjEyOjIyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBGaXggYSB0eXBvIGluIGEgZGVidWcgbWVzc2FnZSBhbmQgcmV2ZXJ0IGNoYW5nZSBmcm9tIHllc3RlcmRheSBhcyBnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbigpIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pOgotCSAgRml4IGEgdHlwbyBpbiBhIGRlYnVnIG1lc3NhZ2UgYW5kIHJldmVydCBjaGFuZ2UgZnJvbSB5ZXN0ZXJkYXkgYXMKLQkgIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luKCkgd2lsbCBvbmx5IGZhaWwgaWYgc29tZXRoaW5nIGlzIHJlYWxseSB3cm9uZwotCSAgYWxyZWFkeSBhbmQgd2UgY2FuJ3Qgc3Vydml2ZSBpdCBhbnl3YXkuCi0KLTIwMDgtMDQtMTQgMDg6NDg6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogUHJlLXJlZ2lzdGVyIEdzdEdFcnJvciBHVHlwZSBmcm9tIGEgdGhyZWFkLXNhZmUgY29udGV4dCAoZml4ZXMgIzUyNzk2Nyk7IHVucmVmIGVudW0gdHlwZSBjbGFzc2VzIGluIGRlaW5pdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpLCAoZ3N0X2RlaW5pdCk6Ci0JICBQcmUtcmVnaXN0ZXIgR3N0R0Vycm9yIEdUeXBlIGZyb20gYSB0aHJlYWQtc2FmZSBjb250ZXh0Ci0JICAoZml4ZXMgIzUyNzk2Nyk7IHVucmVmIGVudW0gdHlwZSBjbGFzc2VzIGluIGRlaW5pdC4KLQotMjAwOC0wNC0xMyAxOTo1ODo0MyArMDAwMCAgUmVuZSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JICBnc3QvZ3N0dGFnc2V0dGVyLmM6IE1lcmdpbmcgYW4gZW1wdHkgbGlzdCB3aXRoIGFub3RoZXIgbGlzdCBpbiBLRUVQX0FMTCBtb2RlIHNob3VsZCB5aWVsZCBhbiBlbXB0eSBsaXN0IGFzIHJlc3VsdCBhbmQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJlbmUgU3RhZGxlciA8bWFpbCBhdCByZW5lc3RhZGxlciBkZT4KLQkgICogZ3N0L2dzdHRhZ3NldHRlci5jOiAoZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyk6Ci0JICBNZXJnaW5nIGFuIGVtcHR5IGxpc3Qgd2l0aCBhbm90aGVyIGxpc3QgaW4gS0VFUF9BTEwgbW9kZSBzaG91bGQKLQkgIHlpZWxkIGFuIGVtcHR5IGxpc3QgYXMgcmVzdWx0IGFuZCBub3QgdGhlIHNlY29uZCBsaXN0ICgjNTEyNTc4KS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZ3NldHRlci5jOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGFnIG1lcmdlIG1vZGVzIGFuZCB0aGUgYWZvcmVtZW50aW9uZWQgYnVnLgotCi0yMDA4LTA0LTEzIDE4OjUwOjA1ICswMDAwICBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkgIGdzdC9nc3R0YWdsaXN0Lmg6IEZpeCBkZXNjcmlwdGlvbiB0byBtYXRjaCB0aGUgb3JkZXIgaW4gdGhlIHRhYmxlICgjNTEyNTc3KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJlbmUgU3RhZGxlciA8bWFpbCBhdCByZW5lc3RhZGxlciBkZT4KLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIEZpeCBkZXNjcmlwdGlvbiB0byBtYXRjaCB0aGUgb3JkZXIgaW4gdGhlIHRhYmxlICgjNTEyNTc3KS4KLQotMjAwOC0wNC0xMyAxNzo1MTowMiArMDAwMCAgS3dhbmcgWXVsIFNlbyA8a3dhbmd5dWwuc2VvLmdtYWlsLmNvbT4KLQotCSAgRGVmaW5lIHNvY2tsZW5fdCBhcyBpbnQgaWYgaXQncyBub3QgZGVmaW5lZCB5ZXQuIEZpeGVzIGNvbXBpbGF0aW9uIHdpdGggTVNWQzYgYW5kIG90aGVyIHZlcnNpb25zIHdoZXJlIHNvY2tsZW5fdCBpcyBuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBLd2FuZyBZdWwgU2VvICA8a3dhbmd5dWwuc2VvIGdtYWlsIGNvbT4KLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIERlZmluZSBzb2NrbGVuX3QgYXMgaW50IGlmIGl0J3Mgbm90IGRlZmluZWQgeWV0LiBGaXhlcyBjb21waWxhdGlvbgotCSAgd2l0aCBNU1ZDNiBhbmQgb3RoZXIgdmVyc2lvbnMgd2hlcmUgc29ja2xlbl90IGlzIG5vdCBkZWZpbmVkIGluCi0JICB0aGUgd2luZG93cyBoZWFkZXJzICgjNTE4MDIyKS4KLQotMjAwOC0wNC0xMyAxMzo1NDo1NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogSWYgZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4oKSBmYWlscyBvdXIgcmVmZXJlbmNlIHRvIHRoZSBwbHVnaW4gaXMgaW52YWxpZCBzbyBkb24ndCB0cnkgdG8gdXMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pOgotCSAgSWYgZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4oKSBmYWlscyBvdXIgcmVmZXJlbmNlIHRvIHRoZSBwbHVnaW4gaXMKLQkgIGludmFsaWQgc28gZG9uJ3QgdHJ5IHRvIHVzZSBpdCBhbnltb3JlIGFuZCBpbnN0ZWFkIGVycm9yIG91dC4KLQotMjAwOC0wNC0xMiAyMDo1Mjo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogRGUtY3J1ZnQgYSBiaXQuIElmIG5vIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwgcHJpbnQgYWxsIGVsZW1lbnRzIGluCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfaW5mbyksIChtYWluKToKLQkgIERlLWNydWZ0IGEgYml0LiBJZiBubyBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIHByaW50IGFsbCBlbGVtZW50cyBpbgotCSAgWE1MIHN5bnRheCByYXRoZXIgdGhhbiBhIGZyZWVzdHlsZSBsaXN0IG9mIGVsZW1lbnRzIGxpa2UgZ3N0LWluc3BlY3QuCi0JICBBbHNvLCBkb24ndCBwcmludCBYTUwgaGVhZGVyIGNodW5rIHVubGVzcyB3ZSBhY3R1YWxseSBoYXZlIHNvbWV0aGluZwotCSAgdG8gcHJpbnQgKGllLiBkb24ndCBwcmludCBpdCBiZWZvcmUgYW4gZXJyb3IgbWVzc2FnZSk7IHByaW50IGVycm9yCi0JICBtZXNzYWdlIHRvIHN0ZGVyciBub3Qgc3Rkb3V0LiBSZW1vdmUgc3VwcG9ydCBmb3IgcHJpbnRpbmcgcGx1Z2luCi0JICBpbmZvIChpdCB3b3VsZCBqdXN0IG91dHB1dCBzb21ldGhpbmcgZnJlZXN0eWxlIGFsb25nIHRoZSBsaW5lcyBvZgotCSAgZ3N0LWluc3BlY3Qgc28gZmFyKSwgd2hpY2ggZml4ZXMgIzUxNDUwNy4gQWxzbyBhZGQgbGljZW5zZSBoZWFkZXIuCi0KLTIwMDgtMDQtMTEgMDk6Mjc6NDQgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBNYWMgT1MgWCBsb3ZlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMDQtMTEgIEp1bGllbiBNb3V0dGUgIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0JICBNYWMgT1MgWCBsb3ZlLi4uCi0JICAqIGNvbmZpZ3VyZS5hYzogTWVyZ2UgcGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5lcywgaW50cm9kdWNlIGEgbmV3Ci0JICBkZWZpbmUgb24gT1MgWCB0byByZW1lbWJlciB0aGF0IGZvcmtpbmcgd2hlbiB1cGRhdGluZyByZWdpc3RyeSBpcwotCSAgdW5zYWZlLgotCSAgKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IFVwZGF0ZWQgdG8gaW5jbHVkZSBnc3QtbGlicyBpbiB0aGUgYmFkCi0JICBtb2R1bGUuCi0JICAqIGdzdC9nc3QuYzogRG9uJ3QgZm9yayB3aGVuIHVwZGF0aW5nIHJlZ2lzdHJ5IGlmIEdTVF9IQVZFX1VOU0FGRV9GT1JLCi0JICBpcyBkZWZpbmVkLgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOiBGaXhlZCBhIGJvZ3VzCi0JICBjb25kaXRpb24gdGhhdCBsZWFkcyB0byBhYnNvbHV0ZWx5IG5vIHBsdWdpbnMgYmVpbmcgcmVnaXN0ZXJlZCBvbgotCSAgT1MgWC4KLQotMjAwOC0wNC0xMCAyMDo0Njo1MSArMDAwMCAgSm9zw6kgQWxidXJxdWVycXVlIDxqYWFsYnVycXVAc3ZuLmdub21lLm9yZz4KLQotCSAgQWRkIGdzdF9wYWRfYWRkXypfcHJvYmVfZnVsbCgpIGZ1bmN0aW9ucyB3aXRoIGEgbm90aWZ5IGNhbGxiYWNrIHRoYXQgbGV0cyB0aGUgY2FsbGVyIGZyZWUgdGhlIGRhdGEgaXQgcGFzc2VzIHRvIHRoZSBwLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdSBhdCBzdm4gZG90IGdub21lIGRvdCBvcmc+Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhZF9hZGRfZGF0YV9wcm9iZSksCi0JICAoZ3N0X3BhZF9hZGRfZGF0YV9wcm9iZV9mdWxsKSwgKGdzdF9wYWRfYWRkX2V2ZW50X3Byb2JlKSwKLQkgIChnc3RfcGFkX2FkZF9ldmVudF9wcm9iZV9mdWxsKSwgKGdzdF9wYWRfYWRkX2J1ZmZlcl9wcm9iZSksCi0JICAoZ3N0X3BhZF9hZGRfYnVmZmVyX3Byb2JlX2Z1bGwpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgZ3N0X3BhZF9hZGRfKl9wcm9iZV9mdWxsKCkgZnVuY3Rpb25zIHdpdGggYSBub3RpZnkgY2FsbGJhY2sgdGhhdAotCSAgbGV0cyB0aGUgY2FsbGVyIGZyZWUgdGhlIGRhdGEgaXQgcGFzc2VzIHRvIHRoZSBwcm9iZSBmdW5jdGlvbnMuIFRoaXMKLQkgIGlzIHVzZWZ1bCBmb3IgYmluZGluZ3Mgc3VjaCBhcyBnc3QtcHl0aG9uIG9yIGdzdHJlYW1lcm1tICgjNTI2ODE0KS4KLQkgIEFQSTogZ3N0X3BhZF9hZGRfZGF0YV9wcm9iZV9mdWxsCi0JICBBUEk6IGdzdF9wYWRfYWRkX2J1ZmZlcl9wcm9iZV9mdWxsCi0JICBBUEk6IGdzdF9wYWRfYWRkX2V2ZW50X3Byb2JlX2Z1bGwKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JICBBZGQgbWluaW1hbCB1bml0IHRlc3QgdG8gbWFrZSBzdXJlIGZyZWVpbmcgdGhlIGRhdGEgYWN0dWFsbHkgd29ya3MKLQkgIGFzIGV4cGVjdGVkLgotCSAgKiB0ZXN0cy9iZW5jaG1hcmtzLy5jdnNpZ25vcmU6Ci0JICBSYW5kb20gY3ZzaWdub3JlIGFkZGVuZHVtLgotCi0yMDA4LTA0LTEwIDE5OjEzOjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0ZGVidWd1dGlscy5oOiBNZW50aW9uIEdzdERlYnVnR3JhcGhEZXRhaWxzIGVudW0gdHlwZSBpbiBkb2MgYmx1cmIgc28gd2UgZ2V0IGEgbGluayB0byBpdCBpbiB0aGUgZG9jcyAoc2luY2UgdGguLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5oOiAoR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKSwKLQkgIChHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKToKLQkgIE1lbnRpb24gR3N0RGVidWdHcmFwaERldGFpbHMgZW51bSB0eXBlIGluIGRvYyBibHVyYiBzbyB3ZSBnZXQgYSBsaW5rCi0JICB0byBpdCBpbiB0aGUgZG9jcyAoc2luY2UgdGhlc2UgYXJlIG1hY3JvcyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cwotCSAgd29uJ3QgYmUgc2hvd24gaW4gdGhlIGRvY3Mgb3RoZXJ3aXNlKS4KLQotMjAwOC0wNC0xMCAxNDoxMDo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cGFkLmM6IERvIG5vdCBhYm9ydCBvbiBvdXQgb2YgbWVtb3J5IGZvciBwYWRfYWxsb2NfYnVmZmVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzoKLQkgIERvIG5vdCBhYm9ydCBvbiBvdXQgb2YgbWVtb3J5IGZvciBwYWRfYWxsb2NfYnVmZmVyLgotCi0yMDA4LTA0LTEwIDEzOjU5OjI0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IFJlbW92ZSBibGFuayBsaW5lIGJldHdlZW4gc3ltYm9sIG5hbWUgYWQgcGFyYW1ldGVycyB0byBmaXggZ3RrZG9jIHdhcm5pbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgIFJlbW92ZSBibGFuayBsaW5lIGJldHdlZW4gc3ltYm9sIG5hbWUgYWQgcGFyYW1ldGVycyB0byBmaXggZ3RrZG9jCi0JICB3YXJuaW5nLgotCi0yMDA4LTA0LTA5IDIyOjM3OjIyICswMDAwICBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdUBzdm4uZ25vbWUub3JnPgotCi0JICBFeHBvc2UgZ3N0X3NlZ21lbnRfY29weSgpIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgdGhlIGMrKyBiaW5kaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6ICBKb3PDqSBBbGJ1cnF1ZXJxdWUgPGphYWxidXJxdSBhdCBzdm4gZG90IGdub21lIGRvdCBvcmc+Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICAqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgRXhwb3NlIGdzdF9zZWdtZW50X2NvcHkoKSB0byBtYWtlIHRoaW5ncyBlYXNpZXIgZm9yIHRoZSBjKysgYmluZGluZ3MuCi0JICBGaXhlcyAjNTE4OTMyLgotCSAgQVBJOiBnc3Rfc2VnbWVudF9jb3B5KCkKLQotMjAwOC0wNC0wOSAyMToyNzo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdC5jOiBGaXggY29uc3QgcG9zaXRpb247IHJlZiBHVHlwZSBjbGFzc2VzIGZvciBlbnVtIHR5cGVzIHRvIHdvcmsgYXJvdW5kIHRocmVhZC1zYWZldHkgaXNzdWVzIGluIEdMaWIgdmVyc2lvbnMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCksIChpbml0X3Bvc3QpOgotCSAgRml4IGNvbnN0IHBvc2l0aW9uOyByZWYgR1R5cGUgY2xhc3NlcyBmb3IgZW51bSB0eXBlcyB0byB3b3JrCi0JICBhcm91bmQgdGhyZWFkLXNhZmV0eSBpc3N1ZXMgaW4gR0xpYiB2ZXJzaW9ucyA8IDIuMTYuCi0KLTIwMDgtMDQtMDkgMTg6MjY6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDogRml4IHNvbWUgdHlwb3MgYW5kIHNldCB0aGUgZXN0aW1hdGVkIHRvdGFsIGZvciBwdXNoIG1vZGUgdG8gLTEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgotCSAgRml4IHNvbWUgdHlwb3MgYW5kIHNldCB0aGUgZXN0aW1hdGVkIHRvdGFsIGZvciBwdXNoIG1vZGUgdG8gLTEuCi0JICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcpOgotCSAgU2V0IGJ1ZmZlcmluZy1sZWZ0IHRvIDAgYXMgd2UncmUgbm90IGJ1ZmZlcmluZyBieSBkZWZhdWx0LgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X3F1ZXJ5KToKLQkgIEltcGxlbWVudCBCVUZGRVJJTkcgcXVlcnkuCi0KLTIwMDgtMDQtMDkgMTc6MzQ6NTQgKzAwMDAgIE1pbG9zeiBEZXJlenluc2tpIDxpbnRlcm5hbGVycm9yQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVycm9yLio6IEFkZCB0d28gbmV3IGVycm9yIGNvZGVzIGZvciBlbmNyeXB0ZWQgY29udGVudC4gRml4ZXMgIzUyNDY1OS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IE1pbG9zeiBEZXJlenluc2tpIDxpbnRlcm5hbGVycm9yIGdtYWlsIGNvbT4KLQkgICogZ3N0L2dzdGVycm9yLmM6IChfZ3N0X3N0cmVhbV9lcnJvcnNfaW5pdCk6Ci0JICAqIGdzdC9nc3RlcnJvci5oOgotCSAgQWRkIHR3byBuZXcgZXJyb3IgY29kZXMgZm9yIGVuY3J5cHRlZCBjb250ZW50LiBGaXhlcyAjNTI0NjU5LgotCSAgQVBJOiBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQKLQkgIEFQSTogR1NUX1NUUkVBTV9FUlJPUl9ERUNSWVBUX05PS0VZCi0KLTIwMDgtMDQtMDkgMTM6MTU6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RxdWVyeS5oOiBGaXggdHlwby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIEZpeCB0eXBvLgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEFkZCBuZXcgZnVuY3Rpb25zLgotCi0yMDA4LTA0LTA5IDA4OjE5OjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogRml4IGltcGVyZmVjdCB0aW1lc3RhbXAvb2Zmc2V0IGNoZWNrcyB3aGVuIHdlIGdldCBhbm90aGVyIE5FV1NFR01FTlQgZXZlbnQgYWZ0ZXIgcHJvYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9ldmVudCksCi0JICAoZ3N0X2lkZW50aXR5X3N0YXJ0KToKLQkgIEZpeCBpbXBlcmZlY3QgdGltZXN0YW1wL29mZnNldCBjaGVja3Mgd2hlbiB3ZSBnZXQgYW5vdGhlciBORVdTRUdNRU5UCi0JICBldmVudCBhZnRlciBwcm9jZXNzaW5nIHNvbWUgZGF0YS4gRml4ZXMgYnVnICM1MjYwNDIuCi0KLTIwMDgtMDQtMDggMjA6Mjg6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFJlbmFtZSBfYXZhaWwgLT4gX3JhbmdlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSksCi0JICAoZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudCksCi0JICAoZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50KSwKLQkgIChnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZSksIChnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlKToKLQkgICogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBSZW5hbWUgX2F2YWlsIC0+IF9yYW5nZQotCSAgQVBJOiBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZQotCSAgQVBJOiBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlCi0KLTIwMDgtMDQtMDggMjA6MTc6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZCBidXN5IGZpZWxkIGFuZCBxdWFyayBmb3IgdGhlIGJ1ZmZlcmluZyBxdWVyeSBzbyB0aGF0IHRoZSBhcHAgY2FuIG9ubHkgdXNlIHRoZSBxdWVyeSB0byBzZWUgaWYgYnVmZmVyaW5nIGlzIGluIHByby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKLQkgICogZ3N0L2dzdHF1YXJrLmM6Ci0JICAqIGdzdC9nc3RxdWFyay5oOgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5KSwKLQkgIChnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyksIChnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50KSwKLQkgIChnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQpOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIEFkZCBidXN5IGZpZWxkIGFuZCBxdWFyayBmb3IgdGhlIGJ1ZmZlcmluZyBxdWVyeSBzbyB0aGF0IHRoZSBhcHAgY2FuCi0JICBvbmx5IHVzZSB0aGUgcXVlcnkgdG8gc2VlIGlmIGJ1ZmZlcmluZyBpcyBpbiBwcm9ncmVzcy4KLQotMjAwOC0wNC0wOCAxOTo1OTowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgUmVvcmRlciB0aGUgbWVzc2FnZSBkb2NzIGFuZCBoZWFkZXJzIGZvciBjbGFyaXR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHMpOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfbGF0ZW5jeSksIChnc3RfcXVlcnlfc2V0X2xhdGVuY3kpLAotCSAgKGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5KSwgKGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKSwKLQkgIChnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50KSwKLQkgIChnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQpLAotCSAgKGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3N0YXRzKSwgKGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMpLAotCSAgKGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX2F2YWlsKSwgKGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfYXZhaWwpOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIFJlb3JkZXIgdGhlIG1lc3NhZ2UgZG9jcyBhbmQgaGVhZGVycyBmb3IgY2xhcml0eS4KLQkgIEFkZCBhZGl0aW9uYWwgYnVmZmVyaW5nIHN0YXRzIEFQSSBmb3IgbWVzc2FnZXMuCi0JICBBZGQgYnVmZmVyaW5nIHF1ZXJ5LgotCSAgQ29udmVydCBzb21lIGxlZnRvdmVyIHF1ZXJpZXMgdG8gdXNlIEdzdFF1YXJrLgotCSAgQVBJOiBnc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzCi0JICBBUEk6IGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cwotCSAgQVBJOiBHU1RfUVVFUllfQlVGRkVSSU5HCi0JICBBUEk6IEdzdEJ1ZmZlcmluZ01vZGUKLQkgIEFQSTogZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcKLQkgIEFQSTogZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudAotCSAgQVBJOiBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQKLQkgIEFQSTogZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHMKLQkgIEFQSTogZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cwotCSAgQVBJOiBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19hdmFpbAotCSAgQVBJOiBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX2F2YWlsCi0KLTIwMDgtMDQtMDggMTk6NTI6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RtZXNzYWdlLmM6IFVzZSBHc3RRdWFyayBmb3IgbWVzc2FnZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19lcnJvciksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcpLCAoZ3N0X21lc3NhZ2VfbmV3X2luZm8pLAotCSAgKGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcpLCAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpLAotCSAgKGdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlKSwgKGdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0KSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfbmV3X2Nsb2NrKSwgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0KSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbiksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0KSwgKGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZSksIChnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0KSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2spLCAoZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IpLAotCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcpLCAoZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbyksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydCksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX3BhcnNlX2R1cmF0aW9uKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9hc3luY19zdGFydCk6Ci0JICBVc2UgR3N0UXVhcmsgZm9yIG1lc3NhZ2VzLgotCi0yMDA4LTA0LTA4IDE5OjM5OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cXVhcmsuKjogQWRkIHNvbWUgbW9yZSBxdWFya3MgbmVlZGVkIGZvciBtZXNzYWdlcyBhbmQgcXVlcmllcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVhcmsuYzogKF9wcml2X2dzdF9xdWFya3NfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3RxdWFyay5oOgotCSAgQWRkIHNvbWUgbW9yZSBxdWFya3MgbmVlZGVkIGZvciBtZXNzYWdlcyBhbmQgcXVlcmllcy4KLQotMjAwOC0wNC0wOCAxOToxNDo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OiBSZW1vdmUgdGhlICJub25lIiBidWZmZXJpbmcgbW9kZSwgU1RSRUFNIGlzIGEgZ29vZCBkZWZhdWx0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKLQkgIFJlbW92ZSB0aGUgIm5vbmUiIGJ1ZmZlcmluZyBtb2RlLCBTVFJFQU0gaXMgYSBnb29kIGRlZmF1bHQuCi0JICBNb3ZlIGVzdGltYXRlZC10aW1lIHRvIHRoZSBhdmFpbCBxdWVyeSwgdGhhdCdzIHdoZW4gaXQgd2lsbCBiZSBuZWVkZWQuCi0JICBPdGhlciBzbWFsbCB0eXBvIGZpeGVzIGFuZCB1cGRhdGVzLgotCi0yMDA4LTA0LTA3IDEzOjI3OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0aW5kZXguYzogRG9uJ3QgcHV0IGRlc2NyaXB0aW9ucyBpbnRvIHRoZSBuaWNrIGZpZWxkIG9mIGEgR0VudW1WYWx1ZTogaXQncyBub3QgbWVhbnQgZm9yIHRoYXQgYW5kIHNvbWUgbGFuZ3VhZ2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5kZXguYzogKGdzdF9pbmRleF9yZXNvbHZlcl9nZXRfdHlwZSk6Ci0JICBEb24ndCBwdXQgZGVzY3JpcHRpb25zIGludG8gdGhlIG5pY2sgZmllbGQgb2YgYSBHRW51bVZhbHVlOiBpdCdzIG5vdAotCSAgbWVhbnQgZm9yIHRoYXQgYW5kIHNvbWUgbGFuZ3VhZ2UgYmluZGluZ3MgcmVseSBvbiB0aGUgbmljayBmaWVsZCB0bwotCSAgY29uc3RydWN0IGNvbnN0YW50cyBhbmQgdGhlIGxpa2UuIEZpeGVzICM1MjY3MDUuCi0KLTIwMDgtMDQtMDcgMTA6NDg6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIE1lcmdlIG90aGVyIGNoYW5nZXMgZnJvbSAwLjEwLjE5IHJlbGVhc2UgYnJhbmNoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIE5FV1M6Ci0JICAqIFJFTEVBU0U6Ci0JICAqIGdzdHJlYW1lci5kb2FwOgotCSAgTWVyZ2Ugb3RoZXIgY2hhbmdlcyBmcm9tIDAuMTAuMTkgcmVsZWFzZSBicmFuY2guCi0KLTIwMDgtMDQtMDYgMDg6NTQ6NDcgKzAwMDAgIERhbWllbiBMZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBnbWFpbC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQWN0dWFsbHkgYnVpbGQgZGxscyB3aGVuIGNyb3NzLWNvbXBpbGluZyB3aXRoIG1pbmd3MzIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuIGRvdCBsZXNwaWF1IGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEFjdHVhbGx5IGJ1aWxkIGRsbHMgd2hlbiBjcm9zcy1jb21waWxpbmcgd2l0aCBtaW5ndzMyLgotCSAgRml4ZXMgYnVnICM1MjYyNDcuCi0KLTIwMDgtMDQtMDUgMTA6NTg6MTEgKzAwMDAgIERhbWllbiBMZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3Rwb2xsLmM6IEZpeCBjb21waWxhdGlvbiBvZiBHc3RQb2xsIHdpdGggbWluZ3czMi4gRml4ZXMgYnVnICM1MjYyMzYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuIGRvdCBsZXNwaWF1IGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9nc3Rwb2xsLmM6Ci0JICBGaXggY29tcGlsYXRpb24gb2YgR3N0UG9sbCB3aXRoIG1pbmd3MzIuIEZpeGVzIGJ1ZyAjNTI2MjM2LgotCi0yMDA4LTA0LTA0IDEzOjQzOjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDogRml4IHR5cG8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6Ci0JICBGaXggdHlwby4KLQkgICogZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0OgotCSAgVXBkYXRlIGRlc2lnbiBkb2NzIHdpdGggbW9yZSBidWZmZXJpbmcgaWRlYXMuCi0KLTIwMDgtMDQtMDMgMjE6MTU6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDAuMTAuMTkuMSBhZnRlciB0aGUgdW5zY2hlZHVsZWQgMC4xMC4xOSByZWxlYXNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgdmVyc2lvbiB0byAwLjEwLjE5LjEgYWZ0ZXIgdGhlIHVuc2NoZWR1bGVkIDAuMTAuMTkgcmVsZWFzZS4KLQotMjAwOC0wNC0wMyAxNjo0NTowMiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIHVwZGF0ZSBzcGVjIHRvIHdvcmsgd2l0aCBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSBzcGVjIHRvIHdvcmsgd2l0aCBkb2NzCi0KLTIwMDgtMDQtMDMgMTQ6NDk6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBSZXZlcnQgcGFydCB0aGF0IGJlbG9uZ3MgdG8gdGhlIHByZXNldCBwYXRjaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBSZXZlcnQgcGFydCB0aGF0IGJlbG9uZ3MgdG8gdGhlIHByZXNldCBwYXRjaC4KLQotMjAwOC0wNC0wMyAxNDoyNjo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjb25maWd1cmUuYWM6IEFkZCBxb3V0ZXMgdG8gdGhlIGRlZmluZS4gRml4ZXMgIyA1MjU5NjEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQWRkIHFvdXRlcyB0byB0aGUgZGVmaW5lLiBGaXhlcyAjIDUyNTk2MS4KLQotMjAwOC0wNC0wMyAwNzo1MjozMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBwbHVnaW5zL2luZGV4ZXJzLzogVXNlIEdTbGljZSB3aGVuIHBvc3NpYmxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6IChfZmlsZV9pbmRleF9pZF9mcmVlKSwKLQkgIChnc3RfZmlsZV9pbmRleF9sb2FkKSwgKGdzdF9maWxlX2luZGV4X2FkZF9pZCksCi0JICAoZ3N0X2ZpbGVfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5KToKLQkgICogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOiAoZ3N0X21lbV9pbmRleF9mcmVlX2Zvcm1hdCksCi0JICAoZ3N0X21lbV9pbmRleF9mcmVlX2lkKSwgKGdzdF9tZW1faW5kZXhfYWRkX2lkKSwKLQkgIChnc3RfbWVtX2luZGV4X2luZGV4X2Zvcm1hdCk6Ci0JICBVc2UgR1NsaWNlIHdoZW4gcG9zc2libGUuCi0KLTIwMDgtMDQtMDIgMTc6NDU6MDggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jOiBVc2UgR1NsaWNlIGZvciBhbGxvY2F0aW5nIHRoZSBjb250cm9sIHBvaW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JICAoZ3N0X2NvbnRyb2xfcG9pbnRfZnJlZSksCi0JICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVybmFsKToKLQkgIFVzZSBHU2xpY2UgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbnRyb2wgcG9pbnRzLgotCi0yMDA4LTA0LTAyIDE3OjIxOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC4qOiBDbGVhbnVwIHByb3BlcnRpZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkgIENsZWFudXAgcHJvcGVydGllcy4KLQkgIEZpeCBwYWQgbGVhayB3aGVuIHBlZXIgcXVlcnkgZmFpbHMuCi0JICBXZSBjYW4gc3RpbGwgdHlwZWZpbmQgd2hlbiB0aGUgcGVlciByZXR1cm5zIC0xLgotCSAgQWRkIHByb3BlcnR5IHRvIGZvcmNlIGNhcHMgYW5kIGJ5cGFzcyB0eXBlZmluZGluZy4gVGhpcyB3aWxsIGJlIHVzZWQgaW4KLQkgIHVyaWRlY29kZWJpbi4KLQkgIEFQSTo6Zm9yY2UtY2FwcwotCi0yMDA4LTA0LTAxIDEzOjU1OjIwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogUmVxdWlyZSBHTGliIDIuMTIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgUmVxdWlyZSBHTGliIDIuMTIuCi0JICAqIGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19uZXdfZW1wdHkpLCAoX2dzdF9jYXBzX2ZyZWUpOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19lbnRyeV9uZXcpLCAoX2dzdF9jbG9ja19pZF9mcmVlKToKLQkgIFVuY29uZGl0aW9uYWxseSB1c2UgR1NsaWNlIGZvciBhbGxvY2F0aW9uLgotCSAgKiBnc3QvZ3N0cG9sbC5jOiAoZ3N0X3BvbGxfbmV3KSwgKGdzdF9wb2xsX2ZyZWUpOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfbmV3KSwgKGdzdF9zZWdtZW50X2ZyZWUpOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX2lkX2VtcHR5X25ld193aXRoX3NpemUpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfZnJlZSk6Ci0JICBVc2UgR1NsaWNlIGZvciBhbGxvY2F0aW9uLgotCi0yMDA4LTA0LTAxIDEzOjQ4OjU5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9wYXJzZS86IFJlcXVpcmUgYSBuZXcgZW5vdWdoIGZsZXggYW5kIGJpc29uIGFuZCByZW1vdmUgdGhlIHBhcnNlciBoYWNrcyB0byB1c2UgYSBwcmUtcmVnZW5lcmF0ZWQgdmVyc2lvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnRhYi5wcmUuYzoKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIudGFiLnByZS5oOgotCSAgKiBnc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkucHJlLmM6Ci0JICBSZXF1aXJlIGEgbmV3IGVub3VnaCBmbGV4IGFuZCBiaXNvbiBhbmQgcmVtb3ZlIHRoZSBwYXJzZXIgaGFja3MgdG8gdXNlCi0JICBhIHByZS1yZWdlbmVyYXRlZCB2ZXJzaW9uLgotCi0yMDA4LTA0LTAxIDEwOjI1OjM1ICswMDAwICBKYXNvbiBaaGFvIDxFMzQyM0NAbW90b3JvbGEuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEFkZCBhIGNvbmZpZ3VyZSBzd2l0Y2ggdG8gZGlzYWJsZSBvcHRpb24gcGFyc2luZyBpbiBnc3RfaW5pdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0wNC0wMSAgSnVsaWVuIE1vdXR0ZSAgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQkgIHBhdGNoIGJ5OiBKYXNvbiBaaGFvIDxFMzQyM0NAbW90b3JvbGEuY29tPgotCSAgKiBjb25maWd1cmUuYWM6IEFkZCBhIGNvbmZpZ3VyZSBzd2l0Y2ggdG8gZGlzYWJsZSBvcHRpb24gcGFyc2luZwotCSAgaW4gZ3N0X2luaXQuCi0JICBGaXhlcyAjNTIyODgyLgotCi0yMDA4LTAzLTMxIDEzOjQ3OjIyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIE1hY09TIGhhcyBwbHVnaW5zIHVuZGVyIC5zbyBvciB1bmRlciAuZHlsaWIuIEFkZCBkZXRlY3Rpb24gZm9yIE1hY09TIGFuZCBoYW5kbGUgdGhpcyBjYXNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBNYWNPUyBoYXMgcGx1Z2lucyB1bmRlciAuc28gb3IgdW5kZXIgLmR5bGliLiBBZGQgZGV0ZWN0aW9uIGZvciBNYWNPUwotCSAgYW5kIGhhbmRsZSB0aGlzIGNhc2UuCi0JICAqIGdzdC9nc3QuYzoKLQkgIEFkZCBhIGNvbW1lbnQgaGVyZSBkZXNjcmliaW5nLCB3aHkgd2Ugc3RhdCBlYWNoIHBsdWdpbiBhbmQgbm90IHRyeSB0bwotCSAgYmUgc21hcnQuCi0KLTIwMDgtMDMtMzEgMTA6MjE6NTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEFsc28gdW5zZXQgdGhlIEdBUCBmbGFnIG9uIGJ1ZmZlcnMgaWYgd2UncmUgd29ya2luZyBpbnBsYWNlIGJ1dCB0aGUgZWxlbWVudCBpcyBub3QgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlcik6Ci0JICBBbHNvIHVuc2V0IHRoZSBHQVAgZmxhZyBvbiBidWZmZXJzIGlmIHdlJ3JlIHdvcmtpbmcgaW5wbGFjZSBidXQKLQkgIHRoZSBlbGVtZW50IGlzIG5vdCBHQVAtYXdhcmUuCi0JICBNYXJrIGEgY29tbWVudCBhcyBGSVhNRSAwLjExLgotCi0yMDA4LTAzLTMxIDA4OjMyOjI2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogRml4IHR5cGUgaW4gbG9nIG1lc3NhZ2UgYW5kIGFkZCBvbmUgdG8gZWFzZSBzZWVpbmcgaG93IGxvbmcgcmVnaXN0cnkgY2FjaGUgdmVyaWZpY2F0aW9uIHRha2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIEZpeCB0eXBlIGluIGxvZyBtZXNzYWdlIGFuZCBhZGQgb25lIHRvIGVhc2Ugc2VlaW5nIGhvdyBsb25nIHJlZ2lzdHJ5Ci0JICBjYWNoZSB2ZXJpZmljYXRpb24gdGFrZXMuCi0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgT25seSB0ZXN0IHBsdWdpbiBmaWxlbmFtZXMgYWdhaW5zdCBHX01PRFVMRV9TVUZGSVguCi0KLTIwMDgtMDMtMzEgMDc6NDk6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGRlYnVndXRpbHMuYzogSW1wcm92ZSBoYW5kbGluZyBnaG9zdC9wcm94eSBwYWRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBJbXByb3ZlIGhhbmRsaW5nIGdob3N0L3Byb3h5IHBhZHMuCi0KLTIwMDgtMDMtMjcgMTk6MTM6NDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRXhwb3NlIG1hY3JvIHRvIGRvY3MgYW5kIGZpeCBsaW5rIHRvIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RwYWQuYzoKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgRXhwb3NlIG1hY3JvIHRvIGRvY3MgYW5kIGZpeCBsaW5rIHRvIGl0LgotCi0yMDA4LTAzLTI3IDE1OjIzOjU1ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogV2hlbiBjYWxjdWxhdGluZyBHRFAgYm9keSBDUkMsIHVzZSB0aGUgY29ycmVjdCBwb2ludGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKLQkgIChnc3RfZHBfcGFja2V0X2Zyb21fZXZlbnRfMV8wKToKLQkgIFdoZW4gY2FsY3VsYXRpbmcgR0RQIGJvZHkgQ1JDLCB1c2UgdGhlIGNvcnJlY3QgcG9pbnRlci4KLQkgIEZpeGVzIHBhcnQgb2YgIzUyMjQwMS4KLQotMjAwOC0wMy0yNCAxNjo1NjozNiArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBJZGVudGl0eSBpcyBub3QgYWx3YXlzIGEgcGFzc3Rocm91Z2ggZWxlbWVudCwgaXQgY2FuIG1vZGlmeSB0aGUgYnVmZmVyIHRpbWVzdGFtcHMgd2hlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgYXQgc2t5bmV0IGJlPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2lkZW50aXR5X2luaXQpLCAoZ3N0X2lkZW50aXR5X3ByZXBhcmVfb3V0cHV0X2J1ZmZlcik6Ci0JICBJZGVudGl0eSBpcyBub3QgYWx3YXlzIGEgcGFzc3Rocm91Z2ggZWxlbWVudCwgaXQgY2FuIG1vZGlmeSB0aGUgYnVmZmVyCi0JICB0aW1lc3RhbXBzIHdoZW4gaXQgaGFzIGEgZGF0YXJhdGUgYW5kIG9wZXJhdGVzIGluIHNpbmdsZS1zZWdtZW50IG1vZGUuCi0JICBXZSB0aGVyZWZvcmUgbWFrZSBpdCBhbiBpbl9wbGFjZSBmaWx0ZXIgd2l0aCBhIGN1c3RvbSBidWZmZXIgcHJlcGFyZQotCSAgZnVuY3Rpb24gdGhhdCBjb25kaXRpb25hbGx5IG1ha2VzIHRoZSBpbnB1dCBidWZmZXIgbWV0YWRhdGEgd3JpdGFibGUKLQkgIHdoZW4gbmVlZGVkLiAgRml4ZXMgIzUyMzk4NS4KLQotMjAwOC0wMy0yNCAxNjo0NDoyNSArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgU21hbGwgZG9jdW1lbnRhdGlvbiBmaXhlcy4gRml4ZXMgIzUyMzk3OC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1dyBhdCBza3luZXQgYmU+Ci0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBTbWFsbCBkb2N1bWVudGF0aW9uIGZpeGVzLiBGaXhlcyAjNTIzOTc4LgotCi0yMDA4LTAzLTI0IDE2OjMxOjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzLzogQWxzbyByZXRyeSBvdXIgcG9sbF93YWl0IHdoZW4gd2UgZ2V0IEVBR0FJTi4gRml4ZXMgIzUyNDA0MS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfcmVuZGVyKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19jcmVhdGUpOgotCSAgQWxzbyByZXRyeSBvdXIgcG9sbF93YWl0IHdoZW4gd2UgZ2V0IEVBR0FJTi4gRml4ZXMgIzUyNDA0MS4KLQotMjAwOC0wMy0yNCAxMDozODozMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IFdoZW4gdHJ5aW5nIHRvIG1ha2Ugcm9vbSBpbiB0aGUgcXVldWUsIGJ1bXAgdGhlIG1heCBhbGxvd2VkIGJ1ZmZlcnMgYmlnZ2VyIHRoYW4gdGhlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChzaW5nbGVfcXVldWVfb3ZlcnJ1bl9jYiksCi0JICAoc2luZ2xlX3F1ZXVlX3VuZGVycnVuX2NiKToKLQkgIFdoZW4gdHJ5aW5nIHRvIG1ha2Ugcm9vbSBpbiB0aGUgcXVldWUsIGJ1bXAgdGhlIG1heCBhbGxvd2VkIGJ1ZmZlcnMKLQkgIGJpZ2dlciB0aGFuIHRoZSBjdXJyZW50IGFtb3VudCBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZS4gdGhpcyBmaXhlcyBzb21lCi0JICBuYXN0eSBkZWFkbG9ja3MgaW4gbXVsdGlxdWV1ZSB3aGVuIGR5bmFtaWNhbGx5IGNoYW5naW5nIHRoZSBsaW1pdHMgb2YKLQkgIHRoZSBxdWV1ZS4KLQotMjAwOC0wMy0yNCAxMDozMzo0MSArMDAwMCAgSm9zw6kgQWxidXJxdWVycXVlIDxqYWFsYnVycXVAc3ZuLmdub21lLm9yZz4KLQotCSAgZ3N0L2dzdGNhcHMuKjogQ29uc3RpZnkgdGhlIGZpZWxkIGdjaGFyICogcGFyYW1zIGluIHNldF9zaW1wbGUgYW5kIGZyaWVuZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiAgSm9zw6kgQWxidXJxdWVycXVlIDxqYWFsYnVycXUgYXQgc3ZuIGRvdCBnbm9tZSBkb3Qgb3JnPgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfc2V0X3NpbXBsZSksCi0JICAoZ3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3QpLCAoZ3N0X2NhcHNfaW50ZXJzZWN0KToKLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgIENvbnN0aWZ5IHRoZSBmaWVsZCBnY2hhciAqIHBhcmFtcyBpbiBzZXRfc2ltcGxlIGFuZCBmcmllbmRzLgotCSAgRml4ZXMgIzUyMjMyNi4KLQotMjAwOC0wMy0yNCAxMDoyOTowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IFRyYW5zZm9ybSBhIEdzdE9iamVjdCB0byBhIG1vcmUgbWVhbmluZ2Z1bGwgc3RyaW5nIHRoYXQgaW5jbHVkZXMgdGhlIG9iamVjdCB0eXBlIGluIGFkZGl0aW9uIHRvIGl0cyBuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfdHJhbnNmb3JtX29iamVjdF9zdHJpbmcpOgotCSAgVHJhbnNmb3JtIGEgR3N0T2JqZWN0IHRvIGEgbW9yZSBtZWFuaW5nZnVsbCBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUKLQkgIG9iamVjdCB0eXBlIGluIGFkZGl0aW9uIHRvIGl0cyBuYW1lLgotCi0yMDA4LTAzLTIzIDE1OjE3OjI0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIENoYW5nZUxvZzogQ2hhbmdlTG9nIHN1cmdlcnkgdG8gYWRkIGJ1Z251bWJlciB0byBjb21taXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkgdG8gYWRkIGJ1Z251bWJlciB0byBjb21taXQuCi0KLTIwMDgtMDMtMjMgMTQ6MjQ6NDggKzAwMDAgIFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEZpeCBjb25mdXNpbmcgZG9jdW1lbnRhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSk6IEZpeCBjb25mdXNpbmcgZG9jdW1lbnRhdGlvbi4KLQotMjAwOC0wMy0yMyAxMTo0MDo1NCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogUmVuYW1lIGNvbnN0YW50IGV2ZXJ5d2hlcmUgYW5kIGRvbid0IGZvcmdldCBvbmUgb2NjdXJlbmNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZSk6Ci0JICBSZW5hbWUgY29uc3RhbnQgZXZlcnl3aGVyZSBhbmQgZG9uJ3QgZm9yZ2V0IG9uZSBvY2N1cmVuY2UuCi0KLTIwMDgtMDMtMjMgMTE6Mjk6NTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IEFsaWduIG1lbW9yeSB0byB0aGUgcG9pbnRlciBzaXplIGV2ZW4gaWYgdGhlIGFyY2hpdGVjdHVyZSBhbGxvd3MgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MuIFVuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlKToKLQkgIEFsaWduIG1lbW9yeSB0byB0aGUgcG9pbnRlciBzaXplIGV2ZW4gaWYgdGhlIGFyY2hpdGVjdHVyZSBhbGxvd3MKLQkgIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLiBVbmFsaWduZWQgbWVtb3J5IGFjY2VzcyB1c3VhbGx5IGNvbWVzIHdpdGgKLQkgIHBlcmZvcm1hbmNlIHBlbmFsaXR5LgotCi0yMDA4LTAzLTIzIDExOjIzOjMwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBBbGlnbiBtZW1vcnkgdG8gdGhlIHBvaW50ZXIgc2l6ZSBpbnN0ZWFkIG9mIGFsd2F5cyAzMiBiaXQuIEZpeGVzIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMgby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jaGVja19tYWdpYyksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BhZF90ZW1wbGF0ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pOgotCSAgQWxpZ24gbWVtb3J5IHRvIHRoZSBwb2ludGVyIHNpemUgaW5zdGVhZCBvZiBhbHdheXMgMzIgYml0LiBGaXhlcwotCSAgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcyBvbiBpYTY0IGFuZCBmcmllbmRzLgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKLQkgIEJ1bXAgYmluYXJ5IHJlZ2lzdHJ5IGZvcm1hdCB2ZXJzaW9uIGZvciB0aGlzIGFzIGl0IGNoYW5nZXMgdGhlCi0JICBmb3JtYXQgb24gdGhvc2UgYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IGhhdmUgdW5hbGlnbmVkIGFjY2VzcwotCSAgYW5kIDY0IGJpdCBwb2ludGVycy4KLQotMjAwOC0wMy0yMiAxNDo1NjoxNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBEZWZpbmUgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyBpZiBpdCdzIHVuZGVmaW5lZCAoR0xpYiA8IDIuMTMuMCkgYW5kIHVzZSBpdCBldmVyeXdoZXJlIGZvciBHUGFyYW1TcGVjcyB0aGF0IHVzZSBzdGF0aWMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKLQkgICogZG9jcy9wd2cvYnVpbGRpbmctcHJvcHMueG1sOgotCSAgKiBkb2NzL3B3Zy9vdGhlci1zb3VyY2UueG1sOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuaDoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KToKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzogKGdzdF9kYXRhX3F1ZXVlX2NsYXNzX2luaXQpOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoX2dzdF9jaGVja19mYXVsdF9oYW5kbGVyX3Jlc3RvcmUpLAotCSAgKF9nc3RfY2hlY2tfZmF1bHRfaGFuZGxlcl9zaWdoYW5kbGVyKSwKLQkgIChfZ3N0X2NoZWNrX2ZhdWx0X2hhbmRsZXJfc2V0dXApLCAoZ3N0X2NoZWNrX2luaXQpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIChfZ3N0X2NvbnRyb2xsZXJfY2xhc3NfaW5pdCk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSAgKGdzdF9sZm9fY29udHJvbF9zb3VyY2VfY2xhc3NfaW5pdCk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2NsYXNzX2luaXQpOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzogKGdzdF9mZF9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6IChnc3RfZmlsZV9pbmRleF9jbGFzc19pbml0KToKLQkgIERlZmluZSBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIGlmIGl0J3MgdW5kZWZpbmVkIChHTGliIDwgMi4xMy4wKSBhbmQKLQkgIHVzZSBpdCBldmVyeXdoZXJlIGZvciBHUGFyYW1TcGVjcyB0aGF0IHVzZSBzdGF0aWMgc3RyaW5ncyAoaS5lLiBhbGwpLgotCSAgVGhpcyBnaXZlcyB1cyBsZXNzIG1lbW9yeSB1c2FnZSwgZmV3ZXIgYWxsb2NhdGlvbnMgYW5kIHRodXMgbGVzcwotCSAgbWVtb3J5IGRlZnJhZ21lbnRhdGlvbi4gRml4ZXMgYnVnICM1MjM4MDYuCi0KLTIwMDgtMDMtMjIgMTQ6NTE6MTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgQVBJOiBBZGQgR1NUX0lTX1BBUkFNX1NQRUNfTUlOSV9PQkpFQ1QsIEdTVF9QQVJBTV9TUEVDX01JTklfT0JKRUNUCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF92YWx1ZV9kdXBfbWluaV9vYmplY3QpLAotCSAgKGdzdF9wYXJhbV9zcGVjX21pbmlfb2JqZWN0KToKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBBUEk6IEFkZCBHU1RfSVNfUEFSQU1fU1BFQ19NSU5JX09CSkVDVCwgR1NUX1BBUkFNX1NQRUNfTUlOSV9PQkpFQ1QKLQkgIEdTVF9UWVBFX1BBUkFNX01JTklfT0JKRUNUIGFuZCBnc3RfdmFsdWVfZHVwX21pbmlfb2JqZWN0LiBBbHNvIG1vdmUKLQkgIEdzdFBhcmFtU3BlY01pbmlPYmplY3QgaW50byBhIHB1YmxpYyBoZWFkZXIgZm9yIHRoaXMuCi0JICBUaGlzIG1ha2UgR3N0TWluaU9iamVjdCBhIGJpdCBtb3JlIGNvbnNpc3RlbnQgd2l0aCBHT2JqZWN0IGFuZCBtYWtlcwotCSAgaXQgcG9zc2libGUgdG8gZXh0ZW5kIHRoZSBwYXJhbSBzcGVjcy4KLQkgIGdzdF92YWx1ZV9kdXBfbWluaV9vYmplY3QgaXMgbWFpbmx5IHVzZWZ1bCBmb3Igc2V0X3Byb3BlcnR5IG1ldGhvZHMuCi0JICBGaXhlcyBidWcgIzUyMzc5OC4KLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKLQkgIFByaW50IHNvbWV0aGluZyB1c2VmdWwgZm9yIEdzdE1pbmlPYmplY3QgcHJvcGVydGllcyBhbmQgbm90IGp1c3QKLQkgICJ1bmtub3duIHR5cGUiLgotCi0yMDA4LTAzLTIxIDE2OjExOjUxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIENhbGwgdGhlIHZlcnNpb24gR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUiB0byBiZSBtb3JlIGNvbnNpc3RlbnQgYW5kIGFkZCBpdCB0byB0aGUgKHByaXZhdGUgcGFydCkgb2YgdGhlIGRvY3MgdG8gZi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9pbml0aWFsaXplX21hZ2ljKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6Ci0JICBDYWxsIHRoZSB2ZXJzaW9uIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9TVFIgdG8gYmUgbW9yZSBjb25zaXN0ZW50Ci0JICBhbmQgYWRkIGl0IHRvIHRoZSAocHJpdmF0ZSBwYXJ0KSBvZiB0aGUgZG9jcyB0byBmaXggdGhlIGJ1aWxkLgotCi0yMDA4LTAzLTIxIDE1OjUyOjE0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS4qOiBEb24ndCB1c2UgR1NUX01BSk9STUlOT1IgZm9yIHRoZSBiaW5hcnkgcmVnaXN0cnkgdmVyc2lvbi4gSW5zdGVhZCBoYXJkY29kZSBhIHZhbHVlIHRoYXQgbXVzdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9pbml0aWFsaXplX21hZ2ljKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKLQkgIERvbid0IHVzZSBHU1RfTUFKT1JNSU5PUiBmb3IgdGhlIGJpbmFyeSByZWdpc3RyeSB2ZXJzaW9uLiBJbnN0ZWFkCi0JICBoYXJkY29kZSBhIHZhbHVlIHRoYXQgbXVzdCBiZSBjaGFuZ2VkIHdoZW5ldmVyIHRoZSBmb3JtYXQgY2hhbmdlcwotCSAgaW4gYW4gaW5jb21wYXRpYmxlIHdheS4KLQkgIEFsc28gZG9uJ3QgR1NUX0VSUk9SIHdoZW4gdGhlcmUgaXMgYSB2ZXJzaW9uIG1pc21hdGNoLCBqdXN0Ci0JICByZWdlbmVyYXRlIHRoZSByZWdpc3RyeSBzaWxlbnRseS4KLQotMjAwOC0wMy0yMSAwMDozNToxMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBkZXZlbG9wbWVudCAtIDAuMTAuMTguMQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQgLSAwLjEwLjE4LjEKLQotPT09IHJlbGVhc2UgMC4xMC4xOCA9PT0KLQotMjAwOC0wMy0yMSAwMDoyMDo1OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjE4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbGVhc2UgMC4xMC4xOAotCi0yMDA4LTAzLTIwIDIzOjI2OjA1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwOC0wMy0xOCAxMjoxNzo1OCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIDAuMTAuMTcuNCBwcmUtcmVsZWFzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgMC4xMC4xNy40IHByZS1yZWxlYXNlCi0KLTIwMDgtMDMtMTggMTA6NTQ6NTIgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIEFkZCBuZXcgZnVuY3Rpb24gZ3N0X3BvbGxfZmRfaWdub3JlZCgpIGZvciBpbXByb3ZlZCBXaW5kb3dzIGNvbXBhdGliaWxpdHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMKLQkgIDxvbGUgZG90IGFuZHJlIGRvdCByYXZuYXMgYXQgdGFuZGJlcmcgZG90IGNvbT4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHBvbGwuYzogKGdzdF9wb2xsX3dpbnNvY2tfZXJyb3JfdG9fZXJybm8pLAotCSAgKGdzdF9wb2xsX3VwZGF0ZV93aW5zb2NrX2V2ZW50X21hc2spLAotCSAgKGdzdF9wb2xsX3ByZXBhcmVfd2luc29ja19hY3RpdmVfc2V0cyksCi0JICAoZ3N0X3BvbGxfY29sbGVjdF93aW5zb2NrX2V2ZW50cyksIChnc3RfcG9sbF9uZXcpLCAoZ3N0X3BvbGxfZnJlZSksCi0JICAoZ3N0X3BvbGxfYWRkX2ZkX3VubG9ja2VkKSwgKGdzdF9wb2xsX2ZkX2N0bF93cml0ZSksCi0JICAoZ3N0X3BvbGxfZmRfY3RsX3JlYWRfdW5sb2NrZWQpLCAoZ3N0X3BvbGxfZmRfaWdub3JlZCksCi0JICAoZ3N0X3BvbGxfZmRfaGFzX2Vycm9yKSwgKGdzdF9wb2xsX2ZkX2Nhbl9yZWFkX3VubG9ja2VkKSwKLQkgIChnc3RfcG9sbF9jaGVja19jdHJsX2NvbW1hbmRzKSwgKGdzdF9wb2xsX3dhaXQpOgotCSAgKiBnc3QvZ3N0cG9sbC5oOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEFkZCBuZXcgZnVuY3Rpb24gZ3N0X3BvbGxfZmRfaWdub3JlZCgpIGZvciBpbXByb3ZlZCBXaW5kb3dzCi0JICBjb21wYXRpYmlsaXR5LgotCSAgVmFyaW91cyBtaW5vciBmaXhlcyBhbmQgY2xlYW51cHMuIFNlZSAjNTIwODA4LgotCi0yMDA4LTAzLTE3IDEwOjIxOjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0aW5kZXguKjogRG9uJ3QgZnJlZSBrZXkgc3RyaW5ncyB3aGljaCB3ZSBkb24ndCBvd24uIEZpeGVzIGNyYXNoIGluIGdzdF9pbmRleF9lbnRyeV9mcmVlKCkgKCM1MjI3NDEpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X2VudHJ5X2ZyZWUpOgotCSAgKiBnc3QvZ3N0aW5kZXguaDoKLQkgIERvbid0IGZyZWUga2V5IHN0cmluZ3Mgd2hpY2ggd2UgZG9uJ3Qgb3duLiBGaXhlcyBjcmFzaCBpbgotCSAgZ3N0X2luZGV4X2VudHJ5X2ZyZWUoKSAoIzUyMjc0MSkuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGluZGV4LmM6ICh0ZXN0X2luZGV4X2VudHJpZXMpLAotCSAgKGdzdF9pbmRleF9zdWl0ZSksIChnc3RfaW5kZXgpOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhlIGFib3ZlLgotCi0yMDA4LTAzLTExIDE0OjA5OjQ2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBSZW1vdmUgc3ltYm9scyB0aGF0IHdlcmUgcmVtb3ZlZCByZWNlbnRseS4gRml4ZXMgYnVnICM1MjE3NDAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBSZW1vdmUgc3ltYm9scyB0aGF0IHdlcmUgcmVtb3ZlZCByZWNlbnRseS4gRml4ZXMgYnVnICM1MjE3NDAuCi0KLTIwMDgtMDMtMTEgMDA6MjQ6MTggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICAwLjEwLjE3LjMgcHJlLXJlbGVhc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMTcuMyBwcmUtcmVsZWFzZQotCi0yMDA4LTAzLTExIDAwOjIzOjAyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBSZWxlYXNlIDAuMTAuMTcuMwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFJlbGVhc2UgMC4xMC4xNy4zCi0KLTIwMDgtMDMtMDcgMTU6Mzk6NDUgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIFJlbW92ZSBHc3RQb2xsTW9kZSBmcm9tIHRoZSBBUEksIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gbGV0IHRoZSBhcHBsaWNhdGlvbiBjb250cm9sIHRoaXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMKLQkgIDxvbGUgZG90IGFuZHJlIGRvdCByYXZuYXMgYXQgdGFuZGJlcmcgZG90IGNvbT4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHBvbGwuYzogKGZpbmRfaW5kZXgpLCAoZ3N0X3BvbGxfZnJlZV93aW5zb2NrX2V2ZW50KSwKLQkgIChnc3RfcG9sbF91cGRhdGVfd2luc29ja19ldmVudF9tYXNrKSwgKGdzdF9wb2xsX25ldyksCi0JICAoZ3N0X3BvbGxfZnJlZSksIChnc3RfcG9sbF9mZF9pbml0KSwgKGdzdF9wb2xsX2FkZF9mZF91bmxvY2tlZCksCi0JICAoZ3N0X3BvbGxfcmVtb3ZlX2ZkKSwgKGdzdF9wb2xsX2ZkX2N0bF93cml0ZSksCi0JICAoZ3N0X3BvbGxfZmRfY3RsX3JlYWRfdW5sb2NrZWQpLCAoZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCksCi0JICAoZ3N0X3BvbGxfZmRfaGFzX2Vycm9yKSwgKGdzdF9wb2xsX2ZkX2Nhbl9yZWFkX3VubG9ja2VkKSwKLQkgIChnc3RfcG9sbF9mZF9jYW5fd3JpdGUpLCAoZ3N0X3BvbGxfd2FpdCksCi0JICAoZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSksIChnc3RfcG9sbF9yZXN0YXJ0KSwKLQkgIChnc3RfcG9sbF9zZXRfZmx1c2hpbmcpOgotCSAgKiBnc3QvZ3N0cG9sbC5oOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogKGdzdF9uZXRfdGltZV9wcm92aWRlcl9zdGFydCksCi0JICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19zdGFydCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfc3RhcnQpOgotCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYzogKG1haW4pOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cG9sbC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3BvbGxfc3VpdGUpOgotCSAgUmVtb3ZlIEdzdFBvbGxNb2RlIGZyb20gdGhlIEFQSSwgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBsZXQgdGhlCi0JICBhcHBsaWNhdGlvbiBjb250cm9sIHRoaXMuCi0JICBBZGQgc3VwcG9ydCBmb3IgV2luMzIuCi0JICBGaXggdGhlIHRlc3RzdWl0ZS4gRml4ZXMgIzUyMDY3MS4KLQotMjAwOC0wMy0wNyAxMzoxOToxMiArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IEluY2x1ZGUgaW8uaCBmb3Igd3JpdGUoKSBhbmQgY2xvc2UoKSB3aGVuIGJ1aWxkaW5nIHdpdGggTVNWQy4gRml4ZXMgYnVnICM1MjA4NzcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMKLQkgIDxvbGUgZG90IGFuZHJlIGRvdCByYXZuYXMgYXQgdGFuZGJlcmcgZG90IGNvbT4KLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6Ci0JICBJbmNsdWRlIGlvLmggZm9yIHdyaXRlKCkgYW5kIGNsb3NlKCkgd2hlbiBidWlsZGluZyB3aXRoIE1TVkMuIEZpeGVzCi0JICBidWcgIzUyMDg3Ny4KLQotMjAwOC0wMy0wNyAxMToxMjo1OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBNb3ZlIHJlZ2lzdHJ5IGJhY2tlbmQgQVBJIHRvIHByaXZhdGUgaGVhZGVycyB3aGVyZSB3ZSBjYW4uIEFkZCBmaXhtZS0wLjExIGNvbW1lbnRzIGZvciB0aGUgb3RoZXJzLiBBZGQgc3R1YnMgZm9yIHRoZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgICogd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOgotCSAgTW92ZSByZWdpc3RyeSBiYWNrZW5kIEFQSSB0byBwcml2YXRlIGhlYWRlcnMgd2hlcmUgd2UgY2FuLiBBZGQKLQkgIGZpeG1lLTAuMTEgY29tbWVudHMgZm9yIHRoZSBvdGhlcnMuIEFkZCBzdHVicyBmb3IgdGhlIHhtbCBiYWNrZW5kIHdoZW4KLQkgIHVzaW5nIHRoZSBiaW5hcnkgdG8gZW5zdXJlIHRoZXkgZnVuY3Rpb25zIGV4aXN0cyAodGhleSBzaG91bGQgbm90IGJlCi0JICB1c2VkIHRob3VnaCkuIEZpeGVzICM1MjA3NTYuCi0KLTIwMDgtMDMtMDQgMDA6MTQ6NTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICAwLjEwLjE3LjIgcHJlbGVhc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMTcuMiBwcmVsZWFzZQotCi0yMDA4LTAzLTAzIDE4OjQyOjA0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBTd2l0Y2ggdG8gdXNpbmcgcG9ydGFibCBnc2l6ZS9nc3NpemUgaW5zdGVhZCBvZiBzaXplX3Qvc3NpemVfdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChnc3RfcmVnaXN0cnlfc2F2ZSk6Ci0JICAqIGdzdC9nc3R1cmkuYzogKHVuZXNjYXBlX3N0cmluZyksIChnc3RfdXJpX2hhc19wcm90b2NvbCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3Npbmtfb3Blbl9maWxlKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfbWFwX3JlZ2lvbiksCi0JICAoZ3N0X2ZpbGVfc3JjX21hcF9zbWFsbF9yZWdpb24pLCAoZ3N0X2ZpbGVfc3JjX2NyZWF0ZV9tbWFwKToKLQkgIFN3aXRjaCB0byB1c2luZyBwb3J0YWJsIGdzaXplL2dzc2l6ZSBpbnN0ZWFkIG9mIHNpemVfdC9zc2l6ZV90Ci0JICBGaXhlcyAjNTIwMTUyCi0KLTIwMDgtMDMtMDMgMTg6MTQ6MzMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RtaW5pb2JqZWN0LmM6IEltcG9ydCBnc3RfcHJpdmF0ZS5oIGJlZm9yZSBhbnkgb3RoZXIgaGVhZGVyIHRoYXQgbWlnaHQgaW5jbHVkZSBvdGhlciBnbGliIGhlYWRlcnMuIFRoaXMgZml4ZXMgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBJbXBvcnQgZ3N0X3ByaXZhdGUuaCBiZWZvcmUgYW55IG90aGVyIGhlYWRlciB0aGF0IG1pZ2h0IGluY2x1ZGUgb3RoZXIKLQkgIGdsaWIgaGVhZGVycy4gVGhpcyBmaXhlcyB0aGUgYnVpbGQgb24gd2luZG93cyB1c2luZyBuYXRpdmUgY29tcGlsZXJzLgotCi0yMDA4LTAzLTAzIDE0OjQ4OjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB3aW4zMi9jb21tb24vZ3N0Y29uZmlnLmg6IEFkZCBoZXJlIHRvbywganVzdCBmb3IgY29tcGxldGVuZXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDoKLQkgIEFkZCBoZXJlIHRvbywganVzdCBmb3IgY29tcGxldGVuZXNzLgotCi0yMDA4LTAzLTAzIDE0OjQzOjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBGaXggYnJva2VuIHVzZSBvZiBjb25maWcuaC1kZWZpbmVkIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaW4gYSBwdWJsaWMgaGVhZGVyIGZpbGUuIEFkZCBhIGNvcnJlc3BvbmRpbmcgZGVmaW5lIHRvIGdzdGMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JICBGaXggYnJva2VuIHVzZSBvZiBjb25maWcuaC1kZWZpbmVkIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaW4gYSBwdWJsaWMKLQkgIGhlYWRlciBmaWxlLiBBZGQgYSBjb3JyZXNwb25kaW5nIGRlZmluZSB0byBnc3Rjb25maWcuaCwgc2luY2Ugd2UgY2FuJ3QKLQkgIHJlYWxseSByZW1vdmUgdGhvc2UgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZyb20gdGhlIGhlYWRlciBmaWxlIG5vdwotCSAgKG9yIGNhbiB3ZT8gYW5kIHdoeSBhcmUgdGhleSB0aGVyZSBpbiB0aGUgZmlyc3QgcGxhY2U/KS4KLQotMjAwOC0wMy0wMyAxMDowNzoyMSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmMgKEdTVF9TVEFSVF9URVNUKTogQWRkIGEgY2hlY2sgZm9yIHRoZSBuZXcgd2FybmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0wMy0wMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jIChHU1RfU1RBUlRfVEVTVCk6IEFkZCBhIGNoZWNrIGZvcgotCSAgdGhlIG5ldyB3YXJuaW5nLgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmMgKGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcpOiBXYXJuIGlmCi0JICBzdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgZGlkbid0IGNvbnN1bWUgdGhlIHdob2xlIHN0cmluZywgYnV0IHRoZQotCSAgY2FsbGVyIGRpZCBub3QgcHJvdmlkZSBhbiBlbmQgcG9pbnRlci4KLQotMjAwOC0wMy0wMSAxMToyMTozMCArMDAwMCAgRmFicml6aW8gR2VubmFyaSA8ZmFicml6aW8uZ2VAdGlzY2FsaS5pdD4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IFN0cmluZ3MgYWxsb2NhdGVkIGJ5IGxpYnhtbDIgc2hvdWxkIGJlIGZyZWVkIHdpdGggeG1sRnJlZSgpLCBub3Qgd2l0aCBnX2ZyZWUoKS4gRml4ZXMgaXNzdWVzIG9uLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBGYWJyaXppbyBHZW5uYXJpIDxmYWJyaXppby5nZSBhdCB0aXNjYWxpIGl0PgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKHJlYWRfc3RyaW5nKSwgKGxvYWRfZmVhdHVyZSk6Ci0JICBTdHJpbmdzIGFsbG9jYXRlZCBieSBsaWJ4bWwyIHNob3VsZCBiZSBmcmVlZCB3aXRoIHhtbEZyZWUoKSwgbm90Ci0JICB3aXRoIGdfZnJlZSgpLiBGaXhlcyBpc3N1ZXMgb24gd2luZG93cyBpbiBjZXJ0YWluIGNvbnRleHRzICgjNTE5Njk4KS4KLQotMjAwOC0wMi0yOSAxODozODo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGludGVyZmFjZS5jOiBEb24ndCBjcmFzaCBpZiB0aGUgZWxlbWVudCBzdXBwb3J0cyB0aGUgaW50ZXJmYWNlIHF1ZXJpZWQsIGJ1dCBkb2VzIG5vdCBpbXBsZW1lbnQgR3N0SW1wbGVtZW50c0luLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGludGVyZmFjZS5jOiAoZ3N0X2VsZW1lbnRfaW1wbGVtZW50c19pbnRlcmZhY2UpOgotCSAgRG9uJ3QgY3Jhc2ggaWYgdGhlIGVsZW1lbnQgc3VwcG9ydHMgdGhlIGludGVyZmFjZSBxdWVyaWVkLCBidXQgZG9lcwotCSAgbm90IGltcGxlbWVudCBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlLiBGaXhlcyAjNTE5NTg0LgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZ3N0Ly5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbnRlcmZhY2UuYzoKLQkgIEFkZCB1bml0IHRlc3QgZm9yIHRoZSBhYm92ZS4KLQotMjAwOC0wMi0yOSAxNTozOTo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBTbWFsbCBkb2MgdXBkYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICBTbWFsbCBkb2MgdXBkYXRlLgotCi0yMDA4LTAyLTI5IDE1OjIyOjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0c2VnbWVudC5jOiBJbXByb3ZlIHNvbWUgY29tbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspLAotCSAgKGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lKToKLQkgIEltcHJvdmUgc29tZSBjb21tZW50LgotCSAgVXBkYXRlIHZhcmlhYmxlcyB3aGVyZSBpdCBtYWtlcyBtb3JlIHNlbnNlLgotCi0yMDA4LTAyLTI5IDE0OjIzOjE3ICswMDAwICBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkgIGdzdC9nc3R1cmkuYzogVXNlIHRoZSBnZXRfcHJvdG9jb2xzX2Z1bGwgdmZ1bmMgaWYgZ2V0X3Byb3RvY29scyBpcyBOVUxMLiAgRml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXJpLmM6IChnc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29scyk6Ci0JICBVc2UgdGhlIGdldF9wcm90b2NvbHNfZnVsbCB2ZnVuYyBpZiBnZXRfcHJvdG9jb2xzIGlzIE5VTEwuICBGaXhlcwotCSAgVVJJSGFuZGxlcnMgaW1wbGVtZW50ZWQgdXNpbmcgbGFuZ3VhZ2UgYmluZGluZ3MuCi0KLTIwMDgtMDItMjkgMTM6NTk6MjQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgQW5kIGNvcnJlY3QgZXZlbiBtb3JlIHZhbGlkIHNwYXJzZSB3YXJuaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jOiAoc2V0dXBfZmFrZXNyYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6IChzZXR1cF9mZHNyYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6IChzZXR1cF9maWxlc2luayk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzogKHNldHVwX2ZpbGVzcmMpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZGVudGl0eS5jOiAoc2V0dXBfaWRlbnRpdHkpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzoKLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOgotCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOiAoc2V0dXApLCAodGVhcmRvd24pOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0LmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6IChwdWxsX21lc3NhZ2VzKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzogKG15X2Zvb19pbml0KToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOiAodGhyZWFkX25hbWVfb2JqZWN0KSwKLQkgIChnc3Rfb2JqZWN0X3N1aXRlKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3Rwb2xsLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFzay5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaHBwYS5oOgotCSAgKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaDoKLQkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oOgotCSAgKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0Lmg6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfeDg2XzY0Lmg6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jOiAoY3JlYXRlX2FuZF9maWxsX2FkYXB0ZXIpOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X2hwcGEuaDoKLQkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaTM4Ni5oOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGMzMi5oOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGM2NC5oOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF94ODZfNjQuaDoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3N0cmVzcy5jOgotCSAgQW5kIGNvcnJlY3QgZXZlbiBtb3JlIHZhbGlkIHNwYXJzZSB3YXJuaW5ncy4KLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgZ3N0X3BvbGxfZmRfaW5pdCB0byB0aGUgbGlzdCBvZiBzeW1ib2xzLgotCi0yMDA4LTAyLTI5IDEyOjQxOjMzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIENvcnJlY3QgYWxsIHJlbGV2YW50IHdhcm5pbmdzIGZvdW5kIGJ5IHRoZSBzcGFyc2Ugc2VtYW50aWMgY29kZSBhbmFseXplci4gVGhpcyBpbmNsdWRlIG1hcmtpbmcgc2V2ZXJhbCBzeW1ib2xzIHN0YXRpYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19yZWFkX2J1ZmZlcik6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfbG9nX21lc3NhZ2VfZnVuYyksCi0JICAoZ3N0X2NoZWNrX2xvZ19jcml0aWNhbF9mdW5jKSwgKGdzdF9jaGVja19kcm9wX2J1ZmZlcnMpLAotCSAgKGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX2dldCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfZ2V0X3R5cGUpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOiAoZ3N0X29iamVjdF9jb250cm9sX3Byb3BlcnRpZXMpLAotCSAgKGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xsZXIpLCAoZ3N0X29iamVjdF9nZXRfY29udHJvbF9zb3VyY2UpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmM6Ci0JICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3KToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6Ci0JICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcpOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JICAoZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0XzBfMik6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6IChfZmlsZV9pbmRleF9pZF9zYXZlX3htbCksCi0JICAoZ3N0X2ZpbGVfaW5kZXhfYWRkX2Fzc29jaWF0aW9uKToKLQkgICogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgotCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL2dzdHBvbGxzdHJlc3MuYzogKG1lc3Nfc29tZV9tb3JlKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzogKHNldHVwX3F1ZXVlKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzogKHNldHVwKSwgKHRlYXJkb3duKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX3N1aXRlKToKLQkgICogdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9hZGFwdGVyX3Rlc3QuYzoKLQkgICogdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOiAobWFrZV9waXBlbGluZSk6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3htbC9jcmVhdGV4bWwuYzoKLQkgICogdGVzdHMvZXhhbXBsZXMveG1sL3J1bnhtbC5jOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgKiB0b29scy9nc3QtcnVuLmM6Ci0JICBDb3JyZWN0IGFsbCByZWxldmFudCB3YXJuaW5ncyBmb3VuZCBieSB0aGUgc3BhcnNlIHNlbWFudGljIGNvZGUKLQkgIGFuYWx5emVyLiBUaGlzIGluY2x1ZGUgbWFya2luZyBzZXZlcmFsIHN5bWJvbHMgc3RhdGljLCB1c2luZwotCSAgTlVMTCBpbnN0ZWFkIG9mIDAgZm9yIHBvaW50ZXJzLCBub3QgdXNpbmcgdmFyaWFibGUgc2l6ZWQgYXJyYXlzCi0JICBvbiB0aGUgc3RhY2ssIG1vdmluZyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdG8gdGhlIGJlZ2lubmluZyBvZgotCSAgYSBibG9jayBhbmQgdXNpbmcgImZvbyAodm9pZCkiIGluc3RlYWQgb2YgImZvbyAoKSIgZm9yIGRlY2xhcmF0aW9ucy4KLQotMjAwOC0wMi0yOSAxMjowNTo1NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzLzogRG9uJ3QgcmVzZXQgR3N0UG9sbEZEcywgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGF0IGFsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfdXBkYXRlX2ZkKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY191cGRhdGVfZmQpOgotCSAgRG9uJ3QgcmVzZXQgR3N0UG9sbEZEcywgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGF0IGFsbC4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBvbGwuYzogKHRlc3RfcG9sbF93YWl0KSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChkZWxheWVkX3Jlc3RhcnQpLCAoZGVsYXllZF9jb250cm9sKToKLQkgIFVzZSBHU1RfUE9MTF9GRF9JTklULgotCi0yMDA4LTAyLTI5IDExOjU3OjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cG9sbC4qOiBBZGRlZCBTaW5jZSB0YWdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3Rwb2xsLmM6IChnc3RfcG9sbF9mZF9pbml0KToKLQkgICogZ3N0L2dzdHBvbGwuaDoKLQkgIEFkZGVkIFNpbmNlIHRhZ3MuCi0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua191cGRhdGVfZmQpOgotCSAgVXNlIHNvbWUgbW9yZSBpbml0IG1hY3Jvcy4KLQotMjAwOC0wMi0yOSAxMToyMDowMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IFVzZSBpbml0IG1hY3JvcyBhbmQgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19zdGFydCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfdXBkYXRlX2ZkKToKLQkgIFVzZSBpbml0IG1hY3JvcyBhbmQgZnVuY3Rpb25zLgotCi0yMDA4LTAyLTI5IDExOjAwOjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgSU5JVCBtYWNybyBhbmQgX2luaXQgbWV0aG9kIGZvciBpbml0aWFsaXppbmcgdGhlIEdzdFBvbGxGRC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0cG9sbC5jOiAoZ3N0X3BvbGxfZmRfaW5pdCk6Ci0JICAqIGdzdC9nc3Rwb2xsLmg6Ci0JICBBZGQgSU5JVCBtYWNybyBhbmQgX2luaXQgbWV0aG9kIGZvciBpbml0aWFsaXppbmcgdGhlIEdzdFBvbGxGRC4KLQotMjAwOC0wMi0yOCAxOTo1ODoyNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBJbml0aWFsaXplIHNvbWUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXMgc3BvdHRlZCBieSB2YWxncmluZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3Npbmtfc3RhcnQpLAotCSAgKGdzdF9mZF9zaW5rX3VwZGF0ZV9mZCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfdXBkYXRlX2ZkKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBvbGwuYzogKHRlc3RfcG9sbF93YWl0KSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChkZWxheWVkX3Jlc3RhcnQpLCAoZGVsYXllZF9jb250cm9sKToKLQkgIEluaXRpYWxpemUgc29tZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcyBzcG90dGVkIGJ5IHZhbGdyaW5kLgotCi0yMDA4LTAyLTI4IDE1OjI1OjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9iZW5jaG1hcmtzLzogQWRkIHBvbGwgc3RyZXNzIHRlc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvYmVuY2htYXJrcy9nc3Rwb2xsc3RyZXNzLmM6IChtZXNzX3NvbWVfbW9yZSksIChydW5fdGVzdCksCi0JICAobWFpbik6Ci0JICBBZGQgcG9sbCBzdHJlc3MgdGVzdC4KLQotMjAwOC0wMi0yOCAxMDoxODowMiArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvOiBQb3J0IHRvIEdzdFBvbGwuIFNlZSAjNTA1NDE3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXQgYXhpcyBkb3QgY29tPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfcmVuZGVyKSwKLQkgIChnc3RfZmRfc2lua19zdGFydCksIChnc3RfZmRfc2lua19zdG9wKSwgKGdzdF9mZF9zaW5rX3VubG9jayksCi0JICAoZ3N0X2ZkX3NpbmtfdW5sb2NrX3N0b3ApLCAoZ3N0X2ZkX3NpbmtfdXBkYXRlX2ZkKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY191cGRhdGVfZmQpLAotCSAgKGdzdF9mZF9zcmNfc3RhcnQpLCAoZ3N0X2ZkX3NyY19zdG9wKSwgKGdzdF9mZF9zcmNfdW5sb2NrKSwKLQkgIChnc3RfZmRfc3JjX3VubG9ja19zdG9wKSwgKGdzdF9mZF9zcmNfY3JlYXRlKSwKLQkgIChnc3RfZmRfc3JjX3VyaV9zZXRfdXJpKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5oOgotCSAgUG9ydCB0byBHc3RQb2xsLiBTZWUgIzUwNTQxNy4KLQotMjAwOC0wMi0yNyAyMToxODozMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOiBBZGQgbmV3IGdzdF9wb2xsXyBzeW1ib2xzIHRvIHdpbjMyIGRlZnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgbmV3IGdzdF9wb2xsXyBzeW1ib2xzIHRvIHdpbjMyIGRlZnMuCi0KLTIwMDgtMDItMjcgMTk6MDE6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFVzZSBhIHByaXZhdGUgc3R1Y3QgdG8gbm90IGJyZWFrIEFCSS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19jbGFzc19pbml0KSwgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2luaXQpLAotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2ZpbmFsaXplKSwgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2RvX3NlbGVjdCksCi0JICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfdGhyZWFkKSwgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3N0YXJ0KSwKLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19zdG9wKSwgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2NsYXNzX2luaXQpLCAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2luaXQpLAotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9maW5hbGl6ZSksIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfdGhyZWFkKSwKLQkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfc3RhcnQpLCAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N0b3ApLAotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcpOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6Ci0JICBVc2UgYSBwcml2YXRlIHN0dWN0IHRvIG5vdCBicmVhayBBQkkuCi0KLTIwMDgtMDItMjcgMTg6Mjc6NTkgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBsaWJzL2dzdC9uZXQvOiBNYXNzaXZlIGNvZGUgcmVtb3ZhbCBhbmQgY2xlYW51cHMgYmVjYXVzZSBvZiBHc3RQb2xsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXQgYXhpcyBkb3QgY29tPgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2luaXQpLAotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2ZpbmFsaXplKSwgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2RvX3NlbGVjdCksCi0JICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfdGhyZWFkKSwgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3N0YXJ0KSwKLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19zdG9wKSwgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfaW5pdCksCi0JICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2ZpbmFsaXplKSwgKGdzdF9uZXRfdGltZV9wcm92aWRlcl90aHJlYWQpLAotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9zdGFydCksIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfc3RvcCksCi0JICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDoKLQkgIE1hc3NpdmUgY29kZSByZW1vdmFsIGFuZCBjbGVhbnVwcyBiZWNhdXNlIG9mIEdzdFBvbGwuCi0JICBGaXhlcyAjNTA1NDE3LgotCi0yMDA4LTAyLTI3IDE4OjAwOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEFkZCBjaGVja3MgZm9yIHBvbGwsIHBwb2xsIGFuZCBwc2VsZWN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEFkZCBjaGVja3MgZm9yIHBvbGwsIHBwb2xsIGFuZCBwc2VsZWN0LgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgQWRkIGRvY3MgZm9yIEdzdFBvbGwuCi0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdC5oOgotCSAgKiBnc3QvZ3N0cG9sbC5jOiAoZmluZF9pbmRleCksIChzZWxlY3RhYmxlX2ZkcyksCi0JICAocG9sbGFibGVfdGltZW91dCksIChjaG9vc2VfbW9kZSksIChwb2xsZmRfdG9fZmRfc2V0KSwKLQkgIChmZF9zZXRfdG9fcG9sbGZkKSwgKGdzdF9wb2xsX25ldyksIChnc3RfcG9sbF9mcmVlKSwKLQkgIChnc3RfcG9sbF9zZXRfbW9kZSksIChnc3RfcG9sbF9nZXRfbW9kZSksCi0JICAoZ3N0X3BvbGxfYWRkX2ZkX3VubG9ja2VkKSwgKGdzdF9wb2xsX2FkZF9mZCksCi0JICAoZ3N0X3BvbGxfcmVtb3ZlX2ZkKSwgKGdzdF9wb2xsX2ZkX2N0bF93cml0ZSksCi0JICAoZ3N0X3BvbGxfZmRfY3RsX3JlYWRfdW5sb2NrZWQpLCAoZ3N0X3BvbGxfZmRfY3RsX3JlYWQpLAotCSAgKGdzdF9wb2xsX2ZkX2hhc19jbG9zZWQpLCAoZ3N0X3BvbGxfZmRfaGFzX2Vycm9yKSwKLQkgIChnc3RfcG9sbF9mZF9jYW5fcmVhZF91bmxvY2tlZCksIChnc3RfcG9sbF9mZF9jYW5fcmVhZCksCi0JICAoZ3N0X3BvbGxfZmRfY2FuX3dyaXRlKSwgKGdzdF9wb2xsX3dhaXQpLAotCSAgKGdzdF9wb2xsX3NldF9jb250cm9sbGFibGUpLCAoZ3N0X3BvbGxfcmVzdGFydCksCi0JICAoZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nKToKLQkgICogZ3N0L2dzdHBvbGwuaDoKLQkgIEFkZCBnZW5lcmljIHBvbGwgYWJzdHJhY3Rpb24uIFdlIGlkZWFsbHkgZG9uJ3Qgd2FudCB0byBoYXZlIHRoaXMgaW4gY29yZQotCSAgaGVyZSBidXQgaW4gZ2xpYiBpbnRlYWQuLi4KLQkgIFRoaXMgY29kZSB3aWxsIGJlIHVzZWQgaW4gdmFyaW91cyBuZXR3b3JrIGVsZW1lbnRzIGFuZCB1bHRpbWF0ZWx5IGZvcgotCSAgdGhlIG5hbm9zZWNvbmQgcHJlY2lzaW9uIG1vbm90b25pYyBjbG9jayAodGhhdCdzIHdoeSBpdCdzIGhlcmUgaW4gY29yZSkuCi0JICBJdCdsbCBhbGxvdyB1cyB0byBpbXBsZW1lbnQgY2FuY2VsYWJsZSBzb2NrZXQgb3BlcmF0aW9ucyBmb3Igd2luZG93cyB0b28uCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cG9sbC5jOiAodGVzdF9wb2xsX3dhaXQpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGRlbGF5ZWRfc3RvcCksIChkZWxheWVkX3Jlc3RhcnQpLCAoZGVsYXllZF9mbHVzaCksCi0JICAoZGVsYXllZF9jb250cm9sKSwgKGdzdF9wb2xsX3N1aXRlKToKLQkgIEFkZCBHc3RQb2xsIHVuaXQgdGVzdC4KLQotMjAwOC0wMi0yNSAxNTozNzozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGZpbHRlci5jOiBJbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgZ3N0X2ZpbHRlcl9ydW4oKS4gRml4ZXMgIzUxODYyNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZmlsdGVyLmM6Ci0JICBJbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgZ3N0X2ZpbHRlcl9ydW4oKS4gRml4ZXMgIzUxODYyNy4KLQotMjAwOC0wMi0yMyAxNjowMzozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9SRUFETUU6IEFkZCBhIGZldyBsaW5lcyBhYm91dCB0aGUgbmV3ICdjaGVjay1pbnNwZWN0ZWQtdmVyc2lvbnMnIHRhcmdldC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL1JFQURNRToKLQkgIEFkZCBhIGZldyBsaW5lcyBhYm91dCB0aGUgbmV3ICdjaGVjay1pbnNwZWN0ZWQtdmVyc2lvbnMnIHRhcmdldC4KLQotMjAwOC0wMi0yMSAxMDozMDo1MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzogQWRkIHFvcyB0byB0aGUgZXZlbnQgdGVzdC4gUmVuYW1lIHRjYXNlL3RzdWl0ZTsgaXMgbm90IG9ubHkgYWJvdXQgY3VzdG9tIGV2ZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkgIEFkZCBxb3MgdG8gdGhlIGV2ZW50IHRlc3QuIFJlbmFtZSB0Y2FzZS90c3VpdGU7IGlzIG5vdCBvbmx5IGFib3V0Ci0JICBjdXN0b20gZXZlbnRzLgotCi0yMDA4LTAyLTIxIDEwOjIyOjM2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogRW5zdXJlIHRoYXQgYnVmZmVyIG1ldGFkYXRhIGlzIHdyaXRlYWJsZSwgYmVmb3JlIG1vZGlmeWluZy4gU3BvdHRlZCBieQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIEVuc3VyZSB0aGF0IGJ1ZmZlciBtZXRhZGF0YSBpcyB3cml0ZWFibGUsIGJlZm9yZSBtb2RpZnlpbmcuIFNwb3R0ZWQgYnkKLQkgIE1pa2UuCi0KLTIwMDgtMDItMjAgMTU6NDQ6MzMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS4qOiBXaGVuIGRyb3BwaW5nIGJ1ZmZlcnMgaW4gbGVha3kgbW9kZXMsIG1hcmsgbmV4dCBidWZmZXJzIHdlIHNlbnQgYXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKLQkgIFdoZW4gZHJvcHBpbmcgYnVmZmVycyBpbiBsZWFreSBtb2RlcywgbWFyayBuZXh0IGJ1ZmZlcnMgd2Ugc2VudCBhcwotCSAgRElTQ09OVC4KLQotMjAwOC0wMi0yMCAxMjozMTo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IEFsc28sIGlmIG1tYXAoKSBmYWlscyB0aGF0IHdvdWxkIGJlIGEgUkVBRCBlcnJvciwgbm90IE9QRU5fUkVBRC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19tYXBfcmVnaW9uKToKLQkgIEFsc28sIGlmIG1tYXAoKSBmYWlscyB0aGF0IHdvdWxkIGJlIGEgUkVBRCBlcnJvciwgbm90IE9QRU5fUkVBRC4KLQotMjAwOC0wMi0yMCAxMjoyNjoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IFJlbW92ZSBHc3RCdWZmZXJTdG9yZSwgbm8gaWRlYSB3aHkgd2Ugd2VyZSBzdGlsbCBidWlsZGluZyBpdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGJ1ZmZlcnN0b3JlLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0YnVmZmVyc3RvcmUuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkgIFJlbW92ZSBHc3RCdWZmZXJTdG9yZSwgbm8gaWRlYSB3aHkgd2Ugd2VyZSBzdGlsbCBidWlsZGluZyBpdC4KLQkgIEl0J3Mgbm90IHVzZWQgYW55d2hlcmUgYW5kIHN1cGVyc2VkZWQgYnkgR3N0QWRhcHRlci4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfbWFwX3JlZ2lvbiksCi0JICAoZ3N0X2ZpbGVfc3JjX2NyZWF0ZV9tbWFwKToKLQkgICogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzogKGdzdF9maWxlX2luZGV4X2FkZF9hc3NvY2lhdGlvbik6Ci0JICBQcmludGYgZm9ybWF0IGZpeGVzIGZvciA2NC1iaXQgaW50ZWdlcnMuCi0KLTIwMDgtMDItMTkgMTM6MDA6MTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBEb24ndCBzZXQgR1NUX0NBQ0hFX0RJUiBhbmQgYWxsb3cgdG8gc2V0IGl0IGJ5IGEgY29uZmlndXJlIHBhcmFtZXRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBEb24ndCBzZXQgR1NUX0NBQ0hFX0RJUiBhbmQgYWxsb3cgdG8gc2V0IGl0IGJ5IGEgY29uZmlndXJlIHBhcmFtZXRlci4KLQkgIFdlJ3JlIG5vdCBpbiAwLjggdGltZXMgYW55bW9yZS4KLQotMjAwOC0wMi0xOSAxMjo1NjoyOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLio6IE1ha2UgdGhlIGRlY2xhcmF0aW9uIGluIHRoZSBoZWFkZXIgZm9yIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QgbWF0Y2ggdGhlIGltcGxlbS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfZHJvcF9idWZmZXJzKSwKLQkgIChnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0KToKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIE1ha2UgdGhlIGRlY2xhcmF0aW9uIGluIHRoZSBoZWFkZXIgZm9yCi0JICBnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0IG1hdGNoIHRoZSBpbXBsZW1lbnRhdGlvbi4KLQkgIEZpeCB1cCBzcGVsbGluZywgZ3JhbW1hciBhbmQgd29yZGluZyBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpbiBhIGZldwotCSAgcGxhY2VzLCBhbmQgYWRkIHRoZSBTaW5jZSBrZXl3b3JkIHRvIG5ldyBBUEkgZnVuY3Rpb25zLgotCSAgVXNlIGdfbGlzdF9kZWxldGVfbGluayBpbnN0ZWFkIG9mIGdfbGlzdF9yZW1vdmUgaW4KLQkgIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMsIHNpbmNlIGl0J3MgaW1tZWFzdXJhYmx5IG1vcmUgZWZmaWNpZW50LgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBVc2UgbmV3IGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgZnVuY3Rpb24gd2hlcmUgYXBwcm9wcmlhdGUuCi0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgbmV3IHN5bWJvbHMgZ3N0X2NvbGxlY3RfcGFkc190YWtlX2J1ZmZlciwKLQkgIGdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIsIGdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCB0byB0aGUKLQkgIGV4cG9ydHMKLQkgIENoYW5nZWxvZyBzdXJnZXJ5IHRvIGFkZCBBUEkga2V5d29yZCB0byBuZXcgZ3N0X2NoZWNrIEFQSS4KLQotMjAwOC0wMi0xOSAwODowNToxNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkucHJlLmM6IFVwZGF0ZSBwcmUtZ2VuZXJhdGVkIGZsZXggZmlsZXMgd2l0aCBmbGV4IDIuMy4zNC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkucHJlLmM6ICh5eV9nZXRfbmV4dF9idWZmZXIpLAotCSAgKF9nc3RfcGFyc2VfeXllbnN1cmVfYnVmZmVyX3N0YWNrKSwgKF9nc3RfcGFyc2VfeXlsZXhfaW5pdF9leHRyYSk6Ci0JICBVcGRhdGUgcHJlLWdlbmVyYXRlZCBmbGV4IGZpbGVzIHdpdGggZmxleCAyLjMuMzQuCi0KLTIwMDgtMDItMTkgMDU6NDk6MzIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogQWRkIEZJWE1FIGZvciAwLjExIHRvIG1ha2UgR3N0TWluaU9iamVjdENsYXNzOjpjb3B5KCkgYSBiaXQgbW9yZSBmcmllbmRseSB0byBzdWJjbGFzc2VzIGFuZCBub3QgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIEFkZCBGSVhNRSBmb3IgMC4xMSB0byBtYWtlIEdzdE1pbmlPYmplY3RDbGFzczo6Y29weSgpIGEgYml0IG1vcmUKLQkgIGZyaWVuZGx5IHRvIHN1YmNsYXNzZXMgYW5kIG5vdCByZXF1aXJlIHRoZW0gdG8ga25vdyBhbGwgaW50ZXJuYWxzCi0JICBvZiB0aGVpciBwYXJlbnQgY2xhc3MuCi0KLTIwMDgtMDItMTUgMTM6MTU6MTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQWRkIHN1Yi1idWZmZXIgZnVuY3Rpb25zIHRvIGNvbGxlY3RwYWRzLiBGaXhlcyAjNTE2MTg3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgQWRkIHN1Yi1idWZmZXIgZnVuY3Rpb25zIHRvIGNvbGxlY3RwYWRzLiBGaXhlcyAjNTE2MTg3LgotCSAgQVBJOiBnc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyKCksIGdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIoKQotCi0yMDA4LTAyLTE1IDEyOjMzOjAwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RidWZmZXIuYzogQ29weSBzZWxlY3RlZCBidWZmZXItZmxhZ3Mgd2hlbiBjcmVhdGluZyBzdWJidWZmZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuYzoKLQkgIENvcHkgc2VsZWN0ZWQgYnVmZmVyLWZsYWdzIHdoZW4gY3JlYXRpbmcgc3ViYnVmZmVycy4KLQkgIEZpeGVzICM1MTYzOTUuCi0KLTIwMDgtMDItMTIgMTI6MDQ6NDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgUHJvcGVybHkgY2hhaW4gdXAgZmluYWxpemUgZnVuY3Rpb25zIHRvIHRoZSBwYXJlbnQgY2xhc3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9jbGFzc19pbml0KSwgKGdzdF9idWZmZXJfZmluYWxpemUpOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9jbGFzc19pbml0KSwgKGdzdF9ldmVudF9maW5hbGl6ZSk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9jbGFzc19pbml0KSwKLQkgIChnc3RfbWVzc2FnZV9maW5hbGl6ZSk6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X2NsYXNzX2luaXQpLCAoZ3N0X3F1ZXJ5X2ZpbmFsaXplKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfbW1hcF9idWZmZXJfY2xhc3NfaW5pdCksCi0JICAoZ3N0X21tYXBfYnVmZmVyX2ZpbmFsaXplKToKLQkgIFByb3Blcmx5IGNoYWluIHVwIGZpbmFsaXplIGZ1bmN0aW9ucyB0byB0aGUgcGFyZW50IGNsYXNzLgotCi0yMDA4LTAyLTExIDE3OjUzOjU3ICswMDAwICBTaWF2YXNoIFNhZmkgPHNpYXZhc2guc2FmaUBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RpbmRleC4qOiBBZGQgbmV3IGZ1bmN0aW9uIHdpdGggb3B0aW9uIHRvIGRpc3Bvc2Ugb2YgdXNlcl9kYXRhIGluIHJlc29sdmVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2lhdmFzaCBTYWZpIDxzaWF2YXNoIGRvdCBzYWZpIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X2ZpbmFsaXplKSwgKGdzdF9pbmRleF9zZXRfcmVzb2x2ZXIpLAotCSAgKGdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCk6Ci0JICAqIGdzdC9nc3RpbmRleC5oOgotCSAgQWRkIG5ldyBmdW5jdGlvbiB3aXRoIG9wdGlvbiB0byBkaXNwb3NlIG9mIHVzZXJfZGF0YSBpbiByZXNvbHZlci4KLQkgIEFjdHVhbGx5IGNhbGwgdGhlIGRpc3Bvc2UgZnVuY3Rpb24gd2hlbiBmaW5hbGl6aW5nIHRoZSBvYmplY3QgYW5kIG5vdAotCSAganVzdCB3aGVuIGNoYW5naW5nIHRoZSByZXNvbHZlci9maWx0ZXIuCi0JICBBUEk6IEdzdEluZGV4Ojpnc3RfaW5kZXhfc2V0X3Jlc29sdmVyX2Z1bGwoKQotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgQWRkIG5ldyBmdW5jdGlvbiB0byBkb2NzLiBGaXhlcyAjNTE1NDY5LgotCi0yMDA4LTAyLTExIDA4OjUzOjA0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RpbmRleC5jOiBDaGFpbiB1cCBmaW5hbGl6ZSB0byB0aGUgcGFyZW50IGNsYXNzLiBGaXhlcyBsZWFraW5nIHRoZSBHc3RPYmplY3QgbmFtZSBhbmQgb3RoZXIgdGhpbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X2ZpbmFsaXplKToKLQkgIENoYWluIHVwIGZpbmFsaXplIHRvIHRoZSBwYXJlbnQgY2xhc3MuIEZpeGVzIGxlYWtpbmcgdGhlIEdzdE9iamVjdAotCSAgbmFtZSBhbmQgb3RoZXIgdGhpbmdzLgotCi0yMDA4LTAyLTEwIDE5OjQ4OjA0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogY29tbW9uOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IEZpeCBKb3NlcCdzIHN1cm5hbWUgaW4gcHJldmlvdXMgY29tbWl0cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeTogRml4IEpvc2VwJ3Mgc3VybmFtZSBpbiBwcmV2aW91cyBjb21taXRzCi0KLTIwMDgtMDItMDggMDA6NTQ6MjggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IE1ha2UgRElTQUJMRV9ERVBSRUNBVEVEIGRlZmluZWQgKm9ubHkqIGR1cmluZyBDVlMsIG5vdCBkdXJpbmcgcHJlLXJlbGVhc2VzIG9yIHJlbGVhc2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIE1ha2UgRElTQUJMRV9ERVBSRUNBVEVEIGRlZmluZWQgKm9ubHkqIGR1cmluZyBDVlMsIG5vdCBkdXJpbmcKLQkgIHByZS1yZWxlYXNlcyBvciByZWxlYXNlcy4KLQkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgotCSAgQWRkIGdzdC1wbHVnaW5zLWdsCi0JICAqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JICBDaGFuZ2Ugb25lIG9mIHRoZSBzdGVwcyAtIHdlIG9ubHkgdXBsb2FkIGNvcmUgJiBiYXNlIHRvIEdub21lIEZUUAotCi0yMDA4LTAyLTA2IDEyOjIxOjA1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3Rjb25maWcuaC5pbjogQWRkICdpZCcgZm9yIGV4YW1wbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgQWRkICdpZCcgZm9yIGV4YW1wbGUuCi0JICAqIGdzdC9nc3RwYWQuYzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JICBMaW5rIHRvIHNpZ25hbHMuIERvYyBhbmQgY29tbWVudCBmaXhlcy4KLQotMjAwOC0wMi0wNSAyMToyMjo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogU29tZSBtaW5vciBkb2NzIGZpeGVzOiBmaXggdHlwbywgbWVudGlvbiB0aGF0IEdTVF9GTE9XX1JFU0VORCBpcyB1bnVzZWQgYW5kIHVuaW1wbGVtZW50ZWQ7IGZpbmFsbHksIGl0IGlzIHBsdWdpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5oOiAoR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwpOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOiAoR3N0UGx1Z2luRmVhdHVyZUNsYXNzKToKLQkgIFNvbWUgbWlub3IgZG9jcyBmaXhlczogZml4IHR5cG8sIG1lbnRpb24gdGhhdCBHU1RfRkxPV19SRVNFTkQgaXMKLQkgIHVudXNlZCBhbmQgdW5pbXBsZW1lbnRlZDsgZmluYWxseSwgaXQgaXMgcGx1Z2luIGZlYXR1cmVzLCBub3QKLQkgIHBsdWdpbnMsIHRoYXQgaGF2ZSByYW5rcy4KLQotMjAwOC0wMi0wNSAxOTo0MjozMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOiBDbGFyaWZ5IEdzdFJhbmsgcmFuZ2UgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSAgQ2xhcmlmeSBHc3RSYW5rIHJhbmdlIGRvY3MuCi0KLTIwMDgtMDItMDUgMTg6Mzc6MDggKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ3N0LmM6IEFkZCBhIHNlcGFyYXRlIGdzdF9kZWluaXRpYWxpemVkIHRoYXQgcHJldmVudHMgZ3N0X2luaXQoKSBmcm9tIGJlaW5nIGNhbGxlZCBhZnRlciBnc3RfZGVpbml0KCkuICBGaXhlcyAjNTAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IEFkZCBhIHNlcGFyYXRlIGdzdF9kZWluaXRpYWxpemVkIHRoYXQgcHJldmVudHMKLQkgIGdzdF9pbml0KCkgZnJvbSBiZWluZyBjYWxsZWQgYWZ0ZXIgZ3N0X2RlaW5pdCgpLiAgRml4ZXMgIzUwOTU1OQotCi0yMDA4LTAyLTA1IDE0OjE1OjE1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFJldmVydCBwcmV2aW91cyBjaGFuZ2VzIHRvIHRoZSBiZWhhdmlvdXIgb2YgR3N0UGFkVGVtcGxhdGVzLCBldGMgYW5kIHRoZSBwb3NzaWJsaXR5IHRvIGNhbGwgdGhlbSBpbiBjbGFzc19pbml0IGFzIGl0IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZ2V0X3R5cGUpLCAoZ3N0X2Jpbl9iYXNlX2luaXQpLAotCSAgKGdzdF9iaW5fY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9iYXNlX2NsYXNzX2luaXQpLAotCSAgKGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUpOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogKGdzdF9wYWRfdGVtcGxhdGVfaW5pdCk6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2dldF90eXBlKSwKLQkgIChnc3RfcGlwZWxpbmVfYmFzZV9pbml0KSwgKGdzdF9waXBlbGluZV9jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfdHlwZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2Jhc2VfaW5pdCksIChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfYmFzZV9pbml0KSwKLQkgIChnc3RfY2Fwc2ZpbHRlcl9jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9mYWtlX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfYmFzZV9pbml0KSwKLQkgIChnc3RfZmRfc2lua19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19iYXNlX2luaXQpLAotCSAgKGdzdF9mZF9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfYmFzZV9pbml0KSwKLQkgIChnc3RfZmlsZV9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19iYXNlX2luaXQpLAotCSAgKGdzdF9maWxlX3NyY19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9iYXNlX2luaXQpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3F1ZXVlX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9iYXNlX2luaXQpLAotCSAgKGdzdF90ZWVfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NsYXNzX2luaXQpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc3VpdGUpOgotCSAgUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZXMgdG8gdGhlIGJlaGF2aW91ciBvZiBHc3RQYWRUZW1wbGF0ZXMsIGV0YwotCSAgYW5kIHRoZSBwb3NzaWJsaXR5IHRvIGNhbGwgdGhlbSBpbiBjbGFzc19pbml0IGFzIGl0IGJyZWFrcyB0b28KLQkgIG1hbnkgZWxlbWVudHMuIFJlb3BlbnMgYnVnICM0OTE1MDEuCi0JICBTaG91bGQgYmUgYXBwbGllZCBhZ2FpbiBmb3IgMC4xMSwgdGh1cyBhZGRlZCBhIGZldyBGSVhNRSAwLjExIGF0Ci0JICBzZXZlcmFsIHBsYWNlcy4KLQotMjAwOC0wMi0wNSAwOToyNDoxOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0b29scy9nc3QtbGF1bmNoLmM6IER1bXAgb25lIGdyYXBoIHBlciBwaXBlbGluZSBzdGF0ZS1jaGFuZ2UgYW5kIHN0YXRlIGNoYW5nZSBuYW1lIChpZiBHU1RfREVCVUdfRFVNUF9ET1RfRElSIGlzIHNldCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgRHVtcCBvbmUgZ3JhcGggcGVyIHBpcGVsaW5lIHN0YXRlLWNoYW5nZSBhbmQgc3RhdGUgY2hhbmdlIG5hbWUKLQkgIChpZiBHU1RfREVCVUdfRFVNUF9ET1RfRElSIGlzIHNldCkuCi0KLTIwMDgtMDItMDQgMTQ6MTQ6NDIgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIEJlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgbmV3IGNvcHkgb2YgdGhlIGNhcHMgYW5kIG5vdCByZWZmZWQgY2FwcyBmcm9tIGEgdGVtcGxhdGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgIEJlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgbmV3IGNvcHkgb2YgdGhlIGNhcHMgYW5kIG5vdAotCSAgcmVmZmVkIGNhcHMgZnJvbSBhIHRlbXBsYXRlCi0KLTIwMDgtMDItMDMgMTI6MDQ6MzcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgRG9uJ3QgdXNlIGJhc2VfaW5pdCB3aGVyZSBub3QgYWJzb2x1dGVseSBuZWNlc3NhcnkuIEZvciBleGFtcGxlIGl0J3Mgbm90IG5lY2Vzc2FyeSBhbnltb3JlIGZvciBhZGRpbmcgcGFkIHRlbXBsYXRlcyBvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9nZXRfdHlwZSksIChnc3RfYmluX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9nZXRfdHlwZSksCi0JICAoZ3N0X3BpcGVsaW5lX2NsYXNzX2luaXQpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF90eXBlKSwKLQkgIChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfdHlwZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdHlwZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzogKGdzdF9kYXRhX3F1ZXVlX2dldF90eXBlKToKLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9iYXNlX2luaXQpLAotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9iYXNlX2luaXQpLAotCSAgKGdzdF9jYXBzZmlsdGVyX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2Zha2Vfc2lua19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfYmFzZV9pbml0KSwKLQkgIChnc3RfZmFrZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9mZF9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2ZkX3NyY19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2ZpbGVfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfYmFzZV9pbml0KSwKLQkgIChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X211bHRpX3F1ZXVlX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfYmFzZV9pbml0KSwKLQkgIChnc3RfcXVldWVfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3RlZV9jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYmFzZV9pbml0KSwKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2xhc3NfaW5pdCk6Ci0JICBEb24ndCB1c2UgYmFzZV9pbml0IHdoZXJlIG5vdCBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUgaXQncwotCSAgbm90IG5lY2Vzc2FyeSBhbnltb3JlIGZvciBhZGRpbmcgcGFkIHRlbXBsYXRlcyBvciBzZXR0aW5nIGVsZW1lbnQKLQkgIGRldGFpbHMuCi0JICBMZWF2ZSBlbXB0eSBiYXNlX2luaXQgZnVuY3Rpb25zIGluIHNldmVyYWwgcGxhY2VzIGFzIEdTVF9CT0lMRVJQTEFURQotCSAgc3RpbGwgZGVmaW5lcyBhbmQgdXNlcyB0aGVtLgotCi0yMDA4LTAyLTAzIDEwOjQ4OjAxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC86IE1ha2UgaXQgcG9zc2libGUgKGFuZCByZWNvbW1lbmRlZCkgdG8gc2V0IGVsZW1lbnQgZGV0YWlscyBhbmQgYWRkIHBhZCB0ZW1wbGF0ZXMgaW4gdGhlIGNsYXNzX2luaXQgZnVuY3Rpb25zIGJ5IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9iYXNlX2NsYXNzX2luaXQpLAotCSAgKGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUpOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkgIE1ha2UgaXQgcG9zc2libGUgKGFuZCByZWNvbW1lbmRlZCkgdG8gc2V0IGVsZW1lbnQgZGV0YWlscyBhbmQgYWRkCi0JICBwYWQgdGVtcGxhdGVzIGluIHRoZSBjbGFzc19pbml0IGZ1bmN0aW9ucyBieSBjb3B5aW5nIHRoZSBkZXRhaWxzL3BhZAotCSAgdGVtcGxhdGVzIGluIEdzdEVsZW1lbnQncyBiYXNlX2luaXQuCi0JICBBbHNvIG1ha2UgaXQgcG9zc2libGUgdG8gcmVwbGFjZSBleGlzdGluZyBwYWQgdGVtcGxhdGVzIGJ5IGFkZGluZwotCSAgYSBuZXcgb25lIHdpdGggdGhlIHNhbWUgbmFtZS4gVGhpcyB3YXMgZG9uZSBpbiBhIGhhY2tpc2ggZmFzaGlvbgotCSAgaW4gc2FtZSBlbGVtZW50cyBiZWZvcmUgYWxyZWFkeS4KLQkgIERvbid0IHJlZmVyZW5jZSBwYWQgdGVtcGxhdGVzIHRoYXQgYXJlIGFkZGVkIGEgc2Vjb25kIHRpbWUuIEEKLQkgIG5ldyBwYWQgdGVtcGxhdGUgaGFzIGEgcmVmY291bnQgb2Ygb25lIGFuZCBpcyBub3QgZmxvYXRpbmcgYW55bW9yZQotCSAgYW5kIHRvIGJlIG93bmVkIGJ5IHRoZSBlbGVtZW50J3MgY2xhc3MuIE1ha2UgdGhpcyBtb3JlIGV4cGxpY2l0IGJ5Ci0JICBtZW50aW9uaW5nIGl0IGluIHRoZSBkb2NzIG9mIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoKS4KLQkgIFRoZXNlIGNoYW5nZXMgYXJlIGJhY2t3YXJkcyBjb21wYXRpYmxlLiBGaXhlcyBidWcgIzQ5MTUwMS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIEFkZCB1bml0IHRlc3QgZm9yIHNldHRpbmcgZWxlbWVudCBkZXRhaWxzLCBhZGRpbmcgcGFkIHRlbXBsYXRlcyBhbmQKLQkgIHJlcGxhY2luZyB0aGVtIGluIGEgc3ViY2xhc3MuCi0KLTIwMDgtMDItMDIgMDY6NDg6MzcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogRml4IGEgZmV3IG1lbW9yeSBsZWFrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfaW50ZXJmYWNlcyksCi0JICAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pLCAocHJpbnRfcGFkX2luZm8pLAotCSAgKHByaW50X3NpZ25hbF9pbmZvKSwgKHByaW50X2VsZW1lbnRfaW5mbyk6Ci0JICBGaXggYSBmZXcgbWVtb3J5IGxlYWtzLgotCi0yMDA4LTAyLTAxIDE3OjE2OjI2ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBBZGQgbW9yZSBmdW5jdGlvbnMgZm9yIHVuaXQgdGVzdGluZzogZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycywgZ3N0X2NoZWNrX2NhcHNfZXF1YWwsIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgQWRkIG1vcmUgZnVuY3Rpb25zIGZvciB1bml0IHRlc3Rpbmc6IGdzdF9jaGVja19kcm9wX2J1ZmZlcnMsCi0JICBnc3RfY2hlY2tfY2Fwc19lcXVhbCwgZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdCwKLQkgIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyCi0KLTIwMDgtMDItMDEgMTY6Mzc6MjIgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgR1NUX0NIRUNLX1ZFUlNJT04gdG8gdGhlIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0wMi0wMSAgSnVsaWVuIE1vdXR0ZSAgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIEdTVF9DSEVDS19WRVJTSU9OIHRvIHRoZQotCSAgZG9jcwotCSAgKiBnc3QvZ3N0aW5kZXguYzogKGdzdF9pbmRleF9jbGFzc19pbml0KSwKLQkgIChnc3RfaW5kZXhfZnJlZV93cml0ZXIpLAotCSAgKGdzdF9pbmRleF9maW5hbGl6ZSksIChnc3RfaW5kZXhfZW50cnlfZnJlZSksCi0JICAoZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbik6IEZpeCBtZW1vcnkgbGVha3MuCi0JICAqIGdzdC9nc3R2ZXJzaW9uLmguaW46IEFkZCBHU1RfQ0hFQ0tfVkVSU0lPTiBtYWNyby4KLQkgICogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOiAoZ3N0X21lbV9pbmRleF9jbGFzc19pbml0KSwKLQkgIChnc3RfbWVtX2luZGV4X2ZyZWVfZm9ybWF0KSwgKGdzdF9tZW1faW5kZXhfZnJlZV9pZCksCi0JICAoZ3N0X21lbV9pbmRleF9maW5hbGl6ZSk6IEZpeCBtZW1vcnkgbGVha3MuCi0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDogVXBkYXRlZCB0byBDVlMgSEVBRC4KLQotMjAwOC0wMi0wMSAxMjoyNToxNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL1JFQURNRTogU29tZSBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBwbHVnaW4gZG9jcyB3b3Jrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL1JFQURNRToKLQkgIFNvbWUgbW9yZSBkZXRhaWxzIGFib3V0IGhvdyB0aGUgcGx1Z2luIGRvY3Mgd29ya3MuCi0JICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICBXaGl0ZXNwYWNlIGNsZWFudXAuCi0KLTIwMDgtMDItMDEgMTI6MTA6MTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3BhcnNlLzogQWRkIGRlbGF5ZWQgc2V0LXByb3BlcnR5LiBUaGlzIGFsbG93cyB0byBzZXQgcHJvcGVydGllcyBvbiBkeW5hbWljYWx5IGNyZWF0ZWQgb2JqZWN0cyAocGFkcyBpbiB2aWRlb214ZXIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnRhYi5wcmUuYzoKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIudGFiLnByZS5oOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgKiBnc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkucHJlLmM6Ci0JICBBZGQgZGVsYXllZCBzZXQtcHJvcGVydHkuIFRoaXMgYWxsb3dzIHRvIHNldCBwcm9wZXJ0aWVzIG9uIGR5bmFtaWNhbHkKLQkgIGNyZWF0ZWQgb2JqZWN0cyAocGFkcyBpbiB2aWRlb214ZXIpLgotCi0yMDA4LTAyLTAxIDExOjI3OjMyICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogQ2hlY2sgaWYgY2FwcyBhcmUgbm90IE5VTEwgKGZpeCBidWcgIzUxMDE5NCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIENoZWNrIGlmIGNhcHMgYXJlIG5vdCBOVUxMIChmaXggYnVnICM1MTAxOTQpCi0KLTIwMDgtMDItMDEgMTA6Mjc6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQWRkIGZpeG1lIHJlZ2FyZGluZyBFT1MgaW4gcHVsbCBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfbG9vcCksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb25fcGF1c2VkKToKLQkgIEFkZCBmaXhtZSByZWdhcmRpbmcgRU9TIGluIHB1bGwgbW9kZS4KLQkgIEZpeCBwb3NpdGlvbiByZXBvcnRpbmcgaW4gUEFVU0VEIGZvciBuZWdhdGl2ZSByYXRlcy4KLQotMjAwOC0wMi0wMSAxMDoyMzo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogV2hlbiByZXBsYWNpbmcgYSBtaW5pb2JqZWN0LCBkbyBhIHF1aWNrIGVxdWFsaXR5IGNoZWNrIGZpcnN0IHNvIHRoYXQgd2UgY2FuIGF2b2lkIGEgcmVmL3VucmVmIHBhaXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF9taW5pX29iamVjdF9yZXBsYWNlKToKLQkgIFdoZW4gcmVwbGFjaW5nIGEgbWluaW9iamVjdCwgZG8gYSBxdWljayBlcXVhbGl0eSBjaGVjayBmaXJzdCBzbyB0aGF0IHdlCi0JICBjYW4gYXZvaWQgYSByZWYvdW5yZWYgcGFpci4KLQotMjAwOC0wMi0wMSAxMDoxNzo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OiBVcGRhdGUgc29tZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDoKLQkgIFVwZGF0ZSBzb21lIGRvY3MuCi0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICBBZGQgbXVsdGlxdWV1ZSB0byB0aGUgZG9jcy4KLQotMjAwOC0wMS0zMCAxNDozODo0MyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBDVlMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIENWUwotCi09PT0gcmVsZWFzZSAwLjEwLjE3ID09PQotCi0yMDA4LTAxLTMwIDE0OjA1OjQ1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTAuMTcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmVsZWFzZSAwLjEwLjE3Ci0KLTIwMDgtMDEtMzAgMTM6MTM6NDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBhZGQgQ2hhbmdlTG9nIGVudHJ5IGZvciBwcmV2aW91cyBjb21taXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIENoYW5nZUxvZyBlbnRyeSBmb3IgcHJldmlvdXMgY29tbWl0Ci0KLTIwMDgtMDEtMzAgMTM6MTI6MjQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogQ2hlY2sgaWYgY2FwcyBhcmUgbm90IE5VTEwgKGZpeCBidWcgIzUxMDE5NCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIENoZWNrIGlmIGNhcHMgYXJlIG5vdCBOVUxMIChmaXggYnVnICM1MTAxOTQpCi0KLTIwMDgtMDEtMzAgMTI6NTU6NDIgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBDaGVjayBpZiBjYXBzIGFyZSBub3QgTlVMTCAoZml4IGJ1ZyAjNTEwMTk0KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgQ2hlY2sgaWYgY2FwcyBhcmUgbm90IE5VTEwgKGZpeCBidWcgIzUxMDE5NCkKLQotMjAwOC0wMS0zMCAxMjo0NDoxMyArMDAwMCAgQ3lnd2luIFBvcnRzIG1haW50YWluZXIgPHlzZWxrb3dpdHpAdXNlcnMuc291cmNlZm9yZ2U+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBGaXggY29tcGlsYXRpb24gb24gc3lzdGVtcyB0aGF0IGhhdmUgcG9zaXggdGltZXJzIGJ1dCBubyBtb25vdG9uaWMgY2xvY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICBGaXggY29tcGlsYXRpb24gb24gc3lzdGVtcyB0aGF0IGhhdmUgcG9zaXggdGltZXJzIGJ1dCBubwotCSAgbW9ub3RvbmljIGNsb2NrLgotCSAgRml4ZXM6ICM1MTI3MTUKLQkgIFBhdGNoIEJ5OiBDeWd3aW4gUG9ydHMgbWFpbnRhaW5lciA8eXNlbGtvd2l0eiBhdCB1c2VycyBkb3Qgc291cmNlZm9yZ2UKLQkgIGRvdCBuZXQ+Ci0KLTIwMDgtMDEtMzAgMTI6Mzk6NTEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBSZXZlcnQgcHJldmlvdXMgY29tbWl0IGluIHByZXBhcmF0aW9uIGZvciBhbiBpbXByb21wdHUgMC4xMC4xNyByZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIFJldmVydCBwcmV2aW91cyBjb21taXQgaW4gcHJlcGFyYXRpb24gZm9yIGFuIGltcHJvbXB0dSAwLjEwLjE3IHJlbGVhc2UKLQotMjAwOC0wMS0yOSAwOTo0MzoxMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBGaXggYSBmZXcgbWVtb3J5IGxlYWtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9pbnRlcmZhY2VzKSwKLQkgIChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyksIChwcmludF9wYWRfaW5mbyksCi0JICAocHJpbnRfc2lnbmFsX2luZm8pLCAocHJpbnRfZWxlbWVudF9pbmZvKToKLQkgIEZpeCBhIGZldyBtZW1vcnkgbGVha3MuCi0KLTIwMDgtMDEtMjggMjM6MzA6NDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJhY2sgdG8gQ1ZTCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBDVlMKLQotPT09IHJlbGVhc2UgMC4xMC4xNiA9PT0KLQotMjAwOC0wMS0yOCAyMzoyNzoxMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiBwby9MSU5HVUFTOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjE2Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbGVhc2UgMC4xMC4xNgotCi0yMDA4LTAxLTI4IDIxOjIwOjE2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JlLnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vcncucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwOC0wMS0yNCAyMzoyODo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBVc2UgQUNfVFJZX0NPTVBJTEUgaW5zdGVhZCBvZiBBQ19UUllfUlVOIHRvIGNoZWNrIGZvciBfUE9TSVhfVElNRVIsIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0ssIGV0Yy4gTWFrZXMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgVXNlIEFDX1RSWV9DT01QSUxFIGluc3RlYWQgb2YgQUNfVFJZX1JVTiB0byBjaGVjayBmb3IKLQkgIF9QT1NJWF9USU1FUiwgX1BPU0lYX01PTk9UT05JQ19DTE9DSywgZXRjLiBNYWtlcyBjb25maWd1cmUKLQkgIG5vdCBmYWlsIHdoZW4gdHJ5aW5nIHRvIGNyb3NzY29tcGlsZSBvbiBPcGVuRW1iZWRkZWQgKCM1MTE3NTApLgotCi0yMDA4LTAxLTIwIDE3OjA4OjU0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGRvY3MvbWFudWFscy5tYWs6IFVzZSAkKE1BS0UpIGluc3RlYWQgb2YgbWFrZSB0byBmaXggdGhlIGJ1aWxkIGlmIEdOVSBtYWtlIGlzIGNhbGxlZCBkaWZmZXJlbnQuIEZpeGVzIGJ1ZyAjNTEwNzQ3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFscy5tYWs6Ci0JICBVc2UgJChNQUtFKSBpbnN0ZWFkIG9mIG1ha2UgdG8gZml4IHRoZSBidWlsZCBpZiBHTlUgbWFrZSBpcwotCSAgY2FsbGVkIGRpZmZlcmVudC4gRml4ZXMgYnVnICM1MTA3NDcuCi0KLTIwMDgtMDEtMjAgMTU6MDQ6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RwbHVnaW4uYzogRml4IG9sZC1zdHlsZSBzdGF0aWMgcGx1Z2lucyB2aWEgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDIGFnYWluLCB3aGljaCBJIGJyb2tlIHR3byBjb21taXRzIGFnbyB3aGVuIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogKF9nc3RfcGx1Z2luX2luaXRpYWxpemUpOgotCSAgRml4IG9sZC1zdHlsZSBzdGF0aWMgcGx1Z2lucyB2aWEgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDCi0JICBhZ2Fpbiwgd2hpY2ggSSBicm9rZSB0d28gY29tbWl0cyBhZ28gd2hlbiBjaGFuZ2luZyB0aGUgQVBJCi0JICBvZiBnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYygpOiB0aGUgZ19saXN0X2ZvcmVhY2goKSBpbgotCSAgX2dzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljIHN0aWxsIGFzc3VtZWQgdGhlIG9sZCBmdW5jdGlvbgotCSAgc2lnbmF0dXJlIGFuZCB3b3VsZCB0aGVyZWZvcmUgZmFpbCAocmUtZml4ZXMgIzUxMDE4NykuCi0JICAqIGdzdC9nc3RwbHVnaW4uYzogKF9udW1fc3RhdGljX3BsdWdpbnMpLCAoX3N0YXRpY19wbHVnaW5zKSwKLQkgIChfZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMpLCAoZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMpOgotCSAgUmV2ZXJ0IHRoZSAodGVjaG5pY2FsbHkgY29ycmVjdCkgY2hhbmdlIHRvIGNhbGwgZ190aHJlYWRfaW5pdCgpIGZyb20KLQkgIHRoZSBwcmUtbWFpbigpIGNvbnN0cnVjdG9yLiBUaGlzIHdpbGwgYnJlYWsgcHJvZ3JhbXMgd2hpY2ggY2FsbAotCSAgZ190aHJlYWRfaW5pdCgpIHdpdGhvdXQgYW4gaWYgKCFnX3RocmVhZF9zdXBwb3J0ZWQoKSkgZ3VhcmQgaW4gdGhlaXIKLQkgIG1haW4gZnVuY3Rpb24uIFdlIGNvdWxkIGp1c3QgYmxhbWUgaXQgb24gR0xpYiBvciB0aGUgYXBwbGljYXRpb24sIGJ1dAotCSAgaXQncyBwcm9iYWJseSBiZXN0IHRvIGp1c3QgYXZvaWQgdGhpcyBhbHRvZ2V0aGVyIGFuZCBzaW1wbHkgbm90IHVzZQotCSAgYW55IEdMaWIgZnVuY3Rpb25zIGhlcmUgYW5kIHVzZSBwbGFpbiBvbGQgbWFsbG9jKCkgd2l0aCBhIHNpbXBsZQotCSAgYXJyYXkgdG8gc3RvcmUgdGhlIHBsdWdpbnMgdG8gcmVnaXN0ZXIgbGF0ZXIgd2hlbiBnc3RfaW5pdCgpIGlzCi0JICBmaW5hbGx5IGNhbGxlZCAocmUtZml4ZXMgIzUxMDE4NykuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzogKEdTVF9HTlVDX0NPTlNUUlVDVE9SX0RFRklORUQpLAotCSAgKEdTVF9HTlVDX0NPTlNUUlVDVE9SX0RFRklORUQpLCAocGx1Z2luX2luaXRfY291bnRlciksCi0JICAocGx1Z2luMV9pbml0KSwgKHBsdWdpbjJfaW5pdCksIChwbHVnaW4zX2luaXQpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9wbHVnaW5fc3VpdGUpOgotCSAgRHVtYiB1bml0IHRlc3QgdG8gbWFrZSBzdXJlIHRoZSBvbGQgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDIHN0aWxsCi0JICB3b3Jrcy4KLQotMjAwOC0wMS0xNyAyMjoyMjo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHBsdWdpbi5oOiBSZW1vdmUgZGVwcmVjYXRpb24gZ3VhcmRzIGFyb3VuZCBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5oOiAoR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDKToKLQkgIFJlbW92ZSBkZXByZWNhdGlvbiBndWFyZHMgYXJvdW5kIEdTVF9QTFVHSU5fREVGSU5FX1NUQVRJQy4KLQkgIFRoaXMgbWFrZXMgZ3RrLWRvYyBjb21wbGFpbiwgYnV0IHJlc3VsdHMgaW4gc2xpZ2h0bHkgYmV0dGVyCi0JICBjb21waWxlciBlcnJvcnMuIFRoZSBvbGQgX2dzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKCkgaXMKLQkgIHN0aWxsIGd1YXJkZWQsIHNvIHRoZXJlJ2xsIGJlIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCB0aGF0Ci0JICBpbnN0ZWFkLiBGaXhlcyAjNTEwMTg3IHRvby4KLQotMjAwOC0wMS0xNyAyMjoxNzoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogQ2hhbmdlIEFQSSBvZiBnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYygpIHRvIG5vdCB0YWtlIGEgR3N0UGx1Z2luRGVzYywgYnV0IHJhdGhlciBqdXN0IHRha2UgYWxsIHRoZSBhcmd1bWVudHMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKLQkgICogZ3N0L2dzdHBsdWdpbi5jOiAoX2dzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKSwKLQkgIChnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyksIChfZ3N0X3BsdWdpbl9pbml0aWFsaXplKToKLQkgICogZ3N0L2dzdHBsdWdpbi5oOiAoR3N0UGx1Z2luRmlsdGVyKToKLQkgIENoYW5nZSBBUEkgb2YgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMoKSB0byBub3QgdGFrZQotCSAgYSBHc3RQbHVnaW5EZXNjLCBidXQgcmF0aGVyIGp1c3QgdGFrZSBhbGwgdGhlIGFyZ3VtZW50cwotCSAgaW4gYSBHc3RQbHVnaW5EZXNjIGRpcmVjdGx5LiBUaGlzIGlzIG1vcmUgaW50dWl0aXZlIGFuZAotCSAgYXZvaWRzIGNlcnRhaW4gbWlzdGFrZXMgd2hlbiBwb3J0aW5nIGNvZGUgZnJvbQotCSAgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDIHRvIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKCkuCi0JICBGaXhlcyAjNTEwMTg3LgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmM6Ci0JICBGaXggdXAgZm9yIGNoYW5nZWQgQVBJLgotCi0yMDA4LTAxLTE3IDE4OjUwOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZG9jcy9mYXEvbGVnYWwueG1sOiBVcGRhdGUgRkFRLCBUb3RlbSBhY3R1YWxseSBoYXMgYW4gZXhjZXB0aW9uIHRoZXNlIGRheXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9mYXEvbGVnYWwueG1sOgotCSAgVXBkYXRlIEZBUSwgVG90ZW0gYWN0dWFsbHkgaGFzIGFuIGV4Y2VwdGlvbiB0aGVzZSBkYXlzLgotCi0yMDA4LTAxLTE0IDIyOjIwOjQ0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6IEFkZCBuZXcgQVBJIGRlY2xhcmF0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIG5ldyBBUEkgZGVjbGFyYXRpb25zCi0KLTIwMDgtMDEtMTQgMTM6MTg6MzcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogU3BlbGxpbmcgZml4ZXMgZm9yIHRoZSBBUEkgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgU3BlbGxpbmcgZml4ZXMgZm9yIHRoZSBBUEkgZG9jcy4KLQotMjAwOC0wMS0xNCAxMTo0NzozMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEFkZCBBUEkga2V5d29yZCBmb3IgZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCwgYW5kIHJlbW92ZSB0aGUgdGFnIGZvciBHU1RfR0VUX1RJTUVTVE1BUCB3aGljaCBkaWRuJ3Qgc3Vydml2ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQWRkIEFQSSBrZXl3b3JkIGZvciBnc3RfdXRpbF9nZXRfdGltZXN0YW1wLCBhbmQgcmVtb3ZlIHRoZSB0YWcgZm9yIEdTVF9HRVRfVElNRVNUTUFQIHdoaWNoIGRpZG4ndCBzdXJ2aXZlLgotCi0yMDA4LTAxLTE0IDExOjQwOjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBGaXggbG9uZyBwcm9wZXJ0eSBkZXNjcmlwdGlvbiBmb3IgUW9TLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgRml4IGxvbmcgcHJvcGVydHkgZGVzY3JpcHRpb24gZm9yIFFvUy4KLQotMjAwOC0wMS0xMiAyMDoyMjozMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3QuYzogX2dzdF90cmFjZV9vbiBpcyBhbHJlYWR5IHByb3ZpZGVkIGJ5IGdzdHRyYWNlLmgsIG5vIG5lZWQgdG8gZGVjbGFyZSBpdCBvdXJzZWx2ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOgotCSAgX2dzdF90cmFjZV9vbiBpcyBhbHJlYWR5IHByb3ZpZGVkIGJ5IGdzdHRyYWNlLmgsIG5vIG5lZWQgdG8gZGVjbGFyZQotCSAgaXQgb3Vyc2VsdmVzLgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgQWRkICdidWZmZXJzJywgJ2NoZWNrX2NvbmQnIGFuZCAnY2hlY2tfbXV0ZXgnIGZyb20gbGliZ3N0Y2hlY2sKLQkgIGFuZCByZW1vdmUgc3RyYW5nZSB0Y2FzZV9hZGRfdGVzdCB3aGljaCBpcyBvdXRwdXR0aW5nIGEgd2FybmluZy4KLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIFByb3Blcmx5IGRlY2xhcmUgJ2J1ZmZlcnMnLCAnY2hlY2tfY29uZCcsICdjaGVja19tdXRleCcgZXh0ZXJuCi0JICBhbmQgZGVmaW5lIHRoZW0gaW4gZ3N0Y2hlY2suYyBpbnN0ZWFkIG9mIGhhdmluZyBldmVyeSAuYyBmaWxlIHdoY2loCi0JICBpbmNsdWRlcyBnc3RjaGVjay5oIGJlIGRlZmluaW5nIGl0cyBvd24gY29weSBhbmQgcmVseWluZyBvbiBzeW1ib2wKLQkgIGludGVycG9zaW5nIHRvIG1hcnJ5IHRoZW0gYWxsLCB3aGljaCBkb2Vzbid0IHdvcmsgb24gU29sYXJpcy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIERvbid0IGRlZmluZSAnYnVmZmVycycgbG9jYWxseSwgaXQgY29tZXMgZnJvbSBsaWJnc3RjaGVjay4KLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoc2VuZF9idWZmZXIpOgotCSAgRml4IHR5cGUgb2YgdmFyaWFibGUgKEdzdEZsb3dSZXR1cm4sIG5vdCBHc3RTdGF0ZUNoYW5nZVJldHVybikKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWRkIGEgYnVuY2ggb2YgY2FzdHMgdG8gbWFrZSB2YXJpb3VzIGNvbnN0YW50cyBmaXQgdGhlIHR5cGVzCi0JICB0aGV5J3JlIGJlaW5nIGFzc2lnbmVkIHRvLgotCi0yMDA4LTAxLTEwIDIxOjA2OjU4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RjaGlsZHByb3h5LmM6IEltcHJvdmUgZG9jcyBhbmQgYWRkIHNvbWUgaWRlYXMgZm9yIG1ha2luZyB0aGlzIG1vcmUgZ2VuZXJhbC1wdXJwb3NlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjaGlsZHByb3h5LmM6Ci0JICBJbXByb3ZlIGRvY3MgYW5kIGFkZCBzb21lIGlkZWFzIGZvciBtYWtpbmcgdGhpcyBtb3JlIGdlbmVyYWwtcHVycG9zZS4KLQotMjAwOC0wMS0xMCAxNTo1NTozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdF9wcml2YXRlLmg6IEFkZCBHU1RfQ0FUX1RZUEVTLCBmb3IgY29uc2lzdGVuY3ksIGFuZCBzbyB0aGF0IHRoZSBvdGhlciBkZWJ1ZyBjYXRlZ29yaWVzIGRvbid0IG1ha2UgZnVuIG9mIGl0LiBTLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdF9wcml2YXRlLmg6IChHU1RfQ0FUX1RZUEVTKToKLQkgIEFkZCBHU1RfQ0FUX1RZUEVTLCBmb3IgY29uc2lzdGVuY3ksIGFuZCBzbyB0aGF0IHRoZSBvdGhlcgotCSAgZGVidWcgY2F0ZWdvcmllcyBkb24ndCBtYWtlIGZ1biBvZiBpdC4gU3BvdHRlZCBieSBTYXVyIG9uIElSQy4KLQotMjAwOC0wMS0xMCAxMzowMzozNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvcGFyc2UvTWFrZWZpbGUuYW06IE1vdmUgdHlwZXMuaCBmcm9tIEVYVFJBX0RJU1QgdG8gbm9pbnN0X0hFQURFUlMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgotCSAgTW92ZSB0eXBlcy5oIGZyb20gRVhUUkFfRElTVCB0byBub2luc3RfSEVBREVSUy4KLQotMjAwOC0wMS0xMCAxMjoxNDowNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBhdXRvZ2VuLnNoOiBBZGQgLVduby1wb3J0YWJpbGl0eSB0byB0aGUgYXV0b21ha2UgcGFyYW1ldGVycyB0byBzdG9wIHdhcm5pbmdzIGFib3V0IEdOVSBtYWtlIGV4dGVuc2lvbnMgYmVpbmcgdXNlZC4gV2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBhdXRvZ2VuLnNoOgotCSAgQWRkIC1Xbm8tcG9ydGFiaWxpdHkgdG8gdGhlIGF1dG9tYWtlIHBhcmFtZXRlcnMgdG8gc3RvcCB3YXJuaW5ncwotCSAgYWJvdXQgR05VIG1ha2UgZXh0ZW5zaW9ucyBiZWluZyB1c2VkLiBXZSByZXF1aXJlIEdOVSBtYWtlIGluIGFsbW9zdAotCSAgZXZlcnkgTWFrZWZpbGUgYW55d2F5LgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBVc2UgQU1fUFJPR19DQ19DX08gYXMgYSBjb21waWxlciB0aGF0IGFjY2VwdHMgYm90aCAtYyBhbmQgLW8KLQkgIGF0IHRoZSBzYW1lIHRpbWUgaXMgcmVxdWlyZWQgZm9yIHBlciB0YXJnZXQgZmxhZ3MuCi0KLTIwMDgtMDEtMDkgMTg6MjM6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKCkgYW5kIGRlcHJlY2F0ZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogKF9nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyksCi0JICAoZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMpLCAoX2dzdF9wbHVnaW5faW5pdGlhbGl6ZSksCi0JICAoZ3N0X3BsdWdpbl9yZWdpc3Rlcl9mdW5jKToKLQkgICogZ3N0L2dzdHBsdWdpbi5oOiAoR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDKToKLQkgIEFQSTogYWRkIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKCkgYW5kIGRlcHJlY2F0ZQotCSAgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDLCBzaW5jZSBpdCdzIG5vdCBwb3J0YWJsZQotCSAgKCM0OTg5MjQpLgotCSAgQWxzbywgaW4gX2dzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljKCksIG1ha2Ugc3VyZSB0byBjYWxsCi0JICBnX3RocmVhZF9pbml0KCkgYmVmb3JlIGNhbGxpbmcgR0xpYiBmdW5jdGlvbnMgc3VjaCBhcwotCSAgZ19saXN0X2FwcGVuZCgpIGlmIHdlJ3JlIG5vdCBpbml0aWFsaXNlZCB5ZXQsIHNpbmNlIHRoYXQKLQkgIG1heSBsZWFkIHRvIHJhbmRvbSBjcmFzaGVzIHdpdGggb2xkZXIgR1NsaWNlL0dMaWIgdmVyc2lvbnMuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKLQkgIEFkYXB0IHVuaXQgdGVzdCB0byBhYm92ZSBjaGFuZ2VzLgotCi0yMDA4LTAxLTA5IDE2OjM2OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBZZXQgYW5vdGhlciBncmF0dWl0b3VzIEdTdHJpbmcgbWljcm8tb3B0aW1pc2F0aW9uOiBhZGQgYSAocHJpdmF0ZSkgZnVuY3Rpb24gdGhhdCBzZXJpYWxpc2VzIGEgc3RydWN0dXJlIGFwcGVuZGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDogKFNUUlVDVFVSRV9FU1RJTUFURURfU1RSSU5HX0xFTik6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc190b19zdHJpbmcpOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfQVNDSUlfSVNfU1RSSU5HKSwKLQkgIChwcml2X2dzdF9zdHJ1Y3R1cmVfYXBwZW5kX3RvX2dzdHJpbmcpLCAoZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcpOgotCSAgWWV0IGFub3RoZXIgZ3JhdHVpdG91cyBHU3RyaW5nIG1pY3JvLW9wdGltaXNhdGlvbjogYWRkIGEgKHByaXZhdGUpCi0JICBmdW5jdGlvbiB0aGF0IHNlcmlhbGlzZXMgYSBzdHJ1Y3R1cmUgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nCi0JICBHU3RyaW5nLCBzbyB0aGF0IHdoZW4gd2Ugc2VyaWFsaXNlIGNhcHMgd2UgZG9uJ3QgbmVlZCB0byBhbGxvYytmcmVlCi0JICBhIHRocm93YXdheSBHU3RyaW5nIGZvciBlYWNoIHN0cnVjdHVyZSAoZWFjaCBvZiB3aGljaCBhbHNvIGVudGFpbGluZwotCSAgbXVsdGlwbGUgcmVhbGxvY3Mgb24gdGhlIHdheSk7IGFsc28gdXNlIGdfc3RyaW5nX3NpemVkX25ldygpIGluCi0JICB2YXJpb3VzIHBsYWNlcyB3aXRoIGFuIGFwcHJveGltYXRlIHN0cmluZyBsZW5ndGggdG8gYXZvaWQgcmVhbGxvY3MKLQkgIHdpdGhpbiBHU3RyaW5nLiBTZWUgIzUwMDE0My4KLQotMjAwOC0wMS0wOSAxNTowNToyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBBbHdheXMgY2hlY2sgVVRGLTggY29uZm9ybWFuY2Ugb2Ygc3RydWN0dXJlIHN0cmluZ3MgYW5kIG5vdCBvbmx5IGlmIHRoZSBkZWJ1Z2dpbmcgc3lzdGVtIGlzIGVuYWJsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUpOgotCSAgQWx3YXlzIGNoZWNrIFVURi04IGNvbmZvcm1hbmNlIG9mIHN0cnVjdHVyZSBzdHJpbmdzIGFuZCBub3Qgb25seQotCSAgaWYgdGhlIGRlYnVnZ2luZyBzeXN0ZW0gaXMgZW5hYmxlZDsgcmVhc29uaW5nOiB0aGUgYmVoYXZpb3VyIG9mCi0JICB0aGUgYWN0dWFsIGNvZGUgc2hvdWxkbid0IHJlYWxseSBjaGFuZ2UgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCi0JICBkZWJ1Z2dpbmcgc3lzdGVtIGlzIGVuYWJsZWQgb3Igbm90ICgjNTA4MjkxKS4KLQotMjAwOC0wMS0wOSAxMzo0ODowMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBNYWtlZmlsZS5hbTogUmVtb3ZlIG9sZCBjb3ZlcmFnZSB0YXJnZXQgaW4gZmF2b3VyIG9mICJtYWtlIGxjb3YiLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIE1ha2VmaWxlLmFtOgotCSAgUmVtb3ZlIG9sZCBjb3ZlcmFnZSB0YXJnZXQgaW4gZmF2b3VyIG9mICJtYWtlIGxjb3YiLgotCi0yMDA4LTAxLTA5IDEyOjI1OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogVGhlIHN0YXJ0IHNlZ21lbnQgZm9yIHJldmVyc2UgcGxheWJhY2sgZ29lcyBmcm9tIHN0YXJ0IHRvIGxhc3Rfc3RvcC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspLAotCSAgKGdzdF9iYXNlX3NyY19sb29wKToKLQkgIFRoZSBzdGFydCBzZWdtZW50IGZvciByZXZlcnNlIHBsYXliYWNrIGdvZXMgZnJvbSBzdGFydCB0byBsYXN0X3N0b3AuCi0KLTIwMDgtMDEtMDkgMTI6MjI6MjIgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvZ3N0Y2xvY2suaDogQ2FzdCB0aGUgcmVzdWx0cyBmcm9tIHRoZSB0aW1ldmFsL3NwZWNfdG9fdGltZSBtYWNyb3MgdG8gd2hhdCB0aGUgZG9jcyBzYXkgaXQgY2FzdHMgdG8sIGEgR3N0Q2xvY2tUaW0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF4aXMgY29tPgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgIENhc3QgdGhlIHJlc3VsdHMgZnJvbSB0aGUgdGltZXZhbC9zcGVjX3RvX3RpbWUgbWFjcm9zIHRvIHdoYXQgdGhlCi0JICBkb2NzIHNheSBpdCBjYXN0cyB0bywgYSBHc3RDbG9ja1RpbWUuIGZpeGVzICM1MDgxNzUuCi0KLTIwMDgtMDEtMDkgMTI6MTk6MzEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuYzogVXBkYXRlIHNvbWUgY29tbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgVXBkYXRlIHNvbWUgY29tbWVudHMuCi0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyk6Ci0JICBJbXByb3ZlIHByaW50aW5nIG9mIGZsYWdzLgotCi0yMDA4LTAxLTA4IDIxOjEzOjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogUHJpbnQgZWxlbWVudCBuYW1lIHdpdGggZ193YXJuaW5nKCkgaWYgdGhlcmUncyBhIHByb2JsZW0gd2l0aCB0aGUgdW5pdCBzaXplLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fc2l6ZSk6Ci0JICBQcmludCBlbGVtZW50IG5hbWUgd2l0aCBnX3dhcm5pbmcoKSBpZiB0aGVyZSdzIGEgcHJvYmxlbQotCSAgd2l0aCB0aGUgdW5pdCBzaXplLgotCi0yMDA4LTAxLTA4IDAyOjA3OjM4ICswMDAwICBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuLmxlc3BpYXVAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC86IEZpeCBlbXB0eSBwcm90b3R5cGVzLiAgRml4ZXMgYnVnICM1MDc5NTcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuLmxlc3BpYXVAZ21haWwuY29tPgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaDoKLQkgIEZpeCBlbXB0eSBwcm90b3R5cGVzLiAgRml4ZXMgYnVnICM1MDc5NTcuCi0KLTIwMDgtMDEtMDggMDI6MDE6MzQgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBkb2NzL2ZhcS9kZXBlbmRlbmNpZXMueG1sOiBGaXggdHlwby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2ZhcS9kZXBlbmRlbmNpZXMueG1sOiBGaXggdHlwby4KLQotMjAwOC0wMS0wNyAxMToyMzowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IERvbid0IHVwZGF0ZSB0aGUgbGFzdF9zdG9wIHBvc2l0aW9uIGluIGRvX3NlZWssIHRoYXQncyB0aGUgcG9zaXRpb24gd2UgZGlkIGEgc2VlayB0by4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X2RvX3NlZWspLAotCSAgKGdzdF9iYXNlX3NyY19sb29wKToKLQkgIERvbid0IHVwZGF0ZSB0aGUgbGFzdF9zdG9wIHBvc2l0aW9uIGluIGRvX3NlZWssIHRoYXQncyB0aGUgcG9zaXRpb24gd2UKLQkgIGRpZCBhIHNlZWsgdG8uCi0JICBSZWFkIGJhY2t3YXJkcyB3aGVuIHdlIGhhdmUgYSBuZWdhdGl2ZSByYXRlLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6IChldmVudF9mdW5jKSwgKHdhaXRfZW9zKSwKLQkgIChzZXR1cF9maWxlc3JjKSwgKGNsZWFudXBfZmlsZXNyYyksIChHU1RfU1RBUlRfVEVTVCksCi0JICAoZmlsZXNyY19zdWl0ZSk6Ci0JICBBZGQgY2hlY2sgZm9yIHJldmVyc2UgcmVhZGluZy4KLQotMjAwOC0wMS0wNyAwOTo0Nzo0OSArMDAwMCAgQWxleGlzIEJhbGxpZXIgPGFiYWxsaWVyQGdlbnRvby5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrLzogRGVjaWRlIHdoaWNoIGhlYWRlciB0byBpbmNsdWRlIGJhc2VkIG9uIHRoZSB1c2VybGFuZCBBQkkgdGFyZ2V0IGFuZCBub3QgdGhlIGtlcm5lbC9jcHUuIEZpeCB1cCBzdHJ1Y3R1ci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQWxleGlzIEJhbGxpZXIgPGFiYWxsaWVyIGF0IGdlbnRvbyBvcmc+Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGM2NC5oOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjNjQuaDoKLQkgIERlY2lkZSB3aGljaCBoZWFkZXIgdG8gaW5jbHVkZSBiYXNlZCBvbiB0aGUgdXNlcmxhbmQgQUJJIHRhcmdldAotCSAgYW5kIG5vdCB0aGUga2VybmVsL2NwdS4gRml4IHVwIHN0cnVjdHVyZSBzaXplcyBvZiBwcGM2NCBoZWFkZXIKLQkgIGZvciA2NC1iaXQgdXNlcmxhbmQgKCM1MDM1OTApLiAgTWlnaHQgbmVlZCBzb21ldGhpbmcgc2ltaWxhciBmb3IKLQkgIHg4NiB0b28uCi0KLTIwMDgtMDEtMDUgMTM6NDU6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6IExvZyB0aGUgcmVhc29uIHdoeSBmb3BlbiBmYWlscyBpbiBhZGRpdGlvbiB0byB0aGUgZmFjdCB0aGF0IGl0IGZhaWxlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOiAoX2dzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUpOgotCSAgTG9nIHRoZSByZWFzb24gd2h5IGZvcGVuIGZhaWxzIGluIGFkZGl0aW9uIHRvIHRoZSBmYWN0IHRoYXQgaXQgZmFpbGVkLgotCi0yMDA4LTAxLTA0IDE4OjQ0OjAzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9wYXJzZS9wYXJzZS5sOiBVc2UgIiVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUiIHRvIHByZXZlbnQgdXNlbGVzcyBjYWxscyB0byBpc2F0dHkoKSBvbiBldmVyeSBpbnB1dCB3aGVuIHBhcnNpbmcuIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9wYXJzZS5sOgotCSAgVXNlICIlb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlIiB0byBwcmV2ZW50IHVzZWxlc3MgY2FsbHMgdG8gaXNhdHR5KCkKLQkgIG9uIGV2ZXJ5IGlucHV0IHdoZW4gcGFyc2luZy4gQWxzbyB1c2UgIiVvcHRpb24gbm9pbnB1dCIgdG8gbm90IGRlZmluZQotCSAgdGhlIHN0YXRpYyBpbnB1dC95eWlucHV0IGZ1bmN0aW9ucyB3aGljaCB3ZSBkb24ndCB1c2UgYW55d2F5LiBUaGlzCi0JICByZW1vdmVzIGEgY29tcGlsZXIgd2FybmluZyB3aXRoIGdjYyA0LjMgYW5kIHNhdmVzIHNvbWUgYnl0ZXMgaW4gdGhlCi0JICBsaWJyYXJ5LgotCSAgKiBnc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkucHJlLmM6Ci0JICBSZWdlbmVyYXRlZCBmb3IgdGhlIGFib3ZlIGNoYW5nZS4KLQotMjAwOC0wMS0wNCAxODozOToxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBEb24ndCBjcmFzaCB3aGVuIHRyeWluZyB0byBmaXhhdGUgYW5kIGVtcHR5IGxpc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZml4YXRlX3ZhbHVlKToKLQkgIERvbid0IGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGZpeGF0ZSBhbmQgZW1wdHkgbGlzdC4KLQkgIEZpeGVzICM1MDY2NDMuCi0KLTIwMDgtMDEtMDMgMDk6NDM6NDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBDbGFyaWZ5IHRoZSBjb21tZW50cyB0byBtYWtlIHRoZSB1c2FnZSBvZiB0aGlzIHNjcmlwdCBhbmQgd2hhdCBpdCBkb2VzIGVhc2llciB0byB1bmRlcnN0YW5kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIENsYXJpZnkgdGhlIGNvbW1lbnRzIHRvIG1ha2UgdGhlIHVzYWdlIG9mIHRoaXMgc2NyaXB0IGFuZCB3aGF0IGl0Ci0JICBkb2VzIGVhc2llciB0byB1bmRlcnN0YW5kLgotCi0yMDA4LTAxLTAxIDE3OjEwOjMyICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICB0b29scy9nc3QtcGxvdC10aW1lbGluZS5weTogQWRkIG1vcmUgb3B0aW9ucyB0byBnc3QtcGxvdC10aW1lbGluZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OgotCSAgQWRkIG1vcmUgb3B0aW9ucyB0byBnc3QtcGxvdC10aW1lbGluZQotCi0yMDA3LTEyLTMxIDE5OjExOjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6IFNvbWUgbW9yZSBpbmZvIG9uIGhvdyB0aGUgc3RyZWFtX3RpbWUgaW4gR3N0QmFzZVNpbmsgaXMgZG9uZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6Ci0JICBTb21lIG1vcmUgaW5mbyBvbiBob3cgdGhlIHN0cmVhbV90aW1lIGluIEdzdEJhc2VTaW5rIGlzIGRvbmUuCi0KLTIwMDctMTItMzAgMTM6MzY6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiByZW1vdmUgYm9ndXMgY2hhbmdlbG9nIGVudHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiByZW1vdmUgYm9ndXMgY2hhbmdlbG9nIGVudHJ5Ci0KLTIwMDctMTItMzAgMTM6MzE6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogUHV0IGJhY2sgdGhlIHRjYXNlX3NldF90aW1lb3V0KCksIGFwcGFyZW50bHkgaXQncyBuZWVkZWQgYWZ0ZXIgYWxsOyBmaXggaXQgdXAgaW4gYSB3YXkgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogKGdzdF9zaW5rc19zdWl0ZSk6Ci0JICBQdXQgYmFjayB0aGUgdGNhc2Vfc2V0X3RpbWVvdXQoKSwgYXBwYXJlbnRseSBpdCdzIG5lZWRlZCBhZnRlcgotCSAgYWxsOyBmaXggaXQgdXAgaW4gYSB3YXkgdGhhdCBtYWtlcyB0aGluZ3Mgd29yayB3aXRoIHZhbGdyaW5kIHRvby4KLQotMjAwNy0xMi0zMCAxMjoyMjo0OSArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGRlYnVndXRpbHMuYzogYWRkIHdhcm5pbmcgd2hlbiBmYWlsZWQgdG8gb3BlbiBmaWxlIGZvciB3cml0aW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIGFkZCB3YXJuaW5nIHdoZW4gZmFpbGVkIHRvIG9wZW4gZmlsZSBmb3Igd3JpdGluZwotCi0yMDA3LTEyLTI4IDE0OjM0OjM0ICswMDAwICBMYXVyZW50IEdsYXlhbCA8c3BnbGVnbGVAeWFob28uZnI+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jOiBPcHRpbWlzYXRpb246IGJhaWwgb3V0IG9mIHRoZSBsb29wIGFzIGVhcmx5IGFzIHBvc3NpYmxlICgjNTAwMTQzKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IExhdXJlbnQgR2xheWFsICA8c3BnbGVnbGUgeWFob28gZnI+Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2lzX2ZpeGVkKToKLQkgIE9wdGltaXNhdGlvbjogYmFpbCBvdXQgb2YgdGhlIGxvb3AgYXMgZWFybHkgYXMgcG9zc2libGUgKCM1MDAxNDMpLgotCi0yMDA3LTEyLTI4IDE0OjE1OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBCdW5jaCBvZiBncmF0dWl0b3VzIG5hbm8tb3B0aW1pc2F0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfdG9fc3RyaW5nKToKLQkgICogZ3N0L2dzdGluZm8uYzogKGdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcik6Ci0JICAqIGdzdC9nc3RwYXJzZS5jOiAoZ3N0X3BhcnNlX2xhdW5jaHYpOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX2R1bXBfbWVtKToKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfc2VyaWFsaXplX2FueV9saXN0KSwKLQkgIChnc3RfdmFsdWVfdHJhbnNmb3JtX2FueV9saXN0X3N0cmluZyk6Ci0JICBCdW5jaCBvZiBncmF0dWl0b3VzIG5hbm8tb3B0aW1pc2F0aW9ucy4KLQotMjAwNy0xMi0yOCAxMzo1NzowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiBGaXggbGVhayBpbiB1bml0IHRlc3QgKGJ1cyBzeW5jIGhhbmRsZXIgbXVzdCB1bnJlZiB0aGUgbWVzc2FnZSBpZiBpdCByZXR1cm5zIEdTVF9CVVNfRFJPLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoYXN5bmNfZG9uZV9mdW5jKSwKLQkgIChhc3luY19kb25lX2Vvc19mdW5jKToKLQkgIEZpeCBsZWFrIGluIHVuaXQgdGVzdCAoYnVzIHN5bmMgaGFuZGxlciBtdXN0IHVucmVmIHRoZSBtZXNzYWdlCi0JICBpZiBpdCByZXR1cm5zIEdTVF9CVVNfRFJPUCkuIERvbid0IGZpZGRsZSB3aXRoIHRoZSBkZWZhdWx0IHRlc3QKLQkgIHRpbWVvdXQsIHRoaXMgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHByZWNvbmZpZ3VyZWQgdmFsdWUKLQkgIHZpYSBDS19ERUZBVUxUX1RJTUVPVVQsIGFuZCBhbHNvIGJyZWFrcyB0aGluZ3Mgd2l0aCB2YWxncmluZAotCSAgYmVjYXVzZSBpdCBvdmVycmlkZXMgdGhlIHZhbHVlIHNwZWNpZmllZCBpbiBDS19ERUZBVUxUX1RJTUVPVVQuCi0KLTIwMDctMTItMjQgMTk6MjE6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEFkZCBidWcgdGhhdCB3YXMgZml4ZWQgd2l0aCBsYXN0IGNvbW1pdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQWRkIGJ1ZyB0aGF0IHdhcyBmaXhlZCB3aXRoIGxhc3QgY29tbWl0LgotCi0yMDA3LTEyLTI0IDE5OjExOjI5ICswMDAwICBMYXVyZW50IEdsYXlhbCA8c3BnbGVnbGVAeWFob28uZnI+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHN0ZGlvX2V4dC5oIGZvciB0aGUgZmlsZXNpbmsgY2hhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gUGF0Y2ggYnk6IExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZSBhdCB5YWhvbyBkb3QgZnI+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIENoZWNrIGZvciBzdGRpb19leHQuaCBmb3IgdGhlIGZpbGVzaW5rIGNoYW5nZXMuCi0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGJ1ZmZlcl9tb2RlX2dldF90eXBlKSwKLQkgIChnc3RfZmlsZV9zaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2ZpbGVfc2lua19pbml0KSwKLQkgIChnc3RfZmlsZV9zaW5rX2Rpc3Bvc2UpLCAoZ3N0X2ZpbGVfc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9maWxlX3NpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9maWxlX3Npbmtfb3Blbl9maWxlKSwKLQkgIChnc3RfZmlsZV9zaW5rX2Nsb3NlX2ZpbGUpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6Ci0JICBBZGQgdHdvIHByb3BlcnRpZXMgdG8gY29udHJvbCB0aGUgYnVmZmVyaW5nIG1vZGUgYW5kIHNpemUuCi0JICBBUEk6IEdzdEZpbGVTaW5rOjpidWZmZXItbW9kZQotCSAgQVBJOiBHc3RGaWxlU2luazo6YnVmZmVyLXNpemUKLQotMjAwNy0xMi0yNCAxNDozNToyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IEFkZCBzb21lIG1vcmUgZG9jcyB0byBleHBsYWluIHdoeSBhIEZJWE1FIHdhcyB3cm9uZ2x5IGFkZGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2ppdHRlcl91bmxvY2tlZCk6Ci0JICBBZGQgc29tZSBtb3JlIGRvY3MgdG8gZXhwbGFpbiB3aHkgYSBGSVhNRSB3YXMgd3JvbmdseSBhZGRlZC4KLQotMjAwNy0xMi0yMiAxMjo0ODoyNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0b2JqZWN0LmM6IEZpeCB0eXBvIGluIHRoZSBnc3Rfb2JqZWN0X3tyZWYsdW5yZWZ9IGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG9iamVjdC5jOgotCSAgRml4IHR5cG8gaW4gdGhlIGdzdF9vYmplY3Rfe3JlZix1bnJlZn0gZG9jdW1lbnRhdGlvbi4KLQotMjAwNy0xMi0yMSAyMToxNzozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svOiBEb24ndCB1c2UgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDLCBpdCBpcyBub3QgcG9ydGFibGUgYW5kIGlzIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgKHNlZSAjNDk4OTI0KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jOgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6Ci0JICBEb24ndCB1c2UgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDLCBpdCBpcyBub3QgcG9ydGFibGUgYW5kIGlzCi0JICBnb2luZyB0byBiZSBkZXByZWNhdGVkIChzZWUgIzQ5ODkyNCkuCi0KLTIwMDctMTItMjEgMjA6NTg6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R0eXBlZmluZC5jOiBNYWtlIGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIgd29yayBmb3Igc3RhdGljIHR5cGVmaW5kIGZ1bmN0aW9ucywgaWUuIGFsbG93IHBhc3NpbmcgcGx1Z2luID09IE5VTEwgKC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0eXBlZmluZC5jOiAoZ3N0X3R5cGVfZmluZF9yZWdpc3Rlcik6Ci0JICBNYWtlIGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIgd29yayBmb3Igc3RhdGljIHR5cGVmaW5kIGZ1bmN0aW9ucywKLQkgIGllLiBhbGxvdyBwYXNzaW5nIHBsdWdpbiA9PSBOVUxMIChwcmVyZXF1aXNpdGUgZm9yICM0OTg5MjQpLgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X3JlZ2lzdGVyKToKLQkgIFNtYWxsIGRvY3MgYWRkaXRpb24uCi0KLTIwMDctMTItMjEgMTM6NTQ6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogUmVhbGx5IHVubGluayB0aGUgcGVlciBwYWQgaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBwZWVyIHBvaW50ZXIgdG8gTlVMTCB3aGVuIHdlIGRpc3Bvc2UgdGhlIHBhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2Rpc3Bvc2UpOgotCSAgUmVhbGx5IHVubGluayB0aGUgcGVlciBwYWQgaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBwZWVyIHBvaW50ZXIgdG8gTlVMTAotCSAgd2hlbiB3ZSBkaXNwb3NlIHRoZSBwYWQuCi0JICBUaGlzIGNvcnJlY3RseSBjYWxscyB0aGUgdW5saW5rIGZ1bmN0aW9ucyBhbmQgbWFrZXMgc3VyZSB0aGF0IHRoZSBwZWVyCi0JICBkb2VzIG5vdCBoYXZlIGEgaGFuZGxlIHRvIGludmFsaWQgbWVtb3J5LiBTZWUgIzUwNDY3MS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3BhZF9zdWl0ZSk6Ci0JICBBZGQgdGVzdHN1aXRlIGZvciBhYm92ZSBjYXNlLgotCi0yMDA3LTEyLTIwIDA5OjIwOjI3ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDogRml4IGRldGVjdGlvbiBvZiB0aGUgY2hlY2sgdmVyc2lvbiB3ZSdyZSBjb21waWxpbmcgYWdhaW5zdCAod291bGQgb3RoZXJ3aXNlIGJyZWFrIGlmIGNoZWNrLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBheGlzIGNvbT4KLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIEZpeCBkZXRlY3Rpb24gb2YgdGhlIGNoZWNrIHZlcnNpb24gd2UncmUgY29tcGlsaW5nIGFnYWluc3QgKHdvdWxkCi0JICBvdGhlcndpc2UgYnJlYWsgaWYgY2hlY2sgZ29lcyB2MC4xMC4wKTsgY29ycmVjdGx5IHJlcG9ydCB0aGUKLQkgIG5hbWUgb2YgdGhlIGZhaWxlZCB0ZXN0IGFnYWluIGluIGNhc2Ugb2YgZmFpbHVyZSwgaW5zdGVhZCBvZgotCSAganVzdCAndGYnIChmaXhlcyAjNTA0NDk5KS4KLQotMjAwNy0xMi0xOSAxNzo0OTozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEFsbG93IHNlbmRpbmcgRU9TIHRvIHRoZSBzb3VyY2UgdG8gbWFrZSBpdCBzZW5kIG91dCBhbiBFT1MgZXZlbnQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19wYWRfZ2V0X3JhbmdlKSwKLQkgIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nKSwKLQkgIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgIEFsbG93IHNlbmRpbmcgRU9TIHRvIHRoZSBzb3VyY2UgdG8gbWFrZSBpdCBzZW5kIG91dCBhbiBFT1MgZXZlbnQgZnJvbQotCSAgdGhlIHN0cmVhbWluZyB0aHJlYWQuCi0JICBVcGRhdGUgZG9jcyBhbmQgZGVwcmVjYXRlIHRoZSBvbGQgTlVMTC9SRUFEWSBzaHV0ZG93biBtZXRob2QuCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9iYXNlc3JjX3N1aXRlKToKLQkgIEFkZCB1bml0IHRlc3QgZm9yIGNvbnRyb2xsZWQgc2h1dGRvd24uCi0KLTIwMDctMTItMTkgMTI6NDg6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDogU21hbGwgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQ6Ci0JICBTbWFsbCB1cGRhdGVzLgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspLAotCSAgKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50X2Z1bGwpLCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLAotCSAgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSk6Ci0JICBUaGUgc2VlayBmb3JtYXQgY2FuIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBzZWdtZW50IGZvcm1hdCB3aGVuIHRoZSBzdGFydAotCSAgYW5kIHN0b3AgdmFsdWVzIGFyZSBub3QgdG8gYmUgdXBkYXRlZCwgd2hlbiB3ZSBvbmx5IGRvIGEgcmF0ZSBjaGFuZ2UgZm9yCi0JICBleGFtcGxlLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9zZWdtZW50X3N1aXRlKToKLQkgIEFkZCBhIHRlc3RjYXNlIGZvciB0aGUgcmF0ZS1vbmx5IHNlZWtzLCBjaGVja2luZyB0aGF0IHRoZSBmb3JtYXQgaXMKLQkgIGNvcnJlY3RseSBpZ25vcmVkIHdoZW4gc3RhcnQgYW5kIHN0b3AgYXJlIG5vdCB1cGRhdGVkLgotCi0yMDA3LTEyLTE4IDEzOjM4OjMxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5LCBnc3RlbnVtdHlwZXMuYyBjaGFuZ2VzIHdlcmUgbm90IGNvbW1pdHRlZCBiZWNhdXNlIHRoZXJlIHdlcmUgbm9uZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIENoYW5nZUxvZyBzdXJnZXJ5LCBnc3RlbnVtdHlwZXMuYyBjaGFuZ2VzIHdlcmUgbm90IGNvbW1pdHRlZCBiZWNhdXNlIHRoZXJlIHdlcmUgbm9uZQotCi0yMDA3LTEyLTE4IDEzOjE4OjM1ICswMDAwICBNYXR0aGlhcyBCb2x0ZSA8cGhvdG9uQG1haWwudXBiLmRlPgotCi0JICB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6IFNvbWUgaW5kZW50aW9uIGZpeGVzIGJ5IGdzdC1pbmRlbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOiAocmVnaXN0ZXJfZ3N0X2J1ZmZlcl9mbGFnKSwKLQkgIChyZWdpc3Rlcl9nc3RfYnVmZmVyX2NvcHlfZmxhZ3MpLCAocmVnaXN0ZXJfZ3N0X2Nsb2NrX2ZsYWdzKSwKLQkgIChyZWdpc3Rlcl9nc3RfZGVidWdfZ3JhcGhfZGV0YWlscyksCi0JICAocmVnaXN0ZXJfZ3N0X3N0YXRlX2NoYW5nZV9yZXR1cm4pLCAocmVnaXN0ZXJfZ3N0X3N0YXRlX2NoYW5nZSksCi0JICAocmVnaXN0ZXJfZ3N0X2VsZW1lbnRfZmxhZ3MpLCAocmVnaXN0ZXJfZ3N0X2NvcmVfZXJyb3IpLAotCSAgKHJlZ2lzdGVyX2dzdF9saWJyYXJ5X2Vycm9yKSwgKHJlZ2lzdGVyX2dzdF9yZXNvdXJjZV9lcnJvciksCi0JICAocmVnaXN0ZXJfZ3N0X3N0cmVhbV9lcnJvciksIChyZWdpc3Rlcl9nc3RfZXZlbnRfdHlwZV9mbGFncyksCi0JICAocmVnaXN0ZXJfZ3N0X2V2ZW50X3R5cGUpLCAocmVnaXN0ZXJfZ3N0X2luZGV4X2VudHJ5X3R5cGUpLAotCSAgKHJlZ2lzdGVyX2dzdF9hc3NvY19mbGFncyksIChyZWdpc3Rlcl9nc3RfbWVzc2FnZV90eXBlKSwKLQkgIChyZWdpc3Rlcl9nc3RfbWluaV9vYmplY3RfZmxhZ3MpLCAocmVnaXN0ZXJfZ3N0X3BhZF9saW5rX3JldHVybiksCi0JICAocmVnaXN0ZXJfZ3N0X2Zsb3dfcmV0dXJuKSwgKHJlZ2lzdGVyX2dzdF9wYWRfdGVtcGxhdGVfZmxhZ3MpLAotCSAgKHJlZ2lzdGVyX2dzdF9waXBlbGluZV9mbGFncyksIChyZWdpc3Rlcl9nc3RfcGx1Z2luX2Vycm9yKSwKLQkgIChyZWdpc3Rlcl9nc3RfdGFnX21lcmdlX21vZGUpLCAocmVnaXN0ZXJfZ3N0X2FsbG9jX3RyYWNlX2ZsYWdzKSwKLQkgIChyZWdpc3Rlcl9nc3RfdHlwZV9maW5kX3Byb2JhYmlsaXR5KSwgKHJlZ2lzdGVyX2dzdF9wYXJzZV9lcnJvcik6Ci0JICBTb21lIGluZGVudGlvbiBmaXhlcyBieSBnc3QtaW5kZW50LgotCSAgUGF0Y2ggYnk6IE1hdHRoaWFzIEJvbHRlIDxwaG90b24gYXQgbWFpbCBkb3QgdXBiIGRvdCBkZT4KLQkgICogd2luMzIvdnM4L2dyYW1tYXIudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0Y29udHJvbGxlci52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RyZWFtZXIudmNwcm9qOgotCSAgRml4IGNvbXBpbGF0aW9uIHdpdGggVlM4IGFuZCBpbmNsdWRlIHNvbWUgbWlzc2luZyBmaWxlcy4KLQotMjAwNy0xMi0xOCAxMjowMzoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHRhZ2xpc3QuYzogU21hbGwgZG9jcyBhZGRpdGlvbjogbWVudGlvbiB0aGF0IHRoZSBzdHJpbmdzIHJldHVybmVkIGJ5IGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nKigpIGFyZSBpbiBVVEYtOCBlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIFNtYWxsIGRvY3MgYWRkaXRpb246IG1lbnRpb24gdGhhdCB0aGUgc3RyaW5ncyByZXR1cm5lZCBieQotCSAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcqKCkgYXJlIGluIFVURi04IGVuY29kaW5nLgotCi0yMDA3LTEyLTE3IDE5OjU5OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBNYWtlZmlsZS5hbTogVGhlIGNoZWNrLWV4cG9ydHMgc3R1ZmYgbW92ZWQgdG8gY29tbW9uL3dpbjMyLm1haywgc28gaW5jbHVkZSB0aGF0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIE1ha2VmaWxlLmFtOgotCSAgVGhlIGNoZWNrLWV4cG9ydHMgc3R1ZmYgbW92ZWQgdG8gY29tbW9uL3dpbjMyLm1haywgc28gaW5jbHVkZSB0aGF0LgotCi0yMDA3LTEyLTE3IDE2OjM4OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogTWFrZSBfd2FpdF9wbGF5aW5nKCkgbm90IGNoZWNrIGFueSB2YXJpYWJsZXMgc28gdGhhdCB3ZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gc3ViY2wuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcpLAotCSAgKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspLCAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX3NldF9wbGF5aW5nKSwgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgTWFrZSBfd2FpdF9wbGF5aW5nKCkgbm90IGNoZWNrIGFueSB2YXJpYWJsZXMgc28gdGhhdCB3ZSBjYW4gY2FsbCB0aGlzCi0JICBmdW5jdGlvbiBmcm9tIHN1YmNsYXNzZXMuIE1vdmUgdGhlIGNoZWNrcyBlbHNld2hlcmUgc2ltaWxhciB0bwotCSAgX3dhaXRfcHJlcm9sbCgpIGluIGJhc2VzaW5rLgotCSAgQWRkIHNvbWUgZGVidWdnaW5nLgotCSAgT25seSBzaWduYWwgdGhlIExJVkUgY29uZCB3aGVuIHdlIGFyZSBnb2luZyBiYWNrIHRvIFBMQVlJTkcuCi0KLTIwMDctMTItMTYgMTg6Mjk6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBVc2UgZ19yZW1vdmUoKSBhbmQgZ19yZW5hbWUoKS4gQ2hlY2sgcmVzdWx0IG9mIGdfcmVuYW1lKCksIGFuZCBkb24ndCBsZWFrIHRoZSBvcGVuIGZpbGUgZGVzYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jYWNoZSk6Ci0JICBVc2UgZ19yZW1vdmUoKSBhbmQgZ19yZW5hbWUoKS4gQ2hlY2sgcmVzdWx0IG9mIGdfcmVuYW1lKCksIGFuZAotCSAgZG9uJ3QgbGVhayB0aGUgb3BlbiBmaWxlIGRlc2NyaXB0b3IgaWYgd2UgZXJyb3Igb3V0IHdoZW4gd3JpdGluZy4KLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChsb2FkX3BsdWdpbiksIChnc3RfcmVnaXN0cnlfeG1sX3dyaXRlX2NhY2hlKToKLQkgIE11c3QgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBjbG9zZSgpIGFmdGVyIHdyaXRpbmcgb3V0IHRoZSBuZXcKLQkgIHJlZ2lzdHJ5IGZpbGUuICBTb21ldGltZXMgd3JpdGUgcHJvYmxlbXMgc3VjaCBhcyBvdXQtb2YtZGlza3NwYWNlCi0JICBhcmUgb25seSByZXBvcnRlZCB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgbm90IGFscmVhZHkgZHVyaW5nCi0JICB0aGUgd3JpdGUuICBUaGlzIG1heSBoYXZlIGNhdXNlZCBwYXJ0aWFsL2Jyb2tlbiByZWdpc3RyeSBmaWxlcyBpbgotCSAgc29tZSByYXJlIGNpcmN1bXN0YW5jZXMuIFNob3VsZCBmaXggIzUwMzY3NS4KLQotMjAwNy0xMi0xNiAxNzozNzoxMSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZG9jcy86IElnbm9yZSBmaWxlcyBnZW5lcmF0ZWQgYnkgbmV3IGNvbW1vbi8qIG1vZGlmaWNhdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC8uY3ZzaWdub3JlOgotCSAgKiBkb2NzL2xpYnMvLmN2c2lnbm9yZToKLQkgICogZG9jcy9wbHVnaW5zLy5jdnNpZ25vcmU6Ci0JICBJZ25vcmUgZmlsZXMgZ2VuZXJhdGVkIGJ5IG5ldyBjb21tb24vKiBtb2RpZmljYXRpb25zCi0KLTIwMDctMTItMTUgMTU6MTk6MzIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOiBZZXMsIHlvdSBjYW4gYWxzbyBoYXZlIGEgPFRBQj4gaWYgeW91IHdhbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgWWVzLCB5b3UgY2FuIGFsc28gaGF2ZSBhIDxUQUI+IGlmIHlvdSB3YW50LgotCi0yMDA3LTEyLTE1IDE0OjU4OjU5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjogQWRkIG5ldyBiYXNldHJhbnNmb3JtIEFQSSB0byB3aW4gZXhwb3J0IGZpbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgQWRkIG5ldyBiYXNldHJhbnNmb3JtIEFQSSB0byB3aW4gZXhwb3J0IGZpbGUuCi0KLTIwMDctMTItMTUgMTQ6NDI6MjUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiBBZGp1c3QgdGhlIHRlc3QgdG8gdGhlIHJlZmNvdW50IGNoYW5nZSB0d28gZGF5cyBhZ28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgQWRqdXN0IHRoZSB0ZXN0IHRvIHRoZSByZWZjb3VudCBjaGFuZ2UgdHdvIGRheXMgYWdvLgotCi0yMDA3LTEyLTE0IDIxOjM2OjUwICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZG9jcy9mYXEvZ2V0dGluZy54bWw6IEZpeCB0eXBvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dldHRpbmcueG1sOiBGaXggdHlwby4KLQotMjAwNy0xMi0xNCAxNjo1MjozOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBUEk6IEFkZCBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSgpIHRvIGNvbnRyb2wgd2hldGhlciB0aGUgZWxlbWVudCBjb3JyZWN0bHkgaGFuZGxlcyBHU1RfQlVGRkVSX0ZMQUdfR0FQIG9yIHMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgQVBJOiBBZGQgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUoKSB0byBjb250cm9sIHdoZXRoZXIKLQkgIHRoZSBlbGVtZW50IGNvcnJlY3RseSBoYW5kbGVzIEdTVF9CVUZGRVJfRkxBR19HQVAgb3Igc2hvdWxkbid0Ci0JICBnZXQgYnVmZmVycyB3aXRoIHRoaXMgZmxhZyBhdCBhbGwuIEZpeGVzICM1MDMyMzEuCi0KLTIwMDctMTItMTMgMTY6NDk6NTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS86IFJlcGxhY2UgZ3N0X3BhZF9nZXRfcGFyZW50IGJ5IEdTVF9PQkpFQ1RfUEFSRU5UIGluc2lkZSBzdHJlYW1pbmcgdGhyZWFkLiBDb3JyZWN0IGxvZyBtZXNzYWdlIGluIGdzdGJhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBSZXBsYWNlIGdzdF9wYWRfZ2V0X3BhcmVudCBieSBHU1RfT0JKRUNUX1BBUkVOVCBpbnNpZGUgc3RyZWFtaW5nCi0JICB0aHJlYWQuIENvcnJlY3QgbG9nIG1lc3NhZ2UgaW4gZ3N0YmFzZXNyYy5jLgotCi0yMDA3LTEyLTEzIDEzOjU5OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dXRpbHMuYzogRml4IHBvc3NpYmxlIGNvbXBpbGVyIHdhcm5pbmcgKCM1MDM0MTcpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZWxlbWVudF9maW5kX3VuY29ubmVjdGVkX3BhZCk6Ci0JICBGaXggcG9zc2libGUgY29tcGlsZXIgd2FybmluZyAoIzUwMzQxNykuCi0KLTIwMDctMTItMTMgMTE6NDE6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RvYmplY3QuYzogRG9uJ3QgdXNlIEdTVF9DQVRfRVZFTlQgaGVyZSBmb3IgbG9nZ2luZywgaXQgbWFrZXMgbm8gc2Vuc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9kaXNwYXRjaF9wcm9wZXJ0aWVzX2NoYW5nZWQpOgotCSAgRG9uJ3QgdXNlIEdTVF9DQVRfRVZFTlQgaGVyZSBmb3IgbG9nZ2luZywgaXQgbWFrZXMgbm8gc2Vuc2UuCi0KLTIwMDctMTItMTMgMTA6MzE6MzMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogQWRkIHN1cHBvcnQgZm9yIEdzdEZyYWN0aW9uIHByb3BlcnRpZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKLQkgIEFkZCBzdXBwb3J0IGZvciBHc3RGcmFjdGlvbiBwcm9wZXJ0aWVzLgotCi0yMDA3LTEyLTEyIDIzOjIwOjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBNYWtlZmlsZS5hbTogQWRkIGNoZWNrLWV4cG9ydHMgdGFyZ2V0IGFuZCBydW4gaXQgYXMgcGFydCBvZiAnbWFrZSBjaGVjaycgKHNlZSAjNDk5MTQwIGFuZCAjNDkzOTgzKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNYWtlZmlsZS5hbToKLQkgIEFkZCBjaGVjay1leHBvcnRzIHRhcmdldCBhbmQgcnVuIGl0IGFzIHBhcnQgb2YgJ21ha2UgY2hlY2snCi0JICAoc2VlICM0OTkxNDAgYW5kICM0OTM5ODMpLgotCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9jbGFzc19pbml0KToKLQkgICogZ3N0L2dzdGluZm8uYzogKF9wcml2X2dzdF9pbl92YWxncmluZCksIChfZ3N0X2RlYnVnX2luaXQpLAotCSAgKF9wcml2X2dzdF9pbl92YWxncmluZCk6Ci0JICAqIGdzdC9nc3RpbmZvLmg6IChHc3RMb2dGdW5jdGlvbik6Ci0JICAqIGdzdC9nc3R0eXBlZmluZC5jOiAodHlwZV9maW5kX2RlYnVnKSwgKEdTVF9DQVRfREVGQVVMVCksCi0JICAoZ3N0X3R5cGVfZmluZF9yZWdpc3Rlcik6Ci0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogKHR5cGVfZmluZF9kZWJ1ZyksIChHU1RfQ0FUX0RFRkFVTFQpLAotCSAgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfdHlwZSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoR1NUX0NBVF9ERUZBVUxUKSwKLQkgIChHU1RfQ0FUX0RFRkFVTFQpLCAocGFyZW50X2NsYXNzKSwgKHByaXZfZ3N0X2NvbnRyb2xsZXJfa2V5KSwKLQkgIChnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0KSwgKGdzdF9jb250cm9sbGVyX25ld19saXN0KSwKLQkgIChfZ3N0X2NvbnRyb2xsZXJfZGlzcG9zZSksIChfZ3N0X2NvbnRyb2xsZXJfY2xhc3NfaW5pdCk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbHNvdXJjZS5jOiAoR1NUX0NBVF9ERUZBVUxUKToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzogKEdTVF9DQVRfREVGQVVMVCksCi0JICAoR1NUX0NBVF9ERUZBVUxUKSwgKGdzdF9vYmplY3RfdW5jb250cm9sX3Byb3BlcnRpZXMpLAotCSAgKGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xsZXIpLCAoZ3N0X29iamVjdF9zZXRfY29udHJvbGxlciksCi0JICAoZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luYyksIChnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKSwKLQkgIChnc3Rfb2JqZWN0X3NldF9jb250cm9sX3NvdXJjZSksIChnc3Rfb2JqZWN0X2dldF9jb250cm9sX3NvdXJjZSksCi0JICAoZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXlzKSwgKGdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5KSwKLQkgIChnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGUpLCAoZ3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlKToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6IChHU1RfQ0FUX0RFRkFVTFQpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2xpYi5jOiAoR1NUX0NBVF9ERUZBVUxUKToKLQkgIE1ha2Ugc29tZSBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgc3RhdGljIHN0YXRpYzsgcmVuYW1lIHNvbWUKLQkgIHByaXZhdGUgc3ltYm9scyBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGV4cG9ydGVkOyBhZGQgc29tZSBGSVhNRQotCSAgY29tbWVudHMgc28gd2UgY2FuIG1vdmUgYWNjaWRlbnRhbGx5IGV4cG9ydGVkIGZ1bmN0aW9ucyBpbnRvCi0JICBvdXIgcHJpdmF0ZSBzZWN0aW9uIGluIDAuMTEuCi0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIGdzdF91dGlsc19nZXRfdGltZXN0YW1wKCkuCi0KLTIwMDctMTItMTIgMTQ6MDQ6MTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHZhbHVlLio6IEFkZCBtb3JlIG1pc3NpbmcgIlNpbmNlOiIgdGFncyB0byBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIEFkZCBtb3JlIG1pc3NpbmcgIlNpbmNlOiIgdGFncyB0byBkb2NzLgotCi0yMDA3LTEyLTEyIDA2OjU4OjU2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBBZGQgbWlzaW5nICJTaW5jZToiIHRvIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICBBZGQgbWlzaW5nICJTaW5jZToiIHRvIGRvY3MuCi0KLTIwMDctMTItMTEgMjI6MDM6NTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHBsdWdpbi5jOiBJbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiIHRvIGZpeCB0aGUgYnVpbGQgb24gc3lzdGVtIHdpdGggZ2xpYiA8IDIuMTAuIEZpeGVzICM1MDMxMzEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOgotCSAgSW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIiB0byBmaXggdGhlIGJ1aWxkIG9uIHN5c3RlbSB3aXRoCi0JICBnbGliIDwgMi4xMC4gRml4ZXMgIzUwMzEzMS4KLQotMjAwNy0xMi0xMSAyMDozMjoyOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0dXRpbHMuKjogQWN0dWFsbHkgaXRzIG5vdCBQVVJFIGFzIGl0IGdldHMgdGhlIHRpbWUgZnJvbSBlbHNld2hlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgQWN0dWFsbHkgaXRzIG5vdCBQVVJFIGFzIGl0IGdldHMgdGhlIHRpbWUgZnJvbSBlbHNld2hlcmUuCi0KLTIwMDctMTItMTEgMjA6MjM6NTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQ2hhbmdlIEdTVF9HRVRfVElNRVNUQU1QIGludG8gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCBhbmQgcmVwbGFjZSBhbGwgdXNlcyBhcyB3ZSBkb24ndCBoYXZlIEhBVkVfUE9TSVhfVElNRVJTIGluIHB1YmxpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBDaGFuZ2UgR1NUX0dFVF9USU1FU1RBTVAgaW50byBnc3RfdXRpbF9nZXRfdGltZXN0YW1wIGFuZCByZXBsYWNlIGFsbAotCSAgdXNlcyBhcyB3ZSBkb24ndCBoYXZlIEhBVkVfUE9TSVhfVElNRVJTIGluIHB1YmxpYyBoZWFkZXJzLgotCSAgVGhhbmtzIFRpbSBmb3Igc3BvdHRpbmcuCi0KLTIwMDctMTItMTEgMTU6Mjk6MjYgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICB1cGRhdGUgc3BlYyBmaWxlIGJ5IG1pcnJvcmluZyBsYXRlc3QgRmVkb3JhIG9uZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgc3BlYyBmaWxlIGJ5IG1pcnJvcmluZyBsYXRlc3QgRmVkb3JhIG9uZQotCi0yMDA3LTEyLTA5IDA0OjI4OjAzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogRG9uJ3QgZGVmaW5lIEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQgZm9yIHJlbGVhc2VzLiBGaXhlcyAjNDk4MTgxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIERvbid0IGRlZmluZSBHU1RfRElTQUJMRV9ERVBSRUNBVEVEIGZvciByZWxlYXNlcy4gRml4ZXMgIzQ5ODE4MS4KLQotMjAwNy0xMi0wOCAxMjo1NDo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBEb24ndCBjcmFzaCBpbiBfZnJvbV9zdHJpbmcoKSBpZiB0aGUgc3RydWN0dXJlIG5hbWUgaXMgbm90IHZhbGlkIChmaXhlcyAjNTAxNTYwKS4gIEFsbG93IHN0cnVjdHVyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV92YWxpZGF0ZV9uYW1lKSwKLQkgIChnc3Rfc3RydWN0dXJlX25ld192YWxpc3QpLCAoZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSksCi0JICAoZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyk6Ci0JICBEb24ndCBjcmFzaCBpbiBfZnJvbV9zdHJpbmcoKSBpZiB0aGUgc3RydWN0dXJlIG5hbWUgaXMgbm90IHZhbGlkCi0JICAoZml4ZXMgIzUwMTU2MCkuICBBbGxvdyBzdHJ1Y3R1cmUgbmFtZXMgdG8gc3RhcnQgd2l0aCBhIG51bWJlcgotCSAgYWdhaW4gKHRoaXMgYXBwYXJlbnRseSBicm9rZSB0aGUgdWJ1bnR1IGNvZGVjIGluc3RhbGxlcikuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogKEdTVF9TVEFSVF9URVNUKSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChHU1RfU1RBUlRfVEVTVCk6Ci0JICBBZGQgdW5pdCB0ZXN0IGZvciB0aGUgY3Jhc2g7IHVwZGF0ZSB1bml0IHRlc3RzIGZvciBuZXcgYmVoYXZpb3VyLgotCi0yMDA3LTEyLTAzIDExOjA0OjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogQ2xhcmlmeSBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQoKSBkb2N1bWVudGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgQ2xhcmlmeSBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQoKSBkb2N1bWVudGF0aW9uLgotCSAgRml4ZXMgIzUwMDkxOS4KLQotMjAwNy0xMi0wMiAyMDozMzo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbTogRG9uJ3QgZm9yZ2V0IHRvIGRpc3Qge2dzdCxsaWJzfS9zdHJ1Y3RfaHBwYS5oLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgRG9uJ3QgZm9yZ2V0IHRvIGRpc3Qge2dzdCxsaWJzfS9zdHJ1Y3RfaHBwYS5oLgotCi0yMDA3LTExLTI4IDEzOjAyOjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogVXNlIG5ldyBBUEkgdG8gZ2V0IGVsYXBzZWQgdGltZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBVc2UgbmV3IEFQSSB0byBnZXQgZWxhcHNlZCB0aW1lLgotCi0yMDA3LTExLTI4IDEyOjUyOjQyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC86IEZpeCB3cm9uZyBvcmRlciBvZiBhcmdzIGluIEdTVF9DTE9DS19ESUZGKCkgdXNhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgIEZpeCB3cm9uZyBvcmRlciBvZiBhcmdzIGluIEdTVF9DTE9DS19ESUZGKCkgdXNhZ2UuCi0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIFVzZSBuZXcgQVBJIHRvIGdldCBlbGFwc2VkIHRpbWUuCi0KLTIwMDctMTEtMjggMTI6MzU6MTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgUmVuYW1lIG5ldyBBUEkgKyBDaGFuZ2VMb2cgc3VyZ2VyeSB0byByZW1vdmUgb2xkIG5hbWUgZnJvbSBsYXN0IGVudHJ5Li4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgIFJlbmFtZSBuZXcgQVBJICsgQ2hhbmdlTG9nIHN1cmdlcnkgdG8gcmVtb3ZlIG9sZCBuYW1lIGZyb20gbGFzdCBlbnRyeS4uCi0JICBBUEk6IEdTVF9HRVRfVElNRVNUQU1QCi0KLTIwMDctMTEtMjggMTI6MTE6NTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgTm93IGhpZGUgdGhlIGRpZmZlcmVudCBjbG9jayBzdHVmZiBiZWhpbmQgYSBtYWNyby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgIE5vdyBoaWRlIHRoZSBkaWZmZXJlbnQgY2xvY2sgc3R1ZmYgYmVoaW5kIGEgbWFjcm8uCi0JICBBUEk6IEdTVF9HRVRfQ1VSUkVOVF9USU1FCi0KLTIwMDctMTEtMjggMTE6Mzk6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQXBwbHkgdGhlIHBvc2l4LXRpbWVyIGNoZWNrIGZyb20gIzM2MTE1NS4gQ29uZGl0aW9uYWxseSB1c2UgdGhlIHBvc2l4IHRpbWVyIGZvciBsb2dnaW5nLiBUaGlzIGdpdmVzIGJldHRlciB0aW1lc3RhbXAgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgKiBnc3QvZ3N0aW5mby5jOgotCSAgQXBwbHkgdGhlIHBvc2l4LXRpbWVyIGNoZWNrIGZyb20gIzM2MTE1NS4gQ29uZGl0aW9uYWxseSB1c2UgdGhlIHBvc2l4Ci0JICB0aW1lciBmb3IgbG9nZ2luZy4gVGhpcyBnaXZlcyBiZXR0ZXIgdGltZXN0YW1wIHByZWNpc3Npb24sIGxlc3MKLQkgIG92ZXJoZWFkIGFuZCBubyBudHAgaml0dGVyLgotCi0yMDA3LTExLTI4IDExOjExOjU4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RtaW5pb2JqZWN0LmM6IFNvbWUgY2xlYW51cCBhbmQgY2hlY2tpbmcgYWdhaW5zdCBpbnZhbGlkIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF9taW5pX29iamVjdF9nZXRfdHlwZSksCi0JICAoZ3N0X21pbmlfb2JqZWN0X2NsYXNzX2luaXQpLCAoZ3N0X21pbmlfb2JqZWN0X2NvcHlfZGVmYXVsdCksCi0JICAoZ3N0X21pbmlfb2JqZWN0X2ZpbmFsaXplKSwgKGdzdF9taW5pX29iamVjdF9jb3B5KSwKLQkgIChnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUpLCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUpLAotCSAgKGdzdF9taW5pX29iamVjdF9yZXBsYWNlKSwgKHBhcmFtX21pbmlfb2JqZWN0X3ZhbGlkYXRlKSwKLQkgIChnc3RfcGFyYW1fc3BlY19taW5pX29iamVjdF9nZXRfdHlwZSk6Ci0JICBTb21lIGNsZWFudXAgYW5kIGNoZWNraW5nIGFnYWluc3QgaW52YWxpZCBmdW5jdGlvbiBwYXJhbWV0ZXJzLgotCi0yMDA3LTExLTI4IDEwOjU4OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBTdGFydCBtZXJnaW5nIGluIHRoZSBlYXN5IGJpdHMgb2YgIzM2MTE1NSwgdGhlIG1vbm90b25pYyBjbG9jayBwYXRjaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X3N5c3RlbWNsb2NrX3N1aXRlKToKLQkgIFN0YXJ0IG1lcmdpbmcgaW4gdGhlIGVhc3kgYml0cyBvZiAjMzYxMTU1LCB0aGUgbW9ub3RvbmljIGNsb2NrIHBhdGNoLgotCSAgVGhpcyBvbmUgYWRkcyBhIGZldyBoYW5keSBtYWNyb3Mgd2l0aCBkb2NzIGFuZCBhIHRlc3RzdWl0ZS4KLQotMjAwNy0xMS0yNyAxODo0NTozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBCZSBhIGJpdCBzbWFydGVyIHdoZW4gc2Vla2luZywgbGlrZSwgZG9uJ3QgdHJ5IHRvIGRvIGEgc2VlayB3aGVuIGl0J3Mgbm90IG5lZWRlZC4gVGhpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19ldmVudCk6Ci0JICBCZSBhIGJpdCBzbWFydGVyIHdoZW4gc2Vla2luZywgbGlrZSwgZG9uJ3QgdHJ5IHRvIGRvIGEgc2VlayB3aGVuIGl0J3MKLQkgIG5vdCBuZWVkZWQuIFRoaXMgYXZvaWRzIGVycm9ycyB3aGVuIHRoZSBmaWxlIGlzIG5vdCBzZWVrYWJsZS4KLQkgIEZpeGVzICM0OTk3NzEuCi0KLTIwMDctMTEtMjYgMTM6MTY6MDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRHVlIHRvIHBvcHVsYXIgcmVxdWVzdCByZW1vdmUgcHJlc2V0IGludGVyZmFjZSBhZ2Fpbi4gOi0oLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0Lmg6Ci0JICAqIGdzdC9nc3RwcmVzZXQuYzoKLQkgICogZ3N0L2dzdHByZXNldC5oOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBEdWUgdG8gcG9wdWxhciByZXF1ZXN0IHJlbW92ZSBwcmVzZXQgaW50ZXJmYWNlIGFnYWluLiA6LSguCi0KLTIwMDctMTEtMjIgMjE6MzI6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogUHJpbnQgJ2RlZmF1bHQgdmFsdWUnIGZvciBlbnVtcyBhbmQgZmxhZ3MgdG9vLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICBQcmludCAnZGVmYXVsdCB2YWx1ZScgZm9yIGVudW1zIGFuZCBmbGFncyB0b28uCi0KLTIwMDctMTEtMjIgMTU6NTk6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OiBNb3JlIGlkZWFzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcHJvZmlsaW5nLnR4dDoKLQkgIE1vcmUgaWRlYXMuCi0JICAqIGdzdC9nc3RiaW4uYzoKLQkgIEZpeCB0eXBvIGFuZCBnaXZlIGJldHRlciBsb2cgb3V0cHV0LgotCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOgotCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5oOgotCSAgTW9yZSBpZGVhcywgbWFrZSBncmFwaHMgYSBiaXQgc21hbGxlciBhbmQgZml4IHBhcmFtIG5hbWUgaW4gbWFjcm8uCi0KLTIwMDctMTEtMjIgMTM6NTY6MjQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHByZXNldC5jOiBUcnkgaGFyZGVyIHRvIHVzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gZmdldHMoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JICBUcnkgaGFyZGVyIHRvIHVzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gZmdldHMoKS4KLQotMjAwNy0xMS0yMSAxNjowODoyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cHJlc2V0LmM6IEZvciB0aGVzZXMgdHdvIGZnZXRzIHdlIGhhbmRsZSB0aGUgZXJyb3IgYmVsb3cuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHByZXNldC5jOgotCSAgRm9yIHRoZXNlcyB0d28gZmdldHMgd2UgaGFuZGxlIHRoZSBlcnJvciBiZWxvdy4KLQotMjAwNy0xMS0yMSAxMzo0Nzo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBPbmx5IHNlbmQgdXBzdHJlYW0gZXZlbnRzIHVwc3RyZWFtLiBGaXhlcyAjNDk4NzQ2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3Npbmtfc2VuZF9ldmVudCk6Ci0JICBPbmx5IHNlbmQgdXBzdHJlYW0gZXZlbnRzIHVwc3RyZWFtLiBGaXhlcyAjNDk4NzQ2LgotCi0yMDA3LTExLTIxIDEzOjI3OjUwICswMDAwICBMYXVyZW50IEdsYXlhbCA8c3BnbGVnbGVAeWFob28uZnI+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuKjogQWRkIHByb3BlcnR5IHRvIGRpc2FibGUgaGFuZG9mZiBzaWduYWwgZW1pc3Npb24uIEZpeGVzICM0OTg2OTQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBMYXVyZW50IEdsYXlhbCA8c3BnbGVnbGUgYXQgeWFob28gZG90IGZyPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2lkZW50aXR5X2luaXQpLCAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCksCi0JICAoZ3N0X2lkZW50aXR5X3NldF9wcm9wZXJ0eSksIChnc3RfaWRlbnRpdHlfZ2V0X3Byb3BlcnR5KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgotCSAgQWRkIHByb3BlcnR5IHRvIGRpc2FibGUgaGFuZG9mZiBzaWduYWwgZW1pc3Npb24uIEZpeGVzICM0OTg2OTQuCi0JICBBUEk6IEdzdElkZW50aXR5OjpzaWduYWwtaGFuZG9mZnMKLQotMjAwNy0xMS0yMSAwOTo0Njo1MCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogWWV0IGFub3RoZXIgbWlzc2luZyBsaWJyYXJ5IGZvciB0aGUgdW5pbnN0YWxsZWQgc2NyaXB0IChmZnQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMTEtMjEgIEp1bGllbiBNb3V0dGUgIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogWWV0IGFub3RoZXIgbWlzc2luZyBsaWJyYXJ5IGZvciB0aGUKLQkgIHVuaW5zdGFsbGVkIHNjcmlwdCAoZmZ0KQotCi0yMDA3LTExLTIxIDAwOjI0OjA0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9mYXEvZGV2ZWxvcGluZy54bWw6IEFkZCBhIHF1ZXN0aW9uIGFib3V0IGhvdyB0byBzdWJtaXQgbmV3IHRyYW5zbGF0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2ZhcS9kZXZlbG9waW5nLnhtbDoKLQkgIEFkZCBhIHF1ZXN0aW9uIGFib3V0IGhvdyB0byBzdWJtaXQgbmV3IHRyYW5zbGF0aW9ucy4KLQkgICogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIFVwZGF0ZSB0aGUgY29udGFjdCBlbWFpbCBhZGRyZXNzIGZvciB0aGUgVHJhbnNsYXRpb24gUHJvamVjdAotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JICBUaGUgcGFyZW50X2NsYXNzIGZvciBmZHNyYyBpcyBwdXNoc3JjLCBub3QgR3N0RWxlbWVudC4KLQotMjAwNy0xMS0yMCAxNjozNDozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cHJlc2V0LmM6IFBsdWcgYSBsZWFrIGFuZCBmaXggc2F2aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIFBsdWcgYSBsZWFrIGFuZCBmaXggc2F2aW5nLgotCi0yMDA3LTExLTIwIDE2OjEwOjIxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgZ3N0X3ByZXNldF9fZ2V0X3Byb3BlcnR5X25hbWVzKCkgZnVuY3Rpb24gdG8gdGhlIGRvY3MgdG8gZml4IHRoZSBidWlsZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgQWRkIG5ldyBnc3RfcHJlc2V0X19nZXRfcHJvcGVydHlfbmFtZXMoKSBmdW5jdGlvbiB0byB0aGUgZG9jcwotCSAgdG8gZml4IHRoZSBidWlsZC4KLQotMjAwNy0xMS0yMCAxNTo0NjozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cHJlc2V0Lio6IENoYW5nZSBfZ2V0X3ByZXNldF9uYW1lcyBBUEkgdG8gcmV0dXJuIGEgc3RydiB3aXRoIGNvcGllcy4gQWRkIF9nZXRfcHJvcGVydHlfbmFtZXMgdG8gYWxsb3cgaW1wbGVtZW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cHJlc2V0LmM6Ci0JICAqIGdzdC9nc3RwcmVzZXQuaDoKLQkgIENoYW5nZSBfZ2V0X3ByZXNldF9uYW1lcyBBUEkgdG8gcmV0dXJuIGEgc3RydiB3aXRoIGNvcGllcy4gQWRkCi0JICBfZ2V0X3Byb3BlcnR5X25hbWVzIHRvIGFsbG93IGltcGxlbWVudGF0aW9ucyB0byBmaWx0ZXIgYW5kIHByb3ZpZGUKLQkgIGdvb2QgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLQotMjAwNy0xMS0yMCAxMTo0NjozNSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogQWRkIGFub3RoZXIgbGlicmFyeSB0byB0aGUgdW5pbnN0YWxsZWQgc2NyaXB0IChzZHApLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTExLTIwICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogQWRkIGFub3RoZXIgbGlicmFyeSB0byB0aGUgdW5pbnN0YWxsZWQKLQkgIHNjcmlwdCAoc2RwKS4KLQotMjAwNy0xMS0xOSAxNToyMzo0NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cHJlc2V0LmM6IE1vcmUgY2xlYW51cHMsIGRvY3MsIGFuZCBUT0RPcyBmcm9tIGNvbW1lbnRzIHRoYXQgbm93IHNsb3dseSBjb21lIGluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIE1vcmUgY2xlYW51cHMsIGRvY3MsIGFuZCBUT0RPcyBmcm9tIGNvbW1lbnRzIHRoYXQgbm93IHNsb3dseSBjb21lIGluLgotCi0yMDA3LTExLTE5IDE0OjM4OjQ5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBBZGQgbmV3IGJhc2UgbGlicmFyaWVzIGluIHRoZSBMRCBzZWFyY2ggcGF0aC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0xMS0xOSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IEFkZCBuZXcgYmFzZSBsaWJyYXJpZXMgaW4gdGhlIExECi0JICBzZWFyY2ggcGF0aC4KLQotMjAwNy0xMS0xOSAxMTo1NDoxMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cHJlc2V0LmM6IEZpeCBib2d1cyB3YXJuaW5nIGFuZCBtYWtlIHRoZSBwcm9wZXJ0eSB0eXBlIHNwZWNpZmljIGNvZGUgbW9yZSBzaW1pbGFyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIEZpeCBib2d1cyB3YXJuaW5nIGFuZCBtYWtlIHRoZSBwcm9wZXJ0eSB0eXBlIHNwZWNpZmljIGNvZGUgbW9yZQotCSAgc2ltaWxhci4KLQotMjAwNy0xMS0xOSAwOTozMzowNSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9nc3RwcmVzZXQuYzogTWFrZSBpdCBidWlsZCBvbiBPUyBYLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTExLTE5ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9nc3RwcmVzZXQuYzogKGdzdF9wcmVzZXRfZGVmYXVsdF9jcmVhdGVfcHJlc2V0KTogTWFrZQotCSAgaXQgYnVpbGQgb24gT1MgWC4KLQotMjAwNy0xMS0xOSAwODo1MDowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBDaGFuZ2UgZW1haWwsIGNsZWFudXBzIGFkZCBzb21lIG1vcmUgZGVidWcgYW5kIGNvbW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX2luaXQpLAotCSAgKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksIChnc3RfYmluX2NvbnRpbnVlX2Z1bmMpOgotCSAgQ2hhbmdlIGVtYWlsLCBjbGVhbnVwcyBhZGQgc29tZSBtb3JlIGRlYnVnIGFuZCBjb21tZW50cy4KLQkgIEFsc28gc2V0IGJ1cyBhbmQgY2xvY2sgb24gbmV3IGVsZW1lbnRzIHdoZW4gdGhlIHBpcGVsaW5lIHdhcyBpbiBlcnJvci4KLQotMjAwNy0xMS0xOCAxOTozMDoxMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvOiBGaXggYnVpbGQgd2l0aCAtLWRpc2FibGUtZ3N0LWRlYnVnLiBGaXhlcyAjNDk3ODU5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIEZpeCBidWlsZCB3aXRoIC0tZGlzYWJsZS1nc3QtZGVidWcuIEZpeGVzICM0OTc4NTkuCi0JICBTcG90dGVkIGJ5IFNhbWVlciBOYWlrLgotCi0yMDA3LTExLTE3IDE3OjUwOjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RldmVudC5jOiBMaXR0bGUgZG9jdW1lbnRhdGlvbiBpbXByb3ZtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgTGl0dGxlIGRvY3VtZW50YXRpb24gaW1wcm92bWVudC4KLQkgICogZ3N0L2dzdHByZXNldC5jOgotCSAgTW9yZSBUT0RPIGNsZWFudXBzLiBSZW1vdmUgYysrIGNvbW1lbnRzLgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIEFkZCBUT0RPIGFuZCB1c2UgcXVhcmsgZnJvbSBzdGF0aWMgc3RyaW5nLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBVc2UgcXVhcmsgZnJvbSBzdGF0aWMgc3RyaW5nLgotCi0yMDA3LTExLTE3IDE3OjI0OjUzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RwcmVzZXQuYzogQWRkIHNvbWUgY29tbWVudHMgYW5kIFRPRE9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwcmVzZXQuYzoKLQkgIEFkZCBzb21lIGNvbW1lbnRzIGFuZCBUT0RPcy4KLQkgICogZ3N0L2dzdHByZXNldC5oOgotCSAgQWRkIHBhZGRpbmcgZm9yIGZ1dHVyZSBjaGFuZ2VzLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBJbXBsZW1lbnQgdGhlIGlmYWNlLgotCi0yMDA3LTExLTE3IDE2OjQzOjEyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEFkZCB0aGUgcHJlc2V0IGludGVyZmFjZSAoRml4ZXMgIzM5Njc3OSkuIERvIHNvbWUgZG9jIGNsZWFudXBzIGFsb25nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0Lmg6Ci0JICAqIGdzdC9nc3RwcmVzZXQuYzoKLQkgICogZ3N0L2dzdHByZXNldC5oOgotCSAgQWRkIHRoZSBwcmVzZXQgaW50ZXJmYWNlIChGaXhlcyAjMzk2Nzc5KS4gRG8gc29tZSBkb2MgY2xlYW51cHMgYWxvbmcuCi0KLTIwMDctMTEtMTYgMDA6MjM6MTggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJhY2sgdG8gQ1ZTCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBDVlMKLQotPT09IHJlbGVhc2UgMC4xMC4xNSA9PT0KLQotMjAwNy0xMS0xNiAwMDowNzo1NCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogcmVsZWFzaW5nIDAuMTAuMTUsICJPY3RvYmVyIgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICA9PT0gcmVsZWFzZSAwLjEwLjE1ID09PQotCSAgMjAwNy0xMS0xNSAgSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbGVhc2luZyAwLjEwLjE1LCAiT2N0b2JlciIKLQotMjAwNy0xMS0xNSAyMzozMToxMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZS5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3J3LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDctMTEtMTQgMTI6MjQ6MDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB3aW4zMi92czYvbGliZ3N0cmVhbWVyLmRzcDogQ29udmVydCBsaW5lIGVuZGluZ3MgYmFjayB0byBET1MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvdnM2L2xpYmdzdHJlYW1lci5kc3A6Ci0JICBDb252ZXJ0IGxpbmUgZW5kaW5ncyBiYWNrIHRvIERPUy4KLQotMjAwNy0xMS0xMyAxMTozMDowOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzLzogVXBkYXRlIGZhc3QgdGFncmVhZGluZyBkcmFmdCBhbmQgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIGlkZWFzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0OgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL3Byb2ZpbGluZy50eHQ6Ci0JICBVcGRhdGUgZmFzdCB0YWdyZWFkaW5nIGRyYWZ0IGFuZCBwZXJmb3JtYW5jZSBwcm9maWxpbmcgaWRlYXMuCi0KLTIwMDctMTEtMDkgMTQ6MDU6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRG9uJ3QgaG9sZCB0aGUgb2JqZWN0IGxvY2sgd2hlbiB1bnJlZmZpbmcgYSBidWZmZXIgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSBhIGRlYWRsb2NrIHdoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyKToKLQkgIERvbid0IGhvbGQgdGhlIG9iamVjdCBsb2NrIHdoZW4gdW5yZWZmaW5nIGEgYnVmZmVyIGJlY2F1c2UgaXQgY291bGQKLQkgIGNhdXNlIGEgZGVhZGxvY2sgd2hlbiB0aGUgZmluYWxpemUgZnVuY3Rpb24gd2FudHMgdG8gZ3JhYiB0aGUgb2JqZWN0Ci0JICBsb2NrIHRvby4gRml4ZXMgIzQ5NTEzMy4KLQotMjAwNy0xMS0wOSAxMTo1Njo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuYzogQWxzbyBhY2N1bXVsYXRlIHRpbWUgY29ycmVjdGx5IHdoZW4gZG9pbmcgcmV2ZXJzZSBwbGF5YmFjay4gRml4ZXMgIzQ4ODIwMSwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnRfZnVsbCksCi0JICAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLCAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKToKLQkgIEFsc28gYWNjdW11bGF0ZSB0aW1lIGNvcnJlY3RseSB3aGVuIGRvaW5nIHJldmVyc2UgcGxheWJhY2suIEZpeGVzCi0JICAjNDg4MjAxLAotCSAgV2hlbiBjb252ZXJ0aW5nIHRvIHJ1bm5pbmcgYW5kIHN0cmVhbSB0aW1lLCB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yCi0JICBzdGFydC9zdG9wL3RpbWUvYWNjdW0gd2hlbiBjb21wYXJpbmcgZGlmZmVyZW50IGZvcm1hdHMuIEZpeGVzICM0OTQyNDUuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpOgotCSAgRG8gcnVubmluZy9zdHJlYW0gdGltZSBpbiBUSU1FIGZvcm1hdC4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3Rfc2VnbWVudF9zdWl0ZSk6Ci0JICAyIG5ldyB1bml0IHRlc3RzIGZvciBzZWdtZW50IGFjY3VtdWxhdGlvbi4KLQotMjAwNy0xMS0wNyAxNTo1Mzo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogTW92ZSBnZXRlbnYoKSBiYWNrIGludG8gZ3N0X2luaXQsIHNvIGV2ZXJ5b25lIGNhbiBsaXZlIGhhcHBpbHkgZXZlciBhZnRlci4gTWFrZSBzdXJlIHRoZSBzeW1ib2wgaXNuJ3QgZXhwb3J0ZWQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wcmUpOgotCSAgKiBnc3QvZ3N0ZGVidWd1dGlscy5jOiAocHJpdl9nc3RfZHVtcF9kb3RfZGlyKSwgKGRlYnVnX2R1bXBfZWxlbWVudCksCi0JICAoX2dzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUpOgotCSAgTW92ZSBnZXRlbnYoKSBiYWNrIGludG8gZ3N0X2luaXQsIHNvIGV2ZXJ5b25lIGNhbiBsaXZlIGhhcHBpbHkKLQkgIGV2ZXIgYWZ0ZXIuIE1ha2Ugc3VyZSB0aGUgc3ltYm9sIGlzbid0IGV4cG9ydGVkIHRob3VnaC4KLQotMjAwNy0xMS0wNiAyMzoxNzowOSArMDAwMCAgU2ViYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuKjogVXBkYXRlIGVudW0gdHlwZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZWJhc3RpZW4gTW91dHRlICA8c2ViYXN0aWVuIG1vdXR0ZSBuZXQ+Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkgICogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5oOgotCSAgVXBkYXRlIGVudW0gdHlwZXMuCi0JICAqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgotCSAgVXBkYXRlIHZzNiBwcm9qZWN0IGZpbGVzICgjNDk0MzQzKS4KLQotMjAwNy0xMS0wNiAxNzoxODoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFVuaWZ5IGZsdXNoaW5nIGNvZGUsIHJlbW92ZSBzb21lIG9sZCB1bmxvY2sgY29kZSB0aGF0IGlzIG5vIGxvbmdlciB1c2VkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpLAotCSAgKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspLCAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZXZlbnQpLAotCSAgKGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcpLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdWxsKToKLQkgIFVuaWZ5IGZsdXNoaW5nIGNvZGUsIHJlbW92ZSBzb21lIG9sZCB1bmxvY2sgY29kZSB0aGF0IGlzIG5vIGxvbmdlciB1c2VkLgotCSAgVGFrZSB0aGUgc3RyZWFtaW5nIGxvY2sgd2hlbiBzZWVraW5nIHRvIGF2b2lkIHJhY2VzLiBGaXhlcyAjNDkyNzI5LgotCSAgQWRkZWQgc29tZSBtb3JlIGNvbW1lbnRzLgotCi0yMDA3LTExLTA2IDE1OjEwOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0LmM6IE1ha2UgIF9nc3RfZGlzYWJsZV9zZWd0cmFwIHN0YXRpYywgaXQncyBvbmx5IHVzZWQgaW4gZ3N0cGx1Z2luLmMgYW5kIHdlIGNhbiB1c2UgZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZCgpIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChfZ3N0X2Rpc2FibGVfc2VndHJhcCk6Ci0JICBNYWtlICBfZ3N0X2Rpc2FibGVfc2VndHJhcCBzdGF0aWMsIGl0J3Mgb25seSB1c2VkIGluIGdzdHBsdWdpbi5jIGFuZAotCSAgd2UgY2FuIHVzZSBnc3Rfc2VndHJhcF9pc19lbmFibGVkKCkgdGhlcmUgbm93IHRoYXQgd2UgaGF2ZSB0aGF0IEFQSS4KLQkgIE1vdmUgX2dzdF9kZWJ1Z19kdW1wX2RvdF9kaXIgaW50byBnc3RkZWJ1Z3V0aWxzLmMsIHRoZXJlJ3Mgbm8gcmVhc29uCi0JICB0byBkbyB0aGUgZ2V0ZW52IGhlcmUgKGFuZCBleHBvcnQgdGhlIHZhcmlhYmxlKS4KLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzogKGRlYnVnX2R1bXBfZWxlbWVudCksCi0JICAoX2dzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUpLCAoX2dzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGVfd2l0aF90cyk6Ci0JICBEb24ndCB1c2UgVkxBcyB3aGljaCBpcyBhIEM5OWlzbSBhbmQgdGhyb3dzIG9mZiBNU1ZDICgjNDkzOTgzKS4KLQkgICogZ3N0L2dzdGluZm8uYzogKF9wcml2X2dzdF9pbmZvX3N0YXJ0X3RpbWUpLCAoX2dzdF9kZWJ1Z19pbml0KSwKLQkgIChnc3RfZGVidWdfbG9nX2RlZmF1bHQpOgotCSAgUmVuYW1lIF9nc3RfaW5mb19zdGFydF90aW1lIHRvIHByaXZfZ3N0X2luZm9fc3RhcnRfdGltZSBzbyBpdAotCSAgZG9lc24ndCBnZXQgZXhwb3J0ZWQgKHdhcyBuZXZlciBpbiBhbnkgaGVhZGVyKS4KLQkgICogZ3N0L2dzdHBsdWdpbi5jOiAoX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9zZXR1cCksCi0JICAoZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4KToKLQkgIE1ha2Ugc3RhdGljIG11dGV4IGdzdF9wbHVnaW5fbG9hZGluZ19tdXRleCByZWFsbHkgc3RhdGljICh3YXMgbmV2ZXIKLQkgIGluIGFueSBoZWFkZXIpLCBhbmQgdXNlIGdzdF9zZWd0cmFwX2lzX2VuYWJsZWQoKSBpbnN0ZWFkIG9mCi0JICBfZ3N0X2Rpc2FibGVfc2VndHJhcC4KLQkgICogZ3N0L2dzdHRyYWNlLmM6IChfZ3N0X3RyYWNlX2RlZmF1bHQpOgotCSAgTWFrZSBsb2NhbCBfZ3N0X3RyYWNlX2RlZmF1bHQgc3RhdGljICh3YXMgbmV2ZXIgaW4gYW55IGhlYWRlcikuCi0KLTIwMDctMTEtMDYgMTQ6NDM6MTQgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIHdpbjMyL2NvbW1vbi86IEFkZCBtb3JlIG1pc3Npbmcgc3ltYm9scywgcmVtb3ZlIHNvbWUgZHVwbGljYXRlcywgYW5kIHNvcnQgYXMgdGhlICdzb3J0JyBjb21tYW5kIHNvcnRzIGl0IChwYXJ0aWFsbHkgZi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzICA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0ZGF0YXByb3RvY29sLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdG5ldC5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIG1vcmUgbWlzc2luZyBzeW1ib2xzLCByZW1vdmUgc29tZSBkdXBsaWNhdGVzLCBhbmQgc29ydAotCSAgYXMgdGhlICdzb3J0JyBjb21tYW5kIHNvcnRzIGl0IChwYXJ0aWFsbHkgZml4ZXMgIzQ5Mzk4MykuCi0KLTIwMDctMTEtMDYgMTI6Mjg6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IE9ubHkgY2hhbmdlIHRoZSBzdGF0ZSBjb29raWUgaWYgYSBkaWZmZXJlbnQgc3RhdGUgd2FzIHNldCBvbiB0aGUgZWxlbWVudC4gU2VlICM0OTI3MjkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NldF9zdGF0ZV9mdW5jKToKLQkgIE9ubHkgY2hhbmdlIHRoZSBzdGF0ZSBjb29raWUgaWYgYSBkaWZmZXJlbnQgc3RhdGUgd2FzIHNldCBvbiB0aGUKLQkgIGVsZW1lbnQuIFNlZSAjNDkyNzI5LgotCi0yMDA3LTExLTA2IDExOjQxOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dmFsdWUuYzogUmVtb3ZlIHVudXNlZCBhbmQgdW5pbml0aWFsaXNlZCB0eXBlIHZhcmlhYmxlcyB0aGF0IHdlcmUgc3RpbGwgZXhwb3J0ZWQgZm9yIHNvbWUgcmVhc29uICh0aGV5IHdlcmUgbmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIFJlbW92ZSB1bnVzZWQgYW5kIHVuaW5pdGlhbGlzZWQgdHlwZSB2YXJpYWJsZXMgdGhhdCB3ZXJlIHN0aWxsCi0JICBleHBvcnRlZCBmb3Igc29tZSByZWFzb24gKHRoZXkgd2VyZSBuZXZlciBpbiBhbnkgaGVhZGVyIGZpbGVzCi0JICB0aG91Z2gpLgotCi0yMDA3LTExLTA2IDEwOjMzOjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERvbid0IHRyeSB0byByZXBvcnQgYSAwIHBvc2l0aW9uIHdoZW4gd2UgZG9uJ3Qga25vdywgcmV0dXJuIC0xIGFuZCBGQUxTRSBpbnN0ZWFkLiBUaGlzIG0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19ldmVudCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbl9sYXN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbl9wYXVzZWQpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIERvbid0IHRyeSB0byByZXBvcnQgYSAwIHBvc2l0aW9uIHdoZW4gd2UgZG9uJ3Qga25vdywgcmV0dXJuIC0xIGFuZCBGQUxTRQotCSAgaW5zdGVhZC4gVGhpcyBtb3N0bHkgaGFwcGVucyB3aGVuIHdlIGFyZSBwcmVyb2xsaW5nLgotCSAgTWFrZSBzdXJlIHdlIGNhbiByZXBvcnQgdGhlIHJpZ2h0IHBvc2l0aW9uIGJlZm9yZSB3ZSBwb3N0IHRoZSBBU1lOQ19ET05FCi0JICBtZXNzYWdlIHNvIHRoYXQgYSBtZXNzYWdlIGhhbmRsZXIgY2FuIHF1ZXJ5IHBvc2l0aW9uIHdpdGhvdXQgcmFjZXMuCi0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogKHNlbmRfZW9zKSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChhc3luY19kb25lX2hhbmRvZmYpLCAoYXN5bmNfZG9uZV9mdW5jKSwgKHNlbmRfYnVmZmVyKSwKLQkgIChhc3luY19kb25lX2Vvc19mdW5jKSwgKGdzdF9zaW5rc19zdWl0ZSk6Ci0JICBBZGQgdHdvIHRlc3RzIGZvciB0aGUgYWJvdmUuCi0KLTIwMDctMTEtMDYgMTA6MjE6MDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIE1BSU5UQUlORVJTOiBVcGRhdGUgd2l0aCBuZXcgZW1haWwgYWRkcmVzcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNQUlOVEFJTkVSUzoKLQkgIFVwZGF0ZSB3aXRoIG5ldyBlbWFpbCBhZGRyZXNzLgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgQWRkIHNvbWUgbW9yZSBpbmZvIGFib3V0IGZ1dHVyZSBwYWQtYmxvY2sgYW5kIG5lZ290aWF0aW9uIGNoYW5nZXMuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKLQkgIEFkZCBzb21lIGlkZWFzIGFib3V0IGJ1ZmZlcmluZyByZXBvcnRpbmcuCi0KLTIwMDctMTEtMDYgMTA6MDE6MDcgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBjb21tb246Ci0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIHVwZGF0ZSBTUEVDIGZpbGUgd2l0aCBsYXRlc3QgY2hhbmdlcywgYWxzbyBhZGQgTUFJTlRBSU5FUlMgZmlsZSB0byBFWFRSQV9ESVNULCB0aGUgb21taXNzaW9uIG9mIHRoaXMgY2F1c2UgYSB3ZWlyZCBSUC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgU1BFQyBmaWxlIHdpdGggbGF0ZXN0IGNoYW5nZXMsIGFsc28gYWRkIE1BSU5UQUlORVJTIGZpbGUgdG8gRVhUUkFfRElTVCwgdGhlIG9tbWlzc2lvbiBvZiB0aGlzIGNhdXNlIGEgd2VpcmQgUlBNIGJ1aWxkIGVycm9yIG9uIEZDOAotCi0yMDA3LTExLTA2IDAwOjU5OjU0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOiBEaXNhYmxlIHNpbGx5IHJhY3kgdGVzdCB0aGF0IGFsd2F5cyBmYWlscyBvbiB0aGlzIGNvbWJpbmF0aW9uIG9mIENQVSBhbmQga2VybmVsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkgIERpc2FibGUgc2lsbHkgcmFjeSB0ZXN0IHRoYXQgYWx3YXlzIGZhaWxzIG9uIHRoaXMgY29tYmluYXRpb24gb2YgQ1BVCi0JICBhbmQga2VybmVsLgotCi0yMDA3LTExLTA0IDEwOjE2OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeTogbWVudGlvbiBidWcgbnVtYmVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiBtZW50aW9uIGJ1ZyBudW1iZXIKLQotMjAwNy0xMS0wNCAxMDoxMzozMyArMDAwMCAgTXVycmF5IEN1bW1pbmcgPG11cnJheWNAbXVycmF5Yy5jb20+Ci0KLQkgIGdzdC9nc3RvYmplY3QuYzogQ29ycmVjdGVkIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIHBhcmVudC1zZXQgYW5kIHBhcmVudC11bnNldCBzaWduYWxzOiBUaGUgcGFyYW1ldGVyIGlzIGEgR3N0T2JqZWN0LC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTXVycmF5IEN1bW1pbmcgIDxtdXJyYXljQG11cnJheWMuY29tPgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JICBDb3JyZWN0ZWQgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgcGFyZW50LXNldCBhbmQgcGFyZW50LXVuc2V0Ci0JICBzaWduYWxzOiBUaGUgcGFyYW1ldGVyIGlzIGEgR3N0T2JqZWN0LCBub3QgYSBHT2JqZWN0LgotCi0yMDA3LTExLTAyIDE4OjM1OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBNb3ZlIGRlY2xhcmF0aW9uIG9mIHByaXZhdGUgX2dzdF9mb29faW5pdGlhbGl6ZSgpIGZ1bmN0aW9ucyBpbnRvIG91ciBwcml2YXRlIGhlYWRlciBmaWxlIHdoZXJlIHRoZXkgc2hvdWxkIGhhdmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgICogZ3N0L2dzdGZvcm1hdC5oOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICAqIGdzdC9nc3RxdWVyeS5oOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIE1vdmUgZGVjbGFyYXRpb24gb2YgcHJpdmF0ZSBfZ3N0X2Zvb19pbml0aWFsaXplKCkgZnVuY3Rpb25zIGludG8KLQkgIG91ciBwcml2YXRlIGhlYWRlciBmaWxlIHdoZXJlIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiBhbGwgYWxvbmcuCi0KLTIwMDctMTEtMDIgMTc6NDM6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGd0ay1kb2MgZml4ZXM7IHRyYWlsaW5nLWNvbW1hLWluLWVudW0gZml4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6Ci0JICAqIGdzdC9nc3R4bWwuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgZ3RrLWRvYyBmaXhlczsgdHJhaWxpbmctY29tbWEtaW4tZW51bSBmaXguCi0KLTIwMDctMTEtMDIgMTY6Mjc6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogQ2xlYW4gdXAgb24gZGVpbml0IChub3QgdGhlIGV4dGVybmFsIG9uZXMgdGhvdWdoLCBkb2Vzbid0IHNlZW0gdG8gYmUgbmVlZGVkIGZvciBzb21lIHJlYXNvbikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoZ3N0X2RlaW5pdCk6Ci0JICBDbGVhbiB1cCBvbiBkZWluaXQgKG5vdCB0aGUgZXh0ZXJuYWwgb25lcyB0aG91Z2gsIGRvZXNuJ3Qgc2VlbSB0byBiZQotCSAgbmVlZGVkIGZvciBzb21lIHJlYXNvbikuCi0KLTIwMDctMTEtMDEgMjM6NTE6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmZvLmg6IFJlbW92ZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgZm9yIE1TVkMgdGhhdCB3YXMgY29waWVkIG92ZXIgaW50byBjb3JlIGZyb20gYSBwbHVnaW4sIG9idmlvdXNseSB3aXRob3V0IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmg6IChHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKToKLQkgIFJlbW92ZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgZm9yIE1TVkMgdGhhdCB3YXMgY29waWVkIG92ZXIgaW50byBjb3JlCi0JICBmcm9tIGEgcGx1Z2luLCBvYnZpb3VzbHkgd2l0aG91dCBldmVyIGhhdmluZyBiZWVuIHRlc3RlZCAobm90ZSB0aGUKLQkgIHNpbmdsZSB1bmRlcnNjb3JlIGluIF9kZWNsc3BlYyBpbiB0aGUgaW5pdGlhbCBjb21taXQpLCBhbmQgdGhhdCBkb2Vzbid0Ci0JICByZWFsbHkgbWFrZSBzZW5zZS4gIFNlZSAjNDkyMDc3LgotCi0yMDA3LTExLTAxIDIxOjUwOjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnX3R5cGVfY2xhc3NfcmVmKCkgb3RoZXIgdHlwZXMgYXMgd2VsbCwgc2VlICMzNDk0MTAgYW5kICM2NDc2NC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKF9nc3RfZXZlbnRfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOiAoX2dzdF9xdWVyeV9pbml0aWFsaXplKToKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jIChnc3RfZHBfaW5pdCk6Ci0JICBnX3R5cGVfY2xhc3NfcmVmKCkgb3RoZXIgdHlwZXMgYXMgd2VsbCwgc2VlICMzNDk0MTAgYW5kICM2NDc2NC4KLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoX2dzdF9idWZmZXJfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChfZ3N0X21lc3NhZ2VfaW5pdGlhbGl6ZSk6Ci0JICBTaW1wbGlmeSBleGlzdGluZyBnX3R5cGVfY2xhc3NfcmVmKCkuCi0KLTIwMDctMTEtMDEgMjA6MTA6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3Rmb3JtYXQuYzogZ190eXBlX2NsYXNzX3JlZigpIG91ciBHc3RGb3JtYXQgdHlwZSB0byBtYWtlIHN1cmUgd2UgYXZvaWQgdGhlIHRocmVhZC11bnNhZmUgYml0cyBvZiB0aGUgR09iamVjdC9HVC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3Rmb3JtYXQuYzogKF9nc3RfZm9ybWF0X2luaXRpYWxpemUpOgotCSAgZ190eXBlX2NsYXNzX3JlZigpIG91ciBHc3RGb3JtYXQgdHlwZSB0byBtYWtlIHN1cmUgd2UgYXZvaWQgdGhlCi0JICB0aHJlYWQtdW5zYWZlIGJpdHMgb2YgdGhlIEdPYmplY3QvR1R5cGUgc3lzdGVtLCBpZS4gYnVnICMzNDk0MTAgYW5kCi0JICBidWcgIzY0NzY0LiBTaG91bGQgZml4IGludGVybWl0dGVudCB0ZWUgdW5pdCB0ZXN0IGZhaWx1cmVzICgjNDc0ODIzKS4KLQotMjAwNy0xMS0wMSAxOToxOToxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6IFNpbXBsaWZ5LCBzaW1wbGlmeSwgc2ltcGxpZnkgLSBvciBub3QuICBSZXdyaXRlIHVuaXQgdGVzdCBub3QgdG8gdXNlIGdzdF9wYXJzZV9sYXVuY2goKTsgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdGVlLmM6ICh0ZXN0X251bV9idWZmZXJzKToKLQkgIFNpbXBsaWZ5LCBzaW1wbGlmeSwgc2ltcGxpZnkgLSBvciBub3QuICBSZXdyaXRlIHVuaXQgdGVzdAotCSAgbm90IHRvIHVzZSBnc3RfcGFyc2VfbGF1bmNoKCk7IGFsbG93IE4gc3ViLXN0cmVhbXMuIEluY3JlYXNpbmcKLQkgIHRoZSBudW1iZXIgb2Ygc3ViLXN0cmVhbXMgc2VlbXMgdG8gcmVwcm9kdWNlICM0NzQ4MjMgbW9yZSBlYXNpbHkuCi0KLTIwMDctMTAtMzEgMjI6MDE6MDMgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIEZpeCBhIGNvdXBsZSBvZiBtaXNzaW5nIGluY2x1ZGVzIGZvciBNU1ZDMjAwNSBhbmQgYSBDOTkgaXNzdWUuIEFsc28sIHN0YXJ0aW5nIHdpdGggMi4xNC4wLCBHTGliIHdvbid0IHByb3ZpZGUgYSBwaXBlKC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzICA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0JICAqIGdzdC9nc3R0cmFjZS5jOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6IChnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQpOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3KToKLQkgIEZpeCBhIGNvdXBsZSBvZiBtaXNzaW5nIGluY2x1ZGVzIGZvciBNU1ZDMjAwNSBhbmQgYSBDOTkgaXNzdWUuIEFsc28sCi0JICBzdGFydGluZyB3aXRoIDIuMTQuMCwgR0xpYiB3b24ndCBwcm92aWRlIGEgcGlwZSgpIG1hY3JvIGFueSBsb25nZXIsCi0JICBzbyB1c2UgX3BpcGUoKSBkaXJlY3RseSAoIzQ5MjA3NykuCi0JICAqIHdpbjMyL2NvbW1vbi9kaXJlbnQuYzogKF90cmVhZGRpcik6Ci0JICBBZGQgYSBjb3VwbGUgb2YgY2FzdHMgdG8gbWFrZSBpdCBidWlsZCB3aXRob3V0IHdhcm5pbmdzIHdpdGggTVNWQy4KLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgc29tZSBtb3JlIHN5bWJvbHMgdGhhdCBuZWVkIHRvIGJlIGV4cG9ydGVkLgotCi0yMDA3LTEwLTMxIDE4OjA4OjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6IFVzZSBfS0VFUCBhcyBtZXJnZSBtb2RlIHJhdGhlciB0aGFuIF9LRUVQX0FMTCwgc28gdGFncyBhcnJpdmluZyBpbiBhIHNlY29uZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6IChtZXNzYWdlX2xvb3ApOgotCSAgVXNlIF9LRUVQIGFzIG1lcmdlIG1vZGUgcmF0aGVyIHRoYW4gX0tFRVBfQUxMLCBzbyB0YWdzCi0JICBhcnJpdmluZyBpbiBhIHNlY29uZCBvciB0aGlyZCB0YWcgbWVzc2FnZSBhcmUgYWRkZWQgdG8KLQkgIHRoZSB0YWcgbGlzdCBhcyB3ZWxsLgotCi0yMDA3LTEwLTMxIDEzOjAxOjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBJdHMgIlNpbmNlOiIgYW5kIG5vdCAiQFNpbmNlOiIuIEFuZCByZW1vdmUgYW4gc3VwZXJmbG91cyBjYXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgSXRzICJTaW5jZToiIGFuZCBub3QgIkBTaW5jZToiLiBBbmQgcmVtb3ZlIGFuIHN1cGVyZmxvdXMgY2FzdC4KLQotMjAwNy0xMC0zMCAxODozMDoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWRkIGEgbmV3IGxhc3QtYnVmZmVyIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGxhc3QgYnVmZmVyIHVzZWQgaW4gYmFzZXNpbmsgZm9yIHByZXJvbGwgb3IgcmVuZGVyaW5nLiB1c2VmdWwgZm9yIG1hLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9sYXN0X2J1ZmZlciksIChnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlciksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCksIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEFkZCBhIG5ldyBsYXN0LWJ1ZmZlciBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBsYXN0IGJ1ZmZlciB1c2VkIGluCi0JICBiYXNlc2luayBmb3IgcHJlcm9sbCBvciByZW5kZXJpbmcuIHVzZWZ1bCBmb3IgbWFraW5nIHNuYXBzaG90cy4KLQkgIEFQSTogZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9idWZmZXIoKQotCSAgQVBJOiBHc3RCYXNlU2luazo6bGFzdC1idWZmZXIKLQotMjAwNy0xMC0yOSAxMzo0NjoyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBJbXByb3ZlIGJpbiBncmFwaCBkdW1waW5nLCBieSB1c2luZyB0aGUgZW52dmFyIHRvIHNwZWNpZnkgYSBwYXRoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L3J1bm5pbmcueG1sOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIEltcHJvdmUgYmluIGdyYXBoIGR1bXBpbmcsIGJ5IHVzaW5nIHRoZSBlbnZ2YXIgdG8gc3BlY2lmeSBhIHBhdGguCi0JICBSZW5hbWUgdGhlIGVudnZhciB0byBHU1RfREVCVUdfRFVNUF9ET1RfRElSLgotCi0yMDA3LTEwLTI5IDEzOjEwOjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBQb3N0IHNwZWNpYWwgZXJyb3IgbWVzc2FnZSBpZiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSBzdHJlYW0gYmVjYXVzZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZSk6Ci0JICBQb3N0IHNwZWNpYWwgZXJyb3IgbWVzc2FnZSBpZiB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSBzdHJlYW0KLQkgIGJlY2F1c2UgaXQncyBlbXB0eS4KLQotMjAwNy0xMC0yOSAxMDowNTo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBEb2N1bWVudCBuZXcgZW52LXZhci4gQWRkIG9uZSBsb2ctbGluZSBhZnRlciBkdW1wbmcgYSBncmFwaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKLQkgICogZ3N0L2dzdGRlYnVndXRpbHMuYzoKLQkgIERvY3VtZW50IG5ldyBlbnYtdmFyLiBBZGQgb25lIGxvZy1saW5lIGFmdGVyIGR1bXBuZyBhIGdyYXBoLgotCi0yMDA3LTEwLTI2IDE4OjM5OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IFVnbHkgaGFjayB0byBwdXQgdGhlIChyZWNlbnRseSByZW1vdmVkIGFuZCBub24tcG9ydGFibGUsIGFwcGFyZW50bHkpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgVWdseSBoYWNrIHRvIHB1dCB0aGUgKHJlY2VudGx5IHJlbW92ZWQgYW5kIG5vbi1wb3J0YWJsZSwgYXBwYXJlbnRseSkKLQkgIC1XbCwtLWV4cG9ydC1keW5hbWljIGJhY2sgaW50byBsaWJnc3RjaGVjaydzIExERkxBR1Mgd2hlbiB3ZSdyZSB1c2luZwotCSAgR05VIGxkLCBiZWNhdXNlIHdpdGhvdXQgdGhhdCAnbWFrZSBjaGVjaycgZmFpbHMgbWlzZXJhYmx5IG9uIG15IGRlYmlhbgotCSAgc3RhYmxlIGJveC4gIFNvbWVvbmUgd2l0aCBtb3JlIGtub3dsZWRnZSBvZiBsaW5rZXIgaW50cmljYWNpZXMgYW5kCi0JICBwb3J0YWJpbGl0eSBpc3N1ZXMgdGhhbiBtZSBmaXggdGhpcyBwcm9wZXJseSBwbGVhc2UuCi0KLTIwMDctMTAtMjUgMTc6MjA6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUmVzZXQgbGFzdCBzZWVuIHBvc2l0aW9uIGFmdGVyIGZsdXNoaW5nIHNvIHRoYXQgd2UgZG9uJ3QgcmVwb3J0IHRoZSBvbGQgcG9zaXRpb24gYW55bW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2V2ZW50KToKLQkgIFJlc2V0IGxhc3Qgc2VlbiBwb3NpdGlvbiBhZnRlciBmbHVzaGluZyBzbyB0aGF0IHdlIGRvbid0IHJlcG9ydCB0aGUgb2xkCi0JICBwb3NpdGlvbiBhbnltb3JlLgotCi0yMDA3LTEwLTI1IDE2OjE5OjA1ICswMDAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyb0BubnZhLm9yZz4KLQotCSAgZ3N0LzogUGF0Y2ggZnJvbSBBbGVzc2FuZHJvIERlY2luYSBhZGRpbmcgZ2V0X3R5cGVfZnVsbCBhbmQgZ2V0X3Byb3RvY29sc19mdWxsIHByaXZhdGUgdmZ1bmNzIHRvIHRoZSBVUklIYW5kbGVyIGludGVyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9yZWdpc3Rlcik6Ci0JICAqIGdzdC9nc3R1cmkuaDoKLQkgIFBhdGNoIGZyb20gQWxlc3NhbmRybyBEZWNpbmEgYWRkaW5nIGdldF90eXBlX2Z1bGwgYW5kCi0JICBnZXRfcHJvdG9jb2xzX2Z1bGwgcHJpdmF0ZSB2ZnVuY3MgdG8gdGhlIFVSSUhhbmRsZXIgaW50ZXJmYWNlCi0JICB0byBhbGxvdyBiaW5kaW5ncyB0byBzdXBwb3J0IGNyZWF0aW5nIFVSSSBoYW5kbGVycy4KLQkgIFBhcnRpYWxseSBmaXhlczogIzMzOTI3OQotCSAgQVBJOiBHc3RVUklIYW5kbGVySW50ZXJmYWNlOjpnZXRfdHlwZV9mdWxsCi0JICBBUEk6IEdzdFVSSUhhbmRsZXJJbnRlcmZhY2U6OmdldF9wcm90b2NvbHNfZnVsbAotCi0yMDA3LTEwLTI1IDE1OjE0OjAyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IE1ha2UgaXQgc28gdGhhdCBwYWRzIGFyZSBjb25zaWRlcmVkIGxpbmtlZCB1bnRpbCBhIGJ1ZmZlciBpcyBwdXNoZWQgYW5kIGRpc2NvdmVyZWQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3RfbXVsdGlfcXVldWVfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfbXVsdGlfcXVldWVfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF9zaW5nbGVfcXVldWVfZmx1c2gpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9sb29wKSwgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpOgotCSAgTWFrZSBpdCBzbyB0aGF0IHBhZHMgYXJlIGNvbnNpZGVyZWQgbGlua2VkIHVudGlsIGEgYnVmZmVyIGlzIHB1c2hlZAotCSAgYW5kIGRpc2NvdmVyZWQgb3RoZXJ3aXNlLiBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIGRlY29kZWJpbjIgaGFuZ2luZwotCSAgYWZ0ZXIgYSBzZWVrIGluIHRoZSBmaWxlc3JjICEgZGVjb2RlYmluMiBuYW1lPWQgISBmYWtlc2luayBkLiAhIGZha2VzaW5rCi0JICBjYXNlLgotCSAgTWFrZSBzdXJlIHdlIGxvY2sgdGhlIG11bHRpcXVldWUgd2hlbiB1cGRhdGluZyB0aGUgbWF4LXNpemUgcHJvcGVydGllcy4KLQkgIEZpeCBhIGNyYXNoIG9uIFNvbGFyaXMgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQgaW4gZ2V0X3JlcXVlc3RfcGFkIHRoYXQKLQkgIHBhc3NlcyBhIE5VTEwgc3RyaW5nIHRvIEdTVF9ERUJVRy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOiAobXFfZHVtbXlwYWRfY2hhaW4pLAotCSAgKHJ1bl9vdXRwdXRfb3JkZXJfdGVzdCk6Ci0JICBGaXggdGhlIHRlc3QgdG8gYWxsb3cgdGhlIGZpcnN0IGJ1ZmZlciBvbiBub3QtbGlua2VkIHBhZHMgdG8gY29tZSBvdXQKLQkgIG9mIHNlcXVlbmNlIHdoaWxlIG11bHRpcXVldWUgZGlzY292ZXJzIHRoYXQgdGhleSBhcmUgbm90LWxpbmtlZC4KLQotMjAwNy0xMC0yNSAxNDo1MDo0OCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIFVzZSBhIGN1c3RvbSBleHBvcnQgc3ltYm9sIHJlZ2V4IGZvciBsaWJnc3RjaGVjaywgYXMgaXQgbmVlZHMgdG8gZXhwb3J0IHN5bWJvbHMgdGhhdCBkb24ndCBtYXRjaCB0aGUgc3RhbmRhcmQgR1N0cmVhbS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBVc2UgYSBjdXN0b20gZXhwb3J0IHN5bWJvbCByZWdleCBmb3IgbGliZ3N0Y2hlY2ssIGFzIGl0IG5lZWRzCi0JICB0byBleHBvcnQgc3ltYm9scyB0aGF0IGRvbid0IG1hdGNoIHRoZSBzdGFuZGFyZCBHU3RyZWFtZXIgZ3N0XyoKLQkgIHBhdHRlcm4sIGFuZCAgLS1leHBvcnQtZHluYW1pYyBpcyBub3QgcG9ydGFibGUgKG9ubHkgd29ya3Mgb24KLQkgIEdOVSBsZCkKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19zZXR1cF9zcmNfcGFkKSwKLQkgIChnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQpOgotCSAgTWFrZSBzdXJlIHRvIHBhc3MgYSBtZXNzYWdlIHBhcmFtZXRlciB0byB0aGUgZmFpbF8qIG1hY3Jvcy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgotCi0yMDA3LTEwLTI1IDE0OjQxOjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IERpc2FibGUgdGVzdCB0aGF0IGNoZWNrcyB0aGF0IHdoaXRlIHNwYWNlcyBhcmUgbm90IGFsbG93ZWQgaW4gc3RydWN0dXJlIG5hbWVzIG9yIGZpZWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6ICh0ZXN0X3RvX3N0cmluZyk6Ci0JICBEaXNhYmxlIHRlc3QgdGhhdCBjaGVja3MgdGhhdCB3aGl0ZSBzcGFjZXMgYXJlIG5vdCBhbGxvd2VkCi0JICBpbiBzdHJ1Y3R1cmUgbmFtZXMgb3IgZmllbGQgbmFtZXMsIHNpbmNlIHdlIG5lZWQgdG8KLQkgIHN1cHBvcnQgdGhhdCBmb3Igbm93IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLgotCi0yMDA3LTEwLTI0IDEzOjEzOjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBUEk6IGFkZCBHU1RfVEFHX0FSVElTVF9TT1JUTkFNRQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICAqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICBBUEk6IGFkZCBHU1RfVEFHX0FSVElTVF9TT1JUTkFNRQotCSAgQVBJOiBhZGQgR1NUX1RBR19BTEJVTV9TT1JUTkFNRQotCSAgQVBJOiBhZGQgR1NUX1RBR19USVRMRV9TT1JUTkFNRQotCSAgQWRkIHRhZyB2YXJpYW50cyBmb3Igc29ydGluZyAoIzQxNDUzOSkuCi0KLTIwMDctMTAtMjQgMTM6MDA6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogQWxzbyBhbGxvdyB3aGl0ZSBzcGFjZSBmb3IgbmFtZXMgc28gd2UgZG9uJ3QgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgQWxzbyBhbGxvdyB3aGl0ZSBzcGFjZSBmb3IgbmFtZXMgc28gd2UgZG9uJ3QgYnJlYWsKLQkgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCi0yMDA3LTEwLTIyIDE1OjM3OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IFNtYWxsIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQ6Ci0JICBTbWFsbCB1cGRhdGVzLgotCi0yMDA3LTEwLTIyIDExOjMyOjE0ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEZpeGVkIGRvY3VtZW50YXRpb24gZnJvbSBteSBwcmV2aW91cyBjb21taXQgKGFkZGVkIG5ldyBBUEkgYWRkIGdzdF92YWx1ZV9zZXRfc3RydWN0dS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBGaXhlZCBkb2N1bWVudGF0aW9uIGZyb20gbXkgcHJldmlvdXMgY29tbWl0IChhZGRlZCBuZXcgQVBJIGFkZAotCSAgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUoKSwgYWRkIGdzdF92YWx1ZV9nZXRfc3RydWN0dXJlKCkgYW5kCi0JICBHU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFKS4KLQotMjAwNy0xMC0yMiAxMToxMDoyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0ZGVidWd1dGlscy5jOiBSZWZsb3cgY29kZSB0byBmaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICBSZWZsb3cgY29kZSB0byBmaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nLgotCi0yMDA3LTEwLTIyIDA4OjUzOjI2ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkgIEFkZGVkIEdzdFN0cnVjdHVyZSB0byBnc3RfdmFsdWVfdGFibGUgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfdG9fc3RyaW5nKSwKLQkgIChnc3RfY2Fwc19mcm9tX3N0cmluZ19pbnBsYWNlKToKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9nZXRfYWJicnMpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nKSwgKGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcpOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9zZXRfc3RydWN0dXJlKSwKLQkgIChnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSksIChnc3RfdmFsdWVfc2VyaWFsaXplX3N0cnVjdHVyZSksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX3N0cnVjdHVyZSksIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgotCSAgKiBnc3QvZ3N0dmFsdWUuaDoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFkZGVkIEdzdFN0cnVjdHVyZSB0byBnc3RfdmFsdWVfdGFibGUgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4KLQkgIENoYW5nZWQgZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgdG8gcHJpbnQgJzsnIGluIHRoZSBlbmQuCi0JICBDaGFuZ2VkIGdzdF9jYXBzX3RvX3N0cmluZyB0byBub3QgcHJpbnQgJzsnIGJldGV3ZWVuIGl0cwotCSAgZmllbGRzIChzdHJ1Y3R1cmVzKSBhbnltb3JlIGFuZCByZW1vdmUgdGhlIGxhc3RlcyAnOycgZnJvbSBsYXRlc3QKLQkgIHN0cnVjdHVyZS4gTm93IGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbmVzdGVkIHN0cnVjdHVyZXMuCi0JICBJbiBhZGRpdGlvbiwgYmFja3dhcmQgY29tcGF0aWJpbHR5IGlzIGFzc3VyZWQgYnkgYWNjZXB0aW5nICdcMCcgYXMKLQkgIGVuZCBkZWxpbWl0ZXIuIEZpeGVzOiAjNDg3OTY5LgotCSAgQVBJOiBhZGQgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUoKQotCSAgQVBJOiBhZGQgZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUoKQotCi0yMDA3LTEwLTE5IDA5OjQ4OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YnVzLmM6IFdoZW4gbm8gR1NvdXJjZSBjYWxsYmFjayBoYXMgYmVlbiBzZXQgdXAsIHRlbGwgZGV2ZWxvcGVyIHRvIHVzZSBhIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgZXhpc3RzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidXMuYzoKLQkgIFdoZW4gbm8gR1NvdXJjZSBjYWxsYmFjayBoYXMgYmVlbiBzZXQgdXAsIHRlbGwgZGV2ZWxvcGVyCi0JICB0byB1c2UgYSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGV4aXN0cy4KLQotMjAwNy0xMC0xNyAxMjo1ODoyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBBbGxvdyBkdW1waW5nIHBpcGVsaW5lcyBhcyBkb3QgZ3JhcGhzLiBGaXhlcyAjNDU2NTczLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdC5jOgotCSAgKiBnc3QvZ3N0Lmg6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmM6Ci0JICAqIGdzdC9nc3RkZWJ1Z3V0aWxzLmg6Ci0JICAqIGdzdC9nc3RpbmZvLmM6Ci0JICAqIGdzdC9nc3RpbmZvLmg6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIEFsbG93IGR1bXBpbmcgcGlwZWxpbmVzIGFzIGRvdCBncmFwaHMuIEZpeGVzICM0NTY1NzMuCi0KLTIwMDctMTAtMTYgMjE6NDg6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogQWxsb3cgJysnIGFzIHdlbGwsIGl0IGNhbiBiZSBwYXJ0IG9mIG1lZGlhIG9yIG1pbWUgdHlwZXMgc3VjaCBhcyBpbWFnZS9zdmcreG1sLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIEFsbG93ICcrJyBhcyB3ZWxsLCBpdCBjYW4gYmUgcGFydCBvZiBtZWRpYSBvciBtaW1lIHR5cGVzCi0JICBzdWNoIGFzIGltYWdlL3N2Zyt4bWwuCi0KLTIwMDctMTAtMTYgMjA6MzA6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIGdzdF9idXNfcG9wX2ZpbHRlcmVkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGJ1cy5jOgotCSAgKiBnc3QvZ3N0YnVzLmg6Ci0JICBBUEk6IGFkZCBnc3RfYnVzX3BvcF9maWx0ZXJlZAotCSAgQVBJOiBhZGQgZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQKLQkgIFR3byBuZXcgZnVuY3Rpb25zIGZvciB3YWl0aW5nIGZvciBzcGVjaWZpYyBtZXNzYWdlIHR5cGVzIG9uIHRoZQotCSAgYnVzIGZvciBhIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZSB3aXRob3V0IGl0ZXJhdGluZyBhbnkgbWFpbgotCSAgbG9vcHMgb3IgbWFpbiBjb250ZXh0cy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1cy5jOgotCSAgU29tZSB0ZXN0cyBmb3IgdGhlIG5ldyBmdW5jdGlvbnMuCi0KLTIwMDctMTAtMTYgMTc6MjE6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IE1ha2UgZ3RrLWRvYyBpZ25vcmUgc3R1ZmYgaXQgc2hvdWxkIGlnbm9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgTWFrZSBndGstZG9jIGlnbm9yZSBzdHVmZiBpdCBzaG91bGQgaWdub3JlLgotCi0yMDA3LTEwLTE2IDE2OjEyOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay4qOiBBbGxvdyBydW50aW1lIHNlbGVjdGlvbiBvZiB1bml0IHRlc3RzIHRvIHJ1biB2aWEgdGhlIEdTVF9DSEVDS1MgZW52aXJvbm1lbnQgdmFyaWFibGUgKHRlc3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgQWxsb3cgcnVudGltZSBzZWxlY3Rpb24gb2YgdW5pdCB0ZXN0cyB0byBydW4gdmlhIHRoZSBHU1RfQ0hFQ0tTCi0JICBlbnZpcm9ubWVudCB2YXJpYWJsZSAodGVzdCBjYXNlIGZ1bmN0aW9uIG5hbWVzLCBjb21tYS1zZXBhcmF0ZWQpLgotCi0yMDA3LTEwLTE2IDEzOjU4OjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIFJldmVydCBzZXJpYWxpc2F0aW9uIGNoYW5nZSBhbmQgY29uc3RyYWluIHN0cnVjdHVyZS1uYW1lcyBhZnRlciBjb25zZW5zdXMgb24gaXJjLiBVcGRhdGUgYXBpIGRvY3VtZW50YXRpb24gdG8gcmVmbGVjdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgUmV2ZXJ0IHNlcmlhbGlzYXRpb24gY2hhbmdlIGFuZCBjb25zdHJhaW4gc3RydWN0dXJlLW5hbWVzIGFmdGVyCi0JICBjb25zZW5zdXMgb24gaXJjLiBVcGRhdGUgYXBpIGRvY3VtZW50YXRpb24gdG8gcmVmbGVjdCB0aGUgY2hhbmdlLgotCi0yMDA3LTEwLTE2IDA2OjMyOjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RzdHJ1Y3R1cmUuYzogSW1wcm92ZSBzZXJpYWxpemF0aW9uIGFuZCBmaXggdGVzdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgSW1wcm92ZSBzZXJpYWxpemF0aW9uIGFuZCBmaXggdGVzdHMuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIEFkZCBhbm90aGVyIHRlc3QgdGhhdCBjb3ZlcnMgd2h5IEkgYWN0dWFsbHkgZGlkIHRoZSBwcmV2aW91cyBzdHJ1Y3R1cmUKLQkgIGNoYW5nZS4KLQotMjAwNy0xMC0xNSAxNDozMzoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogRG9uJ3QgY3Jhc2ggd2hlbiBpbnNwZWN0aW5nIGFuIGVsZW1lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfaW5mbyk6Ci0JICBEb24ndCBjcmFzaCB3aGVuIGluc3BlY3RpbmcgYW4gZWxlbWVudC4KLQotMjAwNy0xMC0xNSAxMTo1ODoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiBBZGQgdW5pdCB0ZXN0IGZvciBlc2NhcGluZyBvZiBzdHJ1Y3R1cmUgbmFtZSB3aGVuIHNlcmlhbGlzaW5nIGFuZCBkZXNlcmlhbGlzaW5nIHRvL2ZyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgZXNjYXBpbmcgb2Ygc3RydWN0dXJlIG5hbWUgd2hlbiBzZXJpYWxpc2luZwotCSAgYW5kIGRlc2VyaWFsaXNpbmcgdG8vZnJvbSBzdHJpbmdzLgotCi0yMDA3LTEwLTE1IDExOjM2OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzLzogRml4IHF1ZXVlIG5lZ290aWF0aW9uLiBJZiBhY2NlcHRjYXBzIHVuY29uZGl0aW9uYWxseSByZXR1cm5zIFRSVUUsIHVwc3RyZWFtIGlzIHRyaWNrZWQgaW50byB0aGlua2kuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9zaW5nbGVfcXVldWVfcHVzaF9vbmUpLAotCSAgKGdzdF9zaW5nbGVfcXVldWVfbmV3KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2luaXQpLAotCSAgKGdzdF9xdWV1ZV9wdXNoX29uZSk6Ci0JICBGaXggcXVldWUgbmVnb3RpYXRpb24uIElmIGFjY2VwdGNhcHMgdW5jb25kaXRpb25hbGx5IHJldHVybnMgVFJVRSwKLQkgIHVwc3RyZWFtIGlzIHRyaWNrZWQgaW50byB0aGlua2luZyBpdCBjYW4gc3VnZ2VzdCBhIGZvcm1hdCBkb3duc3RyZWFtCi0JICB3aGlsZSBkb3duc3RyZWFtIGRvZXMgbm90IHN1cHBvcnQgdGhhdCBmb3JtYXQuIFRoZSByZWFsIHByb2JsZW0gaXMgdGhhdAotCSAgY29yZSBjYWxscyBhY2NlcHRjYXBzIHdoZW4gcHVzaGluZyBhIGJ1ZmZlciB3aXRoIG5ldyBjYXBzLCBmb3Igd2hpY2ggd2UKLQkgIGRvIGEgbGl0dGxlIHdvcmthcm91bmQgYnkgc2V0dGluZyB0aGUgY2FwcyBvbiB0aGUgc3JjcGFkIG91cnNlbHZlcwotCSAgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlciAodW50aWwgdGhpcyBpcyBmaWd1cmVkIG91dCkuIEZpeGVzICM0ODY3NTguCi0KLTIwMDctMTAtMTUgMTE6MTk6MzYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogQWRkIHNvbWUgbW9yZSBjb21tZW50cyBhbmQgZGVidWcgb3V0cHV0LiBRdW90ZSBzdHJ1Y3R1cmUgbmFtZSB0byBmaXggZGVzZXJpYWxpc2F0aW9uIG9mIHNvbWUgc3RyaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgQWRkIHNvbWUgbW9yZSBjb21tZW50cyBhbmQgZGVidWcgb3V0cHV0LiBRdW90ZSBzdHJ1Y3R1cmUgbmFtZSB0byBmaXgKLQkgIGRlc2VyaWFsaXNhdGlvbiBvZiBzb21lIHN0cmluZ3MuCi0KLTIwMDctMTAtMTUgMDc6Mzc6MzcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGJ1ZmZlci5oOiBEZWZpbmUgR1NUX0JVRkZFUl9GTEFHX0dBUCBtb3JlIHN0cmljdGx5IHRvIGVuYWJsZSBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIGl0LiBGaXggZG9jcyBmb3IgR1NUX0JVRkZFLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgRGVmaW5lIEdTVF9CVUZGRVJfRkxBR19HQVAgbW9yZSBzdHJpY3RseSB0byBlbmFibGUgb3B0aW1pemF0aW9ucyBiYXNlZAotCSAgb24gaXQuIEZpeCBkb2NzIGZvciBHU1RfQlVGRkVSX01BTExPQ0RBVEEgYW5kIEdzdEJ1ZmZlci5tYWxsb2NfZGF0YS4KLQotMjAwNy0xMC0xNSAwNzoxMTowNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBTYXZlIGFwcHJveC4gNDAwIDEgYnl0ZSBhbGxvY3Mgd2hlbiBwcmludGluZy4gVXNlIEFQSSB0byBhY2NlcyBlbGVtZW50IGRldGFpbHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIFNhdmUgYXBwcm94LiA0MDAgMSBieXRlIGFsbG9jcyB3aGVuIHByaW50aW5nLiBVc2UgQVBJIHRvIGFjY2VzIGVsZW1lbnQKLQkgIGRldGFpbHMuCi0JICAqIHRvb2xzL2dzdC1ydW4uYzoKLQkgIEF2b2lkIGEgc3RyZHVwLgotCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSAgVXNlIEFQSSB0byBhY2NlcyBlbGVtZW50IGRldGFpbHMuCi0KLTIwMDctMTAtMTUgMDY6NTI6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGluZm8uYzogRml4IHNvbWUgc3BlbGxpbmcgZXJyb3JzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6Ci0JICBGaXggc29tZSBzcGVsbGluZyBlcnJvcnMuCi0KLTIwMDctMTAtMTQgMTU6NTQ6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogQ29ycmVjdGx5IHNldCB0aGUgbmV4dCBzdGF0ZSBpZiBhbGwgb2Ygb3VyIGFzeW5jIGNoaWxkcmVuIGNvbW1pdGVkIHRoZWlyIHN0YXRlLiBUaGlzIG1ha2VzIHN1cmUgd2UgY2FuIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9oYW5kbGVfYXN5bmNfZG9uZSk6Ci0JICBDb3JyZWN0bHkgc2V0IHRoZSBuZXh0IHN0YXRlIGlmIGFsbCBvZiBvdXIgYXN5bmMgY2hpbGRyZW4gY29tbWl0ZWQgdGhlaXIKLQkgIHN0YXRlLiBUaGlzIG1ha2VzIHN1cmUgd2UgY2FuIGFjdHVhbGx5IGNhbmNlbCB0aGUgc3RhdGUgY2hhbmdlIGluCi0JICBwcm9ncmVzcy4gRml4ZXMgYSByZWdyZXNzaW9uIGluIFJoeXRobWJveCB3aGVuIHNlZWtpbmcuCi0KLTIwMDctMTAtMTMgMTc6NDM6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RiaW4uYzogRG9uJ3Qgc2hhZG93IGxvY2FsIHZhcmlhYmxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzoKLQkgIERvbid0IHNoYWRvdyBsb2NhbCB2YXJpYWJsZS4KLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgIERvbid0IHNoYWRvdyBnbG9iYWwgZnVuY3Rpb24gbmFtZS4KLQotMjAwNy0xMC0xMyAxNzoyMDowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogVXNlIGFscmVhZHktaW50ZXJuZWQgc3RyaW5nIGZvciB0aGUgcHJpdmF0ZSBHc3RQbHVnaW5GZWF0dXJlIHBsdWdpbl9uYW1lIGZpZWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JICAqIGdzdC9nc3R0eXBlZmluZC5jOgotCSAgVXNlIGFscmVhZHktaW50ZXJuZWQgc3RyaW5nIGZvciB0aGUgcHJpdmF0ZSBHc3RQbHVnaW5GZWF0dXJlCi0JICBwbHVnaW5fbmFtZSBmaWVsZC4KLQotMjAwNy0xMC0xMCAyMjo0MzoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBBUEkgdG8gZG9jczsgZml4ZXMgdGhlIGJ1aWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBBZGQgbmV3IEFQSSB0byBkb2NzOyBmaXhlcyB0aGUgYnVpbGQuCi0KLTIwMDctMTAtMTAgMTU6MTg6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogQWRkIGZ1bmN0aW9uIHRvIHdhaXQgZm9yIEVPUywgc3ViY2xhc3NlcyBjYW4gdXNlIHRoaXMgdG8gY29ycmVjdGx5IHdhaXQgZm9yIGRldmljZXMgdG8gZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBpbnNwaXJlZCBieTogQmVub2l0IEZvdWV0IDxiZW5vaXQgZG90IGZvdWV0IGF0IHB1cnBsZWxhYnMgZG90IGNvbT4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua193YWl0X2VvcyksCi0JICAoZ3N0X2Jhc2Vfc2lua19ldmVudCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEFkZCBmdW5jdGlvbiB0byB3YWl0IGZvciBFT1MsIHN1YmNsYXNzZXMgY2FuIHVzZSB0aGlzIHRvIGNvcnJlY3RseSB3YWl0Ci0JICBmb3IgZGV2aWNlcyB0byBkcmFpbiBiZWZvcmUgcGVyZm9ybWluZyB0aGUgRU9TIGxvZ2ljLiBGaXhlcyAjNDg1MzQzLgotCSAgQVBJOiBnc3RfYmFzZV9zaW5rX3dhaXRfZW9zKCkKLQotMjAwNy0xMC0xMCAxMDo1MzozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHBsdWdpbi5oOiBDYXN0IGRlc2NyaXB0aW9uIHN0cmluZyBjb25zdGFudHMgaW4gR1NUX1BMVUdJTl9ERUZJTkUgbWFjcm9zIHRvIGEgKGdjaGFyKikgdG8gbWFrZSBDKysgY29kZSB1c2luZyB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5oOgotCSAgQ2FzdCBkZXNjcmlwdGlvbiBzdHJpbmcgY29uc3RhbnRzIGluIEdTVF9QTFVHSU5fREVGSU5FIG1hY3JvcwotCSAgdG8gYSAoZ2NoYXIqKSB0byBtYWtlIEMrKyBjb2RlIHVzaW5nIHRoZXNlIG1hY3JvcyBjb21waWxlCi0JICB3aXRob3V0IHdhcm5pbmcgd2l0aCBnKystNC4yIChzZWUgIzQ2MjczNykuICBFdmVuIGlmIHNsaWdodGx5Ci0JICB1Z2x5LCB0aGlzIHNlZW1zIHByZWZlcmFibGUgdG8gcHV0dGluZyB0aGUgZGVzY3JpcHRpb24gc3RyaW5ncwotCSAgaW50byB0aGUgR0xpYiBxdWFyayB0YWJsZSBvciBtYWtpbmcgdGhlIHN0cnVjdHVyZSBtZW1iZXIgYQotCSAgY29uc3QgZ2NoYXIgKiBhbmQgZG9pbmcgY2FzdHMgaW4gY29yZSBjb2RlIHRoYXQgYWxsb2NzIGFuZAotCSAgZnJlZXMgdGhlc2Ugc3RyaW5ncywgb3IgcmVxdWlyaW5nIGEgY2FzdCBpbiB0aGUgQysrIGNvZGUuCi0KLTIwMDctMTAtMDkgMjA6NDU6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmZvLmg6IFVzZSBfX0ZVTkNUSU9OX18gaW5zdGVhZCBvZiBfX1BSRVRUWV9GVU5DVElPTl9fLCBpdCdzIHNpbGx5IHRvIHByaW50IHRoZSBlbnRpcmUgY2xhc3MvZnVuY3Rpb24gc2lnbmF0dS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmg6Ci0JICBVc2UgX19GVU5DVElPTl9fIGluc3RlYWQgb2YgX19QUkVUVFlfRlVOQ1RJT05fXywgaXQncyBzaWxseQotCSAgdG8gcHJpbnQgdGhlIGVudGlyZSBjbGFzcy9mdW5jdGlvbiBzaWduYXR1cmUgaW50byB0aGUgbG9nCi0JICBmaWxlIGZvciBDKysgY29kZS4gIFRoaXMgb25seSBhZmZlY3RzIEMrKyBjb2RlLCBmb3IgQyBjb2RlCi0JICBldmVyeXRoaW5nIHJlbWFpbnMgdGhlIHNhbWUuCi0KLTIwMDctMTAtMDkgMTY6MjA6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogV29yayBhcm91bmQgYSBwcm9ibGVtIHdpdGggcGlwZWxpbmVzIGNvbnRhaW5pbmcgKHNlbWkpbG9vcHMgdW50aWwgYSBwcm9wZXIsIG1vcmUgY29tcGxpY2F0ZWQgc29sdXRpb24gaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKHJlbW92ZV9mcm9tX3F1ZXVlKToKLQkgIFdvcmsgYXJvdW5kIGEgcHJvYmxlbSB3aXRoIHBpcGVsaW5lcyBjb250YWluaW5nIChzZW1pKWxvb3BzIHVudGlsIGEKLQkgIHByb3BlciwgbW9yZSBjb21wbGljYXRlZCBzb2x1dGlvbiBpcyByZWFkeS4gU2VlICM0NzU0NTUuCi0KLTIwMDctMTAtMDkgMTQ6MTg6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC86IFB1dCBtb3JlIHN0cmluZ3MgaW50byB0aGUgR0xpYiBxdWFyayB0YWJsZS4gTm8gbmVlZCB0byBrZWVwIGEgaHVuZHJlZC1zb21ldGhpbmcgY29waWVzIG9mIGlkZW50aWNhbCB2ZXJzaW9uIHN0ci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzoKLQkgICogZ3N0L2dzdHBsdWdpbi5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JICBQdXQgbW9yZSBzdHJpbmdzIGludG8gdGhlIEdMaWIgcXVhcmsgdGFibGUuIE5vIG5lZWQgdG8ga2VlcAotCSAgYSBodW5kcmVkLXNvbWV0aGluZyBjb3BpZXMgb2YgaWRlbnRpY2FsIHZlcnNpb24gc3RyaW5ncywKLQkgIGxpY2Vuc2Ugc3RyaW5ncywgcGFja2FnZSBuYW1lIHN0cmluZ3MgYW5kIHBhY2thZ2Ugb3JpZ2luCi0JICBzdHJpbmdzIGFyb3VuZC4KLQotMjAwNy0xMC0wOSAxMDo0MTo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6IERvbid0IGltcGx5IHRoYXQgaXQncyBva2F5IHRvIHVuY29uZGl0aW9uYWxseSBjaGFuZ2UgYnVmZmVyIGRhdGEgb3IgYnVmZmVyIG1ldGFkLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBEb24ndCBpbXBseSB0aGF0IGl0J3Mgb2theSB0byB1bmNvbmRpdGlvbmFsbHkgY2hhbmdlCi0JICBidWZmZXIgZGF0YSBvciBidWZmZXIgbWV0YWRhdGEgaW4gYSBwYWQgcHJvYmUgY2FsbGJhY2ssCi0JICBhbmQgYSBidW5jaCBvZiBvdGhlciBjb21tZW50cy4gRml4ZXMgIzQzMDAzMS4KLQotMjAwNy0xMC0wOCAyMDo0NTowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgd2luMzIvY29tbW9uLzogVXBkYXRlIGdlbmVyYXRlZCBmaWxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaDoKLQkgICogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIFVwZGF0ZSBnZW5lcmF0ZWQgZmlsZXMuCi0KLTIwMDctMTAtMDggMTc6NTk6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6IFByZWZpeCBzZWN0aW9uIHdpdGggYnJva2VuIGNvZGUgd2l0aCBhIHdhcm5pbmcgKHNlZSAjMzQyNDMyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgotCSAgUHJlZml4IHNlY3Rpb24gd2l0aCBicm9rZW4gY29kZSB3aXRoIGEgd2FybmluZyAoc2VlICMzNDI0MzIpLgotCi0yMDA3LTEwLTA4IDE3OjI2OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL21hbnVhbC86IENhbGwgZ190aHJlYWRfaW5pdCgpIGJlZm9yZSBnX29wdGlvbl9jb250ZXh0X25ldygpIHRvIGF2b2lkIHdhcm5pbmdzLiBTcG90dGVkIGJ5IFJpdGVzaCBLaGFkZ2FyYXkuIEZpeGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1pbml0LnhtbDoKLQkgIENhbGwgZ190aHJlYWRfaW5pdCgpIGJlZm9yZSBnX29wdGlvbl9jb250ZXh0X25ldygpIHRvCi0JICBhdm9pZCB3YXJuaW5ncy4gU3BvdHRlZCBieSBSaXRlc2ggS2hhZGdhcmF5LiBGaXhlcyAjNDg0MjI1LgotCi0yMDA3LTEwLTA4IDE3OjA1OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFdoZW4gd2UgcmVjZWl2ZWQgRU9TIGFuZCBhcmUgd2FpdGluZyBmb3Igd2hlbiB0byBwb3N0IHRoZSBFT1MgbWVzc2FnZSwgb3VyIHN0YXRlIGlzIHByZXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLAotCSAgKGdzdF9iYXNlX3NpbmtfcXVldWVfb2JqZWN0X3VubG9ja2VkKSwKLQkgIChnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdCksIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX25lZWRzX3ByZXJvbGwpLCAoZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCk6Ci0JICBXaGVuIHdlIHJlY2VpdmVkIEVPUyBhbmQgYXJlIHdhaXRpbmcgZm9yIHdoZW4gdG8gcG9zdCB0aGUgRU9TIG1lc3NhZ2UsCi0JICBvdXIgc3RhdGUgaXMgcHJlcm9sbGVkIGFuZCB3ZSBzaG91bGQgbm90IHJldHVybiBBU1lOQy4KLQkgIFJlb3JnYW5pemUgc29tZSBjb2RlIHBhdGhzIHRvIGltcGxlbWVudCB0aGlzIGJlaGF2aW9yLgotCSAgKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6IChzZW5kX2VvcyksIChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X3NpbmtzX3N1aXRlKToKLQkgIEFkZCB1bml0IHRlc3QgdG8gdmVyaWZ5IGFib3ZlIEVPUyBmaXguCi0KLTIwMDctMTAtMDggMTA6Mjg6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IE1vdmUgZGV0ZWN0aW5nIHRoZSBpbnB1dCBjYXBzIG9mIHRoZSBzaW5rcGFkIHRvIHRoZSBzZXRjYXBzIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhdmVfdHlwZSksIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaW5pdCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NldGNhcHMpLCAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKToKLQkgIE1vdmUgZGV0ZWN0aW5nIHRoZSBpbnB1dCBjYXBzIG9mIHRoZSBzaW5rcGFkIHRvIHRoZSBzZXRjYXBzIGZ1bmN0aW9uLgotCSAgVGhpcyBhbGxvd3MgdXMgdG8gdXBkYXRlIHRoZSBvdXRwdXQgY2FwcyB3aGVuIHdlIHJlY2VpdmUgbmV3IGlucHV0IGNhcHMKLQkgIGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIHRoZSBmaXJzdCBkZXRlY3RlZCBjYXBzLgotCi0yMDA3LTEwLTA4IDEwOjIxOjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERvbid0IHRyeSB0byBwcmVyb2xsIG5vbi1hc3luYyBlbGVtZW50cyBhZnRlciBhIGZsdXNoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIERvbid0IHRyeSB0byBwcmVyb2xsIG5vbi1hc3luYyBlbGVtZW50cyBhZnRlciBhIGZsdXNoLgotCSAgU3VidHJhY3QgbGF0ZW5jeSBmb3JtIGNsb2NrIHRpbWVzIHdoZW4gcmVwb3J0aW5nIHBvc2l0aW9uLgotCi0yMDA3LTEwLTA1IDE0OjQ0OjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBTbWFsbCBjb21tZW50IGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3BhdXNlX3Rhc2spOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIFNtYWxsIGNvbW1lbnQgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlLgotCi0yMDA3LTEwLTA1IDE0OjQwOjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogUmV3b3JrIHRoZSBsb2NraW5nIG9mIGJhc2VzcmMgaW4gYSBzaW1pbGFyIGZhc2hpb24gdG8gYmFzZXNpbmsuIFdlIGJhc2ljYWxseSBoYXZlIG9uZSBsb2MuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcpLAotCSAgKGdzdF9iYXNlX3NyY19zZXRfbGl2ZSksIChnc3RfYmFzZV9zcmNfaXNfbGl2ZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3kpLCAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZXZlbnQpLCAoZ3N0X2Jhc2Vfc3JjX3dhaXQpLAotCSAgKGdzdF9iYXNlX3NyY19kb19zeW5jKSwgKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLAotCSAgKGdzdF9iYXNlX3NyY19wYWRfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19sb29wKSwKLQkgIChnc3RfYmFzZV9zcmNfdW5sb2NrKSwgKGdzdF9iYXNlX3NyY191bmxvY2tfc3RvcCksCi0JICAoZ3N0X2Jhc2Vfc3JjX3NldF9mbHVzaGluZyksIChnc3RfYmFzZV9zcmNfc2V0X3BsYXlpbmcpLAotCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgIFJld29yayB0aGUgbG9ja2luZyBvZiBiYXNlc3JjIGluIGEgc2ltaWxhciBmYXNoaW9uIHRvIGJhc2VzaW5rLiBXZQotCSAgYmFzaWNhbGx5IGhhdmUgb25lIGxvY2sgKExJVkVfTE9DSykgcHJvdGVjdGluZyB0aGUgZGF0YWZsb3cuIFRoaXMgYWxsb3dzCi0JICB1cyB0byBoYW5kbGUgbGl2ZSBzb3VyY2VzIGFuZCBzZW1pIGxpdmUgb25lcyBtdWNoIGJldHRlci4KLQkgIFNpbXBsaWZ5IGZsdXNoaW5nLgotCSAgRml4IHVubG9ja2luZyB3aGVuIHNlZWtpbmcsIHNodXR0aW5nIGRvd24gYW5kIHBhdXNpbmcgaW4gbGl2ZSBzb3VyY2VzLgotCi0yMDA3LTEwLTA1IDExOjUyOjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOiBGaXggY29tcGlsYXRpb24gYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzogKHJ1bl9waXBlbGluZSk6Ci0JICBGaXggY29tcGlsYXRpb24gYWdhaW4uCi0KLTIwMDctMTAtMDMgMTU6Mjc6MjQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogVXNlIG1lYW5pbmdmdWwgY2F0ZWdvcmllcyBmb3IgdGhlIGxvZ3MgdG8gY2xlYW4gdGhlIGRlZmF1bHQgb25lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBVc2UgbWVhbmluZ2Z1bCBjYXRlZ29yaWVzIGZvciB0aGUgbG9ncyB0byBjbGVhbiB0aGUgZGVmYXVsdCBvbmUuCi0KLTIwMDctMTAtMDMgMTU6MDU6MzAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzogUHJpbnQgbWVzc2FnZSBuYW1lIGFuZCBub3QganVzdCBudW1iZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzoKLQkgIFByaW50IG1lc3NhZ2UgbmFtZSBhbmQgbm90IGp1c3QgbnVtYmVyLgotCi0yMDA3LTEwLTAzIDE1OjAyOjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0OiBBZGQgc29tZSBtb3JlIHRob3VnaHRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0OgotCSAgQWRkIHNvbWUgbW9yZSB0aG91Z2h0cy4KLQotMjAwNy0xMC0wMyAxNDo1MTowMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOiBQcmludCBtZXNzYWdlIG5hbWUgYW5kIG5vdCBqdXN0IG51bWJlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSAgUHJpbnQgbWVzc2FnZSBuYW1lIGFuZCBub3QganVzdCBudW1iZXIuCi0KLTIwMDctMTAtMDMgMTI6MDU6MTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiBTcGVlZHVwIHR5cGVmaW5kaW5nLiBUaGlzIGlzIHdvcmsgaW4gcHJvZ3Jlc3MgKHNlZSAjNDU5ODYyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JICBTcGVlZHVwIHR5cGVmaW5kaW5nLiBUaGlzIGlzIHdvcmsgaW4gcHJvZ3Jlc3MgKHNlZSAjNDU5ODYyKS4KLQotMjAwNy0xMC0wMyAxMTozNjoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cGx1Z2luLmM6IEZpeCBkb2NzIHRoYXQgbWVudGlvbiAncGx1Z2luX2Rlc2MnIGluc3RlYWQgb2YgJ2dzdF9wbHVnaW5fZGVzYycuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOgotCSAgRml4IGRvY3MgdGhhdCBtZW50aW9uICdwbHVnaW5fZGVzYycgaW5zdGVhZCBvZiAnZ3N0X3BsdWdpbl9kZXNjJy4KLQkgIFNwb3R0ZWQgYnkgSm9zZXAgVG9ycmEgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4uCi0KLTIwMDctMTAtMDMgMTE6MTY6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RjbG9jay5oOiBGaXggdXAgYnJva2VuIEdTVF9DTE9DS19GTEFHUyBtYWNybyBhbmQgR3N0Q2xvY2sgZG9jcy4gVGhlIGZsYWdzIGZpZWxkIGhhcyBtb3ZlZCB0byBHc3RPYmplY3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBGaXggdXAgYnJva2VuIEdTVF9DTE9DS19GTEFHUyBtYWNybyBhbmQgR3N0Q2xvY2sgZG9jcy4gVGhlIGZsYWdzCi0JICBmaWVsZCBoYXMgbW92ZWQgdG8gR3N0T2JqZWN0LgotCi0yMDA3LTEwLTAyIDE1OjIwOjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogQ2FsbCB1bmxvY2sgZm9yIGxpdmUgc291cmNlcyBzbyB0aGF0IHRoZXkgY2FuJ3QgZ2V0IHN0dWNrIGluIF9jcmVhdGUgYW5kIHByb2R1Y2UgYSBidWZmZXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kb19zeW5jKSwKLQkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgQ2FsbCB1bmxvY2sgZm9yIGxpdmUgc291cmNlcyBzbyB0aGF0IHRoZXkgY2FuJ3QgZ2V0IHN0dWNrIGluIF9jcmVhdGUgYW5kCi0JICBwcm9kdWNlIGEgYnVmZmVyIGJlZm9yZSB0aGV5IGFyZSBzZXQgYmFjayB0byBQTEFZSU5HLgotCi0yMDA3LTEwLTAyIDA5OjIxOjQ4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IENvbW1lbnQgdGhlIHNlZ21lbnQtcmVsYXRlZCBjb2RlLi4uIGluIHRoZSBQUk9QRVIgZnVuY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKSwKLQkgIChnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUpOgotCSAgQ29tbWVudCB0aGUgc2VnbWVudC1yZWxhdGVkIGNvZGUuLi4gaW4gdGhlIFBST1BFUiBmdW5jdGlvbi4KLQkgIFNlZSAjNDgyMTQ3IGFuZCBteSBjb21taXQgZnJvbSB5ZXN0ZXJkYXkuCi0KLTIwMDctMTAtMDEgMTc6NTk6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBBbHNvIGluaXRpYWxpemUgdGhlIGNvdW50ZXIgdGhhdCBjYWxjdWxhdGVzIHRoZSBmaXJzdCB0aW1lc3RhbXAgb24gYSBidWZmZXIgY29ycmVjdGx5IGZvci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBBbHNvIGluaXRpYWxpemUgdGhlIGNvdW50ZXIgdGhhdCBjYWxjdWxhdGVzIHRoZSBmaXJzdCB0aW1lc3RhbXAgb24gYQotCSAgYnVmZmVyIGNvcnJlY3RseSBmb3Igbm9uLWxpdmUgc291cmNlcy4KLQotMjAwNy0xMC0wMSAxMjozMToyOCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBEaXNhYmxlIGNvZGUgdGhhdCdzIGJyZWFraW5nIHRoZSBjdXJyZW50LXRpbWUtbGV2ZWwgcmVwb3J0aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSk6Ci0JICBEaXNhYmxlIGNvZGUgdGhhdCdzIGJyZWFraW5nIHRoZSBjdXJyZW50LXRpbWUtbGV2ZWwgcmVwb3J0aW5nLgotCSAgU2VlICM0ODIxNDcKLQotMjAwNy0wOS0zMCAxODoxNjozNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgTV9QSSBhbmQgSU1QT1JUX1NZTUJPTCB0byB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBHc3RJbmZvIHNlY3Rpb24gYXMgdGhleSBzaG91bGQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgQWRkIE1fUEkgYW5kIElNUE9SVF9TWU1CT0wgdG8gdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgR3N0SW5mbyBzZWN0aW9uCi0JICBhcyB0aGV5IHNob3VsZG4ndCBzaG93IHVwLiBGaXhlcyB0aGUgZG9jcyBidWlsZC4KLQotMjAwNy0wOS0yOSAxMTo0NjozMSArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0aW5mby5oOiBBZGQgYW4gZXhwbGljaXQgdmFyaWFibGUgaW1wb3J0YXRpb24gbmVlZGVkIG9uIFZTNiAob25seSBmb3IgTVNDX1ZFUikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgQWRkIGFuIGV4cGxpY2l0IHZhcmlhYmxlIGltcG9ydGF0aW9uIG5lZWRlZCBvbiBWUzYgKG9ubHkgZm9yIE1TQ19WRVIpCi0JICBEZWZpbmUgTV9QSSB3aGljaCBpcyB1c2VkIGluIGZpbGVzIHdoaWNoIGFyZSBpbmNsdWRpbmcgZ3N0aW5mby5oLgotCSAgVlM2IGluY2x1ZGVzIGRvZXNuJ3QgZGVmaW5lIGl0LgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLgotCSAgKiB3aW4zMi92czYvbGliZ3N0Y29udHJvbGxlci5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgotCSAgVXBkYXRlIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJ1aWxkLgotCi0yMDA3LTA5LTI4IDEwOjIyOjQwICswMDAwICBGZWxpcGUgQ29udHJlcmFzIDxmZWxpcGUuY29udHJlcmFzQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBJbXByb3ZlIGRlYnVnZ2luZy4gRml4ZXMgIzQ4MDg1OC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEZlbGlwZSBDb250cmVyYXMgPGZlbGlwZSBkb3QgY29udHJlcmFzIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKHVwZGF0ZV90aW1lX2xldmVsKSwgKGFwcGx5X2J1ZmZlciksCi0JICAoZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksCi0JICAoZ3N0X3F1ZXVlX2NoYWluKSwgKGdzdF9xdWV1ZV9sb29wKSwgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCk6Ci0JICBJbXByb3ZlIGRlYnVnZ2luZy4gRml4ZXMgIzQ4MDg1OC4KLQotMjAwNy0wOS0yOCAxMDoxNToyMyArMDAwMCAgRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlLmNvbnRyZXJhc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogRmlyc3QgcGF0Y2ggb2YgY29kZSBjbGVhbnVwcywgdXNlIHRoZSBtYWNyb3MgYW5kIHJpZ2h0IGFyZ3VtZW50cyBpbiB0aGUgbWFjcm9zIHRvIHNpZ25hbC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlIGRvdCBjb250cmVyYXMgYXQgZ21haWwgZG90IGNvbT4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KToKLQkgIEZpcnN0IHBhdGNoIG9mIGNvZGUgY2xlYW51cHMsIHVzZSB0aGUgbWFjcm9zIGFuZCByaWdodCBhcmd1bWVudHMgaW4gdGhlCi0JICBtYWNyb3MgdG8gc2lnbmFsIGFuZCBsb2NrIHRoZSBxdWV1ZS4gU2VlICM0ODA4NTguCi0KLTIwMDctMDktMjYgMTg6MDY6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidXMuYzogSW1wcm92ZSBkZWJ1Z2dpbmcgd2hlbiBkZWFsaW5nIHdpdGggX3BvbGwoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChwb2xsX2Z1bmMpOgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgd2hlbiBkZWFsaW5nIHdpdGggX3BvbGwoKS4KLQotMjAwNy0wOS0yNiAxODowNDo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IEZpeCBtZW1vcnkgbGVhayBJIGludHJvZHVjZWQgYSBmZXcgZGF5cyBhZ28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JICBGaXggbWVtb3J5IGxlYWsgSSBpbnRyb2R1Y2VkIGEgZmV3IGRheXMgYWdvLgotCi0yMDA3LTA5LTI2IDE3OjAwOjIyICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9nc3RidWZmZXIuYzogTWFrZSBpdCBvbmNlIGFnYWluIHBvc3NpYmxlIHRvIGZyZWUgR3N0QnVmZmVycyBpbiB0aGUgZGVmYXVsdCBidWlsZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX2ZpbmFsaXplKToKLQkgIE1ha2UgaXQgb25jZSBhZ2FpbiBwb3NzaWJsZSB0byBmcmVlIEdzdEJ1ZmZlcnMgaW4gdGhlIGRlZmF1bHQKLQkgIGJ1aWxkLgotCSAgVGhlIHBvaXNvbmluZyBzY3JpYmJsZXMgb24gcGFydHMgb2YgdGhlIG1pbmlvYmplY3Qgd2UgbmVlZCBpbgotCSAgb3JkZXIgdG8gZnJlZSBpdC4KLQkgIEZpeGVzICM0ODAzNDEKLQotMjAwNy0wOS0yNSAxODozNTozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQVBJOiBhZGQgR1NUX1RBR19DT01QT1NFUiwgZml4ZXMgIzQ1OTgwOS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgQVBJOiBhZGQgR1NUX1RBR19DT01QT1NFUiwgZml4ZXMgIzQ1OTgwOS4KLQotMjAwNy0wOS0yNCAxNzo0MToyNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0cGx1Z2luLio6IEFkZCB0aGUgMy1jbGF1c2UgQlNEIGxpY2Vuc2UgYW5kIHRoZSBNSVQvWDExIGxpY2Vuc2UgdG8gdGhlIGxpY2Vuc2UgbGlzdC4gRml4ZXMgIzQ3OTc4NC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uaDoKLQkgIEFkZCB0aGUgMy1jbGF1c2UgQlNEIGxpY2Vuc2UgYW5kIHRoZSBNSVQvWDExIGxpY2Vuc2UgdG8gdGhlIGxpY2Vuc2UKLQkgIGxpc3QuIEZpeGVzICM0Nzk3ODQuCi0KLTIwMDctMDktMjQgMTc6MjI6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvZmFxL2dldHRpbmcueG1sOiBBZGQgUStBIGFib3V0IGRpZmZlcmVudCBHU3RyZWFtZXIgdmVyc2lvbnMgKCMzNjQwNTYpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dldHRpbmcueG1sOgotCSAgQWRkIFErQSBhYm91dCBkaWZmZXJlbnQgR1N0cmVhbWVyIHZlcnNpb25zICgjMzY0MDU2KS4KLQotMjAwNy0wOS0yNCAxMjo0NjoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBSZXR1cm4gY29ycmVjdCBnYm9vbGVhbiBmcm9tIHF1ZXJ5IGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSksCi0JICAoZ3N0X2Jhc2Vfc2lua19ldmVudCksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBSZXR1cm4gY29ycmVjdCBnYm9vbGVhbiBmcm9tIHF1ZXJ5IGZ1bmN0aW9uLgotCi0yMDA3LTA5LTI0IDEyOjI5OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNpbXBsaWZ5IGxhdGVuY3kgcXVlcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5KSwKLQkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIFNpbXBsaWZ5IGxhdGVuY3kgcXVlcnkuCi0JICBXaGVuIG5vdCBzeW5jaHJvbml6aW5nLCB3ZSBjYW4gcmVwb3J0IGxhdGVuY3kgd2l0aG91dCBxdWVyeWluZyB0aGUgcGVlcgotCSAgZWxlbWVudC4KLQotMjAwNy0wOS0yNCAxMTo0NjozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogRml4IHNtYWxsIHR5cG9zIGluIHRoZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RvYmplY3QuaDoKLQkgICogZ3N0L2dzdHZhbHVlLmM6Ci0JICBGaXggc21hbGwgdHlwb3MgaW4gdGhlIGRvY3MuCi0KLTIwMDctMDktMjQgMTE6MjI6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduLzogRG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0eXBvIGZpeGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LWxhdGVuY3kudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1wdXNoLXB1bGwudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtYWN0aXZhdGlvbi50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc291cmNlLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0ZWxlbWVudC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0b2JqZWN0LnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXByZXJvbGwudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXB1c2gtcHVsbC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1xdWVyeS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6Ci0JICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHR5cG8gZml4ZXMuCi0KLTIwMDctMDktMjMgMTA6MTY6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogQWRkIHNvbWUgZGVidWcgdGV4dCB0byBlcnJvciBtZXNzYWdlIHRvIGluZGljYXRlIHRoYXQgd2UgZXJyb3JlZCBvdXQgb24gcmVxdWVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JICBBZGQgc29tZSBkZWJ1ZyB0ZXh0IHRvIGVycm9yIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhhdAotCSAgd2UgZXJyb3JlZCBvdXQgb24gcmVxdWVzdC4KLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgV2hlbiB0aGUgc3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgZmFpbHMsIGNoZWNrIGZvciBhbgotCSAgZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIGFuZCBwcmludCBpdC4KLQotMjAwNy0wOS0yMiAxNzoyMjoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBvL2NzLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby91ay5wbzoKLQkgIHVwZGF0ZWQgdHJhbnNsYXRpb25zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZWQgdHJhbnNsYXRpb25zCi0KLTIwMDctMDktMjIgMTc6MTg6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBwby86IEFkZGVkIFNwYW5pc2ggdHJhbnNsYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRyYW5zbGF0ZWQgYnk6IEpvcmdlIEdvbnrDoWxleiBHb256w6FsZXogPGFsb3JpZWxAZ21haWwuY29tPgotCSAgKiBwby9MSU5HVUFTOgotCSAgKiBwby9lcy5wbzoKLQkgIEFkZGVkIFNwYW5pc2ggdHJhbnNsYXRpb24uCi0KLTIwMDctMDktMjEgMTQ6Mzc6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogRml4IHByaW50ZiBhcmd1bWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX3B1c2hfb25lKToKLQkgIEZpeCBwcmludGYgYXJndW1lbnRzLgotCi0yMDA3LTA5LTIwIDEwOjM2OjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6IEltcHJvdmVkIHN0YXRlIGNoYW5nZSB1bml0IHRlc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKLQkgIEltcHJvdmVkIHN0YXRlIGNoYW5nZSB1bml0IHRlc3QuCi0KLTIwMDctMDktMjAgMDc6NDI6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGJpbi5oOiBNb3ZlIHByaXYgdG8gdGhlIHJpZ2h0IHBsYWNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uaDoKLQkgIE1vdmUgcHJpdiB0byB0aGUgcmlnaHQgcGxhY2UuCi0JICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgQWRkIEZJWE1FOiBhbmQgaW1wcm92ZSBsb2cuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBXb3JrIHdpdGggYWxsIHR5cGVzIG9mIHJlZ2lzdHJpZXMuCi0KLTIwMDctMDktMTkgMjA6Mzk6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBEb24ndCB1bnJlZiB0aGUgZXZlbnQgYWZ0ZXIgcHVzaGluZyBpdC4gRml4ZXMgIzQ3ODQwMS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KToKLQkgIERvbid0IHVucmVmIHRoZSBldmVudCBhZnRlciBwdXNoaW5nIGl0LiBGaXhlcyAjNDc4NDAxLgotCi0yMDA3LTA5LTE5IDE4OjA3OjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIElnbm9yZSByZWdpc3RyaWVzIGluIGFueSBmb3JtYXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMvbWFudWFsLy5jdnNpZ25vcmU6Ci0JICBJZ25vcmUgcmVnaXN0cmllcyBpbiBhbnkgZm9ybWF0LgotCi0yMDA3LTA5LTE5IDEzOjI4OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOiBBZGQgY29tcGF0aWJpbGl0eSBtYWNybyBmb3IgZ19pbnRlcm5fc3RyaW5nKCkgZm9yCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaDoKLQkgIEFkZCBjb21wYXRpYmlsaXR5IG1hY3JvIGZvciBnX2ludGVybl9zdHJpbmcoKSBmb3IKLQkgIEdMaWItMi44IChhbnkgcmVhc29uIHdlIGNhbid0IGp1c3QgYnVtcCB0aGUKLQkgIHJlcXVpcmVtZW50IHRvIGF0IGxlYXN0IDIuMTA/KQotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzoKLQkgIE1ha2UgR3N0U3RhdGljUGFkVGVtcGxhdGUncyB0ZW1wbF9uYW1lIGZpZWxkIGEgY29uc3QgZ2NoYXIgKiBhbmQgZml4Ci0JICB1cCB0aGUgaW50ZXJuYWwgY29kZSBhY2NvcmRpbmdseS4gIFRoaXMgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSwgc2luY2UKLQkgIHRoZXJlIGlzIG5vIHJlYXNvbiBleHRlcm5hbCBjb2RlIGNvdWxkIGV2ZXIgYXNzdW1lIHRoZSBzdHJpbmcgaW4gc3VjaAotCSAgYSBzdHJ1Y3R1cmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVubGVzcyBpdCBkaWQgdGhhdCBpdHNlbGY7ICB0aGUKLQkgIHVzZSBvZiBnX3N0cmR1cCgpIGlzIHByaXZhdGUgdG8gZWxlbWVudCBmYWN0b3JpZXMuICBUaGUgbmV3IGNvZGUgYWxzbwotCSAgc2F2ZXMgc29tZSBtZW1vcnkgYnkgcHV0dGluZyBwYWQgdGVtcGxhdGUgbmFtZSBzdHJpbmdzIGludG8gdGhlIEdMaWIKLQkgIHF1YXJrIHRhYmxlIGluc3RlYWQgb2YgYWxsb2NhdGluZyB0aGVtIGR5bmFtaWNhbGx5LgotCSAgRGVjbGFyaW5nIHRoaXMgZmllbGQgY29uc3RhbnQgZml4ZXMgd2FybmluZ3Mgd2l0aCBnKystNC4yIHdoZW4gdXNpbmcKLQkgIHRoZSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSBtYWNybyBpbiBjKysgY29kZSAoIzQ3ODA5MikuCi0KLTIwMDctMDktMTkgMTI6MzE6MTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IFJlbGVhc2Ugc3RhdGljIGNhcHMuIEZpeGVzICM0NzU3MjMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBSZWxlYXNlIHN0YXRpYyBjYXBzLiBGaXhlcyAjNDc1NzIzLgotCi0yMDA3LTA5LTE4IDIyOjEzOjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0aW5mby4qOiBNYWtlIHNvbWUgaW50ZXJuYWwgQVBJIHRha2UgY29uc3QgZ2NoYXIgKiBpbnN0ZWFkIG9mIGp1c3QgZ2NoYXIgKiB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyB3aXRoIGcrKy0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5jOgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgTWFrZSBzb21lIGludGVybmFsIEFQSSB0YWtlIGNvbnN0IGdjaGFyICogaW5zdGVhZCBvZiBqdXN0Ci0JICBnY2hhciAqIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggZysrLTQuMi4yIHdoZW4KLQkgIHBhc3Npbmcgc3RyaW5nIGNvbnN0YW50cyAocGFydGlhbGx5IGZpeGVzICM0NzgwOTIpLgotCi0yMDA3LTA5LTE3IDIwOjU1OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IEEgbGF0ZW5jeSBxdWVyeSBmYWlscyB3aGVuIG9uZSBvZiB0aGUgc2lua3MgZmFpbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fcXVlcnlfbGF0ZW5jeV9mb2xkKSwgKGdzdF9iaW5fcXVlcnkpOgotCSAgQSBsYXRlbmN5IHF1ZXJ5IGZhaWxzIHdoZW4gb25lIG9mIHRoZSBzaW5rcyBmYWlsLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSk6Ci0JICBJbXByb3ZlIGRlYnVnZ2luZy4KLQotMjAwNy0wOS0xNyAxNzoxNzoyOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIEZpeCBtaW5vciBjb21waWxhdGlvbiB3YXJuaW5ncyBzaG93biB3aXRoIEZvcnRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY29udGludWVfZnVuYyk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWRfZnVsbCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX2xvb3ApOgotCSAgRml4IG1pbm9yIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHNob3duIHdpdGggRm9ydGUuCi0KLTIwMDctMDktMTcgMDY6MDE6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogTWVhc3VyZSBxdWV1ZSBsZXZlbCBiYXNlZCBvbiB0aGUgZGlmZiBiZXR3ZWVuIGhlYWQgYW5kIHRhaWwgdGltZXN0YW1wcyBldmVuIHdoZW4gcHVzaGluZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGFwcGx5X2J1ZmZlciksCi0JICAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSk6Ci0JICBNZWFzdXJlIHF1ZXVlIGxldmVsIGJhc2VkIG9uIHRoZSBkaWZmIGJldHdlZW4gaGVhZCBhbmQgdGFpbCB0aW1lc3RhbXBzCi0JICBldmVuIHdoZW4gcHVzaGluZyB0aGUgZmlyc3QgYnVmZmVyLgotCi0yMDA3LTA5LTE0IDIzOjA2OjMxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNpbmtzIHRoYXQgZG9uJ3QgcHJlcm9sbCBjYW4gYWx3YXlzIGJlIHF1ZXJpZWQgZm9yIHRoZSBsYXRlbmN5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9mbHVzaCksCi0JICAoZ3N0X2Jhc2Vfc2lua19ldmVudCksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBTaW5rcyB0aGF0IGRvbid0IHByZXJvbGwgY2FuIGFsd2F5cyBiZSBxdWVyaWVkIGZvciB0aGUgbGF0ZW5jeS4KLQkgIERvbid0IHBvc3QgQVNZTkMgc3RhcnQgd2hlbiB3ZSBhcmUgbm90IGFzeW5jLgotCi0yMDA3LTA5LTE0IDIwOjI0OjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLio6IFdoZW4gZG93bnN0cmVhbSByZXR1cm5zIFVORVhQRUNURUQgZnJvbSBwdXNoaW5nIGEgYnVmZmVyLCBkb24ndCB0cnkgdG8gcHVzaCBtb3JlIGJ1ZmZlcnMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbG9ja2VkX2VucXVldWUpLAotCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pLAotCSAgKGdzdF9xdWV1ZV9wdXNoX29uZSksIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSksCi0JICAoZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCksIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JICBXaGVuIGRvd25zdHJlYW0gcmV0dXJucyBVTkVYUEVDVEVEIGZyb20gcHVzaGluZyBhIGJ1ZmZlciwgZG9uJ3QgdHJ5IHRvCi0JICBwdXNoIG1vcmUgYnVmZmVycyBidXQgYWxsb3cgcHVzaGluZyBvZiBFT1MgYW5kIE5FV1NFR01FTlQuCi0JICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8gaGVyZSBhbmQgdGhlcmUuIEZpeGVzICM0NzY1MTQuCi0KLTIwMDctMDktMTQgMTU6NTI6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogTGF0ZW5jeSBxdWVyeSBpcyBhbGxvd2VkIGFmdGVyIHdlIGFyZSBwcmVyb2xsZWQuIEludHJvZHVjZSBhIG5ldyBmbGFnIGZvciB0aGlzIGFuZCBzdG9wIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoKSwgKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKLQkgIChnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbCksIChnc3RfYmFzZV9zaW5rX25lZWRzX3ByZXJvbGwpLAotCSAgKGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nKSwgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIExhdGVuY3kgcXVlcnkgaXMgYWxsb3dlZCBhZnRlciB3ZSBhcmUgcHJlcm9sbGVkLiBJbnRyb2R1Y2UgYSBuZXcgZmxhZwotCSAgZm9yIHRoaXMgYW5kIHN0b3AgYWJ1c2luZyBvdGhlciB2YXJpYWJsZXMuCi0KLTIwMDctMDktMTMgMjM6NTM6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBQdXNoIE9PQiBldmVudHMgZG93bnN0cmVhbSB3aGVuIHdlIGdldCB0aGVtIGluIHNlbmRfZXZlbnQuIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0by4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3NlbmRfZXZlbnQpOgotCSAgUHVzaCBPT0IgZXZlbnRzIGRvd25zdHJlYW0gd2hlbiB3ZSBnZXQgdGhlbSBpbiBzZW5kX2V2ZW50LiBUaGlzIGFsbG93cwotCSAgdGhlIGFwcGxpY2F0aW9uIHRvIGluc2VydCBldmVudHMgaW4gdGhlIHBpcGVsaW5lLgotCSAgQWRkIHNvbWUgbW9yZSBjb21tZW50cy4KLQotMjAwNy0wOS0xMyAyMToyNzozMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogTW92ZSBsYXRlbmN5IHF1ZXJ5IGZyb20gR3N0UGlwZWxpbmUgdG8gR3N0QmluIHNvIHRoYXQgd2UgY2FuIGFsc28gdXNlIGl0IHdoZW4gYXN5bmMtaGFuZGxpbmcgaXMgZW5hYmxlZCBvbiBiaW5zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChjbGVhcl9xdWV1ZSksCi0JICAoZG9fYmluX2xhdGVuY3kpLCAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6Ci0JICBNb3ZlIGxhdGVuY3kgcXVlcnkgZnJvbSBHc3RQaXBlbGluZSB0byBHc3RCaW4gc28gdGhhdCB3ZSBjYW4gYWxzbwotCSAgdXNlIGl0IHdoZW4gYXN5bmMtaGFuZGxpbmcgaXMgZW5hYmxlZCBvbiBiaW5zLgotCi0yMDA3LTA5LTEzIDIxOjE5OjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogVXBkYXRlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBVcGRhdGUgZG9jcy4KLQkgIENsZWFuIHVwIHRoZSB0aW1lc3RhbXBpbmcgYW5kIHN5bmNpbmcgY29kZSBmb3IgcHNldWRvIGxpdmUgc291cmNlcy4KLQotMjAwNy0wOS0xMyAxOToyNzo1MyArMDAwMCAgU3RldmUgRmluayA8c3BoaW5rQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDogTWVudGlvbiBsZXNzIC1SIHN3aXRjaCBpbiB0aGUgc2VjdGlvbiBhYm91dCBkZWJ1ZyBvdXRwdXQgKCM0NzQwNTUpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU3RldmUgRmluayAgPHNwaGluayBnbWFpbCBjb20+Ci0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWw6Ci0JICBNZW50aW9uIGxlc3MgLVIgc3dpdGNoIGluIHRoZSBzZWN0aW9uIGFib3V0IGRlYnVnIG91dHB1dCAoIzQ3NDA1NSkuCi0KLTIwMDctMDktMTMgMTc6MTU6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogUXVldWUgY2FuIGxhdGVuY3kgdG8gdGhlIHBpcGVsaW5lIHVwIHRvIHRoZSBjb25maWd1cmVkIG1heCBzaXplIGluIHRpbWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpOgotCSAgUXVldWUgY2FuIGxhdGVuY3kgdG8gdGhlIHBpcGVsaW5lIHVwIHRvIHRoZSBjb25maWd1cmVkIG1heCBzaXplIGluIHRpbWUuCi0JICBSZXBvcnQgdGhpcyBmYWN0IGluIHRoZSBsYXRlbmN5IHF1ZXJ5LgotCi0yMDA3LTA5LTEzIDA5OjA4OjIzICswMDAwICBTZWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci86IFVzZSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlKCkgd2hlbiBjb252ZXJ0aW5nIGZyb20gYSB1aW50NjQgb3IKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbiBhdCBtb3V0dGUgZG90IG5ldD4KLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSAgVXNlIGdzdF9ndWludDY0X3RvX2dkb3VibGUoKSB3aGVuIGNvbnZlcnRpbmcgZnJvbSBhIHVpbnQ2NCBvcgotCSAgR3N0Q2xvY2tUaW1lIHRvIGRvdWJsZSB0byBmaXggdGhlIGJ1aWxkIG9uIHdpbjMyLiBGaXhlcyAjNDc0MzcxLgotCi0yMDA3LTA5LTEzIDA4OjQyOjU1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RidWZmZXIuYzogSW1wbGVtZW50IHBvaXNvbmluZyBmb3IgR3N0QnVmZmVyIGlmIC0tZW5hYmxlLXBvaXNvbmluZyBpcyBzcGVjaWZpZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9maW5hbGl6ZSk6Ci0JICBJbXBsZW1lbnQgcG9pc29uaW5nIGZvciBHc3RCdWZmZXIgaWYgLS1lbmFibGUtcG9pc29uaW5nIGlzIHNwZWNpZmllZC4KLQkgIFdoZW4gZmluYWxpemluZyBhIGJ1ZmZlciB0aGUgY29tcGxldGUgc3RydWN0IGlzIGZpbGxlZCB3aXRoIDB4ZmYsCi0JICB0aHVzIG1ha2luZyBhIHVzZSBvZiB0aGUgYnVmZmVyIGFmdGVyIHRoZSBmaW5hbCB1bnJlZiBpbXBvc3NpYmxlLgotCi0yMDA3LTA5LTEzIDA4OjM2OjM3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiBVc2UgZmFpbF91bmxlc3NfZXF1YWxzX2ludChhLCBiKSBpbnN0ZWFkIG9mIGZhaWxfdW5sZXNzX2VxdWFscyAoYSA9PSBiKSB0byBnZXQgYmV0dGVyIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVXNlIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQoYSwgYikgaW5zdGVhZCBvZgotCSAgZmFpbF91bmxlc3NfZXF1YWxzIChhID09IGIpIHRvIGdldCBiZXR0ZXIgb3V0cHV0IG9uIGZhaWx1cmVzLgotCi0yMDA3LTA5LTEyIDE2OjM1OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmM6IEFsc28gY2hlY2sgZm9yIHRoZSBvdGhlciBmaWxlIFVSSSB2YXJpYW50IG9uIHdpbjMyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1cmkuYzoKLQkgIEFsc28gY2hlY2sgZm9yIHRoZSBvdGhlciBmaWxlIFVSSSB2YXJpYW50IG9uIHdpbjMyLgotCi0yMDA3LTA5LTEyIDEyOjM2OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dXJpLmM6IElmIHRoZXJlJ3Mgbm8gaG9zdG5hbWUsIHdlIHdhbnQgdG8gcmV0dXJuICdjOi9mb28vYmFyLnR4dCcgYW5kIG5vdCAnL2M6L2Zvby9iYXIudHh0JyBvbiBXaW5kb3dzLiBGaXhlcyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXJpLmM6IChnc3RfdXJpX2dldF9sb2NhdGlvbik6Ci0JICBJZiB0aGVyZSdzIG5vIGhvc3RuYW1lLCB3ZSB3YW50IHRvIHJldHVybiAnYzovZm9vL2Jhci50eHQnCi0JICBhbmQgbm90ICcvYzovZm9vL2Jhci50eHQnIG9uIFdpbmRvd3MuIEZpeGVzICM0Njk0MDIuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1cmkuYzoKLQkgIFVuaXQgdGVzdCBmb3IgdGhlIGFib3ZlIGFuZCBhIGZldyBtb3JlIHRoaW5ncy4KLQotMjAwNy0wOS0xMSAyMzoyNzo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQ6IEFkZCBkb2NzIG9uIGhvdyBsaXZlIHNvdXJjZXMgc2hvdWxkIHRpbWVzdGFtcC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWxpdmUtc291cmNlLnR4dDoKLQkgIEFkZCBkb2NzIG9uIGhvdyBsaXZlIHNvdXJjZXMgc2hvdWxkIHRpbWVzdGFtcC4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZG9fc3luYyk6Ci0JICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCi0JICBGb3Igc3ViY2xhc3NlcyB0aGF0IGFyZSBsaXZlIGFuZCBsaWtlIHRvIHN5bmMsIGFkZCBhZGl0aW9uYWwgc3RhcnR1cAotCSAgbGF0ZW5jeSB0byBzeW5jIHRpbWUgYW5kIHRpbWVzdGFtcHMgc28gdGhhdCB3ZSB0aW1zdGFtcCBhY2NvcmRpbmcgdG8gdGhlCi0JICBkZXNpZ24gZG9jLgotCi0yMDA3LTA5LTExIDE4OjU5OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YnVmZmVyLmM6IEFsc28gZG8gYSBnX3R5cGVfY2xhc3NfcmVmKCkgZm9yIHRoZSBzdWJidWZmZXIgdHlwZSBpbiB0aGUgaW5pdCBmdW5jdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBBbHNvIGRvIGEgZ190eXBlX2NsYXNzX3JlZigpIGZvciB0aGUgc3ViYnVmZmVyIHR5cGUgaW4KLQkgIHRoZSBpbml0IGZ1bmN0aW9uLgotCi0yMDA3LTA5LTExIDE1OjU1OjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgZnVuY3Rpb24gdG8gcGVyZm9ybSBhIHF1ZXJ5IG9uIHRoZSBwZWVyIG9mIGEgcGFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfcGVlcl9xdWVyeSk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIEFkZCBmdW5jdGlvbiB0byBwZXJmb3JtIGEgcXVlcnkgb24gdGhlIHBlZXIgb2YgYSBwYWQuCi0JICBBUEk6IGdzdF9wYWRfcGVlcl9xdWVyeSgpCi0KLTIwMDctMDktMTEgMTM6NDM6NTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IENsZWFudXAgdGhlIHRlc3QgYSBsaXR0bGUgKHVzZSBnc3QtbG9nZ2luZyBhbmQgbm90IGdfbWVzc2FnZSkuIEltcHJvdmUgdGVzdCB0byBjaGVjLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JICBDbGVhbnVwIHRoZSB0ZXN0IGEgbGl0dGxlICh1c2UgZ3N0LWxvZ2dpbmcgYW5kIG5vdCBnX21lc3NhZ2UpLiBJbXByb3ZlCi0JICB0ZXN0IHRvIGNoZWNrIGlmIGEgd2FpdCByZWFjaGVkIHRoZSB0YXJnZXQuCi0KLTIwMDctMDktMTEgMTA6MzM6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgQVBJIHRvIGRvY3MgYW5kIGZpeCB0aGUgYnVpbGQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBuZXcgQVBJIHRvIGRvY3MgYW5kIGZpeCB0aGUgYnVpbGQuCi0KLTIwMDctMDktMTAgMTY6NTA6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy4qOiBBZGQgcHJvcGVydHkgdG8gbWFrZSB0aGUgYmFzZXNyYyB0aW1lc3RhbXAgYnVmZmVycyBiYXNlZCBvbiB0aGUgY3VycmVudCBydW5uaW5nIHRpbWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2luaXQpLCAoZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXApLAotCSAgKGdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wKSwgKGdzdF9iYXNlX3NyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3NyY19nZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIEFkZCBwcm9wZXJ0eSB0byBtYWtlIHRoZSBiYXNlc3JjIHRpbWVzdGFtcCBidWZmZXJzIGJhc2VkIG9uIHRoZSBjdXJyZW50Ci0JICBydW5uaW5nIHRpbWUuCi0JICBBUEk6IEdzdEJhc2VTcmM6OmRvLXRpbWVzdGFtcAotCSAgQVBJOiBnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCgpCi0JICBBUEk6IGdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wKCkKLQotMjAwNy0wOS0wOCAyMDoyNTo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vcmVsZWFzZTogUmVhbGx5IG1ha2Ugc3VyZSB0cmFuc2xhdGlvbnMgYXJlIHVwLXRvLWRhdGUgYmVmb3JlIGEgcmVsZWFzZSAoIzQ2NTAxMCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIFJlYWxseSBtYWtlIHN1cmUgdHJhbnNsYXRpb25zIGFyZSB1cC10by1kYXRlIGJlZm9yZQotCSAgYSByZWxlYXNlICgjNDY1MDEwKS4KLQotMjAwNy0wOS0wNyAxNDo0Njo1MiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIGFkZCBsYXRlc3QgaGVhZGVyIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBsYXRlc3QgaGVhZGVyIGZpbGVzCi0KLTIwMDctMDktMDcgMDQ6NTA6MjMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IEFsd2F5cyBkZXN0cm95IHRoZSB0aW1lciwgYWxzbyBpbiBlcnJvciBjYXNlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICBBbHdheXMgZGVzdHJveSB0aGUgdGltZXIsIGFsc28gaW4gZXJyb3IgY2FzZXMuCi0KLTIwMDctMDktMDUgMjI6Mjk6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvbWFudWFsL2hpZ2hsZXZlbC14bWwueG1sOiBGaXggWE1MIGV4YW1wbGUgY29kZS4gRml4ZXMgIzQ3MjcxNC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwteG1sLnhtbDoKLQkgIEZpeCBYTUwgZXhhbXBsZSBjb2RlLiBGaXhlcyAjNDcyNzE0LgotCi0yMDA3LTA5LTA1IDIyOjEyOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFByb3RlY3QgZW9zIGFuZCBoYXZlX3ByZXJvbGwgd2l0aCB0aGUgT0JKRUNUIGxvY2sgc28gd2UgZG9uJ3QgbmVlZCB0byB0YWtlIHRoZSBQUkVST0xMIGwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLAotCSAgKGdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsKSwgKGdzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSk6Ci0JICBQcm90ZWN0IGVvcyBhbmQgaGF2ZV9wcmVyb2xsIHdpdGggdGhlIE9CSkVDVCBsb2NrIHNvIHdlIGRvbid0IG5lZWQgdG8KLQkgIHRha2UgdGhlIFBSRVJPTEwgbG9jayB3aGVuIHF1ZXJ5aW5nIHRoZSBsYXRlbmN5LiBGaXhlcyAjNDczODQ2LgotCi0yMDA3LTA5LTA1IDEzOjI0OjMxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IEdpdmUgc29tZSBsb2ctbWVzc2FnZXMgYSBjYXRlZ29yeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgR2l2ZSBzb21lIGxvZy1tZXNzYWdlcyBhIGNhdGVnb3J5LgotCi0yMDA3LTA5LTA1IDAxOjAwOjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0c3RydWN0dXJlLmM6IEZpeCBmcmFjdGlvbiBsaXN0IGZpeGF0aW9uIGNvZGUuIFRha2UgdGhlIGZyYWN0aW9uIHdpdGggdGhlIHNtYWxsZXN0IGRpZmZlcmVuY2Ugd2l0aCB0aGUgdGFyZ2V0IGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbik6Ci0JICBGaXggZnJhY3Rpb24gbGlzdCBmaXhhdGlvbiBjb2RlLiBUYWtlIHRoZSBmcmFjdGlvbiB3aXRoIHRoZSBzbWFsbGVzdAotCSAgZGlmZmVyZW5jZSB3aXRoIHRoZSB0YXJnZXQgaW5zdGVhZCBvZiB0aGUgZmlyc3Qgb25lIGluIHRoZSBsaXN0LgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X3N0cnVjdHVyZV9zdWl0ZSk6Ci0JICBBZGRlZCB0ZXN0IHRvIHZlcmlmeSBjb3JyZWN0IGZyYWN0aW9uIGxpc3QgZml4YXRpb24gYmVoYXZpb3VyLgotCi0yMDA3LTA5LTAyIDIwOjMwOjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogRXhwb3J0IGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCB0b28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBFeHBvcnQgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIHRvby4KLQotMjAwNy0wOC0zMCAxNzo1MDo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBtZXRob2RzIHRvIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBuZXcgbWV0aG9kcyB0byBkb2NzLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfaW5pdCksIChnc3RfYmFzZV9zaW5rX3NldF90c19vZmZzZXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldCksIChnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgQWRkIHRzLW9mZnNldCBwcm9wZXJ0eSB0byBmaW5lLXR1bmUgdGhlIHN5bmNocm9uaXNhdGlvbi4KLQkgIEFQSTogR3N0QmFzZVNpbms6OnRzLW9mZnNldCBwcm9wZXJ0eQotCSAgQVBJOiBnc3RfYmFzZV9zaW5rX3NldF90c19vZmZzZXQoKQotCSAgQVBJOiBnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQoKQotCi0yMDA3LTA4LTI5IDIwOjU3OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLio6IEFkZCBhc3luYyBwcm9wZXJ0eSB0byBpbnN0cnVjdCB0aGUgc2luayBuZXZlciB0byBpbmZvcm0gdGhlIHBhcmVudCBhYm91dAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19pbml0KSwgKGdzdF9iYXNlX3Npbmtfc2V0X3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzKSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3MpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQpLAotCSAgKGdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZCksCi0JICAoZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkKSwgKGdzdF9iYXNlX3Npbmtfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEFkZCBhc3luYyBwcm9wZXJ0eSB0byBpbnN0cnVjdCB0aGUgc2luayBuZXZlciB0byBpbmZvcm0gdGhlIHBhcmVudCBhYm91dAotCSAgQVNZTkMgc3RhdGUgY2hhbmdlcywgdXBkYXRlIGRvY3MuCi0JICBDaGVjayBhcmd1bWVudCB3aXRoIGdfcmV0dXJuXyogZm9yIHRoZSBwdWJsaWMgZnVuY3Rpb25zLgotCSAgQVBJOiBHc3RCYXNlU2luazo6YXN5bmMgcHJvcGVydHkKLQkgIEFQSTogZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZCgpCi0JICBBUEk6IGdzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZCgpCi0KLTIwMDctMDgtMjggMTU6MDI6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSW1wcm92ZSBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19sb29wKToKLQkgIEltcHJvdmUgZGVidWdnaW5nLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5KSwKLQkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSksIChnc3RfYmFzZV9zcmNfd2FpdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBSZWFycmFuZ2Ugc29tZSBjb2RlIHNvIHRoYXQgd2UgY2FuIGFkZCBzdXBwb3J0IGZvciBtZWFzdXJpbmcgdGhlCi0JICBzdGFydHVwIGxhdGVuY3kuCi0KLTIwMDctMDgtMjcgMjA6MDA6MzkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vZW5zb25pYy9keW5saW5rLnR4dDogTW9yZSB0aG91Z2hzIG9uIHRoaXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vZW5zb25pYy9keW5saW5rLnR4dDoKLQkgIE1vcmUgdGhvdWdocyBvbiB0aGlzLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIEFkZCBidWd6aWxsYSB0aWNrZXQgbnVtYmVyIHRvIEZJWE1FIGNvbW1lbnQuCi0KLTIwMDctMDgtMjYgMTg6MzA6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBNQUlOVEFJTkVSUzoKLQkgIHJlbW92ZSB0ZW1wIGZpbGVzIGFnYWluCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSB0ZW1wIGZpbGVzIGFnYWluCi0KLTIwMDctMDgtMjYgMTY6NDI6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBNQUlOVEFJTkVSUzoKLQkgIHRlc3QgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRlc3QgY29tbWl0Ci0KLTIwMDctMDgtMjYgMTU6NTg6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBBVVRIT1JTOgotCSogTUFJTlRBSU5FUlM6Ci0JICB0ZXN0IGNvbW1pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0ZXN0IGNvbW1pdAotCi0yMDA3LTA4LTI0IDIxOjUzOjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IFVwZGF0ZSBzb21lIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6Ci0JICBVcGRhdGUgc29tZSBkb2NzLgotCi0yMDA3LTA4LTI0IDE2OjM5OjA2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L01ha2VmaWxlLmFtOiBSZXZlcnQgcGF0Y2ggd2hpY2ggdXNlcyAkKGdzdF9oZWFkZXJzKSBpbnN0ZWFkIG9mICReIGJlY2F1c2UgaXQgYnJlYWtzIG1ha2UgZGlzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBSZXZlcnQgcGF0Y2ggd2hpY2ggdXNlcyAkKGdzdF9oZWFkZXJzKSBpbnN0ZWFkIG9mICReIGJlY2F1c2UgaXQKLQkgIGJyZWFrcyBtYWtlIGRpc3QuCi0KLTIwMDctMDgtMjQgMTQ6NTU6NDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IEZpeCBsZWFrcyBpbiB0aGUgbmV3IHVuaXQgdGVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBGaXggbGVha3MgaW4gdGhlIG5ldyB1bml0IHRlc3QuCi0KLTIwMDctMDgtMjMgMjA6NDE6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogRG9uJ3QgdXNlIEdTVF9JTkZPIGJlZm9yZSB0aGUgZGVidWcgc3lzdGVtIGlzIGFjdHVhbGx5IGluaXRpYWxpc2VkIChzaG91bGRuJ3QgZG8gYW55IGhhcm0sIGJ1dCB3b24ndCBwcmludC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIERvbid0IHVzZSBHU1RfSU5GTyBiZWZvcmUgdGhlIGRlYnVnIHN5c3RlbSBpcyBhY3R1YWxseSBpbml0aWFsaXNlZAotCSAgKHNob3VsZG4ndCBkbyBhbnkgaGFybSwgYnV0IHdvbid0IHByaW50IGFueXRoaW5nIGVpdGhlciwgc28gd2UgY2FuCi0JICBqdXN0IGFzIHdlbGwgcmVtb3ZlIGl0KS4KLQkgICogZ3N0L2dzdGluZm8uaDoKLQkgIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCgpLCB3aGljaCBpcyBvdXIgaW5saW5lIGhlbHBlciBmdW5jdGlvbiBmb3IKLQkgIGNvbXBpbGVycyB0aGF0IGRvbid0IHN1cHBvcnQgdmFyaWFkaWMgbWFjcm9zIChzdWNoIGFzIE1TVkMpLCBzaG91bGQKLQkgIGNoZWNrIGZvciBkZWJ1Z19sZXZlbCA8PSBfX2dzdF9kZWJ1Z19taW4gYXMgd2VsbCwgc2luY2UgdGhhdCdzIHRoZQotCSAgZnVuY3Rpb24gY2FsbGVkIGZyb20gYWxsIHRoZSBsZXZlbC1zcGVjaWZpYyBHU1RfQ0FUXypfTE9HX09CSkVDVCgpCi0JICBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucy4gU2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UgYSBiaXQsIGJ1dCBhbHNvCi0JICBtYWtlcyBzdXJlIHVzZXMgb2YgR1NUX0lORk8gZXQuYWwgYXJlIGlnbm9yZWQgaWYgdGhlIGRlYnVnZ2luZwotCSAgc3lzdGVtIGlzbid0IGluaXRpYWxpc2VkIHlldCAoaW5zdGVhZCBvZiBwcmludGluZyBhbiBhc3NlcnRpb24KLQkgIGZhaWx1cmUpLgotCi0yMDA3LTA4LTIzIDA3OjEwOjMzICswMDAwICBEYXZpZCBOZcSNYXMgPHlldGlAcGh5c2ljcy5tdW5pLmN6PgotCi0JICBnc3QvTWFrZWZpbGUuYW06IFJlcGxhY2Ugc29tZSBub24gcG9ydGFibGUgbWFrZWZpbGUgY29uc3RydWN0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6IERhdmlkIE5lxI1hcyA8eWV0aUBwaHlzaWNzLm11bmkuY3o+Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgIFJlcGxhY2Ugc29tZSBub24gcG9ydGFibGUgbWFrZWZpbGUgY29uc3RydWN0cy4KLQotMjAwNy0wOC0yMSAxNDoxMDowOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjb21tb24vZ3RrLWRvYy1wbHVnaW5zLm1hazogR3JycnJyLiBEb24ndCByZW1vdmUgdGhlIHR5cGVzIGZpbGUgb24gbWFrZSBjbGVhbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb21tb24vZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkgIEdycnJyci4gRG9uJ3QgcmVtb3ZlIHRoZSB0eXBlcyBmaWxlIG9uIG1ha2UgY2xlYW4uCi0KLTIwMDctMDgtMjAgMTc6NTE6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbjogQWRkIGNvbG9yc3BhY2UgdG8gZXhhbXBsZSBwaXBlbGluZS4gRml4ZXMgIzQ1ODI3NC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBBZGQgY29sb3JzcGFjZSB0byBleGFtcGxlIHBpcGVsaW5lLiBGaXhlcyAjNDU4Mjc0LgotCi0yMDA3LTA4LTIwIDEyOjMxOjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3JhbmRvbS9yZWxlYXNlOiBUaGUgcmVsZWFzZSBtYW5hZ2VyIHNob3VsZCBydW4gJ21ha2UgZG93bmxvYWQtcG8nIGJlZm9yZSBtYWtpbmcgYSByZWxlYXNlIHRvIG1ha2Ugc3VyZSB0cmFuc2xhdGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgotCSAgVGhlIHJlbGVhc2UgbWFuYWdlciBzaG91bGQgcnVuICdtYWtlIGRvd25sb2FkLXBvJyBiZWZvcmUgbWFraW5nIGEKLQkgIHJlbGVhc2UgdG8gbWFrZSBzdXJlIHRyYW5zbGF0aW9ucyBhcmUgdXAtdG8tZGF0ZS4KLQkgICogcG8vTElOR1VBUzoKLQkgICogcG8vYmUucG86Ci0JICAqIHBvL3BsLnBvOgotCSAgKiBwby9ydy5wbzoKLQkgIEFkZCBzb21lIG5ldyB0cmFuc2xhdGlvbnMuCi0KLTIwMDctMDgtMTcgMTM6NDg6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guYzogRG9uwrR0IHRyeSB0byBkbyBhbnkgc3RhdGUgbWFuYWdlbWVudCB3aGVuIGEgbGl2ZSBwaXBlbGluZSBwb3N0cyBidWZmZXJpbmcgbWVzc2FnZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCksIChtYWluKToKLQkgIERvbsK0dCB0cnkgdG8gZG8gYW55IHN0YXRlIG1hbmFnZW1lbnQgd2hlbiBhIGxpdmUgcGlwZWxpbmUgcG9zdHMKLQkgIGJ1ZmZlcmluZyBtZXNzYWdlcy4KLQkgIEFsc28gbWFrZSB0aGUgYnVmZmVyaW5nIHN0cmluZyB0cmFuc2xhdGFibGUuCi0KLTIwMDctMDgtMTYgMTE6MDQ6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogSW1wcm92ZSBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoaXNfZW9zKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAotCSAgKGJpbl9oYW5kbGVfYXN5bmNfc3RhcnQpLCAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKLQkgIEltcHJvdmUgZGVidWdnaW5nLgotCSAgV2hlbiBhZGRpbmcgZWxlbWVudHMsIGluc2VydCBtZXNzYWdlcyBpbnRvIHRoZSBidXMgb2YgdGhlIG5ld2x5IGFkZGVkCi0JICBlbGVtZW50IGFuZCBtYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdGhlIHNvdXJjZSBvZiB0aGUgbWVzc2FnZS4gVGhpcwotCSAgYWxsb3dzIHRoZSBwYXJlbnQgYmluIHRvIGludGVyY2VwdCB0aGUgbWVzc2FnZSBhbmQgZG8gdGhlCi0JICByaWdodCB0aGluZy4gSXQgYWxzbyBhdm9pZHMgdXMgcG9zdGluZyBBU1lOQ19TVEFSVCBhbmQgQ0xPQ0tfUFJPVklERQotCSAgbWVzc2FnZXMgdG8gdGhlIGFwcCAod2hpY2ggaXMgbm90IGFsbG93ZWQpLgotCSAgVXBkYXRlIHNvbWUgZG9jcy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBGaXggdGVzdHN1aXRlIHNvIHRoYXQgaXMgZG9lcyBub3Qgd29yayBhcm91bmQgbWVzc2FnZXMgdGhhdCBzaG91bGQgbm90Ci0JICBoYXZlIGJlZW4gcG9zdGVkIGluIHRoZSBmaXJzdCBwbGFjZS4KLQotMjAwNy0wOC0xNiAxMDoyNzoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBGaXggYW5ub3lpbmcgYnVnIGluIHRoZSBzb3J0ZWQgaXRlcmF0b3Igd2hlcmUgYSBzaW5rIHRoYXQgaXMgbm90IHJlYWxseSBhIHNpbmsgKHdoZW4gaXQgaGFzIGRvd25zdHJlYW0gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoYWRkX3RvX3F1ZXVlKSwgKHJlbW92ZV9mcm9tX3F1ZXVlKSwgKGNsZWFyX3F1ZXVlKSwKLQkgICh1cGRhdGVfZGVncmVlKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KToKLQkgIEZpeCBhbm5veWluZyBidWcgaW4gdGhlIHNvcnRlZCBpdGVyYXRvciB3aGVyZSBhIHNpbmsgdGhhdCBpcyBub3QgcmVhbGx5Ci0JICBhIHNpbmsgKHdoZW4gaXQgaGFzIGRvd25zdHJlYW0gbGlua3MpIHNjcmV3ZWQgdXAgdGhlIGl0ZXJhdG9yLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfYmluX3N1aXRlKToKLQkgIFVuaXQgdGVzdCB0byB2ZXJpZnkgdGhlIGZpeC4KLQotMjAwNy0wOC0xNiAxMDowNzo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdG1lc3NhZ2UuaDogQWRkIHNvbWUgbW9yZSBkb2NzIGZvciB0aGUgbWVzc2FnZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIEFkZCBzb21lIG1vcmUgZG9jcyBmb3IgdGhlIG1lc3NhZ2VzLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSk6Ci0JICBBZGQgc29tZSBtb3JlIGRlYnVnZ2luZy4KLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6Ci0JICBXaGVuIGludGVycnVwdGluZywgZG9uJ3QgdHJ5IHRvIHNldCBwaXBlbGluZSB0byBQQVVTRUQgdHdpY2UuCi0KLTIwMDctMDgtMTQgMTQ6MTA6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogTW92ZSBBU1lOQ19TVEFSVCBtZXNzYWdlIHBvc3RpbmcgdG8gd2hlcmUgaXQgYmVsb25ncywgc2ltaWxhciB0byBhc3luY19kb25lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSksCi0JICAoYmluX2hhbmRsZV9hc3luY19zdGFydCksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgTW92ZSBBU1lOQ19TVEFSVCBtZXNzYWdlIHBvc3RpbmcgdG8gd2hlcmUgaXQgYmVsb25ncywgc2ltaWxhciB0bwotCSAgYXN5bmNfZG9uZS4KLQkgIERvbid0IHBvc3QgQVNZTkNfU1RBUlQgd2hlbiB3ZSBhcmUgaW4gZXJyb3IuCi0JICBQb3N0IEFTWU5DX1NUQVJUIHdoZW4gd2UgYWRkZWQgYW4gYXN5bmMgZWxlbWVudCB0byBhIGJpbi4KLQotMjAwNy0wOC0xNCAxMzo0Mzo0NCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmRleC5jOiBGaXggaW5kZXggZW50cnkgZ2VuZXJhdGlvbiBmcm9tIHZhcmdzLiBGaXhlcyAjNDY2NTk1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTA4LTE0ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbik6IEZpeCBpbmRleCBlbnRyeQotCSAgZ2VuZXJhdGlvbiBmcm9tIHZhcmdzLiBGaXhlcyAjNDY2NTk1LgotCi0yMDA3LTA4LTE0IDEzOjM3OjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IEFsd2F5cyBjaGFuZ2UgdGhlIHN0YXRlIG9mIGEgTk9fUFJFUk9MTCBlbGVtZW50IGV2ZW4gaWYgaXQgaGFzIEFTWU5DIGVsZW1lbnRzIGluc2lkZSAoaW4gY2FzZSBvZiBhIGJpbikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSk6Ci0JICBBbHdheXMgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhIE5PX1BSRVJPTEwgZWxlbWVudCBldmVuIGlmIGl0IGhhcyBBU1lOQwotCSAgZWxlbWVudHMgaW5zaWRlIChpbiBjYXNlIG9mIGEgYmluKS4KLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3NpbmtzX3N1aXRlKToKLQkgIFVuaXQgdGVzdCBmb3IgdGhpcyBjYXNlLgotCi0yMDA3LTA4LTEzIDEzOjMzOjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEFkZCBtb3JlIG1pc3NpbmcgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5jOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5oOgotCSAgQWRkIG1vcmUgbWlzc2luZyBkb2NzLgotCi0yMDA3LTA4LTEyIDE2OjQ0OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0c3RydWN0dXJlLmM6IEFkZCBTaW5jZSB0YWcgdG8gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBBZGQgU2luY2UgdGFnIHRvIGRvY3MuCi0KLTIwMDctMDgtMTIgMTY6NDA6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZCBmdW5jdGlvbiB0byBnZXQgdWludCBmcm9tIGEgc3RydWN0dXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQpOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JICBBZGQgZnVuY3Rpb24gdG8gZ2V0IHVpbnQgZnJvbSBhIHN0cnVjdHVyZS4KLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9nZXRfdWludCgpCi0KLTIwMDctMDgtMTIgMTY6Mzg6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjYXBzLmM6IEZpeCBwcm9wZXIgY2hlY2sgZm9yIHNpbXBsZSBjYXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCksCi0JICAoZ3N0X2NhcHNfaW50ZXJzZWN0KToKLQkgIEZpeCBwcm9wZXIgY2hlY2sgZm9yIHNpbXBsZSBjYXBzLgotCi0yMDA3LTA4LTEwIDE3OjM1OjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvOiBSZW1vdmUgY3J1ZnQgYW5kIGRvIHNvbWUgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgIFJlbW92ZSBjcnVmdCBhbmQgZG8gc29tZSBjbGVhbnVwcy4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkgIFByZXBhcmUgZm9yIGNvbW1pbmcgZ3RrZG9jIGZlYXR1cmVzIChyZWJhc2UgYWdhaW5zdCBvbmxpbmUgZG9jcykuCi0KLTIwMDctMDgtMTAgMTQ6NTI6NDEgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIGdzdF9yZWdpc3RyeV9hZGRfcGF0aCB0byBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBBZGQgZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoIHRvIGRvY3MuCi0JICBBbHNvIGZpeCBmb3JtYXR0aW5nIG9mIGFuIG9sZGVyIGNoYW5nZWxvZyBlbnRyeQotCi0yMDA3LTA4LTEwIDE0OjQwOjI2ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeS5oOiBBZGQgZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoLCB3aGljaCB3YXMgbWlzc2luZyBmcm9tIHRoaXMgaGVhZGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSAgQWRkIGdzdF9yZWdpc3RyeV9hZGRfcGF0aCwgd2hpY2ggd2FzIG1pc3NpbmcgZnJvbSB0aGlzIGhlYWRlci4KLQotMjAwNy0wOC0xMCAxMDozMDoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmM6IFByaW50ZiBmb3JtYXQgZml4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5jOgotCSAgUHJpbnRmIGZvcm1hdCBmaXguCi0KLTIwMDctMDgtMDkgMjE6NTA6MTkgKzAwMDAgIFBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRG9uJ3Qgc2VuZCBhbiBhc3luY19zdGFydCBtZXNzYWdlIGR1cmluZyBkb3dud2FyZHMgc3RhdGUgY2hhbmdlIGlmIHRhcmdldCBzdGF0ZSBpcyBsZXNzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIERvbid0IHNlbmQgYW4gYXN5bmNfc3RhcnQgbWVzc2FnZSBkdXJpbmcgZG93bndhcmRzIHN0YXRlIGNoYW5nZSBpZiB0YXJnZXQKLQkgIHN0YXRlIGlzIGxlc3MgdGhhbiBSRUFEWQotCi0yMDA3LTA4LTA5IDEwOjUwOjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vOiBBZGRlZCBIdW5nYXJpYW4gdHJhbnNsYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRyYW5zbGF0ZWQgYnk6IEdhYm9yIEtlbGVtZW4gPGtlbGVtZW5nQGdub21lLmh1PgotCSAgKiBwby9MSU5HVUFTOgotCSAgKiBwby9odS5wbzoKLQkgIEFkZGVkIEh1bmdhcmlhbiB0cmFuc2xhdGlvbi4KLQotMjAwNy0wOC0wOSAxMDo0ODo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBvLzogVXBkYXRlZCB0cmFuc2xhdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcG8vZmkucG86Ci0JICAqIHBvL2l0LnBvOgotCSAgKiBwby9ubC5wbzoKLQkgICogcG8vc3YucG86Ci0JICAqIHBvL3VrLnBvOgotCSAgVXBkYXRlZCB0cmFuc2xhdGlvbnMuCi0KLTIwMDctMDgtMDcgMTY6MDY6NDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOiBEaXN0IGdzdGxmb2NvbnRyb2xzb3VyY2Vwcml2YXRlLmgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSAgRGlzdCBnc3RsZm9jb250cm9sc291cmNlcHJpdmF0ZS5oCi0KLTIwMDctMDgtMDcgMTU6MTU6NDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6IERvbid0IHJlZ2lzdGVyIHRoZSBlbnVtIHR5cGUgZ3N0X2xmb193YXZlZm9ybV9nZXRfdHlwZSgpIGluIHRoZSAudHlwZXMgZmlsZSAtIG9ubHkgR08uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6Ci0JICBEb24ndCByZWdpc3RlciB0aGUgZW51bSB0eXBlIGdzdF9sZm9fd2F2ZWZvcm1fZ2V0X3R5cGUoKSBpbiB0aGUKLQkgIC50eXBlcyBmaWxlIC0gb25seSBHT2JqZWN0IGRlcml2ZWQgdHlwZXMgYmVsb25nLgotCi0yMDA3LTA4LTA3IDE0OjA0OjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLmg6IFJlbW92ZSBjb21tYSBmcm9tIGxhc3QgZWxlbWVudCBpbiBlbnVtIHRvIGF2b2lkIGNvbXBpbGUgZXJyb3JzIHdoZW4gdXNpbmcgLXBlbmRhbnRpYy4gRml4ZXMgIzQ2NDM2Ni4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IDxhcmVuZXZpZXIgYXQgZmRuIGRvdCBmcj4KLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgUmVtb3ZlIGNvbW1hIGZyb20gbGFzdCBlbGVtZW50IGluIGVudW0gdG8gYXZvaWQgY29tcGlsZSBlcnJvcnMgd2hlbgotCSAgdXNpbmcgLXBlbmRhbnRpYy4gRml4ZXMgIzQ2NDM2Ni4KLQotMjAwNy0wOC0wNyAwOTo1NjowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogQWRkIHNvbWUgbW9yZSBUT0RPIGl0ZW1zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgIEFkZCBzb21lIG1vcmUgVE9ETyBpdGVtcwotCSAgKiBnc3QvZ3N0YmluLmM6IChmaW5kX21lc3NhZ2UpLCAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6Ci0JICBJbXByb3ZlIGRlYnVnZ2luZy4KLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2ludGVyc2VjdCk6Ci0JICBPcHRpbWl6ZSB0cml2aWFsIGludGVyc2VjdGlvbiBjYXNlIGJldHdlZW4gaWRlbnRpY2FsIGNhcHMgcG9pbnRlcnMuCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpOgotCSAgKiBnc3QvZ3N0cGFkLmM6Ci0JICBGaXggc3BlbGxpbmcgYW5kIGdyYW1tYXIgbWlzdGFrZXMuCi0KLTIwMDctMDgtMDUgMTQ6NDg6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcG8vUE9URklMRVMuKjogVXBkYXRlIFBPVEZJTEVTLiBGaXhlcyAjNDYxNTk5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL1BPVEZJTEVTLmluOgotCSAgKiBwby9QT1RGSUxFUy5za2lwOgotCSAgVXBkYXRlIFBPVEZJTEVTLiBGaXhlcyAjNDYxNTk5LgotCi0yMDA3LTA4LTAzIDE5OjI1OjQ1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3QuYzogRml4IGNvbmZ1c2luZyB0eXBvIGluIGRlYnVnIG91dHB1dC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICBGaXggY29uZnVzaW5nIHR5cG8gaW4gZGVidWcgb3V0cHV0LgotCi0yMDA3LTA4LTAzIDE1OjQ3OjE3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBBUEk6IEFkZCBHc3RMRk9Db250cm9sU291cmNlLCBhIGNvbnRyb2wgc291cmNlIHRoYXQgZ2l2ZXMgdmFsdWVzIGZvciBzcGVjaWZpYyB0aW1lc3RhbXBzIGJhc2VkIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZpZXdlZCBieTogU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYzogKF9jYWxjdWxhdGVfcG9zKSwKLQkgIChnc3RfbGZvX3dhdmVmb3JtX2dldF90eXBlKSwgKGdzdF9sZm9fY29udHJvbF9zb3VyY2VfcmVzZXQpLAotCSAgKGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3KSwKLQkgIChnc3RfbGZvX2NvbnRyb2xfc291cmNlX3NldF93YXZlZm9ybSksCi0JICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9iaW5kKSwgKGdzdF9sZm9fY29udHJvbF9zb3VyY2VfaW5pdCksCi0JICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9maW5hbGl6ZSksCi0JICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9kaXNwb3NlKSwKLQkgIChnc3RfbGZvX2NvbnRyb2xfc291cmNlX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9sZm9fY29udHJvbF9zb3VyY2VfY2xhc3NfaW5pdCk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2Vwcml2YXRlLmg6Ci0JICBBUEk6IEFkZCBHc3RMRk9Db250cm9sU291cmNlLCBhIGNvbnRyb2wgc291cmNlIHRoYXQgZ2l2ZXMgdmFsdWVzCi0JICBmb3Igc3BlY2lmaWMgdGltZXN0YW1wcyBiYXNlZCBvbiBzZXZlcmFsIHBlcmlvZGljIHdhdmVmb3Jtcy4KLQkgIEZpeGVzICM0NTk3MTcuCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9jb250cm9sbGVyX3N1aXRlKToKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgotCSAgQWRkIGRvY3VtZW50YXRpb24gYW5kIHVuaXQgdGVzdHMgZm9yIEdzdExGT0NvbnRyb2xTb3VyY2UuCi0KLTIwMDctMDgtMDMgMTQ6NDA6MjIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJhY2sgdG8gQ1ZTCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBDVlMKLQotPT09IHJlbGVhc2UgMC4xMC4xNCA9PT0KLQotMjAwNy0wOC0wMyAxNDozOToxNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkqIGdzdHJlYW1lci5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjE0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbGVhc2UgMC4xMC4xNAotCi0yMDA3LTA4LTAzIDEzOjIwOjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwNy0wOC0wMiAxMTo1MToxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuKjogTWFrZSBzdHJpbmdzIHBhc3NlZCB0byBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUoKSBjb25zdGFudCwgYXMgdGhleSBzaG91bGQgYmUgKCM0NjI3NTIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgTWFrZSBzdHJpbmdzIHBhc3NlZCB0byBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUoKQotCSAgY29uc3RhbnQsIGFzIHRoZXkgc2hvdWxkIGJlICgjNDYyNzUyKS4KLQotMjAwNy0wOC0wMiAxMToxNTo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBEb24ndCBmb3JnZXQgYWJvdXQgdGhlIGZhY3QgdGhhdCBzb21lIGVsZW1lbnQgd2VudCBBU1lOQyBldmVuIGFmdGVyIGEgcmVzeW5jLiBUaGlzIG1ha2VzIHVzIHBvc3QgdGhlIEFTLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksCi0JICAoYmluX2hhbmRsZV9hc3luY19kb25lKSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6Ci0JICBEb24ndCBmb3JnZXQgYWJvdXQgdGhlIGZhY3QgdGhhdCBzb21lIGVsZW1lbnQgd2VudCBBU1lOQyBldmVuIGFmdGVyIGEKLQkgIHJlc3luYy4gVGhpcyBtYWtlcyB1cyBwb3N0IHRoZSBBU1lOQ19ET05FIG1lc3NhZ2UgY29ycmVjdGx5LgotCSAgRml4ZXMgIzQ2MjU1OC4KLQotMjAwNy0wNy0zMSAxMTo1MTozOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeS5jOiBXaGVuIHJlcGxhY2luZyBhbiBleGlzdGluZyBmZWF0dXJlIGluIHRoZSByZWdpc3RyeSwgbWFrZSBzdXJlIHRvIGNvbnRpbnVlIGhvbGRpbmcgYSByZWZlcmVuY2UgdW50aS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlKToKLQkgIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIGZlYXR1cmUgaW4gdGhlIHJlZ2lzdHJ5LCBtYWtlIHN1cmUgdG8KLQkgIGNvbnRpbnVlIGhvbGRpbmcgYSByZWZlcmVuY2UgdW50aWwgd2UndmUgcmVwbGFjZWQgdGhlIG5hbWUgc3RyaW5nCi0JICB3aXRoaW4gb3VyIGZlYXR1cmUgaGFzaCB0YWJsZS4gTWFrZSBzdXJlIHRvIHVzZSBnX2hhc2hfdGFibGVfcmVwbGFjZQotCSAgaW5zdGVhZCBvZiBnX2hhc2hfdGFibGVfaW5zZXJ0IHRvIGVuc3VyZSB0aGUgbmV3IG5hbWUgc3RyaW5nIGlzIHVzZWQKLQkgIGFzIGEga2V5IGluc3RlYWQgb2YgdGhlIG9sZCBvbmUgdGhhdCB3ZSdyZSBhYm91dCB0byBmcmVlLgotCSAgRml4ZXM6ICM0NjIwODUKLQotMjAwNy0wNy0zMSAxMDoxMDoyNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IFJldmVydCBwYXRjaCBmcm9tICM0NTk0NjYgdW50aWwgYWZ0ZXIgdGhlIHJlbGVhc2UgYW5kIHdlIGNhbiB3b3JrIG91dCBleGFjdGx5IHdoYXQgdGhlIHByb2JsZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfZmluYWxpemUpLAotCSAgKGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZSk6Ci0JICBSZXZlcnQgcGF0Y2ggZnJvbSAjNDU5NDY2IHVudGlsIGFmdGVyIHRoZSByZWxlYXNlIGFuZCB3ZSBjYW4gd29yawotCSAgb3V0IGV4YWN0bHkgd2hhdCB0aGUgcHJvYmxlbSBpcyAoaWYgYW55KS4KLQotMjAwNy0wNy0yNiAxNTo0ODo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQVBJOiBhZGQgR1NUX1RBR19MSUNFTlNFX1VSSSBhbmQgR1NUX1RBR19DT1BZUklHSFRfVVJJICgjNDUxOTM5KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgQVBJOiBhZGQgR1NUX1RBR19MSUNFTlNFX1VSSSBhbmQgR1NUX1RBR19DT1BZUklHSFRfVVJJICgjNDUxOTM5KS4KLQotMjAwNy0wNy0yNiAxNDowNToyMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvbGlicy9NYWtlZmlsZS5hbTogSW5jbHVkZSBvdXIgYnVpbGQtcHJlZml4IGxpYnMgYW5kIGluY2x1ZGVzIGJlZm9yZSB0aGUgZ2VuZXJpYyBvbmVzIHRvIGF2b2lkIGxpbmtpbmcgYWdhaW5zdCB0aC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgIEluY2x1ZGUgb3VyIGJ1aWxkLXByZWZpeCBsaWJzIGFuZCBpbmNsdWRlcyBiZWZvcmUgdGhlIGdlbmVyaWMgb25lcyB0bwotCSAgYXZvaWQgbGlua2luZyBhZ2FpbnN0IHRoZSBpbnN0YWxsZWQgbGlicyB3aGVuIHdlIHdhbnQgdGhlIGJ1aWxkLXRyZWUKLQkgIG9uZXMuCi0KLTIwMDctMDctMjYgMDg6NDY6NDYgKzAwMDAgIFN0ZXZlIEZpbmsgPHNwaGlua0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sOiBNZW50aW9uIHRoYXQgR1NUX1BMVUdJTl9QQVRIIG9yIC0tZ3N0LXBsdWdpbi1wYXRoIG1pZ2h0IGJlIG5lZWRlZCBpZiBwZW9wbGUgdHJ5IHRvIGJ1aS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU3RldmUgRmluayAgPHNwaGluayBnbWFpbCBjb20+Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sOgotCSAgTWVudGlvbiB0aGF0IEdTVF9QTFVHSU5fUEFUSCBvciAtLWdzdC1wbHVnaW4tcGF0aCBtaWdodCBiZSBuZWVkZWQKLQkgIGlmIHBlb3BsZSB0cnkgdG8gYnVpbGQgb3IgaW5zdGFsbCB0aGUgZXhhbXBsZSBmcm9tIHRoZSBwbHVnaW4KLQkgIHRlbXBsYXRlIGFnYWluc3QgYSBHU3RyZWFtZXIgZnJvbSBwYWNrYWdlIHVzaW5nIHRoZSBjb25maWd1cmUKLQkgIGRlZmF1bHRzLgotCi0yMDA3LTA3LTI1IDIyOjI5OjU3ICswMDAwICBTdGV2ZSBGaW5rIDxzcGhpbmtAZ21haWwuY29tPgotCi0JICB0b29scy9nc3QtaW5zcGVjdC4xLmluOiBEb2N1bWVudCAtLXByaW50LWFsbCBhbmQgLS1wcmludC1wbHVnaW4tYXV0by1pbnN0YWxsLWluZm8gY29tbWFuZCBsaW5lIG9wdGlvbnMgaW4gbWFuIHBhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTdGV2ZSBGaW5rICA8c3BoaW5rIGdtYWlsIGNvbT4KLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuMS5pbjoKLQkgIERvY3VtZW50IC0tcHJpbnQtYWxsIGFuZCAtLXByaW50LXBsdWdpbi1hdXRvLWluc3RhbGwtaW5mbyBjb21tYW5kCi0JICBsaW5lIG9wdGlvbnMgaW4gbWFuIHBhZ2UuCi0KLTIwMDctMDctMjUgMTg6NDY6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBkb2NzIGZvciBuZXcgYXBpIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBBZGQgZG9jcyBmb3IgbmV3IGFwaSBmdW5jdGlvbi4KLQotMjAwNy0wNy0yNSAxODozNzoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lio6IEFQSTogZ3N0X2VsZW1lbnRfZmFjdG9yeV9oYXNfaW50ZXJmYWNlKCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZSk6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oOgotCSAgQVBJOiBnc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UoKQotCSAgQWRkZWQgbWV0aG9kIHRvIGNoZWNrIGlmIGFuIGVsZW1lbnQgZmFjdG9yeSBpbXBsZW1lbnRzIGEgbmFtZWQKLQkgIGludGVyZmFjZS4KLQotMjAwNy0wNy0yNSAxMzowMDoyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBBbm90aGVyIGNvbmRpdGlvbmFsIGRvYyBjaGVjay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkgIEFub3RoZXIgY29uZGl0aW9uYWwgZG9jIGNoZWNrLgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgKiBnc3QvZ3N0cGFyYW1zcGVjcy5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgKiBnc3QvZ3N0eG1sLmg6Ci0JICBBUEktZG9jIGZpeGVzLgotCi0yMDA3LTA3LTI0IDEzOjQ0OjA0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBQcmludCBlcnJvciBqdXN0IG9uY2UgYW5kIHdpdGggYWRkaXRpb25hbCBpbmZvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jaGVja19tYWdpYyksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICBQcmludCBlcnJvciBqdXN0IG9uY2UgYW5kIHdpdGggYWRkaXRpb25hbCBpbmZvLgotCi0yMDA3LTA3LTI0IDEzOjM4OjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogQ2xlYW51cCB0aGUgdHlwZWZpbmRoZWxwZXIgY29kZSBhbmQgYWRkIHByaXZhdGUgZG9jIGNvbW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGhlbHBlcl9maW5kX3BlZWspLAotCSAgKGhlbHBlcl9maW5kX3N1Z2dlc3QpLCAoaGVscGVyX2ZpbmRfZ2V0X2xlbmd0aCksCi0JICAoZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlKSwgKGJ1Zl9oZWxwZXJfZmluZF9zdWdnZXN0KSwKLQkgIChnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyKToKLQkgIENsZWFudXAgdGhlIHR5cGVmaW5kaGVscGVyIGNvZGUgYW5kIGFkZCBwcml2YXRlIGRvYyBjb21tZW50cy4KLQotMjAwNy0wNy0yNCAxMjozMjozMSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IEZpeCBjYXBzZmlsdGVyIGZvciBjYXNlcyB3aGVyZSB0aGUgY2FwcyBzZXQgb24gY2Fwc2ZpbHRlciB3aWxsIHByb3ZpZGUgYWRkaXRpb25hbCBpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9jbGFzc19pbml0KSwKLQkgIChnc3RfY2Fwc2ZpbHRlcl90cmFuc2Zvcm1fc2l6ZSksIChnc3RfY2Fwc2ZpbHRlcl9wcmVwYXJlX2J1Zik6Ci0JICBGaXggY2Fwc2ZpbHRlciBmb3IgY2FzZXMgd2hlcmUgdGhlIGNhcHMgc2V0IG9uIGNhcHNmaWx0ZXIgd2lsbCBwcm92aWRlCi0JICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgotCSAgRml4ZXMgIzQ0OTE5NwotCi0yMDA3LTA3LTI0IDExOjMxOjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogRml4IGRvY3MgdGhhdCByZWNvbW1lbmVkIHdyb25nIGZ1bmN0aW9uIHRvIHVzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6Ci0JICBGaXggZG9jcyB0aGF0IHJlY29tbWVuZWQgd3JvbmcgZnVuY3Rpb24gdG8gdXNlLgotCi0yMDA3LTA3LTIzIDEzOjAzOjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEFsc28gZ2l2ZSBtZWRpYS10eXBlIGZvciB0eXBlZmluZGVycyBpbiBlbGVtZW50IG91dHB1dC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfcGx1Z2luX2ZlYXR1cmVzKToKLQkgIEFsc28gZ2l2ZSBtZWRpYS10eXBlIGZvciB0eXBlZmluZGVycyBpbiBlbGVtZW50IG91dHB1dC4KLQotMjAwNy0wNy0yMyAxMTo0MjoxMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnkuKjogU3BlZWQgdXAgZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlX2xvY2tlZCgpIGJ5IHVzaW5nIGEgaGFzaG1hcC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9pbml0KSwgKGdzdF9yZWdpc3RyeV9maW5hbGl6ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlc19mb3JfcGx1Z2luX3VubG9ja2VkKSwKLQkgIChnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUpLCAoZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlKSwKLQkgIChnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmVfbG9ja2VkKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JICBTcGVlZCB1cCBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmVfbG9ja2VkKCkgYnkgdXNpbmcgYSBoYXNobWFwLgotCSAgRml4ZXMgIzQ1OTUwMS4KLQotMjAwNy0wNy0yMyAxMDozOToxMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiBBdm9pZCBkb3VibGUgbWVtb3J5IHVzYWdlIGZvciBwbHVnaW5mZWF0dXJlIG5hbWVzLiBGaXhlcyAjNDU5NDY2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfZmluYWxpemUpLAotCSAgKGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZSk6Ci0JICBBdm9pZCBkb3VibGUgbWVtb3J5IHVzYWdlIGZvciBwbHVnaW5mZWF0dXJlIG5hbWVzLiBGaXhlcyAjNDU5NDY2LgotCi0yMDA3LTA3LTIyIDE4OjI2OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGFkLmg6IFNtYWxsIGFkZGl0aW9uIHRvIEdTVF9GTE9XX0lTX0ZBVEFMKCkgZG9jczogbWVudGlvbiB0aGF0IGVsZW1lbnRzIGRyaXZpbmcgdGhlIHBpcGVsaW5lIG1heSBuZWVkIHRvIGV4cGwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBTbWFsbCBhZGRpdGlvbiB0byBHU1RfRkxPV19JU19GQVRBTCgpIGRvY3M6IG1lbnRpb24gdGhhdCBlbGVtZW50cwotCSAgZHJpdmluZyB0aGUgcGlwZWxpbmUgbWF5IG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBmb3IgTk9UX0xJTktFRCBhcwotCSAgd2VsbCwgc2luY2UgSVNfRkFUQUwgZG9lc24ndCBjb3ZlciB0aGF0LgotCi0yMDA3LTA3LTIyIDE4OjE2OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6IEZpeCB0eXBvIGFuZCBkdXBsaWNhdGUgZW50cnkgaW4gdmlkZW8gZm9ybWF0cyBsaXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKLQkgIEZpeCB0eXBvIGFuZCBkdXBsaWNhdGUgZW50cnkgaW4gdmlkZW8gZm9ybWF0cyBsaXN0LgotCi0yMDA3LTA3LTIyIDEyOjE4OjQ2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOiBBbHNvIHJvdW5kIHRvIHRoZSBuZWFyZXN0IGludCB3aGVuIHVzaW5nIGN1YmljIGludGVycG9sYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICBBbHNvIHJvdW5kIHRvIHRoZSBuZWFyZXN0IGludCB3aGVuIHVzaW5nIGN1YmljIGludGVycG9sYXRpb24uCi0KLTIwMDctMDctMjEgMjE6MjA6MzcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzogV2hlbiBsaW5lYXJseSBpbnRlcnBvbGF0aW5nIGludGVnZXIgdHlwZXMsIHJvdW5kIHRvIHRoZSBuZWFyZXN0IGludCBieSBhZGRpbmcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgIFdoZW4gbGluZWFybHkgaW50ZXJwb2xhdGluZyBpbnRlZ2VyIHR5cGVzLCByb3VuZCB0byB0aGUgbmVhcmVzdCBpbnQKLQkgIGJ5IGFkZGluZyAwLjUuIERvbid0IGRvIGl0IGZvciBmbG9hdC9kb3VibGUgdHlwZXMuCi0JICBGaXhlcyB0aGUgZmFpbGluZyBjb250cm9sbGVyIHRlc3Qgb24gbXkgbWFjaGluZSwgd2hpY2ggaXMgc29tZWhvdwotCSAgcm91bmRpbmcgZGlmZmVyZW50bHkgdGhhbiBvbiB0aGUgYnVpbGRib3RzLgotCi0yMDA3LTA3LTIwIDA3OjM2OjQ0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OiBCZXR0ZXIgbG9nIHBhcnNpbmcgKGNhdGVnb3JpZXMgY2FuIGhhdmUgLSkuIEFkanVzdCB0ZXh0IHZzLiBsaW5lcywgc28gdGhhdCB0aGV5IHNwYW4gdGhlIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1wbG90LXRpbWVsaW5lLnB5OgotCSAgQmV0dGVyIGxvZyBwYXJzaW5nIChjYXRlZ29yaWVzIGNhbiBoYXZlIC0pLiBBZGp1c3QgdGV4dCB2cy4gbGluZXMsIHNvCi0JICB0aGF0IHRoZXkgc3BhbiB0aGUgc2FtZSB5LXJhbmdlLgotCi0yMDA3LTA3LTIwIDA3OjI2OjM5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcmFuZG9tL2Vuc29uaWMvOiBTYXZlIG15IHRob3VnaHRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvYXVkaW9iYXNlY2xhc3Nlcy50eHQ6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHlubGluay50eHQ6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcHJvZmlsaW5nLnR4dDoKLQkgIFNhdmUgbXkgdGhvdWdodHMuCi0JICAqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgotCSAgQWRkIG5vdGUgdG8gdXNlIGdfYXNzZXJ0IHR5cGUgbWFjcm9zLgotCi0yMDA3LTA3LTIwIDA3OjA5OjExICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEFkZCBsaWJtIGNoZWNrIGFzIHdlIHVzZSBpbiBmb3IgcGx1Z2lucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSAgQWRkIGxpYm0gY2hlY2sgYXMgd2UgdXNlIGluIGZvciBwbHVnaW5zLgotCi0yMDA3LTA3LTE4IDE0OjMxOjIxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBDaGVjayB0aGF0IHRoZSBzdGF0ZV9jb29raWUgaGFzbid0IGNoYW5nZWQgc2luY2UgdGhlIGNvbnRpbnVlX2Z1bmMgd2FzIHNjaGVkdWxlZC4gQXZvaWRzIHByb2JsZW1zIHdoZXJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jb250aW51ZV9mdW5jKToKLQkgIENoZWNrIHRoYXQgdGhlIHN0YXRlX2Nvb2tpZSBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgY29udGludWVfZnVuYwotCSAgd2FzIHNjaGVkdWxlZC4gQXZvaWRzIHByb2JsZW1zIHdoZXJlIHRoZSBzdGF0ZSBjaGFuZ2VzIGJhY2sgdG8KLQkgIHNvbWV0aGluZyBpdCBzaG91bGRuJ3QgYmUgYmVjYXVzZSBpdCB3YXMgY2hhbmdlZCBpbiB0aGUgbWVhbnRpbWUuCi0KLTIwMDctMDctMTcgMDk6NDQ6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IEZpeCBtZW1vcnkgbGVhay4gQmUgbGVzcyB2ZXJib3NlIGluIHRoZSBsb2cuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfY29uc3Rfc3RyaW5nKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfc3RyaW5nKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGFkX3RlbXBsYXRlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX3BsdWdpbiksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICBGaXggbWVtb3J5IGxlYWsuIEJlIGxlc3MgdmVyYm9zZSBpbiB0aGUgbG9nLgotCi0yMDA3LTA3LTE2IDE2OjQ0OjMxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZTogQWRkIGZpbGUgdG8gY3ZzaWdub3JlIGFzIGNvbW1hbmRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgQWRkIGZpbGUgdG8gY3ZzaWdub3JlIGFzIGNvbW1hbmRlZC4KLQotMjAwNy0wNy0xNiAxNjowNDo0OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzogVXNlIGEgR1N0YXRpY011dGV4IHRvIHByb3RlY3QgYWxsIGNhc2VzIHdoZXJlIGxpYmNoZWNrIGZhaWxfaWYvZmFpbF91bmxlc3MgbWFjcm9zIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzogKG1xX2R1bW15cGFkX2NoYWluKSwKLQkgIChtcV9kdW1teXBhZF9ldmVudCksIChydW5fb3V0cHV0X29yZGVyX3Rlc3QpOgotCSAgVXNlIGEgR1N0YXRpY011dGV4IHRvIHByb3RlY3QgYWxsIGNhc2VzIHdoZXJlIGxpYmNoZWNrCi0JICBmYWlsX2lmL2ZhaWxfdW5sZXNzIG1hY3JvcyBtaWdodCBiZSBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzCi0JICBzaW11bHRhbmVvdXNseSB0byBhdm9pZCBlcnJvcnMgbGlrZToKLQkgICJjaGVja19wYWNrLmM6MTA3OiA6LTEwODE3MjU0MDA6QmFkIG1lc3NhZ2UgdHlwZSBhcmciCi0KLTIwMDctMDctMTYgMTU6MTk6MDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmM6IE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIHBpcGVsaW5lIGJhY2sgdG8gdGhlIE5VTEwgc3RhdGUgYmVmb3JlIGRyb3BwaW5nIG91ciBmaW5hbCByZWZlcmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBwaXBlbGluZSBiYWNrIHRvIHRoZSBOVUxMIHN0YXRlIGJlZm9yZQotCSAgZHJvcHBpbmcgb3VyIGZpbmFsIHJlZmVyZW5jZS4KLQotMjAwNy0wNy0xNiAxNDo1NToyNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOiBNYWtlIHRoZSB0ZWUgc3RyZXNzLXRlc3QgYSBsaXR0bGUgbGVzcyBzdHJlc3NmdWwgc28gaXQgZG9lc24ndCBqdXN0IHRpbWUgb3V0IG9uIHNsb3ctbWFjaC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgTWFrZSB0aGUgdGVlIHN0cmVzcy10ZXN0IGEgbGl0dGxlIGxlc3Mgc3RyZXNzZnVsIHNvIGl0IGRvZXNuJ3QganVzdAotCSAgdGltZSBvdXQgb24gc2xvdy1tYWNoaW5lcywgYW5kIHJlbW92ZSBhIHNtYWxsIHJhY2Ugd2hlbiBpdCdzIHN0YXJ0aW5nCi0JICB1cCBieSBhZGRpbmcgYSBnZXRfc3RhdGUoKSBjYWxsLgotCi0yMDA3LTA3LTE2IDEyOjM2OjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogQXZvaWQgcmVhZGluZyByZWdpc3RyeSB0d2ljZSBvbiBzdGFydHVwLiBGaXhlcyAjNDU3MzIyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIEF2b2lkIHJlYWRpbmcgcmVnaXN0cnkgdHdpY2Ugb24gc3RhcnR1cC4gRml4ZXMgIzQ1NzMyMi4KLQotMjAwNy0wNy0xMyAxNDoxMToyMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHBrZ2NvbmZpZy86IFN1YnN0aXR1dGUgdGhlIENGTEFHUyBmb3IgbGliY2hlY2sgaW50byBvdXIgLnBjIGZpbGUgdG9vIHNvIHRoYXQgZGVwZW5kZW50IG1vZHVsZXMgd2lsbCBwaWNrIGl0IHVwIHByb3Blci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46Ci0JICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMuaW46Ci0JICBTdWJzdGl0dXRlIHRoZSBDRkxBR1MgZm9yIGxpYmNoZWNrIGludG8gb3VyIC5wYyBmaWxlIHRvbyBzbyB0aGF0Ci0JICBkZXBlbmRlbnQgbW9kdWxlcyB3aWxsIHBpY2sgaXQgdXAgcHJvcGVybHkgaWYgbGliY2hlY2sgaXMgaW5zdGFsbGVkCi0JICBpbnRvIHNvbWUgb3RoZXIgcHJlZml4LgotCi0yMDA3LTA3LTEzIDEzOjQ5OjE0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBSZXZlcnQgdGhlIHBrZy1jb25maWcgY2hlY2sgZm9yIGxpYmNoZWNrLCBzaW5jZSBpdCBwdWxscyBpbiB0aGUgd3Jvbmcgbm9uLVBJQyBsaWJjaGVjay5hIG9uIFVidW50dSBhbmQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgUmV2ZXJ0IHRoZSBwa2ctY29uZmlnIGNoZWNrIGZvciBsaWJjaGVjaywgc2luY2UgaXQgcHVsbHMgaW4gdGhlCi0JICB3cm9uZyBub24tUElDIGxpYmNoZWNrLmEgb24gVWJ1bnR1IGFuZCBwcm9iYWJseSBGZWRvcmEgdG9vLiBXZSBuZWVkCi0JICBhIHByb3BlciBzb2x1dGlvbiwgZWl0aGVyIGZyb20gdGhlIGNoZWNrIHByb2plY3QsIG9yIHNvbWV0aGluZyBlbHNlLgotCi0yMDA3LTA3LTEyIDExOjEwOjIyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogVXNlIHBrZy1jb25maWcgdG8gbG9jYXRlIGNoZWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFVzZSBwa2ctY29uZmlnIHRvIGxvY2F0ZSBjaGVjay4KLQotMjAwNy0wNy0xMCAyMDoxMDoxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0dGFnbGlzdC5jOiBGaXggZG9jIHN5bnRheC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgRml4IGRvYyBzeW50YXguCi0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFkZCBkZXByZWNhdGlvbiBndWFyZHMuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgIERvbid0IGRvY3VtZW50IG9iamVjdCAodGhpcyBpcyBpbXBsaWNpdGx5IHByaXZhdGUpLgotCi0yMDA3LTA3LTA4IDE0OjExOjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0c3RydWN0dXJlLmM6IFdoZW4gZGVzZXJpYWxpc2luZyBmb289YmFyIHdpdGhvdXQgYSB0eXBlIGNhc3QsIGNoZWNrIGlmIGl0J3MgYSBib29sZWFuIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX3BhcnNlX3ZhbHVlKToKLQkgIFdoZW4gZGVzZXJpYWxpc2luZyBmb289YmFyIHdpdGhvdXQgYSB0eXBlIGNhc3QsIGNoZWNrIGlmIGl0J3MgYQotCSAgYm9vbGVhbiBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIGEgc3RyaW5nIHR5cGUsIG90aGVyd2lzZSB0aGluZ3MgbGlrZQotCSAgYXVkaW90ZXN0c3JjICEgYXVkaW8veC1yYXctaW50LHNpZ25lZD10cnVlICEgZmFrZXNpbmsgd29uJ3Qgd29yaywKLQkgIGJlY2F1c2UgdGhlIGZpbHRlcmNhcHMgZW5kIHVwIGhhdmluZyBhIHNpZ25lZD0oc3RyaW5nKXRydWUgZmllbGQsCi0JICB3aGljaCBjYXVzZXMgcHJvYmxlbXMgbGF0ZXIgd2hlbiBpbnRlcnNlY3Rpb24gY2Fwcy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWRkIGEgdW5pdCB0ZXN0IGZvciB0aGlzLgotCi0yMDA3LTA3LTA2IDIxOjUwOjAyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBBUEk6IFJlZmFjdG9yIEdzdENvbnRyb2xsZXIgaW50byB0aGUgY29yZSBjb250cm9sbGVyIHdoaWNoIGNhbiB0YWtlIGEgR3N0Q29udHJvbFNvdXJjZSBmb3IgcHJvdi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZXZpZXdlZCBieTogU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9hZGRfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZSksCi0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KSwgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X2ZyZWUpLAotCSAgKGdzdF9jb250cm9sbGVyX2ZpbmRfY29udHJvbGxlZF9wcm9wZXJ0eSksCi0JICAoZ3N0X2NvbnRyb2xsZXJfbmV3X3ZhbGlzdCksIChnc3RfY29udHJvbGxlcl9uZXdfbGlzdCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfbmV3KSwgKGdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX3ZhbGlzdCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXNfbGlzdCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfcmVtb3ZlX3Byb3BlcnRpZXMpLAotCSAgKGdzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eV9kaXNhYmxlZCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc2V0X2Rpc2FibGVkKSwgKGdzdF9jb250cm9sbGVyX3NldF9jb250cm9sX3NvdXJjZSksCi0JICAoZ3N0X2NvbnRyb2xsZXJfZ2V0X2NvbnRyb2xfc291cmNlKSwgKGdzdF9jb250cm9sbGVyX2dldCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc3luY192YWx1ZXMpLCAoZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5KSwKLQkgIChfZ3N0X2NvbnRyb2xsZXJfZGlzcG9zZSksIChnc3RfY29udHJvbGxlcl9nZXRfdHlwZSksCi0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc2V0KSwgKGdzdF9jb250cm9sbGVyX3NldF9mcm9tX2xpc3QpLAotCSAgKGdzdF9jb250cm9sbGVyX3Vuc2V0KSwgKGdzdF9jb250cm9sbGVyX3Vuc2V0X2FsbCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfZ2V0X2FsbCksIChnc3RfY29udHJvbGxlcl9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sc291cmNlLmM6Ci0JICAoZ3N0X2NvbnRyb2xfc291cmNlX2NsYXNzX2luaXQpLCAoZ3N0X2NvbnRyb2xfc291cmNlX2luaXQpLAotCSAgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUpLAotCSAgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkpLCAoZ3N0X2NvbnRyb2xfc291cmNlX2JpbmQpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xzb3VyY2UuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzogKGdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfc291cmNlKSwKLQkgIChnc3Rfb2JqZWN0X2dldF9jb250cm9sX3NvdXJjZSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9ub2RlKSwKLQkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfZmlyc3RfdmFsdWUpLAotCSAgKF9pbnRlcnBvbGF0ZV9ub25lX2dldCksIChpbnRlcnBvbGF0ZV9ub25lX2dldCksCi0JICAoaW50ZXJwb2xhdGVfbm9uZV9nZXRfYm9vbGVhbl92YWx1ZV9hcnJheSksCi0JICAoaW50ZXJwb2xhdGVfbm9uZV9nZXRfZW51bV92YWx1ZV9hcnJheSksCi0JICAoaW50ZXJwb2xhdGVfbm9uZV9nZXRfc3RyaW5nX3ZhbHVlX2FycmF5KSwKLQkgIChfaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXQpLCAoaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXQpLAotCSAgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2Jvb2xlYW5fdmFsdWVfYXJyYXkpLAotCSAgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2VudW1fdmFsdWVfYXJyYXkpLAotCSAgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X3N0cmluZ192YWx1ZV9hcnJheSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzoKLQkgIChnc3RfY29udHJvbF9wb2ludF9mcmVlKSwgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Jlc2V0KSwKLQkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcpLAotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUpLAotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2JpbmQpLAotCSAgKGdzdF9jb250cm9sX3BvaW50X2NvbXBhcmUpLCAoZ3N0X2NvbnRyb2xfcG9pbnRfZmluZCksCi0JICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVybmFsKSwKLQkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXQpLAotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3QpLAotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3Vuc2V0KSwKLQkgIChnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV91bnNldF9hbGwpLAotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9hbGwpLAotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCksCi0JICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfaW5pdCksCi0JICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZmluYWxpemUpLAotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2Rpc3Bvc2UpLAotCSAgKGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2NsYXNzX2luaXQpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2Vwcml2YXRlLmg6Ci0JICBBUEk6IFJlZmFjdG9yIEdzdENvbnRyb2xsZXIgaW50byB0aGUgY29yZSBjb250cm9sbGVyIHdoaWNoIGNhbiB0YWtlCi0JICBhIEdzdENvbnRyb2xTb3VyY2UgZm9yIHByb3ZpZGluZyBhY3R1YWwgdmFsdWVzIGZvciB0aW1lc3RhbXBzLgotCSAgSW1wbGVtZW50IGEgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSBhbmQgdXNlIHRoaXMgZm9yIGJhY2t3YXJkCi0JICBjb21wYXRpYmlsaXR5LCBkZXByZWNhdGUgYSBidW5jaCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgbm93IGhhbmRsZWQKLQkgIGJ5IEdzdENvbnRyb2xTb3VyY2Ugb3IgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuCi0JICBNYWtlIGl0IHBvc3NpYmxlIHRvIGRpc2FibGUgdGhlIGNvbnRyb2xsZXIgY29tcGxldGVseSBvciBvbmx5IGZvcgotCSAgc3BlY2lmaWMgcHJvcGVydGllcy4gRml4ZXMgIzQ1MDcxMS4KLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgotCSAgQWRkIG5ldyBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgdG8gdGhlIGRvY3MuCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9jb250cm9sbGVyX3N1aXRlKToKLQkgICogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6IChtYWluKToKLQkgIFBvcnQgdW5pdCB0ZXN0IGFuZCBleGFtcGxlIHRvIHRoZSBuZXcgQVBJIGFuZCBhZGQgc29tZSBuZXcKLQkgIHVuaXQgdGVzdHMuCi0KLTIwMDctMDctMDUgMDk6MDY6MDIgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBJbXBsZW1lbnQgbm9uLWRlZmF1bHQgR3N0UGFkSW50TGlua0Z1bmN0aW9uIGZvciBtdWx0aXF1ZXVlIHBhZHMgc28gdGhhdCB0aGUgcGlwZWxpbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3IGF0IHNreW5ldCBiZT4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICAoZ3N0X211bHRpX3F1ZXVlX2dldF9pbnRlcm5hbF9saW5rcyksIChhcHBseV9idWZmZXIpLAotCSAgKHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiKSwgKGdzdF9zaW5nbGVfcXVldWVfbmV3KToKLQkgIEltcGxlbWVudCBub24tZGVmYXVsdCBHc3RQYWRJbnRMaW5rRnVuY3Rpb24gZm9yIG11bHRpcXVldWUgcGFkcyBzbyB0aGF0Ci0JICB0aGUgcGlwZWxpbmUgbGF5b3V0IGNhbiBiZSB0cmFja2VkIGNvcnJlY3RseS4gRml4ZXMgIzQ1MzczMi4KLQotMjAwNy0wNy0wNSAwODo0Mjo0MiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzLzogU2ltcGxpdHkgLS1leHRyYS1kaXIgYXMgZ3RrZG9jIHNjYW5zIHJlY3Vyc2l2ZWx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgIFNpbXBsaXR5IC0tZXh0cmEtZGlyIGFzIGd0a2RvYyBzY2FucyByZWN1cnNpdmVseS4KLQotMjAwNy0wNy0wMyAxNzowMTo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBXaGVuIHdlIGdvdCBhbiBlcnJvciwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gd2FpdGluZyBmb3IgcHJlcm9sbCB3aGVuIHNodXR0aW5nIGRvd24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6Ci0JICBXaGVuIHdlIGdvdCBhbiBlcnJvciwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gd2FpdGluZyBmb3IgcHJlcm9sbCB3aGVuCi0JICBzaHV0dGluZyBkb3duLgotCi0yMDA3LTA3LTAzIDE2OjI2OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiBCZSBhIGxvdCBzbWFydGVyIHdoZW4gZGVjaWRpbmcgd2hhdCBzcmNwYWQgdG8gdXNlIGZvciBwcm94eWluZyB0aGUgYnVmZmVyX2FsbG9jLiBBbHNvIGhhbmQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9iYXNlX2luaXQpLAotCSAgKGdzdF90ZWVfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF90ZWVfcmVsZWFzZV9wYWQpLAotCSAgKGdzdF90ZWVfZmluZF9idWZmZXJfYWxsb2MpLCAoZ3N0X3RlZV9idWZmZXJfYWxsb2MpLAotCSAgKGdzdF90ZWVfZG9fcHVzaCksIChjbGVhcl9wYWRzKSwgKGdzdF90ZWVfaGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X3RlZV9jaGFpbik6Ci0JICBCZSBhIGxvdCBzbWFydGVyIHdoZW4gZGVjaWRpbmcgd2hhdCBzcmNwYWQgdG8gdXNlIGZvciBwcm94eWluZwotCSAgdGhlIGJ1ZmZlcl9hbGxvYy4gQWxzbyBoYW5kbGUgcGFkIGFkZGVkL3JlbW92ZWQgd2hlbiBkb2luZyBzby4KLQkgIEZpeGVzICMzNTc5NTkuCi0JICBLZWVwIHRyYWNrIG9mIHdoYXQgcGFkcyB3ZSBhbHJlYWR5IHB1c2hlZCBvbiBpbiBjYXNlIHdlIGhhdmUgcGFkcwotCSAgYWRkZWQvcmVtb3ZlZCB3aGlsZSBwdXNoaW5nLiBGaXhlcyAjMzc0NjM5Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYzogKGhhbmRvZmYpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHRlZV9zdWl0ZSk6Ci0JICBBZGRlZCB1bml0IHRlc3QgZm9yIHBhZCByZXN5bmMuCi0KLTIwMDctMDctMDEgMjE6MzE6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBwby86IFVwZGF0ZWQgdHJhbnNsYXRpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL25sLnBvOgotCSAgKiBwby9zdi5wbzoKLQkgIFVwZGF0ZWQgdHJhbnNsYXRpb25zLgotCi0yMDA3LTA3LTAxIDIxOjMwOjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vOiBBZGRlZCBuZXcgRmlubmlzaCB0cmFuc2xhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdHJhbnNsYXRpb24gYnk6IFRvbW1pIFZhaW5pa2FpbmVuIDxUb21taS5WYWluaWthaW5lbkBpa2kuZmk+Ci0JICAqIHBvL0xJTkdVQVM6Ci0JICAqIHBvL2ZpLnBvOgotCSAgQWRkZWQgbmV3IEZpbm5pc2ggdHJhbnNsYXRpb24uCi0KLTIwMDctMDYtMjggMTE6MjU6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBXaGVuIGZpZ3VyaW5nIG91dCB3aGVuIGEgcXVldWUgaXMgZmlsbGVkLCB1c2Ugb3VyIGludGVybmFsIHRpbWUgZXN0aW1hdGUgYmFzZWQgb24gcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoYXBwbHlfYnVmZmVyKSwKLQkgIChzaW5nbGVfcXVldWVfb3ZlcnJ1bl9jYik6Ci0JICBXaGVuIGZpZ3VyaW5nIG91dCB3aGVuIGEgcXVldWUgaXMgZmlsbGVkLCB1c2Ugb3VyIGludGVybmFsIHRpbWUgZXN0aW1hdGUKLQkgIGJhc2VkIG9uIHNlZ21lbnRzLCBqdXN0IGxpa2UgY2hlY2tfZnVsbCBkb2VzLgotCi0yMDA3LTA2LTI3IDExOjQ3OjQ2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgTWVudGlvbiBidWcgNDMwNjgyIGNsb3NlZCBieSBwcmV2aW91cyBjb21taXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE1lbnRpb24gYnVnIDQzMDY4MiBjbG9zZWQgYnkgcHJldmlvdXMgY29tbWl0LgotCi0yMDA3LTA2LTI3IDExOjQzOjA0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RtaW5pb2JqZWN0LmM6IFJlbW92ZSAzIGRvLW5vdGhpbmcgbWV0aG9kcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X2dldF90eXBlKToKLQkgIFJlbW92ZSAzIGRvLW5vdGhpbmcgbWV0aG9kcy4KLQotMjAwNy0wNi0yNyAxMToyNDowOCArMDAwMCAgVGltIEFuZ3VzIDx0aW1Abmd1cy5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiBUYWtlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBjb3B5IHdoZW4gc2V0dGluZyAiY2FwcyIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUaW0gQW5ndXMgPHRpbSBhdCBuZ3VzIGRvdCBuZXQ+Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2NhcHNmaWx0ZXJfc2V0X3Byb3BlcnR5KToKLQkgIFRha2UgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIGNvcHkgd2hlbiBzZXR0aW5nICJjYXBzIi4KLQkgIEZpeCBkb2N1bWVudGF0aW9uIHRvIGNsYXJpZnkgdGhpcyBiZWhhdmlvdXIuIEZpeGVzICM0NDk0MTQuCi0KLTIwMDctMDYtMjcgMTA6MTI6MTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogUmVtb3ZlIGVtcHR5IGluc3RhbmNlX2luaXQoKSBmdW5jdGlvbnMgdG8gc2F2ZSByZWxvY3MgYW5kIGxlc3NlbiB0aGUgbm9pc2UuIFJlbW92ZSBzb21lIG9mIHRoZSBmdW5jdGlvbiBwcm90b3R5Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOiAoZ3N0X2luZGV4X2ZhY3RvcnlfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2luaXQpOgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9nZXRfdHlwZSk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2luaXQpOgotCSAgKiBnc3QvZ3N0dXJpLmM6IChnc3RfdXJpX2hhbmRsZXJfYmFzZV9pbml0KToKLQkgIFJlbW92ZSBlbXB0eSBpbnN0YW5jZV9pbml0KCkgZnVuY3Rpb25zIHRvIHNhdmUgcmVsb2NzIGFuZCBsZXNzZW4gdGhlCi0JICBub2lzZS4gUmVtb3ZlIHNvbWUgb2YgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgZG91YmxlZCBieQotCSAgR19ERUZJTkVfVFlQRS4KLQotMjAwNy0wNi0yNyAwOTozNDowMSArMDAwMCAgw4l0aWVubmUgTm9yZWF1LUjDqWJlcnQgPGV0aWVubmVAZGVlcHVuZGVyLm9yZz4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmM6IEFkZCBwZWVyIGFuZCBkaXJlY3Rpb24gaW4gdGhlIFhNTCBzZXJpYWxpc2F0aW9uIG9mIGdob3N0cGFkcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IMOJdGllbm5lIE5vcmVhdS1Iw6liZXJ0IDxldGllbm5lIGF0IGRlZXB1bmRlciBkb3Qgb3JnPgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfc2F2ZV90aHlzZWxmKToKLQkgIEFkZCBwZWVyIGFuZCBkaXJlY3Rpb24gaW4gdGhlIFhNTCBzZXJpYWxpc2F0aW9uIG9mIGdob3N0cGFkcy4KLQkgIEZpeGVzICM0NDkyMjYuCi0KLTIwMDctMDYtMjYgMTY6MjQ6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBQcmVzZXJ2ZSB1c2VmdWwgaW5mb3JtYXRpb24sIHRoYW5rcyBUaW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgUHJlc2VydmUgdXNlZnVsIGluZm9ybWF0aW9uLCB0aGFua3MgVGltLgotCi0yMDA3LTA2LTI2IDE0OjQ1OjE1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLio6IFRha2UgdGhlIG11bHRpcXVldWUgbG9jayB3aGVuIHVwZGF0aW5nIHRoZSBmaWxsIGxldmVsIHNvIHdlIGRvbid0IGdldCBjb25mdXNlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9pbml0KSwKLQkgIChnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoKSwgKGFwcGx5X3NlZ21lbnQpLCAoYXBwbHlfYnVmZmVyKSwKLQkgIChnc3Rfc2luZ2xlX3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9tdWx0aV9xdWV1ZV9sb29wKSwKLQkgIChnc3RfbXVsdGlfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfbXVsdGlfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpLCAod2FrZV91cF9uZXh0X25vbl9saW5rZWQpLAotCSAgKGNvbXB1dGVfaGlnaF9pZCksIChnc3Rfc2luZ2xlX3F1ZXVlX25ldyk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgotCSAgVGFrZSB0aGUgbXVsdGlxdWV1ZSBsb2NrIHdoZW4gdXBkYXRpbmcgdGhlIGZpbGwgbGV2ZWwgc28gd2UgZG9uJ3QgZ2V0Ci0JICBjb25mdXNlZC4KLQkgIEFmdGVyIGFwcGx5aW5nIGEgYnVmZmVyIG9yIGV2ZW50IG9uIHRoZSBzcmMgcGFkIHNlZ21lbnQsIG1ha2Ugc3VyZSB0bwotCSAgY2FsbCBnc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZCgpIHRvIGdldCB0aGUgZGF0YSBxdWV1ZSB0byB1bmJsb2NrCi0JICBhbmQgY2hlY2sgdGhlIGZpbGxlZCBzdGF0ZSBhZ2Fpbi4KLQkgIFJld29yayB0aGUgbm90LWxpbmtlZCBwYWQgaGFuZGxpbmcgc28gdGhlIGxvZ2ljIGlzIHRoYXQgbm90LWxpbmtlZAotCSAgcGFkcyBjYW4gcHVzaCBhcyBmYXN0IGFzIHRoZXkgbGlrZSwgYnV0IG9ubHkgc28gdGhleSBuZXZlciBnZXQKLQkgIGFoZWFkIG9mIGFueSBsaW5rZWQgcGFkcy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOiAobXFfc2lua3BhZF90b19zcmNwYWQpLAotCSAgKG1xX2R1bW15cGFkX2dldGNhcHMpLCAobXFfZHVtbXlwYWRfY2hhaW4pLCAobXFfZHVtbXlwYWRfZXZlbnQpLAotCSAgKHJ1bl9vdXRwdXRfb3JkZXJfdGVzdCksIChHU1RfU1RBUlRfVEVTVCksIChtdWx0aXF1ZXVlX3N1aXRlKToKLQkgIEFkZCBhIHRlc3QgdG8gY2hlY2sgdGhhdCBub3QtbGlua2VkIHBhZHMgYWx3YXlzIHN0YXkgYmVoaW5kCi0JICBsaW5rZWQgcGFkcy4KLQotMjAwNy0wNi0yNiAxMTo1NzoyMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvcmFuZG9tL3JlbGVhc2U6IFNvbWUgdXBkYXRlcyB0byB0aGUgcmVsZWFzZSBwcm9jZWR1cmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIFNvbWUgdXBkYXRlcyB0byB0aGUgcmVsZWFzZSBwcm9jZWR1cmUuCi0KLTIwMDctMDYtMjYgMDg6MjY6MzYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IE1pY3Jvb3B0aW1pemF0aW9uIHRoYXQgc2F2ZXMgc3R1bm5pbmcgODAgYnl0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChfX2dzdF9lbGVtZW50X2RldGFpbHNfY2xlYXIpOgotCSAgTWljcm9vcHRpbWl6YXRpb24gdGhhdCBzYXZlcyBzdHVubmluZyA4MCBieXRlcy4KLQotMjAwNy0wNi0yNSAxMjozNTo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBVcGRhdGUgZG9jcyB3aXRoIGNhcHMgaW5mby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSAgVXBkYXRlIGRvY3Mgd2l0aCBjYXBzIGluZm8uCi0KLTIwMDctMDYtMjMgMjI6NTY6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBwby9pdC5wbzogVXBkYXRlZCBJdGFsaWFuIHRyYW5zbGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL2l0LnBvOgotCSAgVXBkYXRlZCBJdGFsaWFuIHRyYW5zbGF0aW9uLgotCi0yMDA3LTA2LTIzIDExOjE5OjE2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgZml4IHdpbjMyIGFyY2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHdpbjMyIGFyY2gKLQotMjAwNy0wNi0yMyAxMToxODo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICA4MCBsaW5lIGZpeAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICA4MCBsaW5lIGZpeAotCi0yMDA3LTA2LTIzIDExOjE1OjExICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vOiBVcGRhdGUgVmlldG5hbWVzZSB0cmFuc2xhdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogQ2hhbmdlTG9nOgotCSAgKiBwby92aS5wbzoKLQkgIFVwZGF0ZSBWaWV0bmFtZXNlIHRyYW5zbGF0aW9ucy4KLQotMjAwNy0wNi0yMSAyMjozNzoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBSZW1vdmUgdW51c2VkIHNpZ25hbCBlbnVtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIFJlbW92ZSB1bnVzZWQgc2lnbmFsIGVudW0uCi0KLTIwMDctMDYtMjEgMTg6MDA6NTggKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogTUFJTlRBSU5FUlM6Ci0JICB1cGRhdGUgTUFJTlRBSU5FUlMgZmlsZSB0byByZWZsZWN0IGN1cnJlbnQgcmVhbGl0aWVzIGJldHRlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgTUFJTlRBSU5FUlMgZmlsZSB0byByZWZsZWN0IGN1cnJlbnQgcmVhbGl0aWVzIGJldHRlcgotCi0yMDA3LTA2LTIxIDE2OjM5OjAxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgQmVlZiB1cCBhbmQgaW5jbHVkZSB0aGUgZG9jcyBmb3IgZ3N0X3R5cGVfcmVnaXN0ZXJfc3RhdGljX2Z1bGwgYW5kIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSBhbmQgYWRkIHRoZSBBLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfdHlwZV9yZWdpc3Rlcl9zdGF0aWNfZnVsbCk6Ci0JICBCZWVmIHVwIGFuZCBpbmNsdWRlIHRoZSBkb2NzIGZvciBnc3RfdHlwZV9yZWdpc3Rlcl9zdGF0aWNfZnVsbCBhbmQKLQkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSBhbmQgYWRkIHRoZSBBUEkga2V5d29yZAotCSAgaW4gdGhlIENoYW5nZUxvZy4KLQotMjAwNy0wNi0yMSAxNDozNTowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IEZpeCBzZXR0aW5nIG1heC0qIHByb3BlcnRpZXMgYWZ0ZXIgYWRkaW5nIHF1ZXVlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9zZXRfcHJvcGVydHkpLAotCSAgKHVwZGF0ZV90aW1lX2xldmVsKSwgKGdzdF9zaW5nbGVfcXVldWVfcHVzaF9vbmUpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9jaGFpbiksIChnc3RfbXVsdGlfcXVldWVfc2lua19ldmVudCksCi0JICAoc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IpLCAoc2luZ2xlX3F1ZXVlX3VuZGVycnVuX2NiKSwKLQkgIChzaW5nbGVfcXVldWVfY2hlY2tfZnVsbCk6Ci0JICBGaXggc2V0dGluZyBtYXgtKiBwcm9wZXJ0aWVzIGFmdGVyIGFkZGluZyBxdWV1ZXMuCi0JICBVc2UgSVNfRklMTEVEIGZvciBjaGVja2luZyB2aXNpYmxlIGl0ZW1zLgotCSAgU2lnbmFsIG92ZXJydW4gaWYgbXVsdGlwbGUgcXVldWVzIG92ZXJydW4uCi0JICBBZGQgZXh0cmEgZGVidWcgb3V0cHV0LgotCSAgUGF0Y2ggYnk6IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0KLTIwMDctMDYtMjEgMTQ6Mjk6MDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgU2F2aW5nIHJlbG9jYXRpb25zIGZvciBHVHlwZUluZm8gYW5kIEdzdEVsZW1lbnREZXRhaWxzLiBGaXhlcyAjNDM3NDU3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF90eXBlX3JlZ2lzdGVyX3N0YXRpY19mdWxsKToKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfYmFzZV9pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19iYXNlX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19iYXNlX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfYmFzZV9pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19iYXNlX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2Jhc2VfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2Jhc2VfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9iYXNlX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9iYXNlX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfYmFzZV9pbml0KSwKLQkgIChhcHBseV9idWZmZXIpLCAoZ3N0X3F1ZXVlX2NoYWluKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfYmFzZV9pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYmFzZV9pbml0KSwKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2xhc3NfaW5pdCk6Ci0JICBTYXZpbmcgcmVsb2NhdGlvbnMgZm9yIEdUeXBlSW5mbyBhbmQgR3N0RWxlbWVudERldGFpbHMuIEZpeGVzICM0Mzc0NTcuCi0KLTIwMDctMDYtMjEgMDk6NDY6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDogRml4IHR5cG8gaW4gaWFuYS5vcmcgVVJJLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKLQkgIEZpeCB0eXBvIGluIGlhbmEub3JnIFVSSS4KLQotMjAwNy0wNi0xOSAyMTo1ODozMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDYtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKLQkgICh0ZXN0X3N0YXRlX2NoYW5nZV9yZXR1cm5zKTogRW5hYmxlIHB1bGwtbW9kZSB0ZXN0cyBub3cgdGhhdAotCSAgYmFzZXNpbmsgaGFzIGJlZW4gZml4ZWQuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19uZWVkc19wcmVyb2xsKToKLQkgIENoYW5nZWQgZnJvbSBnc3RfYmFzZV9zaW5rX2lzX3ByZXJvbGxlZCwgcmV2ZXJzaW5nIHRoZSBzZW5zZSBvZgotCSAgdGhlIHJldHVybiB2YWx1ZS4gUmV0dXJucyBGQUxTRSBhbHNvIGlmIHRoZSBzaW5rIGlzIGluIHB1bGwgbW9kZSwKLQkgIGluIHdoaWNoIGNhc2UgaXQgbmVlZHMgbm8gcHJlcm9sbC4KLQkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5LCBnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6IFVwZGF0ZSBmb3IKLQkgIG5lZWRzX3ByZXJvbGwgY2hhbmdlLgotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKTogQWRkIGEgY2FzZSBmb3IgUkVBRFlfVE9fUEFVU0VEIGFmdGVyCi0JICBjaGFpbmluZyB1cCwgaW4gd2hpY2ggd2UgcmV0dXJuIFNVQ0NFU1MgZGlyZWN0bHkgaWYgd2UgYWN0aXZhdGVkCi0JICBpbiBwdWxsIG1vZGUgaW5zdGVhZCBvZiBBU1lOQy4gSW52b2x2ZXMgY291bnRlcmluZyBhbiBhc3luY19zdGFydAotCSAgbWVzc2FnZSBzZW50IGJlZm9yZSBjaGFpbmluZyB1cDsgbm90IHN1cmUgaWYgdGhpcyBpcyBjb3JyZWN0LCBpbgotCSAgYW4gaWRlYWwgd29ybGQgd2Ugb25seSBzZW5kIGFzeW5jLXN0YXJ0IHdoZW4gYWN0aXZhdGluZyBpbiBwdXNoCi0JICBtb2RlLgotCi0yMDA3LTA2LTE5IDIxOjI4OjU0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDYtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKLQkgICh0ZXN0X3N0YXRlX2NoYW5nZV9yZXR1cm5zKTogTmV3IHRlc3QsIHBhcnRpYWxseSBkaXNhYmxlZCB1bnRpbAotCSAgYmFzZXNpbmsgaXMgZml4ZWQuCi0KLTIwMDctMDYtMTkgMTY6MDU6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBGaXggZXZlbnQgbGVhay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGFwcGx5X2J1ZmZlciksCi0JICAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfZXZlbnQpOgotCSAgRml4IGV2ZW50IGxlYWsuCi0KLTIwMDctMDYtMTkgMTA6NDE6MzMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogTW92ZSB0aGUgY29tbW9uIGNvZGUgZm9yIHBvc3Rpbmcgc3RhdGUtY2hhbmdlIG1lc3NhZ2VzIGludG8gb25lIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksIChiaW5fcHVzaF9zdGF0ZV9jb250aW51ZSksCi0JICAoYmluX2hhbmRsZV9hc3luY19zdGFydCksIChiaW5faGFuZGxlX2FzeW5jX2RvbmUpLAotCSAgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6Ci0JICBNb3ZlIHRoZSBjb21tb24gY29kZSBmb3IgcG9zdGluZyBzdGF0ZS1jaGFuZ2UgbWVzc2FnZXMgaW50bwotCSAgb25lIGZ1bmN0aW9uLgotCSAgQnJvYWRjYXN0IHRoZSBzdGF0ZSBzaWduYWwgYWZ0ZXIgd2UgcG9zdGVkIHRoZSBtZXNzYWdlcy4KLQkgIE1hcmsgdGhlIGJpbiBhcyBidXN5IHdoZW4gaXQncyBkb2luZyBhIHN0YXRlLWNoYW5nZS4KLQkgIE1ha2Ugc3VyZSBhc3luYy1zdGFydC9kb25lIG1lc3NhZ2VzIGRvbid0IGludGVyZmVyZSB3aXRoIHRoZSBiaW4ncwotCSAgc3RhdGUgd2hlbiBpdCdzIGJ1c3kuCi0JICBBZnRlciB0aGUgc3RhdGUgY2hhbmdlLCBsZXQgdGhlIGJpbiBjaGVjayB3aGljaCBlbGVtZW50cyBjb21wbGV0ZWQgdGhlCi0JICBzdGF0ZSBjaGFuZ2Ugd2hpbGUgaXQgd2FzIGJ1c3kgc28gdGhhdCBpdCBjYW4gdXBkYXRlIGl0cyBzdGF0ZS4KLQotMjAwNy0wNi0xOSAxMDozODozOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvcmFuZG9tL3JlbGVhc2U6IEFkZCBhIG5vdGUgYWJvdXQgdXBkYXRpbmcgdGhlIGRvYXAgZmlsZSB0byB0aGUgcmVsZWFzZSBjaGVja2xpc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgotCSAgQWRkIGEgbm90ZSBhYm91dCB1cGRhdGluZyB0aGUgZG9hcCBmaWxlIHRvIHRoZSByZWxlYXNlIGNoZWNrbGlzdAotCi0yMDA3LTA2LTE4IDE2OjQ0OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogTWFrZSBzdXJlIHdlIGRvbid0IHJlZmVyZW5jZSB0aGUgYnVmZmVyL2V2ZW50IGFmdGVyIHdlIGhhdmUgZ2l2ZW4gYXdheSBvd25lcnNoaXAgaW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGFwcGx5X2J1ZmZlciksCi0JICAoZ3N0X3NpbmdsZV9xdWV1ZV9wdXNoX29uZSksIChnc3RfbXVsdGlfcXVldWVfY2hhaW4pLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KToKLQkgIE1ha2Ugc3VyZSB3ZSBkb24ndCByZWZlcmVuY2UgdGhlIGJ1ZmZlci9ldmVudCBhZnRlciB3ZSBoYXZlIGdpdmVuIGF3YXkKLQkgIG93bmVyc2hpcCBpbiB0aGUgcXVldWUuCi0KLTIwMDctMDYtMTggMTU6MTU6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBVcGRhdGUgcXVldWUgc3RhdGUgX2FmdGVyXyBhZGRpbmcgdGhlIGl0ZW0gaW4gdGhlIHF1ZXVlIGJlY2F1c2UgZWxzZSB3ZSBjb3VsZCBlbmQgdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X3NpbmdsZV9xdWV1ZV9mbHVzaCksCi0JICAoZ3N0X211bHRpX3F1ZXVlX2NoYWluKSwgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KToKLQkgIFVwZGF0ZSBxdWV1ZSBzdGF0ZSBfYWZ0ZXJfIGFkZGluZyB0aGUgaXRlbSBpbiB0aGUgcXVldWUgYmVjYXVzZSBlbHNlIHdlCi0JICBjb3VsZCBlbmQgdXAgYmVpbmcgZnVsbCB3aXRob3V0IHRoZSBlbGVtZW50IGFkZGVkIHlldC4KLQotMjAwNy0wNi0xOCAxNToxMjoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi4qOiBJbW1lZGlhdGx5IGNvbW1pdCB0aGUgdG9wbGV2ZWwgYmluIHN0YXRlIHdoZW4gcmVjZWl2aW5nIGFuIGFzeW5jLWRvbmUgbWVzc2FnZS4gVGhpcyBlbmFibGVzIHVzIHRvIGF2b2lkLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9pbml0KSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAotCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9nZXRfc3RhdGVfZnVuYyksCi0JICAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSksIChnc3RfYmluX2NvbnRpbnVlX2Z1bmMpLAotCSAgKGJpbl9wdXNoX3N0YXRlX2NvbnRpbnVlKSwgKGJpbl9oYW5kbGVfYXN5bmNfc3RhcnQpLAotCSAgKGJpbl9oYW5kbGVfYXN5bmNfZG9uZSksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICBJbW1lZGlhdGx5IGNvbW1pdCB0aGUgdG9wbGV2ZWwgYmluIHN0YXRlIHdoZW4gcmVjZWl2aW5nIGFuIGFzeW5jLWRvbmUKLQkgIG1lc3NhZ2UuIFRoaXMgZW5hYmxlcyB1cyB0byBhdm9pZCBzcGF3bmluZyBhIHRocmVhZCB0byBjb21taXQgdGhlIHN0YXRlCi0JICBpbiBzb21lIGNvbW1vbiBjYXNlcyBhbmQgaXQgYWxzbyBhdm9pZHMgc29tZSByYWNlcy4KLQkgIEF2b2lkIHNwYXduaW5nIGEgc3RhdGUgdGhyZWFkIHdoZW4gYWRkaW5nL3JlbW92aW5nIGFzeW5jIGVsZW1lbnRzIHRvIGEKLQkgIHRvcGxldmVsIGJpbi4gSW5zdGVhZCB3ZSBpbW1lZGlhdGx5IHVwZGF0ZSB0aGUgYmluIHN0YXRlLgotCSAgR2V0IHJpZCBvZiBpdGVyYXRpbmcgYWxsIHRoZSBjaGlsZHJlbiB3aGVuIGdldHRpbmcgdGhlIHN0YXRlIGluIHRoZSBiaW4KLQkgIGJlY2F1c2UgaXQgaXMgbm93IGFsd2F5cyB1cC10by1kYXRlLgotCSAgRml4IGJ1ZyB3aGVyZSBsb2NrZWQgZWxlbWVudHMgd291bGQgYWx3YXlzIHJldHVybiBfU1VDQ0VTUyBldmVuIGl0IHRoZXkKLQkgIHJldHVybmVkIE5PX1BSRVJPTEwgYmVmb3JlIGJlaW5nIGxvY2tlZC4KLQkgIEZpeCB0aGUgb3JkZXIgb2YgdGhlIHN0YXRlX2NoYW5nZSwgYXN5bmMtc3RhcnQvZG9uZSBtZXNzYWdlcyB0aGF0IHdhcwotCSAgc29tZXRpbWVzIGluY29ycmVjdC4KLQkgIE1hcmsgdGhlIHN0YXRlX2RpcnR5IGZpZWxkIGFzIGRlcHJlY2F0ZWQsIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZSBhcyB3ZQotCSAgYXJlIGFsd2F5cyB1cC10by1kYXRlLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpLAotCSAgKGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlKToKLQkgIFNtYWxsIGRlYnVnIGlucHJvdmVtZW50cy4KLQkgIFJldHVybiB0aGUgcHJldmlvdXMgZWxlbWVudCBzdGF0ZSByZXR1cm4gd2hlbiBub3RoaW5nIGlzIHBlbmRpbmcgaW5zdGVhZAotCSAgb2YgYmxpbmRseSByZXR1cm5pbmcgU1VDQ0VTUy4KLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAocGFkX2Jsb2NrZWRfY2IpLAotCSAgKGdzdF9zaW5rc19zdWl0ZSk6Ci0JICBBZGQgYSB3aG9sZSBidW5jaCBvZiBuZXcgdGVzdGNhc2VzLgotCi0yMDA3LTA2LTE3IDE3OjI2OjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vOiBVcGRhdGUgdHJhbnNsYXRpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL3VrLnBvOgotCSAgKiBwby92aS5wbzoKLQkgIFVwZGF0ZSB0cmFuc2xhdGlvbnMuCi0KLTIwMDctMDYtMTUgMTQ6Mzc6MjggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IEZpeCB0eXBvIGluIHRoZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzoKLQkgIEZpeCB0eXBvIGluIHRoZSBkb2NzLgotCi0yMDA3LTA2LTE1IDExOjQ5OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OiBBZGQgZG9jcyBmb3IgbmV3IG1ldGhvZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBkb2NzIGZvciBuZXcgbWV0aG9kcy4KLQotMjAwNy0wNi0xNSAxMTozNToyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IERvbid0IHVzZSBHU2xpY2UgYmVjYXVzZSB3ZSBkb24ndCBkZXBlbmQgb24gPj0gMi4xMCB5ZXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3RfbXVsdGlfcXVldWVfaXRlbV9kZXN0cm95KSwKLQkgIChnc3RfbXVsdGlfcXVldWVfaXRlbV9uZXcpOgotCSAgRG9uJ3QgdXNlIEdTbGljZSBiZWNhdXNlIHdlIGRvbid0IGRlcGVuZCBvbiA+PSAyLjEwIHlldC4KLQotMjAwNy0wNi0xNSAxMTowOTozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IFJlbW92ZSBkZWJ1ZyBwcmludGYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoKSwKLQkgICh1cGRhdGVfdGltZV9sZXZlbCksIChhcHBseV9zZWdtZW50KSwgKGFwcGx5X2J1ZmZlciksCi0JICAoZ3N0X3NpbmdsZV9xdWV1ZV9wdXNoX29uZSksIChnc3RfbXVsdGlfcXVldWVfaXRlbV9uZXcpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9sb29wKSwgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KSwgKHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiKSwKLQkgIChzaW5nbGVfcXVldWVfdW5kZXJydW5fY2IpLCAoc2luZ2xlX3F1ZXVlX2NoZWNrX2Z1bGwpOgotCSAgUmVtb3ZlIGRlYnVnIHByaW50Zi4KLQotMjAwNy0wNi0xNSAxMTowMDozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuKjogVmFyaW91cyBjbGVhbnVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOiAoZ3N0X2RhdGFfcXVldWVfY2xlYW51cCksCi0JICAoZ3N0X2RhdGFfcXVldWVfZmluYWxpemUpLCAoZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2lzX2VtcHR5KSwKLQkgIChnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcpLCAoZ3N0X2RhdGFfcXVldWVfcHVzaCksCi0JICAoZ3N0X2RhdGFfcXVldWVfcG9wKSwgKGdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZCksCi0JICAoZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQpLCAoZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkgIFZhcmlvdXMgY2xlYW51cHMuCi0JICBBZGRlZCBtZXRob2RzIHRvIGdldCB0aGUgY3VycmVudCBsZXZlbHMgYW5kIHRvIGluZm9ybSB0aGUgcXVldWUgdGhhdCB0aGUKLQkgICdmdWxsJyBsaW1pdHMgY2hhbmdlZC4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3RfbXVsdGlfcXVldWVfaW5pdCksCi0JICAoZ3N0X211bHRpX3F1ZXVlX2ZpbmFsaXplKSwgKGdzdF9tdWx0aV9xdWV1ZV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zaW5nbGVfcXVldWVfZmx1c2gpLCAodXBkYXRlX3RpbWVfbGV2ZWwpLCAoYXBwbHlfc2VnbWVudCksCi0JICAoYXBwbHlfYnVmZmVyKSwgKGdzdF9zaW5nbGVfcXVldWVfcHVzaF9vbmUpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9pdGVtX3N0ZWFsX29iamVjdCksCi0JICAoZ3N0X211bHRpX3F1ZXVlX2l0ZW1fZGVzdHJveSksIChnc3RfbXVsdGlfcXVldWVfaXRlbV9uZXcpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9sb29wKSwgKGdzdF9tdWx0aV9xdWV1ZV9jaGFpbiksCi0JICAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfYWN0aXZhdGVfcHVzaCksIChnc3RfbXVsdGlfcXVldWVfc2lua19ldmVudCksCi0JICAoZ3N0X211bHRpX3F1ZXVlX2dldGNhcHMpLCAoZ3N0X211bHRpX3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKSwKLQkgIChnc3RfbXVsdGlfcXVldWVfc3JjX3F1ZXJ5KSwgKHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiKSwKLQkgIChzaW5nbGVfcXVldWVfdW5kZXJydW5fY2IpLCAoc2luZ2xlX3F1ZXVlX2NoZWNrX2Z1bGwpLAotCSAgKGdzdF9zaW5nbGVfcXVldWVfbmV3KToKLQkgIEtlZXAgdHJhY2sgb2YgdGltZSBpbiB0aGUgcXVldWUgYnkgbWVhc3VyaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLQkgIHJ1bm5pbmdfdGltZSBvbiBpbnB1dCBhbmQgb3V0cHV0LiBUaGlzIGdpdmVzIG1vcmUgYWNjdXJhdGUgcmVzdWx0cyBhbmQKLQkgIGNhbiBjb21wZW5zYXRlIGZvciBzZWdtZW50cyBjb3JyZWN0bHkuCi0JICBNYWtlIGEgcXVldWUgYnkgZGVmYXVsdCBvbmx5IDUgYnVmZmVycyBkZWVwLiBXZSB3aWxsIG5vdyBpbmNyZWFzZSB0aGUKLQkgIGJ1ZmZlciBzaXplIGRlcGVuZGluZyBvbiB0aGUgZmlsbGVkbmVzcyBvZiB0aGUgb3RoZXIgcXVldWVzLgotCSAgRmFjdG9yIG91dCBjb21tb25nIGZsdXNoIGNvZGUuCi0JICBNYWtlIHN1cmUgd2UgZG9uJ3QgYWRkIGFkZGl0aW9uYWwgcmVmY291bnRzIHRvIGJ1ZmZlcnMgd2hlbiB3ZSBjYW4gYXZvaWQKLQkgIGl0LgotCSAgUHJvcGFnYXRlIEdzdEZsb3dSZXR1cm4gZGlmZmVyZW50bHkuCi0JICBVc2UgR1NsaWNlIGZvciBpbnRlcm1lZGlhdGUgR3N0TXVsdGlRdWV1ZUl0ZW1zLgotCSAgS2VlcCB0cmFjayBvZiBFT1MuCi0JICBSZXNpemUgcXVldWVzIG9uIG92ZXIgYW5kIHVuZGVycnVucyBiYXNlZCBvbiBmaWxsZWQgbGV2ZWwgb2Ygb3RoZXIKLQkgIHF1ZXVlcy4KLQkgIFdoZW4gY2hlY2tpbmcgaWYgdGhlIHF1ZXVlIGlzIGZpbGxlZCwgcHJlZmVyIHRvIG1lYXN1cmUgaW4gdGltZSBpZiB3ZQotCSAgY2FuIGFuZCBmYWxsIGJhY2sgdG8gYnl0ZXMgd2hlbiBubyB0aW1lIGlzIGtub3duLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBGaXggcmV0dXJuIHZhbHVlLgotCi0yMDA3LTA2LTE1IDEwOjQ4OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogV29yayBhcm91bmQgdGhlIGJyb2tlbm5lc3Mgb2YgdGhlIGV2ZW50IHZtZXRob2QgaW4gYmFzZXRyYW5zZm9ybS4gUHJlZmVyIHRvIHJldHVybiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudCk6Ci0JICBXb3JrIGFyb3VuZCB0aGUgYnJva2VubmVzcyBvZiB0aGUgZXZlbnQgdm1ldGhvZCBpbiBiYXNldHJhbnNmb3JtLiBQcmVmZXIKLQkgIHRvIHJldHVybiBUUlVFIHdoZW4gdGhlIHN1YmNsYXNzIHJldHVybmVkIEZBTFNFIChtZWFuaW5nIGRvbid0IGZvcndhcmQKLQkgIHRoZSBldmVudCkuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgQ2xhcmlmeSB0aGUgZG9jcy4KLQotMjAwNy0wNi0xNSAxMDo0Mzo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9wdXNoX2V2ZW50KSwgKGdzdF9wYWRfc2VuZF9ldmVudCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3kpLAotCSAgKGdzdF9iYXNlX3NyY19kZWZhdWx0X3F1ZXJ5KSwgKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLAotCSAgKGdzdF9iYXNlX3NyY19zdGFydCk6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzogKHNldHVwX3BpcGVsaW5lKToKLQkgIEltcHJvdmUgZGVidWdnaW5nLgotCi0yMDA3LTA2LTE1IDA3OjI3OjAwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDogQWRkZWQgbW9yZSBmb3JtYXRzIHRvIGNhcHMgdGFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgotCSAgQWRkZWQgbW9yZSBmb3JtYXRzIHRvIGNhcHMgdGFibGUuCi0KLTIwMDctMDYtMTUgMDc6MDI6MDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBSZW1vdmUgY3J1ZnkgY29kZS4gR09wdGlvbiBkb2VzIG5vdCBuZWVkIHRoaXMgd29ya2Fyb3VuZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKLQkgIFJlbW92ZSBjcnVmeSBjb2RlLiBHT3B0aW9uIGRvZXMgbm90IG5lZWQgdGhpcyB3b3JrYXJvdW5kLgotCi0yMDA3LTA2LTE0IDIwOjI5OjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiBGaXggd3JvbmcgZ2V0dGVyIGZvciBlbnVtcyBpbiBjb250cm9sbGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3NldF9pbnRlcnBvbGF0aW9uX21vZGUpOgotCSAgRml4IHdyb25nIGdldHRlciBmb3IgZW51bXMgaW4gY29udHJvbGxlci4KLQotMjAwNy0wNi0xNCAxNzozNjoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogSW50ZXJjZXB0IGNyaXRpY2FscyBhbmQgd2FybmluZ3MgaW4gdGhlIEdzdC1QaG9ub24gbG9nIGRvbWFpbiwgc28KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX2luaXQpOgotCSAgSW50ZXJjZXB0IGNyaXRpY2FscyBhbmQgd2FybmluZ3MgaW4gdGhlIEdzdC1QaG9ub24gbG9nIGRvbWFpbiwgc28KLQkgIEFTU0VSVF9DUklUSUNBTCgpIGV0Yy4gY2FuIGJlIHVzZWQgaW4gZ3N0LXBob25vbidzIHVuaXQgdGVzdHMgYXMKLQkgIHdlbGwuCi0KLTIwMDctMDYtMTQgMTY6MDc6MDkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RwYXJhbXNwZWNzLmM6IFNpbmNlIHRoaXMgZmlsZSBkb2Vzbid0IGluY2x1ZGUgImdzdC5oIiBpdCB3aWxsIG5vdCBnbyB0aHJvdWdoIHRoZSBtYWNyb3MgdGhhdCBkaXNhYmxlIEdTVF9MT0cgaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYXJhbXNwZWNzLmM6IChfZ3N0X3BhcmFtX2ZyYWN0aW9uX3ZhbGlkYXRlKToKLQkgIFNpbmNlIHRoaXMgZmlsZSBkb2Vzbid0IGluY2x1ZGUgImdzdC5oIiBpdCB3aWxsIG5vdCBnbyB0aHJvdWdoIHRoZQotCSAgbWFjcm9zIHRoYXQgZGlzYWJsZSBHU1RfTE9HIGlmIGRlYnVnZ2luZyB3YXMgZGlzYWJsZWQuCi0KLTIwMDctMDYtMTQgMTU6NTY6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFVnbHkgJ2ZpeCcgZm9yIHRoZSBjb250cm9sbGVyIHVuaXQgdGVzdCBvbiB0aGUgcDUgYm90OiBpbiBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQoKSBjaGVjayB3aGV0aGVyIHRoZSB2YWx1ZXMgYXJlICdhbC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgotCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjLmluOgotCSAgVWdseSAnZml4JyBmb3IgdGhlIGNvbnRyb2xsZXIgdW5pdCB0ZXN0IG9uIHRoZSBwNSBib3Q6IGluCi0JICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQoKSBjaGVjayB3aGV0aGVyIHRoZSB2YWx1ZXMgYXJlICdhbG1vc3QKLQkgIGVxdWFsJyBieSBhbGxvd2luZyBhIHNtYWxsIGFic29sdXRlIGVycm9yLCB3aGljaCBzaG91bGQgYmUgZ29vZAotCSAgZW5vdWdoIGZvciBvdXIgdXNlIGNhc2VzIChub3JtYWwgbnVtYmVycyBhbmQgdmFsdWVzIGNsb3NlIHRvIDApLgotCSAgUHJvcGVyIGZpeGFnZSBsZWZ0IHRvIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgYWZpY2lvbmFkb3MuCi0KLTIwMDctMDYtMTQgMTI6MDM6NDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBBZGQgdHdvIGJyZWFrcyB0aGF0cyB3aGVyZSBtaXNzaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcmVzZXRfcW9zKSwKLQkgIChnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgotCSAgQWRkIHR3byBicmVha3MgdGhhdHMgd2hlcmUgbWlzc2luZy4KLQotMjAwNy0wNi0xNCAxMTo1Njo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQVBJOiBhZGQgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KCkgYW5kIGFzc2VydF9lcXVhbHNfZmxvYXQoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgQVBJOiBhZGQgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KCkgYW5kIGFzc2VydF9lcXVhbHNfZmxvYXQoKS4KLQkgIEFkZCBkb2N1bWVudGF0aW9uIGZvciBzb21lIG9mIHRoZSBtYWNyb3MuCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVXNlIG5ld2x5LWFkZGVkIGFzc2VydHMuCi0KLTIwMDctMDYtMTQgMTA6MzM6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHBhZC5jOiBTaG93IHRoZSBjYXBzIGNoYW5nZSBpbiB0aGUgbG9nIHRvIGhlbHAgc3BvdHRpbmcgdGhlIGNhc2Ugb2Ygbm90IGV4YWN0bHkgbWF0Y2hpbmcgY2Fwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlcl9mdWxsKSwgKGdzdF9wYWRfcHVzaCk6Ci0JICBTaG93IHRoZSBjYXBzIGNoYW5nZSBpbiB0aGUgbG9nIHRvIGhlbHAgc3BvdHRpbmcgdGhlIGNhc2Ugb2Ygbm90Ci0JICBleGFjdGx5IG1hdGNoaW5nIGNhcHMuCi0KLTIwMDctMDYtMTQgMDg6NTI6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6IEZpeCB0eXBvcywgc3BvdHRlZCBieSBUaGlqcyBWZXJtZWlyICgjNDQ3MTkwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSAgRml4IHR5cG9zLCBzcG90dGVkIGJ5IFRoaWpzIFZlcm1laXIgKCM0NDcxOTApLgotCi0yMDA3LTA2LTEzIDE2OjE1OjIzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9wbHVnaW5zL3RtcGwvLmN2c2lnbm9yZTogSWdub3JlIGZpbGUgdG8ga2VlcCB0aGUgYnVpbGRib3RzIGhhcHB5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL3RtcGwvLmN2c2lnbm9yZToKLQkgIElnbm9yZSBmaWxlIHRvIGtlZXAgdGhlIGJ1aWxkYm90cyBoYXBweQotCi0yMDA3LTA2LTEzIDE1OjM5OjUzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9wbHVnaW5zLzogUHVsbCBmZHNpbmsgaW50byB0aGUgZG9jcyB0b28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgUHVsbCBmZHNpbmsgaW50byB0aGUgZG9jcyB0b28uCi0KLTIwMDctMDYtMTEgMDc6MTQ6NTMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6IEFjdHVhbGx5IHVzZSB0aGUgbmV3IGZ1bmN0aW9ucyB3aXRoIG1pbi9tYXggY2hlY2tzIGZvciB0aGUgdHJpZ2dlciBhbmQgbm9uZSBpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICBBY3R1YWxseSB1c2UgdGhlIG5ldyBmdW5jdGlvbnMgd2l0aCBtaW4vbWF4IGNoZWNrcyBmb3IgdGhlIHRyaWdnZXIgYW5kCi0JICBub25lIGludGVycG9sYXRpb24gbW9kZXMgZm9yIGdldCgpIGFuZCBnZXRfdmFsdWVfYXJyYXkoKSBpbnN0ZWFkIG9mCi0JICBqdXN0IHRoZSBsYXR0ZXIuCi0KLTIwMDctMDYtMTAgMTI6Mzg6MTEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IFVuc2V0IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIEdWYWx1ZXMgd2hlbiBmcmVlaW5nIHRoZSBjb3JyZXNwb25kaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfZnJlZSk6Ci0JICBVbnNldCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBHVmFsdWVzIHdoZW4gZnJlZWluZyB0aGUgY29ycmVzcG9uZGluZwotCSAgR3N0Q29udHJvbGxlclByb3BlcnR5IHN0cnVjdC4KLQotMjAwNy0wNi0wOSAxNjo1ODozMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyLzogUHJvdGVjdCBhZ2FpbnN0IHZhbHVlcyBsYXJnZXIgb3Igc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIG9yIG1heGltdW0gYWxsb3dlZCB2YWx1ZSBmb3IgdGhlIHByb3AuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X2ZpbmRfY29udHJvbF9wb2ludF9ub2RlKSwKLQkgIChpbnRlcnBvbGF0ZV9ub25lX2dldCksIChpbnRlcnBvbGF0ZV9ub25lX2dldF9lbnVtX3ZhbHVlX2FycmF5KSwKLQkgIChpbnRlcnBvbGF0ZV9ub25lX2dldF9zdHJpbmdfdmFsdWVfYXJyYXkpLAotCSAgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0KSwKLQkgIChpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF9lbnVtX3ZhbHVlX2FycmF5KSwKLQkgIChpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF9zdHJpbmdfdmFsdWVfYXJyYXkpOgotCSAgUHJvdGVjdCBhZ2FpbnN0IHZhbHVlcyBsYXJnZXIgb3Igc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIG9yIG1heGltdW0KLQkgIGFsbG93ZWQgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eSB3aGVuIHVzaW5nIHZhbHVlcyB0aGF0IGNhbiBiZSBjb21wYXJlZC4KLQkgIE9wdGltaXplIHRyaWdnZXIgaW50ZXJwb2xhdG9yIGEgYml0IGJ5IHRha2luZyB0aGUgbGFzdCByZXF1ZXN0ZWQgdmFsdWUKLQkgIGludG8gYWNjb3VudCBpbnN0ZWFkIG9mIGFsd2F5cyBsb29waW5nIHRocm91Z2ggdGhlIGNvbXBsZXRlIGxpc3QuCi0JICBGaXggY29kaW5nIHN0eWxlIGEgYml0LCBldmVyeXdoZXJlIGVsc2Ugd2UgdXNlICJyZXR1cm4gZm9vIiBpbnN0ZWFkCi0JICBvZiAicmV0dXJuIChmb28pIi4KLQkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhlIHByb3RlY3Rpb24gYWdhaW5zdCB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsCi0JICB2YWx1ZXMuCi0KLTIwMDctMDYtMDggMjE6MDg6MjQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZG9jcy9yYW5kb20vc2xvbW8vY29udHJvbGxlci50eHQ6IEFkZCBzb21lIHRob3VnaHRzIGFib3V0IHRoZSBmdXR1cmUgb2YgdGhlIGNvbnRyb2xsZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vc2xvbW8vY29udHJvbGxlci50eHQ6Ci0JICBBZGQgc29tZSB0aG91Z2h0cyBhYm91dCB0aGUgZnV0dXJlIG9mIHRoZSBjb250cm9sbGVyLgotCi0yMDA3LTA2LTA4IDExOjAwOjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IERvbid0IG92ZXJmbG93IGluIHJldGltZXN0YW1waW5nIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6Ci0JICBEb24ndCBvdmVyZmxvdyBpbiByZXRpbWVzdGFtcGluZyBjb2RlLgotCi0yMDA3LTA2LTA3IDIwOjUxOjM1ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOiBVc2UgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlIGZvciBjb252ZXJzaW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzogKERFRklORV9DVUJJQ19HRVQpOgotCSAgVXNlIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSBmb3IgY29udmVyc2lvbnMuCi0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIG5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCi0KLTIwMDctMDYtMDcgMTc6MjI6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBTbWFsbCBkb2NzIGFkZGl0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgU21hbGwgZG9jcyBhZGRpdGlvbi4KLQotMjAwNy0wNi0wNyAxNDo0OTowMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBSRUFETUU6IFJlbW92ZSB0aGF0IHRlc3QgbGluZSBhZ2Fpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBSRUFETUU6Ci0JICBSZW1vdmUgdGhhdCB0ZXN0IGxpbmUgYWdhaW4uCi0KLTIwMDctMDYtMDcgMTQ6MzY6MDIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgUkVBRE1FOiBUZXN0IGNvbW1pdCBtYWlsIHNlbmRpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogUkVBRE1FOgotCSAgVGVzdCBjb21taXQgbWFpbCBzZW5kaW5nLgotCi0yMDA3LTA2LTA3IDE0OjE3OjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogRml4IHR5cG8gYW5kIHRlc3QgY29tbWl0IG1haWwgc2VuZGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBGaXggdHlwbyBhbmQgdGVzdCBjb21taXQgbWFpbCBzZW5kaW5nLgotCi0yMDA3LTA2LTA3IDE0OjEyOjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOiBJbXByb3ZlIGNvbW1lbnQgYW5kIHRlc3QgY29tbWl0IG1haWwgc2VuZGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkgIEltcHJvdmUgY29tbWVudCBhbmQgdGVzdCBjb21taXQgbWFpbCBzZW5kaW5nLgotCi0yMDA3LTA2LTA3IDEwOjExOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IEFkZCBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBtZXNzYWdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChmaW5kX21lc3NhZ2UpLCAoYmluX3JlcGxhY2VfbWVzc2FnZSksIChpc19lb3MpLAotCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSksCi0JICAoYmluX2hhbmRsZV9hc3luY19zdGFydCksIChiaW5faGFuZGxlX2FzeW5jX2RvbmUpLAotCSAgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6Ci0JICBBZGQgaGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgbWVzc2FnZXMuCi0JICBHZW5lcmF0ZSB0aGUgYXN5bmMtZG9uZSBtZXNzYWdlcyB0b2dldGhlciB3aXRoIHRoZSBzdGF0ZSBjaGFuZ2UKLQkgIG1lc3NhZ2VzLgotCSAgU21hbGwgY2xlYW51cHMgaW4gaGFuZGxpbmcgdG9wbGV2ZWwgYmlucy4KLQotMjAwNy0wNi0wNiAxODoxMToxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgRml4IG11bHRpcXVldWUgbGVha2luZyBidWZmZXJzIGFuZCBldmVudHMgd2hlbiBkb3duc3RyZWFtIG9yIHRoZSBxdWV1ZSBhcmUgZmx1c2hpbmcuIE1ha2UgcmVmY291bnRpbmcgYXNzdW1wdGlvbnMgZXhwLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3Rfc2luZ2xlX3F1ZXVlX3B1c2hfb25lKSwKLQkgIChnc3RfbXVsdGlfcXVldWVfaXRlbV9uZXcpLCAoZ3N0X211bHRpX3F1ZXVlX2NoYWluKSwKLQkgIChnc3RfbXVsdGlfcXVldWVfc2lua19ldmVudCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYzogKG11bHRpcXVldWVfc3VpdGUpOgotCSAgRml4IG11bHRpcXVldWUgbGVha2luZyBidWZmZXJzIGFuZCBldmVudHMgd2hlbiBkb3duc3RyZWFtIG9yIHRoZQotCSAgcXVldWUgYXJlIGZsdXNoaW5nLiBNYWtlIHJlZmNvdW50aW5nIGFzc3VtcHRpb25zIGV4cGxpY2l0IGFuZAotCSAgZG9jdW1lbnQgdGhlbSAoc2hvdWxkbid0IGJyZWFrIGV4aXN0aW5nIGNvZGUgdGhhdCB1c2VzIGl0IG90aGVyIHRoYW4KLQkgIG1heWJlIGxlYWsgbWluaW9iamVjdHMsIGJ1dCB0aGF0IGFscmVhZHkgaGFwcGVucyBhbnl3YXkpLiBBZGQgdW5pdAotCSAgdGVzdCBmb3IgdGhlIG1vc3QgY29tbW9uIGZsdXNoaW5nIGNhc2UuIEZpeGVzICM0MjM3MDAuCi0KLTIwMDctMDYtMDYgMTQ6MjA6MDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IENsYXJpZnkgZG9jczogVGhlIGdldF9hbGwsIGdldF92YWx1ZV9hcnJheShzKSBmdW5jdGlvbnMgZG9uJ3QgbW9kaWZ5IHRoZSBHT2JqZWN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICBDbGFyaWZ5IGRvY3M6IFRoZSBnZXRfYWxsLCBnZXRfdmFsdWVfYXJyYXkocykgZnVuY3Rpb25zCi0JICBkb24ndCBtb2RpZnkgdGhlIEdPYmplY3QgcHJvcGVydGllcy4KLQotMjAwNy0wNi0wNiAxNDowMTo1NiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyLzogRmFjdG9yIG91dCB0aGUgJ3NldCcgbG9naWMgaW50byBnc3RfY29udHJvbGxlcl9zZXRfdW5sb2NrZWQgZm9yIHRoZSBnc3RfY29udHJvbGxlcl9zZXQgYW5kIGdzdF8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKSwKLQkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9wcmVwZW5kX2RlZmF1bHQpLAotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X25ldyksIChnc3RfY29udHJvbGxlcl9zZXRfdW5sb2NrZWQpLAotCSAgKGdzdF9jb250cm9sbGVyX3NldCksIChnc3RfY29udHJvbGxlcl9zZXRfZnJvbV9saXN0KSwKLQkgIChnc3RfY29udHJvbGxlcl91bnNldCksIChnc3RfY29udHJvbGxlcl91bnNldF9hbGwpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgRmFjdG9yIG91dCB0aGUgJ3NldCcgbG9naWMgaW50byBnc3RfY29udHJvbGxlcl9zZXRfdW5sb2NrZWQgZm9yIHRoZQotCSAgZ3N0X2NvbnRyb2xsZXJfc2V0IGFuZCBnc3RfY29udHJvbGxlcl9zZXRfZnJvbV9saXN0IGZ1bmN0aW9ucy4KLQkgIFRvIG1ha2UgbGlmZSBvZiB0aGUgaW50ZXJwb2xhdG9ycyBlYXNpZXIgYWx3YXlzIGFkZCBhIGNvbnRyb2wgcG9pbnQKLQkgIGF0IHRpbWVzdGFtcCB6ZXJvIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUuCi0JICBJbiB0aGUgbGluZWFyIGludGVycG9sYXRvciBtYWtlIHRoaW5ncyBtb3JlIG9idmlvdXMgYnkgYmV0dGVyIHZhcmlhYmxlCi0JICBuYW1pbmcgKHNsb3BlKS4KLQkgIEltcGxlbWVudCBjdWJpYyBpbnRlcnBvbGF0aW9uIG1vZGUgKGJ5IHVzaW5nIGEgbmF0dXJhbCBjdWJpYyBzcGxpbmUpCi0JICBhbmQgbWFwIHRoZSBxdWFkcmF0aWMgaW50ZXJwb2xhdGlvbiBtb2RlIHRvIHRoaXMgdG9vIChhcyBxdWFkcmF0aWMKLQkgIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLCBzZWUgZGlzY3Vzc2lvbiBvbiB0aGUgbGlzdCkuCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9jb250cm9sbGVyX3N1aXRlKToKLQkgIEFkZCB1bml0IHRlc3QgZm9yIHRoZSBjdWJpYyBpbnRlcnBvbGF0aW9uIG1vZGUgYW5kIGNoZWNrIGV2ZXJ5d2hlcmUKLQkgIGlmIHRoZSBpbnRlcnBvbGF0aW9uIG1vZGUgY291bGQgYmUgc2V0IGFzIGV4cGVjdGVkLgotCi0yMDA3LTA2LTA2IDExOjM4OjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGFyYW1zcGVjcy5jOiBEb24ndCB1c2UgR0xpYi0yLjEwIGZ1bmN0aW9ucywgd2Ugc3RpbGwgZGVwZW5kIG9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhcmFtc3BlY3MuYzogKGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uX2dldF90eXBlKToKLQkgIERvbid0IHVzZSBHTGliLTIuMTAgZnVuY3Rpb25zLCB3ZSBzdGlsbCBkZXBlbmQgb24KLQkgIEdMaWItaG93LW9sZC1pcy1pdC1hZ2Fpbi0yLjguCi0KLTIwMDctMDYtMDYgMTE6MTg6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIEdzdFBhcmFtU3BlY0ZyYWN0aW9uLCBzbyBlbGVtZW50cyBjYW4gaGF2ZSBmcmFjdGlvbiBwcm9wZXJ0aWVzIHdpdGhvdXQgbG90cyBvZiBwYWluZnVsIHN0cmluZyBwYXJzaW5nICgjNDQ0Ni4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdC5jOgotCSAgKiBnc3QvZ3N0Lmg6Ci0JICAqIGdzdC9nc3RwYXJhbXNwZWNzLmM6IChfZ3N0X3BhcmFtX2ZyYWN0aW9uX2luaXQpLAotCSAgKF9nc3RfcGFyYW1fZnJhY3Rpb25fc2V0X2RlZmF1bHQpLCAoX2dzdF9wYXJhbV9mcmFjdGlvbl92YWxpZGF0ZSksCi0JICAoX2dzdF9wYXJhbV9mcmFjdGlvbl92YWx1ZXNfY21wKSwKLQkgIChnc3RfcGFyYW1fc3BlY19mcmFjdGlvbl9nZXRfdHlwZSksIChnc3RfcGFyYW1fc3BlY19mcmFjdGlvbik6Ci0JICAqIGdzdC9nc3RwYXJhbXNwZWNzLmg6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZ3N0Ly5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYXJhbXNwZWNzLmM6IChnc3RfZHVtbXlfb2JqX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2R1bW15X29ial9jbGFzc19pbml0KSwgKGdzdF9kdW1teV9vYmpfaW5pdCksCi0JICAoZ3N0X2R1bW15X29ial9zZXRfcHJvcGVydHkpLCAoZ3N0X2R1bW15X29ial9nZXRfcHJvcGVydHkpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9wYXJhbV9zcGVjX3N1aXRlKToKLQkgIEFQSTogYWRkIEdzdFBhcmFtU3BlY0ZyYWN0aW9uLCBzbyBlbGVtZW50cyBjYW4gaGF2ZSBmcmFjdGlvbgotCSAgcHJvcGVydGllcyB3aXRob3V0IGxvdHMgb2YgcGFpbmZ1bCBzdHJpbmcgcGFyc2luZyAoIzQ0NDY0OCkuCi0KLTIwMDctMDYtMDUgMTY6MjU6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RvYmplY3QuYzogRml4IHNpZ25hbCBzaWduYXR1cmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9jbGFzc19pbml0KToKLQkgIEZpeCBzaWduYWwgc2lnbmF0dXJlLgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgQWRkIHNtYWxsIGNsYXJpZmljYXRpb24gaW4gdGhlIGFwaSBkb2NzLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19zZXRfbG9jYXRpb24pOgotCSAgU3RhdGVzIGFyZSBwcm90ZWN0ZWQgd2l0aCBvYmplY3QgbG9jay4KLQotMjAwNy0wNi0wNSAxNDoxMTo1OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIEFVVEhPUlM6IEkgc2hvdWxkIHByb2JhYmx5IGJlIGxpc3RlZCBhcyBhbiBhdXRob3IgYnkgbm93LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIEFVVEhPUlM6Ci0JICBJIHNob3VsZCBwcm9iYWJseSBiZSBsaXN0ZWQgYXMgYW4gYXV0aG9yIGJ5IG5vdy4KLQkgICogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIFVwZGF0ZSB0aGUgcmVsZWFzZSBkb2MKLQotMjAwNy0wNi0wNSAxMzo0OToxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IE1ha2UgZG9jcyBmb3IgZ3N0X3ZhbHVlX2NvbXBhcmUoKSBtZW50aW9uIHJldHVybiBlbnVtcyB0aGF0IGFjdHVhbGx5IGV4aXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgTWFrZSBkb2NzIGZvciBnc3RfdmFsdWVfY29tcGFyZSgpIG1lbnRpb24gcmV0dXJuIGVudW1zIHRoYXQKLQkgIGFjdHVhbGx5IGV4aXN0LgotCi0yMDA3LTA2LTA1IDEzOjIxOjQxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBCYWNrIHRvIENWUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gQ1ZTCi0KLT09PSByZWxlYXNlIDAuMTAuMTMgPT09Ci0KLTIwMDctMDYtMDUgMTI6NDc6MjMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogZ3N0cmVhbWVyLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi92czYvZ3JhbW1hci5kc3A6Ci0JKiB3aW4zMi92czYvZ3N0X2luc3BlY3QuZHNwOgotCSogd2luMzIvdnM2L2dzdF9sYXVuY2guZHNwOgotCSogd2luMzIvdnM2L2dzdHJlYW1lci5kc3c6Ci0JKiB3aW4zMi92czYvbGliZ3N0YmFzZS5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0Y29udHJvbGxlci5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0Y29yZWVsZW1lbnRzLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RkYXRhcHJvdG9jb2wuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdG5ldC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0cmVhbWVyLmRzcDoKLQkgIFJlbGVhc2UgMC4xMC4xMyAiV2l0aCBvciB3aXRob3V0IHlvdSIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmVsZWFzZSAwLjEwLjEzICJXaXRoIG9yIHdpdGhvdXQgeW91IgotCi0yMDA3LTA2LTA1IDEyOjA2OjQ0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDctMDUtMjkgMTU6NTA6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBSRUFETUU6Ci0JICB0cmlnZ2VyIGEgbWFpbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0cmlnZ2VyIGEgbWFpbAotCi0yMDA3LTA1LTI5IDE0OjQ5OjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogUkVBRE1FOgotCSAgdHJpZ2dlciBhIG1haWwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdHJpZ2dlciBhIG1haWwKLQotMjAwNy0wNS0yOSAxNDo0ODo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIFJFQURNRToKLQkgIHRyaWdnZXIgYSBtYWlsCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRyaWdnZXIgYSBtYWlsCi0KLTIwMDctMDUtMjkgMTQ6Mzc6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBSRUFETUU6Ci0JICBzZW5kIGEgbWFpbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzZW5kIGEgbWFpbAotCi0yMDA3LTA1LTI5IDExOjUyOjI4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogUkVBRE1FOgotCSAgdGVzdCBjb21taXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdGVzdCBjb21taXQKLQotMjAwNy0wNS0yOSAxMTo0MDozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIFJFQURNRToKLQkgIHRlc3QgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRlc3QgY29tbWl0Ci0KLTIwMDctMDUtMjkgMTE6MDA6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBSRUFETUU6Ci0JICB0ZXN0IGNvbW1pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0ZXN0IGNvbW1pdAotCi0yMDA3LTA1LTI5IDEwOjQzOjIzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogUkVBRE1FOgotCSAgdGVzdCBjb21taXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdGVzdCBjb21taXQKLQotMjAwNy0wNS0yOSAxMDozNTo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIFJFQURNRToKLQkgIHRlc3QgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRlc3QgY29tbWl0Ci0KLTIwMDctMDUtMjkgMTA6MzQ6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBSRUFETUU6Ci0JICB0ZXN0IGNvbW1pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0ZXN0IGNvbW1pdAotCi0yMDA3LTA1LTI5IDEwOjIwOjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogUkVBRE1FOgotCSAgdGVzdCBjb21taXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdGVzdCBjb21taXQKLQotMjAwNy0wNS0yNSAxNTozNjo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBNYWtlIHN1cmUgdGhhdCB0aGUgY2hpbGQgYmluIHN0b3BzIGFmdGVyIGNvbXBsZXRpbmcgdGhlIGFzeW5jIHN0YXRlIGNoYW5nZSBzbyB0aGF0IHRoZSBwYXJlbnQgY2FuIGNvbnRpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2hhbmRsZV9hc3luY19kb25lKToKLQkgIE1ha2Ugc3VyZSB0aGF0IHRoZSBjaGlsZCBiaW4gc3RvcHMgYWZ0ZXIgY29tcGxldGluZyB0aGUgYXN5bmMgc3RhdGUKLQkgIGNoYW5nZSBzbyB0aGF0IHRoZSBwYXJlbnQgY2FuIGNvbnRpbnVlIHRoZSBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORy4KLQkgIEZpeGVzICM0NDExNTkuCi0KLTIwMDctMDUtMjUgMDk6MjY6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogVXNlIGFkZGl0aW9uYWwgcmVmY291bnRpbmcgdG8gYXZvaWQgY3Jhc2hlcyB3aGVuIGR5bmFtaWNhbGx5IGFkZGluZyBhbmQgcmVtb3ZpbmcgcGFkcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfZmluYWxpemUpLAotCSAgKHVucmVmX2RhdGEpLCAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2NoZWNrX3BhZHMpOgotCSAgVXNlIGFkZGl0aW9uYWwgcmVmY291bnRpbmcgdG8gYXZvaWQgY3Jhc2hlcyB3aGVuIGR5bmFtaWNhbGx5IGFkZGluZyBhbmQKLQkgIHJlbW92aW5nIHBhZHMuIEZpeGVzICM0MjAyMDYuCi0KLTIwMDctMDUtMjQgMTU6MDA6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guYzogV2hlbiBidWZmZXJpbmcgZ29lcyBmcm9tIGEgdHdvIGRpZ2l0IHRvIGEgc2luZ2xlIGRpZ2l0IG51bWJlciwgbWFrZSBzdXJlIHRvIHJlbW92ZSB0aGUgb2xkIHNlY29uZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgotCSAgV2hlbiBidWZmZXJpbmcgZ29lcyBmcm9tIGEgdHdvIGRpZ2l0IHRvIGEgc2luZ2xlIGRpZ2l0IG51bWJlciwgbWFrZSBzdXJlCi0JICB0byByZW1vdmUgdGhlIG9sZCBzZWNvbmQgZGlnaXQgYnkgd3JpdGluZyBhIGJsYW5rIG92ZXIgaXQuCi0KLTIwMDctMDUtMjQgMTI6MTk6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6IEVsaW1pbmF0ZSB0YWJzIGFuZCB0cmFpbGluZyBjb21tYSBpbiBlbnVtIGxpc3Q7IGZpeCBzb21lIHR5cG9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmM6Ci0JICBFbGltaW5hdGUgdGFicyBhbmQgdHJhaWxpbmcgY29tbWEgaW4gZW51bSBsaXN0OyBmaXggc29tZSB0eXBvcy4KLQotMjAwNy0wNS0yNCAxMTo1MDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiBBbGxvdyByZWZjb3VudCBvZiAzIGFuZCA0IGJlY2F1c2Ugc29tZSBzdGF0ZSB0aHJlYWQgbWlnaHQgc3RpbGwgYmUgYnVzeSB3aXRoIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFsbG93IHJlZmNvdW50IG9mIDMgYW5kIDQgYmVjYXVzZSBzb21lIHN0YXRlIHRocmVhZCBtaWdodCBzdGlsbCBiZSBidXN5Ci0JICB3aXRoIGl0LgotCi0yMDA3LTA1LTI0IDA5OjQxOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzLzogVGhlc2UgYXJlIG5vdCBpbnN0YWxsZWQgaGVhZGVycywgbm8gbmVlZCBmb3IgcGFkZGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSAgVGhlc2UgYXJlIG5vdCBpbnN0YWxsZWQgaGVhZGVycywgbm8gbmVlZCBmb3IgcGFkZGluZy4KLQotMjAwNy0wNS0yNCAwODozNTowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBFbmFibGUgbGF0ZW5jeSBmb3IgbmV4dCByZWxlYXNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX2dldF9zdGF0ZV9mdW5jKSwKLQkgIChnc3RfYmluX2NvbnRpbnVlX2Z1bmMpOgotCSAgRW5hYmxlIGxhdGVuY3kgZm9yIG5leHQgcmVsZWFzZS4KLQkgIFJlc3RvcmUgU1RBVEVfTE9DSyBhcm91bmQgcmVjYWxjX3N0YXRlIHRoYXQgd2FzIGxlZnQgb3V0IGR1cmluZyB0aGUKLQkgIHJld3JpdGUgYW5kIGNvdWxkIHJlc3VsdCBpbiByYWN5IGJlaGF2aW91ciB3aGVuIF9nZXRfc3RhdGUgYW5kCi0JICByZWNhbGNfc3RhdGUgYXJlIHJ1biBjb25jdXJyZW50bHkuIFNlZSAjNDQwNDYzLgotCi0yMDA3LTA1LTIzIDEzOjU2OjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogSW1wcm92ZSB0ZXN0X2FzeW5jX29yZGVyIHRvIGFsc28gd29yayB3aGVuIGJvdGggdGltZXJzIGFyZSBhbHJlYWR5IGV4cGlyZWQgd2hlbiB3ZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogKHN0b3JlX2NhbGxiYWNrKSwKLQkgIChHU1RfU1RBUlRfVEVTVCk6Ci0JICBJbXByb3ZlIHRlc3RfYXN5bmNfb3JkZXIgdG8gYWxzbyB3b3JrIHdoZW4gYm90aCB0aW1lcnMgYXJlIGFscmVhZHkKLQkgIGV4cGlyZWQgd2hlbiB3ZSBnZXQgc2NoZWR1bGVkIHRvIGNoZWNrIGl0LgotCi0yMDA3LTA1LTIyIDE3OjEwOjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YmluLio6ICdwcml2YXRlJyBpcyBhIGMrKyBrZXl3b3JkLCBsZXQncyBub3QgdXNlIHRoYXQgaW4gaGVhZGVyIGZpbGVzLCBvdGhlcndpc2UgYysrIGNvbXBpbGVycyB3aWxsIHRocm93IGEgdGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2luaXQpLCAoZ3N0X2Jpbl9kaXNwb3NlKSwKLQkgIChnc3RfYmluX3NldF9wcm9wZXJ0eSksIChnc3RfYmluX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICAncHJpdmF0ZScgaXMgYSBjKysga2V5d29yZCwgbGV0J3Mgbm90IHVzZSB0aGF0IGluIGhlYWRlciBmaWxlcywKLQkgIG90aGVyd2lzZSBjKysgY29tcGlsZXJzIHdpbGwgdGhyb3cgYSB0YW50cnVtLgotCi0yMDA3LTA1LTIyIDExOjU1OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zLzogVXNlICNpZmRlZiBmb3IgSEFWRV9YWVogZm9yIGNvbnNpc3RlbmN5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19kb19zZWVrKSwKLQkgIChnc3RfZmlsZV9zaW5rX2dldF9jdXJyZW50X29mZnNldCk6Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0aW5kZXhlcnMuYzogKHBsdWdpbl9pbml0KToKLQkgIFVzZSAjaWZkZWYgZm9yIEhBVkVfWFlaIGZvciBjb25zaXN0ZW5jeS4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmM6IChzZXR1cF9maWxlc2luayksCi0JICAoY2xlYW51cF9maWxlc2luayksIChHU1RfU1RBUlRfVEVTVCksIChmaWxlc2lua19zdWl0ZSk6Ci0JICBBZGQgc29tZSB1bml0IHRlc3RzIGZvciBmaWxlc2luay4KLQotMjAwNy0wNS0yMiAxMTo0MzowNyArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay4qOiBGaXggcG9zaXRpb24gcmVwb3J0aW5nOyByZW5hbWUgZGF0YV93cml0dGVuIG1lbWJlciB0byBjdXJyZW50X3BvcyB0byByZWZsZWN0IGl0cyByZWFsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgYXQgc2t5bmV0IGJlPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX29wZW5fZmlsZSksCi0JICAoZ3N0X2ZpbGVfc2lua19xdWVyeSksIChnc3RfZmlsZV9zaW5rX2RvX3NlZWspLAotCSAgKGdzdF9maWxlX3NpbmtfZ2V0X2N1cnJlbnRfb2Zmc2V0KSwgKGdzdF9maWxlX3NpbmtfcmVuZGVyKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oOgotCSAgRml4IHBvc2l0aW9uIHJlcG9ydGluZzsgcmVuYW1lIGRhdGFfd3JpdHRlbiBtZW1iZXIgdG8gY3VycmVudF9wb3MgdG8KLQkgIHJlZmxlY3QgaXRzIHJlYWwgbWVhbmluZyAoZml4ZXMgIzQxMjY0OCkuCi0KLTIwMDctMDUtMjIgMTE6MDk6NDUgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIEFkZCBhIHByb3BlcnR5IGZvciBiaW5zIHRoYXQgaGFuZGxlIHRoZSBzdGF0ZSBjaGFuZ2Ugb2YgdGhlaXIgY2hpbGRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX2luaXQpLAotCSAgKGdzdF9iaW5fZGlzcG9zZSksIChnc3RfYmluX3NldF9wcm9wZXJ0eSksIChnc3RfYmluX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICBBZGQgYSBwcm9wZXJ0eSBmb3IgYmlucyB0aGF0IGhhbmRsZSB0aGUgc3RhdGUgY2hhbmdlIG9mIHRoZWlyIGNoaWxkcy4KLQkgIEZpeGVzICM0MzU4ODAKLQotMjAwNy0wNS0yMiAxMDoyMTozMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXF1b3Rlcy54bWw6Ci0JKiBkb2NzL21hbnVhbC9tYW51YWwueG1sOgotCSAgYWRkIHF1b3RlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBxdW90ZQotCi0yMDA3LTA1LTIyIDA5OjU2OjI1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOiBVc2UgYW4gYXJyYXkgb2YgdGhlIGNvcnJlY3QgdHlwZSB3aGVuIHVzaW5nIF9nZXRfdmFsdWVfYXJyYXkgd2l0aCBsaW5lYXIgaW50ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgVXNlIGFuIGFycmF5IG9mIHRoZSBjb3JyZWN0IHR5cGUgd2hlbiB1c2luZyBfZ2V0X3ZhbHVlX2FycmF5IHdpdGgKLQkgIGxpbmVhciBpbnRlcnBvbGF0aW9uLgotCi0yMDA3LTA1LTIyIDA2OjM3OjM3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X3JlcXVpcmVzX2Nsb2NrLCBnc3RfZWxlbWVudF9wcm92aWRlc19jbG9jaywgZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQsIGdzdF9lbGVtZW50X2NsYXNzXy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X3JlcXVpcmVzX2Nsb2NrLAotCSAgZ3N0X2VsZW1lbnRfcHJvdmlkZXNfY2xvY2ssIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkLAotCSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHMsIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSwKLQkgIGdzdF9lbGVtZW50X2RlZmF1bHRfc2VuZF9ldmVudCwgZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUsCi0JICBnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSwgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlLAotCSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMsIGl0ZXJhdG9yX2FjdGl2YXRlX2ZvbGRfd2l0aF9yZXN5bmMpOgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfYWN0aXZhdGVfcHVsbCwgZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbiwKLQkgIGdzdF9wYWRfZml4YXRlX2NhcHMsIGdzdF9wYWRfY29uZmlndXJlX3NpbmssIGdzdF9wYWRfY29uZmlndXJlX3NyYywKLQkgIGdzdF9wYWRfcXVlcnksIGdzdF9wYWRfc2F2ZV90aHlzZWxmLCBoYW5kbGVfcGFkX2Jsb2NrLCBnc3RfcGFkX3B1c2gsCi0JICBnc3RfcGFkX2dldF9yYW5nZSwgZ3N0X3BhZF9wdWxsX3JhbmdlKToKLQkgICogZ3N0L2dzdHBhZC5oIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCwgR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1MsCi0JICBHU1RfRkxPV19OT1RfU1VQUE9SVEVELCBHU1RfRkxPV19JU19GQVRBTCwgR3N0UGFkQWN0aXZhdGVGdW5jdGlvbiwKLQkgIEdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uLCBHc3RQYWRDaGFpbkZ1bmN0aW9uLAotCSAgR3N0UGFkR2V0Q2Fwc0Z1bmN0aW9uLCBHc3RQYWRBY2NlcHRDYXBzRnVuY3Rpb24sCi0JICBHc3RQYWRGaXhhdGVDYXBzRnVuY3Rpb24sIEdzdFBhZFRlbXBsYXRlKToKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmMgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUsCi0JICBnc3RfcGlwZWxpbmVfc2V0X25ld19zdHJlYW1fdGltZSwgZ3N0X3BpcGVsaW5lX3VzZV9jbG9jaywKLQkgIGdzdF9waXBlbGluZV9zZXRfY2xvY2ssIGdzdF9waXBlbGluZV9hdXRvX2Nsb2NrLAotCSAgZ3N0X3BpcGVsaW5lX2dldF9kZWxheSk6Ci0JICBXaGl0ZXNwYWNlIGFuZCBkb2NzIGZpeGVzLgotCi0yMDA3LTA1LTIxIDIxOjQ4OjA3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOiBBZGQgc3VwcG9ydCBmb3IgcmV0cmlldmluZyB2YWx1ZSBhcnJheXMgd2hlbiB1c2luZyB0aGUgdHJpZ2dlciBpbnRlcnBvbGF0aW9uIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X2VudW1fdmFsdWVfYXJyYXkpLAotCSAgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0X3N0cmluZ192YWx1ZV9hcnJheSk6Ci0JICBBZGQgc3VwcG9ydCBmb3IgcmV0cmlldmluZyB2YWx1ZSBhcnJheXMgd2hlbiB1c2luZyB0aGUgdHJpZ2dlcgotCSAgaW50ZXJwb2xhdGlvbiBtb2RlLgotCi0yMDA3LTA1LTIxIDIxOjM0OjQ5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci4qOiBDbGFyaWZ5IHRoZSBkb2NzIG9mIGdzdF9jb250cm9sbGVyX2dldF92YWx1ZV9hcnJheSgpOiBUaGUgYXJyYXkgd2hlcmUgdGhlIHZhbHVlcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVyX2dldF92YWx1ZV9hcnJheSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgotCSAgQ2xhcmlmeSB0aGUgZG9jcyBvZiBnc3RfY29udHJvbGxlcl9nZXRfdmFsdWVfYXJyYXkoKTogVGhlIGFycmF5IHdoZXJlCi0JICB0aGUgdmFsdWVzIHNob3VsZCBiZSB3cml0dGVuIHRvIG11c3QgYmUgYWxsb2NhdGVkIGFzIHRoZXJlIHNlZW1zIHRvIGJlCi0JICBubyB3YXkgdG8gZ2V0IHRoZSBzaXplIG9mIGEgcmFuZG9tIEdUeXBlLiBUaGlzIGRvZXNuJ3QgY2hhbmdlIGFueQotCSAgYmVoYXZpb3VyLiBBbHNvIGZpeCBzb21lIHR5cG9zIGFsbCBvdmVyIHRoZSBwbGFjZSBhbmQgcmVtb3ZlIGFuIHVudXNlZCwKLQkgIGNvbW1lbnRlZCBmdW5jdGlvbiB0aGF0IGlzIG5vdCBuZWNlc3NhcnkgYXMgZ19vYmplY3Rfc2V0KCkgY291bGQgYmUKLQkgIHVzZWQgaW5zdGVhZC4KLQkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5KCkuCi0KLTIwMDctMDUtMjEgMTQ6NTA6NTEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IERpc2FibGUgcGFydCBvZiB0aGUgZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyB0ZXN0LCBiZWNhdXNlIGl0IGNhbiBoYXBwaWx5IHN1Y2NlZWQgb24uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBEaXNhYmxlIHBhcnQgb2YgdGhlIGdzdF9idWZmZXJfdHJ5X25ld19hbmRfYWxsb2MgdGVzdCwgYmVjYXVzZQotCSAgaXQgY2FuIGhhcHBpbHkgc3VjY2VlZCBvbiA2NC1iaXQgc3lzdGVtcyB3aGVyZSB0aGVyZSdzIG1vcmUgYWRkcmVzcwotCSAgc3BhY2UgYXZhaWxhYmxlLgotCi0yMDA3LTA1LTIxIDEyOjA1OjU2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzogQWRkIHVuaXQgdGVzdCBmb3IgdGhlIGltcHJvdmVkIGNhcHMgY2hlY2tpbmcgZnJvbSBidWcgIzQyMTU0My4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfcGFkX3N1aXRlKToKLQkgIEFkZCB1bml0IHRlc3QgZm9yIHRoZSBpbXByb3ZlZCBjYXBzIGNoZWNraW5nIGZyb20gYnVnICM0MjE1NDMuCi0KLTIwMDctMDUtMjEgMTI6MDU6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtc3luY2hyb25pc2F0aW9uLnR4dDogU21hbGwgYWRkaXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OgotCSAgU21hbGwgYWRkaXRpb24uCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcXVlcnkpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChhcHBseV9zZWdtZW50KToKLQkgIEltcHJvdmUgZGVidWdnaW5nLgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgSW1wcm92ZSBkb2NzLgotCi0yMDA3LTA1LTIxIDEyOjAwOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IEFkZGVkIHNpbXBsZSB2ZXJzaW9uIG9mIGltcHJvdmVkIGNhcHMgY2hlY2tpbmcuIEl0IHdhcyBwcmV2aW91c2x5IGFzc3VtZWQgdGhhdCBhIHNldGNhcHMgZnVuY3Rpb24gd291bGQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF9jYXBzX3VubG9ja2VkKSwKLQkgIChnc3RfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdCksIChnc3RfcGFkX2NvbmZpZ3VyZV9zaW5rKSwKLQkgIChnc3RfcGFkX2NvbmZpZ3VyZV9zcmMpOgotCSAgQWRkZWQgc2ltcGxlIHZlcnNpb24gb2YgaW1wcm92ZWQgY2FwcyBjaGVja2luZy4gSXQgd2FzIHByZXZpb3VzbHkKLQkgIGFzc3VtZWQgdGhhdCBhIHNldGNhcHMgZnVuY3Rpb24gd291bGQgY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBjYXBzIGJ1dAotCSAgcGVvcGxlIHByZWZlciB1cyB0byBjaGVjayBjYXBzIGFnYWluc3QgdGhlIHRlbXBsYXRlIGF1dG9tYXRpY2FsbHkuCi0JICBGaXhlcyAjNDIxNTQzLgotCi0yMDA3LTA1LTIxIDExOjI5OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDogRml4IG1hY3JvIGZvciBsb2NraW5nL3VubG9ja2luZyB0aGUgdHJhbnNmb3JtIGxvY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBGaXggbWFjcm8gZm9yIGxvY2tpbmcvdW5sb2NraW5nIHRoZSB0cmFuc2Zvcm0gbG9jay4KLQotMjAwNy0wNS0xOSAxMzo1MzoyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zL3RtcGwvLmN2c2lnbm9yZTogSWdub3JlIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL3RtcGwvLmN2c2lnbm9yZToKLQkgIElnbm9yZSBtb3JlLgotCi0yMDA3LTA1LTE4IDE2OjUzOjE4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IEhlbGxvLCBJIGFtIE1yIFRheW1hbnMnIHBlcnNvbmFsIGRlYnVnZ2VyLiBUb2RheSBJIHdpbGwgaW50cm9kdWNlIGEgZml4IGZvciB0aGUgc3VidGxlIGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbG9vcCk6Ci0JICBIZWxsbywgSSBhbSBNciBUYXltYW5zJyBwZXJzb25hbCBkZWJ1Z2dlci4gVG9kYXkgSSB3aWxsIGludHJvZHVjZSBhIGZpeAotCSAgZm9yIHRoZSBzdWJ0bGUgYXJ0IG9mIHdhcm5pbmcgYSBwb3RlbnRpYWxseSBibG9ja2luZyB0aHJlYWQgdGhhdCBpdAotCSAgc2hvdWxkIGNoZWNrIHRoZSBzb3VyY2UgcGFkIHJldHVybiB2YWx1ZSwgYW5kIHJlbGF5IHRoZSBpbmZvcm1hdGlvbgotCSAgdXBzdHJlYW0uCi0KLTIwMDctMDUtMTggMTE6MjA6MzMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogUmVsZWFzZSB0aGUgcXVldWUgbG9jayAhCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KToKLQkgIFJlbGVhc2UgdGhlIHF1ZXVlIGxvY2sgIQotCi0yMDA3LTA1LTE3IDE3OjU1OjQ4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEFkZCB0aGUgdHdvIG5ldyBjb250cm9sbGVyIGZ1bmN0aW9ucyB0byB0aGUgYXBwcm9waWF0ZSBwbGFjZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCB0aGUgdHdvIG5ldyBjb250cm9sbGVyIGZ1bmN0aW9ucyB0byB0aGUgYXBwcm9waWF0ZSBwbGFjZXMuCi0KLTIwMDctMDUtMTcgMTc6Mzc6NTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci86IEFQSTogZ3N0X2NvbnRyb2xsZXJfc3VnZ2VzdF9uZXh0X3N5bmMoKSwgZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luYygpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmlld2VkIGJ5OiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVyX3N1Z2dlc3RfbmV4dF9zeW5jKSwgKGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKSwKLQkgIChfZ3N0X2NvbnRyb2xsZXJfZ2V0X3Byb3BlcnR5KSwgKF9nc3RfY29udHJvbGxlcl9zZXRfcHJvcGVydHkpLAotCSAgKF9nc3RfY29udHJvbGxlcl9pbml0KSwgKF9nc3RfY29udHJvbGxlcl9jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6IChnc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jKSwKLQkgIChnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGUpLCAoZ3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlKToKLQkgIEFQSTogZ3N0X2NvbnRyb2xsZXJfc3VnZ2VzdF9uZXh0X3N5bmMoKSwgZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luYygpCi0JICBBZGQgQVBJIHRoYXQgcHJvdmlkZXMgc3luYyBzdWdnZXN0aW9uIHRpbWVzdGFtcHMgZm9yIGVsZW1lbnRzIHRoYXQKLQkgIGNhbGwgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcygpIGZyb20gd2hpY2ggdGhvc2UgZWxlbWVudHMgY2FuIHN1YmRpdmlkZQotCSAgdGhlaXIgcHJvY2Vzc2luZyBsb29wIHRvIGdldCB0aGUgYmVzdCByZXN1bHRzIGZvciB0aGUgY29udHJvbGxlZAotCSAgcHJvcGVydGllcy4gRm9yIG5vdyBpdCBqdXN0IHN1Z2dlc3RzIGxhc3Rfc3luYyArIGNvbnRyb2xfcmF0ZSBhcwotCSAgbmV3IHRpbWVzdGFtcCBidXQgdGhpcyB3aWxsIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUuCi0JICBXaGlsZSBkb2luZyB0aGF0IGNoYW5nZSB0aGUgY29udHJvbC1yYXRlIHByb3BlcnR5IHRvIGEgR3N0Q2xvY2tUaW1lCi0JICBmcm9tIGd1aW50IGFuZCBjaGFuZ2UgaXQncyBtZWFuaW5nIGZyb20gc2FtcGxlcyB0byBuYW5vc2Vjb25kcyBhcwotCSAgdGhlIEdzdENvbnRyb2xsZXIgZG9lc24ndCBrbm93IGFueXRoaW5nIGFib3V0IHNhbXBsaW5nIHJhdGUuIFN0cmljdGx5Ci0JICBzcGVha2luZyB0aGlzIGJyZWFrcyBBQkkgYnV0IGFzIHRoZSBjb250cm9sLXJhdGUgcHJvcGVydHkgZGlkbid0IGRvCi0JICBhbnl0aGluZyBpbiB0aGUgcGFzdCBhbmQgYXMgc3VjaCBjb3VsZG4ndCBiZSB1c2VkIHRoaXMgc2hvdWxkIGJlIG5vCi0JICBwcm9ibGVtLgotCi0yMDA3LTA1LTE3IDE3OjE2OjA5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBTYXZlIGxhc3Qgc3luY2VkIHZhbHVlIGZyb20gdGhlIGxpc3QgdG8gY29udGludWUgc2VhcmNoaW5nIGZyb20gdGhlcmUgaW4gZnV0dXJlIHN5bmNzLiBUaGlzIHNwZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZpZXdlZCBieTogU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX3Vuc2V0KSwKLQkgIChnc3RfY29udHJvbGxlcl91bnNldF9hbGwpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X2ZpbmRfY29udHJvbF9wb2ludF9ub2RlKToKLQkgIFNhdmUgbGFzdCBzeW5jZWQgdmFsdWUgZnJvbSB0aGUgbGlzdCB0byBjb250aW51ZSBzZWFyY2hpbmcgZnJvbSB0aGVyZQotCSAgaW4gZnV0dXJlIHN5bmNzLiBUaGlzIHNwZWVkcyBldmVyeXRoaW5nIHVwIGEgYml0LgotCi0yMDA3LTA1LTE3IDE3OjA1OjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvOiBBZGQgYSBuZXcgcHJpdmF0ZSBHc3RDb250cm9sUG9pbnQgc3RydWN0IHdoaWNoICJpbmhlcml0cyIgZnJvbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZpZXdlZCBieTogU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sX3BvaW50X2NvbXBhcmUpLAotCSAgKGdzdF9jb250cm9sX3BvaW50X2ZpbmQpLCAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KSwKLQkgIChnc3RfY29udHJvbF9wb2ludF9mcmVlKSwgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X2ZyZWUpLAotCSAgKGdzdF9jb250cm9sbGVyX3NldCksIChnc3RfY29udHJvbGxlcl9zZXRfZnJvbV9saXN0KSwKLQkgIChnc3RfY29udHJvbGxlcl91bnNldCksIChnc3RfY29udHJvbGxlcl91bnNldF9hbGwpLAotCSAgKGdzdF9jb250cm9sbGVyX3N5bmNfdmFsdWVzKToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlcnByaXZhdGUuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfZmluZF9jb250cm9sX3BvaW50X25vZGUpLAotCSAgKGludGVycG9sYXRlX25vbmVfZ2V0KSwgKGludGVycG9sYXRlX3RyaWdnZXJfZ2V0KToKLQkgIEFkZCBhIG5ldyBwcml2YXRlIEdzdENvbnRyb2xQb2ludCBzdHJ1Y3Qgd2hpY2ggImluaGVyaXRzIiBmcm9tCi0JICBHc3RUaW1lZFZhbHVlIHRvIGFsbG93IGRpZmZlcmVudCBpbnRlcnBvbGF0b3JzIHRvIHN0b3JlIGludGVybmFsCi0JICB2YWx1ZXMgbmV4dCB0byBlYWNoIGNvbnRyb2wgcG9pbnQuIEZyb20gdGhlIG91dHNpZGUgZXZlcnl0aGluZyBpcwotCSAgc3RpbGwgYSBHc3RDb250cm9sUG9pbnQgc28gd2UgZG9uJ3QgbG9vc2UgYmluYXJ5IGNvbXBhdGliaWxpdHkuCi0JICBBbHNvIGZpeHVwIGFsbCB0aGUgR1ZhbHVlIGhhbmRsaW5nIHRvIG5vdCBsZWFrIEdWYWx1ZXMgb3IgbGlzdCBub2Rlcy4KLQkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBGcmVlIHRoZSBsaXN0IG5vZGVzIGFuZCBHVmFsdWVzIGluIHRoZSBjb250cm9sbGVyX21pc2MgdGVzdC4KLQotMjAwNy0wNS0xNyAxMTowNToyMiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuYzogU21hbGwgZG9jIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgU21hbGwgZG9jIGZpeC4KLQotMjAwNy0wNS0xNiAxOTozNTo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHBsdWdpbi5jOiBJZiB3ZSBmYWlsIHRvIGxvYWQgYSBwbHVnaW4gYmVjYXVzZSBvZiB1bnJlc29sdmVkIHN5bWJvbHMgb3IgbWlzc2luZyBsaWJyYXJpZXMgYW5kIHNwZXcgYSB3YXJuaW5nIHRvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgotCSAgSWYgd2UgZmFpbCB0byBsb2FkIGEgcGx1Z2luIGJlY2F1c2Ugb2YgdW5yZXNvbHZlZCBzeW1ib2xzIG9yIG1pc3NpbmcKLQkgIGxpYnJhcmllcyBhbmQgc3BldyBhIHdhcm5pbmcgdG8gc3RkZXJyLCB3ZSBtYXkganVzdCBhcyB3ZWxsIG1lbnRpb24KLQkgIHdoaWNoIHBsdWdpbiBpdCB3YXMgdGhhdCBmYWlsZWQgdG8gbG9hZC4KLQotMjAwNy0wNS0xMyAyMDoyODoxNCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGRvY3MvTWFrZWZpbGUuYW06IHRoZSBndGstZG9jIG1ha2VmaWxlIHNuaXBwZXQgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBFTkFCTEVfR1RLX0RPQyBpcyBmYWxzZSwgYW5kIGluc3RhbGxzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvTWFrZWZpbGUuYW06IHRoZSBndGstZG9jIG1ha2VmaWxlIHNuaXBwZXQgY29ycmVjdGx5Ci0JICBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gRU5BQkxFX0dUS19ET0MgaXMgZmFsc2UsIGFuZCBpbnN0YWxscwotCSAgdGhlIHByZWJ1aWx0IGRvY3VtZW50YXRpb24uICBTbyBndGstZG9jIHN1YmRpcnMgYXJlCi0JICB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZC4gIEZpeGVzOiAjMzQ5MDk5LgotCi0yMDA3LTA1LTEzIDIwOjExOjI3ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdHV0aWxzLmg6IFJld29yZCBzb21lIGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmg6IFJld29yZCBzb21lIGRvY3VtZW50YXRpb24uCi0KLTIwMDctMDUtMTMgMDA6MjA6MzUgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ3N0cGx1Z2luLmM6IGdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYygpIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgd2l0aCB0aGUgcGFzc2VkICJtb2R1bGUiIHBhcmFtZXRlciwgc28gcmVtb3YuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IGdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYygpIGRvZXNuJ3QgYWN0dWFsbHkKLQkgIGRvIGFueXRoaW5nIHdpdGggdGhlIHBhc3NlZCAibW9kdWxlIiBwYXJhbWV0ZXIsIHNvIHJlbW92ZSBpdC4KLQkgIEFsbG93cyByZW1vdmFsIG9mIGFkZGl0aW9uYWwgdmVzdGlnYWwgY29kZS4KLQotMjAwNy0wNS0xMyAwMDowOTowMCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9nc3RwbHVnaW4uYzogVXNpbmcgc2lnYWN0aW9uIHNob3VsZCBkZXBlbmQgb24gSEFWRV9TSUdBQ1RJT04sIG5vdCBIQVZFX1dJTjMyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIFVzaW5nIHNpZ2FjdGlvbiBzaG91bGQgZGVwZW5kIG9uIEhBVkVfU0lHQUNUSU9OLCBub3QgSEFWRV9XSU4zMi4KLQkgIFN3aXRjaCB0byB1c2luZyBnX3N0YXQoKSBiZWNhdXNlIGl0J3MgbW9yZSBwb3J0YWJsZS4KLQotMjAwNy0wNS0xMiAyMzo1MzowOCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9nc3QuYzogQWRkIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HLCBpbiBvcmRlciB0byBkaXNhYmxlIG9wdGlvbiBwYXJzaW5nIGZvciBlbWJlZGRlZCBzeXN0ZW1zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIEFkZCBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORywgaW4gb3JkZXIgdG8gZGlzYWJsZSBvcHRpb24KLQkgIHBhcnNpbmcgZm9yIGVtYmVkZGVkIHN5c3RlbXMuCi0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgQWxsb3cgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIoKSB0byBiZSBjYWxsZWQgd2l0aCBwbHVnaW49PU5VTEwuCi0JICBEaWQgbm9ib2R5IG5vdGljZSB0aGF0IHN0YXRpYyBlbGVtZW50cyB3ZXJlIGJyb2tlbj8KLQotMjAwNy0wNS0xMiAxNTozODowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBHaXZlIG1vcmUgaW50ZXJlc3RpbmcgaW5mbyB3aGVuIGJ1ZmZlcmluZyBzdGFydHMgYW5kIHN0b3BzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgotCSAgR2l2ZSBtb3JlIGludGVyZXN0aW5nIGluZm8gd2hlbiBidWZmZXJpbmcgc3RhcnRzIGFuZCBzdG9wcy4KLQkgIEZpeCBjYXNlIHdoZXJlIGJ1ZmZlcmluZyBzdGFydHMgYnV0IHdlIGZhaWwgdG8gdXBkYXRlIHRoZSBidWZmZXJpbmcgZmxhZwotCSAgYmVjYXVzZSB0aGUgdGFyZ2V0IHN0YXRlIGlzIG5vdCBQTEFZSU5HLgotCi0yMDA3LTA1LTEyIDE1OjM1OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLio6IFJlZmFjdG9yIGFuIGNsZWFudXAgcXVldWUgYSBiaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2luaXQpLAotCSAgKGdzdF9xdWV1ZV9maW5hbGl6ZSksICh1cGRhdGVfdGltZV9sZXZlbCksIChhcHBseV9zZWdtZW50KSwKLQkgIChhcHBseV9idWZmZXIpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCksCi0JICAoZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksCi0JICAoZ3N0X3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9xdWV1ZV9sb29wKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSAgUmVmYWN0b3IgYW4gY2xlYW51cCBxdWV1ZSBhIGJpdC4KLQkgIERvIGJldHRlciB0aW1lIGxldmVsIGNhbGN1bGF0aW9ucyB0aGF0IGFsc28gd29yayB3aGVuIHRoZSBzcmNwYWQgaXMgbm90Ci0JICB5ZXQgcnVubmluZy4KLQkgIFJlbW92ZSBzb21lIHVubmVlZGVkIGRlYnVnIGxpbmVzLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAocXVldWVfc3VpdGUpOgotCSAgQWRkZWQgdGVzdGNhc2UgZm9yIHRpbWUgbGV2ZWwgbWVhc3VyZW1lbnQuCi0JICBUcnkgdG8gbWFrZSBzb21lIHN0dWZmIG1vcmUgcmFjZWZyZWUuCi0KLTIwMDctMDUtMTEgMTQ6NDY6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R1cmkuYzogRG9uJ3QgbGVhayBwbHVnaW4gZmVhdHVyZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXJpLmM6IChnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKToKLQkgIERvbid0IGxlYWsgcGx1Z2luIGZlYXR1cmUuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3VyaV9zdWl0ZSk6Ci0JICBBZGQgYnJhaW4tZGVhZCB1bml0IHRlc3QuCi0KLTIwMDctMDUtMTEgMTQ6Mjg6NTUgKzAwMDAgIEplcm9lbiBXb3V0ZXJzIDx3b3V0ZXJzakBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R1cmkuYzogVHJlYXQgcHJvdG9jb2wgc3RyaW5ncyBpbiBhIGNhc2UtaW5zZW5zaXRpdmUgd2F5ICgjNDM3NTYzKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEplcm9lbiBXb3V0ZXJzIDx3b3V0ZXJzaiBhdCBnbWFpbCBjb20+Ci0JICAqIGdzdC9nc3R1cmkuYzogKGdzdF91cmlfZ2V0X3Byb3RvY29sKSwgKHNlYXJjaF9ieV9lbnRyeSk6Ci0JICBUcmVhdCBwcm90b2NvbCBzdHJpbmdzIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSB3YXkgKCM0Mzc1NjMpLgotCi0yMDA3LTA1LTExIDEwOjU2OjQ4ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC86IERvbid0IHByaW50IGEgZ193YXJuaW5nIGZvciBhbnkgZmFpbHVyZSB0byBsb2FkIGEgc2hhcmVkIG9iamVjdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6Ci0JICBEb24ndCBwcmludCBhIGdfd2FybmluZyBmb3IgYW55IGZhaWx1cmUgdG8gbG9hZCBhIHNoYXJlZCBvYmplY3QuCi0JICBJbnN0ZWFkLCBwdXNoIHRoaXMgZG93biBpbnRvIGdzdHBsdWdpbi5jLCBhbmQgd2FybiBfb25seV8gaWYgd2UKLQkgIGZhaWxlZCB0byBvcGVuIHRoZSBtb2R1bGUgKGkuZS4gZmFpbHVyZSB0byBsaW5rKS4KLQkgIEF2b2lkcyB3YXJuaW5ncyBvbiBub3JtYWwsIHdvcmtpbmcsIG5vbi1wbHVnaW4gLnNvIGZpbGVzLgotCi0yMDA3LTA1LTExIDA4OjI5OjEwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RwbHVnaW4uYyAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOiBnc3QvZ3N0cmVnaXN0cnkuYyAoR1NUX0NBVF9ERUZBVUxULCBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmVfbG9ja2VkLCBnc3Rfci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYyAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYyAoR1NUX0NBVF9ERUZBVUxULAotCSAgZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlX2xvY2tlZCwgZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6Ci0JICBQcmludCBhIGdfd2FybmluZyBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hlbiBsb2FkaW5nIGEgcGx1Z2lucyBkdXJpbmcKLQkgIHJlZ2lzdHJ5IHNjYW4uIFRoZSBzaHVsZCBoZWxwIGJlZ2lubmVycyBzdGFydGluZyB3aXRoIGdzdC1wbHVnaW4KLQkgIHRlbXBsYXRlLgotCi0yMDA3LTA1LTEwIDE1OjIxOjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLio6IEJlIHNtYXJ0ZXIgd2hlbiBjYWxjdWxhdGluZyB0aGUgY3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgYnkgbWVhc3VyaW5nIHRoZSBkaWYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2xhc3NfaW5pdCksCi0JICAodXBkYXRlX3RpbWVfbGV2ZWwpLCAoZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksCi0JICAoZ3N0X3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9xdWV1ZV9sb29wKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSAgQmUgc21hcnRlciB3aGVuIGNhbGN1bGF0aW5nIHRoZSBjdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSBieQotCSAgbWVhc3VyaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lc3RhbXBzIChpbiBydW5uaW5nCi0JICB0aW1lKSBpbnNpZGUgdGhlIHF1ZXVlLiBGaXhlcyAjNDMyODc2LgotCSAgQVBJOiBHc3RRdWV1ZTo6cHVzaGluZyB0byBub3RpZnkgZWxlbWVudHMgdGhhdCB3ZSBhcmUgcHVzaGluZyBkYXRhIGFnYWluCi0JICBzaW5jZSB0aGUgcnVubmluZyBzaWduYWwgaXMgcmF0aGVyIGJyb2tlbiBmb3IgdGhpcyBwdXJwb3NlLgotCi0yMDA3LTA1LTEwIDEyOjQwOjEyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbW1vbjoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYyAoX2RvX2luaXQsIGdzdF9xdWV1ZV9zaWduYWxzLCBnc3RfcXVldWVfYmFzZV9pbml0LCBnc3RfcXVldWVfaW5pdCk6IHVzZSBHU1RfQk9JTEVSUExBVEUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmMgKF9kb19pbml0LCBnc3RfcXVldWVfc2lnbmFscywKLQkgIGdzdF9xdWV1ZV9iYXNlX2luaXQsIGdzdF9xdWV1ZV9pbml0KToKLQkgIHVzZSBHU1RfQk9JTEVSUExBVEUKLQotMjAwNy0wNS0wOSAyMTowNjowNiArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogQWRkIG5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KLQkgICogd2luMzIvdnM2L2dyYW1tYXIuZHNwOgotCSAgVXNlIGdyYW1tYXIgcHJlLWdlbmVyYXRlZCBmaWxlcy4KLQotMjAwNy0wNS0wOSAxNjozMjowNyArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC86IE1haW50YWluIEFQSSBhbmQgQUJJIHdoZW4gLS1kaXNhYmxlLXBhcnNlIGlzIHVzZWQuIE5vdyB0aGF0IHdlIGhhdmUgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSwgd2UgY2FuIGp1c3QgcmV0dS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nc3RwYXJzZS5jOiAoZ3N0X3BhcnNlX2xhdW5jaHYpLCAoZ3N0X3BhcnNlX2xhdW5jaCk6Ci0JICAqIGdzdC9nc3RwYXJzZS5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbik6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgTWFpbnRhaW4gQVBJIGFuZCBBQkkgd2hlbiAtLWRpc2FibGUtcGFyc2UgaXMgdXNlZC4gTm93IHRoYXQKLQkgIHdlIGhhdmUgYW4gYXBwcm9wcmlhdGUgZXJyb3IgY29kZSwgd2UgY2FuIGp1c3QgcmV0dXJuIE5VTEwgYW5kIHRoZQotCSAgYXBwcm9wcmlhdGUgZXJyb3Igd2hlbiBnc3RfcGFyc2VfbGF1bmNoKCkgaXMgdXNlZCBkZXNwaXRlIGl0IGhhdmluZwotCSAgYmVlbiBkaXNhYmxlZCAoIzM0MjU2NCkuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmM6Ci0JICBNYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGV4aXN0IGFuZCByZXR1cm4gTlVMTCBwbHVzIGEgR0Vycm9yIHdoZW4KLQkgIC0tZGlzYWJsZS1wYXJzZSBpcyB1c2VkLgotCi0yMDA3LTA1LTA5IDEwOjAxOjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9iZW5jaG1hcmtzLzogU2V0IGEgZ29vZCBleGFtcGxlIGFuZCBkb24ndCBsZWFrIG1lc3NhZ2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jOiAobWFpbik6Ci0JICAqIHRlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5jOiAobWFpbik6Ci0JICBTZXQgYSBnb29kIGV4YW1wbGUgYW5kIGRvbid0IGxlYWsgbWVzc2FnZXMuCi0KLTIwMDctMDUtMDYgMTg6Mjc6MjUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy86IENvcnJlY3QgZml4eHJlZnMgb3B0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSAgQ29ycmVjdCBmaXh4cmVmcyBvcHRpb25zLgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jIChnc3RfY2Fwc2ZpbHRlcl9kZXRhaWxzKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmggKF9fR1NUX0NBUFNGSUxURVJfSF9fLAotCSAgR1NUX1RZUEVfQ0FQU0ZJTFRFUiwgR1NUX0NBUFNGSUxURVIsIEdTVF9DQVBTRklMVEVSX0NMQVNTLAotCSAgR1NUX0lTX0NBUFNGSUxURVIsIEdTVF9JU19DQVBTRklMVEVSX0NMQVNTLCBHc3RDYXBzRmlsdGVyLAotCSAgR3N0Q2Fwc0ZpbHRlckNsYXNzLCBfR3N0Q2Fwc0ZpbHRlciwgdHJhbnMsIGZpbHRlcl9jYXBzLAotCSAgX0dzdENhcHNGaWx0ZXJDbGFzcywgdHJhbnNfY2xhc3MpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmMgKG5hbWUsIHJhbmssIHR5cGUsIF9lbGVtZW50cyk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYwotCSAgKGdzdF9pZGVudGl0eV9jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wLAotCSAgZ3N0X2lkZW50aXR5X2NoZWNrX2ltcGVyZmVjdF9vZmZzZXQpOgotCSAgRG9jdW1lbnQgY2Fwc2ZpbHRlciBhbmQgYWRkIGRvYy1ibHVyYiB0byBpZGVudGl0eS4KLQotMjAwNy0wNS0wNCAxMjozNzowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci86IERvbid0IGNyYXNoIGlmIHNvbWVvbmUgdHJpZXMgdG8gc2V0IGFuIGludGVycG9sYXRpb24gbW9kZSB0aGF0IGlzIGludmFsaWQgb3IgdGhhdCBpc24ndCBzdXBwb3J0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgRG9uJ3QgY3Jhc2ggaWYgc29tZW9uZSB0cmllcyB0byBzZXQgYW4gaW50ZXJwb2xhdGlvbiBtb2RlIHRoYXQKLQkgIGlzIGludmFsaWQgb3IgdGhhdCBpc24ndCBzdXBwb3J0ZWQgeWV0LiBGaXhlcyAjNDIyMjk1LgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6Ci0JICBBZGQgYSB0ZXN0IGNhc2UgZm9yIHRoZSBhYm92ZS4KLQotMjAwNy0wNS0wMyAxNjo0NDozNCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFByb3Blcmx5IHNldCB0aGUgbGFzdF9zdG9wIHBvc2l0aW9uIG9uIEdzdFNlZ21lbnQuIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pOgotCSAgUHJvcGVybHkgc2V0IHRoZSBsYXN0X3N0b3AgcG9zaXRpb24gb24gR3N0U2VnbWVudC4gVGhpcyB3aWxsIG9ubHkgaGFwcGVuCi0JICBpZiB0aGVyZSBpcyBhIGJ1ZmZlciB0byBwdXNoIG91dC4KLQotMjAwNy0wNS0wMyAxNDo1ODowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IGFsd2F5c19pbl9wbGFjZSBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIHNpbmsgYW5kIHNvdXJjZSBjYXBzIGFyZSB0aGUgc2FtZSEgTWFrZSBzdXJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICBhbHdheXNfaW5fcGxhY2UgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSBzaW5rIGFuZCBzb3VyY2UgY2FwcyBhcmUgdGhlCi0JICBzYW1lISBNYWtlIHN1cmUgd2UgZG9uJ3QgYmxpbmRseSBwcm94eSB0aGUgYnVmZmVyX2FsbG9jIGluIHRoaXMgY2FzZS4KLQotMjAwNy0wNS0wMyAxNDo1NDozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQVBJOiBnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSgpLiBBZGRlZCBtZXRob2Qgc28gdGhhdCBzdWJjbGFzc2VzIGNhbiBlYXNpbHkgZ2V0IHRoZSBsYXRlbmN5IHZhbHVlcyBvZiB0aGUgYmFzZSBzb3VyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpLCAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgQVBJOiBnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSgpLiBBZGRlZCBtZXRob2Qgc28gdGhhdCBzdWJjbGFzc2VzIGNhbgotCSAgZWFzaWx5IGdldCB0aGUgbGF0ZW5jeSB2YWx1ZXMgb2YgdGhlIGJhc2Ugc291cmNlIGNsYXNzLgotCi0yMDA3LTA1LTAzIDA5OjI0OjU4ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jIChwcmludF9pbXBsZW1lbnRhdGlvbl9pbmZvKTogUmVtb3ZlIDAuOCBjcnVmdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jIChwcmludF9pbXBsZW1lbnRhdGlvbl9pbmZvKToKLQkgIFJlbW92ZSAwLjggY3J1ZnQuCi0KLTIwMDctMDUtMDIgMTc6MDk6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzLzogRG9uJ3QgY3JlYXRlIGEgY3VzdG9taXNlZCBtYW4gcGFnZSBiYXNlZCBvbiB0aGUgaG9zdCBhcmNoaXRlY3R1cmUsIGRlc2NyaWJlIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5IHBhdGggZ2VuZXJpYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL01ha2VmaWxlLmFtOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBEb24ndCBjcmVhdGUgYSBjdXN0b21pc2VkIG1hbiBwYWdlIGJhc2VkIG9uIHRoZSBob3N0IGFyY2hpdGVjdHVyZSwKLQkgIGRlc2NyaWJlIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5IHBhdGggZ2VuZXJpY2FsbHkuIFRoYXQgd2F5IHRoZSBtYW4KLQkgIHBhZ2UgaXMgdGhlIHNhbWUgZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGFuZCBwYWNrYWdlcnMgaGF2ZSBvbmUKLQkgIG11bHRpbGliIGlzc3VlIGxlc3MgdG8gZGVhbCB3aXRoLiBGaXhlcyAjNDM0OTI2LgotCi0yMDA3LTA1LTAyIDE1OjE0OjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IEZpeCBkb2N1bWVudGF0aW9uIGFzIHNwb3R0ZWQgYnkgcmcgb24gSVJDLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzoKLQkgIEZpeCBkb2N1bWVudGF0aW9uIGFzIHNwb3R0ZWQgYnkgcmcgb24gSVJDLgotCi0yMDA3LTA0LTI5IDE3OjM2OjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBJbXByb3ZlIGRvY3MgZm9yIGdzdF9lbGVtZW50X3tsaW5rLHVubGlua30uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICBJbXByb3ZlIGRvY3MgZm9yIGdzdF9lbGVtZW50X3tsaW5rLHVubGlua30uCi0KLTIwMDctMDQtMjkgMTQ6MDQ6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiBkb2NzL1JFQURNRToKLQkgIHVwZGF0ZSBSRUFETUUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIFJFQURNRQotCi0yMDA3LTA0LTI4IDExOjI5OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBUeXBvIGZpeGVzOyBtaW5vciBkb2NzIGFkZGl0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgKiBnc3QvZ3N0dXJpLmM6Ci0JICAqIGdzdC9nc3R1cmkuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgVHlwbyBmaXhlczsgbWlub3IgZG9jcyBhZGRpdGlvbi4KLQotMjAwNy0wNC0yNyAwODozMDo1OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBUEk6IEFkZCBnc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZCgpLCB3aGljaCBjaGVja3MgaWYgYW4gc2luayBvciBzcmMgdGhhdCBzdXBwb3J0cyBhIGdpdmVuIFVSSSBwcm90b2NvbCBleGlzdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHVyaS5jOiAoZ2V0X2VsZW1lbnRfZmFjdG9yaWVzX2Zyb21fdXJpX3Byb3RvY29sKSwKLQkgIChnc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZCksIChnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKToKLQkgICogZ3N0L2dzdHVyaS5oOgotCSAgQVBJOiBBZGQgZ3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWQoKSwgd2hpY2ggY2hlY2tzIGlmIGFuIHNpbmsKLQkgIG9yIHNyYyB0aGF0IHN1cHBvcnRzIGEgZ2l2ZW4gVVJJIHByb3RvY29sIGV4aXN0cy4KLQotMjAwNy0wNC0yNyAwNzozNDoxMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzLzogU2V0IHRoZSBsb2NhdGlvbiB0byBOVUxMIGlmICJmaWxlOi8vIiBpcyBzZXQgYXMgVVJJLiBPdGhlcndpc2Ugc29tZSByYW5kb20gcHJldmlvdXMgVVJJIHdvdWxkIHN0aWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX3VyaV9zZXRfdXJpKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfdXJpX3NldF91cmkpOgotCSAgU2V0IHRoZSBsb2NhdGlvbiB0byBOVUxMIGlmICJmaWxlOi8vIiBpcyBzZXQgYXMgVVJJLiBPdGhlcndpc2UKLQkgIHNvbWUgcmFuZG9tIHByZXZpb3VzIFVSSSB3b3VsZCBzdGlsbCBiZSBzZXQgaWYgImZpbGU6Ly8iIGlzCi0JICBzZXQgb24gYW4gYWxyZWFkeSB1c2VkIGZpbGVzaW5rL2ZpbGVzcmMuCi0KLTIwMDctMDQtMjcgMDc6Mjc6MzYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IFNwZWNpYWwgY2FzZSB0aGUgImZpbGU6Ly8iIFVSSSBhcyBhcyB0aGlzIGlzIHVzZWQgYnkgc29tZSBhcHBsaWNhdGlvbnMgdG8gdGVzdCB3aXRoIGdzdF9lbGVtZW50X21hLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua191cmlfc2V0X3VyaSk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX3VyaV9zZXRfdXJpKToKLQkgIFNwZWNpYWwgY2FzZSB0aGUgImZpbGU6Ly8iIFVSSSBhcyBhcyB0aGlzIGlzIHVzZWQgYnkgc29tZQotCSAgYXBwbGljYXRpb25zIHRvIHRlc3Qgd2l0aCBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpIGlmIHRoZXJlJ3MKLQkgIGFuIGVsZW1lbnQgdGhhdCBzdXBwb3J0cyB0aGUgVVJJIHByb3RvY29sLgotCSAgQWxzbyBtb3ZlIHRoZSBnX3BhdGhfaXNfYWJzb2x1dGUoKSBjaGVjayBmb3IgdGhlIGxvY2F0aW9uIHBhcnQKLQkgIG9mIHRoZSBVUkkgdG8gYWxzbyBjaGVjayB0aGlzIGZvciAiZmlsZTovL2xvY2FsaG9zdC9ibGEiIFVSSXMuCi0KLTIwMDctMDQtMjYgMTA6MDA6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIGdzdF9idWZmZXJfdHJ5X25ld19hbmRfYWxsb2MoKSBwbHVzIHVuaXQgdGVzdCAoIzQzMTk0MCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyk6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9idWZmZXJfc3VpdGUpOgotCSAgQVBJOiBhZGQgZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYygpIHBsdXMgdW5pdCB0ZXN0ICgjNDMxOTQwKS4KLQotMjAwNy0wNC0yNiAwNzozMjowOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuKjogSW1wbGVtZW50IG5vLW1tYXAgYWx0ZXJuYXRpdmUgZm9yIHJlZ2lzdHJ5IHJlYWRpbmcuIERvIGNvZGUgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfcGFkX3RlbXBsYXRlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfcGx1Z2luKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKLQkgIEltcGxlbWVudCBuby1tbWFwIGFsdGVybmF0aXZlIGZvciByZWdpc3RyeSByZWFkaW5nLiBEbyBjb2RlIGNsZWFudXBzLgotCSAgQWRkIG1vcmUgY29tbWVudHMgYWJvdXQgYXZvaWRpbmcgc3RyZHVwcyBmb3IgYWxsIHRleHQgZGF0YS4gQ29tbWVudHMKLQkgIHdlbGNvbWUuCi0KLTIwMDctMDQtMjUgMTI6MzA6MjcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6Ci0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaCAoR3N0QmluYXJ5UGx1Z2luRWxlbWVudCwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaCAoR3N0QmluYXJ5UGx1Z2luRWxlbWVudCwKLQkgIEdzdEJpbmFyeVBsdWdpbkZlYXR1cmUsIF9Hc3RCaW5hcnlFbGVtZW50RmFjdG9yeSwgcGx1Z2luX2ZlYXR1cmUsCi0JICBHc3RCaW5hcnlFbGVtZW50RmFjdG9yeSwgX0dzdEJpbmFyeVR5cGVGaW5kRmFjdG9yeSwgcGx1Z2luX2ZlYXR1cmUpOgotCSAgQ29tbWVudCBzdHJ1Y3RzIGFuZCByZWZvcm1hdCB0byBmaXggdGhlIGJ1aWxkICh0aGF0IHN0dWZmIHNob3VsZCBnbwotCSAgaW50byBhIHByaXYuIGhlYWRlcikuCi0KLTIwMDctMDQtMjUgMTE6NDQ6MjkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lio6IFJlZmFjdG9yIHNvIHRoYXQgd2UgY2FuIGltcGxlbWVudCBtdWx0aXBsZSBmZWF0dXJlcy4gQWRkIHN1cHBvcnQgZm9yCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaDoKLQkgIFJlZmFjdG9yIHNvIHRoYXQgd2UgY2FuIGltcGxlbWVudCBtdWx0aXBsZSBmZWF0dXJlcy4gQWRkIHN1cHBvcnQgZm9yCi0JICBUeXBlRmluZEZhY3RvcnkgZmVhdHVyZXMuCi0KLTIwMDctMDQtMjQgMDY6MTQ6MzUgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8UGV0ZXIuS2plbGxlcnN0ZWR0QGF4aXMuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEZpeCBBTV9DT05ESVRJT05BTChHU1RfRElTQUJMRV9HU1RfREVCVUcsLi4uKSBhbmQgdXBkYXRlIGNvbW1lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPFBldGVyLktqZWxsZXJzdGVkdEBheGlzLmNvbT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgRml4IEFNX0NPTkRJVElPTkFMKEdTVF9ESVNBQkxFX0dTVF9ERUJVRywuLi4pIGFuZCB1cGRhdGUgY29tbWVudC4KLQotMjAwNy0wNC0yMyAwNzozMDozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0YmluLmM6IEZpeCBidWlsZCB3aXRoIC0tZ3N0LWRpc2FibGUtZ3N0LWRlYnVnCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSksCi0JICAoaXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyksIChnc3RfYmluX2NvbnRpbnVlX2Z1bmMpLAotCSAgKGJpbl9oYW5kbGVfYXN5bmNfZG9uZSksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgRml4IGJ1aWxkIHdpdGggLS1nc3QtZGlzYWJsZS1nc3QtZGVidWcKLQotMjAwNy0wNC0yMSAxMzoyNzoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IE1ha2Ugc3VyZSBzdHJlYW1pbmcgaGFzIGZpbmlzaGVkIGJlZm9yZSBjYWxsaW5nIHRoZSA6OnN0b3AoKSB2ZnVuYywgc2luY2UgdGhhdCB2ZnVuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fYWN0aXZhdGUpOgotCSAgTWFrZSBzdXJlIHN0cmVhbWluZyBoYXMgZmluaXNoZWQgYmVmb3JlIGNhbGxpbmcgdGhlIDo6c3RvcCgpIHZmdW5jLAotCSAgc2luY2UgdGhhdCB2ZnVuYyBtaWdodCBjbGVhciBzdGF0ZSB3aGljaCBpcyBiZWluZyB1c2VkIGluIHRoZQotCSAgc3RyZWFtaW5nIHRocmVhZC4gVGhpcyBmaXhlcyBhIHJhY2UgdGhhdCBjYXVzZWQgY3Jhc2hlcyBpbgotCSAgYXVkaW9yZXNhbXBsZSB3aGVuIHNodXR0aW5nIGRvd24gYSBwaXBlbGluZSAoIzQyMDEwNikuCi0KLTIwMDctMDQtMjAgMDg6NTM6NDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogVGhhdCB3YXMgb25lIGJ5dGUgbWlzc2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgVGhhdCB3YXMgb25lIGJ5dGUgbWlzc2luZy4KLQotMjAwNy0wNC0yMCAwODozOTozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICAybmQgYXR0ZW1wdCB0byBoYXZlIGEgeG1sLWxlc3MgYnVpbGQgYXMgYSBqb2luZWQgZWZmb3J0IG9mICM0MTMxMjMgYW5kICM0MjE0ODAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9jbGFzc19pbml0KSwKLQkgIChnc3Rfc2lnbmFsX29iamVjdF9jbGFzc19pbml0KToKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgMm5kIGF0dGVtcHQgdG8gaGF2ZSBhIHhtbC1sZXNzIGJ1aWxkIGFzIGEgam9pbmVkIGVmZm9ydCBvZiAjNDEzMTIzCi0JICBhbmQgIzQyMTQ4MC4KLQotMjAwNy0wNC0yMCAwODoyMToxOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dDogQWRkZWQgb3BlbiBpc3N1ZXMvdGhvdWdodHMgdG8gZHJhZnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtdGFncmVhZGluZy50eHQ6Ci0JICBBZGRlZCBvcGVuIGlzc3Vlcy90aG91Z2h0cyB0byBkcmFmdC4KLQotMjAwNy0wNC0xOSAxNDozMjo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvcGFyc2UvOiBVcGRhdGUgdGhlIHByZWJ1aWxkIHBhcnNlciBzb3VyY2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnRhYi5wcmUuYzoKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIudGFiLnByZS5oOgotCSAgKiBnc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkucHJlLmM6Ci0JICBVcGRhdGUgdGhlIHByZWJ1aWxkIHBhcnNlciBzb3VyY2VzLgotCi0yMDA3LTA0LTE5IDE0OjIzOjI1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9wYXJzZS9NYWtlZmlsZS5hbTogQW5kIG5vdyBmaXggdGhlIGJ1aWxkaW5nIG9mIHRoZSBmbGV4IHNvdXJjZXMuIE5vdyBldmVyeXRoaW5nIHNob3VsZCB3b3JrIGFzIGV4cGVjdGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkgIEFuZCBub3cgZml4IHRoZSBidWlsZGluZyBvZiB0aGUgZmxleCBzb3VyY2VzLiBOb3cgZXZlcnl0aGluZyBzaG91bGQKLQkgIHdvcmsgYXMgZXhwZWN0ZWQuCi0KLTIwMDctMDQtMTkgMTQ6MDY6NTIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3BhcnNlL01ha2VmaWxlLmFtOiBOb3cgaG9wZWZ1bGx5IGZpeCB0aGUgYnVpbGQgZmFpbHVyZXMgYnkgc2V0dGluZyBwcm9wZXIgcnVsZSBkZXBlbmRlbmNpZXMgYW5kIG1vdmluZyBpbnN0ZWFkIG9mLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgotCSAgTm93IGhvcGVmdWxseSBmaXggdGhlIGJ1aWxkIGZhaWx1cmVzIGJ5IHNldHRpbmcgcHJvcGVyIHJ1bGUKLQkgIGRlcGVuZGVuY2llcyBhbmQgbW92aW5nIGluc3RlYWQgb2YgY29weWluZy4KLQotMjAwNy0wNC0xOSAxMDo0MzoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9iZW5jaG1hcmtzLzogVG90YWwgbGljZW5zaWZpY2F0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5nbnVwbG90OgotCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbXBsZXhpdHkuc2NtOgotCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuZ251cGxvdDoKLQkgICogdGVzdHMvYmVuY2htYXJrcy9tYXNzLWVsZW1lbnRzLnNjbToKLQkgIFRvdGFsIGxpY2Vuc2lmaWNhdGlvbi4KLQotMjAwNy0wNC0xOSAxMDoyMjoyOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvcGFyc2UvTWFrZWZpbGUuYW06IEZpeCB0aGUgYnVpbGQgYnkgY29ycmVjdGluZyB0aGUgcnVsZSB0aGF0IGdhdmUgd3JvbmcgZmlsZXMgdG8gZmxleC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICBGaXggdGhlIGJ1aWxkIGJ5IGNvcnJlY3RpbmcgdGhlIHJ1bGUgdGhhdCBnYXZlIHdyb25nIGZpbGVzIHRvIGZsZXguCi0KLTIwMDctMDQtMTkgMDg6NDA6MzMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvYmVuY2htYXJrcy86IENoYW5nZSBsaWNlbmNlIHRvIExHUEwgYXMgZ3JhbnRlZCBieSBCZW5qYW1pbiBhbmQgQW5keS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbXBsZXhpdHkuYzoKLQkgICogdGVzdHMvYmVuY2htYXJrcy9tYXNzLWVsZW1lbnRzLmM6Ci0JICBDaGFuZ2UgbGljZW5jZSB0byBMR1BMIGFzIGdyYW50ZWQgYnkgQmVuamFtaW4gYW5kIEFuZHkuCi0KLTIwMDctMDQtMTkgMDY6MTg6MjQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3BhcnNlL01ha2VmaWxlLmFtOiBBZGQgY29ycmVjdCBncmFtbWFyLnRhYi5oIGRlcGVuZGVuY3kgaWYgY29tcGlsaW5nIHdpdGhvdXQgbmV3IGVub3VnaCBmbGV4LiBGaXhlcyAjNDMxMTUwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkgIEFkZCBjb3JyZWN0IGdyYW1tYXIudGFiLmggZGVwZW5kZW5jeSBpZiBjb21waWxpbmcgd2l0aG91dCBuZXcgZW5vdWdoCi0JICBmbGV4LiBGaXhlcyAjNDMxMTUwLgotCi0yMDA3LTA0LTE4IDEzOjM0OjQ4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9wYXJzZS9NYWtlZmlsZS5hbTogRml4IHR5cG8gYW5kIHVzZSBvdXRkYXRlZCBzb3VyY2VzIGlmIHRoZSBmbGV4L2Jpc29uIHNvdXJjZXMgYXJlIG5ld2VyIHRoYW4gdGhlIHByZWdlbmVyYXRlZCBvbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkgIEZpeCB0eXBvIGFuZCB1c2Ugb3V0ZGF0ZWQgc291cmNlcyBpZiB0aGUgZmxleC9iaXNvbiBzb3VyY2VzIGFyZSBuZXdlcgotCSAgdGhhbiB0aGUgcHJlZ2VuZXJhdGVkIG9uZXMgYnV0IGZsZXggaXMgdG9vIG9sZC4gUHJpbnQgYSB3YXJuaW5nIGluCi0JICB0aGF0IGNhc2UuIFRoaXMgc2hvdWxkIGZpeCB0aGUgYnVpbGQgb24gdGhlIGJ1aWxkIGJvdC4KLQotMjAwNy0wNC0xOCAxMjozNDo1MSArMDAwMCAgTWFyYy1BbmRyZSBMdXJlYXUgPG1hcmNhbmRyZS5sdXJlYXVAZ21haWwuY29tPgotCi0JICBnc3QvcGFyc2UvOiBNYWtlIHRoZSBwYXJzZXIgcmVlbnRyYW50IGFuZCByZWN1cnNpdmVseSBjYWxsYWJsZS4gVGhpcyByZXF1aXJlcyBmbGV4ID49IDIuNS4zMSwgZm9yIG9sZGVyIHZlcnNpb25zIHByZWcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmMtQW5kcmUgTHVyZWF1IDxtYXJjYW5kcmUgZG90IGx1cmVhdSBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICAqIGdzdC9wYXJzZS9wYXJzZS5sOgotCSAgTWFrZSB0aGUgcGFyc2VyIHJlZW50cmFudCBhbmQgcmVjdXJzaXZlbHkgY2FsbGFibGUuIFRoaXMgcmVxdWlyZXMgZmxleAotCSAgPj0gMi41LjMxLCBmb3Igb2xkZXIgdmVyc2lvbnMgcHJlZ2VuZXJhdGVkIHNvdXJjZXMgYXJlIHVzZWQgYXMgd2UKLQkgIGNhbid0IGJ1bXAgdGhlIGJ1aWxkIGRlcGVuZGVuY3kuIEZpbmFsbHkgZml4ZXMgIzM0OTE4MC4KLQkgICogZ3N0L2dzdHBhcnNlLmM6IChnc3RfcGFyc2VfbGF1bmNoKToKLQkgIERyb3AgdGhlIEhBVkVfTVRfU0FWRV9GTEVYICNpZmRlZnMgYXMgd2UgYWx3YXlzIHVzZSBhIG5ldyBlbm91Z2ggZmxleAotCSAgbm93IGFueXdheS4KLQkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci50YWIucHJlLmM6IChfX2dzdF9wYXJzZV9zdHJkdXApLAotCSAgKF9fZ3N0X3BhcnNlX3N0cmZyZWUpLCAoX19nc3RfcGFyc2VfbGlua19uZXcpLAotCSAgKF9fZ3N0X3BhcnNlX2xpbmtfZnJlZSksIChfX2dzdF9wYXJzZV9jaGFpbl9uZXcpLAotCSAgKF9fZ3N0X3BhcnNlX2NoYWluX2ZyZWUpLCAoU0VUX0VSUk9SKSwgKFlZUFJJTlRGKSwKLQkgIChnc3RfcGFyc2VfZWxlbWVudF9zZXQpLCAoZ3N0X3BhcnNlX2ZyZWVfbGluayksCi0JICAoZ3N0X3BhcnNlX2ZvdW5kX3BhZCksIChnc3RfcGFyc2VfcGVyZm9ybV9kZWxheWVkX2xpbmspLAotCSAgKGdzdF9wYXJzZV9wZXJmb3JtX2xpbmspLCAoeXl0bmFtZXJyKSwgKHl5c3ludGF4X2Vycm9yKSwgKHl5ZXJyb3IpLAotCSAgKF9nc3RfcGFyc2VfbGF1bmNoKToKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIudGFiLnByZS5oOgotCSAgKiBnc3QvcGFyc2UvbGV4Ll9nc3RfcGFyc2VfeXkucHJlLmM6IChQUklOVCksICh5eV9nZXRfbmV4dF9idWZmZXIpLAotCSAgKHl5X2dldF9wcmV2aW91c19zdGF0ZSksICh5eV90cnlfTlVMX3RyYW5zKSwgKGlucHV0KSwKLQkgIChfZ3N0X3BhcnNlX3l5cmVzdGFydCksIChfZ3N0X3BhcnNlX3l5X3N3aXRjaF90b19idWZmZXIpLAotCSAgKF9nc3RfcGFyc2VfeXlfbG9hZF9idWZmZXJfc3RhdGUpLCAoX2dzdF9wYXJzZV95eV9jcmVhdGVfYnVmZmVyKSwKLQkgIChfZ3N0X3BhcnNlX3l5X2RlbGV0ZV9idWZmZXIpLCAoX2dzdF9wYXJzZV95eV9pbml0X2J1ZmZlciksCi0JICAoX2dzdF9wYXJzZV95eV9mbHVzaF9idWZmZXIpLCAoX2dzdF9wYXJzZV95eXB1c2hfYnVmZmVyX3N0YXRlKSwKLQkgIChfZ3N0X3BhcnNlX3l5cG9wX2J1ZmZlcl9zdGF0ZSksCi0JICAoX2dzdF9wYXJzZV95eWVuc3VyZV9idWZmZXJfc3RhY2spLCAoX2dzdF9wYXJzZV95eV9zY2FuX2J1ZmZlciksCi0JICAoX2dzdF9wYXJzZV95eV9zY2FuX3N0cmluZyksIChfZ3N0X3BhcnNlX3l5X3NjYW5fYnl0ZXMpLAotCSAgKHl5X2ZhdGFsX2Vycm9yKSwgKF9nc3RfcGFyc2VfeXlnZXRfZXh0cmEpLAotCSAgKF9nc3RfcGFyc2VfeXlnZXRfbGluZW5vKSwgKF9nc3RfcGFyc2VfeXlnZXRfY29sdW1uKSwKLQkgIChfZ3N0X3BhcnNlX3l5Z2V0X2luKSwgKF9nc3RfcGFyc2VfeXlnZXRfb3V0KSwKLQkgIChfZ3N0X3BhcnNlX3l5Z2V0X2xlbmcpLCAoX2dzdF9wYXJzZV95eWdldF90ZXh0KSwKLQkgIChfZ3N0X3BhcnNlX3l5c2V0X2V4dHJhKSwgKF9nc3RfcGFyc2VfeXlzZXRfbGluZW5vKSwKLQkgIChfZ3N0X3BhcnNlX3l5c2V0X2NvbHVtbiksIChfZ3N0X3BhcnNlX3l5c2V0X2luKSwKLQkgIChfZ3N0X3BhcnNlX3l5c2V0X291dCksIChfZ3N0X3BhcnNlX3l5Z2V0X2RlYnVnKSwKLQkgIChfZ3N0X3BhcnNlX3l5c2V0X2RlYnVnKSwgKF9nc3RfcGFyc2VfeXlnZXRfbHZhbCksCi0JICAoX2dzdF9wYXJzZV95eXNldF9sdmFsKSwgKF9nc3RfcGFyc2VfeXlsZXhfaW5pdCksCi0JICAoeXlfaW5pdF9nbG9iYWxzKSwgKF9nc3RfcGFyc2VfeXlsZXhfZGVzdHJveSksICh5eV9mbGV4X3N0cm5jcHkpLAotCSAgKHl5X2ZsZXhfc3RybGVuKSwgKF9nc3RfcGFyc2VfeXlhbGxvYyksIChfZ3N0X3BhcnNlX3l5cmVhbGxvYyksCi0JICAoX2dzdF9wYXJzZV95eWZyZWUpOgotCSAgSWYgdGhlIGluc3RhbGxlZCBmbGV4IHZlcnNpb24gaXMgdG9vIG9sZCB1c2UgcHJlLWdlbmVyYXRlZCBwYXJzZXIKLQkgIHNvdXJjZXMuIFRoZXNlIHByZS1nZW5lcmF0ZWQgcGFyc2VyIHNvdXJjZXMgYXJlIGFsd2F5cyB1cGRhdGVkIHdoZW4KLQkgIHRoZSBhY3R1YWwgZmxleC9iaXNvbiBzb3VyY2VzIGNoYW5nZSBidXQgcmVxdWlyZSBldmVyeWJvZHkgd2hvIHdhbnRzCi0JICB0byBjaGFuZ2Ugc29tZXRoaW5nIGluIHRoZSBwYXJzZXIgdG8gaGF2ZSBmbGV4ID49IDIuNS4zMSBpbnN0YWxsZWQuCi0KLTIwMDctMDQtMTggMTA6NTg6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgTWFrZSAtLWRpc2FibGUtbmxzIHRvIHdvcmsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb21tb24vbTQvZ3N0LWdldHRleHQubTQ6Ci0JICAqIGdzdC9nc3QtaTE4bi1saWIuaDoKLQkgIE1ha2UgLS1kaXNhYmxlLW5scyB0byB3b3JrCi0KLTIwMDctMDQtMTcgMTY6MTI6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3Rjb25maWcuaC5pbjogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZSB0aGF0IGJyb2tlIHRoZSBidWlsZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JICBSZXZlcnQgcHJldmlvdXMgY2hhbmdlIHRoYXQgYnJva2UgdGhlIGJ1aWxkLgotCi0yMDA3LTA0LTE3IDE0OjM2OjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgotCSAgTUFOUEFUSCBmaXgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgTUFOUEFUSCBmaXgKLQotMjAwNy0wNC0xNyAxMDo0Njo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBEcm9wIGxpYnhtbDIgZGVwZW5kZW5jeSB3aGVuIGJ1aWxkaW5nIHdpdGgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgRHJvcCBsaWJ4bWwyIGRlcGVuZGVuY3kgd2hlbiBidWlsZGluZyB3aXRoCi0JICAtLWVuYWJsZS1iaW5hcnktcmVnaXN0cnkgLS1kaXNhYmxlLWxvYWRzYXZlCi0KLTIwMDctMDQtMTYgMjE6NDE6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3RyZWFtZXIuZG9hcDoKLQkgIGZpeCB0aGUgcmVsZWFzZSBkYXRlIGluIHRoZSBkb2FwIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHRoZSByZWxlYXNlIGRhdGUgaW4gdGhlIGRvYXAgZmlsZQotCi0yMDA3LTA0LTE2IDE5OjQ1OjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuKjogUmVtb3ZlIHVubmVjZXNzYXJ5IDxzeXMvbW1hbi5oPiBpbmNsdWRlIHdoaWNoIGJyb2tlIHRoZSB3aW4zMiBidWlsZCB3aXRoIE1pbmdXOyBtb3ZlIGluY2x1ZGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2FjaGUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSAgUmVtb3ZlIHVubmVjZXNzYXJ5IDxzeXMvbW1hbi5oPiBpbmNsdWRlIHdoaWNoIGJyb2tlIHRoZSB3aW4zMiBidWlsZAotCSAgd2l0aCBNaW5nVzsgbW92ZSBpbmNsdWRlcyBmcm9tIGhlYWRlciBmaWxlIHRvIC5jIGZpbGUsIGV2ZW4gaWYgdGhlCi0JICBoZWFkZXIgZmlsZSBpc24ndCBpbnN0YWxsZWQ7IHVzZSBnX3N0cmVycm9yKCkgd2hlcmUgVVRGLTggc3RyaW5ncwotCSAgYXJlIGV4cGVjdGVkLCBzdWNoIGFzIGluIEdTVF9ERUJVRyBtZXNzYWdlcy4KLQotMjAwNy0wNC0xMyAxNToxNTo1MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IFJlbW92ZSBib2d1cyBhZGRpdGlvbiBmb3IgQVBJIEkgZGlkbid0IGVuZCB1cCBrZWVwaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBSZW1vdmUgYm9ndXMgYWRkaXRpb24gZm9yIEFQSSBJIGRpZG4ndCBlbmQgdXAga2VlcGluZy4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBNZW50aW9uIFNpbmNlOiAwLjEwLjEzIGluIHRoZSBkb2N1bWVudGF0aW9uLgotCSAgQWRkIHRoZSBBUEkga2V5d29yZCB0byB0aGUgcHJldmlvdXMgQ2hhbmdlTG9nIGVudHJ5LgotCi0yMDA3LTA0LTEzIDE0OjE4OjQ0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgQWxsb3cgYmFzZXNyYyBkZXJpdmVkIGNsYXNzZXMgdG8gZXhlY3V0ZSBzZWVrcyBpbiBvdGhlciBmb3JtYXRzIGJ5IHByb3ZpZGluZyBhIHByZXBhcmVfc2Vla19zZWdtZW50IHZtZXRob2QuIFN1Yi1jbGFzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcHJlcGFyZV9zZWVrX3NlZ21lbnQpLAotCSAgKGdzdF9iYXNlX3NyY19wcmVwYXJlX3NlZWtfc2VnbWVudCksIChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBBbGxvdyBiYXNlc3JjIGRlcml2ZWQgY2xhc3NlcyB0byBleGVjdXRlIHNlZWtzIGluIG90aGVyIGZvcm1hdHMKLQkgIGJ5IHByb3ZpZGluZyBhIHByZXBhcmVfc2Vla19zZWdtZW50IHZtZXRob2QuIFN1Yi1jbGFzc2VzIGNhbiBjaG9vc2UKLQkgIHRvIHByZXBhcmUgdGhlIEdzdFNlZ21lbnQgaW4gYW55IGZvcm1hdCB0aGF0IHRoZWlyIHBlcmZvcm1fc2VlayBtZXRob2QKLQkgIHdpbGwgYmUgYWJsZSB0byB1bmRlcnN0YW5kLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyB0aGUKLQkgIG9sZCBiZWhhdmlvdXIgb2YgYXR0ZW1wdGluZyB0byBjb252ZXJ0IHRoZSBzZWVrIG9mZnNldHMgdG8gdGhlCi0JICBjb25maWd1cmVkIG5hdGl2ZSBmb3JtYXQuCi0KLTIwMDctMDQtMTMgMTE6NTM6MDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBEb24ndCBvdXRwdXQgdGhlIHNhbWUgZGVidWcgc3RhdGVtZW50IHR3aWNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyk6Ci0JICBEb24ndCBvdXRwdXQgdGhlIHNhbWUgZGVidWcgc3RhdGVtZW50IHR3aWNlLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX3RyeV90b19tZXJnZV91cCksCi0JICAoZ3N0X2FkYXB0ZXJfcGVlayksIChnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcik6Ci0JICBPcHRpbWlzZSB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGJ1ZmZlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIHRoYXQKLQkgIGNhbiBiZSBqb2luZWQgcXVpY2tseSAoYmVjYXVzZSB0aGV5J3JlIGNvbnRpZ3VvdXMgc3ViLWJ1ZmZlcnMpIGJ5Ci0JICBtZXJnaW5nIHRoZW0gdG9nZXRoZXIgcmF0aGVyIHRoYW4gY29weWluZyBkYXRhIG91dCBpbnRvIG5ldyBtZW1vcnkuCi0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIEZpeCBhIGxlYWsgaW4gYW4gZXJyb3IgcGF0aCBmb3IgcGFyc2VfbGF1bmNoLCBhbmQgYWRkIGEgY2hlY2sKLQkgIGZvciBpdCB0byB0aGUgdGVzdHN1aXRlLgotCi0yMDA3LTA0LTEzIDExOjIwOjQ4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IERvbid0IGRlYWRsb2NrIHdoZW4gcmVsZWFzaW5nIGEgcGFkIC0gZ3N0X3BhZF9zZXRfYWN0aXZlIG1heSB0cnkgYW5kIHRha2UgdGhlIG11bHRpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3RfbXVsdGlfcXVldWVfcmVsZWFzZV9wYWQpOgotCSAgRG9uJ3QgZGVhZGxvY2sgd2hlbiByZWxlYXNpbmcgYSBwYWQgLSBnc3RfcGFkX3NldF9hY3RpdmUgbWF5IHRyeQotCSAgYW5kIHRha2UgdGhlIG11bHRpcXVldWUgbG9jayB0b28uCi0KLTIwMDctMDQtMTIgMTI6NTk6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RlcnJvci4qOiBBUEk6IGFkZCBHU1RfQ09SRV9FUlJPUl9ESVNBQkxFRCAoIzM5MjgwNCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVycm9yLmM6IChfZ3N0X2NvcmVfZXJyb3JzX2luaXQpOgotCSAgKiBnc3QvZ3N0ZXJyb3IuaDoKLQkgIEFQSTogYWRkIEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEICgjMzkyODA0KS4KLQotMjAwNy0wNC0xMiAxMDozMjozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogZG9uJ3QgZ2V0IGVtcHR5IHBhdGhzIG9uIHRoZSBQQVRIIHZhcmlhYmxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIGRvbid0IGdldCBlbXB0eSBwYXRocyBvbiB0aGUgUEFUSCB2YXJpYWJsZXMKLQkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX2lzX2FjdGl2ZSwgZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyk6Ci0JICBEb24ndCBmb3JtYXQgZm9yIHRoZSB1bmNvbW1vbiB0ZXJtaW5hbCB3aWR0aCBvZiA4NCBjaGFyYWN0ZXJzLgotCi0yMDA3LTA0LTA5IDExOjU5OjI4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgYmFjayB0byBoZWFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gaGVhZAotCi0yMDA3LTA0LTA5IDA4OjE3OjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZG9uJ3QgZm9ybWF0IGZvciB0aGUgdW5jb21tb24gZWRpdG9yIHdpZHRoIG9mIDg0IGNoYXJhY3RlcnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZG9uJ3QgZm9ybWF0IGZvciB0aGUgdW5jb21tb24gZWRpdG9yIHdpZHRoIG9mIDg0IGNoYXJhY3RlcnMKLQotMjAwNy0wNC0wNiAxMTo0ODoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBpcGVsaW5lLmM6IE9ubHkgdHJ5IHRvIHNlbGVjdCBhIGRpZmZlcmVudCBwaXBlbGluZSBjbG9jayB3aGVuIHdlIHdlbnQgYmFjayB0bwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAocmVzZXRfc3RyZWFtX3RpbWUpLAotCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BpcGVsaW5lX3NldF9uZXdfc3RyZWFtX3RpbWUpOgotCSAgT25seSB0cnkgdG8gc2VsZWN0IGEgZGlmZmVyZW50IHBpcGVsaW5lIGNsb2NrIHdoZW4gd2Ugd2VudCBiYWNrIHRvCi0JICBQQVVTRUQgYW5kIG5vdCB3aGVuIHdlIG1lcmVseSBnb3QgZmx1c2hlZC4KLQotMjAwNy0wNC0wNSAxNjoxNzoyNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICB0b29scy9nc3QtbGF1bmNoLjEuaW46IGZyYWN0aW9ucyBhcmUgYmV0dGVyIHN1cHBvcnRlZCBpbiBnc3RyZWFtZXIgdGhhbiByYWN0aW9ucywgc28gc3VnZ2VzdCB1c2luZyB0aG9zZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBmcmFjdGlvbnMgYXJlIGJldHRlciBzdXBwb3J0ZWQgaW4gZ3N0cmVhbWVyIHRoYW4gcmFjdGlvbnMsIHNvCi0JICBzdWdnZXN0IHVzaW5nIHRob3NlLgotCi0yMDA3LTA0LTA1IDEzOjQ5OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcG8vbmwucG86Ci0JICB1cGRhdGUgZHV0Y2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGR1dGNoCi0KLTIwMDctMDQtMDUgMTM6NDY6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBwby86IEFkZGVkIERhbmlzaCB0cmFuc2xhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgU3VibWl0dGVkIGJ5OiBNb2dlbnMgSmFlZ2VyIDxtb2dlbnNAamFlZ2VyLnRmPgotCSAgKiBwby9MSU5HVUFTOgotCSAgKiBwby9kYS5wbzoKLQkgIEFkZGVkIERhbmlzaCB0cmFuc2xhdGlvbi4KLQotMjAwNy0wNC0wNSAxMToxNjowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBGaXggbGVhayBjYXVzZWQgd2hlbiByZWZ1c2luZyBuZXdzZWdtZW50IGFmdGVyIEVPUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICAoZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3RfdW5sb2NrZWQpLCAoZ3N0X2Jhc2Vfc2lua19ldmVudCk6Ci0JICBGaXggbGVhayBjYXVzZWQgd2hlbiByZWZ1c2luZyBuZXdzZWdtZW50IGFmdGVyIEVPUy4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfZmFrZV9zaW5rX2luaXQpLCAoZ3N0X2Zha2Vfc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9mYWtlX3NpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9mYWtlX3NpbmtfcHJlcm9sbCksCi0JICAoZ3N0X2Zha2Vfc2lua19yZW5kZXIpLCAoZ3N0X2Zha2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JICBBZGQgbnVtLWJ1ZmZlcnMgcHJvcGVydHkgdG8gbWFrZSB0aGUgZWxlbWVudCBnZW5lcmF0ZSBFT1MgYWZ0ZXIgYQotCSAgY29uZmlndXJhYmxlIGFtb3VudCBvZiBidWZmZXJzLgotCSAgQVBJOiBmYWtlc2luazo6bnVtLWJ1ZmZlcnMgcHJvcGVydHkuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZmFrZXNpbmtfc3VpdGUpOgotCSAgRml4IEdzdEJ1cyBsZWFrIGluIHRlc3QuCi0JICBUZXN0IGZvciBmYWtlc2luayBudW0tYnVmZmVycy4KLQotMjAwNy0wNC0wNSAxMDoxMDowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBEb24ndCBhY2NlcHQgYW55dGhpbmcgYWZ0ZXIgYW4gRU9TLCByZXR1cm4gVU5FWFBFQ1RFRCBpbnN0ZWFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIChnc3RfYmFzZV9zaW5rX3F1ZXVlX29iamVjdF91bmxvY2tlZCksIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBEb24ndCBhY2NlcHQgYW55dGhpbmcgYWZ0ZXIgYW4gRU9TLCByZXR1cm4gVU5FWFBFQ1RFRCBpbnN0ZWFkLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGZha2VzaW5rX3N1aXRlKToKLQkgIFVuaXQgdGVzdCBmb3IgbmV3IEVPUyBiZWhhdmlvdXIuCi0KLTIwMDctMDQtMDUgMTA6MDg6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IE1ha2UgcGFkdGVtcGxhdGVzIGFsc28gd29yayB3aGVuIHRoZXkgZG9uJ3QgY29udGFpbiAlcyBvciAlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKToKLQkgIE1ha2UgcGFkdGVtcGxhdGVzIGFsc28gd29yayB3aGVuIHRoZXkgZG9uJ3QgY29udGFpbiAlcyBvciAlZC4KLQotMjAwNy0wNC0wNSAxMDowNjoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgSW1wcm92ZSBfYWRqdXN0X3VubG9ja2VkKCkgc28gdGhhdCBpdCBvdmVyZmxvd3MgbGVzcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQpLAotCSAgKGdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCksIChnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKToKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBJbXByb3ZlIF9hZGp1c3RfdW5sb2NrZWQoKSBzbyB0aGF0IGl0IG92ZXJmbG93cyBsZXNzLgotCSAgQWRkIGdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCB0byBjb252ZXJ0IGZyb20gZXh0ZXJuYWwgdGltZSB0bwotCSAgaW50ZXJuYWwgdGltZSBiYXNlZCBvbiBjYWxpYnJhdGlvbi4KLQkgIEFkZCBzb21lIG1vcmUgZGVidWcuCi0JICBBUEk6IEdzdENsb2NrOjpnc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQoKQotCi0yMDA3LTA0LTAzIDExOjAyOjQxICswMDAwICBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkubXlvaGFuZW5Abm9raWEuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogRGVhY3RpdmF0ZSBwYWRzIGFuZCBmcmVlIEdzdFNpbmdsZVF1ZXVlIHdpdGggZ3N0X3NpbmdsZV9xdWV1ZV9mcmVlKCkgd2hlbiByZWxlYXNpbmcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taSBkb3QgbXlvaGFuZW4gYXQgbm9raWEgZG90IGNvbT4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IChnc3RfbXVsdGlfcXVldWVfcmVsZWFzZV9wYWQpOgotCSAgRGVhY3RpdmF0ZSBwYWRzIGFuZCBmcmVlIEdzdFNpbmdsZVF1ZXVlIHdpdGggZ3N0X3NpbmdsZV9xdWV1ZV9mcmVlKCkKLQkgIHdoZW4gcmVsZWFzaW5nIHNpbmsgcGFkLiBGaXhlcyAjNDI1NDAwLgotCi0yMDA3LTA0LTAyIDE0OjQ4OjEyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHlubGluay50eHQ6IE1vcmUgd29yayBvbiBwcm9wb3NhbCBmb3IgbmV3IGNvcmUgYXBpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHlubGluay50eHQ6Ci0JICBNb3JlIHdvcmsgb24gcHJvcG9zYWwgZm9yIG5ldyBjb3JlIGFwaS4KLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBBUEk6IEdTVF9CQVNFX1RSQU5TRk9STV9MT0NLL1VOTE9DSyBhZGRlZAotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIChvbl9vYmplY3RfY29udHJvbGxlZF9wcm9wZXJ0eV9jaGFuZ2VkKSwKLQkgIChnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc2V0X2ludGVycG9sYXRpb25fbW9kZSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgotCSAgTGVzcyB2ZXJib3NlIGxvZ2dpbmcgYWRkIGRvY3MgZm9yIHVuaW1wbGVtZW50ZWQgcGFydHMgYW5kIGNvcnJlY3RseQotCSAgcmV0dXJuIHdoZW4gdXNpbmcgdW5hdmFpbGFibGUgcGFydHMuCi0KLTIwMDctMDMtMjkgMTY6MDQ6NDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0Y2xvY2suYzogTW92ZSBhbGwgdGhlIGRlYnVnIHRvIHRoZSBDTE9DSyBjYXRlZ29yeSwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIHRoZSBjbG9jayBvYmplY3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfc2V0X21hc3RlciksIChkb19saW5lYXJfcmVncmVzc2lvbik6Ci0JICBNb3ZlIGFsbCB0aGUgZGVidWcgdG8gdGhlIENMT0NLIGNhdGVnb3J5LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGgKLQkgIHRoZSBjbG9jayBvYmplY3QuCi0KLTIwMDctMDMtMjkgMTU6NTM6MDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogTWFrZSB0YWtlX2J1ZmZlciBhIGJpdCBxdWlja2VyIGJ5IHJlbW92aW5nIHJlZHVuZGFudCBjaGVja3MgY2F1c2VkIGJ5IGNhbGxpbmcgZ3N0X2FkYXB0ZXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKToKLQkgIE1ha2UgdGFrZV9idWZmZXIgYSBiaXQgcXVpY2tlciBieSByZW1vdmluZyByZWR1bmRhbnQgY2hlY2tzCi0JICBjYXVzZWQgYnkgY2FsbGluZyBnc3RfYWRhcHRlcl90YWtlLgotCi0yMDA3LTAzLTI4IDE4OjM4OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogRG9uJ3QgbGVhayBHQ29uZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9zaW5nbGVfcXVldWVfZnJlZSk6Ci0JICBEb24ndCBsZWFrIEdDb25kLgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jOiAoc2V0dXBfbXVsdGlxdWV1ZSksCi0JICAoR1NUX1NUQVJUX1RFU1QpLCAobXVsdGlxdWV1ZV9zdWl0ZSk6Ci0JICBBZGQgc29tZSBkZWFkIHNpbXBsZSB1bml0IHRlc3RzIGZvciB0aGUgJ211bHRpcXVldWUnIGVsZW1lbnQKLQkgIChzb21lIGJpdHMgZG9uJ3Qgd29yayB5ZXQgYW5kIGFyZSBkaXNhYmxlZCBmb3Igbm93KS4KLQotMjAwNy0wMy0yOCAxODoyNToxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogTWFrZSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKSBjcmVhdGUgcmVxdWVzdCBwYWRzIG9ubHkgZm9yIHJlcXVlc3QgcGFkIHRlbXBsYXRlcyBhbmQgbm90IGZvciwgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCksCi0JICAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3JlcXVlc3RfcGFkX3RlbXBsYXRlKToKLQkgIE1ha2UgZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKCkgY3JlYXRlIHJlcXVlc3QgcGFkcyBvbmx5IGZvcgotCSAgcmVxdWVzdCBwYWQgdGVtcGxhdGVzIGFuZCBub3QgZm9yLCBzYXksIHNvbWV0aW1lcyBwYWQgdGVtcGxhdGVzLgotCi0yMDA3LTAzLTI4IDEzOjQ0OjQxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDogQWRkIGV4YW1wbGUgdGhhdCBuZWVkcyBtb3JlIHRoaW5raW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKLQkgIEFkZCBleGFtcGxlIHRoYXQgbmVlZHMgbW9yZSB0aGlua2luZy4KLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtbWlzc2luZy1wbHVnaW5zLnR4dDoKLQkgIE1vcmUgdGhvdWdodHMgYWJvdXQgd3RyYXBwZXIgcGx1Z2lucy4KLQkgICogZG9jcy9yYW5kb20vZW5zb25pYy9lbWJlZGRlZC50eHQ6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcHJvZmlsaW5nLnR4dDoKLQkgIE1vcmUgZGVzaWduIHdvcmsuCi0KLTIwMDctMDMtMjUgMTU6MzM6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBPbmx5IHB1c2ggdGhlIHNlZ21lbnQgZXZlbnRzIGluIHRoZSBQTEFZSU5HIHN0YXRlIGZvciBsaXZlIHNvdXJjZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwKLQkgIChnc3RfYmFzZV9zcmNfbG9vcCk6Ci0JICBPbmx5IHB1c2ggdGhlIHNlZ21lbnQgZXZlbnRzIGluIHRoZSBQTEFZSU5HIHN0YXRlIGZvciBsaXZlIHNvdXJjZXMuCi0KLTIwMDctMDMtMjMgMTc6NTI6MTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0cGlwZWxpbmUuYzogTW9kaWZ5IHRoZSBjbG9jayBkaXN0cmlidXRpb24gcGF0aCBpbiBQQVVTRUQtPlBMQVlJTkcgc28gdGhhdCB3ZSBuZXZlciBhdHRlbXB0IHRvIGNob29zZSBhIG5ldyBjbG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOgotCSAgTW9kaWZ5IHRoZSBjbG9jayBkaXN0cmlidXRpb24gcGF0aCBpbiBQQVVTRUQtPlBMQVlJTkcgc28gdGhhdCB3ZQotCSAgbmV2ZXIgYXR0ZW1wdCB0byBjaG9vc2UgYSBuZXcgY2xvY2sgdW5sZXNzIHdlJ3JlIGFjdHVhbGx5IGxlYXZpbmcKLQkgIHRoZSBQQVVTRUQgc3RhdGUgZm9yIHRoZSBmaXJzdCB0aW1lLiBUaGlzIHByZXZlbnRzIGNob29zaW5nIGEKLQkgIGRpZmZlcmVudCBjbG9jayB3aGVuIHRoZSBzdGF0ZV9jaGFuZ2UgZ2V0cyBjYWxsZWQgZm9yIGEgMm5kIHRpbWUgZHVlCi0JICB0byBzb21lIGVsZW1lbnQgZG9pbmcgYW4gYXN5bmMgc3RhdGUgY2hhbmdlLgotCi0yMDA3LTAzLTIyIDE4OjI4OjAwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9nc3RwYWQuYzogUmV2ZXJ0IGxhc3QgY29tbWl0LiBUaGlzIG5lZWRzIHNvbWUgbW9yZSB0aG91Z2h0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9jYXBzKSwgKGdzdF9wYWRfY29uZmlndXJlX3NpbmspLAotCSAgKGdzdF9wYWRfY29uZmlndXJlX3NyYyksIChnc3RfcGFkX2FsbG9jX2J1ZmZlcl9mdWxsKSwKLQkgIChnc3RfcGFkX2NoYWluX3VuY2hlY2tlZCksIChnc3RfcGFkX3B1c2gpOgotCSAgUmV2ZXJ0IGxhc3QgY29tbWl0LiBUaGlzIG5lZWRzIHNvbWUgbW9yZSB0aG91Z2h0cy4KLQotMjAwNy0wMy0yMiAxNzoxMjoyMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZ3N0cGFkLmM6IENoZWNrIGluIHNldF9jYXBzIGlmIHRoZSBjYXBzIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHBhZCBhbmQgcmVtb3ZlIHR3byBmdW5jdGlvbnMgdGhhdCBhcmUgcmVkdW5kYW50IG4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9jYXBzKSwgKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpLAotCSAgKGdzdF9wYWRfY2hhaW5fdW5jaGVja2VkKSwgKGdzdF9wYWRfcHVzaCk6Ci0JICBDaGVjayBpbiBzZXRfY2FwcyBpZiB0aGUgY2FwcyBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBwYWQgYW5kIHJlbW92ZQotCSAgdHdvIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWR1bmRhbnQgbm93LiBGaXhlcyAjNDIxNTQzLgotCi0yMDA3LTAzLTIyIDEyOjMxOjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogVW5yZWYgc29tZSBtb3JlIHRvIG1ha2UgdmFsZ3JpbmQgaGFwcHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAobWl4ZWRfdGhyZWFkKSwgKG1peGVkX2FzeW5jX2NiKSwgKGdzdF9zeXN0ZW1jbG9ja19zdWl0ZSk6Ci0JICBVbnJlZiBzb21lIG1vcmUgdG8gbWFrZSB2YWxncmluZCBoYXBweS4KLQotMjAwNy0wMy0yMiAxMTo1ODowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IEZpeCBhbm95aW5nIHJlZ3Jlc3Npb24gdGhhdCBzdXJ2aXZlZCBhIGZldyByZWxlYXNlcy4gV2hlbiBhZGRpbmcgYW4gYXN5bmMgZW50cnkgd2hpbGUgYmxvY2tpbmcgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyX3VubG9ja2VkKSwKLQkgIChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyKSwKLQkgIChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfYXN5bmMpLCAoZ3N0X3N5c3RlbV9jbG9ja19pZF91bnNjaGVkdWxlKToKLQkgIEZpeCBhbm95aW5nIHJlZ3Jlc3Npb24gdGhhdCBzdXJ2aXZlZCBhIGZldyByZWxlYXNlcy4gV2hlbiBhZGRpbmcgYW4KLQkgIGFzeW5jIGVudHJ5IHdoaWxlIGJsb2NraW5nIG9uIGEgc3luYyBlbnRyeSwgdGhlIHN5bmMgZW50cnkgd2lsbCB1bmJsb2NrCi0JICBidXQgc3RpbGwgYmUgYnVzeSwgc28gaXQgc2hvdWxkIGNvbnRpbnVlIHRvIHdhaXQgaW5zdGVhZCBvZiByZXR1cm5pbmcKLQkgIF9CVVNZIHRvIHRoZSBhcHAuCi0JICBBZGQgc29tZSBjb21tZW50cyBoZXJlIGFuZCB0aGVyZS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChtaXhlZF90aHJlYWQpLAotCSAgKG1peGVkX2FzeW5jX2NiKSwgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9zeXN0ZW1jbG9ja19zdWl0ZSk6Ci0JICBBZGQgdGVzdGNhc2UgZm9yIHRoaXMuCi0KLTIwMDctMDMtMjIgMTE6MTk6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBIYW5kbGUgZXJyb3JzIGZyb20gdGhlIGNsb2NrIHN5bmMgYmV0dGVyLCBvbmx5IFVOU0NIRURVTEVEIGluZGljYXRlcyBhCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKToKLQkgIEhhbmRsZSBlcnJvcnMgZnJvbSB0aGUgY2xvY2sgc3luYyBiZXR0ZXIsIG9ubHkgVU5TQ0hFRFVMRUQgaW5kaWNhdGVzIGEKLQkgIFdST05HX1NUQVRFIGFuZCBjYW4gc2lsZW50bHkgcGF1c2UgdGhlIHRhc2suIEFsbCBvdGhlciBjYXNlcyBzaG91bGQKLQkgIGVycm9yIG91dC4KLQotMjAwNy0wMy0yMiAwODoyMzo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBGaXggcG9zc2libGUgZGVhZGxvY2sgaWYgcGFkIGV2ZW50ZnVuYyBpcyBub3Qgc3BlY2lmaWVkLiAgRml4ZXMgIzQyMTE3Ny4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IDxzeXJqYWxhIGF0IHNjaSBkb3QgZmk+Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2Z1bGwpLCAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKLQkgIEZpeCBwb3NzaWJsZSBkZWFkbG9jayBpZiBwYWQgZXZlbnRmdW5jIGlzIG5vdCBzcGVjaWZpZWQuICBGaXhlcyAjNDIxMTc3LgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCi0KLTIwMDctMDMtMjEgMTg6MTM6NDAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOiBGaXggc29tZSBlcnJvcnMgaW4gdGhlIHR5cGVmaW5kaW5nIGRvY3MgcG9pbnRlZCBvdXQgb24gaXJjLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKLQkgIEZpeCBzb21lIGVycm9ycyBpbiB0aGUgdHlwZWZpbmRpbmcgZG9jcyBwb2ludGVkIG91dCBvbiBpcmMuCi0KLTIwMDctMDMtMjEgMTc6NTA6NDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogQ2xhcmlmeSBGSVhNRSBjb21tZW50IGluIHRoZSBmYWNlIG9mIGhhdmluZyBhZGRlZCB1bmxvY2tfc3RvcCgpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBDbGFyaWZ5IEZJWE1FIGNvbW1lbnQgaW4gdGhlIGZhY2Ugb2YgaGF2aW5nIGFkZGVkIHVubG9ja19zdG9wKCkKLQotMjAwNy0wMy0yMSAxMTo1MjowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBQcmVwYXJlIGZvciByZWxlYXNlIHdoZXJlIHdlIHdhcm4gYWdhaW5zdCBwb3NzaWJsZSBhcHAgYnJlYWthZ2UgaW4gdGhlIGNhc2Ugb2YgbGl2ZSBwaXBlbGluZXMgYWxvbmcgd2l0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9nZXRfdHlwZSksIChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKToKLQkgIFByZXBhcmUgZm9yIHJlbGVhc2Ugd2hlcmUgd2Ugd2FybiBhZ2FpbnN0IHBvc3NpYmxlIGFwcCBicmVha2FnZSBpbiB0aGUKLQkgIGNhc2Ugb2YgbGl2ZSBwaXBlbGluZXMgYWxvbmcgd2l0aCBhbiBlbnYgdmFyIHRvIGVuYWJsZS9kaXNhYmxlIGxpdmUKLQkgIHByZXJvbGwgbW9kZSAoR1NUX0NPTVBBVD1bbm8tXWxpdmUtcHJlcm9sbCkuCi0KLTIwMDctMDMtMjAgMTQ6MjU6MTUgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYyAoZ3N0X2lkZW50aXR5X2NoZWNrX2ltcGVyZmVjdF9vZmZzZXQpOiBTbyB3ZSBzaG91bGQgdXNlIGNvcnJlY3QgY29uc3RhbnRzIGZvciBjaGVja2luZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYyAoZ3N0X2lkZW50aXR5X2NoZWNrX2ltcGVyZmVjdF9vZmZzZXQpOgotCSAgU28gd2Ugc2hvdWxkIHVzZSBjb3JyZWN0IGNvbnN0YW50cyBmb3IgY2hlY2tpbmcgZm9yIE5vbmUgb2Zmc2V0LgotCi0yMDA3LTAzLTIwIDE0OjE3OjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDogTWVudGlvbiB0aGUgZmFjdCB0aGF0IHRoZSBuZXdseSBzd2l0Y2hlZCBlbGVtZW50IHNob3VsZCBiZSBzZXQgdG8gYXQgbGVhc3QgUEFVU0VELgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgotCSAgTWVudGlvbiB0aGUgZmFjdCB0aGF0IHRoZSBuZXdseSBzd2l0Y2hlZCBlbGVtZW50IHNob3VsZCBiZSBzZXQgdG8gYXQKLQkgIGxlYXN0IFBBVVNFRC4KLQotMjAwNy0wMy0yMCAxMDoyMzoyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdC5jOiBGaXggY29tcGlsYXRpb24gd2l0aCByZWdpc3RyeSBkaXNhYmxlZCBhcyBzcG90dGVkIGJ5IFNhdXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOgotCSAgRml4IGNvbXBpbGF0aW9uIHdpdGggcmVnaXN0cnkgZGlzYWJsZWQgYXMgc3BvdHRlZCBieSBTYXVyLgotCi0yMDA3LTAzLTIwIDA5OjQ2OjExICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBMb29rIGF0IHRoZSBwZW5kaW5nIHN0YXRlIHRvbyB3aGVuIHN5bmNpbmcgdGhlIGVsZW1lbnQgc3RhdGUgdG8gdGhlIHBhcmVudC4gRml4ZXMgIzQyMDEzMy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCk6Ci0JICBMb29rIGF0IHRoZSBwZW5kaW5nIHN0YXRlIHRvbyB3aGVuIHN5bmNpbmcgdGhlIGVsZW1lbnQgc3RhdGUgdG8gdGhlCi0JICBwYXJlbnQuIEZpeGVzICM0MjAxMzMuCi0KLTIwMDctMDMtMTkgMTU6MDE6NDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlLzogQWRkIDo6dW5sb2NrX3N0b3AgdG8gYmFzZXNyYyBhbmQgYmFzZXNpbmsuIFRoaXMgYWxsb3dzIGFuIG9wcG9ydHVuaXR5IGZvciBzdWItY2xhc3NlcyB0byBjb3JyZWN0bHkgY2wuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3NldF9mbHVzaGluZyksCi0JICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZXZlbnQpLCAoZ3N0X2Jhc2Vfc3JjX3VubG9ja19zdG9wKSwKLQkgIChnc3RfYmFzZV9zcmNfZGVhY3RpdmF0ZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgQWRkIDo6dW5sb2NrX3N0b3AgdG8gYmFzZXNyYyBhbmQgYmFzZXNpbmsuIFRoaXMgYWxsb3dzIGFuIG9wcG9ydHVuaXR5Ci0JICBmb3Igc3ViLWNsYXNzZXMgdG8gY29ycmVjdGx5IGNsZWFyIGFueSBzdGF0ZSB0aGV5IHNldCB0cnlpbmcgdG8KLQkgIHVubG9jaywgc3VjaCBhcyBjbGVhcmluZyBvdXQgdW5sb2NrIGNvbW1hbmRzIGZyb20gYSBjb21tYW5kIGZkLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2ZkX3NpbmtfcmVuZGVyKSwgKGdzdF9mZF9zaW5rX3VubG9jayksCi0JICAoZ3N0X2ZkX3NpbmtfdW5sb2NrX3N0b3ApOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mZF9zcmNfaW5pdCksIChnc3RfZmRfc3JjX3VubG9jayksIChnc3RfZmRfc3JjX3VubG9ja19zdG9wKSwKLQkgIChnc3RfZmRfc3JjX2NyZWF0ZSksIChnc3RfZmRfc3JjX2dldF9zaXplKSwgKGdzdF9mZF9zcmNfZG9fc2Vlayk6Ci0JICBJbXBsZW1lbnQgdW5sb2NrX3N0b3AgaW4gZmRzcmMgYW5kIGZkc2luay4KLQkgIEltcGxlbWVudCBzZWVraW5nIGluIGZkc3JjIHdoZW4gYSBzZWVrYWJsZSBmZCBpcyBwYXNzZWQsIGFzIGluCi0JICBnc3QtbGF1bmNoLTAuMTAgZmRzcmMgISAuLi4gISB4dmltYWdlc2luayA8IC9wYXRoL3RvL2ZpbGUKLQotMjAwNy0wMy0xOSAxMjowNzozMiArMDAwMCAgRXZhbiBOZW1lcnNvbiA8ZXZhbkBjb2V1cy5kYXNoLmdyb3VwLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogRml4IHBhZC1hZGRlZCBhbmQgcGFkLXJlbW92ZWQgc2lnbmFsIHNpZ25hdHVyZXMgc28gdGhhdCB0aGUgcGFkIHR5cGUgaXMgc3RhdGVkIGFzIEdTVF9UWVBFX1BBRCBpbnN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBFdmFuIE5lbWVyc29uIDxldmFuIGF0IGNvZXVzIGRhc2ggZ3JvdXAgZG90IGNvbT4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NsYXNzX2luaXQpOgotCSAgRml4IHBhZC1hZGRlZCBhbmQgcGFkLXJlbW92ZWQgc2lnbmFsIHNpZ25hdHVyZXMgc28gdGhhdCB0aGUgcGFkIHR5cGUgaXMKLQkgIHN0YXRlZCBhcyBHU1RfVFlQRV9QQUQgaW5zdGVhZCBvZiBHX1RZUEVfT0JKRUNULiBGaXhlcyAjNDE5ODUxLgotCi0yMDA3LTAzLTE5IDEwOjQ3OjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgbmV3IGVsZW1lbnQgZmllbGQgYW5kIG1ldGhvZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgQWRkIG5ldyBlbGVtZW50IGZpZWxkIGFuZCBtZXRob2QuCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX2luaXQpLAotCSAgKGJpbl9yZW1vdmVfbWVzc2FnZXMpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX3JlbW92ZV9mdW5jKSwKLQkgIChnc3RfYmluX3JlY2FsY19zdGF0ZSksIChnc3RfYmluX2dldF9zdGF0ZV9mdW5jKSwKLQkgIChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKSwgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpLAotCSAgKGdzdF9iaW5fY29udGludWVfZnVuYyksIChiaW5fYnVzX2hhbmRsZXIpLAotCSAgKGJpbl9wdXNoX3N0YXRlX2NvbnRpbnVlKSwgKGJpbl9oYW5kbGVfYXN5bmNfc3RhcnQpLAotCSAgKGJpbl9oYW5kbGVfYXN5bmNfZG9uZSksIChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgTWFrZSBhc3luYyBzdGF0ZSBjaGFuZ2VzIGEgYml0IHNtYXJ0ZXIgYnkgdXNpbmcgbmV3IEFTWU5DX1NUQVJUIGFuZAotCSAgQVNZTkNfRE9ORSBtZXNzYWdlcy4gVGhpcyByZWR1Y2VzIHRoZSBudW1iZXIgb2YgdGltZXMgd2UgcnVuIHRoZSBzdGF0ZQotCSAgcmVjYWxjdWxhdGlvbiB0aHJlYWQuCi0JICBEb24ndCBjaGFuZ2Ugc3RhdGUgb2YgZWxlbWVudCB3aXRoIGEgcGVuZGluZyBBU1lOQ19TVEFSVCBtZXNzYWdlLgotCSAgRGVwcmVjYXRlIFNUQVRFX0RJUlRZIG1lc3NhZ2VzLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfaW5pdCksIChnc3RfZWxlbWVudF9zZW5kX2V2ZW50KSwKLQkgIChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksIChnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSksIChnc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYyksCi0JICAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIEtlZXAgdGhlIHN0YXRlIHRoYXQgd2FzIGxhc3Qgc2V0IGJ5IHRoZSBhcHAgaW4gYSBuZXcgZWxlbWVudCBmaWVsZC4KLQkgIERvbid0IGFsbG93IHN0YXRlIGNoYW5nZXMgd2hlbiBoYW5kbGluZyBhbiBlbGVtZW50IGV2ZW50LgotCSAgUG9zdCBBU1lOQ19TVEFSVCBhbmQgQVNZTkNfRE9ORSBtZXNzYWdlcy4KLQkgIENoYW5nZSBsb3N0X3N0YXRlIHNvIHRoYXQgd2UgZ28gdG8gUEFVU0VEIGFuZCB3YWl0IGZvciB0aGUgcGFyZW50IHRvIHNldAotCSAgdXMgdG8gUExBWUlORyBhZ2FpbiAoc28gbGF0ZW5jeSBjYWxjdWxhdGlvbiBjYW4gYmUgcGVyZm9ybWVkKQotCSAgRXhwb3J0IGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSgpIG1ldGhvZCBzbyB0aGF0IHN1YmNsYXNzZXMgY2FuIHVzZSBpdC4KLQkgIEFQSTogZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKCkKLQkgIEFQSTogR1NUX1NUQVRFX1RBUkdFVAotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwKLQkgIChyZXNldF9zdHJlYW1fdGltZSksIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcGlwZWxpbmVfaGFuZGxlX21lc3NhZ2UpLCAoZ3N0X3BpcGVsaW5lX3NldF9uZXdfc3RyZWFtX3RpbWUpOgotCSAgVXNpbmcgdGhlIG5ldyBBU1lOQ19TVEFSVCBtZXNzYWdlIHdlIGNhbiByZXNldCB0aGUgYmFzZV90aW1lIHdoZW4KLQkgIG5lZWRlZC4gVGhpcyBjYW4gdGhlbiBiZSB1c2VkIHRvIGltcGxlbWVudCBiYXNlX3RpbWUgcmVkaXN0cmlidXRpb24gaW4KLQkgIGZsdXNoaW5nIHNlZWtzIHNvIHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgZXhwbGljaXQgc2VlayBoYW5kbGluZy4KLQkgIFBlcmZvcm0gbGF0ZW5jeSBxdWVyeSBhbmQgY29uZmlndXJhdGlvbiB3aGVuIGdvaW5nIHRvIFBMQVlJTkcuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKLQkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIFBvc3QgbmV3IEFTWU5DX1NUQVJUL0FTWU5DX0RPTkUgbWVzc2FnZXMuCi0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCB0ZXN0IGJlY2F1c2UgdGhlIGJpbiB3aWxsIG5vdCBzZXQgdGhlIGFzeW5jIGVsZW1lbnQgdG8gUExBWUlORyByaWdodAotCSAgYXdheS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiAocG9wX2FzeW5jX2RvbmUpLCAoR1NUX1NUQVJUX1RFU1QpOgotCSAgTWFrZSB0aGUgbWVzc2FnZSBjaGVjayBhIGxpdHRsZSBzdHJvbmdlci4KLQkgIEhhbmRsZSBBU1lOQyBtZXNzYWdlcy4KLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEV4cGVjdCBBU1lOQ19ET05FIG1lc3NhZ2VzLgotCi0yMDA3LTAzLTE5IDA5OjU1OjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgQVNZTkNfU1RBUlQgYW5kIEFTWU5DX0RPTkUgbWVzc2FnZXMgdG8gcHJlcGFyZSBmb3IgbGF0ZW5jeSBzdXBwb3J0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfYXN5bmNfc3RhcnQpLAotCSAgKGdzdF9tZXNzYWdlX25ld19hc3luY19kb25lKSwgKGdzdF9tZXNzYWdlX3BhcnNlX2luZm8pLAotCSAgKGdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX3N0YXJ0KToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIEFkZCBBU1lOQ19TVEFSVCBhbmQgQVNZTkNfRE9ORSBtZXNzYWdlcyB0byBwcmVwYXJlIGZvciBsYXRlbmN5Ci0JICBzdXBwb3J0LgotCi0yMDA3LTAzLTE1IDIyOjMzOjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OgotCSAgdHlwb3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdHlwb3MKLQotMjAwNy0wMy0xNSAxMjozNzo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogTm93IHRoYXQgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZSAnQ29kZWMnIGtleXdvcmQgYW55IGxvbmdlciBpbiB0aGUga2xhc3MsIHdlIHNob3VsZG4ndCBzcGV3IGEgd2FyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIChwcmludF9wbHVnaW5fYXV0b21hdGljX2luc3RhbGxfaW5mb19jb2RlY3MpOgotCSAgTm93IHRoYXQgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZSAnQ29kZWMnIGtleXdvcmQgYW55IGxvbmdlciBpbiB0aGUKLQkgIGtsYXNzLCB3ZSBzaG91bGRuJ3Qgc3BldyBhIHdhcm5pbmcgaWYgdGhlIGtsYXNzIGlzbid0IGEgZGVjb2RlciBvcgotCSAgZW5jb2RlciAoc2luY2UgaXQgbWlnaHQgYmUgYSBTb3VyY2UvTmV0d29yaywgZm9yIGV4YW1wbGUpLgotCi0yMDA3LTAzLTE0IDE3OjI0OjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBEb24ndCByZXF1aXJlIGRlY29kZXIvZGVtdXhlci9kZXBheWxvYWRlciBlbGVtZW50cyBvciBlbmNvZGVyL211eGVyL3BheWxhZGVyIGVsZW1lbnRzIHRvIGhhdmUgJ0MuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgKHByaW50X3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvX2NvZGVjcyk6Ci0JICBEb24ndCByZXF1aXJlIGRlY29kZXIvZGVtdXhlci9kZXBheWxvYWRlciBlbGVtZW50cyBvcgotCSAgZW5jb2Rlci9tdXhlci9wYXlsYWRlciBlbGVtZW50cyB0byBoYXZlICdDb2RlYycgYXMgcGFydCBvZiB0aGVpcgotCSAgZmFjdG9yeSBjbGFzcyBzdHJpbmcgd2hlbiBpbnRyb3NwZWN0aW5nIGEgcGx1Z2luJ3MgY2FwYWJpbGl0aWVzLgotCSAgZHJhZnQta2xhc3MudHh0IG1lbnRpb25zIHRoYXQgaXQgbWlnaHQgYmUgcmVtb3ZlZCBpbiBmdXR1cmUsIGFuZAotCSAgZmx1bXAzZGVjIGRvZXNuJ3QgaGF2ZSBpdCBhcyBwYXJ0IG9mIGl0cyBjbGFzcyBzdHJpbmcsIHNvIGNoYW5jZXMKLQkgIGFyZSBvdGhlcnMgbWlnaHQgYWxzbyBub3QgaGF2ZSBpdC4KLQotMjAwNy0wMy0xNCAxNTo0MjowMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcmFuZG9tL2kxOG46Ci0JICB1cGRhdGUgaTE4biBkb2MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGkxOG4gZG9jCi0KLTIwMDctMDMtMTQgMTU6MTc6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICByZWZvcm1hdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWZvcm1hdAotCi0yMDA3LTAzLTE0IDE1OjE1OjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vOiBVcGRhdGUgdHJhbnNsYXRpb25zIGZyb20gdHJhbnNsYXRpb24gcHJvamVjdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL2FmLnBvOgotCSAgKiBwby9hei5wbzoKLQkgICogcG8vYmcucG86Ci0JICAqIHBvL2NhLnBvOgotCSAgKiBwby9jcy5wbzoKLQkgICogcG8vZGUucG86Ci0JICAqIHBvL2VuX0dCLnBvOgotCSAgKiBwby9mci5wbzoKLQkgICogcG8vaXQucG86Ci0JICAqIHBvL25iLnBvOgotCSAgKiBwby9ubC5wbzoKLQkgICogcG8vcnUucG86Ci0JICAqIHBvL3NxLnBvOgotCSAgKiBwby9zci5wbzoKLQkgICogcG8vc3YucG86Ci0JICAqIHBvL3RyLnBvOgotCSAgKiBwby91ay5wbzoKLQkgICogcG8vdmkucG86Ci0JICAqIHBvL3poX0NOLnBvOgotCSAgKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSB0cmFuc2xhdGlvbnMgZnJvbSB0cmFuc2xhdGlvbiBwcm9qZWN0Ci0KLTIwMDctMDMtMTQgMTM6NDA6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGNoaWxkcHJveHkuYzogSW52ZXJ0IHByZWNvbmRpdGlvbiBjaGVjayB0byBiZSBhbGlrZSB0aGUgb25lcyBpbiB0aGUgbWltaWNlZCBnb2JqZWN0IGFwaS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOiAoZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSk6Ci0JICBJbnZlcnQgcHJlY29uZGl0aW9uIGNoZWNrIHRvIGJlIGFsaWtlIHRoZSBvbmVzIGluIHRoZSBtaW1pY2VkIGdvYmplY3QKLQkgIGFwaS4KLQotMjAwNy0wMy0xNCAxMToyMTo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGZpeCBtaXNsZWFkaW5nIGxvZyBzdGF0ZW1lbnQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IG1pc2xlYWRpbmcgbG9nIHN0YXRlbWVudAotCi0yMDA3LTAzLTEzIDE0OjUzOjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvOiBEbyBzb21lIEFyY2hpdGVjdCB3b3JrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LXRhZ3JlYWRpbmcudHh0OgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2F1ZGlvYmFzZWNsYXNzZXMudHh0OgotCSAgRG8gc29tZSBBcmNoaXRlY3Qgd29yay4KLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9zZXRfbmFtZSk6Ci0JICBBZGQgYSBXQVJOSU5HLgotCSAgKiBnc3QvZ3N0cGFkLmM6Ci0JICBBZGQgZG9jcyB0aGF0IHBvaW50IGZyb20gZ3N0X3BhZF9nZXRfcmFuZ2UgdG8gZ3N0X3BhZF9wdWxsX3JhbmdlCi0KLTIwMDctMDMtMTIgMTU6Mjc6MDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0c3lzdGVtY2xvY2suYzogRGVmZXIgc3RhcnRpbmcgdGhlIGFzeW5jIHN5c3RlbSBjbG9jayB0aHJlYWQgdW50aWwgdGhlIGZpcnN0IGFzeW5jIHdhaXQgaXMgc2NoZWR1bGVkLiBGaXhlcyAjNDEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfaW5pdCksCi0JICAoZ3N0X3N5c3RlbV9jbG9ja19zdGFydF9hc3luYyksIChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfYXN5bmMpOgotCSAgRGVmZXIgc3RhcnRpbmcgdGhlIGFzeW5jIHN5c3RlbSBjbG9jayB0aHJlYWQgdW50aWwgdGhlIGZpcnN0IGFzeW5jCi0JICB3YWl0IGlzIHNjaGVkdWxlZC4gRml4ZXMgIzQxNDk4Ni4KLQotMjAwNy0wMy0xMiAxNDoyMzoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IEZpeCBzbWFsbCBsZWFrIChmcmVlIEdzdFNpbmdsZVF1ZXVlIHN0cnVjdHVyZSB0b28sIG5vdCBvbmx5IGNvbnRlbnRzKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuYzogKGdzdF9tdWx0aV9xdWV1ZV9maW5hbGl6ZSksCi0JICAoZ3N0X3NpbmdsZV9xdWV1ZV9mcmVlKToKLQkgIEZpeCBzbWFsbCBsZWFrIChmcmVlIEdzdFNpbmdsZVF1ZXVlIHN0cnVjdHVyZSB0b28sIG5vdCBvbmx5IGNvbnRlbnRzKS4KLQotMjAwNy0wMy0xMCAxNTo0NDo0NCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0YmluLmM6IFVzZSBHU1RfU1RSX05VTEwgdG8gcHJldmVudCBOVUxMIHBvaW50ZXIgdG8gYmUgcGFzc2VkIHRvIEdTVF9DQVRfREVCVUcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOihnc3RfYmluX2FkZCk6Ci0JICBVc2UgR1NUX1NUUl9OVUxMIHRvIHByZXZlbnQgTlVMTCBwb2ludGVyIHRvIGJlIHBhc3NlZCB0byBHU1RfQ0FUX0RFQlVHLgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIG5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCi0KLTIwMDctMDMtMDkgMTY6Mzk6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6IEZpeCBHc3RUZWUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgRml4IEdzdFRlZSBkb2NzLgotCi0yMDA3LTAzLTA5IDE2OjMwOjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgbWV0YWRhdGEgY29weSBmdW5jdGlvbnMuIEZpeGVzICMzOTMwOTkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9jb3B5X21ldGFkYXRhKSwgKF9nc3RfYnVmZmVyX2NvcHkpOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBBZGQgbWV0YWRhdGEgY29weSBmdW5jdGlvbnMuIEZpeGVzICMzOTMwOTkuCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2J1ZmZlcl9zdGFtcCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpOgotCSAgVXNlIG5ldyBtZXRhZGF0YSBjb3B5IGZ1bmN0aW9ucy4KLQotMjAwNy0wMy0wOSAxNDoyMDoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuKjogU2VwYXJhdGUgb3V0IGNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXAgYW5kIGNoZWNrLWltcGVyZmVjdC1vZmZzZXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9pZGVudGl0eV9pbml0KSwgKGdzdF9pZGVudGl0eV9jaGVja19wZXJmZWN0KSwKLQkgIChnc3RfaWRlbnRpdHlfY2hlY2tfaW1wZXJmZWN0X3RpbWVzdGFtcCksCi0JICAoZ3N0X2lkZW50aXR5X2NoZWNrX2ltcGVyZmVjdF9vZmZzZXQpLCAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCksCi0JICAoZ3N0X2lkZW50aXR5X3NldF9wcm9wZXJ0eSksIChnc3RfaWRlbnRpdHlfZ2V0X3Byb3BlcnR5KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgotCSAgU2VwYXJhdGUgb3V0IGNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXAgYW5kIGNoZWNrLWltcGVyZmVjdC1vZmZzZXQuCi0JICBQdXQgYmFjayBjaGVjay1wZXJmZWN0IGFzIGl0IHdhcyB0byBrZWVwIGNvbXBhdGliaWxpdHkuCi0KLTIwMDctMDMtMDkgMTI6MzQ6NDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBUaGVyZSdzIG5vIG5lZWQgdG8gd2FybiBpZiBWT0lEX1BFTkRJTkcgaXMgbm90IE5PTkUgaGVyZSwgYXMgbG9uZyBhcyB0aGUgc3RhdGUgaXMgTlVMTCBpdCdzIG9rLCBhbmQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZGlzcG9zZSk6Ci0JICBUaGVyZSdzIG5vIG5lZWQgdG8gd2FybiBpZiBWT0lEX1BFTkRJTkcgaXMgbm90IE5PTkUgaGVyZSwgYXMKLQkgIGxvbmcgYXMgdGhlIHN0YXRlIGlzIE5VTEwgaXQncyBvaywgYW5kIHRoYXQncyBjaGVja2VkIGltbWVkaWF0ZWx5Ci0JICBhYm92ZS4KLQotMjAwNy0wMy0wOCAxNzo1ODo1NyArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBGaXggY2hlY2sgZm9yIHBlcmZlY3Qgc3RyZWFtIHRvIGlnbm9yZSBidWZmZXJzIHdpdGggLTEgb2Zmc2V0cy9vZmZzZXQgZW5kcyB3aGVuIGNoZWNrLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDMtMDggIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NoZWNrX3BlcmZlY3QpOgotCSAgRml4IGNoZWNrIGZvciBwZXJmZWN0IHN0cmVhbSB0byBpZ25vcmUgYnVmZmVycyB3aXRoIC0xCi0JICBvZmZzZXRzL29mZnNldCBlbmRzIHdoZW4gY2hlY2tpbmcgZGF0YSBjb250aWd1aXR5LgotCi0yMDA3LTAzLTA4IDE2OjI2OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0b29scy9nc3QtbGF1bmNoLmM6IFByaW50IElORk8gbWVzc2FnZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6Ci0JICBQcmludCBJTkZPIG1lc3NhZ2VzLgotCi0yMDA3LTAzLTA4IDExOjQwOjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uKjogQWRkIHN1cHBvcnQgZm9yIGRyb3BwaW5nIGJ1ZmZlcnMgd2l0aCBjdXN0b20gR3N0Rmxvd1JldHVybi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudGZ1bmMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbiksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjdGl2YXRlKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgZHJvcHBpbmcgYnVmZmVycyB3aXRoIGN1c3RvbSBHc3RGbG93UmV0dXJuLgotCSAgU2V0IERJU0NPTlQgZmxhZ3Mgb24gb3V0Z29pbmcgYnVmZmVycyBiYXNlZCBvbiBRb1MsIGluY29tbWluZyBESVNDT05UCi0JICBidWZmZXJzIG9yIGRyb3BwZWQgYnVmZmVycy4KLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3MgZm9yIG5ldyBjdXN0b20gcmV0dXJuIGNvZGUuCi0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV90cmFuc2Zvcm1faXApOgotCSAgVXNlIGRyb3Agc3VwcG9ydCBpbiBiYXNlIGNsYXNzIHRvIGltcGxlbWVudCBkcm9wLXByb2JhYmlsaXR5LgotCi0yMDA3LTAzLTA3IDE3OjI2OjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBSZW1vdmUgbmV3bGluZXMgYXQgZW5kIG9mIGRlYnVnIGxvZyBzdHJpbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzogKGxvYWRfcGx1Z2luX2Z1bmMpOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2xvYWRfYnlfbmFtZSksIChnc3RfcGx1Z2luX2xvYWQpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICAqIGdzdC9nc3R0cmFjZS5jOiAoZ3N0X3RyYWNlX25ldyksIChnc3RfYWxsb2NfdHJhY2Vfc2V0X2ZsYWdzX2FsbCk6Ci0JICBSZW1vdmUgbmV3bGluZXMgYXQgZW5kIG9mIGRlYnVnIGxvZyBzdHJpbmdzLgotCi0yMDA3LTAzLTA3IDE3OjE0OjUzICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IE9ubHkgcG9zdCBidXMgbWVzc2FnZSBhdCBtYXgsIG9uY2UgcGVyIGJ1ZmZlciByZWNlaXZlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wMy0wNyAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2hlY2tfcGVyZmVjdCk6Ci0JICBPbmx5IHBvc3QgYnVzIG1lc3NhZ2UgYXQgbWF4LCBvbmNlIHBlciBidWZmZXIgcmVjZWl2ZWQuCi0KLTIwMDctMDMtMDcgMTc6MTM6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduLzogQWRkIGRvYyBhYm91dCBzeW5jaHJvbmlzYXRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0OgotCSAgQWRkIGRvYyBhYm91dCBzeW5jaHJvbmlzYXRpb24KLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJ1cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0cGlwZWxpbmUudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWxpdmUtc291cmNlLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbXMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0OgotCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCi0yMDA3LTAzLTA3IDE3OjA5OjU3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0cmVhbWVyLmRvYXA6IFVwZGF0ZSB0aGUgZG9hcCBmaWxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdHJlYW1lci5kb2FwOgotCSAgVXBkYXRlIHRoZSBkb2FwIGZpbGUuCi0KLTIwMDctMDMtMDcgMTc6MDI6NTEgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogUmVuYW1lIG5vbi1wZXJmZWN0IHRvIGltcGVyZmVjdCBmb3IgTWlrZSBhbmQgZm9yIHRoZSBzYW5jdGl0eSBvZiB0aGUgbGFuZ3VhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDMtMDcgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NoZWNrX3BlcmZlY3QpOgotCSAgUmVuYW1lIG5vbi1wZXJmZWN0IHRvIGltcGVyZmVjdCBmb3IgTWlrZSBhbmQgZm9yIHRoZSBzYW5jdGl0eSBvZgotCSAgdGhlIGxhbmd1YWdlLgotCSAgQWxzbyBtYWtlIHN1cmUgYnVzIG1lc3NhZ2UgZ2V0cyBlbWl0dGVkIGZvciBkYXRhLWluY29udGlndWl0aWVzLgotCi0yMDA3LTAzLTA3IDE2OjU4OjQyICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5Lio6IEVtaXQgYnVzIG1lc3NhZ2UgaWYgY2hlY2stcGVyZmVjdCBpcyB0cnVlIGFuZCB3ZSBlbmNvdW50ZXIgYSBub24tcGVyZmVjdCBzdHJlYW0gYmV0d2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wMy0wNyAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2hlY2tfcGVyZmVjdCksCi0JICAoZ3N0X2lkZW50aXR5X3N0YXJ0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgotCSAgRW1pdCBidXMgbWVzc2FnZSBpZiBjaGVjay1wZXJmZWN0IGlzIHRydWUgYW5kIHdlIGVuY291bnRlciBhCi0JICBub24tcGVyZmVjdCBzdHJlYW0gYmV0d2VlbiAyIGNvbnNlY3V0aXZlIGJ1ZmZlcnMuCi0JICBGaXhlcyAjNDE1Mzk0LgotCi0yMDA3LTAzLTA3IDE2OjU1OjAyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBCYWNrIHRvIENWUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gQ1ZTCi0KLT09PSByZWxlYXNlIDAuMTAuMTIgPT09Ci0KLTIwMDctMDMtMDcgMTY6NDQ6MDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4xMgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZWxlYXNlIDAuMTAuMTIKLQotMjAwNy0wMy0wNyAxNjozMTozMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwNy0wMy0wNyAxMjo1MToyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwNy0wMy0wMSAxODo0NjozNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogVmVyc2lvbiAwLjEwLjExLjIgKDAuMTAuMTIgcHJlLXJlbGVhc2UpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgVmVyc2lvbiAwLjEwLjExLjIgKDAuMTAuMTIgcHJlLXJlbGVhc2UpCi0JICBCdW1wIGxpYnRvb2wgdmVyc2lvbmluZy4KLQotMjAwNy0wMy0wMSAxNDo0OTo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogTG9nIGZsb3ctbmFtZXMgYW5kIG5vdCBudW1iZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgotCSAgTG9nIGZsb3ctbmFtZXMgYW5kIG5vdCBudW1iZXJzLgotCi0yMDA3LTAyLTI4IDE5OjI1OjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBDb252ZXJ0IHRvIG5ldyBBR19HU1Qgc3R5bGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQ29udmVydCB0byBuZXcgQUdfR1NUIHN0eWxlLgotCi0yMDA3LTAyLTI4IDE4OjUxOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERvbid0IHVucmVmIHF1ZXJ5IHR3aWNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSk6Ci0JICBEb24ndCB1bnJlZiBxdWVyeSB0d2ljZS4KLQotMjAwNy0wMi0yOCAxNjo1Nzo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IEltcGxlbWVudCBHc3RPYmplY3QgLT4gc3RyaW5nIHRyYW5zZm9ybSBzbyB3ZSBwcmludCBvYmplY3QgbmFtZXMgd2hlbiBzZXJpYWxpemluZyBHVmFsdWVzIGNvbnRhaW5pbmcgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfdHJhbnNmb3JtX29iamVjdF9zdHJpbmcpLAotCSAgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6Ci0JICBJbXBsZW1lbnQgR3N0T2JqZWN0IC0+IHN0cmluZyB0cmFuc2Zvcm0gc28gd2UgcHJpbnQgb2JqZWN0IG5hbWVzCi0JICB3aGVuIHNlcmlhbGl6aW5nIEdWYWx1ZXMgY29udGFpbmluZyBHc3RPYmplY3RzLgotCi0yMDA3LTAyLTI4IDE2OjU1OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgbmV3IHN0dWZmIHRvIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBuZXcgc3R1ZmYgdG8gZG9jcy4KLQotMjAwNy0wMi0yOCAxNjo0NjowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBJbXByb3ZlIGxhdGVuY3kgcXVlcnkgY29kZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3kpLAotCSAgKGdzdF9iYXNlX3NpbmtfcXVldWVfb2JqZWN0X3VubG9ja2VkKSwgKGdzdF9iYXNlX3Npbmtfc2VuZF9ldmVudCksCi0JICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgSW1wcm92ZSBsYXRlbmN5IHF1ZXJ5IGNvZGUuCi0JICBEb24ndCBsZWFrIGxhdGVuY3kgZXZlbnRzLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBJbXByb3ZlIGRlYnVnZ2luZy4KLQotMjAwNy0wMi0yOCAxNjo0Mzo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuKjogSW1wcm92ZSBkb2NzIGEgbGl0dGxlLiBBZGRlZCBTaW5jZTogZm9yIG5ldyBtYWNyby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsKSwKLQkgIChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyk6Ci0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBJbXByb3ZlIGRvY3MgYSBsaXR0bGUuIEFkZGVkIFNpbmNlOiBmb3IgbmV3IG1hY3JvLgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X3NpbmspOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9waXBlbGluZV9zZXRfbmV3X3N0cmVhbV90aW1lKToKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmg6Ci0JICBJbXByb3ZlIGRlYnVnZ2luZyBhbmQgZG9jcy4KLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lKToKLQkgIEltcHJvdmUgZGVidWdnaW5nLgotCi0yMDA3LTAyLTI4IDE2OjQwOjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBIYW5kbGUgSU5GTyBtZXNzYWdlcyBmcm9tIHRoZSBHU1RfRUxFTUVOVF9JTkZPIG1hY3JvIGFzIHdlbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSksIChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksCi0JICAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKLQkgIEhhbmRsZSBJTkZPIG1lc3NhZ2VzIGZyb20gdGhlIEdTVF9FTEVNRU5UX0lORk8gbWFjcm8gYXMgd2VsbC4KLQkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KLQkgIFNtYWxsIGNvZGUgY2xlYW51cHMuCi0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfaW5mbyksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbyk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBBUEk6IGdzdF9tZXNzYWdlX25ld19pbmZvKCkKLQkgIEFQSTogZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbygpCi0JICBBZGQgSU5GTyBtZXNzYWdlIGNyZWF0ZSBhbmQgcGFyc2UgY29kZS4KLQotMjAwNy0wMi0yOCAxNjozNTo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBBbHNvIHJlcG9ydCB0aGUgbGl2ZSBwYXJhbWV0ZXIgb2YgYSBsYXRlbmN5IHF1ZXJ5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9xdWVyeV9taW5fbWF4X2luaXQpLCAoYmluX3F1ZXJ5X2xhdGVuY3lfZm9sZCksCi0JICAoYmluX3F1ZXJ5X2xhdGVuY3lfZG9uZSk6Ci0JICBBbHNvIHJlcG9ydCB0aGUgbGl2ZSBwYXJhbWV0ZXIgb2YgYSBsYXRlbmN5IHF1ZXJ5LgotCi0yMDA3LTAyLTI4IDEyOjU3OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKLQkgIHBsdWcgdGVzdCBsZWFrCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBsdWcgdGVzdCBsZWFrCi0KLTIwMDctMDItMjggMTI6NDM6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGFjdHVhbGx5IHVzZSB0aGUgZW52IHZhciBmb3IgdGVzdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWN0dWFsbHkgdXNlIHRoZSBlbnYgdmFyIGZvciB0ZXN0cwotCi0yMDA3LTAyLTI4IDEyOjQwOjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzogQ29weSB0aGUgY3VycmVudCBnZW5lcmljL3N0YXRlcyBleGFtcGxlIGZyb20gLWJhc2UgYW5kIGFkYXB0IHNvIHdlIGNhbiB1c2UgdGhlIGV4YWN0IHNhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzogKEdTVF9TVEFSVF9URVNUKSwgKHN0YXRlc19zdWl0ZSk6Ci0JICBDb3B5IHRoZSBjdXJyZW50IGdlbmVyaWMvc3RhdGVzIGV4YW1wbGUgZnJvbSAtYmFzZSBhbmQgYWRhcHQgc28KLQkgIHdlIGNhbiB1c2UgdGhlIGV4YWN0IHNhbWUgY29kZSBldmVyeXdoZXJlLgotCSAgQ2hlY2sgYSBTVEFURVNfSUdOT1JFX0VMRU1FTlRTIGVudiB2YXIgd2hpY2ggY2FuIGJlIHVzZWQKLQkgIHRvIGlnbm9yZSBjZXJ0YWluIGVsZW1lbnQgZmFjdG9yaWVzIGZvciB0aGlzIHRlc3QsIHdoaWNoIGlzCi0JICB3aGF0IGlzIGJlaW5nIGRvbmUgaW4gLWJhc2UKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBNZW50aW9uIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0KLTIwMDctMDItMjcgMTc6MjI6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFQSTogZ3N0X2J1c190aW1lZF9wb3AoKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfaW5pdCksIChnc3RfYnVzX2Rpc3Bvc2UpLCAoZ3N0X2J1c19wb3N0KSwKLQkgIChnc3RfYnVzX3RpbWVkX3BvcCksIChnc3RfYnVzX3BvcCk6Ci0JICAqIGdzdC9nc3RidXMuaDoKLQkgIEFQSTogZ3N0X2J1c190aW1lZF9wb3AoKQotCSAgSW1wbGVtZW50IGdzdF9idXNfdGltZWRfcG9wKCkgdG8gZG8gYSBibG9ja2luZyB0aW1lZCB3YWl0IGZvciBhCi0JICBtZXNzYWdlIHRvIGFycml2ZSBvbiB0aGUgYnVzLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6IChHU1RfU1RBUlRfVEVTVCksIChwb3BfdGhyZWFkKSwKLQkgIChnc3RfYnVzX3N1aXRlKToKLQkgIFR3byB1bml0IHRlc3RzIGZvciBuZXcgX3RpbWVkX3BvcCgpIGZ1bmN0aW9uLgotCi0yMDA3LTAyLTIzIDE3OjQyOjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGlwZWxpbmUuYzogRG9uJ3QgcmVmIGEgTlVMTCBjbG9jayBpbiBfcHJvdmlkZV9jbG9ja19mdW5jKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcGlwZWxpbmVfcHJvdmlkZV9jbG9ja19mdW5jKSwgKGdzdF9waXBlbGluZV9zZXRfZGVsYXkpOgotCSAgRG9uJ3QgcmVmIGEgTlVMTCBjbG9jayBpbiBfcHJvdmlkZV9jbG9ja19mdW5jKCkuCi0JICBEb24ndCBhbGxvdyBhbiBJTlZBTElEIGRlbGF5LgotCSAgRG9uJ3QgdHJ5IHRvIGNhbGN1bGF0ZSBiYXNlX3RpbWUgd2l0aCBhbiBpbnZhbGlkIHN0YXJ0X3RpbWUuCi0JICBBbHNvIGRpc3RyaWJ1dGUgYW5kIG5vdGlmeSBhIE5VTEwgY2xvY2sgd2hlbiBpdCB3YXMgc2VsZWN0ZWQuCi0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgotCSAgRG9uJ3QgY3Jhc2ggd2hlbiBhIE5VTEwgY2xvY2sgd2FzIHNlbGVjdGVkIGluIHRoZSBwaXBlbGluZS4KLQotMjAwNy0wMi0yMyAxMzo0MjoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy86IFNvbWUgc21hbGwgdXBkYXRlczogdXBkYXRlIHBsdWdpbiBzeXN0ZW0gaWRlbnRpZmllciBwcmVmaXggbWVudGlvbiBvdXIgbmV3IGluc3RhbGwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtbWlzc2luZy1wbHVnaW5zLnR4dDoKLQkgICogZG9jcy9yYW5kb20vZHJhZnQtbWlzc2luZy1wbHVnaW5zLnR4dDoKLQkgIFNvbWUgc21hbGwgdXBkYXRlczogdXBkYXRlIHBsdWdpbiBzeXN0ZW0gaWRlbnRpZmllciBwcmVmaXgKLQkgICgnZ3N0cmVhbWVyLm5ldCcgdG8gJ2dzdHJlYW1lcicpLCBtZW50aW9uIG91ciBuZXcgaW5zdGFsbAotCSAgQVBJIGluIGxpYmdzdGJhc2V1dGlscyByYXRoZXIgdGhhbiBsaWJnaW1tZS1jb2RlYywgYWRkCi0JICByZWZlcmVuY2UgdG8gdGhlIG9ubGluZSBkb2NzLgotCi0yMDA3LTAyLTIxIDE1OjM1OjE5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgd2luMzIvY29tbW9uL2NvbmZpZy5oOiBQcmV0dHkgc3VyZSBCaWxsIG5ldmVyIG1hZGUgYSBwb3dlcnBjIHZlcnNpb24uICBQb3dlcnBjIGhhY2tlcnMsIHVzZSBtb2FwIGNsIGNpIHRvIG9ubHkgY2hlY2sgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUHJldHR5IHN1cmUgQmlsbCBuZXZlciBtYWRlIGEgcG93ZXJwYyB2ZXJzaW9uLiAgUG93ZXJwYyBoYWNrZXJzLAotCSAgdXNlIG1vYXAgY2wgY2kgdG8gb25seSBjaGVjayBpbiB3aGF0IGlzIG1lbnRpb25lZCBpbiB0aGUgQ2hhbmdlTG9nLgotCi0yMDA3LTAyLTIxIDE1OjM0OjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgRml4IHVwIGRvY3VtZW50YXRpb24gdG8gbGluayB0byB0aGUgY29ycmVjdCBHc3RHRXJyb3Igc2VjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgRml4IHVwIGRvY3VtZW50YXRpb24gdG8gbGluayB0byB0aGUgY29ycmVjdCBHc3RHRXJyb3Igc2VjdGlvbi4KLQkgIEFkZCBHU1RfRUxFTUVOVF9JTkZPIG1hY3JvIHNpbmNlIHNvbWVvbmUgZWxzZSBhZGRlZCBhIEluZm8gbWVzc2FnZS4KLQotMjAwNy0wMi0yMSAxNTozMDo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guYzogTWFrZSBzdXJlIHRoYXQgd2UgYWN0dWFsbHkgc2hvdyB0aGUgaW1wb3J0YW50IG1lc3NhZ2UgcGFydCBvZiBhIHdhcm5pbmcgbWVzc2FnZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKLQkgIE1ha2Ugc3VyZSB0aGF0IHdlIGFjdHVhbGx5IHNob3cgdGhlIGltcG9ydGFudCBtZXNzYWdlIHBhcnQgb2YgYQotCSAgd2FybmluZyBtZXNzYWdlLgotCSAgTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgZ2Vycm9yIGlzIG5vdCBOVUxMIHRvIGZyZWU7IGZpcnN0IG9mIGFsbAotCSAgZ19mcmVlIGFjY2VwdHMgTlVMTDsgYW5kIHNlY29uZCB0aGUgZGVmYXVsdCBlcnJvciBoYW5kbGVyIHdvdWxkCi0JICBzZWdmYXVsdCBpZiBnZXJyb3Igd2FzIE5VTEwuCi0KLTIwMDctMDItMjEgMTI6MTA6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IFJlbW92ZWQgZG9jcyBhcyB3ZWxsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBSZW1vdmVkIGRvY3MgYXMgd2VsbC4KLQotMjAwNy0wMi0yMSAxMjowMTo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdG1lc3NhZ2UuKjogUmVtb3ZlIG5ldyBtZXNzYWdlcyBmb3IgcmVsZWFzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfcGFyc2VfZHVyYXRpb24pOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgUmVtb3ZlIG5ldyBtZXNzYWdlcyBmb3IgcmVsZWFzZS4KLQotMjAwNy0wMi0yMCAxODowMjo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgTWFrZSB0aGUgZ2hvc3RwYWQgYSBwYXJlbnQgb2YgdGhlIGludGVybmFsIHBhZCBhZ2FpbiBmb3IgYmV0dGVyIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIERvbid0IHdyaXRlIGNvZGUgdGhhdCByZWxpZXMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X2dob3N0X3BhZF9kaXNwb3NlKSwKLQkgIChnc3RfZ2hvc3RfcGFkX25ld19mdWxsKToKLQkgIE1ha2UgdGhlIGdob3N0cGFkIGEgcGFyZW50IG9mIHRoZSBpbnRlcm5hbCBwYWQgYWdhaW4gZm9yIGJldHRlciBiYWNrd2FyZAotCSAgY29tcGF0aWJpbGl0eS4gRG9uJ3Qgd3JpdGUgY29kZSB0aGF0IHJlbGllcyBvbiB0aGlzIGhvd2V2ZXIuCi0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWN0aXZhdGVfcHVsbCksIChnc3RfcGFkX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9wYWRfbGlua19jaGVja19oaWVyYXJjaHkpOgotCSAgUmVxdWlyZSB0aGF0IHBhcmVudHMgc2hvdWxkIGJlIEdzdEVsZW1lbnRzIGluIHRoZSBoaWVyYXJjaHkgY2hlY2suCi0KLTIwMDctMDItMjAgMTA6NDU6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogSW1wcm92ZSBkZWJ1ZyBpbmZvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9yZXBsYWNlX21lc3NhZ2UpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksIChiaW5fcXVlcnlfbWluX21heF9pbml0KSwKLQkgIChiaW5fcXVlcnlfbGF0ZW5jeV9mb2xkKSwgKGJpbl9xdWVyeV9sYXRlbmN5X2RvbmUpLAotCSAgKGdzdF9iaW5fcXVlcnkpOgotCSAgSW1wcm92ZSBkZWJ1ZyBpbmZvLgotCSAgSW1wbGVtZW50IGxhdGVuY3kgcXVlcnkuCi0KLTIwMDctMDItMjAgMTA6MTY6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvIG5vdCBzZXQgdGhlIGludGVybmFsIHBhZCBhcyBhIHBhcmVudCBhbnltb3JlIHNvIHdlIGNhbiBhdm9pZCBoaWVyYXJjaHkgbGlua2luZyBlcnJvcnMgd2hlbiB0aGUgZ2hvc3RwYWQgaGFzIG5vIHBhci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9kb19hY3RpdmF0ZV9wdXNoKSwKLQkgIChnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2RvX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVzaCksIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF9naG9zdF9wYWRfZG9fbGluayksIChnc3RfZ2hvc3RfcGFkX2Rpc3Bvc2UpLAotCSAgKGdzdF9naG9zdF9wYWRfbmV3X2Z1bGwpLCAoZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KToKLQkgIERvIG5vdCBzZXQgdGhlIGludGVybmFsIHBhZCBhcyBhIHBhcmVudCBhbnltb3JlIHNvIHdlIGNhbiBhdm9pZAotCSAgaGllcmFyY2h5IGxpbmtpbmcgZXJyb3JzIHdoZW4gdGhlIGdob3N0cGFkIGhhcyBubyBwYXJlbnQgeWV0LiBUaGlzIGFsc28KLQkgIGZpeGVzIGZhaWxlZCBhY3RpdmF0aW9uIGJlY2F1c2Ugb2YgdW5saW5rZWQgaW50ZXJuYWwgcGFkcywgd2hpY2ggaW4KLQkgIHR1cm4gZml4ZXMgdGhlIGltcG9zc2libGUgY2FzZSB3aGVyZSB5b3UgaGF2ZSB0byBhY3RpdmF0ZSBhIHBhZCBiZWZvcmUKLQkgIHlvdSBjYW4gYWRkIGl0IHRvIGEgcnVubmluZyBlbGVtZW50LgotCSAgQWxzbyBmaXggdGhlIGRvY3MuCi0JICAqIGdzdC9nc3RwYWQuYzogKHByZV9hY3RpdmF0ZSksIChwb3N0X2FjdGl2YXRlKSwKLQkgIChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfcGFkX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlKToKLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4KLQkgIE1hcmsgYWN0aXZhdGlvbiBtb2RlIGluIHByZV9hY3RpdmF0ZSBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byBhY3RpdmF0ZSBpbgotCSAgZW5kbGVzcyBsb29wcy4gRml4ZXMgIzM4NTA4NC4KLQotMjAwNy0wMi0xOSAxODowODo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEltcGxlbWVudCBhIGNoZWNrZ2V0cmFuZ2UgZnVuY3Rpb24gaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBkZWZhdWx0IGNvcmUgYmVoYXZpb3VyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1faW5pdCksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoZWNrX2dldF9yYW5nZSk6Ci0JICBJbXBsZW1lbnQgYSBjaGVja2dldHJhbmdlIGZ1bmN0aW9uIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgZGVmYXVsdAotCSAgY29yZSBiZWhhdmlvdXIgdGhhdCBhc3N1bWVzIHdlIGNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSBpZiB3ZSBoYXZlIGEKLQkgIGdldHJhbmdlIGZ1bmN0aW9uLiBGaXJzdCBzdGVwIGF0IGZpeGluZyAjMzg1MDg0LgotCi0yMDA3LTAyLTE1IDEyOjA1OjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIE1vcmUgZG9jcyBjb3ZlcmFnZSBhbmQgc29tZSBDaGFuZ2VMb2cgc3VyZ2VyeSAoYWRkIG1pc3NpbmcgbmFtZXMpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNoaWxkcHJveHkuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBNb3JlIGRvY3MgY292ZXJhZ2UgYW5kIHNvbWUgQ2hhbmdlTG9nIHN1cmdlcnkgKGFkZCBtaXNzaW5nIG5hbWVzKQotCi0yMDA3LTAyLTE1IDExOjMyOjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IFNvbWUgZG9jIHVwZGF0ZXMuIFN0YXJ0IHJlbmFtaW5nIGZyb20gc3RyZWFtX3RpbWUgdG8gcnVubmluZ190aW1lIHdoZXJlIGl0IHdhcyB1c2VkIHdyb25nbHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1hY3RpdmF0aW9uLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtYnVmZmVyaW5nLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc291cmNlLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YnVzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtcW9zLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1xdWVyeS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKLQkgIFNvbWUgZG9jIHVwZGF0ZXMuIFN0YXJ0IHJlbmFtaW5nIGZyb20gc3RyZWFtX3RpbWUgdG8gcnVubmluZ190aW1lIHdoZXJlCi0JICBpdCB3YXMgdXNlZCB3cm9uZ2x5LgotCi0yMDA3LTAyLTE1IDA5OjA3OjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogQW5zd2VyIExBVEVOQ1kgcXVlcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSk6Ci0JICBBbnN3ZXIgTEFURU5DWSBxdWVyeS4KLQotMjAwNy0wMi0xNSAwODo0MDozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6IEltcHJvdmUgZGVidWdnaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOiAoZXZlbnRfcHJvYmUpLCAodGVzdF9ldmVudCksCi0JICAoR1NUX1NUQVJUX1RFU1QpOgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCi0KLTIwMDctMDItMTUgMDg6Mzc6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogSW1wcm92ZSBkZWJ1Z2dpbmcgb2YgZGVmYXVsdCBwYWQgZGlzcGF0Y2hlciBhbmQgcXVlcnkgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X2ludGVybmFsX2xpbmtzX2RlZmF1bHQpLAotCSAgKGdzdF9wYWRfZGlzcGF0Y2hlcik6Ci0JICBJbXByb3ZlIGRlYnVnZ2luZyBvZiBkZWZhdWx0IHBhZCBkaXNwYXRjaGVyIGFuZCBxdWVyeSBmdW5jdGlvbnMuCi0KLTIwMDctMDItMTUgMDg6MzE6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IFJlbW92ZSBvbGQgdW51c2VkIG1ldGhvZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgUmVtb3ZlIG9sZCB1bnVzZWQgbWV0aG9kLgotCi0yMDA3LTAyLTEzIDE1OjUxOjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiBGaXggY2hlY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IGNoZWNrCi0KLTIwMDctMDItMTMgMTU6MzQ6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6IFNvbWUgc21hbGwgdXBkYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6Ci0JICBTb21lIHNtYWxsIHVwZGF0ZS4KLQkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X3NldF9zZWVrKToKLQkgIFJldmVydCBvbGQgYm9ndXMgY2hhbmdlIHRoYXQgc2hvdWxkIG1ha2Ugc2Vla2luZyB3b3JrIGFnYWluLgotCi0yMDA3LTAyLTEzIDE0OjUyOjQ3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcmFuZG9tL2Vuc29uaWMvOiBQb3NzaWJsZSBkeW5hbWljIHJlY29ubmVjdGlvbiBhcGksIHBsdXMgc29tZSB0eXBlIGZpeGVzIHRoZSBvdGhlciB0d28gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2R5bmxpbmsudHh0OgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2ludGVyZmFjZXMudHh0OgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL3JlY2VpcGllcy50eHQ6Ci0JICBQb3NzaWJsZSBkeW5hbWljIHJlY29ubmVjdGlvbiBhcGksIHBsdXMgc29tZSB0eXBlIGZpeGVzIHRoZSBvdGhlciB0d28KLQkgIGRvY3MuCi0KLTIwMDctMDItMTMgMTM6NDA6MDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IEFsc28gY2hlY2sgZm9yIGFuIGFic29sdXRlIHBhdGggZm9sbG93aW5nIGZpbGU6Ly8gaW4gdGhlIGZpbGVzcmMgZWxlbWVudC4gUmVtb3ZlIHJlZHVuZGFudCBjaGVjayBhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua191cmlfc2V0X3VyaSk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX3VyaV9zZXRfdXJpKToKLQkgIEFsc28gY2hlY2sgZm9yIGFuIGFic29sdXRlIHBhdGggZm9sbG93aW5nIGZpbGU6Ly8gaW4gdGhlIGZpbGVzcmMKLQkgIGVsZW1lbnQuIFJlbW92ZSByZWR1bmRhbnQgY2hlY2sgYW5kIGNhbGwgZ19wYXRoX2lzX2Fic29sdXRlKCkgb24gdGhlCi0JICB1bmVzY2FwZWQgbG9jYXRpb24uCi0KLTIwMDctMDItMTMgMDk6MTA6NTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OiBBZGQgZXhpc3RpbmcgY2F0ZWdvcnkgYW5hbHlzaXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OgotCSAgQWRkIGV4aXN0aW5nIGNhdGVnb3J5IGFuYWx5c2lzLgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgRml4IGRvYyBleGFtcGxlLCBmcmFtZXJhdGUgaXMgYSBmcmFjdGlvbi4KLQotMjAwNy0wMi0xMiAxOTo1NToyNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBBZGQgY3Jvc3NyZWZlcmVuY2VzIHRvIGdsaWIvZ29iamVjdCBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgQWRkIGNyb3NzcmVmZXJlbmNlcyB0byBnbGliL2dvYmplY3QgZG9jcy4KLQotMjAwNy0wMi0xMiAxMTozMjoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6IFNtYWxsIHVwZGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDoKLQkgIFNtYWxsIHVwZGF0ZS4KLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5KSwgKGdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSksCi0JICAoZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKSwgKGdzdF9iYXNlX3Npbmtfc2VuZF9xb3MpLAotCSAgKGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9xb3MpLCAoZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3RfdW5sb2NrZWQpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQpLCAoZ3N0X2Jhc2Vfc2lua19zZW5kX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEFQSTogZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5KCkgdG8gbGV0IHN1YmNsYXNzZXMgcXVlcnkgdGhlIHVwc3RyZWFtCi0JICBsYXRlbmN5LgotCSAgQVBJOiBnc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5KCkgdG8gbGV0IHN1YmNsYXNzZXMgcXVlcnkgdGhlIGNvbmZpZ3VyZWQKLQkgIGxhdGVuY3kgaW4gdGhlIHNpbmsuCi0JICBJbXBsZW1lbnQgcXVlcnkgYW5kIHNldCBsYXRlbmN5LgotCSAgVXBkYXRlIHNvbWUgZG9jcy4KLQkgIEFzIHNwb3R0ZWQgYnkgV2lsbCBOZXd0b24gPHdpbGwgZG90IG5ld3RvbiBhdCBnbWFpbCBkb3QgY29tPjogTWFrZSBzdXJlIHdlCi0JICBkb24ndCBjb250aW51ZSBwcmVyb2xsIHdoZW4gd2UgYXJlIGZsdXNoaW5nLiBGaXhlcyAjNDA1Mjg0LgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmM6IChjaGFuZ2Vfc3RhdGVfdGltZW91dCksCi0JICAocXVpdF90aW1lb3V0KSwgKEdTVF9TVEFSVF9URVNUKSwgKHN0cmVzc19zdWl0ZSk6Ci0JICBUZXN0IGZvciAjNDA1Mjg0LgotCi0yMDA3LTAyLTEyIDEwOjUwOjIwICswMDAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JICBBUEk6IGFkZCBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCAoIzQwMzU5NykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBSZW7DqSBTdGFkbGVyIDxtYWlsIGF0IHJlbmVzdGFkbGVyIGRlPgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoX2dzdF90YWdfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICBBUEk6IGFkZCBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCAoIzQwMzU5NykuCi0KLTIwMDctMDItMTEgMTk6NTk6MTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9saWJzL01ha2VmaWxlLmFtOiBGaXggcGF0aCB0byBjb3JlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSAgRml4IHBhdGggdG8gY29yZSBkb2NzLgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UpLAotCSAgKGdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlKToKLQkgIFJlZml4IGRvY3MgYnkgYWxzbyByZW5hbWluZyAnaW50ZXJmYWNlJyB0byAnaWZhY2UnIGluIGltcGxlbWVudGF0aW9uLgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOiAoZ3N0X2NoaWxkX3Byb3h5X2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9nc3RjaGlsZHByb3h5Lmg6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KToKLQkgIERvY3VtZW50IG1vcmUuCi0KLTIwMDctMDItMTAgMTg6MzE6MTIgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L2dzdGJpbi5oOiBSZXBsYWNlIGludGVyZmFjZSBwYXJhbWV0ZXIgbmFtZSBieSBpZmFjZSBhcyBpbnRlcmZhY2UgaXMgYSByZXNlcnZlZCBrZXl3b3JkIGluIFZpc3VhbCBTdHVkaW8gZm9yIEMrKyBwLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5oOihnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UpLAotCSAgKGdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlKToKLQkgIFJlcGxhY2UgaW50ZXJmYWNlIHBhcmFtZXRlciBuYW1lIGJ5IGlmYWNlIGFzIGludGVyZmFjZSBpcwotCSAgYSByZXNlcnZlZCBrZXl3b3JkIGluIFZpc3VhbCBTdHVkaW8gZm9yIEMrKyBwcm9qZWN0cyBzbyBpdCByZW1vdmVzCi0JICBhIGJ1aWxkIGVycm9yIGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wcGVycyB1c2luZyBWUy4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6KGdzdF9maWxlX3NyY191cmlfc2V0X3VyaSk6Ci0JICBGaXggYSBidWcgb24gV2luZG93cyBpbiB1cmkgZm9ybWF0IGNoZWNrLiBOb3cgdGhlIHByZWZpeCBjaGVja2VkCi0JICBpcyBmaWxlOi8vIGFuZCBuZXh0IHdlIGNoZWNrIGlmIHRoZSBwYXRoIGFmdGVyIGZpbGU6Ly8gaXMgYWJzb2x1dGUuCi0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGRhdGFwcm90b2NvbC5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3Rnc3RyZWFtZXIuZGVmOgotCSAgQWRkIG5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCi0KLTIwMDctMDItMDkgMTU6MjU6NDUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wMi0wOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYwotCSAgKHNpbXBsZV9sYXVuY2hfbGluZXNfc3VpdGUsIHRlc3RfdGVlKTogRGlzYWJsZSB0ZWUgdGVzdCB1bnRpbCBJCi0JICBoYXZlIHRpbWUgdG8gZml4IGl0IDotKAotCi0yMDA3LTAyLTA5IDEzOjU5OjMyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrLzogQWRkIEFCSSBjaGVja3MgZm9yIFBQQzMyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTAyLTA5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjMzIuaDogQWRkIEFCSSBjaGVja3MgZm9yIFBQQzMyLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjMzIuaDogQWRkIEFCSSBjaGVja3MgZm9yIFBQQzMyLgotCi0yMDA3LTAyLTA5IDEzOjQ1OjI3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMgKHRlc3RfdGVlKTogQWRkIHRlc3RzIGZvciBwdXNoIGFuZCBwdWxsIHRlZSBiZWhhdmlvci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wMi0wOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYyAodGVzdF90ZWUpOiBBZGQKLQkgIHRlc3RzIGZvciBwdXNoIGFuZCBwdWxsIHRlZSBiZWhhdmlvci4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogRGVzY3JpYmUgaGFzLXNpbmstbG9vcCBiZXR0ZXIsIGFuZAotCSAgbWFyayBhcyBkZXByZWNhdGVkIGFzIHdlbGwgYXMgdW5pbXBsZW1lbnRlZC4gSXQgd2FzIGEgY3JhY2sgaWRlYS4KLQkgIEFkZCBzdXBwb3J0IGZvciB0ZWUgb3BlcmF0aW5nIGluIHB1bGwgbW9kZSwgb2ZmIGJ5IGRlZmF1bHQuCi0KLTIwMDctMDItMDkgMTM6NDE6MjQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmMgKGxvYWRfZmVhdHVyZSwgbG9hZF9wbHVnaW4pOiBEcm9wIHNvbWUgbm9ybWFsLWNhc2UgbG9ncyBkb3duIHRvIExPRywgcmFpc2UgZXJyb3JzIHRvIFdBUk5JTkcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDItMDkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jIChsb2FkX2ZlYXR1cmUsIGxvYWRfcGx1Z2luKTogRHJvcCBzb21lCi0JICBub3JtYWwtY2FzZSBsb2dzIGRvd24gdG8gTE9HLCByYWlzZSBlcnJvcnMgdG8gV0FSTklORy4KLQkgIChnc3RfcmVnaXN0cnlfeG1sX3JlYWRfY2FjaGUpOiBEb24ndCBsb2cgYmVmb3JlIGNhbGxpbmcgYSBmdW5jdGlvbgotCSAgdGhhdCBsb2dzLgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYyAoZ3N0X3JlZ2lzdHJ5X2ZpbmFsaXplKTogTGVzcyBkZWJ1ZyBvbiBwcm9ncmFtCi0JICBleGl0IChyZWdpc3RyeSBmaW5hbGl6ZSkuCi0JICAoZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4sIGdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZSk6IE5vIG5lZWQgZm9yIGEKLQkgIERFQlVHIGxvZyB3aGVuIHdlIGVtaXQgc2lnbmFscyB0aGF0IHBlb3BsZSBkb24ndCBldmVuIGhhdmUgdGhlCi0JICBjaGFuY2UgdG8gY29ubmVjdCB0by4KLQkgIChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKTogTGVzcyBsb2dnaW5nIGluIHRoZSBub3JtYWwgY2FzZS4KLQotMjAwNy0wMi0wNSAxMzoxNTo0NCArMDAwMCAgTWljaGFsIEJlbmVzIDxtaWNoYWwuYmVuZXNAaXRvbmlzLnR2PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogQ29ycmVjdGx5IGdlbmVyYXRlIEVPUyBmb3Igbm9uLXNlZWthYmxlIGZpbGVzLiBXZSBkb24ndCBoYXZlIGEgdG90YWwgbGVuZ3RoIGZvciB0aGVtIGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1pY2hhbCBCZW5lcyA8bWljaGFsIGRvdCBiZW5lcyBhdCBpdG9uaXMgZG90IHR2PgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jcmVhdGVfcmVhZCk6Ci0JICBDb3JyZWN0bHkgZ2VuZXJhdGUgRU9TIGZvciBub24tc2Vla2FibGUgZmlsZXMuIFdlIGRvbid0IGhhdmUgYSB0b3RhbAotCSAgbGVuZ3RoIGZvciB0aGVtIGFuZCB3b3VsZCBnZXQgYW4gdW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpZiB3ZSBvbmx5Ci0JICBzcGVjaWFsLWNhc2VkIGZvciByZWd1bGFyIGZpbGVzLiAoRml4ZXM6ICM0MDQ1NjkpCi0KLTIwMDctMDItMDUgMDg6MTU6MjYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiBBZGQgdW5pdCB0ZXN0IGZvciB0aGUgR3N0VVJJSGFuZGxlciBpbnRlcmZhY2UgaW4gZmlsZXNyYy4gVGhpcyBhbHNvIHRlc3RzIHRoZSBuZXdseSBhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGZpbGVzcmNfc3VpdGUpOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhlIEdzdFVSSUhhbmRsZXIgaW50ZXJmYWNlIGluIGZpbGVzcmMuIFRoaXMgYWxzbwotCSAgdGVzdHMgdGhlIG5ld2x5IGFkZGVkIGZpbGU6Ly9sb2NhbGhvc3QvZm9vL2JhciBzdXBwb3J0LgotCi0yMDA3LTAyLTA0IDE2OjE0OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDogVGhlIGtsYXNzIHN0cmluZyBpcyBub3QgYSBoaWVyYXJjaHkuIEFkZCByZWZlcmVuY2UgdG8gdGhlIGRlc2lnbiBkb2MgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkgIFRoZSBrbGFzcyBzdHJpbmcgaXMgbm90IGEgaGllcmFyY2h5LiBBZGQgcmVmZXJlbmNlIHRvIHRoZSBkZXNpZ24gZG9jCi0JICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgY29tbW9uIHR5cGVzLgotCi0yMDA3LTAyLTAyIDE4OjA4OjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cXVlcnkuYzogUmVtb3ZlIG9sZCBzdHJ1Y3R1cmUgZmllbGQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfbmV3X2xhdGVuY3kpOgotCSAgUmVtb3ZlIG9sZCBzdHJ1Y3R1cmUgZmllbGQuCi0KLTIwMDctMDItMDIgMTI6Mjc6MTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC4xLmluOiBHaXZlIGV4YW1wbGUgZm9yIG5ldHdvcmsgc3RyZWFtaW5nICgjMzUxOTk4KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIEdpdmUgZXhhbXBsZSBmb3IgbmV0d29yayBzdHJlYW1pbmcgKCMzNTE5OTgpCi0KLTIwMDctMDItMDIgMTE6NDg6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBkb2NzIGZvciBuZXcgbWV0aG9kcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgQWRkIGRvY3MgZm9yIG5ldyBtZXRob2RzLgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfbGF0ZW5jeSksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kpOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIEFkZCBuZXcgTEFURU5DWSBldmVudCB0byBjb25maWd1cmUgbGF0ZW5jeSBpbiBhIHBpcGVsaW5lLgotCSAgQVBJOiBnc3RfZXZlbnRfbmV3X2xhdGVuY3kKLQkgIEFQSTogZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcpLAotCSAgKGdzdF9tZXNzYWdlX25ld19sb3N0X3ByZXJvbGwpLCAoZ3N0X21lc3NhZ2VfbmV3X3ByZXJvbGxlZCksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kpLCAoZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9sb3N0X3ByZXJvbGwpOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgQWRkZWQgbWVzc2FnZXMgdXNlZCBpbiBkcmFmdC1sYXRlbmN5LgotCSAgQVBJOiBnc3RfbWVzc2FnZV9uZXdfbG9zdF9wcmVyb2xsCi0JICBBUEk6IGdzdF9tZXNzYWdlX3BhcnNlX2xvc3RfcHJlcm9sbAotCSAgQVBJOiBnc3RfbWVzc2FnZV9uZXdfcHJlcm9sbGVkCi0JICBBUEk6IGdzdF9tZXNzYWdlX25ld19sYXRlbmN5Ci0JICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X25ld19sYXRlbmN5KSwgKGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSksCi0JICAoZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kpOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIEltcGxlbWVudGVkIG5ldyBsYXRlbmN5IHF1ZXJ5IGFzIGluIGRlc2lnbiBkb2MuCi0JICBBUEk6IGdzdF9xdWVyeV9uZXdfbGF0ZW5jeQotCSAgQVBJOiBnc3RfcXVlcnlfc2V0X2xhdGVuY3kKLQkgIEFQSTogZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kKLQotMjAwNy0wMi0wMiAxMTozMzoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6IFNsaWdodCByZWRlc2lnbiB0byBhbGxvdyBmb3IgZHluYW1pYyBsYXRlbmN5IGFkanVzdG1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LWxhdGVuY3kudHh0OgotCSAgU2xpZ2h0IHJlZGVzaWduIHRvIGFsbG93IGZvciBkeW5hbWljIGxhdGVuY3kgYWRqdXN0bWVudHMuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OgotCSAgRml4IHNvbWUgdHlwb3MuCi0KLTIwMDctMDItMDIgMTA6NDE6MjkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IEFsbG93IGZpbGU6Ly9sb2NhbGhvc3QvZm9vL2JhciBVUkxzIGFuZCBjb3JyZWN0bHkgZmFpbCBmb3IgZXZlcnkgb3RoZXIgaG9zdG5hbWUgdGhhdCBvbmUgc2V0cy4gVGhpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmlld2VkIGJ5OiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX3VyaV9zZXRfdXJpKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfdXJpX3NldF91cmkpOgotCSAgQWxsb3cgZmlsZTovL2xvY2FsaG9zdC9mb28vYmFyIFVSTHMgYW5kIGNvcnJlY3RseSBmYWlsIGZvciBldmVyeSBvdGhlcgotCSAgaG9zdG5hbWUgdGhhdCBvbmUgc2V0cy4gVGhpcyB3YXMgZ25vbWV2ZnNzcmMgaXMgbGlua2VkIGZvciB0aG9zZSBpZgotCSAgaW5zdGFsbGVkIGFzIGl0IGNhbiBoYW5kbGUgaXQgKCM0MDMxNzIpCi0KLTIwMDctMDItMDEgMTk6MDA6NDggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy4qOiBEb24ndCBwdXQgdGhlIHByZXZpb3VzbHkgYWRkZWQgZGVzdHJveSBub3RpZnkgaW4gdGhlIEdzdENvbGxlY3REYXRhIHN0cnVjdCBhcyBhbGwgaXQnLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmlld2VkIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSksCi0JICAodW5yZWZfZGF0YSksIChnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWRfZnVsbCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgIERvbid0IHB1dCB0aGUgcHJldmlvdXNseSBhZGRlZCBkZXN0cm95IG5vdGlmeSBpbiB0aGUgR3N0Q29sbGVjdERhdGEKLQkgIHN0cnVjdCBhcyBhbGwgaXQncyBwYWRkaW5nIGlzIGFscmVhZHkgdXNlZCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBicmVhawotCSAgQUJJLiBJbnN0ZWFkIHB1dCBpbiB0aGUgcGFkJ3MgR09iamVjdCBkYXRhIGZvciBub3cuIFRoaXMgc2hvdWxkIGJlCi0JICBjbGVhbmVkIHVwIGZvciAwLjExICgjNDAyMzkzKS4KLQotMjAwNy0wMi0wMSAxNzo1MjoxMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBUEk6IEFkZCBmdW5jdGlvbiB0byBzcGVjaWZ5IGEgZGVzdHJveSBub3RpZmljYXRpb24gZm9yIGN1c3RvbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZpZXdlZCBieTogV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSksCi0JICAodW5yZWZfZGF0YSksIChnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgQVBJOiBBZGQgZnVuY3Rpb24gdG8gc3BlY2lmeSBhIGRlc3Ryb3kgbm90aWZpY2F0aW9uIGZvciBjdXN0b20KLQkgIEdzdENvbGxlY3REYXRhIHdoZW4gYWRkaW5nIG5ldyBwYWRzIGluIEdzdENvbGxlY3RQYWRzICgjNDAyMzkzKS4KLQotMjAwNy0wMi0wMSAxNzoxMDoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcG8vc3YucG86IFVwZGF0ZSBTd2VkaXNoIHRyYW5zbGF0aW9uICgjMzc4MjU1KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwby9zdi5wbzoKLQkgIFVwZGF0ZSBTd2VkaXNoIHRyYW5zbGF0aW9uICgjMzc4MjU1KS4KLQotMjAwNy0wMS0zMSAxMTo0Mjo1MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6IEZpeCB0aGUgcHJldmlvdXMgY2hhbmdlLCB0aGlzIGlzIGEgbGlzdCBvZiBjYXRlZ29yaWVzIGFuZCBub3QgYSBoaWVyYXJjaHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OgotCSAgRml4IHRoZSBwcmV2aW91cyBjaGFuZ2UsIHRoaXMgaXMgYSBsaXN0IG9mIGNhdGVnb3JpZXMgYW5kIG5vdCBhIGhpZXJhcmNoeS4KLQotMjAwNy0wMS0zMSAxMTowMjoyOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6IEFkZCBpbmZvIGFib3V0IGhvdyB0byBnZXQgYSBsaXN0IG9mIHVzZWQgY2xhc3Nlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6Ci0JICBBZGQgaW5mbyBhYm91dCBob3cgdG8gZ2V0IGEgbGlzdCBvZiB1c2VkIGNsYXNzZXMuCi0KLTIwMDctMDEtMzAgMTk6MTI6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IERvbid0IGxlYWsgZm91bmQgY2FwcyBpbiBjaGFpbiBmdW5jdGlvbiAobm8gaWRlYSB3aHkgdGhhdCBuZXZlciBzaG93ZWQgdXAgYXMgYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluX2RvX3R5cGVmaW5kaW5nKSwKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKLQkgIERvbid0IGxlYWsgZm91bmQgY2FwcyBpbiBjaGFpbiBmdW5jdGlvbiAobm8gaWRlYSB3aHkgdGhhdCBuZXZlcgotCSAgc2hvd2VkIHVwIGFzIGEgbGVhayBhbnl3aGVyZSkuCi0KLTIwMDctMDEtMzAgMTU6MDQ6MzMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHBsdWdpbi5oOiBGaXggYW5kIGV4cGFuZCBHc3RQbHVnaW5EZXNjIEFQSSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uaDoKLQkgIEZpeCBhbmQgZXhwYW5kIEdzdFBsdWdpbkRlc2MgQVBJIGRvY3MuCi0KLTIwMDctMDEtMjkgMTU6NTQ6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBjb21tZW50IGFib3V0IHJlZmluaW5nIHRoZSB4bWwgZGVwcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbW1lbnQgYWJvdXQgcmVmaW5pbmcgdGhlIHhtbCBkZXBzCi0JICAqIGRvY3MvbWFudWFscy5tYWs6Ci0JICBjb21tZW50cyBhYm91dCBtb3ZpbmcgYXdheSBmcm9tIGphZGUgZm9yIGRvY3MKLQkgICogZ3N0L2dzdC5jOgotCSAgcmVjb21taXQgdGhlIGlmZGVmcyB0byB1c2UgdGhlIGJpbmFyeSByZWdpc3RyeQotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKToKLQkgIHRoaXMgYnJlYWsgaXMgb2Jzb2xldGUKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JICBiZXR0ZXIgR1NUX0VMRU1FTlRfREVUQUlMUyBkb2NzLCBhZGQgY29tbWVudCBhYm91dCB0cmFuc2xhdGlvbgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgcmVtb3ZlIGVvbCBzbGFzaAotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfc2lnbmFsX29iamVjdF9nZXRfdHlwZSk6Ci0JICBhZGQgR19VTkxJS0VMWSBhcyB1c3VhbAotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2V2ZW50X2RlZmF1bHQpOgotCSAgYWRkIGZhbGwgdHJodSBjb21tZW50Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9pbml0aWFsaXplX21hZ2ljKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfc3RyaW5nKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGFkX3RlbXBsYXRlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX3BsdWdpbiksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jYWNoZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jaGVja19tYWdpYyksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BhZF90ZW1wbGF0ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICBjb21tZW50IHR5cG8gYW5kIGZvcm1hdHRpbmcKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSksCi0JICAoZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSk6Ci0JICByZW1vdmUgb2Jzb2xldGUgYnJlYWtzCi0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X2RhdGVfZ2V0X3R5cGUpLCAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKLQkgIGFkZCBGSVhNRSAwLjExIGFuZCByZW1vdmUgY3BwIGNvbW1lbnQKLQotMjAwNy0wMS0yOSAxNTowMjoxMSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IEZpeCBwcmludCBzdGF0ZW1lbnQgaW4gYW4gZXZlbiBtb3JlIHBvcnRhYmxlIHdheS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuYzogKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICBGaXggcHJpbnQgc3RhdGVtZW50IGluIGFuIGV2ZW4gbW9yZSBwb3J0YWJsZSB3YXkuCi0KLTIwMDctMDEtMjkgMTM6NDA6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIEdTVF9ST1VORF9ET1dOXyogbWFjcm9zICgjNDAxNzgxKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFQSTogYWRkIEdTVF9ST1VORF9ET1dOXyogbWFjcm9zICgjNDAxNzgxKS4KLQotMjAwNy0wMS0yNyAxODo0NDoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgRG9jdW1lbnQgcmVnaXN0cnkgc2lnbmFscyBhbmQgbWFrZSBndGstZG9jIHBpY2sgdGhlbSB1cCAoIzQwMTM4MSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9jbGFzc19pbml0KToKLQkgIERvY3VtZW50IHJlZ2lzdHJ5IHNpZ25hbHMgYW5kIG1ha2UgZ3RrLWRvYyBwaWNrIHRoZW0gdXAgKCM0MDEzODEpLgotCi0yMDA3LTAxLTI2IDE4OjI0OjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbDogQWRkIHNvbWUgYXVkaW9jb252ZXJ0cyBhbmQgYXVkaW9yZXNhbXBsZSB0byB0aGUgcGlwZWxpbmUsIGFuZCBzb21lIG1vcmUgY29tbWVudHMgYW5kIGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbDoKLQkgIEFkZCBzb21lIGF1ZGlvY29udmVydHMgYW5kIGF1ZGlvcmVzYW1wbGUgdG8gdGhlIHBpcGVsaW5lLCBhbmQgc29tZQotCSAgbW9yZSBjb21tZW50cyBhbmQgZXJyb3IgaGFuZGxpbmcuCi0KLTIwMDctMDEtMjYgMTM6MDc6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvOiBGaXggdHlwbyAoIzQwMDk4NykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvbWFudWFsLnhtbDoKLQkgICogZG9jcy9wd2cvcHdnLnhtbDoKLQkgIEZpeCB0eXBvICgjNDAwOTg3KS4KLQotMjAwNy0wMS0yNiAwOTozNzowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGNhcHMuYzogSW5pdCBjYXBzIGZsYWdzIHRvby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X3N0YXRpY19jYXBzX2dldCk6Ci0JICBJbml0IGNhcHMgZmxhZ3MgdG9vLgotCi0yMDA3LTAxLTI1IDE3OjU0OjA3ICswMDAwICBKaW5kcmljaCBNYWtvdmlja2EgPGppbmRyaWNoLm1ha292aWNrQGl0b25pcy50dj4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IElmIG5vdCB1c2luZyBtbWFwJ2VkIGZpbGVzIHRyeSB0byBzZWVrIHRvIHRoZSBlbmQgaW5zdGVhZCBvZiB0aGUgc3RhcnQgdG8gZGV0ZXJtaW5lIHdoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKaW5kcmljaCBNYWtvdmlja2EgPGppbmRyaWNoLm1ha292aWNrIGF0IGl0b25pcyBkb3QgdHY+Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX3N0YXJ0KToKLQkgIElmIG5vdCB1c2luZyBtbWFwJ2VkIGZpbGVzIHRyeSB0byBzZWVrIHRvIHRoZSBlbmQgaW5zdGVhZCBvZiB0aGUKLQkgIHN0YXJ0IHRvIGRldGVybWluZSB3aGV0aGVyIHdlIGNhbiBzZWVrIGF0IGFsbC4gVGhpcyBmaXhlcyB0aGUgY2FzZQotCSAgb2YgMkdCKyBmaWxlcyBvdmVyIE5GUywgd2hlcmUgc2Vla3MgaW4gdGhlIGZpcnN0IDJHQiBjYW4gc3VjY2VlZCBidXQKLQkgIHNlZWtzIGZvciBldmVyeXRoaW5nIGFmdGVyd2FyZHMgZmFpbC4gRml4ZXMgIzQwMDY1NgotCi0yMDA3LTAxLTI1IDE3OjQxOjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Y2Fwcy5jOiBBZGQgc29tZSByZWZjb3VudCBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNhcHMuYzogKF9nc3RfY2Fwc19mcmVlKSwgKGdzdF9zdGF0aWNfY2Fwc19nZXQpOgotCSAgQWRkIHNvbWUgcmVmY291bnQgZGVidWdnaW5nLgotCSAgTWFrZSBnc3Rfc3RhdGljX2NhcHNfZ2V0IHRocmVhZHNhZmUsIHdoaWNoIGlzIG5lZWRlZCB3aGVuIGF1dG9wbHVnZ2luZwotCSAgaW4gbXVsdGlwbGUgc3RyZWFtaW5nIHRocmVhZHMuCi0KLTIwMDctMDEtMjUgMTA6NTA6MDMgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBBUEk6IGdzdF9hZGFwdGVyX2NvcHkoKSB0aGF0IGNhbiByZWR1Y2UgdGhlIGFtb3VudCBvZiBtZW1jcHkgd2hlbiBnZXR0aW5nIGRhdGEgZnJvbSB0aGUgYWRhcHRlci4gRml4ZXMgIzM4ODIwMS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IERhdmlkIFNjaGxlZWYgPGRzIGF0IHNjaGxlZWYgZG90IG9yZz4KLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6IChnc3RfYWRhcHRlcl9jb3B5KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBBUEk6IGdzdF9hZGFwdGVyX2NvcHkoKSB0aGF0IGNhbiByZWR1Y2UgdGhlIGFtb3VudCBvZiBtZW1jcHkgd2hlbgotCSAgZ2V0dGluZyBkYXRhIGZyb20gdGhlIGFkYXB0ZXIuIEZpeGVzICMzODgyMDEuCi0KLTIwMDctMDEtMjUgMTA6MTQ6MDkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiBJbiBwcmludCBzdGF0ZW1lbnRzLCAiJXgiIGlzIGZvciBndWludC4gRml4ZXMgYnVpbGQgb24gbWFjb3N4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKLQkgIEluIHByaW50IHN0YXRlbWVudHMsICIleCIgaXMgZm9yIGd1aW50LiBGaXhlcyBidWlsZCBvbiBtYWNvc3guCi0KLTIwMDctMDEtMjQgMTE6MzI6MDAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiBTbWFsbCBmaXguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICAoZ3N0X211bHRpX3F1ZXVlX2xvb3ApOgotCSAgU21hbGwgZml4LgotCSAgKHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiKSwgKHNpbmdsZV9xdWV1ZV91bmRlcnJ1bl9jYiksCi0JICAoc2luZ2xlX3F1ZXVlX2NoZWNrX2Z1bGwpLCAoZ3N0X3NpbmdsZV9xdWV1ZV9uZXcpOgotCSAgSW1wbGVtZW50IHNpbmdsZSBxdWV1ZSBncm93dGggc3lzdGVtLgotCSAgVGhpcyB1c2VzIHRoZSBleHRyYS1zaXplIHByb3BlcnRpZXMsIGFuZCB3aWxsIGdyb3cgc2luZ2xlIHF1ZXVlcyBieQotCSAgdGhhdCBtdWNoIGlmIG9uZSBnb2VzIGZ1bGwgd2hlcmVhcyB0aGVyZSBhcmUgb3RoZXJzIGVtcHR5LiBUaGlzIGlzCi0JICBjYWxsZWQgZXh0cmEtbW9kZSBpbiB0aGUgY29kZS4KLQkgIFdoZW4gYSBzaW5nbGUgcXVldWUncyBsZXZlbHMgZ28gYmFjayBiZWxvdyB0aGUgaW5pdGlhbCBtYXgtc2l6ZQotCSAgbGltaXRzLCBpdCBpcyBubyBsb25nZXIgaW4gZXh0cmEtbW9kZS4gVGhpcyBpcyB0byBlbnN1cmUgd2UgZG9uJ3QKLQkgIGNvbnN1bWUgdG9vIG11Y2ggbWVtb3J5LgotCSAgRml4ZXMgIzM5OTg3NQotCi0yMDA3LTAxLTIzIDEzOjUwOjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0LmM6IE1ha2Ugd2FybmluZyBhYm91dCBsYXRlIGdfdGhyZWFkX2luaXQoKSBjYWxscyBhIGJpdCBtb3JlIGV4cGxpY2l0LCBzbyB0aGF0IGl0J3MgbW9yZSBvYnZpb3VzIHRvIGFwcGxpY2F0aW8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKToKLQkgIE1ha2Ugd2FybmluZyBhYm91dCBsYXRlIGdfdGhyZWFkX2luaXQoKSBjYWxscyBhIGJpdCBtb3JlIGV4cGxpY2l0LAotCSAgc28gdGhhdCBpdCdzIG1vcmUgb2J2aW91cyB0byBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHdoYXQgdGhleSBuZWVkCi0JICB0byBkbyBpZiBhIHVzZXIgZmlsZXMgYSBidWcgYWdhaW5zdCB0aGVpciBhcHBsaWNhdGlvbi4KLQotMjAwNy0wMS0yMiAxNjowMDozOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IFJlbW92ZSBwcmV2aW91cyBoYWNrIG9mIHVuc2V0dGluZyB0aGUgZmx1c2hpbmcgZmxhZyBmb3IgdGhlIHNvdXJjZSBwYWQgaW5zdGVhZCBvZiBhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6Ci0JICAoZ3N0X211bHRpX3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9zaW5nbGVfcXVldWVfbmV3KToKLQkgIFJlbW92ZSBwcmV2aW91cyBoYWNrIG9mIHVuc2V0dGluZyB0aGUgZmx1c2hpbmcgZmxhZyBmb3IgdGhlIHNvdXJjZSBwYWQKLQkgIGluc3RlYWQgb2YgYWN0aXZhdGluZyBpdC4gSW5zdGVhZCwgZml4IHRoZSBzb3VyY2UgcGFkIGFjdGl2YXRlIGZ1bmN0aW9uCi0JICBzbyB0aGF0IGl0IG5vIGxvbmdlciBkZXBlbmRzIG9uIGhhdmluZyBhIHBhcmVudCBzZXQgb3Igbm90LgotCi0yMDA3LTAxLTIyIDE0OjMwOjI3ICswMDAwICBDYXJsb3MgU2FubWFydGluIERvbWluZ3VleiA8Y3Nhbm1hcnRpbkBpZ2FsaWEuY29tPgotCi0JICBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDogRml4IGV4YW1wbGUgY29kZSwgZ3N0X2VsZW1lbnRfdW5yZWYoKSBkb2Vzbid0IGV4aXN0IGFueSBsb25nZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBDYXJsb3MgU2FubWFydGluIERvbWluZ3VleiA8Y3Nhbm1hcnRpbkBpZ2FsaWEuY29tPgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYnVzLnhtbDoKLQkgIEZpeCBleGFtcGxlIGNvZGUsIGdzdF9lbGVtZW50X3VucmVmKCkgZG9lc24ndCBleGlzdCBhbnkgbG9uZ2VyLgotCi0yMDA3LTAxLTIxIDIwOjI0OjExICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCi0JICBnc3QvZ3N0cGFkLmM6IEZpeCB0d28gZG9jcyB0eXBvZXMgKCMzOTkwOTQpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3IGF0IHNreW5ldCBiZT4KLQkgICogZ3N0L2dzdHBhZC5jOgotCSAgRml4IHR3byBkb2NzIHR5cG9lcyAoIzM5OTA5NCkuCi0KLTIwMDctMDEtMTkgMDk6MTU6MjEgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogQWRkIGdzdC1wbHVnaW5zLWJhc2UvZ3N0L3V0aWxzLyB0byBMRF9MSUJSQVJZX1BBVEggc28gdGhhdCBwbHVnaW5zIGRlcGVuZGluZyBvbiBsaWJnc3RiYXNldS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIEFkZCBnc3QtcGx1Z2lucy1iYXNlL2dzdC91dGlscy8gdG8gTERfTElCUkFSWV9QQVRIIHNvIHRoYXQgcGx1Z2lucwotCSAgZGVwZW5kaW5nIG9uIGxpYmdzdGJhc2V1dGlscyBjYW4gd29yayBpbiB1bmluc3RhbGxlZCBlbnZpcm9ubWVudC4KLQotMjAwNy0wMS0xOCAxMjowMDoyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvOiBBZGQgbW9yZSBkb2NzIHJlZ2FyZGluZyB0YWcgbWVyZ2UtbW9kZXMgYW5kIHdoZW4gdG8gc2VuZCB0YWdzLiBGaXggJ3NpbmNlJyBzdGF0ZW1lbnQgZm9yIG5ldyB0YWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgICogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSAgQWRkIG1vcmUgZG9jcyByZWdhcmRpbmcgdGFnIG1lcmdlLW1vZGVzIGFuZCB3aGVuIHRvIHNlbmQgdGFncy4gRml4ICdzaW5jZScKLQkgIHN0YXRlbWVudCBmb3IgbmV3IHRhZy4KLQotMjAwNy0wMS0xNyAxNDozMzozOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmM6IFdoZW4gZHluYW1pY2FsbHkgY3JlYXRpbmcgc2luZ2xlIHF1ZXVlcywgYWN0aXZhdGUgc2lua3BhZCBiZWZvcmUgYWRkaW5nIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X3NpbmdsZV9xdWV1ZV9uZXcpOgotCSAgV2hlbiBkeW5hbWljYWxseSBjcmVhdGluZyBzaW5nbGUgcXVldWVzLCBhY3RpdmF0ZSBzaW5rcGFkIGJlZm9yZSBhZGRpbmcKLQkgIGl0LgotCSAgV2Ugc2hvdWxkIGJlIGRvaW5nIHRoZSBzYW1lIHRoaW5nIGZvciB0aGUgc291cmNlIHBhZCwgYnV0IHdlIGNhbid0Ci0JICBzaW5jZSBpdCB3b3VsZCBjYWxsIGEgbWV0aG9kIHdoaWNoIG5lZWRzIHRoZSBwYXJlbnQgdG8gYmUgc2V0IGluIG9yZGVyCi0JICB0byB3b3JrIHByb3BlcnRseS4gSW5zdGVhZCBvZiBhY3RpdmF0aW5nIHRoZSBzb3VyY2UgcGFkLCB3ZSBqdXN0IHVuc2V0Ci0JICB0aGUgZmx1c2hpbmcgZmxhZywgd2hpY2ggaXMgdGhlIG1pbmltYWwgcmVxdWlyZW1lbnQgZm9yIGFkZGluZyBhIHBhZAotCSAgdG8gYW4gZWxlbWVudCBpbiBhIHN0YXRlIGdyZWF0ZXIgdGhhbiBSRUFEWS4KLQotMjAwNy0wMS0xNyAxNDoyNjo0NiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBBZGQgRFlMRF9MSUJSQVJZX1BBVEggZGVjbGFyYXRpb25zIHNvIHdlIGNhbiBhbHNvIHVzZSB0aGlzIHNjcmlwdCBvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIEFkZCBEWUxEX0xJQlJBUllfUEFUSCBkZWNsYXJhdGlvbnMgc28gd2UgY2FuIGFsc28gdXNlIHRoaXMgc2NyaXB0IG9uCi0JICBNYWMgT1MgWC4KLQotMjAwNy0wMS0xNyAxMjozMTowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgQUJJIHN0cnVjdHMgZm9yIEhQUEEgKHNlZSAjMzkzNzk2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaHBwYS5oOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaHBwYS5oOgotCSAgQWRkIEFCSSBzdHJ1Y3RzIGZvciBIUFBBIChzZWUgIzM5Mzc5NikuCi0KLTIwMDctMDEtMTYgMDk6NTc6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IEFjdHVhbGx5IHdyaXRlIEFCSSBzdHJ1Y3RzIHRvIHRoZSBmaWxlIHNwZWNpZmllZCBpbiB0aGUgR1NUX0FCSSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYXMgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfYWJpX2xpc3QpOgotCSAgQWN0dWFsbHkgd3JpdGUgQUJJIHN0cnVjdHMgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSBHU1RfQUJJCi0JICBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYXMgdGhlIG1lc3NhZ2Ugd2UgcHJpbnQgY2xhaW1zIHdlIHdvdWxkLgotCi0yMDA3LTAxLTE1IDE0OjUxOjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmM6IEZpeCBoZWFkZXIgY29tbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFzay5jOgotCSAgRml4IGhlYWRlciBjb21tZW50LgotCi0yMDA3LTAxLTE1IDE0OjM5OjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3R0YWdsaXN0LmM6IENoYW5nZSB0YWcgdHlwZSBmcm9tIFNUUklORyB0byBET1VCTEUuIEFwcGx5IENoYW5nZUxvZyBzdXJnZXJ5IGZvciBteSBwcmV2aW91cyB0d28gZW50cmllcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoX2dzdF90YWdfaW5pdGlhbGl6ZSk6Ci0JICBDaGFuZ2UgdGFnIHR5cGUgZnJvbSBTVFJJTkcgdG8gRE9VQkxFLiBBcHBseSBDaGFuZ2VMb2cgc3VyZ2VyeSBmb3IgbXkKLQkgIHByZXZpb3VzIHR3byBlbnRyaWVzLgotCi0yMDA3LTAxLTE1IDEzOjU3OjEyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGFkZCB0YWcgc3VwcG9ydCBmb3IgYmVhdC1wZXItbWludXRlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKF9nc3RfdGFnX2luaXRpYWxpemUpOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgYWRkIHRhZyBzdXBwb3J0IGZvciBiZWF0LXBlci1taW51dGUKLQotMjAwNy0wMS0xNSAxMjoxODo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnliaW5hcnkuKjogdXNlIGdsaWIgdHlwZXMsIGNsZWFudXAgY29tbWVudHMsIGltcGVtZW50IGludGVyZmFjZXMgYW5kIHVyaS10eXBlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9pbml0aWFsaXplX21hZ2ljKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfc3RyaW5nKSwgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbWFrZV9kYXRhKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGFkX3RlbXBsYXRlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9zYXZlX3BsdWdpbiksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jYWNoZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jaGVja19tYWdpYyksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BhZF90ZW1wbGF0ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX2ZlYXR1cmUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfbG9hZF9wbHVnaW4pLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeWJpbmFyeS5oOgotCSAgdXNlIGdsaWIgdHlwZXMsIGNsZWFudXAgY29tbWVudHMsIGltcGVtZW50IGludGVyZmFjZXMgYW5kIHVyaS10eXBlcwotCi0yMDA3LTAxLTEzIDEwOjMzOjQxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9nZXRfcmFuZ2UsIGdzdF9wYWRfcHVsbF9yYW5nZSk6IEFsbG93IGdldHJhbmdlKCkgdG8gcmV0dXJuIGJ1ZmZlcnMgd2l0aCBvdGhlciBjYXBzLCB3aGlsZSB3ZSBmaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTAxLTEzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfZ2V0X3JhbmdlLCBnc3RfcGFkX3B1bGxfcmFuZ2UpOiBBbGxvdwotCSAgZ2V0cmFuZ2UoKSB0byByZXR1cm4gYnVmZmVycyB3aXRoIG90aGVyIGNhcHMsIHdoaWxlIHdlIGZpeAotCSAgZGVtdXhlcnMgYW5kIHR5cGVmaW5kLCBvciBvdGhlcndpc2UgY2hhbmdlIHBhcnQtbmVnb3RpYXRpb24udHh0LgotCi0yMDA3LTAxLTEyIDIxOjEzOjMyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fYWN0aXZhdGUpOiBGYWN0b3Igc3RhcnQvc3RvcCBpbnRvIHRoaXMgcHJpdmF0ZSBmdW5jdGlvbiBpbnN0ZWFkIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTAxLTEyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjdGl2YXRlKToKLQkgIEZhY3RvciBzdGFydC9zdG9wIGludG8gdGhpcyBwcml2YXRlIGZ1bmN0aW9uIGluc3RlYWQgb2YgcGFydGlhbGx5Ci0JICBpbiBhY3RpdmF0ZSBmdW5jdGlvbnMgYW5kIHBhcnRpYWxseSBpbiB0aGUgY2hhbmdlX3N0YXRlIGZ1bmN0aW9uLgotCSAgRml4ZXMgc2V0dXAgYmVmb3JlIHRoZSBlbGVtZW50IGhhcyBjaGFuZ2VkIGZyb20gUkVBRFktPlBBVVNFRCwgYXMKLQkgIGlzIHRoZSBjYXNlIGluIHB1bGwtbW9kZSBwaXBlbGluZXMuCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGVfcHVzaCkKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2FjdGl2YXRlX3B1bGwpOiBSZWZhY3RvciB0byB1c2UKLQkgIGdzdF9iYXNlX3RyYW5zZm9ybV9hY3RpdmF0ZSgpLgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOiBSZW1vdmVkLCBub3QgbmVlZGVkIGFueSBtb3JlLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfbmVnb3RpYXRlX3B1bGwpOgotCSAgVHJ1bmNhdGUgYmVmb3JlIGZpeGF0aW5nLgotCi0yMDA3LTAxLTEyIDE4OjA2OjI5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2Vfc2lua19uZWdvdGlhdGVfcHVsbCk6IERvbid0IHNldF9jYXBzKCkgaWYgdGhlIHJlc3VsdCBvZiBmaXhhdGluZyBpcyBBTlksIGFzIGl0Jy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTAxLTEyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfbmVnb3RpYXRlX3B1bGwpOgotCSAgRG9uJ3Qgc2V0X2NhcHMoKSBpZiB0aGUgcmVzdWx0IG9mIGZpeGF0aW5nIGlzIEFOWSwgYXMgaXQncyBub3QKLQkgIHN1cHBvcnRlZCwgYW5kIG5vdCBuZWNlc3NhcnkgaW4gdGhlIGNhc2Ugb2YgYSBsaW5rIHdpdGggbm8KLQkgIHRlbXBsYXRlIGNhcHMgb24gZWl0aGVyIHNpZGUuIEZpeGVzIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYyBpbgotCSAgc29tZSBwdWxsLW1vZGUgdGVzdHMuCi0KLTIwMDctMDEtMTIgMTU6NTY6MDAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKF9Hc3RCYXNlVHJhbnNmb3JtUHJpdmF0ZSk6IChnc3RfYmFzZV90cmFuc2Zvcm1faW5pdCwgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDEtMTIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChfR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUpOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0LCBnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19hY3RpdmF0ZV9wdXNoKQotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfYWN0aXZhdGVfcHVsbCk6Ci0JICBUcmFjayB0aGUgYWN0aXZhdGlvbiBtb2RlLgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKTogSW4gcHVsbCBtb2RlLCB3aGVuIGFjdGl2YXRpbmcgdGhlCi0JICBzcmMgcGFkLCBhZnRlciBhY3RpdmF0aW5nIHRoZSBzaW5rIHBhZCwgYWN0aXZhdGUgdGhlIHNpbmsgcGFkJ3MKLQkgIHBlZXIsIGFzIGRpc2N1c3NlZCBpbiBwYXJ0LW5lZ290aWF0aW9uLnR4dC4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfZml4YXRlKTogQWRkIGZpeGF0ZQotCSAgdm1ldGhvZCwgYXMgaW4gYmFzZXNpbmsuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDogUmVmb3JtYXQgZG9jcywgYWRkIGZpeGF0ZSB2bWV0aG9kLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfcGFkX3NldGNhcHMpOiBJbiBwdWxsCi0JICBtb2RlLCBmaXJzdCBwcm94eSB0aGUgc2V0Y2FwcyB0byB0aGUgcGVlciBwYWQuCi0JICAoZ3N0X2Jhc2Vfc2lua19wYWRfZml4YXRlKTogQWRkIGEgZml4YXRlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlCi0JICBuZXcgZml4YXRlIHZtZXRob2QuCi0JICAoZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2FjdGl2YXRlX3B1bGwpOiBSZW5hbWUgZnJvbQotCSAgZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdWxsLgotCSAgKGdzdF9iYXNlX3NpbmtfbmVnb3RpYXRlX3B1bGwpOiBOZXcgZnVuY3Rpb24sIHBlcmZvcm1zIG5lZ290aWF0aW9uCi0JICBpbiBwdWxsIG1vZGUgYmVmb3JlIGNhbGxpbmcgOjphY3RpdmF0ZV9wdWxsKCkuCi0JICAoZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGVfcHVsbCk6IEFjdHVhbGx5IGNhbGwgdGhlIGFjdGl2YXRlX3B1bGwKLQkgIHZtZXRob2QgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gSSBoYXZlIG5vIGlkZWEgaG93Ci0JICB0aGlzIHdvcmtlZCBiZWZvcmUuIE5lZ290aWF0ZSBiZWZvcmUgY2FsbGluZyBhY3RpdmF0ZV9wdWxsLgotCi0yMDA3LTAxLTEyIDE1OjQ4OjAwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKTogUmVmdXNlIHRvIGFjdGl2YXRlIHVubGlua2VkIHNpbmsgcGFkcyBpbiBwdWxsIG1vZGUuIEluIGFkZGl0aW9uIHRvIGJlaW5nIGNvcnJlYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTAxLTEyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfYWN0aXZhdGVfcHVsbCk6IFJlZnVzZSB0byBhY3RpdmF0ZSB1bmxpbmtlZAotCSAgc2luayBwYWRzIGluIHB1bGwgbW9kZS4gSW4gYWRkaXRpb24gdG8gYmVpbmcgY29ycmVjdCwgZml4ZXMKLQkgIGZpbGVzcmMgISBkZWNvZGViaW4gISBpZGVudGl0eSAhIGZha2VzaW5rLgotCSAgKGdzdF9wYWRfZ2V0X3JhbmdlLCBnc3RfcGFkX3B1bGxfcmFuZ2UpOiBEb24ndCBjYWxsCi0JICBnc3RfcGFkX3NldF9jYXBzKCkgaWYgdGhlIGNhcHMgY2hhbmdlczsgaW5zdGVhZCBlcnJvciBvdXQgd2l0aAotCSAgR1NUX0ZMT1dfTk9UX05FR09USUFURUQsIGFzIGRpc2N1c3NlZCBpbiBwYXJ0LW5lZ290aWF0aW9uLnR4dC4KLQotMjAwNy0wMS0xMiAxNTozOTo1NyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDogVXBkYXRlIHdpdGggbW9yZSBwb2xpY3kuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDEtMTIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OiBVcGRhdGUgd2l0aCBtb3JlIHBvbGljeS4KLQotMjAwNy0wMS0xMiAxMjo0ODoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvY2hlY2svOiBBZGQgR19CRUdJTl9ERUNMUyBhbmQgR19FTkRfREVDTFMuIE1vdmUgR1NUX0NIRUNLX01BSU4gd2hlcmUgaXQgYmVsb25ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5oOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgQWRkIEdfQkVHSU5fREVDTFMgYW5kIEdfRU5EX0RFQ0xTLiBNb3ZlIEdTVF9DSEVDS19NQUlOIHdoZXJlIGl0Ci0JICBiZWxvbmdzLgotCi0yMDA3LTAxLTEyIDEwOjUzOjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay86IEFkZCBtaW5pbWFsIHVuaXQgdGVzdCBmb3IgYmVmb3JlbWVudGlvbmVkIEdzdFRhZ1NldHRlciBidWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmM6IChnc3RfZHVtbXlfZW5jX2FkZF9pbnRlcmZhY2VzKSwKLQkgIChnc3RfZHVtbXlfZW5jX2Jhc2VfaW5pdCksIChnc3RfZHVtbXlfZW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF9kdW1teV9lbmNfaW5pdCksICh0YWdfbGlzdF9mb3JlYWNoKSwgKHRhZ19zZXR0ZXJfbGlzdF9sZW5ndGgpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF90YWdfc2V0dGVyX3N1aXRlKToKLQkgIEFkZCBtaW5pbWFsIHVuaXQgdGVzdCBmb3IgYmVmb3JlbWVudGlvbmVkIEdzdFRhZ1NldHRlciBidWcuCi0KLTIwMDctMDEtMTIgMTA6NDg6NDkgKzAwMDAgIFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkgIGdzdC9nc3R0YWdzZXR0ZXIuYzogZ3N0X3RhZ19saXN0X21lcmdlKCkgcmV0dXJucyBhIG5ldyBsaXN0LCBzbyBpdCdzIG5vdCB0aGUgYmVzdCBpZGVhIHRvIGluZ29yZSBpdHMgcmV0dXJuIHZhbHVlLiBFZi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUmVuw6kgU3RhZGxlciA8bWFpbCBhdCByZW5lc3RhZGxlciBkb3QgZGU+Ci0JICAqIGdzdC9nc3R0YWdzZXR0ZXIuYzogKGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MpOgotCSAgZ3N0X3RhZ19saXN0X21lcmdlKCkgcmV0dXJucyBhIG5ldyBsaXN0LCBzbyBpdCdzIG5vdCB0aGUgYmVzdCBpZGVhCi0JICB0byBpbmdvcmUgaXRzIHJldHVybiB2YWx1ZS4gRWZmZWN0aXZlbHkgbWVhbnQgdGhhdCB0YWdzIGNvdWxkIG9ubHkKLQkgIGJlIG1lcmdlZCBvbiBhIEdzdFRhZ1NldHRlciBvbmNlIHVzaW5nIF9tZXJnZV90YWdzKCkuIEZpeGVzICMzOTU1NTQuCi0JICBBbHNvIGFkZCBmdW5jdGlvbiBndWFyZCB0byByZXF1aXJlIGEgbm9uLU5VTEwgdGFnbGlzdCBhcyBpbnB1dCAoaGFzCi0JICBhbHdheXMgYmVlbiBzbyBkdWUgdG8gZ3N0X3RhZ19saXN0X2NvcHkoKSwganVzdCBtYWtpbmcgaXQgZXhwbGljaXQpLgotCi0yMDA3LTAxLTExIDE1OjAzOjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OiBTb21lIGFkZGl0aW9uczogbWVudGlvbiBuZXcgQVBJIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBhdCB0aGUgdmFyaW91cyBzdGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OgotCSAgU29tZSBhZGRpdGlvbnM6IG1lbnRpb24gbmV3IEFQSSB0aGF0IGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYXQgdGhlCi0JICB2YXJpb3VzIHN0YWdlczsgc2hvcnQgYmxvYiBhYm91dCBuZXcgZ3N0LWluc3BlY3QgaW50cm9zcGVjdGlvbgotCSAgb3B0aW9uOyBtZW50aW9uIHBvdGVudGlhbCBmdXR1cmUgcHJvYmxlbSB3aXRoIHBsdWdpbnMgdGhhdCBoYXZlCi0JICBhIGR5bmFtaWMgbGlzdCBvZiBlbGVtZW50cyAoc3VjaCBhcyBsYWRzcGEsIHBpdGZkbGwsIGxpYnZpc3VhbCkuCi0KLTIwMDctMDEtMTEgMTQ6MTY6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEFkZCAtLXByaW50LXBsdWdpbi1hdXRvLWluc3RhbGwtaW5mbyBvcHRpb24gdG8gZ3N0LWluc3BlY3QsIHNvIHdlIGNhbiBpbnRyb3NwZWN0IHBsdWdpbiBmaWxlcyBhbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICAocHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm9fY29kZWNzKSwKLQkgIChwcmludF9wbHVnaW5fYXV0b21hdGljX2luc3RhbGxfaW5mb19wcm90b2NvbHMpLAotCSAgKHByaW50X3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvKSwgKG1haW4pOgotCSAgQWRkIC0tcHJpbnQtcGx1Z2luLWF1dG8taW5zdGFsbC1pbmZvIG9wdGlvbiB0byBnc3QtaW5zcGVjdCwgc28gd2UgY2FuCi0JICBpbnRyb3NwZWN0IHBsdWdpbiBmaWxlcyBhbmQgZ2V0IG1hY2hpbmUtcGFyc2FibGUgb3V0cHV0IHRoYXQgY29ycmVzcG9uZHMKLQkgIHRvIHRoZSBsYXN0IGJpdCBvZiB0aGUgbWlzc2luZy1wbHVnaW4gaW5zdGFsbGVyIHN0cmluZyAoc21hbGwgZ290Y2hhOgotCSAgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCByYW5rcykuCi0KLTIwMDctMDEtMTEgMTM6NDU6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY29tbWl0IGJpbmFyeSByZWdpc3RyeSAoZGlzYWJsZWQgYnkgZGVmYXVsdCwgc2VlICMzNTk2NTMpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlX2xvY2tlZCksCi0JICAoZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9sb2NrZWQpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmM6IChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2luaXRpYWxpemVfbWFnaWMpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9zdHJpbmcpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9wYWRfdGVtcGxhdGUpLAotCSAgKGdzdF9yZWdpc3RyeV9iaW5hcnlfc2F2ZV9mZWF0dXJlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3NhdmVfcGx1Z2luKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfcGFkX3RlbXBsYXRlKSwKLQkgIChnc3RfcmVnaXN0cnlfYmluYXJ5X2xvYWRfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9sb2FkX3BsdWdpbiksCi0JICAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9mZWF0dXJlKSwKLQkgIChnc3RfcmVnaXN0cnlfeG1sX3JlYWRfY2FjaGUpOgotCSAgY29tbWl0IGJpbmFyeSByZWdpc3RyeSAoZGlzYWJsZWQgYnkgZGVmYXVsdCwgc2VlICMzNTk2NTMpCi0KLTIwMDctMDEtMTEgMTA6NDg6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzogRml4ICdtYWtlIGNoZWNrJyB0b28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOiAodGVzdF9nZXRfYWxsb3dlZF9jYXBzKToKLQkgIEZpeCAnbWFrZSBjaGVjaycgdG9vLgotCi0yMDA3LTAxLTEwIDIxOjI0OjA4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OiBGaXggYSB0eXBvLCBhZGQgYSBjb3VwbGUgbm90ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDEtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OiBGaXggYSB0eXBvLCBhZGQgYSBjb3VwbGUKLQkgIG5vdGVzLgotCi0yMDA3LTAxLTEwIDIxOjE1OjA4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0OiBVcGRhdGUgd2l0aCwgdW0sIG9uZSB3YXkgdGhhdCBwdWxsLW1vZGUgbmVnb3RpYXRpb24gbWlnaHQgd29yaz8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wMS0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6IFVwZGF0ZSB3aXRoLCB1bSwgb25lIHdheSB0aGF0Ci0JICBwdWxsLW1vZGUgbmVnb3RpYXRpb24gbWlnaHQgd29yaz8KLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2Fwcyk6IFJlbW92ZSB0aGUgcmVzdHJpY3Rpb24KLQkgIHRoYXQgdGhlIHBhZCBtdXN0IGJlIGEgc3JjIHBhZDsgbWFrZXMgc2Vuc2UgdG8gY2FsbCBpdCB0aGUgb3RoZXIKLQkgIHdheSBpbiBwdWxsIG1vZGUsIGFuZCB0aGUgbG9naWMgaXMgc3ltbWV0cmljIGFueXdheS4KLQotMjAwNy0wMS0xMCAxOToyNTowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBJbmNsdWRlIDxzdGRpby5oPiBmb3IgZnNlZWtvKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSAgSW5jbHVkZSA8c3RkaW8uaD4gZm9yIGZzZWVrbygpLgotCi0yMDA3LTAxLTEwIDEwOjIxOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZXZlbnQuKjogUmVzZXJ2ZSBMQVRFTkNZIGV2ZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIFJlc2VydmUgTEFURU5DWSBldmVudC4KLQotMjAwNy0wMS0wOSAxODowOTo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6IFVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6Ci0JICBVcGRhdGVzLgotCi0yMDA3LTAxLTA5IDE1OjM4OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDogVXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1sYXRlbmN5LnR4dDoKLQkgIFVwZGF0ZXMuCi0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgICogZ3N0L2dzdHRyYWNlLmM6Ci0JICBTbWFsbCB0eXBvIGZpeGVzLgotCi0yMDA3LTAxLTA5IDE0OjM4OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay8uY3ZzaWdub3JlOiBJZ25vcmUgdGVzdC1yZWdpc3RyeS54bWwgYXMgd2VsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay8uY3ZzaWdub3JlOgotCSAgSWdub3JlIHRlc3QtcmVnaXN0cnkueG1sIGFzIHdlbGwuCi0KLTIwMDctMDEtMDkgMTI6MzQ6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogdW5yZWYgZGF0YSBhdCB0aGUgZW5kIHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGUgcGFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCk6Ci0JICB1bnJlZiBkYXRhIGF0IHRoZSBlbmQgd2hlbiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBwYWQuCi0KLTIwMDctMDEtMDggMjA6MzA6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIGdzdF91cGRhdGVfcmVnaXN0cnkoKSAoIzM5MTI5NikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdC5jOiAobG9hZF9wbHVnaW5fZnVuYyksIChzY2FuX2FuZF91cGRhdGVfcmVnaXN0cnkpLAotCSAgKGluaXRfcG9zdCksIChnc3RfZGVpbml0KSwgKGdzdF91cGRhdGVfcmVnaXN0cnkpOgotCSAgKiBnc3QvZ3N0Lmg6Ci0JICBBUEk6IGFkZCBnc3RfdXBkYXRlX3JlZ2lzdHJ5KCkgKCMzOTEyOTYpLgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC8uY3ZzaWdub3JlOgotCSAgU2ltcGxlIHVuaXQgdGVzdCBmb3IgdGhlIGFib3ZlLgotCi0yMDA3LTAxLTA4IDE2OjIzOjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnkuYzogUGx1Z2luIGV4dGVuc2lvbiBvbiBIUC1VWCBpcyAuc2wsIGFkZCB0aGF0IHRvIHRoZSBsaXN0IG9mIGFwcHJvdmVkIHBsdWdpbiBleHRlbnNpb25zIChzZWUgIzM5Mzc5NikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKToKLQkgIFBsdWdpbiBleHRlbnNpb24gb24gSFAtVVggaXMgLnNsLCBhZGQgdGhhdCB0byB0aGUgbGlzdCBvZiBhcHByb3ZlZAotCSAgcGx1Z2luIGV4dGVuc2lvbnMgKHNlZSAjMzkzNzk2KS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgdWxvbmcgPT4gZ3Vsb25nLiBGaXhlcyBjb21waWxhdGlvbiB3aXRoIEhQLVVYIGNvbXBpbGVyLgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBGaXggY29tcGlsYXRpb24gaWYgdmFsZ3JpbmQgaGVhZGVycyBhcmUgbm90IGF2YWlsYWJsZS4KLQotMjAwNy0wMS0wNyAxMDoyMTozMyArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogQWRkIG5ldyBleHBvcnRlZCBmdW5jdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEFkZCBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24uCi0JICAqIHdpbjMyL3ZzNi9saWJnc3RiYXNlLmRzcDoKLQkgIEFkZCBnc3RkYXRhcXVldWUuYyB0byB0aGUgYnVpbGQuCi0JICAqIHdpbjMyL3ZzNi9saWJnc3Rjb3JlZWxlbWVudHMuZHNwOgotCSAgQWRkIGdzdG11bHRpcXVldWUuYyB0byB0aGUgYnVpbGQuCi0KLTIwMDctMDEtMDYgMTc6MTg6MDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOiBOZXcgR3N0QmFzZVNpbmtDbGFzcyB2bWV0aG9kLCBhY3RpdmF0ZV9wdWxsKCksIHByb3ZpZGluZyBmb3IgYSB3YXkgdG8gc3BlY2lhbGl6ZSB0aGUgcHJvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDEtMDYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDogTmV3IEdzdEJhc2VTaW5rQ2xhc3Mgdm1ldGhvZCwKLQkgIGFjdGl2YXRlX3B1bGwoKSwgcHJvdmlkaW5nIGZvciBhIHdheSB0byBzcGVjaWFsaXplIHRoZSBwcm9jZXNzIG9mCi0JICBzcGF3bmluZyBhIHRocmVhZCB0byBwdWxsIG9uIHRoZSBzaW5rIHBhZC4gVGhlcmUgaXMgYSBkZWZhdWx0Ci0JICBpbXBsZW1lbnRhdGlvbi4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9wdWxsKQotCSAgKGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1c2gsIGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlKQotCSAgKGdzdF9iYXNlX3NpbmtfaW5pdCk6IFJlbmFtZWQgcGFkIGFjdGl2YXRpb24gZnVuY3Rpb25zIChpbnNlcnRpbmcKLQkgICJfcGFkIiBpbiB0aGVpciBuYW1lcykuIFJlZmFjdG9yIHRvIHVzZSB0aGUgbmV3IGFjdGl2YXRlX3B1bGwKLQkgIHZtZXRob2QsIGFzIGFwcHJvcHJpYXRlLgotCSAgKGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCwgZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdWxsKTogU2V0IHRoZQotCSAgZGVmYXVsdCBhY3RpdmF0ZV9wdWxsIGZ1bmN0aW9uIHRvIHN0YXJ0IGEgdGFzayBwdWxsaW5nIGZyb20gdGhlCi0JICBzaW5rIHBhZCwgYXMgYmVmb3JlLgotCi0yMDA3LTAxLTA2IDE3OjA5OjEwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9nZXRfcmFuZ2UsIGdzdF9wYWRfcHVsbF9yYW5nZSk6IFNldCBjYXBzIG9uIHRoZSBwYWRzIGlmIG5lY2Vzc2FyeSwgYXMgaW4gcHVzaCgpL2NoYWluKCkuIFVwZGF0ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTAxLTA2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfZ2V0X3JhbmdlLCBnc3RfcGFkX3B1bGxfcmFuZ2UpOiBTZXQgY2FwcwotCSAgb24gdGhlIHBhZHMgaWYgbmVjZXNzYXJ5LCBhcyBpbiBwdXNoKCkvY2hhaW4oKS4gVXBkYXRlIGRvY3MuCi0JICBTaG91bGRuJ3QgYWZmZWN0IGV4aXN0aW5nIHB1bGwoKSB1c2FnZSBhcyBpdCBpcyBjdXJyZW50bHkgb25seQotCSAgYmVpbmcgdXNlZCBvbiBidWZmZXJzIHdpdGhvdXQgY2Fwcy4KLQotMjAwNy0wMS0wNSAxNjozNjozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdC5jOiBDYWxsIGdfdGhyZWFkX2luaXQoKSBmaXJzdCB0aGluZyBpbiBnc3RfaW5pdCgpIC8gZ3N0X2NoZWNrX2luaXQoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKSwgKGdzdF9pbml0X2NoZWNrKSwKLQkgIChpbml0X3ByZSk6Ci0JICBDYWxsIGdfdGhyZWFkX2luaXQoKSBmaXJzdCB0aGluZyBpbiBnc3RfaW5pdCgpIC8gZ3N0X2NoZWNrX2luaXQoKS4KLQkgIFdoZW4gaW5pdGlhbGlzYXRpb24gaXMgZG9uZSB2aWEgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCgpIGFuZAotCSAgR09wdGlvbiBwYXJzaW5nLCBpc3N1ZSBhIHdhcm5pbmcgaWYgdGhlIEdMaWIgdGhyZWFkIHN5c3RlbSBoYXMgbm90Ci0JICBiZWVuIGluaXRpYWxpc2VkIHlldCBieSB0aGUgdGltZSBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKCkgaXMKLQkgIGNhbGxlZCwgYXMgaXQncyBxdWl0ZSBsaWtlbHkgb3RoZXIgR0xpYiBmdW5jdGlvbnMgc3VjaCBhcwotCSAgZ19vcHRpb25fY29udGV4dF9uZXcoKSBoYXZlIGJlZW4gY2FsbGVkIGFscmVhZHkgdGhlbiwgYW5kCi0JICBnX3RocmVhZF9pbml0KCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBHTGliIGZ1bmN0aW9uLiBUaGUKLQkgIGFwcGxpY2F0aW9uIGluIHF1ZXN0aW9uIG11c3QgYmUgZml4ZWQgaW4gdGhhdCBjYXNlLCBzaW5jZSBtZW1vcnkKLQkgIGNvcnJ1cHRpb24gbWlnaHQgaGFwcGVuIG90aGVyd2lzZS4KLQkgIFdlIGlzc3VlIHRoZSB3YXJuaW5nIGJlY2F1c2UgZXZlbiBpZiB0aGUgR0xpYiBmb2xrcyBkZWNpZGUgdG8gd29yawotCSAgYXJvdW5kIHRoZSBwcm9ibGVtIG9uIHRoZWlyIGVuZCBpbiBmdXR1cmUsIHRoaXMgaXMgc3RpbGwgYW4gaXNzdWUKLQkgIHdpdGggYWxsIEdMaWIgdmVyc2lvbnMgPj0gMi4xMC4wLCBzbyB3ZSBzaG91bGQgd2FybiB1bnRpbCB3ZSBkZXBlbmQKLQkgIG9uIGEgR0xpYiB2ZXJzaW9uIHdlIGtub3cgdG8gYmUgc2FmZS4KLQkgIFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFzIHdlbGwuCi0JICBDbG9zZXMgYnVnICMzOTEyNzguCi0KLTIwMDctMDEtMDUgMTU6NTU6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzLzogQ2FsbCBnX3RocmVhZF9pbml0KCkgcmVhbGx5IHJlYWxseSBlYXJseSwgYmVmb3JlIGFueSBvdGhlciBHTGliIGZ1bmN0aW9uIChzZWUgIzM0MjU2NCBhbmQgcmVjZW50IGRpc2N1c3Npb24gby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChtYWluKToKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6Ci0JICAqIHRvb2xzL2dzdC10eXBlZmluZC5jOiAobWFpbik6Ci0JICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6IChtYWluKToKLQkgIENhbGwgZ190aHJlYWRfaW5pdCgpIHJlYWxseSByZWFsbHkgZWFybHksIGJlZm9yZSBhbnkgb3RoZXIgR0xpYgotCSAgZnVuY3Rpb24gKHNlZSAjMzQyNTY0IGFuZCByZWNlbnQgZGlzY3Vzc2lvbiBvbiBndGstZGV2ZWwtbGlzdCkuCi0KLTIwMDctMDEtMDUgMTM6MjM6MDIgKzAwMDAgIFZpbmNlbnQgVG9ycmkgPHZ0b3JyaUB1bml2LWV2cnkuZnI+Ci0KLQkgIGdzdC86IE9uIHdpbjMyLCBhbGwgdGhlIF9fZGVjbHNwZWMgc3R1ZmYgZm9yIHN5bWJvbCBleHBvcnRpbmcgaXMgYXBwYXJlbnRseSBvbmx5IG5lZWRlZCB3aXRoIE1TVkMsIGJ1dCBkb2Vzbid0IHdvcmsgdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogVmluY2VudCBUb3JyaSAgPHZ0b3JyaSBhdCB1bml2LWV2cnkgZG90IGZyPgotCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgT24gd2luMzIsIGFsbCB0aGUgX19kZWNsc3BlYyBzdHVmZiBmb3Igc3ltYm9sIGV4cG9ydGluZyBpcwotCSAgYXBwYXJlbnRseSBvbmx5IG5lZWRlZCB3aXRoIE1TVkMsIGJ1dCBkb2Vzbid0IHdvcmsgd2l0aCBNaW5nVy4KLQkgIEZpeGVzIGNvbXBpbGF0aW9uIHdpdGggTWluZ1cgYW5kICMzOTE5MDkuCi0KLTIwMDctMDEtMDUgMTE6NTc6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBDaGFuZ2Ugc29tZSBHU1RfRVJST1JfT0JKRUNUIHRoYXQgYXJlbid0IHJlYWxseSBlcnJvcnMgdG8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKToKLQkgIENoYW5nZSBzb21lIEdTVF9FUlJPUl9PQkpFQ1QgdGhhdCBhcmVuJ3QgcmVhbGx5IGVycm9ycyB0bwotCSAgR1NUX1dBUk5JTkdfT0JKRUNUIGluIG9yZGVyIHRvIHJlZHVjZSB0ZXJtaW5hbCBzcGFtLgotCi0yMDA3LTAxLTA0IDEzOjU0OjI1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBkaXNhYmxlIHRlc3QgYWdhaW4sIGFzIHRoZXJlIHNlZW0gdG8gYmUgc3RpbGwgcmFjZSBwcm9ibGVtcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgZGlzYWJsZSB0ZXN0IGFnYWluLCBhcyB0aGVyZSBzZWVtIHRvIGJlIHN0aWxsIHJhY2UgcHJvYmxlbXMKLQotMjAwNy0wMS0wNCAxMzozNzowOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay86IGVuYWJsZSBxdWV1ZSB0ZXN0IGFnYWluLCBhZGQgdGVzdHMgZm9yIHRoZSBsZWFreSBiZWhhdmlvdXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzogKHF1ZXVlX292ZXJydW4pLCAocXVldWVfdW5kZXJydW4pLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKHF1ZXVlX3N1aXRlKToKLQkgIGVuYWJsZSBxdWV1ZSB0ZXN0IGFnYWluLCBhZGQgdGVzdHMgZm9yIHRoZSBsZWFreSBiZWhhdmlvdXIKLQotMjAwNy0wMS0wMiAxNzowMTozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQ29tcGlsZSBhZGFwdGVyIHRlc3QvZXhhbXBsZSBvbmx5IGlmIHRoZSByZXF1aXJlZCBoZWFkZXJzIGFyZSBhdmFpbGFibGUgKGZpeGVzICMzOTE5MTUpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JICBDb21waWxlIGFkYXB0ZXIgdGVzdC9leGFtcGxlIG9ubHkgaWYgdGhlIHJlcXVpcmVkIGhlYWRlcnMgYXJlCi0JICBhdmFpbGFibGUgKGZpeGVzICMzOTE5MTUpLgotCi0yMDA3LTAxLTAyIDA5OjMxOjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB0ZWxsIHVzIHdoYXQncyBub3QgaW1wbGVtZW50ZWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdGVsbCB1cyB3aGF0J3Mgbm90IGltcGxlbWVudGVkCi0KLTIwMDctMDEtMDIgMDk6MzE6MTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBidW1wIHRvIENWUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBidW1wIHRvIENWUwotCi0yMDA3LTAxLTAyIDA2OjE0OjA2ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdHBsdWdpbi5jOiBSZXN0b3JlIHRoZSBwcmV2aW91cyBzaWduYWwgaGFuZGxlciBmb3IgU0lHU0VHViBpbnN0ZWFkIG9mIHNldHRpbmcgdG8gZGVmYXVsdCwgc2luY2Ugd2UgbWF5IGhhdmUgc3RvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOgotCSAgUmVzdG9yZSB0aGUgcHJldmlvdXMgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR1NFR1YgaW5zdGVhZCBvZgotCSAgc2V0dGluZyB0byBkZWZhdWx0LCBzaW5jZSB3ZSBtYXkgaGF2ZSBzdG9sZW4gaXQgYXdheSBmcm9tCi0JICBzb21lb25lLiAgKGkuZS4sIE1vbm8pCi0KLTIwMDYtMTItMjYgMTU6NTU6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6IFNvbWUgc21hbGwgYWRkaXRpb25zIGFuZCBjbGFyaWZpY2F0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OgotCSAgU29tZSBzbWFsbCBhZGRpdGlvbnMgYW5kIGNsYXJpZmljYXRpb25zLgotCi0yMDA2LTEyLTI2IDE1OjA2OjUyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogTWFrZSBzdXJlIHdlIGRvbid0IHBhc3Mgbm9uLVVURi04IHN0cmluZ3MgdG8gZ19tYXJrdXBfZXNjYXBlKCksIHNpbmNlIHRoYXQgY2FuIGxlYWQgdG8gcmFuZG9tIG0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGdzdF9yZWdpc3RyeV9zYXZlX2VzY2FwZWQpOgotCSAgTWFrZSBzdXJlIHdlIGRvbid0IHBhc3Mgbm9uLVVURi04IHN0cmluZ3MgdG8gZ19tYXJrdXBfZXNjYXBlKCksCi0JICBzaW5jZSB0aGF0IGNhbiBsZWFkIHRvIHJhbmRvbSBtZW1vcnkgY29ycnVwdGlvbnMgYW5kIGNyYXNoZXMKLQkgIChtYXkgb3IgbWF5IG5vdCBiZSByZWxhdGVkIHRvICMzODMyNDQsICMzODY3MTEsIGFuZCAjMzg2NzExKS4KLQotMjAwNi0xMi0yMSAxNTo1NDowNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay86IHN5bmMgLmN2c2lnbm9tZSBhbmQgQ0xFQU5GSUxFUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgc3luYyAuY3ZzaWdub21lIGFuZCBDTEVBTkZJTEVTCi0KLTIwMDYtMTItMjEgMTU6MzI6MDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IGZpeCBkaXN0Y2hlY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGZpeCBkaXN0Y2hlY2sKLQotMjAwNi0xMi0yMSAxNTowMDowOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6IHR3byB0aW55IGFkZGl0aW9uYWwgY29tbWVudHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6Ci0JICB0d28gdGlueSBhZGRpdGlvbmFsIGNvbW1lbnRzCi0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIGRvYyBmaXhpbmcKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmM6IChxdWV1ZV9vdmVycnVuKSwgKHF1ZXVlX3VuZGVycnVuKSwKLQkgIChHU1RfU1RBUlRfVEVTVCk6Ci0JICBkaXNhYmxlIHRlc3QgZm9yIG5vdywgdW5sZXNzIGl0IGdldHMgZml4ZWQKLQotMjAwNi0xMi0yMSAxNDoyNDo1NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOiBmaXggcmFjZSBpbiB1bmRlcnJ1biB0ZXN0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzogKHF1ZXVlX292ZXJydW4pLCAocXVldWVfdW5kZXJydW4pLAotCSAgKEdTVF9TVEFSVF9URVNUKToKLQkgIGZpeCByYWNlIGluIHVuZGVycnVuIHRlc3QKLQotMjAwNi0xMi0yMSAwOTo1ODoyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOiBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZQotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jOiAocXVldWVfb3ZlcnJ1biksIChxdWV1ZV91bmRlcnJ1biksCi0JICAoR1NUX1NUQVJUX1RFU1QpOgotCSAgdHJ5IHRvIG5hcnJvdyB0ZXN0IGZhaWx1cmUKLQotMjAwNi0xMi0yMSAwOTozNzo1NiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiBVc2UgZ19yYW5kb21faW50X3JhbmdlKCksIHNpbmNlIGl0IHByb2R1Y2VzIGJldHRlciByYW5kb20gbnVtYmVycyBpbiBhIHJhbmdlIHRoYW4gYWxtby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgVXNlIGdfcmFuZG9tX2ludF9yYW5nZSgpLCBzaW5jZSBpdCBwcm9kdWNlcyBiZXR0ZXIgcmFuZG9tCi0JICBudW1iZXJzIGluIGEgcmFuZ2UgdGhhbiBhbG1vc3QtY29ycmVjdCBmbG9hdGluZyBwb2ludCBjb2RlLgotCi0yMDA2LTEyLTIxIDA4OjEyOjI4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IGRvIG5vdCBhdXRvbWF0aWNhbGx5IChkZSlhY3RpdmF0ZSBwYWRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19zZXR1cF9zcmNfcGFkKSwKLQkgIChnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCksIChnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQpLAotCSAgKGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCk6Ci0JICBkbyBub3QgYXV0b21hdGljYWxseSAoZGUpYWN0aXZhdGUgcGFkcwotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcXVldWUuYzogKHF1ZXVlX292ZXJydW4pLCAocXVldWVfdW5kZXJydW4pLAotCSAgKHNldHVwX3F1ZXVlKSwgKGNsZWFudXBfcXVldWUpLCAoR1NUX1NUQVJUX1RFU1QpLCAocXVldWVfc3VpdGUpOgotCSAgYWRkIG5ldywgeWV0IHNpbXBsZSB0ZXN0cyBmb3IgcXVldWUKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jOiAoY2xlYW51cF9mYWtlc3JjKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYzogKGNsZWFudXBfZmRzcmMpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmM6IChjbGVhbnVwX2ZpbGVzcmMpLAotCSAgKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzogKGNsZWFudXBfaWRlbnRpdHkpOgotCSAgY29uc2lzdGVudCBwYWQgKGRlKWFjdGl2YXRpb24KLQotMjAwNi0xMi0yMCAxOTowNjowMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IEZpeCB0d28gZG9jIHR5cG9zICgjMzg3ODY2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tbyB1YnVudHUgY29tPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICBGaXggdHdvIGRvYyB0eXBvcyAoIzM4Nzg2NikuCi0KLTIwMDYtMTItMTkgMTU6MDY6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRwYXJhbXMueG1sOiBGaXggdHlwbyAoZ19vYmplY3RfY29udHJvbF9wcm9wZXJ0aWVzKCkgZG9lc24ndCBleGlzdCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6Ci0JICBGaXggdHlwbyAoZ19vYmplY3RfY29udHJvbF9wcm9wZXJ0aWVzKCkgZG9lc24ndCBleGlzdCkuCi0KLTIwMDYtMTItMTkgMTI6Mzg6MDAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RzZWdtZW50LmM6IEZpbmUgdHVuZSB0aGUgY2FzZXMgd2hlcmUgdGhlIHNlZ21lbnQgc3RhcnQvc3RvcCB2YWx1ZXMgYXJlIHJlYWxseSB1cGRhdGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfc2Vlayk6Ci0JICBGaW5lIHR1bmUgdGhlIGNhc2VzIHdoZXJlIHRoZSBzZWdtZW50IHN0YXJ0L3N0b3AgdmFsdWVzIGFyZSByZWFsbHkKLQkgIHVwZGF0ZWQuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBBZGQgdGVzdHMgZm9yIHRoZSByZXR1cm4gdmFsdWVzIG9mIGdzdF9zZWdtZW50X3NldF9zZWVrKCkuCi0KLTIwMDYtMTItMTkgMTE6MDQ6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogRG9jcyB0eXBvIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICBEb2NzIHR5cG8gZml4LgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3F1ZXVlX2luaXQpOgotCSAgRml4IGluY29ycmVjdCBkb2N1bWVudGF0aW9uIGFuZCBmbGVzaCBpdCBvdXQgYSBiaXQgbW9yZS4KLQkgIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1heCBwcm9wZXJ0aWVzIG9uIHRoZSBHUGFyYW1TcGVjIGFzIHdlbGwsCi0JICBzbyBpdCBzaG93cyB1cCBjb3JyZWN0bHkgaW4gZ3N0LWluc3BlY3QuCi0KLTIwMDYtMTItMTggMTY6MDE6MzIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBDb3JyZWN0IGRvY3Mgb2YgcXVldWUsIGFkZCBtb3JlIGRldGFpbCBhbmQgY3Jvc3NsaW5rIGl0IG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAocXVldWVfbGVha3lfZ2V0X3R5cGUpOgotCSAgQ29ycmVjdCBkb2NzIG9mIHF1ZXVlLCBhZGQgbW9yZSBkZXRhaWwgYW5kIGNyb3NzbGluayBpdCBtb3JlLgotCi0yMDA2LTEyLTE2IDE5OjMzOjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IFByaW50IGFkZGl0aW9uYWwgZGVidWcgaW5mbyB3aGVuIHRoZSBzdHJlYW0gaXNuJ3QgcGVyZmVjdGx5IHRpbWVzdGFtcGVkOyBkb24ndCB0cnkgdG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2hlY2tfcGVyZmVjdCk6Ci0JICBQcmludCBhZGRpdGlvbmFsIGRlYnVnIGluZm8gd2hlbiB0aGUgc3RyZWFtIGlzbid0IHBlcmZlY3RseQotCSAgdGltZXN0YW1wZWQ7IGRvbid0IHRyeSB0byB1c2UgaW52YWxpZCBkdXJhdGlvbnMuCi0KLTIwMDYtMTItMTYgMTY6MTQ6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOiBEaXN0IG5ldyBkZXNpZ24gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkgIERpc3QgbmV3IGRlc2lnbiBkb2NzLgotCi0yMDA2LTEyLTE2IDE1OjE3OjU0ICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuKjogQWRkIHJlZmNvdW50aW5nIHRvIHRoZSBjb2xsZWN0cGFkcyBkYXRhIHNvIHdlIGNhbiB0cmFjayB3aGVuIGl0J3Mgc2FmZSB0byBmcmVlIHRoZSBkYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gZG90IG5ldD4KLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAocmVmX2RhdGEpLCAodW5yZWZfZGF0YSksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKSwgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19zdG9wKSwgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICBBZGQgcmVmY291bnRpbmcgdG8gdGhlIGNvbGxlY3RwYWRzIGRhdGEgc28gd2UgY2FuIHRyYWNrIHdoZW4gaXQncyBzYWZlCi0JICB0byBmcmVlIHRoZSBkYXRhLiBGaXhlcyAjMzgzMzgyLgotCi0yMDA2LTEyLTE1IDE3OjA5OjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IEF1dG9tYXRpY2FsbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBwYWRzIHdoZW4gdGhleSBhcmUgYWRkZWQgdG8gYSBzdGFydGVkL3N0b3BlZCBjb2xsZWMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCk6Ci0JICBBdXRvbWF0aWNhbGx5IGFjdGl2YXRlL2RlYWN0aXZhdGUgcGFkcyB3aGVuIHRoZXkgYXJlIGFkZGVkIHRvIGEKLQkgIHN0YXJ0ZWQvc3RvcGVkIGNvbGxlY3RwYWRzLgotCi0yMDA2LTEyLTE1IDE2OjAxOjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBTZXQgcGFkcyB0byBGTFVTSElORyB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQuIENoZWNrLCB3YXJuIGFuZCBmaXggd2hlbiBhIGRlbXV4ZXIgYWRkcyBhbiBpbmFjdGl2ZSBwYWQgdG8gaXRzZWxmIHcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfYWRkX3BhZCk6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X2dob3N0X3BhZF9uZXdfZnVsbCk6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfaW5pdCk6Ci0JICBTZXQgcGFkcyB0byBGTFVTSElORyB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQuIENoZWNrLCB3YXJuIGFuZCBmaXggd2hlbiBhCi0JICBkZW11eGVyIGFkZHMgYW4gaW5hY3RpdmUgcGFkIHRvIGl0c2VsZiB3aGVuIHJ1bm5pbmcuIEZpeGVzICMzMzkzMjYuCi0KLTIwMDYtMTItMTUgMTU6NDk6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IEV4cG9zZSBkZWZhdWx0IGVsZW1lbnQgc2VuZF9ldmVudCBhbmQgcXVlcnkgaGFuZGxpbmcgYXMgdm1ldGhvZHMgdGhhdCBzdWJjbGFzc2VzIGNhbiBjaGFpbiB1cCB0by4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2VsZW1lbnRfZGVmYXVsdF9zZW5kX2V2ZW50KSwgKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQpLAotCSAgKGdzdF9lbGVtZW50X2RlZmF1bHRfcXVlcnkpLCAoZ3N0X2VsZW1lbnRfcXVlcnkpOgotCSAgRXhwb3NlIGRlZmF1bHQgZWxlbWVudCBzZW5kX2V2ZW50IGFuZCBxdWVyeSBoYW5kbGluZyBhcyB2bWV0aG9kcyB0aGF0Ci0JICBzdWJjbGFzc2VzIGNhbiBjaGFpbiB1cCB0by4KLQotMjAwNi0xMi0xNSAxNTozOToyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogU21hbGwgZG9jdW1lbnRhdGlvbiBmaXhlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpOgotCSAgU21hbGwgZG9jdW1lbnRhdGlvbiBmaXhlcy4KLQotMjAwNi0xMi0xNSAxNToyNjo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vZHJhZnQtbGF0ZW5jeS50eHQ6IENoZWNrZWQgaW4gZHJhZnQgZm9yIGhhbmRsaW5nIGxhdGVuY3kgaW4gcGlwZWxpbmVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LWxhdGVuY3kudHh0OgotCSAgQ2hlY2tlZCBpbiBkcmFmdCBmb3IgaGFuZGxpbmcgbGF0ZW5jeSBpbiBwaXBlbGluZXMuCi0KLTIwMDYtMTItMTUgMDA6MTY6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBhZGRpbmcgLmRvYXAgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIE1ha2VmaWxlLmFtOgotCSAgKiBnc3RyZWFtZXIuZG9hcDoKLQkgICogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBhZGRpbmcgLmRvYXAgZmlsZQotCi0yMDA2LTEyLTE0IDE0OjA2OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0LmM6IGluaXRfcHJlKCkgYW5kIGluaXRfcG9zdCgpIG1pZ2h0IGJlIGNhbGxlZCB2aWEgb3VyIEdPcHRpb25Hcm91cCBvciBmcm9tIGdzdF9pbml0KCksIGFuZCB3ZSBzaG91bGQgc2tpcCBib3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChpbml0X3ByZSksIChpbml0X3Bvc3QpOgotCSAgaW5pdF9wcmUoKSBhbmQgaW5pdF9wb3N0KCkgbWlnaHQgYmUgY2FsbGVkIHZpYSBvdXIgR09wdGlvbkdyb3VwIG9yCi0JICBmcm9tIGdzdF9pbml0KCksIGFuZCB3ZSBzaG91bGQgc2tpcCBib3RoIG9mIHRoZW0gaWYgd2UndmUgYWxyZWFkeQotCSAgYmVlbiBpbml0aWFsaXNlZCwgb3RoZXJ3aXNlIHdlIHdpbGwgaW5pdCBzb21lIHRoaW5ncyB0d2ljZSBvciBhZGQKLQkgIHR3byBkZWZhdWx0IGxvZyBmdW5jdGlvbnMuCi0KLTIwMDYtMTItMTMgMTI6NDY6MjggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOiBObywgZ3N0X21haW5fbG9vcCBkb2VzIG5vdCBleGlzdC4gSXRzIGdfbWFpbl9sb29wLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgotCSAgTm8sIGdzdF9tYWluX2xvb3AgZG9lcyBub3QgZXhpc3QuIEl0cyBnX21haW5fbG9vcC4KLQkgIERpc2NvdmVyZWQgYnkgc29tZWJvZHkgd2hvIGFidXNlZCB0aGUgY29weS1wYXN0ZSB0ZWNobmlxdWUgb2YgY29kaW5nIDopCi0KLTIwMDYtMTItMTMgMTE6MDU6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RnaG9zdHBhZC5jOiBMb2cgZ2hvc3RwYWQgZGVidWcgc3R1ZmYgdG8gdGhlIEdTVF9QQURTIGNhdGVnb3J5IGFzIHdlbGwgcmF0aGVyIHRoYW4ganVzdCB0byB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIExvZyBnaG9zdHBhZCBkZWJ1ZyBzdHVmZiB0byB0aGUgR1NUX1BBRFMgY2F0ZWdvcnkgYXMgd2VsbCByYXRoZXIKLQkgIHRoYW4ganVzdCB0byB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KLQotMjAwNi0xMi0xMiAxMzo1MzowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQWRkIHNvbWUgYmFzaWMgc3lzdGVtIGRldGFpbHMgc3VjaCBhcyBPUyBhbmQgYXJjaGl0ZWN0dXJlIHRvIHRoZSBkZWJ1ZyBvdXRwdXQgaWYgcG9zc2libGUsIGNvdXJ0ZXN5IG9mIHVuYW1lKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvZ3N0LmM6IChpbml0X3ByZSk6Ci0JICBBZGQgc29tZSBiYXNpYyBzeXN0ZW0gZGV0YWlscyBzdWNoIGFzIE9TIGFuZCBhcmNoaXRlY3R1cmUKLQkgIHRvIHRoZSBkZWJ1ZyBvdXRwdXQgaWYgcG9zc2libGUsIGNvdXJ0ZXN5IG9mIHVuYW1lKCkuCi0KLTIwMDYtMTItMTEgMTM6NDA6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvZ3N0L3J1bm5pbmcueG1sOiBEb2N1bWVudCBHU1RfUkVHSVNUUllfRk9SSyBhbmQgR1NUX0RFQlVHX05PX0NPTE9SIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9ydW5uaW5nLnhtbDoKLQkgIERvY3VtZW50IEdTVF9SRUdJU1RSWV9GT1JLIGFuZCBHU1RfREVCVUdfTk9fQ09MT1IKLQkgIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLQotMjAwNi0xMi0wOSAyMDoyMzoxMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZlIGEgcmVmY291bnQgb2YgMiBvciAzIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHRlc3QsIGJlY2F1c2UgdGhlIHBpcGVsaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEl0IGlzIGFjY2VwdGFibGUgdG8gaGF2ZSBhIHJlZmNvdW50IG9mIDIgb3IgMyBhdCB0aGlzIHBvaW50IGluIHRoZQotCSAgdGVzdCwgYmVjYXVzZSB0aGUgcGlwZWxpbmUgbWlnaHQgYmUganVzdCBwb3N0aW5nIGl0cyBzdGF0ZV9jaGFuZ2UKLQkgIG1lc3NhZ2UuIFRoZSBuZXh0IGxpbmUgdGhlbiB3YWl0cyBmb3IgdGhhdCBtZXNzYWdlIHRvIGFwcGVhciB1c2luZwotCSAgYnVzX3BvbGwsIHNvIHRoYXQgc2hvdWxkIGJlIGZpbmUgdG9vLgotCi0yMDA2LTEyLTA5IDE4OjQ4OjU3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdC5jOiBJZ25vcmUgRUlOVFIgd2hlbiByZWFkaW5nIGZyb20gdGhlIGNoaWxkIHJlZ2lzdHJ5IHBpcGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnlfZm9ya2luZyk6Ci0JICBJZ25vcmUgRUlOVFIgd2hlbiByZWFkaW5nIGZyb20gdGhlIGNoaWxkIHJlZ2lzdHJ5IHBpcGUuCi0JICBFeHBsaWNpdGx5IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gY2xvc2UsIHNpbmNlIGl0IG1ha2VzIG5vCi0JICBkaWZmZXJlbmNlLgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X3JlZiksCi0JICAoZ3N0X21pbmlfb2JqZWN0X3VucmVmKToKLQkgIFdoZW4gZGVidWdnaW5nIHJlZmNvdW50cywgY2hlY2sgR1NUX0lTX01JTklfT0JKRUNUIGFuZCB3YXJuLgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKF9wcml2X2dzdF9yZWdpc3RyeV9yZW1vdmVfY2FjaGVfcGx1Z2lucyk6Ci0JICBXaGVuIHJlbW92aW5nIGNhY2hlZCBwbHVnaW5zLCByZW1vdmUgdGhlaXIgZmVhdHVyZXMgdG9vLCBzbyB0aGV5J3JlCi0JICBub3QgdmlzaWJsZSBhZnRlciB0aGV5J3ZlIGRpc2FwcGVhcmVkLgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKHByZXBhcmVfbGlua19tYXliZV9naG9zdGluZyk6Ci0JICBJbiB0aGUgdW5saWtlbHkgY2FzZSB0aGF0IHdlIGFyZSBsaW5raW5nIHBhZHMgd2l0aCBubyBwYXJlbnRzLCBkb24ndAotCSAgY3Jhc2ggdHJ5aW5nIHRvIGdldCB0aGUgbm9uLWV4aXN0ZW50IHBhcmVudCBiaW4uCi0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBPdXRwdXQgZGVidWcgaW4gdGhlIFBJUEVMSU5FIGNhdGVnb3J5Ci0KLTIwMDYtMTItMDggMTY6MTI6NDQgKzAwMDAgIFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkgIGdzdC9nc3RjbG9jay5jOiBSZWplY3QgaW52YWxpZCBjbG9jayB0aW1lcyBmb3IgaW50ZXJ2YWwgb2YgcGVyaW9kaWMgaWRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUmVuw6kgU3RhZGxlciA8bWFpbCBhdCByZW5lc3RhZGxlciBkb3QgZGU+Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCk6Ci0JICBSZWplY3QgaW52YWxpZCBjbG9jayB0aW1lcyBmb3IgaW50ZXJ2YWwgb2YgcGVyaW9kaWMgaWRzLgotCSAgRml4ZXMgIyMzODM1MDYuCi0KLTIwMDYtMTItMDcgMTI6MTE6MTQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBGaXggcmVmY291bnRpbmcgb2YgZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgdG8gbWF0Y2ggdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSk6Ci0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCk6Ci0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uKToKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfaW5mbyk6Ci0JICBGaXggcmVmY291bnRpbmcgb2YgZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgdG8gbWF0Y2ggdGhlIGRvY3MuCi0JICBGaXhlczogIzM4MDEyOQotCi0yMDA2LTEyLTA3IDEwOjU5OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEltcHJvdmUgZGVidWdnaW5nIG9mIGV2ZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6Ci0JICBJbXByb3ZlIGRlYnVnZ2luZyBvZiBldmVudHMuCi0KLTIwMDYtMTItMDcgMTA6NTE6MzYgKzAwMDAgIFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkgIGdzdC9nc3RjbG9jay5jOiBNYWtlIHBlcmlvZCBpZHMgYWRkIHRoZSBpbnRlcnZhbCB0byB0aGUgb3JpZ2lhbCByZXF1ZXN0ZWQgdGltZSBpbnN0ZWFkIG9mIHRoZSBwb3NzaWJseSB1cGRhdGVkIHRpbWUgdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUmVuw6kgU3RhZGxlciA8bWFpbCBhdCByZW5lc3RhZGxlciBkb3QgZGU+Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2lkX3dhaXQpOgotCSAgTWFrZSBwZXJpb2QgaWRzIGFkZCB0aGUgaW50ZXJ2YWwgdG8gdGhlIG9yaWdpYWwgcmVxdWVzdGVkIHRpbWUgaW5zdGVhZAotCSAgb2YgdGhlIHBvc3NpYmx5IHVwZGF0ZWQgdGltZSB3aGljaCBjYW4gYmUgd3Jvbmcgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUKLQkgIHdhaXRlcnMgZm9yIHRoZSBzYW1lIGlkLiBGaXhlcyAjMzgyNTkyLgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfYXN5bmNfdGhyZWFkKSwKLQkgIChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyX3VubG9ja2VkKSwKLQkgIChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyKToKLQkgIEZpeCByZXN0YXJ0IGluIHRoZSBhc3luYyBub3RpZnkgdGhyZWFkIHdoZW4gYW4gYXN5bmMgZW50cnkgaXMgYWRkZWQgdG8KLQkgIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4gRml4ZXMgIzM4MTQ5Mi4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChzdG9yZV9jYWxsYmFjayksCi0JICAobm90aWZ5X2NhbGxiYWNrKSwgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9zeXN0ZW1jbG9ja19zdWl0ZSk6Ci0JICBBZGRlZCB0ZXN0IGZvciBtdWx0aXBsZSBhc3luYyB3YWl0cy4KLQkgIEFkZGVkIHRlc3QgZm9yIGFzeW5jIHdhaXQgb3JkZXIuCi0KLTIwMDYtMTItMDcgMTA6MDI6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogQWRkIHNvbWUgbW9yZSBkb2NzIGFib3V0IHRoZSBQT1NJVElPTiBxdWVyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3F1ZXJ5KToKLQkgIEFkZCBzb21lIG1vcmUgZG9jcyBhYm91dCB0aGUgUE9TSVRJT04gcXVlcnkuCi0KLTIwMDYtMTItMDcgMDI6Mzc6MTggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiBuYW5vIC0gYmFjayB0byBDVlMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQnVtcCB2ZXJzaW9uIG5hbm8gLSBiYWNrIHRvIENWUy4KLQotPT09IHJlbGVhc2UgMC4xMC4xMSA9PT0KLQotMjAwNi0xMi0wNyAwMjozMzo1NCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogcmVsZWFzaW5nIDAuMTAuMTEsICJMb3ZlIG5ldmVyIHJ1bnMgb24gdGltZSIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgPT09IHJlbGVhc2UgMC4xMC4xMSA9PT0KLQkgIDIwMDYtMTItMDYgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICByZWxlYXNpbmcgMC4xMC4xMSwgIkxvdmUgbmV2ZXIgcnVucyBvbiB0aW1lIgotCi0yMDA2LTEyLTAxIDEwOjIzOjI2ICswMDAwICBTZXJnZXkgU2NvYmljaCA8c2VyZ2V5LnNjb2JpY2hAZ21haWwuY29tPgotCi0JICB3aW4zMi86IEZpeCBjb21waWxhdGlvbiBvbiB3aW4zMiB1bmRlciBWUzgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgKiB3aW4zMi92czgvbGliZ3N0YmFzZS52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3Rjb3JlZWxlbWVudHMudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0cmVhbWVyLnZjcHJvajoKLQkgIEZpeCBjb21waWxhdGlvbiBvbiB3aW4zMiB1bmRlciBWUzgKLQkgIFBhdGNoIGJ5OiBTZXJnZXkgU2NvYmljaCA8c2VyZ2V5IGRvdCBzY29iaWNoIGF0IGdtYWlsIGRvdCBjb20+Ci0JICBQYXJ0aWFsbHkgZml4ZXMgIzM4MTE3NQotCi0yMDA2LTExLTMwIDIyOjU1OjA4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA2LTExLTI5IDE2OjM5OjMyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IElmIHNvbWVvbmUgaXMgZm9vbGlzaCBlbm91Z2ggdG8gY29tcGFyZSAyIGZyYWN0aW9ucyB3aXRoIGRlbm9taW5hdG9yID0gMCwgcmV0dXJuIFVOT1JERVJFRCByYXRoZXIgdGhhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfY29tcGFyZV9mcmFjdGlvbik6Ci0JICBJZiBzb21lb25lIGlzIGZvb2xpc2ggZW5vdWdoIHRvIGNvbXBhcmUgMiBmcmFjdGlvbnMgd2l0aCBkZW5vbWluYXRvciA9Ci0JICAwLCByZXR1cm4gVU5PUkRFUkVEIHJhdGhlciB0aGFuIGFib3J0aW5nLgotCi0yMDA2LTExLTI4IDEyOjA3OjA2ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlLzogTmV3IEdzdERhdGFRdWV1ZSBvYmplY3QgZm9yIHRocmVhZHNhZmUgcXVldWVpbmcuIE1vc3QgdXNlZnVsIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgc29tZSBxdWV1ZWluZyBmdW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jOiAoZ3N0X2RhdGFfcXVldWVfZ2V0X3R5cGUpLAotCSAgKGdzdF9kYXRhX3F1ZXVlX2Jhc2VfaW5pdCksIChnc3RfZGF0YV9xdWV1ZV9jbGFzc19pbml0KSwKLQkgIChnc3RfZGF0YV9xdWV1ZV9pbml0KSwgKGdzdF9kYXRhX3F1ZXVlX25ldyksCi0JICAoZ3N0X2RhdGFfcXVldWVfY2xlYW51cCksIChnc3RfZGF0YV9xdWV1ZV9maW5hbGl6ZSksCi0JICAoZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2ZsdXNoKSwgKGdzdF9kYXRhX3F1ZXVlX2xvY2tlZF9pc19lbXB0eSksCi0JICAoZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2lzX2Z1bGwpLCAoZ3N0X2RhdGFfcXVldWVfZmx1c2gpLAotCSAgKGdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5KSwgKGdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGwpLAotCSAgKGdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZyksIChnc3RfZGF0YV9xdWV1ZV9wdXNoKSwKLQkgIChnc3RfZGF0YV9xdWV1ZV9wb3ApLCAoZ3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkKSwKLQkgIChnc3RfZGF0YV9xdWV1ZV9zZXRfcHJvcGVydHkpLCAoZ3N0X2RhdGFfcXVldWVfZ2V0X3Byb3BlcnR5KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RkYXRhcXVldWUuaDoKLQkgIE5ldyBHc3REYXRhUXVldWUgb2JqZWN0IGZvciB0aHJlYWRzYWZlIHF1ZXVlaW5nLiBNb3N0IHVzZWZ1bCBmb3IKLQkgIGVsZW1lbnRzIHRoYXQgbmVlZCBzb21lIHF1ZXVlaW5nIGZ1bmN0aW9ubmFsaXR5LgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgSW5zZXJ0IGRvY3VtZW50YXRpb24gZm9yIEdzdERhdGFRdWV1ZQotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jOiAoZ3N0X211bHRpX3F1ZXVlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X211bHRpX3F1ZXVlX2NsYXNzX2luaXQpLCAoZ3N0X211bHRpX3F1ZXVlX2luaXQpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9maW5hbGl6ZSksIChnc3RfbXVsdGlfcXVldWVfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfbXVsdGlfcXVldWVfZ2V0X3Byb3BlcnR5KSwgKGdzdF9tdWx0aV9xdWV1ZV9yZXF1ZXN0X25ld19wYWQpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9yZWxlYXNlX3BhZCksIChnc3Rfc2luZ2xlX3F1ZXVlX3B1c2hfb25lKSwKLQkgIChnc3RfbXVsdGlfcXVldWVfaXRlbV9kZXN0cm95KSwgKGdzdF9tdWx0aV9xdWV1ZV9pdGVtX25ldyksCi0JICAoZ3N0X211bHRpX3F1ZXVlX2xvb3ApLCAoZ3N0X211bHRpX3F1ZXVlX2NoYWluKSwKLQkgIChnc3RfbXVsdGlfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfbXVsdGlfcXVldWVfZ2V0Y2FwcyksIChnc3RfbXVsdGlfcXVldWVfYnVmZmVyYWxsb2MpLAotCSAgKGdzdF9tdWx0aV9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCksIChnc3RfbXVsdGlfcXVldWVfYWNjZXB0Y2FwcyksCi0JICAoZ3N0X211bHRpX3F1ZXVlX3NyY19ldmVudCksIChnc3RfbXVsdGlfcXVldWVfc3JjX3F1ZXJ5KSwKLQkgICh3YWtlX3VwX25leHRfbm9uX2xpbmtlZCksIChjb21wdXRlX25leHRfbm9uX2xpbmtlZCksCi0JICAoc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IpLCAoc2luZ2xlX3F1ZXVlX3VuZGVycnVuX2NiKSwKLQkgIChzaW5nbGVfcXVldWVfY2hlY2tfZnVsbCksIChnc3Rfc2luZ2xlX3F1ZXVlX25ldyk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oOgotCSAgTmV3IG11bHRpcXVldWUgZWxlbWVudCwgdXNpbmcgR3N0RGF0YVF1ZXVlLiBVc2VkIGZvciBxdWV1aW5nIG11bHRpcGxlCi0JICBzdHJlYW1zLgotCSAgQ2xvc2VzICMzNDQ2MzkgYW5kICMzNDc3ODUKLQotMjAwNi0xMS0yMiAxMjoyOTo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6IGFkZCBtb3JlIG1pc3NpbmcgdHlwZSBkZXRhaWxzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgotCSAgYWRkIG1vcmUgbWlzc2luZyB0eXBlIGRldGFpbHMKLQkgICogdG9vbHMvZ3N0LXJ1bi5jOiAobWFpbik6Ci0JICByZW1vdmUgdW51c2VkIHZhcmlhYmxlCi0KLTIwMDYtMTEtMjEgMDg6MzA6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9saWJzLzogYWRkIHR5cGVzIG9mIGJhc2UgY2xhc3NlcyB0byBlbmFibGUgZ29iamVjdCBzcGVjaWZpYyBzdHVmZiBpbiB0aGUgZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzOgotCSAgYWRkIHR5cGVzIG9mIGJhc2UgY2xhc3NlcyB0byBlbmFibGUgZ29iamVjdCBzcGVjaWZpYyBzdHVmZiBpbiB0aGUgZG9jcwotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2VtYmVkZGVkLnR4dDoKLQkgIG1vcmUgaWRlYXMgYWJvdXQgaXNvbGF0aW5nIHBsYXRmb3JtIHNwZWNpZmljIHRoaW5ncwotCi0yMDA2LTExLTIwIDExOjExOjIwICswMDAwICBTZWJhc3RpYW4gRHJvZWdlIDxzbG9tb0B1YnVudHUuY29tPgotCi0JICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOiBGaXggY29tcGlsYXRpb24gYW5kIHJ1bm5pbmcgYWdhaW5zdCAwLjkuNC4gRml4ZXMgIzM3NzMzMi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcm9lZ2UgPHNsb21vIGF0IHVidW50dSBkb3QgY29tPgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgRml4IGNvbXBpbGF0aW9uIGFuZCBydW5uaW5nIGFnYWluc3QgMC45LjQuIEZpeGVzICMzNzczMzIuCi0KLTIwMDYtMTEtMjAgMTA6Mjc6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RzZWdtZW50LmM6IEZpeCBib3VuZGFyeSBjaGVja2luZyBpbiB0b19ydW5uaW5nX3RpbWUoKSBhbmQgdG9fc3RyZWFtX3RpbWUoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspLAotCSAgKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50X2Z1bGwpLCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLAotCSAgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSk6Ci0JICBGaXggYm91bmRhcnkgY2hlY2tpbmcgaW4gdG9fcnVubmluZ190aW1lKCkgYW5kIHRvX3N0cmVhbV90aW1lKCkuCi0JICBGaXhlcyAjMzc3MTgzLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgc3RyZWFtIGFuZCBydW5uaW5nIHRpbWUgY2FuIG5vdyBiZSBjYWxjdWxhdGVkIGZvciB0aGUgY29tcGxldGUKLQkgIGNsaXBwZWQgc2VnbWVudC4KLQotMjAwNi0xMS0xNSAxNzozODoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHBhZC5jOiBDYW4ndCBhY2Nlc3MgZXZlbnQgc3RydWN0dXJlIGFmdGVyIGdpdmluZyBhd2F5IG93bmVyc2hpcCBvZiB0aGUgZXZlbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9wdXNoX2V2ZW50KToKLQkgIENhbid0IGFjY2VzcyBldmVudCBzdHJ1Y3R1cmUgYWZ0ZXIgZ2l2aW5nIGF3YXkgb3duZXJzaGlwIG9mCi0JICB0aGUgZXZlbnQuCi0KLTIwMDYtMTEtMTUgMTM6MDA6MTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vZW5zb25pYy86IG1vcmUgdGhpbmtpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2VtYmVkZGVkLnR4dDoKLQkgICogZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL3JlY2VpcGllcy50eHQ6Ci0JICBtb3JlIHRoaW5raW5nCi0KLTIwMDYtMTEtMTMgMTg6MDM6MzUgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIGdzdC9nc3RwYWQuYzogRml4IGRvY3VtZW50YXRpb24gZm9yIGdzdF9wYWRfZGlzcGF0Y2hlci4gRml4ZXMgIzM3NDQ3NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1dyBhdCBza3luZXQgZG90IGJlPgotCSAgKiBnc3QvZ3N0cGFkLmM6Ci0JICBGaXggZG9jdW1lbnRhdGlvbiBmb3IgZ3N0X3BhZF9kaXNwYXRjaGVyLiBGaXhlcyAjMzc0NDc1LgotCi0yMDA2LTExLTEzIDE3OjU0OjU4ICswMDAwICBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbkBrYW9saW4ud2g5Lm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFN0b3JlIG5ldyBsZW5ndGggaW4gc2VnbWVudCBkdXJhdGlvbiBzbyB3ZSBkb24ndCBrZWVwIG9uIGNhbGxpbmcgdGhlIHBvdGVudGlhbGx5IGV4cGVuc2l6Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbiBhdCBrYW9saW4gZG90IHdoOSBkb3QgbmV0PgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY191cGRhdGVfbGVuZ3RoKToKLQkgIFN0b3JlIG5ldyBsZW5ndGggaW4gc2VnbWVudCBkdXJhdGlvbiBzbyB3ZSBkb24ndCBrZWVwIG9uIGNhbGxpbmcgdGhlCi0JICBwb3RlbnRpYWxseSBleHBlbnNpemUgZ2V0X3NpemUoKSBjYWxsLiBGaXhlcyAjMzcwODY1LgotCi0yMDA2LTExLTEwIDE4OjU2OjQ0ICswMDAwICBTZXJnZXkgU2NvYmljaCA8c2VyZ2VyeS5zY29iaWNoQGdtYWlsLmNvbT4KLQotCSAgd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6IEFkZCB0d28gbWlzc2luZyBzeW1ib2xzICgjMzY2NDkyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlcmdleSBTY29iaWNoICA8c2VyZ2VyeS5zY29iaWNoIGF0IGdtYWlsIGNvbT4KLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgdHdvIG1pc3Npbmcgc3ltYm9scyAoIzM2NjQ5MikuCi0KLTIwMDYtMTEtMTAgMTA6NTA6MTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogRml4IGZvcm1hdCBzdHJpbmcgdG8gdXNlIGFsbCBpdHMgYXJndW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiAoZ3N0X2FkYXB0ZXJfZmx1c2gpLAotCSAgKGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKToKLQkgIEZpeCBmb3JtYXQgc3RyaW5nIHRvIHVzZSBhbGwgaXRzIGFyZ3VtZW50cy4KLQkgIFJlbW92ZSB1c2VsZXNzID49IGNoZWNrIG9uIGEgZ3VpbnQKLQotMjAwNi0xMS0wOSAxNToyNTozOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvLmN2c2lnbm9yZTogSWdub3JlIGJ1aWxkIGZpbGUgYXMgY29tbWFuZGVkIGJ5IHRoZSBidWlsZC1ib3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyLy5jdnNpZ25vcmU6Ci0JICBJZ25vcmUgYnVpbGQgZmlsZSBhcyBjb21tYW5kZWQgYnkgdGhlIGJ1aWxkLWJvdAotCi0yMDA2LTExLTA5IDE0OjM4OjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvZXhhbXBsZXMvYWRhcHRlci86IEFkZCBuZXcgZmlsZXMgZnJvbSB0aGUgcHJldmlvdXMgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9hZGFwdGVyX3Rlc3QuYzogKHJ1bl90ZXN0X3Rha2UpLAotCSAgKHJ1bl90ZXN0X3Rha2VfYnVmZmVyKSwgKHJ1bl90ZXN0cyksIChtYWluKToKLQkgIEFkZCBuZXcgZmlsZXMgZnJvbSB0aGUgcHJldmlvdXMgY29tbWl0Ci0KLTIwMDYtMTEtMDkgMTQ6Mzc6MzggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBEbyBzb21lIG9wdGltaXNhdGlvbiB3b3JrIGluIEdzdEFkYXB0ZXIgdG8gYXZvaWQgY29waWVzIGluIG1vcmUgY2FzZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6IChnc3RfYWRhcHRlcl9jbGVhciksCi0JICAoZ3N0X2FkYXB0ZXJfcHVzaCksIChnc3RfYWRhcHRlcl9wZWVrX2ludG8pLCAoZ3N0X2FkYXB0ZXJfcGVlayksCi0JICAoZ3N0X2FkYXB0ZXJfZmx1c2gpLCAoZ3N0X2FkYXB0ZXJfdGFrZSksIChnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcik6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYzogKGNyZWF0ZV9hbmRfZmlsbF9hZGFwdGVyKSwKLQkgIChHU1RfU1RBUlRfVEVTVCksIChnc3RfYWRhcHRlcl9zdWl0ZSk6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSAgRG8gc29tZSBvcHRpbWlzYXRpb24gd29yayBpbiBHc3RBZGFwdGVyIHRvIGF2b2lkIGNvcGllcyBpbiBtb3JlIGNhc2VzLgotCSAgSXQgY291bGQgc3RpbGwgZG8gc2xpZ2h0bHkgYmV0dGVyIGJ5IG1lcmdpbmcgYnVmZmVycyB3aGVuCi0JICBnc3RfYnVmZmVyX2lzX3NwYW5fZmFzdCBpcyB0cnVlLCBidXQgaXMgYWxyZWFkeSBmYXN0ZXIuCi0JICBBbHNvLCBhdm9pZCB0cmF2ZXJzaW5nIGEgc2luZ2xlLWxpbmtlZCBsaXN0IHRvIGFwcGVuZCBlYWNoIGluY29taW5nCi0JICBidWZmZXIgaW5zaWRlIHRoZSBhZGFwdGVyLgotCSAgQWRkIHNpbXBsZSB0ZXN0IGFwcCB0aGF0IHRpbWVzIHRoZSBhZGFwdGVyIGJlaGF2aW91ciBpbiBkaWZmZXJlbnQKLQkgIHNpdHVhdGlvbnMsIGFuZCBleHRlbmQgdGhlIHVuaXQgdGVzdCB0byBjaGVjayB0aGF0IGJ5dGVzIGVudGVyIGFuZAotCSAgZXhpdCB0aGUgYWRhcHRlciBpbiB0aGVpciBvcmlnaW5hbCBvcmRlci4KLQotMjAwNi0xMS0wOCAxOToyNzoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vZHJhZnQtbWlzc2luZy1wbHVnaW5zLnR4dDogVXBkYXRlOiB1c2UgZWxlbWVudCBtZXNzYWdlIGluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IG1lc3NhZ2UgdHlwZSB0byB0aGUgY29yZTsgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vZHJhZnQtbWlzc2luZy1wbHVnaW5zLnR4dDoKLQkgIFVwZGF0ZTogdXNlIGVsZW1lbnQgbWVzc2FnZSBpbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyBtZXNzYWdlCi0JICB0eXBlIHRvIHRoZSBjb3JlOyBkb24ndCBwcm92aWRlIEdTdHJlYW1lciBBUEkgdG8gaW5pdGlhdGUgdGhlCi0JICBwbHVnaW4gZG93bmxvYWQsIGp1c3QgcHJvdmlkZSBBUEkgdG8gY29tcG9zZSB0aGUgc3RyaW5ncyBuZWVkZWQKLQkgIGFuZCBsZXQgYW4gZXh0ZXJuYWwgbGliZ2ltbWVzdHVmZiBoYW5kbGUgdGhlIHJlc3QuCi0KLTIwMDYtMTEtMDggMTE6NDE6MTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBQcmludCBhIHN0cmluZyBpbnN0ZWFkIG9mICd1bmtub3duIHR5cGUnIGZvciBHVmFsdWVBcnJheSBwcm9wZXJ0aWVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKLQkgIFByaW50IGEgc3RyaW5nIGluc3RlYWQgb2YgJ3Vua25vd24gdHlwZScgZm9yIEdWYWx1ZUFycmF5IHByb3BlcnRpZXMKLQotMjAwNi0xMS0wOCAxMDozNToyNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEZpeCBDaHJpc3RpYW4ncyBlbWFpbCBhZGRyZXNzIGluIENoYW5nZWxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggQ2hyaXN0aWFuJ3MgZW1haWwgYWRkcmVzcyBpbiBDaGFuZ2Vsb2cKLQotMjAwNi0xMS0wOCAwMjowNDo1MiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JICBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OiBNb3JlIHNtYWxsIGZpeGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL2RyYWZ0LW1pc3NpbmctcGx1Z2lucy50eHQ6Ci0JICBNb3JlIHNtYWxsIGZpeGVzLgotCi0yMDA2LTExLTA4IDAyOjAzOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC90eXBlZmluZC5jOiBNYWtlIHR5cGVmaW5kIGVsZW1lbnQgZXhhbXBsZSB3b3JrIGFnYWluICgjMzcxODk0KTsgYWRkIGEgbGljZW5zZSBoZWFkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvdHlwZWZpbmQuYzogKHR5cGVfZm91bmQpLCAobWFpbik6Ci0JICBNYWtlIHR5cGVmaW5kIGVsZW1lbnQgZXhhbXBsZSB3b3JrIGFnYWluICgjMzcxODk0KTsgYWRkIGEKLQkgIGxpY2Vuc2UgaGVhZGVyLgotCi0yMDA2LTExLTA4IDAxOjQwOjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OiBDb21taXQgaW5pdGlhbCBkcmFmdCBhYm91dCBob3cgdG8gZGVhbCB3aXRoIG1pc3NpbmcgcGx1Z2lucywgbmVlZHMgd29yayAoQVBJIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9kcmFmdC1taXNzaW5nLXBsdWdpbnMudHh0OgotCSAgQ29tbWl0IGluaXRpYWwgZHJhZnQgYWJvdXQgaG93IHRvIGRlYWwgd2l0aCBtaXNzaW5nIHBsdWdpbnMsCi0JICBuZWVkcyB3b3JrIChBUEkgdG9vKS4KLQotMjAwNi0xMS0wNyAwNzozNDo0MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6IGRvY3VtZW50cyB0aGUgbmV3IGNhcHMgZWxlbWVudHMgKHNlZSAjMzYzMTE4KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKLQkgIGRvY3VtZW50cyB0aGUgbmV3IGNhcHMgZWxlbWVudHMgKHNlZSAjMzYzMTE4KQotCi0yMDA2LTExLTA2IDE3OjUzOjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBVc2UgZ19zdHJlcnJvcigpIGluc3RlYWQgb2Ygc3RyZXJyb3IoKSAtIHdlIHdhbnQgVVRGLTguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9tbWFwX2J1ZmZlcl9maW5hbGl6ZSksCi0JICAoZ3N0X2ZpbGVfc3JjX21hcF9yZWdpb24pLCAoZ3N0X2ZpbGVfc3JjX3N0YXJ0KToKLQkgICogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzogKGdzdF9maWxlX2luZGV4X2xvYWQpLAotCSAgKGdzdF9maWxlX2luZGV4X2NvbW1pdCk6Ci0JICBVc2UgZ19zdHJlcnJvcigpIGluc3RlYWQgb2Ygc3RyZXJyb3IoKSAtIHdlIHdhbnQgVVRGLTguCi0KLTIwMDYtMTEtMDYgMTc6MjU6MDEgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IEFub3RoZXIgcHJpbnRmIGZpeCAoIzM3MTQ5MykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGNvbT4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19jcmVhdGUpOgotCSAgQW5vdGhlciBwcmludGYgZml4ICgjMzcxNDkzKS4KLQotMjAwNi0xMS0wNiAxNToyMjo0MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6IHJlbGljZW5jZSAob2theSB3aXRoIGF1dGhvcj1jb21wYW55KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkgIHJlbGljZW5jZSAob2theSB3aXRoIGF1dGhvcj1jb21wYW55KQotCi0yMDA2LTExLTA2IDE1OjE4OjU3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RwYWQuYzogRW5oYW5jZSBkZWJ1ZyBhbmQgaW1wcm92ZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9ldmVudF9kZWZhdWx0X2Rpc3BhdGNoKSwKLQkgIChnc3RfcGFkX3B1c2hfZXZlbnQpOgotCSAgRW5oYW5jZSBkZWJ1ZyBhbmQgaW1wcm92ZSBkb2NzCi0JICAqIGdzdC9nc3R1cmkuYzoKLQkgIEZpeCBkb2NzCi0KLTIwMDYtMTEtMDYgMTU6MTc6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vZW5zb25pYy86IG1vcmUgaWRlYXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2Rpc3RyaWJ1dGVkLnR4dDoKLQkgICogZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OgotCSAgbW9yZSBpZGVhcwotCi0yMDA2LTExLTA2IDE1OjE0OjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IGFkZCBuZXcgQVBJIGFuZCBmaXggdGhlIGJ1aWxkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGFkZCBuZXcgQVBJIGFuZCBmaXggdGhlIGJ1aWxkCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcmVjYWxjX3N0YXRlKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCksCi0JICAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpLCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpOgotCSAgdXNlIG5ldyBBUEkgYW5kIGltcHJvdmUgbG9nZ2luZwotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFQSTogYWRkIGZ1bmN0aW9uIHRvIGdldCBTdGF0ZUNoYW5nZXJldHVybiBuYW1lcyB0byBpbXByb3ZlIGxvZ3MKLQotMjAwNi0xMS0wNiAxMjowMToyNyArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogZG9jcy9yYW5kb20vemFoZWVybS9kdmItaW50ZXJmYWNlLnR4dDoKLQkgIE5vdGVzIHRha2VuIHdoaWxlIGRpc2N1c3NpbmcgZHZiIGNoYW5uZWwgc2VsZWN0aW9uIHdpdGggV2ltCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE5vdGVzIHRha2VuIHdoaWxlIGRpc2N1c3NpbmcgZHZiIGNoYW5uZWwgc2VsZWN0aW9uIHdpdGggV2ltCi0KLTIwMDYtMTEtMDQgMTI6NTQ6MDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSAgZG9uJ3QgcHV0IHN0cmVycm9yIGluIHRyYW5zbGF0YWJsZSBtZXNzYWdlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvbid0IHB1dCBzdHJlcnJvciBpbiB0cmFuc2xhdGFibGUgbWVzc2FnZQotCi0yMDA2LTExLTAzIDE1OjA0OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IEdldCB0aGUgdHlwZSBhbmQgcHJpbnRmIGNvbnZlcnNpb24gc3BlY2lmaWVycyByaWdodC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NyZWF0ZSk6Ci0JICBHZXQgdGhlIHR5cGUgYW5kIHByaW50ZiBjb252ZXJzaW9uIHNwZWNpZmllcnMgcmlnaHQuCi0KLTIwMDYtMTEtMDMgMTM6NTc6MjggKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIGdzdC9nc3RwYWQuYzogU29tZSBzbWFsbCBjbGVhbnVwcy4gSW1wcm92ZSBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgYXQgc2t5bmV0IGRvdCBiZT4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pbml0KSwgKHByZV9hY3RpdmF0ZSksCi0JICAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyksIChnc3RfcGFkX2FjY2VwdGNhcHNfZGVmYXVsdCksCi0JICAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksIChoYW5kbGVfcGFkX2Jsb2NrKSwgKGdzdF9wYWRfcHVzaF9ldmVudCk6Ci0JICBTb21lIHNtYWxsIGNsZWFudXBzLiBJbXByb3ZlIGRlYnVnZ2luZy4KLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgU2lnbmFsIGFsbCB3YWl0aW5nIHRocmVhZHMgd2l0aCBhIGJyb2FkY2FzdCBpbnN0ZWFkIG9mIGp1c3Qgb25lLgotCSAgRml4ZXMgIzM2OTk0Mi4KLQotMjAwNi0xMS0wMyAwOTo0MDowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiBBZGQgc29tZSBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY191cGRhdGVfZmQpLAotCSAgKGdzdF9mZF9zcmNfY3JlYXRlKToKLQkgIEFkZCBzb21lIGRlYnVnZ2luZy4KLQkgIE9ubHkgdXBkYXRlIGZkIHdoZW4gaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkLgotCi0yMDA2LTExLTAyIDIwOjUyOjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogUHJpbnRmIGZpeGVzIGZvciBQUEMvT1NYLCB0YWtlIHR3byAoIzM2OTM2NikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY3JlYXRlX21tYXApOgotCSAgUHJpbnRmIGZpeGVzIGZvciBQUEMvT1NYLCB0YWtlIHR3byAoIzM2OTM2NikuCi0KLTIwMDYtMTEtMDIgMTM6MDA6MzggKzAwMDAgIEphbiBEYXZpZCBNb2wgPGouai5kLm1vbEB0dWRlbGZ0Lm5sPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzLzogUHJpbnRmIGZpeGVzIGZvciBnc2l6ZSBwYXJhbWV0ZXJzIG9uIFBQQy9PU1ggKCMzNjkzNjYpLiBBbHNvLCBkb24ndCBjYXN0IHRvIGxvbmcgbG9uZyBmb3IgcG9ydGFiaWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IEphbiBEYXZpZCBNb2wgIDxqLmouZC5tb2wgYXQgdHVkZWxmdCBubD4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2ZpbGVfc3JjX21hcF9zbWFsbF9yZWdpb24pLCAoZ3N0X2ZpbGVfc3JjX2NyZWF0ZV9tbWFwKToKLQkgIFByaW50ZiBmaXhlcyBmb3IgZ3NpemUgcGFyYW1ldGVycyBvbiBQUEMvT1NYICgjMzY5MzY2KS4gQWxzbywKLQkgIGRvbid0IGNhc3QgdG8gbG9uZyBsb25nIGZvciBwb3J0YWJpbGl0eSByZWFzb25zLCBidXQgdXNlCi0JICBHTGliJ3MgdHlwZXMgaW5zdGVhZC4KLQotMjAwNi0xMC0zMCAxODo0MzoxMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IEdldCB0aGUgYXJndW1lbnRzIHRvIGxzZWVrKCkgdGhlIHJpZ2h0IHdheSBhcm91bmQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY191cGRhdGVfZmQpOgotCSAgR2V0IHRoZSBhcmd1bWVudHMgdG8gbHNlZWsoKSB0aGUgcmlnaHQgd2F5IGFyb3VuZC4KLQkgIEZpeGVzIDM2NzY3Ny4KLQotMjAwNi0xMC0zMCAwNzo1MToxMyArMDAwMCAgZ29yc2hrb3YgPGdvcnNoa292QG9naG1hLm9uLmNhPgotCi0JICBnc3QvZ3N0aW5mby5oOiBfZGVjbHNwZWMgc2hvdWxkIGJlIF9fZGVjbHNwZWMgKHR3byB1bmRlcnNjb3Jlcywgbm90IG9uZSkuIEZpeGVzIDM2NjU3Mi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IGdvcnNoa292IDxnb3JzaGtvdiBhdCBvZ2htYSBkb3Qgb24gZG90IGNhPgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgX2RlY2xzcGVjIHNob3VsZCBiZSBfX2RlY2xzcGVjICh0d28gdW5kZXJzY29yZXMsIG5vdCBvbmUpLiBGaXhlcyAzNjY1NzIuCi0KLTIwMDYtMTAtMjggMTU6NDI6MjkgKzAwMDAgIEtqYXJ0YW4gTWFyYWFzIDxrbWFyYWFzQGdub21lLm9yZz4KLQotCSAgVHlwbyBmaXhlcyAoIzM2NjIxMikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBLamFydGFuIE1hcmFhcyAgPGttYXJhYXMgYXQgZ25vbWUgb3JnPgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LU1ULXJlZmNvdW50aW5nLnR4dDoKLQkgICogZG9jcy9yYW5kb20vd3RheS9jYXBzbmVnbzItZG9jczoKLQkgICogZ3N0L2dzdGNsb2NrLmM6Ci0JICAqIGdzdC9nc3R4bWwuYzoKLQkgIFR5cG8gZml4ZXMgKCMzNjYyMTIpLgotCi0yMDA2LTEwLTI4IDE1OjEwOjI2ICswMDAwICBTZXJnZXkgU2NvYmljaCA8c2VyZ2V5LnNjb2JpY2hAZ21haWwuY29tPgotCi0JICBBZGQgbmVlZGVkIGVudHJpZXMgaW4gLmRlZiBmaWxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlcmdleSBTY29iaWNoIDxzZXJnZXkgZG90IHNjb2JpY2ggYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L2dzdC5jOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgKiB3aW4zMi92czgvbGliZ3N0YmFzZS52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3Rjb250cm9sbGVyLnZjcHJvajoKLQkgIEFkZCBuZWVkZWQgZW50cmllcyBpbiAuZGVmIGZpbGVzLgotCSAgVXNlIEhBVkVfVU5JU1REX0guCi0JICBSZWFycmFuZ2UgZGVmIGZpbGVzIGluIHZzOCBzb2x1dGlvbnMuIEZpeGVzICMzNjYyODYuCi0KLTIwMDYtMTAtMjggMTU6MDM6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDogQWRkIEdTVF9TRUdNRU5UX0ZPUk1BVCBhbmQgR1NUX1VTSU5HX1BSSU5URl9FWFRFTlNJT04gdG8gdGhlIGhhbmQtbWFkZSB3aW4zMiBnc3Rjb25maWcuaC4gRi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDoKLQkgIEFkZCBHU1RfU0VHTUVOVF9GT1JNQVQgYW5kIEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OIHRvIHRoZQotCSAgaGFuZC1tYWRlIHdpbjMyIGdzdGNvbmZpZy5oLiBGaXhlcyAjMzY2MzIxLgotCi0yMDA2LTEwLTI3IDE2OjMxOjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Z2hvc3RwYWQuYzogTWFrZSBhY2NlcHRjYXBzIHJldHVybiBUUlVFIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhIHRhcmdldCwganVzdCBsaWtlIHNldGNhcHMgZG9lcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZG9fYWNjZXB0Y2FwcyksCi0JICAoZ3N0X2dob3N0X3BhZF9uZXdfZnVsbCk6Ci0JICBNYWtlIGFjY2VwdGNhcHMgcmV0dXJuIFRSVUUgd2hlbiB3ZSBkb24ndCBoYXZlIGEgdGFyZ2V0LCBqdXN0IGxpa2UKLQkgIHNldGNhcHMgZG9lcy4KLQotMjAwNi0xMC0yNyAxMDoxMDoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFJldmVydCBwcmV2aW91cyBjb21taXQsIDAgc2l6ZWQgYnVmZmVycyBhcmUgYWxsb3dlZC4gUmVvcGVucyAjMzYzMDk1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKToKLQkgIFJldmVydCBwcmV2aW91cyBjb21taXQsIDAgc2l6ZWQgYnVmZmVycyBhcmUgYWxsb3dlZC4gUmVvcGVucyAjMzYzMDk1LgotCi0yMDA2LTEwLTI2IDA4OjQ5OjUyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0c3RydWN0dXJlLmM6IElmIHNvbWVvbmUgdHJpZXMgdG8gc2V0IGEgbm9uLVVURjggc3RyaW5nIGZpZWxkIG9uIGEgc3RydWN0dXJlLCBkb24ndCBqdXN0IHByaW50IGEgd2FybmluZywgYnV0IGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSk6Ci0JICBJZiBzb21lb25lIHRyaWVzIHRvIHNldCBhIG5vbi1VVEY4IHN0cmluZyBmaWVsZCBvbiBhIHN0cnVjdHVyZSwKLQkgIGRvbid0IGp1c3QgcHJpbnQgYSB3YXJuaW5nLCBidXQgYWxzbyBpZ25vcmUgdGhlIHJlcXVlc3QgYW5kIGRvCi0JICBub3QgY2hhbmdlL2FkZCB0aGF0IGZpZWxkIHRvIHRoZSBzdHJ1Y3R1cmUuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF90YWdfc3VpdGUpOgotCSAgVGVzdCBmb3IgdGhlIGFib3ZlLgotCi0yMDA2LTEwLTI2IDAwOjAwOjM0ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdGluZm8uYzogZ19oYXNoX3RhYmxlX2luc2VydCgpIG5lZWRzIGEgY2FzdCB0byBhIG5vbi1jb25zdCBwb2ludGVyIGR1aC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5jOgotCSAgZ19oYXNoX3RhYmxlX2luc2VydCgpIG5lZWRzIGEgY2FzdCB0byBhIG5vbi1jb25zdCBwb2ludGVyIGR1aC4KLQotMjAwNi0xMC0yNSAyMzo0Nzo0MCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9nc3RpbmZvLio6IENoYW5nZSBuYW1lIHBhcmFtZXRlciBvZiBfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIgdG8gY29uc3QgdG8gcmVmbGVjdCB0aGUgY29uc3RuZXNzIG9mIGl0cyB1c2UgaW4gdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6Ci0JICAqIGdzdC9nc3RpbmZvLmg6Ci0JICBDaGFuZ2UgbmFtZSBwYXJhbWV0ZXIgb2YgX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyIHRvIGNvbnN0Ci0JICB0byByZWZsZWN0IHRoZSBjb25zdG5lc3Mgb2YgaXRzIHVzZSBpbiB0aGUgZnVuY3Rpb24gYXMgd2VsbAotCSAgYXMgdG8gcXVpZXQgYSBnY2Mgd2FybmluZy4KLQotMjAwNi0xMC0yNSAxMzo0MTo0NCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IERvbid0IHB1c2ggdGhlIGJ1ZmZlciBpZiBpdCdzIGVtcHR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKToKLQkgIERvbid0IHB1c2ggdGhlIGJ1ZmZlciBpZiBpdCdzIGVtcHR5LgotCSAgQ2xvc2VzICMzNjMwOTUKLQotMjAwNi0xMC0yNCAwODoyMjoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGV2ZW50Lmg6IEFkZCBzbWFsbCBjb21tZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgQWRkIHNtYWxsIGNvbW1lbnQuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50ZnVuYyk6Ci0JICBEZWJ1ZyBzZWdtZW50IHZhbHVlcyAqYWZ0ZXIqIHVwZGF0aW5nIHRoZW0gYXMgdGhpcyBpcyBtb3JlCi0JICBpbnRlcmVzdGluZy4KLQotMjAwNi0xMC0yMyAxNToyMToxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OiBVcGRhdGUgc29tZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkgIFVwZGF0ZSBzb21lIGRvY3MuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2lzX2Jsb2NraW5nKSwgKGhhbmRsZV9wYWRfYmxvY2spLAotCSAgKGdzdF9wYWRfcHVzaF9ldmVudCk6Ci0JICBSZXZlcnQgQkxPQ0tJTkcgcGF0Y2gsIGl0IHRyaWVzIHRvIGJlIHNtYXJ0IHdpdGhvdXQgcmVhbGx5IGhhdmluZyBhCi0JICBjbGVhciBpZGVhIHdoYXQgb3IgaG93LiBTbywgbm93IHdlIGRpc2NhcmQgYWxsIEZMVVNISU5HIGV2ZW50cyBhZ2FpbiBvbgotCSAgYSBibG9ja2luZyBwYWQuIFNob3VsZCBmaXggZ25vbmxpbiBhZ2Fpbi4KLQotMjAwNi0xMC0yMyAxNDo1MTozMCArMDAwMCAgU2VyZ2V5IFNjb2JpY2ggPHNlcmdleS5zY29iaWNoQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IE1ha2Ugc3VyZSBzaXplIGlzIGFsd2F5cyBpbml0aWFsaXplZC4gRml4ZXMgIzM2NDM4OC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlcmdleSBTY29iaWNoIDxzZXJnZXkgZG90IHNjb2JpY2ggYXQgZ21haWwgZG90IGNvbT4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nKSwKLQkgIChnc3RfYmFzZV9zcmNfc3RhcnQpLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpOgotCSAgTWFrZSBzdXJlIHNpemUgaXMgYWx3YXlzIGluaXRpYWxpemVkLiBGaXhlcyAjMzY0Mzg4LgotCi0yMDA2LTEwLTIwIDExOjM2OjU2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcmFuZG9tL2Vuc29uaWMvZGlzdHJpYnV0ZWQudHh0OiBhZGQgc29tZSBpZGVhcyBhYm91dCBkb2luZyBkaXN0cmlidXRlZCBwcm9jZXNzaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vZW5zb25pYy9kaXN0cmlidXRlZC50eHQ6Ci0JICBhZGQgc29tZSBpZGVhcyBhYm91dCBkb2luZyBkaXN0cmlidXRlZCBwcm9jZXNzaW5nCi0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvcHJvZmlsaW5nLnR4dDoKLQkgIGdldF9ydXNhZ2UgbG9vayBwcm9taXNpbmcKLQotMjAwNi0xMC0xOCAxOTo0Mzo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6IEFkZCBhIGNhc3QgaW4gZXhhbXBsZSB0byBmaXggY29tcGlsZSB3YXJuaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgotCSAgQWRkIGEgY2FzdCBpbiBleGFtcGxlIHRvIGZpeCBjb21waWxlIHdhcm5pbmcKLQotMjAwNi0xMC0xOCAxNToyODoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuYzogUmVsYXggYXJnIGNoZWNraW5nIGFnYWluLCAtMSBpcyBhbGxvd2VkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfbGFzdF9zdG9wKSwKLQkgIChnc3Rfc2VnbWVudF9zZXRfc2VlayksIChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudF9mdWxsKToKLQkgIFJlbGF4IGFyZyBjaGVja2luZyBhZ2FpbiwgLTEgaXMgYWxsb3dlZC4KLQotMjAwNi0xMC0xOCAxMzoyNzozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuYzogX3NldF9sYXN0X3N0b3AoKSBtdXN0IGJlIHdpdGggYSB2YWx1ZSAhPSAtMQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfbGFzdF9zdG9wKSwKLQkgIChnc3Rfc2VnbWVudF9zZXRfc2VlayksIChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudF9mdWxsKToKLQkgIF9zZXRfbGFzdF9zdG9wKCkgbXVzdCBiZSB3aXRoIGEgdmFsdWUgIT0gLTEKLQkgIEEgX1RZUEVfU0VUIHRvIC0xIG1lYW5zIHNlZWsgdG8gMC4KLQkgIENhbGMgbGFzdF9zdG9wIGNvcnJlY3RseSBmb3IgbmVnYXRpdmUgcmF0ZXMuCi0JICBNYWtlIHN1cmUgd2Ugd29yayB3aXRoIHBvc2l0aXZlIGR1cmF0aW9ucyB3aGVuIHVwZGF0aW5nIGEgc2VnbWVudC4KLQotMjAwNi0xMC0xOCAxMzoyMTo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgU21hbGwgZG9jcyBmaXhlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWxpdmUtc291cmNlLnR4dDoKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBTbWFsbCBkb2NzIGZpeGVzLgotCi0yMDA2LTEwLTE4IDEwOjA4OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YnVmZmVyLmg6IEFkZCBhbiBleHBsaWNpdCBjYXN0IHRvIEdzdEJ1ZmZlcioqIHRvIGtlZXAgb2xkIGNvZGUgdGhhdCBhZGRlZCBhbiBleHBsaWNpdCBjYXN0IHRvIEdzdE1pbmlPYmplY3QqKiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBBZGQgYW4gZXhwbGljaXQgY2FzdCB0byBHc3RCdWZmZXIqKiB0byBrZWVwIG9sZCBjb2RlIHRoYXQgYWRkZWQgYW4KLQkgIGV4cGxpY2l0IGNhc3QgdG8gR3N0TWluaU9iamVjdCoqIGZvciBnc3RfbWluaV9vYmplY3RfcmVwbGFjZSgpCi0JICBjb21waWxpbmcgd2l0aG91dCB3YXJuaW5nLgotCi0yMDA2LTEwLTE4IDA4OjU0OjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jOiBjaGVjayBmb3IgdmFsaWRpdHkgb2YgZGF0ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9zZXRfZGF0ZSksIChnc3RfZGF0ZV9jb3B5KToKLQkgIGNoZWNrIGZvciB2YWxpZGl0eSBvZiBkYXRlcwotCi0yMDA2LTEwLTE3IDEyOjA5OjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBGb3Jnb3QgdGhpcyBvbmUsIG1ha2VzIGd0ay1kb2Mgc2h1dCB1cC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgRm9yZ290IHRoaXMgb25lLCBtYWtlcyBndGstZG9jIHNodXQgdXAuCi0KLTIwMDYtMTAtMTcgMTE6NTc6MzIgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvZ3N0b2JqZWN0Lmg6IERvbid0IGRlZmluZSB4bWxOb2RlUHRyIHRvIGdwb2ludGVyIGlmIHRoZSBjb3JlIHdhcyBidWlsdCB3aXRoCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGNvbT4KLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgRG9uJ3QgZGVmaW5lIHhtbE5vZGVQdHIgdG8gZ3BvaW50ZXIgaWYgdGhlIGNvcmUgd2FzIGJ1aWx0IHdpdGgKLQkgIC0tZGlzYWJsZS1sb2Fkc2F2ZSBhbmQgLS1kaXNhYmxlLXJlZ2lzdHJ5LCB0aGlzIHdpbGwgYnJlYWsKLQkgIGFwcGxpY2F0aW9ucyB0aGF0IHdhbnQgdG8gdXNlIGxpYnhtbDIgYnV0IGFyZSBidWlsZGxpbmcgYWdhaW5zdCBhCi0JICBjb3JlIHRoYXQgZG9lc24ndCB1c2UgbGlieG1sMi4gVXNlIGFuIGludGVybWVkaWFyeSB0eXBlIEdzdFhtbE5vZGVQdHIKLQkgIGluc3RlYWQgc28gd2UgZG9uJ3QgaGF2ZSB0byBtZXNzIHdpdGggdGhlIGxpYnhtbDIgbmFtZXNwYWNlCi0JICAoIzM2MTY3NSkuCi0KLTIwMDYtMTAtMTcgMTA6MzA6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RidWZmZXIuaDogRml4IGdzdF9idWZmZXJfcmVwbGFjZSgpIG1hY3JvIHRvIGF2b2lkIGdzdF9taW5pX29iamVjdF9yZXBsYWNlKCktcmVsYXRlZCB0eXBlLXB1bm5lZCBwb2ludGVyIHdhcm5pbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgIEZpeCBnc3RfYnVmZmVyX3JlcGxhY2UoKSBtYWNybyB0byBhdm9pZCBnc3RfbWluaV9vYmplY3RfcmVwbGFjZSgpLXJlbGF0ZWQKLQkgIHR5cGUtcHVubmVkIHBvaW50ZXIgd2FybmluZ3MuCi0KLTIwMDYtMTAtMTYgMjA6MDI6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RlbGVtZW50Lmg6IEFkZCBjYXN0cyB0byB0aGUgY29ycmVjdCByZXR1cm4gdHlwZSB0byBzdGF0ZSA8PT4gc3RhdGUgdHJhbnNpdGlvbiBtYWNyb3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIEFkZCBjYXN0cyB0byB0aGUgY29ycmVjdCByZXR1cm4gdHlwZSB0byBzdGF0ZSA8PT4gc3RhdGUgdHJhbnNpdGlvbgotCSAgbWFjcm9zLgotCi0yMDA2LTEwLTE2IDEzOjUzOjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0OiBkZXNjcmliZSBob3d0byBoYW5kbGUgbGF0ZW5jeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0OgotCSAgZGVzY3JpYmUgaG93dG8gaGFuZGxlIGxhdGVuY3kKLQkgICogZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OgotCSAgbW9yZSBpZGVhcwotCSAgKiB0b29scy9nc3QtcGxvdC10aW1lbGluZS5weToKLQkgIGZpeCBsb2cgcGFyc2luZyBmb3Igc29sYXJpcywgcmVtb3ZlIHVudXNlZCBmdW5jdGlvbgotCi0yMDA2LTEwLTE2IDExOjQ2OjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBVcGRhdGUgc29tZSBkb2NzIHJlZ2FyZGluZyByZXZlcnNlIHBsYXliYWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgVXBkYXRlIHNvbWUgZG9jcyByZWdhcmRpbmcgcmV2ZXJzZSBwbGF5YmFjay4KLQotMjAwNi0xMC0xNSAxMjo0NzoxMyArMDAwMCAgTWFyY3VzIEdyYW5hZG8gPG1yYy5ncmFuQGdtYWlsLmNvbT4KLQotCSAgd2luMzIvdnM4L2dyYW1tYXIudmNwcm9qOiBFcnJvciBvdXQgd2l0aCBhIHdhcm5pbmcgaWYgZ2xpYi1nZW5tYXJzaGFsLmV4ZSBpcyBub3QgaW4gcGF0aCwgaW5zdGVhZCBvZiBjcmVhdGluZyBib2d1cyBnLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJjdXMgR3JhbmFkbyAgPG1yYyBkb3QgZ3JhbiBhdCBnbWFpbCBjb20+Ci0JICAqIHdpbjMyL3ZzOC9ncmFtbWFyLnZjcHJvajoKLQkgIEVycm9yIG91dCB3aXRoIGEgd2FybmluZyBpZiBnbGliLWdlbm1hcnNoYWwuZXhlIGlzIG5vdCBpbiBwYXRoLAotCSAgaW5zdGVhZCBvZiBjcmVhdGluZyBib2d1cyBnc3RtYXJzaGFsLltjaF0gZmlsZXMuIEZpeGVzICMzNjE3MjAuCi0KLTIwMDYtMTAtMTMgMTY6MDk6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RzZWdtZW50LmM6IFdoZW4gc2Vla2luZyB0byBzdG9wIC0xLCBzZXQgbGFzdF9zdG9wIChjdXJyZW50IHBvc2l0aW9uKSB0byB0aGUgZHVyYXRpb24gb2YgdGhlIHNlZ21lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X3NldF9zZWVrKToKLQkgIFdoZW4gc2Vla2luZyB0byBzdG9wIC0xLCBzZXQgbGFzdF9zdG9wIChjdXJyZW50IHBvc2l0aW9uKSB0byB0aGUKLQkgIGR1cmF0aW9uIG9mIHRoZSBzZWdtZW50LgotCi0yMDA2LTEwLTEzIDEzOjI3OjQ2ICswMDAwICBZdmVzIExlZmVidnJlIDxpdmFub2hlQGFiYWNvbS5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50Lmg6IENsYXJpZnkgX05PX1BSRVJPTEwgYSBiaXQgbW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgQ2xhcmlmeSBfTk9fUFJFUk9MTCBhIGJpdCBtb3JlLgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIEZpeCBkb2NzLgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2xpbmtfY2hlY2tfaGllcmFyY2h5KSwKLQkgIChnc3RfcGFkX2dldF9jYXBzX3VubG9ja2VkKSwgKGdzdF9wYWRfc2F2ZV90aHlzZWxmKSwKLQkgIChoYW5kbGVfcGFkX2Jsb2NrKSwgKGdzdF9wYWRfcHVzaF9ldmVudCksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgotCSAgUGF0Y2ggYnk6IFl2ZXMgTGVmZWJ2cmUgPGl2YW5vaGUgYXQgYWJhY29tIGRvdCBjb20+IEZpeCBwb3NzaWJsZSBkZWFkbG9jawotCSAgZHVlIHRvIHdyb25nIGxvY2tpbmcgb3JkZXIuIEZpeGVzICMzNjE3NjkuCi0JICBSZW1vdmUgc29tZSByZWR1bmRhbnQvbWlzcGxhY2VkIGNoZWNrcyBpbiBwYWRfYmxvY2suCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIEZvciBuZWdhdGl2ZSByYXRlcywgY291bnQgYmFja3dhcmRzIGZyb20gdGhlIGR1cmF0aW9uLgotCi0yMDA2LTEwLTEzIDA5OjM3OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0ZXJyb3IuYzogRml4IGVycm9yIG1lc3NhZ2UgZm9yIEdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTIChmZWVsIGZyZWUgdG8gY29tZSB1cCB3aXRoIHNvbWV0aGluZyBiZXR0ZXIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlcnJvci5jOiAoX2dzdF9saWJyYXJ5X2Vycm9yc19pbml0KToKLQkgIEZpeCBlcnJvciBtZXNzYWdlIGZvciBHU1RfTElCUkFSWV9FUlJPUl9TRVRUSU5HUyAoZmVlbCBmcmVlIHRvIGNvbWUKLQkgIHVwIHdpdGggc29tZXRoaW5nIGJldHRlcikuCi0KLTIwMDYtMTAtMTIgMjI6MzU6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHdpbjMyLzogRG9uJ3QgcmVmZXJlbmNlIGdsaWItY29tcGF0LmMgd2hpY2ggaXMgY3VycmVudGx5IG5vdCB1c2VkIGFuZCBub3QgZGlzdGVkOyBhZGQgZ3N0cXVhcmsuYyB3aGljaCB3YXMgcmVjZW50bHkgYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgotCSAgKiB3aW4zMi92czcvbGliZ3N0cmVhbWVyLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHJlYW1lci52Y3Byb2o6Ci0JICBEb24ndCByZWZlcmVuY2UgZ2xpYi1jb21wYXQuYyB3aGljaCBpcyBjdXJyZW50bHkgbm90IHVzZWQgYW5kIG5vdAotCSAgZGlzdGVkOyBhZGQgZ3N0cXVhcmsuYyB3aGljaCB3YXMgcmVjZW50bHkgYWRkZWQuIEZpeGVzICMzNjE3MzAuCi0KLTIwMDYtMTAtMTIgMTY6MDk6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHdpbjMyL2NvbW1vbi86IEFkZCBnc3RfY2Fwc19tZXJnZSgpIGFuZCBhIGJ1bmNoIG9mIG90aGVyIHJlY2VudGx5LWFkZGVkIGZ1bmN0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgZ3N0X2NhcHNfbWVyZ2UoKSBhbmQgYSBidW5jaCBvZiBvdGhlciByZWNlbnRseS1hZGRlZCBmdW5jdGlvbnMuCi0JICBGaXhlcyAjMzYxNzMyLgotCi0yMDA2LTEwLTExIDE2OjMwOjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL3BsdWdpbnMvOiBVcGRhdGUgZWxlbWVudCBhcmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JICBVcGRhdGUgZWxlbWVudCBhcmdzLgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIFNtYWxsIGNvbW1lbnQgdXBkYXRlLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9jbGFzc19pbml0KSwgKGdzdF90ZWVfaW5pdCksCi0JICAoZ3N0X3RlZV9yZXF1ZXN0X25ld19wYWQpLCAoZ3N0X3RlZV9yZWxlYXNlX3BhZCksCi0JICAoZ3N0X3RlZV9idWZmZXJfYWxsb2MpLCAoZ3N0X3RlZV9zaW5rX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF90ZWVfc2lua19hY3RpdmF0ZV9wdWxsKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaDoKLQkgIFNvbWUgdGVlIGxvdmluZzoKLQkgIEFkZCBkZWZhdWx0IHByb3BlcnR5IGRlZmluZXMuCi0JICBJbXBsZW1lbnQgcmVsZWFzZSBwYWQgZnVuY3Rpb24uCi0JICBHaXZlIHByb3BlcnRpZXMgYmV0dGVyIGJsdWJzIGV0Yy4KLQkgIEFjdGl2YXRlIHBhZHMgYmVmb3JlIGFkZGluZyB0aGVtIHRvIGEgcnVubmluZyB0ZWUuCi0JICBEbyBzaW1wbGUgYnVmZmVyX2FsbG9jIG9uIHRoZSBmaXJzdCByZXF1ZXN0ZWQgcGFkLgotCSAgUG9zdCBlcnJvciB3aGVuIGFjdGl2YXRpb24gZmFpbHMuCi0KLTIwMDYtMTAtMTEgMTI6MTY6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIHdyaXRlKCkgdG8gbWFrZSBjb21waWxlciBoYXBweS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9mb3JraW5nKToKLQkgIENoZWNrIHJldHVybiB2YWx1ZSBvZiB3cml0ZSgpIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkuCi0KLTIwMDYtMTAtMTEgMTA6MTA6MzcgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBSZWNoZWNrIHF1ZXVlIGZpbGxlZG5lc3MgYWZ0ZXIgc2lnbmFsbGluZyB0aGUgb3ZlcnJ1biB3aGVuIHdlJ3JlIGFib3V0IHRvIGxlYWsgZG93bnN0cmVhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTam9lcmQgU2ltb25zIDxzam9lcmQgYXQgbHVvbiBkb3QgbmV0PgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2hhaW4pOgotCSAgUmVjaGVjayBxdWV1ZSBmaWxsZWRuZXNzIGFmdGVyIHNpZ25hbGxpbmcgdGhlIG92ZXJydW4gd2hlbiB3ZSdyZSBhYm91dAotCSAgdG8gbGVhayBkb3duc3RyZWFtIGJlY2F1c2Ugd2UgcmVsZWFzZWQgdGhlIGxvY2sgd2hlbiBlbWl0dGluZyB0aGUgc2lnbmFsCi0JICBhbmQgdGhlIHF1ZXVlIGNvdWxkIGJlIGVtcHR5IGFnYWluLiBGaXhlcyAjMzUyMzQ1LgotCi0yMDA2LTEwLTExIDA5OjEzOjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogRml4IHJlZmNvdW50aW5nIGhlcmUgdG9vLCBqdXN0IGxpa2Ugd2UgZGlkIGZvciBfbmV3X3ZhbGlzdCgpIGEgZmV3IGRheXMgYWdvICgjMzUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX25ld19saXN0KToKLQkgIEZpeCByZWZjb3VudGluZyBoZXJlIHRvbywganVzdCBsaWtlIHdlIGRpZCBmb3IgX25ld192YWxpc3QoKSBhIGZldwotCSAgZGF5cyBhZ28gKCMzNTcxODApICh0aGFua3MgdG8gUmVuw6kgU3RhZGxlcikuIEFsc28gcmVtb3ZlIGFsbCB0aG9zZQotCSAgJ1NpbmNlOiAwLjknIGZyb20gdGhlIGd0ay1kb2MgYmxvYnMuCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoY29udHJvbGxlcl9yZWZjb3VudF9uZXdfbGlzdCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgotCSAgVW5pdCB0ZXN0IGZvciB0aGUgYWJvdmUuCi0KLTIwMDYtMTAtMTAgMTQ6NDc6NDAgKzAwMDAgIFNlYmFzdGllbiBDb3RlIDxzZWJhczY0MkB5YWhvby5jYT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBVcGRhdGUgc29tZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2ViYXN0aWVuIENvdGUgPHNlYmFzNjQyIGF0IHlhaG9vIGRvdCBjYT4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfY2Fwc191bmxvY2tlZCksCi0JICAoZ3N0X3BhZF9zYXZlX3RoeXNlbGYpOgotCSAgVXBkYXRlIHNvbWUgZG9jcy4KLQkgIFdyaXRlIHBhZCBkaXJlY3Rpb24gaW4gWE1MIG91dHB1dC4gRml4ZXMgIzM0NTQ5Ni4KLQotMjAwNi0xMC0xMCAxNDoxMzowOCArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IFRha2UgcmVmIHRvIGNvbnRyb2xsZWQgb2JqZWN0IHNvIHRoYXQgaXQgY2Fubm90IGRpc2FwcGVhci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgPG1haWwgYXQgcmVuZXN0YWRsZXIgZG90IGRlPgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX25ld192YWxpc3QpLAotCSAgKGdzdF9jb250cm9sbGVyX25ld19saXN0KSwgKF9nc3RfY29udHJvbGxlcl9kaXNwb3NlKSwKLQkgIChfZ3N0X2NvbnRyb2xsZXJfZmluYWxpemUpLCAoX2dzdF9jb250cm9sbGVyX2NsYXNzX2luaXQpOgotCSAgVGFrZSByZWYgdG8gY29udHJvbGxlZCBvYmplY3Qgc28gdGhhdCBpdCBjYW5ub3QgZGlzYXBwZWFyLgotCSAgRml4ZXMgIzM1NzQzMi4KLQotMjAwNi0xMC0xMCAxNDowOTo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogQWN0aXZhdGUvZGVhY3RpdmF0ZSBwYWRzIGluIHNldHVwL3RlYXJkb3duIHJlc3BlY3RpdmVseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQpLAotCSAgKGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkKSwgKGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCksCi0JICAoZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkKToKLQkgIEFjdGl2YXRlL2RlYWN0aXZhdGUgcGFkcyBpbiBzZXR1cC90ZWFyZG93biByZXNwZWN0aXZlbHkuCi0KLTIwMDYtMTAtMTAgMTI6MTI6NDQgKzAwMDAgIEpvc2VwIFRvcnJlIFZhbGxlcyA8am9zZXBAZmx1ZW5kby5jb20+Ci0KLQkgIGdzdC9NYWtlZmlsZS5hbTogQ2FzdCB2YWx1ZXMgd2hlbiBtYWtpbmcgZ3N0ZW51bXR5cGVzLmguICBUaGlzIHBhY2lmaWVzIEZvcnRlIHNvIGl0IGRvZXNuJ3Qgd2FybiBhYm91dCB0aGUgfjAgYXMgR1NUXy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTEwLTEwICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICBQYXRjaCBieTogSm9zZXAgVG9ycmUgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgQ2FzdCB2YWx1ZXMgd2hlbiBtYWtpbmcgZ3N0ZW51bXR5cGVzLmguICBUaGlzIHBhY2lmaWVzIEZvcnRlCi0JICBzbyBpdCBkb2Vzbid0IHdhcm4gYWJvdXQgdGhlIH4wIGFzIEdTVF9NRVNTQUdFX0FOWSBub3QgZml0dGluZwotCSAgaW4gdGhlIGVudW1lcmF0aW9uLgotCi0yMDA2LTEwLTA5IDE3OjE1OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZXZlbnQuYzogUmVuYW1lIHNvbWUgbW9yZSBAY3VyIHRvIEBzdGFydCB0byBmaXggZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfc2VlayksIChnc3RfZXZlbnRfcGFyc2Vfc2Vlayk6Ci0JICBSZW5hbWUgc29tZSBtb3JlIEBjdXIgdG8gQHN0YXJ0IHRvIGZpeCBkb2NzLgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspOgotCSAgRml4IHR5cG8uCi0JICB0aW1lIGFuZCBzdGFydCBtdXN0IGFsd2F5cyBzdGF5IGluIHN5bmMgYXMgZGVmaW5lZCBpbiBkZXNpZ24gZG9jLgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5KToKLQkgIFJlbmFtZSBwYXJhbSB0byBmaXggZG9jcy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIENoZWNrIHRoYXQgc3RhcnQgYW5kIHRpbWUgYXJlIGluIHN5bmMuCi0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgIChnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JICBBY3RpdmF0ZSBwYWQgYmVmb3JlIGFkZGluZyB0byB0aGUgZWxlbWVudC4KLQotMjAwNi0xMC0wOSAxNjozMzoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OiBGaXggdHlwby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6Ci0JICBGaXggdHlwby4KLQkgICogZ3N0L2dzdGV2ZW50LmM6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgVXBkYXRlIHNlZWsgZXZlbnQgZG9jcyByZWdhcmRpbmcgbmVnYXRpdmUgcmF0ZXMuCi0JICBSZW5hbWUgQGN1ciB0byBAc3RhcnQuCi0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfc2Vlayk6Ci0JICAqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JICBVcGRhdGUgc2V0X3NlZWsgZG9jcyByZWdhcmRpbmcgbmVnYXRpdmUgcmF0ZXMuCi0JICBDb3JyZWN0bHkgdXBkYXRlIGxhc3Rfc3RvcCB0byBAc3RvcCB3aGVuIGRlYWxpbmcgd2l0aCBuZWdhdGl2ZQotCSAgcmF0ZXMuCi0JICBSZW5hbWUgQGN1ciB0byBAc3RhcnQuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFjdGl2YXRlIHBhZHMgYmVmb3JlIHRyeWluZyB0byB1c2UgdGhlbS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3Rfc2VnbWVudF9zdWl0ZSk6Ci0JICBBZGQgc2ltcGxlIGNoZWNrIGZvciBzZWdtZW50cyBhbmQgbmVnYXRpdmUgcmF0ZXMuCi0KLTIwMDYtMTAtMDkgMTE6MjA6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIGdzdF90YWdfbGlzdF9pc19lbXB0eSgpICgjMzYwNDY3KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5KToKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIEFQSTogYWRkIGdzdF90YWdfbGlzdF9pc19lbXB0eSgpICgjMzYwNDY3KS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQW5kIGEgdGVzdCBjYXNlLgotCi0yMDA2LTEwLTA5IDExOjA2OjUwICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBnc3QvZ3N0bWVzc2FnZS5oOiBSZXZlcnQgY2hhbmdlIGZyb20gZWFybGllciB3cnQgR1NUX01FU1NBR0VfVFlQRV9BTlkgaGF2aW5nIGEgdmFsdWUgdGhhdCBkb2Vzbid0IGZpdCBvbiBlbnVtZXJhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0xMC0wOSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgUmV2ZXJ0IGNoYW5nZSBmcm9tIGVhcmxpZXIgd3J0IEdTVF9NRVNTQUdFX1RZUEVfQU5ZIGhhdmluZwotCSAgYSB2YWx1ZSB0aGF0IGRvZXNuJ3QgZml0IG9uIGVudW1lcmF0aW9uLgotCi0yMDA2LTEwLTA5IDEwOjE0OjI4ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogUmVtb3ZlIGxvY2FsIGRlYnVnZ2luZyBzeXN0ZW0gYW5kIHVzZSBHc3RyZWFtZXIncyBpbnN0ZWFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTEwLTA5ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoZ3N0X25ldF9jbGllbnRfY2xvY2tfdGhyZWFkKToKLQkgIFJlbW92ZSBsb2NhbCBkZWJ1Z2dpbmcgc3lzdGVtIGFuZCB1c2UgR3N0cmVhbWVyJ3MgaW5zdGVhZC4KLQotMjAwNi0xMC0wOSAwOTozMjoyOSArMDAwMCAgSm9zZXAgVG9ycmUgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KLQotCSAgY29tbW9uL200L2dzdC1lcnJvci5tNDogRGlzYWJsZSB3YXJuaW5nIG9mIHN0YXRlbWVudCBub3QgcmVhY2hlZCBvbiBGb3J0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0xMC0wOSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgUGF0Y2ggYnk6IEpvc2VwIFRvcnJlIFZhbGxlcyA8am9zZXBAZmx1ZW5kby5jb20+Ci0JICAqIGNvbW1vbi9tNC9nc3QtZXJyb3IubTQ6Ci0JICBEaXNhYmxlIHdhcm5pbmcgb2Ygc3RhdGVtZW50IG5vdCByZWFjaGVkIG9uIEZvcnRlLgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgRml4IHdhcm5pbmcgb24gRm9ydGUgKHZhbHVlIGRvZXNuJ3QgZml0IG9uIGVudW1lcmF0aW9uKS4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCk6Ci0JICBGaXggd2FybmluZyBvbiBGb3J0ZSAodmFsdWUgZG9lc24ndCBmaXQgb24gZW51bWVyYXRpb24pLgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3RocmVhZCk6Ci0JICBERUJVRyBtYWNybyBzYXlzIGl0IHRha2VzIG1pbmltdW0gb2YgMiBhcmdzIGFuZCBzbyBGb3J0ZQotCSAgY29tcGxhaW5zIGFib3V0IHRoZSB1c2Ugd2l0aCBqdXN0IDEgYXJnLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICBVc2UgY29ycmVjdCByZXR1cm4gdHlwZSBmb3IgdGhlIHVyaSBoYW5kbGVyIGltcGxlbWVudGF0aW9ucy4KLQkgIEFsbCB0aGVzZSBmaXggd2FybmluZ3MgaW4gRm9ydGUuICBGaXhlcyBidWcgIzM2MDg2MC4KLQotMjAwNi0xMC0wOCAxMzoyNzoxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuaDogZ2NjIHZlcnNpb25zIHByaW9yIHRvIGdjYyAzLjMgYXBwYXJlbnRseSBjb21wbGFpbiBhYm91dCBhIE5VTEwgcHJpbnRmIGZvcm1hdCBzdHJpbmcsIHNvIGRvbid0IHVzZSBHLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIGdjYyB2ZXJzaW9ucyBwcmlvciB0byBnY2MgMy4zIGFwcGFyZW50bHkgY29tcGxhaW4gYWJvdXQgYSBOVUxMIHByaW50ZgotCSAgZm9ybWF0IHN0cmluZywgc28gZG9uJ3QgdXNlIEdfR05VQ19QUklOVEYgZm9yIHRob3NlIHZlcnNpb25zLgotCi0yMDA2LTEwLTA3IDE4OjQxOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dGFnbGlzdC4qOiBNaW5vciBmaXhlcyB0byBHU1RfSVNfVEFHX0xJU1QgYW5kIGdzdF9pc190YWdfbGlzdCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0YWdsaXN0LmM6IChnc3RfaXNfdGFnX2xpc3QpOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgTWlub3IgZml4ZXMgdG8gR1NUX0lTX1RBR19MSVNUIGFuZCBnc3RfaXNfdGFnX2xpc3QoKS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3RhZ19zdWl0ZSk6Ci0JICBTbWFsbCB0ZXN0IGZvciB0aGUgYWJvdmUuCi0KLTIwMDYtMTAtMDcgMTg6MTE6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R0YWdsaXN0Lmg6IExlc3MgdGFicywgbW9yZSBzcGFjZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIExlc3MgdGFicywgbW9yZSBzcGFjZXMuCi0KLTIwMDYtMTAtMDYgMTc6MjE6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmZvLmg6IFRob3NlIHR3byBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZG8gYWN0dWFsbHkgYmVsb25nIHRoZXJlLCByZXZlcnQgY29tbWl0IGZyb20geWVzdGVyZGF5IHRoYXQgdHVybmVkIHRoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmg6Ci0JICBUaG9zZSB0d28gZnVuY3Rpb24gZGVjbGFyYXRpb25zIGRvIGFjdHVhbGx5IGJlbG9uZyB0aGVyZSwgcmV2ZXJ0Ci0JICBjb21taXQgZnJvbSB5ZXN0ZXJkYXkgdGhhdCB0dXJuZWQgdGhlbSBpbnRybyBtYWNyb3MuCi0KLTIwMDYtMTAtMDYgMTQ6NDY6MDQgKzAwMDAgIEpvc2VwIFRvcnJlIFZhbGxlcyA8am9zZXBAZmx1ZW5kby5jb20+Ci0KLQkgIGdzdC9nc3QuYzogRml4IGVtcHR5IGRlY2xhcmF0aW9uIGFuZCB0eXBlIG1pc21hdGNoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTEwLTA2ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICBQYXRjaCBieTogSm9zZXAgVG9ycmUgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KLQkgICogZ3N0L2dzdC5jOiAoZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCk6Ci0JICBGaXggZW1wdHkgZGVjbGFyYXRpb24gYW5kIHR5cGUgbWlzbWF0Y2guCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpOgotCSAgRml4IHR5cGUgbWlzbWF0Y2guCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpLCAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGVfZnVuYyk6Ci0JICBGaXggdHlwZSBtaXNtYXRjaGVzLgotCSAgKiBnc3QvZ3N0aW5mby5jOiAoZ3N0X2RlYnVnX2NvbXBhcmVfbG9nX2Z1bmN0aW9uX2J5X2Z1bmMpLAotCSAgKGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uKSwgKF9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIpOgotCSAgQ2FzdCBhcyBhcHByb3ByaWF0ZS4KLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X2NsYXNzX3NpZ25hbF9jb25uZWN0KToKLQkgIENhc3QgYXMgYXBwcm9wcmlhdGUuICBUaGUgZnVuY3Rpb24gcG9pbnRlciBwYXJhbWV0ZXIgcmVhbGx5Ci0JICBoYXMgdGhlIHdyb25nIHR5cGUgYnV0IHdvdWxkIGJyZWFrIEFQSSBpZiB3ZSBjaGFuZ2UgaXQuCi0JICAqIGdzdC9nc3RxdWVyeS5jOgotCSAgRml4IHJlZGVmaW5pdGlvbiBvZiBfRklMRV9PRkZTRVRfQklUUyBjYXVzZWQgb24gU29sYXJpcyB3cnQKLQkgIG9yZGVyIG9mIGluY2x1ZGluZyBzdHJpbmcuaC4KLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSk6Ci0JICBSZW1vdmUgdW5yZWFjaGFibGUgbGluZS4KLQkgICogZ3N0L2dzdHhtbC5jOiAoZ3N0X3htbF9wYXJzZV9kb2MpOgotCSAgRml4IHR5cGUgbWlzbWF0Y2guCi0JICBBbGwgdGhlc2UgY2F1Z2h0IGJ5IEZvcnRlLgotCi0yMDA2LTEwLTA2IDE0OjAwOjQ5ICswMDAwICBKb3NlcCBUb3JyZSBWYWxsZXMgPGpvc2VwQGZsdWVuZG8uY29tPgotCi0JICBjb21tb24vbTQvZ3N0LWVycm9yLm00OiBGaXhlZCBidWcgIzM2MDE1MS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0xMC0wNiAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgUGF0Y2ggYnk6IEpvc2VwIFRvcnJlIFZhbGxlcyA8am9zZXBAZmx1ZW5kby5jb20+Ci0JICAqIGNvbW1vbi9tNC9nc3QtZXJyb3IubTQ6Ci0JICBGaXhlZCBidWcgIzM2MDE1MS4KLQkgIFdlIG5lZWQgdG8gZGlzYWJsZSB3YXJuaW5ncyBvbiBGb3J0ZSBmb3IgZW1wdHkgZGVjbGFyYXRpb25zCi0JICBkdWUgdG8gZ3N0LWluZGVudCBhZGRpbmcgO3MgdG8gbGluZXMgdGhhdCBqdXN0IHVzZSBtYWNyb3MKLQkgIHdoZXJlIHRoZSBtYWNybyBhY3R1YWxseSBkb2Vzbid0IG5lZWQgYSA7IGF0IGVuZCB0byBlbmQKLQkgIHN0YXRlbWVudC4KLQotMjAwNi0xMC0wNiAxMzowMTozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBBZGQgc29tZSBGSVhNRSBmb3IgdGhlIE5FV1NFR01FTlQgaGFuZGxpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19vcGVuX2ZpbGUpLAotCSAgKGdzdF9maWxlX3NpbmtfY2xvc2VfZmlsZSksIChnc3RfZmlsZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfZmlsZV9zaW5rX3JlbmRlcik6Ci0JICBBZGQgc29tZSBGSVhNRSBmb3IgdGhlIE5FV1NFR01FTlQgaGFuZGxpbmcuCi0KLTIwMDYtMTAtMDUgMTU6NDc6NDQgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIGdzdC9wYXJzZS9ncmFtbWFyLnk6IFJlbW92ZSBzdGF0aWMgZnVuY3Rpb24gZ3N0X3BhcnNlX2VsZW1lbnRfbG9jayBhcyBhbGwgaXQgZG9lcyBpcyByZXR1cm4uICBMb29rcyBsaWtlIGNydWZ0IGZyb20gMC44LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTEwLTA1ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBSZW1vdmUgc3RhdGljIGZ1bmN0aW9uIGdzdF9wYXJzZV9lbGVtZW50X2xvY2sgYXMgYWxsIGl0IGRvZXMKLQkgIGlzIHJldHVybi4gIExvb2tzIGxpa2UgY3J1ZnQgZnJvbSAwLjguCi0KLTIwMDYtMTAtMDUgMTU6MzE6MTYgKzAwMDAgIEpvc2VwIFRvcnJlIFZhbGxlcyA8am9zZXBAZmx1ZW5kby5jb20+Ci0KLQkgIEZpeCBhIGNvbXBpbGF0aW9uIGlzc3VlIHdpdGggRm9ydGUgb24gU29sYXJpcy4gIGluZXRfYXRvbiBpcyBpbiBsaWJyZXNvbHYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMTAtMDUgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgIFBhdGNoIGJ5OiBKb3NlcCBUb3JyZSBWYWxsZXMgPGpvc2VwQGZsdWVuZG8uY29tPgotCSAgKiBjb21tb24vbTQvZ3N0LWVycm9yLm00OgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkgIEZpeCBhIGNvbXBpbGF0aW9uIGlzc3VlIHdpdGggRm9ydGUgb24gU29sYXJpcy4gIGluZXRfYXRvbiBpcyBpbgotCSAgbGlicmVzb2x2LgotCi0yMDA2LTEwLTA1IDE0OjI2OjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBQcmludGYgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAocHJlX2FjdGl2YXRlKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChsb2FkX3BsdWdpbik6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3NldF9pbnRlcnBvbGF0aW9uX21vZGUpOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JICAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50XzFfMCk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX29ic2VydmVfdGltZXMpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6IChnc3RfZmRfc3JjX2NyZWF0ZSk6Ci0JICBQcmludGYgZml4ZXMuCi0KLTIwMDYtMTAtMDUgMTI6MzE6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFkZCBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTiB0byBnc3Rjb25maWcuaCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciB3ZSBjYW4gdXNlIEdfR05VQ19QUklOVEYgaW4gb3RoZXIgaGVhZGVyIGZpbGVzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgQWRkIEdTVF9VU0lOR19QUklOVEZfRVhURU5TSU9OIHRvIGdzdGNvbmZpZy5oIHNvIHRoYXQgd2Uga25vdwotCSAgd2hldGhlciB3ZSBjYW4gdXNlIEdfR05VQ19QUklOVEYgaW4gb3RoZXIgaGVhZGVyIGZpbGVzIGFuZCBhdAotCSAgbGVhc3QgY2hlY2sgdGhlIHByaW50ZiBmb3JtYXQvYXJndW1lbnRzIG9mIGRlYnVnIG1lc3NhZ2VzIGFuZAotCSAgR1NUX0VMRU1FTlRfRVJST1IgbWVzc2FnZXMgd2hlbiB0aGUgcHJpbnRmIGV4dGVuc2lvbiBpcyBub3QKLQkgIGJlaW5nIHVzZWQuCi0JICBSZXBsYWNlIG1vcmUgdGFicyB3aXRoIHNwYWNlcyBpbiBnc3RpbmZvLmggYW5kIHJlbW92ZSB0d28gc3B1cmlvdXMKLQkgIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBHU1RfRElTQUJMRV9ERUJVRyBwYXJ0IHdpdGggbWFjcm9zLgotCi0yMDA2LTEwLTAzIDE5OjEzOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YnVzLmM6IE1vcmUgZG9jcyBmb3IgdGhlIHN5bmMtbWVzc2FnZSBzaWduYWwgKG1lbnRpb24gdGhhdCBpdCBpcyBub3QgZW1pdHRlZCBieSBkZWZhdWx0KTsgbG9nIG1lc3NhZ2Ugc3RydWN0dXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2NsYXNzX2luaXQpLCAoZ3N0X2J1c19wb3N0KToKLQkgIE1vcmUgZG9jcyBmb3IgdGhlIHN5bmMtbWVzc2FnZSBzaWduYWwgKG1lbnRpb24gdGhhdCBpdCBpcyBub3QKLQkgIGVtaXR0ZWQgYnkgZGVmYXVsdCk7IGxvZyBtZXNzYWdlIHN0cnVjdHVyZXMgb2YgbWVzc2FnZXMgcG9zdGVkIG9uCi0JICB0aGUgYnVzIGFzIHdlbGwuCi0KLTIwMDYtMTAtMDMgMTU6MTA6NTEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0LmM6IFVzZSBhIHBpcGUgcGFpciB0byByZWNlaXZlIHN0YXR1cyByZXN1bHRzIGZyb20gdGhlIGZvcmtlZCBjaGlsZCwgYW5kIGlnbm9yZSB0aGUgcmVzdWx0IGZyb20gd2FpdHBpZC4gRml4ZXMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9mb3JraW5nKToKLQkgIFVzZSBhIHBpcGUgcGFpciB0byByZWNlaXZlIHN0YXR1cyByZXN1bHRzIGZyb20gdGhlIGZvcmtlZCBjaGlsZCwgYW5kCi0JICBpZ25vcmUgdGhlIHJlc3VsdCBmcm9tIHdhaXRwaWQuIEZpeGVzICMzNTU0OTkKLQotMjAwNi0xMC0wMiAxNjo0NjoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IEZpeCBsZWFrIGluIGNoZWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgotCSAgRml4IGxlYWsgaW4gY2hlY2suCi0KLTIwMDYtMTAtMDIgMTY6Mzc6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RwYWQuYzogQWRkICdTaW5jZTogMC4xMC4xMScgdG8gZ3N0X3BhZF9pc19ibG9ja2luZygpIGd0ay1kb2MgYmx1cmIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOgotCSAgQWRkICdTaW5jZTogMC4xMC4xMScgdG8gZ3N0X3BhZF9pc19ibG9ja2luZygpIGd0ay1kb2MgYmx1cmIuCi0KLTIwMDYtMTAtMDIgMTY6MDE6NTQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtYmxvY2sudHh0OiBGdXJ0aGVyIGV4cGxhaW4gdGhlIHVzZSBvZiBmbHVzaGluZyBvbiBibG9ja2VkIHBhZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6Ci0JICBGdXJ0aGVyIGV4cGxhaW4gdGhlIHVzZSBvZiBmbHVzaGluZyBvbiBibG9ja2VkIHBhZHMuCi0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfaXNfYmxvY2tpbmcpLCAoaGFuZGxlX3BhZF9ibG9jayksCi0JICAoZ3N0X3BhZF9wdXNoX2V2ZW50KToKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgQWRkZWQgbmV3IEdzdFBhZEZsYWcgOiBHU1RfUEFEX0JMT0NLSU5HLgotCSAgQWRkcyB0aGUgbm90aW9uIG9mIHBhZHMgcmVhbGx5IGJsb2NraW5nLCB3aGljaCBlbmFibGVzIHRvIHByb3Blcmx5Ci0JICBoYW5kbGUgRkxVU0hfU1RBUlQvRkxVU0hfU1RPUCBldmVudHMgb24gYmxvY2tlZCBwYWRzLgotCSAgRml4ZXMgIzM1ODk5OQotCSAgQVBJOiBnc3RfcGFkX2lzX2Jsb2NraW5nKCkKLQkgIEFQSTogR1NUX1BBRF9JU19CTE9DS0lORygpIG1hY3JvCi0JICBBUEk6IEdTVF9QQURfQkxPQ0tJTkcgR3N0UGFkRmxhZwotCi0yMDA2LTEwLTAyIDEwOjA2OjE3ICswMDAwICBtcmNncmFuIDxtcmMuZ3JhbkBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RnaG9zdHBhZC5jOiBGaWx0ZXIgdGhlIHByb3hpZWQgY2FwcyBhZ2FpbnN0IHRoZSBwYWR0ZW1wbGF0ZSBpZiB3ZSBoYXZlIG9uZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IG1yY2dyYW4gPG1yYy5ncmFuIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19nZXRjYXBzKToKLQkgIEZpbHRlciB0aGUgcHJveGllZCBjYXBzIGFnYWluc3QgdGhlIHBhZHRlbXBsYXRlIGlmIHdlIGhhdmUgb25lLgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfc2VnbWVudCk6Ci0JICBBZGQgaW5jbHVkZSBmb3IgZ3N0aW5mby5oIHNvIHRoYXQgY29tcGlsYXRpb24gd2l0aAotCSAgLURHU1RfRElTQUJMRV9HU1RfREVCVUcgd29ya3MgYWdhaW4uIEZpeGVzICMzNTg0MzYuCi0KLTIwMDYtMTAtMDIgMDk6NDQ6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEdpdmUgY3JlZGl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEdpdmUgY3JlZGl0Ci0KLTIwMDYtMTAtMDIgMDk6NDE6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogU2V0IGZpbGUgdG8gTlVMTCB3aGVuIGNsb3NpbmcgZmlsZXNpbmsgc28gdGhhdCB3ZSBjYW4gc2V0IGEgbmV3IGZpbGVuYW1lIGluIFJFQURZLiBGaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfaW5pdCksCi0JICAoZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24pLCAoZ3N0X2ZpbGVfc2lua19vcGVuX2ZpbGUpLAotCSAgKGdzdF9maWxlX3NpbmtfY2xvc2VfZmlsZSksIChnc3RfZmlsZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfZmlsZV9zaW5rX3JlbmRlcik6Ci0JICBTZXQgZmlsZSB0byBOVUxMIHdoZW4gY2xvc2luZyBmaWxlc2luayBzbyB0aGF0IHdlIGNhbiBzZXQgYSBuZXcgZmlsZW5hbWUKLQkgIGluIFJFQURZLiBGaXhlcyAjMzU4NjEzLgotCi0yMDA2LTEwLTAyIDA4OjM3OjI0ICswMDAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyb0BubnZhLm9yZz4KLQotCSAgZ3N0L2dzdGV2ZW50LmM6IEZpeCBnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSgpIGFuZCBnc3RfZXZlbnRfY29weSgpIGZvciBldmVudHMgd2l0aCBldmVudCBzdHJ1Y3R1cmVzIGJ5IHNldHRpbmcgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBbGVzc2FuZHJvIERlY2luYSAgPGFsZXNzYW5kcm8gYXQgbm52YSBvcmc+Ci0JICAqIGdzdC9nc3RldmVudC5jOiAoX2dzdF9ldmVudF9jb3B5KToKLQkgIEZpeCBnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSgpIGFuZCBnc3RfZXZlbnRfY29weSgpIGZvciBldmVudHMKLQkgIHdpdGggZXZlbnQgc3RydWN0dXJlcyBieSBzZXR0aW5nIHRoZSBwYXJlbnQgcmVmY291bnQgYWRkcmVzcyBvZiB0aGUKLQkgIGNvcGllZCBzdHJ1Y3R1cmUgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZmNvdW50IG1lbWJlciBvZiB0aGUgbmV3bHkKLQkgIGNvcGllZCBldmVudCByYXRoZXIgdGhhbiB0aGUgYWRkcmVzcyBvZiB0aGUgcmVmY291bnQgbWVtYmVyIG9mIHRoZQotCSAgb3JpZ2luYWwgZXZlbnQuIEZpeGVzICMzNTg3MzcuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVW5pdCB0ZXN0IGZvciB0aGUgYWJvdmUuCi0KLTIwMDYtMDktMjkgMjA6Mjk6NDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06IERpc3Qgc29tZSBtb3JlIGZpbGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSAgRGlzdCBzb21lIG1vcmUgZmlsZXMuCi0KLTIwMDYtMDktMjkgMTI6MzE6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiBBZGQgdGVzdCBmb3IgdGhlIHByZXZpb3VzIGZpeDsgYWRkIHNvbWUgbW9yZSB0ZXN0cyBmb3IgY29ycmVjdCByZWZjb3VudGluZyBiZWhhdmlvdXI7IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9jb250cm9sbGVyX3N1aXRlKToKLQkgIEFkZCB0ZXN0IGZvciB0aGUgcHJldmlvdXMgZml4OyBhZGQgc29tZSBtb3JlIHRlc3RzCi0JICBmb3IgY29ycmVjdCByZWZjb3VudGluZyBiZWhhdmlvdXI7IGZpeCBhIGZldyBsZWFrcwotCSAgaW4gdGVzdCBjYXNlczsgY2FsbCBnc3RfY29udHJvbGxlcl9pbml0KCkgYXQgc3RhcnQKLQkgIG9mIGFsbCB0ZXN0cy4KLQotMjAwNi0wOS0yOSAxMjoyNDo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IERvbid0IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCkgb24gdGltZWQgdmFsdWVzIHdpdGggaW52YWxpZCB0aW1lc3RhbXBzIGluc2lkZSBhIGNyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0KSwKLQkgIChnc3RfY29udHJvbGxlcl9zZXRfZnJvbV9saXN0KToKLQkgIERvbid0IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCkgb24gdGltZWQgdmFsdWVzIHdpdGggaW52YWxpZCB0aW1lc3RhbXBzCi0JICBpbnNpZGUgYSBjcml0aWNhbCBzZWN0aW9uIHdpdGhvdXQgdW5sb2NraW5nIHRoZSBtdXRleC4gU3BvdHRlZCBieQotCSAgUmVuw6kgU3RhZGxlci4gKCMzNTc2MTcpCi0JICBBbHNvLCBmaXggdXAgcmVmY291bnRpbmcgcHJvcGVybHk6IHdoZW4gcmV0dXJuaW5nIGFuIGV4aXN0aW5nCi0JICBjb250cm9sbGVyLCB3ZSBzaG91bGQgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBvbmx5IG9uY2UgYW5kIG5vdAotCSAgb25jZSBwZXIgcHJvcGVydHkgYW5kIHdoZW4gdHJ5aW5nIHRvIGNvbnRyb2wgYSBwcm9wZXJ0eSBhZ2FpbgotCSAgd2Ugc2hvdWxkIGFsc28gaW5jcmVhc2UgdGhlIHJlZmNvdW50LgotCi0yMDA2LTA5LTI5IDA4OjIyOjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9uZXQvOiBTdG9wIHJlYWRpbmcgY29tbWFuZHMgd2hlbiBFT0YgYXMgd2VsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3RocmVhZCk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfdGhyZWFkKToKLQkgIFN0b3AgcmVhZGluZyBjb21tYW5kcyB3aGVuIEVPRiBhcyB3ZWxsLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpOgotCSAgVW5pZnkgZGVzY3JpcHRpb24gb2YgdGhlIGR1bXAgcHJvcGVydHkuCi0KLTIwMDYtMDktMjggMTc6MjA6MTcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBNZW50aW9uIGJ1ZyBudW1iZXIgaW4gcHJldmlvdXMgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE1lbnRpb24gYnVnIG51bWJlciBpbiBwcmV2aW91cyBjb21taXQKLQotMjAwNi0wOS0yOCAxNTo1MjowNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzL21hbnVhbC8uY3ZzaWdub3JlOiBPSywgc28gaXQncyBhY3R1YWxseSBjdnNpZ25vcmUgdGhhdCBuZWVkcyBjaGFuZ2luZy4gU3RvcCBsYXVnaGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvLmN2c2lnbm9yZToKLQkgIE9LLCBzbyBpdCdzIGFjdHVhbGx5IGN2c2lnbm9yZSB0aGF0IG5lZWRzIGNoYW5naW5nLiBTdG9wIGxhdWdoaW5nLgotCi0yMDA2LTA5LTI4IDE1OjI3OjEyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOiBHYWgsIGRlY2xhcmUgdmFycyAqYmVmb3JlKiB1c2luZyB0aGVtCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgR2FoLCBkZWNsYXJlIHZhcnMgKmJlZm9yZSogdXNpbmcgdGhlbQotCi0yMDA2LTA5LTI4IDE0OjAwOjQzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0LzogUmUtY29tbWl0IHRoZSByZWdpc3RyeSBjaGFuZ2VzLCBhbG9uZyB3aXRoIGFuIGV4dHJhIGZpeDoKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChpbml0X3ByZSksIChzY2FuX2FuZF91cGRhdGVfcmVnaXN0cnkpLAotCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X25vbmZvcmtpbmcpLAotCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X2ZvcmtpbmcpLCAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnkpLAotCSAgKGluaXRfcG9zdCksIChnc3RfZGVidWdfaGVscCksIChnc3RfZGVpbml0KToKLQkgICogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2ZpbmFsaXplKSwKLQkgIChnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmVzX2Zvcl9wbHVnaW5fdW5sb2NrZWQpLAotCSAgKGdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luKSwgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpLAotCSAgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGgpLAotCSAgKF9wcml2X2dzdF9yZWdpc3RyeV9yZW1vdmVfY2FjaGVfcGx1Z2lucyksCi0JICAoX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NsZWFudXApOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkgIFJlLWNvbW1pdCB0aGUgcmVnaXN0cnkgY2hhbmdlcywgYWxvbmcgd2l0aCBhbiBleHRyYSBmaXg6Ci0JICBXaGVuIGEgY2FjaGVkIHBsdWdpbiBpcyBlbmNvdW50ZXJlZCBhdCBhIGRpZmZlcmVudCBmaWxlIHBhdGgsCi0JICB1cGRhdGUgdGhlIHN0b3JlZCBwYXRoIGluIHRoZSByZWdpc3RyeSBjYWNoZSBzbyB0aGF0IHRoZSBwYXJlbnQKLQkgIHByb2Nlc3Mga25vd3Mgd2hlcmUgaXQgYWN0dWFsbHkgaXMgbm93IHdoZW4gaXQgcmUtcmVhZHMgdGhlIHJlZ2lzdHJ5Ci0JICBjYWNoZS4gRml4ZXMgdGhlIHRoaW5nIHRoYXQgYnJva2UgZGlzdGNoZWNrIHdpdGggdGhlIHByZXZpb3VzIGNvbW1pdC4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBDbGVhbiB1cCBmaWxlcyBuYW1lZCAnY29yZScgdG9vIHdoZW4gcnVubmluZyBtYWtlIGNsZWFuLgotCSAgKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBTZXQgdXAgYSByZWdpc3RyeSBwYXRoIGZvciBydW5uaW5nIHRoZXNlIHRlc3RzLCBhbmQgY2xlYW4gaXQgcHJvcGVybHkKLQkgIGZvciBkaXN0Y2hlY2suCi0KLTIwMDYtMDktMjggMTE6MTE6MjggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IERvbid0IHB1bGwgaW4gZ21vZHVsZS0yLjAucGMgYXMgYSBkZXBlbmRlbmN5IGluIG91ciAucGMgZmlsZXMgLSB3ZSB3YW50IGdtb2R1bGUtbm8tZXhwb3J0LTIuMC5wYyBpbnN0ZWEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBEb24ndCBwdWxsIGluIGdtb2R1bGUtMi4wLnBjIGFzIGEgZGVwZW5kZW5jeSBpbiBvdXIgLnBjIGZpbGVzIC0gd2UKLQkgIHdhbnQgZ21vZHVsZS1uby1leHBvcnQtMi4wLnBjIGluc3RlYWQgc28gdGhhdCB3ZSBkb24ndCBkcmFnIGluCi0JICAtLWV4cG9ydC1keW5hbWljIG9uIGV2ZXJ5IHByb2plY3QgdGhhdCBsaW5rcyB0byBHU3RyZWFtZXIuCi0JICBBbHNvLCBtYWtlIG91ciBleHBvcnQgcmVnZXggb25seSBtYXRjaCB0aGUgc3RhcnQgb2Ygc3ltYm9scywgcmF0aGVyCi0JICB0aGFuIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyAnX2dzdCcgc29tZXdoZXJlLgotCSAgKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkgIFRoZSBsaWJnc3RjaGVjayB3ZSBidWlsZCBkb2VzIGhvd2V2ZXIgbmVlZCBleHBvcnQtZHluYW1pYywgYXMgaXQKLQkgIHByb2R1Y2VzIHNvbWUgc3ltYm9scyB0aGF0IGRvbid0IG1hdGNoIG91ciBfZ3N0Li4uIHN0eWxlIHJlZ2V4LgotCi0yMDA2LTA5LTI3IDE3OjQyOjQ3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0LzogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZSB1bnRpbCBJIGZpZ3VyZSBvdXQgd2h5IGl0IGJyZWFrcyBkaXN0Y2hlY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wcmUpLCAoc2Nhbl9hbmRfdXBkYXRlX3JlZ2lzdHJ5KSwKLQkgIChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9ub25mb3JraW5nKSwKLQkgIChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9mb3JraW5nKSwgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5KSwKLQkgIChpbml0X3Bvc3QpLCAoZ3N0X2RlYnVnX2hlbHApLCAoZ3N0X2RlaW5pdCk6Ci0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9yZWdpc3RyeV9maW5hbGl6ZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4pLCAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCksCi0JICAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aCksIChfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zKSwKLQkgIChfZ3N0X3JlZ2lzdHJ5X2NsZWFudXApOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkgIFJldmVydCBwcmV2aW91cyBjaGFuZ2UgdW50aWwgSSBmaWd1cmUgb3V0IHdoeSBpdCBicmVha3MgZGlzdGNoZWNrLgotCi0yMDA2LTA5LTI3IDE2OjUyOjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdC5jOiBNYWtlIGluaXRfcHJlIGFuZCBpbml0X3Bvc3QgdGFrZSB0aGUgZnVsbCBjb21wbGVtZW50IG9mIEdPcHRpb25GdW5jIGFyZ3Mgc28gdGhleSBjYW4gcmV0dXJuIHVzZWZ1bCBHRXJyb3JzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wcmUpLCAoc2Nhbl9hbmRfdXBkYXRlX3JlZ2lzdHJ5KSwKLQkgIChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9ub25mb3JraW5nKSwKLQkgIChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9mb3JraW5nKSwgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5KSwKLQkgIChpbml0X3Bvc3QpLCAoZ3N0X2RlYnVnX2hlbHApLCAoZ3N0X2RlaW5pdCk6Ci0JICBNYWtlIGluaXRfcHJlIGFuZCBpbml0X3Bvc3QgdGFrZSB0aGUgZnVsbCBjb21wbGVtZW50IG9mIEdPcHRpb25GdW5jCi0JICBhcmdzIHNvIHRoZXkgY2FuIHJldHVybiB1c2VmdWwgR0Vycm9ycy4gTWFrZSB0aGUgcmVnaXN0cnkgdXBkYXRpbmcKLQkgIGZ1bmN0aW9ucyBkbyBzby4KLQkgIENhbGwgX3ByaXZfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zIGFmdGVyIHNjYW5uaW5nIGZpbGVzIHRvCi0JICBlbnN1cmUgdGhhdCB0aGUgcmVnaXN0cnkgd2UncmUgYWJvdXQgdG8gd3JpdGUgb3V0IGRvZXNuJ3QgY29udGFpbgotCSAgc3RhbGUgaW5mb3JtYXRpb24gYWJvdXQgb2xkLWRlbGV0ZWQgcGx1Z2luIGZpbGVzLgotCSAgTWFrZSBfcHJpdl9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMgcmV0dXJuIGEgYm9vbGVhbiBzbwotCSAgdGhhdCBkZWxldGlvbiBvZiBwbHVnaW4gZmlsZXMgaXMgY29uc2lkZXJlZCBhIHJlZ2lzdHJ5IGNoYW5nZS4KLQkgICogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2ZpbmFsaXplKSwKLQkgIChnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmVzX2Zvcl9wbHVnaW5fdW5sb2NrZWQpLAotCSAgKGdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luKSwgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpLAotCSAgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGgpLAotCSAgKF9wcml2X2dzdF9yZWdpc3RyeV9yZW1vdmVfY2FjaGVfcGx1Z2lucyksCi0JICAoX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NsZWFudXApOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkgIFJlbmFtZSBfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zIGFuZCBfZ3N0X3JlZ2lzdHJ5X2NsZWFudXAKLQkgIGJ5IGFkZGluZyBfcHJpdiBwcmVmaXgsIHNvIHRoYXQgdGhleSB3b24ndCBhcHBlYXIgaW4gdGhlIGdsb2JhbAotCSAgc3ltYm9sIHRhYmxlLiBUaGV5IHN0aWxsIGRvIGF0bSB0aG91Z2ggYmVjYXVzZSBvZiAjMzE4MDMxLiBNb3ZlIHRoZQotCSAgcHJvdG90eXBlcyB0byBnc3RfcHJpdmF0ZS5oCi0JICBXaGVuIHJlbW92aW5nIGEgcGx1Z2luLCByZW1vdmUgYWxsIGZlYXR1cmVzIGZvciB0aGF0IHBsdWdpbiB0b28uCi0JICBGaXhlcyAjMzQwODc4LgotCi0yMDA2LTA5LTI3IDEzOjE5OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczogTWFrZSBpdCBjbGVhciB0aGF0IHRoZSAiY29tcGlsZWQtaW4gZGVzY3JpcHRpb25zIiByZWFsbHkgbWVhbiB0aGUgZWxlbWVudCBkZXRhaWxzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgotCSAgTWFrZSBpdCBjbGVhciB0aGF0IHRoZSAiY29tcGlsZWQtaW4gZGVzY3JpcHRpb25zIiByZWFsbHkgbWVhbgotCSAgdGhlIGVsZW1lbnQgZGV0YWlscy4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAotCSAgKGdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsKToKLQkgIFVwZGF0ZSBkb2NzLgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcpLAotCSAgKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIEFkZGVkIGZ1bmN0aW9uIHRvIGJsb2NrIHdoaWxlIHdhaXRpbmcgZm9yIFBMQVlJTkcsIHRoaXMgZnVuY3Rpb24KLQkgIGlzIHVzZWQgYnkgbGl2ZSBzb3VyY2VzIHRoYXQgYmxvY2sgb24gdGhlIGNsb2NrLgotCSAgQVBJOiBnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nKCkKLQotMjAwNi0wOS0yNyAxMDoxMzoxMyArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIE1ha2VmaWxlLmFtOiBnc3QtZWxlbWVudC1jaGVjay5tNCBpcyBnZW5lcmF0ZWQgYW5kIHNob3VsZCB0aGVyZWZvcmUgYmUgY29waWVkIGZyb20gdGhlIGJ1aWxkIGRpciByYXRoZXIgdGhhbiB0aGUgc291ci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXQgYXhpcyBjb20+Ci0JICAqIE1ha2VmaWxlLmFtOgotCSAgZ3N0LWVsZW1lbnQtY2hlY2subTQgaXMgZ2VuZXJhdGVkIGFuZCBzaG91bGQgdGhlcmVmb3JlIGJlCi0JICBjb3BpZWQgZnJvbSB0aGUgYnVpbGQgZGlyIHJhdGhlciB0aGFuIHRoZSBzb3VyY2UgZGlyICgjMzU3NTkzKS4KLQkgICdtYWtlIGRpc3RjaGVjaycgaGFzbid0IG5vdGljZWQgdGhpcyBiZWNhdXNlIHdlIHdlcmUgZGlzdGluZwotCSAgdGhlIGZpbGUgYXMgd2VsbCwgc28gc3RvcCBkb2luZyB0aGF0LgotCi0yMDA2LTA5LTI3IDA5OjIzOjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOiBBZGQgc29tZSB0ZXN0cyBmb3IgZ3N0X2NhcHNfaW50ZXJzZWN0KCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9jYXBzX3N1aXRlKToKLQkgIEFkZCBzb21lIHRlc3RzIGZvciBnc3RfY2Fwc19pbnRlcnNlY3QoKS4KLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6Ci0JICBQcmludCBhbGwgYnVmZmVyaW5nIHBlcmNlbnRhZ2VzIHdlIGdldCwgZXZlbiB0aGUgMTAwJSBvbmUuCi0KLTIwMDYtMDktMjYgMTI6Mzk6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEZpeCBwcmludGluZyBvZiBmbGFncyB0byBtYXRjaCB0aGUgbG9vayBvZiBlbnVtcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pLAotCSAgKHByaW50X3NpZ25hbF9pbmZvKToKLQkgIEZpeCBwcmludGluZyBvZiBmbGFncyB0byBtYXRjaCB0aGUgbG9vayBvZiBlbnVtcy4KLQotMjAwNi0wOS0yNSAxMzowODoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IEZpeCB0eXBvIGluIGRvY3MgYmx1cmIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICBGaXggdHlwbyBpbiBkb2NzIGJsdXJiLgotCi0yMDA2LTA5LTI1IDExOjE2OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dXJpLmM6IERvbid0IGFzc2VydC9jcmFzaCBoZXJlIGlmIGEgdXJpIGhhbmRsZXIgZG9lc24ndCByZXR1cm4gYW55IHN1cHBvcnRlZCBwcm90b2NvbHMuIFRoZSBsaXN0IG9mIHByb3RvY29scyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXJpLmM6IChzZWFyY2hfYnlfZW50cnkpOgotCSAgRG9uJ3QgYXNzZXJ0L2NyYXNoIGhlcmUgaWYgYSB1cmkgaGFuZGxlciBkb2Vzbid0IHJldHVybiBhbnkKLQkgIHN1cHBvcnRlZCBwcm90b2NvbHMuIFRoZSBsaXN0IG9mIHByb3RvY29scyBjb3VsZCBiZSBnZW5lcmF0ZWQKLQkgIGR5bmFtaWNhbGx5IGF0IHJ1bnRpbWUgb3IgYXQgcGx1Z2luIHJlZ2lzdHJhdGlvbiwgYW5kIGFuIGVycm9yCi0JICBpbiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IHNob3VsZG4ndCBiZSBmYXRhbCAoIzM1MzMwMSkuCi0KLTIwMDYtMDktMjUgMTA6MzY6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmZvLmM6IEZpeCB3YXJuaW5nIGlmIEhBVkVfUFJJTlRGX0VYVEVOU0lPTiBpcyB1bmRlZmluZWQgKHNwb3R0ZWQgYnkgUGV0ZXIgS2plbGxlcnN0ZWR0KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5jOgotCSAgRml4IHdhcm5pbmcgaWYgSEFWRV9QUklOVEZfRVhURU5TSU9OIGlzIHVuZGVmaW5lZAotCSAgKHNwb3R0ZWQgYnkgUGV0ZXIgS2plbGxlcnN0ZWR0KS4KLQotMjAwNi0wOS0yMyAwOTozMDo0MCArMDAwMCAgQW50b2luZSBUcmVtYmxheSA8aGV4YTAwQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IE1hdGNoIF9zdGFydC9fc3RvcCBjYWxscyBpbiB0aGUgYWN0aXZhdGUgZnVuY3Rpb25zLiBSZW1vdmUgcmVkdW5kYW50IF9zdG9wIGNhbGwgZnJvbSB0aGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDAgYXQgZ21haWwgZG90IGNvbT4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfY2hlY2tfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19zdGFydCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgTWF0Y2ggX3N0YXJ0L19zdG9wIGNhbGxzIGluIHRoZSBhY3RpdmF0ZSBmdW5jdGlvbnMuIFJlbW92ZSByZWR1bmRhbnQKLQkgIF9zdG9wIGNhbGwgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLiBGaXhlcyAjMzU2OTEwLgotCSAgVHVybiBmYWlsdXJlIERFQlVHIGludG8gRVJST1IuCi0KLTIwMDYtMDktMjIgMTU6Mjk6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFVwZGF0ZSBkb2NzIGFib3V0IGJ1ZmZlcmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcpOgotCSAgVXBkYXRlIGRvY3MgYWJvdXQgYnVmZmVyaW5nLgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0OgotCSAgRml4IHR5cG8uCi0KLTIwMDYtMDktMjIgMTQ6MzA6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSAgYXVkaW90ZXN0c3JjIGlzIG5vdCBwYXJ0IG9mIGNvcmUsIGZha2VzcmMgaXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYXVkaW90ZXN0c3JjIGlzIG5vdCBwYXJ0IG9mIGNvcmUsIGZha2VzcmMgaXMKLQotMjAwNi0wOS0yMiAxMzozMjo0MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogUmVmIGluc3RhbmNlcyB3aGVuIHJldHVybmluZyB0aGVtIGFnYWluIChmaXhlcyAjMzU3MTgwKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfbmV3X3ZhbGlzdCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QpOgotCSAgUmVmIGluc3RhbmNlcyB3aGVuIHJldHVybmluZyB0aGVtIGFnYWluIChmaXhlcyAjMzU3MTgwKQotCi0yMDA2LTA5LTIyIDEwOjE3OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0Z2hvc3RwYWQuYzogRG9uJ3QgZm9yZ2V0IHRvIHJlbGVhc2UgcHJveHkgbG9jayB3aGVuIHRoZXJlJ3MgYW4gZXJyb3IuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQpOgotCSAgRG9uJ3QgZm9yZ2V0IHRvIHJlbGVhc2UgcHJveHkgbG9jayB3aGVuIHRoZXJlJ3MgYW4gZXJyb3IuCi0KLTIwMDYtMDktMjAgMTY6MTc6MjYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0Y2Fwcy5oOiBBZGQgZXh0cmEgaW5pdGlhbGlzZXJzIGZvciBDYXBzIHRoaW5ncywgdG8gZml4IHNvbWUgcGx1Z2luIHdhcm5pbmdzIHdoZW4gdXNpbmcgLVdleHRyYQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmg6Ci0JICBBZGQgZXh0cmEgaW5pdGlhbGlzZXJzIGZvciBDYXBzIHRoaW5ncywgdG8gZml4IHNvbWUgcGx1Z2luIHdhcm5pbmdzCi0JICB3aGVuIHVzaW5nIC1XZXh0cmEKLQotMjAwNi0wOS0xOCAxMzo1NjoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmM6IEFsc28gc2V0IHRlbXBsYXRlIG9uIHRoZSBpbnRlcm5hbCBwYWQgc28gdGhhdCBhIGdldGNhcHMgZnJvbSB0aGUgdGFyZ2V0IHBhZCByZXR1cm5zIHRoZSB0ZW1wbGF0ZSBjLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX25ld19mdWxsKToKLQkgIEFsc28gc2V0IHRlbXBsYXRlIG9uIHRoZSBpbnRlcm5hbCBwYWQgc28gdGhhdCBhIGdldGNhcHMgZnJvbSB0aGUgdGFyZ2V0Ci0JICBwYWQgcmV0dXJucyB0aGUgdGVtcGxhdGUgY2Fwcy4KLQotMjAwNi0wOS0xOCAxMzo0NDoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogVXNlIF9ERUJVR19PQkpFQ1Qgc29tZSBtb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UpLAotCSAgKGdzdF9lbGVtZW50X2Rpc3Bvc2UpOgotCSAgVXNlIF9ERUJVR19PQkpFQ1Qgc29tZSBtb3JlLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19sb29wKToKLQkgIEF2b2lkIHR5cGVjaGVja3MuCi0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgotCSAgSWYgdGhlIHRvcGxldmVsIGVsZW1lbnQgaXMgbm90IGEgR3N0UGlwZWxpbmUsIGl0IG11c3QgYmUgcHV0IGluIGEKLQkgIHBpcGVsaW5lIHNvIHRoYXQgYSBidXMgYW5kIGNsb2NrIGlzIHNlbGVjdGVkLgotCi0yMDA2LTA5LTE3IDE5OjMxOjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogSklUVEVSLCBSQVRFLCBhbmQgTEFURU5DWSBxdWVyeSBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgZGVmYXVsdCBjYXNlIGFuZCBub3QgYnkgdGhlIENPTlYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X3F1ZXJ5KToKLQkgIEpJVFRFUiwgUkFURSwgYW5kIExBVEVOQ1kgcXVlcnkgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlCi0JICBkZWZhdWx0IGNhc2UgYW5kIG5vdCBieSB0aGUgQ09OVkVSVCBxdWVyeSBjb2RlLgotCi0yMDA2LTA5LTE3IDE5OjI2OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0Zm9ybWF0LmM6IEZpeCBsb2NraW5nIG9yZGVyIChtdXN0IHRha2UgbG9jayBiZWZvcmUgdXNpbmcgbl92YWx1ZXMpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3Rmb3JtYXQuYzogKGdzdF9mb3JtYXRfcmVnaXN0ZXIpOgotCSAgRml4IGxvY2tpbmcgb3JkZXIgKG11c3QgdGFrZSBsb2NrIGJlZm9yZSB1c2luZyBuX3ZhbHVlcykuCi0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9lbnVtKSwKLQkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZW51bV9pdGVyX2NtcCksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2VudW0pOgotCSAgRml4IHNlcmlhbGlzYXRpb24vZGVzZXJpYWxpc2F0aW9uIG9mIGN1c3RvbSByZWdpc3RlcmVkIEdzdEZvcm1hdHMuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKLQkgIFVuaXQgdGVzdCBmb3IgY3VzdG9tIGZvcm1hdCBzZXJpYWxpc2F0aW9uL2Rlc2VyaWFsaXNhdGlvbi4KLQotMjAwNi0wOS0xNiAyMTozODowOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBNb3JlIEdfT0JKRUNUIG1hY3JvIGZpeGluZy4gQWxzbyBGaXggc29tZSBkZXRhaWxzIG9uIHRoZSBwbHVnaW4tc3RhbXAgc2VjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgIE1vcmUgR19PQkpFQ1QgbWFjcm8gZml4aW5nLiBBbHNvIEZpeCBzb21lIGRldGFpbHMgb24gdGhlIHBsdWdpbi1zdGFtcAotCSAgc2VjdGlvbi4KLQotMjAwNi0wOS0xNiAxMjo0OTowMiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IENoZWNrIGlmIHJlcXVlc3RlZCBjYXBzIGFyZSB0aGUgc2FtZSBhcyB0aGUgc2lua3MgY2FwcyBJRgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpOgotCSAgQ2hlY2sgaWYgcmVxdWVzdGVkIGNhcHMgYXJlIHRoZSBzYW1lIGFzIHRoZSBzaW5rcyBjYXBzIElGCi0JICAtPmhhdmVfc2FtZV9jYXBzIGlzIFRSVUUuIElmIHRoZXkgYXJlIG5vdCwgYWN0IGFzIGlmIGhhdmVfc2FtZV9jYXBzCi0JICBpcyBGQUxTRS4KLQkgIFRoaXMgZml4ZXMgdGhlIHJlbmVnb3RpYXRpb24gaXNzdWVzIHN0YXRlZCBpbiAjMzUyODI3LgotCi0yMDA2LTA5LTE2IDEwOjQ5OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgRXh0cmFjdCB0aGUgbWFudWFsIGV4YW1wbGVzIGFnYWluIGxpa2Ugd2UgdXNlZCB0byBkby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9tYW51YWwvZXh0cmFjdC5wbDoKLQkgIEV4dHJhY3QgdGhlIG1hbnVhbCBleGFtcGxlcyBhZ2FpbiBsaWtlIHdlIHVzZWQgdG8gZG8uCi0JICBGaXggb25lIG9mIHRoZW0uCi0KLTIwMDYtMDktMTYgMTA6NDc6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB3aW4zMi9jb21tb24vY29uZmlnLmg6IHVwZGF0ZSBmb3IgdmVyc2lvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHVwZGF0ZSBmb3IgdmVyc2lvbgotCi0yMDA2LTA5LTE1IDIxOjMwOjAwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RlcnJvci5jOiBEb2N1bWVudHMgaG93IHRvIHJlY2VpdmUgZXJyb3JzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlcnJvci5jOgotCSAgRG9jdW1lbnRzIGhvdyB0byByZWNlaXZlIGVycm9ycy4KLQotMjAwNi0wOS0xNSAxMDo0MzoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBBZGRlZCBzb21lIGNvbW1lbnRzIGhlcmUgYW5kIHRoZXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKHNpZ2ludF9oYW5kbGVyX3NpZ2hhbmRsZXIpLCAoY2hlY2tfaW50ciksCi0JICAoZXZlbnRfbG9vcCksIChtYWluKToKLQkgIEFkZGVkIHNvbWUgY29tbWVudHMgaGVyZSBhbmQgdGhlcmUuCi0JICBQb3N0IGFuIGFwcGxpY2F0aW9uIG1lc3NhZ2Ugd2hlbiBhbiBpbnRlcnJ1cHQgaXMgY2F1Z2h0IGluc3RlYWQgb2YgZG9pbmcKLQkgIGFuIHVuY29udHJvbGxlZCBzdGF0ZSBjaGFuZ2UuCi0JICBDbGVhbiB1cCB0aGUgZXZlbnQgbG9vcC4KLQkgIEhhbmRsZSBidWZmZXJpbmcgbWVzc2FnZXMsIHBhdXNlL3Jlc3VtZSB0aGUgcGlwZWxpbmUuCi0JICBNYWtlIHNodXRkb3duIGJlY2F1c2Ugb2YgYW4gaW50ZXJydXB0IG1vcmUgcmVsaWFibGUuCi0KLTIwMDYtMDktMTUgMDk6NDk6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogTWFrZSBzdXJlIHRoYXQgb3VyIGludGVybmFsIHN0YXRlIGlzIGNvcnJlY3Qgd2hlbiB3ZSBjb21taXQgb3VyIHN0YXRlIGFzeW5jaHJvbm91c2x5LiBUaC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKLQkgIChnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbCksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9vYmplY3QpOgotCSAgTWFrZSBzdXJlIHRoYXQgb3VyIGludGVybmFsIHN0YXRlIGlzIGNvcnJlY3Qgd2hlbiB3ZSBjb21taXQgb3VyIHN0YXRlCi0JICBhc3luY2hyb25vdXNseS4gVGhpcyBzb2x2ZXMgYSByYWNlIHdoZXJlIGEgc3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcKLQkgIGNvdWxkIGNhdXNlIHRoZSBzaW5rIHRvIHJlbWFpbiBibG9ja2VkIGluIHByZXJvbGwgaW4gc29tZSBzaXR1YXRpb25zLgotCi0yMDA2LTA5LTE1IDA4OjUwOjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBMaXN0IGZsYWdzIGFzIGhleCBzbyBpdCdzIGVhc2llciB0byBkZWFsIHdpdGguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKSwKLQkgIChwcmludF9zaWduYWxfaW5mbyk6Ci0JICBMaXN0IGZsYWdzIGFzIGhleCBzbyBpdCdzIGVhc2llciB0byBkZWFsIHdpdGguCi0KLTIwMDYtMDktMTUgMDg6NDc6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEV4cG9zZSBsb2dpYyB0byB3YWl0IGZvciBwcmVyb2xsIHNvIHRoYXQgc3ViY2xhc3NlcyBzdWNoIGFzIGF1ZGlvc2luayBjYW4gYWxzbyB1c2UgdGhpcyBtZXRob2QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwpLAotCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEV4cG9zZSBsb2dpYyB0byB3YWl0IGZvciBwcmVyb2xsIHNvIHRoYXQgc3ViY2xhc3NlcyBzdWNoIGFzIGF1ZGlvc2luawotCSAgY2FuIGFsc28gdXNlIHRoaXMgbWV0aG9kLgotCSAgQVBJOiBnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbCgpCi0KLTIwMDYtMDktMTUgMDg6NDM6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFNtYWxsIGNsZWFudXBzIGluIGRvY3MgYW5kIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9zZXRfcGFyZW50KToKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChkb19waXBlbGluZV9zZWVrKToKLQkgIFNtYWxsIGNsZWFudXBzIGluIGRvY3MgYW5kIGNvZGUuCi0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9jbGlwKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIGlmIHN0b3AgPT0gc3RhcnQgYW5kIHN0YXJ0IGlzIGluIHRoZSBzZWdtZW50LCBubyBjbGlwcGluZyBzaG91bGQgYmUKLQkgIGRvbmUuIEFsc28gYWRkIGEgdGVzdCBmb3IgdGhpcy4KLQotMjAwNi0wOS0xNSAwODozOTo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWRkZWQgbWV0aG9kcyB0byBjcmVhdGUgYW5kIHBhcnNlIEJVRkZFUklORyBtZXNzYWdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcpOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgQWRkZWQgbWV0aG9kcyB0byBjcmVhdGUgYW5kIHBhcnNlIEJVRkZFUklORyBtZXNzYWdlcy4KLQkgIEFkZGVkIHByZWxpbWluYXJ5IGRvY3MgYWJvdXQgYnVmZmVyaW5nLgotCSAgQVBJOiBnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nCi0JICBBUEk6IGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZwotCi0yMDA2LTA5LTE1IDA4OjMyOjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IFVwZGF0ZSBkb2N1bWVudGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzoKLQkgIFVwZGF0ZSBkb2N1bWVudGF0aW9uLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCksIChnc3RfZWxlbWVudF9zZXRfY2xvY2spLAotCSAgKGdzdF9lbGVtZW50X2dldF9pbmRleCksIChnc3RfZWxlbWVudF9hZGRfcGFkKSwKLQkgIChnc3RfZWxlbWVudF9yZW1vdmVfcGFkKSwgKGdzdF9lbGVtZW50X2dldF9yYW5kb21fcGFkKSwKLQkgIChnc3RfZWxlbWVudF9zZW5kX2V2ZW50KSwgKGdzdF9lbGVtZW50X2dldF9xdWVyeV90eXBlcyksCi0JICAoZ3N0X2VsZW1lbnRfcXVlcnkpLCAoZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKSwKLQkgIChnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwpLCAoZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfc2F2ZV90aHlzZWxmKSwKLQkgIChnc3RfZWxlbWVudF9yZXN0b3JlX3RoeXNlbGYpOgotCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCSAgUmVuYW1lIGxhc3QgYml0IG9mIHRoZSBuZXctcGFkIC0+IHBhZC1hZGRlZCBzaWduYWwgcmVuYW1lLgotCSAgRml4IHRoZSBjYXNlIHdoZXJlIGFuIGVsZW1lbnQgcXVlcnkgd291bGQgb25seSB3b3JrIGlmIHRoZSBzb3VyY2UKLQkgIHBhZCB3YXMgbGlua2VkLgotCSAgQXZvaWQgc29tZSB1c2VsZXNzIHR5cGUgY2hlY2tpbmcgaW4gbWVzc2FnZSBoYW5kbGluZy4KLQkgICogZ3N0L2dzdGV2ZW50LmM6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KLQotMjAwNi0wOS0xNCAyMDoxMjowNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkgIGFkZCBhbiBJTkZPIGxpbmUgZm9yIHdoZW4gd2UgYWN0dWFsbHkgdXBkYXRlIHRoZSBmZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgYW4gSU5GTyBsaW5lIGZvciB3aGVuIHdlIGFjdHVhbGx5IHVwZGF0ZSB0aGUgZmQKLQotMjAwNi0wOS0xNCAyMDoxMToxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gdHJ1bmsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYmFjayB0byB0cnVuawotCi09PT0gcmVsZWFzZSAwLjEwLjEwID09PQotCi0yMDA2LTA5LTE0IDIwOjA4OjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICByZWxlYXNpbmcgMC4xMC4xMAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC4xMC4xMAotCi0yMDA2LTA5LTA5IDE2OjA4OjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgZmlyc3QgcHJlcmVsZWFzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXJzdCBwcmVyZWxlYXNlCi0KLTIwMDYtMDktMDkgMTY6MDc6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgdHJhbnNsYXRpb24gdXBkYXRlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0cmFuc2xhdGlvbiB1cGRhdGVzCi0KLTIwMDYtMDktMDUgMTQ6MTE6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbDogRml4IHR5cG8gaW4gc2FtcGxlIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOgotCSAgRml4IHR5cG8gaW4gc2FtcGxlIGNvZGUuCi0KLTIwMDYtMDktMDUgMDg6MzU6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L25ldC86IE1ha2Ugc3R1ZmYgY29tcGlsZSBvbiB3aW5kb3dzLiBGaXhlcyAjMzQ1Mjk1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiAoaW5ldF9hdG9uKSwKLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19pbml0KSwgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2ZpbmFsaXplKSwKLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19kb19zZWxlY3QpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KToKLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6IChnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQpOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IChpbmV0X2F0b24pLAotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9pbml0KSwgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9maW5hbGl6ZSksCi0JICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3RocmVhZCksIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3KToKLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oOgotCSAgTWFrZSBzdHVmZiBjb21waWxlIG9uIHdpbmRvd3MuIEZpeGVzICMzNDUyOTUuCi0KLTIwMDYtMDktMDMgMTE6MTY6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3QuYzogUHJpbnQgYmV0dGVyIGRldGFpbHMgd2hlbiBjaGlsZCB3YXMgdGVybWluYXRlZCBieSBzaWduYWwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnlfZm9ya2luZyk6Ci0JICBQcmludCBiZXR0ZXIgZGV0YWlscyB3aGVuIGNoaWxkIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbC4KLQotMjAwNi0wOS0wMyAxMTowNjo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IFByaW50IGEgd2FybmluZyByYXRoZXIgdGhhbiBnX2Fzc2VydCgpIGlmIGEgcGx1Z2luIGZlYXR1cmUgaXMgYSBVUkkgaGFuZGxlciBidXQgcmV0dXJucyBubyBwcm90Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChnc3RfcmVnaXN0cnlfeG1sX3NhdmVfZmVhdHVyZSk6Ci0JICBQcmludCBhIHdhcm5pbmcgcmF0aGVyIHRoYW4gZ19hc3NlcnQoKSBpZiBhIHBsdWdpbiBmZWF0dXJlCi0JICBpcyBhIFVSSSBoYW5kbGVyIGJ1dCByZXR1cm5zIG5vIHByb3RvY29scyAoIzM1Mzk3NikuCi0KLTIwMDYtMDktMDIgMTk6MTA6NTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6IEZpeCB0d28gdHlwb3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6Ci0JICBGaXggdHdvIHR5cG9zLgotCi0yMDA2LTA5LTAyIDE5OjAzOjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnM6Ci0JICBkb2N1bWVudCBwcm9jZXNzIHNvbWUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb2N1bWVudCBwcm9jZXNzIHNvbWUgbW9yZQotCi0yMDA2LTA5LTAyIDEzOjQwOjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdGVycm9yLmM6Ci0JICBjbGFyaWZ5IGVycm9yIG1lc3NhZ2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgY2xhcmlmeSBlcnJvciBtZXNzYWdlCi0KLTIwMDYtMDktMDIgMTM6MzY6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKLQkgIGRvY3VtZW50IHByb2Nlc3Mgc29tZSBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvY3VtZW50IHByb2Nlc3Mgc29tZSBtb3JlCi0KLTIwMDYtMDktMDEgMTY6MDM6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiBmaXggdHlwbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeTogZml4IHR5cG8KLQotMjAwNi0wOS0wMSAxNTo1NToyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGluZm8uYzogRml4IGxvY2tpbmcgb3JkZXIsIGhhbmRsZSBOVUxMIGZ1bmN0aW9uIHZhbHVlcyBwcm9wZXJseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5jOiAoX2dzdF9kZWJ1Z19uYW1lb2ZfZnVuY3B0cik6Ci0JICBGaXggbG9ja2luZyBvcmRlciwgaGFuZGxlIE5VTEwgZnVuY3Rpb24gdmFsdWVzIHByb3Blcmx5LgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgRml4IGRvY3MuCi0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYnVmZmVyX2FsbG9jX3VuY2hlY2tlZCk6Ci0JICBJbml0aWFsaXNlZCB2YXJpYWJsZSBiZWZvcmUgdXNpbmcgaXQgYW5kIGZpeCBkZWJ1ZyBzdGF0ZW1lbnQgdG8KLQkgIHByaW50IHRoZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgYWRkcmVzcyBvZiB0aGUKLQkgIHZhcmlhYmxlIG9uIHRoZSBzdGFjayBob2xkaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbi4KLQotMjAwNi0wOS0wMSAxMDozMzowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmM6IE1vcmUgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX2RvX2V2ZW50KSwKLQkgIChnc3RfcHJveHlfcGFkX2RvX2J1ZmZlcmFsbG9jKSwgKGdzdF9wcm94eV9wYWRfZG9fY2hhaW4pLAotCSAgKGdzdF9wcm94eV9wYWRfZG9fZ2V0cmFuZ2UpLCAoZ3N0X3Byb3h5X3BhZF9kb19jaGVja2dldHJhbmdlKSwKLQkgIChnc3RfcHJveHlfcGFkX3NldF90YXJnZXRfdW5sb2NrZWQpLCAoZ3N0X2dob3N0X3BhZF9wYXJlbnRfc2V0KSwKLQkgIChnc3RfZ2hvc3RfcGFkX3BhcmVudF91bnNldCksCi0JICAoZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9kb19hY3RpdmF0ZV9wdXNoKSwKLQkgIChnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2RvX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVzaCksIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF9naG9zdF9wYWRfZG9fbGluayksIChnc3RfZ2hvc3RfcGFkX2RvX3VubGluayksCi0JICAoZ3N0X2dob3N0X3BhZF9pbml0KSwgKGdzdF9naG9zdF9wYWRfZGlzcG9zZSksCi0JICAoZ3N0X2dob3N0X3BhZF9uZXdfZnVsbCksIChnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQpLAotCSAgKGdzdF9naG9zdF9wYWRfbmV3KSwgKGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUpLAotCSAgKGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlKSwKLQkgIChnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQpLCAoZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KToKLQkgIE1vcmUgY2xlYW51cHMuCi0JICBBdm9pZCBuZWVkbGVzcyB0eXBlY2hlY2tpbmcgaW4gbWFjcm9zLgotCSAgU2luY2UgdGhlIGludGVybmFsIHBhZCBpcyBhbHdheXMgcHJlc2VudCBhbmQgbmV2ZXIgY2hhbmdlcywgdGhlcmUgaXMKLQkgIG5vIG5lZWQgdG8gbG9ja2luZyBvciByZWYgd2hlbiByZXRyaWV2aW5nIGl0LgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQuCi0JICBIYW5kbGUgbGluayBlcnJvcnMgd2hlbiBzZXR0aW5nIHRoZSB0YXJnZXQuIEZpeGVzICMzNDEwMjkuCi0KLTIwMDYtMDktMDEgMTA6MjY6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvOiBGaXggZG9jcyBzb21lIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIEZpeCBkb2NzIHNvbWUgbW9yZS4KLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCSAgRnJlZSBxdWV1ZWQgYnVmZmVyIHdoZW4gcmVtb3ZpbmcgYSBwYWQuCi0KLTIwMDYtMDgtMzEgMTc6MTM6MzQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2dzdHV0aWxzLmM6IEVuc3VyZSB0aGF0IHdlIHNldCBhIGNhcHNmaWx0ZXIgdG8gTlVMTCBpZiB3ZSBmYWlsZWQgdG8gbGluayBpdCB3aGVuIGRvaW5nIGZpbHRlcmVkIGxpbmtpbmcsIHRvIGF2b2lkLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9saW5rX3BhZHMpLAotCSAgKGdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCk6Ci0JICBFbnN1cmUgdGhhdCB3ZSBzZXQgYSBjYXBzZmlsdGVyIHRvIE5VTEwgaWYgd2UgZmFpbGVkIHRvIGxpbmsgaXQKLQkgIHdoZW4gZG9pbmcgZmlsdGVyZWQgbGlua2luZywgdG8gYXZvaWQgY3JpdGljYWxzLgotCSAgTm8gbmVlZCB0byBjaGVjayBmb3IgdW5yZWZmaW5nIHNyY3BhZCwgd2hpY2ggaXMgZXhwbGljbHkgTlVMTGVkCi0JICBhYm92ZSAoYSB0cml2aWFsIGNvZGUgY2xlYW51cCkuCi0KLTIwMDYtMDgtMzEgMTU6MTk6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OiBVcGRhdGUgYXNjaWkgYXJ0IGluIGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6Ci0JICBVcGRhdGUgYXNjaWkgYXJ0IGluIGRvY3VtZW50YXRpb24uCi0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19pbnRlcm5hbF9saW5rKSwKLQkgIChnc3RfcHJveHlfcGFkX3NldF90YXJnZXRfdW5sb2NrZWQpLCAoZ3N0X3Byb3h5X3BhZF9pbml0KSwKLQkgIChnc3RfZ2hvc3RfcGFkX3BhcmVudF9zZXQpLCAoZ3N0X2dob3N0X3BhZF9wYXJlbnRfdW5zZXQpLAotCSAgKGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfZG9fYWN0aXZhdGVfcHVzaCksCi0JICAoZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9kb19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X2dob3N0X3BhZF9kb19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfZ2hvc3RfcGFkX2RvX2xpbmspLCAoZ3N0X2dob3N0X3BhZF9kb191bmxpbmspLAotCSAgKGdzdF9naG9zdF9wYWRfZGlzcG9zZSksIChnc3RfZ2hvc3RfcGFkX25ld19mdWxsKSwKLQkgIChnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQpOgotCSAgU21hbGwgY2xlYW51cHMgYW5kIGxlYWsgZml4ZXMuCi0JICBSZW1vdmUgc29tZSBjaGVja3Mgbm93IHRoYXQgdGhlIGludGVybmFsIHBhZCBpcyBuZXZlciBOVUxMLgotCSAgRml4IHRoZSBjYXNlIHdoZXJlIGxpbmtpbmcgcGFkcyB3aXRob3V0IGEgdGFyZ2V0IHdvdWxkIGNyZWF0ZSBuYXN0eQotCSAgY3JpdGljYWxzLiBGaXhlcyAjMzQxMDI5LgotCSAgRG9uJ3QgYXNzaWduIGEgR3N0UGFkTGlua1JldHVybiB0byBhIGdib29sZWFuIGFuZCBtZXNzIHVwIHRoZSByZXR1cm4KLQkgIHZhbHVlIG9mIF9zZXRfdGFyZ2V0KCkuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgotCSAgU29tZSBtb3JlIHRlc3RzIGZvciBjcmVhdGluZyBhbmQgbGlua2luZyB1bnRhcmdldGVkIGdob3N0cGFkcy4KLQotMjAwNi0wOC0zMSAxMDo1OToxMSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgUmVmYWN0b3JlZCAqX25ldygpIGZ1bmN0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZG9fZ2V0Y2FwcyksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19zZXRjYXBzKSwgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldF91bmxvY2tlZCksCi0JICAoZ3N0X3Byb3h5X3BhZF9kaXNwb3NlKSwgKGdzdF9naG9zdF9wYWRfbmV3X2Z1bGwpLAotCSAgKGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCksIChnc3RfZ2hvc3RfcGFkX25ldyksCi0JICAoZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSksCi0JICAoZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUpOgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuaDoKLQkgIFJlZmFjdG9yZWQgKl9uZXcoKSBmdW5jdGlvbnMuCi0JICBUZW1wbGF0ZXMgYXJlIG5vdyB1c2VkIGFzIGEgZ19vYmplY3RfbmV3KCkgcGFyYW1ldGVyLgotCSAgVXNlIHRlbXBsYXRlIGluIF9kb19nZXRjYXBzKCkgaWYgd2UgZG9uJ3QgaGF2ZSBhIHRhcmdldC4KLQkgIFNtYWxsIGRvY3VtZW50YXRpb24gY2xlYW51cHMuCi0JICBBZGRlZCB0d28gbmV3IGNvbnN0cnVjdG9yczoKLQkgIGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUoKQotCSAgZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUoKQotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3RfZ2hvc3RfcGFkX3N1aXRlKToKLQkgIEFkZGVkIHRlc3RzIGZvciBuZXcgZ2hvc3RwYWQgaW5zdGFuY2lhdGlvbiBmdW5jdGlvbnMuCi0JICBBUEkgYWRkaXRpb25zOiBnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlLAotCSAgZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUKLQotMjAwNi0wOC0zMCAxMjoyODo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3JhbmRvbS9lbnNvbmljL3Byb2ZpbGluZy50eHQ6IElkZWFzIGFib3V0IHFvcyBwcm9maWxpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vZW5zb25pYy9wcm9maWxpbmcudHh0OgotCSAgSWRlYXMgYWJvdXQgcW9zIHByb2ZpbGluZy4KLQotMjAwNi0wOC0yOSAxNDozOTo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGNhcHMuYzogQ29kZSBjbGVhbnVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfc3RydWN0dXJlX2lzX3N1YnNldF9maWVsZCk6Ci0JICBDb2RlIGNsZWFudXBzLgotCSAgRml4IG1lbWxlYWsuCi0KLTIwMDYtMDgtMjkgMTA6NDk6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R4bWwuYzogSW1wcm92ZSBhbmQgZGV0eXBvZnkgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0eG1sLmM6Ci0JICBJbXByb3ZlIGFuZCBkZXR5cG9meSBkb2NzLgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZ3N0Ly5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R4bWwuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF94bWxfc3VpdGUpOgotCSAgQWRkIGEgYmFzaWMgdGVzdCBzdWl0ZSBmb3IgR3N0WE1MLgotCi0yMDA2LTA4LTI5IDA5OjU2OjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBDbGVhciB0aGUgcGFkIGNhcHMgd2hlbiB0aGUgZWxlbWVudCBzaHV0IGRvd24gYWxsIG9mIHRoZSBwYWRzIGFuZCBpcyBub3Qgc3RyZWFtaW5nIGRhdGEgdGhhdCBjb3VsZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoYWN0aXZhdGVfcGFkcyksIChjbGVhcl9jYXBzKSwKLQkgIChpdGVyYXRvcl9hY3RpdmF0ZV9mb2xkX3dpdGhfcmVzeW5jKSwgKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgotCSAgQ2xlYXIgdGhlIHBhZCBjYXBzIHdoZW4gdGhlIGVsZW1lbnQgc2h1dCBkb3duIGFsbCBvZiB0aGUgcGFkcyBhbmQKLQkgIGlzIG5vdCBzdHJlYW1pbmcgZGF0YSB0aGF0IGNvdWxkIG1vZGlmeSB0aGUgY2Fwcy4KLQkgIEZpeGVzICMzNTI5NTguCi0KLTIwMDYtMDgtMjkgMDg6MDI6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBJIGRvbid0IGV2ZW4ga25vdyB3aGljaCBhcmNoIHRoYXQgaXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgSSBkb24ndCBldmVuIGtub3cgd2hpY2ggYXJjaCB0aGF0IGlzCi0KLTIwMDYtMDgtMjggMjM6MTY6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBtb3JlIGxvZ2ljYWwgdG8gbG9nIHRoZSBzZW5kaW5nIHBhZCwgYW5kIHRoZSBwYWQgaXQgaXMgc2VuZGluZyB0bwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtb3JlIGxvZ2ljYWwgdG8gbG9nIHRoZSBzZW5kaW5nIHBhZCwgYW5kIHRoZSBwYWQgaXQgaXMgc2VuZGluZyB0bwotCi0yMDA2LTA4LTI4IDE4OjIwOjAwICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZTsgSSBtaXN1bmRlcnN0b29kIHNpbmdsZS1zZWdtZW50IG1vZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6Ci0JICBSZXZlcnQgcHJldmlvdXMgY2hhbmdlOyBJIG1pc3VuZGVyc3Rvb2Qgc2luZ2xlLXNlZ21lbnQgbW9kZS4KLQotMjAwNi0wOC0yOCAxODowODowOSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IFVuc2V0IERJU0NPTlQgb24gYnVmZmVycyB3aGVuIHVzaW5nIHNpbmdsZS1zZWdtZW50IG1vZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6Ci0JICBVbnNldCBESVNDT05UIG9uIGJ1ZmZlcnMgd2hlbiB1c2luZyBzaW5nbGUtc2VnbWVudCBtb2RlLgotCi0yMDA2LTA4LTI4IDE2OjM5OjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Y2Fwcy4qOiBGaXggZG9jcyBhbmQgaW5kZW50YXRpb24gYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZSk6Ci0JICAqIGdzdC9nc3RjYXBzLmg6Ci0JICBGaXggZG9jcyBhbmQgaW5kZW50YXRpb24gYWdhaW4uCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IGxlYWsgaW4gdGVzdHMgYW5kIGFkZCBzb21lIG1vcmUgdGVzdHMuCi0KLTIwMDYtMDgtMjggMTU6NTc6MzkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogSW5mb3JtIEdzdFNlZ21lbnQgb2YgdGhlIGxhc3Qgc3RvcCBwb3NpdGlvbiBpbiBvcmRlciBmb3IgdGhlIGN1cnJlbnQgc2VnbWVudCB0byBoYXZlIGEgcC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpOgotCSAgSW5mb3JtIEdzdFNlZ21lbnQgb2YgdGhlIGxhc3Qgc3RvcCBwb3NpdGlvbiBpbiBvcmRlciBmb3IgdGhlIGN1cnJlbnQKLQkgIHNlZ21lbnQgdG8gaGF2ZSBhIHByb3BlciBkdXJhdGlvbiBpZiBpdCBkb2Vzbid0IGhhdmUgYSBzcGVjaWZpYyBzdG9wCi0JICBwb3NpdGlvbiBmcm9tIHdoaWNoIGEgZHVyYXRpb24gY291bGQgYmUgY2FsY3VsYXRlZC4KLQkgIFRoaXMgYnVnIHdhcyBub3RpY2VhYmxlIHdoZW4gYSBub24tZmx1c2hpbmcsIG5vbi11cGRhdGUgbmV3IHNlZ21lbnQgd2FzCi0JICBmb2xsb3dlZCBieSBhbm90aGVyIHNlZ21lbnQgKGFsbCBidWZmZXJzIGZyb20gdGhlIG5ldyBzZWdtZW50IHdlcmUgYmVpbmcKLQkgIGRyb3BwZWQpLgotCi0yMDA2LTA4LTI4IDE1OjQ4OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogU21hbGwgY29tbWVudCB1cGRhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKToKLQkgIFNtYWxsIGNvbW1lbnQgdXBkYXRlLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6Ci0JICBEcm9wLXByb2JhYmlsaXR5IGlzIGJyb2tlbiwgbWVudGlvbiB0aGlzIGluIHRoZSBjb2RlIHdpdGggYQotCSAgRklYTUUgYW5kIGFsc28gaW4gdGhlIHByb3BlcnR5IGRlc2NyaXB0aW9uLgotCSAgTWFrZSBzaWxlbnQgYWxzbyBiZSBzaWxlbnQgYWJvdXQgdGhlIGRyb3AgbWVzc2FnZXMuCi0KLTIwMDYtMDgtMjggMTE6MDY6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2FwcGVuZGl4LXdpbjMyLnhtbDogUmVtb3ZlIG1lbnRpb24gb2YgcG9wdCwgd2UgZG9uJ3QgZGVwZW5kIG9uIHRoYXQgYW55IGxvbmdlciAoIzM1MzEzNikuIEFkZCBzb21lIGNvbW1lbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXdpbjMyLnhtbDoKLQkgIFJlbW92ZSBtZW50aW9uIG9mIHBvcHQsIHdlIGRvbid0IGRlcGVuZCBvbiB0aGF0IGFueQotCSAgbG9uZ2VyICgjMzUzMTM2KS4gQWRkIHNvbWUgY29tbWVudHMgcG9pbnRpbmcgb3V0IHRoYXQKLQkgIHRoaXMgc2VjdGlvbiBpcyBzbGlnaHRseSBvdXRkYXRlZC4KLQotMjAwNi0wOC0yOCAwODo0NDoyOSArMDAwMCAgVG9yc3RlbiBTY2hvZW5mZWxkIDxrYWZmZWV0aXNjaEBnbXguZGU+Ci0KLQkgIEluaXRpYWxpemUgdmFyaWFibGVzIHdoZW4gY3JlYXRpbmcgYSBuZXcgc2VnbWVudCBxdWVyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRvcnN0ZW4gU2Nob2VuZmVsZCA8a2FmZmVldGlzY2ggYXQgZ214IGRvdCBkZT4KLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfbmV3X3NlZ21lbnQpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEluaXRpYWxpemUgdmFyaWFibGVzIHdoZW4gY3JlYXRpbmcgYSBuZXcgc2VnbWVudCBxdWVyeS4KLQkgIEZpeGVzICMzNTMxMjEuCi0KLTIwMDYtMDgtMjggMDg6MzU6MzEgKzAwMDAgIFRvcnN0ZW4gU2Nob2VuZmVsZCA8a2FmZmVldGlzY2hAZ214LmRlPgotCi0JICBDaGVjayBmb3IgTlVMTCBiZWZvcmUgX3JlZmZpbmcgdGhlIGJ1cy4gRml4ZXMgIzM1MzEyMi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRvcnN0ZW4gU2Nob2VuZmVsZCA8a2FmZmVldGlzY2ggYXQgZ214IGRvdCBkZT4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9idXMpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQ2hlY2sgZm9yIE5VTEwgYmVmb3JlIF9yZWZmaW5nIHRoZSBidXMuIEZpeGVzICMzNTMxMjIuCi0KLTIwMDYtMDgtMjUgMTY6NDY6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOiBEb2NzIHVwZGF0ZTogZml4IHdyb25nIGNhbGxiYWNrIHJldHVybiB2YWx1ZSBleHBsYW5hdGlvbjsgYWRkIHNvbWUgbGluZXMgYWJvdXQgdGhlIGltcGxpYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgotCSAgRG9jcyB1cGRhdGU6IGZpeCB3cm9uZyBjYWxsYmFjayByZXR1cm4gdmFsdWUgZXhwbGFuYXRpb247IGFkZAotCSAgc29tZSBsaW5lcyBhYm91dCB0aGUgaW1wbGljaXQgcmVsYXRpb25zaGlwIGJldHdlZW4gbWFpbiBsb29wCi0JICBhbmQgbWFpbiBjb250ZXh0OyByZW1vdmUgZHVwbGljYXRlIG1haW4gbG9vcCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KLQotMjAwNi0wOC0yNCAxMjozMDowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzogRG9uJ3QgbGVhayBjYXBzIGluIHVuaXQgdGVzdDsgYWRkIGEgZmV3IG1vcmUgc2ltcGxlIGNoZWNrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRG9uJ3QgbGVhayBjYXBzIGluIHVuaXQgdGVzdDsgYWRkIGEgZmV3IG1vcmUgc2ltcGxlCi0JICBjaGVja3MuCi0KLTIwMDYtMDgtMjQgMTA6NDA6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgaW1wbGVtZW50IGNhcHMgbWVyZ2luZyAoZml4ZXMgIzM1MjU4MCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfc3RydWN0dXJlX2lzX3N1YnNldF9maWVsZCksCi0JICAoZ3N0X2NhcHNfc3RydWN0dXJlX2lzX3N1YnNldCksIChnc3RfY2Fwc19tZXJnZSksCi0JICAoZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlKToKLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9jYXBzX3N1aXRlKToKLQkgIGltcGxlbWVudCBjYXBzIG1lcmdpbmcgKGZpeGVzICMzNTI1ODApCi0KLTIwMDYtMDgtMjMgMTg6NTM6NDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdG9vbHMvOiBhZGQgZGVidWctbG9nIHBsb3R0aW5nIGRldmVsb3BlciB0b29sICgjMzQwNjc0KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL01ha2VmaWxlLmFtOgotCSAgKiB0b29scy9nc3QtcGxvdC10aW1lbGluZS5weToKLQkgIGFkZCBkZWJ1Zy1sb2cgcGxvdHRpbmcgZGV2ZWxvcGVyIHRvb2wgKCMzNDA2NzQpCi0KLTIwMDYtMDgtMjMgMTY6NTE6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogSW1wcm92ZSBkZWJ1Z2dpbmcgZm9yIHRhc2sgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc3RhcnRfdGFzayksIChnc3RfcGFkX3BhdXNlX3Rhc2spLAotCSAgKGdzdF9wYWRfc3RvcF90YXNrKToKLQkgIEltcHJvdmUgZGVidWdnaW5nIGZvciB0YXNrIGZ1bmN0aW9ucy4KLQkgICogZ3N0L2dzdHRhc2suYzogKGdzdF90YXNrX2Z1bmMpLCAoZ3N0X3Rhc2tfc2V0X2xvY2spLAotCSAgKGdzdF90YXNrX3N0YXJ0KSwgKGdzdF90YXNrX3BhdXNlKSwgKGdzdF90YXNrX2pvaW4pOgotCSAgTWFrZSBzdXJlIHRoYXQgdGhlIHRhc2sgZnVuY3Rpb24gc3RhcnRlZCBhbmQgZmluaXNoZWQgYWZ0ZXIgYQotCSAgam9pbigpLgotCSAgRG9uJ3QgdHJ5IHRvIHB1c2ggdGhlIHRhc2sgZnVuY3Rpb24gb24gdGhlIHRocmVhZHBvb2wgbXVsdGlwbGUKLQkgIHRpbWVzLgotCSAgSW1wcm92ZSB0aGUgZ193YXJuaW5nIG1lc3NhZ2Ugd2l0aCBzb21lIHVzZWZ1bCBzdWdnZXN0aW9ucwotCSAgYWJvdXQgaG93IHRvIGZpeCB0aGUgcHJvYmxlbS4KLQotMjAwNi0wOC0yMyAxMDo1OTo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHV0aWxzLmM6IEhhbmRsZSBSRVNZTkMgY29ycmVjdGx5IGluIF9wcm94eV9nZXRjYXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhZF9wcm94eV9nZXRjYXBzKToKLQkgIEhhbmRsZSBSRVNZTkMgY29ycmVjdGx5IGluIF9wcm94eV9nZXRjYXBzLgotCi0yMDA2LTA4LTIzIDA5OjQ3OjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgd29yZCByZWZjb3VudGluZyBtb3JlIHByZWNpc2VseSBmb3IgZ3N0X3ZhbHVlXypfYnVmZmVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHdvcmQgcmVmY291bnRpbmcgbW9yZSBwcmVjaXNlbHkgZm9yIGdzdF92YWx1ZV8qX2J1ZmZlcgotCi0yMDA2LTA4LTIxIDE1OjE5OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0eG1sLmM6IENoYWluIHVwIHRvIHBhcmVudCBjbGFzcyBpbiBkaXNwb3NlIGZ1bmN0aW9uIGFuZCBhbHNvIHVucmVmIHRoZSBlbGVtZW50cyBpbiB0aGUgdG9wbGV2ZWxfZWxlbWVudHMgR0xpc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHhtbC5jOiAoZ3N0X3htbF9kaXNwb3NlKSwgKGdzdF94bWxfcGFyc2VfZmlsZSksCi0JICAoZ3N0X3htbF9wYXJzZV9tZW1vcnkpLCAoZ3N0X3htbF9nZXRfZWxlbWVudCk6Ci0JICBDaGFpbiB1cCB0byBwYXJlbnQgY2xhc3MgaW4gZGlzcG9zZSBmdW5jdGlvbiBhbmQgYWxzbwotCSAgdW5yZWYgdGhlIGVsZW1lbnRzIGluIHRoZSB0b3BsZXZlbF9lbGVtZW50cyBHTGlzdC4KLQkgIERvbid0IGxlYWsgWG1sRG9jUHRyIGluIF9wYXJzZV9maWxlKCkgYW5kIF9wYXJzZV9tZW1vcnkoKS4KLQkgIEFsd2F5cyByZXR1cm4gYSByZWZlcmVuY2UgaW4gZ3N0X3htbF9nZXRfZWxlbWVudCgpIHJhdGhlcgotCSAgdGhhbiBvbmx5IHNvbWV0aW1lcy4KLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoeG1sbGF1bmNoX3BhcnNlX2NtZGxpbmUpOgotCSAgRG9uJ3QgbGVhayBHc3RYbWwgb2JqZWN0LgotCi0yMDA2LTA4LTIxIDE0OjU0OjMxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEFQSTogQWRkIGdzdF9jYXBzX21lcmdlKCkgYW5kIHVzZSBpdCBpbiBiYXNldHJhbnNmb3JtLCBmaXhlcyAjMzQ1NDQ0IGluIGEgYmV0dGVyIHdheQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3Rfc3RydWN0dXJlX2lzX2VxdWFsX2ZvcmVhY2gpLAotCSAgKGdzdF9jYXBzX21lcmdlKToKLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKToKLQkgIEFQSTogQWRkIGdzdF9jYXBzX21lcmdlKCkgYW5kIHVzZSBpdCBpbiBiYXNldHJhbnNmb3JtLCBmaXhlcyAjMzQ1NDQ0Ci0JICBpbiBhIGJldHRlciB3YXkKLQotMjAwNi0wOC0yMSAxNDowMzozMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdHhtbC5jOiBJbXBsZW1lbnQgR09iamVjdDo6ZGlzcG9zZSB2aXJ0dWFsIG1ldGhvZCBpbiBHc3RYTUwgc28gd2UgY2FuIGZyZWUgdGhlIHRvcF9lbGVtZW50cyBHTGlzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0eG1sLmM6IChnc3RfeG1sX2NsYXNzX2luaXQpLCAoZ3N0X3htbF9kaXNwb3NlKToKLQkgIEltcGxlbWVudCBHT2JqZWN0OjpkaXNwb3NlIHZpcnR1YWwgbWV0aG9kIGluIEdzdFhNTCBzbyB3ZSBjYW4gZnJlZSB0aGUKLQkgIHRvcF9lbGVtZW50cyBHTGlzdC4KLQotMjAwNi0wOC0yMSAwOTozMDowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1ZmZlci5jOiBDb3B5IGR1cmF0aW9uL29mZnNldF9lbmQvY2FwcyB3aGVuIGNyZWF0aW5nIGEgc3ViYnVmZmVyIG9mIHRoZSBjb21wbGV0ZSBwYXJlbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKSwKLQkgIChnc3RfYnVmZmVyX2NyZWF0ZV9zdWIpOgotCSAgQ29weSBkdXJhdGlvbi9vZmZzZXRfZW5kL2NhcHMgd2hlbiBjcmVhdGluZyBhIHN1YmJ1ZmZlciBvZiB0aGUKLQkgIGNvbXBsZXRlIHBhcmVudC4KLQkgIE1ha2UgdGhlIHN1YmJ1ZmZlciByZWFkLW9ubHkgd2hlbiB3ZSBtYWtlIHRoZSBtZXRhZGF0YSB3cml0YWJsZSBmb3IKLQkgIG5vdy4gRml4ZXMgIzM1MTc2OC4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWRkZWQgY2hlY2sgZm9yIG1ldGFkYXRhIGNvcHkgd2hlbiBjcmVhdGluZyBzdWJidWZmZXJzLgotCi0yMDA2LTA4LTIxIDA5OjIwOjQyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogT25seSBjYWxsIGRvd25zdHJlYW0gYnVmZmVyX2FsbG9jIGlmIHRyYW5zZm9ybSBlbGVtZW50IGlzIHBhc3N0aHJvdWdoIG9yIGFsd2F5c19pbl8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKLQkgIE9ubHkgY2FsbCBkb3duc3RyZWFtIGJ1ZmZlcl9hbGxvYyBpZiB0cmFuc2Zvcm0gZWxlbWVudCBpcyBwYXNzdGhyb3VnaAotCSAgb3IgYWx3YXlzX2luX3BsYWNlLiBDbG9zZXMgIzM1MDQ0OS4KLQotMjAwNi0wOC0yMCAxOTozNjoyMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBDaGFuZ2VMb2c6IENoYW5nZUxvZyBzdXJnZXJ5IHRvIGFkZCBjb21tZW50cyB0byBwcmV2aW91cyBjaGFuZ2VzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkgdG8gYWRkIGNvbW1lbnRzIHRvIHByZXZpb3VzIGNoYW5nZXMKLQotMjAwNi0wOC0yMCAxOTozMDowOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBTaW1wbGlmeSBjYXBzIHRvIGdldCByaWQgb2YgZHVwbGljYXRlcywgZml4ZXMgIzM0NTQ0NAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYWN0aXZlKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzKToKLQkgIFNpbXBsaWZ5IGNhcHMgdG8gZ2V0IHJpZCBvZiBkdXBsaWNhdGVzLCBmaXhlcyAjMzQ1NDQ0Ci0KLTIwMDYtMDgtMjAgMTU6NTU6MTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdHZhbHVlLio6IFVzZSB0aGVzZSBvcHRpbWl6YXRpb25zIG9ubHkgaW50ZXJuYWx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIFVzZSB0aGVzZSBvcHRpbWl6YXRpb25zIG9ubHkgaW50ZXJuYWx5LgotCi0yMDA2LTA4LTIwIDE0OjMwOjIwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3R2YWx1ZS4qOiBTYXZlcyB0aGUgZXhwZW5zaXZlIGxvb2t1cCBvZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBpbiBtYW55IGNhc2VzICgjMzQ1NDQ0KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbXBhcmVfbGlzdCksCi0JICAoZ3N0X3ZhbHVlX2NvbXBhcmVfZnJhY3Rpb25fcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZnJhY3Rpb25fZnJhY3Rpb25fcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb25fcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9mcmFjdGlvbl9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2ZyYWN0aW9uX3JhbmdlX2ZyYWN0aW9uX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfZ2V0X2NvbXBhcmVfZnVuYyksIChnc3RfdmFsdWVfY29tcGFyZSksCi0JICAoZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jKToKLQkgICogZ3N0L2dzdHZhbHVlLmg6Ci0JICBTYXZlcyB0aGUgZXhwZW5zaXZlIGxvb2t1cCBvZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBpbiBtYW55IGNhc2VzCi0JICAoIzM0NTQ0NCkKLQotMjAwNi0wOC0xOCAxMzo0MTowMiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzogRGlzYWJsZSB0ZXN0IHRoYXQgcmVxdWlyZSBnc3RkZWJ1ZyBpZiBpdCB3YXNuJ3QgYnVpbHQgaW4gY29yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jOiAoZ3N0X2luZm9fc3VpdGUpOgotCSAgRGlzYWJsZSB0ZXN0IHRoYXQgcmVxdWlyZSBnc3RkZWJ1ZyBpZiBpdCB3YXNuJ3QgYnVpbHQgaW4gY29yZS4KLQotMjAwNi0wOC0xOCAxMDo1MjozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3JhbmRvbS9lbnNvbmljL2xvZ2dpbmcudHh0OiB1cGRhdGUgaWRlYXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9lbnNvbmljL2xvZ2dpbmcudHh0OgotCSAgdXBkYXRlIGlkZWFzCi0JICAqIGdzdC9nc3RpbmZvLmM6IChnc3RfZGVidWdfbG9nX2RlZmF1bHQpOgotCSAgcmVvcmRlciBmaWVsZHMsIHNhdmUgc29tZSBjb2x1bW5zLCBhZGQgb3B0aW5hbCBjb2xvciBjb2RlcyBmb3IgbG9nLQotCSAgbGV2ZWxzCi0KLTIwMDYtMDgtMTggMDg6MDc6MTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vZW5zb25pYy9sb2dnaW5nLnR4dDogYWRkIGlkZWFzIGFib3V0IG1ha2luZyB0aGUgbG9ncyBhYml0IG1vcmUgdXNlZnVsCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vZW5zb25pYy9sb2dnaW5nLnR4dDoKLQkgIGFkZCBpZGVhcyBhYm91dCBtYWtpbmcgdGhlIGxvZ3MgYWJpdCBtb3JlIHVzZWZ1bAotCi0yMDA2LTA4LTE3IDE4OjExOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3B3Zy86IFVwZGF0ZSBmb3IgMC4xMCBBUEkgKCMzNDA2MjcpLiBBZGQgbXlzZWxmIHRvIGF1dGhvcnMgbGlzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1ldmVudHMueG1sOgotCSAgKiBkb2NzL3B3Zy90aXRsZXBhZ2UueG1sOgotCSAgVXBkYXRlIGZvciAwLjEwIEFQSSAoIzM0MDYyNykuIEFkZCBteXNlbGYKLQkgIHRvIGF1dGhvcnMgbGlzdC4KLQotMjAwNi0wOC0xNyAxMDo0NjoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgTWFrZSBnc3RjaGVjayBzdHVmZiBzaG93IHVwIGluIGRvY3MgKHN0aWxsIG5lZWRzIHRvIGJlIGRvY3VtZW50ZWQgcHJvcGVybHkgdGhvdWdoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5jOgotCSAgTWFrZSBnc3RjaGVjayBzdHVmZiBzaG93IHVwIGluIGRvY3MgKHN0aWxsIG5lZWRzIHRvCi0JICBiZSBkb2N1bWVudGVkIHByb3Blcmx5IHRob3VnaCkuCi0KLTIwMDYtMDgtMTYgMTE6NDc6NTQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBBZGQgaW50ZXJuYWwgaGVscGVycyBmb3IgcHJlLXJlZ2lzdGVyaW5nIHF1YXJrcyBmcm9tIHN0YXRpYyBzdHJpbmdzIGFuZCB1c2luZyB0aGUgcXVhcmsgdmFsdWVzIGRpcmVjdGx5IGluc3RlYWQgb2YgbG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6Ci0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgKiBnc3QvZ3N0cXVhcmsuYzogKF9wcml2X2dzdF9xdWFya3NfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3RxdWFyay5oOgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfcG9zaXRpb24pLAotCSAgKGdzdF9xdWVyeV9zZXRfcG9zaXRpb24pLCAoZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKSwKLQkgIChnc3RfcXVlcnlfbmV3X2R1cmF0aW9uKSwgKGdzdF9xdWVyeV9zZXRfZHVyYXRpb24pLAotCSAgKGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiksIChnc3RfcXVlcnlfbmV3X2NvbnZlcnQpLAotCSAgKGdzdF9xdWVyeV9zZXRfY29udmVydCksIChnc3RfcXVlcnlfcGFyc2VfY29udmVydCksCi0JICAoZ3N0X3F1ZXJ5X25ld19zZWdtZW50KSwgKGdzdF9xdWVyeV9zZXRfc2VnbWVudCksCi0JICAoZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQpLCAoZ3N0X3F1ZXJ5X25ld19zZWVraW5nKSwKLQkgIChnc3RfcXVlcnlfc2V0X3NlZWtpbmcpLCAoZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcpOgotCSAgQWRkIGludGVybmFsIGhlbHBlcnMgZm9yIHByZS1yZWdpc3RlcmluZyBxdWFya3MgZnJvbSBzdGF0aWMgc3RyaW5ncwotCSAgYW5kIHVzaW5nIHRoZSBxdWFyayB2YWx1ZXMgZGlyZWN0bHkgaW5zdGVhZCBvZiBsb29raW5nIHRoZW0gdXAgd2hlbgotCSAgY3JlYXRpbmcgYW5kIHBhcnNpbmcgcXVlcmllcy4gQ2FuIGJlIHVzZWQgZm9yIGV2ZW50IGNvbnN0cnVjdGlvbiB0b28uCi0JICBDbG9zZXMgIzM1MDQzMi4KLQotMjAwNi0wOC0xNiAwODo1NDo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBGaXggYm9ndXMgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6Ci0JICBGaXggYm9ndXMgZG9jcy4KLQotMjAwNi0wOC0xNSAxODo0NTozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHV0aWxzLmM6IEZpeCBtZW1sZWFrICgjMzUxNTAyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyk6Ci0JICBGaXggbWVtbGVhayAoIzM1MTUwMikuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3V0aWxzX3N1aXRlKToKLQkgIEFkZCB1bml0IHRlc3QgZm9yIG1vc3Qgb2YgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nKCkKLQkgIChub3QgdGhhdCBvbmUgd291bGQgd2FudCB0byBlbmNvdXJhZ2UgdXNlIG9mIHRoaXMgZnVuY3Rpb24pLgotCi0yMDA2LTA4LTE1IDE4OjI5OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOiBVc2UgY29uc3QgZ2NoYXIgKiB2YXJpYWJsZXMgaW4gZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyBtYWNybyB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgVXNlIGNvbnN0IGdjaGFyICogdmFyaWFibGVzIGluIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcKLQkgIG1hY3JvIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIChhbmQgZG9uJ3QgdXNlIHRhYnMgZm9yCi0JICBpbmRlbnRpbmcpLgotCi0yMDA2LTA4LTE1IDEwOjA4OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy9nc3QtbGF1bmNoLmM6IE1vcmUgc3BhY2Ugb24gdGhlIGxlZnQgZm9yIHRoZSB0YWcgbmFtZXMsIHRvIGNhdGVyIGZvciB0aGUgJ2V4dGVuZGVkIGNvbW1lbnQnIHRhZyAobm90IHRvdWNoaW5nIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChwcmludF90YWcpOgotCSAgTW9yZSBzcGFjZSBvbiB0aGUgbGVmdCBmb3IgdGhlIHRhZyBuYW1lcywgdG8gY2F0ZXIKLQkgIGZvciB0aGUgJ2V4dGVuZGVkIGNvbW1lbnQnIHRhZyAobm90IHRvdWNoaW5nIHRoZQotCSAgc3RyaW5nIGZvciB0aGUgZmlyc3QgbGluZSBzaW5jZSBpdCdzIHRyYW5zbGF0ZWQpLgotCi0yMDA2LTA4LTE1IDA5OjQ0OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeTogZG9uJ3QgZm9yZ2V0IHRvIG1lbnRpb24gdGhlIG90aGVyIGNoYW5nZSBpbiB0aGUgQ2hhbmdlTG9nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiBkb24ndCBmb3JnZXQgdG8gbWVudGlvbiB0aGUgb3RoZXIgY2hhbmdlIGluIHRoZSBDaGFuZ2VMb2cKLQotMjAwNi0wOC0xNSAwOTozMzoyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDogRml4IEFTU0VSVF9DUklUSUNBTCBhbmQgQVNTRVJUX1dBUk5JTkcgbWFjcm9zIHRvIGFjdHVhbGx5IHByaW50IHNvbWV0aGluZyB3aGVuIHRoZXkgZmFpbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgRml4IEFTU0VSVF9DUklUSUNBTCBhbmQgQVNTRVJUX1dBUk5JTkcgbWFjcm9zIHRvIGFjdHVhbGx5Ci0JICBwcmludCBzb21ldGhpbmcgd2hlbiB0aGV5IGZhaWwuCi0KLTIwMDYtMDgtMTQgMTk6MDQ6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIEdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCAoIzM1MDkzNSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKF9nc3RfdGFnX2luaXRpYWxpemUpOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgQVBJOiBhZGQgR1NUX1RBR19FWFRFTkRFRF9DT01NRU5UICgjMzUwOTM1KS4KLQotMjAwNi0wOC0xNCAxNzoyOTozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGluZm8uYzogTWFrZSBHU1RfUFRSX0ZPUk1BVCBwcmludCBtZXNzYWdlcyBhcyB3ZWxsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6IChnc3RfZGVidWdfcHJpbnRfb2JqZWN0KToKLQkgIE1ha2UgR1NUX1BUUl9GT1JNQVQgcHJpbnQgbWVzc2FnZXMgYXMgd2VsbC4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGluZm8uYzogKHByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9pbmZvX3N1aXRlKToKLQkgIE1vcmUgdGVzdHMuCi0KLTIwMDYtMDgtMTQgMTU6MzM6MTcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiBJZiB0aGUgR3N0RWxlbWVudENsYXNzIGRvZXNuJ3QgaGF2ZSBhIEdzdEVsZW1lbnREZXRhaWxzIHdpdGggYWxsIGZpZWxkcyB0aGVuIGVycm9yIG91dCBuaWNlbC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiAoZ3N0X2VsZW1lbnRfcmVnaXN0ZXIpOgotCSAgSWYgdGhlIEdzdEVsZW1lbnRDbGFzcyBkb2Vzbid0IGhhdmUgYSBHc3RFbGVtZW50RGV0YWlscyB3aXRoIGFsbCBmaWVsZHMKLQkgIGZpbGxlZCB1cCBjb3JyZWN0bHkgKGxvbmduYW1lLCBkZXNjcmlwdGlvbiBBTkQgYXV0aG9yKSwgdGhlbiBlcnJvciBvdXQKLQkgIG5pY2VseSBpbnN0ZWFkIG9mIGNyYXNoaW5nLgotCi0yMDA2LTA4LTE0IDEyOjM1OjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0c3RydWN0dXJlLmM6IEZpeCB0eXBvIGluIGRvY3MgYW5kIHJlLXdyYXAgZG9jcyBibHVyYiB0byBub3QgZXhjZWVkIDgwIGNoYXJzL2xpbmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgRml4IHR5cG8gaW4gZG9jcyBhbmQgcmUtd3JhcCBkb2NzIGJsdXJiIHRvIG5vdCBleGNlZWQgODAgY2hhcnMvbGluZS4KLQkgICogZ3N0L2dzdHZhbHVlLmg6Ci0JICBFeHBhbmQgb24gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhcnJheXMgYW5kIGxpc3RzIGFzIHdlIHVzZSB0aGVtLgotCi0yMDA2LTA4LTE0IDA3OjQ0OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogSWYgdGhlIHBhcmVudCBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gZmFpbGVkLCBkb24ndCBhc3N1bWUgd2UgY2FuIHNhZmVseSBzdG9wIHRoZSBzb3VyY2UsIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgSWYgdGhlIHBhcmVudCBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gZmFpbGVkLCBkb24ndCBhc3N1bWUgd2UgY2FuIHNhZmVseQotCSAgc3RvcCB0aGUgc291cmNlLCB0aGlzIHdpbGwgYmUgZG9uZSB3aGVuIHRoZSBwYWRzIGFyZSBkZWFjdGl2YXRlZC4KLQotMjAwNi0wOC0xNCAwNzozNTowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogU21hbGwgZG9jIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgKiBnc3QvZ3N0dGFzay5jOiAoZ3N0X3Rhc2tfam9pbik6Ci0JICBTbWFsbCBkb2MgdXBkYXRlcy4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKSwgKGdzdF9wYWRfYWN0aXZhdGVfcHVzaCksCi0JICAoZ3N0X3BhZF9zdG9wX3Rhc2spOgotCSAgV2hlbiBwYWQgKGRlKWFjdGl2YXRpb24gZmFpbGVkIGZvciBzb21lIHJlYXNvbiwgcmVzdG9yZSB0aGUgb2xkCi0JICBhY3RpdmF0aW9uIG1vZGUgYW5kIHNldCB0aGUgcGFkIHRvIGZsdXNoaW5nIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhlCi0JICBwYWQgaXMgZGVhY3RpdmF0ZWQuCi0JICBJZiB0aGUgX3Rhc2tfam9pbigpIGZhaWxlZCwgcmVpbnN0YWxsIHRoZSB0YXNrIG9uIHRoZSBwYWQgc28gdGhhdCBpdCBjYW4KLQkgIGJlIHN0b3BwZWQgbGF0ZXIgYW5kIHJldHVybiBhbiBlcnJvci4KLQotMjAwNi0wOC0xMSAxNToyNjozMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBHU1RfRElTQUJMRV9ERVBSRUNBVEVEIGlzIG9ubHkgZm9yIHVzZXJzIG9mIEFQSSB0aGF0IGRvbid0IHdhbnQgdG8gc2VlIGRlcHJlY2F0ZWQgZnVuY3Rpb25zIGluIHRoZSBoZWFkZXJzOyBwZW9wbGUgdGguLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wOC0xMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IChnc3RfZHBfcGFja2V0aXplcl9uZXcpOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiAoZ3N0X2RwX3N1aXRlKTogR1NUX0RJU0FCTEVfREVQUkVDQVRFRAotCSAgaXMgb25seSBmb3IgdXNlcnMgb2YgQVBJIHRoYXQgZG9uJ3Qgd2FudCB0byBzZWUgZGVwcmVjYXRlZAotCSAgZnVuY3Rpb25zIGluIHRoZSBoZWFkZXJzOyBwZW9wbGUgdGhhdCB3YW50IHRvIGNvbXBpbGUgb3V0Ci0JICBkZXByZWNhdGVkIGNvZGUgc2hvdWxkIHBhc3MgLURHU1RfUkVNT1ZFX0RFUFJFQ0FURUQgaW50byB0aGUKLQkgIENGTEFHUy4gRml4ZXMgdGhlIGJ1aWxkIG9mIG11bHRpZmRzaW5rLCBvciB3aWxsIHNvb24uLgotCi0yMDA2LTA4LTExIDE1OjI0OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgR3N0Q2xvY2tDbGFzcyB2bWV0aG9kIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBHc3RDbG9ja0NsYXNzIHZtZXRob2QgZG9jcy4KLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgIE1hcmsgI2VuZGlmIHdpdGggY29tbWVudCBmb3IgYXNzb2NpYXRlZCAjaWYKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfaWRfd2FpdCk6Ci0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgQWRkIHZtZXRob2Qgd2FpdF9qaXR0ZXIgdG8gYXZvaWQgYW4gdW5uZWVkZWQgX2dldF90aW1lKCkgZm9yCi0JICBtb3N0IGNsb2NrIGltcGxlbWVudGF0aW9ucy4KLQkgIERvY3VtZW50IHZtZXRob2RzLgotCSAgRmxlc2ggb3V0IGRvY3MgYWJvdXQgcmVzb2x1dGlvbiBtZXRob2RzLgotCSAgQVBJOiBHc3RDbG9ja0NsYXNzOjp3YWl0X2ppdHRlcgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3N5c3RlbV9jbG9ja19hc3luY190aHJlYWQpLAotCSAgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXJfdW5sb2NrZWQpLAotCSAgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXIpOgotCSAgVXNlIGJhc2UgY2xhc3Mgd2FpdF9qaXR0ZXIgdmFyaWFudCBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UKLQkgIGR1ZSB0byBsZXNzIGNsb2NrIHBvbGxpbmcuCi0KLTIwMDYtMDgtMTEgMTU6MDc6NTggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3QuYzogU2V0IGdzdCBhcyBiZWluZyBpbml0aWFsaXplZCBiZWZvcmUgc2Nhbm5pbmcvdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5LCBzaW5jZSB0aGVyZSBtaWdodCBiZSBzb21lIHBsdWdpbnMgdGhhdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzogKGdzdF9pbml0X2NoZWNrKSwgKGluaXRfcG9zdCk6Ci0JICBTZXQgZ3N0IGFzIGJlaW5nIGluaXRpYWxpemVkIGJlZm9yZSBzY2FubmluZy91cGRhdGluZyB0aGUgcmVnaXN0cnksCi0JICBzaW5jZSB0aGVyZSBtaWdodCBiZSBzb21lIHBsdWdpbnMgdGhhdCBjYWxsIGdzdF9pbml0KCkgYW5kIHdlIGRvbid0Ci0JICB3YW50IHRvIGxvb3AgYmFjayBpbi4KLQkgIENsb3NlcyAjMzUwODc5Ci0KLTIwMDYtMDgtMTEgMTM6MTM6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIE1lbnRpb24gdGhhdCB3ZSBmaXhlZCBidWcgIzM0OTk0MyB3aXRoIHRoZSBsYXN0IGNvbW1pdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgTWVudGlvbiB0aGF0IHdlIGZpeGVkIGJ1ZyAjMzQ5OTQzIHdpdGggdGhlIGxhc3QgY29tbWl0LgotCi0yMDA2LTA4LTExIDEzOjA1OjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6IEJyaW5nIGRvY3MgaW4gbGluZSB3aXRoIHRoZSBjb2RlLiBNb3N0bHkgdGhlIHNpZ24gb2YgdGhlIGppdHRlciB3YXMgd3JvbmcgaW4gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgotCSAgQnJpbmcgZG9jcyBpbiBsaW5lIHdpdGggdGhlIGNvZGUuIE1vc3RseSB0aGUgc2lnbiBvZiB0aGUgaml0dGVyIHdhcwotCSAgd3JvbmcgaW4gdGhlIGRvY3MuCi0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgRml4IHRoZSBkb2NzIGZvciB0aGUgaml0dGVyLgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfY3VzdG9tKSwgKGdzdF9ldmVudF9uZXdfdGFnKSwKLQkgIChnc3RfZXZlbnRfcGFyc2VfdGFnKSwgKGdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemUpLAotCSAgKGdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZSksIChnc3RfZXZlbnRfcGFyc2VfcW9zKSwKLQkgIChnc3RfZXZlbnRfbmV3X3NlZWspLCAoZ3N0X2V2ZW50X3BhcnNlX3NlZWspLAotCSAgKGdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbik6Ci0JICBNYWtlIHN1cmUgdGhlIEdzdFN0cnVjdHVyZSBoYXMgbm8gcGFyZW50IHdoZW4gY3JlYXRpbmcgY3VzdG9tCi0JICBldmVudHMuCi0JICBBZGQgc29tZSBtb3JlIGFyZ3VtZW50IGNoZWNraW5nIHNvIHRoYXQgd2UgYXZvaWQgMC4wIHJhdGVzLgotCSAgRmxlc2ggb3V0IHRoZSBkb2NzIGZvciB0aGUgUW9TIGV2ZW50IHNvbWUgbW9yZS4KLQotMjAwNi0wOC0xMSAxMDoyMTozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgRm9yZ290IHRvIG1lbnRpb24gZml4ZWQgYnVnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGb3Jnb3QgdG8gbWVudGlvbiBmaXhlZCBidWcuCi0KLTIwMDYtMDgtMTEgMTA6MTk6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvYyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3QuYzogKGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXApLCAoZ3N0X2luaXRfY2hlY2spLAotCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X2ZvcmtpbmcpLCAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0cnkpLAotCSAgKHBhcnNlX29uZV9vcHRpb24pLCAocGFyc2VfZ29wdGlvbl9hcmcpLCAoZ3N0X2RlaW5pdCksCi0JICAoZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCksIChnc3RfcmVnaXN0cnlfZm9ya19zZXRfZW5hYmxlZCk6Ci0JICAqIGdzdC9nc3QuaDoKLQkgIERvYyB1cGRhdGVzLgotCSAgQWRkZWQgQVBJIGFuZCBjb21tYW5kIGxpbmUgb3B0aW9uIHRvIGRpc2FibGUgcmVnaXN0cnkgZm9ya2luZyBpbgotCSAgYWRkaXRpb24gdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLgotCSAgQ29uc3RpZnkgc29tZSBzdGF0aWMgYXJyYXlzLgotCSAgQWRkZWQgc29tZSBtb3JlIGRlYnVnLgotCSAgRG9uJ3QgZGVpbml0IHR3aWNlLgotCSAgQVBJOiBnc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkKCkKLQkgIEFQSTogZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQoKQotCSAgQVBJOiAtLWdzdC1kaXNhYmxlLXJlZ2lzdHJ5LWZvcmsgY29tbWFuZCBsaW5lIG9wdGlvbgotCi0yMDA2LTA4LTExIDA5OjU5OjI5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0LmM6IEZpeCB0eXBvIGluIGVycm9yIG1lc3NhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoZ3N0X2luaXQpOgotCSAgRml4IHR5cG8gaW4gZXJyb3IgbWVzc2FnZS4KLQotMjAwNi0wOC0xMCAyMDowNTozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDogZml4IEFCSSBzaXplLWNvcnJlY3Rpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkgIGZpeCBBQkkgc2l6ZS1jb3JyZWN0aW9uCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6IChnc3RfZHBfc3VpdGUpOgotCSAgbWFrZSB0ZXN0cyB0aGF0IHVzZSBkZXByZWNhdGVkIEFQSSBjb25kaXRpb25hbAotCi0yMDA2LTA4LTEwIDE5OjQ2OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEFQSTogYWRkIGdzdF9vYmplY3Rfe3MsZ31ldF9jb250cm9sX3JhdGUoKSwgYWRkIHByaXZhdGUgZGF0YSBzZWN0aW9uLCBmaXggZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKF9nc3RfY29udHJvbGxlcl9nZXRfcHJvcGVydHkpLCAoX2dzdF9jb250cm9sbGVyX3NldF9wcm9wZXJ0eSksCi0JICAoX2dzdF9jb250cm9sbGVyX2luaXQpLCAoX2dzdF9jb250cm9sbGVyX2NsYXNzX2luaXQpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzogKGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZSksCi0JICAoZ3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlKToKLQkgIEFQSTogYWRkIGdzdF9vYmplY3Rfe3MsZ31ldF9jb250cm9sX3JhdGUoKSwgYWRkIHByaXZhdGUgZGF0YSBzZWN0aW9uLAotCSAgZml4IGRvY3MKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiAoZ3N0X2RwX3BhY2tldGl6ZXJfbmV3KToKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgotCSAgYWRkIGRlcHJlY2F0aW9uIGd1YXJkcyB0byBtYWtlIGd0ay1kb2MgaGFwcHkgYW5kIGFsbG93IGRpc2FibGluZyBjcnVmdAotCi0yMDA2LTA4LTA5IDE1OjI2OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay86IExldCdzIGVuYWJsZSB0aGUgbmV3IHVuaXQgdGVzdCBhcyB3ZWxsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvLmN2c2lnbm9yZToKLQkgIExldCdzIGVuYWJsZSB0aGUgbmV3IHVuaXQgdGVzdCBhcyB3ZWxsLgotCi0yMDA2LTA4LTA5IDE1OjEzOjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBUEk6IGFkZCBHU1RfU0VHTUVOVF9GT1JNQVQsIHdoaWNoIGlzIGEgcHJpbnRmIGV4dGVuc2lvbiB3ZSByZWdpc3RlciB0aGF0IGxldHMgdXMgZWFzaWx5IGR1bXAgR3N0U2VnbWVudHMgaW50byBkZWJ1ZyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgICogZ3N0L2dzdGluZm8uYzogKF9nc3RfZGVidWdfaW5pdCksIChnc3RfZGVidWdfcHJpbnRfc2VnbWVudCksCi0JICAoX2dzdF9pbmZvX3ByaW50Zl9leHRlbnNpb25fcHRyKSwKLQkgIChfZ3N0X2luZm9fcHJpbnRmX2V4dGVuc2lvbl9zZWdtZW50KToKLQkgIEFQSTogYWRkIEdTVF9TRUdNRU5UX0ZPUk1BVCwgd2hpY2ggaXMgYSBwcmludGYgZXh0ZW5zaW9uIHdlCi0JICByZWdpc3RlciB0aGF0IGxldHMgdXMgZWFzaWx5IGR1bXAgR3N0U2VnbWVudHMgaW50byBkZWJ1ZwotCSAgbG9ncyAoIzM1MDQxOSkuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmM6IChzZWdtZW50X3ByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMpLAotCSAgKGluZm9fc2VnbWVudF9mb3JtYXRfcHJpbnRmX2V4dGVuc2lvbiksIChnc3RfaW5mb19zdWl0ZSk6Ci0JICBBZGQgc2ltcGxlIHVuaXQgdGVzdCB0aGF0IGxvZ3MgYSBidW5jaCBvZiBkaWZmZXJlbnQgc2VnbWVudHMgKG5vdAotCSAgdmFsZ3JpbmRlZCBhdCB0aGUgbW9tZW50IGJlY2F1c2Ugb2YgbGVha3MgaW4gZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24pLgotCi0yMDA2LTA4LTA5IDExOjAxOjIwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogRXZlbiBpZiB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSBwcm9wZXIgZm9ybWF0IHRvIHJlcXVlc3QgZG93bnN0cmVhbSwgY2FsbCBidWZmZXJfYWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKLQkgIEV2ZW4gaWYgd2UgY2FuJ3QgZmlndXJlIG91dCB0aGUgcHJvcGVyIGZvcm1hdCB0byByZXF1ZXN0IGRvd25zdHJlYW0sCi0JICBjYWxsIGJ1ZmZlcl9hbGxvYygpIGRvd25zdHJlYW0gd2l0aCB0aGUgaW5wdXQgcGFyYW1ldGVycyB3aXRob3V0IHNldHRpbmcKLQkgIHRoZSBjYXBzIG9uIHRoZSBzcmNwYWQuIFRoaXMgd2lsbCBmb3JjZSBuZWdvdGlhdGlvbiBpbiB0aGUgY2hhaW4KLQkgIGZ1bmN0aW9uLgotCSAgQ2xvc2VzICMzNTA0NDkKLQotMjAwNi0wOC0wOCAxNjoyNDo1OCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmM6IFVubGlua2luZyBmcm9tIGEgcGFkIHdpdGhvdXQgYSB0YXJnZXQgaXMgbm93IGEgcGVyZmVjdGx5IHZhbGlkIGNhc2Ugd2hpY2ggc2hvdWxkIE5PVCByYWlzZSBhbiBhc3NlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX2RvX3VubGluayk6Ci0JICBVbmxpbmtpbmcgZnJvbSBhIHBhZCB3aXRob3V0IGEgdGFyZ2V0IGlzIG5vdyBhIHBlcmZlY3RseSB2YWxpZCBjYXNlCi0JICB3aGljaCBzaG91bGQgTk9UIHJhaXNlIGFuIGFzc2VydGlvbi4KLQkgIFRoaXMgY2FzZSB3b3VsZCBoYXBwZW4gaWYgYSBsaW5rZWQgZ2hvc3RwYWQgaXRzIHRhcmdldCBzZXQgdG8gTlVMTCBhZnRlcgotCSAgaXQgd2FzIHByZXZpb3VzbHkgbGlua2VkLgotCi0yMDA2LTA4LTA4IDA5OjU2OjQ1ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiBBbHNvIGNvbW1lbnQgb3V0IHRoZSB0ZXN0IChzZWUgYmVsb3cpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6Ci0JICBBbHNvIGNvbW1lbnQgb3V0IHRoZSB0ZXN0IChzZWUgYmVsb3cpLgotCi0yMDA2LTA4LTA4IDA5OjA3OjM0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiBVc2UgdGhlIGFyY2hpdGVjdHVyZSBpbmZvcm1hdGlvbiBmcm9tIGNvbmZpZy5oIGFuZCBub3QgZ2NjIG1hY3JvcyBpbiBvcmRlciB0byBwcm9wZXJseSBkaXNhYmwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiAoZ3N0X2RwX3N1aXRlKToKLQkgIFVzZSB0aGUgYXJjaGl0ZWN0dXJlIGluZm9ybWF0aW9uIGZyb20gY29uZmlnLmggYW5kIG5vdCBnY2MgbWFjcm9zCi0JICBpbiBvcmRlciB0byBwcm9wZXJseSBkaXNhYmxlIGEgdGVzdCB0aGF0IGZhaWxzIG9uIFBQQzY0LgotCi0yMDA2LTA4LTA0IDE1OjE1OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBEb24ndCBjcmFzaCBwcmludGluZyB0aGUgd2FybmluZyBpZiB0aGUgcGFkIGhhcyBubyBwYXJlbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3JlbW92ZV9wYWQpOgotCSAgRG9uJ3QgY3Jhc2ggcHJpbnRpbmcgdGhlIHdhcm5pbmcgaWYgdGhlIHBhZCBoYXMgbm8gcGFyZW50LgotCi0yMDA2LTA4LTAyIDE1OjE5OjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IE1ha2UgZGVidWcgY2F0ZWdvcnkgc3RhdGljCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSAgKGdzdF9kcF9oZWFkZXJfZnJvbV9idWZmZXJfYW55KSwgKGdzdF9kcF9wYWNrZXRfZnJvbV9jYXBzX2FueSksCi0JICAoZ3N0X2RwX2NyYyksIChnc3RfZHBfaGVhZGVyX3BheWxvYWRfbGVuZ3RoKSwKLQkgIChnc3RfZHBfaGVhZGVyX3BheWxvYWRfdHlwZSksIChnc3RfZHBfcGFja2V0X2Zyb21fZXZlbnQpLAotCSAgKGdzdF9kcF9wYWNrZXRfZnJvbV9ldmVudF8xXzApLCAoZ3N0X2RwX2J1ZmZlcl9mcm9tX2hlYWRlciksCi0JICAoZ3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQpLCAoZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0XzBfMiksCi0JICAoZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0KSwgKGdzdF9kcF92YWxpZGF0ZV9oZWFkZXIpLAotCSAgKGdzdF9kcF92YWxpZGF0ZV9wYXlsb2FkKToKLQkgIE1ha2UgZGVidWcgY2F0ZWdvcnkgc3RhdGljCi0JICBDb25zdGlmeSB0aGUgY3JjIHRhYmxlLgotCSAgRG8gc29tZSBtb3JlIGFyZyBjaGVja2luZyBpbiBwdWJsaWMgZnVuY3Rpb25zLgotCSAgRml4IHNvbWUgZG9jcyBhbmQgZG8gc29tZSBzbWFsbCBjbGVhbnVwcy4KLQkgICogdGVzdHMvY2hlY2svbGlicy9nZHAuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9kcF9zdWl0ZSk6Ci0JICBBZGQgc29tZSBtb3JlIGNoZWNrcyB0byBzZWUgaWYgR0RQIGRlYWxzIHdpdGggYm9ndXMgaW5wdXQuCi0KLTIwMDYtMDctMzEgMTY6MzQ6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jOiBGaXggR3N0VmFsdWVMaXN0IGNvbXBhcmlzb24gY29kZS4gRml4ZXMgIzM0NzI5My4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9jb21wYXJlX2xpc3QpOgotCSAgRml4IEdzdFZhbHVlTGlzdCBjb21wYXJpc29uIGNvZGUuIEZpeGVzICMzNDcyOTMuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQ2hlY2sgdG8gdGVzdCBHc3RWYWx1ZUxpc3QgY29tcGFyaXNvbi4KLQotMjAwNi0wNy0zMSAxNToxMjo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFVzZSBPQkpFQ1RfTE9DSyBhbmQgcmVmY291bnRpbmcgdG8gZ2V0IHRoZSBwYWQgY2FwcyBpbiB0aGUgYnVmZmVyX2FsbG9jIGZ1bmN0aW9uIGJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICBVc2UgT0JKRUNUX0xPQ0sgYW5kIHJlZmNvdW50aW5nIHRvIGdldCB0aGUgcGFkIGNhcHMgaW4gdGhlCi0JICBidWZmZXJfYWxsb2MgZnVuY3Rpb24gYmVjYXVzZSB0aGUgY2FwcyBjb3VsZCBjaGFuZ2Ugd2hpbGUgd2UgYXJlCi0JICBidXN5IHdpdGggdGhlbS4gRml4ZXMgIzM0OTEwNQotCi0yMDA2LTA3LTMxIDE1OjEyOjAxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZi91bnJlZiBwYWlyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSk6Ci0JICBSZW1vdmUgdW5uZWNlc3NhcnkgcmVmL3VucmVmIHBhaXIKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIE1ha2Ugc3VyZSB0byBmcmVlIHRoZSBwYXJzZSBidWZmZXIgb24gYWxsIGNvZGUgcGF0aHMuCi0JICBNb3ZlIGEgZ19mcmVlIHVwIHRvIHRoZSBlcnJvciBoYW5kbGVyIHdoZXJlIGl0J3MgZWFzaWVyIHRvIHNlZS4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6ICh0ZXN0X2V2ZW50KToKLQkgIEV4dGVuZGluZyB0aW1lb3V0IGZvciBkb3duc3RyZWFtIHRyYXZlbGxpbmcgZXZlbnRzIHRvIDEwIHNlY29uZHMgdG8KLQkgIGhvcGVmdWxseSBhdm9pZCBpbnRlcm1pdHRlbnQgZmFpbHVyZSBvbiB0aGUgYnVpbGRib3RzLgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IChydW5fZGVsYXllZF90ZXN0KToKLQkgIERvbid0IG1hbnVhbGx5IHNldCB0aGUgc3RhdGUgb2YgdGhlIHNyYyBlbGVtZW50IC0gaXQgd2lsbCBoYXBwZW4gYXMgYQotCSAgbmF0dXJhbCBjb25zZXF1ZW5jZSBvZiB0aGUgcGlwZWxpbmUgY2hhbmdpbmcgc3RhdGUsIGFuZCB0aGF0IHdheSBpdAotCSAgd2lsbCBkbyBpdCBpbiB0aGUgcmlnaHQgb3JkZXIgdG9vLgotCi0yMDA2LTA3LTMxIDE1OjA3OjMwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IFJlbW92ZSB1bm5lY2Vzc2FyeSByZWYvdW5yZWYgcGFpcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUpOgotCSAgUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZi91bnJlZiBwYWlyCi0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICBNYWtlIHN1cmUgdG8gZnJlZSB0aGUgcGFyc2UgYnVmZmVyIG9uIGFsbCBjb2RlIHBhdGhzLgotCSAgTW92ZSBhIGdfZnJlZSB1cCB0byB0aGUgZXJyb3IgaGFuZGxlciB3aGVyZSBpdCdzIGVhc2llciB0byBzZWUuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOiAodGVzdF9ldmVudCk6Ci0JICBFeHRlbmRpbmcgdGltZW91dCBmb3IgZG93bnN0cmVhbSB0cmF2ZWxsaW5nIGV2ZW50cyB0byAxMCBzZWNvbmRzIHRvCi0JICBob3BlZnVsbHkgYXZvaWQgaW50ZXJtaXR0ZW50IGZhaWx1cmUgb24gdGhlIGJ1aWxkYm90cy4KLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAocnVuX2RlbGF5ZWRfdGVzdCk6Ci0JICBEb24ndCBtYW51YWxseSBzZXQgdGhlIHN0YXRlIG9mIHRoZSBzcmMgZWxlbWVudCAtIGl0IHdpbGwgaGFwcGVuIGFzIGEKLQkgIG5hdHVyYWwgY29uc2VxdWVuY2Ugb2YgdGhlIHBpcGVsaW5lIGNoYW5naW5nIHN0YXRlLCBhbmQgdGhhdCB3YXkgaXQKLQkgIHdpbGwgZG8gaXQgaW4gdGhlIHJpZ2h0IG9yZGVyIHRvby4KLQotMjAwNi0wNy0zMSAxNDoyMzoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHV0aWxzLmM6IFByb3RlY3QgX1BBRF9DQVBTIHdpdGggT0JKRUNUX0xPQ0suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFkX2dldF9maXhlZF9jYXBzX2Z1bmMpOgotCSAgUHJvdGVjdCBfUEFEX0NBUFMgd2l0aCBPQkpFQ1RfTE9DSy4KLQotMjAwNi0wNy0zMSAxNDoyMToxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBVc2UgX0RFQlVHX09CSkVDVCB3aGVuIGl0IG1ha2VzIHNlbnNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY2xhc3NfaW5pdCksIChnc3RfcGFkX2Rpc3Bvc2UpLAotCSAgKGdzdF9wYWRfZ2V0X3Byb3BlcnR5KSwgKGdzdF9wYWRfYWN0aXZhdGVfcHVsbCksCi0JICAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKSwgKGdzdF9wYWRfc2V0X2Jsb2NrZWRfYXN5bmMpLAotCSAgKGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uKSwKLQkgIChnc3RfcGFkX3NldF9hY3RpdmF0ZXB1bGxfZnVuY3Rpb24pLAotCSAgKGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVzaF9mdW5jdGlvbiksIChnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiksCi0JICAoZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24pLAotCSAgKGdzdF9wYWRfc2V0X2NoZWNrZ2V0cmFuZ2VfZnVuY3Rpb24pLCAoZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24pLAotCSAgKGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uKSwgKGdzdF9wYWRfc2V0X3F1ZXJ5X3R5cGVfZnVuY3Rpb24pLAotCSAgKGdzdF9wYWRfc2V0X2ludGVybmFsX2xpbmtfZnVuY3Rpb24pLCAoZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbiksCi0JICAoZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uKSwgKGdzdF9wYWRfc2V0X2dldGNhcHNfZnVuY3Rpb24pLAotCSAgKGdzdF9wYWRfc2V0X2FjY2VwdGNhcHNfZnVuY3Rpb24pLAotCSAgKGdzdF9wYWRfc2V0X2ZpeGF0ZWNhcHNfZnVuY3Rpb24pLCAoZ3N0X3BhZF9zZXRfc2V0Y2Fwc19mdW5jdGlvbiksCi0JICAoZ3N0X3BhZF9zZXRfYnVmZmVyYWxsb2NfZnVuY3Rpb24pLCAoZ3N0X3BhZF9saW5rX2NoZWNrX2hpZXJhcmNoeSksCi0JICAoZ3N0X3BhZF9nZXRfY2Fwc191bmxvY2tlZCksIChnc3RfcGFkX2dldF9jYXBzKSwKLQkgIChnc3RfcGFkX3BlZXJfZ2V0X2NhcHMpLCAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksCi0JICAoZ3N0X3BhZF9wZWVyX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfc2V0X2NhcHMpLAotCSAgKGdzdF9wYWRfY29uZmlndXJlX3NpbmspLCAoZ3N0X3BhZF9jb25maWd1cmVfc3JjKSwKLQkgIChnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMpLCAoZ3N0X3BhZF9nZXRfbmVnb3RpYXRlZF9jYXBzKSwKLQkgIChnc3RfcGFkX2J1ZmZlcl9hbGxvY191bmNoZWNrZWQpLCAoZ3N0X3BhZF9hbGxvY19idWZmZXJfZnVsbCksCi0JICAoZ3N0X3BhZF9xdWVyeSksIChnc3RfcGFkX2xvYWRfYW5kX2xpbmspLCAoaGFuZGxlX3BhZF9ibG9jayksCi0JICAoZ3N0X3BhZF9jaGFpbl91bmNoZWNrZWQpLCAoZ3N0X3BhZF9wdXNoKSwgKGdzdF9wYWRfZ2V0X3JhbmdlKSwKLQkgIChnc3RfcGFkX3NlbmRfZXZlbnQpOgotCSAgVXNlIF9ERUJVR19PQkpFQ1Qgd2hlbiBpdCBtYWtlcyBzZW5zZS4KLQkgIFByb3RlY3QgR1NUX1BBRF9DQVBTIHdpdGggdGhlIE9CSkVDVF9MT0NLLgotCSAgU21hbGwgY2xlYW51cHMgYW5kIGNvZGUgcmVmbG93cy4KLQkgIEF2b2lkIGNhcHMgcmVmY291bnRpbmcgaW4gX2FjY2VwdF9jYXBzLgotCSAgUmVmYWN0b3IgYWxsb2NfYnVmZmVyIHNvIHRoYXQgdGhlIGNvZGUgcGVyZm9ybWVkIG9uIHRoZSBwZWVyIGlzIGluIGEKLQkgIHNlcGFyYXRlIGZ1bmN0aW9uLiBBbHNvIGlmIHRoZSBwYWQgZG9lcyBub3QgaW1wbGVtZW50IGEgYnVmZmVyIGFsbG9jCi0JICBmdW5jdGlvbiwgd2Ugc2hvdWxkIHN0aWxsIGNoZWNrIGlmIHRoZSBwYWQgaXMgZmx1c2hpbmcgYmVmb3JlIGZhbGxpbmcKLQkgIGJhY2sgdG8gdGhlIGRlZmF1bHQgYWxsb2NhdG9yLgotCi0yMDA2LTA3LTMwIDIyOjIwOjQyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiBNYWtlIGFsbCB1c2VzIG9mIGlkZW50aXR5IGFuZCBmYWtlc2luayBoYXZlIHNpbGVudD10cnVlIHRvIGF2b2lkIHNlcmlhbGlzaW5nIGV2Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgTWFrZSBhbGwgdXNlcyBvZiBpZGVudGl0eSBhbmQgZmFrZXNpbmsgaGF2ZSBzaWxlbnQ9dHJ1ZSB0byBhdm9pZAotCSAgc2VyaWFsaXNpbmcgZXZlcnkgcGFzc2luZyBkYXRhIHN0cnVjdHVyZSwgd2hpY2ggaXMgYnJlYWtpbmcgdGVzdHMKLQkgIG9uIEZDNCBmb3Igc29tZSB1bmtub3duIHJlYXNvbi4KLQotMjAwNi0wNy0zMCAxODo1ODoyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvcGFyc2UvOiBSZXZlcnRlZCBwcmV2aW91cyBwYXRjaCBhcyBpdCByZXF1aXJlZCB0byBidW1wIHRoZSBmbGV4IGRlcGVuZGVuY3kgdG8gMi41LjMxLCB3aGVyZSBmYzQvNSBzZWVtIHRvIHNoaXAgb24uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICAqIGdzdC9wYXJzZS9wYXJzZS5sOgotCSAgUmV2ZXJ0ZWQgcHJldmlvdXMgcGF0Y2ggYXMgaXQgcmVxdWlyZWQgdG8gYnVtcCB0aGUgZmxleCBkZXBlbmRlbmN5IHRvCi0JICAyLjUuMzEsIHdoZXJlIGZjNC81IHNlZW0gdG8gc2hpcCBvbmx5IHRoZSBhbmNpZW50IDIuNS40YSA6KAotCi0yMDA2LTA3LTMwIDE4OjMyOjQ5ICswMDAwICBNYXJjLUFuZHJlIEx1cmVhdSA8bWFyY2FuZHJlLmx1cmVhdUBnbWFpbC5jb20+Ci0KLQkgIGdzdC9wYXJzZS86IHB1c2ggJiBwb3AgdGhlIHN0YXRlIG9mIHRoZSBsZXhlciBmb3IgcmVlbnRyYW50IHVzZSBjYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJjLUFuZHJlIEx1cmVhdSA8bWFyY2FuZHJlLmx1cmVhdUBnbWFpbC5jb20+Ci0JICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgICogZ3N0L3BhcnNlL3BhcnNlLmw6Ci0JICBwdXNoICYgcG9wIHRoZSBzdGF0ZSBvZiB0aGUgbGV4ZXIgZm9yIHJlZW50cmFudCB1c2UgY2FzZQotCSAgRml4ZXMgIzM0OTE4MAotCi0yMDA2LTA3LTI5IDEzOjQ1OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDogTm90ZSBpbiB0aGUgZG9jcyB0aGF0IHRoZSA6Om5ld3NlZ21lbnQgdmZ1bmMgaXMgbm90IGFjdHVhbGx5IHVzZWQgYnkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIE5vdGUgaW4gdGhlIGRvY3MgdGhhdCB0aGUgOjpuZXdzZWdtZW50IHZmdW5jIGlzIG5vdCBhY3R1YWxseSB1c2VkIGJ5Ci0JICBHc3RCYXNlU3JjLgotCi0yMDA2LTA3LTI4IDE0OjA5OjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IFdoZW4gZmx1c2hpbmcgYSBwYWQsIGFsc28gY2xlYXIgdGhlIHF1ZXVlZCBidWZmZXIgc28gdGhhdCB3ZSBkb24ndCBhY2NpZGVudGFsbHkgdXNlIGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JICAoZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmdfdW5sb2NrZWQpLCAoZ3N0X2NvbGxlY3RfcGFkc19wb3ApLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfY2xlYXIpLCAoZ3N0X2NvbGxlY3RfcGFkc19mbHVzaCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCksIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKToKLQkgIFdoZW4gZmx1c2hpbmcgYSBwYWQsIGFsc28gY2xlYXIgdGhlIHF1ZXVlZCBidWZmZXIgc28gdGhhdCB3ZSBkb24ndAotCSAgYWNjaWRlbnRhbGx5IHVzZSBpdCB3aGVuIHdlIHNob3VsZG4ndC4KLQkgIEZpeCBsZWFrcyBieSBpbnJlZmZpbmcgaW5jb21taW5nIGJ1ZmZlci4KLQkgIEZsdXNoIG91dCBxdWV1ZWQgYnVmZmVycyBpbiBjYXNlIG9mIGVycm9ycy4KLQkgIEZpeGVzICMzNDc0NTIuCi0KLTIwMDYtMDctMjggMTA6MTc6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvcmFuZG9tL3Bob25vbi1nc3Q6IFJhbmRvbSBub3RlcyBhYm91dCBhIFBob25vbiBiYWNrZW5kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL3Bob25vbi1nc3Q6Ci0JICBSYW5kb20gbm90ZXMgYWJvdXQgYSBQaG9ub24gYmFja2VuZC4KLQotMjAwNi0wNy0yNyAxNDozMjowMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBFeHRyYSBkZWJ1ZyBvdXRwdXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKToKLQkgIEV4dHJhIGRlYnVnIG91dHB1dAotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiAoZ3N0X2RwX3N1aXRlKToKLQkgIFRha2UgYSB3aGFjayBhdCBmaXhpbmcgdGhlIHBwYyBjb21waWxlIHVzaW5nIGEgZGlmZmVyZW50IGRlZmluZSB0bwotCSAgZGlzYWJsZSB0aGUgYnJva2VuIHRlc3QuCi0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIFJlbW92ZSBleGNlc3MgZ19wcmludCgpCi0KLTIwMDYtMDctMjcgMTM6NDQ6MjIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtbGF1bmNoLmM6IE9vcHMsIG1lYW50IHRvIHVuY29tbWVudCB0aGlzIGxpbmUgdG9vIHRvIGRhbXBlbiB0aGUgbm9pc2UgYSBiaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoZXhwZWN0ZWRfZmFpbF9waXBlKToKLQkgIE9vcHMsIG1lYW50IHRvIHVuY29tbWVudCB0aGlzIGxpbmUgdG9vIHRvIGRhbXBlbiB0aGUgbm9pc2UgYSBiaXQuCi0KLTIwMDYtMDctMjcgMTM6MjY6MjcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBGaXggc29tZSBvZiB0aGUgbGVha3MgZXhwb3NlZCBieSBleHRlbmRpbmcgdGhlIHBhcnNlLWxhdW5jaCB0ZXN0c3VpdGUsIGFuZCBtb3ZlIHRoZSAzIEkgY2FuJ3QgZmlndXJlIG91dCBpbnRvIGEgc2VwYXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgKiBnc3QvcGFyc2UvcGFyc2UubDoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoZXhwZWN0ZWRfZmFpbF9waXBlKSwKLQkgIChHU1RfU1RBUlRfVEVTVCksIChwYXJzZV9zdWl0ZSk6Ci0JICBGaXggc29tZSBvZiB0aGUgbGVha3MgZXhwb3NlZCBieSBleHRlbmRpbmcgdGhlIHBhcnNlLWxhdW5jaCB0ZXN0c3VpdGUsCi0JICBhbmQgbW92ZSB0aGUgMyBJIGNhbid0IGZpZ3VyZSBvdXQgaW50byBhIHNlcGFyYXRlIHRlc3QgdGhhdCB3b24ndCBydW4KLQkgIHRoZSBwaXBlbGluZXMgdW5sZXNzIHRoZSBhcHByb3ByaWF0ZSBsaW5lIGlzIHVuY29tbWVudGVkLgotCi0yMDA2LTA3LTI3IDEyOjM5OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogUmVxdWVzdGluZyAwIGJ5dGVzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBmaWxlIHNob3VsZCByZXN1bHQgaW4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jcmVhdGVfcmVhZCk6Ci0JICBSZXF1ZXN0aW5nIDAgYnl0ZXMgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGZpbGUgc2hvdWxkIHJlc3VsdCBpbgotCSAgRkxPV19PSyBhbmQgYW4gZW1wdHkgYnVmZmVyLCBub3QgRkxPV19VTkVYUEVDVEVELiBUaGFuayB5b3UKLQkgIHVuaXQgdGVzdC4KLQotMjAwNi0wNy0yNyAxMTowMDoyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGNhcHMuYzogRml4IHVzZWxlc3MgYXNzZXJ0LCBhIHVpbnQgaXMgYWx3YXlzIHBvc2l0aXZlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3Rfc3RhdGljX2NhcHNfZ2V0KSwgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUpOgotCSAgRml4IHVzZWxlc3MgYXNzZXJ0LCBhIHVpbnQgaXMgYWx3YXlzIHBvc2l0aXZlLgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lKSwKLQkgIChnc3Rfc3RydWN0dXJlX2ZvcmVhY2gpLCAoZ3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2UpOgotCSAgQ2hlY2sgaW5wdXQgYXJndW1lbnRzIGZvciBwdWJsaWMgZnVuY3Rpb25zIHRvIGF2b2lkIG9idmlvdXMgY3Jhc2hlcy4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19yZW5kZXIpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JICBEbyBsZXNzIHVzZWxlc3MgdHlwZWNoZWNraW5nLgotCi0yMDA2LTA3LTI3IDEwOjU0OjI5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogRG8gbm90IHVzZSBtbWFwKCkgYnkgZGVmYXVsdCBzaW5jZSB0aGVyZSBhcmUgYSBudW1iZXIgb2YgZXJyb3IgY29uZGl0aW9ucyB0aGF0IHdlIHdvdWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jbGFzc19pbml0KToKLQkgIERvIG5vdCB1c2UgbW1hcCgpIGJ5IGRlZmF1bHQgc2luY2UgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGVycm9yCi0JICBjb25kaXRpb25zIHRoYXQgd2Ugd291bGQgbGlrZSB0byBoYW5kbGUgaW4gYSBub24tZmF0YWwgd2F5IHRoYXQKLQkgIHdpbGwgcmVzdWx0IGluIGEgU0lHQlVTIGlmIHdlIHVzZSBtbWFwKCkuIEV4YW1wbGVzOiBleHRlcm5hbAotCSAgZGV2aWNlcyAoVVNCIGhhcmRkcml2ZSwgcG9ydGFibGUgbXVzaWMgcGxheWVyKSBiZWluZyB1bnBsdWdnZWQKLQkgIHdoaWxlIGluIHVzZTsgZmlsZSBvbiBtb3VudGVkIENEL0RWRCB0aGF0IGNhbid0IGJlIHJlYWQgYmVjYXVzZQotCSAgdGhlIG1lZGl1bSBpcyBwYXJ0bHkgZGFtYWdlZC4gRml4ZXMgIzM0ODQ1NSBhbmQgIzM0ODQ3NS4KLQotMjAwNi0wNy0yNiAyMjo1OToxOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RxdWVyeS5oOiBEZWxldGUgdW51c2VkIGFuZCBtaXNsZWFkaW5nIGRlZmluZSBvZiBHU1RfUVVFUllfVFlQRV9SQVRFX0RFTiAtIHJhdGVzIGFyZSBhIGdkb3VibGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIERlbGV0ZSB1bnVzZWQgYW5kIG1pc2xlYWRpbmcgZGVmaW5lIG9mIEdTVF9RVUVSWV9UWVBFX1JBVEVfREVOIC0KLQkgIHJhdGVzIGFyZSBhIGdkb3VibGUKLQotMjAwNi0wNy0yNiAyMDozMDo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnkuYzogTW92ZSBiaWcgZG9jdW1lbnRhdGlvbiBjb21tZW50IGludG8gY2xhc3Mgc2VjdGlvbiBoZWFkZXIsIHNvIHRoYXQgaXQgYXBwZWFycyBpbiB0aGUgQVBJIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICBNb3ZlIGJpZyBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW50byBjbGFzcyBzZWN0aW9uIGhlYWRlciwgc28gdGhhdCBpdAotCSAgYXBwZWFycyBpbiB0aGUgQVBJIGRvY3MuCi0KLTIwMDYtMDctMjYgMTc6MTg6MjUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBPb3BzLiBDb21taXQgdGhlIGRvY3MgYWRkaXRpb25zIHRvbyBmb3IgbmV3IEFQSS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgT29wcy4gQ29tbWl0IHRoZSBkb2NzIGFkZGl0aW9ucyB0b28gZm9yIG5ldyBBUEkuCi0JICBBbHNvLCByZW1vdmUgdGhlIG1lbnRpb24gb2YgdGhlIG5vbi1leGlzdGVudCBHU1RfUVVFUllfVFlQRV9SQVRFX0RFTgotCi0yMDA2LTA3LTI2IDE3OjA0OjQ1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdHN0cnVjdHVyZS4qOiBBZGQgQVBJIGZvciBzZXR0aW5nIHZhbHVlcyBpbnRvIHN0cnVjdHVyZXMgd2l0aG91dCBwZXJmb3JtaW5nIGEgcXVhcmsgbG9va3VwLCBpZiB0aGUgYXBwcm9wcmlhdGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9pZF9zZXQpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdCk6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkgIEFkZCBBUEkgZm9yIHNldHRpbmcgdmFsdWVzIGludG8gc3RydWN0dXJlcyB3aXRob3V0IHBlcmZvcm1pbmcKLQkgIGEgcXVhcmsgbG9va3VwLCBpZiB0aGUgYXBwcm9wcmlhdGUgcXVhcmsgaXMgYWxyZWFkeSBrbm93bi4KLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9pZF9zZXQKLQkgIEFQSTogZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0Ci0JICAqIGdzdC9wYXJzZS9ncmFtbWFyLnk6Ci0JICAqIGdzdC9wYXJzZS9wYXJzZS5sOgotCSAgUmVtb3ZlIHNvbWUgZGVhZCBjb2RlIHNob3duIGJ5IHRoZSBjb3ZlcmFnZSBpbmZvcm1hdGlvbi4KLQkgIERvbid0IHRocm93IGEgY3JpdGljYWwgZ193YXJuaW5nIHdoZW4gZW5jb3VudGVyaW5nIGEgc3ludGF4IGVycm9yLAotCSAganVzdCB3YXJuIGFuZCBsZXQgdGhlIG5vcm1hbCBlcnJvciBwYXRoIGhhbmRsZSBpdC4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSAgQnVtcCB0aGUgcmFuayBvZiBmaWxlc2luayB1cCB0byBQUklNQVJZIHNvIHRoYXQgaXQgaXMgcHJlZmVycmVkIG92ZXIKLQkgIGdub21ldmZzc2luayBmb3IgZmlsZTovLyBzaW5rIHVyaSdzCi0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzogKGV4cGVjdGVkX2ZhaWxfcGlwZSksCi0JICAoR1NUX1NUQVJUX1RFU1QpLCAocnVuX2RlbGF5ZWRfdGVzdCksCi0JICAoZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudF9iYXNlX2luaXQpLAotCSAgKGdzdF9wYXJzZV90ZXN0X2VsZW1lbnRfY2xhc3NfaW5pdCksIChnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2luaXQpLAotCSAgKGdzdF9wYXJzZV90ZXN0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcmVnaXN0ZXJfcGFyc2VfZWxlbWVudCksIChwYXJzZV9zdWl0ZSk6Ci0JICBCZWVmIHVwIHRoZSB0ZXN0cyBmb3IgcGFyc2Ugc3ludGF4IHRvIGNoZWNrIHRoYXQgbW9yZSBlcnJvciBjYXNlcwotCSAgZmFpbCBhcyB0aGV5IGFyZSBzdXBwb3NlZCB0by4gSW5jcmVhc2VzIHRoZSB0ZXN0IGNvdmVyYWdlIGEgYml0LgotCi0yMDA2LTA3LTI2IDExOjQzOjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOiBGaXggZ3N0X2VsZW1lbnRfbGluaygpIGV4YW1wbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKLQkgIEZpeCBnc3RfZWxlbWVudF9saW5rKCkgZXhhbXBsZS4KLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICBNZW50aW9uIGluIEFQSSBkb2NzIHRoYXQgb25lIHNob3VsZCB1c3VhbGx5IGdzdF9iaW5fYWRkKCkKLQkgIGVsZW1lbnRzIHRvIGEgYmluIG9yIHBpcGVsaW5lIGJlZm9yZSBkb2luZyB0aGUgbGlua2luZy4KLQotMjAwNi0wNy0yNiAxMDo0NzoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIGJhY2sgdG8gMzIgYml0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gMzIgYml0Ci0KLTIwMDYtMDctMjYgMTA6Mzk6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuYzogQXZvaWQgZnVuY3Rpb24gY2FsbCBmb3Iga25vd24gdHlwZXMgYnkga2VlcGluZyB0aGUgYnVmZmVyIGFuZCBzdWJidWZmZXIgR1R5cGUgZ2xvYmFsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfZ2V0X3R5cGUpLCAoZ3N0X2J1ZmZlcl9uZXcpLAotCSAgKGdzdF9zdWJidWZmZXJfZ2V0X3R5cGUpLCAoZ3N0X2J1ZmZlcl9jcmVhdGVfc3ViKToKLQkgIEF2b2lkIGZ1bmN0aW9uIGNhbGwgZm9yIGtub3duIHR5cGVzIGJ5IGtlZXBpbmcgdGhlIGJ1ZmZlciBhbmQKLQkgIHN1YmJ1ZmZlciBHVHlwZSBnbG9iYWwuCi0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2NyZWF0ZV9yZWFkKToKLQkgIFJhbmRvbSBzaWxseSBvcHRpbWlzYXRpb25zIGluIHJlYWQoKSBwYXRoLgotCi0yMDA2LTA3LTI2IDA2OjE4OjQ0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBJZiB0aGUgdG9wLWxldmVsIG9mIHRoZSBwYXJzZSBpcyBhIG5vcm1hbCBiaW4sIGl0IGRvZXNuJ3QgZG8gdGhlIHJpZ2h0IGxvZ2ljIHRvIHJ1biBhcyBhIHRvcC1sZXZlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6Ci0JICBJZiB0aGUgdG9wLWxldmVsIG9mIHRoZSBwYXJzZSBpcyBhIG5vcm1hbCBiaW4sIGl0IGRvZXNuJ3QgZG8gdGhlCi0JICByaWdodCBsb2dpYyB0byBydW4gYXMgYSB0b3AtbGV2ZWwgZWxlbWVudCwgc28gcGxhY2UgaXQgaW5zaWRlIGEKLQkgIHBpcGVsaW5lLgotCi0yMDA2LTA3LTI1IDE5OjM3OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogUmVtb3ZlIHN1cGVyZmx1b3VzIGdfb2JqZWN0X25vdGlmeSgpIGNhbGxzLCBHT2JqZWN0IGRvZXMgdGhhdCBmb3IgdXMgYXV0b21hdGljYWxseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19zZXRfcHJvcGVydHkpOgotCSAgUmVtb3ZlIHN1cGVyZmx1b3VzIGdfb2JqZWN0X25vdGlmeSgpIGNhbGxzLCBHT2JqZWN0IGRvZXMKLQkgIHRoYXQgZm9yIHVzIGF1dG9tYXRpY2FsbHkuCi0KLTIwMDYtMDctMjUgMTU6MDc6NTggKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBhZGQgbGF0ZXN0IC5oIGFkZGl0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBsYXRlc3QgLmggYWRkaXRpb24KLQotMjAwNi0wNy0yNSAxMzowNjoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0aW5mby5oOiBNb3ZlIHRoZSBXaW4zMiB2ZXJzaW9uIGZyb20gZ3N0LXBsdWdpbnMtZ29vZC9nc3QvYXZpL2F2aWRlbXV4LmMgdG8gaGVyZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgTW92ZSB0aGUgV2luMzIgdmVyc2lvbiBmcm9tIGdzdC1wbHVnaW5zLWdvb2QvZ3N0L2F2aS9hdmlkZW11eC5jIHRvCi0JICBoZXJlLgotCi0yMDA2LTA3LTI0IDE2OjMzOjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dGFnbGlzdC5jOiBBbGxvdyBtb3JlIHRoYW4gb25lIEdTVF9UQUdfSU1BR0UgcGVyIHRhZ2xpc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKF9nc3RfdGFnX2luaXRpYWxpemUpOgotCSAgQWxsb3cgbW9yZSB0aGFuIG9uZSBHU1RfVEFHX0lNQUdFIHBlciB0YWdsaXN0LgotCi0yMDA2LTA3LTI0IDA3OjQwOjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogdXBkYXRlIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgdXBkYXRlIGRvY3MKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2ZkX3NyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9mZF9zcmNfY3JlYXRlKToKLQkgIGxvZyByZWN1cnJpbmcgZXZlbnRzIGF0IExPRyBsZXZlbAotCSAgYWRkIG1vcmUgZGVidWcgZm9yIHdoZW4gdGhlIGZkIGdldHMgc2V0Ci0KLTIwMDYtMDctMjQgMDc6Mzc6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSAgcmVtb3ZlIC0tZW5hYmxlLWRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIC0tZW5hYmxlLWRvY3MKLQotMjAwNi0wNy0yMyAwOTo0MTozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogY29tbW9uOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IGFkZCBidWcgcmVmZXJlbmNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiBhZGQgYnVnIHJlZmVyZW5jZQotCi0yMDA2LTA3LTIxIDE4OjUyOjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RwYXJzZS5jOiBBbHNvIHJlbW92ZSByZWVudHJhbmNlIGNoZWNrcyBpZiBmbGV4IGlzIE1UIHNhdmUgKCMzNDgxNzkpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhcnNlLmM6IChnc3RfcGFyc2VfbGF1bmNoKToKLQkgIEFsc28gcmVtb3ZlIHJlZW50cmFuY2UgY2hlY2tzIGlmIGZsZXggaXMgTVQgc2F2ZSAoIzM0ODE3OSkKLQkgIEZpeCBteSBlbXB0eSBDaGFuZ2VMb2cgZW50cnkgYmVsb3cKLQotMjAwNi0wNy0yMSAxNjowMTozNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OiBBdHRlbXB0IHRvIHBhY2lmeSBidWlsZGJvdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNy0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDogQXR0ZW1wdCB0byBwYWNpZnkgYnVpbGRib3QuCi0KLTIwMDYtMDctMjEgMTU6NDg6MDQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW0gKGxpYmdzdGNoZWNrX0BHU1RfTUFKT1JNSU5PUkBpbmNsdWRlX0hFQURFUlMpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDctMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtCi0JICAobGliZ3N0Y2hlY2tfQEdTVF9NQUpPUk1JTk9SQGluY2x1ZGVfSEVBREVSUykKLQkgIChsaWJnc3RjaGVja19AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5oOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5jOiBBZGQgc29tZSBuZXcgaHlwZSB0ZXN0aW5nCi0JICBmdW5jdGlvbnMsIHRodXMgcHJvdmluZyBJIGFtIHN0aWxsIGEgR1N0cmVhbWVyIGhheG9yLiBPSyBJIHdyb3RlCi0JICB0aGVtIGEgbG9uZyB0aW1lIGFnbywgYnV0IGFueXdheXMuCi0KLTIwMDYtMDctMjEgMTM6MTE6MzMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogY29tbW9uOgotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdHBhcnNlLmM6Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzogKiBjb25maWd1cmUuYWM6ICogZ3N0L2dzdHBhcnNlLmM6IChnc3RfcGFyc2VfbGF1bmNoKToKLQotMjAwNi0wNy0yMSAxMDo0MDoyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhcnNlLmM6IFByb3RlY3QgcmVjdXJzaXZlIGNhbGxzIHRvIF9wYXJzZSB3aXRoIGEgcmVjdXJzaXZlIG11dGV4IGFuZCBidXN5IGZsYWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhcnNlLmM6IChnc3RfcGFyc2VfbGF1bmNoKToKLQkgIFByb3RlY3QgcmVjdXJzaXZlIGNhbGxzIHRvIF9wYXJzZSB3aXRoIGEgcmVjdXJzaXZlIG11dGV4Ci0JICBhbmQgYnVzeSBmbGFnLgotCi0yMDA2LTA3LTIxIDEwOjM4OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6IEZpeCBsZWFrIGluIHRlc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IGxlYWsgaW4gdGVzdC4KLQotMjAwNi0wNy0yMCAyMDowMjo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0cGFyc2UuYzogRG8gbm90IGhhbmdlIG9uIHJlY3Vyc2l2ZSB1YXNnZSBvZiBnc3RfcGFyc2VfbGF1bmNoKCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFyc2UuYzogKGdzdF9wYXJzZV9sYXVuY2gpOgotCSAgRG8gbm90IGhhbmdlIG9uIHJlY3Vyc2l2ZSB1YXNnZSBvZiBnc3RfcGFyc2VfbGF1bmNoKCkKLQotMjAwNi0wNy0yMCAxNjoxMDoxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHRhZ2xpc3QuYzogQWRkIHNvbWUgbW9yZSBkb2NzLCBjb21tZW50cyBhbmQgRklYTUUgMC4xMXMgaGVyZSBhbmQgdGhlcmUgYW5kICBhbHNvIGZpeCBzb21lIHR5cG9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICBBZGQgc29tZSBtb3JlIGRvY3MsIGNvbW1lbnRzIGFuZCBGSVhNRSAwLjExcyBoZXJlIGFuZCB0aGVyZQotCSAgYW5kICBhbHNvIGZpeCBzb21lIHR5cG9zLgotCi0yMDA2LTA3LTIwIDEwOjUwOjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0c2VnbWVudC5oOiBDb252ZXJ0IHRhYnMgdG8gc3BhY2VzIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIENvbnZlcnQgdGFicyB0byBzcGFjZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eS4KLQotMjAwNi0wNy0yMCAxMDoyNToyOCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svbGlicy9nZHAuYzogdGhlIHRlc3RfYnVmZmVyIHRlc3QgZmFpbHMgYXQgbGluZSAxNDAgb24gcHBjNjQgYXQgdGhlIGZvbGxvd2luZyBjaGVjazogIkdTVF9CVUZGRVJfSU5fQ0FQUyBmLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9nZHAuYzogKGdzdF9kcF9zdWl0ZSk6Ci0JICB0aGUgdGVzdF9idWZmZXIgdGVzdCBmYWlscyBhdCBsaW5lIDE0MCBvbiBwcGM2NCBhdCB0aGUgZm9sbG93aW5nCi0JICBjaGVjazoKLQkgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChuZXdidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19JTl9DQVBTKSwKLQkgICJHU1RfQlVGRkVSX0lOX0NBUFMgZmxhZyBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCAhIik7Ci0JICBTZWUgYnVnICMzNDgxMTQgZm9yIG1vcmUgZGV0YWlscy4KLQotMjAwNi0wNy0xOSAxMjo0MDo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgRml4IHR5cG9zICgjMzQ4MDAwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbDoKLQkgICogZ3N0L2dzdHBhZC5jOgotCSAgRml4IHR5cG9zICgjMzQ4MDAwKS4KLQotMjAwNi0wNy0xOCAyMDozODo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9wd2cvaW50cm8tYmFzaWNzLnhtbDogRml4IHdyb25nIGxpbmtzICgjMzQ3OTI3KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sOgotCSAgRml4IHdyb25nIGxpbmtzICgjMzQ3OTI3KS4KLQotMjAwNi0wNy0xOCAxOTowMToyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBtYWtlIC0tZGlzYWJsZS1pbmRleCB3b3JrICgjMzQyNTY0KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGxvYWRfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X3htbF9yZWFkX2NhY2hlKSwgKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9mZWF0dXJlKToKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgbWFrZSAtLWRpc2FibGUtaW5kZXggd29yayAoIzM0MjU2NCkKLQotMjAwNi0wNy0xOCAwOTo0MjozMSArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC86IFRoZSBhdHRhY2hlZCBwYXRjaCBhZGRzIHR3byBtaXNzaW5nIGRlZmluZXMgdG8gZ3N0dHJhY2UuaCB3aGVuIHRyYWNpbmcgaXMgZGlzYWJsZWQuICBJdCBhbHNvIGNvcnJlY3RzIG9uZSBleGlzdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXQgYXhpcyBkb3QgY29tPgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nc3R0cmFjZS5oOgotCSAgVGhlIGF0dGFjaGVkIHBhdGNoIGFkZHMgdHdvIG1pc3NpbmcgZGVmaW5lcyB0byBnc3R0cmFjZS5oIHdoZW4gdHJhY2luZwotCSAgaXMgZGlzYWJsZWQuICBJdCBhbHNvIGNvcnJlY3RzIG9uZSBleGlzdGluZyBkZWZpbmUuCi0JICBGaXhlcyAjMzQ3NzU2LgotCi0yMDA2LTA3LTE3IDE3OjQwOjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgdHdvIGZ1bmN0aW9ucyB0byBjaGVjayBhbmQgY2hhbmdlIHRoZSBTSUdTRUdWIGJlaGF2aW91ciB3aGVuIGxvYWRpbmcgcGx1Z2lucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0LmM6IChnc3Rfc2VndHJhcF9pc19lbmFibGVkKSwgKGdzdF9zZWd0cmFwX3NldF9lbmFibGVkKToKLQkgICogZ3N0L2dzdC5oOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3Jlc3RvcmUpOgotCSAgQWRkIHR3byBmdW5jdGlvbnMgdG8gY2hlY2sgYW5kIGNoYW5nZSB0aGUgU0lHU0VHViBiZWhhdmlvdXIKLQkgIHdoZW4gbG9hZGluZyBwbHVnaW5zLgotCSAgRG9uJ3QgbWVzcyB3aXRoIHRoZSBTSUdTRUdWIGhhbmRsZXIgd2hlbiB3ZSB3ZXJlIHRvbGQgbm90IHRvLgotCSAgRml4ZXMgIzM0Nzc5NC4KLQkgIEFQSTogZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZAotCSAgQVBJOiBnc3Rfc2VndHJhcF9zZXRfZW5hYmxlZAotCi0yMDA2LTA3LTE0IDE2OjQyOjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBSZXZlcnQgZml4IGZvciByZWdyZXNzaW9uIGluICMzNDc0MDggYWZ0ZXIgcmVsZWFzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY191cGRhdGVfbGVuZ3RoKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgUmV2ZXJ0IGZpeCBmb3IgcmVncmVzc2lvbiBpbiAjMzQ3NDA4IGFmdGVyIHJlbGVhc2UuCi0KLTIwMDYtMDctMTQgMTY6MjA6MTggKzAwMDAgIEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMEBnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBGcmVlIGl0ZXJhdG9yIHdoZW4gZG9uZSAoIzM0NzMxMSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDAgYXQgZ21haWwgY29tPgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3VubGluayk6Ci0JICBGcmVlIGl0ZXJhdG9yIHdoZW4gZG9uZSAoIzM0NzMxMSkuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3V0aWxzX3N1aXRlKToKLQkgIEFuZCBhZGQgYSB0ZXN0IGNhc2UgZm9yIHRoaXMuCi0KLTIwMDYtMDctMTQgMTU6NTI6NTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJ1bXAgbmFubyBiYWNrIHRvIENWUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgbmFubyBiYWNrIHRvIENWUwotCi09PT0gcmVsZWFzZSAwLjEwLjkgPT09Ci0KLTIwMDYtMDctMTQgMTU6NTA6MTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IHJlbGVhc2luZyAwLjEwLjksICJPbiB0aGUgcm9hZCBhZ2FpbiIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNy0xMyAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbGVhc2luZyAwLjEwLjksICJPbiB0aGUgcm9hZCBhZ2FpbiIKLQotMjAwNi0wNy0xMyAxOTo0NzoxNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwNi0wNy0xMyAxNTo1MTowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgUmV2ZXJ0IHB1bGwtMCBmaXggZm9yIHJlbGVhc2UuIERpc2FibGUgY2hlY2suIEZpeGVzICMzNDc0MDguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIFJldmVydCBwdWxsLTAgZml4IGZvciByZWxlYXNlLiBEaXNhYmxlIGNoZWNrLiBGaXhlcyAjMzQ3NDA4LgotCi0yMDA2LTA3LTEzIDE0OjAyOjE2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBGaXhlcyAjMzQ3MzM3OiBmYWlsdXJlIHRvIGRlc2VyaWFsaXplIGV2ZW50IHBhY2tldHMgd2l0aCBlbXB0eSBwYXlsb2FkIChvbmx5IGV2Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSAgKGdzdF9kcF9ldmVudF9mcm9tX3BhY2tldF8xXzApOgotCSAgRml4ZXMgIzM0NzMzNzogZmFpbHVyZSB0byBkZXNlcmlhbGl6ZSBldmVudCBwYWNrZXRzIHdpdGgKLQkgIGVtcHR5IHBheWxvYWQgKG9ubHkgZXZlbnQgdHlwZSkKLQotMjAwNi0wNy0xMyAxMzo1NzozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9NYWtlZmlsZS5hbTogZG8gbm90IGluc3RhbGwgYSAuYyBmaWxlIGluIHRoZSBoZWFkZXIgZGlyZWN0b3J5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgZG8gbm90IGluc3RhbGwgYSAuYyBmaWxlIGluIHRoZSBoZWFkZXIgZGlyZWN0b3J5Ci0KLTIwMDYtMDctMTMgMTA6NDc6MDAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RnaG9zdHBhZC5jOiBHaG9zdFBhZCBubyBsb25nZXIgaW1wbGljaXRlbHkgdXNlIHRoZSBwYWR0ZW1wbGF0ZXMgb2YgdGhlIHRhcmdldHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX3NldF90YXJnZXRfdW5sb2NrZWQpOgotCSAgR2hvc3RQYWQgbm8gbG9uZ2VyIGltcGxpY2l0ZWx5IHVzZSB0aGUgcGFkdGVtcGxhdGVzIG9mIHRoZSB0YXJnZXRzLgotCSAgRml4ZXMgIzM0NzM4NAotCi0yMDA2LTA3LTExIDIyOjU1OjQwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA2LTA3LTExIDIwOjQ0OjQ2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgTWVudGlvbiBidWcgIzM0MTAyOSBmaXhlZCBieSBiaWxib2VkJ3MgcHJldmlvdXMgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE1lbnRpb24gYnVnICMzNDEwMjkgZml4ZWQgYnkgYmlsYm9lZCdzIHByZXZpb3VzIGNvbW1pdAotCi0yMDA2LTA3LTExIDIwOjE0OjIwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgTWFrZSBHc3RWYWx1ZUFycmF5IGNvbXBhcmlzb24gYmUgb3JkZXIgZGVwZW5kZW50IGFzIGRlc2lnbmVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbXBhcmVfbGlzdCksCi0JICAoZ3N0X3ZhbHVlX2NvbXBhcmVfYXJyYXkpLCAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBNYWtlIEdzdFZhbHVlQXJyYXkgY29tcGFyaXNvbiBiZSBvcmRlciBkZXBlbmRlbnQgYXMgZGVzaWduZWQuCi0JICBBZGQgY2hlY2tzIGZvciB2YWx1ZSBsaXN0cyBhbmQgdmFsdWUgYXJyYXkgY29tcGFyaXNvbnMuCi0JICBGaXhlcyAjMzQ3MjIxCi0KLTIwMDYtMDctMTEgMTY6MjA6MDkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogKGRlKWFjdGl2YXRlIHNyYyBwYWRzIGJlZm9yZSBjYWxsaW5nIHN0YXRlX2NoYW5nZSBvbiB0aGUgY2hpbGRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGFjdGl2YXRlX3BhZHMpLAotCSAgKGl0ZXJhdG9yX2FjdGl2YXRlX2ZvbGRfd2l0aF9yZXN5bmMpLCAoZ3N0X2Jpbl9zcmNfcGFkc19hY3RpdmF0ZSksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6Ci0JICAoZGUpYWN0aXZhdGUgc3JjIHBhZHMgYmVmb3JlIGNhbGxpbmcgc3RhdGVfY2hhbmdlIG9uIHRoZSBjaGlsZHMuCi0JICBUaGlzIGlzIHRvIGF2b2lkIHRoZSBjYXNlIHdoZXJlIGEgc3JjIGdob3N0cGFkIGlzIGJsb2NrZWQgKGhvbGRpbmcgdGhlCi0JICBzdHJlYW0gbG9jayksIHdoaWNoIHdvdWxkIGJsb2NrIHRoZSBkZWFjdGl2YXRpb24gb2YgdGhlIGdob3N0cGFkJ3MKLQkgIHRhcmdldCBwYWQuCi0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19xdWVyeV90eXBlKSwKLQkgIChnc3RfcHJveHlfcGFkX2RvX2V2ZW50KSwgKGdzdF9wcm94eV9wYWRfZG9fcXVlcnkpLAotCSAgKGdzdF9wcm94eV9wYWRfZG9faW50ZXJuYWxfbGluayksIChnc3RfcHJveHlfcGFkX2RvX2J1ZmZlcmFsbG9jKSwKLQkgIChnc3RfcHJveHlfcGFkX2RvX2NoYWluKSwgKGdzdF9wcm94eV9wYWRfZG9fZ2V0cmFuZ2UpLAotCSAgKGdzdF9wcm94eV9wYWRfZG9fY2hlY2tnZXRyYW5nZSksIChnc3RfcHJveHlfcGFkX2RvX2dldGNhcHMpLAotCSAgKGdzdF9wcm94eV9wYWRfZG9fYWNjZXB0Y2FwcyksIChnc3RfcHJveHlfcGFkX2RvX2ZpeGF0ZWNhcHMpLAotCSAgKGdzdF9wcm94eV9wYWRfZG9fc2V0Y2FwcyksIChnc3RfcHJveHlfcGFkX3NldF90YXJnZXRfdW5sb2NrZWQpLAotCSAgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldCksIChnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbCksCi0JICAoZ3N0X3Byb3h5X3BhZF9kaXNwb3NlKSwgKGdzdF9wcm94eV9wYWRfaW5pdCksCi0JICAoZ3N0X2dob3N0X3BhZF9wYXJlbnRfc2V0KSwgKGdzdF9naG9zdF9wYWRfcGFyZW50X3Vuc2V0KSwKLQkgIChnc3RfZ2hvc3RfcGFkX2NsYXNzX2luaXQpLAotCSAgKGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfZG9fYWN0aXZhdGVfcHVzaCksCi0JICAoZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9kb19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X2dob3N0X3BhZF9kb19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfZ2hvc3RfcGFkX2RvX2xpbmspLCAoZ3N0X2dob3N0X3BhZF9kb191bmxpbmspLAotCSAgKGdzdF9naG9zdF9wYWRfZGlzcG9zZSksIChnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQpLAotCSAgKGdzdF9naG9zdF9wYWRfbmV3KSwgKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCk6Ci0JICBHaG9zdFBhZHMgbm93IGNyZWF0ZSB0aGVpciBpbnRlcm5hbCBHc3RQcm94eVBhZCBhdCBjcmVhdGlvbiAoYW5kIG5vdAotCSAgd2hlbiB0aGV5J3JlIGxpbmtlZCwgYXMgaXQgd2FzIGJlaW5nIGRvbmUgcHJldmlvdXNseSkuCi0JICBUaGUgaW50ZXJuYWwgYW5kIHRhcmdldCBwYWRzIGFyZSBsaW5rZWQgc3RyYWlnaHQgYXdheS4KLQkgIFRoZSBkYXRhIHdpbGwgYWxzbyB0cmF2ZWwgdGhyb3VnaCB0aGUgb3RoZXIgcGFkIGluIG9yZGVyIHRvIG1ha2UKLQkgIHBhZCBibG9ja2luZyBhbmQgcHJvYmVzIG5vbi1oYWNraXNoICh0aGUgcHJvYmUvYmxvY2sgbm93IHJlYWxseSBoYXBwZW5zCi0JICBvbiB0aGUgR2hvc3RQYWQgYW5kIG5vdCBvbiB0aGUgdGFyZ2V0KS4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyksCi0JICAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLCAoZ3N0X3BhZF9wdXNoX2V2ZW50KToKLQkgIFJlbW92ZSBwcmV2aW91cyBnaG9zdHBhZCBjcnVmdC4KLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFkX2FkZF9kYXRhX3Byb2JlKSwKLQkgIChnc3RfcGFkX2FkZF9ldmVudF9wcm9iZSksIChnc3RfcGFkX2FkZF9idWZmZXJfcHJvYmUpLAotCSAgKGdzdF9wYWRfcmVtb3ZlX2RhdGFfcHJvYmUpLCAoZ3N0X3BhZF9yZW1vdmVfZXZlbnRfcHJvYmUpLAotCSAgKGdzdF9wYWRfcmVtb3ZlX2J1ZmZlcl9wcm9iZSk6Ci0JICBSZW1vdmUgcHJldmlvdXMgZ2hvc3QgcGFkIGNydWZ0LgotCSAgQWRkZWQgbW9yZSBkZXRhaWxlZCBkZWJ1ZyBzdGF0ZW1lbnRzLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCB0aGUgdGVzdHN1aXRlIGZvciByZWZjb3VudGluZyBjaGFuZ2VzLgotCSAgVGhlIGNvbW1lbnRzIGFib3V0IHdobyBoYXMgcmVmZXJlbmNlcyB3ZXJlIGNvcnJlY3QsIGJ1dCB0aGUgcmVmY291bnQKLQkgIGJlaW5nIGNoZWNrZWQgd2Fzbid0IHRoZSBzYW1lICghPyEpLgotCi0yMDA2LTA3LTEwIDE5OjM1OjMyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIE1vcmUgZG9jcyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhZGQgZG9jcyB0byBndGstZG9jLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIE1vcmUgZG9jcyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhZGQgZG9jcyB0byBndGstZG9jLgotCi0yMDA2LTA3LTEwIDE4OjI3OjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEZpeCBidWlsZCB3aGVuIGRpc2FibGluZyB0cmFjaW5nIChmaXhlcyAjMzQ0MDE2KS4gQWxzbyBzdGFydCB0byBkb2N1bWVudCB0aGUgZGVmaW5lcyB0aGF0IGRpc2FibGUgdGhlIHN1Yi1zeXN0ZW1zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBGaXggYnVpbGQgd2hlbiBkaXNhYmxpbmcgdHJhY2luZyAoZml4ZXMgIzM0NDAxNikuIEFsc28gc3RhcnQgdG8gZG9jdW1lbnQKLQkgIHRoZSBkZWZpbmVzIHRoYXQgZGlzYWJsZSB0aGUgc3ViLXN5c3RlbXMuCi0KLTIwMDYtMDctMTAgMDk6NDI6MjAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3QuYzogbGV0J3MgbWFrZSB2YWxncmluZCBoYXBweS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzogKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X2ZvcmtpbmcpOgotCSAgbGV0J3MgbWFrZSB2YWxncmluZCBoYXBweS4uLgotCi0yMDA2LTA3LTA5IDE2OjU2OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBCZXR0ZXIgcGFkIGFjdGl2YXRpb24gY29kZTogUmVzZXQgdGhlIGNvbGxlY3QgdmFsdWUgdG9vIG9uIHJlc3luYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoYWN0aXZhdGVfcGFkcyksCi0JICAoaXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyksIChnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlKToKLQkgIEJldHRlciBwYWQgYWN0aXZhdGlvbiBjb2RlOiBSZXNldCB0aGUgY29sbGVjdCB2YWx1ZSB0b28gb24gcmVzeW5jLgotCSAgQWRkIHNvbWUgY29tbWVudHMuCi0KLTIwMDYtMDctMDkgMTM6MjY6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogVXNlIHNvbWUgbW9yZSBtYWNyb3Mgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pbml0KSwgKGdzdF9wYWRfYWN0aXZhdGVfcHVsbCksCi0JICAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKToKLQkgIFVzZSBzb21lIG1vcmUgbWFjcm9zIHdoZXJlIGl0IG1ha2VzIHNlbnNlLgotCSAgQWxsb3cgcGFkIG1vZGUgc3dpdGNoaW5nIGluc3RlYWQgb2YgYXNzZXJ0aW5nLiBXaGVuIGEgcGFkCi0JICBpcyBhY3RpdmF0ZWQgaW4gb25lIG1vZGUgYW5kIHdlIGFjdGl2YXRlIGl0IGluIGFub3RoZXIsCi0JICBkZWFjdGl2YXRlIGl0IGZpcnN0IGJlZm9yZSBhY3RpdmF0aW5nIGl0IGluIGEgZGlmZmVyZW50IG1vZGUuCi0JICBGaXhlcyAjMzI5MTk4LgotCi0yMDA2LTA3LTA4IDEzOjIyOjMyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guYyAobWFpbik6IEhhbmRsZSBlcnIgPT0gTlVMTC4gZ3N0L2dzdC5jIChpbml0X3Bvc3QsIGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5KSAoZW5zdXJlX2N1cnJlbnRfcmVnaXN0ci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA3LTA4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmMgKG1haW4pOiBIYW5kbGUgZXJyID09IE5VTEwuCi0JICAqIGdzdC9nc3QuYyAoaW5pdF9wb3N0LCBlbnN1cmVfY3VycmVudF9yZWdpc3RyeSkKLQkgIChlbnN1cmVfY3VycmVudF9yZWdpc3RyeV9mb3JraW5nKQotCSAgKGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5X25vbmZvcmtpbmcpOiBSZWR1Y2UgI2lmZGVmIHJhdG5lc3QgYnkKLQkgIGZhY3RvcmluZyBvdXQgdGhlIHJlZ2lzdHJ5IHNjYW5uaW5nIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zLiBEb24ndAotCSAgZm9yayBmb3IgdGhlIHJlc2NhbiBpcyBHU1RfUkVHSVNUUllfRk9SSz1ubzsgdXNlZnVsIGluIGRlYnVnZ2luZy4KLQkgIEJldHRlciBlbnZpcm9ubWVudCB2YXIgbmFtZS9pbnRlcmZhY2Ugc3VnZ2VzdGlvbnMgYWNjZXB0ZWQuCi0KLTIwMDYtMDctMDcgMTc6MTY6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RvYmplY3QuYzogUmFuZG9tIG1pY3JvLW9wdGltaXNhdGlvbjogZG9uJ3QgdXNlIGEgaGFzaCB0YWJsZSB3aXRoIHN0cmluZ3MgYXMga2V5cyBhbmQgdGhlIHVzdWFsIHN0cmR1cC9zdHJjbXAgaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3Rfc2V0X25hbWVfZGVmYXVsdCksCi0JICAoZ3N0X29iamVjdF9zZXRfbmFtZSk6Ci0JICBSYW5kb20gbWljcm8tb3B0aW1pc2F0aW9uOiBkb24ndCB1c2UgYSBoYXNoIHRhYmxlCi0JICB3aXRoIHN0cmluZ3MgYXMga2V5cyBhbmQgdGhlIHVzdWFsIHN0cmR1cC9zdHJjbXAKLQkgIGludm9sdmVkLCBidXQgcmF0aGVyIGp1c3QgdXNlIHRoZSBHUXVhcmsgb2YgdGhlCi0JICB0eXBlIG5hbWUgYXMga2V5LCBzaW5jZSBpdCBuZWVkcyB0byBiZSBsb29rZWQgdXAKLQkgIGFueXdheSB0byBnZXQgdGhlIHR5cGUgbmFtZSBzdHJpbmcuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCB2YXJpb3VzIGxlYWtzLgotCi0yMDA2LTA3LTA3IDE1OjQyOjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YmluLmM6IENhbid0IHVzZSBHUE9JTlRFUl9UT19JTlQgYW5kIEdJTlRfVE9fUE9JTlRFUiB3aXRoIEdUeXBlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChjb21wYXJlX2ludGVyZmFjZSksIChnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UpLAotCSAgKGdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlKToKLQkgIENhbid0IHVzZSBHUE9JTlRFUl9UT19JTlQgYW5kIEdJTlRfVE9fUE9JTlRFUiB3aXRoIEdUeXBlcy4KLQkgIEdUeXBlcyBhcmUgZ3Vsb25ncyBhbmQgdGh1cyB0aGUgdG9wIDQgYnl0ZXMgbWlnaHQgYmUgY3V0Ci0JICBvZmYgb24gc29tZSBwbGF0Zm9ybXMgd2hlbiBkb2luZyBHUE9JTlRFUl9UT19JTlQsIGxlYWRpbmcKLQkgIHRvIGludmFsaWQgR1R5cGVzIGFuZCBiYWQgdGhpbmdzIGhhcHBlbmluZy4KLQkgIEFsc28gYWRkIGEgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSB0eXBlIHBhc3NlZCBpbiBpcyByZWFsbHkKLQkgIGFuIGludGVyZmFjZSB0eXBlLgotCi0yMDA2LTA3LTA3IDA5OjQ3OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICAuY3ZzaWdub3JlOiBJZ25vcmUgbW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiAuY3ZzaWdub3JlOgotCSAgSWdub3JlIG1vcmUuCi0KLTIwMDYtMDctMDcgMDk6MDk6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIE1ha2UgZ3N0LWVsZW1lbnQtY2hlY2stJFZFUlNJT04ubTQgY2FsbCBnc3QtaW5zcGVjdC0kVkVSU0lPTiBpbnN0ZWFkIG9mIHRoZSB1bnZlcnNpb25lZCBnc3QtaW5zcGVjdCAoIzMyNDE3NiwgIzE2ODY1OSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0LWVsZW1lbnQtY2hlY2subTQ6Ci0JICAqIGdzdC1lbGVtZW50LWNoZWNrLm00LmluOgotCSAgTWFrZSBnc3QtZWxlbWVudC1jaGVjay0kVkVSU0lPTi5tNCBjYWxsIGdzdC1pbnNwZWN0LSRWRVJTSU9OCi0JICBpbnN0ZWFkIG9mIHRoZSB1bnZlcnNpb25lZCBnc3QtaW5zcGVjdCAoIzMyNDE3NiwgIzE2ODY1OSkuCi0KLTIwMDYtMDctMDYgMTY6MTc6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RtZXNzYWdlLmg6IFVzZSBhIHZhbGlkIGludCBmb3IgdGhlIF9NRVNTQUdFX0FOWSBlbnVtIHZhbHVlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBVc2UgYSB2YWxpZCBpbnQgZm9yIHRoZSBfTUVTU0FHRV9BTlkgZW51bSB2YWx1ZSB0byBhdm9pZCBjb21waWxlcgotCSAgd2FybmluZ3MuCi0KLTIwMDYtMDctMDYgMTU6NDY6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBVcGRhdGUgZG9jcy4gYmxvY2tzaXplID09IDAgbm93IG1lYW5zIHRoZSBkZWZhdWx0IGJsb2Nrc2l6ZSB3aGVuIHdvcmtpbmcgaW4gcHVzaCBiYXNlZCBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3NyY193YWl0KSwgKGdzdF9iYXNlX3NyY191cGRhdGVfbGVuZ3RoKSwKLQkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2NoZWNrX2dldF9yYW5nZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2NoZWNrX2dldF9yYW5nZSksIChnc3RfYmFzZV9zcmNfcGFkX2NoZWNrX2dldF9yYW5nZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLCAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KSwKLQkgIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVsbCk6Ci0JICBVcGRhdGUgZG9jcy4KLQkgIGJsb2Nrc2l6ZSA9PSAwIG5vdyBtZWFucyB0aGUgZGVmYXVsdCBibG9ja3NpemUgd2hlbiB3b3JraW5nIGluIHB1c2gKLQkgIGJhc2VkIG1vZGUuCi0JICBSZW1vdmUgc29tZSBwb2ludGxlc3MgYXNzZXJ0cyBpbiBfd2FpdCBmdW5jdGlvbi4KLQkgIEZpeCBvZmZzZXQvbGVuZ3RoIGNhbGN1bGF0aW9ucyBhbmQgRU9TIGhhbmRsaW5nLiBXZSBjYW4gbm93IHB1bGwgMAotCSAgYnl0ZXMgYXMgd2VsbCwgd2hpY2ggaXMgYWxsb3dlZC4KLQkgIHVzZSBfY2hlY2tfZ2V0X3JhbmdlKCkgdG8gZGVjaWRlIGlmIHdlIGNhbiBvcGVyYXRlIGluIF9wdWxsIGJhc2VkCi0JICBtb2RlLgotCSAgRml4IHJlZmNvdW50aW5nIGxlYWsgd2hlbiBjaGVja19nZXRfcmFuZ2UgZnVuY3Rpb24gd2FzIG5vdAotCSAgaW1wbGVtZW50ZWQuCi0JICBBUEkgR3N0QmFzZVNyYzo6YmxvY2tzaXplIHJhbmdlIGNhbiBiZSAwIHRvbyBub3cgKGRlZmF1bHQpCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChmaWxlc3JjX3N1aXRlKToKLQkgIEFkZGVkIGNoZWNrIHRvIHRlc3QgX2dldF9yYW5nZSgpIGJlaGF2aW91ci4KLQotMjAwNi0wNy0wNiAxNToyMTo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC4qOiBMb3RzIG9mIGNvbW1lbnRzIGFuZCBkb2NzIGFkZGVkIHRvIHRoZSBwYWQgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY2hhaW5fdW5jaGVja2VkKSwgKGdzdF9wYWRfY2hhaW4pLAotCSAgKGdzdF9wYWRfcHVzaCksIChnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UpLCAoZ3N0X3BhZF9nZXRfcmFuZ2UpLAotCSAgKGdzdF9wYWRfcHVsbF9yYW5nZSk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIExvdHMgb2YgY29tbWVudHMgYW5kIGRvY3MgYWRkZWQgdG8gdGhlIHBhZCBmdW5jdGlvbnMuCi0JICBGbGVzaCBvdXQgdGhlIGV4cGVjdGVkIGJlaGF2aW91ciBvZiB0aGUgZ2V0X3JhbmdlKCkgZnVuY3Rpb25zLgotCi0yMDA2LTA3LTA2IDA5OjIxOjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBSZW1vdmUgY29tbWEgYXQgZW5kIG9mIGVudW1lcmF0b3IgbGlzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmg6Ci0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmg6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgICogZ3N0L2dzdHBsdWdpbi5oOgotCSAgKiBnc3QvZ3N0dGFzay5oOgotCSAgUmVtb3ZlIGNvbW1hIGF0IGVuZCBvZiBlbnVtZXJhdG9yIGxpc3QuCi0KLTIwMDYtMDctMDUgMTk6NTY6MDggKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgd2luMzIvY29tbW9uLzogQWRkIG5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0ZGF0YXByb3RvY29sLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYnNndHJlYW1lci5kZWY6Ci0JICBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KLQotMjAwNi0wNy0wNSAxODoyMDo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6IEFkZCBzb21lIG1vcmUgZG9jcyBoZXJlIGFuZCB0aGVyZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzogKGdzdF9wdXNoX3NyY19jaGVja19nZXRfcmFuZ2UpOgotCSAgQWRkIHNvbWUgbW9yZSBkb2NzIGhlcmUgYW5kIHRoZXJlLgotCi0yMDA2LTA3LTA1IDE4OjE4OjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFdoZW4gb3BlcmF0aW5nIGluIHB1bGwgbW9kZSB1cGRhdGUgdGhlIG9mZnNldCBzbyB0aGF0IHdlIHJlYWQgc2VxdWVudGlhbGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9vYmplY3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfbG9vcCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6Ci0JICBXaGVuIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUgdXBkYXRlIHRoZSBvZmZzZXQgc28gdGhhdCB3ZQotCSAgcmVhZCBzZXF1ZW50aWFsbHkuCi0KLTIwMDYtMDctMDUgMTg6MTc6MDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBBdm9pZCBzdHJkdXAuICh3aWxsIGhhcHBlbiBpbiBsaWJ4bWwsIGJ1dCBoZXkhKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAocmVhZF9zdHJpbmcpOgotCSAgQXZvaWQgc3RyZHVwLiAod2lsbCBoYXBwZW4gaW4gbGlieG1sLCBidXQgaGV5ISkKLQkgICogZ3N0L2dzdHVyaS5jOgotCSAgQWRkIHNvbWUgbW9yZSBkb2NzLgotCi0yMDA2LTA3LTA1IDE3OjA5OjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBObyBwb2ludCBpbiBjaGVja2luZyBpZiB0aGUgc2l6ZSBvZiB0aGUgc3ViYnVmZmVyID4gMCwgdGhlIGNvZGUgaGFuZGxlcyBpdCBjb3JyZWNsdHkgYXMgZGVtb25zdHJhdGVkIGJ5IHVuaXQgdGVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChfZ3N0X2J1ZmZlcl9jb3B5KSwgKGdzdF9idWZmZXJfY3JlYXRlX3N1Yik6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3RfYnVmZmVyX3N1aXRlKToKLQkgIE5vIHBvaW50IGluIGNoZWNraW5nIGlmIHRoZSBzaXplIG9mIHRoZSBzdWJidWZmZXIgPiAwLCB0aGUKLQkgIGNvZGUgaGFuZGxlcyBpdCBjb3JyZWNsdHkgYXMgZGVtb25zdHJhdGVkIGJ5IHVuaXQgdGVzdC4KLQkgIEFsc28gYWRkIGEgdW5pdCB0ZXN0IGZvciB0aGUgemVybyBzaXplZCBfbmV3X2FuZF9hbGxvYyBhbmQKLQkgIF9jb3B5LiBGaXhlcyAjMzQ2NjYzLgotCi0yMDA2LTA3LTA1IDA4OjE2OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogTWFrZSBzdXJlIHRoZSBidWZmZXIgd2UgcGFzcyB0byB0cmFuc2Zvcm1faXAgaGFzIGEgcmVmY291bnQgb2YgMSBhbmQgdGh1cyBpcyB3cml0YWIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlcik6Ci0JICBNYWtlIHN1cmUgdGhlIGJ1ZmZlciB3ZSBwYXNzIHRvIHRyYW5zZm9ybV9pcCBoYXMgYSByZWZjb3VudCBvZgotCSAgMSBhbmQgdGh1cyBpcyB3cml0YWJsZS4gRml4ZXMgIzM0MzE5NgotCi0yMDA2LTA3LTA0IDA5OjAxOjUxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLio6IEFkZCAic2VxdWVudGlhbCIgcHJvcGVydHksIG9mZiBieSBkZWZhdWx0LCB0byB1c2UgbWFkdmlzZSBhbmQgaGludCB0byB0aGUga2VybmVsIHRoYXQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2ZpbGVfc3JjX2luaXQpLCAoZ3N0X2ZpbGVfc3JjX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2ZpbGVfc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfZmlsZV9zcmNfbWFwX3JlZ2lvbik6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgotCSAgQWRkICJzZXF1ZW50aWFsIiBwcm9wZXJ0eSwgb2ZmIGJ5IGRlZmF1bHQsIHRvIHVzZSBtYWR2aXNlIGFuZCBoaW50Ci0JICB0byB0aGUga2VybmVsIHRoYXQgc2VxdWVudGlhbCBhY2Nlc3MgaXMgZGVzaXJlZC4KLQkgIFRvdWNoIGFsbCByZXRyaWV2ZWQgcGFnZXMgYnkgZGVmYXVsdCB0byBlbnN1cmUgdGhleSBhcmUgcHVsbGVkCi0JICBpbnRvIG1lbW9yeS4gKENsb3NlcyAjMzQ1NzIwKQotCi0yMDA2LTA3LTAzIDE3OjQ0OjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IFNtYWxsIGRvY3MgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJsb2NrLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1keW5hbWljLnR4dDoKLQkgIFNtYWxsIGRvY3MgdXBkYXRlcy4KLQotMjAwNi0wNy0wMyAxNjo1Nzo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogVXNlIEdTbGljZSB3aGVuIHRoZSBnbGliIHdlIGJ1aWxkIGFnYWluc3QgaXMgPj0gMi4xMAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19uZXdfZW1wdHkpLCAoX2dzdF9jYXBzX2ZyZWUpLAotCSAgKGdzdF9jYXBzX3VucmVmKSwgKGdzdF9zdGF0aWNfY2Fwc19nZXQpLAotCSAgKGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUpOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19lbnRyeV9uZXcpLCAoX2dzdF9jbG9ja19pZF9mcmVlKToKLQkgIFVzZSBHU2xpY2Ugd2hlbiB0aGUgZ2xpYiB3ZSBidWlsZCBhZ2FpbnN0IGlzID49IDIuMTAKLQotMjAwNi0wNy0wMyAxNjo0NjowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogU21hbGwgY2xlYW51cCBpbiBwYWQgYWN0aXZhdGlvbiBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlKToKLQkgIFNtYWxsIGNsZWFudXAgaW4gcGFkIGFjdGl2YXRpb24gY29kZS4KLQotMjAwNi0wNy0wMyAxNDoxNDo0OCArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIFRoZSBhdHRhY2hlZCBwYXRjaCB3aWxsIG1ha2UgdGhlIGluY2x1c2lvbiBvZiBnZXR0ZXh0LmggdW5jb25kaXRpb25hbCBpbiBnc3QvZ3N0LWkxOG4tYXBwLmggYW5kIGdzdC9nc3QtaTE4bi1saWIuaCwgYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXQgYXhpcyBkb3QgY29tPgotCSAgKiBnc3QvZ3N0LWkxOG4tYXBwLmg6Ci0JICAqIGdzdC9nc3QtaTE4bi1saWIuaDoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X3NpZ25hbF9pbmZvKToKLQkgIFRoZSBhdHRhY2hlZCBwYXRjaCB3aWxsIG1ha2UgdGhlIGluY2x1c2lvbiBvZiBnZXR0ZXh0LmggdW5jb25kaXRpb25hbCBpbgotCSAgZ3N0L2dzdC1pMThuLWFwcC5oIGFuZCBnc3QvZ3N0LWkxOG4tbGliLmgsIGFuZCBpdCB3aWxsIHJlbW92ZSB0aGUgaW5jbHVzaW9uIG9mCi0JICBsaWJpbnRsLmggaW4gdG9vbHMvZ3N0LWluc3BlY3QuYy4KLQkgIFRoaXMgYWxsb3dzIHVzZSBvZiAtLWRpc2FibGUtbmxzIGFnYWluIGFuZCBmaXhlcyAjMzQ0NjQyLgotCi0yMDA2LTA3LTAzIDExOjEwOjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgZml4IGxlYWsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGxlYWsKLQotMjAwNi0wNy0wMyAxMDozMDo0OSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBJbXBsZW1lbnQgcGFkIGJsb2NraW5nIG9uIGV2ZW50cyBhY2NvcmRpbmcgdG8gcGFydC1ibG9jay50eHQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoaGFuZGxlX3BhZF9ibG9jayksIChnc3RfcGFkX3B1c2hfZXZlbnQpOgotCSAgSW1wbGVtZW50IHBhZCBibG9ja2luZyBvbiBldmVudHMgYWNjb3JkaW5nIHRvIHBhcnQtYmxvY2sudHh0LgotCSAgTW9yZSBjb21tZW50cyBvbiBiZWhhdmlvdXIuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOiAodGVzdF9ldmVudCk6Ci0JICBTZW5kIGV2ZW50IHRvIHBlZXIgcGFkIG9mIGJsb2NrZWQgcGFkIChlbHNlIGl0IHdpbGwgYmxvY2spLgotCi0yMDA2LTA3LTAyIDIzOjIyOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogaWYgd2UgZ2V0IHRoZSB3cm9uZyBtZXNzYWdlLCBnaXZlIHVzIHRoZSB0eXBlcyBhcyBzdHJpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3IpLAotCSAgKGdzdF9jaGVja19ydW5fc3VpdGUpOgotCSAgaWYgd2UgZ2V0IHRoZSB3cm9uZyBtZXNzYWdlLCBnaXZlIHVzIHRoZSB0eXBlcyBhcyBzdHJpbmcKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfc3RhcnQpOgotCSAgRml4IGEgdHJhbnNsYXRhYmxlCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzcmMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIGFkZCBhIHRlc3QgZm9yIHRyeWluZyB0byBvcGVuIGEgbm9uLWV4aXN0aW5nIGZpbGUKLQotMjAwNi0wNy0wMiAyMjo0NDoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBhZGQgbWFjcm9zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBtYWNyb3MKLQotMjAwNi0wNy0wMiAyMjoyODozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgcmVtb3ZlIGRvdWJsZSB2YXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGRvdWJsZSB2YXIKLQotMjAwNi0wNy0wMiAyMjoyNzozMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICBjbGVhbiBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNsZWFuIG1vcmUKLQotMjAwNi0wNy0wMiAyMjoyMDoyMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvZ3N0Ly5naXRpZ25vcmU6Ci0JKiBkb2NzL2xpYnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2JlbmNobWFya3MvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvbGF1bmNoLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvcXVldWUvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL3R5cGVmaW5kLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy94bWwvLmdpdGlnbm9yZToKLQkgIG1vYXAgaWdub3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vYXAgaWdub3JlCi0KLTIwMDYtMDctMDIgMjI6MTc6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6IGFkZCBhIHRlc3QgZm9yIGFkZGluZyBzZWxmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2Jpbl9zdWl0ZSk6Ci0JICBhZGQgYSB0ZXN0IGZvciBhZGRpbmcgc2VsZgotCi0yMDA2LTA3LTAyIDIyOjA1OjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDogYWRkIHNvbWUgYXNzZXJ0XyBhcyBhbGlhcyBmb3IgZmFpbF91bmxlc3NfKgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBhZGQgc29tZSBhc3NlcnRfIGFzIGFsaWFzIGZvciBmYWlsX3VubGVzc18qCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9zdWl0ZSk6Ci0JICBpbmNyZWFzZSB0ZXN0IGNvdmVyYWdlCi0KLTIwMDYtMDctMDIgMjE6NTQ6NDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBNYWtlZmlsZS5hbTogaW5jbHVkZSBsY292Lm1hayBmb3IgbGNvdiBjb3ZlcmFnZSBnZW5lcmF0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICBpbmNsdWRlIGxjb3YubWFrIGZvciBsY292IGNvdmVyYWdlIGdlbmVyYXRpb24KLQkgICogdG9vbHMvTWFrZWZpbGUuYW06Ci0JICBhZGQgdG8gQ0xFQU5GSUxFUwotCi0yMDA2LTA3LTAyIDIxOjUyOjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgd2hpdGVzcGFjZS9kb2MgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgd2hpdGVzcGFjZS9kb2MgZml4ZXMKLQotMjAwNi0wNy0wMiAxNjoyNzoxNCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZTogbW9hcGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICBtb2FwaW5nCi0KLTIwMDYtMDctMDIgMTQ6Mzk6MTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb25maWd1cmUuYWM6IGRvbid0IHNldCBDRkxBR1MgYW5kIGZyaWVuZHMgZm9yIGdjb3YsIGRvbmUgZnJvbSBHU1RfR0NPViBub3cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBkb24ndCBzZXQgQ0ZMQUdTIGFuZCBmcmllbmRzIGZvciBnY292LCBkb25lIGZyb20gR1NUX0dDT1Ygbm93Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgY2xlYW4gdXAgZ2NvdiBmaWxlcwotCi0yMDA2LTA3LTAyIDE0OjM3OjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGNhcHMuYzogcmVtb3ZlIGdzdF9jYXBzX3NpbXBsaWZ5OyBpdCB3YXMgbm90IGRlY2xhcmVkIGFuZCBub3QgdXNlZCBhbmQgZGVwcmVjYXRlZCBpbiAwLjgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfcmVtb3ZlX2FuZF9nZXRfc3RydWN0dXJlKToKLQkgIHJlbW92ZSBnc3RfY2Fwc19zaW1wbGlmeTsgaXQgd2FzIG5vdCBkZWNsYXJlZCBhbmQgbm90IHVzZWQKLQkgIGFuZCBkZXByZWNhdGVkIGluIDAuOAotCi0yMDA2LTA3LTAyIDE0OjA1OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBkb24ndCBwdXQgZW1wdHkgcGF0aHMgb24gUFlUSE9OUEFUSAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIGRvbid0IHB1dCBlbXB0eSBwYXRocyBvbiBQWVRIT05QQVRICi0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICByZW1vdmUgc29tZSBzeW1ib2xzIHRoYXQgYXJlIG5vdCB0aGVyZQotCi0yMDA2LTA3LTAyIDEyOjU3OjE5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkgIHVuYnJlYWsgdGVzdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1bmJyZWFrIHRlc3QKLQotMjAwNi0wNy0wMiAxMjo1NDowMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3RjYXBzLmM6IHdoaXRlc3BhY2UgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfY29tcGFyZV9zdHJ1Y3R1cmVzKToKLQkgIHdoaXRlc3BhY2UgZml4ZXMKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2NhcHNfc3VpdGUpOgotCSAgYWRkIG1vcmUgdGVzdHMKLQotMjAwNi0wNy0wMiAxMjo1MjowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC8uZ2l0aWdub3JlOgotCSAgaWdub3JlIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWdub3JlIG1vcmUKLQotMjAwNi0wNy0wMiAwOTowNDo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbTogYnVpbGQgZGF0YXByb3RvY29sIHRlc3QgYnkgbGlua2luZyB0byB0aGUgbGliLCBpbnN0ZWFkIG9mIGNvbXBpbGluZyB0aGUgc291cmNlLCBzby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkgIGJ1aWxkIGRhdGFwcm90b2NvbCB0ZXN0IGJ5IGxpbmtpbmcgdG8gdGhlIGxpYiwgaW5zdGVhZCBvZgotCSAgY29tcGlsaW5nIHRoZSBzb3VyY2UsIHNvIHdlIGdldCBjb3ZlcmFnZQotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jOiAoZXZlbnRfZnVuYyksIChzZXR1cF9maWxlc3JjKSwKLQkgIChjbGVhbnVwX2ZpbGVzcmMpLCAoR1NUX1NUQVJUX1RFU1QpLCAoZmlsZXNyY19zdWl0ZSk6Ci0JICBhZGQgYSB0ZXN0IGZvciBmaWxlc3JjCi0KLTIwMDYtMDctMDIgMDg6MjY6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IFB1c2ggY292ZXJhZ2UgZnJvbSA1OS4wNCUgdG8gNzAuMDAlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfc3VpdGUpOgotCSAgUHVzaCBjb3ZlcmFnZSBmcm9tIDU5LjA0JSB0byA3MC4wMCUKLQotMjAwNi0wNy0wMiAwMDo0MDo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogUHVzaCBjb3ZlcmFnZSBmcm9tIDU5LjA0JSB0byA3MC4wMCUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X3N0cnVjdHVyZV9zdWl0ZSk6Ci0JICBQdXNoIGNvdmVyYWdlIGZyb20gNTkuMDQlIHRvIDcwLjAwJQotCi0yMDA2LTA3LTAyIDAwOjM5OjI4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogbGlicy9nc3QvYmFzZS8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvY2hlY2svLmdpdGlnbm9yZToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC8uZ2l0aWdub3JlOgotCSAgbW9hcCBpZ25vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW9hcCBpZ25vcmUKLQotMjAwNi0wNy0wMiAwMDozODozNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvLmdpdGlnbm9yZToKLQkgIG1vYXAgaWdub3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vYXAgaWdub3JlCi0KLTIwMDYtMDctMDIgMDA6MzM6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbTogZ3N0LWluc3BlY3QgZXZlcnkgZWxlbWVudDsgdGhpcyBtYWtlcyBzdXJlIHRoYXQgd2UgYWxzbyBnZXQgY292ZXJhZ2Ugb24gZWxlbWVudCdzIGdldC9zZXQgZnUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGdzdC1pbnNwZWN0IGV2ZXJ5IGVsZW1lbnQ7IHRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIGFsc28gZ2V0Ci0JICBjb3ZlcmFnZSBvbiBlbGVtZW50J3MgZ2V0L3NldCBmdW5jdGlvbnMKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfc3VpdGUpOgotCSAgUHVzaCBjb3ZlcmFnZSBmcm9tIDU5LjA0JSB0byA3MC4wMCUKLQotMjAwNi0wNy0wMSAyMzoyNjowNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogc2V0IENGTEFHUyBhbmQgZnJpZW5kcyB0byAtTzAgaWYgZ2NvdiBpcyBiZWluZyB1c2VkIGFkZCBHQ09WIExJQlMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBzZXQgQ0ZMQUdTIGFuZCBmcmllbmRzIHRvIC1PMCBpZiBnY292IGlzIGJlaW5nIHVzZWQKLQkgIGFkZCBHQ09WIExJQlMKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06Ci0JICBhZGQgbWFrZWZpbGUgcnVsZXMgdG8gZ2VuZXJhdGUgZ2NvdiBkYXRhIGFuZCBjbGVhbiB1cAotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGFkZCBhIGNvdmVyYWdlIHRhcmdldCB0aGF0IGdlbmVyYXRlcyBhbiBodG1sIG92ZXJ2aWV3Ci0JICBvZiBjb3ZlcmFnZSBkYXRhCi0KLTIwMDYtMDctMDEgMjM6MTk6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgZml4IGRvY3MgYnVpbGQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGRvY3MgYnVpbGQKLQotMjAwNi0wNy0wMSAyMDo1Njo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrLzogdXNlIHRoZSBuZXcgbWFjcm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogKGdzdF9zaW5rc19zdWl0ZSk6Ci0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3N1aXRlKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6IChnc3RfaXRlcmF0b3Jfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2Vfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmM6IChnc3RfdGFza19zdWl0ZSk6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbGxlY3RwYWRzLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dkcC5jOiAoZ3N0X2RwX3N1aXRlKToKLQkgICogdGVzdHMvY2hlY2svbGlicy9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzogKGxpYnNhYmlfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3R5cGVmaW5kaGVscGVyLmM6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3N0cmVzcy5jOiAoc3RyZXNzX3N1aXRlKToKLQkgIHVzZSB0aGUgbmV3IG1hY3JvCi0KLTIwMDYtMDctMDEgMjA6NTQ6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay4qOiBjcmVhdGUgYSBtYWNybyBhbmQgZnVuY3Rpb24gc28gdGhhdCB0aGUgc2ltcGxlIHVuaXQgdGVzdCBjYXNlIGNhbiBiZSBqdXN0IG9uZSBtYWNybyB0byBjcmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX3J1bl9zdWl0ZSk6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBjcmVhdGUgYSBtYWNybyBhbmQgZnVuY3Rpb24gc28gdGhhdCB0aGUgc2ltcGxlIHVuaXQgdGVzdAotCSAgY2FzZSBjYW4gYmUganVzdCBvbmUgbWFjcm8gdG8gY3JlYXRlIG1haW4oKQotCi0yMDA2LTA2LTMwIDEzOjE3OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBGaXggZGVzZXJpYWxpc2F0aW9uIGZyb20gWE1MLiBTZXQgcGFyZW50IG1hbnVhbGx5IGluc3RlYWQgb2YgdXNpbmcgZ3N0X2Jpbl9hZGQoKSwgc2luY2UgZ3N0X2Jpbl9hZGQoKSB3aWxsIHVubGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3Jlc3RvcmVfdGh5c2VsZik6Ci0JICAqIGdzdC9nc3R4bWwuYzogKGdzdF94bWxfbWFrZV9lbGVtZW50KToKLQkgIEZpeCBkZXNlcmlhbGlzYXRpb24gZnJvbSBYTUwuIFNldCBwYXJlbnQgbWFudWFsbHkKLQkgIGluc3RlYWQgb2YgdXNpbmcgZ3N0X2Jpbl9hZGQoKSwgc2luY2UgZ3N0X2Jpbl9hZGQoKQotCSAgd2lsbCB1bmxpbmsgYWxsIHBhZHMgb2YgdGhlIGVsZW1lbnQgYmVpbmcgYWRkZWQuCi0JICBGaXhlcyAjMzQxNjY3LgotCi0yMDA2LTA2LTI4IDE1OjE5OjA4ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgZ3N0L2dzdC5jOiBGaXggbWlzc2luZyBnX3N0cmR1cCgpIGFuZCBkb3VibGUgZnJlZSB3aGVuIHVzaW5nIHRoZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXQgYXhpcyBjb20+Ci0JICAqIGdzdC9nc3QuYzogKHByZXBhcmVfZm9yX2xvYWRfcGx1Z2luX2Z1bmMpLCAoc3BsaXRfYW5kX2l0ZXJhdGUpOgotCSAgRml4IG1pc3NpbmcgZ19zdHJkdXAoKSBhbmQgZG91YmxlIGZyZWUgd2hlbiB1c2luZyB0aGUKLQkgIC0tZ3N0LXBsdWdpbi1sb2FkIGNvbW1hbmQgbGluZSBvcHRpb24gKCMzNDYwOTcpLgotCi0yMDA2LTA2LTIzIDEzOjE2OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0aW5mby5jOiBQcm9tb3RlIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgaW4gZXhhbXBsZSBpbiBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6Ci0JICBQcm9tb3RlIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgaW4gZXhhbXBsZSBpbiBkb2NzLgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgVXNlIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgaGVyZSB0b28gKCMzNDI1MDMpLgotCi0yMDA2LTA2LTIzIDEwOjMwOjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDogRml4IGJ1ZmZlciBwcm9iZSBleGFtcGxlIGNvbXBpbGF0aW9uIGluCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBGaXggYnVmZmVyIHByb2JlIGV4YW1wbGUgY29tcGlsYXRpb24gaW4KLQkgIEFETSAoIzM0NTcwOCkuCi0KLTIwMDYtMDYtMjIgMTc6MDk6MTMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IFdlIG5lZWQgdG8gZGVhY3RpdmF0ZSBzcmMgcGFkcyBmaXJzdCBhbmQgdGhlbiBzaW5rIHBhZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgotCSAgV2UgbmVlZCB0byBkZWFjdGl2YXRlIHNyYyBwYWRzIGZpcnN0IGFuZCB0aGVuIHNpbmsgcGFkcy4KLQkgIFRoZSByZWFzb24gaXMgdGhlIHNyYyBwYWRzIG1pZ2h0IGJlIGJsb2NraW5nIHdoaWxlIGhvbGRpbmcgdGhlIHN0cmVhbWluZwotCSAgbG9jaywgc28gd2UgbmVlZCB0byBkZWFjdGl2YXRlIHRoZW0gZmlyc3Qgc28gdGhhdCBkZWFjdGl2YXRpbmcgdGhlIHNpbmsKLQkgIHBhZHMgZG9lc24ndCBibG9jayAoc2luY2UgaXQgd2lsbCByZXF1aXJlIHRoZSBzdHJlYW1pbmcgbG9jaykuCi0KLTIwMDYtMDYtMjIgMTU6MTI6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBGb3Jnb3QgdG8gcmVtb3ZlIHR3byB1bm5lZWRlZCB1bnJlZnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICBGb3Jnb3QgdG8gcmVtb3ZlIHR3byB1bm5lZWRlZCB1bnJlZnMuCi0JICBTaW1wbGlmeSBhIGNoZWNrIF9pc19lcXVhbCBhbGxyZWFkeSBjaGVja3MgdGhlIG9idmlvdXMgY2FzZS4KLQotMjAwNi0wNi0yMiAxNDowOTo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6IFNvbWUgZG9jcyBhYm91dCB3aGF0IHBhZF9ibG9jayBzaG91bGQgZG8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ibG9jay50eHQ6Ci0JICBTb21lIGRvY3MgYWJvdXQgd2hhdCBwYWRfYmxvY2sgc2hvdWxkIGRvLgotCi0yMDA2LTA2LTIyIDEzOjUxOjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Y2Fwcy5jOiBGaXggY3Jhc2hlciB3aGVuIHBhc3NlZCBOVUxMLiBEb2MgY2xhcmlmaWNhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfcmVwbGFjZSk6Ci0JICBGaXggY3Jhc2hlciB3aGVuIHBhc3NlZCBOVUxMLiBEb2MgY2xhcmlmaWNhdGlvbi4KLQkgIE9wdGltaXplIGZvciB0aGUgdHJpdmlhbCBjYXNlLgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOgotCSAgU21hbGwgY2xlYW51cHMuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgotCSAgU21hbGwgZG9jdW1lbnRhdGlvbiBjbGVhbnVwLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKToKLQkgIERvbid0IHVzZSBzaWxseSBnc3RfcGFkX2dldF9uZWdvdGlhdGVkX2NhcHMsIEdTVF9QQURfQ0FQUwotCSAgaXMgd2hhdCB3ZSBuZWVkIGFuZCBpdCBhdm9pZHMgYSB3aG9sZSBsb3Qgb2YgcmVkdW5kYW50Ci0JICByZWZjb3VudCBvcGVyYXRpb25zLgotCi0yMDA2LTA2LTIyIDA4OjUzOjQwICswMDAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcEBseXNhdG9yLmxpdS5zZT4KLQotCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6IEZpeCAnRW1iZWRkaW5nIHN0YXRpYyBlbGVtZW50cycgc2VjdGlvbiB0byB1c2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFBoaWxpcCBKw6RnZW5zdGVkdCAgPHBoaWxpcCBhdCBseXNhdG9yIGxpdSBzZT4KLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICBGaXggJ0VtYmVkZGluZyBzdGF0aWMgZWxlbWVudHMnIHNlY3Rpb24gdG8gdXNlCi0JICBHU1RfUExVR0lOX0RFRklORV9TVEFUSUMgKCMzNDU2MDcpLgotCi0yMDA2LTA2LTIxIDExOjEyOjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOiBBdHRlbXB0IHRvICdmaXgnIHNwdXJpb3VzbHkgZmFpbGluZyB0ZXN0IGNhc2U6IGl0IHNlZW1zIGxpa2UgdGhlIHRpbWVvdXQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOiAodGVzdF9zdG9wX2Zyb21fYXBwKToKLQkgIEF0dGVtcHQgdG8gJ2ZpeCcgc3B1cmlvdXNseSBmYWlsaW5nIHRlc3QgY2FzZTogaXQgc2VlbXMgbGlrZSB0aGUKLQkgIHRpbWVvdXQgb2YgaGFsZiBhIHNlY29uZCBpcyBzaW1wbHkgdG9vIHNtYWxsIHdoZW4gdGhlIHN5c3RlbSBpcyB1bmRlcgotCSAgbG9hZCBvdGhlcndpc2UsIGFuZCB0aGUgdGltZW91dCBkb2Vzbid0IHJlYWxseSBzZWVtIHRvIHNlcnZlIGFueQotCSAgcGFydGljdWxhciBwdXJwb3NlIGhlcmUuIEdpdmUgdGhlIHBpcGVsaW5lIGEgZmV3IHNlY29uZHMgdG8gcHJlcm9sbAotCSAgZmlyc3QsIGFuZCB0aGVuIGdpdmUgaXQgYW5vdGhlciBoYWxmIGEgc2Vjb25kIHRvIGdvIGZyb20gUEFVU0VEIHRvCi0JICBQTEFZSU5HIGFuZCBtYXJzaGFsIHRoZSBtZXNzYWdlIGludG8gdGhlIG1haW4gdGhyZWFkLgotCi0yMDA2LTA2LTIxIDEwOjE0OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy9nc3QtZmVlZGJhY2stbS5tOiBEb24ndCBvbmx5IHVzZSB1bnZlcnNpb25lZCB0b29scywgdHJ5IHZlcnNpb25lZCB0b29scyBhcyB3ZWxsICgjMzQ1MDg2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtZmVlZGJhY2stbS5tOgotCSAgRG9uJ3Qgb25seSB1c2UgdW52ZXJzaW9uZWQgdG9vbHMsIHRyeSB2ZXJzaW9uZWQgdG9vbHMgYXMgd2VsbAotCSAgKCMzNDUwODYpLgotCi0yMDA2LTA2LTIxIDEwOjAxOjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YnVzLmM6IEZpeCBzb21lIHR5cG9zLCBtYWtlIGRvY3MgbW9yZSBleHBsaWNpdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2NsYXNzX2luaXQpOgotCSAgRml4IHNvbWUgdHlwb3MsIG1ha2UgZG9jcyBtb3JlIGV4cGxpY2l0LgotCi0yMDA2LTA2LTIwIDA4OjQwOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogQWRkZWQgc29tZSBtb3JlIGdob3N0cGFkIHRlc3RzLCBtYWlubHkgYmxvY2tpbmcgYW5kIHByb2Jlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKGJsb2NrX2NhbGxiYWNrKSwKLQkgIChHU1RfU1RBUlRfVEVTVCksIChnc3RfZ2hvc3RfcGFkX3N1aXRlKToKLQkgIEFkZGVkIHNvbWUgbW9yZSBnaG9zdHBhZCB0ZXN0cywgbWFpbmx5IGJsb2NraW5nCi0JICBhbmQgcHJvYmVzLgotCi0yMDA2LTA2LTE5IDA4OjU2OjQ4ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgbGF0ZXN0IHVwZGF0ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbGF0ZXN0IHVwZGF0ZXMKLQotMjAwNi0wNi0xNiAxNjoyODozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay4qOiBDaGVjayBpZiB3ZSBjYW4gc2VlayBpbiB0aGUgZmlsZSBpbnN0ZWFkIG9mIGFzc3VtaW5nIHdlIGFsd2F5cyBjYW4uIFBvc3QgYW4gZXJyb3Igd2hlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19vcGVuX2ZpbGUpLAotCSAgKGdzdF9maWxlX3NpbmtfY2xvc2VfZmlsZSksIChnc3RfZmlsZV9zaW5rX2RvX3NlZWspLAotCSAgKGdzdF9maWxlX3NpbmtfZXZlbnQpLCAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6Ci0JICBDaGVjayBpZiB3ZSBjYW4gc2VlayBpbiB0aGUgZmlsZSBpbnN0ZWFkIG9mIGFzc3VtaW5nCi0JICB3ZSBhbHdheXMgY2FuLiBQb3N0IGFuIGVycm9yIHdoZW4gd2UgYXJlIGFza2VkIHRvIHNlZWsgaW4gYQotCSAgbm9uLXNlZWthYmxlIGZpbGUgKGxpa2UgYSBmaWZvKS4gRml4ZXMgIzM0MzMxMi4KLQkgIFNvbWUgY2xlYW51cHMuCi0KLTIwMDYtMDYtMTYgMTQ6MzE6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbjogVW4tZ2FyYmxlIChmb3VyY2MpIGJpdCBpbiBmaWx0ZXJlZCBjYXBzIHNlY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgVW4tZ2FyYmxlIChmb3VyY2MpIGJpdCBpbiBmaWx0ZXJlZCBjYXBzIHNlY3Rpb24uCi0KLTIwMDYtMDYtMTYgMDk6Mzk6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsLzogRG9uJ3QgbGVhayBidXMgcmVmZXJlbmNlIGluIHNhbXBsZSBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDoKLQkgICogZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sOgotCSAgRG9uJ3QgbGVhayBidXMgcmVmZXJlbmNlIGluIHNhbXBsZSBjb2RlLgotCi0yMDA2LTA2LTE2IDA4OjMwOjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBhdXRvZ2VuLnNoOiBBZGQgZGVmYXVsdCBmb3IgbmV3IC0tZW5hYmxlLXBsdWdpbi1kb2NzIHN3aXRjaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBhdXRvZ2VuLnNoOgotCSAgQWRkIGRlZmF1bHQgZm9yIG5ldyAtLWVuYWJsZS1wbHVnaW4tZG9jcyBzd2l0Y2guCi0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFVzZSBuZXcgR1NUX1BMVUdJTl9ET0NTIG1hY3JvIHRvIGNoZWNrIGZvciBweXhtbCBldGMuCi0JICBGaXhlcyAjMzQ0MDM5LgotCSAgKiBkb2NzL01ha2VmaWxlLmFtOgotCSAgVXNlIG5ldyBFTkFCTEVfUExVR0lOX0RPQ1MgY29uZGl0aW9uYWwuCi0KLTIwMDYtMDYtMTQgMTA6MzQ6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogTWFrZSBpdCBjbGVhciB3aXRoIGEgRklYTUUgYW5kIGEgcmVhbCBkZWZpbmUgd2hhdCB0aGUgI2lmIDAgcHJldmlvdXNseSBkaXNhYmxlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fcXVlcnlfZHVyYXRpb25fZG9uZSksIChnc3RfYmluX3F1ZXJ5KToKLQkgIE1ha2UgaXQgY2xlYXIgd2l0aCBhIEZJWE1FIGFuZCBhIHJlYWwgZGVmaW5lIHdoYXQgdGhlICNpZiAwCi0JICBwcmV2aW91c2x5IGRpc2FibGVkLgotCi0yMDA2LTA2LTE0IDEwOjMxOjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlLzogRG9uJ3QgcmFuZG9tbHkgYW5kIHNpbGVudGx5IHJlc2V0IGEgc2VnbWVudCB3aGVuIHRoZSBmb3JtYXQgY2hhbmdlcyBhcyB0aGlzIGlzIGEgYnVnIHNvbWV3aGVyZSB1cHN0cmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbmZpZ3VyZV9zZWdtZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfZXZlbnRmdW5jKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCk6Ci0JICBEb24ndCByYW5kb21seSBhbmQgc2lsZW50bHkgcmVzZXQgYSBzZWdtZW50IHdoZW4gdGhlIGZvcm1hdAotCSAgY2hhbmdlcyBhcyB0aGlzIGlzIGEgYnVnIHNvbWV3aGVyZSB1cHN0cmVhbS4gRml4ZXMgIzMzMDM3OS4KLQotMjAwNi0wNi0xNCAwODoyNjo1MyArMDAwMCAgV291dGVyIFBhZXNlbiA8d291dGVyQGthbmdhcm9vdC5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiBGaXggY29udHJvbGxpbmcgb2YgZmxvYXQgcHJvcGVydGllcyAoIzM0NDg0OSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBXb3V0ZXIgUGFlc2VuICA8d291dGVyIGF0IGthbmdhcm9vdCBuZXQ+Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X25ldyk6Ci0JICBGaXggY29udHJvbGxpbmcgb2YgZmxvYXQgcHJvcGVydGllcyAoIzM0NDg0OSkuCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSAgKGdzdF90ZXN0X21vbm9fc291cmNlX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3Rlc3RfbW9ub19zb3VyY2Vfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfdGVzdF9tb25vX3NvdXJjZV9jbGFzc19pbml0KSwgKEdTVF9TVEFSVF9URVNUKToKLQkgIFdoaWxlIHdlJ3JlIGF0IGl0LCBhZGQgc29tZSBmbG9hdCBzdHVmZiB0byB1bml0IHRlc3QuCi0KLTIwMDYtMDYtMTMgMTk6MjQ6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBkb2NzLzogYWRkIGEgZ2RwIGltYWdlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9SRUFETUU6Ci0JICAqIGRvY3MvaW1hZ2VzL2dkcC1oZWFkZXIuc3ZnOgotCSAgYWRkIGEgZ2RwIGltYWdlCi0JICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9saWJzL2dkcC1oZWFkZXIucG5nOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JICBhZGQgaXQgdG8gdGhlIEFQSSBkb2NzCi0JICAqIGRvY3MvbWFudWFsL2ludHJvLW1vdGl2YXRpb24ueG1sOgotCSAgZml4IHR5cG8KLQotMjAwNi0wNi0xMyAxNjo0MTozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdC5jOiBJZiB0aGUgZm9yaygpJ2VkIGNoaWxkIHByb2Nlc3MgY2FuJ3Qgd3JpdGUgdGhlIHVwZGF0ZWQgcmVnaXN0cnkgY2FjaGUgZmlsZSB0byBkaXNrIGZvciBzb21lIHJlYXNvbiwgbWFrZSBpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoc2Nhbl9hbmRfdXBkYXRlX3JlZ2lzdHJ5KSwgKGluaXRfcG9zdCk6Ci0JICBJZiB0aGUgZm9yaygpJ2VkIGNoaWxkIHByb2Nlc3MgY2FuJ3Qgd3JpdGUgdGhlIHVwZGF0ZWQgcmVnaXN0cnkgY2FjaGUKLQkgIGZpbGUgdG8gZGlzayBmb3Igc29tZSByZWFzb24sIG1ha2UgaXQgZXhpdCB3aXRoIGEgZmFpbHVyZSBleGl0IGNvZGUsCi0JICBzbyB0aGF0IHRoZSBwYXJlbnQgY2FuIHRoZW4gcmUtc2NhbiB0aGUgcGx1Z2lucyBpdHNlbGYgYW5kIHVwZGF0ZSB0aGUKLQkgIHJlZ2lzdHJ5IHN0cnVjdHVyZXMgaW4gbWVtb3J5IGFuZCB3b3JrIHdpdGggdGhhdCAocmF0aGVyIHRoYW4gZmFpbGluZwotCSAgd2hlbiBjcmVhdGluZyBlbGVtZW50cyBiZWNhdXNlIHNlZW1pbmdseSBubyBwbHVnaW5zIGFyZSBhdmFpbGFibGUpLgotCSAgUmVmYWN0b3IgcmVnaXN0cnkgc2Nhbm5pbmcgY29kZSBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciB0aGlzIGFuZAotCSAgYWxzbyBzZXBhcmF0ZSBmb3JrKCkgYW5kIG5vbi1mb3JrKCkgY29kZSBwYXRocy4gRml4ZXMgIzM0NDc0OC4KLQotMjAwNi0wNi0xMyAxNjoyNDo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6IEZpeCB3cm9uZyBQbHVnaW5EZXNjLiBGaXhlcyAjMzQ0NzU1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSAgRml4IHdyb25nIFBsdWdpbkRlc2MuIEZpeGVzICMzNDQ3NTUuCi0KLTIwMDYtMDYtMTMgMTM6MzA6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBGaXggc2lsbHkgYnVnIHRoYXQgcHJldmVudGVkIHVzIGZyb20gY3JlYXRpbmcgfi8uZ3N0cmVhbWVyLTAuMTAgYW5kIHdyaXRpbmcgdGhlIHJlZ2lzdHJ5IGluIG9uZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAoZ3N0X3JlZ2lzdHJ5X3htbF93cml0ZV9jYWNoZSk6Ci0JICBGaXggc2lsbHkgYnVnIHRoYXQgcHJldmVudGVkIHVzIGZyb20gY3JlYXRpbmcKLQkgIH4vLmdzdHJlYW1lci0wLjEwIGFuZCB3cml0aW5nIHRoZSByZWdpc3RyeSBpbiBvbmUKLQkgIGdvICh0aGUgZmlyc3QgY2FsbCB0byBnX21rc3RlbXAoKSB3b3VsZCBvdmVyd3JpdGUgdGhlCi0JICBwbGFjZWhvbGRlciBpbiB0aGUgdGVtcGxhdGUgc3RyaW5nLCBzbyB0aGUgc2Vjb25kIGNhbGwKLQkgIHRvIGdfbWtzdGVtcCgpIGFmdGVyIGNyZWF0aW5nIHRoZSBtaXNzaW5nIGRpcmVjdG9yeQotCSAgd291bGQgdGhlbiBlcnJvciBvdXQgd2l0aCAnaW52YWxpZCBhcmd1bWVudCcpLgotCi0yMDA2LTA2LTEzIDExOjE3OjAyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvZ3N0LmM6IEZyZWUgc3RyaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6Ci0JICBGcmVlIHN0cmluZy4KLQotMjAwNi0wNi0xMyAwODoyMDoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IHJlbW92ZSBHTGliIDIuNiBjb21wYXRpYmlsaXR5IGNvZGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzoKLQkgICogZ3N0L2dsaWItY29tcGF0Lmg6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFncyk6Ci0JICByZW1vdmUgR0xpYiAyLjYgY29tcGF0aWJpbGl0eSBjb2RlCi0KLTIwMDYtMDYtMTIgMTY6NTA6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9wYXJzZS9NYWtlZmlsZS5hbTogRml4IGJ1aWxkIHdpdGggJ21ha2UgLWogTicgZXZlbiBtb3JlICgjMzQwMDE2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICBGaXggYnVpbGQgd2l0aCAnbWFrZSAtaiBOJyBldmVuIG1vcmUgKCMzNDAwMTYpLgotCi0yMDA2LTA2LTEyIDA5OjM3OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBGaXggZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgRml4IGRvY3MuCi0KLTIwMDYtMDYtMTIgMDk6Mjk6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RzZWdtZW50LmM6IFVzZSBHX1VOTElLRUxZIHRvIGhlbHAgdGhlIGNvbXBpbGVyIGEgYml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9zZXRfZHVyYXRpb24pLAotCSAgKGdzdF9zZWdtZW50X3NldF9sYXN0X3N0b3ApLCAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspLAotCSAgKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50X2Z1bGwpLCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLAotCSAgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSksIChnc3Rfc2VnbWVudF9jbGlwKToKLQkgIFVzZSBHX1VOTElLRUxZIHRvIGhlbHAgdGhlIGNvbXBpbGVyIGEgYml0LgotCi0yMDA2LTA2LTEyIDA5OjI4OjM1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0Bzb25pY3B1bHNlLmRlPgotCi0JICBnc3QvOiBjb25zdGlmeSBxdWFyayByZWdpc3RyYXRpb24gc3RyaW5ncy4gRml4ZXMgIzM0NDExNQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU3RlZmFuIEtvc3QgPGVuc29uaWMgYXQgc29uaWNwdWxzZSBkb3QgZGU+Ci0JICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X2dldF90eXBlKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jaGFpbl91bmNoZWNrZWQpLCAoZ3N0X3BhZF9jaGFpbiksCi0JICAoZ3N0X3BhZF9wdXNoKToKLQkgIGNvbnN0aWZ5IHF1YXJrIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLiBGaXhlcyAjMzQ0MTE1Ci0JICBBdm9pZCB1bm5lZWRlZCB0eXBlIGNoZWNraW5nIGlzIF9wYWRfcHVzaCgpIGJ5IGludGVybmFsbHkKLQkgIGNhbGxpbmcgZ3N0X3BhZF9jaGFpbl91bmNoZWNrZWQoKS4KLQotMjAwNi0wNi0xMiAwOToyMzo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1ZmZlci5jOiBJbml0IF90eXBlIGZvciBjb25zaXN0ZW5jeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX2dldF90eXBlKSwgKGdzdF9idWZmZXJfZmluYWxpemUpLAotCSAgKF9nc3RfYnVmZmVyX2NvcHkpLCAoZ3N0X2J1ZmZlcl9pc19tZXRhZGF0YV93cml0YWJsZSksCi0JICAoZ3N0X3N1YmJ1ZmZlcl9maW5hbGl6ZSksIChnc3RfYnVmZmVyX2NyZWF0ZV9zdWIpLAotCSAgKGdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0KSwgKGdzdF9idWZmZXJfc3Bhbik6Ci0JICBJbml0IF90eXBlIGZvciBjb25zaXN0ZW5jeS4KLQkgIFVzZSBfRkxBR1MgbWFjcm8gdG8gYXZvaWQgdHlwZSBjaGVjay4KLQkgIEF2b2lkIHVubmVlZGVkIHR5cGUgY2hlY2tzIGluIHN1YmJ1ZmVyIGNvZGUuCi0KLTIwMDYtMDYtMTIgMDk6MTc6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFVzZSBfQ0FTVCBtYWNyb3MgdG8gYXZvaWQgdW5uZWVkZWQgdHlwZSBjaGVja2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChnc3RfZGVidWdfaGVscCk6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fZmluYWxpemUpLCAoZ3N0X3BsdWdpbl9saXN0X2ZyZWUpOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2ZpbmFsaXplKSwKLQkgIChnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiksCi0JICAoZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlKSwgKGdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyKSwKLQkgIChnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIpLCAoZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luKSwKLQkgIChnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlKSwgKGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QpLAotCSAgKGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZV9sb2NrZWQpLCAoZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9sb2NrZWQpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGxvYWRfZmVhdHVyZSksCi0JICAoZ3N0X3JlZ2lzdHJ5X3htbF9yZWFkX2NhY2hlKSwgKGdzdF9yZWdpc3RyeV94bWxfd3JpdGVfY2FjaGUpOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X3VucmVmKSwKLQkgIChnc3RfbWluaV9vYmplY3RfcmVwbGFjZSksIChnc3RfdmFsdWVfbWluaV9vYmplY3RfZnJlZSksCi0JICAoZ3N0X3ZhbHVlX21pbmlfb2JqZWN0X2NvcHkpOgotCSAgVXNlIF9DQVNUIG1hY3JvcyB0byBhdm9pZCB1bm5lZWRlZCB0eXBlIGNoZWNraW5nLgotCSAgQWRkZWQgc29tZSBtb3JlIEdfVU5MSUtFTFkuCi0KLTIwMDYtMDYtMTIgMDk6MTE6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuaDogQXZvaWQgdW5uZWVkZWQgdHlwZSBjaGVja2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBBdm9pZCB1bm5lZWRlZCB0eXBlIGNoZWNraW5nLgotCSAgQVBJOiBHU1RfQlVGRkVSX0lTX0RJU0NPTlQKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkgIEF2b2lkIHR5cGUgY2hlY2sgaW4gZmxhZyBhY2Nlc3Nvci4KLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JICAqIGdzdC9nc3RwbHVnaW4uaDoKLQkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkgIEFkZCBfQ0FTVCBtYWNyb3MuCi0JICBBUEk6IEdTVF9FTEVNRU5UX0ZBQ1RPUllfQ0FTVAotCSAgQVBJOiBHU1RfUExVR0lOX0NBU1QKLQkgIEFQSTogR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QKLQotMjAwNi0wNi0xMiAwOTowNjowMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdG9iamVjdC5jOiBBZGQgR19VTkxJS0VMWSBpbiB0eXBlIHJlZ2lzdHJhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2dldF90eXBlKSwgKGdzdF9vYmplY3RfcmVmKSwKLQkgIChnc3Rfb2JqZWN0X3VucmVmKToKLQkgIEFkZCBHX1VOTElLRUxZIGluIHR5cGUgcmVnaXN0cmF0aW9uLgotCSAgQXZvaWQgdHlwZSBjaGVjayBpbiBfcmVmL191bnJlZiBzaW5jZSB0aGF0IGlzIGFsc28KLQkgIGRvbmUgaW4gZ2xpYi4KLQotMjAwNi0wNi0xMiAwODo1NToyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWRkIEdfVU5MSUtFTFkgaW4gdHlwZSByZWdpc3RyYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVycm9yLmM6IChnc3RfZ19lcnJvcl9nZXRfdHlwZSk6Ci0JICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOiAoZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZSksCi0JICAoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoZ3N0X3RhZ19saXN0X2dldF90eXBlKToKLQkgICogZ3N0L2dzdHRhZ3NldHRlci5jOiAoZ3N0X3RhZ19zZXR0ZXJfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6IChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0dXJpLmM6IChnc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF9kYXRlX2dldF90eXBlKToKLQkgICogZ3N0L2dzdHhtbC5jOiAoZ3N0X3htbF9nZXRfdHlwZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3R5cGUpLAotCSAgKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfdHlwZSk6Ci0JICBBZGQgR19VTkxJS0VMWSBpbiB0eXBlIHJlZ2lzdHJhdGlvbi4KLQotMjAwNi0wNi0xMiAwODo1MToyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogUHJvcGVybHkgcHJpbnQgZW51bSB2YWx1ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X3NpZ25hbF9pbmZvKToKLQkgIFByb3Blcmx5IHByaW50IGVudW0gdmFsdWVzLgotCi0yMDA2LTA2LTEyIDA4OjQ3OjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0aW5mby4qOiBBZGQgc29tZSBHX1tVTl1MSUtFTFkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZm8uYzogKGdzdF9kZWJ1Z19zZXRfYWN0aXZlKSwKLQkgIChnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCksIChfZ3N0X2RlYnVnX25hbWVvZl9mdW5jcHRyKToKLQkgICogZ3N0L2dzdGluZm8uaDoKLQkgIEFkZCBzb21lIEdfW1VOXUxJS0VMWS4KLQkgIE1haW50YWluIF9fZ3N0X2RlYnVnX21pbiB0byBhdm9pZCBmb3JtYXR0aW5nIHRoZSBhcmd1bWVudHMgb2YKLQkgIGRlYnVnIG1lc3NhZ2VzIHRoYXQgd2lsbCBiZSBkcm9wcGVkIGFueXdheSB0byBhdm9pZCBhIGxvdCBvZgotCSAgb3ZlcmhlYWQgZnJvbSB0aGUgZGVidWdnaW5nIHN5c3RlbS4KLQotMjAwNi0wNi0xMSAyMDozNzo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBwby9QT1RGSUxFUy4qOiBhZGQgbWlzc2luZyBmaWxlcyBjb250YWluaW5nIHRyYW5zbGF0YWJsZSBzdHJpbmdzLCB0ZWxsIGludGx0b29sIGFib3V0IG9uZSBleGNlcHRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwby9QT1RGSUxFUy5pbjoKLQkgICogcG8vUE9URklMRVMuc2tpcDoKLQkgIGFkZCBtaXNzaW5nIGZpbGVzIGNvbnRhaW5pbmcgdHJhbnNsYXRhYmxlIHN0cmluZ3MsIHRlbGwgaW50bHRvb2wgYWJvdXQKLQkgIG9uZSBleGNlcHRpb24KLQotMjAwNi0wNi0xMSAxNzoyODoxOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9saWJzLy5jdnNpZ25vcmU6IGFkZCB0ZXN0LWJpbmFyeSB0byBpZ25vcmUgbGlzdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvLmN2c2lnbm9yZToKLQkgIGFkZCB0ZXN0LWJpbmFyeSB0byBpZ25vcmUgbGlzdAotCi0yMDA2LTA2LTExIDE3OjAzOjA2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6IHJlb3JkZXIgKHB1dCBkcCBpbnRvIGEgY2hhcHRlcikgYW5kIGluZGVudAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JICByZW9yZGVyIChwdXQgZHAgaW50byBhIGNoYXB0ZXIpIGFuZCBpbmRlbnQKLQotMjAwNi0wNi0xMSAxMTo1NjozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGRvY3MvcmFuZG9tL2F1dG90b29sczoKLQkgIGFkZCBub3RlcyBvbiBvdXIgYXV0b3Rvb2xzIHNldHVwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBub3RlcyBvbiBvdXIgYXV0b3Rvb2xzIHNldHVwCi0KLTIwMDYtMDYtMTAgMTc6MzI6NTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBiYWNrIHRvIEhFQUQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYmFjayB0byBIRUFECi0KLT09PSByZWxlYXNlIDAuMTAuOCA9PT0KLQotMjAwNi0wNi0xMCAxNzowNjozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICByZWxlYXNpbmcgMC4xMC44Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjEwLjgKLQotMjAwNi0wNi0xMCAxMTo1MTo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3QuYzogbW92ZSBwaWQgZGVjbGFyYXRpb24gdG8gZGVjbGFyYXRpb24gYmxvY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgotCSAgbW92ZSBwaWQgZGVjbGFyYXRpb24gdG8gZGVjbGFyYXRpb24gYmxvY2sKLQotMjAwNi0wNi0xMCAxMTo0Nzo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3QuYzogdXNlIF9leGl0KCkgaW5zdGVhZCBvZiBleGl0KCkgaW4gb3VyIGZvcmtlZCBjaGlsZDsgdGhpcyBlbnN1cmVzIHRoYXQgbm9uZSBvZiB0aGUgcmVnaXN0ZXJlZCBleGl0IGhhbmRsZXJzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6Ci0JICB1c2UgX2V4aXQoKSBpbnN0ZWFkIG9mIGV4aXQoKSBpbiBvdXIgZm9ya2VkIGNoaWxkOyB0aGlzIGVuc3VyZXMKLQkgIHRoYXQgbm9uZSBvZiB0aGUgcmVnaXN0ZXJlZCBleGl0IGhhbmRsZXJzIGZyb20gd2hhdGV2ZXIgaXMgdXNpbmcKLQkgIEdTdHJlYW1lciBnZXQgZXhlY3V0ZWQuICBUaGlzIGZpeGVzIGdub21lLW1peGVyLWFwcGxldCBmYWlsaW5nCi0JICB0byBsb2FkLCBiZWNhdXNlIE9SQml0IHdvdWxkIHNodXQgZG93bi4KLQkgIFNwb3R0ZWQgYnk6IEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmRAZmx1ZW5kby5jb20+Ci0JICBGaXggc3VnZ2VzdGVkIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0JICBGaXhlcyAjMzQ0NDc0Ci0KLTIwMDYtMDYtMDkgMTg6NTI6MDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb25maWd1cmUuYWM6IGJhY2sgdG8gVFJVTksKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNi0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQkgICogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBUUlVOSwotCi09PT0gcmVsZWFzZSAwLjEwLjcgPT09Ci0KLTIwMDYtMDYtMDkgMTg6NDk6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgcmVsZWFzaW5nIDAuMTAuNwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC4xMC43Ci0KLTIwMDYtMDYtMDcgMTA6NDY6MDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICAwLjEwLjYuMiBwcmVyZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBwby9hZi5wbzoKLQkgICogcG8vYXoucG86Ci0JICAqIHBvL2JnLnBvOgotCSAgKiBwby9jYS5wbzoKLQkgICogcG8vY3MucG86Ci0JICAqIHBvL2RlLnBvOgotCSAgKiBwby9lbl9HQi5wbzoKLQkgICogcG8vZnIucG86Ci0JICAqIHBvL2l0LnBvOgotCSAgKiBwby9uYi5wbzoKLQkgICogcG8vbmwucG86Ci0JICAqIHBvL3J1LnBvOgotCSAgKiBwby9zcS5wbzoKLQkgICogcG8vc3IucG86Ci0JICAqIHBvL3N2LnBvOgotCSAgKiBwby90ci5wbzoKLQkgICogcG8vdWsucG86Ci0JICAqIHBvL3ZpLnBvOgotCSAgKiBwby96aF9DTi5wbzoKLQkgICogcG8vemhfVFcucG86Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuNi4yIHByZXJlbGVhc2UKLQotMjAwNi0wNi0wNyAwODozODozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRml4IGxlYWsgc3BvdHRlZCBieSBjb3Zlcml0eSBjaGVja2VyLiBGaXhlcyAjMzQzODI3Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfZ3R5cGVfcmVzb2x2ZXIpOgotCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOiAocHJpbnRfcGx1Z2luX2luZm8pOgotCSAgRml4IGxlYWsgc3BvdHRlZCBieSBjb3Zlcml0eSBjaGVja2VyLiBGaXhlcyAjMzQzODI3Ci0JICBGaXggYW5vdGhlciBvdGhlciBsZWFrIGZvdW5kIGJ5IHBhb2xvIGJvcmVsbGkuCi0KLTIwMDYtMDYtMDYgMTY6NTI6NTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0Lmg6Ci0JKiB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oOgotCSAgaWZkZWYgTE9BRFNBVkUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWZkZWYgTE9BRFNBVkUKLQotMjAwNi0wNi0wNiAxNToxODoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvbGlicy90bXBsL2dzdGNvbnRyb2wuc2dtbDoKLQkgIHJlbW92ZSBvbGQgZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgb2xkIGRvY3MKLQotMjAwNi0wNi0wNiAxNDo1MTo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOgotCSAgdGVybWluYXRlIGlmZGVmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRlcm1pbmF0ZSBpZmRlZgotCi0yMDA2LTA2LTA2IDE0OjMyOjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9saWJzL3RtcGwvZ3N0Ynl0ZXN0cmVhbS5zZ21sOgotCSAgcmVtb3ZlIHVudXNlZCB0bXBsCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSB1bnVzZWQgdG1wbAotCi0yMDA2LTA2LTA2IDE0OjI5OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JICBhZGQgbm90ZSB0byBkb2NzIGFib3V0IEdEUCB2ZXJzaW9uaW5nOyByZW1vdmUgdG1wbCBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBub3RlIHRvIGRvY3MgYWJvdXQgR0RQIHZlcnNpb25pbmc7IHJlbW92ZSB0bXBsIGZpbGUKLQotMjAwNi0wNi0wNiAxNDoyNDowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuKjogQVBJOiBhZGQgYSBHc3REUFBhY2tldGl6ZXIgb2JqZWN0LCBhbmQgY3JlYXRlL2ZyZWUgZnVuY3Rpb25zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSAgKGdzdF9kcF9oZWFkZXJfZnJvbV9idWZmZXJfYW55KSwgKGdzdF9kcF9wYWNrZXRfZnJvbV9jYXBzX2FueSksCi0JICAoZ3N0X2RwX3ZlcnNpb25fZ2V0X3R5cGUpLCAoZ3N0X2RwX2luaXQpLAotCSAgKGdzdF9kcF9oZWFkZXJfZnJvbV9idWZmZXIpLCAoZ3N0X2RwX2hlYWRlcl9mcm9tX2J1ZmZlcl8xXzApLAotCSAgKGdzdF9kcF9wYWNrZXRfZnJvbV9jYXBzKSwgKGdzdF9kcF9wYWNrZXRfZnJvbV9jYXBzXzFfMCksCi0JICAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KSwgKGdzdF9kcF9wYWNrZXRfZnJvbV9ldmVudF8xXzApLAotCSAgKGdzdF9kcF9ldmVudF9mcm9tX3BhY2tldF8wXzIpLCAoZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0XzFfMCksCi0JICAoZ3N0X2RwX2V2ZW50X2Zyb21fcGFja2V0KSwgKGdzdF9kcF9wYWNrZXRpemVyX25ldyksCi0JICAoZ3N0X2RwX3BhY2tldGl6ZXJfZnJlZSk6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaDoKLQkgIEFQSTogYWRkIGEgR3N0RFBQYWNrZXRpemVyIG9iamVjdCwgYW5kIGNyZWF0ZS9mcmVlIGZ1bmN0aW9ucwotCSAgQVBJOiBhZGQgR3N0RFBWZXJzaW9uIGVudW0KLQkgIEFkZCAxLjAgZXZlbnQgZnVuY3Rpb24gdGhhdCB1c2VzIHRoZSBzdHJpbmcgc2VyaWFsaXphdGlvbgotCSAgU2VyaWFsaXplIG1vcmUgdXNlZnVsIGJ1ZmZlciBmbGFncwotCSAgRml4ZXMgIzM0Mzk4OAotCi0yMDA2LTA2LTA2IDE0OjIxOjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvbGlicy90bXBsL2dzdGRhdGFwcm90b2NvbC5zZ21sOgotCSAgYWRkIHN5bWJvbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgc3ltYm9sCi0KLTIwMDYtMDYtMDYgMTQ6MTY6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICB3aWR0aCByZXNwZWN0YXRpb25pemluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3aWR0aCByZXNwZWN0YXRpb25pemluZwotCi0yMDA2LTA2LTA2IDE0OjEwOjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgdGVzdHMvY2hlY2svOiBhZGQgcHBjNjQgc3RydWN0dXJlIHNpemVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGM2NC5oOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzoKLQkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjNjQuaDoKLQkgIGFkZCBwcGM2NCBzdHJ1Y3R1cmUgc2l6ZXMKLQotMjAwNi0wNi0wNiAxMzo1OToxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrLzogZ2VuZXJhdGUgYW5kIGFkZCBzdHJ1Y3R1cmUgc2l6ZSBsaXN0cyBmb3IgeDg2XzY0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaDoKLQkgICogdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3g4Nl82NC5oOgotCSAgZ2VuZXJhdGUgYW5kIGFkZCBzdHJ1Y3R1cmUgc2l6ZSBsaXN0cyBmb3IgeDg2XzY0Ci0KLTIwMDYtMDYtMDYgMTM6NTM6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgY29zbWV0aWNzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvc21ldGljcwotCi0yMDA2LTA2LTA2IDEzOjQ4OjIwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suKjogZmFjdG9yIG91dCB0aGUgbWV0aG9kIGZyb20gdGVzdHMgdGhhdCBjaGVja3Mgc2l6ZSBvZiBzdHJ1Y3R1cmVzLCBhbmQgYWRkIGNvZGUgdG8gZ2VuZXJhdGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19hYmlfbGlzdCk6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBmYWN0b3Igb3V0IHRoZSBtZXRob2QgZnJvbSB0ZXN0cyB0aGF0IGNoZWNrcyBzaXplIG9mIHN0cnVjdHVyZXMsCi0JICBhbmQgYWRkIGNvZGUgdG8gZ2VuZXJhdGUgdGhlIGhlYWRlciBjb250YWluaW5nIHRoZXNlIHNpemVzCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2Lmg6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2Lmg6Ci0JICB1c2UgaXQKLQotMjAwNi0wNi0wNiAxMzoxMTowMyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0c2VnbWVudC5oOiBEb24ndCB1c2UgYysrLXN0eWxlIGNvbW1lbnRzLCBmaXhlcyAjMzQzOTI5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIERvbid0IHVzZSBjKystc3R5bGUgY29tbWVudHMsIGZpeGVzICMzNDM5MjkKLQotMjAwNi0wNi0wNiAwOTo0Nzo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICB3aGl0ZXNwYWNlL3dpZHRoIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHdoaXRlc3BhY2Uvd2lkdGggZml4ZXMKLQotMjAwNi0wNi0wNiAwODo1MDo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIHdoaXRlc3BhY2UgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA2LTA2LTA2IDA4OjUwOjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogZ3N0L2dzdGVycm9yLmM6Ci0JICByZW1vdmUgYW4gZXh0cmEgc3BhY2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGFuIGV4dHJhIHNwYWNlCi0KLTIwMDYtMDYtMDUgMTM6MDU6MzcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3QuYzogcGx1Z2luX3BhdGhzIGlzIG5vdCB1c2VkIGlmIHdlIGJ1aWxkIHdpdGhvdXQgcmVnaXN0cnkgc3VwcG9ydC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICBwbHVnaW5fcGF0aHMgaXMgbm90IHVzZWQgaWYgd2UgYnVpbGQgd2l0aG91dCByZWdpc3RyeSBzdXBwb3J0LgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfY29weSk6Ci0JICBfY29weSgpIHdhcyBhbHdheXMgcmV0dXJuaW5nIE5VTEwuLi4KLQotMjAwNi0wNi0wNSAxMjo1NTo1OCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuYzogX2NvcHkoKSB3YXMgYWx3YXlzIHJldHVybmluZyBOVUxMLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X2NvcHkpOgotCSAgX2NvcHkoKSB3YXMgYWx3YXlzIHJldHVybmluZyBOVUxMLi4uCi0KLTIwMDYtMDYtMDIgMTY6NDY6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IGZhY3RvciBvdXQgQ1JDIGNvZGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JICAoZ3N0X2RwX2hlYWRlcl9mcm9tX2J1ZmZlciksIChnc3RfZHBfcGFja2V0X2Zyb21fY2FwcyksCi0JICAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KToKLQkgIGZhY3RvciBvdXQgQ1JDIGNvZGUKLQotMjAwNi0wNi0wMiAxNjo0NTowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IG1ha2Ugc3VyZSB3ZSB1bnNldCBjYXBzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkKToKLQkgIG1ha2Ugc3VyZSB3ZSB1bnNldCBjYXBzCi0KLTIwMDYtMDYtMDIgMTY6NDE6MDIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suKjogQWRkIGEgY29uZC9tdXRleCB0byB0aGUgY2hlY2sgc3VwcG9ydCBsaWIsIHNpZ25hbCB0aGlzIHdoZW5ldmVyIHdlIGFkZCB0byB0aGUgYnVmZmVycyBsaXN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzogKGdzdF9jaGVja19pbml0KSwKLQkgIChnc3RfY2hlY2tfY2hhaW5fZnVuYyk6Ci0JICAqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBBZGQgYSBjb25kL211dGV4IHRvIHRoZSBjaGVjayBzdXBwb3J0IGxpYiwgc2lnbmFsIHRoaXMgd2hlbmV2ZXIgd2UKLQkgIGFkZCB0byB0aGUgYnVmZmVycyBsaXN0LiBUaGlzIHdpbGwgYWxsb3cgdGVzdHMgdG8gbm90IGJ1c3ktd2FpdCBvbgotCSAgdGhlIGJ1ZmZlci1saXN0LgotCi0yMDA2LTA2LTAyIDEwOjU4OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBmYWN0b3Igb3V0IHNvbWUgY29tbW9uIGhlYWRlciBpbml0IGNvZGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JICAoZ3N0X2RwX2hlYWRlcl9mcm9tX2J1ZmZlciksIChnc3RfZHBfcGFja2V0X2Zyb21fY2FwcyksCi0JICAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KToKLQkgIGZhY3RvciBvdXQgc29tZSBjb21tb24gaGVhZGVyIGluaXQgY29kZQotCi0yMDA2LTA2LTAyIDEwOjA4OjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgQVBJOiBtYWtlIGdzdF9kcF9jcmMoKSBwdWJsaWMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiAoZ3N0X2RwX2NyYyk6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaDoKLQkgIEFQSTogbWFrZSBnc3RfZHBfY3JjKCkgcHVibGljCi0KLTIwMDYtMDYtMDIgMDk6MTM6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGRlYnVnIGNoYW5nZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkZWJ1ZyBjaGFuZ2UKLQotMjAwNi0wNi0wMSAxODozMDoxOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBwbHVnaW5zL2luZGV4ZXJzL2dzdGluZGV4ZXJzLmM6IGNvbmRpdGlvbmFsbHkgcmVnaXN0ZXIgZmlsZWluZGV4ZXIgKGZpeGVzICMzNDM1OTgpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9pbmRleGVycy9nc3RpbmRleGVycy5jOiAocGx1Z2luX2luaXQpOgotCSAgY29uZGl0aW9uYWxseSByZWdpc3RlciBmaWxlaW5kZXhlciAoZml4ZXMgIzM0MzU5OCkKLQotMjAwNi0wNi0wMSAxODoyMjoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0dGFnc2V0dGVyLmg6IENhbid0IGNhc3QgaWZhY2VzIHRvIGEgY2xhc3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmg6Ci0JICBDYW4ndCBjYXN0IGlmYWNlcyB0byBhIGNsYXNzCi0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmg6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0bWVtaW5kZXguYzoKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3BsdWdpbnMvZXhhbXBsZS5oOgotCSAgRml4IG1vcmUgZ29iamVjdCBtYWNyb3M6IG9iajwtPmtsYXNzLCBHc3RYWFg8LT5Hc3RYWFhDbGFzcwotCi0yMDA2LTA2LTAxIDExOjEzOjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBtYWtlIHN1cmUgd2UgemVybyB0aGUgd2hvbGUgQUJJLWNvbXBhdGlibGUgYXJlYQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKLQkgIChnc3RfZHBfaGVhZGVyX2Zyb21fYnVmZmVyKToKLQkgIG1ha2Ugc3VyZSB3ZSB6ZXJvIHRoZSB3aG9sZSBBQkktY29tcGF0aWJsZSBhcmVhCi0KLTIwMDYtMDYtMDEgMDk6MDI6MjMgKzAwMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IE1ha2Ugc3VyZSB0aGUgRU9TIGZsYWcgaXMgY2xlYXJlZCBmcm9tIHBhZHMgYWZ0ZXIgYSBmbHVzaCBvciBzdG9wLiBGaXhlcyAjMzQzNTM4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8gYXQgbm52YSBkb3Qgb3JnPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX3N0b3ApOgotCSAgTWFrZSBzdXJlIHRoZSBFT1MgZmxhZyBpcyBjbGVhcmVkIGZyb20gcGFkcyBhZnRlciBhIGZsdXNoCi0JICBvciBzdG9wLiBGaXhlcyAjMzQzNTM4LgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2NvbGxlY3RwYWRzLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19zdWl0ZSk6Ci0JICBBZGRlZCB0ZXN0IGZvciBjb2xsZWN0cGFkcyByZXVzYWdlIGFmdGVyIEVPUy4KLQotMjAwNi0wNS0zMCAyMDoyNTowMyArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0LmM6IHNldCAjaW5jbHVkZSA8c3lzL3dhaXQuaD4gaW4gYSAjaWZkZWYgI2lmZGVmIEhBVkVfRk9SSwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIHNldCAjaW5jbHVkZSA8c3lzL3dhaXQuaD4gaW4gYSAjaWZkZWYgI2lmZGVmIEhBVkVfRk9SSwotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICBleHBvcnQgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmcKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBleHBvcnQgZ3N0X3BhZF9zZXRfYWNjZXB0Y2Fwc19mdW5jdGlvbiwgZ3N0X3N0cnVjdHVyZV9lbXB0eV9uZXcsCi0JICBnc3RfdmFsdWVfZnJhY3Rpb25fbXVsdGlwbHkKLQkgICogd2luMzIvdnM2L2dzdF9pbnNwZWN0LmRzcDoKLQkgIGFkZCBhIGxpbmsgdG8gaW50bC5saWIKLQotMjAwNi0wNS0zMCAxNTo1NToxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBwYWQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb2xsZWN0aW9uIHRoYXQgY291bGQgY2F1c2UgdGhlIG90aGVyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKToKLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIHBhZCBpcyByZW1vdmVkIGZyb20gdGhlIGNvbGxlY3Rpb24KLQkgIHRoYXQgY291bGQgY2F1c2UgdGhlIG90aGVyIHBhZHMgdG8gYmVjb21lIGNvbGxlY3RhYmxlLgotCi0yMDA2LTA1LTMwIDE1OjUzOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBDbGFyaWZ5IHRoZSB1c2Ugb2YgX3JlbGVhc2VfcmVxdWVzdF9wYWQoKSBhbmQgX2dldF9yZXF1ZXN0X3BhZCgpIGEgYml0IGJldHRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgQ2xhcmlmeSB0aGUgdXNlIG9mIF9yZWxlYXNlX3JlcXVlc3RfcGFkKCkgYW5kCi0JICBfZ2V0X3JlcXVlc3RfcGFkKCkgYSBiaXQgYmV0dGVyLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX3BlZWspLAotCSAgKGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKToKLQkgIEZpeCBzb21lIGRvYyBhbmQgY29tbWVudCB0eXBvcy4KLQotMjAwNi0wNS0zMCAxNDo0MzozNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvY3MvOiBhZGQgZGVjbGFyZWQgc3ltYm9scwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBhZGQgZGVjbGFyZWQgc3ltYm9scwotCi0yMDA2LTA1LTMwIDE0OjQxOjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHVwZGF0ZSBwbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgcG8gZmlsZXMKLQotMjAwNi0wNS0zMCAxNDo0MDo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgZml4IGJ1aWxkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBidWlsZAotCi0yMDA2LTA1LTMwIDE0OjAzOjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgYWRkZWQgSEFWRV9GT1JLCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZGVkIEhBVkVfRk9SSwotCi0yMDA2LTA1LTMwIDEyOjA0OjI5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IEFkZCBkZWJ1ZyB0aGF0IGNhbiBiZSBlbmFibGVkIHVzaW5nIGEgI2RlZmluZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLCBmb3IgZHVtcGluZyBzdGF0cyBhYm91dCBoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfdW5sb2NrZWQpOgotCSAgQWRkIGRlYnVnIHRoYXQgY2FuIGJlIGVuYWJsZWQgdXNpbmcgYSAjZGVmaW5lIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUsCi0JICBmb3IgZHVtcGluZyBzdGF0cyBhYm91dCBob3cgbGF0ZS9lYXJseSB3ZSB3ZXJlIHdoZW4gd2FraW5nIHVwIGZyb20KLQkgIHdhaXRpbmcgb24gdGhlIGNsb2NrLgotCi0yMDA2LTA1LTMwIDExOjQzOjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IFdoZW4gcmVidWlsZGluZyB0aGUgcGFkIGxpc3QsIGRvbid0IGxlYWsgdGhlIHByZXZpb3VzIGxpc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19jaGVja19wYWRzKToKLQkgIFdoZW4gcmVidWlsZGluZyB0aGUgcGFkIGxpc3QsIGRvbid0IGxlYWsgdGhlIHByZXZpb3VzIGxpc3QuCi0KLTIwMDYtMDUtMzAgMTA6NTc6NDQgKzAwMDAgIEx1dHogTXVlbGxlciA8bHV0ekB0b3Bmcm9zZS5kZT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFB1Ymxpc2ggc3VwcG9ydGVkIHF1ZXJ5IHR5cGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTHV0eiBNdWVsbGVyIDxsdXR6IGF0IHRvcGZyb3NlIGRvdCBkZT4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2dldF9xdWVyeV90eXBlcyksIChnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCk6Ci0JICBQdWJsaXNoIHN1cHBvcnRlZCBxdWVyeSB0eXBlcy4KLQkgIFVwZGF0ZSBsYXN0X3N0b3AgZmllbGQgaW4gZ2V0X3JhbmdlIG1vZGUgc28gdGhlIHBvc2l0aW9uCi0JICBxdWVyeSB3b3Jrcy4gRml4ZXMgIzM0MjMyMS4KLQotMjAwNi0wNS0zMCAxMDoxMjowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQVBJOiBhZGQgR1NUX1RBR19QUkVWSUVXX0lNQUdFICgjMzQzMzQxKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOiAoX2dzdF90YWdfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICBBUEk6IGFkZCBHU1RfVEFHX1BSRVZJRVdfSU1BR0UgKCMzNDMzNDEpLgotCi0yMDA2LTA1LTMwIDA5OjQyOjA5ICswMDAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyb0BubnZhLm9yZz4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBVbmxvY2sgbXV0ZXggd2hlbiByZW1vdmluZyBhbiB1bmtub3duIHBhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvIGF0IG5udmEgZG90IG9yZz4KLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkKToKLQkgIFVubG9jayBtdXRleCB3aGVuIHJlbW92aW5nIGFuIHVua25vd24gcGFkLgotCSAgRml4ZXMgIzM0MzMzNC4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29sbGVjdHBhZHMuYzogKGNvbGxlY3RlZF9jYiksIChwdXNoX2J1ZmZlciksCi0JICAocHVzaF9ldmVudCksIChzZXR1cCksICh0ZWFyZG93biksIChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19zdWl0ZSksIChtYWluKToKLQkgIEFkZGVkIGNvbGxlY3BhZHMgY2hlY2ssIGRpc2FibGVkIGZvciBub3cgYXMgY2hlY2sgY3Jhc2hlcyBmb3IKLQkgIHNvbWUgcmVhc29uLgotCi0yMDA2LTA1LTI5IDE3OjIwOjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IERvbid0IGxlYWsgcGFkcyBsaXN0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2ZpbmFsaXplKToKLQkgIERvbid0IGxlYWsgcGFkcyBsaXN0cy4KLQotMjAwNi0wNS0yOSAxNjowMDoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQVBJOiBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkgIChnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZ191bmxvY2tlZCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmcpLCAoZ3N0X2NvbGxlY3RfcGFkc19zdGFydCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19zdG9wKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgQVBJOiBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZwotCSAgQWRkZWQgYXBpIHRvIHNldCB0aGUgcGFkcyB0byBmbHVzaGluZywgdXNlZnVsbCBmb3Igc2Vla2luZwotCSAgY29kZSBpbiBlbGVtZW50cyB1c2luZyBjb2xsZWN0cGFkcy4KLQkgIENsZWFyIHNlZ21lbnQgd2hlbiByZWNlaXZpbmcgYSBmbHVzaC4KLQotMjAwNi0wNS0yOSAxMTo1Mjo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdC5jOiBEb24ndCBzY2FuIHJlZ2lzdHJ5IHBhdGhzIHBhc3NlZCB2aWEgLS1nc3QtcGx1Z2luLS1wYXRoIGltbWVkaWF0ZWx5ICh3aWxsIGNyYXNoLCBiZWNhdXNlIGFic29sdXRlbHkgbm90aGluLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoYWRkX3BhdGhfZnVuYyksIChpbml0X3Bvc3QpOgotCSAgRG9uJ3Qgc2NhbiByZWdpc3RyeSBwYXRocyBwYXNzZWQgdmlhIC0tZ3N0LXBsdWdpbi0tcGF0aCBpbW1lZGlhdGVseQotCSAgKHdpbGwgY3Jhc2gsIGJlY2F1c2UgYWJzb2x1dGVseSBub3RoaW5nIGlzIHNldCB1cCBhbmQgbm8gdHlwZXMgYXJlCi0JICByZWdpc3RlcmVkIGV0Yy4pOyBkbyB0aGlzIGxhdGVyIGluIGluaXRfcG9zdCgpLiBGaXhlcyAjMzQzMDU3LgotCi0yMDA2LTA1LTI4IDA5OjA5OjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdC5jOiBpZiB3ZSBoYXZlIGZvcmssIGZvcmsgd2hpbGUgcmVhZGluZy9yZWJ1aWxkaW5nIHRoZSByZWdpc3RyeSBzbyB0aGUgcGFyZW50IGRvZXNuJ3QgdGFrZSB0aGUgaGl0IG9mIGhhdmluZyBhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKLQkgIGlmIHdlIGhhdmUgZm9yaywgZm9yayB3aGlsZSByZWFkaW5nL3JlYnVpbGRpbmcgdGhlIHJlZ2lzdHJ5Ci0JICBzbyB0aGUgcGFyZW50IGRvZXNuJ3QgdGFrZSB0aGUgaGl0IG9mIGhhdmluZyBhbGwgcGx1Z2lucyBsb2FkZWQKLQkgIGluIG1lbW9yeS4gIEZpeGVzICMzNDI3NzcuCi0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIENoZWNrIGlmIHdlIGhhdmUgZm9yaygpCi0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKLQkgIG5vIGZvcmsoKSBvbiB3aW4zMgotCi0yMDA2LTA1LTI2IDEzOjUyOjAzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IEFkZCBhIHVzZS1tbWFwIHByb3BlcnR5IHRvIGVuYWJsZSBlYXNpZXIgdGVzdGluZyBvZiBhbGwgY29kZSBwYXRocy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9maWxlX3NyY19pbml0KSwgKGdzdF9maWxlX3NyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9maWxlX3NyY19nZXRfcHJvcGVydHkpLCAoZ3N0X2ZpbGVfc3JjX3N0YXJ0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmg6Ci0JICBBZGQgYSB1c2UtbW1hcCBwcm9wZXJ0eSB0byBlbmFibGUgZWFzaWVyIHRlc3Rpbmcgb2YgYWxsIGNvZGUgcGF0aHMuCi0JICBCdW1wIHJhbmsgdG8gUFJJTUFSWSwgc28gZmlsZXNyYyBpcyB0aGUgcHJlZmVycmVkIGZpbGUgcmVhZGVyIGFuZCB1c2VkCi0JICBpbiB0aGUgYWJzZW5jZSBvZiBnbm9tZXZmc3NyYy4gKENsb3NlcyAjMzQwNTAxKQotCi0yMDA2LTA1LTI2IDEwOjM1OjM0ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBBZGQgbWlzc2luZyBpbmNsdWRlLCByZW1vdmVzIHdhcm5pbmcgb2YgbmdldHRleHQgbm90IGJlaW5nIGRlZmluZWQgb24gc29tZSBhcmNoZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDUtMjYgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIEFkZCBtaXNzaW5nIGluY2x1ZGUsIHJlbW92ZXMgd2FybmluZyBvZiBuZ2V0dGV4dCBub3QgYmVpbmcgZGVmaW5lZCBvbgotCSAgc29tZSBhcmNoZXMuCi0KLTIwMDYtMDUtMjYgMDk6MTk6MjQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0dmFsdWUuYzogSGFuZGxlIE5VTEwgaW5wdXQgYW5kIG91dHB1dCBwb2ludGVycyBzaWxlbnRseSBhcyBhIGZhaWxlZCBjb252ZXJzaW9uLCByYXRoZXIgdGhhbiBnX3dhcm5pbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uKToKLQkgIEhhbmRsZSBOVUxMIGlucHV0IGFuZCBvdXRwdXQgcG9pbnRlcnMgc2lsZW50bHkgYXMgYSBmYWlsZWQgY29udmVyc2lvbiwKLQkgIHJhdGhlciB0aGFuIGdfd2FybmluZ3MuCi0KLTIwMDYtMDUtMjUgMTU6NTI6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiBJbml0aWFsaXplIHZhcmlhYmxlIGJlZm9yZSB1c2luZy4gRml4ZXMgIzM0MjgyMC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3N0YXJ0KToKLQkgIEluaXRpYWxpemUgdmFyaWFibGUgYmVmb3JlIHVzaW5nLiBGaXhlcyAjMzQyODIwLgotCi0yMDA2LTA1LTI0IDE3OjExOjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IEZpeCBvZmYtYnktb25lIGJ1ZyB0aGF0IHdvdWxkIG9ubHkgYWxsb3cgcGVla3Mgb2YgTi0xIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IGV2ZW4gaWYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChidWZfaGVscGVyX2ZpbmRfcGVlayk6Ci0JICBGaXggb2ZmLWJ5LW9uZSBidWcgdGhhdCB3b3VsZCBvbmx5IGFsbG93IHBlZWtzIG9mIE4tMSBieXRlcwotCSAgZnJvbSB0aGUgc3RhcnQgZXZlbiBpZiB0aGUgYnVmZmVyIHRvIHR5cGVmaW5kIG9uIGNvbnRhaW5zCi0JICBpbiBmYWN0IE4gYnl0ZXMgb2YgZGF0YSAobWFrZXMgdm9yYmlzIHR5cGVmaW5kaW5nIGZyb20gYQotCSAgdm9yYmlzIGlkZW50aWZpY2F0aW9uIGhlYWRlciBidWZmZXIgd29yaykuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3RfdHlwZWZpbmRoZWxwZXJfc3VpdGUpLCAobWFpbiksIChmb29iYXJfdHlwZWZpbmQpLAotCSAgKHBsdWdpbl9pbml0KToKLQkgIEFkZCB2ZXJ5IGJhc2ljIHVuaXQgdGVzdCBmb3IgZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcigpCi0JICB0aGF0IGNoZWNrcyBmb3IgdGhlIHByb2JsZW0gZml4ZWQgYWJvdmUuCi0KLTIwMDYtMDUtMjQgMDk6MDA6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkgIGRvYyBpbmRlbnQgZml4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvYyBpbmRlbnQgZml4Ci0KLTIwMDYtMDUtMjQgMDk6MDA6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgbWFyayBtb3JlIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1hcmsgbW9yZSBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbgotCi0yMDA2LTA1LTIzIDE0OjIzOjQ5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogTWFrZSBuZXcgR1NUX0ZMT1dfSVNfU1VDQ0VTUyBtYWNybyB2aXNpYmxlIGluIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKdWxpZW4gTW91dHRlICA8anVsaWVuIGF0IG1vdXR0ZSBuZXQ+Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBNYWtlIG5ldyBHU1RfRkxPV19JU19TVUNDRVNTIG1hY3JvIHZpc2libGUgaW4gZG9jcy4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfZmFrZV9zaW5rX3ByZXJvbGwpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JICBBZGQgbmV3IDo6cHJlcm9sbC1oYW5kb2ZmIHNpZ25hbCAoIzMzNzEwMCkuCi0KLTIwMDYtMDUtMjMgMTE6MTM6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuKjogQWRkZWQgX0NVU1RPTSBlcnJvciBhbmQgc3VjY2VzcyBHc3RGbG93UmV0dXJuIHRoYXQgY2FuIGJlIHVzZWQgYmUgZWxlbWVudHMgaW50ZXJuYWxseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfZmxvd19nZXRfbmFtZSksIChnc3RfZmxvd190b19xdWFyayk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIEFkZGVkIF9DVVNUT00gZXJyb3IgYW5kIHN1Y2Nlc3MgR3N0Rmxvd1JldHVybiB0aGF0IGNhbiBiZQotCSAgdXNlZCBiZSBlbGVtZW50cyBpbnRlcm5hbGx5LgotCSAgQWRkZWQgbWFjcm8gdG8gY2hlY2sgZm9yIFNVQ0NFU1MgZmxvd3JldHVybnMuCi0JICBBUEk6IEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTCi0JICBBUEk6IEdTVF9GTE9XX0NVU1RPTV9FUlJPUgotCSAgQVBJOiBHU1RfRkxPV19JU19TVUNDRVNTCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9wYWRfc3VpdGUpOgotCSAgQWRkZWQgY2hlY2sgZm9yIEdzdEZsb3dSZXR1cm4gc2FuaXR5LgotCi0yMDA2LTA1LTIzIDA5OjQwOjE0ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IGNsZWFyL3Jlc2V0IHNlZ21lbnQgaW5mbyBpbiBGTFVTSF9TVE9QLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3IGF0IHNreW5ldCBkb3QgYmU+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCk6Ci0JICBjbGVhci9yZXNldCBzZWdtZW50IGluZm8gaW4gRkxVU0hfU1RPUC4KLQkgIEZpeGVzICMzMzY5MjkuCi0KLTIwMDYtMDUtMjIgMTY6MzA6MzQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBGbHVzaCBxdWV1ZWQgYnVmZmVyIG9uIF9zdG9wKCksIGZpeGVzIHBsYXlpbmcgYWdhaW4gKCMzNDI0NTQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19zdG9wKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2NoZWNrX2NvbGxlY3RlZCk6Ci0JICBGbHVzaCBxdWV1ZWQgYnVmZmVyIG9uIF9zdG9wKCksIGZpeGVzIHBsYXlpbmcgYWdhaW4gKCMzNDI0NTQpCi0KLTIwMDYtMDUtMjIgMTM6MzQ6MDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IGFkZCBhIHRlc3QgZm9yIGEgY29tcGxldGUgc3RydWN0dXJlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfc3VpdGUpOgotCSAgYWRkIGEgdGVzdCBmb3IgYSBjb21wbGV0ZSBzdHJ1Y3R1cmUKLQotMjAwNi0wNS0yMiAxMzozMTo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBkZWJ1Z2dpbmcgY2hhbmdlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkZWJ1Z2dpbmcgY2hhbmdlcwotCi0yMDA2LTA1LTE5IDE1OjM1OjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL2ZhcS86IFNvbWUgbWlub3IgRkFRIHVwZGF0ZXMgdGhhdCB3b24ndCBjaGFuZ2UgdGhlIGZhY3QgdGhhdCBvdXIgRkFRIGlzIGJhZGx5IHN0cnVjdHVyZWQsIGZ1bGwgb2YgaW5mb3JtYXRpb24gaGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2ZhcS9kZXZlbG9waW5nLnhtbDoKLQkgICogZG9jcy9mYXEvZmFxLnhtbDoKLQkgICogZG9jcy9mYXEvdHJvdWJsZXNob290aW5nLnhtbDoKLQkgICogZG9jcy9mYXEvdXNpbmcueG1sOgotCSAgU29tZSBtaW5vciBGQVEgdXBkYXRlcyB0aGF0IHdvbid0IGNoYW5nZSB0aGUgZmFjdCB0aGF0Ci0JICBvdXIgRkFRIGlzIGJhZGx5IHN0cnVjdHVyZWQsIGZ1bGwgb2YgaW5mb3JtYXRpb24gaGFyZGx5Ci0JICBhbnlvbmUgbmV3IHRvIEdTdHJlYW1lciBuZWVkcyB0byBrbm93IGFuZCBsYWNraW5nIGxvdHMKLQkgIG9mIGluZm9ybWF0aW9uIHBlb3BsZSBjb25zdGFudGx5IGFzayBmb3IuCi0KLTIwMDYtMDUtMTkgMTM6NDY6MTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IFNob3J0LWNpcmN1aXQgZ3N0X3BhZF9zZXRfY2FwcyBpZiBzZXR0aW5nIHRoZSBleGlzdGluZyBjYXBzIHBvaW50ZXIgYWdhaW4sIGFuZCBhdm9pZCBwcmludGluZyBkZWJ1ZyBhbmQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9jYXBzKToKLQkgIFNob3J0LWNpcmN1aXQgZ3N0X3BhZF9zZXRfY2FwcyBpZiBzZXR0aW5nIHRoZSBleGlzdGluZwotCSAgY2FwcyBwb2ludGVyIGFnYWluLCBhbmQgYXZvaWQgcHJpbnRpbmcgZGVidWcgYW5kCi0JICByZWZmaW5nL3VucmVmZmluZyB0aGUgY2Fwcy4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX3B1c2hfb25lKToKLQkgIFRoZXJlJ3MgYWN0dWFsbHkgbm8gbmVlZCB0byBzZXQgdGhlIGNhcHMgYmVmb3JlIHB1c2hpbmcgLQotCSAgdGhlIGFjY2VwdGNhcHMgbWV0aG9kIHdpbGwgaGFuZGxlIGl0IGFueXdheS4KLQotMjAwNi0wNS0xOSAxMDoyOTowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQVBJOiBhZGQgZ3N0X2VsZW1lbnRfc2Vla19zaW1wbGUoKSAoIzM0MjIzOCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfc2Vla19zaW1wbGUpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFQSTogYWRkIGdzdF9lbGVtZW50X3NlZWtfc2ltcGxlKCkgKCMzNDIyMzgpLgotCi0yMDA2LTA1LTE4IDE0OjI1OjAwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvZ3N0dHlwZWZpbmQuKjogQWRkZWQgR1NUX1RZUEVfVFlQRV9GSU5EIGFuZCBnc3RfdHlwZV9maW5kX2dldF90eXBlKCkgc28gYSBHVHlwZSBnZXRzIHJlZ2lzdGVyZWQgZm9yIEdzdFR5cGVGaW5kIHAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzogKGdzdF90eXBlX2ZpbmRfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuaDoKLQkgIEFkZGVkIEdTVF9UWVBFX1RZUEVfRklORCBhbmQgZ3N0X3R5cGVfZmluZF9nZXRfdHlwZSgpIHNvIGEgR1R5cGUgZ2V0cwotCSAgcmVnaXN0ZXJlZCBmb3IgR3N0VHlwZUZpbmQgcG9pbnRlcnMuIFRoaXMgYWxsb3dzIHdyYXBwaW5nIHRoZSBzdHJ1Y3R1cmUKLQkgIGluIGJpbmRpbmdzIChpLmUuIGdzdC1weXRob24pLgotCi0yMDA2LTA1LTE4IDE0OjAxOjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dGFnc2V0dGVyLmM6IERvY3MgYWRkaXRpb25zIGFuZCBmaXhlcyAoc2VlICMzMzk5MTgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0YWdzZXR0ZXIuYzoKLQkgIERvY3MgYWRkaXRpb25zIGFuZCBmaXhlcyAoc2VlICMzMzk5MTgpLgotCi0yMDA2LTA1LTE4IDA5OjA3OjU1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IFRoZSBjYXBzIGludGVyc2VjdGlvbiBhbGdvcml0aG0gY2FuIHByb2R1Y2UgbXVsdGlwbGUgY29waWVzIG9mIHRoZSBjYXBzLiBVbnRpbCB0aGF0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9wcmVwYXJlX2J1Zik6Ci0JICBUaGUgY2FwcyBpbnRlcnNlY3Rpb24gYWxnb3JpdGhtIGNhbiBwcm9kdWNlIG11bHRpcGxlIGNvcGllcyBvZiB0aGUKLQkgIGNhcHMuIFVudGlsIHRoYXQgaXMgZml4ZWQsIHdlIG5lZWQgdG8gc2ltcGxpZnkgdGhlIHJlc3VsdCB0byBiZQotCSAgc3VyZSB3aGV0aGVyIHRoZSBhbGxvd2VkIGNhcHMgYXJlIGZpeGVkIG9yIG5vdC4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2luaXQpLAotCSAgKGdzdF9xdWV1ZV9idWZmZXJhbGxvYyksIChnc3RfcXVldWVfYWNjZXB0Y2FwcyksCi0JICAoZ3N0X3F1ZXVlX3B1c2hfb25lKToKLQkgIFByb3hpZWQgYnVmZmVyIGFsbG9jIHNob3VsZCBub3Qgc2V0IHRoZSBjYXBzIG9uIHRoZSBzb3VyY2UgcGFkLgotCSAgV2hlbiBwdXNoaW5nIGJ1ZmZlcnMsIHdlIGFsd2F5cyBhY2NlcHQgdGhlIGNhcHMgY2hhbmdlIHRoYXQgdHJpZ2dlcnMuCi0JICBUaGlzIHByZXZlbnRzIG5lZ290aWF0aW9uIGVycm9ycyBjYXVzZWQgYnkgY2FwcyBjaGFuZ2luZyBtaWQtc3RyZWFtCi0JICBhbmQgdGhlbiBiZWluZyByZWZ1c2VkIG9uIG91ciBzb3VyY2UgcGFkIChiZWNhdXNlIHVwc3RyZWFtIGlzIG5vdwotCSAgcmVmdXNpbmcgdGhvc2UgY2FwcykuCi0KLTIwMDYtMDUtMTggMDg6NDg6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jOiBNdXN0IHBsdWcgYXVkaW9jb252ZXJ0IGFuZCBhdWRpb3Jlc2FtcGxlIGJldHdlZW4gZGVjb2RlciBhbmQgYXVkaW8gc2luay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzogKG1haW4pOgotCSAgTXVzdCBwbHVnIGF1ZGlvY29udmVydCBhbmQgYXVkaW9yZXNhbXBsZSBiZXR3ZWVuIGRlY29kZXIKLQkgIGFuZCBhdWRpbyBzaW5rLgotCi0yMDA2LTA1LTE3IDE0OjE4OjEyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgTWVudGlvbiBidWcgZml4ZWQgYnkgcHJldmlvdXMgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE1lbnRpb24gYnVnIGZpeGVkIGJ5IHByZXZpb3VzIGNvbW1pdAotCi0yMDA2LTA1LTE3IDE0OjAxOjMzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IEFsbG93IGVtcHR5IHN0cmluZ3MgZm9yIHNvbWUgb2YgdGhlIHBsdWdpbiBmaWVsZHMgc28gd2UgZG9uJ3QgZHJvcCB2YWxpZCBwbHVnaW4gZW50cmllcyB0aGF0IHdlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChyZWFkX3N0cmluZyksIChsb2FkX3BhZF90ZW1wbGF0ZSksCi0JICAobG9hZF9mZWF0dXJlKSwgKGxvYWRfcGx1Z2luKToKLQkgIEFsbG93IGVtcHR5IHN0cmluZ3MgZm9yIHNvbWUgb2YgdGhlIHBsdWdpbiBmaWVsZHMgc28gd2UgZG9uJ3QKLQkgIGRyb3AgdmFsaWQgcGx1Z2luIGVudHJpZXMgdGhhdCB3ZXJlIHdyaXR0ZW4gb3V0IGNvcnJlY3RseS4KLQotMjAwNi0wNS0xNyAxMzo0MDoyMCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogVXNlIGdfcmVtb3ZlIGFuZCBnX3JlbmFtZSBpbnN0ZWFkIG9mIHJlbW92ZSBhbmQgcmVuYW1lIHRoYXQgZG9uJ3QgaGFuZGxlIHV0ZjggY2hhcmFjdGVycy4gcmVuYW0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGdzdF9yZWdpc3RyeV94bWxfd3JpdGVfY2FjaGUpOgotCSAgVXNlIGdfcmVtb3ZlIGFuZCBnX3JlbmFtZSBpbnN0ZWFkIG9mIHJlbW92ZSBhbmQgcmVuYW1lIHRoYXQgZG9uJ3QKLQkgIGhhbmRsZSB1dGY4IGNoYXJhY3RlcnMuIHJlbmFtZSB3YXMgZmFpbGluZyBmb3IgdXNlcnMgd2hvIGhhZCBzcGVjaWZpYwotCSAgY2hhcmFjdGVycyBpbiB0aGVpciBuYW1lIHRoZW4gdGhlIHJlZ2lzdHJ5IHdhcyBidWlsdCBhdCBlYWNoIGdzdHJlYW1lciBpbml0LgotCSAgKiB3aW4zMi92czYvZ3N0X2luc3BlY3QuZHNwOgotCSAgKiB3aW4zMi92czYvZ3N0X2xhdW5jaC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RiYXNlLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGNvcmVlbGVtZW50cy5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgotCSAgVXNlIGEgZGVidWcgdmVyc2lvbiBvZiBsaWJ4bWwyIChsaWJ4bWwyRC5saWIsbGlieG1sMkQuZGxsKSBmb3IgREVCVUcgYnVpbGQKLQkgIG9mIGxpYmdzdHJlYW1lciBhbmQgY2xlYW4gdW51c2VkIGxpYnJhcmllcyBpbiBwcm9qZWN0IGxpbmtzIHNldHRpbmdzLgotCi0yMDA2LTA1LTE3IDA5OjI0OjM0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IFRoZSBxdWV1ZSBpcyBub3QgcmVzcG9uc2libGUgZm9yIHB1c2hpbmcgYW4gRU9TIHdoZW4gcmVjZWl2aW5nIGEgZmF0YWwgZmxvdyBlcnJvci4gSXQncyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfcHVzaF9vbmUpOgotCSAgVGhlIHF1ZXVlIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgcHVzaGluZyBhbiBFT1Mgd2hlbiByZWNlaXZpbmcgYSBmYXRhbAotCSAgZmxvdyBlcnJvci4gSXQncyB1cCB0byB0aGUgcmVhbCBlbGVtZW50IGRyaXZpbmcgdGhlIHBpcGVsaW5lIHRvIGRvIHRoYXQuCi0KLTIwMDYtMDUtMTYgMTc6MTU6MDIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogVGhlIHF1ZXVlIHdhcyBwb3N0aW5nIGEgbm9uLW5lZWRlZCBHU1RfTUVTU0FHRV9FUlJPUiB3aGVuIHB1c2hpbmcgYSBidWZmZXIgcmV0dXJuZWQgYSBmYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9wdXNoX29uZSk6Ci0JICBUaGUgcXVldWUgd2FzIHBvc3RpbmcgYSBub24tbmVlZGVkIEdTVF9NRVNTQUdFX0VSUk9SIHdoZW4gcHVzaGluZyBhCi0JICBidWZmZXIgcmV0dXJuZWQgYSBmYXRhbCBlcnJvci4gSXQgc2hvdWxkIGp1c3Qgc2VuZCBhbiBFT1MgYW5kIHN0b3AKLQkgIGl0J3MgdGFzay4KLQkgIFVwc3RyZWFtIGVsZW1lbnRzIHdpbGwgdGhlbiBwcm9wZXJseSByZWNlaXZlIHRoZSBHU1RfRkxPV19VTkVYUEVDVEVECi0JICB3aGVuIHB1c2hpbmcgYnVmZmVycyBvbiB0aGUgcXVldWUgYW5kIHdpbGwgYmUgYWJsZSB0byBoYW5kbGUgdGhlIGV2ZW50LgotCi0yMDA2LTA1LTE2IDE2OjEwOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL21hbnVhbC86IEZpeCB0eXBvcyBhbmQgbWlub3IgZXJyb3JzIGluIHNhbXBsZSBjb2RlICgjMzQxODU2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1pbml0LnhtbDoKLQkgIEZpeCB0eXBvcyBhbmQgbWlub3IgZXJyb3JzIGluIHNhbXBsZSBjb2RlICgjMzQxODU2KS4KLQotMjAwNi0wNS0xNiAxMzozMTozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OiBGaXggaW5kZXhlcyBpbiBmb3JtdWxhcyB0byBtYWtlIG1vcmUgc2Vuc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgotCSAgRml4IGluZGV4ZXMgaW4gZm9ybXVsYXMgdG8gbWFrZSBtb3JlIHNlbnNlLgotCi0yMDA2LTA1LTE1IDExOjU0OjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERvbid0IHJlcG9ydCBQT1NJVElPTiBiYXNlZCBvbiBjbG9jayB0aW1lIGlmIHN5bmMgaXMgZGlzYWJsZWQgaW4gYSBzaW5rLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIERvbid0IHJlcG9ydCBQT1NJVElPTiBiYXNlZCBvbiBjbG9jayB0aW1lIGlmIHN5bmMgaXMKLQkgIGRpc2FibGVkIGluIGEgc2luay4KLQotMjAwNi0wNS0xNSAwODoxNjowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdG9iamVjdC5oOiBBZGQgY2FzdCB0byBtYWtlIGNvbXBpbGVyIGhhcHB5IC0gcmVmY291bnQgdmFyaWFibGUgd2FzIGEgZ2ludCBpbiBHc3RPYmplY3QgYnV0IGlzIGEgZ3VpbnQgaW4gR09iamVjLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgQWRkIGNhc3QgdG8gbWFrZSBjb21waWxlciBoYXBweSAtIHJlZmNvdW50IHZhcmlhYmxlIHdhcyBhIGdpbnQKLQkgIGluIEdzdE9iamVjdCBidXQgaXMgYSBndWludCBpbiBHT2JqZWN0IGFuZCBnX2F0b21pY19pbnRfZ2V0KCkKLQkgIHdhbnRzIGEgZ2ludCAqLgotCi0yMDA2LTA1LTE0IDIzOjIzOjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L3BhcnNlL01ha2VmaWxlLmFtOgotCSAgZml4IHBhcmFsbGVsIG1ha2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHBhcmFsbGVsIG1ha2UKLQotMjAwNi0wNS0xNCAyMToxODoyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHVwZGF0ZSBjb25maWcuaAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgY29uZmlnLmgKLQotMjAwNi0wNS0xNCAyMToxNjo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHdoaXRlc3BhY2UgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA2LTA1LTE0IDIxOjE2OjUwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9yYW5kb20vc3RyZWFtaGVhZGVyOgotCSAgc29tZSBzdHJlYW1oZWFkZXIgdXBkYXRlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzb21lIHN0cmVhbWhlYWRlciB1cGRhdGVzCi0KLTIwMDYtMDUtMTQgMTk6MjU6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIE1pbm9yIGRvY3MgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGV2ZW50LmM6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgTWlub3IgZG9jcyBmaXhlcy4KLQotMjAwNi0wNS0xNCAxNjowMzoyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gQ1ZTCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhY2sgdG8gQ1ZTCi0KLT09PSByZWxlYXNlIDAuMTAuNiA9PT0KLQotMjAwNi0wNS0xNCAxNToyMDoyNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogcmVsZWFzaW5nIDAuMTAuNiwgIlRha2UgdGhlIGNhbm5vbGkiCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDUtMTQgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICByZWxlYXNpbmcgMC4xMC42LCAiVGFrZSB0aGUgY2Fubm9saSIKLQotMjAwNi0wNS0xNCAxNToxODowMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwNi0wNS0xMyAxNzo1MDoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBGaXggdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaW4gdGhlIGh5cG90aGV0aWNhbCBjYXNlIHRoYXQgc29tZSBicm9rZW4gcGx1Z2luIGNyZWF0ZXMgYSBHU1RfLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAocHJpbnRfdGFnKToKLQkgIEZpeCB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiB0aGUgaHlwb3RoZXRpY2FsCi0JICBjYXNlIHRoYXQgc29tZSBicm9rZW4gcGx1Z2luIGNyZWF0ZXMgYSBHU1RfVEFHX0lNQUdFCi0JICB0YWcgY29udGFpbmluZyBhIE5VTEwgYnVmZmVyICgjMzQxNjY3KS4KLQotMjAwNi0wNS0xMiAxNjo1MDozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBQcmludCBzb21ldGhpbmcgbW9yZSBpbnRlbGxpZ2libGUgZm9yIGltYWdlIHRhZ3Mgd2hlbiB1c2luZyB0aGUgLXQgc3dpdGNoICgjMzQxNTU2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChwcmludF90YWcpOgotCSAgUHJpbnQgc29tZXRoaW5nIG1vcmUgaW50ZWxsaWdpYmxlIGZvciBpbWFnZSB0YWdzIHdoZW4KLQkgIHVzaW5nIHRoZSAtdCBzd2l0Y2ggKCMzNDE1NTYpLgotCi0yMDA2LTA1LTEyIDE0OjUzOjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgTWFrZWZpbGUuYW06IHVwZGF0ZXMgZm9yIHdpbjMyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICB1cGRhdGVzIGZvciB3aW4zMgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBkZWZpbmUgR1NUX01BSk9STUlOT1Igc28gd2UgaGF2ZSBpdCBhdmFpbGFibGUgaW4gd2luMzIvY29tbW9uL2NvbmZpZy5oCi0JICBQb3NzaWJseSByZW1vdmUgaXQgZnJvbSBvdXIgTWFrZWZpbGUuYW0gZmlsZXMgbGF0ZXIKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBhZGRlZCBHU1RfTUFKT1JNSU5PUgotCSAgKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6IChyZWdpc3Rlcl9nc3RfcmVzb3VyY2VfZXJyb3IpOgotCSAgKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgdXBkYXRlZAotCi0yMDA2LTA1LTEyIDEzOjQyOjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9yYW5kb20vc3RyZWFtaGVhZGVyOgotCSAgYWRkaW5nIG5vdGVzIGFib3V0IGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIGlkZWFzIGFib3V0IHN0cmVhbWhlYWRlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRpbmcgbm90ZXMgYWJvdXQgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgaWRlYXMgYWJvdXQgc3RyZWFtaGVhZGVyCi0KLTIwMDYtMDUtMTIgMTA6NTA6NDIgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgd2luMzIvTUFOSUZFU1Q6IFVwZGF0ZSB3aW4zMiBmaWxlcyBsaXN0aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL01BTklGRVNUOgotCSAgVXBkYXRlIHdpbjMyIGZpbGVzIGxpc3RpbmcuCi0JICAqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBBZGQgR1NUX01BSk9STUlOT1IgZGVmaW5pdGlvbi4KLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBBZGQgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KLQotMjAwNi0wNS0xMiAwOToyODoyMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0cGx1Z2luLmM6IElmIGFuIHNvIGZpbGUgaGFzIG5vIHBsdWdpbiBlbnRyeSBwb2ludCwgdW5sb2FkIHRoZSBtb2R1bGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgotCSAgSWYgYW4gc28gZmlsZSBoYXMgbm8gcGx1Z2luIGVudHJ5IHBvaW50LCB1bmxvYWQgdGhlIG1vZHVsZS4KLQotMjAwNi0wNS0xMSAxOTowNzo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiBEb24ndCBmb3JnZXQgdG8gc2lnbmFsIHRoZSBfY2hhaW4gb3IgX2xvb3AgZnVuY3Rpb24gd2hlbiB0aGUgcXVldWUgc2l6ZSBvciB0aHJlc2hvbGRzIGNoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2NoYWluKSwgKGdzdF9xdWV1ZV9sb29wKSwKLQkgIChnc3RfcXVldWVfc2V0X3Byb3BlcnR5KToKLQkgIERvbid0IGZvcmdldCB0byBzaWduYWwgdGhlIF9jaGFpbiBvciBfbG9vcCBmdW5jdGlvbgotCSAgd2hlbiB0aGUgcXVldWUgc2l6ZSBvciB0aHJlc2hvbGRzIGNoYW5nZSBzaW5jZSB0aGF0IG1pZ2h0Ci0JICBjYXVzZSB0aGVtIHRvIG1ha2UgcHJvZ3JlcyBhZ2Fpbi4KLQotMjAwNi0wNS0xMSAxODoxMDozNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBHX09CSkVDVF9DTEFTUyBtYWNybyB1c2FnZSBiYXRjaCBjbGVhbnVwLCBmaXhlcyAjMzM3NzQ3IGZvciBjb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfY2xhc3NfaW5pdCk6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgIChnc3RfbmV0X3RpbWVfcHJvdmlkZXJfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X2ZpbGVfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX2NsYXNzX2luaXQpOgotCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmM6IChnc3RfZXhhbXBsZV9jbGFzc19pbml0KToKLQkgICogdGVzdHMvb2xkL3Rlc3RzdWl0ZS90aHJlYWRzL3NpZ25hbHMuYzogKGdzdF90ZXN0X2NsYXNzX2luaXQpOgotCSAgR19PQkpFQ1RfQ0xBU1MgbWFjcm8gdXNhZ2UgYmF0Y2ggY2xlYW51cCwgZml4ZXMgIzMzNzc0NyBmb3IgY29yZQotCi0yMDA2LTA1LTExIDEwOjM1OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLmM6IFJlZ2lzdGVyIHN1YmJ1ZmVyIGFsb25nIHdpdGggdGhlIGJ1ZmZlciB0eXBlIHNvIHRoYXQgaXQgZG9lcyBub3QgYWNjaWRlbnRhbGx5IGdldHMgcmVnaXN0ZXJlZCBmcm9tIE4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChfZ3N0X2J1ZmZlcl9pbml0aWFsaXplKToKLQkgIFJlZ2lzdGVyIHN1YmJ1ZmVyIGFsb25nIHdpdGggdGhlIGJ1ZmZlciB0eXBlIHNvIHRoYXQKLQkgIGl0IGRvZXMgbm90IGFjY2lkZW50YWxseSBnZXRzIHJlZ2lzdGVyZWQgZnJvbSBOCi0JICBkaWZmZXJlbnQgc3RyZWFtaW5nIHRocmVhZHMgaW4gYSBub24gdGhyZWFkc2FmZSB3YXkuCi0KLTIwMDYtMDUtMTAgMTY6NDQ6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC86IE1ha2UgZ3RrLWRvYyBnZW5lcmF0ZSBkb2NzIGZvciBvdXIgaW5saW5lZCBnc3RfYnVmZmVyX3JlZigpLCBnc3RfZXZlbnRfcmVmKCkgYW5kIGdzdF9tZXNzYWdlX3JlZigpIGZ1bmN0aW9ucyBhZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBNYWtlIGd0ay1kb2MgZ2VuZXJhdGUgZG9jcyBmb3Igb3VyIGlubGluZWQgZ3N0X2J1ZmZlcl9yZWYoKSwKLQkgIGdzdF9ldmVudF9yZWYoKSBhbmQgZ3N0X21lc3NhZ2VfcmVmKCkgZnVuY3Rpb25zIGFnYWluCi0JICAodWdseSBoYWNrLCBwbGVhc2UgZG8gZml4IGlmIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IGJlc2lkZXMKLQkgIG92ZXJyaWRlcy50eHQsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byB3b3JrKS4KLQotMjAwNi0wNS0xMCAxNTo0OTozMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6IGFkZCBhbiBhc3NlcnQgZm9yIHNldHRpbmcgc3RhdGUgdG8gYXZvaWQgbG90cyBvZiByZXBldGl0aXZlIGNvZGUgaW4gdGhlIGZ1dHVyZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA1LTEwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCSAgKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgYWRkIGFuIGFzc2VydCBmb3Igc2V0dGluZyBzdGF0ZSB0byBhdm9pZCBsb3RzIG9mIHJlcGV0aXRpdmUgY29kZQotCSAgaW4gdGhlIGZ1dHVyZQotCi0yMDA2LTA1LTEwIDE1OjM4OjUzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IGZpeCBhIGxlYWsgaWYgbm8gZmxhZ3MgYXJlIHNldAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFncyk6Ci0JICBmaXggYSBsZWFrIGlmIG5vIGZsYWdzIGFyZSBzZXQKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBmaXggbGVhayBpbiB0ZXN0cwotCi0yMDA2LTA1LTEwIDE1OjAwOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6IEV4cGFuZCBhIGJpdCBvbiBjYXBzIGFuZCBmaWx0ZXJlZCBsaW5rcyBhbmQgdXBkYXRlIGV4YW1wbGVzIHRoYXQgd2VyZSBzdGlsbCB1c2luZyB0aGUgbm8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6Ci0JICBFeHBhbmQgYSBiaXQgb24gY2FwcyBhbmQgZmlsdGVyZWQgbGlua3MgYW5kIHVwZGF0ZQotCSAgZXhhbXBsZXMgdGhhdCB3ZXJlIHN0aWxsIHVzaW5nIHRoZSBubyBsb25nZXIgZXhpc3RpbmcKLQkgIGdzdF9wYWRfbGlua19maWx0ZXJlZCgpICgjMzM4MjA2KS4KLQotMjAwNi0wNS0xMCAxNDo1MTozMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy4qOiBObyBuZWVkIHRvIGNhbGwgX3N0b3AgaW4gX2ZpbmFsaXplLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfZmluYWxpemUpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCksIChnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nKSwgKGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfc3RvcCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgIE5vIG5lZWQgdG8gY2FsbCBfc3RvcCBpbiBfZmluYWxpemUuCi0JICBJdGVyYXRlIHRoZSBtYWluIHBhZCBsaXN0IGluIF9maW5hbGl6ZS4KLQkgIEFkZGVkIHNvbWUgbW9yZSBkZWJ1Zy4KLQkgIEZyZWUgbGlzdHMgYW5kIGRhdGEgaW4gdGhlIHJpZ2h0IG9yZGVyLgotCSAgQWxzbyBmcmVlIGRhdGEgd2hlbSBkb2luZyBfcmVtb3ZlX3BhZCB3aGVuIHN0b3BwZWQgZm9yCi0JICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHByb3RlY3QgOjpzdGFydGVkIHdpdGggUEFEX0xPQ0sgYXMKLQkgIHdlbGwuCi0KLTIwMDYtMDUtMTAgMTQ6MTI6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0c3RydWN0dXJlLmM6IGFkZCBzb21lIGNvbW1lbnRzIHJlbmFtZSBhIG1ldGhvZCBzbyB0aGF0IGl0IGFjdHVhbGx5IHNheXMgd2hhdCBpdCBkb2VzIGJldHRlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfZ3R5cGVfZnJvbV9hYmJyKSwKLQkgIChnc3Rfc3RydWN0dXJlX3BhcnNlX3ZhbHVlKToKLQkgIGFkZCBzb21lIGNvbW1lbnRzCi0JICByZW5hbWUgYSBtZXRob2Qgc28gdGhhdCBpdCBhY3R1YWxseSBzYXlzIHdoYXQgaXQgZG9lcyBiZXR0ZXIKLQotMjAwNi0wNS0xMCAxNDowNTo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IG1ha2Ugc3VyZSBzb21lIGVzc2VudGlhbCB0eXBlcyB1c2VkIGJ5IGV2ZW50cyBhcmUgcmVnaXN0ZXJlZCBhcyBwYXJ0IG9mIGdzdF9pbml0KCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKF9nc3RfZXZlbnRfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3Rmb3JtYXQuYzogKF9nc3RfZm9ybWF0X2luaXRpYWxpemUpOgotCSAgbWFrZSBzdXJlIHNvbWUgZXNzZW50aWFsIHR5cGVzIHVzZWQgYnkgZXZlbnRzIGFyZSByZWdpc3RlcmVkCi0JICBhcyBwYXJ0IG9mIGdzdF9pbml0KCkKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfc2VyaWFsaXplX2ZsYWdzKToKLQkgIGlmIG5vIGZsYWdzIGFyZSBzZXQsIHNlcmlhbGl6ZSB0aGVtIHRvIGEgdmFsdWUgdGhhdCByZXByZXNlbnRzIE5PTkUKLQkgIHNvIHRoYXQgZGVzZXJpYWxpemluZyB0aGVtIHdvcmtzCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKLQkgIGFkZCB0ZXN0cyBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uIG9mIGZsYWdzCi0KLTIwMDYtMDUtMTAgMTM6NTM6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgbGltaXQgdG8gODAgY2hhcnMgYWRkIG5vdGUgYWJvdXQgY2hhbmdpbmcgZGl2aWRlciBmb3IgZmxhZ3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbGltaXQgdG8gODAgY2hhcnMKLQkgIGFkZCBub3RlIGFib3V0IGNoYW5naW5nIGRpdmlkZXIgZm9yIGZsYWdzCi0KLTIwMDYtMDUtMTAgMTE6MjQ6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogVXBkYXRlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RfcGFkc19jb2xsZWN0KSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3RfcmFuZ2UpLCAoZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfY2hlY2tfcGFkcyksIChnc3RfY29sbGVjdF9wYWRzX2NoZWNrX2NvbGxlY3RlZCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCksIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKToKLQkgIFVwZGF0ZSBkb2NzLgotCSAgQmV0dGVyIGRlYnVnIGluZm8uCi0JICBDYXRjaCBhbmQgcmV0dXJuIGVycm9ycyBmcm9tIHRoZSBjb2xsZWN0IGZ1bmN0aW9uCi0JICBSZWZ1c2UgZGF0YSBvbiBlb3MgcGFkcy4KLQotMjAwNi0wNS0xMCAxMDoyNjo1NSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdGludGVyZmFjZS5oOiBHU1RfSU1QTEVNRU5UU19JTlRFUkZBQ0UgYW5kIEdTVF9JU19JTVBMRU1FTlRTX0lOVEVSRkFDRSB1c2UgdGhlIG5vcm1hbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbnRlcmZhY2UuaDoKLQkgIEdTVF9JTVBMRU1FTlRTX0lOVEVSRkFDRSBhbmQgR1NUX0lTX0lNUExFTUVOVFNfSU5URVJGQUNFIHVzZSB0aGUgbm9ybWFsCi0JICBHSW50ZXJmYWNlIHR5cGUgY2hlY2tpbmcuCi0JICBUaGV5IHdlcmUgcHJldmlvdXNseSB1c2luZyBub24tZGVmaW5lZCBtYWNyb3MuCi0KLTIwMDYtMDUtMDkgMjA6NDc6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuKjogQ2xlYW4gdXAgdGhlIG1lc3MgdGhhdCBpcyBjb2xsZWN0cGFkcywgYWRkIGNvbW1lbnRzIGFuZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfaW5pdCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSksIChnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCksIChnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZyksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19zdGFydCksIChnc3RfY29sbGVjdF9wYWRzX3N0b3ApLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfcGVlayksIChnc3RfY29sbGVjdF9wYWRzX3BvcCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUpLCAoZ3N0X2NvbGxlY3RfcGFkc19yZWFkKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2ZsdXNoKSwgKGdzdF9jb2xsZWN0X3BhZHNfY2hlY2tfcGFkcyksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19pc19jb2xsZWN0ZWQpLCAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19jaGFpbik6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgIENsZWFuIHVwIHRoZSBtZXNzIHRoYXQgaXMgY29sbGVjdHBhZHMsIGFkZCBjb21tZW50cyBhbmQKLQkgIEZJWE1FcyB3aGVyZSBuZWVkZWQuCi0JICBNYWludGFpbiBhIHNlcGFyYXRlIHBhZCBsaXN0IHNvIHdlIGNhbiBhZGQgcGFkcyB3aGlsZQotCSAgY29sbGVjdGluZyB0aGUgb3RoZXIgb25lcy4gRm9yIHRoaXMgd2UgbmVlZCBhIG5ldyBzZXBhcmF0ZQotCSAgbG9jayAoc2VlIGNvbWljcykuCi0JICBGaXggbWVtb3J5IGxlYWsgaW4gZmluYWxpemUuCi0JICBSZWZhY3RvciBzb21lIHdlaXJkIGNvZGUgdG8gc2V0L3Vuc2V0IHBhZCBmbHVzaGluZyBmbGFncywgbWFyawotCSAgd2l0aCBjb21tZW50cy4KLQkgIERvbid0IGNyYXNoIGluIF9hdmFpbGFibGUsIF9yZWFkLCBfZmx1c2ggd2hlbiB3ZSdyZSBFT1MuCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvLmN2c2lnbm9yZToKLQkgIElnbm9yZSBhZGFwdGVyIGNoZWNrIGJpbmFyeS4KLQotMjAwNi0wNS0wOSAxOToxNDo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RldmVudC5oOgotCSAgZG9jIHdoaXRlc3BhY2UgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZG9jIHdoaXRlc3BhY2UgZml4ZXMKLQotMjAwNi0wNS0wOSAxNzo1ODozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQ29uc3QtaWZ5IEdFbnVtVmFsdWUgYXJyYXlzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmRleC5jOiAoZ3N0X2luZGV4X3Jlc29sdmVyX2dldF90eXBlKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgKGdzdF9mYWtlX3Npbmtfc3RhdGVfZXJyb3JfZ2V0X3R5cGUpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19kYXRhX2dldF90eXBlKSwKLQkgIChnc3RfZmFrZV9zcmNfc2l6ZXR5cGVfZ2V0X3R5cGUpLCAoZ3N0X2Zha2Vfc3JjX2ZpbGx0eXBlX2dldF90eXBlKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAocXVldWVfbGVha3lfZ2V0X3R5cGUpOgotCSAgQ29uc3QtaWZ5IEdFbnVtVmFsdWUgYXJyYXlzLgotCi0yMDA2LTA1LTA5IDEzOjIzOjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IEFkZCB0ZXN0IGNhc2UgZm9yIGZsYWdzICsgZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWRkIHRlc3QgY2FzZSBmb3IgZmxhZ3MgKyBnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUoKS4KLQotMjAwNi0wNS0wOSAxMjowMTozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGJ1ZmZlci5jOiBnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUoKSBzaG91bGQgbWFpbnRhaW4gdGhlIGJ1ZmZlciBmbGFncyAodGhvc2UgdGhhdCBtYWtlIHNlbnNlIGF0IGxlYXN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKToKLQkgIGdzdF9idWZmZXJfbWFrZV9tZXRhZGF0YV93cml0YWJsZSgpIHNob3VsZCBtYWludGFpbiB0aGUKLQkgIGJ1ZmZlciBmbGFncyAodGhvc2UgdGhhdCBtYWtlIHNlbnNlIGF0IGxlYXN0KSAoc2VlICMzNDA4NTkpLgotCi0yMDA2LTA1LTA5IDEwOjUzOjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy86IEZpeCB1cCBpbmNsdWRlczogbmVlZCB0byBpbmNsdWRlIHN0ZGxpYi5oIGluIHRvb2xzLmggZm9yIGV4aXQoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICAqIHRvb2xzL2dzdC10eXBlZmluZC5jOgotCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSAgKiB0b29scy90b29scy5oOgotCSAgRml4IHVwIGluY2x1ZGVzOiBuZWVkIHRvIGluY2x1ZGUgc3RkbGliLmggaW4gdG9vbHMuaCBmb3IgZXhpdCgpLgotCi0yMDA2LTA1LTA5IDEwOjAyOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dGFnbGlzdC4qOiBBUEk6IGFkZCBHU1RfVEFHX0lNQUdFIHRhZyAoIzM0MDcyMSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKF9nc3RfdGFnX2luaXRpYWxpemUpOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgQVBJOiBhZGQgR1NUX1RBR19JTUFHRSB0YWcgKCMzNDA3MjEpLgotCi0yMDA2LTA1LTA4IDE3OjEyOjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cXVlcnkuYzogQWRkZWQgc29tZSBkb2NzIGZvciB0aGUgc2VnbWVudCBxdWVyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVlcnkuYzoKLQkgIEFkZGVkIHNvbWUgZG9jcyBmb3IgdGhlIHNlZ21lbnQgcXVlcnkuCi0KLTIwMDYtMDUtMDggMTc6MDM6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBBbHdheXMgcHVzaCBub24tZmx1c2hpbmcgc2VyaWFsaXplZCBldmVudHMgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgIEFsd2F5cyBwdXNoIG5vbi1mbHVzaGluZyBzZXJpYWxpemVkIGV2ZW50cyBpbiB0aGUgc3RyZWFtaW5nCi0JICB0aHJlYWQuCi0KLTIwMDYtMDUtMDggMTU6NTM6MTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg6Ci0JICB3aGl0ZXNwYWNlLCBjb21tZW50LCBkb2MgZml4dXAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgd2hpdGVzcGFjZSwgY29tbWVudCwgZG9jIGZpeHVwCi0KLTIwMDYtMDUtMDggMTU6NTI6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0ZXJyb3IuYzogQWRkIGEgbWlzc2luZyBlcnJvciBzdHJpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVycm9yLmM6IChfZ3N0X3N0cmVhbV9lcnJvcnNfaW5pdCk6Ci0JICBBZGQgYSBtaXNzaW5nIGVycm9yIHN0cmluZy4KLQotMjAwNi0wNS0wOCAxNDo1NToyNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQWRkIGFwcGxpZWRfcmF0ZSB0byB0aGUgZGVidWcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbmZpZ3VyZV9zZWdtZW50KToKLQkgIEFkZCBhcHBsaWVkX3JhdGUgdG8gdGhlIGRlYnVnCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2Vlayk6Ci0JICBDb3B5IGFwcGxpZWRfcmF0ZSBpbnRvIHRoZSBvdXRnb2luZyBORVdTRUdNRU5UIGV2ZW50Ci0KLTIwMDYtMDUtMDggMTE6NDk6NDMgKzAwMDAgIFBoaWxpcHBlIFJvdXF1aWVyIDxwaGlsaXBwZXJvQGxpYmVydHlzdXJmLmZyPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IGNhbGwgOjp1bmxvY2sgYmVmb3JlIHRha2luZyB0aGUgUFJFUk9MTF9MT0NLIHNvIHdlIGNhbiBzYWZlbHkgaGFuZGxlIGVsZW1lbnRzIHRoYXQgbG9jayAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFBoaWxpcHBlIFJvdXF1aWVyIDxwaGlsaXBwZXJvIGF0IGxpYmVydHlzdXJmIGRvdCBmcj4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19zZXRfZmx1c2hpbmcpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIGNhbGwgOjp1bmxvY2sgYmVmb3JlIHRha2luZyB0aGUgUFJFUk9MTF9MT0NLIHNvIHdlIGNhbiBzYWZlbHkKLQkgIGhhbmRsZSBlbGVtZW50cyB0aGF0IGxvY2sgaW4gOjpyZW5kZXIuCi0JICBGaXhlcyAjMzQwMTc0LgotCi0yMDA2LTA1LTA4IDExOjQzOjE5ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBhdXRvZ2VuLnNoOiBEYXJ3aW4ncyBsaWJ0b29saXplIGlzIGluIGZhY3QgY2FsbGVkIGdsaWJ0b29saXplLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGF1dG9nZW4uc2g6IChDT05GSUdVUkVfREVGX09QVCk6Ci0JICBEYXJ3aW4ncyBsaWJ0b29saXplIGlzIGluIGZhY3QgY2FsbGVkIGdsaWJ0b29saXplLgotCSAgQWRkaW5nIGdsaWJ0b29saXplIHRvIHRoZSBsaXN0IG9mIGFjY2VwdGVkIG5hbWVzIGZvciBsaWJ0b29saXplLgotCi0yMDA2LTA1LTA4IDExOjM1OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogVW5pZnkgZXJyb3IgaGFuZGxpbmcsIGRvbid0IHBvc3QgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGEgcHVzaCgpIHJldHVybnMgRU9TIGJ1dCBwZXJmb3JtIG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19sb29wKToKLQkgIFVuaWZ5IGVycm9yIGhhbmRsaW5nLCBkb24ndCBwb3N0IGFuIGVycm9yIG1lc3NhZ2UKLQkgIHdoZW4gYSBwdXNoKCkgcmV0dXJucyBFT1MgYnV0IHBlcmZvcm0gb3VyIG5vcm1hbCBFT1MKLQkgIGhhbmRsaW5nIGNvZGUuIEZpeGVzICMzNDA3NzIuCi0KLTIwMDYtMDUtMDggMDk6NTI6MzMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OiBNYWtlIHVwc3RlYW0vZG93bnN0cmVhbSBjb25jZXB0cyBtb3JlIGNsZWFyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OgotCSAgTWFrZSB1cHN0ZWFtL2Rvd25zdHJlYW0gY29uY2VwdHMgbW9yZSBjbGVhci4KLQkgIEdpdmUgYW4gZXhhbXBsZSBvZiBzZXJpYWxpemVkL25vbi1zZXJpYWxpemVkIGV2ZW50cy4KLQkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbXMudHh0OgotCSAgTWVudGlvbiBhcHBsaWVkX3JhdGUuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6Ci0JICBNZW50aW9uIGFwcGxpZWQgcmF0ZSwgZmxlc2ggb3V0IHNvbWUgbW9yZSB1c2UgY2FzZXMuCi0JICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19uZXdfc2VnbWVudCksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX25ld19zZWdtZW50KSwgKGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnRfZnVsbCksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX25ld19zZWdtZW50X2Z1bGwpLCAoZ3N0X2V2ZW50X25ld190YWcpLAotCSAgKGdzdF9ldmVudF9wYXJzZV90YWcpLCAoZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZSksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplKSwgKGdzdF9ldmVudF9uZXdfcW9zKSwKLQkgIChnc3RfZXZlbnRfcGFyc2VfcW9zKSwgKGdzdF9ldmVudF9wYXJzZV9zZWVrKSwKLQkgIChnc3RfZXZlbnRfbmV3X25hdmlnYXRpb24pOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIEFkZCBhcHBsaWVkX3JhdGUgZmllbGQgdG8gTkVXU0VHTUVOVCBldmVudC4KLQkgIEFQSTogZ3N0X2V2ZW50X25ld19uZXdfc2VnbWVudF9mdWxsKCkKLQkgIEFQSTogZ3N0X2V2ZW50X3BhcnNlX25ld19zZWdtZW50X2Z1bGwoKQotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfaW5pdCksIChnc3Rfc2VnbWVudF9zZXRfc2VlayksCi0JICAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQpLCAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnRfZnVsbCksCi0JICAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLCAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKToKLQkgICogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIEFkZCBhcHBsaWVkX3JhdGUgdG8gR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCi0JICBNYWtlIGNhbGN1bGF0aW9uIG9mIHN0cmVhbV90aW1lIGFuZCBydW5uaW5nX3RpbWUgbW9yZSBjb3JyZWN0Ci0JICB3cnQgcmF0ZS9hcHBsaWVkX3JhdGUuCi0JICBBZGQgc29tZSBtb3JlIGRvY3MuCi0JICBBUEk6IEdzdFNlZ21lbnQ6OmFwcGxpZWRfcmF0ZSBmaWVsZAotCSAgQVBJOiBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudF9mdWxsKCk7Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29uZmlndXJlX3NlZ21lbnQpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudGZ1bmMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKLQkgIFBhcnNlIGFuZCB1c2UgYXBwbGllZF9yYXRlIGluIHRoZSBHc3RTZWdtZW50IGZpZWxkLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZXZlbnQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFkZCBjaGVjayBmb3IgYXBwbGllZF9yYXRlIGZpZWxkLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c2VnbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdHNlZ21lbnRzX3N1aXRlKToKLQkgIEFkZCBtb3JlIGNoZWNrcyBmb3IgdmFyaW91cyBHc3RTZWdtZW50IG9wZXJhdGlvbnMuCi0KLTIwMDYtMDUtMDggMDk6MTY6MDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU3RvcmUgdGhlIHN5bmMgdGltZSBvZiB0aGUgYnVmZmVyIGVuZCBwb3NpdGlvbiBzZXBhcmF0bHkgaW4gYSBuZXcgdmFyaWFibGUgZW9zX3J0aW1lIHNvIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLAotCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksIChnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkKSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBTdG9yZSB0aGUgc3luYyB0aW1lIG9mIHRoZSBidWZmZXIgZW5kIHBvc2l0aW9uIHNlcGFyYXRseSBpbiBhCi0JICBuZXcgdmFyaWFibGUgZW9zX3J0aW1lIHNvIHdlIGNhbiBwcm9wZXJseSBzeW5jIHRoZSBFT1MgZXZlbnQuCi0JICBGaXhlcyAjMzQwNjk3LgotCSAgRml4IHRoZSBkb2NzIGZvciBnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZCgpLgotCSAgRG9uJ3Qgc2V0IHNlZ21lbnQgc3RhcnQgdG8gaW52YWxpZCB2YWx1ZSB3aGVuIHdlIHJlY2VpdmUgYQotCSAgbm9uIFRJTUUgbmV3c2VnbWVudC4KLQkgIGdldCBjbG9zZXIgdG8gaGFuZGxpbmcgcG9zaXRpb24gcmVwb3J0aW5nIGZvciBuZWdhdGl2ZSByYXRlcwotCSAgY29ycmVjdGx5LgotCi0yMDA2LTA1LTA3IDE5OjU3OjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RjYXBzLmM6IERvY3MgYWJvdXQgaG93IHRvIHByaW50IGNhcHMgZm9yIGRlYnVnIHB1cnBvc2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6Ci0JICBEb2NzIGFib3V0IGhvdyB0byBwcmludCBjYXBzIGZvciBkZWJ1ZyBwdXJwb3Nlcy4KLQkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6IChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQpOgotCSAgdXNlIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgaW5zdGVhZCBvZiBnc3RfY2Fwc19jb3B5LCBGaXhlcyAjMzQwNjA4Ci0KLTIwMDYtMDUtMDYgMjE6NDU6MjcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogdXNlIGZ1bGwgZW51bSBuYW1lcyBhbmQgcHJlcHJlbmQgYSAnJScgaW4gZG9jcyBzdHJpbmdzIHRvIG1ha2UgcmVjZW50IGd0ay1kb2MgdHVybiB0aGF0IGludG8gYSBsaW5rCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIHVzZSBmdWxsIGVudW0gbmFtZXMgYW5kIHByZXByZW5kIGEgJyUnIGluIGRvY3Mgc3RyaW5ncyB0byBtYWtlIHJlY2VudAotCSAgZ3RrLWRvYyB0dXJuIHRoYXQgaW50byBhIGxpbmsKLQotMjAwNi0wNS0wNSAyMTo0NDo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvOiBTb21lIHR5cG8gZml4ZXMsIHNvbWUgYWRkaXRpb25zLCBzb21lIGNsYXJpZmljYXRpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKLQkgIFNvbWUgdHlwbyBmaXhlcywgc29tZSBhZGRpdGlvbnMsIHNvbWUgY2xhcmlmaWNhdGlvbnMuCi0KLTIwMDYtMDUtMDUgMTc6NDU6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzLzogVXNlIHRoZSBzdHJpbmcgcGFzc2VkIHRvIGdfb3B0aW9uX2NvbnRleHRfbmV3KCkgZm9yIHdoYXQgaXQncyBpbnRlbmRlZCBmb3IgLSB0aGUgcHJvZ3JhbSBuYW1lIGlzIGFscmVhZHkgcHJpbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChtYWluKToKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6Ci0JICAqIHRvb2xzL2dzdC1ydW4uYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QtdHlwZWZpbmQuYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOiAobWFpbik6Ci0JICBVc2UgdGhlIHN0cmluZyBwYXNzZWQgdG8gZ19vcHRpb25fY29udGV4dF9uZXcoKSBmb3IKLQkgIHdoYXQgaXQncyBpbnRlbmRlZCBmb3IgLSB0aGUgcHJvZ3JhbSBuYW1lIGlzIGFscmVhZHkKLQkgIHByaW50ZWQgZWxzZXdoZXJlLgotCi0yMDA2LTA1LTA1IDE3OjA3OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy86IEFkZCBiYWNrIC0tdmVyc2lvbiBjb21tYW5kIGxpbmUgb3B0aW9uICgjMzQwNDYwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9NYWtlZmlsZS5hbToKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKLQkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKG1haW4pOgotCSAgKiB0b29scy90b29scy5oOgotCSAgQWRkIGJhY2sgLS12ZXJzaW9uIGNvbW1hbmQgbGluZSBvcHRpb24gKCMzNDA0NjApLgotCSAgKiB0b29scy9nc3QtdHlwZWZpbmQuYzogKGhhdmVfdHlwZV9oYW5kbGVyKSwgKHR5cGVmaW5kX2ZpbGUpLCAobWFpbik6Ci0JICBBZGQgLS12ZXJzaW9uIG9wdGlvbiBhbmQgdXNlIEdPcHRpb24gZm9yIGFyZ3VtZW50IHBhcnNpbmc7IHJlZmFjdG9yIGEKLQkgIGJpdDsgYWNjZXB0IGRpcmVjdG9yaWVzIGFzIGFyZ3VtZW50cyBhbmQgcmVjdXJzZSBpbnRvIHRoZW07IGxhc3RseSwKLQkgIHByaW50IGEgZGVjZW50IGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGluZ3MgZ28gd3JvbmcuCi0KLTIwMDYtMDUtMDUgMTQ6Mzg6MDEgKzAwMDAgIE1hY2llaiBLYXRhZmlhc3ogPG1hdGhyaWNrQG1hdGhyaWNrLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKLQkgIERvbid0IG1lbnRpb24gR3N0VGhyZWFkICgjMzQwNjExKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBEb24ndCBtZW50aW9uIEdzdFRocmVhZCAoIzM0MDYxMSkKLQkgIFVwZGF0ZSBsaW5rIHRvIEdPYmplY3QgdHV0b3JpYWwgKCMzNDA2MDcpCi0KLTIwMDYtMDUtMDUgMTQ6Mjc6MzEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEFkZCBub3RlIGFib3V0IHJlZmNvdW50aW5nIGFuZCBtaW5pb2JqZWN0L2J1ZmZlciB3cml0ZWFiaWxpdHkgdG8gZG9jcy4gRml4ZXMgIzM0MDYwNAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgIEFkZCBub3RlIGFib3V0IHJlZmNvdW50aW5nIGFuZCBtaW5pb2JqZWN0L2J1ZmZlciB3cml0ZWFiaWxpdHkKLQkgIHRvIGRvY3MuIEZpeGVzICMzNDA2MDQKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JICBBZGRlZCBzb21lIGV4cGxhbmF0aW9uIGFib3V0IEBrbGFzcy4KLQotMjAwNi0wNS0wNSAxNDowOToyMSArMDAwMCAgTWFjaWVqIEthdGFmaWFzeiA8bWF0aHJpY2tAbWF0aHJpY2sub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBkb2NzL21hbnVhbC9pbnRyby1tb3RpdmF0aW9uLnhtbDoKLQkqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6Ci0JICBBdm9pZCBDT1JCQSAmIEJvbm9ibyByZWZlcmVuY2VzICgjMzQwNTk4KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBdm9pZCBDT1JCQSAmIEJvbm9ibyByZWZlcmVuY2VzICgjMzQwNTk4KQotCi0yMDA2LTA1LTA1IDEzOjUzOjI4ICswMDAwICBNYWNpZWogS2F0YWZpYXN6IDxtYXRocmlja0BtYXRocmljay5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSAgRml4IHVwIHNvbWUgaW5hY2N1cmFjaWVzIGFuZCBvbWlzc2lvbnMgaW4gQURNICgjMzQwNjA5KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggdXAgc29tZSBpbmFjY3VyYWNpZXMgYW5kIG9taXNzaW9ucyBpbiBBRE0gKCMzNDA2MDkpCi0KLTIwMDYtMDUtMDUgMTI6NTM6MzMgKzAwMDAgIE1hY2llaiBLYXRhZmlhc3ogPG1hdGhyaWNrQG1hdGhyaWNrLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBTbWFsbCB0eXBvIGluIGRvY3MgKCMzNDA2MjUpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFNtYWxsIHR5cG8gaW4gZG9jcyAoIzM0MDYyNSkKLQotMjAwNi0wNS0wNSAwOTowMTo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3BhcnNlL01ha2VmaWxlLmFtOiBNYWtlICdtYWtlIC1qJyBwcm9vZiAoc2VlICMzNDA2OTgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9wYXJzZS9NYWtlZmlsZS5hbToKLQkgIE1ha2UgJ21ha2UgLWonIHByb29mIChzZWUgIzM0MDY5OCkuCi0KLTIwMDYtMDUtMDUgMDg6NTY6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogUmVxdWlyZSBHTGliLTIuOCBoZXJlIGFzIHdlbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgUmVxdWlyZSBHTGliLTIuOCBoZXJlIGFzIHdlbGwuCi0KLTIwMDYtMDUtMDUgMDg6MTc6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFJlbW92ZSBwcmUgZ2xpYjIuOCBjb21wYXRpYmlsaXR5LCBmaXhlcyAjMzQwNTA4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dsaWItY29tcGF0LmM6Ci0JICAqIGdzdC9nc3QuYzogKGluaXRfcHJlKToKLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9pbml0KSwgKGdzdF9vYmplY3RfcmVmKSwKLQkgIChnc3Rfb2JqZWN0X3VucmVmKSwgKGdzdF9vYmplY3RfcmVwbGFjZSksIChnc3Rfb2JqZWN0X2Rpc3Bvc2UpLAotCSAgKGdzdF9vYmplY3RfZGlzcGF0Y2hfcHJvcGVydGllc19jaGFuZ2VkKToKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGdzdF9yZWdpc3RyeV94bWxfcmVhZF9jYWNoZSk6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdCk6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X2RhdGVfZ2V0X3R5cGUpLCAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKLQkgIFJlbW92ZSBwcmUgZ2xpYjIuOCBjb21wYXRpYmlsaXR5LCBmaXhlcyAjMzQwNTA4Ci0KLTIwMDYtMDUtMDQgMTg6MTQ6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R0YWdsaXN0Lmg6IE1lbnRpb24gdHlwZSBvZiB0YWdzIGluIGRvYyBibHVyYnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgIE1lbnRpb24gdHlwZSBvZiB0YWdzIGluIGRvYyBibHVyYnMuCi0KLTIwMDYtMDUtMDQgMTY6MzQ6MjAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IFJlc3RvcmUgYWNjZXB0Y2FwcyBjaGVja2luZyBiZWhhdmlvdXIgbm93IHRoYXQgZ29vZCBwbHVnaW5zIGhhdmUgYmVlbiByZWxlYXNlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2luaXQpLCAoZ3N0X3BhZF9jb25maWd1cmVfc2luayksCi0JICAoZ3N0X3BhZF9jb25maWd1cmVfc3JjKSwgKGdzdF9wYWRfcHVzaCk6Ci0JICBSZXN0b3JlIGFjY2VwdGNhcHMgY2hlY2tpbmcgYmVoYXZpb3VyIG5vdyB0aGF0IGdvb2QgcGx1Z2lucyBoYXZlCi0JICBiZWVuIHJlbGVhc2VkLgotCi0yMDA2LTA1LTA0IDE1OjIwOjE0ICswMDAwICBKYW1lcyBBbmRyZXdhcnRoYSA8dHJzODBAdGFydGFydXMudXdhLmVkdS5hdT4KLQotCSAgTWFrZSBzdXJlIGdzdHByaXZhdGUuaCBhbmQvb3IgY29uZmlnLmggYXJlIGFsd2F5cyBpbmNsdWRlZCBmaXJzdCwgb3RoZXJ3aXNlIHNvbWUgb2Ygb3VyIGRlZmluZXMgKGxpa2UgX0ZJTEVfT0ZGU0VUX0JJLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKYW1lcyBBbmRyZXdhcnRoYSA8dHJzODAgYXQgdGFydGFydXMgdXdhIGVkdSBhdT4KLQkgICogZ3N0L2dzdC5jOgotCSAgKiBnc3QvZ3N0YnVzLmM6Ci0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgICogZ3N0L2dzdGZvcm1hdC5jOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgKiBnc3QvZ3N0cGFyc2UuYzoKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgIE1ha2Ugc3VyZSBnc3Rwcml2YXRlLmggYW5kL29yIGNvbmZpZy5oIGFyZQotCSAgYWx3YXlzIGluY2x1ZGVkIGZpcnN0LCBvdGhlcndpc2Ugc29tZSBvZiBvdXIKLQkgIGRlZmluZXMgKGxpa2UgX0ZJTEVfT0ZGU0VUX0JJVFMpIG1pZ2h0IGJlCi0JICByZWRlZmluZWQgaW4gdGhlIHN5c3RlbSBoZWFkZXJzLiBGaXhlcyBidWlsZAotCSAgb24gb3BlbnNvbGFyaXMgKCMzNDAwMTYpLgotCi0yMDA2LTA1LTA0IDE0OjE5OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OiBBUEk6IGFkZGl0aW9uOiBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcigpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIEFQSTogYWRkaXRpb246IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKCkKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6IChnc3RfYWRhcHRlcl9wdXNoKSwKLQkgIChnc3RfYWRhcHRlcl9wZWVrKSwgKGdzdF9hZGFwdGVyX3Rha2UpLCAoZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIpLAotCSAgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBQcmVwYXJlIGZvciBvcHRpbWl6aW5nIHRoZSBoZWxsIG91dCBvZiB0aGlzIGh1Z2VseSBpbmVmZmljaWVudAotCSAgcGllY2Ugb2YgY29kZS4KLQkgIEFkZGVkIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKCkgc28gd2UgY2FuIGF0IGxlYXN0IHN0YXJ0IHRoaW5raW5nCi0JICBhYm91dCBzdWJidWZmZXJpbmcgYW5kIG1lcmdpbmcuCi0JICBBZGRlZCBzb21lIGNvbW1lbnRzLgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svbGlicy9hZGFwdGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2FkYXB0ZXJfc3VpdGUpLCAobWFpbik6Ci0JICBBZGRlZCBHc3RBZGFwdGVyIGNoZWNrLgotCi0yMDA2LTA1LTA0IDEzOjMwOjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDogRml4IHNvbWUgdHlwb3MsIGFkZCBibHVyYiBhYm91dCBidWZmZXIgZmxhZ3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JICBGaXggc29tZSB0eXBvcywgYWRkIGJsdXJiIGFib3V0IGJ1ZmZlciBmbGFncy4KLQotMjAwNi0wNS0wMyAxNjo0NToxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IG1ha2Ugc3VyZSBHc3RCYXNlVHJhbnNmb3JtQ2xhc3Mgc2hvd3MgdXAgaW4gdGhlIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgbWFrZSBzdXJlIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBzaG93cyB1cCBpbiB0aGUgZG9jcwotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBtb3ZlIGRvY3Mgc28gZ3RrLWRvYyBwaWNrcyBpdCB1cCBub3cKLQotMjAwNi0wNS0wMyAxNjo0MjowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIHdoaXRlc3BhY2UgcmVtb3ZhbCBhbmQgd2lkdGggY29lcmNpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgd2hpdGVzcGFjZSByZW1vdmFsIGFuZCB3aWR0aCBjb2VyY2lvbgotCi0yMDA2LTA1LTAzIDE2OjQwOjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JICB3aGl0ZXNwYWNlIG1vdmluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3aGl0ZXNwYWNlIG1vdmluZwotCi0yMDA2LTA1LTAyIDE3OjI5OjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IGFkZCBtaXNzaW5nIHN5bWJvbHMgdG8gZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBhZGQgbWlzc2luZyBzeW1ib2xzIHRvIGRvY3MKLQotMjAwNi0wNS0wMiAxNzoxNzoyMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IGJhY2sgb3V0IHRoZSBuZXdzZWdtZW50IGhhbmRsaW5nIGNoYW5nZSwgc2VlICMzNDAwNjAgZm9yIG9uZ29pbmcgZGlzY3Vzc2lvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpOgotCSAgYmFjayBvdXQgdGhlIG5ld3NlZ21lbnQgaGFuZGxpbmcgY2hhbmdlLCBzZWUgIzM0MDA2MCBmb3Igb25nb2luZwotCSAgZGlzY3Vzc2lvbgotCi0yMDA2LTA0LTI5IDIzOjE1OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy9nc3QtcnVuLmM6IEZpeCB3cm9uZyBnX2ZpbGVfdGVzdCgpIHVzYWdlIChzZWUgZ2xpYiBkb2NzIGZvciB3aHkgaXQgZG9lc24ndCB3b3JrKTsgZml4IHR5cG8gaW4gZXJyb3IgbWVzc2FnZS4gRmkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtcnVuLmM6IChnZXRfY2FuZGlkYXRlcyksIChtYWluKToKLQkgIEZpeCB3cm9uZyBnX2ZpbGVfdGVzdCgpIHVzYWdlIChzZWUgZ2xpYiBkb2NzIGZvciB3aHkgaXQgZG9lc24ndAotCSAgd29yayk7IGZpeCB0eXBvIGluIGVycm9yIG1lc3NhZ2UuIEZpeGVzICMzNDAwNzkuCi0KLTIwMDYtMDQtMjkgMDA6Mzg6MDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3BsdWdpbnMvdG1wbC8uZ2l0aWdub3JlOgotCSAgaWdub3JlIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWdub3JlIG1vcmUKLQotMjAwNi0wNC0yOSAwMDozNjo0NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIG1vdmUgdXBsb2FkLm1hayB0byBjb21tb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb21tb24vTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvZmFxL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3B3Zy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9zbGlkZXMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvdXBsb2FkLm1hazoKLQkgICogY29tbW9uL3VwbG9hZC5tYWs6Ci0JICBtb3ZlIHVwbG9hZC5tYWsgdG8gY29tbW9uCi0KLTIwMDYtMDQtMjkgMDA6MzU6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKLQkgIGFkZCBtb3JlIG5vdGVzIG9uIG1vdmluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbW9yZSBub3RlcyBvbiBtb3ZpbmcKLQotMjAwNi0wNC0yOSAwMDozMzo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiBhZGQgbW9yZSBhc3NlcnRzIG9uIHJlZmNvdW50cyBkbyBtb3JlIGNsZWFudXAgYXQgZW5kIG9mIHRlc3RzIGZpeCB0ZXN0IGxlYWtzIHNob3dpbmcgaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA0LTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIGFkZCBtb3JlIGFzc2VydHMgb24gcmVmY291bnRzCi0JICBkbyBtb3JlIGNsZWFudXAgYXQgZW5kIG9mIHRlc3RzCi0JICBmaXggdGVzdCBsZWFrcyBzaG93aW5nIGluIEZDNQotCi0yMDA2LTA0LTI4IDIyOjU2OjI4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IHJldmVydGVkIHdyb25nIGNoYW5nZSBhbmQgcmVmbG93ZWQgY29kZSB0byBhdm9pZCBvdGhlcnMgZmFsbGluZyBpbnRvIHRoaXMgdHJhcAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCk6Ci0JICByZXZlcnRlZCB3cm9uZyBjaGFuZ2UgYW5kIHJlZmxvd2VkIGNvZGUgdG8gYXZvaWQgb3RoZXJzIGZhbGxpbmcgaW50bwotCSAgdGhpcyB0cmFwCi0KLTIwMDYtMDQtMjggMjA6NTU6MzMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBmaXggY2hhbmdlbG9nIGVudHJ5IGFib3V0IGxhc3QgY29sbGVjdHBhZHMgY2hhbmdlLCBhZGQgbm90ZXMgYWJvdXQgcHJvcGVyIGZpeAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpOgotCSAgZml4IGNoYW5nZWxvZyBlbnRyeSBhYm91dCBsYXN0IGNvbGxlY3RwYWRzIGNoYW5nZSwKLQkgIGFkZCBub3RlcyBhYm91dCBwcm9wZXIgZml4Ci0KLTIwMDYtMDQtMjggMjA6NDc6MjMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0Lzogb25seSB3cml0ZSBvdXQgcmVnaXN0cnkgaWYgaXQgaGFzIGNoYW5nZWQsIGZpeGVzICMzMzgzMzkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCksCi0JICAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aCk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSAgb25seSB3cml0ZSBvdXQgcmVnaXN0cnkgaWYgaXQgaGFzIGNoYW5nZWQsIGZpeGVzICMzMzgzMzkKLQotMjAwNi0wNC0yOCAyMDo0NDoyMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvOiBvbmx5IHdyaXRlIG91dCByZWdpc3RyeSBpZiBpdCBoYXMgY2hhbmdlZCwgZml4ZXMgIzMzODMzOQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsKSwKLQkgIChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoKToKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JICBvbmx5IHdyaXRlIG91dCByZWdpc3RyeSBpZiBpdCBoYXMgY2hhbmdlZCwgZml4ZXMgIzMzODMzOQotCi0yMDA2LTA0LTI4IDE4OjU1OjE3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIG1ha2UgR3N0RWxlbWVudERldGFpbHMgY29uc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KToKLQkgIG1ha2UgR3N0RWxlbWVudERldGFpbHMgY29uc3QKLQotMjAwNi0wNC0yOCAxODo0ODozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlLzogbW9yZSBkZXRhaWxlZCBkZWJ1ZyBhbmQgZm9ybWF0dGluZyBjbGVhbnVwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19ldmVudCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYmFzZV9pbml0KSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2lzX2NvbGxlY3RlZCksIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KToKLQkgIG1vcmUgZGV0YWlsZWQgZGVidWcgYW5kIGZvcm1hdHRpbmcgY2xlYW51cAotCi0yMDA2LTA0LTI4IDE3OjUyOjEzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBjbGVhbnVwIGRvdWJsZSBjb2RlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9saW5rX3BhZHMpOgotCSAgY2xlYW51cCBkb3VibGUgY29kZQotCi0yMDA2LTA0LTI4IDE3OjMzOjQxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiBzb21lIGxpdHRsZSB0dW5pbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIChnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyk6Ci0JICBzb21lIGxpdHRsZSB0dW5pbmcKLQkgICogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgotCSAgYSBuZXcgdGVzdCBmb3IgbGl2ZSB2YWx1ZSBoYW5kbGluZwotCi0yMDA2LTA0LTI4IDE1OjUxOjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBHaXZlIGNyZWRpdCB0byBUYXBpIFBhYXZvbGEgZm9yIGxhc3QgcGF0Y2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgR2l2ZSBjcmVkaXQgdG8gVGFwaSBQYWF2b2xhIGZvciBsYXN0IHBhdGNoCi0KLTIwMDYtMDQtMjggMTU6NDg6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBBZGRlZCBzb21lIG1vcmUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKHB1c2hfYW5kX3JlZik6Ci0JICBBZGRlZCBzb21lIG1vcmUgZG9jcy4KLQkgIEZpeCByZWZjb3VudCBpc3N1ZSB3aGl0aCBnc3RfZWxlbWVudF9mb3VuZF90YWdzKCkgaGVscGVyCi0JICBmdW5jdGlvbi4gRml4ZXMgIzMzODMzNQotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF91dGlsc19zdWl0ZSk6Ci0JICBBZGRlZCB0ZXN0c3VpdGUgZm9yIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3MoKS4KLQotMjAwNi0wNC0yOCAxMzo1MTowMCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0dmFsdWUuYzogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSB3aGVuIHRyeWluZyB0byBzZXJpYWxpemUgZmxhZ3MgY29udGFpbmluZyBpbnZhbGlkIHZhbHVlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9zZXJpYWxpemVfZmxhZ3MpOgotCSAgQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSB3aGVuIHRyeWluZyB0byBzZXJpYWxpemUgZmxhZ3MgY29udGFpbmluZwotCSAgaW52YWxpZCB2YWx1ZXMuCi0KLTIwMDYtMDQtMjggMTM6NDQ6MjAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBzbWFsbCBkb2MgZml4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHNtYWxsIGRvYyBmaXgKLQotMjAwNi0wNC0yOCAxMzo0MzowMyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBJZiB3ZSBnZXQgRU9TIGJlZm9yZSBhbnkgZGF0YSBpcyBhY2N1bXVsYXRlZCwgZG9uJ3QgdXNlIHVuaW5pdGlhbGlzZWQgbG9jYWwgdmEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpOgotCSAgSWYgd2UgZ2V0IEVPUyBiZWZvcmUgYW55IGRhdGEgaXMgYWNjdW11bGF0ZWQsIGRvbid0IHVzZQotCSAgdW5pbml0aWFsaXNlZCBsb2NhbCB2YXJpYWJsZXMuCi0KLTIwMDYtMDQtMjggMTM6NDA6MTUgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiBGaXhlcyBpbiByZWFkaW5nL3dyaXRpbmcgZXZlbnRzIG92ZXIgR0RQIChub3QgY3VycmVudGx5IHVzZWQ/KSAtIGRlcmVmZXJlbmNpbmcgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KSwKLQkgIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQpOgotCSAgRml4ZXMgaW4gcmVhZGluZy93cml0aW5nIGV2ZW50cyBvdmVyIEdEUCAobm90IGN1cnJlbnRseSB1c2VkPykgLQotCSAgZGVyZWZlcmVuY2luZyBOVUxMIGV2ZW50cyBmb3IgdW5rbm93bi9pbnZhbGlkIGV2ZW50IHR5cGVzLCBtZW1vcnkKLQkgIGxlYWssIGFuZCBjaGFuZ2UgZ193YXJuaW5nIHRvIEdTVF9XQVJOSU5HLgotCi0yMDA2LTA0LTI4IDEzOjI1OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFdoZW4gZnJhbWUgZHJvcHBpbmcgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIG5vdCBpZ25vcmUgZnJhbWVzIHdpdGhvdXQgYSBkdXJhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2lzX3Rvb19sYXRlKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3JlbmRlcl9zdGF0cyksIChnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIFdoZW4gZnJhbWUgZHJvcHBpbmcgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIG5vdCBpZ25vcmUgZnJhbWVzCi0JICB3aXRob3V0IGEgZHVyYXRpb24uCi0JICBVcGRhdGUgc29tZSBkb2N1bWVudGF0aW9uLgotCi0yMDA2LTA0LTI4IDEzOjE4OjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksCi0JICAoZ3N0X2Jhc2Vfc3JjX3NlbmRfZXZlbnQpLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCi0KLTIwMDYtMDQtMjggMTM6MTY6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IGhhbmRsZSBFQUdBSU4sIEVJTlRSIGFuZCBzaG9ydCB3cml0ZXMgY29ycmVjdGx5LiBBbHNvIGNsZWFuIHVwIHNvbWUgZXJyb3IgY2FzZXMsIGF2b2lkIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6IChnc3RfZmRfc2lua19yZW5kZXIpLAotCSAgKGdzdF9mZF9zaW5rX2NoZWNrX2ZkKSwgKGdzdF9mZF9zaW5rX3VwZGF0ZV9mZCk6Ci0JICBoYW5kbGUgRUFHQUlOLCBFSU5UUiBhbmQgc2hvcnQgd3JpdGVzIGNvcnJlY3RseS4gQWxzbyBjbGVhbgotCSAgdXAgc29tZSBlcnJvciBjYXNlcywgYXZvaWQgYSBkZWFkbG9jayBvbiBiYWQgZmlsZSBkZXNjcmlwdG9ycyBhbmQKLQkgIHVzZSBHU1RfREVCVUdfT0JKRUNULgotCSAgRml4ZXMgIzMzOTg0MwotCi0yMDA2LTA0LTI4IDEzOjEzOjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0dmFsdWUuYzogRG9uJ3QgdHJ5IHRvIHNlcmlhbGl6ZSBhIEdWYWx1ZSB3aXRoIGEgTlVMTCBidWZmZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfc2VyaWFsaXplX2J1ZmZlciksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2J1ZmZlcik6Ci0JICBEb24ndCB0cnkgdG8gc2VyaWFsaXplIGEgR1ZhbHVlIHdpdGggYSBOVUxMIGJ1ZmZlci4KLQkgIEZpeGVzICMzMzk4MjEuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKLQkgIEFkZGVkIGNoZWNrIGZvciBzZXJpYWxpc2F0aW9uIG9mIE5VTEwgYnVmZmVycy4KLQotMjAwNi0wNC0yOCAxMzoxMDowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogVGFraW5nIGEgTlVMTCBtaW5pb2JqZWN0IGlzIHZhbGlkLCBmaXggdGhlIGNhc2Ugd2hlcmUgd2UgdHJ5IHRvIHVucmVmIHRoZSBOVUxMIG1pbmlvYmplY3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF92YWx1ZV90YWtlX21pbmlfb2JqZWN0KToKLQkgIFRha2luZyBhIE5VTEwgbWluaW9iamVjdCBpcyB2YWxpZCwgZml4IHRoZSBjYXNlIHdoZXJlCi0JICB3ZSB0cnkgdG8gdW5yZWYgdGhlIE5VTEwgbWluaW9iamVjdC4KLQotMjAwNi0wNC0yOCAxMzowNToxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHVwZGF0ZSB3aW4zMiBjb25maWcuaAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgd2luMzIgY29uZmlnLmgKLQotMjAwNi0wNC0yOCAxMzowNDowNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAc29uaWNwdWxzZS5kZT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBVcGRhdGUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFN0ZWZhbiBLb3N0IDxlbnNvbmljIGF0IHNvbmljcHVsc2UgZG90IGRlPgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpOgotCSAgVXBkYXRlIGRvY3MuCi0JICBEb24ndCBsZWFrIGJpbiByZWZjb3VudCB3aGVuIGEgc3RhdGUgcmVjYWxjIGlzCi0JICBpbiBwcm9ncmVzcyBhbmQgd2UgZGVsYXkgYW5vdGhlciBvbmUgIzMzOTgwOC4KLQotMjAwNi0wNC0yOCAxMjo1ODoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogTWVudGlvbiBRb1MgYXMgYW4gb25nb2luZyB3b3JrIGl0ZW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgIE1lbnRpb24gUW9TIGFzIGFuIG9uZ29pbmcgd29yayBpdGVtLgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQ6Ci0JICBOZXcgZG9jIGFib3V0IGJ1ZmZlcmluZyB0aGF0IG5lZWRzIHRvIGJlIGZsZXNoZWQgb3V0Ci0JICBhdCBzb21lIHBvaW50LgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6Ci0JICBNb3JlIFFvUyBwb2xpY3kgZm9yIGRlY29kZXJzL2RlbXV4ZXJzL3RyYW5zZm9ybXMKLQkgICogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKLQkgIFNtYWxsIHVwZGF0ZS4KLQotMjAwNi0wNC0yOCAxMDo1NjowNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIEhFQUQKLQotPT09IHJlbGVhc2UgMC4xMC41ID09PQotCi0yMDA2LTA0LTI4IDEwOjUzOjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICByZWxlYXNpbmcgMC4xMC41Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjEwLjUKLQotMjAwNi0wNC0yOCAwOTo0ODowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGRvY3MvdXBsb2FkLm1hazoKLQkgIGZpeCB1cGxvYWQubWFrOyBzaG91bGQgbW92ZSB0byBjb21tb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHVwbG9hZC5tYWs7IHNob3VsZCBtb3ZlIHRvIGNvbW1vbgotCi0yMDA2LTA0LTI4IDA5OjIwOjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvTUFOSUZFU1Q6Ci0JICBhZGRpbmcgbWlzc2luZyBkc3AgZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkaW5nIG1pc3NpbmcgZHNwIGZpbGVzCi0KLTIwMDYtMDQtMjYgMTM6NTQ6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBwcmVyZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHByZXJlbGVhc2UKLQotMjAwNi0wNC0yMiAyMTozNDoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogRml4IGludGVybmFsIGRhdGEgZmxvdyBlcnJvcnMuICBGaXhlcyAjMzM4NzExLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogV2ltIFRheW1hbnMKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pbml0KSwgKGdzdF9wYWRfY29uZmlndXJlX3NpbmspLAotCSAgKGdzdF9wYWRfY29uZmlndXJlX3NyYyksIChnc3RfcGFkX3B1c2gpOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9pbml0KToKLQkgIEZpeCBpbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3JzLiAgRml4ZXMgIzMzODcxMS4KLQotMjAwNi0wNC0xMiAxMTo1ODo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzogRG9uJ3QgbGVhayB0aGUgZmFjdG9yeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRG9uJ3QgbGVhayB0aGUgZmFjdG9yeS4KLQotMjAwNi0wNC0xMiAxMTowNjo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBvL2JnLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHVwZGF0ZWQgdHJhbnNsYXRpb25zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZWQgdHJhbnNsYXRpb25zCi0KLTIwMDYtMDQtMTIgMTE6MDQ6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgdXBkYXRlIGxpYnRvb2wgdmVyc2lvbmluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgbGlidG9vbCB2ZXJzaW9uaW5nCi0KLTIwMDYtMDQtMTIgMTA6NTc6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBwcmVyZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHByZXJlbGVhc2UKLQotMjAwNi0wNC0xMiAxMDoyODo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IEZyZWUgYWxsb2NhdGVkIEdzdFRpbWVkVmFsdWVzIHdoZW4gZnJlZWluZyBsaXN0IG5vZGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfdW5zZXQpLAotCSAgKGdzdF9jb250cm9sbGVyX3Vuc2V0X2FsbCk6Ci0JICBGcmVlIGFsbG9jYXRlZCBHc3RUaW1lZFZhbHVlcyB3aGVuIGZyZWVpbmcgbGlzdCBub2Rlcy4KLQkgIFNob3VsZCBmaXggbGVha3MgJ21ha2UgY2hlY2stdmFsZ3JpbmQnIGNvbXBsYWlucyBhYm91dC4KLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSAgQWRkIGdzdF9jb250cm9sbGVyX3Vuc2V0X2FsbC4KLQotMjAwNi0wNC0xMiAxMDoxNToxMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIGZpeCBDaGFuZ2VMb2cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IENoYW5nZUxvZwotCi0yMDA2LTA0LTExIDIxOjA3OjI2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEFkZGVkIG5ldyBtZXRob2QgX3Vuc2V0X2FsbCgpIGFuZCBmaXhlZCBfdW5zZXQoKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfdW5zZXQpLAotCSAgKGdzdF9jb250cm9sbGVyX3Vuc2V0X2FsbCk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgotCSAgQWRkZWQgbmV3IG1ldGhvZCBfdW5zZXRfYWxsKCkgYW5kIGZpeGVkIF91bnNldCgpCi0JICAqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGdzdF9jb250cm9sbGVyX3N1aXRlKToKLQkgIEFkZGVkIHR3byB0ZXN0Y2FzZXMgZm9yIG5ldyBhbmQgZml4ZWQgbWV0aG9kCi0KLTIwMDYtMDQtMTEgMTg6NDM6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6IE1TR19ET05UV0FJVCBpcyBub3QgZGVmaW5lZCBvbiBDeWd3aW4sIHNvIHdvcmsgYXJvdW5kIHRoYXQgKGZpeGVzICMzMTcwNDgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmM6IChnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQpOgotCSAgTVNHX0RPTlRXQUlUIGlzIG5vdCBkZWZpbmVkIG9uIEN5Z3dpbiwgc28gd29yawotCSAgYXJvdW5kIHRoYXQgKGZpeGVzICMzMTcwNDgpLgotCi0yMDA2LTA0LTExIDE0OjQ4OjM0ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgZml4IHZlcnNpb25pbmcgbWFjcm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHZlcnNpb25pbmcgbWFjcm8KLQotMjAwNi0wNC0xMSAxMTo0NzozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IFNvbWUgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9yZWdpc3RlciksCi0JICAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUpLCAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKToKLQkgIFNvbWUgY2xlYW51cHMuCi0JICBGaXhlZCBhIEZJWE1FLgotCSAgVXBkYXRlZCBkb2NzIChGaXhlcyAjMTMxMDc5KQotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQpOgotCSAgU21hbGwgY2xlYW51cHMuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2VsZW1lbnRfc3VpdGUpOgotCSAgQWRkZWQgdGVzdGNhc2UgZm9yIGVsZW1lbnRmYWN0b3J5IGNsYXNzIGZpZWxkLgotCi0yMDA2LTA0LTEwIDEwOjQ2OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0c2VnbWVudC5jOiBBZGRlZCBzb21lIG1vcmUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOgotCSAgQWRkZWQgc29tZSBtb3JlIGRvY3MuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9xb3MpLAotCSAgKGdzdF9iYXNlX3NpbmtfcmVzZXRfcW9zKToKLQkgIENhbGN1bGF0ZSBtb3JlIGFjY3VyYXRlIHJhdGUgdmFsdWVzLgotCi0yMDA2LTA0LTA5IDE2OjU3OjM0ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9nc3RfcHJpdmF0ZS5oOiBhZGQgYSBuZXcgI2lmZGVmIHRvIHVzZSBfX2RlY2xzcGVjKGRsbGltcG9ydCkgb25seSBmb3Igb3RoZXIgbW9kdWxlcyBhbmQgbm90IGZvciBnc3RyZWFtZXIgY29yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgYWRkIGEgbmV3ICNpZmRlZiB0byB1c2UgX19kZWNsc3BlYyhkbGxpbXBvcnQpIG9ubHkgZm9yCi0JICBvdGhlciBtb2R1bGVzIGFuZCBub3QgZm9yIGdzdHJlYW1lciBjb3JlCi0JICAqIGdzdC9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19wZXJmb3JtX3Fvcyk6Ci0JICB1c2UgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSBmb3IgY29udmVyc2lvbgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGFkZCBuZXcgZXhwb3J0ZWQgZnVuY3Rpb25zCi0JICAqIHdpbjMyL3ZzNi9nc3RfaW5zcGVjdC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9nc3RfbGF1bmNoLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGJhc2UuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0Y29udHJvbGxlci5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3Rjb3JlZWxlbWVudHMuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0ZGF0YXByb3RvY29sLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdG5ldC5kc3A6Ci0JICB1cGRhdGUgcHJvamVjdCBmaWxlcwotCi0yMDA2LTA0LTA4IDIwOjU3OjMxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEZpeCAjMzM3MzY1IChnX3R5cGVfY2xhc3NfcmVmIDwtPiBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X3N1YmJ1ZmZlcl9jbGFzc19pbml0KToKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19pbml0KToKLQkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzogKGdzdF9pbmRleF9mYWN0b3J5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpLAotCSAgKGdzdF9zaWduYWxfb2JqZWN0X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogKGdzdF9wYWRfdGVtcGxhdGVfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IChnc3RfcGx1Z2luX2ZlYXR1cmVfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3R0YXNrLmM6IChnc3RfdGFza19jbGFzc19pbml0KToKLQkgICogZ3N0L2dzdHhtbC5jOiAoZ3N0X3htbF9jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIChfZ3N0X2NvbnRyb2xsZXJfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZF9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6IChnc3RfZmlsZV9pbmRleF9jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOiAoZ3N0X21lbV9pbmRleF9jbGFzc19pbml0KToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3BsdWdpbnMvZXhhbXBsZS5jOiAoZ3N0X2V4YW1wbGVfY2xhc3NfaW5pdCk6Ci0JICAqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGhyZWFkcy9zaWduYWxzLmM6IChnc3RfdGVzdF9jbGFzc19pbml0KToKLQkgIEZpeCAjMzM3MzY1IChnX3R5cGVfY2xhc3NfcmVmIDwtPiBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQpCi0KLTIwMDYtMDQtMDggMTg6MTE6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RwYWQuYzogTXVzdCBzZXQgcGVlciBwYWRzIGJlZm9yZSBjYWxsaW5nIHRoZSBsaW5rIGZ1bmN0aW9uLCBvdGhlcndpc2UgYSB0YXNrIHN0YXJ0ZWQgZnJvbSBhIGxpbmsgZnVuY3Rpb24gbWlnaC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfbGluayk6Ci0JICBNdXN0IHNldCBwZWVyIHBhZHMgYmVmb3JlIGNhbGxpbmcgdGhlIGxpbmsgZnVuY3Rpb24sIG90aGVyd2lzZQotCSAgYSB0YXNrIHN0YXJ0ZWQgZnJvbSBhIGxpbmsgZnVuY3Rpb24gbWlnaHQgZ2V0IGEgZmxvdy1ub3QtbGlua2VkCi0JICByZXN1bHQgd2hlbiB0cnlpbmcgdG8gcHVzaCBiZWNhdXNlIHRoZSBvdGhlciB0aHJlYWQgd2hlcmUgdGhlCi0JICBsaW5raW5nIGhhcHBlbnMgaGFzbid0IGhhZCBhIGNoYW5jZSB0byBzZXQgdGhlIHBlZXJzIHlldC4gVGhpcwotCSAgbWlnaHQgaGFwcGVuIGZvciBleGFtcGxlIHdoZW4gYSBxdWV1ZSBnZXRzIGxpbmtlZCB0byBhIGRvd25zdHJlYW0KLQkgIGVsZW1lbnQsIGFzIHF1ZXVlIHN0YXJ0cyBhIHN0cmVhbWluZyB0YXNrIHdoZW4gaXRzIHNvdXJjZSBwYWQKLQkgIGdldHMgbGlua2VkLiBIYXBwZW5zIGluIHJlYWwgbGlmZSB3aGVuIHBsYXlpbmcgYmFjayBmbGFjL211c2VwYWNrCi0JICBmaWxlcyBpbiBwbGF5YmluICgjMzMyMzkwKS4KLQotMjAwNi0wNC0wOCAxODowNToxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBGaXggYnJva2VuIEdPYmplY3QgbWFjcm9zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZGV4Lmg6Ci0JICAqIGdzdC9nc3R4bWwuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgotCSAgRml4IGJyb2tlbiBHT2JqZWN0IG1hY3JvcwotCi0yMDA2LTA0LTA3IDE1OjE5OjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEluaXRpYWxpemUgc3RhcnQgYW5kIHN0b3AgdGltZXMsIHRoYW5rcyB2YWxncmluZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzKToKLQkgIEluaXRpYWxpemUgc3RhcnQgYW5kIHN0b3AgdGltZXMsIHRoYW5rcyB2YWxncmluZC4KLQotMjAwNi0wNC0wNyAxNDo1MDowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBCZSBhIGJpdCBuaWNlciB0byBiYWRseSBiZWhhdmluZyB1cHN0cmVhbSBlbGVtZW50cyB0aGF0IGV4cGVjdCB1cyB0byBkZWFsIHdpdGggbm9uIFRJTUUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyk6Ci0JICBCZSBhIGJpdCBuaWNlciB0byBiYWRseSBiZWhhdmluZyB1cHN0cmVhbSBlbGVtZW50cyB0aGF0IGV4cGVjdAotCSAgdXMgdG8gZGVhbCB3aXRoIG5vbiBUSU1FIHNlZ21lbnRzIGFuZCB0aW1lc3RhbXBzIChzdWNoIGFzIGZha2VzcmMKLQkgIGluIHRoZSB0ZXN0c3VpdGUpLgotCi0yMDA2LTA0LTA3IDE0OjAyOjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YnVzLmM6IFNtYWxsIGRvY3VtZW50YXRpb24gY2xhcmlmaWNhdGlvbiBhYm91dCB0aGUgc2lnbmFsIHdhdGNoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidXMuYzoKLQkgIFNtYWxsIGRvY3VtZW50YXRpb24gY2xhcmlmaWNhdGlvbiBhYm91dCB0aGUgc2lnbmFsIHdhdGNoLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzKSwKLQkgIChnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2spLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKLQkgIChnc3RfYmFzZV9zaW5rX3BlcmZvcm1fcW9zKSwgKGdzdF9iYXNlX3NpbmtfcmVzZXRfcW9zKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3JlbmRlcl9zdGF0cyksIChnc3RfYmFzZV9zaW5rX3JlbmRlcl9vYmplY3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX2xhc3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX3BhdXNlZCksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBDb252ZXJ0IGFuZCBzdG9yZSB0aW1lc3RhbXBzIGluIHN0cmVhbSB0aW1lIGFuZCBydW5uaW5nIHRpbWUsIHRoZQotCSAgcmF3IHRpbWVzdGFtcHMgYXJlIG5vdCB1c2VmdWxsLCBhbHNvIGRvY3VtZW50IHRoaXMgYmV0dGVyLgotCSAgVXNlIGRpZmZlcmVudCB3aW5kb3cgc2l6ZXMgZm9yIGdvb2QgYW5kIGJhZCBRb1Mgb2JzZXJ2YXRpb25zIHNvCi0JICB3ZSByZWFjdCB0byBiYWRuZXNzIGEgbGl0dGxlIHF1aWNrZXIuCi0JICBLZWVwIHRyYWNrIG9mIHRoZSBhbW91bnQgb2YgcmVuZGVyZWQgYW5kIGRyb3BwZWQgYnVmZmVycy4KLQkgIFNlbmQgUW9TIHRpbWVzdGFtcHMgaW4gcnVubmluZyB0aW1lLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudGZ1bmMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKLQkgIENvbXBhcmUgUW9TIHRpbWVzdGFtcHMgYWdhaW5zdCBydW5uaW5nIHRpbWUuCi0KLTIwMDYtMDQtMDYgMTc6MzY6MjcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBhZGQgZ25vbmxpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgZ25vbmxpbgotCi0yMDA2LTA0LTA2IDE1OjQ2OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGFkLmM6IFR5cG8gZml4ZXMgaW4gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6Ci0JICBUeXBvIGZpeGVzIGluIGRvY3MuCi0KLTIwMDYtMDQtMDYgMTU6MDc6MTIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2dzdHBhZC5jOiBVc2UgZ192YWx1ZV9nZXRfb2JqZWN0KCkgaW5zdGVhZCBvZiBnX3ZhbHVlX2R1cF9nc3Rfb2JqZWN0KCksIHRvIGF2b2lkIGRvdWJsZS1yZWZmaW5nIHRoZSBwYWQgdGVtcGxhdGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfcHJvcGVydHkpOgotCSAgVXNlIGdfdmFsdWVfZ2V0X29iamVjdCgpIGluc3RlYWQgb2YgZ192YWx1ZV9kdXBfZ3N0X29iamVjdCgpLAotCSAgdG8gYXZvaWQgZG91YmxlLXJlZmZpbmcgdGhlIHBhZCB0ZW1wbGF0ZSAod2hpY2ggd2UgdGhlbiBzaW5rLAotCSAgc28gdGhpcyB3b3JrZWQgcHJldmlvdXNseSBpZiAoYW5kIG9ubHkgaWYpIHRoZSBwYWQgdGVtcGxhdGUKLQkgIHdhcyBmbG9hdGluZy4KLQkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6IChnc3RfcGFkX3RlbXBsYXRlX2luaXQpLAotCSAgKGdzdF9wYWRfdGVtcGxhdGVfcGFkX2NyZWF0ZWQpOgotCSAgTmV2ZXIgcmV0dXJuIGZsb2F0aW5nIHJlZmVyZW5jZXMgdG8gcGFkIHRlbXBsYXRlcywgY3JlYXRlCi0JICB0aGVtIGFzIGluaXRpYWxseS1zdW5rZW4uCi0JICBEb2N1bWVudCBhbiBleHRyYSBmdW5jdGlvbiAoYW5kIG1ha2UgdGhpcyBzdG9wIHNpbmtpbmcgb3VyCi0JICBwYWQgdGVtcGxhdGUsIHNpbmNlIHRoYXQgaXMgbm93IGd1YXJhbnRlZWQgdG8gZG8gbm90aGluZywKLQkgIHNpbmNlIHdlIGNyZWF0ZWQgaXQgc3Vua2VuKS4KLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICBGaXggZG9jcyB0eXBvLgotCi0yMDA2LTA0LTA2IDExOjI3OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0aW5mby5jOiBBZGQgc29tZSBuZXdsaW5lcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5jOiAoX19nc3RfaW5fdmFsZ3JpbmQpOgotCSAgQWRkIHNvbWUgbmV3bGluZXMuCi0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKToKLQkgIERvbid0IGxlYWsgYnVmZmVyIGNhcHMuCi0KLTIwMDYtMDQtMDYgMTA6Mzg6NTQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L3BhcnNlL2dyYW1tYXIueTogRml4IGEgbGVhayBpbiBwYXJzZS1sYXVuY2ggZm9yIGFueSBzb3VyY2Utb3Itc2luayBuYW1lZCBlbGVtZW50IHJlZmVyZW5jZXMgdXNlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgRml4IGEgbGVhayBpbiBwYXJzZS1sYXVuY2ggZm9yIGFueSBzb3VyY2Utb3Itc2luayBuYW1lZCBlbGVtZW50Ci0JICByZWZlcmVuY2VzIHVzZWQuCi0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzogKGV4cGVjdGVkX2ZhaWxfcGlwZSk6Ci0JICBVbnJlZiB0aGUgcGlwZWxpbmUgaWYgaXQgZXhpc3RzIGFmdGVyIHdlJ3ZlIGZhaWxlZCBwYXJzaW5nLgotCi0yMDA2LTA0LTA1IDE1OjQ2OjAwICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9nc3RwaXBlbGluZS5jOiBXaGVuIHdlIGNyZWF0ZSBhIHBpcGVsaW5lIGJ1cywgaW5pdGlhbGx5IGNyZWF0ZSBpdCBpbiBmbHVzaGluZyBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2luaXQpOgotCSAgV2hlbiB3ZSBjcmVhdGUgYSBwaXBlbGluZSBidXMsIGluaXRpYWxseSBjcmVhdGUgaXQgaW4gZmx1c2hpbmcgbW9kZS4KLQkgIEZpeGVzIGxlYWtzIGluIGF0IGxlYXN0IG9uZSB0ZXN0LCBhbmQgbWFrZXMgYSBuZXcgcGlwZWxpbmUgd29yayB0aGUKLQkgIHNhbWUgYXMgb25lIHRoYXQgaGFzIGdvbmUgdG8gUkVBRFkgYW5kIHRoZW4gYmFjayB0byBOVUxMLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgVHlwbyBmaXggaW4gZG9jcy4KLQotMjAwNi0wNC0wNSAxNToxMjozOSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogVW5yZWYgYSBwYWQgd2UgcmVmZmVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVW5yZWYgYSBwYWQgd2UgcmVmZmVkLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIFVucmVmIGJpbnMKLQotMjAwNi0wNC0wNSAxMzoxODoyOSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0cXVlcnkuYzogRml4IGxlYWtpbmcgR1ZhbHVlcyBpbiBxdWVyaWVzLCBhcyBzaG93biBieSB2YWxncmluZC90ZXN0c3VpdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfc2V0X2Zvcm1hdHMpLAotCSAgKGdzdF9xdWVyeV9zZXRfZm9ybWF0c3YpOgotCSAgRml4IGxlYWtpbmcgR1ZhbHVlcyBpbiBxdWVyaWVzLCBhcyBzaG93biBieSB2YWxncmluZC90ZXN0c3VpdGUuCi0KLTIwMDYtMDQtMDUgMTI6MTE6MjAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiBGaXggYSB2YXJpZXR5IG9mIG1lbWxlYWtzIGluIHNpbmtzIGNoZWNrLCB3aGljaCBhcmUgb25seSBzb21ldGltZXMgc2hvd24gYnkgcnVubmluZyB0aGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IGEgdmFyaWV0eSBvZiBtZW1sZWFrcyBpbiBzaW5rcyBjaGVjaywgd2hpY2ggYXJlIG9ubHkgc29tZXRpbWVzCi0JICBzaG93biBieSBydW5uaW5nIHRoZSB0ZXN0cyB1bmRlciB2YWxncmluZCAod2VpcmQ/KS4KLQotMjAwNi0wNC0wNSAxMTowNDoxOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvdmVyc2lvbi5lbnRpdGllcy5pbjogRml4IHRoZSBzdWJzdGl0dXRlZCBlbnRpdHkgbmFtZSBhZnRlciB0aG9tYXMnIGNoYW5nZXMgb24gdGhlIHdlZWtlbmQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy92ZXJzaW9uLmVudGl0aWVzLmluOgotCSAgRml4IHRoZSBzdWJzdGl0dXRlZCBlbnRpdHkgbmFtZSBhZnRlciB0aG9tYXMnIGNoYW5nZXMgb24gdGhlCi0JICB3ZWVrZW5kLgotCi0yMDA2LTA0LTA1IDEwOjMxOjIwICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBnc3QvZ3N0aW5mby5jOiBVc2UgcHJpbnRmIGluc3RlYWQgb2YKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNC0wNSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBnc3QvZ3N0aW5mby5jOiAoX19nc3RfaW5fdmFsZ3JpbmQpOiBVc2UgcHJpbnRmIGluc3RlYWQgb2YKLQkgIFZBTEdSSU5EX1BSSU5URgotCi0yMDA2LTA0LTA1IDEwOjI2OjI5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyk6IE1vcmUgZGVidWcuIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDQtMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyk6IE1vcmUgZGVidWcuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfZXZlbnRmdW5jKTogV2hlbiByZXNldHRpbmcgb3VyIHNlZ21lbnQgb24KLQkgIEZMVVNIX1NUT1AsIGFsc28gdXBkYXRlIHRoZSBmbGFnIHNheWluZyB3ZSBoYXZlbid0IHNlZW4gYQotCSAgbmV3c2VnbWVudC4KLQotMjAwNi0wNC0wNCAxODowMjowNyArMDAwMCAgUGFvbG8gQm9yZWxsaSA8cGJvcmVsbGlAa2F0YW1haWwuY29tPgotCi0JICBnc3QvZ3N0cGx1Z2luLmM6IG1pbm9yIGNsZWFuLXVwczogR19ERUZJTkVfVFlQRSBhbHJlYWR5IHRha2VzIGNhcmUgb2YgdGhlIHBhcmVudF9jbGFzcyBzdHVmZiwgbm8gbmVlZCB0byBkbyBpdCB0d2ljZS4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFBhb2xvIEJvcmVsbGkgIDxwYm9yZWxsaSBhdCBrYXRhbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2ZpbmFsaXplKSwgKGdzdF9wbHVnaW5fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3BsdWdpbl9jaGVja19saWNlbnNlKToKLQkgIG1pbm9yIGNsZWFuLXVwczogR19ERUZJTkVfVFlQRSBhbHJlYWR5IHRha2VzIGNhcmUgb2YgdGhlCi0JICBwYXJlbnRfY2xhc3Mgc3R1ZmYsIG5vIG5lZWQgdG8gZG8gaXQgdHdpY2UuIE1hcmsgYXJyYXkgb2YKLQkgIGxpY2Vuc2Ugc3RyaW5ncyBhcyBjb25zdGFudC4gKCMzMzcxMDMpCi0KLTIwMDYtMDQtMDQgMTc6NTQ6MzAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogRnJlZSB0aGUgcmlnaHQgcGx1Z2luIGxpc3Q7IGZpeGVzIGEgbWVtb3J5IGxlYWsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfbGlzdCk6Ci0JICBGcmVlIHRoZSByaWdodCBwbHVnaW4gbGlzdDsgZml4ZXMgYSBtZW1vcnkgbGVhay4KLQotMjAwNi0wNC0wNCAxNTo0NTozNiArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBEb24ndCBlcnJvciBvdXQgb24gZW1wdHkgYnVmZmVycyAoIzMzNjk0NSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzICA8bWFuYXV3IGF0IHNreW5ldCBkb3QgYmU+Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfcmVuZGVyKToKLQkgIERvbid0IGVycm9yIG91dCBvbiBlbXB0eSBidWZmZXJzICgjMzM2OTQ1KS4KLQotMjAwNi0wNC0wNCAxNDo1ODo1MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4gTWFrZSBCYXNlU2luayBhbmQgQmFzZVNyYyBkb2NzIGNvbnRhaW4gdGhlIGNsYXNzIHN0cnVjdHVyZSBzbyB0aGF0IHBlb3BsZSBjYW4gYWN0dWFsbHkgc2VlIHRoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuIE1ha2UgQmFzZVNpbmsgYW5kIEJhc2VTcmMgZG9jcyBjb250YWluIHRoZQotCSAgY2xhc3Mgc3RydWN0dXJlIHNvIHRoYXQgcGVvcGxlIGNhbiBhY3R1YWxseSBzZWUgdGhlIHByb3RvdHlwZXMgZm9yCi0JICB2aXJ0dWFsIGZ1bmN0aW9ucyB0aGV5J3JlIHN1cHBvc2VkIHRvIGJlIG92ZXJyaWRpbmcuCi0KLTIwMDYtMDQtMDQgMDg6NTU6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IE1vcmUgZGVidWcgaW5mbzsgd2hlbiBza2lwcGluZyB0eXBlZmluZGluZywgc2VuZCBjYWNoZWQgZXZlbnRzIGluIGFsbCBjYXNlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbik6Ci0JICBNb3JlIGRlYnVnIGluZm87IHdoZW4gc2tpcHBpbmcgdHlwZWZpbmRpbmcsIHNlbmQgY2FjaGVkCi0JICBldmVudHMgaW4gYWxsIGNhc2VzLgotCi0yMDA2LTA0LTAzIDE3OjA1OjMxICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkgIEZpeCB0eXBvIGluIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeCB0eXBvIGluIGRvY3MuCi0KLTIwMDYtMDQtMDMgMDg6NTk6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICB1cGRhdGUgd2luMzIgY29tbW9uIGRpcjsgdXBkYXRlIHVuaW5zdGFsbGVkIHNjcmlwdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgd2luMzIgY29tbW9uIGRpcjsgdXBkYXRlIHVuaW5zdGFsbGVkIHNjcmlwdAotCi0yMDA2LTA0LTAxIDE1OjMwOjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogY29uZmlndXJlLmFjOgotCSAgZGlzYWJsZSB1c2Ugb2YgQVNfTElCVE9PTF9UQUdTLCBpdCBkb2Vzbid0IHdvcmsgY29ycmVjdGx5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRpc2FibGUgdXNlIG9mIEFTX0xJQlRPT0xfVEFHUywgaXQgZG9lc24ndCB3b3JrIGNvcnJlY3RseQotCi0yMDA2LTA0LTAxIDA5OjQxOjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiB1c2UgbmV3IEFTX1ZFUlNJT04gYW5kIEFTX05BTk8gbWFjcm9zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgdXNlIG5ldyBBU19WRVJTSU9OIGFuZCBBU19OQU5PIG1hY3JvcwotCSAgKiBnc3QvZ3N0LWkxOG4tbGliLmg6Ci0JICAqIGdzdC9nc3QuYzoKLQkgICogZ3N0L2dzdGVycm9yLmM6Ci0JICAqIGdzdC9nc3R2ZXJzaW9uLmguaW46Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgdXBkYXRlIGFjY29yZGluZ2x5Ci0KLTIwMDYtMDMtMzEgMTU6MjY6MDQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogRG8gbm90IHR5cGVmaW5kIGNvbnRlbnQgaWYgdGhlIGJ1ZmZlcnMgYWxyZWFkeSBoYXZlIGNhcHMuIGFuZCB0aGUgcmlnaHQgdGhpbmcgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pOgotCSAgRG8gbm90IHR5cGVmaW5kIGNvbnRlbnQgaWYgdGhlIGJ1ZmZlcnMgYWxyZWFkeSBoYXZlIGNhcHMuCi0JICBOZWNjZXNhcnkgZm9yIGljeWRlbXV4ICgjMzMzNjU3KSwgYW5kIHRoZSByaWdodCB0aGluZyB0byBkbyBhbnl3YXkuCi0KLTIwMDYtMDMtMzAgMTY6MzY6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogTW9yZSBRb1MgbWVhc3VyZW1lbnRzIGFzIGRlc2NyaWJlZCBpbiB0aGUgZGVzaWduIGRvYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2luaXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfZmluYWxpemUpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQpLAotCSAgKGdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKLQkgIChnc3RfYmFzZV9zaW5rX3JlY29yZF9xb3Nfb2JzZXJ2YXRpb24pLAotCSAgKGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9xb3MpLCAoZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MpLAotCSAgKGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUpLCAoZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBNb3JlIFFvUyBtZWFzdXJlbWVudHMgYXMgZGVzY3JpYmVkIGluIHRoZSBkZXNpZ24gZG9jLgotCSAgR2V0IHJpZCBvZiByaW5nYnVmZmVyIHdpdGggb2JzZXJ2YXRpb25zLCBydW5uaW5nIGF2ZXJhZ2UgaXMKLQkgIG1vcmUgc2ltcGxlIGFuZCBlcXVhbGx5IGdvb2QuCi0JICBDYWxjdWxhdGVzIHZhbGlkIHByb3BvcnRpb24gbm93LgotCSAgQWRkZWQgYmVnaW5uaW5nIG9mIGZsb29kIG1lYXN1cmVtZW50LgotCi0yMDA2LTAzLTI5IDEzOjQ1OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBTbWFsbCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGFkZGl0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQ6Ci0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgU21hbGwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBhZGRpdGlvbnMuCi0KLTIwMDYtMDMtMjkgMTM6Mzk6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBQZXJmb3JtIHRoZSBFT1MgbG9naWMgd2hlbiB3ZSByZWFjaCB0aGUgc2VnbWVudCBzdG9wIHBvc2l0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2ZpbmFsaXplKSwKLQkgIChnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCksIChnc3RfYmFzZV9zcmNfbG9vcCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBQZXJmb3JtIHRoZSBFT1MgbG9naWMgd2hlbiB3ZSByZWFjaCB0aGUgc2VnbWVudCBzdG9wIHBvc2l0aW9uLgotCSAgRml4IGNvbXBpbGF0aW9uIG9uIGdjYzQuMQotCi0yMDA2LTAzLTI5IDExOjAyOjMzICswMDAwICBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkubXlvaGFuZW5Abm9raWEuY29tPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLio6IEluIHF1ZXVlLCB3aGVuIEVPUyBpcyByZWNlaXZlZCwgaWYgbWluaW11bSB0aHJlc2hvbGQgPiBtYXhfc2l6ZSAtIGN1cnJlbnRfbGV2ZWwsIHRoZXJlIGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnkgVG9tbWkgTXnDtmjDpG5lbiA8ZXh0LXRvbW1pIGRvdCBteW9oYW5lbiBhdCBub2tpYSBkb3QgY29tPgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCksCi0JICAoZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCksIChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9xdWV1ZV9zZXRfcHJvcGVydHkpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JICBJbiBxdWV1ZSwgd2hlbiBFT1MgaXMgcmVjZWl2ZWQsIGlmIG1pbmltdW0gdGhyZXNob2xkID4gbWF4X3NpemUgLQotCSAgY3VycmVudF9sZXZlbCwgdGhlcmUgaXMgY2hhbmNlIHRoYXQgcXVldWUgYmxvY2tzIGZvcmV2ZXIgaW4gY29uZGl0aW9uYWwgaXRlbQotCSAgZGVsIHdhaXQuIFRoaXMgaXMgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IGVtcHRpZWQgY29tcGxldGVseSBkdWUgdG8gbWluaW11bQotCSAgdGhyZXNob2xkLgotCSAgSGVyZSBpcyBhbm90aGVyIGFwcHJvYWNoLiBJbnN0ZWFkIG9mIHNldHRpbmcgY3VyX2xldmVscyB0byBtYXggaW4gRU9TLCBqdXN0Ci0JICB6ZXJvIGFsbCBtaW5pbXVtIHRocmVzaG9sZCBsZXZlbHMuIFRoaXMgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHF1ZXVlIGdpdmVzIG91dAotCSAgYWxsIGRhdGEuIFdoZW4gZ29pbmcgdG8gUkVBRFkgKHN0b3ApIHN0YXRlLCBqdXN0IHJlc2V0IHRoZSBvcmlnaW5hbCBtaW5pbXVtCi0JICB0aHJlc2hvbGQgbGV2ZWxzLgotCSAgRml4ZXMgIzMzNjMzNi4KLQotMjAwNi0wMy0yOSAxMDozMzoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuKjogV2hlbiB0eXBlZmluZGluZyBpcyBkb25lIGluIHB1c2ggbW9kZSwgd2Ugc2hvdWxkIGNhY2hlIGV2ZW50cyB3ZSByZWNlaXZlIGR1cmluLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKHN0b3BfdHlwZWZpbmRpbmcpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zZW5kX2NhY2hlZF9ldmVudHMpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgotCSAgV2hlbiB0eXBlZmluZGluZyBpcyBkb25lIGluIHB1c2ggbW9kZSwgd2Ugc2hvdWxkIGNhY2hlCi0JICBldmVudHMgd2UgcmVjZWl2ZSBkdXJpbmcgdHlwZWZpbmRpbmcgaW5zdGVhZCBvZiBqdXN0Ci0JICBkcm9wcGluZyB0aGVtIChlLmcuIG5ld3NlZ21lbnQsIGN1c3RvbSBldmVudHMgZnJvbQotCSAgZHZkcmVhZHNyYyBldGMuKSBhbmQgdGhlbiBzZW5kIHRoZW0gb3V0IG9uY2Ugd2UndmUKLQkgIGRldGVybWluZWQgdGhlIHR5cGUgb2YgdGhlIHN0cmVhbSAoYW5kIGRlY29kZWJpbgotCSAgaGFzIGhhZCBhIGNoYW5jZSB0byBwbHVnIGluIGEgZGVjb2Rlci9kZW11eGVyKS4KLQotMjAwNi0wMy0yNyAxODozODo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OiBGaXJzdCBRb1MgaWRlYXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0OgotCSAgRmlyc3QgUW9TIGlkZWFzLgotCi0yMDA2LTAzLTI3IDExOjQ4OjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogSGFuZGxlIGVsZW1lbnQgc2VlayBjb3JyZWN0bHkgd2hlbiB3ZSBhcmUgc3RyZWFtaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBJbnNwaXJlZCBieSBhIHBhdGNoIG9mOiBMdXR6IE11ZWxsZXIgPGx1dHogYXQgdG9wZnJvc2UgZG90IGRlPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19maW5hbGl6ZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX3NlbmRfZXZlbnQpLCAoZ3N0X2Jhc2Vfc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBIYW5kbGUgZWxlbWVudCBzZWVrIGNvcnJlY3RseSB3aGVuIHdlIGFyZSBzdHJlYW1pbmcuCi0JICBGaXhlcyAjMzI2OTk4LgotCi0yMDA2LTAzLTI0IDE4OjM4OjEyICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDogU2V0IHVwIExEX0xJQlJBUllfUEFUSCB0byBwb2ludCBhdCBhbGwgdGhlIGdzdHJlYW1lciBsaWJzLiBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNvcnJlY3RseS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIFNldCB1cCBMRF9MSUJSQVJZX1BBVEggdG8gcG9pbnQgYXQgYWxsIHRoZSBnc3RyZWFtZXIgbGlicy4gVGhpcyB3aWxsCi0JICBhbGxvdyB5b3UgdG8gY29ycmVjdGx5IHJ1biBpbnRhbGxlZCBhcHBsaWNhdGlvbnMgYnVpbHQgYWdhaW5zdCBvbGQgICAgICAgICAgIGNvcmUsIHVzaW5nIHBsdWdpbnMgdGhhdCByZXF1aXJlIHVwZGF0ZWQgY29yZSAoZS5nLiBydW5uaW5nCi0JICBpbnN0YWxsZWQgdG90ZW0gYWdhaW5zdCBhIGZ1bGwgdW5pbnN0YWxsZWQgZ3N0cmVhbWVyIHN0YWNrKQotCi0yMDA2LTAzLTI0IDE3OjI5OjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSAgYWRkIEFQSTogbWFya2VyIGluIENoYW5nZUxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgQVBJOiBtYXJrZXIgaW4gQ2hhbmdlTG9nCi0KLTIwMDYtMDMtMjQgMTc6MTA6NDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBtb3JlIGRlYnVnIGRldGFpbHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2lzX2NvbGxlY3RlZCk6Ci0JICBtb3JlIGRlYnVnIGRldGFpbHMKLQotMjAwNi0wMy0yNCAxMTowMjo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogUmVhcnJhbmdlIHRoZSBvcmRlciBvZiB0aGUgbWV0aG9kcyBzbyB0aGF0IHJlbGF0ZWQgbWV0aG9kcyBhcmUgZ3JvdXBlZCB0b2dldGhlciBpbiBzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIFJlYXJyYW5nZSB0aGUgb3JkZXIgb2YgdGhlIG1ldGhvZHMgc28gdGhhdCByZWxhdGVkIG1ldGhvZHMKLQkgIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIHNlY3Rpb25zLgotCi0yMDA2LTAzLTI0IDEwOjQ0OjE3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IExpdHRsZSBjbGFyaWZpY2F0aW9uIGluIHRoZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIExpdHRsZSBjbGFyaWZpY2F0aW9uIGluIHRoZSBkb2NzCi0KLTIwMDYtMDMtMjQgMTA6Mzg6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9SRUFETUU6IGZvcm1hdHRpbmcgZml4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9SRUFETUU6Ci0JICBmb3JtYXR0aW5nIGZpeAotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIEdTVF9FTEVNRU5UX0RFVEFJTFMgZm9ybWF0dGluZwotCi0yMDA2LTAzLTI0IDA5OjQ4OjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6IE9ubHkgYWRkIGZpZWxkcywgbm90IGluc2VydCBvciB3ZSBicmVhayBBQkkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgT25seSBhZGQgZmllbGRzLCBub3QgaW5zZXJ0IG9yIHdlIGJyZWFrIEFCSS4KLQotMjAwNi0wMy0yMyAxODo1MTowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgd2luMzIvY29tbW9uLzogVXBkYXRlLCBhZGQgcmVjZW50bHkgYWRkZWQgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBVcGRhdGUsIGFkZCByZWNlbnRseSBhZGRlZCBmdW5jdGlvbnMuCi0KLTIwMDYtMDMtMjMgMTg6NDU6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFQSTogYWRkIHNvbWUgbmV3IHV0aWxpdHkgZnVuY3Rpb25zOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhZF9xdWVyeV9wZWVyX3Bvc2l0aW9uKSwKLQkgIChnc3RfcGFkX3F1ZXJ5X3BlZXJfZHVyYXRpb24pLCAoZ3N0X3BhZF9xdWVyeV9wZWVyX2NvbnZlcnQpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFQSTogYWRkIHNvbWUgbmV3IHV0aWxpdHkgZnVuY3Rpb25zOgotCSAgLSBnc3RfcGFkX3F1ZXJ5X3BlZXJfcG9zaXRpb24KLQkgIC0gZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uCi0JICAtIGdzdF9wYWRfcXVlcnlfcGVlcl9jb252ZXJ0Ci0KLTIwMDYtMDMtMjMgMTY6MzI6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEZvcmdvdCB0byBtZW50aW9uIHRoZSBwcmV2aW91cyBjb21taXQgZml4ZWQgIzMyNjMxMQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGb3Jnb3QgdG8gbWVudGlvbiB0aGUgcHJldmlvdXMgY29tbWl0IGZpeGVkICMzMjYzMTEKLQotMjAwNi0wMy0yMyAxNjoyMDo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBEZWNvdXBsZSBtYXgtbGF0ZW5lc3MgYW5kIHRoZSBmYWN0IHRoYXQgUW9TIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQgd2l0aCBhIG5ldyBwcm9wZXJ0eSAoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2luaXQpLCAoZ3N0X2Jhc2Vfc2lua19maW5hbGl6ZSksCi0JICAoZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQpLCAoZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZCksCi0JICAoZ3N0X2Jhc2Vfc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2Vfc2lua19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpLAotCSAgKGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfYWRkX3Fvc19vYnNlcnZhdGlvbiksIChnc3RfYmFzZV9zaW5rX3NlbmRfcW9zKSwKLQkgIChnc3RfYmFzZV9zaW5rX3BlcmZvcm1fcW9zKSwgKGdzdF9iYXNlX3NpbmtfcmVzZXRfcW9zKSwKLQkgIChnc3RfYmFzZV9zaW5rX2lzX3Rvb19sYXRlKSwgKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX29iamVjdCksIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX2xhc3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uX3BhdXNlZCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBEZWNvdXBsZSBtYXgtbGF0ZW5lc3MgYW5kIHRoZSBmYWN0IHRoYXQgUW9TIG1lc3NhZ2VzIGFyZSBnZW5lcmF0ZWQKLQkgIHdpdGggYSBuZXcgcHJvcGVydHkgKHFvcykuCi0JICBBZGQgdm1ldGhvZCBzbyBzdWJjbGFzc2VzIGNhbiBiZSBub3RpZmllZCBvZiBBU1lOQyBwbGF5aW5nCi0JICBzdGF0ZSBjaGFuZ2VzLgotCSAgQ29sbGVjdCB0aW1lc3RhbXAgc3RhcnQgYW5kIHN0b3AgdG8gcmVwb3J0IGJldHRlciBjdXJyZW50Ci0JICBwb3NpdGlvbiBpbiBFT1MvUExBWUlORy9QQVVTRUQvUkVBRFkvTlVMTC4KLQkgIFJlZmFjdG9yIFFvUy9mcmFtZSBkcm9wcGluZyBhbmQgb3RoZXIgbWVhc3VyZW1lbnRzLgotCSAgQVBJOiBHc3RCYXNlU3JjOjpxb3MKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgQWRkZWQgUHJpdmF0ZSBzdHJ1Y3QuCi0JICBBUEk6IGdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkCi0JICBBUEk6IGdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQKLQotMjAwNi0wMy0yMyAxMTo1NDo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IElmIGNvbXBpbGluZyBhZ2FpbnN0IEdMaWItMi44IG9yIG5ld2VyLCB0cnkgdG8gcmVhZCB0aGUgcmVnaXN0cnkgZmlsZSB1c2luZyBHTWFwcGVkRmlsZSBmaXJzdCBiLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IChnc3RfcmVnaXN0cnlfeG1sX3JlYWRfY2FjaGUpOgotCSAgSWYgY29tcGlsaW5nIGFnYWluc3QgR0xpYi0yLjggb3IgbmV3ZXIsIHRyeSB0byByZWFkIHRoZQotCSAgcmVnaXN0cnkgZmlsZSB1c2luZyBHTWFwcGVkRmlsZSBmaXJzdCBiZWZvcmUgZmFsbGluZyBiYWNrCi0JICB0byBmb3BlbigpICsgZnJlYWQoKSAoIzMzMjE1MSkuCi0KLTIwMDYtMDMtMjIgMTg6MjU6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RpbmZvLmM6IERpc2FibGUgZGVidWdnaW5nIHVubGVzcyBleHBsaWNpdGx5IGFjdGl2YXRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5jOiAoZ3N0X2RlYnVnX3NldF9hY3RpdmUpLAotCSAgKGdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkKToKLQkgIERpc2FibGUgZGVidWdnaW5nIHVubGVzcyBleHBsaWNpdGx5IGFjdGl2YXRlZC4KLQkgIEZpeGVzICMzMzU0ODAuCi0KLTIwMDYtMDMtMjIgMTM6MTA6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IENsZWFudXAgdGhlIGVycm9yIGNhc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X2Rpc3Bvc2UpOgotCSAgQ2xlYW51cCB0aGUgZXJyb3IgY2FzZS4KLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9kaXNwb3NlKToKLQkgIHByaW50IGEgY3JpdGljYWwgd2hlbiBzb21lIG9iamVjdCB3YXMgZGlzcG9zZWQgd2l0aAotCSAgYSBwYXJlbnQsIGFsc28gcmV2aXZlIHRoZSBvYmplY3Qgc2luY2UgaXQgbWlnaHQKLQkgIGNyYXNoIHRoZSBwYXJlbnQuCi0KLTIwMDYtMDMtMjIgMDk6MDM6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbjogRml4IGFub3RoZXIgdHlwby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICBGaXggYW5vdGhlciB0eXBvLgotCi0yMDA2LTAzLTIxIDE5OjI3OjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZGlzYWJsZSBzb21lIHRlc3RzIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhIHJlZ2lzdHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGRpc2FibGUgc29tZSB0ZXN0cyB3aGVuIHdlIGRvbid0IGhhdmUgYSByZWdpc3RyeQotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsc19zdWl0ZSk6Ci0JICBkb24ndCBidWlsZCB0aGUgcGFydCB0aGF0IG5lZWRzIHBhcnNpbmcKLQotMjAwNi0wMy0yMSAxNzoyNToyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9NYWtlZmlsZS5hbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbQotCSAgKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkgIGZpeCAtLWRpc2FibGUtcGFyc2UgYnVpbGQKLQotMjAwNi0wMy0yMSAxNzoyNDozMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkgIHRoZSAuaW4gZmlsZSBpcyBpbiBjdnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdGhlIC5pbiBmaWxlIGlzIGluIGN2cwotCi0yMDA2LTAzLTIxIDE1OjQyOjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy9nc3QtZmVlZGJhY2suMS5pbjogRml4IHR5cG86IHMvZmVlYmFjay9mZWVkYmFjay8gKCMxMzM0OTQpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1mZWVkYmFjay4xLmluOgotCSAgRml4IHR5cG86IHMvZmVlYmFjay9mZWVkYmFjay8gKCMxMzM0OTQpLgotCi0yMDA2LTAzLTIxIDE1OjA0OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy86IEFkZCBGSUxFUyBzZWN0aW9uIGFuZCBjb3JyZWN0IGVudHJ5IGFib3V0IEdTVF9SRUdJU1RSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlICgjMTMzNDk1OyAjMTMzNDk0KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9NYWtlZmlsZS5hbToKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgQWRkIEZJTEVTIHNlY3Rpb24gYW5kIGNvcnJlY3QgZW50cnkgYWJvdXQgR1NUX1JFR0lTVFJZX1BBVEgKLQkgIGVudmlyb25tZW50IHZhcmlhYmxlICgjMTMzNDk1OyAjMTMzNDk0KS4KLQotMjAwNi0wMy0yMSAxNDo0MTo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdG9vbHMvOiBSZW1vdmUgZ3N0LW1kNXN1bSBhbmQgbWFuIHBhZ2UgKHRoZSBtZDVzaW5rIGVsZW1lbnQgcmVxdWlyZWQgd2FzIHJlbW92ZWQgYWdlcyBhZ28pCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvTWFrZWZpbGUuYW06Ci0JICAqIHRvb2xzL2dzdC1tZDVzdW0uMS5pbjoKLQkgICogdG9vbHMvZ3N0LW1kNXN1bS5jOgotCSAgUmVtb3ZlIGdzdC1tZDVzdW0gYW5kIG1hbiBwYWdlICh0aGUgbWQ1c2luayBlbGVtZW50Ci0JICByZXF1aXJlZCB3YXMgcmVtb3ZlZCBhZ2VzIGFnbykKLQotMjAwNi0wMy0yMSAxNDoyNDo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBNYWtlIHN1cmUgdGhhdCBzdHJpbmcgZmllbGRzIGluIHN0cnVjdHVyZXMvdGFnbGlzdHMgY29udGFpbiB2YWxpZCBVVEYtOCAtIHdlIGRvbid0IHdhbnQgdG8gcGFzcyByLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUpOgotCSAgTWFrZSBzdXJlIHRoYXQgc3RyaW5nIGZpZWxkcyBpbiBzdHJ1Y3R1cmVzL3RhZ2xpc3RzCi0JICBjb250YWluIHZhbGlkIFVURi04IC0gd2UgZG9uJ3Qgd2FudCB0byBwYXNzIHJ1YmJpc2ggdG8KLQkgIGFwcGxpY2F0aW9ucyBiZWNhdXNlIG9mIGEgYnVnZ3kgcGx1Z2luIChjcC4gIzMzNDE2NykuCi0KLTIwMDYtMDMtMjEgMTQ6MTQ6NDkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIFNlcmllcyBvZiBmaXhlcyBmb3IgZGVyZWZlcmVuY2VkIHBvaW50ZXJzIHRoYXQgZ2NjIDQuMSBjb21wbGFpbnMgYWJvdXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmlld2VkIGJ5OiA8ZGVsZXRlIGlmIG5vdCB1c2luZyBhIGJ1ZGR5PgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2Rpc3Bvc2UpLCAoZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMpLAotCSAgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2Rpc3Bvc2UpLCAoZ3N0X2Nsb2NrX3NldF9tYXN0ZXIpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrKSwgKGdzdF9lbGVtZW50X2Rpc3Bvc2UpLAotCSAgKGdzdF9lbGVtZW50X3NldF9idXNfZnVuYyk6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kaXNwb3NlKToKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF92YWx1ZV9zZXRfbWluaV9vYmplY3QpLAotCSAgKGdzdF92YWx1ZV90YWtlX21pbmlfb2JqZWN0KToKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfcGFkX3RlbXBsYXRlKToKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfZGlzcG9zZSksCi0JICAoZ3N0X3BpcGVsaW5lX3VzZV9jbG9jayksIChnc3RfcGlwZWxpbmVfYXV0b19jbG9jayk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfcG9wKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKToKLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9zZXRfcHJvcGVydHkpOgotCSAgU2VyaWVzIG9mIGZpeGVzIGZvciBkZXJlZmVyZW5jZWQgcG9pbnRlcnMgdGhhdCBnY2MgNC4xIGNvbXBsYWlucyBhYm91dC4KLQkgIEl0J3MgaW4gZmFjdCBhbGwgaXNzdWVzIHdpdGggZ3N0XypvYmplY3RfcmVwbGFjZSgpLgotCi0yMDA2LTAzLTIxIDEzOjU1OjQ0ICswMDAwICBMb8OvYyBNaW5pZXIgPGxvb2wuZ25vbWVAdmlhLmVjcC5mcj4KLQotCSAgcGtnY29uZmlnLzogVXNlIEBDSEVDS19MSUJTQCBoZXJlIGluc3RlYWQgb2YgaGFyZC1jb2RpbmcgLWxjaGVjayAoIzMzNDEwOSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBMb8OvYyBNaW5pZXIgIDxsb29sICsgZ25vbWUgYXQgdmlhIGRvdCBlY3AgZG90IGZyPgotCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluOgotCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjLmluOgotCSAgVXNlIEBDSEVDS19MSUJTQCBoZXJlIGluc3RlYWQgb2YgaGFyZC1jb2RpbmcgLWxjaGVjayAoIzMzNDEwOSkuCi0KLTIwMDYtMDMtMjEgMTM6NTA6NTIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC86IGdzdF9bYnVmZmVyfGV2ZW50fG1lc3NhZ2VdX3JlZigpIG1hY3JvcyBhcmUgcmVwbGFjZWQgYnkgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBiZWNhdXNlIGdjYy00LjEgd2lsbCBhYm91dCBpZi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBnc3RfW2J1ZmZlcnxldmVudHxtZXNzYWdlXV9yZWYoKSBtYWNyb3MgYXJlIHJlcGxhY2VkIGJ5IGEgc3RhdGljCi0JICBpbmxpbmUgZnVuY3Rpb25zIGJlY2F1c2UgZ2NjLTQuMSB3aWxsIGFib3V0IGlmIHRoZSByZXR1cm4gdmFsdWUKLQkgIGlzbid0IHVzZWQuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jOiAoZXZlbnRfcHJvYmUpOgotCSAgZ3N0X2V2ZW50X3JlZiBub3cgaGFzIHRvIGJlIGdpdmVuIGEgR3N0RXZlbnQqICwgZml4IGNoZWNrIGFjY29yZGluZ2x5LgotCi0yMDA2LTAzLTIwIDE2OjQ3OjM1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL3RtcGwvLmdpdGlnbm9yZToKLQkgIFJlbW92ZSBpcnJpdGF0aW5nIGZpbGUgdGhhdCBrZWVwcyBicmVha2luZyBteSBjaGVja291dHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmVtb3ZlIGlycml0YXRpbmcgZmlsZSB0aGF0IGtlZXBzIGJyZWFraW5nIG15IGNoZWNrb3V0cwotCi0yMDA2LTAzLTIwIDE2OjQ1OjE1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdHV0aWxzLmg6IEFkZCBHX1VOTElLRUxZIHRvIG91ciBib2lsZXJwbGF0ZSB0byBvcHRpbWlzZSB0aGUgJ2FscmVhZHkgcmVnaXN0ZXJlZCB0aGUgdHlwZScgY2FzZS4gKENsb3NlczogIzMzNTE5Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBBZGQgR19VTkxJS0VMWSB0byBvdXIgYm9pbGVycGxhdGUgdG8gb3B0aW1pc2UgdGhlICdhbHJlYWR5IHJlZ2lzdGVyZWQKLQkgIHRoZSB0eXBlJyBjYXNlLiAoQ2xvc2VzOiAjMzM1MTk1IGZvciBub3cpLiBJbiB0aGUgZnV0dXJlLCB3aGVuIHdlCi0JICBkZXBlbmQgb24gR0xpYiAyLjEwLCB3ZSBjb3VsZCBhbHNvIGludGVybiB0aGUgdHlwZSBuYW1lIHVzaW5nCi0JICBnX2ludGVybl9zdGF0aWNfc3RyaW5nKCkKLQotMjAwNi0wMy0yMCAxMDo1NjowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBQb3NpdGlvbiBxdWVyeSBzaG91bGQgYWxzbyB0YWtlIG1heCBvZiBhbGwgc3RyZWFtcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2hhbmRsZV9tZXNzYWdlX2Z1bmMpLAotCSAgKGJpbl9xdWVyeV9tYXhfaW5pdCksIChiaW5fcXVlcnlfcG9zaXRpb25fZm9sZCksCi0JICAoYmluX3F1ZXJ5X3Bvc2l0aW9uX2RvbmUpLCAoZ3N0X2Jpbl9xdWVyeSk6Ci0JICBQb3NpdGlvbiBxdWVyeSBzaG91bGQgYWxzbyB0YWtlIG1heCBvZiBhbGwgc3RyZWFtcy4KLQotMjAwNi0wMy0yMCAwOToyODo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IEZpeCBsZWFrcyBpbiBmYWtlc3JjLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mYWtlX3NyY19maW5hbGl6ZSk6Ci0JICBGaXggbGVha3MgaW4gZmFrZXNyYy4KLQkgICogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IGxlYWtzIGluIHRoZSB0ZXN0Y2FzZS4KLQotMjAwNi0wMy0xOSAyMTozOToyMSArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0X3ByaXZhdGUuaDogYWRkIHdpbjMyIHNwZWNpZmljIGltcG9ydCBkZWNvcmF0aW9uKF9fZGVjbHNwZWMoZGxsaW1wb3J0KSkgZm9yIGFsbCBleHRlcm4gR3N0RGVidWdDYXRlZ29yeSAqIHZhcmkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkgIGFkZCB3aW4zMiBzcGVjaWZpYyBpbXBvcnQgZGVjb3JhdGlvbihfX2RlY2xzcGVjKGRsbGltcG9ydCkpCi0JICBmb3IgYWxsIGV4dGVybiBHc3REZWJ1Z0NhdGVnb3J5ICogdmFyaWFibGVzCi0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIEFkZCBzb21lIGV4cG9ydHMsIHJlbW92ZSBlbXB0eSBsaW5lcwotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0ZGF0YXByb3RvY29sLmRlZjoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGRhdGFwcm90b2NvbC5kc3A6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RuZXQuZGVmOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0bmV0LmRzcDoKLQkgIG5ldyBwcm9qZWN0IGZpbGVzIGFuZCBleHBvcnRhdGlvbiBmaWxlcyBhZGRlZAotCi0yMDA2LTAzLTE5IDE2OjA1OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYzogVXNlIHByb3BlciByZXR1cm4gdmFsdWUgZm9yIHByb2JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jOiAoZW9zX2V2ZW50X2NvdW50ZXIpOgotCSAgVXNlIHByb3BlciByZXR1cm4gdmFsdWUgZm9yIHByb2JlLgotCi0yMDA2LTAzLTE3IDE5OjI3OjUxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IERvbid0IGxlYWsgYnVmZmVycywgY2FwcyBhbmQgcGFkcyBvbiBuZWdvdGlhdGlvbiBlcnJvcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksIChnc3RfcGFkX2FsbG9jX2J1ZmZlcl9mdWxsKSwKLQkgIChnc3RfcGFkX3B1c2gpOgotCSAgRG9uJ3QgbGVhayBidWZmZXJzLCBjYXBzIGFuZCBwYWRzIG9uIG5lZ290aWF0aW9uIGVycm9ycy4KLQotMjAwNi0wMy0xNiAxNTozMzo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2ZhcS86IEZhcSByZXZpZXcgYW5kIHVwZGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2ZhcS9jdnMueG1sOgotCSAgKiBkb2NzL2ZhcS9kZXBlbmRlbmNpZXMueG1sOgotCSAgKiBkb2NzL2ZhcS9kZXZlbG9waW5nLnhtbDoKLQkgICogZG9jcy9mYXEvZmFxLnhtbDoKLQkgICogZG9jcy9mYXEvZ2VuZXJhbC54bWw6Ci0JICAqIGRvY3MvZmFxL2dldHRpbmcueG1sOgotCSAgKiBkb2NzL2ZhcS9sZWdhbC54bWw6Ci0JICAqIGRvY3MvZmFxL3Ryb3VibGVzaG9vdGluZy54bWw6Ci0JICAqIGRvY3MvZmFxL3VzaW5nLnhtbDoKLQkgIEZhcSByZXZpZXcgYW5kIHVwZGF0ZS4KLQotMjAwNi0wMy0xNiAxMDoxODoyNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogRG9uJ3QgcG91bmQgdGhlIGNwdSB0byBwaWVjZXMgYnkgY2hlY2tpbmcgZ2V0X2NhcHMgd2hlbiBhY2NlcHRfY2FwcyBpcyBjYWxsZWQgd2l0aCB0aGUgc2FtZSBjYXBzIGFzIHRoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9hbGxvY19idWZmZXJfZnVsbCksCi0JICAoZ3N0X3BhZF9wdXNoKToKLQkgIERvbid0IHBvdW5kIHRoZSBjcHUgdG8gcGllY2VzIGJ5IGNoZWNraW5nIGdldF9jYXBzIHdoZW4gYWNjZXB0X2NhcHMKLQkgIGlzIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGNhcHMgYXMgdGhlIHBhZCBhbHJlYWR5IGhhcy4KLQkgIFVzZSBHU1RfREVCVUdfT0JKRUNUIHdoZW4gb3V0cHV0dGluZyBjYXBzIGNoYW5nZSBpbmZvcm1hdGlvbi4KLQotMjAwNi0wMy0xNSAyMDoxNzo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGNsb2NrLmM6IEZpeCBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2NsYXNzX2luaXQpOgotCSAgRml4IGRvY3MuCi0KLTIwMDYtMDMtMTUgMTY6Mjk6MDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLmg6IERvY3VtZW50YXRpb24gZml4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgIERvY3VtZW50YXRpb24gZml4LgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2luaXQpLCAoZ3N0X3BhZF9hY2NlcHRjYXBzX2RlZmF1bHQpLAotCSAgKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9jb25maWd1cmVfc2luayksCi0JICAoZ3N0X3BhZF9jb25maWd1cmVfc3JjKSwgKGdzdF9wYWRfY2hhaW4pLCAoZ3N0X3BhZF9wdXNoKToKLQkgIE1ha2UgdGhlIGRlZmF1bHQgYWNjZXB0Y2FwcyBiZWhhdmlvdXIgYmUgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZAotCSAgY2FwcyBhZ2FpbnN0IHRoZSBnc3RfcGFkX2dldF9jYXBzIG91dHB1dC4KLQkgIEVuc3VyZSB0aGF0IGdzdF9wYWRfYWNjZXB0X2NhcHMgaXMgdXNlZCB0byBjaGVjayBjYXBzIHdoZW4gYSBwYWQKLQkgIGRvZXNuJ3QgaGF2ZSBhIHNldGNhcHMgZnVuY3Rpb24sIHNvIHRoYXQgcGFkcyBhdXRvbWF0aWNhbGx5IHJlZnVzZQotCSAgY2FwcyB0aGF0IHRoZXkgZG9uJ3QgYWxsb3cgaW4gdGhlaXIgcGFkIHRlbXBsYXRlLiAoRml4ZXMgIzMzMjk4NikKLQkgIFdoZW4gYSBidWZmZXIgd2l0aCBhdHRhY2hlZCBjYXBzIGlzIHB1c2hlZCwgZW5zdXJlIHRoYXQgdGhlIHNvdXJjZQotCSAgcGFkIHJlY2VpdmVzIHRob3NlIGNhcHMgZXZlbiBpZiB0aGUgZWxlbWVudCBkaWRuJ3QgY2FsbAotCSAgZ3N0X3BhZF9zZXRfY2FwcyBmaXJzdC4KLQotMjAwNi0wMy0xNSAxNjoyMjoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6IEFkZCBzb21lIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBBZGQgc29tZSBkb2NzLgotCi0yMDA2LTAzLTE1IDE1OjU3OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB3aW4zMi9jb21tb24vOiBBZGQgYSB3aG9sZSBidW5jaCBvZiBtaXNzaW5nIGZ1bmN0aW9ucyAoIzMzNDQzNCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0Y29udHJvbGxlci5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgQWRkIGEgd2hvbGUgYnVuY2ggb2YgbWlzc2luZyBmdW5jdGlvbnMgKCMzMzQ0MzQpLgotCi0yMDA2LTAzLTE0IDE5OjM2OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEJldHRlciBkZWJ1ZyBpbmZvIHdoZW4gd2UgcmVjZWl2ZSBhIHNlZ21lbnQgZXZlbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jb25maWd1cmVfc2VnbWVudCksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyksIChnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2spLAotCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksIChnc3RfYmFzZV9zaW5rX2RvX3Fvcyk6Ci0JICBCZXR0ZXIgZGVidWcgaW5mbyB3aGVuIHdlIHJlY2VpdmUgYSBzZWdtZW50IGV2ZW50LgotCSAgUmVvcmdhbml6ZSBhIGJpdCBzbyB3ZSBjYW4gcGFzcyB0aGUgZ2V0X3RpbWVzKCkgcmVzdWx0cyBhcm91bmQuCi0JICBVc2UgdGhlIHNlZ21lbnQgZm9ybWF0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIHJ1bm5pbmcgdGltZS4KLQkgIERvbid0IGRvIFFvUyBpcyBzeW5jIGlzIGRpc2FibGVkIG9yIHdlIGhhdmUgbm8gY2xvY2sgb3IgdGhlCi0JICBlbGVtZW50IGRvZXMgbm90IHdhbnQgdXMgdG8gc3luYyB0byB0aGUgY2xvY2suCi0JICBEb24ndCBkcm9wIGJ1ZmZlcnMgaWYgUW9TIGlzIGRpc2FibGVkIGZvciBub3cuCi0KLTIwMDYtMDMtMTQgMTk6Mjg6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjbG9jay5jOiBNYXJrZWQgdGhlIHN0YXRzIHByb3BlcnR5IGFzIHVuaW1wbGVtZW50ZWQgc28gcGVvcGxlIGRvbid0IGdldCB3aWxkIGlkZWFzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2NsYXNzX2luaXQpLCAoZG9fbGluZWFyX3JlZ3Jlc3Npb24pOgotCSAgTWFya2VkIHRoZSBzdGF0cyBwcm9wZXJ0eSBhcyB1bmltcGxlbWVudGVkIHNvIHBlb3BsZSBkb24ndCBnZXQKLQkgIHdpbGQgaWRlYXMuCi0JICBBZGQgZGVidWcgbWVzc2FnZSB3aGVuIHJlZ3Jlc3Npb24gZ29lcyB3cm9uZy4KLQkgIEFkZGVkIHNvbWUgbW9yZSBkb2NzLgotCi0yMDA2LTAzLTE0IDE5OjI2OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0c2VnbWVudC5jOiBSZXR1cm4gY29ycmVjdCByZXR1cm4gdHlwZSBpbiBjYXNlIG9mIGVycm9ycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpOgotCSAgUmV0dXJuIGNvcnJlY3QgcmV0dXJuIHR5cGUgaW4gY2FzZSBvZiBlcnJvcnMuCi0KLTIwMDYtMDMtMTQgMTk6MTY6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3Rmb3JtYXQuYzogRG9uJ3Qgc2VnZmF1bHQgb24gaW52YWxpZCBmb3JtYXRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3Rmb3JtYXQuYzogKGdzdF9mb3JtYXRfZ2V0X25hbWUpLCAoZ3N0X2Zvcm1hdF90b19xdWFyayk6Ci0JICBEb24ndCBzZWdmYXVsdCBvbiBpbnZhbGlkIGZvcm1hdHMuCi0KLTIwMDYtMDMtMTQgMTg6MjU6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQ2FuJ3QgdXNlIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpIHdoZW4gdGhlIHNlZ21lbnQgaXMgbm90IGluIEdTVF9USU1FX0ZPUk1BVCAobGlrZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMpOgotCSAgQ2FuJ3QgdXNlIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpIHdoZW4gdGhlIHNlZ21lbnQKLQkgIGlzIG5vdCBpbiBHU1RfVElNRV9GT1JNQVQgKGxpa2Ugd2l0aCBmaWxlc2luaywgZm9yIGV4YW1wbGUpLgotCSAgU3RvcHMgZmxhYyBlbmNvZGluZyBwaXBlbGluZXMgZnJvbSBzcGV3aW5nIGNyaXRpY2FsIHdhcm5pbmdzCi0JICBhdCBFT1MgKCMzMzEyNDgpLgotCi0yMDA2LTAzLTE0IDE2OjMyOjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGlwZWxpbmUuYzogQWRkICdTaW5jZTogMC4xMC41JyB0byBndGstZG9jIGJsdXJiIGZvciBhZGRlZCBwcm9wZXJ0eS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KToKLQkgIEFkZCAnU2luY2U6IDAuMTAuNScgdG8gZ3RrLWRvYyBibHVyYiBmb3IgYWRkZWQgcHJvcGVydHkuCi0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCk6Ci0JICBEb24ndCB0cnkgdG8gdHlwZWZpbmQgZW1wdHkgc3RyZWFtcy4KLQotMjAwNi0wMy0xNCAxMToxODowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBTZXBhcmF0ZSBRb1MgY2FsY3VsYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3Fvcyk6Ci0JICBTZXBhcmF0ZSBRb1MgY2FsY3VsYXRpb24uCi0JICBPbmx5IGRyb3AgYnVmZmVycyB3aGVuIGxhdGVuZXNzIGlzIGJpZ2dlciB0aGFuIHRoZQotCSAgZHVyYXRpb24gb2YgdGhlIGJ1ZmZlci4KLQotMjAwNi0wMy0xMyAxNToxNzo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBpcGVsaW5lLmM6IERvbid0IGRlYWRsb2NrIHdoZW4gcmVhZGluZyBwcm9wZXJ0aWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3BpcGVsaW5lX2dldF9wcm9wZXJ0eSksIChkb19waXBlbGluZV9zZWVrKSwKLQkgIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwgKGdzdF9waXBlbGluZV9zZXRfZGVsYXkpLAotCSAgKGdzdF9waXBlbGluZV9nZXRfZGVsYXkpOgotCSAgRG9uJ3QgZGVhZGxvY2sgd2hlbiByZWFkaW5nIHByb3BlcnRpZXMuCi0KLTIwMDYtMDMtMTMgMTE6Mjc6NTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBNYWtlIGJhc2V0cmFuc2Zvcm0gdmlydHVhbCBtZXRob2QgZm9yIHNyYyBldmVudHMgdG9vLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudCksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfZXZlbnRmdW5jKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2V2ZW50KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfZXZlbnRmdW5jKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciksIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3MpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZCk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgTWFrZSBiYXNldHJhbnNmb3JtIHZpcnR1YWwgbWV0aG9kIGZvciBzcmMgZXZlbnRzIHRvby4KLQkgIEhhbmRsZSBRT1MgaW4gYmFzZXRyYW5zZm9ybS4KLQkgIEFQSTogZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3MKLQkgIEFQSTogZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZAotCSAgQVBJOiBnc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWQKLQotMjAwNi0wMy0xMyAxMToxNjo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBTbWFsbCBjbGVhbnVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2luaXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyk6Ci0JICBTbWFsbCBjbGVhbnVwcy4KLQkgIFVzZSBRT1MgZGVidWcgY2F0ZWdvcnkuCi0KLTIwMDYtMDMtMTMgMTE6MTE6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogVmVyeSBzbWFsbCBkb2MgdXBkYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIFZlcnkgc21hbGwgZG9jIHVwZGF0ZS4KLQotMjAwNi0wMy0xMyAxMTowODoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogQWRkZWQgUU9TIGRlYnVnIGNhdGVnb3J5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICAqIGdzdC9nc3RpbmZvLmM6IChfZ3N0X2RlYnVnX2luaXQpOgotCSAgQWRkZWQgUU9TIGRlYnVnIGNhdGVnb3J5Ci0KLTIwMDYtMDMtMTMgMTE6MDQ6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fYnVzX2hhbmRsZXIpLCAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKLQkgICogZ3N0L2dzdGJpbi5oOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0YnVzLmg6Ci0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSk6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6Ci0JICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCi0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2dldF90eXBlKSwKLQkgIChnc3RfcGlwZWxpbmVfY2xhc3NfaW5pdCksIChnc3RfcGlwZWxpbmVfaW5pdCksCi0JICAoZ3N0X3BpcGVsaW5lX2Rpc3Bvc2UpLCAoZ3N0X3BpcGVsaW5lX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3BpcGVsaW5lX2dldF9wcm9wZXJ0eSksIChkb19waXBlbGluZV9zZWVrKSwKLQkgIChnc3RfcGlwZWxpbmVfc2VuZF9ldmVudCksIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcGlwZWxpbmVfcHJvdmlkZV9jbG9ja19mdW5jKSwgKGdzdF9waXBlbGluZV9zZXRfZGVsYXkpLAotCSAgKGdzdF9waXBlbGluZV9nZXRfZGVsYXkpOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkgIEFkZGVkIG1ldGhvZHMgZm9yIHNldHRpbmcgdGhlIGRlbGF5LgotCSAgQVBJOiBnc3RfcGlwZWxpbmVfc2V0X2RlbGF5Ci0JICBBUEk6IGdzdF9waXBlbGluZV9nZXRfZGVsYXkKLQkgIEFkZCBwaXBlbGluZSBkZWJ1ZyBjYXRlZ29yeQotCSAgVmFyaW91cyBjbGVhbnVwcy4KLQkgIFVwZGF0ZWQgZG9jcy4KLQkgIERvbid0IHJlc2V0IHN0cmVhbSB0aW1lIHdoZW4gc2VlayBmYWlsZWQuCi0KLTIwMDYtMDMtMTMgMTA6MzI6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduLzogRG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zdHJlYW1zLnR4dDoKLQkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KLQotMjAwNi0wMy0xMiAyMDo0NDo0NiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9nc3R0YWdsaXN0LmM6IEZpeCBydWJiaXNoIGRvY3MgdGhhdCBhcmUgZW5jb3VyYWdpbmcgdXMgdG8gbGVhayBzdHJpbmdzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDMtMTIgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzogRml4IHJ1YmJpc2ggZG9jcyB0aGF0IGFyZSBlbmNvdXJhZ2luZwotCSAgdXMgdG8gbGVhayBzdHJpbmdzLi4uCi0KLTIwMDYtMDMtMTIgMjA6NDA6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IGZpeCBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgZml4IGRvY3MKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgdXBkYXRlCi0KLTIwMDYtMDMtMTIgMTQ6MzI6MzcgKzAwMDAgIEp1bGlvIE0uIE1lcmlubyBWaWRhbCA8am1tdkBuZXRic2Qub3JnPgotCi0JICBjb25maWd1cmUuYWM6IERvbid0IGNoZWNrIGZvciBsaWJnbm9tZXVpIChsZWZ0b3ZlciBmcm9tIG9sZCBleGFtcGxlcyB0aGF0IGFyZW4ndCBidWlsdCBvciBkaXN0ZWQgYW55IGxvbmdlcikgKCMzMzQzMDMpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSnVsaW8gTS4gTWVyaW5vIFZpZGFsIDxqbW12IGF0IG5ldGJzZCBvcmc+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIERvbid0IGNoZWNrIGZvciBsaWJnbm9tZXVpIChsZWZ0b3ZlciBmcm9tIG9sZCBleGFtcGxlcwotCSAgdGhhdCBhcmVuJ3QgYnVpbHQgb3IgZGlzdGVkIGFueSBsb25nZXIpICgjMzM0MzAzKS4KLQotMjAwNi0wMy0xMSAxMzowMjoyOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IEVtaXQgUkVTT1VSQ0VfTk9fU1BBQ0VfTEVGVCBlcnJvciBoZXJlIGFzIHdlbGwgd2hlbiB0aGVyZSdzIG5vIHNwYWNlIGxlZnQgb24gdGhlIGRldmljZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfcmVuZGVyKToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgotCSAgRW1pdCBSRVNPVVJDRV9OT19TUEFDRV9MRUZUIGVycm9yIGhlcmUgYXMgd2VsbCB3aGVuCi0JICB0aGVyZSdzIG5vIHNwYWNlIGxlZnQgb24gdGhlIGRldmljZS4KLQotMjAwNi0wMy0xMCAyMzo0NDowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGNsb2NrLmg6IEZpeCBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCBzaWduZWRuZXNzIGlzc3VlcyAtIHdlIG5lZWQgdG8gY2FzdCB0aGUgaW5wdXQgdG8gR3N0Q2xvY2tUaW1lIGJlZm9yZSBjb21wLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBGaXggR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgc2lnbmVkbmVzcyBpc3N1ZXMgLSB3ZSBuZWVkCi0JICB0byBjYXN0IHRoZSBpbnB1dCB0byBHc3RDbG9ja1RpbWUgYmVmb3JlIGNvbXBhcmluZyB3aXRoCi0JICBhbm90aGVyIEdzdENsb2NrVGltZSB2YWx1ZS4KLQotMjAwNi0wMy0xMCAxOToxMjowMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGxvZyB3aGF0IHdlJ3JlIHdhaXRpbmcgb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbG9nIHdoYXQgd2UncmUgd2FpdGluZyBvbgotCi0yMDA2LTAzLTEwIDE5OjExOjM0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBoZWFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gaGVhZAotCi09PT0gcmVsZWFzZSAwLjEwLjQgPT09Ci0KLTIwMDYtMDMtMTAgMTk6MDM6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvbWFudWFsL1JFQURNRToKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWluZGV4ZXJzLnhtbDoKLQkqIGRvY3MvdXBsb2FkLm1hazoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHJlbGVhc2luZyAwLjEwLjQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVsZWFzaW5nIDAuMTAuNAotCi0yMDA2LTAzLTEwIDE1OjMwOjI3ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogRml4IGRvY3MgZm9yIGRhdGFwcm9jb3RvbCB0byBub3QgZ2V0IHRoZSByZXR1cm4gdHlwZXMgY29tcGxldGVseSB3cm9uZyBmb3IgYSBmZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKLQkgIEZpeCBkb2NzIGZvciBkYXRhcHJvY290b2wgdG8gbm90IGdldCB0aGUgcmV0dXJuIHR5cGVzIGNvbXBsZXRlbHkKLQkgIHdyb25nIGZvciBhIGZldyBmdW5jdGlvbnMuCi0KLTIwMDYtMDMtMDkgMTk6MDA6MjEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgcHJlcmVsZWFzaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHByZXJlbGVhc2luZwotCi0yMDA2LTAzLTA5IDE2OjUzOjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBZGQgbmV3IEFQSTogZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cygpIGFuZCBnc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzKCkgdG8gZGlzYWJsZSBhdXRvbWF0aWMgZmx1c2hpbmcgb2YuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwKLQkgIChnc3RfcGlwZWxpbmVfaW5pdCksIChnc3RfcGlwZWxpbmVfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcGlwZWxpbmVfZ2V0X3Byb3BlcnR5KSwgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMpLAotCSAgKGdzdF9waXBlbGluZV9nZXRfYXV0b19mbHVzaF9idXMpOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkgIEFkZCBuZXcgQVBJOiBnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzKCkgYW5kCi0JICBnc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzKCkgdG8gZGlzYWJsZSBhdXRvbWF0aWMKLQkgIGZsdXNoaW5nIG9mIHRoZSBwaXBlbGluZSdzIEdzdEJ1cyB3aGVuIGdvaW5nIGZyb20gUkVBRFkKLQkgIHRvIE5VTEwgc3RhdGUgKCMzMzIwNDUpLgotCi0yMDA2LTAzLTA5IDEyOjA4OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBZGQgbmV3IEFQSTogZ3N0X3VyaV9oYXNfcHJvdG9jb2woKSAoIzMzMzc3OSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHVyaS5jOiAoZ3N0X3VyaV9oYXNfcHJvdG9jb2wpOgotCSAgKiBnc3QvZ3N0dXJpLmg6Ci0JICBBZGQgbmV3IEFQSTogZ3N0X3VyaV9oYXNfcHJvdG9jb2woKSAoIzMzMzc3OSkuCi0KLTIwMDYtMDMtMDkgMTE6NDU6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjbG9jay4qOiBSZXZpZXcgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19lbnRyeV9uZXcpLAotCSAgKGdzdF9jbG9ja19pZF9jb21wYXJlX2Z1bmMpLCAoZ3N0X2Nsb2NrX2lkX3dhaXQpLAotCSAgKGdzdF9jbG9ja19pZF93YWl0X2FzeW5jKSwgKGdzdF9jbG9ja19pZF91bnNjaGVkdWxlKSwKLQkgIChnc3RfY2xvY2tfaW5pdCksIChnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUpLAotCSAgKGdzdF9jbG9ja19zZXRfbWFzdGVyKSwgKGRvX2xpbmVhcl9yZWdyZXNzaW9uKSwKLQkgIChnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uKSwgKGdzdF9jbG9ja19zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgIFJldmlldyBkb2NzLgotCSAgU21hbGwgY2xlYW51cHMuCi0JICBGaXggYSBwb3NzaWJsZSBzZWdmYXVsdCB3aGVuIHRoZSB3aW5kb3ctc2l6ZSBpcyBtYWRlIHNtYWxsZXIuCi0JICBDYWxjdWxhdGUgaml0dGVyIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBjbG9jayB3YWl0LiBJZGVhbGx5Ci0JICB0aGUgY2xvY2sgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGN1bGF0ZSBqaXR0ZXIgYnV0IHdlIG5lZWQKLQkgIEFQSSBicmVha2FnZSBmb3IgdGhhdC4KLQkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2luaXQpOgotCSAgRG9jcyByZXZpZXcuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZG9fc3luYyk6Ci0JICBSZW1vdmUgbGVmdG92ZXIgZWxzZQotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3Rfc3lzdGVtY2xvY2tfc3VpdGUpOgotCSAgQWRkZWQgY2hlY2sgdG8gdGVzdCBHU1RfQ0xPQ0tfRElGRi4KLQotMjAwNi0wMy0wOSAxMDo0NjozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiBJZiB3ZSBhcmUgcHJvdmlkZWQgd2l0aCB0aGUgc2l6ZSwgd2Ugc2hvdWxkIGltcGxlbWVudAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGhlbHBlcl9maW5kX2dldF9sZW5ndGgpLAotCSAgKGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSk6Ci0JICBJZiB3ZSBhcmUgcHJvdmlkZWQgd2l0aCB0aGUgc2l6ZSwgd2Ugc2hvdWxkIGltcGxlbWVudAotCSAgR3N0VHlwZUZpbmQ6OmdldF9sZW5ndGgsIHNvIHRoYXQgdHlwZWZpbmQgZnVuY3Rpb25zIHdobwotCSAgd2FudCB0byBjYW4gYWN0dWFsbHkgcGVlayBhdCB0aGUgbWlkZGxlIG9mIGEgZmlsZS4KLQotMjAwNi0wMy0wOCAxNDozMDo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6IEFkZCBzb21lIHZlcnkgdmVyeSBiYXNpYyBlcnJvciBjaGVja2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIEFkZCBzb21lIHZlcnkgdmVyeSBiYXNpYyBlcnJvciBjaGVja2luZy4KLQkgICogZG9jcy9wd2cvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDoKLQkgIFNvbWUgdXBkYXRlcyB0byB0aGUgbGlzdCBvZiB0aGluZ3MgdG8gY2hlY2sgd2hlbiB3cml0aW5nIGFuIGVsZW1lbnQuCi0KLTIwMDYtMDMtMDggMTM6NDQ6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0OiBBZGRlZCBzb21lIGRvY3MgYWJvdXQgdGhlIGRlc2lnbiBvZiB0cmFuZm9ybSBlbGVtZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dDoKLQkgIEFkZGVkIHNvbWUgZG9jcyBhYm91dCB0aGUgZGVzaWduIG9mIHRyYW5mb3JtIGVsZW1lbnRzLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWspLAotCSAgKGdzdF9iYXNlX3NyY19sb29wKSwgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgTWFyayBidWZmZXJzIHdpdGggdGhlIERJU0NPTlQgZmxhZy4KLQotMjAwNi0wMy0wOCAxMjo1NzozNyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvOiBSZXdyaXRlIHJlZ2lzdHJ5LXNhdmluZyB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIGNoZWNrIGZvciBmYWlsZWQgd3JpdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGdzdF9yZWdpc3RyeV9zYXZlKSwKLQkgIChnc3RfcmVnaXN0cnlfc2F2ZV9lc2NhcGVkKSwgKGdzdF9yZWdpc3RyeV94bWxfc2F2ZV9jYXBzKSwKLQkgIChnc3RfcmVnaXN0cnlfeG1sX3NhdmVfcGFkX3RlbXBsYXRlKSwKLQkgIChnc3RfcmVnaXN0cnlfeG1sX3NhdmVfZmVhdHVyZSksIChnc3RfcmVnaXN0cnlfeG1sX3NhdmVfcGx1Z2luKSwKLQkgIChnc3RfcmVnaXN0cnlfeG1sX3dyaXRlX2NhY2hlKToKLQkgIFJld3JpdGUgcmVnaXN0cnktc2F2aW5nIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgY2hlY2sgZm9yCi0JICBmYWlsZWQgd3JpdGVzLgotCi0yMDA2LTAzLTA4IDEwOjE3OjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogQ2xlYW51cHMsIHNlcGFyYXRlIG5vcm1hbCBmbG93IGZyb20gZXJyb3JzLCBhZGQgc2Vuc2libGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fc2l6ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZmZlciksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF91bml0X3NpemUpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKToKLQkgIENsZWFudXBzLCBzZXBhcmF0ZSBub3JtYWwgZmxvdyBmcm9tIGVycm9ycywgYWRkIHNlbnNpYmxlCi0JICBERUJVRyBsaW5lcy4KLQkgIERvbid0IHRyeSB0byByZW5lZ290aWF0ZSB3aGVuIGFsbG9jYXRpbmcgYW4gb3V0cHV0IGJ1ZmZlci4KLQkgIEFsc28gY29weSBESVNDT05UIGJ1ZmZlciBmbGFnIHdoZW4gY29weWluZyBhIGJ1ZmZlci4KLQkgIFJlc2V0IHRoZSB0cmFuc2Zvcm0gYWZ0ZXIgd2UgZmluaXNoIHN0cmVhbWluZywgbm90IGR1cmluZy4KLQotMjAwNi0wMy0wOCAwOTo0Njo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBVc2UgbGFzdCBidWZmZXIgdGltZXN0YW1wIGluIHFvcyBtZXNzYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZG9fc3luYyk6Ci0JICBVc2UgbGFzdCBidWZmZXIgdGltZXN0YW1wIGluIHFvcyBtZXNzYWdlLgotCi0yMDA2LTAzLTA3IDE3OjA2OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL3B3Zy86IEFwcGxpZWQgcGF0Y2ggZnJvbSBDaHJpc3RvcGhlIEZlcmdlYXUsIGZpeGVzICMzMzM0MTYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC10YWdnaW5nLnhtbDoKLQkgICogZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6Ci0JICBBcHBsaWVkIHBhdGNoIGZyb20gQ2hyaXN0b3BoZSBGZXJnZWF1LCBmaXhlcyAjMzMzNDE2Ci0KLTIwMDYtMDMtMDcgMTY6MjE6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEFkZGVkIGJhc2VzaW5rIG5ldyBtZXRob2RzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBBZGRlZCBiYXNlc2luayBuZXcgbWV0aG9kcy4KLQkgICogZ3N0L2dzdGV2ZW50LmM6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgRG9jcyB1cGRhdGVzLiBGbGVzaCBvdXQgdGhlIFFvUyBkb2NzLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIFNtYWxsIGRvYyBjbGFyaWZpY2F0aW9uIGFib3V0IG93bmVyc2hpcCBhbmQgZmx1c2hpbmcuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3Npbmtfc2V0X3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzKSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3MpLCAoZ3N0X2Jhc2Vfc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEFkZGVkIG5ldyBtZXRob2RzIHRvIGFsbG93IHN1YmNsYXNzIHRvIGNvbnRyb2wgbWF4LWxhdGVuZXNzCi0JICBhbmQgc3luYy4KLQkgIEdlbmVyYXRlIHZlcnkgYmFzaWMgUW9TIGV2ZW50cyBiYXNlZCBvbiBsYXN0IHN5bmMgb2JzZXJ2YXRpb24uCi0JICBVcGRhdGVkIGRvY3MsIGZpeCB0eXBvLCBhZGRlZCBzb21lIFFvUyBibHVyYi4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICBSZW1vdmUgb2Jzb2xldGUgX2dldF9zdGF0ZSgpIGNhbGxzIGZyb20gZG9jcy4KLQotMjAwNi0wMy0wNyAxNToxNDo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRml4ICMzMzM2NjksIEFkZCBwYWQgYWNjZXNzb3IgZGVmaW5lcyBmb3IgR3N0QmFzZVRyYW5zZm9ybQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgRml4ICMzMzM2NjksIEFkZCBwYWQgYWNjZXNzb3IgZGVmaW5lcyBmb3IgR3N0QmFzZVRyYW5zZm9ybQotCSAgRml4IGRvY3MgZm9yIEdzdEJhc2VTcmMuCi0KLTIwMDYtMDMtMDcgMTU6MDg6NTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFNtYWxsIGRvY3VtZW50YXRpb24gZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBTbWFsbCBkb2N1bWVudGF0aW9uIGZpeGVzLgotCi0yMDA2LTAzLTA3IDExOjQ3OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dmFsdWUuYzogRG9jdW1lbnQgdGhyZWFkLXVuc2FmZXR5IG9mIGdzdF92YWx1ZV9yZWdpc3Rlcl9mb29fZnVuYygpIHdoZW4gdXNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGdzdF92YWx1ZV9mb28uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIERvY3VtZW50IHRocmVhZC11bnNhZmV0eSBvZiBnc3RfdmFsdWVfcmVnaXN0ZXJfZm9vX2Z1bmMoKQotCSAgd2hlbiB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ3N0X3ZhbHVlX2ZvbygpICgjMzIyNjI4KS4KLQotMjAwNi0wMy0wNyAxMDoxOToyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIFJFQURNRToKLQkgIHVwZGF0ZSBSRUFETUUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIFJFQURNRQotCi0yMDA2LTAzLTA3IDA5OjI4OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzogUHVzaCBzb3VyY2VzIGRvbid0IHN1cHBvcnQgcHVsbCBtb2RlIGJ5IGRlZmF1bHQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6IChnc3RfcHVzaF9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3B1c2hfc3JjX2NoZWNrX2dldF9yYW5nZSk6Ci0JICBQdXNoIHNvdXJjZXMgZG9uJ3Qgc3VwcG9ydCBwdWxsIG1vZGUgYnkgZGVmYXVsdC4KLQotMjAwNi0wMy0wNiAxOTo1NTowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLio6IEFkZCA6OmNoZWNrX2dldF9yYW5nZSgpIHZmdW5jIHRvIEdzdEJhc2VTcmMgKCMzMzI2MTEpLCBwcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2luaXQpLCAoZ3N0X2Jhc2Vfc3JjX3BhZF9jaGVja19nZXRfcmFuZ2UpLAotCSAgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2NoZWNrX2dldF9yYW5nZSk6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgQWRkIDo6Y2hlY2tfZ2V0X3JhbmdlKCkgdmZ1bmMgdG8gR3N0QmFzZVNyYyAoIzMzMjYxMSksCi0JICBwcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFuZCByZW5hbWUKLQkgIGdzdF9iYXNlX3NyY19jaGVja19nZXRfcmFuZ2UoKSB0bwotCSAgZ3N0X2Jhc2Vfc3JjX3BhZF9jaGVja19nZXRfcmFuZ2UoKSBmb3IgY2xhcml0eS4KLQotMjAwNi0wMy0wNiAxNjoyNDozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcmFuZG9tL3N0eWxlZ3VpZGU6Ci0JICBzdHlsZSBndWlkZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzdHlsZSBndWlkZQotCi0yMDA2LTAzLTA2IDE2OjEwOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IE1ha2UgcHJvcGVydHkgb3ZlcnJpZGFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KToKLQkgIE1ha2UgcHJvcGVydHkgb3ZlcnJpZGFibGUuCi0KLTIwMDYtMDMtMDYgMTY6MDI6MzcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogTWFrZSBtYXgtbGF0ZW5lc3MgYSBwcm9wZXJ0eS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfaW5pdCksIChnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgTWFrZSBtYXgtbGF0ZW5lc3MgYSBwcm9wZXJ0eS4KLQotMjAwNi0wMy0wNiAxNToxNjoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBEb24ndCBldmVyIGRyYXcgYSBmcmFtZSB0aGF0IGlzID4xMG1zIGxhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19yZW5kZXJfb2JqZWN0KToKLQkgIERvbid0IGV2ZXIgZHJhdyBhIGZyYW1lIHRoYXQgaXMgPjEwbXMgbGF0ZS4KLQotMjAwNi0wMy0wNiAxNDo1MTozNiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0bWVzc2FnZS5jOiBXaGVuIGNvcHlpbmcgYSBtZXNzYWdlLCBzZXQgdGhlIHBhcmVudF9yZWZjb3VudCBvZiB0aGUgZW5jbG9zZWQgc3RydWN0dXJlIHRvIHBvaW50IGF0IHRoZSBjb3B5LCBub3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoX2dzdF9tZXNzYWdlX2NvcHkpOgotCSAgV2hlbiBjb3B5aW5nIGEgbWVzc2FnZSwgc2V0IHRoZSBwYXJlbnRfcmVmY291bnQgb2YgdGhlIGVuY2xvc2VkCi0JICBzdHJ1Y3R1cmUgdG8gcG9pbnQgYXQgdGhlIGNvcHksIG5vdCB0aGUgb3JpZ2luYWwgbWVzc2FnZS4KLQotMjAwNi0wMy0wNiAxNDo0NjozMSArMDAwMCAgQ2hyaXN0b3BoZSBGZXJnZWF1IDx0ZXVmQGdub21lLm9yZz4KLQotCSAgZ3N0L2dzdHV0aWxzLmg6IERvIHByb3BlciBjYXN0IGhlcmUgdG8gbWFrZSBHU1RfQk9JTEVSUExBVEVfV0lUSF9JTlRFUkZBQ0UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIERvIHByb3BlciBjYXN0IGhlcmUgdG8gbWFrZSBHU1RfQk9JTEVSUExBVEVfV0lUSF9JTlRFUkZBQ0UKLQkgIHVzYWJsZSBpbiBjKysgY29kZSAoIzMzMzQxNzsgcGF0Y2ggYnk6IENocmlzdG9waGUgRmVyZ2VhdSkKLQotMjAwNi0wMy0wNiAxNDozNDo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3RjbG9jay5oOiBTaG93IEdTVF9DTE9DS19USU1FX05PTkUgYXMgOTk6OTk6OTkuOTk5OTk5OTk5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBTaG93IEdTVF9DTE9DS19USU1FX05PTkUgYXMgOTk6OTk6OTkuOTk5OTk5OTk5Ci0KLTIwMDYtMDMtMDYgMTQ6MjM6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1xdW90ZXMueG1sOgotCSAgYWRkIGFub3RoZXIgcXVvdGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGFub3RoZXIgcXVvdGUKLQotMjAwNi0wMy0wNSAyMDo1Njo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IE1ha2Ugc3VyZSBjYXBzIGFyZSB3cml0YWJsZSBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIGdzdF9jYXBzX2FwcGVuZCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2Fwcyk6Ci0JICBNYWtlIHN1cmUgY2FwcyBhcmUgd3JpdGFibGUgYmVmb3JlIHBhc3NpbmcgdGhlbSB0bwotCSAgZ3N0X2NhcHNfYXBwZW5kKCkuCi0KLTIwMDYtMDMtMDQgMTQ6NDU6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RlcnJvci5oOiBGaXggc29tZSBtaW5vciBkb2NzIGVycm9ycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXJyb3IuaDoKLQkgIEZpeCBzb21lIG1pbm9yIGRvY3MgZXJyb3JzLgotCi0yMDA2LTAzLTA0IDEzOjU0OjI2ICswMDAwICBSb3NzIEJ1cnRvbiA8cm9zc0BidXJ0b25pbmkuY29tPgotCi0JICBnc3QvZ3N0ZXJyb3IuKjogQWRkIEdTVF9SRVNPVVJDRV9FUlJPUl9OT19TUEFDRV9MRUZUIChmb3IgIzMzMzM1MjsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKF9nc3RfcmVzb3VyY2VfZXJyb3JzX2luaXQpOgotCSAgKiBnc3QvZ3N0ZXJyb3IuaDoKLQkgIEFkZCBHU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVCAoZm9yICMzMzMzNTI7Ci0JICBwYXRjaCBieTogUm9zcyBCdXJ0b24gPHJvc3MgYXQgYnVydG9uaW5pIGRvdCBjb20+KS4KLQotMjAwNi0wMy0wMyAxNjo1ODo1MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3QuYzogQWRkIGEgY2hlY2sgYW5kIG91dHB1dCBhIGdfd2FybmluZyB3aGVuIEdTdHJlYW1lciBpcyBidWlsdCBhZ2FpbnN0IEdMaWIgMi42IGJ1dCBydW5uaW5nIGFnYWluc3QgMi44IG9yIGhpZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgIEFkZCBhIGNoZWNrIGFuZCBvdXRwdXQgYSBnX3dhcm5pbmcgd2hlbiBHU3RyZWFtZXIgaXMgYnVpbHQKLQkgIGFnYWluc3QgR0xpYiAyLjYgYnV0IHJ1bm5pbmcgYWdhaW5zdCAyLjggb3IgaGlnaGVyLCBhbmQgdmljZQotCSAgdmVyc2EuIChDbG9zZXM6ICMzMjM1NDIpCi0KLTIwMDYtMDMtMDMgMTU6MzI6MzAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvcGFyc2UvcGFyc2UubDogQ29tbWl0IHBhdGNoIGZvciBwYXJzZV9sYXVuY2ggc3ludGF4IGZyb20gIzMzMTI1NS4gUmVtb3ZlcyBzdXBwb3J0IGZvciBxdW90ZWQgc3RyaW5ncyBhbmQgbWltZXR5cGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvcGFyc2UubDoKLQkgIENvbW1pdCBwYXRjaCBmb3IgcGFyc2VfbGF1bmNoIHN5bnRheCBmcm9tICMzMzEyNTUuIFJlbW92ZXMKLQkgIHN1cHBvcnQgZm9yIHF1b3RlZCBzdHJpbmdzIGFuZCBtaW1ldHlwZXMgd2hlbiB3cml0aW5nIGZpbHRlcmVkCi0JICBjYXBzLiBTZWUgdGhlIGJ1ZyByZXBvcnQgZm9yIG1vcmUgZGV0YWlscyAtIEknbSBwcmV0dHkgc3VyZSB0aGlzCi0JICBvYnNjdXJlIGZlYXR1cmUgaXMgbm90IGluIHVzZSBieSBfYW55b25lXyBhbnl3aGVyZS4KLQkgIFdpdGggdGhpcyBzaW1wbGUgY2hhbmdlLCB0aGUgc2l6ZSBvZiB0aGUgZ3N0cmVhbWVyLnNvIGhlcmUKLQkgIGRyb3BzIGZyb20gMjE5M0tCIHRvIDE1NjVLQi4KLQotMjAwNi0wMy0wMyAxNDoxODowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuKjogVXNlIGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIoKSBmb3IgY2hhaW4tYmFzZWQgdHlwZWZpbmRpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc3JjX2V2ZW50KSwgKHN0YXJ0X3R5cGVmaW5kaW5nKSwKLQkgIChzdG9wX3R5cGVmaW5kaW5nKSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbiksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluX2RvX3R5cGVmaW5kaW5nKToKLQkgIFVzZSBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyKCkgZm9yIGNoYWluLWJhc2VkCi0JICB0eXBlZmluZGluZy4KLQotMjAwNi0wMy0wMyAxMTo0Mjo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogRGVwcmVjYXRlICJtYXhpbXVtIiBwcm9wZXJ0eSAobm90IG9ubHkgd2FzIGl0IG9ubHkgdGFrZW4gaW50byBhY2NvdW50IGZvciB0eXBlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF9wcm9wZXJ0eSk6Ci0JICBEZXByZWNhdGUgIm1heGltdW0iIHByb3BlcnR5IChub3Qgb25seSB3YXMgaXQgb25seSB0YWtlbiBpbnRvCi0JICBhY2NvdW50IGZvciB0eXBlZmluZGluZyBpbiBwdXNoLW1vZGUgYW55d2F5LCBpdCBhbHNvIHdhcyBuZXZlcgotCSAgYWN0dWFsbHkgcG9zc2libGUgdG8gc2V0IGl0IGluIHRoZSBmaXJzdCBwbGFjZSBiZWNhdXNlIHRoZQotCSAgcHJvcGVydHkgd2FzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbnVtZXJpYyBwcm9wZXJ0eSBJRCBmb3IgdGhlCi0JICAibWluaW11bSIgcHJvcGVydHkpLiBSZWdpc3RlciAibWF4aW11bSIgcHJvcGVydHkgY29ycmVjdGx5LAotCSAgZm9yIHRoZSBzYWtlIG9mIGZ1dHVyZSBjb3B5J24ncGFzdGVycy4gUmVtb3ZlIHNvbWUgY3J1ZnQKLQkgIGZyb20gcHJvcGVydHkgZ2V0L3NldCBmdW5jdGlvbnMuCi0KLTIwMDYtMDMtMDMgMTE6Mjc6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IFVzZSBnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UoKSBoZXJlLCBzbyB3ZSBjYW4gaG9ub3VyIHRoZSBtaW4tcHJvYmFiaWxpdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKToKLQkgIFVzZSBnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UoKSBoZXJlLCBzbyB3ZQotCSAgY2FuIGhvbm91ciB0aGUgbWluLXByb2JhYmlsaXR5IHByb3BlcnR5IGFuZCBhbHNvIGVtaXQKLQkgIHRoZSBzaWduYWwgd2l0aCB0aGUgY29ycmVjdCBwcm9iYWJpbGl0eSBvZiB0aGUgZm91bmQgY2Fwcy4KLQotMjAwNi0wMy0wMiAxMzo0NTozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgTmV3IEFQSTogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlKCkgKCMzMzMwNDIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGhlbHBlcl9maW5kX3BlZWspLAotCSAgKGhlbHBlcl9maW5kX3N1Z2dlc3QpLCAoZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlKSwKLQkgIChnc3RfdHlwZV9maW5kX2hlbHBlcik6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaDoKLQkgIE5ldyBBUEk6IGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSgpICgjMzMzMDQyKS4KLQotMjAwNi0wMy0wMiAxMTowNDo1OCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogQXNzZXJ0aW5nIG9uIGEgZmFpbHVyZSB0byByZWFkIHBhcnQgb2YgdGhlIHJlZ2lzdHJ5IGlzIE5vdCBDb29sLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9mZWF0dXJlKToKLQkgIEFzc2VydGluZyBvbiBhIGZhaWx1cmUgdG8gcmVhZCBwYXJ0IG9mIHRoZSByZWdpc3RyeSBpcyBOb3QgQ29vbC4KLQkgIEp1c3QgbG9nIGEgd2FybmluZyBhbmQgcmV0dXJuIE5VTEwgKHdoaWNoIGlzIGFscmVhZHkgaGFuZGxlZCkKLQotMjAwNi0wMi0yOCAyMDo1NzoxMCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6IGFkZGVkIGV4cG9ydCBvZiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgYWRkZWQgZXhwb3J0IG9mIGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgYWRkZWQgc29tZSBleHBvcnRzIDogZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzLCBnc3RfaXRlcmF0b3JfcmVzeW5jLAotCSAgZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0Ci0KLTIwMDYtMDItMjggMTc6MjQ6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDogV2UgdXNlIEZpbHRlciBub3cuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OgotCSAgV2UgdXNlIEZpbHRlciBub3cuCi0JICBBZGRlZCBDb25uZWN0b3IgdG8gbWFyayBlbGVtZW50cyB0aGF0IGFyZSBvbmx5IHVzZWQgdG8KLQkgIGFsbG93IHBpcGVsaW5lIGNvbm5lY3Rpb25zLgotCSAgTW92ZWQgRGVidWcgdG8gZXh0cmEgZmVhdHVyZSBzaW5jZSBtb3N0IG9mIHRoZW0gYXJlCi0JICBmdW5jdGlvbmFsbHkgc29tZXRoaW5nIGVsc2UuCi0KLTIwMDYtMDItMjggMTc6MDM6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dDogU29tZSB1cGRhdGVzIGFuZCBjbGFyaWZpY2F0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6Ci0JICBTb21lIHVwZGF0ZXMgYW5kIGNsYXJpZmljYXRpb25zLgotCi0yMDA2LTAyLTI4IDE1OjU0OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQ6IFByb3Bvc2FsIGZvciBrbGFzcyBmaWVsZCB2YWx1ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0OgotCSAgUHJvcG9zYWwgZm9yIGtsYXNzIGZpZWxkIHZhbHVlcy4KLQkgICogZG9jcy9kZXNpZ24vcGFydC1zdHJlYW1zLnR4dDoKLQkgIFN0YXJ0IG9mIGEgZG9jIGRlc2NyaWJpbmcgc3RyZWFtIGFuYXRvbXkuCi0KLTIwMDYtMDItMjggMTA6NTI6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogSGVscCB0aGUgY29tcGlsZXIgYSBiaXQgd2l0aCB0eXBlIHJlZ2lzdHJhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2dldF90eXBlKSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyk6Ci0JICBIZWxwIHRoZSBjb21waWxlciBhIGJpdCB3aXRoIHR5cGUgcmVnaXN0cmF0aW9uLgotCSAgVXNlIGV4aXN0aW5nIGZvcndhcmQgY29kIHBhdGggaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCB3aGVuCi0JICBoYW5kbGluZyBhIG1lc3NhZ2UuCi0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfZ2V0X3R5cGUpLCAoZ3N0X3N0YXRpY19jYXBzX2dldF90eXBlKToKLQkgICogZ3N0L2dzdGNoaWxkcHJveHkuYzogKGdzdF9jaGlsZF9wcm94eV9nZXRfdHlwZSk6Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2dldF90eXBlKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF90eXBlKSwKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlKToKLQkgICogZ3N0L2dzdGluZGV4ZmFjdG9yeS5jOiAoZ3N0X2luZGV4X2ZhY3RvcnlfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X2dldF90eXBlKToKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfdHlwZSk6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9nZXRfdHlwZSk6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0dGFzay5jOiAoZ3N0X3Rhc2tfZ2V0X3R5cGUpLCAoZ3N0X3Rhc2tfam9pbik6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgSGVscCBjb21waWxlciB3aXRoIHR5cGUgcmVnaXN0cmF0aW9uLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpOgotCSAgU21hbGwgZG9jIHVwZGF0ZS4KLQotMjAwNi0wMi0yNyAyMDowMTo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogV2hlbiB3ZSBnZXQgYW4gRU9TIGV2ZW50IGFuZCBoYXZlIG5vdCBmb3VuZCBhIHR5cGUgeWV0IChtb3N0IGxpa2VseSBiZWNhdXNlIHdlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGFuZGxlX2V2ZW50KToKLQkgIFdoZW4gd2UgZ2V0IGFuIEVPUyBldmVudCBhbmQgaGF2ZSBub3QgZm91bmQgYSB0eXBlIHlldAotCSAgKG1vc3QgbGlrZWx5IGJlY2F1c2Ugd2UgaGFkIG5vdCB5ZXQgYWNjdW11bGF0ZWQKLQkgIFRZUEVfRklORF9NSU5fU0laRSBvZiBkYXRhIHlldCksIHRyeSB0byBkZXRlcm1pbmUgdGhlCi0JICB0eXBlIGdpdmVuIHRoZSBkYXRhIHdlIGhhdmUgc28gZmFyLiBGaXhlcyB0eXBlZmluZGluZwotCSAgZm9yIHZlcnkgc2hvcnQgc3RyZWFtcyBhZ2FpbiwgbW9zdCBub3RhYmx5IHF1aWNrdGltZQotCSAgcmVkaXJlY3Rpb25zIGFzIHVzZWQgb24gQXBwbGUncyB0cmFpbGVyIHNpdGUgKCMzMzE3MDEpLgotCi0yMDA2LTAyLTI3IDE5OjQ1OjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IFRyeSB0eXBlZmluZGluZyBmYWN0b3JpZXMgd2l0aCB0aGUgaGlnaGVzdCByYW5rIGZpcnN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKHR5cGVfZmluZF9mYWN0b3J5X3JhbmtfY21wKSwKLQkgIChnc3RfdHlwZV9maW5kX2hlbHBlcik6Ci0JICBUcnkgdHlwZWZpbmRpbmcgZmFjdG9yaWVzIHdpdGggdGhlIGhpZ2hlc3QgcmFuayBmaXJzdC4KLQotMjAwNi0wMi0yNyAxOToxOTo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQWRkIHNlY3Rpb24gZm9yIHR5cGVmaW5kIGhlbHBlciBhbmQgYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBvbGQgYW5kIHRoZSBuZXcgZnVuY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSAgQWRkIHNlY3Rpb24gZm9yIHR5cGVmaW5kIGhlbHBlciBhbmQgYWRkIGRvY3VtZW50YXRpb24KLQkgIGZvciB0aGUgb2xkIGFuZCB0aGUgbmV3IGZ1bmN0aW9uLgotCi0yMDA2LTAyLTI3IDE4OjQzOjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLio6IE5ldyBBUEk6IGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIoKSAoIzMzMjcyMykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoYnVmX2hlbHBlcl9maW5kX3BlZWspLAotCSAgKGJ1Zl9oZWxwZXJfZmluZF9zdWdnZXN0KSwgKHR5cGVfZmluZF9mYWN0b3J5X3JhbmtfY21wKSwKLQkgIChnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oOgotCSAgTmV3IEFQSTogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcigpICgjMzMyNzIzKS4KLQotMjAwNi0wMi0yNyAxNTo0MzoxMCArMDAwMCAgTG/Dr2MgTWluaWVyIDxsb29sLmdub21lQHZpYS5lY3AuZnI+Ci0KLQkgIFBhdGNoIGZyb20gTG/Dr2MgTWluaWVyIHRvIHByZXZlbnQgQ1ZTIGRpcmVjdG9yaWVzIGdldHRpbmcgZGlzdGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9zbGlkZXMvTWFrZWZpbGUuYW06Ci0JICBQYXRjaCBmcm9tIExvw69jIE1pbmllciB0byBwcmV2ZW50IENWUyBkaXJlY3RvcmllcyBnZXR0aW5nIGRpc3RlZC4KLQotMjAwNi0wMi0yNyAxMjoxMDo0NyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIHVwZGF0ZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUKLQotMjAwNi0wMi0yNyAxMTowMTowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGNhcHMuYzogVXNlIHRoZSBSRUZDT1VOVElORyBjYXRlZ29yeSBmb3IgY2FwcyByZWZjb3VudGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfcmVmKSwgKGdzdF9jYXBzX3VucmVmKToKLQkgIFVzZSB0aGUgUkVGQ09VTlRJTkcgY2F0ZWdvcnkgZm9yIGNhcHMgcmVmY291bnRpbmcuCi0KLTIwMDYtMDItMjYgMTk6MjA6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IFRoaXMgc2hvdWxkIGJlIDAgbm90IEdTVF9DTE9DS19USU1FX05PTkUgKHNlZSAjMzMxNzAxKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoc3RvcF90eXBlZmluZGluZyk6Ci0JICBUaGlzIHNob3VsZCBiZSAwIG5vdCBHU1RfQ0xPQ0tfVElNRV9OT05FIChzZWUgIzMzMTcwMSkuCi0KLTIwMDYtMDItMjYgMTQ6NDI6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IFVzZSBnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UoKSBiZWZvcmUgX2FjdGl2YXRlX3B1bGwoKSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBvcC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKToKLQkgIFVzZSBnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UoKSBiZWZvcmUgX2FjdGl2YXRlX3B1bGwoKQotCSAgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgb3Blbi9jbG9zZSAoc2VlICMzMzE2OTApLgotCi0yMDA2LTAyLTI0IDE2OjU0OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dXRpbHMuYzogRG9jcyBlbmhhbmNlbWVudDogbWFrZSBpdCBjcnlzdGFsIGNsZWFyIHdoYXQgdGhlIGdzdF9wYWRfYWRkXypfcHJvYmUoKSBjYWxsYmFja3Mgc2hvdWxkIGxvb2sgbGlrZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIERvY3MgZW5oYW5jZW1lbnQ6IG1ha2UgaXQgY3J5c3RhbCBjbGVhciB3aGF0IHRoZQotCSAgZ3N0X3BhZF9hZGRfKl9wcm9iZSgpIGNhbGxiYWNrcyBzaG91bGQgbG9vayBsaWtlLgotCi0yMDA2LTAyLTI0IDEwOjU3OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogRG9jdW1lbnQgaG93IGFwcGxpY2F0aW9ucyBjYW4gc3RvcCByZWNvcmRpbmcgZnJvbSBsaXZlIHNvdXJjZXMgKHNlZSAjMzMwOTk2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgIERvY3VtZW50IGhvdyBhcHBsaWNhdGlvbnMgY2FuIHN0b3AgcmVjb3JkaW5nIGZyb20KLQkgIGxpdmUgc291cmNlcyAoc2VlICMzMzA5OTYpLgotCi0yMDA2LTAyLTIzIDE4OjA2OjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBJZ25vcmUgbW9yZSBzdHVmZi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvcGx1Z2lucy90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uY3ZzaWdub3JlOgotCSAgSWdub3JlIG1vcmUgc3R1ZmYuCi0KLTIwMDYtMDItMjMgMTc6Mzk6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrLzogLi4uIGFuZCBhZGQgc29tZSB0ZXN0cyBmb3IgdGhlIGJhc2Ugc291cmNlIEVPUyBzdHVmZi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svbGlicy9iYXNlc3JjLmM6IChlb3NfZXZlbnRfY291bnRlciksCi0JICAoYmFzZXNyY19lb3NfZXZlbnRzX3B1bGwpLCAoYmFzZXNyY19lb3NfZXZlbnRzX3B1c2gpLAotCSAgKGJhc2VzcmNfZW9zX2V2ZW50c19wdXNoX2xpdmVfb3ApLCAoYmFzZXNyY19lb3NfZXZlbnRzX3B1bGxfbGl2ZV9vcCksCi0JICAoZ3N0X2Jhc2VzcmNfc3VpdGUpLCAobWFpbik6Ci0JICAuLi4gYW5kIGFkZCBzb21lIHRlc3RzIGZvciB0aGUgYmFzZSBzb3VyY2UgRU9TIHN0dWZmLgotCi0yMDA2LTAyLTIzIDE2OjU2OjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogVGVzdCBjYXNlIG9yaWdpbmFsbHkgc2hvd2VkIHRoZSBwcm9ibGVtIGZpeGVkIGJlbG93LCBidXQgd2FzIHRoZW4gYW1lbmRlZC4gQWRkIGNoZWNrcyBiYWMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKHRlc3RfYnVmZmVyX3Byb2JlX25fdGltZXMpOgotCSAgVGVzdCBjYXNlIG9yaWdpbmFsbHkgc2hvd2VkIHRoZSBwcm9ibGVtIGZpeGVkIGJlbG93LAotCSAgYnV0IHdhcyB0aGVuIGFtZW5kZWQuIEFkZCBjaGVja3MgYmFjayBhdCB0aGUgcGxhY2UKLQkgIHdoZXJlIHRoZXkgdXNlZCB0byBiZS4KLQotMjAwNi0wMi0yMyAxNjoyNDozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLio6IERvbid0IHVuY29uZGl0aW9uYWxseSBzZW5kIEVPUyB3aGVuIGdvaW5nIGZyb20gUEFVU0VEIHRvCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2luaXQpLCAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLAotCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBEb24ndCB1bmNvbmRpdGlvbmFsbHkgc2VuZCBFT1Mgd2hlbiBnb2luZyBmcm9tIFBBVVNFRCB0bwotCSAgUkVBRFkgc3RhdGUsIGVzcC4gbWFrZSBzdXJlIHdlIGRvbid0IHNlbmQgdHdvIEVPUyBldmVudHMKLQkgIGluIHNvbWUgY2FzZXMgKGUuZy4gb25lIHdoZW4gcmVhY2hpbmcgRU9TIGFuZCBvbmUgd2hlbgotCSAgZ29pbmcgZnJvbSBQQVVTRUQgdG8gUkVBRFkpLiBBbHNvLCB3ZSBkb24ndCB3YW50IHRvIHNlbmQKLQkgIEVPUyBldmVudHMgd2hlbiBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlLiBIb3dldmVyLCB3ZSBkbwotCSAgd2FudCB0byBzZW5kIGFuIEVPUyBldmVudCB3aGVuIHNodXR0aW5nIGRvd24gYSBsaXZlCi0JICBzb3VyY2UgZXhwbGljaXRseSwgZm9yIGV4YW1wbGUgKGZpeGVzICMzMzA5OTYpLgotCi0yMDA2LTAyLTIzIDEwOjI0OjEzICswMDAwICBSZW5jaGkgUmFqdSA8cmVuY2hpQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IFVwZGF0ZSBzcmMtPnJlYWRfcG9zaXRpb24gYWZ0ZXIgYSBzZWVrIHdoZW4gbm90IHVzaW5nIG1tYXAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY3JlYXRlX3JlYWQpOgotCSAgVXBkYXRlIHNyYy0+cmVhZF9wb3NpdGlvbiBhZnRlciBhIHNlZWsgd2hlbiBub3QgdXNpbmcgbW1hcC4KLQkgIEZpeGVzICMzMzIyNzcsIHBhdGNoIGJ5OiBSZW5jaGkgUmFqdSA8cmVuY2hpIGdtYWlsIGNvbT4KLQotMjAwNi0wMi0yMCAyMzozNDo0MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC86IE1ha2UgdGhpbmdzIHdvcmsgd2l0aCAtLWRpc2FibGUtcGFyc2UgYXMgdGhleSBkbyB3aXRoCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0cGFyc2UuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgTWFrZSB0aGluZ3Mgd29yayB3aXRoIC0tZGlzYWJsZS1wYXJzZSBhcyB0aGV5IGRvIHdpdGgKLQkgIC0tZGlzYWJsZS1sb2FkLXNhdmUgLSB0aGUgc3ltYm9scyBpbnZvbHZlZCBkaXNhcHBlYXIsIGJ1dCB0aGUKLQkgIGhlYWRlciBpcyBzdGlsbCBpbnN0YWxsZWQgYW5kIEdTVF9ESVNBQkxFX1BBUlNFIGlzIGluY2x1ZGVkIHZpYQotCSAgZ3N0Y29uZmlnLmgKLQotMjAwNi0wMi0yMCAxNjowNzo0MiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBGaXggYSBzdHVwaWQgYnVnLiBJIHdhcyBzdXJlIGkgY29tcGlsZWQgdGhhdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKTogRml4IGEgc3R1cGlkIGJ1Zy4gSSB3YXMKLQkgIHN1cmUgaSBjb21waWxlZCB0aGF0LgotCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTIwMDYtMDItMjAgMTU6MDc6MzMgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvOiBNYWtlIHRob3NlIGZ1bmN0aW9uIGFjdCBvbiB0aGUgZ2hvc3RwYWQgdGFyZ2V0IHdoZW4gaXQncyBhIGdob3N0cGFkLiAoQ2xvc2VzICMzMzE3MjcpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyk6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3BhZF9hZGRfZGF0YV9wcm9iZSksCi0JICAoZ3N0X3BhZF9hZGRfZXZlbnRfcHJvYmUpLCAoZ3N0X3BhZF9hZGRfYnVmZmVyX3Byb2JlKSwKLQkgIChnc3RfcGFkX3JlbW92ZV9kYXRhX3Byb2JlKSwgKGdzdF9wYWRfcmVtb3ZlX2V2ZW50X3Byb2JlKSwKLQkgIChnc3RfcGFkX3JlbW92ZV9idWZmZXJfcHJvYmUpOiBNYWtlIHRob3NlIGZ1bmN0aW9uIGFjdCBvbiB0aGUKLQkgIGdob3N0cGFkIHRhcmdldCB3aGVuIGl0J3MgYSBnaG9zdHBhZC4gKENsb3NlcyAjMzMxNzI3KQotCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTIwMDYtMDItMjAgMTU6MDE6MTQgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogTWFrZSBiYXNldHJhbnNmb3JtIHJldXNhYmxlLiAoQ2xvc2VzICMzMzE4OTgpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSk6IE1ha2UgYmFzZXRyYW5zZm9ybSByZXVzYWJsZS4KLQkgIChDbG9zZXMgIzMzMTg5OCkKLQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0yMDA2LTAyLTIwIDEyOjI2OjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9yYW5kb20vcmVsZWFzZTogTW92ZSB0aGUgY3VycmVudCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0byBkbyBhIHJlbGVhc2UgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3JhbmRvbS9yZWxlYXNlOgotCSAgTW92ZSB0aGUgY3VycmVudCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0byBkbyBhIHJlbGVhc2UgdG8gdGhlIHRvcAotCSAgb2YgdGhlIGZpbGUuCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKLQkgIEFsbG93IG11bHRpcGxlIHN0YXRlLXJlY2FsY3VsYXRpb24gdGhyZWFkcy4gKENsb3NlcyAjMzI4ODczKQotCi0yMDA2LTAyLTE5IDEyOjI1OjAxICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L2dzdGluZm8uaDogQWRkIEdTVF9TVFJfTlVMTCB0byB0aGUgc2Vjb25kIHN0cmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMi0xOSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvZ3N0aW5mby5oOiBBZGQgR1NUX1NUUl9OVUxMIHRvIHRoZSBzZWNvbmQgc3RyaW5nLgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiksCi0JICAoZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24pLCAoZ3N0X3BhZF9zZXRfcXVlcnlfdHlwZV9mdW5jdGlvbiksCi0JICAoZ3N0X3BhZF9zZXRfZ2V0Y2Fwc19mdW5jdGlvbik6IEdTVF9ERUJVR19QQURfTkFNRSBldmFsdWF0ZXMgdG8KLQkgIDIgc3RyaW5ncy4gWW91IGNhbid0IHVzZSB0aGUgU1RSX05VTEwgbWFjcm8gb24gdGhhdC4KLQotMjAwNi0wMi0xOSAxMjowMDozOCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uKSwKLQkgIChnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiksIChnc3RfcGFkX3NldF9xdWVyeV90eXBlX2Z1bmN0aW9uKSwKLQkgIChnc3RfcGFkX3NldF9nZXRjYXBzX2Z1bmN0aW9uKQotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OiAoZ3N0X3BhcnNlX2ZvdW5kX3BhZCksIChnc3RfcGFyc2VfcGVyZm9ybV9kZWxheWVkX2xpbmspCi0JICBGaXhlZCBOVUxMIHBvaW50ZXIgdXNlZCBpbiBHU1RfQ0FUX0RFQlVHIHVzaW5nIEdTVF9TVFJfTlVMTCBtYWNybwotCSAgU28gbm93LCB3ZSBjYW4gdXNlIC0tZ3N0LWRlYnVnLWxldmVsPTUgb24gV2luZG93cwotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0Y29udHJvbGxlci5kZWY6Ci0JICBBZGRlZCBleHBvcnQgb2YgZ3N0X2NvbnRyb2xsZXJfaW5pdAotCSAgKiB3aW4zMi92czYvbGliZ3N0Y29udHJvbGxlci5kc3A6Ci0JICBGaXhlZCBSZWxlYXNlIHBvc3QgYnVpbGQgY29uZmlndXJhdGlvbgotCi0yMDA2LTAyLTE3IDE1OjI1OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzogQWRkZWQgYW5vdGhlciBjaGVjay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFkZGVkIGFub3RoZXIgY2hlY2suCi0KLTIwMDYtMDItMTUgMTI6MTc6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IFdlIGNhbiBkbyBwZWVrcyBhdCBub24temVybyBvZmZzZXRzLCBhcyBsb25nIGFzIHRoZXkgZmFsbCB3aXRoaW4gdGhlIGJ1ZmZlciB3ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IChmaW5kX3BlZWspOgotCSAgV2UgY2FuIGRvIHBlZWtzIGF0IG5vbi16ZXJvIG9mZnNldHMsIGFzIGxvbmcgYXMgdGhleQotCSAgZmFsbCB3aXRoaW4gdGhlIGJ1ZmZlciB3ZSBoYXZlLgotCi0yMDA2LTAyLTE1IDAxOjAyOjExICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgdGVzdHN1aXRlIGZvciBwYXJzZSBsYXVuY2ggc3ludGF4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYzogKHNldHVwX3BpcGVsaW5lKSwKLQkgIChleHBlY3RlZF9mYWlsX3BpcGUpLCAoY2hlY2tfcGlwZWxpbmVfcnVucyksIChHU1RfU1RBUlRfVEVTVCksCi0JICAocGFyc2Vfc3VpdGUpLCAobWFpbik6Ci0JICBBZGQgdGVzdHN1aXRlIGZvciBwYXJzZSBsYXVuY2ggc3ludGF4Ci0KLTIwMDYtMDItMTQgMjA6NTc6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IFdoZW4gdHlwZWZpbmRpbmcgaXMgdW5zdWNjZXNzZnVsIGluIHRoZSBjaGFpbiBmdW5jdGlvbiwgZG9uJ3QgZXJyb3Igb3V0IGltbWVkaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKToKLQkgIFdoZW4gdHlwZWZpbmRpbmcgaXMgdW5zdWNjZXNzZnVsIGluIHRoZSBjaGFpbiBmdW5jdGlvbiwgZG9uJ3QKLQkgIGVycm9yIG91dCBpbW1lZGlhdGVseS4gT25seSBlcnJvciBvdXQgd2l0aCBOT19DQVBTX0ZPVU5EIGlmCi0JICB0aGUgYW1vdW50IG9mIGRhdGEgaXMgYXQgbGVhc3QgTUFYX1RZUEVGSU5EX1NJWkUgYnl0ZXMsCi0JICBvdGhlcndpc2Ugc2ltcGx5IHdhaXQgZm9yIG1vcmUgZGF0YSBzbyB3ZSBjYW4gdHJ5IHR5cGVmaW5kaW5nCi0JICBhZ2FpbiB3aXRoIG1vcmUgZGF0YSBsYXRlci4gQWxzbywgZG9uJ3QgYXR0ZW1wdCB0byB0eXBlZmluZAotCSAgaWYgd2UgaGF2ZSBsZXNzIHRoYW4gTUlOX1RZUEVGSU5EX1NJWkUgZGF0YSBhdmFpbGFibGUuIE92ZXJhbGwsCi0JICB0aGlzIHNob3VsZCBpbXByb3ZlIHR5cGVmaW5kaW5nIGZyb20gbmV0d29yayBzb3VyY2VzIHdoZXJlIHRoZQotCSAgc2l6ZSBvZiB0aGUgZmlyc3QgYnVmZmVyIGNhbiBiZSBzb21ld2hhdCByYW5kb20uCi0KLTIwMDYtMDItMTQgMTg6MjY6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEZpeCBwYWR0ZW1wbGF0ZSBkb2NzLCBmaXhlcyAjMzI4ODA1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkgIEZpeCBwYWR0ZW1wbGF0ZSBkb2NzLCBmaXhlcyAjMzI4ODA1LgotCi0yMDA2LTAyLTE0IDE3OjI1OjExICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0b29scy9nc3QtbGF1bmNoLmM6IE5PX1BSRVJPTEwgaXMgbm90IGFuIEVSUk9SIHNvIGRvbid0IHNlbmQgY29uZnVzaW5nIG1lc3NhZ2VzIHRvIHRoZSB1c2VyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgotCSAgTk9fUFJFUk9MTCBpcyBub3QgYW4gRVJST1Igc28gZG9uJ3Qgc2VuZCBjb25mdXNpbmcgbWVzc2FnZXMKLQkgIHRvIHRoZSB1c2VyLgotCi0yMDA2LTAyLTE0IDE2OjE1OjA1ICswMDAwICBUb3JzdGVuIFNjaG9lbmZlbGQgPGthZmZlZXRpc2NoQGdteC5kZT4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5LmM6IFByb3RlY3QgZGVmYXVsdCByZWdpc3RyeSB3aXRoIGxvY2sgYW5kIHJlZi9zaW5rIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0KSwKLQkgIChfZ3N0X3JlZ2lzdHJ5X2NsZWFudXApOgotCSAgUHJvdGVjdCBkZWZhdWx0IHJlZ2lzdHJ5IHdpdGggbG9jayBhbmQgcmVmL3NpbmsgaXQuCi0JICBGaXhlcyAjMzI0ODE4LCBwYXRjaCBieSBUb3JzdGVuIFNjaG9lbmZlbGQuCi0KLTIwMDYtMDItMTQgMTM6MDc6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvY3MgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9saXN0X2FkZF9mb3JtYXQpLAotCSAgKGdzdF9xdWVyeV9zZXRfZm9ybWF0c3YpLCAoZ3N0X3F1ZXJ5X3BhcnNlX2Zvcm1hdHNfbGVuZ3RoKSwKLQkgIChnc3RfcXVlcnlfcGFyc2VfZm9ybWF0c19udGgpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzKToKLQkgIERvY3MgZml4ZXMuCi0KLTIwMDYtMDItMTQgMTI6MDc6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IFJld29ya2VkIHF1ZXJ5IGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIFJld29ya2VkIHF1ZXJ5IGRvY3MuCi0JICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X25ld19mb3JtYXRzKSwKLQkgIChnc3RfcXVlcnlfbGlzdF9hZGRfZm9ybWF0KSwgKGdzdF9xdWVyeV9zZXRfZm9ybWF0cyksCi0JICAoZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdiksIChnc3RfcXVlcnlfcGFyc2VfZm9ybWF0c19sZW5ndGgpLAotCSAgKGdzdF9xdWVyeV9wYXJzZV9mb3JtYXRzX250aCk6Ci0JICAqIGdzdC9nc3RxdWVyeS5oOgotCSAgRmxlc2ggb3V0IGZvcm1hdHMgcXVlcnksIGFkZGVkIHNvbWUgbmV3IG1ldGhvZHMuCi0JICBGaXggcGFydCBvZiAjMzI0Mzk4LgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdHF1ZXJ5X3N1aXRlKToKLQkgIEFkZGVkIHF1ZXJ5IGNyZWF0aW9uIHRlc3RzLgotCi0yMDA2LTAyLTE0IDExOjM4OjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBBZGQgYSBkZWZhdWx0IGZpeGF0aW9uIGZvciBmcmFjdGlvbiBsaXN0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChmaXhhdGVfdmFsdWUpOgotCSAgQWRkIGEgZGVmYXVsdCBmaXhhdGlvbiBmb3IgZnJhY3Rpb24gbGlzdHMuCi0KLTIwMDYtMDItMTMgMTc6MDM6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R0YXNrLio6IERldGVjdCBhbmQgd2FybiBmb3Igb2J2aW91cyBkZWFkbG9ja3MuIGZpeGVzICMzMjAzNDAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dGFzay5jOiAoZ3N0X3Rhc2tfaW5pdCksIChnc3RfdGFza19mdW5jKSwKLQkgIChnc3RfdGFza19zZXRfbG9jayksIChnc3RfdGFza19zdGFydCksIChnc3RfdGFza19wYXVzZSksCi0JICAoZ3N0X3Rhc2tfam9pbik6Ci0JICAqIGdzdC9nc3R0YXNrLmg6Ci0JICBEZXRlY3QgYW5kIHdhcm4gZm9yIG9idmlvdXMgZGVhZGxvY2tzLiBmaXhlcyAjMzIwMzQwCi0JICBGaXggZXJyb3IgY2FzZSB3aGVyZSBsb2NrIHdhcyBub3QgcmVsZWFzZWQuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFzay5jOiAodGFza19mdW5jMiksIChHU1RfU1RBUlRfVEVTVCksCi0JICAodGFza19mdW5jKSwgKGdzdF9lbGVtZW50X3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIHRhc2sgY2hlY2suCi0KLTIwMDYtMDItMTMgMTQ6MDA6MzMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEZvcmdvdCBjaGFuZ2Vsb2cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRm9yZ290IGNoYW5nZWxvZwotCi0yMDA2LTAyLTEzIDEzOjU3OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgbmV3IGZ1bmN0aW9ucyB0byBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RidXMuYzoKLQkgIEFkZCBuZXcgZnVuY3Rpb25zIHRvIGRvY3MuCi0KLTIwMDYtMDItMTMgMTE6NTI6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFVwZGF0ZWQgVE9ETyBsaXN0LCBiYXNlc3JjIHN1cHBvcnRzIHNlZWtpbmcgdG8gbm9uLWJ5dGVzIGZvcm1hdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgIFVwZGF0ZWQgVE9ETyBsaXN0LCBiYXNlc3JjIHN1cHBvcnRzIHNlZWtpbmcgdG8gbm9uLWJ5dGVzCi0JICBmb3JtYXRzLgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6Ci0JICBVcGRhdGUgZG9jcy4KLQkgICogZ3N0L2dzdGJpbi5jOiAoYmluX3JlcGxhY2VfbWVzc2FnZSksCi0JICAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KSwgKGdzdF9idXNfcG9wKToKLQkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfZmluYWxpemUpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2V2ZW50X2RlZmF1bHRfZGlzcGF0Y2gpLAotCSAgKGdzdF9wYWRfc2VuZF9ldmVudCk6Ci0JICBVc2Ugc2hpbnkgbmV3IF9UWVBFX05BTUUgbWFjcm9zLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpOgotCSAgTW92ZSBkZWJ1ZyBzdGF0ZW1lbnQgdXAuCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKToKLQkgIEFkZCBzb21lIGRlYnVnZ2luZy4KLQotMjAwNi0wMi0xMyAxMToxOTozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgTmV3IEFQSTogYWRkIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSBhbmQgR1NUX1FVRVJZX1RZUEVfTkFNRSBtYWNyb3MgKCMzMzA5MDYpLiBBbHNvLCBkb2N1bWVudCB0aGUgYWxyZWFkeSBleGlzdGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICAqIGdzdC9nc3RxdWVyeS5oOgotCSAgTmV3IEFQSTogYWRkIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSBhbmQgR1NUX1FVRVJZX1RZUEVfTkFNRQotCSAgbWFjcm9zICgjMzMwOTA2KS4gQWxzbywgZG9jdW1lbnQgdGhlIGFscmVhZHkgZXhpc3RpbmcKLQkgIEdTVF9RVUVSWV9UWVBFIG1hY3JvLgotCi0yMDA2LTAyLTEzIDEwOjU0OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogT25seSBldmVudHMgdXAgdG8gdGhlIHBpcGVsaW5lIEVPUyBhcmUgY291bnRlZCwgdGhlcmUgYXJlIHNvbWUgbW9yZSB3aGVuIGdvaW5nIHRvIE5VTEwgY3UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKGRhdGFfcHJvYmUpLCAoYnVmZmVyX3Byb2JlKSwKLQkgIChldmVudF9wcm9iZSksIChHU1RfU1RBUlRfVEVTVCk6Ci0JICBPbmx5IGV2ZW50cyB1cCB0byB0aGUgcGlwZWxpbmUgRU9TIGFyZSBjb3VudGVkLCB0aGVyZSBhcmUKLQkgIHNvbWUgbW9yZSB3aGVuIGdvaW5nIHRvIE5VTEwgY3VycmVudGx5IHdoaWNoIHdlIGRvbid0IGNhcmUKLQkgIGFib3V0IGZvciBub3cuCi0KLTIwMDYtMDItMTMgMDk6NTk6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogQ29ycmVjdGx5IGNoZWNrIGZsdXNoaW5nIGFuZCBlbWl0IHByb2Jlcy4gZml4ZXMgIzMzMDEyNQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2VuZF9ldmVudCk6Ci0JICBDb3JyZWN0bHkgY2hlY2sgZmx1c2hpbmcgYW5kIGVtaXQgcHJvYmVzLiBmaXhlcyAjMzMwMTI1Ci0KLTIwMDYtMDItMTIgMTM6MTE6NTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICByZXZlcnQgd3JvbmcgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmVydCB3cm9uZyBjb21taXQKLQotMjAwNi0wMi0xMCAxNjowNDo1OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0YnVzLmMgKGdzdF9idXNfY2xhc3NfaW5pdCk6IERlY2xhcmUgb3VyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDItMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RidXMuYyAoZ3N0X2J1c19jbGFzc19pbml0KTogRGVjbGFyZSBvdXIgcHJpdmF0ZSBkYXRhCi0JICBzdHJ1Y3R1cmUuCi0JICAoZ3N0X2J1c19pbml0KTogQ2FjaGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBwcml2YXRlIGRhdGEgaW4gdGhlCi0JICBpbnN0YW5jZSBzdHJ1Y3R1cmUuCi0JICAoZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKQotCSAgKGdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24pOiBJbXBsZW1lbnQgbmV3IHB1YmxpYwotCSAgZnVuY3Rpb25zLgotCSAgKGdzdF9idXNfcG9zdCk6IEVtaXQgdGhlIHN5bmMtbWVzc2FnZSBzaWduYWwgaWYgdGhlIHVzZXIgYXNrZWQgZm9yCi0JICBpdC4gRml4ZXMgIzMzMDY4NC4KLQkgICogZ3N0L2dzdGJ1cy5oIChHc3RCdXMpOiBVc2UgYSBwYWRkaW5nIHBvaW50ZXIgdG8gY2FjaGUgdGhlCi0JICBsb2NhdGlvbiBvZiB0aGUgYnVzLXByaXZhdGUgc3RydWN0dXVyZS4KLQkgIChnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24pCi0JICAoZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbik6IE5ldyBwdWJsaWMgZnVuY3Rpb25zLgotCi0yMDA2LTAyLTA5IDIzOjQwOjQzICswMDAwICBWaW5jZW50IFRvcnJpIDx2dG9ycmlAdW5pdi1ldnJ5LmZyPgotCi0JICBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICBQV0cgcGF0Y2ggZnJvbSAjMzI2ODAwIChQYXRjaCBieSBWaW5jZW50IFRvcnJpKQotCi0yMDA2LTAyLTA5IDE4OjMwOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBkb2NzL2Rlc2lnbi9NYWtlZmlsZS5hbToKLQkgIENoYW5nZUxvZyBzdXJnZXJ5IGFuZCBhZGQgbWlzc2luZyBuZXcgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeSBhbmQgYWRkIG1pc3NpbmcgbmV3IGZpbGUKLQotMjAwNi0wMi0wOSAxODoyODozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW0KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtCi0JICBEaXN0IGRlc2lnbiBkb2NzLgotCi0yMDA2LTAyLTA4IDE3OjM0OjQzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBiYWNrIHRvIENWUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gQ1ZTCi0KLT09PSByZWxlYXNlIDAuMTAuMyA9PT0KLQotMjAwNi0wMi0wOCAxNzozMTozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogcmVsZWFzaW5nIDAuMTAuMywgIkxpa2UgYSB2aXJnaW4iCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgID09PSByZWxlYXNlIDAuMTAuMyA9PT0KLQkgIDIwMDYtMDItMDggIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICByZWxlYXNpbmcgMC4xMC4zLCAiTGlrZSBhIHZpcmdpbiIKLQotMjAwNi0wMi0wOCAxMToxMjowNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogMm5kIHByZXJlbGVhc2Ugb2YgMC4xMC4zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDItMDggIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgMm5kIHByZXJlbGVhc2Ugb2YgMC4xMC4zCi0JICBCdW1wIGxpYnRvb2wgdmVyc2lvbmluZy4KLQotMjAwNi0wMi0wNyAxNTo0OTo0MCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pOiBPbmx5IHVwZGF0ZSBsYXN0X3N0b3AgaWYgd2UncmUgaW4gVElNRSBmb3JtYXQgYW5kIHRoZSB0aW1lc3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMi0wNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKTogT25seQotCSAgdXBkYXRlIGxhc3Rfc3RvcCBpZiB3ZSdyZSBpbiBUSU1FIGZvcm1hdCBhbmQgdGhlIHRpbWVzdGFtcCBpcwotCSAgdmFsaWQuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYyAoZ3N0X2NvbGxlY3RfcGFkc19ldmVudCkKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudGZ1bmMpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfY29uZmlndXJlX3NlZ21lbnQpOgotCSAgSWYgd2UgZ2V0IGEgbmV3IG5ld3NlZ21lbnQgd2l0aCBhIGRpZmZlcmVudCBmb3JtYXQsIGFkYXB0Ci0JICBhY2NvcmRpbmdseS4KLQkgICogZ3N0L2dzdGNsb2NrLmMgKGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24pOiBBY2NlcHQgYSBudW1lcmF0b3IKLQkgIG9mIDAuIE5vdCBhIHByb2JsZW0sIHJlYWxseS4KLQotMjAwNi0wMi0wNyAxMzoyMDoxNiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQpOiBPbmx5IHdhcm4gaWYgc3luYz10cnVlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAyLTA3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQpOiBPbmx5Ci0JICB3YXJuIGlmIHN5bmM9dHJ1ZS4KLQotMjAwNi0wMi0wNyAxMDo1MToyNCArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIHVwZGF0ZSBzcGVjIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHNwZWMgZmlsZQotCi0yMDA2LTAyLTA2IDIyOjAxOjIzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBQcmVsZWFzZSBvZiAwLjEwLjMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBQcmVsZWFzZSBvZiAwLjEwLjMKLQotMjAwNi0wMi0wNiAyMTo1MzowNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwNi0wMi0wNiAyMToyOTowNCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi92czc6IHByb2plY3QgZmlsZXMgdXBkYXRlZCB0byB0aGUgZGVmYXVsdCB2czcgY29uZmlndXJhdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL3ZzNzoKLQkgIHByb2plY3QgZmlsZXMgdXBkYXRlZCB0byB0aGUgZGVmYXVsdCB2czcgY29uZmlndXJhdGlvbgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYWRkZWQgbmV3IHN5bWJvbHMsCi0JICByZW1vdmVkIGVtcHR5IGxpbmVzLAotCSAgc29ydGVkIGFsbCBleHBvcnRlZCBzeW1ib2xzIGFscGhhYmV0aWNhbGx5Ci0JICAqIHdpbjMyL2NvbW1vbi9kaXJlbnQuYzoKLQkgICogd2luMzIvY29tbW9uL2RpcmVudC5oOgotCSAgKiB3aW4zMi9jb21tb24vZ2NoYXIuaDoKLQkgIHVzZSB3aW5kb3dzIGxpbmUgZW5kLgotCi0yMDA2LTAyLTA2IDE1OjI1OjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIGRvYyBzdWI4MCBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb2Mgc3ViODAgZml4ZXMKLQotMjAwNi0wMi0wNiAxNDo1Nzo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFNlbmQgRU9TIGV2ZW50IHdoZW4gc3RvcHBpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgIFNlbmQgRU9TIGV2ZW50IHdoZW4gc3RvcHBpbmcuCi0KLTIwMDYtMDItMDYgMTA6NDI6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvUkVBRE1FOiBUZWxsIGZvbGtzIHdoYXQgdG8gZG8gaWYgdGhlIHBsdWdpbi1mb29iYXIueG1sIGZpbGUgaGFzbid0IGJlZW4gZ2VuZXJhdGVkIGZvciBhIG5ld2x5LWFkZGVkIHBsdWdpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL1JFQURNRToKLQkgIFRlbGwgZm9sa3Mgd2hhdCB0byBkbyBpZiB0aGUgcGx1Z2luLWZvb2Jhci54bWwgZmlsZQotCSAgaGFzbid0IGJlZW4gZ2VuZXJhdGVkIGZvciBhIG5ld2x5LWFkZGVkIHBsdWdpbi4KLQotMjAwNi0wMi0wNSAxODoxMzoyOCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogQ29sbGVjdHBhZHMgbm93IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBHc3RQYWQgdGhhdCB3YXMgYWRkZWQuIEluZGVlZCB3ZSBkb24ndCB3YW50IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAyLTA1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfZmluYWxpemUpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCksIChnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQpLCAoZ3N0X2NvbGxlY3RfcGFkc19zdG9wKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KTogQ29sbGVjdHBhZHMgbm93IGhvbGRzIGEgcmVmZXJlbmNlCi0JICB0byB0aGUgR3N0UGFkIHRoYXQgd2FzIGFkZGVkLiBJbmRlZWQgd2UgZG9uJ3Qgd2FudCB0byBsb29rCi0JICBhdCBwYWRzIHRoYXQgbWlnaHQganVzdCBnbyBhd2F5IHdpdGggbm8gd2FybmluZy4uLgotCi0yMDA2LTAyLTA1IDE2OjE4OjM3ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy4qOiBIYW5kbGUgZmx1c2guIEFkYXB0ZWQgZnJvbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAyLTA1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19zdGFydCksIChnc3RfY29sbGVjdF9wYWRzX3N0b3ApLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpLCAoZ3N0X2NvbGxlY3RfcGFkc19jaGFpbik6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDogSGFuZGxlIGZsdXNoLiBBZGFwdGVkIGZyb20KLQkgIE1hcmsgTmF1d2VsYWVydHMncyBwYXRjaCBvbiBidWcgIzMyODQ5MS4KLQotMjAwNi0wMi0wNCAxMjo0OTo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6IEFkZCBzb21lIHNpbXBsZSB0ZXN0cyBmb3IgZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCkgYW5kIGdzdF9iaW5fZmluZF91bmNvbm5lY3RlZF9wLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6ICh0ZXN0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKSwKLQkgIChnc3RfdXRpbHNfc3VpdGUpOgotCSAgQWRkIHNvbWUgc2ltcGxlIHRlc3RzIGZvciBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24oKSBhbmQKLQkgIGdzdF9iaW5fZmluZF91bmNvbm5lY3RlZF9wYWQoKSAoIzMyOTA2OSkuCi0KLTIwMDYtMDItMDQgMTE6NTY6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guYzogQ2F0Y2ggZXJyb3JzIGR1cmluZyBwcmVyb2xsICgjMzIwMDg0KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKSwgKG1haW4pOgotCSAgQ2F0Y2ggZXJyb3JzIGR1cmluZyBwcmVyb2xsICgjMzIwMDg0KS4KLQotMjAwNi0wMi0wMyAyMToxNDo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogUG9zdCBUWVBFX05PVF9GT1VORCBlcnJvciBtZXNzYWdlIHdoZW4gdHlwZWZpbmRpbmcgaXMgdW5zdWNjZXNzZnVsIGluIHRoZSBhY3RpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUpOgotCSAgUG9zdCBUWVBFX05PVF9GT1VORCBlcnJvciBtZXNzYWdlIHdoZW4gdHlwZWZpbmRpbmcKLQkgIGlzIHVuc3VjY2Vzc2Z1bCBpbiB0aGUgYWN0aXZhdGUgZnVuY3Rpb24gYXMgd2VsbC4KLQotMjAwNi0wMi0wMiAxNjoxNToxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0OiBVcGRhdGVkIGRvYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6Ci0JICBVcGRhdGVkIGRvYy4KLQotMjAwNi0wMi0wMiAxNjoxMjozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBPbmx5IGtlZXAgdHJhY2sgb2YgcHJlcm9sbGFibGUgaXRlbXMgd2hlbiB3ZSBhcmUgcHJlcm9sbGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3RfdW5sb2NrZWQpOgotCSAgT25seSBrZWVwIHRyYWNrIG9mIHByZXJvbGxhYmxlIGl0ZW1zIHdoZW4gd2UgYXJlCi0JICBwcmVyb2xsaW5nLgotCSAgQmVmb3JlIHJlbmRlcmluZyBhZnRlciBwcmVyb2xsLCBhbHdheXMgY2hlY2sgaWYgd2UKLQkgIGhhdmUgcXVldWVkIGl0ZW1zLgotCSAgQWRkZWQgc29tZSBtb3JlIGRlYnVnZ2luZy4KLQotMjAwNi0wMi0wMiAxMzo1ODoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogRml4ZWQgIzMyNjU3NiwgYmVlbiBydW5uaW5nIHRoaXMgZm9yIHF1aXRlIHNvbWUgdGltZSB3aXRoIG5vIHJlZ3Jlc3Npb25zIGF0IGFsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZV9mdW5jKSwgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JICBGaXhlZCAjMzI2NTc2LCBiZWVuIHJ1bm5pbmcgdGhpcyBmb3IgcXVpdGUgc29tZSB0aW1lIHdpdGgKLQkgIG5vIHJlZ3Jlc3Npb25zIGF0IGFsbC4KLQotMjAwNi0wMi0wMiAxMzo0NDowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY29tbW9uL2dzdC5zdXBwOiBBZGRlZCBtb3JlIHN1cHByZXNzaW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbW1vbi9nc3Quc3VwcDoKLQkgIEFkZGVkIG1vcmUgc3VwcHJlc3Npb25zCi0KLTIwMDYtMDItMDIgMTI6MDc6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDogVXBkYXRlZCBkb2N1bWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6Ci0JICBVcGRhdGVkIGRvY3VtZW50LgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2luaXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfZmluYWxpemUpLCAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoKSwKLQkgIChnc3RfYmFzZV9zaW5rX2NvbmZpZ3VyZV9zZWdtZW50KSwgKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzKSwgKGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayksCi0JICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwgKGdzdF9iYXNlX3NpbmtfcmVuZGVyX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWV1ZV9vYmplY3RfdW5sb2NrZWQpLAotCSAgKGdzdF9iYXNlX3NpbmtfcXVldWVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQpLCAoZ3N0X2Jhc2Vfc2lua19jaGFpbiksCi0JICAoZ3N0X2Jhc2Vfc2lua19sb29wKSwgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVsbCksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBUb3RhbGx5IHJlZmFjdG9yZWQgbWF0Y2hpbmcgdGhlIGRlc2lnbiBkb2MuCi0JICBVc2UgdHdvIHNlZ21lbnRzLCBvbmUgdG8gY2xpcCBpbmNvbW1pbmcgYnVmZmVycyBhbmQgYW5vdGhlciB0bwotCSAgcGVyZm9ybSBzeW5jLgotCSAgSGFuZGxlIHF1ZXVlaW5nIGNvcnJlY3RseSwgYnlwYXNzIHRoZSBxdWV1ZSB3aGVuIHBsYXlpbmcuCi0JICBNYWtlIEVPUyBjYW5jZWxhYmxlLgotCSAgSGFuZGxlIGVycm9ycyBjb3JyZWN0bHkgd2hlbiBvcGVyYXRpbmcgaW4gcHVsbCBiYXNlZCBtb2RlLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGZha2VzaW5rX3N1aXRlKToKLQkgIEFkZGVkIG5ldyBjaGVjayBmb3Igc2lua3MuCi0KLTIwMDYtMDItMDIgMTE6NTk6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RzZWdtZW50LmM6IE5vIHJlYXNvbiB0byByZWZ1c2UgdG8gY2xpcCB3aGVuIHN0YXJ0ID09IC0xCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X2NsaXApOgotCSAgTm8gcmVhc29uIHRvIHJlZnVzZSB0byBjbGlwIHdoZW4gc3RhcnQgPT0gLTEKLQotMjAwNi0wMi0wMiAxMToyNDoxOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzLzogZGVzY3JpYmUgZHBhcmFtcyAoY29udHJvbGxlcikgZm9yIHBsdWdpbnMgdW5pZnkgZG9jcyBhIGxpdHRsZSBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9SRUFETUU6Ci0JICAqIGRvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2ludHJvLXByZWZhY2UueG1sOgotCSAgKiBkb2NzL21hbnVhbC9tYW51YWwueG1sOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKLQkgICogZG9jcy9wd2cvaW50cm8tYmFzaWNzLnhtbDoKLQkgICogZG9jcy9wd2cvaW50cm8tcHJlZmFjZS54bWw6Ci0JICAqIGRvY3MvcHdnL3B3Zy54bWw6Ci0JICBkZXNjcmliZSBkcGFyYW1zIChjb250cm9sbGVyKSBmb3IgcGx1Z2lucwotCSAgdW5pZnkgZG9jcyBhIGxpdHRsZSBtb3JlCi0KLTIwMDYtMDItMDIgMDk6NTE6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFkZCBuZXcgQVBJOiBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24oKSBhbmQgZ3N0X2Jpbl9maW5kX3VuY29ubmVjdGVkX3BhZCgpICgjMzI5MDY5KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGVsZW1lbnRfZmluZF91bmNvbm5lY3RlZF9wYWQpLAotCSAgKGdzdF9iaW5fZmluZF91bmNvbm5lY3RlZF9wYWQpLCAoZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKToKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBBZGQgbmV3IEFQSTogZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCkgYW5kCi0JICBnc3RfYmluX2ZpbmRfdW5jb25uZWN0ZWRfcGFkKCkgKCMzMjkwNjkpLgotCi0yMDA2LTAyLTAxIDIyOjQzOjE3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL1JFQURNRTogdW5jb3ZlciBhIG5hc3R5IGRldGFpbCBvZiB0aGUgZG9jcyBidWlsZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL1JFQURNRToKLQkgIHVuY292ZXIgYSBuYXN0eSBkZXRhaWwgb2YgdGhlIGRvY3MgYnVpbGQKLQotMjAwNi0wMi0wMSAwODoyNzoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvUkVBRE1FOgotCSAgdXBkYXRlcyBmb3IgcGx1Z2luIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlcyBmb3IgcGx1Z2luIGRvY3MKLQotMjAwNi0wMS0zMSAxODo0NjoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBEb24ndCBjYWNoZSBkdXJhdGlvbiBtZXNzYWdlcyBpZiB3ZSdyZSBub3QgZ29pbmcgdG8gdXNlIG9yIGZyZWUgdGhlbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fcmVtb3ZlX21lc3NhZ2VzKSwgKGJpbl9xdWVyeV9kdXJhdGlvbl9kb25lKToKLQkgIERvbid0IGNhY2hlIGR1cmF0aW9uIG1lc3NhZ2VzIGlmIHdlJ3JlIG5vdCBnb2luZyB0byB1c2Ugb3IKLQkgIGZyZWUgdGhlbS4KLQotMjAwNi0wMS0zMSAxNjo1NjoyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzLzogbW9yZSBkcGFyYW0gZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRwYXJhbXMueG1sOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1kcGFyYW1zLnhtbDoKLQkgIG1vcmUgZHBhcmFtIGRvY3MKLQkgICogZ3N0L2dzdGluZGV4LmM6Ci0JICBmaXggZG9jcwotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2xpYi5jOiAoZ3N0X2NvbnRyb2xsZXJfaW5pdCk6Ci0JICBpbml0IGp1c3Qgb25jZQotCi0yMDA2LTAxLTMxIDEwOjE2OjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogYWxzbyBzaG93IGZpbGUvbGluZS9mdW5jIGlmIG5vIGFkZGl0aW9uYWwgZGVidWcgd2FzIGdpdmVuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCk6Ci0JICBhbHNvIHNob3cgZmlsZS9saW5lL2Z1bmMgaWYgbm8gYWRkaXRpb25hbCBkZWJ1ZyB3YXMgZ2l2ZW4KLQotMjAwNi0wMS0zMCAyMzo1Mjo1MiArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi92czcvZ3JhbW1hci52Y3Byb2o6IGFjdGl2YXRlIGNvcHkgb2YgYXV0b2dlbmVyYXRlZCBmaWxlcyBmb3IgUmVsZWFzZSBtb2RlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvdnM3L2dyYW1tYXIudmNwcm9qOgotCSAgYWN0aXZhdGUgY29weSBvZiBhdXRvZ2VuZXJhdGVkIGZpbGVzIGZvciBSZWxlYXNlIG1vZGUKLQotMjAwNi0wMS0zMCAyMjoyOTowMyArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogZXhwb3J0IGdzdF92YWx1ZV9jb21wYXJlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBleHBvcnQgZ3N0X3ZhbHVlX2NvbXBhcmUKLQotMjAwNi0wMS0zMCAyMTo1NzowMCArMDAwMCAgUGhpbGlwcGUgUm91cXVpZXIgPGJvbmZpcmUtYXBwQHdhbmFkb28uZnI+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzogKF9kb19pbml0KSwKLQkgIChnc3RfZmRfc2lua19iYXNlX2luaXQpLCAoZ3N0X2ZkX3NpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2ZkX3NpbmtfaW5pdCksIChnc3RfZmRfc2lua19kaXNwb3NlKSwgKGdzdF9mZF9zaW5rX3F1ZXJ5KSwKLQkgIChnc3RfZmRfc2lua19yZW5kZXIpLCAoZ3N0X2ZkX3NpbmtfY2hlY2tfZmQpLCAoZ3N0X2ZkX3Npbmtfc3RhcnQpLAotCSAgKGdzdF9mZF9zaW5rX3N0b3ApLCAoZ3N0X2ZkX3NpbmtfdW5sb2NrKSwgKGdzdF9mZF9zaW5rX3VwZGF0ZV9mZCksCi0JICAoZ3N0X2ZkX3Npbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9mZF9zaW5rX3VyaV9nZXRfdHlwZSksCi0JICAoZ3N0X2ZkX3NpbmtfdXJpX2dldF9wcm90b2NvbHMpLCAoZ3N0X2ZkX3NpbmtfdXJpX2dldF91cmkpLAotCSAgKGdzdF9mZF9zaW5rX3VyaV9zZXRfdXJpKSwgKGdzdF9mZF9zaW5rX3VyaV9oYW5kbGVyX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oOgotCSAgUG9ydCBmZHNpbmsgdG8gMC4xMCAocGF0Y2ggYnkgUGhpbGlwcGUgUm91cXVpZXIpIChGaXhlcyAjMzI1NDkwKQotCi0yMDA2LTAxLTMwIDIxOjExOjM4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRwYXJhbXMueG1sOiBkZXNjcmliZSBjb250cm9sbGVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6Ci0JICBkZXNjcmliZSBjb250cm9sbGVyCi0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sOgotCSAgKiBkb2NzL21hbnVhbC9tYW51YWwueG1sOgotCSAgKiBkb2NzL21hbnVhbC90aXRsZXBhZ2UueG1sOgotCSAgKiBkb2NzL3B3Zy9wd2cueG1sOgotCSAgKiBkb2NzL3B3Zy90aXRsZXBhZ2UueG1sOgotCSAgY2xlYW51cCB4bWwgKG1vcmUgdG8gY29tZSkKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICBmaXggdHlwbwotCi0yMDA2LTAxLTMwIDIwOjM2OjUxICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHdpbjMyL3ZzNi9ncmFtbWFyLmRzcDogYWRkIGF1dG9nZW4gb2YgZ3N0bWFyc2hhbC5jLGggZm9yIFJlbGVhc2UgbW9kZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL3ZzNi9ncmFtbWFyLmRzcDoKLQkgIGFkZCBhdXRvZ2VuIG9mIGdzdG1hcnNoYWwuYyxoIGZvciBSZWxlYXNlIG1vZGUKLQotMjAwNi0wMS0zMCAxNjowNzo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBCYXNlc2luayBjbGVhbnVwcywgcmVtb3ZlIHNvbWUgb2xkIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZW1wdHkpLCAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAotCSAgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX2lzX3ByZXJvbGxlZCksIChnc3RfYmFzZV9zaW5rX3dhaXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9ldmVudCksCi0JICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RlYWN0aXZhdGUpLCAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZSksCi0JICAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdWxsKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwKLQkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIEJhc2VzaW5rIGNsZWFudXBzLCByZW1vdmUgc29tZSBvbGQgY29kZS4KLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIHN1YmNsYXNzIGNhbiBwcmVyb2xsIGluIHRoZSByZW5kZXIKLQkgIG1ldGhvZCAobW9zdGx5IGF1ZGlvc2lua3MpLgotCSAgSGFuZGxlIG1vcmUgZXZlbnRzLgotCSAgUmVtb3ZlIHNvbWUgbG9ja3MgYXJvdW5kIHZhcmlhYmxlcyB0aGF0IGFyZSBub3cgcHJvdGVjdGVkCi0JICB3aXRoIHRoZSBQUkVST0xMX0xPQ0sgKGNsb2NrX2lkLCBmbHVzaGluZywgLi4pLgotCSAgT3B0aW1pemUgcG9zaXRpb24gcXVlcnkgc29tZSBtb3JlLCBkbyBjb3JyZWN0IGxvY2tpbmcuCi0JICBSZW1vdmUgb2xkIGNvZGUgdG8gcHVzaCBxdWV1ZSBpbiBzdGF0ZSBjaGFuZ2UsIHRoaXMgaXMgbm90Ci0JICBuZWVkZWQgYW55bW9yZSBzaW5jZSBwcmVyb2xsIGJsb2NrcyBvbiBhbGwgcHJlcm9sbGFibGUgaXRlbXMKLQkgIG5vdy4KLQkgIEFsbW9zdCBpbXBsZW1lbnRlZCBhcyBkZXNjcmliZWQgaW4gZGVzaWduIGRvYy4KLQotMjAwNi0wMS0zMCAxNTo1Nzo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiBXYWl0IGZvciByZWZjb3VudCB0byBzZXR0bGUgZG93biBiZWZvcmUgY2hlY2tpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgV2FpdCBmb3IgcmVmY291bnQgdG8gc2V0dGxlIGRvd24gYmVmb3JlIGNoZWNraW5nLgotCi0yMDA2LTAxLTMwIDE1OjE1OjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6IFBzZXVkbyBjb2RlIG92ZXJ2aWV3IG9mIGRlc2lyZWQgc2luayBiZWhhdmlvdXIgcmVnYXJkaW5nIHByZXJvbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0OgotCSAgUHNldWRvIGNvZGUgb3ZlcnZpZXcgb2YgZGVzaXJlZCBzaW5rIGJlaGF2aW91ciByZWdhcmRpbmcKLQkgIHByZXJvbGwuCi0KLTIwMDYtMDEtMzAgMTQ6Mjg6MDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBCbGVoLCBmb3Jnb3QgdG8gY29tbWl0IHRoZSBjaGFuZ2Vsb2cgZW50cnkgb24gU2F0dXJkYXkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJsZWgsIGZvcmdvdCB0byBjb21taXQgdGhlIGNoYW5nZWxvZyBlbnRyeSBvbiBTYXR1cmRheS4KLQotMjAwNi0wMS0yOSAyMTo1NjowMCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi92czYvZ3JhbW1hci5kc3A6IGZpeCBzb21lIGJ1Z3MgaW4gYXV0b2dlbmVyYXRlZCBmaWxlcyBmb3IgUmVsZWFzZSBtb2RlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvdnM2L2dyYW1tYXIuZHNwOgotCSAgZml4IHNvbWUgYnVncyBpbiBhdXRvZ2VuZXJhdGVkIGZpbGVzIGZvciBSZWxlYXNlIG1vZGUKLQotMjAwNi0wMS0yOSAxOToyNDoxOCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi9jb21tb24vOiBleHBvcnQgc29tZSBuZXcgc3ltYm9sczogZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQsIGdzdF9pdGVyYXRvcl9uZXh0LCBnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZXhwb3J0IHNvbWUgbmV3IHN5bWJvbHM6IGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0LAotCSAgZ3N0X2l0ZXJhdG9yX25leHQsIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdAotCi0yMDA2LTAxLTI5IDE3OjM3OjA4ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmM6IFNldCBwYWQgZnVuY3Rpb25zIHVuY29uZGl0aW9uYWxseS4gRml4ZXMgIzMyOTEwNS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMS0yOSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldF91bmxvY2tlZCk6Ci0JICBTZXQgcGFkIGZ1bmN0aW9ucyB1bmNvbmRpdGlvbmFsbHkuIEZpeGVzICMzMjkxMDUuCi0KLTIwMDYtMDEtMjkgMTY6NTQ6NDAgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgd2luMzIvdnM4OiBhZGQgdnM4IHByb2plY3QgZmlsZXMgY3JlYXRlZCBieSBTZXJnZXkgU2NvYmljaAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL3ZzODoKLQkgIGFkZCB2czggcHJvamVjdCBmaWxlcyBjcmVhdGVkIGJ5IFNlcmdleSBTY29iaWNoCi0KLTIwMDYtMDEtMjggMDA6NTk6MzcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogRG9uJ3QgbGVhayBwYWQgcmVmZXJlbmNlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3VubGlua19wYWRzKToKLQkgIERvbid0IGxlYWsgcGFkIHJlZmVyZW5jZXMuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzaW5rLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IGEgYnVuY2ggb2YgbGVha3MuIE1ha2UgZ2VuZXJpYy9zaW5rcy5jCi0JICB1c2UgYSBiaXQgbGVzcyBjcHUgYnkgc2xvd2luZyB0aGUgYnVmZmVyIHJhdGUKLQkgIGJldHdlZW4gZmFrZXNyYyBhbmQgZmFrZXNpbmsuCi0KLTIwMDYtMDEtMjcgMjI6MzQ6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jIGZpeGVzLCB0byBsaW5rIHRvIGZ1bmN0aW9uLCBqdXN0IHdyaXRlIGdzdF9jb29sX2Z1bmN0aW9uKCksIGRvbid0IHByZWZpeCB3aXRoICcjJwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZW5kX2V2ZW50KToKLQkgICogZ3N0L2dzdGV2ZW50LmM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6Ci0JICAqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgKiBnc3QvZ3N0dXJpLmM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBkb2MgZml4ZXMsIHRvIGxpbmsgdG8gZnVuY3Rpb24sIGp1c3Qgd3JpdGUgZ3N0X2Nvb2xfZnVuY3Rpb24oKSwgZG9uJ3QKLQkgIHByZWZpeCB3aXRoICcjJwotCi0yMDA2LTAxLTI3IDE2OjU5OjU3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogQWx3YXlzIHByZWZlciBhbiBhY3R1YWwgcmV0dXJuIHZhbHVlIGZyb20gYSBzcmMgcGFkIGluIHBsYWNlIG9mIE5PVF9MSU5LRUQuIFRoaXMgbWVhbnMgd2UgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfZG9fcHVzaCksCi0JICAoZ3N0X3RlZV9oYW5kbGVfYnVmZmVyKToKLQkgIEFsd2F5cyBwcmVmZXIgYW4gYWN0dWFsIHJldHVybiB2YWx1ZSBmcm9tIGEgc3JjCi0JICBwYWQgaW4gcGxhY2Ugb2YgTk9UX0xJTktFRC4gVGhpcyBtZWFucyB3ZSByZXR1cm4KLQkgIFdST05HX1NUQVRFIHdoZW4gYWxsIHNyYyBwYWRzIGFyZSBXUk9OR19TVEFURQotCSAgaW5zdGVhZCBvZiBOT1RfTElOS0VELgotCSAgTG9jayB3aGVuIHJlcGxhY2luZyB0aGUgbGFzdCBtZXNzYWdlIHRvIHByZXZlbnQKLQkgIHJhY2luZyB3aXRoIHRoZSBnZXRfcHJvcGVydHkgbWV0aG9kLgotCSAgQWRkIGRlYnVnIG91dHB1dAotCi0yMDA2LTAxLTI3IDExOjUzOjIwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgYSB2ZXJ5IHNpbXBsZSBjaGVjayB0aGF0IHNob3VsZCBoYXZlIGNhdWdodCB0aGUgbWVtbGVhayBJIGZpeGVkIGxhc3QgbmlnaHQgKGlmIG5vdCBmb3IgdGhlIHNsaWNlIGFsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RxdWVyeS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0cXVlcnlfc3VpdGUpLAotCSAgKG1haW4pOgotCSAgQWRkIGEgdmVyeSBzaW1wbGUgY2hlY2sgdGhhdCBzaG91bGQgaGF2ZSBjYXVnaHQgdGhlIG1lbWxlYWsgSSBmaXhlZAotCSAgbGFzdCBuaWdodCAoaWYgbm90IGZvciB0aGUgc2xpY2UgYWxsb2NhdG9yIGhpZGluZyBpdCkKLQotMjAwNi0wMS0yNyAwMTo0ODozNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogQ2xlYW4gdXAgcmVmZXJlbmNlcyB0byB0aGUgY2xvY2sgcHJvdmlkZXIgd2hlbiBkaXNwb3NlZCBvciB3aGVuIGhhbmRsaW5nIGEgY2xvY2stbG9zdCBtZXNzYWdlIGZyb20gaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9kaXNwb3NlKSwgKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKSwKLQkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyksCi0JICAoYmluX3F1ZXJ5X2R1cmF0aW9uX2ZvbGQpLCAoYmluX3F1ZXJ5X2dlbmVyaWNfZm9sZCk6Ci0JICBDbGVhbiB1cCByZWZlcmVuY2VzIHRvIHRoZSBjbG9jayBwcm92aWRlciB3aGVuIGRpc3Bvc2VkIG9yIHdoZW4KLQkgIGhhbmRsaW5nIGEgY2xvY2stbG9zdCBtZXNzYWdlIGZyb20gaXQuCi0JICBVbnJlZiBzaW5rcyB3aGVuIHBlcmZvcm1pbmcgYSBxdWVyeSB2aWEgZ3N0X2l0ZXJhdG9yX2ZvbGQsIGFzIHRoZQotCSAgZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzIGl0ZXJhdG9yIHJlZnMgZWFjaCBpdGVtLiAoRml4ZXMgIzMyMzg3NCkKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfY2xhc3NfaW5pdCksIChnc3RfY2xvY2tfZGlzcG9zZSksCi0JICAoZ3N0X2Nsb2NrX3NldF9tYXN0ZXIpOgotCSAgRHJvcCBvdXIgcmVmZXJlbmNlIHRvIHRoZSBtYXN0ZXIgY2xvY2ssIGlmIGFueSwgd2hlbiB3ZSBhcmUgZGlzcG9zZWQuCi0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9kaXNwb3NlKToKLQkgIENoYWluIHVwIGluIGRpc3Bvc2UuCi0KLTIwMDYtMDEtMjcgMDE6MTM6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3JhbmRvbS9pMThuOgotCSAgYWRkIG5vdGVzIG9uIGkxOG4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG5vdGVzIG9uIGkxOG4KLQotMjAwNi0wMS0yNiAxMjo1OTo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IEFkZCBzb21lIGRlYnVnZ2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpOgotCSAgQWRkIHNvbWUgZGVidWdnaW5nLgotCi0yMDA2LTAxLTI2IDEyOjQwOjE3ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogQXBwbHkgcGF0Y2ggZnJvbSAjMzI4NzE1LiBUZWUgbm93IGhhbmRsZXMgcGFkIGJlaW5nIE5PVF9MSU5LRUQgb3IgaW4gV1JPTkdfU1RBVEUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDEtMjYgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfZG9fcHVzaCksCi0JICAoZ3N0X3RlZV9oYW5kbGVfYnVmZmVyKTogQXBwbHkgcGF0Y2ggZnJvbSAjMzI4NzE1LiBUZWUgbm93Ci0JICBoYW5kbGVzIHBhZCBiZWluZyBOT1RfTElOS0VEIG9yIGluIFdST05HX1NUQVRFLgotCi0yMDA2LTAxLTI2IDA4OjU3OjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHdpbjMyL01BTklGRVNUOiBtb3JlIHVwZGF0aW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvTUFOSUZFU1Q6Ci0JICBtb3JlIHVwZGF0aW5nCi0KLTIwMDYtMDEtMjYgMDg6Mzk6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgd2luMzIvTUFOSUZFU1Q6IHJlbW92ZSBvYnNvbGV0ZSBlbnRyeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL01BTklGRVNUOgotCSAgcmVtb3ZlIG9ic29sZXRlIGVudHJ5Ci0KLTIwMDYtMDEtMjYgMDY6NTc6MTQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgYWRkZWQgY29kZSBmb3IgZG93bnN0cmVhbSBldmVudHMsIHJldmlld2VkIGRvY3MgaW4gZ3N0ZXZlbnQuYwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9lbGVtZW50X2lzX3NyYyksIChzcmNfaXRlcmF0b3JfZmlsdGVyKSwKLQkgIChnc3RfYmluX2l0ZXJhdGVfc291cmNlcyksIChnc3RfYmluX3NlbmRfZXZlbnQpOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZW5kX2V2ZW50KToKLQkgICogZ3N0L2dzdGV2ZW50LmM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2VuZF9ldmVudCk6Ci0JICBhZGRlZCBjb2RlIGZvciBkb3duc3RyZWFtIGV2ZW50cywgcmV2aWV3ZWQgZG9jcyBpbiBnc3RldmVudC5jCi0KLTIwMDYtMDEtMjUgMTg6MDc6MDIgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFdlIG9ubHkgcXVlcnkgcG9zaXRpb24gdXNpbmcgdGhlIGNsb2NrIGluIHRoZSBwbGF5aW5nIHN0YXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAxLTI1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIFdlIG9ubHkgcXVlcnkgcG9zaXRpb24gdXNpbmcgdGhlIGNsb2NrIGluIHRoZSBwbGF5aW5nIHN0YXRlLgotCSAgUXVlcnkgcGVlciBpbiB0aGUgb3RoZXIgY2FzZXMuCi0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDogVXBkYXRlcy4KLQotMjAwNi0wMS0yNCAxNjoyMzoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IEEgY2xvY2sgZW50cnkgdGhhdCBpcyBzY2hlZHVsZWQgZm9yIHRoZSBleGFjdCB0aW1lIG9mIHRoZSBjbG9jayBpcyBzdGlsbCBpbiB0aW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X3VubG9ja2VkKToKLQkgIEEgY2xvY2sgZW50cnkgdGhhdCBpcyBzY2hlZHVsZWQgZm9yIHRoZSBleGFjdCB0aW1lIG9mIHRoZQotCSAgY2xvY2sgaXMgc3RpbGwgaW4gdGltZS4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpOgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgotCi0yMDA2LTAxLTIzIDEyOjM3OjMzICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHdpbjMyL3ZzNzogQWRkIG5ldyB2czcgcHJvamVjdCBmaWxlcyBhbmQgc29sdXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvdnM3IDoKLQkgIEFkZCBuZXcgdnM3IHByb2plY3QgZmlsZXMgYW5kIHNvbHV0aW9uLgotCi0yMDA2LTAxLTIzIDEyOjIzOjAwICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHdpbjMyL3ZzNzogYWxsIGZpbGVzIHJlbW92ZWQgYXMgdGhleSB3ZXJlIG91dC1kYXRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi92czc6Ci0JICBhbGwgZmlsZXMgcmVtb3ZlZCBhcyB0aGV5IHdlcmUgb3V0LWRhdGVkLgotCi0yMDA2LTAxLTIwIDE5OjAxOjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZG9jcy9yYW5kb20vcmVsZWFzZTogdXBkYXRlIG5vdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIHVwZGF0ZSBub3RlcwotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2luaXQpOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX25ldyk6Ci0JICAqIGdzdC9nc3RidXMuaDoKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfaW5pdCk6Ci0JICB1c2UgZ3N0X2J1c19uZXcoKSwgaW1wcm92ZSBsb2dnaW5nLCBmaXggZG9jcwotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICB1cGRhdGUgZm9yIGN2cyBidWlsZAotCi0yMDA2LTAxLTIwIDE4OjU5OjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgYXV0b2dlbi5zaDogdXAgcmVxdWlyZWQgdmVyc2lvbiBvZiBhdXRvbWFrZSB0byAxLjcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBhdXRvZ2VuLnNoOgotCSAgdXAgcmVxdWlyZWQgdmVyc2lvbiBvZiBhdXRvbWFrZSB0byAxLjcKLQotMjAwNi0wMS0yMCAxMjo1Mzo0MCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogZXhwb3J0IGdzdF9idWZmZXJfaXNfbWV0YWRhdGFfd3JpdGFibGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGV4cG9ydCBnc3RfYnVmZmVyX2lzX21ldGFkYXRhX3dyaXRhYmxlCi0KLTIwMDYtMDEtMjAgMTE6NDY6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFkZCBnc3RfZXZlbnRfcmVwbGFjZSgpICgjMzI3MDAxKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgQWRkIGdzdF9ldmVudF9yZXBsYWNlKCkgKCMzMjcwMDEpCi0KLTIwMDYtMDEtMjAgMDk6NTY6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogTWFrZSBpdCBhY3R1YWxseSBjb21waWxlIHRvby4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9saW5rX2NoZWNrX2NvbXBhdGlibGVfdW5sb2NrZWQpOgotCSAgTWFrZSBpdCBhY3R1YWxseSBjb21waWxlIHRvby4uCi0KLTIwMDYtMDEtMjAgMDk6NTM6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjYXBzLmM6IENsYXJpZnkgYmVoYXZpb3VyIG9mIF9pc19lcXVhbCgpIHdoZW4gcGFzc2luZyBOVUxMIHBhcmFtZXRlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNhcHMuYzoKLQkgIENsYXJpZnkgYmVoYXZpb3VyIG9mIF9pc19lcXVhbCgpIHdoZW4gcGFzc2luZyBOVUxMIHBhcmFtZXRlcnMuCi0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfbGlua19jaGVja19jb21wYXRpYmxlX3VubG9ja2VkKSwKLQkgIChnc3RfcGFkX3NldF9jYXBzKToKLQkgIENsZWFudXBzLiBEb24ndCB1bnJlZiBOVUxMIGNhcHMuCi0JICBXaGVuIHNldHRpbmcgdGhlIHNhbWUgY2FwcywgcHJvdGVjdCBjYXBzIG9mIHRoZSBwYWQgd2l0aAotCSAgcHJvcGVyIGxvY2suCi0JICBVc2UgZnVsbCBmdW5jdGlvbmFsaXR5IG9mIF9pc19lcXVhbCgpIHdoZW4gY29tcGFyaW5nIGNhcHMuCi0KLTIwMDYtMDEtMjAgMDk6MjY6MDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IERvbid0IGxvb3AgaW5maW5pdGVseSBpZiB0aGVyZSBhcmUgbm8gYnVmZmVycyB0byBwcmVzZW50LiBQYXJ0aWFsbHkgZml4ZXMgIzMyNzE5NywgYnUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2lzX2NvbGxlY3RlZCk6Ci0JICBEb24ndCBsb29wIGluZmluaXRlbHkgaWYgdGhlcmUgYXJlIG5vIGJ1ZmZlcnMgdG8gcHJlc2VudC4gUGFydGlhbGx5Ci0JICBmaXhlcyAjMzI3MTk3LCBidXQgY29sbGVjdHBhZHMgaXMganVzdCBicm9rZW4gZm9yIHJldXNpbmcgZWxlbWVudHMKLQkgIHRvIGRvIG11bHRpcGxlIGVuY29kZXMgYXRtLgotCi0yMDA2LTAxLTIwIDA5OjEyOjEwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdG9vbHMvOiBVUkxfSEFORExFUiBpcyBub3QgYSBwbHVnaW4gZmVhdHVyZSB3ZSBjYW4gc2VhcmNoIGZvciBpbiB0aGUgcmVnaXN0cnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfZmVhdHVyZXMpOgotCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOiAobWFpbik6Ci0JICBVUkxfSEFORExFUiBpcyBub3QgYSBwbHVnaW4gZmVhdHVyZSB3ZSBjYW4gc2VhcmNoIGZvciBpbgotCSAgdGhlIHJlZ2lzdHJ5LgotCi0yMDA2LTAxLTE5IDE4OjA2OjE4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBXaGVuIGFjdGl2YXRpbmcsIGRvIHNyYyBwYWRzIGZpcnN0LCB0aGVuIHNpbmsgcGFkcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSk6Ci0JICBXaGVuIGFjdGl2YXRpbmcsIGRvIHNyYyBwYWRzIGZpcnN0LCB0aGVuIHNpbmsgcGFkcy4KLQkgIFdoZW4gZGUtYWN0aXZhdGluZywgZG8gc2luayBwYWRzIGZpcnN0LCB0aGVuIHNyYyBwYWRzLgotCi0yMDA2LTAxLTE5IDE0OjAyOjA0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252IHRvIHRoZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiB0byB0aGUgZG9jcwotCi0yMDA2LTAxLTE5IDEzOjMwOjMxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdGV2ZW50LmM6IEZpeCBkb2NzIHR5cG8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIEZpeCBkb2NzIHR5cG8KLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfcXVldWVfY2hhaW4pLCAoZ3N0X3F1ZXVlX3B1c2hfb25lKSwgKGdzdF9xdWV1ZV9sb29wKToKLQkgIERvIHNvbWUgcmVmYWN0b3JpbmcuIERvZXNuJ3QgYWN0dWFsbHkgY2hhbmdlIGZ1bmN0aW9uYWxpdHksCi0JICBidXQgbWFrZXMgbGFuZGluZyB0aGUgRFJBSU4gZXZlbnQgZWFzaWVyIGxhdGVyLgotCi0yMDA2LTAxLTE5IDEwOjM5OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbDogVXBkYXRlIGZyb20gMC45LnggdG8gMC4xMCBBUEkgYW5kIG1ha2UgZXhhbXBsZSBhIGJpdCBjbGVhcmVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sOgotCSAgVXBkYXRlIGZyb20gMC45LnggdG8gMC4xMCBBUEkgYW5kIG1ha2UgZXhhbXBsZSBhIGJpdAotCSAgY2xlYXJlci4KLQotMjAwNi0wMS0xOSAwOToyNDowMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IEFkZCBnc3RfYnVmZmVyXyhpc3xtYWtlKV9tZXRhZGF0YV93cml0YWJsZSBtZXRob2RzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBBZGQgZ3N0X2J1ZmZlcl8oaXN8bWFrZSlfbWV0YWRhdGFfd3JpdGFibGUgbWV0aG9kcy4KLQotMjAwNi0wMS0xOSAwOTowODoxNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQ6IFVwZGF0ZSBzcGFyc2Ugc3RyZWFtcyBkb2MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXNwYXJzZXN0cmVhbXMudHh0OgotCSAgVXBkYXRlIHNwYXJzZSBzdHJlYW1zIGRvYwotCi0yMDA2LTAxLTE5IDA5OjAyOjEyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OiBSZW1vdmUgbWVudGlvbiBvZiBGSUxMRVIgZXZlbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkgIFJlbW92ZSBtZW50aW9uIG9mIEZJTExFUiBldmVudHMuCi0JICBBZGQgRFJBSU4gZXZlbnQuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQ6Ci0JICBXcml0ZSBzb21lIHRoaW5ncyBhYm91dCB1c2luZyBORVdTRUdNRU5UIHRvIGtlZXAgc3BhcnNlIHN0cmVhbXMKLQkgIGZsb3dpbmcuCi0KLTIwMDYtMDEtMTggMTg6NTY6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RiaW4uYzogR3VhcmQgZ3N0X29iamVjdF91bnJlZiBjYWxsIGFnYWluc3QgYSBOVUxMIG9iamVjdCAoZGlzcG9zZSBjYW4gdGhlb3JldGljYWxseSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZGlzcG9zZSk6Ci0JICBHdWFyZCBnc3Rfb2JqZWN0X3VucmVmIGNhbGwgYWdhaW5zdCBhIE5VTEwgb2JqZWN0IChkaXNwb3NlCi0JICBjYW4gdGhlb3JldGljYWxseSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMpLgotCi0yMDA2LTAxLTE4IDE4OjA1OjQzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OiBSZW1vdmUgbWVudGlvbiBvZiBGSUxMRVIgZXZlbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkgIFJlbW92ZSBtZW50aW9uIG9mIEZJTExFUiBldmVudHMuCi0JICBBZGQgRFJBSU4gZXZlbnQuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQ6Ci0JICBXcml0ZSBzb21lIHRoaW5ncyBhYm91dCB1c2luZyBORVdTRUdNRU5UIHRvIGtlZXAgc3BhcnNlIHN0cmVhbXMKLQkgIGZsb3dpbmcuCi0KLTIwMDYtMDEtMTggMTg6MDE6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEFkZGVkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19pZF93YWl0KToKLQkgIEFkZGVkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkgIEFkZGVkIG1vcmUgZG9jcy4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19jaGFpbik6Ci0JICBBZGRlZCBzb21lIGNvbW1lbnRzLgotCi0yMDA2LTAxLTE4IDE3OjU5OjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSAgSWdub3JlIGZha2VzaW5rIHRlc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIElnbm9yZSBmYWtlc2luayB0ZXN0LgotCi0yMDA2LTAxLTE4IDE3OjU3OjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay86IEFkZGVkIGZha2VzaW5rIHRlc3QgdGhhdCBjaGVja3MgcHJlcm9sbGluZyBhbmQgY2xpcHBpbmcgYmVoYXZpb3VyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jOiAoY2hhaW5fYXN5bmNfYnVmZmVyKSwKLQkgIChjaGFpbl9hc3luYyksIChjaGFpbl9hc3luY19yZXR1cm4pLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGZha2VzaW5rX3N1aXRlKSwgKG1haW4pOgotCSAgQWRkZWQgZmFrZXNpbmsgdGVzdCB0aGF0IGNoZWNrcyBwcmVyb2xsaW5nIGFuZCBjbGlwcGluZwotCSAgYmVoYXZpb3VyLgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIE1ha2UgY2hlY2sgcnVuIGZhc3RlciBzbyB0aGF0IGJ1aWxkYm90cyBkb24ndCB0aW1lb3V0LgotCi0yMDA2LTAxLTE4IDE3OjE4OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNvbWUgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpOgotCSAgU29tZSBjbGVhbnVwcy4KLQkgIFdoZW4gdGhlIHNpbmsgZmluaXNoZXMgYmxvY2tpbmcgb24gdGhlIHByZXJvbGwgYnVmZmVyLCBpdCBjYW4KLQkgIGltbWVkaWF0bHkgcmVuZGVyIGl0IGluc3RlYWQgb2YgcmVuZGVyaW5nIHdoZW4gdGhlIG5leHQgYnVmZmVyCi0JICBhcnJpdmVzLgotCi0yMDA2LTAxLTE4IDE2OjQwOjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNtYWxsIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3Npbmtfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhaW4pOgotCSAgU21hbGwgY2xlYW51cHMuCi0JICBHU1RfRUxFTUVOVF9DTE9DSyBhbmQgc3luYyBhcmUgcHJvdGVjdGVkIHdpdGggTE9DSy4KLQkgIERvbid0IHN0b3JlIF9sYXN0X3N0b3AgaWYgdGhlIGJ1ZmZlciBpcyBkcm9wcGVkLgotCi0yMDA2LTAxLTE4IDE2OjMxOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAnaGF2ZS10eXBlJyBzaWduYWwgbmVlZHMgdG8gYmUgR19TSUdOQUxfUlVOX0ZJUlNULCBhcyBpdCBpcyB0aGUgb2JqZWN0IG1ldGhvZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jbGFzc19pbml0KToKLQkgICdoYXZlLXR5cGUnIHNpZ25hbCBuZWVkcyB0byBiZSBHX1NJR05BTF9SVU5fRklSU1QsIGFzIGl0IGlzIHRoZQotCSAgb2JqZWN0IG1ldGhvZCBoYW5kbGVyIHRoYXQgc2V0cyB0aGUgY2FwcyBvbiB0aGUgcGFkIGFuZCB3ZSB3YW50Ci0JICB0aGF0IHRvIGhhcHBlbiBiZWZvcmUgd2UgZW1pdCB0aGUgc2lnbmFsIChmaXhlcyBlLmcuIGZlZWRpbmcgYQotCSAgcGxhaW4gdGV4dCBmaWxlIHRvIGRlY29kZWJpbikuCi0KLTIwMDYtMDEtMTggMTE6NDQ6NTUgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSAgYWRkIE1QTCBhbmQgUHJvcGVyaWV0YXJ0IHRvIGxpc3Qgb2YgbGljZW5zZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIE1QTCBhbmQgUHJvcGVyaWV0YXJ0IHRvIGxpc3Qgb2YgbGljZW5zZXMKLQotMjAwNi0wMS0xOCAwOTo0MjoxMiArMDAwMCAgVG9yc3RlbiBTY2hvZW5mZWxkIDxrYWZmZWV0aXNjaEBnbXguZGU+Ci0KLQkgIGdzdC9nc3RpbmRleC5oIChnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udik6IEFkZCB0byBoZWFkZXIuIFRoZSBzeW1ib2wgd2FzIGV4cG9ydGVkIGJlZm9yZSwgaXQgYXBwZWFycyB0aGlzIHdhcyBqdXN0IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAxLTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0aW5kZXguaCAoZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbnYpOiBBZGQgdG8gaGVhZGVyLiBUaGUKLQkgIHN5bWJvbCB3YXMgZXhwb3J0ZWQgYmVmb3JlLCBpdCBhcHBlYXJzIHRoaXMgd2FzIGp1c3QgYW4gb3ZlcnNpZ2h0LgotCSAgRml4ZXMgIzE2ODcwMy4KLQkgIFBhdGNoIGJ5OiBUb3JzdGVuIFNjaG9lbmZlbGQgPGthZmZlZXRpc2NoIGF0IGdteC5kZT4KLQkgICogZ3N0L2dzdGluZGV4LmMgKGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252KTogQ2hhbmdlZCBpbnQgaW4KLQkgIHByb3RvdHlwZSB0byBnaW50LiBPSyBzaW5jZSB0aGlzIHByb3RvdHlwZSB3YXMgbm90IGluIHRoZSBoZWFkZXIuCi0KLTIwMDYtMDEtMTcgMTY6Mzk6MjMgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtbGljZW5zaW5nLnhtbDoKLQkgIHNtYWxsIGZpeCB0byB0aGUgcHJvcG9zZWQgbGljZW5zZSBjbGF1c2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc21hbGwgZml4IHRvIHRoZSBwcm9wb3NlZCBsaWNlbnNlIGNsYXVzZQotCi0yMDA2LTAxLTE3IDEyOjUzOjA3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeS5jIChfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zKTogTG9jayB0aGUgcmVnaXN0cnkgd2hpbGUgd2UgcmVtb3ZlIHBsdWdpbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDEtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jIChfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zKTogTG9jayB0aGUKLQkgIHJlZ2lzdHJ5IHdoaWxlIHdlIHJlbW92ZSBwbHVnaW5zLgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jIChwcmludF9lbGVtZW50X2luZm8pOiBEb24ndCB1bnJlZiB0aGUKLQkgIGZhY3RvcnkgYXJnLCB0aGF0IHNob3VsZCBiZSB0aGUgcmVzcG9uc2liaWxpdHkgb2Ygd2hhdGV2ZXIgY29kZQotCSAgcmVjZWl2ZWQgdGhlIHJlZi4gRml4ZXMgYSBkb3VibGUtZnJlZSB3aGVuIGNhbGxlZCBmcm9tCi0JICBwcmludF9lbGVtZW50X2xpc3QgdmlhIGdzdC1pbnNwZWN0LTAuMTAgLWEuIEZpeGVzICMzMjczMjQuCi0JICAobWFpbik6IFVucmVmIHRoZSBmYWN0b3J5IGlmIHdlIGhhdmUgb25lLgotCSAgKHByaW50X2VsZW1lbnRfbGlzdCk6IE5vIGNoYW5nZSAtLSByZWxpZXMgb24gdGhlCi0JICBwbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgdG8gZnJlZSB0aGUgbGlzdCBvZiBmZWF0dXJlcy4KLQotMjAwNi0wMS0xNyAxMjoxNDoyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIFJlcGxhY2UgZ3N0X2J1ZmZlcl8obWFrZXxpcylfbWV0YWRhdGFfd3JpdGFibGUgcGF0Y2ggbm93IHRoYXQgdGhlIHJlbGVhc2UgaXMgb3V0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfaXNfbWV0YWRhdGFfd3JpdGFibGUpLAotCSAgKGdzdF9idWZmZXJfbWFrZV9tZXRhZGF0YV93cml0YWJsZSk6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1Zik6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdGVzdF9zdWl0ZSk6Ci0JICBSZXBsYWNlIGdzdF9idWZmZXJfKG1ha2V8aXMpX21ldGFkYXRhX3dyaXRhYmxlIHBhdGNoIG5vdwotCSAgdGhhdCB0aGUgcmVsZWFzZSBpcyBvdXQuCi0KLTIwMDYtMDEtMTcgMTI6MDg6NDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5LmM6IFJlZmxvdyBkZXNpZ24gY29tbWVudC4gVXBkYXRlIHNvIGFzIHRvIHNwZWFrIGluIHRoZSBwcmVzZW50IHRlbnNlIHdpdGhvdXQgcmVmZXJlbmNlIHRvIHZlcnNpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAxLTE3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogUmVmbG93IGRlc2lnbiBjb21tZW50LiBVcGRhdGUgc28gYXMgdG8gc3BlYWsKLQkgIGluIHRoZSBwcmVzZW50IHRlbnNlIHdpdGhvdXQgcmVmZXJlbmNlIHRvIHZlcnNpb25zLgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYyAoZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4pCi0JICAoZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4sIGdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZSkKLQkgIChnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlLCBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdCkKLQkgIChnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0LCBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUpCi0JICAoZ3N0X3JlZ2lzdHJ5X2xvb2t1cCwgZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aCkKLQkgIChfZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zKQotCSAgKGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbik6IEFkZCBhcmd1bWVudAotCSAgdmFsaWRhdGlvbi4KLQotMjAwNi0wMS0xNiAyMTowMDo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIEhFQUQKLQotPT09IHJlbGVhc2UgMC4xMC4yID09PQotCi0yMDA2LTAxLTE2IDIwOjU5OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgcmVsZWFzaW5nIDAuMTAuMgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC4xMC4yCi0KLTIwMDYtMDEtMTYgMTU6NDI6MDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBCYWNrIG91dCBwYXRjaCB1bnRpbCBhZnRlciB0aGUgcmVsZWFzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1Zik6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYpOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6IChnc3RfdGVzdF9zdWl0ZSk6Ci0JICBCYWNrIG91dCBwYXRjaCB1bnRpbCBhZnRlciB0aGUgcmVsZWFzZS4KLQotMjAwNi0wMS0xNiAxNDozNzo1NCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RtaW5pb2JqZWN0LmM6IFNwZWxsaW5nIGZpeCBpbiBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICBTcGVsbGluZyBmaXggaW4gZG9jcy4KLQkgICogQ2hhbmdlTG9nIC0gcmVtb3ZlIGNvbmZsaWN0IGluZGljYXRvcgotCi0yMDA2LTAxLTE2IDE0OjM3OjAxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgKE1pc3NlZCBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYyBpbiBwcmV2aW91cyBjb21taXQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIChNaXNzZWQgcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmMgaW4gcHJldmlvdXMgY29tbWl0KQotCSAgUmV2aWV3ZWQgQnk6IEFuZHkgV2luZ28KLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9pc19tZXRhZGF0YV93cml0YWJsZSksCi0JICAoZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKToKLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgQWRkIGdzdF9idWZmZXJfKGlzfG1ha2UpX21ldGFkYXRhX3dyaXRhYmxlIGFzIGFuYWxvZ3VlcyBvZgotCSAgZ3N0X2J1ZmZlcl8oaXN8bWFrZSlfd3JpdGFibGUuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWYpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX3ByZXBhcmVfYnVmKToKLQkgIFVzZSBuYW1lIGdzdF9idWZmZXJfKGlzfG1ha2UpX21ldGFkYXRhX3dyaXRhYmxlIGZ1bmN0aW9ucy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3Rlc3Rfc3VpdGUpOgotCSAgVGVzdCBnc3RfYnVmZmVyXyhpc3xtYWtlKV9tZXRhZGF0YV93cml0YWJsZQotCSAgKENsb3NlczogIzMyNDE2MikKLQotMjAwNi0wMS0xNiAxNDozMjozMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuKjogQWRkIGdzdF9idWZmZXJfKGlzfG1ha2UpX21ldGFkYXRhX3dyaXRhYmxlIGFzIGFuYWxvZ3VlcyBvZiBnc3RfYnVmZmVyXyhpc3xtYWtlKV93cml0YWJsZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgQnk6IEFuZHkgV2luZ28KLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9pc19tZXRhZGF0YV93cml0YWJsZSksCi0JICAoZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKToKLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgQWRkIGdzdF9idWZmZXJfKGlzfG1ha2UpX21ldGFkYXRhX3dyaXRhYmxlIGFzIGFuYWxvZ3VlcyBvZgotCSAgZ3N0X2J1ZmZlcl8oaXN8bWFrZSlfd3JpdGFibGUuCi0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWYpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX3ByZXBhcmVfYnVmKToKLQkgIFVzZSBuYW1lIGdzdF9idWZmZXJfKGlzfG1ha2UpX21ldGFkYXRhX3dyaXRhYmxlIGZ1bmN0aW9ucy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3Rlc3Rfc3VpdGUpOgotCSAgVGVzdCBnc3RfYnVmZmVyXyhpc3xtYWtlKV9tZXRhZGF0YV93cml0YWJsZQotCSAgKENsb3NlczogIzMyNDE2MikKLQotMjAwNi0wMS0xNCAyMjo1OTo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfVFcucG86Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBwcmVyZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHByZXJlbGVhc2UKLQotMjAwNi0wMS0xNCAxNDoxMjoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6Ci0JICBhZGQgdW5saW5rIGFuZCBzb21lIGFzc2VydHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHVubGluayBhbmQgc29tZSBhc3NlcnRzCi0KLTIwMDYtMDEtMTQgMTE6MjA6NDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBkb2NzL21hbnVhbC9NYWtlZmlsZS5hbTogZG9uJ3QgZG8gcGFyYWxsZWwgbWFrZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgZG9uJ3QgZG8gcGFyYWxsZWwgbWFrZQotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBBQ19TVUJTVCBIT1NUX0NQVQotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBhZGQgZ2VuZXJhdGlvbnMgZm9yIEhPU1RfQ1BVIGFuZCBHU1RfTUFKT1JNSU5PUgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6ICAgICAgICAgICBjb21taXQgZ2VuZXJhdGVkIHJlc3VsdAotCi0yMDA2LTAxLTEzIDE5OjUxOjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9yYW5kb20vcmVsZWFzZToKLQkgIHVwZGF0ZXMgdG8gcmVsZWFzZSBkb2MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlcyB0byByZWxlYXNlIGRvYwotCi0yMDA2LTAxLTEzIDE5OjE3OjA1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWw6IFVwZGF0ZSBHTk9NRSBpbnRlZ3JhdGlvbiBzZWN0aW9uIHRvIHVzZSBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKCkgaW5zdGVhZCBvZiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWw6Ci0JICBVcGRhdGUgR05PTUUgaW50ZWdyYXRpb24gc2VjdGlvbiB0byB1c2UgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCgpCi0JICBpbnN0ZWFkIG9mIHRoZSBvbGQgcG9wdCBzdHVmZiAoIzMyMjkxMSkuIEFsc28sIEdOT01FIGFwcGxpY2F0aW9ucwotCSAgc2hvdWxkICBub3cgdXNlIGdjb25mKnNpbmsgYW5kIGdjb25mKnNyYyBpbnN0ZWFkIG9mIHRoZSBvbGQgZ2NvbmYKLQkgIGhlbHBlciBsaWIgd2UgaGFkLgotCi0yMDA2LTAxLTEzIDE2OjE2OjI0ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgcmVtb3ZpbmcgMDEwIHN1ZmZpeGluZyBvZiBwYWNrYWdlIG5hbWUgYXMgRmVkb3JhIG9ubHkgdXNlIGl0IGZvciAwLjgsIHdhbnQgdG8gaGF2ZSB0aGUgcGFja2FnZXMgYmUgaW50ZXJjaGFuZ2VhYmxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92aW5nIDAxMCBzdWZmaXhpbmcgb2YgcGFja2FnZSBuYW1lIGFzIEZlZG9yYSBvbmx5IHVzZSBpdCBmb3IgMC44LCB3YW50Ci0JICB0byBoYXZlIHRoZSBwYWNrYWdlcyBiZSBpbnRlcmNoYW5nZWFibGUKLQotMjAwNi0wMS0xMyAxNDo1OTowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL0xJTkdVQVM6Ci0JICByZWFkZCB6aF9UVyBhbmQgZm9yY2UgYW4gYXV0b2dlbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWFkZCB6aF9UVyBhbmQgZm9yY2UgYW4gYXV0b2dlbgotCi0yMDA2LTAxLTEzIDE0OjIxOjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvOiBhZGQgbmV3IEFQSSBlbnRyaWVzIHRvIHRoZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIGFkZCBuZXcgQVBJIGVudHJpZXMgdG8gdGhlIGRvY3MKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXJwcml2YXRlLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgbW92ZSBwcml2YXRlIHN0cnVjdHMgdG8gcHJpdmF0ZSBoZWFkZXIKLQkgICogcG8vUkVBRE1FOgotCSAgZ3N0cmVhbWVyLTAuNyAtPiBnc3RyZWFtZXItMC4xMAotCSAgKiB0ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2Lmg6Ci0JICByZW1vdmUgcHJpdmF0ZSBzdHJ1Y3RzCi0KLTIwMDYtMDEtMTMgMTQ6MTk6MzcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9QT1RGSUxFUy5pbjoKLQkgIHRyaWdnZXIgYSByZWJ1aWxkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRyaWdnZXIgYSByZWJ1aWxkCi0KLTIwMDYtMDEtMTMgMTQ6MTk6MTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9MSU5HVUFTOgotCSAgdHJpZ2dlciBhIHJlYnVpbGQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdHJpZ2dlciBhIHJlYnVpbGQKLQotMjAwNi0wMS0xMyAxNDoxMjo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06IEZpeGVzIGFzIHBhcnQgb2YgIzMxNzA0OAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06Ci0JICBGaXhlcyBhcyBwYXJ0IG9mICMzMTcwNDgKLQotMjAwNi0wMS0xMyAxMzo0MTo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBsdWdpbnMvaW5kZXhlcnMvTWFrZWZpbGUuYW06IGZpeCAjMzE2MDg2IC0gY29tcGlsYXRpb24gd2hlbiBtbWFwIGlzIG1pc3NpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2luZGV4ZXJzL01ha2VmaWxlLmFtOgotCSAgZml4ICMzMTYwODYgLSBjb21waWxhdGlvbiB3aGVuIG1tYXAgaXMgbWlzc2luZwotCi0yMDA2LTAxLTEyIDIyOjA0OjU4ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKmN1ciA9IChub3cgLSBiYXNlKSAqIGJhc2VzaW5rLT5zZWdtZW50LmFic19yYXRlICsgdGltZTsgcmVwbGFjZWQgYnkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICAqY3VyID0gKG5vdyAtIGJhc2UpICogYmFzZXNpbmstPnNlZ21lbnQuYWJzX3JhdGUgKyB0aW1lOyByZXBsYWNlZCBieQotCSAgKmN1ciA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUobm93IC0gYmFzZSkgKiBiYXNlc2luay0+c2VnbWVudC5hYnNfcmF0ZSArIHRpbWU7IGZvciB2czYKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgYWRkZWQgc29tZSBkZWZpbmVzIEdTVF9NQUpPUk1JTk9SIGFuZCBIT1NUX0NQVQotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWY6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYWRkZWQgc29tZSBleHBvcnRlZCBmdW5jdGlvbnMKLQotMjAwNi0wMS0xMiAyMTo1NTo0MiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyLzogbWFrZSBHX1RZUEVfU1RSSU5HIGNvbnRyb2xhYmxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSksCi0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgKGludGVycG9sYXRlX25vbmVfZ2V0X3N0cmluZ192YWx1ZV9hcnJheSk6Ci0JICBtYWtlIEdfVFlQRV9TVFJJTkcgY29udHJvbGFibGUKLQotMjAwNi0wMS0xMiAxNjozMTozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0b29scy86IGNsZWFudXAgbWFuLXBhZ2VzLCByZW1vdmUgcmVmZXJlbmNlIHRvIGdzdC1yZWdpc3RlciwgZG9jdW1lbnQgZW52LXZhcnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9SRUFETUU6Ci0JICAqIHRvb2xzL2dzdC1mZWVkYmFjay4xLmluOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC4xLmluOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLjEuaW46Ci0JICAqIHRvb2xzL2dzdC1tZDVzdW0uMS5pbjoKLQkgICogdG9vbHMvZ3N0LXR5cGVmaW5kLjEuaW46Ci0JICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LjEuaW46Ci0JICAqIHRvb2xzL2dzdC14bWxsYXVuY2guMS5pbjoKLQkgIGNsZWFudXAgbWFuLXBhZ2VzLCByZW1vdmUgcmVmZXJlbmNlIHRvIGdzdC1yZWdpc3RlciwgZG9jdW1lbnQgZW52LXZhcnMKLQotMjAwNi0wMS0xMiAxNjowNzo1MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuYzogZ3N0X2J1ZmZlcl9zcGFuIHNob3VsZCBjb3B5IHRoZSB0aW1lc3RhbXAgb2YgdGhlIGZpcnN0IGJ1ZmZlciBpZiB0aGV5IHdlcmUgYm90aCBvcmlnaW5hbGx5IG92ZXJsYXBwaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfc3Bhbik6Ci0JICBnc3RfYnVmZmVyX3NwYW4gc2hvdWxkIGNvcHkgdGhlIHRpbWVzdGFtcCBvZiB0aGUgZmlyc3QgYnVmZmVyCi0JICBpZiB0aGV5IHdlcmUgYm90aCBvcmlnaW5hbGx5IG92ZXJsYXBwaW5nIHN1YmJ1ZmZlcnMgb2YgdGhlCi0JICBzYW1lIHBhcmVudCwgdXNpbmcgdGhlIHNhbWUgbG9naWMgYXMgdGhlICdzbG93IGNvcHknIGNhc2UuCi0KLTIwMDYtMDEtMTEgMjE6MzI6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IE5lZWQgdG8gYXdha2VuIEFMTCB0aGUgcGFkcyB3aGVuIHdlIHBvcCBhIGJ1ZmZlciwgb3RoZXJ3aXNlIGNvbGxlY3RwYWRzIG9ubHkgd29ya3Mgd2guLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX3BvcCk6Ci0JICBOZWVkIHRvIGF3YWtlbiBBTEwgdGhlIHBhZHMgd2hlbiB3ZSBwb3AgYSBidWZmZXIsIG90aGVyd2lzZQotCSAgY29sbGVjdHBhZHMgb25seSB3b3JrcyB3aGVuIHRoZXJlIGlzIDIgaW5wdXQgc3RyZWFtcy4KLQotMjAwNi0wMS0xMSAxOToxODoyNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3JhbmRvbS9lbnNvbmljL21lZGlhLWRldmljZS1kYWVtb24udHh0OiBtb3JlIGlkZWFzIChkYnVzKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvbWVkaWEtZGV2aWNlLWRhZW1vbi50eHQ6Ci0JICBtb3JlIGlkZWFzIChkYnVzKQotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBmaXggZG9jIGV4YW1wbGUsIGFkZCBjbGFyaWZpY2F0aW9uCi0JICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIGFkZCBpbml0aWFsIGluZm8gYWJvdXQgR1NUX1BMVUdJTl9QQVRILCBuZWVkcyBtb3JlIHdvcmsKLQotMjAwNi0wMS0xMSAxMDozODo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvOiBTb21lIG1vcmUgbWlub3IgZG9jcyBhZGRpdGlvbnMgYW5kIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sOgotCSAgU29tZSBtb3JlIG1pbm9yIGRvY3MgYWRkaXRpb25zIGFuZCB1cGRhdGVzLgotCi0yMDA2LTAxLTExIDEwOjIwOjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL21hbnVhbC86IFNvbWUgc21hbGwgZml4ZXMgYXMgcG9pbnRlZCBvdXQgYnkgU2VyLXZlciBvbiBJUkMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sOgotCSAgU29tZSBzbWFsbCBmaXhlcyBhcyBwb2ludGVkIG91dCBieSBTZXItdmVyIG9uIElSQy4KLQotMjAwNi0wMS0xMCAxNTo0MjoyOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBTZXQgdGhlIGJ1ZmZlciBvZmZzZXQvb2Zmc2V0X2VuZCB0byBHU1RfQ0xPQ0tfVElNRV9OT05FIHdoZW4gdXNpbmcgdGhlIHNpbmdsZS1zZWdtZW50Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6Ci0JICBTZXQgdGhlIGJ1ZmZlciBvZmZzZXQvb2Zmc2V0X2VuZCB0byBHU1RfQ0xPQ0tfVElNRV9OT05FIHdoZW4gdXNpbmcKLQkgIHRoZSBzaW5nbGUtc2VnbWVudCBtb2RlLgotCi0yMDA2LTAxLTEwIDA5OjIzOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuKjogTmFtZSAocHJpdmF0ZSkgdW5pb247IG1ha2VzIFN1bidzIEZvcnRlIGNvbXBpbGVyIGhhcHB5ICgjMzI0OTAwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX3BlcmZvcm1fc2VlayksIChnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCksCi0JICAoZ3N0X2Jhc2Vfc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfc3RhcnQpLAotCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBOYW1lIChwcml2YXRlKSB1bmlvbjsgbWFrZXMgU3VuJ3MgRm9ydGUgY29tcGlsZXIgaGFwcHkgKCMzMjQ5MDApLgotCi0yMDA2LTAxLTA5IDEwOjQ3OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBSRUFETUU6IGdzdC1yZWdpc3RlciBpcyBnb25lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIFJFQURNRToKLQkgIGdzdC1yZWdpc3RlciBpcyBnb25lLgotCi0yMDA2LTAxLTA3IDExOjA3OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcG8vTElOR1VBUzoKLQkgIHJlbW92ZSBhbmQgcmVhZGQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGFuZCByZWFkZAotCi0yMDA2LTAxLTA3IDExOjA3OjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogcG8vTElOR1VBUzoKLQkgIHJlbW92ZSBhbmQgcmVhZGQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGFuZCByZWFkZAotCi0yMDA2LTAxLTA3IDEwOjA0OjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IG1ha2UgdGhlIEdfVFlQRV9EQVRFIGluc3RhbnRpYXRpb24gd29yayBpZiBkZWJ1ZyBpcyBkaXNhYmxlZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKLQkgIG1ha2UgdGhlIEdfVFlQRV9EQVRFIGluc3RhbnRpYXRpb24gd29yayBpZiBkZWJ1ZyBpcyBkaXNhYmxlZAotCi0yMDA2LTAxLTA3IDA5OjU2OjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDA2LTAxLTA2IDE3OjE2OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0bWVzc2FnZS5jOiBEb24ndCBjcmFzaCB3aGVuIHJldHVybiBsb2NhdGlvbiBmb3IgZXJyb3Ivd2FybmluZyBkZWJ1ZyBzdHJpbmcgaXMgTlVMTDsgYWRkIGZhY3QgdGhhdCByZXR1cm4gbG9jYXQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfcGFyc2VfdGFnKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciksIChnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nKToKLQkgIERvbid0IGNyYXNoIHdoZW4gcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvci93YXJuaW5nIGRlYnVnCi0JICBzdHJpbmcgaXMgTlVMTDsgYWRkIGZhY3QgdGhhdCByZXR1cm4gbG9jYXRpb25zIGNhbiBiZQotCSAgTlVMTCB0byBkb2NzIHdoZXJlIGFwcHJvcHJpYXRlLgotCi0yMDA2LTAxLTA1IDEwOjQzOjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGx1Z2luLmM6IFJlcGxhY2Ugc3RyZHVwIGJ5IGdfc3RyZHVwIGFzIHN1Z2dlc3RlZCBieSBTZXItdmVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fbG9hZF9maWxlKToKLQkgIFJlcGxhY2Ugc3RyZHVwIGJ5IGdfc3RyZHVwIGFzIHN1Z2dlc3RlZCBieSBTZXItdmVyLgotCi0yMDA2LTAxLTA0IDIzOjUzOjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgdXBkYXRlIGNvbmZpZyBmb3IgLjEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGNvbmZpZyBmb3IgLjEKLQotMjAwNi0wMS0wNCAyMzo1MjozNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDogZml4IGRvYyBib3JrYWdlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sOgotCSAgZml4IGRvYyBib3JrYWdlCi0KLTIwMDYtMDEtMDQgMjM6NTA6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBzdWJtaXR0ZWQgYnk6IEFiZWwgQ2hldW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHN1Ym1pdHRlZCBieTogQWJlbCBDaGV1bmcKLQkgICogcG8vTElOR1VBUzoKLQkgICogcG8vemhfVFcucG86Ci0JICBBZGRlZCBDaGluZXNlICh0cmFkaXRpb25hbCkgdHJhbnNsYXRpb24KLQotMjAwNi0wMS0wNCAxMjo0MTozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgU21hbGwgdXBkYXRlcyB0byB2YXJpb3VzIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLWNsb2NrLnhtbDoKLQkgICogZG9jcy9wd2cvYWR2YW5jZWQtc2NoZWR1bGluZy54bWw6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmg6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmg6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NsYXNzX2luaXQpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgotCSAgU21hbGwgdXBkYXRlcyB0byB2YXJpb3VzIGRvY3MuCi0JICBBZGRlZCBjb3JlIHBsdWdpbnMgdG8gZG9jcy4KLQotMjAwNi0wMS0wMyAxODowODowNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNvbW1vbi9nc3Quc3VwcDogYWRkIGEgc3VwcHJlc3Npb24gZm9yIGxpYm9pbCdzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb21tb24vZ3N0LnN1cHA6Ci0JICBhZGQgYSBzdXBwcmVzc2lvbiBmb3IgbGlib2lsJ3MgdW5pbml0aWFsaXplZCB2YXJpYWJsZQotCi0yMDA2LTAxLTAyIDIwOjI2OjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dXRpbHMuaDogQWRkIHByb3RvdHlwZSBmb3IgX2dldF90eXBlKCkgZnVuY3Rpb24gdG8gR1NUX0JPSUxFUlBMQVRFX0ZVTEwgbWFjcm8sIHNvIHRoYXQgZ2NjIGRvZXNuJ3QgY29tcGxhaW4gaWYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBBZGQgcHJvdG90eXBlIGZvciBfZ2V0X3R5cGUoKSBmdW5jdGlvbiB0byBHU1RfQk9JTEVSUExBVEVfRlVMTAotCSAgbWFjcm8sIHNvIHRoYXQgZ2NjIGRvZXNuJ3QgY29tcGxhaW4gaWYgdGhlIC1XbWlzc2luZy1wcm90b3R5cGVzCi0JICBjb21waWxlciBzd2l0Y2ggaXMgYmVpbmcgdXNlZCAoIzMyNTQyOSkuCi0KLTIwMDUtMTItMjkgMTY6NDc6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RiaW4uYzogRGlzYWJsZSBkdXJhdGlvbiBxdWVyeSBjYWNoaW5nIGluIGJpbnMgdW50aWwgaXQgZ2V0cyBmaXhlZCAoc2VlICMzMjQ4MDcpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcXVlcnkpOgotCSAgRGlzYWJsZSBkdXJhdGlvbiBxdWVyeSBjYWNoaW5nIGluIGJpbnMgdW50aWwgaXQgZ2V0cwotCSAgZml4ZWQgKHNlZSAjMzI0ODA3KS4KLQotMjAwNS0xMi0yNyAxODowNDo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdG9vbHMvZ3N0LWluc3BlY3QuYzogSGFuZGxlIHByb3BlcnRpZXMgb2YgUE9JTlRFUiBhbmQgQk9YRUQgdHlwZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgotCSAgSGFuZGxlIHByb3BlcnRpZXMgb2YgUE9JTlRFUiBhbmQgQk9YRUQgdHlwZS4KLQotMjAwNS0xMi0yNyAxMjoxMToxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdC5jOiBJbml0IHRhZ3Mgc3R1ZmYgYW5kIHNvbWUgb3RoZXIgdGhpbmdzIGJlZm9yZSBsb2FkaW5nIGFueSBzdGF0aWMgcGx1Z2lucyAodGhlcmUgbWF5IGJlIG90aGVyIHN0YXRpYyBwbHVnaW5zLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKLQkgIEluaXQgdGFncyBzdHVmZiBhbmQgc29tZSBvdGhlciB0aGluZ3MgYmVmb3JlIGxvYWRpbmcKLQkgIGFueSBzdGF0aWMgcGx1Z2lucyAodGhlcmUgbWF5IGJlIG90aGVyIHN0YXRpYyBwbHVnaW5zCi0JICB0aGFuIGp1c3QgdGhlIEdTdHJlYW1lciBvbmVzLCBhbmQgdGhleSBtYXkgd2FudCB0bwotCSAgcmVnaXN0ZXIgdGhlaXIgb3duIHRhZ3Mgb3IgZm9ybWF0cyBvciB3aGF0ZXZlciwgYW5kCi0JICBwcmVmZXJhYmx5IHdpdGhvdXQgc2VnZmF1bHRpbmcpLgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSk6Ci0JICBQcmludCBhdCBsZWFzdCBhIHdhcm5pbmcgaW4gdGhlIGRlYnVnIGxvZ3MgaWYgd2UgZHJvcCBhCi0JICBxdWVyeSBqdXN0IGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBob3cgdG8gYWRqdXN0IHRoZSB2YWx1ZQotCSAgaW4gdGhlIHBhcnRpY3VsYXIgZm9ybWF0LgotCi0yMDA1LTEyLTI1IDAzOjQ1OjQ1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgdG9vbHMvZ3N0cmVhbWVyLWNvbXBsZXRpb246IFJlcGxhY2VtZW50IGZvciBnc3QtY29tcGxldGUgd3JpdHRlbiBpbiBzaCBhbmQgc2VkLiAgT25seSBjb21wbGV0ZXMgbmFtZXMgb2YgZmVhdHVyZXMsIGJ1Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0cmVhbWVyLWNvbXBsZXRpb246Ci0JICBSZXBsYWNlbWVudCBmb3IgZ3N0LWNvbXBsZXRlIHdyaXR0ZW4gaW4gc2ggYW5kIHNlZC4gIE9ubHkKLQkgIGNvbXBsZXRlcyBuYW1lcyBvZiBmZWF0dXJlcywgYnV0IHRoYXQncyA5MCUgb2Ygd2hhdCBJIHdhbnQKLQkgIGl0IGZvci4gIFByb3BlcnRpZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gcmVnaXN0cnkueG1sLiAgKE1heWJlCi0JICB0aGV5IHNob3VsZCBiZS4uLikKLQotMjAwNS0xMi0yMyAxODoxNTo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIEhFQUQKLQotPT09IHJlbGVhc2UgMC4xMC4xID09PQotCi0yMDA1LTEyLTIzIDE4OjA0OjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICByZWxlYXNpbmcgMC4xMC4xCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjEwLjEKLQotMjAwNS0xMi0yMyAxNDo1MzoxMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDUtMTItMjMgMTM6NDU6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9saWJzLy5naXRpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpZ25vcmUgbW9yZQotCi0yMDA1LTEyLTIyIDE0OjQ4OjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL2ZhcS9jdnMueG1sOiBBZGQgbWlzc2luZyBxdW90ZSwgc2hvdWxkIGJlIG1ha2UgRVJST1JfQ0ZMQUdTPSIiLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2N2cy54bWw6Ci0JICBBZGQgbWlzc2luZyBxdW90ZSwgc2hvdWxkIGJlIG1ha2UgRVJST1JfQ0ZMQUdTPSIiLgotCi0yMDA1LTEyLTIwIDE2OjAxOjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBwcmVyZWxlYXNpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcHJlcmVsZWFzaW5nCi0KLTIwMDUtMTItMjAgMTI6NTA6NTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6IE1vcmUgZG9jdW1lbnRhdGlvbiBvbiB0cmlja21vZGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtdHJpY2ttb2Rlcy50eHQ6Ci0JICBNb3JlIGRvY3VtZW50YXRpb24gb24gdHJpY2ttb2Rlcy4KLQotMjAwNS0xMi0yMCAxMToxMjo1MyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdGNhcHMuKjogQWRkZWQgZ3BvaW50ZXIgR1R5cGUgZm9yIEdzdFN0YXRpY0NhcHMgc28gd2UgY2FuIHdyYXAgdGhlbSBpbiBiaW5kaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X3N0YXRpY19jYXBzX2dldF90eXBlKToKLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgIEFkZGVkIGdwb2ludGVyIEdUeXBlIGZvciBHc3RTdGF0aWNDYXBzIHNvIHdlIGNhbiB3cmFwIHRoZW0gaW4gYmluZGluZ3MuCi0JICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOiAoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkgIEFkZGVkIGdwb2ludGVyIEdUeXBlIGZvciBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzbyB3ZSBjYW4gd3JhcCB0aGVtIGluCi0JICBiaW5kaW5ncy4KLQotMjAwNS0xMi0xOCAxNjowNDo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvOiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9xdWVyeSksIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9kb19zZWVrKSwKLQkgIChnc3RfYmFzZV9zcmNfZG9fc2VlayksIChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCksIChnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksIChnc3RfYmFzZV9zcmNfbG9vcCksCi0JICAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KToKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmg6Ci0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgotCSAgKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6Ci0JICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCi0KLTIwMDUtMTItMTggMTQ6Mjg6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDogUmVtb3ZlIHN1cGVyZmx1b3VzIGNsb3NpbmcgYnJhY2tldCBpbiBoZWxsb3dvcmxkIGV4YW1wbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgotCSAgUmVtb3ZlIHN1cGVyZmx1b3VzIGNsb3NpbmcgYnJhY2tldCBpbiBoZWxsb3dvcmxkIGV4YW1wbGUuCi0KLTIwMDUtMTItMTcgMTQ6MTk6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guMS5pbjogVXBkYXRlIGdzdC1sYXVuY2ggbWFuIHBhZ2U7IGFkZCBhIHNlY3Rpb24gd2l0aCB1c2VmdWwgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBGaXhlcyAjMzIzODgyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIFVwZGF0ZSBnc3QtbGF1bmNoIG1hbiBwYWdlOyBhZGQgYSBzZWN0aW9uIHdpdGggdXNlZnVsCi0JICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEZpeGVzICMzMjM4ODIuCi0KLTIwMDUtMTItMTYgMjE6NTk6MTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogY2hhbmdlIHNvbWUgY2hhciogaW50byBjaGFyW10KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgY2hhbmdlIHNvbWUgY2hhciogaW50byBjaGFyW10KLQotMjAwNS0xMi0xNiAxOToyNDoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IENsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiAobG9hZF9mZWF0dXJlKToKLQkgIENsZWFudXBzLgotCSAgRG9uJ3QgdXNlIGdfb2JqZWN0X3VucmVmIG9uIEdzdE9iamVjdHMgc28gdGhhdCB3ZSBhdm9pZAotCSAgbGVha3Mgb24gdW5zYWZlIGdsaWJzLgotCi0yMDA1LTEyLTE2IDE4OjIwOjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IFNtYWxsIGRvYyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcmVjYWxjX3N0YXRlKToKLQkgIFNtYWxsIGRvYyB1cGRhdGVzLgotCi0yMDA1LTEyLTE2IDE4OjEwOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjb21tb24vY2hlY2subWFrOiBBZGRlZCBtYWtlIGZvcmV2ZXIgdGFyZ2V0IGZvciBjaGVjay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb21tb24vY2hlY2subWFrOgotCSAgQWRkZWQgbWFrZSBmb3JldmVyIHRhcmdldCBmb3IgY2hlY2suCi0KLTIwMDUtMTItMTYgMTc6MzQ6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0LmM6IG1ha2UgdGhlIHJlZ2lzdHJ5IGNhY2hlIGZpbGUgSE9TVF9DUFUtZGVwZW5kZW50Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKLQkgIG1ha2UgdGhlIHJlZ2lzdHJ5IGNhY2hlIGZpbGUgSE9TVF9DUFUtZGVwZW5kZW50Ci0KLTIwMDUtMTItMTYgMTQ6NDQ6NDkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RidWZmZXJzdG9yZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RidWZmZXJzdG9yZS5jCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTItMTYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0YnVmZmVyc3RvcmUuYwotCSAgKGdzdF9idWZmZXJfc3RvcmVfY2xlYXJlZF9mdW5jKTogUGF5IGF0dGVudGlvbiB0byBnX2xpc3RfYXBwZW5kCi0JICByZXR1cm4gdmFsdWUuCi0JICAqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYwotCSAgKHRlc3RfZmFrZV9vYmplY3RfbmFtZV90aHJlYWRlZF91bmlxdWUpOiBQYXkgYXR0ZW50aW9uIHRvCi0JICBnX2xpc3Rfc29ydCByZXR1cm4gdmFsdWUuCi0KLTIwMDUtMTItMTYgMTE6NTI6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1mZWVkYmFjay1tLm06IFVwZGF0ZSBmb3IgMC45LzAuMTAgKGZpeGVzICMzMjM4NzApLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1mZWVkYmFjay1tLm06Ci0JICBVcGRhdGUgZm9yIDAuOS8wLjEwIChmaXhlcyAjMzIzODcwKS4KLQotMjAwNS0xMi0xNSAxMjoyMjozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogRml4IGxjb3B5IGZvciBtaW5pIG9iamVjdHMsIHRoZSBtaW5pIG9iamVjdCBuZWVkcyB0byBiZSByZWYnZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF92YWx1ZV9taW5pX29iamVjdF9sY29weSk6Ci0JICBGaXggbGNvcHkgZm9yIG1pbmkgb2JqZWN0cywgdGhlIG1pbmkgb2JqZWN0IG5lZWRzIHRvIGJlIHJlZidlZC4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzogKG15X2Zvb19pbml0KSwKLQkgIChteV9mb29fZ2V0X3Byb3BlcnR5KSwgKG15X2Zvb19zZXRfcHJvcGVydHkpLCAobXlfZm9vX2NsYXNzX2luaXQpLAotCSAgKHRlc3RfdmFsdWVfY29sbGVjdGlvbiksIChnc3RfbWluaV9vYmplY3Rfc3VpdGUpOgotCSAgQWRkIHRlc3QgdG8gZW5zdXJlIHJlZmNvdW50cyBlbmQgdXAgYXMgZXhwZWN0ZWQgd2hlbiBwYXNzaW5nCi0JICBHc3RNaW5pT2JqZWN0cyB0aHJvdWdoIGdfb2JqZWN0X2dldCgpIGFuZCBnX29iamVjdF9zZXQoKS4KLQotMjAwNS0xMi0xNCAxNzowODozNiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogUmVmYWN0b3Jpbmcgb2YgY29sbGVjdHBhZHMuIFRoaXMgdmVyc2lvbiByZW1vdmVzIGEgbG90IG9mIHJhY2VzIHdpdGhvdXQgdG91Y2hpbmcgQVBJLy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEyLTE0ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0X3BhZHNfYmFzZV9pbml0KSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQpLCAoZ3N0X2NvbGxlY3RfcGFkc19pc19jb2xsZWN0ZWQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpLCAoZ3N0X2NvbGxlY3RfcGFkc19jaGFpbik6IFJlZmFjdG9yaW5nCi0JICBvZiBjb2xsZWN0cGFkcy4gVGhpcyB2ZXJzaW9uIHJlbW92ZXMgYSBsb3Qgb2YgcmFjZXMgd2l0aG91dAotCSAgdG91Y2hpbmcgQVBJL0FCSS4gWWF5ICEKLQotMjAwNS0xMi0xNCAxMDowOTozNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogRG9uJ3QgYWxsb3cgYWN0aXZhdGlvbiBvZiBhIHNyY3BhZCBpbiBwdWxsX3JhbmdlIGlmIGl0IGhhcyBubyBnZXRyYW5nZSBmdW5jdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjdGl2YXRlX3B1bGwpLCAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpOgotCSAgRG9uJ3QgYWxsb3cgYWN0aXZhdGlvbiBvZiBhIHNyY3BhZCBpbiBwdWxsX3JhbmdlIGlmIGl0IGhhcyBubwotCSAgZ2V0cmFuZ2UgZnVuY3Rpb24uCi0JICBDaGFuZ2Ugc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzIHRvIGJlIGEgbGl0dGxlIGNsZWFyZXIKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2hhbmRsZV9zcmNfcXVlcnkpOgotCSAgQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgcGVlciBiZWZvcmUgZXhlY3V0aW5nIHF1ZXJpZXMgdGhlcmV1cG9uLgotCSAgKiB0ZXN0cy9leGFtcGxlcy9tZXRhZGF0YS9yZWFkLW1ldGFkYXRhLmM6IChtZXNzYWdlX2xvb3ApOgotCSAgVXNlIGdzdF9idXNfcG9wIGluc3RlYWQgb2YgZ3N0X2J1c19wb2xsIHdoZW4gd2UganVzdCB3YW50IGl0IHRvCi0JICBpbW1lZGlhdGVseSByZXR1cm4gdXMgYW55IGF2YWlsYWJsZSBtZXNzYWdlIHdpdGggMCB0aW1lb3V0LgotCi0yMDA1LTEyLTEyIDE5OjA5OjQ5ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogRG9uJ3QgdW5yZWYgZmFjdG9yaWVzIGFmdGVyIGNhbGxpbmcgdGhlbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6IChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbik6Ci0JICBEb24ndCB1bnJlZiBmYWN0b3JpZXMgYWZ0ZXIgY2FsbGluZyB0aGVtLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6IChnc3RfdHlwZV9maW5kX2hlbHBlcik6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKToKLQkgIEZyZWUgbGlzdHMgb2YgZmFjdG9yaWVzIGFmdGVyIHVzaW5nIHRoZW0uIEZpeGluZyB0eXBlZmluZGluZyBtZW1vcnkKLQkgIGxlYWtzLgotCi0yMDA1LTEyLTEyIDE4OjEyOjEzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6IG1vcmUgbWVhbmluZ2Z1bCBkZWJ1ZyBvdXRwdXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2ZpbmFsaXplKSwKLQkgIChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCk6Ci0JICBtb3JlIG1lYW5pbmdmdWwgZGVidWcgb3V0cHV0Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogdGVzdHMvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL29sZC9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkgIG1ha2UgbWFrZSBkaXN0Y2hlY2sgaGFwcHkgYWdhaW4KLQotMjAwNS0xMi0xMiAxNzozNzoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbW92ZSBhbGwgdGVzdHMvb2xkIE1ha2VmaWxlcyBmcm9tIHRoZSBidWlsZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgYWxsIHRlc3RzL29sZCBNYWtlZmlsZXMgZnJvbSB0aGUgYnVpbGQKLQotMjAwNS0xMi0xMiAxNzowOTowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogQ2F0Y2ggdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBhcmUgb3BlcmF0aW5nIGNoYWluLWJhc2VkLCBidXQgdGhlIGRvd25zdHJlYW0gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKHN0b3BfdHlwZWZpbmRpbmcpOgotCSAgQ2F0Y2ggdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBhcmUgb3BlcmF0aW5nIGNoYWluLWJhc2VkLAotCSAgYnV0IHRoZSBkb3duc3RyZWFtIHBlZXIgcGFkIGhhcyBubyBjaGFpbiBmdW5jdGlvbi4gRW1pdCBhCi0JICBjdXN0b20gZXJyb3IgbWVzc2FnZSBpbiB0aGlzIGNhc2UgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZQotCSAgY29yZSBnZW5lcmF0ZSBvbmUgaW1wbHlpbmcgdGhhdCB0aGlzIGlzIHNvbWUgc29ydCBvZiBjb3JlCi0JICBidWcuIEl0J3Mgbm90LCBpdCBqdXN0IG1lYW5zIHRoYXQgd2hhdGV2ZXIgZ290IHBsdWdnZWQKLQkgIGludG8gdGhlIHBpcGVsaW5lIGRvd25zdHJlYW0gd2hlbiB3ZSBhbm5vdW5jZWQgdGhlIHR5cGUKLQkgIGNhbiBvbmx5IG9wZXJhdGUgcHVsbC1iYXNlZCwgd2hpbGUgb3VyIHNvdXJjZSBjYW4gb25seQotCSAgb3BlcmF0ZSBwdXNoLWJhc2VkIChlLmcuIGh0dHA6Ly9mb28vYmFyLm1vdiAhIHF0ZGVtdXggISAuLi4pCi0JICBFcnJvciBzdHJpbmcgaGFzIG5vdCBiZWVuIG1hcmtlZCBmb3IgdHJhbnNsYXRpb24geWV0LCBhcwotCSAgaXQgcHJvYmFibHkgbmVlZHMgc29tZSBtb3JlIHdvcmsgZmlyc3QuCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF9iZXN0X3Bvc3NpYmlsaXR5KToKLQkgIEFkZCBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCB0aGUgYmVzdCBvZiBhbGwgYXZhaWxhYmxlCi0JICBmb3VuZCBwb3NzaWJpbGl0aWVzIHRoYXQgcXVhbGlmeSBnaXZlbiB0aGUgbWluLiB0aHJlc2hvbGQuCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCk6Ci0JICBGaXggdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGFuIEVPUyB3aGlsZSBzdGlsbCBpbiBUWVBFRklORAotCSAgbW9kZSAod2Ugd2FudCB0byBjaG9zZSB0aGUgYmVzdCBvZiBhbGwgcG9zc2libGUgdHlwZXMsCi0JICBub3QganVzdCB0aGUgZmlyc3QgdHlwZSB0aGF0IGhhcHBlbnMgdG8gYmUgaW4gb3VyIHVuc29ydGVkCi0JICBsaXN0IG9mIHBvc3NpYmxlIHR5cGVzKS4KLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pOgotCSAgTWFrZSBzdXJlIHdlIHJldHVybiBHU1RfRkxPV19FUlJPUiB3aGVuIHdlIGVycm9yZWQgb3V0Ci0JICBpbiBzdG9wX3R5cGVmaW5kaW5nKCk7IGFsc28sIGRvbid0IGp1c3QgZmluZCB0aGUgYmVzdCBvZgotCSAgYWxsIGZvdW5kIHR5cGUgZW50cmllcyBhbmQgdGhlbiB1c2UgdGhlIGxhc3QgZXhhbWluZWQKLQkgIHR5cGUgZW50cnksIGJ1dCBhY3R1YWxseSB1c2UgdGhlIGJlc3QgZW50cnkuCi0KLTIwMDUtMTItMTIgMTc6MDc6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzLzogTW9yZSBnY2M0IGZpeGVzIGFuZCBhIG1lbSBsZWFrIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy90eXBlZmluZC90eXBlZmluZC5jOiAodHlwZV9mb3VuZCk6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3htbC9ydW54bWwuYzogKHhtbF9sb2FkZWQpOgotCSAgTW9yZSBnY2M0IGZpeGVzIGFuZCBhIG1lbSBsZWFrIGZpeC4KLQotMjAwNS0xMi0xMiAxNjoyMDo0NyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy94bWwvcnVueG1sLmM6Ci0JICBtb3JlIGdjYyA0IHdhcm5pbmcgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW9yZSBnY2MgNCB3YXJuaW5nIGZpeGVzCi0KLTIwMDUtMTItMTIgMTY6MDQ6NDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMveG1sL2NyZWF0ZXhtbC5jOgotCSAgYW5vdGhlciBnY2M0IGZpeAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhbm90aGVyIGdjYzQgZml4Ci0KLTIwMDUtMTItMTIgMTU6NTk6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvZXhhbXBsZXMveG1sL2NyZWF0ZXhtbC5jOiBnY2MgNCBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3htbC9jcmVhdGV4bWwuYzogKG9iamVjdF9zYXZlZCk6Ci0JICBnY2MgNCBmaXhlcwotCi0yMDA1LTEyLTEyIDE1OjQ2OjE2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL01ha2VmaWxlLmFtOiBlbmFibGUgdGhlIGV4YW1wbGVzIGV2ZW4gbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL01ha2VmaWxlLmFtOgotCSAgZW5hYmxlIHRoZSBleGFtcGxlcyBldmVuIG1vcmUKLQotMjAwNS0xMi0xMiAxNTowMjowMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmMgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9jbGFzc19pbml0LCBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfaW5pdCkgKGdzdF9uZXRfdGltZV9wcm92aWQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMi0xMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jCi0JICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2NsYXNzX2luaXQsIGdzdF9uZXRfdGltZV9wcm92aWRlcl9pbml0KQotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9zZXRfcHJvcGVydHkpCi0JICAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2dldF9wcm9wZXJ0eSk6IEV4cG9ydCAiYWN0aXZlIiBhcyBhIEdPYmplY3QKLQkgIHByb3BlcnR5LgotCSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl90aHJlYWQpOiBPbmx5IHJlc3BvbmQgdG8gdGltZSBxdWVyaWVzIGlmCi0JICB0aGUgdGltZSBwcm92aWRlciBpcyBhY3RpdmUuCi0JICAqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDogQWRkIGFuICJhY3RpdmUiIGJvb2xlYW4gdG8KLQkgIE5ldFRpbWVQcm92aWRlciwgcHJlc2VydmluZyBiaW5hcnkgY29tcGF0LgotCi0yMDA1LTEyLTEyIDE0OjQ2OjA2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzLzogY29udmVydCBjb21tZW50cyBhZ2FpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOiAobWFpbik6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2xhdW5jaC9NYWtlZmlsZS5hbToKLQkgIGNvbnZlcnQgY29tbWVudHMgYWdhaW4KLQotMjAwNS0xMi0xMiAxNDo0Mzo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6IEZpeCB0eXBvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSAgRml4IHR5cG8uCi0KLTIwMDUtMTItMTIgMTQ6NDI6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEZvcmdvdCB0aGUgQ2hhbmdlbG9nLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZvcmdvdCB0aGUgQ2hhbmdlbG9nLi4uCi0KLTIwMDUtMTItMTIgMTQ6NDE6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IEFkZGVkIG5ldyBzeW1ib2wgdG8gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgQWRkZWQgbmV3IHN5bWJvbCB0byBkb2NzLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zcmNfaW5pdCksIChnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpLCAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9kb19zZWVrKSwgKGdzdF9iYXNlX3NyY19kb19zZWVrKSwKLQkgIChnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrKSwgKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9ldmVudCksIChnc3RfYmFzZV9zcmNfZXZlbnRfaGFuZGxlciksCi0JICAoZ3N0X2Jhc2Vfc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYmFzZV9zcmNfd2FpdCksIChnc3RfYmFzZV9zcmNfZG9fc3luYyksCi0JICAoZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9sZW5ndGgpLCAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2NoZWNrX2dldF9yYW5nZSksIChnc3RfYmFzZV9zcmNfbG9vcCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmVnb3RpYXRlKSwgKGdzdF9iYXNlX3NyY19zdGFydCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgIEltcGxlbWVudCBzZWVraW5nIHRvIG90aGVyIGZvcm1hdHMgdGhhbiBfQllURVMuCi0JICBJbXBsZW1lbnQgbW9yZSBzZWVraW5nIG1ldGhvZHMgY29ycmVjdGx5LgotCSAgRG9jIHVwZGF0ZXMuCi0JICBBZGRlZCBxdWVyeSB2bWV0aG9kLgotCSAgQWRkZWQgZG9fc2VlayB2bWV0aG9kIHRvIG1ha2UgbGlmZSBlYXNpZXIgZm9yIHN1YmNsYXNzZXMKLQkgIHdoZW4gc2Vla2luZy4KLQkgIEFQSSBhZGRpdGlvbjogZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQoKQotCi0yMDA1LTEyLTEyIDE0OjA4OjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOiBhZGRlZCB0aGF0IHRvbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSAgYWRkZWQgdGhhdCB0b28KLQotMjAwNS0xMi0xMiAxNDowMjoxOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBhcHBsaWVkIHNvbWUgc2ltcGxlIGZpeGluZyB0byBzb21lIGV4YW1wbGVzIHJlLWVuYWJsZWQgdGhlIHdvcmtpbmcgZXhhbXBsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvbWVkaWEtZGV2aWNlLWRhZW1vbi50eHQ6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6IChtYWluKToKLQkgICogdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzogKGV2ZW50X2xvb3ApLCAobWFpbik6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2xhdW5jaC8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9sYXVuY2gvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2xhdW5jaC9tcDNwYXJzZWxhdW5jaC5jOiAoZXZlbnRfbG9vcCksIChtYWluKToKLQkgICogdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2V4YW1wbGVzL21ldGFkYXRhL3JlYWQtbWV0YWRhdGEuYzogKG1lc3NhZ2VfbG9vcCksCi0JICAobWFrZV9waXBlbGluZSksIChwcmludF90YWcpLCAobWFpbik6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3F1ZXVlLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3F1ZXVlL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9xdWV1ZS9xdWV1ZS5jOiAoZXZlbnRfbG9vcCksIChtYWluKToKLQkgICogdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3R5cGVmaW5kL3R5cGVmaW5kLmM6ICh0eXBlX2ZvdW5kKSwgKGV2ZW50X2xvb3ApLAotCSAgKG1haW4pOgotCSAgKiB0ZXN0cy9leGFtcGxlcy94bWwvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMveG1sL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9leGFtcGxlcy94bWwvY3JlYXRleG1sLmM6IChvYmplY3Rfc2F2ZWQpLCAobWFpbik6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3htbC9ydW54bWwuYzogKHhtbF9sb2FkZWQpLCAoZXZlbnRfbG9vcCksIChtYWluKToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvVE9ETzoKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL2NvbnRyb2xsZXIvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL29sZC9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL2hlbGxvd29ybGQvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL29sZC9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzoKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL2xhdW5jaC8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbGF1bmNoL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbGF1bmNoL21wM3BhcnNlbGF1bmNoLmM6Ci0JICAqIHRlc3RzL29sZC9leGFtcGxlcy9sYXVuY2gvbXAzcGxheToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOgotCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWUvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3F1ZXVlL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcXVldWUvcXVldWUuYzoKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3R5cGVmaW5kLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL29sZC9leGFtcGxlcy90eXBlZmluZC9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3R5cGVmaW5kL3R5cGVmaW5kLmM6Ci0JICAqIHRlc3RzL29sZC9leGFtcGxlcy94bWwvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3htbC9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3htbC9jcmVhdGV4bWwuYzoKLQkgICogdGVzdHMvb2xkL2V4YW1wbGVzL3htbC9ydW54bWwuYzoKLQkgIGFwcGxpZWQgc29tZSBzaW1wbGUgZml4aW5nIHRvIHNvbWUgZXhhbXBsZXMKLQkgIHJlLWVuYWJsZWQgdGhlIHdvcmtpbmcgZXhhbXBsZXMKLQotMjAwNS0xMi0xMiAxMjo0ODozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuYzogQWRkZWQgbW9yZSBkb2N1bWVudGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9pbml0KSwKLQkgIChnc3Rfc2VnbWVudF9zZXRfbGFzdF9zdG9wKSwgKGdzdF9zZWdtZW50X3NldF9zZWVrKSwKLQkgIChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCksIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSksCi0JICAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKToKLQkgIEFkZGVkIG1vcmUgZG9jdW1lbnRhdGlvbi4KLQkgIE1ha2Ugc3VyZSB0aGUgbGFzdF9wb3MgdmFsdWUgaXMgdXBkYXRlZCBwcm9wZXJseS4KLQkgIE1ha2Ugc3VyZSB0b19zdHJlYW1fdGltZSBhbmQgdG9fcnVubmluZ190aW1lIGRvbid0Ci0JICBvcGVyYXRlIG9uIHdyb25nIHZhbHVlcy4KLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIFVwZGF0ZSBjaGVjay4KLQotMjAwNS0xMi0xMiAxMjozMjowNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBOb3cgdGhhdCB3ZSdyZSBub3QgbGVha2luZyBmYWN0b3JpZXMsIG1ha2Ugc3VyZSB3ZSBrZWVwIHJlZmVyZW5jZXMgdG8gdGhlbSB3aGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoZnJlZV9lbnRyeSksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKToKLQkgIE5vdyB0aGF0IHdlJ3JlIG5vdCBsZWFraW5nIGZhY3RvcmllcywgbWFrZSBzdXJlIHdlIGtlZXAgcmVmZXJlbmNlcwotCSAgdG8gdGhlbSB3aGlsZSB3ZSBuZWVkIHRoZW0uCi0KLTIwMDUtMTItMTIgMTE6NDA6MTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB0ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaDogaWZkZWYgb3V0IHRoZSBYTUwgc3RydWN0cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfaTM4Ni5oOgotCSAgaWZkZWYgb3V0IHRoZSBYTUwgc3RydWN0cwotCi0yMDA1LTEyLTEyIDEwOjU5OjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IGZsb29yIGlzIG5vdCBuZWVkZWQsIEYgaXMgYWx3YXlzIHBvc2l0aXZlOyB0aGlzIG9idmlhdGVzIHRoZSBuZWVkIGZvciBhZGRpbmcgLWxtIHdoZW4gYnVpbGRpbmcgd2l0aG91Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfdHJhbnNmb3JtX2RvdWJsZV9mcmFjdGlvbik6Ci0JICBmbG9vciBpcyBub3QgbmVlZGVkLCBGIGlzIGFsd2F5cyBwb3NpdGl2ZTsgdGhpcyBvYnZpYXRlcyB0aGUKLQkgIG5lZWQgZm9yIGFkZGluZyAtbG0gd2hlbiBidWlsZGluZyB3aXRob3V0IGxpYnhtbAotCi0yMDA1LTEyLTEyIDEwOjU3OjM3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9yYW5kb20vYXNwZWN0cmF0aW86Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6Ci0JICBhZGQgYSA7IGFuZCBhbiBleGFtcGxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBhIDsgYW5kIGFuIGV4YW1wbGUKLQotMjAwNS0xMi0xMiAxMDoxNjoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiBUYWtlIGN1cnJlbnQgcGxheWJhY2sgcmF0ZSBpbnRvIGFjY291bnQgd2hlbiByZXBvcnRpbmcgdGhlIHBvc2l0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIFRha2UgY3VycmVudCBwbGF5YmFjayByYXRlIGludG8gYWNjb3VudCB3aGVuIHJlcG9ydGluZwotCSAgdGhlIHBvc2l0aW9uLgotCi0yMDA1LTEyLTExIDE5OjM1OjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL21hbnVhbC9taW1lLXdvcmxkLmZpZzogTGV0J3MgdHJ5IHRoaXMgYWdhaW4sIHRoaXMgdGltZSB3aXRoIGEgZmlsZSB0aGF0IGlzIGFjdHVhbGx5IGluIFhGaWcgZm9ybWF0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL21pbWUtd29ybGQuZmlnOgotCSAgTGV0J3MgdHJ5IHRoaXMgYWdhaW4sIHRoaXMgdGltZSB3aXRoIGEgZmlsZSB0aGF0IGlzCi0JICBhY3R1YWxseSBpbiBYRmlnIGZvcm1hdC4KLQotMjAwNS0xMi0xMSAxOToxOTowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvbWltZS13b3JsZC5maWc6IEFkZCBhdWRpb2NvbnZlcnQgZWxlbWVudCB0byBkaWFncmFtIHNvIHRoYXQgaXQgbWF0Y2hlcyB0aGUgdGV4dCBhbmQgdGhlIGNvZGUgKGZpeGVzICMzMTk1Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvbWltZS13b3JsZC5maWc6Ci0JICBBZGQgYXVkaW9jb252ZXJ0IGVsZW1lbnQgdG8gZGlhZ3JhbSBzbyB0aGF0IGl0Ci0JICBtYXRjaGVzIHRoZSB0ZXh0IGFuZCB0aGUgY29kZSAoZml4ZXMgIzMxOTUyNikuCi0KLTIwMDUtMTItMTEgMTg6MjQ6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvcHdnLzogVXBkYXRlIHN0YXRlIGNoYW5nZSBzdHVmZiBmb3IgMC4xMCAoZml4ZXMgIzMyMjk2OSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wd2cvYnVpbGRpbmctY2hhaW5mbi54bWw6Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLXBhZHMueG1sOgotCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1zdGF0ZS54bWw6Ci0JICAqIGRvY3MvcHdnL290aGVyLXNvdXJjZS54bWw6Ci0JICBVcGRhdGUgc3RhdGUgY2hhbmdlIHN0dWZmIGZvciAwLjEwIChmaXhlcyAjMzIyOTY5KS4KLQotMjAwNS0xMi0xMSAxNzo0OToxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvOiBVcGRhdGUgZm9yIDAuMTA6IHMvMC45LzAuMTAvOyBzL2F1ZGlvc2NhbGUvYXVkaW9yc2FtcGxlLzsgYWRkIGNvbnZlcnRlcnMgaW4gZnJvbnQgb2YgcGlwZWxpbmVzOyByZW1vdmUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXByb2dyYW1zLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6Ci0JICBVcGRhdGUgZm9yIDAuMTA6IHMvMC45LzAuMTAvOyBzL2F1ZGlvc2NhbGUvYXVkaW9yc2FtcGxlLzsKLQkgIGFkZCBjb252ZXJ0ZXJzIGluIGZyb250IG9mIHBpcGVsaW5lczsgcmVtb3ZlIGN1cmx5Ci0JICBicmFja2V0cyBmb3IgdGhyZWFkcyBzdHVmZiwgdGhleSBubyBsb25nZXIgZXhpc3Q7IHVzZQotCSAgR1NUX1RZUEVfRlJBQ1RJT04gZm9yIGZyYW1lcmF0ZXM7IHVwZGF0ZSBzb21lIHBpZWNlcyBvZgotCSAgY29kZSB0byAwLjEwLCBidXQgdGhlcmUncyBwbGVudHkgbW9yZSB0byBkby4KLQkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JICBFeHBhbmQgb24gYXN5bmNocm9uZW91cyBzdGF0ZSBjaGFuZ2VzOyBzLzAuOS8wLjEwLzsKLQkgIG1lbnRpb24gZGlzYXBwZWFyYW5jZSBvZiBnc3RfaW5pdF9nZXRfcG9wdF90YWJsZSgpCi0JICAoZml4ZXMgIzMyMjkxNikuCi0KLTIwMDUtMTItMTEgMTE6NTM6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvZmFxL3VzaW5nLnhtbDogU3BpZGVyIG5vIGxvbmdlciBleGlzdHMsIGFuZCBuZWl0aGVyIGRvZXMgZ3N0LWxhdW5jaC1leHQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9mYXEvdXNpbmcueG1sOgotCSAgU3BpZGVyIG5vIGxvbmdlciBleGlzdHMsIGFuZCBuZWl0aGVyIGRvZXMgZ3N0LWxhdW5jaC1leHQuCi0JICBVcGRhdGUgZXhhbXBsZXMgdG8gdXNlIGRlY29kZWJpbiBhbmQgcGxheWJpbiBhbmQgcHV0Ci0JICBjb252ZXJ0ZXJzIGluIGZyb250IG9mIHNpbmtzIChmaXhlcyAjMzIzNzI2KS4KLQotMjAwNS0xMi0wOSAxNzoyNjozMSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiBGaXggbGVha2luZyBlbGVtZW50IGZhY3RvcmllcyBpbiB0eXBlZmluZGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOiAoZmluZF9wZWVrKSwKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pOgotCSAgRml4IGxlYWtpbmcgZWxlbWVudCBmYWN0b3JpZXMgaW4gdHlwZWZpbmRpbmcuCi0JICBGaXggcHJvYmxlbSB3aGVyZSB3ZSBmb3Jnb3QgYWJvdXQgYSBwcm9iYWJsZSB0eXBlIG9uIG5vbi1zZWVrYWJsZQotCSAgZmlsZXMsIGFuZCB0aHVzIGxhdGVyIG1pcy10eXBlZm91bmQgaXQuCi0KLTIwMDUtMTItMDkgMTU6MDk6NDIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgUmVtb3ZlIG1ha2Vjb250ZXh0IHN0dWZmOyBub3QgdXNlZCBpbiAwLjEwIGFuZCBjYXVzZXMgcHJvYmxlbXMgb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb21tb24vbTQvZ3N0LW1ha2Vjb250ZXh0Lm00OgotCSAgKiBjb21tb24vbTQvZ3N0LW1jc2MubTQ6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBSZW1vdmUgbWFrZWNvbnRleHQgc3R1ZmY7IG5vdCB1c2VkIGluIDAuMTAgYW5kIGNhdXNlcyBwcm9ibGVtcyBvbgotCSAgSFBVWCBhY2NvcmRpbmcgdG8gYnVnICMzMjI0NDEKLQotMjAwNS0xMi0wNyAxOTowMzo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGRlZCBBQkkgY2hlY2sgZm9yIGxpYnMsIHRoaXMgdGltZSBmb3IgcmVhbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9saWJzL2xpYnNhYmkuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdGFiaV9zdWl0ZSksCi0JICAobWFpbik6Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvc3RydWN0X2kzODYuaDoKLQkgIEFkZGVkIEFCSSBjaGVjayBmb3IgbGlicywgdGhpcyB0aW1lIGZvciByZWFsCi0KLTIwMDUtMTItMDcgMTk6MDM6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrLzogQWRkZWQgQUJJIGNoZWNrIGZvciBsaWJzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0YWJpX3N1aXRlKSwKLQkgIChtYWluKToKLQkgICogdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaTM4Ni5oOgotCSAgQWRkZWQgQUJJIGNoZWNrIGZvciBsaWJzCi0KLTIwMDUtMTItMDcgMTc6NTk6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBBbmQgYWRkIHRoZSBzdHJ1Y3RfaTM4Ni5oIHRvIGRpc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBBbmQgYWRkIHRoZSBzdHJ1Y3RfaTM4Ni5oIHRvIGRpc3QuCi0KLTIwMDUtMTItMDcgMTc6MzY6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrLzogQWRkZWQgY2hlY2sgZm9yIEFCSSBjb21wYXRpYmlsaXR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZ3N0L2dzdGFiaS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0YWJpX3N1aXRlKSwKLQkgIChtYWluKToKLQkgICogdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2Lmg6Ci0JICBBZGRlZCBjaGVjayBmb3IgQUJJIGNvbXBhdGliaWxpdHkuCi0KLTIwMDUtMTItMDcgMTU6MzM6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiBGaXggYnJva2VuIHN5bmMgb3B0aW9uLCBmaXhlcyAjMzIzMjU5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Zha2Vfc3JjX2dldF90aW1lcyksIChnc3RfZmFrZV9zcmNfY3JlYXRlKToKLQkgIEZpeCBicm9rZW4gc3luYyBvcHRpb24sIGZpeGVzICMzMjMyNTkKLQotMjAwNS0xMi0wNyAxNToxNjo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1ZmZlci5jOiBTbWFsbCBkb2NzIHVwZGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICBTbWFsbCBkb2NzIHVwZGF0ZS4KLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2lzX2VxdWFsKToKLQkgIERvbid0IGFzc2VydCBvbiBOVUxMIDwtLT4gWC4gRml4ZXMgIzMyMzI2MAotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UpOgotCSAgSWYgd2UncmUgZG9pbmcgYXRvbWljIG9wZXJhdGlvbnMsIHdlIG1pZ2h0IGp1c3QgYXMgd2VsbCB1c2UKLQkgIHRoZSBwcm9wZXIgd2F5IHRvIGdldCBhbiBhdG9taWMgcG9pbnRlci4KLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgotCSAgQ2xlYW4gdXAgZGVidWdnaW5nLgotCi0yMDA1LTEyLTA3IDExOjUyOjA1ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9wYXJzZS9ncmFtbWFyLnk6IFJlbW92ZSBoYW5kbGluZyBvZiB7IH0gZm9yIHRocmVhZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIFJlbW92ZSBoYW5kbGluZyBvZiB7IH0gZm9yIHRocmVhZHMuCi0KLTIwMDUtMTItMDYgMjM6MzI6MDEgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogc3BlbGluZyBmaXguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IHNwZWxpbmcgZml4LgotCi0yMDA1LTEyLTA2IDE5OjI5OjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6Ci0JKiBkb2NzL3JhbmRvbS9vbWVnYS90ZXN0aW5nL2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZXJyb3IuYzoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9pbmRleGVycy9nc3RmaWxlaW5kZXguYzoKLQkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0bWVtaW5kZXguYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9jdXR0ZXIvY3V0dGVyLmM6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy94bWwvcnVueG1sLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvbm9ybWFsaXNhdGlvbi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kZWJ1Zy9nbG9iYWwuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGFyc2UvcGFyc2UxLmM6Ci0JKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSogd2luMzIvY29tbW9uL2RpcmVudC5jOgotCSAgZXhwYW5kIHRhYnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZXhwYW5kIHRhYnMKLQotMjAwNS0xMi0wNiAxOTowNDo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIGJhY2sgdG8gY3ZzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gY3ZzCi0KLTIwMDUtMTItMDUgMTg6MTM6MDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBiYWNrIHRvIEhFQUQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYmFjayB0byBIRUFECi0KLT09PSByZWxlYXNlIDAuMTAuMCA9PT0KLQotMjAwNS0xMi0wNSAxODowNTowMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgcmVsZWFzaW5nIDAuMTAuMAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC4xMC4wCi0KLTIwMDUtMTItMDUgMTU6NTc6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA1LTEyLTA1IDE0OjM2OjA1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vOiBhZGRlZCBDaGluZXNlIChUcmFkaXRpb25hbCkgdHJhbnNsYXRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc3VibWl0dGVkIGJ5OiBGdW5kYSBXYW5nIDxmdW5kYXdhbmdAbGludXgubmV0LmNuPgotCSAgKiBwby9MSU5HVUFTOgotCSAgKiBwby96aF9DTi5wbzoKLQkgIGFkZGVkIENoaW5lc2UgKFRyYWRpdGlvbmFsKSB0cmFuc2xhdGlvbgotCi0yMDA1LTEyLTA1IDE0OjE0OjM5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcG8vYWYucG86Ci0JICB1cGRhdGVkIEFmcmlrYWFucyB0cmFuc2xhdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGVkIEFmcmlrYWFucyB0cmFuc2xhdGlvbgotCi0yMDA1LTEyLTA1IDE0OjE0OjAyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHBhZC5oOgotCSAgcmVtb3ZlIGRlcHJlY2F0aW9uIGd1YXJkIGZyb20gZG9jc3RyaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBkZXByZWNhdGlvbiBndWFyZCBmcm9tIGRvY3N0cmluZwotCi0yMDA1LTEyLTA1IDEzOjEwOjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgdXBkYXRlIHRyYW5zbGF0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMDUtMTItMDUgMTM6MDY6MzcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9yYW5kb20vdGhvbWFzdnMvVE9ETzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JICBmaXggZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggZG9jcwotCi0yMDA1LTEyLTA1IDEzOjAxOjM1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotCi0JICBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMi0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgIHBhdGNoIGJ5OiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYwotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWYpCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYyAoZ3N0X3F1ZXVlX2J1ZmZlcmFsbG9jKTogQ2FsbAotCSAgYWxsb2NfYnVmZmVyX2FuZF9zZXRfY2Fwcy4KLQkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX2FsbG9jX2J1ZmZlcik6IENoYW5nZWQgdG8gbm90IGNhbGwKLQkgIHNldF9jYXBzIG9uIHRoZSBzb3VyY2UgcGFkLgotCSAgKGdzdF9wYWRfYWxsb2NfYnVmZmVyX2FuZF9zZXRfY2Fwcyk6IE5ldyBmdW5jdGlvbiwgZG9lcyB3aGF0Ci0JICBhbGxvY19idWZmZXIgdXNlZCB0byBkby4gRml4ZXMgIzMyMjg3NC4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLW5lZ290aWF0aW9uLnhtbDogVXBkYXRlIGZvciB0aGUgYWxsb2NfYnVmZmVyCi0JICBjaGFuZ2VzLgotCi0yMDA1LTEyLTA1IDEyOjMzOjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JICByZWFsbHkgYWRkIHRoZSB0ZXN0cyBmb3IgdGhlIDY0L2RvdWJsZSBjb252ZXJzaW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlYWxseSBhZGQgdGhlIHRlc3RzIGZvciB0aGUgNjQvZG91YmxlIGNvbnZlcnNpb24KLQotMjAwNS0xMi0wNSAxMjowOTo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZjoKLQkgIGFkZCBkZWYgZm9yIGNvbnRyb2xsZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGRlZiBmb3IgY29udHJvbGxlcgotCi0yMDA1LTEyLTA1IDEyOjA5OjAxICswMDAwICBTZWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgd2luMzIvOiB3aW4zMiBidWlsZCBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogU2ViYXN0aWVuIE1vdXR0ZQotCSAgKiB3aW4zMi9NQU5JRkVTVDoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgKiB3aW4zMi92czYvbGliZ3N0Y29udHJvbGxlci5kc3A6Ci0JICB3aW4zMiBidWlsZCBmaXhlcwotCi0yMDA1LTEyLTA1IDEwOjU5OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBCYWNrIG91dCBwcmV2aW91cyBjb2RlIGNoYW5nZXMsIGxlYXZlIGRvYyB1cGRhdGVzLCBmaWxlIGJ1Z3MgaW5zdGVhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfaXNfZXF1YWwpOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3RfZmFrZV9zcmNfY3JlYXRlKToKLQkgIEJhY2sgb3V0IHByZXZpb3VzIGNvZGUgY2hhbmdlcywgbGVhdmUgZG9jIHVwZGF0ZXMsIGZpbGUgYnVncwotCSAgaW5zdGVhZC4KLQotMjAwNS0xMi0wNSAxMDoyNzo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLio6IEZpeCBicm9rZW4gc3luYyBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mYWtlX3NyY19nZXRfdGltZXMpLCAoZ3N0X2Zha2Vfc3JjX2NyZWF0ZSk6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgotCSAgRml4IGJyb2tlbiBzeW5jIGNvZGUuCi0KLTIwMDUtMTItMDUgMTA6MjI6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjYXBzLmM6IENvbXBhcmluZyBOVUxMIGFnYWluc3QgIU5VTEwgeWllbGRzIGRpZmZlcmVudCBjYXBzLCBub3QgYSBmYWlsdXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19pc19lcXVhbCk6Ci0JICBDb21wYXJpbmcgTlVMTCBhZ2FpbnN0ICFOVUxMIHlpZWxkcyBkaWZmZXJlbnQgY2Fwcywgbm90IGEKLQkgIGZhaWx1cmUuCi0KLTIwMDUtMTItMDUgMTA6MTg6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwaXBlbGluZS5jOiBGaXggc21hbGwgdHlwbyBpbiBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOgotCSAgRml4IHNtYWxsIHR5cG8gaW4gZG9jcy4KLQotMjAwNS0xMi0wNSAwOTo1Mzo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3QuYyAoaW5pdF9wb3N0KTogcmVtb3ZlIGhhcmQtY29kZWQgMC45IGxvY2F0aW9uIGZvciByZWdpc3RyaWVzL3BsdWdpbnMgd2l0aCBhIE1BSk9STUlOT1Igb25lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEyLTA1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgcGF0Y2ggYnk6IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0JICAqIGdzdC9nc3QuYyAoaW5pdF9wb3N0KTogcmVtb3ZlIGhhcmQtY29kZWQgMC45IGxvY2F0aW9uIGZvcgotCSAgcmVnaXN0cmllcy9wbHVnaW5zIHdpdGggYSBNQUpPUk1JTk9SIG9uZS4KLQkgIChwbHVnaW5fZGVzYyk6IFJlbmFtZSBsaWJyYXJ5IGZyb20gZ3N0Y29yZWxlZW1lbnRzIHRvCi0JICBzdGF0aWNlbGVtZW50cy4gRml4ZXMgIzMyMzIyMi4KLQotMjAwNS0xMi0wNSAwOTo0NToyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBDaGFuZ2UgZGVidWcgY2F0ZWdvcnkgdG8gJ2NvbGxlY3RwYWRzJyBmcm9tICdjb2xsZWN0X3BhZHMnIChmaXhlcyAjMzIzMjUwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2Jhc2VfaW5pdCk6Ci0JICBDaGFuZ2UgZGVidWcgY2F0ZWdvcnkgdG8gJ2NvbGxlY3RwYWRzJyBmcm9tICdjb2xsZWN0X3BhZHMnCi0JICAoZml4ZXMgIzMyMzI1MCkuCi0KLTIwMDUtMTItMDQgMTk6NTc6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHJlbmFtZSB0d28gZXhwb3J0cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW5hbWUgdHdvIGV4cG9ydHMKLQotMjAwNS0xMi0wNCAxODo1NDoxOSArMDAwMCAgU2ViYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOiB1c2UgY29udmVydCBmdW5jdGlvbiBmb3IgdWludDY0L2RvdWJsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogU2ViYXN0aWVuIE1vdXR0ZQotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgIHVzZSBjb252ZXJ0IGZ1bmN0aW9uIGZvciB1aW50NjQvZG91YmxlCi0JICAqIHdpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcDoKLQkgIGxpbmsgdG8gR0xpYgotCi0yMDA1LTEyLTA0IDA5OjU3OjExICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgYWRkIHRlc3RzIHRoYXQgc2VlbSB0byBzaG93IHRoYXQgdGhlIGd1aW50NjQvZ2RvdWJsZSBjb252ZXJzaW9ucyBhcmUgY29ycmVjdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSksCi0JICAoZ3N0X3V0aWxfZ2RvdWJsZV90b19ndWludDY0KSwgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQ2NCk6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF91dGlsc19zdWl0ZSk6Ci0JICBhZGQgdGVzdHMgdGhhdCBzZWVtIHRvIHNob3cgdGhhdCB0aGUgZ3VpbnQ2NC9nZG91YmxlIGNvbnZlcnNpb25zCi0JICBhcmUgY29ycmVjdC4KLQotMjAwNS0xMi0wMiAxMjo0NDo1MyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIG1ha2UgdmVyc2lvbiBudW1iZXIgYSBsaXR0bGUgbGVzcyBob3BlZnVsbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtYWtlIHZlcnNpb24gbnVtYmVyIGEgbGl0dGxlIGxlc3MgaG9wZWZ1bGwKLQotMjAwNS0xMi0wMiAxMjozNDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogRml4IGRvY3MgYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfYWRkX3BhdGgpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JICBGaXggZG9jcyBhZ2Fpbi4KLQkgIFJlbW92ZWQgb2xkIGNvZGUgZnJvbSBnc3RyZWdpc3RyeXhtbC5jCi0KLTIwMDUtMTItMDIgMTI6MTk6NTUgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBmaXggdXBkYXRpbmcgZ3N0cmVhbWVyIHNwZWMgZmlsZSBtYWtpbmcgaXQgMC4xMCByZWFkeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggdXBkYXRpbmcgZ3N0cmVhbWVyIHNwZWMgZmlsZSBtYWtpbmcgaXQgMC4xMCByZWFkeQotCi0yMDA1LTEyLTAyIDExOjM2OjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogU21hbGwgY2xlYW51cC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQ2NCksCi0JICAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCk6Ci0JICBTbWFsbCBjbGVhbnVwLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgotCSAgQWRkIGRlYnVnIGxvZyBsaW5lLgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCk6Ci0JICBBZGQgRklYTUUuCi0KLTIwMDUtMTItMDIgMDk6NDg6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB3aW4zMi86IHJlbmFtZWQgY29yZSBlbGVtZW50cyBwbHVnaW4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9NQU5JRkVTVDoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgKiB3aW4zMi92czYvZ3N0cmVhbWVyLmRzdzoKLQkgICogd2luMzIvdnM2L2xpYmdzdGNvcmVlbGVtZW50cy5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RlbGVtZW50cy5kc3A6Ci0JICByZW5hbWVkIGNvcmUgZWxlbWVudHMgcGx1Z2luCi0KLTIwMDUtMTItMDIgMDE6MzU6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB0b29scy9nc3QtcnVuLmM6IGRvIHBpZWNlLXdpc2UgbWFqb3IvbWlub3IgY29tcGFyaXNvbiBzbyAwLjkgPCAwLjEwIGFsc28gYWxsb3cgLmV4ZSBleHRlbnNpb25zIGZvciB0b29scwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1ydW4uYzogKGNvbXBhcmVfbWFqb3JfbWlub3IpLCAoZmluZF9oaWdoZXN0X3ZlcnNpb24pLAotCSAgKGdldF9jYW5kaWRhdGVzKToKLQkgIGRvIHBpZWNlLXdpc2UgbWFqb3IvbWlub3IgY29tcGFyaXNvbiBzbyAwLjkgPCAwLjEwCi0JICBhbHNvIGFsbG93IC5leGUgZXh0ZW5zaW9ucyBmb3IgdG9vbHMKLQotMjAwNS0xMi0wMSAyMzo1NzowNyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0LmM6IEVzY2FwZSBhICUgdG8gbWFrZSBndGtkb2MgaGFwcGllcjsgYnVnIDMyMjk1OC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICBFc2NhcGUgYSAlIHRvIG1ha2UgZ3RrZG9jIGhhcHBpZXI7IGJ1ZyAzMjI5NTguCi0KLTIwMDUtMTItMDEgMTk6MTg6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBiYWNrIHRvIEhFQUQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYmFjayB0byBIRUFECi0KLT09PSByZWxlYXNlIDAuOS43ID09PQotCi0yMDA1LTEyLTAxIDE5OjExOjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ0hBTkdFUy0wLjk6Ci0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmVpbmRleGVycy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICByZWxlYXNpbmcgMC45LjcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVsZWFzaW5nIDAuOS43Ci0KLTIwMDUtMTItMDEgMTY6NTE6MjMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JKiB3aW4zMi92czYvZ3N0X2luc3BlY3QuZHNwOgotCSogd2luMzIvdnM2L2dzdF9sYXVuY2guZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGJhc2UuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGVsZW1lbnRzLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgotCSogd2luMzIvdnM3L0dTdHJlYW1lci52Y3Byb2o6Ci0JKiB3aW4zMi92czcvZ3N0LWluc3BlY3QudmNwcm9qOgotCSogd2luMzIvdnM3L2dzdC1sYXVuY2gudmNwcm9qOgotCSogd2luMzIvdnM3L2xpYmdzdGJhc2UudmNwcm9qOgotCSAgYnVtcCBHU1RfTUFKT1JNSU5PUiB0byAwLjEwIHJlc2V0IGxpYnRvb2wgdmVyc2lvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBidW1wIEdTVF9NQUpPUk1JTk9SIHRvIDAuMTAKLQkgIHJlc2V0IGxpYnRvb2wgdmVyc2lvbgotCi0yMDA1LTEyLTAxIDE1OjI4OjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdG9vbHMvZ3N0LWZlZWRiYWNrLTAuNzoKLQkgIHJlbW92ZSBvbGQgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgb2xkIGZpbGUKLQotMjAwNS0xMi0wMSAxNToxODo0MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcGx1Z2lucy8uZ2l0aWdub3JlOgotCSAgaWdub3JlIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWdub3JlIG1vcmUKLQotMjAwNS0xMi0wMSAxNTowODowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby9iZy5wbzoKLQkgIEFkZGVkIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBieSAoQWxleGFuZGVyIFNob3BvdikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQWRkZWQgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIGJ5IChBbGV4YW5kZXIgU2hvcG92KQotCi0yMDA1LTEyLTAxIDE1OjA0OjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QtYnVpbGQuc3RhbXA6Ci0JICBjb21taXQgZmluYWwgc3RhbXAgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjb21taXQgZmluYWwgc3RhbXAgZmlsZQotCi0yMDA1LTEyLTAxIDE0OjUxOjA3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgYWRkIG1vcmUgZmlsZXMgZm9yIGRpc3RjaGVjawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbW9yZSBmaWxlcyBmb3IgZGlzdGNoZWNrCi0KLTIwMDUtMTItMDEgMTQ6NDA6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5zaWduYWxzOgotCSAgYWRkIHNpZ25hbHMgYW5kIGFyZ3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHNpZ25hbHMgYW5kIGFyZ3MKLQotMjAwNS0xMi0wMSAxMjozNjoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYzoKLQkgIGZpeCB0ZXN0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCB0ZXN0Ci0KLTIwMDUtMTItMDEgMTI6Mjk6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL01ha2VmaWxlLmFtOgotCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnR5cGVzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3Quc3RhbXA6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlaW5kZXhlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL3NjYW5vYmotYnVpbGQuc3RhbXA6Ci0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvaW5kZXhlcnMvZ3N0aW5kZXhlcnMuYzoKLQkgIGRvY3VtZW50IGNvcmUgcGx1Z2lucyBpbiBhIHNlcGFyYXRlIGRvY3VtZW50IGp1c3QgbGlrZSBhbGwgdGhlIG90aGVycyByZW5hbWUgdGhlc2UgcGx1Z2lucyB0byBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb2N1bWVudCBjb3JlIHBsdWdpbnMgaW4gYSBzZXBhcmF0ZSBkb2N1bWVudCBqdXN0IGxpa2UgYWxsIHRoZQotCSAgb3RoZXJzCi0JICByZW5hbWUgdGhlc2UgcGx1Z2lucyB0byBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBjb3JlCi0KLTIwMDUtMTItMDEgMTI6MDA6NTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGV2ZW50LmggKHN0cnVjdCBfR3N0RXZlbnQpOiBNZWFudCB0byByZW1vdmUgdGhlIGV4dHJhIHBhZGRpbmcgaGVyZSBiZWZvcmUsIGJ1dCBpdCBtaXNzZWQgdGhlIGNvbW1pdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMi0wMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGV2ZW50LmggKHN0cnVjdCBfR3N0RXZlbnQpOiBNZWFudCB0byByZW1vdmUgdGhlIGV4dHJhCi0JICBwYWRkaW5nIGhlcmUgYmVmb3JlLCBidXQgaXQgbWlzc2VkIHRoZSBjb21taXQuCi0KLTIwMDUtMTItMDEgMTA6MDc6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JKiB3aW4zMi92czYvZ3N0cmVhbWVyLmRzdzoKLQkqIHdpbjMyL3ZzNi9saWJnc3Rjb250cm9sbGVyLmRzcDoKLQkgIGFkZCBsaWJnc3Rjb250cm9sbGVyIHRvIHRoZSBidWlsZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbGliZ3N0Y29udHJvbGxlciB0byB0aGUgYnVpbGQKLQotMjAwNS0xMi0wMSAwOTo1NDo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOiB3aGl0ZXNwYWNlIHByaWNlcyBoYXZlIGNyYXNoZWQsIHdlIHNob3VsZCBmZWVsIGZyZWUgdG8gdXNlIHNvbWUgbm93IHVzZSBnc3RfZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSAgd2hpdGVzcGFjZSBwcmljZXMgaGF2ZSBjcmFzaGVkLCB3ZSBzaG91bGQgZmVlbCBmcmVlIHRvIHVzZSBzb21lIG5vdwotCSAgdXNlIGdzdF9ndWludDY0X3RvX2dkb3VibGUKLQotMjAwNS0xMi0wMSAwOTozMjoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oOgotCSAgZml4IHR5cG8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHR5cG8KLQotMjAwNS0xMi0wMSAwOToyMzoyMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbi5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9saWIuYzoKLQkgIHdyYXAgY29uZmlnLmggaW5jbHVkZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3cmFwIGNvbmZpZy5oIGluY2x1ZGUKLQotMjAwNS0xMi0wMSAwMjowODoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICB1cGRhdGUgZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgZG9jcwotCi0yMDA1LTEyLTAxIDAwOjU0OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcGx1Z2lucy9lbGVtZW50cy86IG1vcmUgYW5hbCBjbGVhbnVwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOiAoZ3N0X2ZkX3NpbmtfX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2ZkX3NpbmtfX2NsYXNzX2luaXQpLCAoZ3N0X2ZkX3NpbmtfX2luaXQpLAotCSAgKGdzdF9mZF9zaW5rX19jaGFpbiksIChnc3RfZmRfc2lua19fc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZmRfc2lua19fZ2V0X3Byb3BlcnR5KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaDoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOiAoX2RvX2luaXQpLCAoZ3N0X2ZkX3NyY19iYXNlX2luaXQpLAotCSAgKGdzdF9mZF9zcmNfY2xhc3NfaW5pdCksIChnc3RfZmRfc3JjX2luaXQpLCAoZ3N0X2ZkX3NyY19kaXNwb3NlKSwKLQkgIChnc3RfZmRfc3JjX3VwZGF0ZV9mZCksIChnc3RfZmRfc3JjX3N0YXJ0KSwgKGdzdF9mZF9zcmNfc3RvcCksCi0JICAoZ3N0X2ZkX3NyY191bmxvY2spLCAoZ3N0X2ZkX3NyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9mZF9zcmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9mZF9zcmNfY3JlYXRlKSwKLQkgIChnc3RfZmRfc3JjX2lzX3NlZWthYmxlKSwgKGdzdF9mZF9zcmNfZ2V0X3NpemUpLAotCSAgKGdzdF9mZF9zcmNfdXJpX2dldF90eXBlKSwgKGdzdF9mZF9zcmNfdXJpX2dldF9wcm90b2NvbHMpLAotCSAgKGdzdF9mZF9zcmNfdXJpX2dldF91cmkpLCAoZ3N0X2ZkX3NyY191cmlfc2V0X3VyaSksCi0JICAoZ3N0X2ZkX3NyY191cmlfaGFuZGxlcl9pbml0KToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5oOgotCSAgKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfZ2V0X3R5cGUpOgotCSAgbW9yZSBhbmFsIGNsZWFudXAKLQotMjAwNS0xMS0zMCAxOTozNjo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIGZpeCB0aGUgZG9jcyBidWlsZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggdGhlIGRvY3MgYnVpbGQKLQotMjAwNS0xMS0zMCAxOTowMzo1OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbjoKLQkgIGFkZCBuZXcgaW5wdXQgdHlwZXMgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbmV3IGlucHV0IHR5cGVzIGZpbGUKLQotMjAwNS0xMS0zMCAxOTowMTo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHZhcmlvdXMgZml4ZXMgdG8gbWFrZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uaDoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JICAqIHRlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jOgotCSAgKiB0ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuYzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRvb2xzL01ha2VmaWxlLmFtOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSAgdmFyaW91cyBmaXhlcyB0byBtYWtlCi0JICAtLWRpc2FibGUtbmxzIC0tZGlzYWJsZS1yZWdpc3RyeSAtLWRpc2FibGUtbG9hZHNhdmUgICAgICAgICAgIC0tZGlzYWJsZS1wYXJzZSAtLWRpc2FibGUtZ3N0LWRlYnVnCi0JICB3b3JrIGFuZCBnZXQgdGhlIGNvcmUgLnNvIGRvd24gdG8gMzYwNDQ0IGJ5dGVzIGFmdGVyIHN0cmlwcGluZwotCi0yMDA1LTExLTMwIDE3OjA1OjI5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIG1vdmUgbG9jYXRpb24gb2YgdGVzdCByZWdpc3RyeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtb3ZlIGxvY2F0aW9uIG9mIHRlc3QgcmVnaXN0cnkKLQotMjAwNS0xMS0zMCAxNjo0NTo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uZ2l0aWdub3JlOgotCSAgaWdub3JlIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWdub3JlIG1vcmUKLQotMjAwNS0xMS0zMCAxNjo0NToxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL21pc2MvTWFrZWZpbGUuYW06Ci0JICBtaXNzaW5nIG1ha2VmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1pc3NpbmcgbWFrZWZpbGUKLQotMjAwNS0xMS0zMCAxNjo0MzoxNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHNjcmlwdHMvY3ZzLXVwZGF0ZS5zaDoKLQkgIHBydW5lIGVtcHR5IGRpcnMgd2hlbiB1cGRhdGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwcnVuZSBlbXB0eSBkaXJzIHdoZW4gdXBkYXRpbmcKLQotMjAwNS0xMS0zMCAxNjo0MjoyNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIERPQ0JVSUxESU5HOgotCSogZG9jcy9SRUFETUU6Ci0JICByZW1vdmUgZW1wdHkgZGlyczsgbW92ZSBkb2NidWlsZGluZyBub3RlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgZW1wdHkgZGlyczsgbW92ZSBkb2NidWlsZGluZyBub3RlcwotCi0yMDA1LTExLTMwIDE2OjM5OjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZGVzY2VuZCBpbnRvIHRlc3RzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIGRlc2NlbmQgaW50byB0ZXN0cwotCSAgKiBkb2NzL3JhbmRvbS90aG9tYXN2cy9UT0RPOgotCSAgKiB0ZXN0cy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvUkVBRE1FOgotCSAgYWRkIGEgUkVBRE1FCi0KLTIwMDUtMTEtMzAgMTY6MzI6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9iZW5jaG1hcmtzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9saWJzLy5naXRpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpZ25vcmUgbW9yZQotCi0yMDA1LTExLTMwIDE2OjMwOjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogUkVBRE1FOgotCSAgdXBkYXRlIFJFQURNRQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgUkVBRE1FCi0KLTIwMDUtMTEtMzAgMTY6Mjk6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGRvbid0IGZhaWwgb24gbWlzc2luZyByZWdpc3RyeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb24ndCBmYWlsIG9uIG1pc3NpbmcgcmVnaXN0cnkKLQotMjAwNS0xMS0zMCAxNjoyODoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL1JFQURNRS50eHQ6Ci0JICBhZGQgYSBSRUFETUUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGEgUkVBRE1FCi0KLTIwMDUtMTEtMzAgMTY6MjY6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiB3aW4zMi9HU3RyZWFtZXIudmNwcm9qOgotCSogd2luMzIvTUFOSUZFU1Q6Ci0JKiB3aW4zMi9NYWtlZmlsZToKLQkqIHdpbjMyL01ha2VmaWxlLmluc3BlY3Q6Ci0JKiB3aW4zMi9NYWtlZmlsZS5sYXVuY2g6Ci0JKiB3aW4zMi9NYWtlZmlsZS5yZWdpc3RlcjoKLQkqIHdpbjMyL1JFQURNRS50eHQ6Ci0JKiB3aW4zMi9nc3QtaW5zcGVjdC52Y3Byb2o6Ci0JKiB3aW4zMi9nc3QtbGF1bmNoLnZjcHJvajoKLQkqIHdpbjMyL2dzdC1yZWdpc3Rlci52Y3Byb2o6Ci0JKiB3aW4zMi9nc3RlbGVtZW50cy52Y3Byb2o6Ci0JKiB3aW4zMi9nc3RnZXRiaXRzLmRlZjoKLQkqIHdpbjMyL2dzdGdldGJpdHMudmNwcm9qOgotCSogd2luMzIvZ3N0cmVhbWVyLWRiZy5kZWY6Ci0JKiB3aW4zMi9nc3RyZWFtZXIuZGVmOgotCSogd2luMzIvbGliZ3N0YmFzZS5kZWY6Ci0JKiB3aW4zMi9saWJnc3RiYXNlLnZjcHJvajoKLQkqIHdpbjMyL2xpbmtfb2xkcnVudGltZS5jOgotCSogd2luMzIvbW1hbi5jOgotCSogd2luMzIvbW1hbi5oOgotCSogd2luMzIvbW1hbi5pbmw6Ci0JKiB3aW4zMi9tc3ZjNzEuc2xuOgotCSAgbW92ZSBldmVuIG1vcmUgc3R1ZmYsIHdpbjMyLyBpcyBuaWNlIGFuZCBjbGVhbiBub3cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW92ZSBldmVuIG1vcmUgc3R1ZmYsIHdpbjMyLyBpcyBuaWNlIGFuZCBjbGVhbiBub3cKLQotMjAwNS0xMS0zMCAxNjoxNzoyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvLmdpdGlnbm9yZToKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiB3aW4zMi9NQU5JRkVTVDoKLQkqIHdpbjMyL2NvbmZpZy5oOgotCSogd2luMzIvZGlyZW50LmM6Ci0JKiB3aW4zMi9kaXJlbnQuaDoKLQkqIHdpbjMyL2dzdGJ5dGVzdHJlYW0uZGVmOgotCSogd2luMzIvZ3N0Ynl0ZXN0cmVhbS52Y3Byb2o6Ci0JKiB3aW4zMi9nc3Rjb25maWcuaDoKLQkqIHdpbjMyL2dzdGVudW10eXBlcy5jOgotCSogd2luMzIvZ3N0ZW51bXR5cGVzLmg6Ci0JKiB3aW4zMi9nc3RvcHRpbWFsc2NoZWR1bGVyLnZjcHJvajoKLQkqIHdpbjMyL2dzdHZlcnNpb24uaDoKLQkqIHdpbjMyL2d0Y2hhci5oOgotCSogd2luMzIvdGVzdHN1aXRlL2JpbnMudmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL2J5dGVzdHJlYW0udmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL2NhcHMudmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL2NsZWFudXAudmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL2Nsb2NrLnZjcHJvajoKLQkqIHdpbjMyL3Rlc3RzdWl0ZS9kZWJ1Zy52Y3Byb2o6Ci0JKiB3aW4zMi90ZXN0c3VpdGUvZGxvcGVuLnZjcHJvajoKLQkqIHdpbjMyL3Rlc3RzdWl0ZS9keW5wYXJhbXMudmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL2VsZW1lbnRzLnZjcHJvajoKLQkqIHdpbjMyL3Rlc3RzdWl0ZS9naG9zdHBhZHMudmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL2luZGV4ZXJzLnZjcHJvajoKLQkqIHdpbjMyL3Rlc3RzdWl0ZS9uZWdvdGlhdGlvbi52Y3Byb2o6Ci0JKiB3aW4zMi90ZXN0c3VpdGUvcGFyc2UudmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL3BsdWdpbi52Y3Byb2o6Ci0JKiB3aW4zMi90ZXN0c3VpdGUvcmVmY291bnRpbmcudmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL3NjaGVkdWxlcnMudmNwcm9qOgotCSogd2luMzIvdGVzdHN1aXRlL3N0YXRlcy52Y3Byb2o6Ci0JKiB3aW4zMi90ZXN0c3VpdGUvdGFncy52Y3Byb2o6Ci0JKiB3aW4zMi90ZXN0c3VpdGUvdGhyZWFkcy52Y3Byb2o6Ci0JICByZW1vdmUgb2xkIHdpbjMyIHN0dWZmIHRoYXQgaXNuJ3QgbWFpbnRhaW5lZCBhbmQgc2hvdWxkIGJlIHJlb3JnYW5pemVkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBvbGQgd2luMzIgc3R1ZmYgdGhhdCBpc24ndCBtYWludGFpbmVkIGFuZCBzaG91bGQgYmUKLQkgIHJlb3JnYW5pemVkCi0KLTIwMDUtMTEtMzAgMTY6MTI6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBsaWJzL2dzdC9nZXRiaXRzLy5naXRpZ25vcmU6Ci0JICByZW1vdmUgZ2V0Yml0cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgZ2V0Yml0cwotCi0yMDA1LTExLTMwIDE2OjEwOjU3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYyAoR1NUX1BLR19ERVBTKTogUmV2ZXJ0IHByZXZpb3VzIHBhdGNoLCBtYWtlcyBsb2FkaW5nIHRoZSBnc3QuaW50ZXJmYWNlcyBweXRob24gbW9kdWxlIGJvcmsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMzAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNvbmZpZ3VyZS5hYyAoR1NUX1BLR19ERVBTKTogUmV2ZXJ0IHByZXZpb3VzIHBhdGNoLCBtYWtlcwotCSAgbG9hZGluZyB0aGUgZ3N0LmludGVyZmFjZXMgcHl0aG9uIG1vZHVsZSBib3JrLgotCSAgKiBjb25maWd1cmUuYWMgKEdTVF9QS0dfREVQUyk6IFVzZSBnbW9kdWxlLW5vLWV4cG9ydC0yLjAucGMsCi0JICBhdmFpbGFibGUgc2luY2UgR0xpYiAyLjIuIEZpeGVzICMzMTgwMzEuCi0KLTIwMDUtMTEtMzAgMTY6MDg6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBNYWtlZmlsZS5hbToKLQkqIGNoZWNrLy5naXRpZ25vcmU6Ci0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIGNoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiBjaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6Ci0JKiBjaGVjay9lbGVtZW50cy9mZHNyYy5jOgotCSogY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzoKLQkqIGNoZWNrL2dlbmVyaWMvLmdpdGlnbm9yZToKLQkqIGNoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JKiBjaGVjay9nc3QtbGlicy8uZ2l0aWdub3JlOgotCSogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOgotCSogY2hlY2svZ3N0LWxpYnMvZ2RwLmM6Ci0JKiBjaGVjay9nc3QvLmdpdGlnbm9yZToKLQkqIGNoZWNrL2dzdC9jYXBzbGlzdC5oOgotCSogY2hlY2svZ3N0L2dzdC5jOgotCSogY2hlY2svZ3N0L2dzdGJpbi5jOgotCSogY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogY2hlY2svZ3N0L2dzdGJ1cy5jOgotCSogY2hlY2svZ3N0L2dzdGNhcHMuYzoKLQkqIGNoZWNrL2dzdC9nc3RlbGVtZW50LmM6Ci0JKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOgotCSogY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBjaGVjay9nc3QvZ3N0bWVzc2FnZS5jOgotCSogY2hlY2svZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkqIGNoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkqIGNoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgotCSogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSogY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzoKLQkqIGNoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGNoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogY2hlY2svZ3N0L2dzdHRhZy5jOgotCSogY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkqIGNoZWNrL25ldC8uZ2l0aWdub3JlOgotCSogY2hlY2svbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JKiBjaGVjay9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6Ci0JKiBjaGVjay9waXBlbGluZXMvLmdpdGlnbm9yZToKLQkqIGNoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6Ci0JKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOgotCSogY2hlY2svcGlwZWxpbmVzL3N0cmVzcy5jOgotCSogY2hlY2svc3RhdGVzLy5naXRpZ25vcmU6Ci0JKiBjaGVjay9zdGF0ZXMvc2lua3MuYzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvYXBwcmVhZGVyLy5naXRpZ25vcmU6Ci0JKiBleGFtcGxlcy9hcHByZWFkZXIvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9hcHByZWFkZXIvYXBwcmVhZGVyLmM6Ci0JKiBleGFtcGxlcy9jb250cm9sbGVyLy5naXRpZ25vcmU6Ci0JKiBleGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6Ci0JKiBleGFtcGxlcy9jdXR0ZXIvLmdpdGlnbm9yZToKLQkqIGV4YW1wbGVzL2N1dHRlci9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL2N1dHRlci9jdXR0ZXIuYzoKLQkqIGV4YW1wbGVzL2N1dHRlci9jdXR0ZXIuaDoKLQkqIGV4YW1wbGVzL2V2ZW50cy9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL2V2ZW50cy9zZWVrLmM6Ci0JKiBleGFtcGxlcy9oZWxsb3dvcmxkLy5naXRpZ25vcmU6Ci0JKiBleGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmM6Ci0JKiBleGFtcGxlcy9oZWxsb3dvcmxkMi8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvaGVsbG93b3JsZDIvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9oZWxsb3dvcmxkMi9oZWxsb3dvcmxkMi5jOgotCSogZXhhbXBsZXMvbGF1bmNoLy5naXRpZ25vcmU6Ci0JKiBleGFtcGxlcy9sYXVuY2gvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9sYXVuY2gvbXAzcGFyc2VsYXVuY2guYzoKLQkqIGV4YW1wbGVzL2xhdW5jaC9tcDNwbGF5OgotCSogZXhhbXBsZXMvbWFudWFsLy5naXRpZ25vcmU6Ci0JKiBleGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9tYW51YWwvZXh0cmFjdC5wbDoKLQkqIGV4YW1wbGVzL21ldGFkYXRhL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOgotCSogZXhhbXBsZXMvbWl4ZXIvLmdpdGlnbm9yZToKLQkqIGV4YW1wbGVzL21peGVyL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuYzoKLQkqIGV4YW1wbGVzL21peGVyL21peGVyLmg6Ci0JKiBleGFtcGxlcy9waW5ncG9uZy8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvcGluZ3BvbmcvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9waW5ncG9uZy9waW5ncG9uZy5jOgotCSogZXhhbXBsZXMvcGx1Z2lucy8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL3BsdWdpbnMvZXhhbXBsZS5jOgotCSogZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmg6Ci0JKiBleGFtcGxlcy9wd2cvLmdpdGlnbm9yZToKLQkqIGV4YW1wbGVzL3B3Zy9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL3B3Zy9leHRyYWN0LnBsOgotCSogZXhhbXBsZXMvcXVldWUvLmdpdGlnbm9yZToKLQkqIGV4YW1wbGVzL3F1ZXVlL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvcXVldWUvcXVldWUuYzoKLQkqIGV4YW1wbGVzL3F1ZXVlMi8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvcXVldWUyL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvcXVldWUyL3F1ZXVlMi5jOgotCSogZXhhbXBsZXMvcXVldWUzLy5naXRpZ25vcmU6Ci0JKiBleGFtcGxlcy9xdWV1ZTMvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9xdWV1ZTMvcXVldWUzLmM6Ci0JKiBleGFtcGxlcy9xdWV1ZTQvLmdpdGlnbm9yZToKLQkqIGV4YW1wbGVzL3F1ZXVlNC9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL3F1ZXVlNC9xdWV1ZTQuYzoKLQkqIGV4YW1wbGVzL3JldGFnLy5naXRpZ25vcmU6Ci0JKiBleGFtcGxlcy9yZXRhZy9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL3JldGFnL3JldGFnLmM6Ci0JKiBleGFtcGxlcy9yZXRhZy90cmFuc2NvZGUuYzoKLQkqIGV4YW1wbGVzL3RocmVhZC8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvdGhyZWFkL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvdGhyZWFkL3RocmVhZC5jOgotCSogZXhhbXBsZXMvdHlwZWZpbmQvLmdpdGlnbm9yZToKLQkqIGV4YW1wbGVzL3R5cGVmaW5kL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvdHlwZWZpbmQvdHlwZWZpbmQuYzoKLQkqIGV4YW1wbGVzL3htbC8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMveG1sL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMveG1sL2NyZWF0ZXhtbC5jOgotCSogZXhhbXBsZXMveG1sL3J1bnhtbC5jOgotCSogdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS8uZ2l0aWdub3JlOgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL1J1bGVzOgotCSogdGVzdHN1aXRlL2NhcHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzdWl0ZS9jYXBzL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL2NhcHMvYXBwX2ZpeGF0ZS5jOgotCSogdGVzdHN1aXRlL2NhcHMvYXVkaW9zY2FsZS5jOgotCSogdGVzdHN1aXRlL2NhcHMvY2Fwcy5jOgotCSogdGVzdHN1aXRlL2NhcHMvY2Fwcy5oOgotCSogdGVzdHN1aXRlL2NhcHMvY2Fwc19zdHJpbmdzOgotCSogdGVzdHN1aXRlL2NhcHMvY29tcGF0aWJpbGl0eS5jOgotCSogdGVzdHN1aXRlL2NhcHMvZGVzZXJpYWxpemUuYzoKLQkqIHRlc3RzdWl0ZS9jYXBzL2VudW1jYXBzLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9lcmF0b3N0aGVuZXMuYzoKLQkqIHRlc3RzdWl0ZS9jYXBzL2ZpbHRlcmNhcHMuYzoKLQkqIHRlc3RzdWl0ZS9jYXBzL2ZpeGVkLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9mcmFjdGlvbi1jb252ZXJ0LmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9mcmFjdGlvbi1tdWx0aXBseS1hbmQtemVyby5jOgotCSogdGVzdHN1aXRlL2NhcHMvaW50ZXJzZWN0Mi5jOgotCSogdGVzdHN1aXRlL2NhcHMvaW50ZXJzZWN0aW9uLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9ub3JtYWxpc2F0aW9uLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9yYW5kb20uYzoKLQkqIHRlc3RzdWl0ZS9jYXBzL3JlbmVnb3RpYXRlLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9zZXRzLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9zaW1wbGlmeS5jOgotCSogdGVzdHN1aXRlL2NhcHMvc3RyaW5nLWNvbnZlcnNpb25zLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9zdHJ1Y3R1cmUuYzoKLQkqIHRlc3RzdWl0ZS9jYXBzL3N1YnRyYWN0LmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy91bmlvbi5jOgotCSogdGVzdHN1aXRlL2RlYnVnLy5naXRpZ25vcmU6Ci0JKiB0ZXN0c3VpdGUvZGVidWcvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvZGVidWcvY2F0ZWdvcnkuYzoKLQkqIHRlc3RzdWl0ZS9kZWJ1Zy9jb21tYW5kbGluZS5jOgotCSogdGVzdHN1aXRlL2RlYnVnL2dsb2JhbC5jOgotCSogdGVzdHN1aXRlL2RlYnVnL291dHB1dC5jOgotCSogdGVzdHN1aXRlL2RlYnVnL3ByaW50Zl9leHRlbnNpb24uYzoKLQkqIHRlc3RzdWl0ZS9kbG9wZW4vLmdpdGlnbm9yZToKLQkqIHRlc3RzdWl0ZS9kbG9wZW4vTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvZGxvcGVuL2Rsb3Blbl9nc3QuYzoKLQkqIHRlc3RzdWl0ZS9kbG9wZW4vbG9hZGdzdC5jOgotCSogdGVzdHN1aXRlL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0c3VpdGUvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvZWxlbWVudHMvZ3N0LWluc3BlY3QtY2hlY2suaW46Ci0JKiB0ZXN0c3VpdGUvZWxlbWVudHMvc3RydWN0X2kzODYuaDoKLQkqIHRlc3RzdWl0ZS9lbGVtZW50cy9zdHJ1Y3Rfc2l6ZS5jOgotCSogdGVzdHN1aXRlL2luZGV4ZXJzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0c3VpdGUvaW5kZXhlcnMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvaW5kZXhlcnMvY2FjaGUxLmM6Ci0JKiB0ZXN0c3VpdGUvaW5kZXhlcnMvaW5kZXhkdW1wLmM6Ci0JKiB0ZXN0c3VpdGUvcGFyc2UvLmdpdGlnbm9yZToKLQkqIHRlc3RzdWl0ZS9wYXJzZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9wYXJzZS9wYXJzZTEuYzoKLQkqIHRlc3RzdWl0ZS9wYXJzZS9wYXJzZTIuYzoKLQkqIHRlc3RzdWl0ZS9wbHVnaW4vLmdpdGlnbm9yZToKLQkqIHRlc3RzdWl0ZS9wbHVnaW4vTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvcGx1Z2luL1JFQURNRToKLQkqIHRlc3RzdWl0ZS9wbHVnaW4vZHluYW1pYy5jOgotCSogdGVzdHN1aXRlL3BsdWdpbi9saW5rZWQuYzoKLQkqIHRlc3RzdWl0ZS9wbHVnaW4vbG9hZGluZy5jOgotCSogdGVzdHN1aXRlL3BsdWdpbi9yZWdpc3RyeS5jOgotCSogdGVzdHN1aXRlL3BsdWdpbi9zdGF0aWMuYzoKLQkqIHRlc3RzdWl0ZS9wbHVnaW4vc3RhdGljMi5jOgotCSogdGVzdHN1aXRlL3BsdWdpbi90ZXN0cGx1Z2luLmM6Ci0JKiB0ZXN0c3VpdGUvcGx1Z2luL3Rlc3RwbHVnaW4yLmM6Ci0JKiB0ZXN0c3VpdGUvcGx1Z2luL3Rlc3RwbHVnaW4yX3MuYzoKLQkqIHRlc3RzdWl0ZS9wbHVnaW4vdGVzdHBsdWdpbl9zLmM6Ci0JKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvLmdpdGlnbm9yZToKLQkqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy9iaW4uYzoKLQkqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy9lbGVtZW50LmM6Ci0JKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvZWxlbWVudF9wYWQuYzoKLQkqIHRlc3RzdWl0ZS9yZWZjb3VudGluZy9tYWlubG9vcC5jOgotCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL21lbS5jOgotCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL21lbS5oOgotCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL29iamVjdC5jOgotCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL3BhZC5jOgotCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL3NjaGVkLmM6Ci0JKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvdGhyZWFkLmM6Ci0JKiB0ZXN0c3VpdGUvc3RhdGVzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0c3VpdGUvc3RhdGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL3N0YXRlcy9iaW4uYzoKLQkqIHRlc3RzdWl0ZS9zdGF0ZXMvbG9ja2VkLmM6Ci0JKiB0ZXN0c3VpdGUvc3RhdGVzL3BhcmVudC5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzdWl0ZS90aHJlYWRzLzE1OTU2Ni5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvMTU5ODUyLmM6Ci0JKiB0ZXN0c3VpdGUvdGhyZWFkcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS90aHJlYWRzL3F1ZXVlLmM6Ci0JKiB0ZXN0c3VpdGUvdGhyZWFkcy9zaWduYWxzLmM6Ci0JKiB0ZXN0c3VpdGUvdGhyZWFkcy9zdGF0aWNyZWMuYzoKLQkqIHRlc3RzdWl0ZS90aHJlYWRzL3RocmVhZC5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkYi5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkYy5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkZC5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkZS5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkZi5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkZy5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkaC5jOgotCSogdGVzdHN1aXRlL3RocmVhZHMvdGhyZWFkaS5jOgotCSAgbW92ZSBhbGwgb2YgdGhlc2UgdW5kZXIgdGVzdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW92ZSBhbGwgb2YgdGhlc2UgdW5kZXIgdGVzdHMKLQotMjAwNS0xMS0zMCAxNTozNzozNiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIHVwZGF0ZSBhZnRlciB0aG9tYXMncyBDVlMgc3VyZ2VyeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgYWZ0ZXIgdGhvbWFzJ3MgQ1ZTIHN1cmdlcnkKLQotMjAwNS0xMS0zMCAxNTozNDozNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2JlbmNobWFya3MvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW06Ci0JICBhZGQgTWFrZWZpbGUuYW0KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIE1ha2VmaWxlLmFtCi0KLTIwMDUtMTEtMzAgMTU6Mjk6MDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBmaXggZGlzdGNoZWNrCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiB0ZXN0cy9NYWtlZmlsZS5hbToKLQkgIGZpeCBkaXN0Y2hlY2sKLQotMjAwNS0xMS0zMCAxNToyMDoyOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9kZXNlcmlhbGl6ZS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL2ludGVyc2VjdGlvbi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3VuaW9uLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy9kZXNlcmlhbGl6ZS5jOgotCSogdGVzdHN1aXRlL2NhcHMvaW50ZXJzZWN0aW9uLmM6Ci0JKiB0ZXN0c3VpdGUvY2Fwcy91bmlvbi5jOgotCSAgY29tcGlsZSB3YXJuaW5nIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbXBpbGUgd2FybmluZyBmaXhlcwotCi0yMDA1LTExLTMwIDEzOjI4OjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvZ3N0LWNvbXBwcmVwLWNoZWNrLmluOgotCSogdGVzdHN1aXRlL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL2VsZW1lbnRzL2dzdC1jb21wcHJlcC1jaGVjay5pbjoKLQkgIHJlbW92ZSBjb21wcHJlcAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgY29tcHByZXAKLQotMjAwNS0xMS0zMCAxMzoyNTowNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBjb25maWd1cmUuYWMgKEdTVF9QS0dfREVQUyk6IFVzZSBnbW9kdWxlLW5vLWV4cG9ydC0yLjAucGMsIGF2YWlsYWJsZSBzaW5jZSBHTGliIDIuMi4gRml4ZXMgIzMxODAzMS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0zMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogY29uZmlndXJlLmFjIChHU1RfUEtHX0RFUFMpOiBVc2UgZ21vZHVsZS1uby1leHBvcnQtMi4wLnBjLAotCSAgYXZhaWxhYmxlIHNpbmNlIEdMaWIgMi4yLiBGaXhlcyAjMzE4MDMxLgotCi0yMDA1LTExLTMwIDEzOjA4OjA4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgRmlyc3QgcGFzcyBhdCBjbGVhbmluZyB1cCB0ZXN0cy8gZGlyIGJlZm9yZSBtb3ZpbmcgdGhlIHJlc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIHRlc3RzL2JlbmNoLWNvbXBsZXhpdHkuc2NtOgotCSAgKiB0ZXN0cy9iZW5jaC1tYXNzX2VsZW1lbnRzLnNjbToKLQkgICogdGVzdHMvY29tcGxleGl0eS5jOgotCSAgKiB0ZXN0cy9jb21wbGV4aXR5LmdudXBsb3Q6Ci0JICAqIHRlc3RzL2luc3RhbnRpYXRlLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2luc3RhbnRpYXRlL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9pbnN0YW50aWF0ZS9jYXBzLmM6Ci0JICAqIHRlc3RzL21hc3NfZWxlbWVudHMuYzoKLQkgICogdGVzdHMvbmV0d29yay1jbG9jay11dGlscy5zY206Ci0JICAqIHRlc3RzL25ldHdvcmstY2xvY2suc2NtOgotCSAgKiB0ZXN0cy9wbG90LWRhdGE6Ci0JICBGaXJzdCBwYXNzIGF0IGNsZWFuaW5nIHVwIHRlc3RzLyBkaXIgYmVmb3JlIG1vdmluZyB0aGUgcmVzdAotCSAgQ29tYmluZWQgd2l0aCBDVlMgc3VyZ2VyeQotCi0yMDA1LTExLTMwIDEzOjA3OjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIG1vdmUgaW5jbHVkZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW92ZSBpbmNsdWRlcwotCi0yMDA1LTExLTMwIDExOjU1OjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogUkVBRE1FOgotCSAgcmVtb3ZlIG5vcndlZ2lhbmlzbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgbm9yd2VnaWFuaXNtCi0KLTIwMDUtMTEtMzAgMTA6NTA6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIG1ha2Ugbm90IGhhdmluZyBjaGVjayBub24tZmF0YWwgZm9yIGV4dHJhIHRhcmdldHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbWFrZSBub3QgaGF2aW5nIGNoZWNrIG5vbi1mYXRhbCBmb3IgZXh0cmEgdGFyZ2V0cwotCi0yMDA1LTExLTMwIDEwOjE1OjA4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vUE9URklMRVMuaW46IHF1ZXVlIGhhcyBtb3ZlZCwgdXBkYXRlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcG8vUE9URklMRVMuaW46Ci0JICBxdWV1ZSBoYXMgbW92ZWQsIHVwZGF0ZQotCi0yMDA1LTExLTMwIDEwOjEzOjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiB3aW4zMi92czYvZ3JhbW1hci5kc3A6Ci0JKiB3aW4zMi92czYvZ3N0X2luc3BlY3QuZHNwOgotCSogd2luMzIvdnM2L2dzdF9sYXVuY2guZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGJhc2UuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGVsZW1lbnRzLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgotCSAgYWRkIHNvbWUgZXhwbGljaXQgY2FzdHMgdXBkYXRlIGRzcCBmaWxlczsgYWxzbyBpbnN0YWxscyB0aGUgZGVidWcgYnVpbGQgaW4gXGdzdHJlYW1lclxkZWJ1ZyB0byBzZXBhcmF0ZSBpdCBmcm9tIHRoZSBuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBzb21lIGV4cGxpY2l0IGNhc3RzCi0JICB1cGRhdGUgZHNwIGZpbGVzOyBhbHNvIGluc3RhbGxzIHRoZSBkZWJ1ZyBidWlsZCBpbiBcZ3N0cmVhbWVyXGRlYnVnIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG5vbi1kZWJ1ZyBidWlsZAotCi0yMDA1LTExLTMwIDEwOjAzOjQ2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBhZGQgbW9yZSBzeW1ib2xzIHRvIGRlZiBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBtb3JlIHN5bWJvbHMgdG8gZGVmIGZpbGUKLQotMjAwNS0xMS0zMCAwOTo1OTowNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IHJlbW92ZSBkb3VibGUgZW50cmllcyBmcm9tIHRoZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIHJlbW92ZSBkb3VibGUgZW50cmllcyBmcm9tIHRoZSBkb2NzCi0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgKiBnc3QvZ3N0aW5mby5jOiAoX2dzdF9kZWJ1Z19pbml0KToKLQkgIHJlbW92ZSB0aGUgVEhSRUFEIGRlYnVnIGNhdGVnb3J5Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdHF1ZXVlLmM6Ci0JICAqIGdzdC9nc3RxdWV1ZS5oOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9nZXRfdHlwZSksCi0JICAoZ3N0X3F1ZXVlX2luaXQpLCAoZ3N0X3F1ZXVlX2ZpbmFsaXplKSwgKGdzdF9xdWV1ZV9jaGFuZ2Vfc3RhdGUpOgotCSAgY29tcGxldGVseSBtb3ZlIHF1ZXVlIGFuZCBmaXggdXAgZGVidWdnaW5nIGNhdGVnb3JpZXMKLQotMjAwNS0xMS0zMCAwOTozODo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogbWFrZSBpbml0aWFsaXphdGlvbiBwb3J0YWJsZSwgdXNpbmcgTEwgaXMgbm90Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6Ci0JICBtYWtlIGluaXRpYWxpemF0aW9uIHBvcnRhYmxlLCB1c2luZyBMTCBpcyBub3QKLQotMjAwNS0xMS0zMCAwOTozNjoxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgYWRkIG1vcmUgc3ltYm9scyB0byBkZWYgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbW9yZSBzeW1ib2xzIHRvIGRlZiBmaWxlCi0KLTIwMDUtMTEtMzAgMDk6MzA6NTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGFkZCBtb3JlIHN5bWJvbHMgdG8gZGVmIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG1vcmUgc3ltYm9scyB0byBkZWYgZmlsZQotCi0yMDA1LTExLTMwIDA5OjI3OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oOiBhZGQgbGFyZ2UgcGFkZGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDoKLQkgIGFkZCBsYXJnZSBwYWRkaW5nCi0KLTIwMDUtMTEtMzAgMDk6MjI6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjogcmVuYW1lIHN5bWJvbHM7IHNvcnQgYmFzZSBzZWN0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICByZW5hbWUgc3ltYm9sczsgc29ydCBiYXNlIHNlY3Rpb24KLQotMjAwNS0xMS0zMCAwOToxODoxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3RjbG9jay5jOiByZW1vdmUgY3JhY2sgbm9uLXBvcnRhYmxlIGhhbmRyb2xsZWQgREVCVUcgbWFjcm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0zMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQkgICogZ3N0L2dzdGNsb2NrLmM6IChkb19saW5lYXJfcmVncmVzc2lvbik6Ci0JICByZW1vdmUgY3JhY2sgbm9uLXBvcnRhYmxlIGhhbmRyb2xsZWQgREVCVUcgbWFjcm8KLQotMjAwNS0xMS0zMCAwOToxMjo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSAgdXBkYXRlIHZpc3VhbCBzdHVkaW8gZ2VuZXJhdGVkIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSB2aXN1YWwgc3R1ZGlvIGdlbmVyYXRlZCBmaWxlcwotCi0yMDA1LTExLTMwIDA4OjU2OjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgd2luMzIvdnM2LzogdXBkYXRlIHByb2plY3QgZmlsZXMgZm9yIG5ldyBsb2NhdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi92czYvbGliZ3N0YmFzZS5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RlbGVtZW50cy5kc3A6Ci0JICB1cGRhdGUgcHJvamVjdCBmaWxlcyBmb3IgbmV3IGxvY2F0aW9ucwotCi0yMDA1LTExLTMwIDA4OjUyOjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgTWFrZWZpbGUuYW06IHJlbW92ZSBzb21lIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICByZW1vdmUgc29tZSBmaWxlcwotCSAgKiBSRUFETUU6Ci0JICByZWluc3RhdGUgYW5kIHVwZGF0ZQotCSAgKiBERVZFTDoKLQkgICogUkVRVUlSRU1FTlRTOgotCSAgcmVtb3ZlZAotCSAgKiBMSUNFTlNFOgotCSAgKiBkb2NzL3JhbmRvbS9MSUNFTlNFOgotCSAgbW92ZWQgdG8gcmFuZG9tCi0KLTIwMDUtMTEtMzAgMDg6MzY6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBSRUFETUU6Ci0JICBwdXQgdGhlIFJFQURNRSBiYWNrCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHB1dCB0aGUgUkVBRE1FIGJhY2sKLQotMjAwNS0xMS0zMCAwODozMzozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIFRPRE86Ci0JICBjbGVhbiB1cCBUT0RPCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNsZWFuIHVwIFRPRE8KLQotMjAwNS0xMS0zMCAwODoyOToxNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGxpYnMvZXh0L01ha2VmaWxlLmFtOgotCSAgcmVtb3ZpbmcgZXh0LCB3YXMgbm90IHVzZWQgYW55bW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmluZyBleHQsIHdhcyBub3QgdXNlZCBhbnltb3JlCi0KLTIwMDUtMTEtMjkgMjM6NTY6MjAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC86IEZpeCBtZW1vcnkgbGVhayBpbiBHc3RUeXBlRmluZEZhY3RvcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHR5cGVmaW5kLmM6IChnc3RfdHlwZV9maW5kX3JlZ2lzdGVyKToKLQkgICogZ3N0L2dzdHR5cGVmaW5kLmg6Ci0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzogKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9pbml0KSwKLQkgIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZGlzcG9zZSk6Ci0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuaDoKLQkgIEZpeCBtZW1vcnkgbGVhayBpbiBHc3RUeXBlRmluZEZhY3RvcnkuCi0KLTIwMDUtMTEtMjkgMjA6MTY6NDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgdXBkYXRlZCB0cmFuc2xhdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlZCB0cmFuc2xhdGlvbnMKLQotMjAwNS0xMS0yOSAxOTo0NzowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIG1vdmUgcXVldWUgZnJvbSBjb3JlIHRvIHRoZSBlbGVtZW50cyBwbHVnaW4gw6cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgbW92ZSBxdWV1ZSBmcm9tIGNvcmUgdG8gdGhlIGVsZW1lbnRzIHBsdWdpbgotCSAgw6cKLQotMjAwNS0xMS0yOSAxOTo0NDo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKLQkgIHVwZGF0ZSB1bmluc3RhbGxlZCBwYyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgdW5pbnN0YWxsZWQgcGMgZmlsZXMKLQotMjAwNS0xMS0yOSAxOTozNzo0OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBsaWJzL2dzdC9iYXNlLzogZW4tTEFSR0UgdGhlIHBhZGRpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgICogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOiBlbi1MQVJHRSB0aGUgcGFkZGluZy4KLQkgICogZ3N0L2dzdGNvbmZpZy5oLmluIChHU1RfUEFERElOR19MQVJHRSk6IE5ldyBkZWZpbmUsIHRoZSBudW1iZXIKLQkgIG9mIHBvaW50ZXJzIGJ5IHdoaWNoIHRvIHBhZCB2ZXJ5IGV4dGVuc2libGUgYmFzZSBjbGFzc2VzIChsaWtlIHRoZQotCSAgb25lcyBpbiBsaWJzL2dzdC9iYXNlKS4KLQotMjAwNS0xMS0yOSAxOTozNDoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvY3MvOiBtb3ZpbmcgZG9jdW1lbnRhdGlvbiBmcm9tIGNvcmUgdG8gbGliCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgIG1vdmluZyBkb2N1bWVudGF0aW9uIGZyb20gY29yZSB0byBsaWIKLQotMjAwNS0xMS0yOSAxOToxMjozMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYmFzZS8uZ2l0aWdub3JlOgotCSogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYmFzZS9SRUFETUU6Ci0JKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgotCSogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg6Ci0JKiBnc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBnc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGdzdC9jaGVjay9nc3RjaGVjay5oOgotCSogZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIGdzdC9uZXQvZ3N0bmV0Lmg6Ci0JKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6Ci0JKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6Ci0JKiBnc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYzoKLQkqIGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oOgotCSogZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkqIGdzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6Ci0JKiBsaWJzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBvL1BPVEZJTEVTLmluOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBDVlMgc3VyZ2VyeSArIHN1cHBvcnQgdG8gbW92ZSBiYXNlLCBjaGVjaywgYW5kIG5ldCBvdXQgb2YgZ3N0IGFuZCBpbnRvIGxpYnMvZ3N0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENWUyBzdXJnZXJ5ICsgc3VwcG9ydCB0byBtb3ZlIGJhc2UsIGNoZWNrLCBhbmQgbmV0IG91dCBvZiBnc3QKLQkgIGFuZCBpbnRvIGxpYnMvZ3N0Ci0KLTIwMDUtMTEtMjkgMTg6NTc6NTkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGV2ZW50LmggKHN0cnVjdCBfR3N0RXZlbnQpOiBPbmx5IG9uZSBwb2ludGVyIG9mIHBhZGRpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RldmVudC5oIChzdHJ1Y3QgX0dzdEV2ZW50KTogT25seSBvbmUgcG9pbnRlciBvZiBwYWRkaW5nLgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmggKHN0cnVjdCBfR3N0U3RydWN0dXJlKTogT25seSBvbmUgcG9pbnRlciBvZgotCSAgcGFkZGluZy4KLQkgICogZ3N0L2dzdHF1ZXJ5LmggKHN0cnVjdCBfR3N0UXVlcnkpOiBPbmx5IG9uZSBwb2ludGVyIG9mIHBhZGRpbmcuCi0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6IFJlbW92ZSBhIGNvbW1lbnQgaW4gUGx1Z2luRmVhdHVyZS4KLQkgICogZ3N0L2dzdHBsdWdpbi5oIChzdHJ1Y3QgX0dzdFBsdWdpbkNsYXNzKTogQWRkIHNvbWUgcGFkZGluZy4KLQkgICogZ3N0L2dzdG9iamVjdC5oOiAoc3RydWN0IF9Hc3RPYmplY3QpOiBPbmx5IG9uZSBwb2ludGVyIG9mCi0JICBwYWRkaW5nOyByZWR1Y2VzIG9iamVjdCBzaXplIGJ5IGFib3V0IDMwJS4gV2UgZG9uJ3QgZXhwZWN0Ci0JICBhbnl0aGluZyBlbHNlIHRvIGdvIGludG8gZ3N0b2JqZWN0LgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oIChzdHJ1Y3QgX0dzdE1pbmlPYmplY3QpCi0JICAoc3RydWN0IF9Hc3RNaW5pT2JqZWN0Q2xhc3MpOiBPbmx5IG9uZSBwb2ludGVyIG9mIHBhZGRpbmc7IHRoZQotCSAgcGF5bG9hZCBpcyBvbmx5IGEgcG9pbnRlciBhbmQgdHdvIGludHMgYW55d2F5LiBGb3IgdGhlIGNsYXNzIHRoZXJlCi0JICBhcmUgb25seSB0d28gbWV0aG9kcyBhcyB3ZWxsLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oIChzdHJ1Y3QgX0dzdEVsZW1lbnRDbGFzcyk6IFJlbW92ZWQKLQkgIHRoZSBzdGF0ZV9jaGFuZ2VkIHNpZ25hbCBjYWxsYmFjaywgaXQgaXMgbm90IHVzZWQuCi0KLTIwMDUtMTEtMjkgMTg6NDk6MTkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogY29tcG9uZW50cy9ib25vYm8tZ3N0bWVkaWFwbGF5Ly5naXRpZ25vcmU6Ci0JKiBjb21wb25lbnRzL2Jvbm9iby1nc3RtZWRpYXBsYXkvTWFrZWZpbGUuYW06Ci0JKiBjb21wb25lbnRzL2Jvbm9iby1nc3RtZWRpYXBsYXkvYm9ub2JvLWdzdG1lZGlhcGxheS11aS54bWw6Ci0JKiBjb21wb25lbnRzL2Jvbm9iby1nc3RtZWRpYXBsYXkvYm9ub2JvLWdzdG1lZGlhcGxheS5jOgotCSogY29tcG9uZW50cy9ib25vYm8tZ3N0bWVkaWFwbGF5L2dzdG1lZGlhcGxheS5vYWZpbmZvOgotCSogY29tcG9uZW50cy9ib25vYm8tbWVkaWEvTWFrZWZpbGUuYW06Ci0JKiBjb21wb25lbnRzL2Jvbm9iby1tZWRpYS9ib25vYm8tbWVkaWEtZ3N0cmVhbWVyLWZhY3RvcnkuYzoKLQkqIGNvbXBvbmVudHMvYm9ub2JvLW1lZGlhL2Jvbm9iby1tZWRpYS1nc3RyZWFtZXIuZ29iOgotCSogY29tcG9uZW50cy9ib25vYm8tbWVkaWEvYm9ub2JvLW1lZGlhLWdzdHJlYW1lci5vYWZpbmZvOgotCSogY29tcG9uZW50cy9ib25vYm8tbWVkaWEvYm9ub2JvLW1lZGlhLWdzdHJlYW1lcnZpZGVvLmdvYjoKLQkgIHdoYWNrIGEgbW9sZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3aGFjayBhIG1vbGUKLQotMjAwNS0xMS0yOSAxODozODo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgdGhlc2UgZmlsZXMgd2VyZSBtb3ZlZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0aGVzZSBmaWxlcyB3ZXJlIG1vdmVkCi0KLTIwMDUtMTEtMjkgMTg6MjE6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6IGZpeCBpbmNsdWRlcywgdGhvdWdoIHRoZXkgYXJlIGEgbGl0dGxlIGRpbmt5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgotCSAgZml4IGluY2x1ZGVzLCB0aG91Z2ggdGhleSBhcmUgYSBsaXR0bGUgZGlua3kKLQotMjAwNS0xMS0yOSAxODoxNDozNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL01ha2VmaWxlLmFtOiBsb29rIGluIHRoZSByaWdodCBwbGFjZSBmb3IgZWxlbWVudHMsIGEgbG90IG1vcmUgY2hhbmNlIG9mIHN1Y2Nlc3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIGxvb2sgaW4gdGhlIHJpZ2h0IHBsYWNlIGZvciBlbGVtZW50cywgYSBsb3QgbW9yZSBjaGFuY2Ugb2YKLQkgIHN1Y2Nlc3MKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgcmVtb3ZlIGluZGV4ZXJzIGFuZCBlbGVtZW50cyBzdWJkaXJzCi0JICAqIHBsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICBtYWtlIGluZGV4ZXJzIGNvbmRpdGlvbmFsCi0KLTIwMDUtMTEtMjkgMTg6MDg6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgYWRkIG1pc3NpbmcgTWFrZWZpbGUuYW0KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG1pc3NpbmcgTWFrZWZpbGUuYW0KLQotMjAwNS0xMS0yOSAxODowNDoyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSAgZml4IGRvYyBidWlsZCBmb3Igc3R1ZmYgbW92ZWQgYXJvdW5kCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBkb2MgYnVpbGQgZm9yIHN0dWZmIG1vdmVkIGFyb3VuZAotCi0yMDA1LTExLTI5IDE4OjAzOjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWxlbWVudHMvZ3N0YnVmZmVyc3RvcmUuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RidWZmZXJzdG9yZS5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZkc2luay5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKLQkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKLQkqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JKiBnc3QvaW5kZXhlcnMvLmdpdGlnbm9yZToKLQkqIGdzdC9pbmRleGVycy9NYWtlZmlsZS5hbToKLQkqIGdzdC9pbmRleGVycy9nc3RmaWxlaW5kZXguYzoKLQkqIGdzdC9pbmRleGVycy9nc3RpbmRleGVycy5jOgotCSogZ3N0L2luZGV4ZXJzL2dzdG1lbWluZGV4LmM6Ci0JICByZW1vdmUgbW92ZWQgZGlycwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgbW92ZWQgZGlycwotCi0yMDA1LTExLTI5IDE4OjAyOjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3JlZ2lzdHJpZXMvLmdpdGlnbm9yZToKLQkqIGdzdC9zY2hlZHVsZXJzLy5naXRpZ25vcmU6Ci0JICByZW1vdmUgZW1wdHkgZGlycwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgZW1wdHkgZGlycwotCi0yMDA1LTExLTI5IDE4OjAwOjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZG8gQ1ZTIHN1cmdlcnkgYW5kIHJlbGF0ZWQgYnVpbGQgZml4ZXJ5IHRvIG1vdmUgZWxlbWVudHMgYW5kIGluZGV4ZXJzIGluIGEgbmV3IGdzdHJlYW1lci9wbHVnaW5zIGRpcmVjdG9yeSwgb3V0IG9mIHRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkgICogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICAqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkgICogcGx1Z2lucy9pbmRleGVycy9NYWtlZmlsZS5hbToKLQkgIGRvIENWUyBzdXJnZXJ5IGFuZCByZWxhdGVkIGJ1aWxkIGZpeGVyeSB0byBtb3ZlIGVsZW1lbnRzCi0JICBhbmQgaW5kZXhlcnMgaW4gYSBuZXcgZ3N0cmVhbWVyL3BsdWdpbnMgZGlyZWN0b3J5LCBvdXQgb2YgdGhlCi0JICBnc3QvIGRpcmVjdG9yeQotCi0yMDA1LTExLTI5IDE3OjQ3OjA2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIFJlbmFtZSBnc3RuZXQtdGVtcG5hbWUgdG8gZ3N0bmV0LiBGaXhlcyAjMzIyMjU3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTI5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMuaW46Ci0JICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluOgotCSAgKiBnc3QvbmV0L01ha2VmaWxlLmFtOiBSZW5hbWUgZ3N0bmV0LXRlbXBuYW1lIHRvIGdzdG5ldC4gRml4ZXMKLQkgICMzMjIyNTcuCi0KLTIwMDUtMTEtMjkgMTc6MzU6MDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkgIGlnbm9yZSBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGlnbm9yZSBtb3JlCi0KLTIwMDUtMTEtMjkgMTc6MzM6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIHJlbW92ZSBzb21lIG1vcmUgY29tcGxldGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIHNvbWUgbW9yZSBjb21wbGV0ZQotCi0yMDA1LTExLTI5IDE3OjMyOjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgdG9vbHMvOiByZW1vdmluZyAtY29tcHByZXAgYW5kIC1jb21wbGV0ZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL01ha2VmaWxlLmFtOgotCSAgKiB0b29scy9nc3QtY29tcGxldGUuMS5pbjoKLQkgICogdG9vbHMvZ3N0LWNvbXBsZXRlLmM6Ci0JICAqIHRvb2xzL2dzdC1jb21wcHJlcC4xLmluOgotCSAgKiB0b29scy9nc3QtY29tcHByZXAuYzoKLQkgIHJlbW92aW5nIC1jb21wcHJlcCBhbmQgLWNvbXBsZXRlCi0KLTIwMDUtMTEtMjkgMTc6MjM6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0ZXZlbnQuKjogZml4ICMzMjA1MjkgLSBjbGVhbiB1cCBuZXdfc2VnbWVudCBBUEkgYW5kIHN0cnVjdHVyZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnQpLAotCSAgKGdzdF9ldmVudF9wYXJzZV9uZXdfc2VnbWVudCk6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgZml4ICMzMjA1MjkgLSBjbGVhbiB1cCBuZXdfc2VnbWVudCBBUEkgYW5kIHN0cnVjdHVyZS4KLQkgIExldCdzIGhvcGUgZXZlcnlvbmUgd2FzIHVzaW5nIHRoZSBtZXRob2RzLCBhbmQgbm90IHRoZSBzdHJ1Y3R1cmUuCi0KLTIwMDUtMTEtMjkgMTc6MTM6NDQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFByb3Blcmx5IGhhbmRsZSBub24gR1NUX0ZPUk1BVF9USU1FIHNlZ21lbnQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCi0JICAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdWxsKSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIFByb3Blcmx5IGhhbmRsZSBub24gR1NUX0ZPUk1BVF9USU1FIHNlZ21lbnQKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKToKLQkgIFByb3Blcmx5IGhhbmRsZSBub24gR1NUX0ZPUk1BVF9USU1FIHNlZ21lbnQKLQkgICogZ3N0L2dzdHNlZ21lbnQuYzoKLQkgIFRoaXMgZnVuY3Rpb24gaXMgdmFsaWQgaWYgdGhlIGFjY3VtdWxhdG9yIGlzIDAgYW5kIHRoZSBmb3JtYXQKLQkgIGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZXF1ZXN0ZWQgZm9ybWF0LgotCi0yMDA1LTExLTI5IDE1OjUwOjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIGdzdF9xdWVyeV9uZXdfc2Vla2luZyBhbmQgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgdG8gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgYW5kIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIHRvIHRoZQotCSAgZG9jcy4KLQotMjAwNS0xMS0yOSAxNToxNTozOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEZpeCBjb25mbGljdCBtYXJrZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRml4IGNvbmZsaWN0IG1hcmtlcgotCi0yMDA1LTExLTI5IDE1OjEyOjIyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBUcmVhdCBhIHBhZCBhbGxvYyB3aXRoIG5ldyBjYXBzIHRoZSBzYW1lIGFzIGlmIHdlIHdlcmUgbm90IG5lZ290aWF0ZWQsIGluIG9yZGVyIHRvIGFsbG93Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICBUcmVhdCBhIHBhZCBhbGxvYyB3aXRoIG5ldyBjYXBzIHRoZSBzYW1lIGFzIGlmIHdlIHdlcmUgbm90Ci0JICBuZWdvdGlhdGVkLCBpbiBvcmRlciB0byBhbGxvdyBhIGNoYW5naW5nIHVwc3RyZWFtIG91dHB1dAotCSAgdG8gcHJvZHVjZSBhIG5ldyBmb3JtYXQgb2YgZGF0YS4KLQotMjAwNS0xMS0yOSAxNDo0NzowNyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBUaGUgZXZlbnQgdmlydHVhbCBtZXRob2QgaXMgbm93IHByb3Blcmx5IGltcGxlbWVudGVkLCB3aXRoIGEgZGVmYXVsdCBoYW5kbGVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCksIChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnRmdW5jKToKLQkgIFRoZSBldmVudCB2aXJ0dWFsIG1ldGhvZCBpcyBub3cgcHJvcGVybHkgaW1wbGVtZW50ZWQsIHdpdGggYSBkZWZhdWx0Ci0JICBoYW5kbGVyCi0JICBTdWIgY2xhc3NlcyBzaG91bGQgY2FsbCB0aGUgcGFyZW50X2NsYXNzIGV2ZW50IG1ldGhvZC4gVGhleSBzaG91bGQKLQkgIHJldHVybiBGQUxTRSBpZiB0aGV5IGhhZCBhIHByb2JsZW0gaGFuZGxpbmcgdGhlIGdpdmVuIGV2ZW50LCBvciBkb24ndAotCSAgd2FudCBHc3RCYXNlVHJhbnNmb3JtIHRvIHNlbmQgdGhhdCBldmVuIGRvd25zdHJlYW0KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2lkZW50aXR5X2luaXQpLCAoZ3N0X2lkZW50aXR5X2V2ZW50KSwKLQkgIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtX2lwKSwgKGdzdF9pZGVudGl0eV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9pZGVudGl0eV9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKLQkgIEFkZGVkIHRoZSBzaW5nbGUtc2VnbWVudCBib29sZWFuIHByb3BlcnR5LgotCSAgSWYgc2V0IHRvIFRSVUUsIGl0IHdpbGwgb3V0cHV0IGEgc2luZ2xlIHNlZ21lbnQgb2YgZGF0YSwgc3RhcnRpbmcgZnJvbQotCSAgMCwgd2lsbCBlYXQgdXAgYWxsIGluY29taW5nIG5ld3NlZ21lbnQsIGFuZCBtb2RpZnkgdGhlIHRpbWVzdGFtcCBvZiB0aGUKLQkgIGJ1ZmZlcnMgYWNjb3JkaW5nbHkKLQotMjAwNS0xMS0yOSAxNDo0Mzo1MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcmFuZG9tL3Rob21hc3ZzLzAuMTA6Ci0JICBmdXJ0aGVyIHJldmlldwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmdXJ0aGVyIHJldmlldwotCi0yMDA1LTExLTI5IDEzOjEwOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0Z2hvc3RwYWQuYzogRG9uJ3QgcmVmIE5VTEwgdGFyZ2V0IHBhZCAoIzMyMjc1MSkuIEltcHJvdmUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZ2V0X3RhcmdldCk6Ci0JICBEb24ndCByZWYgTlVMTCB0YXJnZXQgcGFkICgjMzIyNzUxKS4gSW1wcm92ZSBkb2NzLgotCi0yMDA1LTExLTI5IDExOjA3OjU0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBEb24ndCBjcmFzaCBpZiB3ZSBmYWlsZWQgdG8gbG9hZCBhIGZlYXR1cmUgZnJvbSBhIHBsdWdpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGxvYWRfcGx1Z2luKToKLQkgIERvbid0IGNyYXNoIGlmIHdlIGZhaWxlZCB0byBsb2FkIGEgZmVhdHVyZSBmcm9tIGEgcGx1Z2luLgotCi0yMDA1LTExLTI5IDAwOjUxOjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9yYW5kb20vdGhvbWFzdnMvMC4xMDoKLQkgIGFkZCBteSB0b2RvcyBmb3IgMC4xMAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbXkgdG9kb3MgZm9yIDAuMTAKLQotMjAwNS0xMS0yOCAyMTo1MTozNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6IHVzZSBtb3JlIGNoZWNrIEFQSSBhbmQgbGVzcyBHTGliIEFQSQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6IChzZXR1cF9waXBlbGluZSksCi0JICAoR1NUX1NUQVJUX1RFU1QpOgotCSAgdXNlIG1vcmUgY2hlY2sgQVBJIGFuZCBsZXNzIEdMaWIgQVBJCi0KLTIwMDUtMTEtMjggMjE6NDg6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkgIGNvc21ldGljIGNoYW5nZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgY29zbWV0aWMgY2hhbmdlcwotCi0yMDA1LTExLTI4IDE5OjU4OjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgTWFrZWZpbGUuYW06IGRvbid0IHJ1biBjaGVja3MgaWYgd2UgZG9uJ3QgaGF2ZSBjaGVjawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIE1ha2VmaWxlLmFtOgotCSAgZG9uJ3QgcnVuIGNoZWNrcyBpZiB3ZSBkb24ndCBoYXZlIGNoZWNrCi0JICAqIGNvbW1vbi9jaGVjay5tYWs6Ci0JICByZW1vdmUgdGhlIHJlZ2lzdHJ5IHdoZW4gcnVubmluZyBtYWtlIHRvcnR1cmUKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIHJlbW92ZSBzZWNvbmQgbXVsdGlwbHkKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbG9vcCk6Ci0JICBmaXggYSBjb21waWxlIHdhcm5pbmcgd2hlbiBkaXNhYmxpbmcgZGVidWcKLQotMjAwNS0xMS0yOCAxOTo0MzoyNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RpbmZvLmg6IEhleSEgTGV0J3MgcHJpbnQgdGhlIHBhZCBuYW1lIGlmIHRoZSBwb2ludGVyICE9IE5VTEwgaW5zdGVhZCBvZiB3aGVuIGl0ID09IE5VTEwgOi0pCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZm8uaDoKLQkgIEhleSEgTGV0J3MgcHJpbnQgdGhlIHBhZCBuYW1lIGlmIHRoZSBwb2ludGVyICE9IE5VTEwgaW5zdGVhZAotCSAgb2Ygd2hlbiBpdCA9PSBOVUxMIDotKQotCi0yMDA1LTExLTI4IDE4OjQ0OjExICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0dXRpbHMuYzogVXBkYXRlZCBjaGVjaywgYWRkIHNvbWUgc2NhbGluZyBhY2N1cmFjeSBjaGVja2luZyBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVXBkYXRlZCBjaGVjaywgYWRkIHNvbWUgc2NhbGluZyBhY2N1cmFjeSBjaGVja2luZyBjb2RlLgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX2RpdjEyOF82NCksCi0JICAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludDY0KSwgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSksCi0JICAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCk6Ci0JICBGaXggNiB0aW1lcyBmYXN0ZXIgZGl2aXNpb24gY29kZS4gT3B0aW1pemUgZm9yIGNvbW1vbgotCSAgMS8xIGFuZCBsZXNzIGNvbW1vbiBYLzEgY2FzZXMuCi0KLTIwMDUtMTEtMjggMTc6NTk6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0Y2xvY2suYzoKLQkgIGRvYyB1cGRhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvYyB1cGRhdGVzCi0KLTIwMDUtMTEtMjggMTY6MDU6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3R1dGlscy5jOiBNb3JlIGNoZWNrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0dXRpbHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF91dGlsc19zdWl0ZSk6Ci0JICBNb3JlIGNoZWNrcy4KLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfZmluYWxpemUpLCAoZ3N0X2Nsb2NrX3NldF9tYXN0ZXIpLAotCSAgKGRvX2xpbmVhcl9yZWdyZXNzaW9uKSwgKGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24pOgotCSAgQ2xlYW51cHMuCi0JICBSZWxlYXNlIGxvY2sgd2hlbiB0aGUgY2xvY2sgY2Fubm90IGJlIHNsYXZlZC4KLQkgIENhdGNoIHRoZSBjYXNlIHdoZXJlIHRoZSByZWdyZXNzaW9uIHJldHVybmVkIGFuIGludmFsaWQgZGVub21pbmF0b3IuCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfZGl2MTI4XzY0X2l0ZXJhdGUpLAotCSAgKGdzdF91dGlsX2RpdjEyOF82NCksIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50NjQpLAotCSAgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSksIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KToKLQkgIEFkZCBwcm90ZW50aWFsbHkgbW9yZSBwZXJmb3JtYW50IG5vbi1pdGVyYXRpdmUgMTI4LzY0IGRpdmlkZSBmdW5jdGlvbgotCSAgdGhhdCB1bmZvcnR1bmF0bHkgZG9lcyBub3Qgd29yayB5ZXQuCi0JICBTaG9ydGN1dCB0aGUgdHJpdmlhbCAwL1ggPSAwIGNhc2UuCi0JICBSZW1vdmUgdGhlIHdhcm5pbmdzIG9uIG92ZXJmbG93LgotCi0yMDA1LTExLTI4IDE0OjE4OjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdHBsdWdpbi5jOiBldmVyeXRoaW5nIGNhdXNpbmcgYSBwbHVnaW4gbm90IHRvIGxvYWQgc2hvdWxkIGJlIGF0IGxlYXN0IGEgV0FSTklORwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYyk6Ci0JICBldmVyeXRoaW5nIGNhdXNpbmcgYSBwbHVnaW4gbm90IHRvIGxvYWQgc2hvdWxkIGJlIGF0IGxlYXN0IGEgV0FSTklORwotCi0yMDA1LTExLTI4IDE0OjAyOjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSAgbG9nIGNhcHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbG9nIGNhcHMKLQotMjAwNS0xMS0yOCAxNDowMTo1MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBmaXggZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggZG9jcwotCi0yMDA1LTExLTI4IDEzOjI1OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHBhcmFtcy50eHQ6IHNvbWUgVE9ET3MgZm9yIHRoZSBuZXh0IGRldiBjeWNsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvZHBhcmFtcy50eHQ6Ci0JICBzb21lIFRPRE9zIGZvciB0aGUgbmV4dCBkZXYgY3ljbGUKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfc2V0X2ludGVycG9sYXRpb25fbW9kZSksCi0JICAoZ3N0X2NvbnRyb2xsZWRfcHJvcGVydHlfbmV3KToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6Ci0JICB1c2UgYmFzZSB0eXBlIHRvIGFzc2lnbiBhY2NjZXNzb3IgZnVuY3Rpb25zCi0KLTIwMDUtMTEtMjggMTE6MzE6MzEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjaGVjay9NYWtlZmlsZS5hbTogT29wcywgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHRvcF9zcmNkaXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIE9vcHMsIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiB0b3Bfc3JjZGlyCi0KLTIwMDUtMTEtMjggMTA6Mjk6MzcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIGRpc2FibGUgcGlwZWxpbmUgdGVzdCB1bnRpbCBzb21lb25lIGZpeGVzIHRoZSB1bnJlbGlhYmxlIGVycm9ycwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkaXNhYmxlIHBpcGVsaW5lIHRlc3QgdW50aWwgc29tZW9uZSBmaXhlcyB0aGUgdW5yZWxpYWJsZSBlcnJvcnMKLQotMjAwNS0xMS0yOCAxMDowNzozOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNoZWNrLzogVXNlIGEgY21kbGluZSBkZWZpbmUgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgYSBmaWxlIHRvIHVzZSBmb3IgdGVzdGluZywgdG8gYXZvaWQgYnJlYWtpbmcgZGlzdGNoZWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgKiBjaGVjay9lbGVtZW50cy9mZHNyYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVXNlIGEgY21kbGluZSBkZWZpbmUgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgYSBmaWxlIHRvIHVzZSBmb3IKLQkgIHRlc3RpbmcsIHRvIGF2b2lkIGJyZWFraW5nIGRpc3RjaGVjay4KLQotMjAwNS0xMS0yOCAxMDowNDo0NSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0cGFkLmMgKGZpeGF0ZV92YWx1ZSk6IFVzZSBhcnJheSBmdW5jdGlvbnMgZm9yIGFycmF5cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0yOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHBhZC5jIChmaXhhdGVfdmFsdWUpOiBVc2UgYXJyYXkgZnVuY3Rpb25zIGZvciBhcnJheXMuCi0KLTIwMDUtMTEtMjggMDk6NTU6MTkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guYzogQ2xhcmlmeSB0aGUgb3V0cHV0IHN0cmluZ3MsIG1ha2VzIGl0IGVhc2llciB0byB0cmFuc2xhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6Ci0JICBDbGFyaWZ5IHRoZSBvdXRwdXQgc3RyaW5ncywgbWFrZXMgaXQgZWFzaWVyIHRvIHRyYW5zbGF0ZS4KLQkgIEZpeGVzICMzMjI2MjYKLQotMjAwNS0xMS0yOCAwODoyMDo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9NYWtlZmlsZS5hbTogZG9uJ3QgdHJ5IGFuZCBidWlsZCBuZXQgaWYgd2UgZG9uJ3QgZXZlbiBoYXZlIDxzeXMvc29ja2V0Lmg+Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgZG9uJ3QgdHJ5IGFuZCBidWlsZCBuZXQgaWYgd2UgZG9uJ3QgZXZlbiBoYXZlIDxzeXMvc29ja2V0Lmg+Ci0KLTIwMDUtMTEtMjcgMjI6NTA6MDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjaGVjay86IEFkZCB0ZXN0cyBmb3IgZmRzcmMgc2Vla2FiaWxpdHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogY2hlY2svZWxlbWVudHMvZmRzcmMuYzogKGV2ZW50X2Z1bmMpLCAoc2V0dXBfZmRzcmMpLAotCSAgKGNsZWFudXBfZmRzcmMpLCAoR1NUX1NUQVJUX1RFU1QpLCAoZmRzcmNfc3VpdGUpLCAobWFpbik6Ci0JICBBZGQgdGVzdHMgZm9yIGZkc3JjIHNlZWthYmlsaXR5Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2Zkc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mZHNyY19pbml0KSwgKGdzdF9mZHNyY191cGRhdGVfZmQpLCAoZ3N0X2Zkc3JjX3N0YXJ0KSwKLQkgIChnc3RfZmRzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9mZHNyY19pc19zZWVrYWJsZSksCi0JICAoZ3N0X2Zkc3JjX2dldF9zaXplKSwgKGdzdF9mZHNyY191cmlfc2V0X3VyaSk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oOgotCSAgZmRzcmMgc2hvdWxkIG5vdCBiZSBhICdsaXZlJyBzb3VyY2UuCi0JICBJbXBsZW1lbnQgc2Vla2luZyBvbiBzZWVrYWJsZSBmZCdzLgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfc2Vla2luZyksCi0JICAoZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcpOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIEltcGxlbWVudCBTRUVLSU5HIHF1ZXJ5IGZ1bmN0aW9uczoKLQkgICpfbmV3X3NlZWtpbmcgYW5kICpfcGFyc2Vfc2Vla2luZwotCi0yMDA1LTExLTI3IDIyOjQzOjA4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IGRvbid0IGxvb3AgZm9yZXZlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9kaXNwb3NlKToKLQkgIGRvbid0IGxvb3AgZm9yZXZlcgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgZG9jIGZpeGVzCi0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3NldF9pbnRlcnBvbGF0aW9uX21vZGUpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICAoaW50ZXJwb2xhdGVfbm9uZV9nZXRfZW51bV92YWx1ZV9hcnJheSk6Ci0JICBzdXBwb3J0IGNvbnRyb2xsaW5nIGVudW1zCi0KLTIwMDUtMTEtMjcgMTk6NTI6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jOiBJbXByb3ZlIGRvY3VtZW50YXRpb24gZm9yIGdzdF92YWx1ZV91bmlvbigpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOgotCSAgSW1wcm92ZSBkb2N1bWVudGF0aW9uIGZvciBnc3RfdmFsdWVfdW5pb24oKS4KLQkgICogZ3N0L2dzdHZhbHVlLmg6Ci0JICBDaGFuZ2UgcmV0dXJuIHZhbHVlIGZvciB1bmlvbiwgaW50ZXJzZWN0IGFuZCBzdWJ0cmFjdCBmdW5jdGlvbnMKLQkgIGZyb20gZ2ludCB0byBnYm9vbGVhbi4KLQotMjAwNS0xMS0yNyAxODoxMTowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHZhbHVlLio6IFVzZSBnaW50LCBnZG91YmxlIGFuZCBnY2hhciBpbiBvdXIgQVBJIGluc3RlYWQgb2YgaW50LCBkb3VibGUgYW5kIGNoYXIgKGFuZCBtYWtlIHVzYWdlIGluIGdzdHZhbHVlLmMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfc2VyaWFsaXplX2FueV9saXN0KSwKLQkgIChnc3RfdmFsdWVfdHJhbnNmb3JtX2FueV9saXN0X3N0cmluZyksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2xpc3QpLCAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2FycmF5KSwKLQkgIChnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfaW50X3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZG91YmxlX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwpLAotCSAgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9mcmFjdGlvbl9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2NhcHMpLCAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2J1ZmZlciksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2Jvb2xlYW4pLAotCSAgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfaGVscGVyKSwgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9kb3VibGUpLAotCSAgKGdzdF92YWx1ZV9zZXJpYWxpemVfZmxvYXQpLCAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2Zsb2F0KSwKLQkgIChnc3Rfc3RyaW5nX3dyYXApLCAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX3N0cmluZyksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2VudW0pLCAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZsYWdzKSwKLQkgIChnc3RfdmFsdWVfdW5pb25faW50X3JhbmdlX2ludF9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnRfcmFuZ2VfaW50X3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfaW50ZXJzZWN0X2RvdWJsZV9yYW5nZV9kb3VibGVfcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9jcmVhdGVfbmV3X3JhbmdlKSwgKGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnRfcmFuZ2VfaW50KSwKLQkgIChnc3RfdmFsdWVfc3VidHJhY3RfaW50X3JhbmdlX2ludF9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2RvdWJsZV9kb3VibGVfcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGVfcmFuZ2VfZG91YmxlX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZnJhY3Rpb24pOgotCSAgKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIFVzZSBnaW50LCBnZG91YmxlIGFuZCBnY2hhciBpbiBvdXIgQVBJIGluc3RlYWQgb2YgaW50LCBkb3VibGUgYW5kCi0JICBjaGFyIChhbmQgbWFrZSB1c2FnZSBpbiBnc3R2YWx1ZS5jIG1vcmUgY29uc2lzdGVudCkuCi0KLTIwMDUtMTEtMjcgMTc6MDU6MzggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBhZGQgdW5kZWZpbmVkIGZvciBjb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCB1bmRlZmluZWQgZm9yIGNvcmUKLQotMjAwNS0xMS0yNyAxNjo0Njo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgZml4IHVwIE1ha2VmaWxlLmFtIGFuZCByZW1vdmUgR1NUX0VOQUJMRV9ORVcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHVwIE1ha2VmaWxlLmFtIGFuZCByZW1vdmUgR1NUX0VOQUJMRV9ORVcKLQotMjAwNS0xMS0yNyAxNToxNTozNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHVwZGF0ZSBMREZMQUdTIHVzZSBzb21lIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbmV0L01ha2VmaWxlLmFtOgotCSAgdXBkYXRlIExERkxBR1MgdXNlIHNvbWUgbW9yZQotCi0yMDA1LTExLTI3IDE0OjE5OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29tbW9uOgotCSAgRml4ZXMgIzMxMjU4OQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXhlcyAjMzEyNTg5Ci0KLTIwMDUtMTEtMjcgMTQ6MDM6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwaXBlbGluZS5jOgotCSAgYWRkIHNvbWUgYWRkaXRpb25hbCBmYWlsX2lmJ3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHNvbWUgYWRkaXRpb25hbCBmYWlsX2lmJ3MKLQotMjAwNS0xMS0yNiAxMToyODozMiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogVGhpcyBzaG91bGRuJ3QgaXNzdWUgYSBnX3dhcm5pbmcgc2luY2UgaXQgcmV0dXJucyBOVUxMIGlmIGl0IGNvdWxkbid0IGZpbmQgdGhlIHBsdWdpbiwgYW5kIGFsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogKGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkKToKLQkgIFRoaXMgc2hvdWxkbid0IGlzc3VlIGEgZ193YXJuaW5nIHNpbmNlIGl0IHJldHVybnMgTlVMTCBpZiBpdAotCSAgY291bGRuJ3QgZmluZCB0aGUgcGx1Z2luLCBhbmQgYWxsIGZ1bmN0aW9ucyB1c2luZyB0aGlzIGJlaGF2ZQotCSAgcHJvcGVybHkgb24gYSBOVUxMIHJldHVybi4gU3dpdGNoaW5nIHRvIGEgR1NUX1dBUk5JTkcuCi0KLTIwMDUtMTEtMjUgMTc6MDY6MzYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IERvbid0IGxlYWsgY2xvY2sgbWVzc2FnZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKLQkgIERvbid0IGxlYWsgY2xvY2sgbWVzc2FnZXMuCi0KLTIwMDUtMTEtMjUgMTE6Mzg6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBPcHRpbWlzYXRpb25zLCByZW1vdmUgdW5uZWVkZWQgdmFycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQ2NCksCi0JICAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCk6Ci0JICBPcHRpbWlzYXRpb25zLCByZW1vdmUgdW5uZWVkZWQgdmFycy4KLQotMjAwNS0xMS0yNSAwMDowMjowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdHV0aWxzLmM6IEFkZGVkIG1vcmUgY2hlY2tzIGZvciB0aGUgaGlnaCBwcmVjaXNpb24gdWludDY0IGNhc2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3R1dGlscy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3V0aWxzX3N1aXRlKToKLQkgIEFkZGVkIG1vcmUgY2hlY2tzIGZvciB0aGUgaGlnaCBwcmVjaXNpb24gdWludDY0IGNhc2VzLgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQ2NCksCi0JICAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKSwgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQpOgotCSAgSW1wbGVtZW50IGhpZ2ggcHJlY2lzc2lvbiAoZ3VpbnQ2NCAqIGd1aW50NjQpIC8gZ3VpbnQ2NC4KLQotMjAwNS0xMS0yNCAxOTowNjo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBGaXggd3JvbmcgcGVyY2VudGFnZSBxdWVyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcXVlcnkpOgotCSAgRml4IHdyb25nIHBlcmNlbnRhZ2UgcXVlcnkuCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKSwKLQkgIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KToKLQkgIEFkZCBzb21lIG1vcmUgY29tbW9uIGNhc2VzIHRoYXQgY2FuIGJlIGhhbmRsZWQKLQkgIGVmZmljaWVudGx5IHRvIF9zY2FsZS4KLQotMjAwNS0xMS0yNCAxODo0NDo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgcmVtb3ZlIHdyb25nbHkgY29tbWl0ZWQgY29tbWVudHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIHdyb25nbHkgY29tbWl0ZWQgY29tbWVudHMKLQotMjAwNS0xMS0yNCAxODo0MDo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6IGRvbid0IHVzZSBjaGVjayBjYWxscyBmcm9tIHRocmVhZHM7IGNoZWNrIHByb2JhYmx5IGlzbid0IHRocmVhZHNhZmUgYW5kIHVzaW5nIGEgbG9jayB0byBtYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmM6ICh0aHJlYWRfcmVmKSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3RfbWluaV9vYmplY3Rfc3VpdGUpOgotCSAgZG9uJ3QgdXNlIGNoZWNrIGNhbGxzIGZyb20gdGhyZWFkczsgY2hlY2sgcHJvYmFibHkgaXNuJ3QKLQkgIHRocmVhZHNhZmUgYW5kIHVzaW5nIGEgbG9jayB0byBtYWtlIGl0IHRocmVhZHNhZmUgd291bGQKLQkgIGRlZmVhdCB0aGUgcHVycG9zZSBvZiB0aGlzIGNoZWNrCi0JICAqIGdzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgKiBnc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIHVzZSBHU1RfREVCVUcgc29tZSBtb3JlCi0KLTIwMDUtMTEtMjQgMTg6MDM6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBDaGFpbiB0cml2aWFsIGNhc2UgdG8gX3NjYWxlX2ludC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSksCi0JICAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCk6Ci0JICBDaGFpbiB0cml2aWFsIGNhc2UgdG8gX3NjYWxlX2ludC4KLQotMjAwNS0xMS0yNCAxNzo0NDo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdHV0aWxzLmM6IEFkZGVkIHRlc3QgZm9yIHNjYWxpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHV0aWxzLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdXRpbHNfc3VpdGUpOgotCSAgQWRkZWQgdGVzdCBmb3Igc2NhbGluZy4KLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBTbWFsbCBkb2MgZml4LgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQpOgotCSAgSW1wbGVtZW50ZWQgaGlnaCBwcmVjaXNpb24gc2NhbGluZyBjb2RlLgotCi0yMDA1LTExLTI0IDE2OjU2OjI4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmZvLmg6IGRvIG5vdCBjcmFzaCBvbiBwYWQ9PU5VTEwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgZG8gbm90IGNyYXNoIG9uIHBhZD09TlVMTAotCi0yMDA1LTExLTI0IDE2OjMyOjI2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkgIEZpeCBkaXN0Y2hlY2sgaXNzdWVzIGZvciB0aGUgbGlicmFyaWVzIGRvY3MgYnVpbGQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFN0ZWZhbiBLb3N0Ci0JICAqIGNvbW1vbi9ndGstZG9jLm1hazoKLQkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgIEZpeCBkaXN0Y2hlY2sgaXNzdWVzIGZvciB0aGUgbGlicmFyaWVzIGRvY3MgYnVpbGQKLQkgIENsb3NlcyAjMzE5NTk5Ci0KLTIwMDUtMTEtMjQgMTQ6Mzk6NTkgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOiBGaXggYnVnICMzMTUwMjc6IG1lbW9yeSBsZWFrIGluIGV4YW1wbGUgY29kZSBpbiBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDoKLQkgIEZpeCBidWcgIzMxNTAyNzogbWVtb3J5IGxlYWsgaW4gZXhhbXBsZSBjb2RlIGluIGRvY3MuCi0KLTIwMDUtMTEtMjQgMTI6NDQ6MjUgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogVW5sb2NrIHRoZSBQUkVST0xMX0xPQ0sgaW4gYSBmYWlsdXJlIGNhc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjQgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBmbHVlbmRvLmNvbT4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCk6Ci0JICBVbmxvY2sgdGhlIFBSRVJPTExfTE9DSyBpbiBhIGZhaWx1cmUgY2FzZS4KLQotMjAwNS0xMS0yNCAxMToxNjozMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogY2hlY2svbmV0Ly5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkgIGlnbm9yZSBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGlnbm9yZSBtb3JlCi0KLTIwMDUtMTEtMjQgMDk6NDQ6MDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidXMuaDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JKiBnc3QvZ3N0aW5kZXguaDoKLQkqIGdzdC9nc3RpbnRlcmZhY2UuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3RxdWV1ZS5oOgotCSogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmg6Ci0JKiBnc3QvZ3N0dHJhY2UuYzoKLQkqIGdzdC9nc3R0cmFjZS5oOgotCSogZ3N0L2dzdHR5cGVmaW5kLmg6Ci0JKiBnc3QvZ3N0dXJpLmg6Ci0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzoKLQkqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKLQkqIGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgotCSogZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkqIGdzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkqIGxpYnMvZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6Ci0JKiBsaWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSogbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSAgRG9jIGZpeGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBEb2MgZml4ZXMuCi0KLTIwMDUtMTEtMjMgMjI6NTQ6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICByZW1vdmVkIGRpcmVjdG9yaWVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZWQgZGlyZWN0b3JpZXMKLQotMjAwNS0xMS0yMyAyMjoyMToyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2luc3RhbnRpYXRlL01ha2VmaWxlLmFtOgotCSAgZml4IGRpc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGRpc3QKLQotMjAwNS0xMS0yMyAyMToyNDo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgYWRkIGEgdG9ydHVyZSB0YXJnZXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGEgdG9ydHVyZSB0YXJnZXQKLQotMjAwNS0xMS0yMyAyMToxODo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2luc3RhbnRpYXRlL2NyZWF0ZS5jOgotCSogdGVzdHMvbmVnb3RpYXRpb24vLmdpdGlnbm9yZToKLQkqIHRlc3RzL25lZ290aWF0aW9uL01ha2VmaWxlLmFtOgotCSogdGVzdHMvbmVnb3RpYXRpb24vY2Fwc25lZ28xLmM6Ci0JICByZW1vdmUgb2Jzb2xldGUgdGVzdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIG9ic29sZXRlIHRlc3RzCi0KLTIwMDUtMTEtMjMgMjE6MTY6NTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2xhdC5jOgotCSogdGVzdHMvbXV4aW5nLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9tdXhpbmcvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9tdXhpbmcvY2FzZTEuYzoKLQkqIHRlc3RzL3Byb2Jlcy8uZ2l0aWdub3JlOgotCSogdGVzdHMvcHJvYmVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvcHJvYmVzL3Byb2JldGVzdC5jOgotCSAgcmVtb3ZlIG9ic29sZXRlIHRlc3RzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBvYnNvbGV0ZSB0ZXN0cwotCi0yMDA1LTExLTIzIDIxOjEzOjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdHJpZ2dlci9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdHJpZ2dlci9SRUFETUU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3RyaWdnZXIvdHJpZ2dlci5jOgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL3RyaWdnZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvdHJpZ2dlci9SRUFETUU6Ci0JKiB0ZXN0c3VpdGUvdHJpZ2dlci90cmlnZ2VyLmM6Ci0JICByZW1vdmUgdHJpZ2dlciBzdWJkaXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIHRyaWdnZXIgc3ViZGlyCi0KLTIwMDUtMTEtMjMgMjE6MTI6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9lbGVtZW50cy9mYWtlLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzL25hbWUuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvcHJvcGVydHkuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvcHJvcGVydHkuaDoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvdGVlLmM6Ci0JKiB0ZXN0c3VpdGUvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvZWxlbWVudHMvZmFrZS5jOgotCSogdGVzdHN1aXRlL2VsZW1lbnRzL25hbWUuYzoKLQkqIHRlc3RzdWl0ZS9lbGVtZW50cy9wcm9wZXJ0eS5jOgotCSogdGVzdHN1aXRlL2VsZW1lbnRzL3Byb3BlcnR5Lmg6Ci0JKiB0ZXN0c3VpdGUvZWxlbWVudHMvdGVlLmM6Ci0JICByZW1vdmUgdGVzdHMgcmVwbGFjZWQgYnkgY2hlY2tzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSB0ZXN0cyByZXBsYWNlZCBieSBjaGVja3MKLQotMjAwNS0xMS0yMyAyMDowNDoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIEhFQUQKLQotPT09IHJlbGVhc2UgMC45LjYgPT09Ci0KLTIwMDUtMTEtMjMgMTk6NTU6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgcmVsZWFzaW5nIDAuOS42Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjkuNgotCi0yMDA1LTExLTIzIDE4OjA3OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA1LTExLTIzIDE3OjU5OjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy91cGxvYWQubWFrOgotCSAgQ2hyaXN0aWFuLCBsZWFybiB0byBjb25maWd1cmUgeW91ciAuc3NoL2NvbmZpZyBmaWxlLCBhbmQgU1RPUCBjb21taXR0aW5nIHRvIHRoaXNmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENocmlzdGlhbiwgbGVhcm4gdG8gY29uZmlndXJlIHlvdXIgLnNzaC9jb25maWcgZmlsZSwgYW5kIFNUT1AgY29tbWl0dGluZyB0byB0aGlzZmlsZQotCi0yMDA1LTExLTIzIDE2OjEwOjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBEb2MgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzoKLQkgICogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOgotCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaDoKLQkgIERvYyB1cGRhdGVzLgotCi0yMDA1LTExLTIzIDE1OjQ5OjA2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9mYXEvdXNpbmcueG1sOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0Y29udHJvbC5zZ21sOgotCSogZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWw6Ci0JKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1jaGVja2xpc3QueG1sOgotCSogZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcHdnL290aGVyLXNvdXJjZS54bWw6Ci0JKiBkb2NzL3JhbmRvbS9tb3ZpbmctcGx1Z2luczoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIHJlbW92ZSBtZW50aW9ucyBvZiBzaW5lc3JjCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBtZW50aW9ucyBvZiBzaW5lc3JjCi0KLTIwMDUtMTEtMjMgMTQ6NTI6MzEgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogVXBkYXRlIGZvciBuZXcgQVBJIGFuZCBBUEkgY2hhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgVXBkYXRlIGZvciBuZXcgQVBJIGFuZCBBUEkgY2hhbmdlcy4KLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgRG9jdW1lbnRhdGlvbiBmaXg6IEdTVF9UUllMT0NLIC0+IEdTVF9PQkpFQ1RfVFJZTE9DSwotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIERvY3VtZW50YXRpb24gdHlwbyBmaXguCi0JICAqIGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jOgotCSAgRG9jdW1lbnRhdGlvbiBmaXhlcyBmb3IgYXJndW1lbnRzLgotCi0yMDA1LTExLTIzIDEzOjIyOjIxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgQVBJIENoYW5nZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24pLAotCSAgKGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb24pOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCk6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgKiBzY3JpcHRzL3VwZGF0ZS1mdW5jbmFtZXM6Ci0JICBBUEkgQ2hhbmdlcy4KLQkgIFJlbmFtZSBnc3RfdXRpbF9jbG9ja190aW1lX3NjYWxlIHRvIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQKLQkgIE1ha2UgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiB0YWtlIGEgbnVtZXJhdG9yCi0JICBhbmQgZGVub21pbmF0b3IgYXJndW1lbnQgaW5zdGVhZCBvZiBhIEdWYWx1ZQotCSAgYWRkIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIGhlbHBlciBmdW5jdGlvbi4KLQotMjAwNS0xMS0yMyAxMzoxNDo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogVXBkYXRlIFRPRE8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgIFVwZGF0ZSBUT0RPLgotCSAgKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6IChnc3RfbmV0X2NsaWVudF9jbG9ja190aHJlYWQpOgotCSAgKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg6Ci0JICBVc2UgcGFyZW50IGZpZWxkcyBmb3IgdGltZW91dCBhbmQgd2luZG93X3NpemUuCi0KLTIwMDUtMTEtMjMgMTI6Mzk6MzYgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZG9jcy91cGxvYWQubWFrOgotCSogZ3N0L3JlZ2lzdHJpZXMvLmdpdGlnbm9yZToKLQkqIGdzdC9zY2hlZHVsZXJzLy5naXRpZ25vcmU6Ci0JKiBsaWJzL2dzdC9jb250cm9sLy5naXRpZ25vcmU6Ci0JKiBsaWJzL2dzdC9nZXRiaXRzLy5naXRpZ25vcmU6Ci0JICBhZGQgbWlzc2luZyBjdnNpZ25vcmVzIHNvIENWUyBzaHV0cyB1cAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbWlzc2luZyBjdnNpZ25vcmVzIHNvIENWUyBzaHV0cyB1cAotCi0yMDA1LTExLTIzIDEyOjM2OjAwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNoZWNrL25ldC9nc3RuZXRjbGllbnRjbG9jay5jICh0ZXN0X2Z1bmN0aW9uaW5nKTogQWRqdXN0IHRvIHJhdGVfbnVtL3JhdGVfZGVub20gY2hhbmdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAodGVzdF9mdW5jdGlvbmluZyk6IEFkanVzdCB0bwotCSAgcmF0ZV9udW0vcmF0ZV9kZW5vbSBjaGFuZ2UuCi0JICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYwotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX29ic2VydmVfdGltZXMpOiBUYWtlIHRoZSBTTEFWRV9MT0NLIG5vdCB0aGUKLQkgIE9CSkVDVF9MT0NLLiBEb24ndCBjYWxsIGFkZF9vYnNlcnZhdGlvbiB3aXRoIHRoZSBsb2NrLgotCSAgKiBnc3QvZ3N0Y2xvY2suYyAoZ3N0X2Nsb2NrX2luaXQpOiBJbml0aWFsaXplIHRoZSByYXRlIGFzIGEKLQkgIGZyYWN0aW9uLgotCSAgKGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQpOiBBZGp1c3QgdXNpbmcgdWludDY0X3NjYWxlIGFuZCB0aGUKLQkgIHJhdGUgZnJhY3Rpb24uCi0JICAoZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbiwgZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbik6IENoYW5nZSB0bwotCSAgZGVhbCB3aXRoIHJhdGUgYXMgYSBmcmFjdGlvbiB3aG9zZSBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGFyZQotCSAgR3N0Q2xvY2tUaW1lIHZhbHVlcy4KLQkgIChnc3RfY2xvY2tfc2V0X21hc3Rlcik6IE9ubHkgdXNlIHRoZSBPQkpFQ1RfTE9DSyB0byBzZXQgdGhlCi0JICBtYXN0ZXI7IHRoZSBvdGhlciBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSB0aGUgU0xBVkVfTE9DSy4KLQkgIChkb19saW5lYXJfcmVncmVzc2lvbik6IE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlCi0JICBTTEFWRV9MT0NLLgotCSAgKGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24pOiBUYWtlIHRoZSBTTEFWRV9MT0NLLCBub3QgdGhlCi0JICBPQkpFQ1RfTE9DSy4gQ2FsbCBzZXRfY2FsaWJyYXRpb24gaW5zdGVhZCBvZiB0b3VjaGluZyB0aGUKLQkgIHZhcmlhYmxlcyBkaXJlY3RseS4KLQkgIChnc3RfY2xvY2tfc2V0X3Byb3BlcnR5LCBnc3RfY2xvY2tfZ2V0X3Byb3BlcnR5KTogUHJvdGVjdAotCSAgbWFzdGVyL3NsYXZlIHBhcmFtZXRlcnMgd2l0aCB0aGUgU0xBVkVfTE9DSy4KLQkgICogZ3N0L2dzdGNsb2NrLmggKEdzdENsb2NrKTogUmVtb3ZlIHJhdGUsIGFkZCByYXRlX251bWVyYXRvciBhbmQKLQkgIHJhdGVfZGVub21pbmF0b3IuIFBSM0MxUzMuIEFkZCBhIG5ldyBsb2NrLCB0aGUgU0xBVkVfTE9DSywgYW5kCi0JICBub3RlIHRoYXQgYWxsIG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgdGhhdCBhZGRfb2JzZXJ2YXRpb24gYW5kCi0JICB0aGUgc2V0X21hc3RlciBmdW5jdGlvbnMgdXNlIGFyZSBwcm90ZWN0ZWQgYnkgdGhhdCBsb2NrIGFuZCBub3QKLQkgIHRoZSBPQkpFQ1RfTE9DSy4KLQkgIChHU1RfQ0xPQ0tfU0xBVkVfTE9DSywgR1NUX0NMT0NLX1NMQVZFX1VOTE9DSyk6IE5ldyBtYWNyb3MuCi0JICAqIGdzdC9nc3RjbG9jay5jIChnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uKTogTm8gbG9uZ2VyIHJlcXVpcmVzCi0JICB0aGUgY2FsbGVyIHRvIHRha2UgdGhlIG9iamVjdCBsb2NrLgotCi0yMDA1LTExLTIzIDExOjIyOjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZXJyb3IuKjogQWRkIGVycm9yIGZvciBjbG9jayBzdHVmZi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKF9nc3RfY29yZV9lcnJvcnNfaW5pdCk6Ci0JICAqIGdzdC9nc3RlcnJvci5oOgotCSAgQWRkIGVycm9yIGZvciBjbG9jayBzdHVmZi4KLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrKToKLQkgIFBvc3QgY2xvY2sgZXJyb3Igd2hlbiBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBhIHBpcGVsaW5lLgotCi0yMDA1LTExLTIzIDExOjA1OjM3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IG1ha2UgdHdvIHN5bWJvbHMgZnJvbSBnc3RpbmZvIHByaXZhdGUgZm9yIHRoZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIG1ha2UgdHdvIHN5bWJvbHMgZnJvbSBnc3RpbmZvIHByaXZhdGUgZm9yIHRoZSBkb2NzCi0JICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgZml4IGRvYyB0eXBvcywgdXBkYXRlIGRvY3MKLQotMjAwNS0xMS0yMiAxODoyODo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogTm8gbmVlZCB0byBzdG9yZSB0aGUgY2xvY2ssIHRoZSBwYXJlbnQgZWxlbWVudCBjbGFzcyBhbHJlYWR5IGhhcyBpdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX3dhaXQpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKLQkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9ldmVudCk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBObyBuZWVkIHRvIHN0b3JlIHRoZSBjbG9jaywgdGhlIHBhcmVudCBlbGVtZW50IGNsYXNzIGFscmVhZHkKLQkgIGhhcyBpdC4KLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9zZXRfY2xvY2tfZnVuYyksIChnc3RfYmluX2FkZF9mdW5jKToKLQkgIFVwZGF0ZXMgZm9yIGNsb2NrX3NldCByZXR1cm5pbmcgYSBnYm9vbGVhbgotCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19lbnRyeV9uZXcpLCAoZ3N0X2Nsb2NrX2lkX3dhaXQpLAotCSAgKGdzdF9jbG9ja19pZF93YWl0X2FzeW5jKSwgKGdzdF9jbG9ja19jbGFzc19pbml0KSwKLQkgIChnc3RfY2xvY2tfaW5pdCksIChnc3RfY2xvY2tfZmluYWxpemUpLAotCSAgKGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSksIChnc3RfY2xvY2tfZ2V0X3RpbWUpLAotCSAgKGdzdF9jbG9ja19zbGF2ZV9jYWxsYmFjayksIChnc3RfY2xvY2tfc2V0X21hc3RlciksCi0JICAoZ3N0X2Nsb2NrX2dldF9tYXN0ZXIpLCAoZG9fbGluZWFyX3JlZ3Jlc3Npb24pLAotCSAgKGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24pLCAoZ3N0X2Nsb2NrX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2Nsb2NrX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgSW1wbGVtZW50IG1hc3Rlci9zbGF2ZS4gV2hlbiBzZXR0aW5nIGEgY2xvY2sgYXMgYSBzbGF2ZSwgYQotCSAgcGVyaW9kaWMgdGltZW91dCBpcyBzY2hlZHVsZWQgdG8gc2FtcGxlIG1hc3RlciBhbmQgc2xhdmUgdGltZXMuCi0JICBUaGVuIHRoZSBzbGF2ZSBjbG9jayBpcyByZWNhbGlicmF0ZWQgdG8gbWF0Y2ggb2Zmc2V0IGFuZCByYXRlCi0JICBvZiB0aGUgbWFzdGVyIGNsb2NrLgotCSAgVXBkYXRlIGxvZ2dpbmcgYSBiaXQuCi0JICBBZGQgZmxhZyBzbyB0aGF0IGEgY2xvY2sgY2FuIHN0YXRlIHRoYXQgaXMgY2Fubm90IGJlIHNsYXZlZCB0bwotCSAgYW5vdGhlciBjbG9jay4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NldF9jbG9jayk6Ci0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBUaGUgc2V0X2Nsb2NrIHJldHVybnMgYSBnYm9vbGVhbiBmb3Igd2hlbiBhbiBlbGVtZW50IGNhbm5vdAotCSAgZGVhbCB3aXRoIHRoZSBzZWxlY3RlZCBjbG9jayBpbiB0aGUgcGlwZWxpbmUuCi0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3BpcGVsaW5lX3NldF9jbG9jayk6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5oOgotCSAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBzZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgc2V0IG9uCi0JICB0aGUgcGlwZWxpbmUuCi0JICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2NsYXNzX2luaXQpLAotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2luaXQpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfZmluYWxpemUpLAotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X25ldF9jbGllbnRfY2xvY2tfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19vYnNlcnZlX3RpbWVzKToKLQkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oOgotCSAgVXNlIHJlZ3Jlc3Npb24gY29kZSBpbiBHc3RDbG9jayBwYXJlbnQsIHJlbW92ZSBkdXBsaWNhdGVkCi0JICBmdW5jdGlvbmFsaXR5LgotCi0yMDA1LTExLTIyIDE2OjMxOjA4ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSAgQWRkIHVuZGVyc2NvcmVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEFkZCB1bmRlcnNjb3JlcwotCi0yMDA1LTExLTIyIDE1OjUyOjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0LzogY29ycmVjdGx5IGZpeCBHRW51bVZhbHVlcyBzbyB0aGF0IG5pY2sgaXMgdGhlIHNob3J0IGxvd2VyY2FzZSBkYXNoZWQgdGFnCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3Npbmtfc3RhdGVfZXJyb3JfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2RhdGFfZ2V0X3R5cGUpLAotCSAgKGdzdF9mYWtlX3NyY19zaXpldHlwZV9nZXRfdHlwZSksIChnc3RfZmFrZV9zcmNfZmlsbHR5cGVfZ2V0X3R5cGUpLAotCSAgKGdzdF9mYWtlX3NyY19pbml0KSwgKGdzdF9mYWtlX3NyY19wcmVwYXJlX2J1ZmZlciksCi0JICAoZ3N0X2Zha2Vfc3JjX2FsbG9jX2J1ZmZlciksIChnc3RfZmFrZV9zcmNfZ2V0X3NpemUpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKHF1ZXVlX2xlYWt5X2dldF90eXBlKToKLQkgIGNvcnJlY3RseSBmaXggR0VudW1WYWx1ZXMgc28gdGhhdCBuaWNrIGlzIHRoZSBzaG9ydCBsb3dlcmNhc2UKLQkgIGRhc2hlZCB0YWcKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKLQkgIGFsc28gc2hvdyB0aGUgbmljaywgc2luY2UgaXQncyB1c2VmdWwgdG8gdXNlIGZyb20gcGFyc2VfbGF1bmNoCi0JICBzeW50YXgKLQkgIEZpeGVzICMzMjIxMzkKLQotMjAwNS0xMS0yMiAxNToxNTo1MyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBBZGQgdXRpbCBtZXRob2QgZm9yIHNjYWxpbmcgYSBjbG9ja3RpbWUgYnkgYSBmcmFjdGlvbi4gVXNlZnVsIGltcGxlbWVudGF0aW9uIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfdXRpbF9jbG9ja3RpbWVfc2NhbGUpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCB1dGlsIG1ldGhvZCBmb3Igc2NhbGluZyBhIGNsb2NrdGltZSBieSBhIGZyYWN0aW9uLiBVc2VmdWwKLQkgIGltcGxlbWVudGF0aW9uIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuCi0KLTIwMDUtMTEtMjIgMTQ6Mjk6MTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0dmFsdWUuYzogSWYgbmVlZGVkLCBhbGxvY2F0ZSBzdG9yYWdlIGluIHRoZSBkZXN0aW5hdGlvbiB2YWx1ZSBkdXJpbmcgY29sbGVjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9jb2xsZWN0X2ZyYWN0aW9uX3JhbmdlKToKLQkgIElmIG5lZWRlZCwgYWxsb2NhdGUgc3RvcmFnZSBpbiB0aGUgZGVzdGluYXRpb24gdmFsdWUgZHVyaW5nCi0JICBjb2xsZWN0aW9uLgotCi0yMDA1LTExLTIyIDEzOjU4OjAwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBSZW1vdmVkIEdzdFVSSSAsIGNsb3NlcyBidWcgIzMyMTA2MQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdC5oOgotCSAgKiBnc3QvZ3N0dXJpdHlwZS5jOgotCSAgKiBnc3QvZ3N0dXJpdHlwZS5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3NldF9vYmplY3RfYXJnKToKLQkgICogdG9vbHMvZ3N0LWNvbXBwcmVwLmM6IChtYWluKToKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKLQkgIFJlbW92ZWQgR3N0VVJJICwgY2xvc2VzIGJ1ZyAjMzIxMDYxCi0KLTIwMDUtMTEtMjIgMTM6MTQ6NTEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBPb3BzLCBicm9rZSBhdXRvbWF0aWMgc3RyaW5nIHR5cGUgcGFyc2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUpOgotCSAgT29wcywgYnJva2UgYXV0b21hdGljIHN0cmluZyB0eXBlIHBhcnNpbmcuCi0JICBBZGQgYSB0ZXN0IHRvIGNhdGNoIGl0IGluIGZ1dHVyZS4KLQotMjAwNS0xMS0yMiAxMzowMjoxMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JICBnc3QvZ3N0dGFnc2V0dGVyLmMgKGdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZSkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0yMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHRhZ3NldHRlci5jIChnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUpCi0JICAoZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlLCBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QpOgotCSAgQWN0dWFsbHkgcmVuYW1lIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMuIEdyci4KLQotMjAwNS0xMS0yMiAxMjo1MToxOCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBzY3JpcHRzL3VwZGF0ZS1mdW5jbmFtZXM6Ci0JICBmaXggYm9ya2VkIGNvbW1pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggYm9ya2VkIGNvbW1pdAotCi0yMDA1LTExLTIyIDEyOjM1OjQyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY2hlY2svZ3N0L2NhcHNsaXN0Lmg6IENvbW1lbnQgdGVzdCBjYXNlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9jYXBzbGlzdC5oOgotCSAgQ29tbWVudCB0ZXN0IGNhc2VzCi0JICAqIGNoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3Rfc3RydWN0dXJlX3N1aXRlKToKLQkgIFRlc3QgYXV0b21hdGljIHZhbHVlIHR5cGUgZGV0ZWN0aW9uIGluIGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcuCi0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUpOgotCSAgQWRkIGZyYWN0aW9uIGFzIGEgdHlwZSB3ZSB0cnkgYW5kIGd1ZXNzIGF1dG9tYXRpY2FsbHkgaW4KLQkgIGNhcHMvc3RydWN0dXJlIHN0cmluZ3MuCi0KLTIwMDUtMTEtMjIgMTI6MzU6MzUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogc2NyaXB0cy91cGRhdGUtZnVuY25hbWVzOgotCSAgdXBkYXRlIHVwZGF0ZS1mdW5jcyBmb3IgdGFnc2V0dGVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSB1cGRhdGUtZnVuY3MgZm9yIHRhZ3NldHRlcgotCi0yMDA1LTExLTIyIDEyOjIwOjA0ICswMDAwICBUb3JzdGVuIFNjaG9lbmZlbGQgPGthZmZlZXRpc2NoQGdteC5kZT4KLQotCSAgZ3N0L2dzdHRhZ3NldHRlci4qOiAoZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncykgKGdzdF90YWdfc2V0dGVyX2FkZF90YWdzLCBnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlcykgKGdzdF90YWdfc2V0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICBwYXRjaCBieTogVG9yc3RlbiBTY2hvZW5mZWxkIDxrYWZmZWV0aXNjaCBnbXggZGU+Ci0JICAqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKLQkgICogZ3N0L2dzdHRhZ3NldHRlci5jOiAoZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncykKLQkgIChnc3RfdGFnX3NldHRlcl9hZGRfdGFncywgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXMpCi0JICAoZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3QpCi0JICAoZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzKTogUmVuYW1lZCBmcm9tIF9tZXJnZSwgX2FkZCwKLQkgIF9hZGRfdmFsdWVzLCBfYWRkX3ZhbGlzdCwgYW5kIF9hZGRfdmFsaXN0X3ZhbHVlcy4gU2luY2UgdGhpcyBpcyBhbgotCSAgaW50ZXJmYWNlIHRoZSBmdW5jdGlvbiBzdWZmaXhlcyBzaG91bGQgYmUgbW9yZSBleHBsaWNpdCBzbwotCSAgbGFuZ3VhZ2UgYmluZGluZyBkb24ndCBlbmQgdXAgd2l0aCBlbGVtZW50LmFkZF92YWxpc3QgLT4KLQkgIGdzdF90YWdfc2V0dGVyX2FkZF92YWxpc3QsIGZvciBleGFtcGxlLiBGaXhlcyAjMzIyMDY5LgotCi0yMDA1LTExLTIyIDEyOjE1OjE5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGRvbid0IHZhbGdyaW5kIHRoZSBzdHJlc3MgdGVzdCwgdGFrZXMgdG9vIGxvbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZG9uJ3QgdmFsZ3JpbmQgdGhlIHN0cmVzcyB0ZXN0LCB0YWtlcyB0b28gbG9uZwotCi0yMDA1LTExLTIyIDExOjU2OjAxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdGNhcHMuYzogRXh0ZW5kIGNhcHMgc3RyaW5nIHRlc3RzIHRvIGNoZWNrIHRoYXQgYSBjYXBzIHRvIHN0cmluZyBjb252ZXJzaW9uIGlzIHJldmVyc2libGUgYW5kIHByb2R1Y2VzIHRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGNhcHMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEV4dGVuZCBjYXBzIHN0cmluZyB0ZXN0cyB0byBjaGVjayB0aGF0IGEgY2FwcyB0byBzdHJpbmcKLQkgIGNvbnZlcnNpb24gaXMgcmV2ZXJzaWJsZSBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgY2Fwcy4KLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV92YWx1ZV9nZXRfZ2VuZXJpY190eXBlKToKLQkgIE91dHB1dCAiZnJhY3Rpb24iIGFzIHRoZSBnZW5lcmljIHR5cGUgZnJhY3Rpb24gcmFuZ2UsIHNvIGNhcHMKLQkgIHNlcmlhbGlzYXRpb24gYW5kIGRlc2VyaWFsaXNhdGlvbiB3b3Jrcy4KLQkgICogY2hlY2svZ3N0L2NhcHNsaXN0Lmg6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uKToKLQkgIFN1cHBvcnQgJ01JTicgYW5kICdNQVgnIGZvciBkZXNlcmlhbGlzaW5nIGZyYWN0aW9ucy4KLQotMjAwNS0xMS0yMiAxMTo1MDoxMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBNaW5vciBkb2MgZml4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBNaW5vciBkb2MgZml4LgotCi0yMDA1LTExLTIyIDExOjQ4OjU4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RldmVudC5oIChnc3RfZXZlbnRfbmV3X25ld19zZWdtZW50KSAoZ3N0X2V2ZW50X3BhcnNlX25ld19zZWdtZW50LCBnc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0ZXZlbnQuaCAoZ3N0X2V2ZW50X25ld19uZXdfc2VnbWVudCkKLQkgIChnc3RfZXZlbnRfcGFyc2VfbmV3X3NlZ21lbnQsIGdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemUpCi0JICAoZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplLCBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQpOgotCSAgUmVuYW1lZCBmcm9tICpfbmV3c2VnbWVudCwgKl9idWZmZXJzaXplLCAqX25vdGFyZ2V0LgotCSAgKiBzY3JpcHRzL3VwZGF0ZS1mdW5jbmFtZXM6IE5ldyBzY3JpcHQsIHBlcmZvcm1zIHRoZSBjaGFuZ2VzCi0JICBsaXN0ZWQgYWJvdmUuCi0KLTIwMDUtMTEtMjIgMTE6MjU6MDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IE1ha2Ugc3VyZSB0aGUgR3N0Rmxvd1JldHVybiBpcyByZXR1cm5lZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KToKLQkgIE1ha2Ugc3VyZSB0aGUgR3N0Rmxvd1JldHVybiBpcyByZXR1cm5lZC4KLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwpLAotCSAgKGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCk6Ci0JICAqIGdzdC9nc3RidXMuaDoKLQkgIGFkZCBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbC4KLQkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgotCSAgU21hbGwgc3R5bGUgY2xlYW51cC4KLQotMjAwNS0xMS0yMiAxMDoyNDozMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RldmVudC5jOiBCbG9jayB0aGUgZmFrZXNyYyBzcmNwYWQgd2hlbiB3ZSBzZW5kIGFuIGV2ZW50LCB0byBhdm9pZCBjb250ZW50aW9uIG9uIHRoZSBzdHJlYW1fbG9jayBjYXVzaW5nIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RldmVudC5jOiAodGVzdF9ldmVudCksIChHU1RfU1RBUlRfVEVTVCk6Ci0JICBCbG9jayB0aGUgZmFrZXNyYyBzcmNwYWQgd2hlbiB3ZSBzZW5kIGFuIGV2ZW50LCB0byBhdm9pZAotCSAgY29udGVudGlvbiBvbiB0aGUgc3RyZWFtX2xvY2sgY2F1c2luZyByYW5kb20gdGVzdCBmYWlsdXJlcy4KLQotMjAwNS0xMS0yMiAwOTo0MjoxNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIEZpeCBzdWJ0cmFjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3QpOgotCSAgRml4IHN1YnRyYWN0aW9uLgotCi0yMDA1LTExLTIyIDA5OjM1OjI1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3QuaDogaW5jbHVkZSAiZ3N0Y2hpbGRwcm94eS5oIgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuaDoKLQkgIGluY2x1ZGUgImdzdGNoaWxkcHJveHkuaCIKLQkgICogZ3N0L2dzdGNoaWxkcHJveHkuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6Ci0JICB1c2UgR19HTlVDX05VTExfVEVSTUlOQVRFRAotCi0yMDA1LTExLTIxIDIzOjU0OjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgSW1wbGVtZW50IGZyYWN0aW9uIHJhbmdlcyBhbmQgZXh0ZW5kIEdzdEZyYWN0aW9uIHRvIHN1cHBvcnQgYXJpdGhtZXRpYyBzdWJ0cmFjdGlvbiwgYXMgd2VsbCBhcyBkZXNlcmlhbGl6YXRpb24gZnJvbSBpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2NhcHNsaXN0Lmg6Ci0JICAqIGNoZWNrL2dzdC9nc3RjYXBzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9wYXJzZV9yYW5nZSksCi0JICAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbik6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfaW5pdF9mcmFjdGlvbl9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX2ZyZWVfZnJhY3Rpb25fcmFuZ2UpLCAoZ3N0X3ZhbHVlX2NvcHlfZnJhY3Rpb25fcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9jb2xsZWN0X2ZyYWN0aW9uX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfbGNvcHlfZnJhY3Rpb25fcmFuZ2UpLCAoZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsKSwKLQkgIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiksCi0JICAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXgpLAotCSAgKGdzdF92YWx1ZV9zZXJpYWxpemVfZnJhY3Rpb25fcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV90cmFuc2Zvcm1fZnJhY3Rpb25fcmFuZ2Vfc3RyaW5nKSwKLQkgIChnc3RfdmFsdWVfY29tcGFyZV9mcmFjdGlvbl9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfaW50ZXJzZWN0X2ZyYWN0aW9uX2ZyYWN0aW9uX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfaW50ZXJzZWN0X2ZyYWN0aW9uX3JhbmdlX2ZyYWN0aW9uX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fZnJhY3Rpb25fcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9yYW5nZV9mcmFjdGlvbiksCi0JICAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2ZyYWN0aW9uX3JhbmdlX2ZyYWN0aW9uX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfY29sbGVjdF9mcmFjdGlvbiksIChnc3RfdmFsdWVfZnJhY3Rpb25fbXVsdGlwbHkpLAotCSAgKGdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZnJhY3Rpb24pLAotCSAgKGdzdF92YWx1ZV90cmFuc2Zvcm1fc3RyaW5nX2ZyYWN0aW9uKSwgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3R2YWx1ZS5oOgotCSAgSW1wbGVtZW50IGZyYWN0aW9uIHJhbmdlcyBhbmQgZXh0ZW5kIEdzdEZyYWN0aW9uIHRvIHN1cHBvcnQKLQkgIGFyaXRobWV0aWMgc3VidHJhY3Rpb24sIGFzIHdlbGwgYXMgZGVzZXJpYWxpemF0aW9uIGZyb20gaW50ZWdlcgotCSAgc3RyaW5ncyBzdWNoIGFzICIxMDAiCi0JICBBZGQgYSB0ZXN0c3VpdGUgYXMgZm9yIGludCBhbmQgZG91YmxlIHJhbmdlIHNldCBvcGVyYXRpb25zCi0KLTIwMDUtMTEtMjEgMTk6NTg6MjMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0LzogQWRkIGdsaWItY29tcGF0LmguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICAqIGdzdC9nc3RjYXBzLmg6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDogQWRkIGdsaWItY29tcGF0LmguCi0KLTIwMDUtMTEtMjEgMTk6MTM6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogRml4IGZvciAjMzIxNTk1Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6Ci0JICBGaXggZm9yICMzMjE1OTUKLQotMjAwNS0xMS0yMSAxOTowMDoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuaDogQW5kIGFkZCBhIG5pY2UgZGVmaW5lIHRvby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5oOgotCSAgQW5kIGFkZCBhIG5pY2UgZGVmaW5lIHRvby4KLQotMjAwNS0xMS0yMSAxODo1MzowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHNlZ21lbnQuKjogTWFrZSBiaW5kaW5nIGZyaWVuZGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9jb3B5KSwgKGdzdF9zZWdtZW50X2dldF90eXBlKSwKLQkgIChnc3Rfc2VnbWVudF9uZXcpLCAoZ3N0X3NlZ21lbnRfZnJlZSksIChnc3Rfc2VnbWVudF9pbml0KSwKLQkgIChnc3Rfc2VnbWVudF9zZXRfZHVyYXRpb24pLCAoZ3N0X3NlZ21lbnRfc2V0X2xhc3Rfc3RvcCksCi0JICAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspLCAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQpLAotCSAgKGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lKSwgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSksCi0JICAoZ3N0X3NlZ21lbnRfY2xpcCk6Ci0JICAqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JICBNYWtlIGJpbmRpbmcgZnJpZW5kbHkuCi0KLTIwMDUtMTEtMjEgMTg6NDE6MzkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0LzogU3ByaW5rbGUgTlVMTF9URVJNSU5BVEVEIHRvIHRhc3RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmg6Ci0JICAqIGdzdC9nc3R0YWdsaXN0Lmg6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmg6IFNwcmlua2xlIE5VTExfVEVSTUlOQVRFRCB0byB0YXN0ZS4KLQotMjAwNS0xMS0yMSAxODoyNzoyNiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0ZXJyb3IuKjogTmV3IGVycm9yIGNhdGVnb3J5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0ZXJyb3IuYyAoX2dzdF9jb3JlX2Vycm9yc19pbml0KToKLQkgICogZ3N0L2dzdGVycm9yLmggKEdTVF9DT1JFX0VSUk9SX01JU1NJTkdfUExVR0lOKTogTmV3IGVycm9yCi0JICBjYXRlZ29yeS4KLQotMjAwNS0xMS0yMSAxODoxNjowMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvTWFrZWZpbGUuYW0gKGdzdF9oZWFkZXJzKTogQWRkIGdsaWItY29tcGF0LmguIG5vaW5zdCB0aGUgLXByaXZhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9NYWtlZmlsZS5hbSAoZ3N0X2hlYWRlcnMpOiBBZGQgZ2xpYi1jb21wYXQuaC4KLQkgIChub2luc3RfSEVBREVSUyk6IG5vaW5zdCB0aGUgLXByaXZhdGUuCi0KLTIwMDUtMTEtMjEgMTg6MTA6MTMgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0LzogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgZGVjbGFyYXRpb25zIGZvciB3aGljaCB3ZSBjYW4gc2VlIG5vIHNlbnNpYmxlIHVzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSAgUmVtb3ZlIHVuaW1wbGVtZW50ZWQgZGVjbGFyYXRpb25zIGZvciB3aGljaCB3ZSBjYW4gc2VlIG5vIHNlbnNpYmxlCi0JICB1c2UuCi0KLTIwMDUtMTEtMjEgMTg6MDM6MjIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdC5oOiBJbmNsdWRlIGdsaWItY29tcGF0LmguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3QuaDogSW5jbHVkZSBnbGliLWNvbXBhdC5oLgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuaDogQWRkIEdfR05VQ19OVUxMX1RFUk1JTkFURUQuCi0JICAqIGdzdC9nbGliLWNvbXBhdC5jOiBJbmNsdWRlIHRoZSBwdWJsaWMgYW5kIHRoZSBwcml2YXRlIGhlYWRlci4KLQkgICogZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaDogQ29waWVkIGhlcmUgZnJvbSBnbGliLWNvbXBhdC5oLgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgICogZ3N0L2dzdHBhZC5jOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogcy9nbGliLWNvbXBhdC9nbGliLWNvbXBhdC1wcml2YXRlLy4KLQotMjAwNS0xMS0yMSAxNzoyMToxNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBjaGVjay9nc3QvZ3N0ZXZlbnQuYyAoY3JlYXRlX2N1c3RvbV9ldmVudHMpOiBDaGVjayB0aGF0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL2dzdC9nc3RldmVudC5jIChjcmVhdGVfY3VzdG9tX2V2ZW50cyk6IENoZWNrIHRoYXQKLQkgIEZMVVNIX1NUT1AgaXMgc2VyaWFsaXplZC4KLQkgICogY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYyAoZXZlbnRfZnVuYyk6Ci0JICAqIGNoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYyAoZXZlbnRfZnVuYyk6IE5vIHN0cmVhbSBsb2NrLCB0aGUgY29yZQotCSAgdGFrZXMgaXQuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KTogTm8gbW9yZQotCSAgc3RyZWFtIGxvY2sgdGFraW5nLCB5YXkuCi0JICAqIGdzdC9nc3RldmVudC5oIChHU1RfRVZFTlRfRkxVU0hfU1RPUCk6IE1hcmtlZCBhcyBzZXJpYWxpemVkIHRvCi0JICBlbnN1cmUgdGhhdCBjb3JlIHRha2VzIHRoZSBzdHJlYW0gbG9jay4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfZG9fc2Vlayk6IFVwZGF0ZSBmb3Igc3RyZWFtCi0JICBsb2NrIG5hbWUgY2hhbmdlLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX2V2ZW50KTogTm8gbmVlZCB0byB0YWtlCi0JICB0aGUgc3RyZWFtIGxvY2sgZm9yIEVPUywgTkVXU0VHTUVOVCwgb3IgRkxVU0hfU1RPUCwgdGhlIGNvcmUgZG9lcwotCSAgaXQgYWxyZWFkeS4gRm9yIHRoZSBmbHVzaCBzdGFydCB3ZSBkbyB0YWtlIGl0IHRob3VnaCBzbyB3ZSBnZXQgdGhlCi0JICByaWdodCBwcmVyb2xsIHN0YXRlIGNoYW5nZSBtZXNzYWdlcy4KLQkgICogZ3N0L2dzdHF1ZXVlLmMgKGdzdF9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpOiBObyBuZWVkIHRvIHRha2UKLQkgIHRoZSBzdHJlYW0gbG9jayBoZXJlLCB0aGUgY29yZSBkb2VzIGl0IGZvciB1cy4KLQkgICogZ3N0L2dzdHBhZC5oIChHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyk6IFJlbmFtZWQgZnJvbQotCSAgR1NUX1NUUkVBTV9HRVRfTE9DSy4KLQkgIChHU1RfUEFEX1NUUkVBTV9MT0NLLCBHU1RfUEFEX1NUUkVBTV9UUllMT0NLKQotCSAgKEdTVF9QQURfU1RSRUFNX1VOTE9DSywgR1NUX1BBRF9TVFJFQU1fVU5MT0NLX0ZVTEwpCi0JICAoR1NUX1BBRF9TVFJFQU1fTE9DS19GVUxMKTogUmVuYW1lZCBmcm9tIEdTVF9TVFJFQU1fKi4KLQkgIChHU1RfUEFEX0dFVF9QUkVST0xMX0xPQ0spOiBSZW5hbWVkIGZyb20gR1NUX1BSRVJPTExfR0VUX0xPQ0suCi0JICAoR1NUX1BBRF9QUkVST0xMX0xPQ0ssIEdTVF9QQURfUFJFUk9MTF9UUllMT0NLKQotCSAgKEdTVF9QQURfUFJFUk9MTF9VTkxPQ0spOiBSZW5hbWVkIGZyb20gR1NUX1BSRVJPTExfKi4KLQkgICogZ3N0L2dzdHBhZC5jOiBVcGRhdGUgZm9yIHN0cmVhbSBsb2NrIG5hbWUgY2hhbmdlLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBVcGRhdGUgZm9yIHByZXJvbGwgbG9jayBuYW1lIGNoYW5nZS4KLQotMjAwNS0xMS0yMSAxNzoxMjo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogQ29udmVydCBDbG9jayBmbGFncyB0byBvYmplY3QgZmxhZ3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfaW5pdCksIChnc3RfY2xvY2tfc2V0X21hc3RlciksCi0JICAoZ3N0X2Nsb2NrX2dldF9tYXN0ZXIpOgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2luaXQpOgotCSAgQ29udmVydCBDbG9jayBmbGFncyB0byBvYmplY3QgZmxhZ3MuCi0JICBBZGRlZCBtZXRob2RzIHRvIG1hbmFnZSBtYXN0ZXIvc2xhdmUgY2xvY2tzLgotCi0yMDA1LTExLTIxIDE3OjA5OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBNb3JlIHNlZ21lbnQgdXBkYXRlcywgcmVwbGFjZSBjb2RlIGluIHBsdWdpbnMgd2l0aCBzZWdtZW50IGhlbHBlciBmdW5jdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHNlZ21lbnQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19ldmVudCksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVsbCksIChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbiksCi0JICAoZ3N0X2Jhc2Vfc2lua19xdWVyeSksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19pbml0KSwgKGdzdF9iYXNlX3NyY19xdWVyeSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmV3c2VnbWVudCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2NvbmZpZ3VyZV9zZWdtZW50KSwgKGdzdF9iYXNlX3NyY19kb19zZWVrKSwKLQkgIChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKSwgKGdzdF9iYXNlX3NyY19sb29wKSwKLQkgIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZiksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpOgotCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2luaXQpLAotCSAgKGdzdF9mYWtlX3NyY19jcmVhdGUpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV90cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jOiAoZ3N0X3NlZ21lbnRfaW5pdCksIChnc3Rfc2VnbWVudF9zZXRfZHVyYXRpb24pLAotCSAgKGdzdF9zZWdtZW50X3NldF9sYXN0X3N0b3ApLCAoZ3N0X3NlZ21lbnRfc2V0X3NlZWspLAotCSAgKGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50KSwgKGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lKSwKLQkgIChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUpLCAoZ3N0X3NlZ21lbnRfY2xpcCk6Ci0JICAqIGdzdC9nc3RzZWdtZW50Lmg6Ci0JICBNb3JlIHNlZ21lbnQgdXBkYXRlcywgcmVwbGFjZSBjb2RlIGluIHBsdWdpbnMgd2l0aCBzZWdtZW50Ci0JICBoZWxwZXIgZnVuY3Rpb25zLgotCi0yMDA1LTExLTIxIDE2OjQ2OjA3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLmM6IERvbid0IGlnbm9yZSBzc2NhbmYgcmVzdWx0cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOiAoZ3N0X2Zkc3JjX3VyaV9zZXRfdXJpKToKLQkgIERvbid0IGlnbm9yZSBzc2NhbmYgcmVzdWx0cwotCi0yMDA1LTExLTIxIDE2OjQxOjE2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuaCAoR1NUX0lTX1BBRF9GQVNUKTogUmVtb3ZlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHBhZC5oIChHU1RfSVNfUEFEX0ZBU1QpOiBSZW1vdmVkLgotCi0yMDA1LTExLTIxIDE2OjM0OjI2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgICouKjogUmFuIHNjcmlwdHMvdXBkYXRlLW1hY3Jvcy4gT2ggeWVzLiBnc3QvZ3N0b2JqZWN0LmggKEdTVF9PQkpFQ1RfR0VUX0xPQ0ssIEdTVF9PQkpFQ1RfTE9DSykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogKi5oOgotCSAgKiAqLmM6IFJhbiBzY3JpcHRzL3VwZGF0ZS1tYWNyb3MuIE9oIHllcy4KLQkgICogZ3N0L2dzdG9iamVjdC5oIChHU1RfT0JKRUNUX0dFVF9MT0NLLCBHU1RfT0JKRUNUX0xPQ0spCi0JICAoR1NUX09CSkVDVF9UUllMT0NLLCBHU1RfT0JKRUNUX1VOTE9DSyk6IFJlbmFtZWQgZnJvbQotCSAgR1NUX0dFVF9MT0NLLCBldGMuCi0JICAqIHNjcmlwdHMvdXBkYXRlLW1hY3JvczogTmV3IHNjcmlwdC4gUnVuIGl0IG9uIHlvdXIgZmlsZXMgdG8KLQkgIGNoYW5nZSBHU1RfTE9DSyB0byBHU1RfT0JKRUNUX0xPQ0ssIGFuZCB0aGUgc2FtZSBmb3IgVU5MT0NLIGFzCi0JICB3ZWxsLgotCi0yMDA1LTExLTIxIDE1OjQ3OjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIG1vcmUgZG9jcyBmaXhlcywgYWRkIG5ldyBhcGkgdG8gdGhlIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgbW9yZSBkb2NzIGZpeGVzLCBhZGQgbmV3IGFwaSB0byB0aGUgZG9jcwotCi0yMDA1LTExLTIxIDE1OjAxOjQ4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyk6IFdpbSBjbGFpbXMgSSBjYW4gcmVtb3ZlIHRoaXMgc3RhdGVfYnJvYWRjYXN0IGNhbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyk6IFdpbSBjbGFpbXMgSSBjYW4gcmVtb3ZlIHRoaXMKLQkgIHN0YXRlX2Jyb2FkY2FzdCBjYWxsLgotCi0yMDA1LTExLTIxIDE0OjUzOjM0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RzZWdtZW50LmMgKGdzdF9zZWdtZW50X2luaXQpOiBJbml0aWFsaXplIGFic19yYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0c2VnbWVudC5jIChnc3Rfc2VnbWVudF9pbml0KTogSW5pdGlhbGl6ZSBhYnNfcmF0ZS4KLQotMjAwNS0xMS0yMSAxNDo1Mjo1NiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jOiBGaXggd3JvbmcgZnVuY3Rpb24gY2FsbHMgZm9yIGFycmF5cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0yMSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9pbnRlcnNlY3RfYXJyYXkpOiBGaXggd3JvbmcKLQkgIGZ1bmN0aW9uIGNhbGxzIGZvciBhcnJheXMuCi0KLTIwMDUtMTEtMjEgMTQ6NTA6MjIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9yYW5kb20vZW5zb25pYy9tZWRpYS1kZXZpY2UtZGFlbW9uLnR4dDogd2lsZCBpZGVhLCBjYW4gdGhpcyBiZSBkb25lPwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL2Vuc29uaWMvbWVkaWEtZGV2aWNlLWRhZW1vbi50eHQ6Ci0JICB3aWxkIGlkZWEsIGNhbiB0aGlzIGJlIGRvbmU/Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RlcnJvci5oOgotCSAgKiBnc3QvZ3N0ZmlsdGVyLmM6Ci0JICAqIGdzdC9nc3RmaWx0ZXIuaDoKLQkgICogZ3N0L2dzdHBsdWdpbi5oOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgKiBnc3QvZ3N0dHJhY2UuYzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5oOgotCSAgZG9jIGZpeGVzIGFuZCBhZGRpdGlvbnMKLQotMjAwNS0xMS0yMSAxNDo0MToyNiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChHU1RfTElWRV9CUk9BRENBU1QsIEdTVF9MSVZFX1NJR05BTCkgKEdTVF9MSVZFX1RJTUVEX1dBSVQsIEdTVF9MSVZFX1dBSVQsIEdTVF9MSVZFX0dFVF9DT05EKSAoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoR1NUX0xJVkVfQlJPQURDQVNULCBHU1RfTElWRV9TSUdOQUwpCi0JICAoR1NUX0xJVkVfVElNRURfV0FJVCwgR1NUX0xJVkVfV0FJVCwgR1NUX0xJVkVfR0VUX0NPTkQpCi0JICAoR1NUX0xJVkVfVU5MT0NLLCBHU1RfTElWRV9UUllMT0NLLCBHU1RfTElWRV9MT0NLKQotCSAgKEdTVF9MSVZFX0dFVF9MT0NLKTogTW92ZWQgaGVyZSBmcm9tIGdzdGJhc2VzcmMuaC4gVGhleSBhcmUKLQkgIHByaXZhdGUgdG8gdGhlIGJhc2VzcmMgaW1wbGVtZW50YXRpb24uCi0KLTIwMDUtMTEtMjEgMTQ6MzQ6MDcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3NlbmRfZXZlbnQpOiBEb2MgbW9yZS4gVGFrZSBzdHJlYW0gbG9jayBvbiBiZWhhbGYgb2YgZXZlbnQgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LiBJdCBzaG91bGQgbm8gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9zZW5kX2V2ZW50KTogRG9jIG1vcmUuIFRha2Ugc3RyZWFtIGxvY2sgb24KLQkgIGJlaGFsZiBvZiBldmVudCBmdW5jdGlvbiBpZiBuZWNlc3NhcnkuIEl0IHNob3VsZCBubyBsb25nZXIgYmUKLQkgIG5lY2Vzc2FyeSB0byB0YWtlIHRoZSBzdHJlYW0gbG9jayBpbiBwYWQncyBldmVudCBmdW5jdGlvbnMuIEZpeGVzCi0JICAjMzIwMjk5LgotCi0yMDA1LTExLTIxIDE0OjI4OjIxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgUmVuYW1lIGdzdF9jYXBzX3N0cnVjdHVyZV9maXhhdGVfKiB0byBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV8qICgjMzIyMDI3KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50KSwKLQkgIChnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2RvdWJsZSksCi0JICAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfYm9vbGVhbik6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICAqIHdpbjMyL2dzdHJlYW1lci5kZWY6Ci0JICBSZW5hbWUgZ3N0X2NhcHNfc3RydWN0dXJlX2ZpeGF0ZV8qIHRvIGdzdF9zdHJ1Y3R1cmVfZml4YXRlXyoKLQkgICgjMzIyMDI3KQotCi0yMDA1LTExLTIxIDE0OjI1OjIxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLio6IFBvcnQgZmQ6Ly8gVVJJIGhhbmRsZXIgZnJvbSAwLjggdG8gZmRzcmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKF9kb19pbml0KSwgKGdzdF9mZHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfZmRzcmNfaW5pdCksIChnc3RfZmRzcmNfZGlzcG9zZSksIChnc3RfZmRzcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZmRzcmNfdXJpX2dldF90eXBlKSwgKGdzdF9mZHNyY191cmlfZ2V0X3Byb3RvY29scyksCi0JICAoZ3N0X2Zkc3JjX3VyaV9nZXRfdXJpKSwgKGdzdF9mZHNyY191cmlfc2V0X3VyaSksCi0JICAoZ3N0X2Zkc3JjX3VyaV9oYW5kbGVyX2luaXQpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKLQkgIFBvcnQgZmQ6Ly8gVVJJIGhhbmRsZXIgZnJvbSAwLjggdG8gZmRzcmMKLQotMjAwNS0xMS0yMSAxMzoyNjo1MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgTW9yZSBzZWdtZW50IHVwZGF0ZXMgYW5kIG1vcmUgY2hlY2tzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RzZWdtZW50LmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RzZWdtZW50c19zdWl0ZSksCi0JICAobWFpbik6Ci0JICAqIGdzdC9nc3RzZWdtZW50LmM6IChnc3Rfc2VnbWVudF9pbml0KSwgKGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbiksCi0JICAoZ3N0X3NlZ21lbnRfc2V0X2xhc3Rfc3RvcCksIChnc3Rfc2VnbWVudF9zZXRfc2VlayksCi0JICAoZ3N0X3NlZ21lbnRfc2V0X25ld3NlZ21lbnQpLCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLAotCSAgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSksIChnc3Rfc2VnbWVudF9jbGlwKToKLQkgICogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIE1vcmUgc2VnbWVudCB1cGRhdGVzIGFuZCBtb3JlIGNoZWNrcy4KLQotMjAwNS0xMS0yMSAxMzoyNjo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHZhbHVlLio6IERyb3AgbGVhZGluZyAnJScgZnJvbSBHU1RfRk9VUkNDX0ZPUk1BVCwgdGh1cyBtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoIG91ciBvdGhlciBmb3JtYXQgZGVmaW5lcyAoIzMyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfdHJhbnNmb3JtX2ZvdXJjY19zdHJpbmcpLAotCSAgKGdzdF92YWx1ZV9zZXJpYWxpemVfZm91cmNjKToKLQkgICogZ3N0L2dzdHZhbHVlLmg6Ci0JICBEcm9wIGxlYWRpbmcgJyUnIGZyb20gR1NUX0ZPVVJDQ19GT1JNQVQsIHRodXMgbWFraW5nIGl0Ci0JICBjb25zaXN0ZW50IHdpdGggb3VyIG90aGVyIGZvcm1hdCBkZWZpbmVzICgjMzIwMzI0KS4KLQotMjAwNS0xMS0yMSAxMzoxMjoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IFJldmVydCBwcmV2aW91cyBjb21taXQuIFZhbHVlIGxpc3RzIGFyZSBieSBkZWZpbml0aW9uIG5vdCBmaXhlZCwgYXMgdGhleSBhcmUgYSBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9pc19maXhlZCk6Ci0JICBSZXZlcnQgcHJldmlvdXMgY29tbWl0LiBWYWx1ZSBsaXN0cyBhcmUgYnkgZGVmaW5pdGlvbgotCSAgbm90IGZpeGVkLCBhcyB0aGV5IGFyZSBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzLgotCi0yMDA1LTExLTIxIDEzOjAzOjM2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RldmVudC5oIChHU1RfRVZFTlRfRklMTEVSKTogUmVtb3ZlZC4gQ2FuIGJlIGFkZGVkIGJhY2sgZHVyaW5nIHRoZSBzdGFibGUgc2VyaWVzIGlmIHdlIG5lZWQgaXQuIEZpeGVzICMzMTkxNzguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RldmVudC5oIChHU1RfRVZFTlRfRklMTEVSKTogUmVtb3ZlZC4gQ2FuIGJlIGFkZGVkIGJhY2sKLQkgIGR1cmluZyB0aGUgc3RhYmxlIHNlcmllcyBpZiB3ZSBuZWVkIGl0LiBGaXhlcyAjMzE5MTc4LgotCSAgKiBnc3QvZ3N0ZXZlbnQuYyAoZ3N0X2V2ZW50X25ld19maWxsZXIpOiBSZW1vdmVkLgotCSAgKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzogVXBkYXRlIGNvbW1lbnQgYWJvdXQgZmlsbGVyIGV2ZW50cy4KLQotMjAwNS0xMS0yMSAxMjo0Mjo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IFNob3VsZCBoYW5kbGUgYm90aCB2YWx1ZSBhcnJheXMgYW5kIHZhbHVlIGxpc3RzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2lzX2ZpeGVkKToKLQkgIFNob3VsZCBoYW5kbGUgYm90aCB2YWx1ZSBhcnJheXMgYW5kIHZhbHVlIGxpc3RzLgotCi0yMDA1LTExLTIxIDEyOjI3OjAxICswMDAwICBBbGVzc2FuZHJvIERlc3NpbmEgPGFsZXNzYW5kcm9Abm52YS5vcmc+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jIChnc3RfdmFsdWVfaXNfZml4ZWQpOiBVc2UgZ3N0X3ZhbHVlX2FycmF5IGZ1bmN0aW9ucyB0byBhY2Nlc3MgYXJyYXlzLiBGaXhlcyAjMzIxOTYyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgcGF0Y2ggYnk6IEFsZXNzYW5kcm8gRGVzc2luYSA8YWxlc3NhbmRybyBubnZhIG9yZz4KLQkgICogZ3N0L2dzdHZhbHVlLmMgKGdzdF92YWx1ZV9pc19maXhlZCk6IFVzZSBnc3RfdmFsdWVfYXJyYXkKLQkgIGZ1bmN0aW9ucyB0byBhY2Nlc3MgYXJyYXlzLiBGaXhlcyAjMzIxOTYyLgotCi0yMDA1LTExLTIxIDExOjI2OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6IGdzdF9jb2xsZWN0cGFkc19nZXRfdHlwZSA9PiBnc3RfY29sbGVjdF9wYWRzX2dldF90eXBlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkgIGdzdF9jb2xsZWN0cGFkc19nZXRfdHlwZSA9PiBnc3RfY29sbGVjdF9wYWRzX2dldF90eXBlLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICBSZW1vdmUgdW51c2VkIFNJR05BTF9IQU5ET0ZGIGVudW0uCi0KLTIwMDUtMTEtMjEgMTE6MDY6NDIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGV2ZW50LmggKEdzdEV2ZW50VHlwZUZsYWdzKTogTmV3IGRhdGEgdHlwZSwgdGhlIGZsYWdzIG9mIHRoZSBldmVudCB0eXBlICh1cHN0cmVhbSwgZG93bnN0cmVhbSwgc2VyaWFsaXplZCkuIFJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RldmVudC5oIChHc3RFdmVudFR5cGVGbGFncyk6IE5ldyBkYXRhIHR5cGUsIHRoZSBmbGFncyBvZgotCSAgdGhlIGV2ZW50IHR5cGUgKHVwc3RyZWFtLCBkb3duc3RyZWFtLCBzZXJpYWxpemVkKS4gUmVuYW1lZAotCSAgR1NUX0VWRElSXyogYW5kIEdTVF9FVlNFUiB0byBHU1RfRVZFTlRfVFlQRV8qLgotCSAgKEdzdEV2ZW50VHlwZSk6IFVzZSBHc3RFdmVudFR5cGVGbGFncy4gUmVuYW1lIENVU1RPTV9VUCB0bwotCSAgQ1VTVE9NX1VQU1RSRUFNLCBDVVNUT01fRFMgdG8gQ1VTVE9NX0RPV05TVFJFQU0sIGV0Yy4KLQkgICogZ3N0L2dzdGV2ZW50LmM6IFVwZGF0ZSBmb3IgbmV3IENVU1RPTSBldmVudCBuYW1lcy4KLQkgICogY2hlY2svZ3N0L2dzdGV2ZW50LmM6IFVwZGF0ZSBjaGVjayBmb3IgbmV3IENVU1RPTSBldmVudCBuYW1lcy4KLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3RldmVudC5jIChnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MpOiBOZXcgZnVuY3Rpb24uIEZpeGVzCi0JICBidWcgIzMxOTM5Mi4KLQotMjAwNS0xMS0yMSAxMTowMDowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgUmVuYW1lIGdzdF9jb2xsZWNwYWRzX2ZvbygpID0+IGdzdF9jb2xsZWN0X3BhZHNfZm9vKCkuIERvY3VtZW50IHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25zIGFzIHVuaW1wbGVtZW50ZWQgKCMzMjA3NjYpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgICogd2luMzIvbGliZ3N0YmFzZS5kZWY6Ci0JICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdF9wYWRzX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19jbGFzc19pbml0KSwgKGdzdF9jb2xsZWN0X3BhZHNfaW5pdCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSksIChnc3RfY29sbGVjdF9wYWRzX25ldyksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24pLCAoZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQpLCAoZ3N0X2NvbGxlY3RfcGFkc19pc19hY3RpdmUpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfY29sbGVjdCksIChnc3RfY29sbGVjdF9wYWRzX2NvbGxlY3RfcmFuZ2UpLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQpLCAoZ3N0X2NvbGxlY3RfcGFkc19zdG9wKSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX3BlZWspLCAoZ3N0X2NvbGxlY3RfcGFkc19wb3ApLAotCSAgKGdzdF9jb2xsZWN0X3BhZHNfYXZhaWxhYmxlKSwgKGdzdF9jb2xsZWN0X3BhZHNfcmVhZCksCi0JICAoZ3N0X2NvbGxlY3RfcGFkc19mbHVzaCksIChnc3RfY29sbGVjdF9wYWRzX2V2ZW50KSwKLQkgIChnc3RfY29sbGVjdF9wYWRzX2NoYWluKToKLQkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgIFJlbmFtZSBnc3RfY29sbGVjcGFkc19mb28oKSA9PiBnc3RfY29sbGVjdF9wYWRzX2ZvbygpLiBEb2N1bWVudAotCSAgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMgYXMgdW5pbXBsZW1lbnRlZCAoIzMyMDc2NikuCi0KLTIwMDUtMTEtMjEgMTA6NDE6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RtZXNzYWdlLmM6IEltcHJvdmUgZG9jcyBmb3IgRFVSQVRJT04gbWVzc2FnZSAodXNhZ2Ugb2YgZHVyYXRpb24gcGFyYW1ldGVyKSAoIzMyMDExMykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgSW1wcm92ZSBkb2NzIGZvciBEVVJBVElPTiBtZXNzYWdlICh1c2FnZSBvZiBkdXJhdGlvbiBwYXJhbWV0ZXIpCi0JICAoIzMyMDExMykKLQotMjAwNS0xMS0yMSAxMDowNDoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgotCSAgdXBkYXRlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZQotCi0yMDA1LTExLTIxIDA5OjQ0OjQ2ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgYWRkIGxhdGVzdCAucGMgZmlsZSB0byBzcGVjCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBsYXRlc3QgLnBjIGZpbGUgdG8gc3BlYwotCi0yMDA1LTExLTIwIDE5OjExOjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGRlZCBzZWdtZW50IGhlbHBlciBzdHJ1Y3R1cmUgYW5kIG1ldGhvZHMuIE5vdCBmdWxseSBpbXBsZW1lbnRlZCB5ZXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGNoZWNrL2dzdC9nc3RzZWdtZW50LmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RldmVudHNfc3VpdGUpLAotCSAgKG1haW4pOgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nc3QuaDoKLQkgICogZ3N0L2dzdHNlZ21lbnQuYzogKGdzdF9zZWdtZW50X2luaXQpLCAoZ3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uKSwKLQkgIChnc3Rfc2VnbWVudF9zZXRfc2VlayksIChnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCksCi0JICAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUpLCAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKSwKLQkgIChnc3Rfc2VnbWVudF9jbGlwKToKLQkgICogZ3N0L2dzdHNlZ21lbnQuaDoKLQkgIEFkZGVkIHNlZ21lbnQgaGVscGVyIHN0cnVjdHVyZSBhbmQgbWV0aG9kcy4gTm90IGZ1bGx5IGltcGxlbWVudGVkCi0JICB5ZXQuCi0JICBBZGRlZCBzZWdtZW50IGNoZWNrLgotCi0yMDA1LTExLTIwIDE3OjEyOjQ5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdHZhbHVlLmM6IEFkZCBhIGRlc2VyaWFsaXNhdGlvbiB0ZXN0IGZvciBmcmFjdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF92YWx1ZV9zdWl0ZSk6Ci0JICBBZGQgYSBkZXNlcmlhbGlzYXRpb24gdGVzdCBmb3IgZnJhY3Rpb25zCi0JICAqIGV4YW1wbGVzL21ldGFkYXRhL3JlYWQtbWV0YWRhdGEuYzogKG1lc3NhZ2VfbG9vcCksCi0JICAobWFrZV9waXBlbGluZSksIChtYWluKToKLQkgIEZpeCB1cCBtZXRhZGF0YSByZWFkaW5nIHNhbXBsZS4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZG9fc3luYyk6Ci0JICBEZWJ1ZyBmb3JtYXQgZml4Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X25lZ290aWF0ZSk6Ci0JICBEb24ndCB0cnkgYW5kIGZpeGF0ZSBlbXB0eSBjYXBzCi0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgV3JhcCBpbiBHX0JFR0lOX0RFQ0xTL0dfRU5EX0RFQ0xTCi0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbGxlY3RfZnJhY3Rpb24pLAotCSAgKGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24pLCAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciksCi0JICAoZ3N0X3ZhbHVlX3RyYW5zZm9ybV9zdHJpbmdfZnJhY3Rpb24pLAotCSAgKGdzdF92YWx1ZV9jb21wYXJlX2ZyYWN0aW9uKToKLQkgIEFkZCBzb21lIGV4dHJhIGd1YXJkcyB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBlbmQgdXAKLQkgIHdpdGggYW4gaW52YWxpZCBkZW5vbWluYXRvciBvZiAwIGluIGEgZ3N0ZnJhY3Rpb24gYW5kCi0JICB0aGF0IGZyYWN0aW9ucyBhbHdheXMgZ2V0IHJlZHVjZWQuCi0KLTIwMDUtMTEtMjAgMTQ6NTY6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY2hhbmdlbG9nIGluIGxhc3QgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY2hhbmdlbG9nIGluIGxhc3QgY29tbWl0Ci0KLTIwMDUtMTEtMjAgMTQ6NTA6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvYyBmaXhlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICAqIGdzdC9nc3Rmb3JtYXQuYzoKLQkgICogZ3N0L2dzdGZvcm1hdC5oOgotCSAgKiBnc3QvZ3N0aW5kZXguaDoKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICAqIGdzdC9nc3RxdWVyeS5oOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIERvYyBmaXhlcy4KLQotMjAwNS0xMS0yMCAxMzoyODoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgTWFrZSBhIHByb3BlciBlbnVtIG9mIHRoZSBmbGFnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICAqIGdzdC9nc3RjYXBzLmg6Ci0JICBNYWtlIGEgcHJvcGVyIGVudW0gb2YgdGhlIGZsYWcuCi0KLTIwMDUtMTEtMTkgMTg6NTc6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZCB0eXBlIHRvIHF1YXJrIGFuZCB0eXBlIHRvIHN0cmluZyBjb252ZXJzaW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgKiBnc3QvZ3N0Zm9ybWF0LmM6IChfZ3N0X2Zvcm1hdF9pbml0aWFsaXplKSwgKGdzdF9mb3JtYXRfZ2V0X25hbWUpLAotCSAgKGdzdF9mb3JtYXRfdG9fcXVhcmspLCAoZ3N0X2Zvcm1hdF9yZWdpc3Rlcik6Ci0JICAqIGdzdC9nc3Rmb3JtYXQuaDoKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IChfZ3N0X3F1ZXJ5X2luaXRpYWxpemUpLAotCSAgKGdzdF9xdWVyeV90eXBlX2dldF9uYW1lKSwgKGdzdF9xdWVyeV90eXBlX3RvX3F1YXJrKSwKLQkgIChnc3RfcXVlcnlfdHlwZV9yZWdpc3Rlcik6Ci0JICAqIGdzdC9nc3RxdWVyeS5oOgotCSAgQWRkIHR5cGUgdG8gcXVhcmsgYW5kIHR5cGUgdG8gc3RyaW5nIGNvbnZlcnNpb25zLgotCi0yMDA1LTExLTE5IDE4OjMyOjAxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuaCAoR1NUX0JVRkZFUl9GTEFHX09SSUdJTkFMKTogUmVtb3ZlZC4gRml4ZXMgIzMyMDA5Ny4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGJ1ZmZlci5oIChHU1RfQlVGRkVSX0ZMQUdfT1JJR0lOQUwpOiBSZW1vdmVkLiBGaXhlcwotCSAgIzMyMDA5Ny4KLQotMjAwNS0xMS0xOSAxODoyODo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgTWFrZSBtZXNzYWdlIGhhbmRsaW5nIG92ZXJyaWRhYmxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX3Byb3ZpZGVfY2xvY2tfZnVuYyksCi0JICAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGJpbl9idXNfaGFuZGxlciksCi0JICAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKToKLQkgICogZ3N0L2dzdGJpbi5oOgotCSAgTWFrZSBtZXNzYWdlIGhhbmRsaW5nIG92ZXJyaWRhYmxlLgotCi0yMDA1LTExLTE5IDE4OjI2OjM1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuaCAoR1NUX1BBRF9JU19VU0FCTEUpOiBSZW1vdmVkLiBGaXhlcyAjMzIxMjM1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0cGFkLmggKEdTVF9QQURfSVNfVVNBQkxFKTogUmVtb3ZlZC4gRml4ZXMgIzMyMTIzNS4KLQotMjAwNS0xMS0xOSAxODoxNzoyOSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0Y2xvY2suKjogQ2hhbmdlIHJlc29sdXRpb24gdG8gYmUgYSBHc3RDbG9ja1RpbWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgKiBnc3QvZ3N0Y2xvY2suYyAoR3N0Q2xvY2ssIEdzdENsb2NrQ2xhc3MpOiBDaGFuZ2UgcmVzb2x1dGlvbiB0bwotCSAgYmUgYSBHc3RDbG9ja1RpbWUuCi0JICAoZ3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uLCBnc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24pOiBSZXNvbHV0aW9uCi0JICBpcyBhIEdzdENsb2NrVGltZS4gRml4ZXMgIzMyMTcxMC4KLQotMjAwNS0xMS0xOSAxODowNjo1NiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0Y2xvY2suaCAoR3N0Q2xvY2spOiBSZW1vdmUgb2Zmc2V0IHByb3BlcnR5LiBBZGQgaW50ZXJuYWxfY2FsaWJyYXRpb24gYW5kIGV4dGVybmFsX2NhbGlicmF0aW9uLiBGaXggcGFkZGluZy4gUGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGNsb2NrLmggKEdzdENsb2NrKTogUmVtb3ZlIG9mZnNldCBwcm9wZXJ0eS4gQWRkCi0JICBpbnRlcm5hbF9jYWxpYnJhdGlvbiBhbmQgZXh0ZXJuYWxfY2FsaWJyYXRpb24uIEZpeCBwYWRkaW5nLiBQYWQKLQkgIGFsc28gYnkgR3N0Q2xvY2tUaW1lIHNvIHdlIGRvbid0IHJ1biBpbnRvIHByb2JsZW1zLgotCSAgKiBnc3QvZ3N0Y2xvY2suYyAoZ3N0X2Nsb2NrX3NldF9yYXRlX29mZnNldCk6IFJlbW92ZS4KLQkgIChnc3RfY2xvY2tfZ2V0X3JhdGVfb2Zmc2V0KTogUmVtb3ZlLgotCSAgKGdzdF9jbG9ja19zZXRfdGltZV9hZGp1c3QpOiBSZW1vdmUuIEZpeGVzICMzMjE3MTIuCi0KLTIwMDUtMTEtMTkgMTc6NTA6NTIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHV0aWxzLmg6IGdzdC9nc3R1dGlscy5jIChnX3N0YXRpY19yZWNfY29uZF93YWl0KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmMgKGdfc3RhdGljX3JlY19jb25kX3dhaXQpCi0JICAoZ19zdGF0aWNfcmVjX2NvbmRfdGltZWRfd2FpdCk6IFJlbW92ZWQsIG5vIGxvbmdlciBuZWVkZWQuCi0JICAqIGdzdC9nc3RiaW4uYzogUmVtb3ZlIHRlcnJpYmxlIGNvbnRpbnVlX3N0YXRlIHByb3RvdHlwZS4KLQkgICogZ3N0L2dzdGVsZW1lbnQuaCAoZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUpOiBNYWtlIHB1YmxpYy4KLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKTogUmVtb3ZlZCwgcmVwbGFjZWQKLQkgIGJ5IGNvbnRpbnVlX3N0YXRlLiBGaXhlcyAjMzE5Mzg5LgotCi0yMDA1LTExLTE5IDE3OjI4OjU4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RpbmRleC5oIChHc3RJbmRleEZpbHRlcik6IEFjdHVhbGx5IHBhc3Mgb24gdGhlIHVzZXJfZGF0YS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGluZGV4LmggKEdzdEluZGV4RmlsdGVyKTogQWN0dWFsbHkgcGFzcyBvbiB0aGUgdXNlcl9kYXRhLgotCSAgUmVhbGx5IGZpeGVzICMxNjg0MzguIEhvd2V2ZXIgSSBkb24ndCBzZWUgYW55d2hlcmUgd2hlcmUgdGhlCi0JICBmaWx0ZXIgZnVuY3Rpb24gaXMgY2FsbGVkLi4uIHN0dXBpZCBHU3RyZWFtZXIuLi4KLQotMjAwNS0xMS0xOSAxNzoyNjoyNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0aW5kZXguaCAoR3N0SW5kZXgpOiBBZGQgZmllbGQgZm9yIHVzZXJfZGF0YV9kZXN0cm95LiBXZSBkb24ndCBoYXZlIGEgZGlzcG9zZSBmdW5jdGlvbiwgc28gaXQgd29uJ3QgZ2V0IGNhbGxlZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGluZGV4LmggKEdzdEluZGV4KTogQWRkIGZpZWxkIGZvciB1c2VyX2RhdGFfZGVzdHJveS4gV2UKLQkgIGRvbid0IGhhdmUgYSBkaXNwb3NlIGZ1bmN0aW9uLCBzbyBpdCB3b24ndCBnZXQgY2FsbGVkIHdoZW4gdGhlCi0JICBvYmplY3QgaXMgdW5yZWZmZWQsIGJ1dCBvaCB3ZWxsIQotCSAgKiBnc3QvZ3N0aW5kZXguYyAoZ3N0X2luZGV4X3NldF9maWx0ZXJfZnVsbCk6IE5ldyBBUEkgZnVuY3Rpb24sCi0JICBhbGxvd3MgYSBkZXN0cm95IGZ1bmN0aW9uIHRvIGJlIHNldCBzbyB1c2VyX2RhdGEgY2FuIGJlIGZyZWVkLgotCSAgRml4ZXMgIzE2ODQzOC4KLQkgIChnc3RfaW5kZXhfc2V0X2ZpbHRlcik6IENhbGwgZ3N0X2luZGV4X3NldF9maWx0ZXJfZnVsbC4KLQotMjAwNS0xMS0xOSAxNzowODoyMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBjaGVjay9nc3QvZ3N0dmFsdWUuYyAodGVzdF9zdHJpbmcpOiBBZGQgdGVzdCBmb3IgYnVnICMxNjU2NTAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jICh0ZXN0X3N0cmluZyk6IEFkZCB0ZXN0IGZvciBidWcgIzE2NTY1MC4KLQkgICogZ3N0L2dzdHZhbHVlLmMgKGdzdF9zdHJpbmdfd3JhcCk6IFRyeWluZyB0byBzZXJpYWxpemUgYSBOVUxMCi0JICBzdHJpbmcgc2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IsIGdpdmVuIHRoZSBsYWNrIG9mIGEgd2F5IHRvCi0JICByZXByZXNlbnQgTlVMTCBzdHJpbmdzLiBGaXhlcyAjMTY1NjUwLgotCi0yMDA1LTExLTE5IDE2OjQ2OjMwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5oOiBnc3QvZ3N0dmFsdWUuYyAoZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSkgKGdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlLCBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3R2YWx1ZS5oOgotCSAgKiBnc3QvZ3N0dmFsdWUuYyAoZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSkKLQkgIChnc3RfdmFsdWVfYXJyYXlfcHJlcGVuZF92YWx1ZSwgZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplKQotCSAgKGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUpOiBOZXcgQVBJLCBjb3BpZWQgZnJvbQotCSAgZ3N0X3ZhbHVlX2xpc3RfKiwgb25seSBvcGVyYXRlcyBvbiBhcnJheXMuCi0JICAoZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlLCBnc3RfdmFsdWVfbGlzdF9wcmVwZW5kX3ZhbHVlKQotCSAgKGdzdF92YWx1ZV9saXN0X2NvbmNhdCwgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUpCi0JICAoZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlKTogT25seSBvcGVyYXRlIG9uIGxpc3RzLiBGaXhlcyAjMTU2NjMzLgotCSAgKiBnc3QvZ3N0dmFsdWUuYyAoZ3N0X3ZhbHVlX2luaXRfbGlzdF9vcl9hcnJheSk6IFJlbmFtZWQgZnJvbQotCSAgaW5pdF9saXN0LCBiZWNhdXNlIGl0IHdvcmtzIG9uIGJvdGguCi0JICAoY29weV9nYXJyYXlfb2ZfZ3N0dmFsdWUpOiBSZW5hbWVkIGZyb20gZ3N0X3ZhbHVlX2xpc3RfY29weV9hcnJheS4KLQkgIChnc3RfdmFsdWVfY29weV9saXN0X29yX2FycmF5KTogUmVuYW1lZCBmcm9tIGNvcHlfbGlzdC4KLQkgIChnc3RfdmFsdWVfZnJlZV9saXN0X29yX2FycmF5KTogUmVuYW1lZCBmcm9tIGZyZWVfbGlzdC4KLQkgIChnc3RfdmFsdWVfY29sbGVjdF9saXN0X29yX2FycmF5KTogUmVuYW1lZCBmcm9tIGNvbGxlY3RfbGlzdC4KLQkgIChnc3RfdmFsdWVfbGNvcHlfbGlzdF9vcl9hcnJheSk6IFJlbmFtZWQgZnJvbSBsY29weV9saXN0LgotCSAgKGdzdF92YWx1ZV9saXN0X29yX2FycmF5X3BlZWtfcG9pbnRlcik6IFJlbmFtZWQgZnJvbQotCSAgbGlzdF9wZWVrX3BvaW50ZXIuCi0JICAoX2dzdF92YWx1ZV9hcnJheV92YWx1ZV90YWJsZSwgX2dzdF92YWx1ZV9saXN0X3ZhbHVlX3RhYmxlKToKLQkgIFVwZGF0ZSB2YWx1ZSB0YWJsZSBmdW5jdGlvbnMuCi0JICAoZ3N0X3ZhbHVlX2NvbXBhcmVfbGlzdF9vcl9hcnJheSk6IFJlbmFtZWQgZnJvbSBjb21wYXJlX2xpc3QuCi0KLTIwMDUtMTEtMTkgMTY6MDU6MTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0dGFnbGlzdC5oOiBXaG9vcHMsIGZvcmVhY2ggZnVuY3Rpb24gcmV0dXJucyB2b2lkLiBBbHNvIGZpeCBzb21lIGNvbnN0bmVzcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0dGFnbGlzdC5oOiBXaG9vcHMsIGZvcmVhY2ggZnVuY3Rpb24gcmV0dXJucyB2b2lkLiBBbHNvIGZpeAotCSAgc29tZSBjb25zdG5lc3MuCi0KLTIwMDUtMTEtMTkgMTU6NTE6NDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHRhZ2xpc3QuKjogT3BlcmF0ZXMgb24gYSBjb25zdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oIChnc3RfdGFnX2xpc3RfZm9yZWFjaCk6IE9wZXJhdGVzIG9uIGEgY29uc3QKLQkgIEdzdFRhZ0xpc3QqLiBGaXhlcyAjMTQzNDcyLgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6IENsYXJpZnkgd2hhdCB0aGUgZm9yZWFjaC9tYXAgZnVuY3Rpb25zIGNhbgotCSAgb3IgY2FuJ3QgZG8gdG8gdGhlaXIgYXJndW1lbnRzLgotCi0yMDA1LTExLTE4IDE5OjIxOjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Y2xvY2suYzogRG9jIGFuZCBBUEkgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKSwKLQkgIChnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uKToKLQkgIERvYyBhbmQgQVBJIGZpeGVzLgotCSAgQ2FsbGlicmF0aW9uIGNhbiBiZSBzZXQgd2l0aCBpbnRlcm5hbCB0aW1lIGVxdWFsIHRvIGN1cnJlbnQKLQkgIGludGVybmFsIHRpbWUgdG9vLgotCi0yMDA1LTExLTE4IDE4OjU1OjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGVycm9yLio6IGRvY3VtZW50Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVycm9yLmM6Ci0JICAqIGdzdC9nc3RlcnJvci5oOgotCSAgZG9jdW1lbnQKLQotMjAwNS0xMS0xOCAxODozODo0MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcmFuZG9tL21vdmluZy1wbHVnaW5zOgotCSAgZG9jdW1lbnQgb24gcmVxdWlyZW1lbnRzIGZvciBtb3ZpbmcgcGx1Z2lucyB0byBnb29kCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvY3VtZW50IG9uIHJlcXVpcmVtZW50cyBmb3IgbW92aW5nIHBsdWdpbnMgdG8gZ29vZAotCi0yMDA1LTExLTE4IDE2OjI0OjU2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIEFkZCBuZXQgcGtnY29uZmlnIGZpbGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluOgotCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbjoKLQkgICogcGtnY29uZmlnL01ha2VmaWxlLmFtOiBBZGQgbmV0IHBrZ2NvbmZpZyBmaWxlcy4KLQotMjAwNS0xMS0xOCAxNjowNDoyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvOiBkb2NzIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGNhcHMuYzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICAqIGdzdC9nc3R0cmFjZS5jOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzoKLQkgICogZ3N0L2dzdHZhbHVlLmg6Ci0JICBkb2NzIGZpeGVzCi0KLTIwMDUtMTEtMTggMTU6NTI6MjQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiBUdXJuIG9mZiBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogVHVybiBvZmYgZGVidWdnaW5nLgotCSAgKiBjaGVjay9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAodGVzdF9mdW5jdGlvbmluZyk6IEFzc2VydCB0aGF0IHRoZQotCSAgdGltZXMgY29ubnZlcmdlIHNvbWV3aGF0LiBDYW4ndCBtYWtlIGEgcmVhbCB0ZXN0LgotCi0yMDA1LTExLTE4IDE1OjMwOjE4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAoZG9fbGluZWFyX3JlZ3Jlc3Npb24pOiBVc2UgYWxsIGludGVnZXIgYXJpdGhtZXRpYy4gUmV0dXJuIHRoZSBtaW5pbXVtIG9mIHRoZSBkb21haW4sIHdoaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMgKGRvX2xpbmVhcl9yZWdyZXNzaW9uKTogVXNlIGFsbAotCSAgaW50ZWdlciBhcml0aG1ldGljLiBSZXR1cm4gdGhlIG1pbmltdW0gb2YgdGhlIGRvbWFpbiwgd2hpY2ggY2FuIGJlCi0JICBzZXQgYXMgImludGVybmFsIiBmb3IgZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbi4KLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19vYnNlcnZlX3RpbWVzKTogQ2FsbCBfc2V0X2NhbGlicmF0aW9uLgotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyk6IENhbGwgX3NldF9jYWxpYnJhdGlvbiBpbnN0ZWFkIG9mCi0JICByYXRlX29mZnNldC4KLQkgICogY2hlY2svbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMgKHRlc3RfZnVuY3Rpb25pbmcpOiBVc2UgdGhlIHJpZ2h0Ci0JICBhZGp1c3RtZW50IGFwaS4KLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICAqIGdzdC9nc3RjbG9jay5jIChnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uKQotCSAgKGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24pOiBOZXcgZnVuY3Rpb25zLCBvYnNvbGV0ZSB0aGUgb25lcyBJCi0JICBhZGRlZCB5ZXN0ZXJkYXkuIERvaC4gUHJlY2lzaW9uIGlzc3VlcyBtZWFuIHdlIGhhdmUgdG8gZXh0cmFwb2xhdGUKLQkgIGZyb20gYSBwb2ludCBpbiB0aGUgbW9yZSByZWNlbnQgcGFzdCB0aGFuIDE5NzAuCi0JICAoZ3N0X2Nsb2NrX2dldF9yYXRlX29mZnNldCwgZ3N0X2Nsb2NrX3NldF9yYXRlX29mZnNldCk6IE1hcmsgYXMKLQkgIG9ic29sZXRlLgotCSAgKGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQpOiBVc2UgdGhlIHJpZ2h0IGNhbGlicmF0aW9uIGRhdGEuCi0KLTIwMDUtMTEtMTggMTQ6NDk6MjggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEFsc28gcmVzZXQgdGhlIC0+Y3VycmVudF8qIHZhbHVlcyBpbiBSRUFEWS0+UEFVU0VECi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIEFsc28gcmVzZXQgdGhlIC0+Y3VycmVudF8qIHZhbHVlcyBpbiBSRUFEWS0+UEFVU0VECi0KLTIwMDUtMTEtMTggMTQ6MTM6MjggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jIChnc3RfbmV0X2NsaWVudF9jbG9ja190aHJlYWQpOiBXaG9vcHMsIGNoZWNrIHRoZSByaWdodCBmZC4gQWxzbyBhZGQgc29tZSBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAoZ3N0X25ldF9jbGllbnRfY2xvY2tfdGhyZWFkKToKLQkgIFdob29wcywgY2hlY2sgdGhlIHJpZ2h0IGZkLiBBbHNvIGFkZCBzb21lIGRlYnVnZ2luZy4KLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19vYnNlcnZlX3RpbWVzKTogQWRqdXN0IGZvciBpbnQ2NCBvZmZzZXQuCi0JICAoZG9fbGluZWFyX3JlZ3Jlc3Npb24pOiBBZGQgYSBjcmFwbG9hZCBvZiBkZWJ1Z2dpbmcuIFN1YnRyYWN0IG9mZgotCSAgdGhlIG1pbmltdW0gdmFsdWVzIGZyb20gdGhlIGlucHV0IHNlcmllcyB0byBkaXNjYXJkIHVubmVlZGVkIGJpdHMuCi0JICBVc2Ugb25seSBpbnQgYXJpdGhtZXRpYy4gVGhlcmUgaXMgc3RpbGwgZG91YmxlIGFyaXRobWV0aWMgd2hlbgotCSAgY2FsY3VsYXRpbmcgdGhlIGludGVyY2VwdCB0aGF0IG5lZWRzIGZpeGluZy4gUmV0dXJuIGJvb2xlYW4gdG8KLQkgIGluZGljYXRlIHN1Y2Nlc3M7IEZBTFNFIHdvdWxkIG1lYW4gdGhlIGRvbWFpbiBvciByYW5nZSBpcyB0b28KLQkgIGdyZWF0LiBTdGlsbCBuZWVkcyBmaXhlcy4KLQotMjAwNS0xMS0xOCAxMzoxODo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHN0cmVhbSB0aW1lLCB3ZSBuZWVkIHRvIHN1YnRyYWN0IGFjY3VtdWxhdGVkIHRpbWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIEZvciB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiBzdHJlYW0gdGltZSwgd2UgbmVlZCB0byBzdWJ0cmFjdAotCSAgYWNjdW11bGF0ZWQgdGltZS4KLQkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCk6Ci0JICBSZWxlYXNlIGxvY2sgYmVmb3JlIGNhbGxpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIGFzeW5jCi0JICBlbnRyaWVzLgotCi0yMDA1LTExLTE4IDExOjU3OjMwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAoZ3N0X25ldF9jbGllbnRfY2xvY2tfY2xhc3NfaW5pdCk6IFBvcnQgZ29lcyBhbGwgdGhlIHdheSB0byBNQVhVSU5UMTYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYyAoZ3N0X25ldF9jbGllbnRfY2xvY2tfY2xhc3NfaW5pdCk6Ci0JICBQb3J0IGdvZXMgYWxsIHRoZSB3YXkgdG8gTUFYVUlOVDE2LgotCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOiBNYWtlIHRoZSBwb3J0IHJhbmdlIHRoZSBzYW1lIGFzCi0JICBmb3IgdGhlIGtlcm5lbDogMCBhc3NpZ25zLCBvdGhlcndpc2UgcG9ydHMgYXJlIGxlc3MgdGhhbgotCSAgTUFYVUlOVDE2LgotCSAgKiBjaGVjay9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IEFkYXB0IGZvciAwID09IGtlcm5lbCBhc3NpZ25zCi0JICBwb3J0IGNoYW5nZS4KLQkgICogY2hlY2svbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMgKHRlc3RfZnVuY3Rpb25pbmcpOiBBZGQgdGhlIHN0YXJ0Ci0JICBvZiBhbm90aGVyIHRlc3QuCi0KLTIwMDUtMTEtMTggMTE6MDM6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uKjogUmVtb3ZpbmcgYSBjbG9jayBwcm92aWRlciBmcm9tIGEgYmluLCB0cmlnZ2VycyBhIGNsb2NrIGxvc3QgbWVzc2FnZSBzbyB0aGF0IGEgbmV3IGNsb2NrIHdpbGwgYmUgc2VsZWN0ZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCi0JICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChiaW5fYnVzX2hhbmRsZXIpOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICBSZW1vdmluZyBhIGNsb2NrIHByb3ZpZGVyIGZyb20gYSBiaW4sIHRyaWdnZXJzIGEgY2xvY2sgbG9zdCBtZXNzYWdlCi0JICBzbyB0aGF0IGEgbmV3IGNsb2NrIHdpbGwgYmUgc2VsZWN0ZWQuCi0JICBBZGRpbmcgYSBjbG9jayB0byBhIGJpbiB0cmlnZ2VycyBhIGNsb2NrIHByb3ZpZGVyIG1lc3NhZ2UuCi0JICBNYWtlIHN1cmUgd2UgcmVzZWxlY3QgYSBjbG9jayB3aGVuIHdlIHJlY2VpdmVkIGEgY2xvY2sgbG9zdCBtZXNzYWdlLgotCSAgS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB0aGF0IHByb3ZpZGVkIHRoZSBjbG9jay4KLQotMjAwNS0xMS0xOCAxMDo1NDo1NSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyk6IEFkanVzdCB0aGUgY2xvY2sgaW5pdGlhbGx5IHNvIGl0IHByb2R1Y2VzIHZhbHVlcyBhcm91bmQgdGhlIGIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jIChnc3RfbmV0X2NsaWVudF9jbG9ja19uZXcpOiBBZGp1c3QKLQkgIHRoZSBjbG9jayBpbml0aWFsbHkgc28gaXQgcHJvZHVjZXMgdmFsdWVzIGFyb3VuZCB0aGUgYmFzZSB0aW1lLgotCSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2NsYXNzX2luaXQpOiBUeXBvIGZpeC4KLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja190aHJlYWQpOiBBZGQgbm90ZSBvbiB3aGVuIHRoZSBzb2NrZXQgZ2V0cwotCSAgY2xvc2VkLgotCi0yMDA1LTExLTE3IDE4OjUwOjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6IEZyZWUgcmVtb3RlIGFuZCBsb2NhbCB0aW1lIGFycmF5cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmM6IChnc3RfbmV0X2NsaWVudF9jbG9ja19maW5hbGl6ZSk6Ci0JICBGcmVlIHJlbW90ZSBhbmQgbG9jYWwgdGltZSBhcnJheXMuCi0KLTIwMDUtMTEtMTcgMTg6MTg6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogRml4IGNvbXBpbGF0aW9uLCB1bmluaXRpYWxpemVkIHZhcnMgYW5kIGEgZm9yZ290dGVuIGNvbnRpbnVlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogKGRvX2xpbmVhcl9yZWdyZXNzaW9uKSwKLQkgIChnc3RfbmV0X2NsaWVudF9jbG9ja19kb19zZWxlY3QpLCAoZ3N0X25ldF9jbGllbnRfY2xvY2tfdGhyZWFkKToKLQkgIEZpeCBjb21waWxhdGlvbiwgdW5pbml0aWFsaXplZCB2YXJzIGFuZCBhIGZvcmdvdHRlbiBjb250aW51ZS4KLQotMjAwNS0xMS0xNyAxNzo1NToxNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBjaGVjay86IEFkZCBhIG1vc3QgbWluaW1hbCB0ZXN0IGZvciB0aGUgbmV0IGNsaWVudCBjbG9jay4gTW9yZSB0byBjb21lIGxhdGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbSAoY2hlY2tfUFJPR1JBTVMpOgotCSAgKiBjaGVjay9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYzogQWRkIGEgbW9zdCBtaW5pbWFsIHRlc3QgZm9yIHRoZQotCSAgbmV0IGNsaWVudCBjbG9jay4gTW9yZSB0byBjb21lIGxhdGVyLgotCSAgKiBnc3QvbmV0L2dzdG5ldC5oOgotCSAgKiBnc3QvbmV0L01ha2VmaWxlLmFtOiBBZGQgbmV0Y2xpZW50Y2xvY2suCi0JICAqIGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaDoKLQkgICogZ3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5jOiBOZXcgZmlsZXMsIGltcGxlbWVudCBhbiB1bnRlc3RlZAotCSAgR3N0Q2xvY2sgdGhhdCB0YWtlcyBpdHMgdGltZSBmcm9tIGEgbmV0d29yayB0aW1lIHByb3ZpZGVyLgotCSAgSW1wbGVtZW50cyB0aGUgYWxnb3JpdGhtIGluIG5ldHdvcmstY2xvY2suc2NtLgotCSAgKiB0ZXN0cy9uZXR3b3JrLWNsb2NrLnNjbSAoKndpbmRvdy1zaXplKik6IFJlbmFtZSBmcm9tCi0JICAqcXVldWUtbGVuZ3RoKi4KLQkgICogdGVzdHMvbmV0d29yay1jbG9jay5zY20gKG5ldHdvcmstdGltZSk6Ci0JICAqIHRlc3RzL25ldHdvcmstY2xvY2stdXRpbHMuc2NtIChxLXB1c2gpOiBVcGRhdGUgY2FsbGVycy4KLQotMjAwNS0xMS0xNyAxNjowMjo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBBbmQgdW5yZWYgdGhlIGNoaWxkIHRvby4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMpLAotCSAgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXcpOgotCSAgQW5kIHVucmVmIHRoZSBjaGlsZCB0b28uLgotCi0yMDA1LTExLTE3IDE0OjUxOjExICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IFJlZmFjdG9yIHRoZSBzb3J0IGl0ZXJhdG9yIHNvIGl0IGNhbiBiZSB1c2VkIHdoaWxlIGhvbGRpbmcgdGhlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9kaXNwb3NlKSwgKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKSwKLQkgIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV3KSwgKGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQpOgotCSAgUmVmYWN0b3IgdGhlIHNvcnQgaXRlcmF0b3Igc28gaXQgY2FuIGJlIHVzZWQgd2hpbGUgaG9sZGluZyB0aGUKLQkgIExPQ0sgdG9vLgotCSAgTWFrZSBjbG9jayBzZWxlY3Rpb24gc2VsZWN0IGEgY2xvY2sgY2xvc2VzdCB0byB0aGUgc291cmNlLgotCi0yMDA1LTExLTE3IDEyOjM2OjMwICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9nc3RjbG9jay4qOiBBbm9ueW1vdXMgc3RydWN0cyBhcmUgYSBnY2MgKGFuZCBzb21lIG90aGVyIGNvbXBpbGVycykgZXh0ZW5zaW9uLCBzbyBkb24ndCB1c2UgdGhlbS4gU2luY2UgdGhpcyBpcyBvbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2luaXQpLCAoZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCksCi0JICAoZ3N0X2Nsb2NrX3NldF9yYXRlX29mZnNldCksIChnc3RfY2xvY2tfZ2V0X3JhdGVfb2Zmc2V0KToKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBBbm9ueW1vdXMgc3RydWN0cyBhcmUgYSBnY2MgKGFuZCBzb21lIG90aGVyIGNvbXBpbGVycykgZXh0ZW5zaW9uLCBzbwotCSAgZG9uJ3QgdXNlIHRoZW0uIFNpbmNlIHRoaXMgaXMgb25seSBmb3IgQUJJLWNvbXBhdGliaWxpdHksIGFuZCBvdXIKLQkgIEFQSS9BQkkgZnJlZXplIGlzIG92ZXIgaW4gYSBmZXcgZGF5cywgdGhpcyB3aG9sZSB0aGluZyB3aWxsIG9ubHkKLQkgIGxhc3QgYSBmZXcgZGF5cywgc28gZG9uJ3QgYm90aGVyIHRyeWluZyB0byB0aGluayB1cCBhIG1lYW5pbmdmdWwKLQkgIG5hbWUgZm9yIHRoZSBzdHJ1Y3QuCi0KLTIwMDUtMTEtMTcgMTE6NTE6NDkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGNsb2NrLmggKEdzdENsb2NrKTogQWRkIHJhdGUgYW5kIG9mZnNldCBwcm9wZXJ0aWVzLCBwcmVzZXJ2aW5nIEFCSSBzdGFiaWxpdHkuIEFkZCByYXRlL29mZnNldCBhY2Nlc3NvcnMuIFdpbGwgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RjbG9jay5oIChHc3RDbG9jayk6IEFkZCByYXRlIGFuZCBvZmZzZXQgcHJvcGVydGllcywKLQkgIHByZXNlcnZpbmcgQUJJIHN0YWJpbGl0eS4gQWRkIHJhdGUvb2Zmc2V0IGFjY2Vzc29ycy4gV2lsbCBmaWxlIGJ1ZwotCSAgZm9yIHRoZSBmcmVlemUgYnJlYWsuCi0JICAqIGdzdC9nc3RjbG9jay5jIChnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkKTogSW1wbGVtZW50IHVzaW5nIHJhdGUKLQkgIGFuZCBvZmZzZXQsIHRyeWluZyB0byBrZWVwIHByZWNpc2lvbiBhbmQgYXZvaWRpbmcKLQkgIHVuZGVyZmxvdy9vdmVyZmxvdy4KLQkgIChnc3RfY2xvY2tfc2V0X3JhdGVfb2Zmc2V0LCBnc3RfY2xvY2tfZ2V0X3JhdGVfb2Zmc2V0KTogTmV3Ci0JICBmdW5jdGlvbnMuIE1ha2UgZ3N0X2Nsb2NrX3NldF90aW1lX2FkanVzdCBvYnNvbGV0ZS4KLQkgIChnc3RfY2xvY2tfc2V0X3RpbWVfYWRqdXN0KTogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgb2Jzb2xldGUuCi0JICBXaWxsIGZpbGUgYnVnIHNvb24uCi0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDogTWFrZSB0aGUgQUJJLXN0YWJpbGl0eSBoYWNrCi0JICBncmVwcGFibGUgYnkgdXNpbmcgR1NUX1BBRERJTkctMSsxLgotCi0yMDA1LTExLTE3IDExOjI1OjM0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9yYW5kb20vTk9URVMtMC4xLjE6Ci0JKiBkb2NzL3JhbmRvbS9OT1RFUy0wLjIuMDoKLQkqIGRvY3MvcmFuZG9tL1RPRE8tcG9zdC0wLjEuMDoKLQkqIGRvY3MvcmFuZG9tL2FyY2g6Ci0JKiBkb2NzL3JhbmRvbS9jb3JvdXRpbmVzOgotCSogZG9jcy9yYW5kb20vZGVzaWduOgotCSogZG9jcy9yYW5kb20vZmFjdG9yeWluZm86Ci0JKiBkb2NzL3JhbmRvbS9nYm9vbGVhbjoKLQkqIGRvY3MvcmFuZG9tL3BhZGFyY2g6Ci0JKiBkb2NzL3JhbmRvbS9zZXF1ZW5jZToKLQkqIGRvY3MvcmFuZG9tL3N0YXRlLXRyYW5zaXRpb25zOgotCSogZG9jcy9yYW5kb20vc3RhdGVzOgotCSogZG9jcy9yYW5kb20vc3RhdGVzLm5ldzoKLQkqIGRvY3MvcmFuZG9tL3N0YXRlcy5vbGQ6Ci0JKiBkb2NzL3JhbmRvbS93YWxrdGhyb3VnaDoKLQkgIHJlbW92ZSBjb21wbGV0ZWx5IG91dGRhdGVkIHJhbmRvbSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBjb21wbGV0ZWx5IG91dGRhdGVkIHJhbmRvbSBkb2NzCi0KLTIwMDUtMTEtMTcgMDk6Mzc6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RtZXNzYWdlLmM6IEFzc2VydGlvbiBzaG91bGQgY2hlY2sgZm9yIENMT0NLX0xPU1QsIG5vdCBORVdfQ0xPQ0sgKCMzMjE2NDgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZXZpZXdlZCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdCk6Ci0JICBBc3NlcnRpb24gc2hvdWxkIGNoZWNrIGZvciBDTE9DS19MT1NULCBub3QgTkVXX0NMT0NLICgjMzIxNjQ4KS4KLQkgICogZ3N0L2dzdHBhZHRlbXBsYXRlLmg6Ci0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JICBEb24ndCB1c2UgYysrIHN0eWxlIGNvbW1lbnRzIGluIGhlYWRlcnMgKCMzMjE2MzgpLgotCi0yMDA1LTExLTE2IDE4OjM3OjU3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jIChnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQpOiBGcmVlIGJ1ZmZlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmMgKGdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCk6IEZyZWUKLQkgIGJ1ZmZlci4KLQotMjAwNS0xMS0xNiAxODoxNjo1MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBjaGVjay9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IENoZWNrIHRvIHNlZSB0aGF0IHRoZSB0aW1lIHByb3ZpZGVyIGFjdHVhbGx5IHByb3ZpZGVzIHRpbWVzLiBXb3JrcywgeW8hCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzogQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHRpbWUKLQkgIHByb3ZpZGVyIGFjdHVhbGx5IHByb3ZpZGVzIHRpbWVzLiBXb3JrcywgeW8hCi0KLTIwMDUtMTEtMTYgMTg6MDk6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL01ha2VmaWxlLmFtOiBFbmFibGUgbW9yZSB0ZXN0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIEVuYWJsZSBtb3JlIHRlc3RzLgotCSAgKiBjaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBTZXQgZWxlbWVudCB0byBOVUxMIGJlZm9yZSBkaXNwb3NpbmcgaXQuCi0KLTIwMDUtMTEtMTYgMTc6NTM6NTQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkgIGZpeAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXgKLQotMjAwNS0xMS0xNiAxNzo1MjowNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvbmV0LzogVXNlIHRoZSB0aW1lcGFja2V0IHN0dWZmIGluIHRoZSBwcm92aWRlciwgaW5jbHVkZSBpdCBmcm9tIGdzdG5ldC5oLCBhbmQgYWRkIGl0IHRvIHRoZSBidWlsZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L25ldC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L25ldC9nc3RuZXQuaDoKLQkgICogZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYzoKLQkgICogZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaDogVXNlIHRoZSB0aW1lcGFja2V0IHN0dWZmIGluIHRoZQotCSAgcHJvdmlkZXIsIGluY2x1ZGUgaXQgZnJvbSBnc3RuZXQuaCwgYW5kIGFkZCBpdCB0byB0aGUgYnVpbGQuCi0JICAqIGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oOgotCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuYzogTmV3IGZpbGVzLCBhYnN0cmFjdHMgb3V0IHRoZSBwYWNrZXQKLQkgIHNlbmRpbmcgYW5kIHJlY2VpdmluZy4KLQotMjAwNS0xMS0xNiAxNzozNTowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IEVuYWJsZSB2YWxncmluZCBjaGVjay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIEVuYWJsZSB2YWxncmluZCBjaGVjay4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlX3NyY19hbGxvY19wYXJlbnQpLAotCSAgKGdzdF9mYWtlX3NyY19hbGxvY19idWZmZXIpOgotCSAgRml4IG1lbWxlYWsuCi0KLTIwMDUtMTEtMTYgMTc6MjI6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmM6IENhbGwgcGFyZW50IGZpbmFsaXplIHRvby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOiAoZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2ZpbmFsaXplKToKLQkgIENhbGwgcGFyZW50IGZpbmFsaXplIHRvby4KLQotMjAwNS0xMS0xNiAxNzoxODozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IEVuYWJsZSB2YWxncmluZCBjaGVjayB0aGF0IHNob3VsZCB3b3JrIGZpbmUgbm93LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgRW5hYmxlIHZhbGdyaW5kIGNoZWNrIHRoYXQgc2hvdWxkIHdvcmsgZmluZSBub3cuCi0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9pbml0KToKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCk6Ci0JICBGaXggbWVtbGVha3MgaW4gcGFkIGFsbG9jYXRpb24uCi0KLTIwMDUtMTEtMTYgMTY6NDk6NDkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L25ldC86IE5ldyBwYXJ0IG9mIGNvcmUgdG8gaG9sZCBuZXR3b3JrIGVsZW1lbnRzIGFuZCBvYmplY3RzLiBQdXQgaW4gY29yZSBiZWNhdXNlIGl0IGV4cG9zZXMgQVBJIHRoYXQgYXBwbGljYXRpb25zLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9uZXQvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9uZXQvZ3N0bmV0Lmg6IE5ldyBwYXJ0IG9mIGNvcmUgdG8gaG9sZCBuZXR3b3JrIGVsZW1lbnRzIGFuZAotCSAgb2JqZWN0cy4gUHV0IGluIGNvcmUgYmVjYXVzZSBpdCBleHBvc2VzIEFQSSB0aGF0IGFwcGxpY2F0aW9ucyB3YW50Ci0JICB0byB1c2UuIFRoZSBsaWJyYXJ5IGlzIG5hbWVkIGxpYmdzdG5ldC10ZW1wbmFtZSByaWdodCBub3cgYmVjYXVzZQotCSAgb2YgdGhlIGV4aXN0aW5nIGxpYmdzdG5ldCBpbiBnc3QtcGx1Z2lucy1iYXNlLiBTb2x1dGlvbiBpcwotCSAgcHJvYmFibHkgdG8gcmVuYW1lIHRoZSBvbmUgaW4gcGx1Z2lucy1iYXNlOyB3aWxsIGZpbGUgYSBidWcgZm9yCi0JICB0aGUgZnJlZXplIGJyZWFrLgotCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOgotCSAgKiBnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oOiBOZXcgb2JqZWN0IHRvIGV4cG9ydCBhIEdzdENsb2NrJ3MKLQkgIGdldF90aW1lIGNhbGwgb3ZlciB0aGUgbmV0d29yay4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvTWFrZWZpbGUuYW0gKGxpYl9MVExJQlJBUklFUyk6IEFkZCBnc3RuZXQgdG8gdGhlIGJ1aWxkLgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogY2hlY2svbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jOiBBIG1vc3QgbWluaW1hbCB0ZXN0IHN1aXRlLiBXaWxsCi0JICBnZXQgYWRkaXRpb25zIHNob3J0bHkuCi0KLTIwMDUtMTEtMTYgMTY6MDk6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0cGFkLio6IGFkZCBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSBmdW5jdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIGFkZCBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSBmdW5jdGlvbnMKLQkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCksCi0JICAoZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9pbml0KToKLQkgIGFuZCB1c2UgdGhlbQotCi0yMDA1LTExLTE2IDE2OjA2OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IFJlbW92ZWQgd2FybmluZywgaXQncyBub3QgcmVhbHkgYW4gZXJyb3IgZWl0aGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfcGF1c2VfdGFzayk6Ci0JICBSZW1vdmVkIHdhcm5pbmcsIGl0J3Mgbm90IHJlYWx5IGFuIGVycm9yIGVpdGhlci4KLQotMjAwNS0xMS0xNiAxNDoyNzoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBDaGVjayBpZiB0aGUgY2FwcyBhcmUgTlVMTCwgdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBlbGVtZW50IGlzIHNodXR0aW5nIGRvd24gYW5kIHRoZSBwYWQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWYpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9ldmVudCk6Ci0JICBDaGVjayBpZiB0aGUgY2FwcyBhcmUgTlVMTCwgdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBlbGVtZW50Ci0JICBpcyBzaHV0dGluZyBkb3duIGFuZCB0aGUgcGFkIGNhcHMgYXJlIHNldCB0byBOVUxMLgotCi0yMDA1LTExLTE2IDEyOjU3OjUxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgIGZpeCBwYWQgdGVtcGFsdGUgbGVhayBpbiB0ZWUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHBhZCB0ZW1wYWx0ZSBsZWFrIGluIHRlZQotCi0yMDA1LTExLTE2IDEyOjQwOjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0LzogdXNlIGdzdF9vYmplY3RfcmVmIHdoZW4gc2V0dGluZyB0aGUgcGFkIHRlbXBsYXRlOyB0aGlzIHdpbGwgdHJpZ2dlciB0aGUgcGFkIHRlbXBsYXRlIGxlYWtzIG9uIEdMaWIgMi42IGFuZCB0aGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dsaWItY29tcGF0LmM6IChnX3ZhbHVlX2R1cF9nc3Rfb2JqZWN0KToKLQkgICogZ3N0L2dsaWItY29tcGF0Lmg6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X3Byb3BlcnR5KToKLQkgIHVzZSBnc3Rfb2JqZWN0X3JlZiB3aGVuIHNldHRpbmcgdGhlIHBhZCB0ZW1wbGF0ZTsgdGhpcyB3aWxsCi0JICB0cmlnZ2VyIHRoZSBwYWQgdGVtcGxhdGUgbGVha3Mgb24gR0xpYiAyLjYgYW5kIHRoZSBzbGF2ZXMKLQotMjAwNS0xMS0xNiAxMjoyNToyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IHJlbW92ZSBmdW5jdGlvbnMgY29waWVkIGZyb20gR0xpYiAyLjYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzogKGdzdF9mbGFnc19nZXRfZmlyc3RfdmFsdWUpOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuaDoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JICByZW1vdmUgZnVuY3Rpb25zIGNvcGllZCBmcm9tIEdMaWIgMi42Ci0KLTIwMDUtMTEtMTYgMTE6Mjk6NTcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L01ha2VmaWxlLmFtOiBEb24ndCBsaW5rIGFnYWluc3QgVkFMR1JJTkRfTElCUy4gVGhhdCB3YXMgYWx3YXlzIHRoZSB3cm9uZyB0aGluZyB0byBkbywgYnV0IG9ubHkgYnJlYWtzIHdpdGggbmV3ZXIgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgRG9uJ3QgbGluayBhZ2FpbnN0IFZBTEdSSU5EX0xJQlMuIFRoYXQgd2FzIGFsd2F5cyB0aGUgd3JvbmcgdGhpbmcgdG8KLQkgIGRvLCBidXQgb25seSBicmVha3Mgd2l0aCBuZXdlciB2YWxncmluZCB2ZXJzaW9ucy4gV2UncmUgbm90IGEKLQkgIHZhbGdyaW5kIHRvb2wsIHdlIGhhdmUgbm8gbGluay10aW1lIGRlcGVuZGVuY2llcyBvbiBsaWJjb3JlZ3JpbmQuCi0KLTIwMDUtMTEtMTYgMTE6MDY6MDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IHNvbWUgZGVidWcgY2hhbmdlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kZWZhdWx0X25lZ290aWF0ZSk6Ci0JICBzb21lIGRlYnVnIGNoYW5nZXMKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIHR5cG8gZml4ZXMKLQotMjAwNS0xMS0xNSAyMzo1MzowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RxdWV1ZS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBSZXZlcnQgYWxsIHRoZXNlIHVucmVmcywgdGhleSBkb24ndCBldmVuIHBhc3MgbWFrZSBjaGVjayAhCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJldmVydCBhbGwgdGhlc2UgdW5yZWZzLCB0aGV5IGRvbid0IGV2ZW4gcGFzcyBtYWtlIGNoZWNrICEKLQotMjAwNS0xMS0xNSAxOTo0ODo0MCArMDAwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RxdWV1ZS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBBbmQgZ3N0X29iamVjdF91bnJlZiBoZXJlIHRvbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBbmQgZ3N0X29iamVjdF91bnJlZiBoZXJlIHRvbwotCi0yMDA1LTExLTE1IDE5OjMxOjA1ICswMDAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KLQotCSAgZ3N0LzogRnJlZSBwYWQgdGVtcGxhdGVzLCBmaXhlcyBhIGNvdXBsZSBvZiBsZWFrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfaW5pdCk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9pbml0KToKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCk6Ci0JICBGcmVlIHBhZCB0ZW1wbGF0ZXMsIGZpeGVzIGEgY291cGxlIG9mIGxlYWtzLgotCi0yMDA1LTExLTE1IDE5OjI0OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGFkLmM6IEdTVF9QQURfUEFEX1RFTVBMQVRFKHBhZCkgZ2V0cyB0aGUgcGFkIHRlbXBsYXRlLCB3aGlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZXZpZXdlZCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF9wcm9wZXJ0eSk6Ci0JICBHU1RfUEFEX1BBRF9URU1QTEFURShwYWQpIGdldHMgdGhlIHBhZCB0ZW1wbGF0ZSwgd2hpbGUKLQkgIEdTVF9QQURfVEVNUExBVEUocGFkKSBkb2VzIGEgY2FzdC4gV2Ugd2FudCB0aGUgZm9ybWVyIGhlcmUuCi0JICAoIzMyMTQ1MikKLQotMjAwNS0xMS0xNSAxODozNDoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGV2ZW50LmM6IFNtYWxsIGRvYyB1cGRhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGV2ZW50LmM6Ci0JICBTbWFsbCBkb2MgdXBkYXRlLgotCi0yMDA1LTExLTE1IDE3OjU3OjUxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWUpOiBBZGQgZGVidWdnaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lKTogQWRkIGRlYnVnZ2luZy4KLQkgICogZ3N0L2dzdHBpcGVsaW5lLmMgKGdzdF9waXBlbGluZV9zZXRfbmV3X3N0cmVhbV90aW1lKTogRG9jdW1lbnQKLQkgIHVzaW5nIEdTVF9DTE9DS19USU1FX05PTkUgdG8gZGlzYWJsZSBiYXNlIHRpbWUgbWFuYWdlbWVudC4KLQkgIChkb19waXBlbGluZV9zZWVrLCBnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKTogRG9uJ3QgcmVzZXQgc3RyZWFtCi0JICB0aW1lIGlmIGl0IHdhcyBOT05FIGJlZm9yZS4KLQkgIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKTogT25seSBtdW5nZSB0aGUgYmFzZSB0aW1lIGlmCi0JICBzdHJlYW1fdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FLgotCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYyAodGVzdF9iYXNlX3RpbWUpOiBQdW50IGFyb3VuZCB0aGUKLQkgIHByb2JsZW0gb2YgdGhlIHByb2JlIG5vdCBiZWluZyBjYWxsZWQsIGJlY2F1c2UgdGhhdCdzIG5vdCB0aGUKLQkgIGlzc3VlIEknbSBsb29raW5nIGF0LiBBZGQgYSBjaGVjayB0aGF0IHNldHRpbmcgc3RyZWFtX3RpbWUgdG8gTk9ORQotCSAgZGlzYWJsZXMgYmFzZSB0aW1lIG1hbmFnZW1lbnQuCi0KLTIwMDUtMTEtMTUgMTc6MTg6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IHNlZ21lbnRfc3RvcCA9PSAtMSBhdCBzdGFydHVwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBzZWdtZW50X3N0b3AgPT0gLTEgYXQgc3RhcnR1cC4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKToKLQkgIEluaXQgc2VnbWVudCB2YWx1ZXMgYXQgc3RhcnQuCi0KLTIwMDUtMTEtMTUgMTY6NTI6NDYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmMgKHRlc3RfYmFzZV90aW1lKTogUHVudCBhcm91bmQgdGhlIHByb2JsZW0gb2YgdGhlIHByb2JlIG5vdCBiZWluZyBjYWxsZWQsIGJlY2F1c2UgdGhhdCdzIG5vdCB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jICh0ZXN0X2Jhc2VfdGltZSk6IFB1bnQgYXJvdW5kIHRoZQotCSAgcHJvYmxlbSBvZiB0aGUgcHJvYmUgbm90IGJlaW5nIGNhbGxlZCwgYmVjYXVzZSB0aGF0J3Mgbm90IHRoZQotCSAgaXNzdWUgSSdtIGxvb2tpbmcgYXQuLi4KLQotMjAwNS0xMS0xNSAxNjo0NzowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogMCBzZWdtZW50IHZhbHVlcyBhcmUgMCBpbiBhbnkgZm9ybWF0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgotCSAgMCBzZWdtZW50IHZhbHVlcyBhcmUgMCBpbiBhbnkgZm9ybWF0LgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBQYXJzZSBuZXdzZWdtZW50IGNvcnJlY3RseSBpbiBiYXNldHJhbnNmb3JtCi0JICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk6Ci0JICBTeW5jIHRvIGNsb2NrIHVzaW5nIHVwZGF0ZWQgc2VnbWVudCB2YWx1ZXMuCi0KLTIwMDUtMTEtMTUgMTY6Mjc6MDQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmMgKHRlc3RfYmFzZV90aW1lKTogQWRkIGNoZWNrIHRoYXQgdGhlIGJhc2UgdGltZSBhbmQgc3RyZWFtIHRpbWUgYXJlIHJlc2V0IGNvcnJlY3RseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmMgKHRlc3RfYmFzZV90aW1lKTogQWRkIGNoZWNrIHRoYXQgdGhlCi0JICBiYXNlIHRpbWUgYW5kIHN0cmVhbSB0aW1lIGFyZSByZXNldCBjb3JyZWN0bHkuCi0KLTIwMDUtMTEtMTUgMTU6NDQ6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6IFNvbWUgbW9yZSBUT0RPIGl0ZW1zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBTb21lIG1vcmUgVE9ETyBpdGVtcy4KLQotMjAwNS0xMS0xNSAxMjozNTo0NSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jIChnc3RfZmFrZV9zcmNfY3JlYXRlKTogSXQncyBub3QgYW4gZXJyb3IgaWYgdGhlIHVzZXIgc2VsZWN0ZWQgIm5vIGNsb2NrIiBhcyB0aGUgY2xvY2tpbmcgbWUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYyAoZ3N0X2Zha2Vfc3JjX2NyZWF0ZSk6IEl0J3Mgbm90IGFuCi0JICBlcnJvciBpZiB0aGUgdXNlciBzZWxlY3RlZCAibm8gY2xvY2siIGFzIHRoZSBjbG9ja2luZyBtZXRob2QuCi0KLTIwMDUtMTEtMTUgMTI6Mjk6MDcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmMgKHRlc3RfYmFzZV90aW1lKTogTmV3IHRlc3QgZm9yIGJ1ZmZlciB0aW1lc3RhbXBzIHdpdGggbGl2ZSBjYXB0dXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYyAodGVzdF9iYXNlX3RpbWUpOiBOZXcgdGVzdCBmb3IgYnVmZmVyCi0JICB0aW1lc3RhbXBzIHdpdGggbGl2ZSBjYXB0dXJlLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jIChnc3RfZmFrZV9zcmNfY3JlYXRlKTogSWYgdGhlIGRhdGFyYXRlCi0JICBpcyAwIGJ1dCB3ZSBhcmUgYSBsaXZlIHNvdXJjZSwgdGltZXN0YW1wIHRoZSBidWZmZXJzIHVzaW5nIHRoZQotCSAgZWxlbWVudCdzIGNsb2NrLgotCi0yMDA1LTExLTE0IDE1OjE1OjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIG1vcmUgc2VjdGlvbiBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGVycm9yLmM6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICAqIGdzdC9nc3R4bWwuYzoKLQkgIG1vcmUgc2VjdGlvbiBkb2NzCi0KLTIwMDUtMTEtMTQgMTQ6NDU6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNvbW1vbi9nc3Quc3VwcDogYWRkIHN1cHByZXNzaW9ucyBmcm9tIFdpbSdzIERlYmlhbiBtYWNoaW5lCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29tbW9uL2dzdC5zdXBwOgotCSAgYWRkIHN1cHByZXNzaW9ucyBmcm9tIFdpbSdzIERlYmlhbiBtYWNoaW5lCi0KLTIwMDUtMTEtMTQgMTQ6MzY6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb21tb24vZ3N0LnN1cHA6IGFkZCBzdXBwcmVzc2lvbnMgZnJvbSBBbmR5J3MgQU1ENjQgVWJ1bnR1IG1hY2hpbmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb21tb24vZ3N0LnN1cHA6Ci0JICBhZGQgc3VwcHJlc3Npb25zIGZyb20gQW5keSdzIEFNRDY0IFVidW50dSBtYWNoaW5lCi0KLTIwMDUtMTEtMTQgMTI6NDM6NDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3NldF9hY3RpdmUpOiBDaGFuZ2UgZG9jczsgcGFyZW50J3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3NldF9hY3RpdmUpOiBDaGFuZ2UgZG9jczsgcGFyZW50J3MKLQkgIFNUQVRFX0xPQ0sgbm90IG5lY2Vzc2FyeS4gRml4ZXMgIzMxMTQ4OS4KLQotMjAwNS0xMS0xNCAxMjoxNzo0NiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0ZXJyb3IuYyAoRklMRV9BX0JVRyk6IEJlIHBvbGl0ZSAqYW5kKiBoZWxwZnVsLiBGaXhlcyAjMzA1MjkxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTE0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0ZXJyb3IuYyAoRklMRV9BX0JVRyk6IEJlIHBvbGl0ZSAqYW5kKiBoZWxwZnVsLiBGaXhlcwotCSAgIzMwNTI5MS4KLQotMjAwNS0xMS0xNCAxMTo1ODo0NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0aW5kZXguYyAoZ3N0X2luZGV4X2FkZF9vYmplY3QpOiBOb3RlIGluIHRoZSBkb2NzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RpbmRleC5jIChnc3RfaW5kZXhfYWRkX29iamVjdCk6IE5vdGUgaW4gdGhlIGRvY3MgdGhhdAotCSAgdGhpcyBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQuCi0KLTIwMDUtMTEtMTQgMTA6NDk6MzUgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFJlZiB0aGUgc291cmNlIHBhZCBjYXBzIHdoaWxlIHdlIG5lZWQgdGhlbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xNCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1Zik6Ci0JICBSZWYgdGhlIHNvdXJjZSBwYWQgY2FwcyB3aGlsZSB3ZSBuZWVkIHRoZW0uCi0JICBGaXhlcyAoIzMyMTM4NikKLQotMjAwNS0xMS0xMiAxMDoyMzo1MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL3BpcGVsaW5lcy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzLy5naXRpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpZ25vcmUgbW9yZQotCi0yMDA1LTExLTEyIDEwOjA0OjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgdXBkYXRlIHdpbjMyIGZpbGVzIGZvciBIRUFECi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSB3aW4zMiBmaWxlcyBmb3IgSEVBRAotCi0yMDA1LTExLTEyIDEwOjAzOjA4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHRhc2suYzoKLQkgIGRlYnVnIHRhc2sgam9pbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkZWJ1ZyB0YXNrIGpvaW4KLQotMjAwNS0xMS0xMiAxMDowMDowMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXF1b3Rlcy54bWw6Ci0JICBmb3VuZCBhbm90aGVyIHF1b3RlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZvdW5kIGFub3RoZXIgcXVvdGUKLQotMjAwNS0xMS0xMSAyMDoxMjo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkZWQgc29tZSBkb2NzIGZvciBHc3RDb2xsZWN0RGF0YS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgQWRkZWQgc29tZSBkb2NzIGZvciBHc3RDb2xsZWN0RGF0YS4KLQkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgU29tZSBzbWFsbCBjb2RlIGV4YW1wbGUgZml4LgotCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgRG9jdW1lbnQgc29tZSBtb3JlLgotCi0yMDA1LTExLTExIDE5OjI2OjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBoZWFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gaGVhZAotCi09PT0gcmVsZWFzZSAwLjkuNSA9PT0KLQotMjAwNS0xMS0xMSAxOToyNDozMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgcmVsZWFzaW5nIDAuOS41Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjkuNQotCi0yMDA1LTExLTExIDE4OjI1OjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLmM6IENvcHkgbW9yZSBmbGFncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChfZ3N0X2J1ZmZlcl9jb3B5KToKLQkgIENvcHkgbW9yZSBmbGFncy4KLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2lzX2VxdWFsKToKLQkgIEZpeCBzb21lIGRvY3MuCi0JICBNYWtlIF9pc19lcXVhbCBmYXN0IGluIHRoZSB0cml2aWFsIGNhc2VzLgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgTW9yZSBkb2NzLiBTcGlmaWZ5IC5oIGZpbGUuCi0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgU21hbGwgZG9jIHVwZGF0ZS4KLQotMjAwNS0xMS0xMSAxNzoxNjoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAwNS0xMS0xMSAxNjozNzoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBTbWFsbCBjbGVhbnVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3ByZXBhcmVfb3V0cHV0X2J1ZiksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgotCSAgU21hbGwgY2xlYW51cHMuCi0JICBJZiB3ZSdyZSBwcm9jZXNzaW5nIGEgYnVmZmVyIGFuZCBuZWVkIHRvIGFsbG9jYXRlIGFuIG91dHB1dAotCSAgYnVmZmVyLCB3ZSBjYW5ub3QgYWNjZXB0IGEgZm9ybWF0IGNoYW5nZS4gSWYgd2UgZGlkIGdldCBhCi0JICBmb3JtYXQgY2hhbmdlLCB3ZSBoYXZlIHRvIGFsbG9jIGEgYnVmZmVyIG91cnNlbHZlcyBvZiB0aGUKLQkgIHJpZ2h0IHNpemUuCi0KLTIwMDUtMTEtMTEgMTY6MzQ6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogV2hpbGUgY2hlY2tpbmcgdGhlIGZsYWcgZm9yIHJlZW50cmFuY3kgaW4gdGhlIGdzdGNhcHMgZnVuY3Rpb24gaXMgbmljZSB0byBkZXRlY3QgcmVjdXJzaXZlIGludm9jYXRpb25zLC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X2NhcHMpLCAoZ3N0X3BhZF9wZWVyX2dldF9jYXBzKToKLQkgIFdoaWxlIGNoZWNraW5nIHRoZSBmbGFnIGZvciByZWVudHJhbmN5IGluIHRoZSBnc3RjYXBzIGZ1bmN0aW9uCi0JICBpcyBuaWNlIHRvIGRldGVjdCByZWN1cnNpdmUgaW52b2NhdGlvbnMsIGl0IGFsc28gbWFrZXMgaXQKLQkgIGltcG9zc2libGUgdG8gY2FsbCBnZXRjYXBzIGZyb20gbXVsdGlwbGUgdGhyZWFkcywgd2hpY2ggbXVzdCBiZQotCSAgcG9zc2libGUuIFNvLCBjaGVja2luZyBmb3IgcmVjdXJzaXZlIGNhbGxzIGhhcyB0byBnby4KLQotMjAwNS0xMS0xMSAxNToxOTozNyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBEb24ndCBzeW5jIG9uIGJ1ZmZlcnMgdGhhdCBmYWxsIHBhcnRpYWxseSBvdXRzaWRlIG91ciBjdXJyZW50IHNlZ21lbnQuIFByZXZlbnRzIGFuIGFzc2VydGlvbiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKLQkgIERvbid0IHN5bmMgb24gYnVmZmVycyB0aGF0IGZhbGwgcGFydGlhbGx5IG91dHNpZGUgb3VyIGN1cnJlbnQKLQkgIHNlZ21lbnQuIFByZXZlbnRzIGFuIGFzc2VydGlvbiBmYWlsdXJlL2Fib3J0IHBsYXlpbmcgc29tZSBmaWxlcy4KLQotMjAwNS0xMS0xMCAxODoxNToyNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmMgKHRlc3RfbWVzc2FnZV9zdGF0ZV9jaGFuZ2VkX2NoaWxkcmVuKTogU3R5bGUgZml4Li4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jICh0ZXN0X21lc3NhZ2Vfc3RhdGVfY2hhbmdlZF9jaGlsZHJlbik6IFN0eWxlCi0JICBmaXguLgotCSAgKiBnc3QvZ3N0YnVzLmMgKHBvbGxfZGVzdHJveSwgcG9sbF9mdW5jLCBnc3RfYnVzX3BvbGwpOiBJbXBsZW1lbnQKLQkgIGdzdF9idXNfcG9sbCB3aXRoIHRoZSBzaWduYWwgd2F0Y2guIEVuc3VyZXMgdGhhdCBwb2xsIGFuZCBhIHNpZ25hbAotCSAgd2F0Y2ggc2VlIHRoZSBzYW1lIG1lc3NhZ2VzLgotCSAgKiBjaGVjay9nc3QvZ3N0YnVzLmMgKHRlc3Rfd2F0Y2hfd2l0aF9wb2xsKTogTmV3IHRlc3QsIGNoZWNrcyB0aGF0Ci0JICBhIHBvbGwgYW5kIGEgd2F0Y2ggYXQgdGhlIHNhbWUgdGltZSBnZXQgdGhlIHNhbWUgbWVzc2FnZXMuCi0KLTIwMDUtMTEtMTAgMTc6Mzc6MzkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvOiBEb24ndCBjYWxsIGdzdF9jYXBzX2RvX3NpbXBsaWZ5IC0gaXQgZG9lc24ndCByZXNwZWN0IG9yZGVyIG9mIGNhcHMgYW5kIGl0J3Mgbm90IG5lZWRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfaW50ZXJzZWN0KToKLQkgIERvbid0IGNhbGwgZ3N0X2NhcHNfZG9fc2ltcGxpZnkgLSBpdCBkb2Vzbid0IHJlc3BlY3Qgb3JkZXIgb2YgY2FwcwotCSAgYW5kIGl0J3Mgbm90IG5lZWRlZC4KLQotMjAwNS0xMS0xMCAxNTowNzo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogVXBkYXRlZCB0b2RvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBVcGRhdGVkIHRvZG8uCi0KLTIwMDUtMTEtMTAgMTQ6NDU6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlLzogSW1wbGVtZW50IGNsb2NrIHN5bmMgaW4gYmFzZSBjbGFzcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3dhaXQpLAotCSAgKGdzdF9iYXNlX3NyY19kb19zeW5jKSwgKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpOgotCSAgSW1wbGVtZW50IGNsb2NrIHN5bmMgaW4gYmFzZSBjbGFzcy4KLQotMjAwNS0xMS0xMCAxMjozMjo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHN0cnVjdHVyZS5jOiBGb3J3YXJkLXBvcnQgYSAwLjggcGF0Y2ggdG8gaGFuZGxlIGVzY2FwZWQgc3BhY2VzIGluIHN0cnVjdHVyZSBzdHJpbmcsICAgICAgICAgIHNvIHRoYXQgZ3N0X3BhcnNlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBhdGNoIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9wYXJzZV9maWVsZCksCi0JICAoZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyk6Ci0JICBGb3J3YXJkLXBvcnQgYSAwLjggcGF0Y2ggdG8gaGFuZGxlIGVzY2FwZWQgc3BhY2VzIGluIHN0cnVjdHVyZSBzdHJpbmcsICAgICAgICAgIHNvIHRoYXQgZ3N0X3BhcnNlX2xhdW5jaCgpIGNhbiBkZWFsIHdpdGggc3BhY2VzIGluIGZpbHRlcmVkIGxpbmsKLQkgIGNhcHMgKGZpeGVzICMxNjQ0NzkpCi0JICAqIGNoZWNrL2dzdC9jYXBzbGlzdC5oOgotCSAgKiBjaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBhZGQgdW5pdCB0ZXN0cyBmb3IgdGhpcyBjaGFuZ2UKLQotMjAwNS0xMS0xMCAxMToxNzoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRml4IGRvY3MsIG1vdmUgc29tZSBTVEFURSBtYWNyb3MgdG8gcHJpdmF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgRml4IGRvY3MsIG1vdmUgc29tZSBTVEFURSBtYWNyb3MgdG8gcHJpdmF0ZS4KLQotMjAwNS0xMS0xMCAxMDoxNzowMSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSAgRnVydGhlciBpbXByb3ZlIHF1ZXJ5IGRvY3MuIFN0aWxsIG5vdCBoYXBweSB3aXRoIHRoaXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZ1cnRoZXIgaW1wcm92ZSBxdWVyeSBkb2NzLiBTdGlsbCBub3QgaGFwcHkgd2l0aCB0aGlzLgotCi0yMDA1LTExLTEwIDA5OjE5OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogQWRkZWQgY2hlY2sgZm9yIGJ1ZyAjMzE3MzQxCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfZ2hvc3RfcGFkX3N1aXRlKToKLQkgIEFkZGVkIGNoZWNrIGZvciBidWcgIzMxNzM0MQotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgIFNvbWUgbW9yZSBzcGlmZmlmeWluZy4KLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX2RvX2xpbmspOgotCSAgQ2FsbCBwZWVyIGxpbmtmdW5jdGlvbiBpZiB3ZSBhcmUgYSBzb3VyY2UgcGFkLiBUb3RhbGx5IGZpeGVzCi0JICAjMzE3MzQxCi0JICAqIGdzdC9nc3RwYWQuYzoKLQkgIFVwZGF0ZSBkb2NzLCBzb3VyY2UgcGFkcyBzaG91bGQgY2FsbCB0aGUgcGVlciBsaW5rZnVuY3Rpb24KLQkgIHNvIHRoZXkgY2FuIGF0b21pY2FsbHkgcGVyZm9ybSB0aGUgcGFkIGxpbmsuCi0KLTIwMDUtMTEtMDkgMTk6MzI6MzIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JICBJbXByb3ZlL2ZpeCBkb2N1bWVudGF0aW9uIGZvciBHc3RRdWVyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgSW1wcm92ZS9maXggZG9jdW1lbnRhdGlvbiBmb3IgR3N0UXVlcnkuCi0JICBUaGlzIHN0aWxsIG5lZWRzIHNvbWUgbW9yZSB3b3JrIHRvIGV4cGxhaW4gd2hhdCB0aGUgcXVlcmllcyBhY3R1YWxseSBtZWFuLgotCi0yMDA1LTExLTA5IDE4OjQxOjUzICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSAgU2xpZ2h0bHkgcG9saXNoIGRvY3MgZm9yIEdzdEFkYXB0ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFNsaWdodGx5IHBvbGlzaCBkb2NzIGZvciBHc3RBZGFwdGVyLgotCi0yMDA1LTExLTA5IDE4OjEwOjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLio6IFViZXItc3BpZmZ5LXNwaWZmaWZ5IHNvbWUgbW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgIFViZXItc3BpZmZ5LXNwaWZmaWZ5IHNvbWUgbW9yZS4KLQotMjAwNS0xMS0wOSAxNzo1NToxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogVXNlIEdTVF9ERUJVR19GVU5DUFRSKCkgbW9yZSBleHRlbnNpdmVseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RwYWRzX2FkZF9wYWQpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfaW5pdCk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9pbml0KToKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX3NldF9pbnRlcm5hbCksCi0JICAoZ3N0X2dob3N0X3BhZF9pbml0KSwgKGdzdF9naG9zdF9wYWRfbmV3X25vdGFyZ2V0KToKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pbml0KToKLQkgIFVzZSBHU1RfREVCVUdfRlVOQ1BUUigpIG1vcmUgZXh0ZW5zaXZlbHkuCi0KLTIwMDUtMTEtMDkgMTc6MzI6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RvYmplY3QuKjogRG9jdW1lbnRhdGlvbiBmaXhlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICBEb2N1bWVudGF0aW9uIGZpeGVzLgotCi0yMDA1LTExLTA5IDE3OjA2OjIwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6IEZpeCBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkgIEZpeCBkb2NzLgotCi0yMDA1LTExLTA5IDE2OjQ0OjQwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JICAqIGdzdC9nc3R0eXBlZmluZC5jOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuaDoKLQotMjAwNS0xMS0wOSAxNjozMjo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGl0ZXJhdG9yLmM6IEZpeCByZXZpc2lvbiBkYXRhLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgRml4IHJldmlzaW9uIGRhdGEuCi0JICAqIGdzdC9nc3R0YXNrLmM6Ci0JICAqIGdzdC9nc3R0YXNrLmg6Ci0JICBGaXggZG9jcy4KLQotMjAwNS0xMS0wOSAxNjoxNjo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogRml4IGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3R1cmkuaDoKLQkgIEZpeCBkb2NzLgotCi0yMDA1LTExLTA5IDE2OjAwOjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBNb3ZlZCB0aGUgbWVzc2FnZSBhc3luYyBkZWxpdmVyeSBwcml2YXRlIGxvY2sgYW5kIGNvbmQgdG8gdGhlIHByaXZhdGUgc2VjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgTW92ZWQgdGhlIG1lc3NhZ2UgYXN5bmMgZGVsaXZlcnkgcHJpdmF0ZSBsb2NrIGFuZCBjb25kCi0JICB0byB0aGUgcHJpdmF0ZSBzZWN0aW9uLgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgRml4ZWQgZG9jcy4KLQotMjAwNS0xMS0wOSAxNTozNDo0NiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgRG9jdW1lbnQgR3N0VVJJSGFuZGxlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3R1cmkuYzoKLQkgICogZ3N0L2dzdHVyaS5oOgotCSAgRG9jdW1lbnQgR3N0VVJJSGFuZGxlcgotCi0yMDA1LTExLTA5IDE1OjMxOjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0aXRlcmF0b3IuKjogRml4IGl0ZXJhdG9yIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6IChnc3RfaXRlcmF0b3JfZm9sZCksIChnc3RfaXRlcmF0b3JfZm9yZWFjaCksCi0JICAoZ3N0X2l0ZXJhdG9yX2ZpbmRfY3VzdG9tKToKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmg6Ci0JICBGaXggaXRlcmF0b3IgZG9jcy4KLQotMjAwNS0xMS0wOSAxNToxMDozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5oOiBEb2N1bWVudCBhbm90aGVyIGZpZWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uaDoKLQkgIERvY3VtZW50IGFub3RoZXIgZmllbGQuCi0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSAgRG9jdW1lbnQuCi0KLTIwMDUtMTEtMDkgMTM6MTQ6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uaDogRG9jdW1lbnRlZCBzdHJ1Y3RzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uaDoKLQkgIERvY3VtZW50ZWQgc3RydWN0cy4KLQotMjAwNS0xMS0wOSAxMjozNjoxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkZWQgc29tZSBuZXcgbWFjcm9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBBZGRlZCBzb21lIG5ldyBtYWNyb3MuCi0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgRG9jcyB1cGRhdGVzLgotCi0yMDA1LTExLTA5IDEyOjAxOjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBTb21lIG1vcmUgaXRlbXMgZm9yIHRoZSBUT0RPCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgIFNvbWUgbW9yZSBpdGVtcyBmb3IgdGhlIFRPRE8KLQkgICogZ3N0L2dzdGNhcHMuYzoKLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgIERvY3VtZW50IEdzdENhcHMuCi0KLTIwMDUtMTEtMDkgMTA6MDY6MzAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQWRkIHRoZSBiZWdpbm5pbmcgb2YgZG9jcyBoZXJlIC0tIGhhdmUgdG8gd29yayBvbiBzb21ldGhpbmcgZWxzZSBub3cgdGhvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMDkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEFkZCB0aGUgYmVnaW5uaW5nIG9mIGRvY3MgaGVyZSAtLSBoYXZlCi0JICB0byB3b3JrIG9uIHNvbWV0aGluZyBlbHNlIG5vdyB0aG8uLi4KLQotMjAwNS0xMS0wOSAwOTo0ODoxNiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSAgZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmMgKGdzdF9maWxlX3Npbmtfc3RhcnQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMDkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jIChnc3RfZmlsZV9zaW5rX3N0YXJ0KQotCSAgKGdzdF9maWxlX3Npbmtfc3RvcCk6IE5ldyBmdW5jdGlvbnMsIHJlcGxhY2UgdGhlIHN0YXRlIGNoYW5nZQotCSAgaGFuZGxlci4KLQkgIChnc3RfZmlsZV9zaW5rX2NsYXNzX2luaXQpOiBIb29rIHVwIHRoZSBzdGFydCBhbmQgc3RvcCBmdW5jdGlvbnMuCi0JICAoZ3N0X2ZpbGVfc2lua19iYXNlX2luaXQpOiBEb24ndCBzZXQgdGhlIHN0YXRlIGNoYW5nZSBoYW5kbGVyIGFueQotCSAgbW9yZS4gSXQgd2FzIGEgYml0IHVnbHkgdG9vLCBiZWluZyBzZXQgZnJvbSBoZXJlLi4uCi0JICAoZ3N0X2ZpbGVfc2lua19nZXRfcHJvcGVydHksIGdzdF9maWxlX3Npbmtfc2V0X3Byb3BlcnR5KToKLQkgIENsZWFudXBzLi4uCi0JICAoZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24pOiBNb3JlIHJvYnVzdCBjaGVjayB0aGF0IGRvZXNuJ3QgY2FsbAotCSAgR1NUX1NUQVRFLiBVZ2dnZ2dnLgotCi0yMDA1LTExLTA5IDA5OjQ3OjEyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSAgZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmMgKGdzdF9maWxlX3Npbmtfc3RhcnQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMDkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jIChnc3RfZmlsZV9zaW5rX3N0YXJ0KQotCSAgKGdzdF9maWxlX3Npbmtfc3RvcCk6IE5ldyBmdW5jdGlvbnMsIHJlcGxhY2UgdGhlIHN0YXRlIGNoYW5nZQotCSAgaGFuZGxlci4KLQkgIChnc3RfZmlsZV9zaW5rX2NsYXNzX2luaXQpOiBIb29rIHVwIHRoZSBzdGFydCBhbmQgc3RvcCBmdW5jdGlvbnMuCi0JICAoZ3N0X2ZpbGVfc2lua19iYXNlX2luaXQpOiBEb24ndCBzZXQgdGhlIHN0YXRlIGNoYW5nZSBoYW5kbGVyIGFueQotCSAgbW9yZS4gSXQgd2FzIGEgYml0IHVnbHkgdG9vLCBiZWluZyBzZXQgZnJvbSBoZXJlLi4uCi0JICAoZ3N0X2ZpbGVfc2lua19nZXRfcHJvcGVydHksIGdzdF9maWxlX3Npbmtfc2V0X3Byb3BlcnR5KToKLQkgIENsZWFudXBzLi4uCi0JICAoZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24pOiBNb3JlIHJvYnVzdCBjaGVjayB0aGF0IGRvZXNuJ3QgY2FsbAotCSAgR1NUX1NUQVRFLiBVZ2dnZ2dnLgotCi0yMDA1LTExLTA4IDEyOjMzOjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEhvbGQgU1RSRUFNX0xPQ0sgd2hpbGUgcHVzaGluZyBuZXdzZWdtZW50IG9yIHRhZyBldmVudHMgYXMgd2VsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpOgotCSAgSG9sZCBTVFJFQU1fTE9DSyB3aGlsZSBwdXNoaW5nIG5ld3NlZ21lbnQgb3IgdGFnIGV2ZW50cyBhcyB3ZWxsLgotCi0yMDA1LTExLTA4IDExOjUyOjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgotCSAgcmV2ZXJ0IHBhcnQgb2YgdGhlIHBhdGNoIHNvIHRoYXQgcGF0aHMgYXJlIGNvcnJlY3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmV2ZXJ0IHBhcnQgb2YgdGhlIHBhdGNoIHNvIHRoYXQgcGF0aHMgYXJlIGNvcnJlY3QKLQotMjAwNS0xMS0wOCAxMToxMzowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogQXZvaWQgZXhjZXNzaXZlIHR5cGVjaGVja2luZyBpbiBtYWNyb3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9lbXB0eSksCi0JICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYWluKSwgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIEF2b2lkIGV4Y2Vzc2l2ZSB0eXBlY2hlY2tpbmcgaW4gbWFjcm9zLgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOiAoZ3N0X21pbmlfb2JqZWN0X2dldF90eXBlKSwKLQkgIChnc3RfbWluaV9vYmplY3RfaW5pdCksIChnc3RfbWluaV9vYmplY3RfbmV3KSwKLQkgIChnc3RfbWluaV9vYmplY3RfZnJlZSk6Ci0JICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfY2xhc3NfaW5pdCksIChnc3Rfb2JqZWN0X2luaXQpLAotCSAgKGdzdF9vYmplY3RfZmluYWxpemUpOgotCSAgUmVtb3ZlIGNydWZ0IGNvZGUsIG9wdGltaXplIGFsbG9jX3RyYWNlLgotCi0yMDA1LTExLTA3IDE4OjE2OjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBmaXggdXAgUFMxIGZvciBzeXN0ZW1zIHRoYXQgdHJ5IHRvIHJlc2V0IGl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOgotCSAgZml4IHVwIFBTMSBmb3Igc3lzdGVtcyB0aGF0IHRyeSB0byByZXNldCBpdAotCi0yMDA1LTExLTA3IDEwOjMzOjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFNldCB0aGUgc2VnbWVudF9lbmQgdG8gLTEgaW5pdGlhbGx5LiBGaXhlZCB0eXBlZmluZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSk6Ci0JICBTZXQgdGhlIHNlZ21lbnRfZW5kIHRvIC0xIGluaXRpYWxseS4gRml4ZWQgdHlwZWZpbmQuCi0KLTIwMDUtMTEtMDcgMTA6MTM6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzogRGVidWcgY2F0ZWdvcnkgc2hvdWxkIGJlICdhZGFwdGVyJywgbm90ICdHc3RBZGFwdGVyJy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JICBEZWJ1ZyBjYXRlZ29yeSBzaG91bGQgYmUgJ2FkYXB0ZXInLCBub3QgJ0dzdEFkYXB0ZXInLgotCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RwYWRzX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2NvbGxlY3RwYWRzX2NsYXNzX2luaXQpLCAoZ3N0X2NvbGxlY3RwYWRzX2luaXQpLAotCSAgKGdzdF9jb2xsZWN0cGFkc19wZWVrKSwgKGdzdF9jb2xsZWN0cGFkc19wb3ApLAotCSAgKGdzdF9jb2xsZWN0cGFkc19ldmVudCksIChnc3RfY29sbGVjdHBhZHNfY2hhaW4pOgotCSAgQWRkIGRlYnVnIGNhdGVnb3J5IGFuZCBzb21lIGRlYnVnZ2luZyBvdXRwdXQuIFVzZSBib2lsZXJwbGF0ZQotCSAgbWFjcm9zLiBSZW1vdmUgc29tZSBleHRyYW5lb3VzIHdvcmRzIGZyb20gZG9jcy4KLQotMjAwNS0xMS0wNSAxNToxNDozMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvYmFzZS9nc3RwdXNoc3JjLmM6IFNob3J0ZW4gYnkgMzAlIHZpYSB1c2Ugb2YgYm9pbGVycGxhdGUgbWFjcm8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdHB1c2hzcmMuYzogU2hvcnRlbiBieSAzMCUgdmlhIHVzZSBvZiBib2lsZXJwbGF0ZQotCSAgbWFjcm8uCi0KLTIwMDUtMTEtMDQgMjA6MTI6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbW9yZSBkb2NzIGFkZGVkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIG1vcmUgZG9jcyBhZGRlZAotCi0yMDA1LTExLTA0IDE1OjMzOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IFNtYWxsIHVwZGF0ZSB0byBzdG9wIGF0IHRoZSBjb25maWd1cmVkIHNlZ21lbnRfZW5kIHBvc2l0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpOgotCSAgU21hbGwgdXBkYXRlIHRvIHN0b3AgYXQgdGhlIGNvbmZpZ3VyZWQgc2VnbWVudF9lbmQKLQkgIHBvc2l0aW9uLgotCi0yMDA1LTExLTA0IDE1OjAyOjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeS4qOiBhZGRlZCBtaXNzaW5nIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JICBhZGRlZCBtaXNzaW5nIGRvY3MKLQotMjAwNS0xMS0wNCAxNDozNToxMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBDaGVjayBpZiB3ZSBhcmUgZG9pbmcgYSBzZWdtZW50IHNlZWsgYW5kIGhhdmUgYXJyaXZlZCBhdCB0aGUgZW5kIG9mIHRoYXQgc2VnbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKToKLQkgIENoZWNrIGlmIHdlIGFyZSBkb2luZyBhIHNlZ21lbnQgc2VlayBhbmQgaGF2ZSBhcnJpdmVkIGF0IHRoZQotCSAgZW5kIG9mIHRoYXQgc2VnbWVudC4KLQotMjAwNS0xMS0wNCAxMjowODoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1cy5jOiBEb24ndCBsZWFrIGEgbXV0ZXggdW5sb2NrIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KSwgKGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcik6Ci0JICBEb24ndCBsZWFrIGEgbXV0ZXggdW5sb2NrIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0JICAqIGdzdC9nc3RidXMuaDoKLQkgIERvYyBmaXhlcy4KLQotMjAwNS0xMS0wNCAxMTo0MzoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1cy5jOiBHZXQgdGhlIGNvbnRleHQgdG8gd2FrZSB1cCBvbmx5IG9uY2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19jbGFzc19pbml0KSwgKGdzdF9idXNfaW5pdCksCi0JICAoZ3N0X2J1c19wb3N0KToKLQkgIEdldCB0aGUgY29udGV4dCB0byB3YWtlIHVwIG9ubHkgb25jZS4KLQotMjAwNS0xMS0wMyAyMDoxNzoyNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjaGVjay9zdGF0ZXMvc2lua3MuYzogVW5jb21tZW50IGZpeGVkIGNoZWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVW5jb21tZW50IGZpeGVkIGNoZWNrLgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgVXBkYXRlZCBUT0RPLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAotCSAgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIElmIHdlIGFyZSBnb2luZyB0byBQTEFZSU5HLCBwb3N0IHRoZSByaWdodCBwZW5kaW5nIHN0YXRlCi0JICB3aGVuIHdlIHBvc3QgdGhlIGludGVybWVkaWF0ZSBwYXVzZWQgbWVzc2FnZS4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlKSwKLQkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYyksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgcG9zdCBzdGF0ZSBjaGFuZ2VzIHRoYXQgd2VyZSBiZXR3ZWVuIHRoZSBzYW1lIHN0YXRlCi0JICBhbmQgd2VyZSBub3QgQVNZTkMuCi0KLTIwMDUtMTEtMDMgMjA6MTQ6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiBVbmNvbW1lbnQgZml4ZWQgY2hlY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svc3RhdGVzL3NpbmtzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBVbmNvbW1lbnQgZml4ZWQgY2hlY2suCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBVcGRhdGVkIFRPRE8uCi0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCi0JICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgotCSAgSWYgd2UgYXJlIGdvaW5nIHRvIFBMQVlJTkcsIHBvc3QgdGhlIHJpZ2h0IHBlbmRpbmcgc3RhdGUKLQkgIHdoZW4gd2UgcG9zdCB0aGUgaW50ZXJtZWRpYXRlIHBhdXNlZCBtZXNzYWdlLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZV9mdW5jKSwgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JICBEb24ndCBwb3N0IHN0YXRlIGNoYW5nZXMgdGhhdCB3ZXJlIGJldHdlZW4gdGhlIHNhbWUgc3RhdGUKLQkgIGFuZCB3ZXJlIG5vdCBBU1lOQy4KLQotMjAwNS0xMS0wMyAxOTozODo0OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2MgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgZG9jIGZpeGVzCi0KLTIwMDUtMTEtMDMgMTc6NTM6MjcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY2hlY2svc3RhdGVzL3NpbmtzLmMgKHRlc3RfbGl2ZXNyY19zaW5rKTogQWRkIGNoZWNrcyB0aGF0IHRoZSBzdGF0ZS1jaGFuZ2VkIG1lc3NhZ2VzIGFjdHVhbGx5IGhhdmUgdGhlIHJpZ2h0IG9yZGVyIGFuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMDMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL3N0YXRlcy9zaW5rcy5jICh0ZXN0X2xpdmVzcmNfc2luayk6IEFkZCBjaGVja3MgdGhhdCB0aGUKLQkgIHN0YXRlLWNoYW5nZWQgbWVzc2FnZXMgYWN0dWFsbHkgaGF2ZSB0aGUgcmlnaHQgb3JkZXIgYW5kIHRoZSByaWdodAotCSAgdmFsdWVzLgotCi0yMDA1LTExLTAzIDE3OjEyOjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9zdGF0ZXMvc2lua3MuYzogQWRkZWQgc29tZSBtb3JlIGNoZWNrcy4gU3BlY2lmaWNhbGx5IHRoZSBjYXNlIHdoZXJlIE5PX1BSRVJPTEwgZWxlbWVudHMgYXJlIGluIHRoZSBwaXBlbGluZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9vYmplY3Rfc3VpdGUpOgotCSAgQWRkZWQgc29tZSBtb3JlIGNoZWNrcy4gU3BlY2lmaWNhbGx5IHRoZSBjYXNlIHdoZXJlIE5PX1BSRVJPTEwKLQkgIGVsZW1lbnRzIGFyZSBpbiB0aGUgcGlwZWxpbmUuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCi0JICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pOgotCSAgUG9zdCBSRUFEWS0+UEFVU0VEIHN0YXRlIGNoYW5nZSBtZXNzYWdlcyB0b28uCi0JICBGaXggYnVnIHdoZXJlIFZPSUQgd2FzIHBvc3RlZCBhcyBwZW5kaW5nIHN0YXRlLi4uCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcmVjYWxjX3N0YXRlKToKLQkgIHVzZSBfZWxlbWVudF9jb250aW51ZV9zdGF0ZSgpIHRvIGNvbnRpbnVlIHRoZSBzdGF0ZSBjaGFuZ2UuCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwgKGdzdF9lbGVtZW50X3NldF9zdGF0ZV9mdW5jKSwKLQkgIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlX2Z1bmMpOgotCSAgTG90cyBvZiBzdGF0ZSBjaGFuZ2UgY2xlYW51cHMsIGFzc2lnbiB0aGUgU1RBVEVfUkVUVVJOIGluCi0JICBhIG5ldyBjb250aW51ZV9zdGF0ZSgpIGZ1bmN0aW9uIHRoYXQgYWxzbyBwcm9wYWdhdGVzIHRoZQotCSAgbGFzdCByZXR1cm4gdmFsdWUgZnJvbSBhIHN0YXRlIGNoYW5nZSB0byB0aGUgYXBwLgotCSAgVXBkYXRlIHNvbWUgZGVidWcgc3RhdGVtZW50cyB3aXRoIHByb3BlciBjYXRlZ29yeS4KLQotMjAwNS0xMS0wMyAxNDoyMjo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy86IFNtYWxsIGRvY3MgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0cGlwZWxpbmUudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dDoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOgotCSAgU21hbGwgZG9jcyB1cGRhdGVzLgotCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICBQZW9wbGUgdGhpbmsgISEgaXMgdWdseSwgdGhpcyBsb29rcyBiZXR0ZXIuCi0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2Jsb2NrZWRfYXN5bmMpOgotCSAgUmVtb3ZlICEhIHNpbmNlIGl0J3MgZml4ZWQgZWxzZXdoZXJlIG5vdy4KLQotMjAwNS0xMS0wMyAxMzo1Mjo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogQWRkICEhIHRvIF9GTEFHX0lTX1NFVCBtYWNyb3MgdG8gbWFrZSB0aGUgcmVzdWx0IGJvb2xlYW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgQWRkICEhIHRvIF9GTEFHX0lTX1NFVCBtYWNyb3MgdG8gbWFrZSB0aGUgcmVzdWx0IGJvb2xlYW4uCi0KLTIwMDUtMTEtMDMgMTI6NDg6MzAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogY29tcGFyaW5nIGEgZmxhZyBhbmQgYSBnYm9vbGVhbiByYXJlbHkgcmV0dXJucyBjb2hlcmVudCByZXN1bHRzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYmxvY2tlZF9hc3luYyk6Ci0JICBjb21wYXJpbmcgYSBmbGFnIGFuZCBhIGdib29sZWFuIHJhcmVseSByZXR1cm5zIGNvaGVyZW50IHJlc3VsdHMuLi4KLQkgIEFkZGVkIHR3byBjaGFyYWN0ZXJzICghISkgdG8gbWFrZSB0aGF0IHdvcmsgY29ycmVjdGx5LgotCi0yMDA1LTExLTAzIDEyOjE2OjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YnVzLmM6IEZpeCBzb21lIHR5cG9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfY2xhc3NfaW5pdCk6Ci0JICBGaXggc29tZSB0eXBvcy4KLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbG9vcCk6Ci0JICBEb24ndCBhc3N1bWUgYSBtaW5pb2JqZWN0IHRoYXQgaXNuJ3QgYSBidWZmZXIgaXMgYW4KLQkgIGV2ZW50IChpdCBjb3VsZCBiZSB0aGF0IHRoZXJlIGlzIGEgcmVmY291bnRpbmcKLQkgIHByb2JsZW0gc29tZXdoZXJlIGFuZCB0aGUgcG9pbnRlciBpcyBzdGFsZSBhbmQKLQkgIHJlZmVycyB0byBhbiBhbHJlYWR5IGRlc3Ryb3llZCBtaW5pb2JqZWN0KS4KLQotMjAwNS0xMS0wMyAxMDo1NjoyMyArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9nc3RwYWQuYzogRml4IHNvbWUgdHlwb3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMDMgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hbGxvY19idWZmZXIpOiBGaXggc29tZSB0eXBvcy4KLQotMjAwNS0xMS0wMyAwOToxODo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sOiBVcGRhdGUgc2VlayBleGFtcGxlIGFuZCBleHBsYW5hdGlvbnMgdG8gY3VycmVudCAwLjkgQVBJLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbDoKLQkgIFVwZGF0ZSBzZWVrIGV4YW1wbGUgYW5kIGV4cGxhbmF0aW9ucyB0byBjdXJyZW50IDAuOSBBUEkuCi0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGUpOgotCSAgUmVtb3ZlIEZJWE1FIGNvbW1lbnQgbm93IHRoYXQgdGhlIGZvdW5kIGNhcHMKLQkgIGFyZSB1bnJlZmZlZC4KLQotMjAwNS0xMS0wMyAwMDozOTo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOgotCSAgQWRkIGFub3RoZXIgR1NUX1NUUl9OVUxMIGluc3RhbmNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEFkZCBhbm90aGVyIEdTVF9TVFJfTlVMTCBpbnN0YW5jZQotCi0yMDA1LTExLTAyIDE5OjA0OjIwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IEZvbGxvdy11cCB0byBXaW0ncyBwYXRjaCwgc29sdmVzIGRlYWRsb2NrIGZvciBibG9ja2VkIGFuZCBmbHVzaGluZyBwYWRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoaGFuZGxlX3BhZF9ibG9jayk6Ci0JICBGb2xsb3ctdXAgdG8gV2ltJ3MgcGF0Y2gsIHNvbHZlcyBkZWFkbG9jayBmb3IgYmxvY2tlZCBhbmQgZmx1c2hpbmcgcGFkcwotCi0yMDA1LTExLTAyIDE4OjQ0OjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IEZpeCB0eXBvIGluIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOgotCSAgRml4IHR5cG8gaW4gZG9jcy4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NvbW1pdF9zdGF0ZSk6Ci0JICBSZW1vdmUgdW51c2VkIHZhbHVlLgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkgIE1lbnRpb24gdGhhdCB0aGUgcmV0dXJuZWQgZWxlbWVudCBpcyByZWZmZWQgaW4gdGhlIGRvY3MuCi0KLTIwMDUtMTEtMDIgMTg6MzM6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogVW5sb2NrIGJsb2NrZWQgcGFkcyB3aGVuIHRoZXkgYXJlIGZsdXNoZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hbGxvY19idWZmZXIpLCAoaGFuZGxlX3BhZF9ibG9jayksCi0JICAoZ3N0X3BhZF9wdXNoKSwgKGdzdF9wYWRfcHVzaF9ldmVudCk6Ci0JICBVbmxvY2sgYmxvY2tlZCBwYWRzIHdoZW4gdGhleSBhcmUgZmx1c2hlZC4KLQotMjAwNS0xMS0wMiAxNTozNDoyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvYyB1cGRhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9SRUFETUU6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RiaW4uYzoKLQkgIGRvYyB1cGRhdGVzCi0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6Ci0JICBmaXggZm9yIGEgbmFzdHkgbGl0dGxlIG1pc3NlZCBzaXR1YXRpb24gd2hlcmUgYW4gaW5zdGFsbGVkIHBsdWctaW4KLQkgIHdoaWNoIHdhcyBpbiB0aGUgY2FjaGUgZGlkIG5vdCBnZXQgb3ZlcnJpZGRlbiBieSBhbiB1bmluc3RhbGxlZCBvbmUKLQkgIHdoaWNoIHdhcyBlYXJsaWVyIGluIHRoZSBwbHVnaW4gcGF0aCBiZWNhdXNlIHRoZSBuZXdseSBjcmVhdGVkIHBsdWdpbgotCSAgZm9yIHRoZSB1bmluc3RhbGxlZCBvbmUgKG5vdCBpbiB0aGUgcmVnaXN0cnkpIGRpZG4ndCBnZXQgaXRzCi0JICAtPnJlZ2lzdGVyZWQgc2V0IHRvIFRSVUUKLQotMjAwNS0xMS0wMiAxNTowODowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogR3VhcmQgcHVibGljIEFQSSB3aXRoIGFzc2VydGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0cGFkc19zZXRfZnVuY3Rpb24pLAotCSAgKGdzdF9jb2xsZWN0cGFkc19hZGRfcGFkKSwgKGdzdF9jb2xsZWN0cGFkc19yZW1vdmVfcGFkKSwKLQkgIChnc3RfY29sbGVjdHBhZHNfaXNfYWN0aXZlKSwgKGdzdF9jb2xsZWN0cGFkc19jb2xsZWN0KSwKLQkgIChnc3RfY29sbGVjdHBhZHNfY29sbGVjdF9yYW5nZSksIChnc3RfY29sbGVjdHBhZHNfc3RhcnQpLAotCSAgKGdzdF9jb2xsZWN0cGFkc19zdG9wKSwgKGdzdF9jb2xsZWN0cGFkc19wZWVrKSwKLQkgIChnc3RfY29sbGVjdHBhZHNfcG9wKSwgKGdzdF9jb2xsZWN0cGFkc19hdmFpbGFibGUpLAotCSAgKGdzdF9jb2xsZWN0cGFkc19yZWFkKSwgKGdzdF9jb2xsZWN0cGFkc19mbHVzaCk6Ci0JICBHdWFyZCBwdWJsaWMgQVBJIHdpdGggYXNzZXJ0aW9ucy4KLQkgICogZ3N0L2dzdHBhZC5jOgotCSAgRml4IGRvY3MgZm9yIGdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb24oKS4KLQotMjAwNS0xMS0wMiAxNDoyODowMiArMDAwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYyAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKTogVW5yZWYgZm91bmRfY2FwcyBhZnRlciB3ZSB1c2VkIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYyAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKToKLQkgIFVucmVmIGZvdW5kX2NhcHMgYWZ0ZXIgd2UgdXNlZCBpdC4KLQotMjAwNS0xMS0wMiAxMjoyMDo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogRG9uJ3QgdHJ5IHRvIHJlZiBOVUxMLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdHBhZHNfcGVlayk6Ci0JICBEb24ndCB0cnkgdG8gcmVmIE5VTEwuCi0KLTIwMDUtMTEtMDIgMDk6MzE6MDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGFkZCBtb3JlIHN5bWJvbHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG1vcmUgc3ltYm9scwotCi0yMDA1LTExLTAyIDA5OjI3OjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBhZGQgbW9yZSBzeW1ib2xzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBtb3JlIHN5bWJvbHMKLQotMjAwNS0xMS0wMiAwOToyNDo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHVwZGF0ZSBnZW5lcmF0ZWQgY29uZmlnCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSBnZW5lcmF0ZWQgY29uZmlnCi0KLTIwMDUtMTEtMDIgMDk6MjQ6MDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBwcm92aWRlIGEgR1NUX0ZVTkNUSU9OIHRoYXQganVzdCBnaXZlcyBhIHN0cmluZyBmb3Igbm93Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHByb3ZpZGUgYSBHU1RfRlVOQ1RJT04gdGhhdCBqdXN0IGdpdmVzIGEgc3RyaW5nIGZvciBub3cKLQotMjAwNS0xMS0wMiAwODo1NjowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICB1cGRhdGUgd2luMzIgY29waWVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSB3aW4zMiBjb3BpZXMKLQotMjAwNS0xMS0wMSAxOToxNjo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RiaW4uYzoKLQkgIG1vcmUgZG9jIHVwZGF0ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW9yZSBkb2MgdXBkYXRlcwotCi0yMDA1LTExLTAxIDE3OjQ1OjQ2ICswMDAwICBMdWNhIE9nbmliZW5lIDxsdW9nbmlAdGluLml0PgotCi0JICBnc3QvZ3N0LmM6IGZpeCBkb2NzLiBwb3B0IGlzIGRlYXRoLCBsb25nIGxpdmUgR09wdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICBmaXggZG9jcy4gcG9wdCBpcyBkZWF0aCwgbG9uZyBsaXZlIEdPcHRpb24uCi0KLTIwMDUtMTAtMzEgMTE6NDQ6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuaDogU21hbGwgZG9jIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBTbWFsbCBkb2MgZml4LgotCi0yMDA1LTEwLTMxIDA5OjUyOjEzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIEJvbyEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0zMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogQm9vIQotCSAgKiBnc3QvZ3N0cXVldWUuYyAoZ3N0X3F1ZXVlX2NoYWluKTogRml4IGRvd25zdHJlYW0gbGVha3kgbW9kZS4KLQkgICogZ3N0L2dzdG9iamVjdC5jIChnc3Rfb2JqZWN0X2Rpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZCk6IE5vCi0JICBuZWVkIHRvIHNlcmlhbGl6ZSBwcm9wZXJ0eSBub3RpZmljYXRpb25zIG9uIEdMaWIgMi44LiBHTGliIDIuNiBoYXMKLQkgIHRoZSBwb3NzaWJpbGl0eSBvZiBkZWFkbG9ja3MgaGVyZSBpZiBjb2RlIGNhbGxpbmcgbm90aWZ5KCkgb3IKLQkgIHNldCgpIGhhcyBhIGxvY2sgdGhhdCBjYW4gYmUgdGFrZW4gaW4gYW5vdGhlciBub3RpZnkgaGFuZGxlciAoQUJCQQotCSAgd2l0aCBjbGFzcyBsb2NrIGFuZCBlLmcuIHB5dGhvbiBHSUwgc3RhdGUgbG9jaykuCi0KLTIwMDUtMTAtMjggMTg6MTg6MjMgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0YnVzLmM6IERvYyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTI4ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9nc3RidXMuYzogRG9jIHVwZGF0ZXMuCi0KLTIwMDUtMTAtMjggMTg6MTQ6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvYyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICAqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6Ci0JICBEb2MgdXBkYXRlcy4KLQotMjAwNS0xMC0yOCAxODoxMDo0MSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZG9jcy9nc3QvOiB0aGUgR3N0VVJJVHlwZSBkb2N1bWVudGF0aW9uIHBhZ2UgaXMgcHJpdmF0ZSwgaXQgb25seSBkZWZpbmVzIEdzdFVSSVR5cGUgd2hpY2ggc2hvdWxkIGJlIGRlZmluZWQgaW4gdGhlIEdzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIHRoZSBHc3RVUklUeXBlIGRvY3VtZW50YXRpb24gcGFnZSBpcyBwcml2YXRlLCBpdCBvbmx5IGRlZmluZXMgR3N0VVJJVHlwZQotCSAgd2hpY2ggc2hvdWxkIGJlIGRlZmluZWQgaW4gdGhlIEdzdFVSSUhhbmRsZXIgcGFnZQotCi0yMDA1LTEwLTI4IDE3OjM1OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJpbi5oOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIERvY3VtZW50YXRpb24gdXBkYXRlcy4KLQotMjAwNS0xMC0yOCAxNzozNTowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRG9jdW1lbnRlZCB0aGUgY2xvY2tzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgIERvY3VtZW50ZWQgdGhlIGNsb2Nrcy4KLQotMjAwNS0xMC0yOCAxNzozNDozMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHVwZGF0ZWQgY29uZmlnCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZWQgY29uZmlnCi0KLTIwMDUtMTAtMjggMTc6MjA6NDUgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgV29yayBhcm91bmQgZ3RrZG9jIGRlZmljaWVuY2llcywgZG9jdW1lbnQgYSBtYWNybyBkaWZmZXJlbnRseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgV29yayBhcm91bmQgZ3RrZG9jIGRlZmljaWVuY2llcywgZG9jdW1lbnQgYSBtYWNybyBkaWZmZXJlbnRseS4KLQotMjAwNS0xMC0yOCAxNzowMToxNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIEltcHJvdmUgR3N0QnVmZmVyIGRvY3VtZW50YXRpb24uIEl0J3Mgbm93IDEwMCUgU3BpZmZpZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEltcHJvdmUgR3N0QnVmZmVyIGRvY3VtZW50YXRpb24uIEl0J3Mgbm93IDEwMCUgU3BpZmZpZXIuCi0KLTIwMDUtMTAtMjggMTY6NTQ6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL1JFQURNRToKLQkgIHNvbWUgc3R5bGUgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc29tZSBzdHlsZSBmaXhlcwotCi0yMDA1LTEwLTI4IDE2OjQ2OjU4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6IG1vdmUgc29tZSBtYWNyb3MgdG8gcHJpdmF0ZSBzZWN0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBtb3ZlIHNvbWUgbWFjcm9zIHRvIHByaXZhdGUgc2VjdGlvbnMKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkgIGFkZCBkZXNjcmlwdGlvbnMgcHJvdmlkZWQgYnkgZHMgYW5kIHNvbWUgbW9yZQotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBtYXJrIG1hY3JvIGFzIHRvIGJlIHJlbW92ZWQKLQotMjAwNS0xMC0yOCAxNjoyMToyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDogQWRkIGFuIGl0ZW0gdG8gVE9ETy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgQWRkIGFuIGl0ZW0gdG8gVE9ETy4KLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6IChnc3RfaXRlcmF0b3JfZm9sZCksCi0JICAoZ3N0X2l0ZXJhdG9yX2ZpbmRfY3VzdG9tKToKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmg6Ci0JICBBZGQgaXRlcmF0b3IgZG9jcy4KLQotMjAwNS0xMC0yOCAxNjowODo1MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvUkVBRE1FOgotCSAgYWRkIHN0eWxlIGd1aWRlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBzdHlsZSBndWlkZQotCi0yMDA1LTEwLTI4IDEwOjQ1OjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IERvbid0IGxlYWsgY2xhc3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KToKLQkgIERvbid0IGxlYWsgY2xhc3MuCi0JICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9sb29wKToKLQkgIEFuIEVPUyBldmVudCBtYXJrcyB0aGUgcXVldWUgYXMgY29tcGxldGVseSBmaWxsZWQuCi0KLTIwMDUtMTAtMjcgMjA6NTk6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNvbWUgbW9yZSBkZWJ1Z2dpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIFNvbWUgbW9yZSBkZWJ1Z2dpbmcuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9maW5hbGl6ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRyYW5nZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgRml4IGRlYnVnZ2luZywKLQkgIFByb3RlY3QgdHJhbnNmb3JtIGFuZCBjb25jdXJyZW50IGJ1ZmZlciBhbGxvYyB3aXRoIGEgbmV3IGxvY2suCi0JICBUcnkgbm90IHRvIGJyZWFrIEFCSS9BUEkuCi0KLTIwMDUtMTAtMjcgMTk6Mzc6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogTW92ZSBzb21lIHN0dWZmIGFyb3VuZCBhbmQgY2xlYW51cCB0aGluZ3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3NyY19pbml0KSwgKGdzdF9iYXNlX3NyY19xdWVyeSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmV3c2VnbWVudCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2NvbmZpZ3VyZV9zZWdtZW50KSwgKGdzdF9iYXNlX3NyY19kb19zZWVrKSwKLQkgIChnc3RfYmFzZV9zcmNfc2VuZF9ldmVudCksIChnc3RfYmFzZV9zcmNfZXZlbnRfaGFuZGxlciksCi0JICAoZ3N0X2Jhc2Vfc3JjX3BhZF9nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLAotCSAgKGdzdF9iYXNlX3NyY191bmxvY2spLCAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmVnb3RpYXRlKSwKLQkgIChnc3RfYmFzZV9zcmNfc3RhcnQpLCAoZ3N0X2Jhc2Vfc3JjX2RlYWN0aXZhdGUpLAotCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgTW92ZSBzb21lIHN0dWZmIGFyb3VuZCBhbmQgY2xlYW51cCB0aGluZ3MuCi0KLTIwMDUtMTAtMjcgMTU6NDg6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogQWRkIG1pc3NpbmcgYnJlYWsgc3RhdGVtZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcXVlcnkpOgotCSAgQWRkIG1pc3NpbmcgYnJlYWsgc3RhdGVtZW50cy4KLQotMjAwNS0xMC0yNyAxMzo0NzozMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdGJpbi5jOiBBbiBleHRyYSByZWZjb3VudCBpcyB0YWtlbiBpbiBiYXNlc3JjLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFuIGV4dHJhIHJlZmNvdW50IGlzIHRha2VuIGluIGJhc2VzcmMuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19pbml0KSwgKGdzdF9iYXNlX3NyY19xdWVyeSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksIChnc3RfYmFzZV9zcmNfcGFkX2dldF9yYW5nZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgotCSAgU21hbGwgY2xlYW51cHMsIGNoZWNrIGZvciBmbHVzaGluZyBhZnRlciBiZWluZyB1bmxvY2tlZCBmcm9tIHRoZQotCSAgTElWRV9MT0NLLiB0YWtlIHJlZmNvdW50cyBjb3JyZWN0bHkgKG5vdCB5ZXQgZXZlcnl3aGVyZSkuCi0JICBEb24ndCBzZW5kIG91dCBFT1Mgd2hlbiBnb2luZyB0byBSRUFEWS4KLQotMjAwNS0xMC0yNyAwODo1NTo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU29tZSBtb3JlIGRlYnVnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKToKLQkgIFNvbWUgbW9yZSBkZWJ1Zy4KLQkgICogZ3N0L2dzdGJpbi5jOiAobWVzc2FnZV9jaGVjayksIChiaW5fcmVwbGFjZV9tZXNzYWdlKSwKLQkgIChiaW5fcmVtb3ZlX21lc3NhZ2VzKSwgKGlzX2VvcyksIChnc3RfYmluX2FkZF9mdW5jKSwKLQkgICh1cGRhdGVfZGVncmVlKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KSwgKGJpbl9idXNfaGFuZGxlciksCi0JICAoYmluX3F1ZXJ5X2R1cmF0aW9uX2luaXQpLCAoYmluX3F1ZXJ5X2R1cmF0aW9uX2ZvbGQpLAotCSAgKGJpbl9xdWVyeV9kdXJhdGlvbl9kb25lKSwgKGJpbl9xdWVyeV9nZW5lcmljX2ZvbGQpLAotCSAgKGdzdF9iaW5fcXVlcnkpOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKLQkgIFJlbW92ZSBvbGQgb3B0aW9uLgotCi0yMDA1LTEwLTI2IDE4OjU3OjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGZpeGluZyBleGFtcGxlcyBmaXhpbmcgZG9jcyB0eXBvcyBjaGFuZ2luZyBsb2cgcHJpb3JpdHkgaW4gZXJyb3Igc2l0dWF0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOiAobWFpbik6Ci0JICAqIGV4YW1wbGVzL3F1ZXVlL3F1ZXVlLmM6IChldmVudF9sb29wKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCk6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NlbmRfZXZlbnQpOgotCSAgZml4aW5nIGV4YW1wbGVzCi0JICBmaXhpbmcgZG9jcyB0eXBvcwotCSAgY2hhbmdpbmcgbG9nIHByaW9yaXR5IGluIGVycm9yIHNpdHVhdGlvbnMKLQotMjAwNS0xMC0yNiAxMDoxMToyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHNjcmlwdHMvY3ZzLXVwZGF0ZS5zaDoKLQkgIG1ha2Ugc3VyZSBkaXJzIGdldCBjaGVja2VkIG91dAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtYWtlIHN1cmUgZGlycyBnZXQgY2hlY2tlZCBvdXQKLQotMjAwNS0xMC0yNiAwOTo1Njo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL01BTklGRVNUOgotCSAgZml4IGRpc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGRpc3QKLQotMjAwNS0xMC0yNSAxNzo0MToyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBTb21lIGRvYyBhbmQgZGVidWcgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChtZXNzYWdlX2NoZWNrKSwgKGJpbl9yZXBsYWNlX21lc3NhZ2UpLAotCSAgKGJpbl9yZW1vdmVfbWVzc2FnZXMpLCAoaXNfZW9zKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAotCSAgKHVwZGF0ZV9kZWdyZWUpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25leHQpLCAoYmluX2J1c19oYW5kbGVyKSwKLQkgIChiaW5fcXVlcnlfZHVyYXRpb25faW5pdCksIChiaW5fcXVlcnlfZHVyYXRpb25fZm9sZCksCi0JICAoYmluX3F1ZXJ5X2R1cmF0aW9uX2RvbmUpLCAoYmluX3F1ZXJ5X2dlbmVyaWNfZm9sZCksCi0JICAoZ3N0X2Jpbl9xdWVyeSk6Ci0JICBTb21lIGRvYyBhbmQgZGVidWcgdXBkYXRlcy4KLQkgIENhY2hlIHByZXZpb3VzbHkgcmVxdWVzdGVkIHF1ZXJ5IERVUkFUSU9OIGZvciBzcGVlZC4gaW52YWxpZGF0ZQotCSAgY2FjaGVkIGR1cmF0aW9uIGlmIGVsZW1lbnQgcG9zdHMgYSBEVVJBVElPTiBtZXNzYWdlLgotCi0yMDA1LTEwLTI1IDE1OjM5OjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBVcGRhdGUgVE9ETy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgVXBkYXRlIFRPRE8uCi0JICAqIGdzdC9nc3RiaW4uYzogKG1lc3NhZ2VfY2hlY2spLCAoYmluX3JlcGxhY2VfbWVzc2FnZSksCi0JICAoYmluX3JlbW92ZV9tZXNzYWdlcyksIChpc19lb3MpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCi0JICAodXBkYXRlX2RlZ3JlZSksIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV4dCksIChiaW5fYnVzX2hhbmRsZXIpLAotCSAgKGJpbl9xdWVyeV9kdXJhdGlvbl9pbml0KSwgKGJpbl9xdWVyeV9kdXJhdGlvbl9mb2xkKSwKLQkgIChiaW5fcXVlcnlfZHVyYXRpb25fZG9uZSksIChiaW5fcXVlcnlfZ2VuZXJpY19mb2xkKSwKLQkgIChnc3RfYmluX3F1ZXJ5KToKLQkgIEhhbmRsZSBTRUdNRU5UX1NUQVJUL0RPTkUgbWVzc2FnZXMgY29ycmVjdGx5LgotCSAgTW9yZSBldm9sdmVkIHF1ZXJ5IGFsZ29yaXRobSB0aGF0IGhhbmRsZXMgZHVyYXRpb24gcXVlcmllcwotCSAgY29ycmVjdGx5LgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCksIChnc3RfZWxlbWVudF9xdWVyeSksCi0JICAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpLCAoZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X2NvbW1pdF9zdGF0ZSksIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKToKLQkgIFNvbWUgbW9yZSBkZWJ1Z2dpbmcuCi0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBBZGRlZCBkb2MuCi0KLTIwMDUtMTAtMjUgMTA6MTU6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IERvbid0IHVzZSBpbnZhbGlkIHN0cmVhbV90aW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2dldF9wb3NpdGlvbik6Ci0JICBEb24ndCB1c2UgaW52YWxpZCBzdHJlYW1fdGltZS4KLQkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfbmV3X25ld3NlZ21lbnQpOgotCSAgc3RyZWFtX3RpbWUgaW4gbmV3c2VnbWVudCBjYW5ub3QgYmUgdW5kZWZpbmVkLgotCi0yMDA1LTEwLTI1IDEwOjEyOjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBGb3Jnb3QgdGhlIGNoYW5nZWxvZyBsYXN0IHRpbWUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRm9yZ290IHRoZSBjaGFuZ2Vsb2cgbGFzdCB0aW1lCi0KLTIwMDUtMTAtMjQgMTU6NDE6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidXMuYzogRG9jIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmM6Ci0JICBEb2MgZml4LgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pLAotCSAgKGdzdF9xdWV1ZV9sb29wKToKLQkgIEZpeCBwb3RlbnRpYWwgZGVhZGxvY2sgd2hlbiBRVUVVRV9MT0NLIGlzIHRha2VuIGJlZm9yZSBTVFJFQU1fTE9DSy4KLQotMjAwNS0xMC0yNCAxMTo1NjowMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2xpYnMvdG1wbC86IHRoZXNlIGFyZSBvYnNvbGV0ZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy90bXBsL2dzdGRwYXJhbS5zZ21sOgotCSAgKiBkb2NzL2xpYnMvdG1wbC9nc3RkcGxpbmludC5zZ21sOgotCSAgKiBkb2NzL2xpYnMvdG1wbC9nc3RkcG1hbi5zZ21sOgotCSAgKiBkb2NzL2xpYnMvdG1wbC9nc3RkcHNtb290aC5zZ21sOgotCSAgKiBkb2NzL2xpYnMvdG1wbC9nc3R1bml0Y29udmVydC5zZ21sOgotCSAgdGhlc2UgYXJlIG9ic29sZXRlCi0KLTIwMDUtMTAtMjQgMDk6MTM6MjcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RxdWV1ZS5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JICBGaXggc29tZSBtaW5vciBkb2N1bWVudGF0aW9uIHR5cG9zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeCBzb21lIG1pbm9yIGRvY3VtZW50YXRpb24gdHlwb3MKLQotMjAwNS0xMC0yMyAyMzowNDozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIEhFQUQKLQotPT09IHJlbGVhc2UgMC45LjQgPT09Ci0KLTIwMDUtMTAtMjMgMjI6MzA6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcmFuZG9tL3JlbGVhc2U6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgdGltZSB0byByZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRpbWUgdG8gcmVsZWFzZQotCi0yMDA1LTEwLTIzIDEwOjQ5OjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvTUFOSUZFU1Q6Ci0JICBhZGQgbW9yZSBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbW9yZSBmaWxlcwotCi0yMDA1LTEwLTIzIDEwOjI5OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogVXNlIGZzZWVrbygpIGFuZCBmdGVsbG8oKSBpZiBhdmFpbGFibGUuIFdoZW4gZmFsbGluZyBiYWNrIG9uIGxzZWVrKCkgdG8gZ2V0IHRoZSBjdXJyZW50IG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfZG9fc2VlayksCi0JICAoZ3N0X2ZpbGVfc2lua19nZXRfY3VycmVudF9vZmZzZXQpOgotCSAgVXNlIGZzZWVrbygpIGFuZCBmdGVsbG8oKSBpZiBhdmFpbGFibGUuIFdoZW4gZmFsbGluZyBiYWNrIG9uCi0JICBsc2VlaygpIHRvIGdldCB0aGUgY3VycmVudCBvZmZzZXQsIGZmbHVzaCgpIGZpcnN0IHRvIG1ha2Ugc3VyZQotCSAgZXZlcnl0aGluZyBpcyB1cC10by1kYXRlIGFuZCB3ZSBnZXQgdGhlIHJpZ2h0IG9mZnNldC4KLQotMjAwNS0xMC0yMyAwOTowODo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBnc3QvZ3N0ZXJyb3IuYzoKLQkqIGdzdC9nc3RlcnJvci5oOgotCSogZ3N0L2dzdHF1ZXVlLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgcmVtb3ZlIHByZW1hdHVyZWx5IGFkZGVkIGVycm9yIGNhdGVnb3J5IGFuZCBjbGVhbiB1cCB0aGUgaW5zdGFuY2VzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBwcmVtYXR1cmVseSBhZGRlZCBlcnJvciBjYXRlZ29yeSBhbmQgY2xlYW4gdXAgdGhlIGluc3RhbmNlcwotCi0yMDA1LTEwLTIxIDE3OjUzOjMxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBTaW1wbHkgc2V0IHRoZSByaWdodCBmbGFnIHdoZW4gZ29pbmcgdG8gcGxheWluZywgdGhhdCdzIGFsbCB3ZSBuZWVkIHRvIGRvIGluc3RlYWQgb2YgY2FsbGluZyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUpLAotCSAgKGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uKSwgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIFNpbXBseSBzZXQgdGhlIHJpZ2h0IGZsYWcgd2hlbiBnb2luZyB0byBwbGF5aW5nLCB0aGF0J3MgYWxsCi0JICB3ZSBuZWVkIHRvIGRvIGluc3RlYWQgb2YgY2FsbGluZyBhIGZ1bmN0aW9uIGluc2lkZSB0aGUgb2JqZWN0Ci0JICBsb2NrICh0aGF0IGNvdWxkIHRha2UgdGhlIGxvY2sgYXMgd2VsbCBhbmQgZGVhZGxvY2spCi0KLTIwMDUtMTAtMjEgMTY6MTg6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogRG9uJ3Qgd2FybiwgdGhlIHBlZXIgZWxlbWVudCBrbm93cyB3aGF0IHRvIGRvIGJlc3Qgd2hlbiB0aGUgc2VlayBmYWlsZWQsIGl0IG1pZ2h0IHRyeSBzb21ldGhpbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19kb19zZWVrKSwKLQkgIChnc3RfYmFzZV9zcmNfbG9vcCk6Ci0JICBEb24ndCB3YXJuLCB0aGUgcGVlciBlbGVtZW50IGtub3dzIHdoYXQgdG8gZG8gYmVzdCB3aGVuCi0JICB0aGUgc2VlayBmYWlsZWQsIGl0IG1pZ2h0IHRyeSBzb21ldGhpbmcgZWxzZS4KLQotMjAwNS0xMC0yMSAxNjoxNDozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBGaXggc2Vla2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RvX3NlZWspLCAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLCAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KToKLQkgIEZpeCBzZWVraW5nLgotCi0yMDA1LTEwLTIxIDE1OjEzOjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDogTW9yZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0OgotCSAgTW9yZSBkb2NzLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYpOgotCSAgQ29ycmVjdGx5IHNldCBjYXBzLCBldmVuIG9uIHRoZSBzdWJidWZlci4KLQotMjAwNS0xMC0yMSAxMTozNjozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQW5kIDIlIG1vcmUgZG9jIGNvdmVyYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgKiBnc3QvZ3N0cGFyc2UuaDoKLQkgICogZ3N0L2dzdHRhc2suYzogKGdzdF90YXNrX2ZpbmFsaXplKSwgKGdzdF90YXNrX2Z1bmMpOgotCSAgKiBnc3QvZ3N0dGFzay5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBBbmQgMiUgbW9yZSBkb2MgY292ZXJhZ2UuCi0KLTIwMDUtMTAtMjEgMDk6MjQ6MjggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfcXVlcnkpOiBDbGVhbiB1cCBwZXJjZW50IHBvc2l0aW9uIHJlcG9ydGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0yMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfcXVlcnkpOiBDbGVhbiB1cCBwZXJjZW50Ci0JICBwb3NpdGlvbiByZXBvcnRpbmcuCi0KLTIwMDUtMTAtMjAgMjE6MDg6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IE1vcmUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKGdzdF9lcnJvcl9nZXRfbWVzc2FnZSk6Ci0JICAqIGdzdC9nc3RwYXJzZS5oOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgKiBnc3QvZ3N0dHJhY2UuYzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICBNb3JlIGRvY3MuCi0KLTIwMDUtMTAtMjAgMjA6NDY6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEFub3RoZXIgMSUgbW9yZSBjb3ZlcmFnZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICAqIGdzdC9nc3RwYWQuYzoKLQkgICogZ3N0L2dzdHBhcnNlLmM6Ci0JICBBbm90aGVyIDElIG1vcmUgY292ZXJhZ2UuCi0KLTIwMDUtMTAtMjAgMjA6MjU6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFlheSEgMSUgbW9yZSBkb2NzIGNvdmVyYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksCi0JICAoZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwKLQkgIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKToKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiksCi0JICAoZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKSwgKGdzdF9xdWVyeV9zZXRfZHVyYXRpb24pLAotCSAgKGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiksIChnc3RfcXVlcnlfbmV3X2NvbnZlcnQpOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIFlheSEgMSUgbW9yZSBkb2NzIGNvdmVyYWdlLgotCi0yMDA1LTEwLTIwIDE5OjQ3OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBEb2NzIGFuZCBjb25zaXN0ZW5jeSBmaXhlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiksCi0JICAoZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKSwgKGdzdF9xdWVyeV9zZXRfZHVyYXRpb24pLAotCSAgKGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiksIChnc3RfcXVlcnlfbmV3X2NvbnZlcnQpOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9xdWVyeV9jb252ZXJ0KToKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBEb2NzIGFuZCBjb25zaXN0ZW5jeSBmaXhlcy4KLQotMjAwNS0xMC0yMCAxOTozMDo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHRhc2suKjogTW9yZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0YXNrLmM6Ci0JICAqIGdzdC9nc3R0YXNrLmg6Ci0JICBNb3JlIGRvY3MuCi0KLTIwMDUtMTAtMjAgMTc6MjI6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogUmV3b3JrZWQgdGhlIG1lc3NhZ2UgaGFuZGxpbmcgYSBiaXQsIGNhY2hlIHRoZSBtZXNzYWdlcyBpbnN0ZWFkIG9mIG9ubHkgdGhlIHNlbmRlcnMuIGFsb3dzIHVzIHRvIGRvIG1vci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKG1lc3NhZ2VfY2hlY2spLCAoYmluX3JlcGxhY2VfbWVzc2FnZSksCi0JICAoYmluX3JlbW92ZV9tZXNzYWdlcyksIChpc19lb3MpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCi0JICAodXBkYXRlX2RlZ3JlZSksIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV4dCksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksIChnc3RfYmluX2Rpc3Bvc2UpLCAoYmluX2J1c19oYW5kbGVyKToKLQkgIFJld29ya2VkIHRoZSBtZXNzYWdlIGhhbmRsaW5nIGEgYml0LCBjYWNoZSB0aGUgbWVzc2FnZXMgaW5zdGVhZCBvZgotCSAgb25seSB0aGUgc2VuZGVycy4gYWxvd3MgdXMgdG8gZG8gbW9yZSBpbiB0aGUgZnV0dXJlLgotCi0yMDA1LTEwLTIwIDE3OjE4OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBVcGRhdGUgVE9ETwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQ6Ci0JICBVcGRhdGUgVE9ETwotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pLAotCSAgKGdzdF9iYXNlX3NpbmtfcXVlcnkpOgotCSAgRG9uJ3QgdXNlIGNsb2NrIHRpbWUgdG8gcmVwb3J0IHBvc2l0aW9uIHdoZW4gaW4gRU9TLgotCi0yMDA1LTEwLTIwIDEzOjEwOjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBGaXggaW50ZXJmYWNlIG91dHB1dCB3aXRoIGdzdC1pbnNwZWN0IC1hOyBkb24ndCBwcmludCBuZXdsaW5lcyBhZnRlciBkb3VibGUvZmxvYXQgcHJvcGVydGllcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfaW50ZXJmYWNlcyksCi0JICAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pLCAocHJpbnRfZWxlbWVudF9pbmZvKToKLQkgIEZpeCBpbnRlcmZhY2Ugb3V0cHV0IHdpdGggZ3N0LWluc3BlY3QgLWE7IGRvbid0IHByaW50Ci0JICBuZXdsaW5lcyBhZnRlciBkb3VibGUvZmxvYXQgcHJvcGVydGllcy4KLQotMjAwNS0xMC0yMCAxMTo0ODo1MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogU3BlZWQgdXAgY3VycmVudCBwb3NpdGlvbiBjYWxjdWxhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24pLAotCSAgKGdzdF9iYXNlX3NpbmtfcXVlcnkpOgotCSAgU3BlZWQgdXAgY3VycmVudCBwb3NpdGlvbiBjYWxjdWxhdGlvbi4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZXdzZWdtZW50KToKLQkgIENvcnJlY3RseSBzZXQgc3RyZWFtIHBvc2l0aW9uIGluIG5ld3NlZ21lbnQuCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpLCAoYWRkX3RvX3F1ZXVlKSwKLQkgICh1cGRhdGVfZGVncmVlKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KSwKLQkgIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9mcmVlKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19jdXN0b20pOgotCSAgQ2xlYW4gdXAgZGVidWdnaW5nIGluZm8KLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbGlua19zcmMpLCAoZ3N0X3F1ZXVlX2NoYWluKSwKLQkgIChnc3RfcXVldWVfbG9vcCksIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSk6Ci0JICBQYXVzZSB0YXNrIGZhc3Rlci4KLQotMjAwNS0xMC0xOSAxNzowNjo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRml4IHF1ZXJ5IGhhbmRsaW5nIGFnYWluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCi0JICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLCAoZG9fcGxheWluZyk6Ci0JICBGaXggcXVlcnkgaGFuZGxpbmcgYWdhaW4uCi0KLTIwMDUtMTAtMTkgMTU6NTA6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEFQSSBjaGFuZ2UgZml4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSksCi0JICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLCAoZG9fcGxheWluZyk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19xdWVyeSk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19xdWVyeSk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2hhbmRsZV9zcmNfcXVlcnkpLCAoZmluZF9lbGVtZW50X2dldF9sZW5ndGgpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZSk6Ci0JICBBUEkgY2hhbmdlIGZpeC4KLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IChnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKSwKLQkgIChnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uKSwgKGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiksCi0JICAoZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiksIChnc3RfcXVlcnlfc2V0X2R1cmF0aW9uKSwKLQkgIChnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24pLCAoZ3N0X3F1ZXJ5X3NldF9zZWdtZW50KSwKLQkgIChnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudCk6Ci0JICAqIGdzdC9nc3RxdWVyeS5oOgotCSAgQnVuZGxpbmcgcXVlcnkgcG9zaXRpb24vZHVyYXRpb24gaXMgbm90IGEgZ29vZCBpZGVhIHNpbmNlIGR1cmF0aW9uCi0JICBkb2VzIG5vdCBjaGFuZ2UgbXVjaCBhbmQgd2UgZG9uJ3Qgd2FudCB0byByZWNhbGN1bGF0ZSBpdCBmb3IgZXZlcnkKLQkgIHBvc2l0aW9uIHF1ZXJ5LCBzbyB0aGV5IGFyZSBzZXBhcmF0ZWQgYWdhaW4uLgotCSAgQmFzZSB2YWx1ZSBpbiBzZWdtZW50IHF1ZXJ5IGlzIG5vdCBuZWVkZWQuCi0JICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uKSwKLQkgIChnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbiksIChnc3RfcGFkX3F1ZXJ5X3Bvc2l0aW9uKSwKLQkgIChnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uKToKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBVcGRhdGVzIGZvciBxdWVyeSBBUEkgY2hhbmdlLgotCSAgQWRkZWQgc29tZSBkb2NzIGhlcmUgYW5kIHRoZXJlLgotCi0yMDA1LTEwLTE5IDExOjQzOjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svOiB3YWl0IG9uIHRocmVhZCB0byBkaWUgc28gd2UgY2FuIGNoZWNrIHJlZmNvdW50IGNvcnJlY3RseQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGNoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICB3YWl0IG9uIHRocmVhZCB0byBkaWUgc28gd2UgY2FuIGNoZWNrIHJlZmNvdW50IGNvcnJlY3RseQotCi0yMDA1LTEwLTE5IDExOjQzOjE4ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgdXBkYXRlIHRvb2xzIHBhY2thZ2UgbmFtaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSB0b29scyBwYWNrYWdlIG5hbWluZwotCi0yMDA1LTEwLTE5IDExOjQyOjM5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgbG9nIGFuIGlmIGJyYW5jaAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBsb2cgYW4gaWYgYnJhbmNoCi0KLTIwMDUtMTAtMTggMTc6MzA6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzogTWFrZSBjaGVjayBhIGxpdHRsZSBtb3JlIHRpbWUgY29uc3VtaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIE1ha2UgY2hlY2sgYSBsaXR0bGUgbW9yZSB0aW1lIGNvbnN1bWluZy4KLQotMjAwNS0xMC0xOCAxNzowNjoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svOiBTbWFsbCBzdGF0ZSBjaGFuZ2UgdG9ydHVyZSB0ZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgKiBjaGVjay9waXBlbGluZXMvc3RyZXNzLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoc2ltcGxlX2xhdW5jaF9saW5lc19zdWl0ZSksIChtYWluKToKLQkgIFNtYWxsIHN0YXRlIGNoYW5nZSB0b3J0dXJlIHRlc3QuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfY29tbWl0X3N0YXRlKSwKLQkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLCAoZ3N0X2Jhc2Vfc2lua19ldmVudCksIChkb19wbGF5aW5nKSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBOZXZlciB0YWtlIHN0YXRlIGxvY2sgZnJvbSBzdHJlYW1pbmcgdGhyZWFkLCBjbGVhbiB1cCB1Z2x5Ci0JICBoYWNrcy4gVW5mb3J0dW5hdGx5IGNvcmUgZG9lcyBub3QgeWV0IHN1cHBvcnQgbmljZSB3YXlzIHRvCi0JICBhc3luYyBjb21taXQgc3RhdGUuCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpLAotCSAgKGJpbl9idXNfaGFuZGxlcik6Ci0JICBTdGFydCBzdGF0ZSByZWNhbGMgaWYgYSBTVEFURV9ESVJUWSBtZXNzYWdlIGlzIHBvc3RlZCwgYnV0IG9ubHkKLQkgIG9uIHRoZSB0b3BsZXZlbCBiaW4uCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KSwKLQkgIChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksIChnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZV9mdW5jKSwgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBTdGF0ZSB2YXJpYWJsZXMgYXJlIG5vdyBwcm90ZWN0ZWQgd2l0aCB0aGUgTE9DSywgdGhlIHN0YXRlCi0JICBsb2NrIGlzIG9ubHkgdXNlZCB0byBzZXJpYWxpemUgX3NldF9zdGF0ZSgpLgotCi0yMDA1LTEwLTE4IDE2OjI1OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBTZXJpb3VzbHksIHRoaXMgaXMgYmV0dGVyIHRoYW4gYSBwcmV2aW91cyBjb21taXQgYXMgd2Ugb25seSBuZWVkIHRvIG5vdGlmeSB0aGUgZmFjdCB0aGF0IGFuIGVsZW1lbnQgY2hhbmdlZCBzdGF0ZSBpbiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGNoZWNrL2dzdC9nc3RtZXNzYWdlLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAoR1NUX1NUQVJUX1RFU1QpLCAobWVzc2FnZV9yZWNlaXZlZCk6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX3JlY2FsY19mdW5jKSwKLQkgIChiaW5fYnVzX2hhbmRsZXIpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X2NvbW1pdF9zdGF0ZSksIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfZGlydHkpLCAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQpLAotCSAgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUpLCAoZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0KSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmUpLCAoZ3N0X21lc3NhZ2VfcGFyc2VfZHVyYXRpb24pOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKLQkgIFNlcmlvdXNseSwgdGhpcyBpcyBiZXR0ZXIgdGhhbiBhIHByZXZpb3VzIGNvbW1pdCBhcyB3ZSBvbmx5IG5lZWQKLQkgIHRvIG5vdGlmeSB0aGUgZmFjdCB0aGF0IGFuIGVsZW1lbnQgY2hhbmdlZCBzdGF0ZSBpbiBhIHN0cmVhbWluZwotCSAgdGhyZWFkLCBtYXJraW5nIHRoZSBzdGF0ZSBvZiB0aGUgcGFyZW50cyBkaXJ0eSwgaGVuY2UgdGhlCi0JICBTVEFURV9ESVJUWSBtZXNzYWdlIGluc3RlYWQgb2YgYWJ1c2luZyBhIGJvb2xlYW4gaW4gYSBTVEFURV9DSEFOR0UKLQkgIG1lc3NhZ2UuCi0KLTIwMDUtMTAtMTggMTU6MTU6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IENsZWFudXBzLCBwcmVwYXJlIGZvciBzdGF0ZSBjaGFuZ2UgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5fZ2V0X3N0YXRlX2Z1bmMpLAotCSAgKGdzdF9iaW5fcmVjYWxjX2Z1bmMpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrKSwKLQkgIChnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZSksIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKToKLQkgIENsZWFudXBzLCBwcmVwYXJlIGZvciBzdGF0ZSBjaGFuZ2UgZml4ZXMuCi0KLTIwMDUtMTAtMTggMTQ6Mjk6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFBlbmRpbmcgQUJJIGNoYW5nZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKSwgKGdzdF9lbGVtZW50X3NldF9zdGF0ZV9mdW5jKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIFBlbmRpbmcgQUJJIGNoYW5nZXMuCi0JICBHVGhyZWFkUG9vbCBpbiBHc3RCaW5DbGFzcyB0byBtb25pdG9yIGFzeW5jIHN0YXRlIGNoYW5nZXMuCi0JICBzdGF0ZV9jb29raWUgaW4gR3N0RWxlbWVudCB0byBkZXRlY3QgY29uY3VycmVudCBnc3Qvc2V0IHN0YXRlLgotCSAgc2V0X3N0YXRlIGlzIG5vdyB2aXJ0dWFsIHRvbyBpbiBjYXNlIGEgdmVyeSBjb21wbGljYXRlZCBlbGVtZW50Ci0JICBoYXMgdG8gYmUgY29uc3RydWN0ZWQuCi0KLTIwMDUtMTAtMTggMTM6MTk6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIE1ha2UgbWVzc2FnZXMgZnV0dXJlIHByb29mLiBzdGF0ZS1jaGFuZ2UgZ2V0cyBhIGZsYWcgaWYgaXQgd2FzIGEgbWVzc2FnZSBjb21taW5nIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBjaGVjay9nc3QvZ3N0bWVzc2FnZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzogKEdTVF9TVEFSVF9URVNUKSwgKG1lc3NhZ2VfcmVjZWl2ZWQpOgotCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fYnVzX2hhbmRsZXIpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwKLQkgIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCksIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24pLCAoZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydCksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX3BhcnNlX2R1cmF0aW9uKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6Ci0JICBNYWtlIG1lc3NhZ2VzIGZ1dHVyZSBwcm9vZi4KLQkgIHN0YXRlLWNoYW5nZSBnZXRzIGEgZmxhZyBpZiBpdCB3YXMgYSBtZXNzYWdlIGNvbW1pbmcgZnJvbSB0aGUKLQkgIHN0cmVhbWluZyB0aHJlYWQuCi0JICBzZWdtZW50LXN0YXJ0L3N0b3AgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluIG90aGVyIGZvcm1hdHMuCi0JICBBIG1lc3NhZ2UgdG8gbm90aWZ5IGFuIGFwcCB0aGF0IGEgcGlwZWxpbmUgY2hhbmdlZCBwbGF5YmFjawotCSAgZHVyYXRpb24uCi0JICBBbHNvIGZpeCBhIEdzdE1lc3NhZ2UgbGVhayBpbiAtbGF1bmNoCi0KLTIwMDUtMTAtMTggMTA6MzI6NDggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfZGlzcG9zZSk6IE1vcmUgaGVscGZ1bCBtZXNzYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9kaXNwb3NlKTogTW9yZSBoZWxwZnVsIG1lc3NhZ2UuCi0KLTIwMDUtMTAtMTggMDg6MjA6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JICByZW1vdmUgaW5mbyBtZXNzYWdlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgaW5mbyBtZXNzYWdlcwotCi0yMDA1LTEwLTE4IDA3OjEzOjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdHJlZ2lzdHJ5LmM6IHVucmVmIGEgcGx1Zy1pbiB3ZSBnZXQgdGhhdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCk6Ci0JICB1bnJlZiBhIHBsdWctaW4gd2UgZ2V0IHRoYXQgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQKLQotMjAwNS0xMC0xNyAyMDoxNjo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBhZGQgbmV3IGFwaSBlbnRyaWVzIGhpZGUgaW50ZXJuYWwgbWFjcm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgYWRkIG5ldyBhcGkgZW50cmllcwotCSAgaGlkZSBpbnRlcm5hbCBtYWNybwotCi0yMDA1LTEwLTE3IDE4OjA5OjMyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMgKGdzdF9jb2xsZWN0cGFkc19jaGFpbik6IFNsaWdodCBjbGVhbnVwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTE3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jIChnc3RfY29sbGVjdHBhZHNfY2hhaW4pOiBTbGlnaHQKLQkgIGNsZWFudXAuCi0JICAqIGdzdC9NYWtlZmlsZS5hbSAoZ3N0ZW51bXR5cGVzLmMpOiBUaHJlYWRzYWZlIG5vdy4KLQkgICogZ3N0L2dzdGV2ZW50LmMgKGdzdF9ldmVudF9uZXcsIGdzdF9ldmVudF9maW5hbGl6ZSk6IExPRy4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpOiBzL0lORk8vREVCVUcvLgotCSAgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKTogQmV0dGVyIGRlYnVnIG1lc3NhZ2UuCi0JICAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKTogcy9JTkZPL0RFQlVHLy4KLQkgIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlLCBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jIChnc3RfbWVzc2FnZV9pbml0KTogcy9JTkZPL0xPRy8uCi0JICAoZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSk6IHMvSU5GTy9MT0cvLgotCi0yMDA1LTEwLTE3IDE3OjQ2OjM3ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBDaGVjayB2YWxpZGl0eSBvZiBlbmQgdGltZSBiYXNlZCBvbiBlbmQgdGltZSB2YXJpYWJsZSwgbm90IHN0YXJ0IHRpbWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoZWNrIHZhbGlkaXR5IG9mIGVuZCB0aW1lIGJhc2VkIG9uIGVuZCB0aW1lIHZhcmlhYmxlLCBub3Qgc3RhcnQgdGltZS4KLQotMjAwNS0xMC0xNyAxNzowNTozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBtZXJnZSBjb250cm9sbGVyIHRlc3RzdWl0ZXMgZml4IGJyb2tlbiB0ZXN0cyByZW1vdmUgbWVtLWNodW5rIGZyb20gZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3RfY29udHJvbGxlcl9zdWl0ZSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3NldF9pbnRlcnBvbGF0aW9uX21vZGUpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICAqIHRlc3RzdWl0ZS9jb250cm9sbGVyLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzdWl0ZS9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0c3VpdGUvY29udHJvbGxlci9pbnRlcnBvbGF0b3IuYzoKLQkgIG1lcmdlIGNvbnRyb2xsZXIgdGVzdHN1aXRlcwotCSAgZml4IGJyb2tlbiB0ZXN0cwotCSAgcmVtb3ZlIG1lbS1jaHVuayBmcm9tIGRvY3MKLQotMjAwNS0xMC0xNyAxNDo0MjoyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IG91dC4gIGdldCBvdXQuICB5b3UncmUgZmlyZWQuICB0byB0aGUgQXR0aWMgIQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtZW1jaHVuay5jOgotCSAgKiBnc3QvZ3N0bWVtY2h1bmsuaDoKLQkgICogZ3N0L2dzdHRyYXNoc3RhY2suYzoKLQkgICogZ3N0L2dzdHRyYXNoc3RhY2suaDoKLQkgIG91dC4gIGdldCBvdXQuICB5b3UncmUgZmlyZWQuICB0byB0aGUgQXR0aWMgIQotCi0yMDA1LTEwLTE3IDE0OjM3OjA2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGNhcHMuYzogZml4IHNpZ25lZG5lc3MgaXNzdWVzIGluIGEgKGhvcGVmdWxseSkgY29ycmVjdCB3YXkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfaW50ZXJzZWN0KToKLQkgIGZpeCBzaWduZWRuZXNzIGlzc3VlcyBpbiBhIChob3BlZnVsbHkpIGNvcnJlY3Qgd2F5Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlKToKLQkgIHNvbWUgZGVidWdnaW5nCi0JICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3Rfc2V0X3BhcmVudCk6Ci0JICBzb21lIGRlYnVnZ2luZwotCi0yMDA1LTEwLTE3IDEwOjM3OjEzICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBGaXggYSBkb2MgdHlwby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRml4IGEgZG9jIHR5cG8uCi0KLTIwMDUtMTAtMTcgMDk6Mjg6MzUgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0dmFsdWUuaDogRml4IHByb3RvdHlwZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTcgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2dzdHZhbHVlLmg6IEZpeCBwcm90b3R5cGVzLgotCi0yMDA1LTEwLTE2IDE0OjMyOjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3R2ZXJzaW9uLmguaW46Ci0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIGFkZCBnc3RfdmVyc2lvbl9zdHJpbmcgKCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGdzdF92ZXJzaW9uX3N0cmluZyAoKQotCi0yMDA1LTEwLTE2IDEzOjU1OjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgY29tbWVudDsgdXBkYXRlIHdpbjMyIGNvbmZpZy5oCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbW1lbnQ7IHVwZGF0ZSB3aW4zMiBjb25maWcuaAotCi0yMDA1LTEwLTE2IDEyOjM3OjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogc2NyaXB0cy9jdnMtdXBkYXRlLnNoOgotCSAgRGVhciBBbmR5OiBoZXJlJ3MgYSBzY3JpcHQgdG8gdXBkYXRlIHN0dWZmIGZyb20gQ1ZTCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIERlYXIgQW5keToKLQkgIGhlcmUncyBhIHNjcmlwdCB0byB1cGRhdGUgc3R1ZmYgZnJvbSBDVlMKLQkgIExvdmUsCi0JICBUaG9tYXMKLQotMjAwNS0xMC0xNiAxMjoyODoyMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogY2xlYW4gdXAgZnVydGhlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIGNsZWFuIHVwIGZ1cnRoZXIKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgaXQncyBQTFVHSU5ESVIgbm93Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19pbnRlcnNlY3QpOgotCSAgdXNlIGdpbnQ2NCwgdGhlIHJhbmdlIGNvdWxkIGJlIGJpZ2dlciB0aGFuIGEgZ3VpbnQKLQotMjAwNS0xMC0xNiAxMTo0ODowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbW1vbjoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSAgR1N0cmVhbWVyIGNvbnN1bHRhbnRzIHdpbGwgbWFrZSBhIGxvdCBvZiBtb25leSBpbiAyMDM4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEdTdHJlYW1lciBjb25zdWx0YW50cyB3aWxsIG1ha2UgYSBsb3Qgb2YgbW9uZXkgaW4gMjAzOAotCi0yMDA1LTEwLTE2IDEwOjU4OjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGNhcHMuYzogRml4IGd1aW50IGogZGl2aW5nIHVuZGVyIDAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOiAoZ3N0X2NhcHNfaW50ZXJzZWN0KToKLQkgIEZpeCBndWludCBqIGRpdmluZyB1bmRlciAwCi0KLTIwMDUtMTAtMTYgMTA6Mzg6MDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjaGVjayBmb3IgcHJvY2Vzcy5oLCBkZWNsYXJlcyBnZXRwaWQoKSBvbiBXaW5kb3dzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKLQkgIGNoZWNrIGZvciBwcm9jZXNzLmgsIGRlY2xhcmVzIGdldHBpZCgpIG9uIFdpbmRvd3MKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgIGluY2x1ZGUgcHJvY2Vzcy5oIGlmIHdlIGhhdmUgaXQKLQkgICogZ3N0L2dzdG1lbWNodW5rLmM6IChwb3B1bGF0ZSksIChnc3RfbWVtX2NodW5rX25ldyk6Ci0JICAqIGdzdC9nc3RtZW1jaHVuay5oOgotCSAgZml4IHNpZ25lZG5lc3MgaXNzdWVzCi0JICAqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgZml4IGdldF90eXBlJ3MKLQotMjAwNS0xMC0xNiAxMDoyMjoyOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JICBmaXggc2lnbmVkbmVzcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggc2lnbmVkbmVzcwotCi0yMDA1LTEwLTE2IDEwOjE4OjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgZml4IEdTVF9WRVJTSU9OCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBHU1RfVkVSU0lPTgotCi0yMDA1LTEwLTE2IDEwOjE1OjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgZml4IGlubGluZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggaW5saW5lCi0KLTIwMDUtMTAtMTYgMTA6MTI6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBkZWZpbmUgUEFDS0FHRQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkZWZpbmUgUEFDS0FHRQotCi0yMDA1LTEwLTE2IDEwOjEwOjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgdXBkYXRlIGF2YWlsYWJsZSBoZWFkZXJzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSBhdmFpbGFibGUgaGVhZGVycwotCi0yMDA1LTEwLTE2IDA5OjU2OjMzICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L2dzdGNhcHMuYzogRml4IGEgYmFkIGJ1ZyB3aXRoIGEgc2ltcGxlIGZpeC4gQmVjYXVzZSBvZiB1bnNpZ25lZCBpbnRzLCBjYXBzIGludGVyc2VjdGlvbiB3YXMgZ29pbmcgbnV0cyBhbmQgdHJ5aW5nLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTYgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2ludGVyc2VjdCk6IEZpeCBhIGJhZCBidWcgd2l0aCBhCi0JICBzaW1wbGUKLQkgIGZpeC4gQmVjYXVzZSBvZiB1bnNpZ25lZCBpbnRzLCBjYXBzIGludGVyc2VjdGlvbiB3YXMgZ29pbmcgbnV0cwotCSAgYW5kCi0JICB0cnlpbmcgdG8gYWNjZXNzIHN0cnVjdHVyZXMgd2l0aCBHX01BWFVJTlQgaW5kZXguIFRoYXQgZml4ZXMKLQkgIHZpZGVvdGVzdHNyYyAhIGZmbXBlZ2NvbG9yc3BhY2UgISBmYWtlc2luawotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2xpbmtfY2hlY2tfY29tcGF0aWJsZV91bmxvY2tlZCk6IGxvZ3MKLQkgIGNvbnNpc3RlbmN5LgotCi0yMDA1LTEwLTE2IDA5OjU1OjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgdXBkYXRlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZQotCi0yMDA1LTEwLTE2IDA5OjU0OjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgdHlwbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0eXBvCi0KLTIwMDUtMTAtMTYgMDk6NTE6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICB1cGRhdGVzIGZvciAyaW4zMgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGVzIGZvciAyaW4zMgotCi0yMDA1LTEwLTE2IDA5OjQ0OjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOgotCSogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSogY29uZmlndXJlLmFjOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBtb3JlIGRlZmluZSBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtb3JlIGRlZmluZSBmaXhlcwotCi0yMDA1LTEwLTE2IDA5OjIwOjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiB1c2UgdGhlIGdldHRleHQgbWFjcm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQkgICogY29uZmlndXJlLmFjOgotCSAgdXNlIHRoZSBnZXR0ZXh0IG1hY3JvCi0JICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICAqIGdzdC9pbmRleGVycy9nc3RpbmRleGVycy5jOgotCSAgdXBkYXRlIGZvciBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4KLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgdXBkYXRlZCBjb25maWcuaAotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBhZGQgdGhlIHRlbXBsYXRlIHRvIGdlbmVyYXRlIGNvbmZpZy5oCi0JICAqIHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYzoKLQkgICogd2luMzIvY29tbW9uL2dzdHZlcnNpb24uaDoKLQkgIHVwZGF0ZWQgY29waWVzCi0KLTIwMDUtMTAtMTYgMDk6MTE6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLnBjLmluOgotCSAgcmVtb3ZlIG1vcmUgUEtHX0NGTEFHUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgbW9yZSBQS0dfQ0ZMQUdTCi0KLTIwMDUtMTAtMTYgMDk6MTA6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvOiBhZGQgdGhlIG5hbm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChnc3RfdmVyc2lvbik6Ci0JICAqIGdzdC9nc3R2ZXJzaW9uLmguaW46Ci0JICBhZGQgdGhlIG5hbm8KLQotMjAwNS0xMC0xNiAwODo1OTozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgotCSAgcmVtb3ZlIEdTVF9QS0dfQ0ZMQUdTCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBHU1RfUEtHX0NGTEFHUwotCi0yMDA1LTEwLTE1IDIyOjI0OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0ZXZlbnQuaDogT29wcywgYWRkIG1pc3NpbmcgY2xvc2luZyBicmFja2V0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgT29wcywgYWRkIG1pc3NpbmcgY2xvc2luZyBicmFja2V0LgotCi0yMDA1LTEwLTE1IDIxOjQxOjIwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiB1c2UgY29tbW9uIG00J3MgZm9yIGFyZ3VtZW50IGNoZWNraW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgdXNlIGNvbW1vbiBtNCdzIGZvciBhcmd1bWVudCBjaGVja2luZwotCi0yMDA1LTEwLTE1IDIwOjMzOjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBZGQgR1NUX0VWRU5UX1RZUEVfTkFNRSgpIG1hY3JvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgQWRkIEdTVF9FVkVOVF9UWVBFX05BTUUoKSBtYWNyby4KLQotMjAwNS0xMC0xNSAyMDowMDozMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmOgotCSAgdXBkYXRlIGRlZnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGRlZnMKLQotMjAwNS0xMC0xNSAxOTo1NzowMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IHByaXZhdGl6ZSBtb3JlIHN5bWJvbHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aW5mby5jOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgKiBnc3QvZ3N0dGFzay5jOgotCSAgcHJpdmF0aXplIG1vcmUgc3ltYm9scwotCi0yMDA1LTEwLTE1IDE4OjIyOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBhZGQgc3JjZGlyLCBidWlsZGRpciBpbmNsdWRlcyB0byBHU1RfQUxMX0NGTEFHUywgc2luY2UgZXZlcnl0aGluZyB0aGF0IHVzZXMgR1N0cmVhbWVyIEFQSSBzaG91bGQgaGF2ZSB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgYWRkIHNyY2RpciwgYnVpbGRkaXIgaW5jbHVkZXMgdG8gR1NUX0FMTF9DRkxBR1MsIHNpbmNlCi0JICBldmVyeXRoaW5nIHRoYXQgdXNlcyBHU3RyZWFtZXIgQVBJIHNob3VsZCBoYXZlIHRoZSBpbmNsdWRlcwotCi0yMDA1LTEwLTE1IDE3OjU5OjA3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ2l2ZSBlYWNoIHZhbHVlIGEgX2dldF90eXBlLCByZW1vdmVzIHRoZSBEQVRBIGV4cG9ydHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF9kYXRlX2dldF90eXBlKSwgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6Ci0JICAqIGdzdC9nc3R2YWx1ZS5oOgotCSAgZ2l2ZSBlYWNoIHZhbHVlIGEgX2dldF90eXBlLCByZW1vdmVzIHRoZSBEQVRBIGV4cG9ydHMKLQotMjAwNS0xMC0xNSAxNzoyMjozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkgIGZpeCBsaW5rIGZsYWdzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBsaW5rIGZsYWdzCi0KLTIwMDUtMTAtMTUgMTY6Mzk6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgIHVwZGF0ZSBkZWZzIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGRlZnMgZmlsZQotCi0yMDA1LTEwLTE1IDE2OjM3OjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICB1cGRhdGUgZGVmcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgZGVmcwotCi0yMDA1LTEwLTE1IDE2OjMzOjA5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdC4qOiByZW1vdmUgX2dzdF9yZWdpc3RyeV9hdXRvX2xvYWQsIG5vdCB1c2VkIGFueW1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICAqIGdzdC9nc3QuaDoKLQkgIHJlbW92ZSBfZ3N0X3JlZ2lzdHJ5X2F1dG9fbG9hZCwgbm90IHVzZWQgYW55bW9yZQotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2dldF90eXBlKToKLQkgICogZ3N0L2dzdGJpbi5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2dldF90eXBlKToKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF90eXBlKToKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgbWFrZSBfZ2V0X3R5cGUgZnVuY3Rpb25zIHNpbWlsYXIsIGZpeGVzIGRhdGEgZXhwb3J0IGZyb20gbGlicmFyeQotCi0yMDA1LTEwLTE1IDE2OjE2OjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmM6Ci0JICBJJ20gdG9vIGxhenkgdG8gY29tbWVudCB0aGlzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGd0ay1kb2MgaW5zaXN0cyBvbiBpbnNlcnRpbmcgPFBBUkE+IGF0IGV2ZXJ5IGVtcHR5IGxpbmUsIHNpZ2gKLQotMjAwNS0xMC0xNSAxNjowMTo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZXJyb3IuYzoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGZpbHRlci5jOgotCSogZ3N0L2dzdGZvcm1hdC5jOgotCSogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBnc3QvZ3N0aW5kZXguYzoKLQkqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0aW50ZXJmYWNlLmM6Ci0JKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkqIGdzdC9nc3RtZW1jaHVuay5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5jOgotCSogZ3N0L2dzdHBhcnNlLmM6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWV1ZS5jOgotCSogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3R0YWdsaXN0LmM6Ci0JKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JKiBnc3QvZ3N0dHJhY2UuYzoKLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgotCSogZ3N0L2dzdHVyaS5jOgotCSogZ3N0L2dzdHVyaXR5cGUuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHhtbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgdmFyaW91cyBzdHlsZSBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB2YXJpb3VzIHN0eWxlIGZpeGVzCi0KLTIwMDUtMTAtMTUgMTU6NTM6NTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9nc3QvZ3N0YmluLmM6Ci0JKiBjaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSogY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JKiBleGFtcGxlcy9hcHByZWFkZXIvYXBwcmVhZGVyLmM6Ci0JKiBleGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkqIGV4YW1wbGVzL2N1dHRlci9jdXR0ZXIuYzoKLQkqIGV4YW1wbGVzL2N1dHRlci9jdXR0ZXIuaDoKLQkqIGV4YW1wbGVzL21peGVyL21peGVyLmM6Ci0JKiBleGFtcGxlcy9taXhlci9taXhlci5oOgotCSogZXhhbXBsZXMvcmV0YWcvcmV0YWcuYzoKLQkqIGV4YW1wbGVzL3JldGFnL3RyYW5zY29kZS5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvYXBwcmVhZGVyL2FwcHJlYWRlci5jOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL2N1dHRlci9jdXR0ZXIuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9jdXR0ZXIvY3V0dGVyLmg6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9taXhlci9taXhlci5oOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3JldGFnL3JldGFnLmM6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcmV0YWcvdHJhbnNjb2RlLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0Y29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oOgotCSogd2luMzIvZGlyZW50LmM6Ci0JKiB3aW4zMi9nc3Rjb25maWcuaDoKLQkqIHdpbjMyL2dzdHZlcnNpb24uaDoKLQkqIHdpbjMyL2d0Y2hhci5oOgotCSogd2luMzIvbW1hbi5oOgotCSogd2luMzIvdnM3L21tYW4uaDoKLQkgIHdoaXRlc3BhY2UgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA1LTEwLTE1IDE1OjUzOjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvYnl0ZXN0cmVhbS8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9ieXRlc3RyZWFtL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9ieXRlc3RyZWFtL2ZpbGVwYWRzaW5rLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2J5dGVzdHJlYW0vZ3N0YnN0ZXN0LmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2J5dGVzdHJlYW0vdGVzdDEuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvYnl0ZXN0cmVhbS90ZXN0ZmlsZTE6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NhcHMvbm9ybWFsaXNhdGlvbi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jYXBzL3JhbmRvbS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jbGVhbnVwLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NsZWFudXAvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NsZWFudXAvY2xlYW51cDEuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xlYW51cC9jbGVhbnVwMi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jbGVhbnVwL2NsZWFudXAzLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NsZWFudXAvY2xlYW51cDQuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xlYW51cC9jbGVhbnVwNS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jb250cm9sbGVyL2ludGVycG9sYXRvci5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9kZWJ1Zy9wcmludGZfZXh0ZW5zaW9uLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2VsZW1lbnRzL3RlZS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9uZWdvdGlhdGlvbi8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9uZWdvdGlhdGlvbi9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvbmVnb3RpYXRpb24vcGFkX2xpbmsuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGFkL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wYWQvY2hhaW5ub3B1bGwuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcGFkL2dldG5vcHVzaC5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9wYWQvbGluay5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWZjb3VudGluZy9zY2hlZC5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9yZWdpc3RyeS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvcmVnaXN0cnkvZ3N0LXByaW50LWZvcm1hdHMuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0MjE4My0yLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQyMTgzLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQzNzc3LTIuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDM3NzcuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDc3MTMuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDc4MTkuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDc4OTQtMi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0Nzg5NC5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zY2hlZHVsZXJzL2dyb3VwX2xpbmsuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy9xdWV1ZV9saW5rLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvcmVsaW5rLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvdW5saW5rLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3NjaGVkdWxlcnMvdW5yZWYuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc2NoZWR1bGVycy91c2VsZXNzX2l0ZXJhdGlvbi5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9zdGF0ZXMvYmluLmM6Ci0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvYnl0ZXN0cmVhbS8uZ2l0aWdub3JlOgotCSogdGVzdHN1aXRlL2J5dGVzdHJlYW0vTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvYnl0ZXN0cmVhbS9maWxlcGFkc2luay5jOgotCSogdGVzdHN1aXRlL2J5dGVzdHJlYW0vZ3N0YnN0ZXN0LmM6Ci0JKiB0ZXN0c3VpdGUvYnl0ZXN0cmVhbS90ZXN0MS5jOgotCSogdGVzdHN1aXRlL2J5dGVzdHJlYW0vdGVzdGZpbGUxOgotCSogdGVzdHN1aXRlL2NhcHMvbm9ybWFsaXNhdGlvbi5jOgotCSogdGVzdHN1aXRlL2NhcHMvcmFuZG9tLmM6Ci0JKiB0ZXN0c3VpdGUvY2xlYW51cC8uZ2l0aWdub3JlOgotCSogdGVzdHN1aXRlL2NsZWFudXAvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvY2xlYW51cC9jbGVhbnVwMS5jOgotCSogdGVzdHN1aXRlL2NsZWFudXAvY2xlYW51cDIuYzoKLQkqIHRlc3RzdWl0ZS9jbGVhbnVwL2NsZWFudXAzLmM6Ci0JKiB0ZXN0c3VpdGUvY2xlYW51cC9jbGVhbnVwNC5jOgotCSogdGVzdHN1aXRlL2NsZWFudXAvY2xlYW51cDUuYzoKLQkqIHRlc3RzdWl0ZS9jb250cm9sbGVyL2ludGVycG9sYXRvci5jOgotCSogdGVzdHN1aXRlL2RlYnVnL3ByaW50Zl9leHRlbnNpb24uYzoKLQkqIHRlc3RzdWl0ZS9lbGVtZW50cy90ZWUuYzoKLQkqIHRlc3RzdWl0ZS9uZWdvdGlhdGlvbi8uZ2l0aWdub3JlOgotCSogdGVzdHN1aXRlL25lZ290aWF0aW9uL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL25lZ290aWF0aW9uL3BhZF9saW5rLmM6Ci0JKiB0ZXN0c3VpdGUvcGFkL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL3BhZC9jaGFpbm5vcHVsbC5jOgotCSogdGVzdHN1aXRlL3BhZC9nZXRub3B1c2guYzoKLQkqIHRlc3RzdWl0ZS9wYWQvbGluay5jOgotCSogdGVzdHN1aXRlL3JlZmNvdW50aW5nL3NjaGVkLmM6Ci0JKiB0ZXN0c3VpdGUvcmVnaXN0cnkvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvcmVnaXN0cnkvZ3N0LXByaW50LWZvcm1hdHMuYzoKLQkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDIxODMtMi5jOgotCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQyMTgzLmM6Ci0JKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDM3NzctMi5jOgotCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQzNzc3LmM6Ci0JKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy8xNDc3MTMuYzoKLQkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0NzgxOS5jOgotCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvMTQ3ODk0LTIuYzoKLQkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzLzE0Nzg5NC5jOgotCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy9ncm91cF9saW5rLmM6Ci0JKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy9xdWV1ZV9saW5rLmM6Ci0JKiB0ZXN0c3VpdGUvc2NoZWR1bGVycy9yZWxpbmsuYzoKLQkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzL3VubGluay5jOgotCSogdGVzdHN1aXRlL3NjaGVkdWxlcnMvdW5yZWYuYzoKLQkqIHRlc3RzdWl0ZS9zY2hlZHVsZXJzL3VzZWxlc3NfaXRlcmF0aW9uLmM6Ci0JKiB0ZXN0c3VpdGUvc3RhdGVzL2Jpbi5jOgotCSAgcmVtb3ZlIG9ic29sZXRlIHRlc3RzIHdoaXRlc3BhY2UgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIG9ic29sZXRlIHRlc3RzCi0JICB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDUtMTAtMTUgMTU6NTI6MDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb25maWd1cmUuYWM6IGNvcnJlY3RseSBtYWtlIGNvbmRpdGlvbmFscwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvcnJlY3RseSBtYWtlIGNvbmRpdGlvbmFscwotCSAgKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSAgZml4IHR5cG8gY2F1c2luZyBmZHNyYyBub3QgdG8gYnVpbGQKLQotMjAwNS0xMC0xNSAxNTozMDoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIGdzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGJ1ZmZlcnN0b3JlLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5Lmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JKiBnc3QvZ2xpYi1jb21wYXQuYzoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RidXMuaDoKLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOgotCSogZ3N0L2dzdGNsb2NrLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0Zm9ybWF0LmM6Ci0JKiBnc3QvZ3N0Zm9ybWF0Lmg6Ci0JKiBnc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGdzdC9nc3RpbmRleC5jOgotCSogZ3N0L2dzdGluZGV4Lmg6Ci0JKiBnc3QvZ3N0aW5kZXhmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0aW5kZXhmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIGdzdC9nc3RpbnRlcmZhY2UuYzoKLQkqIGdzdC9nc3RpdGVyYXRvci5jOgotCSogZ3N0L2dzdG1hY3Jvcy5oOgotCSogZ3N0L2dzdG1lbWNodW5rLmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzoKLQkqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSogZ3N0L2dzdHF1ZXJ5LmM6Ci0JKiBnc3QvZ3N0cXVlcnkuaDoKLQkqIGdzdC9nc3RxdWV1ZS5jOgotCSogZ3N0L2dzdHF1ZXVlLmg6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSogZ3N0L2dzdHRyYWNlLmM6Ci0JKiBnc3QvZ3N0dHJhY2UuaDoKLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVmaW5kLmg6Ci0JKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0dHlwZWZpbmRmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0dXJpLmM6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvZ3N0dmFsdWUuaDoKLQkqIGdzdC9pbmRleGVycy9nc3RmaWxlaW5kZXguYzoKLQkqIGdzdC9pbmRleGVycy9nc3RtZW1pbmRleC5jOgotCSogZ3N0L3BhcnNlL3R5cGVzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0YnVmZmVyc3RvcmUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JKiBwbHVnaW5zL2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOgotCSogcGx1Z2lucy9pbmRleGVycy9nc3RtZW1pbmRleC5jOgotCSAgd2hpdGVzcGFjZSBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDUtMTAtMTUgMTU6MDE6MzkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb25maWd1cmUuYWM6IGNoZWNrIGZvciBzb21lIGhlYWRlcnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBjaGVjayBmb3Igc29tZSBoZWFkZXJzCi0JICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JICBkb24ndCBjb21waWxlIGZkc3JjIHdpdGhvdXQgc3lzL3NvY2tldC5oCi0JICAqIGdzdC9pbmRleGVycy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2luZGV4ZXJzL2dzdGluZGV4ZXJzLmM6IChwbHVnaW5faW5pdCk6Ci0JICBkb24ndCBjb21waWxlIGZpbGVpbmRleCB3aXRob3V0IG1tYXAKLQotMjAwNS0xMC0xNSAxMzo1ODoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogcmVvcmdhbml6ZSBjbGVhbiB1cCBkb2N1bWVudCBtb3JlIHJlbW92ZSBjcnVmdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlb3JnYW5pemUKLQkgIGNsZWFuIHVwCi0JICBkb2N1bWVudCBtb3JlCi0JICByZW1vdmUgY3J1ZnQKLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBleGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2luZGV4ZXJzL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkgICogZXhhbXBsZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmM6IChldmVudF9sb29wKToKLQkgIGNvbXBpbGUgZml4ZXMsIHRob3VnaCBpdCdzIG5vdCBiZWluZyBjb21waWxlZCBjdXJyZW50bHkKLQotMjAwNS0xMC0xNSAxMzoyNDo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci5wYy5pbjoKLQkgIGNsZWFuIHVwIHBjIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNsZWFuIHVwIHBjIGZpbGVzCi0KLTIwMDUtMTAtMTUgMTI6MDM6MzIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBsaWJzL2dzdC9nZXRiaXRzLy5naXRpZ25vcmU6Ci0JICByZW1vdmUgZGlyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBkaXIKLQotMjAwNS0xMC0xNSAxMDozNDoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGdzdC9zY2hlZHVsZXJzLy5naXRpZ25vcmU6Ci0JICByZW1vdmUgZGlyZWN0b3J5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBkaXJlY3RvcnkKLQotMjAwNS0xMC0xNSAwMDoyMjowMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JKiBnc3QvZ3N0c3RydWN0dXJlLmM6Ci0JKiBnc3QvZ3N0dXJpLmM6Ci0JICBzaWduZWRuZXNzL3R5cGUgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc2lnbmVkbmVzcy90eXBlIGZpeGVzCi0KLTIwMDUtMTAtMTUgMDA6MjA6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIHNpZ25lZG5lc3MvdHlwZSBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzaWduZWRuZXNzL3R5cGUgZml4ZXMKLQotMjAwNS0xMC0xNSAwMDoxNTo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBzaWduZWRuZXNzIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHNpZ25lZG5lc3MgZml4ZXMKLQotMjAwNS0xMC0xNSAwMDoxMjoyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RjYXBzLmM6Ci0JKiBnc3QvZ3N0Y2Fwcy5oOgotCSAgc2lnbmVkbmVzcyBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzaWduZWRuZXNzIGZpeGVzCi0KLTIwMDUtMTAtMTQgMTc6MDE6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNoZWNrL2dzdC9nc3R0YWcuYzogQWRkIHNvbWUgc2ltcGxlIHRlc3RzIGZvciB0aGUgbmV3IHRhZ2xpc3QgZGF0ZSBBUEkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHRhZy5jOiAodGVzdF9kYXRlX3RhZ3MpLCAoZ3N0X3RhZ19zdWl0ZSk6Ci0JICBBZGQgc29tZSBzaW1wbGUgdGVzdHMgZm9yIHRoZSBuZXcgdGFnbGlzdCBkYXRlIEFQSS4KLQotMjAwNS0xMC0xNCAxNDoxMDoyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2VsZW1lbnRzLzogQmVhdXRpZnkgJ2xhc3QtbWVzc2FnZScgb3V0cHV0OiBwcmludCAnbm9uZScgZm9yIGJ1ZmZlciB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbnMgaWYgbm9uZSBpcyBzZXQ7IGltcHJvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX3JlbmRlcik6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfY3JlYXRlKToKLQkgIEJlYXV0aWZ5ICdsYXN0LW1lc3NhZ2UnIG91dHB1dDogcHJpbnQgJ25vbmUnIGZvciBidWZmZXIgdGltZXN0YW1wcwotCSAgYW5kIGR1cmF0aW9ucyBpZiBub25lIGlzIHNldDsgaW1wcm92ZSBhbGlnbm1lbnQgd2l0aCBuZXh0IG1lc3NhZ2VzLgotCi0yMDA1LTEwLTE0IDExOjA5OjI5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBZGQgbmV3IEFQSSB0byBjaGVjayBwbHVnaW4gZmVhdHVyZSB2ZXJzaW9uIHJlcXVpcmVtZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2NoZWNrX3ZlcnNpb24pOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogKGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbik6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgQWRkIG5ldyBBUEkgdG8gY2hlY2sgcGx1Z2luIGZlYXR1cmUgdmVyc2lvbiByZXF1aXJlbWVudHMuCi0JICAqIGNoZWNrL2dzdC9nc3RwbHVnaW4uYzogKHRlc3RfdmVyc2lvbl9jaGVja3MpLCAoZ3N0X3BsdWdpbl9zdWl0ZSk6Ci0JICBTb21lIGJhc2ljIHRlc3RzIGZvciB0aGUgYWJvdmUuCi0KLTIwMDUtMTAtMTMgMjE6Mjc6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0c3RydWN0dXJlLmM6IGd1YXJkIGFnYWluc3QgTlVMTCBwcmludGYgLSBoYXBwZW5zIHdoZW4gZm9yIGV4YW1wbGUgYSBtZXNzYWdlIHN0cnVjdHVyZSB3aXRoIEdzdENsb2NrIGdldHMgc2VyaWEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcpOgotCSAgZ3VhcmQgYWdhaW5zdCBOVUxMIHByaW50ZiAtIGhhcHBlbnMgd2hlbiBmb3IgZXhhbXBsZQotCSAgYSBtZXNzYWdlIHN0cnVjdHVyZSB3aXRoIEdzdENsb2NrIGdldHMgc2VyaWFsaXplZAotCi0yMDA1LTEwLTEzIDE4OjMzOjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBGaXggcHJlc3VtYWJsZSBjb3B5J24ncGFzdG8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0cGFkc19ldmVudCk6Ci0JICBGaXggcHJlc3VtYWJsZSBjb3B5J24ncGFzdG8uCi0KLTIwMDUtMTAtMTMgMTc6NTE6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgIGFkZCBjb3JyZWN0IGhlYWRlciBmb3IgV0lOMzIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGNvcnJlY3QgaGVhZGVyIGZvciBXSU4zMgotCi0yMDA1LTEwLTEzIDE3OjQzOjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2VsZW1lbnRzLzogZml4IHNvbWUgc2lnbmVkbmVzcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmg6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6IChnc3RfZmlsZV9zcmNfY3JlYXRlX3JlYWQpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBmaXggc29tZSBzaWduZWRuZXNzCi0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgotCSAgSSB3b25kZXIgaWYgdGhpcyBjb3VsZCBhY3R1YWxseSB3cml0ZSArMkdCIGZpbGVzIGJlZm9yZQotCi0yMDA1LTEwLTEzIDE3OjI0OjUzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWY6Ci0JICBhZGQgYW4gZXhwb3J0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBhbiBleHBvcnQKLQotMjAwNS0xMC0xMyAxNzoyMDo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nbGliLWNvbXBhdC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSAgaW5jbHVkZSBoZWFkZXIgY29ycmVjdGx5OyBzaG93IG1lIHRoZSBuYW1lCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGluY2x1ZGUgaGVhZGVyIGNvcnJlY3RseTsgc2hvdyBtZSB0aGUgbmFtZQotCi0yMDA1LTEwLTEzIDE2OjM0OjA0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIGZvbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmb28KLQotMjAwNS0xMC0xMyAxNjoyNjoxMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmMgKGdzdF9kcF9wYWNrZXRfZnJvbV9jYXBzKTogRml4IFRpbW1la2UgV2F5bWFucyBidWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYyAoZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHMpOgotCSAgRml4IFRpbW1la2UgV2F5bWFucyBidWcuCi0JICAoZ3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQpOiBNYWtlIHN1cmUgd2UgcGFzcyBhIE5VTC10ZXJtaW5hdGVkCi0JICBzdHJpbmcgb2YgdGhlIHByb3BlciBsZW5ndGggdG8gZ3N0X2NhcHNfZnJvbV9zdHJpbmcuIFRoZXJlJ3MgYQotCSAgcG90ZW50aWFsIGZvciwgYmVmb3JlIHRoaXMgZml4LCB0aGF0IHRoaXMgY291bGQgY2F1c2Ugc29tZW9uZQotCSAgY29ubmVjdGluZyBvdmVyIHRoZSBuZXR3b3JrIHRvIGNhdXNlIGEgc2VnZmF1bHQgaWYgdGhlIHBheWxvYWQgaXMKLQkgIG5vdCBOVUwtdGVybWluYXRlZC4KLQotMjAwNS0xMC0xMyAxNToyNzo0MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBmaXhlZCB0eXBvcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LXB1c2gtcHVsbC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OgotCSAgKiBkb2NzL3JhbmRvbS9UT0RPLXByZS0wLjk6Ci0JICAqIGRvY3MvcmFuZG9tL29sZC9DaGFuZ2VMb2cuZ3N0cmVhbWVyOgotCSAgKiBnc3QvYmFzZS9nc3RwdXNoc3JjLmM6Ci0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgZml4ZWQgdHlwb3MKLQotMjAwNS0xMC0xMyAxNToyMzo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IEdMaWIgMi42IGdfZmxhZ3NfZ2V0X2ZpcnN0X3ZhbHVlIGhhcyBhIGJ1ZyB0aGF0IHRyaWdnZXJzIGFuIGluZmluaXRlIGxvb3AKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzogKGdzdF9mbGFnc19nZXRfZmlyc3RfdmFsdWUpOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuaDoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZGVzZXJpYWxpemVfaW50X2hlbHBlciksCi0JICAoZ3N0X3ZhbHVlX2NvbXBhcmVfZG91YmxlKSwgKGdzdF92YWx1ZV9zZXJpYWxpemVfZmxhZ3MpOgotCSAgR0xpYiAyLjYgZ19mbGFnc19nZXRfZmlyc3RfdmFsdWUgaGFzIGEgYnVnIHRoYXQgdHJpZ2dlcnMgYW4KLQkgIGluZmluaXRlIGxvb3AKLQotMjAwNS0xMC0xMyAxNToyMjoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9iYXNlLzogZml4IHVwIGRlYnVnZ2luZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSk6Ci0JICBmaXggdXAgZGVidWdnaW5nCi0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgotCSAgcHJpbnQgb3V0IGNsb2NrIG5pY2VseQotCi0yMDA1LTEwLTEzIDE1OjEzOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBZGRlZCBnc3RfdGFnX2xpc3RfZ2V0X2RhdGUoKSBhbmQgZ3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4KCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuaDoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzogKF9nc3RfdGFnX2luaXRpYWxpemUpLCAoZ3N0X3RhZ19saXN0X2dldF9kYXRlKSwKLQkgIChnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXgpOgotCSAgQWRkZWQgZ3N0X3RhZ19saXN0X2dldF9kYXRlKCkgYW5kIGdzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleCgpLgotCSAgR1NUX1RBR19EQVRFIG5vdyBoYXMgYSB0YWcgdHlwZSBvZiBHU1RfVFlQRV9EQVRFICgjMTcwNzc3KS4KLQotMjAwNS0xMC0xMyAxNDo1NToxNyArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLio6IEhhbmRsZSBuZXdzZWdtZW50IGFuZCBzdG9yZSBpbmZvcm1hdGlvbnMgaW4gQ29sbGVjdERhdGEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTMgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzogKGdzdF9jb2xsZWN0cGFkc19ldmVudCksCi0JICAoZ3N0X2NvbGxlY3RwYWRzX2NoYWluKToKLQkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDogSGFuZGxlIG5ld3NlZ21lbnQgYW5kIHN0b3JlCi0JICBpbmZvcm1hdGlvbnMKLQkgIGluIENvbGxlY3REYXRhLgotCi0yMDA1LTEwLTEzIDA5OjU3OjE1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGZpeCBHT3B0aW9uIGNvbnRleHQgbGVha3MgZG9jIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdC5jOgotCSAgKiBnc3QvZ3N0ZXJyb3IuaDoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKLQkgICogdG9vbHMvZ3N0LXJ1bi5jOiAobWFpbik6Ci0JICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6IChtYWluKToKLQkgIGZpeCBHT3B0aW9uIGNvbnRleHQgbGVha3MKLQkgIGRvYyBmaXhlcwotCi0yMDA1LTEwLTEyIDIyOjM0OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGJ1cy5jOiB1c2UgSEFWRV9VTklTVERfSAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidXMuYzoKLQkgIHVzZSBIQVZFX1VOSVNURF9ICi0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHVwZGF0ZSBjb25maWcKLQkgICogd2luMzIvdnM2L2dyYW1tYXIuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0ZWxlbWVudHMuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0cmVhbWVyLmRzcDoKLQkgIHVwZGF0ZSB2czYgZmlsZXMKLQotMjAwNS0xMC0xMiAyMjowMDo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZjoKLQkgIGhhZCBhIGZldyB0b28gbWFueSAwRCBieXRlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBoYWQgYSBmZXcgdG9vIG1hbnkgMEQgYnl0ZXMKLQotMjAwNS0xMC0xMiAyMTo1Njo1MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9iYXNlLzogZml4IG1vcmUgZ3VpbnQ2NDwtPmdkb3VibGUgY29udmVyc2lvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KToKLQkgIGZpeCBtb3JlIGd1aW50NjQ8LT5nZG91YmxlIGNvbnZlcnNpb25zCi0KLTIwMDUtMTAtMTIgMjA6MjM6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBNYWtlZmlsZS5hbTogYWRkIHdpbjMyLXVwZGF0ZSB0YXJnZXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNYWtlZmlsZS5hbToKLQkgIGFkZCB3aW4zMi11cGRhdGUgdGFyZ2V0Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaDoKLQkgICogd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jOgotCSAgKiB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmg6Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmg6Ci0JICBhZGQgZmlsZXMgdGhhdCB2aXN1YWwgc3R1ZGlvIGNhbid0IGdlbmVyYXRlCi0KLTIwMDUtMTAtMTIgMTk6Mzg6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFByb3RlY3QgZmxhZ3Mgd2l0aCBwcm9wZXIgbG9jay4gdW5yZWYgcHJvdmlkZWQgY2FjaGVkIGNsb2NrIGluIGRpc3Bvc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX3JlbW92ZV9mdW5jKSwKLQkgIChyZXNldF9kZWdyZWUpLCAoZ3N0X2Jpbl9kaXNwb3NlKSwgKGJpbl9idXNfaGFuZGxlcik6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSk6Ci0JICBQcm90ZWN0IGZsYWdzIHdpdGggcHJvcGVyIGxvY2suCi0JICB1bnJlZiBwcm92aWRlZCBjYWNoZWQgY2xvY2sgaW4gZGlzcG9zZS4KLQotMjAwNS0xMC0xMiAxOToxNDoyMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIGxheW91dCBjbGVhbnVwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGxheW91dCBjbGVhbnVwCi0KLTIwMDUtMTAtMTIgMTk6MTA6NDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcmVtb3ZlZCB1bnVzZWQgZmxhZ3MgZnJvbSBtaW5pb2JqZWN0IGRvYyBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuaDoKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgKiB3aW4zMi9nc3RlbnVtdHlwZXMuYzogKGdzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZSk6Ci0JICByZW1vdmVkIHVudXNlZCBmbGFncyBmcm9tIG1pbmlvYmplY3QKLQkgIGRvYyBmaXhlcwotCi0yMDA1LTEwLTEyIDE4OjAzOjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvdnM2L2dyYW1tYXIuZHNwOgotCSogd2luMzIvdnM2L2dzdF9pbnNwZWN0LmRzcDoKLQkqIHdpbjMyL3ZzNi9nc3RfbGF1bmNoLmRzcDoKLQkqIHdpbjMyL3ZzNi9nc3RyZWFtZXIuZHN3OgotCSogd2luMzIvdnM2L2xpYmdzdGJhc2UuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGVsZW1lbnRzLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgotCSAgY29udmVydCB0byB1bml4IGxpbmUgZW5kczsgc2luY2UgdGhlIHNvdXJjZSBpcyBhbHNvIHVuaXgtc3R5bGUgbGluZSBlbmRzLCBkZXZlbG9wZXJzIGRvbid0IG5lZWQgdG8gZmlkZGxlIGFuZCBzcGVjaWFsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbnZlcnQgdG8gdW5peCBsaW5lIGVuZHM7IHNpbmNlIHRoZSBzb3VyY2UgaXMgYWxzbyB1bml4LXN0eWxlIGxpbmUgZW5kcywgZGV2ZWxvcGVycyBkb24ndCBuZWVkIHRvIGZpZGRsZSBhbmQgc3BlY2lhbC1jYXNlLCBidXQgY2FuIGp1c3QgYWxsb3cgdHJhbnNsYXRpb24gb24gdGhlIGZseQotCi0yMDA1LTEwLTEyIDE2OjAzOjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogRmx1c2ggYmVmb3JlIHNlZWtpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2RvX3NlZWspLAotCSAgKGdzdF9maWxlX3NpbmtfZXZlbnQpLCAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgotCSAgRmx1c2ggYmVmb3JlIHNlZWtpbmcuCi0KLTIwMDUtMTAtMTIgMTU6NTg6MjQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdC5jIChnc3RfaW5pdF9jaGVjayk6IElnbm9yZSB1bmtub3duIG9wdGlvbnMsIGFzIGhhcyBhbHdheXMgYmVlbiB0aGUgY2FzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdC5jIChnc3RfaW5pdF9jaGVjayk6IElnbm9yZSB1bmtub3duIG9wdGlvbnMsIGFzIGhhcwotCSAgYWx3YXlzIGJlZW4gdGhlIGNhc2UuCi0KLTIwMDUtMTAtMTIgMTQ6Mjg6MzkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcmVuYW1lZCBHU1RfRkxBR1MgbWFjcm9zIHRvIEdTVF9PQkpFQ1RfRkxBR1MgbW92ZWQgYml0c2hpZnQgZnJvbSBtYWNybyB0byBlbnVtIGRlZmluaXRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2luaXQpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksIChnc3RfYmFzZV9zcmNfY2hlY2tfZ2V0X3JhbmdlKSwKLQkgIChnc3RfYmFzZV9zcmNfc3RhcnQpLCAoZ3N0X2Jhc2Vfc3JjX3N0b3ApOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZV9zcmNfc2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX3JlbW92ZV9mdW5jKSwKLQkgIChiaW5fZWxlbWVudF9pc19zaW5rKSwgKHJlc2V0X2RlZ3JlZSksIChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKSwKLQkgIChiaW5fYnVzX2hhbmRsZXIpOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KSwgKGdzdF9idXNfc2V0X2ZsdXNoaW5nKToKLQkgICogZ3N0L2dzdGJ1cy5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlKSwKLQkgIChnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKSwgKGdzdF9lbGVtZW50X2NvbW1pdF9zdGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgICogZ3N0L2dzdGluZGV4LmM6IChnc3RfaW5kZXhfaW5pdCk6Ci0JICAqIGdzdC9nc3RpbmRleC5oOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2luaXQpLCAoZ3N0X29iamVjdF9zaW5rKSwKLQkgIChnc3Rfb2JqZWN0X3NldF9wYXJlbnQpOgotCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2Jsb2NrZWRfYXN5bmMpLCAoZ3N0X3BhZF9pc19ibG9ja2VkKSwKLQkgIChnc3RfcGFkX2dldF9jYXBzX3VubG9ja2VkKSwgKGdzdF9wYWRfc2V0X2NhcHMpOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICAqIGdzdC9nc3RwYWR0ZW1wbGF0ZS5oOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMpLAotCSAgKGdzdF9waXBlbGluZV91c2VfY2xvY2spLCAoZ3N0X3BpcGVsaW5lX2F1dG9fY2xvY2spOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkgICogZ3N0L2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOiAoZ3N0X2ZpbGVfaW5kZXhfbG9hZCksCi0JICAoZ3N0X2ZpbGVfaW5kZXhfY29tbWl0KToKLQkgICogdGVzdHN1aXRlL2J5dGVzdHJlYW0vZmlsZXBhZHNpbmsuYzogKGdzdF9mcF9zaW5rX2luaXQpOgotCSAgKiB0ZXN0c3VpdGUvcGFkL2xpbmsuYzogKGdzdF90ZXN0X3NyY19pbml0KSwKLQkgIChnc3RfdGVzdF9maWx0ZXJfaW5pdCksIChnc3RfdGVzdF9zaW5rX2luaXQpOgotCSAgKiB0ZXN0c3VpdGUvc3RhdGVzL2xvY2tlZC5jOiAobWFpbik6Ci0JICByZW5hbWVkIEdTVF9GTEFHUyBtYWNyb3MgdG8gR1NUX09CSkVDVF9GTEFHUwotCSAgbW92ZWQgYml0c2hpZnQgZnJvbSBtYWNybyB0byBlbnVtIGRlZmluaXRpb24KLQotMjAwNS0xMC0xMiAxNDoxMjozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogU29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9maWxlX3NpbmtfcmVuZGVyKToKLQkgIFNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW5mby4KLQotMjAwNS0xMC0xMiAxMjo1ODo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgU29tZSBkb2MgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXN0YXRlcy50eHQ6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgotCSAgU29tZSBkb2MgdXBkYXRlcy4KLQkgIFJldmVydCBub24taW50ZW50aW9uYWwgY2hhbmdlLgotCi0yMDA1LTEwLTEyIDEyOjE4OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBVc2UgR3N0Q2xvY2tUaW1lIGluIF9nZXRfc3RhdGUoKSBpbnN0ZWFkIG9mIEdUaW1lVmFsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogY2hlY2svZ3N0L2dzdGV2ZW50LmM6IChHU1RfU1RBUlRfVEVTVCksICh0ZXN0X2V2ZW50KToKLQkgICogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOiAocnVuX3BpcGVsaW5lKToKLQkgICogY2hlY2svc3RhdGVzL3NpbmtzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKHN0b3BfdHlwZWZpbmRpbmcpOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX3Byb3ZpZGVfY2xvY2tfZnVuYyksIChnc3RfYmluX2FkZF9mdW5jKSwKLQkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5fZ2V0X3N0YXRlX2Z1bmMpLAotCSAgKGdzdF9iaW5fcmVjYWxjX3N0YXRlKSwgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpLAotCSAgKGJpbl9idXNfaGFuZGxlcik6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksCi0JICAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKSwgKGdzdF9lbGVtZW50X2Fib3J0X3N0YXRlKSwKLQkgIChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKSwKLQkgIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlX2Z1bmMpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwgKGRvX3BpcGVsaW5lX3NlZWspLAotCSAgKGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMpOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCk6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QtdHlwZWZpbmQuYzogKG1haW4pOgotCSAgVXNlIEdzdENsb2NrVGltZSBpbiBfZ2V0X3N0YXRlKCkgaW5zdGVhZCBvZiBHVGltZVZhbC4KLQkgIFJlbW92ZSBvbGQgY29kZSBpbiBnc3R1dGlscy5jCi0KLTIwMDUtMTAtMTIgMTE6NDk6MzUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3BhdXNlX3Rhc2spOiBBY3R1YWxseSByZXR1cm4gRkFMU0UgaWYgdGhlcmUgaXMgbm8gdGFzay4gU2hvdWxkbid0IGFmZmVjdCBhbnkgY29kZSwgYXMgbm90aGluZyBpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9wYXVzZV90YXNrKTogQWN0dWFsbHkgcmV0dXJuIEZBTFNFIGlmCi0JICB0aGVyZSBpcyBubyB0YXNrLiBTaG91bGRuJ3QgYWZmZWN0IGFueSBjb2RlLCBhcyBub3RoaW5nIGluIG91cgotCSAgcGx1Z2lucyBjaGVja3MgdGhpcyByZXR1cm4gdmFsdWUuCi0JICAoZ3N0X3BhZF9zdG9wX3Rhc2spOiBBbHNvIHRha2UgdGhlIHN0cmVhbSBsb2NrIGlmIHRoZSBwYWQgaGFzIG5vCi0JICB0YXNrLiBEb2NzIHVwZGF0ZWQuCi0KLTIwMDUtMTAtMTIgMTA6MDU6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogQ2xlYW51cCBhY3RpdmF0aW9uIGNvZGUuIFJlc2V0IG9sZCBzdGF0ZSBpZiBhY3RpdmF0aW9uIGZhaWxlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChwcmVfYWN0aXZhdGUpLCAocG9zdF9hY3RpdmF0ZSksCi0JICAoZ3N0X3BhZF9hY3RpdmF0ZV9wdWxsKSwgKGdzdF9wYWRfYWN0aXZhdGVfcHVzaCk6Ci0JICBDbGVhbnVwIGFjdGl2YXRpb24gY29kZS4gUmVzZXQgb2xkIHN0YXRlIGlmCi0JICBhY3RpdmF0aW9uIGZhaWxlZC4KLQotMjAwNS0xMC0xMiAwOTowMjo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogTm8gbmVlZCB0byBwcmVyb2wgYWZ0ZXIgcmVjZWl2aW5nIEVPUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBObyBuZWVkIHRvIHByZXJvbCBhZnRlciByZWNlaXZpbmcgRU9TLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfZXZlbnQpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2V2ZW50X2hhbmRsZXIpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9ldmVudCk6Ci0JICBQcmludCBldmVudHMgbW9yZSB2ZXJib3NlbHkuCi0KLTIwMDUtMTAtMTIgMDg6Mzg6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrLzogTW92ZWQgc2lua3MyIHRlc3Rjb2RlIGluIHNpbmtzIGNoZWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9vYmplY3Rfc3VpdGUpOgotCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MyLmM6Ci0JICBNb3ZlZCBzaW5rczIgdGVzdGNvZGUgaW4gc2lua3MgY2hlY2suCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAotCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpLCAoYmluX2J1c19oYW5kbGVyKToKLQkgIEZpeCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gd2hlbiBfZ2V0X3N0YXRlKCkgaXRlcmF0ZWQgb3ZlciBhbgotCSAgQVNZTkMgZWxlbWVudCByaWdodCBiZWZvcmUgaXQgcG9zdGVkIGEgc3RhdGUgY29tcGxldGlvbi4KLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBEbyBwcm9wZXIgY2FzdCBoZXJlLgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfbmV3c2VnbWVudCksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX25ld3NlZ21lbnQpOgotCSAgQSBwbGF5YmFjayByYXRlIG9mIDAuMCBpcyBub3QgYWxsb3dlZC4KLQotMjAwNS0xMC0xMiAwMjoyNjo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JICBhdXRvY29uZiBmb3IgZnJlZWJzZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhdXRvY29uZiBmb3IgZnJlZWJzZAotCi0yMDA1LTEwLTEyIDAyOjI1OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogYXV0b2dlbi5zaDoKLQkgIGF1dG9jb25mIGZvciBmcmVlYnNkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGF1dG9jb25mIGZvciBmcmVlYnNkCi0KLTIwMDUtMTAtMTIgMDI6MjM6MjkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgYXV0b2NvbmYgZm9yIGZyZWVic2QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYXV0b2NvbmYgZm9yIGZyZWVic2QKLQotMjAwNS0xMC0xMiAwMjoxOTozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JICBhdXRvY29uZiBmb3IgZnJlZWJzZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhdXRvY29uZiBmb3IgZnJlZWJzZAotCi0yMDA1LTEwLTEyIDAyOjE2OjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogYXV0b2dlbi5zaDoKLQkgIGF1dG9jb25mIGZvciBmcmVlYnNkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGF1dG9jb25mIGZvciBmcmVlYnNkCi0KLTIwMDUtMTAtMTEgMTg6MDM6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB3aW4zMi86IFZpc3VhbCBTdHVkaW8gNiBwcm9qZWN0IGZpbGVzLCBhbmQgYSBuZXcgY29tbW9uIGRpcmVjdG9yeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgKiB3aW4zMi9jb21tb24vZGlyZW50LmM6IChfdG9wZW5kaXIpLCAoX3RyZWFkZGlyKSwgKF90Y2xvc2VkaXIpLAotCSAgKF90cmV3aW5kZGlyKSwgKF90dGVsbGRpciksIChfdHNlZWtkaXIpOgotCSAgKiB3aW4zMi9jb21tb24vZGlyZW50Lmg6Ci0JICAqIHdpbjMyL2NvbW1vbi9ndGNoYXIuaDoKLQkgICogd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0cmVhbWVyLmRlZjoKLQkgICogd2luMzIvdnM2L2dyYW1tYXIuZHNwOgotCSAgKiB3aW4zMi92czYvZ3N0X2luc3BlY3QuZHNwOgotCSAgKiB3aW4zMi92czYvZ3N0X2xhdW5jaC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9nc3RyZWFtZXIuZHN3OgotCSAgKiB3aW4zMi92czYvbGliZ3N0YmFzZS5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RlbGVtZW50cy5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RyZWFtZXIuZHNwOgotCSAgVmlzdWFsIFN0dWRpbyA2IHByb2plY3QgZmlsZXMsIGFuZCBhIG5ldyBjb21tb24gZGlyZWN0b3J5LgotCSAgUGhlYXIuCi0KLTIwMDUtMTAtMTEgMTc6MzM6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBmb3Jnb3QgdGhpcyBvbmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZm9yZ290IHRoaXMgb25lCi0KLTIwMDUtMTAtMTEgMTc6MzI6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLio6IENvcnJlY3RseSBwYXJzZSBuZXdzZWdtZW50IGluZm8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwgKGdzdF9iYXNlX3NpbmtfcXVlcnkpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIENvcnJlY3RseSBwYXJzZSBuZXdzZWdtZW50IGluZm8uCi0KLTIwMDUtMTAtMTEgMTY6NTQ6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0LmM6IHNwbGl0IHBsdWdpbiBwYXRocyBjb3JyZWN0bHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKLQkgIHNwbGl0IHBsdWdpbiBwYXRocyBjb3JyZWN0bHkKLQotMjAwNS0xMC0xMSAxNjoyODo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWRkZWQgZXh0cmEgZmxhZyB0byBuZXdzZWdtZW50IGZvciBmdXR1cmUgQVBJIGZyZWV6ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZXdzZWdtZW50KToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2V2ZW50KToKLQkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfbmV3X25ld3NlZ21lbnQpLAotCSAgKGdzdF9ldmVudF9wYXJzZV9uZXdzZWdtZW50KToKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBBZGRlZCBleHRyYSBmbGFnIHRvIG5ld3NlZ21lbnQgZm9yIGZ1dHVyZSBBUEkgZnJlZXplLgotCSAgVXBkYXRlZCBjaGVjayBhbmQgYmFzZSBlbGVtZW50cy4KLQotMjAwNS0xMC0xMSAxNjoyNTozNSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLio6IEhhbmRsZSBFT1MgY29ycmVjdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTExICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdHBhZHNfaW5pdCksCi0JICAoZ3N0X2NvbGxlY3RwYWRzX2FkZF9wYWQpLCAoZ3N0X2NvbGxlY3RwYWRzX3BvcCksCi0JICAoZ3N0X2NvbGxlY3RwYWRzX2V2ZW50KSwgKGdzdF9jb2xsZWN0cGFkc19jaGFpbik6Ci0JICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg6IEhhbmRsZSBFT1MgY29ycmVjdGx5LgotCi0yMDA1LTEwLTExIDE2OjIxOjA1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgbW9yZSBzdHIgbnVsbCBwcm90ZWN0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vcmUgc3RyIG51bGwgcHJvdGVjdGlvbgotCi0yMDA1LTEwLTExIDE2OjA1OjE2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdC1pMThuLWxpYi5oOiBjaGVjayBmb3IgRU5BQkxFX05MUywgbm90IEdFVFRFWFRfUEFDS0FHRQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QtaTE4bi1saWIuaDoKLQkgIGNoZWNrIGZvciBFTkFCTEVfTkxTLCBub3QgR0VUVEVYVF9QQUNLQUdFCi0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4pLAotCSAgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpLAotCSAgKF9nc3RfcmVnaXN0cnlfcmVtb3ZlX2NhY2hlX3BsdWdpbnMpOgotCSAgcHJvdGVjdCBwb3NzaWJseSBOVUxMIHN0cmluZ3MKLQkgICogZ3N0L3BhcnNlL3R5cGVzLmg6Ci0JICBjb25maWcuaCBhbHJlYWR5IGluY2x1ZGVkIGJlZm9yZQotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAobWFpbik6Ci0JICBzeXMvd2FpdC5oIGFsc28gZG9lc260dCBleGlzdCBvbiBtaW5ndywgc28gY2hhbmdlIHRoZSBpZmRlZiBjaGVjawotCSAgY2hlY2sgZm9yIEVOQUJMRV9OTFMsIG5vdCBHRVRURVhUX1BBQ0tBR0UKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6Ci0JICBjaGVjayBmb3IgRU5BQkxFX05MUywgbm90IEdFVFRFWFRfUEFDS0FHRQotCSAgVGhpcyBjb21taXQgYnJvdWdodCB0byB5b3UgZnJvbSBtc3lzL21pbmd3Ci0KLTIwMDUtMTAtMTEgMTU6MjY6NTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb25maWd1cmUuYWM6IGlmIHdlIGRvbid0IGhhdmUgZ2xpYiwgZmFpbCBiZWZvcmUgdGVzdGluZyAyLjgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBpZiB3ZSBkb24ndCBoYXZlIGdsaWIsIGZhaWwgYmVmb3JlIHRlc3RpbmcgMi44Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOgotCSAgZml4IGEgbGVhaywgc2hvdWxkIGZpeCBwbHVnaW5zLWJhc2UgdGVzdHN1aXRlCi0KLTIwMDUtMTAtMTEgMTU6MjM6MTAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jIChwcmVfYWN0aXZhdGUpOiBSZW5hbWVkIGZyb20gcHJlX2FjdGl2YXRlX3N3aXRjaCwgdGFrZSB0aGUgbW9kZSB3ZSdyZSBnb2luZyB0byBhcyBhbiBhcmcuIEdvIGhlYWQgYW5kIHNlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RwYWQuYyAocHJlX2FjdGl2YXRlKTogUmVuYW1lZCBmcm9tIHByZV9hY3RpdmF0ZV9zd2l0Y2gsCi0JICB0YWtlIHRoZSBtb2RlIHdlJ3JlIGdvaW5nIHRvIGFzIGFuIGFyZy4gR28gaGVhZCBhbmQgc2V0IHRoZSBtb2RlCi0JICBhbmQgZmx1c2hpbmcgZmxhZ3Mgbm93LCBzbyB0aGF0IGlmIHRoZSBhY3RpdmF0ZSBmdW5jdGlvbiBzdGFydHMgYQotCSAgdGhyZWFkIGFsbCB0aGUgZmxhZ3Mgd2lsbCBiZSBpbiB0aGUgcmlnaHQgc3RhdGUuCi0JICAocG9zdF9hY3RpdmF0ZSk6IFJlbmFtZWQgYWxzby4gSnVzdCBoYW5kbGUgbWFraW5nIHN1cmUgc3RyZWFtaW5nCi0JICBmaW5pc2hlcyBmb3IgdGhlIGRlYWN0aXZhdGlvbiBjYXNlLCBhbmQgc2V0dGluZyB0aGUgZGVhY3RpdmF0ZWQKLQkgIG1vZGUuCi0JICAoZ3N0X3BhZF9zZXRfYWN0aXZlKTogQ29tcGxhaW4gbG91ZGx5IGlmIGRlYWN0aXZhdGlvbiBmYWlscy4KLQkgIChnc3RfcGFkX2FjdGl2YXRlX3B1bGwpOiBBZGFwdCB0byBwcmUvcG9zdF9hY3RpdmF0ZSBjaGFuZ2VzLgotCSAgKGdzdF9wYWRfYWN0aXZhdGVfcHVzaCk6IEFkYXB0IHRvIHByZS9wb3N0X2FjdGl2YXRlIGNoYW5nZXMsCi0JICByZW1vdmUgdGhlIHRlcnJpYmxlIGhhY2suCi0KLTIwMDUtMTAtMTEgMTU6MDU6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uKjogUHJlcGFyZSB0byBtYWtlIGN1cnJlbnQgRU9TIG1lc3NhZ2UgcXVldWUgbW9yZSBnZW5lcmljLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faW5pdCksIChnc3RfYmluX3Byb3ZpZGVfY2xvY2tfZnVuYyksCi0JICAoaXNfZW9zKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksCi0JICAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpLCAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyksCi0JICAoZ3N0X2Jpbl9kaXNwb3NlKSwgKGJpbl9idXNfaGFuZGxlcik6Ci0JICAqIGdzdC9nc3RiaW4uaDoKLQkgIFByZXBhcmUgdG8gbWFrZSBjdXJyZW50IEVPUyBtZXNzYWdlIHF1ZXVlIG1vcmUgZ2VuZXJpYy4KLQkgIEZpeCBzb21lIHR5cG9zLgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfbmV3c2VnbWVudCksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX25ld3NlZ21lbnQpOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIFJlbmFtZSBiYXNlIHRvIHN0cmVhbV90aW1lLgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgRml4IHR5cG8gaW4gZG9jcy4KLQotMjAwNS0xMC0xMSAxMjo1ODo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi4qOiBXb3JrIG9uIHByb3BlciBjbG9jayBzZWxlY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9pbml0KSwgKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKSwKLQkgIChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpLCAoYmluX2J1c19oYW5kbGVyKToKLQkgICogZ3N0L2dzdGJpbi5oOgotCSAgV29yayBvbiBwcm9wZXIgY2xvY2sgc2VsZWN0aW9uLgotCi0yMDA1LTEwLTExIDEyOjQyOjIzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuKjogQWRkZWQgR0xpc3QqIHZlcnNpb24gb2YgX3JlbW92ZV9wcm9wZXJ0aWVzKCkgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB3cmFwIGl0IGluIGIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzogKGdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX2xpc3QpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkgIEFkZGVkIEdMaXN0KiB2ZXJzaW9uIG9mIF9yZW1vdmVfcHJvcGVydGllcygpIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gd3JhcAotCSAgaXQgaW4gYmluZGluZ3MuCi0KLTIwMDUtMTAtMTEgMTE6MDg6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDogU29tZSBtb3JlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgotCSAgU29tZSBtb3JlIGRvY3MuCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fc2V0X2Nsb2NrX2Z1bmMpLCAoZ3N0X2Jpbl9yZWNhbGNfc3RhdGUpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlX2Z1bmMpLCAoYmluX2J1c19oYW5kbGVyKToKLQkgIERvYyB1cGRhdGVzLiBEb24ndCBkaXN0cmlidXRlIHRoZSBzYW1lIGNsb2NrIG92ZXIgYW5kIG92ZXIgYWdhaW4uCi0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgIERvYyB1cGRhdGVzLgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfZmxvd19nZXRfbmFtZSksIChnc3RfZmxvd190b19xdWFyayksCi0JICAoZ3N0X3BhZF9nZXRfdHlwZSksIChnc3RfcGFkX3B1c2gpLCAoZ3N0X3BhZF9wdXNoX2V2ZW50KSwKLQkgIChnc3RfcGFkX3NlbmRfZXZlbnQpOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBNYWtlIHByb2JlIGVtaXNzaW9uIHRocmVhZHNhZmUgYWdhaW4uCi0JICBSZWdpc3RlciBxdWFya3MgYW5kIG1vdmUgX2dldF9uYW1lKCkgZnJvbSB1dGlscy4KLQkgIERvYyB1cGRhdGVzLgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwKLQkgIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwgKGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMpOgotCSAgT25seSByZWRpc3RyaWJ1dGUgdGhlIGNsb2NrIG9mIGl0IGNoYW5nZWQuCi0JICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5oOgotCSAgRG9jIHVwZGF0ZXMuCi0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIE1vdmVkIHRoZSBfZmxvd19nZXRfbmFtZSgpIHRvIEdzdFBhZC4KLQotMjAwNS0xMC0xMSAwOToxNDo1OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGdzdC9nc3RidWZmZXIuYzoKLQkgIGlmIHdlIGxvZyBvdXIgaW5pdCwgc2hvdWxkIGFsc28gbG9nIGZpbmFsaXplCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGlmIHdlIGxvZyBvdXIgaW5pdCwgc2hvdWxkIGFsc28gbG9nIGZpbmFsaXplCi0KLTIwMDUtMTAtMTAgMjM6NTU6MzkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjaGVjay9nc3QtbGlicy9nZHAuYzoKLQkqIGNoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JKiBjb21tb246Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKLQkgIGZpeCBtb3JlIHZhbGdyaW5kIHdhcm5pbmdzIGJlZm9yZSB0dXJuaW5nIHVwIHRoZSBoZWF0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBtb3JlIHZhbGdyaW5kIHdhcm5pbmdzIGJlZm9yZSB0dXJuaW5nIHVwIHRoZSBoZWF0Ci0KLTIwMDUtMTAtMTAgMjM6MTE6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgZG9uJ3QgZGVjbGFyZSBvbiB0aGUgcHJvcGVyIGRlZmluZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb24ndCBkZWNsYXJlIG9uIHRoZSBwcm9wZXIgZGVmaW5lCi0KLTIwMDUtMTAtMTAgMjI6NTk6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgdW5tYW5nbGUgdGhlIG5lc3RpbmcgYSBsaXR0bGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdW5tYW5nbGUgdGhlIG5lc3RpbmcgYSBsaXR0bGUKLQotMjAwNS0xMC0xMCAyMjo0OTo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9wYXJzZS9ncmFtbWFyLnk6IHNvbWUgY2xlYW51cCBiZWZvcmUgdGhlIGhhY2tpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgc29tZSBjbGVhbnVwIGJlZm9yZSB0aGUgaGFja2luZwotCi0yMDA1LTEwLTEwIDE4OjE2OjM3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiB1c2UgY29udmVyc2lvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfcXVlcnkpOgotCSAgdXNlIGNvbnZlcnNpb25zCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSksCi0JICAoZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCksIChnc3RfdXRpbF91aW50NjRfc2NhbGUpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIGV4dGVybmFsaXplLCBiYXNlc3JjIHVzZXMgaXQKLQkgIG9idmlvdXNseSB0aGUgaW1wbGVtZW50YXRpb24gbmVlZHMgdGVzdGluZwotCi0yMDA1LTEwLTEwIDE3OjA1OjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBhbm90aGVyIGNhc3QgYml0ZXMgdGhlIGR1c3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYW5vdGhlciBjYXN0IGJpdGVzIHRoZSBkdXN0Ci0KLTIwMDUtMTAtMTAgMTY6NDU6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIGFub3RoZXIgY2FzdCBiaXRlcyB0aGUgZHVzdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhbm90aGVyIGNhc3QgYml0ZXMgdGhlIGR1c3QKLQotMjAwNS0xMC0xMCAxNjo0MzozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvc2NoZWQvOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL3NjaGVkL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9zY2hlZC9zb3J0LmM6IChtYWtlX3BpcGVsaW5lMSksIChtYWtlX3BpcGVsaW5lMiksCi0JICAobWFrZV9waXBlbGluZTMpLCAobWFrZV9waXBlbGluZTQpLCAocHJpbnRfZWxlbSksIChtYWluKToKLQotMjAwNS0xMC0xMCAxNjozODo1OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBhcHBhcmVudGx5IGNvbnZlcnRpbmcgZnJvbSBndWludDY0IHRvIGRvdWJsZSBpcyBub3QgaW1wbGVtZW50ZWQgb24gTVNWQwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3VpbnQ2NF90b19nZG91YmxlKSwgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSk6Ci0JICBhcHBhcmVudGx5IGNvbnZlcnRpbmcgZnJvbSBndWludDY0IHRvIGRvdWJsZSBpcyBub3QgaW1wbGVtZW50ZWQKLQkgIG9uIE1TVkMKLQotMjAwNS0xMC0xMCAxNjozODoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svOiBDaGVjayBmaXhlcywgdXNlIEFQSSBhcyBzdGF0ZWQgaW4gZGVzaWduIGRvY3MsIHJlbW92ZSBoYWNrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9waXBlbGluZV9zdWl0ZSk6Ci0JICAqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MyLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3Rfb2JqZWN0X3N1aXRlKSwKLQkgIChtYWluKToKLQkgIENoZWNrIGZpeGVzLCB1c2UgQVBJIGFzIHN0YXRlZCBpbiBkZXNpZ24gZG9jcywgcmVtb3ZlIGhhY2tzLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBDYXRjaCBzdG9wcGluZyBvdXIgdGFzayB3aGlsZSB3ZSdyZSBzaHV0dGluZyBkb3duLgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2luaXQpLCAoZ3N0X2Jpbl9hZGRfZnVuYyksCi0JICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX2dldF9zdGF0ZV9mdW5jKSwKLQkgIChnc3RfYmluX3JlY2FsY19zdGF0ZSksIChnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jKSwKLQkgIChiaW5fYnVzX2hhbmRsZXIpOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9pbml0KSwKLQkgIChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksIChnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwgKGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZV9mdW5jKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIE5ldyBzdGF0ZSBjaGFuZ2UgYWxnb3JpdGhtIChzZWUgIzMxODExNikKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3BpcGVsaW5lX2luaXQpLCAoZ3N0X3BpcGVsaW5lX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3BpcGVsaW5lX2dldF9wcm9wZXJ0eSksIChkb19waXBlbGluZV9zZWVrKSwKLQkgIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwgKGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMpOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkgIFJlbW92ZSBjcnVkZSBzdGF0ZSBjaGFuZ2UgaGFja3MuCi0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgUmVtb3ZlIGNydWRlIGhhY2tzLgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKLQkgIEZpeGVzIGZvciBzdGF0ZSBjaGFuZ2UuIE5lZWRzIHNvbWUgbW9yZSB3b3JrIHRvIGZ1bGx5IHVzZSB0aGUKLQkgIG5ldyBzdHVmZi4KLQotMjAwNS0xMC0xMCAxNjoyMDo0MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICB0ZXN0cy9NYWtlZmlsZS5hbSAobm9pbnN0X1BST0dSQU1TKTogTm8gbW9yZSBpbml0LmMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRlc3RzL01ha2VmaWxlLmFtIChub2luc3RfUFJPR1JBTVMpOiBObyBtb3JlIGluaXQuYy4KLQotMjAwNS0xMC0xMCAxNjowNDoyOCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0LmMgKEdfT1BUSU9OX0ZMQUdfTk9fQVJHKTogQXBwYXJlbnRseSBHTGliIDIuOCByZXF1aXJlcyB0aGlzIGZsYWcsIGJ1dCBpdCdzIG5vdCBldmVuIGluIEdMaWIgMi42LiBPZGQuIEhhY2sgYXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdC5jIChHX09QVElPTl9GTEFHX05PX0FSRyk6IEFwcGFyZW50bHkgR0xpYiAyLjggcmVxdWlyZXMKLQkgIHRoaXMgZmxhZywgYnV0IGl0J3Mgbm90IGV2ZW4gaW4gR0xpYiAyLjYuIE9kZC4gSGFjayBhcm91bmQgdGhlCi0JICBpc3N1ZS4KLQotMjAwNS0xMC0xMCAxNTo1ODozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGl0ZXJhdG9yLmM6IEZpeCBteSBwcmV2aW91cyBjb21taXQ6IEdUeXBlcyBwYXNzZWQgdG8gZ3N0X2l0ZXJhdG9yX25ldygpIGNhbiBiZSBmdW5kYW1lbnRhbCB0eXBlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzogKGdzdF9pdGVyYXRvcl9uZXcpOgotCSAgRml4IG15IHByZXZpb3VzIGNvbW1pdDogR1R5cGVzIHBhc3NlZCB0byBnc3RfaXRlcmF0b3JfbmV3KCkKLQkgIGNhbiBiZSBmdW5kYW1lbnRhbCB0eXBlcy4KLQotMjAwNS0xMC0xMCAxNTo1NTozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogVXNlIHNyYy9zaW5rIHBhZHMgbGlzdHMgZm9yIHRoZSByZXNwZWN0aXZlIGl0ZXJhdG9ycyBpbnN0ZWFkIG9mIGZpbHRlcmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRfbGlzdCksCi0JICAoZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzKSwgKGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMpLAotCSAgKGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzKToKLQkgIFVzZSBzcmMvc2luayBwYWRzIGxpc3RzIGZvciB0aGUgcmVzcGVjdGl2ZSBpdGVyYXRvcnMgaW5zdGVhZAotCSAgb2YgZmlsdGVyaW5nLgotCi0yMDA1LTEwLTEwIDE1OjUzOjU5ICswMDAwICBSb25hbGQgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgTWVyZ2VkIGluIHBvcHQgcmVtb3ZhbCArIEdPcHRpb24gYWRkaXRpb24gcGF0Y2ggZnJvbSBSb25hbGQsIGJ1ZyAjMTY5NzcyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgTWVyZ2VkIGluIHBvcHQgcmVtb3ZhbCArIEdPcHRpb24gYWRkaXRpb24gcGF0Y2ggZnJvbSBSb25hbGQsIGJ1ZwotCSAgIzE2OTc3Mi4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogQWRkIFNUQVRFXyhVTilMT0NLX0ZVTEwsIG1vdmUKLQkgIEdzdEVsZW1lbnQgbWFjcm9zIGFyb3VuZCwgcmVtb3ZlIHBvcHQtcmVsYXRlZCBzeW1ib2xzLCBhZGQgZ29wdGlvbgotCSAgc3R1ZmYuCi0JICAqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIHBvcHQgY2hlY2tzLCByZXF1aXJlIEdMaWIgMi42IGZvciBHT3B0aW9uLgotCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9saWJzL01ha2VmaWxlLmFtOiBObyBQT1BUX0NGTEFHUy4KLQkgICogZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtaW5pdC54bWw6IERvYyB1cGRhdGVzIHdpdGggYW4gZXhhbXBsZS4KLQkgICogZ3N0L2dzdC5jOiAoZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCksIChnc3RfaW5pdF9jaGVjayksCi0JICAoZ3N0X2luaXQpLCAocGFyc2Vfb25lX29wdGlvbiksIChwYXJzZV9nb3B0aW9uX2FyZyk6Ci0JICAqIGdzdC9nc3QuaDogUmVtb3ZlZCBnc3RfaW5pdF93aXRoX3BvcHRfdGFibGUgYW5kIGZyaWVuZHMuIFRvb2sgYQotCSAgYml0IG9mIGhhbmQgbWVyZ2luZyBhbmQgZGVidWdnaW5nIHRvIGdldCB0aGUgR09wdGlvbiBzdHVmZiB3b3JraW5nCi0JICB0aG8uCi0JICAqIHRlc3RzL01ha2VmaWxlLmFtOgotCSAgKiB0b29scy9NYWtlZmlsZS5hbToKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKLQkgICogdG9vbHMvZ3N0LXJ1bi5jOiAobWFpbik6Ci0JICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6IChtYWluKTogVGhhbmtzIFJvbmFsZCEKLQotMjAwNS0xMC0xMCAxNTozMDo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdGl0ZXJhdG9yLmM6IEFkZCBhc3NlcnRpb25zIHRvIG1ha2Ugc3VyZSBwYXNzZWQgR1R5cGUgaXMgbGlrZWx5IHRvIHJlYWxseSBiZSBhIEdUeXBlIChhcyB0aGUgY29tcGlsZXIgd29uJ3QgY2F0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6IChnc3RfaXRlcmF0b3JfbmV3KToKLQkgIEFkZCBhc3NlcnRpb25zIHRvIG1ha2Ugc3VyZSBwYXNzZWQgR1R5cGUgaXMgbGlrZWx5IHRvIHJlYWxseQotCSAgYmUgYSBHVHlwZSAoYXMgdGhlIGNvbXBpbGVyIHdvbid0IGNhdGNoIGl0IGlmIHRoZSBzaXplIGFuZAotCSAgR1R5cGUgYXJndW1lbnRzIGdldCBtaXhlZCB1cCwgc2VlICMzMTg0NDcpLgotCi0yMDA1LTEwLTEwIDE1OjI3OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YmluLmM6IFBhc3MgR1R5cGUgYW5kIHNpemUgYXJndW1lbnRzIHRvIGdzdF9pdGVyYXRvcl9uZXcoKSBpbiB0aGUgcmlnaHQgb3JkZXIgKG1heWJlIHdlIHNob3VsZCBtYWtlIF9uZXcoKSB0YWsuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCk6Ci0JICBQYXNzIEdUeXBlIGFuZCBzaXplIGFyZ3VtZW50cyB0byBnc3RfaXRlcmF0b3JfbmV3KCkgaW4gdGhlIHJpZ2h0Ci0JICBvcmRlciAobWF5YmUgd2Ugc2hvdWxkIG1ha2UgX25ldygpIHRha2UgdGhlIEdUeXBlIGFzIGZpcnN0IGFyZ3VtZW50Ci0JICBqdXN0IGxpa2UgX25ld19saXN0KCk/KSAoIzMxODQ0NykuCi0KLTIwMDUtMTAtMTAgMTU6MTc6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IEFuZCBmcmVlIHRoZSBHU3RhdGljUmVjTXV0ZXggdG9vCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2ZpbmFsaXplKToKLQkgIEFuZCBmcmVlIHRoZSBHU3RhdGljUmVjTXV0ZXggdG9vCi0KLTIwMDUtMTAtMTAgMTQ6MzM6MzggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB3aW4zMi9HU3RyZWFtZXIudmNwcm9qOgotCSogd2luMzIvdnM3L0dTdHJlYW1lci52Y3Byb2o6Ci0JICBkb24ndCBlY2hvIHBhdGgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZG9uJ3QgZWNobyBwYXRoCi0KLTIwMDUtMTAtMTAgMTQ6MzM6MTMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYyAoZ3N0X2VsZW1lbnRfaW5pdCwgZ3N0X2VsZW1lbnRfZmluYWxpemUpOiBBbGxvY2F0ZSBhbmQgZnJlZSB0aGUgbXV0ZXggcHJvcGVybHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X2luaXQsIGdzdF9lbGVtZW50X2ZpbmFsaXplKToKLQkgIEFsbG9jYXRlIGFuZCBmcmVlIHRoZSBtdXRleCBwcm9wZXJseS4KLQkgICogZ3N0L2dzdGVsZW1lbnQuaCAoR1NUX1NUQVRFX1VOTE9DS19GVUxMLCBHU1RfU1RBVEVfTE9DS19GVUxMKToKLQkgIE5ldyBtYWNyb3MuCi0JICAoR3N0RWxlbWVudCk6IFRoZSBzdGF0ZV9sb2NrIGlzIG5vdyByZWN1cnNpdmUuIFJlYnVpbGQgeW91cgotCSAgcGx1Z2lucywgc3Vja2Vycy4gT2xkIG1hY3JvcyBhZGFwdGVkLgotCi0yMDA1LTEwLTEwIDE0OjIzOjU3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIGNoYW5nZWxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjaGFuZ2Vsb2cKLQotMjAwNS0xMC0xMCAxNDoyMzoyNiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBEb2MgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogRG9jIHVwZGF0ZXMuCi0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYyAoZ19zdGF0aWNfcmVjX2NvbmRfdGltZWRfd2FpdCkKLQkgIChnX3N0YXRpY19yZWNfY29uZF93YWl0KTogUG9ydGVkIGZyb20gc3RhdGUgY2hhbmdlcyBwYXRjaCwgd2hpbGUKLQkgIHdlIHdhaXQgb24gYnVnICMzMTc4MDIgdG8gYmUgc29sdmVkIGluIGEgd2VsbC1kaXN0cmlidXRlZCBHTGliLgotCi0yMDA1LTEwLTEwIDE0OjE1OjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvTUFOSUZFU1Q6Ci0JKiB3aW4zMi9saWJnc3RiYXNlLmRlZjoKLQkqIHdpbjMyL2xpYmdzdGJhc2UudmNwcm9qOgotCSogd2luMzIvbGlua19vbGRydW50aW1lLmM6Ci0JKiB3aW4zMi92czcvbGliZ3N0YmFzZS5kZWY6Ci0JKiB3aW4zMi92czcvbGliZ3N0YmFzZS52Y3Byb2o6Ci0JKiB3aW4zMi92czcvbGlua19vbGRydW50aW1lLmM6Ci0JICBhZGQgbW9yZSB3aW4zMiBidWlsZCBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbW9yZSB3aW4zMiBidWlsZCBmaWxlcwotCi0yMDA1LTEwLTEwIDE0OjAzOjI1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZV9mdW5jKTogUmVuYW1lZCBmcm9tIGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSwgdmFyaWFibGUgbmFtZSBjaGFuZ2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGVfZnVuYyk6IFJlbmFtZWQgZnJvbQotCSAgZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlLCB2YXJpYWJsZSBuYW1lIGNoYW5nZXMuCi0JICAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKTogU3BsaXQgb3V0IG9mIGdzdF9lbGVtZW50X3NldF9zdGF0ZSBpbgotCSAgcHJlcGFyYXRpb24gZm9yIHRoZSBzdGF0ZSBjaGFuZ2UgbWVyZ2UuIERvZXNuJ3QgcGF5IGF0dGVudGlvbiB0bwotCSAgdGhlICd0cmFuc2l0aW9uJyBhcmd1bWVudC4KLQkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOiBVcGRhdGVzLCBob3BlZnVsbHkgcHVyZWx5IGNvc21ldGljLgotCSAgKGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQpOiBNVC1zYWZldHkuIFBvcnRlZCBmcm9tIHRoZQotCSAgc3RhdGUgY2hhbmdlIHBhdGNoLgotCSAgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKTogUmVuYW1lZCBmcm9tIGdldF9zdGF0ZSwgY29zbWV0aWMKLQkgIGNoYW5nZXMuCi0KLTIwMDUtMTAtMTAgMTM6NTI6MTggKzAwMDAgIFNlYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB1cGRhdGVzIGZvciB0aGUgd2luMzIgYnVpbGQgKHBhdGNoIGZyb20gU2ViYXN0aWVuIE1vdXR0ZSkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkgICogd2luMzIvR1N0cmVhbWVyLnZjcHJvajoKLQkgICogd2luMzIvY29uZmlnLmg6Ci0JICAqIHdpbjMyL2RpcmVudC5jOiAoX3RzZWVrZGlyKToKLQkgICogd2luMzIvZ3N0LWluc3BlY3QudmNwcm9qOgotCSAgKiB3aW4zMi9nc3QtbGF1bmNoLnZjcHJvajoKLQkgICogd2luMzIvZ3N0Y29uZmlnLmg6Ci0JICAqIHdpbjMyL2dzdGVsZW1lbnRzLnZjcHJvajoKLQkgICogd2luMzIvZ3N0ZW51bXR5cGVzLmM6IChnc3Rfb2JqZWN0X2ZsYWdzX2dldF90eXBlKToKLQkgICogd2luMzIvZ3N0cmVhbWVyLmRlZjoKLQkgICogd2luMzIvbXN2YzcxLnNsbjoKLQkgIHVwZGF0ZXMgZm9yIHRoZSB3aW4zMiBidWlsZCAocGF0Y2ggZnJvbSBTZWJhc3RpZW4gTW91dHRlKQotCi0yMDA1LTEwLTEwIDExOjUyOjU4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9nZXRfc3RhdGVfZnVuYyk6IFJlbmFtZWQgZnJvbSBnc3RfYmluX2dldF9zdGF0ZSwgY2xlYW5lZCB1cCAoYnV0IG5vIGxvZ2ljIGNoYW5nZXMpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0YmluLmMgKGdzdF9iaW5fZ2V0X3N0YXRlX2Z1bmMpOiBSZW5hbWVkIGZyb20KLQkgIGdzdF9iaW5fZ2V0X3N0YXRlLCBjbGVhbmVkIHVwIChidXQgbm8gbG9naWMgY2hhbmdlcykuCi0JICAoYmluX2VsZW1lbnRfaXNfc2luayk6IENvbW1lbnQgdXBkYXRlcy4KLQkgIChzaW5rX2l0ZXJhdG9yX2ZpbHRlcik6IFJlbW92ZSBuZWVkbGVzcyBjYXN0LgotCSAgKGdzdF9iaW5faXRlcmF0ZV9zaW5rcyk6IERvYyB1cGRhdGUuCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk6IFJlbmFtZWQgZnJvbSBnc3RfYmluX2NoYW5nZV9zdGF0ZSwKLQkgIGNsZWFuZWQgdXAgKGJ1dCBubyBsb2dpYyBjaGFuZ2VzKS4KLQotMjAwNS0xMC0xMCAxMTowNDo1NSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBjaGVjay9zdGF0ZXMvc2lua3MuYyAodGVzdF9zcmNfc2luayk6IENsZWFudXBzIGZyb20gdGhlIHN0YXRlIGNoYW5nZSBwYXRjaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogY2hlY2svc3RhdGVzL3NpbmtzLmMgKHRlc3Rfc3JjX3NpbmspOiBDbGVhbnVwcyBmcm9tIHRoZSBzdGF0ZQotCSAgY2hhbmdlIHBhdGNoLgotCSAgKHRlc3RfbGl2ZXNyY19zaW5rKTogU3luYyBvbiB0aGUgc3RhdGUuCi0KLTIwMDUtMTAtMTAgMTA6NTk6MzMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYyAocnVuX3BpcGVsaW5lKTogTWVyZ2UgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIHBhdGNoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTEwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jIChydW5fcGlwZWxpbmUpOiBNZXJnZSBmcm9tCi0JICB0aGUgc3RhdGUgY2hhbmdlIHBhdGNoLgotCi0yMDA1LTEwLTEwIDEwOjU3OjQwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jICh0ZXN0X2dob3N0X3BhZHMpOiBNZXJnZSBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UgcGF0Y2guCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jICh0ZXN0X2dob3N0X3BhZHMpOiBNZXJnZSBmcm9tIHRoZSBzdGF0ZQotCSAgY2hhbmdlIHBhdGNoLgotCi0yMDA1LTEwLTEwIDEwOjUwOjEyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RiaW4uYzogTWVyZ2UgaW4gc29tZSBzdHlsZSBmaXhlcyBhbmQgYWRkaXRpb25hbCBjaGVja3MgZnJvbSBXaW0ncyBzdGF0ZSBjaGFuZ2UgcGF0Y2guCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogTWVyZ2UgaW4gc29tZSBzdHlsZSBmaXhlcyBhbmQgYWRkaXRpb25hbAotCSAgY2hlY2tzIGZyb20gV2ltJ3Mgc3RhdGUgY2hhbmdlIHBhdGNoLgotCi0yMDA1LTEwLTEwIDEwOjQzOjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdGhlIHJlcXVlc3RlZCBkYXRhIGFscmVhZHkgaW4gb3VyIGxpc3Qgb2YgY2FjaGVkIGJ1ZmZlcnMgYmVmb3JlIHAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfcGVlayksCi0JICAoZ3N0X3R5cGVfZmluZF9oZWxwZXIpOgotCSAgQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRoZSByZXF1ZXN0ZWQgZGF0YSBhbHJlYWR5IGluIG91ciBsaXN0IG9mCi0JICBjYWNoZWQgYnVmZmVycyBiZWZvcmUgcHVsbGluZyBhIG5ldyBidWZmZXI7IGFsc28gbWFrZSB0aGUgYnVmZmVyCi0JICBsaXN0IGEgR1NMaXN0LiBTcGVlZHMgdXAgdHlwZWZpbmRpbmcgYnkgY2EuIDUtMTAlIGFsdG9nZXRoZXIuCi0KLTIwMDUtMTAtMTAgMDk6NDg6MjEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvOiBkb2MgdXBkYXRlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgZG9jIHVwZGF0ZXMKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZGVzZXJpYWxpemVfaW50X2hlbHBlcik6Ci0JICBkb24ndCB1c2UgbG9uZyBsb25nLCBpdCdzIG5vdCBwb3J0YWJsZS4gIFJlcGxhY2luZyB3aXRoCi0JICBnaW50NjQgc2VlbXMgdG8gd29yazsgbGV0J3MgaG9wZSBubyBza2VsZXRvbnMgZmFsbCBvdXQgb2YgdGhlIGNsb3NldC4KLQotMjAwNS0xMC0xMCAwODo1MTo1OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBhdXRvZ2VuLnNoIChDT05GSUdVUkVfREVGX09QVCk6IE5vIG1vcmUgLS1wbHVnaW4tYnVpZGRpciwgeWF5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGF1dG9nZW4uc2ggKENPTkZJR1VSRV9ERUZfT1BUKTogTm8gbW9yZSAtLXBsdWdpbi1idWlkZGlyLCB5YXkKLQotMjAwNS0xMC0wOSAyMDo0OTo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBtb3JlIGRvY3MsIGZpeCBjb21waWxhdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgICogZ3N0L2dzdGluZm8uaDoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQpOgotCSAgKiBnc3QvZ3N0cGFkLmM6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIG1vcmUgZG9jcywgZml4IGNvbXBpbGF0aW9uCi0KLTIwMDUtMTAtMDkgMjA6MTk6NDggKzAwMDAgIFBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGdzdC9nc3RtZXNzYWdlLmM6IEZpeGVkIGEgZmV3IGZvcmdvdHRlbiB2YXJpYWJsZXMgb24gcHJldmlvdXMgY29tbWl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMDkgIFBoaWxpcHBlIEtoYWxhZiA8YnVyZ2VyQHNwZWVkeS5vcmc+Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBGaXhlZCBhIGZldyBmb3Jnb3R0ZW4gdmFyaWFibGVzIG9uIHByZXZpb3VzIGNvbW1pdAotCi0yMDA1LTEwLTA5IDE3OjU5OjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiBGaXggZXZpbCB0eXBlZmluZCBjcmFzaGVyOiBnZXRyYW5nZSgpIG1pZ2h0IHJldHVybiBhIHNob3J0IGJ1ZmZlciBhdCB0aGUgZW5kIG9mIGEgZmlsZSwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfcGVlayk6Ci0JICBGaXggZXZpbCB0eXBlZmluZCBjcmFzaGVyOiBnZXRyYW5nZSgpIG1pZ2h0IHJldHVybiBhIHNob3J0Ci0JICBidWZmZXIgYXQgdGhlIGVuZCBvZiBhIGZpbGUsIGJ1dCBnc3RfdHlwZV9maW5kX3BlZWsoKSBtdXN0Ci0JICBlaXRoZXIgcmV0dXJuIHRoZSBmdWxsIGRhdGEgYXMgcmVxdWVzdGVkIG9yIE5VTEwsIGJ1dAotCSAgbmV2ZXIgYSBzaG9ydCBidWZmZXIuCi0KLTIwMDUtMTAtMDkgMTc6NTM6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0bWVzc2FnZS4qOiBkb24ndCB1c2UgbmV3LCBpdCdzIGEgQysrIGtleXdvcmQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpLAotCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQpOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgZG9uJ3QgdXNlIG5ldywgaXQncyBhIEMrKyBrZXl3b3JkCi0KLTIwMDUtMTAtMDkgMTc6MjI6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgb25jZSBpcyBlbm91Z2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgb25jZSBpcyBlbm91Z2gKLQotMjAwNS0xMC0wOCAxODoyMToyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogU21hbGwgZG9jcyBhbmQgZGVidWcgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChpc19lb3MpLCAodXBkYXRlX2RlZ3JlZSksIChnc3RfYmluX3F1ZXJ5KToKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSk6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6Ci0JICBTbWFsbCBkb2NzIGFuZCBkZWJ1ZyB1cGRhdGVzLgotCi0yMDA1LTEwLTA4IDE4OjA3OjIwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIG1vcmUgZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgICogZ3N0L2dzdHRhZ2xpc3QuYzoKLQkgIG1vcmUgZG9jcwotCi0yMDA1LTEwLTA4IDE4OjAxOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IEZpeCB0eXBvcywgYWRkIGNvbW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGlzX2VvcyksICh1cGRhdGVfZGVncmVlKSwgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfYmluX2Rpc3Bvc2UpLCAoYmluX2J1c19oYW5kbGVyKToKLQkgIEZpeCB0eXBvcywgYWRkIGNvbW1lbnRzLgotCSAgQ2xlYXIgRU9TIGxpc3Qgd2hlbiBnb2luZyB0byBQQVVTRUQgZnJvbSBhbnkgZGlyZWN0aW9uIGFuZCBkbyBpdAotCSAgaW4gYSB0aHJlYWRzYWZlIHdheS4KLQkgIEdldCBiYXNlIHRpbWUgaW4gYSB0aHJlYWRzYWZlIHdheSB0b28uCi0JICBGaXggY29uZnVzaW5nIGRlYnVnIGluIHRoZSBjaGFuZ2Vfc3RhdGUgZnVuY3Rpb24uCi0JICBWYXJpb3VzIG90aGVyIG1hbGwgY2xlYW51cHMuCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UpOgotCSAgRml4IHZlcnkgdmVyYm9zZSBidXMgcG9zdGluZyBjb2RlLgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwKLQkgIChnc3RfcGlwZWxpbmVfc2V0X3Byb3BlcnR5KSwgKGdzdF9waXBlbGluZV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOgotCSAgU21hbGwgQVJHXyAtPiBQUk9QXyBjbGVhbnVwCi0KLTIwMDUtMTAtMDggMTc6MzA6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogRG8gYSBsZXNzIENQVSBkZW1hbmRpbmcgRU9TIGNoZWNrIGJlY2F1c2Ugd2UgY2FuLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGlzX2VvcyksIChiaW5fYnVzX2hhbmRsZXIpOgotCSAgRG8gYSBsZXNzIENQVSBkZW1hbmRpbmcgRU9TIGNoZWNrIGJlY2F1c2Ugd2UgY2FuLgotCi0yMDA1LTEwLTA4IDE3OjE3OjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvOiBJdCdzIGFib3V0IHRpbWUgd2UgYnVtcCB0aGUgdmVyc2lvbiBudW1iZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSAgKGdzdF9kcF9oZWFkZXJfZnJvbV9idWZmZXIpLCAoZ3N0X2RwX3BhY2tldF9mcm9tX2NhcHMpLAotCSAgKGdzdF9kcF9wYWNrZXRfZnJvbV9ldmVudCk6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuaDoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RwLXByaXZhdGUuaDoKLQkgIEl0J3MgYWJvdXQgdGltZSB3ZSBidW1wIHRoZSB2ZXJzaW9uIG51bWJlci4KLQkgIFNpbmNlIGV2ZW50IHR5cGVzIGRvbid0IGZpdCBpbiB0aGUgZ3VpbnQ4IGFueW1vcmUgZGVzY3JpYmluZwotCSAgdGhlIHBheWxvYWQgdHlwZSwgbWFrZSBwYXlsb2FkIHR5cGUgMTYgYml0cyB3aWRlLgotCi0yMDA1LTEwLTA4IDE2OjQ5OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IE1hbnkgZG9jIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RlbGVtZW50LnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgIE1hbnkgZG9jIHVwZGF0ZXMuCi0KLTIwMDUtMTAtMDggMTY6MTM6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RldmVudC4qOiBGaXggZXZlbnQgcXVhcmsgcmVnaXN0cmF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIEZpeCBldmVudCBxdWFyayByZWdpc3RyYXRpb24uCi0JICBBZGQgc29tZSBzcGFjZSBiZXR3ZWVuIGV2ZW50cyBzbyB3ZSBjYW4gaW5zZXJ0IHRoZW0gaW4gdGhlCi0JICByaWdodCBncm91cHMuCi0KLTIwMDUtMTAtMDggMTQ6NTc6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEJldHRlciBsb2cgbWVzc2FnZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9idWZmZXIpOgotCSAgQmV0dGVyIGxvZyBtZXNzYWdlLgotCSAgKiBnc3QvZ3N0YnVzLmg6Ci0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBNb3JlIGRvY3MuCi0JICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2NsYXNzX2luaXQpLCAoZ3N0X3F1ZXVlX2luaXQpLAotCSAgKGdzdF9xdWV1ZV9zZXRfcHJvcGVydHkpLCAoZ3N0X3F1ZXVlX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9nc3RxdWV1ZS5oOgotCSAgUmVtb3ZlIG9sZCB1bnVzZWQgcHJvcGVydGllcy4KLQotMjAwNS0xMC0wOCAxNDo0ODoxNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBsb3RzIG9mIG5ldyBkb2NzIGFuZCBkb2MgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBsb3RzIG9mIG5ldyBkb2NzIGFuZCBkb2MgZml4ZXMKLQotMjAwNS0xMC0wOCAxNDo0MTo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgZml4IGEgbGVhayBJIGludHJvZHVjZWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGEgbGVhayBJIGludHJvZHVjZWQKLQotMjAwNS0xMC0wOCAxMzo1NzoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IE9ubHkgZXZlciBsb2FkIG9uZSBwbHVnaW4gZm9yIGEgZ2l2ZW4gcGx1Z2luIGJhc2VuYW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fZmluYWxpemUpLCAoZ3N0X3BsdWdpbl9sb2FkX2ZpbGUpOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9sb2NrZWQpLAotCSAgKGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGxvYWRfcGx1Z2luKToKLQkgIE9ubHkgZXZlciBsb2FkIG9uZSBwbHVnaW4gZm9yIGEgZ2l2ZW4gcGx1Z2luIGJhc2VuYW1lLgotCSAgVGhpcyBlbnN1cmVzIGNvcnJlY3Qgb3ZlcnJpZGluZyBvZiBHU1RfUExVR0lOX1BBVEggb3ZlcgotCSAgR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBhbmQgb2YgaG9tZSBkaXIgcGx1Z2lucyBvdmVyCi0JICBzeXN0ZW0gaW5zdGFsbGVkIHBsdWdpbnMuCi0KLTIwMDUtMTAtMDggMTM6Mzk6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFByZXBhcmUgZm9yIGRvaW5nIFFPUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfYnVmZmVyKToKLQkgIFByZXBhcmUgZm9yIGRvaW5nIFFPUy4KLQotMjAwNS0xMC0wOCAxMzoxMDozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svOiBBbGxvdyBuZXcgY2xvY2sgbWVzc2FnZSB0b28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBjaGVjay9waXBlbGluZXMvY2xlYW51cC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWxsb3cgbmV3IGNsb2NrIG1lc3NhZ2UgdG9vLgotCi0yMDA1LTEwLTA4IDEyOjU2OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0bWVzc2FnZS4qOiBBbHNvIGNhcnJ5IHRoZSBjbG9jayBpbiBxdWVzdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X2Vycm9yKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfd2FybmluZyksIChnc3RfbWVzc2FnZV9uZXdfdGFnKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksIChnc3RfbWVzc2FnZV9uZXdfY2xvY2tfcHJvdmlkZSksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3QpLCAoZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9jayksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQpLCAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZSksIChnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0KSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2spOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgQWxzbyBjYXJyeSB0aGUgY2xvY2sgaW4gcXVlc3Rpb24uCi0KLTIwMDUtMTAtMDggMTI6MzY6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RtZXNzYWdlLio6IENsZWFuIHVwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfY3VzdG9tKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfZW9zKSwgKGdzdF9tZXNzYWdlX25ld19lcnJvciksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcpLCAoZ3N0X21lc3NhZ2VfbmV3X3RhZyksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpLCAoZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUpLAotCSAgKGdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2spLCAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQpLAotCSAgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUpLCAoZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZSksIChnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2spOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgQ2xlYW4gdXAuCi0JICBBZGRlZCBjbG9jayByZWxhdGVkIG1lc3NhZ2VzLgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOgotCSAgUG9zdCBtZXNzYWdlIHdoZW4gdGhlIGNsb2NrIGNoYW5nZWQuCi0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgotCSAgUHJpbnQgbmV3IGNsb2NrLgotCi0yMDA1LTEwLTA4IDExOjE2OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy9nc3QtaW5zcGVjdC5jOiBDYW4ndCBwYXNzIE5VTEwgc3RyaW5ncyB0byBnX3ByaW50KCkgb24gd2luZG93cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgotCSAgQ2FuJ3QgcGFzcyBOVUxMIHN0cmluZ3MgdG8gZ19wcmludCgpIG9uIHdpbmRvd3MuCi0KLTIwMDUtMTAtMDggMTE6MTI6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBkb2NzLzogYWRkIGEgY2hhcHRlciBvbiBydW5uaW5nIEdTdHJlYW1lci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvcnVubmluZy54bWw6Ci0JICAqIGRvY3MvdmVyc2lvbi5lbnRpdGllcy5pbjoKLQkgIGFkZCBhIGNoYXB0ZXIgb24gcnVubmluZyBHU3RyZWFtZXIuCi0JICBkb2N1bWVudCBHU1RfREVCVUcgYW5kIEdTVF9QTFVHSU4qIGVudiB2YXJzCi0KLTIwMDUtMTAtMDggMTE6MTA6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBNYWtlZmlsZS5hbTogcmVtb3ZlIGluY2x1ZGUgZGlyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICByZW1vdmUgaW5jbHVkZSBkaXIKLQkgICogY29uZmlndXJlLmFjOgotCSAgcmVtb3ZlIFBMVUdJTlNfQlVJTERESVIgc3R1ZmYKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KToKLQkgIHJlb3JkZXIgcGFyc2luZyBvZiBHU1RfUExVR0lOX1BBVEggYW5kIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEgKLQkgICogaWRpb3R0ZXN0Lm1hazoKLQkgIHJlbW92ZSwgaXQgd2FzIGNvbmRlc2NlbmRpbmcgYW5kIG5vdCBuZWVkZWQKLQotMjAwNS0xMC0wOCAwOTo1ODozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogUmVwb3N0IEVPUyBtZXNzYWdlIHdoaWxlIGdvaW5nIHRvIFBMQVlJTkcgaWYgc3RpbGwgRU9TLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLAotCSAgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfYmFzZV9zaW5rX3dhaXQpLCAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIFJlcG9zdCBFT1MgbWVzc2FnZSB3aGlsZSBnb2luZyB0byBQTEFZSU5HIGlmIHN0aWxsIEVPUy4KLQkgIE1ha2Ugc3VyZSB0aGF0IHdoZW4gcmVjZWl2aW5nIGEgRkxVU0hfU1RBUlQgd2UgZG9uJ3QgYXR0ZW1wdAotCSAgdG8gc3luYyBvbiB0aGUgY2xvY2sgYW55bW9yZS4KLQotMjAwNS0xMC0wOCAwOTozODoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBCZXR0ZXIgbWVzc2FnZSBwcmludG91dC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKLQkgIEJldHRlciBtZXNzYWdlIHByaW50b3V0LgotCi0yMDA1LTEwLTA4IDA5OjI0OjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBNYWtlIENoaWxkUHJveHkgdGhyZWFkc2FmZSBhbmQgZml4IG1lbSBsZWFrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCksCi0JICAoZ3N0X2Jpbl9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQpOgotCSAgKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOiAoZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9uYW1lKSwKLQkgIChnc3RfY2hpbGRfcHJveHlfbG9va3VwKSwgKGdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9jaGlsZF9wcm94eV9nZXRfdmFsaXN0KSwgKGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9jaGlsZF9wcm94eV9zZXRfdmFsaXN0KToKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgIE1ha2UgQ2hpbGRQcm94eSB0aHJlYWRzYWZlIGFuZCBmaXggbWVtIGxlYWtzLgotCi0yMDA1LTEwLTA4IDA5OjA5OjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdC5jOiBkZWJ1ZyB0aGUgR1NUX1BMVUdJTl8gZW52IHZhcnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChpbml0X3Bvc3QpOgotCSAgZGVidWcgdGhlIEdTVF9QTFVHSU5fIGVudiB2YXJzCi0KLTIwMDUtMTAtMDggMDg6NTg6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZGVkIGV4dHJhIGZpZWxkIHRvIFNUQVRFX0NIQU5HRSBtZXNzYWdlIHdpdGggdGhlIHBlbmRpbmcgc3RhdGUsIHdoaWNoIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIG5ldyBzdGF0ZSBzb29uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6IChHU1RfU1RBUlRfVEVTVCksIChtZXNzYWdlX3JlY2VpdmVkKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2NvbW1pdF9zdGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksCi0JICAoZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgotCSAgQWRkZWQgZXh0cmEgZmllbGQgdG8gU1RBVEVfQ0hBTkdFIG1lc3NhZ2Ugd2l0aCB0aGUgcGVuZGluZwotCSAgc3RhdGUsIHdoaWNoIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIG5ldyBzdGF0ZSBzb29uLgotCi0yMDA1LTEwLTA4IDA4OjAwOjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBTbWFsbCBjbGVhbnVwcyBhbmQgZG9jIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3ApOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzoKLQkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6IChnc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCk6Ci0JICBTbWFsbCBjbGVhbnVwcyBhbmQgZG9jIHVwZGF0ZXMuCi0KLTIwMDUtMTAtMDggMDY6NDk6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvOiBsb2cgZGlzdHJpYnV0aW5nIGNsb2NrcyBhbmQgYmFzZSB0aW1lCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wcmUpOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKToKLQkgIGxvZyBkaXN0cmlidXRpbmcgY2xvY2tzIGFuZCBiYXNlIHRpbWUKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IChnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiksCi0JICAoZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCksIChnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoKToKLQkgIGNsZWFuIHVwIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGEgbGl0dGxlCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUpOgotCSAgd2FybiBhYm91dCBhIG1lbWxlYWsgKEkndmUgYWN0dWFsbHkgc2VlbiB0aGlzIGJlIHVzZWQsIHRob3VnaAotCSAgaXQgd2FzIHByb2JhYmx5IGEgYnVnKQotCi0yMDA1LTEwLTA4IDA2OjQyOjMwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIGFkZCB0d28gbmV3IGZ1bmN0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgdHdvIG5ldyBmdW5jdGlvbnMKLQotMjAwNS0xMC0wNyAxODoxNzoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy4qOiBNYWtlIHRoZSBuZXdzZWdtZW50IGV2ZW50IGN1c3RvbWl6YWJsZSBieSBzdWJjbGFzc2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zcmNfaW5pdCksIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZXdzZWdtZW50KSwKLQkgIChnc3RfYmFzZV9zcmNfbmV3c2VnbWVudCksIChnc3RfYmFzZV9zcmNfZG9fc2VlayksCi0JICAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLCAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgTWFrZSB0aGUgbmV3c2VnbWVudCBldmVudCBjdXN0b21pemFibGUgYnkgc3ViY2xhc3Nlcy4KLQotMjAwNS0xMC0wNyAxODowMjoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGV2ZW50Lio6IE5ldyBldmVudCBmb3IgZnV0dXJlIGlkZWEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfbmV3X2J1ZmZlcnNpemUpLAotCSAgKGdzdF9ldmVudF9wYXJzZV9idWZmZXJzaXplKToKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBOZXcgZXZlbnQgZm9yIGZ1dHVyZSBpZGVhLgotCi0yMDA1LTEwLTA3IDE2OjI4OjU2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSk6IERvYyB1cGRhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMDcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSk6IERvYyB1cGRhdGUuCi0KLTIwMDUtMTAtMDcgMTY6MTM6NTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogVXBkYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTA3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBVcGRhdGUuCi0JICAqIGdzdC9nc3RtZXNzYWdlLmMgKGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbik6IE1hZGUgaW50byBhCi0JICBmdW5jdGlvbiBsaWtlIGhvbmVzdCBBUEkgY2FsbHMuCi0JICAoZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQpOiBOZXcgbWVzc2FnZSB0eXBlLgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oIChlbnVtKTogQWRkIEdTVF9NRVNTQUdFX0VMRU1FTlQgdHlwZS4KLQotMjAwNS0xMC0wNyAxNToyNTo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSAgZmRzcmMgZG9lcyBub3QgYnVpbGQgY3VycmVudGx5IG9uIHdpbjMyIGR1ZSB0byBzb2NrZXRwYWlyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZkc3JjIGRvZXMgbm90IGJ1aWxkIGN1cnJlbnRseSBvbiB3aW4zMiBkdWUgdG8gc29ja2V0cGFpcgotCi0yMDA1LTEwLTA3IDE1OjIyOjM4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYyAodGVzdF9ub19wcmVyb2xsKTogTmV3IGNoZWNrLCBjaGVja3MgdGhhdCBzZXR0aW5nIGEgbGl2ZSBmYWtlc3JjIHRvIFBBVVNFRCByZXR1cm5zIE5PX1BSRVJPTC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTA3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9lbGVtZW50cy9mYWtlc3JjLmMgKHRlc3Rfbm9fcHJlcm9sbCk6IE5ldyBjaGVjaywgY2hlY2tzCi0JICB0aGF0IHNldHRpbmcgYSBsaXZlIGZha2VzcmMgdG8gUEFVU0VEIHJldHVybnMgTk9fUFJFUk9MTCBib3RoCi0JICB0aW1lcy4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKTogQWxsb3cgYQotCSAgTk9fUFJFUk9MTCBmcm9tIGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSB0byBmYWxsIHRocm91Z2guCi0KLTIwMDUtMTAtMDcgMTU6MTM6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBkb24ndCB1c2UgaWYgbm90IGRlY2xhcmVkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvbid0IHVzZSBpZiBub3QgZGVjbGFyZWQKLQotMjAwNS0xMC0wNyAxMjo1MjoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmM6IEFjdGl2YXRpbmcgYSBnaG9zdHBhZCB3aXRoIG5vIGludGVybmFsIHBhZCBpbiBwdXNoIG1vZGUgaXMgb2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfZ2hvc3RfcGFkX2dldF9pbnRlcm5hbCksCi0JICAoZ3N0X2dob3N0X3BhZF9kb19hY3RpdmF0ZV9wdXNoKToKLQkgIEFjdGl2YXRpbmcgYSBnaG9zdHBhZCB3aXRoIG5vIGludGVybmFsIHBhZCBpbiBwdXNoIG1vZGUKLQkgIGlzIG9rLgotCi0yMDA1LTEwLTA3IDEyOjQ1OjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdG9iamVjdC5oOiB0aGVyZSdzIG5vIHBvaW50IGluIHdyYXBwaW5nIEZMQUdfU0VUL19VTlNFVCBpbiBTVE1UIG1hY3Jvcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICB0aGVyZSdzIG5vIHBvaW50IGluIHdyYXBwaW5nIEZMQUdfU0VUL19VTlNFVCBpbiBTVE1UIG1hY3Jvcy4KLQkgIEZpeGVzIGNvbXBpbGF0aW9uIG9uIFdpbmRvd3MuCi0KLTIwMDUtMTAtMDcgMTA6MzI6MjQgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29tbW9uOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgIFByaW50IG91dCBmZWF0dXJlIGFuZCBwbHVnaW4gY291bnQgYXQgdGhlIGVuZCB3aGVuIHByaW50aW5nIG91dCBhbGwgZmVhdHVyZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFByaW50IG91dCBmZWF0dXJlIGFuZCBwbHVnaW4gY291bnQgYXQgdGhlIGVuZCB3aGVuIHByaW50aW5nIG91dAotCSAgYWxsIGZlYXR1cmVzLgotCSAgQWxzbyBhZGQgYSBjaGFuZ2Vsb2cgZW50cnkgd2hpY2ggSSdkIHdyaXR0ZW4gYnV0IG5vdCBjb21taXR0ZWQ/Ci0KLTIwMDUtMTAtMDcgMDA6MTQ6NDUgKzAwMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JICBBZGQgYSBHVHlwZSB0byBHc3RJdGVyYXRvciwgdXBkYXRlIGNhbGxzaXRlcyBhbmQgdGVzdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cyksCi0JICAoZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UpLCAoZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCk6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMpOgotCSAgKiBnc3QvZ3N0Zm9ybWF0LmM6IChnc3RfZm9ybWF0X2l0ZXJhdGVfZGVmaW5pdGlvbnMpOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzogKGdzdF9pdGVyYXRvcl9pbml0KSwgKGdzdF9pdGVyYXRvcl9uZXcpLAotCSAgKGdzdF9pdGVyYXRvcl9uZXdfbGlzdCksIChnc3RfaXRlcmF0b3JfZmlsdGVyKToKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmg6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOiAoZ3N0X3F1ZXJ5X3R5cGVfaXRlcmF0ZV9kZWZpbml0aW9ucyk6Ci0JICBBZGQgYSBHVHlwZSB0byBHc3RJdGVyYXRvciwgdXBkYXRlIGNhbGxzaXRlcyBhbmQgdGVzdHMuCi0KLTIwMDUtMTAtMDYgMjE6MDk6MTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBkb2guICB1c2UgY29ycmVjdCB2YXJpYWJsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb2guICB1c2UgY29ycmVjdCB2YXJpYWJsZQotCi0yMDA1LTEwLTA2IDE3OjAwOjUwICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgdmVyc2lvbiBnc3RyZWFtZXItdG9vbHMgcGFja2FnZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB2ZXJzaW9uIGdzdHJlYW1lci10b29scyBwYWNrYWdlCi0KLTIwMDUtMTAtMDYgMTQ6MjA6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgIGluaXRpYWxpemUgcXVhcmtzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGluaXRpYWxpemUgcXVhcmtzCi0KLTIwMDUtMTAtMDYgMTQ6MDE6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0cGFkLmM6IGdpdmUgZXZlbnRzIGEgY2hhbmNlIHRvIGJlIGhhbmRsZWQgYnkgZXZlbnQgcHJvYmVzIHdoZW4gdGhlIHBhZCBpcyBub3QgbGlua2VkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9ldmVudF9kZWZhdWx0X2Rpc3BhdGNoKToKLQkgIGdpdmUgZXZlbnRzIGEgY2hhbmNlIHRvIGJlIGhhbmRsZWQgYnkgZXZlbnQgcHJvYmVzIHdoZW4gdGhlIHBhZAotCSAgaXMgbm90IGxpbmtlZAotCi0yMDA1LTEwLTA2IDEzOjU1OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGV2ZW50Lio6IGFkZCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIGZvciBldmVudCB0eXBlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUpLAotCSAgKGdzdF9ldmVudF90eXBlX3RvX3F1YXJrKSwgKGdzdF9ldmVudF9maW5hbGl6ZSksIChnc3RfZXZlbnRfbmV3KToKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBhZGQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBmb3IgZXZlbnQgdHlwZXMKLQotMjAwNS0xMC0wNiAxMzo0Mjo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RldmVudC5oOgotCSAgd2hpdGVzcGFjZSBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDUtMTAtMDYgMTM6MjQ6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBEb24ndCB1c2UgTlVMTCBwb2ludGVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfY2xvc2VfZmlsZSk6Ci0JICBEb24ndCB1c2UgTlVMTCBwb2ludGVycy4KLQotMjAwNS0xMC0wNiAwOTo0OTo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IHdpZGVuIHRoZSBkZWJ1ZyBjYXRlZ29yeSBpbiBvdXRwdXQgdG8gZml0IHRoZSBiaWdnZXN0IG9uZSB3ZSBoYXZlIGFkZCBhIGJ1cyBjYXRlZ29yeSBhbmQgdXNlIGl0IHBsYXkgd2l0aCB0aGUgYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSAgKiBnc3QvZ3N0YnVzLmM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6Ci0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JICB3aWRlbiB0aGUgZGVidWcgY2F0ZWdvcnkgaW4gb3V0cHV0IHRvIGZpdCB0aGUgYmlnZ2VzdCBvbmUgd2UgaGF2ZQotCSAgYWRkIGEgYnVzIGNhdGVnb3J5IGFuZCB1c2UgaXQKLQkgIHBsYXkgd2l0aCB0aGUgY29sb3JzCi0JICBmaXggdXAgc29tZSBjYXRlZ29yaWVzCi0KLTIwMDUtMTAtMDYgMDc6NDI6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgZmlyc3Qgc3RhYiBhdCByZW9yZ2FuaXppbmcgZG9jcyBmb3IgcGFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpcnN0IHN0YWIgYXQgcmVvcmdhbml6aW5nIGRvY3MgZm9yIHBhZAotCi0yMDA1LTEwLTA2IDA3OjEzOjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmM6IGFkZCBwdXNoIGFjdGl2YXRpb24gb2Ygc2luayBnaG9zdCBwYWRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTA2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfaW50ZXJuYWxfZG9fYWN0aXZhdGVfcHVzaCk6Ci0JICBhZGQgcHVzaCBhY3RpdmF0aW9uIG9mIHNpbmsgZ2hvc3QgcGFkcy4KLQkgIEFuZHllLCBwbGVhc2UgdmVyaWZ5Ci0KLTIwMDUtMTAtMDUgMjI6MzU6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RwYWQuYzoKLQkgIGRvYyB1cGRhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvYyB1cGRhdGVzCi0KLTIwMDUtMTAtMDUgMjE6MzQ6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogZml4IGEgYnVnIGluIHRoZSBjYXNlIHdoZXJlIG5laXRoZXIgZWxlbWVudCBoYXMgYSBwYWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2xpbmtfcGFkcyk6Ci0JICBmaXggYSBidWcgaW4gdGhlIGNhc2Ugd2hlcmUgbmVpdGhlciBlbGVtZW50IGhhcyBhIHBhZAotCSAgKiBjaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2VsZW1lbnRfc3VpdGUpOgotCSAgYWRkIGEgdGVzdCBmb3IgdGhhdCBjYXNlCi0KLTIwMDUtMTAtMDUgMTc6MDE6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9nc3QvZ3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmM6Ci0JICB1bnJlZiBvdXIgdGVzdCBidWZmZXJzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVucmVmIG91ciB0ZXN0IGJ1ZmZlcnMKLQotMjAwNS0xMC0wNSAxNjoxNjo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3RwYWQuYzogZW1pdCBoYXZlLWRhdGEgYmVmb3JlIGNoZWNraW5nIGZvciBwZWVycy4gIFRoaXMgYWxsb3dzIGZvciBwcm9iZSBoYW5kbGVycyB0byBjb25uZWN0IGVsZW1lbnRzLiAgVGhpcyBoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfcHVzaCksIChnc3RfcGFkX3B1c2hfZXZlbnQpOgotCSAgZW1pdCBoYXZlLWRhdGEgYmVmb3JlIGNoZWNraW5nIGZvciBwZWVycy4gIFRoaXMgYWxsb3dzCi0JICBmb3IgcHJvYmUgaGFuZGxlcnMgdG8gY29ubmVjdCBlbGVtZW50cy4gIFRoaXMgaGVscHMgYXV0b3BsdWdnZXJzLgotCSAgKiBjaGVjay9nc3QvZ3N0cGFkLmM6IChHU1RfU1RBUlRfVEVTVCksIChfcHJvYmVfaGFuZGxlciksCi0JICAoZ3N0X3BhZF9zdWl0ZSk6Ci0JICBhZGQgc2l4IGNoZWNrcywgbGlua2VkL3VubGlua2VkIHdpdGggbm8vdHJ1ZS9mYWxzZSBwcm9iZQotCi0yMDA1LTEwLTA1IDExOjUwOjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdG9iamVjdC5jOgotCSAgaW5kZW50IGlmZGVmcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpbmRlbnQgaWZkZWZzCi0KLTIwMDUtMTAtMDQgMTg6NDY6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9lbGVtZW50cy86IFByb3RlY3QgbGFzdF9tZXNzYWdlIHdpdGggbG9jay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZmFrZV9zaW5rX2V2ZW50KSwgKGdzdF9mYWtlX3NpbmtfcHJlcm9sbCksCi0JICAoZ3N0X2Zha2Vfc2lua19yZW5kZXIpLCAoZ3N0X2Zha2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2V2ZW50X2hhbmRsZXIpLAotCSAgKGdzdF9mYWtlX3NyY19nZXRfcHJvcGVydHkpLCAoZ3N0X2Zha2Vfc3JjX2NyZWF0ZSksCi0JICAoZ3N0X2Zha2Vfc3JjX3N0b3ApOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9zdG9wKToKLQkgIFByb3RlY3QgbGFzdF9tZXNzYWdlIHdpdGggbG9jay4KLQotMjAwNS0xMC0wNCAxNTowNDo1MCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2dzdGZvcm1hdC5oOiBBZGRlZCBwcmVjaXNpb24gaW4gdGhlIGNvbW1lbnRzIGZvciBHU1RfRk9STUFUX0RFRkFVTFQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Zm9ybWF0Lmg6Ci0JICBBZGRlZCBwcmVjaXNpb24gaW4gdGhlIGNvbW1lbnRzIGZvciBHU1RfRk9STUFUX0RFRkFVTFQKLQotMjAwNS0xMC0wNCAxMzoxOTo0NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIHVwZGF0ZSB1bmluc3RhbGxlZCBzY3JpcHQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHVuaW5zdGFsbGVkIHNjcmlwdAotCi0yMDA1LTEwLTA0IDEyOjAyOjM0ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgcmVtb3ZlIHNvbWUgZmlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHRoZXJlIGZyb20gc3BlYyBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBzb21lIGZpbGVzIHRoYXQgYXJlIG5vIGxvbmdlciB0aGVyZSBmcm9tIHNwZWMgZmlsZQotCi0yMDA1LTEwLTA0IDExOjUxOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0b29scy9nc3QtbGF1bmNoLmM6IERvbid0IHRyeSB0byBydW4gZXJyb25lb3VzIHBpcGVsaW5lcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChtYWluKToKLQkgIERvbid0IHRyeSB0byBydW4gZXJyb25lb3VzIHBpcGVsaW5lcy4KLQotMjAwNS0xMC0wNCAxMToxMDowNCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZ3N0ZXJyb3IuYzogQWRkIGFub3RoZXIgZXJyb3Igc3RyaW5nIHVzZWQgaW4gYSBmZXcgZXhpc3RpbmcgcGx1Z2lucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXJyb3IuYzogKF9nc3Rfc3RyZWFtX2Vycm9yc19pbml0KToKLQkgIEFkZCBhbm90aGVyIGVycm9yIHN0cmluZyB1c2VkIGluIGEgZmV3IGV4aXN0aW5nIHBsdWdpbnMuCi0JICAqIGdzdC9nc3RwbHVnaW4uYzoKLQkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzogKGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkKToKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfaW5mbyk6Ci0JICBXaGVuIGEgZmVhdHVyZSBkaXNhcHBlYXJzIGZyb20gYSBwbHVnaW4gKGFuZCB0aGUgZmVhdHVyZSBleGlzdHMgaW4KLQkgIHRoZSBjYWNoZWQgcmVnaXN0cnkgZmlsZSksIHRoaW5ncyB3ZW50IGhvcnJpYmx5IHdyb25nLiBUaGlzIGlzbid0IGEKLQkgIGNvbXBsZXRlIGZpeCwgd2Ugc2hvdWxkIGFjdHVhbGx5IGJlIHJlbW92aW5nIHRoZSAnbWlzc2luZycgZmVhdHVyZXMKLQkgIGZyb20gdGhlIGZlYXR1cmVzIGxpc3Qgd2hlbiB3ZSBsb2FkIHRoZSBhY3R1YWwgcGx1Z2luLiBUaGF0J3Mgbm90Ci0JICB5ZXQgaW1wbGVtZW50ZWQuCi0KLTIwMDUtMTAtMDQgMTE6MDk6NDEgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZ3N0YnVzLmM6IFdlIGRvbid0IG5lZWQgdGhpcyBoZWFkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMDQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2dzdGJ1cy5jOiBXZSBkb24ndCBuZWVkIHRoaXMgaGVhZGVyLgotCi0yMDA1LTEwLTAzIDE3OjU3OjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBoZWFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gaGVhZAotCi09PT0gcmVsZWFzZSAwLjkuMyA9PT0KLQotMjAwNS0xMC0wMyAxNzo0NzoyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUFETUU6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgcmVsZWFzZSB0aW1lCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2UgdGltZQotCi0yMDA1LTEwLTAyIDIzOjI0OjI1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKTogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZWJ5IGNhbGxpbmcgYSBwYWQncyBhY3RpdmF0ZXB1c2goKSBmdW5jdGlvbiBjYW4gcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTAzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfYWN0aXZhdGVfcHVzaCk6IFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24KLQkgIHdoZXJlYnkgY2FsbGluZyBhIHBhZCdzIGFjdGl2YXRlcHVzaCgpIGZ1bmN0aW9uIGNhbiBzdGFydCBhIHRocmVhZAotCSAgdGhhdCBzdGFydHMgdG8gcHVzaCBvciBwdWxsIGJlZm9yZSB0aGUgcGFkIGdldHMgdGhlIEZMVVNISU5HIGZsYWcKLQkgIHVuc2V0LiBIYWNrIGFyb3VuZCBpdCBieSBob2xkaW5nIHRoZSBzdHJlYW0gbG9jayB1bnRpbCB0aGUgZmxhZyBpcwotCSAgc2V0LiBOZWVkIHRvIHJlcGxhY2UgdGhpcyB3aXRoIGEgcHJvcGVyIHNvbHV0aW9uLiBUb2dldGhlciB3aXRoCi0JICB0aGUgZ2hvc3QgcGFkIGZpeGVzLCB0aGlzIGZpeGVzIG1wMyBwbGF5aW5nL3RhZ3JlYWRpbmcuCi0KLTIwMDUtMTAtMDIgMjM6MjE6MDQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgY2hhbmdlbG9nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNoYW5nZWxvZwotCi0yMDA1LTEwLTAyIDIzOjIwOjI2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OiBBZGQgYSBub3RlIGFib3V0IGFjdGl2YXRpb24gb2YgcHJveHkgcGFkcyBvdXRzaWRlIG9mIGdob3N0IHBhZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMDMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OiBBZGQgYSBub3RlIGFib3V0IGFjdGl2YXRpb24gb2YKLQkgIHByb3h5IHBhZHMgb3V0c2lkZSBvZiBnaG9zdCBwYWRzLgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogSW1wbGVtZW50IHRoZSBnaG9zdCBwYWQgYWN0aXZhdGlvbiBkZXNpZ24uCi0KLTIwMDUtMTAtMDIgMTg6NTc6MDcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdG9iamVjdC5oIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKTogSnVzdCB1c2UgdGhlIGludC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0wMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdG9iamVjdC5oIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKTogSnVzdCB1c2UgdGhlIGludC4KLQkgIEl0IGlzIHZvbGF0aWxlLCBhZnRlciBhbGwuCi0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OiBGbGVzaCBvdXQgYWN0aXZhdGlvbiB3aXRoCi0JICBnaG9zdCBwYWRzLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19pbml0KTogVXNlCi0JICBHU1RfREVCVUdfRlVOQ1BUUi4KLQotMjAwNS0xMC0wMiAxODozMDoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBGaXggKHVudXNlZCkgQU1fQ09ORElUSU9OQUwgdGVzdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgRml4ICh1bnVzZWQpIEFNX0NPTkRJVElPTkFMIHRlc3RzLgotCi0yMDA1LTEwLTAxIDE3OjExOjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0dXRpbHMuYzogQWRkIGFzc2VydGlvbiB0aGF0IG1ha2VzIHN1cmUgc3JjX3ZhbCBpcyA+PTAsIGp1c3QgbGlrZSBnc3RfcXVlcnlfbmV3X2NvbnZlcnQoKSBoYXMuICgjMzE1ODk1KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZXZpZXdlZCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9wYWRfcXVlcnlfY29udmVydCk6Ci0JICBBZGQgYXNzZXJ0aW9uIHRoYXQgbWFrZXMgc3VyZSBzcmNfdmFsIGlzID49MCwganVzdCBsaWtlCi0JICBnc3RfcXVlcnlfbmV3X2NvbnZlcnQoKSBoYXMuICgjMzE1ODk1KQotCi0yMDA1LTA5LTMwIDE1OjQzOjAzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6IExldCdzIG5vdCBpdGVyYXRlIHBhZHMgd2UncmUgbm90IGludGVyZXN0ZWQgaW4sIGl0IGF2b2lkcyBnZXR0aW5nIHNreS1oaWdoIHJlZmNvdW50cyBvbiBzaW5rcGFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfZG9fcHVzaCksIChnc3RfdGVlX2hhbmRsZV9idWZmZXIpOgotCSAgTGV0J3Mgbm90IGl0ZXJhdGUgcGFkcyB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiwgaXQgYXZvaWRzIGdldHRpbmcKLQkgIHNreS1oaWdoIHJlZmNvdW50cyBvbiBzaW5rcGFkLgotCi0yMDA1LTA5LTMwIDA4OjI5OjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBTbWFsbCB0d2VhaywgZWxlbWVudCBpbiBBU1lOQyByZW1haW5zIEFTWU5DLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JICBTbWFsbCB0d2VhaywgZWxlbWVudCBpbiBBU1lOQyByZW1haW5zIEFTWU5DLgotCi0yMDA1LTA5LTMwIDA4OjAwOjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBPbmx5IGVycm9yIGlzIGFuIGVycm9yLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBPbmx5IGVycm9yIGlzIGFuIGVycm9yLgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBCZXR0ZXIgZGVidWdnaW5nLgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlciksIChnc3RfcGFkX2NoYWluKToKLQkgIEFsc28gY2FsbCBwYWRfYmxvY2sgaW4gcGFkIGFsbG9jLgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9mbG93X2dldF9uYW1lKToKLQkgIEJldHRlciBkZWJ1Z2dpbmcuCi0KLTIwMDUtMDktMjkgMjA6MjY6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogRml4IGRvY3VtZW50YXRpb24gdHlwb3MuIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSk6Ci0JICBGaXggZG9jdW1lbnRhdGlvbiB0eXBvcy4gQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgotCi0yMDA1LTA5LTI5IDIwOjE2OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIGRpc2FibGUgcmVmY291bnQgY2hlY2tzIHVudGlsIHdlIHRyYWNrIHRoZSBkYW5nbGluZyByZWYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZGlzYWJsZSByZWZjb3VudCBjaGVja3MgdW50aWwgd2UgdHJhY2sgdGhlIGRhbmdsaW5nIHJlZgotCi0yMDA1LTA5LTI5IDE5OjQ1OjI3ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdHBsdWdpbi5jOiBNYWtlIHNvbWUgZXJyb3IgbWVzc2FnZXMgbW9yZSBlbmQtdXNlciBmcmllbmRseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6IE1ha2Ugc29tZSBlcnJvciBtZXNzYWdlcwotCSAgbW9yZSBlbmQtdXNlciBmcmllbmRseS4KLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKG1haW4pOiBDaGVjayBpZiBjb21tYW5kLWxpbmUgYXJndW1lbnQgaXMKLQkgIGEgZmlsZSBhbmQgYXR0ZW1wdCB0byBsb2FkIHRoYXQgZmlsZSBhcyBhIHBsdWdpbi4KLQotMjAwNS0wOS0yOSAxODozNzo0OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrLzogZml4IHRlc3RzIGZvciB0aGUgbmV3IHdhcm5pbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6Ci0JICAqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOgotCSAgZml4IHRlc3RzIGZvciB0aGUgbmV3IHdhcm5pbmcKLQkgICogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICBhZGQgYSB0ZXN0IGZvciBwaXBlbGluZSBhbmQgYnVzIGludGVyYWN0aW9uCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6Ci0JICBlbGVtZW50cyBzaG91bGQgYmUgTlVMTCBpZiB0aGV5IGdldCBkaXNwb3NlZDsgYWRkIGEgd2FybmluZyBpZiBub3QKLQotMjAwNS0wOS0yOSAxODozNTozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3RvYmplY3QuYzogZm9yIDIuNiByZWZjb3VudGluZywgbWFrZSBkZWJ1ZyBsb2cgbW9yZSBjb3JyZWN0IGJ5IHByaW50aW5nIHRoZSBhY3R1YWwgcmVmY291bnRzIGF0IHRoZSB0aW1lIG9mIHN3YS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RvYmplY3QuYzoKLQkgIGZvciAyLjYgcmVmY291bnRpbmcsIG1ha2UgZGVidWcgbG9nIG1vcmUgY29ycmVjdCBieSBwcmludGluZwotCSAgdGhlIGFjdHVhbCByZWZjb3VudHMgYXQgdGhlIHRpbWUgb2Ygc3dhcCAoV2ltKQotCi0yMDA1LTA5LTI5IDE4OjI1OjUwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJ1cy5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIHVzZSBtZXNzYWdlIHR5cGUgbmFtZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXNlIG1lc3NhZ2UgdHlwZSBuYW1lcwotCi0yMDA1LTA5LTI5IDE2OjA2OjE4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIGNoYW5nZWxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjaGFuZ2Vsb2cKLQotMjAwNS0wOS0yOSAxNjowNDozMSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0YnVzLmMgKGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCk6IE5ldyBmdW5jdGlvbiwgcmVtb3ZlcyBzaWduYWwgd2F0Y2hlcyBwcmV2aW91c2x5IGFkZGVkIHZpYSBnc3RfYnVzX2FkZF9zaWcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOS0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGJ1cy5jIChnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2gpOiBOZXcgZnVuY3Rpb24sCi0JICByZW1vdmVzIHNpZ25hbCB3YXRjaGVzIHByZXZpb3VzbHkgYWRkZWQgdmlhCi0JICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2guCi0JICAoZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKTogRG9uJ3QgcmV0dXJuIHRoZSBzb3VyY2UgaWQsIGp1c3Qgc3RvcmUKLQkgIGl0IG9uIHRoZSBidXMgaWYgdGhlcmUgd2Fzbid0IGFuIGlkIGFscmVhZHkuCi0JICAqIGdzdC9nc3RidXMuaCAoR3N0QnVzKTogQWRkIGEgY291cGxlIG5ldyBmaWVsZHMuIEFQSSBjaGFuZ2VzIGZvcgotCSAgYWRkX3NpZ25hbF93YXRjaCBhbmQgcmVtb3ZlX3NpZ25hbF93YXRjaC4KLQotMjAwNS0wOS0yOSAxNTozOToyMiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IEJldHRlciBpZiB3ZSBhY3R1YWxseSBpdGVyYXRlIHRoZSBsaXN0IDopCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChnc3RfY29udHJvbGxlcl9uZXdfbGlzdCk6Ci0JICBCZXR0ZXIgaWYgd2UgYWN0dWFsbHkgaXRlcmF0ZSB0aGUgbGlzdCA6KQotCi0yMDA1LTA5LTI5IDEzOjA3OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IENoYW5nZSBmb3IgbmV3IGJ1cyBBUEkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQ2hhbmdlIGZvciBuZXcgYnVzIEFQSS4KLQkgICogY2hlY2svZ3N0L2dzdGJ1cy5jOiAobWVzc2FnZV9mdW5jX2VvcyksIChtZXNzYWdlX2Z1bmNfYXBwKSwKLQkgIChzZW5kX21lc3NhZ2VzKSwgKEdTVF9TVEFSVF9URVNUKSwgKGdzdGJ1c19zdWl0ZSk6Ci0JICBDaGFuZ2UgZm9yIG5ldyBidXMgc2lnbmFsIEFQSS4KLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19jbGFzc19pbml0KSwgKGdzdF9idXNfaGF2ZV9wZW5kaW5nKSwKLQkgIChnc3RfYnVzX3NvdXJjZV9wcmVwYXJlKSwgKGdzdF9idXNfc291cmNlX2NoZWNrKSwKLQkgIChnc3RfYnVzX2NyZWF0ZV93YXRjaCksIChnc3RfYnVzX2FkZF93YXRjaF9mdWxsKSwKLQkgIChnc3RfYnVzX2FkZF93YXRjaCksIChnc3RfYnVzX3BvbGwpLCAoZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYyksCi0JICAoZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyKSwgKGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCk6Ci0JICAqIGdzdC9nc3RidXMuaDoKLQkgIFJlbW92ZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBHU291cmNlcyBvcGVyYXRpbmcgb24gZGlmZmVyZW50Ci0JICBtZXNzYWdlIHR5cGVzIGFzIGl0IGlzIHRvbyBjb21wbGV4IGFuZCB1bm5lZWRlZCB3aGVuIHVzaW5nCi0JICBzaWduYWxzLgotCSAgQWRkZWQgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIHNpZ25hbHMgZnJvbSB0aGUgYnVzLgotCi0yMDA1LTA5LTI5IDEyOjM3OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcmVuYW1lIGZpbHRlci1jYXBzIHRvIGNhcHMgcHJvcGVydHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWw6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgcmVuYW1lIGZpbHRlci1jYXBzIHRvIGNhcHMgcHJvcGVydHkKLQotMjAwNS0wOS0yOSAxMjowNTo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dzdHZhbHVlLmM6IE1vcmUgcm9idXN0IGZyYWN0aW9uIHN0cmluZyBwYXJzaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uKToKLQkgIE1vcmUgcm9idXN0IGZyYWN0aW9uIHN0cmluZyBwYXJzaW5nLgotCSAgKiBkb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKLQkgIE1lbnRpb24gZ3N0X3BhZF91c2VfZXhwbGljaXRfY2FwcygpID0+IGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMoKQotCi0yMDA1LTA5LTI5IDEwOjU2OjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0Y2Fwcy5jOiBUaG91IHNoYWx0IG5vdCBmcmVlIGEgc3RydWN0dXJlIGFuZCB0aGVuIGNvbnRpbnVlIHVzaW5nIGl0IGluIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19kb19zaW1wbGlmeSk6Ci0JICBUaG91IHNoYWx0IG5vdCBmcmVlIGEgc3RydWN0dXJlIGFuZCB0aGVuIGNvbnRpbnVlIHVzaW5nIGl0Ci0JICBpbiB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4KLQkgICogY2hlY2svZ3N0L2dzdGNhcHMuYzogKGNoZWNrX2ZvdXJjY19saXN0KSwgKHRlc3Rfc2ltcGxpZnkpLAotCSAgKGdzdF9jYXBzX3N1aXRlKToKLQkgIEFkZCB0ZXN0IGNhc2UgZm9yIGNhcHMgc2ltcGxpZmljYXRpb24uCi0KLTIwMDUtMDktMjkgMDk6NDQ6MzUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgcmVtb3ZlIHR3byByZW1vdmVkIGZ1bmN0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgdHdvIHJlbW92ZWQgZnVuY3Rpb25zCi0KLTIwMDUtMDktMjkgMDk6NDI6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RiaW4uYzogT29wcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBPb3BzLgotCi0yMDA1LTA5LTI5IDA5OjM5OjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IEFkZCBidXMgdG8gYmluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFkZCBidXMgdG8gYmluLgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2Jpbl9pbml0KSwKLQkgIChhZGRfdG9fcXVldWUpLCAoY2xlYXJfcXVldWUpLCAocmVzZXRfZGVncmVlKSwgKHVwZGF0ZV9kZWdyZWUpLAotCSAgKGZpbmRfZWxlbWVudCksIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV4dCksCi0JICAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX3Jlc3luYyksIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfZnJlZSksCi0JICAoZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCksIChnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlKSwKLQkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZSksIChnc3RfYmluX2Rpc3Bvc2UpOgotCSAgQSBiaW4gZG9lcyBub3QgaGF2ZSBhIGJ1cywgaXQgZ2V0cyB0aGUgYnVzIGZyb20gdGhlIHBhcmVudC4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3JlcXVpcmVzX2Nsb2NrKSwKLQkgIChnc3RfZWxlbWVudF9wcm92aWRlc19jbG9jayksIChnc3RfZWxlbWVudF9pc19pbmRleGFibGUpLAotCSAgKGdzdF9lbGVtZW50X2lzX2xvY2tlZF9zdGF0ZSksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X3NldF9idXNfZnVuYyk6Ci0JICBTbWFsbCBjbGVhbnVwcy4KLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3BpcGVsaW5lX2luaXQpLCAoZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyk6Ci0JICBUaGUgcGlwZWxpbmUgcHJvdmlkZXMgYSBidXMuCi0KLTIwMDUtMDktMjkgMDI6MzI6MzcgKzAwMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JICBnc3QvZ3N0bWVzc2FnZS5jIChnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKTogVXNlIGdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW0gaW5zdGVhZCBvZiBnc3Rfc3RydWN0dXJlX2dldF9pbnQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jIChnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkKTogVXNlCi0JICBnc3Rfc3RydWN0dXJlX2dldF9lbnVtIGluc3RlYWQgb2YgZ3N0X3N0cnVjdHVyZV9nZXRfaW50Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYyAoZ3N0X3N0cnVjdHVyZV9nZXRfZW51bSk6IEltcGwuCi0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaCAoZ3N0X3N0cnVjdHVyZV9nZXRfZW51bSk6IEFkZAotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBEaXR0bwotCi0yMDA1LTA5LTI5IDAxOjU3OjAwICswMDAwICBKb2hhbiBEYWhsaW4gPGpvaGFuQGdub21lLm9yZz4KLQotCSAgZ3N0L2dzdG1lc3NhZ2UuYyAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpOiBVc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCk6IFVzZQotCSAgR1NUX1RZUEVfU1RBVEUgaW5zdGVhZCBvZiBHX1RZUEVfSU5ULCBtYWlubHkgZm9yIGxhbmd1YWdlIGJpbmRpbmdzCi0JICB3aGljaCBkb2VzIGludHJvc3BlY3Rpb24uCi0JICBSZXZpZXdlZCBieSBDaHJpc3RpYW4gU2NoYWxsZXIKLQotMjAwNS0wOS0yOCAxODoxNDoxMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBmaXhlZCB1bWxhdXRzIGluIENoYW5nZUxvZyBhZ2FpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXhlZCB1bWxhdXRzIGluIENoYW5nZUxvZyBhZ2FpbgotCi0yMDA1LTA5LTI4IDE3OjMwOjEzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmZvLmM6IGRvbid0IGRvIGR1bW15IGdfc3RyZHVwKClzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZm8uYzogKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk6Ci0JICBkb24ndCBkbyBkdW1teSBnX3N0cmR1cCgpcwotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgIChvbl9vYmplY3RfY29udHJvbGxlZF9wcm9wZXJ0eV9jaGFuZ2VkKSwKLQkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcpLCAoZ3N0X2NvbnRyb2xsZXJfbmV3X3ZhbGlzdCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QpLAotCSAgKGdzdF9jb250cm9sbGVyX3JlbW92ZV9wcm9wZXJ0aWVzX3ZhbGlzdCksIChnc3RfY29udHJvbGxlcl9zZXQpLAotCSAgKGdzdF9jb250cm9sbGVyX2dldCksIChnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcyksCi0JICAoZ3N0X2NvbnRyb2xsZXJfZ2V0X3ZhbHVlX2FycmF5KSwgKF9nc3RfY29udHJvbGxlcl9jbGFzc19pbml0KSwKLQkgIChnc3RfY29udHJvbGxlcl9nZXRfdHlwZSk6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9maW5kX3RpbWVkX3ZhbHVlX25vZGUpOgotCSAgY29udmVydCAvLyB0byAvKiovIGNvbW1lbnRzCi0KLTIwMDUtMDktMjggMTY6NDM6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidXMuKjogQWRkZWQgYXN5bmMtbWVzc2FnZSBhbmQgc3luYy1tZXNzYWdlIHNpZ25hbHMgdG8gdGhlIGJ1cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpLCAoZ3N0X2J1c19jbGFzc19pbml0KSwKLQkgIChnc3RfYnVzX3Bvc3QpLCAocG9sbF9mdW5jKSwgKGdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMpLAotCSAgKGdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlcik6Ci0JICAqIGdzdC9nc3RidXMuaDoKLQkgIEFkZGVkIGFzeW5jLW1lc3NhZ2UgYW5kIHN5bmMtbWVzc2FnZSBzaWduYWxzIHRvIHRoZSBidXMuCi0JICBBZGRlZCBoZWxwZXIgQnVzRnVuYyB0byBlbWl0IHNpZ25hbHMgZm9yIGFsbCBwb3N0ZWQgbWVzc2FnZXMuCi0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lKSwKLQkgIChnc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrKSwgKGdzdF9tZXNzYWdlX2dldF90eXBlKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgIFJlZ2lzdGVyIHF1YXJrcyBmb3IgbWVzc2FnZSBuYW1lcy4KLQotMjAwNS0wOS0yOCAxNjozOToyOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBhZGRlZCBhbm90aGVyIGNvbnN0cnVjdG9yIGZvciBsYW5ndWFnZSBiaW5kaW5ncwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOiAoZ3N0X2NvbnRyb2xsZXJfbmV3X3ZhbGlzdCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfbmV3X2xpc3QpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkgIGFkZGVkIGFub3RoZXIgY29uc3RydWN0b3IgZm9yIGxhbmd1YWdlIGJpbmRpbmdzCi0KLTIwMDUtMDktMjggMTU6NDU6MjEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzogYWRkIGFub3RoZXIgY2hlY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9waXBlbGluZV9zdWl0ZSk6Ci0JICBhZGQgYW5vdGhlciBjaGVjawotCSAgKiBnc3QvZ3N0YnVzLmM6Ci0JICBhZGQgc29tZSBkb2MKLQkgICogZ3N0L2dzdGluZm8uYzogKF9nc3RfZGVidWdfaW5pdCk6Ci0JICBzbGlnaHRseSBtb3JlIHJlYWRhYmxlIGNvbG9yIGZvciByZWZjb3VudCBkZWJ1Z2dpbmcKLQotMjAwNS0wOS0yOCAxMzo0MToyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBTbWFsbCBkb2MgZml4ZXMuIGdldF9jbG9jayAtPiBwcm92aWRlX2Nsb2NrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX3Byb3ZpZGVfY2xvY2tfZnVuYyksCi0JICAoYWRkX3RvX3F1ZXVlKSwgKGNsZWFyX3F1ZXVlKSwgKHJlc2V0X2RlZ3JlZSksICh1cGRhdGVfZGVncmVlKSwKLQkgIChmaW5kX2VsZW1lbnQpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25leHQpLAotCSAgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9yZXN5bmMpLCAoZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX2ZyZWUpLAotCSAgKGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQpLCAoZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2Jpbl9kaXNwb3NlKToKLQkgIFNtYWxsIGRvYyBmaXhlcy4gZ2V0X2Nsb2NrIC0+IHByb3ZpZGVfY2xvY2suCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19pbml0KSwKLQkgIChnc3RfZWxlbWVudF9wcm92aWRlc19jbG9jayksIChnc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrKSwKLQkgIChnc3RfZWxlbWVudF9nZXRfY2xvY2spLCAoZ3N0X2VsZW1lbnRfY29tbWl0X3N0YXRlKSwKLQkgIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIE1ha2UgZ2V0L3NldF9jbG9jaygpIHN5bWV0cmljLiBBZGQgcHJvdmlkZV9jbG9jayB2bWV0aG9kIHNpbmNlCi0JICB0aGF0IGlzIGFjdHVhbGx5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwKLQkgIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKSwgKGdzdF9waXBlbGluZV9wcm92aWRlX2Nsb2NrX2Z1bmMpLAotCSAgKGdzdF9waXBlbGluZV9nZXRfY2xvY2spOgotCSAgZ2V0X2Nsb2NrIC0+IHByb3ZpZGVfY2xvY2suCi0KLTIwMDUtMDktMjggMTM6MDU6MTIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfdW5sb2NrKTogQ29tbWVudCBhIGJpdCBpbiBsaWV1IG9mIHJlYWwgZG9jcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA5LTI4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY191bmxvY2spOiBDb21tZW50IGEgYml0IGluCi0JICBsaWV1IG9mIHJlYWwgZG9jcy4uLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzogQ2xlYW5lZCB1cCBhIGJpdC4KLQotMjAwNS0wOS0yOCAxMjo1Mjo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2VsZW1lbnRzLzogTWFrZSBlbGVtZW50IGRldGFpbHMgc3RhdGljLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgTWFrZSBlbGVtZW50IGRldGFpbHMgc3RhdGljLgotCi0yMDA1LTA5LTI4IDExOjAzOjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IFNvbWUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGFkZF90b19xdWV1ZSksIChjbGVhcl9xdWV1ZSksIChyZXNldF9vdXRkZWdyZWUpLAotCSAgKHVwZGF0ZV9vdXRkZWdyZWUpLCAoZmluZF9lbGVtZW50KSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KSwKLQkgIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9mcmVlKSwKLQkgIChnc3RfYmluX2l0ZXJhdGVfc29ydGVkKSwgKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKSwgKGdzdF9iaW5fZGlzcG9zZSk6Ci0JICBTb21lIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KLQkgIENsZWFuIHVwIGRpc3Bvc2UgaGFuZGxlcnMuCi0JICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfcmVmKSwgKGdzdF9vYmplY3RfdW5yZWYpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2Rpc3Bvc2UpOgotCSAgQ2xlYW4gdXAgZGlzcG9zZSBoYW5kbGVyLgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOgotCSAgUmVtb3ZlZCBzcHVyaW91cyBVTkxPQ0suCi0KLTIwMDUtMDktMjcgMjA6NDA6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgYWRkZWQgdHdvIG5ldyBmdW5jdGlvbnMgdG8gdGhlIGRvY3MgZG9jdW1lbnRzIGFsbCB1bmRvY3VtZW50ZWQgR3N0WFhYRmxhZ3MgY29tcGxldGVkIHNvbWUgaW5jb21wbGV0ZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICAqIGdzdC9nc3R4bWwuaDoKLQkgIGFkZGVkIHR3byBuZXcgZnVuY3Rpb25zIHRvIHRoZSBkb2NzCi0JICBkb2N1bWVudHMgYWxsIHVuZG9jdW1lbnRlZCBHc3RYWFhGbGFncwotCSAgY29tcGxldGVkIHNvbWUgaW5jb21wbGV0ZSBkb2NzCi0KLTIwMDUtMDktMjcgMTg6MzM6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvOiByZW1vdmUgbm93IHVzZWxlc3MgYW5kIGxlYWt5IHJlc3VycmVjdGlvbiBjb2RlIGluIGRpc3Bvc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2Rpc3Bvc2UpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZGlzcG9zZSk6Ci0JICByZW1vdmUgbm93IHVzZWxlc3MgYW5kIGxlYWt5IHJlc3VycmVjdGlvbiBjb2RlIGluIGRpc3Bvc2UKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2luaXQpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlKToKLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9zZXRfcGFyZW50KToKLQkgIGFkZCBzb21lIGRlYnVnZ2luZwotCi0yMDA1LTA5LTI3IDE3OjAwOjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OiBVcGRhdGUgVE9ETy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgVXBkYXRlIFRPRE8uCi0JICAqIGdzdC9nc3RiaW4uYzogKGFkZF90b19xdWV1ZSksIChjbGVhcl9xdWV1ZSksIChyZXNldF9vdXRkZWdyZWUpLAotCSAgKHVwZGF0ZV9vdXRkZWdyZWUpLCAoZmluZF9lbGVtZW50KSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KSwKLQkgIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9mcmVlKSwKLQkgIChnc3RfYmluX2l0ZXJhdGVfc29ydGVkKSwgKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIFJlbW92ZSBlbGVtZW50IHZhcmlhYmxlLCB3ZSBrZWVwIGVsZW1lbnQgaW5mbyBpbiB0aGUgaXRlcmF0b3Igbm93LgotCi0yMDA1LTA5LTI3IDE2OjMwOjI2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogRml4IGVycm9yLWNoZWNraW5nIHJldHVybiB2YWx1ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDktMjcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogRml4IGVycm9yLWNoZWNraW5nIHJldHVybgotCSAgdmFsdWVzLgotCi0yMDA1LTA5LTI3IDE2OjE2OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IEVuYWJsZSBjaGVjayB0aGF0IHdvcmtzIG5vdy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBFbmFibGUgY2hlY2sgdGhhdCB3b3JrcyBub3cuCi0JICAqIGdzdC9nc3RiaW4uYzogKGFkZF90b19xdWV1ZSksIChjbGVhcl9xdWV1ZSksIChyZXNldF9vdXRkZWdyZWUpLAotCSAgKHVwZGF0ZV9vdXRkZWdyZWUpLCAoZmluZF9lbGVtZW50KSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0KSwKLQkgIChnc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jKSwgKGdzdF9iaW5fc29ydF9pdGVyYXRvcl9mcmVlKSwKLQkgIChnc3RfYmluX2l0ZXJhdGVfc29ydGVkKSwgKGdzdF9iaW5fZWxlbWVudF9zZXRfc3RhdGUpLAotCSAgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2dzdGJpbi5oOgotCSAgUmVkaWQgdGhlIHN0YXRlIGNoYW5nZSBhbGdvcml0aG0gdXNpbmcgYSB0b3BvbG9naWNhbCBzb3J0IGFsZ28uCi0JICBIYW5kbGVzIGFsbCBjYXNlcyBjb3JyZWN0bHkuCi0JICBFeHBvc2VkIGl0ZXJhdG9yIGZvciBzdGF0ZSBjaGFuZ2Ugb3JkZXIuCi0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBUZW1wIHN0b3JhZ2UgZm9yIHN0YXRlIGNoYW5nZXMuIE5lZWQgdG8gZ2V0IHJpZCBvZiB0aGlzIHNvb24uCi0KLTIwMDUtMDktMjcgMTU6Mzc6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IExlYWsgZml4ZXMsIHRoZSBmb2xkIGZ1bmN0aW9ucyBuZWVkIHRvIHVucmVmIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCBfZ2V0X3BhcmVudF8qKCkgcmV0dXJucyByZWYgdG8gcGFyZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfaW5pdCksIChnc3RfdGVlX2RvX3B1c2gpOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGludGVyc2VjdF9jYXBzX2Z1bmMpLCAoZ3N0X3BhZF9wcm94eV9nZXRjYXBzKSwKLQkgIChsaW5rX2ZvbGRfZnVuYyksIChnc3RfcGFkX3Byb3h5X3NldGNhcHMpOgotCSAgTGVhayBmaXhlcywgdGhlIGZvbGQgZnVuY3Rpb25zIG5lZWQgdG8gdW5yZWYgdGhlIHBhc3NlZCBvYmplY3QgYW5kCi0JICBfZ2V0X3BhcmVudF8qKCkgcmV0dXJucyByZWYgdG8gcGFyZW50LgotCi0yMDA1LTA5LTI3IDEzOjI1OjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjaGVjay9nc3QvZ3N0YnVmZmVyLmM6IFBsdWcgbGVhayBpbiB0ZXN0IGNhc2UgYW5kIGZpeCAnbWFrZSBjaGVjay12YWxncmluZCcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YnVmZmVyLmM6ICh0ZXN0X21ha2Vfd3JpdGFibGUpOgotCSAgUGx1ZyBsZWFrIGluIHRlc3QgY2FzZSBhbmQgZml4ICdtYWtlIGNoZWNrLXZhbGdyaW5kJwotCi0yMDA1LTA5LTI3IDEzOjA3OjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0YnVmZmVyLmM6IFNldCBSRUFET05MWSBmbGFnIG9uIHN1YmJ1ZmZlcnMsIHNvIHRoYXQgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgd29ya3MgY29ycmVjdGx5IGluIGFsbCBjaXJjdW1zdGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3Rfc3ViYnVmZmVyX2luaXQpOgotCSAgU2V0IFJFQURPTkxZIGZsYWcgb24gc3ViYnVmZmVycywgc28gdGhhdCBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKQotCSAgd29ya3MgY29ycmVjdGx5IGluIGFsbCBjaXJjdW1zdGFuY2VzICh3ZSBjb3VsZCBoYXZlIGp1c3QgY29waWVkCi0JICB0aGUgcGFyZW50IGJ1ZmZlcidzIHJlYWRvbmx5IGZsYWcsIGJ1dCBjb25jZXB0dWFsbHkgaXQgc2VlbXMKLQkgIGNsZWFuZXIgdG8gbWFyayBhbGwgc3ViYnVmZmVycyBhcyByZWFkLW9ubHkpLiAoYmFzZWQgb24gcGF0Y2gKLQkgIGJ5IEFsZXNzYW5kcm8gRGVjaW5hLCAjMzE0NzEwKS4KLQkgICogY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOiAoY3JlYXRlX3JlYWRfb25seV9idWZmZXIpLAotCSAgKHRlc3RfbWFrZV93cml0YWJsZSksICh0ZXN0X3N1YmJ1ZmZlcl9tYWtlX3dyaXRhYmxlKSwKLQkgIChnc3RfdGVzdF9zdWl0ZSk6Ci0JICBBZGQgc29tZSB0ZXN0cyBmb3IgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkuCi0KLTIwMDUtMDktMjcgMDk6NTc6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogdXNlIGdzdF9vYmplY3RfaGFzX2FuY2VzdG9yKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2VsZW1lbnRfaXNfc2VtaV9zaW5rKSwgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKLQkgIHVzZSBnc3Rfb2JqZWN0X2hhc19hbmNlc3RvcigpLgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2hhc19hbmNlc3Rvcik6Ci0JICAqIGdzdC9nc3RvYmplY3QuaDoKLQkgIGdzdF9vYmplY3RfaGFzX2FuY2VzdG9yKCkgY29waWVkIGZyb20gZ3N0YmluLmMgYXMgaXQgaXMgYQotCSAgdXNlZnVsbCBmdW5jdGlvbi4KLQkgICogdGVzdHMvaW5zdGFudGlhdGUvY3JlYXRlLmM6IChjcmVhdGVfYWxsX2VsZW1lbnRzKToKLQkgICogdGVzdHMvbGF0LmM6IChoYW5kb2ZmX3NyYyksIChoYW5kb2ZmX3NpbmspOgotCSAgKiB0ZXN0cy9zY2hlZC9ydW54bWwuYzogKG1haW4pOgotCSAgKiB0ZXN0cy9zZWVraW5nL3NlZWtpbmcxLmM6IChtYWluKToKLQkgICogdGVzdHMvdGhyZWFkc3RhdGUvdGhyZWFkc3RhdGUyLmM6IChidXNfaGFuZGxlciksICh0aW1lb3V0X2Z1bmMpLAotCSAgKG1haW4pOgotCSAgRml4IGNvbXBpbGF0aW9uIG9mIHNvbWUgdGVzdHMuCi0KLTIwMDUtMDktMjcgMDk6Mjk6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3RlcnJvci5oOiBSZW1vdmUgY29tbWVudC4gR1NUX1RZUEVfR19FUlJPUiBpcyBoZXJlIHRvIHN0YXksCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVycm9yLmg6Ci0JICBSZW1vdmUgY29tbWVudC4gR1NUX1RZUEVfR19FUlJPUiBpcyBoZXJlIHRvIHN0YXksCi0JICBHX1RZUEVfRVJST1IgaGFzIGJlZW4gV09OVEZJWCdlZCBieSB0aGUgR0xpYiBmb2xrcwotCSAgKCMzMTY5NjEsICMzMDA2MTApLgotCi0yMDA1LTA5LTI2IDE4OjIyOjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IEFkZGVkIGNoZWNrIHRoYXQgc2hvd3MgZXJyb3IgaW4gc3RhdGUgY2hhbmdlIG9yZGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9iaW5fc3VpdGUpOgotCSAgQWRkZWQgY2hlY2sgdGhhdCBzaG93cyBlcnJvciBpbiBzdGF0ZSBjaGFuZ2Ugb3JkZXIuCi0KLTIwMDUtMDktMjYgMTc6NDY6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogTWFrZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gdXNlIDMgcXVldWVzIGFnYWluLCB3ZSB3ZXJlIGFkZGluZyBlbGVtZW50cyBpbiB0aGUgd3Jvbmcgb3JkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSAgTWFrZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gdXNlIDMgcXVldWVzIGFnYWluLCB3ZSB3ZXJlCi0JICBhZGRpbmcgZWxlbWVudHMgaW4gdGhlIHdyb25nIG9yZGVyLgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfZG9fdW5saW5rKToKLQkgIFNvbWUgZGVidWcgaW5mbywKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9kaXNwb3NlKToKLQkgIEFkZGVkIHNvbWUgZGVidWcgaW5mbyBmaXJzdC4KLQotMjAwNS0wOS0yNiAxNzo0MDozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9kZXNpZ24vOiBSZXBsYWNlIGFsbCBfcHVsbF9yZWdpb24oKSB3aXRoIF9wdWxsX3JhbmdlKCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9kcmFmdC1wdXNoLXB1bGwudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXNjaGVkdWxpbmcudHh0OgotCSAgUmVwbGFjZSBhbGwgX3B1bGxfcmVnaW9uKCkgd2l0aCBfcHVsbF9yYW5nZSgpCi0KLTIwMDUtMDktMjYgMTY6MTk6MjcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JICB0cnkgdGhlIGZvdXJ0aAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0cnkgdGhlIGZvdXJ0aAotCi0yMDA1LTA5LTI2IDE2OjEyOjA3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZm9vCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZvbwotCi0yMDA1LTA5LTI2IDE2OjA3OjU0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOiBCZXR0ZXIgZmFrZW91dC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOS0yNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHZhbHVlLmMgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6IEJldHRlciBmYWtlb3V0LgotCi0yMDA1LTA5LTI2IDE1OjQ5OjIzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogVXBkYXRlIGZvciBjb250cm9sbGVyIGFwaSBjaGFuZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDktMjYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogVXBkYXRlIGZvciBjb250cm9sbGVyIGFwaSBjaGFuZ2UuCi0KLTIwMDUtMDktMjYgMTU6NDM6MzAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgUmVtb3ZlIG1lbWNodW5rIGJlbmNobWFyayBzdHVmZiwgdGhpcyBpcyB0YWtlbiBvdmVyIGJ5IEdMaWIgYnVnIDExODQzOS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOS0yNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiB0ZXN0cy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvbWVtY2h1bms6IFJlbW92ZSBtZW1jaHVuayBiZW5jaG1hcmsgc3R1ZmYsIHRoaXMgaXMgdGFrZW4KLQkgIG92ZXIgYnkgR0xpYiBidWcgMTE4NDM5LgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX3dhaXQpOiBGYWN0b3Igb3V0IHRoZSB3YWl0Ci0JICByb3V0aW5lcyB0byBhIGZ1bmN0aW9uLgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OiBJIGFtIGEgZ29vZCBwZXJzb24gdG9kYXkuCi0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oIChnc3RfY29udHJvbGxlcl9zeW5jX3ZhbHVlcykKLQkgIChnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKTogUmVuYW1lZCBmcm9tIHNpbmtfdmFsdWVzLiBVZ2guCi0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6IFVwZGF0ZSBmb3IgX19nc3RfY29udHJvbGxlcl9rZXkuCi0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jIChfX2dzdF9jb250cm9sbGVyX2tleSk6Ci0JICBSZW5hbWVkIGZyb20gY29udHJvbGxlcl9rZXksIGFzIGl0IGlzIGV4cG9ydGVkLgotCSAgKiBnc3QvZ3N0dmFsdWUuYyAoX2dzdF92YWx1ZV9pbml0aWFsaXplKTogRmFrZSBvdXQgdGhlIGNvbXBpbGVyLgotCi0yMDA1LTA5LTI2IDE1OjAzOjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHBhZHRlbXBsYXRlLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHF1ZXJ5dXRpbHMuYzoKLQkqIGdzdC9nc3RxdWVyeXV0aWxzLmg6Ci0JICByZW1vdmUgcXVlcnl1dGlscyBoZWFkZXJzIGFmdGVyIG1vdmluZyB0aGUgdHdvIHVzZWQgZnVuY3Rpb25zIHRvIGdzdHF1ZXJ5LiAgYWxzbyBmaXhlcyBidWlsZCBwcm9ibGVtIGZvciBnc3RzaWRkZWMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIHF1ZXJ5dXRpbHMgaGVhZGVycyBhZnRlciBtb3ZpbmcgdGhlIHR3byB1c2VkIGZ1bmN0aW9ucwotCSAgdG8gZ3N0cXVlcnkuICBhbHNvIGZpeGVzIGJ1aWxkIHByb2JsZW0gZm9yIGdzdHNpZGRlYwotCi0yMDA1LTA5LTI2IDEzOjQwOjIxICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guMS5pbjoKLQkgIENvcnJlY3Qgc3ludGF4IGZvciBkZWJ1ZyBvcHRpb24gaW4gZ3N0LWxhdW5jaCBtYW5wYWdlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENvcnJlY3Qgc3ludGF4IGZvciBkZWJ1ZyBvcHRpb24gaW4gZ3N0LWxhdW5jaCBtYW5wYWdlCi0KLTIwMDUtMDktMjYgMTE6MjE6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogU29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UpLAotCSAgKGdzdF9iYXNlX3NyY19pc19zZWVrYWJsZSksIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgIFNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW5mby4KLQotMjAwNS0wOS0yNSAxODozNDo0OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBhZGRlZCBtb3JlIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICAqIGdzdC9nc3RpbmRleC5oOgotCSAgYWRkZWQgbW9yZSBkb2NzCi0KLTIwMDUtMDktMjUgMTI6MTE6MzkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgaW5saW5lZCB0aGUgbGFzdCB0d28gZG9jcyBmaWxlcyByZW1vdmVkIHRoZSB0bXBsIGRpcmVjdG9yeSBmcm9tIGN2cyAobm8gbW9yZSBjb25mbGljdHMgaGVyZSEpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvLmN2c2lnbm9yZToKLQkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHBpcGVsaW5lLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luLnNnbWw6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uaDoKLQkgIGlubGluZWQgdGhlIGxhc3QgdHdvIGRvY3MgZmlsZXMKLQkgIHJlbW92ZWQgdGhlIHRtcGwgZGlyZWN0b3J5IGZyb20gY3ZzIChubyBtb3JlIGNvbmZsaWN0cyBoZXJlISkKLQotMjAwNS0wOS0yNSAxMToxOToyMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBpbmxpbmVkIHR3byBtb3JlIGRvY3MgZmFjdG9yZWQgZ3N0cGFkdGVtcGxhdGUgb3V0IG9mIGdzdHBhZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RwYWQuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RwYWR0ZW1wbGF0ZS5zZ21sOgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY2xhc3NfaW5pdCksIChnc3RfcGFkX2Rpc3Bvc2UpLAotCSAgKGdzdF9wYWRfZmluYWxpemUpLCAoZ3N0X3BhZF9zZXRfcGFkX3RlbXBsYXRlKToKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuYzogKGdzdF9wYWRfdGVtcGxhdGVfZ2V0X3R5cGUpLAotCSAgKGdzdF9wYWRfdGVtcGxhdGVfY2xhc3NfaW5pdCksIChnc3RfcGFkX3RlbXBsYXRlX2luaXQpLAotCSAgKGdzdF9wYWRfdGVtcGxhdGVfZGlzcG9zZSksIChuYW1lX2lzX3ZhbGlkKSwKLQkgIChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQpLCAoZ3N0X3BhZF90ZW1wbGF0ZV9uZXcpLAotCSAgKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKSwgKGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMpLAotCSAgKGdzdF9wYWRfdGVtcGxhdGVfcGFkX2NyZWF0ZWQpOgotCSAgKiBnc3QvZ3N0cGFkdGVtcGxhdGUuaDoKLQkgIGlubGluZWQgdHdvIG1vcmUgZG9jcwotCSAgZmFjdG9yZWQgZ3N0cGFkdGVtcGxhdGUgb3V0IG9mIGdzdHBhZAotCi0yMDA1LTA5LTI0IDE0OjM1OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IEZpeCB0ZXN0IGNhc2U6IHdlIGNhbid0IHJlbHkgb24gYSBmaXhlZCBzdGF0ZSBjaGFuZ2Ugb3JkZXIgd2hlbiBnb2luZyBmcm9tIFJFQURZID0+IFBBVVNFRCBiZWNhdXMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6ICh0ZXN0X2NoaWxkcmVuX3N0YXRlX2NoYW5nZV9vcmRlcl9mbGFnZ2VkX3NpbmspLAotCSAgKHRlc3RfY2hpbGRyZW5fc3RhdGVfY2hhbmdlX29yZGVyX3NlbWlfc2luayk6Ci0JICBGaXggdGVzdCBjYXNlOiB3ZSBjYW4ndCByZWx5IG9uIGEgZml4ZWQgc3RhdGUgY2hhbmdlIG9yZGVyIHdoZW4KLQkgIGdvaW5nIGZyb20gUkVBRFkgPT4gUEFVU0VEIGJlY2F1c2UgdGhlIHNpbmsgbWlnaHQgY29tbWl0IGl0cwotCSAgbmV3IHN0YXRlIGZpcnN0IHdoZW4gdGhlIGZpcnN0IGJ1ZmZlciBjcmVhdGVkIGJ5IHRoZSBzb3VyY2UKLQkgIHJlYWNoZXMgdGhlIHNpbmsgYmVmb3JlIHRoZSBzb3VyY2UgaGFzIGZpbmlzaGVkIGl0cyBjaGFuZ2Ugc3RhdGUuCi0JICAoVGVzdCBjYXNlIHN0aWxsIGZhaWxzIGF0IHRpbWVzLCBzZWUgIzMxNjg1NiwgY29tbWVudCA1IG9ud2FyZHMpCi0KLTIwMDUtMDktMjQgMTQ6MTQ6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RidXMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtb3ZlcnZpZXcudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZ21lbnRzLnR4dDoKLQkgICogZ3N0L2dzdGJpbi5jOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgICogZ3N0L2dzdGZpbHRlci5jOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzoKLQkgIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCi0yMDA1LTA5LTI0IDExOjQxOjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2dzdGNsb2NrLmg6IFdlbGwsIHRoYXQncyBlbWJhcmFzc2luZy4gIEx1Y2tpbHkgd2Ugd2VyZW4ndCB1c2luZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgV2VsbCwgdGhhdCdzIGVtYmFyYXNzaW5nLiAgTHVja2lseSB3ZSB3ZXJlbid0IHVzaW5nCi0JICBHU1RfQ0xPQ0tfRElGRiBhbnl3aGVyZS4KLQotMjAwNS0wOS0yMyAxODowODo1OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNvbW1vbi9ndGstZG9jLm1hazogZG9uJ3QgZmFpbCBvbiBidWlsZGluZyBYTUwsIEZDNCBzbGF2ZSBzaG93cyBhIGJ1bmNoIG9mIGRvYyBtaXNzaW5nIGJpdHMgdGhhdCBJIGRvbid0IGdldAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbW1vbi9ndGstZG9jLm1hazoKLQkgIGRvbid0IGZhaWwgb24gYnVpbGRpbmcgWE1MLCBGQzQgc2xhdmUgc2hvd3MgYSBidW5jaCBvZiBkb2MKLQkgIG1pc3NpbmcgYml0cyB0aGF0IEkgZG9uJ3QgZ2V0Ci0JICAqIGdzdC9nc3RwYWQuYzoKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgIHNvbWUgZG9jIHVwZGF0ZXMKLQotMjAwNS0wOS0yMyAxODowMjoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQWRkIGJsdXJiIGFib3V0IGhvdyB0aGUgYnVzIGdvZXMgaW50byBmbHVzaGluZyBtb2RlIGFuZCBkcm9wcyBhbGwgbWVzc2FnZXMgd2hlbiBpdHMgYmluIGdvZXMgZnJvbSBSRUFEWSBpbnRvIE5VTEwgc3RhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RiaW4udHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJ1cy50eHQ6Ci0JICAqIGdzdC9nc3RidXMuYzoKLQkgIEFkZCBibHVyYiBhYm91dCBob3cgdGhlIGJ1cyBnb2VzIGludG8gZmx1c2hpbmcgbW9kZSBhbmQKLQkgIGRyb3BzIGFsbCBtZXNzYWdlcyB3aGVuIGl0cyBiaW4gZ29lcyBmcm9tIFJFQURZIGludG8gTlVMTAotCSAgc3RhdGUuCi0KLTIwMDUtMDktMjMgMTc6NDY6MDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBhZGQgYSBtZXRob2QgdG8gZ2V0IGEgR3N0Q2xvY2tUaW1lIG91dCBvZiBhIHN0cnVjdHVyZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUpOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JICBhZGQgYSBtZXRob2QgdG8gZ2V0IGEgR3N0Q2xvY2tUaW1lIG91dCBvZiBhIHN0cnVjdHVyZQotCi0yMDA1LTA5LTIzIDE3OjE3OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IEFkZGVkIHRlc3QgdG8gY2hlY2sgc3RhdGUgY2hhbmdlIG9yZGVyIGluIGJpbnMgKGNhbiBzdGlsbCBiZSBtYWRlIHRvIGZhaWwgaGVyZSB1bmRlciBoZWF2eSBkaXNrIGwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6ICh0ZXN0X2NoaWxkcmVuX3N0YXRlX2NoYW5nZV9vcmRlcl9mbGFnZ2VkX3NpbmspLAotCSAgKHRlc3RfY2hpbGRyZW5fc3RhdGVfY2hhbmdlX29yZGVyX3NlbWlfc2luayksIChnc3RfYmluX3N1aXRlKToKLQkgIEFkZGVkIHRlc3QgdG8gY2hlY2sgc3RhdGUgY2hhbmdlIG9yZGVyIGluIGJpbnMgKGNhbiBzdGlsbCBiZSBtYWRlCi0JICB0byBmYWlsIGhlcmUgdW5kZXIgaGVhdnkgZGlzayBsb2FkOyBiYWlscyBvdXQgd2l0aCAnUHVzaCBvbiBwYWQKLQkgIGZha2VzaW5rOnNpbmswLCBidXQgaXQgd2FzIG5vdCBhY3RpdmF0ZWQgaW4gcHVzaCBtb2RlJykuCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2xhc3NfaW5pdCksIChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBGaXggc3RhdGUgY2hhbmdlIG9yZGVyIHdoZW4gdGhlcmUgaXMgb25seSBhIHNlbWkgc2luayAoIzMxNjg1NikKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19jbGFzc19pbml0KToKLQkgIFVzZSBfY2xhc3NfcGVla19wYXJlbnQoKSwgbm90IF9jbGFzc19yZWYoKTsgZml4IGRvY3MgdG8gc2F5Ci0JICAnZGVmYXVsdCBtYWluIGNvbnRleHQnIGluc3RlYWQgb2YgJ21haW5sb29wJyB3aGVyZSB0aGF0IGlzCi0JICB3aGF0J3MgbWVhbnQuCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jb21taXRfc3RhdGUpLAotCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSk6Ci0JICBGaXggdHlwb3MgaW4gZGVidWcgbWVzc2FnZXMKLQotMjAwNS0wOS0yMyAxNjozNTo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGluZm8uaDoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIGdzdC9nc3R2YWx1ZS5jOgotCSAgZml4IGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGRvY3MKLQotMjAwNS0wOS0yMyAxNTo0ODoxNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JICBkb24ndCBicmVhayBkb2NzIGJ1aWxkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvbid0IGJyZWFrIGRvY3MgYnVpbGQKLQotMjAwNS0wOS0yMyAxNTozNjoyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHZhcmlvdXMgZG9jIHVwZGF0ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL1JFQURNRToKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jbGFzc19pbml0KSwgKGdzdF9wYWRfY2hhaW4pOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzoKLQkgIHZhcmlvdXMgZG9jIHVwZGF0ZXMKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCk6Ci0JICBjaGFuZ2UgYW4gYXNzZXJ0IGludG8gYW4gZXJyb3IgdW50aWwgaXQgZ2V0cyBmaXhlZCBwcm9wZXJseQotCi0yMDA1LTA5LTIzIDE0OjMxOjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGlubGluZWQgMyBtb3JlIGJpaWlpZyBkb2MgZmlsZXMgYW5kIGFkZGVkIHNvbWUgbWlzc2luZyBkb2NzIG9uIHRoZSBmbHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGluZm8uc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgICogZ3N0L2dzdGluZm8uaDoKLQkgICogZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X29iamVjdF9jbGFzc19pbml0KToKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgaW5saW5lZCAzIG1vcmUgYmlpaWlnIGRvYyBmaWxlcyBhbmQgYWRkZWQgc29tZSBtaXNzaW5nIGRvY3Mgb24gdGhlIGZseQotCi0yMDA1LTA5LTIzIDExOjQxOjMwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcHV0IGJhY2sgc291cmNlIGluIHJlZ2lzdHJ5LiAgYWRkIGNoZWNrcyBmb3IgZmluZF9wbHVnaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0Ly5jdnNpZ25vcmU6Ci0JICAqIGNoZWNrL2dzdC9nc3RwbHVnaW4uYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9wbHVnaW5fc3VpdGUpOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogKGxvYWRfcGx1Z2luKSwKLQkgIChnc3RfcmVnaXN0cnlfeG1sX3NhdmVfcGx1Z2luKToKLQkgIHB1dCBiYWNrIHNvdXJjZSBpbiByZWdpc3RyeS4gIGFkZCBjaGVja3MgZm9yIGZpbmRfcGx1Z2luLgotCSAgKiB0ZXN0c3VpdGUvc3RhdGVzL2Jpbi5jOiAoYXNzZXJ0X3N0YXRlKSwgKGVtcHR5X2JpbiksCi0JICAodGVzdF9hZGRpbmdfb25lX2VsZW1lbnQpLCAobWFpbik6Ci0JICAqIHRlc3RzdWl0ZS9zdGF0ZXMvbG9ja2VkLmM6IChtYWluKToKLQkgIHNvbWUgY29tcGlsZS9ydW4gZml4ZXMKLQotMjAwNS0wOS0yMiAyMDowMjoxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JICBmaXggbGVhayBpbiB0aGUgdGVzdCBpdHNlbGYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGxlYWsgaW4gdGhlIHRlc3QgaXRzZWxmCi0KLTIwMDUtMDktMjIgMTg6MDc6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFByZXBhcmUgZm9yIG1vcmUgYWNjdXJhdGUgcG9zaXRpb24gcmVwb3J0aW5nIGFuZCBxdWVyeSBoYW5kbGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX3NlbmRfZXZlbnQpLCAoZ3N0X2Jhc2Vfc2lua19wZWVyX3F1ZXJ5KSwKLQkgIChnc3RfYmFzZV9zaW5rX3F1ZXJ5KToKLQkgIFByZXBhcmUgZm9yIG1vcmUgYWNjdXJhdGUgcG9zaXRpb24gcmVwb3J0aW5nIGFuZCBxdWVyeQotCSAgaGFuZGxpbmcuCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZW5kX2V2ZW50KSwKLQkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOgotCSAgQWRkIHNvbWUgY29tbWVudC4KLQotMjAwNS0wOS0yMiAxNzo0MDo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHF1ZXJ5Lio6IE1vcmUgZG9jdW1lbnRhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVlcnkuYzogKGdzdF9xdWVyeV9uZXdfc2VnbWVudCksIChnc3RfcXVlcnlfc2V0X3NlZ21lbnQpLAotCSAgKGdzdF9xdWVyeV9wYXJzZV9zZWdtZW50KToKLQkgICogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBNb3JlIGRvY3VtZW50YXRpb24uCi0JICBBZGQgc2VnbWVudCBxdWVyeSBmb3IgZnV0dXJlIHVzZS4KLQotMjAwNS0wOS0yMiAxNjo1MToyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBTb21lIG1vcmUgZGVidWcgaW5mby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKToKLQkgIFNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCk6Ci0JICBTaW1wbGlmeSBzZW5kX2V2ZW50Ci0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICBEb24ndCBrbm93IGhvdyBmbGFncyBnb3QgYnJva2VuLgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIEFkZGVkIG5ldyBxdWVyeS4KLQotMjAwNS0wOS0yMiAxNTozODoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY2hlY2svZ3N0L2dzdHZhbHVlLmM6IEFkZCBzaW1wbGlzdGljIHRlc3Qgc3VpdGUgZm9yIEdTVF9UWVBFX0RBVEUgc2VyaWFsaXNhdGlvbiBhbmQgZGVzZXJpYWxpc2F0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiAodGVzdF9kYXRlKSwgKGdzdF92YWx1ZV9zdWl0ZSk6Ci0JICBBZGQgc2ltcGxpc3RpYyB0ZXN0IHN1aXRlIGZvciBHU1RfVFlQRV9EQVRFIHNlcmlhbGlzYXRpb24gYW5kCi0JICBkZXNlcmlhbGlzYXRpb24uCi0KLTIwMDUtMDktMjIgMTU6MDg6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFkZCBHU1RfVFlQRV9EQVRFLCBhIGJveGVkIHR5cGUgdGhhdCB3cmFwcyBHRGF0ZSwgYW5kIHRoZSB1c3VhbCBidW5jaCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbG9uZyB3aXRoIGEgaGFjayB0aGF0IGNoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdCksCi0JICAoZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZSk6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfc2V0X2RhdGUpLCAoZ3N0X3ZhbHVlX2dldF9kYXRlKSwKLQkgIChnc3RfZGF0ZV9jb3B5KSwgKGdzdF92YWx1ZV9jb21wYXJlX2RhdGUpLAotCSAgKGdzdF92YWx1ZV9zZXJpYWxpemVfZGF0ZSksIChnc3RfdmFsdWVfZGVzZXJpYWxpemVfZGF0ZSksCi0JICAoZ3N0X3ZhbHVlX3RyYW5zZm9ybV9kYXRlX3N0cmluZyksCi0JICAoZ3N0X3ZhbHVlX3RyYW5zZm9ybV9zdHJpbmdfZGF0ZSksIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgotCSAgKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIEFkZCBHU1RfVFlQRV9EQVRFLCBhIGJveGVkIHR5cGUgdGhhdCB3cmFwcyBHRGF0ZSwgYW5kIHRoZSB1c3VhbAotCSAgYnVuY2ggb2YgdXRpbGl0eSBmdW5jdGlvbnMgYWxvbmcgd2l0aCBhIGhhY2sgdGhhdCBjaGVja3MgdGhhdAotCSAgZGV2ZWxvcGVycyBkb24ndCBhY2NpZGVudGFsbHkgdXNlIEdfVFlQRV9EQVRFIHdoZXJlIEdTVF9UWVBFX0RBVEUKLQkgIGlzIHJlcXVpcmVkLiBQYXJ0IG9mIHRoZSBncmFuZCBzY2hlbWUgaW4gIzE3MDc3Ny4KLQotMjAwNS0wOS0yMiAxMjowNTowNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0Y29uZmlnLmguaW46IFBzeWNoIG91dCBndGstZG9jLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA5LTIyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0Y29uZmlnLmguaW46IFBzeWNoIG91dCBndGstZG9jLgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBBZGQgR1NUX0hBVkVfR0xJQl8yXzguCi0JICAqIGNoZWNrL01ha2VmaWxlLmFtIChjaGVja19QUk9HUkFNUyk6IEFkZCBnc3RwbHVnaW4gdG8gdGhlIHRlc3RzLgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jIChwcmludF9lbGVtZW50X2xpc3QpOiBQbHVnIHNvbWUKLQkgIGluY29uc2VxdWVudGlhbCBsZWFrcy4KLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmMgKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCk6IERvYy4KLQkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbik6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIChnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSk6Ci0JICAqIGdzdC9nc3RpbmRleGZhY3RvcnkuYyAoZ3N0X2luZGV4X2ZhY3RvcnlfY3JlYXRlKTogVXBkYXRlIGZvcgotCSAgcmVmY291bnQgY2hhbmdlcy4KLQkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYyAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSk6IERvYy4KLQkgIChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCk6IERvYywgZG9uJ3QgZWF0IHJlZnMuCi0JICAqIGdzdC9nc3RwbHVnaW4uYyAoZ3N0X3BsdWdpbl9sb2FkKTogRG9jLCBkb24ndCBlYXQgcmVmcy4KLQkgIChnc3RfcGx1Z2luX2xpc3RfZnJlZSk6IERvYy4KLQkgIChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6IERvYyB1cGRhdGVzLgotCi0yMDA1LTA5LTIyIDA5OjMwOjQxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuYyAoZ3N0X2J1ZmZlcl9nZXRfY2Fwcyk6IExpa2UgYWxsIG91ciBfZ2V0IGFjY2Vzc29ycyByZXR1cm5pbmcgcmVmY291bnRlZCBvYmplY3RzLCByZXR1cm4gYSByZWYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDktMjIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RidWZmZXIuYyAoZ3N0X2J1ZmZlcl9nZXRfY2Fwcyk6IExpa2UgYWxsIG91ciBfZ2V0Ci0JICBhY2Nlc3NvcnMgcmV0dXJuaW5nIHJlZmNvdW50ZWQgb2JqZWN0cywgcmV0dXJuIGEgcmVmLgotCSAgKiBjaGVjay9nc3QvZ3N0YnVmZmVyLmMgKEdTVF9TVEFSVF9URVNUKTogVXNlIHJlZmNvdW50LWlkZW1wb3RlbnQKLQkgIGFjY2Vzc29yIGZvciBjYXBzLiBJREVNUE9URU5DRS4gT2ggeWVzLgotCi0yMDA1LTA5LTIxIDIxOjM5OjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0aW5mby5jOiBBZGQgbXV0ZXggdG8gc2VyaWFsaXNlIGFjY2VzcyB0byB0aGUgaGFzaCB0YWJsZSB3aXRoIHRoZSBmdW5jdGlvbiBwb2ludGVyID0+IGZ1bmN0aW9uIG5hbWUgc3RyaW5nIG1hcHAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogZ3N0L2dzdGluZm8uYzogKF9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIpLAotCSAgKF9nc3RfZGVidWdfcmVnaXN0ZXJfZnVuY3B0cik6Ci0JICBBZGQgbXV0ZXggdG8gc2VyaWFsaXNlIGFjY2VzcyB0byB0aGUgaGFzaCB0YWJsZSB3aXRoCi0JICB0aGUgZnVuY3Rpb24gcG9pbnRlciA9PiBmdW5jdGlvbiBuYW1lIHN0cmluZyBtYXBwaW5nOwotCSAgbWFrZSB0aGF0IGhhc2ggdGFibGUgc3RhdGljIHNjb3BlICgjMzE2ODA5KS4KLQkgICogZ3N0L3JlZ2lzdHJpZXMvLmN2c2lnbm9yZToKLQkgIFJlbW92ZSBsZWZ0LW92ZXIgZmlsZS4KLQotMjAwNS0wOS0yMSAxNTo1NToxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWw6IEFuZCBzb21ldGhpbmcgYWJvdXQgbmV3c2VnbWVudCBldmVudHMgYW5kIGNhcHMtb24tYnVmZmVycyB0byB0aGUgcG9ydGluZyBndWlkZSAoZmVlbCBmLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JICBBbmQgc29tZXRoaW5nIGFib3V0IG5ld3NlZ21lbnQgZXZlbnRzIGFuZCBjYXBzLW9uLWJ1ZmZlcnMgdG8KLQkgIHRoZSBwb3J0aW5nIGd1aWRlIChmZWVsIGZyZWUgdG8gaW1wcm92ZSkuCi0KLTIwMDUtMDktMjEgMTM6MjQ6MzMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svZ3N0L2dzdHV0aWxzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYzoKLQkgIFRlc3QgdGhhdCByZW1vdmluZyBwcm9iZXMgZnJvbSB3aXRoaW4gdGhlIHByb2JlIGZ1bmN0aW9ucyB3b3Jrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKHRlc3RfYnVmZmVyX3Byb2JlX29uY2UpOiBUZXN0IHRoYXQgcmVtb3ZpbmcgcHJvYmVzIGZyb20gd2l0aGluCi0JICB0aGUgcHJvYmUgZnVuY3Rpb25zIHdvcmtzLgotCi0yMDA1LTA5LTIxIDEzOjExOjIyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3R1dGlscy5jICh0ZXN0X2J1ZmZlcl9wcm9iZV9uX3RpbWVzKTogQWRkIHRlc3RzIGZvciBkYXRhIGFuZCBldmVudCBwcm9iZXMgb24gdGhlIHNhbWUgcGFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA5LTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9nc3QvZ3N0dXRpbHMuYyAodGVzdF9idWZmZXJfcHJvYmVfbl90aW1lcyk6IEFkZCB0ZXN0cyBmb3IKLQkgIGRhdGEgYW5kIGV2ZW50IHByb2JlcyBvbiB0aGUgc2FtZSBwYWQuCi0KLTIwMDUtMDktMjEgMTI6MjE6MTAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdHV0aWxzLmM6IE5ldyBmaWxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA5LTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9nc3QvZ3N0dXRpbHMuYzogTmV3IGZpbGUuCi0JICAodGVzdF9idWZmZXJfcHJvYmVfbl90aW1lcyk6IEEgc2ltcGxlIGJ1ZmZlciBwcm9iZSB0ZXN0LiBNb3JlIHRvCi0JICBjb21lLCBmb29saW9zLgotCSAgKiBnc3QvZ3N0dXRpbHMuYyAoZ3N0X3BhZF9hZGRfYnVmZmVyX3Byb2JlKTogQ29ubmVjdCB0bwotCSAgaGF2ZS1kYXRhOjpidWZmZXIsIG5vdCBoYXZlLWRhdGEuCi0JICAoZ3N0X3BhZF9hZGRfZXZlbnRfcHJvYmUpOiBMaWtld2lzZSBmb3IgaGF2ZS1kYXRhOjpldmVudC4KLQkgIChnc3RfcGFkX2FkZF9kYXRhX3Byb2JlKTogTW9yZSBkb2NzLiBUaGUgcGFydCBhYm91dCAncmVzb2x2aW5nIHRoZQotCSAgcGVlcicgaXNuJ3QgcXVpdGUgcmlnaHQgeWV0IHRob3VnaC4KLQkgIChnc3RfcGFkX3JlbW92ZV9idWZmZXJfcHJvYmUsIGdzdF9wYWRfcmVtb3ZlX2V2ZW50X3Byb2JlKQotCSAgKGdzdF9wYWRfcmVtb3ZlX2RhdGFfcHJvYmUpOiBDaGFuZ2UgdG8gdGFrZSB0aGUgZ3VpbnQgaGFuZGxlcl9pZAotCSAgYXMgdGhlaXIgYXJnLCBub3QgdGhlIGZ1bmN0aW9uK2RhdGEsIHdoaWNoIGlzIG1vcmUgZ2xpYi1saWtlLgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfZW1pdF9oYXZlX2RhdGFfc2lnbmFsKTogQWRkIGEgZGV0YWlsIHRvCi0JICB0aGUgc2lnbmFsIGVtaXNzaW9uIHRvIGluZGljYXRlIGlmIHRoZSBkYXRhIGlzIGEgYnVmZmVyIG9yIGFuCi0JICBldmVudC4KLQkgIChnc3RfcGFkX2dldF90eXBlKTogSW5pdGlhbGl6ZSBidWZmZXIgYW5kIGV2ZW50IHF1YXJrcy4KLQkgIChnc3RfcGFkX2NsYXNzX2luaXQpOiBoYXZlLWRhdGEgaXMgbm93IGEgZGV0YWlsZWQgc2lnbmFsLCB5ZXMgaXQKLQkgIGlzLgotCi0yMDA1LTA5LTIxIDExOjUyOjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBEb24ndCBwdXQgZnVuY3Rpb25hbCBjb2RlIGluIGdfcmV0dXJuX2lmX2ZhaWwoKSBvciBnX3JldHVybl92YWxfaWZfZmFpbCgpIHN0YXRlbWVudHMsIG90aGVyd2lzZSB0aGluZ3Mgd2lsbCBicmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX3NpemUpOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyksCi0JICAoZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcpOgotCSAgRG9uJ3QgcHV0IGZ1bmN0aW9uYWwgY29kZSBpbiBnX3JldHVybl9pZl9mYWlsKCkgb3IKLQkgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCkgc3RhdGVtZW50cywgb3RoZXJ3aXNlIHRoaW5ncyB3aWxsCi0JICBicmVhayB3aGVuIEdfRElTQUJMRV9DSEVDS1MgaXMgZGVmaW5lZCBkdXJpbmcgY29tcGlsYXRpb24uCi0KLTIwMDUtMDktMjEgMDk6NDg6NDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgaW5saWVkIGFub3RoZXIgb25lIGFuZCBhZGRlZCAgc29tZSBvYnZpb3VzIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dmFsdWUuc2dtbDoKLQkgICogZ3N0L2dzdHZhbHVlLmM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5oOgotCSAgaW5saWVkIGFub3RoZXIgb25lIGFuZCBhZGRlZCAgc29tZSBvYnZpb3VzIGRvY3MKLQotMjAwNS0wOS0yMSAwOToxMzozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLio6IFByb3Blcmx5IGltcGxlbWVudCBmZHNyYy4gUmVtb3ZlZCBzaWduYWwgYW5kIHRpbWVvdXQsIGJldHRlciBpbXBsZW1lbnRlZCBzb21ld2hlcmUgZWxzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfZmRzcmNfaW5pdCksIChnc3RfZmRzcmNfc3RhcnQpLCAoZ3N0X2Zkc3JjX3N0b3ApLAotCSAgKGdzdF9mZHNyY191bmxvY2spLCAoZ3N0X2Zkc3JjX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2Zkc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfZmRzcmNfY3JlYXRlKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZkc3JjLmg6Ci0JICBQcm9wZXJseSBpbXBsZW1lbnQgZmRzcmMuIFJlbW92ZWQgc2lnbmFsIGFuZCB0aW1lb3V0LAotCSAgYmV0dGVyIGltcGxlbWVudGVkIHNvbWV3aGVyZSBlbHNlLgotCi0yMDA1LTA5LTIxIDA4OjU4OjQ4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGlubGluZWQgbW9yZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGltcGxlbWVudHNpbnRlcmZhY2Uuc2dtbDoKLQkgICogZ3N0L2dzdGludGVyZmFjZS5jOgotCSAgaW5saW5lZCBtb3JlIGRvY3MKLQotMjAwNS0wOS0yMSAwODo0MDo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2dzdC86IHJlbW92ZSBvYnNvbGV0ZSBkb2MgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RlbnVtdHlwZXMuc2dtbDoKLQkgIHJlbW92ZSBvYnNvbGV0ZSBkb2MgZmlsZQotCi0yMDA1LTA5LTIxIDA3OjM3OjAyICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IERyaW5rIGEgbGl0dGxlIGJlZXIsIGZpeCBhIGxpdHRsZSBsZWFrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOiAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKTogRHJpbmsgYQotCSAgbGl0dGxlIGJlZXIsIGZpeCBhIGxpdHRsZSBsZWFrLgotCi0yMDA1LTA5LTIwIDIwOjU0OjM3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbnVtdHlwZXMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW1wbGVtZW50c2ludGVyZmFjZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleGZhY3Rvcnkuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5mby5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhZHRlbXBsYXRlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBpcGVsaW5lLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHZhbHVlLnNnbWw6Ci0JICByZW1vdmUgZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGZpbGVzCi0KLTIwMDUtMDktMjAgMjA6NDA6MDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbW9yZSBkb2NzIGlubGluZWQsIHNwbGl0dGVkIGdzdGluZGV4LntjLGh9Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nc3QuaDoKLQkgICogZ3N0L2dzdGJpbi5jOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0aW5kZXguYzogKGdzdF9pbmRleF9jbGFzc19pbml0KToKLQkgICogZ3N0L2dzdGluZGV4Lmg6Ci0JICAqIGdzdC9nc3RpbmRleGZhY3RvcnkuYzogKGdzdF9pbmRleF9mYWN0b3J5X2dldF90eXBlKSwKLQkgIChnc3RfaW5kZXhfZmFjdG9yeV9jbGFzc19pbml0KSwgKGdzdF9pbmRleF9mYWN0b3J5X2luaXQpLAotCSAgKGdzdF9pbmRleF9mYWN0b3J5X2ZpbmFsaXplKSwgKGdzdF9pbmRleF9mYWN0b3J5X25ldyksCi0JICAoZ3N0X2luZGV4X2ZhY3RvcnlfZGVzdHJveSksIChnc3RfaW5kZXhfZmFjdG9yeV9maW5kKSwKLQkgIChnc3RfaW5kZXhfZmFjdG9yeV9jcmVhdGUpLCAoZ3N0X2luZGV4X2ZhY3RvcnlfbWFrZSk6Ci0JICAqIGdzdC9nc3RpbmRleGZhY3RvcnkuaDoKLQkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0KToKLQkgIG1vcmUgZG9jcyBpbmxpbmVkLCBzcGxpdHRlZCBnc3RpbmRleC57YyxofQotCi0yMDA1LTA5LTIwIDIwOjE5OjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JICBmaXggYSBsZWFrIGluIGNvbnRyb2xsZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGEgbGVhayBpbiBjb250cm9sbGVyCi0KLTIwMDUtMDktMjAgMTk6MTY6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBTZXQgc3luYyB0byBGQUxTRSBieSBkZWZhdWx0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19pbml0KToKLQkgIFNldCBzeW5jIHRvIEZBTFNFIGJ5IGRlZmF1bHQuCi0KLTIwMDUtMDktMjAgMTc6Mzg6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IE1ha2Ugc3luYyBwcm9wZXJ0eSBzZXR0YWJsZSBmcm9tIHN1YmNsYXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3NpbmtfaW5pdCk6Ci0JICBNYWtlIHN5bmMgcHJvcGVydHkgc2V0dGFibGUgZnJvbSBzdWJjbGFzcy4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2luaXQpLAotCSAgKGdzdF9mYWtlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIFNldCBzeW5jIHRvIEZBTFNFIGJ5IGRlZmF1bHQuCi0KLTIwMDUtMDktMjAgMTc6MzA6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFRoZSB0aW1lb3V0IGhhbmRsZXIgc2hvdWxkIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgc291cmNlIHNvIHdlIGRvbid0IHRpbWVvdXQgYmVmb3JlIHBvcHBpbmcgYSBtZXNzYWdlIHdpdGggMCB0aS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidXMuYzogKHBvbGxfZnVuYyksIChwb2xsX3RpbWVvdXQpLCAoZ3N0X2J1c19wb2xsKToKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6Ci0JICBUaGUgdGltZW91dCBoYW5kbGVyIHNob3VsZCBoYXZlIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIHNvdXJjZQotCSAgc28gd2UgZG9uJ3QgdGltZW91dCBiZWZvcmUgcG9wcGluZyBhIG1lc3NhZ2Ugd2l0aCAwIHRpbWVvdXQuCi0JICBEdW1wIGVycm9yIG1lc3NhZ2VzIGFmdGVyIGZhaWxlZCBzdGF0ZSBjaGFuZ2UuCi0KLTIwMDUtMDktMjAgMTc6MjE6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEZpeCB0d28gdHlwb3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKLQkgIEZpeCB0d28gdHlwb3MuCi0KLTIwMDUtMDktMjAgMTU6NDU6NDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICByZW1vdmUgdGhlIHN5bmMgcHJvcGVydHkgZnJvbSBmYWtlc2luay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5oOgotCSAgcmVtb3ZlIHRoZSBzeW5jIHByb3BlcnR5IGZyb20gZmFrZXNpbmsuCi0JICBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNldHRpbmcgc3luYyBUUlVFCi0JICBmb3IgZmFrZXNpbmssIHdoaWNoIGlzIGEgY2hhbmdlLiAgQW55b25lIHdobyBrbm93cyBob3cKLQkgIHRvIGZpeCB0aGlzIG5pY2VseSBpbiBhIEdPYmplY3QteSB3YXksIGZlZWwgZnJlZS4KLQotMjAwNS0wOS0yMCAxNToxOTowOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOiByZW1vdmUgcHJvYmUgcmVmc2VjdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICByZW1vdmUgcHJvYmUgcmVmc2VjdGlvbgotCi0yMDA1LTA5LTIwIDEyOjUwOjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGNoZWNrL01ha2VmaWxlLmFtOiBkaXNhYmxlIHZhbGdyaW5kaW5nIHRoZSBjb250cm9sbGVyIHRlc3QgYWdhaW4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIGRpc2FibGUgdmFsZ3JpbmRpbmcgdGhlIGNvbnRyb2xsZXIgdGVzdCBhZ2FpbgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgdXBkYXRlIGZvciBhcGktY2hhbmdlcwotCi0yMDA1LTA5LTIwIDEyOjA1OjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc2luay4qOiBBZGRlZCBzeW5jIHByb3BlcnR5IHRvIGJhc2VzaW5rIHRvIGRpc2FibGUgY2xvY2sgc3luYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgIEFkZGVkIHN5bmMgcHJvcGVydHkgdG8gYmFzZXNpbmsgdG8gZGlzYWJsZSBjbG9jayBzeW5jLgotCi0yMDA1LTA5LTIwIDExOjA5OjUwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIChnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSk6IEF2b2lkIGVhdGluZyB0aGUgY2FsbGVyJ3MgcmVmY291bnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDktMjAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIChnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSk6IEF2b2lkCi0JICBlYXRpbmcgdGhlIGNhbGxlcidzIHJlZmNvdW50LgotCSAgKiBnc3QvZ3N0b2JqZWN0LmggKEdTVF9PQkpFQ1RfUkVGQ09VTlQpCi0JICAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSk6IENvbmRpdGlvbmFsbHkgZm9uZGxlIHRoZSByaWdodAotCSAgcmVmY291bnQuCi0JICAqIGdzdC9nc3Rjb25maWcuaC5pbiAoR1NUX0hBVkVfR0xJQl8yXzgpOgotCSAgKiBjb25maWd1cmUuYWMgKEdTVF9IQVZFX0dMSUJfMl84X0RFRklORSk6IE1ha2UgdGhlIGF2YWlsYWJpbGl0eQotCSAgb2YgR0xpYiAyLjggcHVibGljLCBzbyB3ZSBjYW4ga25vdyB3aGljaCByZWZjb3VudCB0byBjaGVjayBpbgotCSAgdGVzdHMuCi0JICAqIGdzdC9nc3RvYmplY3QuYzogVXNlIHRoZSBHU1RfSEFWRV9HTElCXzJfOCBkZWZpbmUuCi0JICAoZ3N0X29iamVjdF9pbml0KTogT25seSBzZXQgdGhlIGdzdCByZWZjb3VudCBpZiB3ZSdyZSBnb2luZyBhaGVhZAotCSAgd2l0aCB0aGUgcmVmY291bnQgaGFjay4KLQotMjAwNS0wOS0yMCAxMDo0MTowMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBtb3JlIGxlYWtzIHBsdW1iZWQsIGFkZGVkIG1vcmUgZGVidWctbG9nZ2luZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzogKHBsdWdpbl9pbml0KSwgKEdTVF9TVEFSVF9URVNUKToKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6IChnc3RfY29udHJvbGxlcl9uZXdfdmFsaXN0KToKLQkgIG1vcmUgbGVha3MgcGx1bWJlZCwgYWRkZWQgbW9yZSBkZWJ1Zy1sb2dnaW5nCi0JICAqIGdzdC9nc3RtYWNyb3MuaDoKLQkgIHdoaXRlc3BhY2UgZml4Ci0KLTIwMDUtMDktMjAgMDk6NDc6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgcmVtb3ZlIGluY2x1ZGUgb2YgcmVtb3ZlZCBoZWFkZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGluY2x1ZGUgb2YgcmVtb3ZlZCBoZWFkZXIKLQotMjAwNS0wOS0yMCAwOToyODo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3RjbG9jay5jOiBDb21taXQgZnJvbSB0aGUgUG9saXRpY2FsIFBhcnR5IEZvciBNb3JlIEF0b21pYyBDVlMgQ29tbWl0cywgc28gdGhhdCBwZW9wbGUgZG9uJ3Qgd2FzdGUgdG9vIG11Y2ggb2YgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoX2dzdF9jbG9ja19pZF9mcmVlKToKLQkgIENvbW1pdCBmcm9tIHRoZSBQb2xpdGljYWwgUGFydHkgRm9yIE1vcmUgQXRvbWljIENWUyBDb21taXRzLAotCSAgc28gdGhhdCBwZW9wbGUgZG9uJ3Qgd2FzdGUgdG9vIG11Y2ggb2YgdGhlaXIgZGF5IGZpc2hpbmcKLQkgIG91dCBvYnZpb3VzIGxlYWtzIG91dCBvZiBtYXNzaXZlIGNvbW1pdHMuCi0JICBPaCwgYW5kIGZpeCBhIHByZXR0eSBkYW1uIG9idmlvdXMgbGVhayBpbiB0aGUgbWVtY2h1bmsKLQkgIHJlbW92YWwgY29kZS4KLQotMjAwNS0wOS0yMCAwOToyMzozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjaGVjay86IHBsdWcgbWVtLWxlYWssIHJlLWFkZCB0byB2YWxncmluZGFibGUgdGVzdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOiAocGx1Z2luX2luaXQpLCAoR1NUX1NUQVJUX1RFU1QpOgotCSAgcGx1ZyBtZW0tbGVhaywgcmUtYWRkIHRvIHZhbGdyaW5kYWJsZSB0ZXN0cwotCi0yMDA1LTA5LTIwIDA5OjA4OjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSAgdW5icmVhayB0aGUgYnVpbGQgZm9yIHRob3NlIHdobyBoYXZlIGNocm9uaWMgYXJ0aHJpdGlzIGFuZCB0eXBpbmcgIm1ha2UgY2hlY2siIGlzIGp1c3QgdG9vIHRheGluZyBvbiB0aGUgaGFuZHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdW5icmVhayB0aGUgYnVpbGQgZm9yIHRob3NlIHdobyBoYXZlIGNocm9uaWMgYXJ0aHJpdGlzCi0JICBhbmQgdHlwaW5nICJtYWtlIGNoZWNrIiBpcyBqdXN0IHRvbyB0YXhpbmcgb24gdGhlIGhhbmRzCi0KLTIwMDUtMDktMjAgMDg6MjU6MzIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdC5oOiBSZS1hZGQgbWFyc2hhbCB0byBnc3QuaCdzIGluY2x1ZGUgbGlzdCAtLSBpZiB3ZSByZWFsbHkgd2FudCBpdCBvdXQsIHlvdSBzaG91bGQgZml4IHBsdWdpbnMgYXQgdGhlIHNhbWUgdGltZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOS0yMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdC5oOiBSZS1hZGQgbWFyc2hhbCB0byBnc3QuaCdzIGluY2x1ZGUgbGlzdCAtLSBpZiB3ZQotCSAgcmVhbGx5IHdhbnQgaXQgb3V0LCB5b3Ugc2hvdWxkIGZpeCBwbHVnaW5zIGF0IHRoZSBzYW1lIHRpbWUuCi0KLTIwMDUtMDktMjAgMDc6MzI6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgYWRkZWQgbWlzc2luZyBzeW1ib2xzIHRvIGFwaSBkb2NzIGRpc2FibGUgcmVmLWNvdW50IGhhY2sgaWYgd2UgaGF2ZSBnbGliID49IDIuOAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdG9iamVjdC5jOgotCSAgYWRkZWQgbWlzc2luZyBzeW1ib2xzIHRvIGFwaSBkb2NzCi0JICBkaXNhYmxlIHJlZi1jb3VudCBoYWNrIGlmIHdlIGhhdmUgZ2xpYiA+PSAyLjgKLQotMjAwNS0wOS0yMCAwNjoyODozMyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGRvY3MvZ3N0L01ha2VmaWxlLmFtOiBJZ25vcmUgYSBmZXcgbW9yZSBpbnRlcm5hbCBoZWFkZXJzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvTWFrZWZpbGUuYW06IElnbm9yZSBhIGZldyBtb3JlIGludGVybmFsIGhlYWRlcnMKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDogUmVtb3ZlIG9sZCBzZWN0aW9ucwotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBSZW1vdmUgb2xkIHNlY3Rpb25zCi0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0b2JqZWN0LnNnbWw6IHVwZGF0ZQotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOiB1cGRhdGUKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6IHVwZGF0ZQotCSAgKiBkb2NzL3JhbmRvbS9kcy8wLjktc3VnZ2VzdGVkLWNoYW5nZXM6IHVwZGF0ZS4KLQkgICogZ3N0L01ha2VmaWxlLmFtOiByZW1vdmUgbWVtY2h1bmsgYW5kIHRyYXNoc3RhY2ssIHNpbmNlIHRoZXkncmUKLQkgIG5vdCB1c2VkLgotCSAgKiBnc3QvZ3N0LmM6IChnc3RfZGVpbml0KTogcmVuYW1lIGdzdF9yZWdpc3RyeV9kZWluaXQgdG8gX2NsZWFudXAKLQkgICogZ3N0L2dzdC5oOiBkb24ndCBpbmNsdWRlIHNvbWUgaGVhZGVycwotCSAgKiBnc3QvZ3N0Y2hpbGRwcm94eS5jOiBhZGQgZ3N0bWFyc2hhbC5oCi0JICAqIGdzdC9nc3RjbG9jay5jOiBEb24ndCB1c2UgbWVtY2h1bmtzCi0JICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IEFkZCBzb21lIGRvY3MKLQkgICogZ3N0L2dzdG9iamVjdC5jOiByZW1vdmUgREVTVFJPWUVEIGZsYWcsIHNpbmNlIGl0J3MgcmVkdW5kYW50Ci0JICAqIGdzdC9nc3RvYmplY3QuaDogc2FtZQotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IGluY2x1ZGUgZ3N0bWFjcm9zLmgKLQkgICogZ3N0L2dzdHBsdWdpbi5oOiBkb24ndCBpbmNsdWRlIGdzdG1hY3Jvcy5oLCBzaW5jZSBpdCdzIHByaXZhdGUKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IGRvbid0IHVzZSBtZW1jaHVua3MKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6IHJlbmFtZSBnc3RfcmVnaXN0cnlfZGVpbml0KCkKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6IHNhbWUKLQotMjAwNS0wOS0yMCAwNToxMzozMCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6IFJlbW92ZSBkb2NzIGZvciBnZXRiaXRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDogUmVtb3ZlIGRvY3MgZm9yIGdldGJpdHMKLQkgICogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9saWJzL3RtcGwvZ3N0Z2V0Yml0cy5zZ21sOgotCSAgKiBkb2NzL2xpYnMvdG1wbC9nc3RwdXRiaXRzLnNnbWw6Ci0KLTIwMDUtMDktMjAgMDA6Mjc6MzcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjaGVjay9nZW5lcmljL3N0YXRlcy5jOiBBZGQgYSBzbGVlcCB0byBlbnN1cmUgZWxlbWVudHMgaGF2ZSBhIGNoYW5jZSB0byBzdGFydCB0aGVpciBwYWQgdGFza3MgYmVmb3JlIHNodXRkb3duLiBSZWR1Y2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nZW5lcmljL3N0YXRlcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoc3RhdGVzX3N1aXRlKToKLQkgIEFkZCBhIHNsZWVwIHRvIGVuc3VyZSBlbGVtZW50cyBoYXZlIGEgY2hhbmNlIHRvIHN0YXJ0IHRoZWlyCi0JICBwYWQgdGFza3MgYmVmb3JlIHNodXRkb3duLiBSZWR1Y2VzIHJhY3kgdGVzdCByZXN1bHRzLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZHNyY19pbml0KSwgKGdzdF9mZHNyY19jcmVhdGUpOgotCSAgVGltZSBvdXQgdGhlIHNlbGVjdCBldmVyeSBub3cgYW5kIHRoZW4gdG8gY2hlY2sgZm9yIHNodXRkb3duLgotCi0yMDA1LTA5LTE5IDIwOjAxOjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB3aW4zMi9nc3RlbnVtdHlwZXMuKjogVXBkYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL2dzdGVudW10eXBlcy5jOgotCSAgKiB3aW4zMi9nc3RlbnVtdHlwZXMuaDoKLQkgIFVwZGF0ZS4KLQotMjAwNS0wOS0xOSAxNjozMjo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBpcGVsaW5lLmM6IEF1dG9tYXRpY2FsbHkgUEFVU0UgYW5kIFJFU1VNRSBhIHBpcGVsaW5lIHdoZW4gYSBmbHVzaGluZyBzZWVrIGlzIHBlcmZvcm1lZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGRvX3BpcGVsaW5lX3NlZWspLCAoZ3N0X3BpcGVsaW5lX3NlbmRfZXZlbnQpOgotCSAgQXV0b21hdGljYWxseSBQQVVTRSBhbmQgUkVTVU1FIGEgcGlwZWxpbmUgd2hlbiBhIGZsdXNoaW5nIHNlZWsKLQkgIGlzIHBlcmZvcm1lZC4KLQkgIFJlbW92ZWQgb2xkIGZpbGVzLgotCi0yMDA1LTA5LTE5IDE2OjI4OjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdGJ1cy5jOgotCSAgd2hpdGVzcGFjZSBmaXgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgd2hpdGVzcGFjZSBmaXgKLQotMjAwNS0wOS0xOSAxNToxMjoyNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0cmVnaXN0cnkuaDogU3BhY2luZyBmaXhlbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOS0xOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6IFNwYWNpbmcgZml4ZW4uCi0KLTIwMDUtMDktMTkgMTQ6NTU6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogSGFuZGxlIHN0YXRlIGNoYW5nZSBmYWlsdXJlIG1vcmUgY29ycmVjdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgSGFuZGxlIHN0YXRlIGNoYW5nZSBmYWlsdXJlIG1vcmUgY29ycmVjdGx5LgotCi0yMDA1LTA5LTE5IDE0OjQxOjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svOiBlbmFibGUgY2xlYW51cCBhZ2FpbiBhZnRlciBmaXhpbmcgdGhlIGxlYWsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYzogKHJ1bl9waXBlbGluZSk6Ci0JICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6IChydW5fcGlwZWxpbmUpLAotCSAgKEdTVF9TVEFSVF9URVNUKToKLQkgIGVuYWJsZSBjbGVhbnVwIGFnYWluIGFmdGVyIGZpeGluZyB0aGUgbGVhawotCSAgKiBkb2NzL1JFQURNRToKLQkgIHNvbWUgbW9yZSBpbmZvIG9uIGRvY3MKLQotMjAwNS0wOS0xOSAxNDoyMDozNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIGRvbid0IGNvbXBsYWluIGFib3V0IG15IEFSTSAuc28gZmlsZXMuICBBbm90aGVyIHJlYXNvbiB3aHkgaXQgZG9lcyBtYWtlIHNlbnNlIHRvIGhhdmUgcGx1Z2lucyBmb2xsb3cgYSBzdGFuZGFyZCBmaWxlIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb24ndCBjb21wbGFpbiBhYm91dCBteSBBUk0gLnNvIGZpbGVzLiAgQW5vdGhlciByZWFzb24gd2h5IGl0IGRvZXMgbWFrZSBzZW5zZQotCSAgdG8gaGF2ZSBwbHVnaW5zIGZvbGxvdyBhIHN0YW5kYXJkIGZpbGUgbmFtZSBwYXR0ZXJuIGxpa2UgbGliZ3N0KHdoYXRldmVyKS5zbwotCi0yMDA1LTA5LTE5IDE0OjA5OjU0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IHJlLWVuYWJsZSB0ZXN0cyBub3cgdGhhdCBsZWFrcyBhcmUgcGx1Z2dlZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgcmUtZW5hYmxlIHRlc3RzIG5vdyB0aGF0IGxlYWtzIGFyZSBwbHVnZ2VkCi0JICAqIGNoZWNrL2dzdC9nc3QuYzoKLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgKiBjaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIGFkZCBzb21lIG1vcmUgdGVzdHMgd2hpbGUgZml4aW5nIGxlYWtzCi0JICAqIGNvbW1vbi9jaGVjay5tYWs6Ci0JICBtYWtlIHN1cmUgYmluYXJpZXMgYXJlIHVwdG9kYXRlIHdoZW4gdmFsZ3JpbmRpbmcvZ2RiaW5nCi0JICAqIGdzdC9nc3QuYzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICByZW1vdmUgYSByZWYgdG9vIG1hbnksIGFuZCBhZGQgYSBGSVhNRSBmb3Igd2hlbiB3ZSBnZXQKLQkgIHJvdW5kIHRvIGRpc3Bvc2luZyBvZiBjbGFzc2VzCi0JICAqIGdzdC9nc3RwbHVnaW4uYzoKLQkgIGZpeCB0aGUgcmVmY291bnRpbmcgd2hlbiBsb2FkaW5nIGEgcGx1Z2luIGZyb20gYSBmaWxlIGFuZAotCSAgdGhlIGNvZGUgcHJldGVuZHMgdGhhdCB0aGUgcG9pbnRlciBpcyB0aGUgc2FtZSBldmVuIHRob3VnaAotCSAgb2YgY291cnNlIGl0IGNhbiBjaGFuZ2UKLQkgICogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkgIHVucmVmIHBsdWdpbnMgbWFya2VkIGNhY2hlZCAoYSBiaXQgY29uZnVzaW5nIGFzIGEgbmFtZSkKLQkgIGFzIHRoZSBkb2NzIHN0YXRlIHNob3VsZCBiZSBkb25lCi0JICB2YXJpb3VzIGRvYyBhZGRpdGlvbnMgdG8gZXhwbGFpbiByZWZjb3VudGluZwotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JICBkZWJ1Z2dpbmcKLQotMjAwNS0wOS0xOSAxNDowOTozNyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIHVwZGF0ZSBzcGVjIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHNwZWMgZmlsZQotCi0yMDA1LTA5LTE5IDExOjE4OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBHc3RCdXNIYW5kbGVyIC0+IEdzdEJ1c0Z1bmMsIHJldHVybiB2YWx1ZSBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBhbnkgb3RoZXIgR1NvdXJjZSAoRkFMU0UgPT0gcmVtb3ZlIHNvdXJjZSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAocG9wX21lc3NhZ2VzKSwgKEdTVF9TVEFSVF9URVNUKToKLQkgICogY2hlY2svZ3N0L2dzdGJ1cy5jOiAobWVzc2FnZV9mdW5jX2VvcyksIChtZXNzYWdlX2Z1bmNfYXBwKSwKLQkgIChzZW5kX21lc3NhZ2VzKSwgKEdTVF9TVEFSVF9URVNUKSwgKGdzdGJ1c19zdWl0ZSk6Ci0JICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBjaGVjay9waXBlbGluZXMvY2xlYW51cC5jOiAocnVuX3BpcGVsaW5lKToKLQkgICogY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYzogKHJ1bl9waXBlbGluZSksCi0JICAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2hhdmVfcGVuZGluZyksIChnc3RfYnVzX3NvdXJjZV9wcmVwYXJlKSwKLQkgIChnc3RfYnVzX3NvdXJjZV9jaGVjayksIChnc3RfYnVzX3NvdXJjZV9kaXNwYXRjaCksCi0JICAoZ3N0X2J1c19jcmVhdGVfd2F0Y2gpLCAoZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCksCi0JICAoZ3N0X2J1c19hZGRfd2F0Y2gpLCAocG9sbF9mdW5jKSwgKHBvbGxfdGltZW91dCksIChnc3RfYnVzX3BvbGwpOgotCSAgKiBnc3QvZ3N0YnVzLmg6Ci0JICAqIHRvb2xzL2dzdC1sYXVuY2guYzogKGV2ZW50X2xvb3ApOgotCSAgKiB0b29scy9nc3QtbWQ1c3VtLmM6IChldmVudF9sb29wKToKLQkgIEdzdEJ1c0hhbmRsZXIgLT4gR3N0QnVzRnVuYywgcmV0dXJuIHZhbHVlIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzCi0JICBhbnkgb3RoZXIgR1NvdXJjZSAoRkFMU0UgPT0gcmVtb3ZlIHNvdXJjZSkuCi0JICBfYWRkX3dhdGNoKCkgYW5kIF9hZGRfd2F0Y2hfZnVsbCgpIG5vdyB0YWtlIGEgTWVzc2FnZVR5cGUgbWFzayB0bwotCSAgb25seSBoYW5kbGUgc3BlY2lmaWMgdHlwZXMgb2YgbWVzc2FnZXMuCi0JICBfcG9sbCgpIHJldHVybnMgdGhlIEdzdE1lc3NhZ2UgaW5zdGVhZCBvZiB0aGUgbWVzc2FnZSB0eXBlIHRvIGF2b2lkCi0JICByYWNlIGNvbmRpdGlvbnMuCi0JICBfaGF2ZV9wZW5kaW5nKCkgdGFrZXMgYSBNZXNzYWdlVHlwZSBtYXNrIG5vdyB0b28uCi0JICBBZGRlZCB0ZXN0c3VpdGUgZm9yIG11bHRpcGxlIGJ1cyB3YXRjaGVzLgotCSAgRml4IHRlc3RzdWl0ZXMgYW5kIGFwcGxpY2F0aW9ucyBmb3IgbmV3IGJ1cyBBUEkuCi0KLTIwMDUtMDktMTggMjI6MTU6MjMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgbWFyayBhIGJ1bmNoIG9mIHRoZSB0ZXN0cyBhcyB0byBmaXggdW50aWwgd2UgZml4IHRoZW0KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbWFyayBhIGJ1bmNoIG9mIHRoZSB0ZXN0cyBhcyB0byBmaXggdW50aWwgd2UgZml4IHRoZW0KLQotMjAwNS0wOS0xOCAyMTo0MDo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNvbW1vbi9jaGVjay5tYWs6IHVzZSBHU1RfUExVR0lOIHNldHRpbmdzIGZvciB2YWxncmluZCB0ZXN0cyBhcyB3ZWxsLCBzbyB3ZSdyZSB2YWxncmluZGluZyB0aGUgY29ycmVjdCB0aGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbW1vbi9jaGVjay5tYWs6Ci0JICB1c2UgR1NUX1BMVUdJTiBzZXR0aW5ncyBmb3IgdmFsZ3JpbmQgdGVzdHMgYXMgd2VsbCwgc28gd2UncmUKLQkgIHZhbGdyaW5kaW5nIHRoZSBjb3JyZWN0IHRoaW5nCi0JICAqIGdzdC9nc3QuYzogKGluaXRfcG9zdCk6Ci0JICBwbHVnIGFub3RoZXIgbGVhawotCi0yMDA1LTA5LTE4IDIxOjI0OjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svZ3N0L2dzdC5jOgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JKiBnc3QvZ3N0aW5kZXguYzoKLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkqIGdzdC9nc3RwbHVnaW4uYzoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkqIGdzdC9nc3RyZWdpc3RyeS5oOgotCSogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0LmM6Ci0JICB2YXJpb3VzIGNsZWFudXBzIGFuZCBtZW1sZWFrIHBsdWdnaW5nLiAgbWFrZSB2YWxncmluZCBpcyBoYXBweSBub3cuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHZhcmlvdXMgY2xlYW51cHMgYW5kIG1lbWxlYWsgcGx1Z2dpbmcuICBtYWtlIHZhbGdyaW5kIGlzIGhhcHB5IG5vdy4KLQotMjAwNS0wOS0xOCAyMToyMzoxMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogY29tbW9uOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JICBhZGQgY2hlY2stdmFsZ3JpbmQgdGFyZ2V0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBjaGVjay12YWxncmluZCB0YXJnZXQKLQotMjAwNS0wOS0xOCAwOToxNToxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgbG9hZGluZyBhIHBsdWdpbiBjYW4gcmV0dXJuIE5VTEwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbG9hZGluZyBhIHBsdWdpbiBjYW4gcmV0dXJuIE5VTEwKLQotMjAwNS0wOS0xOCAwNzo0MToyOCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IFJldmVydCB0aGUgR09wdGlvbiBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IFJldmVydCB0aGUgR09wdGlvbiBjb2RlLgotCi0yMDA1LTA5LTE4IDA2OjU5OjI1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IEZpeCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svTWFrZWZpbGUuYW06IEZpeCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0JICAqIGNoZWNrL2dzdC9nc3RwbHVnaW4uYzogRml4IGZvciBBUEkgY2hhbmdlcy4KLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogRml4IGZvciBBUEkgY2hhbmdlcy4KLQkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogRml4IGZvciBBUEkgY2hhbmdlcy4KLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzoKLQkgICogZ3N0L2dzdHBsdWdpbi5oOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5Lmg6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXhtbC5jOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOgotCSAgKiBnc3QvaW5kZXhlcnMvZ3N0ZmlsZWluZGV4LmM6Ci0JICAqIGdzdC9pbmRleGVycy9nc3RtZW1pbmRleC5jOgotCSAgKiBnc3Qvc2NoZWR1bGVycy9NYWtlZmlsZS5hbToKLQkgIENoYW5nZSByZWdpc3RyeSB0byBrZWVwIHRyYWNrIG9mIGJvdGggcGx1Z2lucyBhbmQgZmVhdHVyZXMsCi0JICByZW1vdmluZyB0aGUgZmVhdHVyZSB0cmFja2luZyBmcm9tIHBsdWdpbnMgdGhlbXNlbHZlcy4KLQotMjAwNS0wOS0xNyAxODoxNDo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBhZGQgdmFsZ3JpbmQgdGFyZ2V0OyBkaXNhYmxlIGdzdHBsdWdpbiB1bnRpbCBpdCBwYXNzZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHZhbGdyaW5kIHRhcmdldDsgZGlzYWJsZSBnc3RwbHVnaW4gdW50aWwgaXQgcGFzc2VzCi0KLTIwMDUtMDktMTcgMTg6MTE6MjcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogY29tbW9uOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBhZGQgdmFsZ3JpbmQgdGFyZ2V0OyBkaXNhYmxlIGdzdHBsdWdpbiB1bnRpbCBpdCBwYXNzZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHZhbGdyaW5kIHRhcmdldDsgZGlzYWJsZSBnc3RwbHVnaW4gdW50aWwgaXQgcGFzc2VzCi0KLTIwMDUtMDktMTYgMTE6MjQ6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICBhZGQgbWlzaW5nIGluY2x1ZGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG1pc2luZyBpbmNsdWRlCi0KLTIwMDUtMDktMTYgMDg6MTc6NDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgc2V0IHRoZSByaWdodCB2YXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc2V0IHRoZSByaWdodCB2YXIKLQotMjAwNS0wOS0xNiAwODoxNDo1NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0b29scy9nc3QtcmVnaXN0ZXIuMS5pbjoKLQkgIHJlbW92ZSBnc3QtcmVnaXN0ZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGdzdC1yZWdpc3RlcgotCi0yMDA1LTA5LTE2IDA0OjU0OjI0ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgR2V0dGluZyB0aXJlZCBvZiBkZWJ1Z2dpbmcuICBEaXNhYmxlZCBhbGwgdGhlIHVucmVmZmluZyBvZiBwbHVnaW5zIGFuZCBmZWF0dXJlcywgd2hpY2ggZml4ZXMgdGhlIHNlZ2ZhdWx0cywgYnV0IG9mIGNvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIEdldHRpbmcgdGlyZWQgb2YgZGVidWdnaW5nLiAgRGlzYWJsZWQgYWxsIHRoZSB1bnJlZmZpbmcgb2YKLQkgIHBsdWdpbnMgYW5kIGZlYXR1cmVzLCB3aGljaCBmaXhlcyB0aGUgc2VnZmF1bHRzLCBidXQgb2YKLQkgIGNvdXJzZSBsZWFrcyBsaWtlIGNyYXp5LiAgQXQgbGVhc3QgcGxheWJpbiB3b3Jrcy4KLQotMjAwNS0wOS0xNiAwMzo0NjoxNCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGNoZWNrL2dzdC9nc3RwbHVnaW4uYzogTW9yZSB0ZXN0aW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOiAocmVnaXN0ZXJfY2hlY2tfZWxlbWVudHMpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKHBlZWspLCAoc3VnZ2VzdCksIChnc3RfcGx1Z2luX3N1aXRlKToKLQkgIE1vcmUgdGVzdGluZwotCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IEZpeCByZWZjb3VudGluZy4KLQkgICogZ3N0L2dzdHR5cGVmaW5kLmM6Ci0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oOgotCi0yMDA1LTA5LTE2IDAwOjM3OjUxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBsdWdpbi5jOgotCSAgdW52ZXJib3NpZnkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdW52ZXJib3NpZnkKLQotMjAwNS0wOS0xNiAwMDowODoxNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgc29tZSB3aGl0ZXNwYWNlIHRvIHRyaWdnZXIgYSBidWlsZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzb21lIHdoaXRlc3BhY2UgdG8gdHJpZ2dlciBhIGJ1aWxkCi0KLTIwMDUtMDktMTYgMDA6MDI6MjcgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ3N0aW5kZXguYzogZ2V0IHJlZmNvdW50aW5nIGNvcnJlY3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGluZGV4LmM6IGdldCByZWZjb3VudGluZyBjb3JyZWN0LgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgZmVhdHVyZS9wbHVnaW4gaXMKLQkgIG5vdCBmb3VuZC4KLQotMjAwNS0wOS0xNSAyMzo1MToyNCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGNoZWNrLzogQWRkIHRlc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogY2hlY2svZ3N0L2dzdHBsdWdpbi5jOiBBZGQgdGVzdAotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IEZpeCBwcm9ibGVtcyBub3RpY2VkIGJ5IHRlc3RzdWl0ZQotCSAgKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQotMjAwNS0wOS0xNSAyMDo1NjozMCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9nc3RwbHVnaW4uYzogSW1wbGVtZW50IHNlbWktZGVjZW50IHJlY291bnRpbmcgYW5kIGxvY2tpbmcgaW4gcGx1Z2lucyBhbmQgcGx1Z2luIGZlYXR1cmVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogSW1wbGVtZW50IHNlbWktZGVjZW50IHJlY291bnRpbmcgYW5kIGxvY2tpbmcKLQkgIGluIHBsdWdpbnMgYW5kIHBsdWdpbiBmZWF0dXJlcy4KLQkgICogZ3N0L2dzdHBsdWdpbi5oOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5jOgotCSAgKiBnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQotMjAwNS0wOS0xNSAxNDoyMTowOCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBnc3QvZ3N0cmVnaXN0cnkuYzoKLQkgIEltcGxlbWVudCBtaXNzaW5nIGZ1bmN0aW9uLiBUaGlzIGlzIGVub3VnaCB0byBnZXQgdGhlIGJhc2ljcyBvZiB0eXBlZmluZGluZyB3b3JraW5nIC0gb2dnZGVtdXggc3VjY2VlZHMgbm93LiBkZWNvZGViaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBJbXBsZW1lbnQgbWlzc2luZyBmdW5jdGlvbi4gVGhpcyBpcyBlbm91Z2ggdG8gZ2V0IHRoZSBiYXNpY3Mgb2YKLQkgIHR5cGVmaW5kaW5nIHdvcmtpbmcgLSBvZ2dkZW11eCBzdWNjZWVkcyBub3cuIGRlY29kZWJpbiBpcyBzdGlsbCBicm9rZW4uCi0KLTIwMDUtMDktMTUgMDU6NTg6MzcgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBjb25maWd1cmUuYWM6IEFkZCAtbm8tdW5kZWZpbmVkIHRvIEdTVF9QTFVHSU5fTERGTEFHUyAoYnVnICMzMTYwNzYpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOiBBZGQgLW5vLXVuZGVmaW5lZCB0byBHU1RfUExVR0lOX0xERkxBR1MgKGJ1ZwotCSAgIzMxNjA3NikKLQkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06IEFkZCAtbm8tdW5kZWZpbmVkIHRvIExERkxBR1MgZm9yIGxpYnMKLQkgICogZ3N0L2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvTWFrZWZpbGUuYW06Ci0KLTIwMDUtMDktMTUgMDU6NDg6MzAgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBjb25maWd1cmUuYWM6IFJlbW92ZSBnZXRiaXRzIGxpYnJhcnkuICBOb3RoaW5nIHVzZXMgaXQsIGFuZCBpdCBzaG91bGQgYmUgaW4gc29tZXRoaW5nIGxpa2UgbGlib2lsIGlmIHNvbWVvbmUgZGlkIHdhbnQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6IFJlbW92ZSBnZXRiaXRzIGxpYnJhcnkuICBOb3RoaW5nIHVzZXMgaXQsIGFuZAotCSAgaXQgc2hvdWxkIGJlIGluIHNvbWV0aGluZyBsaWtlIGxpYm9pbCBpZiBzb21lb25lIGRpZCB3YW50Ci0JICB0byB1c2UgaXQuCi0JICAqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9nZXRiaXRzL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9nZXRiaXRzL2didGVzdC5jOgotCSAgKiBsaWJzL2dzdC9nZXRiaXRzL2dldGJpdHMuYzoKLQkgICogbGlicy9nc3QvZ2V0Yml0cy9nZXRiaXRzLmg6Ci0JICAqIGxpYnMvZ3N0L2dldGJpdHMvZ3N0Z2V0Yml0c19nZW5lcmljLmM6Ci0JICAqIGxpYnMvZ3N0L2dldGJpdHMvZ3N0Z2V0Yml0c19pMzg2LnM6Ci0JICAqIGxpYnMvZ3N0L2dldGJpdHMvZ3N0Z2V0Yml0c19pbmwuaDoKLQotMjAwNS0wOS0xNSAwNTo0MjoxMyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9NYWtlZmlsZS5hbTogRGlzdCBnbGliLWNvbXBhdC5oCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOiBEaXN0IGdsaWItY29tcGF0LmgKLQotMjAwNS0wOS0xNSAwMzoyMDo0OSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIGdzdC9yZWdpc3RyaWVzLCBzaW5jZSBpdCdzIG5vIGxvbmdlciB1c2VkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIGdzdC9yZWdpc3RyaWVzLCBzaW5jZSBpdCdzIG5vIGxvbmdlciB1c2VkLgotCSAgKiBnc3QvcmVnaXN0cmllcy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzoKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuaDoKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuYzoKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuaDoKLQkgICogZ3N0L3JlZ2lzdHJpZXMvcmVnaXN0cnl0ZXN0LmM6Ci0KLTIwMDUtMDktMTUgMDE6Mzg6MzMgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvOiBDb252ZXJnZW5jZSBpcyBuZWFyLiAgU2VyaW91c2x5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nbGliLWNvbXBhdC5oOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzoKLQkgIENvbnZlcmdlbmNlIGlzIG5lYXIuICBTZXJpb3VzbHkuCi0KLTIwMDUtMDktMTUgMDE6MzQ6NTIgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ2xpYi1jb21wYXQuKjogQXR0ZW1wdCAjNCB0byBhcHBlYXNlIHRoZSBidWlsZGJvdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dsaWItY29tcGF0LmM6IChnX21rZGlyX3dpdGhfcGFyZW50cyksIChnX21rZGlyKSwgKGdfc3RhdCk6Ci0JICAqIGdzdC9nbGliLWNvbXBhdC5oOgotCSAgQXR0ZW1wdCAjNCB0byBhcHBlYXNlIHRoZSBidWlsZGJvdHMuCi0KLTIwMDUtMDktMTUgMDE6MjY6NDIgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ2xpYi1jb21wYXQuYzogQXR0ZW1wdCAjMy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzogKGdfbWtkaXJfd2l0aF9wYXJlbnRzKSwgKGdfbWtkaXIpLCAoZ19zdGF0KToKLQkgIEF0dGVtcHQgIzMuCi0KLTIwMDUtMDktMTUgMDE6MjA6MjIgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ2xpYi1jb21wYXQuYzogQXR0ZW1wdCAjMi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuYzogKGdfbWtkaXJfd2l0aF9wYXJlbnRzKSwgKGdfbWtkaXIpLCAoZ19zdGF0KToKLQkgIEF0dGVtcHQgIzIuCi0KLTIwMDUtMDktMTUgMDE6MTQ6MTcgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvTWFrZWZpbGUuYW06IE9oIHllYWgsIGxpYmdzdHJlYW1lci5zbyBuZWVkcyB0byBjb250YWluIHRoZSBuZXcgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbTogT2ggeWVhaCwgbGliZ3N0cmVhbWVyLnNvIG5lZWRzIHRvIGNvbnRhaW4KLQkgIHRoZSBuZXcgZnVuY3Rpb25zLgotCi0yMDA1LTA5LTE1IDAxOjEwOjUyICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dsaWItY29tcGF0Lio6IEFkZCBzb21lIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbiBuZXdlciB2ZXJzaW9ucyBvZiBnbGliIHRoYW4gd2UgY2FyZSB0byByZXF1aXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nbGliLWNvbXBhdC5jOiAoZ19ta2Rpcl93aXRoX3BhcmVudHMpLCAoZ19ta2RpciksIChnX3N0YXQpOgotCSAgKiBnc3QvZ2xpYi1jb21wYXQuaDogQWRkIHNvbWUgZnVuY3Rpb25zIHRoYXQgYXJlIGluIG5ld2VyIHZlcnNpb25zCi0JICBvZiBnbGliIHRoYW4gd2UgY2FyZSB0byByZXF1aXJlLgotCSAgKiBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogVXNlIHRoZW0uCi0KLTIwMDUtMDktMTUgMDA6NDg6NDUgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBwby9QT1RGSUxFUy5pbjogcmVtb3ZlIGdzdC1yZWdpc3Rlci5jCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcG8vUE9URklMRVMuaW46IHJlbW92ZSBnc3QtcmVnaXN0ZXIuYwotCi0yMDA1LTA5LTE1IDAwOjQyOjAzICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZG9jcy9nc3QvOiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMgZm9yIHJlZ2lzdHJ5IGNoYW5nZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6Ci0JICBEb2N1bWVudGF0aW9uIHVwZGF0ZXMgZm9yIHJlZ2lzdHJ5IGNoYW5nZXMuCi0KLTIwMDUtMDktMTUgMDA6MzU6MTEgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ3N0cmVnaXN0cnl4bWwuYzogQ29weSBnX21rZGlyX3dpdGhfcGFyZW50KCkgZnJvbSBnbGliLCBiZWNhdXNlIHdlIGRvbid0IHJlcXVpcmUgZ2xpYi0yLjguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IENvcHkgZ19ta2Rpcl93aXRoX3BhcmVudCgpIGZyb20gZ2xpYiwKLQkgIGJlY2F1c2Ugd2UgZG9uJ3QgcmVxdWlyZSBnbGliLTIuOC4KLQotMjAwNS0wOS0xNSAwMDoyMDoxNCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9nc3RyZWdpc3RyeXhtbC5jOiBBZGRlZC4gIEVzc2VudGlhbGx5IG1vdmVkIG91dCBvZiB0aGUgcmVnaXN0cmllcyBkaXJlY3RvcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5eG1sLmM6IEFkZGVkLiAgRXNzZW50aWFsbHkgbW92ZWQgb3V0IG9mIHRoZQotCSAgcmVnaXN0cmllcyBkaXJlY3RvcnkuCi0KLTIwMDUtMDktMTUgMDA6MTM6MjYgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICByZW1vdmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0LmM6Ci0JICAqIGdzdC9nc3QuaDoKLQkgICogZ3N0L2dzdF9wcml2YXRlLmg6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgKiBnc3QvZ3N0aW5kZXguYzoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmM6Ci0JICAqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOgotCSAgKiBnc3QvZ3N0cmVnaXN0cnkuaDoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5cG9vbC5jOiByZW1vdmUKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5cG9vbC5oOiByZW1vdmUKLQkgICogZ3N0L2dzdHR5cGVmaW5kLmM6Ci0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuYzoKLQkgICogZ3N0L2dzdHVyaS5jOgotCSAgKiB0b29scy9NYWtlZmlsZS5hbToKLQkgICogdG9vbHMvZ3N0LWNvbXBwcmVwLmM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JICAqIHRvb2xzL2dzdC1yZWdpc3Rlci5jOiByZW1vdmUKLQkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkgIFJlZ2lzdHJ5IHJld3JpdGUuICBDaGFuZ2VzIHJlZ2lzdHJ5IGZyb20gYmVpbmcgYSBmaWxlIGNyZWF0ZWQKLQkgIGJ5IGEgdG9vbCBpbnRvIGEgc2ltcGxlIGNhY2hlIGZpbGUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5Ci0JICBsaWJnc3RyZWFtZXIuICBSZW1vdmVkIGdzdC1yZWdpc3RlciAoYmVjYXVzZSBpdCdzIG5vIGxvbmdlcgotCSAgbmVlZGVkKS4gIFJlbW92ZSByZWdpc3RyeSBwb29scywgYmVjYXVzZSB3ZSBvbmx5IGhhdmUgb25lCi0JICByZWdpc3RyeSBpbXBsZW1lbnRhdGlvbiAoWE1MKS4gIEZpeCB1cCBvdGhlciBzdWJzeXN0ZW1zIGFzCi0JICBuZWNlc3NhcnkuCi0KLTIwMDUtMDktMTQgMjI6MDU6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZW51bXR5cGVzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGltcGxlbWVudHNpbnRlcmZhY2Uuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXguc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXhmYWN0b3J5LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGluZm8uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0b2JqZWN0LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhZC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwYWR0ZW1wbGF0ZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwaXBlbGluZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luZmVhdHVyZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlcy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R2YWx1ZS5zZ21sOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6Ci0JKiBkb2NzL2xpYnMvdG1wbC9nc3RnZXRiaXRzLnNnbWw6Ci0JICB3aG9vcHMsIHdyb25nIGNvbW1pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3aG9vcHMsIHdyb25nIGNvbW1pdAotCi0yMDA1LTA5LTE0IDIyOjAxOjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogZG9jcy9SRUFETUU6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZW51bXR5cGVzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGltcGxlbWVudHNpbnRlcmZhY2Uuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXguc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXhmYWN0b3J5LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGluZm8uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0b2JqZWN0LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhZC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwYWR0ZW1wbGF0ZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwaXBlbGluZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luZmVhdHVyZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlcy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R2YWx1ZS5zZ21sOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6Ci0JKiBkb2NzL2xpYnMvdG1wbC9nc3RnZXRiaXRzLnNnbWw6Ci0JICBub3RlcyBvbiBkb2N1bWVudGluZyBlbGVtZW50cyBhbmQgcGx1Z2lucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBub3RlcyBvbiBkb2N1bWVudGluZyBlbGVtZW50cyBhbmQgcGx1Z2lucwotCi0yMDA1LTA5LTE0IDE1OjE2OjMzICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkgIFJlc3Qgb2YgdGhlIGZpeCBmb3IgMzE2MTU1OiBkb24ndCBjb25mdXNlIE1pbkdXIHdoZW4gcnVubmluZyBnbGliLW1rZW51bXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmVzdCBvZiB0aGUgZml4IGZvciAzMTYxNTU6IGRvbid0IGNvbmZ1c2UgTWluR1cgd2hlbiBydW5uaW5nIGdsaWItbWtlbnVtcwotCi0yMDA1LTA5LTEzIDE1OjAzOjA1ICswMDAwICBTdGV2ZSBMaG9tbWUgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgotCi0JICBmaWxlIGdzdC10eXBlZmluZC52Y3Byb2ogd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpbGUgZ3N0LXR5cGVmaW5kLnZjcHJvaiB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KLQotMjAwNS0wOS0xMyAxNDo0OToyMyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JICBEb24ndCB1c2Ugd2luZG93cyBsaW5raW5nIGF0dHJpYnV0ZXMgaW4gTWluR1cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRG9uJ3QgdXNlIHdpbmRvd3MgbGlua2luZyBhdHRyaWJ1dGVzIGluIE1pbkdXCi0KLTIwMDUtMDktMTMgMTE6MDA6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0dXRpbHMuYzogQXBwYXJlbnRseSBwZW9wbGUgdGhpbmsgaXQncyBiZXR0ZXIgaWYgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHRyeSB0byBzZXQgdGhlIHN0YXRlIHRvIHdoYXRldmVyIHN0YXRlIHcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKHNldF9zdGF0ZV9hc3luY190aHJlYWRfZnVuYyksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2FzeW5jKToKLQkgIEFwcGFyZW50bHkgcGVvcGxlIHRoaW5rIGl0J3MgYmV0dGVyIGlmIHRoaXMgZnVuY3Rpb24gZG9lc24ndAotCSAgdHJ5IHRvIHNldCB0aGUgc3RhdGUgdG8gd2hhdGV2ZXIgc3RhdGUgd2FzIGFza2VkIGZvciBvbiB0aGUgZmlyc3QKLQkgIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBmb3IgYW55IG9iamVjdC4gIFNlcmlvdXNseS4KLQotMjAwNS0wOS0xMiAxODoxNDowMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGFkZCBhIGdzdF9lbGVtZW50X3NldF9zdGF0ZV9hc3luYyBtZXRob2QgdGhhdCBzZXRzIHRoZSBzdGF0ZSBhbmQgc3RhcnRzIGEgdGhyZWFkIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGUgY2hhbmdlIGNvbXBsZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKHNldF9zdGF0ZV9hc3luY190aHJlYWRfZnVuYyksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2FzeW5jKToKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBhZGQgYSBnc3RfZWxlbWVudF9zZXRfc3RhdGVfYXN5bmMgbWV0aG9kIHRoYXQKLQkgIHNldHMgdGhlIHN0YXRlIGFuZCBzdGFydHMgYSB0aHJlYWQgdG8gbWFrZSBzdXJlIHRoZSBzdGF0ZQotCSAgY2hhbmdlIGNvbXBsZXRlcyBhcyBiZXN0IGFzIGl0IGNhbgotCi0yMDA1LTA5LTEyIDE3OjAxOjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYzoKLQkgIGNvZGlmeSBkZXNpZ24rYmVoYXZpb3VyIGluIHRlc3RzdWl0ZSBhZnRlciBkaXNjdXNzaW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvZGlmeSBkZXNpZ24rYmVoYXZpb3VyIGluIHRlc3RzdWl0ZSBhZnRlciBkaXNjdXNzaW9uCi0KLTIwMDUtMDktMTIgMTY6MTA6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBkb2NzLzogYWRkIGEgcXVvdGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKLQkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtcXVvdGVzLnhtbDoKLQkgIGFkZCBhIHF1b3RlCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOgotCSAgYWRkIHNvbWUgZGVidWcKLQotMjAwNS0wOS0xMiAxMzo0NTowNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC86IFJlbW92ZSB0aGUgcmVxdWlyZW1lbnQgZm9yIHN1Yi1jbGFzc2VzIHRvIGNhbGwgdGhlIHBhcmVudCBpbXBsZW1lbnRhdGlvbiBvZiBwcmVwYXJlX291dHB1dF9idWZmZXIgd2l0aCBhIHdyYXBwZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlcik6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl90cmFuc2Zvcm1faXApLAotCSAgKGdzdF9jYXBzZmlsdGVyX3ByZXBhcmVfYnVmKToKLQkgIFJlbW92ZSB0aGUgcmVxdWlyZW1lbnQgZm9yIHN1Yi1jbGFzc2VzIHRvIGNhbGwgdGhlIHBhcmVudAotCSAgaW1wbGVtZW50YXRpb24gb2YgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIHdpdGggYSB3cmFwcGVyIGZ1bmN0aW9uLgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmg6Ci0JICBGaXggI2RlZmluZSB3cmFwcGVyCi0KLTIwMDUtMDktMTEgMTk6MjI6MjMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDogbW9yZSBkb2MgY2xlYW51cHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgbW9yZSBkb2MgY2xlYW51cHMKLQotMjAwNS0wOS0xMSAxMzowNzoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luLnNnbWw6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogZ3N0L2dzdHZhbHVlLmg6Ci0JICBkb2MgYnVpbGQgY2xlYW4sIGh1cnJheQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb2MgYnVpbGQgY2xlYW4sIGh1cnJheQotCi0yMDA1LTA5LTExIDEyOjU3OjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVzLnNnbWw6Ci0JKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogZ3N0L2dzdGJpbi5oOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdGJ1cy5oOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIGdzdC9nc3RjbG9jay5oOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkqIGdzdC9nc3RwYWQuaDoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5Lmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgdmFyaW91cyBkb2MgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdmFyaW91cyBkb2MgZml4ZXMKLQotMjAwNS0wOS0xMSAxMjowMjowMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGZpeCBzaWxseSBidWcgdGhhdCBjYXVzZWQgYnVpbGQgdG8gZmFpbCB3aGVuIGNoZWNrIGlzIG1pc3NpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHNpbGx5IGJ1ZyB0aGF0IGNhdXNlZCBidWlsZCB0byBmYWlsIHdoZW4gY2hlY2sgaXMgbWlzc2luZwotCi0yMDA1LTA5LTExIDEyOjAxOjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZG9jcy9nc3QvOiByZWFycmFuZ2UgZ3N0dmFsdWUgc2VjdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dmFsdWUuc2dtbDoKLQkgIHJlYXJyYW5nZSBnc3R2YWx1ZSBzZWN0aW9uCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUpOgotCSAgTk9ORSAtPiBWT0lECi0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoX2dzdF92YWx1ZV9pbml0aWFsaXplKToKLQkgICogZ3N0L2dzdHZhbHVlLmg6Ci0JICBkb2MgdXBkYXRlcwotCi0yMDA1LTA5LTExIDExOjU3OjA4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkgIGRlYnVnIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRlYnVnIGZpeGVzCi0KLTIwMDUtMDktMDkgMjM6NDU6MTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6IEhlYWRlciBpbmNsdWRlIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6Ci0JICBIZWFkZXIgaW5jbHVkZSBmaXguCi0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF9wcmVwYXJlX2J1ZiksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JICBTb21lIG1vcmUgYmFzZXRyYW5zZm9ybSBjaGFuZ2VzIGFuZCBmaXhlcyB0byBlbmFibGUgc3ViLWNsYXNzZXMKLQkgIHRoYXQgbW9kaWZ5IGJ1ZmZlciBtZXRhZGF0YSBvbmx5LgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2NhcHNmaWx0ZXJfaW5pdCksIChnc3RfY2Fwc2ZpbHRlcl90cmFuc2Zvcm1faXApLAotCSAgKGdzdF9jYXBzZmlsdGVyX3ByZXBhcmVfYnVmKToKLQkgIElmIHRoZSBvdXRwdXQgcGFkIGhhcyBmaXhlZCBhbGxvd2VkIGNhcHMgYW5kIGlucHV0IGJ1ZmZlcnMKLQkgIGRvbid0IGhhdmUgYW55LCBzZXQgdGhlIGZpeGVkIGNhcHMgb24gb3V0Z29pbmcgYnVmZmVycy4KLQotMjAwNS0wOS0wOSAxODowNTo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICBvYmplY3QgZGVidWdnaW5nIGlzIGdvb2QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgb2JqZWN0IGRlYnVnZ2luZyBpcyBnb29kCi0KLTIwMDUtMDktMDkgMTc6NDI6MjAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjaGVjay9lbGVtZW50cy9pZGVudGl0eS5jOiBNYWtlIHRoZSBlcnJvciBhIGxpdHRsZSBjbGVhcmVyIHdoZW4gdGhlIHRlc3QgZmFpbHMgYmVjYXVzZSBpZGVudGl0eSBtYWRlIGEgY29weSBvZiB0aGUgYnUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9lbGVtZW50cy9pZGVudGl0eS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgTWFrZSB0aGUgZXJyb3IgYSBsaXR0bGUgY2xlYXJlciB3aGVuIHRoZSB0ZXN0IGZhaWxzIGJlY2F1c2UKLQkgIGlkZW50aXR5IG1hZGUgYSBjb3B5IG9mIHRoZSBidWZmZXIuCi0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBOZXcgc3ltYm9scyBpbiBnc3RiYXNldHJhbnNmb3JtLmgKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fc2l6ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF9wcmVwYXJlX2J1ZiksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF91bml0X3NpemUpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbiksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgQ2hhbmdlIEJhc2VUcmFuc2Zvcm0gdG8gc2VwYXJhdGUgaW5fcGxhY2Ugb3BlcmF0ZSBmcm9tIHNhbWVfY2FwcwotCSAgb3V0cHV0LiBpbl9wbGFjZSBpbXBsaWVzIHRoYXQgdGhlIGVsZW1lbnQgY2FuIHBlcmZvcm0gdGhlIHRyYW5zZm9ybQotCSAgb24gaW5jb21pbmcgYnVmZmVycyBpbi1wbGFjZSwgZXZlbiBpZiB0aGUgY2FwcyBvbiB0aGUgb3V0cHV0IGFyZQotCSAgZGlmZmVyZW50LgotCSAgU3ViLWNsYXNzIGVsZW1lbnRzIGNhbiBub3cgaW1wbGVtZW50IHNwZWNpYWwgYnVmZmVyIGFsbG9jYXRpb24KLQkgIG1ldGhvZHMgZm9yIG91dGdvaW5nIGJ1ZmZlcnMgaWYgdGhleSB3aXNoIHRvLgotCSAgQmlnIGRvY3VtZW50YXRpb24gYWRkaXRpb24uCi0JICAqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl90cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkgIENoYW5nZXMgZm9yIGJhc2V0cmFuc2Zvcm0gbW9kaWZpY2F0aW9ucy4KLQkgICogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzogKGdzdF9mZHNyY19pbml0KSwgKGdzdF9mZHNyY19jcmVhdGUpOgotCSAgQ29tcGlsZSBmaXguIEV4dHJhIGRlYnVnIG91dHB1dC4KLQotMjAwNS0wOS0wOSAxNToxOToyNCArMDAwMCAgU3RldmUgTGhvbW1lIDxzdGV2ZS5saG9tbWVAZnJlZS5mcj4KLQotCSAgZmlsZSBnc3Rjb250cm9sLnZjcHJvaiB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZmlsZSBnc3Rjb250cm9sLnZjcHJvaiB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KLQotMjAwNS0wOS0wOSAxNDozNDo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL2dzdC9nc3RwYWQuYzogYWRkIHRlc3RzIGZvciB2YWxpZCBwYWQgbmFtaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHBhZC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAobmFtZV9pc192YWxpZCksCi0JICAoZ3N0X3BhZF9zdWl0ZSk6Ci0JICBhZGQgdGVzdHMgZm9yIHZhbGlkIHBhZCBuYW1pbmcKLQkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfbG9nX21lc3NhZ2VfZnVuYyksCi0JICAoZ3N0X2NoZWNrX2xvZ19jcml0aWNhbF9mdW5jKToKLQkgIGFkZCBBU1NFUlRfV0FSTklORwotCSAgcmVtb3ZlIHByaW50aW5nIG9mIGNvZGUsIGl0IGlzIGZyYWdpbGUgd2hlbiB0aGUgY29kZSBjb250YWlucwotCSAgJSBhbmQgdGhlIGxpbmUgbnVtYmVyIGlzIGVub3VnaCBpbmZvCi0JICAqIGdzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3RlbXBsYXRlX25ldyk6Ci0JICBmaXggbWVtbGVha3MKLQotMjAwNS0wOS0wOSAxMzoyODowNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIGFuZCB0aGUgY2hhbmdlbG9nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFuZCB0aGUgY2hhbmdlbG9nCi0KLTIwMDUtMDktMDkgMTM6MjY6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb25maWd1cmUuYWM6IHNheSB3aGF0IENIRUNLIGZsYWdzIHdlIHVzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIHNheSB3aGF0IENIRUNLIGZsYWdzIHdlIHVzZQotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuYzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5oOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1oZWxwZXIuYzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaW50ZXJwb2xhdGlvbi5jOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uLmM6Ci0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9wbHVnaW5faW5mbyk6Ci0JICB3ZSBkb24ndCB1c2UgZGFzaGVzIGluIGhlYWRlciBuYW1lcwotCi0yMDA1LTA5LTA5IDEyOjAyOjQxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svOiBhZGRpbmcgYSB0ZXN0IGZvciBwaXBlbGluZXMgYW5kIHN0YXRlIGNoYW5nZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogY2hlY2svZ3N0Ly5jdnNpZ25vcmU6Ci0JICAqIGNoZWNrL2dzdC9nc3RwaXBlbGluZS5jOiAocG9wX21lc3NhZ2VzKSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3RfcGlwZWxpbmVfc3VpdGUpLCAobWFpbik6Ci0JICBhZGRpbmcgYSB0ZXN0IGZvciBwaXBlbGluZXMgYW5kIHN0YXRlIGNoYW5nZXMKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnZXRfc3RhdGVfZnVuYyk6Ci0JICBhZGQgc29tZSBkZWJ1Z2dpbmcKLQkgICogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBmaXggdXAgc3BlYyBmaWxlCi0KLTIwMDUtMDktMDggMTc6MjM6NTcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmg6Ci0JICBWYXJpb3VzIGZpeGVzIGZvciB1bnNlZWthYmxlLCB1bm1tYXBhYmxlLCBhbmQgbm9uLW5vcm1hbCBmaWxlcywgc28gdGhhdCBmYWxsYmFjayB0byByZWFkKCkgcmF0aGVyIHRoYW4gbW1hcCgpIHdvcmtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBWYXJpb3VzIGZpeGVzIGZvciB1bnNlZWthYmxlLCB1bm1tYXBhYmxlLCBhbmQgbm9uLW5vcm1hbCBmaWxlcywgc28gdGhhdAotCSAgZmFsbGJhY2sgdG8gcmVhZCgpIHJhdGhlciB0aGFuIG1tYXAoKSB3b3Jrcy4KLQkgIEFsbG93IG5ld3NlZ21lbnQgZXZlbnRzIHdpdGggc3RhcnQgPT0gZW5kLCBzbyB0aGF0IGNhc2VzIHdoZXJlIHRoYXQncwotCSAgY29ycmVjdCB3b3JrIChlLmcuIGZpbGVzcmMgb24gYSB6ZXJvLXNpemUgZmlsZSkuCi0KLTIwMDUtMDktMDggMTE6NDU6MTIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogZG9jcy9wd2cvYnVpbGRpbmctc3RhdGUueG1sOgotCSAgVXBkYXRlIHRoZSBtYW51YWwgc2VjdGlvbiBvbiBzdGF0ZSBjaGFuZ2VzIGZvciB3aW5nbydzIG5ldyBBUEkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIHRoZSBtYW51YWwgc2VjdGlvbiBvbiBzdGF0ZSBjaGFuZ2VzIGZvciB3aW5nbydzIG5ldyBBUEkKLQotMjAwNS0wOS0wNyAxNToyMjoyOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RwbHVnaW4uYzogQ2FsbCBnX21vZHVsZV9jbG9zZSB3aGVuIHdlIGRvbid0IGxvYWQgdGhlIG1vZHVsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwbHVnaW4uYzogKGdzdF9wbHVnaW5fbG9hZF9maWxlKToKLQkgIENhbGwgZ19tb2R1bGVfY2xvc2Ugd2hlbiB3ZSBkb24ndCBsb2FkIHRoZSBtb2R1bGUKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzoKLQkgIChnc3RfeG1sX3JlZ2lzdHJ5X2dldF9wcm9wZXJ0eSk6Ci0JICBQb3J0IGxlYWsgZml4IGZyb20gMC44Ci0KLTIwMDUtMDktMDcgMTQ6MDg6NDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogcG8vUE9URklMRVMuaW46Ci0JICBtb3JlIHJlbmFtZSBmaXhpbmcgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vcmUgcmVuYW1lIGZpeGluZyAuLi4KLQotMjAwNS0wOS0wNyAxMzoyMjoxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICByZW5hbWVkIGdzdHRhZyAtPiBnc3R0YWdsaXN0LCBnc3R0YWdpbnRlcmZhY2UgLT4gZ3N0dGFnc2V0dGVyIGlubGluZWQgZG9jcyBmb3IgZ3N0dHJhY2UsIGdzdHRyYXNoc3RhY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhY2Uuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3R0cmFzaHN0YWNrLnNnbWw6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdC5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgICogZ3N0L2dzdHRhZy5jOgotCSAgKiBnc3QvZ3N0dGFnLmg6Ci0JICAqIGdzdC9nc3R0YWdpbnRlcmZhY2UuYzoKLQkgICogZ3N0L2dzdHRhZ2ludGVyZmFjZS5oOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSAgKiBnc3QvZ3N0dGFnbGlzdC5oOgotCSAgKiBnc3QvZ3N0dGFnc2V0dGVyLmM6Ci0JICAqIGdzdC9nc3R0YWdzZXR0ZXIuaDoKLQkgICogZ3N0L2dzdHRyYWNlLmM6Ci0JICAqIGdzdC9nc3R0cmFjZS5oOgotCSAgKiBnc3QvZ3N0dHJhc2hzdGFjay5jOgotCSAgcmVuYW1lZCBnc3R0YWcgLT4gZ3N0dGFnbGlzdCwgZ3N0dGFnaW50ZXJmYWNlIC0+IGdzdHRhZ3NldHRlcgotCSAgaW5saW5lZCBkb2NzIGZvciBnc3R0cmFjZSwgZ3N0dHJhc2hzdGFjawotCi0yMDA1LTA5LTA3IDEyOjM1OjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC86IHNwbGl0dGVkIGdzdHR5cGVmaW5kIGludG8gZ3N0dHlwZWZpbmQsIGdzdHR5cGVmaW5kZmFjdG9yeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGJ1ZmZlcnN0b3JlLmg6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0Lmg6Ci0JICAqIGdzdC9nc3R0eXBlZmluZC5jOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuaDoKLQkgICogZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5jOiAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF90eXBlKSwKLQkgIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2xhc3NfaW5pdCksIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfaW5pdCksCi0JICAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2Rpc3Bvc2UpLAotCSAgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV91bmxvYWRfdGh5c2VsZiksCi0JICAoZ3N0X3R5cGVfZmluZF9sb2FkX3BsdWdpbiksIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QpLAotCSAgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2FwcyksCi0JICAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zKSwKLQkgIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbik6Ci0JICAqIGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuaDoKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzoKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuYzoKLQkgIHNwbGl0dGVkIGdzdHR5cGVmaW5kIGludG8gZ3N0dHlwZWZpbmQsIGdzdHR5cGVmaW5kZmFjdG9yeQotCi0yMDA1LTA5LTA3IDEwOjA2OjU2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVsbCk6IEZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlYnkgdGhlIHBhZCdzIHRhc2sgZnVuY3Rpb24gaXMgZW50ZXJlZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA5LTA3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpOiBGaXggYSByYWNlCi0JICBjb25kaXRpb24gd2hlcmVieSB0aGUgcGFkJ3MgdGFzayBmdW5jdGlvbiBpcyBlbnRlcmVkIGJlZm9yZSB0aGUKLQkgIHBhZF9tb2RlIHZhcmlhYmxlIHdhcyBzZXQuCi0KLTIwMDUtMDktMDYgMjI6NTc6MDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IENhdGNoIG1pc2JlaGF2aW5nIHBhZF9hbGxvYyBmdW5jdGlvbnMgdGhhdCBkb24ndCBzZXQgdXAgY2FwcyBhbmQgZG8gaXQgZm9yIHRoZW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hbGxvY19idWZmZXIpOgotCSAgQ2F0Y2ggbWlzYmVoYXZpbmcgcGFkX2FsbG9jIGZ1bmN0aW9ucyB0aGF0IGRvbid0Ci0JICBzZXQgdXAgY2FwcyBhbmQgZG8gaXQgZm9yIHRoZW0uCi0KLTIwMDUtMDktMDYgMjI6MDM6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYzogdGVzdCBmb3IgcGlwZSE9TlVMTAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6IChydW5fcGlwZWxpbmUpOgotCSAgdGVzdCBmb3IgcGlwZSE9TlVMTAotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0bWVtY2h1bmsuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RwYXJzZS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHRhZ2xpc3Quc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3R0YWdzZXR0ZXIuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZC5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVmaW5kZmFjdG9yeS5zZ21sOgotCSAgKiBnc3QvZ3N0bWVtY2h1bmsuYzoKLQkgICogZ3N0L2dzdHBhcnNlLmM6Ci0JICAqIGdzdC9nc3R0YWcuYzoKLQkgICogZ3N0L2dzdHRhZ2ludGVyZmFjZS5jOgotCSAgKiBnc3QvZ3N0dHlwZWZpbmQuYzoKLQkgICogZ3N0L2dzdHR5cGVmaW5kLmg6Ci0JICBpbmxpbmVkIG1vcmUgZG9jcwotCi0yMDA1LTA5LTA2IDE4OjE4OjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkgIGFkZCBhIGNoZWNrIGZvciBhIGdob3N0cGFkIHRoYXQgZG9lc24ndCBoYXZlIGEgdGFyZ2V0IGJlaW5nIGxpbmtlZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgYSBjaGVjayBmb3IgYSBnaG9zdHBhZCB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHRhcmdldCBiZWluZyBsaW5rZWQKLQotMjAwNS0wOS0wNiAxNDoxMToyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gaGVhZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIGhlYWQKLQotPT09IHJlbGVhc2UgMC45LjIgPT09Ci0KLTIwMDUtMDktMDYgMTQ6MDI6MTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVBRE1FOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbGVhc2luZyAwLjkuMgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC45LjIKLQotMjAwNS0wOS0wNiAxMTo0NTowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIFJFQURNRToKLQkqIGNvbW1vbjoKLQkgIHVwZGF0ZSByZWFkbWUgd2l0aCBleHBsYW5hdGlvbiBvZiBtb2R1bGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSByZWFkbWUgd2l0aCBleHBsYW5hdGlvbiBvZiBtb2R1bGVzCi0KLTIwMDUtMDktMDYgMDk6NTI6MjMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBkb2NzL3JhbmRvbS9DaGFuZ2VMb2ctMC44OgotCSAgY2hhbmdlbG9nIHNwbGl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNoYW5nZWxvZyBzcGxpdAotCi0yMDA1LTA5LTA1IDE3OjU1OjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luLnNnbWw6Ci0JICBtYWludGVuYW5jZSB1cGRhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1haW50ZW5hbmNlIHVwZGF0ZXMKLQotMjAwNS0wOS0wNSAxNzo1MzoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIGFkZGluZyAtYmFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZGluZyAtYmFkCi0KLTIwMDUtMDktMDUgMTY6NTQ6NTQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuKjogYW5kIHVwZGF0ZSB0byBuZXdlciBBUEkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuaDoKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuYzogYW5kIHVwZGF0ZSB0byBuZXdlciBBUEkuCi0JICBJbmNpZGVudGFsbHkgdGhleSBzaG91bGQgYmUgYSBiaXQgZmFzdGVyIG5vdyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZQotCSAgdG8gcGFyc2UgdGhlIGNhcHMuCi0KLTIwMDUtMDktMDUgMTY6NTI6NTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuKjogVW0uLi4gcmVzdXJyZWN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDktMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5Lmg6Ci0JICAqIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5LmM6IFVtLi4uIHJlc3VycmVjdC4uLgotCi0yMDA1LTA5LTA1IDE2OjM2OjQ3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5Lio6IFJlbW92ZSBmcm9tIENWUywgdGhleSB3ZXJlIHJlcGxhY2VkIGJ5IHRoZSBsaWJ4bWwgcmVnaXN0cnkgYSB3aGlsZSBiYWNrCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDktMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5Lmg6Ci0JICAqIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5LmM6IFJlbW92ZSBmcm9tIENWUywgdGhleSB3ZXJlCi0JICByZXBsYWNlZCBieSB0aGUgbGlieG1sIHJlZ2lzdHJ5IGEgd2hpbGUgYmFjawotCi0yMDA1LTA5LTA1IDExOjU0OjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svZ2VuZXJpYy8uZ2l0aWdub3JlOgotCSogY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JKiBkb2NzL1JFQURNRToKLQkqIGV4YW1wbGVzL3B3Zy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZ2VuZXJpYy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcHdnLy5naXRpZ25vcmU6Ci0JICBtYWludGVuYW5jZSB1cGRhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1haW50ZW5hbmNlIHVwZGF0ZXMKLQotMjAwNS0wOS0wNSAwOTozODozOCArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgUmV2ZXIgdG8gMS44MCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBhcyBHc3RVdGlscyBpcyBub3QgYXMgZGVhZCBhcyBpdCBzZWVtZWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2ZXIgdG8gMS44MCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBhcyBHc3RVdGlscyBpcyBub3QgYXMgZGVhZCBhcyBpdCBzZWVtZWQKLQotMjAwNS0wOS0wNSAwOToyMzo0NCArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBjb21tb246Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgcmVtb3ZlIEdzdFV0aWxzIG1lbnRpb24gYXMgaXQgaXMgbm93IGdvbmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIEdzdFV0aWxzIG1lbnRpb24gYXMgaXQgaXMgbm93IGdvbmUKLQotMjAwNS0wOS0wNCAxMTowMTo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjLmluOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIG5lZWQgdG8gYWRkIC1sY2hlY2sgdG8gdGhlIHBrZ2NvbmZpZyBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG5lZWQgdG8gYWRkIC1sY2hlY2sgdG8gdGhlIHBrZ2NvbmZpZyBmaWxlCi0KLTIwMDUtMDktMDMgMTc6MzY6MjAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0cGx1Z2luLmM6Ci0JICBmaXggZm9yIGEgY3JpdGljYWwgd2hlbiBhIG1vZHVsZSByZXR1cm5zIE5VTEwgb24gb3BlbmluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggZm9yIGEgY3JpdGljYWwgd2hlbiBhIG1vZHVsZSByZXR1cm5zIE5VTEwgb24gb3BlbmluZwotCi0yMDA1LTA5LTAzIDE3OjAwOjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKLQkqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbi5oOgotCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzoKLQkqIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSAgYWRkIGEgc291cmNlIHBsdWdpbiBkZXNjcmlwdGlvbiBmaWVsZCwgdG8gcmVwcmVzZW50IHRoZSBzb3VyY2UgbW9kdWxlIHRoaXMgcGx1Z2luIGlzIGEgcGFydCBvZi4gIEJ5IGRlZmF1bHQgR1NUX1BMVUdJLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBhIHNvdXJjZSBwbHVnaW4gZGVzY3JpcHRpb24gZmllbGQsIHRvIHJlcHJlc2VudCB0aGUgc291cmNlCi0JICBtb2R1bGUgdGhpcyBwbHVnaW4gaXMgYSBwYXJ0IG9mLiAgQnkgZGVmYXVsdCBHU1RfUExVR0lOX0RFRklORQotCSAgd2lsbCBzZXQgaXQgdG8gUEFDS0FHRSwgd2hpY2ggaXMgYXV0b21ha2UncyBpZGVhIG9mIHRoZSBuYW1lIG9mCi0JICB0aGUgc291cmNlIHByb2plY3QuCi0KLTIwMDUtMDktMDMgMTY6MTY6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiBkb2NzL2h0bWxpbnN0YWxsLm1hazoKLQkgIGZpeCBkaXN0Y2hlY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGRpc3RjaGVjawotCi0yMDA1LTA5LTAzIDE0OjIwOjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2h0bWxpbnN0YWxsLm1hazoKLQkgIGVuYWJsZSBkb2NzIGJ1aWxkIGZvciBkaXN0Y2hlY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZW5hYmxlIGRvY3MgYnVpbGQgZm9yIGRpc3RjaGVjawotCi0yMDA1LTA5LTAzIDEzOjU0OjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zLy5naXRpZ25vcmU6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0ZG9jLW1rZGI6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0ZG9jLW1rdG1wbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3Rkb2Mtc2Nhbm9iajoKLQkqIGRvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnR5cGVzLmluOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvYWMzZGVjLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9hYzNwYXJzZS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvYXVkaW9zY2FsZS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvY29iaW4uc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL2R2ZHNyYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZXhhbXBsZS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0YXZpZW5jb2Rlci5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0anBlZy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0anBlZ2RlYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0anBlZ2VuYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0bXBlZzFlbmNvZGVyLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RtcGVnMmVuYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0bXBlZzJwbGF5LnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RtcGVnX3BsYXkuc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdG1wZWdhdWRpby5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0bXBnMTIzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RwYXJzZWF1LnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3RwYXJzZWF2aS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0cGFyc2V3YXYuc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdHJlYW1lci1wbHVnaW5zLXVudXNlZC5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0c3BlY3RydW0uc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdHY0bHNyYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0d2luY29kZWMuc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL2dzdHdpbmRlYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0d2luZW5jLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9nc3R4YS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvZ3N0eGluZy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvbWVkaWFuLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9tcDF2aWRlb3BhcnNlLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9tcDJ2aWRlb3BhcnNlLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9tcDNwYXJzZS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvbXBlZzFwYXJzZS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvbXBlZzJwYXJzZS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvbXBlZzJzdWJ0LnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9ydGpwZWdkZWMuc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL3J0anBlZ2VuYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvc21vb3RoLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9zbW9vdGh3YXZlLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9zcGluZGVudGl0eS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvc3RlcmVvLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC9zeW5hZXN0aGVzaWEuc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL3N5c3RlbV9lbmNvZGUuc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL3ZjZHNyYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvdmlkZW9zY2FsZS5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvdmlkZW9zaW5rLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC92b2x1bWUuc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy90bXBsL3ZvcmJpc2RlYy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL3RtcGwvdm9yYmlzZW5jLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvdG1wbC92dW1ldGVyLnNnbWw6Ci0JICByZW1vdmUgb2xkIHBsdWdpbnMgZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgb2xkIHBsdWdpbnMgZG9jcwotCi0yMDA1LTA5LTAzIDEzOjQ5OjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTWFrZWZpbGUuYW06Ci0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvZmFxL01ha2VmaWxlLmFtOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVzLnNnbWw6Ci0JKiBkb2NzL2h0bWxpbnN0YWxsLm1hazoKLQkqIGRvY3MvbWFudWFsL01ha2VmaWxlLmFtOgotCSogZG9jcy9wd2cvTWFrZWZpbGUuYW06Ci0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JICBjbGVhbiB1cCBkb2NzIGJ1aWxkIGEgbGl0dGxlOyBoYXZlIGRvY2RpciBiZSBhbiBvdmVycmlkYWJsZSBpbnN0YWxsIGxvY2F0aW9uOyBzZXBhcmF0ZSBndGstZG9jIGFuZCBkb2Nib29rIGJpdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgY2xlYW4gdXAgZG9jcyBidWlsZCBhIGxpdHRsZTsgaGF2ZSBkb2NkaXIgYmUgYW4gb3ZlcnJpZGFibGUgaW5zdGFsbCBsb2NhdGlvbjsgc2VwYXJhdGUgZ3RrLWRvYyBhbmQgZG9jYm9vayBiaXRzCi0KLTIwMDUtMDktMDIgMjM6MzY6MjQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0dXJpLmg6Ci0JICB3aGl0ZXNwYWNlIGNsZWFudXBzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHdoaXRlc3BhY2UgY2xlYW51cHMKLQotMjAwNS0wOS0wMiAyMzoxNzoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogQWRkIGNvbW1lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcGFkX2J1ZmZlcl9hbGxvYyk6Ci0JICBBZGQgY29tbWVudC4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2luaXQpLAotCSAgKGdzdF9mYWtlX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIE1ha2Ugc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHRocmVhZC1zYWZlLgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlcik6Ci0JICBTZXQgb2Zmc2V0IG9uIGdlbmVyaWMgYnVmZmVyIGFsbG9jYXRlZCBieSBmYWxsYmFjay4KLQotMjAwNS0wOS0wMiAyMzowMzozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3R0cmFzaHN0YWNrLmg6Ci0JICB3aGl0ZXNwYWNlIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHdoaXRlc3BhY2UgZml4ZXMKLQotMjAwNS0wOS0wMiAyMTozNzo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBydW4gdGhlIHdpbmdvLW1hZ2ljIHNjcmlwdCBhZ2FpbnN0IHRoZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6Ci0JICAqIGdzdC9nc3RwYWQuYzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3NldF9pbnRlcnBvbGF0aW9uX21vZGUpLAotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X25ldyksCi0JICAoZ3N0X2NvbnRyb2xsZXJfZmluZF9jb250cm9sbGVkX3Byb3BlcnR5KToKLQkgIHJ1biB0aGUgd2luZ28tbWFnaWMgc2NyaXB0IGFnYWluc3QgdGhlIGRvY3MKLQotMjAwNS0wOS0wMiAxODozNjowOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXVlLnNnbWw6Ci0JICByZW1vdmVkIGZpbGUgYWdhaW4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlZCBmaWxlIGFnYWluCi0KLTIwMDUtMDktMDIgMTc6MjM6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbWVyZ2VkIGVsZW1lbnRkZXRhaWxzIGRvY3MgaW50byBlbGVtZW50ZmFjdG9yeSBkb2NzIGlubGluZWQgYm90aAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZGV0YWlscy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnRmYWN0b3J5LnNnbWw6Ci0JICAqIGdzdC9nc3QuYzoKLQkgICogZ3N0L2dzdGJ1cy5jOgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzoKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5Lmg6Ci0JICBtZXJnZWQgZWxlbWVudGRldGFpbHMgZG9jcyBpbnRvIGVsZW1lbnRmYWN0b3J5IGRvY3MKLQkgIGlubGluZWQgYm90aAotCi0yMDA1LTA5LTAyIDE2OjQ0OjU3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50Lmg6IEFkZCBtYWdpY2FsIHBpeGllIGR1c3QgdG8gbWFrZSBnbGliLW1rZW51bXMgY29uc2lkZXIgdGhpcyBlbnVtIGFuIGVudW0gYW5kIG5vdCBhIGZsYWdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA5LTAyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOiBBZGQgbWFnaWNhbCBwaXhpZSBkdXN0IHRvIG1ha2UgZ2xpYi1ta2VudW1zCi0JICBjb25zaWRlciB0aGlzIGVudW0gYW4gZW51bSBhbmQgbm90IGEgZmxhZ3MuCi0KLTIwMDUtMDktMDIgMTY6MTc6MjMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbW9yZSBkb2NzIGlubGluZWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0Z2hvc3RwYWQuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RpdGVyYXRvci5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdG1hY3Jvcy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHJlYWxwYWQuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RyZWdpc3RyeS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5cG9vbC5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHN0cnVjdHVyZS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHN5c3RlbWNsb2NrLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhY2Uuc2dtbDoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6Ci0JICAqIGdzdC9nc3RtYWNyb3MuaDoKLQkgICogZ3N0L2dzdG1lbWNodW5rLmM6Ci0JICAqIGdzdC9nc3RtZW1jaHVuay5oOgotCSAgKiBnc3QvZ3N0cXVldWUuYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5LmM6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeXBvb2wuYzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkgIG1vcmUgZG9jcyBpbmxpbmVkCi0KLTIwMDUtMDktMDIgMTU6NDI6MDAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuaCAoR3N0U3RhdGUpOiBSZW5hbWVkIGZyb20gR3N0RWxlbWVudFN0YXRlLCBjaGFuZ2VkIHRvIGJlIGEgbm9ybWFsIGVudW0gaW5zdGVhZCBvZiBmbGFncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOS0wMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGVsZW1lbnQuaCAoR3N0U3RhdGUpOiBSZW5hbWVkIGZyb20gR3N0RWxlbWVudFN0YXRlLAotCSAgY2hhbmdlZCB0byBiZSBhIG5vcm1hbCBlbnVtIGluc3RlYWQgb2YgZmxhZ3MuCi0JICAoR3N0U3RhdGVDaGFuZ2VSZXR1cm4pOiBSZW5hbWVkIGZyb20gR3N0RWxlbWVudFN0YXRlUmV0dXJuLCBuYW1lcwotCSAgbXVuZ2VkIHRvIGJlIEdTVF9TVEFURV9DSEFOR0VfKi4KLQkgIChHU1RfU1RBVEVfQ0hBTkdFKTogUmVuYW1lZCBmcm9tIEdTVF9TVEFURV9UUkFOU0lUSU9OLCB1cGRhdGVkIHRvCi0JICB3b3JrIHdpdGggdGhlIG5ldyBzdGF0ZSByZXByZXNlbnRhdGlvbi4KLQkgIChHc3RTdGF0ZUNoYW5nZSk6IE5ldyBlbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBzdGF0ZSB0cmFuc2l0aW9ucy4KLQkgIFJlcGxhY2VzIEdTVF9TVEFURV9GT09fVE9fQkFSIHdpdGggR1NUX1NUQVRFX0NIQU5HRV9GT09fVE9fQkFSLgotCSAgKEdzdEVsZW1lbnRDbGFzczo6Y2hhbmdlX3N0YXRlKTogUGFzcyB0aGUgR3N0U3RhdGVDaGFuZ2UgYWxvbmcgYXMKLQkgIGFuIGFyZ3VtZW50LiBIZWxwcyBsYW5ndWFnZSBiaW5kaW5ncywgc28gdGhleSBkb24ndCBoYXZlIHRvIHVzZQotCSAgdHJpY2t5IGxvY2stbmVlZGluZyBtYWNyb3MgbGlrZSBHU1RfU1RBVEVfQ0hBTkdFICgpLgotCSAgKiBzY3JpcHRzL3VwZGF0ZS1zdGF0ZXMgKGZpbGUpOiBOZXcgc2NyaXB0LiBSdW4gaXQgb24gYSBmaWxlIHRvCi0JICB1cGRhdGUgaXQgZm9yIHN0YXRlIG5hbWluZyBhbmQgQVBJIGNoYW5nZXMuIFVwZGF0ZXMgZmlsZXMgaW4KLQkgIHBsYWNlLgotCSAgKiBBbGwgZmlsZXMgdXBkYXRlZCBmb3IgdGhlIG5ldyBBUEkuCi0KLTIwMDUtMDktMDIgMTI6MTE6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIGNsZWFuIHVwIHNwZWMgc29tZSBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNsZWFuIHVwIHNwZWMgc29tZSBtb3JlCi0KLTIwMDUtMDktMDIgMTI6MDg6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvOiBmaXggYSBidW5jaCBvZiB1bmNoZWNrZWQgcmV0dXJuIHZhbHVlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R0cmFjZS5jOiAoZ3N0X3RyYWNlX2ZsdXNoKSwgKGdzdF90cmFjZV90ZXh0X2ZsdXNoKToKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcpLAotCSAgKGdzdF91dGlsX3NldF9vYmplY3RfYXJnKToKLQkgIGZpeCBhIGJ1bmNoIG9mIHVuY2hlY2tlZCByZXR1cm4gdmFsdWVzCi0JICAqIHRvb2xzL2dzdC1jb21wbGV0ZS5jOiAobWFpbik6Ci0JICAqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgY2xlYW4gdXAgYSBsaXR0bGUKLQotMjAwNS0wOS0wMSAxOTowNjozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBkb2NzL2dzdC90bXBsLy5naXRpZ25vcmU6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHRhZ2xpc3Quc2dtbDoKLQkgIHVwZGF0ZWQgLmN2c2lnbm9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGVkIC5jdnNpZ25vcmUKLQotMjAwNS0wOS0wMSAxODoxMjoxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogSGFuZGxlIG5ld3NlZ21lbnRzIG1vcmUgY29ycmVjdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpLAotCSAgKGdzdF9iYXNlX3NpbmtfZXZlbnQpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKLQkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9ldmVudCk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICBIYW5kbGUgbmV3c2VnbWVudHMgbW9yZSBjb3JyZWN0bHkuCi0JICAqIGdzdC9nc3RidXMuYzoKLQkgIEZpeCBkb2NzLgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9uZXdfbmV3c2VnbWVudCk6Ci0JICBBIG5ld3NlZ21lbnQgY2Fubm90IGhhdmUgYSBzdGFydF90aW1lIG9mIC0xCi0KLTIwMDUtMDktMDEgMTY6NTM6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHdpbjMyL2dzdGVudW10eXBlcy4qOiBVcGRhdGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9nc3RlbnVtdHlwZXMuYzoKLQkgICogd2luMzIvZ3N0ZW51bXR5cGVzLmg6Ci0JICBVcGRhdGUKLQotMjAwNS0wOC0zMSAyMTowMTozNSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JKiBkb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sOgotCSAgUmVtb3ZlIGV4dHJhbmVvdXMgJ2NvJyBmcm9tIGN2cyBjb21tYW5kIGluIFBXRywgYXMgcmVwb3J0ZWQgb24gaXJjLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZW1vdmUgZXh0cmFuZW91cyAnY28nIGZyb20gY3ZzIGNvbW1hbmQgaW4gUFdHLCBhcyByZXBvcnRlZCBvbiBpcmMuCi0KLTIwMDUtMDgtMzEgMTg6NDU6NDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOiBmaXhlZCBib29sZWFuIGFnYWluCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOgotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X3NldF9pbnRlcnBvbGF0aW9uX21vZGUpLAotCSAgKGdzdF9jb250cm9sbGVkX3Byb3BlcnR5X25ldyk6Ci0JICBmaXhlZCBib29sZWFuIGFnYWluCi0KLTIwMDUtMDgtMzEgMTU6Mjc6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6IGFkZCAtZ29vZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIGFkZCAtZ29vZAotCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICByZW1vdmUgd3JvbmcgZG9jcwotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIGFkZCBnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkCi0KLTIwMDUtMDgtMzEgMTQ6MDg6NDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgaW5saW5lZCBtb3JlIGRvY3MsIGZpeGVkIGRvdWJsZSBpZC1yZWYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXJyb3Iuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RmaWx0ZXIuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3R1cmloYW5kbGVyLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dXJpdHlwZS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0eG1sLnNnbWw6Ci0JICAqIGdzdC9nc3RlcnJvci5jOgotCSAgKiBnc3QvZ3N0ZXJyb3IuaDoKLQkgICogZ3N0L2dzdGZpbHRlci5jOgotCSAgKiBnc3QvZ3N0dXJpLmM6Ci0JICAqIGdzdC9nc3R1cml0eXBlLmM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgKiBnc3QvZ3N0eG1sLmM6Ci0JICBpbmxpbmVkIG1vcmUgZG9jcywgZml4ZWQgZG91YmxlIGlkLXJlZgotCi0yMDA1LTA4LTMxIDEzOjUzOjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IFBhc3N0aHJvdWdoIGVsZW1lbnRzIGRvbid0IG5lZWQgdGhlIGNhcHMgYXMgdGhleSBkb24ndCBjYXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlcik6Ci0JICBQYXNzdGhyb3VnaCBlbGVtZW50cyBkb24ndCBuZWVkIHRoZSBjYXBzIGFzIHRoZXkgZG9uJ3QgY2FyZS4KLQotMjAwNS0wOC0zMSAxMzo1MDo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBEb24ndCBsZWFrIHJlZmNvdW50cyBvbiBidWZmZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciksIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pOgotCSAgRG9uJ3QgbGVhayByZWZjb3VudHMgb24gYnVmZmVycy4KLQotMjAwNS0wOC0zMSAxMzo0MToxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIG5vdCBuZWdvdGlhdGVkIG1vcmUgZ3JhY2VmdWxseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fY29uZmlndXJlX2NhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgbm90IG5lZ290aWF0ZWQgbW9yZSBncmFjZWZ1bGx5LgotCi0yMDA1LTA4LTMxIDEyOjU1OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiBTZXQgUkVBRE9OTFkgZmxhZyBvbiBtbWFwJ2VkIGJ1ZmZlcnMsIG90aGVyd2lzZSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB3b24ndCB3b3JrIHByb3AuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X21tYXBfYnVmZmVyX2luaXQpLAotCSAgKGdzdF9maWxlX3NyY19tYXBfcmVnaW9uKToKLQkgIFNldCBSRUFET05MWSBmbGFnIG9uIG1tYXAnZWQgYnVmZmVycywgb3RoZXJ3aXNlCi0JICBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB3b24ndCB3b3JrIHByb3Blcmx5ICgjMzE0NzA4KS4KLQotMjAwNS0wOC0zMSAxMDowNzoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBwYXNzdGhyb3VnaCBlbGVtZW50cyBjYW4gZXZlbiBkbyBpbnBsYWNlIG9uIG5vbiB3cml0YWJsZSBidWZmZXJzIChhcyB0aGV5IGRvbid0IHRvdWNoIHRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgotCSAgcGFzc3Rocm91Z2ggZWxlbWVudHMgY2FuIGV2ZW4gZG8gaW5wbGFjZSBvbiBub24gd3JpdGFibGUKLQkgIGJ1ZmZlcnMgKGFzIHRoZXkgZG9uJ3QgdG91Y2ggdGhlbSkuCi0KLTIwMDUtMDgtMzEgMTA6MDA6MDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOiBtb3JlIHRlc3RzIChoZWhlIEkgaGF2ZSB0aGUgbW9zdCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6IChnc3RfdGVzdF9tb25vX3NvdXJjZV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF90ZXN0X21vbm9fc291cmNlX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3Rlc3RfbW9ub19zb3VyY2VfY2xhc3NfaW5pdCksIChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgotCSAgbW9yZSB0ZXN0cyAoaGVoZSBJIGhhdmUgdGhlIG1vc3QpCi0JICAqIGdzdC9nc3RidXMuYzoKLQkgIGRlc2NyaWJlIHBvcHBpbmcgbWVzc2FnZXMgd2hlbnVzaW5nIG11bGx0aXBsZSBzb3VyY2VzCi0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuYzoKLQkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlKSwKLQkgIChnc3RfY29udHJvbGxlZF9wcm9wZXJ0eV9uZXcpOgotCSAgKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmg6Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWludGVycG9sYXRpb24uYzoKLQkgIGltcGxlbWVudCBib29sZWFuIHByb3BlcnRpZXMKLQotMjAwNS0wOC0zMSAwODo1NzoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYzogQ2Fubm90IGFzc2VydCB0aGF0IHRoZSByZWZjb3VudCBoYXMgdG8gYmUgcG9zaXRpdmUgc2luY2UgYSBkaXNwb3NlZCBvYmplY3QgY2FuIGJlIHJlc3VyZWN0ZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF9taW5pX29iamVjdF9yZWYpOgotCSAgQ2Fubm90IGFzc2VydCB0aGF0IHRoZSByZWZjb3VudCBoYXMgdG8gYmUgcG9zaXRpdmUKLQkgIHNpbmNlIGEgZGlzcG9zZWQgb2JqZWN0IGNhbiBiZSByZXN1cmVjdGVkLgotCi0yMDA1LTA4LTMxIDA4OjM4OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IFJldmVydCBjaGFuZ2UsIG5lZWQgdG8gZmlyc3QgZml4IGJhZGx5IGJlaGF2aW5nIGFwcHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9pbml0KToKLQkgIFJldmVydCBjaGFuZ2UsIG5lZWQgdG8gZmlyc3QgZml4IGJhZGx5IGJlaGF2aW5nCi0JICBhcHBzLgotCi0yMDA1LTA4LTMwIDE5OjQ1OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9lbGVtZW50cy86IEFjdGl2YXRlIHBhZHMgYmVmb3JlIHVzaW5nIHRoZW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jOiAoc2V0dXBfZmFrZXNyYyk6Ci0JICAqIGNoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6IChzZXR1cF9pZGVudGl0eSk6Ci0JICBBY3RpdmF0ZSBwYWRzIGJlZm9yZSB1c2luZyB0aGVtLgotCi0yMDA1LTA4LTMwIDE5OjI5OjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RhZGFwdGVyLmM6IEZsdXNoaW5nIG91dCAwIGJ5dGVzIGlzIG9rIGZvciB0aGlzIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGFkYXB0ZXIuYzogKGdzdF9hZGFwdGVyX2ZsdXNoKToKLQkgIEZsdXNoaW5nIG91dCAwIGJ5dGVzIGlzIG9rIGZvciB0aGlzIGZ1bmN0aW9uLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KToKLQkgIG5vIG5ld3NlZ21lbnQgZ2l2ZXMgYSB3YXJuaW5nIGFuZCBzZXRzIHRoZSBzdGFydC9zdG9wIHRvCi0JICBpbnZhbGlkLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoKToKLQkgIFNvbWUgZGVidWcgaW5mby4KLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF9taW5pX29iamVjdF9yZWYpOgotCSAgQ2hlY2sgcmVmY291bnQgaGVyZSB0b28uCi0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfaW5pdCk6Ci0JICBQYWRzIGFyZSBpbml0aWFsbHkgZmx1c2hpbmcgYW5kIHJlZnVzaW5nIGRhdGEuCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkKToKLQkgIFdoZW4gYWRkaW5nIGEgY2Fwc2ZpbHRlciBlbGVtZW50IG1ha2Ugc3VyZSBpdCBoYXMgdGhlCi0JICBzYW1lIHN0YXRlIGFzIHRoZSBwYXJlbnQgYmluLgotCi0yMDA1LTA4LTMwIDE3OjIzOjE5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIG1vcmUgZG9jcyBhbmQgdHdvIG1vcmUgaW5saW5lZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKLQkgICogZG9jcy9nc3QvdG1wbC9nc3Rmb3JtYXQuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3R2ZXJzaW9uLnNnbWw6Ci0JICAqIGdzdC9nc3RidXMuaDoKLQkgICogZ3N0L2dzdGZvcm1hdC5jOgotCSAgKiBnc3QvZ3N0Zm9ybWF0Lmg6Ci0JICAqIGdzdC9nc3R2ZXJzaW9uLmguaW46Ci0JICBtb3JlIGRvY3MgYW5kIHR3byBtb3JlIGlubGluZWQKLQotMjAwNS0wOC0zMCAxNzoxMjozMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IERvbid0IHN5bmMgdG8gY2xvY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6IChnc3RfZmlsZV9zaW5rX2NsYXNzX2luaXQpOgotCSAgRG9uJ3Qgc3luYyB0byBjbG9jay4KLQotMjAwNS0wOC0zMCAwODoxNzo0OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiB1bHRyYWwzM3QgZnVuYzEwbnMgZGVzZXJ2ZSB0byBhcHBlYXIgaW4gdGhlIGRvY3MgYWN0dWFseQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICB1bHRyYWwzM3QgZnVuYzEwbnMgZGVzZXJ2ZSB0byBhcHBlYXIgaW4gdGhlIGRvY3MgYWN0dWFseQotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0Y29tcGF0LnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0Y29uZmlnLnNnbWw6Ci0JICAqIGdzdC9jaGVjay9nc3RjaGVjay5jOgotCSAgKiBnc3QvZ3N0Y29tcGF0Lmg6Ci0JICAqIGdzdC9nc3Rjb25maWcuaC5pbjoKLQkgIGlubGluZWQgbW9yZSBkb2NzCi0KLTIwMDUtMDgtMjkgMjE6NDE6MDIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgaW5saW5lZCBhbmQgZXh0ZW5kZWQgZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RxdWVyeS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIGlubGluZWQgYW5kIGV4dGVuZGVkIGRvY3MKLQotMjAwNS0wOC0yOSAxOTo1OTo1MiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6IG1vcmUgdGVzdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgotCSAgbW9yZSB0ZXN0cwotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvbGlicy90bXBsL2dzdGRhdGFwcm90b2NvbC5zZ21sOgotCSAgaW5jbHVkZSBwYXRoIGZpeGVzCi0JICAqIGV4YW1wbGVzL2NvbnRyb2xsZXIvYXVkaW8tZXhhbXBsZS5jOiAobWFpbik6Ci0JICBjb250cm9sbGVyIGV4YW1wbGUgd29ya3Mgbm93Ci0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgZG9jIGZpeGVzCi0JICAqIHRvb2xzL2dzdC1pbnNwZWN0LmM6IChwcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyk6Ci0JICBzaG93IHBhcmFtIHNwZWMgZmxhZ3MKLQotMjAwNS0wOC0yOSAxNjoxMDozNiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0dXRpbHMuYyAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKTogTmV3IDM3MzN0IGZ1bmN0MTBuLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA4LTI5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0dXRpbHMuYyAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKTogTmV3IDM3MzN0IGZ1bmN0MTBuLgotCi0yMDA1LTA4LTI5IDA5OjUyOjQ0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIGRvY3MvZmFxL2N2cy54bWw6Ci0JICBNaW5vciB1cGRhdGVzIHRvIGRldmVsb3BlciBjdnMgaW5zdHJ1Y3Rpb25zLCB0byBtb3JlIGNsb3NlbHkgbWF0Y2ggd2hhdCB0aGUgZnJlZWRlc2t0b3AgcGVvcGxlIHdhbnQuIEFsc28sIHRlc3QgbXkgY3YuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgTWlub3IgdXBkYXRlcyB0byBkZXZlbG9wZXIgY3ZzIGluc3RydWN0aW9ucywgdG8gbW9yZSBjbG9zZWx5IG1hdGNoIHdoYXQKLQkgIHRoZSBmcmVlZGVza3RvcCBwZW9wbGUgd2FudC4gQWxzbywgdGVzdCBteSBjdnMgY29tbWl0IGFjY2Vzcy4uLgotCi0yMDA1LTA4LTI4IDE3OjQ1OjU4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5oIChHU1RfQk9JTEVSUExBVEVfRlVMTCk6IFByb3RvdHlwZSBpbnN0YW5jZV9pbml0IGFzIGhhdmluZyB0d28gYXJndW1lbnRzIGluc3RlYWQgb2YganVzdCBvbmUuIEFsbG93cyBzdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA4LTI4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0dXRpbHMuaCAoR1NUX0JPSUxFUlBMQVRFX0ZVTEwpOiBQcm90b3R5cGUgaW5zdGFuY2VfaW5pdAotCSAgYXMgaGF2aW5nIHR3byBhcmd1bWVudHMgaW5zdGVhZCBvZiBqdXN0IG9uZS4gQWxsb3dzIHN1cGVyY2xhc3NlcwotCSAgdG8gYWNjZXNzIGluZm9ybWF0aW9uIG9uIHN1YmNsYXNzZXMgLS0gc2VlIHRoZSB0ZXJyaWJsZSBmb3IoKSBsb29wCi0JICBpbiBndHlwZS5jOmdfdHlwZV9jcmVhdGVfaW5zdGFuY2UgZm9yIHRoZSByZWFzb24gd2h5LiBBbGwgY2FsbGVycwotCSAgY2hhbmdlZC4KLQotMjAwNS0wOC0yNyAxMDo1NzowMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDogdXBkYXRlIGluZm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW1lc3NhZ2VzLnR4dDoKLQkgIHVwZGF0ZSBpbmZvCi0JICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RjYXBzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0Y2xvY2suc2dtbDoKLQkgICogZ3N0L2dzdGJ1cy5jOgotCSAgKiBnc3QvZ3N0Y2Fwcy5jOgotCSAgKiBnc3QvZ3N0Y2Fwcy5oOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzoKLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBhZGRlZCBkZXNjcmlwdGlvbnMgZm9yIGJ1cyBhbmQgbWVzc2FnZQotCSAgaW5saW5lIGNhcHMgYW5kIGNsb2NrIGRvY3MKLQotMjAwNS0wOC0yNiAyMjozMjo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ3N0bWVzc2FnZS4qOiBkb2MgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oOgotCSAgZG9jIGZpeGVzCi0KLTIwMDUtMDgtMjYgMjE6MjM6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBmaXggZGl2LWJ5LXplcm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX3NpemUpOgotCSAgZml4IGRpdi1ieS16ZXJvCi0KLTIwMDUtMDgtMjYgMTQ6MjE6NDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYyAocnVuX3BpcGVsaW5lKTogQ2hlY2sgZWxlbWVudF9zZXRfc3RhdGUncyByZXR1cm4gdmFsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA4LTI2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jIChydW5fcGlwZWxpbmUpOiBDaGVjawotCSAgZWxlbWVudF9zZXRfc3RhdGUncyByZXR1cm4gdmFsLgotCSAgKHRlc3RfMl9lbGVtZW50cyk6IEFkZCB0ZXN0IHRoYXQncyBiZWVuIGRpc2FibGVkIGZvciBtb250aHMuCi0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOiBDbGVhbnVwcy4gQWRkIGNhbi1hY3RpdmF0ZS1wdXNoIGFuZAotCSAgY2FuLWFjdGl2YXRlLXB1bGwgcHJvcGVydGllcy4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzogQ2xlYW51cHMuIEFkZCBjYW4tYWN0aXZhdGUtcHVzaCBhbmQKLQkgIGNhbi1hY3RpdmF0ZS1wdWxsIHByb3BlcnRpZXMuIEltcGxlbWVudCBpc19zZWVrYWJsZSBzbyBmYWtlc3JjIGNhbgotCSAgb3BlcmF0ZSBpbiBwdWxsIG1vZGUuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKEdzdEJhc2VTaW5rKTogUmVtb3ZlIGhhcy1sb29wLCBoYXMtY2hhaW4KLQkgIHByb3BlcnRpZXMuCi0JICAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZSwgZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdWxsKQotCSAgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVzaCk6IE1ha2UgYWN0aXZhdGlvbiBtb2RlIGNob29zaW5nIHdvcmsuCi0JICBDbGVhbnVwcy4KLQkgIChnc3RfYmFzZV9zaW5rX2NoYWluLCBnc3RfYmFzZV9zaW5rX2xvb3ApOiBBc3NlcnQgYWN0aXZhdGlvbiBtb2RlCi0JICBpcyByaWdodC4gTWFrZSBwdWxsIG1vZGUgd29yay4gUG9zdCBhbiBlb3MgYmVmb3JlIHBhdXNpbmcgaW4gcHVsbAotCSAgbW9kZS4KLQkgIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6IFBheSBhdHRlbnRpb24gdG8gdGhlIGNvcmUncwotCSAgY2hhbmdlX3N0YXRlKCkgcmV0dXJuIHZhbC4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChHc3RCYXNlU3JjKTogUmVtb3ZlIGhhcy1sb29wLAotCSAgaGFzLWdldHJhbmdlIHByb3BlcnRpZXMuIENsZWFudXBzLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmggKEdzdEJhc2VTcmMpOiBSZW1vdmUgaGFzX2xvb3AsCi0JICBoYXNfZ2V0cmFuZ2UgYW5kIHJlcGxhY2Ugd2l0aCBjYW5fYWN0aXZhdGVfcHVsbCBhbmQKLQkgIGNhbl9hY3RpdmF0ZV9wdXNoLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oIChHc3RCYXNlU2luayk6IFJlYXJyYW5nZSBmaWVsZHMsIGFkZAotCSAgbG9ja2luZyBjb21tZW50cy4gUmVtb3ZlIGhhc19sb29wLCBoYXNfY2hhaW4gYW5kIHJlcGxhY2Ugd2l0aAotCSAgY2FuX2FjdGl2YXRlX3B1bGwgYW5kIGNhbl9hY3RpdmF0ZV9wdXNoLgotCi0yMDA1LTA4LTI2IDEzOjI4OjAxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgQWRkIG1ldGFkYXRhIHJlYWRpbmcgZXhhbXBsZSB0aGF0IGxvb3BzIG92ZXIgYSBsaXN0IG9mIGZpbGVuYW1lcywgZHVtcGluZyBhbnkgdGFncyBmb3VuZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGV4YW1wbGVzL01ha2VmaWxlLmFtOgotCSAgKiBleGFtcGxlcy9tZXRhZGF0YS9NYWtlZmlsZS5hbToKLQkgICogZXhhbXBsZXMvbWV0YWRhdGEvcmVhZC1tZXRhZGF0YS5jOiAobWVzc2FnZV9sb29wKSwKLQkgIChoYXZlX3BhZF9oYW5kbGVyKSwgKG1ha2VfcGlwZWxpbmUpLCAocHJpbnRfdGFnKSwgKG1haW4pOgotCSAgQWRkIG1ldGFkYXRhIHJlYWRpbmcgZXhhbXBsZSB0aGF0IGxvb3BzIG92ZXIgYSBsaXN0IG9mIGZpbGVuYW1lcywKLQkgIGR1bXBpbmcgYW55IHRhZ3MgZm91bmQuCi0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfZGlzcG9zZSk6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9kaXNwb3NlKToKLQkgIFJlbGVhc2UgYSBmZXcgcG90ZW50aWFsbHktaGVsZCByZWZlcmVuY2VzIGluIGRpc3Bvc2UuCi0KLTIwMDUtMDgtMjYgMTM6MjE6NDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9nc3QvdG1wbC9nc3RtaW5pb2JqZWN0LnNnbWw6IGRvICpub3QqIGFkZCB0bXBsLyouc2dtbCBmaWxlcyB0byBDVlMhCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RtaW5pb2JqZWN0LnNnbWw6Ci0JICBkbyAqbm90KiBhZGQgdG1wbC8qLnNnbWwgZmlsZXMgdG8gQ1ZTIQotCi0yMDA1LTA4LTI2IDEzOjE3OjU0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGxpYnMvZ3N0L2J5dGVzdHJlYW0vOiByZW1vdmluZyBvYnNvbGV0ZSBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vLmN2c2lnbm9yZToKLQkgICogbGlicy9nc3QvYnl0ZXN0cmVhbS9NYWtlZmlsZS5hbToKLQkgICogbGlicy9nc3QvYnl0ZXN0cmVhbS9hZGFwdGVyLmM6Ci0JICAqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vYWRhcHRlci5oOgotCSAgKiBsaWJzL2dzdC9ieXRlc3RyZWFtL2J5dGVzdHJlYW0uYzoKLQkgICogbGlicy9nc3QvYnl0ZXN0cmVhbS9ieXRlc3RyZWFtLmg6Ci0JICAqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vZmlsZXBhZC5jOgotCSAgKiBsaWJzL2dzdC9ieXRlc3RyZWFtL2ZpbGVwYWQuaDoKLQkgIHJlbW92aW5nIG9ic29sZXRlIGZpbGVzCi0KLTIwMDUtMDgtMjYgMTI6NDg6MjkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy86IGRpc2FiZWQgYWRkaXRpb25hbCBpbmRleCBlbnRyaWVzIGFnYWluLCBhcyB0aGlzIG1ha2VzIGRvY3MtZ2VuIGp1c3Qgc2xvdyBhbmQgdGhleSBhcmVuJ3QgdXNlZnVsIHlldAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JICBkaXNhYmVkIGFkZGl0aW9uYWwgaW5kZXggZW50cmllcyBhZ2FpbiwgYXMgdGhpcyBtYWtlcyBkb2NzLWdlbiBqdXN0Ci0JICBzbG93IGFuZCB0aGV5IGFyZW4ndCB1c2VmdWwgeWV0Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JICBsaXR0bGUgLXNlY3Rpb24udHh0IGNsZWFudXAgZm9yIGxpYnMKLQotMjAwNS0wOC0yNiAxMTo1NjoxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9iYXNlLzogZml4IHVwIHNvbWUgZGVidWdnaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fc2l6ZSksCi0JICBmaXggdXAgc29tZSBkZWJ1Z2dpbmcKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3VuaXRfc2l6ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksIChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgaGFuZGxlIGFuZCBzdG9yZSB0aW1lZCBORVdTRUdNRU5UIGV2ZW50cyBzbyB0aGF0IHN1YmNsYXNzZXMgdGhhdAotCSAgY2FsY3VsYXRlIHRpbWUgYnkgY291bnRpbmcgc2FtcGxlcyBoYXZlIGEgc2VnbWVudF9zdGFydCB0aW1lIHRoZXkKLQkgIG5lZWQgdG8gYWRkIHRvIHRoZWlyIHRpbWVzdGFtcHMgLSBzZWUgYXVkaW9yZXNhbXBsZQotCi0yMDA1LTA4LTI2IDExOjE5OjIyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JICB3aGl0ZXNwYWNlLCBkb2MgYW5kIGRlYnVnIGZpeGluZy9hZGRpdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgd2hpdGVzcGFjZSwgZG9jIGFuZCBkZWJ1ZyBmaXhpbmcvYWRkaXRpb25zCi0KLTIwMDUtMDgtMjUgMjM6MTc6MTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dzdGJpbi5oOiByZW1vdmVkICc7JyBmcm9tIHRoZSBlbmQgb2YgbWFjcm8gZGVmcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uaDoKLQkgIHJlbW92ZWQgJzsnIGZyb20gdGhlIGVuZCBvZiBtYWNybyBkZWZzCi0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvLmN2c2lnbm9yZToKLQkgICogZ3N0L2dzdGJ1cy5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKSwgKGFjdGl2YXRlX3BhZHMpLAotCSAgKGdzdF9lbGVtZW50X3NhdmVfdGh5c2VsZik6Ci0JICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X25ld19uZXdzZWdtZW50KToKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3RpdGVyYXRvci5jOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKLQkgICogZ3N0L2dzdHBhZC5jOgotCSAgKiBnc3QvZ3N0cHJvYmUuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIGZpeGVkIHBhcmFtZXRlciBuYW1lIG1pc21hdGNoZXMgYmV0d2VlbiBzb3VyY2UsIGhlYWRlciBhbmQgZG9jcwotCSAgYWRkZWQgc29tZSBtb3JlIGRvY3MsIHJlc29sdmVkIHRoZSBsYXN0IGJhdGNoIG9mIHVudXNlZCBlbGVtZW50cyBpbgotCSAgZG9jcyAobm93IHNvbWVvbmUgbmVlZHMgdG8gZG9jIHRoZW0pCi0KLTIwMDUtMDgtMjUgMjA6NTI6MDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOgotCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuYzoKLQkgIHJlc3BlY3Qgb3JkZXIgb2YgcGx1Z2luIGRpcnMgd2hlbiBsb2FkaW5nIHBsbHVnaW5zIGFuZCByZWJ1aWxkaW5nIHJlZ2lzdHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlc3BlY3Qgb3JkZXIgb2YgcGx1Z2luIGRpcnMgd2hlbiBsb2FkaW5nIHBsbHVnaW5zIGFuZCByZWJ1aWxkaW5nIHJlZ2lzdHJ5Ci0KLTIwMDUtMDgtMjUgMTk6MzY6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uKjogQ2FjaGUgY2FwcyB1bml0X3NpemUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fc2l6ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3VuaXRfc2l6ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIENhY2hlIGNhcHMgdW5pdF9zaXplLgotCSAgTWFrZSBzdXJlIHdlIGNhbm5vdCBuZWdvdGlhdGUgdXAgYW5kIGRvd25zdHJlYW0gYXQgdGhlCi0JICBzYW1lIHRpbWUuCi0KLTIwMDUtMDgtMjUgMTg6NTU6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOgotCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0eG1scmVnaXN0cnkuYzoKLQkgIG1ha2UgcmVnaXN0cnkgcmVzcGVjdCBvcmRlciBvZiBHU1RfUExVR0lOX1BBVEg7IG1ha2UgdGhlIGluc3RhbGxlZCBsb2NhdGlvbiBnbyBsYXN0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1ha2UgcmVnaXN0cnkgcmVzcGVjdCBvcmRlciBvZiBHU1RfUExVR0lOX1BBVEg7IG1ha2UgdGhlIGluc3RhbGxlZCBsb2NhdGlvbiBnbyBsYXN0Ci0KLTIwMDUtMDgtMjUgMTg6NTQ6MDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIGFkZCBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBkb2NzCi0KLTIwMDUtMDgtMjUgMTY6Mjc6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGdzdC9jaGVjay9nc3RjaGVjay5oOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYzoKLQkqIGxpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICBhZGQgYSB1aW50NjQgY2hlY2tpbmcgbWV0aG9kCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBhIHVpbnQ2NCBjaGVja2luZyBtZXRob2QKLQotMjAwNS0wOC0yNSAxMzo1MjoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jOiBCZSBhIGJpdCBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0aGUgcG9zdGVkIG1lc3NhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoYmluX2J1c19oYW5kbGVyKToKLQkgIEJlIGEgYml0IG1vcmUgY29uc2VydmF0aXZlIGFib3V0IHRoZSBwb3N0ZWQgbWVzc2FnZS4KLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KToKLQkgIFNvbWUgY2xlYW51cHMsIHdhcm4gd3JvbmcgcmV0dXJuIHZhbHVlcy4KLQotMjAwNS0wOC0yNSAxMDo1MToxNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIFJldmVydCB1bnBvcHVsYXIgY2hhbmdlIGZvciBHU1RfTUVTU0FHRV9TUkMgdG8gR09iamVjdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9idXNfaGFuZGxlcik6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9maW5hbGl6ZSksIChfZ3N0X21lc3NhZ2VfY29weSksCi0JICAoZ3N0X21lc3NhZ2VfbmV3KSwgKGdzdF9tZXNzYWdlX25ld19lb3MpLCAoZ3N0X21lc3NhZ2VfbmV3X2Vycm9yKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfd2FybmluZyksIChnc3RfbWVzc2FnZV9uZXdfdGFnKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSksIChnc3RfbWVzc2FnZV9uZXdfY3VzdG9tKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6Ci0JICAqIHRvb2xzL2dzdC1tZDVzdW0uYzogKGV2ZW50X2xvb3ApOgotCSAgUmV2ZXJ0IHVucG9wdWxhciBjaGFuZ2UgZm9yIEdTVF9NRVNTQUdFX1NSQyB0byBHT2JqZWN0LgotCi0yMDA1LTA4LTI1IDEwOjM1OjQ2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdGJ1ZmZlci5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBmaXggZG9jcyBieSBmaXhpbmcgZW51bSB0eXBlZGVmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBkb2NzIGJ5IGZpeGluZyBlbnVtIHR5cGVkZWYKLQotMjAwNS0wOC0yNSAxMDoxNjoyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB3aW0gZml4ZWQgdGhlIHRhc2ssIHlheQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3aW0gZml4ZWQgdGhlIHRhc2ssIHlheQotCi0yMDA1LTA4LTI1IDEwOjAxOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nZW5lcmljL3N0YXRlcy5jOiBDbGVhbnVwIGNhbiBiZSBkb25lIGF0IHRoZSBlbmQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIENsZWFudXAgY2FuIGJlIGRvbmUgYXQgdGhlIGVuZC4KLQkgICogZ3N0L2dzdHRhc2suYzogKGdzdF90YXNrX2dldF90eXBlKSwgKGdzdF90YXNrX2ZpbmFsaXplKSwKLQkgIChnc3RfdGFza19mdW5jKSwgKGdzdF90YXNrX2NsZWFudXBfYWxsKSwgKGdzdF90YXNrX3NldF9sb2NrKSwKLQkgIChnc3RfdGFza19nZXRfc3RhdGUpLCAoZ3N0X3Rhc2tfc3RhcnQpLCAoZ3N0X3Rhc2tfcGF1c2UpOgotCSAgT2ggYm95Li4gVGhhbmtzIGZvciBmaW5kaW5nIHRoaXMsIFRob21hcy4KLQotMjAwNS0wOC0yNCAyMjowMTo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6Ci0JICBncm1wZiwgYW5vdGhlciB0cnkgdG8gZml4IGl0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGdybXBmLCBhbm90aGVyIHRyeSB0byBmaXggaXQKLQotMjAwNS0wOC0yNCAyMTo1NzowNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6Ci0JICBhbm90aGVyIGZpeAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhbm90aGVyIGZpeAotCi0yMDA1LTA4LTI0IDIxOjQ1OjEzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczogYWRkZWQgbWlzc2luZyB0eXBlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkgIGFkZGVkIG1pc3NpbmcgdHlwZXMKLQotMjAwNS0wOC0yNCAyMTozNTo0MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBhZGRlZCBtaWlzc2luZyBjbGFzc2VzIGFuZCBzeW1ib2xzICgxMjMgbW9yZSB0byBnbykgcmVtb3ZlZCByZW1vdmVkIHN5bWJvbHMgZnJvbSBzZWN0aW9uIGZpbGUgZml4ZWQgbWFueSBkb2MtY29tbWVudHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGdzdC9nc3RiaW4uYzoKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICAqIGdzdC9nc3R1dGlscy5jOgotCSAgKiBnc3QvcmVnaXN0cmllcy9nc3R4bWxyZWdpc3RyeS5oOgotCSAgYWRkZWQgbWlpc3NpbmcgY2xhc3NlcyBhbmQgc3ltYm9scyAoMTIzIG1vcmUgdG8gZ28pCi0JICByZW1vdmVkIHJlbW92ZWQgc3ltYm9scyBmcm9tIHNlY3Rpb24gZmlsZQotCSAgZml4ZWQgbWFueSBkb2MtY29tbWVudHMKLQotMjAwNS0wOC0yNCAyMDo0OTo1MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYzogTWFrZSBzdXJlIGFsbCB0YXNrcyBhcmUgc3RvcHBlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nZW5lcmljL3N0YXRlcy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgTWFrZSBzdXJlIGFsbCB0YXNrcyBhcmUgc3RvcHBlZC4KLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVW5yZWYgYWZ0ZXIgdXNhZ2UgZm9yIHByb3BlciB2YWxncmluZGluZy4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9maW5hbGl6ZSksIChnc3RfcGFkX3N0b3BfdGFzayk6Ci0JICBSZWFsbHkgd2FpdCBmb3IgdGhlIHRhc2sgdG8gc3RvcCBiZWZvcmUgZGVzdHJveWluZyB0aGUKLQkgIG11dGV4LgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9zaW5rX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCk6Ci0JICBTbWFsbCBjbGVhbnVwcy4gRG9uJ3Qgc3RvcCB0aGUgdGFzayB3aGVuIHdlIGRpZCBub3Qgc3RhcnQKLQkgIGl0LgotCSAgKiBnc3QvZ3N0dGFzay5jOiAoZ3N0X3Rhc2tfZ2V0X3R5cGUpLCAoZ3N0X3Rhc2tfaW5pdCksCi0JICAoZ3N0X3Rhc2tfZnVuYyksIChnc3RfdGFza19jbGVhbnVwX2FsbCksIChnc3RfdGFza19zZXRfbG9jayksCi0JICAoZ3N0X3Rhc2tfZ2V0X3N0YXRlKSwgKGdzdF90YXNrX3N0YXJ0KSwgKGdzdF90YXNrX3BhdXNlKSwKLQkgIChnc3RfdGFza19qb2luKToKLQkgICogZ3N0L2dzdHRhc2suaDoKLQkgIFByb3RlY3QgdGhlIHN0cmVhbSBsb2NrIHdpdGggdGhlIG9iamVjdCBsb2NrLgotCSAgRGlzYWxsb3cgc2V0dGluZyB0aGUgc3RyZWFtIGxvY2sgd2hlbiBydW5uaW5nLgotCSAgQWRkIGNsZWFudXBfYWxsIHRvIHdhaXQgZm9yIHRoZSB0aHJlYWRwb29sIHRvIGZpbmlzaC4KLQkgIFJlbW92ZSBjb2RlIHRvIGF1dG9hbGxvY2F0ZSBhIG11dGV4IGlmIG5vbmUgd2FzIHByb3ZpZGVkLgotCSAgQWRkIF9qb2luKCkgdG8gd2FpdCBmb3IgYSB0YXNrIHRvIHN0b3AuCi0JICBQcm90ZWN0IHRoZSB0aHJlYWQgcG9vbCB3aXRoIGEgZ2xvYmFsIGxvY2suCi0KLTIwMDUtMDgtMjQgMTc6NTc6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLio6IEhhbmRsZSBuZXdzZWdtZW50IGV2ZW50cyBjb3JyZWN0bHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19nZXRfdGltZXMpLCAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKSwKLQkgIChnc3RfYmFzZV9zaW5rX2hhbmRsZV9idWZmZXIpLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgSGFuZGxlIG5ld3NlZ21lbnQgZXZlbnRzIGNvcnJlY3RseS4KLQkgIERyb3AgYnVmZmVycyBvdXQgb2YgdGhlIHNlZ21lbnQgcmFuZ2UuCi0KLTIwMDUtMDgtMjQgMTc6MjQ6MjEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgZGlzYWJsZSB0ZXN0IHdoaWxlIHdpbSBpcyBmaXhpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZGlzYWJsZSB0ZXN0IHdoaWxlIHdpbSBpcyBmaXhpbmcKLQotMjAwNS0wOC0yNCAxNjo0NjoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLnBjLmluOgotCSAgYWRkIHBsdWdpbnNkaXIgdG8gcGtnY29uZmlnIGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBwbHVnaW5zZGlyIHRvIHBrZ2NvbmZpZyBmaWxlcwotCi0yMDA1LTA4LTI0IDE2OjQxOjQ1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIGNoYW5nZWxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjaGFuZ2Vsb2cKLQotMjAwNS0wOC0yNCAxNjowOTo1MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrLzogYWRkIGEgdGVzdCB0aGF0IGRvZXMgYSBidW5jaCBvZiBzdGF0ZSBjaGFuZ2VzIG9uIGVsZW1lbnRzIG5lZWRzIHNvbWUgZml4aW5nIGZvciB2YWxncmluZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgKiBjaGVjay9nZW5lcmljL3N0YXRlcy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoc3RhdGVzX3N1aXRlKSwgKG1haW4pOgotCSAgYWRkIGEgdGVzdCB0aGF0IGRvZXMgYSBidW5jaCBvZiBzdGF0ZSBjaGFuZ2VzIG9uIGVsZW1lbnRzCi0JICBuZWVkcyBzb21lIGZpeGluZyBmb3IgdmFsZ3JpbmQKLQkgICogY2hlY2svc3RhdGVzL3NpbmtzLmM6IChnc3Rfb2JqZWN0X3N1aXRlKToKLQkgIHdoaXRlc3BhY2UKLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgIGFkZCBwcm90b3R5cGUgZm9yIGdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkCi0JICAqIGdzdC9nc3RwbHVnaW4uYzoKLQkgICogZ3N0L2dzdHJlZ2lzdHJ5cG9vbC5jOgotCSAgZG9jIGZpeGVzCi0KLTIwMDUtMDgtMjQgMTU6NDk6MDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHF1ZXJ5LmMgKGdzdF9xdWVyeV9uZXdfY29udmVydCk6IFNwZXcgaWYgd2UgdHJ5IHRvIGNvbnZlcnQgYSBuZWdhdGl2ZSB2YWx1ZS4gRG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UuIE1vc3RseSB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDgtMjQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RxdWVyeS5jIChnc3RfcXVlcnlfbmV3X2NvbnZlcnQpOiBTcGV3IGlmIHdlIHRyeSB0bwotCSAgY29udmVydCBhIG5lZ2F0aXZlIHZhbHVlLiBEb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4gTW9zdGx5IHRoaXMgaXMKLQkgIGhlcmUgdG8gZm9yY2UgY2FsbGVycyB0byBlbnN1cmUgLTEgbWFwcyB0byAtMS4KLQotMjAwNS0wOC0yNCAxNToxMDo0MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDogV2VsbCBkb25lIHRvIE1pY2hhZWwgZm9yIGNhdGNoaW5nIG15IGRlbGliZXJhdGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgc3BlbGxpbmcgbWlzdGFrZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6Ci0JICBXZWxsIGRvbmUgdG8gTWljaGFlbCBmb3IgY2F0Y2hpbmcgbXkgZGVsaWJlcmF0ZSBpbnRyb2R1Y3Rpb24KLQkgIG9mIHRoaXMgc3BlbGxpbmcgbWlzdGFrZS4KLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChiaW5fYnVzX2hhbmRsZXIpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgQWRkIEdTVF9FTEVNRU5UX1VOUEFSRU5USU5HIHRvIHByZXZlbnQgcmFjZXMgc28gdGhhdCB3ZSBjYW4KLQkgIHVubGluayBwYWRzIGJlZm9yZSByZW1vdmluZyB0aGUgZWxlbWVudCBmcm9tIHRoZSBiaW4uCi0KLTIwMDUtMDgtMjQgMTM6NDk6MjEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdC5jIChwYXJzZV9kZWJ1Z19saXN0KTogQWNjZXB0IGUuZy4gR1NUX0RFQlVHPTQgdG8gbWVhbiB0aGUgc2FtZSB0aGluZyBhcyBHU1RfREVCVUc9Kjo0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA4LTI0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0LmMgKHBhcnNlX2RlYnVnX2xpc3QpOiBBY2NlcHQgZS5nLiBHU1RfREVCVUc9NCB0byBtZWFuCi0JICB0aGUgc2FtZSB0aGluZyBhcyBHU1RfREVCVUc9Kjo0LgotCSAgKHBhcnNlX2RlYnVnX2xldmVsLCBwYXJzZV9kZWJ1Z19jYXRlZ29yeSk6IE5ldyBoZWxwZXIgcGFyc2Vycy4KLQotMjAwNS0wOC0yNCAxMzozMzoyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogdXNlIGdib29sZWFuIHJldHVybiB2YWx1ZXMgYW5kIHBvaW50ZXJzIHRvIHNpemUgc28gd2UgY2FuIHVzZSB0aGUgZnVsbCBHU1RfQlVGRkVSX1NJWkUgci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRjYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyksIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3VuaXRfc2l6ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgotCSAgdXNlIGdib29sZWFuIHJldHVybiB2YWx1ZXMgYW5kIHBvaW50ZXJzIHRvIHNpemUgc28gd2UgY2FuIHVzZSB0aGUKLQkgIGZ1bGwgR1NUX0JVRkZFUl9TSVpFIHJhbmdlIChndWludCkgZm9yIGJ1ZmZlciBzaXplcwotCSAgdXNlIEdzdFBhZERpcmVjdGlvbiBmb3IgdHJhbnNmb3JtX2NhcHMKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgcmVuYW1lIGdldF9zaXplIHRvIGdldF91bml0X3NpemUgc2luY2UgdGhhdCdzIHdoYXQgaXQgaXMKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9jYXBzKToKLQkgIHVzZSBHc3RQYWREaXJlY3Rpb24gZm9yIHRyYW5zZm9ybV9jYXBzCi0JICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyk6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgY2xlYW51cCBhbmQgZGVidWdnaW5nCi0KLTIwMDUtMDgtMjQgMTM6MDQ6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRml4ZWQgbG9uZyBzdGFuZGluZyBtZW0tbGVhawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9jbGFzc19pbml0KSwKLQkgIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpLCAoYWN0aXZhdGVfcGFkcyksCi0JICAoZ3N0X2VsZW1lbnRfc2F2ZV90aHlzZWxmKToKLQkgICogdG9vbHMvZ3N0LWNvbXBwcmVwLmM6IChtYWluKToKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKToKLQkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfcHJvcGVydGllcyk6Ci0JICBGaXhlZCBsb25nIHN0YW5kaW5nIG1lbS1sZWFrCi0KLTIwMDUtMDgtMjQgMTE6NTQ6MzcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBDaGFuZ2UgR1NUX01FU1NBR0VfU1JDIHRvIGJlIGEgR09iamVjdCByYXRoZXIgdGhhbiBhIEdzdE9iamVjdCwgc28gdGhhdCBhcHBsaWNhdGlvbnMgY2FuIHNlbnNpYmx5IHBvc3QgY3VzdG9tIG1lc3NhZ2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9idXNfaGFuZGxlcik6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9maW5hbGl6ZSksIChfZ3N0X21lc3NhZ2VfY29weSksCi0JICAoZ3N0X21lc3NhZ2VfbmV3KSwgKGdzdF9tZXNzYWdlX25ld19lb3MpLCAoZ3N0X21lc3NhZ2VfbmV3X2Vycm9yKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfd2FybmluZyksIChnc3RfbWVzc2FnZV9uZXdfdGFnKSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCksIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSksIChnc3RfbWVzc2FnZV9uZXdfY3VzdG9tKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6Ci0JICAqIHRvb2xzL2dzdC1tZDVzdW0uYzogKGV2ZW50X2xvb3ApOgotCSAgQ2hhbmdlIEdTVF9NRVNTQUdFX1NSQyB0byBiZSBhIEdPYmplY3QgcmF0aGVyIHRoYW4gYSBHc3RPYmplY3QsIHNvCi0JICB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gc2Vuc2libHkgcG9zdCBjdXN0b20gbWVzc2FnZXMgd2l0aCByZWZlcmVuY2VzCi0JICB0byB0aGVpciBvd24gb2JqZWN0cy4KLQotMjAwNS0wOC0yNCAxMTo0NDoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBNYW55IGZpeGVzIGFuZCBuZXcgZmVhdHVyZXMgYWRkZWQgYnkgVGhvbWFzLiBDYW4gbm93IGFsc28gZG8gdHJhbnNmb3JtcyB3aXRoIHZhcmlhYmxlIHNpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9zaXplKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY29uZmlndXJlX2NhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfc2l6ZSksIChnc3RfYmFzZV90cmFuc2Zvcm1fYnVmZmVyX2FsbG9jKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlcik6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIE1hbnkgZml4ZXMgYW5kIG5ldyBmZWF0dXJlcyBhZGRlZCBieSBUaG9tYXMuIENhbiBub3cgYWxzbyBkbwotCSAgdHJhbnNmb3JtcyB3aXRoIHZhcmlhYmxlIHNpemVzIGFuZCBhIGN1c3RvbSBmaXhhdGVfY2FwcyBmdW5jdGlvbi4KLQotMjAwNS0wOC0yNCAxMTozNjo0OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfZml4YXRlX2NhcHMpOiBDaGVjayBpZiB0aGUgY2FwcyBpcyBmaXhlZCBhbHJlYWR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA4LTI0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfZml4YXRlX2NhcHMpOiBDaGVjayBpZiB0aGUgY2FwcyBpcyBmaXhlZAotCSAgYWxyZWFkeS4KLQotMjAwNS0wOC0yNCAxMToyMjozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1ZmZlci5jOiBTb21lIGRlYnVnZ2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MpOgotCSAgU29tZSBkZWJ1Z2dpbmcuCi0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgQ2FzdCB0byBDbG9ja1RpbWUgYmVmb3JlIGZvcm1hdHRpbmcgdG8gdGltZS4KLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBDbGVhbnVwcy4KLQotMjAwNS0wOC0yMyAyMTozMjozMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBncmFjZWZ1bGx5IGhhbmRsZSBoZWxwZXIgbWV0aG9kIGNhbGxzIHRvIG9iamVjdHMgdGhhdCBhcmUgbm90IGJlZWluZyBjb250cm9sbGVkLCBhZGRlZCB0ZXN0IGNhc2UgZm9yIHRoYXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2NvbnRyb2xsZXJfc3VpdGUpOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGNhcHMuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RnaG9zdHBhZC5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXJ5LnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dXRpbHMuc2dtbDoKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaGVscGVyLmM6IChnc3Rfb2JqZWN0X3NldF9jb250cm9sbGVyKSwKLQkgIChnc3Rfb2JqZWN0X3NpbmtfdmFsdWVzKSwgKGdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5cyksCi0JICAoZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkpOgotCSAgZ3JhY2VmdWxseSBoYW5kbGUgaGVscGVyIG1ldGhvZCBjYWxscyB0byBvYmplY3RzIHRoYXQgYXJlIG5vdCBiZWVpbmcKLQkgIGNvbnRyb2xsZWQsIGFkZGVkIHRlc3QgY2FzZSBmb3IgdGhhdAotCi0yMDA1LTA4LTIzIDE4OjE3OjAxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZXZlbnQuKjogU29tZSBtb3JlIGRlYnVnZ2luZyBvdXRwdXQgYW5kIGRvYyBjbGVhbnVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKF9nc3RfZXZlbnRfY29weSksIChnc3RfZXZlbnRfbmV3X2N1c3RvbSksCi0JICAoZ3N0X2V2ZW50X25ld19uZXdzZWdtZW50KSwgKGdzdF9ldmVudF9wYXJzZV9uZXdzZWdtZW50KSwKLQkgIChnc3RfZXZlbnRfbmV3X3RhZyksIChnc3RfZXZlbnRfcGFyc2VfdGFnKSwgKGdzdF9ldmVudF9uZXdfcW9zKSwKLQkgIChnc3RfZXZlbnRfcGFyc2VfcW9zKSwgKGdzdF9ldmVudF9uZXdfc2VlayksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX3NlZWspOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIFNvbWUgbW9yZSBkZWJ1Z2dpbmcgb3V0cHV0IGFuZCBkb2MgY2xlYW51cHMuCi0JICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KToKLQkgIEZpeCBwb3NzaWJsZSBkZWFkbG9jay4KLQotMjAwNS0wOC0yMyAxNDoyNTo1NSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBhZGRlZCBhYm91dCAxMDAgc3ltYm9scyBmcm9tIGdzdHJlYW1lci11bnVzZWQudHh0IHRvIHRoZSByaWdodCBzZWN0aW9ucyBmaXhlZCBtb3JlIGJyb2tlbiBjb21tZW50cyBhZGRlZCBHc3RCdXMgdG8gZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkgICogZG9jcy9nc3QvdG1wbC8uY3ZzaWdub3JlOgotCSAgKiBnc3QvZ3N0YmluLmg6Ci0JICAqIGdzdC9nc3RidXMuYzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICBhZGRlZCBhYm91dCAxMDAgc3ltYm9scyBmcm9tIGdzdHJlYW1lci11bnVzZWQudHh0IHRvIHRoZSByaWdodCBzZWN0aW9ucwotCSAgZml4ZWQgbW9yZSBicm9rZW4gY29tbWVudHMKLQkgIGFkZGVkIEdzdEJ1cyB0byBkb2NzCi0KLTIwMDUtMDgtMjMgMTE6NTM6NTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgaW5saW5lZCBtb3JlIGRvYyBjb21tZW50cywgYWRkZWQgbWlzc2luZyBjb21tZW50cyBhbmQgZml4ZWQgY29tbWVudHMgZml4ZWQgdHlwb3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2dzdC90bXBsLy5jdnNpZ25vcmU6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0YmluLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0YnVmZmVyLnNnbWw6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9nZXRfdHlwZSksIChnc3RfYmluX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC4xLmluOgotCSAgaW5saW5lZCBtb3JlIGRvYyBjb21tZW50cywgYWRkZWQgbWlzc2luZyBjb21tZW50cyBhbmQgZml4ZWQgY29tbWVudHMKLQkgIGZpeGVkIHR5cG9zCi0KLTIwMDUtMDgtMjMgMTE6Mzg6MjggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0YnVmZmVyLmM6IHNvbWUgZGVidWdnaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKToKLQkgIHNvbWUgZGVidWdnaW5nCi0JICAqIGdzdC9nc3RjYXBzLmg6Ci0JICB3aGl0ZXNwYWNlIGZpeGVzCi0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWN0aXZhdGVfcHVzaCksIChnc3RfcGFkX2FsbG9jX2J1ZmZlcik6Ci0JICBtb3JlIGRlYnVnZ2luZwotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3RfY2Fwc19zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW4pOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JICBhZGQgYSBmaXhhdGUgZnVuY3Rpb24gZm9yIGJvb2xlYW5zOyBhZGQgYSBGSVhNRSB0aGF0IHRoZXNlIGZ1bmMKLQkgIG5hbWVzIHNob3VsZCBwcm9iYWJseSBiZSBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV8qCi0KLTIwMDUtMDgtMjIgMjE6MDM6MzMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcG9ydGVkIGdzdGNoaWxkcHJveHkgb3ZlciBmcm9tIDAuOCBwb3J0ZWQgZ3N0LWluc3BlY3QgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyBvdmVyIGZyb20gMC44Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2dldF90eXBlKSwKLQkgIChnc3RfYmluX2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCksCi0JICAoZ3N0X2Jpbl9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQpLAotCSAgKGdzdF9iaW5fY2hpbGRfcHJveHlfaW5pdCk6Ci0JICAqIGdzdC9nc3RjaGlsZHByb3h5LmM6IChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUpLAotCSAgKGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXgpLAotCSAgKGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQpLCAoZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCksCi0JICAoZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSksIChnc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdCksCi0JICAoZ3N0X2NoaWxkX3Byb3h5X2dldCksIChnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdCksIChnc3RfY2hpbGRfcHJveHlfc2V0KSwKLQkgIChnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQpLCAoZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWQpLAotCSAgKGdzdF9jaGlsZF9wcm94eV9iYXNlX2luaXQpLCAoZ3N0X2NoaWxkX3Byb3h5X2dldF90eXBlKToKLQkgICogZ3N0L2dzdGNoaWxkcHJveHkuaDoKLQkgICogZ3N0L3BhcnNlL2dyYW1tYXIueToKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X2ludGVyZmFjZXMpLAotCSAgKHByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvKSwgKHByaW50X2VsZW1lbnRfaW5mbyk6Ci0JICBwb3J0ZWQgZ3N0Y2hpbGRwcm94eSBvdmVyIGZyb20gMC44Ci0JICBwb3J0ZWQgZ3N0LWluc3BlY3QgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyBvdmVyIGZyb20gMC44Ci0KLTIwMDUtMDgtMjIgMTk6NDg6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogQWxzbyBjYWxsIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gaWYgd2UgaGF2ZSBBTlkgY2Fwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKLQkgIEFsc28gY2FsbCB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGlmIHdlIGhhdmUgQU5ZIGNhcHMuCi0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3NldF9uZXdfc3RyZWFtX3RpbWUpOgotCSAgRml4IGRlYnVnIGluZm8uCi0KLTIwMDUtMDgtMjIgMTk6MjI6MzQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZXZlbnRfaGFuZGxlcikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZXZlbnRfaGFuZGxlcikKLQkgIERvbid0IHByZXRlbmQgdG8gaGFuZGxlIHNlZWsgZXZlbnRzIGlmIHRoZSBzb3VyY2UgaXMgbm90IHNlZWthYmxlCi0KLTIwMDUtMDgtMjIgMTg6NDg6NDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBSZW1vdmUgZXh0cmEgcGFyYW1ldGVyIHRvIGRlYnVnIG91dHB1dAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgotCSAgUmVtb3ZlIGV4dHJhIHBhcmFtZXRlciB0byBkZWJ1ZyBvdXRwdXQKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX3NlbmRfZGlzY29udCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RvX3NlZWspLCAoZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2gpOgotCSAgRml4IHNlZWsgZXZlbnQgaGFuZGxpbmcuCi0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpOgotCSAgRG9uJ3Qgc3RhcnQgdGhlIHNyYyBwYWQgdGFzayBvbiBGTFVTSF9TVE9QIGlmIHRoZSBwYWQKLQkgIGlzbid0IGxpbmtlZC4KLQkgIERlYnVnIGNoYW5nZXMuCi0KLTIwMDUtMDgtMjIgMTU6MTI6NTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHV0aWxzLmggKEdTVF9CT0lMRVJQTEFURV9XSVRIX0lOVEVSRkFDRSk6IE5ldyBnaGV0dG8gbWFjcm8sIGltcGxlbWVudHMgYW4gaW50ZXJmYWNlIGFuZCBnc3RpbXBsZW1lbnRzaW50ZXJmYWNlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDgtMjIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3R1dGlscy5oIChHU1RfQk9JTEVSUExBVEVfV0lUSF9JTlRFUkZBQ0UpOiBOZXcgZ2hldHRvCi0JICBtYWNybywgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UgYW5kIGdzdGltcGxlbWVudHNpbnRlcmZhY2UgZm9yIGEKLQkgIG5ldyB0eXBlLgotCi0yMDA1LTA4LTIyIDE1OjA4OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0Y2Fwcy5jOiBBZGRlZCBjaGVjayBmb3IgZ3N0X3N0YXRpY19jYXBzX2dldCgpIHJlZmNvdW50aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RjYXBzLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfY2Fwc19zdWl0ZSk6Ci0JICBBZGRlZCBjaGVjayBmb3IgZ3N0X3N0YXRpY19jYXBzX2dldCgpIHJlZmNvdW50aW5nLgotCi0yMDA1LTA4LTIyIDE0OjM1OjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Y2Fwcy5jOiBNYWtlIF9zdGF0aWNfY2Fwc19nZXQoKSByZWZjb3VudGluZyBzYW5lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3Rfc3RhdGljX2NhcHNfZ2V0KSwgKGdzdF9jYXBzX3RvX3N0cmluZyk6Ci0JICBNYWtlIF9zdGF0aWNfY2Fwc19nZXQoKSByZWZjb3VudGluZyBzYW5lLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKToKLQkgIEFkZCBnX3JldHVybl92YWxfaWZfZmFpbCgpIHRvIHByb3RlY3QgYWdhaW5zdCBzZWdmYXVsdHMuCi0KLTIwMDUtMDgtMjIgMTA6Mzc6MDIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgaW5saW5lZCByZW1haW5pbmcgZG9jcywgYWRkZWQgbWlzc2luZyBkb2MgY29tbWVudHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGV2ZW50LnNnbWw6Ci0JICAqIGdzdC9nc3RldmVudC5jOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIGlubGluZWQgcmVtYWluaW5nIGRvY3MsIGFkZGVkIG1pc3NpbmcgZG9jIGNvbW1lbnRzCi0KLTIwMDUtMDgtMjIgMDk6MjU6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IHNpbmNlIHdlIGRvbid0IGtub3cgd2hlbiBwcmVyb2xsIGlzIGRvbmUsIHVzZSByZWZjb3VudCByYW5nZSBjaGVjayBmb3IgdGhlIHNpbmsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBzaW5jZSB3ZSBkb24ndCBrbm93IHdoZW4gcHJlcm9sbCBpcyBkb25lLCB1c2UgcmVmY291bnQgcmFuZ2UKLQkgIGNoZWNrIGZvciB0aGUgc2luawotCSAgKiBnc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGFkZCBtYWNybyBmb3IgY2hlY2tpbmcgcmVmY291bnQgcmFuZ2UKLQotMjAwNS0wOC0yMSAxNjo1MzowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL2dzdC9nc3RiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkgIGZpZ3VyZSB0aGlzIG91dCBmb3IgSFQgbWFjaGluZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZmlndXJlIHRoaXMgb3V0IGZvciBIVCBtYWNoaW5lcwotCi0yMDA1LTA4LTIxIDE1OjIxOjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svZ3N0L2dzdGJpbi5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jOgotCSAgc29tZSBmdW5reSBIVC9tdWx0aWNwdSB2cyBzaW5nbGUgZGlmZmVyZW5jZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzb21lIGZ1bmt5IEhUL211bHRpY3B1IHZzIHNpbmdsZSBkaWZmZXJlbmNlCi0KLTIwMDUtMDgtMjEgMTU6MDE6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjaGVjay9NYWtlZmlsZS5hbTogY2xlYW4gdXAgZW52aXJvbm1lbnQgZm9yIHdoZW4gcmVnaXN0cnkgZ2V0cyBidWlsdCB2ZXJzdXMgd2hlbiBhY3R1YWwgdGVzdHMgYXJlIHJ1bjsgdmFsZ3JpbmQgc2VlbXMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIGNsZWFuIHVwIGVudmlyb25tZW50IGZvciB3aGVuIHJlZ2lzdHJ5IGdldHMgYnVpbHQgdmVyc3VzCi0JICB3aGVuIGFjdHVhbCB0ZXN0cyBhcmUgcnVuOyB2YWxncmluZCBzZWVtcyB0byBub3QgcmVwb3J0Ci0JICBsZWFrcyBpZiBHU1RfUExVR0lOX1BBVEggaXMgc2V0IHRvIHNvbWUgc3BlY2lmaWMgdmFsdWVzCi0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIGFkZCBtb3JlIHJlZmNvdW50aW5nIGNoZWNrczsgbWF5YmUgdGhpcyBleHBvc2VzIGEKLQkgIHByZXJvbGwgbG9jayBidWcgPwotCSAgKiBjb21tb24vY2hlY2subWFrOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KToKLQkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9lbGVtZW50X2lzX3NlbWlfc2luayksIChnc3RfYmluX2dldF9zdGF0ZSksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X3BhZF9jaGFpbik6Ci0JICBhZGQvZml4IGRlYnVnZ2luZy93aGl0ZXNwYWNlCi0KLTIwMDUtMDgtMjEgMTE6NDA6NDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0ZXZlbnQuYzogRXIsIGRvbid0IGNhbGwgZ3N0X2Jpbl93YXRjaF9mb3Jfc3RhdGVfY2hhbmdlIHlvdSBpZGlvdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzogKGV2ZW50X3Byb2JlKSwgKHRlc3RfZXZlbnQpLAotCSAgKEdTVF9TVEFSVF9URVNUKToKLQkgIEVyLCBkb24ndCBjYWxsIGdzdF9iaW5fd2F0Y2hfZm9yX3N0YXRlX2NoYW5nZSB5b3UgaWRpb3QuCi0KLTIwMDUtMDgtMjEgMTE6MTU6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIGNvbW1vbjoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgcnVuIHZhbGdyaW5kIHdpdGggcHJvcGVyIGVudgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBydW4gdmFsZ3JpbmQgd2l0aCBwcm9wZXIgZW52Ci0KLTIwMDUtMDgtMjEgMTA6NTQ6NDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjaGVjay9NYWtlZmlsZS5hbTogVXNlIENIRUNLX0NGTEFHUyBhbmQgQ0hFQ0tfTElCUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgVXNlIENIRUNLX0NGTEFHUyBhbmQgQ0hFQ0tfTElCUwotCSAgKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzogKGV2ZW50X3Byb2JlKSwgKHRlc3RfZXZlbnQpLAotCSAgKEdTVF9TVEFSVF9URVNUKToKLQkgIERvbid0IGxlYWsgZXZlbnRzLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfc2VuZF9kaXNjb250KSwKLQkgIChnc3RfYmFzZV9zcmNfc3RhcnQpLCAoZ3N0X2Jhc2Vfc3JjX3N0b3ApLAotCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgIFNwcmlua2xlIGdzdF9iYXNlX3NyY19zdG9wIGxpYmVyYWxseSBhcm91bmQgZXJyb3IgcGF0aHMgdG8gZml4Ci0JICBwcm9ibGVtcyByZXVzaW5nIGEgc291cmNlIGFmdGVyIGZhaWxlZCBzdGF0ZSBjaGFuZ2VzLgotCSAgKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfcGVlayksCi0JICAoaGVscGVyX2ZpbmRfc3VnZ2VzdCksIChnc3RfdHlwZV9maW5kX2hlbHBlcik6Ci0JICBFeHRyYSBkZWJ1ZyBvdXRwdXQuIERvbid0IHNlZ2ZhdWx0IG9uIEdTVF9QQURfR0VUUkFOR0VGVU5DID0gTlVMTAotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RldmVudC5zZ21sOgotCSAgTWlncmF0ZSBwYXJ0IG9mIHRoZSBkb2NzIGZyb20gdGhlIFNHTUwgZmlsZS4gV2FpdCBmb3IgZW5zb25pYyB0bwotCSAgdGVsbCBtZSBob3cgSSBkaWQgaXQgd3JvbmcgOykKLQkgICogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6IChtYWluKToKLQkgIEV4dHJhIHJvYnVzdG5lc3MgdG8gc3RhdGUgY2hhbmdlcyBiZXR3ZWVuIGZpbGVzLgotCi0yMDA1LTA4LTIxIDEwOjM5OjM5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IGRvbid0IHZhbGdyaW5kIHRoZSBjb250cm9sbGVyIHRlc3QgLSBpdCdzIGxlYWtpbmcgLSBTdGVmYW4sIEhFTFAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIGRvbid0IHZhbGdyaW5kIHRoZSBjb250cm9sbGVyIHRlc3QgLSBpdCdzIGxlYWtpbmcgLSBTdGVmYW4sIEhFTFAKLQkgICogZ3N0L2NoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfbWVzc2FnZV9lcnJvciksCi0JICAoZ3N0X2NoZWNrX2NoYWluX2Z1bmMpLCAoZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQpLAotCSAgKGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50KSwgKGdzdF9jaGVja19zZXR1cF9zcmNfcGFkKSwKLQkgIChnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCksIChnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQpLAotCSAgKGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCk6Ci0JICAqIGdzdC9jaGVjay9nc3RjaGVjay5oOgotCSAgYWRkIGEgYnVuY2ggb2YgbWV0aG9kcyB0byBzZXQgdXAgZWxlbWVudHMsIGFuZCBzcmMgYW5kIHNpbmsgcGFkcwotCSAgKiBjaGVjay9lbGVtZW50cy9mYWtlc3JjLmM6IChzZXR1cF9mYWtlc3JjKSwgKGNsZWFudXBfZmFrZXNyYyk6Ci0JICAqIGNoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6IChzZXR1cF9pZGVudGl0eSksIChjbGVhbnVwX2lkZW50aXR5KSwKLQkgIChHU1RfU1RBUlRfVEVTVCk6Ci0JICB1c2UgdGhlbQotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSAgKiBnc3QvZ3N0dGFnLmg6Ci0JICB3aGl0ZXNwYWNlL2RvYyBmaXhlcwotCi0yMDA1LTA4LTIwIDIwOjMwOjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIG1ha2UgR1NUX0VMRU1FTlRfRVJST1Igbm90IGRvIEdTVF9FUlJPUl9PQkpFQ1QgLSB0aGVzZSBlcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGFuZCBub3QgYWx3YXlzIHByaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtYWtlIEdTVF9FTEVNRU5UX0VSUk9SIG5vdCBkbyBHU1RfRVJST1JfT0JKRUNUIC0gdGhlc2UgZXJyb3JzIHNob3VsZAotCSAgYmUgaGFuZGxlZCBieSB0aGUgYXBwbGljYXRpb24gYW5kIG5vdCBhbHdheXMgcHJpbnRlZCBhcyB3ZWxsCi0KLTIwMDUtMDgtMjAgMjA6MTU6NTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjaGVjay9NYWtlZmlsZS5hbTogc2V0IEdTVF9UT09MU19ESVIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIHNldCBHU1RfVE9PTFNfRElSCi0JICAqIGdzdC9jaGVjay9nc3RjaGVjay5jOiAoZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3IpOgotCSAgKiBnc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGFkZCBhIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQKLQkgIGFkZCBmYWlsX3VubGVzcyBmb3IgZXJyb3IgbWVzc2FnZXMKLQotMjAwNS0wOC0yMCAxNDowMDoxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogY2hlY2svZ3N0LnN1cHA6Ci0JKiBjb21tb246Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC5zdXBwOgotCSAgZmFjdG9yIG91dCB0aGUgY29tbW9uIHN0dWZmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZhY3RvciBvdXQgdGhlIGNvbW1vbiBzdHVmZgotCi0yMDA1LTA4LTIwIDEzOjE3OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L01ha2VmaWxlLmFtOgotCSAgd29yayBvbiBidWlsZHMgd2l0aG91dCBjaGVjawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3b3JrIG9uIGJ1aWxkcyB3aXRob3V0IGNoZWNrCi0KLTIwMDUtMDgtMjAgMTI6NDc6MDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgcmVuYW1lZCB0ZXN0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbmFtZWQgdGVzdAotCi0yMDA1LTA4LTIwIDEyOjQzOjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBjaGVjay9nc3QvZ3N0ZXZlbnQuYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmM6Ci0JICBwdXQgc29tZSBtYWtlLXVwIG9uIHRoZSBnc3RldmVudCB0ZXN0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHB1dCBzb21lIG1ha2UtdXAgb24gdGhlIGdzdGV2ZW50IHRlc3QKLQotMjAwNS0wOC0yMCAxMjozOTowNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogY2hlY2svZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBjaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGNoZWNrL2dzdC9nc3R0YWcuYzoKLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JICB2YWxncmluZCBtb3JlIHRlc3RzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHZhbGdyaW5kIG1vcmUgdGVzdHMKLQotMjAwNS0wOC0yMCAxMjoxNDoyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIGNoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYzoKLQkqIGNoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmM6Ci0JKiBjaGVjay9nc3QtbGlicy9jb250cm9sbGVyLmM6Ci0JKiBjaGVjay9nc3QtbGlicy9nZHAuYzoKLQkqIGNoZWNrL2dzdC9nc3QuYzoKLQkqIGNoZWNrL2dzdC9nc3RiaW4uYzoKLQkqIGNoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIGNoZWNrL2dzdC9nc3RidXMuYzoKLQkqIGNoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JKiBjaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgotCSogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBjaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzoKLQkqIGNoZWNrL2dzdC9nc3RtZXNzYWdlLmM6Ci0JKiBjaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSogY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSogY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiBjaGVjay9nc3QvZ3N0dGFnLmM6Ci0JKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkqIGNoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6Ci0JKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOgotCSogY2hlY2svc3RhdGVzL3NpbmtzLmM6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9nc3QvdG1wbC9nc3RwYWQuc2dtbDoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9jaGVjay9NYWtlZmlsZS5hbToKLQkqIGdzdC9jaGVjay9nc3RjaGVjay5jOgotCSogZ3N0L2NoZWNrL2dzdGNoZWNrLmg6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSogbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jaGVjay9nc3RjaGVjay5jOgotCSogbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suaDoKLQkqIHBrZ2NvbmZpZy9NYWtlZmlsZS5hbToKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjLmluOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RidXMuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RjYXBzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0aXRlcmF0b3IuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG9iamVjdC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYzoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9nZHAuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSAgbW92ZSBjaGVjayBzdHVmZiB0byBpdHMgb3duIGxpYnJhcnkgdG8gYmUgdXNlZCBieSBvdGhlciBtb2R1bGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vdmUgY2hlY2sgc3R1ZmYgdG8gaXRzIG93biBsaWJyYXJ5IHRvIGJlIHVzZWQgYnkgb3RoZXIgbW9kdWxlcwotCi0yMDA1LTA4LTE5IDA5OjU4OjQyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGVsaW1pbmF0ZSBhbm90aGVyIHRtcGwgZmlsZSwgZml4IHNwZWxsaW5nIGluIHRoZSBsb25nLWRlc2NyaXB0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3Quc2dtbDoKLQkgICogZ3N0L2dzdC5jOgotCSAgZWxpbWluYXRlIGFub3RoZXIgdG1wbCBmaWxlLCBmaXggc3BlbGxpbmcgaW4gdGhlIGxvbmctZGVzY3JpcHRpb24KLQotMjAwNS0wOC0xOCAxNjo0Mjo0OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RldmVudHMuYzogU2hvdWxkIGZpeCBidWlsZCBvbiA2NC1iaXQgYXJjaCdzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGV2ZW50cy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZXZlbnRfcHJvYmUpLAotCSAgKHRlc3RfZXZlbnQpLCAodGltZWRpZmYpLCAoZ3N0ZXZlbnRzX3N1aXRlKToKLQkgIFNob3VsZCBmaXggYnVpbGQgb24gNjQtYml0IGFyY2gncwotCi0yMDA1LTA4LTE4IDE2OjIwOjI0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIE1ha2Ugc3VyZSB0aGF0IHdoZW4gYSBwaXBlbGluZSBnb2VzIHRvIFBMQVlJTkcsIHRoYXQgZGF0YSBoYXMgYWN0dWFsbHkgaGl0IHRoZSBzaW5rLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA4LTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgTWFrZSBzdXJlIHRoYXQgd2hlbiBhIHBpcGVsaW5lIGdvZXMgdG8gUExBWUlORywgdGhhdCBkYXRhIGhhcwotCSAgYWN0dWFsbHkgaGl0IHRoZSBzaW5rLgotCSAgKiBjaGVjay9zdGF0ZXMvc2lua3MuYyAodGVzdF9zaW5rKTogQSBzaW5rIHRoYXQgZG9lc24ndCBnZXQgYW55Ci0JICBkYXRhIHNob3VsZG4ndCByZXR1cm4gU1VDQ0VTUyBmb3IgZ29pbmcgdG8gZWl0aGVyIFBMQVlJTkcgb3IKLQkgIFBBVVNFRC4gVGVzdCBhbHNvIHRoZSByZXR1cm4gdmFsdWVzIG9uIHRoZSB3YXkgYmFjayBkb3duLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOiBXaGVuIGNoYW5naW5nIHRoZQotCSAgc3RhdGUgb2YgYW4gZWxlbWVudCBjdXJyZW50bHkgY2hhbmdpbmcgc3RhdGUgYXN5bmNocm9ub3VzbHksIGdvIHRvCi0JICBsb3N0LXN0YXRlIGFmdGVyIGNvbW1pdGluZyB0aGUgcGVuZGluZyBzdGF0ZS4gTWFrZXMgZnV0dXJlIGNhbGxzCi0JICB0byBnZXRfc3RhdGUgY29udGludWUgdG8gcmV0dXJuIEFTWU5DLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6IFJldHVybgotCSAgQVNZTkMgd2hlbiBnb2luZyB0byBQTEFZSU5HIGlmIHdlIHN0aWxsIGRvbid0IGhhdmUgcHJlcm9sbCwgYXMgY2FuCi0JICBoYXBwZW4gd2l0aCBsaXZlIHNvdXJjZXMuCi0KLTIwMDUtMDgtMTggMTY6MTU6MjggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6IEhhY2sgbG9uZyBwYXJhZ3JhcGggaW50byAyIGNodW5rcyBhcyBhIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGphZGV0ZXggdmVyc2lvbiBpbiBzaWQgYW5kIGIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6Ci0JICBIYWNrIGxvbmcgcGFyYWdyYXBoIGludG8gMiBjaHVua3MgYXMgYSB3b3JrYXJvdW5kIGZvciBidWdneQotCSAgamFkZXRleCB2ZXJzaW9uIGluIHNpZCBhbmQgYnJlZXp5IHRoYXQgbG9vcHMgaW5maW5pdGVseSBhbmQKLQkgIGVhdHMgYWxsIFJBTS4KLQotMjAwNS0wOC0xOCAxNjowMDozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RldmVudHMuYzogUHJvdmlkZSBtb3JlIGVycm9yIG1hcmdpbiBpbiBjbG9jayBtZWFzdXJlbWVudHMgdG8gYWxsb3cgZm9yIGdfZ2V0X2N1cnJlbnRfdGltZSBpbmFjY3VyYWNpZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGV2ZW50cy5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZXZlbnRfcHJvYmUpLAotCSAgKHRlc3RfZXZlbnQpLCAodGltZWRpZmYpLCAoZ3N0ZXZlbnRzX3N1aXRlKToKLQkgIFByb3ZpZGUgbW9yZSBlcnJvciBtYXJnaW4gaW4gY2xvY2sgbWVhc3VyZW1lbnRzIHRvIGFsbG93IGZvcgotCSAgZ19nZXRfY3VycmVudF90aW1lIGluYWNjdXJhY2llcy4KLQotMjAwNS0wOC0xOCAxNTo0NzoxNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RldmVudHMuYzogRml4IGVycm9yIG1lc3NhZ2Ugb3V0cHV0IHNvIEkgbWlnaHQgYmUgYWJsZSB0byB0ZWxsIHdoeSB0aGUgdGVzdCB3b3JrcyBoZXJlIGJ1dCBmYWlscyBvbiB0aGUgYi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RldmVudHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGV2ZW50X3Byb2JlKSwKLQkgICh0ZXN0X2V2ZW50KSwgKHRpbWVkaWZmKSwgKGdzdGV2ZW50c19zdWl0ZSk6Ci0JICBGaXggZXJyb3IgbWVzc2FnZSBvdXRwdXQgc28gSSBtaWdodCBiZSBhYmxlIHRvIHRlbGwgd2h5IHRoZQotCSAgdGVzdCB3b3JrcyBoZXJlIGJ1dCBmYWlscyBvbiB0aGUgYnVpbGQgZmFybS4KLQotMjAwNS0wOC0xOCAxNTozMToyOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNoZWNrLzogSSB3cm90ZSBhIHRlc3QhCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGNoZWNrL2dzdC9nc3RldmVudHMuYzogKEdTVF9TVEFSVF9URVNUKSwgKGV2ZW50X3Byb2JlKSwKLQkgICh0ZXN0X2V2ZW50KSwgKHRpbWVkaWZmKSwgKGdzdGV2ZW50c19zdWl0ZSksIChtYWluKToKLQkgIEkgd3JvdGUgYSB0ZXN0IQotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXNlZWtpbmcudHh0OgotCSAgU3BlbGxpbmcgY29ycmVjdGlvbgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGV2ZW50LnNnbWw6Ci0JICBEb2NzIHVwZGF0ZXMuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgotCSAgVHJlYXQgYSBidWZmZXItd2l0aG91dC1uZXdzZWdtZW50IHRoZSBzYW1lIGFzIGEgcmVjZWl2aW5nCi0JICBhIG5ld3NlZ21lbnQgbm90IGluIHRpbWUgZm9ybWF0LCBhbmQgZGlzYWJsZSBzeW5jaW5nIHRvIHRoZSBjbG9jawotCSAgd2l0aCBhIHdhcm5pbmcuCi0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcik6Ci0JICBBc3NlcnQgaWYgYW55b25lIHRyaWVzIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHN5bmNfaGFuZGxlciBmb3IgYnVzLAotCSAgYXMgb25seSB0aGUgb3duZXIgc2hvdWxkIGJlIHNldHRpbmcgaXQuCi0JICAqIGdzdC9nc3RldmVudC5oOgotCSAgSGF2ZSBhIGZpeGVkIHNldCBvZiBjdXN0b20gZXZlbnQgZW51bXMgd2l0aCBldmVudHMgaWRlbnRpZmllZCBieQotCSAgdGhlaXIgc3RydWN0dXJlIG5hbWUgKGFzIGluIDAuOCksIHJhdGhlciB0aGFuIGEgZnJlZS1mb3ItYWxsCi0JICBhbGxvd2luZyBjb2xsaXNpb25zIGJldHdlZW4gZW51bSB2YWx1ZXMgZnJvbSBkaWZmZXJlbnQgcGx1Z2lucy4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jbGFzc19pbml0KToKLQkgIERvY3MgY2hhbmdlLgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCk6Ci0JICBIYW5kbGUgb3V0LW9mLWJhbmQgZG93bnN0cmVhbSBldmVudHMgZnJvbSB0aGUgc2VuZGluZyB0aHJlYWQuCi0KLTIwMDUtMDgtMTcgMTY6NTc6MDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHBpcGVsaW5lLmMgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOiBJbnRlcnByZXQgcGxheS10aW1lb3V0PT0wIHRvIG1lYW4gbm8gdGltZW91dCBhdCBhbGwuIEluIHRoYXQgY2FzZSwgZG9uLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDgtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKTogSW50ZXJwcmV0Ci0JICBwbGF5LXRpbWVvdXQ9PTAgdG8gbWVhbiBubyB0aW1lb3V0IGF0IGFsbC4gSW4gdGhhdCBjYXNlLCBkb24ndAotCSAgYm90aGVyIHdpdGggYSBnZXRfc3RhdGUgb3IgYSB3YXJuaW5nLCBqdXN0IHJldHVybiBkaXJlY3RseSwgZXZlbgotCSAgaWYgaXQncyBBU1lOQy4KLQotMjAwNS0wOC0xNyAxNjozMzoyNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IERlYnVnIGNoYW5nZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDgtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogRGVidWcgY2hhbmdlcy4KLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICAqIGdzdC9nc3R1dGlscy5jIChnc3RfYmluX3dhdGNoX2Zvcl9zdGF0ZV9jaGFuZ2UpOiBBZGQgZnVuY3Rpb24gdG8KLQkgIGVuc3VyZSBiaW5zIHBvc3Qgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzLiBBIGJpdCBvZiBhIGhhY2sgYnV0IEkgY2FuJ3QKLQkgIHRoaW5rIG9mIGEgd2F5IHRvIGF2b2lkIGl0LgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmMgKHRlc3Rfd2F0Y2hfZm9yX3N0YXRlX2NoYW5nZSk6IEFkZGVkIHRlc3QuCi0KLTIwMDUtMDgtMTYgMTc6MjM6NTUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YWRhcHRlci4qOiBOZXcgZnVuY3Rpb24sIGxpa2UgcGVlaygpIGJ1dCB5b3Ugb3duIHRoZSBkYXRhLiBOb3QgdGVycmlibHkgZWZmaWNpZW50IGF0bS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOC0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSAgKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmMgKGdzdF9hZGFwdGVyX3Rha2UpOiBOZXcgZnVuY3Rpb24sIGxpa2UKLQkgIHBlZWsoKSBidXQgeW91IG93biB0aGUgZGF0YS4gTm90IHRlcnJpYmx5IGVmZmljaWVudCBhdG0uCi0KLTIwMDUtMDgtMTYgMTY6Mjk6MDQgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZ3N0L2dzdHV0aWxzLio6IEFkZCB0d28gdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRhZyBoYW5kbGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZCksIChwdXNoX2FuZF9yZWYpLAotCSAgKGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3MpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFkZCB0d28gdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRhZyBoYW5kbGluZy4KLQotMjAwNS0wOC0xNiAxMjoxNTo0NiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBkb2NzL21hbnVhbC86IEZpeCBkb2NzIHRvIHVzZSBfYmluX2FkZCgpIGJlZm9yZSBfbGluaygpLCB3aGljaCBmaXhlcyB0aGUgZXhhbXBsZXMgd2l0aCByZWNlbnQgY29yZSB2ZXJzaW9ucyAocmVwb3J0ZWQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sOgotCSAgRml4IGRvY3MgdG8gdXNlIF9iaW5fYWRkKCkgYmVmb3JlIF9saW5rKCksIHdoaWNoIGZpeGVzIHRoZSBleGFtcGxlcwotCSAgd2l0aCByZWNlbnQgY29yZSB2ZXJzaW9ucyAocmVwb3J0ZWQgYnkgTWFkaGFuIFJhaiBNCi0JICA8cmFqX21hZGFuQHJlZGlmZm1haWwuY29tPiwgIzMxMzE5OSkuCi0KLTIwMDUtMDgtMTYgMDk6NDI6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiBBZGRlZCBzdWJ0cmFjdCBjaGVja3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgotCSAgQWRkZWQgc3VidHJhY3QgY2hlY2tzLgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICBTb21lIG1vcmUgZG9jcyBhYm91dCBuZXdzZWdtZW50Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hhbmdlX3N0YXRlKSwgKGJpbl9idXNfaGFuZGxlcik6Ci0JICBGaXggRklYTUUKLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX3RvX3N0cmluZyk6Ci0JICBBZGQgY29tbWVudHMsIGNsZWFudXBzLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2F2ZV90aHlzZWxmKToKLQkgIGNsZWFudXBzCi0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbGxlY3RfaW50X3JhbmdlKSwKLQkgIChnc3Rfc3RyaW5nX3Vud3JhcCksIChnc3RfdmFsdWVfdW5pb25faW50X2ludF9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX3VuaW9uX2ludF9yYW5nZV9pbnRfcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfaW50X2ludF9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnRfcmFuZ2VfaW50X3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfaW50ZXJzZWN0X2RvdWJsZV9kb3VibGVfcmFuZ2UpLAotCSAgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZG91YmxlX3JhbmdlX2RvdWJsZV9yYW5nZSksCi0JICAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9saXN0KSwgKGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnRfaW50X3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfc3VidHJhY3RfaW50X3JhbmdlX2ludCksCi0JICAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2RvdWJsZV9yYW5nZV9kb3VibGUpLAotCSAgKGdzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGVfcmFuZ2VfZG91YmxlX3JhbmdlKSwKLQkgIChnc3RfdmFsdWVfc3VidHJhY3RfZnJvbV9saXN0KSwgKGdzdF92YWx1ZV9zdWJ0cmFjdF9saXN0KSwKLQkgIChnc3RfdmFsdWVfY2FuX2NvbXBhcmUpLCAoZ3N0X3ZhbHVlX2NvbXBhcmVfZnJhY3Rpb24pOgotCSAgQ2xlYW51cHMsIGFkZCBjb21tZW50cywgcmVtb3ZlIHVubmVlZGVkIGFzc2VydHMuCi0KLTIwMDUtMDgtMTUgMTg6MTU6MzggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvZ3N0YnVzLmM6Ci0JKiB0b29scy9nc3QtbGF1bmNoLmM6Ci0JICBkb24ndCBjb252ZXJ0IE5VTEwgc3RydWN0dXJlcyB0byBzdHJpbmdzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvbid0IGNvbnZlcnQgTlVMTCBzdHJ1Y3R1cmVzIHRvIHN0cmluZ3MKLQotMjAwNS0wOC0xNSAxNjo1NzozNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OiBtYWRlIHNvbWUgZGVmaW5lcyBwcml2YXRlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgIG1hZGUgc29tZSBkZWZpbmVzIHByaXZhdGUKLQkgICogZG9jcy9nc3QvdG1wbC9nc3Rjb25maWcuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RxdWV1ZS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHRhZ2xpc3Quc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3R0eXBlcy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6Ci0JICAqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6IChnc3RfZmFrZV9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZ3N0eG1sLmM6IChnc3RfeG1sX2NsYXNzX2luaXQpOgotCSAgZG9jdW1lbnRlZCBhbGwgdW5kb2N1bWVudGVkIHNpZ25hbCBpbmxpbmUKLQkgICogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5oOgotCSAgYWRkZWQgcGFkZGluZwotCi0yMDA1LTA4LTE1IDA5OjU2OjE5ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOiBEb2N1bWVudCBfc2V0X2xpbmtfZnVuY3Rpb24gLT4gX3NldF9zZXRjYXBzX2Z1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgotCSAgRG9jdW1lbnQgX3NldF9saW5rX2Z1bmN0aW9uIC0+IF9zZXRfc2V0Y2Fwc19mdW5jdGlvbi4KLQotMjAwNS0wOC0xNCAyMjoyOTowNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL01ha2VmaWxlLmFtOiBhZGQgYSAuY2hlY2sgdGFyZ2V0IGZvciBydW5uaW5nIHRoZSBjaGVjawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgYWRkIGEgLmNoZWNrIHRhcmdldCBmb3IgcnVubmluZyB0aGUgY2hlY2sKLQkgICogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgY29zbWV0aWMgZml4dXBzCi0JICAqIGNoZWNrL2dzdC9nc3RidWZmZXIuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF90ZXN0X3N1aXRlKToKLQkgIGNvbXBsZXRlIGNoZWNrcyBmb3IgZ3N0YnVmZmVyOyB3b3VsZCBiZSBuaWNlIGlmIEkgY291bGQgZ2V0IHRoZQotCSAgZ2NvdiBzdHVmZiB0byB3b3JrIHNvIEkgY2FuIHNlZSBpZiBJIGFjdHVhbGx5IGNvbXBsZXRlZCBnc3RidWZmZXIuYwotCSAgKiBjaGVjay9nc3RjaGVjay5oOgotCSAgYWRkIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQKLQotMjAwNS0wOC0xMyAxMTo0NTo1MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL01BTklGRVNUOgotCSAgcmVtb3ZlIHNwaWRlciBmcm9tIGRpc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIHNwaWRlciBmcm9tIGRpc3QKLQotMjAwNS0wOC0xMyAxMTo0MzoxMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2dzdHNwaWRlci52Y3Byb2o6Ci0JICByZW1vdmVkIGZyb20gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmVkIGZyb20gSEVBRAotCi0yMDA1LTA4LTEzIDEwOjMzOjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBZGQgR1NUX1RBR19MQU5HVUFHRV9DT0RFIGFzIHdlIGhhdmUgaW4gMC44LCBhbmQgZG9uJ3Qgc3BldyBvdXQgYSB3YXJuaW5nIGlmIGEgdGFnIHRoYXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGlzIHJlLXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvZ3N0dGFnLmM6IChfZ3N0X3RhZ19pbml0aWFsaXplKSwgKGdzdF90YWdfcmVnaXN0ZXIpOgotCSAgKiBnc3QvZ3N0dGFnLmg6Ci0JICBBZGQgR1NUX1RBR19MQU5HVUFHRV9DT0RFIGFzIHdlIGhhdmUgaW4gMC44LCBhbmQgZG9uJ3QKLQkgIHNwZXcgb3V0IGEgd2FybmluZyBpZiBhIHRhZyB0aGF0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZAotCSAgaXMgcmUtcmVnaXN0ZXJlZCwgdW5sZXNzIGl0IGlzIHJlLXJlZ2lzdGVyZWQgd2l0aCBhCi0JICBkaWZmZXJlbnQgdHlwZSAoIzMwODQzOCkuCi0KLTIwMDUtMDgtMTIgMTQ6MzA6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvcHdnLzogQWRkIHNvbWUgcGFyYWdyYXBocyBhYm91dCBzdGF0ZSBjaGFuZ2VzIGluIDAuOSB0byB0aGUgUFdHIGFuZCB0aGUgcG9ydGluZyBndWlkZSwgaW4gcGFydGljdWxhciBhYm91dCB0aGUgbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FwcGVuZGl4LXBvcnRpbmcueG1sOgotCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1zdGF0ZS54bWw6Ci0JICBBZGQgc29tZSBwYXJhZ3JhcGhzIGFib3V0IHN0YXRlIGNoYW5nZXMgaW4gMC45IHRvIHRoZSBQV0cKLQkgIGFuZCB0aGUgcG9ydGluZyBndWlkZSwgaW4gcGFydGljdWxhciBhYm91dCB0aGUgbmV3IG1lYW5pbmcKLQkgIG9mIEdTVF9TVEFURV9QQVVTRUQgYW5kIGhvdyB0byB3cml0ZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zCi0JICB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIGJ5IG11bHRpcGxlIHRocmVhZHMgaW4gbWluZC4KLQotMjAwNS0wOC0xMSAxNzozOTo0OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWhlbHBlci5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgotCSAgYWRkZWQgZGVwcmVjYXRpb24gYW5kIHNpbmNlIGluZGV4ZXMgYWRkZWQgc2luY2UgdGFncwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRlZCBkZXByZWNhdGlvbiBhbmQgc2luY2UgaW5kZXhlcwotCSAgYWRkZWQgc2luY2UgdGFncwotCi0yMDA1LTA4LTExIDE0OjI0OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Z2hvc3RwYWQuYzogQWN0dWFsbHkgaW1wbGVtZW50IChyZSlzZXR0aW5nIHRoZSB0YXJnZXQgb24gYSBnaG9zdHBhZCBhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGdob3N0cGFkLmM6IChnc3RfcHJveHlfcGFkX3NldF90YXJnZXRfdW5sb2NrZWQpLAotCSAgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldCksIChnc3RfcHJveHlfcGFkX2dldF90YXJnZXQpLAotCSAgKGdzdF9wcm94eV9wYWRfZGlzcG9zZSksIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9naG9zdF9wYWRfZG9fbGluayksIChnc3RfZ2hvc3RfcGFkX3NldF9pbnRlcm5hbCksCi0JICAoZ3N0X2dob3N0X3BhZF9uZXdfbm90YXJnZXQpLCAoZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0KSwKLQkgIChnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQpOgotCSAgQWN0dWFsbHkgaW1wbGVtZW50IChyZSlzZXR0aW5nIHRoZSB0YXJnZXQgb24gYSBnaG9zdHBhZAotCSAgYXMgZGVzY3JpYmVkIGluIHRoZSBkb2NzLgotCi0yMDA1LTA4LTEwIDIxOjE5OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0LmM6IENoZWNrIHdoZXRoZXIgR1NUX0RFQlVHX05PX0NPTE9SIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCBhbmQgZGlzYWJsZSBjb2xvdXJlZCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdF9jaGVja193aXRoX3BvcHRfdGFibGUpLCAoaW5pdF9wcmUpOgotCSAgQ2hlY2sgd2hldGhlciBHU1RfREVCVUdfTk9fQ09MT1IgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMKLQkgIHNldCBhbmQgZGlzYWJsZSBjb2xvdXJlZCBkZWJ1ZyBvdXRwdXQgaWYgdGhhdCBpcyB0aGUgY2FzZS4KLQotMjAwNS0wOC0xMCAxNTowODowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogVGhlIG1lbW9yeSByZXR1cm5lZCBieSBnc3RfdHlwZV9maW5kX3BlZWsoKSBuZWVkcyB0byBzdGF5IHZhbGlkIHVudGlsIHRoZSBlbmQgb2YgYSB0eXBlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGhlbHBlcl9maW5kX3BlZWspLAotCSAgKGdzdF90eXBlX2ZpbmRfaGVscGVyKToKLQkgIFRoZSBtZW1vcnkgcmV0dXJuZWQgYnkgZ3N0X3R5cGVfZmluZF9wZWVrKCkgbmVlZHMgdG8KLQkgIHN0YXkgdmFsaWQgdW50aWwgdGhlIGVuZCBvZiBhIHR5cGVmaW5kIGZ1bmN0aW9uLCBhbmQKLQkgIHR5cGVmaW5kIGZ1bmN0aW9ucyBtYXkga2VlcCByZXN1bHRzIGZyb20gZGlmZmVyZW50Ci0JICBvZmZzZXRzIGFyb3VuZCwgc28gd2UgY2FuJ3QganVzdCB1bnJlZiB0aGUgYnVmZmVyIGZyb20KLQkgIHRoZSBwcmV2aW91cyBfcGVlaygpLCBidXQgaGF2ZSB0byBzYXZlIGFsbCBidWZmZXJzCi0JICByZXR1cm5lZCBieSBfcGVlaygpIHVudGlsIHR5cGVmaW5kaW5nIGlzIGRvbmUgYW5kIG9ubHkKLQkgIGZyZWUgdGhlbSB0aGVuLgotCi0yMDA1LTA4LTA5IDE2OjI1OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBOZXcgbWFjcm9zOiBHU1RfUk9VTkRfVVBfMigpIHRocm91Z2ggR1NUX1JPVU5EX1VQXzY0KCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBOZXcgbWFjcm9zOiBHU1RfUk9VTkRfVVBfMigpIHRocm91Z2ggR1NUX1JPVU5EX1VQXzY0KCkuCi0KLTIwMDUtMDgtMDggMTY6MDE6MTIgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBmaXggdXAgc3BlYyBmb3IgbGF0ZXN0IENWUyBjaGFuZ2VzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCB1cCBzcGVjIGZvciBsYXRlc3QgQ1ZTIGNoYW5nZXMKLQotMjAwNS0wOC0wOCAxNTowODoxNCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEZpeCBhIHByZXR0eSBnb29kIG1lbWxlYWsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6Ci0JICBGaXggYSBwcmV0dHkgZ29vZCBtZW1sZWFrLgotCi0yMDA1LTA4LTA4IDEzOjU1OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0aXRlcmF0b3IuaDogRml4IHdyb25nIGluY2x1ZGUgYW5kICdtYWtlIGRpc3RjaGVjaycuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmg6Ci0JICBGaXggd3JvbmcgaW5jbHVkZSBhbmQgJ21ha2UgZGlzdGNoZWNrJy4KLQotMjAwNS0wOC0wOCAxMzozODozNCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvZ3N0YmluLmM6IFVzZSBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoKSBpbnN0ZWFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9idXNfaGFuZGxlcik6Ci0JICBVc2UgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKCkgaW5zdGVhZC4KLQotMjAwNS0wOC0wOCAxMzozMTowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogQWRkIHBhZGRpbmcgdG8gb3VyIGJhc2UgZWxlbWVudHMnIGNsYXNzIGFuZCBpbnN0YW5jZSBzdHJ1Y3RzIGFuZCB0byBHc3RJdGVyYXRvciAoeW91IHdpbGwgbmVlZCB0byByZWJ1aWxkIGFsbCBwLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgICogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkgICogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDoKLQkgIEFkZCBwYWRkaW5nIHRvIG91ciBiYXNlIGVsZW1lbnRzJyBjbGFzcyBhbmQgaW5zdGFuY2Ugc3RydWN0cyBhbmQKLQkgIHRvIEdzdEl0ZXJhdG9yICh5b3Ugd2lsbCBuZWVkIHRvIHJlYnVpbGQgYWxsIHBsdWdpbnMgYW5kIGFwcHMhKQotCi0yMDA1LTA4LTA4IDEzOjE3OjA3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9nc3RiaW4uYzogTWFrZSBkZWZhdWx0IG1lc3NhZ2UgZm9yd2FyZGluZyBmcm9tIGNoaWxkLT5idXMgdG8gYmluLT5idXMgdGhyZWFkc2FmZSBhbmQgbWFrZSBpdCBub3QgZW1pdCB3YXJuaW5ncyBpZi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9idXNfaGFuZGxlcik6Ci0JICBNYWtlIGRlZmF1bHQgbWVzc2FnZSBmb3J3YXJkaW5nIGZyb20gY2hpbGQtPmJ1cyB0byBiaW4tPmJ1cwotCSAgdGhyZWFkc2FmZSBhbmQgbWFrZSBpdCBub3QgZW1pdCB3YXJuaW5ncyBpZiB0aGUgcGFyZW50IGhhcyBubyBidXMuCi0KLTIwMDUtMDgtMDggMTI6MTQ6MjAgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZ3N0L2dzdGVsZW1lbnQuYzogT24gcGF1c2VkLT5yZWFkeSwgc2V0IHBhZC0+Y2FwcyB0byBOVUxMLCBhcyBpcyB0aGUgZG9jdW1lbnRlZCBiZWhhdmlvdXIgaW4gdGhpcyBzdGF0ZSBjaGFuZ2UuIEZpeGVzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGFjdGl2YXRlX3BhZHMpOgotCSAgT24gcGF1c2VkLT5yZWFkeSwgc2V0IHBhZC0+Y2FwcyB0byBOVUxMLCBhcyBpcyB0aGUgZG9jdW1lbnRlZAotCSAgYmVoYXZpb3VyIGluIHRoaXMgc3RhdGUgY2hhbmdlLiBGaXhlcyBwbGF5YmFjayBvZiBzZXJpZXMgb2YKLQkgIG1lZGlhIGZpbGVzIHdoZW4gdmlzdWFsaXphdGlvbiBpcyBlbmFibGVkIGluIFRvdGVtLgotCi0yMDA1LTA4LTA3IDEzOjM3OjA4ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IEFsbG93IE5VTEwgYXMgZmlsdGVyLWNhcHMgKHdoaWNoIG1lYW5zICJhbnkiKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfc2V0X3Byb3BlcnR5KToKLQkgIEFsbG93IE5VTEwgYXMgZmlsdGVyLWNhcHMgKHdoaWNoIG1lYW5zICJhbnkiKS4KLQotMjAwNS0wOC0wNSAxNzoyODozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0OgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaGVscGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3RoZWxwZXIuYzoKLQkgIGFkZGluZyBtb3JlIGVudHJpZXMgdG8gdGhlIGRvY3MgYW5kIGZpeCBzbWFsbCBkb2MtYnVncwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRpbmcgbW9yZSBlbnRyaWVzIHRvIHRoZSBkb2NzIGFuZCBmaXggc21hbGwgZG9jLWJ1Z3MKLQotMjAwNS0wOC0wNSAxMzo0MjoxMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBjaGVjay9nc3QtbGlicy8uZ2l0aWdub3JlOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvZ3N0L3RtcGwvLmdpdGlnbm9yZToKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNpbmsuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc2luay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc3JjLnNnbWw6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogdGVzdHMvY2hlY2svbGlicy8uZ2l0aWdub3JlOgotCSAgbWlncmF0ZWQgc29tZSBtb3JlIGRvY3MgdG8gYmUgaW5saW5lZCBpbiB0aGUgc291cmNlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtaWdyYXRlZCBzb21lIG1vcmUgZG9jcyB0byBiZSBpbmxpbmVkIGluIHRoZSBzb3VyY2VzCi0KLTIwMDUtMDgtMDUgMTI6NTk6NDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzaW5rLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzcmMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXRyYW5zZm9ybS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmYWtlc3JjLnNnbWw6Ci0JKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOgotCSogZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWhlbHBlci5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaW50ZXJwb2xhdGlvbi5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvbGliLmM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgYWRkZWQgbG9uZy9zaG9ydCBkZXNjIGZvciBjb250cm9sbGVyIGRvY3MgYWRkZWQgY29sbGVjdHBhZHMgYmFzZSBjbGFzcyBkb2NzIGFkZGVkIGNvcnJlY3QgaW5jbHVkZXMgdG8gYmFzZS1jbGFzcyBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZGVkIGxvbmcvc2hvcnQgZGVzYyBmb3IgY29udHJvbGxlciBkb2NzCi0JICBhZGRlZCBjb2xsZWN0cGFkcyBiYXNlIGNsYXNzIGRvY3MKLQkgIGFkZGVkIGNvcnJlY3QgaW5jbHVkZXMgdG8gYmFzZS1jbGFzcyBkb2NzCi0KLTIwMDUtMDgtMDUgMTA6MDI6NDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc2luay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJhc2V0cmFuc2Zvcm0uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmluLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJ1ZmZlci5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RjYXBzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGNsb2NrLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGNvbXBhdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3Rjb25maWcuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZGV0YWlscy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZmFjdG9yeS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbnVtdHlwZXMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXJyb3Iuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXZlbnQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNpbmsuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc2luay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc3JjLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGZpbHRlci5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3Rmb3JtYXQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0Z2hvc3RwYWQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW1wbGVtZW50c2ludGVyZmFjZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleGZhY3Rvcnkuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5mby5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpdGVyYXRvci5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RtYWNyb3Muc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWVtY2h1bmsuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWluaW9iamVjdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhZHRlbXBsYXRlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhcnNlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBpcGVsaW5lLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXJ5LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXVlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5cG9vbC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RzdHJ1Y3R1cmUuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0c3lzdGVtY2xvY2suc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnbGlzdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R0YWdzZXR0ZXIuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhY2Uuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhc2hzdGFjay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZGZhY3Rvcnkuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZXMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dXJpaGFuZGxlci5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R1cml0eXBlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHZhbHVlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHZlcnNpb24uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0eG1sLnNnbWw6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtZG9jcy5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvbGlicy90bXBsL2dzdGRhdGFwcm90b2NvbC5zZ21sOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0Z2V0Yml0cy5zZ21sOgotCSogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1jb250cm9sbGVyLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdC1oZWxwZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGhlbHBlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBtb3JlIHRlc3RzIChhbmQgZml4ZXMpIGZvciB0aGUgY29udHJvbGxlciBtb3JlIGRvY3MgZm9yIHRoZSBjb250cm9sbGVyIGludGVncmF0ZWQgY29tcGFuaWVzIGRvY3MgZm9yIHRoZSBhZGFwdGVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vcmUgdGVzdHMgKGFuZCBmaXhlcykgZm9yIHRoZSBjb250cm9sbGVyCi0JICBtb3JlIGRvY3MgZm9yIHRoZSBjb250cm9sbGVyCi0JICBpbnRlZ3JhdGVkIGNvbXBhbmllcyBkb2NzIGZvciB0aGUgYWRhcHRlcgotCi0yMDA1LTA4LTA1IDA2OjU3OjI3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svZ3N0LWxpYnMvY29udHJvbGxlci5jOgotCSogdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmM6Ci0JICBjb3NtZXRpYyBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjb3NtZXRpYyBmaXhlcwotCi0yMDA1LTA4LTA1IDA2OjU1OjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogZG9jcy9nc3QvdG1wbC9nc3Quc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNpbmsuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNldHJhbnNmb3JtLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJpbi5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RidWZmZXIuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0Y2Fwcy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RjbG9jay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3Rjb21wYXQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0Y29uZmlnLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudGRldGFpbHMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudGZhY3Rvcnkuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZW51bXR5cGVzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGVycm9yLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGV2ZW50LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzaW5rLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzcmMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmlsZXNpbmsuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmlsZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWx0ZXIuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0Zm9ybWF0LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGdob3N0cGFkLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGltcGxlbWVudHNpbnRlcmZhY2Uuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXguc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5kZXhmYWN0b3J5LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGluZm8uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aXRlcmF0b3Iuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWFjcm9zLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdG1lbWNodW5rLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdG1pbmlvYmplY3Quc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0b2JqZWN0LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhZC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwYWR0ZW1wbGF0ZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwYXJzZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwaXBlbGluZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW4uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luZmVhdHVyZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RxdWVyeS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RxdWV1ZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RyZWdpc3RyeS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RyZWdpc3RyeXBvb2wuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0c3RydWN0dXJlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHN5c3RlbWNsb2NrLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHRhZ2xpc3Quc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnc2V0dGVyLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHRyYWNlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHRyYXNoc3RhY2suc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZWZpbmQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZWZpbmRmYWN0b3J5LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHVyaWhhbmRsZXIuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dXJpdHlwZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R1dGlscy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R2YWx1ZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R2ZXJzaW9uLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHhtbC5zZ21sOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0ZGF0YXByb3RvY29sLnNnbWw6Ci0JKiBkb2NzL2xpYnMvdG1wbC9nc3RnZXRiaXRzLnNnbWw6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JICBhZGQgc2l6ZXR5cGUgdGVzdHMgZm9yIGZha2VzcmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHNpemV0eXBlIHRlc3RzIGZvciBmYWtlc3JjCi0KLTIwMDUtMDgtMDQgMTk6NDA6NDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogUmVpbXBsZW1lbnQgdXNpbmcgYmFzZXRyYW5zZm9ybSwgZml4ZXMgYnVmZmVyX2FsbG9jIHByb3h5aW5nIGFtb25nIG90aGVyIHRoaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOC0wNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogUmVpbXBsZW1lbnQgdXNpbmcgYmFzZXRyYW5zZm9ybSwKLQkgIGZpeGVzIGJ1ZmZlcl9hbGxvYyBwcm94eWluZyBhbW9uZyBvdGhlciB0aGluZ3MuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgUmV2ZXJ0IHBhdGNoIHRvIGdzdGJhc2V0cmFuc2Zvcm0gZnJvbSA3LTI4IHJlbW92aW5nCi0JICBkZWxheV9jb25maWd1cmUuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaCAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmdldF9zaXplKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3NpemUpOgotCSAgU2VtYW50aWNzIGNoYW5nZWQsIHNob3VsZCByZXR1cm4gbm90IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCi0JICBidXQgdGhlIGJ5dGUgc2l6ZSBvZiBhIGJ1ZmZlciB3aXRoIGEgZ2l2ZW4gY2Fwcy4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0Y2Fwcyk6IEJldHRlcgotCSAgZGVidWcgb2JqZWN0LgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jb25maWd1cmVfY2Fwcyk6IERvbid0IHNldCBvdXRfc2l6ZSBoZXJlOiAoaW4sCi0JICBvdXQpIGFyZSBub3QgdGhlIHBhZCBjYXBzIHVudGlsIHNldGNhcHMgZmluaXNoZXMuCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyk6IFByb3h5IHRoZSBidWZmZXJfYWxsb2MgZm9yIHRoZQotCSAgbm90LWluLXBsYWNlIGNhc2UgYXMgd2VsbC4gRGVhbCB3aXRoIGNoYW5naW5nIGZyb20gaW4tcGxhY2UgdG8KLQkgIG5vdC1pbi1wbGFjZSB3aXRoaW4gY2FsbGluZyBwYWRfYWxsb2NfYnVmZmVyLiBTdGlsbCBhIGJpdAotCSAgY29uY2VybmVkIGFib3V0IHRoZSBvdmVyaGVhZCBoZXJlLi4uCi0KLTIwMDUtMDgtMDQgMTE6NTY6NTcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGFkYXB0ZXIuaDogQWRkZWQgZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUoKSB0byB0aGUgaGVhZGVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oOgotCSAgQWRkZWQgZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUoKSB0byB0aGUgaGVhZGVyCi0KLTIwMDUtMDgtMDMgMTY6MTA6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGZpeGVkIGRpc3RjaGVjayBicmVha2FnZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXhlZCBkaXN0Y2hlY2sgYnJlYWthZ2UKLQotMjAwNS0wOC0wMyAxNTo1OToxMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIGNoZWNrL2dzdC1saWJzL2NvbnRyb2xsZXIuYzoKLQkqIGdzdC9iYXNlL2dzdHB1c2hzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtY29udHJvbGxlci5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jOgotCSAgYWRkZWQgY2hlY2sgdGVzdCBzdWl0ZSBmb3IgdGhlIGNvbnRyb2xsZXIgZml4ZWQgYSBkb2MgdHlwbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRlZCBjaGVjayB0ZXN0IHN1aXRlIGZvciB0aGUgY29udHJvbGxlcgotCSAgZml4ZWQgYSBkb2MgdHlwbwotCi0yMDA1LTA4LTAzIDEzOjMwOjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzcmMuc2dtbDoKLQkqIGdzdC9iYXNlL1JFQURNRToKLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOgotCSogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9SRUFETUU6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oOgotCSAgYWRkIHNob3J0L2xvbmcgZGVzY3JpcHRpb24gZG9jcyB0byBiYXNlIGNsYXNzZXMgYWRkIHB1c2hzcmMgdG8gdGhlIGRvY3MgcmVtb3ZlIGNvbnNvbGlkYXRlZCBkb2MgZnJhZ21lbnRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBzaG9ydC9sb25nIGRlc2NyaXB0aW9uIGRvY3MgdG8gYmFzZSBjbGFzc2VzCi0JICBhZGQgcHVzaHNyYyB0byB0aGUgZG9jcwotCSAgcmVtb3ZlIGNvbnNvbGlkYXRlZCBkb2MgZnJhZ21lbnRzCi0KLTIwMDUtMDgtMDIgMjE6Mzk6MzQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluOgotCSAgdGhhdCBvbmUgdG9vCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRoYXQgb25lIHRvbwotCi0yMDA1LTA4LTAyIDIxOjM4OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYy5pbjoKLQkgIGFkZGVkIG1pc3NpbmcgcGMgZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkZWQgbWlzc2luZyBwYyBmaWxlcwotCi0yMDA1LTA4LTAyIDIxOjM1OjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXZlbnQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6Ci0JKiBleGFtcGxlcy9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL2NvbnRyb2xsZXIvLmdpdGlnbm9yZToKLQkqIGV4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYzoKLQkqIGxpYnMvZ3N0L01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvY29udHJvbGxlci8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWNvbnRyb2xsZXIuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0LWhlbHBlci5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3QtaW50ZXJwb2xhdGlvbi5jOgotCSogbGlicy9nc3QvY29udHJvbGxlci9nc3Rjb250cm9sbGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGNvbnRyb2xsZXIuaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aGVscGVyLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb24uYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2xsZXIvbGliLmM6Ci0JKiBwa2djb25maWcvTWFrZWZpbGUuYW06Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2wtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2wucGMuaW46Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY29udHJvbGxlci8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jb250cm9sbGVyLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2NvbnRyb2xsZXIvaW50ZXJwb2xhdG9yLmM6Ci0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvY29udHJvbGxlci8uZ2l0aWdub3JlOgotCSogdGVzdHN1aXRlL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvY29udHJvbGxlci9pbnRlcnBvbGF0b3IuYzoKLQkgIGFkZGVkIGNvbnRyb2xsZXIgY29kZSByZW1vdmVkIGRwYXJhbSBwYyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRlZCBjb250cm9sbGVyIGNvZGUKLQkgIHJlbW92ZWQgZHBhcmFtIHBjIGZpbGVzCi0KLTIwMDUtMDgtMDEgMjE6MTc6MDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiBCcm9hZGNhc3QgdGhlIGNvbmRpdGlvbiB3aGVuIHNodXR0aW5nIGRvd24sIHRvIG1ha2Ugc3VyZSB3ZSB3YWtlIGFsbCB0aHJlYWRzIHVwLiBTaHV0IGRvd24uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5jOiAoZ3N0X2NvbGxlY3RwYWRzX2ZpbmFsaXplKSwKLQkgIChnc3RfY29sbGVjdHBhZHNfc3RvcCk6Ci0JICBCcm9hZGNhc3QgdGhlIGNvbmRpdGlvbiB3aGVuIHNodXR0aW5nIGRvd24sIHRvIG1ha2Ugc3VyZSB3ZSB3YWtlIGFsbAotCSAgdGhyZWFkcyB1cC4gU2h1dCBkb3duIHBhZHMgb24gZmluYWxpemUsIGZvciBzYWZldHkuCi0KLTIwMDUtMDgtMDEgMTc6MjY6MDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEhhbmRsZSBQQVVTRUQtPlJFQURZLT5QQVVTRUQgdHJhbnNpdGlvbiBhZnRlciBuZWdvdGlhdGlvbiBvY2N1cnJlZCBhbHJlYWR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA4LTAxICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYW5nZV9zdGF0ZSk6Ci0JICBIYW5kbGUgUEFVU0VELT5SRUFEWS0+UEFVU0VEIHRyYW5zaXRpb24gYWZ0ZXIgbmVnb3RpYXRpb24KLQkgIG9jY3VycmVkIGFscmVhZHkuCi0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9pbml0KToKLQkgIEV4dHJhIHBpZWNlIG9mIGRlYnVnIGZvciBuZXcgbWVzc2FnZXMuCi0KLTIwMDUtMDgtMDEgMTY6NDM6NTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSAgcmVtb3ZlIGRwYXJhbXMgZGVwcyBmcm9tIHRoZSBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBkcGFyYW1zIGRlcHMgZnJvbSB0aGUgZG9jcwotCi0yMDA1LTA4LTAxIDE2OjE3OjMxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGV2ZW50LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzcmMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0Zm9ybWF0LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGdob3N0cGFkLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhZC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RxdWVyeS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RzdHJ1Y3R1cmUuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnbGlzdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R2YWx1ZS5zZ21sOgotCSogZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMudHlwZXM6Ci0JKiBsaWJzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvLmdpdGlnbm9yZToKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvTWFrZWZpbGUuYW06Ci0JKiBsaWJzL2dzdC9jb250cm9sL2NvbnRyb2wuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvY29udHJvbC5oOgotCSogbGlicy9nc3QvY29udHJvbC9kcGFyYW0uYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvZHBhcmFtLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sL2RwYXJhbV9zbW9vdGguYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvZHBhcmFtX3Ntb290aC5oOgotCSogbGlicy9nc3QvY29udHJvbC9kcGFyYW1jb21tb24uaDoKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvZHBhcmFtbWFuYWdlci5jOgotCSogbGlicy9nc3QvY29udHJvbC9kcGFyYW1tYW5hZ2VyLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sL2RwbGluZWFyaW50ZXJwLmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sL2RwbGluZWFyaW50ZXJwLmg6Ci0JKiBsaWJzL2dzdC9jb250cm9sL3VuaXRjb252ZXJ0LmM6Ci0JKiBsaWJzL2dzdC9jb250cm9sL3VuaXRjb252ZXJ0Lmg6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9keW5wYXJhbXMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZHlucGFyYW1zL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9keW5wYXJhbXMvZHBhcmFtc3Rlc3QuYzoKLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9keW5wYXJhbXMvLmdpdGlnbm9yZToKLQkqIHRlc3RzdWl0ZS9keW5wYXJhbXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvZHlucGFyYW1zL2RwYXJhbXN0ZXN0LmM6Ci0JKiB0b29scy9NYWtlZmlsZS5hbToKLQkqIHRvb2xzL2dzdC1pbnNwZWN0LmM6Ci0JKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSAgZGVhY3RpdmF0ZSBhbmQgcmVtb3ZlIGRwYXJhbXMgKGxpYmdzdGNvbnRyb2wpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRlYWN0aXZhdGUgYW5kIHJlbW92ZSBkcGFyYW1zIChsaWJnc3Rjb250cm9sKQotCi0yMDA1LTA4LTAxIDExOjE1OjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lio6IFNldCBjYXBzIG9uIGFsbCBvdXRnb2luZyBidWZmZXJzLCBub3QganVzdCB0aGUgZmlyc3Qgb25lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGF2ZV90eXBlKSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9pbml0KSwKLQkgIChzdG9wX3R5cGVmaW5kaW5nKSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbiksIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0cmFuZ2UpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JICBTZXQgY2FwcyBvbiBhbGwgb3V0Z29pbmcgYnVmZmVycywgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4KLQotMjAwNS0wOC0wMSAwOToxMDowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC4qOiBTZXQgY2FwcyBvbiBmaXJzdCBvdXRnb2luZyBidWZmZXIgd2hlbiB3ZSd2ZSBmb3VuZCB0aGUgdHlwZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhdmVfdHlwZSksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoZWNrX3NldF9idWZmZXJfY2FwcyksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2luaXQpLCAoc3RvcF90eXBlZmluZGluZyksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluKSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9nZXRyYW5nZSk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkgIFNldCBjYXBzIG9uIGZpcnN0IG91dGdvaW5nIGJ1ZmZlciB3aGVuIHdlJ3ZlIGZvdW5kIHRoZSB0eXBlLgotCi0yMDA1LTA4LTAxIDA4OjUyOjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL2dzdC86IFJlbW92ZSBzb21lIG9sZCBjcnVmdCBmcm9tIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RzY2hlZHVsZXIuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RzY2hlZHVsZXJmYWN0b3J5LnNnbWw6Ci0JICBSZW1vdmUgc29tZSBvbGQgY3J1ZnQgZnJvbSBkb2NzLgotCi0yMDA1LTA3LTMxIDExOjU5OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ3N0cGFkLmg6IEZpeCBpbmxpbmUgZG9jcyBmb3IgR3N0UGFkTGlua1JldHVybi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBGaXggaW5saW5lIGRvY3MgZm9yIEdzdFBhZExpbmtSZXR1cm4uCi0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUpOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmg6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICBOZXcgQVBJOiBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKCkuCi0KLTIwMDUtMDctMzAgMTU6MDA6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogVXNlIEFDX1NZU19MQVJHRUZJTEUsIHdoaWNoIHdpbGwgc2V0IF9GSUxFX09GRlNFVF9CSVRTPTY0IGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBpbiBjb25maWcuaCBhcyByZXF1aXJlZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFVzZSBBQ19TWVNfTEFSR0VGSUxFLCB3aGljaCB3aWxsIHNldCBfRklMRV9PRkZTRVRfQklUUz02NAotCSAgYW5kIF9MQVJHRUZJTEVfU09VUkNFIGluIGNvbmZpZy5oIGFzIHJlcXVpcmVkLiBEbyBub3QKLQkgIGV4cG9ydCB0aG9zZSBmbGFncyBpbiBvdXIgLnBjIGZpbGVzIGFueSBsb25nZXIgKCMxNDIyMDkpLgotCSAgUmVtb3ZlIHVudXNlZCBHU1RfRElTQUJMRV9PTUVHQV9DT1RIUkVBRFMgc3R1ZmYuCi0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVfc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfZmlsZV9zaW5rX2RvX3NlZWspLCAoZ3N0X2ZpbGVfc2lua19ldmVudCksCi0JICAoZ3N0X2ZpbGVfc2lua19nZXRfY3VycmVudF9vZmZzZXQpLCAoZ3N0X2ZpbGVfc2lua19yZW5kZXIpOgotCSAgUmVkbyBzZWVrL3RlbGwgY2FsbHMgd2l0aCBsYXJnZSBmaWxlIHN1cHBvcnQgaW4gbWluZDsgYWRkIHNvbWUKLQkgIGRlYnVnZ2luZyBtZXNzYWdlczsgYWRkIGxvZyBtZXNzYWdlIHRoYXQgdGVsbHMgdXMgd2hlbiBsYXJnZQotCSAgZmlsZSBzdXBwb3J0IGlzIHVuYXZhaWxhYmxlIG9yIG5vdCBlbmFibGVkIGZvciBzb21lIHJlYXNvbi4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlX3NyY19jbGFzc19pbml0KToKLQkgIEFkZCBsb2cgbWVzc2FnZSB0aGF0IHRlbGxzIHVzIHdoZW4gbGFyZ2UgZmlsZSBzdXBwb3J0Ci0JICBpcyB1bmF2YWlsYWJsZSBvciBub3QgZW5hYmxlZCBmb3Igc29tZSByZWFzb24uCi0KLTIwMDUtMDctMjkgMTk6MjI6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jOiBBZGRlZCB0ZXN0IGZvciByZW1vdmluZyBhbiBlbGVtZW50IHdpdGggZ2hvc3RwYWQgZnJvbSBhIGJpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgotCSAgQWRkZWQgdGVzdCBmb3IgcmVtb3ZpbmcgYW4gZWxlbWVudCB3aXRoIGdob3N0cGFkIGZyb20gYSBiaW4uCi0JICBGaXhlZCB0ZXN0IGFzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyB0aGUgcmlnaHQgdGhpbmcuCi0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9jbGFzc19pbml0KSwKLQkgIChnc3RfcHJveHlfcGFkX2RvX3F1ZXJ5X3R5cGUpLCAoZ3N0X3Byb3h5X3BhZF9kb19ldmVudCksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19xdWVyeSksIChnc3RfcHJveHlfcGFkX2RvX2ludGVybmFsX2xpbmspLAotCSAgKGdzdF9wcm94eV9wYWRfZG9fYnVmZmVyYWxsb2MpLCAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZSksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZXB1bGwpLCAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZXB1c2gpLAotCSAgKGdzdF9wcm94eV9wYWRfZG9fY2hhaW4pLCAoZ3N0X3Byb3h5X3BhZF9kb19nZXRyYW5nZSksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19jaGVja2dldHJhbmdlKSwgKGdzdF9wcm94eV9wYWRfZG9fZ2V0Y2FwcyksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19hY2NlcHRjYXBzKSwgKGdzdF9wcm94eV9wYWRfZG9fZml4YXRlY2FwcyksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19zZXRjYXBzKSwgKGdzdF9wcm94eV9wYWRfc2V0X3RhcmdldCksCi0JICAoZ3N0X3Byb3h5X3BhZF9nZXRfdGFyZ2V0KSwgKGdzdF9wcm94eV9wYWRfaW5pdCksCi0JICAoZ3N0X3Byb3h5X3BhZF9kaXNwb3NlKSwgKGdzdF9wcm94eV9wYWRfZmluYWxpemUpLAotCSAgKGdzdF9naG9zdF9wYWRfY2xhc3NfaW5pdCksIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9naG9zdF9wYWRfZG9fbGluayksIChnc3RfZ2hvc3RfcGFkX2RvX3VubGluayksCi0JICAoZ3N0X2dob3N0X3BhZF9zZXRfaW50ZXJuYWwpLCAoZ3N0X2dob3N0X3BhZF9kaXNwb3NlKSwKLQkgIChnc3RfZ2hvc3RfcGFkX25ld19ub3RhcmdldCksIChnc3RfZ2hvc3RfcGFkX25ldyksCi0JICAoZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0KSwgKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCk6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5oOgotCSAgQ2xlYW4gdXAgZ2hvc3RwYWRzLCByZW1vdmUgcHJvcGVydGllcyBmb3IgaW50ZXJuYWwgc3R1ZmYuCi0JICBNYWtlIHRocmVhZHNhZmUuCi0JICBGaXggcmVmY291bnRpbmcuCi0JICBQcmVwYXJlIGZvciBzd2l0Y2hpbmcgdGFyZ2V0cywgbm90IGFsbCB1c2UgY2FzZXMgd29yayB5ZXQuCi0KLTIwMDUtMDctMjkgMTk6MTk6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OiBTbWFsbCB1cGRhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6Ci0JICBTbWFsbCB1cGRhdGUuCi0JICAqIGdzdC9nc3RiaW4uYzogKHVubGlua19wYWRzKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAotCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpOgotCSAgVW5saW5raW5nIHBhZHMgd2hpbGUgaG9sZGluZyB0aGUgYmluIExPQ0sgaXMgbm90IGEgZ29vZAotCSAgaWRlYS4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9jbGFzc19pbml0KSwKLQkgIChnc3RfcGFkX2xpbmtfY2hlY2tfaGllcmFyY2h5KSwgKGdzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQpLAotCSAgKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9zZXRfY2FwcyksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgotCSAgTm8gcHJvYiBzZXR0aW5nIHRlbXBsYXRlIGFmdGVyIGNyZWF0aW5nIHRoZSBwYWQuCi0KLTIwMDUtMDctMjkgMTU6MzQ6NTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ3N0YnVzLmM6IGdzdF9idXNfcG9sbCBtYXkgYmUgY2FsbGVkIGZyb20gb3RoZXIgdGhyZWFkcy4gSGFuZGxlIHRoaXMgbmljZWx5IGJ5IG5vdCBtYWtpbmcgcG9sbF9kYXRhIGRpc2FwcGVhciBvZmYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX3NldF9mbHVzaGluZyksIChnc3RfYnVzX3BvcCksCi0JICAoZ3N0X2J1c19wZWVrKSwgKGdzdF9idXNfc291cmNlX2Rpc3BhdGNoKSwKLQkgIChnc3RfYnVzX2FkZF93YXRjaF9mdWxsKSwgKHBvbGxfaGFuZGxlciksIChwb2xsX3RpbWVvdXQpLAotCSAgKHBvbGxfZGVzdHJveSksIChwb2xsX2Rlc3Ryb3lfdGltZW91dCksIChnc3RfYnVzX3BvbGwpOgotCSAgZ3N0X2J1c19wb2xsIG1heSBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aHJlYWRzLiBIYW5kbGUKLQkgIHRoaXMgbmljZWx5IGJ5IG5vdCBtYWtpbmcgcG9sbF9kYXRhIGRpc2FwcGVhciBvZmYgdGhlCi0JICBzdGFjayBvbmNlIGdzdF9idXNfcG9sbCByZXR1cm5zLgotCSAgZ3N0X2J1c19wZWVrIG5vdyBpbmNyZW1lbnRzIHRoZSByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQKLQkgIG1lc3NhZ2UuCi0KLTIwMDUtMDctMjkgMTE6Mjk6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0OiBPdmVydmlldyBvZiBjdXJyZW50IEdob3N0UGFkIGRhdGFzdHJ1Y3R1cmVzIGFuZCB1c2UgY2FzZXMgZm9yIGNoYW5naW5nIHRoZSB0YXJnZXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQ6Ci0JICBPdmVydmlldyBvZiBjdXJyZW50IEdob3N0UGFkIGRhdGFzdHJ1Y3R1cmVzIGFuZCB1c2UKLQkgIGNhc2VzIGZvciBjaGFuZ2luZyB0aGUgdGFyZ2V0LgotCi0yMDA1LTA3LTI4IDE1OjM4OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IEFkZGVkIGNoZWNrcyBmb3IgaGllcmFyY2h5IGNvbnNpc3RlbmN5IHdoYW4gYWRkaW5nIGxpbmtlZCBlbGVtZW50cyB0byBiaW5zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9iaW5fc3VpdGUpOgotCSAgQWRkZWQgY2hlY2tzIGZvciBoaWVyYXJjaHkgY29uc2lzdGVuY3kgd2hhbiBhZGRpbmcgbGlua2VkCi0JICBlbGVtZW50cyB0byBiaW5zLgotCSAgKiBjaGVjay9nc3QvZ3N0ZWxlbWVudC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoZ3N0X2VsZW1lbnRfc3VpdGUpOgotCSAgQWRkZWQgY2hlY2sgdG8gdGVzdCBlbGVtZW50IHNjaGVkdWxpbmcgd2l0aG91dCBiaW4vcGlwZWxpbmUuCi0JICAqIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBGaXJzdCBhZGQgZWxlbWVudHMgdG8gYmluLCB0aGVuIGxpbmsuCi0JICAqIGdzdC9nc3RiaW4uYzogKHVubGlua19wYWRzKSwgKGdzdF9iaW5fYWRkX2Z1bmMpLAotCSAgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpOgotCSAgVW5saW5rIHBhZHMgZnJvbSBlbGVtZW50cyBhZGRlZC9yZW1vdmVkIGZyb20gYmluIHRvIG1haW50YWluCi0JICBoaWVyYXJjaHkgY29uc2lzdGVuY3kuCi0KLTIwMDUtMDctMjggMTE6NDk6NTYgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBSZW1vdmUgYnJva2VuIGRlbGF5X2NvbmZpZ3VyZSAoZml4ZXMgcmVuZWdvdGlhdGlvbiBvZiBzb2Z0d2FyZSBzY2FsaW5nIHBpcGVsaW5lcyk7IHJlbW92Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgUmVtb3ZlIGJyb2tlbiBkZWxheV9jb25maWd1cmUgKGZpeGVzIHJlbmVnb3RpYXRpb24gb2Ygc29mdHdhcmUKLQkgIHNjYWxpbmcgcGlwZWxpbmVzKTsgcmVtb3ZlIHNvbWUgbGVmdG92ZXIgcHJpbnRmKClzLgotCi0yMDA1LTA3LTI4IDExOjI0OjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogQWRkZWQgc29tZSBtb3JlIHRlc3RzIGZvciB3cm9uZyBoaWVyYXJjaHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF9naG9zdF9wYWRfc3VpdGUpOgotCSAgQWRkZWQgc29tZSBtb3JlIHRlc3RzIGZvciB3cm9uZyBoaWVyYXJjaHkKLQkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JICBTb21lIHVwZGF0ZXMuCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpLCAoZ3N0X2Jpbl9kaXNwb3NlKToKLQkgIENsZWFudXBzLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCksIChnc3RfZWxlbWVudF9zZWVrKSwKLQkgIChnc3RfZWxlbWVudF9kaXNwb3NlKToKLQkgIFNvbWUgbW9yZSBjbGVhbnVwcy4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9saW5rX2NoZWNrX2NvbXBhdGlibGVfdW5sb2NrZWQpLAotCSAgKGdzdF9wYWRfbGlua19jaGVja19oaWVyYXJjaHkpLCAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLAotCSAgKGdzdF9wYWRfZ2V0X2NhcHNfdW5sb2NrZWQpLCAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksCi0JICAoZ3N0X3BhZF9zZXRfY2FwcyksIChnc3RfcGFkX3NlbmRfZXZlbnQpOgotCSAgQ2hlY2sgZm9yIGNvcnJlY3QgaGllcmFyY2h5IHdoZW4gbGlua2luZyBwYWRzLiBNb3ZpbmcgdG8KLQkgIHN0cmljdCByZXF1aXJlbWVudCBmb3IgZ2hvc3RwYWRzIHdoZW4gbGlua2luZyBlbGVtZW50cyBpbgotCSAgZGlmZmVyZW50IGJpbnMuCi0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIENsZWFuIHVwcy4gQWRkZWQgV1JPTkdfSElFUkFSQ0hZIHJldHVybiB2YWx1ZS4KLQotMjAwNS0wNy0yOCAxMDozODowMiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IEJldHRlciBkZWJ1ZyBpZiBubyB0cmFuc2Zvcm0gaXMgcG9zc2libGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpOgotCSAgQmV0dGVyIGRlYnVnIGlmIG5vIHRyYW5zZm9ybSBpcyBwb3NzaWJsZS4KLQotMjAwNS0wNy0yNyAyMDoyMjo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9yYW5kb20vd3RheS9uZXR3b3JrLXRyYW5zcDogU29tZSBvbGQgZG9jIEkgaGFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL3d0YXkvbmV0d29yay10cmFuc3A6Ci0JICBTb21lIG9sZCBkb2MgSSBoYWQuCi0KLTIwMDUtMDctMjcgMTk6MDA6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogRml4IHNlcmlhbGl6YXRpb24gb2Ygc2VlayBldmVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KSwKLQkgIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQpOgotCSAgRml4IHNlcmlhbGl6YXRpb24gb2Ygc2VlayBldmVudHMuCi0KLTIwMDUtMDctMjcgMTg6NDc6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEZpeCBjb21waWxhdGlvbiBhbmQgZml4IGV2ZW50IHNlcmlhbGl6YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0LWxpYnMvZ2RwLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOiAoZ3N0X2Zha2Vfc2lua19ldmVudCk6Ci0JICBGaXggY29tcGlsYXRpb24gYW5kIGZpeCBldmVudCBzZXJpYWxpemF0aW9uLgotCi0yMDA1LTA3LTI3IDE4OjMzOjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBTb21lIGRvY3MgdXBkYXRlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIENIQU5HRVMtMC45OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICBTb21lIGRvY3MgdXBkYXRlcwotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCi0JICAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVsbCk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlX3NyY19zZW5kX2Rpc2NvbnQpLAotCSAgKGdzdF9iYXNlX3NyY19kb19zZWVrKSwgKGdzdF9iYXNlX3NyY19ldmVudF9oYW5kbGVyKSwKLQkgIChnc3RfYmFzZV9zcmNfbG9vcCk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3NpemUpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2J1ZmZlcl9hbGxvYyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2gpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlX3NpbmtfZXZlbnQpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzogKGdzdF9maWxlX3NpbmtfZXZlbnQpOgotCSAgRXZlbnQgdXBkYXRlcy4KLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgVXNlIGZhc3RlciBjYXN0cy4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3NlZWspOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgVXBkYXRlIGdzdF9lbGVtZW50X3NlZWsuCi0JICAqIGdzdC9nc3RldmVudC5jOiAoZ3N0X2V2ZW50X2ZpbmFsaXplKSwgKF9nc3RfZXZlbnRfY29weSksCi0JICAoZ3N0X2V2ZW50X25ldyksIChnc3RfZXZlbnRfbmV3X2N1c3RvbSksIChnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSksCi0JICAoZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCksIChnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3ApLAotCSAgKGdzdF9ldmVudF9uZXdfZW9zKSwgKGdzdF9ldmVudF9uZXdfbmV3c2VnbWVudCksCi0JICAoZ3N0X2V2ZW50X3BhcnNlX25ld3NlZ21lbnQpLCAoZ3N0X2V2ZW50X25ld190YWcpLAotCSAgKGdzdF9ldmVudF9wYXJzZV90YWcpLCAoZ3N0X2V2ZW50X25ld19maWxsZXIpLCAoZ3N0X2V2ZW50X25ld19xb3MpLAotCSAgKGdzdF9ldmVudF9wYXJzZV9xb3MpLCAoZ3N0X2V2ZW50X25ld19zZWVrKSwKLQkgIChnc3RfZXZlbnRfcGFyc2Vfc2VlayksIChnc3RfZXZlbnRfbmV3X25hdmlnYXRpb24pOgotCSAgKiBnc3QvZ3N0ZXZlbnQuaDoKLQkgIE1ha2UgR3N0RXZlbnQgdXNlIEdzdFN0cnVjdHVyZS4gQWRkIHBhcnNpbmcgY29kZSwgbWFrZSBzdXJlIHRoZQotCSAgQVBJIGlzIHN1ZmZpY2llbnRseSBnZW5lcmljLgotCSAgTWFyayBwb3NzaWJsZSBkaXJlY3Rpb25zIG9mIGV2ZW50cyBhbmQgc2VyaWFsaXphdGlvbi4KLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX2luaXQpLCAoZ3N0X21lc3NhZ2VfZmluYWxpemUpLAotCSAgKF9nc3RfbWVzc2FnZV9jb3B5KSwgKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0KSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX25ld19jdXN0b20pLAotCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQpLAotCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZSk6Ci0JICBTbWFsbCBjbGVhbnVwcy4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfY2Fwc191bmxvY2tlZCksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwKLQkgIChnc3RfcGFkX3NldF9jYXBzKSwgKGdzdF9wYWRfc2VuZF9ldmVudCk6Ci0JICBVcGRhdGUgZm9yIG5ldyBldmVudHMuCi0JICBDYXRjaCBldmVudHMgc2VudCBpbiB3cm9uZyBkaXJlY3Rpb25zLgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9saW5rX3NyYyksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9xdWV1ZV9jaGFpbiksIChnc3RfcXVldWVfbG9vcCksCi0JICAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpOgotCSAgRXZlbnQgdXBkYXRlcy4KLQkgICogZ3N0L2dzdHRhZy5jOgotCSAgKiBnc3QvZ3N0dGFnLmg6Ci0JICBSZW1vdmUgZXZlbnQgY29kZSBmcm9tIHRoaXMgZmlsZS4KLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOiAoZ3N0X2RwX3BhY2tldF9mcm9tX2V2ZW50KSwKLQkgIChnc3RfZHBfZXZlbnRfZnJvbV9wYWNrZXQpOgotCSAgRXZlbnQgdXBkYXRlcy4KLQotMjAwNS0wNy0yNyAxNTowNTo0NSArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IE1ha2UgZGVidWdnaW5nIGFjdHVhbGx5IHVzZWZ1bC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0Y2FwcyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3NpemUpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpOgotCSAgTWFrZSBkZWJ1Z2dpbmcgYWN0dWFsbHkgdXNlZnVsLgotCi0yMDA1LTA3LTI1IDEyOjMxOjA4ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9nc3RwYWQuYzogSW1wbGVtZW50IGRlZmF1bHQgZml4YXRpb24gb25jZSBhZ2Fpbiwgc28gdGhhdCBnc3RfcGFkX2ZpeGF0ZSgpIGFjdHVhbGx5IGRvZXMgYW55dGhpbmcgYXQgYWxsLiBUaGlzIHByby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGZpeGF0ZV92YWx1ZSksIChnc3RfcGFkX2RlZmF1bHRfZml4YXRlKSwKLQkgIChnc3RfcGFkX2ZpeGF0ZV9jYXBzKToKLQkgIEltcGxlbWVudCBkZWZhdWx0IGZpeGF0aW9uIG9uY2UgYWdhaW4sIHNvIHRoYXQgZ3N0X3BhZF9maXhhdGUoKQotCSAgYWN0dWFsbHkgZG9lcyBhbnl0aGluZyBhdCBhbGwuIFRoaXMgcHJvYmFibHkgbmVlZHMgdG8gYmUgc29tZQotCSAgc29ydCBvZiBhIGxhc3QgcmVzb3J0LCBhbmQgdXNlIHByb2ZpbGUtYmFzZWQgZml4YXRpb24gZmlyc3QsIGJ1dAotCSAgc2luY2UgdGhhdCBkb2Vzbid0IGV4aXN0IHlldCwgdGhpcyBpcyB0aGUgYmVzdCB3ZSBoYXZlLiBGaXhlcwotCSAgdmlzdWFsaXphdGlvbiBpbiBUb3RlbS4KLQotMjAwNS0wNy0yMiAxMTo0NzoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OiBTbWFsbCB1cGRhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgU21hbGwgdXBkYXRlLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19hY3RpdmF0ZV9wdXNoKSwKLQkgIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpOgotCSAgU29tZSBtb3JlIGNvbW1lbnRzLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mYWtlX3NyY19jcmVhdGUpOgotCSAgRml4IGhhbmRvZmYgbWFyc2hhbGwuCi0JICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9pZGVudGl0eV90cmFuc2Zvcm1faXApOgotCSAgV2UncmUgYSByZWFsIGlucGxhY2UgZWxlbWVudC4KLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KToKLQkgIEFkZGVkIHNvbWUgY29tbWVudHMuCi0JICAqIHRlc3RzL2xhdC5jOiAoZmFrZXNyYyksIChmYWtlc2luayksIChzaW1wbGUpLCAocXVldWUpLCAobWFpbik6Ci0JICAqIHRlc3RzL211eGluZy9jYXNlMS5jOiAobWFpbik6Ci0JICAqIHRlc3RzL3NjaGVkL2R5bmFtaWMtcGlwZWxpbmUuYzogKG1haW4pOgotCSAgKiB0ZXN0cy9zY2hlZC9pbnRlcnJ1cHQxLmM6IChtYWluKToKLQkgICogdGVzdHMvc2NoZWQvaW50ZXJydXB0Mi5jOiAobWFpbik6Ci0JICAqIHRlc3RzL3NjaGVkL2ludGVycnVwdDMuYzogKG1haW4pOgotCSAgKiB0ZXN0cy9zY2hlZC9ydW54bWwuYzogKG1haW4pOgotCSAgKiB0ZXN0cy9zY2hlZC9zY2hlZC1zdHJlc3MuYzogKG1haW4pOgotCSAgKiB0ZXN0cy9zZWVraW5nL3NlZWtpbmcxLmM6IChldmVudF9yZWNlaXZlZCksIChtYWluKToKLQkgICogdGVzdHMvdGhyZWFkc3RhdGUvdGhyZWFkc3RhdGUyLmM6IChidXNfaGFuZGxlciksICh0aW1lb3V0X2Z1bmMpLAotCSAgKG1haW4pOgotCSAgKiB0ZXN0cy90aHJlYWRzdGF0ZS90aHJlYWRzdGF0ZTMuYzogKG1haW4pOgotCSAgKiB0ZXN0cy90aHJlYWRzdGF0ZS90aHJlYWRzdGF0ZTQuYzogKG1haW4pOgotCSAgKiB0ZXN0cy90aHJlYWRzdGF0ZS90aHJlYWRzdGF0ZTUuYzogKG1haW4pOgotCSAgRml4IHRoZSB0ZXN0cy4KLQotMjAwNS0wNy0yMSAxNzoyMjoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDogU29tZSBzbWFsbCBhZGRpdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dDoKLQkgIFNvbWUgc21hbGwgYWRkaXRpb25zLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2dldF90aW1lcyksIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLAotCSAgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVzaCksIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1bGwpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgZGlzY29udCB2YWx1ZXMgYXJlIGdpbnQ2NCwgaGFuZGxlIHRoZSBtYXRoIGNvcnJlY3RseS4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgotCSAgTWFrZSB0aGUgYmFzZXNyYyByZXBvcnQgZXJyb3IgaWYgdGhlIHNvdXJjZSBwYWQgaXMgbm90IGxpbmtlZC4KLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbGlua19zcmMpLCAoZ3N0X3F1ZXVlX2NoYWluKSwKLQkgIChnc3RfcXVldWVfbG9vcCksIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSksCi0JICAoZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9wdXNoKToKLQkgIE1ha2UgcXVldWUgY29sbGVjdCBkYXRhIGV2ZW4gaWYgdGhlIHNyY3BhZCBpcyBub3QgbGlua2VkLgotCSAgU3RhcnQgcHVzaGluZyBvdXQgZGF0YSBhcyBzb29uIGFzIGl0IGlzIGxpbmtlZC4KLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF91bmxpbmspLCAoZ3N0X2Zsb3dfZ2V0X25hbWUpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFkZGVkIGdzdF9mbG93X2dldF9uYW1lKCkgdG8gZWFzZSBlcnJvciByZXBvcnRpbmcuCi0KLTIwMDUtMDctMjAgMTg6MDI6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RtZXNzYWdlLio6IEFkZGVkIGEgYnVuY2ggb2YgbWVzc2FnZXMgZm9yIGFkdmFuY2VkIHNlZWtpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0KSwKLQkgIChnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lKSwgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQpLAotCSAgKGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZSk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBBZGRlZCBhIGJ1bmNoIG9mIG1lc3NhZ2VzIGZvciBhZHZhbmNlZCBzZWVraW5nLgotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgKiBsaWJzL2dzdC9jb250cm9sL2RwYXJhbW1hbmFnZXIuYzogKGdzdF9kcG1hbl9zZXRfcGFyZW50KSwKLQkgIChnc3RfZHBtYW5fc3RhdGVfY2hhbmdlZCk6Ci0JICBGaXggc29tZSBuZXctcGFkIC0+IHBhZC1hZGRlZCBzaWduYWxzCi0KLTIwMDUtMDctMjAgMTc6MjI6MjcgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZG9jcy86IERvY3VtZW50IG5ldy1wYWQvc3RhdGUtY2hhbmdlIHNpZ25hbCByZW5hbWVzIGFuZCB0aGUgRml4ZWRMaXN0IHR5cGUgcmVuYW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LXBvcnRpbmcueG1sOgotCSAgKiBkb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKLQkgIERvY3VtZW50IG5ldy1wYWQvc3RhdGUtY2hhbmdlIHNpZ25hbCByZW5hbWVzIGFuZCB0aGUgRml4ZWRMaXN0Ci0JICB0eXBlIHJlbmFtZS4KLQotMjAwNS0wNy0yMCAxNzoxNjo0NCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBHc3RFbGVtZW50OjpuZXctcGFkIC0+IHBhZC1hZGRlZCwgR3N0RWxlbWVudDo6c3RhdGUtY2hhbmdlIC0+IHN0YXRlLWNoYW5nZWQsIEdzdFZhbHVlRml4ZWRMaXN0IC0+IEdzdFZhbHVlQXJyYXksIGFkZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sOgotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbDoKLQkgICogZG9jcy9yYW5kb20vZHMvMC45LXN1Z2dlc3RlZC1jaGFuZ2VzOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCksIChnc3RfZWxlbWVudF9zZWVrKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3Rmb3JtYXQuaDoKLQkgICogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzogKGdzdF9zdHJ1Y3R1cmVfdmFsdWVfZ2V0X2dlbmVyaWNfdHlwZSksCi0JICAoZ3N0X3N0cnVjdHVyZV9wYXJzZV9hcnJheSksIChnc3Rfc3RydWN0dXJlX3BhcnNlX3ZhbHVlKToKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdHlwZV9pc19maXhlZCksCi0JICAoZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZSksIChnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUpLAotCSAgKGdzdF92YWx1ZV9saXN0X2dldF9zaXplKSwgKGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSksCi0JICAoZ3N0X3ZhbHVlX3RyYW5zZm9ybV9hcnJheV9zdHJpbmcpLCAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9hcnJheSksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2FycmF5KSwgKGdzdF92YWx1ZV9pbnRlcnNlY3RfYXJyYXkpLAotCSAgKGdzdF92YWx1ZV9pc19maXhlZCksIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgotCSAgKiBnc3QvZ3N0dmFsdWUuaDoKLQkgIEdzdEVsZW1lbnQ6Om5ldy1wYWQgLT4gcGFkLWFkZGVkLCBHc3RFbGVtZW50OjpzdGF0ZS1jaGFuZ2UgLT4KLQkgIHN0YXRlLWNoYW5nZWQsIEdzdFZhbHVlRml4ZWRMaXN0IC0+IEdzdFZhbHVlQXJyYXksIGFkZCBmb3JtYXQgYW5kCi0JICBmbGFncyBhcyB0aGVpciBvd24gYXJndW1lbnRzIGluIGdzdF9lbGVtZW50X3NlZWsoKSAoc2hvdWxkIGltcHJvdmUKLQkgICJiaW5kZWFiaWxpdHkiKSwgcmVtb3ZlIGZ1bmN0aW9uIGdlbmVyYXRvcnMgc2luY2UgdGhleSBkb24ndCB3b3JrCi0JICB1bmRlciBhIHdob2xlIGJ1bmNoIG9mIGNvbXBpbGVycyAodGhleSB3ZXJlIGRlcHJlY2F0ZWQgYWxyZWFkeQotCSAgYW55d2F5KS4KLQotMjAwNS0wNy0yMCAxNzoxNToxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL2dzdC5zdXBwOgotCSogY29tbW9uOgotCSogdGVzdHMvY2hlY2svZ3N0LnN1cHA6Ci0JICBwYXRjaCBmcm9tIEVkZ2FyZCB0byBwcm9wZXJseSBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBmcm9tIEVkZ2FyZCB0byBwcm9wZXJseSBzdXBwcmVzcyB0aGVzZSB3YXJuaW5ncwotCi0yMDA1LTA3LTIwIDE2OjIwOjM5ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9nc3RpbmZvLio6IEZpeCBpbGxlZ2FsIGNhc3Qgb24gc29tZSBwbGF0Zm9ybXMgKCMzMDkyNTMpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RpbmZvLmM6IChfZ3N0X2RlYnVnX25hbWVvZl9mdW5jcHRyKSwKLQkgIChfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIpOgotCSAgKiBnc3QvZ3N0aW5mby5oOgotCSAgRml4IGlsbGVnYWwgY2FzdCBvbiBzb21lIHBsYXRmb3JtcyAoIzMwOTI1MykuCi0KLTIwMDUtMDctMjAgMTE6MzU6MTggKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZ3N0L2dzdG1lc3NhZ2UuKjogQWRkIF9uZXdfY3VzdG9tLCBtYWtlIF9uZXdfYXBwbGljYXRpb24gYSBtYWNybyB0byBfbmV3X2N1c3RvbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBBZGQgX25ld19jdXN0b20sIG1ha2UgX25ld19hcHBsaWNhdGlvbiBhIG1hY3JvIHRvIF9uZXdfY3VzdG9tLgotCi0yMDA1LTA3LTIwIDEwOjU4OjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc3JjLio6IEFkZCBhIGdib29sZWFuIHRvIGRlY2lkZSB3aGVuIHRvIHB1c2ggb3V0IGEgZGlzY29udC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RvX3NlZWspLCAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLCAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgQWRkIGEgZ2Jvb2xlYW4gdG8gZGVjaWRlIHdoZW4gdG8gcHVzaCBvdXQgYSBkaXNjb250LgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pLAotCSAgKGdzdF9xdWV1ZV9sb29wKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfcHVzaCksCi0JICAoZ3N0X3F1ZXVlX3NldF9wcm9wZXJ0eSksIChnc3RfcXVldWVfZ2V0X3Byb3BlcnR5KToKLQkgIFNvbWUgY2xlYW51cHMuCi0JICAqIHRlc3RzL3RocmVhZHN0YXRlL3RocmVhZHN0YXRlMS5jOiAobWFpbik6Ci0JICBNYWtlIGEgdGhyZWFkIHRlc3QgY29tcGlsZSBhbmQgcnVuLi4uIHZlcnkgc2lsbHkuLgotCi0yMDA1LTA3LTIwIDEwOjEzOjQ2ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2FwcGVuZGl4LXBvcnRpbmcueG1sOiBNZW50aW9uIHJlbW92YWwgb2YgbGliZ3N0Z2NvbmYtMC45LmxhIGFuZCBleGlzdGVuY2Ugb2YgZ2NvbmYgZWxlbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JICBNZW50aW9uIHJlbW92YWwgb2YgbGliZ3N0Z2NvbmYtMC45LmxhIGFuZCBleGlzdGVuY2Ugb2YgZ2NvbmYKLQkgIGVsZW1lbnRzLgotCi0yMDA1LTA3LTIwIDA4OjI5OjA2ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGRvY3MvcHdnLzogRG9jdW1lbnQgYmFzZSBjbGFzc2VzLCB1cGRhdGUgc2VjdGlvbnMgb2Ygbi10by0xIGFuZCAxLXRvLW4gKG11eGVyLCBmaXggc29tZSBjb2RlIGV4YW1wbGVzIGFuZCBsaW5rcyBhbmQgdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLWNsb2NrLnhtbDoKLQkgICogZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JICAqIGRvY3MvcHdnL2ludHJvLXByZWZhY2UueG1sOgotCSAgKiBkb2NzL3B3Zy9vdGhlci1iYXNlLnhtbDoKLQkgICogZG9jcy9wd2cvb3RoZXItbWFuYWdlci54bWw6Ci0JICAqIGRvY3MvcHdnL290aGVyLW50b24ueG1sOgotCSAgKiBkb2NzL3B3Zy9vdGhlci1udG9vbmUueG1sOgotCSAgKiBkb2NzL3B3Zy9vdGhlci1vbmV0b24ueG1sOgotCSAgKiBkb2NzL3B3Zy9wd2cueG1sOgotCSAgRG9jdW1lbnQgYmFzZSBjbGFzc2VzLCB1cGRhdGUgc2VjdGlvbnMgb2Ygbi10by0xIGFuZCAxLXRvLW4gKG11eGVyLAotCSAgZGVtdXhlciksIHJlbW92ZSBuLXRvLW4gKHdhcyBuZXZlciB3cml0dGVuKSwgZml4IHNvbWUgY29kZSBleGFtcGxlcwotCSAgYW5kIGxpbmtzIGFuZCB1cGRhdGUgdGhlIHBvcnRpbmcgc2VjdGlvbiB0byBpbmNsdWRlIGFsbCB0aGlzLgotCi0yMDA1LTA3LTE5IDE3OjQ2OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cXVldWUuKjogUHJvcGFnYXRlIEdzdEZsb3dSZXR1cm4gbW9yZSBpbnRlbGxpZ2VudGx5IHVwc3RyZWFtIGFuZCBvdXRwdXQgYW4gRVJST1IvRU9TIHdoZW4gc3RyZWFtaW5nIHN0b3BwZWQgZHUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KSwgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksCi0JICAoZ3N0X3F1ZXVlX2NoYWluKSwgKGdzdF9xdWV1ZV9sb29wKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX2V2ZW50KSwKLQkgIChnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSksIChnc3RfcXVldWVfc2lua19hY3RpdmF0ZV9wdXNoKSwKLQkgIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlX3B1c2gpLCAoZ3N0X3F1ZXVlX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3F1ZXVlX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9nc3RxdWV1ZS5oOgotCSAgUHJvcGFnYXRlIEdzdEZsb3dSZXR1cm4gbW9yZSBpbnRlbGxpZ2VudGx5IHVwc3RyZWFtIGFuZCBvdXRwdXQKLQkgIGFuIEVSUk9SL0VPUyB3aGVuIHN0cmVhbWluZyBzdG9wcGVkIGR1ZSB0byBmYXRhbCBlcnJvci4KLQotMjAwNS0wNy0xOSAxNDo1Mjo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBEb24ndCBibG9jayBmb3JldmVyIGZvciB0aGUgc3RhdGUgY2hhbmdlIHRvIGNvbXBsZXRlLCB0aGUgcGlwZWxpbmUgYWxyZWFkeSBkaWQgd2l0aCBhIHNlbnNpYmxlIHRpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoY2hlY2tfaW50ciksIChldmVudF9sb29wKSwgKG1haW4pOgotCSAgRG9uJ3QgYmxvY2sgZm9yZXZlciBmb3IgdGhlIHN0YXRlIGNoYW5nZSB0byBjb21wbGV0ZSwgdGhlCi0JICBwaXBlbGluZSBhbHJlYWR5IGRpZCB3aXRoIGEgc2Vuc2libGUgdGltZW91dC4KLQotMjAwNS0wNy0xOSAxMzo0Mzo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBNYWtlIHN1cmUgd2UgbmV2ZXIgY2FsbCB0aGUgY3JlYXRlIGZ1bmN0aW9uIGlzIHdlIGdvdCBkZWFjdGl2YXRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZ2V0X3JhbmdlKToKLQkgIE1ha2Ugc3VyZSB3ZSBuZXZlciBjYWxsIHRoZSBjcmVhdGUgZnVuY3Rpb24gaXMgd2UKLQkgIGdvdCBkZWFjdGl2YXRlZC4KLQotMjAwNS0wNy0xOSAxMToyNzowNyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIHVwZGF0ZSBmb3IgbGF0ZXN0IGNoYW5nZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGZvciBsYXRlc3QgY2hhbmdlcwotCi0yMDA1LTA3LTE5IDEwOjQwOjQ5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9wYXJzZS9wYXJzZS5sOiBBdHRlbXB0IHRvIHNvbHZlIGJ1ZyAjMTcyODE1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA3LTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvcGFyc2UvcGFyc2UubDogQXR0ZW1wdCB0byBzb2x2ZSBidWcgIzE3MjgxNS4KLQotMjAwNS0wNy0xOSAwOToxOTowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgU21hbGwgZG9jcyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfZG9fc2Vlayk6Ci0JICBTbWFsbCBkb2NzIHVwZGF0ZXMuCi0JICBPbmx5IHVwZGF0ZSB0aGUgc2Vla2luZyB2YWx1ZXMgd2hlbiB3ZSBhcmUgbm90Ci0JICBidXN5IHN0cmVhbWluZy4KLQotMjAwNS0wNy0xOCAxNzo0Mzo1MiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgT29wcywgaWdub3JlIHRoZSByZXN1bHQgb2YgZ3N0X3BhZF9wdXNoX2V2ZW50IGhlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE9vcHMsIGlnbm9yZSB0aGUgcmVzdWx0IG9mIGdzdF9wYWRfcHVzaF9ldmVudCBoZXJlLgotCi0yMDA1LTA3LTE4IDE3OjEyOjM2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBTZW5kIGRpc2NvbnQgZXZlbnQgZnJvbSB0aGUgbG9vcCBmdW5jdGlvbiwgYXMgcGFkcyBhcmVuJ3QgYWN0aXZhdGVkIHlldCBpbiB0aGUgYWN0aXZhdGVfcHVzaCBoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApLAotCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKToKLQkgIFNlbmQgZGlzY29udCBldmVudCBmcm9tIHRoZSBsb29wIGZ1bmN0aW9uLCBhcyBwYWRzCi0JICBhcmVuJ3QgYWN0aXZhdGVkIHlldCBpbiB0aGUgYWN0aXZhdGVfcHVzaCBoYW5kbGVyLgotCSAgKiBnc3QvZ3N0YmluLmM6IChiaW5fYnVzX2hhbmRsZXIpOgotCSAgRG9uJ3QgbGVhayBlbGVtZW50IG5hbWUuCi0KLTIwMDUtMDctMTggMTQ6NDc6MzkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBVc2UgQVNfTElCVE9PTF9UQUdTLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA3LTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjb25maWd1cmUuYWM6IFVzZSBBU19MSUJUT09MX1RBR1MuCi0KLTIwMDUtMDctMTggMTI6NTg6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczogUmVtb3ZlIGRlbGV0ZWQgdHlwZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgotCSAgUmVtb3ZlIGRlbGV0ZWQgdHlwZXMuCi0KLTIwMDUtMDctMTggMTI6NDk6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3RfcHJpdmF0ZS5oOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGJpbi5oOgotCSogZ3N0L2dzdGJ1cy5oOgotCSogZ3N0L2dzdGNvbmZpZy5oLmluOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkqIGdzdC9nc3RlcnJvci5jOgotCSogZ3N0L2dzdGVycm9yLmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuaDoKLQkqIGdzdC9nc3RnaG9zdHBhZC5jOgotCSogZ3N0L2dzdGluZGV4LmM6Ci0JKiBnc3QvZ3N0aW5mby5jOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSogZ3N0L2dzdHBhZC5jOgotCSogZ3N0L2dzdHBhZC5oOgotCSogZ3N0L2dzdHBhcnNlLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5oOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuaDoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHNjaGVkdWxlci5jOgotCSogZ3N0L2dzdHNjaGVkdWxlci5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrLmg6Ci0JKiBnc3QvZ3N0dHlwZWZpbmQuaDoKLQkqIGdzdC9nc3R0eXBlcy5oOgotCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzoKLQkqIGdzdC9yZWdpc3RyaWVzL2dzdHhtbHJlZ2lzdHJ5LmM6Ci0JKiBnc3Qvc2NoZWR1bGVycy90aHJlYWRzY2hlZHVsZXIuYzoKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvZHBhcmFtbWFuYWdlci5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6Ci0JICBSZW1vdmVkIHBsdWdhYmxlIHNjaGVkdWxlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbW92ZWQgcGx1Z2FibGUgc2NoZWR1bGVycy4KLQkgIFJlbW92ZWQgU2NoZWR1bGVyL01hbmFnZXIgZnJvbSBlbGVtZW50cy4KLQkgIFJlbW92ZWQgZ3N0dHlwZXMuaCwgcmVhcnJhbmdlZCBpbmNsdWRlcy4KLQkgIFJlbW92ZWQgZGVwZW5kZW5jeSBwYWQ8LT5lbGVtZW50LCBlbGVtZW50PD5waXBlbGluZSwgYW5kCi0JICB2YXJpb3VzIG90aGVycywgIGZpeCBpbmNsdWRlcy4KLQkgIGltcGxlbWVudCBnc3RfcGFkX2dldF9wYXJlbnQoKSB3aXRoIGdzdF9vYmplY3RfZ2V0X3BhcmVudCgpCi0JICBNYWtlIEdzdFRhc2sgc2VmY29udGFpbmVkLgotCSAgRml4IF9nZXRfc3RhdGUoKSBvbiBHc3RCaW4sIGl0IGRpZCBub3QgcmV0dXJuIEFTWU5DIHdpdGggYSAwCi0JICB0aW1lb3V0LgotCSAgRml4IGVuZGxlc3MgbG9vcCBpbiBpdGVyYXRvcl9mb2xkX3dpdGhfcmVzeW5jLgotCi0yMDA1LTA3LTE4IDA5OjIyOjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBSZW1vdmUgb2xkIGZpbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0YXJjaC5oOgotCSAgUmVtb3ZlIG9sZCBmaWxlLgotCi0yMDA1LTA3LTE4IDA4OjUxOjMxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvTWFrZWZpbGUuYW06IE5vIG1vcmUgY290aHJlYWRzLmgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvTWFrZWZpbGUuYW06Ci0JICBObyBtb3JlIGNvdGhyZWFkcy5oCi0KLTIwMDUtMDctMTggMDg6NDM6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9jb3RocmVhZHMuKjogTGV0J3MgcmVtb3ZlIHRoZXNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9jb3RocmVhZHMuYzoKLQkgICogZ3N0L2NvdGhyZWFkcy5oOgotCSAgTGV0J3MgcmVtb3ZlIHRoZXNlLgotCi0yMDA1LTA3LTE4IDA4OjI4OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IFNvbWUgbW9yZSBkb2NzIGluIHRoZSB3b3Jrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWR5bmFtaWMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQ6Ci0JICBTb21lIG1vcmUgZG9jcyBpbiB0aGUgd29ya3MuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2FwcyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldGNhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NvbmZpZ3VyZV9jYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyksIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3NpemUpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2V2ZW50KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGVfcHVzaCksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2gpOgotCSAgUmVmY291bnRpbmcgZml4ZXMuCi0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfc291cmNlX2Rpc3BhdGNoKSwgKGdzdF9idXNfcG9sbCk6Ci0JICBDbGVhbnVwcy4KLQkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfZmluYWxpemUpOgotCSAgU2V0IFNSQyB0byBOVUxMLgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X3VubGluayksCi0JICAoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQpLCAoZ3N0X3BhZF9wcm94eV9nZXRjYXBzKSwKLQkgIChnc3RfcGFkX3Byb3h5X3NldGNhcHMpOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgIEFkZCBfZ2V0X3BhcmVudF9lbGVtZW50KCkgdG8gZ2V0IGEgcGFkcyBwYXJlbnQgYXMgYW4gZWxlbWVudC4KLQotMjAwNS0wNy0xNyAyMjo0NDowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svZ3N0L2dzdGJpbi5jOiBSZW1vdmUgYm9ndXMgdGVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBSZW1vdmUgYm9ndXMgdGVzdC4KLQotMjAwNS0wNy0xNyAyMjoyNjowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUmVmY291bnRpbmcgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcGFkX2dldGNhcHMpLAotCSAgKGdzdF9iYXNlX3NpbmtfcGFkX3NldGNhcHMpLCAoZ3N0X2Jhc2Vfc2lua19wYWRfYnVmZmVyX2FsbG9jKSwKLQkgIChnc3RfYmFzZV9zaW5rX3ByZXJvbGxfcXVldWVfZmx1c2gpLCAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZG9fc3luYyksCi0JICAoZ3N0X2Jhc2Vfc2lua19jaGFpbiksIChnc3RfYmFzZV9zaW5rX2xvb3ApLAotCSAgKGdzdF9iYXNlX3NpbmtfZGVhY3RpdmF0ZSksIChnc3RfYmFzZV9zaW5rX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9iYXNlX3NpbmtfYWN0aXZhdGVfcHVsbCksIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBSZWZjb3VudGluZyBmaXhlcy4KLQkgIEZpeCBsb2dpYyBmb3IgcmV0dXJuaW5nIEFTWU5DIHdoZW4gbm90IHByZXJvbGxlZC4KLQotMjAwNS0wNy0xNyAyMjoyMjo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHF1ZXVlLmM6IEZpeCBuYXN0eSByZWZjb3VudCBidWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpOgotCSAgRml4IG5hc3R5IHJlZmNvdW50IGJ1Zy4KLQotMjAwNS0wNy0xNiAxOToyNTo0MSArMDAwMCAgUGhpbGlwcGUgS2FsYWYgPHBoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSAgTW92ZWQgZmRzcmMgdG8gZ3N0LXBsdWdpbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE1vdmVkIGZkc3JjIHRvIGdzdC1wbHVnaW5zLgotCi0yMDA1LTA3LTE2IDE1OjQzOjEwICswMDAwICBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBGb3Jnb3QgY2hhbmdlbG9nIGVudHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZvcmdvdCBjaGFuZ2Vsb2cgZW50cnkKLQotMjAwNS0wNy0xNiAxNTo0MTowNCArMDAwMCAgUGhpbGlwcGUgS2FsYWYgPHBoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaDoKLQkgIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA3LTE2IFBoaWxpcHBlIEtoYWxhZiA8YnVyZ2VyQHNwZWVkeS5vcmc+Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5jCi0JICAqIGdzdC9lbGVtZW50cy9nc3RmZHNyYy5oCi0JICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jCi0JICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbQotCSAgUG9ydGVkIGZkc3JjIHRvIDAuOS4KLQotMjAwNS0wNy0xNiAxNDo1MjoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRml4IGNvbXBpbGUgZXJyb3IuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19kb19zeW5jKToKLQkgIEZpeCBjb21waWxlIGVycm9yLgotCi0yMDA1LTA3LTE2IDE0OjQxOjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc2luay4qOiBTdG9yZSBhbmQgdXNlIGRpc2NvbnQgdmFsdWVzIHdoZW4gc3luY2luZyBidWZmZXJzIGFzIGRlc2NyaWJlZCBpbiBkZXNpZ24gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwKLQkgIChnc3RfYmFzZV9zaW5rX2V2ZW50KSwgKGdzdF9iYXNlX3NpbmtfZ2V0X3RpbWVzKSwKLQkgIChnc3RfYmFzZV9zaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgU3RvcmUgYW5kIHVzZSBkaXNjb250IHZhbHVlcyB3aGVuIHN5bmNpbmcgYnVmZmVycyBhcyBkZXNjcmliZWQKLQkgIGluIGRlc2lnbiBkb2NzLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfc2VuZF9kaXNjb250KSwKLQkgIChnc3RfYmFzZV9zcmNfZG9fc2VlayksIChnc3RfYmFzZV9zcmNfbG9vcCksIChnc3RfYmFzZV9zcmNfc3RhcnQpLAotCSAgKGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wdXNoKToKLQkgIFB1c2ggZGlzY29udCBldmVudCB3aGVuIHN0YXJ0aW5nLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV90cmFuc2Zvcm0pOgotCSAgU21hbGwgY2xlYW51cHMuCi0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKLQkgIFNtYWxsIGNsZWFudXBzIGluIGJhc2VfdGltZSAgZGlzdHJpYnV0aW9uLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSksCi0JICAoZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgQWRkZWQgbWV0aG9kcyBmb3IgdGhlIGJhc2VfdGltZSBvZiB0aGUgZWxlbWVudC4KLQkgIFNvbWUgTVQgZml4ZXMuCi0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3NlbmRfZXZlbnQpLAotCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BpcGVsaW5lX3NldF9uZXdfc3RyZWFtX3RpbWUpLAotCSAgKGdzdF9waXBlbGluZV9nZXRfbGFzdF9zdHJlYW1fdGltZSk6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5oOgotCSAgTVQgZml4ZXMuCi0JICBIYW5kbGUgc2Vla2luZyBhcyBkZXNjcmliZWQgaW4gZGVzaWduIGRvYywgcmVtb3ZlIHN0cmVhbV90aW1lCi0JICBoYWNrLgotCSAgQ2xlYW51cHMgY2xvY2sgYW5kIHN0cmVhbV90aW1lIHNlbGVjdGlvbiBjb2RlLiBBZGRlZCBhY2Nlc3NvcnMKLQkgIGZvciB0aGUgc3RyZWFtX3RpbWUuCi0KLTIwMDUtMDctMTYgMTQ6MDY6MjEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGVycm9yLmMgKF9nc3RfY29yZV9lcnJvcnNfaW5pdCk6IFVzZSB0aGUgbWFnaWMgd29yZC4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDctMTYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RlcnJvci5jIChfZ3N0X2NvcmVfZXJyb3JzX2luaXQpOiBVc2UgdGhlIG1hZ2ljIHdvcmQuLgotCi0yMDA1LTA3LTE2IDEzOjUwOjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IE1ha2UgZWxlbWVudHMgc2lsZW50IGFzIHRoZSBkZWVwX25vdGlmeSByZWZzIHRoZSBwYXJlbnQsIHdoaWNoIG1pZ2h0IG1ha2UgdGhlIHRlc3QgZmFpbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBNYWtlIGVsZW1lbnRzIHNpbGVudCBhcyB0aGUgZGVlcF9ub3RpZnkgcmVmcyB0aGUKLQkgIHBhcmVudCwgd2hpY2ggbWlnaHQgbWFrZSB0aGUgdGVzdCBmYWlsLgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVzaCk6Ci0JICBEb24ndCBob2xkIHRoZSBsb2NrIGZvciB0b28gbG9uZy4KLQotMjAwNS0wNy0xNiAxMjozMzoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBEb24ndCB1bnJlZiB0aGUgY2FwcyB3ZSBwYXNzZWQgdG8gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIGFmdGVyIHBhc3NpbmcgdGhlbS4gZ3N0X2NhcHNfbWFrZV93Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmVnb3RpYXRlKToKLQkgIERvbid0IHVucmVmIHRoZSBjYXBzIHdlIHBhc3NlZCB0byBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkgYWZ0ZXIKLQkgIHBhc3NpbmcgdGhlbS4gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIHdpbGwgZG8gdGhhdCBmb3IgdXMuCi0KLTIwMDUtMDctMTUgMTY6MTA6NDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGNhcHMuaCAoZ3N0X2NhcHNfaXNfc2ltcGxlKTogUmVtb3ZlZCBkZXByZWNhdGVkIG1hY3JvICgjMTU3MzExKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNy0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGNhcHMuaCAoZ3N0X2NhcHNfaXNfc2ltcGxlKTogUmVtb3ZlZCBkZXByZWNhdGVkIG1hY3JvCi0JICAoIzE1NzMxMSkuCi0KLTIwMDUtMDctMTUgMTQ6NTk6MjIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmMgKG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCk6IFdyaXRlIG91ciBvd24gbWFyc2hhbGxpbmcgZnVuY3Rpb24gZm9yIHRoZSBoYW5kb2ZmIHNpZ25hbC4gUHJvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDctMTUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOiBXcml0ZSBvdXIKLQkgIG93biBtYXJzaGFsbGluZyBmdW5jdGlvbiBmb3IgdGhlIGhhbmRvZmYgc2lnbmFsLiBQcm9wZXJseSB0eXBlIHRoZQotCSAgYnVmZmVyIGFzIGEgYnVmZmVyLiBGaXhlcyBzb21lIHdhcm5pbmdzLiBTaG91bGQgZG8gYSBtb3JlIGdlbmVyYWwKLQkgIHNvbHV0aW9uLgotCSAgKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KTogUGx1ZyBpbnRvIHRoZSByaWdodCBtYXJzaGFsbGVyLgotCi0yMDA1LTA3LTE1IDEzOjQ0OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IFVwZGF0ZWQgZG9jcywgbW9zdGx5IERJU0NPTlQgcmVsYXRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dDoKLQkgIFVwZGF0ZWQgZG9jcywgbW9zdGx5IERJU0NPTlQgcmVsYXRlZC4KLQotMjAwNS0wNy0xNSAxMjo1NTozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6IHMvR1NUX1BBRF9MSU5LX1JFRlVTRUQvRkFMU0UvIGluIGdzdF9teV9maWx0ZXJfc2V0Y2FwcygpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWw6Ci0JICBzL0dTVF9QQURfTElOS19SRUZVU0VEL0ZBTFNFLyBpbiBnc3RfbXlfZmlsdGVyX3NldGNhcHMoKQotCi0yMDA1LTA3LTE1IDExOjA1OjUyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIHRvb2xzL2dzdC10eXBlZmluZC5jOgotCSAgcmVtb3ZlIGlycmVsZXZhbnQgY29kZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgaXJyZWxldmFudCBjb2RlCi0KLTIwMDUtMDctMTUgMTE6MDQ6MTggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgdG9vbHMvZ3N0LXR5cGVmaW5kLmM6IFVwZGF0ZSwgYWRkIGNvcHlyaWdodCBibG9jay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNy0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6IFVwZGF0ZSwgYWRkIGNvcHlyaWdodCBibG9jay4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZWdvdGlhdGUpOgotCSAgTm9ybWFsaXplIGFuZCB0cnVuY2F0ZSBjYXBzIGJlZm9yZSBmaXhhdGlvbi4KLQkgICogZ3N0L2dzdGNhcHMuaDoKLQkgICogZ3N0L2dzdGNhcHMuYyAoZ3N0X2NhcHNfdHJ1bmNhdGUpOiBOZXcgZnVuY3Rpb24sIGRlc3RydWN0aXZlbHkKLQkgIGRpc2NhcmRzIGFsbCBidXQgdGhlIGZpcnN0IHN0cnVjdHVyZSBmcm9tIGl0cyBhcmd1bWVudC4KLQotMjAwNS0wNy0xNSAxMDo0MTozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS4qOiBNYWtlIHBhc3N0aHJvdWdoIHdvcmsgdXNpbmcgdGhlIGJ1ZmZlcnBvb2xzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldGNhcHMpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9jb25maWd1cmVfY2FwcyksIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9zaXplKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9idWZmZXJfYWxsb2MpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRyYW5nZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2gpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaCk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaDoKLQkgIE1ha2UgcGFzc3Rocm91Z2ggd29yayB1c2luZyB0aGUgYnVmZmVycG9vbHMuCi0JICBDaGFuZ2VkIEFQSSBhIGJpdCwgc3ViY2xhc3NlcyBoYXZlIHRvIHdyaXRlIGludG8gYSBidWZmZXIKLQkgIHByb3ZpZGVkIGJ5IHRoZSBiYXNlIGNsYXNzLgotCSAgTW9yZSBkZWJ1ZyBpbmZvIGluIG5lZ28gZnVuY3Rpb25zLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9pbml0KSwKLQkgIChnc3RfaWRlbnRpdHlfdHJhbnNmb3JtKToKLQkgIFBvcnQgdG8gbmV3IGJhc2UgY2xhc3MuCi0KLTIwMDUtMDctMTUgMTA6MzA6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFRvdGFsbHkgZHVtcCBtZXNzYWdlcyBpbiAtbGF1bmNoIHdpdGggdGhlIC1tIG9wdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5jOiAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKSwgKG1haW4pOgotCSAgVG90YWxseSBkdW1wIG1lc3NhZ2VzIGluIC1sYXVuY2ggd2l0aCB0aGUgLW0gb3B0aW9uLgotCSAgRml4IG1lc3NhZ2UgbmFtZSBmb3IgU3RhdGUgbWVzc2FnZXMsCi0KLTIwMDUtMDctMTQgMTg6NDU6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogUG9zdCBlcnJvciBtZXNzYWdlcyBvbiBlcnJvcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2xvb3ApOgotCSAgUG9zdCBlcnJvciBtZXNzYWdlcyBvbiBlcnJvcnMuCi0KLTIwMDUtMDctMTQgMTg6MTA6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RjYXBzLmM6IFJlbW92ZSBkZWJ1ZyBpbmZvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6IChnc3RfY2Fwc19kb19zaW1wbGlmeSk6Ci0JICBSZW1vdmUgZGVidWcgaW5mby4KLQkgICogZ3N0L2dzdGVycm9yLmg6Ci0JICBEZWZpbmUgZXJyb3IgZm9yIHN0cmVhbSBzdG9wcGVkLgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZG9fYnVmZmVyYWxsb2MpLAotCSAgKGdzdF9wcm94eV9wYWRfZG9fY2hhaW4pLCAoZ3N0X3Byb3h5X3BhZF9kb19nZXRyYW5nZSk6Ci0JICBEbyBwcm9wZXIgcmV0dXJuIHZhbHVlcy4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9nZXRfY2Fwc191bmxvY2tlZCksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwKLQkgIChnc3RfcGFkX3NldF9jYXBzKSwgKGdzdF9wYWRfY2hhaW4pLCAoZ3N0X3BhZF9wdXNoKSwKLQkgIChnc3RfcGFkX2dldF9yYW5nZSk6Ci0JICBCZXR0ZXIgcmV0dXJuIHZhbHVlcy4KLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgUmVvcmdhbmlzZSByZXR1cm4gdmFsdWVzLCBhZGQgbWFjcm8gdG8gY2hlY2sgZm9yIGZhdGFsIGVycm9ycy4KLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfY2hhaW4pOgotCSAgUmV0dXJuIHByb3BlciBHc3RGbG93UmV0dXJuIHZhbHVlcywKLQotMjAwNS0wNy0xNCAwOTozNToxMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc2luay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJhc2V0cmFuc2Zvcm0uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmluLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJ1ZmZlci5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RjYXBzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGNsb2NrLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGNvbXBhdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3Rjb25maWcuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZGV0YWlscy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZmFjdG9yeS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbnVtdHlwZXMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXJyb3Iuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZXZlbnQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNpbmsuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc2luay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc3JjLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGZpbHRlci5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3Rmb3JtYXQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0Z2hvc3RwYWQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW1wbGVtZW50c2ludGVyZmFjZS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpbmRleGZhY3Rvcnkuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0aW5mby5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpdGVyYXRvci5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RtYWNyb3Muc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWVtY2h1bmsuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0bWluaW9iamVjdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RvYmplY3Quc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhZHRlbXBsYXRlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBhcnNlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBpcGVsaW5lLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHBsdWdpbi5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RwbHVnaW5mZWF0dXJlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXJ5LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHF1ZXVlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHJlZ2lzdHJ5cG9vbC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RzY2hlZHVsZXIuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0c2NoZWR1bGVyZmFjdG9yeS5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RzdHJ1Y3R1cmUuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0c3lzdGVtY2xvY2suc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dGFnbGlzdC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R0YWdzZXR0ZXIuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhY2Uuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHJhc2hzdGFjay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R0eXBlZmluZGZhY3Rvcnkuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dHlwZXMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0dXJpaGFuZGxlci5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3R1cml0eXBlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHV0aWxzLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHZhbHVlLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHZlcnNpb24uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0eG1sLnNnbWw6Ci0JKiBkb2NzL2xpYnMvdG1wbC9nc3Rjb250cm9sLnNnbWw6Ci0JKiBkb2NzL2xpYnMvdG1wbC9nc3RkYXRhcHJvdG9jb2wuc2dtbDoKLQkqIGRvY3MvbGlicy90bXBsL2dzdGRwYXJhbS5zZ21sOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0ZHBsaW5pbnQuc2dtbDoKLQkqIGRvY3MvbGlicy90bXBsL2dzdGRwbWFuLnNnbWw6Ci0JKiBkb2NzL2xpYnMvdG1wbC9nc3RkcHNtb290aC5zZ21sOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0Z2V0Yml0cy5zZ21sOgotCSogZG9jcy9saWJzL3RtcGwvZ3N0dW5pdGNvbnZlcnQuc2dtbDoKLQkqIGdzdC9iYXNlL2dzdHB1c2hzcmMuYzoKLQkqIGdzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuaDoKLQkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5oOgotCSAgbW9yZSBhdXRpc3RpYyBjbGVhbmxpbmVzcyBpbiBmdW5jdGlvbnMvbmFtZXMvZGVmaW5lcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtb3JlIGF1dGlzdGljIGNsZWFubGluZXNzIGluIGZ1bmN0aW9ucy9uYW1lcy9kZWZpbmVzCi0KLTIwMDUtMDctMTMgMTg6Mjk6NDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkgIGZpeCBkZWJ1ZyBpZmRlZgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggZGVidWcgaWZkZWYKLQotMjAwNS0wNy0xMyAxNjoyNjowNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlX3NyY19zdGFydCk6IFBvc3QgYW4gZXJyb3IgaWYgdGhlIHNvdXJjZSBjb3VsZG4ndCBuZWdvdGlhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDctMTMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KTogUG9zdCBhbiBlcnJvciBpZiB0aGUKLQkgIHNvdXJjZSBjb3VsZG4ndCBuZWdvdGlhdGUuCi0KLTIwMDUtMDctMTMgMTM6MTQ6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9nc3Quc3VwcDoKLQkqIHRlc3RzL2NoZWNrL2dzdC5zdXBwOgotCSAgYWRkIGEgc3VwcHJlc3Npb24gZnJvbSBFZGdhcmQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGEgc3VwcHJlc3Npb24gZnJvbSBFZGdhcmQKLQotMjAwNS0wNy0xMyAxMzoxMDoxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIG1vdmUgdHdvIHRlc3RzdWl0ZSBhcHBzIG92ZXIgdG8gdGhlIGNoZWNrIGRpcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzdWl0ZS9jYXBzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0c3VpdGUvY2Fwcy92YWx1ZV9jb21wYXJlLmM6Ci0JICAqIHRlc3RzdWl0ZS9jYXBzL3ZhbHVlX2ludGVyc2VjdC5jOgotCSAgKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzogKEdTVF9TVEFSVF9URVNUKSwgKGdzdF92YWx1ZV9zdWl0ZSk6Ci0JICBtb3ZlIHR3byB0ZXN0c3VpdGUgYXBwcyBvdmVyIHRvIHRoZSBjaGVjayBkaXIKLQotMjAwNS0wNy0xMiAxNzoxNzozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiBBZGRlZCBtb3JlIGRlYnVnIGluZm8gaW4gdGhlIG5lZ290aWF0ZSBwcm9jZXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKToKLQkgIEFkZGVkIG1vcmUgZGVidWcgaW5mbyBpbiB0aGUgbmVnb3RpYXRlIHByb2Nlc3MuCi0JICAqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JICBQcmVwYXJlIGZvciBzZWdtZW50IHBsYXliYWNrLgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfc2V0X2NhcHMpOgotCSAgQmV0dGVyIGRlYnVnZ2luZy4KLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICBTb21lIG1vcmUgZG9jcy4KLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAobWFpbik6Ci0JICBOVUxMIHBpcGVsaW5lIG9uIGVycm9ycy4KLQotMjAwNS0wNy0xMiAxNzowNDo0MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLmMgKF9nc3RfYnVmZmVyX2NvcHkpOiBDb3B5IHRoZSBidWZmZXIgd2hldGhlciBvciBub3QgaXQgY29tZXMgZnJvbSBhIG1hbGxvYyByZWdpb24uIE1ha2Ugc3VyZSBvdXIgY29weSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNy0xMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGJ1ZmZlci5jIChfZ3N0X2J1ZmZlcl9jb3B5KTogQ29weSB0aGUgYnVmZmVyIHdoZXRoZXIgb3IKLQkgIG5vdCBpdCBjb21lcyBmcm9tIGEgbWFsbG9jIHJlZ2lvbi4gTWFrZSBzdXJlIG91ciBjb3B5IGdldHMgZnJlZWQuCi0KLTIwMDUtMDctMTIgMTY6Mjg6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgotCSogY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGNoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0bWVzc2FnZS5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0c3RydWN0dXJlLmM6Ci0JICBmaXggcmVmY291bnRpbmcgb2Ygd2FybmluZyBhbmQgZXJyb3IgbWVzc2FnZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHJlZmNvdW50aW5nIG9mIHdhcm5pbmcgYW5kIGVycm9yIG1lc3NhZ2VzCi0KLTIwMDUtMDctMTIgMTM6MjY6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgcmUtZW5hYmxlIGxlYWsgY2hlY2tpbmcgOikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmUtZW5hYmxlIGxlYWsgY2hlY2tpbmcgOikKLQotMjAwNS0wNy0xMiAxMjoyMDowMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL01ha2VmaWxlLmFtOiBhZGQgcGVyLXRlc3QgdmFsZ3JpbmQgdGFyZ2V0cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgYWRkIHBlci10ZXN0IHZhbGdyaW5kIHRhcmdldHMKLQkgICogY2hlY2svZ3N0LWxpYnMvZ2RwLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZ3N0X2RhdGFfcHJvdG9jb2xfc3VpdGUpLCAobWFpbik6Ci0JICBjbGVhbiB1cAotCi0yMDA1LTA3LTEyIDA5OjQxOjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IGluc3RhdGUgbW9yZSB2YWxncmluZGFibGUgdGVzdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNy0xMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICBpbnN0YXRlIG1vcmUgdmFsZ3JpbmRhYmxlIHRlc3RzCi0JICAqIGNoZWNrL2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGNoYWluX2Z1bmMpLCAoZXZlbnRfZnVuYyksCi0JICAoR1NUX1NUQVJUX1RFU1QpLCAoZmFrZXNyY19zdWl0ZSk6Ci0JICAqIGNoZWNrL2dzdC9nc3RwYWQuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgZml4IHRlc3QgbGVha3MKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RtaW5pb2JqZWN0LnNnbWw6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZmluYWxpemUpOgotCSAgZml4IHRoZSBzdGF0aWMgbXV0ZXggbGVhawotCi0yMDA1LTA3LTExIDE4OjQxOjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IGFkZCB0d28gbW9yZSB0ZXN0cyBmb3IgdmFsZ3JpbmRpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIGFkZCB0d28gbW9yZSB0ZXN0cyBmb3IgdmFsZ3JpbmRpbmcKLQkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICB0ZXN0IHJlZmNvdW50IG9mIGRlc2VyaWFsaXplZCBidWZmZXIsIGZvdW5kIGEgbGVhawotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXM6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0bWluaW9iamVjdC5zZ21sOgotCSAgYWRkIG1pbmlvYmplY3QgdG8gZG9jcwotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgYWRkIHNvbWUgZG9jcwotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9idWZmZXIpLAotCSAgKGdzdF9zdHJpbmdfdW53cmFwKToKLQkgIGZpeCBhIGhhcmQtdG8tZmluZCBpbnZhbGlkIHdyaXRlIGZvciBvbmUgb2YgdGhlIHRlc3RzCi0JICBmaXggYSBsZWFrIGZvciBkZXNlcmlhbGl6ZWQgYnVmZmVycwotCi0yMDA1LTA3LTExIDE1OjQxOjA3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGRvbid0IHZhbGdyaW5kIGFzIHBhcnQgb2YgbWFrZSBjaGVjayBmb3Igbm93Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvbid0IHZhbGdyaW5kIGFzIHBhcnQgb2YgbWFrZSBjaGVjayBmb3Igbm93Ci0KLTIwMDUtMDctMTEgMTU6MjI6MjQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgc3BlY2lmeSB0b29sCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHNwZWNpZnkgdG9vbAotCi0yMDA1LTA3LTExIDE1OjE4OjMyICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGRvY3MvcHdnLzogUmV3cml0ZSBzY2hlZHVsaW5nLWNoYXB0ZXIgZm9yIHNjaGVkdWxpbmcgbW9kZWwgaW4gMC45LiBBZGQgbG90cyBvZiBleGFtcGxlIGNvZGUgYW5kIGV4cGxhbmF0aW9uIGZvciBwYWQgYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWw6Ci0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLXJlcXVlc3QueG1sOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbDoKLQkgICogZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICAqIGRvY3MvcHdnL2ludHJvLXByZWZhY2UueG1sOgotCSAgKiBkb2NzL3B3Zy9vdGhlci1udG9vbmUueG1sOgotCSAgUmV3cml0ZSBzY2hlZHVsaW5nLWNoYXB0ZXIgZm9yIHNjaGVkdWxpbmcgbW9kZWwgaW4gMC45LiBBZGQgbG90cwotCSAgb2YgZXhhbXBsZSBjb2RlIGFuZCBleHBsYW5hdGlvbiBmb3IgcGFkIGFjdGl2YXRpb24sIGxvb3AoKSBhbmQKLQkgIGdldHJhbmdlKCkgZnVuY3Rpb25zIGFuZCBhIGJpdCBtb3JlLiBSZW1vdmUgb2xkIGNvbW1lbnRzIHBvaW50aW5nCi0JICB0byBsb29wLWZ1bmN0aW9ucy4KLQkgICogZXhhbXBsZXMvcHdnL01ha2VmaWxlLmFtOgotCSAgQWRkIGxvb3AvZ2V0cmFuZ2UgZXhhbXBsZXMuCi0KLTIwMDUtMDctMTEgMTU6MTA6NDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIGNoZWNrL2dzdC5zdXBwOgotCSogY2hlY2svZ3N0L2dzdC5jOgotCSogY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiBjaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2dzdC5jOgotCSogZ3N0L2dzdC5oOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC5zdXBwOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdC5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGdob3N0cGFkLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSAgdmFsZ3JpbmQgdW5pdCB0ZXN0cyBhcyBjaGVjay1sb2NhbDsgYWRkIGdzdF9kZWluaXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdmFsZ3JpbmQgdW5pdCB0ZXN0cyBhcyBjaGVjay1sb2NhbDsgYWRkIGdzdF9kZWluaXQKLQotMjAwNS0wNy0xMSAxNTowNjoyNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmYWtlc3JjLnNnbWw6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgYWRkIG51bS1idWZmZXJzIHByb3BlcnR5IHRvIGJhc2VzcmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG51bS1idWZmZXJzIHByb3BlcnR5IHRvIGJhc2VzcmMKLQotMjAwNS0wNy0xMCAxMjowMzoxMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzaW5rLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzcmMuc2dtbDoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSAgbW9yZSBtYWNybyBzcGxpdHRpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW9yZSBtYWNybyBzcGxpdHRpbmcKLQotMjAwNS0wNy0xMCAwMDowNzo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IGFkZCBkZWJ1ZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfYnVzKToKLQkgIGFkZCBkZWJ1ZwotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChjaGVja19pbnRyKSwgKGV2ZW50X2xvb3ApOgotCSAgZml4IGJ1cyBsZWFrcwotCi0yMDA1LTA3LTA5IDIzOjUyOjA3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZml4IGNhcHMgbGVhayBpbiBib3RoIGNhc2VzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBjYXBzIGxlYWsgaW4gYm90aCBjYXNlcwotCi0yMDA1LTA3LTA5IDIzOjQ4OjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgZHVoLCByZW1vdmUgdW51c2VkIHZhcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkdWgsIHJlbW92ZSB1bnVzZWQgdmFyCi0KLTIwMDUtMDctMDkgMjM6NDc6MjMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBmaXggYSBjYXBzIGxlYWsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGEgY2FwcyBsZWFrCi0KLTIwMDUtMDctMDkgMjM6MzM6MjQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IGFkZCBmaW5hbGl6ZSBtZXRob2QgYW5kIGNsZWFuIHVwIHByb3Blcmx5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlX3NyY19maW5hbGl6ZSk6Ci0JICBhZGQgZmluYWxpemUgbWV0aG9kIGFuZCBjbGVhbiB1cCBwcm9wZXJseQotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9kaXNwb3NlKToKLQkgIGFkZCBkZWJ1ZwotCi0yMDA1LTA3LTA5IDIzOjE1OjI3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdGJpbi5jOgotCSAgZG9uJ3QgZ2V0IHNyYyBmb3IgYWxsIG1lc3NhZ2VzOyBvbmx5IGZvciBlb3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZG9uJ3QgZ2V0IHNyYyBmb3IgYWxsIG1lc3NhZ2VzOyBvbmx5IGZvciBlb3MKLQotMjAwNS0wNy0wOSAyMjo1NDoyOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL2dzdC9nc3RiaW4uYzogYWRkIG1vcmUgdGhpbmdzIHRvIGNoZWNrCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jOiAocG9wX21lc3NhZ2VzKSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChnc3RfYmluX3N1aXRlKToKLQkgIGFkZCBtb3JlIHRoaW5ncyB0byBjaGVjawotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NoYW5nZV9zdGF0ZSksIChiaW5fYnVzX2hhbmRsZXIpOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSAgbW9yZSBkZWJ1ZwotCi0yMDA1LTA3LTA5IDE2OjM2OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogY2hlY2svZ3N0LWxpYnMvZ2RwLmM6Ci0JKiBjaGVjay9nc3QvZ3N0LmM6Ci0JKiBjaGVjay9nc3QvZ3N0YmluLmM6Ci0JKiBjaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiBjaGVjay9nc3QvZ3N0YnVzLmM6Ci0JKiBjaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSogY2hlY2svZ3N0L2dzdGRhdGEuYzoKLQkqIGNoZWNrL2dzdC9nc3RlbGVtZW50LmM6Ci0JKiBjaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIGNoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgotCSogY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGNoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkqIGNoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIGNoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGNoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogY2hlY2svZ3N0L2dzdHRhZy5jOgotCSogY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JKiBjaGVjay9nc3RjaGVjay5jOgotCSogY2hlY2svZ3N0Y2hlY2suaDoKLQkqIGNoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6Ci0JKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jOgotCSogY2hlY2svc3RhdGVzL3NpbmtzLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RlbGVtZW50LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RwYWQuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHRhZy5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3RjaGVjay5jOgotCSogdGVzdHMvY2hlY2svZ3N0Y2hlY2suaDoKLQkqIHRlc3RzL2NoZWNrL2xpYnMvZ2RwLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvY2xlYW51cC5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkgIGFkZCBkZWJ1Z2dpbmcgY2F0ZWdvcnkgdXNlIEdTVF9TVEFSVF9URVNUIG5vdywgc28gd2UgYWRkIGEgZGVidWcgbGluZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgZGVidWdnaW5nIGNhdGVnb3J5Ci0JICB1c2UgR1NUX1NUQVJUX1RFU1Qgbm93LCBzbyB3ZSBhZGQgYSBkZWJ1ZyBsaW5lCi0KLTIwMDUtMDctMDkgMTU6MTg6NTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjaGVjay9nc3QvZ3N0YmluLmM6IGFkZCB0ZXN0IGZvciBzdGF0ZSBjaGFuZ2UgbWVzc2FnZSBvbiBhIGJpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RiaW4uYzogKFNUQVJUX1RFU1QpLCAoZ3N0X2Jpbl9zdWl0ZSk6Ci0JICBhZGQgdGVzdCBmb3Igc3RhdGUgY2hhbmdlIG1lc3NhZ2Ugb24gYSBiaW4KLQkgICogY2hlY2svZ3N0L2dzdGVsZW1lbnQuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X2VsZW1lbnRfc3VpdGUpOgotCSAgYWRkIGFub3RoZXIgdGVzdAotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2luaXQpOgotCSAgKiBnc3QvZ3N0YnVzLmM6IChnc3RfYnVzX2luaXQpLCAoZ3N0X2J1c19wb3N0KToKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKToKLQkgICogZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmM6IChnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXcpOgotCSAgKiBnc3QvZ3N0c2NoZWR1bGVyLmM6Ci0JICB2YXJpb3VzIGRlYnVnZ2luZyBhZGRpdGlvbnMgYW5kIGNsZWFudXBzCi0KLTIwMDUtMDctMDggMTY6NDE6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIGNoZWNrL2dzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jOgotCSAgYWRkaW5nIHRlc3RzIGZvciBlbGVtZW50cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRpbmcgdGVzdHMgZm9yIGVsZW1lbnRzCi0KLTIwMDUtMDctMDggMTY6MTY6MjkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOiBwbHVnIG1vcmUgbGVha3MuICBBIHNpbXBsZSBnc3RfaW5pdCgpIG5vdyBpcyBsZWFrZnJlZSwgeWF5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5LmM6IChsb2FkX2ZlYXR1cmUpOgotCSAgcGx1ZyBtb3JlIGxlYWtzLiAgQSBzaW1wbGUgZ3N0X2luaXQoKSBub3cgaXMgbGVha2ZyZWUsIHlheS4KLQotMjAwNS0wNy0wOCAxNjowODoxNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5LmM6Ci0JICBwbHVnIGFub3RoZXIgbWVtbGVhayBpbiByZWdpc3RyeSBsb2FkaW5nIC0gSSBoYXZlIE5PIGlkZWEgd2h5IHRoaXMgd2FzIHJldHVybmluZyBhIEdzdFBsdWdpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwbHVnIGFub3RoZXIgbWVtbGVhayBpbiByZWdpc3RyeSBsb2FkaW5nIC0gSSBoYXZlIE5PIGlkZWEgd2h5IHRoaXMgd2FzIHJldHVybmluZyBhIEdzdFBsdWdpbgotCi0yMDA1LTA3LTA4IDE0OjUwOjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzoKLQkgIEkgbmVlZCB0byBsZWFybiB0byBzdG9wIGRvaW5nIHRoaXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgSSBuZWVkIHRvIGxlYXJuIHRvIHN0b3AgZG9pbmcgdGhpcwotCi0yMDA1LTA3LTA4IDE0OjM5OjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYWRkIHJpZ2h0IHZhcmlhYmxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCByaWdodCB2YXJpYWJsZQotCi0yMDA1LTA3LTA4IDE0OjM1OjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiB1c2UgR1NUX1NFVF9FUlJPUl9DRkxBR1MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICB1c2UgR1NUX1NFVF9FUlJPUl9DRkxBR1MKLQkgICogZG9jcy9mYXEvY3ZzLnhtbDoKLQkgIGNoYW5nZSB0byBFUlJPUl9DRkxBR1MKLQotMjAwNS0wNy0wOCAxNDowMTozMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogbWFrZSBHU1RfRVJST1JfQ0ZMQUdTIG92ZXJyaWRhYmxlIGFuZCByZS1lbmFibGUgV2Vycm9yCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgbWFrZSBHU1RfRVJST1JfQ0ZMQUdTIG92ZXJyaWRhYmxlIGFuZCByZS1lbmFibGUgV2Vycm9yCi0JICAqIGRvY3MvZmFxL2N2cy54bWw6Ci0JICBhZGQgYSBub3RlIGFib3V0IGVycm9yIENGTEFHUwotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGZha2VzcmMuc2dtbDoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkgIGNvbW1lbnQgb3V0IHNvbWUgdW51c2VkIGNvZGUKLQkgICogZ3N0L2dzdC5jOiAoc3BsaXRfYW5kX2l0ZXJhdGUpOgotCSAgKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5jOiAobG9hZF9wYWRfdGVtcGxhdGUpLAotCSAgKGxvYWRfZmVhdHVyZSk6Ci0JICBwbHVnIHNvbWUgbWVtbGVha3MKLQotMjAwNS0wNy0wNyAxNTowNzoyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkgIG1ha2UgbGlicyB1c2Ugc2FtZSBndGstZG9jLm1hawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtYWtlIGxpYnMgdXNlIHNhbWUgZ3RrLWRvYy5tYWsKLQotMjAwNS0wNy0wNyAxNDoxNjo0MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbW1vbjoKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIGZhY3RvciBvdXQgZ3RrLWRvYwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmYWN0b3Igb3V0IGd0ay1kb2MKLQotMjAwNS0wNy0wNyAxNDowMTo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3NjaGVkdWxlcnMvdGhyZWFkc2NoZWR1bGVyLmM6IFVubG9jayB0aGUgU1RSRUFNX0xPQ0sgY29tcGxldGVseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc2NoZWR1bGVycy90aHJlYWRzY2hlZHVsZXIuYzogKGdzdF90aHJlYWRfc2NoZWR1bGVyX2Z1bmMpLAotCSAgKGdzdF90aHJlYWRfc2NoZWR1bGVyX2Rpc3Bvc2UpOgotCSAgVW5sb2NrIHRoZSBTVFJFQU1fTE9DSyBjb21wbGV0ZWx5LgotCi0yMDA1LTA3LTA3IDEzOjE0OjQwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZXhhbXBsZXMvcHdnLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcHdnLy5naXRpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpZ25vcmUgbW9yZQotCi0yMDA1LTA3LTA3IDEzOjEyOjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvaW5zdGFudGlhdGUvLmdpdGlnbm9yZToKLQkgIGlnbm9yZSBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGlnbm9yZSBtb3JlCi0KLTIwMDUtMDctMDcgMTE6NTk6MzcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIGNoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiBjaGVjay9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JICBhZGRpbmcgYW4gZWxlbWVudCB0ZXN0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZGluZyBhbiBlbGVtZW50IHRlc3QKLQotMjAwNS0wNy0wNyAxMTowOTozMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0YnVzLmMgKGdzdF9idXNfaGF2ZV9wZW5kaW5nKTogUmVtb3ZlIGludGVuc2VseSBpcnJpdGF0aW5nIGRlYnVnIG1lc3NhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDctMDcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RidXMuYyAoZ3N0X2J1c19oYXZlX3BlbmRpbmcpOiBSZW1vdmUgaW50ZW5zZWx5IGlycml0YXRpbmcKLQkgIGRlYnVnIG1lc3NhZ2UuCi0KLTIwMDUtMDctMDcgMTA6MDM6MDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkgIGFub3RoZXIgZG9jIGZpeAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhbm90aGVyIGRvYyBmaXgKLQotMjAwNS0wNy0wNyAwOToxMDoxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvbWFudWFsL0JVSUxEOgotCSogZG9jcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBtb3JlIG1hY29zeCBtYWRuZXNzIGZpeGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtb3JlIG1hY29zeCBtYWRuZXNzIGZpeGluZwotCi0yMDA1LTA3LTA3IDA4OjQzOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cXVlcnkuKjogUmVtb3ZlIG9sZCB0eXBlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RxdWVyeS5jOgotCSAgKiBnc3QvZ3N0cXVlcnkuaDoKLQkgIFJlbW92ZSBvbGQgdHlwZXMKLQotMjAwNS0wNy0wNyAwODoxNjo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBBbGxvdyBzdWJjbGFzc2VzIHRvIGltcGxlbWVudCB0aGVpciBvd24gbmVnb3RpYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfbmVnb3RpYXRlKSwgKGdzdF9iYXNlX3NyY19uZWdvdGlhdGUpOgotCSAgQWxsb3cgc3ViY2xhc3NlcyB0byBpbXBsZW1lbnQgdGhlaXIgb3duIG5lZ290aWF0aW9uLgotCi0yMDA1LTA3LTA2IDE3OjE3OjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vOiBVcGRhdGUgZGVzaWduIG5vdGVzIHRvIHJlZmxlY3QgdGhlIG1vdmVtZW50IG9mIHJlc3BvbnNpYmlsaXR5IGZvciBidXMgaGFuZGxpbmcgZnJvbSBHc3RQaXBlbGluZSB0bwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YmluLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6Ci0JICBVcGRhdGUgZGVzaWduIG5vdGVzIHRvIHJlZmxlY3QgdGhlIG1vdmVtZW50IG9mCi0JICByZXNwb25zaWJpbGl0eSBmb3IgYnVzIGhhbmRsaW5nIGZyb20gR3N0UGlwZWxpbmUgdG8KLQkgIEdzdEJpbgotCi0yMDA1LTA3LTA2IDE2OjQ1OjQ1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBSZW1vdmUgdW5uZWNlc3NhcnkgcXVldWUyLzMvNCBleGFtcGxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBSZW1vdmUgdW5uZWNlc3NhcnkgcXVldWUyLzMvNCBleGFtcGxlcy4KLQotMjAwNS0wNy0wNiAxNjoyMjo0NyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGV4YW1wbGVzLzogVXBkYXRlIGEgY291cGxlIG9mIHRoZSBleGFtcGxlcyB0byB3b3JrIGFnYWluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL01ha2VmaWxlLmFtOgotCSAgKiBleGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYzogKGV2ZW50X2xvb3ApLCAobWFpbik6Ci0JICAqIGV4YW1wbGVzL3F1ZXVlL3F1ZXVlLmM6IChldmVudF9sb29wKSwgKG1haW4pOgotCSAgKiBleGFtcGxlcy9xdWV1ZTIvcXVldWUyLmM6IChtYWluKToKLQkgIFVwZGF0ZSBhIGNvdXBsZSBvZiB0aGUgZXhhbXBsZXMgdG8gd29yayBhZ2Fpbi4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9lbXB0eSksCi0JICAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoKSwgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX2V2ZW50KToKLQkgIFNwZWxsaW5nIGNvcnJlY3Rpb25zIGFuZCBleHRyYSBkZWJ1Zy4KLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5faW5pdCksIChpc19lb3MpLAotCSAgKGdzdF9iaW5fYWRkX2Z1bmMpLCAoYmluX2VsZW1lbnRfaXNfc2luayksIChnc3RfYmluX2dldF9zdGF0ZSksCi0JICAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2Jpbl9kaXNwb3NlKSwgKGJpbl9idXNfaGFuZGxlcik6Ci0JICAqIGdzdC9nc3RiaW4uaDoKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfaW5pdCksIChnc3RfcGlwZWxpbmVfZGlzcG9zZSksCi0JICAoZ3N0X3BpcGVsaW5lX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5oOgotCSAgTW92ZSB0aGUgYnVzIGhhbmRsZXIgZm9yIGNoaWxkcmVuIHRvIHRoZSBHc3RCaW4sIGFuZCBjcmVhdGUgYQotCSAgc2VwYXJhdGUgYnVzIGZvciByZWNlaXZpbmcgbWVzc2FnZXMgZnJvbSBjaGlsZHJlbiB0byB0aGUgb25lIHRoZQotCSAgYnVzIHNlbmRzICd1cHdhcmRzJyBvbi4KLQotMjAwNS0wNy0wNiAxMzoyNToyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvOiBNYWtlIGJhc2VzcmMgbmVnb3RpYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL1JFQURNRToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9lbXB0eSksCi0JICAoZ3N0X2Jhc2Vfc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlX3NpbmtfbG9vcCksCi0JICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jhc2Vfc3JjX2luaXQpLCAoZ3N0X2Jhc2Vfc3JjX3NldGNhcHMpLAotCSAgKGdzdF9iYXNlX3NyY19nZXRjYXBzKSwgKGdzdF9iYXNlX3NyY19sb29wKSwKLQkgIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9uZWdvdGlhdGUpLCAoZ3N0X2Jhc2Vfc3JjX25lZ290aWF0ZSksCi0JICAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0KSwgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBNYWtlIGJhc2VzcmMgbmVnb3RpYXRlLgotCSAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHByZXJvbGwgZmFpbHMgaW4gYmFzZXNpbmsuCi0JICBVcGRhdGUgUkVBRE1FLgotCi0yMDA1LTA3LTA2IDEzOjIwOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IEltcGxlbWVudCB0aGUgZml4YXRlIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZml4YXRlX2NhcHMpLCAoZ3N0X3BhZF9hY2NlcHRfY2Fwcyk6Ci0JICBJbXBsZW1lbnQgdGhlIGZpeGF0ZSBmdW5jdGlvbi4KLQkgIENsZWFuIHVwIGFjY2VwdGNhcHMuCi0KLTIwMDUtMDctMDYgMTI6MjQ6NTAgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZG9jcy9wd2cvOiBSZW1vdmUgbmV2ZXItd3JpdHRlbiBmaWx0ZXItZmFjdG9yeSBjaGFwdGVyOyBJJ2xsIGFkZCB0aGUgdmFyaW91cyBiYXNlIGNsYXNzZXMgdG8gcGFydCA0ICgib3RoZXIgZWxlbWVudCB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wd2cvYnVpbGRpbmctZmlsdGVyZmFjdG9yeS54bWw6Ci0JICAqIGRvY3MvcHdnL3B3Zy54bWw6Ci0JICBSZW1vdmUgbmV2ZXItd3JpdHRlbiBmaWx0ZXItZmFjdG9yeSBjaGFwdGVyOyBJJ2xsIGFkZCB0aGUgdmFyaW91cwotCSAgYmFzZSBjbGFzc2VzIHRvIHBhcnQgNCAoIm90aGVyIGVsZW1lbnQgdHlwZXMiKSBsYXRlciBvbi4KLQotMjAwNS0wNy0wNiAxMjoxODowMCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBBZGQgYSBjaGFwdGVyIG9uIGNhcHMgbmVnb3RpYXRpb24sIHNpbXBsaWZ5IHRoZSBvcmlnaW5hbCBjb2RlIHNhbXBsZXMgYSBiaXQgdy5yLnQuIGNhcHMgbmVnb3RpYXRpb24sIGFkZCBsaW5rIHRvIHRoZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWw6Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLWJvaWxlci54bWw6Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLXBhZHMueG1sOgotCSAgKiBkb2NzL3B3Zy9wd2cueG1sOgotCSAgKiBleGFtcGxlcy9wd2cvTWFrZWZpbGUuYW06Ci0JICBBZGQgYSBjaGFwdGVyIG9uIGNhcHMgbmVnb3RpYXRpb24sIHNpbXBsaWZ5IHRoZSBvcmlnaW5hbCBjb2RlCi0JICBzYW1wbGVzIGEgYml0IHcuci50LiBjYXBzIG5lZ290aWF0aW9uLCBhZGQgbGluayB0byB0aGUgYWR2YW5jZWQKLQkgIHNlY3Rpb24uIEFkZCBhIGJ1bmNoIG9mIGV4YW1wbGVzIHNob3dpbmcgZGlmZmVyZW50IHVzZSBjYXNlcyBvZgotCSAgZGlmZmVyZW50IHR5cGVzIG9mIGNhcHMgbmVnb3RpYXRpb24uIFVwc3RyZWFtIHJlbmVnb3RpYXRpb24gaXNuJ3QKLQkgIGZ1bGx5IGRvY3VtZW50ZWQgeWV0IHNpbmNlIG5vYm9keSBrbm93cyBob3cgdGhhdCB3b3Jrcy4KLQotMjAwNS0wNy0wNiAxMTozNDowNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1kYXRhcHJvdG9jb2wucGMuaW46Ci0JICBwYyBmaWxlIGNsZWFudXBzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBjIGZpbGUgY2xlYW51cHMKLQotMjAwNS0wNy0wNiAxMTozMTo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGlmIHBhZCBoYXMgbm8gcGFyZW50LCByZXR1cm4gTlVMTCBhcyBsaXN0IG9mIGludGVybmFsIGxpbmtzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHBhZC5jOgotCSAgKiBjaGVjay9nc3RjaGVjay5jOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2dldF9pbnRlcm5hbF9saW5rc19kZWZhdWx0KToKLQkgIGlmIHBhZCBoYXMgbm8gcGFyZW50LCByZXR1cm4gTlVMTCBhcyBsaXN0IG9mIGludGVybmFsIGxpbmtzCi0KLTIwMDUtMDctMDUgMTY6Mzg6MTMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0Lzogcy9CQVNFU1JDL0JBU0VfU1JDL2cuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDctMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JICAqIGdzdC9iYXNlL2dzdHB1c2hzcmMuYzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IHMvQkFTRVNSQy9CQVNFX1NSQy9nLgotCi0yMDA1LTA3LTA1IDE1OjI4OjE4ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIHVwZGF0ZSBzcGVjIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHNwZWMgZmlsZQotCi0yMDA1LTA3LTA1IDEyOjE3OjI0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE1ha2VmaWxlLmFtOgotCSAgYmV0dGVyIHJlcG9ydCBnZW5yYXRpb24gdGFyZ2V0IChsY292IG5lZWRzIGEgcGF0Y2gpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJldHRlciByZXBvcnQgZ2VucmF0aW9uIHRhcmdldCAobGNvdiBuZWVkcyBhIHBhdGNoKQotCi0yMDA1LTA3LTA1IDEwOjU4OjIxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9lbGVtZW50cywgdGVzdHN1aXRlOiBOdWxsIGlmIHdlIGdvdCBpdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA3LTA1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZWxlbWVudHMsIHRlc3RzdWl0ZTogTnVsbCBpZiB3ZSBnb3QgaXQuLi4KLQotMjAwNS0wNy0wNSAxMDoyMDoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgUG9ydGVkIGRhdGFwcm90b2wgdG8gMC45LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL01ha2VmaWxlLmFtOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6IChnc3RfZHBfdmFsaWRhdGVfcGFja2V0KToKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgotCSAgKiBwa2djb25maWcvTWFrZWZpbGUuYW06Ci0JICAqIHBrZ2NvbmZpZy9nc3RyZWFtZXItZGF0YXByb3RvY29sLXVuaW5zdGFsbGVkLnBjLmluOgotCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLWRhdGFwcm90b2NvbC5wYy5pbjoKLQkgIFBvcnRlZCBkYXRhcHJvdG9sIHRvIDAuOS4KLQkgIEFkZGVkIHBrZ2NvbmZpZyBmaWxlcy4KLQotMjAwNS0wNy0wNSAwOTozNToyMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKTogRGVmYXVsdCB0byByZXR1cm5pbmcgVFJVRSBmb3IgdGhlIGNhc2Ugd2hlbiB0cmFuZm9ybV9jYXBzIHIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNy0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2Fwcyk6Ci0JICBEZWZhdWx0IHRvIHJldHVybmluZyBUUlVFIGZvciB0aGUgY2FzZSB3aGVuIHRyYW5mb3JtX2NhcHMgcmV0dXJucwotCSAgYSBmaXhlZCBjYXBzLCBsaWtlIGZvciBpZGVudGl0eSBvciB2b2x1bWUuCi0KLTIwMDUtMDctMDUgMDg6NDc6NDAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY2hlY2svOiBBcHBsaWNhdGlvbiBtZXNzYWdlIEFQSSBjaGFuZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDctMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL2dzdC9nc3RidXMuYyAocG91bmRfYnVzX3dpdGhfbWVzc2FnZXMpOgotCSAgKiBjaGVjay9nc3QvZ3N0bWVzc2FnZS5jIChTVEFSVF9URVNUKToKLQkgICogY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYyAoZ290X2hhbmRvZmYpOiBBcHBsaWNhdGlvbgotCSAgbWVzc2FnZSBBUEkgY2hhbmdlLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKTogTW9yZQotCSAgbG9naWMgd2Vha3MgaGVyZTogYWx3YXlzIHJ1biB0cmFuc2Zvcm1fY2FwcywgdHJ5aW5nIHBhc3N0aHJvdWdoCi0JICBvcGVyYXRpb24gb25seSBpZiB0aGUgb3JpZ2luYWwgY2FwcyBpbnRlcnNlY3RzIHdpdGggdGhlIHRyYW5zZm9ybS4KLQkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX2xpbmtfY2hlY2tfY29tcGF0aWJsZV91bmxvY2tlZCk6IERlYnVnCi0JICBzb3VyY2UgYW5kIHNpbmsgY2Fwcy4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0Y2Fwcyk6Ci0JICBJbnRlcnNlY3QgdGhlIHBlZXIgY2FwcyB3aXRoIHRoZSBwYWQgdGVtcGxhdGUgYmVmb3JlIGdvaW5nIGludG8KLQkgIHRyYW5zZm9ybV9jYXBzLgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2Fwcyk6IE1vcmUgZGVidWdnaW5nLgotCSAgKiBnc3QvZ3N0bWVzc2FnZS5oIChnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24pOiBUYWtlIGEgR3N0T2JqZWN0Ci0JICBzcmMgYXJndW1lbnQuCi0KLTIwMDUtMDctMDQgMTU6MDg6MzAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy4qOiBub3cgcmV0dXJucyB0aGUgc2lnbmFsIGlkIGZvciBiZXR0ZXIgd3JhcHBpbmcgaW4gYmluZGluZ3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgKGdzdF9wYWRfYWRkXypfcHJvYmUpOiBub3cgcmV0dXJucyB0aGUgc2lnbmFsIGlkIGZvciBiZXR0ZXIgd3JhcHBpbmcKLQkgIGluIGJpbmRpbmdzLgotCi0yMDA1LTA3LTA0IDA5OjIyOjUxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNoZWNrL2dzdC9nc3RwYWQuYzogT25seSBzZXQgZXhwbGljaXQgY2FwcyBvbiBwYWRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA3LTA0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9nc3QvZ3N0cGFkLmM6IE9ubHkgc2V0IGV4cGxpY2l0IGNhcHMgb24gcGFkcy4KLQotMjAwNS0wNy0wMSAxNjo0Njo1OSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICB0ZXN0cy9uZXR3b3JrLWNsb2NrLnNjbTogQ29tbWVudGFyeSB1cGRhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDctMDEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRlc3RzL25ldHdvcmstY2xvY2suc2NtOiBDb21tZW50YXJ5IHVwZGF0ZS4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmMgKFBST1BfRFVQTElDQVRFKTogR29uZSBkYWRkeSBnb25lLgotCSAgRGlkbid0IHJlYWxseSBtYWtlIHNlbnNlLCBub3QgaW1wbGVtZW50YWJsZSB3aXRoIGJhc2V0cmFuc2Zvcm0sCi0JICBldGMuCi0JICAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybSk6IFVucmVmIGluYnVmIHZpYSBtYWtlX3dyaXRhYmxlLiBGZWVibGUKLQkgIGF0dGVtcHQgYXQgaW1wbGVtZW50aW5nIHRoZSBzeW5jIHByb3BlcnR5LCBuZWVkcyBhbiB1bmxvY2sgbWV0aG9kLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV90cmFuc2Zvcm1fY2Fwcyk6Ci0JICBOZXcgZnVuYywgYnkgZGVmYXVsdCByZXR1cm5zIHRoZSBzYW1lIGNhcHMgKHRoZSBpZGVudGl0eQotCSAgdHJhbnNmb3JtYXRpb24pLgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRjYXBzKTogVXNlcyB0cmFuc2Zvcm1fY2FwcyB0byByZXR1cm4KLQkgIHNvbWV0aGluZyBzZW5zaWJsZS4KLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2Fwcyk6IENvbXBsaWNhdGVkIGxvZ2ljIHRvIGdldCBjYXBzIG9uCi0JICBib3RoIHBhZHMsIGV2ZW4gaWYgdGhleSBhcmUgZGlmZmVyZW50LCBhbmQgdG8gY2FsbCBzZXRfY2FwcyBvbmNlCi0JICBmb3IgZXZlcnkgdGltZSBib3RoIHBhZHMgZ2V0IHRoZWlyIGNhcHMgc2V0LgotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9oYW5kbGVfYnVmZmVyKTogR2l2ZSB0aGUgcmVmIHRvIHRoZSB0cmFuc2Zvcm0KLQkgIGZ1bmN0aW9uLiBBbGxvd3MgaW4tcGxhY2UgbW9kaWZpY2F0aW9uIG9mIHRoZSBidWZmZXIuCi0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaCAodHJhbnNmb3JtX2NhcHMpOiBOZXcgY2xhc3MgbWV0aG9kLgotCSAgR2l2ZW4gY2FwcyBvbiBvbmUgc2lkZSwgd2hhdCBjYW4gSSBkbyBvbiB0aGUgb3RoZXIuCi0JICAoc2V0X2NhcHMpOiBUYWtlIHR3byBjYXBzLCBvbmUgZm9yIGVhY2ggc2lkZSBvZiB0aGUgZWxlbWVudC4KLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgKiBnc3QvZ3N0cGFkLmMgKGdzdF9wYWRfZml4YXRlX2NhcHMpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1vZGlmeQotCSAgY2FwcyBpbiBwbGFjZS4gVGhpcyBpcyBzYWZlIGJlY2F1c2Ugd2UgY2FuIGNoZWNrIHRoZSBtdXRhYmlsaXR5IG9mCi0JICB0aGUgY2FwcywgYW5kIGEgZ29vZCBpZGVhIGJlY2F1c2UgZml4YXRlIGZ1bmN0aW9ucyBhcmUganVzdCBjYWxsZWQKLQkgIGFzIGEgbWF0dGVyIG9mIGxhc3QgcmVzb3J0LiAoTm90IGFjdHVhbGx5IGltcGxlbWVudGVkLikKLQkgIChnc3RfcGFkX3NldF9jYXBzKTogSWYgdGhlIGNhcHMgd2UncmUgc2V0dGluZyBpcyBhY3R1YWxseSB0aGUgc2FtZQotCSAgYXMgdGhlIGV4aXN0aW5nIHBhZCBjYXBzLCBqdXN0IHVwZGF0ZSB0aGUgcG9pbnRlciB3aXRob3V0IGNhbGxpbmcKLQkgIHNldGNhcHMuIEFzc2VydCB0aGF0IGNhcHMgaXMgZWl0aGVyIE5VTEwgb3IgZml4ZWQsIGFzIHBlciB0aGUKLQkgIGRvY3MuCi0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiBVcGRhdGUgZm9yIGZpeGF0ZSBjaGFuZ2VzLgotCi0yMDA1LTA3LTAxIDE0OjM2OjEyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBQdXQgdGhlIG1pbmlfb2JqZWN0IGludG8gR1ZhbHVlIGFzIGEgbWluaV9vYmplY3QsIG5vdCBhIGdwb2ludGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA3LTAyICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZW1pdF9oYXZlX2RhdGFfc2lnbmFsKToKLQkgIFB1dCB0aGUgbWluaV9vYmplY3QgaW50byBHVmFsdWUgYXMgYSBtaW5pX29iamVjdCwKLQkgIG5vdCBhIGdwb2ludGVyLgotCi0yMDA1LTA3LTAxIDE0OjIwOjE5ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGV4YW1wbGVzL3B3Zy9NYWtlZmlsZS5hbTogRml4IGJ1aWxkYm90IGFnYWluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL3B3Zy9NYWtlZmlsZS5hbToKLQkgIEZpeCBidWlsZGJvdCBhZ2Fpbi4KLQotMjAwNS0wNy0wMSAxMzowMTo0NyArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBkb2NzL3B3Zy9idWlsZGluZy10ZXN0YXBwLnhtbDogQWRkIGV4dHJhIGNoZWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sOgotCSAgQWRkIGV4dHJhIGNoZWNrLgotCSAgKiBleGFtcGxlcy9wd2cvTWFrZWZpbGUuYW06Ci0JICBGaXggYnVpbGRib3QuCi0KLTIwMDUtMDctMDEgMTI6NDM6MDMgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgRW5hYmxlIGJ1aWxkaW5nIHRoZSBQV0cgZXhhbXBsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleGFtcGxlcy9NYWtlZmlsZS5hbToKLQkgICogZXhhbXBsZXMvcHdnL01ha2VmaWxlLmFtOgotCSAgKiBleGFtcGxlcy9wd2cvZXh0cmFjdC5wbDoKLQkgIEVuYWJsZSBidWlsZGluZyB0aGUgUFdHIGV4YW1wbGVzLgotCSAgKiBkb2NzL3B3Zy9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbDoKLQkgIEFkZCBVUkkgaW50ZXJmYWNlIHN0dWIuCi0JICAqIGRvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbDoKLQkgICogZG9jcy9wd2cvb3RoZXItYXV0b3BsdWdnZXIueG1sOgotCSAgKiBkb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbDoKLQkgICogZG9jcy9wd2cvcHdnLnhtbDoKLQkgIEFkZCBwb3J0aW5nIGd1aWRlIChtb3N0bHkgc3R1YnMpLCByZW1vdmUgYXV0b3BsdWdnaW5nIChzZWUgQURNKS4KLQkgICogZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbDoKLQkgICogZG9jcy9wd2cvYnVpbGRpbmctY2hhaW5mbi54bWw6Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLXBhZHMueG1sOgotCSAgKiBkb2NzL3B3Zy9idWlsZGluZy1wcm9wcy54bWw6Ci0JICAqIGRvY3MvcHdnL2J1aWxkaW5nLXN0YXRlLnhtbDoKLQkgICogZG9jcy9wd2cvYnVpbGRpbmctdGVzdGFwcC54bWw6Ci0JICBVcGRhdGUgdGhlIGJ1aWxkaW5nLSoueG1sIHBhcnRzIGZvciAwLjkgY2hhbmdlcy4gQWxsIGV4YW1wbGVzCi0JICBjb2RlIGJsb2NrcyBjb21waWxlIGluIGV4YW1wbGVzL3B3Zy8qLgotCi0yMDA1LTA2LTMwIDEyOjMyOjE3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsLzogRml4IHBsYXliaW4vZGVjb2RlYmluIGV4YW1wbGVzLCB1cGRhdGUgZG9jcyBhIGJpdCwgbWVudGlvbiBidXMgaW5zdGVhZCBvZiBzaWduYWxzIGluIHZhcmlvdXMgcGxhY2VzLCBtZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbDoKLQkgICogZG9jcy9tYW51YWwvaGlnaGxldmVsLWNvbXBvbmVudHMueG1sOgotCSAgRml4IHBsYXliaW4vZGVjb2RlYmluIGV4YW1wbGVzLCB1cGRhdGUgZG9jcyBhIGJpdCwgbWVudGlvbiBidXMKLQkgIGluc3RlYWQgb2Ygc2lnbmFscyBpbiB2YXJpb3VzIHBsYWNlcywgbWVudGlvbiBrbXBsYXllciBhbmQKLQkgIGthZmZlaW5lIHNpbmNlIHRoZXkgaGF2ZSBhIHdvcmtpbmcgR1N0cmVhbWVyIGJhY2tlbmQgaW4gdGhlIEtERQotCSAgc2VjdGlvbi4KLQotMjAwNS0wNi0zMCAxMjoyNjoyNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSAgZGVidWcgZGlzYWJsZSBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkZWJ1ZyBkaXNhYmxlIGZpeGVzCi0KLTIwMDUtMDYtMzAgMTI6MTg6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZGVkIENIQU5HRVMtMC45IGRvYywgdXBkYXRlZCBzdGF0dXMgb2Ygb3RoZXIgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBDSEFOR0VTLTAuOToKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtZ2hvc3RwYWRzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtcXVlcnkudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXF1ZXJ5LnR4dDoKLQkgIEFkZGVkIENIQU5HRVMtMC45IGRvYywgdXBkYXRlZCBzdGF0dXMgb2Ygb3RoZXIgZG9jcy4KLQkgICogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICBSZW1vdmUgImhtbSIgbWFjcm8KLQotMjAwNS0wNi0zMCAxMjoxNDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuKjogU29tZSB0d2Vha3MsIG9ubHkgRU9TIGFuZCBhIGJ1ZmZlciBjb21wbGV0ZSBhIHByZXJvbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfcHJlcm9sbF9xdWV1ZV9lbXB0eSksCi0JICAoZ3N0X2Jhc2Vfc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoKSwgKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgU29tZSB0d2Vha3MsIG9ubHkgRU9TIGFuZCBhIGJ1ZmZlciBjb21wbGV0ZSBhIHByZXJvbGwuCi0KLTIwMDUtMDYtMzAgMTE6Mzk6MzQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9naG9zdF9wYWRfZG9fYWN0aXZhdGVfcHVzaCk6IFByb3h5IGFjdGl2YXRlX3B1c2ggZG93biB0byB0aGUgaW50ZXJuYWwgcGFkIGFzIHdlbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMzAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jIChnc3RfZ2hvc3RfcGFkX2RvX2FjdGl2YXRlX3B1c2gpOiBQcm94eQotCSAgYWN0aXZhdGVfcHVzaCBkb3duIHRvIHRoZSBpbnRlcm5hbCBwYWQgYXMgd2VsbC4KLQotMjAwNS0wNi0zMCAxMDo1OTozNCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvZ3N0dGFnaW50ZXJmYWNlLmM6IFNvbWUgZG9jdW1lbnRhdGlvbiBmaXhlcyAoIzMwNzM5NCBhbmQgIzMwNzM5NykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQkgICogZ3N0L2dzdHRhZ2ludGVyZmFjZS5jOgotCSAgU29tZSBkb2N1bWVudGF0aW9uIGZpeGVzICgjMzA3Mzk0IGFuZCAjMzA3Mzk3KS4KLQotMjAwNS0wNi0zMCAxMDoyMzoxNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogY2hlY2svc3RhdGVzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvLmdpdGlnbm9yZToKLQkgIGlnbm9yZSBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGlnbm9yZSBtb3JlCi0KLTIwMDUtMDYtMzAgMTA6MjI6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgZ28gYmFjayB0byB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBmb3Igbm93Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGdvIGJhY2sgdG8gdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kgZm9yIG5vdwotCi0yMDA1LTA2LTMwIDEwOjEwOjAwICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jOiBGaXggbWVtbGVhayAoIzMwOTEyNSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfaW50ZXJzZWN0X2xpc3QpOgotCSAgRml4IG1lbWxlYWsgKCMzMDkxMjUpLgotCi0yMDA1LTA2LTMwIDA5OjU5OjI3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOiBGaXggZmFrZXNyYyBleGFtcGxlIHRvIGNvbXBpbGU7IGRvZXNuJ3Qgd29yaywgYnVnIHNvbWV3aGVyZS4uLj8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbDoKLQkgIEZpeCBmYWtlc3JjIGV4YW1wbGUgdG8gY29tcGlsZTsgZG9lc24ndCB3b3JrLCBidWcgc29tZXdoZXJlLi4uPwotCSAgKiBkb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWw6Ci0JICBBZGQgcmVmZXJlbmNlIGZvciBmaWx0ZXJlZCBjYXBzIHRvIGFib3ZlIGNoYXB0ZXIuCi0KLTIwMDUtMDYtMzAgMDk6NDE6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogTGFtZSBhdHRlbXB0IGF0IG1ha2luZyB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGEgYml0IG1vcmUgcmVhZGFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoY2xlYXJfcXVldWUpLCAocmVtb3ZlX2FsbF9mcm9tX3F1ZXVlKSwKLQkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBMYW1lIGF0dGVtcHQgYXQgbWFraW5nIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gYSBiaXQKLQkgIG1vcmUgcmVhZGFibGUuCi0KLTIwMDUtMDYtMzAgMDk6MzM6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZGVzaWduLzogU29tZSBtb3JlIHR3ZWVrcyBhbmQgYWRkaXRpb25zIHRvIHRoZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtcHJlcm9sbC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkgIFNvbWUgbW9yZSB0d2Vla3MgYW5kIGFkZGl0aW9ucyB0byB0aGUgZG9jcy4KLQotMjAwNS0wNi0zMCAwOToyMzo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogUmVtb3ZlZCBhdG9taWMgb3BlcmF0aW9ucywgdXNlIGV4aXN0aW5nIExPQ0suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoX2dzdF9kb19wYXNzX2RhdGFfYWNjdW11bGF0b3IpLAotCSAgKGRlZmF1bHRfaGF2ZV9kYXRhKSwgKGdzdF9wYWRfY2xhc3NfaW5pdCksIChnc3RfcGFkX2luaXQpLAotCSAgKGdzdF9wYWRfZW1pdF9oYXZlX2RhdGFfc2lnbmFsKSwgKGdzdF9wYWRfY2hhaW4pLCAoZ3N0X3BhZF9wdXNoKSwKLQkgIChnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UpLCAoZ3N0X3BhZF9nZXRfcmFuZ2UpLAotCSAgKGdzdF9wYWRfcHVsbF9yYW5nZSksIChnc3RfcGFkX3B1c2hfZXZlbnQpLCAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9hdG9taWNfaW50X3NldCksIChnc3RfcGFkX2FkZF9kYXRhX3Byb2JlKSwKLQkgIChnc3RfcGFkX2FkZF9ldmVudF9wcm9iZSksIChnc3RfcGFkX2FkZF9idWZmZXJfcHJvYmUpLAotCSAgKGdzdF9wYWRfcmVtb3ZlX2RhdGFfcHJvYmUpLCAoZ3N0X3BhZF9yZW1vdmVfZXZlbnRfcHJvYmUpLAotCSAgKGdzdF9wYWRfcmVtb3ZlX2J1ZmZlcl9wcm9iZSk6Ci0JICBSZW1vdmVkIGF0b21pYyBvcGVyYXRpb25zLCB1c2UgZXhpc3RpbmcgTE9DSy4KLQkgIE1vdmUgZXhjZXB0aW9uIGhhbmRsaW5nIG91dCBvZiBtYWluIGNvZGUgcGF0aC4KLQotMjAwNS0wNi0zMCAwNzo0NTo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBkcm9wIGNpcmN1bGFyIHJlZmVyZW5jZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkcm9wIGNpcmN1bGFyIHJlZmVyZW5jZQotCi0yMDA1LTA2LTI5IDE5OjIwOjA3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9nc3RwYWQuYzogRml4IGFjY3VtdWxhdG9yLCBhZGQgZGVmYXVsdCB2YWx1ZSBieSB1c2luZyBfZW1pdHYoKSBpbnN0ZWFkIG9mIF9lbWl0KCkgZm9yIHNpZ25hbCBlbWlzc2lvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChfZ3N0X2RvX3Bhc3NfZGF0YV9hY2N1bXVsYXRvciksCi0JICAoc2lsbHlfcmV0dXJuX3RydWVfZnVuY3Rpb24pLCAoZ3N0X3BhZF9jbGFzc19pbml0KSwKLQkgIChnc3RfcGFkX2VtaXRfaGF2ZV9kYXRhX3NpZ25hbCksIChnc3RfcGFkX2NoYWluKSwgKGdzdF9wYWRfcHVzaCksCi0JICAoZ3N0X3BhZF9nZXRfcmFuZ2UpLCAoZ3N0X3BhZF9wdWxsX3JhbmdlKSwgKGdzdF9wYWRfcHVzaF9ldmVudCksCi0JICAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKLQkgIEZpeCBhY2N1bXVsYXRvciwgYWRkIGRlZmF1bHQgdmFsdWUgYnkgdXNpbmcgX2VtaXR2KCkgaW5zdGVhZAotCSAgb2YgX2VtaXQoKSBmb3Igc2lnbmFsIGVtaXNzaW9uLgotCi0yMDA1LTA2LTI5IDE2OjU3OjU5ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIEFkZCBwcm9iZSBleGFtcGxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sOgotCSAgKiBleGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuYW06Ci0JICBBZGQgcHJvYmUgZXhhbXBsZS4KLQkgICogZ3N0L2dzdHBhZC5jOiAoX2dzdF9kb19wYXNzX2RhdGFfYWNjdW11bGF0b3IpOgotCSAgTWFrZSB3b3JrICg/PykuCi0KLTIwMDUtMDYtMjkgMTY6NDU6NTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0bWluaW9iamVjdC5jOgotCSAgZml4IGZvciBwcGMsIGhvcGVmdWxseQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggZm9yIHBwYywgaG9wZWZ1bGx5Ci0KLTIwMDUtMDYtMjkgMTY6MTE6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiBTaW1wbGlmeSBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgc2hvcnQgd3JpdGVzIGFuZCByZXR1cm4gR1NUX0ZMT1dfRVJST1IgaWYgYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVzaW5rX3JlbmRlcik6Ci0JICBTaW1wbGlmeSBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgc2hvcnQKLQkgIHdyaXRlcyBhbmQgcmV0dXJuIEdTVF9GTE9XX0VSUk9SIGlmIGFuIGVycm9yIG9jY3VyZWQuCi0KLTIwMDUtMDYtMjkgMTY6MDU6MjYgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZG9jcy9nc3QvZ3N0cmVhbWVyLWRvY3Muc2dtbDogUmVtb3ZlIHByb2JlcyBtb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JICBSZW1vdmUgcHJvYmVzIG1vcmUuCi0KLTIwMDUtMDYtMjkgMTU6NTE6MjUgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgUmVtb3ZlIG9sZCBwcm9iZXMsIGFkZCBuZXcgZy1zaWduYWwtYmFzZWQgcHJvYmVzIGFuZCBzb21lIHV0aWxpdHkgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cHJvYmUuc2dtbDoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChfZ3N0X2RvX3Bhc3NfZGF0YV9hY2N1bXVsYXRvciksCi0JICAoZ3N0X3BhZF9jbGFzc19pbml0KSwgKGdzdF9wYWRfaW5pdCksIChnc3RfcGFkX2NoYWluKSwKLQkgIChnc3RfcGFkX3B1c2gpLCAoZ3N0X3BhZF9nZXRfcmFuZ2UpLCAoZ3N0X3BhZF9wdWxsX3JhbmdlKSwKLQkgIChnc3RfcGFkX3B1c2hfZXZlbnQpLCAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9wYWRfYWRkX2RhdGFfcHJvYmUpLAotCSAgKGdzdF9wYWRfYWRkX2V2ZW50X3Byb2JlKSwgKGdzdF9wYWRfYWRkX2J1ZmZlcl9wcm9iZSksCi0JICAoZ3N0X3BhZF9yZW1vdmVfZGF0YV9wcm9iZSksIChnc3RfcGFkX3JlbW92ZV9ldmVudF9wcm9iZSksCi0JICAoZ3N0X3BhZF9yZW1vdmVfYnVmZmVyX3Byb2JlKToKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBSZW1vdmUgb2xkIHByb2JlcywgYWRkIG5ldyBnLXNpZ25hbC1iYXNlZCBwcm9iZXMgYW5kIHNvbWUgdXRpbGl0eQotCSAgZnVuY3Rpb25zLgotCi0yMDA1LTA2LTI5IDE1OjE3OjI1ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvOiBNb3ZlZCBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9bc2lua3xzcmNdX2NhcHMoKSB0byBnc3R1dGlscyBhbmQgYWRkZWQgdGhlIGRlZmluaXRpb24gdG8gdGhlIGhlYWRlciBmaWxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmM6Ci0JICBNb3ZlZCBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9bc2lua3xzcmNdX2NhcHMoKSB0byBnc3R1dGlscyBhbmQgYWRkZWQKLQkgIHRoZSBkZWZpbml0aW9uIHRvIHRoZSBoZWFkZXIgZmlsZS4KLQotMjAwNS0wNi0yOSAxNDo1NjowOCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBkb2NzL2dzdC9NYWtlZmlsZS5hbSAoc2Nhbi1idWlsZC5zdGFtcCk6IFRvdGFsbHkgb25seSBjaGVjayBwbHVnaW5zIGZyb20gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtIChzY2FuLWJ1aWxkLnN0YW1wKTogVG90YWxseSBvbmx5IGNoZWNrCi0JICBwbHVnaW5zIGZyb20gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCi0KLTIwMDUtMDYtMjkgMTQ6NTI6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvZ3N0L3RtcGwvOiBTb21lIGZpeGluZ3MgZm9yIGJsYW50ZW50bHkgd3JvbmcgdGV4dC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGJ1ZmZlci5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGNsb2NrLnNnbWw6Ci0JICBTb21lIGZpeGluZ3MgZm9yIGJsYW50ZW50bHkgd3JvbmcgdGV4dC4KLQotMjAwNS0wNi0yOSAxMjo0MDozOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3QuYzoKLQkgIGxvZ2ljIHdhcyByZXZlcnNlZCwgZHVoCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGxvZ2ljIHdhcyByZXZlcnNlZCwgZHVoCi0KLTIwMDUtMDYtMjkgMTI6MjU6MDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBhZGQgQSBHU1RfUExVR0lOX1BBVEhfT05MWSBlbnYgdmFyOyBpZiBpdCBpcyBzZXQsIGl0IHdpbGwgb25seSBzY2FuIHRoZSBHU1RfUExVR0lOX1BBVEggbG9jYXRpb25zLCBhbmQgbm90IGFkZCBzeXN0ZW0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdC5jOiAoYWRkX3BhdGhfZnVuYyksIChpbml0X3ByZSk6Ci0JICAqIGdzdC9nc3RyZWdpc3RyeS5jOiAoZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoKToKLQkgIGFkZCBBIEdTVF9QTFVHSU5fUEFUSF9PTkxZIGVudiB2YXI7IGlmIGl0IGlzIHNldCwgaXQgd2lsbAotCSAgb25seSBzY2FuIHRoZSBHU1RfUExVR0lOX1BBVEggbG9jYXRpb25zLCBhbmQgbm90IGFkZAotCSAgc3lzdGVtIGxvY2F0aW9ucwotCi0yMDA1LTA2LTI5IDEyOjIzOjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0YmFzZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RldmVudC5jOgotCSogZ3N0L2dzdHV0aWxzLmM6Ci0JICBkb2MgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZG9jIGZpeGVzCi0KLTIwMDUtMDYtMjkgMTI6MDI6MTMgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbDogRml4IGF1dG9wbHVnZ2luZyBleGFtcGxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JICBGaXggYXV0b3BsdWdnaW5nIGV4YW1wbGUuCi0KLTIwMDUtMDYtMjkgMTE6NDY6MTYgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZG9jcy9tYW51YWwvOiBUcnkgdG8gZ2V0IGF1dG9wbHVnZ2luZyB3b3JraW5nLCBmaXggdHlwZSBkZXRlY3Rpb24uIEZpeCB0ZXh0IGluIGhlbGxvLXdvcmxkIGltYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL21pbWUtd29ybGQuZmlnOgotCSAgVHJ5IHRvIGdldCBhdXRvcGx1Z2dpbmcgd29ya2luZywgZml4IHR5cGUgZGV0ZWN0aW9uLiBGaXggdGV4dAotCSAgaW4gaGVsbG8td29ybGQgaW1hZ2UuCi0KLTIwMDUtMDYtMjkgMTE6MTA6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IFNtYWxsIGRlYnVnIGxpbmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlX3NpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgU21hbGwgZGVidWcgbGluZS4KLQkgICogZ3N0L2dzdGNsb2NrLmg6Ci0JICBtYXAgU0lHTkFMIGFuZCBCUk9BRENBU1QgdG8gdGhlIHJpZ2h0IGZ1bmN0aW9uLgotCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICBSZW1vdmUgcmVkdW5kYW50IGJyYWNlcy4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfY2Fwcyk6Ci0JICBEb24ndCBjYWxsIHNldGNhcHMgZnVuY3Rpb24gd2hlbiByZXNldGluZyBjYXBzIHRvIE5VTEwuCi0JICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19kaXNwb3NlKSwKLQkgIChnc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCksIChnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfYXN5bmMpLAotCSAgKGdzdF9zeXN0ZW1fY2xvY2tfaWRfdW5zY2hlZHVsZSk6Ci0JICBVc2UgQlJPQURDQVNUIGFzIHRoaXMgaXMgd2hhdCB3ZSBkby4KLQotMjAwNS0wNi0yOSAxMDoyNDowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogV2UgYXJlIGFjdHVhbGx5IHByZXJvbGxpbmcgYmVmb3JlIGNvbW1pdGluZyB0aGUgc3RhdGUgY2hhbmdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZV9zaW5rX2hhbmRsZV9vYmplY3QpOgotCSAgV2UgYXJlIGFjdHVhbGx5IHByZXJvbGxpbmcgYmVmb3JlIGNvbW1pdGluZyB0aGUgc3RhdGUKLQkgIGNoYW5nZS4KLQotMjAwNS0wNi0yOSAwOToyNTo1MSArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBkb2NzL21hbnVhbC86IFVwZGF0ZSAodW50aWwgdGhyZWFkcy9zY2hlZHVsaW5nKSBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWw7IHJlbW92ZSBHc3RUaHJlYWQsIGFkZCBHc3RCdXMsIGFkZCBzaW0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1jbG9ja3MueG1sOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYWR2YW5jZWQtbWV0YWRhdGEueG1sOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXNjaGVkdWxlcnMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9hZHZhbmNlZC10aHJlYWRzLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbDoKLQkgICogZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sOgotCSAgKiBkb2NzL21hbnVhbC9oaWdobGV2ZWwtY29tcG9uZW50cy54bWw6Ci0JICAqIGRvY3MvbWFudWFsL21hbnVhbC54bWw6Ci0JICAqIGRvY3MvbWFudWFsL3RocmVhZC5maWc6Ci0JICBVcGRhdGUgKHVudGlsIHRocmVhZHMvc2NoZWR1bGluZykgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgTWFudWFsOwotCSAgcmVtb3ZlIEdzdFRocmVhZCwgYWRkIEdzdEJ1cywgYWRkIHNpbXBsZSBwb3J0aW5nIGNoZWNrbGlzdCwgYWRkCi0JICBkb2N1bWVudGF0aW9uIGZvciB0YWcgd3JpdGluZywgY2xvY2tzLCBtYWtlIGFsbCBleGFtcGxlcyB1bnRpbCB0aGlzCi0JICBwYXJ0IGNvbXBpbGUgYW5kIHJ1bi4KLQkgICogZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtOgotCSAgVXBkYXRlIGZyb20gY2hhbmdlcyB0byBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWw7IGFkZCBidXMKLQkgIGV4YW1wbGUsIHJlbW92ZSB0aHJlYWQgZXhhbXBsZS4KLQotMjAwNS0wNi0yOCAxOTo0NToyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1cy5jOiBBZGQgZGVidWdnaW5nIG1lc3NhZ2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfcG9zdCksIChnc3RfYnVzX2hhdmVfcGVuZGluZyksCi0JICAoZ3N0X2J1c19zZXRfZmx1c2hpbmcpLCAoZ3N0X2J1c19wb3ApLCAoZ3N0X2J1c19wZWVrKSwKLQkgIChnc3RfYnVzX3NvdXJjZV9kaXNwYXRjaCk6Ci0JICBBZGQgZGVidWdnaW5nIG1lc3NhZ2VzLgotCSAgTWFrZSBpbnRlcm5hbCBtZXRob2RzIHN0YXRpYy4KLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgYnVzIGlzIGZsdXNoZWQgaW4gdGhlIGhhbmRsZXIuCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfYnVzKToKLQkgIEZpeCByZWZjb3VudCBpbiBfZ2V0X2J1cygpOwotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9waXBlbGluZV9nZXRfY2xvY2tfZnVuYyk6Ci0JICBDbG9jayByZWZjb3VudGluZyBmaXhlcy4KLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBwcmVyb2xsIHRpbWVkIG91dCBtb3JlIGdyYWNlZnVsbHkuCi0JICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOiAoZ3N0X3N5c3RlbV9jbG9ja19kaXNwb3NlKToKLQkgIENsZWFuIHVwIHRoZSBpbnRlcm5hbCB0aHJlYWQgaW4gZGlzcG9zZS4gVGhpcyBpcyBuZWVkZWQKLQkgIGZvciBzdWJjbGFzc2VzIHRoYXQgYWN0dWFsbHkgZ2V0IGRpc3Bvc2VkLgotCSAgKiBnc3Qvc2NoZWR1bGVycy90aHJlYWRzY2hlZHVsZXIuYzoKLQkgIChnc3RfdGhyZWFkX3NjaGVkdWxlcl9jbGFzc19pbml0KSwgKGdzdF90aHJlYWRfc2NoZWR1bGVyX2Z1bmMpLAotCSAgKGdzdF90aHJlYWRfc2NoZWR1bGVyX2Rpc3Bvc2UpOgotCSAgRnJlZSB0aHJlYWQgcG9vbCBpbiBkaXNwb3NlLgotCi0yMDA1LTA2LTI4IDE2OjU3OjI3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHRlc3RzL25ldHdvcmstY2xvY2stdXRpbHMuc2NtIChkZWJ1ZywgcHJpbnQtZXZlbnQpOiBOZXcgdXRpbHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRlc3RzL25ldHdvcmstY2xvY2stdXRpbHMuc2NtIChkZWJ1ZywgcHJpbnQtZXZlbnQpOiBOZXcgdXRpbHMuCi0JICAqIHRlc3RzL25ldHdvcmstY2xvY2suc2NtICgqZGVidWcqLCAqd2l0aC1ncmFwaCopOiBOZXcgcGFyYW1ldGVycy4KLQkgICgqcGFja2V0LWxvc3MqKTogVW5pZmllZCBsb3NzIHByb2JhYmlsaXR5LgotCSAgKG5ldHdvcmstdGltZSk6IFJlcG9ydCBvdXQtb2YtYmFuZCBldmVudHMuCi0JICAqIHRlc3RzL3Bsb3QtZGF0YTogQWRkIHN1cHBvcnQgZm9yIG91dC1vZi1iYW5kIGV2ZW50cy4gSGFjayBpdAotCSAgaW50byB0aGlzIHNjcmlwdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgZG93biB0aGUgcGlwZTsgc2hvdWxkIGZpeAotCSAgdGhpcyBsYXRlci4KLQotMjAwNS0wNi0yOCAxNTozNjozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9nc3QvOiBEb2NzIGZpeGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6Ci0JICBEb2NzIGZpeGVzLgotCi0yMDA1LTA2LTI4IDEzOjQwOjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Z2hvc3RwYWQuYzogQ29ycmVjdGx5IHByb3h5IHRoZSBjaGVja19wdWxsX3JhbmdlIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19idWZmZXJhbGxvYyksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19jaGVja2dldHJhbmdlKSwgKGdzdF9wcm94eV9wYWRfZG9fYWNjZXB0Y2FwcyksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19maXhhdGVjYXBzKToKLQkgIENvcnJlY3RseSBwcm94eSB0aGUgY2hlY2tfcHVsbF9yYW5nZSBmdW5jdGlvbi4KLQotMjAwNS0wNi0yOCAxMjo0NToyMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSAgZml4IGZha2UgZWxlbWVudHMgdG9vCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBmYWtlIGVsZW1lbnRzIHRvbwotCi0yMDA1LTA2LTI4IDEyOjAxOjQ5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgZGlkIHMvYmFzZXMocmMvaW5rKV8vYmFzZV9zKHJjL2luaylfLzsgd2ltIHdhbnRzIHRvIHJlbW92ZSBiYXNlIGNvbXBsZXRlbHksIGJ1dCB0aGF0J3MgZm9yIGxhdGVyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRpZCBzL2Jhc2VzKHJjL2luaylfL2Jhc2VfcyhyYy9pbmspXy87IHdpbSB3YW50cyB0byByZW1vdmUgYmFzZSBjb21wbGV0ZWx5LCBidXQgdGhhdCdzIGZvciBsYXRlcgotCi0yMDA1LTA2LTI4IDExOjQ4OjU3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHRlc3RzL25ldHdvcmstY2xvY2suc2NtOiBSZW1vdmVkIG5lZWQgZm9yIHNsaWIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRlc3RzL25ldHdvcmstY2xvY2suc2NtOiBSZW1vdmVkIG5lZWQgZm9yIHNsaWIuCi0KLTIwMDUtMDYtMjggMTE6MzY6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFRoZSBkZXByZWNhdGVkIHBhZCBsb29wIGZ1bmN0aW9uIGlzIHJlbW92ZWQgbm93LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfc2V0X3BhZF9mdW5jdGlvbnMpLAotCSAgKGdzdF9iYXNlc2lua19wcmVyb2xsX3F1ZXVlX2ZsdXNoKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2VzcmNfc2V0X2RhdGFmbG93X2Z1bmNzKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV91cGRhdGVfcGFkX2Z1bmN0aW9ucyk6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiAoZ3N0X3Byb3h5X3BhZF9kb19idWZmZXJhbGxvYyksCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19hY2NlcHRjYXBzKSwgKGdzdF9wcm94eV9wYWRfZG9fZml4YXRlY2FwcyksCi0JICAoZ3N0X3Byb3h5X3BhZF9zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZ3N0cGFkLmM6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCk6Ci0JICBUaGUgZGVwcmVjYXRlZCBwYWQgbG9vcCBmdW5jdGlvbiBpcyByZW1vdmVkIG5vdy4KLQotMjAwNS0wNi0yOCAxMTozMzoyMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICB0ZXN0cy9uZXR3b3JrLWNsb2NrLnNjbSAoKnRpbWVvdXQqLCAqc2VuZC1sb3NzKiwgKnJlY3YtbG9zcyopOiBOZXcgcGFyYW1ldGVycywgc2ltdWxhdGUgbmV0d29yayBwYWNrZXQgbG9zcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNi0yOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogdGVzdHMvbmV0d29yay1jbG9jay5zY20gKCp0aW1lb3V0KiwgKnNlbmQtbG9zcyosICpyZWN2LWxvc3MqKToKLQkgIE5ldyBwYXJhbWV0ZXJzLCBzaW11bGF0ZSBuZXR3b3JrIHBhY2tldCBsb3NzLgotCSAgKiB0ZXN0cy9uZXR3b3JrLWNsb2NrLXV0aWxzLnNjbTogSW5pdGlhbGl6ZSB0aGUgUk5HLgotCi0yMDA1LTA2LTI4IDExOjAyOjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiBGbHVzaGluZyB0aGUgcHJlcm9sbCBxdWV1ZSBhbHdheXMgbmVlZHMgdG8gdW5sb2NrIHRoZSB3YWl0ZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfcHJlcm9sbF9xdWV1ZV9mbHVzaCksCi0JICAoZ3N0X2Jhc2VzaW5rX2V2ZW50KSwgKGdzdF9iYXNlc2lua19kZWFjdGl2YXRlKToKLQkgIEZsdXNoaW5nIHRoZSBwcmVyb2xsIHF1ZXVlIGFsd2F5cyBuZWVkcyB0byB1bmxvY2sgdGhlIHdhaXRlcnMuCi0KLTIwMDUtMDYtMjggMTA6NDU6NDggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9nc3RwaXBlbGluZS5jOiBXaGVlbiBhIHNlZWsgd2FzIHN1Y2Nlc3NmdWwgb24gYSBwaXBlbGluZSwgc2V0IHRoZSBzdHJlYW1fdGltZSB0byB0aGUgc2VlayBvZmZzZXQgaW4gb3JkZXIgdG8gaGF2ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3NlbmRfZXZlbnQpOgotCSAgV2hlZW4gYSBzZWVrIHdhcyBzdWNjZXNzZnVsIG9uIGEgcGlwZWxpbmUsIHNldCB0aGUgc3RyZWFtX3RpbWUgdG8gdGhlCi0JICBzZWVrIG9mZnNldCBpbiBvcmRlciB0byBoYXZlIGEgc3luY2hyb25pemVkIHN0cmVhbV90aW1lLgotCi0yMDA1LTA2LTI4IDEwOjM3OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Z2hvc3RwYWQuYzogQ2FsbCB3cmFwcGVyIGZ1bmN0aW9uIGluc3RlYWQgb2YganVzdCBjYWxsaW5nIHRoZSBmdW5jdGlvbiBwb2ludGVycy4gVGhpcyB0YWtlcyBjYXJlIG9mIGFueSBsb2NraW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZG9fYnVmZmVyYWxsb2MpLAotCSAgKGdzdF9wcm94eV9wYWRfZG9fZ2V0cmFuZ2UpLCAoZ3N0X3Byb3h5X3BhZF9kb19jaGVja2dldHJhbmdlKSwKLQkgIChnc3RfcHJveHlfcGFkX2RvX2dldGNhcHMpLCAoZ3N0X3Byb3h5X3BhZF9kb19hY2NlcHRjYXBzKSwKLQkgIChnc3RfcHJveHlfcGFkX2RvX2ZpeGF0ZWNhcHMpOgotCSAgQ2FsbCB3cmFwcGVyIGZ1bmN0aW9uIGluc3RlYWQgb2YganVzdCBjYWxsaW5nIHRoZSBmdW5jdGlvbgotCSAgcG9pbnRlcnMuIFRoaXMgdGFrZXMgY2FyZSBvZiBhbnkgbG9ja2luZyBhbmQgd2hhdG1vcmUuCi0KLTIwMDUtMDYtMjggMTA6Mjg6MzEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuKjogQ09OTkVDVEVEIC0+IExJTktFRC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FsbG9jX2J1ZmZlciksIChnc3RfcGFkX3B1c2gpLAotCSAgKGdzdF9wYWRfcHVsbF9yYW5nZSk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIENPTk5FQ1RFRCAtPiBMSU5LRUQuCi0KLTIwMDUtMDYtMjggMDk6NTk6MDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgKi5jOiBEb24ndCBjYXN0IHRvIEdTVF9PQkpFQ1Qgd2hlbiByZWZmaW5nIG9yIHVucmVmZmluZy4gTGFyZ2Ugc291cmNlLW11bmdpbmcgY29tbWl0ISEhCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqICouYzogRG9uJ3QgY2FzdCB0byBHU1RfT0JKRUNUIHdoZW4gcmVmZmluZyBvciB1bnJlZmZpbmcuIExhcmdlCi0JICBzb3VyY2UtbXVuZ2luZyBjb21taXQhISEKLQotMjAwNS0wNi0yOCAwOToxNzoxNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdG9iamVjdC5zZ21sOgotCSogZ3N0L2dzdG9iamVjdC5jOgotCSogZ3N0L2dzdG9iamVjdC5oOgotCSAgZ3N0L2dzdG9iamVjdC5jIChnc3Rfb2JqZWN0X3VucmVmLCBnc3Rfb2JqZWN0X3JlZikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNi0yOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdG9iamVjdC5jIChnc3Rfb2JqZWN0X3VucmVmLCBnc3Rfb2JqZWN0X3JlZikKLQkgIChnc3Rfb2JqZWN0X3NpbmspOiBUYWtlIGdwb2ludGVyIGFyZ3VtZW50cywgbm90IEdzdE9iamVjdCAtLQotCSAgYXZvaWRzIGNhc3RzLiBMaWtlIEdMaWIuCi0KLTIwMDUtMDYtMjggMDg6NDE6NDMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9wcm94eV9wYWRfZG9fYWN0aXZhdGUpOiBEb24ndCBwcm94eSBhY3RpdmF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNi0yOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9wcm94eV9wYWRfZG9fYWN0aXZhdGUpOiBEb24ndCBwcm94eQotCSAgYWN0aXZhdGUuCi0KLTIwMDUtMDYtMjcgMTg6Mzk6NDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgc2h1dCB1cCBnY2MzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHNodXQgdXAgZ2NjMwotCi0yMDA1LTA2LTI3IDE4OjM1OjA1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMgKGdzdF90eXBlX2ZpbmRfaGVscGVyKTogVW5yZWYgYW55IHJlbWFpbmluZyBidWZmZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMgKGdzdF90eXBlX2ZpbmRfaGVscGVyKTogVW5yZWYgYW55Ci0JICByZW1haW5pbmcgYnVmZmVyLgotCSAgKiBnc3QvZ3N0dHJhY2UuYyAoZ3N0X2FsbG9jX3RyYWNlX2xpc3Rfc29ydGVkKTogTmV3IGhlbHBlciwKLQkgIHJldHVybnMgYSBzb3J0ZWQgY29weSBvZiB0aGUgdHJhY2UgbGlzdC4KLQkgIChnc3RfYWxsb2NfdHJhY2VfcHJpbnRfbGl2ZSk6IE5ldyBBUEksIG9ubHkgcHJpbnRzIHRyYWNlcyB3aXRoCi0JICBsaXZlIG9iamVjdHMuIFNvcnQgdGhlIGxpc3QuCi0JICAoZ3N0X2FsbG9jX3RyYWNlX3ByaW50X2FsbCk6IFNvcnQgdGhlIGxpc3QuCi0JICAoZ3N0X2FsbG9jX3RyYWNlX3ByaW50KTogQWxpZ24gY29sdW1ucy4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdHR0eXBlZmluZGVsZW1lbnQuYzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzoKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IEFkYXB0IGZvciBwYWQgYWN0aXZhdGlvbiBjaGFuZ2VzLgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYyAoZ3N0X3BpcGVsaW5lX2luaXQpOiBVbnJlZiBhZnRlciBwYXJlbnRpbmcKLQkgIHNjaGVkLgotCSAgKGdzdF9waXBlbGluZV9kaXNwb3NlKTogRHJvcCByZWYgb24gc2NoZWQuCi0JICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9pbml0KTogU2V0IHRoZSBkZWZhdWx0IGFjdGl2YXRlIGZ1bmMuCi0JICAoZ3N0X3BhZF9hY3RpdmF0ZV9kZWZhdWx0KTogUHVzaCBtb2RlIGJ5IGRlZmF1bHQuCi0JICAocHJlX2FjdGl2YXRlX3N3aXRjaCwgcG9zdF9hY3RpdmF0ZV9zd2l0Y2gpOiBOZXcgc3R1YnMsIHRoaW5ncyB0bwotCSAgZG8gYmVmb3JlIGFuZCBhZnRlciBzd2l0Y2hpbmcgYWN0aXZhdGlvbiBtb2RlcyBvbiBwYWRzLgotCSAgKGdzdF9wYWRfc2V0X2FjdGl2ZSk6IFRha2UgYSBib29sZWFuIGFuZCBub3QgYSBtb2RlLCBkaXNwYXRjaCB0bwotCSAgdGhlIHBhZCdzIGFjdGl2YXRlIGZ1bmN0aW9uIHRvIGNob29zZSB3aGljaCBtb2RlIHRvIGFjdGl2YXRlLgotCSAgU2hvcnRjdXQgb24gZGVhY3RpdmF0aW9uIGFuZCBjYWxsIHRoZSByaWdodCBmdW5jdGlvbiBkaXJlY3RseS4KLQkgIChnc3RfcGFkX2FjdGl2YXRlX3B1bGwpOiBOZXcgQVBJLCAoZGUpYWN0aXZhdGVzIGEgcGFkIGluIHB1bGwKLQkgIG1vZGUuCi0JICAoZ3N0X3BhZF9hY3RpdmF0ZV9wdXNoKTogTmV3IEFQSSwgc2FtZSBmb3IgcHVzaCBtb2RlLgotCSAgKGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uKQotCSAgKGdzdF9wYWRfc2V0X2FjdGl2YXRlcHVsbF9mdW5jdGlvbikKLQkgIChnc3RfcGFkX3NldF9hY3RpdmF0ZXB1c2hfZnVuY3Rpb24pOiBTZXR0ZXJzIGZvciBuZXcgQVBJLgotCSAgKiBnc3QvZ3N0bWluaW9iamVjdC5jIChnc3RfbWluaV9vYmplY3RfbmV3LCBnc3RfbWluaV9vYmplY3RfZnJlZSk6Ci0JICBUcmFjZSBhbGwgbWluaW9iamVjdHMuCi0JICAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUpOiBVbnJlZiB0aGUgYXJnIGlmIHdlIGNvcHksIGxpa2UKLQkgIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUuCi0JICAqIGdzdC9nc3RtZXNzYWdlLmMgKF9nc3RfbWVzc2FnZV9pbml0aWFsaXplKTogTm8gdHJhY2UgaW5pdC4KLQkgICogZ3N0L2dzdGdob3N0cGFkLmMgKGdzdF9wcm94eV9wYWRfZG9fYWN0aXZhdGUpCi0JICAoZ3N0X3Byb3h5X3BhZF9kb19hY3RpdmF0ZXB1bGwsIGdzdF9wcm94eV9wYWRfZG9fYWN0aXZhdGVwdXNoKToKLQkgIEFkYXB0IGZvciBuZXcgcGFkIEFQSS4KLQkgICogZ3N0L2dzdGV2ZW50LmMgKF9nc3RfZXZlbnRfaW5pdGlhbGl6ZSk6IERvbid0IGluaXRpYWxpemUgdHJhY2UuCi0JICAqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmMgKGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMpCi0JICAoZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMpOiBOZXcgQVBJIGZ1bmN0aW9ucy4KLQkgICogZ3N0L2dzdGVsZW1lbnQuYyAoaXRlcmF0b3JfZm9sZF93aXRoX3Jlc3luYyk6IE5ldyB1dGlsaXR5LAotCSAgc2hvdWxkIGZvbGQgaW50byBnc3RpdGVyYXRvci5jIGluIHNvbWUgZm9ybS4KLQkgIChnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlKTogU2ltcGxpZmllZCB2aWEgdXNlIG9mIGZvbGQgYW5kCi0JICBkZWxlZ2F0aW9uIG9mIGRlY2lzaW9ucyB0byBnc3RwYWQtPmFjdGl2YXRlLgotCSAgKiBnc3QvZ3N0YnVzLmMgKGdzdF9idXNfc291cmNlX2ZpbmFsaXplKTogU2V0IHRoZSBidXMgdG8gTlVMTCwKLQkgIGhlbHAgaW4gZGVidWdnaW5nLgotCSAgKiBnc3QvZ3N0YnVmZmVyLmMgKF9nc3RfYnVmZmVyX2luaXRpYWxpemUpOiBSZWYgdGhlIGJ1ZmZlciB0eXBlCi0JICBjbGFzcyBvbmNlIGluIGluaXQsIGxpa2UgZ3N0bWVzc2FnZS4gRGlkbid0IHJ1biBpbnRvIHRoaXMgaXNzdWUKLQkgIGJ1dCBpdCBzZWVtcyBjb3JyZWN0LiBEb24ndCBpbml0aWFsaXplIGEgdHJhY2UsIGdzdG1pbmlvYmplY3QgZG9lcwotCSAgdGhhdC4KLQkgICogY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYyAodGVzdF9zdG9wX2Zyb21fYXBwKTogTmV3Ci0JICB0ZXN0LCBydW5zIGZha2VzcmMgISBmYWtlc2luaywgc3RvcHBpbmcgb24gOjpoYW5kb2ZmIHZpYSBhIG1lc3NhZ2UKLQkgIHRvIHRoZSBidXMuCi0JICAoYXNzZXJ0X2xpdmVfY291bnQpOiBOZXcgdXRpbCBmdW5jdGlvbiwgdXNlcyBhbGxvYyB0cmFjZXMgdG8gY2hlY2sKLQkgIGNsZWFudXAuCi0JICAqIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jICh0ZXN0X2dob3N0X3BhZHMpOiBNb3JlIHJlZmNvdW50IGNoZWNrcy4KLQkgIFRvIGJlIG1vZGlmaWVkIHdoZW4gdW5saW5rIGRyb3BzIHRoZSBpbnRlcm5hbCBwYWQuCi0KLTIwMDUtMDYtMjcgMTg6MTE6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYzogQ2xlYW51cCB0aGUgZ2V0X3N0YXRlKCkgZnVuY3Rpb24gYSBsaXR0bGUsIG1ha2Ugc3VyZSBpdCBpdGVyYXRlcyB0aGUgc2FtZSBzZXQgb2YgZWxlbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9nZXRfc3RhdGUpLCAoZ3N0X2Jpbl9pdGVyYXRlX3N0YXRlX29yZGVyKSwKLQkgIChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBDbGVhbnVwIHRoZSBnZXRfc3RhdGUoKSBmdW5jdGlvbiBhIGxpdHRsZSwgbWFrZSBzdXJlIGl0Ci0JICBpdGVyYXRlcyB0aGUgc2FtZSBzZXQgb2YgZWxlbWVudHMuCi0JICBBZGRlZCBzdHViIGl0ZXJhdGVfc3RhdGVfb3JkZXIoKS4KLQotMjAwNS0wNi0yNyAxNDo0MDowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc2luay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJhc2V0cmFuc2Zvcm0uc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RpdGVyYXRvci5zZ21sOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RpdGVyYXRvci5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgYWRkaW5nIGJhc2V0cmFuc2Zvcm0gYW5kIGl0ZXJhdG9yIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkaW5nIGJhc2V0cmFuc2Zvcm0gYW5kIGl0ZXJhdG9yIGRvY3MKLQotMjAwNS0wNi0yNyAxMzoyNTo0NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBkb2NzL2Rlc2lnbi9wYXJ0LWFjdGl2YXRpb24udHh0OiBOb3RlcyBvbiBob3cgYWN0aXZhdGlvbiBzaG91bGQgd29yayAtLSBub3QgcXVpdGUgaW1wbGVtZW50ZWQgeWV0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA2LTI3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWFjdGl2YXRpb24udHh0OiBOb3RlcyBvbiBob3cgYWN0aXZhdGlvbiBzaG91bGQKLQkgIHdvcmsgLS0gbm90IHF1aXRlIGltcGxlbWVudGVkIHlldC4KLQotMjAwNS0wNi0yNyAwODo1NDoxNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJhc2VzcmMuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZWxlbWVudC5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RyZWdpc3RyeS5zZ21sOgotCSAgcmVtb3ZlIHN0dWZmIHRoYXQgaXNuJ3QgdGhlcmUgYW55bW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgc3R1ZmYgdGhhdCBpc24ndCB0aGVyZSBhbnltb3JlCi0KLTIwMDUtMDYtMjcgMDg6MTY6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJpbi5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50LnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdHR5cGVzLnNnbWw6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YmluLmg6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICBtb3JlIGRvYyBhbmQgd2hpdGVzcGFjZSBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtb3JlIGRvYyBhbmQgd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA1LTA2LTI1IDE5OjUzOjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0Z2hvc3RwYWQuYzogQXQgbGVhc3QgZ2V0IHRoZSBjaGFpbiBmdW5jdGlvbiBjb3JyZWN0LCBuZWVkcyBtb3JlIGZpeGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYzogKGdzdF9wcm94eV9wYWRfZG9fY2hhaW4pOgotCSAgQXQgbGVhc3QgZ2V0IHRoZSBjaGFpbiBmdW5jdGlvbiBjb3JyZWN0LCBuZWVkcyBtb3JlCi0JICBmaXhpbmcuCi0KLTIwMDUtMDYtMjUgMTk6Mzc6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFJpZ2h0LCB0d28gcHJvYmxlbXMgaGVyZTogZ2hvc3RwYWRzIGRvbid0IHRha2UgbG9ja3MgYW5kIGdsaWIgX3JlY19tdXRleF9sb2NrX2Z1bGwoKSB3aXRoIGRlcHRoPT0wIHN0aWxsIGxvY2tzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfcHJlcm9sbF9xdWV1ZV9lbXB0eSksCi0JICAoZ3N0X2Jhc2VzaW5rX2hhbmRsZV9vYmplY3QpLCAoZ3N0X2Jhc2VzaW5rX2V2ZW50KSwKLQkgIChnc3RfYmFzZXNpbmtfZG9fc3luYyksIChnc3RfYmFzZXNpbmtfaGFuZGxlX2V2ZW50KSwKLQkgIChnc3RfYmFzZXNpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2dzdHRhc2suaDoKLQkgIFJpZ2h0LCB0d28gcHJvYmxlbXMgaGVyZTogZ2hvc3RwYWRzIGRvbid0IHRha2UgbG9ja3MgYW5kCi0JICBnbGliIF9yZWNfbXV0ZXhfbG9ja19mdWxsKCkgd2l0aCBkZXB0aD09MCBzdGlsbCBsb2Nrcy4KLQkgIENhdGNoIGlsbGVnYWwgbG9ja2luZyBhbmQgZ193YXJuIHRoZW0uCi0KLTIwMDUtMDYtMjUgMTk6MTQ6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiBIYXZlIHRvIGNoZWNrIGZvciBjb21wbGV0aW9uIG5vdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL3N0YXRlcy9zaW5rcy5jOiAoU1RBUlRfVEVTVCksIChnc3Rfb2JqZWN0X3N1aXRlKToKLQkgIEhhdmUgdG8gY2hlY2sgZm9yIGNvbXBsZXRpb24gbm93Li4uCi0KLTIwMDUtMDYtMjUgMTk6MDk6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFVubG9jayBTVFJFQU1fTE9DSyB3aGF0ZXZlciB0aGUgcmVjdXJzaW9uIHdhcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX3ByZXJvbGxfcXVldWVfZW1wdHkpLAotCSAgKGdzdF9iYXNlc2lua19oYW5kbGVfb2JqZWN0KSwgKGdzdF9iYXNlc2lua19ldmVudCksCi0JICAoZ3N0X2Jhc2VzaW5rX2RvX3N5bmMpLCAoZ3N0X2Jhc2VzaW5rX2hhbmRsZV9ldmVudCksCi0JICAoZ3N0X2Jhc2VzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIFVubG9jayBTVFJFQU1fTE9DSyB3aGF0ZXZlciB0aGUgcmVjdXJzaW9uIHdhcy4KLQotMjAwNS0wNi0yNSAxNzo1NDo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogUmV3b3JrZWQgdGhlIGJhc2Ugc2luaywgaGFuZGxlIGV2ZW50IGFuZCBidWZmZXIgc2VyaWFsaXNhdGlvbiBjb3JyZWN0bHkgYW5kIHJlbW92ZWQgcG9zc2libGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlc2lua19wcmVyb2xsX3F1ZXVlX2VtcHR5KSwKLQkgIChnc3RfYmFzZXNpbmtfcHJlcm9sbF9xdWV1ZV9mbHVzaCksIChnc3RfYmFzZXNpbmtfaGFuZGxlX29iamVjdCksCi0JICAoZ3N0X2Jhc2VzaW5rX2V2ZW50KSwgKGdzdF9iYXNlc2lua19kb19zeW5jKSwKLQkgIChnc3RfYmFzZXNpbmtfaGFuZGxlX2V2ZW50KSwgKGdzdF9iYXNlc2lua19oYW5kbGVfYnVmZmVyKSwKLQkgIChnc3RfYmFzZXNpbmtfY2hhaW4pLCAoZ3N0X2Jhc2VzaW5rX2xvb3ApLCAoZ3N0X2Jhc2VzaW5rX2FjdGl2YXRlKSwKLQkgIChnc3RfYmFzZXNpbmtfY2hhbmdlX3N0YXRlKToKLQkgIFJld29ya2VkIHRoZSBiYXNlIHNpbmssIGhhbmRsZSBldmVudCBhbmQgYnVmZmVyIHNlcmlhbGlzYXRpb24KLQkgIGNvcnJlY3RseSBhbmQgcmVtb3ZlZCBwb3NzaWJsZSBkZWFkbG9jay4KLQkgIEhhbmRsZSBFT1MgY29ycmVjdGx5LgotCi0yMDA1LTA2LTI1IDE3OjUxOjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBbGxvdyBlbGVtZW50cyB0byBwb3N0IEVPUyBpbiB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoaXNfZW9zKSwgKHBpcGVsaW5lX2J1c19oYW5kbGVyKSwKLQkgIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKToKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoY2hlY2tfaW50ciksIChldmVudF9sb29wKSwgKG1haW4pOgotCSAgQWxsb3cgZWxlbWVudHMgdG8gcG9zdCBFT1MgaW4gdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbi4KLQkgIEZpeCB1cCAtbGF1bmNoLCBtYWtlIGl0IGV4aXQgdGhlIHBvbGwgbG9vcCB3aGVuIHRoZQotCSAgcGlwZWxpbmUgYWN0dWFsbHkgY2hhbmdlZCBzdGF0ZS4KLQkgIEZpeCB1cCB3YXJuaW5nIHBhcnNpbmcgaW4gLWxhdW5jaC4KLQotMjAwNS0wNi0yNSAxNzo0NDozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOiBDb3JlIHRha2VzIFNUUkVBTV9MT0NLIGZvciB1cyBub3cuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOiAoZ3N0X3RlZV9jaGFpbiksIChnc3RfdGVlX2xvb3ApLAotCSAgKGdzdF90ZWVfc2lua19hY3RpdmF0ZSk6Ci0JICBDb3JlIHRha2VzIFNUUkVBTV9MT0NLIGZvciB1cyBub3cuCi0KLTIwMDUtMDYtMjUgMTc6NDI6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEtlZXAgdHJhY2sgb2YgY3VycmVudCB0YXJnZXQgc3RhdGUgd2hpbGUgcGVyZm9ybWluZyBhIHN0YXRlIGNoYW5nZSBzbyB0aGF0IHN1YmNsYXNzZXMgY2FuIGRvIHNvbWV0aGluZyBpbnRlcmVzdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfc3RhdGVfZnVuYyksCi0JICAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzogKGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKSwKLQkgIChnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nKToKLQkgIEtlZXAgdHJhY2sgb2YgY3VycmVudCB0YXJnZXQgc3RhdGUgd2hpbGUgcGVyZm9ybWluZyBhIHN0YXRlCi0JICBjaGFuZ2Ugc28gdGhhdCBzdWJjbGFzc2VzIGNhbiBkbyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuCi0JICBGaXggcGFyc2luZyBvZiB3YXJuaW5nL2Vycm9yIG1lc3NhZ2VzIHdoZW4gR0Vycm9yIGlzIE5VTEwuCi0KLTIwMDUtMDYtMjQgMTg6MTY6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBkb2NzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWw6Ci0JKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSogZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc2luay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RiYXNlc3JjLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJpbi5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3Rjb21wYXQuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNpbmsuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0ZmFrZXNyYy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc2luay5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RmaWxlc3JjLnNnbWw6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGluZGV4LnNnbWw6Ci0JKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1xdW90ZXMueG1sOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oOgotCSAgc3RhcnQgcHVsbGluZyBpbiBiYXNlIGNsYXNzZXMgYW5kIGVsZW1lbnRzIGZvciBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHN0YXJ0IHB1bGxpbmcgaW4gYmFzZSBjbGFzc2VzIGFuZCBlbGVtZW50cyBmb3IgZG9jcwotCi0yMDA1LTA2LTI0IDA3OjQ5OjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSogZG9jcy9saWJzL01ha2VmaWxlLmFtOgotCSAgZml4ZWQgbWFrZSBkaXN0Y2hlY2sgd2l0aCBndGstZG9jIDEuMwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXhlZCBtYWtlIGRpc3RjaGVjayB3aXRoIGd0ay1kb2MgMS4zCi0KLTIwMDUtMDYtMjMgMTc6MTE6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RlbGVtZW50LmM6IFdoZW4gdGhlIHN0YXRlIGRpZCBub3QgY2hhbmdlLCBhbHNvIHJlcG9ydCBOT19QUkVST0xMIHdoZW4gaXQgbWF0dGVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMpLAotCSAgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSksIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgotCSAgV2hlbiB0aGUgc3RhdGUgZGlkIG5vdCBjaGFuZ2UsIGFsc28gcmVwb3J0IE5PX1BSRVJPTEwKLQkgIHdoZW4gaXQgbWF0dGVycy4KLQotMjAwNS0wNi0yMyAxNzowOToyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogTm8gdW5zYWZlIHRhc2sgcGF1c2luZyBwbGVhc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9ldmVudF9kZWZhdWx0KToKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfbG9vcCk6Ci0JICBObyB1bnNhZmUgdGFzayBwYXVzaW5nIHBsZWFzZS4KLQotMjAwNS0wNi0yMyAxNzowNzowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3NjaGVkdWxlcnMvdGhyZWFkc2NoZWR1bGVyLmM6IFJlZiB0aGUgdGFzayBiZWZvcmUgcHVzaGluZyBpdCBvbiB0aGUgdGhyZWFkcG9vbC4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgd2UgaGF2ZSBhIHJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NjaGVkdWxlcnMvdGhyZWFkc2NoZWR1bGVyLmM6Ci0JICAoZ3N0X3RocmVhZF9zY2hlZHVsZXJfdGFza19zdGFydCksCi0JICAoZ3N0X3RocmVhZF9zY2hlZHVsZXJfdGFza19wYXVzZSksIChnc3RfdGhyZWFkX3NjaGVkdWxlcl9mdW5jKToKLQkgIFJlZiB0aGUgdGFzayBiZWZvcmUgcHVzaGluZyBpdCBvbiB0aGUgdGhyZWFkcG9vbC4gVGhpcwotCSAgbWFrZXMgc3VyZSB0aGF0IHdlIGhhdmUgYSByZWYgd2hlbiB0aGUgdGhyZWFkZnVuY3Rpb24gaXMKLQkgIGFjdHVhbGx5IGNhbGxlZC4KLQotMjAwNS0wNi0yMyAxNToyNjowOSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlc3JjX2dldF9yYW5nZSk6IENoZWNrIGlmIHRoZSBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBmaWxlJ3Mgc2l6ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNi0yMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZXNyY19nZXRfcmFuZ2UpOiBDaGVjayBpZiB0aGUKLQkgIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gdGhlIGZpbGUncyBzaXplLgotCi0yMDA1LTA2LTIzIDE1OjA0OjQ4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RvYmplY3QuaCAoR1NUX0NMQVNTX0xPQ0ssIEdTVF9DTEFTU19UUllMT0NLKSAoR1NUX0NMQVNTX1VOTE9DSywgR1NUX0NMQVNTX0dFVF9MT0NLLCBHc3RPYmplY3RDbGFzcykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNi0yMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdG9iamVjdC5oIChHU1RfQ0xBU1NfTE9DSywgR1NUX0NMQVNTX1RSWUxPQ0spCi0JICAoR1NUX0NMQVNTX1VOTE9DSywgR1NUX0NMQVNTX0dFVF9MT0NLLCBHc3RPYmplY3RDbGFzcykKLQkgICogZ3N0L2dzdG9iamVjdC5jIChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpOiBNYWtlIHRoZSBjbGFzcyBsb2NrCi0JICByZWN1cnNpdmUuIFdpbSB3b24ndCBsZXQgbWUgZHJvcCBkZWVwX25vdGlmeS4gRGVjb2RlYmluIHdvcmtzCi0JICBhZ2Fpbiwgd2hvb3BkeSBkb28uCi0KLTIwMDUtMDYtMjMgMTQ6MTg6MTUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGdob3N0cGFkLmMgKG9uX2ludF9ub3RpZnkpOiBDYXRjaGVzIG5vdGlmeTo6Y2FwcyBvbiB0aGUgaW50ZXJuYWwgcGFkLCBhbmQgaGFja3MgYWNjb3JkaW5nbHkuIERvZXNuJ3QgZG8gaXQgb24gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jIChvbl9pbnRfbm90aWZ5KTogQ2F0Y2hlcyBub3RpZnk6OmNhcHMgb24gdGhlCi0JICBpbnRlcm5hbCBwYWQsIGFuZCBoYWNrcyBhY2NvcmRpbmdseS4gRG9lc24ndCBkbyBpdCBvbiB0aGUgdGFyZ2V0Ci0JICBwYWQgYmVjYXVzZSB3ZSBjaGFuZ2UgaXRzIGNhcHMuIFByb2JhYmx5IGNhdGNoZXMgYWxsIGNhc2VzIG9mCi0JICBpbnRlcmVzdCB0aG8uCi0JICAoZ3N0X2dob3N0X3BhZF9zZXRfcHJvcGVydHkpOiBDb25uZWN0IHRvIG5vdGlmeTo6Y2FwcyBhcwotCSAgYXBwcm9wcml0YXRlLgotCi0yMDA1LTA2LTIzIDEzOjIwOjQ0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHRlc3RzL25ldHdvcmstY2xvY2suc2NtIChwbG90LXNpbXVsYXRpb24pOiBQaXBlIGRhdGEgdG8gdGhlIGVsaXRlIHB5dGhvbiBza3JpcHQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRlc3RzL25ldHdvcmstY2xvY2suc2NtIChwbG90LXNpbXVsYXRpb24pOiBQaXBlIGRhdGEgdG8gdGhlCi0JICBlbGl0ZSBweXRob24gc2tyaXB0LgotCSAgKiB0ZXN0cy9uZXR3b3JrLWNsb2NrLXV0aWxzLnNjbSAoZGVmaW5lLXBhcmFtZXRlcik6IE5ldyBtYWNybywKLQkgIGRlZmluZXMgYSBwYXJhbWV0ZXIgdGhhdCBjYW4gYmUgc2V0IHZpYSB0aGUgY29tbWFuZCBsaW5lLgotCSAgKHNldC1wYXJhbWV0ZXIhLCBwYXJzZS1wYXJhbWV0ZXItYXJndW1lbnRzKTogQ29tbWFuZCBsaW5lIGFyZ3MKLQkgIHBhcnNlci4KLQkgICogdGVzdHMvcGxvdC1kYXRhOiBTaW1wbGUgbWF0cGxvdGxpYi1iYXNlZCBwbG90dGVyLCB0YWtlcyBpbnB1dCBvbgotCSAgc3RkaW4uCi0KLTIwMDUtMDYtMjMgMTM6MjA6MDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL21hbnVhbC9hcHBlbmRpeC1xdW90ZXMueG1sOgotCSAgYWRkIG1vcmUgaW1wb3J0YW50IGRvY3VtZW50YXRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG1vcmUgaW1wb3J0YW50IGRvY3VtZW50YXRpb24KLQotMjAwNS0wNi0yMyAxMTo0MzozOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogRG9uJ3QgcmVzdGFydCB0eXBlZmluZGluZyBvbiBhIGRpc2NvbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjMgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpOgotCSAgRG9uJ3QgcmVzdGFydCB0eXBlZmluZGluZyBvbiBhIGRpc2NvbnQuCi0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9zZXRfc3RhdGUpOgotCSAgRGVidWcgc3BlbGxpbmcgZml4LgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9zZW5kX2V2ZW50KToKLQkgIEFsbG93IGNoYW5naW5nIG1vZGUgb2YgYW4gYWN0aXZlIHBhZC4KLQkgIERlYnVnIG91dHB1dCBmaXhlcy4KLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzogKGxvYWRfZmVhdHVyZSk6Ci0JICBEb24ndCBjYXN0IGEgc3RhdGljIHBhZCB0ZW1wbGF0ZSB0byBhIG5vcm1hbCBwYWQgdGVtcGxhdGUuCi0KLTIwMDUtMDYtMjMgMTE6MjU6MjkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICByZW1vdmUgZ3N0X3N0cnRvbGwgY29tcGxldGVseSwgc2luY2UgaXQgZGlkbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIG1vcmUgdGhhbiB3aGF0IGdfYXNjaWlfc3RydG91bGwgYWxyZWFkeSBkb2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfaGVscGVyKToKLQkgIHJlbW92ZSBnc3Rfc3RydG9sbCBjb21wbGV0ZWx5LCBzaW5jZSBpdCBkaWRuJ3QgYWN0dWFsbHkgZG8KLQkgIGFueXRoaW5nIG1vcmUgdGhhbiB3aGF0IGdfYXNjaWlfc3RydG91bGwgYWxyZWFkeSBkb2VzLgotCSAgY2hlY2sgZm9yIHJhbmdlIGVycm9ycyB3aGVuIGRlc2VyaWFsaXppbmcKLQkgIGRvIGEgY2FzdCBmb3IgdGhlIHVuc2lnbmVkIGNhc2VzOyBidXQgZnVydGhlciBmaXhpbmcgbmVlZHMKLQkgIGEgZGVjaXNpb24gb24gd2hhdCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgIihpbnQpIiBhbmQKLQkgIGRlc2VyaWFsaXphdGlvbiBzaG91bGQgYmUgZm9yIHZhbHVlcyB0aGF0IGZhbGwgb3V0c2lkZSB0aGUKLQkgIHR5cGUncyBib3VuZGFyaWVzIChpZSwgcmVmdXNlLCBvciBpbnRlcnByZXQgYXMgY2FzdGluZykKLQotMjAwNS0wNi0yMyAxMDozNzowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBjaGVjay9zdGF0ZXMvc2lua3MuYzoKLQkqIGRvY3MvZGVzaWduL3BhcnQtbGl2ZS1zb3VyY2UudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0OgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdHR5cGVzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc2lua3MuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkgIEFkZGVkIHN1cHBvcnQgZm9yIGxpdmUgc291cmNlcyBhbmQgb3RoZXIgZWxlbWVudHMgdGhhdCBjYW5ub3QgZG8gcHJlcm9sbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQWRkZWQgc3VwcG9ydCBmb3IgbGl2ZSBzb3VyY2VzIGFuZCBvdGhlciBlbGVtZW50cyB0aGF0Ci0JICBjYW5ub3QgZG8gcHJlcm9sbC4KLQkgIFVwZGF0ZWQgZGVzaWduIGRvY3MsIGFkZGVkIGxpdmUtc291cmNlIGRlc2lnbiBkb2MuCi0JICBJbXBsZW1lbnRlZCBsaXZlIHNvdXJjZSBmdW5jdGlvbmFsaXR5IGluIGJhc2VzcmMKLQkgIEZpeCBlcnJvciBjb25kaXRpb24gaW4gX2Jpbl9nZXRfc3RhdGUoKQotCSAgSW1wbGVtZW50IGxpdmUgc291cmNlIGhhbmRsaW5nIGluIC1sYXVuY2guCi0JICBBZGRlZCBjaGVjayBmb3IgbGl2ZSBzb3VyY2VzLgotCSAgRml4ZWQgY2FzZSBpbiBHc3RCaW4gd2hlcmUgZWxlbWVudHMgd2VyZSBjaGFuZ2VkIHN0YXRlCi0JICBtdWx0aXBsZSB0aW1lcy4KLQotMjAwNS0wNi0yMyAwOTo1OTozMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBjaGVjay9nc3QvZ3N0cGFkLmMgKHRlc3RfZ2V0X2FsbG93ZWRfY2FwcywgdGVzdF9yZWZjb3VudCk6IEZpeCBib3JrZW4gcmVmY291bnRpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNoZWNrL2dzdC9nc3RwYWQuYyAodGVzdF9nZXRfYWxsb3dlZF9jYXBzLCB0ZXN0X3JlZmNvdW50KTogRml4Ci0JICBib3JrZW4gcmVmY291bnRpbmcuCi0KLTIwMDUtMDYtMjMgMDk6NDE6NDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L2dzdHBhZC5jOgotCSAgY29tbWl0IHRoZSBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbW1pdCB0aGUgZmlsZQotCi0yMDA1LTA2LTIzIDA5OjQxOjA5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9zZXRfY2Fwcyk6IFJlbW92ZSBuZWVkbGVzcyByZWZzLCBnc3RfY2Fwc19yZXBsYWNlIHRha2VzIGNhcmUgb2YgdGhpcyBmb3IgdXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMjMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9zZXRfY2Fwcyk6IFJlbW92ZSBuZWVkbGVzcyByZWZzLAotCSAgZ3N0X2NhcHNfcmVwbGFjZSB0YWtlcyBjYXJlIG9mIHRoaXMgZm9yIHVzLgotCi0yMDA1LTA2LTIzIDA5OjI4OjI3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RnaG9zdHBhZC5jIChnc3RfcHJveHlfcGFkX2RvX3NldGNhcHMpOiBDYWxsIHRoZSBmdWxsIGdzdF9wYWRfc2V0X2NhcHMgb24gdGhlIHRhcmdldCwgbm90IGp1c3QgaXRzIHNldGNhcHMoKSBmdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA2LTIzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0Z2hvc3RwYWQuYyAoZ3N0X3Byb3h5X3BhZF9kb19zZXRjYXBzKTogQ2FsbCB0aGUgZnVsbAotCSAgZ3N0X3BhZF9zZXRfY2FwcyBvbiB0aGUgdGFyZ2V0LCBub3QganVzdCBpdHMgc2V0Y2FwcygpIGZ1bmN0aW9uLgotCi0yMDA1LTA2LTIzIDAwOjM5OjI2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHRlc3RzLzogQSBuZXR3b3JrIGNsb2NrIHNpbXVsYXRvci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNi0yMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogdGVzdHMvbmV0d29yay1jbG9jay5zY206Ci0JICAqIHRlc3RzL25ldHdvcmstY2xvY2stdXRpbHMuc2NtOiBBIG5ldHdvcmsgY2xvY2sgc2ltdWxhdG9yLgotCSAgU29tZXRoaW5nIG9mIGFuIGFsZ29yaXRobWljIHRlc3RiZWQgYmVmb3JlIGRvaW5nIHNvbWV0aGluZyBpbiBDLgotCi0yMDA1LTA2LTIyIDE5OjU3OjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIG1ha2Ugc3VyZSBjYXBzbGlzdC5oIGdldHMgZGlzdGVkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1ha2Ugc3VyZSBjYXBzbGlzdC5oIGdldHMgZGlzdGVkCi0KLTIwMDUtMDYtMjIgMTk6NDg6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBmaWxlIGZyb21zdHJpbmcuYyB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZmlsZSBmcm9tc3RyaW5nLmMgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCi0KLTIwMDUtMDYtMjIgMTk6MjI6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjaGVjay86IGNvcHkgb3ZlciBmcm9tIDAuOCwgYW5kIGFkZCB0d28gd2l0aCBiaXRtYXNrcyBzcGVjaWZpZWQgd2l0aCAoaW50KSAweEZGLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGNoZWNrL2dzdC9jYXBzbGlzdC5oOgotCSAgY29weSBvdmVyIGZyb20gMC44LCBhbmQgYWRkIHR3byB3aXRoIGJpdG1hc2tzIHNwZWNpZmllZCB3aXRoCi0JICAoaW50KSAweEZGLi4uCi0JICAqIGNoZWNrL2dzdC9nc3RjYXBzLmM6IChTVEFSVF9URVNUKSwgKGdzdF9jYXBzX3N1aXRlKToKLQkgIGFkZCB0ZXN0IHRvIHBhcnNlIGV2ZXJ5dGhpbmcgZnJvbSBjYXBzbGlzdC5oCi0JICAqIGNoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKSwKLQkgIChtYWluKToKLQkgIGFkZCB0ZXN0IGZvciBzdHJ1Y3R1cmUgZGVzZXJpYWxpemF0aW9uCi0JICAqIGNoZWNrL2dzdC9nc3R2YWx1ZS5jOiAoU1RBUlRfVEVTVCksIChnc3RfdmFsdWVfc3VpdGUpOgotCSAgYWRkIHRlc3RzIGZvciBkZXNlcmlhbGl6YXRpb24gb2Ygc3RyaW5ncyB0byBpbnQgdHlwZXMKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSk6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkgIGFkZCBhIHdheSB0byBnZXQgdGhlIG5hbWUgb2YgYSBmaWVsZCByZWZlcmVuY2VkIGJ5IGluZGV4Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ludF9oZWxwZXIpOgotCSAgaW5zdGVhZCBvZiBjaGVja2luZyBpZiB0aGUgcmVzdWx0aW5nIGxvbmcgbG9uZyBsaWVzIGJldHdlZW4KLQkgIG1pbiBhbmQgbWF4LCB3ZSBjaGVjayBpZiB0aGUgbG9uZyBsb25nIHdvdWxkIGZpdCBpbnRvCi0JICBhIG51bWJlciBvZiBieXRlcyBmb3IgdGhlIGZpbmFsIHR5cGUuCi0JICBUaGlzIGZpeGVzIGNhc2VzIHdoZXJlIGEgc3RyaW5nIHJlcHJlc2VudHMgMl4zMiAtIDEsIHdoaWNoCi0JICB3aGVuIGNhc3QgdG8gaW50IHdvdWxkIGJlIHRoZSAodmFsaWQpIC0xLCBidXQgaXMgYmlnZ2VyIHRoYW4KLQkgIEdfTUFYSU5UCi0KLTIwMDUtMDYtMjIgMTE6MDI6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSAgYWRkIGEgbG9nIGxpbmUgZm9yIHR5cGUgZGVzZXJpYWxpemF0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBhIGxvZyBsaW5lIGZvciB0eXBlIGRlc2VyaWFsaXphdGlvbgotCi0yMDA1LTA2LTIyIDEwOjUyOjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcmV0dXJuIGxvbmcgbG9uZywgbm90IGludCwgc28gZ2ludDY0IGRlc2VyaWFsaXphdGlvbiBhY3R1YWxseSB3b3Jrcy4gIElzIHRoZXJlIGFueSBmbGFnIHRoYXQgbWFrZXMgdGhlIGNvbXBpbGVyIGNoZWNrLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdHZhbHVlLmM6IChTVEFSVF9URVNUKToKLQkgICogZ3N0L2dzdHZhbHVlLmM6IChnc3RfdmFsdWVfZGVzZXJpYWxpemUpOgotCSAgcmV0dXJuIGxvbmcgbG9uZywgbm90IGludCwgc28gZ2ludDY0IGRlc2VyaWFsaXphdGlvbiBhY3R1YWxseQotCSAgd29ya3MuICBJcyB0aGVyZSBhbnkgZmxhZyB0aGF0IG1ha2VzIHRoZSBjb21waWxlciBjaGVjayB0aGlzID8KLQkgIEZpeGVzICMzMDg1NTkKLQotMjAwNS0wNi0yMiAwOTo1NToxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1ZmZlci5oOiBBZGRlZCBjb252ZW5pZW5jZSBtYWNyb3MgZm9yIHNldHRpbmcgYnVmZmVycyBpbiBHVmFsdWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5oOgotCSAgQWRkZWQgY29udmVuaWVuY2UgbWFjcm9zIGZvciBzZXR0aW5nIGJ1ZmZlcnMgaW4gR1ZhbHVlLgotCi0yMDA1LTA2LTIxIDE3OjQxOjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svZ3N0LzogYWRkIGEgdGVzdCBkZXNlcmlhbGl6aW5nIGludDY0LCBhbmQgY29tbWVudCBwYXJ0IG91dCBiZWNhdXNlIGl0IGZhaWxzLCB5YXkgIQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC8uY3ZzaWdub3JlOgotCSAgKiBjaGVjay9nc3QvZ3N0dmFsdWUuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X3ZhbHVlX3N1aXRlKToKLQkgIGFkZCBhIHRlc3QgZGVzZXJpYWxpemluZyBpbnQ2NCwgYW5kIGNvbW1lbnQgcGFydCBvdXQgYmVjYXVzZQotCSAgaXQgZmFpbHMsIHlheSAhCi0KLTIwMDUtMDYtMjEgMTY6NTM6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9nc3QvZ3N0LmM6Ci0JKiB0ZXN0cy9jaGVjay9nc3QvZ3N0LmM6Ci0JICBjb21taXQgYSBmaWxlIEkgZm9yZ290Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbW1pdCBhIGZpbGUgSSBmb3Jnb3QKLQotMjAwNS0wNi0yMSAxNjo0ODo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogY2hlY2svZ3N0L2dzdHZhbHVlLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2Fwcy92YWx1ZV9zZXJpYWxpemUuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvdGVzdF9nc3RfaW5pdC5jOgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL2NhcHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvY2Fwcy92YWx1ZV9zZXJpYWxpemUuYzoKLQkqIHRlc3RzdWl0ZS90ZXN0X2dzdF9pbml0LmM6Ci0JICBtb3ZlIG92ZXIgYSB2YWx1ZV9zZXJpYWxpemUgdGVzdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtb3ZlIG92ZXIgYSB2YWx1ZV9zZXJpYWxpemUgdGVzdAotCi0yMDA1LTA2LTIwIDE1OjE4OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGFkLmM6IFNtYWxsIGRvYyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzoKLQkgIFNtYWxsIGRvYyB1cGRhdGVzLgotCSAgKiBnc3QvZ3N0dmFsdWUuYzogKGdzdF92YWx1ZV9jb21wYXJlX2J1ZmZlciksCi0JICAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9idWZmZXIpLCAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2J1ZmZlciksCi0JICAoZ3N0X3ZhbHVlX2NvbXBhcmVfZmxhZ3MpLCAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFncyksCi0JICAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZsYWdzKSwgKF9nc3RfdmFsdWVfaW5pdGlhbGl6ZSk6Ci0JICBGaXggc2VyaWFsaXNhdGlvbiBvZiBidWZmZXJzLCB0aGV5IGFyZSBub3QgYm94ZWQgdHlwZXMgYW55bW9yZQotCi0yMDA1LTA2LTIwIDE1OjE0OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9nc3QvZ3N0Y2Fwcy5jOiBUZXN0Y2FzZSB0byBzaG93IGVycm9yIGluIGJ1ZmZlci1vbi1jYXBzIHNlcmlhbGlzYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0L2dzdGNhcHMuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X2NhcHNfc3VpdGUpOgotCSAgVGVzdGNhc2UgdG8gc2hvdyBlcnJvciBpbiBidWZmZXItb24tY2FwcyBzZXJpYWxpc2F0aW9uLgotCi0yMDA1LTA2LTIwIDE1OjEzOjQzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGRvY3MvcmFuZG9tL3dpbmdvL3BvcnRpbmctcGx1Z2lucy10by0wLjk6IEEgcGl0aWZ1bCBkb2N1bWVudCBJIHdpbGwgYmUgYWRkaW5nIHRvIGxhdGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA2LTIwICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBkb2NzL3JhbmRvbS93aW5nby9wb3J0aW5nLXBsdWdpbnMtdG8tMC45OiBBIHBpdGlmdWwgZG9jdW1lbnQgSQotCSAgd2lsbCBiZSBhZGRpbmcgdG8gbGF0ZXIuCi0KLTIwMDUtMDYtMjAgMTE6NDE6MTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHN5c3RlbWNsb2NrLmMgKGdzdF9zeXN0ZW1fY2xvY2tfaW5pdCk6IFVubG9jayB0aGUgY2xvY2sgaWYgaXRzIHNvY2tzIGZpbGwgd2l0aCByb2Nrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNi0yMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHN5c3RlbWNsb2NrLmMgKGdzdF9zeXN0ZW1fY2xvY2tfaW5pdCk6IFVubG9jayB0aGUgY2xvY2sKLQkgIGlmIGl0cyBzb2NrcyBmaWxsIHdpdGggcm9ja3MuCi0JICAoZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4pOiBTZXQgdGhlIG5hbWUgb24gb2JqZWN0IGNvbnN0cnVjdGlvbi4KLQkgIEF2b2lkIGRvdWJsZS1jaGVja2VkIGxvY2tpbmcuCi0KLTIwMDUtMDYtMjAgMTE6MzI6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nc3R1cmkuYzogRml4IHBvdGVudGlhbCBlbmRsZXNzIGxvb3AuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHVyaS5jOiAoZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSk6Ci0JICBGaXggcG90ZW50aWFsIGVuZGxlc3MgbG9vcC4KLQotMjAwNS0wNi0yMCAxMToyNzozNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2dob3N0cGFkcy8uZ2l0aWdub3JlOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9naG9zdHBhZHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2dob3N0cGFkcy9naG9zdHBhZHMuYzoKLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9naG9zdHBhZHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzdWl0ZS9naG9zdHBhZHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvZ2hvc3RwYWRzL2dob3N0cGFkcy5jOgotCSAgcmVtb3ZlIGFub3RoZXIgdGVzdCB0aGF0J3Mgb2Jzb2xldGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGFub3RoZXIgdGVzdCB0aGF0J3Mgb2Jzb2xldGUKLQotMjAwNS0wNi0yMCAxMToyMzo1OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2Nsb2NrLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2Nsb2NrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9jbG9jay9jbG9jazEuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvY2xvY2svY2xvY2syLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2Nsb2NrL3NpZ25lZG5lc3MuYzoKLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9jbG9jay8uZ2l0aWdub3JlOgotCSogdGVzdHN1aXRlL2Nsb2NrL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL2Nsb2NrL2Nsb2NrMS5jOgotCSogdGVzdHN1aXRlL2Nsb2NrL2Nsb2NrMi5jOgotCSogdGVzdHN1aXRlL2Nsb2NrL3NpZ25lZG5lc3MuYzoKLQkgIHJlbW92ZSBjbG9jayB0ZXN0c3VpdGUsIGltcG9ydGFudCBzdHVmZiBhbHJlYWR5IG1vdmVkIHRvIGNoZWNrCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBjbG9jayB0ZXN0c3VpdGUsIGltcG9ydGFudCBzdHVmZiBhbHJlYWR5IG1vdmVkIHRvIGNoZWNrCi0KLTIwMDUtMDYtMjAgMTE6MTg6NDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9iaW5zLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2JpbnMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2JpbnMvaW50ZXJmYWNlLmM6Ci0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvYmlucy8uZ2l0aWdub3JlOgotCSogdGVzdHN1aXRlL2JpbnMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvYmlucy9pbnRlcmZhY2UuYzoKLQkgIHJlbW92ZSB0ZXN0IHRoYXQgd2FzIGFscmVhZHkgbW92ZWQgdG8gY2hlY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIHRlc3QgdGhhdCB3YXMgYWxyZWFkeSBtb3ZlZCB0byBjaGVjawotCi0yMDA1LTA2LTE5IDExOjMyOjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IGFkZCBnc3R0YWcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9NYWtlZmlsZS5hbToKLQkgIGFkZCBnc3R0YWcKLQkgICogY2hlY2svZ3N0L2dzdHRhZy5jOiAoY2hlY2tfdGFncyksIChTVEFSVF9URVNUKSwgKGdzdF90YWdfc3VpdGUpLAotCSAgKG1haW4pOgotCSAgbW92ZSBvdmVyIGZyb20gdGVzdHN1aXRlIGRpciBhbmQgY2xlYW4gdXAKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvZ3N0dGFnLmM6Ci0JICAqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkgICogdGVzdHN1aXRlL3RhZ3MvLmN2c2lnbm9yZToKLQkgICogdGVzdHN1aXRlL3RhZ3MvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzdWl0ZS90YWdzL21lcmdlLmM6Ci0JICByZW1vdmUgdGVzdHN1aXRlL3RhZ3MKLQotMjAwNS0wNi0xOSAxMDo1NDoxMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGJpbi5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RidWZmZXIuc2dtbDoKLQkqIGRvY3MvZ3N0L3RtcGwvZ3N0Y2Fwcy5zZ21sOgotCSogZG9jcy9nc3QvdG1wbC9nc3RzdHJ1Y3R1cmUuc2dtbDoKLQkqIGdzdC9nc3RiaW4uaDoKLQkqIGdzdC9nc3RidWZmZXIuaDoKLQkgIHNvbWUgbW9yZSBkb2NzIGNsZWFudXAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc29tZSBtb3JlIGRvY3MgY2xlYW51cAotCi0yMDA1LTA2LTE5IDEwOjMxOjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogdGVzdHMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9idWZzcGVlZC8uZ2l0aWdub3JlOgotCSogdGVzdHMvYnVmc3BlZWQvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9idWZzcGVlZC9SRUFETUU6Ci0JKiB0ZXN0cy9idWZzcGVlZC9nc3RtZW1wb29sLmM6Ci0JKiB0ZXN0cy9idWZzcGVlZC9nc3RtZW1wb29sLmg6Ci0JKiB0ZXN0cy9idWZzcGVlZC90ZXN0MS5jOgotCSogdGVzdHMvYnVmc3BlZWQvdGVzdDIuYzoKLQkqIHRlc3RzL3NwaWRleV9iZW5jaC5jOgotCSAgcmVtb3ZlIGJ1ZnNwZWVkIGFuZCBzcGlkZXlfYmVuY2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGJ1ZnNwZWVkIGFuZCBzcGlkZXlfYmVuY2gKLQotMjAwNS0wNi0xOSAxMDoyMjo0NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL2dzdC90bXBsL2dzdGVudW10eXBlcy5zZ21sOgotCSogd2luMzIvZ3N0ZW51bXR5cGVzLmM6Ci0JICBjbGVhbiB1cCBkb2NzIGEgbGl0dGxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNsZWFuIHVwIGRvY3MgYSBsaXR0bGUKLQotMjAwNS0wNi0xOSAwMDo1MjozMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL2dzdGNoZWNrLmg6IGFkZCBtYWNyb3MgZm9yIGNoZWNraW5nIHJlZmNvdW50cyBvbiBvYmplY3RzIGFuZCBjYXBzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svZ3N0Y2hlY2suaDoKLQkgIGFkZCBtYWNyb3MgZm9yIGNoZWNraW5nIHJlZmNvdW50cyBvbiBvYmplY3RzIGFuZCBjYXBzCi0JICAqIGNoZWNrL2dzdC9nc3RwYWQuYzogKFNUQVJUX1RFU1QpLCAoZ3N0X3BhZF9zdWl0ZSk6Ci0JICBhZGQgc29tZSBtb3JlIHVuaXQgdGVzdHMKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9saW5rX2NoZWNrX2NvbXBhdGlibGVfdW5sb2NrZWQpLAotCSAgKGdzdF9wYWRfbGlua19wcmVwYXJlKSwgKGdzdF9wYWRfbGluayksIChnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMpOgotCSAgZml4IGxlYWtlZCByZWZjb3VudHMgKEkgaG9wZSA6KSkgc28gdW5pdHRlc3Qgd29ya3MKLQkgICogZ3N0L2dzdHBhZC5oOgotCSAgd2hpdGVzcGFjZSByZW1vdmFsCi0KLTIwMDUtMDYtMTggMjI6MzM6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gaGVhZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIGhlYWQKLQotMjAwNS0wNi0xNyAxMjowMDozNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBjaGFuZ2Vsb2cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgY2hhbmdlbG9nCi0KLTIwMDUtMDYtMTcgMTE6NTg6NDggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyAoZ3N0X2Jhc2VzaW5rX2NoYWluKTogUmVtb3ZlIGJvZ3VzIGFzc2VydDsgaXQncyBhbHdheXMgcG9zc2libGUgdGhhdCB0aGUgcGFkIGdldHMgZGVhY3RpdmF0ZWQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMTcgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlc2lua19jaGFpbik6IFJlbW92ZSBib2d1cwotCSAgYXNzZXJ0OyBpdCdzIGFsd2F5cyBwb3NzaWJsZSB0aGF0IHRoZSBwYWQgZ2V0cyBkZWFjdGl2YXRlZCBpbgotCSAgYmV0d2VlbiB0aGUgY2hlY2tzIGluIGdzdHBhZC5jIGFuZCB0aGUgaW1wbGVtZW50YXRpb24uIFJlbHkgb24KLQkgIGZpbmlzaF9wcmVyb2xsKCkgdG8gcmV0dXJuIGEgRkxVU0hJTkcgb3Igc2ltaWxhciBpbnN0ZWFkIG9mIG9uIHRoZQotCSAgYXNzZXJ0LgotCi0yMDA1LTA2LTE3IDExOjMzOjI3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmMgKGdzdF9iYXNlc2lua19ldmVudCk6IE9ubHkgd2FpdCBmb3IgdGhlIGNsb2NrIGFuZCBwb3N0IGFuIEVPUyBtZXNzYWdlIGlmIHdlIGNvbWUgb3V0IG9mIGZpbmlzaC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA2LTE3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jIChnc3RfYmFzZXNpbmtfZXZlbnQpOiBPbmx5IHdhaXQgZm9yIHRoZQotCSAgY2xvY2sgYW5kIHBvc3QgYW4gRU9TIG1lc3NhZ2UgaWYgd2UgY29tZSBvdXQgb2YgZmluaXNoX3ByZXJvbGwgaW4KLQkgIHRoZSBwbGF5aW5nIHN0YXRlLgotCi0yMDA1LTA2LTE3IDA5OjU4OjM4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogUkVBRE1FOgotCSAgaW5jb3Jwb3JhdGUgcGx1Z2lucyBzdHVmZiBhbmQgdW5pbnN0YWxsZWQgc3R1ZmYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaW5jb3Jwb3JhdGUgcGx1Z2lucyBzdHVmZiBhbmQgdW5pbnN0YWxsZWQgc3R1ZmYKLQotMjAwNS0wNi0xNyAwOTozMjoxOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9pbmRleGVycy8uZ2l0aWdub3JlOgotCSogcGx1Z2lucy9pbmRleGVycy8uZ2l0aWdub3JlOgotCSAgaWdub3JlIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWdub3JlIG1vcmUKLQotMjAwNS0wNi0xNyAwOToxMjozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL2dzdC8uZ2l0aWdub3JlOgotCSogZ3N0L2Jhc2UvLmdpdGlnbm9yZToKLQkqIGdzdC9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogZ3N0L3BhcnNlLy5naXRpZ25vcmU6Ci0JKiBnc3QvcmVnaXN0cmllcy8uZ2l0aWdub3JlOgotCSogZ3N0L3NjaGVkdWxlcnMvLmdpdGlnbm9yZToKLQkqIGxpYnMvZ3N0L2Jhc2UvLmdpdGlnbm9yZToKLQkqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vLmdpdGlnbm9yZToKLQkqIGxpYnMvZ3N0L2NvbnRyb2wvLmdpdGlnbm9yZToKLQkqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC8uZ2l0aWdub3JlOgotCSogbGlicy9nc3QvZ2V0Yml0cy8uZ2l0aWdub3JlOgotCSogcGx1Z2lucy9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZ3N0Ly5naXRpZ25vcmU6Ci0JKiB0b29scy8uZ2l0aWdub3JlOgotCSAgaWdub3JlIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWdub3JlIG1vcmUKLQotMjAwNS0wNi0xNyAwODo1OTo0MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JKiBDaGFuZ2VMb2c6Ci0JKiBSRUFETUU6Ci0JKiBjaGVjay8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvbWFudWFsLy5naXRpZ25vcmU6Ci0JKiBnc3QvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWFudWFsLy5naXRpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZTsgZml4IFJFQURNRQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpZ25vcmUgbW9yZTsgZml4IFJFQURNRQotCi0yMDA1LTA2LTE2IDE3OjUwOjE2ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogQWxsb3cgTlVMTCBhcyBwb3NzaWJsZSB2YWx1ZSBmb3IgZmlsdGVyX2NhcHMgcHJvcGVydHksIGluZGljYXRpbmcgR1NUX0NBUFNfQU5ZLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmM6IChnc3RfY2Fwc2ZpbHRlcl9jbGFzc19pbml0KSwKLQkgIChnc3RfY2Fwc2ZpbHRlcl9zZXRfcHJvcGVydHkpOiBBbGxvdyBOVUxMIGFzIHBvc3NpYmxlIHZhbHVlCi0JICBmb3IgZmlsdGVyX2NhcHMgcHJvcGVydHksIGluZGljYXRpbmcgR1NUX0NBUFNfQU5ZLgotCi0yMDA1LTA2LTA5IDEzOjMzOjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzogZml4IGRlYnVnIG91dHB1dAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6IChnc3RfZmFrZXNyY19jcmVhdGUpOgotCSAgZml4IGRlYnVnIG91dHB1dAotCSAgKiBnc3Qvc2NoZWR1bGVycy9NYWtlZmlsZS5hbToKLQkgIHVzZSBsaWJnc3QgcHJlZml4Ci0JICAqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgZml4IHNwZWMgZm9yIGl0Ci0KLTIwMDUtMDYtMDkgMTI6MjM6MDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3RyZWFtZXIuc3BlYy5pbjogY2xlYW4gdXAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIGNsZWFuIHVwCi0KLTIwMDUtMDYtMDkgMTI6MDk6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3RyZWFtZXIuc3BlYy5pbjogY2xlYW4gdXAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIGNsZWFuIHVwCi0KLTIwMDUtMDYtMDkgMTI6MDM6MDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBUT0RPOgotCSogZG9jcy9yYW5kb20vVE9ETy1wcmUtMC45OgotCSAgaGF2ZSBhIHJlYWwgVE9ETywgbW92ZSBvbGQgVE9ETwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBoYXZlIGEgcmVhbCBUT0RPLCBtb3ZlIG9sZCBUT0RPCi0KLTIwMDUtMDYtMDkgMTI6MDA6MjcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgcG8gdXBkYXRlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwbyB1cGRhdGVzCi0KLTIwMDUtMDYtMDkgMTE6MTI6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgdXBkYXRlIHRyYW5zbGF0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMDUtMDYtMDggMjI6MTY6MjcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHV0aWxzLmM6IFJQQUQgZml4ZXMgYWxsIGFyb3VuZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNi0wOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHV0aWxzLmM6IFJQQUQgZml4ZXMgYWxsIGFyb3VuZC4KLQkgIChnc3RfZWxlbWVudF9saW5rX3BhZHMpOiBSZWZjb3VudGluZyBmaXhlcy4KLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkgICogcGFyc2UvZ3JhbW1hci55OgotCSAgKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSAgKiBnc3QvZ3N0cXVldWUuYzogUlBBRCBmaXhlcy4KLQkgICogZ3N0L2dzdGdob3N0cGFkLmg6Ci0JICAqIGdzdC9nc3RnaG9zdHBhZC5jOiBOZXcgZ2hvc3QgcGFkIGltcGxlbWVudGF0aW9uIGFzIGZ1bGwgcHJveHkKLQkgIHBhZHMuIFRoZSB0cmlja3kgdGhpbmcgaXMgdGhleSBwcm92aWRlIGJvdGggc291cmNlIGFuZCBzaW5rCi0JICBpbnRlcmZhY2VzLCBzaW5jZSB0aGV5IHByb3h5IHRoZSBpbnRlcm5hbCBwYWQgZm9yIHRoZSBleHRlcm5hbAotCSAgcGFkLCBhbmQgdmljZSB2ZXJzYS4gSW1wbGVtZW50IHdpdGggbG93ZXItbGV2ZWwgUHJveHlQYWQgb2JqZWN0cywKLQkgIHdpdGggdGhlIGludGVyaW9yIHByb3h5IHBhZCBhcyBhIGNoaWxkIG9mIHRoZSBleHRlcmlvciBnaG9zdCBwYWQuCi0JICBTaG91bGQgd3JpdGUgYSBkb2Mgb24gdGhpcy4KLQkgICogZ3N0L2dzdHBhZC5oOiBzL1JQQUQvUEFELywgcy9SZWFsUGFkL1BhZC8uCi0JICAoZ3N0X3BhZF9zZXRfbmFtZSwgZ3N0X3BhZF9zZXRfcGFyZW50KTogTWFjcm9zIHJlbW92ZWQsIHVzZQotCSAgZ3N0X29iamVjdCBBUEkuCi0JICAqIGdzdC9nc3RwYWQuYzogQmlnIGNoYW5nZXMuIE5vIG1vcmUgc3R1YiBiYXNlIEdzdFBhZCwgbm93IGFsbAotCSAgcGFkcyBhcmUgcmVhbCBwYWRzLiBObyBnaG9zdCBwYWRzIGluIHRoaXMgZmlsZS4gTm90IGRvY3VtZW50aW5nCi0JICB0aGUgbXlyaWFkIHMvUlBBRC9QQUQvIGFuZCBSRUFMSVpFIGZpeGVzLgotCSAgKGdzdF9wYWRfY2xhc3NfaW5pdCk6IEFkZCBwcm9wZXJ0aWVzIGZvciAiZGlyZWN0aW9uIiBhbmQKLQkgICJ0ZW1wbGF0ZSIuIEJvdGggYXJlIGNvbnN0cnVjdC1vbmx5LCBzbyB0aGV5IGNhbid0IGNoYW5nZSBkdXJpbmcKLQkgIHRoZSBsaWZlIG9mIHRoZSBwYWQuIEZpeGVzIHByb3Blcmx5IGRlcml2aW5nIGZyb20gR3N0UGFkLgotCSAgKGdzdF9wYWRfY3VzdG9tX25ldywgZ3N0X3BhZF9jdXN0b21fbmV3X2Zyb21fdGVtcGxhdGUpOiBHb25lLiBGb3IKLQkgIGRlcml2ZWQgb2JqZWN0cywganVzdCBzZXQgcHJvcGVydGllcyB3aGVuIGNyZWF0aW5nIHRoZSBvYmplY3RzIHZpYQotCSAgZ19vYmplY3RfbmV3LgotCSAgKGdzdF9wYWRfZ2V0X3BhcmVudCk6IEltcGxlbWVudCBhcyBhIGZ1bmN0aW9uLCByZXR1cm4gTlVMTCBpZiB0aGUKLQkgIHBhcmVudCBpcyBub3QgYW4gZWxlbWVudC4KLQkgIChnc3RfcGFkX2dldF9yZWFsX3BhcmVudCwgZ3N0X3BhZF9hZGRfZ2hvc3RfcGFkKQotCSAgKGdzdF9wYWRfcmVtb3ZlX2dob3N0X3BhZCwgZ3N0X3BhZF9yZWFsaXplKTogUmVtb3ZlZC4KLQkgICogZ3N0L2dzdG9iamVjdC5jIChnc3Rfb2JqZWN0X2NsYXNzX2luaXQpOiBNYWtlIG5hbWUgYSBjb25zdHJ1Y3QKLQkgIHByb3BlcnR5LiBEb24ndCBzZXQgaXQgaW4gdGhlIG9iamVjdCBpbml0LgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9hZGRfcGFkKTogRG9uJ3QgYWxsb3cgYWRkaW5nIHBhZHMKLQkgIHdpdGggVU5LTk9XTiBkaXJlY3Rpb24uCi0JICAoZ3N0X2VsZW1lbnRfYWRkX2dob3N0X3BhZCk6IFJlbW92ZSBub24tb3J0aG9nb25hbCBBUEkuIFJlcGxhY2UKLQkgIHdpdGggZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZSwgZ3N0X2dob3N0X3BhZF9uZXcgKG5hbWUsIHBhZCkpLgotCSAgKGdzdF9lbGVtZW50X3JlbW92ZV9wYWQpOiBSZW1vdmUgZ2hvc3QtcGFkIHNwZWNpYWwgY2FzZXMuCi0JICAoZ3N0X2VsZW1lbnRfcGFkc19hY3RpdmF0ZSk6IFJlbW92ZSBycGFkIGNydWZ0LgotCSAgKiBnc3QvZ3N0YmluLmMgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKTogVXNlIGdzdF9wYWRfZ2V0X3BhcmVudCB0bwotCSAgY2F0Y2ggdGhlIHBhZCdzLXBhcmVudC1ub3QtYW4tZWxlbWVudCBjYXNlLgotCSAgKiBnc3QvZ3N0Lmg6IEluY2x1ZGUgZ3N0Z2hvc3RwYWQuaC4KLQkgICogZ3N0L2dzdC5jIChpbml0X3Bvc3QpOiBObyBtb3JlIHJlYWwsIGdob3N0IHBhZHMuCi0JICAqIGdzdC9NYWtlZmlsZS5hbTogQWRkIGdzdGdob3N0cGFkLltjaF0uCi0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgKiBjaGVjay9nc3QvZ3N0YmluLmM6Ci0JICAqIGNoZWNrL2dzdC9nc3RnaG9zdHBhZC5jICh0ZXN0X2dob3N0X3BhZHMpOiBDaGVjayB0aGF0IGxpbmtpbmcKLQkgIGludG8gYSBiaW4gY3JlYXRlcyBnaG9zdCBwYWRzLCBhbmQgdGhhdCB0aGUgcmVmY291bnRzIGFyZSByaWdodC4KLQkgIFBhcnRseSBtb3ZlZCBmcm9tIGdzdGJpbi5jLgotCi0yMDA1LTA2LTA4IDE0OjAwOjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY2hlY2svOiBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC1saWJzLy5jdnNpZ25vcmU6Ci0JICAqIGNoZWNrL2dzdC8uY3ZzaWdub3JlOgotCSAgKiBjaGVjay9waXBlbGluZXMvLmN2c2lnbm9yZToKLQkgIGlnbm9yZSBtb3JlCi0JICAqIGNoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmM6IChzZXR1cF9waXBlbGluZSksIChydW5fcGlwZWxpbmUpLAotCSAgKFNUQVJUX1RFU1QpLCAoY2xlYW51cF9zdWl0ZSksIChtYWluKToKLQkgIGFkZCBzb21lIHRlc3RzIHJlbGF0ZWQgdG8gY2xlYW51cCBhZnRlciBydW5uaW5nIHBpcGVsaW5lcwotCi0yMDA1LTA2LTA4IDEzOjU3OjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jOgotCSAgYWRkIGEgR3N0QnVmZmVyIHVuaXQgdGVzdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgYSBHc3RCdWZmZXIgdW5pdCB0ZXN0Ci0KLTIwMDUtMDYtMDggMTM6NDU6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBwcmV2aW91cyBjb21taXQgYWNjaWRlbnRhbGx5IGFsc28gYWRkZWQgcmVmY291bnQgZGVmaW5lcyBmb3IgZ3N0bWluaW9iamVjdCwgbG9nZ2luZyB0aGF0IG5vdwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwcmV2aW91cyBjb21taXQgYWNjaWRlbnRhbGx5IGFsc28gYWRkZWQgcmVmY291bnQgZGVmaW5lcyBmb3IgZ3N0bWluaW9iamVjdCwgbG9nZ2luZyB0aGF0IG5vdwotCi0yMDA1LTA2LTA4IDEzOjQyOjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6Ci0JKiBnc3QvZ3N0bWluaW9iamVjdC5oOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBhZGQgYSAncGx1Z2lucycgZGlyIHRvIHRoZSBQTFVHSU5fUEFUSCBpbiB0aGUgdW5pbnN0YWxsZWQgc2NyaXB0IHRvIGRyb3AgcmFuZG9tIG90aGVyIHBsdWdpbi1oYXZpbmcgcHJvamVjdHMgaW4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGEgJ3BsdWdpbnMnIGRpciB0byB0aGUgUExVR0lOX1BBVEggaW4gdGhlIHVuaW5zdGFsbGVkIHNjcmlwdCB0byBkcm9wIHJhbmRvbSBvdGhlciBwbHVnaW4taGF2aW5nIHByb2plY3RzIGluCi0KLTIwMDUtMDYtMDggMTM6NDE6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICB3ZSBkaWQgYSBwcmVyZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHdlIGRpZCBhIHByZXJlbGVhc2UKLQotMjAwNS0wNi0wOCAxMzo0MTozMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RvYmplY3QuaDoKLQkgIE9CSkVDVCBhY3RzIG9uIG9iaiBub3QgY2FwcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBPQkpFQ1QgYWN0cyBvbiBvYmogbm90IGNhcHMKLQotMjAwNS0wNi0wOCAxMzo0MTowNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jOgotCSAgYWRkIGEgZGVidWcgbGluZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgYSBkZWJ1ZyBsaW5lCi0KLTIwMDUtMDYtMDggMTM6NDA6NDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICB3aGl0ZSBzcGFjZSBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3aGl0ZSBzcGFjZSBmaXhlcwotCi0yMDA1LTA2LTAzIDE4OjI2OjU5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE1ha2VmaWxlLmFtOgotCSogY29tbW9uOgotCSAgYWRkZWQgc3VwcG9ydCBmb3IgaHRtbCB1bml0IHRlc3QgY292ZXJhZ2UgcmVwb3J0cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRlZCBzdXBwb3J0IGZvciBodG1sIHVuaXQgdGVzdCBjb3ZlcmFnZSByZXBvcnRzCi0KLTIwMDUtMDYtMDIgMTU6NDU6MTYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiBGcmVlIGV4aXN0aW5nIGNhcHMgaWYgdGhlIGNhcHNmaWx0ZXIgY2hhbmdlcy4gQWRkIGEgRklYTUUgYWJvdXQgc2V0dGluZyB0aG9zZSBjYXBzIG9uIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOiAoZ3N0X2NhcHNmaWx0ZXJfc2V0X3Byb3BlcnR5KToKLQkgIEZyZWUgZXhpc3RpbmcgY2FwcyBpZiB0aGUgY2Fwc2ZpbHRlciBjaGFuZ2VzLiBBZGQgYSBGSVhNRSBhYm91dAotCSAgc2V0dGluZyB0aG9zZSBjYXBzIG9uIHRoZSBwYWRzLgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZCksIChnaG9zdF91cCk6Ci0JICBCZWZvcmUgYWRkaW5nIGEgZ2hvc3QgcGFkIHRvIGEgcGFyZW50IGJpbiwgY2hlY2sgdGhhdCB0aGVyZSBpc24ndAotCSAgYWxyZWFkeSBvbmUgZm9yIHRoZSBlbGVtZW50IG9uIHRoZSBiaW4uIFByZXZlbnRzIGluZmluaXRlIHJlY3Vyc2lvbgotCSAgd2hlbiB1c2luZyBkZWNvZGViaW4gaW4gcGFyc2UgcGlwZWxpbmVzLiBBbmR5IHNheXMgaGUnbGwgcmV3cml0ZSB0aGUKLQkgIHdheSB0aGlzIHdvcmtzIGFueXdheSwgc28gaWdub3JlIHRoZSBoYWNrLgotCi0yMDA1LTA2LTAyIDExOjEyOjM0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYyAoZG9fcHVsbF90eXBlZmluZCk6IFF1ZXJ5IHRoZSBmaWxlIHNpemUsIHBhc3MgaXQgb24gdG8gdGhlIHR5cGUgZmluZCBoZWxwZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDYtMDIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYyAoZG9fcHVsbF90eXBlZmluZCk6IFF1ZXJ5IHRoZQotCSAgZmlsZSBzaXplLCBwYXNzIGl0IG9uIHRvIHRoZSB0eXBlIGZpbmQgaGVscGVyLgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmMgKGdzdF9iYXNlc3JjX2RvX3NlZWspOiBTZXQgdGhlCi0JICBzZWdtZW50X3N0YXJ0IGFuZCBzZWdtZW50X2VuZCBwcm9wZXJseSBhY2NvcmRpbmcgdG8gdGhlIHNlZWsKLQkgIG1ldGhvZC4gU2VnbWVudF9lbmQgaXMgc3RpbGwgYSBiaXQgZmxha3kgYmVjYXVzZSBvZmZzZXQgY2FuIGJlCi0JICBuZWdhdGl2ZSBmb3IgQ1VSIGFuZCBFTkQgY2FzZXMsIGJ1dCBpdCB0YWtlcyAtMSBhcyBhbiAidW5zZXQiCi0JICB2YWx1ZS4KLQotMjAwNS0wNi0wMiAwOTo0MjowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogQnVmZmVyYWxsb2M6IHJldHVybiBHc3RGbG93UmV0dXJuIHRvIG1vcmUgYWNjdXJhdGx5IHJlcG9ydCB3aHkgYWxsb2NhdGlvbiBmYWlsZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19wYWRfYnVmZmVyX2FsbG9jKSwKLQkgIChnc3RfYmFzZV9zaW5rX2J1ZmZlcl9hbGxvYyksIChnc3RfYmFzZXNpbmtfcHJlcm9sbF9xdWV1ZV9wdXNoKSwKLQkgIChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLAotCSAgKGdzdF9wYWRfbGluayksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfYWxsb2NfYnVmZmVyKSwKLQkgIChnc3RfcGFkX3F1ZXJ5KSwgKGdzdF9wYWRfc3RhcnRfdGFzayk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfYnVmZmVyYWxsb2MpLAotCSAgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pOgotCSAgQnVmZmVyYWxsb2M6IHJldHVybiBHc3RGbG93UmV0dXJuIHRvIG1vcmUgYWNjdXJhdGx5IHJlcG9ydAotCSAgd2h5IGFsbG9jYXRpb24gZmFpbGVkLgotCi0yMDA1LTA2LTAyIDA5OjM5OjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0cGlwZWxpbmUuYzogVGFrZSBzbmFwc2hvdCBvZiBzdGF0ZSB3aXRob3V0IGJsb2NraW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAoZ3N0X3BpcGVsaW5lX3NlbmRfZXZlbnQpOgotCSAgVGFrZSBzbmFwc2hvdCBvZiBzdGF0ZSB3aXRob3V0IGJsb2NraW5nLgotCi0yMDA1LTA2LTAyIDA4OjI2OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IFNtYWxsIGRvYyB1cGRhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1jYXBzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1jbG9ja3MudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW5lZ290aWF0aW9uLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1wcmVyb2xsLnR4dDoKLQkgIFNtYWxsIGRvYyB1cGRhdGVzCi0KLTIwMDUtMDUtMzAgMTY6Mjg6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBQcm90ZWN0IGxhc3RfbWVzc2FnZSBwcm9wZXJ0eSBhcyBpdCBpcyBhY2Nlc3NlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfZXZlbnQpLAotCSAgKGdzdF9pZGVudGl0eV90cmFuc2Zvcm0pLCAoZ3N0X2lkZW50aXR5X2dldF9wcm9wZXJ0eSk6Ci0JICBQcm90ZWN0IGxhc3RfbWVzc2FnZSBwcm9wZXJ0eSBhcyBpdCBpcyBhY2Nlc3NlZCBmcm9tCi0JICBtdWx0aXBsZSB0aHJlYWRzLgotCi0yMDA1LTA1LTMwIDE1OjUzOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0ZWxlbWVudC5jOiBTbGlja2VyIHBhZCBhY3RpdmF0aW9uIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2luaXQpLAotCSAgKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpLCAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKToKLQkgIFNsaWNrZXIgcGFkIGFjdGl2YXRpb24gY29kZS4KLQotMjAwNS0wNS0zMCAxNTo1MTo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogTW92ZSBlbGVtZW50ZmFjdG9yeSBtZXRob2RzIHRvIHNlcGFyYXRlIC5oIGZpbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuaDoKLQkgICogZ3N0L2dzdHR5cGVzLmg6Ci0JICBNb3ZlIGVsZW1lbnRmYWN0b3J5IG1ldGhvZHMgdG8gc2VwYXJhdGUgLmggZmlsZS4KLQotMjAwNS0wNS0zMCAxNTo0ODo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgU21hbGwgdHlwbyBmaXhlcywgZG9jIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQ6Ci0JICAqIGdzdC9nc3RzeXN0ZW1jbG9jay5oOgotCSAgU21hbGwgdHlwbyBmaXhlcywgZG9jIHVwZGF0ZXMuCi0KLTIwMDUtMDUtMzAgMTU6NDY6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3QuYzogUmVtb3ZlIGNwdS1vcHQgZmxhZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0LmM6IChnc3RfaW5pdF9nZXRfcG9wdF90YWJsZSksIChpbml0X3Bvc3QpLAotCSAgKGluaXRfcG9wdF9jYWxsYmFjayk6Ci0JICBSZW1vdmUgY3B1LW9wdCBmbGFnLgotCi0yMDA1LTA1LTMwIDE1OjQ0OjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YnVmZmVyLio6IEF2b2lkIHR5cGVjaGVja2luZyBpbiBwbGFjZXMgd2hlcmUgbm90IG5lZWRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChnc3Rfc3ViYnVmZmVyX2ZpbmFsaXplKSwKLQkgIChnc3RfYnVmZmVyX2NyZWF0ZV9zdWIpLCAoZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QpOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICBBdm9pZCB0eXBlY2hlY2tpbmcgaW4gcGxhY2VzIHdoZXJlIG5vdCBuZWVkZWQuCi0JICBBZGRlZCBhY2Nlc3NvciBmb3IgbWFsbG9jX2RhdGEuCi0KLTIwMDUtMDUtMzAgMTU6NDE6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuYzogUHJvcGFnYXRlIGVycm9ycyBmcm9tIF9zZXRfY2FwcygpIGluIGNvbmZpZ3VyZV9zcmMvc2luayBmdW5jdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgVFJVRS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcmVhbF9wYWRfaW5pdCksIChnc3RfcGFkX3NldF9hY3RpdmUpLAotCSAgKGdzdF9wYWRfbGlua19wcmVwYXJlKSwgKGdzdF9wYWRfbGluayksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwKLQkgIChnc3RfcGFkX2NvbmZpZ3VyZV9zaW5rKSwgKGdzdF9wYWRfY29uZmlndXJlX3NyYyksCi0JICAoZ3N0X3BhZF9hbGxvY19idWZmZXIpLCAoZ3N0X3BhZF9xdWVyeSksIChnc3RfcGFkX3NlbmRfZXZlbnQpLAotCSAgKGdzdF9wYWRfc3RhcnRfdGFzayk6Ci0JICBQcm9wYWdhdGUgZXJyb3JzIGZyb20gX3NldF9jYXBzKCkgaW4gY29uZmlndXJlX3NyYy9zaW5rCi0JICBmdW5jdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgVFJVRS4KLQkgIEZMVVNIIGV2ZW50cyBjYW4gdHJhdmVsIHVwIGFuZCBkb3duc3RyZWFtCi0KLTIwMDUtMDUtMzAgMTU6MzY6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEhhbmRsZSBFT1MgaW4gcHJlcm9sbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX3ByZXJvbGxfcXVldWVfcHVzaCksCi0JICAoZ3N0X2Jhc2VzaW5rX2FjdGl2YXRlKToKLQkgIEhhbmRsZSBFT1MgaW4gcHJlcm9sbC4KLQotMjAwNS0wNS0zMCAxNTozNDoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHF1ZXVlLmM6IFJlbW92ZSBvbGQgcGllY2VzIG9mIGNvZGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXVldWVfY2hhaW4pLAotCSAgKGdzdF9xdWV1ZV9sb29wKSwgKGdzdF9xdWV1ZV9oYW5kbGVfc3JjX2V2ZW50KToKLQkgIFJlbW92ZSBvbGQgcGllY2VzIG9mIGNvZGUKLQkgIEZsdXNoaW5nIHRoZSBxdWV1ZSBpbiBhbiB1cHN0cmVhbSBldmVudCBpcyBhIHZlcnkgYmFkIGlkZWEuCi0KLTIwMDUtMDUtMjkgMTM6NTY6NTUgKzAwMDAgIEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotCi0JICBmaWxlIGdzdHNpbXBsZXNjaGVkdWxlci5jIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1DT01QQU5ZLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaWxlIGdzdHNpbXBsZXNjaGVkdWxlci5jIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1DT01QQU5ZLgotCi0yMDA1LTA1LTI3IDA5OjI4OjA1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIHJlbW92ZSBjb25mbGljdCBkb29iZXJzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBjb25mbGljdCBkb29iZXJzCi0KLTIwMDUtMDUtMjcgMDk6Mjc6MzUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdG1pbmlvYmplY3QuYyAoZ3N0X3ZhbHVlX21pbmlfb2JqZWN0X2NvbGxlY3QpOiBVc2UgZ3N0X3ZhbHVlX3NldF9taW5pX29iamVjdCBzbyBhcyB0byBhZGQgYSByZWYgb24gdGhlIG9iamVjdCAoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDUtMjYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RtaW5pb2JqZWN0LmMgKGdzdF92YWx1ZV9taW5pX29iamVjdF9jb2xsZWN0KTogVXNlCi0JICBnc3RfdmFsdWVfc2V0X21pbmlfb2JqZWN0IHNvIGFzIHRvIGFkZCBhIHJlZiBvbiB0aGUgb2JqZWN0ICh3aGljaAotCSAgd2lsbCBiZSByZW1vdmVkIHdoZW4gdGhlIHZhbHVlIGlzIHVuc2V0KS4KLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmMgKGdzdF9mYWtlc2lua19jbGFzc19pbml0KTogRml4IHNpZ25hbAotCSAgYXJnIHR5cGUgaW4gOjpoYW5kb2ZmLgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOiBBbHNvIGRlYWN0aXZhdGUKLQkgIHBhZHMgaW4gUkVBRFktPk5VTEwsIGp1c3QgaW4gY2FzZSB0aGUgZWxlbWVudCBkaWRuJ3QgbWFrZSBpdCB0bwotCSAgUEFVU0VELiBXaW5nbyB0ZXN0ZWQsIFdpbSBhcHByb3ZlZC4KLQotMjAwNS0wNS0yNiAxMDo1MDoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBBIGZsdXNoaW5nIHBhZCBjYW5ub3QgYmUgdXNlZCB0byBhbGxvY19idWZmZXIgZnJvbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9saW5rX3ByZXBhcmUpLAotCSAgKGdzdF9wYWRfbGluayksIChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfYWxsb2NfYnVmZmVyKSwKLQkgIChnc3RfcGFkX3F1ZXJ5KSwgKGdzdF9wYWRfc2VuZF9ldmVudCksIChnc3RfcGFkX3N0YXJ0X3Rhc2spOgotCSAgQSBmbHVzaGluZyBwYWQgY2Fubm90IGJlIHVzZWQgdG8gYWxsb2NfYnVmZmVyIGZyb20uCi0KLTIwMDUtMDUtMjYgMTA6NDg6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RidXMuKjogSW1wbGVtZW50IGEgcmVhbCBHU291cmNlIGFuZCB1c2UgZ19tYWluX2NvbnRleHRfd2FrZXVwKCkgdG8gc2lnbmFsIG5ldyBtZXNzYWdlcyBpbnN0ZWFkIG9mIHRoZSBzb2NrZXRwYWlyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfaW5pdCksIChnc3RfYnVzX2Rpc3Bvc2UpLCAoZ3N0X2J1c19wb3N0KSwKLQkgIChnc3RfYnVzX3BvcCksIChnc3RfYnVzX3NvdXJjZV9wcmVwYXJlKSwgKGdzdF9idXNfc291cmNlX2NoZWNrKSwKLQkgIChnc3RfYnVzX3NvdXJjZV9kaXNwYXRjaCksIChnc3RfYnVzX3NvdXJjZV9maW5hbGl6ZSksCi0JICAoZ3N0X2J1c19jcmVhdGVfd2F0Y2gpLCAoZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCk6Ci0JICAqIGdzdC9nc3RidXMuaDoKLQkgIEltcGxlbWVudCBhIHJlYWwgR1NvdXJjZSBhbmQgdXNlIGdfbWFpbl9jb250ZXh0X3dha2V1cCgpIHRvCi0JICBzaWduYWwgbmV3IG1lc3NhZ2VzIGluc3RlYWQgb2YgdGhlIHNvY2tldHBhaXIuCi0KLTIwMDUtMDUtMjUgMTk6MzM6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEZpeCBzdGF0ZSBjaGFuZ2VzIGZvciBub24gc2lua3MuIFdlIG5vdyBjaGFuZ2Ugc2lua3MsIHRoZW4gZWxlbWVudHMgd2l0aCB1bmNvbm5lY3RlZCBzcmNwYWRzLCB0aGVuIHRoZSByZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGJpbl9lbGVtZW50X2lzX3NpbmspLCAoaGFzX2FuY2VzdG9yKSwKLQkgIChiaW5fZWxlbWVudF9pc19zZW1pX3NpbmspLCAoYXBwZW5kX2NoaWxkKSwgKGdzdF9iaW5fY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYWN0aXZlKSwgKGdzdF9wYWRfbGlua19wcmVwYXJlKSwKLQkgIChnc3RfcGFkX2xpbmspLCAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksIChnc3RfcGFkX3F1ZXJ5KSwKLQkgIChnc3RfcGFkX3NlbmRfZXZlbnQpLCAoZ3N0X3BhZF9zdGFydF90YXNrKToKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaW5pdCksIChnc3RfcXVldWVfbG9ja2VkX2ZsdXNoKSwKLQkgIChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLCAoZ3N0X3F1ZXVlX2NoYWluKSwgKGdzdF9xdWV1ZV9sb29wKSwKLQkgIChnc3RfcXVldWVfc2lua19hY3RpdmF0ZSksIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlKSwKLQkgIChnc3RfcXVldWVfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2dzdHF1ZXVlLmg6Ci0JICBGaXggc3RhdGUgY2hhbmdlcyBmb3Igbm9uIHNpbmtzLiBXZSBub3cgY2hhbmdlIHNpbmtzLCB0aGVuIGVsZW1lbnRzCi0JICB3aXRoIHVuY29ubmVjdGVkIHNyY3BhZHMsIHRoZW4gdGhlIHJlc3QuCi0JICBNb3JlIGVmZmljaWVudCBxdWV1ZSB1bmxvY2tpbmcgaW4gZmx1c2ggYW5kIHN0YXRlIGNoYW5nZXMuCi0JICBTZXQgdGhlIHBhZCBhY3RpdmF0ZSBtb2RlIGV2ZW4gaWYgaXQgZG9lcyBub3QgaGF2ZSBhbiBhY3RpdmF0ZQotCSAgZnVuY3Rpb24uCi0KLTIwMDUtMDUtMjUgMTY6MDk6MzQgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaDoKLQkgIGhhcHBpZnkgYnVpbGRib3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaGFwcGlmeSBidWlsZGJvdAotCi0yMDA1LTA1LTI1IDE1OjU3OjU3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogRG9uJ3QgZ28gaW4gcHVsbCBtb2RlIGZvciBub24tc2Vla2FibGUgc291cmNlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY19hY3RpdmF0ZSk6Ci0JICBEb24ndCBnbyBpbiBwdWxsIG1vZGUgZm9yIG5vbi1zZWVrYWJsZSBzb3VyY2VzLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaW5pdCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2Rpc3Bvc2UpLCAoZ3N0X3R5cGVfZmluZF9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkgIChmcmVlX2VudHJ5KSwgKHN0b3BfdHlwZWZpbmRpbmcpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYW5kbGVfZXZlbnQpLCAoZmluZF9wZWVrKSwKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pLCAoZG9fcHVsbF90eXBlZmluZCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JICBBbGxvdyB0eXBlZmluZGluZyAody9vIHNlZWtpbmcpIGluIHB1c2gtbW9kZSwgc2ltcGxpZmllZCB2ZXJzaW9uCi0JICBvZiB3aGF0IHdhcyBpbiAwLjguCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2J1ZmZlcl9qb2luKToKLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICBnc3RfYnVmZmVyX2pvaW4oKSBmcm9tIDAuOC4KLQotMjAwNS0wNS0yNSAxMzo1OToxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBEaXNhYmxlIGF0dGVtcHQgYXQgbW9kZSBzd2l0Y2hpbmcgdW50aWwgaXQgaXMgZmlndXJlZCBvdXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYWN0aXZlKSwgKGdzdF9wYWRfbGlua19wcmVwYXJlKSwKLQkgIChnc3RfcGFkX2xpbmspLCAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksIChnc3RfcGFkX3F1ZXJ5KSwKLQkgIChnc3RfcGFkX3NlbmRfZXZlbnQpLCAoZ3N0X3BhZF9zdGFydF90YXNrKToKLQkgIERpc2FibGUgYXR0ZW1wdCBhdCBtb2RlIHN3aXRjaGluZyB1bnRpbCBpdCBpcyBmaWd1cmVkIG91dC4KLQotMjAwNS0wNS0yNSAxMTo1MDoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogSW1wbGVtZW50IGdzdF9wYWRfcGF1c2Uvc3RhcnQvc3RvcF90YXNrKCksIHRha2UgU1RSRUFNIGxvY2sgaW4gdGFzayBmdW5jdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmM6IChnc3RfYWRhcHRlcl9wZWVrKSwgKGdzdF9hZGFwdGVyX2ZsdXNoKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19wcmVyb2xsX3F1ZXVlX3B1c2gpLAotCSAgKGdzdF9iYXNlc2lua19maW5pc2hfcHJlcm9sbCksIChnc3RfYmFzZXNpbmtfY2hhaW4pLAotCSAgKGdzdF9iYXNlc2lua19sb29wKSwgKGdzdF9iYXNlc2lua19hY3RpdmF0ZSksCi0JICAoZ3N0X2Jhc2VzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2RvX3NlZWspLAotCSAgKGdzdF9iYXNlc3JjX2dldF9yYW5nZSksIChnc3RfYmFzZXNyY19sb29wKSwKLQkgIChnc3RfYmFzZXNyY19hY3RpdmF0ZSk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzogKGdzdF90ZWVfc2lua19hY3RpdmF0ZSk6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZGlzcG9zZSksIChnc3RfcmVhbF9wYWRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3JlYWxfcGFkX2luaXQpLCAoZ3N0X3JlYWxfcGFkX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3JlYWxfcGFkX2dldF9wcm9wZXJ0eSksIChnc3RfcGFkX3NldF9hY3RpdmUpLAotCSAgKGdzdF9wYWRfaXNfYWN0aXZlKSwgKGdzdF9wYWRfZ2V0X3F1ZXJ5X3R5cGVzKSwgKGdzdF9wYWRfdW5saW5rKSwKLQkgIChnc3RfcGFkX2xpbmtfcHJlcGFyZSksIChnc3RfcGFkX2xpbmspLCAoZ3N0X3BhZF9nZXRfcmVhbF9wYXJlbnQpLAotCSAgKGdzdF9yZWFsX3BhZF9nZXRfY2Fwc191bmxvY2tlZCksIChnc3RfcGFkX3BlZXJfZ2V0X2NhcHMpLAotCSAgKGdzdF9wYWRfYWNjZXB0X2NhcHMpLCAoZ3N0X3BhZF9nZXRfcGVlciksIChnc3RfcGFkX3JlYWxpemUpLAotCSAgKGdzdF9wYWRfZXZlbnRfZGVmYXVsdF9kaXNwYXRjaCksIChnc3RfcGFkX2V2ZW50X2RlZmF1bHQpLAotCSAgKGdzdF9wYWRfZGlzcGF0Y2hlciksIChnc3RfcGFkX3F1ZXJ5KSwgKGdzdF9yZWFsX3BhZF9kaXNwb3NlKSwKLQkgIChnc3RfcGFkX3NhdmVfdGh5c2VsZiksIChoYW5kbGVfcGFkX2Jsb2NrKSwgKGdzdF9wYWRfY2hhaW4pLAotCSAgKGdzdF9wYWRfcHVzaCksIChnc3RfcGFkX2dldF9yYW5nZSksIChnc3RfcGFkX3B1bGxfcmFuZ2UpLAotCSAgKGdzdF9wYWRfc2VuZF9ldmVudCksIChnc3RfcGFkX3N0YXJ0X3Rhc2spLCAoZ3N0X3BhZF9wYXVzZV90YXNrKSwKLQkgIChnc3RfcGFkX3N0b3BfdGFzayk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgICogZ3N0L2dzdHF1ZXVlLmM6IChnc3RfcXVldWVfaGFuZGxlX3NpbmtfZXZlbnQpLCAoZ3N0X3F1ZXVlX2NoYWluKSwKLQkgIChnc3RfcXVldWVfbG9vcCksIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlKToKLQkgICogZ3N0L2dzdHRhc2suYzogKGdzdF90YXNrX2luaXQpLCAoZ3N0X3Rhc2tfc2V0X2xvY2spLAotCSAgKGdzdF90YXNrX2dldF9zdGF0ZSk6Ci0JICAqIGdzdC9nc3R0YXNrLmg6Ci0JICAqIGdzdC9zY2hlZHVsZXJzL3RocmVhZHNjaGVkdWxlci5jOgotCSAgKGdzdF90aHJlYWRfc2NoZWR1bGVyX3Rhc2tfc3RhcnQpLCAoZ3N0X3RocmVhZF9zY2hlZHVsZXJfZnVuYyk6Ci0JICBJbXBsZW1lbnQgZ3N0X3BhZF9wYXVzZS9zdGFydC9zdG9wX3Rhc2soKSwgdGFrZSBTVFJFQU0gbG9jawotCSAgaW4gdGFzayBmdW5jdGlvbi4KLQkgIFJlbW92ZSBBQ1RJVkUgcGFkIGZsYWcsIHVzZSBGTFVTSElORyBldmVyeXdoZXJlCi0JICBBZGRlZCBfcGFkX2NoYWluKCksIF9wYWRfZ2V0X3JhbmdlKCkgdG8gY2FsbCBjaGFpbi9nZXRyYW5nZQotCSAgZnVuY3Rpb25zLgotCSAgQWRkIGxvY2tzIGFyb3VuZCBJU19GTFVTSElORyB3aGVuIHJlYWRpbmcuCi0JICBUYWtlIFNUUkVBTSBsb2NrIGluIGNoYWluKCksIGdldF9yYW5nZSgpIGZ1bmN0aW9ucyBzbyBwbHVnaW5zCi0JICBkb24ndCBuZWVkIHRvIHRha2UgaXQgYW55bW9yZS4KLQotMjAwNS0wNS0yNSAxMToyNjoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdG9vbHMvZ3N0LWxhdW5jaC5jOiBVbnJlZiBtZXNzYWdlIGFmdGVyIHVzaW5nIGl0cyBjb250ZW50cyBpbnN0ZWFkIG9mIGJlZm9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6IChldmVudF9sb29wKToKLQkgIFVucmVmIG1lc3NhZ2UgYWZ0ZXIgdXNpbmcgaXRzIGNvbnRlbnRzIGluc3RlYWQgb2YKLQkgIGJlZm9yZS4KLQotMjAwNS0wNS0yNCAxNjo0NzowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9kZXNpZ24vOiBEb2NzIHVwZGF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtZ2hvc3RwYWRzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtcXVlcnkudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dDoKLQkgIERvY3MgdXBkYXRlcy4KLQkgIEFkZGVkIGdlbmVyYWwgb3ZlcnZpZXcgZG9jLgotCSAgQWRkZWQgZHJhZnQgZ2hvc3RwYWQgcmVwbGFjZW1lbnQgaWRlYS4KLQotMjAwNS0wNS0yMiAwNDoyNjo0MSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGRvY3MvZ3N0L3RtcGwvb2xkLzogSSBkaWRuJ3QgaW50ZW5kIHRvIGFkZCB0aGVzZSBvciBjaGVjayB0aGVtIGluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdEJpbi5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9Hc3RCdWZmZXIuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvR3N0Q2Fwcy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9Hc3RDbG9jay5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9Hc3RDb21wYXQuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvR3N0RGF0YS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9Hc3RFbGVtZW50LnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdEV2ZW50LnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdEluZGV4LnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL0dzdFN0cnVjdHVyZS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9Hc3RUYWcuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvY290aHJlYWRzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2NvdGhyZWFkc19jb21wYXQuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ2V0dGV4dC5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nb2JqZWN0Mmd0ay5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9ncmFtbWFyLnRhYi5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3QtaTE4bi1hcHAuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0LWkxOG4tbGliLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdF9wcml2YXRlLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGFnZ3JlZ2F0b3Iuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0YXJjaC5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RhdG9taWNfaW1wbC5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RidWZmZXJzdG9yZS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RkYXRhX3ByaXZhdGUuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0ZGlza3Npbmsuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0ZGlza3NyYy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RlbGVtZW50ZmFjdG9yeS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RleHRyYXR5cGVzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGZha2VzaW5rLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGZha2VzcmMuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0ZmRzaW5rLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGZkc3JjLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGZpbGVzaW5rLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdGZpbGVzcmMuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0aHR0cHNyYy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RpZGVudGl0eS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RpbmRleGZhY3Rvcnkuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0bWFyc2hhbC5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RtZDVzaW5rLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdG11bHRpZGlza3NyYy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RtdWx0aWZpbGVzcmMuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0cGFkdGVtcGxhdGUuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0cGlwZWZpbHRlci5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RzY2hlZHVsZXJmYWN0b3J5LnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdHNlYXJjaGZ1bmNzLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdHNoYXBlci5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3RzcGlkZXIuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0c3BpZGVyaWRlbnRpdHkuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0c3RhdGlzdGljcy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3R0ZWUuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9vbGQvZ3N0dGltZWNhY2hlLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvb2xkL2dzdHR5cGVmaW5kZmFjdG9yeS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9nc3R4bWxyZWdpc3RyeS5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC9ndGhyZWFkLWNvdGhyZWFkcy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL29sZC90eXBlcy5zZ21sOgotCSAgSSBkaWRuJ3QgaW50ZW5kIHRvIGFkZCB0aGVzZSBvciBjaGVjayB0aGVtIGluLgotCi0yMDA1LTA1LTIwIDEyOjQ3OjA1ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdHJlYW1lci5zcGVjLmluOgotCSAgdXBkYXRlIHNwZWMgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgc3BlYyBmaWxlCi0KLTIwMDUtMDUtMTkgMTk6NTQ6MDEgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBjb25maWd1cmUuYWM6IFVzZSAtbm8tY29tbW9uIGV2ZXJ5d2hlcmUuICBJbiBhIHNhbmUgd29ybGQsIGl0IHdvdWxkIGJlIHRoZSBkZWZhdWx0IGluIGxpYnRvb2wsIGJlY2F1c2Ugd2l0aG91dCBpdCwgeW8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6IFVzZSAtbm8tY29tbW9uIGV2ZXJ5d2hlcmUuICBJbiBhIHNhbmUgd29ybGQsIGl0Ci0JICB3b3VsZCBiZSB0aGUgZGVmYXVsdCBpbiBsaWJ0b29sLCBiZWNhdXNlIHdpdGhvdXQgaXQsIHlvdSBjYW4ndAotCSAgYnVpbGQgRExMcyBvbiBXaW5kb3dzLgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOiBSZW1vdmUgR3N0Q3B1LCBHc3REYXRhLCBHc3RUaHJlYWQKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RjcHUuc2dtbDoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RkYXRhLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0dGhyZWFkLnNnbWw6Ci0KLTIwMDUtMDUtMTkgMTk6NDE6MTIgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ3N0bWluaW9iamVjdC4qOiBBZGQgR1ZhbHVlIHNldC9nZXQgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IChnc3RfdmFsdWVfc2V0X21pbmlfb2JqZWN0KSwKLQkgIChnc3RfdmFsdWVfdGFrZV9taW5pX29iamVjdCksIChnc3RfdmFsdWVfZ2V0X21pbmlfb2JqZWN0KToKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuaDogQWRkIEdWYWx1ZSBzZXQvZ2V0IGZ1bmN0aW9ucy4KLQotMjAwNS0wNS0xOSAxNjoyNjo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogTWFrZSBzdWJidWZlciB1bnJlZiB0aGUgcGFyZW50IGluIGZpbmFsaXplLiBzb21lIG1vcmUgZGVidWdnaW5nIGluZm8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoZ3N0X2J1ZmZlcl9pbml0KSwgKGdzdF9zdWJidWZmZXJfZ2V0X3R5cGUpLAotCSAgKGdzdF9zdWJidWZmZXJfY2xhc3NfaW5pdCksIChnc3Rfc3ViYnVmZmVyX2ZpbmFsaXplKSwKLQkgIChnc3Rfc3ViYnVmZmVyX2luaXQpLCAoZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QpOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICAqIGdzdC9nc3RidXMuYzogKGdzdF9idXNfcG9zdCk6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9nZXRfcmFuZG9tX3BhZCk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9pbml0KSwgKGdzdF9tZXNzYWdlX2ZpbmFsaXplKToKLQkgIE1ha2Ugc3ViYnVmZXIgdW5yZWYgdGhlIHBhcmVudCBpbiBmaW5hbGl6ZS4KLQkgIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW5mby4KLQotMjAwNS0wNS0xOSAxNjoyMzowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogRG9uJ3QgZnJlZSBwcmVyb2xsIHF1ZXVlIHRvbyBlYXJseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlc2lua19pbml0KSwgKGdzdF9iYXNlc2lua19maW5hbGl6ZSksCi0JICAoZ3N0X2Jhc2VzaW5rX2FjdGl2YXRlKSwgKGdzdF9iYXNlc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgZnJlZSBwcmVyb2xsIHF1ZXVlIHRvbyBlYXJseS4KLQotMjAwNS0wNS0xOSAxNDo1MjoxNiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvOiBIaSwgSSdtIG91dGRhdGVkLiBQbGVhc2Ugc2hvb3QgbWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvUk9BRE1BUDoKLQkgIEhpLCBJJ20gb3V0ZGF0ZWQuIFBsZWFzZSBzaG9vdCBtZS4KLQotMjAwNS0wNS0xOSAxMjowNzozNSArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvZ3N0cGlwZWxpbmUuYzogRG8gbm90IGFjY2VzcyB2YXJpYWJsZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZGVsZXRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9zZW5kX2V2ZW50KToKLQkgIERvIG5vdCBhY2Nlc3MgdmFyaWFibGVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGRlbGV0ZWQuCi0KLTIwMDUtMDUtMTkgMDg6NDE6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1pbnNwZWN0LmM6IEEgcGx1Z2luIGZlYXR1cmUgZG9lcyB1bmZvcnR1bmF0bHkgbm90IHVzZSB0aGUgb2JqZWN0IG5hbWUgeWV0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWluc3BlY3QuYzogKHByaW50X3BsdWdpbl9mZWF0dXJlcyk6Ci0JICBBIHBsdWdpbiBmZWF0dXJlIGRvZXMgdW5mb3J0dW5hdGx5IG5vdCB1c2UgdGhlCi0JICBvYmplY3QgbmFtZSB5ZXQuLi4KLQotMjAwNS0wNS0xOCAxNzozNToyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1ZmZlci5jOiBQb3J0IF9zcGFuKCkgZnVuY3Rpb25zIHRvIG5ldyBzdWJidWZmZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuYzogKGdzdF9idWZmZXJfaXNfc3Bhbl9mYXN0KSwgKGdzdF9idWZmZXJfc3Bhbik6Ci0JICBQb3J0IF9zcGFuKCkgZnVuY3Rpb25zIHRvIG5ldyBzdWJidWZmZXJzLgotCi0yMDA1LTA1LTE4IDEzOjQ5OjA4ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9nc3RiaW4uYzogRml4IGNsb2NrIHNldHRlcnkgaW4gYmlucyB3aGVuIGFkZGluZyBraWRzIGFmdGVyIHRoZSBjbG9jayBoYXMgYmVlbiBzZWxlY3RlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKToKLQkgIEZpeCBjbG9jayBzZXR0ZXJ5IGluIGJpbnMgd2hlbiBhZGRpbmcga2lkcyBhZnRlciB0aGUgY2xvY2sgaGFzCi0JICBiZWVuIHNlbGVjdGVkLgotCi0yMDA1LTA1LTE4IDEzOjIzOjI0ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiBXb3JrYXJvdW5kIHVudGlsIHNpZ25hbHMgc3VwcG9ydCBHc3RNaW5pT2JqZWN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOiAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpOgotCSAgV29ya2Fyb3VuZCB1bnRpbCBzaWduYWxzIHN1cHBvcnQgR3N0TWluaU9iamVjdC4KLQotMjAwNS0wNS0xOCAxMTozNDo0NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nc3RidWZmZXIuYzogT29wcywgZml4IGEgdHlwbyBHU1RfVFlQRV9CVUZGRVIgLT4gR1NUX1RZUEVfU1VCQlVGRkVSLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RidWZmZXIuYzoKLQkgIE9vcHMsIGZpeCBhIHR5cG8gR1NUX1RZUEVfQlVGRkVSIC0+IEdTVF9UWVBFX1NVQkJVRkZFUi4KLQotMjAwNS0wNS0xOCAwOTo1NTo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvOiBQb3J0ZWQgYW5kIGFkZGVkIGFkYXB0ZXIgdG8gdGhlIGJhc2UgY2xhc3Nlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Jhc2UvZ3N0YWRhcHRlci5jOiAoZ3N0X2FkYXB0ZXJfYmFzZV9pbml0KSwKLQkgIChnc3RfYWRhcHRlcl9jbGFzc19pbml0KSwgKGdzdF9hZGFwdGVyX2luaXQpLAotCSAgKGdzdF9hZGFwdGVyX2Rpc3Bvc2UpLCAoZ3N0X2FkYXB0ZXJfZmluYWxpemUpLCAoZ3N0X2FkYXB0ZXJfbmV3KSwKLQkgIChnc3RfYWRhcHRlcl9jbGVhciksIChnc3RfYWRhcHRlcl9wdXNoKSwgKGdzdF9hZGFwdGVyX3BlZWspLAotCSAgKGdzdF9hZGFwdGVyX2ZsdXNoKSwgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSksCi0JICAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QpOgotCSAgKiBnc3QvYmFzZS9nc3RhZGFwdGVyLmg6Ci0JICBQb3J0ZWQgYW5kIGFkZGVkIGFkYXB0ZXIgdG8gdGhlIGJhc2UgY2xhc3Nlcy4KLQotMjAwNS0wNS0xNyAxNzo1MDo0MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IE1ha2Ugc3VyZSB0aGUgY2xhc3MgaXMgcmVmZmVkL3VucmVmZmVkIG9uY2UgYmVmb3JlIHRocmVhZHMgY2FuIGJlIHVzZWQuICBGaXhlcyAjMzA0NTUxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3QuYzoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgIE1ha2Ugc3VyZSB0aGUgY2xhc3MgaXMgcmVmZmVkL3VucmVmZmVkIG9uY2UgYmVmb3JlIHRocmVhZHMgY2FuIGJlCi0JICB1c2VkLiAgRml4ZXMgIzMwNDU1MS4KLQotMjAwNS0wNS0xNyAxNzozNzo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogRG9uJ3QgcXVldWUgYnVmZmVycyBpbiBiYXNlc2luayB3aGVuIHdlIGFyZSBmbHVzaGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX2ZpbmlzaF9wcmVyb2xsKSwKLQkgIChnc3RfYmFzZXNpbmtfY2hhaW5fdW5sb2NrZWQpLCAoZ3N0X2Jhc2VzaW5rX2FjdGl2YXRlKToKLQkgICogZ3N0L2dzdG1pbmlvYmplY3QuYzogKGdzdF9taW5pX29iamVjdF9nZXRfdHlwZSksCi0JICAoZ3N0X21pbmlfb2JqZWN0X2ZyZWUpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfcXVlcnkpLAotCSAgKGdzdF9wYWRfcHVzaCksIChnc3RfcGFkX3B1c2hfZXZlbnQpOgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgcXVldWUgYnVmZmVycyBpbiBiYXNlc2luayB3aGVuIHdlIGFyZSBmbHVzaGluZy4KLQkgIFVucmVmIGJ1ZmZlciB3aGVuIGZsdXNoaW5nIGluIGJhc2VzaW5rLgotCSAgRmx1c2ggcXVldWUgd2hlbiBnb2luZyB0byBSRUFEWQotCSAgVW5yZWYgYnVmZmVyIHdoZW4gX3B1c2goKSByZXR1cm5zIGFuIGVycm9yLgotCSAgRG9uJ3QgZnJlZSBNaW5pT2JqZWN0IGluc3RhbmNlIHdoZW4gcmVmY291bnQgaXMgaW5jcmVtZW50ZWQKLQkgIGluIF9maW5hbGl6ZSgpIHNvIHRoYXQgd2UgY2FuIHJlY292ZXIgb2JqZWN0cy4KLQotMjAwNS0wNS0xNyAxNzoyMjozMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbW1vbjoKLQkqIGRvY3MvbWFudWFsL2FkdmFuY2VkLXNjaGVkdWxlcnMueG1sOgotCSogZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWNsb2NrLnhtbDoKLQkqIGRvY3MvcHdnL2FkdmFuY2VkLWludGVyZmFjZXMueG1sOgotCSogZG9jcy9wd2cvYWR2YW5jZWQtcmVxdWVzdC54bWw6Ci0JKiBkb2NzL3B3Zy9hZHZhbmNlZC10eXBlcy54bWw6Ci0JKiBkb2NzL3B3Zy9pbnRyby1wcmVmYWNlLnhtbDoKLQkqIGV4YW1wbGVzL3BsdWdpbnMvZXhhbXBsZS5jOgotCSogZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmg6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmM6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvcGx1Z2lucy9leGFtcGxlLmg6Ci0JICBzbWFsbCBkb2MgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc21hbGwgZG9jIGZpeGVzCi0KLTIwMDUtMDUtMTcgMTQ6MTE6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IENsZWFyIHF1ZXVlIHdoZW4gZ29pbmcgdG8gUkVBRFkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9hY2NlcHRfY2FwcyksIChnc3RfcGFkX3NldF9jYXBzKSwKLQkgIChnc3RfcGFkX2FsbG9jX2J1ZmZlciksIChnc3RfcGFkX3F1ZXJ5KSwgKGdzdF9wYWRfcHVzaCk6Ci0JICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2NoYW5nZV9zdGF0ZSk6Ci0JICBDbGVhciBxdWV1ZSB3aGVuIGdvaW5nIHRvIFJFQURZLgotCSAgUmVtb3ZlIElOX1NFVENBUFMgZmxhZyB0b28uCi0KLTIwMDUtMDUtMTcgMTQ6MDE6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogUmVtb3ZlIGltcGxpY2l0IGNhc3QgZnJvbSBnYm9vbGVhbiB0byBHc3RFbGVtZW50U3RhdGVSZXR1cm47IG1ha2Ugc3VyZSB3ZSBzdGlsbCByZXR1cm4gZmFpbHVyZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBSZW1vdmUgaW1wbGljaXQgY2FzdCBmcm9tIGdib29sZWFuIHRvIEdzdEVsZW1lbnRTdGF0ZVJldHVybjsKLQkgIG1ha2Ugc3VyZSB3ZSBzdGlsbCByZXR1cm4gZmFpbHVyZSBpbiBwYXVzZWQgPT4gcmVhZHkgY2FzZSBpZgotCSAgdGhlIHBhcmVudCBjbGFzcyBmYWlscyB0byBjaGFuZ2Ugc3RhdGUgYW5kIG91ciBvd24gc3RvcAotCSAgdmZ1bmMgc3VjY2VlZHMuCi0KLTIwMDUtMDUtMTcgMTA6NDE6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRvb2xzL2dzdC1sYXVuY2guYzogTWVzc2FnZSB3YXMgdW5yZWZmZWQgdG9vIHNvb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoZXZlbnRfbG9vcCk6Ci0JICBNZXNzYWdlIHdhcyB1bnJlZmZlZCB0b28gc29vbi4KLQotMjAwNS0wNS0xNiAyMToxNzoxNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZ3N0YmluLmMgKHNpbmtfaXRlcmF0b3JfZmlsdGVyKTogRXJyLi4uIHVtLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDUtMTYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RiaW4uYyAoc2lua19pdGVyYXRvcl9maWx0ZXIpOiBFcnIuLi4gdW0uLi4KLQkgICogY2hlY2svZ3N0L2dzdGJpbi5jICh0ZXN0X2dob3N0X3BhZHMpOiBOZXcgdGVzdCBmb3IgdGhlCi0JICBnaG9zdGluZy1pZi1lbGVtZW50cy1ub3QtaW4tc2FtZS1iaW4gYmVoYXZpb3IuCi0KLTIwMDUtMDUtMTYgMjE6MDU6MjEgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZ3N0bWluaW9iamVjdC5jOiBVc2UgZ19hdG9taWNfaW50X2dldCgpIGluc3RlYWQgb2YgYWNjZXNzaW5nIHJlZmNvdW50IGRpcmVjdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6IFVzZSBnX2F0b21pY19pbnRfZ2V0KCkgaW5zdGVhZCBvZgotCSAgYWNjZXNzaW5nIHJlZmNvdW50IGRpcmVjdGx5LgotCi0yMDA1LTA1LTE2IDIwOjIxOjU1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgY2hlY2svTWFrZWZpbGUuYW06IHJlbW92ZSBHc3REYXRhIGNoZWNrcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOiByZW1vdmUgR3N0RGF0YSBjaGVja3MKLQkgICogY2hlY2svZ3N0LWxpYnMvZ2RwLmM6IChTVEFSVF9URVNUKTogZml4IGZvciBBUEkgY2hhbmdlcwotCSAgKiBnc3QvTWFrZWZpbGUuYW06IGFkZCBtaW5pb2JqZWN0LCByZW1vdmUgZGF0YQotCSAgKiBnc3QvZ3N0Lmg6IGFkZCBtaW5pb2JqZWN0LCByZW1vdmUgZGF0YQotCSAgKiBnc3QvZ3N0ZGF0YS5jOiByZW1vdmUKLQkgICogZ3N0L2dzdGRhdGEuaDogcmVtb3ZlCi0JICAqIGdzdC9nc3RkYXRhX3ByaXZhdGUuaDogcmVtb3ZlCi0JICAqIGdzdC9nc3R0eXBlcy5oOiByZW1vdmUgR3N0RXZlbnQgYW5kIEdzdE1lc3NhZ2UKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSk6IGZpeCBmb3IgQVBJIGNoYW5nZXMKLQkgICogZ3N0L2dzdG1hcnNoYWwubGlzdDogY2hhbmdlIEJPWEVEIC0+IE9CSkVDVAotCSAgSW1wbGVtZW50IEdzdE1pbmlPYmplY3QuCi0JICAqIGdzdC9nc3RtaW5pb2JqZWN0LmM6Ci0JICAqIGdzdC9nc3RtaW5pb2JqZWN0Lmg6Ci0JICBNb2RpZnkgdG8gYmUgc3ViY2xhc3NlcyBvZiBHc3RNaW5pT2JqZWN0LgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6IChfZ3N0X2J1ZmZlcl9pbml0aWFsaXplKSwgKGdzdF9idWZmZXJfZ2V0X3R5cGUpLAotCSAgKGdzdF9idWZmZXJfY2xhc3NfaW5pdCksIChnc3RfYnVmZmVyX2ZpbmFsaXplKSwgKF9nc3RfYnVmZmVyX2NvcHkpLAotCSAgKGdzdF9idWZmZXJfaW5pdCksIChnc3RfYnVmZmVyX25ldyksIChnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MpLAotCSAgKGdzdF9zdWJidWZmZXJfZ2V0X3R5cGUpLCAoZ3N0X3N1YmJ1ZmZlcl9pbml0KSwKLQkgIChnc3RfYnVmZmVyX2NyZWF0ZV9zdWIpLCAoZ3N0X2J1ZmZlcl9pc19zcGFuX2Zhc3QpLAotCSAgKGdzdF9idWZmZXJfc3Bhbik6Ci0JICAqIGdzdC9nc3RidWZmZXIuaDoKLQkgICogZ3N0L2dzdGV2ZW50LmM6IChfZ3N0X2V2ZW50X2luaXRpYWxpemUpLCAoZ3N0X2V2ZW50X2dldF90eXBlKSwKLQkgIChnc3RfZXZlbnRfY2xhc3NfaW5pdCksIChnc3RfZXZlbnRfaW5pdCksIChnc3RfZXZlbnRfZmluYWxpemUpLAotCSAgKF9nc3RfZXZlbnRfY29weSksIChnc3RfZXZlbnRfbmV3KToKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChfZ3N0X21lc3NhZ2VfaW5pdGlhbGl6ZSksCi0JICAoZ3N0X21lc3NhZ2VfZ2V0X3R5cGUpLCAoZ3N0X21lc3NhZ2VfY2xhc3NfaW5pdCksCi0JICAoZ3N0X21lc3NhZ2VfaW5pdCksIChnc3RfbWVzc2FnZV9maW5hbGl6ZSksIChfZ3N0X21lc3NhZ2VfY29weSksCi0JICAoZ3N0X21lc3NhZ2VfbmV3KSwgKGdzdF9tZXNzYWdlX25ld19lcnJvciksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcpLCAoZ3N0X21lc3NhZ2VfbmV3X3RhZyksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpLCAoZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgICogZ3N0L2dzdHByb2JlLmM6IChnc3RfcHJvYmVfcGVyZm9ybSksCi0JICAoZ3N0X3Byb2JlX2Rpc3BhdGNoZXJfZGlzcGF0Y2gpOgotCSAgKiBnc3QvZ3N0cHJvYmUuaDoKLQkgICogZ3N0L2dzdHF1ZXJ5LmM6IChfZ3N0X3F1ZXJ5X2luaXRpYWxpemUpLCAoZ3N0X3F1ZXJ5X2dldF90eXBlKSwKLQkgIChnc3RfcXVlcnlfY2xhc3NfaW5pdCksIChnc3RfcXVlcnlfZmluYWxpemUpLCAoZ3N0X3F1ZXJ5X2luaXQpLAotCSAgKF9nc3RfcXVlcnlfY29weSksIChnc3RfcXVlcnlfbmV3KToKLQkgIFVwZGF0ZSBlbGVtZW50cyBmb3IgR3N0RGF0YSAtPiBHc3RNaW5pT2JqZWN0IGNoYW5nZXMKLQkgICogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JICAqIGdzdC9nc3RxdWV1ZS5jOiAoZ3N0X3F1ZXVlX2ZpbmFsaXplKSwgKGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2gpLAotCSAgKGdzdF9xdWV1ZV9jaGFpbiksIChnc3RfcXVldWVfbG9vcCk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RidWZmZXJzdG9yZS5jOgotCSAgKGdzdF9idWZmZXJfc3RvcmVfYWRkX2J1ZmZlcl9mdW5jKSwKLQkgIChnc3RfYnVmZmVyX3N0b3JlX2NsZWFyZWRfZnVuYyksIChnc3RfYnVmZmVyX3N0b3JlX2dldF9idWZmZXIpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfZmFrZXNpbmtfcmVuZGVyKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlc3JjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOiAoZ3N0X21tYXBfYnVmZmVyX2dldF90eXBlKSwKLQkgIChnc3RfbW1hcF9idWZmZXJfY2xhc3NfaW5pdCksIChnc3RfbW1hcF9idWZmZXJfaW5pdCksCi0JICAoZ3N0X21tYXBfYnVmZmVyX2ZpbmFsaXplKSwgKGdzdF9maWxlc3JjX21hcF9yZWdpb24pLAotCSAgKGdzdF9maWxlc3JjX2NyZWF0ZV9yZWFkKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6IChnc3RfaWRlbnRpdHlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkgIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfc3JjX2V2ZW50KSwgKGZyZWVfZW50cnlfYnVmZmVycyksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCk6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzoKLQkgIChnc3RfZHBfaGVhZGVyX2Zyb21fYnVmZmVyKToKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5oOgotCSAgKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZHAtcHJpdmF0ZS5oOgotCi0yMDA1LTA1LTE1IDIzOjE4OjQwICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGVsZW1lbnRzLmM6IERvbid0IGluY2x1ZGUgaGVhZGVycyB0aGF0IHdlcmUganVzdCByZW1vdmVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOiBEb24ndCBpbmNsdWRlIGhlYWRlcnMgdGhhdCB3ZXJlCi0JICBqdXN0IHJlbW92ZWQuCi0KLTIwMDUtMDUtMTUgMjM6MTY6MjkgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06IFJlbW92ZSBzb21lIGVsZW1lbnRzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZSBpbiB0aGUgY29yZSAob3IgZXZlbiBleGlzdCBhdCBhbGwpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbTogUmVtb3ZlIHNvbWUgZWxlbWVudHMgdGhhdCBkb24ndAotCSAgbmVlZCB0byBiZSBpbiB0aGUgY29yZSAob3IgZXZlbiBleGlzdCBhdCBhbGwpLgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0YWdncmVnYXRvci5jOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0YWdncmVnYXRvci5oOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0bWQ1c2luay5jOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0bWQ1c2luay5oOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RtdWx0aWZpbGVzcmMuaDoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHBpcGVmaWx0ZXIuYzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHBpcGVmaWx0ZXIuaDoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHNoYXBlci5jOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0c2hhcGVyLmg6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RzdGF0aXN0aWNzLmM6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RzdGF0aXN0aWNzLmg6Ci0JICAqIHBvL1BPVEZJTEVTLmluOiBSZW1vdmUgYWJvdmUgZmlsZXMuCi0KLTIwMDUtMDUtMTQgMTg6MDE6MTIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGJpbi5jIChnc3RfYmluX2l0ZXJhdGVfc2lua3MpOiBVc2Ugc2lua19pdGVyYXRvcl9maWx0ZXIgc28gYXMgdG8gZ2V0IHRoZSByZWZzIHJpZ2h0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA1LTE0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0YmluLmMgKGdzdF9iaW5faXRlcmF0ZV9zaW5rcyk6IFVzZSBzaW5rX2l0ZXJhdG9yX2ZpbHRlcgotCSAgc28gYXMgdG8gZ2V0IHRoZSByZWZzIHJpZ2h0LgotCSAgKHNpbmtfaXRlcmF0b3JfZmlsdGVyKTogTmV3IGZ1bmN0aW9uLCB3cmFwcyBiaW5fZWxlbWVudF9pc19zaW5rLAotCSAgdW5yZWZmaW5nIG9iamVjdHMgdGhhdCBkb24ndCBwYXNzIHRoZSBmaWx0ZXIuCi0KLTIwMDUtMDUtMTQgMTc6MTI6MTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHBpcGVsaW5lLmMgKGdzdF9waXBlbGluZV9pbml0KTogRHJvcCByZWYgb24gYnVzIGFmdGVyIGdzdF9lbGVtZW50X3NldF9idXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDUtMTQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jIChnc3RfcGlwZWxpbmVfaW5pdCk6IERyb3AgcmVmIG9uIGJ1cyBhZnRlcgotCSAgZ3N0X2VsZW1lbnRfc2V0X2J1cy4KLQkgIChnc3RfcGlwZWxpbmVfZGlzcG9zZSk6IFNldCB0aGUgYnVzIG9uIHRoZSBwaXBlbGluZSB0byBOVUxMLiBJbgotCSAgbm9ybWFsIGNhc2VzLCB0aGlzIHdpbGwgZGVzdHJveSB0aGUgYnVzLgotCSAgKiBnc3QvZ3N0dXRpbHMuYyAocHJlcGFyZV9saW5rX21heWJlX2dob3N0aW5nKTogRHJvcCByZWYgb24gcm9vdAotCSAgb2JqZWN0LgotCi0yMDA1LTA1LTE0IDE1OjU0OjQ5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOiBGaXggc3RhdGUgY2hhbmdlcyBpZiBhIGJpbiBoYXMgbm8gc2lua3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDUtMTQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOiBGaXggc3RhdGUgY2hhbmdlcyBpZiBhIGJpbgotCSAgaGFzIG5vIHNpbmtzLgotCi0yMDA1LTA1LTE0IDE1OjMyOjM2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9nc3R1dGlscy5jIChnc3RfZWxlbWVudF9saW5rX3BhZHMpOiBJbnN0ZWFkIG9mIGNhbGxpbmcgZ3N0X3BhZF9saW5rLCBjYWxsIHBhZF9saW5rX21heWJlX2dob3N0aW5nLAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA1LTEzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0dXRpbHMuYyAoZ3N0X2VsZW1lbnRfbGlua19wYWRzKTogSW5zdGVhZCBvZiBjYWxsaW5nCi0JICBnc3RfcGFkX2xpbmssIGNhbGwgcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcsCi0JICAocGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcpOiBMaW5rcyBwYWRzLCBtYWtpbmcgc3VyZSB0aGF0IHRoZQotCSAgZWxlbWVudHMgYmVpbmcgbGlua2VkIGFyZSBpbiB0aGUgc2FtZSBiaW4uCi0JICAoZmluZF9jb21tb25fcm9vdCwgb2JqZWN0X2hhc19hbmNlc3RvciwgZ2hvc3RfdXAsIHJlbW92ZV9wYWQpOgotCSAgSGVscGVycyBmb3IgcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcuCi0KLTIwMDUtMDUtMTMgMTI6NTM6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIFJlcXVpcmUgR0xpYiA+PSAyLjQuMCAoZm9yIHRoZSBnX2F0b21pY18qIGZ1bmNzKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZXF1aXJlIEdMaWIgPj0gMi40LjAgKGZvciB0aGUgZ19hdG9taWNfKiBmdW5jcykKLQotMjAwNS0wNS0xMyAxMDoxODo0MSArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3RyZWFtZXIuc3BlYy5pbjoKLQkgIGFkZCBtaXNzaW5nIC5oIGZpbGUgdG8gc3BlYyBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBtaXNzaW5nIC5oIGZpbGUgdG8gc3BlYyBmaWxlCi0KLTIwMDUtMDUtMTMgMDk6Mjc6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zb3VyY2UudHh0OgotCSAgTWVudGlvbiBHc3RQdXNoU3JjCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE1lbnRpb24gR3N0UHVzaFNyYwotCi0yMDA1LTA1LTEyIDE5OjQ1OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBJZGVudGlmeSBzaW5rcyBieSB0aGVpciBmbGFnIHRvIGF2b2lkIG92ZXJseSBjb21wbGljYXRlZCBjaGVja3MgKGZvdyBub3cpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfaW5pdCksCi0JICAoZ3N0X2Jhc2VzaW5rX2FjdGl2YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2VzcmNfdW5sb2NrKSwKLQkgIChnc3RfYmFzZXNyY19pc19zZWVrYWJsZSk6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fYWRkX2Z1bmMpLCAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksCi0JICAoYmluX2VsZW1lbnRfaXNfc2luayksIChnc3RfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9hZGRfcGFkKSwgKGdzdF9lbGVtZW50X3F1ZXJ5KToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgIElkZW50aWZ5IHNpbmtzIGJ5IHRoZWlyIGZsYWcgdG8gYXZvaWQgb3Zlcmx5IGNvbXBsaWNhdGVkCi0JICBjaGVja3MgKGZvdyBub3cpLgotCSAgRG8gc3RhdGUgY2hhbmdlcyBldmVuIGZvciBlbGVtZW50cyBub3QgcmVhY2hhYmxlIGZyb20gdGhlCi0JICBzaW5rcy4KLQkgIEJhc2VTaW5rIGlzIGEgc2luayBub3cgOikKLQkgIFNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW5mbyBpbiB0aGUgYmFzZXNyYy4KLQotMjAwNS0wNS0xMiAxNTowOToxNyArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvZ3N0YmluLmM6IEltcGxlbWVudCBfcXVlcnkgb24gYSBiaW4sIHNpbWlsYXIgdG8gX3NlbmRfZXZlbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9iaW5fcXVlcnkpOgotCSAgSW1wbGVtZW50IF9xdWVyeSBvbiBhIGJpbiwgc2ltaWxhciB0byBfc2VuZF9ldmVudC4KLQotMjAwNS0wNS0xMiAxMzo1OTo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiBEaXNjb250IGV2ZW50IG9mZnNldCBmb3JtYXQgc2hvdWxkIGJlIEdTVF9GT1JNQVRfQllURVMsIG5vdCBHU1RfRk9STUFUX1RJTUUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2VzcmNfZG9fc2Vlayk6Ci0JICBEaXNjb250IGV2ZW50IG9mZnNldCBmb3JtYXQgc2hvdWxkIGJlIEdTVF9GT1JNQVRfQllURVMsCi0JICBub3QgR1NUX0ZPUk1BVF9USU1FLgotCi0yMDA1LTA1LTEyIDEzOjE4OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0YmluLmM6IFNhbWUgZml4IGFzIFJvbmFsZCdzIGJ1dCB3aXRob3V0IHRoZSBzaWduYWwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX2dldF9zdGF0ZSk6Ci0JICBTYW1lIGZpeCBhcyBSb25hbGQncyBidXQgd2l0aG91dCB0aGUgc2lnbmFsLgotCi0yMDA1LTA1LTEyIDEyOjI3OjA3ICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGdzdC9nc3R1dGlscy5jOiBObywgYW4gZWxlbWVudCBpcyBub3QgYSBwYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbik6Ci0JICBObywgYW4gZWxlbWVudCBpcyBub3QgYSBwYWQuCi0KLTIwMDUtMDUtMTIgMTI6MTc6MjMgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSAgZ3N0L2dzdGJpbi5jOiBJZiBhIGNoaWxkIGlzIHJlbW92ZWQgZnJvbSBhIGJpbiB3aGlsZSB3ZSByZW1vdmUgdGhlIGNoaWxkIGZyb20gdGhlIGJpbiBhbmQgd2hpbGUgd2UncmUgcmV0cmlldmluZyBpdHMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9hZGRfZnVuYyksIChjYl9wYXJlbnRfdW5zZXQpLAotCSAgKGdzdF9iaW5fZ2V0X3N0YXRlKToKLQkgIElmIGEgY2hpbGQgaXMgcmVtb3ZlZCBmcm9tIGEgYmluIHdoaWxlIHdlIHJlbW92ZSB0aGUgY2hpbGQgZnJvbQotCSAgdGhlIGJpbiBhbmQgd2hpbGUgd2UncmUgcmV0cmlldmluZyBpdHMgc3RhdGUsIHNpZ25hbCB0aGlzIHRvIHRoZQotCSAgZ2V0X3N0YXRlIGZ1bmN0aW9uIHNvIHdlIGFib3J0IHRoZSB3YWl0IChpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yCi0JICBhIHRpbWVvdXQpIGFuZCBjYW4gaW1tZWRpYXRlbHkgcmUtaXRlcmF0ZSBvdmVyIGFsbCBvdGhlciBlbGVtZW50cy4KLQotMjAwNS0wNS0xMiAxMDo0MzoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2Jhc2UvOiBBZGRlZCBpc19zZWVrYWJsZSB0byBCYXNlU3JjCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2lzX3NlZWthYmxlKSwKLQkgIChnc3RfYmFzZXNyY19zdGFydCk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgICogZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5jOiAoZ3N0X3B1c2hzcmNfZ2V0X3R5cGUpLAotCSAgKGdzdF9wdXNoc3JjX2Jhc2VfaW5pdCksIChnc3RfcHVzaHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfcHVzaHNyY19pbml0KSwgKGdzdF9wdXNoc3JjX2NyZWF0ZSk6Ci0JICAqIGdzdC9iYXNlL2dzdHB1c2hzcmMuaDoKLQkgIEFkZGVkIGlzX3NlZWthYmxlIHRvIEJhc2VTcmMKLQkgIEFkZGVkIHNpbXBsZSBQdXNoU3JjLgotCi0yMDA1LTA1LTExIDA5OjIxOjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBGaXggcmVmY291bnRpbmcgaW4gdXRpbHMgZnVuY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2FkZF9wYWQpLCAoZ3N0X2VsZW1lbnRfcXVlcnkpOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogKGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZSksCi0JICAoZ3N0X2VsZW1lbnRfbGlua19wYWRzKSwgKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uKSwKLQkgIChnc3RfZWxlbWVudF9xdWVyeV9jb252ZXJ0KSwgKGludGVyc2VjdF9jYXBzX2Z1bmMpLAotCSAgKGdzdF9wYWRfcXVlcnlfcG9zaXRpb24pLCAoZ3N0X3BhZF9xdWVyeV9jb252ZXJ0KToKLQkgIEZpeCByZWZjb3VudGluZyBpbiB1dGlscyBmdW5jdGlvbi4KLQkgIE5vIHBvaW50IGluIHRyeWluZyB0byBhY3RpdmF0ZSBhIHBhZCB3aGVuIGl0J3MgYWRkZWQsIGl0IGNvdWxkCi0JICBiZSBhZGRlZCBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gYW5kIHRoZW4gd2UgZGVhZGxvY2ssIHRoZQotCSAgZWxlbWVudCBoYXMgdG8gZGVjaWRlIHdoYXQgdG8gZG8uCi0KLTIwMDUtMDUtMTEgMDM6Mzc6MTAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2VsZW1lbnRzL2dzdGZha2VzaW5rLmMgKGdzdF9mYWtlc2lua19yZW5kZXIpOiBFciwgZW1pdCB3aXRoCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDUtMTAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jIChnc3RfZmFrZXNpbmtfcmVuZGVyKTogRXIsIGVtaXQgd2l0aAotCSAgKmFsbCogdGhlIGFyZ3VtZW50cy4KLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jIChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpOiBHcmFiIHRoZQotCSAgc3RyZWFtIGxvY2sgaWYgaXQncyBhIEZMVVNIX0RPTkU7IG5vcm1hbCBmbHVzaGVzIGRvbid0IGdldCB0aGUKLQkgIGxvY2sgKGFjY29yZGluZyB0byB0aGUgZG9jcyAtLSBpZiB0aGlzIGlzIHdyb25nIGNoYW5nZSB0aGUgZG9jcykuCi0JICAqIGdzdC9nc3RwaXBlbGluZS5jIChnc3RfcGlwZWxpbmVfY2hhbmdlX3N0YXRlKTogU2V0IHRoZSBidXMgdG8KLQkgIGZsdXNoIG1lc3NhZ2VzIGluIHRoZSBOVUxMIHN0YXRlLgotCSAgKiBnc3QvZ3N0YnVzLmMgKGdzdF9idXNfcG9zdCk6IElmIGEgYnVzIGlzIGZsdXNoaW5nLCB1bnJlZiB0aGUKLQkgIG1lc3NhZ2UgaW1tZWRpYXRlbHkgYW5kIHJldHVybi4KLQkgIChnc3RfYnVzX3NldF9mbHVzaGluZyk6IE5ldyBmdW5jdGlvbi4gSWYgYSBidXMgaXMgZmx1c2hpbmcsIGl0Ci0JICBmbHVzaGVzIG91dCBhbnkgcXVldWVkIG1lc3NhZ2VzIGFuZCBpbW1lZGlhdGVseSB1bnJlZnMgbmV3Ci0JICBtZXNzYWdlcy4gVGhpcyBpcyBzbyB3aGVuIGFuIGVsZW1lbnQgZ29lcyB0byBOVUxMLCBhbGwgb2YgdGhlCi0JICB1bmhhbmRsZWQgbWVzc2FnZXMgY29taW5nIGZyb20gaXQgY2FuIGJlIGZyZWVkLCBhbmQgdGhlaXIKLQkgIHJlZmVyZW5jZXMgdG8gdGhlIGVsZW1lbnQgZHJvcHBlZC4gSW4gb3RoZXIgd29yZHM6IG1lc3NhZ2Ugc291cmNlCi0JICByZWYgY29uc2lkZXJlZCBoYXJtZnVsIDpQCi0JICAqIGdzdC9nc3RiaW4uYyAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGUpOiBVbnJlZiBwZWVyIGVsZW1lbnQgd2hlbgotCSAgd2UncmUgZmluaXNoZWQgd2l0aCBpdC4KLQkgICogZ3N0L2dzdG1lc3NhZ2UuYyAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpOgotCi0yMDA1LTA1LTEwIDE0OjUxOjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiBnc3QvZ3N0dmFsdWUuYzoKLQkgIHJlbW92ZSBzdHVwaWQgcHJpbnRmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBzdHVwaWQgcHJpbnRmCi0KLTIwMDUtMDUtMTAgMTQ6NTA6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3R2YWx1ZS5jOiBBZGRlZCBmbGFncyBzZXJpYWxpemUvZGVzZXJpYWxpemUvY29tcGFyZSBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiAoZ3N0X3ZhbHVlX2NvbXBhcmVfZmxhZ3MpLAotCSAgKGdzdF92YWx1ZV9zZXJpYWxpemVfZmxhZ3MpLCAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZsYWdzKSwKLQkgIChfZ3N0X3ZhbHVlX2luaXRpYWxpemUpOgotCSAgQWRkZWQgZmxhZ3Mgc2VyaWFsaXplL2Rlc2VyaWFsaXplL2NvbXBhcmUgY29kZS4KLQotMjAwNS0wNS0wOSAyMTozNzo1NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcm94eV9nZXRjYXBzKTogSW50ZXJzZWN0IHRoZSBwZWVyJ3MgY2FwcyB3aXRoIG91ciBjYXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA1LTA5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmMgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcm94eV9nZXRjYXBzKToKLQkgIEludGVyc2VjdCB0aGUgcGVlcidzIGNhcHMgd2l0aCBvdXIgY2Fwcy4KLQotMjAwNS0wNS0wOSAxNTo1NDoyNiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvOiBIYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyBiZXR0ZXIuIEZpeGVzIGRlY29kZWJpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jOiAoaGVscGVyX2ZpbmRfcGVlayk6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzogKGZpbmRfcGVlayk6Ci0JICBIYW5kbGUgbmVnYXRpdmUgb2Zmc2V0cyBiZXR0ZXIuIEZpeGVzIGRlY29kZWJpbi4KLQotMjAwNS0wNS0wOSAxNDo0NzoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogSW1wbGVtZW50IGFjY2VwdF9jYXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9wcm94eV9nZXRjYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2FjY2VwdF9jYXBzKSwgKGdzdF9wYWRfcXVlcnkpOgotCSAgSW1wbGVtZW50IGFjY2VwdF9jYXBzLgotCSAgRml4IHNpbGx5IGxvY2svdW5sb2NrIG1pc21hdGNoIGluIGJhc2UgY2xhc3MuCi0KLTIwMDUtMDUtMDkgMTA6NTM6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvZGVzaWduL2RyYWZ0LXB1c2gtcHVsbC50eHQ6Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cXVlcnkuYzoKLQkqIGdzdC9nc3RxdWVyeS5oOgotCSogZ3N0L2dzdHF1ZXJ5dXRpbHMuYzoKLQkqIGdzdC9nc3RxdWVyeXV0aWxzLmg6Ci0JKiBnc3QvZ3N0cXVldWUuYzoKLQkqIGdzdC9nc3R1dGlscy5jOgotCSogZ3N0L2dzdHV0aWxzLmg6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzoKLQkgIFJlbW92ZSBvbGQgcXVlcnkgZnVuY3Rpb25zLiBQb3J0ZWQgb2xkIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbW92ZSBvbGQgcXVlcnkgZnVuY3Rpb25zLiBQb3J0ZWQgb2xkIGNvZGUuCi0JICBBZGRlZCBwb3NpdGlvbi9jb252ZXJ0IGhlbHBlciBmdW5jdGlvbnMgdG8gZ3N0dXRpbHMuCi0JICBSZW9yZGVyZWQgZ3N0cGFkLmMgY29kZSwgZ3JvdXBpbmcgcmVsZXZhbnQgdGhpbmdzLgotCSAgUmVtb3ZlIGdzdF9tZXNzYWdlX25ldygpLCBhbHdheXMgbmVlZCB0byBzcGVmaWN5IGEgc3BlY2lmaWMKLQkgIG1lc3NhZ2UuCi0KLTIwMDUtMDUtMDkgMDY6MjE6MTAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdGl0ZXJhdG9yLmg6IEFkZCBzb21lIGluY2x1ZGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA1LTA5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuaDogQWRkIHNvbWUgaW5jbHVkZXMuCi0JICAqIGdzdC9nc3RxdWVyeXV0aWxzLmg6IEluY2x1ZGUgbW9yZSBoZWFkZXJzLgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICAqIGdzdC9nc3RwYWQuYyAoZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbik6IE5ldyByb3V0aW5lLCByZXBsYWNlcwotCSAgc29tZSB1c2VzIG9mIGdzdF9wYWRfcXVlcnkuCi0JICAqIGdzdC9nc3RxdWVyeXV0aWxzLmM6IEJ1aWxkIGZpeGVzLiBNYWtlIHBhcnNlIGZ1bmN0aW9ucyBpZ25vcmUKLQkgIE5VTEwgb3V0IHBhcmFtZXRlcnMuCi0JICAoZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbik6IE5ldyBwcm9jLCBhbGxvY2F0ZXMgYSBuZXcgcG9zaXRpb24KLQkgIHF1ZXJ5LgotCSAgKiBnc3QvTWFrZWZpbGUuYW0gKGxpYmdzdHJlYW1lcl9AR1NUX01BSk9STUlOT1JAX2xhX1NPVVJDRVMpOiBBZGQKLQkgIGdzdHF1ZXJ5dXRpbHMuYyB0byB0aGUgYnVpbGQuCi0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYyAoZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0KTogSW1wbGVtZW50IHdpdGgKLQkgIHRoZSBnZW5lcmljIEdfVkFMVUVfQ09MTEVDVC4KLQotMjAwNS0wNS0wOCAxNzowNzowNSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L01ha2VmaWxlLmFtOiBBZGRlZCBnc3RxdWVyeXV0aWxzLmggdG8gdGhlIGxpc3Qgb2YgaGVhZGVycyB0byBpbnN0YWxsLCB0aGF0IHdhcyBhICduYWNodHknIG1vdmUgd2luZ28gOikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvTWFrZWZpbGUuYW06IChnc3RfaGVhZGVycyk6Ci0JICBBZGRlZCBnc3RxdWVyeXV0aWxzLmggdG8gdGhlIGxpc3Qgb2YgaGVhZGVycyB0byBpbnN0YWxsLCB0aGF0IHdhcwotCSAgYSAnbmFjaHR5JyBtb3ZlIHdpbmdvIDopCi0KLTIwMDUtMDUtMDYgMjE6NDE6MjIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2dzdHF1ZXJ5LmgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNS0wNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2dzdHF1ZXJ5LmgKLQkgICogZ3N0L2dzdHF1ZXJ5LmMgKF9nc3RfcXVlcnlfaW5pdGlhbGl6ZSk6IEV4dGVuZCBHc3RRdWVyeSBmcm9tCi0JICBHc3REYXRhLCBpbml0IGEgbWVtY2h1bmsuCi0JICAoc3RhbmRhcmRfZGVmaW5pdGlvbnMpOiBBZGQgYSBmZXcgcXVlcnkgdHlwZXMsIGRlcHJlY2F0ZSBhIGZldy4KLQkgIChnc3RfcXVlcnlfZ2V0X3R5cGUpOiBOZXcgcHJvYy4KLQkgIChfZ3N0X3F1ZXJ5X2NvcHksIF9nc3RfcXVlcnlfZnJlZSwgZ3N0X3F1ZXJ5X25ldyk6IEdzdERhdGEKLQkgIGltcGxlbWVudGF0aW9uLgotCSAgKGdzdF9xdWVyeV9uZXdfYXBwbGljYXRpb24sIGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlKTogTmV3IHB1YmxpYwotCSAgcHJvY3MuCi0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LXF1ZXJ5LnR4dDogUmVtb3ZlZCBMSU5LUyBmcm9tIHRoZSBxdWVyeSB0eXBlcywKLQkgIGJlY2F1c2UgYWxsIHRoZSByZXN0IGNhbiBiZSBkaXNwYXRjaGVkIHRvIG90aGVyIHBhZHMgLS0gc2VlbWVkCi0JICB1Z2x5IHRvIGhhdmUgYSBxdWVyeSB0aGF0IGNvdWxkbid0IGJlIGRpc3BhdGNoZWQuIGludGVybmFsX2xpbmtzCi0JICBpcyBmaW5lIGFzIGEgcGFkIG1ldGhvZC4KLQkgICogZ3N0L2dzdHBhZC5oOiBBZGQgcXVlcnkyIGFzIGEgcGFkIG1ldGhvZCwgYWRkIHRoZSBuZXcgZnVuY3Rpb25zCi0JICBpbiBnc3RwYWQuYywgYnV0IG1haW50YWluIGJpbmFyeSBjb21wYXRpYmlsaXR5IGZvciB0aGUgbW9tZW50LgotCSAgV2lsbCBmaXggYmVmb3JlIDAuOSBpcyBvdXQuCi0JICAqIGdzdC9nc3RxdWVyeXV0aWxzLmM6Ci0JICAqIGdzdC9nc3RxdWVyeXV0aWxzLmg6IE5ldyBmaWxlcywgaW1wbGVtZW50IDMgbWV0aG9kcyBmb3IgZWFjaAotCSAgcXVlcnkgdHlwZTogcGFyc2VfcXVlcnksIHBhcnNlX3Jlc3BvbnNlLCBhbmQgc2V0LiBQcm9iYWJseSBuZWVkIGFuCi0JICBhbGxvY2F0b3IgYXMgd2VsbC4KLQkgICogZ3N0L2dzdC5oOiBBZGQgZ3N0cXVlcnkuaCBhbmQgZ3N0cXVlcnl1dGlscy5oIHRvIHRoZSBsaXN0LgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYyAoZ3N0X2ZpbGVzaW5rX3F1ZXJ5Mik6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2VzcmNfcXVlcnkyKTogUmVwbGFjZSBvbGQgcXVlcnksCi0JICBxdWVyeV90eXBlcywgYW5kIGZvcm1hdHMgbWV0aG9kcy4KLQkgICogZ3N0L2dzdHBhZC5jIChnc3RfcGFkX3F1ZXJ5MiwgZ3N0X3BhZF9xdWVyeTJfZGVmYXVsdCkKLQkgIChnc3RfcGFkX3NldF9xdWVyeTJfZnVuY3Rpb24pOiBOZXcgZnVuY3Rpb25zLgotCSAgKGdzdF9yZWFsX3BhZF9pbml0KTogU2V0IHF1ZXJ5Ml9kZWZhdWx0IGFzIHRoZSBkZWZhdWx0IHF1ZXJ5MgotCSAgZnVuY3Rpb24uIEJhc2ljYWxseSBqdXN0IGRpc3BhdGNoZXMgdG8gaW50ZXJuYWxseSBsaW5rZWQgcGFkcy4KLQkgIE5lZWRzIHJldmlldyEKLQkgICogZ3N0L2dzdGRhdGFfcHJpdmF0ZS5oIChfR1NUX0RBVEFfSU5JVCk6IFNldCBkYXRhLT5yZWZjb3VudCB0byAxCi0JICB3aXRob3V0IHVzaW5nIHRoZSBhdG9taWMgb3BlcmF0aW9ucy4gT25seSBvbmUgdGhyZWFkIGNhbiBwb3NzaWJseQotCSAgYmUgYWNjZXNzaW5nIHRoZSBkYXRhIGF0IHRoaXMgcG9pbnQuIENoYW5nZWQgc28gYXMgdG8gYXZvaWQKLQkgIGdzdF9hdG9taWMgb3BlcmF0aW9ucy4KLQotMjAwNS0wNS0wNiAxOTo1MDoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHBhZC5jOiBBbHNvIHNldCBjYXBzIGlmIHdlIHVzZSB0aGUgZmFsbGJhY2sgYnVmZmVyIGFsbG9jLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfYWxsb2NfYnVmZmVyKSwgKGdzdF9wYWRfcHVzaCk6Ci0JICBBbHNvIHNldCBjYXBzIGlmIHdlIHVzZSB0aGUgZmFsbGJhY2sgYnVmZmVyIGFsbG9jLgotCi0yMDA1LTA1LTA2IDE3OjMzOjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBQdXJnZSBHc3RBdG9taWMgc3R1ZmYgZnJvbSBkb2NzIGFuZCB3aW4zMiBtYWtlZmlsZXMgYXMgd2VsbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sOgotCSAgKiBkb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGF0b21pYy5zZ21sOgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdG1lbWNodW5rLnNnbWw6Ci0JICAqIHRlc3RzdWl0ZS9lbGVtZW50cy9zdHJ1Y3RfaTM4Ni5oOgotCSAgKiB3aW4zMi9HU3RyZWFtZXIudmNwcm9qOgotCSAgKiB3aW4zMi9NYWtlZmlsZToKLQkgIFB1cmdlIEdzdEF0b21pYyBzdHVmZiBmcm9tIGRvY3MgYW5kIHdpbjMyIG1ha2VmaWxlcyBhcyB3ZWxsCi0KLTIwMDUtMDUtMDYgMTc6MTA6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEZpeCBnc3RfcGFkX3BlZXJfZ2V0X2NhcHMoKSwgbWFrZSBpdCByZXR1cm4gTlVMTCBpZiBubyBwZWVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYzogKGdzdF9iYXNlX3RyYW5zZm9ybV9wcm94eV9nZXRjYXBzKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogKGdzdF9jYXBzZmlsdGVyX2dldGNhcHMpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3BlZXJfZ2V0X2NhcHMpOgotCSAgKiBnc3QvZ3N0cXVldWUuYzogKGdzdF9xdWV1ZV9pbml0KSwgKGdzdF9xdWV1ZV9nZXRjYXBzKSwKLQkgIChnc3RfcXVldWVfYnVmZmVyYWxsb2MpLCAoZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfcXVldWVfc3JjX2FjdGl2YXRlKSwgKGdzdF9xdWV1ZV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZ3N0cXVldWUuaDoKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGUpLAotCSAgKGludGVyc2VjdF9jYXBzX2Z1bmMpOgotCSAgRml4IGdzdF9wYWRfcGVlcl9nZXRfY2FwcygpLCBtYWtlIGl0IHJldHVybiBOVUxMIGlmIG5vIHBlZXIuCi0JICBBbHdheXMgdGFrZSBRVUVVRV9MT0NLIGFmdGVyIFNUUkVBTV9MT0NLIG9yIHdlIG1pZ2h0IGRlYWRsb2NrLgotCSAgU29tZSBmaXhlcyBmb3IgdGhlIHBlZXJfZ2V0X2NhcHMoKSBjaGFuZ2UuCi0KLTIwMDUtMDUtMDYgMTY6MTk6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IEFjdHVhbGx5IGRvIHNvbWV0aGluZyB3aXRoIGVycm9yIGNvZGVzIHJldHVybmVkIGZyb20gdGhlIHB1c2ggZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfcHJlcm9sbF9xdWV1ZV9lbXB0eSksCi0JICAoZ3N0X2Jhc2VzaW5rX2hhbmRsZV9idWZmZXIpLCAoZ3N0X2Jhc2VzaW5rX2NoYWluX3VubG9ja2VkKSwKLQkgIChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpOgotCSAgQWN0dWFsbHkgZG8gc29tZXRoaW5nIHdpdGggZXJyb3IgY29kZXMgcmV0dXJuZWQgZnJvbSB0aGUgcHVzaAotCSAgZnVuY3Rpb25zLgotCi0yMDA1LTA1LTA2IDA4OjI1OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBTb21lIG1vcmUgZG9jdW1lbnRhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc2luay50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zb3VyY2UudHh0OgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlc2lua19ldmVudCksIChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY19pbml0KSwgKGdzdF9iYXNlc3JjX3VubG9jayksCi0JICAoZ3N0X2Jhc2VzcmNfYWN0aXZhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmg6Ci0JICAqIGdzdC9nc3RlbGVtZW50LmM6IChnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlKToKLQkgIFNvbWUgbW9yZSBkb2N1bWVudGF0aW9uLgotCSAgRml4ZWQgc2NoZWR1bGluZyBkZWNpc2lvbiBpbiBfcGFkc19hY3RpdmF0ZSgpLgotCi0yMDA1LTA1LTA1IDIxOjU5OjUzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JICBmaW5hbCBjcnVmdCBmaXhhZ2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZmluYWwgY3J1ZnQgZml4YWdlCi0KLTIwMDUtMDUtMDUgMjE6NDU6NTQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L2VsZW1lbnRzL2dzdHRlZS5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JICBjcnVmdCByZW1vdmFsCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNydWZ0IHJlbW92YWwKLQotMjAwNS0wNS0wNSAyMTo0MjoyNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOgotCSAgcmV2ZXJ0IGNydWZ0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmVydCBjcnVmdAotCi0yMDA1LTA1LTA1IDIxOjM3OjM0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwYWQuaDoKLQkgIHJldmVydCBhY2NpZGVudGFsIGNvbW1pdCBvZiBjcnVmdCAtLSBkb2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmV2ZXJ0IGFjY2lkZW50YWwgY29tbWl0IG9mIGNydWZ0IC0tIGRvaAotCi0yMDA1LTA1LTA1IDE1OjAyOjQwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNoZWNrL3BpcGVsaW5lcy9zaW1wbGVfbGF1bmNoX2xpbmVzLmMgKHRlc3RfMl9lbGVtZW50cyk6ICJGaXgiIHRoZSB0ZXN0IHN1aXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA1LTA1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjaGVjay9waXBlbGluZXMvc2ltcGxlX2xhdW5jaF9saW5lcy5jICh0ZXN0XzJfZWxlbWVudHMpOiAiRml4IgotCSAgdGhlIHRlc3Qgc3VpdGUuCi0KLTIwMDUtMDUtMDUgMTE6NDM6MDYgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBmaXggYnJva2VuIHNwZWMgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggYnJva2VuIHNwZWMgZmlsZQotCi0yMDA1LTA1LTA1IDA5OjMxOjU5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBBZGRlZCBvYmplY3QgdG8gaGVscCBpbiBtYWtpbmcgY29sbGVjdCBwYWQgYmFzZWQgZWxlbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzogKGdzdF9iYXNlc3JjX2luaXQpLAotCSAgKGdzdF9iYXNlc3JjX3NldF9kYXRhZmxvd19mdW5jcyksIChnc3RfYmFzZXNyY19xdWVyeSk6Ci0JICAqIGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmM6IChnc3RfY29sbGVjdHBhZHNfZ2V0X3R5cGUpLAotCSAgKGdzdF9jb2xsZWN0cGFkc19jbGFzc19pbml0KSwgKGdzdF9jb2xsZWN0cGFkc19pbml0KSwKLQkgIChnc3RfY29sbGVjdHBhZHNfZmluYWxpemUpLCAoZ3N0X2NvbGxlY3RwYWRzX25ldyksCi0JICAoZ3N0X2NvbGxlY3RwYWRzX3NldF9mdW5jdGlvbiksIChnc3RfY29sbGVjdHBhZHNfYWRkX3BhZCksCi0JICAoZmluZF9wYWQpLCAoZ3N0X2NvbGxlY3RwYWRzX3JlbW92ZV9wYWQpLAotCSAgKGdzdF9jb2xsZWN0cGFkc19pc19hY3RpdmUpLCAoZ3N0X2NvbGxlY3RwYWRzX2NvbGxlY3QpLAotCSAgKGdzdF9jb2xsZWN0cGFkc19jb2xsZWN0X3JhbmdlKSwgKGdzdF9jb2xsZWN0cGFkc19zdGFydCksCi0JICAoZ3N0X2NvbGxlY3RwYWRzX3N0b3ApLCAoZ3N0X2NvbGxlY3RwYWRzX3BlZWspLAotCSAgKGdzdF9jb2xsZWN0cGFkc19wb3ApLCAoZ3N0X2NvbGxlY3RwYWRzX2F2YWlsYWJsZSksCi0JICAoZ3N0X2NvbGxlY3RwYWRzX3JlYWQpLCAoZ3N0X2NvbGxlY3RwYWRzX2ZsdXNoKSwKLQkgIChnc3RfY29sbGVjdHBhZHNfY2hhaW4pOgotCSAgKiBnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oOgotCSAgKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzogKGdzdF9mYWtlc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfZmFrZXNpbmtfZ2V0X3RpbWVzKSwgKGdzdF9mYWtlc2lua19ldmVudCksCi0JICAoZ3N0X2Zha2VzaW5rX3ByZXJvbGwpLCAoZ3N0X2Zha2VzaW5rX3JlbmRlcik6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOiAoZ3N0X2ZpbGVzaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9maWxlc2lua19pbml0KSwgKGdzdF9maWxlc2lua19zZXRfbG9jYXRpb24pLAotCSAgKGdzdF9maWxlc2lua19vcGVuX2ZpbGUpLCAoZ3N0X2ZpbGVzaW5rX2Nsb3NlX2ZpbGUpLAotCSAgKGdzdF9maWxlc2lua19wYWRfcXVlcnkpLCAoZ3N0X2ZpbGVzaW5rX2V2ZW50KSwKLQkgIChnc3RfZmlsZXNpbmtfcmVuZGVyKSwgKGdzdF9maWxlc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuaDoKLQkgIEFkZGVkIG9iamVjdCB0byBoZWxwIGluIG1ha2luZyBjb2xsZWN0IHBhZCBiYXNlZCBlbGVtZW50cy4KLQkgIFBvcnRlZCBmaWxlc2luay4KLQkgIE1ha2UgZXZlbnQgZnVuY3Rpb24gaW4gc2luayBiYXNlY2xhc3MgcmV0dXJuIGdib29sZWFuLgotCi0yMDA1LTA1LTA1IDA5OjI4OjAxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBGaXggbmFtZSBsb29rdXAgaW4gR3N0QmluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fc2VuZF9ldmVudCksIChjb21wYXJlX25hbWUpLAotCSAgKGdzdF9iaW5fZ2V0X2J5X25hbWUpOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICAqIGdzdC9nc3RjbG9jay5jOiAoZ3N0X2Nsb2NrX2VudHJ5X25ldyksIChnc3RfY2xvY2tfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Nsb2NrX2ZpbmFsaXplKToKLQkgICogZ3N0L2dzdGRhdGEuYzogKGdzdF9kYXRhX3JlcGxhY2UpOgotCSAgKiBnc3QvZ3N0ZGF0YS5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQpLAotCSAgKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgotCSAgKiBnc3QvZ3N0b2JqZWN0LmM6IChnc3Rfb2JqZWN0X2luaXQpLCAoZ3N0X29iamVjdF9yZWYpLAotCSAgKGdzdF9vYmplY3RfdW5yZWYpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9wZWVyX3NldF9hY3RpdmUpLAotCSAgKGdzdF9wYWRfc2V0X2NoZWNrZ2V0cmFuZ2VfZnVuY3Rpb24pLAotCSAgKGdzdF9wYWRfbGlua19jaGVja19jb21wYXRpYmxlX3VubG9ja2VkKSwgKGdzdF9wYWRfc2V0X2NhcHMpLAotCSAgKGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSksIChnc3RfcGFkX3B1bGxfcmFuZ2UpLAotCSAgKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKSwgKGdzdF9wYWRfc3RhcnRfdGFzayksCi0JICAoZ3N0X3BhZF9wYXVzZV90YXNrKSwgKGdzdF9wYWRfc3RvcF90YXNrKToKLQkgICogZ3N0L2dzdHV0aWxzLmM6IChnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGUpLAotCSAgKGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKSwgKGdzdF9wYWRfcHJveHlfZ2V0Y2Fwcyk6Ci0JICBGaXggbmFtZSBsb29rdXAgaW4gR3N0QmluLgotCSAgQWRkZWQgX2RhdGFfcmVwbGFjZSgpIGZ1bmN0aW9uIGFuZCBfYnVmZmVyX3JlcGxhY2UoKQotCSAgVXNlIGZpbmFsaXplIG1ldGhvZCB0byBjbGVhbiB1cCBjbG9jay4KLQkgIEZpeCByZWZjb3VudGluZyBvbiByZXF1ZXN0IHBhZHMuCi0JICBGaXggcGFkIHNjaGVkdWxlIG1vZGUgZXJyb3IuCi0JICBTb21lIG1vcmUgb2JqZWN0IHJlZmNvdW50aW5nIGRlYnVnIGluZm8sCi0KLTIwMDUtMDUtMDQgMjE6Mjk6NDQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgR0NDIDQgZml4ZW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDUtMDQgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0YXRvbWljLnNnbWw6Ci0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cGx1Z2luLnNnbWw6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmM6IChnc3RfYmFzZXNpbmtfYWN0aXZhdGUpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZXNyY19pbml0KSwgKGdzdF9iYXNlc3JjX3NldF9kYXRhZmxvd19mdW5jcyksCi0JICAoZ3N0X2Jhc2VzcmNfcXVlcnkpLCAoZ3N0X2Jhc2VzcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYmFzZXNyY19nZXRfcHJvcGVydHkpLCAoZ3N0X2Jhc2VzcmNfY2hlY2tfZ2V0X3JhbmdlKSwKLQkgIChnc3RfYmFzZXNyY19hY3RpdmF0ZSk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGUpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfYWN0aXZhdGUpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzogKGdzdF9mYWtlc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mYWtlc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfZmFrZXNyY19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6IChnc3RfdGVlX3NpbmtfYWN0aXZhdGUpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6IChmaW5kX2VsZW1lbnRfZ2V0X2xlbmd0aCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoZWNrZ2V0cmFuZ2UpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZSk6Ci0JICAqIGdzdC9nc3RiaW4uYzogKGdzdF9iaW5fc2F2ZV90aHlzZWxmKSwgKGdzdF9iaW5fcmVzdG9yZV90aHlzZWxmKToKLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX2RvX3NpbXBsaWZ5KSwgKGdzdF9jYXBzX3NhdmVfdGh5c2VsZiksCi0JICAoZ3N0X2NhcHNfbG9hZF90aHlzZWxmKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpLAotCSAgKGdzdF9lbGVtZW50X3NhdmVfdGh5c2VsZiksIChnc3RfZWxlbWVudF9yZXN0b3JlX3RoeXNlbGYpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2xvYWRfYW5kX2xpbmspLCAoZ3N0X3BhZF9zYXZlX3RoeXNlbGYpLAotCSAgKGdzdF9naG9zdF9wYWRfc2F2ZV90aHlzZWxmKSwgKGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgICogZ3N0L2dzdHhtbC5jOiAoZ3N0X3htbF93cml0ZSksIChnc3RfeG1sX3BhcnNlX2RvYyksCi0JICAoZ3N0X3htbF9wYXJzZV9maWxlKSwgKGdzdF94bWxfcGFyc2VfbWVtb3J5KSwKLQkgIChnc3RfeG1sX2dldF9lbGVtZW50KSwgKGdzdF94bWxfbWFrZV9lbGVtZW50KToKLQkgICogZ3N0L2luZGV4ZXJzL2dzdGZpbGVpbmRleC5jOiAoZ3N0X2ZpbGVfaW5kZXhfbG9hZCksCi0JICAoX2ZpbGVfaW5kZXhfaWRfc2F2ZV94bWwpLCAoZ3N0X2ZpbGVfaW5kZXhfY29tbWl0KToKLQkgICogZ3N0L3JlZ2lzdHJpZXMvZ3N0bGlieG1scmVnaXN0cnkuYzogKHJlYWRfc3RyaW5nKSwgKHJlYWRfdWludCksCi0JICAocmVhZF9lbnVtKSwgKGxvYWRfcGFkX3RlbXBsYXRlKSwgKGxvYWRfZmVhdHVyZSksIChsb2FkX3BsdWdpbiksCi0JICAobG9hZF9wYXRocyk6Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9kYXRhcHJvdG9jb2wuYzogKGdzdF9kcF9wYWNrZXRfZnJvbV9jYXBzKSwKLQkgIChnc3RfZHBfcGFja2V0X2Zyb21fZXZlbnQpLCAoZ3N0X2RwX2NhcHNfZnJvbV9wYWNrZXQpOgotCSAgKiB0b29scy9nc3QtY29tcGxldGUuYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QtY29tcHByZXAuYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8pOgotCSAgKiB0b29scy9nc3QtbGF1bmNoLmM6ICh4bWxsYXVuY2hfcGFyc2VfY21kbGluZSk6Ci0JICAqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6IChwcmludF9lbGVtZW50X3Byb3BlcnRpZXMpOgotCSAgR0NDIDQgZml4ZW4uCi0KLTIwMDUtMDUtMDQgMTk6NDE6MDUgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0cmVhbWVyLnNwZWMuaW46Ci0JICBmaXggdXAgc3BlYyBmaWxlIHRvIHdvcmsgZm9yIDAuOSBicmFuY2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHVwIHNwZWMgZmlsZSB0byB3b3JrIGZvciAwLjkgYnJhbmNoCi0KLTIwMDUtMDUtMDMgMTI6NDY6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvZ3N0cGx1Z2luLmM6IGFwcGx5IHBhdGNoIGZyb20gIzE3MjUyNiB0byBtYWtlIHJlZ2lzdGVyIHdvcmsgb24gTWFjT1NYCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9jaGVja19tb2R1bGUpLAotCSAgKGdzdF9wbHVnaW5fY2hlY2tfZmlsZSksIChnc3RfcGx1Z2luX2xvYWRfZmlsZSk6Ci0JICBhcHBseSBwYXRjaCBmcm9tICMxNzI1MjYgdG8gbWFrZSByZWdpc3RlciB3b3JrIG9uIE1hY09TWAotCi0yMDA1LTA1LTAyIDE2OjUwOjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZmlsZSAuY3ZzaWdub3JlIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaWxlIC5jdnNpZ25vcmUgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCi0KLTIwMDUtMDUtMDIgMTU6MzE6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2luZGV4ZXJzL2NhY2hlMS5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9pbmRleGVycy9pbmRleGR1bXAuYzoKLQkqIHRlc3RzdWl0ZS9pbmRleGVycy9jYWNoZTEuYzoKLQkqIHRlc3RzdWl0ZS9pbmRleGVycy9pbmRleGR1bXAuYzoKLQkgIG1vcmUgcHJpbnQgZm9ybWF0IGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vcmUgcHJpbnQgZm9ybWF0IGZpeGVzCi0KLTIwMDUtMDUtMDIgMTU6MjA6MzAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvZ3N0Y29uZmlnLmguaW46Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL2RlYnVnL3ByaW50Zl9leHRlbnNpb24uYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvZWxlbWVudHMvcHJvcGVydHkuaDoKLQkqIHRlc3RzdWl0ZS9kZWJ1Zy9wcmludGZfZXh0ZW5zaW9uLmM6Ci0JKiB0ZXN0c3VpdGUvZWxlbWVudHMvcHJvcGVydHkuaDoKLQkgIG1lcmdlcyBmcm9tIDAuOCBmb3IgNjQgYml0IGlzc3VlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtZXJnZXMgZnJvbSAwLjggZm9yIDY0IGJpdCBpc3N1ZXMKLQotMjAwNS0wNS0wMiAxMzo1NToyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWRkZWQgZHJhZnQgZm9yIG5ldyBxdWVyeSBBUEkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vZHJhZnQtcXVlcnkudHh0OgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY19nZXRfcmFuZ2VfdW5sb2NrZWQpLAotCSAgKGdzdF9iYXNlc3JjX3N0YXJ0KToKLQkgIEFkZGVkIGRyYWZ0IGZvciBuZXcgcXVlcnkgQVBJLgotCSAgQWRkZWQgZHJhZnQgZm9yIGJldHRlciBzZWxlY3Rpbmcgc2NoZWR1bGluZyBtZXRob2RzLgotCSAgTWFrZSBiYXNlc3JjIGlnbm9yZSBsZW5ndGggaWYgdGhlIHN1YmNsYXNzIGRvZXMgbm90IHN1cHBvcnQKLQkgIGl0LgotCi0yMDA1LTA1LTAyIDExOjU0OjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSAgYXV0b21ha2UgMS41IGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGF1dG9tYWtlIDEuNSBmaXhlcwotCi0yMDA1LTA1LTAyIDExOjQ3OjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9mYXEvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL21hbnVhbC9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbWFudWFscy5tYWs6Ci0JKiBkb2NzL3B3Zy9NYWtlZmlsZS5hbToKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkgIHBvc3NpYmxlIGZpeGVzIGZvciBhdXRvbWFrZS0xLjUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcG9zc2libGUgZml4ZXMgZm9yIGF1dG9tYWtlLTEuNQotCi0yMDA1LTA0LTI4IDE2OjI4OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBCZXR0ZXIgZGVidWdnaW5nIG9mIGNsb2NraW5nIGluZm8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9iYXNlc2lua19wYWRfZ2V0Y2FwcyksIChnc3RfYmFzZXNpbmtfaW5pdCksCi0JICAoZ3N0X2Jhc2VzaW5rX2RvX3N5bmMpOgotCSAgKiBnc3QvZ3N0Y2xvY2suYzogKGdzdF9jbG9ja19lbnRyeV9uZXcpOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzogKGdzdF9ldmVudF9kaXNjb250X2dldF92YWx1ZSk6Ci0JICAqIGdzdC9nc3RwaXBlbGluZS5jOiAocGlwZWxpbmVfYnVzX2hhbmRsZXIpLAotCSAgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZ3N0c3lzdGVtY2xvY2suYzogKGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF91bmxvY2tlZCk6Ci0JICBCZXR0ZXIgZGVidWdnaW5nIG9mIGNsb2NraW5nIGluZm8uCi0JICBBbGxvdyBOVUxMIHZhbHVlcyB3aGVuIGdldHRpbmcgZGlzY29udCB2YWx1ZXMuCi0KLTIwMDUtMDQtMjcgMTQ6MTk6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNoZWNrL2dzdC86IEluY3JlYXNlIHRpbWVvdXQgZm9yIGNoZWNrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0b2JqZWN0LmM6IChTVEFSVF9URVNUKSwgKGdzdF9vYmplY3Rfc3VpdGUpOgotCSAgKiBjaGVjay9nc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3N1aXRlKToKLQkgIEluY3JlYXNlIHRpbWVvdXQgZm9yIGNoZWNrcy4KLQotMjAwNS0wNC0yNyAxMzo1Mjo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL01ha2VmaWxlLmFtOiBmaXggdGhlIGJyb2tlbiBydWxlIGZvciBjbGVhbnVwLiAgQXBwYXJlbnRseSB0aGlzIHJ1bGUgaXMgb25seSBuZWVkZWQgb24gRkMyLCBzbyBtYXliZSB0aGlzIHdhcnJhbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL01ha2VmaWxlLmFtOgotCSAgZml4IHRoZSBicm9rZW4gcnVsZSBmb3IgY2xlYW51cC4gIEFwcGFyZW50bHkgdGhpcyBydWxlIGlzCi0JICBvbmx5IG5lZWRlZCBvbiBGQzIsIHNvIG1heWJlIHRoaXMgd2FycmFudHMgZnVydGhlciBhdXRvdG9vbAotCSAgaW5zcGVjdGlvbi4KLQotMjAwNS0wNC0yNiAxODowNzo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdHRyYXNoc3RhY2suaDogT29vaGguIGEgbmFzdHkgb25lISBBZnRlciBoYXZpbmcgYSBmYWlsZWQgcG9wKCkgZnJvbSB0aGUgc3RhY2ssIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgc3RhY2sgaXMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHRyYXNoc3RhY2suaDoKLQkgIE9vb2hoLiBhIG5hc3R5IG9uZSEgQWZ0ZXIgaGF2aW5nIGEgZmFpbGVkIHBvcCgpIGZyb20gdGhlIHN0YWNrLAotCSAgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzdGFjayBpcyBlbXB0eS4gSW4gdGhhdCBjYXNlLCBkb24ndAotCSAgZm9sbG93IHRoZSBOVUxMIHBvaW50ZXIuCi0KLTIwMDUtMDQtMjUgMTM6MDA6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFJlbW92ZSBnc3RfbGlicmFyeV9sb2FkIGFzIGl0IGRvZXMgbW9yZSBoYXJtIHRoYW4gZ29vZCB3aXRoIHRoZSBuZXcgZ19tb2R1bGUgZmxhZ3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYWN0aXZlKSwgKGdzdF9wYWRfcGVlcl9zZXRfYWN0aXZlKSwKLQkgIChnc3RfcGFkX3NldF9jaGVja2dldHJhbmdlX2Z1bmN0aW9uKSwKLQkgIChnc3RfcGFkX2xpbmtfY2hlY2tfY29tcGF0aWJsZV91bmxvY2tlZCksIChnc3RfcGFkX2xpbmtfcHJlcGFyZSksCi0JICAoZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlKSwgKGdzdF9wYWRfcHVsbF9yYW5nZSksCi0JICAoZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMpLCAoZ3N0X3BhZF9zdGFydF90YXNrKSwKLQkgIChnc3RfcGFkX3BhdXNlX3Rhc2spLCAoZ3N0X3BhZF9zdG9wX3Rhc2spOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmM6IChnc3RfcGx1Z2luX2xvYWQpOgotCSAgKiBnc3QvZ3N0cGx1Z2luLmg6Ci0JICBSZW1vdmUgZ3N0X2xpYnJhcnlfbG9hZCBhcyBpdCBkb2VzIG1vcmUgaGFybSB0aGFuIGdvb2Qgd2l0aAotCSAgdGhlIG5ldyBnX21vZHVsZSBmbGFncy4KLQkgIFJldmVydCBib2d1cyBjYXBzIHRlbXBsYXRlIGNoZWNrIGluIHBhZCBsaW5raW5nLCBwYWQgY2FwcwotCSAgYXJlIGltcG9ydGFudCB3aGVuIGxpbmtpbmcgbm90IHRoZSB0ZW1wbGF0ZSwgd2hpY2ggaXMgbW9yZQotCSAgZ2VuZXJhbCB0aGFuIHRoZSBjdXJyZW50IGNhcHMuCi0KLTIwMDUtMDQtMjUgMTE6NTE6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbToKLQkgIHRoZXJlIGlzIG5vIHNwZWVkLiAgcmVhbGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0aGVyZSBpcyBubyBzcGVlZC4gIHJlYWxseS4KLQotMjAwNS0wNC0yNSAwOTo1MTowNiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvYXV0b3BsdWcvOiBEaWUsIHNwaWRlciwgZGllLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdXRvcGx1Zy8uY3ZzaWdub3JlOgotCSAgKiBnc3QvYXV0b3BsdWcvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdXRvcGx1Zy9nc3RzZWFyY2hmdW5jcy5jOgotCSAgKiBnc3QvYXV0b3BsdWcvZ3N0c2VhcmNoZnVuY3MuaDoKLQkgICogZ3N0L2F1dG9wbHVnL2dzdHNwaWRlci5jOgotCSAgKiBnc3QvYXV0b3BsdWcvZ3N0c3BpZGVyLmg6Ci0JICAqIGdzdC9hdXRvcGx1Zy9nc3RzcGlkZXJpZGVudGl0eS5jOgotCSAgKiBnc3QvYXV0b3BsdWcvZ3N0c3BpZGVyaWRlbnRpdHkuaDoKLQkgICogZ3N0L2F1dG9wbHVnL3NwaWRlcnRlc3QuYzoKLQkgIERpZSwgc3BpZGVyLCBkaWUuCi0KLTIwMDUtMDQtMjUgMDk6NDU6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nc3RwYWQuKjogQWRkZWQgc3R1YnMgZm9yIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX3BlZXJfc2V0X2FjdGl2ZSksCi0JICAoZ3N0X3BhZF9zZXRfY2hlY2tnZXRyYW5nZV9mdW5jdGlvbiksIChnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UpLAotCSAgKGdzdF9wYWRfcHVsbF9yYW5nZSksIChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyksCi0JICAoZ3N0X3BhZF9zdGFydF90YXNrKSwgKGdzdF9wYWRfcGF1c2VfdGFzayksIChnc3RfcGFkX3N0b3BfdGFzayk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgIEFkZGVkIHN0dWJzIGZvciB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucy4KLQotMjAwNS0wNC0yNSAwMzo1NDoyOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGZpbGUgcHl0aG9uLWVsZW1lbnRzLnR4dCB3YXMgaW5pdGlhbGx5IGFkZGVkIG9uIGJyYW5jaCBCUkFOQ0gtR1NUUkVBTUVSLTBfOC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZmlsZSBweXRob24tZWxlbWVudHMudHh0IHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgotCi0yMDA1LTA0LTI0IDIzOjUzOjA2ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdHBhZC5oOiBEaXNhYmxlIHNvbWUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuICBXaW0sIHBsZWFzZSBmaXguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBhZC5oOiBEaXNhYmxlIHNvbWUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuICBXaW0sCi0JICBwbGVhc2UgZml4LgotCi0yMDA1LTA0LTI0IDIyOjQ5OjQ1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgQ29udmVydCBldmVyeXRoaW5nIGZyb20gR3N0QXRvbWljSW50IHRvIGdfYXRvbWljX2ludF8qLCBhbmQgcmVtb3ZlIGdzdGF0b21pYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQ29udmVydCBldmVyeXRoaW5nIGZyb20gR3N0QXRvbWljSW50IHRvIGdfYXRvbWljX2ludF8qLCBhbmQKLQkgIHJlbW92ZSBnc3RhdG9taWMuCi0JICAqIGdzdC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dzdGF0b21pYy5jOgotCSAgKiBnc3QvZ3N0YXRvbWljLmg6Ci0JICAqIGdzdC9nc3RhdG9taWNfaW1wbC5oOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICAqIGdzdC9nc3RjYXBzLmM6Ci0JICAqIGdzdC9nc3RjYXBzLmg6Ci0JICAqIGdzdC9nc3RjbG9jay5jOgotCSAgKiBnc3QvZ3N0Y2xvY2suaDoKLQkgICogZ3N0L2dzdGRhdGEuYzoKLQkgICogZ3N0L2dzdGRhdGEuaDoKLQkgICogZ3N0L2dzdGRhdGFfcHJpdmF0ZS5oOgotCSAgKiBnc3QvZ3N0ZXZlbnQuYzoKLQkgICogZ3N0L2dzdGluZm8uYzoKLQkgICogZ3N0L2dzdGluZm8uaDoKLQkgICogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkgICogZ3N0L2dzdG9iamVjdC5jOgotCSAgKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JICAqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogQWRkIGdzdF9hdG9taWNfaW50X3NldCgpIGNvbXBhaXRpYmlsaXR5IGZ1bmN0aW9uLgotCSAgKiBnc3QvZ3N0dXRpbHMuaDoKLQotMjAwNS0wNC0yNCAyMjo0NDoxMyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGNoZWNrL2dzdC9nc3RwYWQuYzogT2ggeWVhaCwgaXQncyBhbHdheXMgbmljZSB0byBtYWtlIHRoZSByZWdyZXNzaW9ucyB0ZXN0cyB3b3JrLiAgUmVtb3ZlIHNvbWUgY29kZSB0aGF0IGlzIG5vIGxvbmdlci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RwYWQuYzogKFNUQVJUX1RFU1QpOiBPaCB5ZWFoLCBpdCdzIGFsd2F5cyBuaWNlIHRvCi0JICBtYWtlIHRoZSByZWdyZXNzaW9ucyB0ZXN0cyB3b3JrLiAgUmVtb3ZlIHNvbWUgY29kZSB0aGF0IGlzIG5vCi0JICBsb25nZXIgdHJ1ZS4KLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9saW5rX2NoZWNrX3RlbXBsYXRlc19jb21wYXRpYmxlX3VubG9ja2VkKToKLQkgIERpc2FibGUgd2FybmluZyBmb3IgcGFkcyB3aXRob3V0IHRlbXBsYXRlcy4KLQotMjAwNS0wNC0yNCAyMToxNjo0NSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9nc3RwYWQuYzogUmVtb3ZlIGhhbmRsaW5nIG9mIGZpbHRlcmVkIGNhcHMuICBGaXgvbWVyZ2UgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIGZpbHRlcmVkIGxpbmtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogUmVtb3ZlIGhhbmRsaW5nIG9mIGZpbHRlcmVkIGNhcHMuICBGaXgvbWVyZ2UKLQkgIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBmaWx0ZXJlZCBsaW5rcy4KLQkgICogZ3N0L2dzdHBhZC5oOiBSZW1vdmUgJ2FwcGZpbHRlcicgZmllbGQgYW5kIHByb3RvdHlwZXMgb2YKLQkgIHJlbW92ZWQgZnVuY3Rpb25zLgotCSAgKiBnc3QvZ3N0dXRpbHMuYzogRml4L3JlbW92ZSB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IGhhbmRsZQotCSAgZmlsdGVyZWQgY2Fwcy4KLQkgICogZ3N0L2dzdHV0aWxzLmg6Ci0JICAqIGdzdC9nc3R2YWx1ZS5jOiBBZGQgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gb2YgY2FwcwotCSAgKiBnc3QvcGFyc2UvZ3JhbW1hci55OiBJZ25vcmUgZmlsdGVyZWQgY2FwcyB3aGVuIGxpbmtpbmcuICBUaGlzCi0JICByZXF1aXJlcyBmaXhpbmcgc28gdGhhdCB0aGUgZmlsdGVyIGNhcHMgbm90YXRpb24gY3JlYXRlcwotCSAgYSBjYXBzZmlsdGVyIGVsZW1lbnQgYW5kIHNldHMgdGhlIGZpbHRlcl9jYXBzIHByb3BlcnR5LiAgSQotCSAgdGhpbmsgZXZlcnlvbmUgcHJvYmFibHkgd2FudHMgdG8ga2VlcCB0aGUgc2hvcnRoYW5kIG5vdGF0aW9uLgotCSAgKiBkb2NzL2dzdC90bXBsL2dzdGVsZW1lbnQuc2dtbDogdXBkYXRlcyBmb3IgQVBJIGNoYW5nZXMuCi0JICAqIGRvY3MvZ3N0L3RtcGwvZ3N0cGFkLnNnbWw6Ci0JICAqIGdzdC9lbGVtZW50cy9nc3RlbGVtZW50cy5jOiBSZWdpc3RlciBjYXBzZmlsdGVyIGVsZW1lbnQuCi0JICAqIGdzdC9NYWtlZmlsZS5hbTogZml4IHNwYWNpbmcKLQkgICogZG9jcy9yYW5kb20vZHMvMC45LXN1Z2dlc3RlZC1jaGFuZ2VzOiByYW5kb20KLQotMjAwNS0wNC0yMyAyMzoyOTo0NyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9lbGVtZW50cy86IE5ldyBlbGVtZW50IHRoYXQgYWN0cyBsaWtlIGFuIGlkZW50aXR5LCBidXQgZmlsdGVycyBjYXBzLiAgV2lsbCBldmVudHVhbGx5IHJlcGxhY2UgZmlsdGVyZWQgY2FwcyBpbiBwYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzogTmV3IGVsZW1lbnQgdGhhdCBhY3RzIGxpa2UgYW4KLQkgIGlkZW50aXR5LCBidXQgZmlsdGVycyBjYXBzLiAgV2lsbCBldmVudHVhbGx5IHJlcGxhY2UgZmlsdGVyZWQKLQkgIGNhcHMgaW4gcGFkIGxpbmtpbmcuCi0JICAqIGdzdC9nc3R1dGlscy5jOiAoZ3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzKTogTmV3IGZ1bmN0aW9uCi0JICB0byBjcmVhdGUgYWxsIHRoZSBBTFdBWVMgcGFkcyB0aGF0IGFyZSByZWdpc3RlcmVkIHdpdGggYW4KLQkgIGVsZW1lbnQgY2xhc3MuICBUaGlzIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGV2ZW50dWFsbHkgYmUKLQkgIG1lcmdlZCBpbiB3aXRoIEdzdEVsZW1lbnQgaW5pdGlhbGl6YXRpb24uCi0JICAqIGdzdC9nc3R1dGlscy5oOgotCSAgKiB0ZXN0c3VpdGUvdHJpZ2dlci9SRUFETUU6IHBhcnQgb2YgdHJpZ2dlciB0ZXN0IGNvZGUgdGhhdCBzaG91bGQKLQkgIGhhdmUgYmVlbiBjaGVja2VkIGluIGEgbG9uZyB0aW1lIGFnby4KLQotMjAwNS0wNC0yMyAyMzoyNTowOCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9NYWtlZmlsZS5hbTogUmVtb3ZlIGFzLWxpYnRvb2wgc3R1ZmYuICBJdCdzIGxpa2VseSBub3QgYW5kIGhhcmQgdG8gY2FycnkgYXJvdW5kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbTogUmVtb3ZlIGFzLWxpYnRvb2wgc3R1ZmYuICBJdCdzIGxpa2VseSBub3QKLQkgIG5lZWRlZCB3aXRoIG5ldyB2ZXJzaW9ucyBvZiBsaWJ0b29sIChub2JvZHkgd2lsbCBjb25maXJtIHRoaXMpLAotCSAgYW5kIGhhcmQgdG8gY2FycnkgYXJvdW5kLgotCSAgKiBnc3QvYXV0b3BsdWcvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9pbmRleGVycy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NjaGVkdWxlcnMvTWFrZWZpbGUuYW06Ci0JICAqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vTWFrZWZpbGUuYW06Ci0JICAqIGxpYnMvZ3N0L2NvbnRyb2wvTWFrZWZpbGUuYW06Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkgICogbGlicy9nc3QvZ2V0Yml0cy9NYWtlZmlsZS5hbToKLQotMjAwNS0wNC0yMSAxNzoxMDowOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBmaWxlIE1ha2VmaWxlLmFtIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaWxlIE1ha2VmaWxlLmFtIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgotCi0yMDA1LTA0LTIxIDA5OjM3OjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL2Rlc2lnbi86IFNvbWUgbW9yZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL2RyYWZ0LXB1c2gtcHVsbC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LVRPRE8udHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNhcHMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YnVzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LXB1c2gtcHVsbC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtcXVlcnkudHh0OgotCSAgU29tZSBtb3JlIGRvY3MuCi0KLTIwMDUtMDQtMjEgMDk6MzM6MzEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IFVzZSBwYXJlbnQgcmVmY291bnQgaW4gR3N0TWVzc2FnZSB0byBlbnN1cmUgR3N0U3RydWN0dXJlIGNvbnNpc3RlbmN5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChfZ3N0X21lc3NhZ2VfY29weSksIChfZ3N0X21lc3NhZ2VfZnJlZSksCi0JICAoZ3N0X21lc3NhZ2VfbmV3KSwgKGdzdF9tZXNzYWdlX25ld19lcnJvciksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcpLCAoZ3N0X21lc3NhZ2VfbmV3X3RhZyksCi0JICAoZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQpLCAoZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKSwKLQkgIChnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlKToKLQkgICogZ3N0L2dzdG1lc3NhZ2UuaDoKLQkgICogZ3N0L2dzdHN0cnVjdHVyZS5jOiAoZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50KSwKLQkgIChnc3Rfc3RydWN0dXJlX2NvcHlfY29uZGl0aW9uYWwpOgotCSAgVXNlIHBhcmVudCByZWZjb3VudCBpbiBHc3RNZXNzYWdlIHRvIGVuc3VyZSBHc3RTdHJ1Y3R1cmUKLQkgIGNvbnNpc3RlbmN5LgotCSAgQ2xlYW5lZCB1cCBoZWFkZXJzIGEgYml0LgotCi0yMDA1LTA0LTIwIDA5OjEwOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBNYWtlIGdzdF9jYXBzX3JlcGxhY2UoKSB3b3JrIGxpa2Ugb3RoZXIgX3JlcGxhY2UoKSBmdW5jdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9iYXNlc2lua19wYWRfZ2V0Y2FwcyksIChnc3RfYmFzZXNpbmtfaW5pdCksCi0JICAoZ3N0X2Jhc2VzaW5rX2NoYWluX3VubG9ja2VkKToKLQkgICogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzogKGhlbHBlcl9maW5kX3N1Z2dlc3QpLAotCSAgKGdzdF90eXBlX2ZpbmRfaGVscGVyKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYXZlX3R5cGUpLCAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2luaXQpLAotCSAgKHN0b3BfdHlwZWZpbmRpbmcpLCAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2hhbmRsZV9ldmVudCksCi0JICAoZmluZF9zdWdnZXN0KSwgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbiksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoZWNrZ2V0cmFuZ2UpLAotCSAgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9nZXRyYW5nZSksIChkb190eXBlZmluZCksCi0JICAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlKToKLQkgICogZ3N0L2dzdGJ1ZmZlci5jOiAoX2dzdF9idWZmZXJfc3ViX2ZyZWUpLAotCSAgKGdzdF9idWZmZXJfZGVmYXVsdF9mcmVlKSwgKGdzdF9idWZmZXJfZGVmYXVsdF9jb3B5KSwKLQkgIChnc3RfYnVmZmVyX3NldF9jYXBzKToKLQkgICogZ3N0L2dzdGNhcHMuYzogKGdzdF9jYXBzX3JlZiksIChnc3RfY2Fwc191bnJlZiksCi0JICAoZ3N0X2NhcHNfcmVwbGFjZSk6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6IChnc3RfbWVzc2FnZV9uZXcpLAotCSAgKGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkKToKLQkgICogZ3N0L2dzdHBhZC5jOiAoZ3N0X3BhZF9zZXRfYWN0aXZlKSwgKGdzdF9wYWRfcGVlcl9zZXRfYWN0aXZlKSwKLQkgIChnc3RfcGFkX3NldF9jaGVja2dldHJhbmdlX2Z1bmN0aW9uKSwKLQkgIChnc3RfcGFkX2xpbmtfcHJlcGFyZV9maWx0ZXJlZCksIChnc3RfcGFkX3JlbGlua19maWx0ZXJlZCksCi0JICAoZ3N0X3BhZF9zZXRfY2FwcyksIChnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UpLAotCSAgKGdzdF9wYWRfcHVsbF9yYW5nZSksIChnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2Fwcyk6Ci0JICAqIGdzdC9nc3RwYWQuaDoKLQkgICogZ3N0L2dzdHR5cGVmaW5kLmM6IChnc3RfdHlwZV9maW5kX3JlZ2lzdGVyKToKLQkgIE1ha2UgZ3N0X2NhcHNfcmVwbGFjZSgpIHdvcmsgbGlrZSBvdGhlciBfcmVwbGFjZSgpIGZ1bmN0aW9ucy4KLQkgIFVzZSBfY2Fwc19yZXBsYWNlKCkgd2hlcmUgcG9zc2libGUuCi0JICBNYWtlIHN1cmUgX21lc3NhZ2VfbmV3KCkgaW5pdGlhbGlzZXMgaXRzIGZpZWxkLgotCSAgQWRkIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzKCkKLQotMjAwNS0wNC0xOCAwODo1MzowMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiBzL0FSR18vUFJPUF8vLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA0LTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiBzL0FSR18vUFJPUF8vLgotCi0yMDA1LTA0LTE4IDA4OjI0OjMwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYzoKLQkqIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSAgZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIChnc3RfYmFzZXNyY19zZXRfcHJvcGVydHkpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDQtMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuYyAoZ3N0X2Jhc2VzcmNfc2V0X3Byb3BlcnR5KQotCSAgKGdzdF9iYXNlc3JjX2dldF9wcm9wZXJ0eSk6IEJMT0NLU0laRSBpcyBhIFVMT05HLiBSZW5hbWUgQVJHXy4uLgotCSAgdG8gUFJPUF8uLi4uCi0KLTIwMDUtMDQtMTYgMjA6Mjc6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBORVdTOgotCSogdGVzdHMvTWFrZWZpbGUuYW06Ci0JICBORVdTIGJ1aWxkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE5FV1MgYnVpbGQKLQotMjAwNS0wNC0xNiAyMDoxNjozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHJlbW92ZWQgc29tZSBsaW5lCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZWQgc29tZSBsaW5lCi0KLTIwMDUtMDQtMTYgMTY6Mjg6MDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2ZhcS9nc3QtdW5pbnN0YWxsZWQ6Ci0JICBhZGQgZ3N0LXBsdWdpbnMtYmFzZSB0byBwa2djb25maWcgcGF0aAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgZ3N0LXBsdWdpbnMtYmFzZSB0byBwa2djb25maWcgcGF0aAotCi0yMDA1LTA0LTE0IDE3OjE3OjMwICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIGRvY3MvZmFxL3VzaW5nLnhtbDogQWRkIG5vdGUgb24gZ3N0cmVhbWVyLXByb3BlcnRpZXMgKCMxNTQ5OTYpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL3VzaW5nLnhtbDoKLQkgIEFkZCBub3RlIG9uIGdzdHJlYW1lci1wcm9wZXJ0aWVzICgjMTU0OTk2KS4KLQotMjAwNS0wNC0xMyAxNzo0MToyOSArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBkb2NzL3JhbmRvbS9iYmIvb3B0aW9uYWwtcHJvcGVydGllczogU29tZSBhbmFseXNpcyBvbiBvcHRpb25hbCBwcm9wZXJ0aWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcmFuZG9tL2JiYi9vcHRpb25hbC1wcm9wZXJ0aWVzOgotCSAgU29tZSBhbmFseXNpcyBvbiBvcHRpb25hbCBwcm9wZXJ0aWVzLgotCi0yMDA1LTA0LTEyIDE1OjAwOjMwICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkgIFVzZSBsaWJ4bWwyIGZvciByZWdpc3RyeSBwYXJzaW5nLCB1c2Ugc3RhdGljcGFkdGVtcGxhdGVzIGluIGVsZW1lbnRmYWN0b3JpZXMuIE1ha2VzIGdzdF9pbml0KCkgKy8tIDEweCBmYXN0ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9nc3QvdG1wbC9nc3RlbGVtZW50ZmFjdG9yeS5zZ21sOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYzogKGdzdF9lbGVtZW50X2ZhY3RvcnlfaW5pdCksCi0JICAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9jbGVhbnVwKSwgKGdzdF9lbGVtZW50X3JlZ2lzdGVyKSwKLQkgIChfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUpLAotCSAgKGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzKSwKLQkgIChnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfY2FwcyksCi0JICAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19jYXBzKToKLQkgICogZ3N0L3JlZ2lzdHJpZXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9yZWdpc3RyaWVzL2dzdGxpYnhtbHJlZ2lzdHJ5LmM6IChnc3RfeG1sX3JlZ2lzdHJ5X2dldF90eXBlKSwKLQkgIChnc3RfeG1sX3JlZ2lzdHJ5X2NsYXNzX2luaXQpLCAoZ3N0X3htbF9yZWdpc3RyeV9pbml0KSwKLQkgIChnc3RfeG1sX3JlZ2lzdHJ5X25ldyksIChnc3RfeG1sX3JlZ2lzdHJ5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3htbF9yZWdpc3RyeV9nZXRfcHJvcGVydHkpLCAoZ2V0X3RpbWUpLCAobWFrZV9kaXIpLAotCSAgKGdzdF94bWxfcmVnaXN0cnlfZ2V0X3Blcm1zX2Z1bmMpLAotCSAgKHBsdWdpbl90aW1lc19vbGRlcl90aGFuX3JlY3Vyc2UpLCAocGx1Z2luX3RpbWVzX29sZGVyX3RoYW4pLAotCSAgKGdzdF94bWxfcmVnaXN0cnlfb3Blbl9mdW5jKSwgKGdzdF94bWxfcmVnaXN0cnlfbG9hZF9mdW5jKSwKLQkgIChnc3RfeG1sX3JlZ2lzdHJ5X3NhdmVfZnVuYyksIChnc3RfeG1sX3JlZ2lzdHJ5X2Nsb3NlX2Z1bmMpLAotCSAgKGFkZF90b19jaGFyX2FycmF5KSwgKHJlYWRfc3RyaW5nKSwgKHJlYWRfdWludCksIChyZWFkX2VudW0pLAotCSAgKGxvYWRfcGFkX3RlbXBsYXRlKSwgKGxvYWRfZmVhdHVyZSksIChsb2FkX3BsdWdpbiksIChsb2FkX3BhdGhzKSwKLQkgIChnc3RfeG1sX3JlZ2lzdHJ5X2xvYWQpLCAoZ3N0X3htbF9yZWdpc3RyeV9sb2FkX3BsdWdpbiksCi0JICAoZ3N0X3htbF9yZWdpc3RyeV9zYXZlX2NhcHMpLCAoZ3N0X3htbF9yZWdpc3RyeV9zYXZlX3BhZF90ZW1wbGF0ZSksCi0JICAoZ3N0X3htbF9yZWdpc3RyeV9zYXZlX2ZlYXR1cmUpLCAoZ3N0X3htbF9yZWdpc3RyeV9zYXZlX3BsdWdpbiksCi0JICAoZ3N0X3htbF9yZWdpc3RyeV9zYXZlKSwgKGdzdF94bWxfcmVnaXN0cnlfcmVidWlsZF9yZWN1cnNlKSwKLQkgIChnc3RfeG1sX3JlZ2lzdHJ5X3JlYnVpbGQpOgotCSAgKiBnc3QvcmVnaXN0cmllcy9nc3RsaWJ4bWxyZWdpc3RyeS5oOgotCSAgKiB0b29scy9nc3QtY29tcHByZXAuYzogKG1haW4pOgotCSAgKiB0b29scy9nc3QtaW5zcGVjdC5jOiAocHJpbnRfcGFkX3RlbXBsYXRlc19pbmZvKToKLQkgICogdG9vbHMvZ3N0LXhtbGluc3BlY3QuYzogKHByaW50X2VsZW1lbnRfaW5mbyk6Ci0JICBVc2UgbGlieG1sMiBmb3IgcmVnaXN0cnkgcGFyc2luZywgdXNlIHN0YXRpY3BhZHRlbXBsYXRlcyBpbgotCSAgZWxlbWVudGZhY3Rvcmllcy4gTWFrZXMgZ3N0X2luaXQoKSArLy0gMTB4IGZhc3Rlci4KLQotMjAwNS0wNC0xMiAxMDo1Mjo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOgotCSogZ3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuYzoKLQkqIGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg6Ci0JKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oOgotCSogZ3N0L2dzdHBpcGVsaW5lLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmM6Ci0JKiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50Lmg6Ci0JICBBZGRlZCB0eXBlZmluZCBoZWxwZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEFkZGVkIHR5cGVmaW5kIGhlbHBlci4KLQkgIFNtYWxsIHByZXJvbGwgZml4IGluIHRoZSBiYXNlIHNpbmsuCi0JICBEaXNhYmxlIHR5cGVmaW5kIGNvZGUgaW4gYmFzZXNyYy4KLQkgIENydWRlIHBvcnQgb2YgdHlwZWZpbmRlbGVtZW50LgotCSAgRmFrZXNyYyBjbGVhbnVwcy4KLQotMjAwNS0wNC0xMiAwOToxNjowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogY2hlY2svZ3N0L2dzdGRhdGEuYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RkYXRhLmM6Ci0JICBJbmNyZWFzZSB0aW1lb3V0IHNvbWUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBJbmNyZWFzZSB0aW1lb3V0IHNvbWUgbW9yZQotCi0yMDA1LTA0LTExIDEyOjAyOjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIG9ubHkgZGlycwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBvbmx5IGRpcnMKLQotMjAwNS0wNC0xMSAxMTo0MDoxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBmaXggZGlzdGNoZWNrCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBkaXN0Y2hlY2sKLQotMjAwNS0wNC0xMSAxMToyNDo1MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svOiBGaXggdXAgdGhlIHRpbWVvdXQgc28gdGhhdCB0aGUgdGVzdCBkb2VzIG5vdCBmYWlsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2dzdC9nc3RidXMuYzogKGdzdGJ1c19zdWl0ZSk6Ci0JICAqIGNoZWNrL2dzdC9nc3RkYXRhLmM6ICh0aHJlYWRfcmVmKSwgKGdzdF9kYXRhX3N1aXRlKToKLQkgICogY2hlY2svZ3N0Y2hlY2suaDoKLQkgIEZpeCB1cCB0aGUgdGltZW91dCBzbyB0aGF0IHRoZSB0ZXN0IGRvZXMgbm90IGZhaWwuCi0KLTIwMDUtMDQtMTEgMDk6NTM6NDQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOgotCSAgZGlzdCB0cmlnZ2VyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRpc3QgdHJpZ2dlcgotCi0yMDA1LTA0LTEwIDIxOjQyOjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkgIHdvcmsgd2l0aCBkZWJ1ZyBkaXNhYmxlZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3b3JrIHdpdGggZGVidWcgZGlzYWJsZWQKLQotMjAwNS0wNC0xMCAyMDoyOTo0NCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RvYmplY3QuYzoKLQkgIHdvcmsgd2l0aCBkZWJ1ZyBkaXNhYmxlZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3b3JrIHdpdGggZGVidWcgZGlzYWJsZWQKLQotMjAwNS0wNC0xMCAxODoxOToxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JICBpZ25vcmUgYWxyZWFkeSBhcHBsaWVkIHBhdGNoCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGlnbm9yZSBhbHJlYWR5IGFwcGxpZWQgcGF0Y2gKLQotMjAwNS0wNC0wOCAxMTozNDoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBmaWxlIGdzdHBhcmVudC5jIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaWxlIGdzdHBhcmVudC5jIHdhcyBpbml0aWFsbHkgYWRkZWQgb24gYnJhbmNoIEJSQU5DSC1HU1RSRUFNRVItMF84LgotCi0yMDA1LTA0LTA4IDExOjM0OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGZpbGUgZ3N0cGFyZW50Lmggd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpbGUgZ3N0cGFyZW50Lmggd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQlJBTkNILUdTVFJFQU1FUi0wXzguCi0KLTIwMDUtMDQtMDYgMTc6MzA6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IE1vcmUgd29yayBvbiB0aGUgZ2VuZXJpYyBzb3VyY2UgYmFzZSBjbGFzcywgaW1wbGVtZW50IHNlZWtpbmcsIHF1ZXJ5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9iYXNlL1JFQURNRToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOiAoZ3N0X2Jhc2VzcmNfZ2V0X3R5cGUpLAotCSAgKGdzdF9iYXNlc3JjX2luaXQpLCAoZ3N0X2Jhc2VzcmNfZ2V0X2Zvcm1hdHMpLCAoZ3N0X2Jhc2VzcmNfcXVlcnkpLAotCSAgKGdzdF9iYXNlc3JjX2dldF9ldmVudF9tYXNrKSwgKGdzdF9iYXNlc3JjX2RvX3NlZWspLAotCSAgKGdzdF9iYXNlc3JjX2V2ZW50X2hhbmRsZXIpLCAoZ3N0X2Jhc2VzcmNfZ2V0X3JhbmdlX3VubG9ja2VkKSwKLQkgIChnc3RfYmFzZXNyY19jaGVja19nZXRfcmFuZ2UpLCAoZ3N0X2Jhc2VzcmNfbG9vcCksCi0JICAoZ3N0X2Jhc2VzcmNfdW5sb2NrKSwgKGdzdF9iYXNlc3JjX2dldF9zaXplKSwgKGdzdF9iYXNlc3JjX3N0YXJ0KSwKLQkgIChnc3RfYmFzZXNyY19zdG9wKSwgKGdzdF9iYXNlc3JjX2FjdGl2YXRlKSwKLQkgIChnc3RfYmFzZXNyY19jaGFuZ2Vfc3RhdGUpLCAoYmFzZXNyY19maW5kX3BlZWspLAotCSAgKGJhc2VzcmNfZmluZF9zdWdnZXN0KSwgKGdzdF9iYXNlc3JjX3R5cGVfZmluZCk6Ci0JICAqIGdzdC9iYXNlL2dzdGJhc2VzcmMuaDoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlc3JjX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2ZpbGVzcmNfY2xhc3NfaW5pdCksIChnc3RfZmlsZXNyY19pbml0KSwKLQkgIChnc3RfZmlsZXNyY19maW5hbGl6ZSksIChnc3RfZmlsZXNyY19zZXRfbG9jYXRpb24pLAotCSAgKGdzdF9maWxlc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfZmlsZXNyY19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9maWxlc3JjX2ZyZWVfcGFyZW50X21tYXApLCAoZ3N0X2ZpbGVzcmNfbWFwX3JlZ2lvbiksCi0JICAoZ3N0X2ZpbGVzcmNfbWFwX3NtYWxsX3JlZ2lvbiksIChnc3RfZmlsZXNyY19jcmVhdGVfbW1hcCksCi0JICAoZ3N0X2ZpbGVzcmNfY3JlYXRlX3JlYWQpLCAoZ3N0X2ZpbGVzcmNfY3JlYXRlKSwKLQkgIChnc3RfZmlsZXNyY19nZXRfc2l6ZSksIChnc3RfZmlsZXNyY19zdGFydCksIChnc3RfZmlsZXNyY19zdG9wKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuaDoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwKLQkgIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKSwgKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9wZWVyX3NldF9hY3RpdmUpLAotCSAgKGdzdF9wYWRfc2V0X2NoZWNrZ2V0cmFuZ2VfZnVuY3Rpb24pLCAoZ3N0X3BhZF9jaGVja19wdWxsX3JhbmdlKSwKLQkgIChnc3RfcGFkX3B1bGxfcmFuZ2UpOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBNb3JlIHdvcmsgb24gdGhlIGdlbmVyaWMgc291cmNlIGJhc2UgY2xhc3MsIGltcGxlbWVudCBzZWVraW5nLAotCSAgcXVlcnkuCi0JICBNYWtlIGZpbGVzcmMgZXh0ZW5kIHRoZSBiYXNlIHNvdXJjZSBjbGFzcy4KLQkgIEFkZGVkIGdzdF9wYWRfc2V0X2NoZWNrZ2V0cmFuZ2VfZnVuY3Rpb24gdG8gR3N0UGFkLgotCi0yMDA1LTA0LTA2IDExOjA4OjA3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHBrZ2NvbmZpZy86IE5ldyBmaWxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wNC0wNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjLmluOgotCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW46IE5ldyBmaWxlcy4KLQkgICogcGtnY29uZmlnL01ha2VmaWxlLmFtOgotCSAgKiBjb25maWd1cmUuYWMgKEFDX09VVFBVVCk6IEFkZCBnc3RyZWFtZXItYmFzZSBwa2djb25maWcgZmlsZXMuCi0KLTIwMDUtMDQtMDUgMTc6NDE6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL2ZhcS9jdnMueG1sOgotCSAgYWRkIGEgbm90ZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgYSBub3RlCi0KLTIwMDUtMDQtMDUgMDg6NDQ6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IE1hZGUgYmFzZSBzb3VyY2UgY2xhc3MsIG1ha2UgZmFrZXNyYyBleHRlbmQgaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Jhc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXNlL1JFQURNRToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzogKGdzdF9iYXNlc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9iYXNlc2lua19wYWRfZ2V0Y2FwcyksIChnc3RfYmFzZXNpbmtfcGFkX3NldGNhcHMpLAotCSAgKGdzdF9iYXNlc2lua19wYWRfYnVmZmVyX2FsbG9jKSwgKGdzdF9iYXNlc2lua19pbml0KSwKLQkgIChnc3RfYmFzZXNpbmtfZG9fc3luYyksIChnc3RfYmFzZXNpbmtfY2hhaW5fdW5sb2NrZWQpOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc3JjLmM6IChnc3RfYmFzZXNyY19nZXRfdHlwZSksCi0JICAoZ3N0X2Jhc2VzcmNfYmFzZV9pbml0KSwgKGdzdF9iYXNlc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9iYXNlc3JjX2luaXQpLCAoZ3N0X2Jhc2VzcmNfZ2V0X2Zvcm1hdHMpLAotCSAgKGdzdF9iYXNlc3JjX2dldF9xdWVyeV90eXBlcyksIChnc3RfYmFzZXNyY19xdWVyeSksCi0JICAoZ3N0X2Jhc2VzcmNfZ2V0X2V2ZW50X21hc2spLCAoZ3N0X2Jhc2VzcmNfZXZlbnRfaGFuZGxlciksCi0JICAoZ3N0X2Jhc2VzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9iYXNlc3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2Jhc2VzcmNfZ2V0X3JhbmdlX3VubG9ja2VkKSwgKGdzdF9iYXNlc3JjX2dldF9yYW5nZSksCi0JICAoZ3N0X2Jhc2VzcmNfbG9vcCksIChnc3RfYmFzZXNyY19hY3RpdmF0ZSksCi0JICAoZ3N0X2Jhc2VzcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOiAoZ3N0X2Zha2VzcmNfYmFzZV9pbml0KSwKLQkgIChnc3RfZmFrZXNyY19jbGFzc19pbml0KSwgKGdzdF9mYWtlc3JjX2luaXQpLAotCSAgKGdzdF9mYWtlc3JjX2V2ZW50X2hhbmRsZXIpLCAoZ3N0X2Zha2VzcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZmFrZXNyY19nZXRfcHJvcGVydHkpLCAoZ3N0X2Zha2VzcmNfY3JlYXRlKToKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkgICogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzogKGdzdF9maWxlc3JjX2dldHJhbmdlKSwKLQkgIChnc3RfZmlsZXNyY19vcGVuX2ZpbGUpLCAoZ3N0X2ZpbGVzcmNfbG9vcCksCi0JICAoZ3N0X2ZpbGVzcmNfYWN0aXZhdGUpLCAoZmlsZXNyY19maW5kX3BlZWspLAotCSAgKGdzdF9maWxlc3JjX3R5cGVfZmluZCk6Ci0JICBNYWRlIGJhc2Ugc291cmNlIGNsYXNzLCBtYWtlIGZha2VzcmMgZXh0ZW5kIGl0LgotCSAgQWRkIGNvbW1lbnRzIHRvIGJhc2VzaW5rIGNsYXNzLgotCSAgU29tZSBmaWxlc3JjIGNsZWFudXAuCi0KLTIwMDUtMDQtMDEgMTA6MTQ6NDUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogdGVzdHMvbWVtY2h1bmsvZ21lbWNodW5rdGVzdC5jOgotCSAgYWRkIHN1cHBvcnQgZm9yIGdvb2dsZSBtYWxsb2MgaWYgYXZhaWxhYmxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBzdXBwb3J0IGZvciBnb29nbGUgbWFsbG9jIGlmIGF2YWlsYWJsZQotCi0yMDA1LTA0LTAxIDAyOjQxOjM1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dzdHBsdWdpbi5jOiBTd2l0Y2ggdG8gdXNpbmcgR19NT0RVTEVfQklORF9MT0NBTCwgd2hpY2ggbWVhbnMgcGx1Z2lucyBhcmUgbm93IGV4cGVjdGVkIHRvIGxpbmsgYWdhaW5zdCBsaWJnc3RyZWFtZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBsdWdpbi5jOiAoZ3N0X3BsdWdpbl9jaGVja19maWxlKSwgKGdzdF9wbHVnaW5fbG9hZF9maWxlKToKLQkgIFN3aXRjaCB0byB1c2luZyBHX01PRFVMRV9CSU5EX0xPQ0FMLCB3aGljaCBtZWFucyBwbHVnaW5zIGFyZSBub3cKLQkgIGV4cGVjdGVkIHRvIGxpbmsgYWdhaW5zdCBsaWJnc3RyZWFtZXIuCi0JICAqIGdzdC9iYXNlL01ha2VmaWxlLmFtOiBsaW5rIGFnYWluc3QgbGliZ3N0cmVhbWVyCi0JICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbTogc2FtZQotCi0yMDA1LTAzLTMxIDE1OjAwOjExICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHRlc3RzL2luc3RhbnRpYXRlLzogQWRkIHRlc3QgdG8gdGVzdCBzcGVlZCBvZiBjYXBzIGNvcHkgYW5kIGZyZWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDMtMzEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHRlc3RzL2luc3RhbnRpYXRlL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9pbnN0YW50aWF0ZS9jYXBzLmM6IEFkZCB0ZXN0IHRvIHRlc3Qgc3BlZWQgb2YgY2FwcyBjb3B5Ci0JICBhbmQgZnJlZS4KLQkgICogdGVzdHMvbWVtY2h1bmsvZ21lbWNodW5rdGVzdC5jIChtYWluKTogVXNlIGFsbG9jIG9ubHkgb24gdGhlCi0JICBHTWVtQ2h1bmsgdG8gYmUgZmFpci4KLQkgICogZ3N0L2dzdHRyYXNoc3RhY2suaDogUmVtb3ZlIHdhcm5pbmcgYWJvdXQgdXNpbmcgdGhlIGZhbGxiYWNrCi0JICB0cmFzaCBzdGFjayBpbXBsZW1lbnRhdGlvbiwgaXQncyBzdGlsbCBmYXN0ZXIgdGhhbiBtYWxsb2MuCi0KLTIwMDUtMDMtMzEgMTA6MTA6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEFkZGVkIHN0YXJ0L3N0b3AgbWV0aG9kcyB0byB0cmFuc2Zvcm0gYmFzZSBjbGFzcyBzbyBzdWJjbGFzc2VzIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIHN0YXRlIGNoYW5nZXMgZXZlbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmM6IChnc3RfYmFzZV90cmFuc2Zvcm1fYmFzZV9pbml0KSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2xhc3NfaW5pdCksIChnc3RfYmFzZV90cmFuc2Zvcm1faW5pdCksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2FjdGl2YXRlKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2FjdGl2YXRlKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9jbGFzc19pbml0KSwKLQkgIChnc3RfaWRlbnRpdHlfZXZlbnQpLCAoZ3N0X2lkZW50aXR5X2NoZWNrX3BlcmZlY3QpLAotCSAgKGdzdF9pZGVudGl0eV90cmFuc2Zvcm0pLCAoZ3N0X2lkZW50aXR5X3N0YXJ0KSwKLQkgIChnc3RfaWRlbnRpdHlfc3RvcCk6Ci0JICBBZGRlZCBzdGFydC9zdG9wIG1ldGhvZHMgdG8gdHJhbnNmb3JtIGJhc2UgY2xhc3Mgc28gc3ViY2xhc3NlcwotCSAgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggc3RhdGUgY2hhbmdlcyBldmVuLgotCi0yMDA1LTAzLTMxIDEwOjEwOjIxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIHRlc3RzL21lbWNodW5rL2dtZW1jaHVua3Rlc3QuYzoKLQkgIGFkZCBwZXItdGhyZWFkIHN0YXRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBwZXItdGhyZWFkIHN0YXRzCi0KLTIwMDUtMDMtMzEgMDk6NDY6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IEFkZGVkIHJhdGUgdG8gdGhlIGRpc2NvbnQgZXZlbnQgdG8gcHJlcGFyZSBmb3IgdmFyaWFibGUgc3BlZWQgYW5kIHJldmVyc2UgcGxheWJhY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGV2ZW50LmM6IChnc3RfZXZlbnRfbmV3X2Rpc2NvbnRpbnVvdXNfdmFsaXN0KSwKLQkgIChnc3RfZXZlbnRfbmV3X2Rpc2NvbnRpbnVvdXMpLCAoZ3N0X2V2ZW50X2Rpc2NvbnRfZ2V0X3ZhbHVlKToKLQkgICogZ3N0L2dzdGV2ZW50Lmg6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfc2V0X2FjdGl2ZSksIChnc3RfcGFkX3BlZXJfc2V0X2FjdGl2ZSksCi0JICAoZ3N0X3BhZF9wdWxsX3JhbmdlKToKLQkgIEFkZGVkIHJhdGUgdG8gdGhlIGRpc2NvbnQgZXZlbnQgdG8gcHJlcGFyZSBmb3IgdmFyaWFibGUgc3BlZWQKLQkgIGFuZCByZXZlcnNlIHBsYXliYWNrLgotCi0yMDA1LTAzLTMwIDE0OjA5OjAxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIHRlc3RzL21lbWNodW5rL2dtZW1jaHVua3Rlc3QuYzoKLQkgIENvbW1pdCBtZW0gY2h1bmsgdGVzdDsgcHJvYmFibHkgd2lsbCBiZSByZW1vdmVkIGxhdGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBDb21taXQgbWVtIGNodW5rIHRlc3Q7IHByb2JhYmx5IHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KLQotMjAwNS0wMy0zMCAwMzo1NzozOSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIEEgbGl0dGxlIGV4YW1wbGUgcHJvZ3JhbSB0byBzaG93IGhvdyB0cmlnZ2VyLWJhc2VkIGVsZW1lbnRzIGNhbiB3b3JrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogdGVzdHN1aXRlL3RyaWdnZXIvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzdWl0ZS90cmlnZ2VyL3RyaWdnZXIuYzogQSBsaXR0bGUgZXhhbXBsZSBwcm9ncmFtIHRvIHNob3cKLQkgIGhvdyB0cmlnZ2VyLWJhc2VkIGVsZW1lbnRzIGNhbiB3b3JrLgotCi0yMDA1LTAzLTI5IDE2OjE4OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvOiBTaW1wbGlmeSBwYWQgYWN0aXZhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Jhc2UvUkVBRE1FOgotCSAgKiBnc3QvYmFzZS9nc3RiYXNlc2luay5jOiAoZ3N0X2Jhc2VzaW5rX2dldF90eXBlKSwKLQkgIChnc3RfYmFzZXNpbmtfYmFzZV9pbml0KSwgKGdzdF9iYXNlc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfYmFzZXNpbmtfcGFkX2dldGNhcHMpLCAoZ3N0X2Jhc2VzaW5rX2luaXQpLAotCSAgKGdzdF9iYXNlc2lua19hY3RpdmF0ZSksIChnc3RfYmFzZXNpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaDoKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jOiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF90eXBlKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fYmFzZV9pbml0KSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9maW5hbGl6ZSksCi0JICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9wcm94eV9nZXRjYXBzKSwgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fZXZlbnQpLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhaW4pLCAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2hhbmRsZV9idWZmZXIpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2FjdGl2YXRlKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2FjdGl2YXRlKSwKLQkgIChnc3RfYmFzZV90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYzogKGdzdF9pZGVudGl0eV9maW5hbGl6ZSksCi0JICAoZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQpLCAoZ3N0X2lkZW50aXR5X2luaXQpLAotCSAgKGdzdF9pZGVudGl0eV9ldmVudCksIChnc3RfaWRlbnRpdHlfY2hlY2tfcGVyZmVjdCksCi0JICAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybSksIChnc3RfaWRlbnRpdHlfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaWRlbnRpdHlfZ2V0X3Byb3BlcnR5KSwgKGdzdF9pZGVudGl0eV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKLQkgICogZ3N0L2dzdGVsZW1lbnQuYzogKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKSwKLQkgIChnc3RfZWxlbWVudF9sb3N0X3N0YXRlKSwgKGdzdF9lbGVtZW50X3BhZHNfYWN0aXZhdGUpOgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX3NldF9hY3RpdmUpLCAoZ3N0X3BhZF9wZWVyX3NldF9hY3RpdmUpLAotCSAgKGdzdF9wYWRfY2hlY2tfcHVsbF9yYW5nZSksIChnc3RfcGFkX3B1bGxfcmFuZ2UpOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBTaW1wbGlmeSBwYWQgYWN0aXZhdGlvbi4KLQkgIEFkZGVkIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHB1bGxfcmFuZ2UgY2FuIGJlIHBlcmZvcm1lZC4KLQkgIEVycm9yIG91dCB3aGVuIHB1bGxpbmcgaW5hY3RpdmUgb3IgZmx1c2hpbmcgcGFkcy4KLQkgIFJlbW92ZWQgY29uc3QgZnJvbSByZWZjb3VudGVkIHR5cGVzIGFzIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UuCi0JICBTaW1wbGlmeSBwYWQgdGVtcGxhdGVzIGluIGJhc2VzaW5rCi0JICBBZGRlZCBiYXNlIGNsYXNzIGZvciBzaW1wbGUgMS10by0xIHRyYW5zZm9ybXMuCi0JICBNYWtlIGlkZW50aXR5IHN1YmNsYXNzIHRoZSBiYXNlIHRyYW5zZm9ybS4KLQotMjAwNS0wMy0yOSAxNDozNDo1MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBkb2NzLzogQWRkIHRoZXNlIGZpbGVzIHRvIENWUy4gTm93IEkgcmVhbGx5IGRvbid0IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLCBidXQgbGlrZSB3aGF0ZXZlci4gSSB3YW50IGdyZWVuIGJ1aWxkYm90IQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTAzLTI5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBkb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtb3ZlcnJpZGVzLnR4dDoKLQkgICogZG9jcy9nc3QvZ3N0cmVhbWVyLW92ZXJyaWRlcy50eHQ6IEFkZCB0aGVzZSBmaWxlcyB0byBDVlMuIE5vdyBJCi0JICByZWFsbHkgZG9uJ3QgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24sIGJ1dCBsaWtlIHdoYXRldmVyLiBJIHdhbnQKLQkgIGdyZWVuIGJ1aWxkYm90IQotCi0yMDA1LTAzLTI5IDE0OjEyOjQ4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGRvY3MvOiBEaXN0IHRoZSBvdmVycmlkZXMgZmlsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDMtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL2xpYnMvTWFrZWZpbGUuYW06IERpc3QgdGhlIG92ZXJyaWRlcyBmaWxlcy4KLQkgICogY2hlY2svTWFrZWZpbGUuYW0gKGNsZWFuLWxvY2FsKTogUmVtb3ZlIC5saWJzIGRpcmVjdG9yaWVzLgotCSAgKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgYWxsIHRoZSBhdHRpYwotCSAgZWxlbWVudHMgdG8gRVhUUkFfRElTVCwgc28gcG8vIGZpbGVzIGFyZSBoYXBweS4KLQotMjAwNS0wMy0yOSAxMzoxMDoyNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBwby9QT1RGSUxFUzogUmVtb3ZlIGdzdHNwaWRlci5jLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTAzLTI5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBwby9QT1RGSUxFUzogUmVtb3ZlIGdzdHNwaWRlci5jLgotCSAgKiBjb25maWd1cmUuYWMgKEFDX09VVFBVVCk6IEFkZCBtaXNzaW5nIHRlc3RzdWl0ZSBtYWtlZmlsZXMuCi0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvbGlicy9nc3RyZWFtZXItbGlicy1zZWN0aW9ucy50eHQ6IFJlbW92ZSB0aGUgc2VjdGlvbiBvbgotCSAgYnl0ZXN0cmVhbS4KLQkgICogdGVzdHMvY29tcGxleGl0eS5jIChtYWluKTogU2V0IHRoZSBsZW5ndGggb2YgdGhlIHByZXJvbGwgcXVldWUKLQkgIG9uIHRoZSBzaW5rcyB0byBwcmV2ZW50IGEgbG9ja3VwLgotCi0yMDA1LTAzLTI5IDExOjM5OjE3ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC86IFJlbW92ZSB0ZXN0LCBpdCdzIHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gY2hlY2svZ3N0LWxpYnMvZ2RwLmMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDMtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGxpYnMvZ3N0L2RhdGFwcm90b2NvbC9NYWtlZmlsZS5hbToKLQkgICogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC10ZXN0LmM6IFJlbW92ZSB0ZXN0LCBpdCdzCi0JICB0aGUgc2FtZSBhcyB0aGUgb25lIGluIGNoZWNrL2dzdC1saWJzL2dkcC5jLgotCi0yMDA1LTAzLTI5IDEwOjU1OjM5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHBvLywgZG9jcy9nc3QvOiBDb21taXQgYXV0b21hdGljIGNoYW5nZXMgdG8gZG9jcyBhbmQgcG8gZmlsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDMtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHBvLywgZG9jcy9nc3QvOiBDb21taXQgYXV0b21hdGljIGNoYW5nZXMgdG8gZG9jcyBhbmQgcG8gZmlsZXMuCi0JICAqIGdzdC9lbGVtZW50cy9NYWtlZmlsZS5hbSAobGliZ3N0ZWxlbWVudHNfbGFfTERGTEFHUyk6IExpbmsgdG8KLQkgIHRoZSB2ZXJzaW9uZWQgbGliZ3N0YmFzZS4KLQkgICogY2hlY2svTWFrZWZpbGUuYW06IERlcGVuZCBvbiBhbiB1bnZlcnNpb25lZCBnc3QtcmVnaXN0ZXIsIHNlZW1zCi0JICB0byBtYWtlIGF1dG9jb25mIGhhcHBpZXIuCi0JICAqIGdzdC9iYXNlL01ha2VmaWxlLmFtOiBNYWtlIGxpYmdzdGJhc2UgYSB2ZXJzaW9uZWQgbGliLgotCi0yMDA1LTAzLTI4IDE0OjU0OjMzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGVsZW1lbnQudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQ6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LXByZXJvbGwudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1zY2hlZHVsaW5nLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dDoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9iYXNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2Jhc2UvUkVBRE1FOgotCSogZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzoKLQkqIGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg6Ci0JKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5oOgotCSogZ3N0L2dzdGJpbi5jOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RwYWQuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5jOgotCSogbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2Jhc2UvUkVBRE1FOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jOgotCSogbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbToKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaDoKLQkgIEFkZGVkIHN0YXRlIGNoYW5nZSBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBZGRlZCBzdGF0ZSBjaGFuZ2UgY29kZS4KLQkgIEFkZGVkL3VwZGF0ZWQgZG9jcy4KLQkgIEFkZGVkIHNpbmsgYmFzZSBjbGFzcywgbWFrZSBmYWtlc2luayBleHRlbmQgdGhlIGJhc2UgY2xhc3MuCi0JICBTbWFsbCBjbGVhbnVwcyBpbiBHc3RQaXBlbGluZS4KLQotMjAwNS0wMy0yNiAyMjowNzo1MyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9NYWtlZmlsZS5hbTogcmVtb3ZlIGdzdGNwdS5bY2hdLiAgVGhlIGdzdF9jcHUgZnVuY3Rpb25hbGl0eSBpcyBicm9rZW4gYW5kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBhIGRpZmZlcmVudCBsaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9NYWtlZmlsZS5hbTogcmVtb3ZlIGdzdGNwdS5bY2hdLiAgVGhlIGdzdF9jcHUgZnVuY3Rpb25hbGl0eQotCSAgaXMgYnJva2VuIGFuZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gYSBkaWZmZXJlbnQgbGlicmFyeS4KLQkgICogZ3N0L2dzdC5jOiAoaW5pdF9wb3N0KTogZG9uJ3QgY2FsbCBfZ3N0X2NwdV9pbml0aWFsaXplKCkKLQkgICogZ3N0L2dzdC5oOiByZW1vdmUgZ3N0Y3B1LmgKLQkgICogZ3N0L2dzdGNwdS5jOiByZW1vdmUKLQkgICogZ3N0L2dzdGNwdS5oOiByZW1vdmUKLQkgICogZ3N0L01ha2VmaWxlLmFtLmZ1dHVyZTogUmVtb3ZlIHRoaXMgZmlsZS4gIEl0J3MgYW5jaWVudC4KLQotMjAwNS0wMy0yNSAwOTo1Nzo0MiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvZ3N0YmluLmM6IEFkZCBkZWZhdWx0IGV2ZW50L3NldF9tYW5hZ2VyIGhhbmRsZXJzLiBUaGUgc2V0X21hbmFnZXIgaGFuZGxlciB0YWtlcyBjYXJlIHRoYXQgdGhlIG1hbmFnZXIgaXMgZGlzdHJpYnUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2Jpbl9zZXRfbWFuYWdlciksCi0JICAoZ3N0X2Jpbl9zZW5kX2V2ZW50KToKLQkgIEFkZCBkZWZhdWx0IGV2ZW50L3NldF9tYW5hZ2VyIGhhbmRsZXJzLiBUaGUgc2V0X21hbmFnZXIgaGFuZGxlcgotCSAgdGFrZXMgY2FyZSB0aGF0IHRoZSBtYW5hZ2VyIGlzIGRpc3RyaWJ1dGVkIG92ZXIga2lkcyB0aGF0IHdlcmUKLQkgIGFscmVhZHkgaW4gdGhlIGJpbiBiZWZvcmUgdGhlIG1hbmFnZXIgd2FzIHNldC4gVGhlIGV2ZW50IGhhbmRsZXIKLQkgIGlzIGEgdXRpbGl0eSB2aXJ0dWFsIGZ1bmN0aW9uIHRoYXQgc2VuZHMgdGhlIGV2ZW50IG92ZXIgYWxsIHNpbmtzLAotCSAgc28gdGhhdCBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChiaW4sIGV2ZW50KTsgaGFzIHRoZSBleHBlY3RlZAotCSAgYmVoYXZpb3VyLgotCSAgKiBnc3QvZ3N0cGFkLmM6IChnc3RfcGFkX2V2ZW50X2RlZmF1bHQpOgotCSAgUmUtaW5zdGFsbCBkZWZhdWx0IGV2ZW50IGhhbmRsaW5nIGZvciBkaXNjb250aW51aXRpZXMsIHNvIHRoYXQKLQkgIHNlZWtpbmcgd29ya3Mgd2l0aG91dCByZXF1aXJpbmcgaGFja3MgaW4gYXBwbGljYXRpb25zIG9yIGV4dHJhCi0JICBjb2RlIGluIHNpbmtzLgotCSAgKiBnc3QvZ3N0cGlwZWxpbmUuYzogKGdzdF9waXBlbGluZV9jbGFzc19pbml0KSwKLQkgIChnc3RfcGlwZWxpbmVfc2VuZF9ldmVudCk6Ci0JICBIYWxmIGhhY2ssIGhhbGYgdXRpbGl0eTogc2V0IGEgcGlwZWxpbmUgdG8gUEFVU0VEIGZvciBzZWVrIGV2ZW50cywKLQkgIHNpbmNlIHRoYXQgaXMgdGhlIG9ubHkgd2F5IHdlIGNhbiBndWFyYW50ZWUgYS92IHN5bmMuIE1lYW5zIHRoYXQKLQkgIHlvdSBjYW4gZG8gZ3N0X2VsZW1lbnRfc2VlayAocGlwZWxpbmUsIG1ldGhvZCwgcG9zKTsgb24gYSBwaXBlbGluZQotCSAgYW5kIGl0ICJqdXN0IHdvcmtzIi4KLQotMjAwNS0wMy0yNSAwOTozNTowMSArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JICBnc3QvZ3N0cGlwZWxpbmUuYzogTG9jay91bmxvY2sgbWlzbWF0Y2guCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdHBpcGVsaW5lLmM6IChnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrKToKLQkgIExvY2svdW5sb2NrIG1pc21hdGNoLgotCi0yMDA1LTAzLTI1IDAwOjM1OjQ0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZG9jcy9mYXEvZ3N0LXVuaW5zdGFsbGVkOiBhZGQgZ3N0LXBsdWdpbnMtYmFzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZmFxL2dzdC11bmluc3RhbGxlZDoKLQkgIGFkZCBnc3QtcGx1Z2lucy1iYXNlCi0JICAqIGRvY3MvZ3N0L01ha2VmaWxlLmFtOgotCSAgZG9uJ3QgZXJyb3Igb3V0IHVudGlsIGRvY3MgYXJlIGZpeGVkCi0JICAqIGRvY3MvZ3N0L2dzdHJlYW1lci50eXBlczoKLQkgIHJlbW92ZSB0aHJlYWQKLQotMjAwNS0wMy0yMiAxNDoyMzo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWN0aXZhdGVkIG1vcmUgdGVzdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGNoZWNrL2dzdC9nc3RtZXNzYWdlLmM6IChTVEFSVF9URVNUKSwgKGdzdF9kYXRhX3N1aXRlKSwgKG1haW4pOgotCSAgKiBnc3QvZ3N0c3RydWN0dXJlLmM6IChnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QpLAotCSAgKGdzdF9zdHJ1Y3R1cmVfY29weV9jb25kaXRpb25hbCk6Ci0JICBBY3RpdmF0ZWQgbW9yZSB0ZXN0cy4KLQkgIEFkZGVkIG1lc3NhZ2UgdGVzdC4KLQkgIEFkZGVkIEdfVFlQRV9QT0lOVEVSIHRvIEdzdFN0cnVjdHVyZS4KLQotMjAwNS0wMy0yMiAxMTozMjo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRG9jcyB1cGRhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1ldmVudHMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0YnVzLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0OgotCSAgKiBnc3QvZ3N0YnVzLmM6Ci0JICAqIGdzdC9nc3RtZXNzYWdlLmM6Ci0JICBEb2NzIHVwZGF0ZXMKLQotMjAwNS0wMy0yMSAxODoxNzo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dzdGJ1cy5jOiBGaXggY29weS1hbmQtcGFzdGUgZXJyb3IuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dzdGJ1cy5jOiAoZ3N0X2J1c19wb3N0KToKLQkgIEZpeCBjb3B5LWFuZC1wYXN0ZSBlcnJvci4KLQotMjAwNS0wMy0yMSAxNzozNDowMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBjb21tb246Ci0JKiBnc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWxlbWVudHMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZWxlbWVudHMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZha2VzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmg6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaDoKLQkqIGdzdC9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3R0ZWUuaDoKLQkqIGdzdC9nc3QuYzoKLQkqIGdzdC9nc3QuaDoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RiaW4uaDoKLQkqIGdzdC9nc3RidXMuYzoKLQkqIGdzdC9nc3RidXMuaDoKLQkqIGdzdC9nc3RjYXBzLmg6Ci0JKiBnc3QvZ3N0ZGF0YS5oOgotCSogZ3N0L2dzdGVsZW1lbnQuYzoKLQkqIGdzdC9nc3RlbGVtZW50Lmg6Ci0JKiBnc3QvZ3N0ZXZlbnQuYzoKLQkqIGdzdC9nc3RldmVudC5oOgotCSogZ3N0L2dzdG1lc3NhZ2UuYzoKLQkqIGdzdC9nc3RtZXNzYWdlLmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5oOgotCSogZ3N0L2dzdHByb2JlLmg6Ci0JKiBnc3QvZ3N0cXVldWUuYzoKLQkqIGdzdC9nc3RxdWV1ZS5oOgotCSogZ3N0L2dzdHNjaGVkdWxlci5jOgotCSogZ3N0L2dzdHNjaGVkdWxlci5oOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5jOgotCSogZ3N0L2dzdHN0cnVjdHVyZS5oOgotCSogZ3N0L2dzdHRhZ2ludGVyZmFjZS5oOgotCSogZ3N0L2dzdHRhZ3NldHRlci5oOgotCSogZ3N0L2dzdHRhc2suYzoKLQkqIGdzdC9nc3R0YXNrLmg6Ci0JKiBnc3QvZ3N0dGhyZWFkLmM6Ci0JKiBnc3QvZ3N0dGhyZWFkLmg6Ci0JKiBnc3QvZ3N0dHlwZXMuaDoKLQkqIGdzdC9zY2hlZHVsZXJzL01ha2VmaWxlLmFtOgotCSogZ3N0L3NjaGVkdWxlcnMvY290aHJlYWRzX2NvbXBhdC5oOgotCSogZ3N0L3NjaGVkdWxlcnMvZW50cnlzY2hlZHVsZXIuYzoKLQkqIGdzdC9zY2hlZHVsZXJzL2ZhaXJjb3RocmVhZHMuYzoKLQkqIGdzdC9zY2hlZHVsZXJzL2ZhaXJjb3RocmVhZHMuaDoKLQkqIGdzdC9zY2hlZHVsZXJzL2ZhaXJzY2hlZHVsZXIuYzoKLQkqIGdzdC9zY2hlZHVsZXJzL2dzdGJhc2ljc2NoZWR1bGVyLmM6Ci0JKiBnc3Qvc2NoZWR1bGVycy9nc3RvcHRpbWFsc2NoZWR1bGVyLmM6Ci0JKiBnc3Qvc2NoZWR1bGVycy9ndGhyZWFkLWNvdGhyZWFkcy5oOgotCSogZ3N0L3NjaGVkdWxlcnMvdGhyZWFkc2NoZWR1bGVyLmM6Ci0JKiBsaWJzL2dzdC9NYWtlZmlsZS5hbToKLQkqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vYnl0ZXN0cmVhbS5jOgotCSogbGlicy9nc3QvYnl0ZXN0cmVhbS9maWxlcGFkLmM6Ci0JKiBsaWJzL2dzdC9kYXRhcHJvdG9jb2wvZGF0YXByb3RvY29sLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmFtOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaDoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmg6Ci0JKiB0ZXN0cy9iZW5jaG1hcmtzL2NvbXBsZXhpdHkuYzoKLQkqIHRlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jb21wbGV4aXR5LmM6Ci0JKiB0ZXN0cy9tYXNzX2VsZW1lbnRzLmM6Ci0JKiB0ZXN0cy9vbGQvdGVzdHN1aXRlL3N0YXRlcy9sb2NrZWQuYzoKLQkqIHRlc3RzL29sZC90ZXN0c3VpdGUvc3RhdGVzL3BhcmVudC5jOgotCSogdGVzdHN1aXRlL3N0YXRlcy9sb2NrZWQuYzoKLQkqIHRlc3RzdWl0ZS9zdGF0ZXMvcGFyZW50LmM6Ci0JKiB0b29scy9nc3QtaW5zcGVjdC5jOgotCSogdG9vbHMvZ3N0LWxhdW5jaC5jOgotCSogdG9vbHMvZ3N0LW1kNXN1bS5jOgotCSogdG9vbHMvZ3N0LXR5cGVmaW5kLmM6Ci0JKiB0b29scy9nc3QteG1saW5zcGVjdC5jOgotCSAgTmV4dCBiaWcgbWVyZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE5leHQgYmlnIG1lcmdlLgotCSAgQWRkZWQgR3N0QnVzIGZvciBtYWlubG9vcCBpbnRlZ3JhdGlvbi4KLQkgIEFkZGVkIEdzdE1lc3NhZ2UgZm9yIHNlbmRpbmcgbm90aWZpY2F0aW9ucyBvbiB0aGUgYnVzLgotCSAgQWRkZWQgR3N0VGFzayBhcyBhbiBhYnN0cmFjdGlvbiBmb3IgcGlwZWxpbmUgZW50cnkgcG9pbnRzLgotCSAgUmVtb3ZlZCBHc3RUaHJlYWQuCi0JICBSZW1vdmVkIFNjaGVkdWxlcnMuCi0JICBTaW1wbGlmaWVkIEdzdFF1ZXVlIGZvciBtdWx0aXRocmVhZGVkIGNvcmUuCi0JICBNYWRlIF9saW5rIHRocmVhZHNhZmUsIHJlbW92ZWQgb2xkIGNhcHNuZWdvLgotCSAgQWRkZWQgU1RSRUFNX0xPQ0sgYW5kIFBSRVJPTExfTE9DSyBpbiBHc3RQYWQuCi0JICBBZGRlZCBwYWQgYmxvY2tpbmcgZnVuY3Rpb25zLgotCSAgUmV3b3JrZWQgc2NoZWR1bGluZyBmdW5jdGlvbnMgaW4gR3N0UGFkIHRvIHByZXBhcmUgZm9yCi0JICBzY2hlZHVsaW5nIHVwZGF0ZXMgc29vbi4KLQkgIE1vdmVkIGV2ZW50cyBvdXQgb2YgZGF0YSBzdHJlYW0uCi0JICBTaW1wbGlmaWVkIEdzdEV2ZW50IHR5cGVzLgotCSAgQWRkZWQgcmV0dXJuIHZhbHVlcyB0byBwdXNoL3B1bGwuCi0JICBSZW1vdmVkIGNsb2NraW5nIGZyb20gR3N0RWxlbWVudC4KLQkgIEFkZGVkIHByb3RvdHlwZXMgZm9yIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBmb3IgbmV4dCBtZXJnZS4KLQkgIFJlbW92ZWQgaXRlcmF0ZSBmcm9tIGJpbnMgYW5kIHN0YXRlIGNoYW5nZSBtYW5hZ2VtZW50LgotCSAgRml4ZWQgc29tZSBlbGVtZW50cywgZGlzYWJsZWQgb3RoZXJzIGZvciBub3cuCi0JICBGaXhlZCAtaW5zcGVjdCBhbmQgLWxhdW5jaC4KLQkgIEFkZGVkIGNoZWNrIGZvciBHc3RCdXMuCi0KLTIwMDUtMDMtMTAgMTI6NTE6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvYyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0ZWxlbWVudC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtZ3N0b2JqZWN0LnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zdGFuZGFyZHMudHh0OgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fYWRkKSwKLQkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlKToKLQkgICogZ3N0L2dzdGJpbi5oOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JICAqIGdzdC9nc3RjYXBzLmg6Ci0JICAqIHRlc3RzdWl0ZS9jbG9jay9jbG9jazEuYzogKG1haW4pOgotCSAgKiB0ZXN0c3VpdGUvY2xvY2svY2xvY2syLmM6IChnc3RfY2xvY2tfZGVidWcpLCAoZWxlbWVudF93YWl0KSwKLQkgIChtYWluKToKLQkgICogdGVzdHN1aXRlL2Rsb3Blbi9sb2FkZ3N0LmM6IChkb190ZXN0KToKLQkgICogdGVzdHN1aXRlL3JlZmNvdW50aW5nL2Jpbi5jOiAoYWRkX3JlbW92ZV90ZXN0MSksCi0JICAoYWRkX3JlbW92ZV90ZXN0MiksIChtYWluKToKLQkgICogdGVzdHN1aXRlL3JlZmNvdW50aW5nL2VsZW1lbnQuYzogKG1haW4pOgotCSAgKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvZWxlbWVudF9wYWQuYzogKG1haW4pOgotCSAgKiB0ZXN0c3VpdGUvcmVmY291bnRpbmcvcGFkLmM6IChtYWluKToKLQkgICogdG9vbHMvZ3N0LWxhdW5jaC5jOiAoc2lnaW50X2hhbmRsZXJfc2lnaGFuZGxlcik6Ci0JICAqIHRvb2xzL2dzdC10eXBlZmluZC5jOiAobWFpbik6Ci0JICBEb2MgdXBkYXRlcy4KLQkgIEFkZGVkIGRvYyBhYm91dCBjbG9jay4KLQkgIHJlbW92ZWQgZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2VfdXAoKSwgbWFya2VkIG1ldGhvZHMKLQkgIGZvciByZW1vdmFsLgotCSAgRml4IG1vcmUgdGVzdHN1aXRlcy4KLQotMjAwNS0wMy0wOSAxNzoyODo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRml4IF9wYWRfZ2V0X2RpcmVjdGlvbiB3cnQgZ2hvc3RwYWRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nc3RwYWQuYzogKGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiksCi0JICAoX2dzdF9wYWRfZGVmYXVsdF9maXhhdGVfZm9yZWFjaCksIChnc3RfcGFkX2NvbGxlY3R2KSwKLQkgIChnc3RfcGFkX2NvbGxlY3RfdmFsaXN0KToKLQkgICogdGVzdHN1aXRlL2JpbnMvaW50ZXJmYWNlLmM6IChtYWluKToKLQkgICogdGVzdHN1aXRlL2NhcHMvYXVkaW9zY2FsZS5jOiAodGVzdF9jYXBzKToKLQkgICogdGVzdHN1aXRlL2NhcHMvY2Fwcy5jOiAodGVzdDEpLCAodGVzdDIpLCAodGVzdDMpOgotCSAgKiB0ZXN0c3VpdGUvY2Fwcy9kZXNlcmlhbGl6ZS5jOiAobWFpbik6Ci0JICAqIHRlc3RzdWl0ZS9jYXBzL2VudW1jYXBzLmM6IChtYWluKToKLQkgICogdGVzdHN1aXRlL2NhcHMvZmlsdGVyY2Fwcy5jOiAobWFpbik6Ci0JICAqIHRlc3RzdWl0ZS9jYXBzL2ludGVyc2VjdDIuYzogKG1haW4pOgotCSAgKiB0ZXN0c3VpdGUvY2Fwcy9yYW5kb20uYzogKG1haW4pOgotCSAgKiB0ZXN0c3VpdGUvY2Fwcy9yZW5lZ290aWF0ZS5jOiAobXlfZml4YXRlKSwgKG1haW4pOgotCSAgKiB0ZXN0c3VpdGUvY2Fwcy9zZXRzLmM6IChjaGVja19jYXBzKToKLQkgICogdGVzdHN1aXRlL2NhcHMvc2ltcGxpZnkuYzogKGNoZWNrX2NhcHMpLCAobWFpbik6Ci0JICAqIHRlc3RzdWl0ZS9jYXBzL3N1YnRyYWN0LmM6IChjaGVja19jYXBzKToKLQkgIEZpeCBfcGFkX2dldF9kaXJlY3Rpb24gd3J0IGdob3N0cGFkcy4KLQkgIEZpeCBjYXBzIHRlc3RzdWl0ZS4KLQotMjAwNS0wMy0wOSAxNjoxMDo1OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svTWFrZWZpbGUuYW06Ci0JKiBjaGVjay9nc3QvZ3N0YmluLmM6Ci0JKiBjaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYzoKLQkqIGdzdC9nc3RiaW4uYzoKLQkqIGdzdC9nc3RiaW4uaDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogZ3N0L3NjaGVkdWxlcnMvZW50cnlzY2hlZHVsZXIuYzoKLQkqIGdzdC9zY2hlZHVsZXJzL2dzdGJhc2ljc2NoZWR1bGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2dzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogdGVzdHMvb2xkL3Rlc3RzdWl0ZS9iaW5zL2ludGVyZmFjZS5jOgotCSogdGVzdHN1aXRlL2JpbnMvaW50ZXJmYWNlLmM6Ci0JICBBZGRlZCBHc3RCaW4gdGVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQWRkZWQgR3N0QmluIHRlc3QuCi0JICBBZGRlZCBHc3RTeXN0ZW1DbG9jayB0ZXN0LgotCSAgSW1wbGVtZW50ZWQgY2xvY2sgZGlzdHJpYnV0aW9uIGNvZGUgaW4gR3N0QmluLgotCSAgSW1wbGVtZW50ZWQgaXRlcmF0ZSBzaW5rcyBtZXRob2QgZm9yIGZ1dHVyZSB1c2UuCi0JICBSZWFycmFuZ2VkIGdzdGVsZW1lbnQuaAotCSAgRml4IEdzdEl0ZXJhdG9yIGNvbXBhcmlzb24gYnVnLgotCSAgTW92ZWQgc29tZSBjb2RlIHRvIEdzdFBpcGVsaW5lLCBtb3N0bHkgY2xvY2tpbmcgcmVsYXRlZC4KLQotMjAwNS0wMy0wOSAxMTowODoxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQnVtcCB2ZXJzaW9uIG51bWJlciwgd2UncmUgbm93IDAuOS4wCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvZ3N0X3ByaXZhdGUuaDoKLQkgICogZ3N0L2dzdGJpbi5jOiAoZ3N0X2Jpbl9hZGRfZnVuYyksIChnc3RfYmluX2FkZCksCi0JICAoZ3N0X2Jpbl9yZW1vdmVfZnVuYyksIChnc3RfYmluX3JlbW92ZSksCi0JICAoZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwKToKLQkgICogZ3N0L2dzdGNsb2NrLmM6IChnc3RfY2xvY2tfaWRfcmVmKSwgKGdzdF9jbG9ja19pZF91bnJlZiksCi0JICAoZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyksIChnc3RfY2xvY2tfaWRfd2FpdCksCi0JICAoZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMpLCAoZ3N0X2Nsb2NrX2luaXQpLAotCSAgKGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQpLCAoZ3N0X2Nsb2NrX2dldF90aW1lKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgICogZ3N0L2dzdGluZm8uYzogKF9nc3RfZGVidWdfaW5pdCk6Ci0JICAqIGdzdC9nc3RvYmplY3QuaDoKLQkgICogZ3N0L2dzdHBhZC5jOiAoX2dzdF9wYWRfZGVmYXVsdF9maXhhdGVfZm9yZWFjaCksCi0JICAoZ3N0X3BhZF9jb2xsZWN0diksIChnc3RfcGFkX2NvbGxlY3RfdmFsaXN0KSwgKGdzdF9wYWRfcXVlcnkpOgotCSAgKiBnc3QvZ3N0cGFkLmg6Ci0JICBCdW1wIHZlcnNpb24gbnVtYmVyLCB3ZSdyZSBub3cgMC45LjAKLQkgIEFkZCBmdXR1cmUgZGVidWdnaW5nIGNhdGVnb3J5LgotCSAgRml4IE5VTEwgX3VucmVmKCkgaW4gX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXAKLQkgIFJlYXJyYW5nZSBnc3RwYWQuaC4KLQkgIFVwZGF0ZSBzb21lIGRvY3MuCi0KLTIwMDUtMDMtMDggMTc6NDI6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9lbGVtZW50cy9nc3RhZ2dyZWdhdG9yLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmRzaW5rLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmRzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGZpbGVzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RpZGVudGl0eS5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdG1kNXNpbmsuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RtdWx0aWZpbGVzcmMuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RzaGFwZXIuYzoKLQkqIGdzdC9lbGVtZW50cy9nc3RzdGF0aXN0aWNzLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5jOgotCSogZ3N0L2dzdGVsZW1lbnQuaDoKLQkqIGdzdC9nc3RxdWV1ZS5jOgotCSogZ3N0L2dzdHRocmVhZC5jOgotCSogZ3N0L3NjaGVkdWxlcnMvZ3N0YmFzaWNzY2hlZHVsZXIuYzoKLQkqIGdzdC9zY2hlZHVsZXJzL2dzdG9wdGltYWxzY2hlZHVsZXIuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0YWdncmVnYXRvci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdG1kNXNpbmsuYzoKLQkqIHBsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHNoYXBlci5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RzdGF0aXN0aWNzLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSAgUmVtb3ZlIHRocmVhZHNhZmUgcHJvcGVydGllcy4gRml4IGVsZW1lbnRzIGJlY2F1c2UgR09iamVjdCBjb21wbGFpbnMgd2hlbiBpbnN0YWxsaW5nIGEgcHJvcGVydHkgYmVmb3JlIGRlY2xhcmluZyBhIHNlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbW92ZSB0aHJlYWRzYWZlIHByb3BlcnRpZXMuIEZpeCBlbGVtZW50cyBiZWNhdXNlIEdPYmplY3QKLQkgIGNvbXBsYWlucyB3aGVuIGluc3RhbGxpbmcgYSBwcm9wZXJ0eSBiZWZvcmUgZGVjbGFyaW5nIGEKLQkgIHNldC9nZXRfcHJvcGVydHkgaGFuZGxlci4KLQkgIFJlYXJyYW5nZSBnc3RlbGVtZW50LmggZmlsZSwgdXNlIFNUQVRFIG1hY3JvcyBmb3Igc3RhdGUgbG9ja3MuCi0JICBGcmVlIG11dGV4ZXMgaW4gdGhlIGZpbmFsaXplIG1ldGhvZCBpbnN0ZWFkIG9mIGRpc3Bvc2UuCi0KLTIwMDUtMDMtMDggMTU6NTc6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZGVkIHBhcmVudGFnZSBjaGVjay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9nc3QvZ3N0b2JqZWN0LmM6IChTVEFSVF9URVNUKSwgKGdzdF9vYmplY3Rfc3VpdGUpOgotCSAgKiBnc3QvZ3N0dGhyZWFkLmM6IChnc3RfdGhyZWFkX3JlbGVhc2VfY2hpbGRyZW5fbG9ja3MpOgotCSAgQWRkZWQgcGFyZW50YWdlIGNoZWNrLgotCSAgRml4IGJ1aWxkIG9nIEdzdFRocmVhZCBhZ2Fpbi4KLQotMjAwNS0wMy0wOCAxNDozODowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRG9jcyB1cGRhdGVzLCBjbGVhbiB1cCBzb21lIGhlYWRlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtY29udmVudGlvbnMudHh0OgotCSAgKiBkb2NzL2Rlc2lnbi9wYXJ0LWdzdG9iamVjdC50eHQ6Ci0JICAqIGRvY3MvZGVzaWduL3BhcnQtcmVsYXRpb25zLnR4dDoKLQkgICogZG9jcy9kZXNpZ24vcGFydC1zdGFuZGFyZHMudHh0OgotCSAgKiBnc3QvZ3N0YmluLmM6IChnc3RfYmluX2FkZF9mdW5jKSwgKGdzdF9iaW5fYWRkKSwKLQkgIChnc3RfYmluX3JlbW92ZV9mdW5jKSwgKGdzdF9iaW5fcmVtb3ZlKSwgKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlKSwKLQkgIChnc3RfYmluX2dldF9ieV9uYW1lKSwgKGdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZSksCi0JICAoZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UpOgotCSAgKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JICAqIGdzdC9nc3RjbG9jay5oOgotCSAgKiBnc3QvZ3N0ZWxlbWVudC5jOiAoZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlKSwgKGdzdF9lbGVtZW50X3NldF9sb29wX2Z1bmN0aW9uKToKLQkgICogZ3N0L2dzdGVsZW1lbnQuaDoKLQkgICogZ3N0L2dzdGl0ZXJhdG9yLmM6Ci0JICAqIGdzdC9nc3RvYmplY3QuYzogKGdzdF9vYmplY3RfY2xhc3NfaW5pdCksIChnc3Rfb2JqZWN0X3JlZiksCi0JICAoZ3N0X29iamVjdF91bnJlZiksIChnc3Rfb2JqZWN0X3NpbmspLCAoZ3N0X29iamVjdF9kaXNwb3NlKSwKLQkgIChnc3Rfb2JqZWN0X2Rpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZCksIChnc3Rfb2JqZWN0X3NldF9uYW1lKSwKLQkgIChnc3Rfb2JqZWN0X3NldF9wYXJlbnQpLCAoZ3N0X29iamVjdF91bnBhcmVudCksCi0JICAoZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzKToKLQkgICogZ3N0L2dzdG9iamVjdC5oOgotCSAgRG9jcyB1cGRhdGVzLCBjbGVhbiB1cCBzb21lIGhlYWRlcnMuCi0JICBGcmVlIGl0ZXJhdG9ycyBpbiBHc3RCaW4uCi0JICBHc3RPYmplY3QgaXMgbm93IGxvb2tpbmcgZ29vZC4KLQotMjAwNS0wMy0wNyAxODozMzozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svOiBBZGRlZCBjaGVja3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY2hlY2svLmN2c2lnbm9yZToKLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGNoZWNrL2dzdC1saWJzLy5jdnNpZ25vcmU6Ci0JICAqIGNoZWNrL2dzdC1saWJzL2dkcC5jOiAoU1RBUlRfVEVTVCksIChnc3Rfb2JqZWN0X3N1aXRlKSwgKG1haW4pOgotCSAgKiBjaGVjay9nc3QvLmN2c2lnbm9yZToKLQkgICogY2hlY2svZ3N0L2dzdGJ1cy5jOiAocG91bmRfYnVzX3dpdGhfbWVzc2FnZXMpLCAocHVsbF9tZXNzYWdlcyksCi0JICAoU1RBUlRfVEVTVCksIChnc3RidXNfc3VpdGUpLCAobWFpbik6Ci0JICAqIGNoZWNrL2dzdC9nc3RjYXBzLmM6IChTVEFSVF9URVNUKSwgKGdzdF9jYXBzX3N1aXRlKSwgKG1haW4pOgotCSAgKiBjaGVjay9nc3QvZ3N0ZGF0YS5jOiAoU1RBUlRfVEVTVCksICh0aHJlYWRfcmVmKSwgKHRocmVhZF91bnJlZiksCi0JICAoZ3N0X2RhdGFfc3VpdGUpLCAobWFpbik6Ci0JICAqIGNoZWNrL2dzdC9nc3RpdGVyYXRvci5jOiAobWFrZV9saXN0X29mX2ludHMpLCAoU1RBUlRfVEVTVCksCi0JICAoYWRkX2ZvbGRfZnVuYyksIChnc3RpdGVyYXRvcl9zdWl0ZSksIChtYWluKToKLQkgICogY2hlY2svZ3N0L2dzdG9iamVjdC5jOiAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlKSwgKFNUQVJUX1RFU1QpLAotCSAgKHRocmVhZF9uYW1lX29iamVjdCksICh0aHJlYWRfbmFtZV9vYmplY3RfZGVmYXVsdCksCi0JICAoZ3N0X29iamVjdF9uYW1lX2NvbXBhcmUpLCAoZ3N0X29iamVjdF9zdWl0ZSksIChtYWluKToKLQkgICogY2hlY2svZ3N0L2dzdHBhZC5jOiAoU1RBUlRfVEVTVCksICh0aHJlYWRfbGlua191bmxpbmspLAotCSAgKGdzdF9wYWRfc3VpdGUpLCAobWFpbik6Ci0JICAqIGNoZWNrL2dzdGNoZWNrLmM6IChnc3RfY2hlY2tfbG9nX21lc3NhZ2VfZnVuYyksCi0JICAoZ3N0X2NoZWNrX2xvZ19jcml0aWNhbF9mdW5jKSwgKGdzdF9jaGVja19pbml0KToKLQkgICogY2hlY2svZ3N0Y2hlY2suaDoKLQkgICogY2hlY2svcGlwZWxpbmVzL3NpbXBsZV9sYXVuY2hfbGluZXMuYzogKHNldHVwX3BpcGVsaW5lKSwKLQkgIChydW5fcGlwZWxpbmUpLCAoU1RBUlRfVEVTVCksIChzaW1wbGVfbGF1bmNoX2xpbmVzX3N1aXRlKSwgKG1haW4pOgotCSAgQWRkZWQgY2hlY2tzLgotCi0yMDA1LTAzLTA3IDE4OjI5OjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ3N0aXRlcmF0b3IuKjogQWRkZWQgbWlzc2luZyBmaWxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ3N0aXRlcmF0b3IuYzogKGdzdF9pdGVyYXRvcl9pbml0KSwgKGdzdF9pdGVyYXRvcl9uZXcpLAotCSAgKGdzdF9saXN0X2l0ZXJhdG9yX25leHQpLCAoZ3N0X2xpc3RfaXRlcmF0b3JfcmVzeW5jKSwKLQkgIChnc3RfbGlzdF9pdGVyYXRvcl9mcmVlKSwgKGdzdF9pdGVyYXRvcl9uZXdfbGlzdCksCi0JICAoZ3N0X2l0ZXJhdG9yX3BvcCksIChnc3RfaXRlcmF0b3JfbmV4dCksIChnc3RfaXRlcmF0b3JfcmVzeW5jKSwKLQkgIChnc3RfaXRlcmF0b3JfZnJlZSksIChnc3RfaXRlcmF0b3JfcHVzaCksIChmaWx0ZXJfbmV4dCksCi0JICAoZmlsdGVyX3Jlc3luYyksIChmaWx0ZXJfdW5pbml0KSwgKGZpbHRlcl9mcmVlKSwKLQkgIChnc3RfaXRlcmF0b3JfZmlsdGVyKSwgKGdzdF9pdGVyYXRvcl9mb2xkKSwgKGZvcmVhY2hfZm9sZF9mdW5jKSwKLQkgIChnc3RfaXRlcmF0b3JfZm9yZWFjaCksIChmaW5kX2N1c3RvbV9mb2xkX2Z1bmMpLAotCSAgKGdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbSk6Ci0JICAqIGdzdC9nc3RpdGVyYXRvci5oOgotCSAgQWRkZWQgbWlzc2luZyBmaWxlcy4KLQotMjAwNS0wMy0wNyAxODoyNzo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTWFrZWZpbGUuYW06Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL2Rlc2lnbi9wYXJ0LU1ULXJlZmNvdW50aW5nLnR4dDoKLQkqIGRvY3MvZGVzaWduL3BhcnQtY29udmVudGlvbnMudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1nc3RvYmplY3QudHh0OgotCSogZG9jcy9kZXNpZ24vcGFydC1yZWxhdGlvbnMudHh0OgotCSogZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuYzoKLQkqIGV4YW1wbGVzL3RocmVhZC90aHJlYWQuYzoKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdXRvcGx1Zy9nc3RzZWFyY2hmdW5jcy5jOgotCSogZ3N0L2F1dG9wbHVnL2dzdHNwaWRlci5jOgotCSogZ3N0L2F1dG9wbHVnL2dzdHNwaWRlcmlkZW50aXR5LmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jOgotCSogZ3N0L2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dGVlLmM6Ci0JKiBnc3QvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0LmM6Ci0JKiBnc3QvZ3N0Lmg6Ci0JKiBnc3QvZ3N0YmluLmM6Ci0JKiBnc3QvZ3N0YmluLmg6Ci0JKiBnc3QvZ3N0YnVmZmVyLmM6Ci0JKiBnc3QvZ3N0YnVmZmVyLmg6Ci0JKiBnc3QvZ3N0Y2Fwcy5jOgotCSogZ3N0L2dzdGNhcHMuaDoKLQkqIGdzdC9nc3RjbG9jay5jOgotCSogZ3N0L2dzdGNsb2NrLmg6Ci0JKiBnc3QvZ3N0Y29tcGF0Lmg6Ci0JKiBnc3QvZ3N0Y3B1LmM6Ci0JKiBnc3QvZ3N0ZGF0YS5jOgotCSogZ3N0L2dzdGRhdGEuaDoKLQkqIGdzdC9nc3RlbGVtZW50LmM6Ci0JKiBnc3QvZ3N0ZWxlbWVudC5oOgotCSogZ3N0L2dzdGV2ZW50Lmg6Ci0JKiBnc3QvZ3N0Zm9ybWF0LmM6Ci0JKiBnc3QvZ3N0Zm9ybWF0Lmg6Ci0JKiBnc3QvZ3N0aW5kZXguYzoKLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSogZ3N0L2dzdG1lbWNodW5rLmM6Ci0JKiBnc3QvZ3N0b2JqZWN0LmM6Ci0JKiBnc3QvZ3N0b2JqZWN0Lmg6Ci0JKiBnc3QvZ3N0cGFkLmM6Ci0JKiBnc3QvZ3N0cGFkLmg6Ci0JKiBnc3QvZ3N0cGlwZWxpbmUuYzoKLQkqIGdzdC9nc3RwaXBlbGluZS5oOgotCSogZ3N0L2dzdHBsdWdpbi5jOgotCSogZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYzoKLQkqIGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg6Ci0JKiBnc3QvZ3N0cHJvYmUuYzoKLQkqIGdzdC9nc3RxdWVyeS5jOgotCSogZ3N0L2dzdHF1ZXJ5Lmg6Ci0JKiBnc3QvZ3N0cXVldWUuYzoKLQkqIGdzdC9nc3RzY2hlZHVsZXIuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuYzoKLQkqIGdzdC9nc3RzdHJ1Y3R1cmUuaDoKLQkqIGdzdC9nc3RzeXN0ZW1jbG9jay5jOgotCSogZ3N0L2dzdHN5c3RlbWNsb2NrLmg6Ci0JKiBnc3QvZ3N0dGFnLmM6Ci0JKiBnc3QvZ3N0dGFnaW50ZXJmYWNlLmM6Ci0JKiBnc3QvZ3N0dGFnbGlzdC5jOgotCSogZ3N0L2dzdHRhZ3NldHRlci5jOgotCSogZ3N0L2dzdHRocmVhZC5jOgotCSogZ3N0L2dzdHRyYXNoc3RhY2suaDoKLQkqIGdzdC9nc3R0eXBlZmluZC5jOgotCSogZ3N0L2dzdHR5cGVzLmg6Ci0JKiBnc3QvZ3N0dXRpbHMuYzoKLQkqIGdzdC9nc3R1dGlscy5oOgotCSogZ3N0L2dzdHZhbHVlLmM6Ci0JKiBnc3QvcGFyc2UvZ3JhbW1hci55OgotCSogZ3N0L3NjaGVkdWxlcnMvZ3N0YmFzaWNzY2hlZHVsZXIuYzoKLQkqIGdzdC9zY2hlZHVsZXJzL2dzdG9wdGltYWxzY2hlZHVsZXIuYzoKLQkqIGxpYnMvZ3N0L2J5dGVzdHJlYW0vYnl0ZXN0cmVhbS5jOgotCSogbGlicy9nc3QvZGF0YXByb3RvY29sL2RhdGFwcm90b2NvbC5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmM6Ci0JKiBwbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jOgotCSogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoKLQkqIHBvL25iLnBvOgotCSogcG8vcnUucG86Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbWl4ZXIvbWl4ZXIuYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy90aHJlYWQvdGhyZWFkLmM6Ci0JKiB0ZXN0cy90aHJlYWRzdGF0ZS90aHJlYWRzdGF0ZTIuYzoKLQkqIHRvb2xzL2dzdC1jb21wcHJlcC5jOgotCSogdG9vbHMvZ3N0LWluc3BlY3QuYzoKLQkqIHRvb2xzL2dzdC1sYXVuY2guYzoKLQkqIHRvb2xzL2dzdC1tZDVzdW0uYzoKLQkqIHRvb2xzL2dzdC14bWxpbnNwZWN0LmM6Ci0JICBGaXJzdCBUSFJFQURFRCBiYWNrcG9ydCBhdHRlbXB0LCBmb2N1c2luZyBvbiBhZGRpbmcgbG9ja3MgYW5kIG1ha2luZyBzdXJlIHRoZSBBUEkgaXMgdGhyZWFkc2FmZS4gTmVlZHMgbW9yZSB3b3JrLiBNb3IuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRmlyc3QgVEhSRUFERUQgYmFja3BvcnQgYXR0ZW1wdCwgZm9jdXNpbmcgb24gYWRkaW5nIGxvY2tzIGFuZAotCSAgbWFraW5nIHN1cmUgdGhlIEFQSSBpcyB0aHJlYWRzYWZlLiBOZWVkcyBtb3JlIHdvcmsuIE1vcmUgZG9jcwotCSAgZm9sbG93IHRoaXMgd2Vlay4KLQotMjAwNS0wMi0yNSAwMDoxMDowNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9nc3RpbmZvLmM6Ci0JKiBnc3QvZ3N0aW5mby5oOgotCSAgYW5vdGhlciBuby1kZWJ1ZyBidWlsZCBmaXgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYW5vdGhlciBuby1kZWJ1ZyBidWlsZCBmaXgKLQotMjAwNS0wMi0yNCAyMzo0MTo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9zY2hlZHVsZXJzL2ZhaXJjb3RocmVhZHMuYzoKLQkgIGRpc2FibGUgZGVidWcgYnVpbGQgZml4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRpc2FibGUgZGVidWcgYnVpbGQgZml4Ci0KLTIwMDUtMDItMjQgMTc6MTI6MTkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgdGVzdHMvOiBOZXcgZmlsZXMsIGdvb2QgZm9yIHJ1bm5pbmcgY29tcGxleGl0eSBiZW5jaG1hcmtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTAyLTI0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiB0ZXN0cy9iZW5jaC1jb21wbGV4aXR5LnNjbToKLQkgICogdGVzdHMvY29tcGxleGl0eS5nbnVwbG90OiBOZXcgZmlsZXMsIGdvb2QgZm9yIHJ1bm5pbmcgY29tcGxleGl0eQotCSAgYmVuY2htYXJrcy4KLQotMjAwNS0wMi0yNCAxNTozNjoyMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICB0ZXN0cy86IE5ldyB0ZXN0LCBzZXRzIHVwIE4gZWxlbWVudHMsIGF0IGVhY2ggbGV2ZWwgdGVlaW5nIGludG8gTSBzdHJlYW1zIHBlciBlbGVtZW50LiBFZWVlbnRlcmVzdGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wMi0yNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogdGVzdHMvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NvbXBsZXhpdHkuYzogTmV3IHRlc3QsIHNldHMgdXAgTiBlbGVtZW50cywgYXQgZWFjaCBsZXZlbAotCSAgdGVlaW5nIGludG8gTSBzdHJlYW1zIHBlciBlbGVtZW50LiBFZWVlbnRlcmVzdGluZy4KLQotMjAwNS0wMi0yNCAxMjozMToxMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICB0ZXN0cy9tYXNzX2VsZW1lbnRzLmdudXBsb3Q6IGdudXBsb3QgZmlsZSBmb3IgdGhlIG1hc3NfZWxlbWVudHMgYmVuY2htYXJrLiBSdW4gYXMgZ251cGxvdCBtYXNzX2VsZW1lbnRzLmdudXBsb3QgPiBmb28uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wMi0yNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogdGVzdHMvbWFzc19lbGVtZW50cy5nbnVwbG90OiBnbnVwbG90IGZpbGUgZm9yIHRoZSBtYXNzX2VsZW1lbnRzCi0JICBiZW5jaG1hcmsuIFJ1biBhcyBnbnVwbG90IG1hc3NfZWxlbWVudHMuZ251cGxvdCA+IGZvby5wcywgYWZ0ZXIKLQkgIHJ1bm5pbmcgYmVuY2gtbWFzc19lbGVtZW50cy5zY20uCi0JICAqIHRlc3RzL2JlbmNoLW1hc3NfZWxlbWVudHMuc2NtOiBOZXcgc2NyaXB0LCBydW5zIG1hc3NfZWxlbWVudHMKLQkgIGZvciB2YXJpb3VzIG51bWJlcnMgb2YgaWRlbnRpdGllcywgb3V0cHV0dGluZyB0aGUgcmVzdWx0cyB0byBhCi0JICBmaWxlLiBSZXF1aXJlcyBndWlsZSAxLjYuIEp1c3QgZm9yIHRlc3RpbmcuCi0KLTIwMDUtMDItMjMgMTU6MTQ6MDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3Qvc2NoZWR1bGVycy9mYWlyc2NoZWR1bGVyLmM6Ci0JICBvbmUgbW9yZSBmaXgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgb25lIG1vcmUgZml4Ci0KLTIwMDUtMDItMjMgMTU6MDY6MzYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3Qvc2NoZWR1bGVycy9mYWlyc2NoZWR1bGVyLmM6Ci0JICBjb21waWxlIHdpdGggZGVidWcgZGlzYWJsZWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgY29tcGlsZSB3aXRoIGRlYnVnIGRpc2FibGVkCi0KLTIwMDUtMDItMjIgMTY6MzQ6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBodW50aW5nIHNlYXNvbiBvbiAwLjkgaXMgbm93IE9QRU4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaHVudGluZyBzZWFzb24gb24gMC45IGlzIG5vdyBPUEVOCi0KZGlmZiAtLWdpdCBhL0lOU1RBTEwgYi9JTlNUQUxMCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDk5ODQwLi4wMDAwMDAwCi0tLSBhL0lOU1RBTEwKKysrIC9kZXYvbnVsbApAQCAtMSwzNzAgKzAsMCBAQAotSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucwotKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1Db3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgMTk5OS0yMDAyLCAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotSW5jLgotCi0gICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAotYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Ci1ub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgb2ZmZXJlZCBhcy1pcywKLXdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQuCi0KLUJhc2ljIEluc3RhbGxhdGlvbgotPT09PT09PT09PT09PT09PT09Ci0KLSAgIEJyaWVmbHksIHRoZSBzaGVsbCBjb21tYW5kIGAuL2NvbmZpZ3VyZSAmJiBtYWtlICYmIG1ha2UgaW5zdGFsbCcKLXNob3VsZCBjb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbCB0aGlzIHBhY2thZ2UuICBUaGUgZm9sbG93aW5nCi1tb3JlLWRldGFpbGVkIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJpYzsgc2VlIHRoZSBgUkVBRE1FJyBmaWxlIGZvcgotaW5zdHJ1Y3Rpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZS4gIFNvbWUgcGFja2FnZXMgcHJvdmlkZSB0aGlzCi1gSU5TVEFMTCcgZmlsZSBidXQgZG8gbm90IGltcGxlbWVudCBhbGwgb2YgdGhlIGZlYXR1cmVzIGRvY3VtZW50ZWQKLWJlbG93LiAgVGhlIGxhY2sgb2YgYW4gb3B0aW9uYWwgZmVhdHVyZSBpbiBhIGdpdmVuIHBhY2thZ2UgaXMgbm90Ci1uZWNlc3NhcmlseSBhIGJ1Zy4gIE1vcmUgcmVjb21tZW5kYXRpb25zIGZvciBHTlUgcGFja2FnZXMgY2FuIGJlIGZvdW5kCi1pbiAqbm90ZSBNYWtlZmlsZSBDb252ZW50aW9uczogKHN0YW5kYXJkcylNYWtlZmlsZSBDb252ZW50aW9ucy4KLQotICAgVGhlIGBjb25maWd1cmUnIHNoZWxsIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBjb3JyZWN0IHZhbHVlcyBmb3IKLXZhcmlvdXMgc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uICBJdCB1c2VzCi10aG9zZSB2YWx1ZXMgdG8gY3JlYXRlIGEgYE1ha2VmaWxlJyBpbiBlYWNoIGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZS4KLUl0IG1heSBhbHNvIGNyZWF0ZSBvbmUgb3IgbW9yZSBgLmgnIGZpbGVzIGNvbnRhaW5pbmcgc3lzdGVtLWRlcGVuZGVudAotZGVmaW5pdGlvbnMuICBGaW5hbGx5LCBpdCBjcmVhdGVzIGEgc2hlbGwgc2NyaXB0IGBjb25maWcuc3RhdHVzJyB0aGF0Ci15b3UgY2FuIHJ1biBpbiB0aGUgZnV0dXJlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGFuZCBhCi1maWxlIGBjb25maWcubG9nJyBjb250YWluaW5nIGNvbXBpbGVyIG91dHB1dCAodXNlZnVsIG1haW5seSBmb3IKLWRlYnVnZ2luZyBgY29uZmlndXJlJykuCi0KLSAgIEl0IGNhbiBhbHNvIHVzZSBhbiBvcHRpb25hbCBmaWxlICh0eXBpY2FsbHkgY2FsbGVkIGBjb25maWcuY2FjaGUnCi1hbmQgZW5hYmxlZCB3aXRoIGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJyBvciBzaW1wbHkgYC1DJykgdGhhdCBzYXZlcwotdGhlIHJlc3VsdHMgb2YgaXRzIHRlc3RzIHRvIHNwZWVkIHVwIHJlY29uZmlndXJpbmcuICBDYWNoaW5nIGlzCi1kaXNhYmxlZCBieSBkZWZhdWx0IHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aCBhY2NpZGVudGFsIHVzZSBvZiBzdGFsZQotY2FjaGUgZmlsZXMuCi0KLSAgIElmIHlvdSBuZWVkIHRvIGRvIHVudXN1YWwgdGhpbmdzIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UsIHBsZWFzZSB0cnkKLXRvIGZpZ3VyZSBvdXQgaG93IGBjb25maWd1cmUnIGNvdWxkIGNoZWNrIHdoZXRoZXIgdG8gZG8gdGhlbSwgYW5kIG1haWwKLWRpZmZzIG9yIGluc3RydWN0aW9ucyB0byB0aGUgYWRkcmVzcyBnaXZlbiBpbiB0aGUgYFJFQURNRScgc28gdGhleSBjYW4KLWJlIGNvbnNpZGVyZWQgZm9yIHRoZSBuZXh0IHJlbGVhc2UuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBjYWNoZSwgYW5kIGF0Ci1zb21lIHBvaW50IGBjb25maWcuY2FjaGUnIGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0IHdhbnQgdG8ga2VlcCwgeW91Ci1tYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCi0KLSAgIFRoZSBmaWxlIGBjb25maWd1cmUuYWMnIChvciBgY29uZmlndXJlLmluJykgaXMgdXNlZCB0byBjcmVhdGUKLWBjb25maWd1cmUnIGJ5IGEgcHJvZ3JhbSBjYWxsZWQgYGF1dG9jb25mJy4gIFlvdSBuZWVkIGBjb25maWd1cmUuYWMnIGlmCi15b3Ugd2FudCB0byBjaGFuZ2UgaXQgb3IgcmVnZW5lcmF0ZSBgY29uZmlndXJlJyB1c2luZyBhIG5ld2VyIHZlcnNpb24KLW9mIGBhdXRvY29uZicuCi0KLSAgIFRoZSBzaW1wbGVzdCB3YXkgdG8gY29tcGlsZSB0aGlzIHBhY2thZ2UgaXM6Ci0KLSAgMS4gYGNkJyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBhbmQgdHlwZQotICAgICBgLi9jb25maWd1cmUnIHRvIGNvbmZpZ3VyZSB0aGUgcGFja2FnZSBmb3IgeW91ciBzeXN0ZW0uCi0KLSAgICAgUnVubmluZyBgY29uZmlndXJlJyBtaWdodCB0YWtlIGEgd2hpbGUuICBXaGlsZSBydW5uaW5nLCBpdCBwcmludHMKLSAgICAgc29tZSBtZXNzYWdlcyB0ZWxsaW5nIHdoaWNoIGZlYXR1cmVzIGl0IGlzIGNoZWNraW5nIGZvci4KLQotICAyLiBUeXBlIGBtYWtlJyB0byBjb21waWxlIHRoZSBwYWNrYWdlLgotCi0gIDMuIE9wdGlvbmFsbHksIHR5cGUgYG1ha2UgY2hlY2snIHRvIHJ1biBhbnkgc2VsZi10ZXN0cyB0aGF0IGNvbWUgd2l0aAotICAgICB0aGUgcGFja2FnZSwgZ2VuZXJhbGx5IHVzaW5nIHRoZSBqdXN0LWJ1aWx0IHVuaW5zdGFsbGVkIGJpbmFyaWVzLgotCi0gIDQuIFR5cGUgYG1ha2UgaW5zdGFsbCcgdG8gaW5zdGFsbCB0aGUgcHJvZ3JhbXMgYW5kIGFueSBkYXRhIGZpbGVzIGFuZAotICAgICBkb2N1bWVudGF0aW9uLiAgV2hlbiBpbnN0YWxsaW5nIGludG8gYSBwcmVmaXggb3duZWQgYnkgcm9vdCwgaXQgaXMKLSAgICAgcmVjb21tZW5kZWQgdGhhdCB0aGUgcGFja2FnZSBiZSBjb25maWd1cmVkIGFuZCBidWlsdCBhcyBhIHJlZ3VsYXIKLSAgICAgdXNlciwgYW5kIG9ubHkgdGhlIGBtYWtlIGluc3RhbGwnIHBoYXNlIGV4ZWN1dGVkIHdpdGggcm9vdAotICAgICBwcml2aWxlZ2VzLgotCi0gIDUuIE9wdGlvbmFsbHksIHR5cGUgYG1ha2UgaW5zdGFsbGNoZWNrJyB0byByZXBlYXQgYW55IHNlbGYtdGVzdHMsIGJ1dAotICAgICB0aGlzIHRpbWUgdXNpbmcgdGhlIGJpbmFyaWVzIGluIHRoZWlyIGZpbmFsIGluc3RhbGxlZCBsb2NhdGlvbi4KLSAgICAgVGhpcyB0YXJnZXQgZG9lcyBub3QgaW5zdGFsbCBhbnl0aGluZy4gIFJ1bm5pbmcgdGhpcyB0YXJnZXQgYXMgYQotICAgICByZWd1bGFyIHVzZXIsIHBhcnRpY3VsYXJseSBpZiB0aGUgcHJpb3IgYG1ha2UgaW5zdGFsbCcgcmVxdWlyZWQKLSAgICAgcm9vdCBwcml2aWxlZ2VzLCB2ZXJpZmllcyB0aGF0IHRoZSBpbnN0YWxsYXRpb24gY29tcGxldGVkCi0gICAgIGNvcnJlY3RseS4KLQotICA2LiBZb3UgY2FuIHJlbW92ZSB0aGUgcHJvZ3JhbSBiaW5hcmllcyBhbmQgb2JqZWN0IGZpbGVzIGZyb20gdGhlCi0gICAgIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBieSB0eXBpbmcgYG1ha2UgY2xlYW4nLiAgVG8gYWxzbyByZW1vdmUgdGhlCi0gICAgIGZpbGVzIHRoYXQgYGNvbmZpZ3VyZScgY3JlYXRlZCAoc28geW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvcgotICAgICBhIGRpZmZlcmVudCBraW5kIG9mIGNvbXB1dGVyKSwgdHlwZSBgbWFrZSBkaXN0Y2xlYW4nLiAgVGhlcmUgaXMKLSAgICAgYWxzbyBhIGBtYWtlIG1haW50YWluZXItY2xlYW4nIHRhcmdldCwgYnV0IHRoYXQgaXMgaW50ZW5kZWQgbWFpbmx5Ci0gICAgIGZvciB0aGUgcGFja2FnZSdzIGRldmVsb3BlcnMuICBJZiB5b3UgdXNlIGl0LCB5b3UgbWF5IGhhdmUgdG8gZ2V0Ci0gICAgIGFsbCBzb3J0cyBvZiBvdGhlciBwcm9ncmFtcyBpbiBvcmRlciB0byByZWdlbmVyYXRlIGZpbGVzIHRoYXQgY2FtZQotICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgNy4gT2Z0ZW4sIHlvdSBjYW4gYWxzbyB0eXBlIGBtYWtlIHVuaW5zdGFsbCcgdG8gcmVtb3ZlIHRoZSBpbnN0YWxsZWQKLSAgICAgZmlsZXMgYWdhaW4uICBJbiBwcmFjdGljZSwgbm90IGFsbCBwYWNrYWdlcyBoYXZlIHRlc3RlZCB0aGF0Ci0gICAgIHVuaW5zdGFsbGF0aW9uIHdvcmtzIGNvcnJlY3RseSwgZXZlbiB0aG91Z2ggaXQgaXMgcmVxdWlyZWQgYnkgdGhlCi0gICAgIEdOVSBDb2RpbmcgU3RhbmRhcmRzLgotCi0gIDguIFNvbWUgcGFja2FnZXMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IHVzZSBBdXRvbWFrZSwgcHJvdmlkZSBgbWFrZQotICAgICBkaXN0Y2hlY2snLCB3aGljaCBjYW4gYnkgdXNlZCBieSBkZXZlbG9wZXJzIHRvIHRlc3QgdGhhdCBhbGwgb3RoZXIKLSAgICAgdGFyZ2V0cyBsaWtlIGBtYWtlIGluc3RhbGwnIGFuZCBgbWFrZSB1bmluc3RhbGwnIHdvcmsgY29ycmVjdGx5LgotICAgICBUaGlzIHRhcmdldCBpcyBnZW5lcmFsbHkgbm90IHJ1biBieSBlbmQgdXNlcnMuCi0KLUNvbXBpbGVycyBhbmQgT3B0aW9ucwotPT09PT09PT09PT09PT09PT09PT09Ci0KLSAgIFNvbWUgc3lzdGVtcyByZXF1aXJlIHVudXN1YWwgb3B0aW9ucyBmb3IgY29tcGlsYXRpb24gb3IgbGlua2luZyB0aGF0Ci10aGUgYGNvbmZpZ3VyZScgc2NyaXB0IGRvZXMgbm90IGtub3cgYWJvdXQuICBSdW4gYC4vY29uZmlndXJlIC0taGVscCcKLWZvciBkZXRhaWxzIG9uIHNvbWUgb2YgdGhlIHBlcnRpbmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0KLSAgIFlvdSBjYW4gZ2l2ZSBgY29uZmlndXJlJyBpbml0aWFsIHZhbHVlcyBmb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCi1ieSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIHRoZSBlbnZpcm9ubWVudC4gIEhlcmUKLWlzIGFuIGV4YW1wbGU6Ci0KLSAgICAgLi9jb25maWd1cmUgQ0M9Yzk5IENGTEFHUz0tZyBMSUJTPS1scG9zaXgKLQotICAgKk5vdGUgRGVmaW5pbmcgVmFyaWFibGVzOjosIGZvciBtb3JlIGRldGFpbHMuCi0KLUNvbXBpbGluZyBGb3IgTXVsdGlwbGUgQXJjaGl0ZWN0dXJlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgIFlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IgbW9yZSB0aGFuIG9uZSBraW5kIG9mIGNvbXB1dGVyIGF0IHRoZQotc2FtZSB0aW1lLCBieSBwbGFjaW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlIGluIHRoZWlyCi1vd24gZGlyZWN0b3J5LiAgVG8gZG8gdGhpcywgeW91IGNhbiB1c2UgR05VIGBtYWtlJy4gIGBjZCcgdG8gdGhlCi1kaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdGhlIG9iamVjdCBmaWxlcyBhbmQgZXhlY3V0YWJsZXMgdG8gZ28gYW5kIHJ1bgotdGhlIGBjb25maWd1cmUnIHNjcmlwdC4gIGBjb25maWd1cmUnIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGZvciB0aGUKLXNvdXJjZSBjb2RlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBgY29uZmlndXJlJyBpcyBpbiBhbmQgaW4gYC4uJy4gIFRoaXMKLWlzIGtub3duIGFzIGEgIlZQQVRIIiBidWlsZC4KLQotICAgV2l0aCBhIG5vbi1HTlUgYG1ha2UnLCBpdCBpcyBzYWZlciB0byBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBvbmUKLWFyY2hpdGVjdHVyZSBhdCBhIHRpbWUgaW4gdGhlIHNvdXJjZSBjb2RlIGRpcmVjdG9yeS4gIEFmdGVyIHlvdSBoYXZlCi1pbnN0YWxsZWQgdGhlIHBhY2thZ2UgZm9yIG9uZSBhcmNoaXRlY3R1cmUsIHVzZSBgbWFrZSBkaXN0Y2xlYW4nIGJlZm9yZQotcmVjb25maWd1cmluZyBmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUuCi0KLSAgIE9uIE1hY09TIFggMTAuNSBhbmQgbGF0ZXIgc3lzdGVtcywgeW91IGNhbiBjcmVhdGUgbGlicmFyaWVzIGFuZAotZXhlY3V0YWJsZXMgdGhhdCB3b3JrIG9uIG11bHRpcGxlIHN5c3RlbSB0eXBlcy0ta25vd24gYXMgImZhdCIgb3IKLSJ1bml2ZXJzYWwiIGJpbmFyaWVzLS1ieSBzcGVjaWZ5aW5nIG11bHRpcGxlIGAtYXJjaCcgb3B0aW9ucyB0byB0aGUKLWNvbXBpbGVyIGJ1dCBvbmx5IGEgc2luZ2xlIGAtYXJjaCcgb3B0aW9uIHRvIHRoZSBwcmVwcm9jZXNzb3IuICBMaWtlCi10aGlzOgotCi0gICAgIC4vY29uZmlndXJlIENDPSJnY2MgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IiBcCi0gICAgICAgICAgICAgICAgIENYWD0iZysrIC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCIgXAotICAgICAgICAgICAgICAgICBDUFA9ImdjYyAtRSIgQ1hYQ1BQPSJnKysgLUUiCi0KLSAgIFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gcHJvZHVjZSB3b3JraW5nIG91dHB1dCBpbiBhbGwgY2FzZXMsIHlvdQotbWF5IGhhdmUgdG8gYnVpbGQgb25lIGFyY2hpdGVjdHVyZSBhdCBhIHRpbWUgYW5kIGNvbWJpbmUgdGhlIHJlc3VsdHMKLXVzaW5nIHRoZSBgbGlwbycgdG9vbCBpZiB5b3UgaGF2ZSBwcm9ibGVtcy4KLQotSW5zdGFsbGF0aW9uIE5hbWVzCi09PT09PT09PT09PT09PT09PT0KLQotICAgQnkgZGVmYXVsdCwgYG1ha2UgaW5zdGFsbCcgaW5zdGFsbHMgdGhlIHBhY2thZ2UncyBjb21tYW5kcyB1bmRlcgotYC91c3IvbG9jYWwvYmluJywgaW5jbHVkZSBmaWxlcyB1bmRlciBgL3Vzci9sb2NhbC9pbmNsdWRlJywgZXRjLiAgWW91Ci1jYW4gc3BlY2lmeSBhbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gYC91c3IvbG9jYWwnIGJ5IGdpdmluZwotYGNvbmZpZ3VyZScgdGhlIG9wdGlvbiBgLS1wcmVmaXg9UFJFRklYJywgd2hlcmUgUFJFRklYIG11c3QgYmUgYW4KLWFic29sdXRlIGZpbGUgbmFtZS4KLQotICAgWW91IGNhbiBzcGVjaWZ5IHNlcGFyYXRlIGluc3RhbGxhdGlvbiBwcmVmaXhlcyBmb3IKLWFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcyBhbmQgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzLiAgSWYgeW91Ci1wYXNzIHRoZSBvcHRpb24gYC0tZXhlYy1wcmVmaXg9UFJFRklYJyB0byBgY29uZmlndXJlJywgdGhlIHBhY2thZ2UgdXNlcwotUFJFRklYIGFzIHRoZSBwcmVmaXggZm9yIGluc3RhbGxpbmcgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4KLURvY3VtZW50YXRpb24gYW5kIG90aGVyIGRhdGEgZmlsZXMgc3RpbGwgdXNlIHRoZSByZWd1bGFyIHByZWZpeC4KLQotICAgSW4gYWRkaXRpb24sIGlmIHlvdSB1c2UgYW4gdW51c3VhbCBkaXJlY3RvcnkgbGF5b3V0IHlvdSBjYW4gZ2l2ZQotb3B0aW9ucyBsaWtlIGAtLWJpbmRpcj1ESVInIHRvIHNwZWNpZnkgZGlmZmVyZW50IHZhbHVlcyBmb3IgcGFydGljdWxhcgota2luZHMgb2YgZmlsZXMuICBSdW4gYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBhIGxpc3Qgb2YgdGhlIGRpcmVjdG9yaWVzCi15b3UgY2FuIHNldCBhbmQgd2hhdCBraW5kcyBvZiBmaWxlcyBnbyBpbiB0aGVtLiAgSW4gZ2VuZXJhbCwgdGhlCi1kZWZhdWx0IGZvciB0aGVzZSBvcHRpb25zIGlzIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBgJHtwcmVmaXh9Jywgc28gdGhhdAotc3BlY2lmeWluZyBqdXN0IGAtLXByZWZpeCcgd2lsbCBhZmZlY3QgYWxsIG9mIHRoZSBvdGhlciBkaXJlY3RvcnkKLXNwZWNpZmljYXRpb25zIHRoYXQgd2VyZSBub3QgZXhwbGljaXRseSBwcm92aWRlZC4KLQotICAgVGhlIG1vc3QgcG9ydGFibGUgd2F5IHRvIGFmZmVjdCBpbnN0YWxsYXRpb24gbG9jYXRpb25zIGlzIHRvIHBhc3MgdGhlCi1jb3JyZWN0IGxvY2F0aW9ucyB0byBgY29uZmlndXJlJzsgaG93ZXZlciwgbWFueSBwYWNrYWdlcyBwcm92aWRlIG9uZSBvcgotYm90aCBvZiB0aGUgZm9sbG93aW5nIHNob3J0Y3V0cyBvZiBwYXNzaW5nIHZhcmlhYmxlIGFzc2lnbm1lbnRzIHRvIHRoZQotYG1ha2UgaW5zdGFsbCcgY29tbWFuZCBsaW5lIHRvIGNoYW5nZSBpbnN0YWxsYXRpb24gbG9jYXRpb25zIHdpdGhvdXQKLWhhdmluZyB0byByZWNvbmZpZ3VyZSBvciByZWNvbXBpbGUuCi0KLSAgIFRoZSBmaXJzdCBtZXRob2QgaW52b2x2ZXMgcHJvdmlkaW5nIGFuIG92ZXJyaWRlIHZhcmlhYmxlIGZvciBlYWNoCi1hZmZlY3RlZCBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgYG1ha2UgaW5zdGFsbAotcHJlZml4PS9hbHRlcm5hdGUvZGlyZWN0b3J5JyB3aWxsIGNob29zZSBhbiBhbHRlcm5hdGUgbG9jYXRpb24gZm9yIGFsbAotZGlyZWN0b3J5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgd2VyZSBleHByZXNzZWQgaW4gdGVybXMgb2YKLWAke3ByZWZpeH0nLiAgQW55IGRpcmVjdG9yaWVzIHRoYXQgd2VyZSBzcGVjaWZpZWQgZHVyaW5nIGBjb25maWd1cmUnLAotYnV0IG5vdCBpbiB0ZXJtcyBvZiBgJHtwcmVmaXh9JywgbXVzdCBlYWNoIGJlIG92ZXJyaWRkZW4gYXQgaW5zdGFsbAotdGltZSBmb3IgdGhlIGVudGlyZSBpbnN0YWxsYXRpb24gdG8gYmUgcmVsb2NhdGVkLiAgVGhlIGFwcHJvYWNoIG9mCi1tYWtlZmlsZSB2YXJpYWJsZSBvdmVycmlkZXMgZm9yIGVhY2ggZGlyZWN0b3J5IHZhcmlhYmxlIGlzIHJlcXVpcmVkIGJ5Ci10aGUgR05VIENvZGluZyBTdGFuZGFyZHMsIGFuZCBpZGVhbGx5IGNhdXNlcyBubyByZWNvbXBpbGF0aW9uLgotSG93ZXZlciwgc29tZSBwbGF0Zm9ybXMgaGF2ZSBrbm93biBsaW1pdGF0aW9ucyB3aXRoIHRoZSBzZW1hbnRpY3Mgb2YKLXNoYXJlZCBsaWJyYXJpZXMgdGhhdCBlbmQgdXAgcmVxdWlyaW5nIHJlY29tcGlsYXRpb24gd2hlbiB1c2luZyB0aGlzCi1tZXRob2QsIHBhcnRpY3VsYXJseSBub3RpY2VhYmxlIGluIHBhY2thZ2VzIHRoYXQgdXNlIEdOVSBMaWJ0b29sLgotCi0gICBUaGUgc2Vjb25kIG1ldGhvZCBpbnZvbHZlcyBwcm92aWRpbmcgdGhlIGBERVNURElSJyB2YXJpYWJsZS4gIEZvcgotZXhhbXBsZSwgYG1ha2UgaW5zdGFsbCBERVNURElSPS9hbHRlcm5hdGUvZGlyZWN0b3J5JyB3aWxsIHByZXBlbmQKLWAvYWx0ZXJuYXRlL2RpcmVjdG9yeScgYmVmb3JlIGFsbCBpbnN0YWxsYXRpb24gbmFtZXMuICBUaGUgYXBwcm9hY2ggb2YKLWBERVNURElSJyBvdmVycmlkZXMgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcywgYW5kCi1kb2VzIG5vdCB3b3JrIG9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgZHJpdmUgbGV0dGVycy4gIE9uIHRoZSBvdGhlciBoYW5kLAotaXQgZG9lcyBiZXR0ZXIgYXQgYXZvaWRpbmcgcmVjb21waWxhdGlvbiBpc3N1ZXMsIGFuZCB3b3JrcyB3ZWxsIGV2ZW4KLXdoZW4gc29tZSBkaXJlY3Rvcnkgb3B0aW9ucyB3ZXJlIG5vdCBzcGVjaWZpZWQgaW4gdGVybXMgb2YgYCR7cHJlZml4fScKLWF0IGBjb25maWd1cmUnIHRpbWUuCi0KLU9wdGlvbmFsIEZlYXR1cmVzCi09PT09PT09PT09PT09PT09PQotCi0gICBJZiB0aGUgcGFja2FnZSBzdXBwb3J0cyBpdCwgeW91IGNhbiBjYXVzZSBwcm9ncmFtcyB0byBiZSBpbnN0YWxsZWQKLXdpdGggYW4gZXh0cmEgcHJlZml4IG9yIHN1ZmZpeCBvbiB0aGVpciBuYW1lcyBieSBnaXZpbmcgYGNvbmZpZ3VyZScgdGhlCi1vcHRpb24gYC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYJyBvciBgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVgnLgotCi0gICBTb21lIHBhY2thZ2VzIHBheSBhdHRlbnRpb24gdG8gYC0tZW5hYmxlLUZFQVRVUkUnIG9wdGlvbnMgdG8KLWBjb25maWd1cmUnLCB3aGVyZSBGRUFUVVJFIGluZGljYXRlcyBhbiBvcHRpb25hbCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgotVGhleSBtYXkgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGAtLXdpdGgtUEFDS0FHRScgb3B0aW9ucywgd2hlcmUgUEFDS0FHRQotaXMgc29tZXRoaW5nIGxpa2UgYGdudS1hcycgb3IgYHgnIChmb3IgdGhlIFggV2luZG93IFN5c3RlbSkuICBUaGUKLWBSRUFETUUnIHNob3VsZCBtZW50aW9uIGFueSBgLS1lbmFibGUtJyBhbmQgYC0td2l0aC0nIG9wdGlvbnMgdGhhdCB0aGUKLXBhY2thZ2UgcmVjb2duaXplcy4KLQotICAgRm9yIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIGBjb25maWd1cmUnIGNhbiB1c3VhbGx5Ci1maW5kIHRoZSBYIGluY2x1ZGUgYW5kIGxpYnJhcnkgZmlsZXMgYXV0b21hdGljYWxseSwgYnV0IGlmIGl0IGRvZXNuJ3QsCi15b3UgY2FuIHVzZSB0aGUgYGNvbmZpZ3VyZScgb3B0aW9ucyBgLS14LWluY2x1ZGVzPURJUicgYW5kCi1gLS14LWxpYnJhcmllcz1ESVInIHRvIHNwZWNpZnkgdGhlaXIgbG9jYXRpb25zLgotCi0gICBTb21lIHBhY2thZ2VzIG9mZmVyIHRoZSBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBob3cgdmVyYm9zZSB0aGUKLWV4ZWN1dGlvbiBvZiBgbWFrZScgd2lsbCBiZS4gIEZvciB0aGVzZSBwYWNrYWdlcywgcnVubmluZyBgLi9jb25maWd1cmUKLS0tZW5hYmxlLXNpbGVudC1ydWxlcycgc2V0cyB0aGUgZGVmYXVsdCB0byBtaW5pbWFsIG91dHB1dCwgd2hpY2ggY2FuIGJlCi1vdmVycmlkZGVuIHdpdGggYG1ha2UgVj0xJzsgd2hpbGUgcnVubmluZyBgLi9jb25maWd1cmUKLS0tZGlzYWJsZS1zaWxlbnQtcnVsZXMnIHNldHMgdGhlIGRlZmF1bHQgdG8gdmVyYm9zZSwgd2hpY2ggY2FuIGJlCi1vdmVycmlkZGVuIHdpdGggYG1ha2UgVj0wJy4KLQotUGFydGljdWxhciBzeXN0ZW1zCi09PT09PT09PT09PT09PT09PT0KLQotICAgT24gSFAtVVgsIHRoZSBkZWZhdWx0IEMgY29tcGlsZXIgaXMgbm90IEFOU0kgQyBjb21wYXRpYmxlLiAgSWYgR05VCi1DQyBpcyBub3QgaW5zdGFsbGVkLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zIGluCi1vcmRlciB0byB1c2UgYW4gQU5TSSBDIGNvbXBpbGVyOgotCi0gICAgIC4vY29uZmlndXJlIENDPSJjYyAtQWUgLURfWE9QRU5fU09VUkNFPTUwMCIKLQotYW5kIGlmIHRoYXQgZG9lc24ndCB3b3JrLCBpbnN0YWxsIHByZS1idWlsdCBiaW5hcmllcyBvZiBHQ0MgZm9yIEhQLVVYLgotCi0gICBIUC1VWCBgbWFrZScgdXBkYXRlcyB0YXJnZXRzIHdoaWNoIGhhdmUgdGhlIHNhbWUgdGltZSBzdGFtcHMgYXMKLXRoZWlyIHByZXJlcXVpc2l0ZXMsIHdoaWNoIG1ha2VzIGl0IGdlbmVyYWxseSB1bnVzYWJsZSB3aGVuIHNoaXBwZWQKLWdlbmVyYXRlZCBmaWxlcyBzdWNoIGFzIGBjb25maWd1cmUnIGFyZSBpbnZvbHZlZC4gIFVzZSBHTlUgYG1ha2UnCi1pbnN0ZWFkLgotCi0gICBPbiBPU0YvMSBhLmsuYS4gVHJ1NjQsIHNvbWUgdmVyc2lvbnMgb2YgdGhlIGRlZmF1bHQgQyBjb21waWxlciBjYW5ub3QKLXBhcnNlIGl0cyBgPHdjaGFyLmg+JyBoZWFkZXIgZmlsZS4gIFRoZSBvcHRpb24gYC1ub2R0aycgY2FuIGJlIHVzZWQgYXMKLWEgd29ya2Fyb3VuZC4gIElmIEdOVSBDQyBpcyBub3QgaW5zdGFsbGVkLCBpdCBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQKLXRvIHRyeQotCi0gICAgIC4vY29uZmlndXJlIENDPSJjYyIKLQotYW5kIGlmIHRoYXQgZG9lc24ndCB3b3JrLCB0cnkKLQotICAgICAuL2NvbmZpZ3VyZSBDQz0iY2MgLW5vZHRrIgotCi0gICBPbiBTb2xhcmlzLCBkb24ndCBwdXQgYC91c3IvdWNiJyBlYXJseSBpbiB5b3VyIGBQQVRIJy4gIFRoaXMKLWRpcmVjdG9yeSBjb250YWlucyBzZXZlcmFsIGR5c2Z1bmN0aW9uYWwgcHJvZ3JhbXM7IHdvcmtpbmcgdmFyaWFudHMgb2YKLXRoZXNlIHByb2dyYW1zIGFyZSBhdmFpbGFibGUgaW4gYC91c3IvYmluJy4gIFNvLCBpZiB5b3UgbmVlZCBgL3Vzci91Y2InCi1pbiB5b3VyIGBQQVRIJywgcHV0IGl0IF9hZnRlcl8gYC91c3IvYmluJy4KLQotICAgT24gSGFpa3UsIHNvZnR3YXJlIGluc3RhbGxlZCBmb3IgYWxsIHVzZXJzIGdvZXMgaW4gYC9ib290L2NvbW1vbicsCi1ub3QgYC91c3IvbG9jYWwnLiAgSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKLQotICAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vYm9vdC9jb21tb24KLQotU3BlY2lmeWluZyB0aGUgU3lzdGVtIFR5cGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgIFRoZXJlIG1heSBiZSBzb21lIGZlYXR1cmVzIGBjb25maWd1cmUnIGNhbm5vdCBmaWd1cmUgb3V0Ci1hdXRvbWF0aWNhbGx5LCBidXQgbmVlZHMgdG8gZGV0ZXJtaW5lIGJ5IHRoZSB0eXBlIG9mIG1hY2hpbmUgdGhlIHBhY2thZ2UKLXdpbGwgcnVuIG9uLiAgVXN1YWxseSwgYXNzdW1pbmcgdGhlIHBhY2thZ2UgaXMgYnVpbHQgdG8gYmUgcnVuIG9uIHRoZQotX3NhbWVfIGFyY2hpdGVjdHVyZXMsIGBjb25maWd1cmUnIGNhbiBmaWd1cmUgdGhhdCBvdXQsIGJ1dCBpZiBpdCBwcmludHMKLWEgbWVzc2FnZSBzYXlpbmcgaXQgY2Fubm90IGd1ZXNzIHRoZSBtYWNoaW5lIHR5cGUsIGdpdmUgaXQgdGhlCi1gLS1idWlsZD1UWVBFJyBvcHRpb24uICBUWVBFIGNhbiBlaXRoZXIgYmUgYSBzaG9ydCBuYW1lIGZvciB0aGUgc3lzdGVtCi10eXBlLCBzdWNoIGFzIGBzdW40Jywgb3IgYSBjYW5vbmljYWwgbmFtZSB3aGljaCBoYXMgdGhlIGZvcm06Ci0KLSAgICAgQ1BVLUNPTVBBTlktU1lTVEVNCi0KLXdoZXJlIFNZU1RFTSBjYW4gaGF2ZSBvbmUgb2YgdGhlc2UgZm9ybXM6Ci0KLSAgICAgT1MKLSAgICAgS0VSTkVMLU9TCi0KLSAgIFNlZSB0aGUgZmlsZSBgY29uZmlnLnN1YicgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZWFjaCBmaWVsZC4gIElmCi1gY29uZmlnLnN1YicgaXNuJ3QgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlLCB0aGVuIHRoaXMgcGFja2FnZSBkb2Vzbid0Ci1uZWVkIHRvIGtub3cgdGhlIG1hY2hpbmUgdHlwZS4KLQotICAgSWYgeW91IGFyZSBfYnVpbGRpbmdfIGNvbXBpbGVyIHRvb2xzIGZvciBjcm9zcy1jb21waWxpbmcsIHlvdSBzaG91bGQKLXVzZSB0aGUgb3B0aW9uIGAtLXRhcmdldD1UWVBFJyB0byBzZWxlY3QgdGhlIHR5cGUgb2Ygc3lzdGVtIHRoZXkgd2lsbAotcHJvZHVjZSBjb2RlIGZvci4KLQotICAgSWYgeW91IHdhbnQgdG8gX3VzZV8gYSBjcm9zcyBjb21waWxlciwgdGhhdCBnZW5lcmF0ZXMgY29kZSBmb3IgYQotcGxhdGZvcm0gZGlmZmVyZW50IGZyb20gdGhlIGJ1aWxkIHBsYXRmb3JtLCB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhlCi0iaG9zdCIgcGxhdGZvcm0gKGkuZS4sIHRoYXQgb24gd2hpY2ggdGhlIGdlbmVyYXRlZCBwcm9ncmFtcyB3aWxsCi1ldmVudHVhbGx5IGJlIHJ1bikgd2l0aCBgLS1ob3N0PVRZUEUnLgotCi1TaGFyaW5nIERlZmF1bHRzCi09PT09PT09PT09PT09PT09Ci0KLSAgIElmIHlvdSB3YW50IHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYGNvbmZpZ3VyZScgc2NyaXB0cyB0byBzaGFyZSwKLXlvdSBjYW4gY3JlYXRlIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FsbGVkIGBjb25maWcuc2l0ZScgdGhhdCBnaXZlcwotZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlcyBsaWtlIGBDQycsIGBjYWNoZV9maWxlJywgYW5kIGBwcmVmaXgnLgotYGNvbmZpZ3VyZScgbG9va3MgZm9yIGBQUkVGSVgvc2hhcmUvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cywgdGhlbgotYFBSRUZJWC9ldGMvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cy4gIE9yLCB5b3UgY2FuIHNldCB0aGUKLWBDT05GSUdfU0lURScgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBzaXRlIHNjcmlwdC4KLUEgd2FybmluZzogbm90IGFsbCBgY29uZmlndXJlJyBzY3JpcHRzIGxvb2sgZm9yIGEgc2l0ZSBzY3JpcHQuCi0KLURlZmluaW5nIFZhcmlhYmxlcwotPT09PT09PT09PT09PT09PT09Ci0KLSAgIFZhcmlhYmxlcyBub3QgZGVmaW5lZCBpbiBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbiBiZSBzZXQgaW4gdGhlCi1lbnZpcm9ubWVudCBwYXNzZWQgdG8gYGNvbmZpZ3VyZScuICBIb3dldmVyLCBzb21lIHBhY2thZ2VzIG1heSBydW4KLWNvbmZpZ3VyZSBhZ2FpbiBkdXJpbmcgdGhlIGJ1aWxkLCBhbmQgdGhlIGN1c3RvbWl6ZWQgdmFsdWVzIG9mIHRoZXNlCi12YXJpYWJsZXMgbWF5IGJlIGxvc3QuICBJbiBvcmRlciB0byBhdm9pZCB0aGlzIHByb2JsZW0sIHlvdSBzaG91bGQgc2V0Ci10aGVtIGluIHRoZSBgY29uZmlndXJlJyBjb21tYW5kIGxpbmUsIHVzaW5nIGBWQVI9dmFsdWUnLiAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgLi9jb25maWd1cmUgQ0M9L3Vzci9sb2NhbDIvYmluL2djYwotCi1jYXVzZXMgdGhlIHNwZWNpZmllZCBgZ2NjJyB0byBiZSB1c2VkIGFzIHRoZSBDIGNvbXBpbGVyICh1bmxlc3MgaXQgaXMKLW92ZXJyaWRkZW4gaW4gdGhlIHNpdGUgc2hlbGwgc2NyaXB0KS4KLQotVW5mb3J0dW5hdGVseSwgdGhpcyB0ZWNobmlxdWUgZG9lcyBub3Qgd29yayBmb3IgYENPTkZJR19TSEVMTCcgZHVlIHRvCi1hbiBBdXRvY29uZiBsaW1pdGF0aW9uLiAgVW50aWwgdGhlIGxpbWl0YXRpb24gaXMgbGlmdGVkLCB5b3UgY2FuIHVzZQotdGhpcyB3b3JrYXJvdW5kOgotCi0gICAgIENPTkZJR19TSEVMTD0vYmluL2Jhc2ggLi9jb25maWd1cmUgQ09ORklHX1NIRUxMPS9iaW4vYmFzaAotCi1gY29uZmlndXJlJyBJbnZvY2F0aW9uCi09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgIGBjb25maWd1cmUnIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnRyb2wgaG93IGl0Ci1vcGVyYXRlcy4KLQotYC0taGVscCcKLWAtaCcKLSAgICAgUHJpbnQgYSBzdW1tYXJ5IG9mIGFsbCBvZiB0aGUgb3B0aW9ucyB0byBgY29uZmlndXJlJywgYW5kIGV4aXQuCi0KLWAtLWhlbHA9c2hvcnQnCi1gLS1oZWxwPXJlY3Vyc2l2ZScKLSAgICAgUHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHVuaXF1ZSB0byB0aGlzIHBhY2thZ2UncwotICAgICBgY29uZmlndXJlJywgYW5kIGV4aXQuICBUaGUgYHNob3J0JyB2YXJpYW50IGxpc3RzIG9wdGlvbnMgdXNlZAotICAgICBvbmx5IGluIHRoZSB0b3AgbGV2ZWwsIHdoaWxlIHRoZSBgcmVjdXJzaXZlJyB2YXJpYW50IGxpc3RzIG9wdGlvbnMKLSAgICAgYWxzbyBwcmVzZW50IGluIGFueSBuZXN0ZWQgcGFja2FnZXMuCi0KLWAtLXZlcnNpb24nCi1gLVYnCi0gICAgIFByaW50IHRoZSB2ZXJzaW9uIG9mIEF1dG9jb25mIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGBjb25maWd1cmUnCi0gICAgIHNjcmlwdCwgYW5kIGV4aXQuCi0KLWAtLWNhY2hlLWZpbGU9RklMRScKLSAgICAgRW5hYmxlIHRoZSBjYWNoZTogdXNlIGFuZCBzYXZlIHRoZSByZXN1bHRzIG9mIHRoZSB0ZXN0cyBpbiBGSUxFLAotICAgICB0cmFkaXRpb25hbGx5IGBjb25maWcuY2FjaGUnLiAgRklMRSBkZWZhdWx0cyB0byBgL2Rldi9udWxsJyB0bwotICAgICBkaXNhYmxlIGNhY2hpbmcuCi0KLWAtLWNvbmZpZy1jYWNoZScKLWAtQycKLSAgICAgQWxpYXMgZm9yIGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJy4KLQotYC0tcXVpZXQnCi1gLS1zaWxlbnQnCi1gLXEnCi0gICAgIERvIG5vdCBwcmludCBtZXNzYWdlcyBzYXlpbmcgd2hpY2ggY2hlY2tzIGFyZSBiZWluZyBtYWRlLiAgVG8KLSAgICAgc3VwcHJlc3MgYWxsIG5vcm1hbCBvdXRwdXQsIHJlZGlyZWN0IGl0IHRvIGAvZGV2L251bGwnIChhbnkgZXJyb3IKLSAgICAgbWVzc2FnZXMgd2lsbCBzdGlsbCBiZSBzaG93bikuCi0KLWAtLXNyY2Rpcj1ESVInCi0gICAgIExvb2sgZm9yIHRoZSBwYWNrYWdlJ3Mgc291cmNlIGNvZGUgaW4gZGlyZWN0b3J5IERJUi4gIFVzdWFsbHkKLSAgICAgYGNvbmZpZ3VyZScgY2FuIGRldGVybWluZSB0aGF0IGRpcmVjdG9yeSBhdXRvbWF0aWNhbGx5LgotCi1gLS1wcmVmaXg9RElSJwotICAgICBVc2UgRElSIGFzIHRoZSBpbnN0YWxsYXRpb24gcHJlZml4LiAgKm5vdGUgSW5zdGFsbGF0aW9uIE5hbWVzOjoKLSAgICAgZm9yIG1vcmUgZGV0YWlscywgaW5jbHVkaW5nIG90aGVyIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBmaW5lLXR1bmluZwotICAgICB0aGUgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucy4KLQotYC0tbm8tY3JlYXRlJwotYC1uJwotICAgICBSdW4gdGhlIGNvbmZpZ3VyZSBjaGVja3MsIGJ1dCBzdG9wIGJlZm9yZSBjcmVhdGluZyBhbnkgb3V0cHV0Ci0gICAgIGZpbGVzLgotCi1gY29uZmlndXJlJyBhbHNvIGFjY2VwdHMgc29tZSBvdGhlciwgbm90IHdpZGVseSB1c2VmdWwsIG9wdGlvbnMuICBSdW4KLWBjb25maWd1cmUgLS1oZWxwJyBmb3IgbW9yZSBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJhYWM4ZS4uMDAwMDAwMAotLS0gYS9NQUlOVEFJTkVSUworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLUdTdHJlYW1lciBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSB0aGUgY29uc2Vuc3VzIG9mIGEgbnVtYmVyCi1vZiBwZW9wbGUsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOgotCi0gSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0Bjb2F4aW9uLm5ldD4KLQotTWFpbnRhaW5lci1yZWxhdGVkIGlzc3VlcyBzaG91bGQgYmUgYWRkcmVzc2VkIHRvOgotCi0gIGdzdHJlYW1lci1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZWZlOWQuLjAwMDAwMDAKLS0tIGEvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUz0tLWVuYWJsZS1ndGstZG9jIC0tZW5hYmxlLWRvY2Jvb2sKLQotIyBub3RlOiBrZWVwIGluIHN5bmMgd2l0aCBjb25maWd1cmUuYWMKLUFDTE9DQUxfQU1GTEFHUyA9IC1JIG00IC1JIGNvbW1vbi9tNAotCi1hY2xvY2FsZGlyID0gJChkYXRhZGlyKS9hY2xvY2FsCi1hY2xvY2FsX0RBVEEgPSBnc3QtZWxlbWVudC1jaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5tNAotCi1TVUJESVJTID0gcGtnY29uZmlnIFwKLQlnc3QgbGlicyBwbHVnaW5zIHRlc3RzIFwKLQlkb2NzIFwKLQlwbyBcCi0JbTQgXAotCWNvbW1vbiBcCi0JZGF0YQotCi1pZiBCVUlMRF9UT09MUwotU1VCRElSUyArPSB0b29scwotZW5kaWYKLQotIyBUaGVzZSBhcmUgYWxsIHRoZSBwb3NzaWJsZSBzdWJkaXJzCi1ESVNUX1NVQkRJUlMgPSBwa2djb25maWcgXAotCWdzdCBsaWJzIHBsdWdpbnMgdG9vbHMgdGVzdHMgXAotCWRvY3MgXAotCXBvIFwKLQltNCBcCi0JY29tbW9uIFwKLQlkYXRhCi0KLSMgaW5jbHVkZSBiZWZvcmUgRVhUUkFfRElTVCBmb3Igd2luMzIgYXNzaWdubWVudAotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi93aW4zMi5tYWsKLQotRVhUUkFfRElTVCA9IFwKLQlnc3RyZWFtZXIuc3BlYyBnc3RyZWFtZXIuc3BlYy5pbiBcCi0JZ3N0LWVsZW1lbnQtY2hlY2subTQgXAotCWNvbmZpZ3VyZS5hYyBhdXRvZ2VuLnNoIGRlcGNvbXAgXAotCU1BSU5UQUlORVJTIEFCT1VULU5MUyBSRUxFQVNFIGdzdHJlYW1lci5kb2FwIFwKLQlzY3JpcHRzL2dzdC11bmluc3RhbGxlZCBcCi0JJCh3aW4zMikKLQotQ0xFQU5GSUxFUyA9IGdzdC1lbGVtZW50LWNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALm00Ci0KLURJU1RDTEVBTkZJTEVTID0gX3N0ZGludC5oCi0KLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vcmVsZWFzZS5tYWsKLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vcG8ubWFrCi0KLWlmIEdTVF9HQ09WX0VOQUJMRUQKLWNsZWFuLWdjb3Y6Ci0JZmluZCAtbmFtZSAiKi5kYSIgLW8gLW5hbWUgIiouZ2NvdiIgfCB4YXJncyBybSB8fCB0cnVlCi0KLWNsZWFuLWJiZzoKLQlmaW5kIC1uYW1lICIqLmJiZyIgLW8gLW5hbWUgIiouYmIiIHwgeGFyZ3Mgcm0gfHwgdHJ1ZQotCi1HQ09WX0RJUlM9Z3N0IGxpYnMKLQotIyMgLlBIT05ZIHNvIGl0IGFsd2F5cyByZWJ1aWxkcyBpdAotLlBIT05ZOiBjb3ZlcmFnZS1yZXBvcnQudHh0Ci0KLWNvdmVyYWdlLXJlcG9ydC50eHQ6Ci0JQkJHX0ZJTEVTPWBmaW5kICQoR0NPVl9ESVJTKSAtbmFtZSAiKi5iYmciYCA7CQkJICBcCi0JQ19GSUxFUz0gOwkJCQkJCQkgIFwKLQlmb3IgRiBpbiAkJEJCR19GSUxFUyA7IGRvCQkJCQkgIFwKLQkJRl9ub2xpYnM9YGVjaG8gJCRGIHwgc2VkIC1lICdzLy5saWJzXC8vL2cnYCA7CQkgIFwKLQkJQz1gZWNobyAkJEZfbm9saWJzIHwgc2VkIC1lICdzLy5iYmcvLmMvZydgIDsJCSAgXAotCQlCPWBiYXNlbmFtZSAkJEYgLmJiZ2AgOwkJCQkJICBcCi0JCUQ9YGRpcm5hbWUgJCRGYCA7CQkJCQkgIFwKLQkJREE9YGVjaG8gJCRGIHwgc2VkIC1lICdzLy5iYmcvLmRhL2cnYCA7CQkJICBcCi0JCURBX2xpYnM9YGVjaG8gJCRELy5saWJzLyQkQi8uZGFgIDsJCQkgIFwKLQkJaWYgdGVzdCAtZSAkJERBIHx8IHRlc3QgLWUgJCREQV9saWJzOyB0aGVuCQkgIFwKLQkJCUNfRklMRVM9IiQkQ19GSUxFUyAkJEMiIDsJCQkgIFwKLQkJZmkgOwkJCQkJCQkgIFwKLQlkb25lIDsJCQkJCQkJCSAgXAotCWVjaG8gJCRDX0ZJTEVTIDsJCQkJCQkgIFwKLQkkKHRvcF9idWlsZGRpcikvdGVzdHN1aXRlL2RlY29kZS1nY292IC0tcmVwb3J0ICQkQ19GSUxFUyA+IGNvdmVyYWdlLXJlcG9ydC50eHQKLQotY2hlY2stY292ZXJhZ2U6IGNsZWFuLWdjb3YgYWxsIGNoZWNrIGNvdmVyYWdlLXJlcG9ydC50eHQKLQljYXQgY292ZXJhZ2UtcmVwb3J0LnR4dAotCi1lbHNlCi1jb3ZlcmFnZS1yZXBvcnQudHh0OgotCWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgotCi1jaGVjay1jb3ZlcmFnZToKLQllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKLWVuZGlmCi0KLWlmIEhBVkVfQ0hFQ0sKLWNoZWNrLXZhbGdyaW5kOgotCSQoTUFLRSkgLUMgdGVzdHMvY2hlY2sgY2hlY2stdmFsZ3JpbmQKLQotY2hlY2stdG9ydHVyZToKLQkkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIHRvcnR1cmUKLQotYnVpbGQtY2hlY2tzOgotCSQoTUFLRSkgLUMgdGVzdHMvY2hlY2sgYnVpbGQtY2hlY2tzCi1lbHNlCi1jaGVjay12YWxncmluZDoKLQllY2hvICInY2hlY2snIGxpYnJhcnkgbm90IGluc3RhbGxlZCwgc2tpcHBpbmciCi0KLWNoZWNrLXRvcnR1cmU6Ci0JZWNobyAiJ2NoZWNrJyBsaWJyYXJ5IG5vdCBpbnN0YWxsZWQsIHNraXBwaW5nIgotCi1idWlsZC1jaGVja3M6Ci0JZWNobyAiJ2NoZWNrJyBsaWJyYXJ5IG5vdCBpbnN0YWxsZWQsIHNraXBwaW5nIgotZW5kaWYKLQotIyBGSVhNRTogdGhpcyB0YXJnZXQgc2hvdWxkIGJlIHJ1biBldmVyeSB0aW1lIHdlIGRvICJtYWtlIHJlbGVhc2UiCi0jIGZpbmQgYSB3YXkgb2YgYXV0b21hdGluZyB0aGF0Ci13aW4zMi11cGRhdGU6Ci0JZm9yIGYgaW4gZ3N0dmVyc2lvbi5oIGdzdGVudW10eXBlcy5jIGdzdGVudW10eXBlcy5oOyBkbyBcCi0JCWNwICQodG9wX2J1aWxkZGlyKS9nc3QvJCRmIHdpbjMyL2NvbW1vbjsgZG9uZQotCSQodG9wX3NyY2RpcikvdG9vbHMvZ3N0LWluZGVudCB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMKLQkkKHRvcF9zcmNkaXIpL3Rvb2xzL2dzdC1pbmRlbnQgd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jCi0JY3AgJCh0b3BfYnVpbGRkaXIpL3dpbjMyL2NvbW1vbi9jb25maWcuaC1uZXcgXAotCQkkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi9jb25maWcuaAotCi1jaGVjay1lbnVtLWdldHR5cGVzOiAkKHRvcF9idWlsZGRpcikvZ3N0L2dzdGVudW10eXBlcy5oCi0JQGVjaG8gJ0NoZWNraW5nIGlmIGFsbCBlbnVtIGFuZCBmbGFnIF9nZXRfdHlwZSgpIGZ1bmNzIGFyZSBpbml0ZWQgaW4gZ3N0X2luaXQoKSc7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCUZVTkNTPWBncmVwICdfZ2V0X3R5cGUgKCcgZ3N0L2dzdGVudW10eXBlcy5oIHwgc2VkIC1lICdzL14uKmdzdF8vZ3N0Xy8nIC1lICdzL19nZXRfdHlwZS4qJCQvX2dldF90eXBlLydgO1wKLQlNSVNTSU5HX0ZVTkNTPScnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZm9yIGYgaW4gJCRGVU5DUzsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgSU5JVF9MSU5FPWBncmVwICQkZiAkKHRvcF9zcmNkaXIpL2dzdC8qLmMgfCBncmVwIGdfdHlwZV9jbGFzc19yZWZgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgIGlmIHRlc3QgIngkJElOSVRfTElORSIgPSAieCI7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgIE1JU1NJTkdfRlVOQ1M9IiQkTUlTU0lOR19GVU5DUyAkJGYiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZmk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlkb25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgdGVzdCAieCQkTUlTU0lOR19GVU5DUyIgIT0gIngiOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZWNobyAiRklYTUU6IHBsZWFzZSBhZGQgdG8gdGhlIGZvbGxvd2luZyB0byBnc3QvZ3N0LmMgaW5pdF9wb3N0KCk6IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgIGZvciBmIGluICQkTUlTU0lOR19GVU5DUzsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgIGVjaG8gIiAgZ190eXBlX2NsYXNzX3JlZiAoJCRmICgpKTsiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgIGV4aXQgMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZmk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWVjaG8gJ0NoZWNraW5nIGlmIGFsbCBlbnVtIGFuZCBmbGFnIF9nZXRfdHlwZSgpIGZ1bmNzIGFyZSBkZWluaXRlZCBpbiBnc3RfZGVpbml0KCknOyAgICAgICAgICAgICAgICAgICAgIFwKLQlNSVNTSU5HX0ZVTkNTPScnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZm9yIGYgaW4gJCRGVU5DUzsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgSU5JVF9MSU5FPWBncmVwICQkZiAkKHRvcF9zcmNkaXIpL2dzdC8qLmMgfCBncmVwIGdfdHlwZV9jbGFzc191bnJlZmA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgIGlmIHRlc3QgIngkJElOSVRfTElORSIgPSAieCI7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgIE1JU1NJTkdfRlVOQ1M9IiQkTUlTU0lOR19GVU5DUyAkJGYiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZmk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlkb25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgdGVzdCAieCQkTUlTU0lOR19GVU5DUyIgIT0gIngiOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZWNobyAiRklYTUU6IHBsZWFzZSBhZGQgdG8gdGhlIGZvbGxvd2luZyB0byBnc3QvZ3N0LmMgZ3N0X2RlaW5pdCgpOiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgIGZvciBmIGluICQkTUlTU0lOR19GVU5DUzsgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgIGVjaG8gIiAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoJCRmICgpKSk7IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZG9uZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgIGV4aXQgMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZmkKLQotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9sY292Lm1hawotCi0jIERvIG5vdCBydW4gdGhlIGNoZWNrLWV4cG9ydHMgdGVzdCBpbiBjYXNlIGFueSBvcHRpb24gd2hpY2ggY2F1c2VzIHRoZSBBUEkgdG8KLSMgY2hhbmdlIGhhcyBiZWVuIHVzZWQKLWlmICFHU1RfRElTQUJMRV9SRUdJU1RSWQotQ0hFQ0tfRVhQT1JUUyA9IGNoZWNrLWV4cG9ydHMKLWVuZGlmCi0KLWNoZWNrOiAkKENIRUNLX0VYUE9SVFMpIGNoZWNrLWVudW0tZ2V0dHlwZXMKLQotZ3N0LWVsZW1lbnQtY2hlY2stQEdTVF9BUElfVkVSU0lPTkAubTQ6IGdzdC1lbGVtZW50LWNoZWNrLm00Ci0JJChBTV9WX0dFTiljcCAkKHNyY2RpcikvZ3N0LWVsZW1lbnQtY2hlY2subTQgZ3N0LWVsZW1lbnQtY2hlY2stQEdTVF9BUElfVkVSU0lPTkAubTQKLQotIyBjcnVmdDogcGx1Z2lucyB0aGF0IGhhdmUgYmVlbiBtZXJnZWQgb3IgbW92ZWQgb3IgcmVuYW1lZAotCi1DUlVGVF9GSUxFUyA9IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL3NoYXZlIFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL3NoYXZlLWxpYnRvb2wgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvY29kZXNldC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2dsaWJjMi5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9nbGliYzIxLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ljb252Lm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludGRpdjAubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50bC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnRsZGlyLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50bWF4Lm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludHR5cGVzLXByaS5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnR0eXBlc19oLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xjbWVzc2FnZS5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9saWItbGQubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbGliLWxpbmsubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9saWJ0b29sLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xvY2subTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2x0c3VnYXIubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L25scy5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9wby5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9wcmludGYtcG9zaXgubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvc2l6ZV9tYXgubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvc3RkaW50X2gubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvdWludG1heF90Lm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3Zpc2liaWxpdHkubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvd2NoYXJfdC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC93aW50X3QubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQveHNpemUubTQKLQotQ1JVRlRfRElSUyA9IFwKLQkkKHRvcF9idWlsZGRpcikvdGVzdHMvZXhhbXBsZXMveG1sIFwKLQkkKHRvcF9idWlsZGRpcikvdGVzdHMvZXhhbXBsZXMvbGF1bmNoIFwKLQkkKHRvcF9idWlsZGRpcikvdGVzdHMvZXhhbXBsZXMvbWV0YWRhdGEgXAotCSQodG9wX2J1aWxkZGlyKS90ZXN0cy9leGFtcGxlcy9xdWV1ZSBcCi0JJCh0b3BfYnVpbGRkaXIpL3Rlc3RzL2V4YW1wbGVzL3R5cGVmaW5kIFwKLQkkKHRvcF9idWlsZGRpcikvZ3N0L3RtcC1pbnRyb3NwZWN0KiBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0LyovdG1wLWludHJvc3BlY3QqIFwKLQkkKHRvcF9zcmNkaXIpL2RvY3MvcGx1Z2lucy90bXBsCi0KLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vY3J1ZnQubWFrCi0KLWFsbC1sb2NhbDogZ3N0LWVsZW1lbnQtY2hlY2stQEdTVF9BUElfVkVSU0lPTkAubTQgY2hlY2stY3J1ZnQKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ODgwNDMuLjAwMDAwMDAKLS0tIGEvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxNDk2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIHZhcmlvdXMgdGVzdHMgdG8gbWFrZSBzdXJlIHdlIGRpc3QgdGhlIHdpbjMyIHN0dWZmIChmb3IgTVNWQyBidWlsZHMpIHJpZ2h0Ci0KLSMgaW5jbHVkZSB0aGlzIHNuaXBwZXQgdG8gYWRkIGEgY29tbW9uIHJlbGVhc2U6IHRhcmdldCBieSB1c2luZwotIyBpbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3JlbGVhc2UubWFrCi0KLSMgY2hlY2tzIGZvciBsZWZ0LW92ZXIgZmlsZXMgaW4gdGhlICh1c3VhbGx5IHVuaW5zdGFsbGVkKSB0cmVlLCBpZS4gZm9yCi0jIHN0dWZmIHRoYXQgYmVzdCBiZSBkZWxldGVkIHRvIGF2b2lkIHByb2JsZW1zIGxpa2UgaGF2aW5nIG9sZCBwbHVnaW4gYmluYXJpZXMKLSMgbHlpbmcgYXJvdW5kLgotIwotIyBzZXQgQ1JVRlRfRklMRVMgYW5kL29yIENSVUZUX0RJUlMgaW4geW91ciBNYWtlZmlsZS5hbSB3aGVuIHlvdSBpbmNsdWRlIHRoaXMKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotQEJVSUxEX1RPT0xTX1RSVUVAYW1fX2FwcGVuZF8xID0gdG9vbHMKLXN1YmRpciA9IC4KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBcCi0JJChhbV9fY29uZmlndXJlX2RlcHMpICQoYW1fX0RJU1RfQ09NTU9OKQotYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMgPSBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIFwKLSBjb25maWd1cmUubGluZW5vIGNvbmZpZy5zdGF0dXMubGluZW5vCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9IGNvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPSBzdGFtcC5oIGdzdHJlYW1lci5zcGVjCi1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGNzY29wZWxpc3QtcmVjdXJzaXZlIFwKLQljdGFncy1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWR2aS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAotCWluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgXAotCWluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSBcCi0JdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGFjbG9jYWxkaXIpIgotREFUQSA9ICQoYWNsb2NhbF9EQVRBKQotUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKLSAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAotICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCi0gICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKLSAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKLQljc2NvcGUgZGlzdGRpciBkaXN0IGRpc3QtYWxsIGRpc3RjaGVjawotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpIFwKLQkkKExJU1ApY29uZmlnLmguaW4KLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1DU0NPUEUgPSBjc2NvcGUKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY29uZmlnLmguaW4gXAotCSQoc3JjZGlyKS9nc3RyZWFtZXIuc3BlYy5pbiAkKHNyY2Rpcikvc3RhbXAuaC5pbiBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vY292ZXJhZ2UvbGNvdi5tYWsgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL2NydWZ0Lm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wby5tYWsgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL3JlbGVhc2UubWFrIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi93aW4zMi5tYWsgQUJPVVQtTkxTIEFVVEhPUlMgQ09QWUlORyBcCi0JQ2hhbmdlTG9nIElOU1RBTEwgTkVXUyBSRUFETUUgVE9ETyBjb21waWxlIGNvbmZpZy5ndWVzcyBcCi0JY29uZmlnLnJwYXRoIGNvbmZpZy5zdWIgaW5zdGFsbC1zaCBsdG1haW4uc2ggbWlzc2luZwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWRpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKLXRvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQotYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAotICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpIjsgdGhlbiBcCi0gICAgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCi0gICAgICAmJiBybSAtcmYgIiQoZGlzdGRpcikiIFwKLSAgICAgIHx8IHsgc2xlZXAgNSAmJiBybSAtcmYgIiQoZGlzdGRpcikiOyB9OyBcCi0gIGVsc2UgOjsgZmkKLWFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyID0gJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi1hbV9fcmVsYXRpdml6ZSA9IFwKLSAgZGlyMD1gcHdkYDsgXAotICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKLSAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKLSAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKLSAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCi0gIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKLSAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCi0gICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAotICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKLSAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCi0gICAgICBlbHNlIFwKLSAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCi0gICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gICAgICAgIGVsc2UgXAotICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKLSAgICAgICAgZmk7IFwKLSAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKLSAgICAgIGZpOyBcCi0gICAgZmk7IFwKLSAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgZG9uZTsgXAotICByZWxkaXI9IiQkZGlyMiIKLUdaSVBfRU5WID0gLS1iZXN0Ci1ESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIueHoKLURJU1RfVEFSR0VUUyA9IGRpc3QteHoKLWRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKLWFtX19kaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSBcCi0gIHwgc2VkICdzfF5cLi98JChwcmVmaXgpL3wnIHwgZ3JlcCAtdiAnJChpbmZvZGlyKS9kaXIkJCcKLWRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotCi0jIG5vdGU6IGtlZXAgaW4gc3luYyB3aXRoIGNvbmZpZ3VyZS5hYwotQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgLUkgY29tbW9uL200Ci1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTID0gLS1lbmFibGUtZ3RrLWRvYyAtLWVuYWJsZS1kb2Nib29rCi1hY2xvY2FsZGlyID0gJChkYXRhZGlyKS9hY2xvY2FsCi1hY2xvY2FsX0RBVEEgPSBnc3QtZWxlbWVudC1jaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5tNAotU1VCRElSUyA9IHBrZ2NvbmZpZyBnc3QgbGlicyBwbHVnaW5zIHRlc3RzIGRvY3MgcG8gbTQgY29tbW9uIGRhdGEgXAotCSQoYW1fX2FwcGVuZF8xKQotCi0jIFRoZXNlIGFyZSBhbGwgdGhlIHBvc3NpYmxlIHN1YmRpcnMKLURJU1RfU1VCRElSUyA9IHBrZ2NvbmZpZyBcCi0JZ3N0IGxpYnMgcGx1Z2lucyB0b29scyB0ZXN0cyBcCi0JZG9jcyBcCi0JcG8gXAotCW00IFwKLQljb21tb24gXAotCWRhdGEKLQotCi0jIHRoZSBNQU5JRkVTVCBjb250YWlucyBhbGwgd2luMzIgcmVsYXRlZCBmaWxlcyB0aGF0IHNob3VsZCBiZSBkaXN0ZWQKLXdpbjMyID0gJChzaGVsbCBjYXQgJCh0b3Bfc3JjZGlyKS93aW4zMi9NQU5JRkVTVCkKLQotIyB3aWxkY2FyZCBpcyBhcHBhcmVudGx5IG5vdCBwb3J0YWJsZSB0byBvdGhlciBtYWtlcywgaGVuY2UgdGhlIHVzZSBvZiBmaW5kCi0jIHRoZXNlIGFyZSBsaWJyYXJ5IC5kZWYgZmlsZXMgd2l0aCB0aGUgc3ltYm9scyB0byBleHBvcnQKLXdpbjMyZGVmcyA9ICQoc2hlbGwgZmluZCAkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbiAtbmFtZSAnKi5kZWYnKQotCi0jIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKLSMgdGhlc2UgYXJlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBkaXN0ZWQgd2l0aCBDUkxGIGxpbmUgZW5kaW5nczoKLXdpbjMyY3JsZiA9ICQoc2hlbGwgZmluZCAkKHRvcF9zcmNkaXIpL3dpbjMyIC1uYW1lICcqLmRzdycgLW8gLW5hbWUgJyouZHNwJykKLQotIyBpbmNsdWRlIGJlZm9yZSBFWFRSQV9ESVNUIGZvciB3aW4zMiBhc3NpZ25tZW50Ci1FWFRSQV9ESVNUID0gXAotCWdzdHJlYW1lci5zcGVjIGdzdHJlYW1lci5zcGVjLmluIFwKLQlnc3QtZWxlbWVudC1jaGVjay5tNCBcCi0JY29uZmlndXJlLmFjIGF1dG9nZW4uc2ggZGVwY29tcCBcCi0JTUFJTlRBSU5FUlMgQUJPVVQtTkxTIFJFTEVBU0UgZ3N0cmVhbWVyLmRvYXAgXAotCXNjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkIFwKLQkkKHdpbjMyKQotCi1DTEVBTkZJTEVTID0gZ3N0LWVsZW1lbnQtY2hlY2stQEdTVF9BUElfVkVSU0lPTkAubTQKLURJU1RDTEVBTkZJTEVTID0gX3N0ZGludC5oCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQEdDT1ZfRElSUyA9IGdzdCBsaWJzCi0KLSMgRG8gbm90IHJ1biB0aGUgY2hlY2stZXhwb3J0cyB0ZXN0IGluIGNhc2UgYW55IG9wdGlvbiB3aGljaCBjYXVzZXMgdGhlIEFQSSB0bwotIyBjaGFuZ2UgaGFzIGJlZW4gdXNlZAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQENIRUNLX0VYUE9SVFMgPSBjaGVjay1leHBvcnRzCi0KLSMgY3J1ZnQ6IHBsdWdpbnMgdGhhdCBoYXZlIGJlZW4gbWVyZ2VkIG9yIG1vdmVkIG9yIHJlbmFtZWQKLUNSVUZUX0ZJTEVTID0gXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vc2hhdmUgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vc2hhdmUtbGlidG9vbCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9jb2Rlc2V0Lm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2dldHRleHQubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvZ2xpYmMyLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2dsaWJjMjEubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaWNvbnYubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50ZGl2MC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnRsLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludGxkaXIubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9pbnRtYXgubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvaW50dHlwZXMtcHJpLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2ludHR5cGVzX2gubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbGNtZXNzYWdlLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xpYi1sZC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9saWItbGluay5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L2xpYnRvb2wubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbG9jay5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbHRzdWdhci5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvbmxzLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3BvLm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3ByaW50Zi1wb3NpeC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9zaXplX21heC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC91aW50bWF4X3QubTQgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbTQvdmlzaWJpbGl0eS5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC93Y2hhcl90Lm00IFwKLQkkKHRvcF9idWlsZGRpcikvY29tbW9uL200L3dpbnRfdC5tNCBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9tNC94c2l6ZS5tNAotCi1DUlVGVF9ESVJTID0gXAotCSQodG9wX2J1aWxkZGlyKS90ZXN0cy9leGFtcGxlcy94bWwgXAotCSQodG9wX2J1aWxkZGlyKS90ZXN0cy9leGFtcGxlcy9sYXVuY2ggXAotCSQodG9wX2J1aWxkZGlyKS90ZXN0cy9leGFtcGxlcy9tZXRhZGF0YSBcCi0JJCh0b3BfYnVpbGRkaXIpL3Rlc3RzL2V4YW1wbGVzL3F1ZXVlIFwKLQkkKHRvcF9idWlsZGRpcikvdGVzdHMvZXhhbXBsZXMvdHlwZWZpbmQgXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvdG1wLWludHJvc3BlY3QqIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvKi90bXAtaW50cm9zcGVjdCogXAotCSQodG9wX3NyY2RpcikvZG9jcy9wbHVnaW5zL3RtcGwKLQotYWxsOiBjb25maWcuaAotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotYW0tLXJlZnJlc2g6IE1ha2VmaWxlCi0JQDoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vd2luMzIubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3JlbGVhc2UubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3BvLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9sY292Lm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jcnVmdC5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSc7IFwKLQkgICAgICAkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBNYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCi0JICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1czs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotJCh0b3Bfc3JjZGlyKS9jb21tb24vd2luMzIubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3JlbGVhc2UubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3BvLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9sY292Lm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jcnVmdC5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNvbmZpZy5oOiBzdGFtcC1oMQotCUB0ZXN0IC1mICRAIHx8IHJtIC1mIHN0YW1wLWgxCi0JQHRlc3QgLWYgJEAgfHwgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgc3RhbXAtaDEKLQotc3RhbXAtaDE6ICQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBybSAtZiBzdGFtcC1oMQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKLSQoc3JjZGlyKS9jb25maWcuaC5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykgCi0JKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCi0Jcm0gLWYgc3RhbXAtaDEKLQl0b3VjaCAkQAotCi1kaXN0Y2xlYW4taGRyOgotCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQotc3RhbXAuaDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL3N0YW1wLmguaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACi1nc3RyZWFtZXIuc3BlYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci5zcGVjLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1kaXN0Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgbGlidG9vbCBjb25maWcubHQKLWluc3RhbGwtYWNsb2NhbERBVEE6ICQoYWNsb2NhbF9EQVRBKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKGFjbG9jYWxfREFUQSknOyB0ZXN0IC1uICIkKGFjbG9jYWxkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGFjbG9jYWxkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGFjbG9jYWxkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGFjbG9jYWxkaXIpJyI7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1hY2xvY2FsREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGFjbG9jYWxfREFUQSknOyB0ZXN0IC1uICIkKGFjbG9jYWxkaXIpIiB8fCBsaXN0PTsgXAotCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChhY2xvY2FsZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKLQlAZmFpbD07IFwKLQlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAotCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCi0JZWxzZSBcCi0JICBmYWlsY29tPSdleGl0IDEnOyBcCi0JZmk7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1yZWN1cnNpdmUKLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1yZWN1cnNpdmUKLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGU6IGNzY29wZS5maWxlcwotCXRlc3QgISAtcyBjc2NvcGUuZmlsZXMgXAotCSAgfHwgJChDU0NPUEUpIC1iIC1xICQoQU1fQ1NDT1BFRkxBR1MpICQoQ1NDT1BFRkxBR1MpIC1pIGNzY29wZS5maWxlcyAkKENTQ09QRV9BUkdTKQotY2xlYW4tY3Njb3BlOgotCS1ybSAtZiBjc2NvcGUuZmlsZXMKLWNzY29wZS5maWxlczogY2xlYW4tY3Njb3BlIGNzY29wZWxpc3QKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtcmVjdXJzaXZlCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQktcm0gLWYgY3Njb3BlLm91dCBjc2NvcGUuaW4ub3V0IGNzY29wZS5wby5vdXQgY3Njb3BlLmZpbGVzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQotCXRlc3QgLWQgIiQoZGlzdGRpcikiIHx8IG1rZGlyICIkKGRpc3RkaXIpIgotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKLQkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKLQkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAotCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKLQkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAotCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCi0JCWFtX19za2lwX21vZGVfZml4PTogXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCi0JICBkaXN0LWhvb2sKLQktdGVzdCAtbiAiJChhbV9fc2tpcF9tb2RlX2ZpeCkiIFwKLQl8fCBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTc1NSBcCi0JCS1leGVjIGNobW9kIHUrcnd4LGdvK3J4IHt9IFw7IC1vIFwKLQkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWxpbmtzIDEgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKLQkgICEgLXR5cGUgZCAhIC1wZXJtIC00MDAgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKLQkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAotCXx8IGNobW9kIC1SIGErciAiJChkaXN0ZGlyKSIKLWRpc3QtZ3ppcDogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6Ci0JJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKLQotZGlzdC1iemlwMjogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBCWklQMj0kJHtCWklQMi0tOX0gYnppcDIgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgotCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3QtbHppcDogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBsemlwIC1jICQke0xaSVBfT1BULS05fSA+JChkaXN0ZGlyKS50YXIubHoKLQkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQotZGlzdC14ejogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBYWl9PUFQ9JCR7WFpfT1BULS1lfSB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKLQkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQotCi1kaXN0LXRhclo6IGRpc3RkaXIKLQlAZWNobyBXQVJOSU5HOiAiU3VwcG9ydCBmb3IgZGlzdHJpYnV0aW9uIGFyY2hpdmVzIGNvbXByZXNzZWQgd2l0aCIgXAotCQkgICAgICAgImxlZ2FjeSBwcm9ncmFtICdjb21wcmVzcycgaXMgZGVwcmVjYXRlZC4iID4mMgotCUBlY2hvIFdBUk5JTkc6ICJJdCB3aWxsIGJlIHJlbW92ZWQgYWx0b2dldGhlciBpbiBBdXRvbWFrZSAyLjAiID4mMgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBjb21wcmVzcyAtYyA+JChkaXN0ZGlyKS50YXIuWgotCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3Qtc2hhcjogZGlzdGRpcgotCUBlY2hvIFdBUk5JTkc6ICJTdXBwb3J0IGZvciBzaGFyIGRpc3RyaWJ1dGlvbiBhcmNoaXZlcyBpcyIgXAotCSAgICAgICAgICAgICAgICJkZXByZWNhdGVkLiIgPiYyCi0JQGVjaG8gV0FSTklORzogIkl0IHdpbGwgYmUgcmVtb3ZlZCBhbHRvZ2V0aGVyIGluIEF1dG9tYWtlIDIuMCIgPiYyCi0Jc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKLQkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQotCi1kaXN0LXppcDogZGlzdGRpcgotCS1ybSAtZiAkKGRpc3RkaXIpLnppcAotCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQotCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3QgZGlzdC1hbGw6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChESVNUX1RBUkdFVFMpIGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyPSdAOicKLQkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQotCi0jIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCi0jIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCi0jIHRhcmZpbGUuCi1kaXN0Y2hlY2s6IGRpc3QKLQljYXNlICckKERJU1RfQVJDSElWRVMpJyBpbiBcCi0JKi50YXIuZ3oqKSBcCi0JICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAotCSoudGFyLmJ6MiopIFwKLQkgIGJ6aXAyIC1kYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCi0JKi50YXIubHoqKSBcCi0JICBsemlwIC1kYyAkKGRpc3RkaXIpLnRhci5seiB8ICQoYW1fX3VudGFyKSA7O1wKLQkqLnRhci54eiopIFwKLQkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKLQkqLnRhci5aKikgXAotCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAotCSouc2hhci5neiopIFwKLQkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAotCSouemlwKikgXAotCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCi0JZXNhYwotCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpCi0JY2htb2QgdSt3ICQoZGlzdGRpcikKLQlta2RpciAkKGRpc3RkaXIpL19idWlsZCAkKGRpc3RkaXIpL19idWlsZC9zdWIgJChkaXN0ZGlyKS9faW5zdAotCWNobW9kIGEtdyAkKGRpc3RkaXIpCi0JdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKLQlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKLQkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNoZWNrLWhvb2sgXAotCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQvc3ViIFwKLQkgICYmIC4uLy4uL2NvbmZpZ3VyZSBcCi0JICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAotCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKLQkgICAgLS1zcmNkaXI9Li4vLi4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCi0JICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAotCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAotCSAgJiYgKHsgXAotCSAgICAgICAoY2QgLi4vLi4gJiYgdW1hc2sgMDc3ICYmIG1rZGlyICIkJGRjX2Rlc3RkaXIiKSBcCi0JICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgaW5zdGFsbCBcCi0JICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgdW5pbnN0YWxsIFwKLQkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBcCi0JICAgICAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19kZXN0ZGlyIiBkaXN0dW5pbnN0YWxsY2hlY2s7IFwKLQkgICAgICB9IHx8IHsgcm0gLXJmICIkJGRjX2Rlc3RkaXIiOyBleGl0IDE7IH0pIFwKLQkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKLQkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrIFwKLQkgICYmIGNkICIkJGFtX19jd2QiIFwKLQkgIHx8IGV4aXQgMQotCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCi0JQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKLQkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKLQkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JwotZGlzdHVuaW5zdGFsbGNoZWNrOgotCUB0ZXN0IC1uICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKLQkgIGVjaG8gJ0VSUk9SOiB0cnlpbmcgdG8gcnVuICRAIHdpdGggYW4gZW1wdHknIFwKLQkgICAgICAgJyQkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyA+JjI7IFwKLQkgIGV4aXQgMTsgXAotCX07IFwKLQkkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIHx8IHsgXAotCSAgZWNobyAnRVJST1I6IGNhbm5vdCBjaGRpciBpbnRvICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAotCSAgZXhpdCAxOyBcCi0JfTsgXAotCXRlc3QgYCQoYW1fX2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKLQkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAotCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAotCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAotCSAgICAgICAgZmkgOyBcCi0JICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAotCSAgICAgICAgZXhpdCAxOyB9ID4mMgotZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgotCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAotCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAotCSAgZXhpdCAxIDsgXAotCWZpCi0JQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCi0JICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKLQkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAotCSAgICAgICBleGl0IDE7IH0gPiYyCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlICQoREFUQSkgY29uZmlnLmggYWxsLWxvY2FsCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChhY2xvY2FsZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1hY2xvY2FsREFUQQotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCi0JLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1hY2xvY2FsREFUQQotCi0uTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGFsbC1sb2NhbCBcCi0JYW0tLXJlZnJlc2ggY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tY3Njb3BlIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY3Njb3BlIGNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdCBcCi0JZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1ob29rIGRpc3QtbHppcCBkaXN0LXNoYXIgXAotCWRpc3QtdGFyWiBkaXN0LXh6IGRpc3QtemlwIGRpc3RjaGVjayBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBcCi0JZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFjbG9jYWxEQVRBIFwKLQlpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCWluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBcCi0JcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYWNsb2NhbERBVEEgXAotCXVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotd2luMzItZGVidWc6Ci0JQGVjaG87IFwKLQllY2hvIHdpbjMyICAgICA9ICQod2luMzIpOyBcCi0JZWNobzsgXAotCWVjaG8gd2luMzJkZWZzID0gJCh3aW4zMmRlZnMpOyBcCi0JZWNobzsgXAotCWVjaG8gd2luMzJjcmxmID0gJCh3aW4zMmNybGYpOyBcCi0JZWNobwotCi13aW4zMi1jaGVjay1jcmxmOgotCUBlY2hvIENoZWNraW5nIHdpbjMyIGZpbGVzIGZvciBDUiBMRiBsaW5lIGVuZGluZ3MgLi4uOyBcCi0JZmFpbD0wIDsgXAotCWZvciBlYWNoIGluICQod2luMzJjcmxmKSA7IGRvIFwKLQkgIHJlc3VsdD1gcGVybCAtZSAncHJpbnQgZ3JlcCgvXHJcbi8sPD4pJyAiJCRlYWNoIiB8IHdjIC1sYDsgXAotCSAgaWYgdGVzdCAiJCRyZXN1bHQiID0gMCA7IHRoZW4gXAotCSAgICBlY2hvICQkZWFjaCBtdXN0IGJlIGZpeGVkIHRvIGhhdmUgQ1JMRiBsaW5lIGVuZGluZ3MgOyBcCi0JICAgIGZhaWw9MTsgXAotCSAgZmkgOyBcCi0JZG9uZSA7IFwKLQlleGl0ICQkZmFpbAotCi0jIG1ha2Ugc3VyZSBhbGwgc3ltYm9scyB3ZSBleHBvcnQgb24gbGludXggYXJlIGRlZmluZWQgaW4gdGhlIHdpbjMyIC5kZWYgdG9vCi0jIChkb24ndCBjYXJlIGFib3V0IG90aGVyIHVuaXhlcyBmb3Igbm93LCBpdCdzIGVub3VnaCBpZiBpdCB3b3JrcyBvbiBvbmUgb2YKLSMgdGhlIGxpbnV4IGJ1aWxkIGJvdHM7IHdlIGFzc3VtZSAuc28gKQotY2hlY2stZXhwb3J0czoKLQlAZmFpbD0wIDsgXAotCWZvciBsIGluICQod2luMzJkZWZzKTsgZG8gXAotCSAgbGliYmFzZT1gYmFzZW5hbWUgIiQkbCIgIi5kZWYiYDsgXAotCSAgbGlic289YGZpbmQgIiQodG9wX2J1aWxkZGlyKSIgLW5hbWUgIiQkbGliYmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5zbyIgfCBncmVwIC12IC9fYnVpbGQvIHwgaGVhZCAtbjFgOyBcCi0JICBsaWJkZWY9IiQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uLyQkbGliYmFzZS5kZWYiOyBcCi0JICBpZiB0ZXN0ICJ4JCRsaWJzbyIgIT0gIngiOyB0aGVuIFwKLQkgICAgZWNobyBDaGVja2luZyBzeW1ib2xzIGluICQkbGlic287IFwKLQkgICAgaWYgISAoJCh0b3Bfc3JjZGlyKS9jb21tb24vY2hlY2stZXhwb3J0cyAkJGxpYmRlZiAkJGxpYnNvKSA7IHRoZW4gXAotCSAgICAgIGVjaG8gIiQkbGliZGVmIjsgXAotCSAgICAgIGlmIHRlc3QgIiQkbGliYmFzZSIgIT0gImxpYmdzdGdsIjsgdGhlbiBcCi0JICAgICAgICBmYWlsPTE7IFwKLQkgICAgICBmaTsgXAotCSAgICBmaTsgXAotCSAgZmk7IFwKLQlkb25lIDsgXAotCWlmIHRlc3QgJCRmYWlsICE9IDA7IHRoZW4gXAotCSAgZWNobyAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nOyBcCi0JICBlY2hvICdSdW4gdGhpcyB0byB1cGRhdGUgdGhlIC5kZWYgZmlsZXM6JzsgXAotCSAgZWNobyAnbWFrZSB1cGRhdGUtZXhwb3J0cyc7IFwKLQkgIGVjaG8gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJzsgXAotCWZpOyBcCi0JZXhpdCAkJGZhaWwKLQotdXBkYXRlLWV4cG9ydHM6Ci0JbWFrZSBjaGVjay1leHBvcnRzIDI+JjEgfCBwYXRjaCAtcDEKLQlpZiB0ZXN0IC1mICIkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi9saWJnc3RnbC5kZWYiOyB0aGVuIFwKLQkgIGdpdCBjaGVja291dCAiJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vbGliZ3N0Z2wuZGVmIjsgIFwKLQlmaQotCWdpdCBhZGQgJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vbGliZ3N0Ki5kZWYKLQlnaXQgZGlmZiAtLWNhY2hlZCAtLSAkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi8KLQllY2hvICdeXl4tLS0gdXBkYXRlZCBhbmQgc3RhZ2VkIGNoYW5nZXMgYWJvdmUnCi0KLSMgY29tcGxhaW4gYWJvdXQgbm9ucG9ydGFibGUgcHJpbnRmIGZvcm1hdCBzdHJpbmdzICglbGxkLCAlbGx1LCAlenUgZXRjLikKLWNoZWNrLW5vbnBvcnRhYmxlLXByaW50LWZvcm1hdDoKLQlAZmFpbD0wIDsgXAotCWxvYz1gZmluZCAiJCh0b3Bfc3JjZGlyKSIgLW5hbWUgJyouYycgfCB4YXJncyBncmVwIC1uIC1lICclWzAtOV0qbGxbdWR4XScgLWUgJyVbMC05XSp6W3VkeF0nYDsgXAotCWlmIHRlc3QgIngkJGxvYyIgIT0gIngiOyB0aGVuIFwKLQkgIGVjaG8gIlBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBwcmludCBmb3JtYXQgc3RyaW5nczoiIDsgXAotCSAgZmluZCAiJCh0b3Bfc3JjZGlyKSIgLW5hbWUgJyouYycgfCB4YXJncyBncmVwIC1uIC1lICclWzAtOV0qbGxbdWR4XScgLWUgJyVbMC05XSp6W3VkeF0nOyBcCi0JICBmYWlsPTE7IFwKLQlmaTsgXAotCWV4aXQgJCRmYWlsCi0KLWRpc3QtaG9vazogY2hlY2stZXhwb3J0cyB3aW4zMi1jaGVjay1jcmxmCi0KLXJlbGVhc2U6IGRpc3QKLQlAJChNQUtFKSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6LnNoYTI1NnN1bQotCUBlY2hvCi0JQGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0JQGVjaG8gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8kKFBBQ0tBR0UpLyQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHoiCi0JQGNhdCAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6LnNoYTI1NnN1bQotCUBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgotCUBpZiBbIC1kIH4vcmVsZWFzZXMvIF07IHRoZW4gXAotCSAgY3AgLXYgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54eiB+L3JlbGVhc2VzLzsgXAotCWZpCi0JQGlmIFsgLWQgLi4vd3d3L2RhdGEvc3JjIF07IHRoZW4gXAotCSAgbXYgLXYgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54eiAuLi93d3cvZGF0YS9zcmMvJChQQUNLQUdFKS8gOyBcCi0JICBtdiAtdiAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6LnNoYTI1NnN1bSAuLi93d3cvZGF0YS9zcmMvJChQQUNLQUdFKS8gOyBcCi0JZWxpZiBbIC1kIC4uLy4uL3d3dy9kYXRhL3NyYyBdOyB0aGVuIFwKLQkgIG12IC12ICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHogLi4vLi4vd3d3L2RhdGEvc3JjLyQoUEFDS0FHRSkvIDsgXAotCSAgbXYgLXYgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54ei5zaGEyNTZzdW0gLi4vLi4vd3d3L2RhdGEvc3JjLyQoUEFDS0FHRSkvIDsgXAotCWZpCi0JQGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0KLSMgZ2VuZXJhdGUgc2hhMjU2IHN1bSBmaWxlcwotJS5zaGEyNTZzdW06ICUKLQlAc2hhMjU2c3VtICQ8ID4gJEAKLQotIyBjaGVjayB0aGF0IG5vIG1hcnNoYWwgb3IgZW51bXR5cGVzIGZpbGVzIGFyZSBpbmNsdWRlZAotIyB0aGlzIGluIHR1cm4gZW5zdXJlcyB0aGF0IGRpc3RjaGVjayBmYWlscyBmb3IgbWlzc2luZyAubGlzdCBmaWxlcyB3aGljaCBpcyBjdXJyZW50bHkKLSMgc2hhZG93ZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyAuYyBhbmQgLmggZmlsZXMgYXJlIGluY2x1ZGVkLgotZGlzdGNoZWNrLWhvb2s6Ci0JQHRlc3QgIngiID0gInhgZmluZCAkKGRpc3RkaXIpIC1uYW1lIFwqLWVudW10eXBlcy5bY2hdIHwgZ3JlcCAtdiB3aW4zMmAiICYmIFwKLQl0ZXN0ICJ4IiA9ICJ4YGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1tYXJzaGFsLltjaF1gIiB8fCBcCi0JKCBlY2hvICIqKiogTGVmdG92ZXIgZW51bXR5cGVzIG9yIG1hcnNoYWwgZmlsZXMgaW4gdGhlIHRhcmJhbGwuIiAmJiBcCi0JICBlY2hvICIqKiogTWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIG5vdCBkaXN0ZWQ6IiAmJiBcCi0JICBmaW5kICQoZGlzdGRpcikgLW5hbWUgXCotZW51bXR5cGVzLltjaF0gfCBncmVwIC12IHdpbjMyICYmIFwKLQkgIGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1tYXJzaGFsLltjaF0gJiYgXAotCSAgZmFsc2UgKQotCi0jIHJ1bGUgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCAucG8gZmlsZXMKLWRvd25sb2FkLXBvOiAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMgJChQQUNLQUdFKQotCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQGNsZWFuLWdjb3Y6Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlmaW5kIC1uYW1lICIqLmRhIiAtbyAtbmFtZSAiKi5nY292IiB8IHhhcmdzIHJtIHx8IHRydWUKLQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUBjbGVhbi1iYmc6Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlmaW5kIC1uYW1lICIqLmJiZyIgLW8gLW5hbWUgIiouYmIiIHwgeGFyZ3Mgcm0gfHwgdHJ1ZQotCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQC5QSE9OWTogY292ZXJhZ2UtcmVwb3J0LnR4dAotCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQGNvdmVyYWdlLXJlcG9ydC50eHQ6Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlCQkdfRklMRVM9YGZpbmQgJChHQ09WX0RJUlMpIC1uYW1lICIqLmJiZyJgIDsJCQkgIFwKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACUNfRklMRVM9IDsJCQkJCQkJICBcCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlmb3IgRiBpbiAkJEJCR19GSUxFUyA7IGRvCQkJCQkgIFwKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACQlGX25vbGlicz1gZWNobyAkJEYgfCBzZWQgLWUgJ3MvLmxpYnNcLy8vZydgIDsJCSAgXAotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJCUM9YGVjaG8gJCRGX25vbGlicyB8IHNlZCAtZSAncy8uYmJnLy5jL2cnYCA7CQkgIFwKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACQlCPWBiYXNlbmFtZSAkJEYgLmJiZ2AgOwkJCQkJICBcCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkJRD1gZGlybmFtZSAkJEZgIDsJCQkJCSAgXAotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJCURBPWBlY2hvICQkRiB8IHNlZCAtZSAncy8uYmJnLy5kYS9nJ2AgOwkJCSAgXAotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJCURBX2xpYnM9YGVjaG8gJCRELy5saWJzLyQkQi8uZGFgIDsJCQkgIFwKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACQlpZiB0ZXN0IC1lICQkREEgfHwgdGVzdCAtZSAkJERBX2xpYnM7IHRoZW4JCSAgXAotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJCQlDX0ZJTEVTPSIkJENfRklMRVMgJCRDIiA7CQkJICBcCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkJZmkgOwkJCQkJCQkgIFwKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACWRvbmUgOwkJCQkJCQkJICBcCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAllY2hvICQkQ19GSUxFUyA7CQkJCQkJICBcCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkkKHRvcF9idWlsZGRpcikvdGVzdHN1aXRlL2RlY29kZS1nY292IC0tcmVwb3J0ICQkQ19GSUxFUyA+IGNvdmVyYWdlLXJlcG9ydC50eHQKLQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUBjaGVjay1jb3ZlcmFnZTogY2xlYW4tZ2NvdiBhbGwgY2hlY2sgY292ZXJhZ2UtcmVwb3J0LnR4dAotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJY2F0IGNvdmVyYWdlLXJlcG9ydC50eHQKLQotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VAY292ZXJhZ2UtcmVwb3J0LnR4dDoKLUBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQAllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKLQotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VAY2hlY2stY292ZXJhZ2U6Ci1AR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUAJZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCi0KLUBIQVZFX0NIRUNLX1RSVUVAY2hlY2stdmFsZ3JpbmQ6Ci1ASEFWRV9DSEVDS19UUlVFQAkkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIGNoZWNrLXZhbGdyaW5kCi0KLUBIQVZFX0NIRUNLX1RSVUVAY2hlY2stdG9ydHVyZToKLUBIQVZFX0NIRUNLX1RSVUVACSQoTUFLRSkgLUMgdGVzdHMvY2hlY2sgdG9ydHVyZQotCi1ASEFWRV9DSEVDS19UUlVFQGJ1aWxkLWNoZWNrczoKLUBIQVZFX0NIRUNLX1RSVUVACSQoTUFLRSkgLUMgdGVzdHMvY2hlY2sgYnVpbGQtY2hlY2tzCi1ASEFWRV9DSEVDS19GQUxTRUBjaGVjay12YWxncmluZDoKLUBIQVZFX0NIRUNLX0ZBTFNFQAllY2hvICInY2hlY2snIGxpYnJhcnkgbm90IGluc3RhbGxlZCwgc2tpcHBpbmciCi0KLUBIQVZFX0NIRUNLX0ZBTFNFQGNoZWNrLXRvcnR1cmU6Ci1ASEFWRV9DSEVDS19GQUxTRUAJZWNobyAiJ2NoZWNrJyBsaWJyYXJ5IG5vdCBpbnN0YWxsZWQsIHNraXBwaW5nIgotCi1ASEFWRV9DSEVDS19GQUxTRUBidWlsZC1jaGVja3M6Ci1ASEFWRV9DSEVDS19GQUxTRUAJZWNobyAiJ2NoZWNrJyBsaWJyYXJ5IG5vdCBpbnN0YWxsZWQsIHNraXBwaW5nIgotCi0jIEZJWE1FOiB0aGlzIHRhcmdldCBzaG91bGQgYmUgcnVuIGV2ZXJ5IHRpbWUgd2UgZG8gIm1ha2UgcmVsZWFzZSIKLSMgZmluZCBhIHdheSBvZiBhdXRvbWF0aW5nIHRoYXQKLXdpbjMyLXVwZGF0ZToKLQlmb3IgZiBpbiBnc3R2ZXJzaW9uLmggZ3N0ZW51bXR5cGVzLmMgZ3N0ZW51bXR5cGVzLmg7IGRvIFwKLQkJY3AgJCh0b3BfYnVpbGRkaXIpL2dzdC8kJGYgd2luMzIvY29tbW9uOyBkb25lCi0JJCh0b3Bfc3JjZGlyKS90b29scy9nc3QtaW5kZW50IHdpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuYwotCSQodG9wX3NyY2RpcikvdG9vbHMvZ3N0LWluZGVudCB3aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMKLQljcCAkKHRvcF9idWlsZGRpcikvd2luMzIvY29tbW9uL2NvbmZpZy5oLW5ldyBcCi0JCSQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uL2NvbmZpZy5oCi0KLWNoZWNrLWVudW0tZ2V0dHlwZXM6ICQodG9wX2J1aWxkZGlyKS9nc3QvZ3N0ZW51bXR5cGVzLmgKLQlAZWNobyAnQ2hlY2tpbmcgaWYgYWxsIGVudW0gYW5kIGZsYWcgX2dldF90eXBlKCkgZnVuY3MgYXJlIGluaXRlZCBpbiBnc3RfaW5pdCgpJzsgICAgICAgICAgICAgICAgICAgICAgICBcCi0JRlVOQ1M9YGdyZXAgJ19nZXRfdHlwZSAoJyBnc3QvZ3N0ZW51bXR5cGVzLmggfCBzZWQgLWUgJ3MvXi4qZ3N0Xy9nc3RfLycgLWUgJ3MvX2dldF90eXBlLiokJC9fZ2V0X3R5cGUvJ2A7XAotCU1JU1NJTkdfRlVOQ1M9Jyc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmb3IgZiBpbiAkJEZVTkNTOyBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICBJTklUX0xJTkU9YGdyZXAgJCRmICQodG9wX3NyY2RpcikvZ3N0LyouYyB8IGdyZXAgZ190eXBlX2NsYXNzX3JlZmA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgaWYgdGVzdCAieCQkSU5JVF9MSU5FIiA9ICJ4IjsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgTUlTU0lOR19GVU5DUz0iJCRNSVNTSU5HX0ZVTkNTICQkZiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICBmaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiB0ZXN0ICJ4JCRNSVNTSU5HX0ZVTkNTIiAhPSAieCI7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICBlY2hvICJGSVhNRTogcGxlYXNlIGFkZCB0byB0aGUgZm9sbG93aW5nIHRvIGdzdC9nc3QuYyBpbml0X3Bvc3QoKToiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZm9yIGYgaW4gJCRNSVNTSU5HX0ZVTkNTOyBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgZWNobyAiICBnX3R5cGVfY2xhc3NfcmVmICgkJGYgKCkpOyI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICBkb25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZXhpdCAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZWNobyAnQ2hlY2tpbmcgaWYgYWxsIGVudW0gYW5kIGZsYWcgX2dldF90eXBlKCkgZnVuY3MgYXJlIGRlaW5pdGVkIGluIGdzdF9kZWluaXQoKSc7ICAgICAgICAgICAgICAgICAgICAgXAotCU1JU1NJTkdfRlVOQ1M9Jyc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmb3IgZiBpbiAkJEZVTkNTOyBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICBJTklUX0xJTkU9YGdyZXAgJCRmICQodG9wX3NyY2RpcikvZ3N0LyouYyB8IGdyZXAgZ190eXBlX2NsYXNzX3VucmVmYDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgaWYgdGVzdCAieCQkSU5JVF9MSU5FIiA9ICJ4IjsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgTUlTU0lOR19GVU5DUz0iJCRNSVNTSU5HX0ZVTkNTICQkZiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICBmaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiB0ZXN0ICJ4JCRNSVNTSU5HX0ZVTkNTIiAhPSAieCI7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICBlY2hvICJGSVhNRTogcGxlYXNlIGFkZCB0byB0aGUgZm9sbG93aW5nIHRvIGdzdC9nc3QuYyBnc3RfZGVpbml0KCk6IjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZm9yIGYgaW4gJCRNSVNTSU5HX0ZVTkNTOyBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgZWNobyAiICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrICgkJGYgKCkpKTsiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICBkb25lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgZXhpdCAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmaQotLlBIT05ZOiBsY292LXJlc2V0IGxjb3YgbGNvdi1ydW4gbGNvdi1yZXBvcnQgbGNvdi11cGxvYWQgbGNvdi1jbGVhbgotCi0jIHJ1biBsY292IGZyb20gc2NyYXRjaCwgYWx3YXlzCi1sY292LXJlc2V0OgotCSQoTUFLRSkgbGNvdi1ydW4KLQkkKE1BS0UpIGxjb3YtcmVwb3J0Ci0KLSMgcnVuIGxjb3YgZnJvbSBzY3JhdGNoIGlmIHRoZSBkaXIgaXMgbm90IHRoZXJlCi1sY292OgotCSQoTUFLRSkgbGNvdi1yZXNldAotCi0jIHJlc2V0IGxjb3Ygc3RhdHMKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVAbGNvdi1jbGVhbjoKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACUAtcm0gLXJmIGxjb3YKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACWxjb3YgLS1kaXJlY3RvcnkgLiAtLXplcm9jb3VudGVycwotCi0jIHJlc2V0IHJ1biBjb3ZlcmFnZSB0ZXN0cwotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUBsY292LXJ1bjoKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACS0kKE1BS0UpIGxjb3YtY2xlYW4KLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACS1pZiB0ZXN0IC1kIHRlc3RzL2NoZWNrOyB0aGVuICQoTUFLRSkgLUMgdGVzdHMvY2hlY2sgaW5zcGVjdDsgZmkKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACS0kKE1BS0UpIGNoZWNrCi0KLSMgZ2VuZXJhdGUgcmVwb3J0IGJhc2VkIG9uIGN1cnJlbnQgY292ZXJhZ2UgZGF0YQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUBsY292LXJlcG9ydDoKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACW1rZGlyIGxjb3YKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACWxjb3YgLS1jb21wYXQtbGlidG9vbCAtLWRpcmVjdG9yeSAuIC0tY2FwdHVyZSAtLW91dHB1dC1maWxlIGxjb3YvbGNvdi5pbmZvCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlsY292IC0tbGlzdC1mdWxsLXBhdGggLWwgbGNvdi9sY292LmluZm8gfCBncmVwIC12ICJgY2QgJCh0b3Bfc3JjZGlyKSAmJiBwd2RgIiB8IGN1dCAtZFx8IC1mMSA+IGxjb3YvcmVtb3ZlCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlsY292IC0tbGlzdC1mdWxsLXBhdGggLWwgbGNvdi9sY292LmluZm8gfCBncmVwICJ0ZXN0cy9jaGVjay8iIHwgY3V0IC1kXHwgLWYxID4+IGxjb3YvcmVtb3ZlCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlsY292IC0tbGlzdC1mdWxsLXBhdGggLWwgbGNvdi9sY292LmluZm8gfCBncmVwICJkb2NzL3BsdWdpbnMvIiB8IGN1dCAtZFx8IC1mMSA+PiBsY292L3JlbW92ZQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbGNvdiAtciBsY292L2xjb3YuaW5mbyBgY2F0IGxjb3YvcmVtb3ZlYCA+IGxjb3YvbGNvdi5jbGVhbmVkLmluZm8KLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACXJtIGxjb3YvcmVtb3ZlCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAltdiBsY292L2xjb3YuY2xlYW5lZC5pbmZvIGxjb3YvbGNvdi5pbmZvCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlnZW5odG1sIC10ICIkKFBBQ0tBR0VfU1RSSU5HKSIgLW8gbGNvdiAtLW51bS1zcGFjZXMgMiBsY292L2xjb3YuaW5mbwotCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQGxjb3YtdXBsb2FkOiBsY292Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlyc3luYyAtcnZ6IC1lIHNzaCAtLWRlbGV0ZSBsY292LyogZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZzovc3J2L2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvd3d3L2RhdGEvY292ZXJhZ2UvbGNvdi8kKFBBQ0tBR0UpCi0KLUBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQGxjb3YtcnVuOgotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VACWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgotCi1AR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUBsY292LXJlcG9ydDoKLUBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQAllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKLQotY2hlY2s6ICQoQ0hFQ0tfRVhQT1JUUykgY2hlY2stZW51bS1nZXR0eXBlcwotCi1nc3QtZWxlbWVudC1jaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5tNDogZ3N0LWVsZW1lbnQtY2hlY2subTQKLQkkKEFNX1ZfR0VOKWNwICQoc3JjZGlyKS9nc3QtZWxlbWVudC1jaGVjay5tNCBnc3QtZWxlbWVudC1jaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5tNAotCi1jaGVjay1jcnVmdDoKLQlAY3J1ZnRfZmlsZXM9IiI7IGNydWZ0X2RpcnM9IiI7IFwKLQlmb3IgZiBpbiAkKENSVUZUX0ZJTEVTKTsgZG8gXAotCSAgaWYgdGVzdCAtZSAkJGY7IHRoZW4gXAotCSAgICBjcnVmdF9maWxlcz0iJCRjcnVmdF9maWxlcyAkJGYiOyBcCi0JICBmaSBcCi0JZG9uZTsgXAotCWZvciBkIGluICQoQ1JVRlRfRElSUyk7IGRvIFwKLQkgIGlmIHRlc3QgLWUgJCRkOyB0aGVuIFwKLQkgICAgY3J1ZnRfZGlycz0iJCRjcnVmdF9kaXJzICQkZCI7IFwKLQkgIGZpIFwKLQlkb25lOyBcCi0JaWYgdGVzdCAieCQkY3J1ZnRfZmlsZXMkJGNydWZ0X2RpcnMiICE9IHg7IHRoZW4gXAotCSAgZWNobzsgXAotCSAgZWNobyAiKioqKiBDUlVGVCBBTEVSVCAqKioqKiI7IFwKLQkgIGVjaG87IFwKLQkgIGVjaG8gIlRoZSBmb2xsb3dpbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG1heSBub3QgYmUgbmVlZGVkIGFueSAiOyBcCi0JICBlY2hvICJsb25nZXIgKHVzdWFsbHkgYmVjYXVzZSBhIHBsdWdpbiBoYXMgYmVlbiBtZXJnZWQgaW50byAgICAgIjsgXAotCSAgZWNobyAiYW5vdGhlciBwbHVnaW4sIG1vdmVkIHRvIGEgZGlmZmVyZW50IG1vZHVsZSwgb3IgYmVlbiAgICAgICI7IFwKLQkgIGVjaG8gInJlbmFtZWQpLCBhbmQgeW91IHByb2JhYmx5IHdhbnQgdG8gY2xlYW4gdGhlbSB1cCBpZiB5b3UgICAiOyBcCi0JICBlY2hvICJkb24ndCBoYXZlIGxvY2FsIGNoYW5nZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsgXAotCSAgZWNobzsgXAotCSAgZm9yIGYgaW4gJCRjcnVmdF9maWxlczsgZG8gZWNobyAiZmlsZSAkJGYiOyBkb25lOyBcCi0JICBlY2hvOyBcCi0JICBmb3IgZCBpbiAkJGNydWZ0X2RpcnM7IGRvIGVjaG8gImRpcmVjdG9yeSAkJGQiOyBkb25lOyBcCi0JICBlY2hvOyBcCi0JICBlY2hvICInbWFrZSBjbGVhbi1jcnVmdCcgd2lsbCByZW1vdmUgdGhlc2UgZm9yIHlvdS4iOyBcCi0JICBlY2hvOyBcCi0JZmkKLQotY2xlYW4tY3J1ZnQtZGlyczoKLQlAZm9yIGQgaW4gJChDUlVGVF9ESVJTKTsgZG8gXAotCSAgaWYgdGVzdCAtZSAkJGQ7IHRoZW4gXAotCSAgICBybSAtciAiJCRkIiAmJiBlY2hvICJSZW1vdmVkIGRpcmVjdG9yeSAkJGQiOyBcCi0JICBmaSBcCi0JZG9uZQotCi1jbGVhbi1jcnVmdC1maWxlczoKLQlAZm9yIGYgaW4gJChDUlVGVF9GSUxFUyk7IGRvIFwKLQkgIGlmIHRlc3QgLWUgJCRmOyB0aGVuIFwKLQkgICAgcm0gIiQkZiIgJiYgZWNobyAiUmVtb3ZlZCBmaWxlICQkZiI7IFwKLQkgIGZpIFwKLQlkb25lCi0KLWNsZWFuLWNydWZ0OiBjbGVhbi1jcnVmdC1kaXJzIGNsZWFuLWNydWZ0LWZpbGVzCi0KLSMgYWxzbyBtaWdodCB3YW50IHRvIGFkZCB0aGlzIHRvIHlvdXIgTWFrZWZpbGUuYW06Ci0jCi0jIGFsbC1sb2NhbDogY2hlY2stY3J1ZnQKLQotYWxsLWxvY2FsOiBnc3QtZWxlbWVudC1jaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5tNCBjaGVjay1jcnVmdAotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9ORVdTIGIvTkVXUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIwNDQyNC4uMDAwMDAwMAotLS0gYS9ORVdTCisrKyAvZGV2L251bGwKQEAgLTEsMTIxNiArMCwwIEBACi0jIEdTdHJlYW1lciAxLjEwIFJlbGVhc2UgTm90ZXMKLQotR1N0cmVhbWVyIDEuMTAuMCB3YXMgb3JpZ2luYWxseSByZWxlYXNlZCBvbiAxc3QgTm92ZW1iZXIgMjAxNi4KLVRoZSBsYXRlc3QgYnVnLWZpeCByZWxlYXNlIGluIHRoZSAxLjEwIHNlcmllcyBpcyBbMS4xMC40XSgjMS4xMC40KSBhbmQgd2FzCi1yZWxlYXNlZCBvbiAyMyBGZWJydWFyeSAyMDE3LgotCi1UaGUgR1N0cmVhbWVyIHRlYW0gaXMgcHJvdWQgdG8gYW5ub3VuY2UgYSBuZXcgbWFqb3IgZmVhdHVyZSByZWxlYXNlIGluIHRoZQotc3RhYmxlIDEueCBBUEkgc2VyaWVzIG9mIHlvdXIgZmF2b3VyaXRlIGNyb3NzLXBsYXRmb3JtIG11bHRpbWVkaWEgZnJhbWV3b3JrIQotCi1BcyBhbHdheXMsIHRoaXMgcmVsZWFzZSBpcyBhZ2FpbiBwYWNrZWQgd2l0aCBuZXcgZmVhdHVyZXMsIGJ1ZyBmaXhlcyBhbmQgb3RoZXIKLWltcHJvdmVtZW50cy4KLQotU2VlIFtodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvMS4xMC9dW2xhdGVzdF0gZm9yIHRoZSBsYXRlc3QKLXZlcnNpb24gb2YgdGhpcyBkb2N1bWVudC4KLQotKkxhc3QgdXBkYXRlZDogVGh1cnNkYXkgMjMgRmViIDIwMTcsIDE1OjAwIFVUQyBbKGxvZyldW2dpdGxvZ10qCi0KLVtsYXRlc3RdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvMS4xMC8KLVtnaXRsb2ddOiBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci93d3cvbG9nL3NyYy9odGRvY3MvcmVsZWFzZXMvMS4xMC9yZWxlYXNlLW5vdGVzLTEuMTAubWQKLQotIyMgSW50cm9kdWN0aW9uCi0KLVRoZSBHU3RyZWFtZXIgdGVhbSBpcyBwcm91ZCB0byBhbm5vdW5jZSBhIG5ldyBtYWpvciBmZWF0dXJlIHJlbGVhc2UgaW4gdGhlCi1zdGFibGUgMS54IEFQSSBzZXJpZXMgb2YgeW91ciBmYXZvdXJpdGUgY3Jvc3MtcGxhdGZvcm0gbXVsdGltZWRpYSBmcmFtZXdvcmshCi0KLUFzIGFsd2F5cywgdGhpcyByZWxlYXNlIGlzIGFnYWluIHBhY2tlZCB3aXRoIG5ldyBmZWF0dXJlcywgYnVnIGZpeGVzIGFuZCBvdGhlcgotaW1wcm92ZW1lbnRzLgotCi0jIyBIaWdobGlnaHRzCi0KLS0gU2V2ZXJhbCBjb252ZW5pZW5jZSBBUElzIGhhdmUgYmVlbiBhZGRlZCB0byBtYWtlIGRldmVsb3BlcnMnIGxpdmVzIGVhc2llcgotLSBBIG5ldyBgR3N0U3RyZWFtYCBBUEkgcHJvdmlkZXMgYXBwbGljYXRpb25zIGEgbW9yZSBtZWFuaW5nZnVsIHZpZXcgb2YgdGhlCi0gIHN0cnVjdHVyZSBvZiBzdHJlYW1zLCBzaW1wbGlmeWluZyB0aGUgcHJvY2VzcyBvZiBkZWFsaW5nIHdpdGggbWVkaWEgaW4KLSAgY29tcGxleCBjb250YWluZXIgZm9ybWF0cwotLSBFeHBlcmltZW50YWwgYGRlY29kZWJpbjNgIGFuZCBgcGxheWJpbjNgIGVsZW1lbnRzIHdoaWNoIGJyaW5nIGEgbnVtYmVyIG9mCi0gIGltcHJvdmVtZW50cyB3aGljaCB3ZXJlIGhhcmQgdG8gaW1wbGVtZW50IHdpdGhpbiBgZGVjb2RlYmluYCBhbmQgYHBsYXliaW5gCi0tIEEgbmV3IGBwYXJzZWJpbmAgZWxlbWVudCB0byBhdXRvbWF0aWNhbGx5IHVucGFjayBhbmQgcGFyc2UgYSBzdHJlYW0sIHN0b3BwaW5nCi0gIGp1c3Qgc2hvcnQgb2YgZGVjb2RpbmcKLS0gRXhwZXJpbWVudGFsIG5ldyBgbWVzb25gLWJhc2VkIGJ1aWxkIHN5c3RlbSwgYnJpbmdpbmcgZmFzdGVyIGJ1aWxkIGFuZCBtdWNoCi0gIGJldHRlciBXaW5kb3dzIHN1cHBvcnQgKGluY2x1ZGluZyBmb3IgYnVpbGRpbmcgd2l0aCBWaXN1YWwgU3R1ZGlvKQotLSBBIG5ldyBgZ3N0LWRvY3NgIG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkLCBhbmQgd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIG1vdmluZwotICBvdXIgZG9jdW1lbnRhdGlvbiB0byBhIG1hcmtkb3duLWJhc2VkIGZvcm1hdCBmb3IgZWFzaWVyIG1haW50ZW5hbmNlIGFuZAotICB1cGRhdGVzCi0tIEEgbmV3IGBnc3QtZXhhbXBsZXNgIG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkLCB3aGljaCBjb250YWlucyBleGFtcGxlCi0gIEdTdHJlYW1lciBhcHBsaWNhdGlvbnMgYW5kIGlzIGV4cGVjdGVkIHRvIGdyb3cgd2l0aCBtYW55IG1vcmUgZXhhbXBsZXMgaW4KLSAgdGhlIGZ1dHVyZQotLSBWYXJpb3VzIE9wZW5HTCBhbmQgT3BlbkdMfEVTLXJlbGF0ZWQgZml4ZXMgYW5kIGltcHJvdmVtZW50cyBmb3IgZ3JlYXRlcgotICBlZmZpY2llbmN5IG9uIGRlc2t0b3AgYW5kIG1vYmlsZSBwbGF0Zm9ybXMsIGFuZCBWdWxrYW4gc3VwcG9ydCBvbiBXYXlsYW5kIHdhcwotICBhbHNvIGFkZGVkCi0tIEV4dGVuc2l2ZSBpbXByb3ZlbWVudHMgdG8gdGhlIFZBQVBJIHBsdWdpbnMgZm9yIGltcHJvdmVkIHJvYnVzdG5lc3MgYW5kCi0gIGVmZmljaWVuY3kKLS0gTG90cyBvZiBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIGFjcm9zcyB0aGUgYm9hcmQsIHNwYW5uaW5nIFJUUC9SVFNQLCBWNEwyLAotICBCbHVldG9vdGgsIGF1ZGlvIGNvbnZlcnNpb24sIGVjaG8gY2FuY2VsbGF0aW9uLCBhbmQgbW9yZSEKLQotIyMgTWFqb3IgbmV3IGZlYXR1cmVzIGFuZCBjaGFuZ2VzCi0KLSMjIyBOb3Rld29ydGh5IG5ldyBBUEksIGZlYXR1cmVzIGFuZCBvdGhlciBjaGFuZ2VzCi0KLSMjIyMgQ29yZSBBUEkgYWRkaXRpb25zCi0KLSMjIyMjIFJlY2VpdmUgcHJvcGVydHkgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdmlhIGJ1cyBtZXNzYWdlcwotCi1OZXcgQVBJIHdhcyBhZGRlZCB0byByZWNlaXZlIGVsZW1lbnQgcHJvcGVydHkgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdmlhCi1idXMgbWVzc2FnZXMuIFNvIGZhciwgYXBwbGljYXRpb25zIGhhZCB0byBjb25uZWN0IGEgY2FsbGJhY2sgdG8gYW4gZWxlbWVudCdzCi1gbm90aWZ5Ojpwcm9wZXJ0eS1uYW1lYCBzaWduYWwgdmlhIHRoZSBHT2JqZWN0IEFQSSwgd2hpY2ggd2FzIGluY29udmVuaWVudCBmb3IKLWF0IGxlYXN0IHR3byByZWFzb25zOiBvbmUgaGFkIHRvIGltcGxlbWVudCBhIHNpZ25hbCBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIHRoYXQKLWNhbGxiYWNrIGZ1bmN0aW9uIHdvdWxkIHVzdWFsbHkgYmUgY2FsbGVkIGZyb20gb25lIG9mIHRoZSBzdHJlYW1pbmcgdGhyZWFkcywgc28KLW9uZSBoYWQgdG8gbWFyc2hhbCAoc2VuZCkgYW55IGluZm9ybWF0aW9uIGdhdGhlcmVkIG9yIHBlbmRpbmcgcmVxdWVzdHMgdG8gdGhlCi1tYWluIGFwcGxpY2F0aW9uIHRocmVhZCB3aGljaCB3YXMgdGVkaW91cyBhbmQgZXJyb3ItcHJvbmUuCi0KLUVudGVyIFtgZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaCgpYF1bbm90aWZ5LXdhdGNoXSBhbmQKLVtgZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNoKClgXVtkZWVwLW5vdGlmeS13YXRjaF0gd2hpY2ggd2lsbAotd2F0Y2ggZm9yIGNoYW5nZXMgb2YgYSBwcm9wZXJ0eSBvbiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQsIGVpdGhlciBvbmx5IGZvciB0aGlzCi1lbGVtZW50IG9yIHJlY3Vyc2l2ZWx5IGZvciBhIHdob2xlIGJpbiBvciBwaXBlbGluZS4gV2hlbmV2ZXIgc3VjaCBhCi1wcm9wZXJ0eSBjaGFuZ2UgaGFwcGVucywgYSBgR1NUX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZYCBtZXNzYWdlIHdpbGwgYmUgcG9zdGVkCi1vbiB0aGUgcGlwZWxpbmUgYnVzIHdpdGggZGV0YWlscyBvZiB0aGUgZWxlbWVudCwgdGhlIHByb3BlcnR5IGFuZCB0aGUgbmV3Ci1wcm9wZXJ0eSB2YWx1ZSwgYWxsIG9mIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgbGF0ZXIgZnJvbSB0aGUgbWVzc2FnZSBpbiB0aGUKLWFwcGxpY2F0aW9uIHZpYSBbYGdzdF9tZXNzYWdlX3BhcnNlX3Byb3BlcnR5X25vdGlmeSgpYF1bcGFyc2Utbm90aWZ5XS4gVW5saWtlCi10aGUgR3N0QnVzIHdhdGNoIGZ1bmN0aW9ucywgdGhpcyBBUEkgZG9lcyBub3QgcmVseSBvbiBhIHJ1bm5pbmcgR0xpYiBtYWluIGxvb3AuCi0KLVRoZSBhYm92ZSBjYW4gYmUgdXNlZCB0byBiZSBub3RpZmllZCBhc3luY2hyb25vdXNseSBvZiBjYXBzIGNoYW5nZXMgaW4gdGhlCi1waXBlbGluZSwgb3Igdm9sdW1lIGNoYW5nZXMgb24gYW4gYXVkaW8gc2luayBlbGVtZW50LCBmb3IgZXhhbXBsZS4KLQotW25vdGlmeS13YXRjaF06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWRkLXByb3BlcnR5LW5vdGlmeS13YXRjaAotW2RlZXAtbm90aWZ5LXdhdGNoXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcHJvcGVydHktZGVlcC1ub3RpZnktd2F0Y2gKLVtwYXJzZS1ub3RpZnldOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXByb3BlcnR5LW5vdGlmeQotCi0jIyMjIyBHc3RCaW4gImRlZXAiIGVsZW1lbnQtYWRkZWQgYW5kIGVsZW1lbnQtcmVtb3ZlZCBzaWduYWxzCi0KLUdzdEJpbiBoYXMgZ2FpbmVkIGAiZGVlcC1lbGVtZW50LWFkZGVkImAgYW5kIGAiZGVlcC1lbGVtZW50LXJlbW92ZWQiYCBzaWduYWxzCi13aGljaCBtYWtlcyBpdCBlYXNpZXIgZm9yIGFwcGxpY2F0aW9ucyBhbmQgaGlnaGVyLWxldmVsIHBsdWdpbnMgdG8gdHJhY2sgd2hlbgotZWxlbWVudHMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBhIGNvbXBsZXggcGlwZWxpbmUgd2l0aCBtdWx0aXBsZSBzdWItYmlucy4KLQotYHBsYXliaW5gIG1ha2VzIHVzZSBvZiB0aGlzIHRvIGltcGxlbWVudCB0aGUgbmV3IGAiZWxlbWVudC1zZXR1cCJgIHNpZ25hbCB3aGljaAotY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGVsZW1lbnRzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIGBwbGF5YmluYCwganVzdCBsaWtlIHRoZQotZXhpc3RpbmcgYCJzb3VyY2Utc2V0dXAiYCBzaWduYWwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBzb3VyY2UKLWVsZW1lbnQgY3JlYXRlZC4KLQotIyMjIyMgRXJyb3IgbWVzc2FnZXMgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBzdHJ1Y3R1cmVkIGRldGFpbHMKLQotSXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIHByb3ZpZGUgYWRkaXRpb25hbCwgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbiBlcnJvciwKLXdhcm5pbmcgb3IgaW5mbyBtZXNzYWdlcyBmb3IgYXBwbGljYXRpb25zIChvciBoaWdoZXItbGV2ZWwgZWxlbWVudHMpIHRvIG1ha2UKLWludGVsbGlnZW50IGRlY2lzaW9ucyBiYXNlZCBvbiB0aGVtLiBUbyBhbGxvdyB0aGlzLCBlcnJvciwgd2FybmluZyBhbmQgaW5mbwotbWVzc2FnZXMgbm93IGhhdmUgQVBJIGZvciBhZGRpbmcgYXJiaXRyYXJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gdGhlbQotdXNpbmcgYSBgR3N0U3RydWN0dXJlYDoKLVtgR1NUX0VMRU1FTlRfRVJST1JfV0lUSF9ERVRBSUxTYF1bZWxlbWVudC1lcnJvci13aXRoLWRldGFpbHNdIGFuZAotY29ycmVzcG9uZGluZyBBUEkgZm9yIHRoZSBvdGhlciBtZXNzYWdlIHR5cGVzLgotCi1UaGlzIGlzIG5vdyB1c2VkIGUuZy4gYnkgdGhlIG5ldyBbYEdTVF9FTEVNRU5UX0ZMT1dfRVJST1JgXVtlbGVtZW50LWZsb3ctZXJyb3JdCi1BUEkgdG8gaW5jbHVkZSB0aGUgYWN0dWFsIGZsb3cgZXJyb3IgaW4gdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCB0aGUKLVtzb3VwaHR0cHNyYyBlbGVtZW50XVtzb3VwaHR0cHNyYy1kZXRhaWxlZC1lcnJvcnNdIHRvIHByb3ZpZGUgdGhlIEhUVFAKLXN0YXR1cyBjb2RlLCBhbmQgdGhlIFVSTCAoaWYgYW55KSB0byB3aGljaCBhIHJlZGlyZWN0aW9uIGhhcyBoYXBwZW5lZC4KLQotW2VsZW1lbnQtZXJyb3Itd2l0aC1kZXRhaWxzXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1FUlJPUi1XSVRILURFVEFJTFM6Q0FQUwotW2VsZW1lbnQtZmxvdy1lcnJvcl06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRkxPVy1FUlJPUjpDQVBTCi1bc291cGh0dHBzcmMtZGV0YWlsZWQtZXJyb3JzXTogaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtZ29vZC90cmVlL2V4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM/aWQ9NjBkMzBkYjkxMmExYWVkZDc0M2U2NmI5ZGNkMmUyMWQ3MWZiYjI0ZiNuMTMxOAotCi0jIyMjIyBSZWRpcmVjdCBtZXNzYWdlcyBoYXZlIG9mZmljaWFsIEFQSSBub3cKLQotU29tZXRpbWVzLCBlbGVtZW50cyBuZWVkIHRvIHJlZGlyZWN0IHRoZSBjdXJyZW50IHN0cmVhbSBVUkwgYW5kIHRlbGwgdGhlCi1hcHBsaWNhdGlvbiB0byBwcm9jZWVkIHdpdGggdGhpcyBuZXcgVVJMLCBwb3NzaWJseSB1c2luZyBhIGRpZmZlcmVudAotcHJvdG9jb2wgdG9vICh0aHVzIGNoYW5naW5nIHRoZSBwaXBlbGluZSBjb25maWd1cmF0aW9uKS4gVW50aWwgbm93LCB0aGlzIHdhcwotaW5mb3JtYWxseSBpbXBsZW1lbnRlZCB1c2luZyBgRUxFTUVOVGAgbWVzc2FnZXMgb24gdGhlIGJ1cy4KLQotTm93IHRoaXMgaGFzIGJlZW4gZm9ybWFsaXplZCBpbiB0aGUgZm9ybSBvZiBhIG5ldyBgR1NUX01FU1NBR0VfUkVESVJFQ1RgIG1lc3NhZ2UuCi1BIG5ldyByZWRpcmVjdCBtZXNzYWdlIGNhbiBiZSBjcmVhdGVkIHVzaW5nIFtgZ3N0X21lc3NhZ2VfbmV3X3JlZGlyZWN0KClgXVtuZXctcmVkaXJlY3RdLgotSWYgbmVlZGVkLCBtdWx0aXBsZSByZWRpcmVjdCBsb2NhdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBjYWxsaW5nCi1bYGdzdF9tZXNzYWdlX2FkZF9yZWRpcmVjdF9lbnRyeSgpYF1bYWRkLXJlZGlyZWN0XSB0byBhZGQgZnVydGhlciByZWRpcmVjdAotZW50cmllcywgYWxsIHdpdGggbWV0YWRhdGEsIHNvIHRoZSBhcHBsaWNhdGlvbiBjYW4gZGVjaWRlIHdoaWNoIGlzCi1tb3N0IHN1aXRhYmxlIChlLmcuIGRlcGVuZGluZyBvbiB0aGUgYml0cmF0ZSB0YWdzKS4KLQotW25ldy1yZWRpcmVjdF06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXJlZGlyZWN0Ci1bYWRkLXJlZGlyZWN0XTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1hZGQtcmVkaXJlY3QtZW50cnkKLQotIyMjIyMgTmV3IHBhZCBsaW5raW5nIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGF1dG9tYXRpY2FsbHkgY3JlYXRlIGdob3N0IHBhZHMKLQotTmV3IHBhZCBsaW5raW5nIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkOgotW2Bnc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcoKWBdW3BhZC1tYXliZS1naG9zdF0gYW5kCi1bYGdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZ19mdWxsKClgXVtwYWQtbWF5YmUtZ2hvc3QtZnVsbF0gd2hpY2ggd2VyZQotcHJldmlvdXNseSBpbnRlcm5hbCB0byBHU3RyZWFtZXIgaGF2ZSBub3cgYmVlbiBleHBvc2VkIGZvciBnZW5lcmFsIHVzZS4KLQotVGhlIGV4aXN0aW5nIHBhZCBsaW5rIGZ1bmN0aW9ucyB3aWxsIHJlZnVzZSB0byBsaW5rIHBhZHMgb3IgZWxlbWVudHMgYXQKLWRpZmZlcmVudCBsZXZlbHMgaW4gdGhlIHBpcGVsaW5lIGhpZXJhcmNoeSwgcmVxdWlyaW5nIHRoZSBkZXZlbG9wZXIgdG8KLWNyZWF0ZSBnaG9zdCBwYWRzIHdoZXJlIG5lY2Vzc2FyeS4gVGhlc2UgbmV3IHV0aWxpdHkgZnVuY3Rpb25zIHdpbGwKLWF1dG9tYXRpY2FsbHkgY3JlYXRlIGdob3N0cGFkcyBhcyBuZWVkZWQgd2hlbiBsaW5raW5nIHBhZHMgYXQgZGlmZmVyZW50Ci1sZXZlbHMgb2YgdGhlIGhpZXJhcmNoeSAoZS5nLiBmcm9tIGFuIGVsZW1lbnQgaW5zaWRlIGEgYmluIHRvIG9uZSB0aGF0J3MgYXQKLXRoZSBzYW1lIGxldmVsIGluIHRoZSBoaWVyYXJjaHkgYXMgdGhlIGJpbiwgb3IgaW4gYW5vdGhlciBiaW4pLgotCi1bcGFkLW1heWJlLWdob3N0XTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdFBhZC5odG1sI2dzdC1wYWQtbGluay1tYXliZS1naG9zdGluZwotW3BhZC1tYXliZS1naG9zdC1mdWxsXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdFBhZC5odG1sI2dzdC1wYWQtbGluay1tYXliZS1naG9zdGluZy1mdWxsCi0KLSMjIyMjIE1pc2NlbGxhbmVvdXMKLQotUGFkIHByb2JlczogSURMRSBhbmQgQkxPQ0sgcHJvYmVzIG5vdyB3b3JrIHNsaWdodGx5IGRpZmZlcmVudGx5IGluIHB1bGwgbW9kZSwKLXNvIHRoYXQgcHVzaCBhbmQgcHVsbCBtb2RlIGhhdmUgb3Bwb3NpdGUgc2NlbmFyaW9zIGZvciBpZGxlIGFuZCBibG9ja2luZyBwcm9iZXMuCi1JbiBwdXNoIG1vZGUsIGl0IHdpbGwgYmxvY2sgd2l0aCBzb21lIGRhdGEgdHlwZSBhbmQgSURMRSB3b24ndCBoYXZlIGFueSBkYXRhLgotSW4gcHVsbCBtb2RlLCBpdCB3aWxsIGJsb2NrIF9iZWZvcmVfIGdldHRpbmcgYSBidWZmZXIgYW5kIHdpbGwgYmUgSURMRSBvbmNlIHNvbWUKLWRhdGEgaGFzIGJlZW4gb2J0YWluZWQuIChbY29tbWl0XVtjb21taXQtcGFkLXByb2Jlc10sIFtidWddW2J1Zy1wYWQtcHJvYmVzXSkKLQotW2NvbW1pdC1wYWQtcHJvYmVzXTogaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyL2NvbW1pdC9nc3QvZ3N0cGFkLmM/aWQ9MzY4ZWU4YTMzNmQwYzg2OGQ4MWZkYWNlNTRiMjQ0MzFhOGI0OGNiZgotW2J1Zy1wYWQtcHJvYmVzXTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTIxMQotCi1bYGdzdF9wYXJzZV9sYXVuY2hfZnVsbCgpYF1bcGFyc2UtbGF1bmNoLWZ1bGxdIGNhbiBub3cgYmUgbWFkZSB0byByZXR1cm4gYQotYEdzdEJpbmAgaW5zdGVhZCBvZiBhIHRvcC1sZXZlbCBwaXBlbGluZSBieSBwYXNzaW5nIHRoZSBuZXcKLWBHU1RfUEFSU0VfRkxBR19QTEFDRV9JTl9CSU5gIGZsYWcuCi0KLVtwYXJzZS1sYXVuY2gtZnVsbF06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNoLWZ1bGwKLQotVGhlIGRlZmF1bHQgR1N0cmVhbWVyIGRlYnVnIGxvZyBoYW5kbGVyIGNhbiBub3cgYmUgcmVtb3ZlZCBiZWZvcmUKLWNhbGxpbmcgYGdzdF9pbml0KClgLCBzbyB0aGF0IGl0IHdpbGwgbmV2ZXIgZ2V0IGluc3RhbGxlZCBhbmQgd29uJ3QgYmUgYWN0aXZlCi1kdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0KLUEgbmV3IFtgU1RSRUFNX0dST1VQX0RPTkVgIGV2ZW50XVtzdHJlYW0tZ3JvdXAtZG9uZS1ldmVudF0gd2FzIGFkZGVkLiBJbiBzb21lCi13YXlzIGl0IHdvcmtzIHNpbWlsYXIgdG8gdGhlIGBFT1NgIGV2ZW50IGluIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gdW5ibG9jawotZG93bnN0cmVhbSBlbGVtZW50cyB3aGljaCBtYXkgYmUgd2FpdGluZyBmb3IgZnVydGhlciBkYXRhLCBzdWNoIGFzIGZvciBleGFtcGxlCi1gaW5wdXQtc2VsZWN0b3JgLiBVbmxpa2UgYEVPU2AsIGZ1cnRoZXIgZGF0YSBmbG93IG1heSBoYXBwZW4gYWZ0ZXIgdGhlCi1gU1RSRUFNX0dST1VQX0RPTkVgIGV2ZW50IHRob3VnaCAoYW5kIHdpdGhvdXQgdGhlIG5lZWQgdG8gZmx1c2ggdGhlIHBpcGVsaW5lKS4KLVRoaXMgaXMgdXNlZCB0byB1bmJsb2NrIGlucHV0LXNlbGVjdG9yIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gc3RyZWFtcyBpbgotYWRhcHRpdmUgc3RyZWFtaW5nIHNjZW5hcmlvcyAoZS5nLiBITFMpLgotCi1bc3RyZWFtLWdyb3VwLWRvbmUtZXZlbnRdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0cmVhbS1ncm91cC1kb25lCi0KLVRoZSBgZ3N0LWxhdW5jaC0xLjBgIGNvbW1hbmQgbGluZSB0b29sIHdpbGwgbm93IHByaW50IHVuZXNjYXBlZCBjYXBzIGluIHZlcmJvc2UKLW1vZGUgKGVuYWJsZWQgYnkgdGhlIC12IHN3aXRjaCkuCi0KLVtgZ3N0X2VsZW1lbnRfY2FsbF9hc3luYygpYF1bY2FsbC1hc3luY10gaGFzIGJlZW4gYWRkZWQgYXMgY29udmVuaWVuY2UgQVBJIGZvcgotcGx1Z2luIGRldmVsb3BlcnMuIEl0IGlzIHVzZWZ1bCBmb3Igb25lLXNob3Qgb3BlcmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZG9uZQotZnJvbSBhIHRocmVhZCBvdGhlciB0aGFuIHRoZSBjdXJyZW50IHN0cmVhbWluZyB0aHJlYWQuIEl0IGlzIGJhY2tlZCBieSBhCi10aHJlYWQtcG9vbCB0aGF0IGlzIHNoYXJlZCBieSBhbGwgZWxlbWVudHMuCi0KLVtjYWxsLWFzeW5jXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jYWxsLWFzeW5jCi0KLVZhcmlvdXMgcmFjZSBjb25kaXRpb25zIGhhdmUgYmVlbiBmaXhlZCBhcm91bmQgdGhlIGBHc3RQb2xsYCBBUEkgdXNlZCBieSBlLmcuCi1gR3N0QnVzYCBhbmQgYEdzdEJ1ZmZlclBvb2xgLiBTb21lIG9mIHRoZXNlIG1hbmlmZXN0ZWQgdGhlbXNlbHZlcyBwcmltYXJpbHkKLW9uIFdpbmRvd3MuCi0KLWBHc3RBZGFwdGVyYCBjYW4gbm93IGtlZXAgdHJhY2sgb2YgZGlzY29udGludWl0aWVzIHNpZ25hbGxlZCB2aWEgdGhlIGBESVNDT05UYAotYnVmZmVyIGZsYWcsIGFuZCBoYXMgZ2FpbmVkIFtuZXcgQVBJXVtuZXctYWRhcHRlci1hcGldIHRvIHRyYWNrIFBUUywgRFRTIGFuZAotb2Zmc2V0IGF0IHRoZSBsYXN0IGRpc2NvbnQuIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnaW5zIGltcGxlbWVudGluZyBhZHZhbmNlZAotdHJpY2sgbW9kZSBzY2VuYXJpb3MuCi0KLVtuZXctYWRhcHRlci1hcGldOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLWxpYnMvaHRtbC9Hc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHRzLWF0LWRpc2NvbnQKLQotYEdzdFRlc3RDbG9ja2AgZ2FpbmVkIGEgbmV3IFtgImNsb2NrLXR5cGUiYCBwcm9wZXJ0eV1bY2xvY2stdHlwZS1wcm9wXS4KLQotW2Nsb2NrLXR5cGUtcHJvcF06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItbGlicy9odG1sL0dzdFRlc3RDbG9jay5odG1sI0dzdFRlc3RDbG9jay0tY2xvY2stdHlwZQotCi0jIyMjIEdzdFN0cmVhbSBBUEkgZm9yIHN0cmVhbSBhbm5vdW5jZW1lbnQgYW5kIHN0cmVhbSBzZWxlY3Rpb24KLQotTmV3IHN0cmVhbSBsaXN0aW5nIGFuZCBzdHJlYW0gc2VsZWN0aW9uIEFQSTogbmV3IEFQSSBoYXMgYmVlbiBhZGRlZCB0bwotcHJvdmlkZSBoaWdoLWxldmVsIGFic3RyYWN0aW9ucyBmb3Igc3RyZWFtcyAoW2BHc3RTdHJlYW1gXVtzdHJlYW0tYXBpXSkKLWFuZCBjb2xsZWN0aW9ucyBvZiBzdHJlYW1zIChbYEdzdFN0cmVhbUNvbGxlY3Rpb25zYF1bc3RyZWFtLWNvbGxlY3Rpb24tYXBpXSkuCi0KLSMjIyMjIFN0cmVhbSBsaXN0aW5nCi0KLUEgW2BHc3RTdHJlYW1gXVtzdHJlYW0tYXBpXSBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHBlcnRpbmVudCB0byBhIHN0cmVhbSwKLXN1Y2ggYXMgc3RyZWFtIGlkLCBjYXBzLCB0YWdzLCBmbGFncyBhbmQgc3RyZWFtIHR5cGUocyk7IGl0IGNhbiByZXByZXNlbnQgYQotc2luZ2xlIGVsZW1lbnRhcnkgc3RyZWFtIChlLmcuIGF1ZGlvLCB2aWRlbywgc3VidGl0bGVzLCBldGMuKSBvciBhIGNvbnRhaW5lcgotc3RyZWFtLiBUaGlzIHdpbGwgZGVwZW5kIG9uIHRoZSBjb250ZXh0LiBJbiBhIGRlY29kZWJpbjMvcGxheWJpbjMgb25lCi1pdCB3aWxsIHR5cGljYWxseSBiZSBlbGVtZW50YXJ5IHN0cmVhbXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgYW5kIHVuc2VsZWN0ZWQuCi0KLUEgW2BHc3RTdHJlYW1Db2xsZWN0aW9uYF1bc3RyZWFtLWNvbGxlY3Rpb24tYXBpXSByZXByZXNlbnRzIGEgZ3JvdXAgb2Ygc3RyZWFtcwotYW5kIGlzIHVzZWQgdG8gYW5ub3VuY2Ugb3IgcHVibGlzaCBhbGwgYXZhaWxhYmxlIHN0cmVhbXMuIEEgR3N0U3RyZWFtQ29sbGVjdGlvbgotaXMgaW1tdXRhYmxlIC0gb25jZSBjcmVhdGVkIGl0IHdvbid0IGNoYW5nZS4gSWYgdGhlIGF2YWlsYWJsZSBzdHJlYW1zIGNoYW5nZSwKLWUuZy4gYmVjYXVzZSBhIG5ldyBzdHJlYW0gYXBwZWFyZWQgb3Igc29tZSBzdHJlYW1zIGRpc2FwcGVhcmVkLCBhIG5ldyBzdHJlYW0KLWNvbGxlY3Rpb24gd2lsbCBiZSBwdWJsaXNoZWQuIFRoaXMgbmV3IHN0cmVhbSBjb2xsZWN0aW9uIG1heSBjb250YWluIHN0cmVhbXMKLWZyb20gdGhlIHByZXZpb3VzIGNvbGxlY3Rpb24gaWYgdGhvc2Ugc3RyZWFtcyBwZXJzaXN0LCBvciBjb21wbGV0ZWx5IG5ldyBvbmVzLgotU3RyZWFtIGNvbGxlY3Rpb25zIGRvIG5vdCB5ZXQgbGlzdCBhbGwgdGhlb3JldGljYWxseSBhdmFpbGFibGUgc3RyZWFtcywKLWUuZy4gb3RoZXIgYXZhaWxhYmxlIERWRCBhbmdsZXMgb3IgYWx0ZXJuYXRpdmUgcmVzb2x1dGlvbnMvYml0cmF0ZSBvZiB0aGUgc2FtZQotc3RyZWFtIGluIGNhc2Ugb2YgYWRhcHRpdmUgc3RyZWFtaW5nLgotCi1OZXcgZXZlbnRzIGFuZCBtZXNzYWdlcyBoYXZlIGJlZW4gYWRkZWQgdG8gbm90aWZ5IG9yIHVwZGF0ZSBvdGhlciBlbGVtZW50cyBhbmQKLXRoZSBhcHBsaWNhdGlvbiBhYm91dCB3aGljaCBzdHJlYW1zIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGFuZC9vciBzZWxlY3RlZC4KLVRoaXMgd2F5LCB3ZSBjYW4gZWFzaWx5IGFuZCBzZWFtbGVzc2x5IGxldCB0aGUgYXBwbGljYXRpb24ga25vdyB3aGVuZXZlciB0aGUKLWF2YWlsYWJsZSBzdHJlYW1zIGNoYW5nZSwgYXMgaGFwcGVucyBmcmVxdWVudGx5IHdpdGggZGlnaXRhbCB0ZWxldmlzaW9uIHN0cmVhbXMKLWZvciBleGFtcGxlLiBUaGUgbmV3IHN5c3RlbSBpcyBhbHNvIG1vcmUgZmxleGlibGUuIEZvciBleGFtcGxlLCBpdCBpcyBub3cgYWxzbwotcG9zc2libGUgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBzZWxlY3QgbXVsdGlwbGUgc3RyZWFtcyBvZiB0aGUgc2FtZSB0eXBlCi0oZS5nLiBpbiBhIHRyYW5zY29kaW5nL3RyYW5zbXV4aW5nIHNjZW5hcmlvKS4KLQotQSBbYFNUUkVBTV9DT0xMRUNUSU9OYCBtZXNzYWdlXVtzdHJlYW0tY29sbGVjdGlvbi1tc2ddIGlzIHBvc3RlZCBvbiB0aGUgYnVzCi10byBpbmZvcm0gdGhlIHBhcmVudCBiaW4gKGUuZy4gYHBsYXliaW4zYCwgYGRlY29kZWJpbjNgKSBhbmQvb3IgdGhlIGFwcGxpY2F0aW9uCi1hYm91dCB3aGF0IHN0cmVhbXMgYXJlIGF2YWlsYWJsZSwgc28geW91IG5vIGxvbmdlciBoYXZlIHRvIGh1bnQgZm9yIHRoaXMKLWluZm9ybWF0aW9uIGF0IGRpZmZlcmVudCBwbGFjZXMuIFRoZSBhdmFpbGFibGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgbnVtYmVyIG9mCi1zdHJlYW1zIG9mIGVhY2ggdHlwZSwgY2FwcywgdGFncyBldGMuICBCaW5zIGFuZC9vciB0aGUgYXBwbGljYXRpb24gY2FuIGludGVyY2VwdAotdGhlIG1lc3NhZ2Ugc3luY2hyb25vdXNseSB0byBzZWxlY3QgYW5kIGRlc2VsZWN0IHN0cmVhbXMgYmVmb3JlIGFueSBkYXRhIGlzCi1wcm9kdWNlZCAtIGZvciB0aGUgY2FzZSB3aGVyZSBlbGVtZW50cyBzdWNoIGFzIHRoZSBkZW11eGVycyBzdXBwb3J0IHRoZSBuZXcKLXN0cmVhbSBBUEksIG5vdCBuZWNlc3NhcmlseSBpbiB0aGUgcGFyc2ViaW4gY29tcGF0aWJpbGl0eSBmYWxsYmFjayBjYXNlLgotCi1TaW1pbGFybHksIHRoZXJlIGlzIGFsc28gYSBbYFNUUkVBTV9DT0xMRUNUSU9OYCBldmVudF1bc3RyZWFtLWNvbGxlY3Rpb24tZXZlbnRdCi10byBpbmZvcm0gZG93bnN0cmVhbSBlbGVtZW50cyBvZiB0aGUgYXZhaWxhYmxlIHN0cmVhbXMuIFRoaXMgZXZlbnQgY2FuIGJlIHVzZWQKLWJ5IGVsZW1lbnRzIHRvIGFnZ3JlZ2F0ZSBzdHJlYW1zIGZyb20gbXVsdGlwbGUgaW5wdXRzIGludG8gb25lIHNpbmdsZSBjb2xsZWN0aW9uLgotCi1UaGUgYFNUUkVBTV9TVEFSVGAgZXZlbnQgd2FzIGV4dGVuZGVkIHNvIHRoYXQgaXQgY2FuIGFsc28gY29udGFpbiBhIEdzdFN0cmVhbQotb2JqZWN0IHdpdGggYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0cmVhbSwgc2VlCi1bYGdzdF9ldmVudF9zZXRfc3RyZWFtKClgXVtldmVudC1zZXQtc3RyZWFtXSBhbmQKLVtgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbSgpYF1bZXZlbnQtcGFyc2Utc3RyZWFtXS4KLVtgZ3N0X3BhZF9nZXRfc3RyZWFtKClgXVtwYWQtZ2V0LXN0cmVhbV0gaXMgYSBuZXcgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGNhbiBiZQotdXNlZCB0byBsb29rIHVwIHRoZSBHc3RTdHJlYW0gZnJvbSB0aGUgYFNUUkVBTV9TVEFSVGAgc3RpY2t5IGV2ZW50IG9uIGEgcGFkLgotCi1bc3RyZWFtLWFwaV06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwKLVtzdHJlYW0tY29sbGVjdGlvbi1hcGldOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbAotW3N0cmVhbS1jb2xsZWN0aW9uLW1zZ106IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1jb2xsZWN0aW9uCi1bc3RyZWFtLWNvbGxlY3Rpb24tZXZlbnRdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0cmVhbS1jb2xsZWN0aW9uCi1bZXZlbnQtc2V0LXN0cmVhbV06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1zZXQtc3RyZWFtCi1bZXZlbnQtcGFyc2Utc3RyZWFtXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbQotW3BhZC1nZXQtc3RyZWFtXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0cmVhbQotCi0jIyMjIyBTdHJlYW0gc2VsZWN0aW9uCi0KLU9uY2UgdGhlIGF2YWlsYWJsZSBzdHJlYW1zIGhhdmUgYmVlbiBwdWJsaXNoZWQsIHN0cmVhbXMgY2FuIGJlIHNlbGVjdGVkIHZpYQotdGhlaXIgc3RyZWFtIElEIHVzaW5nIHRoZSBuZXcgYFNFTEVDVF9TVFJFQU1TYCBldmVudCwgd2hpY2ggY2FuIGJlIGNyZWF0ZWQKLXdpdGggW2Bnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKClgXVtldmVudC1zZWxlY3Qtc3RyZWFtc10uIFRoZSBuZXcgQVBJCi1zdXBwb3J0cyBzZWxlY3RpbmcgbXVsdGlwbGUgc3RyZWFtcyBwZXIgc3RyZWFtIHR5cGUuIEluIHRoZSBmdXR1cmUsIHdlIG1heSBhbHNvCi1pbXBsZW1lbnQgZXhwbGljaXQgZGVzZWxlY3Rpb24gb2Ygc3RyZWFtcyB0aGF0IHdpbGwgbmV2ZXIgYmUgdXNlZCwgc28KLWVsZW1lbnRzIGNhbiBza2lwIHRoZXNlIGFuZCBuZXZlciBleHBvc2UgdGhlbSBvciBvdXRwdXQgZGF0YSBmb3IgdGhlbSBpbiB0aGUKLWZpcnN0IHBsYWNlLgotCi1UaGUgYXBwbGljYXRpb24gaXMgdGhlbiBub3RpZmllZCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHN0cmVhbXMgdmlhIHRoZQotbmV3IGBTVFJFQU1TX1NFTEVDVEVEYCBtZXNzYWdlIG9uIHRoZSBwaXBlbGluZSBidXMsIGNvbnRhaW5pbmcgYm90aCB0aGUgY3VycmVudAotc3RyZWFtIGNvbGxlY3Rpb24gYXMgd2VsbCBhcyB0aGUgc2VsZWN0ZWQgc3RyZWFtcy4gVGhpcyBtaWdodCBiZSBwb3N0ZWQgaW4KLXJlc3BvbnNlIHRvIHRoZSBhcHBsaWNhdGlvbiBzZW5kaW5nIGEgYFNFTEVDVF9TVFJFQU1TYCBldmVudCBvciB3aGVuCi1gZGVjb2RlYmluM2Agb3IgYHBsYXliaW4zYCBkZWNpZGUgb24gdGhlIHN0cmVhbXMgdG8gYmUgaW5pdGlhbGx5IHNlbGVjdGVkIHdpdGhvdXQKLWFwcGxpY2F0aW9uIGlucHV0LgotCi1bZXZlbnQtc2VsZWN0LXN0cmVhbXNdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlbGVjdC1zdHJlYW1zCi0KLSMjIyMjIEZ1cnRoZXIgcmVhZGluZwotCi1TZWUgZnVydGhlciBiZWxvdyBmb3Igc29tZSBub3RlcyBvbiB0aGUgbmV3IGVsZW1lbnRzIHN1cHBvcnRpbmcgdGhpcyBuZXcKLXN0cmVhbSBBUEksIG5hbWVseTogYGRlY29kZWJpbjNgLCBgcGxheWJpbjNgIGFuZCBgcGFyc2ViaW5gLgotCi1Nb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXcgQVBJIGFuZCB0aGUgbmV3IGVsZW1lbnRzIGNhbiBhbHNvIGJlIGZvdW5kIGhlcmU6Ci0KLS0gR1N0cmVhbWVyIFtzdHJlYW0gc2VsZWN0aW9uIGRlc2lnbiBkb2NzXVtzdHJlYW1zLWRlc2lnbl0KLS0gRWR3YXJkIEhlcnZleSdzIHRhbGsgWyJUaGUgbmV3IHN0cmVhbXMgQVBJOiBEZXNpZ24gYW5kIHVzYWdlIl1bc3RyZWFtcy10YWxrXSAoW3NsaWRlc11bc3RyZWFtcy1zbGlkZXNdKQotLSBFZHdhcmQgSGVydmV5J3MgdGFsayBbIkRlY29kZWJpbjM6IERlYWxpbmcgd2l0aCBtb2Rlcm4gcGxheWJhY2sgdXNlIGNhc2VzIl1bZGIzLXRhbGtdIChbc2xpZGVzXVtkYjMtc2xpZGVzXSkKLQotW3N0cmVhbXMtZGVzaWduXTogaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyL3RyZWUvZG9jcy9kZXNpZ24vcGFydC1zdHJlYW0tc2VsZWN0aW9uLnR4dAotW3N0cmVhbXMtdGFsa106IGh0dHBzOi8vZ3N0Y29uZi51YmljYXN0LnR2L3ZpZGVvcy90aGUtbmV3LWdzdHN0cmVhbS1hcGktZGVzaWduLWFuZC11c2FnZS8KLVtzdHJlYW1zLXNsaWRlc106IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2V2ZW50cy9nc3RyZWFtZXItY29uZmVyZW5jZS8yMDE2L0Vkd2FyZCUyMEhlcnZleSUyMC0lMjBUaGUlMjBOZXclMjBTdHJlYW1zJTIwQVBJJTIwRGVzaWduJTIwYW5kJTIwVXNhZ2UucGRmCi1bZGIzLXRhbGtdOiBodHRwczovL2dzdGNvbmYudWJpY2FzdC50di92aWRlb3MvZGVjb2RlYmluMy1vci1kZWFsaW5nLXdpdGgtbW9kZXJuLXBsYXliYWNrLXVzZS1jYXNlcy8KLVtkYjMtc2xpZGVzXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZXZlbnRzL2dzdHJlYW1lci1jb25mZXJlbmNlLzIwMTUvRWR3YXJkJTIwSGVydmV5JTIwLSUyMGRlY29kZWJpbjMucGRmCi0KLSMjIyMgQXVkaW8gY29udmVyc2lvbiBhbmQgcmVzYW1wbGluZyBBUEkKLQotVGhlIGF1ZGlvIGNvbnZlcnNpb24gbGlicmFyeSByZWNlaXZlZCBhIGNvbXBsZXRlbHkgbmV3IGFuZCByZXdyaXR0ZW4gYXVkaW8KLXJlc2FtcGxlciwgY29tcGxlbWVudGluZyB0aGUgYXVkaW8gY29udmVyc2lvbiByb3V0aW5lcyBtb3ZlZCBpbnRvIHRoZSBhdWRpbwotbGlicmFyeSBpbiB0aGUgW3ByZXZpb3VzIHJlbGVhc2VdW3JlbGVhc2Utbm90ZXMtMS44XS4gSW50ZWdyYXRpbmcgdGhlIHJlc2FtcGxlcgotd2l0aCB0aGUgb3RoZXIgYXVkaW8gY29udmVyc2lvbiBsaWJyYXJ5IGFsbG93cyB1cyB0byBpbXBsZW1lbnQgZ2VuZXJpYwotY29udmVyc2lvbiBtdWNoIG1vcmUgZWZmaWNpZW50bHksIGFzIGZvcm1hdCBjb252ZXJzaW9uIGFuZCByZXNhbXBsaW5nIGNhbiBub3cKLWJlIGRvbmUgaW4gdGhlIHNhbWUgcHJvY2Vzc2luZyBsb29wIGluc3RlYWQgb2YgaGF2aW5nIHRvIGRvIGl0IGluIHNlcGFyYXRlCi1zdGVwcyAob3VyIGVsZW1lbnQgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBtYWtlIHVzZSBvZiB0aGlzIHlldCB0aG91Z2gpLgotCi1UaGUgbmV3IGF1ZGlvIHJlc2FtcGxlciBsaWJyYXJ5IGlzIGEgY29tYmluYXRpb24gb2Ygc29tZSBvZiB0aGUgYmVzdCBmZWF0dXJlcwotb2Ygb3RoZXIgc2FtcGxlcnMgc3VjaCBhcyBmZm1wZWcsIHNwZWV4IGFuZCBTUkMuIEl0IG5hdGl2ZWx5IHN1cHBvcnRzIFMxNiwgUzMyLAotRjMyIGFuZCBGNjQgZm9ybWF0cyBhbmQgdXNlcyBvcHRpbWl6ZWQgeDg2IGFuZCBuZW9uIGFzc2VtYmx5IGZvciBtb3N0IG9mIGl0cwotcHJvY2Vzc2luZy4gSXQgYWxzbyBoYXMgc3VwcG9ydCBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgc2FtcGxlIHJhdGVzIGJ5IGluY3JlbWVudGFsbHkKLXVwZGF0aW5nIHRoZSBmaWx0ZXIgdGFibGVzIHVzaW5nIGxpbmVhciBvciBjdWJpYyBpbnRlcnBvbGF0aW9uLiBBY2NvcmRpbmcgdG8KLXNvbWUgYmVuY2htYXJrcywgaXQncyBvbmUgb2YgdGhlIGZhc3Rlc3QgYW5kIG1vc3QgYWNjdXJhdGUgcmVzYW1wbGVycyBhcm91bmQuCi0KLVRoZSBgYXVkaW9yZXNhbXBsZWAgcGx1Z2luIGhhcyBiZWVuIHBvcnRlZCB0byB0aGUgbmV3IGF1ZGlvIGxpYnJhcnkgZnVuY3Rpb25zCi10byBtYWtlIHVzZSBvZiB0aGUgbmV3IHJlc2FtcGxlci4KLQotW3JlbGVhc2Utbm90ZXMtMS44XTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLzEuOC8KLQotIyMjIyBTdXBwb3J0IGZvciBTTVBURSB0aW1lY29kZXMKLQotU3VwcG9ydCBmb3IgU01QVEUgdGltZWNvZGVzIHdhcyBhZGRlZCB0byB0aGUgR1N0cmVhbWVyIHZpZGVvIGxpYnJhcnkuIFRoaXMKLWNvbWVzIHdpdGggYW4gYWJzdHJhY3Rpb24gZm9yIHRpbWVjb2RlcywgW2BHc3RWaWRlb1RpbWVDb2RlYF1bdmlkZW8tdGltZWNvZGVdCi1hbmQgYSBbYEdzdE1ldGFgXVt2aWRlby10aW1lY29kZS1tZXRhXSB0aGF0IGNhbiBiZSBwbGFjZWQgb24gdmlkZW8gYnVmZmVycyBmb3IKLWNhcnJ5aW5nIHRoZSB0aW1lY29kZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBmcmFtZS4gQWRkaXRpb25hbGx5IHRoZXJlIGlzCi12YXJpb3VzIEFQSSBmb3IgbWFraW5nIGhhbmRsaW5nIG9mIHRpbWVjb2RlcyBlYXN5IGFuZCB0byBkbyB2YXJpb3VzCi1jYWxjdWxhdGlvbnMgd2l0aCB0aGVtLgotCi1BIG5ldyBwbHVnaW4gY2FsbGVkIFtgdGltZWNvZGVgXVt0aW1lY29kZS1wbHVnaW5dIHdhcyBhZGRlZCwgdGhhdCBjb250YWlucyBhbgotZWxlbWVudCBjYWxsZWQgYHRpbWVjb2Rlc3RhbXBlcmAgZm9yIHB1dHRpbmcgdGhlIHRpbWVjb2RlIG1ldGEgb24gdmlkZW8gZnJhbWVzCi1iYXNlZCBvbiBjb3VudGluZyB0aGUgZnJhbWVzIGFuZCBhbm90aGVyIGVsZW1lbnQgY2FsbGVkIGB0aW1lY29kZXdhaXRgIHRoYXQKLWRyb3BzIGFsbCB2aWRlbyAoYW5kIGF1ZGlvKSB1bnRpbCBhIHNwZWNpZmljIHRpbWVjb2RlIGlzIHJlYWNoZWQuCi0KLUFkZGl0aW9uYWxseSBzdXBwb3J0IHdhcyBhZGRlZCB0byB0aGUgRGVja2xpbmsgcGx1Z2luIGZvciBpbmNsdWRpbmcgdGhlCi10aW1lY29kZSBpbmZvcm1hdGlvbiB3aGVuIHNlbmRpbmcgdmlkZW8gb3V0IG9yIGNhcHR1cmluZyBpdCB2aWEgU0RJLCB0aGUKLWBxdG11eGAgZWxlbWVudCBpcyBhYmxlIHRvIHdyaXRlIHRpbWVjb2RlIGluZm9ybWF0aW9uIGludG8gdGhlIE1PViBjb250YWluZXIsCi1hbmQgdGhlIGB0aW1lb3ZlcmxheWAgZWxlbWVudCBjYW4gb3ZlcmxheSB0aW1lY29kZXMgb24gdG9wIG9mIHRoZSB2aWRlby4KLQotTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIFt0YWxrIGFib3V0IHRpbWVjb2Rlc11bdGltZWNvZGUtdGFsa10gYXQKLXRoZSBHU3RyZWFtZXIgQ29uZmVyZW5jZSAyMDE2LgotCi1bdmlkZW8tdGltZWNvZGVdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0LXBsdWdpbnMtYmFzZS1saWJzL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvLmh0bWwjR3N0VmlkZW9UaW1lQ29kZQotW3ZpZGVvLXRpbWVjb2RlLW1ldGFdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0LXBsdWdpbnMtYmFzZS1saWJzL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvbWV0YS5odG1sI2dzdC1idWZmZXItYWRkLXZpZGVvLXRpbWUtY29kZS1tZXRhCi1bdGltZWNvZGUtcGx1Z2luXTogaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkL3RyZWUvZ3N0L3RpbWVjb2RlCi1bdGltZWNvZGUtdGFsa106IGh0dHBzOi8vZ3N0Y29uZi51YmljYXN0LnR2L3ZpZGVvcy9zbXB0ZS10aW1lY29kZXMtaW4tZ3N0cmVhbWVyLwotCi0jIyMjIEdTdHJlYW1lciBPcGVuTUFYIElMIHBsdWdpbgotCi1UaGUgbGFzdCBnc3Qtb214IHJlbGVhc2UsIDEuMi4wLCB3YXMgaW4gSnVseSAyMDE0LiBJdCB3YXMgYWJvdXQgdGltZSB0byBnZXQKLWEgbmV3IG9uZSBvdXQgd2l0aCBhbGwgdGhlIGltcHJvdmVtZW50cyB0aGF0IGhhdmUgaGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lLgotRnJvbSBub3cgb24sIHdlIHdpbGwgdHJ5IHRvIHJlbGVhc2UgZ3N0LW9teCB0b2dldGhlciB3aXRoIGFsbCBvdGhlciBtb2R1bGVzLgotCi1UaGlzIHJlbGVhc2UgZmVhdHVyZXMgYSBsb3Qgb2YgYnVnZml4ZXMsIGltcHJvdmVkIHN1cHBvcnQgZm9yIHRoZSBSYXNwYmVycnkgUGkKLWFuZCBpbiBnZW5lcmFsIGltcHJvdmVkIHN1cHBvcnQgZm9yIHplcm9jb3B5IHJlbmRlcmluZyB2aWEgRUdMIGFuZCBhIGZldyBtaW5vcgotbmV3IGZlYXR1cmVzLgotCi1BdCB0aGlzIHBvaW50LCBnc3Qtb214IGlzIGtub3duIHRvIHdvcmsgYmVzdCBvbiB0aGUgUmFzcGJlcnJ5IFBpIHBsYXRmb3JtIGJ1dAotaXQgaXMgYWxzbyBrbm93biB0byB3b3JrIG9uIHZhcmlvdXMgb3RoZXIgcGxhdGZvcm1zLiBVbmZvcnR1bmF0ZWx5LCB3ZSBhcmUKLW5vdCBpbmNsdWRpbmcgY29uZmlndXJhdGlvbnMgZm9yIGFueSBvdGhlciBwbGF0Zm9ybXMsIHNvIGlmIHlvdSBoYXBwZW4gdG8gdXNlCi1nc3Qtb214OiBwbGVhc2Ugc2VuZCB1cyBwYXRjaGVzIHdpdGggeW91ciBjb25maWd1cmF0aW9uIGFuZCBjb2RlIGNoYW5nZXMhCi0KLSMjIyBOZXcgRWxlbWVudHMKLQotIyMjIyBkZWNvZGViaW4zLCBwbGF5YmluMywgcGFyc2ViaW4gKGV4cGVyaW1lbnRhbCkKLQotVGhpcyByZWxlYXNlIGZlYXR1cmVzIG5ldyBkZWNvZGluZyBhbmQgcGxheWJhY2sgZWxlbWVudHMgYXMgZXhwZXJpbWVudGFsCi10ZWNobm9sb2d5IHByZXZpZXdzOiBgZGVjb2RlYmluM2AgYW5kIGBwbGF5YmluM2Agd2lsbCBzb29uIHN1cGVyc2VkZSB0aGUKLWV4aXN0aW5nIGBkZWNvZGViaW5gIGFuZCBgcGxheWJpbmAgZWxlbWVudHMuIFdlIHNraXBwZWQgdGhlIG51bWJlciAyIGJlY2F1c2UKLWl0IHdhcyBhbHJlYWR5IHVzZWQgYmFjayBpbiB0aGUgMC4xMCBkYXlzLCB3aGljaCBtaWdodCBjYXVzZSBjb25mdXNpb24uCi1FeHBlcmltZW50YWwgdGVjaG5vbG9neSBwcmV2aWV3IG1lYW5zIHRoYXQgZXZlcnl0aGluZyBzaG91bGQgd29yayBmaW5lIGFscmVhZHksCi1idXQgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoZXJlIHdvbid0IGJlIG1pbm9yIGJlaGF2aW91cmFsIGNoYW5nZXMgaW4gdGhlCi1uZXh0IGN5Y2xlLiBJbiBhbnkgY2FzZSwgcGxlYXNlIHRlc3QgYW5kIHJlcG9ydCBhbnkgcHJvYmxlbXMgYmFjay4KLQotQmVmb3JlIHdlIGdvIGludG8gZGV0YWlsIGFib3V0IHdoYXQgdGhlc2UgbmV3IGVsZW1lbnRzIGltcHJvdmUsIGxldCdzIGxvb2sgYXQKLXRoZSBuZXcgW2BwYXJzZWJpbmBdW3BhcnNlYmluXSBlbGVtZW50LiBJdCB3b3JrcyBzaW1pbGFybHkgdG8gYGRlY29kZWJpbmAgYW5kCi1gZGVjb2RlYmluM2AsIG9ubHkgdGhhdCBpdCBzdG9wcyBvbmUgc3RlcCBzaG9ydCBhbmQgZG9lcyBub3QgcGx1ZyBhbnkgYWN0dWFsCi1kZWNvZGVyIGVsZW1lbnRzLiBJdCB3aWxsIG9ubHkgcGx1ZyBwYXJzZXJzLCB0YWcgcmVhZGVycywgZGVtdXhlcnMgYW5kCi1kZXBheWxvYWRlcnMuIEFsc28gbm90ZSB0aGF0IHBhcnNlYmluIGRvZXMgbm90IGNvbnRhaW4gYW55IHF1ZXVlaW5nIGVsZW1lbnQuCi0KLVtgZGVjb2RlYmluM2Anc11bZGVjb2RlYmluM10gaW50ZXJuYWwgYXJjaGl0ZWN0dXJlIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tCi10aGUgZXhpc3RpbmcgYGRlY29kZWJpbmAgZWxlbWVudCBhbmQgZml4ZXMgbWFueSBsb25nLXN0YW5kaW5nIGlzc3VlcyB3aXRoIG91cgotZGVjb2RpbmcgZW5naW5lLiBGb3Igb25lLCBkYXRhIGlzIG5vdyBmZWQgaW50byB0aGUgaW50ZXJuYWwgYG11bHRpcXVldWVgIGVsZW1lbnQKLSphZnRlciogaXQgaGFzIGJlZW4gcGFyc2VkIGFuZCB0aW1lc3RhbXBlZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgYG11bHRpcXVldWVgCi1lbGVtZW50IG5vdyBoYXMgbW9yZSBrbm93bGVkZ2UgYW5kIGlzIGFibGUgdG8gY2FsY3VsYXRlIHRoZSBpbnRlcmxlYXZpbmcgb2YgdGhlCi12YXJpb3VzIHN0cmVhbXMsIHRodXMgbWluaW1pemluZyBtZW1vcnkgcmVxdWlyZW1lbnRzIGFuZCBkb2luZyBhd2F5IHdpdGggbWFnaWMKLXZhbHVlcyBmb3IgYnVmZmVyaW5nIGxpbWl0cyB0aGF0IHdlcmUgY29uY2VpdmVkIHdoZW4gdmlkZW9zIHdlcmUgMjQwcCBvciAzNjBwLgotQW55b25lIHdobyBoYXMgdHJpZWQgdG8gcGxheSBiYWNrIDRrIHZpZGVvIHN0cmVhbXMgd2l0aCBkZWNvZGViaW4yCi13aWxsIGhhdmUgbm90aWNlZCB0aGUgbGltaXRhdGlvbnMgb2YgdGhhdCBhcHByb2FjaC4gVGhlIGltcHJvdmVkIHRpbWVzdGFtcAotdHJhY2tpbmcgYWxzbyBlbmFibGVzIGBtdWx0aXF1ZXVlYCB0byBrZWVwIHN0cmVhbXMgb2YgdGhlIHNhbWUgdHlwZSAoYXVkaW8sCi12aWRlbykgYWxpZ25lZCBiZXR0ZXIsIG1ha2luZyBzdXJlIHN3aXRjaGluZyBiZXR3ZWVuIHN0cmVhbXMgb2YgdGhlIHNhbWUgdHlwZQotaXMgdmVyeSBmYXN0LgotCi1Bbm90aGVyIG1ham9yIGltcHJvdmVtZW50IGluIGBkZWNvZGViaW4zYCBpcyB0aGF0IGl0IHdpbGwgbm8gbG9uZ2VyIGRlY29kZQotc3RyZWFtcyB0aGF0IGFyZSBub3QgYmVpbmcgdXNlZC4gV2l0aCB0aGUgb2xkIGBkZWNvZGViaW5gIGFuZCBgcGxheWJpbmAsIHdoZW4KLXRoZXJlIHdlcmUgOCBhdWRpbyBzdHJlYW1zIHdlIHdvdWxkIGFsd2F5cyBkZWNvZGUgYWxsIDggc3RyZWFtcyBldmVuCi1pZiA3IHdlcmUgbm90IGFjdHVhbGx5IHVzZWQuIFRoaXMgY2F1c2VkIGEgbG90IG9mIENQVSBvdmVyaGVhZCwgd2hpY2ggd2FzCi1wYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgb24gZW1iZWRkZWQgZGV2aWNlcy4gV2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBzdHJlYW1zCi1gZGVjb2RlYmluM2Agd2lsbCB0cnkgaGFyZCB0byByZS11c2UgZXhpc3RpbmcgZGVjb2RlcnMuIFRoaXMgaXMgdXNlZnVsIHdoZW4KLXN3aXRjaGluZyBiZXR3ZWVuIG11bHRpcGxlIHN0cmVhbXMgb2YgdGhlIHNhbWUgdHlwZSBpZiB0aGV5IGFyZSBlbmNvZGVkIGluIHRoZQotc2FtZSBmb3JtYXQuCi0KLVJlLXVzaW5nIGRlY29kZXJzIGlzIGFsc28gdXNlZnVsIHdoZW4gdGhlIGF2YWlsYWJsZSBzdHJlYW1zIGNoYW5nZSBvbiB0aGUgZmx5LAotYXMgbWlnaHQgaGFwcGVuIHdpdGggcmFkaW8gc3RyZWFtcyAoY2hhaW5lZCBPZ2dzKSwgZGlnaXRhbCB0ZWxldmlzaW9uCi1icm9hZGNhc3RzLCB3aGVuIGFkYXB0aXZlIHN0cmVhbWluZyBzdHJlYW1zIGNoYW5nZSBiaXRyYXRlLCBvciB3aGVuIHN3aXRjaGluZwotZ2FwbGVzc2x5IHRvIHRoZSBuZXh0IHRpdGxlLiBJbiBvcmRlciB0byBndWFyYW50ZWUgYSBzZWFtbGVzcyB0cmFuc2l0aW9uLCB0aGUKLW9sZCBgZGVjb2RlYmluMmAgd291bGQgcGx1ZyBhIHNlY29uZCBkZWNvZGVyIGZvciB0aGUgbmV3IHN0cmVhbSB3aGlsZSBmaW5pc2hpbmcKLXVwIHRoZSBvbGQgc3RyZWFtLiBXaXRoIGBkZWNvZGViaW4zYCwgdGhpcyBpcyBubyBsb25nZXIgbmVlZGVkIC0gYXQgbGVhc3Qgbm90Ci13aGVuIHRoZSBuZXcgYW5kIG9sZCBmb3JtYXQgYXJlIHRoZSBzYW1lLiBUaGlzIHdpbGwgYmUgcGFydGljdWxhcmx5IHVzZWZ1bAotb24gZW1iZWRkZWQgc3lzdGVtcyB3aGVyZSBpdCBpcyBvZnRlbiBub3QgcG9zc2libGUgdG8gcnVuIG11bHRpcGxlIGRlY29kZXJzCi1hdCB0aGUgc2FtZSB0aW1lLCBvciB3aGVuIHRlYXJpbmcgZG93biBhbmQgc2V0dGluZyB1cCBkZWNvZGVycyBpcyBmYWlybHkKLWV4cGVuc2l2ZS4KLQotYGRlY29kZWJpbjNgIGFsc28gYWxsb3dzIGZvciBtdWx0aXBsZSBpbnB1dCBzdHJlYW1zLCBub3QganVzdCBhIHNpbmdsZSBvbmUuCi1UaGlzIHdpbGwgYmUgdXNlZnVsLCBpbiB0aGUgZnV0dXJlLCBmb3IgZ2FwbGVzcyBwbGF5YmFjaywgb3IgZm9yIGZlZWRpbmcKLW11bHRpcGxlIGV4dGVybmFsIHN1YnRpdGxlIHN0cmVhbXMgdG8gZGVjb2RlYmluL3BsYXliaW4uCi0KLWBwbGF5YmluM2AgdXNlcyBgZGVjb2RlYmluM2AgaW50ZXJuYWxseSwgYW5kIHdpbGwgc3VwZXJjZWRlIGBwbGF5YmluYC4KLUl0IHdhcyBkZWNpZGVkIHRoYXQgaXQgd291bGQgYmUgdG9vIHJpc2t5IHRvIG1ha2UgdGhlIG9sZCBgcGxheWJpbmAgdXNlIHRoZQotbmV3IGBkZWNvZGViaW4zYCBpbiBhIGJhY2t3YXJkcy1jb21wYXRpYmxlIHdheS4gVGhlIG5ldyBhcmNoaXRlY3R1cmUKLW1ha2VzIGl0IGF3a3dhcmQsIGlmIG5vdCBpbXBvc3NpYmxlLCB0byBtYWludGFpbiBwZXJmZWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci1pbiBzb21lIGFzcGVjdHMsIGhlbmNlIGBwbGF5YmluM2Agd2FzIGJvcm4sIGFuZCBkZXZlbG9wZXJzIGNhbiBtaWdyYXRlIHRvIHRoZQotbmV3IGVsZW1lbnQgYW5kIG5ldyBBUEkgYXQgdGhlaXIgb3duIHBhY2UuCi0KLUFsbCBvZiB0aGVzZSBuZXcgZWxlbWVudHMgbWFrZSB1c2Ugb2YgdGhlIG5ldyBgR3N0U3RyZWFtYCBBUEkgZm9yIGxpc3RpbmcgYW5kCi1zZWxlY3Rpbmcgc3RyZWFtcywgYXMgZGVzY3JpYmVkIGFib3ZlLiBgcGFyc2ViaW5gIHByb3ZpZGVzIGJhY2t3YXJkcwotY29tcGF0aWJpbGl0eSBmb3IgZGVtdXhlcnMgYW5kIHBhcnNlcnMgd2hpY2ggZG8gbm90IGFkdmVydGlzZSB0aGVpciBzdHJlYW1zCi11c2luZyB0aGUgbmV3IEFQSSB5ZXQgKHdoaWNoIGlzIG1vc3QpLgotCi1UaGUgbmV3IGVsZW1lbnRzIGFyZSBub3QgZW50aXJlbHkgZmVhdHVyZS1jb21wbGV0ZSB5ZXQ6IGBwbGF5YmluM2AgZG9lcyBub3QKLXN1cHBvcnQgc28tY2FsbGVkIGRlY29kZXJzaW5rcyB5ZXQgd2hlcmUgdGhlIGRhdGEgaXMgbm90IGRlY29kZWQgaW5zaWRlCi1HU3RyZWFtZXIgYnV0IHBhc3NlZCBkaXJlY3RseSBmb3IgZGVjb2RpbmcgdG8gdGhlIHNpbmsuIGBkZWNvZGViaW4zYCBpcyBtaXNzaW5nCi10aGUgdmFyaW91cyBgYXV0b3BsdWctKmAgc2lnbmFscyB0byBpbmZsdWVuY2Ugd2hpY2ggZGVjb2RlcnMgZ2V0IGF1dG9wbHVnZ2VkCi1pbiB3aGljaCBvcmRlci4gV2UncmUgbG9va2luZyB0byBhZGQgYmFjayB0aGlzIGZ1bmN0aW9uYWxpdHksIGJ1dCBpdCB3aWxsIHByb2JhYmx5Ci1iZSBpbiBhIGRpZmZlcmVudCB3YXksIHdpdGggYSBzaW5nbGUgdW5pZmllZCBzaWduYWwgYW5kIHVzaW5nIEdzdFN0cmVhbSBwZXJoYXBzLgotCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSBuZXcgZWxlbWVudHMsIGNoZWNrIG91dCBFZHdhcmQgSGVydmV5J3MgdGFsawotWypkZWNvZGViaW4zIC0gZGVhbGluZyB3aXRoIG1vZGVybiBwbGF5YmFjayB1c2UgY2FzZXMqXVtkYjMtdGFsa10KLQotW3BhcnNlYmluXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy1wYXJzZWJpbi5odG1sCi1bZGVjb2RlYmluM106IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLXBsdWdpbnMtZGVjb2RlYmluMy5odG1sCi1bZGIzLXRhbGtdOiBodHRwczovL2dzdGNvbmYudWJpY2FzdC50di92aWRlb3MvZGVjb2RlYmluMy1vci1kZWFsaW5nLXdpdGgtbW9kZXJuLXBsYXliYWNrLXVzZS1jYXNlcy8KLQotIyMjIyBMVjIgcG9ydGVkIGZyb20gMC4xMCBhbmQgc3dpdGNoZWQgZnJvbSBzbHYyIHRvIGxpbHYyCi0KLVRoZSBMVjIgd3JhcHBlciBwbHVnaW4gaGFzIGJlZW4gcG9ydGVkIHRvIDEuMCBhbmQgbW92ZWQgZnJvbSB1c2luZyB0aGUKLWRlcHJlY2F0ZWQgc2x2MiBsaWJyYXJ5IHRvIGl0cyByZXBsYWNlbWVudCBsaWJsdjIuIFdlIHN1cHBvcnQgc291cmNlcyBhbmQKLWZpbHRlciBlbGVtZW50cy4gbHYyIGlzIHNob3J0IGZvciAqTGludXggQXVkaW8gRGV2ZWxvcGVyJ3MgU2ltcGxlIFBsdWdpbiBBUEkKLShMQURTUEEpIHZlcnNpb24gMiogYW5kIGlzIGFuIG9wZW4gc3RhbmRhcmQgZm9yIGF1ZGlvIHBsdWdpbnMgd2hpY2ggaW5jbHVkZXMKLXN1cHBvcnQgZm9yIGF1ZGlvIHN5bnRoZXNpcyAoZ2VuZXJhdGlvbiksIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3Npbmcgb2YgZGlnaXRhbAotYXVkaW8sIGFuZCBNSURJLiBUaGUgbmV3IGx2MiBwbHVnaW4gc3VwZXJzZWRlcyB0aGUgZXhpc3RpbmcgTEFEU1BBIHBsdWdpbi4KLQotIyMjIyBXZWJSVEMgRFNQIFBsdWdpbiBmb3IgZWNoby1jYW5jZWxsYXRpb24sIGdhaW4gY29udHJvbCBhbmQgbm9pc2Ugc3VwcHJlc3Npb24KLQotQSBzZXQgb2YgbmV3IGVsZW1lbnRzIChbd2VicnRjZHNwXVt3ZWJydGNkc3BdLCBbd2VicnRjZWNob3Byb2JlXVt3ZWJydGNlY2hvcHJvYmVdKQotYmFzZWQgb24gdGhlIFdlYlJUQyBEU1Agc29mdHdhcmUgc3RhY2sgY2FuIG5vdyBiZSB1c2VkIHRvIGltcHJvdmUgeW91ciBhdWRpbwotdm9pY2UgY29tbXVuaWNhdGlvbiBwaXBlbGluZXMuIFRoZXkgc3VwcG9ydCBlY2hvIGNhbmNlbGxhdGlvbiwgZ2FpbiBjb250cm9sLAotbm9pc2Ugc3VwcHJlc3Npb24gYW5kIG1vcmUuIEZvciBtb3JlIGRldGFpbHMgeW91IG1heSByZWFkCi1bTmljb2xhcycgYmxvZyBwb3N0XVt3ZWJydGMtYmxvZy1wb3N0XS4KLQotW3dlYnJ0Y2RzcF06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXdlYnJ0Y2RzcC5odG1sCi1bd2VicnRjZWNob3Byb2JlXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtd2VicnRjZWNob3Byb2JlLmh0bWwKLVt3ZWJydGMtYmxvZy1wb3N0XTogaHR0cHM6Ly9uZHVmcmVzbmUuY2EvMjAxNi8wNi9nc3RyZWFtZXItZWNoby1jYW5jZWxsZXIvCi0KLSMjIyMgRnJhdW5ob2ZlciBGREsgQUFDIGVuY29kZXIgYW5kIGRlY29kZXIKLQotTmV3IGVuY29kZXIgYW5kIGRlY29kZXIgZWxlbWVudHMgd3JhcHBpbmcgdGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBsaWJyYXJ5IGhhdmUKLWJlZW4gYWRkZWQgKGBmZGthYWNkZWNgLCBgZmRrYWFjZGVjYCkuIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgZW5jb2RlciBpcwotZ2VuZXJhbGx5IGNvbnNpZGVyZWQgdG8gYmUgYSB2ZXJ5IGhpZ2gtcXVhbGl0eSBBQUMgZW5jb2RlciwgYnV0IHVuZm9ydHVuYXRlbHkKLWl0IGNvbWVzIHVuZGVyIGEgbm9uLWZyZWUgbGljZW5zZSB3aXRoIHRoZSBvcHRpb24gdG8gb2J0YWluIGEgcGFpZCwgY29tbWVyY2lhbAotbGljZW5zZS4KLQotIyMjIE5vdGV3b3J0aHkgZWxlbWVudCBmZWF0dXJlcyBhbmQgYWRkaXRpb25zCi0KLSMjIyMgTWFqb3IgUlRQIGFuZCBSVFNQIGltcHJvdmVtZW50cwotCi0tIFRoZSBSVFNQIHNlcnZlciBhbmQgc291cmNlIGVsZW1lbnQsIGFzIHdlbGwgYXMgdGhlIFJUUCBqaXR0ZXJidWZmZXIgbm93IHN1cHBvcnQKLSAgcmVtb3RlIGNsb2NrIHN5bmNocm9uaXphdGlvbiBhY2NvcmRpbmcgdG8gW1JGQzcyNzNdW2h0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjczXS4KLS0gU3VwcG9ydCBmb3IgYXBwbGljYXRpb24gYW5kIHByb2ZpbGUgc3BlY2lmaWMgUlRDUCBwYWNrZXRzIHdhcyBhZGRlZC4KLS0gVGhlIEgyNjUvSEVWQyBwYXlsb2FkZXIvZGVwYXlsb2FkZXIgaXMgYWdhaW4gaW4gc3luYyB3aXRoIHRoZSBmaW5hbCBSRkMuCi0tIFNlZWtpbmcgc3RhYmlsaXR5IG9mIHRoZSBSVFNQIHNvdXJjZSBhbmQgc2VydmVyIHdhcyBpbXByb3ZlZCBhIGxvdCBhbmQKLSAgcnVucyBzdGFibHkgbm93LCBldmVuIHdoZW4gZG9pbmcgc2NydWItc2Vla2luZy4KLS0gVGhlIFJUU1Agc2VydmVyIHJlY2VpdmVkIHZhcmlvdXMgbWFqb3IgYnVnZml4ZXMsIGluY2x1ZGluZyBmb3IgcmVncmVzc2lvbnMgdGhhdAotICBjYXVzZWQgdGhlIElQL3BvcnQgYWRkcmVzcyBwb29sIHRvIG5vdCBiZSBjb25zaWRlcmVkLCBvciBOQVQgaG9sZSBwdW5jaGluZwotICB0byBub3Qgd29yayBhbnltb3JlLiBbQnVnemlsbGEgIzc2NjYxMl1baHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjYxMl0KLS0gVmFyaW91cyBvdGhlciBidWdmaXhlcyB0aGF0IGltcHJvdmUgdGhlIHN0YWJpbGl0eSBvZiBSVFAgYW5kIFJUU1AsIGluY2x1ZGluZwotICBtYW55IG5ldyB1bml0IC8gaW50ZWdyYXRpb24gdGVzdHMuCi0KLSMjIyMgSW1wcm92ZW1lbnRzIHRvIHNwbGl0bXV4c3JjIGFuZCBzcGxpdG11eHNpbmsKLQotLSBUaGUgc3BsaXRtdXggZWxlbWVudCByZWNlaXZlZCByZWxpYWJpbGl0eSBhbmQgZXJyb3IgaGFuZGxpbmcgaW1wcm92ZW1lbnRzLAotICByZW1vdmluZyBhdCBsZWFzdCBvbmUgZGVhZGxvY2sgY2FzZS4gYHNwbGl0bXV4c3JjYCBub3cgc3RvcHMgY2xlYW5seSBhdCB0aGUgZW5kCi0gIG9mIHRoZSBzZWdtZW50IHdoZW4gaGFuZGxpbmcgc2Vla3Mgd2l0aCBhIHN0b3AgdGltZS4gV2UgZml4ZWQgYSBidWcgd2l0aCBsYXJnZQotICBhbW91bnRzIG9mIGRvd25zdHJlYW0gYnVmZmVyaW5nIGNhdXNpbmcgaW5jb3JyZWN0IG91dC1vZi1zZXF1ZW5jZSBwbGF5YmFjay4KLQotLSBgc3BsaXRtdXhzcmNgIG5vdyBoYXMgYSBgImZvcm1hdC1sb2NhdGlvbiJgIHNpZ25hbCB0byBkaXJlY3RseSBzcGVjaWZ5IHRoZSBsaXN0Ci0gIG9mIGZpbGVzIHRvIHBsYXkgZnJvbS4KLQotLSBgc3BsaXRtdXhzaW5rYCBjYW4gbm93IG9wdGlvbmFsbHkgc2VuZCBmb3JjZS1rZXl1bml0IGV2ZW50cyB0byB1cHN0cmVhbQotICBlbGVtZW50cyB0byBhbGxvdyBzcGxpdHRpbmcgZmlsZXMgbW9yZSBhY2N1cmF0ZWx5IGluc3RlYWQgb2YgaGF2aW5nIHRvIHdhaXQKLSAgZm9yIHVwc3RyZWFtIHRvIHByb3ZpZGUgYSBuZXcga2V5ZnJhbWUgYnkgaXRzZWxmLgotCi0jIyMjIE9wZW5HTC9HTEVTIGltcHJvdmVtZW50cwotCi0jIyMjIyBpT1MgYW5kIG1hY09TIChPUy9YKQotCi0tIFdlIG5vdyBjcmVhdGUgT3BlbkdMfEVTIDMueCBjb250ZXh0cyBvbiBpT1MgYnkgZGVmYXVsdCB3aXRoIGEgZmFsbGJhY2sgdG8KLSAgT3BlbkdMfEVTIDIueCBpZiB0aGF0IGZhaWxzLgotLSBWYXJpb3VzIHplcm9jb3B5IGRlY29kaW5nIGZpeGVzIGFuZCBlbmhhbmNlbWVudHMgd2l0aCB0aGUKLSAgZW5jb2RpbmcvZGVjb2RpbmcvY2FwdHVyaW5nIGVsZW1lbnRzLgotLSBsaWJkaXNwYXRjaCBpcyBub3cgdXNlZCBvbiBhbGwgQXBwbGUgcGxhdGZvcm1zIGluc3RlYWQgb2YgR01haW5Mb29wLCByZW1vdmluZwotICB0aGUgZXhwZW5zaXZlIHBvbGwoKS9wdGhyZWFkXyooKSBvdmVyaGVhZC4KLQotIyMjIyMgTmV3IEFQSQotCi0tIGBHc3RHTEZyYW1lYnVmZmVyYCAtIGZvciB3cmFwcGluZyBPcGVuR0wgZnJhbWUgYnVmZmVyIG9iamVjdHMuICBJdCBwcm92aWRlcwotICBmYWNpbGl0aWVzIGZvciBhdHRhY2hpbmcgYEdzdEdMTWVtb3J5YCBvYmplY3RzIHRvIHRoZSBuZWNlc3NhcnkgYXR0YWNobWVudAotICBwb2ludHMsIGJpbmRpbmcgYW5kIHVuYmluZGluZyBhbmQgcnVubmluZyBhIHVzZXItc3VwcGxpZWQgZnVuY3Rpb24gd2l0aCB0aGUKLSAgZnJhbWVidWZmZXIgYm91bmQuCi0tIGBHc3RHTFJlbmRlcmJ1ZmZlcmAgKGEgYEdzdEdMQmFzZU1lbW9yeWAgc3ViY2xhc3MpIC0gZm9yIHdyYXBwaW5nIE9wZW5HTAotICByZW5kZXIgYnVmZmVyIG9iamVjdHMgdGhhdCBhcmUgdHlwaWNhbGx5IHVzZWQgZm9yIGRlcHRoL3N0ZW5jaWwgYnVmZmVycyBvcgotICBmb3IgY29sb3IgYnVmZmVycyB3aGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBvdXRwdXQuCi0tIGBHc3RHTE1lbW9yeUVHTGAgKGEgYEdzdEdMTWVtb3J5YCBzdWJjbGFzcykgLSBmb3IgY29tYmluaW5nIGBFR0xJbWFnZWBzIHdpdGggYSBHTAotICB0ZXh0dXJlIHRoYXQgcmVwbGFjZXMgYEdzdEVHTEltYWdlTWVtb3J5YCBicmluZ2luZyB0aGUgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlCi0gIG90aGVyIGBHc3RHTE1lbW9yeWAgaW1wbGVtZW50YXRpb25zLiAgVGhpcyBmaXhlcyBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4KLSAgemVyb2NvcHkgZGVjb2Rpbmcgb24gdGhlIFJhc3BiZXJyeSBQaSB3aGVuIHVzZWQgd2l0aCBhbiB1cGRhdGVkIGdzdC1vbXguCi0KLSMjIyMjIE1pc2NlbGxhbmVvdXMgaW1wcm92ZW1lbnRzCi0KLS0gYGdsdGVzdHNyY2AgaXMgbm93IHVzYWJsZSBvbiBkZXZpY2VzL3BsYXRmb3JtcyB3aXRoIE9wZW5HTCAzLnggYW5kIE9wZW5HTHxFUwotICBhbmQgaGFzIGNvbXBsZXRlZCBvciBnYWluZWQgc3VwcG9ydCBmb3IgbmV3IHBhdHRlcm5zIGluIGxpbmUgd2l0aCB0aGUKLSAgZXhpc3Rpbmcgb25lcyBpbiBgdmlkZW90ZXN0c3JjYC4KLS0gYGdsZGVpbnRlcmxhY2VgIGlzIG5vdyBhdmFpbGFibGUgb24gZGV2aWNlcy9wbGF0Zm9ybXMgd2l0aCBPcGVuR0x8RVMKLSAgaW1wbGVtZW50YXRpb25zLgotLSBUaGUgZGlzcG1hbnggYmFja2VuZCAodXNlZCBvbiB0aGUgUmFzcGJlcnJ5IFBpKSBub3cgc3VwcG9ydHMgdGhlCi0gIGBnc3RfdmlkZW9fb3ZlcmxheV9zZXRfd2luZG93X2hhbmRsZSgpYCBhbmQKLSAgYGdzdF92aWRlb19vdmVybGF5X3NldF9yZW5kZXJfcmVjdGFuZ2xlKClgIGZ1bmN0aW9ucy4KLS0gVGhlIGBnbHRyYW5zZm9ybWF0aW9uYCBlbGVtZW50IG5vdyBjb3JyZWN0bHkgdHJhbnNmb3JtcyBtb3VzZSBjb29yZGluYXRlcyAoaW4KLSAgd2luZG93IHNwYWNlKSB0byBzdHJlYW0gY29vcmRpbmF0ZXMgZm9yIGJvdGggcGVyc3BlY3RpdmUgYW5kIG9ydGhvZ3JhcGhpYwotICBwcm9qZWN0aW9ucy4KLS0gVGhlIGBnbHRyYW5zZm9ybWF0aW9uYCBlbGVtZW50IG5vdyBkZXRlY3RzIGlmIHRoZQotICBgR3N0VmlkZW9BZmZpbmVUcmFuc2Zvcm1hdGlvbk1ldGFgIGlzIHN1cHBvcnRlZCBkb3duc3RyZWFtIGFuZCB3aWxsIGVmZmljaWVudGx5Ci0gIHBhc3MgaXRzIHRyYW5zZm9ybWF0aW9uIGRvd25zdHJlYW0uIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBhcyBpdAotICByZXN1bHRzIGluIGxlc3MgcHJvY2Vzc2luZyBiZWluZyByZXF1aXJlZC4KLS0gVGhlIHdheWxhbmQgaW1wbGVtZW50YXRpb24gbm93IHVzZXMgdGhlIG11bHRpLXRocmVhZGVkIHNhZmUgZXZlbnQtbG9vcCBBUEkKLSAgYWxsb3dpbmcgY29ycmVjdCB1c2FnZSBpbiBhcHBsaWNhdGlvbnMgdGhhdCBjYWxsIHdheWxhbmQgZnVuY3Rpb25zIGZyb20KLSAgbXVsdGlwbGUgdGhyZWFkcy4KLS0gU3VwcG9ydCBmb3IgbmF0aXZlIDkwIGRlZ3JlZSByb3RhdGlvbnMgYW5kIGhvcml6b250YWwvdmVydGljYWwgZmxpcHMKLSAgaW4gYGdsaW1hZ2VzaW5rYC4KLQotIyMjIyBWdWxrYW4KLQotLSBUaGUgVnVsa2FuIGVsZW1lbnRzIG5vdyB3b3JrIHVuZGVyIFdheWxhbmQgYW5kIGhhdmUgcmVjZWl2ZWQgbnVtZXJvdXMKLSAgYnVnZml4ZXMuCi0KLSMjIyMgUU1MIGVsZW1lbnRzCi0KLS0gYHFtbGdsc2lua2AgdmlkZW8gc2luayBub3cgd29ya3Mgb24gbW9yZSBwbGF0Zm9ybXMsIG5vdGFibHksIFdpbmRvd3MsIFdheWxhbmQsCi0gIGFuZCBRdCdzIGVnbGZzIChmb3IgZW1iZWRkZWQgZGV2aWNlcyB3aXRoIGFuIE9wZW5HTCBpbXBsZW1lbnRhdGlvbikgaW5jbHVkaW5nCi0gIHRoZSBSYXNwYmVycnkgUGkuCi0tIE5ldyBlbGVtZW50IGBxbWxnbHNyY2AgdG8gcmVjb3JkIGEgUU1MIHNjZW5lIGludG8gYSBHU3RyZWFtZXIgcGlwZWxpbmUuCi0KLSMjIyMgS01TIHZpZGVvIHNpbmsKLQotLSBOZXcgZWxlbWVudCBga21zc2lua2AgdG8gcmVuZGVyIHZpZGVvIHVzaW5nIERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlcgotICAoRFJNKSBhbmQgS2VybmVsIE1vZGUgU2V0dGluZyAoS01TKSBzdWJzeXN0ZW1zIGluIHRoZSBMaW51eAotICBrZXJuZWwuIEl0IGlzIG9yaWVudGVkIHRvIGJlIHVzZWQgbW9zdGx5IGluIGVtYmVkZGVkIHN5c3RlbXMuCi0KLSMjIyMgV2F5bGFuZCB2aWRlbyBzaW5rCi0KLS0gYHdheWxhbmRzaW5rYCBub3cgc3VwcG9ydHMgdGhlIHdsX3ZpZXdwb3J0ZXIgZXh0ZW5zaW9uIGFsbG93aW5nCi0gIHZpZGVvIHNjYWxpbmcgYW5kIGNyb3BwaW5nIHRvIGJlIGRlbGVnYXRlZCB0byB0aGUgV2F5bGFuZAotICBjb21wb3NpdG9yLiBUaGlzIGV4dGVuc2lvbiBpcyBhbHNvIGJlZW4gbWFkZSBvcHRpb25hbCwgc28gdGhhdCBpdCBjYW4KLSAgYWxzbyB3b3JrIG9uIGN1cnJlbnQgY29tcG9zaXRvcnMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LiBJdCBhbHNvIG5vdyBoYXMKLSAgc3VwcG9ydCBmb3IgdGhlIHZpZGVvIG1ldGEsIGFsbG93aW5nIHplcm8tY29weSBvcGVyYXRpb25zIGluIG1vcmUKLSAgY2FzZXMuCi0KLSMjIyMgRFZCIGltcHJvdmVtZW50cwotCi0tIGBkdmJzcmNgIG5vdyBoYXMgYmV0dGVyIGRlbGl2ZXJ5LXN5c3RlbSBhdXRvZGV0ZWN0aW9uIGFuZCBzZXZlcmFsCi0gIG5ldyBwYXJhbWV0ZXIgc2FuaXR5LWNoZWNrcyB0byBpbXByb3ZlIGl0cyByZXNpbGllbmNlIHRvIGNvbmZpZ3VyYXRpb24KLSAgb21pc3Npb25zIGFuZCBlcnJvcnMuIFN1cGVyZmx1b3VzIHBvbGxpbmcgY29udGludWVzIHRvIGJlIHRyaW1tZWQgZG93biwKLSAgYW5kIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGhhcyBiZWVuIG1hZGUgbW9yZSBjb25zaXN0ZW50IGFuZCBwcmVjaXNlLgotICBBZGRpdGlvbmFsbHksIHRoZSBjaGFubmVsLWNvbmZpZ3VyYXRpb24gcGFyc2VyIG5vdyBzdXBwb3J0cyB0aGUgbmV3IGR2YnY1Ci0gIGZvcm1hdCwgZW5hYmxpbmcgYGR2YmJhc2ViaW5gIHRvIGF1dG9tYXRpY2FsbHkgcGxheWJhY2sgY29udGVudCB0cmFuc21pdHRlZAotICBvbiBkZWxpdmVyeSBzeXN0ZW1zIHRoYXQgcHJldmlvdXNseSByZXF1aXJlZCBtYW51YWwgZGVzY3JpcHRpb24sIGxpa2UgSVNEQi1ULgotCi0jIyMjIERBU0gsIEhMUyBhbmQgYWRhcHRpdmVkZW11eAotCi0tIEhMUyBub3cgaGFzIHN1cHBvcnQgZm9yIEFsdGVybmF0ZSBSZW5kaXRpb24gYXVkaW8gYW5kIHZpZGVvIHRyYWNrcy4gRnVsbAotICBzdXBwb3J0IGZvciBBbHRlcm5hdGUgUmVuZGl0aW9uIHN1YnRpdGxlIHRyYWNrcyB3aWxsIGJlIGluIGFuIHVwY29taW5nIHJlbGVhc2UuCi0tIERBU0ggcmVjZWl2ZWQgc3VwcG9ydCBmb3Iga2V5ZnJhbWUtb25seSB0cmljayBtb2RlcyBpZiB0aGUKLSAgYEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFX0tFWV9VTklUU2AgZmxhZyBpcyBnaXZlbiB3aGVuIHNlZWtpbmcuIEl0IHdpbGwKLSAgb25seSBkb3dubG9hZCBrZXlmcmFtZXMgdGhlbiwgd2hpY2ggc2hvdWxkIGhlbHAgd2l0aCBoaWdoLXNwZWVkIHBsYXliYWNrLgotICBDaGFuZ2VzIHRvIHNraXAgb3ZlciBtdWx0aXBsZSBmcmFtZXMgYmFzZWQgb24gYmFuZHdpZHRoIGFuZCBvdGhlciBtZXRyaWNzCi0gIHdpbGwgYmUgYWRkZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgotLSBMb3RzIG9mIHJlbGlhYmlsaXR5IGZpeGVzIGFyb3VuZCBzZWVrIGhhbmRsaW5nIGFuZCBiaXRyYXRlIHN3aXRjaGluZy4KLQotIyMjIyBCbHVldG9vdGggaW1wcm92ZW1lbnRzCi0KLS0gVGhlIGBhdmR0cHNyY2AgZWxlbWVudCBub3cgc3VwcG9ydHMgbWV0YWRhdGEgc3VjaCBhcyB0cmFjayB0aXRsZSwgYXJ0aXN0Ci0gIG5hbWUsIGFuZCBtb3JlLCB3aGljaCBkZXZpY2VzIGNhbiBzZW5kIHZpYSBBVlJDUC4gVGhlc2UgYXJlIHB1Ymxpc2hlZCBhcwotICB0YWdzIG9uIHRoZSBwaXBlbGluZS4KLS0gVGhlIGBhMmRwc2lua2AgZWxlbWVudCByZWNlaXZlZCBzb21lIGxvdmUgYW5kIHdhcyBjbGVhbmVkIHVwIHNvIHRoYXQgaXQKLSAgYWN0dWFsbHkgd29ya3MgYWZ0ZXIgdGhlIGluaXRpYWwgR1N0cmVhbWVyIDEuMCBwb3J0LgotCi0jIyMjIEdTdHJlYW1lciBWQUFQSQotCi0tIEFsbCB0aGUgZGVjb2RlcnMgaGF2ZSBiZWVuIHNwbGl0LCBvbmUgcGx1Z2luIGZlYXR1cmUgcGVyIGNvZGVjLiBTbwotICBmYXIsIHRoZSBhdmFpbGFibGUgb25lcywgZGVwZW5kaW5nIG9uIHRoZSBkcml2ZXIsIGFyZToKLSAgYHZhYXBpbXBlZzJkZWNgLCBgdmFhcGloMjY0ZGVjYCwgYHZhYXBpaDI2NWRlY2AsIGB2YWFwaXZjMWRlY2AsIGB2YWFwaXZwOGRlY2AsCi0gIGB2YWFwaXZwOWRlY2AgYW5kIGB2YWFwaWpwZWdkZWNgICh3aGljaCBhbHJlYWR5IHdhcyBzcGxpdCkuCi0tIEltcHJvdmVtZW50cyB3aGVuIG1hcHBpbmcgVkEgc3VyZmFjZXMgaW50byBtZW1vcnkuIEl0IG5vdyBkaWZmZXJlbnRpYXRlcwotICBiZXR3ZWVuIG5lZ290aWF0aW9uIGNhcHMgYW5kIGFsbG9jYXRpb25zIGNhcHMsIHNpbmNlIHRoZSBhbGxvY2F0aW9uCi0gIG1lbW9yeSBmb3Igc3VyZmFjZXMgbWF5IGJlIGJpZ2dlciB0aGFuIG9uZSB0aGF0IGlzIGdvaW5nIHRvIGJlCi0gIG1hcHBlZC4KLS0gYHZhYXBpaDI2NWVuY2Agbm93IHN1cHBvcnRzIGNvbnN0YW50IGJpdHJhdGUgbW9kZSAoQ0JSKS4KLS0gU2luY2Ugc2V2ZXJhbCBWQSBkcml2ZXJzIGFyZSB1bm1haW50YWluZWQsIHdlIGRlY2lkZSB0byBrZWVwIGEgd2hpdGVsaXN0Ci0gIHdpdGggdGhlIHZhIGRyaXZlcnMgd2UgYWN0dWFsbHkgdGVzdCwgd2hpY2ggaXMgbW9zdGx5IHRoZSBpOTE1IGFuZCB0byBhIGxlc3NlcgotICBkZWdyZWUgZ2FsbGl1bSBmcm9tIHRoZSBtZXNhIHByb2plY3QuIEV4cG9ydGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgYEdTVF9WQUFQSV9BTExfRFJJVkVSU2AgZGlzYWJsZXMgdGhlIHdoaXRlbGlzdC4KLS0gUGx1Z2luIGZlYXR1cmVzIGFyZSByZWdpc3RlcmVkIGF0IHJ1bi10aW1lLCBhY2NvcmRpbmcgdG8gdGhlaXIgc3VwcG9ydCBieQotICB0aGUgbG9hZGVkIFZBIGRyaXZlci4gU28gb25seSB0aGUgZGVjb2RlcnMgYW5kIGVuY29kZXIgc3VwcG9ydGVkIGJ5IHRoZQotICBzeXN0ZW0gYXJlIHJlZ2lzdGVyZWQuIFNpbmNlIHRoZSBkcml2ZXIgY2FuIGNoYW5nZSwgc29tZSBkZXBlbmRlbmNpZXMgYXJlCi0gIHRyYWNrZWQgdG8gaW52YWxpZGF0ZSB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5IGFuZCByZWxvYWQgdGhlIHBsdWdpbi4KLS0gYGRtYWJ1ZmAgaW1wb3J0YXRpb24gZnJvbSB1cHN0cmVhbSBoYXMgYmVlbiBpbXByb3ZlZCwgZ2FpbmluZyBwZXJmb3JtYW5jZS4KLS0gYHZhYXBpcG9zdHByb2NgIG5vdyBjYW4gbmVnb3RpYXRlIGJ1ZmZlciB0cmFuc2Zvcm1hdGlvbnMgdmlhIGNhcHMuCi0tIERlY29kZXJzIG5vdyBjYW4gZG8gSS1mcmFtZSBvbmx5IHJldmVyc2UgcGxheWJhY2suIFRoaXMgZGVjb2RlcyBJLWZyYW1lcwotICBvbmx5IGJlY2F1c2UgdGhlIHN1cmZhY2UgcG9vbCBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlcXVpcmVkIGJ5IHRoZSBHT1AgdG8gc2hvdyBhbGwgdGhlCi0gIGZyYW1lcy4KLS0gVGhlIHVwbG9hZCBvZiBmcmFtZXMgb250byBuYXRpdmUgR0wgdGV4dHVyZXMgaGFzIGJlZW4gb3B0aW1pemVkIHRvbywga2VlcGluZwotICBhIGNhY2hlIG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGZvciB0aGUgb2ZmZXJlZCB0ZXh0dXJlcyBieSB0aGUgc2luay4KLQotIyMjIyBWNEwyIGNoYW5nZXMKLQotLSBNb3JlIHBpeGVscyBmb3JtYXRzIGFyZSBub3cgc3VwcG9ydGVkCi0tIERlY29kZXIgaXMgbm93IHVzaW5nIGBHX1NFTEVDVElPTmAgaW5zdGVhZCBvZiB0aGUgZGVwcmVjYXRlZCBgR19DUk9QYAotLSBEZWNvZGVyIG5vdyB1c2VzIHRoZSBgU1RPUGAgY29tbWFuZCB0byBoYW5kbGUgRU9TCi0tIFRyYW5zZm9ybSBlbGVtZW50IGNhbiBub3cgc2NhbGUgdGhlIHBpeGVsIGFzcGVjdCByYXRpbwotLSBDb2xvcmltZXRyeSBzdXBwb3J0IGhhcyBiZWVuIGltcHJvdmVkIGV2ZW4gbW9yZQotLSBXZSBub3cgc3VwcG9ydCB0aGUgYE9VVFBVVF9PVkVSTEFZYCB0eXBlIG9mIHZpZGVvIG5vZGUgaW4gdjRsMnNpbmsKLQotIyMjIyBNaXNjZWxsYW5lb3VzCi0KLS0gYG11bHRpcXVldWVgJ3MgaW5wdXQgcGFkcyBnYWluZWQgYSBuZXcgYCJncm91cC1pZCJgIHByb3BlcnR5IHdoaWNoCi0gIGNhbiBiZSB1c2VkIHRvIGdyb3VwIGlucHV0IHN0cmVhbXMuIFR5cGljYWxseSBvbmUgd2lsbCBhc3NpZ24KLSAgZGlmZmVyZW50IGlkIG51bWJlcnMgdG8gYXVkaW8sIHZpZGVvIGFuZCBzdWJ0aXRsZSBzdHJlYW1zIGZvcgotICBleGFtcGxlLiBUaGlzIHdheSBgbXVsdGlxdWV1ZWAgY2FuIG1ha2Ugc3VyZSBzdHJlYW1zIG9mIHRoZSBzYW1lCi0gIHR5cGUgYWR2YW5jZSBpbiBsb2Nrc3RlcCBpZiBzb21lIG9mIHRoZSBzdHJlYW1zIGFyZSB1bmxpbmtlZCBhbmQgdGhlCi0gIGAic3luYy1ieS1ydW5uaW5nLXRpbWUiYCBwcm9wZXJ0eSBpcyBzZXQuIFRoaXMgaXMgdXNlZCBpbgotICBkZWNvZGViaW4zL3BsYXliaW4zIHRvIGltcGxlbWVudCBhbG1vc3QtaW5zdGFudGFuZW91cyBzdHJlYW0KLSAgc3dpdGNoaW5nLiAgVGhlIGdyb3VwaW5nIGlzIHJlcXVpcmVkIGJlY2F1c2UgZGlmZmVyZW50IGRvd25zdHJlYW0KLSAgcGF0aHMgKGF1ZGlvLCB2aWRlbywgZXRjLikgIG1heSBoYXZlIGRpZmZlcmVudCBidWZmZXJpbmcvbGF0ZW5jeQotICBldGMuIHNvIG1pZ2h0IGJlIGNvbnN1bWluZyBkYXRhIGZyb20gbXVsdGlxdWV1ZSB3aXRoIGEgc2xpZ2h0bHkKLSAgZGlmZmVyZW50IHBoYXNlLCBhbmQgaWYgd2UgdHJhY2sgZGlmZmVyZW50IHN0cmVhbSBncm91cHMgc2VwYXJhdGVseQotICB3ZSBtaW5pbWl6ZSBzdHJlYW0gc3dpdGNoaW5nIGRlbGF5cyBhbmQgYnVmZmVyaW5nIGluc2lkZSB0aGUKLSAgYG11bHRpcXVldWVgLgotLSBgYWxzYXNyY2Agbm93IHN1cHBvcnRzIEFMU0EgZHJpdmVycyB3aXRob3V0IGEgcG9zaXRpb24gZm9yIGVhY2gKLSAgY2hhbm5lbCwgdGhpcyBpcyBjb21tb24gaW4gc29tZSBwcm9mZXNzaW9uYWwgb3IgaW5kdXN0cmlhbCBoYXJkd2FyZS4KLS0gYGxpYnZweGAgYmFzZWQgZGVjb2RlcnMgKGB2cDhkZWNgIGFuZCBgdnA5ZGVjYCkgbm93IGNyZWF0ZSBtdWx0aXBsZSB0aHJlYWRzIG9uCi0gIGNvbXB1dGVycyB3aXRoIG11bHRpcGxlIENQVXMgYXV0b21hdGljYWxseS4KLS0gYHJmYnNyY2AgLSB1c2VkIGZvciBjYXB0dXJpbmcgZnJvbSBhIFZOQyBzZXJ2ZXIgLSBoYXMgc2VlbiBhIGxvdCBvZgotICBkZWJ1Z2dpbmcuIEl0IG5vdyBzdXBwb3J0cyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIFJGQgotICBwcm90b2NvbCBhbmQgdXNlcyBHSU8gZXZlcnl3aGVyZS4KLS0gYHRzZGVtdXhgIGNhbiBub3cgcmVhZCBBVFNDIEUtQUMtMyBzdHJlYW1zLgotLSBOZXcgYEdzdFZpZGVvRGlyZWN0aW9uYCB2aWRlbyBvcmllbnRhdGlvbiBpbnRlcmZhY2UgZm9yIHJvdGF0aW5nLCBmbGlwcGluZwotICBhbmQgbWlycm9yaW5nIHZpZGVvIGluIDkwwrAgc3RlcHMuIEl0IGlzIGltcGxlbWVudGVkIGJ5IHRoZSBgdmlkZW9mbGlwYCBhbmQKLSAgYGdsdmlkZW9mbGlwYCBlbGVtZW50cyBjdXJyZW50bHkuCi0tIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBnaXZlIGBhcHBzcmNgIGEgZHVyYXRpb24gaW4gdGltZSwgYW5kIHRoZXJlIGlzIG5vdyBhCi0gIG5vbi1ibG9ja2luZyB0cnktcHVsbCBBUEkgZm9yIGBhcHBzaW5rYCB0aGF0IHJldHVybnMgTlVMTCBpZiBub3RoaW5nIGlzCi0gIGF2YWlsYWJsZSByaWdodCBub3cuCi0tIGB4MjY0ZW5jYCBoYXMgc3VwcG9ydCBub3cgZm9yIGNocm9tYS1zaXRlIGFuZCBjb2xvcmltZXRyeSBzZXR0aW5ncwotLSBBIG5ldyBKUEVHMjAwMCBwYXJzZXIgZWxlbWVudCB3YXMgYWRkZWQsIGFuZCB0aGUgSlBFRzIwMDAgY2FwcyB3ZXJlIGNsZWFuZWQKLSAgdXAgYW5kIGdhaW5lZCBtb3JlIGluZm9ybWF0aW9uIG5lZWRlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFJUUCBhbmQgdmFyaW91cwotICBjb250YWluZXIgZm9ybWF0cy4KLS0gUmV2ZXJzZSBwbGF5YmFjayBzdXBwb3J0IGZvciBgdmlkZW9yYXRlYCBhbmQgYGRlaW50ZXJsYWNlYCB3YXMgaW1wbGVtZW50ZWQKLS0gVmFyaW91cyBpbXByb3ZlbWVudHMgZXZlcnl3aGVyZSBmb3IgcmV2ZXJzZSBwbGF5YmFjayBhbmQgYEtFWV9VTklUU2AgdHJpY2sgbW9kZQotLSBOZXcgY2xlYW5lZCB1cCBgcmF3YXVkaW9wYXJzZWAgYW5kIGByYXd2aWRlb3BhcnNlYCBlbGVtZW50cyB0aGF0IHJlcGxhY2UgdGhlCi0gIG9sZCBgYXVkaW9wYXJzZWAgYW5kIGB2aWRlb3BhcnNlYCBlbGVtZW50cy4gVGhlcmUgYXJlIGNvbXBhdGliaWxpdHkgZWxlbWVudAotICBmYWN0b3JpZXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBvbGQgbmFtZXMgdG8gYWxsb3cgZXhpc3RpbmcgY29kZSB0byBjb250aW51ZQotICB0byB3b3JrLgotLSBUaGUgRGVja2xpbmsgcGx1Z2luIGdhaW5lZCBzdXBwb3J0IGZvciAxMCBiaXQgdmlkZW8gU01QVEUgdGltZWNvZGVzLCBhbmQKLSAgZ2VuZXJhbGx5IGdvdCBtYW55IGJ1Z2ZpeGVzIGZvciB2YXJpb3VzIGlzc3Vlcy4KLS0gTmV3IEFQSSBpbiBgR3N0UGxheWVyYCBmb3Igc2V0dGluZyB0aGUgbXVsdGl2aWV3IG1vZGUgZm9yIHN0ZXJlb3Njb3BpYwotICB2aWRlbywgc2V0dGluZyBhbiBIVFRQL1JUU1AgdXNlciBhZ2VudCBhbmQgYSB0aW1lIG9mZnNldCBiZXR3ZWVuIGF1ZGlvIGFuZAotICB2aWRlby4gSW4gYWRkaXRpb24gdG8gdGhhdCwgdGhlcmUgd2VyZSB2YXJpb3VzIGJ1Z2ZpeGVzIGFuZCB0aGUgbmV3Ci0gIGdzdC1leGFtcGxlcyBtb2R1bGUgY29udGFpbnMgQW5kcm9pZCwgaU9TLCBHVEsrIGFuZCBRdCBleGFtcGxlIGFwcGxpY2F0aW9ucy4KLS0gYEdzdEJpbmAgaGFzIG5ldyBBUEkgZm9yIHN1cHByZXNzaW5nIHZhcmlvdXMgYEdzdEVsZW1lbnRgIG9yIGBHc3RPYmplY3RgCi0gIGZsYWdzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGFmZmVjdGVkIGJ5IGFkZGVkL3JlbW92ZWQgY2hpbGQgZWxlbWVudHMuIFRoaXMKLSAgbmV3IEFQSSBhbGxvd3MgYEdzdEJpbmAgc3ViY2xhc3NlcyB0byBoYW5kbGUgZm9yIHRoZW1zZWx2ZXMgaWYgdGhleQotICBzaG91bGQgYmUgY29uc2lkZXJlZCBhIHNpbmsgb3Igc291cmNlIGVsZW1lbnQsIGZvciBleGFtcGxlLgotLSBUaGUgYHN1YnBhcnNlYCBlbGVtZW50IGNhbiBoYW5kbGUgV2ViVlRUIHN0cmVhbXMgbm93LgotLSBBIG5ldyBgc2Rwc3JjYCBlbGVtZW50IHdhcyBhZGRlZCB0aGF0IGNhbiByZWFkIGFuIFNEUCBmcm9tIGEgZmlsZSwgb3IgZ2V0IGl0Ci0gIGFzIGEgc3RyaW5nIGFzIHByb3BlcnR5IGFuZCB0aGVuIHNldHMgdXAgYW4gUlRQIHBpcGVsaW5lIGFjY29yZGluZ2x5LgotCi0jIyMgUGx1Z2luIG1vdmVzCi0KLU5vIHBsdWdpbnMgd2VyZSBtb3ZlZCB0aGlzIGN5Y2xlLiBXZSdsbCBtYWtlIHVwIGZvciBpdCBuZXh0IGN5Y2xlLCBwcm9taXNlIQotCi0jIyMgUmV3cml0dGVuIG1lbW9yeSBsZWFrIHRyYWNlcgotCi1HU3RyZWFtZXIgaGFzIGhhZCBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvIHRyYWNlIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YKLWJvdGggbWluaS1vYmplY3RzIChidWZmZXJzLCBldmVudHMsIGNhcHMsIGV0Yy4pIGFuZCBvYmplY3RzIGluIHRoZSBmb3JtIG9mIHRoZQotaW50ZXJuYWwgYEdzdEFsbG9jVHJhY2VgIHRyYWNpbmcgc3lzdGVtLiBUaGlzIEFQSSB3YXMgbmV2ZXIgZXhwb3NlZCBpbiB0aGUKLTEueCBBUEkgc2VyaWVzIHRob3VnaC4gV2hlbiByZXF1ZXN0ZWQsIHRoaXMgd291bGQgZHVtcCBhIGxpc3Qgb2Ygb2JqZWN0cyBhbmQKLW1pbmktb2JqZWN0cyBhdCBleGl0IHRpbWUgd2hpY2ggaGFkIHN0aWxsIG5vdCBiZWVuIGZyZWVkIGF0IHRoYXQgcG9pbnQsCi1lbmFibGVkIHdpdGggYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIFRoaXMgc3Vic3lzdGVtIGhhcyBub3cgYmVlbiByZW1vdmVkCi1pbiBmYXZvdXIgb2YgYSBuZXcgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIHJlY2VudGx5LWFkZGVkIHRyYWNpbmcgZnJhbWV3b3JrLgotCi1UcmFjaW5nIGhvb2tzIGhhdmUgYmVlbiBhZGRlZCB0byB0cmFjZSB0aGUgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIG9mCi1Hc3RPYmplY3RzIGFuZCBtaW5pLW9iamVjdHMsIGFuZCBhIG5ldyB0cmFjZXIgcGx1Z2luIGhhcyBiZWVuIHdyaXR0ZW4gdXNpbmcKLXRob3NlIG5ldyBob29rcyB0byB0cmFjayB3aGljaCBvYmplY3RzIGFyZSBzdGlsbCBsaXZlIGFuZCB3aGljaCBhcmUgbm90LiBJZgotR1N0cmVhbWVyIGhhcyBiZWVuIGNvbXBpbGVkIGFnYWluc3QgdGhlIGxpYnVud2luZCBsaWJyYXJ5LCB0aGUgbmV3IGxlYWtzIHRyYWNlcgotd2lsbCByZW1lbWJlciB3aGVyZSBvYmplY3RzIHdlcmUgYWxsb2NhdGVkIGZyb20gYXMgd2VsbC4gQnkgZGVmYXVsdCB0aGUgbGVha3MKLXRyYWNlciB3aWxsIHNpbXBseSBvdXRwdXQgYSB3YXJuaW5nIGlmIGxlYWtzIGhhdmUgYmVlbiBkZXRlY3RlZCBvbiBgZ3N0X2RlaW5pdCgpYC4KLQotSWYgdGhlIGBHU1RfTEVBS1NfVFJBQ0VSX1NJR2AgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCB0aGUgbGVha3MgdHJhY2VyCi13aWxsIGFsc28gaGFuZGxlIHRoZSBmb2xsb3dpbmcgVU5JWCBzaWduYWxzOgotCi0gLSBgU0lHVVNSMWA6IGxvZyBhbGl2ZSBvYmplY3RzCi0gLSBgU0lHVVNSMmA6IGNyZWF0ZSBhIGNoZWNrcG9pbnQgYW5kIHByaW50IGEgbGlzdCBvZiBvYmplY3RzIGNyZWF0ZWQgYW5kCi0gICBkZXN0cm95ZWQgc2luY2UgdGhlIHByZXZpb3VzIGNoZWNrcG9pbnQuCi0KLVVuZm9ydHVuYXRlbHkgdGhpcyB3aWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MgZHVlIHRvIG5vIHNpZ25hbHMsIGhvd2V2ZXIuCi0KLUlmIHRoZSBgR1NUX0xFQUtTX1RSQUNFUl9TVEFDS19UUkFDRWAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCB0aGUgbGVha3MKLXRyYWNlciB3aWxsIGFsc28gbG9nIHRoZSBjcmVhdGlvbiBzdGFjayB0cmFjZSBvZiBsZWFrZWQgb2JqZWN0cy4gVGhpcyBtYXkKLXNpZ25pZmljYW50bHkgaW5jcmVhc2UgbWVtb3J5IGNvbnN1bXB0aW9uIGhvd2V2ZXIuCi0KLU5ldyBgTUFZX0JFX0xFQUtFRGAgZmxhZ3MgaGF2ZSBiZWVuIGFkZGVkIHRvIEdzdE9iamVjdCBhbmQgR3N0TWluaU9iamVjdCwgc28KLXRoYXQgb2JqZWN0cyBhbmQgbWluaS1vYmplY3RzIHRoYXQgYXJlIGxpa2VseSB0byBzdGF5IGFyb3VuZCBmb3JldmVyIGNhbiBiZQotZmxhZ2dlZCBhbmQgYmxhY2tsaXN0ZWQgZnJvbSB0aGUgbGVhayBvdXRwdXQuCi0KLVRvIGdpdmUgdGhlIG5ldyBsZWFrIHRyYWNlciBhIHNwaW4sIHNpbXBseSBjYWxsIGFueSBHU3RyZWFtZXIgYXBwbGljYXRpb24gc3VjaAotYXMgYGdzdC1sYXVuY2gtMS4wYCBvciBgZ3N0LXBsYXktMS4wYCBsaWtlIHRoaXM6Ci0KLSAgICBHU1RfVFJBQ0VSUz1sZWFrcyBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MTAgISBmYWtlc2luawotCi1JZiB0aGVyZSBhcmUgYW55IGxlYWtzLCBhIHdhcm5pbmcgd2lsbCBiZSByYWlzZWQgYXQgdGhlIGVuZC4KLQotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB0cmFjZSBvbmx5IGNlcnRhaW4gdHlwZXMgb2Ygb2JqZWN0cyBvciBtaW5pLW9iamVjdHM6Ci0KLSAgICBHU1RfVFJBQ0VSUz0ibGVha3MoR3N0RXZlbnQsR3N0TWVzc2FnZSkiIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz0xMCAhIGZha2VzaW5rCi0KLVRoaXMgZGVkaWNhdGVkIGxlYWtzIHRyYWNlciBpcyBtdWNoIG11Y2ggZmFzdGVyIHRoYW4gdmFsZ3JpbmQgc2luY2UgYWxsIGNvZGUgaXMKLWV4ZWN1dGVkIG5hdGl2ZWx5IGluc3RlYWQgb2YgYmVpbmcgaW5zdHJ1bWVudGVkLiBUaGlzIG1ha2VzIGl0IHZlcnkgc3VpdGFibGUKLWZvciB1c2Ugb24gc2xvdyBtYWNoaW5lcyBvciBlbWJlZGRlZCBkZXZpY2VzLiBJdCBpcyBob3dldmVyIGxpbWl0ZWQgdG8gY2VydGFpbgotdHlwZXMgb2YgbGVha3MgYW5kIHdvbid0IGNhdGNoIG1lbW9yeSBsZWFrcyB3aGVuIHRoZSBhbGxvY2F0aW9uIGhhcyBiZWVuIG1hZGUKLXZpYSBwbGFpbiBvbGQgYG1hbGxvYygpYCBvciBgZ19tYWxsb2MoKWAgb3Igb3RoZXIgbWVhbnMuIEl0IHdpbGwgYWxzbyBub3QgdHJhY2UKLW5vbi1Hc3RPYmplY3QgR09iamVjdHMuCi0KLVRoZSBnb2FsIGlzIHRvIGVuYWJsZSBsZWFrIHRyYWNpbmcgb24gR1N0cmVhbWVyJ3MgQ29udGludW91cy1JbnRlZ3JhdGlvbiBhbmQKLXRlc3Rpbmcgc3lzdGVtLCBib3RoIGZvciB0aGUgcmVndWxhciB1bml0IHRlc3RzIChtYWtlIGNoZWNrKSBhbmQgbWVkaWEgdGVzdHMKLShnc3QtdmFsaWRhdGUpLCBzbyB0aGF0IGFjY2lkZW50YWwgbGVha3MgaW4gY29tbW9uIGNvZGUgcGF0aHMgY2FuIGJlIGRldGVjdGVkCi1hbmQgZml4ZWQgcXVpY2tseS4KLQotRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5ldyB0cmFjZXIsIGNoZWNrIG91dCBHdWlsbGF1bWUgRGVzbW90dGVzJ3MKLVsiVHJhY2tpbmcgTWVtb3J5IExlYWtzIl1bbGVha3MtdGFsa10gdGFsayBvciBoaXMgW2Jsb2cgcG9zdF1bbGVha3MtYmxvZ10gYWJvdXQKLXRoZSB0b3BpYy4KLQotW2xlYWtzLXRhbGtdOiBodHRwczovL2dzdGNvbmYudWJpY2FzdC50di92aWRlb3MvdHJhY2tpbmctbWVtb3J5LWxlYWtzLwotW2xlYWtzLWJsb2ddOiBodHRwczovL2Jsb2cuZGVzbW90dGVzLmJlLz9wb3N0LzIwMTYvMDYvMjAvR1N0cmVhbWVyLWxlYWtzLXRyYWNlcgotCi0jIyMgR0VTIGFuZCBOTEUgY2hhbmdlcwotCi0tIENsaXAgcHJpb3JpdGllcyBhcmUgbm93IGhhbmRsZWQgYnkgdGhlIGxheWVycywgYW5kIHRoZSBHRVNUaW1lbGluZUVsZW1lbnQKLSAgcHJpb3JpdHkgcHJvcGVydHkgaXMgbm93IGRlcHJlY2F0ZWQgYW5kIHVudXNlZAotLSBFbmhhbmNlZCAoZGUpaW50ZXJsYWNpbmcgc3VwcG9ydCB0byBhbHdheXMgdXNlIHRoZSBgZGVpbnRlcmxhY2VgIGVsZW1lbnQKLSAgYW5kIGV4cG9zZSBuZWVkZWQgcHJvcGVydGllcyB0byB1c2VycwotLSBBbGxvdyByZXVzaW5nIGNsaXBzIGNoaWxkcmVuIGFmdGVyIHJlbW92aW5nIHRoZSBjbGlwIGZyb20gYSBsYXllcgotLSBXZSBhcmUgbm93IHRlc3RpbmcgbWFueSBtb3JlIHJlbmRlcmluZyBmb3JtYXRzIGluIHRoZSBnc3QtdmFsaWRhdGUKLSAgdGVzdCBzdWl0ZSwgYW5kIGZhaWx1cmVzIGhhdmUgYmVlbiBmaXhlZC4KLS0gQWxzbyBtYW55IGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkIGluIHRoaXMgY3ljbGUhCi0KLSMjIyBHU3RyZWFtZXIgdmFsaWRhdGUgY2hhbmdlcwotCi1UaGlzIGN5Y2xlIGhhcyBiZWVuIGZvY3VzZWQgb24gbWFraW5nIEdzdFZhbGlkYXRlIG1vcmUgdGhhbiBqdXN0IGEgdmFsaWRhdGluZwotdG9vbCwgYnV0IGFsc28gYSB0b29sIHRvIGhlbHAgZGV2ZWxvcGVycyBkZWJ1ZyB0aGVpciBHU3RyZWFtZXIgaXNzdWVzLiBXaGVuCi1yZXBvcnRpbmcgaXNzdWVzLCB3ZSB0cnkgdG8gZ2F0aGVyIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUgYW5kIGV4cG9zZQotaXQgdG8gZW5kIHVzZXJzIGluIGEgdXNlZnVsIHdheS4gRm9yIGFuIGV4YW1wbGUgb2Ygc3VjaCBlbmhhbmNlbWVudHMsIGNoZWNrIG91dAotVGhpYmF1bHQgU2F1bmllcidzIFtibG9nIHBvc3RdKGltcHJvdmluZy1kZWJ1Z2dpbmctZ3N0cmVhbWVyLXZhbGlkYXRlKSBhYm91dAotdGhlIG5ldyBOb3QgTmVnb3RpYXRlZCBFcnJvciByZXBvcnRpbmcgbWVjaGFuaXNtLgotCi1QbGF5YmluMyBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkIHNvIHdlIGNhbiBydW4gdmFsaWRhdGUgdGVzdHMgd2l0aCBgcGxheWJpbjNgCi1pbnN0ZWFkIG9mIHBsYXliaW4uCi0KLVdlIGFyZSBub3cgYWJsZSB0byBwcm9wZXJseSBjb21tdW5pY2F0ZSBiZXR3ZWVuIGBnc3QtdmFsaWRhdGUtbGF1bmNoZXJgIGFuZAotbGF1bmNoZWQgc3VicHJvY2Vzc2VzIHdpdGggYWN0dWFsIElQQyBiZXR3ZWVuIHRoZW0uIFRoYXQgaGFzIGVuYWJsZWQgdGhlIHRlc3QKLWxhdW5jaGVyIHRvIGhhbmRsZSBmYWlsaW5nIHRlc3RzIHNwZWNpZnlpbmcgdGhlIGV4YWN0IGV4cGVjdGVkIGlzc3VlKHMpLgotCi1baW1wcm92aW5nLWRlYnVnZ2luZy1nc3RyZWFtZXItdmFsaWRhdGVdOiBodHRwczovL2Jsb2dzLnMtb3NnLm9yZy9pbXByb3ZpbmctZGVidWdnaW5nLWdzdHJlYW1lci12YWxpZGF0ZS8KLQotIyMjIGdzdC1saWJhdiBjaGFuZ2VzCi0KLWdzdC1saWJhdiB1c2VzIHRoZSByZWNlbnRseSByZWxlYXNlZCBmZm1wZWcgMy4yIG5vdywgd2hpY2ggYnJpbmdzIGEgbG90IG9mCi1pbXByb3ZlbWVudHMgYW5kIGJ1Z2ZpeGVzIGZyb20gdGhlIGZmbXBlZyB0ZWFtIGluIGFkZGl0aW9uIHRvIHZhcmlvdXMgbmV3Ci1jb2RlYyBtYXBwaW5ncyBvbiB0aGUgR1N0cmVhbWVyIHNpZGUgYW5kIHF1aXRlIGEgZmV3IGJ1Z2ZpeGVzIHRvIHRoZSBHU3RyZWFtZXIKLWludGVncmF0aW9uIHRvIG1ha2UgaXQgbW9yZSByb2J1c3QuCi0KLSMjIEJ1aWxkIGFuZCBEZXBlbmRlbmNpZXMKLQotIyMjIEV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBNZXNvbiBhcyBidWlsZCBzeXN0ZW0KLQotIyMjIyBPdmVydmlldwotCi1XZSBoYXZlIGhhdmUgYWRkZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgR1N0cmVhbWVyIHVzaW5nIHRoZQotW01lc29uIGJ1aWxkIHN5c3RlbV1bbWVzb25dLiBUaGlzIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwsIGJ1dCBzaG91bGQgd29yawotZmluZSBhdCBsZWFzdCBvbiBMaW51eCB1c2luZyB0aGUgZ2NjIG9yIGNsYW5nIHRvb2xjaGFpbnMgYW5kIG9uIFdpbmRvd3MgdXNpbmcKLXRoZSBNaW5nVyBvciBNU1ZDIHRvb2xjaGFpbnMuCi0KLUF1dG90b29scyByZW1haW5zIHRoZSBwcmltYXJ5IGJ1aWxkIHN5c3RlbSBmb3IgdGhlIHRpbWUgYmVpbmcsIGJ1dCB3ZSBob3BlIHRvCi1zb21lZGF5IHJlcGxhY2UgaXQgYW5kIHdpbGwgc3RlYWRpbHkgd29yayB0b3dhcmRzIHRoYXQgZ29hbC4KLQotTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmFja2dyb3VuZCBhbmQgaW1wbGljYXRpb25zIG9mIGFsbCB0aGlzIGFuZCB3aGVyZQotd2UncmUgaG9waW5nIHRvIGdvIGluIGZ1dHVyZSB3aXRoIHRoaXMgY2FuIGJlIGZvdW5kIGluIFtUaW0ncyBtYWlsXVttZXNvbi1tYWlsXQotdG8gdGhlIGdzdHJlYW1lci1kZXZlbCBtYWlsaW5nIGxpc3QuCi0KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE1lc29uIGNoZWNrIG91dCBbdGhlc2UgdmlkZW9zXVttZXNvbi12aWRlb3NdIGFuZCBhbHNvCi10aGUgW01lc29uIHRhbGtdW21lc29uLWdzdGNvbmZdIGF0IHRoZSBHU3RyZWFtZXIgQ29uZmVyZW5jZS4KLQotSW1tZWRpYXRlIGJlbmVmaXRzIGZvciBMaW51eCB1c2VycyBhcmUgZmFzdGVyIGJ1aWxkcyBhbmQgcmVidWlsZHMuIEF0IHRoZSB0aW1lCi1vZiB3cml0aW5nIHRoZSBNZXNvbiBidWlsZCBvZiBHU3RyZWFtZXIgaXMgdXNlZCBieSBkZWZhdWx0IGluIEdOT01FJ3MgamhidWlsZAotc3lzdGVtLgotCi1UaGUgTWVzb24gYnVpbGQgY3VycmVudGx5IHN0aWxsIGxhY2tzIG1hbnkgb2YgdGhlIGZpbmUtZ3JhaW5lZCBjb25maWd1cmF0aW9uCi1vcHRpb25zIHRvIGVuYWJsZS9kaXNhYmxlIHNwZWNpZmljIHBsdWdpbnMuIFRoZXNlIHdpbGwgYmUgYWRkZWQgYmFjayBpbiBkdWUKLWNvdXJzZS4KLQotTm90ZTogVGhlIG1lc29uIGJ1aWxkIGZpbGVzIGFyZSBub3QgZGlzdHJpYnV0ZWQgaW4gdGhlIHNvdXJjZSB0YXJiYWxscywgeW91IHdpbGwKLW5lZWQgdG8gZ2V0IEdTdHJlYW1lciBmcm9tIGdpdCBpZiB5b3Ugd2FudCB0cnkgaXQgb3V0LgotCi1bbWVzb25dOiBodHRwOi8vbWVzb25idWlsZC5jb20vCi1bbWVzb24tbWFpbF06IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL2dzdHJlYW1lci1kZXZlbC8yMDE2LVNlcHRlbWJlci8wNjAyMzEuaHRtbAotW21lc29uLXZpZGVvc106IGh0dHA6Ly9tZXNvbmJ1aWxkLmNvbS92aWRlb3MuaHRtbAotW21lc29uLWdzdGNvbmZdOiBodHRwczovL2dzdGNvbmYudWJpY2FzdC50di92aWRlb3MvZ3N0cmVhbWVyLWRldmVsb3BtZW50LW9uLXdpbmRvd3MtYW5zLWZhc3Rlci1idWlsZHMtZXZlcnl3aGVyZS13aXRoLW1lc29uLwotCi0jIyMjIFdpbmRvd3MgVmlzdWFsIFN0dWRpbyB0b29sY2hhaW4gc3VwcG9ydAotCi1XaW5kb3dzIHVzZXJzIG1pZ2h0IGFwcHJlY2lhdGUgYmVpbmcgYWJsZSB0byBidWlsZCBHU3RyZWFtZXIgdXNpbmcgdGhlIE1TVkMKLXRvb2xjaGFpbiwgd2hpY2ggaXMgbm90IHBvc3NpYmxlIHVzaW5nIGF1dG90b29scy4gVGhpcyBtZWFucyB0aGF0IGl0IHdpbGwgYmUKLXBvc3NpYmxlIHRvIGRlYnVnIEdTdHJlYW1lciBhbmQgYXBwbGljYXRpb25zIGluIFZpc3VhbCBTdHVkaW8sIGZvciBleGFtcGxlLgotV2UgcmVxdWlyZSBWUzIwMTUgb3IgbmV3ZXIgZm9yIHRoaXMgYXQgdGhlIG1vbWVudC4KLQotVGhlcmUgYXJlIHR3byB3YXlzIHRvIGJ1aWxkIEdTdHJlYW1lciB1c2luZyB0aGUgTVNWQyB0b29sY2hhaW46Ci0KLTEuIFVzaW5nIHRoZSBNU1ZDIGNvbW1hbmQtbGluZSB0b29scyAoYGNsLmV4ZWAgZXRjLikgdmlhIE1lc29uJ3MgIm5pbmphIiBiYWNrZW5kLgotMi4gTGV0dGluZyBNZXNvbidzICJ2czIwMTUiIGJhY2tlbmQgZ2VuZXJhdGUgVmlzdWFsIFN0dWRpbyBwcm9qZWN0IGZpbGVzIHRoYXQKLSAgIGNhbiBiZSBvcGVuZWQgaW4gVmlzdWFsIFN0dWRpbyBhbmQgY29tcGlsZWQgZnJvbSB0aGVyZS4KLQotVGhpcyBpcyBjdXJyZW50bHkgb25seSBmb3IgYWR2ZW50dXJvdXMgc291bHMgdGhvdWdoLiBBbGwgdGhlIGJpdHMgYXJlIGluIHBsYWNlLAotYnV0IHN1cHBvcnQgZm9yIGFsbCBvZiB0aGlzIGhhcyBub3QgYmVlbiBtZXJnZWQgaW50byBHU3RyZWFtZXIncyBjZXJiZXJvIGJ1aWxkCi10b29sIHlldCBhdCB0aGUgdGltZSBvZiB3cml0aW5nLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGhhcHBlbiBpbiB0aGUgbmV4dCBjeWNsZSwKLWJ1dCBmb3Igbm93IHRoaXMgbWVhbnMgdGhhdCB0aG9zZSB3aXNoaW5nIHRvIGNvbXBpbGUgR1N0cmVhbWVyIHdpdGggTVNWQyB3aWxsCi1oYXZlIHRvIGdldCB0aGVpciBoYW5kcyBkaXJ0eS4KLQotVGhlcmUgYXJlIGFsc28gbm8gYmluYXJ5IFNESyBidWlsZHMgdXNpbmcgdGhlIE1TVkMgdG9vbGNoYWluIHlldC4KLQotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gR1N0cmVhbWVyIGJ1aWxkcyB1c2luZyBNZXNvbiBhbmQgdGhlIFdpbmRvd3MgdG9vbGNoYWluCi1jaGVjayBvdXQgTmlyYmhlZWsgQ2hhdWhhbidzIGJsb2cgcG9zdCBbIkJ1aWxkaW5nIGFuZCBkZXZlbG9waW5nIEdTdHJlYW1lciB1c2luZyBWaXN1YWwgU3R1ZGlvIl1bbXN2Yy1ibG9nXS4KLQotW21zdmMtYmxvZ106IGh0dHA6Ly9ibG9nLm5pcmJoZWVrLmluLzIwMTYvMDcvYnVpbGRpbmctYW5kLWRldmVsb3BpbmctZ3N0cmVhbWVyLXVzaW5nLmh0bWwKLQotIyMjIERlcGVuZGVuY2llcwotCi0jIyMjIGdzdHJlYW1lcgotCi1saWJ1bndpbmQgd2FzIGFkZGVkIGFzIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3kuIEl0IGlzIHVzZWQgb25seSBmb3IgZGVidWdnaW5nCi1hbmQgdHJhY2luZyBwdXJwb3Nlcy4KLQotVGhlIGBvcGVuY3ZgIHBsdWdpbiBpbiBnc3QtcGx1Z2lucy1iYWQgY2FuIG5vdyBiZSBidWlsdCBhZ2FpbnN0IE9wZW5DVgotdmVyc2lvbiAzLjEsIHByZXZpb3VzbHkgb25seSAyLjMtMi41IHdlcmUgc3VwcG9ydGVkLgotCi0jIyMjIGdzdC1wbHVnaW5zLXVnbHkKLQotLSBgbXBlZzJkZWNgIG5vdyByZXF1aXJlcyBhdCBsZWFzdCBsaWJtcGVnMiAwLjUuMSAoZnJvbSAyMDA4KS4KLQotIyMjIyBnc3QtcGx1Z2lucy1iYWQKLQotLSBgZ2x0cmFuc2Zvcm1hdGlvbmAgbm93IHJlcXVpcmVzIGF0IGxlYXN0IGdyYXBoZW5lIDEuNC4wLgotCi0tIGBsdjJgIG5vdyBwbHVnaW4gcmVxdWlyZXMgYXQgbGVhc3QgbGlsdiAwLjE2IGluc3RlYWQgb2Ygc2x2Mi4KLQotIyMjIFBhY2thZ2luZyBub3RlcwotCi1QYWNrYWdlcnMgcGxlYXNlIG5vdGUgdGhhdCB0aGUgYGdzdC9nc3Rjb25maWcuaGAgcHVibGljIGhlYWRlciBmaWxlIGluIHRoZQotR1N0cmVhbWVyIGNvcmUgbGlicmFyeSBtb3ZlZCBiYWNrIGZyb20gYmVpbmcgYW4gYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBpbmNsdWRlCi10byBiZWluZyBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQsIGFuZCB0aHVzIGl0IGlzIG5vIGxvbmdlciBpbnN0YWxsZWQgaW50bwotYCQobGliZGlyKS9nc3RyZWFtZXItMS4wL2luY2x1ZGUvZ3N0YCBidXQgaW50byB0aGUgbm9ybWFsIGluY2x1ZGUgZGlyZWN0b3J5Ci13aGVyZSBpdCBsaXZlcyBoYXBwaWx5IGV2ZXIgYWZ0ZXIgd2l0aCBhbGwgdGhlIG90aGVyIHB1YmxpYyBoZWFkZXIgZmlsZXMuIFRoZQotcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgd2Ugbm93IGNoZWNrIHdoZXRoZXIgdGhlIHRhcmdldCBzdXBwb3J0cyB1bmFsaWduZWQKLW1lbW9yeSBhY2Nlc3MgYmFzZWQgb24gcHJlZGVmaW5lZCBjb21waWxlciBtYWNyb3MgYXQgY29tcGlsZSB0aW1lIGluc3RlYWQgb2YKLWNoZWNraW5nIGl0IGF0IGNvbmZpZ3VyZSB0aW1lLgotCi0jIyBQbGF0Zm9ybS1zcGVjaWZpYyBpbXByb3ZlbWVudHMKLQotIyMjIEFuZHJvaWQKLQotIyMjIyBOZXcgdW5pdmVyc2FsIGJpbmFyaWVzIGZvciBhbGwgc3VwcG9ydGVkIEFCSXMKLQotV2Ugbm93IHByb3ZpZGUgYSAidW5pdmVyc2FsIiB0YXJiYWxsIHRvIGFsbG93IGJ1aWxkaW5nIGFwcHMgYWdhaW5zdCBhbGwgdGhlCi1hcmNoaXRlY3R1cmVzIGN1cnJlbnRseSBzdXBwb3J0ZWQgKHg4NiwgeDg2LTY0LCBhcm1lYWJpLCBhcm1lYWJpLXY3YSwKLWFybWVhYmktdjhhKS4gVGhpcyBpcyBuZWVkZWQgZm9yIGJ1aWxkaW5nIHdpdGggcmVjZW50IHZlcnNpb25zIG9mIHRoZSBBbmRyb2lkCi1OREsgd2hpY2ggZGVmYXVsdHMgdG8gYnVpbGRpbmcgYWdhaW5zdCBhbGwgc3VwcG9ydGVkIEFCSXMuIFVzZSBbdGhlIEFuZHJvaWQKLXBsYXllciBleGFtcGxlXVthbmRyb2lkLXBsYXllci1leGFtcGxlLWJ1aWxkXSBhcyBhIHJlZmVyZW5jZSBmb3IgdGhlIHJlcXVpcmVkCi1jaGFuZ2VzLgotCi1bYW5kcm9pZC1wbGF5ZXItZXhhbXBsZS1idWlsZF06IGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1leGFtcGxlcy9jb21taXQvcGxheWJhY2svcGxheWVyL2FuZHJvaWQ/aWQ9YTVjZGRlOTExOWYwMzhhMWViMzY1YWNhMjBmYWE5NzQxYTM4ZTc4OAotCi0jIyMjIE1pc2NlbGxhbmVvdXMKLQotLSBOZXcgYGFoc3NyY2AgZWxlbWVudCB0aGF0IGFsbG93cyByZWFkaW5nIHRoZSBoYXJkd2FyZSBzZW5zb3JzLCBlLmcuIGNvbXBhc3MKLSAgb3IgYWNjZWxlcm9tZXRlci4KLQotIyMjIG1hY09TIChPUy9YKSBhbmQgaU9TCi0KLS0gU3VwcG9ydCBmb3IgcXVlcnlpbmcgYXZhaWxhYmxlIGRldmljZXMgb24gT1MvWCB2aWEgdGhlIEdzdERldmljZVByb3ZpZGVyCi0gIEFQSSB3YXMgYWRkZWQuCi0tIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBjcmVhdGUgT3BlbkdMfEVTIDMueCBjb250ZXh0cyBvbiBpT1MgYW5kIHVzZSB0aGVtIGluCi0gIGNvbWJpbmF0aW9uIHdpdGggdGhlIFZpZGVvVG9vbGJveCBiYXNlZCBkZWNvZGVyIGVsZW1lbnQuCi0tIG1hbnkgT3BlbkdML0dMRVMgaW1wcm92ZW1lbnRzLCBzZWUgT3BlbkdMIHNlY3Rpb24gYWJvdmUKLQotIyMjIFdpbmRvd3MKLQotLSBnc3Rjb25maWcuaDogQWx3YXlzIHVzZSBkbGxleHBvcnQvaW1wb3J0IG9uIFdpbmRvd3Mgd2l0aCBNU1ZDCi0tIE1pc2NlbGxhbmVvdXMgZml4ZXMgdG8gbWFrZSBsaWJzIGFuZCBwbHVnaW5zIGNvbXBpbGUgd2l0aCB0aGUgTVZTQyB0b29sY2hhaW4KLS0gTVNWQyB0b29sY2hhaW4gc3VwcG9ydCAoc2VlIE1lc29uIHNlY3Rpb24gYWJvdmUgZm9yIG1vcmUgZGV0YWlscykKLQotIyMgTmV3IE1vZHVsZXMgZm9yIERvY3VtZW50YXRpb24sIEV4YW1wbGVzLCBNZXNvbiBCdWlsZAotCi1UaHJlZSBuZXcgZ2l0IG1vZHVsZXMgaGF2ZSBiZWVuIGFkZGVkIHJlY2VudGx5OgotCi0jIyMgZ3N0LWRvY3MKLQotVGhpcyBpcyBhIG5ldyBtb2R1bGUgd2hlcmUgd2Ugd2lsbCBtYWludGFpbiBkb2N1bWVudGF0aW9uIGluIHRoZSBtYXJrZG93bgotZm9ybWF0LgotCi1JdCBjb250YWlucyB0aGUgZm9ybWVyIGdzdHJlYW1lci5jb20gU0RLIHR1dG9yaWFscyB3aGljaCBoYXZlIGtpbmRseSBiZWVuIG1hZGUKLWF2YWlsYWJsZSBieSBGbHVlbmRvIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBsaWNlbnNlLiBUaGUgdHV0b3JpYWxzIGhhdmUgYmVlbgotcmV2aWV3ZWQgYW5kIHVwZGF0ZWQgZm9yIEdTdHJlYW1lciAxLnggYW5kIHdpbGwgYmUgYXZhaWxhYmxlIGFzIHBhcnQgb2YgdGhlCi1bb2ZmaWNpYWwgR1N0cmVhbWVyIGRvY3VtZW50YXRpb25dW2RvY10gZ29pbmcgZm9yd2FyZC4gVGhlIG9sZCBnc3RyZWFtZXIuY29tCi1zaXRlIHdpbGwgdGhlbiBiZSBzaHV0IGRvd24gd2l0aCByZWRpcmVjdHMgcG9pbnRpbmcgdG8gdGhlIHVwZGF0ZWQgdHV0b3JpYWxzLgotCi1Tb21lIG9mIHRoZSBleGlzdGluZyBkb2Nib29rIFhNTC1mb3JtYXR0ZWQgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBHU3RyZWFtZXIKLWNvcmUgbW9kdWxlIHN1Y2ggYXMgdGhlICpBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWwqIGFuZCB0aGUgKlBsdWdpbgotV3JpdGVyJ3MgR3VpZGUqIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gbWFya2Rvd24gYXMgd2VsbCBhbmQgd2lsbCBiZSBtYWludGFpbmVkCi1pbiB0aGUgZ3N0LWRvY3MgbW9kdWxlIGluIGZ1dHVyZS4gVGhleSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgR1N0cmVhbWVyIGNvcmUKLW1vZHVsZSBpbiB0aGUgbmV4dCBjeWNsZS4KLQotVGhpcyBpcyBqdXN0IHRoZSBiZWdpbm5pbmcuIE91ciBnb2FsIGlzIHRvIHByb3ZpZGUgYSBtb3JlIGNvaGVzaXZlIGRvY3VtZW50YXRpb24KLWV4cGVyaWVuY2UgZm9yIG91ciB1c2VycyBnb2luZyBmb3J3YXJkLCBhbmQgZWFzaWVyIHRvIGNyZWF0ZSBhbmQgbWFpbnRhaW4KLWRvY3VtZW50YXRpb24gZm9yIGRldmVsb3BlcnMuIFRoZXJlIGlzIGEgbG90IG1vcmUgd29yayB0byBkbywgZ2V0IGluIHRvdWNoIGlmCi15b3Ugd2FudCB0byBoZWxwIG91dC4KLQotSWYgeW91IGVuY291bnRlciBhbnkgcHJvYmxlbXMgb3Igc3BvdCBhbnkgb21pc3Npb25zIG9yIG91dGRhdGVkIGNvbnRlbnQgaW4gdGhlCi1uZXcgZG9jdW1lbnRhdGlvbiwgcGxlYXNlIFtmaWxlIGEgYnVnIGluIGJ1Z3ppbGxhXVtkb2MtYnVnXSB0byBsZXQgdXMga25vdy4KLQotV2Ugd2lsbCBwcm9iYWJseSByZWxlYXNlIGdzdC1kb2NzIGFzIGEgc2VwYXJhdGUgdGFyYmFsbCBmb3IgZGlzdHJpYnV0aW9ucyB0bwotcGFja2FnZSBpbiB0aGUgbmV4dCBjeWNsZS4KLQotW2RvY106IGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RvY3VtZW50YXRpb24vCi1bZG9jLWJ1Z106IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXImY29tcG9uZW50PWRvY3VtZW50YXRpb24KLQotIyMjIGdzdC1leGFtcGxlcwotCi1BIG5ldyBbbW9kdWxlXVtleGFtcGxlcy1naXRdIGhhcyBiZWVuIGFkZGVkIGZvciBleGFtcGxlcy4gSXQgZG9lcyBub3QgY29udGFpbgotbXVjaCB5ZXQsIGN1cnJlbnRseSBpdCBvbmx5IGNvbnRhaW5zIGEgc21hbGwgW2h0dHAtbGF1bmNoXVtodHRwLWxhdW5jaF0gdXRpbGl0eQotdGhhdCBzZXJ2ZXMgYSBwaXBlbGluZSBvdmVyIGh0dHAgYXMgd2VsbCBhcyB2YXJpb3VzIFtHc3RQbGF5ZXIgcGxheWJhY2sgZnJvbnRlbmRzXVtwdWlzXQotZm9yIEFuZHJvaWQsIGlPUywgR3RrKyBhbmQgUXQuCi0KLU1vcmUgZXhhbXBsZXMgd2lsbCBiZSBhZGRlZCBvdmVyIHRpbWUuIFRoZSBleGFtcGxlcyBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkCi1iZSBtb3JlIHVzZWZ1bCBhbmQgbW9yZSBzdWJzdGFudGlhbCB0aGFuIG1vc3Qgb2YgdGhlIGV4YW1wbGVzIHdlIHNoaXAgYXMgcGFydAotb2Ygb3VyIG90aGVyIG1vZHVsZXMsIGFuZCBhbHNvIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdCBtYWtlcyB0aGVtIGdvb2QgZXhhbXBsZQotY29kZS4gSWYgeW91IGhhdmUgaWRlYXMgZm9yIGV4YW1wbGVzLCBsZXQgdXMga25vdy4KLQotTm8gZGVjaXNpb24gaGFzIGJlZW4gbWFkZSB5ZXQgaWYgdGhpcyBtb2R1bGUgd2lsbCBiZSByZWxlYXNlZCBhbmQvb3IgcGFja2FnZWQuCi1JdCBwcm9iYWJseSBtYWtlcyBzZW5zZSB0byBkbyBzbyB0aG91Z2guCi0KLVtleGFtcGxlcy1naXRdOiBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtZXhhbXBsZXMvdHJlZS8KLVtodHRwLWxhdW5jaF06IGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1leGFtcGxlcy90cmVlL25ldHdvcmsvaHR0cC1sYXVuY2gvCi1bcHVpc106IGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1leGFtcGxlcy90cmVlL3BsYXliYWNrL3BsYXllcgotCi0jIyMgZ3N0LWJ1aWxkCi0KLVtnc3QtYnVpbGRdW2dzdC1idWlsZC1naXRdIGlzIGEgbmV3IG1ldGEgbW9kdWxlIHRvIGJ1aWxkIEdTdHJlYW1lciB1c2luZyB0aGUKLW5ldyBNZXNvbiBidWlsZCBzeXN0ZW0uIFRoaXMgbW9kdWxlIGlzIG5vdCByZXF1aXJlZCB0byBidWlsZCBHU3RyZWFtZXIgd2l0aAotTWVzb24sIGl0IGlzIG1lcmVseSBmb3IgY29udmVuaWVuY2UgYW5kIGFpbXMgdG8gcHJvdmlkZSBhIGRldmVsb3BtZW50IHNldHVwCi1zaW1pbGFyIHRvIHRoZSBleGlzdGluZyBgZ3N0LXVuaW5zdGFsbGVkYCBzZXR1cC4KLQotZ3N0LWJ1aWxkIG1ha2VzIHVzZSBvZiBNZXNvbidzIFtzdWJwcm9qZWN0IGZlYXR1cmVdW21lc29uLXN1YnByb2plY3RzXSBhbmQgc2V0cwotdXAgdGhlIHZhcmlvdXMgR1N0cmVhbWVyIG1vZHVsZXMgYXMgc3VicHJvamVjdHMsIHNvIHRoZXkgY2FuIGFsbCBiZSB1cGRhdGVkIGFuZAotYnVpbHQgaW4gcGFyYWxsZWwuCi0KLVRoaXMgbW9kdWxlIGlzIHN0aWxsIHZlcnkgbmV3IGFuZCBoaWdobHkgZXhwZXJpbWVudGFsLiBJdCBzaG91bGQgd29yayBhdCBsZWFzdAotb24gTGludXggYW5kIFdpbmRvd3MgKE9TL1ggbmVlZHMgc29tZSBidWlsZCBmaXhlcykuIExldCB1cyBrbm93IG9mIGFueSBpc3N1ZXMKLXlvdSBlbmNvdW50ZXIgYnkgcG9wcGluZyBpbnRvIHRoZSBgI2dzdHJlYW1lcmAgSVJDIGNoYW5uZWwgb3IgYnkKLVtmaWxpbmcgYSBidWddW2dzdC1idWlsZC1idWddLgotCi1UaGlzIG1vZHVsZSB3aWxsIHByb2JhYmx5IG5vdCBiZSByZWxlYXNlZCBvciBwYWNrYWdlZCAoZG9lcyBub3QgcmVhbGx5IG1ha2Ugc2Vuc2UpLgotCi1bZ3N0LWJ1aWxkLWdpdF06IGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1idWlsZC90cmVlLwotW2dzdC1idWlsZC1idWddOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyJmNvbXBvbmVudD1nc3QtYnVpbGQKLVttZXNvbi1zdWJwcm9qZWN0c106IGh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uL3dpa2kvU3VicHJvamVjdHMKLQotIyMgQ29udHJpYnV0b3JzCi0KLUFhcm9uIEJveGVyLCBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSwgQWxlc3NhbmRybyBEZWNpbmEsIEFsZXhhbmRydSBCxINsdcibLCBBbGV4Ci1Bc2hsZXksIEFsZXgtUC4gTmF0c2lvcywgQWxpc3RhaXIgQnV4dG9uLCBBbGxlbiBaaGFuZywgQW5kcmVhcyBOYXVtYW5uLCBBbmRyZXcKLUVpa3VtLCBBbmR5IERldmFyLCBBbnRob255IEcuIEJhc2lsZSwgQXJqZW4gVmVlbmh1aXplbiwgQXJuYXVkIFZyYWMsIEFydGVtCi1NYXJ0eW5vdmljaCwgQXJ1biBSYWdoYXZhbiwgQXVyw6lsaWVuIFphbmVsbGksIEJhcnVuIEt1bWFyIFNpbmdoLCBCZXJuaGFyZAotTWlsbGVyLCBCcmFkIExhY2tleSwgQnJhbmtvIFN1YmFzaWMsIENhcmxvcyBHYXJjaWEgQ2FtcG9zLCBDYXJsb3MgUmFmYWVsCi1HaWFuaSwgQ2hyaXN0b2ZmZXIgU3RlbmdyZW4sIERhaWtpIFVlbm8sIERhbWlhbiBaaW9icm8sIERhbmlsbyBDZXNhciBMZW1lcyBkZQotUGF1bGEsIERhdmlkIEJ1Y2htYW5uLCBEaW1pdHJpb3MgS2F0c2Fyb3MsIER1bmNhbiBQYWxtZXIsIEVkd2FyZCBIZXJ2ZXksCi1FbW1hbnVlbCBQb2l0aWVyLCBFbnJpY28gSm9ybnMsIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiwgRmFicmljZSBCZWxsZXQsCi1GbG9yaWFuIFp3b2NoLCBGbG9yaW4gQXBvc3RvbCwgRnJhbmNpc2NvIFZlbGF6cXVleiwgRnLDqWTDqXJpYyBCZXJ0b2x1cywgRnJlZHJpawotRm9ybndhbGwsIEdhdXJhdiBHdXB0YSwgR2VvcmdlIEtpYWdpYWRha2lzLCBHZW9yZyBMaXBwaXRzY2gsIEfDtnJhbiBKw7Zuc3NvbiwKLUdyYWhhbSBMZWdnZXR0LCBHcmVnb2lyZSBHZW50aWwsIEd1aWxsYXVtZSBEZXNtb3R0ZXMsIEd3YW5nIFlvb24gSHdhbmcsIEhhYWtvbgotU3BvcnNoZWltLCBIYWlodWEgSHUsIEhhdmFyZCBHcmFmZiwgSGVpbnJpY2ggRmluaywgSG9vbmhlZSBMZWUsIEh5dW5qdW4gS28sCi1JYWluIExhbmUsIElhbiwgSWFuIEphbWlzb24sIEphZ3l1bSBLb28sIEpha2UgRm95dGlrLCBKYWt1YiBBZGFtLCBKYW4KLUFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSwgSmFuIFNjaG1pZHQsIEphdmllciBNYXJ0aW5leiBDYW5pbGxhcywgSmVyb21lCi1MYWhldXJ0ZSwgSmVzcGVyIExhcnNlbiwgSmllIEppYW5nLCBKaWhhZSBZaSwgSmltbXkgT2huLCBKaW53b28gQWhuLCBKb2FraW0KLUpvaGFuc3NvbiwgSm9hbiBQYXUgQmVsdHJhbiwgSm9uYXMgSG9sbWJlcmcsIEpvbmF0aGFuIE1hdHRoZXcsIEpvbmF0aGFuIFJveSwKLUpvc2VwIFRvcnJhLCBKdWxpZW4gSXNvcmNlLCBKdW4gSmksIErDvHJnZW4gU2xvd2FjaywgSnVzdGluIEtpbSwgS2F6dW5vcmkKLUtvYmF5YXNoaSwgS2llcmFuIEJpbmdoYW0sIEtpcHAgQ2Fubm9uLCBLb29wIE1hc3QsIEtvdWhlaSBTdXRvdSwgS3NlbmlpYSwgS3lsZQotU2Nod2FyeiwgS3l1bmd5b25nIEtpbSwgTGludXMgU3ZlbnNzb24sIEx1aXMgZGUgQmV0aGVuY291cnQsIE1hcmNpbiBLb2xueSwKLU1hcmNpbiBMZXdhbmRvd3NraSwgTWFyaWFubmEgU21pZHRoIEJ1c2NobGUsIE1hcmlvIFNhbmNoZXogUHJhZGEsIE1hcmsKLUNvbWJlbGxhY2ssIE1hcmsgTmF1d2VsYWVydHMsIE1hcnRpbiBLZWxseSwgTWF0ZWogS25vcHAsIE1hdGhpZXUgRHVwb25jaGVsbGUsCi1NYXRzIExpbmRlc3RhbSwgTWF0dGhldyBHcnVlbmtlLCBNYXR0aGV3IFdhdGVycywgTWljaGFlbCBPbGJyaWNoLCBNaWNoYWwgTGF6bywKLU1pZ3VlbCBQYXLDrXMgRMOtYXosIE1pa2hhaWwgRmx1ZGtvdiwgTWluamFlIEtpbSwgTW9oYW4gUiwgTXVuZXosIE5pY29sYSBNdXJpbm8sCi1OaWNvbGFzIER1ZnJlc25lLCBOaWNvbGFzIEh1ZXQsIE5pa2l0YSBCb2Jrb3YsIE5pcmJoZWVrIENoYXVoYW4sIE9saXZpZXIKLUNyw6p0ZSwgUGFvbG8gUGV0dGluYXRvLCBQYXRyaWNpYSBNdXNjYWx1LCBQYXVsbyBOZXZlcywgUGVuZyBMaXUsIFBldGVyCi1TZWlkZXJlciwgUGhpbGlwcGUgTm9ybWFuZCwgUGhpbGlwcGUgUmVub24sIFBoaWxpcHAgWmFiZWwsIFBpZXJyZSBMYW1vdCwgUGlvdHIKLURyxIVnLCBQcmFzaGFudCBHb3Rhcm5lLCBSYWZmYWVsZSBSb3NzaSwgUmF5IFN0cm9kZSwgUmV5bmFsZG8gSC4gVmVyZGVqbwotUGlub2NoZXQsIFNhbnRpYWdvIENhcm90LU5lbWVzaW8sIFNjb3R0IEQgUGhpbGxpcHMsIFNlYmFzdGlhbiBEcsO2Z2UsIFNlYmFzdGlhbgotUmFzbXVzc2VuLCBTZXJnZWkgU2F2ZWxpZXYsIFNlcmdleSBCb3JvdmtvdiwgU2VyZ2V5IE1hbW9ub3YsIFNlcmdpbyBUb3JyZXMKLVNvbGRhZG8sIFNldW5naGEgWWFuZywgc2V6ZXJvLCBTb25nIEJpbmcsIFNyZWVyZW5qIEJhbGFjaGFuZHJhbiwgU3RlZmFuIFNhdWVyLAotU3RlcGhlbiwgU3RldmVuIEhvdmluZywgU3RpYW4gU2VsbmVzLCBUaGlhZ28gU2FudG9zLCBUaGliYXVsdCBTYXVuaWVyLCBUaGlqcwotVmVybWVpciwgVGhvbWFzIEJsdWVtZWwsIFRob21hcyBKb25lcywgVGhvbWFzIEtsYXVzbmVyLCBUaG9tYXMgU2NoZXVlcm1hbm4sCi1UaW0tUGhpbGlwcCBNw7xsbGVyLCBUaW5nLVdlaSBMYW4sIFRvbSBTY2hvb25qYW5zLCBVcnN1bGEgTWFwbGVodXJzdCwgVmFuZXNzYQotQ2hpcGlycmFzIE5hdmFsb24sIFbDrWN0b3IgTWFudWVsIErDoXF1ZXogTGVhbCwgVmluY2VudCBQZW5xdWVyYydoLCBWaW5lZXRoIFRNLAotVml2aWEgTmlrb2xhaWRvdSwgVm9vdGVsZSBWZXN0ZXJibG9tLCBXYW5nIFhpbi15dSAo546L5piV5a6HKSwgV2lsbGlhbSBNYW5sZXksCi1XaW0gVGF5bWFucywgV29uY2h1bCBMZWUsIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyLCBYYXZpZXIgQ2xhZXNzZW5zLCB4bGF6b20wMCwKLVlhbm4gSm91YW5pbiwgWmFoZWVyIEFiYmFzIE1lcmFsaQotCi0uLi4gYW5kIG1hbnkgb3RoZXJzIHdobyBoYXZlIGNvbnRyaWJ1dGVkIGJ1ZyByZXBvcnRzLCB0cmFuc2xhdGlvbnMsIHNlbnQKLXN1Z2dlc3Rpb25zIG9yIGhlbHBlZCB0ZXN0aW5nLgotCi0jIyBCdWdzIGZpeGVkIGluIDEuMTAKLQotTW9yZSB0aGFuIFs3NTAgYnVnc11bYnVncy1maXhlZC1pbi0xLjEwXSBoYXZlIGJlZW4gZml4ZWQgZHVyaW5nCi10aGUgZGV2ZWxvcG1lbnQgb2YgMS4xMC4KLQotVGhpcyBsaXN0IGRvZXMgbm90IGluY2x1ZGUgaXNzdWVzIHRoYXQgaGF2ZSBiZWVuIGNoZXJyeS1waWNrZWQgaW50byB0aGUKLXN0YWJsZSAxLjggYnJhbmNoIGFuZCBmaXhlZCB0aGVyZSBhcyB3ZWxsLCBhbGwgZml4ZXMgdGhhdCBlbmRlZCB1cCBpbiB0aGUKLTEuOCBicmFuY2ggYXJlIGFsc28gaW5jbHVkZWQgaW4gMS4xMC4KLQotVGhpcyBsaXN0IGFsc28gZG9lcyBub3QgaW5jbHVkZSBpc3N1ZXMgdGhhdCBoYXZlIGJlZW4gZml4ZWQgd2l0aG91dCBhIGJ1ZwotcmVwb3J0IGluIGJ1Z3ppbGxhLCBzbyB0aGUgYWN0dWFsIG51bWJlciBvZiBmaXhlcyBpcyBtdWNoIGhpZ2hlci4KLQotW2J1Z3MtZml4ZWQtaW4tMS4xMF06IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP2J1Z19zdGF0dXM9UkVTT0xWRUQmYnVnX3N0YXR1cz1WRVJJRklFRCZjbGFzc2lmaWNhdGlvbj1QbGF0Zm9ybSZsaW1pdD0wJmxpc3RfaWQ9MTY0MDc0Jm9yZGVyPWJ1Z19pZCZwcm9kdWN0PUdTdHJlYW1lciZxdWVyeV9mb3JtYXQ9YWR2YW5jZWQmcmVzb2x1dGlvbj1GSVhFRCZ0YXJnZXRfbWlsZXN0b25lPTEuOC4xJnRhcmdldF9taWxlc3RvbmU9MS44LjImdGFyZ2V0X21pbGVzdG9uZT0xLjguMyZ0YXJnZXRfbWlsZXN0b25lPTEuOC40JnRhcmdldF9taWxlc3RvbmU9MS45LjEmdGFyZ2V0X21pbGVzdG9uZT0xLjkuMiZ0YXJnZXRfbWlsZXN0b25lPTEuOS45MCZ0YXJnZXRfbWlsZXN0b25lPTEuMTAuMAotCi0jIyBTdGFibGUgMS4xMCBicmFuY2gKLQotQWZ0ZXIgdGhlIDEuMTAuMCByZWxlYXNlIHRoZXJlIHdpbGwgYmUgc2V2ZXJhbCAxLjEwLnggYnVnLWZpeCByZWxlYXNlcyB3aGljaAotd2lsbCBjb250YWluIGJ1ZyBmaXhlcyB3aGljaCBoYXZlIGJlZW4gZGVlbWVkIHN1aXRhYmxlIGZvciBhIHN0YWJsZSBicmFuY2gsCi1idXQgbm8gbmV3IGZlYXR1cmVzIG9yIGludHJ1c2l2ZSBjaGFuZ2VzIHdpbGwgYmUgYWRkZWQgdG8gYSBidWctZml4IHJlbGVhc2UKLXVzdWFsbHkuIFRoZSAxLjEwLnggYnVnLWZpeCByZWxlYXNlcyB3aWxsIGJlIG1hZGUgZnJvbSB0aGUgZ2l0IDEuMTAgYnJhbmNoLAotd2hpY2ggaXMgYSBzdGFibGUgYnJhbmNoLgotCi0jIyMgMS4xMC4wCi0KLTEuMTAuMCB3YXMgcmVsZWFzZWQgb24gMXN0IE5vdmVtYmVyIDIwMTYuCi0KLTxhIG5hbWU9IjEuMTAuMSI+PC9hPgotCi0jIyMgMS4xMC4xCi0KLVRoZSBmaXJzdCAxLjEwIGJ1Zy1maXggcmVsZWFzZSAoMS4xMC4xKSB3YXMgcmVsZWFzZWQgb24gMTcgTm92ZW1iZXIgMjAxNi4KLVRoaXMgcmVsZWFzZSBvbmx5IGNvbnRhaW5zIGJ1Z2ZpeGVzIGFuZCBpdCBzaG91bGQgYmUgc2FmZSB0byB1cGRhdGUgZnJvbSAxLjEwLnguCi0KLSMjIyMgTWFqb3IgYnVnZml4ZXMgaW4gMS4xMC4xCi0KLSAtIFNlY3VyaXR5LXJlbGV2YW50IGJ1Z2ZpeCBpbiB0aGUgdm1uYyBkZWNvZGVyIChDVkUtMjAxNi05NDQ1LCBDVkUtMjAxNi05NDQ2KQotIC0gVmFyaW91cyBidWdmaXhlcyB0byBwbGF5YmluMy9kZWNvZGViaW4zCi0gLSBGaXggZXJyb3IgYXQgdGhlIGVuZCBvZiBwbGF5aW5nIGFueSBXQVYgZmlsZQotIC0gRml4IHVzYWJpbGl0eSBvZiBhbmRyb2lkbWVkaWEgcGx1Z2luIGlmIHRoZSBjYW1lcmEgb3Igc2Vuc29yIEFQSSBpcyBub3QKLSAgIGF2YWlsYWJsZSwgYnV0IGNvZGVjcyBhcmUKLSAtIEhhbmRsZSByZWRpcmVjdGlvbnMgb24gUExBWSwgYW5kIG1pc3NpbmcgY29udHJvbCBhdHRyaWJ1dGUgaW4gdGhlIFJUU1Agc291cmNlCi0gLSBWYXJpb3VzIE9wZW5HTCByZWxhdGVkIGJ1Z2ZpeGVzCi0gLSAuLi4gYW5kIG1hbnksIG1hbnkgbW9yZSEKLQotRm9yIGEgZnVsbCBsaXN0IG9mIGJ1Z2ZpeGVzIHNlZSBbQnVnemlsbGFdW2J1Z2xpc3QtMS4xMC4xXS4gTm90ZSB0aGF0IHRoaXMgaXMKLW5vdCB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMuIEZvciB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMgcGxlYXNlIHJlZmVyIHRvIHRoZQotR0lUIGxvZ3Mgb3IgQ2hhbmdlTG9ncyBvZiB0aGUgcGFydGljdWxhciBtb2R1bGVzLgotCi1bYnVnbGlzdC0xLjEwLjFdOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9idWdfc3RhdHVzPVJFU09MVkVEJmJ1Z19zdGF0dXM9VkVSSUZJRUQmY2xhc3NpZmljYXRpb249UGxhdGZvcm0mbGltaXQ9MCZsaXN0X2lkPTE2ODE3MiZvcmRlcj1idWdfaWQmcHJvZHVjdD1HU3RyZWFtZXImcXVlcnlfZm9ybWF0PWFkdmFuY2VkJnJlc29sdXRpb249RklYRUQmdGFyZ2V0X21pbGVzdG9uZT0xLjEwLjEKLQotPGEgbmFtZT0iMS4xMC4yIj48L2E+Ci0KLSMjIyAxLjEwLjIKLQotVGhlIHNlY29uZCAxLjEwIGJ1Zy1maXggcmVsZWFzZSAoMS4xMC4yKSB3YXMgcmVsZWFzZWQgb24gMjkgTm92ZW1iZXIgMjAxNi4KLVRoaXMgcmVsZWFzZSBvbmx5IGNvbnRhaW5zIGJ1Z2ZpeGVzIGFuZCBpdCBzaG91bGQgYmUgc2FmZSB0byB1cGRhdGUgZnJvbSAxLjEwLnguCi0KLSMjIyMgTWFqb3IgYnVnZml4ZXMgaW4gMS4xMC4yCi0KLSAtIFNlY3VyaXR5LXJlbGV2YW50IGJ1Z2ZpeCBpbiB0aGUgRkxJL0ZMWC9GTEMgZGVjb2RlciAoQ1ZFLTIwMTYtOTYzNCwKLSAgIENWRS0yMDE2LTk2MzUsIENWRS0yMDE2LTk2MzYpCi0gLSBWYXJpb3VzIGZpeGVzIGZvciBjcmFzaGVzLCBhc3NlcnRpb25zIGFuZCBvdGhlciBmYWlsdXJlcyBvbiBmdXp6ZWQgaW5wdXQKLSAgIGZpbGVzLiBBbW9uZyBvdGhlcnMsIHRoYW5rcyB0byBIYW5ubyBCw7ZjayBmb3IgdGVzdGluZyBhbmQgcmVwb3J0aW5nCi0gICAoQ1ZFLTIwMTYtOTgwNywgQ1ZFLTIwMTYtOTgwOCwgQ1ZFLTIwMTYtOTgwOSwgQ1ZFLTIwMTYtOTgxMCwgQ1ZFLTIwMTYtOTgxMSwKLSAgIENWRS0yMDE2LTk4MTIsIENWRS0yMDE2LTk4MTMpLgotIC0gU0FWUC9TQVZQRiBwcm9maWxlIGluIGdzdC1ydHNwLXNlcnZlciB3b3JrcyBmb3IgbGl2ZSBzdHJlYW1zIGFnYWluLCBhbmQgdGhlCi0gICBjb3JyZWN0IE1JS0VZIHBvbGljeSBtZXNzYWdlIGlzIGdlbmVyYXRlZAotIC0gRnVydGhlciBPcGVuR0wgcmVsYXRlZCBidWdmaXhlcwotIC0gZ3N0LWxpYmF2IHdhcyB1cGRhdGVkIHRvIGZmbXBlZyAzLjIuMQotIC0gLi4uIGFuZCBtYW55LCBtYW55IG1vcmUhCi0KLUZvciBhIGZ1bGwgbGlzdCBvZiBidWdmaXhlcyBzZWUgW0J1Z3ppbGxhXVtidWdsaXN0LTEuMTAuMl0uIE5vdGUgdGhhdCB0aGlzIGlzCi1ub3QgdGhlIGZ1bGwgbGlzdCBvZiBjaGFuZ2VzLiBGb3IgdGhlIGZ1bGwgbGlzdCBvZiBjaGFuZ2VzIHBsZWFzZSByZWZlciB0byB0aGUKLUdJVCBsb2dzIG9yIENoYW5nZUxvZ3Mgb2YgdGhlIHBhcnRpY3VsYXIgbW9kdWxlcy4KLQotW2J1Z2xpc3QtMS4xMC4yXTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/YnVnX3N0YXR1cz1SRVNPTFZFRCZidWdfc3RhdHVzPVZFUklGSUVEJmNsYXNzaWZpY2F0aW9uPVBsYXRmb3JtJmxpbWl0PTAmbGlzdF9pZD0xNjgxNzImb3JkZXI9YnVnX2lkJnByb2R1Y3Q9R1N0cmVhbWVyJnF1ZXJ5X2Zvcm1hdD1hZHZhbmNlZCZyZXNvbHV0aW9uPUZJWEVEJnRhcmdldF9taWxlc3RvbmU9MS4xMC4yCi0KLTxhIG5hbWU9IjEuMTAuMyI+PC9hPgotCi0jIyMgMS4xMC4zCi0KLVRoZSB0aGlyZCAxLjEwIGJ1Zy1maXggcmVsZWFzZSAoMS4xMC4zKSB3YXMgcmVsZWFzZWQgb24gMzAgSmFudWFyeSAyMDE3LgotVGhpcyByZWxlYXNlIG9ubHkgY29udGFpbnMgYnVnZml4ZXMgYW5kIGl0IHNob3VsZCBiZSBzYWZlIHRvIHVwZGF0ZSBmcm9tIDEuMTAueC4KLQotIyMjIyBNYWpvciBidWdmaXhlcyBpbiAxLjEwLjMKLQotIC0gVmFyaW91cyBmaXhlcyBmb3IgY3Jhc2hlcywgYXNzZXJ0aW9ucywgZGVhZGxvY2tzIGFuZCBtZW1vcnkgbGVha3Mgb24gZnV6emVkCi0gICBpbnB1dCBmaWxlcyBhbmQgaW4gb3RoZXIgc2l0dWF0aW9ucyAoQ1ZFLTIwMTYtMTAxOTgsIENWRS0yMDE2LTEwMTk5LAotICAgQ1ZFLTIwMTctNTgzNywgQ1ZFLTIwMTctNTgzOCwgQ1ZFLTIwMTctNTgzOSwgQ1ZFLTIwMTctNTg0MCwgQ1ZFLTIwMTctNTg0MSwKLSAgIENWRS0yMDE3LTU4NDIsIENWRS0yMDE3LTU4NDMsIENWRS0yMDE3LTU4NDQsIENWRS0yMDE3LTU4NDUsIENWRS0yMDE3LTU4NDYpCi0gLSBSZWdyZXNzaW9uIGZpeGVzIGZvciBzb3VwaHR0cHNyYyB3aXRoIHJlZGlyZWN0aW9uIHRyYWNraW5nIGFuZCByZXRyeWluZwotIC0gUmVncmVzc2lvbiBmaXggZm9yIGdzdC1ydHNwLXNlcnZlciBub3QgaGFuZGxpbmcgVENQLW9ubHkgbWVkaWFzIGFueW1vcmUKLSAtIFZhcmlvdXMgb3RoZXIgYnVnZml4ZXMgdGhlIFJUUC9SVFNQIGNvZGViYXNlCi0gLSBGaXggZm9yIGdtb2R1bGUgb24gNjQgYml0IEFuZHJvaWQsIGl0IHdhcyBuZXZlciB3b3JraW5nIGJlZm9yZSB0aGVyZQotIC0gdnA4ZW5jIHdvcmtzIGFnYWluIG9uIDMyIGJpdCBXaW5kb3dzCi0gLSBGaXhlcyB0byBPcHVzIFBMQyBoYW5kbGluZyBpbiB0aGUgZGVjb2RlcgotIC0gRml4IGZvciBzdHJlYW0gY29ycnVwdGlvbiBpbiBtdWx0aWhhbmRsZXNpbmsgd2hlbiByZW1vdmluZyBjbGllbnRzCi0gLSBnc3QtbGliYXYgd2FzIHVwZGF0ZWQgdG8gZmZtcGVnIDMuMi4yCi0gLSAuLi4gYW5kIG1hbnksIG1hbnkgbW9yZSEKLQotRm9yIGEgZnVsbCBsaXN0IG9mIGJ1Z2ZpeGVzIHNlZSBbQnVnemlsbGFdW2J1Z2xpc3QtMS4xMC4zXS4gTm90ZSB0aGF0IHRoaXMgaXMKLW5vdCB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMuIEZvciB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMgcGxlYXNlIHJlZmVyIHRvIHRoZQotR0lUIGxvZ3Mgb3IgQ2hhbmdlTG9ncyBvZiB0aGUgcGFydGljdWxhciBtb2R1bGVzLgotCi1bYnVnbGlzdC0xLjEwLjNdOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9idWdfc3RhdHVzPVJFU09MVkVEJmJ1Z19zdGF0dXM9VkVSSUZJRUQmY2xhc3NpZmljYXRpb249UGxhdGZvcm0mbGltaXQ9MCZsaXN0X2lkPTE4NzA1NCZvcmRlcj1idWdfaWQmcHJvZHVjdD1HU3RyZWFtZXImcXVlcnlfZm9ybWF0PWFkdmFuY2VkJnJlc29sdXRpb249RklYRUQmdGFyZ2V0X21pbGVzdG9uZT0xLjEwLjMKLQotPGEgbmFtZT0iMS4xMC40Ij48L2E+Ci0KLSMjIyAxLjEwLjQKLQotVGhlIHRoaXJkIDEuMTAgYnVnLWZpeCByZWxlYXNlICgxLjEwLjQpIHdhcyByZWxlYXNlZCBvbiAyMyBGZWJydWFyeSAyMDE3LgotVGhpcyByZWxlYXNlIG9ubHkgY29udGFpbnMgYnVnZml4ZXMgYW5kIGl0IHNob3VsZCBiZSBzYWZlIHRvIHVwZGF0ZSBmcm9tIDEuMTAueC4KLQotIyMjIyBNYWpvciBidWdmaXhlcyBpbiAxLjEwLjQKLQotIC0gVmFyaW91cyBmaXhlcyBmb3IgY3Jhc2hlcywgYXNzZXJ0aW9ucywgZGVhZGxvY2tzIGFuZCBtZW1vcnkgbGVha3Mgb24gZnV6emVkCi0gICBpbnB1dCBmaWxlcyBhbmQgaW4gb3RoZXIgc2l0dWF0aW9ucyAoQ1ZFLTIwMTctNTg0NywgQ1ZFLTIwMTctNTg0OCkKLSAtIE1vcmUgcmVncmVzc2lvbiBmaXhlcyBmb3Igc291cGh0dHBzcmMgcmVkaXJlY3Rpb24gdHJhY2tpbmcKLSAtIFJlZ3Jlc3Npb24gZml4IGZvciBnbW9kdWxlIG9uIDMyIGJpdCBBbmRyb2lkLCB3aGljaCB3YXMgaW50cm9kdWNlZCBhcyBwYXJ0Ci0gICBvZiB0aGUgNjQgYml0IEFuZHJvaWQgZml4IGluIDEuMTAuMyBhbmQgYnJva2UgdGhlIGFuZHJvaWRtZWRpYSBwbHVnaW4KLSAtIFZhcmlvdXMgYnVnZml4ZXMgZm9yIHJlZ3Jlc3Npb25zIGFuZCBvdGhlciBwcm9ibGVtcyBpbiB0aGUgVjRMMiBwbHVnaW4KLSAtIEZpeCBmb3IgNS4xLCA2LjEgYW5kIDcuMSBjaGFubmVsIGxheW91dHMgZm9yIFZvcmJpcwotIC0gRml4ZXMgZm9yIHRpbWVzdGFtcCBnZW5lcmF0aW9uIG9mIEFuZHJvaWQgdmlkZW8gZW5jb2RlciBlbGVtZW50Ci0gLSBnc3QtbGliYXYgd2FzIHVwZGF0ZWQgdG8gZmZtcGVnIDMuMi40LCBmaXhpbmcgYSBjb3VwbGUgb2YgQ1ZFcwotIC0gLi4uIGFuZCBtYW55LCBtYW55IG1vcmUhCi0KLUZvciBhIGZ1bGwgbGlzdCBvZiBidWdmaXhlcyBzZWUgW0J1Z3ppbGxhXVtidWdsaXN0LTEuMTAuNF0uIE5vdGUgdGhhdCB0aGlzIGlzCi1ub3QgdGhlIGZ1bGwgbGlzdCBvZiBjaGFuZ2VzLiBGb3IgdGhlIGZ1bGwgbGlzdCBvZiBjaGFuZ2VzIHBsZWFzZSByZWZlciB0byB0aGUKLUdJVCBsb2dzIG9yIENoYW5nZUxvZ3Mgb2YgdGhlIHBhcnRpY3VsYXIgbW9kdWxlcy4KLQotW2J1Z2xpc3QtMS4xMC40XTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/YnVnX3N0YXR1cz1SRVNPTFZFRCZidWdfc3RhdHVzPVZFUklGSUVEJmNsYXNzaWZpY2F0aW9uPVBsYXRmb3JtJmxpbWl0PTAmbGlzdF9pZD0xODcwNTQmb3JkZXI9YnVnX2lkJnByb2R1Y3Q9R1N0cmVhbWVyJnF1ZXJ5X2Zvcm1hdD1hZHZhbmNlZCZyZXNvbHV0aW9uPUZJWEVEJnRhcmdldF9taWxlc3RvbmU9MS4xMC40Ci0KLSMjIEtub3duIElzc3VlcwotCi0tIGlPUyBidWlsZHMgd2l0aCBpT1MgNiBTREsgYW5kIG9sZCBDKysgU1RMLiBZb3UgbmVlZCB0byBzZWxlY3QgaU9TIDYgaW5zdGVhZAotICBvZiA3IG9yIDggaW4geW91ciBwcm9qZWN0cyBzZXR0aW5ncyB0byBiZSBhYmxlIHRvIGxpbmsgYXBwbGljYXRpb25zLgotICBbQnVnICM3NjYzNjZdKGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjYzNjYpCi0tIENvZGUgc2lnbmluZyBmb3IgQXBwbGUgcGxhdGZvcm1zIGhhcyBzb21lIHByb2JsZW1zIGN1cnJlbnRseSwgcmVxdWlyaW5nCi0gIG1hbnVhbCB3b3JrIHRvIGdldCB5b3VyIGFwcGxpY2F0aW9uIHNpZ25lZC4gW0J1ZyAjNzcxODYwXShodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxODYwKQotLSBCdWlsZGluZyBhcHBsaWNhdGlvbnMgd2l0aCBBbmRyb2lkIE5ESyByMTMgb24gV2luZG93cyBkb2VzIG5vdCB3b3JrLiBPdGhlcgotICBwbGF0Zm9ybXMgYW5kIGVhcmxpZXIvbGF0ZXIgdmVyc2lvbnMgb2YgdGhlIE5ESyBhcmUgbm90IGFmZmVjdGVkLgotICBbQnVnICM3NzI4NDJdKGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzI4NDIpCi0KLSMjIFNjaGVkdWxlIGZvciAxLjEyCi0KLU91ciBuZXh0IG1ham9yIGZlYXR1cmUgcmVsZWFzZSB3aWxsIGJlIDEuMTIsIGFuZCAxLjExIHdpbGwgYmUgdGhlIHVuc3RhYmxlCi1kZXZlbG9wbWVudCB2ZXJzaW9uIGxlYWRpbmcgdXAgdG8gdGhlIHN0YWJsZSAxLjEyIHJlbGVhc2UuIFRoZSBkZXZlbG9wbWVudAotb2YgMS4xMS8xLjEyIHdpbGwgaGFwcGVuIGluIHRoZSBnaXQgbWFzdGVyIGJyYW5jaC4KLQotVGhlIHBsYW4gZm9yIHRoZSAxLjEyIGRldmVsb3BtZW50IGN5Y2xlIGlzIHlldCB0byBiZSBjb25maXJtZWQsIGJ1dCBpdCBpcwotZXhwZWN0ZWQgdGhhdCBmZWF0dXJlIGZyZWV6ZSB3aWxsIGJlIGFyb3VuZCBlYXJseS9taWQtRmVicnVhcnksCi1mb2xsb3dlZCBieSBzZXZlcmFsIDEuMTEgcHJlLXJlbGVhc2VzIGFuZCB0aGUgbmV3IDEuMTIgc3RhYmxlIHJlbGVhc2UKLWluIEFwcmlsLgotCi0xLjEyIHdpbGwgYmUgYmFja3dhcmRzLWNvbXBhdGlibGUgdG8gdGhlIHN0YWJsZSAxLjEwLCAxLjgsIDEuNiwgMS40LCAxLjIgYW5kCi0xLjAgcmVsZWFzZSBzZXJpZXMuCi0KLS0gLSAtCi0KLSpUaGVzZSByZWxlYXNlIG5vdGVzIGhhdmUgYmVlbiBwcmVwYXJlZCBieSBPbGl2aWVyIENyw6p0ZSwgU2ViYXN0aWFuIERyw7ZnZSwKLU5pY29sYXMgRHVmcmVzbmUsIEVkd2FyZCBIZXJ2ZXksIFbDrWN0b3IgTWFudWVsIErDoXF1ZXogTGVhbCwgVGltLVBoaWxpcHAKLU3DvGxsZXIsIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQsIEFydW4gUmFnaGF2YW4sIFRoaWJhdWx0IFNhdW5pZXIsCi1KYW4gU2NobWlkdCwgV2ltIFRheW1hbnMsIE1hdHRoZXcgV2F0ZXJzKgotCi0qTGljZW5zZTogW0NDIEJZLVNBIDQuMF0oaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLykqCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZTJjOWYuLjAwMDAwMDAKLS0tIGEvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLUdTdHJlYW1lciAxLjkueCBkZXZlbG9wbWVudCBzZXJpZXMKLQotV0hBVCBJVCBJUwotLS0tLS0tLS0tLQotCi1UaGlzIGlzIEdTdHJlYW1lciwgYSBmcmFtZXdvcmsgZm9yIHN0cmVhbWluZyBtZWRpYS4KLQotV0hFUkUgVE8gU1RBUlQKLS0tLS0tLS0tLS0tLS0tCi0KLVdlIGhhdmUgYSB3ZWJzaXRlIGF0Ci1odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8KLQotWW91IHNob3VsZCBzdGFydCBieSBnb2luZyB0aHJvdWdoIG91ciBGQVEgYXQKLWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2ZhcS9odG1sLwotCi1UaGVyZSBpcyBtb3JlIGRvY3VtZW50YXRpb247IGdvIHRvCi1odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kb2N1bWVudGF0aW9uCi0KLVlvdSBjYW4gc3Vic2NyaWJlIHRvIG91ciBtYWlsaW5nIGxpc3RzOyBzZWUgdGhlIHdlYnNpdGUgZm9yIGRldGFpbHMuCi0KLVdlIHRyYWNrIGJ1Z3MgaW4gR05PTUUncyBidWd6aWxsYTsgc2VlIHRoZSB3ZWJzaXRlIGZvciBkZXRhaWxzLgotCi1Zb3UgY2FuIGpvaW4gdXMgb24gSVJDIC0gI2dzdHJlYW1lciBvbiBpcmMuZnJlZW5vZGUub3JnCi0KLUdTdHJlYW1lciAxLjAgc2VyaWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdGFycmluZwotCi0gIEdTVFJFQU1FUgotCi1UaGUgY29yZSBhcm91bmQgd2hpY2ggYWxsIG90aGVyIG1vZHVsZXMgcmV2b2x2ZS4gIEJhc2UgZnVuY3Rpb25hbGl0eSBhbmQKLWxpYnJhcmllcywgc29tZSBlc3NlbnRpYWwgZWxlbWVudHMsIGRvY3VtZW50YXRpb24sIGFuZCB0ZXN0aW5nLgotCi0gIEJBU0UKLQotQSB3ZWxsLWdyb29tZWQgYW5kIHdlbGwtbWFpbnRhaW5lZCBjb2xsZWN0aW9uIG9mIEdTdHJlYW1lciBwbHVnLWlucyBhbmQKLWVsZW1lbnRzLCBzcGFubmluZyB0aGUgcmFuZ2Ugb2YgcG9zc2libGUgdHlwZXMgb2YgZWxlbWVudHMgb25lIHdvdWxkIHdhbnQKLXRvIHdyaXRlIGZvciBHU3RyZWFtZXIuICAKLQotQW5kIGludHJvZHVjaW5nLCBmb3IgdGhlIGZpcnN0IHRpbWUgZXZlciwgb24gdGhlIGRldmVsb3BtZW50IHNjcmVlbiAuLi4KLQotICBUSEUgR09PRAotCi0gLS0tICJTdWNoIGluZ3JhdGl0dWRlLiAgQWZ0ZXIgYWxsIHRoZSB0aW1lcyBJJ3ZlIHNhdmVkIHlvdXIgbGlmZS4iCi0KLUEgY29sbGVjdGlvbiBvZiBwbHVnLWlucyB5b3UnZCB3YW50IHRvIGhhdmUgcmlnaHQgbmV4dCB0byB5b3Ugb24gdGhlCi1iYXR0bGVmaWVsZC4gIFNob290aW5nIHNoYXJwIGFuZCBtYWtpbmcgbm8gbWlzdGFrZXMsIHRoZXNlIHBsdWctaW5zIGhhdmUgaXQKLWFsbDogZ29vZCBsb29rcywgZ29vZCBjb2RlLCBhbmQgZ29vZCBsaWNlbnNpbmcuICBEb2N1bWVudGVkIGFuZCBkcmVzc2VkIHVwCi1pbiB0ZXN0cy4gIElmIHlvdSdyZSBsb29raW5nIGZvciBhIHJvbGUgbW9kZWwgdG8gYmFzZSB5b3VyIG93biBwbHVnLWluIG9uLAotaGVyZSBpdCBpcy4KLQotSWYgeW91IGZpbmQgYSBwbG90IGhvbGUgb3IgYSBiYWRseSBsaXAtc3luY2VkIGxpbmUgb2YgY29kZSBpbiB0aGVtLAotbGV0IHVzIGtub3cgLSBpdCBpcyBhIG1hdHRlciBvZiBob25vdXIgZm9yIHVzIHRvIGVuc3VyZSBCbG9uZGllIGRvZXNuJ3QgbG9vawotbGlrZSBoZSdzIGJlZW4gd2Fsa2luZyAxMDAgbWlsZXMgdGhyb3VnaCB0aGUgZGVzZXJ0IHdpdGhvdXQgd2F0ZXIuCi0KLSAgVEhFIFVHTFkKLQotICAtLS0gIldoZW4geW91IGhhdmUgdG8gc2hvb3QsIHNob290LiAgRG9uJ3QgdGFsay4iCi0KLVRoZXJlIGFyZSB0aW1lcyB3aGVuIHRoZSB3b3JsZCBuZWVkcyBhIGNvbG9yIGJldHdlZW4gYmxhY2sgYW5kIHdoaXRlLgotUXVhbGl0eSBjb2RlIHRvIG1hdGNoIHRoZSBnb29kJ3MsIGJ1dCB0d28tdGltaW5nLCBiYWNrc3RhYmJpbmcgYW5kIHJlYWR5IHRvCi1zZWxsIHlvdXIgZnJlZWRvbSBkb3duIHRoZSByaXZlci4gIFRoZXNlIHBsdWctaW5zIG1pZ2h0IGhhdmUgYSBwYXRlbnQgbm9vc2UKLWFyb3VuZCB0aGVpciBuZWNrLCBvciBhIGxvY2stdXAgbGljZW5zZSwgb3IgYW55IG90aGVyIHByb2JsZW0gdGhhdCBtYWtlcyB5b3UKLXRoaW5rIHR3aWNlIGFib3V0IHNoaXBwaW5nIHRoZW0uCi0KLVdlIGRvbid0IGNhbGwgdGhlbSB1Z2x5IGJlY2F1c2Ugd2UgbGlrZSB0aGVtIGxlc3MuICBEb2VzIGEgbW90aGVyIGxvdmUgaGVyCi1zb24gbGVzcyBiZWNhdXNlIGhlJ3Mgbm90IGFzIHByZXR0eSBhcyB0aGUgb3RoZXIgb25lcyA/IE5vICAtIHNoZSBjb21tZW5kcwotaGltIG9uIGhpcyBncmVhdCBwZXJzb25hbGl0eS4gIFRoZXNlIHBsdWctaW5zIGFyZSB0aGUgbGlmZSBvZiB0aGUgcGFydHkuCi1BbmQgd2UnbGwgc3RpbGwgc3RlcCBpbiBhbmQgc2V0IHRoZW0gc3RyYWlnaHQgaWYgeW91IHJlcG9ydCBhbnkgdW5hY2NlcHRhYmxlCi1iZWhhdmlvdXIgLSBiZWNhdXNlIHRoZXJlIGFyZSB0d28ga2luZHMgb2YgcGVvcGxlIGluIHRoZSB3b3JsZCwgbXkgZnJpZW5kOgotdGhvc2Ugd2l0aCBhIHJvcGUgYXJvdW5kIHRoZWlyIG5lY2sgYW5kIHRoZSBwZW9wbGUgd2hvIGRvIHRoZSBjdXR0aW5nLgotCi0gIFRIRSBCQUQKLQotICAtLS0gIlRoYXQgYW4gYWNjdXNhdGlvbj8iCi0KLU5vIHBlcmZlY3RseSBncm9vbWVkIG1vdXN0YWNoZSBvciBhbnkgYW1vdW50IG9mIGZpbmUgY2xvdGhpbmcgaXMgZ29pbmcgdG8KLWNvdmVyIHVwIHRoZSB0cnV0aCAtIHRoZXNlIHBsdWctaW5zIGFyZSBCYWQgd2l0aCBhIGNhcGl0YWwgQi4gCi1UaGV5IGxvb2sgZmluZSBvbiB0aGUgb3V0c2lkZSwgYW5kIG1pZ2h0IGV2ZW4gYXBwZWFyIHRvIGdldCB0aGUgam9iIGRvbmUsIGJ1dAotYXQgdGhlIGVuZCBvZiB0aGUgZGF5IHRoZXkncmUgYSBibGFjayBzaGVlcC4gV2l0aG91dCBhIGdvbGRlbi1oYWlyZWQgYW5nZWwKLXRvIHdhdGNoIG92ZXIgdGhlbSwgdGhleSdsbCBwcm9iYWJseSBsYW5kIGluIGFuIHVubWFya2VkIGdyYXZlIGF0IHRoZSBmaW5hbAotc2hvd2Rvd24uCi0KLURvbid0IGJ1ZyB1cyBhYm91dCB0aGVpciBxdWFsaXR5IC0gZXhlcmNpc2UgeW91ciBGcmVlIFNvZnR3YXJlIHJpZ2h0cywKLXBhdGNoIHVwIHRoZSBvZmZlbmRlciBhbmQgc2VuZCB1cyB0aGUgcGF0Y2ggb24gdGhlIGZhc3Rlc3Qgc3RlZWQgeW91IGNhbgotc3RlYWwgZnJvbSB0aGUgQ29uZmVkZXJhdGVzLiBCZWNhdXNlIHlvdSBzZWUsIGluIHRoaXMgd29ybGQsIHRoZXJlJ3MgdHdvCi1raW5kcyBvZiBwZW9wbGUsIG15IGZyaWVuZDogdGhvc2Ugd2l0aCBsb2FkZWQgZ3VucyBhbmQgdGhvc2Ugd2hvIGRpZy4KLVlvdSBkaWcuCi0KLVRoZSBMb3dkb3duCi0tLS0tLS0tLS0tLQotCi0gIC0tLSAiSSd2ZSBuZXZlciBzZWVuIHNvIG1hbnkgcGx1Zy1pbnMgd2FzdGVkIHNvIGJhZGx5LiIKLQotR1N0cmVhbWVyIFBsdWctaW5zIGhhcyBncm93biBzbyBiaWcgdGhhdCBpdCdzIGhhcmQgdG8gc2VwYXJhdGUgdGhlIHdoZWF0IGZyb20KLXRoZSBjaGFmZi4gIEFsc28sIGRpc3RyaWJ1dG9ycyBoYXZlIGJyb3VnaHQgdXAgaXNzdWVzIGFib3V0IHRoZSBsZWdhbCBzdGF0dXMKLW9mIHNvbWUgb2YgdGhlIHBsdWctaW5zIHdlIHNoaXAuICBUbyByZW1lZHkgdGhpcywgd2UndmUgZGl2aWRlZCB0aGUgcHJldmlvdXMKLXNldCBvZiBhdmFpbGFibGUgcGx1Zy1pbnMgaW50byBmb3VyIG1vZHVsZXM6Ci0KLS0gZ3N0LXBsdWdpbnMtYmFzZTogYSBzbWFsbCBhbmQgZml4ZWQgc2V0IG9mIHBsdWctaW5zLCBjb3ZlcmluZyBhIHdpZGUgcmFuZ2UKLSAgb2YgcG9zc2libGUgdHlwZXMgb2YgZWxlbWVudHM7IHRoZXNlIGFyZSBjb250aW51b3VzbHkga2VwdCB1cC10by1kYXRlCi0gIHdpdGggYW55IGNvcmUgY2hhbmdlcyBkdXJpbmcgdGhlIGRldmVsb3BtZW50IHNlcmllcy4KLQotICAtIFdlIGJlbGlldmUgZGlzdHJpYnV0b3JzIGNhbiBzYWZlbHkgc2hpcCB0aGVzZSBwbHVnLWlucy4KLSAgLSBQZW9wbGUgd3JpdGluZyBlbGVtZW50cyBzaG91bGQgYmFzZSB0aGVpciBjb2RlIG9uIHRoZXNlIGVsZW1lbnRzLgotICAtIFRoZXNlIGVsZW1lbnRzIGNvbWUgd2l0aCBleGFtcGxlcywgZG9jdW1lbnRhdGlvbiwgYW5kIHJlZ3Jlc3Npb24gdGVzdHMuCi0KLS0gZ3N0LXBsdWdpbnMtZ29vZDogYSBzZXQgb2YgcGx1Zy1pbnMgdGhhdCB3ZSBjb25zaWRlciB0byBoYXZlIGdvb2QgcXVhbGl0eQotICBjb2RlLCBjb3JyZWN0IGZ1bmN0aW9uYWxpdHksIG91ciBwcmVmZXJyZWQgbGljZW5zZSAoTEdQTCBmb3IgdGhlIHBsdWctaW4KLSAgY29kZSwgTEdQTCBvciBMR1BMLWNvbXBhdGlibGUgZm9yIHRoZSBzdXBwb3J0aW5nIGxpYnJhcnkpLgotCi0gIC0gV2UgYmVsaWV2ZSBkaXN0cmlidXRvcnMgY2FuIHNhZmVseSBzaGlwIHRoZXNlIHBsdWctaW5zLgotICAtIFBlb3BsZSB3cml0aW5nIGVsZW1lbnRzIHNob3VsZCBiYXNlIHRoZWlyIGNvZGUgb24gdGhlc2UgZWxlbWVudHMuCi0gCi0tIGdzdC1wbHVnaW5zLXVnbHk6IGEgc2V0IG9mIHBsdWctaW5zIHRoYXQgaGF2ZSBnb29kIHF1YWxpdHkgYW5kIGNvcnJlY3QKLSAgZnVuY3Rpb25hbGl0eSwgYnV0IGRpc3RyaWJ1dGluZyB0aGVtIG1pZ2h0IHBvc2UgcHJvYmxlbXMuICBUaGUgbGljZW5zZQotICBvbiBlaXRoZXIgdGhlIHBsdWctaW5zIG9yIHRoZSBzdXBwb3J0aW5nIGxpYnJhcmllcyBtaWdodCBub3QgYmUgaG93IHdlJ2QKLSAgbGlrZS4gVGhlIGNvZGUgbWlnaHQgYmUgd2lkZWx5IGtub3duIHRvIHByZXNlbnQgcGF0ZW50IHByb2JsZW1zLgotCi0gIC0gRGlzdHJpYnV0b3JzIHNob3VsZCBjaGVjayBpZiB0aGV5IHdhbnQvY2FuIHNoaXAgdGhlc2UgcGx1Zy1pbnMuCi0gIC0gUGVvcGxlIHdyaXRpbmcgZWxlbWVudHMgc2hvdWxkIGJhc2UgdGhlaXIgY29kZSBvbiB0aGVzZSBlbGVtZW50cy4KLQotLSBnc3QtcGx1Z2lucy1iYWQ6IGEgc2V0IG9mIHBsdWctaW5zIHRoYXQgYXJlbid0IHVwIHRvIHBhciBjb21wYXJlZCB0byB0aGUKLSAgcmVzdC4gIFRoZXkgbWlnaHQgYmUgY2xvc2UgdG8gYmVpbmcgZ29vZCBxdWFsaXR5LCBidXQgdGhleSdyZSBtaXNzaW5nCi0gIHNvbWV0aGluZyAtIGJlIGl0IGEgZ29vZCBjb2RlIHJldmlldywgc29tZSBkb2N1bWVudGF0aW9uLCBhIHNldCBvZiB0ZXN0cywKLSAgYSByZWFsIGxpdmUgbWFpbnRhaW5lciwgb3Igc29tZSBhY3R1YWwgd2lkZSB1c2UuCi0gIElmIHRoZSBibGFua3MgYXJlIGZpbGxlZCBpbiB0aGV5IG1pZ2h0IGJlIHVwZ3JhZGVkIHRvIGJlY29tZSBwYXJ0IG9mCi0gIGVpdGhlciBnc3QtcGx1Z2lucy1nb29kIG9yIGdzdC1wbHVnaW5zLXVnbHksIGRlcGVuZGluZyBvbiB0aGUgb3RoZXIgZmFjdG9ycy4KLQotICAtIElmIHRoZSBwbHVnLWlucyBicmVhaywgeW91IGNhbid0IGNvbXBsYWluIC0gaW5zdGVhZCwgeW91IGNhbiBmaXggdGhlCi0gICAgcHJvYmxlbSBhbmQgc2VuZCB1cyBhIHBhdGNoLCBvciBicmliZSBzb21lb25lIGludG8gZml4aW5nIHRoZW0gZm9yIHlvdS4KLSAgLSBOZXcgY29udHJpYnV0b3JzIGNhbiBzdGFydCBoZXJlIGZvciB0aGluZ3MgdG8gd29yayBvbi4KLQotUExBVEZPUk1TCi0tLS0tLS0tLS0KLQotLSBMaW51eCBpcyBvZiBjb3Vyc2UgZnVsbHkgc3VwcG9ydGVkCi0tIEZyZWVCU0QgaXMgcmVwb3J0ZWQgdG8gd29yazsgb3RoZXIgQlNEcyBzaG91bGQgd29yayB0b28KLS0gU29sYXJpcyBpcyByZXBvcnRlZCB0byB3b3JrOyBhIHNwZWNpZmljIHN1bmF1ZGlvc2luayBwbHVnaW4gaGFzIGJlZW4gd3JpdHRlbgotLSBNYWNPU1ggd29ya3MsIGJpbmFyeSAxLnggcGFja2FnZXMgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZSBjZXJiZXJvIGJ1aWxkIHRvb2wKLS0gV2luZG93cyB3b3JrczsgYmluYXJ5IDEueCBwYWNrYWdlcyBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlIGNlcmJlcm8gYnVpbGQgdG9vbAotICAtIE1TeXMvTWluR1cgYnVpbGRzCi0gIC0gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gYnVpbGRzIGFyZSBub3QgeWV0IGF2YWlsYWJsZSBvciBzdXBwb3J0ZWQKLS0gQW5kcm9pZCB3b3JrcywgYmluYXJ5IDEueCBwYWNrYWdlcyBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlIGNlcmJlcm8gYnVpbGQgdG9vbAotLSBpT1Mgd29ya3MKLQotSU5TVEFMTElORyBGUk9NIFBBQ0tBR0VTCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotWW91IHNob3VsZCBhbHdheXMgcHJlZmVyIGluc3RhbGxpbmcgZnJvbSBwYWNrYWdlcyBmaXJzdC4gIEdTdHJlYW1lciBpcwotd2VsbC1tYWludGFpbmVkIGZvciBhIG51bWJlciBvZiBkaXN0cmlidXRpb25zLCBpbmNsdWRpbmcgRmVkb3JhLCBEZWJpYW4sCi1VYnVudHUsIE1hbmRyYWtlLCBHZW50b28sIC4uLgotCi1Pbmx5IGluIGNhc2VzIHdoZXJlIHlvdToKLS0gd2FudCB0byBoYWNrIG9uIEdTdHJlYW1lcgotLSB3YW50IHRvIHZlcmlmeSB0aGF0IGEgYnVnIGhhcyBiZWVuIGZpeGVkCi0tIGRvIG5vdCBoYXZlIGEgc2FuZSBkaXN0cmlidXRpb24KLXNob3VsZCB5b3UgY2hvb3NlIHRvIGJ1aWxkIGZyb20gc291cmNlIHRhcmJhbGxzIG9yIGdpdC4KLQotRmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YXJpb3VzIHBhY2thZ2VzIGF0Ci1odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kb3dubG9hZC8KLQotQ09NUElMSU5HIEZST00gU09VUkNFIFRBUkJBTExTCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBhZ2FpbiwgbWFrZSBzdXJlIHRoYXQgeW91IHJlYWxseSBuZWVkIHRvIGluc3RhbGwgZnJvbSBzb3VyY2UgIQotICBJZiBHU3RyZWFtZXIgaXMgb25lIG9mIHlvdXIgZmlyc3QgcHJvamVjdHMgZXZlciB0aGF0IHlvdSBidWlsZCBmcm9tIHNvdXJjZSwKLSAgY29uc2lkZXIgdGFraW5nIG9uIGFuIGVhc2llciBwcm9qZWN0LgotCi0tIGNoZWNrIG91dHB1dCBvZiAuL2NvbmZpZ3VyZSAtLWhlbHAgdG8gc2VlIGlmIGFueSBvcHRpb25zIGFwcGx5IHRvIHlvdQotLSBydW4KLSAgLi9jb25maWd1cmUKLSAgbWFrZQotCi0gIHRvIGJ1aWxkIEdTdHJlYW1lci4KLS0gaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBpdCAobm90IHJlcXVpcmVkLCBidXQgd2hhdCB5b3UgdXN1YWxseSB3YW50IHRvIGRvKSwgcnVuCi0gIG1ha2UgaW5zdGFsbAotCi0tIHRyeSBvdXQgYSBzaW1wbGUgdGVzdDoKLSAgZ3N0LWxhdW5jaCAtdiBmYWtlc3JjIG51bV9idWZmZXJzPTUgISBmYWtlc2luawotICAoSWYgeW91IGRpZG4ndCBpbnN0YWxsIEdTdHJlYW1lciwgcHJlZml4IGdzdC1sYXVuY2ggd2l0aCB0b29scy8pCi0KLSAgSWYgaXQgb3V0cHV0cyBhIGJ1bmNoIG9mIG1lc3NhZ2VzIGZyb20gZmFrZXNyYyBhbmQgZmFrZXNpbmssIGV2ZXJ5dGhpbmcgaXMKLSAgb2suCi0KLSAgSWYgaXQgZGlkIG5vdCB3b3JrLCBrZWVwIGluIG1pbmQgdGhhdCB5b3UgbWlnaHQgbmVlZCB0byBhZGp1c3QgdGhlCi0gIFBBVEggYW5kL29yIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gbWFrZSB0aGUgc3lzdGVtCi0gIGZpbmQgR1N0cmVhbWVyIGluIHRoZSBwcmVmaXggd2hlcmUgeW91IGluc3RhbGxlZCAoYnkgZGVmYXVsdCB0aGF0IGlzIC91c3IvbG9jYWwpLgotCi0tIEFmdGVyIHRoaXMsIHlvdSdyZSByZWFkeSB0byBpbnN0YWxsIGdzdC1wbHVnaW5zLCB3aGljaCB3aWxsIHByb3ZpZGUgdGhlCi0gIGZ1bmN0aW9uYWxpdHkgeW91J3JlIHByb2JhYmx5IGxvb2tpbmcgZm9yIGJ5IG5vdywgc28gZ28gb24gYW5kIHJlYWQKLSAgdGhhdCBSRUFETUUuCi0KLUNPTVBJTElORyBGUk9NIEdJVAotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoZW4gYnVpbGRpbmcgZnJvbSBnaXQgc291cmNlcywgeW91IHdpbGwgbmVlZCB0byBydW4gYXV0b2dlbi5zaCB0byBnZW5lcmF0ZQotdGhlIGJ1aWxkIHN5c3RlbSBmaWxlcy4KLQotWW91IHdpbGwgbmVlZCBhIHNldCBvZiBhZGRpdGlvbmFsIHRvb2xzIHR5cGljYWwgZm9yIGJ1aWxkaW5nIGZyb20gZ2l0LAotaW5jbHVkaW5nOgotLSBhdXRvY29uZgotLSBhdXRvbWFrZQotLSBsaWJ0b29sCi0KLWF1dG9nZW4uc2ggd2lsbCBjaGVjayBmb3IgcmVjZW50IGVub3VnaCB2ZXJzaW9ucyBhbmQgY29tcGxhaW4gaWYgeW91IGRvbid0IGhhdmUKLXRoZW0uICBZb3UgY2FuIGFsc28gc3BlY2lmeSBzcGVjaWZpYyB2ZXJzaW9ucyBvZiBhdXRvbWFrZSBhbmQgYXV0b2NvbmYgd2l0aAotLS13aXRoLWF1dG9tYWtlIGFuZCAtLXdpdGgtYXV0b2NvbmYKLQotQ2hlY2sgYXV0b2dlbi5zaCBvcHRpb25zIGJ5IHJ1bm5pbmcgYXV0b2dlbi5zaCAtLWhlbHAKLQotYXV0b2dlbi5zaCBjYW4gcGFzcyBvbiBhcmd1bWVudHMgdG8gY29uZmlndXJlCi0KLVdoZW4geW91IGhhdmUgZG9uZSB0aGlzIG9uY2UsIHlvdSBjYW4gdXNlIGF1dG9yZWdlbi5zaCB0byByZS1hdXRvZ2VuIHdpdGgKLXRoZSBsYXN0IHBhc3NlZCBvcHRpb25zIGFzIGEgaGFuZHkgc2hvcnRjdXQuICBVc2UgaXQuCi0KLUFmdGVyIHRoZSBhdXRvZ2VuLnNoIHN0YWdlLCB5b3UgY2FuIGZvbGxvdyB0aGUgZGlyZWN0aW9ucyBsaXN0ZWQgaW4KLSJDT01QSUxJTkcgRlJPTSBTT1VSQ0UiCi0KLVlvdSBjYW4gYWxzbyBydW4geW91ciB3aG9sZSBnaXQgc3RhY2sgdW5pbnN0YWxsZWQgaW4geW91ciBob21lIGRpcmVjdG9yeSwKLXNvIHRoYXQgeW91IGNhbiBxdWlja2x5IHRlc3QgY2hhbmdlcyB3aXRob3V0IGFmZmVjdGluZyB5b3VyIHN5c3RlbSBzZXR1cCBvcgotaW50ZXJmZXJpbmcgd2l0aCBHU3RyZWFtZXIgaW5zdGFsbGVkIGZyb20gcGFja2FnZXMuICBNYW55IEdTdHJlYW1lciBkZXZlbG9wZXJzCi11c2UgYW4gdW5pbnN0YWxsZWQgc2V0dXAgZm9yIHRoZWlyIHdvcmsuCi0KLVRoZXJlIGlzIGEgJ2NyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaCcgc2NyaXB0IGluCi0KLSAgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvdHJlZS9zY3JpcHRzLwotCi10byBlYXNpbHkgY3JlYXRlIGFuIHVuaW5zdGFsbGVkIHNldHVwIGZyb20gc2NyYXRjaC4KLQotCi1QTFVHLUlOIERFUEVOREVOQ0lFUyBBTkQgTElDRU5TRVMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1HU3RyZWFtZXIgaXMgZGV2ZWxvcGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTEdQTCAoc2VlIExJQ0VOU0UgZmlsZSBmb3IKLWRldGFpbHMpLiBTb21lIG9mIG91ciBwbHVnLWlucyBob3dldmVyIHJlbHkgb24gbGlicmFyaWVzIHdoaWNoIGFyZSBhdmFpbGFibGUKLXVuZGVyIG90aGVyIGxpY2Vuc2VzLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGFyZSBkaXN0cmlidXRpbmcgYW4gYXBwbGljYXRpb24KLXdoaWNoIGhhcyBhIG5vbi1HUEwgY29tcGF0aWJsZSBsaWNlbnNlIChmb3IgaW5zdGFuY2UgYSBjbG9zZWQtc291cmNlCi1hcHBsaWNhdGlvbikgd2l0aCBHU3RyZWFtZXIsIHlvdSBoYXZlIHRvIG1ha2Ugc3VyZSBub3QgdG8gZGlzdHJpYnV0ZSBHUEwtbGlua2VkCi1wbHVnLWlucy4KLQotV2hlbiB1c2luZyBHUEwtbGlua2VkIHBsdWctaW5zLCBHU3RyZWFtZXIgaXMgZm9yIGFsbCBwcmFjdGljYWwgcmVhc29ucwotdW5kZXIgdGhlIEdQTCBpdHNlbGYuCi0KLUhJU1RPUlkKLS0tLS0tLS0KLQotVGhlIGZ1bmRhbWVudGFsIGRlc2lnbiBjb21lcyBmcm9tIHRoZSB2aWRlbyBwaXBlbGluZSBhdCBPcmVnb24gR3JhZHVhdGUKLUluc3RpdHV0ZSwgYXMgd2VsbCBhcyBzb21lIGlkZWFzIGZyb20gRGlyZWN0TWVkaWEuICBJdCdzIGJhc2VkIG9uIHBsdWctaW5zIHRoYXQKLXdpbGwgcHJvdmlkZSB0aGUgdmFyaW91cyBjb2RlYyBhbmQgb3RoZXIgZnVuY3Rpb25hbGl0eS4gIFRoZSBpbnRlcmZhY2UKLWhvcGVmdWxseSBpcyBnZW5lcmljIGVub3VnaCBmb3IgdmFyaW91cyBjb21wYW5pZXMgKGFoZW0sIEFwcGxlKSB0byByZWxlYXNlCi1iaW5hcnkgY29kZWNzIGZvciBMaW51eCwgdW50aWwgc3VjaCB0aW1lIGFzIHRoZXkgZ2V0IGEgY2x1ZSBhbmQgcmVsZWFzZSB0aGUKLXNvdXJjZS4KZGlmZiAtLWdpdCBhL1JFTEVBU0UgYi9SRUxFQVNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjAxNmExLi4wMDAwMDAwCi0tLSBhL1JFTEVBU0UKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0KLVJlbGVhc2Ugbm90ZXMgZm9yIEdTdHJlYW1lcsKgMS4xMC40Ci0KLVRoZSBHU3RyZWFtZXIgdGVhbSBpcyBwcm91ZCB0byBhbm5vdW5jZSB0aGUgZm91cnRoIGJ1Z2ZpeCByZWxlYXNlIGluIHRoZSBzdGFibGUKLTEuMTAgcmVsZWFzZSBzZXJpZXMgb2YgeW91ciBmYXZvdXJpdGUgY3Jvc3MtcGxhdGZvcm0gbXVsdGltZWRpYSBmcmFtZXdvcmshCi0KLQotVGhpcyByZWxlYXNlIG9ubHkgY29udGFpbnMgYnVnZml4ZXMgYW5kIGl0IGlzIHNhZmUgdG8gdXBkYXRlIGZyb20gMS4xMC54LiBGb3IgYQotZnVsbCBsaXN0IG9mIGJ1Z2ZpeGVzIHNlZSBCdWd6aWxsYS4KLQotCi1TZWUgL3JlbGVhc2VzLzEuMTAvIGZvciB0aGUgZnVsbCByZWxlYXNlIG5vdGVzLgotCi0KLVRoaXMgbW9kdWxlLCBnc3RyZWFtZXIsIG9ubHkgY29udGFpbnMgY29yZSBmdW5jdGlvbmFsaXR5LgotRm9yIGFjdHVhbCBtZWRpYSBwbGF5YmFjaywgeW91IHdpbGwgbmVlZCBvdGhlciBtb2R1bGVzLgotCi1nc3QtcGx1Z2lucy1iYXNlCi1jb250YWlucyBhIGJhc2ljIHNldCBvZiB3ZWxsLXN1cHBvcnRlZCBwbHVnaW5zCi1nc3QtcGx1Z2lucy1nb29kCi1jb250YWlucyBhIHNldCBvZiB3ZWxsLXN1cHBvcnRlZCBwbHVnaW5zIHVuZGVyIG91ciBwcmVmZXJyZWQgbGljZW5zZQotZ3N0LXBsdWdpbnMtdWdseQotY29udGFpbnMgYSBzZXQgb2Ygd2VsbC1zdXBwb3J0ZWQgcGx1Z2lucywgYnV0IG1pZ2h0IHBvc2UgcHJvYmxlbXMgZm9yCi0gICAgZGlzdHJpYnV0b3JzCi1nc3QtcGx1Z2lucy1iYWQKLWNvbnRhaW5zIGEgc2V0IG9mIGxlc3Mgc3VwcG9ydGVkIHBsdWdpbnMgdGhhdCBoYXZlbid0IHBhc3NlZCB0aGUKLSAgICByaWdvcm91cyBxdWFsaXR5IHRlc3Rpbmcgd2UgZXhwZWN0LCBvciBhcmUgc3RpbGwgbWlzc2luZyBkb2N1bWVudGF0aW9uCi0gICAgYW5kL29yIHVuaXQgdGVzdHMKLWdzdC1saWJhdgotY29udGFpbnMgYSBzZXQgb2YgY29kZWNzIHBsdWdpbnMgYmFzZWQgb24gbGliYXYgKGZvcm1lcmx5IGdzdC1mZm1wZWcpCi0KLQotCi0gIAotCi1CdWdzIGZpeGVkIGluIHRoaXMgcmVsZWFzZQotICAgICAKLSAgICAgICogNzc3OTk4IDogQmlucyBjYW4gbm90IGJlIHBhcnNlZCB3aGVuIHN5c3RlbSBsYW5ndWFnZSBpcyBHZXJtYW4KLSAgICAgICogNzc4MzY1IDogYnl0ZXJlYWRlcjogb2Zmc2V0IGFjY291bnRlZCB0d2ljZSBpbiBfbWFza2VkX3NjYW5fdWludDMyX3BlZWsgZm9yIEgyNjQgc3BlY2lhbCBjYXNlCi0KLT09PT0gRG93bmxvYWQgPT09PQotCi1Zb3UgY2FuIGZpbmQgc291cmNlIHJlbGVhc2VzIG9mIGdzdHJlYW1lciBpbiB0aGUgZG93bmxvYWQKLWRpcmVjdG9yeTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvCi0KLVRoZSBnaXQgcmVwb3NpdG9yeSBhbmQgZGV0YWlscyBob3cgdG8gY2xvbmUgaXQgY2FuIGJlIGZvdW5kIGF0Ci1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdHJlYW1lci8KLQotPT09PSBIb21lcGFnZSA9PT09Ci0KLVRoZSBwcm9qZWN0J3Mgd2Vic2l0ZSBpcyBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCi0KLT09PT0gU3VwcG9ydCBhbmQgQnVncyA9PT09Ci0KLVdlIHVzZSBHTk9NRSdzIGJ1Z3ppbGxhIGZvciBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0czoKLWh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lcgotCi1QbGVhc2Ugc3VibWl0IHBhdGNoZXMgdmlhIGJ1Z3ppbGxhIGFzIHdlbGwuCi0KLUZvciBoZWxwIGFuZCBzdXBwb3J0LCBwbGVhc2Ugc3Vic2NyaWJlIHRvIGFuZCBzZW5kIHF1ZXN0aW9ucyB0byB0aGUKLWdzdHJlYW1lci1kZXZlbCBtYWlsaW5nIGxpc3QgKHNlZSBiZWxvdyBmb3IgZGV0YWlscykuCi0KLVRoZXJlIGlzIGFsc28gYSAjZ3N0cmVhbWVyIElSQyBjaGFubmVsIG9uIHRoZSBGcmVlbm9kZSBJUkMgbmV0d29yay4KLQotPT09PSBEZXZlbG9wZXJzID09PT0KLQotR1N0cmVhbWVyIGlzIHN0b3JlZCBpbiBHaXQsIGhvc3RlZCBhdCBnaXQuZnJlZWRlc2t0b3Aub3JnLCBhbmQgY2FuIGJlIGNsb25lZAotZnJvbSB0aGVyZSAoc2VlIGxpbmsgYWJvdmUpLgotCi1JbnRlcmVzdGVkIGRldmVsb3BlcnMgb2YgdGhlIGNvcmUgbGlicmFyeSwgcGx1Z2lucywgYW5kIGFwcGxpY2F0aW9ucyBzaG91bGQKLXN1YnNjcmliZSB0byB0aGUgZ3N0cmVhbWVyLWRldmVsIGxpc3QuCi0KLSAgICAgICAgCi1Db250cmlidXRvcnMgdG8gdGhpcyByZWxlYXNlCi0gICAgCi0gICAgICAqIFNlYmFzdGlhbiBEcsO2Z2UKLSAgICAgICogVGltLVBoaWxpcHAgTcO8bGxlcgotICAgICAgKiBXaW0gVGF5bWFucwotwqAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9UT0RPIGIvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9UT0RPCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzA0MDRkLi4wMDAwMDAwCi0tLSBhL2FjbG9jYWwubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxNTE5ICswLDAgQEAKLSMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjE1IC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1tNF9pZm5kZWYoW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW200X2RlZnVuKFtfQU1fQ09ORklHX01BQ1JPX0RJUlNdLCBbXSltNF9kZWZ1bihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbX0FNX0NPTkZJR19NQUNST19ESVJTKCRAKV0pXSkKLW00X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCi0gIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKLW00X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWzIuNjldLCwKLVttNF93YXJuaW5nKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42OS4KLVlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIEl0IG1heSB3b3JrLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8uCi1JZiB5b3UgaGF2ZSBwcm9ibGVtcywgeW91IG1heSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS4KLVRvIGRvIHNvLCB1c2UgdGhlIHByb2NlZHVyZSBkb2N1bWVudGVkIGJ5IHRoZSBwYWNrYWdlLCB0eXBpY2FsbHkgJ2F1dG9yZWNvbmYnLl0pXSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX0FVVE9NQUtFX1ZFUlNJT04oVkVSU0lPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBdXRvbWFrZSBYLlkgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZW5zdXJlIGFjbG9jYWwubTQgaGFzIGJlZW4KLSMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCi0jIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQotQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAotW2FtX19hcGlfdmVyc2lvbj0nMS4xNScKLWRubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KLWRubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCi1tNF9pZihbJDFdLCBbMS4xNV0sIFtdLAotICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAotXSkKLQotIyBfQU1fQVVUT0NPTkZfVkVSU0lPTihWRVJTSU9OKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBhY2xvY2FsIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGZpbmQgdGhlIEF1dG9jb25mIHZlcnNpb24uCi0jIFRoaXMgaXMgYSBwcml2YXRlIG1hY3JvIHRvby4gIFVzaW5nIG00X2RlZmluZSBzaW1wbGlmaWVzCi0jIHRoZSBsb2dpYyBpbiBhY2xvY2FsLCB3aGljaCBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIGRlZmluaXRpb24uCi1tNF9kZWZpbmUoW19BTV9BVVRPQ09ORl9WRVJTSU9OXSwgW10pCi0KLSMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCi0jIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KLUFDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKLVtBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjE1XSlkbmwKLW00X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCi0gIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKLV9BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQotCi0jIEZpZ3VyZSBvdXQgaG93IHRvIHJ1biB0aGUgYXNzZW1ibGVyLiAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBBTV9QUk9HX0FTCi0jIC0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9QUk9HX0FTXSwKLVsjIEJ5IGRlZmF1bHQgd2Ugc2ltcGx5IHVzZSB0aGUgQyBjb21waWxlciB0byBidWlsZCBhc3NlbWJseSBjb2RlLgotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCi10ZXN0ICIke0NDQVMrc2V0fSIgPSBzZXQgfHwgQ0NBUz0kQ0MKLXRlc3QgIiR7Q0NBU0ZMQUdTK3NldH0iID0gc2V0IHx8IENDQVNGTEFHUz0kQ0ZMQUdTCi1BQ19BUkdfVkFSKFtDQ0FTXSwgICAgICBbYXNzZW1ibGVyIGNvbXBpbGVyIGNvbW1hbmQgKGRlZmF1bHRzIHRvIENDKV0pCi1BQ19BUkdfVkFSKFtDQ0FTRkxBR1NdLCBbYXNzZW1ibGVyIGNvbXBpbGVyIGZsYWdzIChkZWZhdWx0cyB0byBDRkxBR1MpXSkKLV9BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLCBbX0FNX0RFUEVOREVOQ0lFUyhbQ0NBU10pXSlkbmwKLV0pCi0KLSMgQU1fQVVYX0RJUl9FWFBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKLSMgJGFjX2F1eF9kaXIgdG8gJyRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KLSMgJyRzcmNkaXInLCAnJHNyY2Rpci8uLicsIG9yICckc3JjZGlyLy4uLy4uJy4KLSMKLSMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQotIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAotIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKLSMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCi0jIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCi0jIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQotIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgotIwotIyAkYWNfYXV4X2Rpci9taXNzaW5nCi0jICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKLSMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZwotIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKLSMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKLSMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgotIwotIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgotIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQotIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgJy4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKLSMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KLSMKLSMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCi0jIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgotIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAotIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKLSMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKLSMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKLSMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KLSMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgotIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCi0jCi0jIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgotIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCi0jIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KLQotQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKLVtBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKLSMgRXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGguCi1hbV9hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiICYmIHB3ZGAKLV0pCi0KLSMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KLUFDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCi1bQUNfUFJFUkVRKFsyLjUyXSlkbmwKLSBtNF9pZihbJDFdLCBbVFJVRV0sICBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0sCi0gICAgICAgWyQxXSwgW0ZBTFNFXSwgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldKWRubAotQUNfU1VCU1QoWyQxX1RSVUVdKWRubAotQUNfU1VCU1QoWyQxX0ZBTFNFXSlkbmwKLV9BTV9TVUJTVF9OT1RNQUtFKFskMV9UUlVFXSlkbmwKLV9BTV9TVUJTVF9OT1RNQUtFKFskMV9GQUxTRV0pZG5sCi1tNF9kZWZpbmUoW19BTV9DT05EX1ZBTFVFXyQxXSwgWyQyXSlkbmwKLWlmICQyOyB0aGVuCi0gICQxX1RSVUU9Ci0gICQxX0ZBTFNFPScjJwotZWxzZQotICAkMV9UUlVFPScjJwotICAkMV9GQUxTRT0KLWZpCi1BQ19DT05GSUdfQ09NTUFORFNfUFJFKAotW2lmIHRlc3QgLXogIiR7JDFfVFJVRX0iICYmIHRlc3QgLXogIiR7JDFfRkFMU0V9IjsgdGhlbgotICBBQ19NU0dfRVJST1IoW1tjb25kaXRpb25hbCAiJDEiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXV0pCi1maV0pXSkKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0KLSMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgJ0FDX1BST0dfQ0MnIGJlCi0jIHdyaXR0ZW4gaW4gY2xlYXIsIGluIHdoaWNoIGNhc2UgYXV0b21ha2UsIHdoZW4gcmVhZGluZyBhY2xvY2FsLm00LAotIyB3aWxsIHRoaW5rIGl0IHNlZXMgYSAqdXNlKiwgYW5kIHRoZXJlZm9yZSB3aWxsIHRyaWdnZXIgYWxsIGl0J3MKLSMgQyBzdXBwb3J0IG1hY2hpbmVyeS4gIEFsc28gbm90ZSB0aGF0IGl0IG1lYW5zIHRoYXQgYXV0b3NjYW4sIHNlZWluZwotIyBDQyBldGMuIGluIHRoZSBNYWtlZmlsZSwgd2lsbCBhc2sgZm9yIGFuIEFDX1BST0dfQ0MgdXNlLi4uCi0KLQotIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgotIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiT0JKQyIsICJPQkpDWFgiLCAiVVBDIiwgb3IgIkdKQyIuCi0jIFdlIHRyeSBhIGZldyB0ZWNobmlxdWVzIGFuZCB1c2UgdGhhdCB0byBzZXQgYSBzaW5nbGUgY2FjaGUgdmFyaWFibGUuCi0jCi0jIFdlIGRvbid0IEFDX1JFUVVJUkUgdGhlIGNvcnJlc3BvbmRpbmcgQUNfUFJPR19DQyBzaW5jZSB0aGUgbGF0dGVyIHdhcwotIyBtb2RpZmllZCB0byBpbnZva2UgX0FNX0RFUEVOREVOQ0lFUyhDQyk7IHdlIHdvdWxkIGhhdmUgYSBjaXJjdWxhcgotIyBkZXBlbmRlbmN5LCBhbmQgZ2l2ZW4gdGhhdCB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gcnVuIHRoaXMgbWFjcm8sCi0jIGp1c3QgcmVseSBvbiBBQ19QUk9HX0NDLgotQUNfREVGVU4oW19BTV9ERVBFTkRFTkNJRVNdLAotW0FDX1JFUVVJUkUoW0FNX1NFVF9ERVBESVJdKWRubAotQUNfUkVRVUlSRShbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdKWRubAotQUNfUkVRVUlSRShbQU1fTUFLRV9JTkNMVURFXSlkbmwKLUFDX1JFUVVJUkUoW0FNX0RFUF9UUkFDS10pZG5sCi0KLW00X2lmKFskMV0sIFtDQ10sICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAotICAgICAgWyQxXSwgW0NYWF0sICBbZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PV0sCi0gICAgICBbJDFdLCBbT0JKQ10sIFtkZXBjYz0iJE9CSkMiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCi0gICAgICBbJDFdLCBbT0JKQ1hYXSwgW2RlcGNjPSIkT0JKQ1hYIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAotICAgICAgWyQxXSwgW1VQQ10sICBbZGVwY2M9IiRVUEMiICBhbV9jb21waWxlcl9saXN0PV0sCi0gICAgICBbJDFdLCBbR0NKXSwgIFtkZXBjYz0iJEdDSiIgIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCi0gICAgICAgICAgICAgICAgICAgIFtkZXBjYz0iJCQxIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSkKLQotQUNfQ0FDSEVfQ0hFQ0soW2RlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjXSwKLSAgICAgICAgICAgICAgIFthbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0sCi1baWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEIi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiBbJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnXSA8IC4vZGVwY29tcGAKLSAgZmkKLSAgYW1fX3VuaXZlcnNhbD1mYWxzZQotICBtNF9jYXNlKFskMV0sIFtDQ10sCi0gICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAotICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OwotICAgICBlc2FjXSwKLSAgICBbQ1hYXSwKLSAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCi0gICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7Ci0gICAgIGVzYWNdKQotCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgIjogPiBzdWIvY29uZnRzdCRpLmgiIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgMTAgL2Jpbi9zaC4KLSAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAotICAgIGRvbmUKLSAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCi0KLSAgICAjIFdlIGNoZWNrIHdpdGggJy1jJyBhbmQgJy1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAotICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycy4KLSAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQotICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBnY2MpCi0gICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgotICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKLSAgICAgIDs7Ci0gICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBBZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgotICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCi0JY29udGludWUKLSAgICAgIGVsc2UKLQlicmVhawotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQotICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgJy1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKLSAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAotICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KLSAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICAgIGFtX19taW51c19vYmo9Ci0gICAgICA7OwotICAgIG5vbmUpIGJyZWFrIDs7Ci0gICAgZXNhYwotICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAotICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwotICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKLSAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgotICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKLSAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAotICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8Ci0gICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICAgICAgICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBmaQotICBkb25lCi0KLSAgY2QgLi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotZWxzZQotICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotXSkKLUFDX1NVQlNUKFskMURFUE1PREVdLCBbZGVwbW9kZT0kYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdKQotQU1fQ09ORElUSU9OQUwoW2FtX19mYXN0ZGVwJDFdLCBbCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzXSkKLV0pCi0KLQotIyBBTV9TRVRfREVQRElSCi0jIC0tLS0tLS0tLS0tLS0KLSMgQ2hvb3NlIGEgZGlyZWN0b3J5IG5hbWUgZm9yIGRlcGVuZGVuY3kgZmlsZXMuCi0jIFRoaXMgbWFjcm8gaXMgQUNfUkVRVUlSRWQgaW4gX0FNX0RFUEVOREVOQ0lFUy4KLUFDX0RFRlVOKFtBTV9TRVRfREVQRElSXSwKLVtBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAotQUNfU1VCU1QoW0RFUERJUl0sIFsiJHthbV9fbGVhZGluZ19kb3R9ZGVwcyJdKWRubAotXSkKLQotCi0jIEFNX0RFUF9UUkFDSwotIyAtLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9ERVBfVFJBQ0tdLAotW0FDX0FSR19FTkFCTEUoW2RlcGVuZGVuY3ktdHJhY2tpbmddLCBbZG5sCi1BU19IRUxQX1NUUklORygKLSAgWy0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmddLAotICBbZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9yc10pCi1BU19IRUxQX1NUUklORygKLSAgWy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nXSwKLSAgW3NwZWVkcyB1cCBvbmUtdGltZSBidWlsZF0pXSkKLWlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgotICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgotICBBTURFUEJBQ0tTTEFTSD0nXCcKLSAgYW1fX25vZGVwPSdfbm8nCi1maQotQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCi1BQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKWRubAotX0FNX1NVQlNUX05PVE1BS0UoW0FNREVQQkFDS1NMQVNIXSlkbmwKLUFDX1NVQlNUKFthbV9fbm9kZXBdKWRubAotX0FNX1NVQlNUX05PVE1BS0UoW2FtX19ub2RlcF0pZG5sCi1dKQotCi0jIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotCi0jIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotW3sKLSAgIyBPbGRlciBBdXRvY29uZiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCi0gICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKLSAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCi0gIGNhc2UgJENPTkZJR19GSUxFUyBpbgotICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OwotICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKLSAgZXNhYwotICBzaGlmdAotICBmb3IgbWYKLSAgZG8KLSAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgotICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCi0gICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KLSAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgJ01ha2VmaWxlLmluJywgYnV0Ci0gICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCi0gICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKLSAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgotICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCi0gICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCi0gICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCi0gICAgZWxzZQotICAgICAgY29udGludWUKLSAgICBmaQotICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCi0gICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgJ21ha2UnLgotICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCi0gICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKLSAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgICB0ZXN0IC16ICIkYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCi0gICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKLSAgICAjIGV4cGFuc2lvbi4KLSAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAotCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJ2A7IGRvCi0gICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQotICAgICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAotICAgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQotICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKLSAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgotICAgIGRvbmUKLSAgZG9uZQotfQotXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwotCi0KLSMgQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhpcyBtYWNybyBzaG91bGQgb25seSBiZSBpbnZva2VkIG9uY2UgLS0gdXNlIHZpYSBBQ19SRVFVSVJFLgotIwotIyBUaGlzIGNvZGUgaXMgb25seSByZXF1aXJlZCB3aGVuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nCi0jIGlzIGVuYWJsZWQuICBGSVhNRS4gIFRoaXMgY3JlYXRlcyBlYWNoICcuUCcgZmlsZSB0aGF0IHdlIHdpbGwKLSMgbmVlZCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgY29kZS4KLUFDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCi1bQUNfQ09ORklHX0NPTU1BTkRTKFtkZXBmaWxlc10sCi0gICAgIFt0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotICAgICBbQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIl0pCi1dKQotCi0jIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKLSMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KLQotZG5sIFJlZGVmaW5lIEFDX1BST0dfQ0MgdG8gYXV0b21hdGljYWxseSBpbnZva2UgX0FNX1BST0dfQ0NfQ19PLgotbTRfZGVmaW5lKFtBQ19QUk9HX0NDXSwKLW00X2RlZm4oW0FDX1BST0dfQ0NdKQotW19BTV9QUk9HX0NDX0NfTwotXSkKLQotIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQotIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCi0jIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKLSMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCi0jIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCi0jIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgotIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAotIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCi0jIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCi1BQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCi1bQUNfUFJFUkVRKFsyLjY1XSlkbmwKLWRubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93Ci1kbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KLW00X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAotQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAotaWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgotICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAotICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCi0gIEFDX1NVQlNUKFthbV9faXNyY10sIFsnIC1JJChzcmNkaXIpJ10pX0FNX1NVQlNUX05PVE1BS0UoW2FtX19pc3JjXSlkbmwKLSAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCi0gIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuICJtYWtlIGRpc3RjbGVhbiIgdGhlcmUgZmlyc3RdKQotICBmaQotZmkKLQotIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCi1pZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgotICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KLSAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCi0gIGVsc2UKLSAgICBDWUdQQVRIX1c9ZWNobwotICBmaQotZmkKLUFDX1NVQlNUKFtDWUdQQVRIX1ddKQotCi0jIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCi1kbmwgRGlzdGluZ3Vpc2ggYmV0d2VlbiBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBjYWxscy4KLW00X2lmdmFsKFskMl0sCi1bQUNfRElBR05PU0UoW29ic29sZXRlXSwKLSAgICAgICAgICAgICBbJDA6IHR3by0gYW5kIHRocmVlLWFyZ3VtZW50cyBmb3JtcyBhcmUgZGVwcmVjYXRlZC5dKQotbTRfaWZ2YWwoWyQzXSwgW19BTV9TRVRfT1BUSU9OKFtuby1kZWZpbmVdKV0pZG5sCi0gQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJDFdKWRubAotIEFDX1NVQlNUKFtWRVJTSU9OXSwgWyQyXSldLAotW19BTV9TRVRfT1BUSU9OUyhbJDFdKWRubAotZG5sIERpYWdub3NlIG9sZC1zdHlsZSBBQ19JTklUIHdpdGggbmV3LXN0eWxlIEFNX0FVVE9NQUtFX0lOSVQuCi1tNF9pZigKLSAgbTRfaWZkZWYoW0FDX1BBQ0tBR0VfTkFNRV0sIFtva10pOm00X2lmZGVmKFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbb2tdKSwKLSAgW29rOm9rXSwsCi0gIFttNF9mYXRhbChbQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHNdKV0pZG5sCi0gQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAotIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAotCi1fQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKLVtBQ19ERUZJTkVfVU5RVU9URUQoW1BBQ0tBR0VdLCBbIiRQQUNLQUdFIl0sIFtOYW1lIG9mIHBhY2thZ2VdKQotIEFDX0RFRklORV9VTlFVT1RFRChbVkVSU0lPTl0sIFsiJFZFUlNJT04iXSwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKV0pZG5sCi0KLSMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KLUFDX1JFUVVJUkUoW0FNX1NBTklUWV9DSEVDS10pZG5sCi1BQ19SRVFVSVJFKFtBQ19BUkdfUFJPR1JBTV0pZG5sCi1BTV9NSVNTSU5HX1BST0coW0FDTE9DQUxdLCBbYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn1dKQotQU1fTUlTU0lOR19QUk9HKFtBVVRPQ09ORl0sIFthdXRvY29uZl0pCi1BTV9NSVNTSU5HX1BST0coW0FVVE9NQUtFXSwgW2F1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufV0pCi1BTV9NSVNTSU5HX1BST0coW0FVVE9IRUFERVJdLCBbYXV0b2hlYWRlcl0pCi1BTV9NSVNTSU5HX1BST0coW01BS0VJTkZPXSwgW21ha2VpbmZvXSkKLUFDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCi1BQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19NS0RJUl9QXSlkbmwKLSMgRm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVG8gYmUgcmVtb3ZlZCBvbmNlIEF1dG9tYWtlIDEuOS54Ci0jIGRpZXMgb3V0IGZvciBnb29kLiAgRm9yIG1vcmUgYmFja2dyb3VuZCwgc2VlOgotIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMDEuaHRtbD4KLSMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDE0Lmh0bWw+Ci1BQ19TVUJTVChbbWtkaXJfcF0sIFsnJChNS0RJUl9QKSddKQotIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0IChhbmQgcG9zc2libHkgdGhlIFRBUCBkcml2ZXIpLiAgVGhlCi0jIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24gc29tZSBwbGF0Zm9ybXMuCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKLUFDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCi1fQU1fSUZfT1BUSU9OKFt0YXItdXN0YXJdLCBbX0FNX1BST0dfVEFSKFt1c3Rhcl0pXSwKLQkgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKLQkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKLV9BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAotW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKLQkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ0NdKV0sCi0JCSAgW200X2RlZmluZShbQUNfUFJPR19DQ10sCi0JCQkgICAgIG00X2RlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKFtDQ10pXSldKWRubAotQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLQkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ1hYXSldLAotCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwKLQkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKFtDWFhdKV0pXSlkbmwKLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAotCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtPQkpDXSldLAotCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfT0JKQ10sCi0JCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ10pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNdKV0pXSlkbmwKLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNYWF0sCi0JCSAgW19BTV9ERVBFTkRFTkNJRVMoW09CSkNYWF0pXSwKLQkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX09CSkNYWF0sCi0JCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldKV0pZG5sCi1dKQotQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSlkbmwKLWRubCBUaGUgdGVzdHN1aXRlIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQotZG5sICdhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcwotZG5sIG1hY3JvIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KLUFDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCi1bbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCi0gIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAotCi0jIFBPU0lYIHdpbGwgc2F5IGluIGEgZnV0dXJlIHZlcnNpb24gdGhhdCBydW5uaW5nICJybSAtZiIgd2l0aCBubyBhcmd1bWVudAotIyBpcyBPSzsgYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBtYWtlIHRoYXQgYXNzdW1wdGlvbiBpbiBvdXIgTWFrZWZpbGUKLSMgcmVjaXBlcy4gIFNvIHVzZSBhbiBhZ2dyZXNzaXZlIHByb2JlIHRvIGNoZWNrIHRoYXQgdGhlIHVzYWdlIHdlIHdhbnQgaXMKLSMgYWN0dWFsbHkgc3VwcG9ydGVkICJpbiB0aGUgd2lsZCIgdG8gYW4gYWNjZXB0YWJsZSBkZWdyZWUuCi0jIFNlZSBhdXRvbWFrZSBidWcjMTA4MjguCi0jIFRvIG1ha2UgYW55IGlzc3VlIG1vcmUgdmlzaWJsZSwgY2F1c2UgdGhlIHJ1bm5pbmcgY29uZmlndXJlIHRvIGJlIGFib3J0ZWQKLSMgYnkgZGVmYXVsdCBpZiB0aGUgJ3JtJyBwcm9ncmFtIGluIHVzZSBkb2Vzbid0IG1hdGNoIG91ciBleHBlY3RhdGlvbnM7IHRoZQotIyB1c2VyIGNhbiBzdGlsbCBvdmVycmlkZSB0aGlzIHRob3VnaC4KLWlmIHJtIC1mICYmIHJtIC1mciAmJiBybSAtcmY7IHRoZW4gOiBPSzsgZWxzZQotICBjYXQgPiYyIDw8J0VORCcKLU9vcHMhCi0KLVlvdXIgJ3JtJyBwcm9ncmFtIHNlZW1zIHVuYWJsZSB0byBydW4gd2l0aG91dCBmaWxlIG9wZXJhbmRzIHNwZWNpZmllZAotb24gdGhlIGNvbW1hbmQgbGluZSwgZXZlbiB3aGVuIHRoZSAnLWYnIG9wdGlvbiBpcyBwcmVzZW50LiAgVGhpcyBpcyBjb250cmFyeQotdG8gdGhlIGJlaGF2aW91ciBvZiBtb3N0IHJtIHByb2dyYW1zIG91dCB0aGVyZSwgYW5kIG5vdCBjb25mb3JtaW5nIHdpdGgKLXRoZSB1cGNvbWluZyBQT1NJWCBzdGFuZGFyZDogPGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTU0Mj4KLQotUGxlYXNlIHRlbGwgYnVnLWF1dG9tYWtlQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgdmFsdWUKLW9mIHlvdXIgJFBBVEggYW5kIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMgbWVzc2FnZS4gIFRoaXMKLWNhbiBoZWxwIHVzIGltcHJvdmUgZnV0dXJlIGF1dG9tYWtlIHZlcnNpb25zLgotCi1FTkQKLSAgaWYgdGVzdCB4IiRBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTSIgPSB4InllcyI7IHRoZW4KLSAgICBlY2hvICdDb25maWd1cmF0aW9uIHdpbGwgcHJvY2VlZCBhbnl3YXksIHNpbmNlIHlvdSBoYXZlIHNldCB0aGUnID4mMgotICAgIGVjaG8gJ0FDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIHZhcmlhYmxlIHRvICJ5ZXMiJyA+JjIKLSAgICBlY2hvID4mMgotICBlbHNlCi0gICAgY2F0ID4mMiA8PCdFTkQnCi1BYm9ydGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCB0byBlbnN1cmUgeW91IHRha2Ugbm90aWNlIG9mIHRoZSBpc3N1ZS4KLQotWW91IGNhbiBkb3dubG9hZCBhbmQgaW5zdGFsbCBHTlUgY29yZXV0aWxzIHRvIGdldCBhbiAncm0nIGltcGxlbWVudGF0aW9uCi10aGF0IGJlaGF2ZXMgcHJvcGVybHk6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLz4uCi0KLUlmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgdXNpbmcgeW91ciBwcm9ibGVtYXRpYwotJ3JtJyBhbnl3YXksIGV4cG9ydCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0KLXRvICJ5ZXMiLCBhbmQgcmUtcnVuIGNvbmZpZ3VyZS4KLQotRU5ECi0gICAgQUNfTVNHX0VSUk9SKFtZb3VyICdybScgcHJvZ3JhbSBpcyBiYWQsIHNvcnJ5Ll0pCi0gIGZpCi1maQotZG5sIFRoZSB0cmFpbGluZyBuZXdsaW5lIGluIHRoaXMgbWFjcm8ncyBkZWZpbml0aW9uIGlzIGRlbGliZXJhdGUsIGZvcgotZG5sIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHRvIGFsbG93IHRyYWlsaW5nICdkbmwnLXN0eWxlIGNvbW1lbnRzCi1kbmwgYWZ0ZXIgdGhlIEFNX0lOSVRfQVVUT01BS0UgaW52b2NhdGlvbi4gU2VlIGF1dG9tYWtlIGJ1ZyMxNjg0MS4KLV0pCi0KLWRubCBIb29rIGludG8gJ19BQ19DT01QSUxFUl9FWEVFWFQnIGVhcmx5IHRvIGxlYXJuIGl0cyBleHBhbnNpb24uICBEbyBub3QKLWRubCBhZGQgdGhlIGNvbmRpdGlvbmFsIHJpZ2h0IGhlcmUsIGFzIF9BQ19DT01QSUxFUl9FWEVFWFQgbWF5IGJlIGZ1cnRoZXIKLWRubCBtYW5nbGVkIGJ5IEF1dG9jb25mIGFuZCBydW4gaW4gYSBzaGVsbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQuCi1tNF9kZWZpbmUoW19BQ19DT01QSUxFUl9FWEVFWFRdLAotbTRfZGVmbihbX0FDX0NPTVBJTEVSX0VYRUVYVF0pW200X3Byb3ZpZGUoW19BTV9DT01QSUxFUl9FWEVFWFRdKV0pCi0KLSMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KLSMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCi0jIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KLQotIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQotIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCi0jIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KLUFDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKLVsjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCi1fYW1fYXJnPSQxCi1fYW1fc3RhbXBfY291bnQ9MQotZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCi0gIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQotICAgICAgYnJlYWsgOzsKLSAgICAqICkKLSAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKLSAgZXNhYwotZG9uZQotZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQotCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19JTlNUQUxMX1NICi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgJGluc3RhbGxfc2guCi1BQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKLVtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1pZiB0ZXN0IHgiJHtpbnN0YWxsX3NoK3NldH0iICE9IHhzZXQ7IHRoZW4KLSAgY2FzZSAkYW1fYXV4X2RpciBpbgotICAqXCAqIHwgKlwJKikKLSAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OwotICAqKQotICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgotICBlc2FjCi1maQotQUNfU1VCU1QoW2luc3RhbGxfc2hdKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBDaGVjayB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtIHN1cHBvcnRzIGZpbGVuYW1lcwotIyB3aXRoIGEgbGVhZGluZyBkb3QuICBGb3IgaW5zdGFuY2UgTVMtRE9TIGRvZXNuJ3QuCi1BQ19ERUZVTihbQU1fU0VUX0xFQURJTkdfRE9UXSwKLVtybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAotbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAudHN0OyB0aGVuCi0gIGFtX19sZWFkaW5nX2RvdD0uCi1lbHNlCi0gIGFtX19sZWFkaW5nX2RvdD1fCi1maQotcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAotQUNfU1VCU1QoW2FtX19sZWFkaW5nX2RvdF0pXSkKLQotIyBBZGQgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIG9wdGlvbiB0byBjb25maWd1cmUuICAgICAgICAgLSotIEF1dG9jb25mIC0qLQotIyBGcm9tIEppbSBNZXllcmluZwotCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fTUFJTlRBSU5FUl9NT0RFKFtERUZBVUxULU1PREVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbnRyb2wgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuCi0jIERlZmF1bHQgaXMgdG8gZGlzYWJsZSB0aGVtLCB1bmxlc3MgJ2VuYWJsZScgaXMgcGFzc2VkIGxpdGVyYWxseS4KLSMgRm9yIHN5bW1ldHJ5LCAnZGlzYWJsZScgbWF5IGJlIHBhc3NlZCBhcyB3ZWxsLiAgQW55d2F5LCB0aGUgdXNlcgotIyBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2l0aCB0aGUgLS1lbmFibGUvLS1kaXNhYmxlIHN3aXRjaC4KLUFDX0RFRlVOKFtBTV9NQUlOVEFJTkVSX01PREVdLAotW200X2Nhc2UobTRfZGVmYXVsdChbJDFdLCBbZGlzYWJsZV0pLAotICAgICAgIFtlbmFibGVdLCBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2Rpc2FibGVdKV0sCi0gICAgICAgW2Rpc2FibGVdLCBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2VuYWJsZV0pXSwKLSAgICAgICBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2VuYWJsZV0pCi0gICAgICAgIG00X3dhcm4oW3N5bnRheF0sIFt1bmV4cGVjdGVkIGFyZ3VtZW50IHRvIEFNQCZ0QF9NQUlOVEFJTkVSX01PREU6ICQxXSldKQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlc10pCi0gIGRubCBtYWludGFpbmVyLW1vZGUncyBkZWZhdWx0IGlzICdkaXNhYmxlJyB1bmxlc3MgJ2VuYWJsZScgaXMgcGFzc2VkCi0gIEFDX0FSR19FTkFCTEUoW21haW50YWluZXItbW9kZV0sCi0gICAgW0FTX0hFTFBfU1RSSU5HKFstLV1hbV9tYWludGFpbmVyX290aGVyWy1tYWludGFpbmVyLW1vZGVdLAotICAgICAgYW1fbWFpbnRhaW5lcl9vdGhlclsgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKLSAgICAgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdKV0sCi0gICAgW1VTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbF0sCi0gICAgW1VTRV9NQUlOVEFJTkVSX01PREU9XW00X2lmKGFtX21haW50YWluZXJfb3RoZXIsIFtlbmFibGVdLCBbbm9dLCBbeWVzXSkpCi0gIEFDX01TR19SRVNVTFQoWyRVU0VfTUFJTlRBSU5FUl9NT0RFXSkKLSAgQU1fQ09ORElUSU9OQUwoW01BSU5UQUlORVJfTU9ERV0sIFt0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzXSkKLSAgTUFJTlQ9JE1BSU5UQUlORVJfTU9ERV9UUlVFCi0gIEFDX1NVQlNUKFtNQUlOVF0pZG5sCi1dCi0pCi0KLSMgQ2hlY2sgdG8gc2VlIGhvdyAnbWFrZScgdHJlYXRzIGluY2x1ZGVzLgkgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBBTV9NQUtFX0lOQ0xVREUoKQotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaG93IG1ha2UgdHJlYXRzIGluY2x1ZGVzLgotQUNfREVGVU4oW0FNX01BS0VfSU5DTFVERV0sCi1bYW1fbWFrZT0ke01BS0UtbWFrZX0KLWNhdCA+IGNvbmZpbmMgPDwgJ0VORCcKLWFtX19kb2l0OgotCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAotLlBIT05ZOiBhbV9fZG9pdAotRU5ECi0jIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2VdKQotYW1fX2luY2x1ZGU9IiMiCi1hbV9fcXVvdGU9Ci1fYW1fcmVzdWx0PW5vbmUKLSMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCi1lY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCi0jIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSAnbWFrZScuCi1jYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAotKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCi0gIGFtX19pbmNsdWRlPWluY2x1ZGUKLSAgYW1fX3F1b3RlPQotICBfYW1fcmVzdWx0PUdOVQotICA7OwotZXNhYwotIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCi1pZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCi0gICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCi0gICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAotICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCi0gICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCi0gICAgIGFtX19xdW90ZT0iXCIiCi0gICAgIF9hbV9yZXN1bHQ9QlNECi0gICAgIDs7Ci0gICBlc2FjCi1maQotQUNfU1VCU1QoW2FtX19pbmNsdWRlXSkKLUFDX1NVQlNUKFthbV9fcXVvdGVdKQotQUNfTVNHX1JFU1VMVChbJF9hbV9yZXN1bHRdKQotcm0gLWYgY29uZmluYyBjb25mbWYKLV0pCi0KLSMgRmFrZSB0aGUgZXhpc3RlbmNlIG9mIHByb2dyYW1zIHRoYXQgR05VIG1haW50YWluZXJzIHVzZS4gIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX01JU1NJTkdfUFJPRyhOQU1FLCBQUk9HUkFNKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9NSVNTSU5HX1BST0ddLAotW0FDX1JFUVVJUkUoW0FNX01JU1NJTkdfSEFTX1JVTl0pCi0kMT0keyQxLSIke2FtX21pc3NpbmdfcnVufSQyIn0KLUFDX1NVQlNUKCQxKV0pCi0KLSMgQU1fTUlTU0lOR19IQVNfUlVOCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgaXMgbW9kZXJuIGVub3VnaC4KLSMgSWYgaXQgaXMsIHNldCBhbV9taXNzaW5nX3J1biB0byB1c2UgaXQsIG90aGVyd2lzZSwgdG8gbm90aGluZy4KLUFDX0RFRlVOKFtBTV9NSVNTSU5HX0hBU19SVU5dLAotW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKLUFDX1JFUVVJUkVfQVVYX0ZJTEUoW21pc3NpbmddKWRubAotaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCi0gIGNhc2UgJGFtX2F1eF9kaXIgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OwotICAqKQotICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OwotICBlc2FjCi1maQotIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCi1pZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgotICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgotZWxzZQotICBhbV9taXNzaW5nX3J1bj0KLSAgQUNfTVNHX1dBUk4oWydtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKLWZpCi1dKQotCi0jIENvcHlyaWdodCAoQykgMjAwMy0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19NS0RJUl9QCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgJ21rZGlyIC1wJy4KLUFDX0RFRlVOKFtBTV9QUk9HX01LRElSX1BdLAotW0FDX1BSRVJFUShbMi42MF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAotZG5sIEZJWE1FIHdlIGFyZSBubyBsb25nZXIgZ29pbmcgdG8gcmVtb3ZlIHRoaXMhIGFkanVzdCB3YXJuaW5nCi1kbmwgRklYTUUgbWVzc2FnZSBhY2NvcmRpbmdseS4KLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCi1bJDA6IHRoaXMgbWFjcm8gaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgc29vbiBiZSByZW1vdmVkLgotWW91IHNob3VsZCB1c2UgdGhlIEF1dG9jb25mLXByb3ZpZGVkICdBQ11bX1BST0dfTUtESVJfUCcgbWFjcm8gaW5zdGVhZCwKLWFuZCB1c2UgJyQoTUtESVJfUCknIGluc3RlYWQgb2YgJyQobWtkaXJfcCknaW4geW91ciBNYWtlZmlsZS5hbSBmaWxlcy5dKQotZG5sIEF1dG9tYWtlIDEuOCB0byAxLjkuNiB1c2VkIHRvIGRlZmluZSBta2Rpcl9wLiAgV2Ugbm93IHVzZSBNS0RJUl9QLAotZG5sIHdoaWxlIGtlZXBpbmcgYSBkZWZpbml0aW9uIG9mIG1rZGlyX3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi1kbmwgQE1LRElSX1BAIGlzIG1hZ2ljOiBBQ19PVVRQVVQgYWRqdXN0cyBpdHMgdmFsdWUgZm9yIGVhY2ggTWFrZWZpbGUuCi1kbmwgSG93ZXZlciB3ZSBjYW5ub3QgZGVmaW5lIG1rZGlyX3AgYXMgJChNS0RJUl9QKSBmb3IgdGhlIHNha2Ugb2YKLWRubCBNYWtlZmlsZS5pbnMgdGhhdCBkbyBub3QgZGVmaW5lIE1LRElSX1AsIHNvIHdlIGRvIG91ciBvd24KLWRubCBhZGp1c3RtZW50IHVzaW5nIHRvcF9idWlsZGRpciAod2hpY2ggaXMgZGVmaW5lZCBtb3JlIG9mdGVuIHRoYW4KLWRubCBNS0RJUl9QKS4KLUFDX1NVQlNUKFtta2Rpcl9wXSwgWyIkTUtESVJfUCJdKWRubAotY2FzZSAkbWtkaXJfcCBpbgotICBbW1xcLyRdXSogfCA/OltbXFwvXV0qKSA7OwotICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7Ci1lc2FjCi1dKQotCi0jIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKLVtbX0FNX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQotCi0jIF9BTV9TRVRfT1BUSU9OKE5BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBvcHRpb24gTkFNRS4gIFByZXNlbnRseSB0aGF0IG9ubHkgbWVhbnMgZGVmaW5pbmcgYSBmbGFnIGZvciB0aGlzIG9wdGlvbi4KLUFDX0RFRlVOKFtfQU1fU0VUX09QVElPTl0sCi1bbTRfZGVmaW5lKF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCBbMV0pXSkKLQotIyBfQU1fU0VUX09QVElPTlMoT1BUSU9OUykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE9QVElPTlMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBBdXRvbWFrZSBvcHRpb25zLgotQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCi1bbTRfZm9yZWFjaF93KFtfQU1fT3B0aW9uXSwgWyQxXSwgW19BTV9TRVRfT1BUSU9OKF9BTV9PcHRpb24pXSldKQotCi0jIF9BTV9JRl9PUFRJT04oT1BUSU9OLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KLUFDX0RFRlVOKFtfQU1fSUZfT1BUSU9OXSwKLVttNF9pZnNldChfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgWyQyXSwgWyQzXSldKQotCi0jIENvcHlyaWdodCAoQykgMTk5OS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgX0FNX1BST0dfQ0NfQ19PCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBMaWtlIEFDX1BST0dfQ0NfQ19PLCBidXQgY2hhbmdlZCBmb3IgYXV0b21ha2UuICBXZSByZXdyaXRlIEFDX1BST0dfQ0MKLSMgdG8gYXV0b21hdGljYWxseSBjYWxsIHRoaXMuCi1BQ19ERUZVTihbX0FNX1BST0dfQ0NfQ19PXSwKLVtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1BQ19SRVFVSVJFX0FVWF9GSUxFKFtjb21waWxlXSlkbmwKLUFDX0xBTkdfUFVTSChbQ10pZG5sCi1BQ19DQUNIRV9DSEVDSygKLSAgW3doZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlcl0sCi0gIFthbV9jdl9wcm9nX2NjX2Nfb10sCi0gIFtBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW10pXSkKLSAgIyBNYWtlIHN1cmUgaXQgd29ya3MgYm90aCB3aXRoICRDQyBhbmQgd2l0aCBzaW1wbGUgY2MuCi0gICMgRm9sbG93aW5nIEFDX1BST0dfQ0NfQ19PLCB3ZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUKLSAgIyBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sCi0gICMgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgotICBhbV9jdl9wcm9nX2NjX2Nfbz15ZXMKLSAgZm9yIGFtX2kgaW4gMSAyOyBkbwotICAgIGlmIEFNX1JVTl9MT0coWyRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0XSkgXAotICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dDsgdGhlbgotICAgICAgOiBPSwotICAgIGVsc2UKLSAgICAgIGFtX2N2X3Byb2dfY2NfY19vPW5vCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgcm0gLWYgY29yZSBjb25mdGVzdCoKLSAgdW5zZXQgYW1faV0pCi1pZiB0ZXN0ICIkYW1fY3ZfcHJvZ19jY19jX28iICE9IHllczsgdGhlbgotICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KLSAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCi0gICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KLSAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKLSAgICMgYW5kIHRoZW4gd2UgY291bGQgc2V0IGFtX19DQz0iXCQodG9wX3NyY2RpcikvY29tcGlsZSBcJChDQykiCi0gICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCi1maQotQUNfTEFOR19QT1AoW0NdKV0pCi0KLSMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi1BQ19ERUZVTl9PTkNFKFtBTV9QUk9HX0NDX0NfT10sIFtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSldKQotCi0jIENvcHlyaWdodCAoQykgMTk5OS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLQotIyBBTV9QQVRIX1BZVEhPTihbTUlOSU1VTS1WRVJTSU9OXSwgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFkZHMgc3VwcG9ydCBmb3IgZGlzdHJpYnV0aW5nIFB5dGhvbiBtb2R1bGVzIGFuZCBwYWNrYWdlcy4gIFRvCi0jIGluc3RhbGwgbW9kdWxlcywgY29weSB0aGVtIHRvICQocHl0aG9uZGlyKSwgdXNpbmcgdGhlIHB5dGhvbl9QWVRIT04KLSMgYXV0b21ha2UgdmFyaWFibGUuICBUbyBpbnN0YWxsIGEgcGFja2FnZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlCi0jIGF1dG9tYWtlIHBhY2thZ2UsIGluc3RhbGwgdG8gJChwa2dweXRob25kaXIpLCBvciB1c2UgdGhlCi0jIHBrZ3B5dGhvbl9QWVRIT04gYXV0b21ha2UgdmFyaWFibGUuCi0jCi0jIFRoZSB2YXJpYWJsZXMgJChweWV4ZWNkaXIpIGFuZCAkKHBrZ3B5ZXhlY2RpcikgYXJlIHByb3ZpZGVkIGFzCi0jIGxvY2F0aW9ucyB0byBpbnN0YWxsIHB5dGhvbiBleHRlbnNpb24gbW9kdWxlcyAoc2hhcmVkIGxpYnJhcmllcykuCi0jIEFub3RoZXIgbWFjcm8gaXMgcmVxdWlyZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgdG8gY29tcGlsZQotIyBleHRlbnNpb24gbW9kdWxlcy4KLSMKLSMgSWYgeW91ciBwYWNrYWdlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIGRpZmZlcmVudCBwcmVmaXggdG8gcHl0aG9uLAotIyB1c2VycyB3aWxsIGhhdmUgdG8gYWRkIHRoZSBpbnN0YWxsIGRpcmVjdG9yeSB0byB0aGUgUFlUSE9OUEFUSAotIyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgY3JlYXRlIGEgLnB0aCBmaWxlIChzZWUgdGhlIHB5dGhvbgotIyBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4KLSMKLSMgSWYgdGhlIE1JTklNVU0tVkVSU0lPTiBhcmd1bWVudCBpcyBwYXNzZWQsIEFNX1BBVEhfUFlUSE9OIHdpbGwKLSMgY2F1c2UgYW4gZXJyb3IgaWYgdGhlIHZlcnNpb24gb2YgcHl0aG9uIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtCi0jIGRvZXNuJ3QgbWVldCB0aGUgcmVxdWlyZW1lbnQuICBNSU5JTVVNLVZFUlNJT04gc2hvdWxkIGNvbnNpc3Qgb2YKLSMgbnVtYmVycyBhbmQgZG90cyBvbmx5LgotQUNfREVGVU4oW0FNX1BBVEhfUFlUSE9OXSwKLSBbCi0gIGRubCBGaW5kIGEgUHl0aG9uIGludGVycHJldGVyLiAgUHl0aG9uIHZlcnNpb25zIHByaW9yIHRvIDIuMCBhcmUgbm90Ci0gIGRubCBzdXBwb3J0ZWQuICgyLjAgd2FzIHJlbGVhc2VkIG9uIE9jdG9iZXIgMTYsIDIwMDApLgotICBtNF9kZWZpbmVfZGVmYXVsdChbX0FNX1BZVEhPTl9JTlRFUlBSRVRFUl9MSVNUXSwKLVtweXRob24gcHl0aG9uMiBweXRob24zIHB5dGhvbjMuMyBweXRob24zLjIgcHl0aG9uMy4xIHB5dGhvbjMuMCBweXRob24yLjcgZG5sCi0gcHl0aG9uMi42IHB5dGhvbjIuNSBweXRob24yLjQgcHl0aG9uMi4zIHB5dGhvbjIuMiBweXRob24yLjEgcHl0aG9uMi4wXSkKLQotICBBQ19BUkdfVkFSKFtQWVRIT05dLCBbdGhlIFB5dGhvbiBpbnRlcnByZXRlcl0pCi0KLSAgbTRfaWYoWyQxXSxbXSxbCi0gICAgZG5sIE5vIHZlcnNpb24gY2hlY2sgaXMgbmVlZGVkLgotICAgICMgRmluZCBhbnkgUHl0aG9uIGludGVycHJldGVyLgotICAgIGlmIHRlc3QgLXogIiRQWVRIT04iOyB0aGVuCi0gICAgICBBQ19QQVRIX1BST0dTKFtQWVRIT05dLCBfQU1fUFlUSE9OX0lOVEVSUFJFVEVSX0xJU1QsIDopCi0gICAgZmkKLSAgICBhbV9kaXNwbGF5X1BZVEhPTj1weXRob24KLSAgXSwgWwotICAgIGRubCBBIHZlcnNpb24gY2hlY2sgaXMgbmVlZGVkLgotICAgIGlmIHRlc3QgLW4gIiRQWVRIT04iOyB0aGVuCi0gICAgICAjIElmIHRoZSB1c2VyIHNldCAkUFlUSE9OLCB1c2UgaXQgYW5kIGRvbid0IHNlYXJjaCBzb21ldGhpbmcgZWxzZS4KLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAkUFlUSE9OIHZlcnNpb24gaXMgPj0gJDFdKQotICAgICAgQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT04oWyRQWVRIT05dLCBbJDFdLAotCQkJICAgICAgW0FDX01TR19SRVNVTFQoW3llc10pXSwKLQkJCSAgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pCi0JCQkgICAgICAgQUNfTVNHX0VSUk9SKFtQeXRob24gaW50ZXJwcmV0ZXIgaXMgdG9vIG9sZF0pXSkKLSAgICAgIGFtX2Rpc3BsYXlfUFlUSE9OPSRQWVRIT04KLSAgICBlbHNlCi0gICAgICAjIE90aGVyd2lzZSwgdHJ5IGVhY2ggaW50ZXJwcmV0ZXIgdW50aWwgd2UgZmluZCBvbmUgdGhhdCBzYXRpc2ZpZXMKLSAgICAgICMgVkVSU0lPTi4KLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCB2ZXJzaW9uID49ICQxXSwKLQlbYW1fY3ZfcGF0aGxlc3NfUFlUSE9OXSxbCi0JZm9yIGFtX2N2X3BhdGhsZXNzX1BZVEhPTiBpbiBfQU1fUFlUSE9OX0lOVEVSUFJFVEVSX0xJU1Qgbm9uZTsgZG8KLQkgIHRlc3QgIiRhbV9jdl9wYXRobGVzc19QWVRIT04iID0gbm9uZSAmJiBicmVhawotCSAgQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT04oWyRhbV9jdl9wYXRobGVzc19QWVRIT05dLCBbJDFdLCBbYnJlYWtdKQotCWRvbmVdKQotICAgICAgIyBTZXQgJFBZVEhPTiB0byB0aGUgYWJzb2x1dGUgcGF0aCBvZiAkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OLgotICAgICAgaWYgdGVzdCAiJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiIgPSBub25lOyB0aGVuCi0JUFlUSE9OPToKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfUEFUSF9QUk9HKFtQWVRIT05dLCBbJGFtX2N2X3BhdGhsZXNzX1BZVEhPTl0pCi0gICAgICBmaQotICAgICAgYW1fZGlzcGxheV9QWVRIT049JGFtX2N2X3BhdGhsZXNzX1BZVEhPTgotICAgIGZpCi0gIF0pCi0KLSAgaWYgdGVzdCAiJFBZVEhPTiIgPSA6OyB0aGVuCi0gIGRubCBSdW4gYW55IHVzZXItc3BlY2lmaWVkIGFjdGlvbiwgb3IgYWJvcnQuCi0gICAgbTRfZGVmYXVsdChbJDNdLCBbQUNfTVNHX0VSUk9SKFtubyBzdWl0YWJsZSBQeXRob24gaW50ZXJwcmV0ZXIgZm91bmRdKV0pCi0gIGVsc2UKLQotICBkbmwgUXVlcnkgUHl0aG9uIGZvciBpdHMgdmVyc2lvbiBudW1iZXIuICBHZXR0aW5nIFs6M10gc2VlbXMgdG8gYmUKLSAgZG5sIHRoZSBiZXN0IHdheSB0byBkbyB0aGlzOyBpdCdzIHdoYXQgInNpdGUucHkiIGRvZXMgaW4gdGhlIHN0YW5kYXJkCi0gIGRubCBsaWJyYXJ5LgotCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHZlcnNpb25dLCBbYW1fY3ZfcHl0aG9uX3ZlcnNpb25dLAotICAgIFthbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbltbOjNdXSkiYF0pCi0gIEFDX1NVQlNUKFtQWVRIT05fVkVSU0lPTl0sIFskYW1fY3ZfcHl0aG9uX3ZlcnNpb25dKQotCi0gIGRubCBVc2UgdGhlIHZhbHVlcyBvZiAkcHJlZml4IGFuZCAkZXhlY19wcmVmaXggZm9yIHRoZSBjb3JyZXNwb25kaW5nCi0gIGRubCB2YWx1ZXMgb2YgUFlUSE9OX1BSRUZJWCBhbmQgUFlUSE9OX0VYRUNfUFJFRklYLiAgVGhlc2UgYXJlIG1hZGUKLSAgZG5sIGRpc3RpbmN0IHZhcmlhYmxlcyBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGlmIG5lZWQgYmUuICBIb3dldmVyLAotICBkbmwgZ2VuZXJhbCBjb25zZW5zdXMgaXMgdGhhdCB5b3Ugc2hvdWxkbid0IG5lZWQgdGhpcyBhYmlsaXR5LgotCi0gIEFDX1NVQlNUKFtQWVRIT05fUFJFRklYXSwgWycke3ByZWZpeH0nXSkKLSAgQUNfU1VCU1QoW1BZVEhPTl9FWEVDX1BSRUZJWF0sIFsnJHtleGVjX3ByZWZpeH0nXSkKLQotICBkbmwgQXQgdGltZXMgKGxpa2Ugd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKSB5b3UgbWF5IHdhbnQKLSAgZG5sIHRvIGtub3cgd2hpY2ggT1MgcGxhdGZvcm0gUHl0aG9uIHRoaW5rcyB0aGlzIGlzLgotCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHBsYXRmb3JtXSwgW2FtX2N2X3B5dGhvbl9wbGF0Zm9ybV0sCi0gICAgW2FtX2N2X3B5dGhvbl9wbGF0Zm9ybT1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMucGxhdGZvcm0pImBdKQotICBBQ19TVUJTVChbUFlUSE9OX1BMQVRGT1JNXSwgWyRhbV9jdl9weXRob25fcGxhdGZvcm1dKQotCi0gICMgSnVzdCBmYWN0b3Igb3V0IHNvbWUgY29kZSBkdXBsaWNhdGlvbi4KLSAgYW1fcHl0aG9uX3NldHVwX3N5c2NvbmZpZz0iXAotaW1wb3J0IHN5cwotIyBQcmVmZXIgc3lzY29uZmlnIG92ZXIgZGlzdHV0aWxzLnN5c2NvbmZpZywgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5Ci0jIHdpdGggcHl0aG9uIDMueC4gIFNlZSBhdXRvbWFrZSBidWcjMTAyMjcuCi10cnk6Ci0gICAgaW1wb3J0IHN5c2NvbmZpZwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGNhbl91c2Vfc3lzY29uZmlnID0gMAotZWxzZToKLSAgICBjYW5fdXNlX3N5c2NvbmZpZyA9IDEKLSMgQ2FuJ3QgdXNlIHN5c2NvbmZpZyBpbiBDUHl0aG9uIDIuNywgc2luY2UgaXQncyBicm9rZW4gaW4gdmlydHVhbGVudnM6Ci0jIDxodHRwczovL2dpdGh1Yi5jb20vcHlwYS92aXJ0dWFsZW52L2lzc3Vlcy8xMTg+Ci10cnk6Ci0gICAgZnJvbSBwbGF0Zm9ybSBpbXBvcnQgcHl0aG9uX2ltcGxlbWVudGF0aW9uCi0gICAgaWYgcHl0aG9uX2ltcGxlbWVudGF0aW9uKCkgPT0gJ0NQeXRob24nIGFuZCBzeXMudmVyc2lvbltbOjNdXSA9PSAnMi43JzoKLSAgICAgICAgY2FuX3VzZV9zeXNjb25maWcgPSAwCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcyIKLQotICBkbmwgU2V0IHVwIDQgZGlyZWN0b3JpZXM6Ci0KLSAgZG5sIHB5dGhvbmRpciAtLSB3aGVyZSB0byBpbnN0YWxsIHB5dGhvbiBzY3JpcHRzLiAgVGhpcyBpcyB0aGUKLSAgZG5sICAgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnksIG5vdCB0aGUgcHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkKLSAgZG5sICAgZGlyZWN0b3J5IGxpa2UgaW4gcHJldmlvdXMgYXV0b21ha2UgYmV0YXMuICBUaGlzIGJlaGF2aW9yCi0gIGRubCAgIGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGxpc3BkaXIubTQgZm9yIGV4YW1wbGUuCi0gIGRubCBRdWVyeSBkaXN0dXRpbHMgZm9yIHRoaXMgZGlyZWN0b3J5LgotICBBQ19DQUNIRV9DSEVDSyhbZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBzY3JpcHQgZGlyZWN0b3J5XSwKLSAgICBbYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcl0sCi0gICAgW2lmIHRlc3QgIngkcHJlZml4IiA9IHhOT05FCi0gICAgIHRoZW4KLSAgICAgICBhbV9weV9wcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4Ci0gICAgIGVsc2UKLSAgICAgICBhbV9weV9wcmVmaXg9JHByZWZpeAotICAgICBmaQotICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWAkUFlUSE9OIC1jICIKLSRhbV9weXRob25fc2V0dXBfc3lzY29uZmlnCi1pZiBjYW5fdXNlX3N5c2NvbmZpZzoKLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9wYXRoKCdwdXJlbGliJywgdmFycz17J2Jhc2UnOickYW1fcHlfcHJlZml4J30pCi1lbHNlOgotICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKDAsIDAsIHByZWZpeD0nJGFtX3B5X3ByZWZpeCcpCi1zeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpImAKLSAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciBpbgotICAgICAkYW1fcHlfcHJlZml4KikKLSAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCi0gICAgICAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj1gZWNobyAiJGFtX2N2X3B5dGhvbl9weXRob25kaXIiIHwgc2VkICJzLF4kYW1fX3N0cmlwX3ByZWZpeCwkUFlUSE9OX1BSRUZJWCwiYAotICAgICAgIDs7Ci0gICAgICopCi0gICAgICAgY2FzZSAkYW1fcHlfcHJlZml4IGluCi0gICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OwotICAgICAgICAgKikKLQkgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JFBZVEhPTl9QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCi0JICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwotICAgICBlc2FjCi0gICAgXSkKLSAgQUNfU1VCU1QoW3B5dGhvbmRpcl0sIFskYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcl0pCi0KLSAgZG5sIHBrZ3B5dGhvbmRpciAtLSAkUEFDS0FHRSBkaXJlY3RvcnkgdW5kZXIgcHl0aG9uZGlyLiAgV2FzCi0gIGRubCAgIFBZVEhPTl9TSVRFX1BBQ0tBR0UgaW4gcHJldmlvdXMgYmV0YXMsIGJ1dCB0aGlzIG5hbWluZyBpcwotICBkbmwgICBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiBhdXRvbWFrZS4KLQotICBBQ19TVUJTVChbcGtncHl0aG9uZGlyXSwgW1wke3B5dGhvbmRpcn0vJFBBQ0tBR0VdKQotCi0gIGRubCBweWV4ZWNkaXIgLS0gZGlyZWN0b3J5IGZvciBpbnN0YWxsaW5nIHB5dGhvbiBleHRlbnNpb24gbW9kdWxlcwotICBkbmwgICAoc2hhcmVkIGxpYnJhcmllcykKLSAgZG5sIFF1ZXJ5IGRpc3R1dGlscyBmb3IgdGhpcyBkaXJlY3RvcnkuCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIGV4dGVuc2lvbiBtb2R1bGUgZGlyZWN0b3J5XSwKLSAgICBbYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcl0sCi0gICAgW2lmIHRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUKLSAgICAgdGhlbgotICAgICAgIGFtX3B5X2V4ZWNfcHJlZml4PSRhbV9weV9wcmVmaXgKLSAgICAgZWxzZQotICAgICAgIGFtX3B5X2V4ZWNfcHJlZml4PSRleGVjX3ByZWZpeAotICAgICBmaQotICAgICBhbV9jdl9weXRob25fcHlleGVjZGlyPWAkUFlUSE9OIC1jICIKLSRhbV9weXRob25fc2V0dXBfc3lzY29uZmlnCi1pZiBjYW5fdXNlX3N5c2NvbmZpZzoKLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0bGliJywgdmFycz17J3BsYXRiYXNlJzonJGFtX3B5X3ByZWZpeCd9KQotZWxzZToKLSAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigxLCAwLCBwcmVmaXg9JyRhbV9weV9wcmVmaXgnKQotc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSJgCi0gICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIgaW4KLSAgICAgJGFtX3B5X2V4ZWNfcHJlZml4KikKLSAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfZXhlY19wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKLSAgICAgICBhbV9jdl9weXRob25fcHlleGVjZGlyPWBlY2hvICIkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciIgfCBzZWQgInMsXiRhbV9fc3RyaXBfcHJlZml4LCRQWVRIT05fRVhFQ19QUkVGSVgsImAKLSAgICAgICA7OwotICAgICAqKQotICAgICAgIGNhc2UgJGFtX3B5X2V4ZWNfcHJlZml4IGluCi0gICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OwotICAgICAgICAgKikKLQkgICBhbV9jdl9weXRob25fcHlleGVjZGlyPSRQWVRIT05fRVhFQ19QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCi0JICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgZXNhYwotICAgIF0pCi0gIEFDX1NVQlNUKFtweWV4ZWNkaXJdLCBbJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXJdKQotCi0gIGRubCBwa2dweWV4ZWNkaXIgLS0gJChweWV4ZWNkaXIpLyQoUEFDS0FHRSkKLQotICBBQ19TVUJTVChbcGtncHlleGVjZGlyXSwgW1wke3B5ZXhlY2Rpcn0vJFBBQ0tBR0VdKQotCi0gIGRubCBSdW4gYW55IHVzZXItc3BlY2lmaWVkIGFjdGlvbi4KLSAgJDIKLSAgZmkKLQotXSkKLQotCi0jIEFNX1BZVEhPTl9DSEVDS19WRVJTSU9OKFBST0csIFZFUlNJT04sIFtBQ1RJT04tSUYtVFJVRV0sIFtBQ1RJT04tSUYtRkFMU0VdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUnVuIEFDVElPTi1JRi1UUlVFIGlmIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgUFJPRyBoYXMgdmVyc2lvbiA+PSBWRVJTSU9OLgotIyBSdW4gQUNUSU9OLUlGLUZBTFNFIG90aGVyd2lzZS4KLSMgVGhpcyB0ZXN0IHVzZXMgc3lzLmhleHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgc3RyaW5nIGVxdWl2YWxlbnQgKGZpcnN0Ci0jIHdvcmQgb2Ygc3lzLnZlcnNpb24pLCBpbiBvcmRlciB0byBjb3BlIHdpdGggdmVyc2lvbnMgc3VjaCBhcyAyLjJjMS4KLSMgVGhpcyBzdXBwb3J0cyBQeXRob24gMi4wIG9yIGhpZ2hlci4gKDIuMCB3YXMgcmVsZWFzZWQgb24gT2N0b2JlciAxNiwgMjAwMCkuCi1BQ19ERUZVTihbQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT05dLAotIFtwcm9nPSJpbXBvcnQgc3lzCi0jIHNwbGl0IHN0cmluZ3MgYnkgJy4nIGFuZCBjb252ZXJ0IHRvIG51bWVyaWMuICBBcHBlbmQgc29tZSB6ZXJvcwotIyBiZWNhdXNlIHdlIG5lZWQgYXQgbGVhc3QgNCBkaWdpdHMgZm9yIHRoZSBoZXggY29udmVyc2lvbi4KLSMgbWFwIHJldHVybnMgYW4gaXRlcmF0b3IgaW4gUHl0aG9uIDMuMCBhbmQgYSBsaXN0IGluIDIueAotbWludmVyID0gbGlzdChtYXAoaW50LCAnJDInLnNwbGl0KCcuJykpKSArIFtbMCwgMCwgMF1dCi1taW52ZXJoZXggPSAwCi0jIHhyYW5nZSBpcyBub3QgcHJlc2VudCBpbiBQeXRob24gMy4wIGFuZCByYW5nZSByZXR1cm5zIGFuIGl0ZXJhdG9yCi1mb3IgaSBpbiBsaXN0KHJhbmdlKDAsIDQpKTogbWludmVyaGV4ID0gKG1pbnZlcmhleCA8PCA4KSArIG1pbnZlcltbaV1dCi1zeXMuZXhpdChzeXMuaGV4dmVyc2lvbiA8IG1pbnZlcmhleCkiCi0gIEFTX0lGKFtBTV9SVU5fTE9HKFskMSAtYyAiJHByb2ciXSldLCBbJDNdLCBbJDRdKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBBTV9SVU5fTE9HKENPTU1BTkQpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUnVuIENPTU1BTkQsIHNhdmUgdGhlIGV4aXQgc3RhdHVzIGluIGFjX3N0YXR1cywgYW5kIGxvZyBpdC4KLSMgKFRoaXMgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIEF1dG9jb25mJ3MgX0FDX1JVTl9MT0cgbWFjcm8uKQotQUNfREVGVU4oW0FNX1JVTl9MT0ddLAotW3sgZWNobyAiJGFzX21lOiRMSU5FTk86ICQxIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAoJDEpID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIGFjX3N0YXR1cz0kPwotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIChleGl0ICRhY19zdGF0dXMpOyB9XSkKLQotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQotCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fU0FOSVRZX0NIRUNLCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCi1bQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQotIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKLSMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KLWFtX2xmPScKLScKLWNhc2UgYHB3ZGAgaW4KLSAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCi0gICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKLWVzYWMKLWNhc2UgJHNyY2RpciBpbgotICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCi0gICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiAnJHNyY2RpciddKTs7Ci1lc2FjCi0KLSMgRG8gJ3NldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKLSMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQotIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwotIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKLSMgZGlyZWN0b3J5KS4KLWlmICgKLSAgIGFtX2hhc19zbGVwdD1ubwotICAgZm9yIGFtX3RyeSBpbiAxIDI7IGRvCi0gICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQotICAgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCi0gICAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCi0JIyAtTCBkaWRuJ3Qgd29yay4KLQlzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAotICAgICBmaQotICAgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCi0JJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KLQotCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KLQkjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCi0JIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQotCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLQlBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KLSAgYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudF0pCi0gICAgIGZpCi0gICAgIGlmIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZSB8fCB0ZXN0ICRhbV90cnkgLWVxIDI7IHRoZW4KLSAgICAgICBicmVhawotICAgICBmaQotICAgICAjIEp1c3QgaW4gY2FzZS4KLSAgICAgc2xlZXAgMQotICAgICBhbV9oYXNfc2xlcHQ9eWVzCi0gICBkb25lCi0gICB0ZXN0ICIkWzJdIiA9IGNvbmZ0ZXN0LmZpbGUKLSAgICkKLXRoZW4KLSAgICMgT2suCi0gICA6Ci1lbHNlCi0gICBBQ19NU0dfRVJST1IoW25ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2tdKQotZmkKLUFDX01TR19SRVNVTFQoW3llc10pCi0jIElmIHdlIGRpZG4ndCBzbGVlcCwgd2Ugc3RpbGwgbmVlZCB0byBlbnN1cmUgdGltZSBzdGFtcHMgb2YgY29uZmlnLnN0YXR1cyBhbmQKLSMgZ2VuZXJhdGVkIGZpbGVzIGFyZSBzdHJpY3RseSBuZXdlci4KLWFtX3NsZWVwX3BpZD0KLWlmIGdyZXAgJ3NsZXB0OiBubycgY29uZnRlc3QuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgKCBzbGVlcCAxICkgJgotICBhbV9zbGVlcF9waWQ9JCEKLWZpCi1BQ19DT05GSUdfQ09NTUFORFNfUFJFKAotICBbQUNfTVNHX0NIRUNLSU5HKFt0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmVdKQotICAgaWYgdGVzdCAtbiAiJGFtX3NsZWVwX3BpZCI7IHRoZW4KLSAgICAgIyBIaWRlIHdhcm5pbmdzIGFib3V0IHJldXNlZCBQSURzLgotICAgICB3YWl0ICRhbV9zbGVlcF9waWQgMj4vZGV2L251bGwKLSAgIGZpCi0gICBBQ19NU0dfUkVTVUxUKFtkb25lXSldKQotcm0gLWYgY29uZnRlc3QuZmlsZQotXSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX1NJTEVOVF9SVUxFUyhbREVGQVVMVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuYWJsZSBsZXNzIHZlcmJvc2UgYnVpbGQgcnVsZXM7IHdpdGggdGhlIGRlZmF1bHQgc2V0IHRvIERFRkFVTFQKLSMgKCJ5ZXMiIGJlaW5nIGxlc3MgdmVyYm9zZSwgIm5vIiBvciBlbXB0eSBiZWluZyB2ZXJib3NlKS4KLUFDX0RFRlVOKFtBTV9TSUxFTlRfUlVMRVNdLAotW0FDX0FSR19FTkFCTEUoW3NpbGVudC1ydWxlc10sIFtkbmwKLUFTX0hFTFBfU1RSSU5HKAotICBbLS1lbmFibGUtc2lsZW50LXJ1bGVzXSwKLSAgW2xlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpXSkKLUFTX0hFTFBfU1RSSU5HKAotICBbLS1kaXNhYmxlLXNpbGVudC1ydWxlc10sCi0gIFt2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIildKWRubAotXSkKLWNhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gQCU6QCAoKCgKLSAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKLSAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKLSAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT1tNF9pZihbJDFdLCBbeWVzXSwgWzBdLCBbMV0pOzsKLWVzYWMKLWRubAotZG5sIEEgZmV3ICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4sIE5vblN0b3AgT1MgYW5kIE5leHRTdGVwKQotZG5sIGRvIG5vdCBzdXBwb3J0IG5lc3RlZCB2YXJpYWJsZSBleHBhbnNpb25zLgotZG5sIFNlZSBhdXRvbWFrZSBidWcjOTkyOCBhbmQgYnVnIzEwMjM3LgotYW1fbWFrZT0ke01BS0UtbWFrZX0KLUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXNdLAotICAgW2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzXSwKLSAgIFtpZiBBU19FQ0hPKFtbJ1RSVUU9JChCQVIkKFYpKQotQkFSMD1mYWxzZQotQkFSMT10cnVlCi1WPTEKLWFtX19kb2l0OgotCUAkKFRSVUUpCi0uUEhPTlk6IGFtX19kb2l0J11dKSB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcwotZWxzZQotICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubwotZmldKQotaWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KLSAgZG5sIFVzaW5nICckVicgaW5zdGVhZCBvZiAnJChWKScgYnJlYWtzIElSSVggbWFrZS4KLSAgQU1fVj0nJChWKScKLSAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKLWVsc2UKLSAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKLSAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQotZmkKLUFDX1NVQlNUKFtBTV9WXSlkbmwKLUFNX1NVQlNUX05PVE1BS0UoW0FNX1ZdKWRubAotQUNfU1VCU1QoW0FNX0RFRkFVTFRfVl0pZG5sCi1BTV9TVUJTVF9OT1RNQUtFKFtBTV9ERUZBVUxUX1ZdKWRubAotQUNfU1VCU1QoW0FNX0RFRkFVTFRfVkVSQk9TSVRZXSlkbmwKLUFNX0JBQ0tTTEFTSD0nXCcKLUFDX1NVQlNUKFtBTV9CQUNLU0xBU0hdKWRubAotX0FNX1NVQlNUX05PVE1BS0UoW0FNX0JBQ0tTTEFTSF0pZG5sCi1dKQotCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19JTlNUQUxMX1NUUklQCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgJ2luc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKLSMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5Ci0jIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCi0jIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgotIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCi0jIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiAibWFrZSBpbnN0YWxsLXN0cmlwIiwgYW5kIGluaXRpYWxpemUKLSMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KLUFDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAotW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCi0jIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyAnc3RyaXAnIHdoZW4gdGhlIHVzZXIKLSMgcnVuICJtYWtlIGluc3RhbGwtc3RyaXAiLiAgSG93ZXZlciAnc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKLSMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKLSMgd2lsbCBob25vciB0aGUgJ1NUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCi1kbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSAnbWF5YmUnLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KLSAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQotZmkKLUlOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCi1BQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQotCi0jIENvcHlyaWdodCAoQykgMjAwNi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgX0FNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcmV2ZW50IEF1dG9tYWtlIGZyb20gb3V0cHV0dGluZyBWQVJJQUJMRSA9IEBWQVJJQUJMRUAgaW4gTWFrZWZpbGUuaW4uCi0jIFRoaXMgbWFjcm8gaXMgdHJhY2VkIGJ5IEF1dG9tYWtlLgotQUNfREVGVU4oW19BTV9TVUJTVF9OT1RNQUtFXSkKLQotIyBBTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQdWJsaWMgc2lzdGVyIG9mIF9BTV9TVUJTVF9OT1RNQUtFLgotQUNfREVGVU4oW0FNX1NVQlNUX05PVE1BS0VdLCBbX0FNX1NVQlNUX05PVE1BS0UoJEApXSkKLQotIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQotCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgX0FNX1BST0dfVEFSKEZPUk1BVCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwgaW4gZm9ybWF0IEZPUk1BVC4KLSMgRk9STUFUIHNob3VsZCBiZSBvbmUgb2YgJ3Y3JywgJ3VzdGFyJywgb3IgJ3BheCcuCi0jCi0jIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX190YXIpIHRoYXQgaXMgYSBjb21tYW5kCi0jIHdyaXRpbmcgdG8gc3Rkb3V0IGEgRk9STUFULXRhcmJhbGwgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5Ci0jICR0YXJkaXIuCi0jICAgICB0YXJkaXI9ZGlyZWN0b3J5ICYmICQoYW1fX3RhcikgPiByZXN1bHQudGFyCi0jCi0jIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX191bnRhcikgdGhhdCBleHRyYWN0IHN1Y2gKLSMgYSB0YXJiYWxsIHJlYWQgZnJvbSBzdGRpbi4KLSMgICAgICQoYW1fX3VudGFyKSA8IHJlc3VsdC50YXIKLSMKLUFDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAotWyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFllcywgaXQncyBzdGlsbCB1c2VkCi0jIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KLUFDX1NVQlNUKFtBTVRBUl0sIFsnJCR7VEFSLXRhcn0nXSkKLQotIyBXZSdsbCBsb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgotX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKLQotbTRfaWYoWyQxXSwgW3Y3XSwKLSAgW2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nXSwKLQotICBbbTRfY2FzZShbJDFdLAotICAgIFt1c3Rhcl0sCi0gICAgIFsjIFRoZSBQT1NJWCAxOTg4ICd1c3RhcicgZm9ybWF0IGlzIGRlZmluZWQgd2l0aCBmaXhlZC1zaXplIGZpZWxkcy4KLSAgICAgICMgVGhlcmUgaXMgbm90YWJseSBhIDIxIGJpdHMgbGltaXQgZm9yIHRoZSBVSUQgYW5kIHRoZSBHSUQuICBJbiBmYWN0LAotICAgICAgIyB0aGUgJ3BheCcgdXRpbGl0eSBjYW4gaGFuZyBvbiBiaWdnZXIgVUlEL0dJRCAoc2VlIGF1dG9tYWtlIGJ1ZyM4MzQzCi0gICAgICAjIGFuZCBidWcjMTM1ODgpLgotICAgICAgYW1fbWF4X3VpZD0yMDk3MTUxICMgMl4yMSAtIDEKLSAgICAgIGFtX21heF9naWQ9JGFtX21heF91aWQKLSAgICAgICMgVGhlICRVSUQgYW5kICRHSUQgdmFyaWFibGVzIGFyZSBub3QgcG9ydGFibGUsIHNvIHdlIG5lZWQgdG8gcmVzb3J0Ci0gICAgICAjIHRvIHRoZSBQT1NJWC1tYW5kYXRlZCBpZCgxKSB1dGlsaXR5LiAgRXJyb3JzIGluIHRoZSAnaWQnIGNhbGxzCi0gICAgICAjIGJlbG93IGFyZSBkZWZpbml0ZWx5IHVuZXhwZWN0ZWQsIHNvIGFsbG93IHRoZSB1c2VycyB0byBzZWUgdGhlbQotICAgICAgIyAodGhhdCBpcywgYXZvaWQgc3RkZXJyIHJlZGlyZWN0aW9uKS4KLSAgICAgIGFtX3VpZD1gaWQgLXUgfHwgZWNobyB1bmtub3duYAotICAgICAgYW1fZ2lkPWBpZCAtZyB8fCBlY2hvIHVua25vd25gCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgVUlEICckYW1fdWlkJyBpcyBzdXBwb3J0ZWQgYnkgdXN0YXIgZm9ybWF0XSkKLSAgICAgIGlmIHRlc3QgJGFtX3VpZCAtbGUgJGFtX21heF91aWQ7IHRoZW4KLSAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCi0gICAgICBlbHNlCi0gICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0gICAgICAgICBfYW1fdG9vbHM9bm9uZQotICAgICAgZmkKLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBHSUQgJyRhbV9naWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXRdKQotICAgICAgaWYgdGVzdCAkYW1fZ2lkIC1sZSAkYW1fbWF4X2dpZDsgdGhlbgotICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgICAgICBfYW1fdG9vbHM9bm9uZQotICAgICAgZmldLAotCi0gIFtwYXhdLAotICAgIFtdLAotCi0gIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQotCi0gIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKLQotICAjIEdvIGFoZWFkIGV2ZW4gaWYgd2UgaGF2ZSB0aGUgdmFsdWUgYWxyZWFkeSBjYWNoZWQuICBXZSBkbyBzbyBiZWNhdXNlIHdlCi0gICMgbmVlZCB0byBzZXQgdGhlIHZhbHVlcyBmb3IgdGhlICdhbV9fdGFyJyBhbmQgJ2FtX191bnRhcicgdmFyaWFibGVzLgotICBfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQotCi0gIGZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzOyBkbwotICAgIGNhc2UgJF9hbV90b29sIGluCi0gICAgZ251dGFyKQotICAgICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOyBkbwotICAgICAgICBBTV9SVU5fTE9HKFskX2FtX3RhciAtLXZlcnNpb25dKSAmJiBicmVhawotICAgICAgZG9uZQotICAgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCi0gICAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkdGFyZGlyIicKLSAgICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCi0gICAgICA7OwotICAgIHBsYWludGFyKQotICAgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKLSAgICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCi0gICAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCi0gICAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKLSAgICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJwotICAgICAgYW1fX3VudGFyPSd0YXIgeGYgLScKLSAgICAgIDs7Ci0gICAgcGF4KQotICAgICAgYW1fX3Rhcj0ncGF4IC1MIC14ICQxIC13ICIkJHRhcmRpciInCi0gICAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKLSAgICAgIGFtX191bnRhcj0ncGF4IC1yJwotICAgICAgOzsKLSAgICBjcGlvKQotICAgICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCi0gICAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKLSAgICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKLSAgICAgIDs7Ci0gICAgbm9uZSkKLSAgICAgIGFtX190YXI9ZmFsc2UKLSAgICAgIGFtX190YXJfPWZhbHNlCi0gICAgICBhbV9fdW50YXI9ZmFsc2UKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKLSAgICAjIGFuZCBhbV9fdW50YXIgc2V0LgotICAgIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhawotCi0gICAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzLgotICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKLSAgICBta2RpciBjb25mdGVzdC5kaXIKLSAgICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCi0gICAgQU1fUlVOX0xPRyhbdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyXSkKLSAgICBybSAtcmYgY29uZnRlc3QuZGlyCi0gICAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KLSAgICAgIEFNX1JVTl9MT0coWyRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcl0pCi0gICAgICBBTV9SVU5fTE9HKFtjYXQgY29uZnRlc3QuZGlyL2ZpbGVdKQotICAgICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBybSAtcmYgY29uZnRlc3QuZGlyCi0KLSAgQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQotICBBQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCi0KLUFDX1NVQlNUKFthbV9fdGFyXSkKLUFDX1NVQlNUKFthbV9fdW50YXJdKQotXSkgIyBfQU1fUFJPR19UQVIKLQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvYXMtYXV0by1hbHQubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLWRvY2Jvb2subTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLWxpYnRvb2wubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLXZlcnNpb24ubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvYXhfcHRocmVhZC5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LWFyY2gubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1hcmdzLm00XSkKLW00X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtY2hlY2subTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1kb2MubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1lcnJvci5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LWZlYXR1cmUubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LWdldHRleHQubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1nbGliMi5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LXBhcnNlci5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00XSkKLW00X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3RrLWRvYy5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvcGtnLm00XSkKLW00X2luY2x1ZGUoW200L2NoZWNrLWNoZWNrcy5tNF0pCi1tNF9pbmNsdWRlKFttNC9nZXR0ZXh0Lm00XSkKLW00X2luY2x1ZGUoW200L2ljb252Lm00XSkKLW00X2luY2x1ZGUoW200L2ludGxtYWNvc3gubTRdKQotbTRfaW5jbHVkZShbbTQvaW50dHlwZXNfaC5tNF0pCi1tNF9pbmNsdWRlKFttNC9saWItbGQubTRdKQotbTRfaW5jbHVkZShbbTQvbGliLWxpbmsubTRdKQotbTRfaW5jbHVkZShbbTQvbGliLXByZWZpeC5tNF0pCi1tNF9pbmNsdWRlKFttNC9saWJ0b29sLm00XSkKLW00X2luY2x1ZGUoW200L2xvbmdsb25nLm00XSkKLW00X2luY2x1ZGUoW200L2x0b3B0aW9ucy5tNF0pCi1tNF9pbmNsdWRlKFttNC9sdHN1Z2FyLm00XSkKLW00X2luY2x1ZGUoW200L2x0dmVyc2lvbi5tNF0pCi1tNF9pbmNsdWRlKFttNC9sdH5vYnNvbGV0ZS5tNF0pCi1tNF9pbmNsdWRlKFttNC9ubHMubTRdKQotbTRfaW5jbHVkZShbbTQvcG8ubTRdKQotbTRfaW5jbHVkZShbbTQvcHJvZ3Rlc3QubTRdKQotbTRfaW5jbHVkZShbbTQvc3RkaW50X2gubTRdKQpkaWZmIC0tZ2l0IGEvYXV0b2dlbi5zaCBiL2F1dG9nZW4uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGIzMDMyNjQuLjAwMDAwMDAKLS0tIGEvYXV0b2dlbi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgZ3N0cmVhbWVyIGF1dG9nZW4uc2gKLSMKLSMgUnVuIHRoaXMgdG8gZ2VuZXJhdGUgYWxsIHRoZSBpbml0aWFsIG1ha2VmaWxlcywgZXRjLgotIwotIyBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGZyb20gY29tbW9uL2F1dG9nZW4uc2guaW4gdmlhIGNvbW1vbi91cGRhdGUtYXV0b2dlbgotCi0KLXRlc3QgLW4gIiRzcmNkaXIiIHx8IHNyY2Rpcj1gZGlybmFtZSAiJDAiYAotdGVzdCAtbiAiJHNyY2RpciIgfHwgc3JjZGlyPS4KLQotb2xkZGlyPWBwd2RgCi1jZCAiJHNyY2RpciIKLQotcGFja2FnZT1nc3RyZWFtZXIKLXNyY2ZpbGU9Z3N0cmVhbWVyLmRvYXAKLQotIyBNYWtlIHN1cmUgd2UgaGF2ZSBjb21tb24KLWlmIHRlc3QgISAtZiBjb21tb24vZ3N0LWF1dG9nZW4uc2g7Ci10aGVuCi0gIGVjaG8gIisgU2V0dGluZyB1cCBjb21tb24gc3VibW9kdWxlIgotICBnaXQgc3VibW9kdWxlIGluaXQKLWZpCi1naXQgc3VibW9kdWxlIHVwZGF0ZQotCi0jIHNvdXJjZSBoZWxwZXIgZnVuY3Rpb25zCi1pZiB0ZXN0ICEgLWYgY29tbW9uL2dzdC1hdXRvZ2VuLnNoOwotdGhlbgotICBlY2hvIFRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHlvdXIgc291cmNlIHRyZWUuCi0gIGVjaG8gWW91IGFyZSBtaXNzaW5nIGNvbW1vbi9nc3QtYXV0b2dlbi5zaAotICBleGl0IDEKLWZpCi0uIGNvbW1vbi9nc3QtYXV0b2dlbi5zaAotCi0jIGluc3RhbGwgcHJlLWNvbW1pdCBob29rIGZvciBkb2luZyBjbGVhbiBjb21taXRzCi1pZiB0ZXN0ICEgXCggLXggLmdpdC9ob29rcy9wcmUtY29tbWl0IC1hIC1MIC5naXQvaG9va3MvcHJlLWNvbW1pdCBcKTsKLXRoZW4KLSAgICBybSAtZiAuZ2l0L2hvb2tzL3ByZS1jb21taXQKLSAgICBpZiAhIGxuIC1zIC4uLy4uL2NvbW1vbi9ob29rcy9wcmUtY29tbWl0Lmhvb2sgLmdpdC9ob29rcy9wcmUtY29tbWl0IDI+IC9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgICAgZWNobyAiRmFpbGVkIHRvIGNyZWF0ZSBjb21taXQgaG9vayBzeW1saW5rLCBjb3B5aW5nIGluc3RlYWQgLi4uIgotICAgICAgICBjcCBjb21tb24vaG9va3MvcHJlLWNvbW1pdC5ob29rIC5naXQvaG9va3MvcHJlLWNvbW1pdAotICAgIGZpCi1maQotCi0jIEdOVSBnZXR0ZXh0IGF1dG9tYWtlIHN1cHBvcnQgZG9lc24ndCBnZXQgYWxvbmcgd2l0aCBnaXQuCi0jIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjExMjgKLWlmIHRlc3QgLWQgcG8gOyB0aGVuCi0gIHRvdWNoIC10IDIwMDAwMTAxMDAwMCBwby9nc3RyZWFtZXItMS4wLnBvdAotZmkKLQotQ09ORklHVVJFX0RFRl9PUFQ9Jy0tZW5hYmxlLW1haW50YWluZXItbW9kZSAtLWVuYWJsZS1ndGstZG9jJwotCi1pZiB0ZXN0ICJ4JHBhY2thZ2UiID0gInhnc3RyZWFtZXIiOyB0aGVuCi0gIENPTkZJR1VSRV9ERUZfT1BUPSIkQ09ORklHVVJFX0RFRl9PUFQgLS1lbmFibGUtZG9jYm9vayAtLWVuYWJsZS1mYWlsaW5nLXRlc3RzIC0tZW5hYmxlLXBvaXNvbmluZyIKLWVsaWYgdGVzdCAieCRwYWNrYWdlIiA9ICJ4Z3N0LXBsdWdpbnMtYmFkIjsgdGhlbgotICBDT05GSUdVUkVfREVGX09QVD0iJENPTkZJR1VSRV9ERUZfT1BUIC0td2l0aC1wbGF5ZXItdGVzdHMiCi1maQotCi1hdXRvZ2VuX29wdGlvbnMgJEAKLQotcHJpbnRmICIrIGNoZWNrIGZvciBidWlsZCB0b29scyIKLWlmIHRlc3QgLXogIiROT0NIRUNLIjsgdGhlbgotICBlY2hvCi0KLSAgcHJpbnRmICIgIGNoZWNraW5nIGZvciBhdXRvcmVjb25mIC4uLiAiCi0gIGVjaG8KLSAgd2hpY2ggImF1dG9yZWNvbmYiIDI+L2Rldi9udWxsIHx8IHsKLSAgICBlY2hvICJub3QgZm91bmQhIFBsZWFzZSBpbnN0YWxsIHRoZSBhdXRvY29uZiBwYWNrYWdlLiIKLSAgICBleGl0IDEKLSAgfQotCi0gIHByaW50ZiAiICBjaGVja2luZyBmb3IgcGtnLWNvbmZpZyAuLi4gIgotICBlY2hvCi0gIHdoaWNoICJwa2ctY29uZmlnIiAyPi9kZXYvbnVsbCB8fCB7Ci0gICAgZWNobyAibm90IGZvdW5kISBQbGVhc2UgaW5zdGFsbCBwa2ctY29uZmlnLiIKLSAgICBleGl0IDEKLSAgfQotZWxzZQotICBlY2hvICI6IHNraXBwZWQgdmVyc2lvbiBjaGVja3MiCi1maQotCi0jIGlmIG5vIGFyZ3VtZW50cyBzcGVjaWZpZWQgdGhlbiB0aGlzIHdpbGwgYmUgcHJpbnRlZAotaWYgdGVzdCAteiAiJCoiICYmIHRlc3QgLXogIiROT0NPTkZJR1VSRSI7IHRoZW4KLSAgZWNobyAiKyBjaGVja2luZyBmb3IgYXV0b2dlbi5zaCBvcHRpb25zIgotICBlY2hvICIgIFRoaXMgYXV0b2dlbiBzY3JpcHQgd2lsbCBhdXRvbWF0aWNhbGx5IHJ1biAuL2NvbmZpZ3VyZSBhczoiCi0gIGVjaG8gIiAgLi9jb25maWd1cmUgJENPTkZJR1VSRV9ERUZfT1BUIgotICBlY2hvICIgIFRvIHBhc3MgYW55IGFkZGl0aW9uYWwgb3B0aW9ucywgcGxlYXNlIHNwZWNpZnkgdGhlbSBvbiB0aGUgJDAiCi0gIGVjaG8gIiAgY29tbWFuZCBsaW5lLiIKLWZpCi0KLXRvcGxldmVsX2NoZWNrICRzcmNmaWxlCi0KLSMgYXV0b3BvaW50Ci1pZiB0ZXN0IC1kIHBvICYmIGdyZXAgXkFNX0dOVV9HRVRURVhUX1ZFUlNJT04gY29uZmlndXJlLmFjID4vZGV2L251bGwgOyB0aGVuCi0gIHRvb2xfcnVuICJhdXRvcG9pbnQiICItLWZvcmNlIgotZmkKLQotIyBhY2xvY2FsCi1pZiB0ZXN0IC1mIGFjaW5jbHVkZS5tNDsgdGhlbiBybSBhY2luY2x1ZGUubTQ7IGZpCi0KLWF1dG9yZWNvbmYgLS1mb3JjZSAtLWluc3RhbGwgfHwgZXhpdCAxCi0KLXRlc3QgLW4gIiROT0NPTkZJR1VSRSIgJiYgewotICBlY2hvICIrIHNraXBwaW5nIGNvbmZpZ3VyZSBzdGFnZSBmb3IgcGFja2FnZSAkcGFja2FnZSwgYXMgcmVxdWVzdGVkLiIKLSAgZWNobyAiKyBhdXRvZ2VuLnNoIGRvbmUuIgotICBleGl0IDAKLX0KLQotY2QgIiRvbGRkaXIiCi0KLWVjaG8gIisgcnVubmluZyBjb25maWd1cmUgLi4uICIKLXRlc3QgISAteiAiJENPTkZJR1VSRV9ERUZfT1BUIiAmJiBlY2hvICIgIGRlZmF1bHQgZmxhZ3M6ICAkQ09ORklHVVJFX0RFRl9PUFQiCi10ZXN0ICEgLXogIiRDT05GSUdVUkVfRVhUX09QVCIgJiYgZWNobyAiICBleHRlcm5hbCBmbGFnczogJENPTkZJR1VSRV9FWFRfT1BUIgotZWNobwotCi1lY2hvICIkc3JjZGlyL2NvbmZpZ3VyZSIgJENPTkZJR1VSRV9ERUZfT1BUICRDT05GSUdVUkVfRVhUX09QVAotIiRzcmNkaXIvY29uZmlndXJlIiAkQ09ORklHVVJFX0RFRl9PUFQgJENPTkZJR1VSRV9FWFRfT1BUIHx8IHsKLSAgICAgICAgZWNobyAiICBjb25maWd1cmUgZmFpbGVkIgotICAgICAgICBleGl0IDEKLX0KLQotZWNobyAiTm93IHR5cGUgJ21ha2UnIHRvIGNvbXBpbGUgJHBhY2thZ2UuIgpkaWZmIC0tZ2l0IGEvY29tbW9uL0NoYW5nZUxvZyBiL2NvbW1vbi9DaGFuZ2VMb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZDBkMjUuLjAwMDAwMDAKLS0tIGEvY29tbW9uL0NoYW5nZUxvZworKysgL2Rldi9udWxsCkBAIC0xLDE3MTIgKzAsMCBAQAotMjAwOC0xMi0xNyAgRWR3YXJkIEhlcnZleSAgPGJpbGJvZWRAZ21haWwuY29tPgotCi0JKiBnc3Quc3VwcDoKLQlBbmQgeWV0IGFub3RoZXIgdmFyaWF0aW9uIG9mIHRoZSBHc3RBdWRpb0ZpbHRlciBsZWFrLgotCi0yMDA4LTEyLTE1ICBTZWJhc3RpYW4gRHLDtmdlICA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQlQYXRjaCBieTogUm9sYW5kIElsbGlnIDxyb2xhbmQgZG90IGlsbGlnIGF0IGdteCBkb3QgZGU+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JRml4IEFHX0dTVF9CSVNPTl9DSEVDSyB0byBoYW5kbGUgdmVyc2lvbiBudW1iZXJzIHdpdGggbW9yZSB0aGFuCi0JdHdvIGNvbXBvbmVudHMgKGkuZS4gMi40LjEpLiBGaXhlcyBidWcgIzU2NDUwNy4KLQotMjAwOC0xMi0xNCAgRWR3YXJkIEhlcnZleSAgPGJpbGJvZWRAZ21haWwuY29tPgotCi0JKiBnc3Quc3VwcDoKLQlBbmQgeWV0IGFub3RoZXIgdmFyaWFudCBvZiB0aGUgR3N0QXVkaW9GaWx0ZXIgbGVhay4KLQotMjAwOC0xMi0xMyAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Quc3VwcDoKLQlBZGRlZCB2YXJpYW50cyBvZiBsZWFrcyBvZiBkeW5hbWljIHBhZCB0ZW1wbGF0ZXMgY3JlYXRlZCBpbgotCUdzdEF1ZGlvRmlsdGVyLgotCUFkZCBjb25kaXRpb25hbCBqdW1wIHRyaWdnZXJlZCBieSBnZXRhZGRyaW5mbyAobWF5YmUgZ2xpYmMtMi45KS4KLQotMjAwOC0xMi0xMiAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Quc3VwcDoKLQlGaXggbGVhayBpbiBHSU8gY2FsbGVkIGJ5IGdub21ldmZzLiBOb3RoaW5nIHdlIGNhbiBkbyBhYm91dCB0aGlzLgotCi0yMDA4LTEyLTEyICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC5zdXBwOgotCUFkZGVkIGFub3RoZXIgc3VwcHJlc3Npb24gZm9yIGR5bmFtaWMgcGFkIHRlbXBsYXRlcywgaW4gdGhpcyBjYXNlCi0JR3N0QXVkaW9GaWx0ZXIuCi0JQWRkZWQgc3VwcHJlc3Npb24gZm9yIFBhbmdvTGFuZ3VhZ2Ugd2hpY2ggY2FuIG5ldmVyIGJlIGZyZWVkCi0JYWNjb3JkaW5nIHRvIHRoZSBQYW5nbyBBUEkuCi0KLTIwMDgtMTItMTIgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0LnN1cHA6Ci0JQSB3aG9sZSBidW5jaCBvZiBzdXBwcmVzc2lvbnMgZGV0ZWN0ZWQgb24gbGF0ZXN0IGdlbnRvbyB+YW1kNjQuCi0JTWFrZSBzb21lIGV4aXN0aW5nIHN1cHByZXNzaW9ucyBtb3JlIGdlbmVyaWMgKGZvciBzdWJ0bGUgZGVwZW5kZWN5Ci0JY29kZSBjaGFuZ2VzKS4KLQlBZGRlZCBzdXBwcmVzc2lvbnMgZm9yIGdsaWJjLTIuOS4KLQlBZGRlZCBzdXBwcmVzc2lvbnMgZm9yIG5ldyB2YXJpYW50cyBvZiBBTFNBIGxlYWtzLgotCUFkZGVkIHN1cHByZXNzaW9ucyBmb3IgYSBzZXJpZXMgb2YgbGVha3MgaW4gcGx1Z2lucyByZWdpc3RyYXRpb25zIGR1ZQotCXRvIHNvbWUgcGFkIHRlbXBsYXRlcycgY2FwcyBjYWxjdWxhdGVkIGF0IHJ1bnRpbWUuCi0JQWRkZWQgc3VwcHJlc3Npb25zIGZvciB2YXJpYW50cyBvZiBzb21lIGxlYWtzIGluIHBhbmdvL2ZvbnRjb25maWcuCi0JQWRkZWQgc3VwcHJlc3Npb25zIGZvciBsZWFrIGluIGdzdGZmbXBlZ2NzcC5jIChub3RoaW5nIHdlIGNhbiBkbwotCWFib3V0IGl0LCBidXQgd2lsbCBvbmx5IGV4aXN0IG9uY2UpLgotCi0yMDA4LTEyLTA0ICBTZWJhc3RpYW4gRHLDtmdlICA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIG00L2dzdC1wbHVnaW4tZG9jcy5tNDoKLQlSZW1vdmUgdGhlIGNoZWNrIGlmICRoYXZlX2d0a19kb2MgZXF1YWxzIHllcyBhcyBpdCdzIG5vdCBkZWZpbmVkCi0JYW5kICRlbmFibGVfZ3RrX2RvYyBzaG91bGQgYmUgZ29vZCBlbm91Z2guCi0JQWxzbyB0aGlzIHJlc3RvcmVzIHRoZSBidWlsZCBvZiB0aGUgcGx1Z2luIGRvY3VtZW50YXRpb24uCi0KLTIwMDgtMTItMDEgIE1hcmsgTmF1d2VsYWVydHMgIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIHN1cHByZXNzaW9uIHZhcmlhbnQgZm9yIFVidW50dSBIYXJkeSB4ODYvNjRiaXQuCi0KLTIwMDgtMTItMDEgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBndGstZG9jLm1hazoKLQkgIFNpbXBsaWx5IHVuaW5zdGFsbCBydWxlLiBJdHMgY2xvc2VyIHRvIHVwc3RyZWFtIGFuZCBmaXhlcyAjMTUwMzMxLgotCi0yMDA4LTExLTI5ICBTZWJhc3RpYW4gRHLDtmdlICA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIG00L2dsaWItZ2V0dGV4dC5tNDoKLQlVcGRhdGUgZ2xpYi1nZXR0ZXh0Lm00IGZyb20gbGF0ZXN0IHN0YWJsZSBHTGliIHJlbGVhc2UuCi0KLTIwMDgtMTEtMjkgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCVBhdGNoIGJ5OiBDeWd3aW4gUG9ydHMgbWFpbnRhaW5lcgotCSAgICAgICAgICAgPHlzZWxrb3dpdHogYXQgdXNlcnMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQ+Ci0KLQkqIGdldHRleHQucGF0Y2g6Ci0JVXBkYXRlIHRoZSBnZXR0ZXh0IHBhdGNoIGZvciB1c2Ugd2l0aCBnZXR0ZXh0IDAuMTcgd2hpY2ggaXMKLQlyZXF1aXJlZCB0byBidWlsZCB3aXRoIGxpYnRvb2wgMi4yIGJlY2F1c2Ugb2YgY29uZmxpY3RzLgotCUZpcnN0IHBhcnQgb2YgYnVnICM1NTYwOTEuCi0KLTIwMDgtMTEtMjkgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbTQvZ3RrLWRvYy5tNDoKLQkqIG00L3BrZy5tNDoKLQlVcGRhdGUgZ3RrLWRvYyBhbmQgcGtnLWNvbmZpZyBtNCBtYWNyb3MgZnJvbSB0aGVpciBsYXRlc3QgcmVsZWFzZXMuCi0KLTIwMDgtMTEtMjAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBtNC9hcy1vYmpjLm00OgotCSAgRml4IG9iamVjdGl2ZSBDIHRlc3QgbWFjcm8gd2hlbiBub25lIG9mIHRoZSBjb21waWxlcnMgYXJlIGZvdW5kIGF0IGFsbC4KLQotMjAwOC0xMC0zMCAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3RrLWRvYy5tYWs6Ci0JICBBbHNvIGNwIHRoZSBlbnRpdGllcyBoZXJlIHRvIGFsbCB4aW5sY3VkZSBiYXNlZCBkb2NzICh3b3JrYXJvdW5kIGZvcgotCSAgbm90IGJlaW5nIGFibGUgdG8gc2V0IHVwIGEgc2VhcmNoIHBhdGgpLgotCi0yMDA4LTEwLTE3ICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIGd0ay1kb2MubWFrOgotCSAgRG9uJ3QgY2xvYmJlciB0aGUgcmVhbCByZWdpc3RyeSBjYWNoZSBmaWxlIHdoZW4KLQkgIGJ1aWxkaW5nIGRvY3MuCi0KLTIwMDgtMTAtMDcgIEphbiBTY2htaWR0IC0gU3VuIE1pY3Jvc3lzdGVtcyA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogbTQvZ3N0LWVycm9yLm00OgotCSAgQWxzbyBkaXNhYmxlIHRoZSBib2d1cyAibG9vcCBub3QgZW50ZXJlZCBhdCB0b3AiIHdhcm5pbmdzIGFwcGVhcmluZyBvbiBTcGFyYyBGb3J0ZSBidWlsZHMuCi0KLTIwMDgtMTAtMDYgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MubWFrOgotCSAgQXBwbHkgdGhlIHNhbWUgZml4IGFzIGJlbG93IHRvIGd0ay1kb2MubWFrLiBTb21laG93IGRpZCBub3QgZW5kIHVwIGluCi0JICBDVlMuCi0KLTIwMDgtMDktMDUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazogRml4IHRoZSBjaGVjayBmb3IgZ3RrZG9jLXJlYmFzZTogZG9uJ3QKLQkgIHBhc3MgdGhlICd3aGljaCcgZXJyb3IgYmFjayB0byBtYWtlLiAgVGhpcyBmaXggaXMgbW9yZSBzcGVjaWZpYwotCSAgdGhhbiB3aGF0IGlzIGluIHVwc3RyZWFtLgotCi0yMDA4LTA5LTA1ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGd0ay1kb2MubWFrOiBGaXggdGhlIGNoZWNrIGZvciBndGtkb2MtcmViYXNlOiBkb24ndCBwYXNzIHRoZQotCSAgJ3doaWNoJyBlcnJvciBiYWNrIHRvIG1ha2UuICBUaGlzIGZpeCBpcyBtb3JlIHNwZWNpZmljIHRoYW4KLQkgIHdoYXQgaXMgaW4gdXBzdHJlYW0uCi0KLTIwMDgtMDktMDQgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBndGstZG9jLm1hazoKLQkgIEdldCBjbG9zZXIgdG8gdXBzdHJlYW0gbWFrZWZpbGVzLiBEb24ndCBpbnN0YWxsIGluZGV4LnNnbWwgdHdpY2UuIENhbGwKLQkgIGd0a2RvYy1yZWJhc2UgKGlmIGV4aXN0cykuCi0KLTIwMDgtMDgtMjEgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBSZXZlcnQgJCh0b3BfYnVpbGRkaXIpIC0+ICQoYnVpbGRkaXIpIGNoYW5nZSBvZiByZXYuIDEuMzkgYXMgdGhlcmUgaXMKLQkgIG5vIHZhcmlhYmxlIGNhbGxlZCBidWlsZGRpci4KLQotMjAwOC0wNy0zMSAgTWFyayBOYXV3ZWxhZXJ0cyAgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Quc3VwcDoKLQlBZGQgc3VwcHJlc3Npb25zIGZvciBVYnVudHkgSGFyZHkgeDg2LzY0Yml0LCBzaW1pbGFyIHRvIGVhcmxpZXIKLQl2ZXJzaW9ucyBhbmQgMzJiaXQgdmFyaWFudC4KLQotMjAwOC0wNy0zMSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLQlSZW1vdmUgR1NUX0RJU0FCTEVfKEVOVU1UWVBFU3xJTkRFWHxVUkkpLgotCi0yMDA4LTA3LTIxICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltLm11bGxlciBhdCBjb2xsYWJvcmEgY28gdWs+Ci0KLQkqIG00L2dzdC1lcnJvci5tNDo6Ci0JICBXaGVuIGNoZWNraW5nIGZvciBHU1RfRVJST1JfQ1hYRkxBR1MsIGNoZWNrIGVhY2ggY29tcGlsZXIgZmxhZwotCSAgaW5kaXZpZHVhbGx5LCBub3QgYWxsIHRvZ2V0aGVyLgotCi0yMDA4LTA3LTIwICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltLm11bGxlciBhdCBjb2xsYWJvcmEgY28gdWs+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6OgotCSAgRml4IGJpc29uIHZlcnNpb24gbnVtYmVyIGRldGVjdGlvbiBmb3Igb2xkZXIgLS12ZXJzaW9uCi0JICBvdXRwdXQgZm9ybWF0IChhcyBiaXNvbiAxLjI4IG9uIE9TWCAxMC40IG91dHB1dHMpLgotCSAgRml4ZXMgIzU0Mzg1My4KLQotMjAwOC0wNy0xMiAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy54c2w6Ci0JICBTcGxpdCByZWZzZWN0MiBhbHNvIGhlcmUgdG8gbWFrZSAiRWxlbWVudCBQYWRzIiBzdWJ0aXRsZSB2aXNpYmxlLgotCi0yMDA4LTA3LTA4ICBTZWJhc3RpYW4gRHLDtmdlICA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIG00L2dzdC1lcnJvci5tNDoKLQlBZGQgY29tcGlsZXIgZmxhZ3MgdG8gd2FybiBpZiBkZWNsYXJhdGlvbnMgYWZ0ZXIgc3RhdGVtZW50cyBvcgotCXZhcmlhYmxlIGxlbmd0aCBhcnJheXMgYXJlIHVzZWQuIFRoZXNlIGFyZSBDOTkvR0NDIGV4dGVuc2lvbnMgYW5kCi0JYXJlIG5vdCBzdXBwb3J0ZWQgYnkgc29tZSBjb21waWxlcnMgd2Ugd2FudCB0byBzdXBwb3J0LgotCi0yMDA4LTA3LTAyICBNYXJrIE5hdXdlbGFlcnRzICA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JT25seSBjbGVhbiBkb2MgbWFpbnRhaW5lciBzdGFtcHMgaW4gbWFpbnRhaW5lci1jbGVhbi4gIEZpeGVzICM1Mzk5NzcuCi0KLTIwMDgtMDYtMjAgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdGRvYy1zY2FuZ29iajoKLQlBbHdheXMgdXNlIGZvcm1hdCBzdHJpbmdzIGZvciBwcmludGYtbGlrZSBmdW5jdGlvbnMsIGV2ZW4gaWYgdGhleSBqdXN0Ci0JcHJpbnQgYSBzdHJpbmcuIEZpeGVzIGJ1ZyAjNTM2OTgxLgotCi0yMDA4LTA2LTIwICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSogZ3RrLWRvYy5tYWs6Ci0JSW5jbHVkZSBDRkxBR1MgYW5kIExERkxBR1MgaW4gR1RLRE9DX0NGTEFHUyBhbmQgR1RLRE9DX0xERkxBR1MsCi0Jb3RoZXJ3aXNlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIGNvbmZpZ3VyZSBhcmUgaWdub3JlZC4KLQlGaXhlcyBidWcgIzUzNjk3OC4KLQotMjAwOC0wNi0wNSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbS5tdWxsZXIgYXQgY29sbGFib3JhIGNvIHVrPgotCi0JKiBtNC9nc3QtZXJyb3IubTQ6Ci0JICBBZGQgLWZuby1zdHJpY3QtYWxpYXNpbmcgd2hlbiBjb21waWxpbmcgd2l0aCAtV2Vycm9yLCB0byB3b3JrIGFyb3VuZAotCSAgd2FybmluZ3MgY2F1c2VkIGJ5IEdfTE9DSyB3aXRoIHJlY2VudCBHTGliIHZlcnNpb25zICgyLjE2LngpICgjMzE2MjIxKS4KLQotMjAwOC0wNi0wNSAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBndGstZG9jLm1hazoKLQlEb24ndCBjb3B5IGh0bWwvKi5wbmcgZmlsZXMgdW5sZXNzIHRoZXkgZG9uJ3QgYWxyZWFkeSBleGlzdAotCWluIHRoZSBkZXN0ZGlyLiBGaXhlcyBkaXN0Y2hlY2sgZmFpbHVyZSBjYXVzZWQgYnkgcGVybWlzc2lvbnMKLQlwcm9ibGVtcyB0cnlpbmcgdG8gY29weSBhIGZpbGUgaW50byB0aGUgZGVzdGRpciB3aGVuIGl0IGFscmVhZHkKLQlleGlzdHMuCi0KLTIwMDgtMDUtMjggIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMueHNsOgotCSAgVGhlIGNsYXNzIHdhcyBub3Qgc2hvd24gaW4gcGx1Z2luIGRvY3MuIEZpeCB0eXBvIGluIGNoYW5nZWxvZyBiZWxvdy4KLQotMjAwOC0wNS0yMiAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBnc3Rkb2Mtc2NhbmdvYmo6Ci0JRW1pdCB3YXJuaW5ncyBpZiBvbmUgb2YgdGhlIEdUeXBlcyB3ZSdyZSBleHBlY3RpbmcgaXMgMAotCXdoZW4gc2Nhbm5pbmcuCi0KLTIwMDgtMDUtMjEgIEZlbGlwZSBDb250cmVyYXMgIDxmZWxpcGUuY29udHJlcmFzQGdtYWlsLmNvbT4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkqIGd0ay1kb2MubWFrOgotCUZpeCBpbnN0YWxsaW5nIHBuZyBpbWFnZXMgd2hlbiBndGstZG9jIGlzIGRpc2FibGVkLgotCi0yMDA4LTA1LTIxICBGZWxpcGUgQ29udHJlcmFzICA8ZmVsaXBlLmNvbnRyZXJhc0BnbWFpbC5jb20+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBndGstZG9jLm1hazoKLQlGaXggbWFrZSBjbGVhbiB3aGVuIGd0ay1kb2MgaXMgZGlzYWJsZWQgYW5kIG90aGVyIGNsZWFudXBzLgotCi0yMDA4LTA1LTE3ICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JQmUgbW9yZSBxdWlldCB3aGVuIHRoZSBmaWxlcyBkb24ndCB5ZXQgZXhpc3QuCi0KLTIwMDgtMDUtMTYgIEphbiBTY2htaWR0ICA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogZ3N0ZG9jLXNjYW5nb2JqOgotCUFkZCBhIG1lY2hhbmlzbSBmb3IgYWRkaW5nICdpbXBsaWNpdGx5IGNyZWF0ZWQnIEdUeXBlcyBpbnRvIHRoZQotCXNjYW4sIGFsbG93aW5nIGZvciBkb2N1bWVudGluZyBwbHVnaW4tcHJpdmF0ZSBiYXNlIGNsYXNzZXMgdGhhdAotCXByb3ZpZGUgc2lnbmFscyBvciBwcm9wZXJ0aWVzIGZvciBwdWJsaWMgZWxlbWVudHMuCi0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JVXNlICQoYnVpbGRkaXIpIGluc3RlYWQgb2YgJCh0b3BfYnVpbGRkaXIpIGluIGEgZmV3IHBsYWNlcyAtIHRoZXJlJ3MKLQlubyBuZWVkIHRvIGhhcmQgY29kZSAnZG9jcy9wbHVnaW5zJyBhcyB0aGUgb25seSB1c2VhYmxlIHBhdGguCi0KLTIwMDgtMDUtMTQgIFBldGVyIEtqZWxsZXJzdGVkdCAgPHBrakBheGlzLmNvbT4KLQotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JUmVwb3J0IHBsdWctaW5zIHdpdGhvdXQgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHRoYXQgd2lsbCBub3QgYmUgYnVpbHQKLQlldmVuIHdoZW4gdGhlIG5hbWUgb2YgdGhlIHBsdWctaW4gaXMgYSBzdWJzdHJpbmcgb2YgYW5vdGhlciBwbHVnLWluLAotCWUuZy4sIGdvb20gdnMuIGdvb20yazEuCi0KLTIwMDgtMDUtMTQgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0ubXVsbGVyIGF0IGNvbGxhYm9yYSBjbyB1az4KLQotCSogZ3N0LnN1cHA6Ci0JICBBZGQgc3VwcHJlc3Npb24gZm9yIGdsaWJjIGJ1ZyBvbiBndXRzeS94ODYtNjQKLQotMjAwOC0wNS0xMiAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogcGx1Z2lucy54c2w6Ci0JICBJbXByb3ZlIHRoZSBsYXlvdXQgb2YgdGhlIGNhcHMsIGJ1dCBzcGxpdHRpbmcgdGhlbSBvbiAiOyIuCi0KLTIwMDgtMDUtMDkgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0JCi0JUGF0Y2ggYnk6IEJyaWFuIENhbWVyb24gPGJyaWFuIGRvdCBjYW1lcm9uIGF0IHN1biBkb3QgY29tPgotCi0JKiBtNC9nc3QtZGVmYXVsdC5tNDoKLQlEb24ndCBzZXQgdGhlIGRlZmF1bHQgYXVkaW8gc2luayB0byB0aGUgZGVmYXVsdCB2aXN1YWxpemVyLgotCUZpeGVzIGJ1ZyAjNTMyMjk1LgotCi0yMDA4LTA1LTA3ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltLm11bGxlciBhdCBjb2xsYWJvcmEgY28gdWs+Ci0KLQkqIGNoZWNrLm1hazogKGhlbHApOgotCSAgRG9jdW1lbnQgR1NUX0NIRUNLUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBjaGVja3MgJ21ha2UgaGVscCcuCi0KLTIwMDgtMDUtMDYgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQlQYXRjaCBieTogTWFyYy1BbmRyZSBMdXJlYXUgPG1hcmNhbmRyZSBkb3QgbHVyZWF1IGF0IGdtYWlsIGRvdCBjb20+Ci0KLQkqIHNjYW5nb2JqLW1lcmdlLnB5OgotCURvbid0IGRlcGVuZCBvbiBUd2lzdGVkIGp1c3QgZm9yIHRoZSBPcmRlcmVkRGljdCBidXQgaW1wbGVtZW50IG91cgotCW93biBvcmRlcmVkIGRpY3Rpb25hcnkgY2xhc3MuIEZpeGVzIGJ1ZyAjNTMxNTc3LgotCi0yMDA4LTA0LTIzICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC5zdXBwOgotCVJlLWFycmFuZ2UgbGF0ZXN0IHN1cHByZXNzaW9ucy4KLQlBZGQgYWxsIGtub3duIHN1cHByZXNzaW9ucyBmb3IgdWJ1bnR1IGhhcmR5LiBTYW1lIGFzIGZvciBvbGRlcgotCXVidW50dXMsIGJ1dCB3aXRoIGRpZmZlcmVudCBjb2RlcGF0aHMuCi0KLTIwMDgtMDQtMjIgIEVkd2FyZCBIZXJ2ZXkgIDxiaWxib2VkQGdtYWlsLmNvbT4KLQotCSogZ3N0LnN1cHA6IE1ha2UgdGxzIGxlYWsgc3VwcHJlc3Npb24gYSBiaXQgbW9yZSBnZW5lcmljLgotCi0yMDA4LTA0LTIyICBFZHdhcmQgSGVydmV5ICA8YmlsYm9lZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC5zdXBwOiBGaXggb21taXNzaW9uIGluIGxhdGVzdCBjb21taXQuCi0JTWFrZSB0bHMgbGVhayBzdXBwcmVzc2lvbiBtb3JlIGdlbmVyaWMgaW4gb3JkZXIgdG8gY292ZXIgbW9yZQotCWRpc3RyaWJ1dGlvbnMgKGFuZCBob3BlZnVsbHkgYWxzbyBmdXR1cmUgZGlzdHJpYnV0aW9ucykuCi0KLTIwMDgtMDQtMjIgIEVkd2FyZCBIZXJ2ZXkgIDxiaWxib2VkQGdtYWlsLmNvbT4KLQotCSogZ3N0LnN1cHA6IEFkZCBzdXBwcmVzc2lvbnMgZm9yIEhhcmR5LgotCVRoZXkncmUganVzdCB0aGUgbmV3ZXIgdmVyc2lvbnMgb2Ygc2ltaWxhciBzdXBwcmVzc2lvbnMgd2UgaGFkCi0JZm9yIHRoZSBwcmV2aW91cyB2ZXJzaW9ucyBvZiB1YnVudHUuCi0KLTIwMDgtMDQtMTUgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogbTQvTWFrZWZpbGUuYW06Ci0JRGlzdCBhbGwgZmlsZXMgaW4gY29tbW9uLiBGaXhlcyBidWcgIzUyNzk4NC4KLQotMjAwOC0wNC0xNCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBtNC9nc3QtZnVuY3Rpb24ubTQ6Ci0JICBSZW5hbWUgQUNfQ0FDSEVfVkFMIGNhY2hlLWlkcyB0byBjb250YWluICdfY3ZfJyBpbiBvcmRlciB0byBtYWtlCi0JICBhdXRvY29uZi0yLjYyIGNvbXBsYWluIGxlc3MuCi0KLTIwMDgtMDQtMTMgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JKiBtNC9nc3QtdmFsZ3JpbmQubTQ6Ci0JICBCdW1wIHZhbGdyaW5kIHJlcXVpcmVtZW50IHRvIDMuMCAod2hpY2ggd2FzIHJlbGVhc2VkIGluIEF1Z3VzdCAyMDA1KS4KLQkgIEZpeGVzICM0ODkyNjkuIEFsc28sIGNoZWNrIGZvciB2ZXJzaW9uID49UkVRIGFuZCBub3QgPlJFUS4KLQotMjAwOC0wNC0wOSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBtNC9nc3QtZGVmYXVsdC5tNDoKLQkgIEFkZCAtLXdpdGgtZGVmYXVsdC17YXVkaW9zaW5rfGF1ZGlvc3JjfHZpZGVvc2lua3x2aWRlb3NyY3x2aXN1YWxpemVyfQotCSAgY29uZmlndXJlIHN3aXRjaGVzICgjNTE5NDE3KS4KLQotMjAwOC0wNC0wMyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBtNC9nc3QtYXJncy5tNDoKLQkgIEFkZCAtLWRpc2FibGUtZm9vIHN3aXRjaCBmb3IgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbnMgKCM1MjU1ODYpLgotCi0yMDA4LTA0LTAxICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OgotCVVuY29uZGl0aW9uYWxseSByZXF1aXJlIGZsZXggMi41LjMxIGFuZCBiaXNvbiAxLjg3NS4KLQotMjAwOC0wMy0yMyAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogbTQvZ3N0LWFyY2gubTQ6Ci0JYW1kNjQveDg2XzY0IGFsbG93cyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyB0b28uCi0KLTIwMDgtMDMtMjEgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIG00L2dzdC1kb3doaWxlLm00OgotCUFkZCBtYWNybyB0aGF0IGNoZWNrcyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgZG8ge30gd2hpbGUgKDApCi0JbWFjcm9zIGFuZCBkZWZpbmUgSEFWRV9ET1dISUxFX01BQ1JPUyBpZiBpdCBkb2VzLiBUaGlzIGlzCi0JbmVlZGVkIGJ5IGdsaWIvZ21hY3Jvcy5oIHRvIHVzZSBzb21ldGhpbmcgZWxzZSB0aGFuCi0JaWYgKDEpIGVsc2UgZm9yIEdfU1RNVF9TVEFSVC9FTkQgd2hlbiBjb21wbGluZyBDKyssIHdoaWNoCi0JY2F1c2VzIGNvbXBpbGVyIHdhcm5pbmdzIGJlY2F1c2Ugb2YgYW1iaWdpb3VzIGVsc2Ugd2l0aCBnKysgNC4zLgotCi0yMDA4LTAzLTIxICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBtNC9nc3QtcGx1Z2luLWRvY3MubTQ6Ci0JKiBtYW5nbGUtdG1wbC5weToKLQlEb24ndCBkZXBlbmQgb24gUHlYTUwgYW5kIHVzZSBvbmx5IFhNTCBtb2R1bGVzIHRoYXQgYXJlIHNoaXBwZWQKLQl3aXRoIHB5dGhvbi4gRml4ZXMgYnVnICM1MTk2MzUuCi0KLTIwMDgtMDMtMDcgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbTQvZ3RrLWRvYy5tNDogKEdUS19ET0NfQ0hFQ0spOiAKLQlUaGUgcHJldmlvdXMgY29tbWl0IHRvIHRoaXMgZmlsZSBieSBTdGVmYW4gS29zdCBtZW50aW9ubmVkIGNoZWNraW5nIGZvcgotCVNFRCwgYnV0IE5PVCBjaGVja2luZyBmb3IgZ3RrZG9jLWNoZWNrICh3dGggaXMgdGhhdCBkb2luZyB0aGVyZSA/PykuCi0JVGhlcmVmb3JlLCByZW1vdmluZyB0aGUgY2hlY2sgZm9yIGd0a2RvYy1jaGVjawotCi0yMDA4LTAzLTAzICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIG00L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNDogT29wcywgY2hlY2tlZCBpbiB0aGUgd3JvbmcgY29weSBvZgotCSAgdGhpcyBmaWxlLiAgKFVwZGF0ZSBmcm9tIHVwc3RyZWFtKQotCi0yMDA4LTAzLTAzICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIG00L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNDogIFVwZGF0ZSBmcm9tIHVwc3RyZWFtLiAgRml4ZXMgYSBidWcKLQkgIGNvbXBpbGluZyB3aXRoIE1TVkMuCi0KLTIwMDgtMDMtMDMgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogbTQvcGtnLm00OgotCUFsbG93IG92ZXJyaWRlIG9mIHBrZy1jb25maWcgcmVzdWx0cywgYXMgcHJvcG9zZWQgYnkgY29uZmlndXJlIC0taGVscC4KLQlUaGlzIGlzIGluIGZhY3QganVzdCBhIGJhY2twb3J0IGZyb20gdXBzdHJlYW0gcGtnLm00LgotCUZpeGVzICM1MTg4OTIKLQotMjAwOC0wMy0wMyAgUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqQGF4aXMuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JQ2hhbmdlbG9nIHN1cmdlcnkgb2YgbXkgcHJldmlvdXMgY29tbWl0IHRvIGFkZCBidWd6aWxsYSByZWZlcmVuY2UuCi0JKiBtNC9nc3QtYXJncy5tNDoKLQlBZGQgQUdfR1NUX0NIRUNLX1BMVUdJTiBhbmQgQUdfR1NUX0RJU0FCTEVfUExVR0lOIHRvIG1ha2UgaXQgZWFzaWVyCi0JdG8gaW5jbHVkZSBhbmQgZXhjbHVkZSBwbHVnLWlucyB3aXRob3V0IGV4dGVybmFsIHJlZmVyZW5jZXMsIGkuZS4sCi0JcGx1Zy1pbnMgbGlzdGVkIGluIEdTVF9QTFVHSU5TX1NFTEVDVEVELiAoIzQ5ODIyMikKLQotMjAwOC0wMy0wMyAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIGFub3RoZXIgZ2xpYmMgc3VwcHJlc3Npb24uCi0KLTIwMDgtMDItMjkgIFBldGVyIEtqZWxsZXJzdGVkdCAgPHBrakBheGlzLmNvbT4KLQotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JTWFrZSB0aGUgY29tbWVudCBiZWZvcmUgZGVmaW5lcyBnZW5lcmF0ZWQgdmlhIEFHX0dTVF9DSEVDS19GRUFUVVJFCi0JbG9vayBuaWNlci4gKCM0OTgyMjIpCi0KLTIwMDgtMDItMjYgIEphbiBTY2htaWR0ICA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogbTQvTWFrZWZpbGUuYW06Ci0JKiBtNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00OgotCUFkZCBEYXZlIFNjaGxlZWYncyBHQ0MgaW5saW5lIGFzc2VtYmx5IGRldGVjdGlvbiBtYWNybwotCWZvciB1c2luZyBpbiBnc3QtcGx1Z2lucy1nb29kIGluIHRoZSBnb29tIDJrNCBwbHVnaW4uCi0KLTIwMDgtMDItMjUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGdzdC1hdXRvZ2VuLnNoOiBJbnN0ZWFkIG9mIG9ubHkgcGFzc2luZyBjZXJ0YWluIGFyZ3VtZW50cyB0bwotCWNvbmZpZ3VyZSwgcGFzcyBhbnl0aGluZyB0aGF0IHdlIGRpZG4ndCBoYW5kbGUuIE11Y2ggZnJpZW5kbGllci4KLQlGaXhlcyAjMzQ0MTIuCi0KLTIwMDgtMDItMjMgIEphbiBTY2htaWR0ICA8SmFuLlNjaG1pZHRAc3VuLmNvbT4KLQotCSogbTQvZ3N0LWVycm9yLm00OgotCVN0b3JlIHRoZSBkZXRlY3RlZCBjb21waWxlciBmbGFncyBpbnRvIEVSUk9SX0NGTEFHUyByYXRoZXIgdGhhbgotCUVSUk9SX0NYWEZMQUdTLCBhbmQgdXNlIHRoZSBtYWNybyB0aGF0IGNoZWNrcyB0aGUgQyBjb21waWxlciwgbm90Ci0JdGhlIEMrKyBvbmUuCi0KLTIwMDgtMDItMjMgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogbTQvZ3N0LWVycm9yLm00OgotCSAgUmVmbG93IGNoZWNrcyBmb3IgYWRkaXRpb25hbCB3YXJuaW5nIGZsYWdzIHNvIHRoZXkncmUgbm90Ci0JICBuZXN0ZWQsIHdoaWNoIGZpeGVzIHRoZSByZXN1bHQgcmVwb3J0aW5nIGluIHRoZSBjb25maWd1cmUKLQkgIG91dHB1dC4KLQotMjAwOC0wMi0yMiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBtNC9hcy1jb21waWxlci1mbGFnLm00OgotCSAgQWRkIEFTX0NYWF9DT01QSUxFUl9GTEFHCi0KLQkqIG00L2dzdC1lcnJvci5tNDoKLQkgIEFkZCBBR19HU1RfU0VUX0VSUk9SX0NYWEZMQUdTIChGb3J0ZSBiaXRzIG5lZWQgdGVzdGluZykKLQotMjAwOC0wMi0yMiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgQWRkICdjaGVjay1pbnNwZWN0ZWQtdmVyc2lvbnMnIHRhcmdldDsgdGhpcyBoZWxwcyBpZGVudGlmeQotCSAgZmlsZXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgb3Igd2hlcmUgdGhlIHZlcnNpb24KLQkgIG51bWJlciBzaG91bGQgKGlkZWFsbHkpIGJlIHVwZGF0ZWQgYmVmb3JlIGEgcmVsZWFzZQotCSAgKHdoaWNoIGRvZXNuJ3QgaGFwcGVuIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHJlbGVhc2VyIGRvZXNuJ3QKLQkgIGJ1aWxkIHRoYXQgcGx1Z2luIGxvY2FsbHkpLiBOb3QgYWRkaW5nIGF0IGEgZGlzdGNoZWNrIGhvb2sKLQkgIHlldCB0aG91Z2gsIGJlY2F1c2UgaXQncyBub3QgcmVhbGx5IHRoYXQgaW1wb3J0YW50IGFuZCB3b3VsZAotCSAgcHJvYmFibHkgYWxzbyBiZSBhIHByb2JsZW0gb24gYnVpbGRib3RzLgotCi0yMDA4LTAyLTIyICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3Quc3VwcDoKLQlBZGQgZXZlbiBtb3JlIGdsaWJjIDIuNyBzdXBwcmVzc2lvbnMuCi0KLTIwMDgtMDItMjIgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC5zdXBwOgotCUFkZCBhbm90aGVyIHN1cHByZXNzaW9uIGZvciBHTGliIGNhY2hpbmcgc29tZSB2YWx1ZXMgYWZ0ZXIKLQl0aGUgZmlyc3QgY2FsbC4KLQotMjAwOC0wMi0xMiAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCVBhdGNoIGJ5OgotCSAgVGltIE1vb25leSA8bW9vbmV5IGF0IGRvZ2JlcnQgZG90IGNjIGRvdCBuZHN1IGRvdCBub2RhayBkb3QgZWR1PgotCi0JKiBtNC9nc3QtZXJyb3IubTQ6Ci0JVXNlIG5vJUVfTUFDUk9fUkVERUZJTkVEIG9uIFNvbGFyaXMgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncy4KLQlGaXhlcyBidWcgIzUxNTkwNS4KLQotMjAwOC0wMi0xMSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIGEgZmV3IG1vcmUgZ2xpYmMgMi43IHN1cHByZXNzaW9ucyB0byBtYWtlIHRoZSBhdmlzdWJ0aXRsZSB1bml0Ci0JdGVzdCB2YWxncmluZCBjbGVhbi4gRml4ZXMgYnVnICM1MTU3MDMuCi0KLTIwMDgtMDItMDggIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIENoYW5nZWxvZyBzdXJnZXJ5IGZvciBsYXN0IGNvbW1pdC4KLQotMjAwOC0wMi0wOCAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbTQvZ3RrLWRvYy5tNDoKLQkgIENvbmRpdGlvbmFsbHkgY2hlY2sgZm9yIFNFRC4gQWxzbyBzeW5jIGEgYml0IHdpdGggdXBzdHJlYW0gbWFjcm8uCi0KLTIwMDgtMDItMDggIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBndGstZG9jLm1hazoKLQkgIFVzZSAnJChTRUQpJyBpbnN0ZWFkIG9mICdzZWQnLiBEb24ndCB1c2UgLWkgZm9yIGluLXBsYWNlIGFzIGl0cyBnbnUKLQkgIG9ubHksIG1vdmUgdG8gYSB0ZW1wIGZpbGUgaW5zdGVhZC4KLQotMjAwOC0wMi0wNiAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkqIGd0ay1kb2MubWFrOgotCSBBcyBvdXIgZG9jcyBhcmUgdmVyc2lvbmVkLCB3ZSBuZWVkIHRvIHBhdGNoIHRoZSBpbmRleC5zZ21sIGZpbGUgdG8gaGF2ZQotCSBjb3JyZWN0IHBhdGhzIHRoZXJlLCB1bmxlc3Mgd2UgYWxzbyB3YW50IHRvIGZvcmsgZ3RrLWRvYydzIHhzbCAod2hpY2gKLQkgd2UgZG9uJ3QpLiBUaGlzIGhvcGVmdWxseSBmaXhlcyB4cmVmcyBiZXR3ZWVuIG1vZHVsZXMuCi0KLTIwMDgtMDItMDIgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCVVzZSBwcmludGYgaW5zdGVhZCBvZiBlY2hvIGFzICJlY2hvIC1lIiBpc24ndCBQT1NJWCBhbmQgZG9lc24ndCB3b3JrCi0Jd2l0aCBzdHJpY3QgUE9TSVggc2hlbGxzIGxpa2UgdGNzaCBvciBkYXNoIGFuZCBhbHNvIG5vdCBldmVyeSBwbGF0Zm9ybQotCWhhcyBhIC9iaW4vZWNobyB0aGF0IHN1cHBvcnRzIGl0LgotCi0yMDA4LTAxLTI0ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeS4KLQotCSogZ3N0ZG9jLXNjYW5nb2JqOgotCSAgU3luYyB0aGUgb2JqZWN0IHNjYW5uZXIgd2l0aCBndGstZG9jIGZpeGVzLiBVcGRhdGUgYXJncyBhbmQgaGllcmFyY2h5Ci0JICBmaWxlcy4KLQotMjAwOC0wMS0yMCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogY2hlY2subWFrOgotCSogY292ZXJhZ2UvbGNvdi5tYWs6Ci0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSogcmVsZWFzZS5tYWs6Ci0JVXNlICQoTUFLRSkgaW5zdGVhZCBvZiBtYWtlIHRvIGZpeCB0aGUgYnVpbGQgaWYgR05VIG1ha2UgaXMgY2FsbGVkCi0Jc29tZXRoaW5nIGVsc2Ugb24gdGhlIHN5c3RlbS4KLQkKLQkqIG00L2FzLWRvY2Jvb2subTQ6Ci0JRml4IHBhdGggZm9yIGRvY2Jvb2sueHNsIGlmIHdlIGhhdmUgbm8gL2V0Yy94bWwvY2F0YWxvZyBhbmQgYWRkIGEKLQlkb2Nib29rLXhzbCBzZWFyY2ggcGF0aCBmb3IgRnJlZUJTRC4KLQotMjAwOC0wMS0xOCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIGEgc3VwcHJlc3Npb24gZm9yIGEgZ2xpYmMgYnVnOgotCWh0dHA6Ly92YWxncmluZC5vcmcvZG9jcy9tYW51YWwvZmFxLmh0bWwjZmFxLmV4aXRfZXJyb3JzPgotCi0yMDA4LTAxLTE4ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3Quc3VwcDoKLQlBZGQgc29tZSBtb3JlIGdsaWJjIDIuNyBzdXBwcmVzc2lvbnMgYW5kIG1ha2UgdGhlIEdMaWIgc3VwcHJlc3Npb25zCi0JZm9yIHRoZSBob21lL3RtcC9ldGMgZGlyZWN0b3J5IGNhY2hpbmcgYSBiaXQgbW9yZSBnZW5lcmljLgotCi0yMDA4LTAxLTE4ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3Quc3VwcDoKLQlBZGQgc29tZSBnbGliYyAyLjcgc3VwcmVzc2lvbnMgYXMgZm91bmQgb24gRGViaWFuL3Vuc3RhYmxlLgotCi0yMDA4LTAxLTE0ICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIGRvd25sb2FkLXRyYW5zbGF0aW9uczoKLQlBcHBhcmVudGx5IEkgaGF2ZSBwcm9ibGVtcyB3aXRoIGxlYXZpbmcgdGhpbmdzIGNvbW1lbnRlZCBvdXQgd2hlbgotCUkgZWRpdCBzaGVsbCBzY3JpcHRzLgotCi0yMDA4LTAxLTEyICBKYW4gU2NobWlkdCAgPEphbi5TY2htaWR0QHN1bi5jb20+Ci0KLQkqIGRvd25sb2FkLXRyYW5zbGF0aW9uczoKLQlSZW1vdmUgYmFzaC1pc21zCi0KLTIwMDgtMDEtMTIgIEphbiBTY2htaWR0ICA8SmFuLlNjaG1pZHRAc3VuLmNvbT4KLQotCSogY2hlY2stZXhwb3J0czoKLQlSZXN0b3JlIHRoZSBjbGVhbnVwIHJtIG9mIG91ciB0bXAgZmlsZSB3aGljaCBJIGRpZG4ndCBtZWFuIHRvIGxlYXZlIAotCWNvbW1lbnRlZCBvdXQuCi0KLTIwMDgtMDEtMTIgIEphbiBTY2htaWR0ICA8SmFuLlNjaG1pZHRAc3VuLmNvbT4KLQotCSogY2hlY2stZXhwb3J0czoKLQkgIEZpeGVzIHRvIG1ha2UgY2hlY2stZXhwb3J0IHdvcmsgb24gYm90aCBTb2xhcmlzIGFuZCBMaW51eAotCi0JKiBtNC9nc3QtZXJyb3IubTQ6Ci0JICBEaXNhYmxlIGV4dHJhIHdhcm5pbmcgY2F0ZWdvcnkgKGFyZ3VtZW50IG1pc21hdGNoKSBhcyBhbiBlcnJvcgotCSAgb24gRm9ydGUsIGFzIGl0IHByZXZlbnRzIHRoZSBsaWJjaGVjayBmYWlsX2lmIG1hY3JvcyBmcm9tIGNvbXBpbGluZy4KLQotCSogd2luMzIubWFrOgotCSAgU3Vic3RpdHV0ZSB0aGUgR1N0cmVhbWVyIHZlcnNpb24gc28gdGhpbmdzIHdpbGwga2VlcCB3b3JraW5nIGluIDAuMTEKLQotMjAwOC0wMS0xMSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF4aXMgY29tPgotCi0JKiBtNC9nc3QtZ2xpYjIubTQ6Ci0JKiBtNC9nc3QtbGlieG1sMi5tNDoKLQkgIEltcHJvdmUvZml4IG91dHB1dCBmcm9tIGNvbmZpZ3VyZSBpZiBlaXRoZXIgZ2xpYi0yLjAgb3IKLQkgIGxpYnhtbDIgYXJlIG5vdCBpbnN0YWxsZWQgKCM0OTgyMjIpLgotCi0yMDA4LTAxLTA5ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb3ZlcmFnZS9sY292Lm1hazoKLQkgIFVwZGF0ZSBjb3ZlcmFnZSBtYWtlLXJ1bGVzOiB1c2UgdGhlbSBjb25kaXRpb25hbHksIHVzZSBsaWJ0b29sIG1vZGUKLQkgIGFuZCB1c2UgbGNvdiB0byBjbGVhbnVwLgotCi0yMDA3LTEyLTE4ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnbGliLWdlbi5tYWs6Ci0JICBBbHNvIHVzZSAjaW5jbHVkZSAiaGVhZGVyIiBpbnN0ZWFkIG9mICNpbmNsdWRlIDxoZWFkZXI+IGZvciB0aGUKLQkgIGhlYWRlcnMgdGhhdCB3ZXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHNhbWUKLQkgIHJlYXNvbiBhcyBiZWxvdy4KLQotCSAgUmVtb3ZlIHdoaXRlc3BhY2UgYmVmb3JlICNpbmNsdWRlLgotCi0yMDA3LTEyLTE4ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnbGliLWdlbi5tYWs6Ci0JICBVc2UgI2luY2x1ZGUgImhlYWRlciIgaW5zdGVhZCBvZiAjaW5jbHVkZSA8aGVhZGVyPiBmb3IgdGhlIGdlbmVyYXRlZAotCSAgZW51bSBDIGZpbGVzIGFzIHRoZSBmaWxlIHdpbGwgYWx3YXlzIGJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhbmQKLQkgIHNvbWUgY29tcGlsZXJzIHNlZW0gdG8gYmUgYSBiaXQgc3RyaWN0IGFib3V0IHRoYXQgdW5sZXNzIC4gaXMgYWRkZWQKLQkgIHRvIHRoZSBpbmNsdWRlIHBhdGguCi0KLQkgIEluY2x1ZGUgYWxsIGhlYWRlcnMgdGhhdCB3ZXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHNvdXJjZSBmaWxlcyBpbgotCSAgdGhlIEMgZmlsZSBhcyB0aGV5J3JlIHVzZWQgdGhlcmUuCi0KLTIwMDctMTItMTcgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogd2luMzIubWFrOiAod2luMzIpLCAod2luMzJkZWZzKSwgKHdpbjMyY3JsZik6Ci0JICBNYWtlIGNoZWNrIGZvciBDUiBMRiBpbiBWaXN1YWwgQysrIDYuMCBwcm9qZWN0IGZpbGVzCi0JICB3b3JrLCBiYXNlZCBvbiBwYXRjaCBieSBEYXZpZCBTY2hsZWVmICgjNDk2NzIyLCAjMzkzNjI2KS4KLQkKLTIwMDctMTItMTcgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogTWFrZWZpbGUuYW06Ci0JICBEb24ndCBmb3JnZXQgdG8gZGlzdCB0aGUgbmV3IHdpbjMyLm1hay4KLQotMjAwNy0xMi0xNyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiB3aW4zMi5tYWs6ICh3aW4zMiksICh3aW4zMmRlZnMpOgotCSAgTW92ZSBjb21tb24gd2luMzIgTWFrZWZpbGUgZm9vIGludG8gdGhpcyBuZXcgZmlsZS4KLQotMjAwNy0xMi0xNSAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkqIGd0ay1kb2MubWFrOgotCSAgV2Ugc2hvdWxkIGhhdmUgbmV2ZXIgZm9ya2VkIHRoaXMgdGhhdCBtdWNoIDovLgotCi0yMDA3LTEyLTEzICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGNoZWNrLWV4cG9ydHM6Ci0JICBGaXggYnVpbGQgb24gdGhlIHBwYzY0IGJ1aWxkIGJvdC4KLQotMjAwNy0xMi0xMyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBjaGVjay1leHBvcnRzOgotCSAgU3VwcHJlc3MgbW9yZSB1bmludGVudGlvbmFsIGV4cG9ydHMgKHRvbyBtdWNoIGhhc3NsZSB0byByZW5hbWUgdGhlbSwKLQkgIHNpbmNlIHRoZSB3aW4zMiBwcm9qZWN0IGZpbGVzIHdvdWxkIG5lZWQgY2hhbmdpbmcgdG9vKS4KLQotMjAwNy0xMi0xMiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIGNoZWNrLWV4cG9ydHMgc2hvdWxkIGJlIGRpc3RlZC4KLQotMjAwNy0xMi0xMiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBjaGVjay1leHBvcnRzOgotCSAgQWRkIHF1aWNrJ24nZGlydHkgc2NyaXB0IHRvIGNoZWNrIHRoZSBleHBvcnRlZCBzeW1ib2xzIG9mIGEgbGlicmFyeQotCSAgYWdhaW5zdCB0aGUgc3ltYm9scyBpbiB0aGUgY29ycmVzcG9uZGluZyAuZGVmIGZpbGUgKCM0OTM5ODMpLiBCYXNlZAotCSAgb24gc2NyaXB0IGJ5IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcy4KLQotMjAwNy0xMS0wNiAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCUZpeCBkaXN0Y2hlY2sgYnkgbWFraW5nIHN1cmUgdGhlIHR5cGVzIGZpbGVzIGFyZSB0cmVhdGVkIGxpa2UgdGhlCi0Jb3RoZXIgZ3RrZG9jLXNjYW5nb2JqIGdlbmVyYXRlZCBmaWxlcy4KLQotMjAwNy0wOS0yMSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JICBMZXQgdGhlIEFHX0dTVF9BUkdfRU5BQkxFX0VYUEVSSU1FTlRBTCBtYWNybyBkZWZhdWx0IHRvIGRpc2FibGUKLQkgIGJ1aWxkaW5nIG9mIGV4cGVyaW1lbnRhbCBwbHVnaW5zLiBOb2JvZHkgdXNlcyBpdCB5ZXQgYW5kIHRoZQotCSAgLS1lbmFibGUtLWV4cGVyaW1lbnRhbCBzdHVmZiBmcm9tIGdzdC1wbHVnaW5zLWdvb2QgZGVmYXVsdHMgdG8KLQkgIGRpc2FibGUgdG9vLgotCi0yMDA3LTA5LTA2ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBKdXN0IHVzZSB0aGUgbm9ybWFsICdjaGVjaycgdGFyZ2V0IGFuZCBhdm9pZCBhIGNpcmN1bGFyCi0JICBkZXBlbmRlbmN5LgotCi0yMDA3LTA5LTA2ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBBZGQgcnVsZSB0byBlcnJvciBvdXQgaWYgLmhpZXJhcmNoeSBmaWxlIGNvbnRhaW5zIHRhYnMuCi0KLTIwMDctMDgtMjAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZG93bmxvYWQtdHJhbnNsYXRpb25zOgotCSogcG8ubWFrOgotCSAgSWYgdGhlcmUgYXJlIG5ldyBsYW5ndWFnZXMsIHRoZXkgbmVlZCB0byBiZSBhZGRlZCB0byBwby9MSU5HVUFTLgotCi0yMDA3LTA4LTIwICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGRvd25sb2FkLXRyYW5zbGF0aW9uczoKLQkqIHBvLm1hazoKLQkgIEZpeCB1cCAnZG93bmxvYWQtcG8nIGEgYml0LCBzbyB0aGF0IHdlIGZpbmQgbmV3IHRyYW5zbGF0aW9ucwotCSAgZm9yIGxhbmd1YWdlcyB0aGF0IGFyZW4ndCBpbiBvdXIgcG8vTElOR1VBUyBmaWxlIHlldCB0b28uCi0KLTIwMDctMDctMTYgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIGEgc3VwcHJlc3Npb24gZm9yIEdMaWIgY2FjaGluZyB0aGUgdG1wIGRpciBzZWVuIG9uIGFuCi0JVWJ1bnR1IEZlaXN0eSBzeXN0ZW0uCi0KLTIwMDctMDctMTMgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JSWYgd2Ugd2FudCB0byB1c2UgJ2VjaG8gLWUnLCBjYWxsIC9iaW4vZWNobyBpbnN0ZWFkIG9mIHRoZSBzaGVsbCdzCi0Jc2luY2UgLWUgaXMgYSBiYXNoIGV4dGVuc2lvbiwgYW5kIG91ciAvYmluL3NoIG1pZ2h0IG5vdCBiZSBiZWluZwotCXByb3ZpZGVkIGJ5IGJhc2guCi0KLTIwMDctMDctMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHBvLm1hazoKLQkgIFRyYW5zbGF0aW9uIHByb2plY3QgaGFzIG1vdmVkLiAgQWxzbywgbm8gaWRlYSBob3cgdGhpcyB1c2VkIHRvCi0JICB3b3JrIGdpdmVuIHRoYXQgd2Ugd2VyZW4ndCBkb3dubG9hZGluZyBhIC5wbyBmaWxlLgotCi0yMDA3LTA2LTI1ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QteG1saW5zcGVjdC5weToKLQkqIHBsdWdpbnMueHNsOgotCSAgQWxzbyBleHRyYWN0IGVsZW1lbnQgY2FwcyBmb3IgcGx1Z2luLWRvY3MuIEZpeGVzIHBhcnRzIG9mICMxMTc2OTIuCi0KLTIwMDctMDYtMjEgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCVBhdGNoIGJ5OiBBbmRyZWFzIFNjaHdhYgotCi0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLQkgIEZpeCBxdW90aW5nICgjNDQ5NDkzKS4KLQotMjAwNy0wNi0xMCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogbTQvZ3N0LXBhcnNlci5tNDoKLQlPbmx5IGdlbmVyYXRlIHRoZSBwYXJzZXIgaWYgYmlzb24gPj0gMS44NzUgX2FuZF8gZmxleCA+PSAyLjUuMzEgaXMKLQlpbnN0YWxsZWQgYW5kIHVzZSBwcmUtZ2VuZXJhdGVkIHNvdXJjZXMgb3RoZXJ3aXNlLiBGaXhlcyBidWcgIzQ0NDgyMC4KLQotMjAwNy0wNS0xMSAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgotCi0JKiBnc3Quc3VwcDoKLQkgIFN1cHByZXNzaW9uIHZhcmlhbnQgZm9yIG91ciBnb29kIGZyaWVuZCB0aGUgVExTIGxlYWssIHRoaXMgdGltZSBmb3IKLQkgIFVidW50dSBGZWlzdHkveDg2LgotCi0yMDA3LTA1LTA5ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBGaXggbWFrZSBkaXN0Y2hlY2sgYWdhaW47IGNoYW5nZSBzb21lIHNwYWNlcyB0byB0YWJzIGluIG1ha2VmaWxlLgotCi0yMDA3LTA0LTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrICgtbW9kdWxlKToKLQkgIEVycm9yIG91dCB3aGVuIHRoZSBodG1sIGJ1aWxkIHN0ZXAgZ2l2ZXMgd2FybmluZ3MsIHNvIHRoZXkgZ2V0Ci0JICBmaXhlZCBwcm9wZXJseS4KLQotMjAwNy0wNC0yMyAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JICBBZGQgbWFjcm8gQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFUyB0aGF0IGNoZWNrcyB0aGUgZGVmaW5lcyBpbgotCSAgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIGFuZCBBQ19ERUZJTkVTIHRoZSBzZXRpbmdzLgotCi0yMDA3LTA0LTE5ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JUGF0Y2ggYnk6IFZpbmNlbnQgVG9ycmkgPHZ0b3JyaSBhdCB1bml2LWV2cnkgZG90IGZyPgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OgotCVB1dCB0aGUgQUNfTVNHX1JFU1VMVCBvdXRwdXQgaW4gYnJhY2tldHMgdG8gZ2V0IGl0IHByb3Blcmx5IHdyaXR0ZW4gdG8KLQl0aGUgdGVybWluYWwuCi0KLTIwMDctMDQtMTggIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JQ2hlY2sgZm9yIGZsZXggPj0gMi41LjMxIGFuZCBzZXQgR0VORVJBVEVfUEFSU0VSIGlmIHdlIGhhdmUgYXQgbGVhc3QKLQl0aGF0IHZlcnNpb24uIE90aGVyd2lzZSB1c2UgcHJlLWdlbmVyYXRlZCBwYXJzZXIgc291cmNlcyBhcyB3ZSBjYW4ndAotCXJhaXNlIHRoZSByZXF1aXJlZCBmbGV4IHZlcnNpb24uIEhBVkVfTVRfU0FWRV9GTEVYIGlzIG9ic29sZXRlIG5vdwotCWFzIHdlIHVzZSBhIG5ldyBlbm91Z2ggZmxleCB2ZXJzaW9uIGFueXdheS4gRmlyc3QgcGFydCBvZiAjMzQ5MTgwCi0KLTIwMDctMDQtMTAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1jaGVjay5tNDoKLQkgIEFsbG93IHByZS1zZXR0aW5nIHRoZSBHU1QoUEIpX1RPT0xTL1BMVUdJTlNfRElSIHZhcmlhYmxlcyB0byBoZWxwCi0JICBidWlsZHMgYWdhaW5zdCBvbGRlciBHU3RyZWFtZXIuCi0KLTIwMDctMDMtMjUgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JRml4IHRoZSBmbGV4IHZlcnNpb24gY2hlY2suIEl0IGlnbm9yZWQgdGhlIG1pY3JvIHZlcnNpb24gYmVmb3JlLgotCi0yMDA3LTAzLTA5ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGNoZWNrLm1hazoKLQlVc2UgdGhlIHNhbWUgdGltZW91dCB3aGVuIGdlbmVyYXRpbmcgdmFsZ3JpbmQgc3VwcHJlc3Npb25zIGFzIAotCXJ1bm5pbmcgdGhlIHZhbGdyaW5kIHRlc3QuCi0KLQkqIGdzdC5zdXBwOgotCUFkZCBzb21lIG1vcmUgc3VwcHJlc3Npb25zIGFuZCBzdHVmZi4KLQotMjAwNy0wMy0wOCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBjaGVjay5tYWs6Ci0JTWFrZSBzdXJlIEdTbGljZSBpcyBkaXNhYmxlZCB3aGVuIGJ1aWxkaW5nIHN1cHByZXNzaW9ucyB0b28uCi0KLQkqIGdzdC5zdXBwOgotCUFkZCBhcm91bmQgKjg1MCogbGluZXMgb2Ygc3VwcHJlc3Npb25zIGZvciBvbmUtdGltZSBpbml0aWFsaXNhdGlvbnMKLQlpbnNpZGUgbGliYXNvdW5kIGFuZCBnY29uZi9ib25vYm8vT1JCaXQuIEkgZmVlbCBzbyBkaXJ0eS4KLQotMjAwNy0wMy0wNyAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBnc3Quc3VwcDoKLQlhZGQgYSBzdXBwcmVzc2lvbiBmb3IgdGhpcyBHQ29uZiBmbHVwIG9uIHRoZSBGQzUgYnVpbGRib3QuCi0KLTIwMDctMDMtMDYgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JTWFrZSB0aGUgc3VwcHJlc3Npb24gYSBsaXR0bGUgbW9yZSBnZW5lcmljLCB0byBjYXRjaCB0aGUgRkM1IAotCWJhY2t0cmFjZSB0b28uCi0KLTIwMDctMDMtMDYgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIGEgc3VwcHJlc3Npb24gZm9yIGxpYmNkaW8gMC43Ni4gSXQgbGVha3MgYW4gaW50ZXJuYWwgc3RydWN0Ci0Jd2hlbiB0aGUgQ0QtUk9NIGRldmljZSBpcyBub3QgYWNjZXNzaWJsZS4KLQotMjAwNy0wMi0yOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWFyY2gubTQ6Ci0JICBNb3ZlIGEgbGluZSB0aGF0IHdhcyBpbiB0aGUgd3JvbmcgbWFjcm8KLQotMjAwNy0wMi0yOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0Lm00OgotCSAgQWRkCi0JKiBtNC9nc3QtYXJjaC5tNDoKLQkqIG00L2dzdC1hcmdzLm00OgotCSogbTQvZ3N0LWNoZWNrLm00OgotCSogbTQvZ3N0LWRlYnVnaW5mby5tNDoKLQkqIG00L2dzdC1kZWZhdWx0Lm00OgotCSogbTQvZ3N0LWRvYy5tNDoKLQkqIG00L2dzdC1lcnJvci5tNDoKLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCSogbTQvZ3N0LWZ1bmN0aW9uLm00OgotCSogbTQvZ3N0LWdldHRleHQubTQ6Ci0JKiBtNC9nc3QtZ2xpYjIubTQ6Ci0JKiBtNC9nc3QtbGlieG1sMi5tNDoKLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JKiBtNC9nc3QtcGx1Z2luLWRvY3MubTQ6Ci0JKiBtNC9nc3QtcGx1Z2luZGlyLm00OgotCSogbTQvZ3N0LXZhbGdyaW5kLm00OgotCSogbTQvZ3N0LXgxMS5tNDoKLQkgIENvbnZlcnQgYWxsIG1hY3JvcyB0byB1c2UgQUdfR1NUIHN0eWxlIHNvIHdlIGNhbiBwcm9wZXJseSB3YXJuCi0JICB3aGVuIHRoZXkncmUgbWlzc2luZyBpZiBjb25maWd1cmUuYWMgY2FsbHMgQUdfR1NUX0lOSVQKLQkgIFdpbGwgcmVxdWlyZSB1cGRhdGUgaW4gYWxsIEdTdHJlYW1lciBtb2R1bGVzLgotCi0yMDA3LTAyLTExICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBtNC9nc3QtYXJncy5tNDoKLQkgIFJlbW92ZSAnZW5hYmxlJyBmcm9tIGNvbmZpZ3VyZSBzd2l0Y2ggZGVzY3JpcHRpb24gYXMgdGhpcyBsZWFkcyB0byAKLQkgIGNvbmZ1c2luZyBsaW5lcyBsaWtlICJkaXNhYmxlIGVuYWJsZSBidWlsaW5nIC4uLiIuCi0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLQkgIEZpeCBjb21tZW50IHRvIHNvdW5kIGxlc3MgaG9ycmlibGUuCi0KLTIwMDctMDItMDcgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCVBhdGNoIGJ5OiBXaWxsIE5ld3RvbiAgPHdpbGwubmV3dG9uIGdtYWlsIGNvbT4KLQotCSogbTQvZ3N0LWNoZWNrLm00OgotCSAgVXNlICRQS0dfQ09ORklHIHJhdGhlciB0aGFuIHBrZy1jb25maWcgZGlyZWN0bHksIHRoZSBvbmUgaW4gb3VyIHBhdGgKLQkgIG1pZ2h0IG5vdCBiZSB0aGUgb25lIHdlIHdhbnQsIGxpa2Ugd2hlbiBjcm9zcy1jb21waWxpbmcuIEFsc28sIG90aGVyCi0JICBtYWNyb3Mgc3VjaCBhcyBQS0dfQ0hFQ0tfTU9EVUxFUyB1c2UgJFBLR19DT05GSUcsIHNvIHdlIHNob3VsZAotCSAgcHJvYmFibHkgdG9vIGp1c3QgZm9yIGNvbnNpc3RlbmN5LiBGaXhlcyAjNDA1Mjg4LgotCi0yMDA3LTAxLTA4ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JICBOZWVkIHRvIHVzZSBkb3VibGUgc3F1YXJlIGJyYWNrZXRzIGFnYWluIHNvIG00IGRvZXNuJ3QgcmVtb3ZlIHRoZW0KLQkgIChmaXhlcyAjMzc4OTMxKS4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JICBVc2UgZG91YmxlIHNxdWFyZSBicmFja2V0cyBoZXJlIGFzIHdlbGwsIGZvciB0aGUgc2FtZSByZWFzb24uCi0KLTIwMDctMDEtMDUgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogbTQvZ3N0LXBhcnNlci5tNDoKLQkgIFVzZSAnc2VkJyByYXRoZXIgdGhhbiAndHInIHRvIHN0cmlwIHRyYWlsaW5nIGxldHRlcnMgZnJvbSB2ZXJzaW9uCi0JICBudW1iZXJzLCBzaW5jZSAndHInIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgYW5kIHdlIGtub3cgc2VkIGlzCi0JICAoIzM3ODkzMSkuCi0KLTIwMDYtMTAtMjEgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogY2hlY2subWFrOgotCSAgSW5jcmVhc2UgZGVmYXVsdCB0aW1lb3V0IHVuZGVyIHZhbGdyaW5kLCA2MCBpcyBqdXN0IHRvbyBzaG9ydCBhbmQKLQkgIHNvbWUgdGVzdHMgdGFrZSBhIGJpdCBsb25nZXIgdGhlc2UgZGF5cyBhbmQgbm90IGV2ZXJ5b25lIGhhcyBhCi0JICBiZWVmeSBtYWNoaW5lLgotCi0yMDA2LTA5LTI5ICBNaWNoYWVsIFNtaXRoICA8bXNtaXRoQGZsdWVuZG8uY29tPgotCi0JKiBnc3Quc3VwcDoKLQkgIE1vcmUgc3VwcHJlc3Npb25zIGZvciBlZGd5LiAKLQotMjAwNi0wOS0yOCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBtNC9nc3QtZ2xpYjIubTQ6Ci0JVXNlIGdtb2R1bGUtbm8tZXhwb3J0LTIuMC5wYyBpbnN0ZWFkIG9mIGdtb2R1bGUtMi4wLnBjIC0gd2UgbmVpdGhlcgotCXdhbnQgbm9yIG5lZWQgLS1leHBvcnQtZHluYW1pYyAod2hpY2ggZW5kcyB1cCBtYWtpbmcgdXMgZXhwb3J0IGEgYnVuY2gKLQlvZiB1bm5lZWRlZCBzeW1ib2xzKQotCi0yMDA2LTA5LTE0ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGdzdC5zdXBwOgotCSAgU29tZSBzdXBwcmVzc2lvbnMgZm9yIHRoZSBtb3JlIHJlY2VudCBsZC5zbyBpbiB1YnVudHUgZWRneS4KLQotMjAwNi0wOC0yMyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBnc3Quc3VwcDoKLQkgIFNob3J0ZW4gZnVuY3Rpb24gdHJhaWwgc28gdGhlIHN1cHByZXNzaW9uIHdvcmtzIG9uCi0JICBteSB1YnVudHUgZGFwcGVyIHN5c3RlbSB3aXRoIGNvcmUgY3ZzIGFzIHdlbGwuCi0KLTIwMDYtMDctMjggIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JRXh0cmEgc3VwcHJlc3Npb25zIGZyb20gbXkgVWJ1bnR1IHg4Nl82NCBtYWNoaW5lCi0KLTIwMDYtMDctMjQgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCVBhdGNoIGJ5OiBGcmVkZXJpYyBQZXRlcnMgPGZwZXRlcnMgYXQgZW50cm91dmVydCBjb20+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JICBOZWVkIHRvIGRvdWJsZSBzcXVhcmUgYnJhY2tldHMgaW4gLm00IGZpbGVzLiBTaG91bGQgZml4IGJpc29uCi0JICB2ZXJzaW9uIGRldGVjdGlvbiB3aXRoIHZlcnNpb24gbnVtYmVycyBsaWtlIDEuMjNhICgjMzQ4MzU0KS4KLQotMjAwNi0wNy0yNCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBjaGVjay5tYWs6Ci0JVmFsZ3JpbmQgZmFpbHMgdG8gZmluZCB0ZXN0cyB3cml0dGVuIGluIHRlc3RzL2NoZWNrLyBkaXJlY3RseSAocmF0aGVyCi0JdGhhbiBhIHN1YmRpcikgLSBiZWNhdXNlIHZhbGdyaW5kIGdldHMgcnVuIHdpdGggYSBmaWxlbmFtZSB0aGF0Ci0JZG9lc24ndCBjb250YWluIGEgcmVsYXRpdmUgcGF0aCwgaXQgZ29lcyBzZWFyY2hpbmcgL3Vzci9iaW4gaW5zdGVhZC4KLQlSdW4gd2l0aCAuLy4uLi4gdG8gbWFrZSB0aGluZ3Mgd29yayBlaXRoZXIgd2F5LgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCUFkZCAkKHRvcF9idWlsZGRpcikvc3JjIGFzIGEgcGxhY2UgdG8gbG9vayBmb3IgcGx1Z2lucwotCXdoZW4gYnVpbGRpbmcgdG9vLCBzaW5jZSB0aGF0J3Mgd2hlcmUgZ3N0LXRlbXBsYXRlIGtlZXBzIHRoaW5ncwotCi0yMDA2LTA3LTIzICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JUGF0Y2ggYnk6IEZyZWRlcmljIFBldGVycyA8ZnBldGVyc0BlbnRyb3V2ZXJ0LmNvbT4KLQotCSogbTQvZ3N0LXBhcnNlci5tNDoKLQkgIEZpeCBiaXNvbiBkZXRlY3Rpb24gKCMzNDgzNTQpCi0KLTIwMDYtMDctMjEgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JICBjaGVjayBmb3IgYmlzb24gYW5kIGZsZXgKLQotMjAwNi0wNy0xMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LXBsdWdpbi1kb2NzLm00OgotCSAgcmVtb3ZlIHRoZSBjb25maWd1cmUgYXJndW1lbnQgZm9yIGVuYWJsaW5nIHBsdWdpbiBkb2MgYnVpbGQ7Ci0JICBoYXZpbmcgZ3RrLWRvYyBlbmFibGVkIGFuZCBweXhtbCBwcmVzZW50IGlzIGVub3VnaCBvZiBhIHRyaWdnZXIKLQotMjAwNi0wNy0wMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY292ZXJhZ2UvbGNvdi5tYWs6Ci0JICBmaXggdXAgcnVsZXMgdG8gd29yayB3aXRoIGdzdC1weXRob24gYXMgd2VsbAotCSAgcnVuICJtYWtlIGxjb3YiIHRvIHRlc3QgYW5kIGdlbmVyYXRlIHRoZSByZXBvcnRzCi0JICBydW4gIm1ha2UgbGNvdi1yZXNldCIgdG8gcmVkbyBpdCBhZnRlciB0aGF0Ci0KLTIwMDYtMDctMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogY2hlY2subWFrOgotCSAgYWRkIGFuIGluc3BlY3QgdGFyZ2V0IHRoYXQgaW5zcGVjdHMgZXZlcnkgZWxlbWVudCBmZWF0dXJlLAotCSAgc28gd2UgY2FuIGhhdmUgdGhhdCBhZGRlZCBmb3IgY292ZXJhZ2UKLQkqIGNvdmVyYWdlL2xjb3YubWFrOgotCSAgYWRkIHN1cHBvcnQgZm9yIGxjb3YKLQotMjAwNi0wNy0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JICB3aGVuIGJ1aWxkaW5nIHdpdGggZ2NvdiwgcmVzZXQgQ0ZMQUdTIGFuZCBmcmllbmRzIHRvIE8wCi0KLTIwMDYtMDctMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1hcmdzLm00OgotCSAgRmluZCB0aGUgZ2NvdiB0aGF0IG1hdGNoZXMgdGhlIGdjYyB2ZXJzaW9uCi0JICBPbmx5IGFsbG93IGdjb3YgaWYgd2UgdXNlIGdjYwotCi0yMDA2LTA3LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC1lbnRyeS5wbDoKLQkqIGNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDoKLQkqIGNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2w6Ci0JICBjb3B5IGNvdmVyYWdlIHJlcG9ydGluZyBmaWxlcyBmcm9tIGRidXMKLQotMjAwNi0wNy0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JICBsaWJ0b29sIHN0cmlwcyBnY292J3MgLWYgZmxhZ3MsIHNvIGxpYmdjb3YgZG9lcyBub3QgZ2V0Ci0JICBsaW5rZWQgaW4uICBTZXR0aW5nIEdDT1ZfTElCUyB3aXRoIC1sZ2NvdiBmaXhlcyBsaWJ0b29sJ3MKLQkgIHN0cmlwcGluZwotCSAgYWxzbyBzaG93IHdoYXQgcGtnLWNvbmZpZy1wYXRoIHdlIHNldAotCi0yMDA2LTA2LTIyICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQlQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXQgYXhpcyBjb20+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCSAgU2hvdyBsaXN0IG9mIHBsdWdpbnMgd2l0aG91dCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhhdAotCSAgd2lsbCBub3QgYmUgYnVpbHQgYXMgd2VsbCAoIzM0NDEzNikuCi0KLTIwMDYtMDYtMTUgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogbTQvZ3N0LXBsdWdpbi1kb2NzLm00OgotCSAgYWRkIEdTVF9QTFVHSU5fRE9DUywgd2hpY2ggY2hlY2tzIGZvciBldmVyeXRoaW5nIG5lZWRlZAotCSAgdG8gYnVpbGQgdGhlIHBsdWdpbiBkb2NzIChuYW1lbHkgZ3RrLWRvYyBhbmQgcHl4bWwpOyBhbHNvCi0JICBhZGRzIGEgbmV3IC0tZW5hYmxlLXBsdWdpbi1kb2NzIGNvbmZpZ3VyZSBzd2l0Y2g7IHdpbGwKLQkgIHNldCBFTkFCTEVfUExVR0lOX0RPQ1MgY29uZGl0aW9uYWwgZm9yIHVzZSBpbiBNYWtlZmlsZS5hbQotCSAgZmlsZXMgKHNlZSAjMzQ0MDM5KS4KLQotMjAwNi0wNi0xMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWNoZWNrLm00OgotCSAgYWRkIEdTVF9QS0dfQ0hFQ0tfTU9EVUxFUywgd2hpY2ggaW4gdGhlIG5vcm1hbCBjYXNlIG9mIGNoZWNraW5nCi0JICBmb3IgYSBkZXBlbmRlbmN5IGxpYiBmb3IgYSBwbHVnLWluIG9ubHkgbmVlZHMgdHdvIGFyZ3VtZW50cwotCSAgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nLgotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JICBjbGVhbiB1cCBvdXRwdXQgYSBsaXR0bGUgb2YgZmVhdHVyZSBjaGVja2luZzsgYWxzbyBkZWFsIHdpdGgKLQkgIG5vbi1wbHVnLWluIGZlYXR1cmUgY2hlY2tzCi0JKiBtNC9NYWtlZmlsZS5hbToKLQkqIG00L2dzdC1nc3RyZWFtZXIubTQ6Ci0JICByZW1vdmUgdGhpcyBmaWxlOyBpdCdzIGEgdXNlbGVzcyBjaGVjawotCi0yMDA2LTA2LTA2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtYXJjaC5tNDoKLQkgIGFkZCBQUEM2NCBzbyB3ZSBjYW4gaGF2ZSBzZXBhcmF0ZSBzdHJ1Y3R1cmUgc2l6ZXMgZm9yIGl0Ci0KLTIwMDYtMDYtMDUgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmRAZmx1ZW5kby5jb20+Ci0KLQkqIGd0ay1kb2MubWFrOgotCUNoZWNrIGZvciB0aGUgcHJvcGVyIC5kZXZoZWxwMiBmaWxlIHRvIHJlbW92ZS4KLQotMjAwNi0wNS0zMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3RrLWRvYy5tYWs6Ci0JICBhbGxvdyBhIG1hZ2ljIHZhcmlhYmxlIHRvIHN1cHByZXNzIGVycm9ycyBmcm9tIGRvY2J1aWxkaW5nCi0KLTIwMDYtMDUtMzAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBndGstZG9jLm1hazoKLQkgIGVycm9yIG91dCBpZiBndGtkb2MtbWt0bXBsIGZpbmRzIHVudXNlZCBkZWNsYXJhdGlvbnMKLQotMjAwNi0wNS0yOCAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JUmV2ZXJ0aW5nIHByZXZpb3VzIGNvbW1pdC4gIFRoYXQncyBnb29kIHRvIGtub3csIEVkd2FyZCwgYnV0IHdoeSA/Ci0JCi0yMDA2LTA1LTI4ICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkQGZsdWVuZG8uY29tPgotCi0JKiBnc3Quc3VwcDoKLQlBZGRlZCBzdXBwcmVzaW9uIGZvciBtZW1sZWFrIGluIGdfb3B0aW9uX2NvbnRleHRfcGFyc2Ugb24gZmM1LTY0Ci0KLTIwMDYtMDUtMTkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1jaGVjay5tNDoKLQkgIHNldCBHU1RQQl9QTFVHSU5TX0RJUiBqdXN0IGxpa2UgR1NUX1BMVUdJTlNfRElSCi0KLTIwMDYtMDUtMTggIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogY2hlY2subWFrOgotCSAgRml4ICdtYWtlIGhlbHAnIGluIGNoZWNrIGRpcmVjdG9yaWVzLCBpdCBzaG91bGQgYmUKLQkgICd2YWxncmluZC5nZW4tc3VwcHJlc3Npb25zJyBub3QgJ3ZhbGdyaW5kLWdlbi1zdXBwcmVzc2lvbnMnCi0JICAobm90IGNoYW5naW5nIHRhcmdldCB0byBtYXRjaCBoZWxwIHN0cmluZyBvbiBwdXJwb3NlIHRvIGtlZXAKLQkgIHNjcmlwdHMgZXRjLiBmdW5jdGlvbmFsKS4KLQotMjAwNi0wNS0xOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCVBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQKLQotCSogbTQvZ3N0LWFyY2gubTQ6Ci0JICBhZGQgc3VwcG9ydCBmb3IgQ1JJUyBhbmQgQ1JJU3YzMi4KLQotMjAwNi0wNS0xNyAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBtNC9nc3QtYXJncy5tNDoKLQlGaXggdGhlIG1hY3JvcyBmb3IgY29tbWFuZC1saW5lIHN1cHBsaWVkIHBhY2thZ2UgYW5kIG9yaWdpbiBuYW1lcwotCXNvIHRoZXkgZG9uJ3QgZW5kIHVwIGJlaW5nIGNvbmZpZ3VyZSBhcyAiIiAoRml4ZXMgIzM0MTQ3OSkKLQotMjAwNi0wNS0xNCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGd0ay1kb2MubWFrOgotCUFkZCB1bmluc3RhbGwgcnVsZSB0byByZW1vdmUgLmRldmhlbHAyIGZpbGVzLgotCi0yMDA2LTA1LTA5ICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkQGZsdWVuZG8uY29tPgotCi0JKiBnc3Quc3VwcDogCi0JICBBZGQgc3VwcHJlc3Npb24gZm9yIEdTbGljZSB2ZXJzaW9uIG9mCi0JICBnX3R5cGVfaW5pdCBjYWxsb2MgbGVhawotCi0yMDA2LTA0LTA1ICBNaWNoYWVsIFNtaXRoICA8bXNtaXRoQGZsdWVuZG8uY29tPgotCi0JKiBnc3Quc3VwcDoKLQkgIERlbGV0ZSBhIGJvZ3VzIHN1cHByZXNzaW9uIGZvciB0aGUgcmVnaXN0cnkgY29kZS4KLQkgIEdlbmVyYWxpc2UgYSBzdXBwcmVzc2lvbiBmb3IgYSBnbGliIGJ1ZyAoc2VlICMzMzc0MDQpCi0KLTIwMDYtMDQtMDQgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JICBBZGQgYSBsZWFrIHN1cHByZXNzaW9uOiB0aGUgZXhpc3RpbmcgZ2xpYmMtZG9lc24ndC1mcmVlLVRMUyBvbmUKLQkgIHdhc24ndCB0cmlnZ2VyaW5nIGhlcmUuCi0KLTIwMDYtMDQtMDQgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JICBBZGQgc29tZSBtaW5pbWFsbHktbmVjY2VzYXJ5IHN1cHByZXNzaW9ucyBmb3IgbXkgeDg2L2RhcHBlciBzeXN0ZW0uCi0KLTIwMDYtMDQtMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHBsdWdpbnMueHNsOgotCSAgRG8gbm90IGRpc3BsYXkgYW4gb3JpZ2luIGxpbmsgaWYgb3JpZ2luIGRvZXMgbm90IHN0YXJ0IHdpdGggaHR0cAotCSAgU2VlICMzMjM3OTgKLQotMjAwNi0wNC0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLQkgIGFkZCBtb3JlIG1hY3JvcwotCSogbTQvZ3N0LXgxMS5tNDoKLQkgIFgxMS1yZWxhdGVkIGNoZWNrcwotCi0yMDA2LTA0LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9hcy12ZXJzaW9uLm00OgotCSAgbmV3ZXIgdmVyc2lvbgotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JKiBtNC9nc3QtZG9jLm00OgotCSAgdXBkYXRlIGFuZCBhZGQgb3RoZXIgbWFjcm9zIHRvIGJlIHNoYXJlZCBhY3Jvc3MgcHJvamVjdHMKLQotMjAwNi0wMy0yNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LnN1cHA6Ci0JICBhZGQgYSBzdXBwcmVzc2lvbiBmb3IgZ19wYXJzZV9kZWJ1Z19zdHJpbmcKLQotMjAwNi0wMy0yMyAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0ZG9jLXNjYW5nb2JqOgotCSAgc3luYyBmdWxseSB3aXRoIGd0a2RvYy0wLjE1Ci0KLTIwMDYtMDMtMjMgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdGRvYy1zY2FuZ29iajoKLQkqIGd0ay1kb2MubWFrOgotCSAgc3luYyBhIGxpdHRsZSB3aXRoIGd0ay1kb2MgbWFpbmxpbmUKLQotMjAwNi0wMy0xNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC5zdXBwOgotCSAgYWRkIGFub3RoZXIgY2xvbmUgc3VwcHJlc3Npb24KLQkgIGNoYW5nZSBhbGwgZ2xpYmMgc3VwcHJlc3Npb25zIHRvIG1hdGNoIDIuMy4qCi0KLTIwMDYtMDMtMDkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2NoZWNrLm00OgotCSAgZml4IHRlc3Qgc28gaXQgYWN0dWFsbHkgd29ya3Mgd2hlbiB0aGUgbm9ybWFsIGNoZWNrIGlzIHVzZWQKLQkgIG92ZXIgZGViaWFuJ3MvdWJ1bnR1J3MKLQotMjAwNi0wMy0wOCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBjaGVjay5tYWs6Ci0JU2V0IEdfU0xJQ0U9YWx3YXlzLW1hbGxvYyB3aGVuIHZhbGdyaW5kaW5nIHRlc3RzCi0JKGNsb3NlcyAjMzMzMjcyKQotCi0yMDA2LTAyLTIxICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIG00L2dzdC1nbGliMi5tNDoKLQlGaXggZGVidWcgb3V0cHV0IHdoZW4gdGhlIEdMaWIgdmVyc2lvbiBwcmVyZXF1aXNpdGUgaXMgbm90IGZvdW5kCi0KLTIwMDYtMDItMTMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIG00L2NoZWNrLm00OiBIYWNrIGFyb3VuZCBEZWJpYW4vVWJ1bnR1J3MgYnJva2VuIGluc3RhbGxhdGlvbiBvZgotCXRoZSBQSUMgdmVyc2lvbiBvZiBjaGVjayBhcyBsaWJjaGVja19waWMuYS4gU2hvdWxkIHdvcmsgd2l0aAotCWNyb3NzLWNvbXBpbGF0aW9uIHRvby4gR3JyLgotCi0yMDA2LTAyLTA2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtZGVmYXVsdC5tNDoKLQkgIHN3aXRjaCB0byBhdXRvKiBzaW5rcyBmb3IgZGVmYXVsdHMKLQotMjAwNi0wMi0wMiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIGFkZCBhIC52YWxncmluZC5nZW4tc3VwcHJlc3Npb25zIHRhcmdldCB0byBhaWQgaW4gZ2VuZXJhdGluZwotCSAgc3VwcHJlc3Npb25zCi0JKiBnc3Quc3VwcDoKLQkgIGFkZCBtb3JlIHJlcHJlc3Npb25zIGZyb20gbXkgZGViaWFuIGdsaWJjIGFzIG9mIHRvZGF5Ci0KLTIwMDYtMDItMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBvbmx5IGFkZCBzcmNkaXIvZ3N0IGlmIGl0IGV4aXN0cwotCi0yMDA2LTAxLTMwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiByZWxlYXNlLm1hazoKLQkgIGRvbid0IGNvbXBsYWluIGFib3V0IGRpc3RlZCBlbnVtcyBpbiB3aW4zMgotCi0yMDA2LTAxLTIwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtY2hlY2subTQ6Ci0JICBBQ19TVUJTVCBDRkxBR1MgYW5kIExJQlMKLQkgIGRvIGEgbm9uLWNvbW1hbmQgYmVjYXVzZSBzb21ldGhpbmcgaXMgc3RyaXBwaW5nIG91dCBvdXIgQUNfU1VCU1QKLQotMjAwNi0wMS0yMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JKiBtNC9nc3QtdmFsZ3JpbmQubTQ6Ci0JICBwcm9wZXJseSBnaXZlIGEgIm5vIiByZXN1bHQgbWFudWFsbHkgd2hlbiBwcm92aWRpbmcgYQotCSAgbm90LWZvdW5kIGFjdGlvbiB0byBmaXggY29uZmlndXJlIG91dHB1dAotCi0yMDA2LTAxLTIwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9wa2cubTQ6Ci0JICB1cGRhdGUgd2l0aCBhIG1vcmUgcmVjZW50IHZlcnNpb24KLQotMjAwNi0wMS0wNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ2V0dGV4dC5wYXRjaDoKLQkgIG1ha2UgTWFrZWZpbGUgZGVwZW5kIG9uIExJTkdVQVMsIHNvIHJlYnVpbGRzIHdvcmsgd2hlbiBhZGRpbmcKLQkgIGEgbGFuZ3VhZ2UKLQotMjAwNi0wMS0wMyAgTWljaGFlbCBTbWl0aCAgPG1zbWl0aEBmbHVlbmRvLmNvbT4KLQotCSogY2hlY2subWFrOgotCSAgQ2xhcmlmeSBlcnJvciBtZXNzYWdlIGZyb20gdmFsZ3JpbmQgdGVzdCBydW5zLgotCi0yMDA1LTEyLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtYXJjaC5tNDoKLQkgIGRlZmluZSBIT1NUX0NQVQotCi0yMDA1LTExLTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjaGVjay5tYWs6Ci0JICBhZGQgYSB2YWxncmluZC1mb3JldmVyIHRhcmdldCBmb3IgdGVzdHMKLQotMjAwNS0xMS0yOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY2hlY2subWFrOgotCSAgd2hlbiBhICJtYWtlIHRlc3QuY2hlY2siIHJ1biBmYWlscywgbWFrZSBpdCByZXJ1biB0aGUgdGVzdCB3aXRoCQotCSAgYXQgbGVhc3QgZGVidWcgbGV2ZWwgMgotCi0yMDA1LTExLTE0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9NYWtlZmlsZS5hbToKLQkqIG00L2dzdC1jaGVjay5tNDoKLQkgIGZpeCBjaGVjayBmb3IgYmFzZSBwbHVnaW5zCi0JKiBtNC9nc3QtZGVmYXVsdC5tNDoKLQkgIGFkZCBtNCB0byBzZXQgZGVmYXVsdCBlbGVtZW50cwotCi0yMDA1LTEwLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtY2hlY2subTQ6Ci0JICBjaGVjayBmb3IgdG9vbHMgY29ycmVjdGx5Ci0KLTIwMDUtMTAtMTggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGd0ay1kb2MubWFrOgotCSAgb25seSBlbmFibGUgYnJlYWtpbmcgb24gbmV3IEFQSSB3aGVuIG1ha2UgZGlzdGNoZWNrIHBhc3NlcywKLQkgIG5vdCBiZWZvcmUKLQotMjAwNS0xMC0xOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWNoZWNrLm00OgotCSAgUmVzdXJyZWN0IEp1bGllbidzIGRlYWQgYm9keSBhbmQgd2lwZSBoaXMgbWluZCBjbGVhbgotCi0yMDA1LTEwLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtY2hlY2subTQ6Ci0JICBLaWxsIEp1bGllbgotCi0yMDA1LTEwLTE3ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIG00L2dzdC1jaGVjay5tNDogSSBrbm93IFRob21hcyB3aWxsIGtpbGwgbWUgYnV0IHRoaXMgCi0JaWZlbHNlIHN0YXRlbWVudCBzZWVtcyBpbmNvcnJlY3QgYXMgaXQgaXMgYWx3YXlzIHNldHRpbmcKLQlyZXF1aXJlZCB0byAieWVzIi4gV2l0aCB0aGlzIG9uZSBpdCBzZWVtcyB0byB3b3JrLiBGaXhlcwotCWJ1aWxkIG9mIGdzdC1wbHVnaW5zLWJhc2Ugb24gbXkgc2V0dXAgd2hlcmUgZ3N0cmVhbWVyLWNoZWNrCi0JaXMgZGVmaW5pdGVseSBub3QgcHJlc2VudC9yZXF1aXJlZC4KLQotMjAwNS0xMC0xOCAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3RrLWRvYy5tYWs6Ci0JICBtYWtlIGJ1aWxkIGJyZWFrIG9uIG5ldyBhcGkgdGhhdCBoYXMgbm90IGJlZW4gYWRkZWQgdG8gdGhlCi0JICBzZWN0aW9ucyBmaWxlCi0KLTIwMDUtMTAtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1nbGliMi5tNDoKLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvZ3N0LWNoZWNrLm00OgotCSAgYWRkIG1hY3JvIGZvciBlYXN5IGNoZWNrcyBmb3IgR1N0cmVhbWVyIGxpYnMKLQotMjAwNS0xMC0xNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWdsaWIyLm00OgotCSAgdXBkYXRlLCB3YXJuIGluIGVycm9yIGNhc2VzCi0KLTIwMDUtMTAtMTYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1lcnJvci5tNDoKLQkgIGFkZCBHU1RfU0VUX0RFRkFVTFRfTEVWRUwKLQotMjAwNS0xMC0xNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvTWFrZWZpbGUuYW06Ci0JKiBtNC9nc3QtZ2V0dGV4dC5tNDoKLQkgIHJlbW92ZSB0aGUgQU1fR05VX0dFVFRFWFQqIGNhbGxzLCB0aGV5IG5lZWQgdG8gYmUgaW4gY29uZmlndXJlLmFjCi0JKiBtNC9nc3QtZ2xpYjIubTQ6Ci0JICBjbGVhbiB1cCBhbmQgcmUtdXNlIGluIGNvcmUgc29vbgotCSogbTQvZ3N0LXBsdWdpbmRpci5tNDoKLQkgIG1hY3JvIHRvIHNldCB1cCBQTFVHSU5ESVIgYW5kIHBsdWdpbmRpciBkZWZpbmUvdmFyCi0KLTIwMDUtMTAtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvZ3N0LWdldHRleHQubTQ6Ci0JICBhZGQgbWFjcm8gZm9yIHNldHRpbmcgdXAgZ2V0dGV4dAotCi0yMDA1LTEwLTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtYXJncy5tNDoKLQkgIGFkZCBzb21lIC5tNCdzIGZvciBhcmd1bWVudCBjaGVja2luZyB0aGF0IGNhbiBiZSBzaGFyZWQgYW1vbmcgbW9kdWxlcwotCi0yMDA1LTEwLTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9hcy1saWJ0b29sLm00OgotCSAgc2V0IF9MVF9MREZMQUdTCi0JKiBtNC9nc3QtbGlieG1sMi5tNDoKLQkgIGRvY3VtZW50Ci0KLTIwMDUtMTAtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1hcmNoLm00OgotCSAgaW5kZW50IGEgbGl0dGxlCi0JICBhZGQgQUNfUkVRVUlSRQotCSogbTQvZ3N0LWVycm9yLm00OgotCSAgY2xlYW4gdXAKLQotMjAwNS0xMC0xMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LWF1dG9nZW4uc2g6Ci0JICB1cGRhdGUgdmVyc2lvbiBkZXRlY3Rpb24gZXhwcmVzc2lvbiB0byBjYXRjaCBzdHVmZiBsaWtlCi0JICBMaWJ0b29sIChsaWJ0b29sMTUpIDEuNS4wCi0KLTIwMDUtMTAtMTEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC5zdXBwOgotCSAgY29tbWl0IDYgbmV3IHN1cHByZXNzaW9ucyByZWxhdGVkIHRvIGdfbW9kdWxlX29wZW47IGNhbiB0aGVzZQotCSAgcmVhbGx5IG5vdCBiZSBmb2xkZWQgaW50byBvbmUgPwotCi0yMDA1LTEwLTExICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkQGZsdWVuZG8uY29tPgotCi0JKiBnc3Quc3VwcDogCi0JbWFkZSB0aGUgPGdfdHlwZV9pbml0IGNhbGxvYyAyPiBzdXBwcmVzc2lvbiBtb3JlIGdlbmVyaWMKLQlBZGRlZCBwdGhyZWFkIG1lbWxlYWsgc3VwcHJlc2lvbnMKLQlBZGRlZCBuc3NfcGFyc2VfKiBtZW1sZWFrIHN1cHByZXNpb24gKHVzZWQgYnkgZ19vcHRpb25fY29udGV4dF9wYXJzZSkKLQotMjAwNS0xMC0xMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY2hlY2subWFrOgotCSAgYmUgbW9yZSBzdHJpY3QsIG1vcmUgbGVhayByZXNvbHV0aW9uCi0JKiBnc3Quc3VwcDoKLQkgIGNsZWFuIHVwIHRoZSBnX3R5cGVfaW5pdCBzdXBwcmVzc2lvbnMKLQotMjAwNS0xMC0wNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvTWFrZWZpbGUuYW06Ci0JKiBtNC9nc3QtdmFsZ3JpbmQubTQ6Ci0JICBwdXQgdGhlIHZhbGdyaW5kIGRldGVjdGlvbiBpbiBhbiAubTQKLQotMjAwNS0wOS0yOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY2hlY2subWFrOgotCSAgYWRkIHNvbWUgbW9yZSB0YXJnZXRzLCBsaWtlICJoZWxwIiwgYnV0IGFsc28gbW9yZSBpbnRlbnNpdmUgdGVzdHMKLQotMjAwNS0wOS0yMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3RrLWRvYy5tYWs6Ci0JICBtYWtlIGNlcnRhaW4gZG9jIHdhcm5pbmdzIGZhdGFsIHNvIHBlb3BsZSBtYWludGFpbiBkb2NzIGFnYWluCi0KLTIwMDUtMDktMjMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkqIHNjYW5nb2JqLW1lcmdlLnB5OgotCSAgbWVyZ2UgYWRkaXRpb25zIGZyb20gdGhlIC5zaWduYWxzLm5ldyBhbmQgLmFyZ3MubmV3IGZpbGUgaW4KLQkgIHRoZSBvcmlnaW5hbCBvbmVzLCBvbmx5IHVwZGF0aW5nIGlmIG5lY2Vzc2FyeQotCi0yMDA1LTA5LTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QteG1saW5zcGVjdC5weToKLQkqIGdzdGRvYy1zY2FuZ29iajoKLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBmaXggcHJvcGVybHkgZm9yIG5ldyBBUEk7IG1ha2UgdXBkYXRlIGluIHBsdWdpbnMgZGlyIG5vdyB3b3JrcwotCi0yMDA1LTA5LTIwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QteG1saW5zcGVjdC5weToKLQkqIGdzdGRvYy1zY2FuZ29iajoKLQkgIHNvbWUgZml4ZXMgZm9yIG5ldyBBUEkKLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBzZXQgZW52aXJvbm1lbnQgcHJvcGVybHkKLQotMjAwNS0wOS0xNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOiBVc2UgbmV3IGVudmlyb25tZW50IHZhcmlhYmxlcy4KLQotMjAwNS0wOS0xNiAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgotCi0JKiBnc3Rkb2Mtc2NhbmdvYmo6Ci0JICBNYWtlIHRoZSBzY2Fub2JqIGNvZGUgcmVmbGVjdCByZWdpc3RyeS9wbHVnaW4gQVBJIGNoYW5nZXMKLQotMjAwNS0wOS0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkgIHNwbGl0IG91dCBzY2Fub2JqIHN0ZXAgKHdoaWNoIHdpbGwgYmUgcnVuIGJ5IGRvYyBtYWludGFpbmVyKQotCSAgZnJvbSBzY2FuIHN0ZXAgKHdoaWNoIHdpbGwgYmUgcnVuIG9uIGV2ZXJ5IGJ1aWxkKQotCSAgY2xlYW4gdXAgc29tZSBvZiB0aGUgY29tbWFuZHMgZm9yIG1ha2UgZGlzdGNoZWNrCi0KLTIwMDUtMDktMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBtYW5nbGUtdG1wbC5weToKLQkgIGZpcnN0IHN0YWIgYXQgcmVvcmdhbml6aW5nIHRoZSBwbHVnaW5zIGJ1aWxkIHNvIHdlIGNhbiBtYWludGFpbgotCSAgZWxlbWVudCBkb2NzCi0KLTIwMDUtMDktMTQgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogYXMtbGlidG9vbC5tYWs6IFJlbW92ZQotCSogbTQvYXMtbGlidG9vbC5tNDogVGhlIGxpYnRvb2wgYnVnIHRoYXQgdGhpcyB3b3JrZWQgYXJvdW5kIGhhcwotCSAgYmVlbiBmaXhlZC4KLQkqIG00L2FzLXZlcnNpb24ubTQ6IERvbid0IGRlZmluZSBHU1RfUkVMRUFTRSwgc2luY2UgaXQgY2F1c2VzCi0JICBjb25maWcuaCB0byBiZSByZWdlbmVyYXRlZCBuZWVkbGVzc2x5LCBhbmQgd2UgZG9uJ3QgdXNlIGl0LgotCi0yMDA1LTA5LTE0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgZXJyb3Igb3V0IG9uIGluc3BlY3QgZmFpbHVyZQotCi0yMDA1LTA5LTE0ICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAZmx1ZW5kby5jb20+Ci0KLQkqIGdsaWItZ2VuLm1hazoKLQkgIERvbid0IGNhbGwgZ2xpYi1ta2VudW1zIHdpdGggYXJndW1lbnRzIHRoYXQgY29uZnVzZS9icmVhayBNaW5HVywKLQkgIGZpeGVzIDMxNjE1NS4KLQotMjAwNS0wOS0wMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkqIGd0ay1kb2MubWFrOgotCSogbTQvZ3N0LWRvYy5tNDoKLQkgIHNlcGFyYXRlIG91dCBndGstZG9jIGFuZCBkb2Nib29rIHN0dWZmCi0JICBoYXZlIHR3byBzZXBhcmF0ZSAtLWVuYWJsZSBjb25maWd1cmUgZmxhZ3MKLQotMjAwNS0wOC0yNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY2hlY2subWFrOgotCSAgYWRkIGEgLmdkYiB0YXJnZXQ7IHJlYnVpbGQgcmVnaXN0cnkgZm9yIGVhY2ggdGFyZ2V0LCBvdGhlcndpc2UKLQkgIGEgY29kZSByZWJ1aWxkIGFsd2F5cyB0cmlnZ2VycyBhIHJlZyByZWJ1aWxkLCBhbmQgaXQncyBqdXN0IHRvbwotCSAgYW5ub3lpbmcKLQkqIGdzdGRvYy1zY2FuZ29iajoKLQotMjAwNS0wOC0yMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY2hlY2subWFrOgotCSAgc2VwYXJhdGUgb3V0IFJFR0lTVFJZX0VOVklST05NRU5UOyB3ZSB3YW50IHRvIHVzZSB0aGF0IGZyb20KLQkgIG91ciB2YWxncmluZCBydW5zLCBidXQgd2UgYWxzbyB3YW50IFRFU1RTX0VOVklST05NRU5UIHRvIGNvbnRhaW4KLQkgIGV2ZXJ5dGhpbmcgdGhhdCB0aGUgZmlyc3QgdGVzdCwgZ3N0LXJlZ2lzdGVyLCBuZWVkcwotCi0yMDA1LTA4LTIxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjaGVjay5tYWs6Ci0JICBwYXJzZSBvdXRwdXQgb2YgdmFsZ3JpbmQgYW5kIGNoZWNrIGZvciBkZWZpbml0ZWx5IGxvc3QsIGFuZCBlcnJvcgotCSAgb3V0OyBzb21laG93IEkgd2FzIGxlZCB0byBiZWxpZXZlIHZhbGdyaW5kIHJldHVybnMgbm9uLXplcm8gZm9yCi0JICBsZWFrcywgYnV0IEkgY2FuJ3QgbWFrZSBpdCBkbyB0aGF0LCBzbyBsZXQncyBwYXJzZQotCi0yMDA1LTA4LTIwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjaGVjay5tYWs6Ci0JICBmb3Igc29tZSB3ZWlyZCByZWFzb24gdmFsZ3JpbmQgZG9lcyBub3QgcmVwb3J0IGFjdHVhbCBtZW1sZWFrcwotCSAgaWYgR1NUX1BMVUdJTl9QQVRIIGlzIHNldCB0byBhbnl0aGluZyBidXQgdGhlIGNvcmUgZ3N0cmVhbWVyIGRpcgotCSAgd2hpbGUgdmFsZ3JpbmQgaXMgcnVubmluZy4gIFNpbmNlIHRoZSByZWdpc3RyeSBpcyBnb2luZyB0byBnbwotCSAgYW55d2F5LCBJIGRvbid0IHdhbnQgdG8gd2FzdGUgYW55IG1vcmUgdGltZSBvbiB0aGlzOyBJIGp1c3QgcnVuCi0JICB2YWxncmluZCB3aXRob3V0IEdTVF9QTFVHSU5fUEFUSCBzZXQuICBTaW5jZSB0aGUgcmVnaXN0cnkgbG9hZGluZwotCSAgZG9lc24ndCBjaGVjayBpZiBHU1RfUExVR0lOX1BBVEggZ290IGNoYW5nZWQgYXMgYSByZWFzb24gdG8gcmVidWlsZAotCSAgdGhlIHJlZ2lzdHJ5LCB0aGF0J3MgYWN0dWFsbHkgZmluZS4KLQotMjAwNS0wOC0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbWFuZ2xlLXRtcGwucHk6Ci0JICBrZWVwIG9yaWdpbmFsIExvbmdfRGVzY3JpcHRpb247IG9ubHkgaW5zZXJ0IGFuIGluY2x1ZGUgaWYgaXQncwotCSAgbm90IGFscmVhZHkgdGhlIGZpcnN0IGxpbmUgaW4gdGhlcmUKLQkqIHBsdWdpbnMueHNsOgotCSAgb3V0cHV0IG1vcmUgaW5mb3JtYXRpb24gZm9yIHBsdWdpbnMsIGluY2x1ZGluZyBhbiBvcmlnaW4gaHlwZXJsaW5rCi0KLTIwMDUtMDgtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC14bWxpbnNwZWN0LnB5OgotCSAgYSBmaXJzdCBzdGFiIGF0IGluc3BlY3RpbmcgcGx1Z2lucyBhbmQgb3V0cHV0dGluZyBhbiB4bWwgZGVzY3JpcHRpb24KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBhIGd0ay1kb2MgdXNpbmcgc25pcHBldCBmb3IgcGx1Z2lucyBkb2N1bWVudGF0aW9uCi0JKiBwbHVnaW5zLnhzbDoKLQkgIGEgc3R5bGVzaGVldCB0byBjb252ZXJ0IGdzdC14bWxpbnNwZWN0LnB5IG91dHB1dCB0byBkb2Nib29rIG91dHB1dAotCSAgZm9yIGluY2x1c2lvbiBpbiB0aGUgZ3RrLWRvYyBzdHVmZgotCi0yMDA1LTA3LTIwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBtNC9nc3QtZG9jLm00OgotCSAgcy9wZGYvZXBzLyBpbiB0ZXN0IGZvciB3aGV0aGVyIHdlIG91dHB1dCBFUFMgaW1hZ2VzICgjMzA5Mzc5KS4KLQotMjAwNS0wNy0xOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogbTQvYXMtbGlidG9vbC10YWdzLm00OiBPb2gsIGJhY2twb3J0ZWQgZnJvbSBsaWJ0b29sIDEuNi4gTXVjaAotCWJldHRlci4gVGhhbmtzLCBQYW9sbyBCb256aW5pIQotCQotCSogbTQvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiAKLQkqIG00L2FzLWxpYnRvb2wtdGFncy5tNDogTmV3IGZpbGUsIHRyaWVzIHRvIGRpc2FibGUgc29tZSBDWFggYW5kCi0JZm9ydHJhbiBjaGVja3MuCi0KLTIwMDUtMDctMDggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1lcnJvci5tNDoKLQkgIGFkZCBtYWNybyB0byBzZXQgRVJST1JfQ0ZMQUdTCi0KLTIwMDUtMDYtMzAgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0LWF1dG9nZW4uc2g6Ci0JICBSZW1vdmUgdGhlIG9sZCBhdXRvcmVnZW4uc2ggaWYgaXQgZXhpc3RzIGJlZm9yZSByZWNyZWF0aW5nIGl0LAotCSAgdG8gcHJldmVudCBjb25mdXNpbmcgYW55IHNoZWxsIHByb2Nlc3MgdGhhdCBtaWdodCBiZSByZWFkaW5nIGl0Ci0JICBjdXJyZW50bHkuCi0KLTIwMDUtMDYtMjkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2d0ay1kb2MubTQ6Ci0JICBhZGRlZAotCi0yMDA1LTA2LTAzICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QtYXV0b2dlbi5zaDogY3JlYXRlIGF1dG9yZWdlbi5zaCAqYmVmb3JlKiBzaGlmdGluZyB0aGUgb3B0aW9ucwotCi0yMDA1LTA1LTE3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtYXV0b2dlbi5zaDogb25seSB1cGRhdGUgYXV0b3JlZ2VuLnNoIG9uIGFjdHVhbCBydW5zCi0KLTIwMDUtMDMtMTEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2NoZWNrLm00OiBtNCBmcm9tIHRoZSBjaGVjayB1bml0IHRlc3Qgc3VpdGUKLQotMjAwNC0xMi0xNCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBtNC9nc3QtYXJjaC5tNDogcmVtb3ZlIE1NWCBzdHVmZiwgc2luY2UgaXQgZG9lc24ndCB3b3JrIGFuZAotCWlzbid0IG5lZWRlZCBhbnl3aGVyZQotCi0yMDA0LTEyLTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtYXV0b2dlbi5zaDoKLQkgIGFsbG93IGZhaWx1cmUgY29tbWFuZCB0byBiZSBydW4gc28gd2UgY2FuIGNsZWFuIHVwZnJvbSBhdXRvcG9pbnQKLQotMjAwNC0wOS0wMyAgWmVlc2hhbiBBbGkgS2hhdHRhayA8emVlbml4QGdtYWlsLmNvbT4KLQkqIG00L2dzdC1mZWF0dXJlLm00OiBUcnlpbmcgdG8gY29ycmVjdCB0aGUgR1NUX0NIRUNLX0NPTkZJR1BST0cgbWFjcm8KLQotMjAwNC0wNy0yMSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBtNC8uY3ZzaWdub3JlOiBleGNpdGluZyB1cGRhdGVzIGZvciBsaWJ0b29sIG00IGZpbGVzCi0KLTIwMDQtMDctMTIgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogbTQvYXMtb2JqYy5tNDogIEFkZCBhIG1hY3JvIHRvIHRlc3QgZm9yIG9iamVjdGl2ZSBDCi0KLTIwMDQtMDYtMTIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCSAgbm90IGFsbCBvZiB0aGVtIHN1cHBvcnQgLS1wbHVnaW4tbGlicywgc28gcmVkaXJlY3Qgc3RkZXJyCi0KLTIwMDQtMDYtMTIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2FzLXNjcnViLWluY2x1ZGUubTQ6Ci0JICBzeW5jIHdpdGggdXBzdHJlYW0gdG8gMC4xLjQuICBGaXhlcyAjMTMyNDQwCi0KLTIwMDQtMDYtMDcgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JICB3cml0ZSBhIGJpZyBtYXJrZXIgaW50byBjb25maWd1cmUgb3V0cHV0IHdoZW4gY2hlY2tpbmcgbmV4dCBwbHVnaW4KLQkgIHRvIGFsbG93IGVhc2llciBwYXJzaW5nIG9mIHdoeSBwbHVnaW5zIGFyZShuJ3QpIGJ1aWx0LgotCi0yMDA0LTA2LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9hcy1jb21waWxlci1mbGFnLm00OgotCSogbTQvYXMtY29tcGlsZXIubTQ6Ci0JKiBtNC9hcy1saWJ0b29sLm00OgotCSogbTQvYXMtdmVyc2lvbi5tNDoKLQkgIHN5bmMgd2l0aCB1cHN0cmVhbSwgY2hhbmdlIHN0aWNreSBvcHRpb25zIHRvIC1rbwotCi0yMDA0LTA1LTI0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9hcy1zY3J1Yi1pbmNsdWRlLm00OiBzeW5jZWQgd2l0aCB1cHN0cmVhbQotCi0yMDA0LTA1LTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby5tYWs6Ci0gICAgICAgICAgc25pcHBldCBmb3IgdXBkYXRpbmcgLnBvIGZpbGVzCi0KLTIwMDQtMDMtMTggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogbTQvTWFrZWZpbGUuYW06Ci0gICAgICAgICAgaW50ZWdyYXRlIHRoZXNlIHdpdGggdGhlIGRpc3QKLQotMjAwNC0wMy0xNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogcmVsZWFzZS5tYWs6IGFkZCBhIHJlbGVhc2UgdGFyZ2V0Ci0KLTIwMDQtMDMtMDkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlwYXRjaCBieTogU3RlcGhhbmUgTG9ldWlsbGV0Ci0KLQkqIG00L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNDoKLSAgICAgICAgICB1c2UgaGVhZCAtbiBpbnN0ZWFkIG9mIGhlYWQgLSAoIzEzNjUwMCkKLQotMjAwNC0wMy0wNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWRvYy5tNDogZG9uJ3QgYnVpbGQgUFMgd2l0aG91dCBkdmlwcyBiaW5hcnkKLQotMjAwNC0wMi0yMiAgIEp1bGlvIE0uIE1lcmlubyBWaWRhbCA8am1tdkBtZW50YS5uZXQ+Ci0KLQlyZXZpZXdlZCBieTogQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBtNC9hcy1kb2Nib29rLm00OgotCSAgZG9uJ3QgdXNlID09IG9wZXJhdG9yIHdpdGggdGVzdCgxKSAoZml4ZXMgIzEzNTExNSkKLQotMjAwNC0wMi0xNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAKLQkqIGNvbW1vbi9tNC9nc3QtYXJjaC5tNDogeDg2XzY0IGlzIHg4NiB0b28gKGNsdWUgZnJvbSBGZWRvcmEgMiB0ZXN0KQotCi0yMDA0LTAyLTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLSAgICAgICAgICByZW1vdmUgQU1fQ09ORElUSU9OQUwgZm9yIHRoZSBzdWJzeXN0ZW0gc2luY2UgYXV0b21ha2UgMS42LngKLSAgICAgICAgICByZXF1aXJlcyB0aGF0IGNhbGwgYmUgaW4gY29uZmlndXJlLmFjCi0KLTIwMDQtMDItMTMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1saWJ4bWwyLm00OgotICAgICAgICAgIHRha2UgcmVxdWlyZWQgdmVyc2lvbiBhcyBhcmd1bWVudCwgYW5kIGRlZmF1bHQgdG8gMi40LjkgaWYgbm90Ci0gICAgICAgICAgc3BlY2lmaWVkCi0KLTIwMDQtMDItMTIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotICAgICAgICAgIHJlbmFtZSBhbmQgZml4IHVwIEdTVF9DSEVDS19ESVNBQkxFX1NVQlNZU1RFTQotCi0yMDA0LTAyLTExICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb21tb24vbTQvYXMtYWMtZXhwYW5kLm00OgotCSogY29tbW9uL200L2FzLWF1dG8tYWx0Lm00OgotCSogY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQ6Ci0JKiBjb21tb24vbTQvYXMtY29tcGlsZXIubTQ6Ci0JKiBjb21tb24vbTQvYXMtZG9jYm9vay5tNDoKLQkqIGNvbW1vbi9tNC9hcy1saWJ0b29sLm00OgotCSogY29tbW9uL200L2FzLXNjcnViLWluY2x1ZGUubTQ6Ci0JKiBjb21tb24vbTQvYXMtdmVyc2lvbi5tNDoKLQkqIGNvbW1vbi9tNC9nbGliLWdldHRleHQubTQ6Ci0JKiBjb21tb24vbTQvZ3N0LWFyY2gubTQ6Ci0JKiBjb21tb24vbTQvZ3N0LWRlYnVnaW5mby5tNDoKLQkqIGNvbW1vbi9tNC9nc3QtZG9jLm00OgotCSogY29tbW9uL200L2dzdC1mZWF0dXJlLm00OgotCSogY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNDoKLQkqIGNvbW1vbi9tNC9nc3QtZ2xpYjIubTQ6Ci0JKiBjb21tb24vbTQvZ3N0LWdzdHJlYW1lci5tNDoKLQkqIGNvbW1vbi9tNC9nc3QtbGlieG1sMi5tNDoKLQkqIGNvbW1vbi9tNC9nc3QtbWFrZWNvbnRleHQubTQ6Ci0JKiBjb21tb24vbTQvZ3N0LW1jc2MubTQ6Ci0JKiBjb21tb24vbTQvcGtnLm00OgotICAgICAgICAgIGZpeCB1bmRlcnF1b3RlZCBtYWNyb3MgYXMgcmVwb3J0ZWQgYnkgYXV0b21ha2UgMS44LnggKCMxMzM4MDApCi0KLTIwMDQtMDItMTEgIEpvaGFuIERhaGxpbiAgPGpvaGFuQGdub21lLm9yZz4KLQotCSogZ3N0LWF1dG9nZW4uc2g6IFVzZSBBLVogaW5zdGVhZCBvZiBBLXogaW4gc2VkIGV4cHJlc3Npb24gdG8KLQlhdm9pZCBhIHdhcm5pbmcKLQotMjAwNC0wMi0wNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIG00L2dzdC1kb2MubTQ6Ci0gICAgICAgICAgd2UgdXNlIC0tb3V0cHV0LWZvcm1hdD14bWwgYW5kIC0taW5nbm9yZS1maWxlcyBvcHRpb25zIHRvCi0gICAgICAgICAgZ3RrZG9jLW1rZGIsIHdoaWNoIGdvdCBhZGRlZCBiZXR3ZWVuIDAuOSBhbmQgMS4wCi0KLTIwMDQtMDItMDQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2FzLWxpYnRvb2wubTQ6IHJlbW92ZSBBTV9QUk9HX0xJQlRPT0wgc28gaXQgY2FuIG1vdmUgYmFjawotICAgICAgICAgIHRvIGNvbmZpZ3VyZS5hYyB0byBzaHV0IHVwIGxpYnRvb2xpemUKLQotMjAwNC0wMi0wMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotICAgICAgICAqIGdsaWItZ2VuLm1hazogYWRkZWQ7IHVzZWQgdG8gZ2VuZXJhdGUgZW51bXMgYW5kIG1hcnNoYWwgY29kZQotCi0yMDA0LTAxLTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0gICAgICAgICogZ2V0dGV4dC5wYXRjaDogYWRkZWQ7IHVzZWQgYnkgYXV0b2dlbi5zaCB0byBtYWtlIHN1cmUKLSAgICAgICAgICBHRVRURVhUX1BBQ0tBR0UgaXMgdW5kZXJzdG9vZCBmcm9tIHBvL01ha2VmaWxlLmluLmluIC0+IHBvL01ha2VmaWxlLmluCi0KZGlmZiAtLWdpdCBhL2NvbW1vbi9NYWtlZmlsZS5hbSBiL2NvbW1vbi9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhYzdkOC4uMDAwMDAwMAotLS0gYS9jb21tb24vTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1TVUJESVJTID0gbTQKLQotRVhUUkFfRElTVCA9IFwKLQlDaGFuZ2VMb2cgXAotCWdldHRleHQucGF0Y2ggXAotCWdsaWItZ2VuLm1hayBndGstZG9jLm1hayB1cGxvYWQtZG9jLm1hayBcCi0JY3J1ZnQubWFrIHJlbGVhc2UubWFrIHdpbjMyLm1hayBwby5tYWsgXAotCXBhcmFsbGVsLXN1YmRpcnMubWFrIFwKLQlnc3QtYXV0b2dlbi5zaCBcCi0JY2hlY2stZXhwb3J0cyBcCi0JYy10by14bWwucHkgbWFuZ2xlLWRiLnB5IHNjYW5nb2JqLW1lcmdlLnB5IFwKLQlndGstZG9jLXBsdWdpbnMubWFrIFwKLQlwbHVnaW5zLnhzbCBnc3Rkb2Mtc2NhbmdvYmogXAotCWdzdC5zdXBwIGNoZWNrLm1hayBcCi0JY292ZXJhZ2UvbGNvdi5tYWsgXAotCWNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbCBcCi0JY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnhzbCBcCi0JY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LWVudHJ5LnBsIFwKLQlkb3dubG9hZC10cmFuc2xhdGlvbnMgXAotCWV4dHJhY3QtcmVsZWFzZS1kYXRlLWZyb20tZG9hcC1maWxlIFwKLQlnc3QtaW5kZW50IFwKLQlvcmMubWFrCmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUuaW4gYi9jb21tb24vTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZGVlYjQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODQ2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gY29tbW9uCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAotCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKLSAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAotICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCi0gICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKLSAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKLQlkaXN0ZGlyCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBDaGFuZ2VMb2cgUkVBRE1FCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotYW1fX3JlbGF0aXZpemUgPSBcCi0gIGRpcjA9YHB3ZGA7IFwKLSAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCi0gIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCi0gIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCi0gIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAotICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCi0gICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAotICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKLSAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCi0gICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAotICAgICAgZWxzZSBcCi0gICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAotICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICAgICAgICBlbHNlIFwKLSAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCi0gICAgICAgIGZpOyBcCi0gICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCi0gICAgICBmaTsgXAotICAgIGZpOyBcCi0gICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gIGRvbmU7IFwKLSAgcmVsZGlyPSIkJGRpcjIiCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotU1VCRElSUyA9IG00Ci1FWFRSQV9ESVNUID0gXAotCUNoYW5nZUxvZyBcCi0JZ2V0dGV4dC5wYXRjaCBcCi0JZ2xpYi1nZW4ubWFrIGd0ay1kb2MubWFrIHVwbG9hZC1kb2MubWFrIFwKLQljcnVmdC5tYWsgcmVsZWFzZS5tYWsgd2luMzIubWFrIHBvLm1hayBcCi0JcGFyYWxsZWwtc3ViZGlycy5tYWsgXAotCWdzdC1hdXRvZ2VuLnNoIFwKLQljaGVjay1leHBvcnRzIFwKLQljLXRvLXhtbC5weSBtYW5nbGUtZGIucHkgc2NhbmdvYmotbWVyZ2UucHkgXAotCWd0ay1kb2MtcGx1Z2lucy5tYWsgXAotCXBsdWdpbnMueHNsIGdzdGRvYy1zY2FuZ29iaiBcCi0JZ3N0LnN1cHAgY2hlY2subWFrIFwKLQljb3ZlcmFnZS9sY292Lm1hayBcCi0JY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsIFwKLQljb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQueHNsIFwKLQljb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQtZW50cnkucGwgXAotCWRvd25sb2FkLXRyYW5zbGF0aW9ucyBcCi0JZXh0cmFjdC1yZWxlYXNlLWRhdGUtZnJvbS1kb2FwLWZpbGUgXAotCWdzdC1pbmRlbnQgXAotCW9yYy5tYWsKLQotYWxsOiBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGNvbW1vbi9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBjb21tb24vTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6Ci0JQGZhaWw9OyBcCi0JaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKLQkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAotCWVsc2UgXAotCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZpOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtcmVjdXJzaXZlCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtcmVjdXJzaXZlCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCi0JICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCi0JICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKLQkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCi0JCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKLQkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAotCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgXAotCWNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKLQlwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY29tbW9uL1JFQURNRSBiL2NvbW1vbi9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYTFiODguLjAwMDAwMDAKLS0tIGEvY29tbW9uL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi1HU3RyZWFtZXIgQFNFUklFU19WRVJTSU9OQAotCi1XSEFUIElUIElTCi0tLS0tLS0tLS0tCi0KLVRoaXMgaXMgR1N0cmVhbWVyLCBhIGZyYW1ld29yayBmb3Igc3RyZWFtaW5nIG1lZGlhLgotCi1XSEVSRSBUTyBTVEFSVAotLS0tLS0tLS0tLS0tLS0KLQotV2UgaGF2ZSBhIHdlYnNpdGUgYXQKLWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLwotCi1Zb3Ugc2hvdWxkIHN0YXJ0IGJ5IGdvaW5nIHRocm91Z2ggb3VyIEZBUSBhdAotaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZmFxL2h0bWwvCi0KLVRoZXJlIGlzIG1vcmUgZG9jdW1lbnRhdGlvbjsgZ28gdG8KLWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RvY3VtZW50YXRpb24KLQotWW91IGNhbiBzdWJzY3JpYmUgdG8gb3VyIG1haWxpbmcgbGlzdHM7IHNlZSB0aGUgd2Vic2l0ZSBmb3IgZGV0YWlscy4KLQotV2UgdHJhY2sgYnVncyBpbiBHTk9NRSdzIGJ1Z3ppbGxhOyBzZWUgdGhlIHdlYnNpdGUgZm9yIGRldGFpbHMuCi0KLVlvdSBjYW4gam9pbiB1cyBvbiBJUkMgLSAjZ3N0cmVhbWVyIG9uIGlyYy5mcmVlbm9kZS5vcmcKLQotR1N0cmVhbWVyIDEuMCBzZXJpZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVN0YXJyaW5nCi0KLSAgR1NUUkVBTUVSCi0KLVRoZSBjb3JlIGFyb3VuZCB3aGljaCBhbGwgb3RoZXIgbW9kdWxlcyByZXZvbHZlLiAgQmFzZSBmdW5jdGlvbmFsaXR5IGFuZAotbGlicmFyaWVzLCBzb21lIGVzc2VudGlhbCBlbGVtZW50cywgZG9jdW1lbnRhdGlvbiwgYW5kIHRlc3RpbmcuCi0KLSAgQkFTRQotCi1BIHdlbGwtZ3Jvb21lZCBhbmQgd2VsbC1tYWludGFpbmVkIGNvbGxlY3Rpb24gb2YgR1N0cmVhbWVyIHBsdWctaW5zIGFuZAotZWxlbWVudHMsIHNwYW5uaW5nIHRoZSByYW5nZSBvZiBwb3NzaWJsZSB0eXBlcyBvZiBlbGVtZW50cyBvbmUgd291bGQgd2FudAotdG8gd3JpdGUgZm9yIEdTdHJlYW1lci4gIAotCi1BbmQgaW50cm9kdWNpbmcsIGZvciB0aGUgZmlyc3QgdGltZSBldmVyLCBvbiB0aGUgZGV2ZWxvcG1lbnQgc2NyZWVuIC4uLgotCi0gIFRIRSBHT09ECi0KLSAtLS0gIlN1Y2ggaW5ncmF0aXR1ZGUuICBBZnRlciBhbGwgdGhlIHRpbWVzIEkndmUgc2F2ZWQgeW91ciBsaWZlLiIKLQotQSBjb2xsZWN0aW9uIG9mIHBsdWctaW5zIHlvdSdkIHdhbnQgdG8gaGF2ZSByaWdodCBuZXh0IHRvIHlvdSBvbiB0aGUKLWJhdHRsZWZpZWxkLiAgU2hvb3Rpbmcgc2hhcnAgYW5kIG1ha2luZyBubyBtaXN0YWtlcywgdGhlc2UgcGx1Zy1pbnMgaGF2ZSBpdAotYWxsOiBnb29kIGxvb2tzLCBnb29kIGNvZGUsIGFuZCBnb29kIGxpY2Vuc2luZy4gIERvY3VtZW50ZWQgYW5kIGRyZXNzZWQgdXAKLWluIHRlc3RzLiAgSWYgeW91J3JlIGxvb2tpbmcgZm9yIGEgcm9sZSBtb2RlbCB0byBiYXNlIHlvdXIgb3duIHBsdWctaW4gb24sCi1oZXJlIGl0IGlzLgotCi1JZiB5b3UgZmluZCBhIHBsb3QgaG9sZSBvciBhIGJhZGx5IGxpcC1zeW5jZWQgbGluZSBvZiBjb2RlIGluIHRoZW0sCi1sZXQgdXMga25vdyAtIGl0IGlzIGEgbWF0dGVyIG9mIGhvbm91ciBmb3IgdXMgdG8gZW5zdXJlIEJsb25kaWUgZG9lc24ndCBsb29rCi1saWtlIGhlJ3MgYmVlbiB3YWxraW5nIDEwMCBtaWxlcyB0aHJvdWdoIHRoZSBkZXNlcnQgd2l0aG91dCB3YXRlci4KLQotICBUSEUgVUdMWQotCi0gIC0tLSAiV2hlbiB5b3UgaGF2ZSB0byBzaG9vdCwgc2hvb3QuICBEb24ndCB0YWxrLiIKLQotVGhlcmUgYXJlIHRpbWVzIHdoZW4gdGhlIHdvcmxkIG5lZWRzIGEgY29sb3IgYmV0d2VlbiBibGFjayBhbmQgd2hpdGUuCi1RdWFsaXR5IGNvZGUgdG8gbWF0Y2ggdGhlIGdvb2QncywgYnV0IHR3by10aW1pbmcsIGJhY2tzdGFiYmluZyBhbmQgcmVhZHkgdG8KLXNlbGwgeW91ciBmcmVlZG9tIGRvd24gdGhlIHJpdmVyLiAgVGhlc2UgcGx1Zy1pbnMgbWlnaHQgaGF2ZSBhIHBhdGVudCBub29zZQotYXJvdW5kIHRoZWlyIG5lY2ssIG9yIGEgbG9jay11cCBsaWNlbnNlLCBvciBhbnkgb3RoZXIgcHJvYmxlbSB0aGF0IG1ha2VzIHlvdQotdGhpbmsgdHdpY2UgYWJvdXQgc2hpcHBpbmcgdGhlbS4KLQotV2UgZG9uJ3QgY2FsbCB0aGVtIHVnbHkgYmVjYXVzZSB3ZSBsaWtlIHRoZW0gbGVzcy4gIERvZXMgYSBtb3RoZXIgbG92ZSBoZXIKLXNvbiBsZXNzIGJlY2F1c2UgaGUncyBub3QgYXMgcHJldHR5IGFzIHRoZSBvdGhlciBvbmVzID8gTm8gIC0gc2hlIGNvbW1lbmRzCi1oaW0gb24gaGlzIGdyZWF0IHBlcnNvbmFsaXR5LiAgVGhlc2UgcGx1Zy1pbnMgYXJlIHRoZSBsaWZlIG9mIHRoZSBwYXJ0eS4KLUFuZCB3ZSdsbCBzdGlsbCBzdGVwIGluIGFuZCBzZXQgdGhlbSBzdHJhaWdodCBpZiB5b3UgcmVwb3J0IGFueSB1bmFjY2VwdGFibGUKLWJlaGF2aW91ciAtIGJlY2F1c2UgdGhlcmUgYXJlIHR3byBraW5kcyBvZiBwZW9wbGUgaW4gdGhlIHdvcmxkLCBteSBmcmllbmQ6Ci10aG9zZSB3aXRoIGEgcm9wZSBhcm91bmQgdGhlaXIgbmVjayBhbmQgdGhlIHBlb3BsZSB3aG8gZG8gdGhlIGN1dHRpbmcuCi0KLSAgVEhFIEJBRAotCi0gIC0tLSAiVGhhdCBhbiBhY2N1c2F0aW9uPyIKLQotTm8gcGVyZmVjdGx5IGdyb29tZWQgbW91c3RhY2hlIG9yIGFueSBhbW91bnQgb2YgZmluZSBjbG90aGluZyBpcyBnb2luZyB0bwotY292ZXIgdXAgdGhlIHRydXRoIC0gdGhlc2UgcGx1Zy1pbnMgYXJlIEJhZCB3aXRoIGEgY2FwaXRhbCBCLiAKLVRoZXkgbG9vayBmaW5lIG9uIHRoZSBvdXRzaWRlLCBhbmQgbWlnaHQgZXZlbiBhcHBlYXIgdG8gZ2V0IHRoZSBqb2IgZG9uZSwgYnV0Ci1hdCB0aGUgZW5kIG9mIHRoZSBkYXkgdGhleSdyZSBhIGJsYWNrIHNoZWVwLiBXaXRob3V0IGEgZ29sZGVuLWhhaXJlZCBhbmdlbAotdG8gd2F0Y2ggb3ZlciB0aGVtLCB0aGV5J2xsIHByb2JhYmx5IGxhbmQgaW4gYW4gdW5tYXJrZWQgZ3JhdmUgYXQgdGhlIGZpbmFsCi1zaG93ZG93bi4KLQotRG9uJ3QgYnVnIHVzIGFib3V0IHRoZWlyIHF1YWxpdHkgLSBleGVyY2lzZSB5b3VyIEZyZWUgU29mdHdhcmUgcmlnaHRzLAotcGF0Y2ggdXAgdGhlIG9mZmVuZGVyIGFuZCBzZW5kIHVzIHRoZSBwYXRjaCBvbiB0aGUgZmFzdGVzdCBzdGVlZCB5b3UgY2FuCi1zdGVhbCBmcm9tIHRoZSBDb25mZWRlcmF0ZXMuIEJlY2F1c2UgeW91IHNlZSwgaW4gdGhpcyB3b3JsZCwgdGhlcmUncyB0d28KLWtpbmRzIG9mIHBlb3BsZSwgbXkgZnJpZW5kOiB0aG9zZSB3aXRoIGxvYWRlZCBndW5zIGFuZCB0aG9zZSB3aG8gZGlnLgotWW91IGRpZy4KLQotVGhlIExvd2Rvd24KLS0tLS0tLS0tLS0tCi0KLSAgLS0tICJJJ3ZlIG5ldmVyIHNlZW4gc28gbWFueSBwbHVnLWlucyB3YXN0ZWQgc28gYmFkbHkuIgotCi1HU3RyZWFtZXIgUGx1Zy1pbnMgaGFzIGdyb3duIHNvIGJpZyB0aGF0IGl0J3MgaGFyZCB0byBzZXBhcmF0ZSB0aGUgd2hlYXQgZnJvbQotdGhlIGNoYWZmLiAgQWxzbywgZGlzdHJpYnV0b3JzIGhhdmUgYnJvdWdodCB1cCBpc3N1ZXMgYWJvdXQgdGhlIGxlZ2FsIHN0YXR1cwotb2Ygc29tZSBvZiB0aGUgcGx1Zy1pbnMgd2Ugc2hpcC4gIFRvIHJlbWVkeSB0aGlzLCB3ZSd2ZSBkaXZpZGVkIHRoZSBwcmV2aW91cwotc2V0IG9mIGF2YWlsYWJsZSBwbHVnLWlucyBpbnRvIGZvdXIgbW9kdWxlczoKLQotLSBnc3QtcGx1Z2lucy1iYXNlOiBhIHNtYWxsIGFuZCBmaXhlZCBzZXQgb2YgcGx1Zy1pbnMsIGNvdmVyaW5nIGEgd2lkZSByYW5nZQotICBvZiBwb3NzaWJsZSB0eXBlcyBvZiBlbGVtZW50czsgdGhlc2UgYXJlIGNvbnRpbnVvdXNseSBrZXB0IHVwLXRvLWRhdGUKLSAgd2l0aCBhbnkgY29yZSBjaGFuZ2VzIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgc2VyaWVzLgotCi0gIC0gV2UgYmVsaWV2ZSBkaXN0cmlidXRvcnMgY2FuIHNhZmVseSBzaGlwIHRoZXNlIHBsdWctaW5zLgotICAtIFBlb3BsZSB3cml0aW5nIGVsZW1lbnRzIHNob3VsZCBiYXNlIHRoZWlyIGNvZGUgb24gdGhlc2UgZWxlbWVudHMuCi0gIC0gVGhlc2UgZWxlbWVudHMgY29tZSB3aXRoIGV4YW1wbGVzLCBkb2N1bWVudGF0aW9uLCBhbmQgcmVncmVzc2lvbiB0ZXN0cy4KLQotLSBnc3QtcGx1Z2lucy1nb29kOiBhIHNldCBvZiBwbHVnLWlucyB0aGF0IHdlIGNvbnNpZGVyIHRvIGhhdmUgZ29vZCBxdWFsaXR5Ci0gIGNvZGUsIGNvcnJlY3QgZnVuY3Rpb25hbGl0eSwgb3VyIHByZWZlcnJlZCBsaWNlbnNlIChMR1BMIGZvciB0aGUgcGx1Zy1pbgotICBjb2RlLCBMR1BMIG9yIExHUEwtY29tcGF0aWJsZSBmb3IgdGhlIHN1cHBvcnRpbmcgbGlicmFyeSkuCi0KLSAgLSBXZSBiZWxpZXZlIGRpc3RyaWJ1dG9ycyBjYW4gc2FmZWx5IHNoaXAgdGhlc2UgcGx1Zy1pbnMuCi0gIC0gUGVvcGxlIHdyaXRpbmcgZWxlbWVudHMgc2hvdWxkIGJhc2UgdGhlaXIgY29kZSBvbiB0aGVzZSBlbGVtZW50cy4KLSAKLS0gZ3N0LXBsdWdpbnMtdWdseTogYSBzZXQgb2YgcGx1Zy1pbnMgdGhhdCBoYXZlIGdvb2QgcXVhbGl0eSBhbmQgY29ycmVjdAotICBmdW5jdGlvbmFsaXR5LCBidXQgZGlzdHJpYnV0aW5nIHRoZW0gbWlnaHQgcG9zZSBwcm9ibGVtcy4gIFRoZSBsaWNlbnNlCi0gIG9uIGVpdGhlciB0aGUgcGx1Zy1pbnMgb3IgdGhlIHN1cHBvcnRpbmcgbGlicmFyaWVzIG1pZ2h0IG5vdCBiZSBob3cgd2UnZAotICBsaWtlLiBUaGUgY29kZSBtaWdodCBiZSB3aWRlbHkga25vd24gdG8gcHJlc2VudCBwYXRlbnQgcHJvYmxlbXMuCi0KLSAgLSBEaXN0cmlidXRvcnMgc2hvdWxkIGNoZWNrIGlmIHRoZXkgd2FudC9jYW4gc2hpcCB0aGVzZSBwbHVnLWlucy4KLSAgLSBQZW9wbGUgd3JpdGluZyBlbGVtZW50cyBzaG91bGQgYmFzZSB0aGVpciBjb2RlIG9uIHRoZXNlIGVsZW1lbnRzLgotCi0tIGdzdC1wbHVnaW5zLWJhZDogYSBzZXQgb2YgcGx1Zy1pbnMgdGhhdCBhcmVuJ3QgdXAgdG8gcGFyIGNvbXBhcmVkIHRvIHRoZQotICByZXN0LiAgVGhleSBtaWdodCBiZSBjbG9zZSB0byBiZWluZyBnb29kIHF1YWxpdHksIGJ1dCB0aGV5J3JlIG1pc3NpbmcKLSAgc29tZXRoaW5nIC0gYmUgaXQgYSBnb29kIGNvZGUgcmV2aWV3LCBzb21lIGRvY3VtZW50YXRpb24sIGEgc2V0IG9mIHRlc3RzLAotICBhIHJlYWwgbGl2ZSBtYWludGFpbmVyLCBvciBzb21lIGFjdHVhbCB3aWRlIHVzZS4KLSAgSWYgdGhlIGJsYW5rcyBhcmUgZmlsbGVkIGluIHRoZXkgbWlnaHQgYmUgdXBncmFkZWQgdG8gYmVjb21lIHBhcnQgb2YKLSAgZWl0aGVyIGdzdC1wbHVnaW5zLWdvb2Qgb3IgZ3N0LXBsdWdpbnMtdWdseSwgZGVwZW5kaW5nIG9uIHRoZSBvdGhlciBmYWN0b3JzLgotCi0gIC0gSWYgdGhlIHBsdWctaW5zIGJyZWFrLCB5b3UgY2FuJ3QgY29tcGxhaW4gLSBpbnN0ZWFkLCB5b3UgY2FuIGZpeCB0aGUKLSAgICBwcm9ibGVtIGFuZCBzZW5kIHVzIGEgcGF0Y2gsIG9yIGJyaWJlIHNvbWVvbmUgaW50byBmaXhpbmcgdGhlbSBmb3IgeW91LgotICAtIE5ldyBjb250cmlidXRvcnMgY2FuIHN0YXJ0IGhlcmUgZm9yIHRoaW5ncyB0byB3b3JrIG9uLgotCi1QTEFURk9STVMKLS0tLS0tLS0tLQotCi0tIExpbnV4IGlzIG9mIGNvdXJzZSBmdWxseSBzdXBwb3J0ZWQKLS0gRnJlZUJTRCBpcyByZXBvcnRlZCB0byB3b3JrOyBvdGhlciBCU0RzIHNob3VsZCB3b3JrIHRvbwotLSBTb2xhcmlzIGlzIHJlcG9ydGVkIHRvIHdvcms7IGEgc3BlY2lmaWMgc3VuYXVkaW9zaW5rIHBsdWdpbiBoYXMgYmVlbiB3cml0dGVuCi0tIE1hY09TWCB3b3JrcywgYmluYXJ5IDEueCBwYWNrYWdlcyBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlIGNlcmJlcm8gYnVpbGQgdG9vbAotLSBXaW5kb3dzIHdvcmtzOyBiaW5hcnkgMS54IHBhY2thZ2VzIGNhbiBiZSBidWlsdCB1c2luZyB0aGUgY2VyYmVybyBidWlsZCB0b29sCi0gIC0gTVN5cy9NaW5HVyBidWlsZHMKLSAgLSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBidWlsZHMgYXJlIG5vdCB5ZXQgYXZhaWxhYmxlIG9yIHN1cHBvcnRlZAotLSBBbmRyb2lkIHdvcmtzLCBiaW5hcnkgMS54IHBhY2thZ2VzIGNhbiBiZSBidWlsdCB1c2luZyB0aGUgY2VyYmVybyBidWlsZCB0b29sCi0tIGlPUyB3b3JrcwotCi1JTlNUQUxMSU5HIEZST00gUEFDS0FHRVMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Zb3Ugc2hvdWxkIGFsd2F5cyBwcmVmZXIgaW5zdGFsbGluZyBmcm9tIHBhY2thZ2VzIGZpcnN0LiAgR1N0cmVhbWVyIGlzCi13ZWxsLW1haW50YWluZWQgZm9yIGEgbnVtYmVyIG9mIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZyBGZWRvcmEsIERlYmlhbiwKLVVidW50dSwgTWFuZHJha2UsIEdlbnRvbywgLi4uCi0KLU9ubHkgaW4gY2FzZXMgd2hlcmUgeW91OgotLSB3YW50IHRvIGhhY2sgb24gR1N0cmVhbWVyCi0tIHdhbnQgdG8gdmVyaWZ5IHRoYXQgYSBidWcgaGFzIGJlZW4gZml4ZWQKLS0gZG8gbm90IGhhdmUgYSBzYW5lIGRpc3RyaWJ1dGlvbgotc2hvdWxkIHlvdSBjaG9vc2UgdG8gYnVpbGQgZnJvbSBzb3VyY2UgdGFyYmFsbHMgb3IgZ2l0LgotCi1GaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlvdXMgcGFja2FnZXMgYXQKLWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLwotCi1DT01QSUxJTkcgRlJPTSBTT1VSQ0UgVEFSQkFMTFMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIGFnYWluLCBtYWtlIHN1cmUgdGhhdCB5b3UgcmVhbGx5IG5lZWQgdG8gaW5zdGFsbCBmcm9tIHNvdXJjZSAhCi0gIElmIEdTdHJlYW1lciBpcyBvbmUgb2YgeW91ciBmaXJzdCBwcm9qZWN0cyBldmVyIHRoYXQgeW91IGJ1aWxkIGZyb20gc291cmNlLAotICBjb25zaWRlciB0YWtpbmcgb24gYW4gZWFzaWVyIHByb2plY3QuCi0KLS0gY2hlY2sgb3V0cHV0IG9mIC4vY29uZmlndXJlIC0taGVscCB0byBzZWUgaWYgYW55IG9wdGlvbnMgYXBwbHkgdG8geW91Ci0tIHJ1bgotICAuL2NvbmZpZ3VyZQotICBtYWtlCi0KLSAgdG8gYnVpbGQgR1N0cmVhbWVyLgotLSBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIGl0IChub3QgcmVxdWlyZWQsIGJ1dCB3aGF0IHlvdSB1c3VhbGx5IHdhbnQgdG8gZG8pLCBydW4KLSAgbWFrZSBpbnN0YWxsCi0KLS0gdHJ5IG91dCBhIHNpbXBsZSB0ZXN0OgotICBnc3QtbGF1bmNoIC12IGZha2VzcmMgbnVtX2J1ZmZlcnM9NSAhIGZha2VzaW5rCi0gIChJZiB5b3UgZGlkbid0IGluc3RhbGwgR1N0cmVhbWVyLCBwcmVmaXggZ3N0LWxhdW5jaCB3aXRoIHRvb2xzLykKLQotICBJZiBpdCBvdXRwdXRzIGEgYnVuY2ggb2YgbWVzc2FnZXMgZnJvbSBmYWtlc3JjIGFuZCBmYWtlc2luaywgZXZlcnl0aGluZyBpcwotICBvay4KLQotICBJZiBpdCBkaWQgbm90IHdvcmssIGtlZXAgaW4gbWluZCB0aGF0IHlvdSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGUKLSAgUEFUSCBhbmQvb3IgTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBtYWtlIHRoZSBzeXN0ZW0KLSAgZmluZCBHU3RyZWFtZXIgaW4gdGhlIHByZWZpeCB3aGVyZSB5b3UgaW5zdGFsbGVkIChieSBkZWZhdWx0IHRoYXQgaXMgL3Vzci9sb2NhbCkuCi0KLS0gQWZ0ZXIgdGhpcywgeW91J3JlIHJlYWR5IHRvIGluc3RhbGwgZ3N0LXBsdWdpbnMsIHdoaWNoIHdpbGwgcHJvdmlkZSB0aGUKLSAgZnVuY3Rpb25hbGl0eSB5b3UncmUgcHJvYmFibHkgbG9va2luZyBmb3IgYnkgbm93LCBzbyBnbyBvbiBhbmQgcmVhZAotICB0aGF0IFJFQURNRS4KLQotQ09NUElMSU5HIEZST00gR0lUCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hlbiBidWlsZGluZyBmcm9tIGdpdCBzb3VyY2VzLCB5b3Ugd2lsbCBuZWVkIHRvIHJ1biBhdXRvZ2VuLnNoIHRvIGdlbmVyYXRlCi10aGUgYnVpbGQgc3lzdGVtIGZpbGVzLgotCi1Zb3Ugd2lsbCBuZWVkIGEgc2V0IG9mIGFkZGl0aW9uYWwgdG9vbHMgdHlwaWNhbCBmb3IgYnVpbGRpbmcgZnJvbSBnaXQsCi1pbmNsdWRpbmc6Ci0tIGF1dG9jb25mCi0tIGF1dG9tYWtlCi0tIGxpYnRvb2wKLQotYXV0b2dlbi5zaCB3aWxsIGNoZWNrIGZvciByZWNlbnQgZW5vdWdoIHZlcnNpb25zIGFuZCBjb21wbGFpbiBpZiB5b3UgZG9uJ3QgaGF2ZQotdGhlbS4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHNwZWNpZmljIHZlcnNpb25zIG9mIGF1dG9tYWtlIGFuZCBhdXRvY29uZiB3aXRoCi0tLXdpdGgtYXV0b21ha2UgYW5kIC0td2l0aC1hdXRvY29uZgotCi1DaGVjayBhdXRvZ2VuLnNoIG9wdGlvbnMgYnkgcnVubmluZyBhdXRvZ2VuLnNoIC0taGVscAotCi1hdXRvZ2VuLnNoIGNhbiBwYXNzIG9uIGFyZ3VtZW50cyB0byBjb25maWd1cmUKLQotV2hlbiB5b3UgaGF2ZSBkb25lIHRoaXMgb25jZSwgeW91IGNhbiB1c2UgYXV0b3JlZ2VuLnNoIHRvIHJlLWF1dG9nZW4gd2l0aAotdGhlIGxhc3QgcGFzc2VkIG9wdGlvbnMgYXMgYSBoYW5keSBzaG9ydGN1dC4gIFVzZSBpdC4KLQotQWZ0ZXIgdGhlIGF1dG9nZW4uc2ggc3RhZ2UsIHlvdSBjYW4gZm9sbG93IHRoZSBkaXJlY3Rpb25zIGxpc3RlZCBpbgotIkNPTVBJTElORyBGUk9NIFNPVVJDRSIKLQotWW91IGNhbiBhbHNvIHJ1biB5b3VyIHdob2xlIGdpdCBzdGFjayB1bmluc3RhbGxlZCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5LAotc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkgdGVzdCBjaGFuZ2VzIHdpdGhvdXQgYWZmZWN0aW5nIHlvdXIgc3lzdGVtIHNldHVwIG9yCi1pbnRlcmZlcmluZyB3aXRoIEdTdHJlYW1lciBpbnN0YWxsZWQgZnJvbSBwYWNrYWdlcy4gIE1hbnkgR1N0cmVhbWVyIGRldmVsb3BlcnMKLXVzZSBhbiB1bmluc3RhbGxlZCBzZXR1cCBmb3IgdGhlaXIgd29yay4KLQotVGhlcmUgaXMgYSAnY3JlYXRlLXVuaW5zdGFsbGVkLXNldHVwLnNoJyBzY3JpcHQgaW4KLQotICBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdHJlYW1lci90cmVlL3NjcmlwdHMvCi0KLXRvIGVhc2lseSBjcmVhdGUgYW4gdW5pbnN0YWxsZWQgc2V0dXAgZnJvbSBzY3JhdGNoLgotCi0KLVBMVUctSU4gREVQRU5ERU5DSUVTIEFORCBMSUNFTlNFUwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUdTdHJlYW1lciBpcyBkZXZlbG9wZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMR1BMIChzZWUgTElDRU5TRSBmaWxlIGZvcgotZGV0YWlscykuIFNvbWUgb2Ygb3VyIHBsdWctaW5zIGhvd2V2ZXIgcmVseSBvbiBsaWJyYXJpZXMgd2hpY2ggYXJlIGF2YWlsYWJsZQotdW5kZXIgb3RoZXIgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgYXJlIGRpc3RyaWJ1dGluZyBhbiBhcHBsaWNhdGlvbgotd2hpY2ggaGFzIGEgbm9uLUdQTCBjb21wYXRpYmxlIGxpY2Vuc2UgKGZvciBpbnN0YW5jZSBhIGNsb3NlZC1zb3VyY2UKLWFwcGxpY2F0aW9uKSB3aXRoIEdTdHJlYW1lciwgeW91IGhhdmUgdG8gbWFrZSBzdXJlIG5vdCB0byBkaXN0cmlidXRlIEdQTC1saW5rZWQKLXBsdWctaW5zLgotCi1XaGVuIHVzaW5nIEdQTC1saW5rZWQgcGx1Zy1pbnMsIEdTdHJlYW1lciBpcyBmb3IgYWxsIHByYWN0aWNhbCByZWFzb25zCi11bmRlciB0aGUgR1BMIGl0c2VsZi4KLQotSElTVE9SWQotLS0tLS0tLQotCi1UaGUgZnVuZGFtZW50YWwgZGVzaWduIGNvbWVzIGZyb20gdGhlIHZpZGVvIHBpcGVsaW5lIGF0IE9yZWdvbiBHcmFkdWF0ZQotSW5zdGl0dXRlLCBhcyB3ZWxsIGFzIHNvbWUgaWRlYXMgZnJvbSBEaXJlY3RNZWRpYS4gIEl0J3MgYmFzZWQgb24gcGx1Zy1pbnMgdGhhdAotd2lsbCBwcm92aWRlIHRoZSB2YXJpb3VzIGNvZGVjIGFuZCBvdGhlciBmdW5jdGlvbmFsaXR5LiAgVGhlIGludGVyZmFjZQotaG9wZWZ1bGx5IGlzIGdlbmVyaWMgZW5vdWdoIGZvciB2YXJpb3VzIGNvbXBhbmllcyAoYWhlbSwgQXBwbGUpIHRvIHJlbGVhc2UKLWJpbmFyeSBjb2RlY3MgZm9yIExpbnV4LCB1bnRpbCBzdWNoIHRpbWUgYXMgdGhleSBnZXQgYSBjbHVlIGFuZCByZWxlYXNlIHRoZQotc291cmNlLgpkaWZmIC0tZ2l0IGEvY29tbW9uL2MtdG8teG1sLnB5IGIvY29tbW9uL2MtdG8teG1sLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTdhMzViLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9jLXRvLXhtbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMgLSotIE1vZGU6IFB5dGhvbiAtKi0KLSMgdmk6c2k6ZXQ6c3c9NDpzdHM9NDp0cz00Ci0KLSIiIgotQ29udmVydCBhIEMgcHJvZ3JhbSB0byB2YWxpZCBYTUwgdG8gYmUgaW5jbHVkZWQgaW4gZG9jYm9vawotIiIiCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24sIHVuaWNvZGVfbGl0ZXJhbHMKLQotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi1mcm9tIHhtbC5zYXggaW1wb3J0IHNheHV0aWxzCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQbGVhc2Ugc3BlY2lmeSBhIHNvdXJjZSBmaWxlIHRvIGNvbnZlcnQiKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgIHNvdXJjZSA9IHN5cy5hcmd2WzFdCi0KLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc291cmNlKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXMgZG9lcyBub3QgZXhpc3QuXG4iICUgc291cmNlKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgY29udGVudCA9IG9wZW4oc291cmNlLCAiciIpLnJlYWQoKQotCi0gICAgIyBwcmludCBoZWFkZXIKLSAgICBwcmludCAoJzw/eG1sIHZlcnNpb249IjEuMCI/PicpCi0gICAgcHJpbnQgKCc8IURPQ1RZUEUgcmVmZW50cnkgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCI+JykKLSAgICBwcmludCAoKQotICAgIHByaW50ICgnPHByb2dyYW1saXN0aW5nPicpCi0KLSAgICAjIHByaW50IGNvbnRlbnQKLSAgICBwcmludCAoc2F4dXRpbHMuZXNjYXBlKGNvbnRlbnQpKQotICAgIHByaW50ICgnPC9wcm9ncmFtbGlzdGluZz4nKQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL2NvbW1vbi9jaGVjay1leHBvcnRzIGIvY29tbW9uL2NoZWNrLWV4cG9ydHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGVlMDFmZjcuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2NoZWNrLWV4cG9ydHMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jIS9iaW4vc2gKLSMgY2hlY2stZXhwb3J0cwotIwotIyBxdWljayduJ2RpcnR5IHNjcmlwdCB0aGF0IHJldHJpZXZlcyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIG9mIGEgZ2l2ZW4KLSMgbGlicmFyeSB1c2luZyAnbm0nLCBhbmQgY29tcGFyZXMgdGhhdCBhZ2FpbnN0IHRoZSBsaXN0IG9mIHN5bWJvbHMtdG8tZXhwb3J0Ci0jIG9mIG91ciB3aW4zMi9jb21tb24vbGliZm9vLmRlZiBmaWxlcy4KLQotaWYgWyAkIyAtbmUgMiBdOyB0aGVuCi0JZWNobyAiVXNhZ2U6ICQwIGxpYnJhcnkuZGVmIGxpYnJhcnkuc28iCi0JZXhpdCAxCi1maQotCi1kZWZfcGF0aD0iJDEiCi1kZWZfbmFtZT0iJChiYXNlbmFtZSAkZGVmX3BhdGgpIgotbGliX3BhdGg9IiQyIgotCi1saWJfcmVzdWx0PSJgbWt0ZW1wIC90bXAvZGVmbmFtZS5YWFhYWFhgIgotCi1MQ19BTEw9QwotZXhwb3J0IExDX0FMTAotCi0jIE9uIFNvbGFyaXMsIGFkZCAtcCB0byBnZXQgdGhlIGNvcnJlY3Qgb3V0cHV0IGZvcm1hdAotTk1BUkdTPQotaWYgbm0gLVYgMj4mMSB8Z3JlcCBTb2xhcmlzID4gL2Rldi9udWxsOyB0aGVuCi0gIE5NQVJHUz0tcAotZmkKLQotIyBfZW5kIGlzIHNwZWNpYWwgY2FzZWQgYmVjYXVzZSBmb3Igc29tZSByZWFzb24gaXQgaXMgcmVwb3J0ZWQgYXMgYW4gZXhwb3J0ZWQKLSMgQlNTIHN5bWJvbCwgdW5saWtlIG9uIGxpbnV4IHdoZXJlIGl0J3MgYSBsb2NhbCBhYnNvbHV0ZSBzeW1ib2wuCi1ubSAkTk1BUkdTICRsaWJfcGF0aCB8IGF3ayBcCi0JJ3sKLQkJaWYgKCQzIH4gL15bX10/KGdzdF98R3N0fEdTVF8pLiovKQotCQl7Ci0JCQlpZiAoJDIgfiAvXltCU0RHXSQvKQotCQkJCXByaW50ICJcdCIgJDMgIiBEQVRBIgotCQkJZWxzZSBpZiAoJDIgPT0gIlQiKQotCQkJCXByaW50ICJcdCIgJDMKLQkJfQotCSB9JyB8IHNvcnQgfCBhd2sgJ3sgaWYgKE5SID09IDEpIHByaW50ICJFWFBPUlRTIjsgcHJpbnQgJDA7IH0nIFwKLQk+ICRsaWJfcmVzdWx0Ci0KLWRpZmZvdXRwdXQ9YGRpZmYgLXUgJGRlZl9wYXRoICRsaWJfcmVzdWx0YAotZGlmZnJlc3VsdD0kPwotCi1ybSAkbGliX3Jlc3VsdAotCi1pZiB0ZXN0ICIkZGlmZnJlc3VsdCIgLWVxIDA7IHRoZW4KLSAgZXhpdCAwOwotZWxzZQotICBlY2hvIC1uICIkZGlmZm91dHB1dCIgPiYyCi0gIGVjaG8gPiYyCi0gIGV4aXQgMTsKLWZpCi0KZGlmZiAtLWdpdCBhL2NvbW1vbi9jaGVjay5tYWsgYi9jb21tb24vY2hlY2subWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjQ5N2ZmLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9jaGVjay5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotIyBrZWVwIHRhcmdldCBhcm91bmQsIHNpbmNlIGl0J3MgcmVmZXJlbmNlZCBpbiB0aGUgbW9kdWxlcycgTWFrZWZpbGVzCi1jbGVhbi1sb2NhbC1jaGVjazoKLQlAZWNobwotCi1pZiBIQVZFX1ZBTEdSSU5ECi0jIGhhbmdzIHNwZWN0YWN1bGFybHkgb24gc29tZSBtYWNoaW5lcywgc28gbGV0J3Mgbm90IGRvIHRoaXMgYnkgZGVmYXVsdCB5ZXQKLWNoZWNrLXZhbGdyaW5kOgotCSQoTUFLRSkgdmFsZ3JpbmQKLWVsc2UKLWNoZWNrLXZhbGdyaW5kOgotCUB0cnVlCi1lbmRpZgotCi1MT09QUyA/PSAxMAotQU1fVEVTVFNfRU5WSVJPTk1FTlQgPSBDS19ERUZBVUxUX1RJTUVPVVQ9MjAKLQotIyBydW4gYW55IGdpdmVuIHRlc3QgYnkgcnVubmluZyBtYWtlIHRlc3QuY2hlY2sKLSMgaWYgdGhlIHRlc3QgZmFpbHMsIHJ1biBpdCBhZ2FpbiBhdCBhdCBsZWFzdCBkZWJ1ZyBsZXZlbCAyCi0lLmNoZWNrOiAlCi0JQCQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JJCogfHwJCQkJCQkJXAotCSQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JR1NUX0RFQlVHPSQkR1NUX0RFQlVHLCo6MgkJCQlcCi0JJCoKLQotIyBqdXN0IGxpa2UgJ2NoZWNrJywgYnV0IGRvbid0IHJ1biBpdCBhZ2FpbiBpZiBpdCBmYWlscyAodXNlZnVsIGZvciBkZWJ1Z2dpbmcpCi0lLmNoZWNrLW5vcmVwZWF0OiAlCi0JQCQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JJCoKLQotIyBydW4gYW55IGdpdmVuIHRlc3QgaW4gYSBsb29wCi0lLnRvcnR1cmU6ICUKLQlAZm9yIGkgaW4gYHNlcSAxICQoTE9PUFMpYDsgZG8JCQkJXAotCSQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JJCo7IGRvbmUKLQotIyBydW4gYW55IGdpdmVuIHRlc3QgaW4gYW4gaW5maW5pdGUgbG9vcAotJS5mb3JldmVyOiAlCi0JQHdoaWxlIHRydWU7IGRvCQkJCQkJXAotCSQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JJCogfHwgYnJlYWs7IGRvbmUKLQotIyB2YWxncmluZCBhbnkgZ2l2ZW4gdGVzdCBieSBydW5uaW5nIG1ha2UgdGVzdC52YWxncmluZAotJS52YWxncmluZDogJQotCUB2YWxncmluZF9sb2c9JChzdWJzdCAvLC0sJCotdmFsZ3JpbmQubG9nKTsJCVwKLQkkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCUNLX0RFRkFVTFRfVElNRU9VVD0zNjAJCQkJCVwKLQlHX1NMSUNFPWFsd2F5cy1tYWxsb2MJCQkJCVwKLQkkKExJQlRPT0wpIC0tbW9kZT1leGVjdXRlCQkJCVwKLQkkKFZBTEdSSU5EX1BBVEgpIC1xCQkJCQlcCi0JJChmb3JlYWNoIHMsJChTVVBQUkVTU0lPTlMpLC0tc3VwcHJlc3Npb25zPSQocykpCVwKLQktLXRvb2w9bWVtY2hlY2sgLS1sZWFrLWNoZWNrPWZ1bGwgLS10cmFjZS1jaGlsZHJlbj15ZXMJXAotCS0tc2hvdy1wb3NzaWJseS1sb3N0PW5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCS0tbGVhay1yZXNvbHV0aW9uPWhpZ2ggLS1udW0tY2FsbGVycz0yMAkJCVwKLQkuLyQqIDI+JjEgfCB0ZWUgJCR2YWxncmluZF9sb2cgOwkJCVwKLQlpZiBncmVwICJePT0iICQkdmFsZ3JpbmRfbG9nID4gL2Rldi9udWxsIDI+JjE7IHRoZW4JXAotCSAgICBybSAkJHZhbGdyaW5kX2xvZzsJCQkJCVwKLQkgICAgZXhpdCAxOwkJCQkJCVwKLQlmaSA7CQkJCQkJCVwKLQlybSAkJHZhbGdyaW5kX2xvZwotCi0jIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IGFuZCBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMgZm9yIGl0Ci0lLnZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnM6ICUKLQlAJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQlDS19ERUZBVUxUX1RJTUVPVVQ9MzYwCQkJCQlcCi0JR19TTElDRT1hbHdheXMtbWFsbG9jCQkJCQlcCi0JJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQkJCQlcCi0JJChWQUxHUklORF9QQVRIKSAtcSAJCQkJCVwKLQkkKGZvcmVhY2ggcywkKFNVUFBSRVNTSU9OUyksLS1zdXBwcmVzc2lvbnM9JChzKSkJXAotCS0tdG9vbD1tZW1jaGVjayAtLWxlYWstY2hlY2s9ZnVsbCAtLXRyYWNlLWNoaWxkcmVuPXllcwlcCi0JLS1zaG93LXBvc3NpYmx5LWxvc3Q9bm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JLS1sZWFrLXJlc29sdXRpb249aGlnaCAtLW51bS1jYWxsZXJzPTIwCQkJXAotCS0tZ2VuLXN1cHByZXNzaW9ucz1hbGwJCQkJCVwKLQkuLyQqIDI+JjEgfCB0ZWUgc3VwcHJlc3Npb25zLmxvZwotCi0jIHZhbGdyaW5kIHRvcnR1cmUgYW55IGdpdmVuIHRlc3QKLSUudmFsZ3JpbmQtdG9ydHVyZTogJQotCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCi0JCSQoTUFLRSkgJCoudmFsZ3JpbmQgfHwJCQkJXAotCQkoZWNobyAiRmFpbHVyZSBhZnRlciAkJGkgcnVucyI7IGV4aXQgMSkgfHwJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQlAYmFubmVyPSJBbGwgJChMT09QUykgbG9vcHMgcGFzc2VkIjsJCQlcCi0JZGFzaGVzPWBlY2hvICIkJGJhbm5lciIgfCBzZWQgcy8uLz0vZ2A7CQkJXAotCWVjaG8gJCRkYXNoZXM7IGVjaG8gJCRiYW5uZXI7IGVjaG8gJCRkYXNoZXMKLQotIyB2YWxncmluZCBhbnkgZ2l2ZW4gdGVzdCB1bnRpbCBmYWlsdXJlIGJ5IHJ1bm5pbmcgbWFrZSB0ZXN0LnZhbGdyaW5kLWZvcmV2ZXIKLSUudmFsZ3JpbmQtZm9yZXZlcjogJQotCUB3aGlsZSAkKE1BS0UpICQqLnZhbGdyaW5kOyBkbwkJCQlcCi0JICB0cnVlOyBkb25lCi0KLSMgZ2RiIGFueSBnaXZlbiB0ZXN0IGJ5IHJ1bm5pbmcgbWFrZSB0ZXN0LmdkYgotJS5nZGI6ICUKLQlAJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQlDS19GT1JLPW5vCQkJCQkJXAotCSQoTElCVE9PTCkgLS1tb2RlPWV4ZWN1dGUJCQkJXAotCWdkYiAkKgotCi0lLmxjb3YtcmVzZXQ6Ci0JJChNQUtFKSAkKi5sY292LXJ1bgotCSQoTUFLRSkgJCoubGNvdi1yZXBvcnQKLQotJS5sY292OiAlCi0JJChNQUtFKSAkKi5sY292LXJlc2V0Ci0KLWlmIEdTVF9HQ09WX0VOQUJMRUQKLSUubGNvdi1jbGVhbjoKLQkkKE1BS0UpIC1DICQodG9wX2J1aWxkZGlyKSBsY292LWNsZWFuCi0KLSUubGNvdi1ydW46Ci0JJChNQUtFKSAkKi5sY292LWNsZWFuCi0JJChNQUtFKSAkKi5jaGVjawotCi0lLmxjb3YtcmVwb3J0OgotCSQoTUFLRSkgLUMgJCh0b3BfYnVpbGRkaXIpIGxjb3YtcmVwb3J0Ci1lbHNlCi0lLmxjb3YtcnVuOgotCWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgotCi0lLmxjb3YtcmVwb3J0OgotCWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgotZW5kaWYKLQotIyB0b3J0dXJlIHRlc3RzCi10b3J0dXJlOiAkKFRFU1RTKQotCS1ybSB0ZXN0LXJlZ2lzdHJ5LioKLQlAZWNobyAiVG9ydHVyaW5nIHRlc3RzIC4uLiIKLQlAZm9yIGkgaW4gYHNlcSAxICQoTE9PUFMpYDsgZG8JCQkJXAotCQkkKE1BS0UpIGNoZWNrIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUgYWZ0ZXIgJCRpIHJ1bnMiOyBleGl0IDEpIHx8CVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0JQGJhbm5lcj0iQWxsICQoTE9PUFMpIGxvb3BzIHBhc3NlZCI7CQkJXAotCWRhc2hlcz1gZWNobyAiJCRiYW5uZXIiIHwgc2VkIHMvLi89L2dgOwkJCVwKLQllY2hvICQkZGFzaGVzOyBlY2hvICQkYmFubmVyOyBlY2hvICQkZGFzaGVzCi0KLSMgZm9yZXZlciB0ZXN0cwotZm9yZXZlcjogJChURVNUUykKLQktcm0gdGVzdC1yZWdpc3RyeS4qCi0JQGVjaG8gIkZvcmV2ZXIgdGVzdHMgLi4uIgotCUB3aGlsZSB0cnVlOyBkbwkJCQkJCVwKLQkJJChNQUtFKSBjaGVjayB8fAkJCQlcCi0JCShlY2hvICJGYWlsdXJlIjsgZXhpdCAxKSB8fAkJCVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0KLSMgdmFsZ3JpbmQgYWxsIHRlc3RzCi12YWxncmluZDogJChURVNUUykKLQlAZWNobyAiVmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgotCUBmYWlsZWQ9MDsgdmFsZ3JpbmRfdGFyZ2V0cz0iIjsJCQkJCVwKLQlmb3IgdCBpbiAkKGZpbHRlci1vdXQgJChWQUxHUklORF9URVNUU19ESVNBQkxFKSwkKFRFU1RTKSk7IGRvCVwKLQkgIHZhbGdyaW5kX3RhcmdldHM9IiQkdmFsZ3JpbmRfdGFyZ2V0cyAkJHQudmFsZ3JpbmQiOwkJXAotCWRvbmU7CQkJCQkJCQlcCi0JaWYgISAkKE1BS0UpICQkdmFsZ3JpbmRfdGFyZ2V0cyA7IHRoZW4JCQkJXAotCSAgZWNobyAiU29tZSB0ZXN0cyBoYWQgbGVha3Mgb3IgZXJyb3JzIHVuZGVyIHZhbGdyaW5kIjsJCVwKLQkgIGZhbHNlOwkJCQkJCQlcCi0JZmkKLQotIyB2YWxncmluZCBhbGwgdGVzdHMgdW50aWwgZmFpbHVyZQotdmFsZ3JpbmQtZm9yZXZlcjogJChURVNUUykKLQktcm0gdGVzdC1yZWdpc3RyeS4qCi0JQGVjaG8gIkZvcmV2ZXIgdmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgotCUB3aGlsZSB0cnVlOyBkbwkJCQkJCVwKLQkJJChNQUtFKSB2YWxncmluZCB8fAkJCQlcCi0JCShlY2hvICJGYWlsdXJlIjsgZXhpdCAxKSB8fAkJCVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0KLSMgdmFsZ3JpbmQgdG9ydHVyZSBhbGwgdGVzdHMKLXZhbGdyaW5kLXRvcnR1cmU6ICQoVEVTVFMpCi0JLXJtIHRlc3QtcmVnaXN0cnkuKgotCUBlY2hvICJUb3J0dXJpbmcgYW5kIHZhbGdyaW5kaW5nIHRlc3RzIC4uLiIKLQlAZm9yIGkgaW4gYHNlcSAxICQoTE9PUFMpYDsgZG8JCQkJXAotCQkkKE1BS0UpIHZhbGdyaW5kIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUgYWZ0ZXIgJCRpIHJ1bnMiOyBleGl0IDEpIHx8CVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0JQGJhbm5lcj0iQWxsICQoTE9PUFMpIGxvb3BzIHBhc3NlZCI7CQkJXAotCWRhc2hlcz1gZWNobyAiJCRiYW5uZXIiIHwgc2VkIHMvLi89L2dgOwkJCVwKLQllY2hvICQkZGFzaGVzOyBlY2hvICQkYmFubmVyOyBlY2hvICQkZGFzaGVzCi0KLSMgdmFsZ3JpbmQgYWxsIHRlc3RzIGFuZCBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMKLXZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnM6ICQoVEVTVFMpCi0JQGVjaG8gIlZhbGdyaW5kaW5nIHRlc3RzIC4uLiIKLQlAZmFpbGVkPTA7CQkJCQkJCVwKLQlmb3IgdCBpbiAkKGZpbHRlci1vdXQgJChWQUxHUklORF9URVNUU19ESVNBQkxFKSwkKFRFU1RTKSk7IGRvCVwKLQkJJChNQUtFKSAkJHQudmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9uczsJCQlcCi0JCWlmIHRlc3QgIiQkPyIgLW5lIDA7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZWNobyAiVmFsZ3JpbmQgZXJyb3IgZm9yIHRlc3QgJCR0IjsJCVwKLQkJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOwkJCVwKLQkJCXdoaWNodD0iJCR3aGljaHQgJCR0IjsJCQkJXAotCQlmaTsJCQkJCQkJXAotCWRvbmU7CQkJCQkJCQlcCi0JaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwOyB0aGVuCQkJCQlcCi0JCWVjaG8gIiQkZmFpbGVkIHRlc3RzIGhhZCBsZWFrcyBvciBlcnJvcnMgdW5kZXIgdmFsZ3JpbmQ6IjsJXAotCQllY2hvICIkJHdoaWNodCI7CQkJCQlcCi0JCWZhbHNlOwkJCQkJCQlcCi0JZmkKLQotIyBpbnNwZWN0IGV2ZXJ5IHBsdWdpbiBmZWF0dXJlCi1HU1RfSU5TUEVDVCA9ICQoR1NUX1RPT0xTX0RJUikvZ3N0LWluc3BlY3QtJChHU1RfQVBJX1ZFUlNJT04pCi1pbnNwZWN0OgotCUBlY2hvICJJbnNwZWN0aW5nIGZlYXR1cmVzIC4uLiIKLQlAZm9yIGUgaW4gYCQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpICQoR1NUX0lOU1BFQ1QpIHwgaGVhZCAtbiAtMiAJXAotCSAgfCBjdXQgLWQ6IC1mMmA7CQkJCQkJXAotCSAgZG8gZWNobyBJbnNwZWN0aW5nICQkZTsJCQkJCVwKLQkgICAgICQoR1NUX0lOU1BFQ1QpICQkZSA+IC9kZXYvbnVsbCAyPiYxOyBkb25lCi0KLSMgYnVpbGQgYWxsIHRlc3RzCi1idWlsZC1jaGVja3M6ICQoVEVTVFMpCi0KLWhlbHA6Ci0JQGVjaG8KLQlAZWNobyAibWFrZSBjaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAtLSBydW4gYWxsIGNoZWNrcyIKLQlAZWNobyAibWFrZSB0b3J0dXJlICAgICAgICAgICAgICAgICAgICAgICAtLSBydW4gYWxsIGNoZWNrcyAkKExPT1BTKSB0aW1lcyIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkuY2hlY2sgICAgICAgICAgICAtLSBydW4gdGhlIGdpdmVuIGNoZWNrIG9uY2UsIHJlcGVhdCB3aXRoIEdTVF9ERUJVRz0qOjIgaWYgaXQgZmFpbHMiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLmNoZWNrLW5vcmVwZWF0ICAgLS0gcnVuIHRoZSBnaXZlbiBjaGVjayBvbmNlLCBidXQgZG9uJ3QgcnVuIGl0IGFnYWluIGlmIGl0IGZhaWxzIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS5mb3JldmVyICAgICAgICAgIC0tIHJ1biB0aGUgZ2l2ZW4gY2hlY2sgZm9yZXZlciIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkudG9ydHVyZSAgICAgICAgICAtLSBydW4gdGhlIGdpdmVuIGNoZWNrICQoTE9PUFMpIHRpbWVzIgotCUBlY2hvCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLmdkYiAgICAgICAgICAgICAgLS0gc3RhcnQgdXAgZ2RiIGZvciB0aGUgZ2l2ZW4gdGVzdCIKLQlAZWNobwotCUBlY2hvICJtYWtlIHZhbGdyaW5kICAgICAgICAgICAgICAgICAgICAgIC0tIHZhbGdyaW5kIGFsbCB0ZXN0cyIKLQlAZWNobyAibWFrZSB2YWxncmluZC1mb3JldmVyICAgICAgICAgICAgICAtLSB2YWxncmluZCBhbGwgdGVzdHMgZm9yZXZlciIKLQlAZWNobyAibWFrZSB2YWxncmluZC10b3J0dXJlICAgICAgICAgICAgICAtLSB2YWxncmluZCBhbGwgdGVzdHMgJChMT09QUykgdGltZXMiCi0JQGVjaG8gIm1ha2UgdmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9ucyAgICAgLS0gZ2VuZXJhdGUgc3VwcHJlc3Npb25zIGZvciBhbGwgdGVzdHMiCi0JQGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNhdmUgdG8gc3VwcHJlc3Npb25zLmxvZyIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkudmFsZ3JpbmQgICAgICAgICAtLSB2YWxncmluZCB0aGUgZ2l2ZW4gdGVzdCIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkudmFsZ3JpbmQtZm9yZXZlciAtLSB2YWxncmluZCB0aGUgZ2l2ZW4gdGVzdCBmb3JldmVyIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZC10b3J0dXJlIC0tIHZhbGdyaW5kIHRoZSBnaXZlbiB0ZXN0ICQoTE9PUFMpIHRpbWVzIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZC5nZW4tc3VwcHJlc3Npb25zIC0tIGdlbmVyYXRlIHN1cHByZXNzaW9ucyIKLQlAZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2F2ZSB0byBzdXBwcmVzc2lvbnMubG9nIgotCUBlY2hvICJtYWtlIGluc3BlY3QgICAgICAgICAgICAgICAgICAgICAgIC0tIGluc3BlY3QgYWxsIHBsdWdpbiBmZWF0dXJlcyIKLQlAZWNobyAibWFrZSBidWlsZC1jaGVja3MgICAgICAgICAgICAgICAgICAtLSBidWlsZCBhbGwgY2hlY2tzIChidXQgZG9uJ3QgcnVuIHRoZW0pIgotCUBlY2hvCi0JQGVjaG8KLQlAZWNobyAiQWRkaXRpb25hbGx5LCB5b3UgY2FuIHVzZSB0aGUgR1NUX0NIRUNLUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byIKLQlAZWNobyAic3BlY2lmeSB3aGljaCB0ZXN0KHMpIHNob3VsZCBiZSBydW4uIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUiCi0JQGVjaG8gImRlYnVnZ2luZyBhIGZhaWx1cmUgaW4gb25lIHBhcnRpY3VsYXIgdGVzdCwgb3Igd2FudCB0byByZXByb2R1Y2UiCi0JQGVjaG8gImEgcmFjZSBjb25kaXRpb24gaW4gYSBzaW5nbGUgdGVzdC4iCi0JQGVjaG8KLQlAZWNobyAiRXhhbXBsZXM6IgotCUBlY2hvCi0JQGVjaG8gIiAgR1NUX0NIRUNLUz10ZXN0X3RoaXMsdGVzdF90aGF0ICBtYWtlIGVsZW1lbnQvZm9vYmFyLmNoZWNrIgotCUBlY2hvICIgIEdTVF9DSEVDS1M9dGVzdF9tYW55X3RocmVhZHMgICAgbWFrZSBlbGVtZW50L2Zvb2Jhci5mb3JldmVyIgotCUBlY2hvCi0KZGlmZiAtLWdpdCBhL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQtZW50cnkucGwgYi9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LWVudHJ5LnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDAzNmIzLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQtZW50cnkucGwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA2IERhbmllbCBCZXJyYW5nZQotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotCi0KLXByaW50IDw8RU9GOwotPGh0bWw+Ci08aGVhZD4KLTx0aXRsZT5Db3ZlcmFnZSByZXBvcnQgZm9yICRBUkdWWzBdPC90aXRsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci0gICAgICAgICAgc3Bhbi5wZXJmZWN0IHsKLSAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigwLDI1NSwwKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3Bhbi50ZXJyaWJsZSB7Ci0gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LDAsMCk7Ci0gICAgICAgICAgfQotPC9zdHlsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPkNvdmVyYWdlIHJlcG9ydCBmb3IgJEFSR1ZbMF08L2gxPgotCi08cHJlPgotRU9GCi0KLQotd2hpbGUgKDw+KSB7Ci0gICAgcy8mLyZhbXA7L2c7Ci0gICAgcy88LyZsdDsvZzsKLSAgICBzLz4vJmd0Oy9nOwotCi0gICAgaWYgKC9eXHMqZnVuY3Rpb24gKFxTKykgY2FsbGVkIChcZCspIHJldHVybmVkIFxkKyUgYmxvY2tzIGV4ZWN1dGVkIFxkKyUvKSB7Ci0JbXkgJGNsYXNzID0gJDIgPiAwID8gInBlcmZlY3QiIDogInRlcnJpYmxlIjsKLQkkXyA9ICI8c3BhbiBjbGFzcz1cIiRjbGFzc1wiIGlkPVwiIiAuICQxIC4gIlwiPiRfPC9zcGFuPiI7Ci0gICAgfSBlbHNpZiAoL15ccypicmFuY2hccytcZCtccyt0YWtlblxzKyhcZCspJVxzKy4qJC8pIHsKLQlteSAkY2xhc3MgPSAkMSA+IDAgPyAicGVyZmVjdCIgOiAidGVycmlibGUiOwotCSRfID0gIjxzcGFuIGNsYXNzPVwiJGNsYXNzXCI+JF88L3NwYW4+IjsKLSAgICB9IGVsc2lmICgvXlxzKmJyYW5jaFxzK1xkK1xzK25ldmVyIGV4ZWN1dGVkLiokLykgewotCW15ICRjbGFzcyA9ICJ0ZXJyaWJsZSI7Ci0JJF8gPSAiPHNwYW4gY2xhc3M9XCIkY2xhc3NcIj4kXzwvc3Bhbj4iOwotICAgIH0gZWxzaWYgKC9eXHMqY2FsbFxzK1xkK1xzK25ldmVyIGV4ZWN1dGVkLiokLykgewotCW15ICRjbGFzcyA9ICJ0ZXJyaWJsZSI7Ci0JJF8gPSAiPHNwYW4gY2xhc3M9XCIkY2xhc3NcIj4kXzwvc3Bhbj4iOwotICAgIH0gZWxzaWYgKC9eXHMqY2FsbFxzK1xkK1xzK3JldHVybmVkXHMrKFxkKyklLiokLykgewotCW15ICRjbGFzcyA9ICQxID4gMCA/ICJwZXJmZWN0IiA6ICJ0ZXJyaWJsZSI7Ci0JJF8gPSAiPHNwYW4gY2xhc3M9XCIkY2xhc3NcIj4kXzwvc3Bhbj4iOwotICAgIH0KLQotICAgIHByaW50OwotfQotCi1wcmludCA8PEVPRjsKLTwvcHJlPgotPC9ib2R5PgotPC9odG1sPgotRU9GCmRpZmYgLS1naXQgYS9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsIGIvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiZDZmMS4uMDAwMDAwMAotLS0gYS9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDYgRGFuaWVsIEJlcnJhbmdlCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0KLXVzZSB3YXJuaW5nczsKLXVzZSBzdHJpY3Q7Ci0KLW15ICVjb3ZlcmFnZSA9ICggZnVuY3Rpb25zID0+IHt9LCBmaWxlcyA9PiB7fSApOwotCi1teSAlZmlsZW1hcDsKLQotbXkgJHR5cGU7Ci1teSAkbmFtZTsKLQotbXkgQGZ1bmN0aW9uczsKLQotd2hpbGUgKDw+KSB7Ci0gICAgaWYgKC9eRnVuY3Rpb24gJyguKiknXHMqJC8pIHsKLQkkdHlwZSA9ICJmdW5jdGlvbiI7Ci0JJG5hbWUgPSAkMTsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9ID0ge307Ci0JcHVzaCBAZnVuY3Rpb25zLCAkbmFtZTsKLSAgICB9IGVsc2lmICgvXkZpbGUgJyguKj8pJ1xzKiQvKSB7Ci0JJHR5cGUgPSAiZmlsZSI7Ci0JJG5hbWUgPSAkMTsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9ID0ge307Ci0KLQlmb3JlYWNoIG15ICRmdW5jIChAZnVuY3Rpb25zKSB7Ci0JICAgICRjb3ZlcmFnZXsiZnVuY3Rpb24ifS0+eyRmdW5jfS0+e2ZpbGV9ID0gJG5hbWU7Ci0JfQotCUBmdW5jdGlvbnMgPSAoKTsKLSAgICB9IGVsc2lmICgvXkxpbmVzIGV4ZWN1dGVkOiguKiklXHMqb2ZccyooXGQrKVxzKiQvKSB7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2xpbmVzfSA9ICQyOwotCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0tPntsaW5lc0NvdmVyYWdlfSA9ICQxOwotICAgIH0gZWxzaWYgKC9eQnJhbmNoZXMgZXhlY3V0ZWQ6KC4qKSVccypvZlxzKihcZCspXHMqJC8pIHsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57YnJhbmNoZXN9ID0gJDI7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2JyYW5jaGVzQ292ZXJhZ2V9ID0gJDE7Ci0gICAgfSBlbHNpZiAoL15UYWtlbiBhdCBsZWFzdCBvbmNlOiguKiklXHMqb2ZccyooXGQrKVxzKiQvKSB7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2NvbmRzfSA9ICQyOwotCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0tPntjb25kc0NvdmVyYWdlfSA9ICQxOwotICAgIH0gZWxzaWYgKC9eQ2FsbHMgZXhlY3V0ZWQ6KC4qKSVccypvZlxzKihcZCspXHMqJC8pIHsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y2FsbHN9ID0gJDI7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2NhbGxzQ292ZXJhZ2V9ID0gJDE7Ci0gICAgfSBlbHNpZiAoL15ObyBicmFuY2hlcyQvKSB7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2JyYW5jaGVzfSA9IDA7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2JyYW5jaGVzQ292ZXJhZ2V9ID0gIjEwMC4wMCI7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2NvbmRzfSA9IDA7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2NvbmRzQ292ZXJhZ2V9ID0gIjEwMC4wMCI7Ci0gICAgfSBlbHNpZiAoL15ObyBjYWxscyQvKSB7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2NhbGxzfSA9IDA7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2NhbGxzQ292ZXJhZ2V9ID0gIjEwMC4wMCI7Ci0gICAgfSBlbHNpZiAoL15ccyooLiopOmNyZWF0aW5nICcoLiopJ1xzKiQvKSB7Ci0JJGZpbGVtYXB7JDF9ID0gJDI7Ci0gICAgfSBlbHNpZiAoL15ccyokLykgewotCSMgbmFkYQotICAgIH0gZWxzZSB7Ci0Jd2FybiAiU2hpdCBbJF9dXG4iOwotICAgIH0KLX0KLQotbXkgJXN1bW1hcnk7Ci1mb3JlYWNoIG15ICR0eXBlICgiZnVuY3Rpb24iLCAiZmlsZSIpIHsKLSAgICAkc3VtbWFyeXskdHlwZX0gPSB7fTsKLSAgICBmb3JlYWNoIG15ICRtICgibGluZXMiLCAiYnJhbmNoZXMiLCAiY29uZHMiLCAiY2FsbHMiKSB7Ci0JbXkgJHRvdGFsR290ID0gMDsKLQlteSAkdG90YWxNaXNzID0gMDsKLQlteSAkY291bnQgPSAwOwotCWZvcmVhY2ggbXkgJGZ1bmMgKGtleXMgJXskY292ZXJhZ2V7ZnVuY3Rpb259fSkgewotCSAgICAkY291bnQrKzsKLQkgICAgbXkgJGdvdCA9ICRjb3ZlcmFnZXtmdW5jdGlvbn0tPnskZnVuY30tPnskbX07Ci0JICAgICR0b3RhbEdvdCArPSAkZ290OwotCSAgICBteSAkbWlzcyA9ICRnb3QgKiAkY292ZXJhZ2V7ZnVuY3Rpb259LT57JGZ1bmN9LT57JG0gLiJDb3ZlcmFnZSJ9IC8gMTAwOwotCSAgICAkdG90YWxNaXNzICs9ICRtaXNzOwotCX0KLQkkc3VtbWFyeXskdHlwZX0tPnskbX0gPSBzcHJpbnRmKCIlZCIsICR0b3RhbEdvdCk7Ci0JJHN1bW1hcnl7JHR5cGV9LT57JG0gLiAiQ292ZXJhZ2UifSA9IHNwcmludGYoIiUuMmYiLCAkdG90YWxNaXNzIC8gJHRvdGFsR290ICogMTAwKTsKLSAgICB9Ci19Ci0KLQotCi1wcmludCAiPGNvdmVyYWdlPlxuIjsKLQotZm9yZWFjaCBteSAkdHlwZSAoImZ1bmN0aW9uIiwgImZpbGUiKSB7Ci0gICAgcHJpbnRmICI8JXNzPlxuIiwgJHR5cGU7Ci0gICAgZm9yZWFjaCBteSAkbmFtZSAoc29ydCB7ICRhIGNtcCAkYiB9IGtleXMgJXskY292ZXJhZ2V7JHR5cGV9fSkgewotCW15ICRyZWMgPSAkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9OwotCXByaW50ZiAiICA8ZW50cnkgbmFtZT1cIiVzXCIgZGV0YWlscz1cIiVzXCI+XG4iLCAkbmFtZSwgKCR0eXBlIGVxICJmaWxlIiA/ICRmaWxlbWFweyRuYW1lfSA6ICRmaWxlbWFweyRyZWMtPntmaWxlfX0pOwotCXByaW50ZiAiICAgIDxsaW5lcyBjb3VudD1cIiVzXCIgY292ZXJhZ2U9XCIlc1wiLz5cbiIsICRyZWMtPntsaW5lc30sICRyZWMtPntsaW5lc0NvdmVyYWdlfTsKLQlpZiAoZXhpc3RzICRyZWMtPnticmFuY2hlc30pIHsKLQkgICAgcHJpbnRmICIgICAgPGJyYW5jaGVzIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHJlYy0+e2JyYW5jaGVzfSwgJHJlYy0+e2JyYW5jaGVzQ292ZXJhZ2V9OwotCX0KLQlpZiAoZXhpc3RzICRyZWMtPntjb25kc30pIHsKLQkgICAgcHJpbnRmICIgICAgPGNvbmRpdGlvbnMgY291bnQ9XCIlc1wiIGNvdmVyYWdlPVwiJXNcIi8+XG4iLCAkcmVjLT57Y29uZHN9LCAkcmVjLT57Y29uZHNDb3ZlcmFnZX07Ci0JfQotCWlmIChleGlzdHMgJHJlYy0+e2NhbGxzfSkgewotCSAgICBwcmludGYgIiAgICA8Y2FsbHMgY291bnQ9XCIlc1wiIGNvdmVyYWdlPVwiJXNcIi8+XG4iLCAkcmVjLT57Y2FsbHN9LCAkcmVjLT57Y2FsbHNDb3ZlcmFnZX07Ci0JfQotCXByaW50ICAiICA8L2VudHJ5PlxuIjsKLSAgICB9Ci0KLSAgICBwcmludGYgIiAgPHN1bW1hcnk+XG4iOwotICAgIHByaW50ZiAiICAgIDxsaW5lcyBjb3VudD1cIiVzXCIgY292ZXJhZ2U9XCIlc1wiLz5cbiIsICRzdW1tYXJ5eyR0eXBlfS0+e2xpbmVzfSwgJHN1bW1hcnl7JHR5cGV9LT57bGluZXNDb3ZlcmFnZX07Ci0gICAgcHJpbnRmICIgICAgPGJyYW5jaGVzIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHN1bW1hcnl7JHR5cGV9LT57YnJhbmNoZXN9LCAkc3VtbWFyeXskdHlwZX0tPnticmFuY2hlc0NvdmVyYWdlfTsKLSAgICBwcmludGYgIiAgICA8Y29uZGl0aW9ucyBjb3VudD1cIiVzXCIgY292ZXJhZ2U9XCIlc1wiLz5cbiIsICRzdW1tYXJ5eyR0eXBlfS0+e2NvbmRzfSwgJHN1bW1hcnl7JHR5cGV9LT57Y29uZHNDb3ZlcmFnZX07Ci0gICAgcHJpbnRmICIgICAgPGNhbGxzIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHN1bW1hcnl7JHR5cGV9LT57Y2FsbHN9LCAkc3VtbWFyeXskdHlwZX0tPntjYWxsc0NvdmVyYWdlfTsKLSAgICBwcmludGYgICIgIDwvc3VtbWFyeT5cbiI7Ci0gICAgcHJpbnRmICI8LyVzcz5cbiIsICR0eXBlOwotfQotCi1wcmludCAiPC9jb3ZlcmFnZT5cbiI7CmRpZmYgLS1naXQgYS9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnhzbCBiL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmUxMjRiLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQotPCEtLQ0KLSMNCi0jIENvcHlyaWdodCAoQykgMjAwNiBEYW5pZWwgQmVycmFuZ2UNCi0jDQotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCi0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KLSMNCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQotIw0KLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQ0KLS0tPg0KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCi0gICAgICAgICAgICAgICAgdmVyc2lvbj0iMS4wIj4NCi0NCi0gIDx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIvPg0KLQ0KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY292ZXJhZ2UiPg0KLSAgICA8aHRtbD4NCi0gICAgICA8aGVhZD4NCi0gICAgICAgIDx0aXRsZT5Db3ZlcmFnZSByZXBvcnQ8L3RpdGxlPg0KLSAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi0gICAgICAgICAgdGJvZHkgdHIub2RkIHRkLmxhYmVsIHsNCi0gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiKDEyOCwxMjgsMTI4KTsNCi0gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyOCwxMjgsMTI4KTsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgICB0Ym9keSB0ci5vZGQgdGQubGFiZWwgew0KLSAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDAsMjAwLDIwMCk7DQotICAgICAgICAgIH0NCi0gICAgICAgICAgDQotICAgICAgICAgIHRoZWFkLCB0Zm9vdCB7DQotICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDYwLDYwLDYwKTsNCi0gICAgICAgICAgICBjb2xvcjogd2hpdGU7DQotICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQotICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgdHIgdGQucGVyZmVjdCB7DQotICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsMjU1LDApOw0KLSAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgICB0ciB0ZC5leGNlbGxhbnQgew0KLSAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigxNDAsMjU1LDE0MCk7DQotICAgICAgICAgICAgY29sb3I6IGJsYWNrOw0KLSAgICAgICAgICB9DQotICAgICAgICAgIHRyIHRkLmdvb2Qgew0KLSAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigxNjAsMjU1LDApOw0KLSAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgICB0ciB0ZC5wb29yIHsNCi0gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LDE2MCwwKTsNCi0gICAgICAgICAgICBjb2xvcjogYmxhY2s7DQotICAgICAgICAgIH0NCi0gICAgICAgICAgdHIgdGQuYmFkIHsNCi0gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LDE0MCwxNDApOw0KLSAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgICB0ciB0ZC50ZXJyaWJsZSB7DQotICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwwLDApOw0KLSAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgPC9zdHlsZT4NCi0gICAgICA8L2hlYWQ+DQotICAgICAgPGJvZHk+DQotICAgICAgICA8aDE+Q292ZXJhZ2UgcmVwb3J0PC9oMT4NCi0gICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCi0gICAgICA8L2JvZHk+DQotICAgIDwvaHRtbD4NCi0gIDwveHNsOnRlbXBsYXRlPg0KLQ0KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZnVuY3Rpb25zIj4NCi0gICAgPGgyPkZ1bmN0aW9uIGNvdmVyYWdlPC9oMj4NCi0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbnRlbnQiPg0KLSAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0eXBlIiBzZWxlY3Q9IidmdW5jdGlvbiciLz4NCi0gICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4NCi0gIDwveHNsOnRlbXBsYXRlPg0KLSAgDQotDQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWxlcyI+DQotICAgIDxoMj5GaWxlIGNvdmVyYWdlPC9oMj4NCi0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbnRlbnQiPg0KLSAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0eXBlIiBzZWxlY3Q9IidmaWxlJyIvPg0KLSAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KLSAgPC94c2w6dGVtcGxhdGU+DQotDQotICA8eHNsOnRlbXBsYXRlIG5hbWU9ImNvbnRlbnQiPg0KLSAgICA8eHNsOnBhcmFtIG5hbWU9InR5cGUiLz4NCi0gICAgPHRhYmxlPg0KLSAgICAgIDx0aGVhZD4NCi0gICAgICAgIDx0cj4NCi0gICAgICAgICAgPHRoPk5hbWU8L3RoPg0KLSAgICAgICAgICA8dGg+TGluZXM8L3RoPg0KLSAgICAgICAgICA8dGg+QnJhbmNoZXM8L3RoPg0KLSAgICAgICAgICA8dGg+Q29uZGl0aW9uczwvdGg+DQotICAgICAgICAgIDx0aD5DYWxsczwvdGg+DQotICAgICAgICA8L3RyPg0KLSAgICAgIDwvdGhlYWQ+DQotICAgICAgPHRib2R5Pg0KLSAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImVudHJ5Ij4NCi0gICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImVudHJ5Ij4NCi0gICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idHlwZSIgc2VsZWN0PSIkdHlwZSIvPg0KLSAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjbGFzcyI+DQotICAgICAgICAgICAgICA8eHNsOmNob29zZT4NCi0gICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9InBvc2l0aW9uKCkgbW9kIDIiPg0KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD5vZGQ8L3hzbDp0ZXh0Pg0KLSAgICAgICAgICAgICAgICA8L3hzbDp3aGVuPg0KLSAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4NCi0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+ZXZlbjwveHNsOnRleHQ+DQotICAgICAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4NCi0gICAgICAgICAgICAgIDwveHNsOmNob29zZT4NCi0gICAgICAgICAgICA8L3hzbDp3aXRoLXBhcmFtPg0KLSAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KLSAgICAgICAgPC94c2w6Zm9yLWVhY2g+DQotICAgICAgPC90Ym9keT4NCi0gICAgICA8dGZvb3Q+DQotICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0ic3VtbWFyeSI+DQotICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJlbnRyeSI+DQotICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InR5cGUiIHNlbGVjdD0iJ3N1bW1hcnknIi8+DQotICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNsYXNzIj4NCi0gICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPg0KLSAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0icG9zaXRpb24oKSBtb2QgMiI+DQotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pm9kZDwveHNsOnRleHQ+DQotICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQotICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD5ldmVuPC94c2w6dGV4dD4NCi0gICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KLSAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KLSAgICAgICAgICAgIDwveHNsOndpdGgtcGFyYW0+DQotICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+DQotICAgICAgICA8L3hzbDpmb3ItZWFjaD4NCi0gICAgICA8L3Rmb290Pg0KLSAgICA8L3RhYmxlPg0KLSAgPC94c2w6dGVtcGxhdGU+DQotICANCi0gIDx4c2w6dGVtcGxhdGUgbmFtZT0iZW50cnkiPg0KLSAgICA8eHNsOnBhcmFtIG5hbWU9InR5cGUiLz4NCi0gICAgPHhzbDpwYXJhbSBuYW1lPSJjbGFzcyIvPg0KLSAgICA8dHIgY2xhc3M9InskY2xhc3N9Ij4NCi0gICAgICA8eHNsOmNob29zZT4NCi0gICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkdHlwZSA9ICdmdW5jdGlvbiciPg0KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48YSBocmVmPSJ7QGRldGFpbHN9Lmh0bWwje0BuYW1lfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPjwvdGQ+DQotICAgICAgICA8L3hzbDp3aGVuPg0KLSAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiR0eXBlID0gJ2ZpbGUnIj4NCi0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGEgaHJlZj0ie0BkZXRhaWxzfS5odG1sIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2E+PC90ZD4NCi0gICAgICAgIDwveHNsOndoZW4+DQotICAgICAgICA8eHNsOm90aGVyd2lzZT4NCi0gICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+U3VtbWFyeTwvdGQ+DQotICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQotICAgICAgPC94c2w6Y2hvb3NlPg0KLQ0KLSAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQobGluZXMpIj4NCi0gICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibGluZXMiLz4NCi0gICAgICA8L3hzbDppZj4NCi0gICAgICA8eHNsOmlmIHRlc3Q9Im5vdChjb3VudChsaW5lcykpIj4NCi0gICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtaXNzaW5nIi8+DQotICAgICAgPC94c2w6aWY+DQotDQotICAgICAgPHhzbDppZiB0ZXN0PSJjb3VudChicmFuY2hlcykiPg0KLSAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJicmFuY2hlcyIvPg0KLSAgICAgIDwveHNsOmlmPg0KLSAgICAgIDx4c2w6aWYgdGVzdD0ibm90KGNvdW50KGJyYW5jaGVzKSkiPg0KLSAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1pc3NpbmciLz4NCi0gICAgICA8L3hzbDppZj4NCi0NCi0gICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KGNvbmRpdGlvbnMpIj4NCi0gICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29uZGl0aW9ucyIvPg0KLSAgICAgIDwveHNsOmlmPg0KLSAgICAgIDx4c2w6aWYgdGVzdD0ibm90KGNvdW50KGNvbmRpdGlvbnMpKSI+DQotICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibWlzc2luZyIvPg0KLSAgICAgIDwveHNsOmlmPg0KLQ0KLSAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoY2FsbHMpIj4NCi0gICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY2FsbHMiLz4NCi0gICAgICA8L3hzbDppZj4NCi0gICAgICA8eHNsOmlmIHRlc3Q9Im5vdChjb3VudChjYWxscykpIj4NCi0gICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtaXNzaW5nIi8+DQotICAgICAgPC94c2w6aWY+DQotDQotICAgIDwvdHI+DQotICA8L3hzbDp0ZW1wbGF0ZT4NCi0gIA0KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGluZXMiPg0KLSAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icm93Ii8+DQotICA8L3hzbDp0ZW1wbGF0ZT4NCi0NCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImJyYW5jaGVzIj4NCi0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJvdyIvPg0KLSAgPC94c2w6dGVtcGxhdGU+DQotDQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb25kaXRpb25zIj4NCi0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJvdyIvPg0KLSAgPC94c2w6dGVtcGxhdGU+DQotDQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjYWxscyI+DQotICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyb3ciLz4NCi0gIDwveHNsOnRlbXBsYXRlPg0KLQ0KLSAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJtaXNzaW5nIj4NCi0gICAgPHRkPjwvdGQ+DQotICA8L3hzbDp0ZW1wbGF0ZT4NCi0NCi0gIDx4c2w6dGVtcGxhdGUgbmFtZT0icm93Ij4NCi0gICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJxdWFsaXR5Ij4NCi0gICAgICA8eHNsOmNob29zZT4NCi0gICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAY292ZXJhZ2UgPSAxMDAiPg0KLSAgICAgICAgICA8eHNsOnRleHQ+cGVyZmVjdDwveHNsOnRleHQ+DQotICAgICAgICA8L3hzbDp3aGVuPg0KLSAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBjb3ZlcmFnZSA+PSA4MC4wIj4NCi0gICAgICAgICAgPHhzbDp0ZXh0PmV4Y2VsbGFudDwveHNsOnRleHQ+DQotICAgICAgICA8L3hzbDp3aGVuPg0KLSAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBjb3ZlcmFnZSA+PSA2MC4wIj4NCi0gICAgICAgICAgPHhzbDp0ZXh0Pmdvb2Q8L3hzbDp0ZXh0Pg0KLSAgICAgICAgPC94c2w6d2hlbj4NCi0gICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAY292ZXJhZ2UgPj0gNDAuMCI+DQotICAgICAgICAgIDx4c2w6dGV4dD5wb29yPC94c2w6dGV4dD4NCi0gICAgICAgIDwveHNsOndoZW4+DQotICAgICAgICA8eHNsOndoZW4gdGVzdD0iQGNvdmVyYWdlID49IDIwLjAiPg0KLSAgICAgICAgICA8eHNsOnRleHQ+YmFkPC94c2w6dGV4dD4NCi0gICAgICAgIDwveHNsOndoZW4+DQotICAgICAgICA8eHNsOm90aGVyd2lzZT4NCi0gICAgICAgICAgPHhzbDp0ZXh0PnRlcnJpYmxlPC94c2w6dGV4dD4NCi0gICAgICAgIDwveHNsOm90aGVyd2lzZT4NCi0gICAgICA8L3hzbDpjaG9vc2U+DQotICAgIDwveHNsOnZhcmlhYmxlPg0KLSAgICANCi0gICAgPHRkIGNsYXNzPSJ7JHF1YWxpdHl9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvdmVyYWdlIi8+JSBvZiA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvdW50Ii8+PC90ZD4NCi0gIDwveHNsOnRlbXBsYXRlPg0KLQ0KLTwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NvdmVyYWdlL2xjb3YubWFrIGIvY29tbW9uL2NvdmVyYWdlL2xjb3YubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDU3MjhhLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9jb3ZlcmFnZS9sY292Lm1haworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSMjIC5QSE9OWSBzbyBpdCBhbHdheXMgcmVidWlsZHMgaXQKLS5QSE9OWTogbGNvdi1yZXNldCBsY292IGxjb3YtcnVuIGxjb3YtcmVwb3J0IGxjb3YtdXBsb2FkIGxjb3YtY2xlYW4KLQotIyBydW4gbGNvdiBmcm9tIHNjcmF0Y2gsIGFsd2F5cwotbGNvdi1yZXNldDoKLQkkKE1BS0UpIGxjb3YtcnVuCi0JJChNQUtFKSBsY292LXJlcG9ydAotCi0jIHJ1biBsY292IGZyb20gc2NyYXRjaCBpZiB0aGUgZGlyIGlzIG5vdCB0aGVyZQotbGNvdjoKLQkkKE1BS0UpIGxjb3YtcmVzZXQKLQotaWYgR1NUX0dDT1ZfRU5BQkxFRAotIyByZXNldCBsY292IHN0YXRzCi1sY292LWNsZWFuOgotCUAtcm0gLXJmIGxjb3YKLQlsY292IC0tZGlyZWN0b3J5IC4gLS16ZXJvY291bnRlcnMKLQotIyByZXNldCBydW4gY292ZXJhZ2UgdGVzdHMKLWxjb3YtcnVuOgotCS0kKE1BS0UpIGxjb3YtY2xlYW4KLQktaWYgdGVzdCAtZCB0ZXN0cy9jaGVjazsgdGhlbiAkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIGluc3BlY3Q7IGZpCi0JLSQoTUFLRSkgY2hlY2sKLQotIyBnZW5lcmF0ZSByZXBvcnQgYmFzZWQgb24gY3VycmVudCBjb3ZlcmFnZSBkYXRhCi1sY292LXJlcG9ydDoKLQlta2RpciBsY292Ci0JbGNvdiAtLWNvbXBhdC1saWJ0b29sIC0tZGlyZWN0b3J5IC4gLS1jYXB0dXJlIC0tb3V0cHV0LWZpbGUgbGNvdi9sY292LmluZm8KLQlsY292IC0tbGlzdC1mdWxsLXBhdGggLWwgbGNvdi9sY292LmluZm8gfCBncmVwIC12ICJgY2QgJCh0b3Bfc3JjZGlyKSAmJiBwd2RgIiB8IGN1dCAtZFx8IC1mMSA+IGxjb3YvcmVtb3ZlCi0JbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAidGVzdHMvY2hlY2svIiB8IGN1dCAtZFx8IC1mMSA+PiBsY292L3JlbW92ZQotCWxjb3YgLS1saXN0LWZ1bGwtcGF0aCAtbCBsY292L2xjb3YuaW5mbyB8IGdyZXAgImRvY3MvcGx1Z2lucy8iIHwgY3V0IC1kXHwgLWYxID4+IGxjb3YvcmVtb3ZlCi0JbGNvdiAtciBsY292L2xjb3YuaW5mbyBgY2F0IGxjb3YvcmVtb3ZlYCA+IGxjb3YvbGNvdi5jbGVhbmVkLmluZm8KLQlybSBsY292L3JlbW92ZQotCW12IGxjb3YvbGNvdi5jbGVhbmVkLmluZm8gbGNvdi9sY292LmluZm8KLQlnZW5odG1sIC10ICIkKFBBQ0tBR0VfU1RSSU5HKSIgLW8gbGNvdiAtLW51bS1zcGFjZXMgMiBsY292L2xjb3YuaW5mbwotCi1sY292LXVwbG9hZDogbGNvdgotCXJzeW5jIC1ydnogLWUgc3NoIC0tZGVsZXRlIGxjb3YvKiBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnOi9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9jb3ZlcmFnZS9sY292LyQoUEFDS0FHRSkKLQotZWxzZQotbGNvdi1ydW46Ci0JZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCi0KLWxjb3YtcmVwb3J0OgotCWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgotZW5kaWYKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NydWZ0Lm1hayBiL2NvbW1vbi9jcnVmdC5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZWVjMjQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2NydWZ0Lm1haworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMgY2hlY2tzIGZvciBsZWZ0LW92ZXIgZmlsZXMgaW4gdGhlICh1c3VhbGx5IHVuaW5zdGFsbGVkKSB0cmVlLCBpZS4gZm9yCi0jIHN0dWZmIHRoYXQgYmVzdCBiZSBkZWxldGVkIHRvIGF2b2lkIHByb2JsZW1zIGxpa2UgaGF2aW5nIG9sZCBwbHVnaW4gYmluYXJpZXMKLSMgbHlpbmcgYXJvdW5kLgotIwotIyBzZXQgQ1JVRlRfRklMRVMgYW5kL29yIENSVUZUX0RJUlMgaW4geW91ciBNYWtlZmlsZS5hbSB3aGVuIHlvdSBpbmNsdWRlIHRoaXMKLQotY2hlY2stY3J1ZnQ6Ci0JQGNydWZ0X2ZpbGVzPSIiOyBjcnVmdF9kaXJzPSIiOyBcCi0JZm9yIGYgaW4gJChDUlVGVF9GSUxFUyk7IGRvIFwKLQkgIGlmIHRlc3QgLWUgJCRmOyB0aGVuIFwKLQkgICAgY3J1ZnRfZmlsZXM9IiQkY3J1ZnRfZmlsZXMgJCRmIjsgXAotCSAgZmkgXAotCWRvbmU7IFwKLQlmb3IgZCBpbiAkKENSVUZUX0RJUlMpOyBkbyBcCi0JICBpZiB0ZXN0IC1lICQkZDsgdGhlbiBcCi0JICAgIGNydWZ0X2RpcnM9IiQkY3J1ZnRfZGlycyAkJGQiOyBcCi0JICBmaSBcCi0JZG9uZTsgXAotCWlmIHRlc3QgIngkJGNydWZ0X2ZpbGVzJCRjcnVmdF9kaXJzIiAhPSB4OyB0aGVuIFwKLQkgIGVjaG87IFwKLQkgIGVjaG8gIioqKiogQ1JVRlQgQUxFUlQgKioqKioiOyBcCi0JICBlY2hvOyBcCi0JICBlY2hvICJUaGUgZm9sbG93aW5nIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBtYXkgbm90IGJlIG5lZWRlZCBhbnkgIjsgXAotCSAgZWNobyAibG9uZ2VyICh1c3VhbGx5IGJlY2F1c2UgYSBwbHVnaW4gaGFzIGJlZW4gbWVyZ2VkIGludG8gICAgICI7IFwKLQkgIGVjaG8gImFub3RoZXIgcGx1Z2luLCBtb3ZlZCB0byBhIGRpZmZlcmVudCBtb2R1bGUsIG9yIGJlZW4gICAgICAiOyBcCi0JICBlY2hvICJyZW5hbWVkKSwgYW5kIHlvdSBwcm9iYWJseSB3YW50IHRvIGNsZWFuIHRoZW0gdXAgaWYgeW91ICAgIjsgXAotCSAgZWNobyAiZG9uJ3QgaGF2ZSBsb2NhbCBjaGFuZ2VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7IFwKLQkgIGVjaG87IFwKLQkgIGZvciBmIGluICQkY3J1ZnRfZmlsZXM7IGRvIGVjaG8gImZpbGUgJCRmIjsgZG9uZTsgXAotCSAgZWNobzsgXAotCSAgZm9yIGQgaW4gJCRjcnVmdF9kaXJzOyBkbyBlY2hvICJkaXJlY3RvcnkgJCRkIjsgZG9uZTsgXAotCSAgZWNobzsgXAotCSAgZWNobyAiJ21ha2UgY2xlYW4tY3J1ZnQnIHdpbGwgcmVtb3ZlIHRoZXNlIGZvciB5b3UuIjsgXAotCSAgZWNobzsgXAotCWZpCi0KLWNsZWFuLWNydWZ0LWRpcnM6Ci0JQGZvciBkIGluICQoQ1JVRlRfRElSUyk7IGRvIFwKLQkgIGlmIHRlc3QgLWUgJCRkOyB0aGVuIFwKLQkgICAgcm0gLXIgIiQkZCIgJiYgZWNobyAiUmVtb3ZlZCBkaXJlY3RvcnkgJCRkIjsgXAotCSAgZmkgXAotCWRvbmUKLQotY2xlYW4tY3J1ZnQtZmlsZXM6Ci0JQGZvciBmIGluICQoQ1JVRlRfRklMRVMpOyBkbyBcCi0JICBpZiB0ZXN0IC1lICQkZjsgdGhlbiBcCi0JICAgIHJtICIkJGYiICYmIGVjaG8gIlJlbW92ZWQgZmlsZSAkJGYiOyBcCi0JICBmaSBcCi0JZG9uZQotCi1jbGVhbi1jcnVmdDogY2xlYW4tY3J1ZnQtZGlycyBjbGVhbi1jcnVmdC1maWxlcwotCi0jIGFsc28gbWlnaHQgd2FudCB0byBhZGQgdGhpcyB0byB5b3VyIE1ha2VmaWxlLmFtOgotIwotIyBhbGwtbG9jYWw6IGNoZWNrLWNydWZ0Ci0KZGlmZiAtLWdpdCBhL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMgYi9jb21tb24vZG93bmxvYWQtdHJhbnNsYXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhZWYxZDMxLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotIyEvYmluL3NoCi0jIFNoZWxsIHNjcmlwdCB0byBkb3dubG9hZCB0aGUgbGF0ZXN0IHRyYW5zbGF0aW9ucyBmb3IgYSBnaXZlbiBHU3RyZWFtZXIKLSMgcGFja2FnZSBmcm9tIHRyYW5zbGF0aW9ucHJvamVjdC5vcmcKLQotCi0jIERPTUFJTlMgYmFzZWQgb24gaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvZXh0cmEvbWF0cml4Lmh0bWwKLSMgV2UgbmVlZCB0byBjaGVjayBhbGwgZG9tYWlucywgbm90IG9ubHkgcG8vTElOR1VBUywgc2luY2UgdGhlcmUgbWlnaHQgYmUKLSMgbmV3IHRyYW5zbGF0aW9ucwotRE9NQUlOUz1cCi0iYWYgYW0gYXIgYXogYmUgYmcgcHRfQlIgYnMgY2EgemhfQ04gY3MgY3kgZGEgZGUgZWwgZW8gZXMgZXQgZXUgZmEgZmkgZnIgIlwKLSJnYSBlbl9HQiBnbCBndSBoZSBoaSB6aF9ISyBociBodSBpZCBpcyBpdCBqYSBrbyBrdSBreSBsZyBsdCBsdiBtayBtbiBtcyAiXAotIm10IG5iIG5lIG5sIG5uIG9yIHBhIHBsIHB0IHJtIHJvIHJ1IHJ3IHNrIHNsIHNxIHNyIHN2IHRhIHRxIHRoIHRrICJcCi0idHIgemhfVFcgdWsgdmVuIHZpIHdhIHhoIHp1IgotCi0jIGZvciB0ZXN0aW5nL2RlYnVnZ2luZzoKLSNET01BSU5TPSJlcyBmciBodSBzdiBwbCB4eCIKLQotIyBjaGVjayBmb3IgJ2RpZmYnIHByb2dyYW0KLWRpZmYgLS12ZXJzaW9uIDI+L2Rldi9udWxsID4vZGV2L251bGwKLWlmIFsgISAkPyBdOyB0aGVuCi0gIGVjaG8gIj09PT0gWW91IG11c3QgaGF2ZSB0aGUgJ2RpZmYnIHByb2dyYW0gaW5zdGFsbGVkIGZvciB0aGlzIHNjcmlwdCA9PT09IgotICBleGl0IDEKLWZpCi0KLSMgY2hlY2sgZm9yICd3Z2V0JyBwcm9ncmFtCi13Z2V0IC0tdmVyc2lvbiAyPi9kZXYvbnVsbCA+L2Rldi9udWxsCi1pZiBbICEgJD8gXTsgdGhlbgotICBlY2hvICI9PT09IFlvdSBtdXN0IGhhdmUgdGhlICd3Z2V0JyBwcm9ncmFtIGluc3RhbGxlZCBmb3IgdGhpcyBzY3JpcHQgPT09PSIKLSAgZXhpdCAxCi1maQotCi0jIG1ha2Ugc3VyZSB3ZSdyZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeQotaWYgWyAhIC1kIC4vcG8gXTsgdGhlbgotICBlY2hvICI9PT09IE5vIC4vcG8gZGlyZWN0b3J5IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ID09PT0iCi0gIGV4aXQgMQotZmkKLQotIyBtYWtlIHN1cmUgYSBwYWNrYWdlIGFyZ3VtZW50IHdhcyBwYXNzZWQgdG8gdXMKLWlmIFsgLXogIiQxIiBdOyB0aGVuCi0gIGVjaG8gIlVzYWdlOiAkMCBQQUNLQUdFLCBlLmcuICQwIGdzdC1wbHVnaW5zLWdvb2QiCi0gIGV4aXQgMQotZmkKLQotaWYgdGVzdCAiJDEiICE9ICJnc3RyZWFtZXIiIC1hIFwKLSAgICAgICAgIiQxIiAhPSAiZ3N0LXBsdWdpbnMtYmFzZSIgLWEgXAotICAgICAgICAiJDEiICE9ICJnc3QtcGx1Z2lucy1nb29kIiAtYSBcCi0gICAgICAgICIkMSIgIT0gImdzdC1wbHVnaW5zLXVnbHkiIC1hIFwKLSAgICAgICAgIiQxIiAhPSAiZ3N0LXBsdWdpbnMtYmFkIjsgdGhlbgotICBlY2hvICJVbmV4cGVjdGVkIHBhY2thZ2UgJyQxJyA/ISIKLSAgZXhpdCAxCi1maQotCi1QQUNLQUdFPSIkMSIKLQotRE9NQUlOU19UT19BREQ9IiIKLURPTUFJTlNfVVBEQVRFRD0iIgotRE9NQUlOU19OT1RfSU5fTElOR1VBUz0iIgotCi1lY2hvICJEb3dubG9hZGluZyBsYXRlc3QgdHJhbnNsYXRpb24gZmlsZXMgZm9yIHBhY2thZ2UgJFBBQ0tBR0UgLi4uIgotZWNobwotCi1mb3IgZCBpbiAkRE9NQUlOUwotZG8KLSAgUEFDS0FHRV9QT19VUkxfQkFTRT0iaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvbGF0ZXN0LyRQQUNLQUdFIgotICBQT19VUkw9IiRQQUNLQUdFX1BPX1VSTF9CQVNFLyRkLnBvIgotICBQT19GSUxFTkFNRT0iJFBBQ0tBR0UuJGQucG8iCi0gIGlmIHdnZXQgLXEgLW5jIC1PICRQT19GSUxFTkFNRSAkUE9fVVJMOyB0aGVuCi0gICAgIyB3ZSB3YW50IGFsbCAucG8gZmlsZXMgaW4gVVRGLTggZm9ybWF0IHJlYWxseSwgc28gY29udmVydCBpZiBuZWVkZWQuLgotICAgIENIQVJTRVQ9YGdyZXAgQ29udGVudC1UeXBlICRQT19GSUxFTkFNRSB8IHNlZCAtZSAncy8uKmNoYXJzZXQ9XCguKlwpXFxcXG4uKi9cMS8nYAotICAgIGlmIHRlc3QgIngkQ0hBUlNFVCIgIT0gInhVVEYtOCIgLWEgIngkQ0hBUlNFVCIgIT0gInh1dGYtOCI7IHRoZW4KLSAgICAgICMgbm90ZTogdGhpbmdzIGxpa2UgdGhlIGJ1Z3MgYWRkcmVzcyB3aWxsIGJlIGFkZGVkIGJhY2sgYnkgbWFrZSB1cGRhdGUtcG8KLSAgICAgIGlmIG1zZ3VuaXEgJFBPX0ZJTEVOQU1FIC0tbm8tbG9jYXRpb24gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1vdXRwdXQtZmlsZT0kUE9fRklMRU5BTUUudXRmOCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXRvLWNvZGU9VVRGLTg7IHRoZW4KLSAgICAgICAgbXYgJFBPX0ZJTEVOQU1FLnV0ZjggJFBPX0ZJTEVOQU1FCi0gICAgICBlbHNlCi0gICAgICAgIGVjaG8gIioqKiogJGQ6IGNvbnZlcnNpb24gZnJvbSAkQ0hBUlNFVCB0byBVVEYtOCBmYWlsZWQgKioqKiIKLSAgICAgIGZpCi0gICAgZmkKLSAgICBpZiBbIC1mICJwby8kZC5wbyIgXTsgdGhlbgotICAgICAgIyAuL3BvL2Zvby5wbyBleGlzdHMsIHNvIGxldCdzIGNoZWNrIGlmIG91cnMgbWF0Y2hlcyB0aGUgbGF0ZXN0IGZyb20gdGhlCi0gICAgICAjIHRyYW5zbGF0aW9uIHByb2plY3Qgd2Vic2l0ZQotICAgICAgUkVWREFURV9ORVc9YGdyZXAgUE8tUmV2aXNpb24tRGF0ZSAkUE9fRklMRU5BTUVgOwotICAgICAgUkVWREFURV9PTEQ9YGdyZXAgUE8tUmV2aXNpb24tRGF0ZSBwby8kZC5wb2A7Ci0gICAgICBDSEFSU0VUX09MRD1gZ3JlcCBDb250ZW50LVR5cGUgcG8vJGQucG8gfCBzZWQgLWUgJ3MvLipjaGFyc2V0PVwoLipcKVxcXFxuLiovXDEvJ2AKLSAgICAgIGlmIHRlc3QgIngkUkVWREFURV9ORVciID0gIngkUkVWREFURV9PTEQiIC1hICJ4JENIQVJTRVRfT0xEIiA9ICJ4VVRGLTgiOyB0aGVuCi0gICAgICAgICMgbm90ZTogc291cmNlIGNvZGUgbGluZSBtYXJrZXJzIHdpbGwgYmUgcmVtb3ZlZCBsYXRlciBieSBtYWtlIHVwbG9hZC1wbwotICAgICAgICBlY2hvICIkZC5wbzogdXAtdG8tZGF0ZSIKLSAgICAgICAgcm0gLWYgJFBPX0ZJTEVOQU1FCi0gICAgICBlbHNlCi0gICAgICAgIG12ICRQT19GSUxFTkFNRSAicG8vJGQucG8iCi0gICAgICAgIGlmIHRlc3QgIngkQ0hBUlNFVF9PTEQiICE9ICJ4VVRGLTgiIC1hICJ4JENIQVJTRVRfT0xEIiAhPSAieHV0Zi04IjsgdGhlbgotICAgICAgICAgIGVjaG8gIiRkLnBvOiB1cGRhdGUgKGFuZCBjaGFyc2V0IGNvbnZlcnRlZCBmcm9tICRDSEFSU0VUX09MRCB0byBVVEYtOCkiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBlY2hvICIkZC5wbzogdXBkYXRlZCIKLSAgICAgICAgZmkKLSAgICAgICAgRE9NQUlOU19VUERBVEVEPSIkRE9NQUlOU19VUERBVEVEICRkIgotICAgICAgZmkKLSAgICAgICMgbWFrZSBzdXJlIGRvbWFpbiBpcyBsaXN0ZWQgaW4gTElOR1VBUwotICAgICAgaWYgISBncmVwICRkICJwby9MSU5HVUFTIiA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgIERPTUFJTlNfTk9UX0lOX0xJTkdVQVM9IiRET01BSU5TX05PVF9JTl9MSU5HVUFTICRkIgotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICAjIC4vcG8vZm9vLnBvIGRvZXNuJ3QgZXhpc3QsIGJ1dCBmb28ucG8gZXhpc3RzIG9uIHRoZSB0cmFuc2xhdGlvbiBwcm9qZWN0Ci0gICAgICAjIHdlYnNpdGUsIHNvIGl0J3MgcHJvYmFibHkgYSBuZXcgdHJhbnNsYXRpb24KLSAgICAgIGVjaG8gIiRkLnBvOiBuZXcgbGFuZ3VhZ2UiCi0gICAgICBtdiAkUE9fRklMRU5BTUUgInBvLyRkLnBvIgotICAgICAgRE9NQUlOU19VUERBVEVEPSIkRE9NQUlOU19VUERBVEVEICRkIgotICAgICAgRE9NQUlOU19UT19BREQ9IiRET01BSU5TX1RPX0FERCAkZCIKLSAgICBmaQotICBlbHNlCi0gICAgcm0gLWYgJFBPX0ZJTEVOQU1FCi0gICAgZWNobyAiJGQucG86IGZhaWx1cmUgKGRvZXMgcHJvYmFibHkgbm90IGV4aXN0KSIKLSAgZmkKLWRvbmUKLQotaWYgWyAtbiAiJERPTUFJTlNfVVBEQVRFRCIgXTsgdGhlbgotICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKLSAgZWNobwotICBlY2hvICJMYW5ndWFnZSBkb21haW5zIHVwZGF0ZWQgICAgOiRET01BSU5TX1VQREFURUQiCi0gIGVjaG8gIkxhbmd1YWdlIGRvbWFpbnMgdG8gZ2l0IGFkZCA6JERPTUFJTlNfVE9fQUREIgotICBlY2hvCi0gIGVjaG8gIlNvdXJjZTogaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvbGF0ZXN0LyRQQUNLQUdFLyIKLSAgZWNobwotICBpZiBbIC1uICIkRE9NQUlOU19UT19BREQiIF07IHRoZW4KLSAgICBDTURfU1RSSU5HPSJnaXQgYWRkIgotICAgIGZvciBkIGluICRET01BSU5TX1RPX0FERDsgZG8KLSAgICAgIENNRF9TVFJJTkc9IiRDTURfU1RSSU5HIHBvLyRkLnBvIgotICAgIGRvbmUKLSAgICBlY2hvICJQbGVhc2UgcnVuIgotICAgIGVjaG8KLSAgICBlY2hvICIgICRDTURfU1RSSU5HIgotICAgIGVjaG8KLSAgICBlY2hvICJub3cgYW5kIGFkZCB0aGUgZm9sbG93aW5nIGRvbWFpbnMgdG8gdGhlIHBvL0xJTkdVQVMgZmlsZToiCi0gICAgZWNobwotICAgIGVjaG8gIiAgJERPTUFJTlNfVE9fQUREIgotICAgIGVjaG8KLSAgICBlY2hvCi0gIGZpCi0gIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgotZmkKLQotaWYgWyAtbiAiJERPTUFJTlNfTk9UX0lOX0xJTkdVQVMiIF07IHRoZW4KLSAgZWNobwotICBlY2hvICJFeGlzdGluZyBkb21haW5zIG1pc3NpbmcgZnJvbSB0aGUgcG8vTElOR1VBUyBmaWxlOiIKLSAgZWNobwotICBlY2hvICIgICRET01BSU5TX05PVF9JTl9MSU5HVUFTIgotICBlY2hvCi0gIGVjaG8KLWZpCi0KLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2V4dHJhY3QtcmVsZWFzZS1kYXRlLWZyb20tZG9hcC1maWxlIGIvY29tbW9uL2V4dHJhY3QtcmVsZWFzZS1kYXRlLWZyb20tZG9hcC1maWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmNTdlMzA3Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9leHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMhL2Jpbi9zaAotIyBTaGVsbCBzY3JpcHQgdG8gZXh0cmFjdCB0aGUgZGF0ZSBnaXZlbiBhIHJlbGVhc2UgdmVyc2lvbiBhbmQgYSAuZG9hcCBmaWxlCi0KLWlmIHRlc3QgIngkMSIgPSAieCIgLW8gIngkMiIgPSAieCIgLW8gISAtcyAiJDIiOyB0aGVuCi0gIGVjaG8gIlVzYWdlOiAkMCBSRUxFQVNFLVZFUlNJT04tTlVNQkVSIERPQVAtRklMRSIgPiYyOwotICBleGl0IDEKLWZpCi0KLWlmICEgZ3JlcCAnPFByb2plY3QnICIkMiIgPi9kZXYvbnVsbCA7IHRoZW4KLSAgZWNobyAiJDIgZG9lcyBub3QgbG9vayBsaWthIGEgLmRvYXAgZmlsZSIgPiYyOwotICBleGl0IDEKLWZpCi0KLWlmICEgZ3JlcCAiJDEiICIkMiIgPi9kZXYvbnVsbCA7IHRoZW4KLSAgZWNobyAiJDIgY29udGFpbnMgbm8gcmVmZXJlbmNlIHRvIGEgdmVyc2lvbiAkMSIgPiYyOwotICBleGl0IDEKLWZpCi0KLWF3ayAnQkVHSU4ge3g9MH0KLXsKLWlmICggJDAgfiAvPHJlbGVhc2U+LyApIHt4PTE7IGNodW5rPSIifQotaWYgKHg9PTEpIHsKLSAgaWYgKCQwIH4gLzxyZXZpc2lvbj4vKSB7IGNodW5rID0gY2h1bmsgJDAgfQotICBpZiAoJDAgfiAvPGNyZWF0ZWQ+LykgeyBjaHVuayA9IGNodW5rICQwIH0KLX0KLWlmICgkMCB+IC88XC9yZWxlYXNlPi8pIHt4PTA7IHByaW50IGNodW5rfQotfScgPCAiJDIiIHwgXAotXAotZ3JlcCAnPHJldmlzaW9uPiciJDEiJzwvcmV2aXNpb24+JyB8IFwKLVwKLXNlZCAtZSAncy9eLio8Y3JlYXRlZD4vLycgLWUgJ3MvPFwvY3JlYXRlZD4uKiQvLycKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2dldHRleHQucGF0Y2ggYi9jb21tb24vZ2V0dGV4dC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgyYjkwNS4uMDAwMDAwMAotLS0gYS9jb21tb24vZ2V0dGV4dC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLS0tLSBwby9NYWtlZmlsZS5pbi5pbi5vcmlnCTIwMDYtMDEtMDcgMTI6MDM6NDUuMDAwMDAwMDAwICswMTAwCi0rKysgcG8vTWFrZWZpbGUuaW4uaW4JMjAwNi0wMS0wNyAxMjowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMSw2ICsxMSw5IEBACi0gUEFDS0FHRSA9IEBQQUNLQUdFQAotIFZFUlNJT04gPSBAVkVSU0lPTkAKLSAKLSsjIHRob21hczogYWRkIEdFVFRFWFRfUEFDS0FHRSBzdWJzdGl0dXRpb24gYXMgdXNlZCBpbiBNYWtldmFycwotK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi0rCi0gU0hFTEwgPSAvYmluL3NoCi0gQFNFVF9NQUtFQAotIApkaWZmIC0tZ2l0IGEvY29tbW9uL2dsaWItZ2VuLm1hayBiL2NvbW1vbi9nbGliLWdlbi5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOTNhNWYuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2dsaWItZ2VuLm1haworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMgdGhlc2UgYXJlIHRoZSB2YXJpYWJsZXMgeW91ciBNYWtlZmlsZS5hbSBzaG91bGQgc2V0Ci0jIHRoZSBleGFtcGxlIGlzIGJhc2VkIG9uIHRoZSBjb2xvcmJhbGFuY2UgaW50ZXJmYWNlCi0KLSNnbGliX2VudW1faGVhZGVycz0kKGNvbG9yYmFsYW5jZV9oZWFkZXJzKQotI2dsaWJfZW51bV9kZWZpbmU9R1NUX0NPTE9SX0JBTEFOQ0UKLSNnbGliX2VudW1fcHJlZml4PWdzdF9jb2xvcl9iYWxhbmNlCi0KLWVudW1faGVhZGVycz0kKGZvcmVhY2ggaCwkKGdsaWJfZW51bV9oZWFkZXJzKSxcblwjaW5jbHVkZSBcIiQoaClcIikKLQotIyB0aGVzZSBhcmUgYWxsIHRoZSBydWxlcyBnZW5lcmF0aW5nIHRoZSByZWxldmFudCBmaWxlcwotJS1tYXJzaGFsLmg6ICUtbWFyc2hhbC5saXN0Ci0JJChBTV9WX0dFTilnbGliLWdlbm1hcnNoYWwgLS1oZWFkZXIgLS1wcmVmaXg9JChnbGliX2VudW1fcHJlZml4KV9tYXJzaGFsICReID4gJCotbWFyc2hhbC5oLnRtcCAmJiBcCi0JbXYgJCotbWFyc2hhbC5oLnRtcCAkKi1tYXJzaGFsLmgKLQotJS1tYXJzaGFsLmM6ICUtbWFyc2hhbC5saXN0Ci0JJChBTV9WX0dFTillY2hvICIjaW5jbHVkZSBcIiQqLW1hcnNoYWwuaFwiIiA+PiAkKi1tYXJzaGFsLmMudG1wICYmIFwKLQlnbGliLWdlbm1hcnNoYWwgLS1ib2R5IC0tcHJlZml4PSQoZ2xpYl9lbnVtX3ByZWZpeClfbWFyc2hhbCAkXiA+PiAkKi1tYXJzaGFsLmMudG1wICYmIFwKLQltdiAkKi1tYXJzaGFsLmMudG1wICQqLW1hcnNoYWwuYwotCi0lLWVudW10eXBlcy5oOiAkKGdsaWJfZW51bV9oZWFkZXJzKQotCSQoQU1fVl9HRU4pZ2xpYi1ta2VudW1zIFwKLQktLWZoZWFkICIjaWZuZGVmIF9fJChnbGliX2VudW1fZGVmaW5lKV9FTlVNX1RZUEVTX0hfX1xuI2RlZmluZSBfXyQoZ2xpYl9lbnVtX2RlZmluZSlfRU5VTV9UWVBFU19IX19cblxuI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+XG5cbkdfQkVHSU5fREVDTFNcbiIgXAotCS0tZnByb2QgIlxuLyogZW51bWVyYXRpb25zIGZyb20gXCJAZmlsZW5hbWVAXCIgKi9cbiIgXAotCS0tdmhlYWQgIkdUeXBlIEBlbnVtX25hbWVAX2dldF90eXBlICh2b2lkKTtcbiNkZWZpbmUgR1NUX1RZUEVfQEVOVU1TSE9SVEAgKEBlbnVtX25hbWVAX2dldF90eXBlKCkpXG4iICAgICAgICAgXAotCS0tZnRhaWwgIkdfRU5EX0RFQ0xTXG5cbiNlbmRpZiAvKiBfXyQoZ2xpYl9lbnVtX2RlZmluZSlfRU5VTV9UWVBFU19IX18gKi8iIFwKLQkkXiA+ICRACi0KLSUtZW51bXR5cGVzLmM6ICQoZ2xpYl9lbnVtX2hlYWRlcnMpCi0JQGlmIHRlc3QgIngkKGdsaWJfZW51bV9oZWFkZXJzKSIgPSAieCI7IHRoZW4gZWNobyAiRVJST1I6IGdsaWJfZW51bV9oZWFkZXJzIGlzIGVtcHR5LCBwbGVhc2UgZml4IE1ha2VmaWxlIjsgZXhpdCAxOyBmaQotCSQoQU1fVl9HRU4pZ2xpYi1ta2VudW1zIFwKLQktLWZoZWFkICIjaW5jbHVkZSBcIiQqLWVudW10eXBlcy5oXCJcbiQoZW51bV9oZWFkZXJzKSIgXAotCS0tZnByb2QgIlxuLyogZW51bWVyYXRpb25zIGZyb20gXCJAZmlsZW5hbWVAXCIgKi8iIFwKLQktLXZoZWFkICJHVHlwZVxuQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpXG57XG4gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZSA9IDA7XG4gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmdfZGVmaW5lX3R5cGVfaWRfX3ZvbGF0aWxlKSkge1xuICAgIHN0YXRpYyBjb25zdCBHQFR5cGVAVmFsdWUgdmFsdWVzW10gPSB7IiAgICAgXAotCS0tdnByb2QgIiAgICAgIHsgQFZBTFVFTkFNRUAsIFwiQFZBTFVFTkFNRUBcIiwgXCJAdmFsdWVuaWNrQFwiIH0sIiBcCi0JLS12dGFpbCAiICAgICAgeyAwLCBOVUxMLCBOVUxMIH1cbiAgICB9O1xuICAgIEdUeXBlIGdfZGVmaW5lX3R5cGVfaWQgPSBnX0B0eXBlQF9yZWdpc3Rlcl9zdGF0aWMgKFwiQEVudW1OYW1lQFwiLCB2YWx1ZXMpO1xuICAgIGdfb25jZV9pbml0X2xlYXZlICgmZ19kZWZpbmVfdHlwZV9pZF9fdm9sYXRpbGUsIGdfZGVmaW5lX3R5cGVfaWQpO1xuICB9XG4gIHJldHVybiBnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZTtcbn1cbiIgXAotCSReID4gJEAKLQotIyBhIGhhY2sgcnVsZSB0byBtYWtlIHN1cmUgLlBsbyBmaWxlcyBleGlzdCBiZWNhdXNlIHRoZXkgZ2V0IGluY2x1ZGUnZAotIyBmcm9tIE1ha2VmaWxlJ3MKLS5kZXBzLyUtbWFyc2hhbC5QbG86Ci0JQHRvdWNoICRACi0KLS5kZXBzLyUtZW51bXR5cGVzLlBsbzoKLQlAdG91Y2ggJEAKZGlmZiAtLWdpdCBhL2NvbW1vbi9nc3QtYXV0b2dlbi5zaCBiL2NvbW1vbi9nc3QtYXV0b2dlbi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEwNDllNi4uMDAwMDAwMAotLS0gYS9jb21tb24vZ3N0LWF1dG9nZW4uc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotIyBhIHNpbGx5IGhhY2sgdGhhdCBnZW5lcmF0ZXMgYXV0b3JlZ2VuLnNoIGJ1dCBpdCdzIGhhbmR5Ci0jIFJlbW92ZSB0aGUgb2xkIGF1dG9yZWdlbi5zaCBmaXJzdCB0byBjcmVhdGUgYSBuZXcgZmlsZSwKLSMgYXMgdGhlIGN1cnJlbnQgb25lIG1heSBiZSBiZWluZyByZWFkIGJ5IHRoZSBzaGVsbCBleGVjdXRpbmcKLSMgdGhpcyBzY3JpcHQuCi1pZiBbIC1mICJhdXRvcmVnZW4uc2giIF07IHRoZW4KLSAgcm0gYXV0b3JlZ2VuLnNoCi1maQotZWNobyAiIyEvYmluL3NoIiA+IGF1dG9yZWdlbi5zaAotZWNobyAiLi9hdXRvZ2VuLnNoICRAIFwkQCIgPj4gYXV0b3JlZ2VuLnNoCi1jaG1vZCAreCBhdXRvcmVnZW4uc2gKLQotIyBoZWxwZXIgZnVuY3Rpb25zIGZvciBhdXRvZ2VuLnNoCi0KLWRlYnVnICgpCi0jIHByaW50IG91dCBhIGRlYnVnIG1lc3NhZ2UgaWYgREVCVUcgaXMgYSBkZWZpbmVkIHZhcmlhYmxlCi17Ci0gIGlmIHRlc3QgISAteiAiJERFQlVHIgotICB0aGVuCi0gICAgZWNobyAiREVCVUc6ICQxIgotICBmaQotfQotCi0KLWF1dG9nZW5fb3B0aW9ucyAoKQotewotICBpZiB0ZXN0ICJ4JDEiID0gIngiOyB0aGVuCi0gICAgcmV0dXJuIDAKLSAgZmkKLQotICB3aGlsZSB0ZXN0ICJ4JDEiICE9ICJ4IiA7IGRvCi0gICAgb3B0YXJnPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCknYAotICAgIGNhc2UgIiQxIiBpbgotICAgICAgLS1ub2NvbmZpZ3VyZSkKLSAgICAgICAgICBOT0NPTkZJR1VSRT1kZWZpbmVkCi0JICBBVVRPR0VOX0VYVF9PUFQ9IiRBVVRPR0VOX0VYVF9PUFQgLS1ub2NvbmZpZ3VyZSIKLSAgICAgICAgICBlY2hvICIrIGNvbmZpZ3VyZSBydW4gZGlzYWJsZWQiCi0gICAgICAgICAgc2hpZnQKLSAgICAgICAgICA7OwotICAgICAgLS1ub2NoZWNrKQotCSAgQVVUT0dFTl9FWFRfT1BUPSIkQVVUT0dFTl9FWFRfT1BUIC0tbm9jaGVjayIKLSAgICAgICAgICBOT0NIRUNLPWRlZmluZWQKLSAgICAgICAgICBlY2hvICIrIGF1dG90b29scyB2ZXJzaW9uIGNoZWNrIGRpc2FibGVkIgotICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgOzsKLSAgICAgIC1kfC0tZGVidWcpCi0gICAgICAgICAgREVCVUc9ZGVmaW5lZAotCSAgQVVUT0dFTl9FWFRfT1BUPSIkQVVUT0dFTl9FWFRfT1BUIC0tZGVidWciCi0gICAgICAgICAgZWNobyAiKyBkZWJ1ZyBvdXRwdXQgZW5hYmxlZCIKLSAgICAgICAgICBzaGlmdAotICAgICAgICAgIDs7Ci0gICAgICAtaHwtLWhlbHApCi0gICAgICAgICAgZWNobyAiYXV0b2dlbi5zaCAoYXV0b2dlbiBvcHRpb25zKSAtLSAoY29uZmlndXJlIG9wdGlvbnMpIgotICAgICAgICAgIGVjaG8gImF1dG9nZW4uc2ggaGVscCBvcHRpb25zOiAiCi0gICAgICAgICAgZWNobyAiIC0tbm9jb25maWd1cmUgICAgICAgICAgICBkb24ndCBydW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQiCi0gICAgICAgICAgZWNobyAiIC0tbm9jaGVjayAgICAgICAgICAgICAgICBkb24ndCBkbyB2ZXJzaW9uIGNoZWNrcyIKLSAgICAgICAgICBlY2hvICIgLS1kZWJ1ZyAgICAgICAgICAgICAgICAgIGRlYnVnIHRoZSBhdXRvZ2VuIHByb2Nlc3MiCi0gICAgICAgICAgZWNobwotICAgICAgICAgIGVjaG8gIiAtLXdpdGgtYXV0b2NvbmYgUEFUSCAgICAgdXNlIGF1dG9jb25mIGluIFBBVEgiCi0gICAgICAgICAgZWNobyAiIC0td2l0aC1hdXRvbWFrZSBQQVRIICAgICB1c2UgYXV0b21ha2UgaW4gUEFUSCIKLSAgICAgICAgICBlY2hvCi0gICAgICAgICAgZWNobyAiQW55IGFyZ3VtZW50IGVpdGhlciBub3QgaW4gdGhlIGFib3ZlIGxpc3Qgb3IgYWZ0ZXIgYSAnLS0nIHdpbGwgYmUgIgotICAgICAgICAgIGVjaG8gInBhc3NlZCB0byAuL2NvbmZpZ3VyZS4iCi0JICBleGl0IDEKLSAgICAgICAgICA7OwotICAgICAgLS13aXRoLWF1dG9tYWtlPSopCi0gICAgICAgICAgQVVUT01BS0U9JG9wdGFyZwotICAgICAgICAgIGVjaG8gIisgdXNpbmcgYWx0ZXJuYXRlIGF1dG9tYWtlIGluICRvcHRhcmciCi0JICBDT05GSUdVUkVfREVGX09QVD0iJENPTkZJR1VSRV9ERUZfT1BUIC0td2l0aC1hdXRvbWFrZT0kQVVUT01BS0UiCi0gICAgICAgICAgc2hpZnQKLSAgICAgICAgICA7OwotICAgICAgLS13aXRoLWF1dG9jb25mPSopCi0gICAgICAgICAgQVVUT0NPTkY9JG9wdGFyZwotICAgICAgICAgIGVjaG8gIisgdXNpbmcgYWx0ZXJuYXRlIGF1dG9jb25mIGluICRvcHRhcmciCi0JICBDT05GSUdVUkVfREVGX09QVD0iJENPTkZJR1VSRV9ERUZfT1BUIC0td2l0aC1hdXRvY29uZj0kQVVUT0NPTkYiCi0gICAgICAgICAgc2hpZnQKLSAgICAgICAgICA7OwotICAgICAgLS0pIHNoaWZ0IDsgYnJlYWsgOzsKLSAgICAgICopCi0gICAgICAgICAgZWNobyAiKyBwYXNzaW5nIGFyZ3VtZW50ICQxIHRvIGNvbmZpZ3VyZSIKLQkgIENPTkZJR1VSRV9FWFRfT1BUPSIkQ09ORklHVVJFX0VYVF9PUFQgJDEiCi0gICAgICAgICAgc2hpZnQKLSAgICAgICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGZvciBhcmcgZG8gQ09ORklHVVJFX0VYVF9PUFQ9IiRDT05GSUdVUkVfRVhUX09QVCAkYXJnIjsgZG9uZQotICBpZiB0ZXN0ICEgLXogIiRDT05GSUdVUkVfRVhUX09QVCIKLSAgdGhlbgotICAgIGVjaG8gIisgb3B0aW9ucyBwYXNzZWQgdG8gY29uZmlndXJlOiAkQ09ORklHVVJFX0VYVF9PUFQiCi0gIGZpCi19Ci0KLXRvcGxldmVsX2NoZWNrICgpCi17Ci0gIHNyY2ZpbGU9JDEKLSAgdGVzdCAtZiAkc3JjZmlsZSB8fCB7Ci0gICAgICAgIGVjaG8gIllvdSBtdXN0IHJ1biB0aGlzIHNjcmlwdCBpbiB0aGUgdG9wLWxldmVsICRwYWNrYWdlIGRpcmVjdG9yeSIKLSAgICAgICAgZXhpdCAxCi0gIH0KLX0KLQotdG9vbF9ydW4gKCkKLXsKLSAgdG9vbD0kMQotICBvcHRpb25zPSQyCi0gIHJ1bl9pZl9mYWlsPSQzCi0gIGVjaG8gIisgcnVubmluZyAkdG9vbCAkb3B0aW9ucy4uLiIKLSAgJHRvb2wgJG9wdGlvbnMgfHwgewotICAgIGVjaG8KLSAgICBlY2hvICR0b29sIGZhaWxlZAotICAgIGV2YWwgJHJ1bl9pZl9mYWlsCi0gICAgZXhpdCAxCi0gIH0KLX0KLQotaW5zdGFsbF9naXRfaG9va3MgKCkKLXsKLSAgaWYgdGVzdCAtZCAuZ2l0OyB0aGVuCi0gICAgIyBpbnN0YWxsIHByZS1jb21taXQgaG9vayBmb3IgZG9pbmcgY2xlYW4gY29tbWl0cwotICAgIGZvciBob29rIGluIHByZS1jb21taXQ7IGRvCi0gICAgICBpZiB0ZXN0ICEgXCggLXggLmdpdC9ob29rcy8kaG9vayAtYSAtTCAuZ2l0L2hvb2tzLyRob29rIFwpOyB0aGVuCi0gICAgICAgIGVjaG8gIisgSW5zdGFsbGluZyBnaXQgJGhvb2sgaG9vayIKLSAgICAgICAgcm0gLWYgLmdpdC9ob29rcy8kaG9vawotICAgICAgICBsbiAtcyAuLi8uLi9jb21tb24vaG9va3MvJGhvb2suaG9vayAuZ2l0L2hvb2tzLyRob29rIHx8IHsKLSAgICAgICAgICAjIGlmIHdlIGNvdWxkbid0IGNyZWF0ZSBhIHN5bWJvbGljIGxpbmssIHRyeSBkb2luZyBhIHBsYWluIGNwCi0gICAgICAgICAgaWYgY3AgY29tbW9uL2hvb2tzL3ByZS1jb21taXQuaG9vayAuZ2l0L2hvb2tzL3ByZS1jb21taXQ7IHRoZW4KLSAgICAgICAgICAgIGNobW9kICt4IC5naXQvaG9va3MvcHJlLWNvbW1pdDsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBlY2hvICIqKioqKioqKioqIENvdWxkbid0IGluc3RhbGwgZ2l0ICRob29rIGhvb2sgKioqKioqKioqKiI7Ci0gICAgICAgICAgZmkKLSAgICAgICAgfQotICAgICAgZmkKLSAgICBkb25lCi0gIGZpCi19CmRpZmYgLS1naXQgYS9jb21tb24vZ3N0LWluZGVudCBiL2NvbW1vbi9nc3QtaW5kZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiNWU4MDhmLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9nc3QtaW5kZW50CisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIENoZWNrIHRoYXQgdGhlIGNvZGUgZm9sbG93cyBhIGNvbnNpc3RhbnQgY29kZSBzdHlsZQotIwotCi0jIENoZWNrIGZvciBleGlzdGVuY2Ugb2YgaW5kZW50LCBhbmQgZXJyb3Igb3V0IGlmIG5vdCBwcmVzZW50LgotIyBPbiBzb21lICpic2Qgc3lzdGVtcyB0aGUgYmluYXJ5IHNlZW1zIHRvIGJlIGNhbGxlZCBnbnVuaW5kZW50LAotIyBzbyBjaGVjayBmb3IgdGhhdCBmaXJzdC4KLQotdmVyc2lvbj1gZ251aW5kZW50IC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKLWlmIHRlc3QgIngkdmVyc2lvbiIgPSAieCI7IHRoZW4KLSAgdmVyc2lvbj1gZ2luZGVudCAtLXZlcnNpb24gMj4vZGV2L251bGxgCi0gIGlmIHRlc3QgIngkdmVyc2lvbiIgPSAieCI7IHRoZW4KLSAgICB2ZXJzaW9uPWBpbmRlbnQgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAotICAgIGlmIHRlc3QgIngkdmVyc2lvbiIgPSAieCI7IHRoZW4KLSAgICAgIGVjaG8gIkdTdHJlYW1lciBnaXQgcHJlLWNvbW1pdCBob29rOiIKLSAgICAgIGVjaG8gIkRpZCBub3QgZmluZCBHTlUgaW5kZW50LCBwbGVhc2UgaW5zdGFsbCBpdCBiZWZvcmUgY29udGludWluZy4iCi0gICAgICBleGl0IDEKLSAgICBlbHNlCi0gICAgICBJTkRFTlQ9aW5kZW50Ci0gICAgZmkKLSAgZWxzZQotICAgIElOREVOVD1naW5kZW50Ci0gIGZpCi1lbHNlCi0gIElOREVOVD1nbnVpbmRlbnQKLWZpCi0KLWNhc2UgYCRJTkRFTlQgLS12ZXJzaW9uYCBpbgotICBHTlUqKQotICAgICAgOzsKLSAgZGVmYXVsdCkKLSAgICAgIGVjaG8gIkdTdHJlYW1lciBnaXQgcHJlLWNvbW1pdCBob29rOiIKLSAgICAgIGVjaG8gIkRpZCBub3QgZmluZCBHTlUgaW5kZW50LCBwbGVhc2UgaW5zdGFsbCBpdCBiZWZvcmUgY29udGludWluZy4iCi0gICAgICBlY2hvICIoRm91bmQgJElOREVOVCwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBHTlUgaW5kZW50KSIKLSAgICAgIGV4aXQgMQotICAgICAgOzsKLWVzYWMKLQotSU5ERU5UX1BBUkFNRVRFUlM9Ii0tYnJhY2VzLW9uLWlmLWxpbmUgXAotCS0tY2FzZS1icmFjZS1pbmRlbnRhdGlvbjAgXAotCS0tY2FzZS1pbmRlbnRhdGlvbjIgXAotCS0tYnJhY2VzLWFmdGVyLXN0cnVjdC1kZWNsLWxpbmUgXAotCS0tbGluZS1sZW5ndGg4MCBcCi0JLS1uby10YWJzIFwKLQktLWN1ZGRsZS1lbHNlIFwKLQktLWRvbnQtbGluZS11cC1wYXJlbnRoZXNlcyBcCi0JLS1jb250aW51YXRpb24taW5kZW50YXRpb240IFwKLQktLWhvbm91ci1uZXdsaW5lcyBcCi0JLS10YWItc2l6ZTggXAotCS0taW5kZW50LWxldmVsMiBcCi0JLS1sZWF2ZS1wcmVwcm9jZXNzb3Itc3BhY2UiCi0KLSRJTkRFTlQgJHtJTkRFTlRfUEFSQU1FVEVSU30gJEAKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2dzdC5zdXBwIGIvY29tbW9uL2dzdC5zdXBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODVjZDY5Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9nc3Quc3VwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwMjcgKzAsMCBAQAotIyMjIHRoaXMgZmlsZSBjb250YWlucyBzdXBwcmVzc2lvbnMgZm9yIHZhbGdyaW5kIHdoZW4gcnVubmluZwotIyMjIHRoZSBnc3RyZWFtZXIgdW5pdCB0ZXN0cwotIyMjIGl0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Igd2lkZXIgdXNlIGFzIHdlbGwKLQotIyMjIHN5c2NhbGwgc3VwcHJlc3Npb25zCi0KLXsKLSAgIDxjbG9uZSBvbiBXaW0ncyBEZWJpYW4+Ci0gICBNZW1jaGVjazpQYXJhbQotICAgY2xvbmUocGFyZW50X3RpZHB0cikKLSAgIGZ1bjpjbG9uZQotICAgZnVuOmNsb25lCi19Ci0KLXsKLSAgIDxjbG9uZSBvbiBXaW0ncyBEZWJpYW4+Ci0gICBNZW1jaGVjazpQYXJhbQotICAgY2xvbmUoY2hpbGRfdGlkcHRyKQotICAgZnVuOmNsb25lCi0gICBmdW46Y2xvbmUKLX0KLQotewotICAgPGNsb25lIG9uIFdpbSdzIERlYmlhbj4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBjbG9uZSh0bHNpbmZvKQotICAgZnVuOmNsb25lCi0gICBmdW46Y2xvbmUKLX0KLQotIyMjIGdsaWJjIHN1cHByZXNzaW9ucwotCi17Ci0gICA8Y29uZGl0aW9uYWwganVtcCBvbiB3aW0ncyBkZWJpYW4gMi8yLzA2PgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuKi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIG9iajovbGliL2xkLTIuKi5zbwotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotfQotCi17Ci0gICA8Q29uZGl0aW9uYWwganVtcD4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpzdHJsZW4KLSAgIGZ1bjpmaWxsaW5fcnBhdGgKLSAgIGZ1bjpfZGxfaW5pdF9wYXRocwotICAgZnVuOmRsX21haW4KLSAgIGZ1bjpfZGxfc3lzZGVwX3N0YXJ0Ci0gICBmdW46X2RsX3N0YXJ0Ci0gICBvYmo6L2xpYjY0L2xkLTIuKi5zbwotICAgb2JqOioKLSAgIG9iajoqCi19Ci0KLXsKLSAgIDxDb25kaXRpb25hbCBqdW1wPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi0gICBmdW46X2RsX3N5c2RlcF9zdGFydAotICAgZnVuOl9kbF9zdGFydAotfQotCi17Ci0gICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMi41Ci19Ci0KLSMgZ2xpYmMgZG9lcyBub3QgZGVhbGxvY2F0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZQotCi17Ci0gICA8dGxzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9kbF9hbGxvY2F0ZV90bHMKLSAgIGZ1bjpwdGhyZWFkX2NyZWF0ZUBAKgotfQotCi17Ci0gICA8dGxzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmFsbG9jYXRlX2R0dgotICAgZnVuOl9kbF9hbGxvY2F0ZV90bHMKLX0KLQotIyBJIGdldCBhbiBleHRyYSBzdGFjayBlbnRyeSBvbiB4ODYvZGFwcGVyCi17Ci0gICA8dGxzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzCi0gICBmdW46cHRocmVhZF9jcmVhdGVAQCoKLX0KLQotCi17Ci0gICA8cHRocmVhZCBzdHJzdHI+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46c3Ryc3RyCi0gICBmdW46X19wdGhyZWFkX2luaXRpYWxpemVfbWluaW1hbAotICAgb2JqOi9saWIvbGlicHRocmVhZC0qLnNvCi0gICBvYmo6L2xpYi9saWJwdGhyZWFkLSouc28KLSAgIGZ1bjpjYWxsX2luaXQKLSAgIGZ1bjpfZGxfaW5pdAotICAgb2JqOi9saWIvbGQtKi5zbwotfQotCi0jIGEgdGhyZWFkLXJlbGF0ZWQgZnJlZSBwcm9ibGVtIGluIGdsaWJjIGZyb20gRWRnYXJkCi17Ci0gICBfX2xpYmNfZnJlZXJlc19yd19hY2VzcwotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajoqCi0gICBvYmo6KgotICAgb2JqOioKLSAgIG9iajoqCi0gICBvYmo6KgotICAgZnVuOl9fbGliY19mcmVlcmVzCi19Ci0KLXsKLSAgIDxhIGNvbmRpdGlvbmFsIGp1bXAgb24gd2ltJ3MgZGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi19Ci0KLSMgZ19tb2R1bGVfb3Blbi1yZWxhdGVkIHByb2JsZW1zCi17Ci0gICA8c3RhcnRlZCBzaG93aW5nIHVwIG9uIGZjNC1xdWljaz4KLSAgIE1lbWNoZWNrOkFkZHIyCi0gICBmdW46bWVtY3B5Ci0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCi0gICBmdW46Z19tb2R1bGVfb3BlbgotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9maWxlCi0gICBmdW46Z3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbAotICAgZnVuOmdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwKLSAgIGZ1bjpnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsCi0gICBmdW46aW5pdF9wb3N0Ci0gICBmdW46Z19vcHRpb25fY29udGV4dF9wYXJzZQotICAgZnVuOmdzdF9pbml0X2NoZWNrCi0gICBmdW46Z3N0X2luaXQKLSAgIGZ1bjpnc3RfY2hlY2tfaW5pdAotICAgZnVuOm1haW4KLX0KLQotewotICAgPHN0YXJ0ZWQgc2hvd2luZyB1cCBvbiBmYzQtcXVpY2s+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgZnVuOm1lbWNweQotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotICAgZnVuOmdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwKLSAgIGZ1bjpnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsCi0gICBmdW46Z3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbAotICAgZnVuOmluaXRfcG9zdAotICAgZnVuOmdfb3B0aW9uX2NvbnRleHRfcGFyc2UKLSAgIGZ1bjpnc3RfaW5pdF9jaGVjawotICAgZnVuOmdzdF9pbml0Ci0gICBmdW46Z3N0X2NoZWNrX2luaXQKLSAgIGZ1bjptYWluCi19Ci0KLXsKLSAgIDxnX21vZHVsZV9vcGVuIG9uIHdpbSdzIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpkb19zeW0KLSAgIGZ1bjpfZGxfc3ltCi0gICBmdW46ZGxzeW1fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbHN5bQotICAgZnVuOmdfbW9kdWxlX3N5bWJvbAotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotfQotCi17Ci0gICA8Z19tb2R1bGVfb3BlbiBvbiB3aW0ncyBkZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotfQotewotICAgPGdfbW9kdWxlX29wZW4gb24gd2ltJ3MgZGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCi0gICBmdW46Z19tb2R1bGVfb3BlbgotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9maWxlCi0gICBmdW46Z3N0X3BsdWdpbl9sb2FkX2J5X25hbWUKLSAgIGZ1bjpnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZAotfQotCi17Ci0gICA8bGVhayBvbiB3aW0ncyBkZWJpYW4gaW4gZ19tb2R1bGVfb3Blbj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLX0KLQotewotICAgPGludmFsaWQgcmVhZCBvbiB3aW0ncyBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsZXJyb3JfcnVuCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuIC0gMjAwNi0wMi0wMj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPGludmFsaWQgcmVhZCBvbiB3aW0ncyBkZWJpYW4gLSAyMDA2LTAyLTAyPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjEKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuIC0gMjAwNi0wMi0wMj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZG9fc3ltCi0gICBmdW46X2RsX3N5bQotICAgZnVuOmRsc3ltX2RvaXQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxzeW0KLSAgIGZ1bjpnX21vZHVsZV9zeW1ib2wKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxmdXRleCBvbiBBbmR5J3MgNjQtYml0IHVidW50dT4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBmdXRleCh1YWRkcjIpCi0gICBmdW46cHRocmVhZF9vbmNlCi0gICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCi0gICBmdW46bWJzbnJ0b3djcwotICAgZnVuOnZmcHJpbnRmCi0gICBmdW46dnNwcmludGYKLSAgIGZ1bjpzcHJpbnRmCi0gICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCi0gICBmdW46dG1wZmlsZQotICAgZnVuOnNldHVwX3BpcGUKLSAgIGZ1bjpzZXR1cF9tZXNzYWdpbmdfd2l0aF9rZXkKLSAgIGZ1bjpzZXR1cF9tZXNzYWdpbmcKLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgZnVuOl9kbF9zeW0KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsc3ltCi0gICBmdW46Z19tb2R1bGVfc3ltYm9sCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgZnVuOmljb252X29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgZnVuOmljb252X29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gVWJ1bnR5IEhhcmR5IDY0LWJpdD4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIGZ1bjpfX2xpYmNfZGxvcGVuX21vZGUKLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgZnVuOmljb252X29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gVWJ1bnR5IEhhcmR5IDY0LWJpdD4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGliYy0yLjcuc28KLSAgIGZ1bjppY29udl9vcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBVYnVudHkgSGFyZHkgNjQtYml0PgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi0jIHN1cHByZXNzaW9uIGZvciBhIGdsaWJjIGJ1ZzoKLSMgaHR0cDovL3ZhbGdyaW5kLm9yZy9kb2NzL21hbnVhbC9mYXEuaHRtbCNmYXEuZXhpdF9lcnJvcnM+Ci17Ci0gICA8V29ya2Fyb3VuZCBmb3IgYSBnbGliYyBidWc+Ci0gICBNZW1jaGVjazpGcmVlCi0gICBmdW46ZnJlZQotICAgb2JqOipsaWJjLSouc28KLSAgIGZ1bjpfX2xpYmNfZnJlZXJlcwotICAgZnVuOioKLSAgIGZ1bjpfRXhpdAotfQotCi0jIHNhbWUgYXMgYWJvdmUsIGp1c3Qgc28gaXQgd29ya3MgZm9yIHRwbSBvbiBndXRzeS94ODYtNjQKLXsKLSAgIDx3b3JrYXJvdW5kIGdsaWJjIGJ1ZyBvbiBndXRzeSB4ODYtNjQ+Ci0gICBNZW1jaGVjazpGcmVlCi0gICBmdW46ZnJlZQotICAgZnVuOmZyZWVfbWVtCi0gICBmdW46X19saWJjX2ZyZWVyZXMKLX0KLQotIyB2YWxncmluZCBkb2Vzbid0IGFsbG93IG1lIHRvIHNwZWNpZnkgYSBzdXBwcmVzc2lvbiBmb3IgQWRkcjEsIEFkZHIyLCBBZGRyNAotIyBhcyBBZGRyKiwgc28gMyBjb3BpZXMgZm9yIHRoYXQ7IGFuZCB0aGVuIDIgb2YgZWFjaCBmb3IgdGhhdCBwZXNreSBtZW1jcHkKLXsKLSAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KLSAgIE1lbWNoZWNrOkFkZHIxCi0gICBmdW46X2RsX3NpZ25hbF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPEludmFsaWQgcmVhZCBvZiBzaXplIDEsIDIsIDQgb24gdGhvbWFzJ3MgRkM0PgotICAgTWVtY2hlY2s6QWRkcjIKLSAgIGZ1bjpfZGxfc2lnbmFsX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotewotICAgPEludmFsaWQgcmVhZCBvZiBzaXplIDEsIDIsIDQgb24gdGhvbWFzJ3MgRkM0PgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIGZ1bjpfZGxfc2lnbmFsX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8SW52YWxpZCByZWFkIG9mIHNpemUgMSwgMiwgNCBvbiB0aG9tYXMncyBGQzQ+Ci0gICBNZW1jaGVjazpBZGRyMQotICAgZnVuOm1lbWNweQotICAgZnVuOl9kbF9zaWduYWxfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjEKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KLSAgIE1lbWNoZWNrOkFkZHIyCi0gICBmdW46bWVtY3B5Ci0gICBmdW46X2RsX3NpZ25hbF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLXsKLSAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBmdW46bWVtY3B5Ci0gICBmdW46X2RsX3NpZ25hbF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPEFkZHI4IG9uIEFuZHkncyBBTUQ2NCB1YnVudHUgaW4gZGxfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGliYy0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxfb3BlbgotICAgb2JqOi9saWIvbGliZGwtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi19Ci0KLXsKLSAgIDxDb25kaXRpb25hbCBqdW1wIG9uIEFuZHkncyBBTUQ2NCB1YnVudHU+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGliYy0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxfb3BlbgotICAgb2JqOi9saWIvbGliZGwtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjMuKi5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCi0gICBmdW46Z3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQKLX0KLQotewotICAgPE1pa2UncyB4ODYgZGFwcGVyPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8TWlrZSdzIHg4NiBkYXBwZXI+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8QW5vdGhlciBkYXBwZXIgb25lPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4zLjYuc28KLSAgIG9iajovbGliL2xkLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbwotICAgZnVuOmRsb3BlbgotfQotCi0jIyMgZ2xpYiBzdXBwcmVzc2lvbnMKLXsKLSAgIDxnX3BhcnNlX2RlYnVnX3N0cmluZz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpnX3BhcnNlX2RlYnVnX3N0cmluZwotICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4qCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MwCi19Ci0KLXsKLSAgIDxnX3R5cGVfaW5pdCBsZWFrcz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfdHlwZV9pbml0KgotICAgZnVuOmluaXRfcHJlKgotfQotCi17Ci0gICA8Z190eXBlX3JlZ2lzdGVyX2Z1bmRhbWVudGFsIGxlYWtzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgLi4uCi0gICBmdW46Z190eXBlX3JlZ2lzdGVyX2Z1bmRhbWVudGFsCi19Ci0KLXsKLSAgIDxnbGliIDIuMjEgc3RhdGljIHR5cGUgZGF0YT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpyZWFsbG9jCi0gICBmdW46Z19yZWFsbG9jCi0gICBmdW46dHlwZV9ub2RlX2FueV9uZXdfVwotfQotCi17Ci0gICA8Z2xpYiAyLjIxIHN0YXRpYyB0eXBlIGRhdGE+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46cmVhbGxvYwotICAgZnVuOmdfcmVhbGxvYwotICAgZnVuOnR5cGVfbm9kZV9hbnlfbmV3X1cKLX0KLQotewotICAgPGdsaWIgMi4yMSBzdGF0aWMgdHlwZSBkYXRhPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLX0KLQotewotICAgPGdsaWIgMi4yMSBzdGF0aWMgdHlwZSBkYXRhPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnJlYWxsb2MKLSAgIGZ1bjpnX3JlYWxsb2MKLSAgIGZ1bjp0eXBlX2FkZF9mbGFnc19XCi19Ci0KLXsKLSAgIDxnbGliIDIuMjEgc3RhdGljIHR5cGUgZGF0YT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjp0eXBlX2FkZF9mbGFnc19XCi19Ci0KLSNwdGhyZWFkIG1lbWxlYWtzCi0KLXsKLSAgIFRocmVhZCBjcmVhdGlvbiBsZWFrCi0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46YWxsb2NhdGVfZHR2Ci0gICBmdW46X2RsX2FsbG9jYXRlKgotICAgZnVuOl9kbF9hbGxvY2F0ZSoKLSAgIGZ1bjpfX3B0aHJlYWRfaW5pdGlhbGl6ZV9taW5pbWFsCi19Ci0KLXsKLSAgIFRocmVhZCBtYW5hZ2VtZW50IGxlYWsKLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjphbGxvY2F0ZV9kdHYKLSAgIGZ1bjpfZGxfYWxsb2NhdGUqCi0gICBmdW46X2RsX2FsbG9jYXRlKgotICAgZnVuOl9fcHRocmVhZF8qCi19Ci0KLXsKLSAgIFRocmVhZCBtYW5hZ2VtZW50IGxlYWsgMgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1lbWFsaWduCi0gICBmdW46X2RsX2FsbG9jYXRlKgotICAgZnVuOl9kbF9hbGxvY2F0ZSoKLSAgIGZ1bjpfX3B0aHJlYWRfKgotfQotCi17Ci0gICBwdGhyZWFkX2NyZWF0ZSBTeXNjYWxsIHBhcmFtIHdyaXRlKGJ1ZikgcG9pbnRzIHRvIHVuaW5pdGlhbGlzZWQgYnl0ZShzKQotICAgTWVtY2hlY2s6UGFyYW0KLSAgIHdyaXRlKGJ1ZikKLSAgIGZ1bjpwdGhyZWFkX2NyZWF0ZUBAR0xJQkNfMi4yLjUKLSAgIGZ1bjpnX3RocmVhZF9jcmVhdGUqCi0KLX0KLQotIyBuc3NfcGFyc2VfKiBtZW1sZWFrICh1c2VkIGJ5IGdfb3B0aW9uX2NvbnRleHRfcGFyc2UpCi17Ci0gICBuc3NfcGFyc2VfKiBtZW1sZWFrCi0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46bnNzX3BhcnNlX3NlcnZpY2VfbGlzdAotICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAotfQotCi0jIGxpYm9pbCBzdXBwcmVzc2lvbnMKLXsKLSAgIDxsaWJvaWwgY3B1X2ZhdWx0X2NoZWNrX3RyeT4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgb2JqOi91c3IvbGliL2xpYm9pbC0wLjMuc28uMC4xLjAKLSAgIG9iajovdXNyL2xpYi9saWJvaWwtMC4zLnNvLjAuMS4wCi0gICBvYmo6L3Vzci9saWIvbGlib2lsLTAuMy5zby4wLjEuMAotICAgZnVuOm9pbF9jcHVfZmF1bHRfY2hlY2tfdHJ5Ci0gICBmdW46b2lsX3Rlc3RfY2hlY2tfaW1wbAotICAgZnVuOm9pbF9jbGFzc19vcHRpbWl6ZQotICAgZnVuOm9pbF9vcHRpbWl6ZV9hbGwKLSAgIGZ1bjpvaWxfaW5pdAotfQotCi17Ci0gICA8YW5ub3lpbmcgcmVhZCBlcnJvciBpbnNpZGUgZGxvcGVuIHN0dWZmIG9uIFVidW50dSBEYXBwZXIgeDg2XzY0PgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIG9iajovbGliL2xkLTIuMy42LnNvCi19Ci0KLXsKLSAgIDxVYnVudHUgRGFwcGVyIHg4Nl82ND4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBmdXRleCh1YWRkcjIpCi0gICBmdW46cHRocmVhZF9vbmNlCi0gICBvYmo6L2xpYi9saWJjLTIuMy42LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuMy42LnNvCi0gICBmdW46c2V0bG9jYWxlCi0gICBmdW46aW5pdF9wcmUKLSAgIGZ1bjpnX29wdGlvbl9jb250ZXh0X3BhcnNlCi0gICBmdW46Z3N0X2luaXRfY2hlY2sKLSAgIGZ1bjpnc3RfaW5pdAotICAgZnVuOmdzdF9jaGVja19pbml0Ci0gICBmdW46bWFpbgotfQotCi17Ci0gICA8VWJ1bnR1IERhcHBlciB4ODZfNjQgZGxvcGVuIHN0dWZmIGFnYWluPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4zLjYuc28KLSAgIG9iajovbGliL2xkLTIuMy42LnNvCi0gICBmdW46X2RsX29wZW4KLSAgIG9iajovbGliL2xpYmRsLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvbGliZGwtMi4zLjYuc28KLSAgIGZ1bjpkbG9wZW4KLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi0gICBmdW46Z3N0X3BsdWdpbl9sb2FkX2ZpbGUKLX0KLSMgdGhpcyBleGlzdHMgaW4gYSBidW5jaCBvZiBkaWZmZXJlbnQgdmFyaWF0aW9ucywgaGVuY2UgdGhlIHNob3J0IHRhaWwvdHJhY2UKLXsKLSAgIDxkbG9wZW4gaW52YWxpZCByZWFkIG9mIHNpemUgNCBzdXBwcmVzc2lvbiBvbiB0cG0ncyBVYnVudHUgZWRneS94ODY+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLX0KLXsKLSAgIDxhbmQgdGhlIHNhbWUgZm9yIDY0Yml0IHN5c3RlbXM+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLX0KLQotIyBNb3JlIGVkZ3kgc3VwcHJlc3Npb25zIChNaWtlKQotewotICAgPGRsb3BlbiBDb25kaXRpb24ganVtcCBzdXBwcmVzc2lvbnMgZm9yIFVidW50dSBFZGd5L3g4Nj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotfQotCi17Ci0gICA8ZGxvcGVuIENvbmRpdGlvbiBqdW1wIHN1cHByZXNzaW9ucyBmb3IgVWJ1bnR1IEVkZ3kveDg2PgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotfQotCi17Ci0gICA8ZGxvcGVuIENvbmRpdGlvbiBqdW1wIHN1cHByZXNzaW9ucyBmb3IgVWJ1bnR1IEVkZ3kveDg2PgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgZnVuOmRvX3N5bQotICAgZnVuOl9kbF9zeW0KLX0KLQotIyBUaGlzIG9uZSdzIG92ZXJseSBnZW5lcmFsLCBidXQgdGhlcmUncyB6ZXJvIG90aGVyIGluZm9ybWF0aW9uIGluIHRoZSBzdGFjawotIyB0cmFjZSAtIGp1c3QgdGhlc2UgZml2ZSBsaW5lcyEKLXsKLSAgIDxkbG9wZW4gQ29uZGl0aW9uIGp1bXAgc3VwcHJlc3Npb25zIGZvciBVYnVudHUgRWRneS94ODY+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotfQotCi17Ci0gICA8dGxzIGxlYWtzIG9uIEVkZ3kveDg2PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBmdW46X2RsX2FsbG9jYXRlX3RscwotICAgZnVuOnB0aHJlYWRfY3JlYXRlQEBHTElCQ18yLjEKLX0KLQotIyBUTFMgbGVha3MgZm9yIGZlaXN0eS94ODYKLXsKLSAgIDx0bHMgbGVha3Mgb24gRmVpc3R5L3g4Nj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjphbGxvY2F0ZV9kdHYKLSAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzCi0gICBmdW46cHRocmVhZF9jcmVhdGVAQEdMSUJDXzIuMQotfQotCi17Ci0gICA8bGliY2RpbyAwLjc2IGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBvYmo6L3Vzci9saWIvbGliY2Rpby5zby42LjAuMQotICAgZnVuOmNkaW9fb3Blbl9hbV9saW51eAotICAgb2JqOi91c3IvbGliL2xpYmNkaW8uc28uNi4wLjEKLSAgIGZ1bjpjZGlvX29wZW5fYW0KLX0KLQotewotICAgPEFkZHI4IG9uIEphbidzIEFNRDY0IHVidW50dSBGZWlzdHkgaW4gZGxfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjUuc28KLX0KLQotewotICAgPEZpcnN0IG9mIG1hbnkgQWxzYSBlcnJvcnM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46c25kX3BjbV9kaXJlY3Rfc2htX2NyZWF0ZV9vcl9jb25uZWN0Ci0gICBmdW46c25kX3BjbV9kc25vb3Bfb3BlbgotICAgZnVuOl9zbmRfcGNtX2Rzbm9vcF9vcGVuCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBmdW46c25kX3BjbV9vcGVuX3NsYXZlCi0gICBmdW46X3NuZF9wY21fcGx1Z19vcGVuCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBmdW46c25kX3BjbV9vcGVuX3NsYXZlCi0gICBmdW46X3NuZF9wY21fYXN5bV9vcGVuCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi19Ci0KLXsKLSAgIDxhbHNhIGVycm9yPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOnNuZCpfcGNtX2h3X3BhcmFtX3NldF9uZWFyCi19Ci0KLXsKLSAgIDxhbHNhIGVycm9yPgotICAgTWVtY2hlY2s6Q29uZAotICAgLi4uCi0gICBmdW46c25kKl9wY21faHdfcGFyYW1fc2V0X25lYXIKLX0KLQotewotICAgPGFsc2EgZXJyb3I+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBmdW46c25kX3BjbV9jbG9zZQotICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAotfQotewotICAgPGFsc2EgZXJyb3I+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46c25kX3BjbV9kaXJlY3Rfc2htX2NyZWF0ZV9vcl9jb25uZWN0Ci0gICBmdW46c25kX3BjbV9kbWl4X29wZW4KLSAgIGZ1bjpfc25kX3BjbV9kbWl4X29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9zb2Z0dm9sX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9wbHVnX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9hc3ltX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLX0KLXsKLSAgIDxhbHNhIGVycm9yPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnN0cmR1cAotICAgZnVuOnNuZF9kbG9ial9jYWNoZV9hZGQKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpzbmRfcGNtX2Rzbm9vcF9vcGVuCi0gICBmdW46X3NuZF9wY21fZHNub29wX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9wbHVnX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9hc3ltX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLX0KLSMgQ2F0Y2ggYWJvdXQgMTUgdmFyaWF0aW9ucyBvbiBpbnNlcnRpbmcgaW5mbyBpbnRvIGFuIEFMU0EKLSMgaW50ZXJuYWwgY2FjaGUKLXsKLSAgIDxhbHNhIGVycm9yPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgLi4uCi0gICBmdW46c25kKl9kbG9ial9jYWNoZV9hZGQKLSAgIG9iajovKmxpYiovbGliYXNvdW5kLnNvLjIuMC4wCi19Ci0KLXsKLSAgIDxhbHNhIGxlYWsgaW4gbG9hZGluZyBjb25maWd1cmF0aW9uPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgLi4uCi0gICBmdW46c25kX3BjbV9vcGVuX2NvbmYKLX0KLQotewotICAgPGFsc2EgbGVhayBzbmRfY29uZmlnX2hvb2tfbG9hZD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIG9iajovKmxpYiovbGliYXNvdW5kLnNvLjIuMC4wCi0gICAuLi4KLSAgIGZ1bjpzbmRfY29uZmlnX2hvb2tfbG9hZAotfQotCi17Ci0gICA8YWxzYSBsZWFrIHNuZF9jb25maWdfdXBkYXRlX3I+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBvYmo6LypsaWIqL2xpYmFzb3VuZC5zby4yLjAuMAotICAgLi4uCi0gICBmdW46c25kX2NvbmZpZ191cGRhdGVfcgotICAgZnVuOnNuZF9jb25maWdfdXBkYXRlCi19Ci17Ci0gICA8YWxzYSBsZWFrIHNuZF9jb25maWdfdXBkYXRlX3I+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46c3RyZHVwCi0gICAuLi4KLSAgIGZ1bjpzbmRfY29uZmlnX3VwZGF0ZV9yCi0gICBmdW46c25kX2NvbmZpZ191cGRhdGUKLX0KLXsKLSAgIDxhbHNhIGxlYWsgc25kX2NvbmZpZ19zZWFyY2hhX2hvb2tzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKLSAgIC4uLgotICAgZnVuOnNuZF9jb25maWdfc2VhcmNoYV9ob29rcwotfQotCi17Ci0gICA8bnNzIGxvb2t1cCB3aXRoaW4gQUxTQT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIG9iajovbGliL2xpYmMqLnNvCi0gICBmdW46X19uc3NfZGF0YWJhc2VfbG9va3VwCi0gICBvYmo6KgotICAgb2JqOioKLSAgIGZ1bjpnZXRncm5hbV9yCi0gICBmdW46Z2V0Z3JuYW0KLSAgIGZ1bjpzbmRfcGNtX2RpcmVjdF9wYXJzZV9vcGVuX2NvbmYKLX0KLQotewotICAgPGxpYnhjYiBsZWFrIG9uIFVidW50dSBGZWlzdHk+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46X1hDQkluaXREaXNwbGF5TG9jawotICAgZnVuOlhPcGVuRGlzcGxheQotfQotCi0jIEdDb25mIGludGVybmFsIGluaXRpYWxpc2F0aW9ucyByZWxhdGVkIHRvIGdldHRpbmcgdGhlIGRlZmF1bHQgY2xpZW50LgotewotICAgPE9yYml0IHNvbWV0aGluZyBvciBvdGhlcj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvY190Y3ZhbAotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28uKgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46Q09SQkFfT1JCX3N0cmluZ190b19vYmplY3QKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKLSAgIGZ1bjpnY29uZl9nZXRfY3VycmVudF9sb2NrX2hvbGRlcgotICAgZnVuOmdjb25mX2FjdGl2YXRlX3NlcnZlcgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPGdjb25mIGludGVybmFsIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2NfdGN2YWwKLSAgIG9iajoqCi0gICBmdW46UG9ydGFibGVTZXJ2ZXJfUE9BX3NlcnZhbnRfdG9fcmVmZXJlbmNlCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Ci19Ci17Ci0gICA8Z2NvbmYgaW50ZXJuYWwgbGVhaz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvY190Y3ZhbAotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28uKgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46Q09SQkFfT1JCX3N0cmluZ190b19vYmplY3QKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKLSAgIGZ1bjpnY29uZl9nZXRfY3VycmVudF9sb2NrX2hvbGRlcgotICAgZnVuOmdjb25mX2FjdGl2YXRlX3NlcnZlcgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPGdjb25mIGludGVybmFsIGluaXRpYWxpc2F0aW9uPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jKgotICAgZnVuOioKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCi0gICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAotICAgZnVuOk9SQml0X2RlbWFyc2hhbF92YWx1ZQotICAgZnVuOioKLSAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1YgotICAgZnVuOkNvbmZpZ1NlcnZlcl9nZXRfZGVmYXVsdF9kYXRhYmFzZQotICAgZnVuOioKLSAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKLX0KLXsKLSAgIDxnY29uZiBpbnRlcm5hbCBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jKgotICAgZnVuOioKLSAgIGZ1bjpJT1BfZ2VuZXJhdGVfcHJvZmlsZXMKLSAgIGZ1bjpPUkJpdF9tYXJzaGFsX29iamVjdAotICAgZnVuOk9SQml0X21hcnNoYWxfdmFsdWUKLSAgIGZ1bjoqCi0gICBmdW46T1JCaXRfc21hbGxfaW52b2tlX3N0dWIKLSAgIGZ1bjpDb25maWdTZXJ2ZXJfYWRkX2NsaWVudAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Ci19Ci17Ci0gICA8Z2NvbmYgaW50ZXJuYWwgaW5pdD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvY19ieV90YwotICAgZnVuOioKLSAgIGZ1bjpQb3J0YWJsZVNlcnZlcl9QT0Ffc2VydmFudF90b19yZWZlcmVuY2UKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKLX0KLXsKLSAgIDxnY29uZiBpbnRlcm5hbCBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jX2J5X3RjCi0gICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zby4qCi0gICBmdW46T1JCaXRfZGVtYXJzaGFsX0lPUgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9vYmplY3QKLSAgIGZ1bjpDT1JCQV9PUkJfc3RyaW5nX3RvX29iamVjdAotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgZnVuOmdjb25mX2dldF9jdXJyZW50X2xvY2tfaG9sZGVyCi0gICBmdW46Z2NvbmZfYWN0aXZhdGVfc2VydmVyCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zby4qCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zby4qCi0gICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Ci19Ci0KLXsKLSAgIDxpbnNlcnQgYSBzdXBwcmVzc2lvbiBuYW1lIGhlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2MqCi0gICBmdW46KgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnY29uZl9hY3RpdmF0ZV9zZXJ2ZXIKLX0KLQotIyBTb21lIGxpYk9SQml0L2Jvbm9ibyBpbml0aWFsaXNhdGlvbiBzdHVmZgotewotICAgPGJvbm9ibyBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46T1JCaXRfYWxsb2Nfc3RyaW5nCi0gICBmdW46Q09SQkFfc3RyaW5nX2R1cAotICAgZnVuOkJvbm9ib19BY3RpdmF0aW9uRW52VmFsdWVfc2V0Ci0gICBmdW46Ym9ub2JvX2FjdGl2YXRpb25faW5pdF9hY3RpdmF0aW9uX2VudgotICAgZnVuOmJvbm9ib19hY3RpdmF0aW9uX29yYl9pbml0Ci0gICBmdW46Ym9ub2JvX2FjdGl2YXRpb25faW5pdAotfQotewotICAgPGJvbm9ibyBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jKgotICAgZnVuOk9SQml0X3NtYWxsX2FsbG9jKgotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCi0gICBmdW46UG9ydGFibGVTZXJ2ZXJfUE9BX3NlcnZhbnRfdG9fcmVmZXJlbmNlCi0gICBvYmo6L3Vzci9saWIvbGliYm9ub2JvLTIuc28qCi19Ci17Ci0gICA8Ym9ub2JvIGluaXQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2NfdGN2YWwKLSAgIGZ1bjpPUkJpdF9zbWFsbF9hbGxvY2J1ZgotICAgZnVuOk9SQml0X2FkYXB0b3Jfc2V0dXAKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOk9SQml0X1BPQV9zZXR1cF9yb290Ci0gICBmdW46T1JCaXRfaW5pdF9pbnRlcm5hbHMKLSAgIGZ1bjpDT1JCQV9PUkJfaW5pdAotfQotewotICAgPGJvbm9ibyBpbml0IC0gbW9yZSByZWNlbnQgdmFyaWFudCBvZiBhYm92ZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvY190Y3ZhbAotICAgZnVuOk9SQml0X2FkYXB0b3Jfc2V0dXAKLSAgIGZ1bjoqCi0gICBmdW46T1JCaXRfUE9BX3NldHVwX3Jvb3QKLSAgIGZ1bjpPUkJpdF9pbml0X2ludGVybmFscwotICAgZnVuOkNPUkJBX09SQl9pbml0Ci19Ci17Ci0gICA8Ym9ub2JvIGluaXQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2MqCi0gICBmdW46T1JCaXRfc21hbGxfYWxsb2NidWYKLSAgIGZ1bjpib25vYm9fYWN0aXZhdGlvbl9pbml0X2FjdGl2YXRpb25fZW52Ci0gICBmdW46Ym9ub2JvX2FjdGl2YXRpb25fb3JiX2luaXQKLSAgIGZ1bjpib25vYm9fYWN0aXZhdGlvbl9pbml0Ci19Ci0KLSMgTW9yZSBHQ29uZiBzdHVmZiBmcm9tIHRoZSBGQzUgYnVpbGRib3QsIG1vc3RseSB2YXJpYXRpb25zIG9uIHRoZQotIyBhYm92ZSBzdGFjayB0cmFjZXMKLXsKLSAgIDxpbmNvbXBsZXRlbHkgaW5pdGlhbGlzZWQgT1JCaXQgYnVmZmVyPgotICAgTWVtY2hlY2s6UGFyYW0KLSAgIHdyaXRldih2ZWN0b3JbLi4uXSkKLSAgIGZ1bjp3cml0ZXYKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOmxpbmtfY29ubmVjdGlvbl93cml0ZXYKLSAgIGZ1bjpnaW9wX3NlbmRfYnVmZmVyX3dyaXRlCi0gICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKLSAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1YgotICAgZnVuOk9SQml0X3NtYWxsX2ludm9rZV9zdHViX24KLSAgIGZ1bjpPUkJpdF9jX3N0dWJfaW52b2tlCi0gICBmdW46Q29uZmlnU2VydmVyX3BpbmcKLSAgIGZ1bjpnY29uZl9hY3RpdmF0ZV9zZXJ2ZXIKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCi0gICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Ci19Ci17Ci0gICA8Z2NvbmYgaW5pdD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvYyoKLSAgIGZ1bjpPUkJpdF9zbWFsbF9hbGxvYyoKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOlBvcnRhYmxlU2VydmVyX1BPQV9zZXJ2YW50X3RvX3JlZmVyZW5jZQotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPGdjb25mIGluaXQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2MqCi0gICBmdW46T1JCaXRfc21hbGxfYWxsb2MKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46Q09SQkFfT1JCX3N0cmluZ190b19vYmplY3QKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgZnVuOmdjb25mX2dldF9jdXJyZW50X2xvY2tfaG9sZGVyCi0gICBmdW46Z2NvbmZfYWN0aXZhdGVfc2VydmVyCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPGdjb25mIGluaXQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2MqCi0gICBmdW46T1JCaXRfc21hbGxfYWxsb2MqCi0gICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCi0gICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAotICAgZnVuOkNPUkJBX09SQl9zdHJpbmdfdG9fb2JqZWN0Ci0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIGZ1bjpnY29uZl9nZXRfY3VycmVudF9sb2NrX2hvbGRlcgotICAgZnVuOmdjb25mX2FjdGl2YXRlX3NlcnZlcgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKLX0KLXsKLSAgIDxib25vYm8gaW5pdD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvYyoKLSAgIGZ1bjpPUkJpdF9zbWFsbF9hbGxvYyoKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46T1JCaXRfZGVtYXJzaGFsX3ZhbHVlCi0gICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKLSAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1YgotICAgZnVuOk9SQml0X3NtYWxsX2ludm9rZV9zdHViX24KLSAgIGZ1bjpPUkJpdF9jX3N0dWJfaW52b2tlCi0gICBmdW46Q29uZmlnU2VydmVyX2dldF9kZWZhdWx0X2RhdGFiYXNlCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKLX0KLXsKLSAgIDxnY29uZiBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jKgotICAgZnVuOk9SQml0X3NtYWxsX2FsbG9jKgotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCi0gICBmdW46T1JCaXRfT0FPYmplY3Rfb2JqZWN0X3RvX29iamtleQotICAgZnVuOklPUF9nZW5lcmF0ZV9wcm9maWxlcwotICAgZnVuOk9SQml0X21hcnNoYWxfb2JqZWN0Ci0gICBmdW46T1JCaXRfbWFyc2hhbF92YWx1ZQotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCi0gICBmdW46T1JCaXRfc21hbGxfaW52b2tlX3N0dWIKLSAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1Yl9uCi0gICBmdW46T1JCaXRfY19zdHViX2ludm9rZQotICAgZnVuOkNvbmZpZ1NlcnZlcl9hZGRfY2xpZW50Ci0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPEdMaWIgY2FjaGluZyB0aGUgaG9tZSBkaXI+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBvYmo6KmxpYmMtKi5zbwotICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAotICAgb2JqOioKLSAgIG9iajoqCi0gICBmdW46Z2V0cHduYW1fcgotICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4qCi0gICBmdW46Z19nZXRfaG9tZV9kaXIKLX0KLXsKLSAgIDxHTGliIGNhY2hpbmcgdGhlIHVzZXIgbmFtZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIG9iajoqbGliYy0qLnNvCi0gICBmdW46X19uc3NfZGF0YWJhc2VfbG9va3VwCi0gICBvYmo6KgotICAgb2JqOioKLSAgIGZ1bjpnZXRwd25hbV9yCi0gICBvYmo6L3Vzci9saWIqL2xpYmdsaWItMi4wLnNvLioKLSAgIGZ1bjpnX2dldF91c2VyX25hbWUKLX0KLXsKLSAgIDxHTGliIGNhY2hpbmcgdGhlIHRtcCBkaXI+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBvYmo6KmxpYmMtKi5zbwotICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAotICAgb2JqOioKLSAgIG9iajoqCi0gICBmdW46Z2V0cHduYW1fcgotICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4qCi0gICBmdW46Z19nZXRfdG1wX2RpcgotfQotCi17Ci0gICA8R0xpYiBjYWNoaW5nIHRoZSBob3N0IG5hbWU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBvYmo6KmxpYmMtKi5zbwotICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAotICAgb2JqOioKLSAgIG9iajoqCi0gICBmdW46Z2V0cHduYW1fcgotICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4wLioKLSAgIGZ1bjpnX2dldF9ob3N0X25hbWUKLX0KLQotCi0jIyBTb21lIEZvbnRjb25maWcgZXJyb3JzLgotewotICAgPEZpcnN0IHRpbWUgbG9hZCBvZiBhIGZvbnQgLSBmZWlzdHkgeDg2XzY0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOkZjUGF0dGVybk9iamVjdEluc2VydEVsdAotICAgZnVuOkZjUGF0dGVybk9iamVjdEFkZFdpdGhCaW5kaW5nCi0gICBmdW46RmNQYXR0ZXJuQXBwZW5kCi0gICBmdW46RmNFbmRFbGVtZW50Ci0gICBvYmo6L3Vzci9saWIvbGliZXhwYXQuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJleHBhdC5zby4qCi0gICBvYmo6L3Vzci9saWIvbGliZXhwYXQuc28uKgotICAgZnVuOlhNTF9QYXJzZUJ1ZmZlcgotICAgZnVuOkZjQ29uZmlnUGFyc2VBbmRMb2FkCi0gICBmdW46RmNDb25maWdQYXJzZUFuZExvYWQKLSAgIGZ1bjpGY1BhcnNlSW5jbHVkZQotICAgZnVuOkZjRW5kRWxlbWVudAotICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJleHBhdC5zby4qCi0gICBvYmo6L3Vzci9saWIvbGliZXhwYXQuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKLSAgIGZ1bjpYTUxfUGFyc2VCdWZmZXIKLSAgIGZ1bjpGY0NvbmZpZ1BhcnNlQW5kTG9hZAotfQotewotICAgPEZpcnN0IHRpbWUgbG9hZCBvZiBhIGZvbnQgLSBnZW5lcmljPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgLi4uCi0gICBmdW46RmNJbml0TG9hZENvbmZpZwotfQotCi0jIElzc3VlcyB3aXRoIHVidW50dSBIYXJkeSwgc2FtZSBjcmFjayBhcyBmb3IgcHJldmlvdXMgdWJ1bnR1cwotewotICAgPHRscyBsZWFrIGdlbmVyaWMgdWJ1bnR1IGhhcmR5IHg4Nj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIG9iajoqCi0gICBmdW46X2RsX2FsbG9jYXRlX3RscwotICAgZnVuOnB0aHJlYWRfY3JlYXRlQEAqCi0gICBvYmo6L3Vzci9saWIvbGliZ3RocmVhZCoKLSAgIGZ1bjpnX3RocmVhZF8qCi19Ci0KLSMgSSd2ZSBtYWRlIHRoaXMgdmVyc2lvbiBnZW5lcmljLCBzbyB0aGF0IGl0IGNvdmVycyBmdXR1cmUgbW9kaWZpY2F0aW9ucwotIyBvZiBsaWJyYXJ5IG5hbWVzCi17Ci0gICA8dGxzIGxlYWsgZ2VuZXJpYz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIG9iajoqCi0gICBmdW46X2RsX2FsbG9jYXRlX3RscwotICAgZnVuOnB0aHJlYWRfY3JlYXRlQEAqCi0gICBmdW46Z190aHJlYWRfKgotfQotCi0jIHNlcmllcyBvZiBpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA0IGluIGdfbW9kdWxlX29wZW4gZm9yIHVidW50dQotIyBoYXJkeSB4ODYvMzJiaXQKLXsKLSAgIDxpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA0IHdpdGhpbiA8Z19tb2R1bGVfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfKgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF8qCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA0IHdpdGhpbiA8Z19tb2R1bGVfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfKgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfKgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi0gICBmdW46Z3N0X3BsdWdpbl9sb2FkKgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgZnVuOl9kbF9zeW0KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxzeW0KLSAgIGZ1bjpnX21vZHVsZV9zeW1ib2wKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi0gICBmdW46Z3N0X3BsdWdpbl9sb2FkXyoKLX0KLQotIyBzZXJpZXMgb2YgaW52YWxpZCByZWFkIG9mIHNpemUgOCBpbiBnX21vZHVsZV9vcGVuIGZvciB1YnVudHUKLSMgaGFyZHkgeDg2LzY0Yml0Ci17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDggd2l0aGluIDxnX21vZHVsZV9vcGVuPgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDggd2l0aGluIDxnX21vZHVsZV9vcGVuPgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA4IHdpdGhpbiA8Z19tb2R1bGVfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBmdW46ZGxzeW0KLSAgIGZ1bjpnX21vZHVsZV9zeW1ib2wKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxHTGliIGNhY2hpbmc+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmMtMi43LnNvCi0gICBmdW46X19uc3NfcGFzc3dkX2xvb2t1cAotICAgZnVuOmdldHB3bmFtX3IKLX0KLQotewotICAgPEdMaWIgY2FjaGluZz4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIGZ1bjpfX2xpYmNfZGxvcGVuX21vZGUKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIGZ1bjpfX25zc19wYXNzd2RfbG9va3VwCi0gICBmdW46Z2V0cHduYW1fcgotfQotCi17Ci0gICA8R0xpYiBjYWNoaW5nPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQotICAgZnVuOl9fbnNzX2xvb2t1cF9mdW5jdGlvbgotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJuc3NfY29tcGF0LTIuNy5zbwotICAgZnVuOl9uc3NfY29tcGF0X2dldHB3bmFtX3IKLSAgIGZ1bjpnZXRwd25hbV9yCi19Ci0KLXsKLSAgIDxHTGliIGNhY2hpbmc+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYm5zc19jb21wYXQtMi43LnNvCi0gICBmdW46X25zc19jb21wYXRfZ2V0cHduYW1fcgotICAgZnVuOmdldHB3bmFtX3IKLX0KLQotewotICAgPEdMaWIgY2FjaGluZz4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIGZ1bjpfX2xpYmNfZGxvcGVuX21vZGUKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBmdW46Z2V0cHduYW1fcgotfQotCi0jIyBMZWFrcyBpbiBBTFNBICh2YXJpYXRpb25zIG9mIGxlYWsgZnJvbSBzbmRfY29uZmlnX2xvYWQxKQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9zbmRfY29uZmlnX21ha2UKLSAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46X3NuZF9jb25maWdfbWFrZQotICAgZnVuOl9zbmRfY29uZmlnX21ha2VfYWRkCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9zbmRfY29uZmlnX21ha2UKLSAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOnNuZF9jb25maWdfbG9hZDEKLX0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46X3NuZF9jb25maWdfbWFrZQotICAgZnVuOl9zbmRfY29uZmlnX21ha2VfYWRkCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46X3NuZF9jb25maWdfbWFrZQotICAgZnVuOl9zbmRfY29uZmlnX21ha2VfYWRkCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9zbmRfY29uZmlnX21ha2UKLSAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9zbmRfY29uZmlnX21ha2UKLSAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnNuZDFfZGxvYmpfY2FjaGVfYWRkCi0gICBmdW46c25kX2N0bF9vcGVuX25vdXBkYXRlCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46KgotICAgZnVuOnNuZDFfZGxvYmpfY2FjaGVfYWRkCi0gICBmdW46c25kX2N0bF9vcGVuX25vdXBkYXRlCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLQotIyBUaGUgZm9sbG93aW5nIGFyZSBsZWFrcyBvZiBjYXBzIHRoYXQgbmVlZCB0byBiZSBjcmVhdGVkIGR5bmFtaWNhbGx5Ci0jIGluIHRoZSB0eXBlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgcGx1Z2luICh1c2VkIGZvciBwYWQgdGVtcGxhdGVzKS4KLQotewotICAgPExlYWsgaW4gb2dtcGFyc2Vycz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfc2ltcGxlCi0gICBmdW46KgotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLSAgIGZ1bjpnc3RfZWxlbWVudF9yZWdpc3RlcgotfQotCi17Ci0gICA8TGVhayBpbiBvZ21wYXJzZXJzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46Z190eXBlX2NsYXNzX3JlZgotICAgZnVuOmdzdF9lbGVtZW50X3JlZ2lzdGVyCi0gICBmdW46Z3N0X29nbV9wYXJzZV9wbHVnaW5faW5pdAotICAgZnVuOnBsdWdpbl9pbml0Ci19Ci0KLXsKLSAgIDxMZWFrIGluIHZpZGVvdGVzdHNyYz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X3ZpZGVvX3Rlc3Rfc3JjX2Jhc2VfaW5pdAotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLSAgIGZ1bjpnc3RfZWxlbWVudF9yZWdpc3RlcgotfQotCi17Ci0gICA8TGVhayBpbiB2aWRlb3Rlc3RzcmM+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46Z19tYWxsb2MKLSAgIGZ1bjpnX3NsaWNlX2FsbG9jCi0gICBmdW46Z3N0X2NhcHNfbmV3X2VtcHR5Ci0gICBmdW46Z3N0X2NhcHNfY29weQotICAgZnVuOmdzdF92aWRlb190ZXN0X3NyY19nZXRjYXBzCi0gICBmdW46Z3N0X3ZpZGVvX3Rlc3Rfc3JjX2Jhc2VfaW5pdAotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLSAgIGZ1bjpnc3RfZWxlbWVudF9yZWdpc3RlcgotfQotCi17Ci0gICA8TGVhayBpbiBmZm1wZWdjb2xvcnNwYWNlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOmdzdF9mZm1wZWdjc3BfY29kZWN0eXBlX3RvX2NhcHMKLSAgIGZ1bjpnc3RfZmZtcGVnY29sb3JzcGFjZV9yZWdpc3RlcgotICAgZnVuOnBsdWdpbl9pbml0Ci19Ci0KLXsKLSAgIDxMZWFrIGluIGZmbXBlZ29jb2xvcnNwYWNlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOmdzdF9jYXBzX2NvcHkKLSAgIGZ1bjpnc3RfZmZtcGVnY29sb3JzcGFjZV9yZWdpc3RlcgotICAgZnVuOnBsdWdpbl9pbml0Ci19Ci0KLXsKLSAgIDxMZWFrIGluIGdzdGZmbXBlZ2RlbXV4PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOmdzdF9jYXBzX25ld19hbnkKLSAgIGZ1bjpnc3RfZmZtcGVnZGVtdXhfcmVnaXN0ZXIKLSAgIGZ1bjpwbHVnaW5faW5pdAotfQotCi17Ci0gICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOmdzdF9jYXBzX2NvcHkKLSAgIGZ1bjpnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzCi19Ci0KLXsKLSAgIDxMZWFrIGluIEdzdEF1ZGlvRmlsdGVyIHN1YmNsYXNzZXMsIHZhcmlhbnQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46cmVhbGxvYwotICAgZnVuOmdfcmVhbGxvYwotICAgZnVuOmdfcHRyX2FycmF5X21heWJlX2V4cGFuZAotICAgZnVuOmdfcHRyX2FycmF5X2FkZAotICAgZnVuOmdzdF9jYXBzX2FwcGVuZAotICAgZnVuOmdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMKLX0KLQotewotICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpyZWFsbG9jCi0gICBmdW46Z19yZWFsbG9jCi0gICBmdW46Z19wdHJfYXJyYXlfbWF5YmVfZXhwYW5kCi0gICBmdW46Z19wdHJfYXJyYXlfYWRkCi0gICBmdW46Z3N0X2NhcHNfYXBwZW5kCi0gICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcwotfQotCi17Ci0gICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzLCB2YXJpYW50PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnJlYWxsb2MKLSAgIGZ1bjpnX3JlYWxsb2MKLSAgIGZ1bjpnX3B0cl9hcnJheV9tYXliZV9leHBhbmQKLSAgIGZ1bjpnX3B0cl9hcnJheV9hZGQKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcwotfQotCi17Ci0gICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzLCB2YXJpYW50Mj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnX3B0cl9hcnJheV9zaXplZF9uZXcKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcwotfQotewotICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudDM+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46cmVhbGxvYwotICAgZnVuOmdfcmVhbGxvYwotICAgZnVuOmdfYXJyYXlfbWF5YmVfZXhwYW5kCi0gICBmdW46Z19hcnJheV9zaXplZF9uZXcKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnc3RfdmFsdWVfaW5pdF9hbmRfY29weQotICAgZnVuOmdzdF9zdHJ1Y3R1cmVfY29weQotICAgZnVuOmdzdF9jYXBzX2NvcHkKLSAgIGZ1bjpnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzCi19Ci17Ci0gICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzLCB2YXJpYW50ND4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpyZWFsbG9jCi0gICBmdW46Z19yZWFsbG9jCi0gICBmdW46Z19hcnJheV9tYXliZV9leHBhbmQKLSAgIGZ1bjpnX2FycmF5X3NpemVkX25ldwotICAgZnVuOioKLSAgIGZ1bjpnc3Rfc3RydWN0dXJlX2NvcHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcwotfQotewotICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudDU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46Z19tYWxsb2MKLSAgIGZ1bjpnX3NsaWNlX2FsbG9jCi0gICBmdW46Z19hcnJheV9zaXplZF9uZXcKLSAgIGZ1bjoqCi0gICBmdW46Z3N0X3N0cnVjdHVyZV9jb3B5Ci0gICBmdW46Z3N0X2NhcHNfY29weQotICAgZnVuOmdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMKLX0KLQotewotICAgPExlYWsgaW4gcmlmZi1tZWRpYT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfcmlmZl9jcmVhdGVfKl90ZW1wbGF0ZV9jYXBzCi19Ci17Ci0gICA8TGVhayBpbiByaWZmLW1lZGlhPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnJlYWxsb2MKLSAgIGZ1bjpnX3JlYWxsb2MKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnc3Rfc3RydWN0dXJlX2NvcHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2NhcHNfYXBwZW5kCi0gICBmdW46Z3N0X3JpZmZfY3JlYXRlXypfdGVtcGxhdGVfY2FwcwotfQotewotICAgPExlYWsgaW4gcmlmZi1tZWRpYT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnX2FycmF5X3NpemVkX25ldwotICAgZnVuOioKLSAgIGZ1bjpnc3Rfc3RydWN0dXJlX2NvcHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2NhcHNfYXBwZW5kCi0gICBmdW46Z3N0X3JpZmZfY3JlYXRlXypfdGVtcGxhdGVfY2FwcwotfQotCi0jIyBMZWFrcyBpbiBwYW5nbyAoYmlsYm9lZDogZ2VudG9vIHVuc3RhYmxlIGFtZDY0KQotCi17Ci0gICA8UGFuZ28gbGVhayAtIGdlbmVyaWM+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpwYW5nb19sYXlvdXRfZ2V0X3BpeGVsX2V4dGVudHMKLX0KLXsKLSAgIDxpbnNlcnQgYSBzdXBwcmVzc2lvbiBuYW1lIGhlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46cGFuZ29fbGFuZ3VhZ2VfZnJvbV9zdHJpbmcKLSAgIGZ1bjpwYW5nb19sYW5ndWFnZV9nZXRfZGVmYXVsdAotICAgZnVuOnBhbmdvX2NvbnRleHRfaW5pdAotICAgZnVuOmdfdHlwZV9jcmVhdGVfaW5zdGFuY2UKLSAgIGZ1bjpnX29iamVjdF9jb25zdHJ1Y3RvcgotICAgZnVuOmdfb2JqZWN0X25ld3YKLSAgIGZ1bjpnX29iamVjdF9uZXdfdmFsaXN0Ci0gICBmdW46Z19vYmplY3RfbmV3Ci0gICBmdW46cGFuZ29fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQKLX0KLQotewotICAgPFBhbmdvTGFuZ3VhZ2UgY2FuIG5ldmVyIGJlIGZyZWVkPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOnBhbmdvX2xhbmd1YWdlX2Zyb21fc3RyaW5nCi19Ci0KLQotIyMgTGVhayBvZiBldmVyeXRoaW5nIGFsbG9jYXRlZCBieSBnc3QtbGliYXYgcGx1Z2luIGluaXQKLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpnc3RfZmZtcGVnX2NmZ19pbml0Ci19Ci0KLSMjIExlYWsgb2YgR0lPIG1vZHVsZSB0aHJvdWdoIGdub21ldmZzCi0KLXsKLSAgIDxnaW8gbGVhaz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46Z190eXBlX2NyZWF0ZV9pbnN0YW5jZQotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnX2lvX21vZHVsZV9uZXcKLSAgIGZ1bjpnX2lvX21vZHVsZXNfbG9hZF9hbGxfaW5fZGlyZWN0b3J5Ci0gICBmdW46KgotICAgZnVuOmdldF9kZWZhdWx0X3ZmcwotfQotCi0jIyBDb25kaXRpb25hbCBqdW1wIGluIGdldGFkZHJpbmZvIChiaWxib2VkLCBnZW50b28gfmFtZDY0LCBEZWMgMTMgMjAwOCkKLXsKLSAgIDxMZWFrIG9mIGFkZHJpbmZvIGluIGVzZD4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpnYWloX2luZXQKLSAgIGZ1bjpnZXRhZGRyaW5mbwotfQotCi0jIyBEeW5hbWljIHBhZCB0ZW1wbGF0ZXMgaW4gbXhmbXV4Ci17Ci0gICA8RHluYW1pYyBwYWQgdGVtcGxhdGVzIGluIG14Zm11eD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgZnVuOm14Zl8qX2luaXQKLSAgIGZ1bjpwbHVnaW5faW5pdAotfQotCi0jIyBXZSBkb24ndCBrbm93IGlmIGZmbXBlZyBmcmVlcyB0aGlzIG9yIG5vdCBhbmQgYmV0dGVyIHBhc3MgYSBjb3B5IGZvciBzYWZldHkKLXsKLSAgIDxpbnNlcnQgYSBzdXBwcmVzc2lvbiBuYW1lIGhlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46Z19tYWxsb2MKLSAgIGZ1bjpnX3N0cmR1cAotICAgZnVuOmdzdF9mZm1wZWdfY2ZnX2ZpbGxfY29udGV4dAotICAgZnVuOmdzdF9mZm1wZWdlbmNfc2V0Y2FwcwotICAgZnVuOmdzdF9wYWRfc2V0X2NhcHMKLX0KLQotIyMgTGVhay9vdmVycmVhZHMgd2l0aCBnbGliYy0yLjEwCi0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpkb19zeW0KLSAgIGZ1bjpkbHN5bV9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxzeW0KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46ZG9fc3ltCi0gICBmdW46ZGxzeW1fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsc3ltCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW4qCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0Ci0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuKgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX2NoZWNrX21hcF92ZXJzaW9ucwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW4qCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuKgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0KgotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9tYXBfb2JqZWN0KgotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9jaGVja19jYWxsZXIKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW4qCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX2NoZWNrX2NhbGxlcgotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgb2JqOi9saWIqL2xpYmMtMi4xMC4qLnNvCi0gICBvYmo6L2xpYiovbGliYy0yLjEwLiouc28KLSAgIGZ1bjpfdmduVV9mcmVlcmVzCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIqL2xpYmMtMi4xMC4qLnNvCi0gICBvYmo6L2xpYiovbGliYy0yLjEwLiouc28KLSAgIGZ1bjpfdmduVV9mcmVlcmVzCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBteXN0ZXJpb3VzIGludmFsaWQgZnJlZSBvbiBleGl0PgotICAgTWVtY2hlY2s6RnJlZQotICAgZnVuOmZyZWUKLSAgIG9iajovbGliKi9saWJjLTIuMTAuKi5zbwotICAgb2JqOi9saWIqL2xpYmMtMi4xMC4qLnNvCi0gICBmdW46X3ZnblVfZnJlZXJlcwotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX2ZpbmkKLSAgIGZ1bjpfX3J1bl9leGl0X2hhbmRsZXJzCi0gICBmdW46ZXhpdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9maW5pCi0gICBmdW46X19ydW5fZXhpdF9oYW5kbGVycwotICAgZnVuOmV4aXQKLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfc29ydF9maW5pCi0gICBmdW46X2RsX2ZpbmkKLSAgIGZ1bjpfX3J1bl9leGl0X2hhbmRsZXJzCi0gICBmdW46ZXhpdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9zb3J0X2ZpbmkKLSAgIGZ1bjpfZGxfZmluaQotICAgZnVuOl9fcnVuX2V4aXRfaGFuZGxlcnMKLSAgIGZ1bjpleGl0Ci19Ci0KLSMgZ2xpYmMtMi4xMCBkbCBvdmVycmVhZHMKLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfZml4dXAKLSAgIGZ1bjpfZGxfcnVudGltZV9yZXNvbHZlCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9maXh1cAotICAgZnVuOl9kbF9ydW50aW1lX3Jlc29sdmUKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLSAgIGZ1bjpfZGxfZml4dXAKLSAgIGZ1bjpfZGxfcnVudGltZV9yZXNvbHZlCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLSAgIGZ1bjpfZGxfZml4dXAKLSAgIGZ1bjpfZGxfcnVudGltZV9yZXNvbHZlCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46Y2FsbF9pbml0Ci0gICBmdW46X2RsX2luaXQKLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfaW5pdAotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpkbF9tYWluCi0gICBmdW46X2RsX3N5c2RlcF9zdGFydAotICAgZnVuOl9kbF9zdGFydAotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpkbF9tYWluCi0gICBmdW46X2RsX3N5c2RlcF9zdGFydAotICAgZnVuOl9kbF9zdGFydAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpkb19sb29rdXBfeAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLSAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0Ci0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi0gICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucwotICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAotICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKLSAgIGZ1bjpfZGxfY2hlY2tfYWxsX3ZlcnNpb25zCi0gICBmdW46dmVyc2lvbl9jaGVja19kb2l0Ci0gICBmdW46X2RsX3JlY2VpdmVfZXJyb3IKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfY2hlY2tfYWxsX3ZlcnNpb25zCi0gICBmdW46dmVyc2lvbl9jaGVja19kb2l0Ci0gICBmdW46X2RsX3JlY2VpdmVfZXJyb3IKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucwotICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAotICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKLSAgIGZ1bjpfZGxfY2hlY2tfYWxsX3ZlcnNpb25zCi0gICBmdW46dmVyc2lvbl9jaGVja19kb2l0Ci0gICBmdW46X2RsX3JlY2VpdmVfZXJyb3IKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi0gICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucwotICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAotICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46aW5pdF90bHMKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOmluaXRfdGxzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9wcm90ZWN0X3JlbHJvCi0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjpkb19sb29rdXBfeAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLSAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0Ci0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX3NldHVwX2hhc2gKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjpfZGxfbmV3X29iamVjdAotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2Zyb21fZmQKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpfZGxfbmV3X29iamVjdAotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2Zyb21fZmQKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46b3BlbmF1eAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOm9wZW5hdXgKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX21hcF9vYmplY3QKLSAgIGZ1bjpvcGVuYXV4Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3QKLSAgIGZ1bjpvcGVuYXV4Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjpvcGVuX3BhdGgKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOm9wZW5hdXgKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpvcGVuX3BhdGgKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOm9wZW5hdXgKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX25ld19vYmplY3QKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9uZXdfb2JqZWN0Ci0gICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX25ld19vYmplY3QKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjpfZGxfbmFtZV9tYXRjaF9wCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX25hbWVfbWF0Y2hfcAotICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKLSAgIGZ1bjpfZGxfY2hlY2tfYWxsX3ZlcnNpb25zCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46ZG9fbG9va3VwX3gKLSAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46ZG9fbG9va3VwX3gKLSAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Ci19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpkb19sb29rdXBfeAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOmRsX29wZW5fd29ya2VyCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOmRsX29wZW5fd29ya2VyCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX25hbWVfbWF0Y2hfcAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46ZGxfb3Blbl93b3JrZXIKLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KgotICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOmRsX29wZW5fd29ya2VyCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Ci0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Ci0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46b3BlbmF1eAotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKLSAgIGZ1bjpfZGxfY2xvc2UKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKLSAgIGZ1bjpfZGxfY2xvc2UKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46X2RsX2Nsb3NlX3dvcmtlcgotICAgZnVuOl9kbF9jbG9zZQotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOmRsZXJyb3JfcnVuCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKLSAgIGZ1bjpfZGxfY2xvc2UKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOmZpbGxpbl9ycGF0aAotICAgZnVuOl9kbF9pbml0X3BhdGhzCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOmZpbGxpbl9ycGF0aAotICAgZnVuOl9kbF9pbml0X3BhdGhzCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46ZmlsbGluX3JwYXRoCi0gICBmdW46X2RsX2luaXRfcGF0aHMKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOmZpbGxpbl9ycGF0aAotICAgZnVuOl9kbF9pbml0X3BhdGhzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46bWFwX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkb19wcmVsb2FkCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46bWFwX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkb19wcmVsb2FkCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBvcGVuKGZpbGVuYW1lKQotICAgZnVuOm9wZW4KLSAgIGZ1bjpvcGVuX3ZlcmlmeQotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46bWFwX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkb19wcmVsb2FkCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6UGFyYW0KLSAgIHN0YXQoZmlsZV9uYW1lKQotICAgZnVuOl94c3RhdAotICAgZnVuOm9wZW5fcGF0aAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46b3BlbmF1eAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotIyBnbGliYy0yLjEwIHRscyBpc3N1ZXMKLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KgotICAgZnVuOmluaXRfdGxzCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjppbml0X3RscwotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjppbml0X3RscwotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOmluaXRfdGxzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9hbGxvY2F0ZV90bHNfaW5pdAotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzX2luaXQKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzX2luaXQKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOl9kbF9hbGxvY2F0ZV90bHNfaW5pdAotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpfX3RscyoKLSAgIG9iajoqCi0gICBvYmo6KgotICAgZnVuOl92Z25VX2ZyZWVyZXMKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBhcmNoX3ByY3RsKGFyZzIpCi0gICBmdW46aW5pdF90bHMKLX0KLSMgR0xpYiBjYWNoaW5nIHRtcC9ob21lIGRpcmVjdG9yaWVzIChnbGliYy0yLjEwIHZhcmlhbnRzKQotewotICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotICAgZnVuOioKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIGZ1bjpfX25zc19sb29rdXAKLSAgIGZ1bjpnZXRwd25hbSoKLX0KLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotICAgZnVuOioKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIGZ1bjpfX25zc19sb29rdXAKLSAgIGZ1bjpnZXRwd25hbSoKLX0KLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOmRvX2Rsb3BlbgotICAgZnVuOioKLSAgIGZ1bjpkbGVycm9yX3J1bgotICAgZnVuOioKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIGZ1bjpfX25zc19sb29rdXAKLSAgIGZ1bjpnZXRwd25hbSoKLX0KLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46ZG9fZGxvcGVuCi0gICBmdW46KgotICAgZnVuOmRsZXJyb3JfcnVuCi0gICBmdW46KgotICAgZnVuOl9fbnNzX2xvb2t1cF9mdW5jdGlvbgotICAgZnVuOl9fbnNzX2xvb2t1cAotICAgZnVuOmdldHB3bmFtKgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX2FkZF90b19zbG90aW5mbwotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpQYXJhbQotICAgb3BlbihmaWxlbmFtZSkKLSAgIGZ1bjpvcGVuCi0gICBmdW46b3Blbl92ZXJpZnkKLSAgIGZ1bjpvcGVuX3BhdGgKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotfQotCi0KLQotIyBHTW9kdWxlIGlzc3VlcyB3aXRoIGdsaWJjLTIuMTAKLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOmRsc3ltCi0gICBmdW46Z19tb2R1bGVfc3ltYm9sCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46Z19tb2R1bGVfKgotICAgZnVuOmdzdF9wbHVnaW4qCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOmdfbW9kdWxlXyoKLSAgIGZ1bjpnc3RfcGx1Z2luKgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpkbG9wZW4qCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotewotICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpkbHN5bQotICAgZnVuOmdfbW9kdWxlX3N5bWJvbAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpkbG9wZW4qCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi0jIExlYWsgaW4gR1NsaWNlCi17Ci0gICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46Z19wYXJzZV9kZWJ1Z19zdHJpbmcKLSAgIGZ1bjpzbGljZV9jb25maWdfaW5pdAotICAgZnVuOmdfc2xpY2VfaW5pdF9ub21lc3NhZ2UKLSAgIGZ1bjpfZ19zbGljZV90aHJlYWRfaW5pdF9ub21lc3NhZ2UKLSAgIGZ1bjpnX3RocmVhZF9pbml0X2dsaWIKLX0KLQotIyAyLjEwIHB0aHJlYWQgaXNzdWVzCi17Ci0gICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X19wdGhyZWFkX2luaXRpYWxpemVfbWluaW1hbAotfQotCi0jIGdsaWJjIDIuMTEgY29uZGl0aW9uYWwKLXsKLSAgIDxnbGliYy0yLjExIGNvbmRpdGlvbmFsPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi0gICBmdW46X2RsX3N5c2RlcF9zdGFydAotICAgZnVuOl9kbF9zdGFydAotICAgb2JqOi9saWI2NC9sZC0yLjExLnNvCi19Ci0KLSMgZ2xpYmMgMi4xMSBMZWFrCi0KLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjIuNQotfQotCi17Ci0gICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOl9kbF8qCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjIuNQotfQotCi17Ci0gICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOl9kbF8qCi0gICBmdW46X2RsXyoKLSAgIGZ1bjpfZGxfKgotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKLX0KLQotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIGZ1bjoqCi0gICBmdW46X2RsXyoKLSAgIGZ1bjpvcGVuYXV4Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKLX0KLQotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3QKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMi41Ci19Ci0KLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46X2RsX25ld19vYmplY3QKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCi0gICBmdW46X2RsX21hcF9vYmplY3QKLSAgIGZ1bjpvcGVuYXV4Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKLX0KLQotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIGZ1bjoqCi0gICBmdW46X2RsXyoKLSAgIGZ1bjpfZGxfKgotICAgZnVuOl9kbF8qCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjIuNQotfQotCi0jIGdsaWIgdHlwZSBsZWFrcwotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMKLX0KLQotIyBuZXcgcmVnaXN0cnkgc3lzdGVtCi0jIGFsbCBvZiB0aGlzIHdpbGwgb25seSBiZSBjcmVhdGVkIG9uY2Ugd2hlbiBsb2FkaW5nIHJlZ2lzdHJ5LgotCi17Ci0gICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgLi4uCi0gICBmdW46X3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbgotfQotCi0jIHN5c3RlbS13aWRlIHRhZ3MKLSMgdGhlc2UgdGFncyBhcmUgcmVnaXN0ZXJlZCBvbmNlCi0KLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnc3RfdGFnX3JlZ2lzdGVyCi0gICBmdW46X2dzdF90YWdfaW5pdGlhbGl6ZQotfQotCi0jIHN5c3RlbS13aWRlIHR5cGUgY2xhc3NlcyB0aGF0IHdlIGtlZXAgcmVmZXJlbmNlZAotCi17Ci0gICA8Z190eXBlX2NsYXNzX3JlZiBsZWFrcz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLX0KLQotIyBsZWFraW5nIGNhY2hlZCBxdWVyaWVzIHdoaWNoIGFyZSBvbmx5IGluaXRpYWxpemVkIG9uY2UKLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpfZ3N0X3F1ZXJ5X2luaXRpYWxpemUKLSAgIGZ1bjppbml0X3Bvc3QKLX0KLQotIyBtYWNvc3ggKGxlb3BhcmQpIGxpYnJhcnkgbG9hZGVyIGxlYWsKLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46X1pud20KLSAgIGZ1bjpfWk5TczRfUmVwOV9TX2NyZWF0ZUVtbVJLU2FJY0UKLSAgIGZ1bjpfWk5TczEyX1NfY29uc3RydWN0SVBLY0VFUGNUX1MzX1JLU2FJY0VTdDIwZm9yd2FyZF9pdGVyYXRvcl90YWcKLSAgIGZ1bjpfWk5Tc0MyRVBLY1JLU2FJY0UKLSAgIGZ1bjpfWjQxX19zdGF0aWNfaW5pdGlhbGl6YXRpb25fYW5kX2Rlc3RydWN0aW9uXzBpaQotICAgZnVuOl9aTjE2SW1hZ2VMb2FkZXJNYWNoTzE4ZG9Nb2RJbml0RnVuY3Rpb25zRVJLTjExSW1hZ2VMb2FkZXIxMUxpbmtDb250ZXh0RQotfQotCi0jIEdPYmplY3QgdHlwZSByZWdpc3RyYXRpb24KLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpfZ19hdG9taWNfYXJyYXlfY29weQotfQotCi17Ci0gICA8Z2V0ZGVsaW0gb25lLXRpbWUgaW5pdHMgY2FsbGVkIGZyb20gbGlic2VsaW51eD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIGZ1bjpnZXRkZWxpbQotICAgb2JqOipsaWJzZWxpbnV4KgotfQotCi17Ci0gICA8d2VpcmQgb25lIHdoZW4gcmUtcmVhZGluZyByZWdpc3RyeT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgb2JqOiovc2VkCi19Ci0KLXsKLSAgIDx3ZWlyZCBvbmUgd2hlbiByZS1yZWFkaW5nIHJlZ2lzdHJ5PgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIC4uLgotICAgb2JqOiovc2VkCi19Ci0KLSMgR0xpYiAyLjIzIGludGVyZmFjZSB2dGFibGUKLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMKLX0KLQotewotICAgPGxlYWsgaW4gZGFzaCBvbiBkZWJpYW4gc2lkPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgb2JqOiovZGFzaAotfQotCi0jIGxpYnRvb2wvZ2VudG9vIGZha2UgbGVhawotIyBpdCBhY3R1YWxseSBydW5zIGJhc2ggYW5kIHZhbGdyaW5kIGNvbXBsYWlucwotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIG9iajovYmluL2Jhc2gKLX0KLQotewotICAgPGlnbm9yZSBwb3NzYmx5LWxvc3QgbGVha3MgaW4gdGhlIHBsdWdpbiBzY2FubmVyIHdoaWNoIGRvZXNuJ3QgY2xlYW4gdXAgcHJvcGVybHk+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpfZ3N0X3BsdWdpbl9sb2FkZXJfY2xpZW50X3J1bgotICAgZnVuOm1haW4KLX0KLQotewotICAgPHdhcm5pbmcgd2l0aCBsaWJjIDIuMTMtMiBhcyBpbiBEZWJpYW4vdW5zdGFibGUgb24gYW1kNjQ+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KnN0cmNhc2VjbXAqCi0gICAuLi4KLSAgIGZ1bjpfX2RjaWdldHRleHQKLX0KLQotewotICAgPHdhcm5pbmcgd2l0aCBsaWJjIDIuMTMtMiBhcyBpbiBEZWJpYW4vdW5zdGFibGUgb24gYW1kNjQ+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqc3RyY2FzZWNtcCoKLSAgIC4uLgotICAgZnVuOl9fZGNpZ2V0dGV4dAotfQotCi17Ci0gICA8R3N0U3lzdGVtQ2xvY2sgaXMgYSBzaW5nbGV0b24gYW5kIGRvZXMgbm90IGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICAuLi4KLSAgIGZ1bjpnc3RfcG9sbF9uZXcKLSAgIGZ1bjpnc3RfcG9sbF9uZXdfdGltZXIKLSAgIGZ1bjpnc3Rfc3lzdGVtX2Nsb2NrX2luaXQKLX0KLQotewotICAgPGdsaWIgdHlwZXMgYXJlIHNpbmdsZXRvbnM+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICAuLi4KLSAgIGZ1bjpnb2JqZWN0X2luaXRfY3RvcgotfQotCi17Ci0gICA8cXVhcmsgdGFibGUgaXMgbGVha2VkIG9uIHB1cnBvc2UgaWYgaXQgZ3Jvd3MgdG9vIGJpZz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfcXVhcmtfZnJvbSpfc3RyaW5nCi19Ci0KLXsKLSAgPHRpbWVyX2NyZWF0ZSBzdXBwcmVzc2lvbnMgZm9yIGVhcmxpZXIgdmFsZ3JpbmQgdmVyc2lvbnMgdGhhdCBjb21wbGFpbj4KLSAgTWVtY2hlY2s6UGFyYW0KLSAgdGltZXJfY3JlYXRlKGV2cCkKLSAgZnVuOnRpbWVyX2NyZWF0ZUBAR0xJQkNfMi4zLjMKLX0KLQotewotICAgY2xvc3VyZXMgYXJlbid0IHZhbGdyaW5kIGZyaWVuZGx5IChiZ28jNzM5ODUwKQotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgLi4uCi0gICBmdW46Z19jY2xvc3VyZV9uZXcKLX0KLQotewotICAgY2xvc3VyZXMgYXJlbid0IHZhbGdyaW5kIGZyaWVuZGx5IChiZ28jNzM5ODUwKQotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgLi4uCi0gICBmdW46Z19jbG9zdXJlX2FkZF9pbnZhbGlkYXRlX25vdGlmaWVyCi19Ci0KLXsKLSAgIGNsb3N1cmVzIGFyZW4ndCB2YWxncmluZCBmcmllbmRseSAoYmdvIzczOTg1MCkKLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfY2xvc3VyZV9uZXdfc2ltcGxlCi19Ci0KLXsKLSAgIGdsaWIvZ2lvbW9kdWxlczIgKGZyb20gbGlic291cC5zdXBwKQotICAgTWVtY2hlY2s6TGVhawotICAgLi4uCi0gICBmdW46X2dfaW9fbW9kdWxlX2dldF9kZWZhdWx0Ci19Ci0KLXsKLSAgIDx2YWxncmluZCBidWcgd2hlbiB0cnlpbmcgdG8gcGFyc2UgImluZmluaXR5IiBmcm9tICJpbnRlcmxlYXZlZCI+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgZnVuOl9fR0lfX19zdHJuY2FzZWNtcF9sCi0gICBmdW46X19fX3N0cnRvZF9sX2ludGVybmFsCi0gICBmdW46Z3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RvdWJsZQotfQotCi17Ci0gICA8Z2xpYmMgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBmdW46ZG9fbG9va3VwX3gKLX0KLQotewotICAgPHF1YXJrIHRhYmxlcyBhcmUgbGVha2VkIG9uIHB1cnBvc2Ugd2hlbiB0aGV5IGFyZSBleHBhbmRlZCwgb2JzZXJ2ZWQgd2l0aCBnbGliIDIuNDYgYW5kIGdzdC1ydHNwLXNlcnZlciB0ZXN0cz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfcXVhcmtfaW5pdAotfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2dzdGRvYy1zY2FuZ29iaiBiL2NvbW1vbi9nc3Rkb2Mtc2NhbmdvYmoKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDkwNjg1N2MuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2dzdGRvYy1zY2FuZ29iagorKysgL2Rldi9udWxsCkBAIC0xLDE3NTIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcGVybAotIyAtKi0gY3BlcmwgLSotCi0jCi0jIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KLSMgQ29weXJpZ2h0IChDKSAxOTk4ICBEYW1vbiBDaGFwbGluCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0KLSMKLSMgVGhpcyBnZXRzIGluZm9ybWF0aW9uIGFib3V0IG9iamVjdCBoaWVyYXJjaGllcyBhbmQgc2lnbmFscwotIyBieSBjb21waWxpbmcgYSBzbWFsbCBDIHByb2dyYW0uIENGTEFHUyBhbmQgTERGTEFHUyBtdXN0IGJlCi0jIHNldCBhcHByb3ByaWF0ZWx5IGJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0LgotIwotCi11c2UgR2V0b3B0OjpMb25nOwotCi1teSAkR1RLX0RPQ19QUkVGSVg9YHBrZy1jb25maWcgLS12YXJpYWJsZSBwcmVmaXggZ3RrLWRvY2A7Ci1pZiAoJEdUS19ET0NfUFJFRklYKSB7Ci0gIGNob21wICRHVEtfRE9DX1BSRUZJWDsKLSAgI3ByaW50ICJBZGRpbmcgJEdUS19ET0NfUFJFRklYL3NoYXJlL2d0ay1kb2MvZGF0YSB0byBcQElOQ1xuIjsKLSAgdW5zaGlmdCBASU5DLCAiJEdUS19ET0NfUFJFRklYL3NoYXJlL2d0ay1kb2MvZGF0YSI7Ci19IGVsc2UgewotICB1bnNoaWZ0IEBJTkMsICcvdXNyL3NoYXJlL2d0ay1kb2MvZGF0YSc7Ci19Ci1yZXF1aXJlICJndGtkb2MtY29tbW9uLnBsIjsKLQotIyBPcHRpb25zCi0KLSMgbmFtZSBvZiBkb2N1bWVudGF0aW9uIG1vZHVsZQotbXkgJE1PRFVMRTsKLW15ICRPVVRQVVRfRElSOwotbXkgJElOU1BFQ1RfRElSOwotbXkgJFZFUkJPU0U7Ci1teSAkUFJJTlRfVkVSU0lPTjsKLW15ICRQUklOVF9IRUxQOwotbXkgJFRZUEVfSU5JVF9GVU5DPSJnX3R5cGVfaW5pdCAoKSI7Ci0KLSMgLS1ub2d0a2luaXQgaXMgZGVwcmVjYXRlZCwgYXMgaXQgaXMgdGhlIGRlZmF1bHQgbm93IGFueXdheS4KLSVvcHRjdGwgPSAobW9kdWxlID0+IFwkTU9EVUxFLAotICAgICAgICAgICBzb3VyY2UgPT4gXCRTT1VSQ0UsCi0JICAgdHlwZXMgPT4gXCRUWVBFU19GSUxFLAotCSAgIG5vZ3RraW5pdCA9PiBcJE5PX0dUS19JTklULAotCSAgICd0eXBlLWluaXQtZnVuYycgPT4gXCRUWVBFX0lOSVRfRlVOQywKLQkgICAnb3V0cHV0LWRpcicgPT4gXCRPVVRQVVRfRElSLAotCSAgICdpbnNwZWN0LWRpcicgPT4gXCRJTlNQRUNUX0RJUiwKLQkgICAndmVyYm9zZScgPT4gXCRWRVJCT1NFLAotCSAgICd2ZXJzaW9uJyA9PiBcJFBSSU5UX1ZFUlNJT04sCi0JICAgJ2hlbHAnID0+IFwkUFJJTlRfSEVMUCk7Ci0KLUdldE9wdGlvbnMoXCVvcHRjdGwsICJtb2R1bGU9cyIsICJzb3VyY2U9cyIsICJ0eXBlczpzIiwgIm91dHB1dC1kaXI6cyIsICJpbnNwZWN0LWRpcjpzIiwgIm5vZ3RraW5pdCIsICJ0eXBlLWluaXQtZnVuYzpzIiwgInZlcmJvc2UiLCAidmVyc2lvbiIsICJoZWxwIik7Ci0KLWlmICgkTk9fR1RLX0lOSVQpIHsKLSAgIyBEbyBub3RoaW5nLiBUaGlzIGp1c3QgYXZvaWRzIGEgd2FybmluZy4KLSAgIyB0aGUgb3B0aW9uIGlzIG5vdCB1c2VkIGFueW1vcmUKLX0KLQotaWYgKCRQUklOVF9WRVJTSU9OKSB7Ci0gICAgcHJpbnQgIjEuNVxuIjsKLSAgICBleGl0IDA7Ci19Ci0KLWlmICghJE1PRFVMRSkgewotICAgICRQUklOVF9IRUxQID0gMTsKLX0KLQotaWYgKCRQUklOVF9IRUxQKSB7Ci0gICAgcHJpbnQgPDxFT0Y7Ci1nc3Rkb2Mtc2NhbmdvYmogdmVyc2lvbiAxLjUgLSBpbnRyb3NwZWN0IGdzdHJlYW1lci1wbHVnaW5zCi0KLS0tbW9kdWxlPU1PRFVMRV9OQU1FICAgICAgICAgIE5hbWUgb2YgdGhlIGRvYyBtb2R1bGUgYmVpbmcgcGFyc2VkCi0tLXNvdXJjZT1TT1VSQ0VfTkFNRSAgICAgICAgICBOYW1lIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciBwbHVnaW5zCi0tLXR5cGVzPUZJTEUgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBzdG9yZSB0aGUgdHlwZXMgaW4KLS0tdHlwZS1pbml0LWZ1bmM9RlVOQyAgICAgICAgIFRoZSBpbml0IGZ1bmN0aW9uIHRvIGNhbGwgaW5zdGVhZCBvZiBnX3R5cGVfaW5pdCgpCi0tLW91dHB1dC1kaXI9RElSTkFNRSAgICAgICAgICBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSByZXN1bHRzIGFyZSBzdG9yZWQKLS0taW5zcGVjdC1kaXI9RElSTkFNRSAgICAgICAgIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBsdWdpbiBpbnNwZWN0IGRhdGEgaXMgc3RvcmVkCi0tLXZlcmJvc2UgICAgICAgICAgICAgICAgICAgICBQcmludCBleHRyYSBvdXRwdXQgd2hpbGUgcHJvY2Vzc2luZwotLS12ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgdGhpcyBwcm9ncmFtCi0tLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICBQcmludCB0aGlzIGhlbHAKLUVPRgotICAgIGV4aXQgMDsKLX0KLQotJE9VVFBVVF9ESVIgPSAkT1VUUFVUX0RJUiA/ICRPVVRQVVRfRElSIDogIi4iOwotCi0kVFlQRVNfRklMRSA9ICRUWVBFU19GSUxFID8gJFRZUEVTX0ZJTEUgOiAiJE9VVFBVVF9ESVIvJE1PRFVMRS50eXBlcyI7Ci0KLW9wZW4gKFRZUEVTLCAkVFlQRVNfRklMRSkgfHwgZGllICJDYW5ub3Qgb3BlbiAkVFlQRVNfRklMRTogJCFcbiI7Ci1vcGVuIChPVVRQVVQsICI+JE1PRFVMRS1zY2FuLmMiKSB8fCBkaWUgIkNhbm5vdCBvcGVuICRNT0RVTEUtc2Nhbi5jOiAkIVxuIjsKLQotbXkgJG9sZF9zaWduYWxzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuc2lnbmFscyI7Ci1teSAkbmV3X3NpZ25hbHNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5zaWduYWxzLm5ldyI7Ci1teSAkb2xkX2hpZXJhcmNoeV9maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmhpZXJhcmNoeSI7Ci1teSAkbmV3X2hpZXJhcmNoeV9maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmhpZXJhcmNoeS5uZXciOwotbXkgJG9sZF9pbnRlcmZhY2VzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuaW50ZXJmYWNlcyI7Ci1teSAkbmV3X2ludGVyZmFjZXNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5pbnRlcmZhY2VzLm5ldyI7Ci1teSAkb2xkX3ByZXJlcXVpc2l0ZXNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5wcmVyZXF1aXNpdGVzIjsKLW15ICRuZXdfcHJlcmVxdWlzaXRlc19maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLnByZXJlcXVpc2l0ZXMubmV3IjsKLW15ICRvbGRfYXJnc19maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmFyZ3MiOwotbXkgJG5ld19hcmdzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuYXJncy5uZXciOwotbXkgJG9sZF9zZWN0aW9uc19maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLXNlY3Rpb25zIjsKLW15ICRuZXdfc2VjdGlvbnNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS1zZWN0aW9ucy5uZXciOwotCi1teSAkZGVidWdfbG9nPSJnX21lc3NhZ2UiOwotaWYgKCFkZWZpbmVkKCRWRVJCT1NFKSBvciAkVkVSQk9TRSBlcSAiMCIpIHsKLSAgICAkZGVidWdfbG9nPSIvLyRkZWJ1Z19sb2ciOwotfQotCi0jIHdyaXRlIGEgQyBwcm9ncmFtIHRvIHNjYW4gdGhlIHR5cGVzCi0KLSRpbmNsdWRlcyA9ICIiOwotQHR5cGVzID0gKCk7Ci1AaW1wbF90eXBlcyA9ICgpOwotCi1mb3IgKDxUWVBFUz4pIHsKLSAgICBpZiAoL14jaW5jbHVkZS8pIHsKLQkkaW5jbHVkZXMgLj0gJF87Ci0gICAgfSBlbHNpZiAoL14lLykgewotCW5leHQ7Ci0gICAgfSBlbHNpZiAoL15ccyokLykgewotCW5leHQ7Ci0gICAgfSBlbHNpZiAoL150eXBlOiguKikkLykgewotCSR0ID0gJDE7Ci0gICAgICAgIGNob21wICR0OwotCXB1c2ggQGltcGxfdHlwZXMsICR0OwotICAgIH0gZWxzZSB7Ci0JY2hvbXA7Ci0JcHVzaCBAdHlwZXMsICRfOwotICAgIH0KLX0KLQotJG50eXBlcyA9IEB0eXBlcyArIEBpbXBsX3R5cGVzICsgMTsKLQotcHJpbnQgT1VUUFVUIDw8RU9UOwotCi0vKiBmaWxlIGdlbmVyYXRlZCBieSBjb21tb24vZ3N0ZG9jLXNjYW5nb2JqICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci1FT1QKLQotaWYgKCRpbmNsdWRlcykgewotICAgIHByaW50IE9VVFBVVCAkaW5jbHVkZXM7Ci19IGVsc2UgewotICAgIGZvciAoQHR5cGVzKSB7Ci0gICAgICAgIHByaW50IE9VVFBVVCAiZXh0ZXJuIEdUeXBlICRfICh2b2lkKTtcbiI7Ci0gICAgfQotfQotCi1wcmludCBPVVRQVVQgPDxFT1Q7Ci0KLSNpZmRlZiBHVEtfSVNfV0lER0VUX0NMQVNTCi0jaW5jbHVkZSA8Z3RrL2d0a3ZlcnNpb24uaD4KLSNlbmRpZgotCi1zdGF0aWMgR1R5cGUgKm9iamVjdF90eXBlcyA9IE5VTEw7Ci0KLXN0YXRpYyBHU3RyaW5nICp4bWxzdHIgPSBOVUxMOwotCi1zdGF0aWMgY29uc3QgZ2NoYXIqCi14bWxwcmludCAoZ2ludCBpbmRlbnQsIGNvbnN0IGdjaGFyICp0YWcsIGNvbnN0IGdjaGFyICpkYXRhKQotewotICBjb25zdCBnY2hhciBpbmRlbnRfc3RyW10gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwotCi0gIC8qIHJlc2V0ICovCi0gIGdfc3RyaW5nX3RydW5jYXRlICh4bWxzdHIsIDApOwotICBnX3N0cmluZ19hcHBlbmRfbGVuICh4bWxzdHIsIGluZGVudF9zdHIsIE1JTiAoaW5kZW50LCBzdHJsZW4gKGluZGVudF9zdHIpKSk7Ci0gIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHhtbHN0ciwgIjwlcz4iLCB0YWcpOwotCi0gIGlmIChkYXRhKSB7Ci0gICAgZ2NoYXIgKnM7Ci0KLSAgICBzID0gZ19tYXJrdXBfZXNjYXBlX3RleHQgKGRhdGEsIC0xKTsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHhtbHN0ciwgcyk7Ci0gICAgZ19mcmVlIChzKTsKLSAgfQotCi0gIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHhtbHN0ciwgIjwvJXM+XFxuIiwgdGFnKTsKLSAgcmV0dXJuIHhtbHN0ci0+c3RyOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X2ZlYXR1cmVfc29ydF9jb21wYXJlIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLSAgY29uc3QgZ2NoYXIgKm5hbWVfYSA9IGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoKEdzdFBsdWdpbkZlYXR1cmUgKikgYSk7Ci0gIGNvbnN0IGdjaGFyICpuYW1lX2IgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKChHc3RQbHVnaW5GZWF0dXJlICopIGIpOwotICByZXR1cm4gc3RyY21wIChuYW1lX2EsIG5hbWVfYik7Ci19Ci0KLXN0YXRpYyBnaW50Ci1zdGF0aWNfcGFkX3RlbXBsYXRlX2NvbXBhcmUgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQotewotICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqc3B0X2EgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgYTsKLSAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnNwdF9iID0gKEdzdFN0YXRpY1BhZFRlbXBsYXRlICopIGI7Ci0KLSAgLyogd2Ugd2FudCBTSU5LIGJlZm9yZSBTUkMgKGVudW0gaXMgVU5LTk9XTiwgU1JDLCBTSU5LKSAqLwotICBpZiAoc3B0X2EtPmRpcmVjdGlvbiAhPSBzcHRfYi0+ZGlyZWN0aW9uKQotICAgIHJldHVybiBzcHRfYi0+ZGlyZWN0aW9uIC0gc3B0X2EtPmRpcmVjdGlvbjsKLQotICAvKiB3ZSB3YW50IEFMV0FZUyBmaXJzdCwgU09NRVRJTUVTIHNlY29uZCwgUkVRVUVTVCBsYXN0Ci0gICAqIChlbnVtIGlzIEFMV0FZUywgU09NRVRJTUVTLCBSRVFVRVNUKSAqLwotICBpZiAoc3B0X2EtPnByZXNlbmNlICE9IHNwdF9iLT5wcmVzZW5jZSkKLSAgICByZXR1cm4gc3B0X2EtPnByZXNlbmNlIC0gc3B0X2ItPnByZXNlbmNlOwotCi0gIHJldHVybiBzdHJjbXAgKHNwdF9hLT5uYW1lX3RlbXBsYXRlLCBzcHRfYi0+bmFtZV90ZW1wbGF0ZSk7Ci19Ci0KLXN0YXRpYyBHVHlwZSAqCi1nZXRfb2JqZWN0X3R5cGVzICh2b2lkKQotewotICAgIGdwb2ludGVyIGdfb2JqZWN0X2NsYXNzOwotICAgIEdMaXN0ICpwbHVnaW5zID0gTlVMTDsKLSAgICBHTGlzdCAqZmFjdG9yaWVzID0gTlVMTDsKLSAgICBHTGlzdCAqbDsKLSAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSA9IE5VTEw7Ci0gICAgR1R5cGUgdHlwZTsKLSAgICBnaW50IGkgPSAwOwotICAgIGdib29sZWFuIHJlaW5zcGVjdDsKLQotICAgIC8qIGdldCBhIGxpc3Qgb2YgZmVhdHVyZXMgZnJvbSBwbHVnaW5zIGluIG91ciBzb3VyY2UgbW9kdWxlICovCi0gICAgcGx1Z2lucyA9IGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKGdzdF9yZWdpc3RyeV9nZXQgKCkpOwotCi0gICAgeG1sc3RyID0gZ19zdHJpbmdfbmV3ICgiIik7Ci0KLSAgICByZWluc3BlY3QgPSAhZ19maWxlX3Rlc3QgKCJzY2Fub2JqLWJ1aWxkLnN0YW1wIiwgR19GSUxFX1RFU1RfRVhJU1RTKTsKLQotICAgIHdoaWxlIChwbHVnaW5zKSB7Ci0gICAgICBHTGlzdCAqZmVhdHVyZXM7Ci0gICAgICBHc3RQbHVnaW4gKnBsdWdpbjsKLSAgICAgIGNvbnN0IGdjaGFyICpzb3VyY2U7Ci0gICAgICBGSUxFICppbnNwZWN0ID0gTlVMTDsKLSAgICAgIGdjaGFyICppbnNwZWN0X25hbWU7Ci0KLSAgICAgIHBsdWdpbiA9IChHc3RQbHVnaW4gKikgKHBsdWdpbnMtPmRhdGEpOwotICAgICAgcGx1Z2lucyA9IGdfbGlzdF9uZXh0IChwbHVnaW5zKTsKLSAgICAgIHNvdXJjZSA9IGdzdF9wbHVnaW5fZ2V0X3NvdXJjZSAocGx1Z2luKTsKLSAgICAgIGlmICghc291cmNlIHx8IHN0cmNtcCAoc291cmNlLCAiJFNPVVJDRSIpICE9IDApIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHNraXAgc3RhdGljIGNvcmVlbGVtZW50cyBwbHVnaW4gd2l0aCBwaXBlbGluZSBhbmQgYmluIGVsZW1lbnQgZmFjdG9yeSAqLwotICAgICAgaWYgKGdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lIChwbHVnaW4pID09IE5VTEwpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAkZGVidWdfbG9nICgicGx1Z2luOiAlcyBzb3VyY2U6ICVzIiwgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSwgc291cmNlKTsKLQotICAgICAgaWYgKHJlaW5zcGVjdCkgewotICAgICAgICBnY2hhciAqYmFzZW5hbWU7Ci0KLSAgICAgICAgaW5zcGVjdF9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJElOU1BFQ1RfRElSIiBHX0RJUl9TRVBBUkFUT1JfUyAicGx1Z2luLSVzLnhtbCIsCi0gICAgICAgICAgICBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKLSAgICAgICAgaW5zcGVjdCA9IGZvcGVuIChpbnNwZWN0X25hbWUsICJ3Iik7Ci0gICAgICAgIGlmIChpbnNwZWN0ID09IE5VTEwpIHsKLSAgICAgICAgICBnX2Vycm9yICgiQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmc6ICVzXFxuIiwgaW5zcGVjdF9uYW1lLAotICAgICAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgICB9Ci0gICAgICAgIGdfZnJlZSAoaW5zcGVjdF9uYW1lKTsKLQotCQkgIGJhc2VuYW1lID0gZ19wYXRoX2dldF9iYXNlbmFtZSAoZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUgKHBsdWdpbikpOwotCi0gICAgICAgIC8qIG91dHB1dCBwbHVnaW4gZGF0YSAqLwotICAgICAgICBmcHV0cyAoIjxwbHVnaW4+XFxuIixpbnNwZWN0KTsKLSAgICAgICAgZnB1dHMgKHhtbHByaW50KDIsICJuYW1lIiwgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSksaW5zcGVjdCk7Ci0gICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAiZGVzY3JpcHRpb24iLCBnc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbiAocGx1Z2luKSksaW5zcGVjdCk7Ci0gICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAiZmlsZW5hbWUiLCBnc3RfcGx1Z2luX2dldF9maWxlbmFtZSAocGx1Z2luKSksaW5zcGVjdCk7Ci0gICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAiYmFzZW5hbWUiLCBiYXNlbmFtZSksaW5zcGVjdCk7Ci0gICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAidmVyc2lvbiIsIGdzdF9wbHVnaW5fZ2V0X3ZlcnNpb24gKHBsdWdpbikpLGluc3BlY3QpOwotICAgICAgICBmcHV0cyAoeG1scHJpbnQoMiwgImxpY2Vuc2UiLCBnc3RfcGx1Z2luX2dldF9saWNlbnNlIChwbHVnaW4pKSxpbnNwZWN0KTsKLSAgICAgICAgZnB1dHMgKHhtbHByaW50KDIsICJzb3VyY2UiLCBnc3RfcGx1Z2luX2dldF9zb3VyY2UgKHBsdWdpbikpLGluc3BlY3QpOwotICAgICAgICBmcHV0cyAoeG1scHJpbnQoMiwgInBhY2thZ2UiLCBnc3RfcGx1Z2luX2dldF9wYWNrYWdlIChwbHVnaW4pKSxpbnNwZWN0KTsKLSAgICAgICAgZnB1dHMgKHhtbHByaW50KDIsICJvcmlnaW4iLCBnc3RfcGx1Z2luX2dldF9vcmlnaW4gKHBsdWdpbikpLGluc3BlY3QpOwotICAgICAgICBmcHV0cyAoIiAgPGVsZW1lbnRzPlxcbiIsIGluc3BlY3QpOwotCi0JCSAgZ19mcmVlIChiYXNlbmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIGZlYXR1cmVzID0KLSAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICAgICAgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0KLSAgICAgIC8qIHNvcnQgZmFjdG9yaWVzIGJ5IGZlYXR1cmUtPm5hbWUgKi8KLSAgICAgIGZlYXR1cmVzID0gZ19saXN0X3NvcnQgKGZlYXR1cmVzLCBnc3RfZmVhdHVyZV9zb3J0X2NvbXBhcmUpOwotCi0gICAgICB3aGlsZSAoZmVhdHVyZXMpIHsKLSAgICAgICAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZTsKLSAgICAgICAgZmVhdHVyZSA9IEdTVF9QTFVHSU5fRkVBVFVSRSAoZmVhdHVyZXMtPmRhdGEpOwotICAgICAgICBmZWF0dXJlID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKGZlYXR1cmUpOwotICAgICAgICBpZiAoIWZlYXR1cmUpIHsKLSAgICAgICAgICBnX3dhcm5pbmcgKCJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmVhdHVyZSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgICAgICAgIGNvbnN0IGdjaGFyICpwYWRfZGlyW10gPSB7ICJ1bmtub3duIiwic291cmNlIiwic2luayIgfTsKLSAgICAgICAgICBjb25zdCBnY2hhciAqcGFkX3ByZXNbXSA9IHsgImFsd2F5cyIsInNvbWV0aW1lcyIsInJlcXVlc3QiIH07Ci0gICAgICAgICAgR0xpc3QgKnBhZHMsICpwYWQ7Ci0KLSAgICAgICAgICAkZGVidWdfbG9nICgiICBmZWF0dXJlOiAlcyIsIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoZmVhdHVyZSkpOwotCi0gICAgICAgICAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpOwotICAgICAgICAgIGZhY3RvcmllcyA9IGdfbGlzdF9wcmVwZW5kIChmYWN0b3JpZXMsIGZhY3RvcnkpOwotCi0gICAgICAgICAgaWYgKHJlaW5zcGVjdCkgewotICAgICAgICAgICAgLyogb3V0cHV0IGVsZW1lbnQgZGF0YSAqLwotICAgICAgICAgICAgZnB1dHMgKCIgICAgPGVsZW1lbnQ+XFxuIiwgaW5zcGVjdCk7Ci0gICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoNiwgIm5hbWUiLCBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKSxpbnNwZWN0KTsKLSAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAibG9uZ25hbWUiLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpKSxpbnNwZWN0KTsKLSAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAiY2xhc3MiLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1MpKSxpbnNwZWN0KTsKLSAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAiZGVzY3JpcHRpb24iLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT04pKSxpbnNwZWN0KTsKLSAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAiYXV0aG9yIiwgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKGZhY3RvcnksIEdTVF9FTEVNRU5UX01FVEFEQVRBX0FVVEhPUikpLGluc3BlY3QpOwotICAgICAgICAgICAgZnB1dHMgKCIgICAgICA8cGFkcz5cXG4iLCBpbnNwZWN0KTsKLQotICAgICAgICAgICAgLyogb3V0cHV0IHBhZC10ZW1wbGF0ZSBkYXRhICovCi0gICAgICAgICAgICBwYWRzID0gZ19saXN0X2NvcHkgKChHTGlzdCAqKSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoZmFjdG9yeSkpOwotICAgICAgICAgICAgcGFkcyA9IGdfbGlzdF9zb3J0IChwYWRzLCBzdGF0aWNfcGFkX3RlbXBsYXRlX2NvbXBhcmUpOwotICAgICAgICAgICAgZm9yIChwYWQgPSBwYWRzOyBwYWQgIT0gTlVMTDsgcGFkID0gcGFkLT5uZXh0KSB7Ci0gICAgICAgICAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICpwdCA9IHBhZC0+ZGF0YTsKLQotICAgICAgICAgICAgICBmcHV0cyAoIiAgICAgICAgPGNhcHM+XFxuIiwgaW5zcGVjdCk7Ci0gICAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCgxMCwgIm5hbWUiLCBwdC0+bmFtZV90ZW1wbGF0ZSksaW5zcGVjdCk7Ci0gICAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCgxMCwgImRpcmVjdGlvbiIsIHBhZF9kaXJbcHQtPmRpcmVjdGlvbl0pLGluc3BlY3QpOwotICAgICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoMTAsICJwcmVzZW5jZSIsIHBhZF9wcmVzW3B0LT5wcmVzZW5jZV0pLGluc3BlY3QpOwotICAgICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoMTAsICJkZXRhaWxzIiwgcHQtPnN0YXRpY19jYXBzLnN0cmluZyksaW5zcGVjdCk7Ci0gICAgICAgICAgICAgIGZwdXRzICgiICAgICAgICA8L2NhcHM+XFxuIiwgaW5zcGVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnX2xpc3RfZnJlZSAocGFkcyk7Ci0gICAgICAgICAgICBmcHV0cyAoIiAgICAgIDwvcGFkcz5cXG4gICAgPC9lbGVtZW50PlxcbiIsIGluc3BlY3QpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmZWF0dXJlcyA9IGdfbGlzdF9uZXh0IChmZWF0dXJlcyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZWluc3BlY3QpIHsKLSAgICAgICAgZnB1dHMgKCIgIDwvZWxlbWVudHM+XFxuPC9wbHVnaW4+IiwgaW5zcGVjdCk7Ci0gICAgICAgIGZjbG9zZSAoaW5zcGVjdCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZ19zdHJpbmdfZnJlZSAoeG1sc3RyLCBUUlVFKTsKLQotICAgICRkZWJ1Z19sb2cgKCJudW1iZXIgb2YgZWxlbWVudCBmYWN0b3JpZXM6ICVkIiwgZ19saXN0X2xlbmd0aCAoZmFjdG9yaWVzKSk7Ci0KLSAgICAvKiBhbGxvY2F0ZSB0aGUgb2JqZWN0X3R5cGVzIGFycmF5IHRvIGhvbGQgdGhlbSAqLwotICAgIG9iamVjdF90eXBlcyA9IGdfbmV3MCAoR1R5cGUsIGdfbGlzdF9sZW5ndGggKGZhY3RvcmllcykrJG50eXBlcysxKTsKLQotICAgIGwgPSBmYWN0b3JpZXM7Ci0gICAgaSA9IDA7Ci0KLSAgICAvKiBmaWxsIGl0ICovCi0gICAgd2hpbGUgKGwpIHsKLSAgICAgIGZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZIChsLT5kYXRhKTsKLSAgICAgIHR5cGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgKGZhY3RvcnkpOwotICAgICAgaWYgKHR5cGUgIT0gMCkgewotICAgICAgICAkZGVidWdfbG9nICgiYWRkaW5nIHR5cGUgZm9yIGZhY3RvcnkgJXMiLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpKTsKLSAgICAgICAgb2JqZWN0X3R5cGVzW2krK10gPSB0eXBlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ19tZXNzYWdlICgidHlwZSBpbmZvIGZvciBmYWN0b3J5ICVzIG5vdCBmb3VuZCIsCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpKTsKLSAgICAgIH0KLSAgICAgIGwgPSBnX2xpc3RfbmV4dCAobCk7Ci0gICAgfQotCi1FT1QKLQotIyBnZXRfdHlwZSBmdW5jdGlvbnM6Ci1mb3IgKEB0eXBlcykgewotcHJpbnQgT1VUUFVUIDw8RU9UOwotICAgIHR5cGUgPSAkXyAoKTsKLSAgICBpZiAodHlwZSA9PSAwKSB7Ci0gICAgICBnX21lc3NhZ2UgKCIkXyAoKSBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQgdHlwZSIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIG9iamVjdF90eXBlc1tpKytdID0gdHlwZTsKLSAgICB9Ci1FT1QKLX0KLQotIyBJbXBsaWNpdCB0eXBlcyByZXRyaWV2ZWQgZnJvbSBHTGliOgotZm9yIChAaW1wbF90eXBlcykgewotcHJpbnQgT1VUUFVUIDw8RU9UOwotICAgIHR5cGUgPSBnX3R5cGVfZnJvbV9uYW1lICgiJF8iKTsKLSAgICBpZiAodHlwZSA9PSAwKSB7Ci0gICAgICBnX21lc3NhZ2UgKCJJbXBsaWNpdCB0eXBlICRfIG5vdCBmb3VuZCIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIG9iamVjdF90eXBlc1tpKytdID0gdHlwZTsKLSAgICB9Ci1FT1QKLX0KLQotcHJpbnQgT1VUUFVUIDw8RU9UOwotCi0gICAgb2JqZWN0X3R5cGVzW2ldID0gMDsKLQotICAgIC8qIHJlZmVyZW5jZSB0aGUgR09iamVjdENsYXNzIHRvIGluaXRpYWxpemUgdGhlIHBhcmFtIHNwZWMgcG9vbAotICAgICAqIHBvdGVudGlhbGx5IG5lZWRlZCBieSBpbnRlcmZhY2VzLiBTZWUgaHR0cDovL2J1Z3MuZ25vbWUub3JnLzU3MTgyMCAqLwotICAgIGdfb2JqZWN0X2NsYXNzID0gZ190eXBlX2NsYXNzX3JlZiAoR19UWVBFX09CSkVDVCk7Ci0KLSAgICAvKiBOZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIHR5cGVzIGFyZSBsb2FkZWQgaW4gYW5kIGluaXRpYWxpemUKLSAgICAgKiB0aGVpciBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzLgotICAgICAqLwotICAgIGZvciAoaT0wOyBvYmplY3RfdHlwZXNbaV07IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKEdfVFlQRV9JU19DTEFTU0VEIChvYmplY3RfdHlwZXNbaV0pKQotICAgICAgICAgIGdfdHlwZV9jbGFzc19yZWYgKG9iamVjdF90eXBlc1tpXSk7Ci0gICAgICAgIGlmIChHX1RZUEVfSVNfSU5URVJGQUNFIChvYmplY3RfdHlwZXNbaV0pKQotICAgICAgICAgIGdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9yZWYgKG9iamVjdF90eXBlc1tpXSk7Ci0gICAgICB9Ci0KLSAgICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfb2JqZWN0X2NsYXNzKTsKLQotICAgIHJldHVybiBvYmplY3RfdHlwZXM7Ci19Ci0KLS8qCi0gKiBUaGlzIHVzZXMgR09iamVjdCB0eXBlIGZ1bmN0aW9ucyB0byBvdXRwdXQgc2lnbmFsIHByb3RvdHlwZXMgYW5kIHRoZSBvYmplY3QKLSAqIGhpZXJhcmNoeS4KLSAqLwotCi0vKiBUaGUgb3V0cHV0IGZpbGVzICovCi1jb25zdCBnY2hhciAqc2lnbmFsc19maWxlbmFtZSA9ICIkbmV3X3NpZ25hbHNfZmlsZW5hbWUiOwotY29uc3QgZ2NoYXIgKmhpZXJhcmNoeV9maWxlbmFtZSA9ICIkbmV3X2hpZXJhcmNoeV9maWxlbmFtZSI7Ci1jb25zdCBnY2hhciAqaW50ZXJmYWNlc19maWxlbmFtZSA9ICIkbmV3X2ludGVyZmFjZXNfZmlsZW5hbWUiOwotY29uc3QgZ2NoYXIgKnByZXJlcXVpc2l0ZXNfZmlsZW5hbWUgPSAiJG5ld19wcmVyZXF1aXNpdGVzX2ZpbGVuYW1lIjsKLWNvbnN0IGdjaGFyICphcmdzX2ZpbGVuYW1lID0gIiRuZXdfYXJnc19maWxlbmFtZSI7Ci1jb25zdCBnY2hhciAqc2VjdGlvbnNfZmlsZW5hbWUgPSAiJG5ld19zZWN0aW9uc19maWxlbmFtZSI7Ci0KLQotc3RhdGljIHZvaWQgb3V0cHV0X3NpZ25hbHMgKHZvaWQpOwotc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9zaWduYWxzIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpOwotc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9zaWduYWwgKEZJTEUgKmZwLCBjb25zdCBnY2hhciAqb2JqZWN0X2NsYXNzX25hbWUsCi0JCQkJICBndWludCBzaWduYWxfaWQpOwotc3RhdGljIGNvbnN0IGdjaGFyICogZ2V0X3R5cGVfbmFtZSAoR1R5cGUgdHlwZSwgZ2Jvb2xlYW4gKiBpc19wb2ludGVyKTsKLXN0YXRpYyB2b2lkIG91dHB1dF9vYmplY3RfaGllcmFyY2h5ICh2b2lkKTsKLXN0YXRpYyB2b2lkIG91dHB1dF9oaWVyYXJjaHkgKEZJTEUgKmZwLCBHVHlwZSB0eXBlLCBndWludCBsZXZlbCk7Ci0KLXN0YXRpYyB2b2lkIG91dHB1dF9vYmplY3RfaW50ZXJmYWNlcyAodm9pZCk7Ci1zdGF0aWMgdm9pZCBvdXRwdXRfaW50ZXJmYWNlcyAoRklMRSAqZnAsIEdUeXBlIHR5cGUpOwotCi1zdGF0aWMgdm9pZCBvdXRwdXRfaW50ZXJmYWNlX3ByZXJlcXVpc2l0ZXMgKHZvaWQpOwotc3RhdGljIHZvaWQgb3V0cHV0X3ByZXJlcXVpc2l0ZXMgKEZJTEUgKmZwLCBHVHlwZSB0eXBlKTsKLQotc3RhdGljIHZvaWQgb3V0cHV0X2FyZ3MgKHZvaWQpOwotc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9hcmdzIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpOwotCi1zdGF0aWMgdm9pZCBvdXRwdXRfc2VjdGlvbnMgKHZvaWQpOwotc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9zZWN0aW9uIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpOwotCi0KLWludAotbWFpbiAoR19HTlVDX1VOVVNFRCBpbnQgYXJnYywgR19HTlVDX1VOVVNFRCBjaGFyICphcmd2W10pCi17Ci0gICRUWVBFX0lOSVRfRlVOQzsKLQotICBnZXRfb2JqZWN0X3R5cGVzICgpOwotCi0gIG91dHB1dF9zaWduYWxzICgpOwotICBvdXRwdXRfb2JqZWN0X2hpZXJhcmNoeSAoKTsKLSAgb3V0cHV0X29iamVjdF9pbnRlcmZhY2VzICgpOwotICBvdXRwdXRfaW50ZXJmYWNlX3ByZXJlcXVpc2l0ZXMgKCk7Ci0gIG91dHB1dF9hcmdzICgpOwotICAKLSAgb3V0cHV0X3NlY3Rpb25zICgpOwotCi0gIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1vdXRwdXRfc2lnbmFscyAodm9pZCkKLXsKLSAgRklMRSAqZnA7Ci0gIGdpbnQgaTsKLQotICBmcCA9IGZvcGVuIChzaWduYWxzX2ZpbGVuYW1lLCAidyIpOwotICBpZiAoZnAgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlOiAlcyA6ICVzIiwgc2lnbmFsc19maWxlbmFtZSwgZ19zdHJlcnJvcihlcnJubykpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBmb3IgKGkgPSAwOyBvYmplY3RfdHlwZXNbaV07IGkrKykKLSAgICBvdXRwdXRfb2JqZWN0X3NpZ25hbHMgKGZwLCBvYmplY3RfdHlwZXNbaV0pOwotCi0gIGZjbG9zZSAoZnApOwotfQotCi1zdGF0aWMgZ2ludAotY29tcGFyZV9zaWduYWxzIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotICBjb25zdCBndWludCAqc2lnbmFsX2EgPSBhOwotICBjb25zdCBndWludCAqc2lnbmFsX2IgPSBiOwotCi0gIHJldHVybiBzdHJjbXAgKGdfc2lnbmFsX25hbWUgKCpzaWduYWxfYSksIGdfc2lnbmFsX25hbWUgKCpzaWduYWxfYikpOwotfQotCi0vKiBUaGlzIG91dHB1dHMgYWxsIHRoZSBzaWduYWxzIG9mIG9uZSBvYmplY3QuICovCi1zdGF0aWMgdm9pZAotb3V0cHV0X29iamVjdF9zaWduYWxzIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpCi17Ci0gIGNvbnN0IGdjaGFyICpvYmplY3RfY2xhc3NfbmFtZTsKLSAgZ3VpbnQgKnNpZ25hbHMsIG5fc2lnbmFsczsKLSAgZ3VpbnQgc2lnOwotCi0gIGlmIChHX1RZUEVfSVNfSU5TVEFOVElBVEFCTEUgKG9iamVjdF90eXBlKSB8fAotICAgICAgR19UWVBFX0lTX0lOVEVSRkFDRSAob2JqZWN0X3R5cGUpKQotICAgIHsKLQotICAgICAgb2JqZWN0X2NsYXNzX25hbWUgPSBnX3R5cGVfbmFtZSAob2JqZWN0X3R5cGUpOwotCi0gICAgICBzaWduYWxzID0gZ19zaWduYWxfbGlzdF9pZHMgKG9iamVjdF90eXBlLCAmbl9zaWduYWxzKTsKLSAgICAgIHFzb3J0IChzaWduYWxzLCBuX3NpZ25hbHMsIHNpemVvZiAoZ3VpbnQpLCBjb21wYXJlX3NpZ25hbHMpOwotCi0gICAgICBmb3IgKHNpZyA9IDA7IHNpZyA8IG5fc2lnbmFsczsgc2lnKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgb3V0cHV0X29iamVjdF9zaWduYWwgKGZwLCBvYmplY3RfY2xhc3NfbmFtZSwgc2lnbmFsc1tzaWddKTsKLSAgICAgICAgfQotICAgICAgZ19mcmVlIChzaWduYWxzKTsKLSAgIH0KLX0KLQotCi0vKiBUaGlzIG91dHB1dHMgb25lIHNpZ25hbC4gKi8KLXN0YXRpYyB2b2lkCi1vdXRwdXRfb2JqZWN0X3NpZ25hbCAoRklMRSAqZnAsCi0JCSAgICAgIGNvbnN0IGdjaGFyICpvYmplY3RfbmFtZSwKLQkJICAgICAgZ3VpbnQgc2lnbmFsX2lkKQotewotICBHU2lnbmFsUXVlcnkgcXVlcnlfaW5mbzsKLSAgY29uc3QgZ2NoYXIgKnR5cGVfbmFtZSwgKnJldF90eXBlLCAqb2JqZWN0X2FyZywgKmFyZ19uYW1lOwotICBnY2hhciAqcG9zLCAqb2JqZWN0X2FyZ19sb3dlcjsKLSAgZ2Jvb2xlYW4gaXNfcG9pbnRlcjsKLSAgZ2NoYXIgYnVmZmVyWzEwMjRdOwotICBndWludCBpLCBwYXJhbTsKLSAgZ2ludCBwYXJhbV9udW0sIHdpZGdldF9udW0sIGV2ZW50X251bSwgY2FsbGJhY2tfbnVtOwotICBnaW50ICphcmdfbnVtOwotICBnY2hhciBzaWduYWxfbmFtZVsxMjhdOwotICBnY2hhciBmbGFnc1sxNl07Ci0KLSAgJGRlYnVnX2xvZyAoIk9iamVjdDogJXMgU2lnbmFsOiAldSIsIG9iamVjdF9uYW1lLCBzaWduYWxfaWQpOwotCi0gIHBhcmFtX251bSA9IDE7Ci0gIHdpZGdldF9udW0gPSBldmVudF9udW0gPSBjYWxsYmFja19udW0gPSAwOwotCi0gIGdfc2lnbmFsX3F1ZXJ5IChzaWduYWxfaWQsICZxdWVyeV9pbmZvKTsKLQotICAvKiBPdXRwdXQgdGhlIHNpZ25hbCBvYmplY3QgdHlwZSBhbmQgdGhlIGFyZ3VtZW50IG5hbWUuIFdlIGFzc3VtZSB0aGUKLSAgICAgdHlwZSBpcyBhIHBvaW50ZXIgLSBJIHRoaW5rIHRoYXQgaXMgT0suIFdlIHJlbW92ZSAiR3RrIiBvciAiR25vbWUiIGFuZAotICAgICBjb252ZXJ0IHRvIGxvd2VyIGNhc2UgZm9yIHRoZSBhcmd1bWVudCBuYW1lLiAqLwotICBwb3MgPSBidWZmZXI7Ci0gIHNwcmludGYgKHBvcywgIiVzICIsIG9iamVjdF9uYW1lKTsKLSAgcG9zICs9IHN0cmxlbiAocG9zKTsKLQotICAvKiBUcnkgdG8gY29tZSB1cCB3aXRoIGEgc2Vuc2libGUgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGZpcnN0IGFyZwotICAgKiBJdCBjaG9wcyBvZmYgMiBrbm93IHByZWZpeGVzIDovIGFuZCBtYWtlcyB0aGUgbmFtZSBsb3dlcmNhc2UKLSAgICogSXQgc2hvdWxkIHJlcGxhY2UgbG93ZXJjYXNlIC0+IHVwcGVyY2FzZSB3aXRoICdfJwotICAgKiBHRmlsZU1vbml0b3IgLT4gZmlsZV9tb25pdG9yCi0gICAqIEdJT0V4dGVuc2lvblBvaW50IC0+IGV4dGVuc2lvbl9wb2ludAotICAgKiBHdGtUcmVlVmlldyAtPiB0cmVlX3ZpZXcKLSAgICogaWYgMm5kIGNoYXIgaXMgdXBwZXIgY2FzZSB0b28KLSAgICogICBzZWFyY2ggZm9yIGZpcnN0IGxvd2VyIGNhc2UgYW5kIGdvIGJhY2sgb25lIGNoYXIKLSAgICogZWxzZQotICAgKiAgIHNlYXJjaCBmb3IgbmV4dCB1cHBlciBjYXNlCi0gICAqLwotICBpZiAoIXN0cm5jbXAgKG9iamVjdF9uYW1lLCAiR3RrIiwgMykpCi0gICAgICBvYmplY3RfYXJnID0gb2JqZWN0X25hbWUgKyAzOwotICBlbHNlIGlmICghc3RybmNtcCAob2JqZWN0X25hbWUsICJHbm9tZSIsIDUpKQotICAgICAgb2JqZWN0X2FyZyA9IG9iamVjdF9uYW1lICsgNTsKLSAgZWxzZQotICAgICAgb2JqZWN0X2FyZyA9IG9iamVjdF9uYW1lOwotCi0gIG9iamVjdF9hcmdfbG93ZXIgPSBnX2FzY2lpX3N0cmRvd24gKG9iamVjdF9hcmcsIC0xKTsKLSAgc3ByaW50ZiAocG9zLCAiKiVzXFxuIiwgb2JqZWN0X2FyZ19sb3dlcik7Ci0gIHBvcyArPSBzdHJsZW4gKHBvcyk7Ci0gIGlmICghc3RybmNtcCAob2JqZWN0X2FyZ19sb3dlciwgIndpZGdldCIsIDYpKQotICAgIHdpZGdldF9udW0gPSAyOwotICBnX2ZyZWUob2JqZWN0X2FyZ19sb3dlcik7Ci0KLSAgLyogQ29udmVydCBzaWduYWwgbmFtZSB0byB1c2UgdW5kZXJzY29yZXMgcmF0aGVyIHRoYW4gZGFzaGVzICctJy4gKi8KLSAgc3RybmNweSAoc2lnbmFsX25hbWUsIHF1ZXJ5X2luZm8uc2lnbmFsX25hbWUsIDEyNyk7Ci0gIHNpZ25hbF9uYW1lWzEyN10gPSAnXFwwJzsKLSAgZm9yIChpID0gMDsgc2lnbmFsX25hbWVbaV07IGkrKykKLSAgICB7Ci0gICAgICBpZiAoc2lnbmFsX25hbWVbaV0gPT0gJy0nKQotCXNpZ25hbF9uYW1lW2ldID0gJ18nOwotICAgIH0KLQotICAvKiBPdXRwdXQgdGhlIHNpZ25hbCBwYXJhbWV0ZXJzLiAqLwotICBmb3IgKHBhcmFtID0gMDsgcGFyYW0gPCBxdWVyeV9pbmZvLm5fcGFyYW1zOyBwYXJhbSsrKQotICAgIHsKLSAgICAgIHR5cGVfbmFtZSA9IGdldF90eXBlX25hbWUgKHF1ZXJ5X2luZm8ucGFyYW1fdHlwZXNbcGFyYW1dICYgfkdfU0lHTkFMX1RZUEVfU1RBVElDX1NDT1BFLCAmaXNfcG9pbnRlcik7Ci0KLSAgICAgIC8qIE1vc3QgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBhcmUgY2FsbGVkICJhcmcxIiwgImFyZzIiLCBldGMuCi0gICAgICAgICBHdGtXaWRnZXRzIGFyZSBjYWxsZWQgIndpZGdldCIsICJ3aWRnZXQyIiwgLi4uCi0gICAgICAgICBHdGtDYWxsYmFja3MgYXJlIGNhbGxlZCAiY2FsbGJhY2siLCAiY2FsbGJhY2syIiwgLi4uICovCi0gICAgICBpZiAoIXN0cmNtcCAodHlwZV9uYW1lLCAiR3RrV2lkZ2V0IikpCi0gICAgICAgIHsKLSAgICAgICAgICBhcmdfbmFtZSA9ICJ3aWRnZXQiOwotICAgICAgICAgIGFyZ19udW0gPSAmd2lkZ2V0X251bTsKLSAgICAgICAgfQotICAgICAgZWxzZSBpZiAoIXN0cmNtcCAodHlwZV9uYW1lLCAiR3RrQ2FsbGJhY2siKQotICAgICAgICAgICAgICAgfHwgIXN0cmNtcCAodHlwZV9uYW1lLCAiR3RrQ0NhbGxiYWNrIikpCi0gICAgICAgIHsKLSAgICAgICAgICBhcmdfbmFtZSA9ICJjYWxsYmFjayI7Ci0gICAgICAgICAgYXJnX251bSA9ICZjYWxsYmFja19udW07Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGFyZ19uYW1lID0gImFyZyI7Ci0gICAgICAgICAgYXJnX251bSA9ICZwYXJhbV9udW07Ci0gICAgICAgIH0KLSAgICAgIHNwcmludGYgKHBvcywgIiVzICIsIHR5cGVfbmFtZSk7Ci0gICAgICBwb3MgKz0gc3RybGVuIChwb3MpOwotCi0gICAgICBpZiAoIWFyZ19udW0gfHwgKmFyZ19udW0gPT0gMCkKLSAgICAgICAgc3ByaW50ZiAocG9zLCAiJXMlc1xcbiIsIGlzX3BvaW50ZXIgPyAiKiIgOiAiICIsIGFyZ19uYW1lKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc3ByaW50ZiAocG9zLCAiJXMlcyVpXFxuIiwgaXNfcG9pbnRlciA/ICIqIiA6ICIgIiwgYXJnX25hbWUsCi0gICAgICAgICAgICAgICAgICphcmdfbnVtKTsKLSAgICAgIHBvcyArPSBzdHJsZW4gKHBvcyk7Ci0KLSAgICAgIGlmIChhcmdfbnVtKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCphcmdfbnVtID09IDApCi0gICAgICAgICAgICAqYXJnX251bSA9IDI7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgKmFyZ19udW0gKz0gMTsKLSAgICAgICAgfQotICAgIH0KLQotICBwb3MgPSBmbGFnczsKLSAgLyogV2UgdXNlIG9uZS1jaGFyYWN0ZXIgZmxhZ3MgZm9yIHNpbXBsaWNpdHkuICovCi0gIGlmIChxdWVyeV9pbmZvLnNpZ25hbF9mbGFncyAmIEdfU0lHTkFMX1JVTl9GSVJTVCkKLSAgICAqcG9zKysgPSAnZic7Ci0gIGlmIChxdWVyeV9pbmZvLnNpZ25hbF9mbGFncyAmIEdfU0lHTkFMX1JVTl9MQVNUKQotICAgICpwb3MrKyA9ICdsJzsKLSAgaWYgKHF1ZXJ5X2luZm8uc2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfUlVOX0NMRUFOVVApCi0gICAgKnBvcysrID0gJ2MnOwotICBpZiAocXVlcnlfaW5mby5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9OT19SRUNVUlNFKQotICAgICpwb3MrKyA9ICdyJzsKLSAgaWYgKHF1ZXJ5X2luZm8uc2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfREVUQUlMRUQpCi0gICAgKnBvcysrID0gJ2QnOwotICBpZiAocXVlcnlfaW5mby5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9BQ1RJT04pCi0gICAgKnBvcysrID0gJ2EnOwotICBpZiAocXVlcnlfaW5mby5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9OT19IT09LUykKLSAgICAqcG9zKysgPSAnaCc7Ci0gICpwb3MgPSAwOwotCi0gIC8qIE91dHB1dCB0aGUgcmV0dXJuIHR5cGUgYW5kIGZ1bmN0aW9uIG5hbWUuICovCi0gIHJldF90eXBlID0gZ2V0X3R5cGVfbmFtZSAocXVlcnlfaW5mby5yZXR1cm5fdHlwZSAmIH5HX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSwgJmlzX3BvaW50ZXIpOwotCi0gIGZwcmludGYgKGZwLAotCSAgICI8U0lHTkFMPlxcbjxOQU1FPiVzOjolczwvTkFNRT5cXG48UkVUVVJOUz4lcyVzPC9SRVRVUk5TPlxcbjxGTEFHUz4lczwvRkxBR1M+XFxuJXM8L1NJR05BTD5cXG5cXG4iLAotCSAgIG9iamVjdF9uYW1lLCBxdWVyeV9pbmZvLnNpZ25hbF9uYW1lLCByZXRfdHlwZSwgaXNfcG9pbnRlciA/ICIqIiA6ICIiLCBmbGFncywgYnVmZmVyKTsKLX0KLQotCi0vKiBSZXR1cm5zIHRoZSB0eXBlIG5hbWUgdG8gdXNlIGZvciBhIHNpZ25hbCBhcmd1bWVudCBvciByZXR1cm4gdmFsdWUsIGdpdmVuCi0gICB0aGUgR3RrVHlwZSBmcm9tIHRoZSBzaWduYWwgaW5mby4gSXQgYWxzbyBzZXRzIGlzX3BvaW50ZXIgdG8gVFJVRSBpZiB0aGUKLSAgIGFyZ3VtZW50IG5lZWRzIGEgJyonIHNpbmNlIGl0IGlzIGEgcG9pbnRlci4gKi8KLXN0YXRpYyBjb25zdCBnY2hhciAqCi1nZXRfdHlwZV9uYW1lIChHVHlwZSB0eXBlLCBnYm9vbGVhbiAqIGlzX3BvaW50ZXIpCi17Ci0gIGNvbnN0IGdjaGFyICp0eXBlX25hbWU7Ci0KLSAgKmlzX3BvaW50ZXIgPSBGQUxTRTsKLSAgdHlwZV9uYW1lID0gZ190eXBlX25hbWUgKHR5cGUpOwotCi0gIHN3aXRjaCAodHlwZSkgewotICBjYXNlIEdfVFlQRV9OT05FOgotICBjYXNlIEdfVFlQRV9DSEFSOgotICBjYXNlIEdfVFlQRV9VQ0hBUjoKLSAgY2FzZSBHX1RZUEVfQk9PTEVBTjoKLSAgY2FzZSBHX1RZUEVfSU5UOgotICBjYXNlIEdfVFlQRV9VSU5UOgotICBjYXNlIEdfVFlQRV9MT05HOgotICBjYXNlIEdfVFlQRV9VTE9ORzoKLSAgY2FzZSBHX1RZUEVfRkxPQVQ6Ci0gIGNhc2UgR19UWVBFX0RPVUJMRToKLSAgY2FzZSBHX1RZUEVfUE9JTlRFUjoKLSAgICAvKiBUaGVzZSBhbGwgaGF2ZSBub3JtYWwgQyB0eXBlIG5hbWVzIHNvIHRoZXkgYXJlIE9LLiAqLwotICAgIHJldHVybiB0eXBlX25hbWU7Ci0KLSAgY2FzZSBHX1RZUEVfU1RSSU5HOgotICAgIC8qIEEgR3RrU3RyaW5nIGlzIHJlYWxseSBhIGdjaGFyKi4gKi8KLSAgICAqaXNfcG9pbnRlciA9IFRSVUU7Ci0gICAgcmV0dXJuICJnY2hhciI7Ci0KLSAgY2FzZSBHX1RZUEVfRU5VTToKLSAgY2FzZSBHX1RZUEVfRkxBR1M6Ci0gICAgLyogV2UgdXNlIGEgZ2ludCBmb3IgYm90aCBvZiB0aGVzZS4gSG9wZWZ1bGx5IGEgc3VidHlwZSB3aXRoIGEgZGVjZW50Ci0gICAgICAgbmFtZSB3aWxsIGJlIHJlZ2lzdGVyZWQgYW5kIHVzZWQgaW5zdGVhZCwgYXMgR1RLKyBkb2VzIGl0c2VsZi4gKi8KLSAgICByZXR1cm4gImdpbnQiOwotCi0gIGNhc2UgR19UWVBFX0JPWEVEOgotICAgIC8qIFRoZSBib3hlZCB0eXBlIHNob3VsZG4ndCBiZSB1c2VkIGl0c2VsZiwgb25seSBzdWJ0eXBlcy4gVGhvdWdoIHdlCi0gICAgICAgcmV0dXJuICdncG9pbnRlcicganVzdCBpbiBjYXNlLiAqLwotICAgIHJldHVybiAiZ3BvaW50ZXIiOwotCi0gIGNhc2UgR19UWVBFX1BBUkFNOgotICAgIC8qIEEgR1BhcmFtIGlzIHJlYWxseSBhIEdQYXJhbVNwZWMqLiAqLwotICAgICppc19wb2ludGVyID0gVFJVRTsKLSAgICByZXR1cm4gIkdQYXJhbVNwZWMiOwotCi0jaWYgR0xJQl9DSEVDS19WRVJTSU9OICgyLCAyNSwgOSkKLSAgY2FzZSBHX1RZUEVfVkFSSUFOVDoKLSAgICAqaXNfcG9pbnRlciA9IFRSVUU7Ci0gICAgcmV0dXJuICJHVmFyaWFudCI7Ci0jZW5kaWYKLQotZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotCi0gIC8qIEZvciBhbGwgR09iamVjdCBzdWJjbGFzc2VzIHdlIGNhbiB1c2UgdGhlIGNsYXNzIG5hbWUgd2l0aCBhICIqIiwKLSAgICAgZS5nLiAnR3RrV2lkZ2V0IConLiAqLwotICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9PQkpFQ1QpKQotICAgICppc19wb2ludGVyID0gVFJVRTsKLQotICAvKiBBbHNvIGNhdGNoIG5vbiBHT2JqZWN0IHJvb3QgdHlwZXMgKi8KLSAgaWYgKEdfVFlQRV9JU19DTEFTU0VEICh0eXBlKSkKLSAgICAqaXNfcG9pbnRlciA9IFRSVUU7Ci0KLSAgLyogQWxsIGJveGVkIHN1YnR5cGVzIHdpbGwgYmUgcG9pbnRlcnMgYXMgd2VsbC4gKi8KLSAgLyogRXhjZXB0aW9uOiBHU3RydiAqLwotICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9CT1hFRCkgJiYKLSAgICAgICFnX3R5cGVfaXNfYSAodHlwZSwgR19UWVBFX1NUUlYpKQotICAgICppc19wb2ludGVyID0gVFJVRTsKLQotICAvKiBBbGwgcG9pbnRlciBzdWJ0eXBlcyB3aWxsIGJlIHBvaW50ZXJzIGFzIHdlbGwuICovCi0gIGlmIChnX3R5cGVfaXNfYSAodHlwZSwgR19UWVBFX1BPSU5URVIpKQotICAgICppc19wb2ludGVyID0gVFJVRTsKLQotICAvKiBCdXQgZW51bXMgYXJlIG5vdCAqLwotICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9FTlVNKSB8fAotICAgICAgZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9GTEFHUykpCi0gICAgKmlzX3BvaW50ZXIgPSBGQUxTRTsKLQotICByZXR1cm4gdHlwZV9uYW1lOwotfQotCi0KLS8qIFRoaXMgb3V0cHV0cyB0aGUgaGllcmFyY2h5IG9mIGFsbCBvYmplY3RzIHdoaWNoIGhhdmUgYmVlbiBpbml0aWFsaXplZCwKLSAgIGkuZS4gYnkgY2FsbGluZyB0aGVpciBYWFhfZ2V0X3R5cGUoKSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gKi8KLXN0YXRpYyB2b2lkCi1vdXRwdXRfb2JqZWN0X2hpZXJhcmNoeSAodm9pZCkKLXsKLSAgRklMRSAqZnA7Ci0gIGdpbnQgaSxqOwotICBHVHlwZSByb290LCB0eXBlOwotICBHVHlwZSByb290X3R5cGVzWyRudHlwZXNdID0geyBHX1RZUEVfSU5WQUxJRCwgfTsKLQotICBmcCA9IGZvcGVuIChoaWVyYXJjaHlfZmlsZW5hbWUsICJ3Iik7Ci0gIGlmIChmcCA9PSBOVUxMKQotICAgIHsKLSAgICAgIGdfd2FybmluZyAoIkNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGU6ICVzIDogJXMiLCBoaWVyYXJjaHlfZmlsZW5hbWUsIGdfc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIG91dHB1dF9oaWVyYXJjaHkgKGZwLCBHX1RZUEVfT0JKRUNULCAwKTsKLSAgb3V0cHV0X2hpZXJhcmNoeSAoZnAsIEdfVFlQRV9JTlRFUkZBQ0UsIDApOwotCi0gIGZvciAoaT0wOyBvYmplY3RfdHlwZXNbaV07IGkrKykgewotICAgIHJvb3QgPSBvYmplY3RfdHlwZXNbaV07Ci0gICAgd2hpbGUgKCh0eXBlID0gZ190eXBlX3BhcmVudCAocm9vdCkpKSB7Ci0gICAgICByb290ID0gdHlwZTsKLSAgICB9Ci0gICAgaWYgKChyb290ICE9IEdfVFlQRV9PQkpFQ1QpICYmIChyb290ICE9IEdfVFlQRV9JTlRFUkZBQ0UpKSB7Ci0gICAgICBmb3IgKGo9MDsgcm9vdF90eXBlc1tqXTsgaisrKSB7Ci0gICAgICAgIGlmIChyb290ID09IHJvb3RfdHlwZXNbal0pIHsKLSAgICAgICAgICByb290ID0gR19UWVBFX0lOVkFMSUQ7IGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZihyb290KSB7Ci0gICAgICAgIHJvb3RfdHlwZXNbal0gPSByb290OwotICAgICAgICBvdXRwdXRfaGllcmFyY2h5IChmcCwgcm9vdCwgMCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZmNsb3NlIChmcCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvbXBhcmVfdHlwZXMgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0gIGNvbnN0IGNoYXIgKm5hID0gZ190eXBlX25hbWUgKCooKEdUeXBlICopYSkpOwotICBjb25zdCBjaGFyICpuYiA9IGdfdHlwZV9uYW1lICgqKChHVHlwZSAqKWIpKTsKLQotICByZXR1cm4gZ19zdHJjbXAwIChuYSwgbmIpOwotfQotCi0KLS8qIFRoaXMgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5IHRvIG91dHB1dCB0aGUgaGllcmFyY2h5IG9mIGEgb2JqZWN0LiAqLwotc3RhdGljIHZvaWQKLW91dHB1dF9oaWVyYXJjaHkgKEZJTEUgICpmcCwKLQkJICBHVHlwZSAgdHlwZSwKLQkJICBndWludCAgIGxldmVsKQotewotICBndWludCBpOwotICBHVHlwZSAqY2hpbGRyZW47Ci0gIGd1aW50IG5fY2hpbGRyZW47Ci0KLSAgaWYgKCF0eXBlKQotICAgIHJldHVybjsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGV2ZWw7IGkrKykKLSAgICBmcHJpbnRmIChmcCwgIiAgIik7Ci0gIGZwcmludGYgKGZwLCAiJXNcXG4iLCBnX3R5cGVfbmFtZSAodHlwZSkpOwotCi0gIGNoaWxkcmVuID0gZ190eXBlX2NoaWxkcmVuICh0eXBlLCAmbl9jaGlsZHJlbik7Ci0gIHFzb3J0IChjaGlsZHJlbiwgbl9jaGlsZHJlbiwgc2l6ZW9mIChHVHlwZSksIGNvbXBhcmVfdHlwZXMpOwotCi0KLSAgZm9yIChpPTA7IGkgPCBuX2NoaWxkcmVuOyBpKyspCi0gICAgb3V0cHV0X2hpZXJhcmNoeSAoZnAsIGNoaWxkcmVuW2ldLCBsZXZlbCArIDEpOwotCi0gIGdfZnJlZSAoY2hpbGRyZW4pOwotfQotCi1zdGF0aWMgdm9pZCBvdXRwdXRfb2JqZWN0X2ludGVyZmFjZXMgKHZvaWQpCi17Ci0gIGd1aW50IGk7Ci0gIEZJTEUgKmZwOwotCi0gIGZwID0gZm9wZW4gKGludGVyZmFjZXNfZmlsZW5hbWUsICJ3Iik7Ci0gIGlmIChmcCA9PSBOVUxMKQotICAgIHsKLSAgICAgIGdfd2FybmluZyAoIkNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGU6ICVzIDogJXMiLCBpbnRlcmZhY2VzX2ZpbGVuYW1lLCBnX3N0cmVycm9yKGVycm5vKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICBvdXRwdXRfaW50ZXJmYWNlcyAoZnAsIEdfVFlQRV9PQkpFQ1QpOwotCi0gIGZvciAoaSA9IDA7IG9iamVjdF90eXBlc1tpXTsgaSsrKQotICAgIHsKLSAgICAgIGlmICghZ190eXBlX3BhcmVudCAob2JqZWN0X3R5cGVzW2ldKSAmJgotICAgICAgICAgIChvYmplY3RfdHlwZXNbaV0gIT0gR19UWVBFX09CSkVDVCkgJiYKLSAgICAgICAgICBHX1RZUEVfSVNfSU5TVEFOVElBVEFCTEUgKG9iamVjdF90eXBlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBvdXRwdXRfaW50ZXJmYWNlcyAoZnAsIG9iamVjdF90eXBlc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gIGZjbG9zZSAoZnApOwotfQotCi1zdGF0aWMgdm9pZAotb3V0cHV0X2ludGVyZmFjZXMgKEZJTEUgICpmcCwKLQkJICAgR1R5cGUgIHR5cGUpCi17Ci0gIGd1aW50IGk7Ci0gIEdUeXBlICpjaGlsZHJlbiwgKmludGVyZmFjZXM7Ci0gIGd1aW50IG5fY2hpbGRyZW4sIG5faW50ZXJmYWNlczsKLQotICBpZiAoIXR5cGUpCi0gICAgcmV0dXJuOwotCi0gIGludGVyZmFjZXMgPSBnX3R5cGVfaW50ZXJmYWNlcyAodHlwZSwgJm5faW50ZXJmYWNlcyk7Ci0KLSAgaWYgKG5faW50ZXJmYWNlcyA+IDApCi0gICAgewotICAgICAgZnByaW50ZiAoZnAsICIlcyIsIGdfdHlwZV9uYW1lICh0eXBlKSk7Ci0gICAgICBmb3IgKGk9MDsgaSA8IG5faW50ZXJmYWNlczsgaSsrKQotICAgICAgICAgIGZwcmludGYgKGZwLCAiICVzIiwgZ190eXBlX25hbWUgKGludGVyZmFjZXNbaV0pKTsKLSAgICAgIGZwcmludGYgKGZwLCAiXFxuIik7Ci0gICAgIH0KLSAgZ19mcmVlIChpbnRlcmZhY2VzKTsKLQotICBjaGlsZHJlbiA9IGdfdHlwZV9jaGlsZHJlbiAodHlwZSwgJm5fY2hpbGRyZW4pOwotCi0gIGZvciAoaT0wOyBpIDwgbl9jaGlsZHJlbjsgaSsrKQotICAgIG91dHB1dF9pbnRlcmZhY2VzIChmcCwgY2hpbGRyZW5baV0pOwotCi0gIGdfZnJlZSAoY2hpbGRyZW4pOwotfQotCi1zdGF0aWMgdm9pZCBvdXRwdXRfaW50ZXJmYWNlX3ByZXJlcXVpc2l0ZXMgKHZvaWQpCi17Ci0gIEZJTEUgKmZwOwotCi0gIGZwID0gZm9wZW4gKHByZXJlcXVpc2l0ZXNfZmlsZW5hbWUsICJ3Iik7Ci0gIGlmIChmcCA9PSBOVUxMKQotICAgIHsKLSAgICAgIGdfd2FybmluZyAoIkNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGU6ICVzIDogJXMiLCBwcmVyZXF1aXNpdGVzX2ZpbGVuYW1lLCBnX3N0cmVycm9yKGVycm5vKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICBvdXRwdXRfcHJlcmVxdWlzaXRlcyAoZnAsIEdfVFlQRV9JTlRFUkZBQ0UpOwotICBmY2xvc2UgKGZwKTsKLX0KLQotc3RhdGljIHZvaWQKLW91dHB1dF9wcmVyZXF1aXNpdGVzIChGSUxFICAqZnAsCi0JCSAgICAgIEdUeXBlICB0eXBlKQotewotI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLDEsMCkKLSAgZ3VpbnQgaTsKLSAgR1R5cGUgKmNoaWxkcmVuLCAqcHJlcmVxdWlzaXRlczsKLSAgZ3VpbnQgbl9jaGlsZHJlbiwgbl9wcmVyZXF1aXNpdGVzOwotCi0gIGlmICghdHlwZSkKLSAgICByZXR1cm47Ci0KLSAgcHJlcmVxdWlzaXRlcyA9IGdfdHlwZV9pbnRlcmZhY2VfcHJlcmVxdWlzaXRlcyAodHlwZSwgJm5fcHJlcmVxdWlzaXRlcyk7Ci0KLSAgaWYgKG5fcHJlcmVxdWlzaXRlcyA+IDApCi0gICAgewotICAgICAgZnByaW50ZiAoZnAsICIlcyIsIGdfdHlwZV9uYW1lICh0eXBlKSk7Ci0gICAgICBmb3IgKGk9MDsgaSA8IG5fcHJlcmVxdWlzaXRlczsgaSsrKQotICAgICAgICAgIGZwcmludGYgKGZwLCAiICVzIiwgZ190eXBlX25hbWUgKHByZXJlcXVpc2l0ZXNbaV0pKTsKLSAgICAgIGZwcmludGYgKGZwLCAiXFxuIik7Ci0gICAgIH0KLSAgZ19mcmVlIChwcmVyZXF1aXNpdGVzKTsKLQotICBjaGlsZHJlbiA9IGdfdHlwZV9jaGlsZHJlbiAodHlwZSwgJm5fY2hpbGRyZW4pOwotCi0gIGZvciAoaT0wOyBpIDwgbl9jaGlsZHJlbjsgaSsrKQotICAgIG91dHB1dF9wcmVyZXF1aXNpdGVzIChmcCwgY2hpbGRyZW5baV0pOwotCi0gIGdfZnJlZSAoY2hpbGRyZW4pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkCi1vdXRwdXRfYXJncyAodm9pZCkKLXsKLSAgRklMRSAqZnA7Ci0gIGdpbnQgaTsKLQotICBmcCA9IGZvcGVuIChhcmdzX2ZpbGVuYW1lLCAidyIpOwotICBpZiAoZnAgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlOiAlcyA6ICVzIiwgYXJnc19maWxlbmFtZSwgZ19zdHJlcnJvcihlcnJubykpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBmb3IgKGkgPSAwOyBvYmplY3RfdHlwZXNbaV07IGkrKykgewotICAgIG91dHB1dF9vYmplY3RfYXJncyAoZnAsIG9iamVjdF90eXBlc1tpXSk7Ci0gIH0KLQotICBmY2xvc2UgKGZwKTsKLX0KLQotc3RhdGljIGdpbnQKLWNvbXBhcmVfcGFyYW1fc3BlY3MgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0gIEdQYXJhbVNwZWMgKnNwZWNfYSA9ICooR1BhcmFtU3BlYyAqKilhOwotICBHUGFyYW1TcGVjICpzcGVjX2IgPSAqKEdQYXJhbVNwZWMgKiopYjsKLQotICByZXR1cm4gc3RyY21wIChnX3BhcmFtX3NwZWNfZ2V0X25hbWUgKHNwZWNfYSksIGdfcGFyYW1fc3BlY19nZXRfbmFtZSAoc3BlY19iKSk7Ci19Ci0KLS8qIEl0cyBjb21tb24gdG8gaGF2ZSB1bnNpZ25lZCBwcm9wZXJ0aWVzIHJlc3RyaWN0ZWQKLSAqIHRvIHRoZSBzaWduZWQgcmFuZ2UuIFRoZXJlZm9yZSB3ZSBtYWtlIHRoaXMgbG9vawotICogYSBiaXQgbmljZXIgYnkgc3BlbGxpbmcgb3V0IHRoZSBtYXggY29uc3RhbnRzLgotICovCi0KLS8qIERvbid0IHVzZSAiPT0iIHdpdGggZmxvYXRzLCBpdCBtaWdodCB0cmlnZ2VyIGEgZ2NjIHdhcm5pbmcuICAqLwotI2RlZmluZSBHVEtET0NfQ09NUEFSRV9GTE9BVCh4LCB5KSAoeCA8PSB5ICYmIHggPj0geSkKLQotc3RhdGljIGdjaGFyKgotZGVzY3JpYmVfZG91YmxlX2NvbnN0YW50IChnZG91YmxlIHZhbHVlKQotewotICBnY2hhciAqZGVzYzsKLQotICBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCBHX01BWERPVUJMRSkpCi0gICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhET1VCTEUiKTsKLSAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCBHX01JTkRPVUJMRSkpCi0gICAgZGVzYyA9IGdfc3RyZHVwICgiR19NSU5ET1VCTEUiKTsKLSAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCAtR19NQVhET1VCTEUpKQotICAgIGRlc2MgPSBnX3N0cmR1cCAoIi1HX01BWERPVUJMRSIpOwotICBlbHNlIGlmIChHVEtET0NfQ09NUEFSRV9GTE9BVCAodmFsdWUsIEdfTUFYRkxPQVQpKQotICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYRkxPQVQiKTsKLSAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCBHX01JTkZMT0FUKSkKLSAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01JTkZMT0FUIik7Ci0gIGVsc2UgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUICh2YWx1ZSwgLUdfTUFYRkxPQVQpKQotICAgIGRlc2MgPSBnX3N0cmR1cCAoIi1HX01BWEZMT0FUIik7Ci0gIGVsc2V7Ci0gICAgLyogbWFrZSBzdXJlIGZsb2F0cyBhcmUgb3V0cHV0IHdpdGggYSBkZWNpbWFsIGRvdCBpcnJlc3BlY3RpdmUgb2YKLSAgICAqIGN1cnJlbnQgbG9jYWxlLiBVc2UgZm9ybWF0ZCBzaW5jZSB3ZSB3YW50IGh1bWFuLXJlYWRhYmxlIG51bWJlcnMKLSAgICAqIGFuZCBkbyBub3QgbmVlZCB0aGUgZXhhY3Qgc2FtZSBiaXQgcmVwcmVzZW50YXRpb24gd2hlbiBkZXNlcmlhbGlzaW5nICovCi0gICAgZGVzYyA9IGdfbWFsbG9jMCAoR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUpOwotICAgIGdfYXNjaWlfZm9ybWF0ZCAoZGVzYywgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsICIlZyIsIHZhbHVlKTsKLSAgfQotCi0gIHJldHVybiBkZXNjOwotfQotCi1zdGF0aWMgZ2NoYXIqCi1kZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKGdzaXplIHNpemUsIGdpbnQ2NCB2YWx1ZSkKLXsKLSAgZ2NoYXIgKmRlc2MgPSBOVUxMOwotCi0gIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgODoKLSAgICAgIGlmICh2YWx1ZSA9PSBHX01BWElOVDY0KQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWElOVDY0Iik7Ci0gICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01JTklOVDY0KQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01JTklOVDY0Iik7Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIDQ6Ci0gICAgICBpZiAoc2l6ZW9mIChpbnQpID09IDQpIHsKLSAgICAgICAgaWYgKHZhbHVlID09IEdfTUFYSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYSU5UIik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUlOSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUlOSU5UIik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IChnaW50NjQpR19NQVhVSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUlOVCIpOwotICAgICAgfQotICAgICAgaWYgKHZhbHVlID09IEdfTUFYTE9ORykKLSAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhMT05HIik7Ci0gICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01JTkxPTkcpCi0gICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUlOTE9ORyIpOwotICAgICAgZWxzZSBpZiAodmFsdWUgPT0gKGdpbnQ2NClHX01BWFVMT05HKQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWFVMT05HIik7Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIDI6Ci0gICAgICBpZiAoc2l6ZW9mIChpbnQpID09IDIpIHsKLSAgICAgICAgaWYgKHZhbHVlID09IEdfTUFYSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYSU5UIik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUlOSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUlOSU5UIik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IChnaW50NjQpR19NQVhVSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUlOVCIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIGlmICghZGVzYykKLSAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HSU5UNjRfRk9STUFULCB2YWx1ZSk7Ci0KLSAgcmV0dXJuIGRlc2M7Ci19Ci0KLXN0YXRpYyBnY2hhcioKLWRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChnc2l6ZSBzaXplLCBndWludDY0IHZhbHVlKQotewotICBnY2hhciAqZGVzYyA9IE5VTEw7Ci0KLSAgc3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSA4OgotICAgICAgaWYgKHZhbHVlID09IEdfTUFYSU5UNjQpCi0gICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYSU5UNjQiKTsKLSAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUFYVUlOVDY0KQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWFVJTlQ2NCIpOwotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSA0OgotICAgICAgaWYgKHNpemVvZiAoaW50KSA9PSA0KSB7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSAoZ3VpbnQ2NClHX01BWElOVCkKLSAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWElOVCIpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01BWFVJTlQpCi0gICAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhVSU5UIik7Ci0gICAgICB9Ci0gICAgICBpZiAodmFsdWUgPT0gKGd1aW50NjQpR19NQVhMT05HKQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWExPTkciKTsKLSAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUFYVUxPTkcpCi0gICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUxPTkciKTsKLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGNhc2UgMjoKLSAgICAgIGlmIChzaXplb2YgKGludCkgPT0gMikgewotICAgICAgICBpZiAodmFsdWUgPT0gKGd1aW50NjQpR19NQVhJTlQpCi0gICAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhJTlQiKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gR19NQVhVSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUlOVCIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIGlmICghZGVzYykKLSAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HVUlOVDY0X0ZPUk1BVCwgdmFsdWUpOwotCi0gIHJldHVybiBkZXNjOwotfQotCi1zdGF0aWMgZ2NoYXIqCi1kZXNjcmliZV90eXBlIChHUGFyYW1TcGVjICpzcGVjKQotewotICBnY2hhciAqZGVzYzsKLSAgZ2NoYXIgKmxvd2VyOwotICBnY2hhciAqdXBwZXI7Ci0KLSAgaWYgKEdfSVNfUEFSQU1fU1BFQ19DSEFSIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjQ2hhciAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfQ0hBUiAoc3BlYyk7Ci0KLSAgICAgIGxvd2VyID0gZGVzY3JpYmVfc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ2NoYXIpLCBwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX3NpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGdjaGFyKSwgcHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IEdfTUlOSU5UOCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWElOVDgpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTklOVDgpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1heGltdW0gPT0gR19NQVhJTlQ4KQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VDSEFSIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUNoYXIgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VDSEFSIChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV91bnNpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGd1Y2hhciksIHBzcGVjLT5taW5pbXVtKTsKLSAgICAgIHVwcGVyID0gZGVzY3JpYmVfdW5zaWduZWRfY29uc3RhbnQgKHNpemVvZihndWNoYXIpLCBwc3BlYy0+bWF4aW11bSk7Ci0gICAgICBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVJTlQ4KQotCWRlc2MgPSBnX3N0cmR1cCAoIiIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCkKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVJTlQ4KQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0lOVCAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY0ludCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfSU5UIChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnaW50KSwgcHNwZWMtPm1pbmltdW0pOwotICAgICAgdXBwZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnaW50KSwgcHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IEdfTUlOSU5UICYmIHBzcGVjLT5tYXhpbXVtID09IEdfTUFYSU5UKQotCWRlc2MgPSBnX3N0cmR1cCAoIiIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gR19NSU5JTlQpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1heGltdW0gPT0gR19NQVhJTlQpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIj49ICVzIiwgbG93ZXIpOwotICAgICAgZWxzZQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwgbG93ZXIsIHVwcGVyKTsKLSAgICAgIGdfZnJlZSAobG93ZXIpOwotICAgICAgZ19mcmVlICh1cHBlcik7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfVUlOVCAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY1VJbnQgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VJTlQgKHNwZWMpOwotCi0gICAgICBsb3dlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3VpbnQpLCBwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3VpbnQpLCBwc3BlYy0+bWF4aW11bSk7Ci0gICAgICBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVJTlQpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSAwKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKLSAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYVUlOVCkKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7Ci0gICAgICBlbHNlCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOwotICAgICAgZ19mcmVlIChsb3dlcik7Ci0gICAgICBnX2ZyZWUgKHVwcGVyKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19MT05HIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjTG9uZyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfTE9ORyAoc3BlYyk7Ci0KLSAgICAgIGxvd2VyID0gZGVzY3JpYmVfc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ2xvbmcpLCBwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX3NpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGdsb25nKSwgcHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IEdfTUlOTE9ORyAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWExPTkcpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTkxPTkcpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1heGltdW0gPT0gR19NQVhMT05HKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VMT05HIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUxvbmcgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VMT05HIChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV91bnNpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGd1bG9uZyksIHBzcGVjLT5taW5pbXVtKTsKLSAgICAgIHVwcGVyID0gZGVzY3JpYmVfdW5zaWduZWRfY29uc3RhbnQgKHNpemVvZihndWxvbmcpLCBwc3BlYy0+bWF4aW11bSk7Ci0gICAgICBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVMT05HKQotCWRlc2MgPSBnX3N0cmR1cCAoIiIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCkKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVMT05HKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0lOVDY0IChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjSW50NjQgKnBzcGVjID0gR19QQVJBTV9TUEVDX0lOVDY0IChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnaW50NjQpLCBwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX3NpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGdpbnQ2NCksIHBzcGVjLT5tYXhpbXVtKTsKLSAgICAgIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTklOVDY0ICYmIHBzcGVjLT5tYXhpbXVtID09IEdfTUFYSU5UNjQpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTklOVDY0KQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKLSAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYSU5UNjQpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIj49ICVzIiwgbG93ZXIpOwotICAgICAgZWxzZQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwgbG93ZXIsIHVwcGVyKTsKLSAgICAgIGdfZnJlZSAobG93ZXIpOwotICAgICAgZ19mcmVlICh1cHBlcik7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfVUlOVDY0IChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUludDY0ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VSU5UNjQgKHNwZWMpOwotCi0gICAgICBsb3dlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3VpbnQ2NCksIHBzcGVjLT5taW5pbXVtKTsKLSAgICAgIHVwcGVyID0gZGVzY3JpYmVfdW5zaWduZWRfY29uc3RhbnQgKHNpemVvZihndWludDY0KSwgcHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IDAgJiYgcHNwZWMtPm1heGltdW0gPT0gR19NQVhVSU5UNjQpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSAwKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKLSAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYVUlOVDY0KQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0ZMT0FUIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjRmxvYXQgKnBzcGVjID0gR19QQVJBTV9TUEVDX0ZMT0FUIChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV9kb3VibGVfY29uc3RhbnQgKHBzcGVjLT5taW5pbXVtKTsKLSAgICAgIHVwcGVyID0gZGVzY3JpYmVfZG91YmxlX2NvbnN0YW50IChwc3BlYy0+bWF4aW11bSk7Ci0gICAgICBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHBzcGVjLT5taW5pbXVtLCAtR19NQVhGTE9BVCkpCi0JewotCSAgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUIChwc3BlYy0+bWF4aW11bSwgR19NQVhGTE9BVCkpCi0JICAgIGRlc2MgPSBnX3N0cmR1cCAoIiIpOwotCSAgZWxzZQotCSAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7Ci0JfQotICAgICAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHBzcGVjLT5tYXhpbXVtLCBHX01BWEZMT0FUKSkKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7Ci0gICAgICBlbHNlCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOwotICAgICAgZ19mcmVlIChsb3dlcik7Ci0gICAgICBnX2ZyZWUgKHVwcGVyKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19ET1VCTEUgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNEb3VibGUgKnBzcGVjID0gR19QQVJBTV9TUEVDX0RPVUJMRSAoc3BlYyk7Ci0KLSAgICAgIGxvd2VyID0gZGVzY3JpYmVfZG91YmxlX2NvbnN0YW50IChwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX2RvdWJsZV9jb25zdGFudCAocHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUIChwc3BlYy0+bWluaW11bSwgLUdfTUFYRE9VQkxFKSkKLQl7Ci0JICBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHBzcGVjLT5tYXhpbXVtLCBHX01BWERPVUJMRSkpCi0JICAgIGRlc2MgPSBnX3N0cmR1cCAoIiIpOwotCSAgZWxzZQotCSAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7Ci0JfQotICAgICAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHBzcGVjLT5tYXhpbXVtLCBHX01BWERPVUJMRSkpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIj49ICVzIiwgbG93ZXIpOwotICAgICAgZWxzZQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwgbG93ZXIsIHVwcGVyKTsKLSAgICAgIGdfZnJlZSAobG93ZXIpOwotICAgICAgZ19mcmVlICh1cHBlcik7Ci0gICAgfQotI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTiAoMiwgMTIsIDApCi0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19HVFlQRSAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY0dUeXBlICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19HVFlQRSAoc3BlYyk7Ci0gICAgICBnYm9vbGVhbiBpc19wb2ludGVyOwotCi0gICAgICBkZXNjID0gZ19zdHJkdXAgKGdldF90eXBlX25hbWUgKHBzcGVjLT5pc19hX3R5cGUsICZpc19wb2ludGVyKSk7Ci0gICAgfQotI2VuZGlmCi0jaWYgR0xJQl9DSEVDS19WRVJTSU9OICgyLCAyNSwgOSkKLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1ZBUklBTlQgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNWYXJpYW50ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19WQVJJQU5UIChzcGVjKTsKLSAgICAgIGdjaGFyICp2YXJpYW50X3R5cGU7Ci0KLSAgICAgIHZhcmlhbnRfdHlwZSA9IGdfdmFyaWFudF90eXBlX2R1cF9zdHJpbmcgKHBzcGVjLT50eXBlKTsKLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJHVmFyaWFudDwlcz4iLCB2YXJpYW50X3R5cGUpOwotICAgICAgZ19mcmVlICh2YXJpYW50X3R5cGUpOwotICAgIH0KLSNlbmRpZgotICBlbHNlCi0gICAgewotICAgICAgZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgfQotCi0gIHJldHVybiBkZXNjOwotfQotCi1zdGF0aWMgZ2NoYXIqCi1kZXNjcmliZV9kZWZhdWx0IChHUGFyYW1TcGVjICpzcGVjKQotewotICBnY2hhciAqZGVzYzsKLQotICBpZiAoR19JU19QQVJBTV9TUEVDX0NIQVIgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNDaGFyICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19DSEFSIChzcGVjKTsKLQotICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VDSEFSIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUNoYXIgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VDSEFSIChzcGVjKTsKLQotICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiV1IiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0JPT0xFQU4gKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNCb29sZWFuICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19CT09MRUFOIChzcGVjKTsKLQotICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzIiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUgPyAiVFJVRSIgOiAiRkFMU0UiKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19JTlQgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNJbnQgKnBzcGVjID0gR19QQVJBTV9TUEVDX0lOVCAoc3BlYyk7Ci0KLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19VSU5UIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUludCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfVUlOVCAoc3BlYyk7Ci0KLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19MT05HIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjTG9uZyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfTE9ORyAoc3BlYyk7Ci0KLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlbGQiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfTE9ORyAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY1VMb25nICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VTE9ORyAoc3BlYyk7Ci0KLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlbHUiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfSU5UNjQgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNJbnQ2NCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfSU5UNjQgKHNwZWMpOwotCi0gICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HSU5UNjRfRk9STUFULCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfVUlOVDY0IChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUludDY0ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VSU5UNjQgKHNwZWMpOwotCi0gICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HVUlOVDY0X0ZPUk1BVCwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VOSUNIQVIgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNVbmljaGFyICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VTklDSEFSIChzcGVjKTsKLQotICAgICAgaWYgKGdfdW5pY2hhcl9pc3ByaW50IChwc3BlYy0+ZGVmYXVsdF92YWx1ZSkpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiclYyciLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgICBlbHNlCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiV1IiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0VOVU0gKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNFbnVtICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19FTlVNIChzcGVjKTsKLQotICAgICAgR0VudW1WYWx1ZSAqdmFsdWUgPSBnX2VudW1fZ2V0X3ZhbHVlIChwc3BlYy0+ZW51bV9jbGFzcywgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgICAgaWYgKHZhbHVlKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlcyIsIHZhbHVlLT52YWx1ZV9uYW1lKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfRkxBR1MgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNGbGFncyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfRkxBR1MgKHNwZWMpOwotICAgICAgZ3VpbnQgZGVmYXVsdF92YWx1ZTsKLSAgICAgIEdTdHJpbmcgKmFjYzsKLQotICAgICAgZGVmYXVsdF92YWx1ZSA9IHBzcGVjLT5kZWZhdWx0X3ZhbHVlOwotICAgICAgYWNjID0gZ19zdHJpbmdfbmV3ICgiIik7Ci0KLSAgICAgIHdoaWxlIChkZWZhdWx0X3ZhbHVlKQotCXsKLQkgIEdGbGFnc1ZhbHVlICp2YWx1ZSA9IGdfZmxhZ3NfZ2V0X2ZpcnN0X3ZhbHVlIChwc3BlYy0+ZmxhZ3NfY2xhc3MsIGRlZmF1bHRfdmFsdWUpOwotCi0JICBpZiAoIXZhbHVlKQotCSAgICBicmVhazsKLQotCSAgaWYgKGFjYy0+bGVuID4gMCkKLQkgICAgZ19zdHJpbmdfYXBwZW5kIChhY2MsICJ8Iik7Ci0JICBnX3N0cmluZ19hcHBlbmQgKGFjYywgdmFsdWUtPnZhbHVlX25hbWUpOwotCi0JICBkZWZhdWx0X3ZhbHVlICY9IH52YWx1ZS0+dmFsdWU7Ci0JfQotCi0gICAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSAwKQotCWRlc2MgPSBnX3N0cmluZ19mcmVlIChhY2MsIEZBTFNFKTsKLSAgICAgIGVsc2UKLQl7Ci0JICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0JICBnX3N0cmluZ19mcmVlIChhY2MsIFRSVUUpOwotCX0KLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19GTE9BVCAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY0Zsb2F0ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19GTE9BVCAoc3BlYyk7Ci0KLSAgICAgIC8qIG1ha2Ugc3VyZSBmbG9hdHMgYXJlIG91dHB1dCB3aXRoIGEgZGVjaW1hbCBkb3QgaXJyZXNwZWN0aXZlIG9mCi0gICAgICAgKiBjdXJyZW50IGxvY2FsZS4gVXNlIGZvcm1hdGQgc2luY2Ugd2Ugd2FudCBodW1hbi1yZWFkYWJsZSBudW1iZXJzCi0gICAgICAgKiBhbmQgZG8gbm90IG5lZWQgdGhlIGV4YWN0IHNhbWUgYml0IHJlcHJlc2VudGF0aW9uIHdoZW4gZGVzZXJpYWxpc2luZyAqLwotICAgICAgZGVzYyA9IGdfbWFsbG9jMCAoR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUpOwotICAgICAgZ19hc2NpaV9mb3JtYXRkIChkZXNjLCBHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSwgIiVnIiwKLSAgICAgICAgICBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfRE9VQkxFIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjRG91YmxlICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19ET1VCTEUgKHNwZWMpOwotCi0gICAgICAvKiBtYWtlIHN1cmUgZmxvYXRzIGFyZSBvdXRwdXQgd2l0aCBhIGRlY2ltYWwgZG90IGlycmVzcGVjdGl2ZSBvZgotICAgICAgICogY3VycmVudCBsb2NhbGUuIFVzZSBmb3JtYXRkIHNpbmNlIHdlIHdhbnQgaHVtYW4tcmVhZGFibGUgbnVtYmVycwotICAgICAgICogYW5kIGRvIG5vdCBuZWVkIHRoZSBleGFjdCBzYW1lIGJpdCByZXByZXNlbnRhdGlvbiB3aGVuIGRlc2VyaWFsaXNpbmcgKi8KLSAgICAgIGRlc2MgPSBnX21hbGxvYzAgKEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFKTsKLSAgICAgIGdfYXNjaWlfZm9ybWF0ZCAoZGVzYywgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsICIlZyIsCi0gICAgICAgICAgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1NUUklORyAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY1N0cmluZyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfU1RSSU5HIChzcGVjKTsKLQotICAgICAgaWYgKHBzcGVjLT5kZWZhdWx0X3ZhbHVlKQotCXsKLQkgIGdjaGFyICplc2MgPSBnX3N0cmVzY2FwZSAocHNwZWMtPmRlZmF1bHRfdmFsdWUsIE5VTEwpOwotCi0JICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiXFwiJXNcXCIiLCBlc2MpOwotCi0JICBnX2ZyZWUgKGVzYyk7Ci0JfQotICAgICAgZWxzZQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJOVUxMIik7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgfQotCi0gIHJldHVybiBkZXNjOwotfQotCi0KLXN0YXRpYyB2b2lkCi1vdXRwdXRfb2JqZWN0X2FyZ3MgKEZJTEUgKmZwLCBHVHlwZSBvYmplY3RfdHlwZSkKLXsKLSAgZ3BvaW50ZXIgY2xhc3M7Ci0gIGNvbnN0IGdjaGFyICpvYmplY3RfY2xhc3NfbmFtZTsKLSAgZ3VpbnQgYXJnOwotICBnY2hhciBmbGFnc1sxNl0sICpwb3M7Ci0gIEdQYXJhbVNwZWMgKipwcm9wZXJ0aWVzOwotICBndWludCBuX3Byb3BlcnRpZXM7Ci0gIGdib29sZWFuIGNoaWxkX3Byb3A7Ci0gIGdib29sZWFuIHN0eWxlX3Byb3A7Ci0gIGdib29sZWFuIGlzX3BvaW50ZXI7Ci0gIGNvbnN0IGdjaGFyICp0eXBlX25hbWU7Ci0gIGdjaGFyICp0eXBlX2Rlc2M7Ci0gIGdjaGFyICpkZWZhdWx0X3ZhbHVlOwotCi0gIGlmIChHX1RZUEVfSVNfT0JKRUNUIChvYmplY3RfdHlwZSkpCi0gICAgewotICAgICAgY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVlayAob2JqZWN0X3R5cGUpOwotICAgICAgaWYgKCFjbGFzcykKLQlyZXR1cm47Ci0KLSAgICAgIHByb3BlcnRpZXMgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMgKGNsYXNzLCAmbl9wcm9wZXJ0aWVzKTsKLSAgICB9Ci0jaWYgR0xJQl9NQUpPUl9WRVJTSU9OID4gMiB8fCAoR0xJQl9NQUpPUl9WRVJTSU9OID09IDIgJiYgR0xJQl9NSU5PUl9WRVJTSU9OID49IDMpCi0gIGVsc2UgaWYgKEdfVFlQRV9JU19JTlRFUkZBQ0UgKG9iamVjdF90eXBlKSkKLSAgICB7Ci0gICAgICBjbGFzcyA9IGdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9yZWYgKG9iamVjdF90eXBlKTsKLQotICAgICAgaWYgKCFjbGFzcykKLQlyZXR1cm47Ci0KLSAgICAgIHByb3BlcnRpZXMgPSBnX29iamVjdF9pbnRlcmZhY2VfbGlzdF9wcm9wZXJ0aWVzIChjbGFzcywgJm5fcHJvcGVydGllcyk7Ci0gICAgfQotI2VuZGlmCi0gIGVsc2UKLSAgICByZXR1cm47Ci0KLSAgb2JqZWN0X2NsYXNzX25hbWUgPSBnX3R5cGVfbmFtZSAob2JqZWN0X3R5cGUpOwotCi0gIGNoaWxkX3Byb3AgPSBGQUxTRTsKLSAgc3R5bGVfcHJvcCA9IEZBTFNFOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgcXNvcnQgKHByb3BlcnRpZXMsIG5fcHJvcGVydGllcywgc2l6ZW9mIChHUGFyYW1TcGVjICopLCBjb21wYXJlX3BhcmFtX3NwZWNzKTsKLSAgICBmb3IgKGFyZyA9IDA7IGFyZyA8IG5fcHJvcGVydGllczsgYXJnKyspCi0gICAgICB7Ci0gICAgICAgIEdQYXJhbVNwZWMgKnNwZWMgPSBwcm9wZXJ0aWVzW2FyZ107Ci0gICAgICAgIGNvbnN0IGdjaGFyICpuaWNrLCAqYmx1cmIsICpkb3Q7Ci0KLSAgICAgICAgaWYgKHNwZWMtPm93bmVyX3R5cGUgIT0gb2JqZWN0X3R5cGUpCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcG9zID0gZmxhZ3M7Ci0gICAgICAgIC8qIFdlIHVzZSBvbmUtY2hhcmFjdGVyIGZsYWdzIGZvciBzaW1wbGljaXR5LiAqLwotICAgICAgICBpZiAoY2hpbGRfcHJvcCAmJiAhc3R5bGVfcHJvcCkKLSAgIAkgICpwb3MrKyA9ICdjJzsKLSAgICAgICAgaWYgKHN0eWxlX3Byb3ApCi0gICAJICAqcG9zKysgPSAncyc7Ci0gICAgICAgIGlmIChzcGVjLT5mbGFncyAmIEdfUEFSQU1fUkVBREFCTEUpCi0gCSAgKnBvcysrID0gJ3InOwotICAgICAgICBpZiAoc3BlYy0+ZmxhZ3MgJiBHX1BBUkFNX1dSSVRBQkxFKQotCSAgKnBvcysrID0gJ3cnOwotICAgICAgICBpZiAoc3BlYy0+ZmxhZ3MgJiBHX1BBUkFNX0NPTlNUUlVDVCkKLQkgICpwb3MrKyA9ICd4JzsKLSAgICAgICAgaWYgKHNwZWMtPmZsYWdzICYgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkKLQkgICpwb3MrKyA9ICdYJzsKLSAgICAgICAgKnBvcyA9IDA7Ci0KLSAgICAgICAgbmljayA9IGdfcGFyYW1fc3BlY19nZXRfbmljayAoc3BlYyk7Ci0gICAgICAgIGJsdXJiID0gZ19wYXJhbV9zcGVjX2dldF9ibHVyYiAoc3BlYyk7Ci0KLSAgICAgICAgZG90ID0gIiI7Ci0gICAgICAgIGlmIChibHVyYikgewotICAgICAgICAgIGludCBzdHJfbGVuID0gc3RybGVuIChibHVyYik7Ci0gICAgICAgICAgaWYgKHN0cl9sZW4gPiAwICAmJiBibHVyYltzdHJfbGVuIC0gMV0gIT0gJy4nKQotICAgICAgICAgICAgZG90ID0gIi4iOwotICAgICAgICB9Ci0KLQl0eXBlX2Rlc2MgPSBkZXNjcmliZV90eXBlIChzcGVjKTsKLQlkZWZhdWx0X3ZhbHVlID0gZGVzY3JpYmVfZGVmYXVsdCAoc3BlYyk7Ci0JdHlwZV9uYW1lID0gZ2V0X3R5cGVfbmFtZSAoc3BlYy0+dmFsdWVfdHlwZSwgJmlzX3BvaW50ZXIpOwotICAgICAgICBmcHJpbnRmIChmcCwgIjxBUkc+XFxuPE5BTUU+JXM6OiVzPC9OQU1FPlxcbjxUWVBFPiVzJXM8L1RZUEU+XFxuPFJBTkdFPiVzPC9SQU5HRT5cXG48RkxBR1M+JXM8L0ZMQUdTPlxcbjxOSUNLPiVzPC9OSUNLPlxcbjxCTFVSQj4lcyVzPC9CTFVSQj5cXG48REVGQVVMVD4lczwvREVGQVVMVD5cXG48L0FSRz5cXG5cXG4iLAotCSAgICAgICAgIG9iamVjdF9jbGFzc19uYW1lLCBnX3BhcmFtX3NwZWNfZ2V0X25hbWUgKHNwZWMpLCB0eXBlX25hbWUsIGlzX3BvaW50ZXIgPyAiKiIgOiAiIiwgdHlwZV9kZXNjLCBmbGFncywgbmljayA/IG5pY2sgOiAiKG51bGwpIiwgYmx1cmIgPyBibHVyYiA6ICIobnVsbCkiLCBkb3QsIGRlZmF1bHRfdmFsdWUpOwotCWdfZnJlZSAodHlwZV9kZXNjKTsKLQlnX2ZyZWUgKGRlZmF1bHRfdmFsdWUpOwotICAgICAgfQotCi0gICAgZ19mcmVlIChwcm9wZXJ0aWVzKTsKLQotI2lmZGVmIEdUS19JU19DT05UQUlORVJfQ0xBU1MKLSAgICBpZiAoIWNoaWxkX3Byb3AgJiYgR1RLX0lTX0NPTlRBSU5FUl9DTEFTUyAoY2xhc3MpKSB7Ci0gICAgICBwcm9wZXJ0aWVzID0gZ3RrX2NvbnRhaW5lcl9jbGFzc19saXN0X2NoaWxkX3Byb3BlcnRpZXMgKGNsYXNzLCAmbl9wcm9wZXJ0aWVzKTsKLSAgICAgIGNoaWxkX3Byb3AgPSBUUlVFOwotICAgICAgY29udGludWU7Ci0gICAgfQotI2VuZGlmCi0KLSNpZmRlZiBHVEtfSVNfQ0VMTF9BUkVBX0NMQVNTCi0gICAgaWYgKCFjaGlsZF9wcm9wICYmIEdUS19JU19DRUxMX0FSRUFfQ0xBU1MgKGNsYXNzKSkgewotICAgICAgcHJvcGVydGllcyA9IGd0a19jZWxsX2FyZWFfY2xhc3NfbGlzdF9jZWxsX3Byb3BlcnRpZXMgKGNsYXNzLCAmbl9wcm9wZXJ0aWVzKTsKLSAgICAgIGNoaWxkX3Byb3AgPSBUUlVFOwotICAgICAgY29udGludWU7Ci0gICAgfQotI2VuZGlmCi0KLSNpZmRlZiBHVEtfSVNfV0lER0VUX0NMQVNTCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwxLDApCi0gICAgaWYgKCFzdHlsZV9wcm9wICYmIEdUS19JU19XSURHRVRfQ0xBU1MgKGNsYXNzKSkgewotICAgICAgcHJvcGVydGllcyA9IGd0a193aWRnZXRfY2xhc3NfbGlzdF9zdHlsZV9wcm9wZXJ0aWVzIChHVEtfV0lER0VUX0NMQVNTIChjbGFzcyksICZuX3Byb3BlcnRpZXMpOwotICAgICAgc3R5bGVfcHJvcCA9IFRSVUU7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLW91dHB1dF9zZWN0aW9ucyAodm9pZCkKLXsKLSAgRklMRSAqZnA7Ci0gIGdpbnQgaTsKLQotICBmcCA9IGZvcGVuIChzZWN0aW9uc19maWxlbmFtZSwgInciKTsKLSAgaWYgKGZwID09IE5VTEwpCi0gICAgewotICAgICAgZ193YXJuaW5nICgiQ291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZTogJXMgOiAlcyIsIHNlY3Rpb25zX2ZpbGVuYW1lLCBnX3N0cmVycm9yKGVycm5vKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gIGZvciAoaSA9IDA7IG9iamVjdF90eXBlc1tpXTsgaSsrKSB7IH0KLSAgcXNvcnQgKG9iamVjdF90eXBlcywgaSwgc2l6ZW9mIChHVHlwZSksIGNvbXBhcmVfdHlwZXMpOwotICAgIAotICBmb3IgKGkgPSAwOyBvYmplY3RfdHlwZXNbaV07IGkrKykgewotICAgIG91dHB1dF9vYmplY3Rfc2VjdGlvbiAoZnAsIG9iamVjdF90eXBlc1tpXSk7Ci0gIH0KLQotICBmY2xvc2UgKGZwKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1maW5kX2J5X3R5cGUgKEdzdFBsdWdpbkZlYXR1cmUgKmYsIGdwb2ludGVyIGRhdGEpIHsKLSAgcmV0dXJuIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZKGYpICYmIAotICAgICAgKChHVHlwZSlkYXRhID09IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZSAoR1NUX0VMRU1FTlRfRkFDVE9SWShmKSkpKTsKLX0KLQotc3RhdGljIHZvaWQKLW91dHB1dF9vYmplY3Rfc2VjdGlvbiAoRklMRSAqZnAsIEdUeXBlIG9iamVjdF90eXBlKQotewotICAvKiBlLmcuIEdzdEZha2VTaW5rICovCi0gIGNvbnN0IGdjaGFyICp0biA9IGdfdHlwZV9uYW1lIChvYmplY3RfdHlwZSk7Ci0gIGNvbnN0IGdjaGFyICpjY3QgPSAmdG5bM107IC8qIGN1dCAnR3N0JyAqLwotICBnY2hhciAqdGl0bGUsICpsY3QsICp1Y3Q7Ci0gIGdpbnQgaSwgaiwgbCA9IHN0cmxlbihjY3QpOwotICBncG9pbnRlciBjbGFzczsKLSAgR1BhcmFtU3BlYyAqKnByb3BlcnRpZXM7Ci0gIGd1aW50IG5fcHJvcGVydGllczsKLSAgY29uc3QgZ2NoYXIgKnB0bjsKLSAgZ2NoYXIgKnB0bnM7Ci0gIEdTdHJpbmcgKnN0cmJ1ZiA9IGdfc3RyaW5nX25ldyAoTlVMTCk7Ci0gIEdMaXN0ICpmbDsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZiA9IE5VTEw7Ci0gIGdib29sZWFuIG5lZWRfdW5zZXJzY29yZSA9IFRSVUUsIGhhdmVfYWJicmV2ID0gRkFMU0U7Ci0gIAotICBmbCA9IGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAoZ3N0X3JlZ2lzdHJ5X2dldCgpLCBmaW5kX2J5X3R5cGUsIFRSVUUsIAotICAgIChncG9pbnRlcilvYmplY3RfdHlwZSk7Ci0gIGlmIChmbCkgewotICAgIGYgPSBmbC0+ZGF0YTsKLSAgICBnX2xpc3RfZnJlZShmbCk7Ci0gIH0KLSAgaWYgKGYpIHsKLSAgICB0aXRsZSA9IGdfc3RyZHVwIChnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUoZikpOwotICAgIGdfb2JqZWN0X3VucmVmIChmKTsKLSAgfSBlbHNlIHsKLSAgICB0aXRsZSA9IGdfYXNjaWlfc3RyZG93bihjY3QsIC0xKTsKLSAgfQotICAKLSAgLyogdHVybiBDYW1lbENhc2UgaW50byAnXycgc2VwYXJhdGVkIGFsbCBsb3dlciwgcmVzdWx0aW5nIHN0cmluZyBpcyBhdG1vc3QKLSAgICogdHdpY2UgYXMgbG9uZywgc3BlY2lhbCBjYXNpbmcgZm9yIGFiYmV2cyBsaWtlIEdzdFRDUENsaWVudFNpbmsgKi8KLSAgbGN0ID0gZ19tYWxsb2MoMipsKTsKLSAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICBpZiAoZ19hc2NpaV9pc3VwcGVyIChjY3RbaV0pKSB7Ci0gICAgICBpZiAobmVlZF91bnNlcnNjb3JlKSB7Ci0gICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgIGxjdFtqKytdID0gJ18nOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBoYXZlX2FiYnJldiA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBsY3RbaisrXSA9IGdfYXNjaWlfdG9sb3dlcihjY3RbaV0pOwotICAgICAgbmVlZF91bnNlcnNjb3JlID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChoYXZlX2FiYnJldikgewotICAgICAgICBsY3Rbal0gPSBsY3Rbai0xXTsKLSAgICAgICAgbGN0W2otMV0gPSAnXyc7Ci0gICAgICAgIGorKzsKLSAgICAgICAgaGF2ZV9hYmJyZXYgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGxjdFtqKytdID0gY2N0W2ldOwotICAgICAgbmVlZF91bnNlcnNjb3JlID0gVFJVRTsKLSAgICB9Ci0gIH0KLSAgbGN0W2pdID0gJ1xcMCc7Ci0gIHVjdCA9IGdfYXNjaWlfc3RydXAobGN0LCAtMSk7Ci0gIAotICAvKiBzY2FuIHByb3BlcnRpZXMgYW5kIGZpbmQgbG9jYWwgZW51bXMgKi8KLSAgY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVlayAob2JqZWN0X3R5cGUpOwotICBwcm9wZXJ0aWVzID0gZ19vYmplY3RfY2xhc3NfbGlzdF9wcm9wZXJ0aWVzIChjbGFzcywgJm5fcHJvcGVydGllcyk7Ci0gIHFzb3J0IChwcm9wZXJ0aWVzLCBuX3Byb3BlcnRpZXMsIHNpemVvZiAoR1BhcmFtU3BlYyAqKSwgY29tcGFyZV9wYXJhbV9zcGVjcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuX3Byb3BlcnRpZXM7IGkrKykgewotICAgIEdQYXJhbVNwZWMgKnNwZWMgPSBwcm9wZXJ0aWVzW2ldOwotICAgIGlmICghKEdfSVNfUEFSQU1fU1BFQ19FTlVNIChzcGVjKSB8fCBHX0lTX1BBUkFNX1NQRUNfRkxBR1MgKHNwZWMpKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIHB0biA9IGdfdHlwZV9uYW1lKHNwZWMtPnZhbHVlX3R5cGUpOwotICAgIC8vIGRvZXMgaXQgc3RhcnQgd2l0aCB0bj8KLSAgICBpZiAoc3RybmNtcCh0biwgcHRuLCBzdHJsZW4odG4pKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGdfc3RyaW5nX2FwcGVuZF9jKHN0cmJ1ZiwgJ1xcbicpOwotICAgIGdfc3RyaW5nX2FwcGVuZChzdHJidWYsIHB0bik7Ci0gIH0KLSAgcHRucyA9IGdfc3RyaW5nX2ZyZWUgKHN0cmJ1ZiwgRkFMU0UpOwotCi0gIC8qIGxhdGVyIHdlIGNhbiByZW1vdmUgdGhlIFNVQlNFQ1RJT04gU3RhbmRhcnQvUHJpdmF0ZSwgc2luY2Ugd2Ugb25seSBuZWVkIHRvCi0gICAqIGhpZ2hsaWdodCB3aGF0IGlzIHB1YmxpYyBBUEkgKi8KLSAgZnByaW50ZiAoZnAsICI8U0VDVElPTj5cXG4iCi0gICAgICAgICAgICAgICAiPEZJTEU+ZWxlbWVudC0lczwvRklMRT5cXG4iCi0gICAgICAgICAgICAgICAiPFRJVExFPiVzPC9USVRMRT5cXG4iCi0gICAgICAgICAgICAgICAiR3N0JXMlc1xcbiIKLSAgICAgICAgICAgICAgICI8U1VCU0VDVElPTiBTdGFuZGFyZD5cXG4iCi0gICAgICAgICAgICAgICAiR3N0JXNDbGFzc1xcbiIKLSAgICAgICAgICAgICAgICJHU1RfJXNcXG4iCi0gICAgICAgICAgICAgICAiR1NUXyVzX0NBU1RcXG4iCi0gICAgICAgICAgICAgICAiR1NUX0lTXyVzXFxuIgotICAgICAgICAgICAgICAgIkdTVF8lc19DTEFTU1xcbiIKLSAgICAgICAgICAgICAgICJHU1RfSVNfJXNfQ0xBU1NcXG4iCi0gICAgICAgICAgICAgICAiR1NUX1RZUEVfJXNcXG4iCi0gICAgICAgICAgICAgICAiPFNVQlNFQ1RJT04gUHJpdmF0ZT5cXG4iCi0gICAgICAgICAgICAgICAiZ3N0XyVzX2dldF90eXBlXFxuIgotICAgICAgICAgICAgICAgIjwvU0VDVElPTj5cXG5cXG4iLAotICAgICAgICAgICAgICAgdGl0bGUsIHRpdGxlLCBjY3QsIHB0bnMsIAotICAgICAgICAgICAgICAgY2N0LCB1Y3QsIHVjdCwgdWN0LCB1Y3QsIHVjdCwgdWN0LCBsY3QpOwotICBnX2ZyZWUgKHRpdGxlKTsKLSAgZ19mcmVlIChsY3QpOwotICBnX2ZyZWUgKHVjdCk7Ci0gIGdfZnJlZSAocHRucyk7Ci19Ci0KLUVPVAotCi1jbG9zZSBPVVRQVVQ7Ci0KLSMgQ29tcGlsZSBhbmQgcnVuIG91ciBmaWxlCi0KLSRDQyA9ICRFTlZ7Q0N9ID8gJEVOVntDQ30gOiAiZ2NjIjsKLSRMRCA9ICRFTlZ7TER9ID8gJEVOVntMRH0gOiAkQ0M7Ci0kQ0ZMQUdTID0gJEVOVntDRkxBR1N9ID8gIiRFTlZ7Q0ZMQUdTfSIgOiAiIjsKLSRMREZMQUdTID0gJEVOVntMREZMQUdTfSA/ICRFTlZ7TERGTEFHU30gOiAiIjsKLQotbXkgJG9fZmlsZTsKLWlmICgkQ0MgPX4gL2xpYnRvb2wvKSB7Ci0gICRvX2ZpbGUgID0gIiRNT0RVTEUtc2Nhbi5sbyIKLX0gZWxzZSB7Ci0gICRvX2ZpbGUgPSAiJE1PRFVMRS1zY2FuLm8iCi19Ci0KLW15ICRzdGRvdXQ9IiI7Ci1pZiAoIWRlZmluZWQoJFZFUkJPU0UpIG9yICRWRVJCT1NFIGVxICIwIikgewotICAgICRzdGRvdXQ9Ij4vZGV2L251bGwiOwotfQotCi0jIENvbXBpbGluZyBzY2FubmVyCi0kY29tbWFuZCA9ICIkQ0MgJHN0ZG91dCAkQ0ZMQUdTIC1jIC1vICRvX2ZpbGUgJE1PRFVMRS1zY2FuLmMiOwotc3lzdGVtKCIoJGNvbW1hbmQpIikgPT0gMCBvciBkaWUgIkNvbXBpbGF0aW9uIG9mIHNjYW5uZXIgZmFpbGVkOiAkIVxuIjsKLQotIyBMaW5raW5nIHNjYW5uZXIKLSRjb21tYW5kID0gIiRMRCAkc3Rkb3V0IC1vICRNT0RVTEUtc2NhbiAkb19maWxlICRMREZMQUdTIjsKLXN5c3RlbSgkY29tbWFuZCkgPT0gMCBvciBkaWUgIkxpbmtpbmcgb2Ygc2Nhbm5lciBmYWlsZWQ6ICQhXG4iOwotCi0jIFJ1bm5pbmcgc2Nhbm5lciAkTU9EVUxFLXNjYW4gIjsKLXN5c3RlbSgic2ggLWMgLi8kTU9EVUxFLXNjYW4iKSA9PSAwIG9yIGRpZSAiU2NhbiBmYWlsZWQ6ICQhXG4iOwotCi1pZiAoIWRlZmluZWQoJEVOVnsiR1RLX0RPQ19LRUVQX0lOVEVSTUVESUFURSJ9KSkgewotICB1bmxpbmsgIi4vJE1PRFVMRS1zY2FuLmMiLCAiLi8kTU9EVUxFLXNjYW4ubyIsICIuLyRNT0RVTEUtc2Nhbi5sbyIsICIuLyRNT0RVTEUtc2NhbiI7Ci19Ci0KLSZVcGRhdGVGaWxlSWZDaGFuZ2VkICgkb2xkX2hpZXJhcmNoeV9maWxlbmFtZSwgJG5ld19oaWVyYXJjaHlfZmlsZW5hbWUsIDApOwotIyB3ZSB3aWxsIG1lcmdlIHRoZXNlIGluIHNjYW5nb2JqLW1lcmdlLnB5Ci0jJlVwZGF0ZUZpbGVJZkNoYW5nZWQgKCRvbGRfaW50ZXJmYWNlc19maWxlbmFtZSwgJG5ld19pbnRlcmZhY2VzX2ZpbGVuYW1lLCAwKTsKLSMmVXBkYXRlRmlsZUlmQ2hhbmdlZCAoJG9sZF9wcmVyZXF1aXNpdGVzX2ZpbGVuYW1lLCAkbmV3X3ByZXJlcXVpc2l0ZXNfZmlsZW5hbWUsIDApOwotIyZVcGRhdGVGaWxlSWZDaGFuZ2VkICgkb2xkX3NpZ25hbHNfZmlsZW5hbWUsICRuZXdfc2lnbmFsc19maWxlbmFtZSwgMCk7Ci0jJlVwZGF0ZUZpbGVJZkNoYW5nZWQgKCRvbGRfYXJnc19maWxlbmFtZSwgJG5ld19hcmdzX2ZpbGVuYW1lLCAwKTsKLSMmVXBkYXRlRmlsZUlmQ2hhbmdlZCAoJG9sZF9zZWN0aW9uc19maWxlbmFtZSwgJG5ld19zZWN0aW9uc19maWxlbmFtZSwgMCk7CmRpZmYgLS1naXQgYS9jb21tb24vZ3RrLWRvYy1wbHVnaW5zLm1hayBiL2NvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjVkZDFiLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMzc1ICswLDAgQEAKLSMgVGhpcyBpcyBhbiBpbmNsdWRlIGZpbGUgc3BlY2lmaWNhbGx5IHR1bmVkIGZvciBidWlsZGluZyBkb2N1bWVudGF0aW9uCi0jIGZvciBHU3RyZWFtZXIgcGx1Zy1pbnMKLQotaGVscDoKLQlAZWNobwotCUBlY2hvICJJZiB5b3UgYXJlIGEgZG9jIG1haW50YWluZXIsIHJ1biAnbWFrZSB1cGRhdGUnIHRvIHVwZGF0ZSIKLQlAZWNobyAidGhlIGRvY3VtZW50YXRpb24gZmlsZXMgbWFpbnRhaW5lZCBpbiBnaXQiCi0JQGVjaG8KLQlAZWNobyBPdGhlciB1c2VmdWwgbWFrZSB0YXJnZXRzOgotCUBlY2hvCi0JQGVjaG8gIGNoZWNrLWluc3BlY3RlZC12ZXJzaW9uczogbWFrZSBzdXJlIHRoZSBpbnNwZWN0ZWQgcGx1Z2luIGluZm8KLQlAZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1cCB0byBkYXRlIGJlZm9yZSBhIHJlbGVhc2UKLQlAZWNobwotCi0jIHVwZGF0ZSB0aGUgc3R1ZmYgbWFpbnRhaW5lZCBieSBkb2MgbWFpbnRhaW5lcnMKLXVwZGF0ZTogc2Nhbm9iai11cGRhdGUKLQkkKE1BS0UpIGNoZWNrLW91dGRhdGVkLWRvY3MKLQotaWYgR1RLX0RPQ19VU0VfTElCVE9PTAotR1RLRE9DX0NDID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKElOQ0xVREVTKSAkKEdUS0RPQ19ERVBTX0NGTEFHUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotR1RLRE9DX0xEID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9bGluayAkKENDKSAkKEdUS0RPQ19ERVBTX0xJQlMpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpCi1HVEtET0NfUlVOID0gJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQotZWxzZQotR1RLRE9DX0NDID0gJChDQykgJChJTkNMVURFUykgJChHVEtET0NfREVQU19DRkxBR1MpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUdUS0RPQ19MRCA9ICQoQ0MpICQoR1RLRE9DX0RFUFNfTElCUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykKLUdUS0RPQ19SVU4gPQotZW5kaWYKLQotIyBXZSBzZXQgR1BBVEggaGVyZTsgdGhpcyBnaXZlcyB1cyBzZW1hbnRpY3MgZm9yIEdOVSBtYWtlCi0jIHdoaWNoIGFyZSBtb3JlIGxpa2Ugb3RoZXIgbWFrZSdzIFZQQVRILCB3aGVuIGl0IGNvbWVzIHRvCi0jIHdoZXRoZXIgYSBzb3VyY2UgdGhhdCBpcyBhIHRhcmdldCBvZiBvbmUgcnVsZSBpcyB0aGVuCi0jIHNlYXJjaGVkIGZvciBpbiBWUEFUSC9HUEFUSC4KLSMKLUdQQVRIID0gJChzcmNkaXIpCi0KLSMgdGhvbWFzOiBtYWtlIGRvY3MgcGFyYWxsZWwgaW5zdGFsbGFibGUKLVRBUkdFVF9ESVI9JChIVE1MX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQAotCi1NQUlOVEFJTkVSX0RPQ19TVEFNUFMgPQkJCVwKLQlzY2Fub2JqLWJ1aWxkLnN0YW1wCi0KLUVYVFJBX0RJU1QgPSAJCQkJXAotCSQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQkJXAotCSQoc3JjZGlyKS9pbnNwZWN0LyoueG1sCQlcCi0JJChTQ0FOT0JKX0ZJTEVTKQkJXAotCSQoY29udGVudF9maWxlcykJCVwKLQkkKGV4dHJhX2ZpbGVzKQkJCVwKLQkkKEhUTUxfSU1BR0VTKQkJCVwKLQkkKERPQ19NQUlOX1NHTUxfRklMRSkJXAotCSQoRE9DX09WRVJSSURFUykJCVwKLQkkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dAotCi0jIHdlIGRvbid0IGFkZCBzY2Fub2JqLWJ1aWxkLnN0YW1wIGhlcmUgc2luY2UgdGhleSBhcmUgYnVpbHQgbWFudWFsbHkgYnkgZG9jcwotIyBtYWludGFpbmVycyBhbmQgcmVzdWx0IGlzIGNvbW1pdGVkIHRvIGdpdAotRE9DX1NUQU1QUyA9CQkJCVwKLQlzY2FuLWJ1aWxkLnN0YW1wCQlcCi0Jc2dtbC1idWlsZC5zdGFtcAkJXAotCWh0bWwtYnVpbGQuc3RhbXAJCVwKLQlzY2FuLnN0YW1wCQkJXAotCXNnbWwuc3RhbXAJCQlcCi0JaHRtbC5zdGFtcAotCi0jIGZpbGVzIGdlbmVyYXRlZC91cGRhdGVkIGJ5IGd0a2RvYy1zY2FuZ29iagotU0NBTk9CSl9GSUxFUyA9CQkJCVwKLQkkKERPQ19NT0RVTEUpLmFyZ3MgICAgICAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLmhpZXJhcmNoeSAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLmludGVyZmFjZXMgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMgICAgIFwKLQkkKERPQ19NT0RVTEUpLnNpZ25hbHMgICAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLnR5cGVzCi0KLVNDQU5PQkpfRklMRVNfTyA9CQkJXAotCS5saWJzLyQoRE9DX01PRFVMRSktc2Nhbi5vCi0KLSMgZmlsZXMgZ2VuZXJhdGVkL3VwZGF0ZWQgYnkgZ3RrZG9jLXNjYW4KLVNDQU5fRklMRVMgPQkJCQlcCi0JJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQJXAotCSQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dAlcCi0JJChET0NfTU9EVUxFKS1kZWNsLnR4dAkJXAotCSQoRE9DX01PRFVMRSktZGVjbC1saXN0LnR4dAotCi0KLVJFUE9SVF9GSUxFUyA9IFwKLQkkKERPQ19NT0RVTEUpLXVuZG9jdW1lbnRlZC50eHQgXAotCSQoRE9DX01PRFVMRSktdW5kZWNsYXJlZC50eHQgXAotCSQoRE9DX01PRFVMRSktdW51c2VkLnR4dAotCi1DTEVBTkZJTEVTID0gXAotCSQoU0NBTk9CSl9GSUxFU19PKSBcCi0JJChSRVBPUlRfRklMRVMpIFwKLQkkKERPQ19TVEFNUFMpIFwKLQlpbnNwZWN0LXJlZ2lzdHJ5LnhtbAotCi1JTlNQRUNUX0RJUiA9IGluc3BlY3QKLQotaWYgRU5BQkxFX0dUS19ET0MKLWFsbC1sb2NhbDogaHRtbC1idWlsZC5zdGFtcAotCi0jIyMgaW5zcGVjdCBHU3RyZWFtZXIgcGx1Zy1pbnM7IGRvbmUgYnkgZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyICMjIwotCi0jIG9ubHkgbG9vayBhdCB0aGUgcGx1Z2lucyBpbiB0aGlzIG1vZHVsZSB3aGVuIGJ1aWxkaW5nIGluc3BlY3QgLnhtbCBzdHVmZgotSU5TUEVDVF9SRUdJU1RSWT0kKHRvcF9idWlsZGRpcikvZG9jcy9wbHVnaW5zL2luc3BlY3QtcmVnaXN0cnkueG1sCi1JTlNQRUNUX0VOVklST05NRU5UPVwKLQlMQ19BTEw9QyBcCi0JR1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA9IFwKLQlHU1RfUExVR0lOX1BBVEhfMV8wPSQodG9wX2J1aWxkZGlyKS9nc3Q6JCh0b3BfYnVpbGRkaXIpL3N5czokKHRvcF9idWlsZGRpcikvZXh0OiQodG9wX2J1aWxkZGlyKS9wbHVnaW5zOiQodG9wX2J1aWxkZGlyKS9zcmM6JCh0b3BfYnVpbGRkaXIpL2dubCBcCi0JR1NUX1JFR0lTVFJZXzFfMD0kKElOU1BFQ1RfUkVHSVNUUlkpIFwKLQlQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIFwKLQkkKElOU1BFQ1RfRVhUUkFfRU5WSVJPTk1FTlQpCi0KLSMjIyMgc2NhbiBnb2JqZWN0czsgZG9uZSBieSBkb2N1bWVudGF0aW9uIG1haW50YWluZXIgIyMjIwotc2Nhbm9iai11cGRhdGU6Ci0JLXJtIHNjYW5vYmotYnVpbGQuc3RhbXAKLQkkKE1BS0UpIHNjYW5vYmotYnVpbGQuc3RhbXAKLQotIyBnc3Rkb2Mtc2Nhbm9iaiBwcm9kdWNlcyA1IG91dHB1dCBmaWxlcyAoLm5ldykKLSMgc2NhbmdvYmotbWVyZ2UucHkgbWVyZ2VzIHRoZW0gaW50byB0aGUgZmlsZSB3aGljaCB3ZSBjb21taXQgbGF0ZXIKLSMgVE9ETzogYWxzbyBtZXJnZSB0aGUgaGllcmFyY2h5Ci1zY2Fub2JqLWJ1aWxkLnN0YW1wOiAkKFNDQU5PQkpfREVQUykgJChiYXNlZmlsZXMpCi0JQGVjaG8gIiAgRE9DICAgSW50cm9zcGVjdGluZyBnb2JqZWN0cyIKLQlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKLQkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKSAkKFNDQU5fRklMRVMpOwkJCVwKLQkgICAgZG8JCQkJCQkJCVwKLQkgICAgICAgIGlmIHRlc3QgLWUgJChzcmNkaXIpLyQkZjsgdGhlbiBjcCAtdSAkKHNyY2RpcikvJCRmIC4gOyBmaTsJXAotCSAgICBkb25lOwkJCQkJCQlcCi0JZmk7CQkJCQkJCQlcCi0JbWtkaXIgLXAgJChJTlNQRUNUX0RJUik7IFwKLQlzY2Fub2JqX29wdGlvbnM9IiI7IFwKLQlpZiB0ZXN0ICJ4JChWKSIgPSAieDEiOyB0aGVuIFwKLQkgICAgc2Nhbm9ial9vcHRpb25zPSItLXZlcmJvc2UiOyBcCi0JZmk7IFwKLQkkKElOU1BFQ1RfRU5WSVJPTk1FTlQpIAkJCQkJXAotCUNDPSIkKEdUS0RPQ19DQykiIExEPSIkKEdUS0RPQ19MRCkiIFJVTj0iJChHVEtET0NfUlVOKSIJXAotCUNGTEFHUz0iJChHVEtET0NfQ0ZMQUdTKSAkKENGTEFHUykgJChXQVJOSU5HX0NGTEFHUykiCVwKLQlMREZMQUdTPSIkKEdUS0RPQ19MSUJTKSAkKExERkxBR1MpIgkJCQlcCi0JJChHU1RfRE9DX1NDQU5PQkopICQkc2Nhbm9ial9vcHRpb25zIC0tdHlwZS1pbml0LWZ1bmM9ImdzdF9pbml0KE5VTEwsTlVMTCkiCVwKLQkgICAgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLXNvdXJjZT0kKFBBQ0tBR0UpIC0taW5zcGVjdC1kaXI9JChJTlNQRUNUX0RJUikgJiYJCVwKLQkgICAgZWNobyAiICBET0MgICBNZXJnaW5nIGludHJvc3BlY3Rpb24gZGF0YSIgJiYgXAotCSAgICAkKFBZVEhPTikJCQkJCQlcCi0JICAgICQodG9wX3NyY2RpcikvY29tbW9uL3NjYW5nb2JqLW1lcmdlLnB5ICQoRE9DX01PRFVMRSkgfHwgZXhpdCAxOwlcCi0JaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKLQkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKTsJCQkJCVwKLQkgICAgZG8JCQkJCQkJCVwKLQkgICAgICAgIGNtcCAtcyAuLyQkZiAkKHNyY2RpcikvJCRmIHx8IGNwIC4vJCRmICQoc3JjZGlyKS8gOwkJXAotCSAgICBkb25lOwkJCQkJCQlcCi0JZmk7CQkJCQkJCQlcCi0JdG91Y2ggc2Nhbm9iai1idWlsZC5zdGFtcAotCi0kKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChTQ0FOT0JKX0ZJTEVTX08pOiBzY2FuLWJ1aWxkLnN0YW1wCi0JQHRydWUKLQotIyMjIHNjYW4gaGVhZGVyczsgZG9uZSBvbiBldmVyeSBidWlsZCAjIyMKLXNjYW4tYnVpbGQuc3RhbXA6ICQoSEZJTEVfR0xPQikgJChFWFRSQV9IRklMRVMpICQoYmFzZWZpbGVzKSBzY2Fub2JqLWJ1aWxkLnN0YW1wCi0JQGVjaG8gJyAgRE9DICAgU2Nhbm5pbmcgaGVhZGVyIGZpbGVzJwotCUBpZiB0ZXN0IHgiJChzcmNkaXIpIiAhPSB4LiA7IHRoZW4JCQkJXAotCSAgICBmb3IgZiBpbiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUyk7CQkJXAotCSAgICBkbwkJCQkJCQkJXAotCSAgICAgICAgaWYgdGVzdCAtZSAkKHNyY2RpcikvJCRmOyB0aGVuIGNwIC11ICQoc3JjZGlyKS8kJGYgLiA7IGZpOwlcCi0JICAgIGRvbmU7CQkJCQkJCVwKLQlmaQotCUBfc291cmNlX2Rpcj0nJyA7CQkJCQkJXAotCWZvciBpIGluICQoRE9DX1NPVVJDRV9ESVIpIDsgZG8JCQkJCVwKLQkgICAgX3NvdXJjZV9kaXI9IiQke19zb3VyY2VfZGlyfSAtLXNvdXJjZS1kaXI9JCRpIiA7CSAgICAgICAgXAotCWRvbmUgOwkJCQkJCQkgICAgICAgIFwKLQlndGtkb2Mtc2NhbgkJCQkJCQlcCi0JICAgICQoU0NBTl9PUFRJT05TKSAkKEVYVFJBX0hGSUxFUykJCQkJXAotCSAgICAtLW1vZHVsZT0kKERPQ19NT0RVTEUpCQkJCQlcCi0JICAgICQke19zb3VyY2VfZGlyfSAgICAgICAgICAgICAJCQkJXAotCSAgICAtLWlnbm9yZS1oZWFkZXJzPSIkKElHTk9SRV9IRklMRVMpIjsJCQlcCi0JdG91Y2ggc2Nhbi1idWlsZC5zdGFtcAotCi0jIyMjIHhtbCAjIyMjCi0KLXNnbWwtYnVpbGQuc3RhbXA6IHNjYW4tYnVpbGQuc3RhbXAgJChDRklMRV9HTE9CKSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wbHVnaW5zLnhzbCAkKGV4cGFuZF9jb250ZW50X2ZpbGVzKQotCUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIFhNTCcKLQlALW1rZGlyIC1wIHhtbAotCUBmb3IgYSBpbiAkKGluc3BlY3RfZmlsZXMpOyBkbyBcCi0JICAgIHhzbHRwcm9jIC0tc3RyaW5ncGFyYW0gbW9kdWxlICQoTU9EVUxFKSBcCi0JCSQodG9wX3NyY2RpcikvY29tbW9uL3BsdWdpbnMueHNsICQkYSA+IHhtbC9gYmFzZW5hbWUgJCRhYDsgZG9uZQotCUBmb3IgZiBpbiAkKEVYQU1QTEVfQ0ZJTEVTKTsgZG8gXAotCQkkKFBZVEhPTikgJCh0b3Bfc3JjZGlyKS9jb21tb24vYy10by14bWwucHkgJCRmID4geG1sL2VsZW1lbnQtYGJhc2VuYW1lICQkZiAuY2AueG1sOyBkb25lCi0JQF9zb3VyY2VfZGlyPScnIDsJCQkJCQlcCi0JZm9yIGkgaW4gJChET0NfU09VUkNFX0RJUikgOyBkbwkJCQkJXAotCSAgICBfc291cmNlX2Rpcj0iJCR7X3NvdXJjZV9kaXJ9IC0tc291cmNlLWRpcj0kJGkiIDsJICAgICAgICBcCi0JZG9uZSA7CQkJCQkJCQlcCi0JZ3RrZG9jLW1rZGIgXAotCQktLW1vZHVsZT0kKERPQ19NT0RVTEUpIFwKLQkJJCR7X3NvdXJjZV9kaXJ9IFwKLQkJIC0tZXhwYW5kLWNvbnRlbnQtZmlsZXM9IiQoZXhwYW5kX2NvbnRlbnRfZmlsZXMpIiBcCi0JCS0tbWFpbi1zZ21sLWZpbGU9JChzcmNkaXIpLyQoRE9DX01BSU5fU0dNTF9GSUxFKSBcCi0JCS0tb3V0cHV0LWZvcm1hdD14bWwgXAotCQktLWlnbm9yZS1maWxlcz0iJChJR05PUkVfSEZJTEVTKSAkKElHTk9SRV9DRklMRVMpIiBcCi0JCSQoTUtEQl9PUFRJT05TKQotCUAkKFBZVEhPTikgJCh0b3Bfc3JjZGlyKS9jb21tb24vbWFuZ2xlLWRiLnB5IHhtbAotCUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIHhtbAotCUB0b3VjaCBzZ21sLWJ1aWxkLnN0YW1wCi0KLXNnbWwuc3RhbXA6IHNnbWwtYnVpbGQuc3RhbXAKLQlAdHJ1ZQotCi0jIyMjIGh0bWwgIyMjIwotCi1odG1sLWJ1aWxkLnN0YW1wOiBzZ21sLnN0YW1wICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKGNvbnRlbnRfZmlsZXMpCi0JQGVjaG8gJyAgRE9DICAgQnVpbGRpbmcgSFRNTCcKLQlAcm0gLXJmIGh0bWwKLQlAbWtkaXIgaHRtbAotCUBjcCAkKHNyY2RpcikvJChET0NfTUFJTl9TR01MX0ZJTEUpIGh0bWwKLQlAZm9yIGYgaW4gJChjb250ZW50X2ZpbGVzKTsgZG8gY3AgJChzcmNkaXIpLyQkZiBodG1sOyBkb25lCi0JQGNwIC1wciB4bWwgaHRtbAotCUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIGh0bWwKLQlAbWtodG1sX29wdGlvbnM9IiI7IFwKLQlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCi0JaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAotCSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCi0JICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKLQkgIGZpOyBcCi0JZmk7IFwKLQljZCBodG1sICYmIGd0a2RvYy1ta2h0bWwgJCRta2h0bWxfb3B0aW9ucyAkKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05AICQoRE9DX01BSU5fU0dNTF9GSUxFKQotCUBybSAtZiBodG1sLyQoRE9DX01BSU5fU0dNTF9GSUxFKQotCUBybSAtcmYgaHRtbC94bWwKLQlAcm0gLWYgaHRtbC92ZXJzaW9uLmVudGl0aWVzCi0JQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgZm9yIGkgaW4gIiIgJChIVE1MX0lNQUdFUykgOyBkbyBcCi0JICAgIGlmIHRlc3QgIiQkaSIgIT0gIiI7IHRoZW4gY3AgJChzcmNkaXIpLyQkaSBodG1sIDsgZmk7IGRvbmUKLQlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKLQlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQotCUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCi0KLWNsZWFuLWxvY2FsLWd0a2RvYzoKLQlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKLSMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCi0JQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCi0JICAgIHJtIC1yZiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUykgJChSRVBPUlRfRklMRVMpIFwKLQkgICAgICAgICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKTsgXAotCWZpCi1lbHNlCi1hbGwtbG9jYWw6Ci1jbGVhbi1sb2NhbC1ndGtkb2M6Ci1lbmRpZgotCi1jbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwtZ3RrZG9jCi0JQHJtIC1mICp+ICouYmFrCi0JQHJtIC1yZiAubGlicwotCi1kaXN0Y2xlYW4tbG9jYWw6Ci0JQHJtIC1mICQoUkVQT1JUX0ZJTEVTKSBcCi0JICAgICAgICAkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQgJChET0NfTU9EVUxFKS1kZWNsLnR4dAotCUBybSAtcmYgdG1wbC8qLnNnbWwuYmFrCi0JQHJtIC1mICQoRE9DX01PRFVMRSkuaGllcmFyY2h5Ci0JQHJtIC1mICouc3RhbXAgfHwgdHJ1ZQotCUBpZiB0ZXN0ICIkKGFic19zcmNkaXIpIiAhPSAiJChhYnNfYnVpbGRkaXIpIiA7IHRoZW4gXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLWRvY3Muc2dtbCA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS50eXBlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgOyBcCi0JICAgIHJtIC1yZiB0bXBsLyouc2dtbCA7IFwKLQkgICAgcm0gLXJmICQoSU5TUEVDVF9ESVIpOyBcCi0JZmkKLQlAcm0gLXJmICoubwotCi1NQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQotCi0jIHRob21hczogbWFrZSBkb2NzIHBhcmFsbGVsIGluc3RhbGxhYmxlOyBkZXZoZWxwIHJlcXVpcmVzIG1ham9ybWlub3IgdG9vCi1pbnN0YWxsLWRhdGEtbG9jYWw6Ci0JKGluc3RhbGxmaWxlcz1gZWNobyAkKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3NgOyBcCi0JaWYgdGVzdCAiJCRpbnN0YWxsZmlsZXMiID0gJyQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzcyc7IFwKLQl0aGVuIGVjaG8gJy0tIE5vdGhpbmcgdG8gaW5zdGFsbCcgOyBcCi0JZWxzZSBcCi0JICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICBmb3IgaSBpbiAkJGluc3RhbGxmaWxlczsgZG8gXAotCSAgICBlY2hvICctLSBJbnN0YWxsaW5nICckJGkgOyBcCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKLQkgIGRvbmU7IFwKLQkgIHBuZ2ZpbGVzPWBlY2hvIC4vaHRtbC8qLnBuZ2A7IFwKLQkgIGlmIHRlc3QgIiQkcG5nZmlsZXMiICE9ICcuL2h0bWwvKi5wbmcnOyB0aGVuIFwKLQkgICAgZm9yIGkgaW4gJCRwbmdmaWxlczsgZG8gXAotCSAgICAgIGVjaG8gJy0tIEluc3RhbGxpbmcgJyQkaSA7IFwKLQkgICAgICAkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICAgIGRvbmU7IFwKLQkgIGZpOyBcCi0JICBlY2hvICctLSBJbnN0YWxsaW5nICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMicgOyBcCi0JICBpZiB0ZXN0IC1lICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMjsgdGhlbiBcCi0JICAgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMiBcCi0JICAgICAgICAgICAgJChERVNURElSKSQoVEFSR0VUX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMjsgXAotCSAgZmk7IFwKLQkgICQoR1RLRE9DX1JFQkFTRSkgLS1yZWxhdGl2ZSAtLWRlc3QtZGlyPSQoREVTVERJUikgLS1odG1sLWRpcj0kKERFU1RESVIpJChUQVJHRVRfRElSKSB8fCB0cnVlIDsgXAotCWZpKQotdW5pbnN0YWxsLWxvY2FsOgotCWlmIHRlc3QgLWQgJChERVNURElSKSQoVEFSR0VUX0RJUik7IHRoZW4gXAotCSAgcm0gLXJmICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyo7IFwKLQkgIHJtZGlyIC1wICQoREVTVERJUikkKFRBUkdFVF9ESVIpIDI+L2Rldi9udWxsIHx8IHRydWU7IFwKLQllbHNlIFwKLQkgIGVjaG8gJy0tIE5vdGhpbmcgdG8gdW5pbnN0YWxsJyA7IFwKLQlmaTsKLQotIwotIyBDaGVja3MKLSMKLWlmIEVOQUJMRV9HVEtfRE9DCi1jaGVjay1oaWVyYXJjaHk6ICQoRE9DX01PRFVMRSkuaGllcmFyY2h5Ci0JQGlmIGdyZXAgJwknICQoRE9DX01PRFVMRSkuaGllcmFyY2h5OyB0aGVuIFwKLQkgICAgZWNobyAiJChET0NfTU9EVUxFKS5oaWVyYXJjaHkgY29udGFpbnMgdGFicywgcGxlYXNlIGZpeCI7IFwKLQkgICAgL2Jpbi9mYWxzZTsgXAotCWZpCi0KLWNoZWNrOiBjaGVjay1oaWVyYXJjaHkKLWVuZGlmCi0KLSMgd2lsZGNhcmQgaXMgYXBwYXJlbnRseSBub3QgcG9ydGFibGUgdG8gb3RoZXIgbWFrZXMsIGhlbmNlIHRoZSB1c2Ugb2YgZmluZAotaW5zcGVjdF9maWxlcyA9ICQoc2hlbGwgZmluZCAkKHNyY2RpcikvJChJTlNQRUNUX0RJUikgLW5hbWUgJyoueG1sJykKLQotY2hlY2staW5zcGVjdGVkLXZlcnNpb25zOgotCUBlY2hvIENoZWNraW5nIHBsdWdpbiB2ZXJzaW9ucyBvZiBpbnNwZWN0ZWQgcGx1Z2luIGRhdGEgLi4uOyBcCi0JZmFpbD0wIDsgXAotCWZvciBlYWNoIGluICQoaW5zcGVjdF9maWxlcykgOyBkbyBcCi0JICBpZiAoZ3JlcCAtSCAnPHZlcnNpb24+JyAkJGVhY2ggfCBncmVwIC12ICc8dmVyc2lvbj4kKFZFUlNJT04pJyk7IHRoZW4gXAotCSAgICBlY2hvICQkZWFjaCBzaG91bGQgYmUgZml4ZWQgdG8gc2F5IHZlcnNpb24gJChWRVJTSU9OKSBvciBiZSByZW1vdmVkIDsgXAotCSAgICBlY2hvICJzZWQgLWkgLWUgJ3MvPHZlcnNpb24uKnZlcnNpb24+Lzx2ZXJzaW9uPiQoVkVSU0lPTik8XC92ZXJzaW9uPi8nIiAkJGVhY2g7IFwKLQkgICAgZWNobyA7IFwKLQkgICAgZmFpbD0xOyBcCi0JICBmaSA7IFwKLQlkb25lIDsgXAotCWV4aXQgJCRmYWlsCi0KLWNoZWNrLW91dGRhdGVkLWRvY3M6Ci0JJChBTV9WX0dFTillY2hvIENoZWNraW5nIGZvciBvdXRkYXRlZCBwbHVnaW4gaW5zcGVjdCBkYXRhIC4uLjsgXAotCWZhaWw9MCA7IFwKLQlpZiBbIC1kICQodG9wX3NyY2RpcikvLmdpdC8gXTsgdGhlbiBcCi0JICBmaWxlcz1gZmluZCAkKHNyY2RpcikvaW5zcGVjdC8gLW5hbWUgJyp4bWwnYDsgXAotCSAgZm9yIGYgaW4gJCRmaWxlczsgZG8gXAotCSAgICB2ZXI9YGdyZXAgJzx2ZXJzaW9uPiQoUEFDS0FHRV9WRVJTSU9OKTwvdmVyc2lvbj4nICQkZmA7IFwKLQkgICAgaWYgdGVzdCAieCQkdmVyIiA9ICJ4IjsgdGhlbiBcCi0JICAgICAgcGx1Z2luPWBlY2hvICQkZiB8IHNlZCAtZSAncy9eLipwbHVnaW4tLy8nIC1lICdzLy54bWwvLydgOyBcCi0JICAgICAgIyBlY2hvICJDaGVja2luZyAkJHBsdWdpbiAkJGYiOyBcCi0JICAgICAgcHVzaGQgIiQodG9wX3NyY2RpcikiID4vZGV2L251bGw7IFwKLQkgICAgICBwaW5pdD1gZ2l0IGdyZXAgLUEzIEdTVF9QTFVHSU5fREVGSU5FIC0tIGV4dC8gZ3N0LyBzeXMvIHwgZ3JlcCAiXCIkJHBsdWdpblwiImA7IFwKLQkgICAgICBwb3BkID4vZGV2L251bGw7IFwKLQkgICAgICAjIGVjaG8gIlskJHBpbml0XSI7IFwKLQkgICAgICBpZiB0ZXN0ICJ4JCRwaW5pdCIgPSAieCI7IHRoZW4gXAotCSAgICAgICAgcHJpbnRmICIgKioqKiBvdXRkYXRlZCBkb2NzIGZvciBwbHVnaW4gJS0xNXM6ICVzXG4iICQkcGx1Z2luICQkZjsgXAotCSAgICAgICAgZmFpbD0xOyBcCi0JICAgICAgZmk7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQlmaSA7IFwKLQlleGl0ICQkZmFpbAotCi0jCi0jIFJlcXVpcmUgZ3RrLWRvYyB3aGVuIG1ha2luZyBkaXN0Ci0jCi1pZiBFTkFCTEVfR1RLX0RPQwotZGlzdC1jaGVjay1ndGtkb2M6Ci1lbHNlCi1kaXN0LWNoZWNrLWd0a2RvYzoKLQlAZWNobyAiKioqIGd0ay1kb2MgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGVuYWJsZWQgaW4gb3JkZXIgdG8gbWFrZSBkaXN0IgotCUBmYWxzZQotZW5kaWYKLQotIyBGSVhNRTogZGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBkaXN0IGdlbmVyYXRlZCBodG1sIG9yIG5vdAotIyBhbHNvIHRoaXMgb25seSB3b3JrcywgaWYgdGhlIHByb2plY3QgaGFzIGJlZW4gYnVpbGQgYmVmb3JlCi0jIHdlIGNvdWxkIGRpc3QgaHRtbCBvbmx5IGlmIGl0cyB0aGVyZSwgYnV0IHRoYXQgbWlnaHQgbGVhZCB0byBtaXNzaW5nIGh0bWwgaW4KLSMgdGFyYmFsbHMKLWRpc3QtaG9vazogZGlzdC1jaGVjay1ndGtkb2MgZGlzdC1ob29rLWxvY2FsCi0JbWtkaXIgJChkaXN0ZGlyKS9odG1sCi0JY3AgaHRtbC8qICQoZGlzdGRpcikvaHRtbAotCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS50eXBlcyAkKGRpc3RkaXIpLwotCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChkaXN0ZGlyKS8KLQljZCAkKGRpc3RkaXIpICYmIHJtIC1mICQoRElTVENMRUFORklMRVMpCi0JLWd0a2RvYy1yZWJhc2UgLS1vbmxpbmUgLS1yZWxhdGl2ZSAtLWh0bWwtZGlyPSQoZGlzdGRpcikvaHRtbAotCi0uUEhPTlkgOiBkaXN0LWhvb2stbG9jYWwgZG9jcyBjaGVjay1vdXRkYXRlZC1kb2NzIGluc3BlY3QKLQotIyBhdm9pZCBzcHVyaW91cyBidWlsZCBlcnJvcnMgd2hlbiBkaXN0Y2hlY2tpbmcgd2l0aCAtak4KLS5OT1RQQVJBTExFTDoKZGlmZiAtLWdpdCBhL2NvbW1vbi9ndGstZG9jLm1hayBiL2NvbW1vbi9ndGstZG9jLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y4MzQ5MS4uMDAwMDAwMAotLS0gYS9jb21tb24vZ3RrLWRvYy5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBnZW5lcmljIGFuZCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHRob21hczogZXhjZXB0IG9mIGNvdXJzZSB0aGF0IHdlIGRpZAotCi1pZiBHVEtfRE9DX1VTRV9MSUJUT09MCi1HVEtET0NfQ0MgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoSU5DTFVERVMpICQoR1RLRE9DX0RFUFNfQ0ZMQUdTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1HVEtET0NfTEQgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0MpICQoR1RLRE9DX0RFUFNfTElCUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykKLUdUS0RPQ19SVU4gPSAkKExJQlRPT0wpIC0tbW9kZT1leGVjdXRlCi1lbHNlCi1HVEtET0NfQ0MgPSAkKENDKSAkKElOQ0xVREVTKSAkKEdUS0RPQ19ERVBTX0NGTEFHUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotR1RLRE9DX0xEID0gJChDQykgJChHVEtET0NfREVQU19MSUJTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKQotR1RLRE9DX1JVTiA9Ci1lbmRpZgotCi0jIFdlIHNldCBHUEFUSCBoZXJlOyB0aGlzIGdpdmVzIHVzIHNlbWFudGljcyBmb3IgR05VIG1ha2UKLSMgd2hpY2ggYXJlIG1vcmUgbGlrZSBvdGhlciBtYWtlJ3MgVlBBVEgsIHdoZW4gaXQgY29tZXMgdG8KLSMgd2hldGhlciBhIHNvdXJjZSB0aGF0IGlzIGEgdGFyZ2V0IG9mIG9uZSBydWxlIGlzIHRoZW4KLSMgc2VhcmNoZWQgZm9yIGluIFZQQVRIL0dQQVRILgotIwotR1BBVEggPSAkKHNyY2RpcikKLQotIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZQotVEFSR0VUX0RJUj0kKEhUTUxfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ACi0KLUVYVFJBX0RJU1QgPSAJCQkJXAotCSQoY29udGVudF9maWxlcykJCVwKLQkkKGV4dHJhX2ZpbGVzKQkJCVwKLQkkKEhUTUxfSU1BR0VTKQkJCVwKLQkkKERPQ19NQUlOX1NHTUxfRklMRSkJCVwKLQkkKERPQ19NT0RVTEUpLnR5cGVzCQlcCi0JJChET0NfT1ZFUlJJREVTKQkJXAotCSQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0Ci0KLURPQ19TVEFNUFMgPQkJCQlcCi0Jc2V0dXAtYnVpbGQuc3RhbXAJCVwKLQlzY2FuLWJ1aWxkLnN0YW1wCQlcCi0Jc2dtbC1idWlsZC5zdGFtcAkJXAotCWh0bWwtYnVpbGQuc3RhbXAJCVwKLQlzZ21sLnN0YW1wCQlcCi0JaHRtbC5zdGFtcAotCi1TQ0FOT0JKX0ZJTEVTID0JCQkJXAotCSQoRE9DX01PRFVMRSkuYXJncwkJXAotCSQoRE9DX01PRFVMRSkuaGllcmFyY2h5CQlcCi0JJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzCQlcCi0JJChET0NfTU9EVUxFKS5wcmVyZXF1aXNpdGVzCVwKLQkkKERPQ19NT0RVTEUpLnNpZ25hbHMJCVwKLQkubGlicy8kKERPQ19NT0RVTEUpLXNjYW4ubwotCi1SRVBPUlRfRklMRVMgPSBcCi0JJChET0NfTU9EVUxFKS11bmRvY3VtZW50ZWQudHh0IFwKLQkkKERPQ19NT0RVTEUpLXVuZGVjbGFyZWQudHh0IFwKLQkkKERPQ19NT0RVTEUpLXVudXNlZC50eHQKLQotQ0xFQU5GSUxFUyA9ICQoU0NBTk9CSl9GSUxFUykgJChSRVBPUlRfRklMRVMpICQoRE9DX1NUQU1QUykgZG9jLXJlZ2lzdHJ5LnhtbAotCi1pZiBFTkFCTEVfR1RLX0RPQwotYWxsLWxvY2FsOiBodG1sLWJ1aWxkLnN0YW1wCi0KLSMjIyMgc2V0dXAgIyMjIwotCi1zZXR1cC1idWlsZC5zdGFtcDogJChjb250ZW50X2ZpbGVzKQotCS1AaWYgdGVzdCAiJChhYnNfc3JjZGlyKSIgIT0gIiQoYWJzX2J1aWxkZGlyKSIgOyB0aGVuIFwKLQkgICAgZWNobyAnICBET0MgICBQcmVwYXJpbmcgYnVpbGQnOyBcCi0JICAgIGZpbGVzPWBlY2hvICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKERPQ19PVkVSUklERVMpICQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0ICQoRE9DX01PRFVMRSkudHlwZXMgJChjb250ZW50X2ZpbGVzKWA7IFwKLQkgICAgaWYgdGVzdCAieCQkZmlsZXMiICE9ICJ4IiA7IHRoZW4gXAotCSAgICAgICAgZm9yIGZpbGUgaW4gJCRmaWxlcyA7IGRvIFwKLQkgICAgICAgICAgICB0ZXN0IC1mICQoYWJzX3NyY2RpcikvJCRmaWxlICYmIFwKLQkgICAgICAgICAgICAgICAgY3AgLXB1ICQoYWJzX3NyY2RpcikvJCRmaWxlICQoYWJzX2J1aWxkZGlyKS8gfHwgdHJ1ZTsgXAotCSAgICAgICAgZG9uZTsgXAotCSAgICBmaTsgXAotCWZpCi0JQHRvdWNoIHNldHVwLWJ1aWxkLnN0YW1wCi0KLSMjIyMgc2NhbiAjIyMjCi0KLSMgaW4gdGhlIGNhc2Ugb2Ygbm9uLXNyY2RpciBidWlsZHMsIHRoZSBidWlsdCBnc3QgZGlyZWN0b3J5IGdldHMgYWRkZWQKLSMgdG8gZ3RrLWRvYyBzY2FubmluZzsgYnV0IG9ubHkgdGhlbiwgdG8gYXZvaWQgZHVwbGljYXRlcwotc2Nhbi1idWlsZC5zdGFtcDogJChIRklMRV9HTE9CKSAkKENGSUxFX0dMT0IpCi0JQGVjaG8gJyAgRE9DICAgU2Nhbm5pbmcgaGVhZGVyIGZpbGVzJwotCUBfc291cmNlX2Rpcj0nJyA7CQkJCQkJXAotCWZvciBpIGluICQoRE9DX1NPVVJDRV9ESVIpIDsgZG8JCQkJCVwKLQkgICAgX3NvdXJjZV9kaXI9IiQke19zb3VyY2VfZGlyfSAtLXNvdXJjZS1kaXI9JCRpIiA7CSAgICAgICAgXAotCWRvbmUgOwkJCQkJCQkgICAgICAgIFwKLQlndGtkb2Mtc2NhbgkJCQkJCQlcCi0JCSQoU0NBTl9PUFRJT05TKSAkKEVYVFJBX0hGSUxFUykJCQkJXAotCQktLW1vZHVsZT0kKERPQ19NT0RVTEUpCQkJCQlcCi0JCSQke19zb3VyY2VfZGlyfSAgICAgICAgIAkJCQlcCi0JCS0taWdub3JlLWhlYWRlcnM9IiQoSUdOT1JFX0hGSUxFUykiCi0JQGlmIGdyZXAgLWwgJ14uLiokJCcgJChET0NfTU9EVUxFKS50eXBlcyA+IC9kZXYvbnVsbDsgdGhlbglcCi0JICAgIGVjaG8gIiAgRE9DICAgSW50cm9zcGVjdGluZyBnb2JqZWN0cyI7IFwKLQkgICAgc2Nhbm9ial9vcHRpb25zPSIiOyBcCi0JICAgIGd0a2RvYy1zY2FuZ29iaiAyPiYxIC0taGVscCB8IGdyZXAgID4vZGV2L251bGwgIlwtXC12ZXJib3NlIjsgXAotCSAgICBpZiB0ZXN0ICIkJD8iID0gIjAiOyB0aGVuIFwKLQkgICAgICAgIGlmIHRlc3QgIngkKFYpIiA9ICJ4MSI7IHRoZW4gXAotCSAgICAgICAgICAgIHNjYW5vYmpfb3B0aW9ucz0iLS12ZXJib3NlIjsgXAotCSAgICAgICAgZmk7IFwKLQkgICAgZmk7IFwKLQkgICAgR1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA9YGNkICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgCVwKLQkgICAgR1NUX1BMVUdJTl9QQVRIXzFfMD0JCQkJCVwKLQkgICAgR1NUX1JFR0lTVFJZXzFfMD1kb2MtcmVnaXN0cnkueG1sCQkJCVwKLQkgICAgJChHVEtET0NfRVhUUkFfRU5WSVJPTk1FTlQpCQkJCQlcCi0JICAgIENDPSIkKEdUS0RPQ19DQykiIExEPSIkKEdUS0RPQ19MRCkiIFJVTj0iJChHVEtET0NfUlVOKSIJXAotCSAgICBDRkxBR1M9IiQoR1RLRE9DX0NGTEFHUykgJChDRkxBR1MpIgkJCQlcCi0JICAgIExERkxBR1M9IiQoR1RLRE9DX0xJQlMpICQoTERGTEFHUykiCQkJCVwKLQkgICAgZ3RrZG9jLXNjYW5nb2JqIC0tdHlwZS1pbml0LWZ1bmM9ImdzdF9pbml0KE5VTEwsTlVMTCkiCVwKLQkgICAgICAgICQkc2Nhbm9ial9vcHRpb25zIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkgOwkJXAotCWVsc2UJCQkJCQkJCVwKLQkgICAgZm9yIGkgaW4gJChTQ0FOT0JKX0ZJTEVTKSA7IGRvCQkJCVwKLQkgICAgICAgJChNS0RJUl9QKSAkKGRpcm5hbWUgJCRpKSA7CQkJCVwKLQkgICAgICAgdGVzdCAtZiAkJGkgfHwgdG91Y2ggJCRpIDsJCQkJXAotCSAgICBkb25lCQkJCQkJCVwKLQlmaQotCUB0b3VjaCBzY2FuLWJ1aWxkLnN0YW1wCi0KLSQoRE9DX01PRFVMRSktZGVjbC50eHQgJChTQ0FOT0JKX0ZJTEVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQ6IHNjYW4tYnVpbGQuc3RhbXAKLQlAdHJ1ZQotCi0jIyMjIHhtbCAjIyMjCi0KLXNnbWwtYnVpbGQuc3RhbXA6IHNldHVwLWJ1aWxkLnN0YW1wICQoRE9DX01PRFVMRSktZGVjbC50eHQgJChTQ0FOT0JKX0ZJTEVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKGV4cGFuZF9jb250ZW50X2ZpbGVzKQotCUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIFhNTCcKLQlAX3NvdXJjZV9kaXI9JycgOwkJCQkJCVwKLQlmb3IgaSBpbiAkKERPQ19TT1VSQ0VfRElSKSA7IGRvCQkJCQlcCi0JICAgIF9zb3VyY2VfZGlyPSIkJHtfc291cmNlX2Rpcn0gLS1zb3VyY2UtZGlyPSQkaSIgOwkgICAgICAgIFwKLQlkb25lIDsJCQkJCQkJICAgICAgICBcCi0JZ3RrZG9jLW1rZGIgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAkJHtfc291cmNlX2Rpcn0gIC0tZXhwYW5kLWNvbnRlbnQtZmlsZXM9IiQoZXhwYW5kX2NvbnRlbnRfZmlsZXMpIiAtLW1haW4tc2dtbC1maWxlPSQoRE9DX01BSU5fU0dNTF9GSUxFKSAtLW91dHB1dC1mb3JtYXQ9eG1sICQoTUtEQl9PUFRJT05TKQotCUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIHhtbAotCUB0b3VjaCBzZ21sLWJ1aWxkLnN0YW1wCi0KLXNnbWwuc3RhbXA6IHNnbWwtYnVpbGQuc3RhbXAKLQlAdHJ1ZQotCi0jIyMjIGh0bWwgIyMjIwotCi1odG1sLWJ1aWxkLnN0YW1wOiBzZ21sLnN0YW1wICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKGNvbnRlbnRfZmlsZXMpCi0JQGVjaG8gJyAgRE9DICAgQnVpbGRpbmcgSFRNTCcKLQlAcm0gLXJmIGh0bWwKLQlAbWtkaXIgaHRtbAotCUBjcCAtcHIgeG1sIGh0bWwKLQlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyAuLwotCUBta2h0bWxfb3B0aW9ucz0iIjsgXAotCWd0a2RvYy1ta2h0bWwgMj4mMSAtLWhlbHAgfCBncmVwICA+L2Rldi9udWxsICJcLVwtdmVyYm9zZSI7IFwKLQlpZiB0ZXN0ICIkKD8pIiA9ICIwIjsgdGhlbiBcCi0JICBpZiB0ZXN0ICJ4JChWKSIgPSAieDEiOyB0aGVuIFwKLQkgICAgbWtodG1sX29wdGlvbnM9IiQkbWtodG1sX29wdGlvbnMgLS12ZXJib3NlIjsgXAotCSAgZmk7IFwKLQlmaTsgXAotCUBndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXBhdGgiOyBcCi0JaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAotCSAgbWtodG1sX29wdGlvbnM9LS1wYXRoPSIkKGFic19zcmNkaXIpIjsgXAotCWZpOyBcCi0JY2QgaHRtbCAmJiBndGtkb2MtbWtodG1sICQkbWtodG1sX29wdGlvbnMgJChNS0hUTUxfT1BUSU9OUykgJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQCAuLi8kKERPQ19NQUlOX1NHTUxfRklMRSkKLQlAcm0gLXJmIGh0bWwveG1sCi0JQHJtIC1mIHZlcnNpb24uZW50aXRpZXMKLQlAdGVzdCAieCQoSFRNTF9JTUFHRVMpIiA9ICJ4IiB8fCAgKCBjZCAkKHNyY2RpcikgJiYgY3AgJChIVE1MX0lNQUdFUykgJChhYnNfYnVpbGRkaXIpL2h0bWwgKQotCUBlY2hvICcgIERPQyAgIEZpeGluZyBjcm9zcy1yZWZlcmVuY2VzJwotCUBndGtkb2MtZml4eHJlZiAtLW1vZHVsZT0kKERPQ19NT0RVTEUpIC0tbW9kdWxlLWRpcj1odG1sIC0taHRtbC1kaXI9JChIVE1MX0RJUikgJChGSVhYUkVGX09QVElPTlMpCi0JQHRvdWNoIGh0bWwtYnVpbGQuc3RhbXAKLQotY2xlYW4tbG9jYWwtZ3RrZG9jOgotCUBybSAtcmYgeG1sIHRtcGwgaHRtbAotIyBjbGVhbiBmaWxlcyBjb3BpZWQgZm9yIG5vbnNyY2RpciB0ZW1wbGF0ZXMgYnVpbGQKLQlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuIFwKLQkgICAgICAgIHJtIC1yZiAkKERPQ19NT0RVTEUpLnR5cGVzOyBcCi0JZmkKLWVsc2UKLWFsbC1sb2NhbDoKLWNsZWFuLWxvY2FsLWd0a2RvYzoKLWVuZGlmCi0KLWNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbC1ndGtkb2MKLQlAcm0gLWYgKn4gKi5iYWsKLQlAcm0gLXJmIC5saWJzCi0KLWRpc3RjbGVhbi1sb2NhbDoKLQlAcm0gLWYgJChSRVBPUlRfRklMRVMpIFwKLQkgICAgICAgICQoRE9DX01PRFVMRSktZGVjbC1saXN0LnR4dCAkKERPQ19NT0RVTEUpLWRlY2wudHh0Ci0JQHJtIC1yZiB0bXBsLyouc2dtbC5iYWsKLQlAcm0gLWYgJChET0NfTU9EVUxFKS5oaWVyYXJjaHkKLQlAcm0gLWYgKi5zdGFtcCB8fCB0cnVlCi0JQGlmIHRlc3QgIiQoYWJzX3NyY2RpcikiICE9ICIkKGFic19idWlsZGRpcikiIDsgdGhlbiBcCi0JICAgIHJtIC1mICQoRE9DX01BSU5fU0dNTF9GSUxFKSA7IFwKLQkgICAgcm0gLWYgJChET0NfT1ZFUlJJREVTKSA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS50eXBlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0IDsgXAotCSAgICBybSAtZiAkKGNvbnRlbnRfZmlsZXMpIDsgXAotCSAgICBybSAtcmYgdG1wbC8qLnNnbWwgOyBcCi0JZmkKLQlAcm0gLXJmICoubwotCi1tYWludGFpbmVyLWNsZWFuLWxvY2FsOiBjbGVhbgotCUBjZCAkKHNyY2RpcikgJiYgcm0gLXJmIGh0bWwgXAotCQl4bWwgJChET0NfTU9EVUxFKS1kZWNsLWxpc3QudHh0ICQoRE9DX01PRFVMRSktZGVjbC50eHQKLQotIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZTsgZGV2aGVscCByZXF1aXJlcyBtYWpvcm1pbm9yIHRvbwotaW5zdGFsbC1kYXRhLWxvY2FsOgotCShpbnN0YWxsZmlsZXM9YGVjaG8gJChidWlsZGRpcikvaHRtbC8qLnNnbWwgJChidWlsZGRpcikvaHRtbC8qLmh0bWwgJChidWlsZGRpcikvaHRtbC8qLnBuZyAkKGJ1aWxkZGlyKS9odG1sLyouY3NzYDsgXAotCWlmIHRlc3QgIiQkaW5zdGFsbGZpbGVzIiA9ICckKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3MnOyBcCi0JdGhlbiBlY2hvICctLSBOb3RoaW5nIHRvIGluc3RhbGwnIDsgXAotCWVsc2UgXAotCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAotCSAgZm9yIGkgaW4gJCRpbnN0YWxsZmlsZXM7IGRvIFwKLQkgICAgZWNobyAnLS0gSW5zdGFsbGluZyAnJCRpIDsgXAotCSAgICAkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICBkb25lOyBcCi0JICBlY2hvICctLSBJbnN0YWxsaW5nICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMicgOyBcCi0JICBpZiB0ZXN0IC1lICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMjsgdGhlbiBcCi0JICAgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMiBcCi0JICAgICAgICAgICAgJChERVNURElSKSQoVEFSR0VUX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMjsgXAotCSAgZmk7IFwKLQkgICQoR1RLRE9DX1JFQkFTRSkgLS1yZWxhdGl2ZSAtLWRlc3QtZGlyPSQoREVTVERJUikgLS1odG1sLWRpcj0kKERFU1RESVIpJChUQVJHRVRfRElSKSB8fCB0cnVlIDsgXAotCWZpKQotdW5pbnN0YWxsLWxvY2FsOgotCWlmIHRlc3QgLWQgJChERVNURElSKSQoVEFSR0VUX0RJUik7IHRoZW4gXAotCSAgcm0gLXJmICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyo7IFwKLQkgIHJtZGlyIC1wICQoREVTVERJUikkKFRBUkdFVF9ESVIpIDI+L2Rldi9udWxsIHx8IHRydWU7IFwKLQllbHNlIFwKLQkgIGVjaG8gJy0tIE5vdGhpbmcgdG8gdW5pbnN0YWxsJyA7IFwKLQlmaTsKLQotCi0jCi0jIFJlcXVpcmUgZ3RrLWRvYyB3aGVuIG1ha2luZyBkaXN0Ci0jCi1pZiBFTkFCTEVfR1RLX0RPQwotZGlzdC1jaGVjay1ndGtkb2M6Ci1lbHNlCi1kaXN0LWNoZWNrLWd0a2RvYzoKLQlAZWNobyAiKioqIGd0ay1kb2MgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGVuYWJsZWQgaW4gb3JkZXIgdG8gbWFrZSBkaXN0IgotCUBmYWxzZQotZW5kaWYKLQotZGlzdC1ob29rOiBkaXN0LWNoZWNrLWd0a2RvYyBkaXN0LWhvb2stbG9jYWwKLQlta2RpciAkKGRpc3RkaXIpL2h0bWwKLQljcCBodG1sLyogJChkaXN0ZGlyKS9odG1sCi0JLWNwICQoc3JjZGlyKS8kKERPQ19NT0RVTEUpLnR5cGVzICQoZGlzdGRpcikvCi0JLWNwICQoc3JjZGlyKS8kKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKGRpc3RkaXIpLwotCWNkICQoZGlzdGRpcikgJiYgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKLQktZ3RrZG9jLXJlYmFzZSAtLW9ubGluZSAtLXJlbGF0aXZlIC0taHRtbC1kaXI9JChkaXN0ZGlyKS9odG1sCi0KLS5QSE9OWSA6IGRpc3QtaG9vay1sb2NhbCBkb2NzCi0KLSMgYXZvaWQgc3B1cmlvdXMgYnVpbGQgZXJyb3JzIHdoZW4gZGlzdGNoZWNraW5nIHdpdGggLWpOCi0uTk9UUEFSQUxMRUw6CmRpZmYgLS1naXQgYS9jb21tb24vbTQvTWFrZWZpbGUuYW0gYi9jb21tb24vbTQvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkY2VjOGMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotRVhUUkFfRElTVCA9IFwKLQlSRUFETUUgXAotCWFzLWFjLWV4cGFuZC5tNCBcCi0JYXMtYXV0by1hbHQubTQgXAotCWFzLWNvbXBpbGVyLWZsYWcubTQgXAotCWFzLWNvbXBpbGVyLm00IFwKLQlhcy1kb2Nib29rLm00IFwKLQlhcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQlhcy1saWJ0b29sLm00IFwKLQlhcy1saWJ0b29sLXRhZ3MubTQgXAotCWFzLXB5dGhvbi5tNCBcCi0JYXMtdmVyc2lvbi5tNCBcCi0JYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQlheF9wdGhyZWFkLm00IFwKLQlnbGliLWdldHRleHQubTQgXAotCWdzdC1hcmNoLm00IFwKLQlnc3QtYXJncy5tNCBcCi0JZ3N0LWNoZWNrLm00IFwKLQlnc3QtZGVidWdpbmZvLm00IFwKLQlnc3QtZGVmYXVsdC5tNCBcCi0JZ3N0LWRvYy5tNCBcCi0JZ3N0LWRvd2hpbGUubTQgXAotCWdzdC1lcnJvci5tNCBcCi0JZ3N0LWZlYXR1cmUubTQgXAotCWdzdC1mdW5jdGlvbi5tNCBcCi0JZ3N0LWdldHRleHQubTQgXAotCWdzdC1nbGliMi5tNCBcCi0JZ3N0LWxpYnhtbDIubTQgXAotCWdzdC1wYXJzZXIubTQgXAotCWdzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCWdzdC1wbGF0Zm9ybS5tNCBcCi0JZ3N0LXBsdWdpbmRpci5tNCBcCi0JZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQlnc3QtdmFsZ3JpbmQubTQgXAotCWdzdC14MTEubTQgXAotCWdzdC5tNCBcCi0JZ3RrLWRvYy5tNCBcCi0JaW50cm9zcGVjdGlvbi5tNCBcCi0JcGtnLm00IFwKLQljaGVjay5tNCBcCi0Jb3JjLm00CmRpZmYgLS1naXQgYS9jb21tb24vbTQvTWFrZWZpbGUuaW4gYi9jb21tb24vbTQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyN2E4N2MuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNjg2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gY29tbW9uL200Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluIFJFQURNRQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1FWFRSQV9ESVNUID0gXAotCVJFQURNRSBcCi0JYXMtYWMtZXhwYW5kLm00IFwKLQlhcy1hdXRvLWFsdC5tNCBcCi0JYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JYXMtY29tcGlsZXIubTQgXAotCWFzLWRvY2Jvb2subTQgXAotCWFzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCWFzLWxpYnRvb2wubTQgXAotCWFzLWxpYnRvb2wtdGFncy5tNCBcCi0JYXMtcHl0aG9uLm00IFwKLQlhcy12ZXJzaW9uLm00IFwKLQlheF9jcmVhdGVfc3RkaW50X2gubTQgXAotCWF4X3B0aHJlYWQubTQgXAotCWdsaWItZ2V0dGV4dC5tNCBcCi0JZ3N0LWFyY2gubTQgXAotCWdzdC1hcmdzLm00IFwKLQlnc3QtY2hlY2subTQgXAotCWdzdC1kZWJ1Z2luZm8ubTQgXAotCWdzdC1kZWZhdWx0Lm00IFwKLQlnc3QtZG9jLm00IFwKLQlnc3QtZG93aGlsZS5tNCBcCi0JZ3N0LWVycm9yLm00IFwKLQlnc3QtZmVhdHVyZS5tNCBcCi0JZ3N0LWZ1bmN0aW9uLm00IFwKLQlnc3QtZ2V0dGV4dC5tNCBcCi0JZ3N0LWdsaWIyLm00IFwKLQlnc3QtbGlieG1sMi5tNCBcCi0JZ3N0LXBhcnNlci5tNCBcCi0JZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JZ3N0LXBsYXRmb3JtLm00IFwKLQlnc3QtcGx1Z2luZGlyLm00IFwKLQlnc3QtcGx1Z2luLWRvY3MubTQgXAotCWdzdC12YWxncmluZC5tNCBcCi0JZ3N0LXgxMS5tNCBcCi0JZ3N0Lm00IFwKLQlndGstZG9jLm00IFwKLQlpbnRyb3NwZWN0aW9uLm00IFwKLQlwa2cubTQgXAotCWNoZWNrLm00IFwKLQlvcmMubTQKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgY29tbW9uL200L01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGNvbW1vbi9tNC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLXRhZ3MgVEFHUzoKLQotY3RhZ3MgQ1RBR1M6Ci0KLWNzY29wZSBjc2NvcGVsaXN0OgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvY29tbW9uL200L1JFQURNRSBiL2NvbW1vbi9tNC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2N2EzNDQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotQWxsIGFjbG9jYWwgLm00IGZpbGVzIHdlIG5lZWQgYXJlIHB1dCBoZXJlIGFuZCBjYXQnZCB0byBhY2luY2x1ZGUubTQgaW4KLXRoZSBzb3VyY2Ugcm9vdC4gIE9mZmljaWFsIG9uZXMgKHRha2VuIGZyb20gdGhlIHJlbGV2YW50IGRldmVsIHBhY2thZ2VzKQotYXJlIG5hbWVkIGFzLWlzLCB1bm9mZmljaWFsIG9uZXMgKG9yIGNoYW5nZWQgb25lcykgZ2V0IGEgZ3N0LXByZWZpeC4KZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgYi9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmM5ZTMzLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1kbmwgYXMtYWMtZXhwYW5kLm00IDAuMi4wCi1kbmwgYXV0b3N0YXJzIG00IG1hY3JvIGZvciBleHBhbmRpbmcgZGlyZWN0b3JpZXMgdXNpbmcgY29uZmlndXJlJ3MgcHJlZml4Ci1kbmwgdGhvbWFzQGFwZXN0YWFydC5vcmcKLQotZG5sIEFTX0FDX0VYUEFORChWQVIsIENPTkZJR1VSRV9WQVIpCi1kbmwgZXhhbXBsZQotZG5sIEFTX0FDX0VYUEFORChTWVNDT05GRElSLCAkc3lzY29uZmRpcikKLWRubCB3aWxsIHNldCBTWVNDT05GRElSIHRvIC91c3IvbG9jYWwvZXRjIGlmIHByZWZpeD0vdXNyL2xvY2FsCi0KLUFDX0RFRlVOKFtBU19BQ19FWFBBTkRdLAotWwotICBFWFBfVkFSPVskMV0KLSAgRlJPTV9WQVI9WyQyXQotCi0gIGRubCBmaXJzdCBleHBhbmQgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBpZiBuZWNlc3NhcnkKLSAgcHJlZml4X3NhdmU9JHByZWZpeAotICBleGVjX3ByZWZpeF9zYXZlPSRleGVjX3ByZWZpeAotCi0gIGRubCBpZiBubyBwcmVmaXggZ2l2ZW4sIHRoZW4gdXNlIC91c3IvbG9jYWwsIHRoZSBkZWZhdWx0IHByZWZpeAotICBpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCi0gIGZpCi0gIGRubCBpZiBubyBleGVjX3ByZWZpeCBnaXZlbiwgdGhlbiB1c2UgcHJlZml4Ci0gIGlmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgotICAgIGV4ZWNfcHJlZml4PSRwcmVmaXgKLSAgZmkKLQotICBmdWxsX3Zhcj0iJEZST01fVkFSIgotICBkbmwgbG9vcCB1bnRpbCBpdCBkb2Vzbid0IGNoYW5nZSBhbnltb3JlCi0gIHdoaWxlIHRydWU7IGRvCi0gICAgbmV3X2Z1bGxfdmFyPSJgZXZhbCBlY2hvICRmdWxsX3ZhcmAiCi0gICAgaWYgdGVzdCAieCRuZXdfZnVsbF92YXIiID0gIngkZnVsbF92YXIiOyB0aGVuIGJyZWFrOyBmaQotICAgIGZ1bGxfdmFyPSRuZXdfZnVsbF92YXIKLSAgZG9uZQotCi0gIGRubCBjbGVhbiB1cAotICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCi0gIEFDX1NVQlNUKFskMV0sICIkZnVsbF92YXIiKQotCi0gIGRubCByZXN0b3JlIHByZWZpeCBhbmQgZXhlY19wcmVmaXgKLSAgcHJlZml4PSRwcmVmaXhfc2F2ZQotICBleGVjX3ByZWZpeD0kZXhlY19wcmVmaXhfc2F2ZQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBiL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3OTIwZC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1kbmwgYXMtYXV0by1hbHQubTQgMC4wLjIKLWRubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIHN1cHBseWluZyBhbHRlcm5hdGUgYXV0b3Rvb2xzIHZlcnNpb25zIHRvIGNvbmZpZ3VyZQotZG5sIHRob21hc0BhcGVzdGFhcnQub3JnCi1kbmwKLWRubCBBU19BVVRPVE9PTFNfQUxURVJOQVRFKCkKLWRubAotZG5sIHN1cHBsaWVzIC0td2l0aCBhcmd1bWVudHMgZm9yIGF1dG9jb25mLCBhdXRvaGVhZGVyLCBhdXRvbWFrZSwgYWNsb2NhbAotCi1BQ19ERUZVTihbQVNfQVVUT1RPT0xTX0FMVEVSTkFURV0sCi1bCi0gIGRubCBhbGxvdyBmb3IgZGlmZmVyZW50IGF1dG9jb25mIHZlcnNpb24KLSAgQUNfQVJHX1dJVEgoYXV0b2NvbmYsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1hdXRvY29uZl0sCi0gICAgICAgICAgICAgICAgICAgW3VzZSBhIGRpZmZlcmVudCBhdXRvY29uZiBmb3IgcmVnZW5lcmF0aW9uIG9mIE1ha2VmaWxlc10pLAotICAgIFsKLSAgICAgIHVuc2V0IEFVVE9DT05GCi0gICAgICBBTV9NSVNTSU5HX1BST0coQVVUT0NPTkYsICR7d2l0aHZhbH0pCi0gICAgICBBQ19NU0dfTk9USUNFKFtVc2luZyAkQVVUT0NPTkYgYXMgYXV0b2NvbmZdKQotICAgIF0pCi0KLSAgZG5sIGFsbG93IGZvciBkaWZmZXJlbnQgYXV0b2hlYWRlciB2ZXJzaW9uCi0gIEFDX0FSR19XSVRIKGF1dG9oZWFkZXIsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1hdXRvaGVhZGVyXSwKLSAgICAgICAgICAgICAgICAgICBbdXNlIGEgZGlmZmVyZW50IGF1dG9oZWFkZXIgZm9yIHJlZ2VuZXJhdGlvbiBvZiBNYWtlZmlsZXNdKSwKLSAgICBbCi0gICAgICB1bnNldCBBVVRPSEVBREVSCi0gICAgICBBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgJHt3aXRodmFsfSkKLSAgICAgIEFDX01TR19OT1RJQ0UoW1VzaW5nICRBVVRPSEVBREVSIGFzIGF1dG9oZWFkZXJdKQotICAgIF0pCi0KLSAgZG5sIGFsbG93IGZvciBkaWZmZXJlbnQgYXV0b21ha2UgdmVyc2lvbgotICBBQ19BUkdfV0lUSChhdXRvbWFrZSwKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWF1dG9tYWtlXSwKLSAgICAgICAgICAgICAgICAgICBbdXNlIGEgZGlmZmVyZW50IGF1dG9tYWtlIGZvciByZWdlbmVyYXRpb24gb2YgTWFrZWZpbGVzXSksCi0gICAgWwotICAgICAgdW5zZXQgQVVUT01BS0UKLSAgICAgIEFNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgJHt3aXRodmFsfSkKLSAgICAgIEFDX01TR19OT1RJQ0UoW1VzaW5nICRBVVRPTUFLRSBhcyBhdXRvbWFrZV0pCi0gICAgXSkKLQotICBkbmwgYWxsb3cgZm9yIGRpZmZlcmVudCBhY2xvY2FsIHZlcnNpb24KLSAgQUNfQVJHX1dJVEgoYWNsb2NhbCwKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWFjbG9jYWxdLAotICAgICAgICAgICAgICAgICAgIFt1c2UgYSBkaWZmZXJlbnQgYWNsb2NhbCBmb3IgcmVnZW5lcmF0aW9uIG9mIE1ha2VmaWxlc10pLAotICAgIFsKLSAgICAgIHVuc2V0IEFDTE9DQUwKLSAgICAgIEFNX01JU1NJTkdfUFJPRyhBQ0xPQ0FMLCAke3dpdGh2YWx9KQotICAgICAgQUNfTVNHX05PVElDRShbVXNpbmcgJEFDTE9DQUwgYXMgYWNsb2NhbF0pCi0gICAgXSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBiL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmI4NTNhLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00CisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotZG5sIGFzLWNvbXBpbGVyLWZsYWcubTQgMC4xLjAKLQotZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3IgZGV0ZWN0aW9uIG9mIGNvbXBpbGVyIGZsYWdzCi0KLWRubCBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLWRubCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotCi1kbmwgQVNfQ09NUElMRVJfRkxBRyhDRkxBR1MsIEFDVElPTi1JRi1BQ0NFUFRFRCwgW0FDVElPTi1JRi1OT1QtQUNDRVBURURdKQotZG5sIFRyaWVzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZ2l2ZW4gQ0ZMQUdTLgotZG5sIFJ1bnMgQUNUSU9OLUlGLUFDQ0VQVEVEIGlmIHRoZSBjb21waWxlciBjYW4gY29tcGlsZSB3aXRoIHRoZSBmbGFncywKLWRubCBhbmQgQUNUSU9OLUlGLU5PVC1BQ0NFUFRFRCBvdGhlcndpc2UuCi0KLUFDX0RFRlVOKFtBU19DT01QSUxFUl9GTEFHXSwKLVsKLSAgQUNfTVNHX0NIRUNLSU5HKFt0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgJDFdKQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgJDEiCi0KLSAgQUNfVFJZX0NPTVBJTEUoWyBdLCBbXSwgW2ZsYWdfb2s9eWVzXSwgW2ZsYWdfb2s9bm9dKQotICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLQotICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KLSAgICAkMgotICAgIHRydWUKLSAgZWxzZQotICAgICQzCi0gICAgdHJ1ZQotICBmaQotICBBQ19NU0dfUkVTVUxUKFskZmxhZ19va10pCi1dKQotCi1kbmwgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoQ1BQRkxBR1MsIEFDVElPTi1JRi1BQ0NFUFRFRCwgW0FDVElPTi1JRi1OT1QtQUNDRVBURURdKQotZG5sIFRyaWVzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZ2l2ZW4gQ1BQRkxBR1MuCi1kbmwgUnVucyBBQ1RJT04tSUYtQUNDRVBURUQgaWYgdGhlIGNvbXBpbGVyIGNhbiBjb21waWxlIHdpdGggdGhlIGZsYWdzLAotZG5sIGFuZCBBQ1RJT04tSUYtTk9ULUFDQ0VQVEVEIG90aGVyd2lzZS4KLQotQUNfREVGVU4oW0FTX0NYWF9DT01QSUxFUl9GTEFHXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotCi0gIEFDX01TR19DSEVDS0lORyhbdG8gc2VlIGlmIGMrKyBjb21waWxlciB1bmRlcnN0YW5kcyAkMV0pCi0KLSAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgotICBDUFBGTEFHUz0iJENQUEZMQUdTICQxIgotCi0gIEFDX0xBTkdfUFVTSChDKyspCi0KLSAgQUNfVFJZX0NPTVBJTEUoWyBdLCBbXSwgW2ZsYWdfb2s9eWVzXSwgW2ZsYWdfb2s9bm9dKQotICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgJDIKLSAgICB0cnVlCi0gIGVsc2UKLSAgICAkMwotICAgIHRydWUKLSAgZmkKLQotICBBQ19MQU5HX1BPUChDKyspCi0KLSAgQUNfTVNHX1JFU1VMVChbJGZsYWdfb2tdKQotXSkKLQotZG5sIEFTX09CSkNfQ09NUElMRVJfRkxBRyhDUFBGTEFHUywgQUNUSU9OLUlGLUFDQ0VQVEVELCBbQUNUSU9OLUlGLU5PVC1BQ0NFUFRFRF0pCi1kbmwgVHJpZXMgdG8gY29tcGlsZSB3aXRoIHRoZSBnaXZlbiBDUFBGTEFHUy4KLWRubCBSdW5zIEFDVElPTi1JRi1BQ0NFUFRFRCBpZiB0aGUgY29tcGlsZXIgY2FuIGNvbXBpbGUgd2l0aCB0aGUgZmxhZ3MsCi1kbmwgYW5kIEFDVElPTi1JRi1OT1QtQUNDRVBURUQgb3RoZXJ3aXNlLgotCi1BQ19ERUZVTihbQVNfT0JKQ19DT01QSUxFUl9GTEFHXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19PQkpDXSkKLQotICBBQ19NU0dfQ0hFQ0tJTkcoW3RvIHNlZSBpZiBPYmplY3RpdmUgQyBjb21waWxlciB1bmRlcnN0YW5kcyAkMV0pCi0KLSAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgotICBDUFBGTEFHUz0iJENQUEZMQUdTICQxIgotCi0gIEFDX0xBTkdfUFVTSChbT2JqZWN0aXZlIENdKQotCi0gIEFDX1RSWV9DT01QSUxFKFsgXSwgW10sIFtmbGFnX29rPXllc10sIFtmbGFnX29rPW5vXSkKLSAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgICQyCi0gICAgdHJ1ZQotICBlbHNlCi0gICAgJDMKLSAgICB0cnVlCi0gIGZpCi0KLSAgQUNfTEFOR19QT1AoW09iamVjdGl2ZSBDXSkKLQotICBBQ19NU0dfUkVTVUxUKFskZmxhZ19va10pCi1dKQotCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtY29tcGlsZXIubTQgYi9jb21tb24vbTQvYXMtY29tcGlsZXIubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOWEwNjAuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2FzLWNvbXBpbGVyLm00CisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotZG5sIGFzLWNvbXBpbGVyLm00IDAuMS4wCi0KLWRubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIGRldGVjdGlvbiBvZiBjb21waWxlciBmbGF2b3IKLQotZG5sIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotZG5sICRJZDogYXMtY29tcGlsZXIubTQsdiAxLjQgMjAwNC8wNi8wMSAwOTo0NDoxOSB0aG9tYXN2cyBFeHAgJAotCi1kbmwgQVNfQ09NUElMRVIoQ09NUElMRVIpCi1kbmwgd2lsbCBzZXQgdmFyaWFibGUgQ09NUElMRVIgdG8KLWRubCAtIGdjYwotZG5sIC0gZm9ydGUKLWRubCAtIChlbXB0eSkgaWYgbm8gZ3Vlc3MgY291bGQgYmUgbWFkZQotCi1BQ19ERUZVTihbQVNfQ09NUElMRVJdLAotWwotICBhc19jb21waWxlcj0KLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBjb21waWxlciBmbGF2b3VyKQotCi0gIGRubCBpcyBpdCBnY2MgPwotICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KLSAgICBhc19jb21waWxlcj0iZ2NjIgotICBmaQotCi0gIGRubCBpcyBpdCBmb3J0ZSA/Ci0gIEFDX1RSWV9SVU4oWwotaW50IG1haW4KLShpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotI2lmZGVmIF9fc3VuCi0gIHJldHVybiAwOwotI2Vsc2UKLSAgcmV0dXJuIDE7Ci0jZW5kaWYKLX0KLSAgXSwgYXNfY29tcGlsZXI9ImZvcnRlIiwgLCkKLQotICBpZiB0ZXN0ICJ4JGFzX2NvbXBpbGVyIiA9ICJ4IjsgdGhlbgotICAgIEFDX01TR19SRVNVTFQoW3Vua25vd24gIV0pCi0gIGVsc2UKLSAgICBBQ19NU0dfUkVTVUxUKCRhc19jb21waWxlcikKLSAgZmkKLSAgWyQxXT0kYXNfY29tcGlsZXIKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBiL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTI3MDUwLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotZG5sIEFTX0RPQ0JPT0soWywgQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKLWRubCBjaGVja3MgaWYgeHNsdHByb2MgY2FuIGJ1aWxkIGRvY2Jvb2sgZG9jdW1lbnRhdGlvbgotZG5sICh3aGljaCBpcyBwb3NzaWJsZSBpZiB0aGUgY2F0YWxvZyBpcyBzZXQgdXAgcHJvcGVybHkKLWRubCBJIGFsc28gdHJpZWQgY2hlY2tpbmcgZm9yIGEgc3BlY2lmaWMgdmVyc2lvbiBhbmQgdHlwZSBvZiBkb2Nib29rCi1kbmwgYnV0IHhzbHRwcm9jIHNlZW1lZCB0byBoYXBwaWx5IHJ1biBhbnl3YXksIHNvIHdlIGNhbid0IGNoZWNrIGZvciB0aGF0Ci1kbmwgYW5kIHZlcnNpb24KLWRubCB0aGlzIG1hY3JvIHRha2VzIGluc3BpcmF0aW9uIGZyb20KLWRubCBodHRwOi8vd3d3Lm1vdmVtZW50LnVrbGludXgubmV0L2RvY3MvZG9jYm9vay1hdXRvdG9vbHMvY29uZmlndXJlLmh0bWwKLUFDX0RFRlVOKFtBU19ET0NCT09LXSwKLVsKLSAgWFNMVFBST0NfRkxBR1M9LS1ub25ldAotICBET0NCT09LX1JPT1Q9Ci0gIFRZUEVfTEM9eG1sCi0gIFRZUEVfVUM9WE1MCi0gIERPQ0JPT0tfVkVSU0lPTj00LjEuMgotCi0gIGlmIHRlc3QgLW4gIiRYTUxfQ0FUQUxPR19GSUxFUyI7IHRoZW4KLSAgICBvbGRJRlM9JElGUwotICAgIElGUz0nICcKLSAgICBmb3IgeG1sX2NhdGFsb2dfZmlsZSBpbiAkWE1MX0NBVEFMT0dfRklMRVM7IGRvCi0gICAgICBpZiB0ZXN0IC1mICR4bWxfY2F0YWxvZ19maWxlOyB0aGVuCi0gICAgICAgIFhNTF9DQVRBTE9HPSR4bWxfY2F0YWxvZ19maWxlCi0gICAgICAgIENBVF9FTlRSWV9TVEFSVD0nPCEtLScKLSAgICAgICAgQ0FUX0VOVFJZX0VORD0nLS0+JwotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSRvbGRJRlMKLSAgZWxpZiB0ZXN0ICEgLWYgL2V0Yy94bWwvY2F0YWxvZzsgdGhlbgotICAgIGZvciBpIGluIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3N0eWxlc2hlZXQveHNsL253YWxzaCAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMvIC91c3IvbG9jYWwvc2hhcmUveHNsL2RvY2Jvb2sgOwotICAgIGRvCi0gICAgICBpZiB0ZXN0IC1kICIkaSI7IHRoZW4KLSAgICAgICAgRE9DQk9PS19ST09UPSRpCi0gICAgICBmaQotICAgIGRvbmUKLSAgZWxzZQotICAgIFhNTF9DQVRBTE9HPS9ldGMveG1sL2NhdGFsb2cKLSAgICBDQVRfRU5UUllfU1RBUlQ9JzwhLS0nCi0gICAgQ0FUX0VOVFJZX0VORD0nLS0+JwotICBmaQotCi0gIGRubCBXZSBuZWVkIHhzbHRwcm9jIHRvIHByb2Nlc3MgdGhlIHRlc3QKLSAgQUNfQ0hFQ0tfUFJPRyhYU0xUUFJPQyx4c2x0cHJvYyx4c2x0cHJvYywpCi0gIFhTTFRQUk9DX1dPUktTPW5vCi0gIGlmIHRlc3QgLW4gIiRYU0xUUFJPQyI7IHRoZW4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeHNsdHByb2MgZG9jYm9vayBwcm9jZXNzaW5nIHdvcmtzXSkKLQotICAgIGlmIHRlc3QgLW4gIiRYTUxfQ0FUQUxPRyI7IHRoZW4KLSAgICAgIERCX0ZJTEU9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2RvY2Jvb2sueHNsIgotICAgIGVsc2UKLSAgICAgIERCX0ZJTEU9IiRET0NCT09LX1JPT1QveGh0bWwvZG9jYm9vay54c2wiCi0gICAgZmkKLSAgICAkWFNMVFBST0MgJFhTTFRQUk9DX0ZMQUdTICREQl9GSUxFID4vZGV2L251bGwgMj4mMSA8PCBFTkQKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J0lTTy04ODU5LTEnPz4KLTwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rICRUWVBFX1VDIFYkRE9DQk9PS19WRVJTSU9OLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8kVFlQRV9MQy8kRE9DQk9PS19WRVJTSU9OL2RvY2Jvb2t4LmR0ZCI+Ci08Ym9vayBpZD0idGVzdCI+Ci08L2Jvb2s+Ci1FTkQKLSAgICBpZiB0ZXN0ICIkPyIgPSAwOyB0aGVuCi0gICAgICBYU0xUUFJPQ19XT1JLUz15ZXMKLSAgICBmaQotICAgIEFDX01TR19SRVNVTFQoJFhTTFRQUk9DX1dPUktTKQotICBmaQotCi0gIGlmIHRlc3QgIngkWFNMVFBST0NfV09SS1MiID0gInh5ZXMiOyB0aGVuCi0gICAgZG5sIGV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5ECi0gICAgaWZlbHNlKFskMV0sICwgOiwgWyQxXSkKLSAgZWxzZQotICAgIGRubCBleGVjdXRlIEFDVElPTi1JRi1OT1QtRk9VTkQKLSAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICBmaQotCi0gIEFDX1NVQlNUKFhNTF9DQVRBTE9HKQotICBBQ19TVUJTVChYU0xUUFJPQ19GTEFHUykKLSAgQUNfU1VCU1QoRE9DQk9PS19ST09UKQotICBBQ19TVUJTVChDQVRfRU5UUllfU1RBUlQpCi0gIEFDX1NVQlNUKENBVF9FTlRSWV9FTkQpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgYi9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzMjEwNC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLWRubCBhcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IDAuMS4wCi0KLWRubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIGRldGVjdGlvbiBvZiBnY2MgaW5saW5lIGFzc2VtYmx5Ci0KLWRubCBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotZG5sICRJZCQKLQotZG5sIEFTX0NPTVBJTEVSX0ZMQUcoQUNUSU9OLUlGLUFDQ0VQVEVELCBbQUNUSU9OLUlGLU5PVC1BQ0NFUFRFRF0pCi1kbmwgVHJpZXMgdG8gY29tcGlsZSB3aXRoIHRoZSBnaXZlbiBDRkxBR1MuCi1kbmwgUnVucyBBQ1RJT04tSUYtQUNDRVBURUQgaWYgdGhlIGNvbXBpbGVyIGNhbiBjb21waWxlIHdpdGggdGhlIGZsYWdzLAotZG5sIGFuZCBBQ1RJT04tSUYtTk9ULUFDQ0VQVEVEIG90aGVyd2lzZS4KLQotQUNfREVGVU4oW0FTX0dDQ19JTkxJTkVfQVNTRU1CTFldLAotWwotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIHN1cHBvcnRzIGdjYy1zdHlsZSBpbmxpbmUgYXNzZW1ibHldKQotCi0gIEFDX1RSWV9DT01QSUxFKFtdLCBbCi0jaWZkZWYgX19HTlVDX01JTk9SX18KLSNpZiAoX19HTlVDX18gKiAxMDAwICsgX19HTlVDX01JTk9SX18pIDwgMzAwNAotI2Vycm9yIEdDQyBiZWZvcmUgMy40IGhhcyBjcml0aWNhbCBidWdzIGNvbXBpbGluZyBpbmxpbmUgYXNzZW1ibHkKLSNlbmRpZgotI2VuZGlmCi1fX2FzbV9fICgiIjo6KSBdLCBbZmxhZ19vaz15ZXNdLCBbZmxhZ19vaz1ub10pCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgJDEKLSAgICB0cnVlCi0gIGVsc2UKLSAgICAkMgotICAgIHRydWUKLSAgZmkKLSAgQUNfTVNHX1JFU1VMVChbJGZsYWdfb2tdKQotXSkKLQotCi1BQ19ERUZVTihbQVNfR0NDX0FTTV9QT1dFUlBDX0ZQVV0sCi1bCi0gIEFDX01TR19DSEVDS0lORyhbaWYgY29tcGlsZXIgc3VwcG9ydHMgRlBVIGluc3RydWN0aW9ucyBvbiBQb3dlclBDXSkKLQotICBBQ19UUllfQ09NUElMRShbXSwgW19fYXNtX18gKCJmYWRkIDAsMCwwIjo6KSBdLCBbZmxhZ19vaz15ZXNdLCBbZmxhZ19vaz1ub10pCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgJDEKLSAgICB0cnVlCi0gIGVsc2UKLSAgICAkMgotICAgIHRydWUKLSAgZmkKLSAgQUNfTVNHX1JFU1VMVChbJGZsYWdfb2tdKQotXSkKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWxpYnRvb2wtdGFncy5tNCBiL2NvbW1vbi9tNC9hcy1saWJ0b29sLXRhZ3MubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZjBhZTQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2FzLWxpYnRvb2wtdGFncy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLWRubCBhcy1saWJ0b29sLXRhZ3MubTQgMC4xLjQKLQotZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3Igc2VsZWN0aW5nIGxpYnRvb2wgInRhZ3MiIChsYW5ndWFnZXMpCi0KLWRubCBBbmR5IFdpbmdvIGRvZXMgbm90IGNsYWltIGNyZWRpdCBmb3IgdGhpcyBtYWNybwotZG5sIGJhY2twb3J0ZWQgZnJvbSBsaWJ0b29sIDEuNiBieSBQYW9sbyBCb256aW5pCi1kbmwgc2VlIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9saWJ0b29sLzIwMDMtMTIvbXNnMDAwMDcuaHRtbAotCi1kbmwgJElkJAotCi1kbmwgQVNfTElCVE9PTF9UQUdTKFt0YWdzLi4uXSkKLQotZG5sIGV4YW1wbGUKLWRubCBBU19MSUJUT09MX1RBR1MoW10pIGZvciBvbmx5IEMgKG5vIGZvcnRyYW4sIGV0YykKLQotZG5sIFdoZW4gQUNfTElCVE9PTF9UQUdTIGlzIHVzZWQsIEkgcmVkZWZpbmUgX0xUX0FDX1RBR0NPTkZJRwotZG5sIHRvIGJlIG1vcmUgc2ltaWxhciB0byB0aGUgbGlidG9vbCAxLjYgaW1wbGVtZW50YXRpb24sIHdoaWNoCi1kbmwgdXNlcyBhbiBtNCBsb29wIGFuZCBtNCBjYXNlIGluc3RlYWQgb2YgYSBzaGVsbCBsb29wLiAgVGhpcwotZG5sIHdheSB0aGUgQ1hYL0dDSi9GNzcvUkMgdGVzdHMgYXJlIG5vdCBhbHdheXMgZXhwYW5kZWQuCi0KLWRubCBBU19MSUJUT09MX1RBR1MKLWRubCAtLS0tLS0tLS0tLS0tLS0KLWRubCB0YWdzIHRvIGVuYWJsZQotQUNfREVGVU4oW0FTX0xJQlRPT0xfVEFHU10sCi1bbTRfZGVmaW5lKFtfTFRfVEFHU10sWyQxXSkKLW00X2RlZmluZShbX0xUX0FDX1RBR0NPTkZJR10sIFsKLSAgIyByZWRlZmluZWQgTFQgQUMgVEFHQ09ORklHCi0gIGlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICAgaWYgdGVzdCAhIC1mICIke29maWxlfSI7IHRoZW4KLSAgICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBleGlzdF0pCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgotICAgICAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBsaWJ0b29sIHNjcmlwdF0pCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19XQVJOKFt1c2luZyBgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIGAkb2ZpbGUnXSkKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIEFDX0ZPUkVBQ0goW19MVF9UQUddLCBfTFRfVEFHUywKLSAgICAgIGVjaG8gVEhPTUFTOiB0YWcgX0xUX1RBRwotICAgICAgW200X2Nhc2UoX0xUX1RBRywKLSAgICAgIFtDWFhdLCBbCi0gICAgaWYgdGVzdCAtbiAiJENYWCIgJiYgdGVzdCAiWCRDWFgiICE9ICJYbm8iOyB0aGVuCi0gICAgICBlY2hvICJUSE9NQVM6IFlBWSBDWFgiCi0gICAgICBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRwotICAgICAgYXZhaWxhYmxlX3RhZ3M9IiRhdmFpbGFibGVfdGFncyBfTFRfVEFHIgotICAgIGZpXSwKLSAgICAgIFtGNzddLCBbCi0gICAgaWYgdGVzdCAtbiAiJEY3NyIgJiYgdGVzdCAiWCRGNzciICE9ICJYbm8iOyB0aGVuCi0gICAgICBBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJRwotICAgICAgYXZhaWxhYmxlX3RhZ3M9IiRhdmFpbGFibGVfdGFncyBfTFRfVEFHIgotICAgIGZpXSwKLSAgICAgIFtHQ0pdLCBbCi0gICAgaWYgdGVzdCAtbiAiJEdDSiIgJiYgdGVzdCAiWCRHQ0oiICE9ICJYbm8iOyB0aGVuCi0gICAgICBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRwotICAgICAgYXZhaWxhYmxlX3RhZ3M9IiRhdmFpbGFibGVfdGFncyBfTFRfVEFHIgotICAgIGZpXSwKLSAgICAgIFtSQ10sIFsKLSAgICBpZiB0ZXN0IC1uICIkUkMiICYmIHRlc3QgIlgkUkMiICE9ICJYbm8iOyB0aGVuCi0gICAgICBBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCi0gICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzIF9MVF9UQUciCi0gICAgZmldLAotICAgICAgW200X2VycnByaW50bihtNF9sb2NhdGlvbls6IGVycm9yOiBpbnZhbGlkIHRhZyBuYW1lOiBdIl9MVF9UQUciKQotICAgICAgbTRfZXhpdCgxKV0pCi0gICAgXSkKLSAgICBlY2hvIFRIT01BUzogYXZhaWxhYmxlIHRhZ3M6ICRhdmFpbGFibGVfdGFncwotICBmaQotICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCi0gICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKLSAgICBjaG1vZCAreCAiJG9maWxlIgotICAgIEFDX01TR19OT1RJQ0UoW3VwZGF0ZWQgYXZhaWxhYmxlIGxpYnRvb2wgdGFncyB3aXRoICRhdmFpbGFibGVfdGFncy5dKQotICBlbHNlCi0gICAgcm0gLWYgIiR7b2ZpbGV9VCIKLSAgICBBQ19NU0dfRVJST1IoW3VuYWJsZSB0byB1cGRhdGUgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zLl0pCi0KLSAgZmkKLQotXSlkbmwgX0xUX0FDX1RBR19DT05GSUcKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBiL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjE2MDk1Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00CisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotZG5sIGFzLWxpYnRvb2wubTQgMC4xLjQKLQotZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3IgbGlidG9vbCB2ZXJzaW9uaW5nCi0KLWRubCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLWRubCAkSWQ6IGFzLWxpYnRvb2wubTQsdiAxLjEwIDIwMDUvMTAvMTUgMTM6NDQ6MjMgdGhvbWFzdnMgRXhwICQKLQotZG5sIEFTX0xJQlRPT0woUFJFRklYLCBDVVJSRU5ULCBSRVZJU0lPTiwgQUdFLCBbUkVMRUFTRV0pCi0KLWRubCBleGFtcGxlCi1kbmwgQVNfTElCVE9PTChHU1QsIDIsIDAsIDApCi0KLWRubCB0aGlzIG1hY3JvCi1kbmwgLSBkZWZpbmVzIFskUFJFRklYXV9DVVJSRU5ULCBSRVZJU0lPTiBhbmQgQUdFCi1kbmwgLSBkZWZpbmVzIFskUFJFRklYXV9MSUJWRVJTSU9OCi1kbmwgLSBkZWZpbmVzIFskUFJFRklYXV9MVF9MREZMQUdTIHRvIHNldCB2ZXJzaW9uaW5nCi1kbmwgLSBBQ19TVUJTVCdzIHRoZW0gYWxsCi0KLWRubCBpZiBSRUxFQVNFIGlzIGdpdmVuLCB0aGVuIGFkZCBhIC1yZWxlYXNlIG9wdGlvbiB0byB0aGUgTERGTEFHUwotZG5sIHdpdGggdGhlIGdpdmVuIHJlbGVhc2UgdmVyc2lvbgotZG5sIHRoZW4gdXNlIFskUFJFRklYXV9MVF9MREZMQUdTIGluIHRoZSByZWxldmFudCBNYWtlZmlsZS5hbSdzCi0KLWRubCBjYWxsIEFNX1BST0dfTElCVE9PTCBhZnRlciB0aGlzIGNhbGwKLQotQUNfREVGVU4oW0FTX0xJQlRPT0xdLAotWwotICBbJDFdX0NVUlJFTlQ9WyQyXQotICBbJDFdX1JFVklTSU9OPVskM10KLSAgWyQxXV9BR0U9WyQ0XQotICBbJDFdX0xJQlZFUlNJT049WyQyXTpbJDNdOlskNF0KLSAgQUNfU1VCU1QoWyQxXV9DVVJSRU5UKQotICBBQ19TVUJTVChbJDFdX1JFVklTSU9OKQotICBBQ19TVUJTVChbJDFdX0FHRSkKLSAgQUNfU1VCU1QoWyQxXV9MSUJWRVJTSU9OKQotCi0gIFskMV1fTFRfTERGTEFHUz0iJFskMV1fTFRfTERGTEFHUyAtdmVyc2lvbi1pbmZvICRbJDFdX0xJQlZFUlNJT04iCi0gIGlmIHRlc3QgISAteiAiWyQ1XSIKLSAgdGhlbgotICAgIFskMV1fTFRfTERGTEFHUz0iJFskMV1fTFRfTERGTEFHUyAtcmVsZWFzZSBbJDVdIgotICBmaQotICBBQ19TVUJTVChbJDFdX0xUX0xERkxBR1MpCi0KLSAgTFRfUFJFUkVRKFsyLjIuNl0pCi0gIExUX0lOSVQoW2Rsb3BlbiB3aW4zMi1kbGwgZGlzYWJsZS1zdGF0aWNdKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy1weXRob24ubTQgYi9jb21tb24vbTQvYXMtcHl0aG9uLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjliMTc1Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9hcy1weXRob24ubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIyBQeXRob24gZmlsZSBoYW5kbGluZwotIyMgRnJvbSBBbmRyZXcgRGFsa2UKLSMjIFVwZGF0ZWQgYnkgSmFtZXMgSGVuc3RyaWRnZQotIyMgVXBkYXRlZCBieSBBbmR5IFdpbmdvIHRvIGxvb3AgdGhyb3VnaCBwb3NzaWJsZSBweXRob25zCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBBU19QQVRIX1BZVEhPTihbTUlOSU1VTS1WRVJTSU9OXSkKLQotIyBBZGRzIHN1cHBvcnQgZm9yIGRpc3RyaWJ1dGluZyBQeXRob24gbW9kdWxlcyBhbmQgcGFja2FnZXMuICBUbwotIyBpbnN0YWxsIG1vZHVsZXMsIGNvcHkgdGhlbSB0byAkKHB5dGhvbmRpciksIHVzaW5nIHRoZSBweXRob25fUFlUSE9OCi0jIGF1dG9tYWtlIHZhcmlhYmxlLiAgVG8gaW5zdGFsbCBhIHBhY2thZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZQotIyBhdXRvbWFrZSBwYWNrYWdlLCBpbnN0YWxsIHRvICQocGtncHl0aG9uZGlyKSwgb3IgdXNlIHRoZQotIyBwa2dweXRob25fUFlUSE9OIGF1dG9tYWtlIHZhcmlhYmxlLgotCi0jIFRoZSB2YXJpYWJsZXMgJChweWV4ZWNkaXIpIGFuZCAkKHBrZ3B5ZXhlY2RpcikgYXJlIHByb3ZpZGVkIGFzCi0jIGxvY2F0aW9ucyB0byBpbnN0YWxsIHB5dGhvbiBleHRlbnNpb24gbW9kdWxlcyAoc2hhcmVkIGxpYnJhcmllcykuCi0jIEFub3RoZXIgbWFjcm8gaXMgcmVxdWlyZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgdG8gY29tcGlsZQotIyBleHRlbnNpb24gbW9kdWxlcy4KLQotIyBJZiB5b3VyIHBhY2thZ2UgaXMgY29uZmlndXJlZCB3aXRoIGEgZGlmZmVyZW50IHByZWZpeCB0byBweXRob24sCi0jIHVzZXJzIHdpbGwgaGF2ZSB0byBhZGQgdGhlIGluc3RhbGwgZGlyZWN0b3J5IHRvIHRoZSBQWVRIT05QQVRICi0jIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBjcmVhdGUgYSAucHRoIGZpbGUgKHNlZSB0aGUgcHl0aG9uCi0jIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMpLgotCi0jIElmIHRoZSBNSU5JTVVNLVZFUlNJT04gYXJndW1lbnQgaXMgcGFzc2VkLCBBU19QQVRIX1BZVEhPTiB3aWxsCi0jIGNhdXNlIGFuIGVycm9yIGlmIHRoZSB2ZXJzaW9uIG9mIHB5dGhvbiBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbQotIyBkb2Vzbid0IG1lZXQgdGhlIHJlcXVpcmVtZW50LiAgTUlOSU1VTS1WRVJTSU9OIHNob3VsZCBjb25zaXN0IG9mCi0jIG51bWJlcnMgYW5kIGRvdHMgb25seS4KLQotIyBVcGRhdGVkIHRvIGxvb3Agb3ZlciBhbGwgcG9zc2libGUgcHl0aG9uIGJpbmFyaWVzIGJ5IEFuZHkgV2luZ28KLSMgPHdpbmdvQHBvYm94LmNvbT4KLSMgVXBkYXRlZCB0byBvbmx5IHdhcm4gYW5kIHVuc2V0IFBZVEhPTiBpZiBubyBnb29kIG9uZSBpcyBmb3VuZAotCi1BQ19ERUZVTihbQVNfUEFUSF9QWVRIT05dLAotIFsKLSAgZG5sIEZpbmQgYSB2ZXJzaW9uIG9mIFB5dGhvbi4gIEkgY291bGQgY2hlY2sgZm9yIHB5dGhvbiB2ZXJzaW9ucyAxLjQKLSAgZG5sIG9yIGVhcmxpZXIsIGJ1dCB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gbG9jYXRpb25zIGNoYW5nZWQgZnJvbQotICBkbmwgJHByZWZpeC9saWIvc2l0ZS1weXRob24gaW4gMS40IHRvICRwcmVmaXgvbGliL3B5dGhvbjEuNS9zaXRlLXBhY2thZ2VzCi0gIGRubCBpbiAxLjUsIGFuZCBJIGRvbid0IHdhbnQgdG8gbWFpbnRhaW4gdGhhdCBsb2dpYy4KLQotICBkbmwgc2hvdWxkIHdlIGRvIHRoZSB2ZXJzaW9uIGNoZWNrPwotICBQWVRIT05fQ0FORElEQVRFUz0icHl0aG9uIHB5dGhvbjIuMiBweXRob24yLjEgcHl0aG9uMi4wIHB5dGhvbjIgXAotICAgICAgICAgICAgICAgICAgICAgcHl0aG9uMS42IHB5dGhvbjEuNSIKLSAgaWZlbHNlKFskMV0sW10sCi0gICAgICAgICBbQUNfUEFUSF9QUk9HKFBZVEhPTiwgJFBZVEhPTl9DQU5ESURBVEVTKV0sCi0gICAgICAgICBbCi0gICAgIEFDX01TR19OT1RJQ0UoTG9va2luZyBmb3IgUHl0aG9uIHZlcnNpb24gPj0gJDEpCi0gICAgY2hhbmdlcXVvdGUoPDwsID4+KWRubAotICAgIHByb2c9IgotaW1wb3J0IHN5cywgc3RyaW5nCi1taW52ZXIgPSAnJDEnCi0jIHNwbGl0IHN0cmluZyBieSAnLicgYW5kIGNvbnZlcnQgdG8gbnVtZXJpYwotbWludmVyX2luZm8gPSBtYXAoc3RyaW5nLmF0b2ksIHN0cmluZy5zcGxpdChtaW52ZXIsICcuJykpCi0jIHdlIGNhbiBub3cgZG8gY29tcGFyaXNvbnMgb24gdGhlIHR3byBsaXN0czoKLWlmIHN5cy52ZXJzaW9uX2luZm8gPj0gdHVwbGUobWludmVyX2luZm8pOgotCXN5cy5leGl0KDApCi1lbHNlOgotCXN5cy5leGl0KDEpIgotICAgIGNoYW5nZXF1b3RlKFssIF0pZG5sCi0KLSAgICBweXRob25fZ29vZD1mYWxzZQotICAgIGZvciBweXRob25fY2FuZGlkYXRlIGluICRQWVRIT05fQ0FORElEQVRFUzsgZG8KLSAgICAgIHVuc2V0IFBZVEhPTgotICAgICAgQUNfUEFUSF9QUk9HKFBZVEhPTiwgJHB5dGhvbl9jYW5kaWRhdGUpIDE+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwKLQotICAgICAgaWYgdGVzdCAieCRQWVRIT04iID0gIngiOyB0aGVuIGNvbnRpbnVlOyBmaQotCi0gICAgICBpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mQUNfRkRfQ0MgMj4mQUNfRkRfQ0M7IHRoZW4KLSAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFsiJFBZVEhPTiI6XSkKLQlBQ19NU0dfUkVTVUxUKFtva2F5XSkKLSAgICAgICAgcHl0aG9uX2dvb2Q9dHJ1ZQotICAgICAgICBicmVhazsKLSAgICAgIGVsc2UKLSAgICAgICAgZG5sIGNsZWFyIHRoZSBjYWNoZSB2YWwKLSAgICAgICAgdW5zZXQgYWNfY3ZfcGF0aF9QWVRIT04KLSAgICAgIGZpCi0gICAgZG9uZQotICBdKQotCi0gIGlmIHRlc3QgIiRweXRob25fZ29vZCIgIT0gInRydWUiOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oW05vIHN1aXRhYmxlIHZlcnNpb24gb2YgcHl0aG9uIGZvdW5kXSkKLSAgICBQWVRIT049Ci0gIGVsc2UKLQotICBBQ19NU0dfQ0hFQ0tJTkcoW2xvY2FsIFB5dGhvbiBjb25maWd1cmF0aW9uXSkKLQotICBkbmwgUXVlcnkgUHl0aG9uIGZvciBpdHMgdmVyc2lvbiBudW1iZXIuICBHZXR0aW5nIFs6M10gc2VlbXMgdG8gYmUKLSAgZG5sIHRoZSBiZXN0IHdheSB0byBkbyB0aGlzOyBpdCdzIHdoYXQgInNpdGUucHkiIGRvZXMgaW4gdGhlIHN0YW5kYXJkCi0gIGRubCBsaWJyYXJ5LiAgTmVlZCB0byBjaGFuZ2UgcXVvdGUgY2hhcmFjdGVyIGJlY2F1c2Ugb2YgWzozXQotCi0gIEFDX1NVQlNUKFBZVEhPTl9WRVJTSU9OKQotICBjaGFuZ2VxdW90ZSg8PCwgPj4pZG5sCi0gIFBZVEhPTl9WRVJTSU9OPWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMudmVyc2lvbls6M10iYAotICBjaGFuZ2VxdW90ZShbLCBdKWRubAotCi0KLSAgZG5sIFVzZSB0aGUgdmFsdWVzIG9mICRwcmVmaXggYW5kICRleGVjX3ByZWZpeCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKLSAgZG5sIHZhbHVlcyBvZiBQWVRIT05fUFJFRklYIGFuZCBQWVRIT05fRVhFQ19QUkVGSVguICBUaGVzZSBhcmUgbWFkZQotICBkbmwgZGlzdGluY3QgdmFyaWFibGVzIHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gaWYgbmVlZCBiZS4gIEhvd2V2ZXIsCi0gIGRubCBnZW5lcmFsIGNvbnNlbnN1cyBpcyB0aGF0IHlvdSBzaG91bGRuJ3QgbmVlZCB0aGlzIGFiaWxpdHkuCi0KLSAgQUNfU1VCU1QoUFlUSE9OX1BSRUZJWCkKLSAgUFlUSE9OX1BSRUZJWD0nJHtwcmVmaXh9JwotCi0gIEFDX1NVQlNUKFBZVEhPTl9FWEVDX1BSRUZJWCkKLSAgUFlUSE9OX0VYRUNfUFJFRklYPScke2V4ZWNfcHJlZml4fScKLQotICBkbmwgQXQgdGltZXMgKGxpa2Ugd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKSB5b3UgbWF5IHdhbnQKLSAgZG5sIHRvIGtub3cgd2hpY2ggT1MgcGxhdGZvcm0gUHl0aG9uIHRoaW5rcyB0aGlzIGlzLgotCi0gIEFDX1NVQlNUKFBZVEhPTl9QTEFURk9STSkKLSAgUFlUSE9OX1BMQVRGT1JNPWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMucGxhdGZvcm0iYAotCi0KLSAgZG5sIFNldCB1cCA0IGRpcmVjdG9yaWVzOgotCi0gIGRubCBweXRob25kaXIgLS0gd2hlcmUgdG8gaW5zdGFsbCBweXRob24gc2NyaXB0cy4gIFRoaXMgaXMgdGhlCi0gIGRubCAgIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LCBub3QgdGhlIHB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5Ci0gIGRubCAgIGRpcmVjdG9yeSBsaWtlIGluIHByZXZpb3VzIGF1dG9tYWtlIGJldGFzLiAgVGhpcyBiZWhhdmlvdXIKLSAgZG5sICAgaXMgbW9yZSBjb25zaXN0ZW50IHdpdGggbGlzcGRpci5tNCBmb3IgZXhhbXBsZS4KLSAgZG5sCi0gIGRubCBBbHNvLCBpZiB0aGUgcGFja2FnZSBwcmVmaXggaXNuJ3QgdGhlIHNhbWUgYXMgcHl0aG9uJ3MgcHJlZml4LAotICBkbmwgdGhlbiB0aGUgb2xkICQocHl0aG9uZGlyKSB3YXMgcHJldHR5IHVzZWxlc3MuCi0KLSAgQUNfU1VCU1QocHl0aG9uZGlyKQotICBweXRob25kaXI9JFBZVEhPTl9QUkVGSVgiL2xpYi9weXRob24iJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKLQotICBkbmwgcGtncHl0aG9uZGlyIC0tICRQQUNLQUdFIGRpcmVjdG9yeSB1bmRlciBweXRob25kaXIuICBXYXMKLSAgZG5sICAgUFlUSE9OX1NJVEVfUEFDS0FHRSBpbiBwcmV2aW91cyBiZXRhcywgYnV0IHRoaXMgbmFtaW5nIGlzCi0gIGRubCAgIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIGF1dG9tYWtlLgotICBkbmwgICBNYXliZSB0aGlzIHNob3VsZCBiZSBwdXQgaW4gcHl0aG9uLmFtPwotCi0gIEFDX1NVQlNUKHBrZ3B5dGhvbmRpcikKLSAgcGtncHl0aG9uZGlyPVwke3B5dGhvbmRpcn0vJFBBQ0tBR0UKLQotICBkbmwgcHlleGVjZGlyIC0tIGRpcmVjdG9yeSBmb3IgaW5zdGFsbGluZyBweXRob24gZXh0ZW5zaW9uIG1vZHVsZXMKLSAgZG5sICAgKHNoYXJlZCBsaWJyYXJpZXMpICBXYXMgUFlUSE9OX1NJVEVfRVhFQyBpbiBwcmV2aW91cyBiZXRhcy4KLQotICBBQ19TVUJTVChweWV4ZWNkaXIpCi0gIHB5ZXhlY2Rpcj0kUFlUSE9OX0VYRUNfUFJFRklYIi9saWIvcHl0aG9uIiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCi0KLSAgZG5sIHBrZ3B5ZXhlY2RpciAtLSAkKHB5ZXhlY2RpcikvJChQQUNLQUdFKQotICBkbmwgICBNYXliZSB0aGlzIHNob3VsZCBiZSBwdXQgaW4gcHl0aG9uLmFtPwotCi0gIEFDX1NVQlNUKHBrZ3B5ZXhlY2RpcikKLSAgcGtncHlleGVjZGlyPVwke3B5ZXhlY2Rpcn0vJFBBQ0tBR0UKLQotICBBQ19NU0dfUkVTVUxUKFtsb29rcyBnb29kXSkKLQotICBmaQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IGIvY29tbW9uL200L2FzLXZlcnNpb24ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZmY3NzQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2FzLXZlcnNpb24ubTQKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi1kbmwgYXMtdmVyc2lvbi5tNCAwLjIuMAotCi1kbmwgYXV0b3N0YXJzIG00IG1hY3JvIGZvciB2ZXJzaW9uaW5nCi0KLWRubCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLWRubCAkSWQ6IGFzLXZlcnNpb24ubTQsdiAxLjE1IDIwMDYvMDQvMDEgMDk6NDA6MjQgdGhvbWFzdnMgRXhwICQKLQotZG5sIEFTX1ZFUlNJT04KLQotZG5sIGV4YW1wbGUKLWRubCBBU19WRVJTSU9OCi0KLWRubCB0aGlzIG1hY3JvCi1kbmwgLSBBQ19TVUJTVCdzIFBBQ0tBR0VfVkVSU0lPTl9NQUpPUiwgX01JTk9SLCBfTUlDUk8KLWRubCAtIEFDX1NVQlNUJ3MgUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UsCi1kbmwgICAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHJwbSByZWxlYXNlIGZpZWxkcwotZG5sIC0gZG9lc24ndCBjYWxsIEFNX0lOSVRfQVVUT01BS0UgYW55bW9yZSBiZWNhdXNlIGl0IHByZXZlbnRzCi1kbmwgICBtYWludGFpbmVyIG1vZGUgZnJvbSBydW5uaW5nIGNvcnJlY3RseQotZG5sCi1kbmwgZG9uJ3QgZm9yZ2V0IHRvIHB1dCAjdW5kZWYgUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgaW4gYWNjb25maWcuaAotZG5sIGlmIHlvdSB1c2UgYWNjb25maWcuaAotCi1BQ19ERUZVTihbQVNfVkVSU0lPTl0sCi1bCi0gIFBBQ0tBR0VfVkVSU0lPTl9NQUpPUj0kKGVjaG8gQUNfUEFDS0FHRV9WRVJTSU9OIHwgY3V0IC1kJy4nIC1mMSkKLSAgUEFDS0FHRV9WRVJTSU9OX01JTk9SPSQoZWNobyBBQ19QQUNLQUdFX1ZFUlNJT04gfCBjdXQgLWQnLicgLWYyKQotICBQQUNLQUdFX1ZFUlNJT05fTUlDUk89JChlY2hvIEFDX1BBQ0tBR0VfVkVSU0lPTiB8IGN1dCAtZCcuJyAtZjMpCi0KLSAgQUNfU1VCU1QoUEFDS0FHRV9WRVJTSU9OX01BSk9SKQotICBBQ19TVUJTVChQQUNLQUdFX1ZFUlNJT05fTUlOT1IpCi0gIEFDX1NVQlNUKFBBQ0tBR0VfVkVSU0lPTl9NSUNSTykKLV0pCi0KLWRubCBBU19OQU5PKEFDVElPTi1JRi1OQU5PLU5PTi1OVUxMLCBbQUNUSU9OLUlGLU5BTk8tTlVMTF0pCi0KLWRubCByZXF1aXJlcyBBQ19JTklUIHRvIGJlIGNhbGxlZCBiZWZvcmUKLWRubCBGb3IgcHJvamVjdHMgdXNpbmcgYSBmb3VydGggb3IgbmFubyBudW1iZXIgaW4geW91ciB2ZXJzaW9uaW5nIHRvIGluZGljYXRlCi1kbmwgZGV2ZWxvcG1lbnQgb3IgcHJlcmVsZWFzZSBzbmFwc2hvdHMsIHRoaXMgbWFjcm8gYWxsb3dzIHRoZSBidWlsZCB0byBiZQotZG5sIHNldCB1cCBkaWZmZXJlbnRseSBhY2NvcmRpbmdseS4KLQotZG5sIHRoaXMgbWFjcm86Ci1kbmwgLSBwYXJzZXMgQUNfUEFDS0FHRV9WRVJTSU9OLCBzZXQgYnkgQUNfSU5JVCwgYW5kIGV4dHJhY3RzIHRoZSBuYW5vIG51bWJlcgotZG5sIC0gc2V0cyB0aGUgdmFyaWFibGUgUEFDS0FHRV9WRVJTSU9OX05BTk8KLWRubCAtIHNldHMgdGhlIHZhcmlhYmxlIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFLCB3aGljaCBjYW4gYmUgdXNlZAotZG5sICAgZm9yIHJwbSByZWxlYXNlIGZpZWxkcwotZG5sIC0gZXhlY3V0ZXMgQUNUSU9OLUlGLU5BTk8tTk9OLU5VTEwgb3IgQUNUSU9OLUlGLU5BTk8tTlVMTAotCi1kbmwgZXhhbXBsZToKLWRubCBBU19OQU5PKFJFTEVBU0U9InllcyIsIFJFTEVBU0U9Im5vIikKLQotQUNfREVGVU4oW0FTX05BTk9dLAotWwotICBBQ19NU0dfQ0hFQ0tJTkcobmFubyB2ZXJzaW9uKQotCi0gIE5BTk89JChlY2hvIEFDX1BBQ0tBR0VfVkVSU0lPTiB8IGN1dCAtZCcuJyAtZjQpCi0KLSAgaWYgdGVzdCB4IiROQU5PIiA9IHggfHwgdGVzdCAieCROQU5PIiA9ICJ4MCIgOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChbMCAocmVsZWFzZSldKQotICAgIE5BTk89MAotICAgIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFPTEKLSAgICBpZmVsc2UoWyQxXSwgLCA6LCBbJDFdKQotICBlbHNlCi0gICAgQUNfTVNHX1JFU1VMVCgkTkFOTykKLSAgICBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRT0wLmBkYXRlICslWSVtJWQuJUglTSVTYAotICAgIGlmIHRlc3QgIngkTkFOTyIgIT0gIngxIiA7IHRoZW4KLSAgICAgICBpZmVsc2UoWyQxXSwgLCA6LCBbJDFdKQotICAgIGVsc2UKLSAgICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICAgIGZpCi0gIGZpCi0gIFBBQ0tBR0VfVkVSU0lPTl9OQU5PPSROQU5PCi0gIEFDX1NVQlNUKFBBQ0tBR0VfVkVSU0lPTl9OQU5PKQotICBBQ19TVUJTVChQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IGIvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNiZjY5OS4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00CisrKyAvZGV2L251bGwKQEAgLTEsNzM0ICswLDAgQEAKLSMjIyMjIGh0dHA6Ly9hdXRvY29uZi1hcmNoaXZlLmNyeXAudG8vYXhfY3JlYXRlX3N0ZGludF9oLmh0bWwKLSMKLSMgU1lOT1BTSVMKLSMKLSMgICBBWF9DUkVBVEVfU1RESU5UX0ggWyggSEVBREVSLVRPLUdFTkVSQVRFIFssIEhFREVSUy1UTy1DSEVDS10pXQotIwotIyBERVNDUklQVElPTgotIwotIyAgIHRoZSAiSVNPIEM5WDogNy4xOCBJbnRlZ2VyIHR5cGVzIDxzdGRpbnQuaD4iIHNlY3Rpb24gcmVxdWlyZXMgdGhlCi0jICAgZXhpc3RlbmNlIG9mIGFuIGluY2x1ZGUgZmlsZSA8c3RkaW50Lmg+IHRoYXQgZGVmaW5lcyBhIHNldCBvZgotIyAgIHR5cGVkZWZzLCBlc3BlY2lhbGx5IHVpbnQ4X3QsaW50MzJfdCx1aW50cHRyX3QuIE1hbnkgb2xkZXIKLSMgICBpbnN0YWxsYXRpb25zIHdpbGwgbm90IHByb3ZpZGUgdGhpcyBmaWxlLCBidXQgc29tZSB3aWxsIGhhdmUgdGhlCi0jICAgdmVyeSBzYW1lIGRlZmluaXRpb25zIGluIDxpbnR0eXBlcy5oPi4gSW4gb3RoZXIgZW52aXJvbWVudHMgd2UgY2FuCi0jICAgdXNlIHRoZSBpbmV0LXR5cGVzIGluIDxzeXMvdHlwZXMuaD4gd2hpY2ggd291bGQgZGVmaW5lIHRoZSB0eXBlZGVmcwotIyAgIGludDhfdCBhbmQgdV9pbnQ4X3QgcmVzcGVjdGl2bHkuCi0jCi0jICAgVGhpcyBtYWNyb3Mgd2lsbCBjcmVhdGUgYSBsb2NhbCAiX3N0ZGludC5oIiBvciB0aGUgaGVhZGVyZmlsZSBnaXZlbgotIyAgIGFzIGFuIGFyZ3VtZW50LiBJbiBtYW55IGNhc2VzIHRoYXQgZmlsZSB3aWxsIGp1c3QgIiNpbmNsdWRlCi0jICAgPHN0ZGludC5oPiIgb3IgIiNpbmNsdWRlIDxpbnR0eXBlcy5oPiIsIHdoaWxlIGluIG90aGVyIGVudmlyb25tZW50cwotIyAgIGl0IHdpbGwgcHJvdmlkZSB0aGUgc2V0IG9mIGJhc2ljICdzdGRpbnQncyBkZWZpbml0aW9ucy90eXBlZGVmczoKLSMKLSMgICAgIGludDhfdCx1aW50OF90LGludDE2X3QsdWludDE2X3QsaW50MzJfdCx1aW50MzJfdCxpbnRwdHJfdCx1aW50cHRyX3QKLSMgICAgIGludF9sZWFzdDMyX3QuLiBpbnRfZmFzdDMyX3QuLiBpbnRtYXhfdAotIwotIyAgIHdoaWNoIG1heSBvciBtYXkgbm90IHJlbHkgb24gdGhlIGRlZmluaXRpb25zIG9mIG90aGVyIGZpbGVzLCBvcgotIyAgIHVzaW5nIHRoZSBBQ19DSEVDS19TSVpFT0YgbWFjcm8gdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgc2l6ZW9mIGVhY2gKLSMgICB0eXBlLgotIwotIyAgIGlmIHlvdXIgaGVhZGVyIGZpbGVzIHJlcXVpcmUgdGhlIHN0ZGludC10eXBlcyB5b3Ugd2lsbCB3YW50IHRvCi0jICAgY3JlYXRlIGFuIGluc3RhbGxhYmxlIGZpbGUgbXlsaWItaW50LmggdGhhdCBhbGwgeW91ciBvdGhlcgotIyAgIGluc3RhbGxhYmxlIGhlYWRlciBtYXkgaW5jbHVkZS4gU28gaWYgeW91IGhhdmUgYSBsaWJyYXJ5IHBhY2thZ2UKLSMgICBuYW1lZCAibXlsaWIiLCBqdXN0IHVzZQotIwotIyAgICAgICAgQVhfQ1JFQVRFX1NURElOVF9IKG15bGliLWludC5oKQotIwotIyAgIGluIGNvbmZpZ3VyZS5hYyBhbmQgZ28gdG8gaW5zdGFsbCB0aGF0IHZlcnkgaGVhZGVyIGZpbGUgaW4KLSMgICBNYWtlZmlsZS5hbSBhbG9uZyB3aXRoIHRoZSBvdGhlciBoZWFkZXJzIChteWxpYi5oKSAtIGFuZCB0aGUKLSMgICBteWxpYi1zcGVjaWZpYyBoZWFkZXJzIGNhbiBzaW1wbHkgdXNlICIjaW5jbHVkZSA8bXlsaWItaW50Lmg+IiB0bwotIyAgIG9idGFpbiB0aGUgc3RkaW50LXR5cGVzLgotIwotIyAgIFJlbWVtYmVyLCBpZiB0aGUgc3lzdGVtIGFscmVhZHkgaGFkIGEgdmFsaWQgPHN0ZGludC5oPiwgdGhlCi0jICAgZ2VuZXJhdGVkIGZpbGUgd2lsbCBpbmNsdWRlIGl0IGRpcmVjdGx5LiBObyBuZWVkIGZvciBmdXp6eQotIyAgIEhBVkVfU1RESU5UX0ggdGhpbmdzLi4uIChvb3BzLCBHQ0MgNC4yLnggaGFzIGRlbGliZXJhdGx5IGRpc2FibGVkCi0jICAgaXRzIHN0ZGludC5oIGZvciBub24tYzk5IGNvbXBpbGF0aW9uIGFuZCB0aGUgYzk5LW1vZGUgaXMgbm90IHRoZQotIyAgIGRlZmF1bHQuIFRoZXJlZm9yZSB0aGlzIG1hY3JvIHdpbGwgbm90IHVzZSB0aGUgY29tcGlsZXIncyBzdGRpbnQuaAotIyAgIC0gcGxlYXNlIGNvbXBsYWluIHRvIHRoZSBHQ0MgZGV2ZWxvcGVycykuCi0jCi0jIExBU1QgTU9ESUZJQ0FUSU9OCi0jCi0jICAgMjAwNy0wNi0yNwotIwotIyBDT1BZTEVGVAotIwotIyAgIENvcHlyaWdodCAoYykgMjAwNyBHdWlkbyBVLiBEcmFoZWltIDxndWlkb2RAZ214LmRlPgotIwotIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQotIyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0jICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKLSMgICAwMjExMS0xMzA3LCBVU0EuCi0jCi0jICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHJlc3BlY3RpdmUgQXV0b2NvbmYgTWFjcm8ncyBjb3B5cmlnaHQKLSMgICBvd25lciBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlCi0jICAgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcKLSMgICB0aGUgTWFjcm8uIFlvdSBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSMgICBMaWNlbnNlIHdoZW4gdXNpbmcgb3IgZGlzdHJpYnV0aW5nIHN1Y2ggc2NyaXB0cywgZXZlbiB0aG91Z2gKLSMgICBwb3J0aW9ucyBvZiB0aGUgdGV4dCBvZiB0aGUgTWFjcm8gYXBwZWFyIGluIHRoZW0uIFRoZSBHTlUgR2VuZXJhbAotIyAgIFB1YmxpYyBMaWNlbnNlIChHUEwpIGRvZXMgZ292ZXJuIGFsbCBvdGhlciB1c2Ugb2YgdGhlIG1hdGVyaWFsIHRoYXQKLSMgICBjb25zdGl0dXRlcyB0aGUgQXV0b2NvbmYgTWFjcm8uCi0jCi0jICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIGFwcGxpZXMgdG8gdmVyc2lvbnMgb2YgdGhlCi0jICAgQXV0b2NvbmYgTWFjcm8gcmVsZWFzZWQgYnkgdGhlIEF1dG9jb25mIE1hY3JvIEFyY2hpdmUuIFdoZW4geW91Ci0jICAgbWFrZSBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UKLSMgICBtYXkgZXh0ZW5kIHRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCB0byBhcHBseSB0byB5b3VyCi0jICAgbW9kaWZpZWQgdmVyc2lvbiBhcyB3ZWxsLgotCi1BQ19ERUZVTihbQVhfQ0hFQ0tfREFUQV9NT0RFTF0sWwotICAgQUNfQ0hFQ0tfU0laRU9GKGNoYXIpCi0gICBBQ19DSEVDS19TSVpFT0Yoc2hvcnQpCi0gICBBQ19DSEVDS19TSVpFT0YoaW50KQotICAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCi0gICBBQ19DSEVDS19TSVpFT0Yodm9pZCopCi0gICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiIKLSAgIGFjX2N2X2NoYXJfZGF0YV9tb2RlbD0iJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCRhY19jdl9zaXplb2ZfY2hhciIKLSAgIGFjX2N2X2NoYXJfZGF0YV9tb2RlbD0iJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCRhY19jdl9zaXplb2Zfc2hvcnQiCi0gICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX2ludCIKLSAgIGFjX2N2X2xvbmdfZGF0YV9tb2RlbD0iIgotICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9pbnQiCi0gICBhY19jdl9sb25nX2RhdGFfbW9kZWw9IiRhY19jdl9sb25nX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX2xvbmciCi0gICBhY19jdl9sb25nX2RhdGFfbW9kZWw9IiRhY19jdl9sb25nX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX3ZvaWRwIgotICAgQUNfTVNHX0NIRUNLSU5HKFtkYXRhIG1vZGVsXSkKLSAgIGNhc2UgIiRhY19jdl9jaGFyX2RhdGFfbW9kZWwvJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCIgaW4KLSAgICAxMjIvMjQyKSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iSVAxNiIgIDsgbj0ic3RhbmRhcmQgMTZiaXQgbWFjaGluZSIgOzsKLSAgICAxMjIvMjQ0KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iTFAzMiIgIDsgbj0ic3RhbmRhcmQgMzJiaXQgbWFjaGluZSIgOzsKLSAgICAxMjIvKikgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaTE2IiAgIDsgbj0idW51c3VhbCBpbnQxNiBtb2RlbCIgOzsKLSAgICAxMjQvNDQ0KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iSUxQMzIiIDsgbj0ic3RhbmRhcmQgMzJiaXQgdW5peGlzaCIgOzsKLSAgICAxMjQvNDg4KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iTFA2NCIgIDsgbj0ic3RhbmRhcmQgNjRiaXQgdW5peGlzaCIgOzsKLSAgICAxMjQvNDQ4KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iTExQNjQiIDsgbj0idW51c3VhbCA2NGJpdCB1bml4aXNoIiA7OwotICAgIDEyNC8qKSAgICAgICBhY19jdl9kYXRhX21vZGVsPSJpMzIiICAgOyBuPSJ1bnVzdWFsIGludDMyIG1vZGVsIiA7OwotICAgIDEyOC84ODgpICAgICBhY19jdl9kYXRhX21vZGVsPSJJTFA2NCIgOyBuPSJ1bnVzdWFsIDY0Yml0IG51bWVyaWMiIDs7Ci0gICAgMTI4LyopICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9Imk2NCIgICA7IG49InVudXN1YWwgaW50NjQgbW9kZWwiIDs7Ci0gICAgMjIyLyoyKSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDE2IiA7IG49InN0cmljdCAxNmJpdCBkc3B0eXBlIiA7OwotICAgIDMzMy8qMykgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1AyNCIgOyBuPSJzdHJpY3QgMjRiaXQgZHNwdHlwZSIgOzsKLSAgICA0NDQvKjQpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQMzIiIDsgbj0ic3RyaWN0IDMyYml0IGRzcHR5cGUiIDs7Ci0gICAgNjY2Lyo2KSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDQ4IiA7IG49InN0cmljdCA0OGJpdCBkc3B0eXBlIiA7OwotICAgIDg4OC8qOCkgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1A2NCIgOyBuPSJzdHJpY3QgNjRiaXQgZHNwdHlwZSIgOzsKLSAgICAyMjIvKnwzMzMvKnw0NDQvKnw2NjYvKnw4ODgvKikgOgotICAgICAgICAgICAgICAgICBhY19jdl9kYXRhX21vZGVsPSJpRFNQIiAgOyBuPSJ1bnVzdWFsIGRzcHR5cGUiIDs7Ci0gICAgICopICAgICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9Im5vbmUiICA7IG49InZlcnkgdW51c3VhbCBtb2RlbCIgOzsKLSAgIGVzYWMKLSAgIEFDX01TR19SRVNVTFQoWyRhY19jdl9kYXRhX21vZGVsICgkYWNfY3ZfbG9uZ19kYXRhX21vZGVsLCAkbildKQotXSkKLQotZG5sIEFYX0NIRUNLX0hFQURFUl9TVERJTlRfWChbSEVBREVSTElTVF1bLEFDVElPTi1JRl0pCi1BQ19ERUZVTihbQVhfQ0hFQ0tfSEVBREVSX1NURElOVF9YXSxbCi1BQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGludCB1aW50cHRyX3RdLCBbYWNfY3ZfaGVhZGVyX3N0ZGludF94XSxbCi0gYWNfY3ZfaGVhZGVyX3N0ZGludF94PSIiICMgdGhlIDE5OTcgdHlwZWRlZnMgKGludHR5cGVzLmgpCi0gIEFDX01TR19SRVNVTFQoWyguLildKQotICBmb3IgaSBpbiBtNF9pZnZhbChbJDFdLFskMV0sW3N0ZGludC5oIGludHR5cGVzLmggc3lzL2ludHR5cGVzLmggc3lzL3R5cGVzLmhdKQotICBkbwotICAgdW5zZXQgYWNfY3ZfdHlwZV91aW50cHRyX3QKLSAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDY0X3QKLSAgIEFDX0NIRUNLX1RZUEUodWludHB0cl90LFthY19jdl9oZWFkZXJfc3RkaW50X3g9JGldLGNvbnRpbnVlLFsjaW5jbHVkZSA8JGk+XSkKLSAgIEFDX0NIRUNLX1RZUEUodWludDY0X3QsW2FuZDY0PSIvdWludDY0X3QiXSxbYW5kNjQ9IiJdLFsjaW5jbHVkZTwkaT5dKQotICAgbTRfaWZ2YWxuKFskMl0sWyQyXSkgYnJlYWsKLSAgZG9uZQotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdGRpbnQgdWludHB0cl90XSkKLSBdKQotXSkKLQotQUNfREVGVU4oW0FYX0NIRUNLX0hFQURFUl9TVERJTlRfT10sWwotQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRpbnQgdWludDMyX3RdLCBbYWNfY3ZfaGVhZGVyX3N0ZGludF9vXSxbCi0gYWNfY3ZfaGVhZGVyX3N0ZGludF9vPSIiICMgdGhlIDE5OTUgdHlwZWRlZnMgKHN5cy9pbnR0eXBlcy5oKQotICBBQ19NU0dfUkVTVUxUKFsoLi4pXSkKLSAgZm9yIGkgaW4gbTRfaWZ2YWwoWyQxXSxbJDFdLFtpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oIHN5cy90eXBlcy5oIHN0ZGludC5oXSkKLSAgZG8KLSAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDMyX3QKLSAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDY0X3QKLSAgIEFDX0NIRUNLX1RZUEUodWludDMyX3QsW2FjX2N2X2hlYWRlcl9zdGRpbnRfbz0kaV0sY29udGludWUsWyNpbmNsdWRlIDwkaT5dKQotICAgQUNfQ0hFQ0tfVFlQRSh1aW50NjRfdCxbYW5kNjQ9Ii91aW50NjRfdCJdLFthbmQ2ND0iIl0sWyNpbmNsdWRlPCRpPl0pCi0gICBtNF9pZnZhbG4oWyQyXSxbJDJdKSBicmVhawotICAgYnJlYWs7Ci0gIGRvbmUKLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3RkaW50IHVpbnQzMl90XSkKLSBdKQotXSkKLQotQUNfREVGVU4oW0FYX0NIRUNLX0hFQURFUl9TVERJTlRfVV0sWwotQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRpbnQgdV9pbnQzMl90XSwgW2FjX2N2X2hlYWRlcl9zdGRpbnRfdV0sWwotIGFjX2N2X2hlYWRlcl9zdGRpbnRfdT0iIiAjIHRoZSBCU0QgdHlwZWRlZnMgKHN5cy90eXBlcy5oKQotICBBQ19NU0dfUkVTVUxUKFsoLi4pXSkKLSAgZm9yIGkgaW4gbTRfaWZ2YWwoWyQxXSxbJDFdLFtzeXMvdHlwZXMuaCBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oXSkgOyBkbwotICAgdW5zZXQgYWNfY3ZfdHlwZV91X2ludDMyX3QKLSAgIHVuc2V0IGFjX2N2X3R5cGVfdV9pbnQ2NF90Ci0gICBBQ19DSEVDS19UWVBFKHVfaW50MzJfdCxbYWNfY3ZfaGVhZGVyX3N0ZGludF91PSRpXSxjb250aW51ZSxbI2luY2x1ZGUgPCRpPl0pCi0gICBBQ19DSEVDS19UWVBFKHVfaW50NjRfdCxbYW5kNjQ9Ii91X2ludDY0X3QiXSxbYW5kNjQ9IiJdLFsjaW5jbHVkZTwkaT5dKQotICAgbTRfaWZ2YWxuKFskMl0sWyQyXSkgYnJlYWsKLSAgIGJyZWFrOwotICBkb25lCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIHN0ZGludCB1X2ludDMyX3RdKQotIF0pCi1dKQotCi1BQ19ERUZVTihbQVhfQ1JFQVRFX1NURElOVF9IXSwKLVsjIC0tLS0tLSBBWCBDUkVBVEUgU1RESU5UIEggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3RkaW50IHR5cGVzXSkKLWFjX3N0ZGludF9oPWBlY2hvIGlmZWxzZSgkMSwgLCBfc3RkaW50LmgsICQxKWAKLSMgdHJ5IHRvIHNob3J0Y2lyY3VpdCAtIGlmIHRoZSBkZWZhdWx0IGluY2x1ZGUgcGF0aCBvZiB0aGUgY29tcGlsZXIKLSMgY2FuIGZpbmQgYSAic3RkaW50LmgiIGhlYWRlciB0aGVuIHdlIGFzc3VtZSB0aGF0IGFsbCBjb21waWxlcnMgY2FuLgotQUNfQ0FDSEVfVkFMKFthY19jdl9oZWFkZXJfc3RkaW50X3RdLFsKLW9sZF9DWFhGTEFHUz0iJENYWEZMQUdTIiA7IENYWEZMQUdTPSIiCi1vbGRfQ1BQRkxBR1M9IiRDUFBGTEFHUyIgOyBDUFBGTEFHUz0iIgotb2xkX0NGTEFHUz0iJENGTEFHUyIgICAgIDsgQ0ZMQUdTPSIiCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGludC5oPl0sW2ludF9sZWFzdDMyX3QgdiA9IDA7XSwKLVthY19jdl9zdGRpbnRfcmVzdWx0PSIoYXNzdW1pbmcgQzk5IGNvbXBhdGlibGUgc3lzdGVtKSIKLSBhY19jdl9oZWFkZXJfc3RkaW50X3Q9InN0ZGludC5oIjsgXSwKLVthY19jdl9oZWFkZXJfc3RkaW50X3Q9IiJdKQotaWYgdGVzdCAiJEdDQyIgPSAieWVzIiAmJiB0ZXN0ICIuJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIgPSAiLiI7IHRoZW4KLUNGTEFHUz0iLXN0ZD1jOTkiCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGludC5oPl0sW2ludF9sZWFzdDMyX3QgdiA9IDA7XSwKLVtBQ19NU0dfV0FSTih5b3VyIEdDQyBjb21waWxlciBoYXMgYSBkZWZ1bmN0IHN0ZGludC5oIGZvciBpdHMgZGVmYXVsdC1tb2RlKV0pCi1maQotQ1hYRkxBR1M9IiRvbGRfQ1hYRkxBR1MiCi1DUFBGTEFHUz0iJG9sZF9DUFBGTEFHUyIKLUNGTEFHUz0iJG9sZF9DRkxBR1MiIF0pCi0KLXY9Ii4uLiAkYWNfY3ZfaGVhZGVyX3N0ZGludF9oIgotaWYgdGVzdCAiJGFjX3N0ZGludF9oIiA9ICJzdGRpbnQuaCIgOyB0aGVuCi0gQUNfTVNHX1JFU1VMVChbKGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0aGVtIGluIC4vc3RkaW50Lmg/KV0pCi1lbGlmIHRlc3QgIiRhY19zdGRpbnRfaCIgPSAiaW50dHlwZXMuaCIgOyB0aGVuCi0gQUNfTVNHX1JFU1VMVChbKGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0aGVtIGluIC4vaW50dHlwZXMuaD8pXSkKLWVsaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3QiID0gIl8iIDsgdGhlbgotIEFDX01TR19SRVNVTFQoWyhwdXR0aW5nIHRoZW0gaW50byAkYWNfc3RkaW50X2gpJHZdKQotZWxzZQotIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X3QiCi0gQUNfTVNHX1JFU1VMVChbJGFjX2N2X2hlYWRlcl9zdGRpbnQgKHNob3J0Y2lyY3VpdCldKQotZmkKLQotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3QiID0gIl8iIDsgdGhlbiAjIGNhbiBub3Qgc2hvcnRjaXJjdWl0Li4KLQotZG5sIC4uLi4uaW50cm8gbWVzc2FnZSBkb25lLCBub3cgZG8gYSBmZXcgc3lzdGVtIGNoZWNrcy4uLi4uCi1kbmwgYnR3LCBhbGwgb2xkIENIRUNLX1RZUEUgbWFjcm9zIGRvIGF1dG9tYXRpY2FsbHkgIkRFRklORSIgYSB0eXBlLAotZG5sIHRoZXJlZm9yZSB3ZSB1c2UgdGhlIGF1dG9jb25mIGltcGxlbWVudGF0aW9uIGRldGFpbCBDSEVDS19UWVBFX05FVwotZG5sIGluc3RlYWQgdGhhdCBpcyB0cmlnZ2VyZWQgd2l0aCAzIG9yIG1vcmUgYXJndW1lbnRzIChzZWUgdHlwZXMubTQpCi0KLWludHR5cGVfaGVhZGVycz1gZWNobyAkMiB8IHNlZCAtZSAncy8sLyAvZydgCi0KLWFjX2N2X3N0ZGludF9yZXN1bHQ9IihubyBoZWxwZnVsIHN5c3RlbSB0eXBlZGVmcyBzZWVuKSIKLUFYX0NIRUNLX0hFQURFUl9TVERJTlRfWChkbmwKLSAgIHN0ZGludC5oIGludHR5cGVzLmggc3lzL2ludHR5cGVzLmggJGludHR5cGVfaGVhZGVycywKLSAgIGFjX2N2X3N0ZGludF9yZXN1bHQ9IihzZWVuIHVpbnRwdHJfdCRhbmQ2NCBpbiAkaSkiKQotCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPSAiXyIgOyB0aGVuCi1BWF9DSEVDS19IRUFERVJfU1RESU5UX08oZG5sLAotICAgaW50dHlwZXMuaCBzeXMvaW50dHlwZXMuaCBzdGRpbnQuaCAkaW50dHlwZV9oZWFkZXJzLAotICAgYWNfY3Zfc3RkaW50X3Jlc3VsdD0iKHNlZW4gdWludDMyX3QkYW5kNjQgaW4gJGkpIikKLWZpCi0KLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiA9ICJfIiA7IHRoZW4KLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF9vIiA9ICJfIiA7IHRoZW4KLUFYX0NIRUNLX0hFQURFUl9TVERJTlRfVShkbmwsCi0gICBzeXMvdHlwZXMuaCBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oICRpbnR0eXBlX2hlYWRlcnMsCi0gICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoc2VlbiB1X2ludDMyX3QkYW5kNjQgaW4gJGkpIikKLWZpIGZpCi0KLWRubCBpZiB0aGVyZSB3YXMgbm8gZ29vZCBDOTkgaGVhZGVyIGZpbGUsIGRvIHNvbWUgdHlwZWRlZiBjaGVja3MuLi4KLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiA9ICJfIiA7IHRoZW4KLSAgIEFDX01TR19DSEVDS0lORyhbZm9yIHN0ZGludCBkYXRhdHlwZSBtb2RlbF0pCi0gICBBQ19NU0dfUkVTVUxUKFsoLi4pXSkKLSAgIEFYX0NIRUNLX0RBVEFfTU9ERUwKLWZpCi0KLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiAhPSAiXyIgOyB0aGVuCi0gICBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF94IgotZWxpZiAgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X28iICE9ICJfIiA7IHRoZW4KLSAgIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X28iCi1lbGlmICB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIgIT0gIl8iIDsgdGhlbgotICAgYWNfY3ZfaGVhZGVyX3N0ZGludD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIKLWVsc2UKLSAgIGFjX2N2X2hlYWRlcl9zdGRpbnQ9InN0ZGRlZi5oIgotZmkKLQotQUNfTVNHX0NIRUNLSU5HKFtmb3IgZXh0cmEgaW50dHlwZXMgaW4gY2hvc2VuIGhlYWRlcl0pCi1BQ19NU0dfUkVTVUxUKFsoJGFjX2N2X2hlYWRlcl9zdGRpbnQpXSkKLWRubCBzZWUgaWYgaW50X2xlYXN0IGFuZCBpbnRfZmFzdCB0eXBlcyBhcmUgcHJlc2VudCBpbiBfdGhpc18gaGVhZGVyLgotdW5zZXQgYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90Ci11bnNldCBhY19jdl90eXBlX2ludF9mYXN0MzJfdAotQUNfQ0hFQ0tfVFlQRShpbnRfbGVhc3QzMl90LCwsWyNpbmNsdWRlIDwkYWNfY3ZfaGVhZGVyX3N0ZGludD5dKQotQUNfQ0hFQ0tfVFlQRShpbnRfZmFzdDMyX3QsLCxbI2luY2x1ZGU8JGFjX2N2X2hlYWRlcl9zdGRpbnQ+XSkKLUFDX0NIRUNLX1RZUEUoaW50bWF4X3QsLCxbI2luY2x1ZGUgPCRhY19jdl9oZWFkZXJfc3RkaW50Pl0pCi0KLWZpICMgc2hvcnRjaXJjdXQgdG8gc3lzdGVtICJzdGRpbnQuaCIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tIFBSRVBBUkUgVkFSSUFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaWYgdGVzdCAiJEdDQyIgPSAieWVzIiA7IHRoZW4KLWFjX2N2X3N0ZGludF9tZXNzYWdlPSJ1c2luZyBnbnUgY29tcGlsZXIgImAkQ0MgLS12ZXJzaW9uIHwgaGVhZCAtMWAKLWVsc2UKLWFjX2N2X3N0ZGludF9tZXNzYWdlPSJ1c2luZyAkQ0MiCi1maQotCi1BQ19NU0dfUkVTVUxUKFttYWtlIHVzZSBvZiAkYWNfY3ZfaGVhZGVyX3N0ZGludCBpbiAkYWNfc3RkaW50X2ggZG5sCi0kYWNfY3Zfc3RkaW50X3Jlc3VsdF0pCi0KLWRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAtLS0tLS0tLS0tLS0tLS0tLSBET05FIGludHR5cGVzLmggY2hlY2tzIFNUQVJUIGhlYWRlciAtLS0tLS0tLS0tLS0tCi1BQ19DT05GSUdfQ09NTUFORFMoWyRhY19zdGRpbnRfaF0sWwotQUNfTVNHX05PVElDRShjcmVhdGluZyAkYWNfc3RkaW50X2ggOiAkX2FjX3N0ZGludF9oKQotYWNfc3RkaW50PSR0bXAvX3N0ZGludC5oCi0KLWVjaG8gIiNpZm5kZWYiICRfYWNfc3RkaW50X2ggPiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUiICRfYWNfc3RkaW50X2ggIjEiID4+JGFjX3N0ZGludAotZWNobyAiI2lmbmRlZiIgX0dFTkVSQVRFRF9TVERJTlRfSCA+PiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUiIF9HRU5FUkFURURfU1RESU5UX0ggJyInJFBBQ0tBR0UgJFZFUlNJT04nIicgPj4kYWNfc3RkaW50Ci1lY2hvICIvKiBnZW5lcmF0ZWQgJGFjX2N2X3N0ZGludF9tZXNzYWdlICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF90IiAhPSAiXyIgOyB0aGVuCi1lY2hvICIjZGVmaW5lIF9TVERJTlRfSEFWRV9TVERJTlRfSCIgIjEiID4+JGFjX3N0ZGludAotZWNobyAiI2luY2x1ZGUgPHN0ZGludC5oPiIgPj4kYWNfc3RkaW50Ci1lY2hvICIjZW5kaWYiID4+JGFjX3N0ZGludAotZWNobyAiI2VuZGlmIiA+PiRhY19zdGRpbnQKLWVsc2UKLQotY2F0ID4+JGFjX3N0ZGludCA8PFNURElOVF9FT0YKLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLiBzaG9ydGNpcmN1aXQgcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSCB8fCBkZWZpbmVkIF9TVERJTlRfSEFWRV9TVERJTlRfSAotI2luY2x1ZGUgPHN0ZGludC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4gY29uZmlndXJlZCBwYXJ0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotU1RESU5UX0VPRgotCi1lY2hvICIvKiB3aGV0aGVyIHdlIGhhdmUgYSBDOTkgY29tcGF0aWJsZSBzdGRpbnQgaGVhZGVyIGZpbGUgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3giICE9ICJfIiA7IHRoZW4KLSAgYWNfaGVhZGVyPSIkYWNfY3ZfaGVhZGVyX3N0ZGludF94IgotICBlY2hvICIjZGVmaW5lIF9TVERJTlRfSEVBREVSX0lOVFBUUiIgJyInIiRhY19oZWFkZXIiJyInID4+JGFjX3N0ZGludAotZWxzZQotICBlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IRUFERVJfSU5UUFRSICovIiA+PiRhY19zdGRpbnQKLWZpCi0KLWVjaG8gIi8qIHdoZXRoZXIgd2UgaGF2ZSBhIEM5NiBjb21wYXRpYmxlIGludHR5cGVzIGhlYWRlciBmaWxlICovIiA+PiRhY19zdGRpbnQKLWlmICB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgIT0gIl8iIDsgdGhlbgotICBhY19oZWFkZXI9IiRhY19jdl9oZWFkZXJfc3RkaW50X28iCi0gIGVjaG8gIiNkZWZpbmUgX1NURElOVF9IRUFERVJfVUlOVDMyIiAnIiciJGFjX2hlYWRlciInIicgPj4kYWNfc3RkaW50Ci1lbHNlCi0gIGVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hFQURFUl9VSU5UMzIgKi8iID4+JGFjX3N0ZGludAotZmkKLQotZWNobyAiLyogd2hldGhlciB3ZSBoYXZlIGEgQlNEIGNvbXBhdGlibGUgaW5ldCB0eXBlcyBoZWFkZXIgKi8iID4+JGFjX3N0ZGludAotaWYgIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF91IiAhPSAiXyIgOyB0aGVuCi0gIGFjX2hlYWRlcj0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIKLSAgZWNobyAiI2RlZmluZSBfU1RESU5UX0hFQURFUl9VX0lOVDMyIiAnIiciJGFjX2hlYWRlciInIicgPj4kYWNfc3RkaW50Ci1lbHNlCi0gIGVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hFQURFUl9VX0lOVDMyICovIiA+PiRhY19zdGRpbnQKLWZpCi0KLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWlmIHRlc3QgIl8kYWNfaGVhZGVyIiAhPSAiXyIgOyB0aGVuIGlmIHRlc3QgIiRhY19oZWFkZXIiICE9ICJzdGRkZWYuaCIgOyB0aGVuCi0gIGVjaG8gIiNpbmNsdWRlIDwkYWNfaGVhZGVyPiIgPj4kYWNfc3RkaW50Ci0gIGVjaG8gIiIgPj4kYWNfc3RkaW50Ci1maSBmaQotCi1lY2hvICIvKiB3aGljaCA2NGJpdCB0eXBlZGVmIGhhcyBiZWVuIGZvdW5kICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIiRhY19jdl90eXBlX3VpbnQ2NF90IiA9ICJ5ZXMiIDsgdGhlbgotZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9VSU5UNjRfVCIgIjEiICA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfVUlOVDY0X1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWlmIHRlc3QgIiRhY19jdl90eXBlX3VfaW50NjRfdCIgPSAieWVzIiA7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfVV9JTlQ2NF9UIiAiMSIgID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9VX0lOVDY0X1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWVjaG8gIi8qIHdoaWNoIHR5cGUgbW9kZWwgaGFzIGJlZW4gZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiXyRhY19jdl9jaGFyX2RhdGFfbW9kZWwiICE9ICJfIiA7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0NIQVJfTU9ERUwiICIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsIiA+PiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0xPTkdfTU9ERUwiICIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsIiA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0NIQVJfTU9ERUwgLy8gc2tpcHBlZCAqLyIgPj4kYWNfc3RkaW50Ci1lY2hvICIvKiAjdW5kZWYgX1NURElOVF9MT05HX01PREVMIC8vIHNraXBwZWQgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWVjaG8gIi8qIHdoZXRoZXIgaW50X2xlYXN0IHR5cGVzIHdlcmUgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdCIgPSAieWVzIjsgdGhlbgotZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9JTlRfTEVBU1QzMl9UIiAiMSIgID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9JTlRfTEVBU1QzMl9UICovIiA+PiRhY19zdGRpbnQKLWZpCi1lY2hvICIvKiB3aGV0aGVyIGludF9mYXN0IHR5cGVzIHdlcmUgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50X2Zhc3QzMl90IiA9ICJ5ZXMiOyB0aGVuCi1lY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX0lOVF9GQVNUMzJfVCIgIjEiID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9JTlRfRkFTVDMyX1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIi8qIHdoZXRoZXIgaW50bWF4X3QgdHlwZSB3YXMgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50bWF4X3QiID0gInllcyI7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfSU5UTUFYX1QiICIxIiA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfSU5UTUFYX1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLSAgY2F0ID4+JGFjX3N0ZGludCA8PFNURElOVF9FT0YKLS8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uIGRldGVjdGlvbnMgcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCi0KLS8qIHdoZXRoZXIgd2UgbmVlZCB0byBkZWZpbmUgYml0c3BlY2lmaWMgdHlwZXMgZnJvbSBjb21waWxlciBiYXNlIHR5cGVzICovCi0jaWZuZGVmIF9TVERJTlRfSEVBREVSX0lOVFBUUgotI2lmbmRlZiBfU1RESU5UX0hFQURFUl9VSU5UMzIKLSNpZm5kZWYgX1NURElOVF9IRUFERVJfVV9JTlQzMgotI2RlZmluZSBfU1RESU5UX05FRURfSU5UX01PREVMX1QKLSNlbHNlCi0jZGVmaW5lIF9TVERJTlRfSEFWRV9VX0lOVF9UWVBFUwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX1NURElOVF9IQVZFX1VfSU5UX1RZUEVTCi0jdW5kZWYgX1NURElOVF9ORUVEX0lOVF9NT0RFTF9UCi0jZW5kaWYKLQotI2lmZGVmICBfU1RESU5UX0NIQVJfTU9ERUwKLSNpZiAgICAgX1NURElOVF9DSEFSX01PREVMKzAgPT0gMTIyIHx8IF9TVERJTlRfQ0hBUl9NT0RFTCswID09IDEyNAotI2lmbmRlZiBfU1RESU5UX0JZVEVfTU9ERUwKLSNkZWZpbmUgX1NURElOVF9CWVRFX01PREVMIDEyCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgX1NURElOVF9IQVZFX0lOVF9MRUFTVDMyX1QKLSNkZWZpbmUgX1NURElOVF9ORUVEX0lOVF9MRUFTVF9UCi0jZW5kaWYKLQotI2lmbmRlZiBfU1RESU5UX0hBVkVfSU5UX0ZBU1QzMl9UCi0jZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRfRkFTVF9UCi0jZW5kaWYKLQotI2lmbmRlZiBfU1RESU5UX0hFQURFUl9JTlRQVFIKLSNkZWZpbmUgX1NURElOVF9ORUVEX0lOVFBUUl9UCi0jaWZuZGVmIF9TVERJTlRfSEFWRV9JTlRNQVhfVAotI2RlZmluZSBfU1RESU5UX05FRURfSU5UTUFYX1QKLSNlbmRpZgotI2VuZGlmCi0KLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4gZGVmaW5pdGlvbiBwYXJ0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotLyogc29tZSBzeXN0ZW0gaGVhZGVycyBoYXZlIGdvb2QgdWludDY0X3QgKi8KLSNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKLSNpZiAgICAgZGVmaW5lZCBfU1RESU5UX0hBVkVfVUlOVDY0X1QgIHx8IGRlZmluZWQgSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotI2VsaWYgICBkZWZpbmVkIF9TVERJTlRfSEFWRV9VX0lOVDY0X1QgfHwgZGVmaW5lZCBIQVZFX1VfSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiB1X2ludDY0X3QgdWludDY0X3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIF9IQVZFX1VJTlQ2NF9UCi0vKiAuLiBoZXJlIGFyZSBzb21lIGNvbW1vbiBoZXVyaXN0aWNzIHVzaW5nIGNvbXBpbGVyIHJ1bnRpbWUgc3BlY2lmaWNzICovCi0jaWYgZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCi0jZGVmaW5lIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0KLSNlbGlmICFkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXwotI2lmIGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX1dBVENPTUNfXyB8fCBkZWZpbmVkIF9fQk9STEFORENfXwotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiBfX2ludDY0IGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7Ci0KLSNlbGlmIGRlZmluZWQgX19HTlVDX18gfHwgZGVmaW5lZCBfX01XRVJLU19fIHx8IGRlZmluZWQgX19FTEZfXwotLyogbm90ZTogYWxsIEVMRi1zeXN0ZW1zIHNlZW0gdG8gaGF2ZSBsb2ZmLXN1cHBvcnQgd2hpY2ggbmVlZHMgNjQtYml0ICovCi0jaWYgIWRlZmluZWQgX05PX0xPTkdMT05HCi0jZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCi0jZGVmaW5lIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0jZW5kaWYKLQotI2VsaWYgZGVmaW5lZCBfX2FscGhhIHx8IChkZWZpbmVkIF9fbWlwcyAmJiBkZWZpbmVkIF9BQklOMzIpCi0jaWYgIWRlZmluZWQgX05PX0xPTkdMT05HCi10eXBlZGVmIGxvbmcgaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50NjRfdDsKLSNlbmRpZgotICAvKiBjb21waWxlci9jcHUgdHlwZSB0byBkZWZpbmUgaW50NjRfdCAqLwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBfU1RESU5UX0hBVkVfVV9JTlRfVFlQRVMKLS8qIGludDhfdCBpbnQxNl90IGludDMyX3QgZGVmaW5lZCBieSBpbmV0IGNvZGUsIHJlZGVjbGFyZSB0aGUgdV9pbnRYWCB0eXBlcyAqLwotdHlwZWRlZiB1X2ludDhfdCB1aW50OF90OwotdHlwZWRlZiB1X2ludDE2X3QgdWludDE2X3Q7Ci10eXBlZGVmIHVfaW50MzJfdCB1aW50MzJfdDsKLQotLyogZ2xpYmMgY29tcGF0aWJpbGl0eSAqLwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBfU1RESU5UX05FRURfSU5UX01PREVMX1QKLS8qIHdlIG11c3QgZ3Vlc3MgYWxsIHRoZSBiYXNpYyB0eXBlcy4gQXBhcnQgZnJvbSBieXRlLWFkcmVzc2FibGUgc3lzdGVtLCAqLwotLyogdGhlcmUgYSBmZXcgMzItYml0LW9ubHkgZHNwLXN5c3RlbXMgdGhhdCB3ZSBndWFyZCB3aXRoIEJZVEVfTU9ERUwgOC19ICovCi0vKiAoYnR3LCB0aG9zZSBuaWJibGUtYWRkcmVzc2FibGUgc3lzdGVtcyBhcmUgd2F5IG9mZiwgb3Igc28gd2UgYXNzdW1lKSAqLwotCi1kbmwgICAvKiBoYXZlIGEgbG9vayBhdCAiNjRiaXQgYW5kIGRhdGEgc2l6ZSBuZXV0cmFsaXR5IiBhdCAqLwotZG5sICAgLyogaHR0cDovL3VuaXgub3JnL3ZlcnNpb24yL3doYXRzbmV3L2xvZ2luXzY0Yml0Lmh0bWwgKi8KLWRubCAgIC8qICh0aGUgc2hvcnRoYW5kICJJTFAiIHR5cGVzIGFsd2F5cyBoYXZlIGEgIlAiIHBhcnQpICovCi0KLSNpZiBkZWZpbmVkIF9TVERJTlRfQllURV9NT0RFTAotI2lmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDI0MgotLyogMjo0OjIgPSAgSVAxNiA9IGEgbm9ybWFsIDE2LWJpdCBzeXN0ZW0gICAgICAgICAgICAgICAgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgIHVpbnQ4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIHVpbnQzMl90OwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLXR5cGVkZWYgICAgICAgICAgY2hhciAgICBpbnQ4X3Q7Ci10eXBlZGVmICAgICAgICAgIHNob3J0ICAgaW50MTZfdDsKLXR5cGVkZWYgICAgICAgICAgbG9uZyAgICBpbnQzMl90OwotI2VuZGlmCi0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDQgfHwgX1NURElOVF9MT05HX01PREVMID09IDQ0NAotLyogMjo0OjQgPSAgTFAzMiA9IGEgMzItYml0IHN5c3RlbSBkZXJpdmVkIGZyb20gYSAxNi1iaXQgKi8KLS8qIDQ6NDo0ID0gSUxQMzIgPSBhIG5vcm1hbCAzMi1iaXQgc3lzdGVtICAgICAgICAgICAgICAgICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50MzJfdDsKLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi10eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwotdHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Ci10eXBlZGVmICAgICAgICAgIGludCAgICAgaW50MzJfdDsKLSNlbmRpZgotI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDg0IHx8IF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ4OAotLyogNDo4OjQgPSAgSVAzMiA9IGEgMzItYml0IHN5c3RlbSBwcmVwYXJlZCBmb3IgNjQtYml0ICAgICovCi0vKiA0Ojg6OCA9ICBMUDY0ID0gYSBub3JtYWwgNjQtYml0IHN5c3RlbSAgICAgICAgICAgICAgICAgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgIHVpbnQ4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgIHVpbnQzMl90OwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLXR5cGVkZWYgICAgICAgICAgY2hhciAgICBpbnQ4X3Q7Ci10eXBlZGVmICAgICAgICAgIHNob3J0ICAgaW50MTZfdDsKLXR5cGVkZWYgICAgICAgICAgaW50ICAgICBpbnQzMl90OwotI2VuZGlmCi0vKiB0aGlzIHN5c3RlbSBoYXMgYSAibG9uZyIgb2YgNjRiaXQgKi8KLSNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKLSNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIHVpbnQ2NF90OwotdHlwZWRlZiAgICAgICAgICBsb25nICAgIGludDY0X3Q7Ci0jZW5kaWYKLSNlbGlmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ0OAotLyogICAgICBMTFA2NCAgIGEgNjQtYml0IHN5c3RlbSBkZXJpdmVkIGZyb20gYSAzMi1iaXQgc3lzdGVtICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50MzJfdDsKLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi10eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwotdHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Ci10eXBlZGVmICAgICAgICAgIGludCAgICAgaW50MzJfdDsKLSNlbmRpZgotLyogYXNzdW1pbmcgdGhlIHN5c3RlbSBoYXMgYSAibG9uZyBsb25nIiAqLwotI2lmbmRlZiBfSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci10eXBlZGVmICAgICAgICAgIGxvbmcgbG9uZyAgaW50NjRfdDsKLSNlbmRpZgotI2Vsc2UKLSNkZWZpbmUgX1NURElOVF9OT19JTlQzMl9UCi0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIF9TVERJTlRfTk9fSU5UOF9UCi0jZGVmaW5lIF9TVERJTlRfTk9fSU5UMzJfVAotI2VuZGlmCi0jZW5kaWYKLQotLyoKLSAqIHF1b3RlIGZyb20gU3VuT1MtNS44IHN5cy9pbnR0eXBlcy5oOgotICogVXNlIGF0IHlvdXIgb3duIHJpc2suICBBcyBvZiBGZWJydWFyeSAxOTk2LCB0aGUgY29tbWl0dGVlIGlzIHNxdWFyZWx5Ci0gKiBiZWhpbmQgdGhlIGZpeGVkIHNpemVkIHR5cGVzOyB0aGUgImxlYXN0IiBhbmQgImZhc3QiIHR5cGVzIGFyZSBzdGlsbCBiZWluZwotICogZGlzY3Vzc2VkLiAgVGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlICJmYXN0IiB0eXBlcyBtYXkgYmUgcmVtb3ZlZCBiZWZvcmUKLSAqIHRoZSBzdGFuZGFyZCBpcyBmaW5hbGl6ZWQgaXMgaGlnaCBlbm91Z2ggdGhhdCB0aGV5IGFyZSBub3QgY3VycmVudGx5Ci0gKiBpbXBsZW1lbnRlZC4KLSAqLwotCi0jaWYgZGVmaW5lZCBfU1RESU5UX05FRURfSU5UX0xFQVNUX1QKLXR5cGVkZWYgIGludDhfdCAgICBpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmICBpbnQxNl90ICAgaW50X2xlYXN0MTZfdDsKLXR5cGVkZWYgIGludDMyX3QgICBpbnRfbGVhc3QzMl90OwotI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCi10eXBlZGVmICBpbnQ2NF90ICAgaW50X2xlYXN0NjRfdDsKLSNlbmRpZgotCi10eXBlZGVmIHVpbnQ4X3QgICB1aW50X2xlYXN0OF90OwotdHlwZWRlZiB1aW50MTZfdCAgdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmIHVpbnQzMl90ICB1aW50X2xlYXN0MzJfdDsKLSNpZmRlZiBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiB1aW50NjRfdCAgdWludF9sZWFzdDY0X3Q7Ci0jZW5kaWYKLSAgLyogbGVhc3QgdHlwZXMgKi8KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBfU1RESU5UX05FRURfSU5UX0ZBU1RfVAotdHlwZWRlZiAgaW50OF90ICAgIGludF9mYXN0OF90OwotdHlwZWRlZiAgaW50ICAgICAgIGludF9mYXN0MTZfdDsKLXR5cGVkZWYgIGludDMyX3QgICBpbnRfZmFzdDMyX3Q7Ci0jaWZkZWYgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgIGludDY0X3QgICBpbnRfZmFzdDY0X3Q7Ci0jZW5kaWYKLQotdHlwZWRlZiB1aW50OF90ICAgdWludF9mYXN0OF90OwotdHlwZWRlZiB1bnNpZ25lZCAgdWludF9mYXN0MTZfdDsKLXR5cGVkZWYgdWludDMyX3QgIHVpbnRfZmFzdDMyX3Q7Ci0jaWZkZWYgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgdWludDY0X3QgIHVpbnRfZmFzdDY0X3Q7Ci0jZW5kaWYKLSAgLyogZmFzdCB0eXBlcyAqLwotI2VuZGlmCi0KLSNpZmRlZiBfU1RESU5UX05FRURfSU5UTUFYX1QKLSNpZmRlZiBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiAgaW50NjRfdCAgICAgICBpbnRtYXhfdDsKLXR5cGVkZWYgdWludDY0X3QgICAgICB1aW50bWF4X3Q7Ci0jZWxzZQotdHlwZWRlZiAgICAgICAgICBsb25nICBpbnRtYXhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50bWF4X3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX1NURElOVF9ORUVEX0lOVFBUUl9UCi0jaWZuZGVmIF9faW50cHRyX3RfZGVmaW5lZAotI2RlZmluZSBfX2ludHB0cl90X2RlZmluZWQKLS8qIHdlIGVuY291cmFnZSB1c2luZyAibG9uZyIgdG8gc3RvcmUgcG9pbnRlciB2YWx1ZXMsIG5ldmVyIHVzZSAiaW50IiAhICovCi0jaWYgICBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDIgfHwgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDg0Ci10eXBlZGVmICB1bnNpZ25lZCBpbnQgICB1aW50cHRyX3Q7Ci10eXBlZGVmICAgICAgICAgICBpbnQgICAgaW50cHRyX3Q7Ci0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDQgfHwgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDQ0Ci10eXBlZGVmICB1bnNpZ25lZCBsb25nICB1aW50cHRyX3Q7Ci10eXBlZGVmICAgICAgICAgICBsb25nICAgaW50cHRyX3Q7Ci0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0NDggJiYgZGVmaW5lZCBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiAgICAgICAgdWludDY0X3QgdWludHB0cl90OwotdHlwZWRlZiAgICAgICAgIGludDY0X3QgIGludHB0cl90OwotI2Vsc2UgLyogbWF0Y2hlcyB0eXBpY2FsIHN5c3RlbSB0eXBlcyBJTFAzMiBhbmQgTFA2NCAtIGJ1dCBub3QgSVAxNiBvciBMTFA2NCAqLwotdHlwZWRlZiAgdW5zaWduZWQgbG9uZyAgdWludHB0cl90OwotdHlwZWRlZiAgICAgICAgICAgbG9uZyAgIGludHB0cl90OwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBUaGUgSVNPIEM5OSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBpbiBDKysgaW1wbGVtZW50YXRpb25zIHRoZXNlCi0gICBzaG91bGQgb25seSBiZSBkZWZpbmVkIGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLiAgKi8KLSNpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNpZm5kZWYgVUlOVDMyX0MKLQotLyogU2lnbmVkLiAgKi8KLSMgZGVmaW5lIElOVDhfQyhjKSAgICAgIGMKLSMgZGVmaW5lIElOVDE2X0MoYykgICAgIGMKLSMgZGVmaW5lIElOVDMyX0MoYykgICAgIGMKLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBJTlQ2NF9DKGMpICAgIGMgIyMgTAotIyBlbHNlCi0jICBkZWZpbmUgSU5UNjRfQyhjKSAgICBjICMjIExMCi0jIGVuZGlmCi0KLS8qIFVuc2lnbmVkLiAgKi8KLSMgZGVmaW5lIFVJTlQ4X0MoYykgICAgIGMgIyMgVQotIyBkZWZpbmUgVUlOVDE2X0MoYykgICAgYyAjIyBVCi0jIGRlZmluZSBVSU5UMzJfQyhjKSAgICBjICMjIFUKLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBVSU5UNjRfQyhjKSAgIGMgIyMgVUwKLSMgZWxzZQotIyAgZGVmaW5lIFVJTlQ2NF9DKGMpICAgYyAjIyBVTEwKLSMgZW5kaWYKLQotLyogTWF4aW1hbCB0eXBlLiAgKi8KLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBJTlRNQVhfQyhjKSAgIGMgIyMgTAotIyAgZGVmaW5lIFVJTlRNQVhfQyhjKSAgYyAjIyBVTAotIyBlbHNlCi0jICBkZWZpbmUgSU5UTUFYX0MoYykgICBjICMjIExMCi0jICBkZWZpbmUgVUlOVE1BWF9DKGMpICBjICMjIFVMTAotIyBlbmRpZgotCi0gIC8qIGxpdGVyYWxudW1iZXJzICovCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBUaGVzZSBsaW1pdHMgYXJlIG1lcmlseSB0aG9zZSBvZiBhIHR3byBjb21wbGVtZW50IGJ5dGUtb3JpZW50ZWQgc3lzdGVtICovCi0KLS8qIE1pbmltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KLSMgZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jIGRlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKLSMgZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jIGRlZmluZSBJTlQ2NF9NSU4gICAgICAgICAgICAgICgtX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCi0vKiBNYXhpbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcy4gICovCi0jIGRlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCi0jIGRlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSMgZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jIGRlZmluZSBJTlQ2NF9NQVggICAgICAgICAgICAgIChfX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNykpCi0KLS8qIE1heGltdW0gb2YgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMuICAqLwotIyBkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1KQotIyBkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzUpCi0jIGRlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSMgZGVmaW5lIFVJTlQ2NF9NQVggICAgICAgICAgICAgKF9fVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUpKQotCi0vKiBNaW5pbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLwotIyBkZWZpbmUgSU5UX0xFQVNUOF9NSU4gICAgICAgICBJTlQ4X01JTgotIyBkZWZpbmUgSU5UX0xFQVNUMTZfTUlOICAgICAgICBJTlQxNl9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDMyX01JTiAgICAgICAgSU5UMzJfTUlOCi0jIGRlZmluZSBJTlRfTEVBU1Q2NF9NSU4gICAgICAgIElOVDY0X01JTgotLyogTWF4aW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KLSMgZGVmaW5lIElOVF9MRUFTVDhfTUFYICAgICAgICAgSU5UOF9NQVgKLSMgZGVmaW5lIElOVF9MRUFTVDE2X01BWCAgICAgICAgSU5UMTZfTUFYCi0jIGRlZmluZSBJTlRfTEVBU1QzMl9NQVggICAgICAgIElOVDMyX01BWAotIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICAgICAgICBJTlQ2NF9NQVgKLQotLyogTWF4aW11bSBvZiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLwotIyBkZWZpbmUgVUlOVF9MRUFTVDhfTUFYICAgICAgICBVSU5UOF9NQVgKLSMgZGVmaW5lIFVJTlRfTEVBU1QxNl9NQVggICAgICAgVUlOVDE2X01BWAotIyBkZWZpbmUgVUlOVF9MRUFTVDMyX01BWCAgICAgICBVSU5UMzJfTUFYCi0jIGRlZmluZSBVSU5UX0xFQVNUNjRfTUFYICAgICAgIFVJTlQ2NF9NQVgKLQotICAvKiBzaG9ydGNpcmN1aXQqLwotI2VuZGlmCi0gIC8qIG9uY2UgKi8KLSNlbmRpZgotI2VuZGlmCi1TVERJTlRfRU9GCi1maQotICAgIGlmIGNtcCAtcyAkYWNfc3RkaW50X2ggJGFjX3N0ZGludCAyPi9kZXYvbnVsbDsgdGhlbgotICAgICAgQUNfTVNHX05PVElDRShbJGFjX3N0ZGludF9oIGlzIHVuY2hhbmdlZF0pCi0gICAgZWxzZQotICAgICAgYWNfZGlyPWBBU19ESVJOQU1FKFsiJGFjX3N0ZGludF9oIl0pYAotICAgICAgQVNfTUtESVJfUChbIiRhY19kaXIiXSkKLSAgICAgIHJtIC1mICRhY19zdGRpbnRfaAotICAgICAgbXYgJGFjX3N0ZGludCAkYWNfc3RkaW50X2gKLSAgICBmaQotXSxbIyB2YXJpYWJsZXMgZm9yIGNyZWF0ZSBzdGRpbnQuaCByZXBsYWNlbWVudAotUEFDS0FHRT0iJFBBQ0tBR0UiCi1WRVJTSU9OPSIkVkVSU0lPTiIKLWFjX3N0ZGludF9oPSIkYWNfc3RkaW50X2giCi1fYWNfc3RkaW50X2g9QVNfVFJfQ1BQKF8kUEFDS0FHRS0kYWNfc3RkaW50X2gpCi1hY19jdl9zdGRpbnRfbWVzc2FnZT0iJGFjX2N2X3N0ZGludF9tZXNzYWdlIgotYWNfY3ZfaGVhZGVyX3N0ZGludF90PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF90IgotYWNfY3ZfaGVhZGVyX3N0ZGludF94PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF94IgotYWNfY3ZfaGVhZGVyX3N0ZGludF9vPSIkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIgotYWNfY3ZfaGVhZGVyX3N0ZGludF91PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF91IgotYWNfY3ZfdHlwZV91aW50NjRfdD0iJGFjX2N2X3R5cGVfdWludDY0X3QiCi1hY19jdl90eXBlX3VfaW50NjRfdD0iJGFjX2N2X3R5cGVfdV9pbnQ2NF90IgotYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsIgotYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsIgotYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90PSIkYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90IgotYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3Q9IiRhY19jdl90eXBlX2ludF9mYXN0MzJfdCIKLWFjX2N2X3R5cGVfaW50bWF4X3Q9IiRhY19jdl90eXBlX2ludG1heF90IgotXSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBiL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzQwNTFlLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00CisrKyAvZGV2L251bGwKQEAgLTEsNDg1ICswLDAgQEAKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICAgICAgICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9wdGhyZWFkLmh0bWwKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jCi0jIFNZTk9QU0lTCi0jCi0jICAgQVhfUFRIUkVBRChbQUNUSU9OLUlGLUZPVU5EWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dKQotIwotIyBERVNDUklQVElPTgotIwotIyAgIFRoaXMgbWFjcm8gZmlndXJlcyBvdXQgaG93IHRvIGJ1aWxkIEMgcHJvZ3JhbXMgdXNpbmcgUE9TSVggdGhyZWFkcy4gSXQKLSMgICBzZXRzIHRoZSBQVEhSRUFEX0xJQlMgb3V0cHV0IHZhcmlhYmxlIHRvIHRoZSB0aHJlYWRzIGxpYnJhcnkgYW5kIGxpbmtlcgotIyAgIGZsYWdzLCBhbmQgdGhlIFBUSFJFQURfQ0ZMQUdTIG91dHB1dCB2YXJpYWJsZSB0byBhbnkgc3BlY2lhbCBDIGNvbXBpbGVyCi0jICAgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkLiAoVGhlIHVzZXIgY2FuIGFsc28gZm9yY2UgY2VydGFpbiBjb21waWxlcgotIyAgIGZsYWdzL2xpYnMgdG8gYmUgdGVzdGVkIGJ5IHNldHRpbmcgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzLikKLSMKLSMgICBBbHNvIHNldHMgUFRIUkVBRF9DQyB0byBhbnkgc3BlY2lhbCBDIGNvbXBpbGVyIHRoYXQgaXMgbmVlZGVkIGZvcgotIyAgIG11bHRpLXRocmVhZGVkIHByb2dyYW1zIChkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgQ0Mgb3RoZXJ3aXNlKS4gKFRoaXMKLSMgICBpcyBuZWNlc3Nhcnkgb24gQUlYIHRvIHVzZSB0aGUgc3BlY2lhbCBjY19yIGNvbXBpbGVyIGFsaWFzLikKLSMKLSMgICBOT1RFOiBZb3UgYXJlIGFzc3VtZWQgdG8gbm90IG9ubHkgY29tcGlsZSB5b3VyIHByb2dyYW0gd2l0aCB0aGVzZSBmbGFncywKLSMgICBidXQgYWxzbyB0byBsaW5rIHdpdGggdGhlbSBhcyB3ZWxsLiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGxpbmsgd2l0aAotIyAgICRQVEhSRUFEX0NDICRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTICRMREZMQUdTIC4uLiAkUFRIUkVBRF9MSUJTICRMSUJTCi0jCi0jICAgSWYgeW91IGFyZSBvbmx5IGJ1aWxkaW5nIHRocmVhZGVkIHByb2dyYW1zLCB5b3UgbWF5IHdpc2ggdG8gdXNlIHRoZXNlCi0jICAgdmFyaWFibGVzIGluIHlvdXIgZGVmYXVsdCBMSUJTLCBDRkxBR1MsIGFuZCBDQzoKLSMKLSMgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0jICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgotIyAgICAgQ0M9IiRQVEhSRUFEX0NDIgotIwotIyAgIEluIGFkZGl0aW9uLCBpZiB0aGUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdGhyZWFkLWF0dHJpYnV0ZSBjb25zdGFudAotIyAgIGhhcyBhIG5vbnN0YW5kYXJkIG5hbWUsIHRoaXMgbWFjcm8gZGVmaW5lcyBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSB0bwotIyAgIHRoYXQgbmFtZSAoZS5nLiBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEIG9uIEFJWCkuCi0jCi0jICAgQWxzbyBIQVZFX1BUSFJFQURfUFJJT19JTkhFUklUIGlzIGRlZmluZWQgaWYgcHRocmVhZCBpcyBmb3VuZCBhbmQgdGhlCi0jICAgUFRIUkVBRF9QUklPX0lOSEVSSVQgc3ltYm9sIGlzIGRlZmluZWQgd2hlbiBjb21waWxpbmcgd2l0aAotIyAgIFBUSFJFQURfQ0ZMQUdTLgotIwotIyAgIEFDVElPTi1JRi1GT1VORCBpcyBhIGxpc3Qgb2Ygc2hlbGwgY29tbWFuZHMgdG8gcnVuIGlmIGEgdGhyZWFkcyBsaWJyYXJ5Ci0jICAgaXMgZm91bmQsIGFuZCBBQ1RJT04tSUYtTk9ULUZPVU5EIGlzIGEgbGlzdCBvZiBjb21tYW5kcyB0byBydW4gaXQgaWYgaXQKLSMgICBpcyBub3QgZm91bmQuIElmIEFDVElPTi1JRi1GT1VORCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBhY3Rpb24KLSMgICB3aWxsIGRlZmluZSBIQVZFX1BUSFJFQUQuCi0jCi0jICAgUGxlYXNlIGxldCB0aGUgYXV0aG9ycyBrbm93IGlmIHRoaXMgbWFjcm8gZmFpbHMgb24gYW55IHBsYXRmb3JtLCBvciBpZgotIyAgIHlvdSBoYXZlIGFueSBvdGhlciBzdWdnZXN0aW9ucyBvciBjb21tZW50cy4gVGhpcyBtYWNybyB3YXMgYmFzZWQgb24gd29yawotIyAgIGJ5IFNHSiBvbiBhdXRvY29uZiBzY3JpcHRzIGZvciBGRlRXIChodHRwOi8vd3d3LmZmdHcub3JnLykgKHdpdGggaGVscAotIyAgIGZyb20gTS4gRnJpZ28pLCBhcyB3ZWxsIGFzIGFjX3B0aHJlYWQgYW5kIGhiX3B0aHJlYWQgbWFjcm9zIHBvc3RlZCBieQotIyAgIEFsZWphbmRybyBGb3Jlcm8gQ3VlcnZvIHRvIHRoZSBhdXRvY29uZiBtYWNybyByZXBvc2l0b3J5LiBXZSBhcmUgYWxzbwotIyAgIGdyYXRlZnVsIGZvciB0aGUgaGVscGZ1bCBmZWVkYmFjayBvZiBudW1lcm91cyB1c2Vycy4KLSMKLSMgICBVcGRhdGVkIGZvciBBdXRvY29uZiAyLjY4IGJ5IERhbmllbCBSaWNoYXJkIEcuCi0jCi0jIExJQ0VOU0UKLSMKLSMgICBDb3B5cmlnaHQgKGMpIDIwMDggU3RldmVuIEcuIEpvaG5zb24gPHN0ZXZlbmpAYWx1bS5taXQuZWR1PgotIyAgIENvcHlyaWdodCAoYykgMjAxMSBEYW5pZWwgUmljaGFyZCBHLiA8c2t1bmtAaVNLVU5LLk9SRz4KLSMKLSMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSMgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsCi0jICAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotIyAgIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0jCi0jICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHJlc3BlY3RpdmUgQXV0b2NvbmYgTWFjcm8ncyBjb3B5cmlnaHQgb3duZXIKLSMgICBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlIGNvbmZpZ3VyZQotIyAgIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcgdGhlIE1hY3JvLiBZb3UKLSMgICBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB3aGVuIHVzaW5nCi0jICAgb3IgZGlzdHJpYnV0aW5nIHN1Y2ggc2NyaXB0cywgZXZlbiB0aG91Z2ggcG9ydGlvbnMgb2YgdGhlIHRleHQgb2YgdGhlCi0jICAgTWFjcm8gYXBwZWFyIGluIHRoZW0uIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBkb2VzIGdvdmVybgotIyAgIGFsbCBvdGhlciB1c2Ugb2YgdGhlIG1hdGVyaWFsIHRoYXQgY29uc3RpdHV0ZXMgdGhlIEF1dG9jb25mIE1hY3JvLgotIwotIyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZSBBdXRvY29uZgotIyAgIE1hY3JvIHJlbGVhc2VkIGJ5IHRoZSBBdXRvY29uZiBBcmNoaXZlLiBXaGVuIHlvdSBtYWtlIGFuZCBkaXN0cmlidXRlIGEKLSMgICBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91IG1heSBleHRlbmQgdGhpcyBzcGVjaWFsCi0jICAgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZCB2ZXJzaW9uIGFzIHdlbGwuCi0KLSNzZXJpYWwgMjMKLQotQVVfQUxJQVMoW0FDWF9QVEhSRUFEXSwgW0FYX1BUSFJFQURdKQotQUNfREVGVU4oW0FYX1BUSFJFQURdLCBbCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKLUFDX1JFUVVJUkUoW0FDX1BST0dfU0VEXSkKLUFDX0xBTkdfUFVTSChbQ10pCi1heF9wdGhyZWFkX29rPW5vCi0KLSMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBmYWlscyBpZiBwdGhyZWFkLmgKLSMgcmVxdWlyZXMgc3BlY2lhbCBjb21waWxlciBmbGFncyAoZS5nLiBvbiBUcnU2NCBvciBTZXF1ZW50KS4KLSMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KLQotIyBGaXJzdCBvZiBhbGwsIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBzZXQgYW55IG9mIHRoZSBQVEhSRUFEX0xJQlMsCi0jIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZwotIyB0aGVtOgotaWYgdGVzdCAieCRQVEhSRUFEX0NGTEFHUyRQVEhSRUFEX0xJQlMiICE9ICJ4IjsgdGhlbgotICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0M9IiRDQyIKLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICBBU19JRihbdGVzdCAieCRQVEhSRUFEX0NDIiAhPSAieCJdLCBbQ0M9IiRQVEhSRUFEX0NDIl0pCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0gICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB0aHJlYWRfam9pbiB1c2luZyAkQ0MgJFBUSFJFQURfQ0ZMQUdTICRQVEhSRUFEX0xJQlNdKQotICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19DQUxMKFtdLCBbcHRocmVhZF9qb2luXSldLCBbYXhfcHRocmVhZF9vaz15ZXNdKQotICAgICAgICBBQ19NU0dfUkVTVUxUKFskYXhfcHRocmVhZF9va10pCi0gICAgICAgIGlmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieG5vIjsgdGhlbgotICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iIgotICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCi0gICAgICAgIGZpCi0gICAgICAgIENDPSIkYXhfcHRocmVhZF9zYXZlX0NDIgotICAgICAgICBDRkxBR1M9IiRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgotICAgICAgICBMSUJTPSIkYXhfcHRocmVhZF9zYXZlX0xJQlMiCi1maQotCi0jIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50Ci0jIG5hbWVzOyB0aGUgb3JkZXJpbmcgaXMgdmVyeSBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHN5c3RlbXMKLSMgKGUuZy4gREVDKSBoYXZlIGJvdGggLWxwdGhyZWFkIGFuZCAtbHB0aHJlYWRzLCB3aGVyZSBvbmUgb2YgdGhlCi0jIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCi0KLSMgQ3JlYXRlIGEgbGlzdCBvZiB0aHJlYWQgZmxhZ3MgdG8gdHJ5LiAgSXRlbXMgc3RhcnRpbmcgd2l0aCBhICItIiBhcmUKLSMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgotIyB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSB0cnkgd2l0aG91dCBhbnkgZmxhZ3MgYXQgYWxsLCBhbmQgInB0aHJlYWQtY29uZmlnIgotIyB3aGljaCBpcyBhIHByb2dyYW0gcmV0dXJuaW5nIHRoZSBmbGFncyBmb3IgdGhlIFB0aCBlbXVsYXRpb24gbGlicmFyeS4KLQotYXhfcHRocmVhZF9mbGFncz0icHRocmVhZHMgbm9uZSAtS3RocmVhZCAtcHRocmVhZCAtcHRocmVhZHMgLW10aHJlYWRzIHB0aHJlYWQgLS10aHJlYWQtc2FmZSAtbXQgcHRocmVhZC1jb25maWciCi0KLSMgVGhlIG9yZGVyaW5nICppcyogKHNvbWV0aW1lcykgaW1wb3J0YW50LiAgU29tZSBub3RlcyBvbiB0aGUKLSMgaW5kaXZpZHVhbCBpdGVtcyBmb2xsb3c6Ci0KLSMgcHRocmVhZHM6IEFJWCAobXVzdCBjaGVjayB0aGlzIGJlZm9yZSAtbHB0aHJlYWQpCi0jIG5vbmU6IGluIGNhc2UgdGhyZWFkcyBhcmUgaW4gbGliYzsgc2hvdWxkIGJlIHRyaWVkIGJlZm9yZSAtS3RocmVhZCBhbmQKLSMgICAgICAgb3RoZXIgY29tcGlsZXIgZmxhZ3MgdG8gcHJldmVudCBjb250aW51YWwgY29tcGlsZXIgd2FybmluZ3MKLSMgLUt0aHJlYWQ6IFNlcXVlbnQgKHRocmVhZHMgaW4gbGliYywgYnV0IC1LdGhyZWFkIG5lZWRlZCBmb3IgcHRocmVhZC5oKQotIyAtcHRocmVhZDogTGludXgvZ2NjIChrZXJuZWwgdGhyZWFkcyksIEJTRC9nY2MgKHVzZXJsYW5kIHRocmVhZHMpLCBUcnU2NAotIyAgICAgICAgICAgKE5vdGU6IEhQIEMgcmVqZWN0cyB0aGlzIHdpdGggImJhZCBmb3JtIGZvciBgLXQnIG9wdGlvbiIpCi0jIC1wdGhyZWFkczogU29sYXJpcy9nY2MgKE5vdGU6IEhQIEMgYWxzbyByZWplY3RzKQotIyAtbXQ6IFN1biBXb3Jrc2hvcCBDIChtYXkgb25seSBsaW5rIFN1bk9TIHRocmVhZHMgWy1sdGhyZWFkXSwgYnV0IGl0Ci0jICAgICAgZG9lc24ndCBodXJ0IHRvIGNoZWNrIHNpbmNlIHRoaXMgc29tZXRpbWVzIGRlZmluZXMgcHRocmVhZHMgYW5kCi0jICAgICAgLURfUkVFTlRSQU5UIHRvbyksIEhQIEMgKG11c3QgYmUgY2hlY2tlZCBiZWZvcmUgLWxwdGhyZWFkLCB3aGljaAotIyAgICAgIGlzIHByZXNlbnQgYnV0IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseTsgYW5kIGJlZm9yZSAtbXRocmVhZHMsCi0jICAgICAgYmVjYXVzZSB0aGUgY29tcGlsZXIgaW50ZXJwcmV0cyB0aGlzIGFzICItbXQiICsgIi1ocmVhZHMiKQotIyAtbXRocmVhZHM6IE1pbmd3MzIvZ2NjLCBMeW54L2djYwotIyBwdGhyZWFkOiBMaW51eCwgZXRjZXRlcmEKLSMgLS10aHJlYWQtc2FmZTogS0FJIEMrKwotIyBwdGhyZWFkLWNvbmZpZzogdXNlIHB0aHJlYWQtY29uZmlnIHByb2dyYW0gKGZvciBHTlUgUHRoIGxpYnJhcnkpCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLQotICAgICAgICBmcmVlYnNkKikKLQotICAgICAgICAjIC1rdGhyZWFkOiBGcmVlQlNEIGtlcm5lbCB0aHJlYWRzIChwcmVmZXJyZWQgdG8gLXB0aHJlYWQgc2luY2UgU01QLWFibGUpCi0gICAgICAgICMgbHRocmVhZDogTGludXhUaHJlYWRzIHBvcnQgb24gRnJlZUJTRCAoYWxzbyBwcmVmZXJyZWQgdG8gLXB0aHJlYWQpCi0KLSAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLWt0aHJlYWQgbHRocmVhZCAkYXhfcHRocmVhZF9mbGFncyIKLSAgICAgICAgOzsKLQotICAgICAgICBocHV4KikKLQotICAgICAgICAjIEZyb20gdGhlIGNjKDEpIG1hbiBwYWdlOiAiWy1tdF0gU2V0cyB2YXJpb3VzIC1EIGZsYWdzIHRvIGVuYWJsZQotICAgICAgICAjIG11bHRpLXRocmVhZGluZyBhbmQgYWxzbyBzZXRzIC1scHRocmVhZC4iCi0KLSAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLW10IC1wdGhyZWFkIHB0aHJlYWQgJGF4X3B0aHJlYWRfZmxhZ3MiCi0gICAgICAgIDs7Ci0KLSAgICAgICAgb3BlbmVkaXRpb24qKQotCi0gICAgICAgICMgSUJNIHovT1MgcmVxdWlyZXMgYSBmZWF0dXJlLXRlc3QgbWFjcm8gdG8gYmUgZGVmaW5lZCBpbiBvcmRlciB0bwotICAgICAgICAjIGVuYWJsZSBQT1NJWCB0aHJlYWRzIGF0IGFsbCwgc28gZ2l2ZSB0aGUgdXNlciBhIGhpbnQgaWYgdGhpcyBpcwotICAgICAgICAjIG5vdCBzZXQuIChXZSBkb24ndCBkZWZpbmUgdGhlc2Ugb3Vyc2VsdmVzLCBhcyB0aGV5IGNhbiBhZmZlY3QKLSAgICAgICAgIyBvdGhlciBwb3J0aW9ucyBvZiB0aGUgc3lzdGVtIEFQSSBpbiB1bnByZWRpY3RhYmxlIHdheXMuKQotCi0gICAgICAgIEFDX0VHUkVQX0NQUChbQVhfUFRIUkVBRF9aT1NfTUlTU0lOR10sCi0gICAgICAgICAgICBbCi0jICAgICAgICAgICAgaWYgIWRlZmluZWQoX09QRU5fVEhSRUFEUykgJiYgIWRlZmluZWQoX1VOSVgwM19USFJFQURTKQotICAgICAgICAgICAgIEFYX1BUSFJFQURfWk9TX01JU1NJTkcKLSMgICAgICAgICAgICBlbmRpZgotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIFtBQ19NU0dfV0FSTihbSUJNIHovT1MgcmVxdWlyZXMgLURfT1BFTl9USFJFQURTIG9yIC1EX1VOSVgwM19USFJFQURTIHRvIGVuYWJsZSBwdGhyZWFkcyBzdXBwb3J0Ll0pXSkKLSAgICAgICAgOzsKLQotICAgICAgICBzb2xhcmlzKikKLQotICAgICAgICAjIE9uIFNvbGFyaXMgKGF0IGxlYXN0LCBmb3Igc29tZSB2ZXJzaW9ucyksIGxpYmMgY29udGFpbnMgc3R1YmJlZAotICAgICAgICAjIChub24tZnVuY3Rpb25hbCkgdmVyc2lvbnMgb2YgdGhlIHB0aHJlYWRzIHJvdXRpbmVzLCBzbyBsaW5rLWJhc2VkCi0gICAgICAgICMgdGVzdHMgd2lsbCBlcnJvbmVvdXNseSBzdWNjZWVkLiAoTi5CLjogVGhlIHN0dWJzIGFyZSBtaXNzaW5nCi0gICAgICAgICMgcHRocmVhZF9jbGVhbnVwX3B1c2gsIG9yIHJhdGhlciBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGlzIG1hY3JvLAotICAgICAgICAjIHNvIHdlIGNvdWxkIGNoZWNrIGZvciB0aGF0LCBidXQgd2hvIGtub3dzIHdoZXRoZXIgdGhleSdsbCBzdHViCi0gICAgICAgICMgdGhhdCB0b28gaW4gYSBmdXR1cmUgbGliYy4pICBTbyB3ZSdsbCBjaGVjayBmaXJzdCBmb3IgdGhlCi0gICAgICAgICMgc3RhbmRhcmQgU29sYXJpcyB3YXkgb2YgbGlua2luZyBwdGhyZWFkcyAoLW10IC1scHRocmVhZCkuCi0KLSAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLW10LHB0aHJlYWQgcHRocmVhZCAkYXhfcHRocmVhZF9mbGFncyIKLSAgICAgICAgOzsKLWVzYWMKLQotIyBHQ0MgZ2VuZXJhbGx5IHVzZXMgLXB0aHJlYWQsIG9yIC1wdGhyZWFkcyBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiBTUEFSQykKLQotQVNfSUYoW3Rlc3QgIngkR0NDIiA9ICJ4eWVzIl0sCi0gICAgICBbYXhfcHRocmVhZF9mbGFncz0iLXB0aHJlYWQgLXB0aHJlYWRzICRheF9wdGhyZWFkX2ZsYWdzIl0pCi0KLSMgVGhlIHByZXNlbmNlIG9mIGEgZmVhdHVyZSB0ZXN0IG1hY3JvIHJlcXVlc3RpbmcgcmUtZW50cmFudCBmdW5jdGlvbgotIyBkZWZpbml0aW9ucyBpcywgb24gc29tZSBzeXN0ZW1zLCBhIHN0cm9uZyBoaW50IHRoYXQgcHRocmVhZHMgc3VwcG9ydCBpcwotIyBjb3JyZWN0bHkgZW5hYmxlZAotCi1jYXNlICRob3N0X29zIGluCi0gICAgICAgIGRhcndpbiogfCBocHV4KiB8IGxpbnV4KiB8IG9zZiogfCBzb2xhcmlzKikKLSAgICAgICAgYXhfcHRocmVhZF9jaGVja19tYWNybz0iX1JFRU5UUkFOVCIKLSAgICAgICAgOzsKLQotICAgICAgICBhaXgqKQotICAgICAgICBheF9wdGhyZWFkX2NoZWNrX21hY3JvPSJfVEhSRUFEX1NBRkUiCi0gICAgICAgIDs7Ci0KLSAgICAgICAgKikKLSAgICAgICAgYXhfcHRocmVhZF9jaGVja19tYWNybz0iLS0iCi0gICAgICAgIDs7Ci1lc2FjCi1BU19JRihbdGVzdCAieCRheF9wdGhyZWFkX2NoZWNrX21hY3JvIiA9ICJ4LS0iXSwKLSAgICAgIFtheF9wdGhyZWFkX2NoZWNrX2NvbmQ9MF0sCi0gICAgICBbYXhfcHRocmVhZF9jaGVja19jb25kPSIhZGVmaW5lZCgkYXhfcHRocmVhZF9jaGVja19tYWNybykiXSkKLQotIyBBcmUgd2UgY29tcGlsaW5nIHdpdGggQ2xhbmc/Ci0KLUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRDQyBpcyBDbGFuZ10sCi0gICAgW2F4X2N2X1BUSFJFQURfQ0xBTkddLAotICAgIFtheF9jdl9QVEhSRUFEX0NMQU5HPW5vCi0gICAgICMgTm90ZSB0aGF0IEF1dG9jb25mIHNldHMgR0NDPXllcyBmb3IgQ2xhbmcgYXMgd2VsbCBhcyBHQ0MKLSAgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIEFDX0VHUkVQX0NQUChbQVhfUFRIUkVBRF9DQ19JU19DTEFOR10sCi0gICAgICAgICAgICBbLyogTm90ZTogQ2xhbmcgMi43IGxhY2tzIF9fY2xhbmdfW2Etel0rX18gKi8KLSMgICAgICAgICAgICBpZiBkZWZpbmVkKF9fY2xhbmdfXykgJiYgZGVmaW5lZChfX2xsdm1fXykKLSAgICAgICAgICAgICBBWF9QVEhSRUFEX0NDX0lTX0NMQU5HCi0jICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9DTEFORz15ZXNdKQotICAgICBmaQotICAgIF0pCi1heF9wdGhyZWFkX2NsYW5nPSIkYXhfY3ZfUFRIUkVBRF9DTEFORyIKLQotYXhfcHRocmVhZF9jbGFuZ193YXJuaW5nPW5vCi0KLSMgQ2xhbmcgbmVlZHMgc3BlY2lhbCBoYW5kbGluZywgYmVjYXVzZSBvbGRlciB2ZXJzaW9ucyBoYW5kbGUgdGhlIC1wdGhyZWFkCi0jIG9wdGlvbiBpbiBhIHJhdGhlci4uLiBpZGlvc3luY3JhdGljIHdheQotCi1pZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfY2xhbmciID0gInh5ZXMiOyB0aGVuCi0KLSAgICAgICAgIyBDbGFuZyB0YWtlcyAtcHRocmVhZDsgaXQgaGFzIG5ldmVyIHN1cHBvcnRlZCBhbnkgb3RoZXIgZmxhZwotCi0gICAgICAgICMgKE5vdGUgMTogVGhpcyB3aWxsIG5lZWQgdG8gYmUgcmV2aXNpdGVkIGlmIGEgc3lzdGVtIHRoYXQgQ2xhbmcKLSAgICAgICAgIyBzdXBwb3J0cyBoYXMgUE9TSVggdGhyZWFkcyBpbiBhIHNlcGFyYXRlIGxpYnJhcnkuICBUaGlzIHRlbmRzIG5vdAotICAgICAgICAjIHRvIGJlIHRoZSB3YXkgb2YgbW9kZXJuIHN5c3RlbXMsIGJ1dCBpdCdzIGNvbmNlaXZhYmxlLikKLQotICAgICAgICAjIChOb3RlIDI6IE9uIHNvbWUgc3lzdGVtcywgbm90YWJseSBEYXJ3aW4sIC1wdGhyZWFkIGlzIG5vdCBuZWVkZWQKLSAgICAgICAgIyB0byBnZXQgUE9TSVggdGhyZWFkcyBzdXBwb3J0OyB0aGUgQVBJIGlzIGFsd2F5cyBwcmVzZW50IGFuZAotICAgICAgICAjIGFjdGl2ZS4gIFdlIGNvdWxkIHJlYXNvbmFibHkgbGVhdmUgUFRIUkVBRF9DRkxBR1MgZW1wdHkuICBCdXQKLSAgICAgICAgIyAtcHRocmVhZCBkb2VzIGRlZmluZSBfUkVFTlRSQU5ULCBhbmQgd2hpbGUgdGhlIERhcndpbiBoZWFkZXJzCi0gICAgICAgICMgaWdub3JlIHRoaXMgbWFjcm8sIHRoaXJkLXBhcnR5IGhlYWRlcnMgbWlnaHQgbm90LikKLQotICAgICAgICBQVEhSRUFEX0NGTEFHUz0iLXB0aHJlYWQiCi0gICAgICAgIFBUSFJFQURfTElCUz0KLQotICAgICAgICBheF9wdGhyZWFkX29rPXllcwotCi0gICAgICAgICMgSG93ZXZlciwgb2xkZXIgdmVyc2lvbnMgb2YgQ2xhbmcgbWFrZSBhIHBvaW50IG9mIHdhcm5pbmcgdGhlIHVzZXIKLSAgICAgICAgIyB0aGF0LCBpbiBhbiBpbnZvY2F0aW9uIHdoZXJlIG9ubHkgbGlua2luZyBhbmQgbm8gY29tcGlsYXRpb24gaXMKLSAgICAgICAgIyB0YWtpbmcgcGxhY2UsIHRoZSAtcHRocmVhZCBvcHRpb24gaGFzIG5vIGVmZmVjdCAoImFyZ3VtZW50IHVudXNlZAotICAgICAgICAjIGR1cmluZyBjb21waWxhdGlvbiIpLiAgVGhleSBleHBlY3QgLXB0aHJlYWQgdG8gYmUgcGFzc2VkIGluIG9ubHkKLSAgICAgICAgIyB3aGVuIHNvdXJjZSBjb2RlIGlzIGJlaW5nIGNvbXBpbGVkLgotICAgICAgICAjCi0gICAgICAgICMgUHJvYmxlbSBpcywgdGhpcyBpcyBhdCBvZGRzIHdpdGggdGhlIHdheSBBdXRvbWFrZSBhbmQgbW9zdCBvdGhlcgotICAgICAgICAjIEMgYnVpbGQgZnJhbWV3b3JrcyBmdW5jdGlvbiwgd2hpY2ggaXMgdGhhdCB0aGUgc2FtZSBmbGFncyB1c2VkIGluCi0gICAgICAgICMgY29tcGlsYXRpb24gKENGTEFHUykgYXJlIGFsc28gdXNlZCBpbiBsaW5raW5nLiAgTWFueSBzeXN0ZW1zCi0gICAgICAgICMgc3VwcG9ydGVkIGJ5IEFYX1BUSFJFQUQgcmVxdWlyZSBleGFjdGx5IHRoaXMgZm9yIFBPU0lYIHRocmVhZHMKLSAgICAgICAgIyBzdXBwb3J0LCBhbmQgaW4gZmFjdCBpdCBpcyBvZnRlbiBub3Qgc3RyYWlnaHRmb3J3YXJkIHRvIHNwZWNpZnkgYQotICAgICAgICAjIGZsYWcgdGhhdCBpcyB1c2VkIG9ubHkgaW4gdGhlIGNvbXBpbGF0aW9uIHBoYXNlIGFuZCBub3QgaW4KLSAgICAgICAgIyBsaW5raW5nLiAgU3VjaCBhIHNjZW5hcmlvIGlzIGV4dHJlbWVseSByYXJlIGluIHByYWN0aWNlLgotICAgICAgICAjCi0gICAgICAgICMgRXZlbiB0aG91Z2ggdXNlIG9mIHRoZSAtcHRocmVhZCBmbGFnIGluIGxpbmtpbmcgd291bGQgb25seSBwcmludAotICAgICAgICAjIGEgd2FybmluZywgdGhpcyBjYW4gYmUgYSBudWlzYW5jZSBmb3Igd2VsbC1ydW4gc29mdHdhcmUgcHJvamVjdHMKLSAgICAgICAgIyB0aGF0IGJ1aWxkIHdpdGggLVdlcnJvci4gIFNvIGlmIHRoZSBhY3RpdmUgdmVyc2lvbiBvZiBDbGFuZyBoYXMKLSAgICAgICAgIyB0aGlzIG1pc2ZlYXR1cmUsIHdlIHNlYXJjaCBmb3IgYW4gb3B0aW9uIHRvIHNxdWFzaCBpdC4KLQotICAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBDbGFuZyBuZWVkcyBmbGFnIHRvIHByZXZlbnQgImFyZ3VtZW50IHVudXNlZCIgd2FybmluZyB3aGVuIGxpbmtpbmcgd2l0aCAtcHRocmVhZF0sCi0gICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUddLAotICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHPXVua25vd24KLSAgICAgICAgICAgICAjIENyZWF0ZSBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiAkYWNfbGluayB0aGF0IGNvbXBpbGVzIGFuZAotICAgICAgICAgICAgICMgbGlua3MgaW4gdHdvIHN0ZXBzICguYyAtPiAubywgLm8gLT4gZXhlKSBpbnN0ZWFkIG9mIG9uZQotICAgICAgICAgICAgICMgKC5jIC0+IGV4ZSksIGJlY2F1c2UgdGhlIHdhcm5pbmcgb2NjdXJzIG9ubHkgaW4gdGhlIHNlY29uZAotICAgICAgICAgICAgICMgc3RlcAotICAgICAgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9hY19saW5rPSIkYWNfbGluayIKLSAgICAgICAgICAgICBheF9wdGhyZWFkX3NlZD0ncy9jb25mdGVzdFwuXCRhY19leHQvY29uZnRlc3QuJGFjX29iamV4dC9nJwotICAgICAgICAgICAgIGF4X3B0aHJlYWRfbGlua19zdGVwPWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICIkYXhfcHRocmVhZF9zZWQiYAotICAgICAgICAgICAgIGF4X3B0aHJlYWRfMnN0ZXBfYWNfbGluaz0iKCRhY19jb21waWxlKSAmJiAoZWNobyA9PT09ID4mNSkgJiYgKCRheF9wdGhyZWFkX2xpbmtfc3RlcCkiCi0gICAgICAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgICAgICAgICBmb3IgYXhfcHRocmVhZF90cnkgaW4gJycgLVF1bnVzZWQtYXJndW1lbnRzIC1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCB1bmtub3duOyBkbwotICAgICAgICAgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X3B0aHJlYWRfdHJ5IiA9ICJ4dW5rbm93biJdLCBbYnJlYWtdKQotICAgICAgICAgICAgICAgIENGTEFHUz0iLVdlcnJvciAtV3Vua25vd24td2FybmluZy1vcHRpb24gJGF4X3B0aHJlYWRfdHJ5IC1wdGhyZWFkICRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgotICAgICAgICAgICAgICAgIGFjX2xpbms9IiRheF9wdGhyZWFkX3NhdmVfYWNfbGluayIKLSAgICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tpbnQgbWFpbih2b2lkKXtyZXR1cm4gMDt9XV0pXSwKLSAgICAgICAgICAgICAgICAgICAgW2FjX2xpbms9IiRheF9wdGhyZWFkXzJzdGVwX2FjX2xpbmsiCi0gICAgICAgICAgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tpbnQgbWFpbih2b2lkKXtyZXR1cm4gMDt9XV0pXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbYnJlYWtdKQotICAgICAgICAgICAgICAgICAgICBdKQotICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICBhY19saW5rPSIkYXhfcHRocmVhZF9zYXZlX2FjX2xpbmsiCi0gICAgICAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgICAgICBBU19JRihbdGVzdCAieCRheF9wdGhyZWFkX3RyeSIgPSAieCJdLCBbYXhfcHRocmVhZF90cnk9bm9dKQotICAgICAgICAgICAgIGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHPSIkYXhfcHRocmVhZF90cnkiCi0gICAgICAgICAgICBdKQotCi0gICAgICAgIGNhc2UgIiRheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRyIgaW4KLSAgICAgICAgICAgICAgICBubyB8IHVua25vd24pIDs7Ci0gICAgICAgICAgICAgICAgKikgUFRIUkVBRF9DRkxBR1M9IiRheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRyAkUFRIUkVBRF9DRkxBR1MiIDs7Ci0gICAgICAgIGVzYWMKLQotZmkgIyAkYXhfcHRocmVhZF9jbGFuZyA9IHllcwotCi1pZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInhubyI7IHRoZW4KLWZvciBheF9wdGhyZWFkX3RyeV9mbGFnIGluICRheF9wdGhyZWFkX2ZsYWdzOyBkbwotCi0gICAgICAgIGNhc2UgJGF4X3B0aHJlYWRfdHJ5X2ZsYWcgaW4KLSAgICAgICAgICAgICAgICBub25lKQotICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGhvdXQgYW55IGZsYWdzXSkKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAgICAgLW10LHB0aHJlYWQpCi0gICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAtbXQgLWxwdGhyZWFkXSkKLSAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iLW10IgotICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iLWxwdGhyZWFkIgotICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgICAgICAgICAtKikKLSAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRoICRheF9wdGhyZWFkX3RyeV9mbGFnXSkKLSAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGF4X3B0aHJlYWRfdHJ5X2ZsYWciCi0gICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAgICAgICAgIHB0aHJlYWQtY29uZmlnKQotICAgICAgICAgICAgICAgIEFDX0NIRUNLX1BST0coW2F4X3B0aHJlYWRfY29uZmlnXSwgW3B0aHJlYWQtY29uZmlnXSwgW3llc10sIFtub10pCi0gICAgICAgICAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfcHRocmVhZF9jb25maWciID0gInhubyJdLCBbY29udGludWVdKQotICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSJgcHRocmVhZC1jb25maWcgLS1jZmxhZ3NgIgotICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iYHB0aHJlYWQtY29uZmlnIC0tbGRmbGFnc2AgYHB0aHJlYWQtY29uZmlnIC0tbGlic2AiCi0gICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgdGhlIHB0aHJlYWRzIGxpYnJhcnkgLWwkYXhfcHRocmVhZF90cnlfZmxhZ10pCi0gICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbCRheF9wdGhyZWFkX3RyeV9mbGFnIgotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLQotICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgICAgICBheF9wdGhyZWFkX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0KLSAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBmdW5jdGlvbnMuICBXZSBtdXN0IGluY2x1ZGUgcHRocmVhZC5oLAotICAgICAgICAjIHNpbmNlIHNvbWUgZnVuY3Rpb25zIG1heSBiZSBtYWNyb3MuICAoT24gdGhlIFNlcXVlbnQsIHdlCi0gICAgICAgICMgbmVlZCBhIHNwZWNpYWwgZmxhZyAtS3RocmVhZCB0byBtYWtlIHRoaXMgaGVhZGVyIGNvbXBpbGUuKQotICAgICAgICAjIFdlIGNoZWNrIGZvciBwdGhyZWFkX2pvaW4gYmVjYXVzZSBpdCBpcyBpbiAtbHB0aHJlYWQgb24gSVJJWAotICAgICAgICAjIHdoaWxlIHB0aHJlYWRfY3JlYXRlIGlzIGluIGxpYmMuICBXZSBjaGVjayBmb3IgcHRocmVhZF9hdHRyX2luaXQKLSAgICAgICAgIyBkdWUgdG8gREVDIGNyYXppbmVzcyB3aXRoIC1scHRocmVhZHMuICBXZSBjaGVjayBmb3IKLSAgICAgICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCBiZWNhdXNlIGl0IGlzIG9uZSBvZiB0aGUgZmV3IHB0aHJlYWQKLSAgICAgICAgIyBmdW5jdGlvbnMgb24gU29sYXJpcyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG5vbi1mdW5jdGlvbmFsIGxpYmMgc3R1Yi4KLSAgICAgICAgIyBXZSB0cnkgcHRocmVhZF9jcmVhdGUgb24gZ2VuZXJhbCBwcmluY2lwbGVzLgotCi0gICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jICAgICAgICAgICAgICAgICAgICAgICBpZiAkYXhfcHRocmVhZF9jaGVja19jb25kCi0jICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgIiRheF9wdGhyZWFkX2NoZWNrX21hY3JvIG11c3QgYmUgZGVmaW5lZCIKLSMgICAgICAgICAgICAgICAgICAgICAgIGVuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCByb3V0aW5lKHZvaWQgKmEpIHsgYSA9IDA7IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkICpzdGFydF9yb3V0aW5lKHZvaWQgKmEpIHsgcmV0dXJuIGE7IH1dLAotICAgICAgICAgICAgICAgICAgICAgICBbcHRocmVhZF90IHRoOyBwdGhyZWFkX2F0dHJfdCBhdHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUoJnRoLCAwLCBzdGFydF9yb3V0aW5lLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfam9pbih0aCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NsZWFudXBfcHVzaChyb3V0aW5lLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY2xlYW51cF9wb3AoMCkgLyogOyAqL10pXSwKLSAgICAgICAgICAgIFtheF9wdGhyZWFkX29rPXllc10sCi0gICAgICAgICAgICBbXSkKLQotICAgICAgICBDRkxBR1M9IiRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgotICAgICAgICBMSUJTPSIkYXhfcHRocmVhZF9zYXZlX0xJQlMiCi0KLSAgICAgICAgQUNfTVNHX1JFU1VMVChbJGF4X3B0aHJlYWRfb2tdKQotICAgICAgICBBU19JRihbdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4eWVzIl0sIFticmVha10pCi0KLSAgICAgICAgUFRIUkVBRF9MSUJTPSIiCi0gICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCi1kb25lCi1maQotCi0jIFZhcmlvdXMgb3RoZXIgY2hlY2tzOgotaWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgICAgICBheF9wdGhyZWFkX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0KLSAgICAgICAgIyBEZXRlY3QgQUlYIGxvc3NhZ2U6IEpPSU5BQkxFIGF0dHJpYnV0ZSBpcyBjYWxsZWQgVU5ERVRBQ0hFRC4KLSAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZV0sCi0gICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSXSwKLSAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFI9dW5rbm93bgotICAgICAgICAgICAgIGZvciBheF9wdGhyZWFkX2F0dHIgaW4gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRDsgZG8KLSAgICAgICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnQgYXR0ciA9ICRheF9wdGhyZWFkX2F0dHI7IHJldHVybiBhdHRyIC8qIDsgKi9dKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFI9JGF4X3B0aHJlYWRfYXR0cjsgYnJlYWtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKLSAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBdKQotICAgICAgICBBU19JRihbdGVzdCAieCRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFIiICE9ICJ4dW5rbm93biIgJiYgXAotICAgICAgICAgICAgICAgdGVzdCAieCRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFIiICE9ICJ4UFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUiICYmIFwKLSAgICAgICAgICAgICAgIHRlc3QgIngkYXhfcHRocmVhZF9qb2luYWJsZV9hdHRyX2RlZmluZWQiICE9ICJ4eWVzIl0sCi0gICAgICAgICAgICAgIFtBQ19ERUZJTkVfVU5RVU9URUQoW1BUSFJFQURfQ1JFQVRFX0pPSU5BQkxFXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byBuZWNlc3Nhcnkgc3ltYm9sIGlmIHRoaXMgY29uc3RhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBhIG5vbi1zdGFuZGFyZCBuYW1lIG9uIHlvdXIgc3lzdGVtLl0pCi0gICAgICAgICAgICAgICBheF9wdGhyZWFkX2pvaW5hYmxlX2F0dHJfZGVmaW5lZD15ZXMKLSAgICAgICAgICAgICAgXSkKLQotICAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtb3JlIHNwZWNpYWwgZmxhZ3MgYXJlIHJlcXVpcmVkIGZvciBwdGhyZWFkc10sCi0gICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTXSwKLSAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1M9bm8KLSAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgc29sYXJpcyopCi0gICAgICAgICAgICAgYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTPSItRF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyIKLSAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIF0pCi0gICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUyIgIT0gInhubyIgJiYgXAotICAgICAgICAgICAgICAgdGVzdCAieCRheF9wdGhyZWFkX3NwZWNpYWxfZmxhZ3NfYWRkZWQiICE9ICJ4eWVzIl0sCi0gICAgICAgICAgICAgIFtQVEhSRUFEX0NGTEFHUz0iJGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0gICAgICAgICAgICAgICBheF9wdGhyZWFkX3NwZWNpYWxfZmxhZ3NfYWRkZWQ9eWVzXSkKLQotICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIFBUSFJFQURfUFJJT19JTkhFUklUXSwKLSAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVF0sCi0gICAgICAgICAgICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2ludCBpID0gUFRIUkVBRF9QUklPX0lOSEVSSVQ7XV0pXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9eWVzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9bm9dKQotICAgICAgICAgICAgXSkKLSAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQiID0gInh5ZXMiICYmIFwKLSAgICAgICAgICAgICAgIHRlc3QgIngkYXhfcHRocmVhZF9wcmlvX2luaGVyaXRfZGVmaW5lZCIgIT0gInh5ZXMiXSwKLSAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVF0sIFsxXSwgW0hhdmUgUFRIUkVBRF9QUklPX0lOSEVSSVQuXSkKLSAgICAgICAgICAgICAgIGF4X3B0aHJlYWRfcHJpb19pbmhlcml0X2RlZmluZWQ9eWVzCi0gICAgICAgICAgICAgIF0pCi0KLSAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgTElCUz0iJGF4X3B0aHJlYWRfc2F2ZV9MSUJTIgotCi0gICAgICAgICMgTW9yZSBBSVggbG9zc2FnZTogY29tcGlsZSB3aXRoICpfciB2YXJpYW50Ci0gICAgICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgICBhaXgqKQotICAgICAgICAgICAgICAgIEFTX0NBU0UoWyJ4LyRDQyJdLAotICAgICAgICAgICAgICAgICAgICBbeCovYzg5fHgqL2M4OV8xMjh8eCovYzk5fHgqL2M5OV8xMjh8eCovY2N8eCovY2MxMjh8eCoveGxjfHgqL3hsY192Nnx4Ki94bGMxMjh8eCoveGxjMTI4X3Y2XSwKLSAgICAgICAgICAgICAgICAgICAgWyNoYW5kbGUgYWJzb2x1dGUgcGF0aCBkaWZmZXJlbnRseSBmcm9tIFBBVEggYmFzZWQgcHJvZ3JhbSBsb29rdXAKLSAgICAgICAgICAgICAgICAgICAgIEFTX0NBU0UoWyJ4JENDIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgW3gvKl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgW0FTX0lGKFtBU19FWEVDVVRBQkxFX1AoWyR7Q0N9X3JdKV0sW1BUSFJFQURfQ0M9IiR7Q0N9X3IiXSldLAotICAgICAgICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19QUk9HUyhbUFRIUkVBRF9DQ10sWyR7Q0N9X3JdLFskQ0NdKV0pXSkKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgZXNhYwotICAgICAgICBmaQotZmkKLQotdGVzdCAtbiAiJFBUSFJFQURfQ0MiIHx8IFBUSFJFQURfQ0M9IiRDQyIKLQotQUNfU1VCU1QoW1BUSFJFQURfTElCU10pCi1BQ19TVUJTVChbUFRIUkVBRF9DRkxBR1NdKQotQUNfU1VCU1QoW1BUSFJFQURfQ0NdKQotCi0jIEZpbmFsbHksIGV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5EL0FDVElPTi1JRi1OT1QtRk9VTkQ6Ci1pZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGlmZWxzZShbJDFdLCxbQUNfREVGSU5FKFtIQVZFX1BUSFJFQURdLFsxXSxbRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMuXSldLFskMV0pCi0gICAgICAgIDoKLWVsc2UKLSAgICAgICAgYXhfcHRocmVhZF9vaz1ubwotICAgICAgICAkMgotZmkKLUFDX0xBTkdfUE9QCi1dKWRubCBBWF9QVEhSRUFECmRpZmYgLS1naXQgYS9jb21tb24vbTQvY2hlY2subTQgYi9jb21tb24vbTQvY2hlY2subTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZDI2ZWIuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2NoZWNrLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLWRubCBfQU1fVFJZX0NIRUNLKE1JTklNVU0tVkVSU0lPTiwgRVhUUkEtQ0ZMQUdTLCBFWFRSQS1MSUJTLCBDSEVDSy1MSUItTkFNRQotZG5sICAgICAgICAgICAgICAgWywgQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKLWRubCBUZXN0IGZvciBjaGVjaywgYW5kIGRlZmluZSBDSEVDS19DRkxBR1MgYW5kIENIRUNLX0xJQlMKLWRubCBEb25lIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdGhlIGJyb2tlbm5lc3MgdGhhdCBpcwotZG5sIGh0dHBzOi8vbGF1bmNocGFkLm5ldC9kaXN0cm9zL3VidW50dS8rc291cmNlL2NoZWNrLytidWcvNTg0MAotZG5sCi0KLUFDX0RFRlVOKFtfQU1fVFJZX0NIRUNLXSwKLVsKLSAgbWluX2NoZWNrX3ZlcnNpb249JDEKLSAgZXh0cmFfY2ZsYWdzPSQyCi0gIGV4dHJhX2xpYnM9JDMKLSAgY2hlY2tfbGliX25hbWU9JDQKLQotICBDSEVDS19DRkxBR1M9IiRleHRyYV9jZmxhZ3MiCi0gIENIRUNLX0xJQlM9IiRleHRyYV9saWJzIC1sJGNoZWNrX2xpYl9uYW1lIgotCi0gIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBhY19zYXZlX0xJQlM9IiRMSUJTIgotCi0gIENGTEFHUz0iJENGTEFHUyAkQ0hFQ0tfQ0ZMQUdTIgotICBMSUJTPSIkQ0hFQ0tfTElCUyAkTElCUyIKLQotICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNoZWNrIG5hbWVkICRjaGVja19saWJfbmFtZSAgLSB2ZXJzaW9uID49ICRtaW5fY2hlY2tfdmVyc2lvbikKLQotICBybSAtZiBjb25mLmNoZWNrLXRlc3QKLSAgZG5sIHVuc2V0IG5vX2NoZWNrLCBzaW5jZSBpbiBvdXIgc2Vjb25kIHJ1biBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIHllcwotICBkbmwgYmVmb3JlCi0gIG5vX2NoZWNrPQotICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8Y2hlY2suaD4KLQotaW50IG1haW4gKCkKLXsKLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87Ci0gIGNoYXIgKnRtcF92ZXJzaW9uOwotCi0gIHN5c3RlbSAoInRvdWNoIGNvbmYuY2hlY2stdGVzdCIpOwotCi0gIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLwotICB0bXBfdmVyc2lvbiA9IHN0cmR1cCgiJG1pbl9jaGVja192ZXJzaW9uIik7Ci0gIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9jaGVja192ZXJzaW9uIik7Ci0gICAgIHJldHVybiAxOwotICAgfQotCi0gIGlmICgoQ0hFQ0tfTUFKT1JfVkVSU0lPTiAhPSBjaGVja19tYWpvcl92ZXJzaW9uKSB8fAotICAgICAgKENIRUNLX01JTk9SX1ZFUlNJT04gIT0gY2hlY2tfbWlub3JfdmVyc2lvbikgfHwKLSAgICAgIChDSEVDS19NSUNST19WRVJTSU9OICE9IGNoZWNrX21pY3JvX3ZlcnNpb24pKQotICAgIHsKLSAgICAgIHByaW50ZigiXG4qKiogVGhlIGNoZWNrIGhlYWRlciBmaWxlICh2ZXJzaW9uICVkLiVkLiVkKSBkb2VzIG5vdCBtYXRjaFxuIiwKLQkgICAgIENIRUNLX01BSk9SX1ZFUlNJT04sIENIRUNLX01JTk9SX1ZFUlNJT04sIENIRUNLX01JQ1JPX1ZFUlNJT04pOwotICAgICAgcHJpbnRmKCIqKiogdGhlIGNoZWNrIGxpYnJhcnkgKHZlcnNpb24gJWQuJWQuJWQpLlxuIiwKLQkgICAgIGNoZWNrX21ham9yX3ZlcnNpb24sIGNoZWNrX21pbm9yX3ZlcnNpb24sIGNoZWNrX21pY3JvX3ZlcnNpb24pOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gIGlmICgoY2hlY2tfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAotICAgICAgKChjaGVja19tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoY2hlY2tfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKLSAgICAgICgoY2hlY2tfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGNoZWNrX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmIChjaGVja19taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCi0gICAgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgcHJpbnRmKCJcbioqKiBBbiBvbGQgdmVyc2lvbiBvZiBjaGVjayAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCi0gICAgICAgICAgICAgY2hlY2tfbWFqb3JfdmVyc2lvbiwgY2hlY2tfbWlub3JfdmVyc2lvbiwgY2hlY2tfbWljcm9fdmVyc2lvbik7Ci0gICAgICBwcmludGYoIioqKiBZb3UgbmVlZCBhIHZlcnNpb24gb2YgY2hlY2sgYmVpbmcgYXQgbGVhc3QgJWQuJWQuJWQuXG4iLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKLSAgICAgIHByaW50ZigiKioqXG4iKTsKLSAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKLSAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIGNoZWNrIGxpYnJhcnkgYW5kIGhlYWRlclxuIik7Ci0gICAgICBwcmludGYoIioqKiBmaWxlIGlzIGJlaW5nIGZvdW5kLiBSZXJ1biBjb25maWd1cmUgd2l0aCB0aGUgLS13aXRoLWNoZWNrPVBBVEggb3B0aW9uXG4iKTsKLSAgICAgIHByaW50ZigiKioqIHRvIHNwZWNpZnkgdGhlIHByZWZpeCB3aGVyZSB0aGUgY29ycmVjdCB2ZXJzaW9uIHdhcyBpbnN0YWxsZWQuXG4iKTsKLSAgICB9Ci0KLSAgcmV0dXJuIDE7Ci19Ci1dLCwgbm9fY2hlY2s9eWVzLCBbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCi0KLSAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gIExJQlM9IiRhY19zYXZlX0xJQlMiCi0KLSAgaWYgdGVzdCAieCRub19jaGVjayIgPSB4IDsgdGhlbgotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgIGlmZWxzZShbJDVdLCAsIDosIFskNV0pCi0gIGVsc2UKLSAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgIGlmIHRlc3QgLWYgY29uZi5jaGVjay10ZXN0IDsgdGhlbgotICAgICAgOgotICAgIGVsc2UKLSAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIGNoZWNrIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRDSEVDS19DRkxBR1MiCi0gICAgICBMSUJTPSIkQ0hFQ0tfTElCUyAkTElCUyIKLSAgICAgIEFDX1RSWV9MSU5LKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8Y2hlY2suaD4KLV0sICwgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgotICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIGNoZWNrLiBZb3UnbGwgbmVlZCB0byBzZXQgeW91ciIKLSAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCi0gICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCi0gICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKLQllY2hvICIqKioiCi0gICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKLSAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIl0sCi0gICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciIKLSAgICAgICAgZWNobyAiKioqIHRoZSBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIiBdKQotCi0gICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgZmkKLQotICAgIENIRUNLX0NGTEFHUz0iIgotICAgIENIRUNLX0xJQlM9IiIKLQotICAgIHJtIC1mIGNvbmYuY2hlY2stdGVzdAotICAgIGlmZWxzZShbJDZdLCAsIEFDX01TR19FUlJPUihbY2hlY2sgbm90IGZvdW5kXSksIFskNl0pCi0gIGZpCi1dKQotCi0KLWRubCBBTV9QQVRIX0NIRUNLKFtNSU5JTVVNLVZFUlNJT04sIFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKLWRubCBUZXN0IGZvciBjaGVjaywgYW5kIGRlZmluZSBDSEVDS19DRkxBR1MgYW5kIENIRUNLX0xJQlMKLWRubAotCi1BQ19ERUZVTihbQU1fUEFUSF9DSEVDS10sCi1bCi0gIEFDX0FSR19XSVRIKGNoZWNrLAotICBbICAtLXdpdGgtY2hlY2s9UEFUSCAgICAgICBwcmVmaXggd2hlcmUgY2hlY2sgaXMgaW5zdGFsbGVkIFtkZWZhdWx0PWF1dG9dXSkKLQotICBBQ19BUkdfV0lUSChjaGVja2xpYm5hbWUsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1jaGVjay1saWItbmFtZT1OQU1FXSwKLSAgICAgIFtuYW1lIG9mIHRoZSBQSUMgY2hlY2sgbGlicmFyeSAoZGVmYXVsdD1jaGVjayldKSkKLQotICBtaW5fY2hlY2tfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuOC4yLCQxKQotCi0gIGlmIHRlc3QgeCR3aXRoX2NoZWNrID0geG5vOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChkaXNhYmxlZCkKLSAgICBpZmVsc2UoWyQzXSwgLCBBQ19NU0dfRVJST1IoW2Rpc2FibGluZyBjaGVjayBpcyBub3Qgc3VwcG9ydGVkXSksIFskM10pCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICJ4JHdpdGhfY2hlY2siICE9IHg7IHRoZW4KLSAgICAgIENIRUNLX0VYVFJBX0NGTEFHUz0iLUkkd2l0aF9jaGVjay9pbmNsdWRlIgotICAgICAgQ0hFQ0tfRVhUUkFfTElCUz0iLUwkd2l0aF9jaGVjay9saWIiCi0gICAgZWxzZQotICAgICAgQ0hFQ0tfRVhUUkFfQ0ZMQUdTPSIiCi0gICAgICBDSEVDS19FWFRSQV9MSUJTPSIiCi0gICAgZmkKLQotICAgIGlmIHRlc3QgeCR3aXRoX2NoZWNrbGlibmFtZSA9IHg7IHRoZW4KLSAgICAgIF9BTV9UUllfQ0hFQ0soJG1pbl9jaGVja192ZXJzaW9uLCAkQ0hFQ0tfRVhUUkFfQ0ZMQUdTLCAkQ0hFQ0tfRVhUUkFfTElCUywKLSAgICAgICAgY2hlY2tfcGljLCBbaGF2ZV9jaGVjaz10cnVlXSwgW2hhdmVfY2hlY2s9ZmFsc2VdKQotICAgICAgaWYgdGVzdCB4JGhhdmVfY2hlY2sgPSB4dHJ1ZTsgdGhlbgotICAgICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICAgICAgZWxzZQotICAgICAgICBfQU1fVFJZX0NIRUNLKCRtaW5fY2hlY2tfdmVyc2lvbiwgJENIRUNLX0VYVFJBX0NGTEFHUywgJENIRUNLX0VYVFJBX0xJQlMsCi0gICAgICAgICAgY2hlY2ssIFtoYXZlX2NoZWNrPXRydWVdLCBbaGF2ZV9jaGVjaz1mYWxzZV0pCi0gICAgICAgIGlmIHRlc3QgeCRoYXZlX2NoZWNrID0geHRydWU7IHRoZW4KLSAgICAgICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICAgICAgICBlbHNlCi0gICAgICAgICAgaWZlbHNlKFskM10sICwgQUNfTVNHX0VSUk9SKFtjaGVjayBub3QgZm91bmRdKSwgWyQzXSkKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgX0FNX1RSWV9DSEVDSygkbWluX2NoZWNrX3ZlcnNpb24sICRDSEVDS19FWFRSQV9DRkxBR1MsICRDSEVDS19FWFRSQV9MSUJTLAotICAgICAgICAkd2l0aF9jaGVja2xpYm5hbWUsIFtoYXZlX2NoZWNrPXRydWVdLCBbaGF2ZV9jaGVjaz1mYWxzZV0pCi0gICAgICBpZiB0ZXN0IHgkaGF2ZV9jaGVjayA9IHh0cnVlOyB0aGVuCi0gICAgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCi0gICAgICBlbHNlCi0gICAgICAgIGlmZWxzZShbJDNdLCAsIEFDX01TR19FUlJPUihbY2hlY2sgbm90IGZvdW5kXSksIFskM10pCi0gICAgICBmaQotICAgIGZpCi0KLSAgICBBQ19TVUJTVChDSEVDS19DRkxBR1MpCi0gICAgQUNfU1VCU1QoQ0hFQ0tfTElCUykKLSAgICBybSAtZiBjb25mLmNoZWNrLXRlc3QKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ2xpYi1nZXR0ZXh0Lm00IGIvY29tbW9uL200L2dsaWItZ2V0dGV4dC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhkNDQyZi4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ2xpYi1nZXR0ZXh0Lm00CisrKyAvZGV2L251bGwKQEAgLTEsNDMyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDAzLDIwMDQgUmVkIEhhdCwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCi0jIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCi0jIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0jCi0jIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgotIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UKLSMgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQgZnVuY3Rpb25hbGl0eS4KLSMKLSMgTWFjcm8gdG8gYWRkIGZvciB1c2luZyBHTlUgZ2V0dGV4dC4KLSMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUsIDE5OTYKLSMKLSMgTW9kaWZpZWQgdG8gbmV2ZXIgdXNlIGluY2x1ZGVkIGxpYmludGwuCi0jIE93ZW4gVGF5bG9yIDxvdGF5bG9yQHJlZGhhdC5jb20+LCAxMi8xNS8xOTk4Ci0jCi0jIE1ham9yIHJld29yayB0byByZW1vdmUgdW51c2VkIGNvZGUKLSMgT3dlbiBUYXlsb3IgPG90YXlsb3JAcmVkaGF0LmNvbT4sIDEyLzExLzIwMDIKLSMKLSMgQWRkZWQgYmV0dGVyIGhhbmRsaW5nIG9mIEFMTF9MSU5HVUFTIGZyb20gR05VIGdldHRleHQgdmVyc2lvbgotIyB3cml0dGVuIGJ5IEJydW5vIEhhaWJsZSwgT3dlbiBUYXlsb3IgPG90YXlsb3IucmVkaGF0LmNvbT4gNS8zMC8zMDAyCi0jCi0jIE1vZGlmaWVkIHRvIHJlcXVpcmUgbmdldHRleHQKLSMgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IDA4LzA2LzIwMDQKLSMKLSMgV2UgbmVlZCB0aGlzIGhlcmUgYXMgd2VsbCwgc2luY2Ugc29tZW9uZSBtaWdodCB1c2UgYXV0b2NvbmYtMi41eAotIyB0byBjb25maWd1cmUgR0xpYiB0aGVuIGFuIG9sZGVyIHZlcnNpb24gdG8gY29uZmlndXJlIGEgcGFja2FnZQotIyB1c2luZyBBTV9HTElCX0dOVV9HRVRURVhUCi1BQ19QUkVSRVEoMi41MykKLQotZG5sCi1kbmwgV2UgZ28gdG8gZ3JlYXQgbGVuZ3RocyB0byBtYWtlIHN1cmUgdGhhdCBhY2xvY2FsIHdvbid0Ci1kbmwgdHJ5IHRvIHB1bGwgaW4gdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZXNlIG1hY3JvcwotZG5sIHdoZW4gcnVubmluZyBhY2xvY2FsIGluIHRoZSBnbGliIGRpcmVjdG9yeS4KLWRubAotbTRfY29weShbQUNfREVGVU5dLFtnbGliX0RFRlVOXSkKLW00X2NvcHkoW0FDX1JFUVVJUkVdLFtnbGliX1JFUVVJUkVdKQotZG5sCi1kbmwgQXQgdGhlIGVuZCwgaWYgd2UncmUgbm90IHdpdGhpbiBnbGliLCB3ZSdsbCBkZWZpbmUgdGhlIHB1YmxpYwotZG5sIGRlZmluaXRpb25zIGluIHRlcm1zIG9mIG91ciBwcml2YXRlIGRlZmluaXRpb25zLgotZG5sCi0KLSMgR0xJQl9MQ19NRVNTQUdFUwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tCi1nbGliX0RFRlVOKFtHTElCX0xDX01FU1NBR0VTXSwKLSAgW0FDX0NIRUNLX0hFQURFUlMoW2xvY2FsZS5oXSkKLSAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KLSAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAotICAgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bG9jYWxlLmg+XSwgW3JldHVybiBMQ19NRVNTQUdFU10sCi0gICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCi0gICAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKLSAgICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCi0gICAgZmkKLSAgZmldKQotCi0jIEdMSUJfUEFUSF9QUk9HX1dJVEhfVEVTVAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWRubCBHTElCX1BBVEhfUFJPR19XSVRIX1RFU1QoVkFSSUFCTEUsIFBST0ctVE8tQ0hFQ0stRk9SLAotZG5sICAgVEVTVC1QRVJGT1JNRUQtT04tRk9VTkRfUFJPR1JBTSBbLCBWQUxVRS1JRi1OT1QtRk9VTkQgWywgUEFUSF1dKQotZ2xpYl9ERUZVTihbR0xJQl9QQVRIX1BST0dfV0lUSF9URVNUXSwKLVsjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiQyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkMjsgYWNfd29yZD1bJF0yCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkYWNfd29yZF0pCi1BQ19DQUNIRV9WQUwoYWNfY3ZfcGF0aF8kMSwKLVtjYXNlICJbJF0kMSIgaW4KLSAgLyopCi0gIGFjX2N2X3BhdGhfJDE9IlskXSQxIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKLSAgZm9yIGFjX2RpciBpbiBpZmVsc2UoWyQ1XSwgLCAkUEFUSCwgWyQ1XSk7IGRvCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KLSAgICAgIGlmIFskM107IHRoZW4KLQlhY19jdl9wYXRoXyQxPSIkYWNfZGlyLyRhY193b3JkIgotCWJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCi1kbmwgSWYgbm8gNHRoIGFyZyBpcyBnaXZlbiwgbGVhdmUgdGhlIGNhY2hlIHZhcmlhYmxlIHVuc2V0LAotZG5sIHNvIEFDX1BBVEhfUFJPR1Mgd2lsbCBrZWVwIGxvb2tpbmcuCi1pZmVsc2UoWyQ0XSwgLCAsIFsgIHRlc3QgLXogIlskXWFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQ0IgotXSlkbmwKLSAgOzsKLWVzYWNdKWRubAotJDE9IiRhY19jdl9wYXRoXyQxIgotaWYgdGVzdCBpZmVsc2UoWyQ0XSwgLCBbLW4gIlskXSQxIl0sIFsiWyRdJDEiICE9ICIkNCJdKTsgdGhlbgotICBBQ19NU0dfUkVTVUxUKFskXSQxKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLUFDX1NVQlNUKCQxKWRubAotXSkKLQotIyBHTElCX1dJVEhfTkxTCi0jLS0tLS0tLS0tLS0tLS0tLS0KLWdsaWJfREVGVU4oW0dMSUJfV0lUSF9OTFNdLAotICBkbmwgTkxTIGlzIG9ibGlnYXRvcnkKLSAgW1VTRV9OTFM9eWVzCi0gICAgQUNfU1VCU1QoVVNFX05MUykKLQotICAgIGd0X2N2X2hhdmVfZ2V0dGV4dD1ubwotCi0gICAgQ0FUT0JKRVhUPU5PTkUKLSAgICBYR0VUVEVYVD06Ci0gICAgSU5UTExJQlM9Ci0KLSAgICBBQ19DSEVDS19IRUFERVIobGliaW50bC5oLAotICAgICBbZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPSJubyIKLSAgICAgIGxpYmludGxfZXh0cmFfbGlicz0iIgotCi0gICAgICAjCi0gICAgICAjIEZpcnN0IGNoZWNrIGluIGxpYmMKLSAgICAgICMKLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYywKLSAgICAgICAgW0FDX1RSWV9MSU5LKFsKLSNpbmNsdWRlIDxsaWJpbnRsLmg+Ci1dLAotICAgICAgICAgW3JldHVybiAhbmdldHRleHQgKCIiLCIiLCAxKV0sCi0JICBndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmM9eWVzLAotICAgICAgICAgIGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYz1ubykKLSAgICAgICAgXSkKLQotICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgPSAieWVzIiA7IHRoZW4KLQkgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIGRnZXR0ZXh0IGluIGxpYmNdLCBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMsCi0gICAgICAgIAlbQUNfVFJZX0xJTksoWwotI2luY2x1ZGUgPGxpYmludGwuaD4KLV0sCi0JICAgICAgICAgIFtyZXR1cm4gIWRnZXR0ZXh0ICgiIiwiIildLAotCQkgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYz15ZXMsCi0JICAgICAgICAgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYz1ubykKLSAgICAgICAgCV0pCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiIDsgdGhlbgotICAgICAgICBBQ19DSEVDS19GVU5DUyhiaW5kX3RleHRkb21haW5fY29kZXNldCkKLSAgICAgIGZpCi0KLSAgICAgICMKLSAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBldmVyeXRoaW5nIHdlIHdhbnQsIGNoZWNrIGluIGxpYmludGwKLSAgICAgICMKLSAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiIFwKLQkgfHwgdGVzdCAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgIT0gInllcyIgXAotICAgICAgICAgfHwgdGVzdCAiJGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiICE9ICJ5ZXMiIDsgdGhlbgotCi0gICAgICAgIEFDX0NIRUNLX0xJQihpbnRsLCBiaW5kdGV4dGRvbWFpbiwKLQkgICAgW0FDX0NIRUNLX0xJQihpbnRsLCBuZ2V0dGV4dCwKLQkJICAgIFtBQ19DSEVDS19MSUIoaW50bCwgZGdldHRleHQsCi0JCQkgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPXllcyldKV0pCi0KLQlpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiAhPSAieWVzIiA7IHRoZW4KLQkgIEFDX01TR19DSEVDS0lORyhbaWYgLWxpY29udiBpcyBuZWVkZWQgdG8gdXNlIGdldHRleHRdKQotCSAgQUNfTVNHX1JFU1VMVChbXSkKLSAgCSAgQUNfQ0hFQ0tfTElCKGludGwsIG5nZXR0ZXh0LAotICAgICAgICAgIAlbQUNfQ0hFQ0tfTElCKGludGwsIGRjZ2V0dGV4dCwKLQkJICAgICAgIFtndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGw9eWVzCi0JCQlsaWJpbnRsX2V4dHJhX2xpYnM9LWxpY29udl0sCi0JCQk6LC1saWNvbnYpXSwKLQkJOiwtbGljb252KQotICAgICAgICBmaQotCi0gICAgICAgICMKLSAgICAgICAgIyBJZiB3ZSBmb3VuZCBsaWJpbnRsLCB0aGVuIGNoZWNrIGluIGl0IGZvciBiaW5kX3RleHRkb21haW5fY29kZXNldCgpOwotICAgICAgICAjIHdlJ2xsIHByZWZlciBsaWJjIGlmIG5laXRoZXIgaGF2ZSBiaW5kX3RleHRkb21haW5fY29kZXNldCgpLAotICAgICAgICAjIGFuZCBib3RoIGhhdmUgZGdldHRleHQgYW5kIG5nZXR0ZXh0Ci0gICAgICAgICMKLSAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bCIgPSAieWVzIiA7IHRoZW4KLSAgICAgICAgICBnbGliX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICAgICAgTElCUz0iJExJQlMgLWxpbnRsICRsaWJpbnRsX2V4dHJhX2xpYnMiCi0gICAgICAgICAgdW5zZXQgYWNfY3ZfZnVuY19iaW5kX3RleHRkb21haW5fY29kZXNldAotICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KQotICAgICAgICAgIExJQlM9IiRnbGliX3NhdmVfTElCUyIKLQotICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiA9ICJ5ZXMiIDsgdGhlbgotICAgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjPW5vCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgPSAieWVzIiBcCi0JCSYmIHRlc3QgIiRndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMiID0gInllcyI7IHRoZW4KLSAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPW5vCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiIFwKLQl8fCB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIGd0X2N2X2hhdmVfZ2V0dGV4dD15ZXMKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KLSAgICAgICAgSU5UTExJQlM9Ii1saW50bCAkbGliaW50bF9leHRyYV9saWJzIgotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAiJGd0X2N2X2hhdmVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgotCUFDX0RFRklORShIQVZFX0dFVFRFWFQsMSwKLQkgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQotCUdMSUJfUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dGTVQsIG1zZ2ZtdCwKLQkgIFt0ZXN0IC16ICJgJGFjX2Rpci8kYWNfd29yZCAtaCAyPiYxIHwgZ3JlcCAnZHYgJ2AiXSwgbm8pZG5sCi0JaWYgdGVzdCAiJE1TR0ZNVCIgIT0gIm5vIjsgdGhlbgotICAgICAgICAgIGdsaWJfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgICAgICBMSUJTPSIkTElCUyAkSU5UTExJQlMiCi0JICBBQ19DSEVDS19GVU5DUyhkY2dldHRleHQpCi0JICBNU0dGTVRfT1BUUz0KLQkgIEFDX01TR19DSEVDS0lORyhbaWYgbXNnZm10IGFjY2VwdHMgLWNdKQotCSAgR0xJQl9SVU5fUFJPRyhbJE1TR0ZNVCAtYyAtbyAvZGV2L251bGxdLFsKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IHRlc3QgMS4wXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwNy0wMi0xNSAxMjowMSswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiB0ZXN0IDxmb29AYmFyLnh4PlxuIgotIkxhbmd1YWdlLVRlYW06IEMgPExMQGxpLm9yZz5cbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLV0sIFtNU0dGTVRfT1BUUz0tYzsgQUNfTVNHX1JFU1VMVChbeWVzXSldLCBbQUNfTVNHX1JFU1VMVChbbm9dKV0pCi0JICBBQ19TVUJTVChNU0dGTVRfT1BUUykKLQkgIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQotCSAgR0xJQl9QQVRIX1BST0dfV0lUSF9URVNUKFhHRVRURVhULCB4Z2V0dGV4dCwKLQkgICAgW3Rlc3QgLXogImAkYWNfZGlyLyRhY193b3JkIC1oIDI+JjEgfCBncmVwICcoSEVMUCknYCJdLCA6KQotCSAgQUNfVFJZX0xJTksoLCBbZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOwotCQkJIHJldHVybiBfbmxfbXNnX2NhdF9jbnRyXSwKLQkgICAgW0NBVE9CSkVYVD0uZ21vCi0gICAgICAgICAgICAgREFUQURJUk5BTUU9c2hhcmVdLAotCSAgICBbY2FzZSAkaG9zdCBpbgotCSAgICAqLSotc29sYXJpcyopCi0JICAgIGRubCBPbiBTb2xhcmlzLCBpZiBiaW5kX3RleHRkb21haW5fY29kZXNldCBpcyBpbiBsaWJjLAotCSAgICBkbmwgR05VIGZvcm1hdCBtZXNzYWdlIGNhdGFsb2cgaXMgYWx3YXlzIHN1cHBvcnRlZCwKLSAgICAgICAgICAgIGRubCBzaW5jZSBib3RoIGFyZSBhZGRlZCB0byB0aGUgbGliYyBhbGwgdG9nZXRoZXIuCi0JICAgIGRubCBIZW5jZSwgd2UnZCBsaWtlIHRvIGdvIHdpdGggREFUQURJUk5BTUU9c2hhcmUgYW5kCi0JICAgIGRubCBhbmQgQ0FUT0JKRVhUPS5nbW8gaW4gdGhpcyBjYXNlLgotICAgICAgICAgICAgQUNfQ0hFQ0tfRlVOQyhiaW5kX3RleHRkb21haW5fY29kZXNldCwKLQkgICAgICBbQ0FUT0JKRVhUPS5nbW8KLSAgICAgICAgICAgICAgIERBVEFESVJOQU1FPXNoYXJlXSwKLQkgICAgICBbQ0FUT0JKRVhUPS5tbwotICAgICAgICAgICAgICAgREFUQURJUk5BTUU9bGliXSkKLQkgICAgOzsKLQkgICAgKikKLQkgICAgQ0FUT0JKRVhUPS5tbwotICAgICAgICAgICAgREFUQURJUk5BTUU9bGliCi0JICAgIDs7Ci0JICAgIGVzYWNdKQotICAgICAgICAgIExJQlM9IiRnbGliX3NhdmVfTElCUyIKLQkgIElOU1RPQkpFWFQ9Lm1vCi0JZWxzZQotCSAgZ3RfY3ZfaGF2ZV9nZXR0ZXh0PW5vCi0JZmkKLSAgICAgIGZpCi0gICAgXSkKLQotICAgIGlmIHRlc3QgIiRndF9jdl9oYXZlX2dldHRleHQiID0gInllcyIgOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoRU5BQkxFX05MUywgMSwKLSAgICAgICAgW2Fsd2F5cyBkZWZpbmVkIHRvIGluZGljYXRlIHRoYXQgaTE4biBpcyBlbmFibGVkXSkKLSAgICBmaQotCi0gICAgZG5sIFRlc3Qgd2hldGhlciB3ZSByZWFsbHkgZm91bmQgR05VIHhnZXR0ZXh0LgotICAgIGlmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCi0gICAgICBkbmwgSWYgaXQgaXMgbm90IEdOVSB4Z2V0dGV4dCB3ZSBkZWZpbmUgaXQgYXMgOiBzbyB0aGF0IHRoZQotICAgICAgZG5sIE1ha2VmaWxlcyBzdGlsbCBjYW4gd29yay4KLSAgICAgIGlmICRYR0VUVEVYVCAtLW9taXQtaGVhZGVyIC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgOiA7Ci0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19SRVNVTFQoCi0JICBbZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXRdKQotICAgICAgICBYR0VUVEVYVD0iOiIKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICMgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBwby8gZGlyZWN0b3J5LgotICAgIFBPU1VCPXBvCi0KLSAgICBBQ19PVVRQVVRfQ09NTUFORFMoCi0gICAgICBbY2FzZSAiJENPTkZJR19GSUxFUyIgaW4gKnBvL01ha2VmaWxlLmluKikKLSAgICAgICAgc2VkIC1lICIvUE9URklMRVMgPS9yIHBvL1BPVEZJTEVTIiBwby9NYWtlZmlsZS5pbiA+IHBvL01ha2VmaWxlCi0gICAgICBlc2FjXSkKLQotICAgIGRubCBUaGVzZSBydWxlcyBhcmUgc29sZWx5IGZvciB0aGUgZGlzdHJpYnV0aW9uIGdvYWwuICBXaGlsZSBkb2luZyB0aGlzCi0gICAgZG5sIHdlIG9ubHkgaGF2ZSB0byBrZWVwIGV4YWN0bHkgb25lIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBjYXRhbG9ncwotICAgIGRubCBpbiBjb25maWd1cmUuaW4uCi0gICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkbGFuZy5nbW8iCi0gICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkbGFuZy5wbyIKLSAgICBkb25lCi0KLSAgICBkbmwgTWFrZSBhbGwgdmFyaWFibGVzIHdlIHVzZSBrbm93biB0byBhdXRvY29uZi4KLSAgICBBQ19TVUJTVChDQVRBTE9HUykKLSAgICBBQ19TVUJTVChDQVRPQkpFWFQpCi0gICAgQUNfU1VCU1QoREFUQURJUk5BTUUpCi0gICAgQUNfU1VCU1QoR01PRklMRVMpCi0gICAgQUNfU1VCU1QoSU5TVE9CSkVYVCkKLSAgICBBQ19TVUJTVChJTlRMTElCUykKLSAgICBBQ19TVUJTVChQT19JTl9EQVRBRElSX1RSVUUpCi0gICAgQUNfU1VCU1QoUE9fSU5fREFUQURJUl9GQUxTRSkKLSAgICBBQ19TVUJTVChQT0ZJTEVTKQotICAgIEFDX1NVQlNUKFBPU1VCKQotICBdKQotCi0jIEFNX0dMSUJfR05VX0dFVFRFWFQKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEbyBjaGVja3MgbmVjZXNzYXJ5IGZvciB1c2Ugb2YgZ2V0dGV4dC4gSWYgYSBzdWl0YWJsZSBpbXBsZW1lbnRhdGlvbgotIyBvZiBnZXR0ZXh0IGlzIGZvdW5kIGluIGVpdGhlciBpbiBsaWJpbnRsIG9yIGluIHRoZSBDIGxpYnJhcnksCi0jIGl0IHdpbGwgc2V0IElOVExMSUJTIHRvIHRoZSBsaWJyYXJpZXMgbmVlZGVkIGZvciB1c2Ugb2YgZ2V0dGV4dAotIyBhbmQgQUNfREVGSU5FKCkgSEFWRV9HRVRURVhUIGFuZCBFTkFCTEVfTkxTLiAoVGhlIHNoZWxsIHZhcmlhYmxlCi0jIGd0X2N2X2hhdmVfZ2V0dGV4dCB3aWxsIGJlIHNldCB0byAieWVzIi4pIEl0IHdpbGwgYWxzbyBjYWxsIEFDX1NVQlNUKCkKLSMgb24gdmFyaW91cyB2YXJpYWJsZXMgbmVlZGVkIGJ5IHRoZSBNYWtlZmlsZS5pbi5pbiBpbnN0YWxsZWQgYnkKLSMgZ2xpYi1nZXR0ZXh0aXplLgotZG5sCi1nbGliX0RFRlVOKFtHTElCX0dOVV9HRVRURVhUXSwKLSAgW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotICAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAotCi0gICBHTElCX0xDX01FU1NBR0VTCi0gICBHTElCX1dJVEhfTkxTCi0KLSAgIGlmIHRlc3QgIiRndF9jdl9oYXZlX2dldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgaWYgdGVzdCAieCRBTExfTElOR1VBUyIgPSAieCI7IHRoZW4KLSAgICAgICBMSU5HVUFTPQotICAgICBlbHNlCi0gICAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciBjYXRhbG9ncyB0byBiZSBpbnN0YWxsZWQpCi0gICAgICAgTkVXX0xJTkdVQVM9Ci0gICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgICAgIHVzZWl0PW5vCi0gICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJHtMSU5HVUFTLSVVTlNFVCV9IjsgdGhlbgotICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgotICAgICAgICAgZmkKLSAgICAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KLSAJICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKLSAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgotICAgICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKLSAgICAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCi0gICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgotICAgICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCi0gICAgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBkb25lCi0gICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgotICAgICAgICAgICBORVdfTElOR1VBUz0iJE5FV19MSU5HVUFTICRwcmVzZW50bGFuZyIKLSAgICAgICAgIGZpCi0gICAgICAgZG9uZQotICAgICAgIExJTkdVQVM9JE5FV19MSU5HVUFTCi0gICAgICAgQUNfTVNHX1JFU1VMVCgkTElOR1VBUykKLSAgICAgZmkKLQotICAgICBkbmwgQ29uc3RydWN0IGxpc3Qgb2YgbmFtZXMgb2YgY2F0YWxvZyBmaWxlcyB0byBiZSBjb25zdHJ1Y3RlZC4KLSAgICAgaWYgdGVzdCAtbiAiJExJTkdVQVMiOyB0aGVuCi0gICAgICAgZm9yIGxhbmcgaW4gJExJTkdVQVM7IGRvIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmckQ0FUT0JKRVhUIjsgZG9uZQotICAgICBmaQotICAgZmkKLQotICAgZG5sIElmIHRoZSBBQ19DT05GSUdfQVVYX0RJUiBtYWNybyBmb3IgYXV0b2NvbmYgaXMgdXNlZCB3ZSBwb3NzaWJseQotICAgZG5sIGZpbmQgdGhlIG1raW5zdGFsbGRpcnMgc2NyaXB0IGluIGFub3RoZXIgc3ViZGlyIGJ1dCAoJHRvcF9zcmNkaXIpLgotICAgZG5sIFRyeSB0byBsb2NhdGUgaXMuCi0gICBNS0lOU1RBTExESVJTPQotICAgaWYgdGVzdCAtbiAiJGFjX2F1eF9kaXIiOyB0aGVuCi0gICAgIE1LSU5TVEFMTERJUlM9IiRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiCi0gICBmaQotICAgaWYgdGVzdCAteiAiJE1LSU5TVEFMTERJUlMiOyB0aGVuCi0gICAgIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMiCi0gICBmaQotICAgQUNfU1VCU1QoTUtJTlNUQUxMRElSUykKLQotICAgZG5sIEdlbmVyYXRlIGxpc3Qgb2YgZmlsZXMgdG8gYmUgcHJvY2Vzc2VkIGJ5IHhnZXR0ZXh0IHdoaWNoIHdpbGwKLSAgIGRubCBiZSBpbmNsdWRlZCBpbiBwby9NYWtlZmlsZS4KLSAgIHRlc3QgLWQgcG8gfHwgbWtkaXIgcG8KLSAgIGlmIHRlc3QgIngkc3JjZGlyIiAhPSAieC4iOyB0aGVuCi0gICAgIGlmIHRlc3QgInhgZWNobyAkc3JjZGlyIHwgc2VkICdzQC8uKkBAJ2AiID0gIngiOyB0aGVuCi0gICAgICAgcG9zcmNwcmVmaXg9IiRzcmNkaXIvIgotICAgICBlbHNlCi0gICAgICAgcG9zcmNwcmVmaXg9Ii4uLyRzcmNkaXIvIgotICAgICBmaQotICAgZWxzZQotICAgICBwb3NyY3ByZWZpeD0iLi4vIgotICAgZmkKLSAgIHJtIC1mIHBvL1BPVEZJTEVTCi0gICBzZWQgLWUgIi9eIy9kIiAtZSAiL15cJC9kIiAtZSAicywuKiwJJHBvc3JjcHJlZml4JiBcXFxcLCIgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iIFwKLQk8ICRzcmNkaXIvcG8vUE9URklMRVMuaW4gPiBwby9QT1RGSUxFUwotICBdKQotCi0jIEFNX0dMSUJfREVGSU5FX0xPQ0FMRURJUihWQVJJQUJMRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgVkFSSUFCTEUgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIGNhdGFsb2cgZmlsZXMgd2lsbAotIyBiZSBpbnN0YWxsZWQgYnkgcG8vTWFrZWZpbGUuCi1nbGliX0RFRlVOKFtHTElCX0RFRklORV9MT0NBTEVESVJdLAotW2dsaWJfUkVRVUlSRShbR0xJQl9HTlVfR0VUVEVYVF0pZG5sCi1nbGliX3NhdmVfcHJlZml4PSIkcHJlZml4IgotZ2xpYl9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi1nbGliX3NhdmVfZGF0YXJvb3RkaXI9IiRkYXRhcm9vdGRpciIKLXRlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKLXRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JHByZWZpeAotZGF0YXJvb3RkaXI9YGV2YWwgZWNobyAiJHtkYXRhcm9vdGRpcn0iYAotaWYgdGVzdCAieCRDQVRPQkpFWFQiID0gIngubW8iIDsgdGhlbgotICBsb2NhbGVkaXI9YGV2YWwgZWNobyAiJHtsaWJkaXJ9L2xvY2FsZSJgCi1lbHNlCi0gIGxvY2FsZWRpcj1gZXZhbCBlY2hvICIke2RhdGFkaXJ9L2xvY2FsZSJgCi1maQotcHJlZml4PSIkZ2xpYl9zYXZlX3ByZWZpeCIKLWV4ZWNfcHJlZml4PSIkZ2xpYl9zYXZlX2V4ZWNfcHJlZml4IgotZGF0YXJvb3RkaXI9IiRnbGliX3NhdmVfZGF0YXJvb3RkaXIiCi1BQ19ERUZJTkVfVU5RVU9URUQoJDEsICIkbG9jYWxlZGlyIiwKLSAgW0RlZmluZSB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGNhdGFsb2dzIHdpbGwgYmUgaW5zdGFsbGVkXSkKLV0pCi0KLWRubAotZG5sIE5vdyB0aGUgZGVmaW5pdGlvbnMgdGhhdCBhY2xvY2FsIHdpbGwgZmluZAotZG5sCi1pZmRlZihnbGliX2NvbmZpZ3VyZV9pbixbXSxbCi1BQ19ERUZVTihbQU1fR0xJQl9HTlVfR0VUVEVYVF0sW0dMSUJfR05VX0dFVFRFWFQoJEApXSkKLUFDX0RFRlVOKFtBTV9HTElCX0RFRklORV9MT0NBTEVESVJdLFtHTElCX0RFRklORV9MT0NBTEVESVIoJEApXSkKLV0pZG5sCi0KLSMgR0xJQl9SVU5fUFJPRyhQUk9HUkFNLCBURVNULUZJTEUsIFtBQ1RJT04tSUYtUEFTU10sIFtBQ1RJT04tSUYtRkFJTF0pCi0jCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHdpdGggVEVTVC1GSUxFIGFzIGl0cyBjb250ZW50cyBhbmQgcGFzcyB0aGUKLSMgZmlsZSBuYW1lIHRvIFBST0dSQU0uICBQZXJmb3JtIEFDVElPTi1JRi1QQVNTIGlmIFBST0dSQU0gZXhpdHMgd2l0aAotIyAwIGFuZCBwZXJmb3JtIEFDVElPTi1JRi1GQUlMIGZvciBhbnkgb3RoZXIgZXhpdCBzdGF0dXMuCi1BQ19ERUZVTihbR0xJQl9SVU5fUFJPR10sCi1bY2F0ID5jb25mdGVzdC5mb28gPDxfQUNFT0YKLSQyCi1fQUNFT0YKLWlmIEFDX1JVTl9MT0coWyQxIGNvbmZ0ZXN0LmZvb10pOyB0aGVuCi0gIG00X2lmdmFsKFskM10sIFskM10sIFs6XSkKLW00X2lmdmFsbihbJDRdLCBbZWxzZSAkNF0pZG5sCi1lY2hvICIkYXNfbWU6IGZhaWxlZCBpbnB1dCB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECi1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LmZvbyA+JkFTX01FU1NBR0VfTE9HX0ZECi1maV0pCi0KZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBiL2NvbW1vbi9tNC9nc3QtYXJjaC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkNzY4MC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWFyY2gubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotZG5sIEFHX0dTVF9BUkNICi1kbmwgc2V0cyB1cCBkZWZpbmVzIGFuZCBhdXRvbWFrZSBjb25kaXRpb25hbHMgZm9yIGhvc3QgYXJjaGl0ZWN0dXJlCi1kbmwgY2hlY2tzIGVuZGlhbm5lc3MKLWRubCBkZWZpbmVzIEhPU1RfQ1BVCi0KLUFDX0RFRlVOKFtBR19HU1RfQVJDSF0sCi1bCi0gIGRubCBEZXRlcm1pbmUgQ1BVCi0gIGNhc2UgIngke3RhcmdldF9jcHV9IiBpbgotICAgIHhpPzg2IHwgeGs/IHwgeGk/ODZfNjQpCi0gICAgICBjYXNlICR0YXJnZXRfb3MgaW4KLSAgICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgICAgQUNfQ0hFQ0tfREVDTChbX19pMzg2XSwJW0kzODZfQUJJPSJ5ZXMiXSwgW0kzODZfQUJJPSJubyJdKQotICAgICAgICAgICAgQUNfQ0hFQ0tfREVDTChbX19hbWQ2NF0sIFtBTUQ2NF9BQkk9InllcyJdLCBbQU1ENjRfQUJJPSJubyJdKQotCi0gICAgICAgICAgICBpZiB0ZXN0ICJ4JEkzODZfQUJJIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgICAgICAgICAgIEhBVkVfQ1BVX0kzODY9eWVzCi0gICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfSTM4NiwgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhbiB4ODZdKQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGlmIHRlc3QgIngkQU1ENjRfQUJJIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgICAgICAgICAgICBIQVZFX0NQVV9YODZfNjQ9eWVzCi0gICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX1g4Nl82NCwgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIHg4Nl82NF0pCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgICopCi0gICAgICAgICAgICBIQVZFX0NQVV9JMzg2PXllcwotICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0kzODYsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4geDg2XSkKLQotICAgICAgICAgICAgZG5sIEZJWE1FIGNvdWxkIHVzZSBzb21lIGJldHRlciBkZXRlY3Rpb24KLSAgICAgICAgICAgIGRubCAoaWUgQ1BVSUQpCi0gICAgICAgICAgICBjYXNlICJ4JHt0YXJnZXRfY3B1fSIgaW4KLSAgICAgICAgICAgICAgeGkzODYgfCB4aTQ4NikgOzsKLSAgICAgICAgICAgICopCi0gICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX1JEVFNDLCAxLCBbRGVmaW5lIGlmIFJEVFNDIGlzIGF2YWlsYWJsZV0pIDs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICB4cG93ZXJwYykKLSAgICAgIEhBVkVfQ1BVX1BQQz15ZXMKLSAgICAgIEFDX0RFRklORShIQVZFX0NQVV9QUEMsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBQb3dlclBDXSkgOzsKLSAgICB4cG93ZXJwYzY0KQotICAgICAgSEFWRV9DUFVfUFBDNjQ9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfUFBDNjQsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSA2NCBiaXQgUG93ZXJQQ10pIDs7Ci0gICAgeGFscGhhKikKLSAgICAgIEhBVkVfQ1BVX0FMUEhBPXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0FMUEhBLCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIEFscGhhXSkgOzsKLSAgICB4YXJjKikKLSAgICAgIEhBVkVfQ1BVX0FSQz15ZXMKLSAgICAgIEFDX0RFRklORShIQVZFX0NQVV9BUkMsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4gQVJDXSkgOzsKLSAgICB4YXJtKikKLSAgICAgIEhBVkVfQ1BVX0FSTT15ZXMKLSAgICAgIEFDX0RFRklORShIQVZFX0NQVV9BUk0sIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4gQVJNXSkgOzsKLSAgICB4YWFyY2g2NCopCi0gICAgICBIQVZFX0NQVV9BQVJDSDY0PXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0FBUkNINjQsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgQUFSQ0g2NF0pIDs7Ci0gICAgeHNwYXJjKikKLSAgICAgIEhBVkVfQ1BVX1NQQVJDPXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX1NQQVJDLCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgU1BBUkNdKSA7OwotICAgIHhtaXBzKikKLSAgICAgIEhBVkVfQ1BVX01JUFM9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfTUlQUywgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIE1JUFNdKSA7OwotICAgIHhocHBhKikKLSAgICAgIEhBVkVfQ1BVX0hQUEE9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfSFBQQSwgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIEhQUEFdKSA7OwotICAgIHhzMzkwKikKLSAgICAgIEhBVkVfQ1BVX1MzOTA9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfUzM5MCwgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIFMzOTBdKSA7OwotICAgIHhpYTY0KikKLSAgICAgIEhBVkVfQ1BVX0lBNjQ9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfSUE2NCwgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIElBNjRdKSA7OwotICAgIHhtNjhrKikKLSAgICAgIEhBVkVfQ1BVX002OEs9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfTTY4SywgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIE02OEtdKSA7OwotICAgIHh4ODZfNjQpCi0gICAgICBIQVZFX0NQVV9YODZfNjQ9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfWDg2XzY0LCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgeDg2XzY0XSkgOzsKLSAgICB4Y3JpcykKLSAgICAgIEhBVkVfQ1BVX0NSSVM9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQ1JJUywgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIENSSVNdKSA7OwotICAgIHhjcmlzdjMyKQotICAgICAgSEFWRV9DUFVfQ1JJU1YzMj15ZXMKLSAgICAgIEFDX0RFRklORShIQVZFX0NQVV9DUklTVjMyLCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgQ1JJU3YzMl0pIDs7Ci0gIGVzYWMKLQotICBkbmwgRGV0ZXJtaW5lIGVuZGlhbm5lc3MKLSAgQUNfQ19CSUdFTkRJQU4KLQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9JMzg2LCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0kzODYiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9QUEMsICAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX1BQQyIgPSAieHllcyIpCi0gIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX1BQQzY0LCAgICAgIHRlc3QgIngkSEFWRV9DUFVfUFBDNjQiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9BTFBIQSwgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0FMUEhBIiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfQVJDLCAgICAgICAgdGVzdCAieCRIQVZFX0NQVV9BUkMiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9BUk0sICAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0FSTSIgPSAieHllcyIpCi0gIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX1NQQVJDLCAgICAgIHRlc3QgIngkSEFWRV9DUFVfU1BBUkMiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9IUFBBLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0hQUEEiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9NSVBTLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX01JUFMiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9TMzkwLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX1MzOTAiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9JQTY0LCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0lBNjQiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9NNjhLLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX002OEsiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9YODZfNjQsICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX1g4Nl82NCIgPSAieHllcyIpCi0gIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX0NSSVMsICAgICAgIHRlc3QgIngkSEFWRV9DUFVfQ1JJUyIgPSAieHllcyIpCi0gIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX0NSSVNWMzIsICAgIHRlc3QgIngkSEFWRV9DUFVfQ1JJU1YzMiIgPSAieHllcyIpCi0KLSAgQUNfREVGSU5FX1VOUVVPVEVEKEhPU1RfQ1BVLCAiJGhvc3RfY3B1IiwgW3RoZSBob3N0IENQVV0pCi0gIEFDX0RFRklORV9VTlFVT1RFRChUQVJHRVRfQ1BVLCAiJHRhcmdldF9jcHUiLCBbdGhlIHRhcmdldCBDUFVdKQotXSkKLQotZG5sIGNoZWNrIGlmIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHdvcmtzIGNvcnJlY3RseQotQUNfREVGVU4oW0FHX0dTVF9VTkFMSUdORURfQUNDRVNTXSwgWwotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHdvcmtzIGNvcnJlY3RseV0pCi0gIGlmIHRlc3QgeCIkYXNfY3ZfdW5hbGlnbmVkX2FjY2VzcyIgPSB4IDsgdGhlbgotICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgIGFscGhhKnxhcmMqfGFybSp8YWFyY2g2NCp8aHAqfG1pcHMqfHNoKnxzcGFyYyp8aWE2NCopCi0gICAgICAgIF9BU19FQ0hPX04oWyhibGFja2xpc3RlZCkgXSkKLSAgICAgICAgYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz1ubwotCTs7Ci0gICAgICBpPzg2Knx4ODZfNjQqfGFtZDY0Knxwb3dlcnBjKnxtNjhrKnxjcmlzKikKLSAgICAgICAgX0FTX0VDSE9fTihbKHdoaXRlbGlzdGVkKSBdKQotICAgICAgICBhc19jdl91bmFsaWduZWRfYWNjZXNzPXllcwotCTs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgX0FTX0VDSE9fTihbKGNhY2hlZCkgXSkKLSAgZmkKLSAgaWYgdGVzdCB4IiRhc19jdl91bmFsaWduZWRfYWNjZXNzIiA9IHggOyB0aGVuCi0gICAgQUNfVFJZX1JVTihbCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIGNoYXIgYXJyYXlbXSA9ICJBQkNERUZHSCI7Ci0gIHVuc2lnbmVkIGludCBpYXJyYXlbMl07Ci0gIG1lbWNweShpYXJyYXksYXJyYXksOCk7Ci0jZGVmaW5lIEdFVCh4KSAoKih1bnNpZ25lZCBpbnQgKikoKGNoYXIgKilpYXJyYXkgKyAoeCkpKQotICBpZihHRVQoMCkgIT0gMHg0MTQyNDM0NCAmJiBHRVQoMCkgIT0gMHg0NDQzNDI0MSkgcmV0dXJuIDE7Ci0gIGlmKEdFVCgxKSAhPSAweDQyNDM0NDQ1ICYmIEdFVCgxKSAhPSAweDQ1NDQ0MzQyKSByZXR1cm4gMTsKLSAgaWYoR0VUKDIpICE9IDB4NDM0NDQ1NDYgJiYgR0VUKDIpICE9IDB4NDY0NTQ0NDMpIHJldHVybiAxOwotICBpZihHRVQoMykgIT0gMHg0NDQ1NDY0NyAmJiBHRVQoMykgIT0gMHg0NzQ2NDU0NCkgcmV0dXJuIDE7Ci0gIHJldHVybiAwOwotfQotICAgIF0sIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9InllcyIsIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9Im5vIikKLSAgZmkKLSAgQUNfTVNHX1JFU1VMVCgkYXNfY3ZfdW5hbGlnbmVkX2FjY2VzcykKLSAgaWYgdGVzdCAiJGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3MiID0gInllcyI7IHRoZW4KLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9VTkFMSUdORURfQUNDRVNTLCAxLAotICAgICAgW2RlZmluZWQgaWYgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3Mgd29ya3MgY29ycmVjdGx5XSkKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgYi9jb21tb24vbTQvZ3N0LWFyZ3MubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MjgxMjMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1hcmdzLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzg2ICswLDAgQEAKLWRubCBjb25maWd1cmUtdGltZSBvcHRpb25zIHNoYXJlZCBhbW9uZyBnc3RyZWFtZXIgbW9kdWxlcwotCi1kbmwgQUdfR1NUX0FSR19ERUJVRwotZG5sIEFHX0dTVF9BUkdfUFJPRklMSU5HCi1kbmwgQUdfR1NUX0FSR19WQUxHUklORAotZG5sIEFHX0dTVF9BUkdfR0NPVgotCi1kbmwgQUdfR1NUX0FSR19FWEFNUExFUwotCi1kbmwgQUdfR1NUX0FSR19XSVRIX1BLR19DT05GSUdfUEFUSAotZG5sIEFHX0dTVF9BUkdfV0lUSF9QQUNLQUdFX05BTUUKLWRubCBBR19HU1RfQVJHX1dJVEhfUEFDS0FHRV9PUklHSU4KLQotZG5sIEFHX0dTVF9BUkdfV0lUSF9QTFVHSU5TCi1kbmwgQUdfR1NUX0NIRUNLX1BMVUdJTgotZG5sIEFHX0dTVF9ESVNBQkxFX1BMVUdJTgotCi1kbmwgQUdfR1NUX0FSR19FTkFCTEVfRVhURVJOQUwKLWRubCBBR19HU1RfQVJHX0VOQUJMRV9FWFBFUklNRU5UQUwKLWRubCBBR19HU1RfQVJHX0VOQUJMRV9CUk9LRU4KLQotZG5sIEFHX0dTVF9BUkdfRElTQUJMRV9GQVRBTF9XQVJOSU5HUwotQUNfREVGVU4oW0FHX0dTVF9BUkdfREVCVUddLAotWwotICBkbmwgZGVidWdnaW5nIHN0dWZmCi0gIEFDX0FSR19FTkFCTEUoZGVidWcsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kZWJ1Z10sW2Rpc2FibGUgYWRkaXRpb24gb2YgLWcgZGVidWdnaW5nIGluZm9dKSwKLSAgICBbCi0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgVVNFX0RFQlVHPXllcyA7OwotICAgICAgICBubykgIFVTRV9ERUJVRz1ubyA7OwotICAgICAgICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kZWJ1ZykgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFtVU0VfREVCVUc9eWVzXSkgZG5sIERlZmF1bHQgdmFsdWUKLV0pCi0KLUFDX0RFRlVOKFtBR19HU1RfQVJHX1BST0ZJTElOR10sCi1bCi0gIEFDX0FSR19FTkFCTEUocHJvZmlsaW5nLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wcm9maWxpbmddLAotICAgICAgW2FkZHMgLXBnIHRvIGNvbXBpbGVyIGNvbW1hbmRsaW5lLCBmb3IgcHJvZmlsaW5nXSksCi0gICAgWwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIFVTRV9QUk9GSUxJTkc9eWVzIDs7Ci0gICAgICAgIG5vKSAgVVNFX1BST0ZJTElORz1ubyA7OwotICAgICAgICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1wcm9maWxpbmcpIDs7Ci0gICAgICBlc2FjCi0gICAgXSwKLSAgICBbVVNFX1BST0ZJTElORz1ub10pIGRubCBEZWZhdWx0IHZhbHVlCi1dKQotCi1BQ19ERUZVTihbQUdfR1NUX0FSR19WQUxHUklORF0sCi1bCi0gIGRubCB2YWxncmluZCBpbmNsdXNpb24KLSAgQUNfQVJHX0VOQUJMRSh2YWxncmluZCwKLSAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXZhbGdyaW5kXSxbZGlzYWJsZSBydW4tdGltZSB2YWxncmluZCBkZXRlY3Rpb25dKSwKLSAgICBbCi0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgVVNFX1ZBTEdSSU5EPSIkVVNFX0RFQlVHIiA7OwotICAgICAgICBubykgIFVTRV9WQUxHUklORD1ubyA7OwotICAgICAgICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS12YWxncmluZCkgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFtVU0VfVkFMR1JJTkQ9IiRVU0VfREVCVUciXSkgZG5sIERlZmF1bHQgdmFsdWUKLSAgVkFMR1JJTkRfUkVRPSIzLjAiCi0gIGlmIHRlc3QgIngkVVNFX1ZBTEdSSU5EIiA9IHh5ZXM7IHRoZW4KLSAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhWQUxHUklORCwgdmFsZ3JpbmQgPj0gJFZBTEdSSU5EX1JFUSwKLSAgICAgIFVTRV9WQUxHUklORD0ieWVzIiwKLSAgICAgIFVTRV9WQUxHUklORD0ibm8iKQotICBmaQotICBpZiB0ZXN0ICJ4JFVTRV9WQUxHUklORCIgPSB4eWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfVkFMR1JJTkQsIDEsIFtEZWZpbmUgaWYgdmFsZ3JpbmQgc2hvdWxkIGJlIHVzZWRdKQotICAgIEFDX01TR19OT1RJQ0UoVXNpbmcgZXh0cmEgY29kZSBwYXRocyBmb3IgdmFsZ3JpbmQpCi0gIGZpCi1dKQotCi1BQ19ERUZVTihbQUdfR1NUX0FSR19HQ09WXSwKLVsKLSAgQUNfQVJHX0VOQUJMRShnY292LAotICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nY292XSwKLSAgICAgIFtjb21waWxlIHdpdGggY292ZXJhZ2UgcHJvZmlsaW5nIGluc3RydW1lbnRhdGlvbiAoZ2NjIG9ubHkpXSksCi0gICAgZW5hYmxlX2djb3Y9JGVuYWJsZXZhbCwKLSAgICBlbmFibGVfZ2Nvdj1ubykKLSAgaWYgdGVzdCB4JGVuYWJsZV9nY292ID0geHllcyA7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiCi0gICAgdGhlbgotICAgICAgQUNfTVNHX0VSUk9SKFtnY292IG9ubHkgd29ya3MgaWYgZ2NjIGlzIHVzZWRdKQotICAgIGZpCi0KLSAgICBBU19DT01QSUxFUl9GTEFHKFsiLWZwcm9maWxlLWFyY3MiXSwKLSAgICAgIFtHQ09WX0NGTEFHUz0iJEdDT1ZfQ0ZMQUdTIC1mcHJvZmlsZS1hcmNzIl0sCi0gICAgICB0cnVlKQotICAgIEFTX0NPTVBJTEVSX0ZMQUcoWyItZnRlc3QtY292ZXJhZ2UiXSwKLSAgICAgIFtHQ09WX0NGTEFHUz0iJEdDT1ZfQ0ZMQUdTIC1mdGVzdC1jb3ZlcmFnZSJdLAotICAgICAgdHJ1ZSkKLSAgICBkbmwgcmVtb3ZlIGFueSAtTyBmbGFncyAtIEZJWE1FOiBpcyB0aGlzIG5lZWRlZCA/Ci0gICAgR0NPVl9DRkxBR1M9YGVjaG8gIiRHQ09WX0NGTEFHUyIgfCBzZWQgLWUgJ3MvLU9bWzAtOV1dKi8vZydgCi0gICAgZG5sIGxpYnRvb2wgMS41LjIyIGFuZCBsb3dlciBzdHJpcCAtZnByb2ZpbGUtYXJjcyBmcm9tIHRoZSBmbGFncwotICAgIGRubCBwYXNzZWQgdG8gdGhlIGxpbmtlciwgd2hpY2ggaXMgYSBidWc7IC1mcHJvZmlsZS1hcmNzIGltcGxpY2l0bHkKLSAgICBkbmwgbGlua3MgaW4gLWxnY292LCBzbyB3ZSBkbyBpdCBleHBsaWNpdGx5IGhlcmUgZm9yIHRoZSBzYW1lIGVmZmVjdAotICAgIEdDT1ZfTElCUz0tbGdjb3YKLSAgICBBQ19TVUJTVChHQ09WX0NGTEFHUykKLSAgICBBQ19TVUJTVChHQ09WX0xJQlMpCi0gICAgR0NPVj1gZWNobyAkQ0MgfCBzZWQgcy9nY2MvZ2Nvdi9nYAotICAgIEFDX1NVQlNUKEdDT1YpCi0KLSAgICBHU1RfR0NPVl9FTkFCTEVEPXllcwotICAgIEFDX0RFRklORV9VTlFVT1RFRChHU1RfR0NPVl9FTkFCTEVELCAxLAotICAgICAgW0RlZmluZWQgaWYgZ2NvdiBpcyBlbmFibGVkIHRvIGZvcmNlIGEgcmVidWlsZCBkdWUgdG8gY29uZmlnLmggY2hhbmdpbmddKQotICAgIGRubCBpZiBnY292IGlzIHVzZWQsIHdlIGRvIG5vdCB3YW50IGRlZmF1bHQgLU8yIENGTEFHUwotICAgIGlmIHRlc3QgIngkR1NUX0dDT1ZfRU5BQkxFRCIgPSAieHllcyIKLSAgICB0aGVuCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgLU8wIgotICAgICAgQUNfU1VCU1QoQ0ZMQUdTKQotICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtTzAiCi0gICAgICBBQ19TVUJTVChDWFhGTEFHUykKLSAgICAgIEZGTEFHUz0iJEZGTEFHUyAtTzAiCi0gICAgICBBQ19TVUJTVChGRkxBR1MpCi0gICAgICBDQ0FTRkxBR1M9IiRDQ0FTRkxBR1MgLU8wIgotICAgICAgQUNfU1VCU1QoQ0NBU0ZMQUdTKQotICAgICAgQUNfTVNHX05PVElDRShbZ2NvdiBlbmFibGVkLCBzZXR0aW5nIENGTEFHUyBhbmQgZnJpZW5kcyB0byAkQ0ZMQUdTXSkKLSAgICBmaQotICBmaQotICBBTV9DT05ESVRJT05BTChHU1RfR0NPVl9FTkFCTEVELCB0ZXN0IHgkZW5hYmxlX2djb3YgPSB4eWVzKQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9BUkdfRVhBTVBMRVNdLAotWwotICBBQ19BUkdfRU5BQkxFKGV4YW1wbGVzLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZXhhbXBsZXNdLCBbZGlzYWJsZSBidWlsZGluZyBleGFtcGxlc10pLAotICAgICAgWwotICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgICAgeWVzKSBCVUlMRF9FWEFNUExFUz15ZXMgOzsKLSAgICAgICAgICBubykgIEJVSUxEX0VYQU1QTEVTPW5vIDs7Ci0gICAgICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWV4YW1wbGVzKSA7OwotICAgICAgICBlc2FjCi0gICAgICBdLAotICAgICAgW0JVSUxEX0VYQU1QTEVTPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCi0gIEFNX0NPTkRJVElPTkFMKEJVSUxEX0VYQU1QTEVTLCAgICAgIHRlc3QgIngkQlVJTERfRVhBTVBMRVMiID0gInh5ZXMiKQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9BUkdfV0lUSF9QS0dfQ09ORklHX1BBVEhdLAotWwotICBkbmwgcG9zc2libHkgbW9kaWZ5IHBrZy1jb25maWcgcGF0aAotICBBQ19BUkdfV0lUSChwa2ctY29uZmlnLXBhdGgsCi0gICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGtnLWNvbmZpZy1wYXRoXSwKLSAgICAgICAgICAgICAgICAgICAgW2NvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBrZy1jb25maWcoMSkgZGlyc10pLAotICAgICBbCi0gICAgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0ke3dpdGh2YWx9Ci0gICAgICAgQUNfTVNHX05PVElDRShTZXQgUEtHX0NPTkZJR19QQVRIIHRvICRQS0dfQ09ORklHX1BBVEgpCi0gICAgIF0pCi1dKQotCi0KLWRubCBUaGlzIG1hY3JvIHJlcXVpcmVzIHRoYXQgR1NUX0dJVCBvciBHU1RfQ1ZTIGlzIHNldCB0byB5ZXMgb3Igbm8gKHJlbGVhc2UpCi1BQ19ERUZVTihbQUdfR1NUX0FSR19XSVRIX1BBQ0tBR0VfTkFNRV0sCi1bCi0gIGRubCBwYWNrYWdlIG5hbWUgaW4gcGx1Z2lucwotICBBQ19BUkdfV0lUSChwYWNrYWdlLW5hbWUsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1wYWNrYWdlLW5hbWVdLAotICAgICAgW3NwZWNpZnkgcGFja2FnZSBuYW1lIHRvIHVzZSBpbiBwbHVnaW5zXSksCi0gICAgWwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW5hbWUpIDs7Ci0gICAgICAgIG5vKSAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtcGFja2FnZS1uYW1lKSA7OwotICAgICAgICAqKSAgIEdTVF9QQUNLQUdFX05BTUU9IiR7d2l0aHZhbH0iIDs7Ci0gICAgICBlc2FjCi0gICAgXSwKLSAgICBbCi0gICAgICBQPSQxCi0gICAgICBpZiB0ZXN0ICJ4JFAiID0gIngiCi0gICAgICB0aGVuCi0gICAgICAgIFA9JFBBQ0tBR0VfTkFNRQotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDAiCi0gICAgICB0aGVuCi0gICAgICAgIEdTVF9QQUNLQUdFX05BTUU9IiRQIHNvdXJjZSByZWxlYXNlIgotICAgICAgZWxzZQotICAgICAgICBpZiB0ZXN0ICJ4JFBBQ0tBR0VfVkVSU0lPTl9OQU5PIiA9ICJ4MSIKLSAgICAgICAgdGhlbgotICAgICAgICAgIEdTVF9QQUNLQUdFX05BTUU9IiRQIGdpdCIKLSAgICAgICAgZWxzZQotICAgICAgICAgIEdTVF9QQUNLQUdFX05BTUU9IiRQIHByZXJlbGVhc2UiCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIF0KLSAgKQotICBBQ19NU0dfTk9USUNFKFVzaW5nICRHU1RfUEFDS0FHRV9OQU1FIGFzIHBhY2thZ2UgbmFtZSkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9QQUNLQUdFX05BTUUsICIkR1NUX1BBQ0tBR0VfTkFNRSIsCi0gICAgICBbcGFja2FnZSBuYW1lIGluIHBsdWdpbnNdKQotICBBQ19TVUJTVChHU1RfUEFDS0FHRV9OQU1FKQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9BUkdfV0lUSF9QQUNLQUdFX09SSUdJTl0sCi1bCi0gIGRubCBwYWNrYWdlIG9yaWdpbiBVUkwKLSAgQUNfQVJHX1dJVEgocGFja2FnZS1vcmlnaW4sCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1wYWNrYWdlLW9yaWdpbl0sCi0gICAgICBbc3BlY2lmeSBwYWNrYWdlIG9yaWdpbiBVUkwgdG8gdXNlIGluIHBsdWdpbnNdKSwKLSAgICBbCi0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICB5ZXMpIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLXBhY2thZ2Utb3JpZ2luKSA7OwotICAgICAgICBubykgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLXBhY2thZ2Utb3JpZ2luKSA7OwotICAgICAgICAqKSAgIEdTVF9QQUNLQUdFX09SSUdJTj0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFtHU1RfUEFDS0FHRV9PUklHSU49IltVbmtub3duIHBhY2thZ2Ugb3JpZ2luXSJdIGRubCBEZWZhdWx0IHZhbHVlCi0gICkKLSAgQUNfTVNHX05PVElDRShVc2luZyAkR1NUX1BBQ0tBR0VfT1JJR0lOIGFzIHBhY2thZ2Ugb3JpZ2luKQotICBBQ19ERUZJTkVfVU5RVU9URUQoR1NUX1BBQ0tBR0VfT1JJR0lOLCAiJEdTVF9QQUNLQUdFX09SSUdJTiIsCi0gICAgICBbcGFja2FnZSBvcmlnaW5dKQotICBBQ19TVUJTVChHU1RfUEFDS0FHRV9PUklHSU4pCi1dKQotCi1kbmwgc2V0cyBXSVRIX1BMVUdJTlMgdG8gdGhlIGxpc3Qgb2YgcGx1Zy1pbnMgZ2l2ZW4gYXMgYW4gYXJndW1lbnQKLWRubCBhbHNvIGNsZWFycyBHU1RfUExVR0lOU19BTEwgYW5kIEdTVF9QTFVHSU5TX1NFTEVDVEVECi1BQ19ERUZVTihbQUdfR1NUX0FSR19XSVRIX1BMVUdJTlNdLAotWwotICBBQ19BUkdfV0lUSChwbHVnaW5zLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGx1Z2luc10sCi0gICAgICBbY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZGVwZW5kZW5jeWxlc3MgcGx1Zy1pbnMgdG8gY29tcGlsZV0pLAotICAgIFtXSVRIX1BMVUdJTlM9JHdpdGh2YWxdLAotICAgIFtXSVRIX1BMVUdJTlM9XSkKLQotICBHU1RfUExVR0lOU19BTEw9IiIKLSAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiIKLSAgR1NUX1BMVUdJTlNfTk9OUE9SVEVEPSIiCi0KLSAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfQUxMKQotICBBQ19TVUJTVChHU1RfUExVR0lOU19TRUxFQ1RFRCkKLSAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfTk9OUE9SVEVEKQotXSkKLQotZG5sIEFHX0dTVF9DSEVDS19QTFVHSU4oUExVR0lOLU5BTUUpCi1kbmwKLWRubCBUaGlzIG1hY3JvIGFkZHMgdGhlIHBsdWctaW4gPFBMVUdJTi1OQU1FPiB0byBHU1RfUExVR0lOU19BTEwuIFRoZW4gaXQKLWRubCBjaGVja3MgaWYgV0lUSF9QTFVHSU5TIGlzIGVtcHR5IG9yIHRoZSBwbHVnaW4gaXMgcHJlc2VudCBpbiBXSVRIX1BMVUdJTlMsCi1kbmwgYW5kIGlmIHNvIGFkZHMgaXQgdG8gR1NUX1BMVUdJTlNfU0VMRUNURUQuIFRoZW4gaXQgY2hlY2tzIGlmIHRoZSBwbHVnaW4KLWRubCBpcyBwcmVzZW50IGluIFdJVEhPVVRfUExVR0lOUyAoaWUuIHdhcyBkaXNhYmxlZCBzcGVjaWZpY2FsbHkpIGFuZCBpZiBzbwotZG5sIHJlbW92ZXMgaXQgZnJvbSBHU1RfUExVR0lOU19TRUxFQ1RFRC4KLWRubAotZG5sIFRoZSBtYWNybyB3aWxsIGNhbGwgQU1fQ09ORElUSU9OQUwoVVNFX1BMVUdJTl88UExVR0lOLU5BTUU+LCAuLi4pIHRvIGFsbG93Ci1kbmwgY29udHJvbCBvZiB3aGF0IGlzIGJ1aWx0IGluIE1ha2VmaWxlLmFtcy4KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfUExVR0lOXSwKLVsKLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIFskMV0iCi0KLSAgZGVmaW5lKFtwbmFtZV9kZWZdLHRyYW5zbGl0KFskMV0sIC1hLXosIF9hLXopKQotCi0gIEFDX0FSR19FTkFCTEUoWyQxXSwKLSAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLVskMV1dLCBbZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgJDEgcGx1Z2luXSksCi0gICAgWwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIFtnc3RfdXNlX11wbmFtZV9kZWY9eWVzIDs7Ci0gICAgICAgIG5vKSBbZ3N0X3VzZV9dcG5hbWVfZGVmPW5vIDs7Ci0gICAgICAgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtJDFdKSA7OwotICAgICAgIGVzYWMKLSAgICBdLAotICAgIFtbZ3N0X3VzZV9dcG5hbWVfZGVmPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCi0KLSAgaWYgdGVzdCB4JFtnc3RfdXNlX11wbmFtZV9kZWYgPSB4bm87IHRoZW4KLSAgICBBQ19NU0dfTk9USUNFKGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luICQxKQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBbJDFdIgotICBmaQotICB1bmRlZmluZShbcG5hbWVfZGVmXSkKLQotICBkbmwgRmlyc3QgY2hlY2sgaW5jbHVzaW9uCi0gIGlmIFtbIC16ICIkV0lUSF9QTFVHSU5TIiBdXSB8fCBlY2hvICIgWyRXSVRIX1BMVUdJTlNdICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBbJDFdICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIFskMV0iCi0gIGZpCi0gIGRubCBUaGVuIGNoZWNrIGV4Y2x1c2lvbgotICBpZiBlY2hvICIgWyRXSVRIT1VUX1BMVUdJTlNdICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBbJDFdICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gWyQxXSAvIC8nYAotICBmaQotICBkbmwgRmluYWxseSBjaGVjayBpZiB0aGUgcGx1Z2luIGlzIHBvcnRlZCBvciBub3QKLSAgaWYgZWNobyAiIFskR1NUX1BMVUdJTlNfTk9OUE9SVEVEXSAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgWyQxXSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIFskMV0gLyAvJ2AKLSAgZmkKLSAgQU1fQ09ORElUSU9OQUwoW1VTRV9QTFVHSU5fXXRyYW5zbGl0KFskMV0sIGEteiwgQS1aKSwgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIFskMV0gIiA+IC9kZXYvbnVsbCkKLV0pCi0KLWRubCBBR19HU1RfRElTQUJMRV9QTFVHSU4oUExVR0lOLU5BTUUpCi1kbmwKLWRubCBUaGlzIG1hY3JvIGRpc2FibGVzIHRoZSBwbHVnLWluIDxQTFVHSU4tTkFNRT4gYnkgcmVtb3ZpbmcgaXQgZnJvbQotZG5sIEdTVF9QTFVHSU5TX1NFTEVDVEVELgotQUNfREVGVU4oW0FHX0dTVF9ESVNBQkxFX1BMVUdJTl0sCi1bCi0gIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBbJDFdIC8gLydgCi0gIEFNX0NPTkRJVElPTkFMKFtVU0VfUExVR0lOX110cmFuc2xpdChbJDFdLCBhLXosIEEtWiksIGZhbHNlKQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9BUkdfRU5BQkxFX0VYVEVSTkFMXSwKLVsKLSAgQUdfR1NUX0NIRUNLX0ZFQVRVUkUoRVhURVJOQUwsIFtidWlsZGluZyBvZiBwbHVnLWlucyB3aXRoIGV4dGVybmFsIGRlcHNdLCwKLSAgICBIQVZFX0VYVEVSTkFMPXllcywgZW5hYmxlZCwKLSAgICBbCi0gICAgICBBQ19NU0dfTk9USUNFKGJ1aWxkaW5nIGV4dGVybmFsIHBsdWctaW5zKQotICAgICAgQlVJTERfRVhURVJOQUw9InllcyIKLSAgICBdLFsKLSAgICAgIEFDX01TR19XQVJOKGFsbCBwbHVnLWlucyB3aXRoIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aWxsIG5vdCBiZSBidWlsdCkKLSAgICAgIEJVSUxEX0VYVEVSTkFMPSJubyIKLSAgICBdKQotICAjIG1ha2UgQlVJTERfRVhURVJOQUwgYXZhaWxhYmxlIHRvIE1ha2VmaWxlLmFtCi0gIEFNX0NPTkRJVElPTkFMKEJVSUxEX0VYVEVSTkFMLCB0ZXN0ICJ4JEJVSUxEX0VYVEVSTkFMIiA9ICJ4eWVzIikKLV0pCi0KLWRubCBleHBlcmltZW50YWwgcGx1Zy1pbnM7IHN0dWZmIHRoYXQgaGFzbid0IGhhZCB0aGUgZHVzdCBzZXR0bGUgeWV0Ci1kbmwgcmVhZCAnYnVpbGRzLCBidXQgbWlnaHQgbm90IHdvcmsnCi1BQ19ERUZVTihbQUdfR1NUX0FSR19FTkFCTEVfRVhQRVJJTUVOVEFMXSwKLVsKLSAgQUdfR1NUX0NIRUNLX0ZFQVRVUkUoRVhQRVJJTUVOVEFMLCBbYnVpbGRpbmcgb2YgZXhwZXJpbWVudGFsIHBsdWctaW5zXSwsCi0gICAgSEFWRV9FWFBFUklNRU5UQUw9eWVzLCBkaXNhYmxlZCwKLSAgICBbCi0gICAgICBBQ19NU0dfV0FSTihidWlsZGluZyBleHBlcmltZW50YWwgcGx1Zy1pbnMpCi0gICAgICBCVUlMRF9FWFBFUklNRU5UQUw9InllcyIKLSAgICBdLFsKLSAgICAgIEFDX01TR19OT1RJQ0Uobm90IGJ1aWxkaW5nIGV4cGVyaW1lbnRhbCBwbHVnLWlucykKLSAgICAgIEJVSUxEX0VYUEVSSU1FTlRBTD0ibm8iCi0gICAgXSkKLSAgIyBtYWtlIEJVSUxEX0VYUEVSSU1FTlRBTCBhdmFpbGFibGUgdG8gTWFrZWZpbGUuYW0KLSAgQU1fQ09ORElUSU9OQUwoQlVJTERfRVhQRVJJTUVOVEFMLCB0ZXN0ICJ4JEJVSUxEX0VYUEVSSU1FTlRBTCIgPSAieHllcyIpCi1dKQotCi1kbmwgYnJva2VuIHBsdWctaW5zOyBzdHVmZiB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBidWlsZCBhdCB0aGUgbW9tZW50Ci1BQ19ERUZVTihbQUdfR1NUX0FSR19FTkFCTEVfQlJPS0VOXSwKLVsKLSAgQUdfR1NUX0NIRUNLX0ZFQVRVUkUoQlJPS0VOLCBbYnVpbGRpbmcgb2YgYnJva2VuIHBsdWctaW5zXSwsCi0gICAgSEFWRV9CUk9LRU49eWVzLCBkaXNhYmxlZCwKLSAgICBbCi0gICAgICBBQ19NU0dfV0FSTihbYnVpbGRpbmcgYnJva2VuIHBsdWctaW5zIC0tIG5vIGJ1ZyByZXBvcnRzIG9uIHRoZXNlLCBvbmx5IHBhdGNoZXMgLi4uXSkKLSAgICBdLFsKLSAgICAgIEFDX01TR19OT1RJQ0UoW25vdCBidWlsZGluZyBicm9rZW4gcGx1Zy1pbnNdKQotICAgIF0pCi1dKQotCi1kbmwgYWxsb3cgcGVvcGxlIChvciBidWlsZCB0b29scykgdG8gb3ZlcnJpZGUgZGVmYXVsdCBiZWhhdmlvdXIKLWRubCBmb3IgZmF0YWwgY29tcGlsZXIgd2FybmluZ3MKLWRubCBFbmFibGUgZmF0YWwgd2FybmluZ3MgYnkgZGVmYXVsdCBvbmx5IGZvciBkZXZlbG9wbWVudCB2ZXJzaW9ucwotQUNfREVGVU4oW0FHX0dTVF9BUkdfRElTQUJMRV9GQVRBTF9XQVJOSU5HU10sCi1bCi0gIEFDX0FSR19FTkFCTEUoZmF0YWwtd2FybmluZ3MsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1mYXRhbC13YXJuaW5nc10sCi0gICAgICAgICAgICAgICAgICAgW0Rvbid0IHR1cm4gY29tcGlsZXIgd2FybmluZ3MgaW50byBmYXRhbCBlcnJvcnNdKSwKLSAgICBbCi0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgRkFUQUxfV0FSTklOR1M9eWVzIDs7Ci0gICAgICAgIG5vKSAgRkFUQUxfV0FSTklOR1M9bm8gOzsKLSAgICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWZhdGFsLXdhcm5pbmdzKSA7OwotICAgICAgZXNhYwotICAgIF0sCi0gICAgWwotICAgICAgaWYgdGVzdCAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlOT1IgJSAyYCIgPSAieDEiIC1hICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAnPCcgOTBgIiA9ICJ4MSI7IHRoZW4KLSAgICAgICAgRkFUQUxfV0FSTklOR1M9eWVzCi0gICAgICBlbHNlCi0gICAgICAgIEZBVEFMX1dBUk5JTkdTPW5vCi0gICAgICBmaQotICAgIF0pCi1dKQotCi1kbmwgRW5hYmxlIGV4dHJhIGNoZWNrcyBieSBkZWZhdWx0IG9ubHkgZm9yIGRldmVsb3BtZW50IHZlcnNpb25zCi1BQ19ERUZVTihbQUdfR1NUX0FSR19FTkFCTEVfRVhUUkFfQ0hFQ0tTXSwKLVsKLSAgQUNfQVJHX0VOQUJMRShleHRyYS1jaGVjaywKLSAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXh0cmEtY2hlY2tzXSwKLSAgICAgICAgICAgICAgICAgICBbRW5hYmxlIGV4dHJhIHJ1bnRpbWUgY2hlY2tzXSksCi0gICAgWwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIEVYVFJBX0NIRUNLUz15ZXMgOzsKLSAgICAgICAgbm8pICBFWFRSQV9DSEVDS1M9bm8gOzsKLSAgICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZXh0cmEtY2hlY2tzKSA7OwotICAgICAgZXNhYwotICAgIF0sCi0gICAgWwotICAgICAgaWYgdGVzdCAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlOT1IgJSAyYCIgPSAieDEiIC1hICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAnPCcgOTBgIiA9ICJ4MSI7IHRoZW4KLSAgICAgICAgRVhUUkFfQ0hFQ0tTPXllcwotICAgICAgZWxzZQotICAgICAgICBFWFRSQV9DSEVDS1M9bm8KLSAgICAgIGZpCi0gICAgXSkKLQotICAgIGlmIHRlc3QgIngkRVhUUkFfQ0hFQ0tTIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBBQ19ERUZJTkUoR1NUX0VOQUJMRV9FWFRSQV9DSEVDS1MsIDEsIFtEZWZpbmUgaWYgZXh0cmEgcnVudGltZSBjaGVja3Mgc2hvdWxkIGJlIGVuYWJsZWRdKQotICAgIGZpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1jaGVjay5tNCBiL2NvbW1vbi9tNC9nc3QtY2hlY2subTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNzcwNTMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1jaGVjay5tNAorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi1kbmwgcGtnLWNvbmZpZy1iYXNlZCBjaGVja3MgZm9yIEdTdHJlYW1lciBtb2R1bGVzIGFuZCBkZXBlbmRlbmN5IG1vZHVsZXMKLQotZG5sIGdlbmVyaWM6Ci1kbmwgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKFtQUkVGSVhdLCBbV0hJQ0hdLCBbUkVRVUlSRURdKQotZG5sIHNldHMgSEFWRV9bJFBSRUZJWF0sIFskUFJFRklYXV8qCi1kbmwgQUdfR1NUX0NIRUNLX01PRFVMRVMoW1BSRUZJWF0sIFtNT0RVTEVdLCBbTUlOVkVSXSwgW05BTUVdLCBbUkVRVUlSRURdKQotZG5sIHNldHMgSEFWRV9bJFBSRUZJWF0sIFskUFJFRklYXV8qCi0KLWRubCBzcGVjaWZpYzoKLWRubCBBR19HU1RfQ0hFQ0tfR1NUKFtNQUpNSU5dLCBbTUlOVkVSXSwgW1JFUVVJUkVEXSkKLWRubCAgIGFsc28gc2V0cy9BQ1NVQlNUcyBHU1RfVE9PTFNfRElSIGFuZCBHU1RfUExVR0lOU19ESVIKLWRubCBBR19HU1RfQ0hFQ0tfR1NUX0JBU0UoW01BSk1JTl0sIFtNSU5WRVJdLCBbUkVRVUlSRURdKQotZG5sIEFHX0dTVF9DSEVDS19HU1RfQ09OVFJPTExFUihbTUFKTUlOXSwgW01JTlZFUl0sIFtSRVFVSVJFRF0pCi1kbmwgQUdfR1NUX0NIRUNLX0dTVF9ORVQoW01BSk1JTl0sIFtNSU5WRVJdLCBbUkVRVUlSRURdKQotZG5sIEFHX0dTVF9DSEVDS19HU1RfQ0hFQ0soW01BSk1JTl0sIFtNSU5WRVJdLCBbUkVRVUlSRURdKQotZG5sIEFHX0dTVF9DSEVDS19HU1RfUExVR0lOU19CQVNFKFtNQUpNSU5dLCBbTUlOVkVSXSwgW1JFUVVJUkVEXSkKLWRubCAgIGFsc28gc2V0cy9BQ1NVQlNUcyBHU1RQQl9QTFVHSU5TX0RJUgotCi1BQ19ERUZVTihbQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTXSwKLVsKLSAgd2hpY2g9IlskMl0iCi0gIGRubCBub3QgcmVxdWlyZWQgYnkgZGVmYXVsdCwgc2luY2Ugd2UgdXNlIHRoaXMgbW9zdGx5IGZvciBwbHVnaW4gZGVwcwotICByZXF1aXJlZD1pZmVsc2UoWyQzXSwgLCAibm8iLCBbJDNdKQotCi0gIFBLR19DSEVDS19NT0RVTEVTKFskMV0sICR3aGljaCwKLSAgICBbCi0gICAgICBIQVZFX1skMV09InllcyIKLSAgICBdLAotICAgIFsKLSAgICAgIEhBVkVfWyQxXT0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBBQ19NU0dfRVJST1IoJFskMV1fUEtHX0VSUk9SUykKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX05PVElDRSgkWyQxXV9QS0dfRVJST1JTKQotICAgICAgZmkKLSAgICBdKQotCi0gIGRubCBBQ19TVUJTVCBvZiBDRkxBR1MgYW5kIExJQlMgd2FzIG5vdCBkb25lIGJlZm9yZSBhdXRvbWFrZSAxLjcKLSAgZG5sIEl0IGdldHMgZG9uZSBhdXRvbWF0aWNhbGx5IGluIGF1dG9tYWtlID49IDEuNywgd2hpY2ggd2Ugbm93IHJlcXVpcmUKLV0pKQotCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX01PRFVMRVNdLAotWwotICBtb2R1bGU9WyQyXQotICBtaW52ZXI9WyQzXQotICBuYW1lPSJbJDRdIgotICByZXF1aXJlZD1pZmVsc2UoWyQ1XSwgLCAieWVzIiwgWyQ1XSkgZG5sIHJlcXVpcmVkIGJ5IGRlZmF1bHQKLQotICBQS0dfQ0hFQ0tfTU9EVUxFUyhbJDFdLCAkbW9kdWxlID49ICRtaW52ZXIsCi0gICAgWwotICAgICAgSEFWRV9bJDFdPSJ5ZXMiCi0gICAgXSwKLSAgICBbCi0gICAgICBIQVZFX1skMV09Im5vIgotICAgICAgQUNfTVNHX05PVElDRSgkWyQxXV9QS0dfRVJST1JTKQotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgQUNfTVNHX0VSUk9SKFtubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZF0pCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19OT1RJQ0UoW25vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kXSkKLSAgICAgIGZpCi0gICAgXSkKLQotICBkbmwgQUNfU1VCU1Qgb2YgQ0ZMQUdTIGFuZCBMSUJTIHdhcyBub3QgZG9uZSBiZWZvcmUgYXV0b21ha2UgMS43Ci0gIGRubCBJdCBnZXRzIGRvbmUgYXV0b21hdGljYWxseSBpbiBhdXRvbWFrZSA+PSAxLjcsIHdoaWNoIHdlIG5vdyByZXF1aXJlCi1dKSkKLQotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RdLAotWwotICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1QsIGdzdHJlYW1lci1bJDFdLCBbJDJdLCBbR1N0cmVhbWVyXSwgWyQzXSkKLSAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQotICBpZiB0ZXN0IC16ICRHU1RfVE9PTFNfRElSOyB0aGVuCi0gICAgR1NUX1RPT0xTX0RJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT10b29sc2RpciBnc3RyZWFtZXItWyQxXWAKLSAgICBpZiB0ZXN0IC16ICRHU1RfVE9PTFNfRElSOyB0aGVuCi0gICAgICBBQ19NU0dfRVJST1IoCi0gICAgICAgIFtubyB0b29scyBkaXIgc2V0IGluIEdTdHJlYW1lciBwa2ctY29uZmlnIGZpbGUsIGNvcmUgdXBncmFkZSBuZWVkZWQuXSkKLSAgICBmaQotICBmaQotICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgdG9vbHMgaW4gJEdTVF9UT09MU19ESVJdKQotICBBQ19TVUJTVChHU1RfVE9PTFNfRElSKQotCi0gIGRubCBjaGVjayBmb3Igd2hlcmUgY29yZSBwbHVnLWlucyBnb3QgaW5zdGFsbGVkCi0gIGRubCB0aGlzIGlzIHVzZWQgZm9yIHVuaXQgdGVzdHMKLSAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQotICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19ESVI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGx1Z2luc2RpciBnc3RyZWFtZXItWyQxXWAKLSAgICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19ESVI7IHRoZW4KLSAgICAgIEFDX01TR19FUlJPUigKLSAgICAgICAgW25vIHBsdWdpbnNkaXIgc2V0IGluIEdTdHJlYW1lciBwa2ctY29uZmlnIGZpbGUsIGNvcmUgdXBncmFkZSBuZWVkZWQuXSkKLSAgICBmaQotICBmaQotICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgcGx1Zy1pbnMgaW4gJEdTVF9QTFVHSU5TX0RJUl0pCi0gIEFDX1NVQlNUKEdTVF9QTFVHSU5TX0RJUikKLV0pCi0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX0JBU0VdLAotWwotICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfQkFTRSwgZ3N0cmVhbWVyLWJhc2UtWyQxXSwgWyQyXSwKLSAgICBbR1N0cmVhbWVyIEJhc2UgTGlicmFyaWVzXSwgWyQzXSkKLV0pCi0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX0NPTlRST0xMRVJdLAotWwotICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfQ09OVFJPTExFUiwgZ3N0cmVhbWVyLWNvbnRyb2xsZXItWyQxXSwgWyQyXSwKLSAgICBbR1N0cmVhbWVyIENvbnRyb2xsZXIgTGlicmFyeV0sIFskM10pCi1dKQotCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9ORVRdLAotWwotICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfTkVULCBnc3RyZWFtZXItbmV0LVskMV0sIFskMl0sCi0gICAgW0dTdHJlYW1lciBOZXR3b3JrIExpYnJhcnldLCBbJDNdKQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RfQ0hFQ0tdLAotWwotICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfQ0hFQ0ssIGdzdHJlYW1lci1jaGVjay1bJDFdLCBbJDJdLAotICAgIFtHU3RyZWFtZXIgQ2hlY2sgdW5pdHRlc3QgTGlicmFyeV0sIFskM10pCi1dKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kbmwgQUdfR1NUX0NIRUNLX1VOSU5TVEFMTEVEX1NFVFVQKFtBQ1RJT04tSUYtVU5JTlNUQUxMRURdLCBbQUNUSU9OLUlGLU5PVF0pCi1kbmwKLWRubCBBQ1RJT04tSUYtVU5JTlNUQUxMRUQgIChvcHRpb25hbCkgZXh0cmEgYWN0aW9ucyB0byBwZXJmb3JtIGlmIHRoZSBzZXR1cAotZG5sICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gdW5pbnN0YWxsZWQgc2V0dXAKLWRubCBBQ1RJT04tSUYtTk9UICAgICAgICAgIChvcHRpb25hbCkgZXh0cmEgYWN0aW9ucyB0byBwZXJmb3JtIGlmIHRoZSBzZXR1cAotZG5sICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGFuIHVuaW5zdGFsbGVkIHNldHVwCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX1VOSU5TVEFMTEVEX1NFVFVQXSwKLVsKLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoaXMgaXMgYW4gdW5pbnN0YWxsZWQgR1N0cmVhbWVyIHNldHVwXSkKLSAgQUNfQ0FDSEVfVkFMKGdzdF9jdl9pc191bmluc3RhbGxlZF9zZXR1cCxbCi0gICAgZ3N0X2N2X2lzX3VuaW5zdGFsbGVkX3NldHVwPW5vCi0gICAgaWYgKHNldCAtdTsgOiAkR1NUX1BMVUdJTl9TWVNURU1fUEFUSCkgMj4vZGV2L251bGwgOyB0aGVuCi0gICAgICBpZiB0ZXN0IC16ICIkR1NUX1BMVUdJTl9TWVNURU1fUEFUSCIgXAotICAgICAgICAgICAtYSAtbiAiJEdTVF9QTFVHSU5fU0NBTk5FUiIgICAgIFwKLSAgICAgICAgICAgLWEgLW4gIiRHU1RfUExVR0lOX1BBVEgiICAgICAgICBcCi0gICAgICAgICAgIC1hIC1uICIkR1NUX1JFR0lTVFJZIiAgICAgICAgICAgXAotICAgICAgICAgICAtYSAtbiAiJERZTERfTElCUkFSWV9QQVRIIiAgICAgIFwKLSAgICAgICAgICAgLWEgLW4gIiRMRF9MSUJSQVJZX1BBVEgiOyB0aGVuCi0gICAgICAgIGdzdF9jdl9pc191bmluc3RhbGxlZF9zZXR1cD15ZXM7Ci0gICAgICBmaQotICAgIGZpCi0gIF0pCi0gIEFDX01TR19SRVNVTFQoJGdzdF9jdl9pc191bmluc3RhbGxlZF9zZXR1cCkKLSAgaWYgdGVzdCAieCRnc3RfY3ZfaXNfdW5pbnN0YWxsZWRfc2V0dXAiID0gInh5ZXMiOyB0aGVuCi0gICAgaWZlbHNlKFskMV0sICwgOiwgWyQxXSkKLSAgZWxzZQotICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCi0gIGZpCi1dKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kbmwgQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0JBU0UoW0dTVC1BUElfVkVSU0lPTl0sIFtNSU4tVkVSU0lPTl0sIFtSRVFVSVJFRF0pCi1kbmwKLWRubCBTZXRzIEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTIGFuZCBHU1RfUExVR0lOU19CQVNFX0xJQlMuCi1kbmwKLWRubCBBbHNvIHNldHMgR1NUUEJfUExVR0lOU19ESVIgKGFuZCBmb3IgY29uc2lzdGVuY3kgYWxzbyBHU1RfUExVR0lOU19CQVNFX0RJUikKLWRubCBmb3IgdXNlIGluIE1ha2VmaWxlLmFtLiBUaGlzIGlzIG9ubHkgcmVhbGx5IG5lZWRlZC91c2VmdWwgaW4gdW5pbnN0YWxsZWQKLWRubCBzZXR1cHMsIHNpbmNlIGluIGFuIGluc3RhbGxlZCBzZXR1cCBhbGwgcGx1Z2lucyB3aWxsIGJlIGZvdW5kIGluCi1kbmwgR1NUX1BMVUdJTlNfRElSIGFueXdheS4KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfQkFTRV0sCi1bCi0gIEFHX0dTVF9DSEVDS19NT0RVTEVTKEdTVF9QTFVHSU5TX0JBU0UsIGdzdHJlYW1lci1wbHVnaW5zLWJhc2UtWyQxXSwgWyQyXSwKLSAgICBbR1N0cmVhbWVyIEJhc2UgUGx1Z2luc10sIFskM10pCi0KLSAgaWYgdGVzdCAieCRIQVZFX0dTVF9QTFVHSU5TX0JBU0UiID0gInh5ZXMiOyB0aGVuCi0gICAgZG5sIGNoZWNrIGZvciB3aGVyZSBiYXNlIHBsdWdpbnMgZ290IGluc3RhbGxlZAotICAgIGRubCB0aGlzIGlzIHVzZWQgZm9yIHVuaXQgdGVzdHMKLSAgICBkbmwgYWxsb3cgc2V0dGluZyBiZWZvcmUgY2FsbGluZyB0aGlzIG1hY3JvIHRvIG92ZXJyaWRlCi0gICAgaWYgdGVzdCAteiAkR1NUUEJfUExVR0lOU19ESVI7IHRoZW4KLSAgICAgIEdTVFBCX1BMVUdJTlNfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBsdWdpbnNkaXIgZ3N0cmVhbWVyLXBsdWdpbnMtYmFzZS1bJDFdYAotICAgICAgaWYgdGVzdCAteiAkR1NUUEJfUExVR0lOU19ESVI7IHRoZW4KLSAgICAgICAgQUNfTVNHX0VSUk9SKAotICAgICAgICAgIFtubyBwbHVnaW5zZGlyIHNldCBpbiBHU3RyZWFtZXIgQmFzZSBQbHVnaW5zIHBrZy1jb25maWcgZmlsZV0pCi0gICAgICBmaQotICAgIGZpCi0gICAgQUNfTVNHX05PVElDRShbdXNpbmcgR1N0cmVhbWVyIEJhc2UgUGx1Z2lucyBpbiAkR1NUUEJfUExVR0lOU19ESVJdKQotICAgIEdTVF9QTFVHSU5TX0JBU0VfRElSPSIkR1NUUEJfUExVR0lOU19ESVIvZ3N0OiRHU1RQQl9QTFVHSU5TX0RJUi9zeXM6JEdTVFBCX1BMVUdJTlNfRElSL2V4dCIKLSAgICBBQ19TVUJTVChHU1RfUExVR0lOU19CQVNFX0RJUikKLSAgICBBQ19TVUJTVChHU1RQQl9QTFVHSU5TX0RJUikKLSAgZmkKLV0pCi0KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRubCBBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfR09PRChbR1NULUFQSV9WRVJTSU9OXSwgW01JTi1WRVJTSU9OXSkKLWRubAotZG5sIFdpbGwgc2V0IEdTVF9QTFVHSU5TX0dPT0RfRElSIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0uIE5vdGUgdGhhdCB0aGlzIHdpbGwKLWRubCBvbmx5IGJlIHNldCBpbiBhbiB1bmluc3RhbGxlZCBzZXR1cCwgc2luY2UgLWdvb2Qgc2hpcHMgbm8gLnBjIGZpbGUgYW5kIGluCi1kbmwgYW4gaW5zdGFsbGVkIHNldHVwIGFsbCBwbHVnaW5zIHdpbGwgYmUgZm91bmQgaW4gR1NUX1BMVUdJTlNfRElSIGFueXdheS4KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfR09PRF0sCi1bCi0gIEFHX0dTVF9DSEVDS19NT0RVTEVTKEdTVF9QTFVHSU5TX0dPT0QsIGdzdHJlYW1lci1wbHVnaW5zLWdvb2QtWyQxXSwgWyQyXSwKLSAgICBbR1N0cmVhbWVyIEdvb2QgUGx1Z2luc10sIFtub10pCi0KLSAgaWYgdGVzdCAieCRIQVZFX0dTVF9QTFVHSU5TX0dPT0QiID0gInh5ZXMiOyB0aGVuCi0gICAgZG5sIGNoZWNrIGZvciB3aGVyZSBnb29kIHBsdWdpbnMgZ290IGluc3RhbGxlZAotICAgIGRubCB0aGlzIGlzIHVzZWQgZm9yIHVuaXQgdGVzdHMKLSAgICBkbmwgYWxsb3cgc2V0dGluZyBiZWZvcmUgY2FsbGluZyB0aGlzIG1hY3JvIHRvIG92ZXJyaWRlCi0gICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfR09PRF9ESVI7IHRoZW4KLSAgICAgIEdTVF9QTFVHSU5TX0dPT0RfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBsdWdpbnNkaXIgZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC1bJDFdYAotICAgICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfR09PRF9ESVI7IHRoZW4KLSAgICAgICAgQUNfTVNHX0VSUk9SKFtubyBwbHVnaW5zZGlyIHNldCBpbiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIHBrZy1jb25maWcgZmlsZV0pCi0gICAgICBmaQotICAgIGZpCi0gICAgQUNfTVNHX05PVElDRShbdXNpbmcgR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyBpbiAkR1NUX1BMVUdJTlNfR09PRF9ESVJdKQotICAgIEdTVF9QTFVHSU5TX0dPT0RfRElSPSIkR1NUX1BMVUdJTlNfR09PRF9ESVIvZ3N0OiRHU1RfUExVR0lOU19HT09EX0RJUi9zeXM6JEdTVF9QTFVHSU5TX0dPT0RfRElSL2V4dCIKLSAgICBBQ19TVUJTVChHU1RfUExVR0lOU19HT09EX0RJUikKLSAgZmkKLV0pCi0KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRubCBBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfVUdMWShbR1NULUFQSV9WRVJTSU9OXSwgW01JTi1WRVJTSU9OXSkKLWRubAotZG5sIFdpbGwgc2V0IEdTVF9QTFVHSU5TX1VHTFlfRElSIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0uIE5vdGUgdGhhdCB0aGlzIHdpbGwKLWRubCBvbmx5IGJlIHNldCBpbiBhbiB1bmluc3RhbGxlZCBzZXR1cCwgc2luY2UgLWJhZCBzaGlwcyBubyAucGMgZmlsZSBhbmQgaW4KLWRubCBhbiBpbnN0YWxsZWQgc2V0dXAgYWxsIHBsdWdpbnMgd2lsbCBiZSBmb3VuZCBpbiBHU1RfUExVR0lOU19ESVIgYW55d2F5LgotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RfUExVR0lOU19VR0xZXSwKLVsKLSAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX1BMVUdJTlNfVUdMWSwgZ3N0cmVhbWVyLXBsdWdpbnMtdWdseS1bJDFdLCBbJDJdLAotICAgIFtHU3RyZWFtZXIgVWdseSBQbHVnaW5zXSwgW25vXSkKLQotICBpZiB0ZXN0ICJ4JEhBVkVfR1NUX1BMVUdJTlNfVUdMWSIgPSAieHllcyI7IHRoZW4KLSAgICBkbmwgY2hlY2sgZm9yIHdoZXJlIHVnbHkgcGx1Z2lucyBnb3QgaW5zdGFsbGVkCi0gICAgZG5sIHRoaXMgaXMgdXNlZCBmb3IgdW5pdCB0ZXN0cwotICAgIGRubCBhbGxvdyBzZXR0aW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWFjcm8gdG8gb3ZlcnJpZGUKLSAgICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19VR0xZX0RJUjsgdGhlbgotICAgICAgR1NUX1BMVUdJTlNfVUdMWV9ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGx1Z2luc2RpciBnc3RyZWFtZXItcGx1Z2lucy11Z2x5LVskMV1gCi0gICAgICBpZiB0ZXN0IC16ICRHU1RfUExVR0lOU19VR0xZX0RJUjsgdGhlbgotICAgICAgICBBQ19NU0dfRVJST1IoW25vIHBsdWdpbnNkaXIgc2V0IGluIEdTdHJlYW1lciBVZ2x5IFBsdWdpbnMgcGtnLWNvbmZpZyBmaWxlXSkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgVWdseSBQbHVnaW5zIGluICRHU1RfUExVR0lOU19VR0xZX0RJUl0pCi0gICAgR1NUX1BMVUdJTlNfVUdMWV9ESVI9IiRHU1RfUExVR0lOU19VR0xZX0RJUi9nc3Q6JEdTVF9QTFVHSU5TX1VHTFlfRElSL3N5czokR1NUX1BMVUdJTlNfVUdMWV9ESVIvZXh0IgotICAgIEFDX1NVQlNUKEdTVF9QTFVHSU5TX1VHTFlfRElSKQotICBmaQotXSkKLQotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIEFHX0dTVF9DSEVDS19HU1RfUExVR0lOU19CQUQoW0dTVC1BUElfVkVSU0lPTl0sIFtNSU4tVkVSU0lPTl0pCi1kbmwKLWRubCBXaWxsIHNldCBHU1RfUExVR0lOU19CQURfRElSIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0uIE5vdGUgdGhhdCB0aGlzIHdpbGwKLWRubCBvbmx5IGJlIHNldCBpbiBhbiB1bmluc3RhbGxlZCBzZXR1cCwgc2luY2UgLXVnbHkgc2hpcHMgbm8gLnBjIGZpbGUgYW5kIGluCi1kbmwgYW4gaW5zdGFsbGVkIHNldHVwIGFsbCBwbHVnaW5zIHdpbGwgYmUgZm91bmQgaW4gR1NUX1BMVUdJTlNfRElSIGFueXdheS4KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfQkFEXSwKLVsKLSAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX1BMVUdJTlNfQkFELCBnc3RyZWFtZXItcGx1Z2lucy1iYWQtWyQxXSwgWyQyXSwKLSAgICBbR1N0cmVhbWVyIEJhZCBQbHVnaW5zXSwgW25vXSkKLQotICBpZiB0ZXN0ICJ4JEhBVkVfR1NUX1BMVUdJTlNfQkFEIiA9ICJ4eWVzIjsgdGhlbgotICAgIGRubCBjaGVjayBmb3Igd2hlcmUgYmFkIHBsdWdpbnMgZ290IGluc3RhbGxlZAotICAgIGRubCB0aGlzIGlzIHVzZWQgZm9yIHVuaXQgdGVzdHMKLSAgICBkbmwgYWxsb3cgc2V0dGluZyBiZWZvcmUgY2FsbGluZyB0aGlzIG1hY3JvIHRvIG92ZXJyaWRlCi0gICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfQkFEX0RJUjsgdGhlbgotICAgICAgR1NUX1BMVUdJTlNfQkFEX0RJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wbHVnaW5zZGlyIGdzdHJlYW1lci1wbHVnaW5zLWJhZC1bJDFdYAotICAgICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfQkFEX0RJUjsgdGhlbgotICAgICAgICBBQ19NU0dfRVJST1IoW25vIHBsdWdpbnNkaXIgc2V0IGluIEdTdHJlYW1lciBCYWQgUGx1Z2lucyBwa2ctY29uZmlnIGZpbGVdKQotICAgICAgZmkKLSAgICBmaQotICAgIEFDX01TR19OT1RJQ0UoW3VzaW5nIEdTdHJlYW1lciBCYWQgUGx1Z2lucyBpbiAkR1NUX1BMVUdJTlNfQkFEX0RJUl0pCi0gICAgR1NUX1BMVUdJTlNfQkFEX0RJUj0iJEdTVF9QTFVHSU5TX0JBRF9ESVIvZ3N0OiRHU1RfUExVR0lOU19CQURfRElSL3N5czokR1NUX1BMVUdJTlNfQkFEX0RJUi9leHQiCi0gICAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfQkFEX0RJUikKLSAgZmkKLV0pCi0KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRubCBBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfTElCQVYoW0dTVC1BUElfVkVSU0lPTl0sIFtNSU4tVkVSU0lPTl0pCi1kbmwKLWRubCBXaWxsIHNldCBHU1RfUExVR0lOU19MSUJBVl9ESVIgZm9yIHVzZSBpbiBNYWtlZmlsZS5hbS4gTm90ZSB0aGF0IHRoaXMgd2lsbAotZG5sIG9ubHkgYmUgc2V0IGluIGFuIHVuaW5zdGFsbGVkIHNldHVwLCBzaW5jZSAtbGliYXYgc2hpcHMgbm8gLnBjIGZpbGUgYW5kIGluCi1kbmwgYW4gaW5zdGFsbGVkIHNldHVwIGFsbCBwbHVnaW5zIHdpbGwgYmUgZm91bmQgaW4gR1NUX1BMVUdJTlNfRElSIGFueXdheS4KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfTElCQVZdLAotWwotICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfUExVR0lOU19MSUJBViwgZ3N0cmVhbWVyLXBsdWdpbnMtbGliYXYtWyQxXSwgWyQyXSwKLSAgICBbR1N0cmVhbWVyIExpYmF2IFBsdWdpbnNdLCBbbm9dKQotCi0gIGlmIHRlc3QgIngkSEFWRV9HU1RfUExVR0lOU19MSUJBViIgPSAieHllcyI7IHRoZW4KLSAgICBkbmwgY2hlY2sgZm9yIHdoZXJlIGxpYmF2IHBsdWdpbnMgZ290IGluc3RhbGxlZAotICAgIGRubCB0aGlzIGlzIHVzZWQgZm9yIHVuaXQgdGVzdHMKLSAgICBkbmwgYWxsb3cgc2V0dGluZyBiZWZvcmUgY2FsbGluZyB0aGlzIG1hY3JvIHRvIG92ZXJyaWRlCi0gICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfTElCQVZfRElSOyB0aGVuCi0gICAgICBHU1RfUExVR0lOU19MSUJBVl9ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGx1Z2luc2RpciBnc3RyZWFtZXItcGx1Z2lucy1saWJhdi1bJDFdYAotICAgICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfTElCQVZfRElSOyB0aGVuCi0gICAgICAgIEFDX01TR19FUlJPUihbbm8gcGx1Z2luc2RpciBzZXQgaW4gR1N0cmVhbWVyIExpYmF2IFBsdWdpbnMgcGtnLWNvbmZpZyBmaWxlXSkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBHU1RfUExVR0lOU19MSUJBVl9ESVI9IiRHU1RfUExVR0lOU19MSUJBVl9ESVIvZXh0L2xpYmF2IgotICAgIEFDX01TR19OT1RJQ0UoW3VzaW5nIEdTdHJlYW1lciBMaWJhdiBQbHVnaW5zIGluICRHU1RfUExVR0lOU19MSUJBVl9ESVJdKQotICAgIEFDX1NVQlNUKEdTVF9QTFVHSU5TX0xJQkFWX0RJUikKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWRlYnVnaW5mby5tNCBiL2NvbW1vbi9tNC9nc3QtZGVidWdpbmZvLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDg4NTRkLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtZGVidWdpbmZvLm00CisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotQUNfREVGVU4oW0FHX0dTVF9ERUJVR0lORk9dLCBbCi1BQ19BUkdfRU5BQkxFKGRlYnVnLAotQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kZWJ1Z10sW2Rpc2FibGUgYWRkaXRpb24gb2YgLWcgZGVidWdnaW5nIGluZm9dKSwKLVtjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gIHllcykgVVNFX0RFQlVHPXllcyA7OwotICBubykgIFVTRV9ERUJVRz1ubyA7OwotICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZGVidWcpIDs7Ci1lc2FjXSwKLVtVU0VfREVCVUc9eWVzXSkgZG5sIERlZmF1bHQgdmFsdWUKLQotQUNfQVJHX0VOQUJMRShERUJVRywKLUFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtREVCVUddLFtkaXNhYmxlcyBjb21waWxhdGlvbiBvZiBkZWJ1Z2dpbmcgbWVzc2FnZXNdKSwKLVtjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gIHllcykgRU5BQkxFX0RFQlVHPXllcyA7OwotICBubykgIEVOQUJMRV9ERUJVRz1ubyA7OwotICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtREVCVUcpIDs7Ci1lc2FjXSwKLVtFTkFCTEVfREVCVUc9eWVzXSkgZG5sIERlZmF1bHQgdmFsdWUKLWlmIHRlc3QgeCRFTkFCTEVfREVCVUcgPSB4eWVzOyB0aGVuCi0gIEFDX0RFRklORShHU1RfREVCVUdfRU5BQkxFRCwgMSwgW0RlZmluZSBpZiBERUJVRyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBjb21waWxlZCBpbl0pCi1maQotCi1BQ19BUkdfRU5BQkxFKElORk8sCi1BQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLUlORk9dLFtkaXNhYmxlcyBjb21waWxhdGlvbiBvZiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzXSksCi1bY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICB5ZXMpIEVOQUJMRV9JTkZPPXllcyA7OwotICBubykgIEVOQUJMRV9JTkZPPW5vIDs7Ci0gICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1JTkZPKSA7OwotZXNhY10sCi1bRU5BQkxFX0lORk89eWVzXSkgZG5sIERlZmF1bHQgdmFsdWUKLWlmIHRlc3QgeCRFTkFCTEVfSU5GTyA9IHh5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEdTVF9JTkZPX0VOQUJMRUQsIDEsIFtEZWZpbmUgaWYgSU5GTyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBjb21waWxlZCBpbl0pCi1maQotCi1BQ19BUkdfRU5BQkxFKGRlYnVnLWNvbG9yLAotQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1kZWJ1Zy1jb2xvcl0sW2Rpc2FibGVzIGNvbG9yIG91dHB1dCBvZiBERUJVRyBhbmQgSU5GTyBvdXRwdXRdKSwKLVtjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gIHllcykgRU5BQkxFX0RFQlVHX0NPTE9SPXllcyA7OwotICBubykgIEVOQUJMRV9ERUJVR19DT0xPUj1ubyA7OwotICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZGVidWctY29sb3IpIDs7Ci1lc2FjXSwKLVtFTkFCTEVfREVCVUdfQ09MT1I9eWVzXSkgZG5sIERlZmF1bHQgdmFsdWUKLWlmIHRlc3QgIngkRU5BQkxFX0RFQlVHX0NPTE9SIiA9IHh5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEdTVF9ERUJVR19DT0xPUiwgMSwgW0RlZmluZSBpZiBkZWJ1Z2dpbmcgbWVzc2FnZXMgc2hvdWxkIGJlIGNvbG9yaXplZF0pCi1maQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBiL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRlOTc1Ni4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotZG5sIGRlZmF1bHQgZWxlbWVudHMgdXNlZCBmb3IgdGVzdHMgYW5kIHN1Y2gKLQotZG5sIEFHX0dTVF9ERUZBVUxUX0VMRU1FTlRTCi0KLUFDX0RFRlVOKFtBR19HU1RfREVGQVVMVF9FTEVNRU5UU10sCi1bCi0gIGRubCBkZWNpZGUgb24gZGVmYXVsdCBlbGVtZW50cwotICBkbmwgRklYTUU6IGRlc2NyaWJlIHdoZXJlIGV4YWN0bHkgdGhpcyBnZXRzIHVzZWQKLSAgZG5sIEZJWE1FOiBkZWNpZGUgaWYgaXQncyBhIHByb2JsZW0gdGhhdCB0aGlzIGNvdWxkIHBvaW50IHRvIHNpbmtzIGZyb20KLSAgZG5sICAgICAgICBkZXBlbmRpbmcgcGx1Z2luIG1vZHVsZXMKLSAgZG5sIEZJWE1FOiB3aGVuIGNhbiB3ZSBqdXN0IHVzZSBhdXRvYXVkaW9zcmMgYW5kIGF1dG92aWRlb3NyYz8KLSAgREVGQVVMVF9BVURJT1NJTks9ImF1dG9hdWRpb3NpbmsiCi0gIERFRkFVTFRfVklERU9TSU5LPSJhdXRvdmlkZW9zaW5rIgotICBERUZBVUxUX0FVRElPU1JDPSJhbHNhc3JjIgotICBERUZBVUxUX1ZJREVPU1JDPSJ2NGwyc3JjIgotICBERUZBVUxUX1ZJU1VBTElaRVI9Imdvb20iCi0gIGNhc2UgIiRob3N0IiBpbgotICAgICotc3VuLSogfCAqcGMtc29sYXJpcyogKQotICAgICAgREVGQVVMVF9BVURJT1NSQz0ic3VuYXVkaW9zcmMiCi0gICAgICA7OwotICAgICotZGFyd2luKiApCi0gICAgICBERUZBVUxUX0FVRElPU1JDPSJvc3hhdWRpb3NyYyIKLSAgICAgIDs7Ci0gIGVzYWMKLQotICBkbmwgRGVmYXVsdCBhdWRpbyBzaW5rCi0gIEFDX0FSR19XSVRIKGRlZmF1bHQtYXVkaW9zaW5rLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZGVmYXVsdC1hdWRpb3NpbmtdLCBbc3BlY2lmeSBkZWZhdWx0IGF1ZGlvIHNpbmtdKSwKLSAgICBbCi0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICB5ZXMpIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRlZmF1bHQtYXVkaW9zaW5rKSA7OwotICAgICAgICBubykgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRlZmF1bHQtYXVkaW9zaW5rKSA7OwotICAgICAgICAqKSAgIERFRkFVTFRfQVVESU9TSU5LPSIke3dpdGh2YWx9IiA7OwotICAgICAgZXNhYwotICAgIF0sCi0gICAgWwotICAgICAgREVGQVVMVF9BVURJT1NJTks9IiRERUZBVUxUX0FVRElPU0lOSyIKLSAgICBdIGRubCBEZWZhdWx0IHZhbHVlIGFzIGRldGVybWluZWQgYWJvdmUKLSAgKQotICBBQ19NU0dfTk9USUNFKFVzaW5nICRERUZBVUxUX0FVRElPU0lOSyBhcyBkZWZhdWx0IGF1ZGlvIHNpbmspCi0gIEFDX1NVQlNUKERFRkFVTFRfQVVESU9TSU5LKQotICBBQ19ERUZJTkVfVU5RVU9URUQoREVGQVVMVF9BVURJT1NJTkssICIkREVGQVVMVF9BVURJT1NJTksiLAotICAgIFtEZWZhdWx0IGF1ZGlvIHNpbmtdKQotCi0gIGRubCBEZWZhdWx0IGF1ZGlvIHNvdXJjZQotICBBQ19BUkdfV0lUSChkZWZhdWx0LWF1ZGlvc3JjLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZGVmYXVsdC1hdWRpb3NyY10sIFtzcGVjaWZ5IGRlZmF1bHQgYXVkaW8gc291cmNlXSksCi0gICAgWwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc3JjKSA7OwotICAgICAgICBubykgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRlZmF1bHQtYXVkaW9zcmMpIDs7Ci0gICAgICAgICopICAgREVGQVVMVF9BVURJT1NSQz0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFsKLSAgICAgIERFRkFVTFRfQVVESU9TUkM9IiRERUZBVUxUX0FVRElPU1JDIgotICAgIF0gZG5sIERlZmF1bHQgdmFsdWUgYXMgZGV0ZXJtaW5lZCBhYm92ZQotICApCi0gIEFDX01TR19OT1RJQ0UoVXNpbmcgJERFRkFVTFRfQVVESU9TUkMgYXMgZGVmYXVsdCBhdWRpbyBzb3VyY2UpCi0gIEFDX1NVQlNUKERFRkFVTFRfQVVESU9TUkMpCi0gIEFDX0RFRklORV9VTlFVT1RFRChERUZBVUxUX0FVRElPU1JDLCAiJERFRkFVTFRfQVVESU9TUkMiLAotICAgIFtEZWZhdWx0IGF1ZGlvIHNvdXJjZV0pCi0KLSAgZG5sIERlZmF1bHQgdmlkZW8gc2luawotICBBQ19BUkdfV0lUSChkZWZhdWx0LXZpZGVvc2luaywKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWRlZmF1bHQtdmlkZW9zaW5rXSwgW3NwZWNpZnkgZGVmYXVsdCB2aWRlbyBzaW5rXSksCi0gICAgWwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LXZpZGVvc2luaykgOzsKLSAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LXZpZGVvc2luaykgOzsKLSAgICAgICAgKikgICBERUZBVUxUX1ZJREVPU0lOSz0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFsKLSAgICAgIERFRkFVTFRfVklERU9TSU5LPSIkREVGQVVMVF9WSURFT1NJTksiCi0gICAgXSBkbmwgRGVmYXVsdCB2YWx1ZSBhcyBkZXRlcm1pbmVkIGFib3ZlCi0gICkKLSAgQUNfTVNHX05PVElDRShVc2luZyAkREVGQVVMVF9WSURFT1NJTksgYXMgZGVmYXVsdCB2aWRlbyBzaW5rKQotICBBQ19TVUJTVChERUZBVUxUX1ZJREVPU0lOSykKLSAgQUNfREVGSU5FX1VOUVVPVEVEKERFRkFVTFRfVklERU9TSU5LLCAiJERFRkFVTFRfVklERU9TSU5LIiwKLSAgICBbRGVmYXVsdCB2aWRlbyBzaW5rXSkKLQotICBkbmwgRGVmYXVsdCB2aWRlbyBzb3VyY2UKLSAgQUNfQVJHX1dJVEgoZGVmYXVsdC12aWRlb3NyYywKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWRlZmF1bHQtdmlkZW9zcmNdLCBbc3BlY2lmeSBkZWZhdWx0IHZpZGVvIHNvdXJjZV0pLAotICAgIFsKLSAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCi0gICAgICAgIHllcykgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NyYykgOzsKLSAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LXZpZGVvc3JjKSA7OwotICAgICAgICAqKSAgIERFRkFVTFRfVklERU9TUkM9IiR7d2l0aHZhbH0iIDs7Ci0gICAgICBlc2FjCi0gICAgXSwKLSAgICBbCi0gICAgICBERUZBVUxUX1ZJREVPU1JDPSIkREVGQVVMVF9WSURFT1NSQyIKLSAgICBdIGRubCBEZWZhdWx0IHZhbHVlIGFzIGRldGVybWluZWQgYWJvdmUKLSAgKQotICBBQ19NU0dfTk9USUNFKFVzaW5nICRERUZBVUxUX1ZJREVPU1JDIGFzIGRlZmF1bHQgdmlkZW8gc291cmNlKQotICBBQ19TVUJTVChERUZBVUxUX1ZJREVPU1JDKQotICBBQ19ERUZJTkVfVU5RVU9URUQoREVGQVVMVF9WSURFT1NSQywgIiRERUZBVUxUX1ZJREVPU1JDIiwKLSAgICBbRGVmYXVsdCB2aWRlbyBzb3VyY2VdKQotCi0gICAgZG5sIERlZmF1bHQgdmlzdWFsaXplcgotICBBQ19BUkdfV0lUSChkZWZhdWx0LXZpc3VhbGl6ZXIsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1kZWZhdWx0LXZpc3VhbGl6ZXJdLCBbc3BlY2lmeSBkZWZhdWx0IHZpc3VhbGl6ZXJdKSwKLSAgICBbCi0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICB5ZXMpIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRlZmF1bHQtdmlzdWFsaXplcikgOzsKLSAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LXZpc3VhbGl6ZXIpIDs7Ci0gICAgICAgICopICAgREVGQVVMVF9WSVNVQUxJWkVSPSIke3dpdGh2YWx9IiA7OwotICAgICAgZXNhYwotICAgIF0sCi0gICAgWwotICAgICAgREVGQVVMVF9WSVNVQUxJWkVSPSIkREVGQVVMVF9WSVNVQUxJWkVSIgotICAgIF0gZG5sIERlZmF1bHQgdmFsdWUgYXMgZGV0ZXJtaW5lZCBhYm92ZQotICApCi0gIEFDX01TR19OT1RJQ0UoVXNpbmcgJERFRkFVTFRfVklTVUFMSVpFUiBhcyBkZWZhdWx0IHZpc3VhbGl6ZXIpCi0gIEFDX1NVQlNUKERFRkFVTFRfVklTVUFMSVpFUikKLSAgQUNfREVGSU5FX1VOUVVPVEVEKERFRkFVTFRfVklTVUFMSVpFUiwgIiRERUZBVUxUX1ZJU1VBTElaRVIiLAotICAgIFtEZWZhdWx0IHZpc3VhbGl6ZXJdKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtZG9jLm00IGIvY29tbW9uL200L2dzdC1kb2MubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkM2YwZmQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1kb2MubTQKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi1BQ19ERUZVTihbQUdfR1NUX0RPQ0JPT0tfQ0hFQ0tdLAotWwotICBkbmwgY2hvb3NlIGEgbG9jYXRpb24gdG8gaW5zdGFsbCBkb2Nib29rIGRvY3MgaW4KLSAgaWYgdGVzdCAieCRQQUNLQUdFX1RBUk5BTUUiID0gIngiCi0gIHRoZW4KLSAgICBBQ19NU0dfRVJST1IoW0ludGVybmFsIGVycm9yIC0gUEFDS0FHRV9UQVJOQU1FIG5vdCBzZXRdKQotICBmaQotICBkb2NkaXI9IlwkKGRhdGFkaXIpL2RvYy8kUEFDS0FHRV9UQVJOQU1FLSRHU1RfQVBJX1ZFUlNJT04iCi0KLSAgZG5sIGVuYWJsZS9kaXNhYmxlIGRvY2Jvb2sgZG9jdW1lbnRhdGlvbiBidWlsZGluZwotICBBQ19BUkdfRU5BQkxFKGRvY2Jvb2ssCi0gIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kb2Nib29rXSwKLSAgICAgICAgICAgICAgICAgW3VzZSBkb2Nib29rIHRvIGJ1aWxkIGRvY3VtZW50YXRpb24gW2RlZmF1bHQ9bm9dXSksLAotICAgICAgICAgICAgICAgICBlbmFibGVfZG9jYm9vaz1ubykKLQotICBoYXZlX2RvY2Jvb2s9bm8KLQotICBpZiB0ZXN0IHgkZW5hYmxlX2RvY2Jvb2sgPSB4eWVzOyB0aGVuCi0gICAgZG5sIGNoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkCi0KLSAgICBkbmwgY2hlY2sgZm9yIGRvY2Jvb2sgdG9vbHMKLSAgICBBQ19DSEVDS19QUk9HKEhBVkVfRE9DQk9PSzJQUywgZG9jYm9vazJwcywgeWVzLCBubykKLSAgICBBQ19DSEVDS19QUk9HKEhBVkVfWFNMVFBST0MsIHhzbHRwcm9jLCB5ZXMsIG5vKQotICAgIEFDX0NIRUNLX1BST0coSEFWRV9KQURFVEVYLCBqYWRldGV4LCB5ZXMsIG5vKQotICAgIEFDX0NIRUNLX1BST0coSEFWRV9QUzJQREYsIHBzMnBkZiwgeWVzLCBubykKLQotICAgIGRubCBjaGVjayBpZiB3ZSBjYW4gcHJvY2VzcyBkb2Nib29rIHN0dWZmCi0gICAgQVNfRE9DQk9PSyhoYXZlX2RvY2Jvb2s9eWVzLCBoYXZlX2RvY2Jvb2s9bm8pCi0KLSAgICBkbmwgY2hlY2sgZm9yIGV4dHJhIHRvb2xzCi0gICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX0RWSVBTLCBkdmlwcywgeWVzLCBubykKLSAgICBBQ19DSEVDS19QUk9HKEhBVkVfWE1MTElOVCwgeG1sbGludCwgeWVzLCBubykKLQotICAgIEFDX0NIRUNLX1BST0coSEFWRV9QTkdUT1BOTSwgcG5ndG9wbm0sIHllcywgbm8pCi0gICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX1BOTVRPUFMsICBwbm10b3BzLCAgeWVzLCBubykKLSAgICBBQ19DSEVDS19QUk9HKEhBVkVfRVBTVE9QREYsIGVwc3RvcGRmLCB5ZXMsIG5vKQotCi0gICAgZG5sIGNoZWNrIGlmIHdlIGNhbiBnZW5lcmF0ZSBIVE1MCi0gICAgaWYgdGVzdCAieCRIQVZFX1hTTFRQUk9DIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRlbmFibGVfZG9jYm9vayIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkSEFWRV9YTUxMSU5UIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgRE9DX0hUTUw9eWVzCi0gICAgICBBQ19NU0dfTk9USUNFKFdpbGwgb3V0cHV0IEhUTUwgZG9jdW1lbnRhdGlvbikKLSAgICAgZWxzZQotICAgICAgRE9DX0hUTUw9bm8KLSAgICAgIEFDX01TR19OT1RJQ0UoV2lsbCBub3Qgb3V0cHV0IEhUTUwgZG9jdW1lbnRhdGlvbikKLSAgICBmaQotCi0gICAgZG5sIGNoZWNrIGlmIHdlIGNhbiBnZW5lcmF0ZSBQUwotICAgIGlmIHRlc3QgIngkSEFWRV9ET0NCT09LMlBTIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRlbmFibGVfZG9jYm9vayIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkSEFWRV9YTUxMSU5UIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRIQVZFX0pBREVURVgiID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfRFZJUFMiID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfUE5HVE9QTk0iID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfUE5NVE9QUyIgPSAieHllcyI7IHRoZW4KLSAgICAgIERPQ19QUz15ZXMKLSAgICAgIEFDX01TR19OT1RJQ0UoV2lsbCBvdXRwdXQgUFMgZG9jdW1lbnRhdGlvbikKLSAgICBlbHNlCi0gICAgICBET0NfUFM9bm8KLSAgICAgIEFDX01TR19OT1RJQ0UoV2lsbCBub3Qgb3V0cHV0IFBTIGRvY3VtZW50YXRpb24pCi0gICAgZmkKLQotICAgIGRubCBjaGVjayBpZiB3ZSBjYW4gZ2VuZXJhdGUgUERGIC0gdXNpbmcgb25seSBwczJwZGYKLSAgICBpZiB0ZXN0ICJ4JERPQ19QUyIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkZW5hYmxlX2RvY2Jvb2siID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfWE1MTElOVCIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkSEFWRV9QUzJQREYiID0gInh5ZXMiOyB0aGVuCi0gICAgICBET0NfUERGPXllcwotICAgICAgQUNfTVNHX05PVElDRShXaWxsIG91dHB1dCBQREYgZG9jdW1lbnRhdGlvbikKLSAgICBlbHNlCi0gICAgICBET0NfUERGPW5vCi0gICAgICBBQ19NU0dfTk9USUNFKFdpbGwgbm90IG91dHB1dCBQREYgZG9jdW1lbnRhdGlvbikKLSAgICBmaQotCi0gICAgZG5sIGlmIHdlIGRvbid0IGhhdmUgZXZlcnl0aGluZywgd2Ugc2hvdWxkIGRpc2FibGUKLSAgICBpZiB0ZXN0ICJ4JGhhdmVfZG9jYm9vayIgIT0gInh5ZXMiOyB0aGVuCi0gICAgICBlbmFibGVfZG9jYm9vaz1ubwotICAgIGZpCi0gIGZpCi0KLSAgZG5sIGlmIHdlJ3JlIGdvaW5nIHRvIGluc3RhbGwgZG9jdW1lbnRhdGlvbiwgdGVsbCB1cyB3aGVyZQotICBpZiB0ZXN0ICJ4JGhhdmVfZG9jYm9vayIgPSAieHllcyI7IHRoZW4KLSAgICBBQ19NU0dfTk9USUNFKEluc3RhbGxpbmcgZG9jdW1lbnRhdGlvbiBpbiAkZG9jZGlyKQotICAgIEFDX1NVQlNUKGRvY2RpcikKLSAgZmkKLQotICBBTV9DT05ESVRJT05BTChFTkFCTEVfRE9DQk9PSywgICAgICB0ZXN0IHgkZW5hYmxlX2RvY2Jvb2sgPSB4eWVzKQotICBBTV9DT05ESVRJT05BTChET0NfSFRNTCwgICAgICAgICAgICB0ZXN0IHgkRE9DX0hUTUwgPSB4eWVzKQotICBBTV9DT05ESVRJT05BTChET0NfUERGLCAgICAgICAgICAgICB0ZXN0IHgkRE9DX1BERiA9IHh5ZXMpCi0gIEFNX0NPTkRJVElPTkFMKERPQ19QUywgICAgICAgICAgICAgIHRlc3QgeCRET0NfUFMgPSB4eWVzKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBiL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY5ODA4ZC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1kbmwKLWRubCBDaGVjayBmb3Igd29ya2luZyBkbyB3aGlsZSgwKSBtYWNyb3MuIFRoaXMgaXMgdXNlZCBieSBHX1NUTVRfU1RBUlQKLWRubCBhbmQgR19TVE1UX0VORCBpbiBnbGliL2dtYWNyb3MuaC4gV2l0aG91dCBoYXZpbmcgdGhpcyBkZWZpbmVkIHdlCi1kbmwgZ2V0ICJhbWJpZ2lvdXMgaWYtZWxzZSIgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBjb21wbGluZyBDKysgY29kZS4KLWRubAotZG5sIENvcGllZCBmcm9tIEdMaWIncyBjb25maWd1cmUuaW4KLWRubAotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19ET1dISUxFX01BQ1JPU10sWwotCi1kbmwgKioqIGNoZWNrIGZvciB3b3JraW5nIGRvIHdoaWxlKDApIG1hY3JvcyAqKioKLUFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBkbyB3aGlsZSgwKSBtYWNyb3NdLCBfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zLCBbCi0JQUNfVFJZX0NPTVBJTEUoW10sWwotCSNkZWZpbmUgU1RNVF9TVEFSVCBkbwotCSNkZWZpbmUgU1RNVF9FTkQgd2hpbGUoMCkKLQkjZGVmaW5lIFNUTVRfVEVTVCBTVE1UX1NUQVJUIHsgaSA9IDA7IH0gU1RNVF9FTkQKLQlpbnQgbWFpbih2b2lkKSB7IGludCBpID0gMTsgU1RNVF9URVNUOyByZXR1cm4gaTsgfV0sCi0JW19jdl9nX3N1cHBvcnRfZG93aGlsZV9tYWNyb3M9eWVzXSwKLQlbX2N2X2dfc3VwcG9ydF9kb3doaWxlX21hY3Jvcz1ub10sCi0JW19jdl9nX3N1cHBvcnRfZG93aGlsZV9tYWNyb3M9eWVzXSkKLV0pCi1pZiB0ZXN0IHgkX2N2X2dfc3VwcG9ydF9kb3doaWxlX21hY3JvcyA9IHh5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfRE9XSElMRV9NQUNST1MsIDEsIFtkZWZpbmUgZm9yIHdvcmtpbmcgZG8gd2hpbGUoMCkgbWFjcm9zXSkKLWZpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1lcnJvci5tNCBiL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNjc1ODguLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1lcnJvci5tNAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi1kbmwgaGFuZGxlIHZhcmlvdXMgZXJyb3ItcmVsYXRlZCB0aGluZ3MKLQotZG5sIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotZG5sIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0KLWRubCBMYXN0IG1vZGlmaWNhdGlvbjogMjAwOC0wMi0xOAotCi1kbmwgQUdfR1NUX1NFVF9FUlJPUl9DRkxBR1MoW0FERC1XRVJST1JdLCBbTU9SRV9GTEFHU10pCi1kbmwgQUdfR1NUX1NFVF9FUlJPUl9DWFhGTEFHUyhbQURELVdFUlJPUl0sIFtNT1JFX0ZMQUdTXSkKLWRubCBBR19HU1RfU0VUX0xFVkVMX0RFRkFVTFQoW0lTLUdJVC1WRVJTSU9OXSkKLQotCi1kbmwgU2V0cyBXQVJOSU5HX0NGTEFHUyBhbmQgRVJST1JfQ0ZMQUdTIHRvIHNvbWV0aGluZyB0aGUgY29tcGlsZXIgCi1kbmwgd2lsbCBhY2NlcHQgYW5kIEFDX1NVQlNUIHRoZW0gc28gdGhleSBhcmUgYXZhaWxhYmxlIGluIE1ha2VmaWxlCi1kbmwKLWRubCBXQVJOSU5HX0NGTEFHUyB3aWxsIGNvbnRhaW4gZmxhZ3MgdG8gbWFrZSB0aGUgY29tcGlsZXIgZW1pdCBtb3JlCi1kbmwgICB3YXJuaW5ncy4KLWRubCBFUlJPUl9DRkxBR1Mgd2lsbCBjb250YWluIGZsYWdzIHRvIG1ha2UgdGhvc2Ugd2FybmluZ3MgZmF0YWwsCi1kbmwgICB1bmxlc3MgQURELVdFUlJPUiBpcyBzZXQgdG8gIm5vIgotZG5sIAotZG5sIElmIE1PUkVfRkxBR1MgaXMgc2V0LCB0cmllcyB0byBhZGQgZWFjaCBvZiB0aGUgZ2l2ZW4gZmxhZ3MKLWRubCB0byBXQVJOSU5HX0NGTEFHUyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlbS4gRWFjaCBmbGFnIGlzIAotZG5sIHRlc3RlZCBzZXBhcmF0ZWx5LgotZG5sCi1kbmwgVGhlc2UgZmxhZ3MgY2FuIGJlIG92ZXJyaWRkZW4gYXQgbWFrZSB0aW1lOgotZG5sIG1ha2UgRVJST1JfQ0ZMQUdTPQotQUNfREVGVU4oW0FHX0dTVF9TRVRfRVJST1JfQ0ZMQUdTXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCi0gIEFDX1JFUVVJUkUoW0FTX0NPTVBJTEVSX0ZMQUddKQotCi0gIFdBUk5JTkdfQ0ZMQUdTPSIiCi0gIEVSUk9SX0NGTEFHUz0iIgotCi0gIGRubCBpZiB3ZSBzdXBwb3J0IC1XYWxsLCBzZXQgaXQgdW5jb25kaXRpb25hbGx5Ci0gIEFTX0NPTVBJTEVSX0ZMQUcoLVdhbGwsCi0gICAgICAgICAgICAgICAgICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV2FsbCIpCi0KLSAgZG5sIFdhcm4gaWYgZGVjbGFyYXRpb25zIGFmdGVyIHN0YXRlbWVudHMgYXJlIHVzZWQgKEM5OSBleHRlbnNpb24pCi0gIEFTX0NPTVBJTEVSX0ZMQUcoLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQsCi0gICAgICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiKQotCi0gIGRubCBXYXJuIGlmIHZhcmlhYmxlIGxlbmd0aCBhcnJheXMgYXJlIHVzZWQgKEM5OSBleHRlbnNpb24pCi0gIEFTX0NPTVBJTEVSX0ZMQUcoLVd2bGEsCi0gICAgICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVd2bGEiKQotCi0gIGRubCBXYXJuIGZvciBpbnZhbGlkIHBvaW50ZXIgYXJpdGhtZXRpYwotICBBU19DT01QSUxFUl9GTEFHKC1XcG9pbnRlci1hcml0aCwKLSAgICAgICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV3BvaW50ZXItYXJpdGgiKQotCi0gIGRubCBpZiBhc2tlZCBmb3IsIGFkZCAtV2Vycm9yIGlmIHN1cHBvcnRlZAotICBpZiB0ZXN0ICJ4JDEiICE9ICJ4bm8iCi0gIHRoZW4KLSAgICBBU19DT01QSUxFUl9GTEFHKC1XZXJyb3IsIEVSUk9SX0NGTEFHUz0iJEVSUk9SX0NGTEFHUyAtV2Vycm9yIikKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JDIiICE9ICJ4IgotICB0aGVuCi0gICAgVU5TVVBQT1JURUQ9IiIKLSAgICBsaXN0PSIkMiIKLSAgICBmb3IgZWFjaCBpbiAkbGlzdAotICAgIGRvCi0gICAgICBBU19DT01QSUxFUl9GTEFHKCRlYWNoLAotICAgICAgICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgJGVhY2giLAotICAgICAgICAgIFVOU1VQUE9SVEVEPSIkVU5TVVBQT1JURUQgJGVhY2giKQotICAgIGRvbmUKLSAgICBpZiB0ZXN0ICJYJFVOU1VQUE9SVEVEIiAhPSBYIDsgdGhlbgotICAgICAgQUNfTVNHX05PVElDRShbdW5zdXBwb3J0ZWQgY29tcGlsZXIgZmxhZ3M6ICRVTlNVUFBPUlRFRF0pCi0gICAgZmkKLSAgZmkKLQotICBBQ19TVUJTVChXQVJOSU5HX0NGTEFHUykKLSAgQUNfU1VCU1QoRVJST1JfQ0ZMQUdTKQotICBBQ19NU0dfTk9USUNFKFtzZXQgV0FSTklOR19DRkxBR1MgdG8gJFdBUk5JTkdfQ0ZMQUdTXSkKLSAgQUNfTVNHX05PVElDRShbc2V0IEVSUk9SX0NGTEFHUyB0byAkRVJST1JfQ0ZMQUdTXSkKLV0pCi0KLWRubCBTZXRzIFdBUk5JTkdfQ1hYRkxBR1MgYW5kIEVSUk9SX0NYWEZMQUdTIHRvIHNvbWV0aGluZyB0aGUgY29tcGlsZXIgCi1kbmwgd2lsbCBhY2NlcHQgYW5kIEFDX1NVQlNUIHRoZW0gc28gdGhleSBhcmUgYXZhaWxhYmxlIGluIE1ha2VmaWxlCi1kbmwKLWRubCBXQVJOSU5HX0NYWEZMQUdTIHdpbGwgY29udGFpbiBmbGFncyB0byBtYWtlIHRoZSBjb21waWxlciBlbWl0IG1vcmUKLWRubCAgIHdhcm5pbmdzLgotZG5sIEVSUk9SX0NYWEZMQUdTIHdpbGwgY29udGFpbiBmbGFncyB0byBtYWtlIHRob3NlIHdhcm5pbmdzIGZhdGFsLAotZG5sICAgdW5sZXNzIEFERC1XRVJST1IgaXMgc2V0IHRvICJubyIKLWRubCAKLWRubCBJZiBNT1JFX0ZMQUdTIGlzIHNldCwgdHJpZXMgdG8gYWRkIGVhY2ggb2YgdGhlIGdpdmVuIGZsYWdzCi1kbmwgdG8gV0FSTklOR19DRkxBR1MgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZW0uIEVhY2ggZmxhZyBpcyAKLWRubCB0ZXN0ZWQgc2VwYXJhdGVseS4KLWRubAotZG5sIFRoZXNlIGZsYWdzIGNhbiBiZSBvdmVycmlkZGVuIGF0IG1ha2UgdGltZToKLWRubCBtYWtlIEVSUk9SX0NYWEZMQUdTPQotQUNfREVGVU4oW0FHX0dTVF9TRVRfRVJST1JfQ1hYRkxBR1NdLAotWwotICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCi0gIEFDX1JFUVVJUkUoW0FTX0NYWF9DT01QSUxFUl9GTEFHXSkKLQotICBFUlJPUl9DWFhGTEFHUz0iIgotICBXQVJOSU5HX0NYWEZMQUdTPSIiCi0KLSAgZG5sIGlmIHdlIHN1cHBvcnQgLVdhbGwsIHNldCBpdCB1bmNvbmRpdGlvbmFsbHkKLSAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoLVdhbGwsIFdBUk5JTkdfQ1hYRkxBR1M9IiRXQVJOSU5HX0NYWEZMQUdTIC1XYWxsIikKLQotICBkbmwgaWYgYXNrZWQgZm9yLCBhZGQgLVdlcnJvciBpZiBzdXBwb3J0ZWQKLSAgaWYgdGVzdCAieCQxIiAhPSAieG5vIgotICB0aGVuCi0gICAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoLVdlcnJvciwgRVJST1JfQ1hYRkxBR1M9IiRFUlJPUl9DWFhGTEFHUyAtV2Vycm9yIikKLQotICAgIGlmIHRlc3QgIngkRVJST1JfQ1hYRkxBR1MiICE9ICJ4IgotICAgIHRoZW4KLSAgICAgICAgZG5sIGFkZCBleGNlcHRpb25zCi0gICAgICAgIEFTX0NYWF9DT01QSUxFUl9GTEFHKFstV25vLW5vbi12aXJ0dWFsLWR0b3JdLCBFUlJPUl9DWFhGTEFHUz0iJEVSUk9SX0NYWEZMQUdTIC1Xbm8tbm9uLXZpcnR1YWwtZHRvciIpCi0KLQlkbmwgQWRkIC1mbm8tc3RyaWN0LWFsaWFzaW5nIGZvciBHTGliIHZlcnNpb25zIGJlZm9yZSAyLjE5LjgKLQlkbmwgYXMgYmVmb3JlIEdfTE9DSyBhbmQgZnJpZW5kcyBjYXVzZWQgc3RyaWN0IGFsaWFzaW5nIGNvbXBpbGVyCi0JZG5sIHdhcm5pbmdzLgotCVBLR19DSEVDS19FWElTVFMoW2dsaWItMi4wIDwgMi4xOS44XSwgWwotCSAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoWy1mbm8tc3RyaWN0LWFsaWFzaW5nXSwKLQkgICAgRVJST1JfQ1hYRkxBR1M9IiRFUlJPUl9DWFhGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIpCi0JICBdKQotICAgIGZpCi0gIGZpCi0KLSAgaWYgdGVzdCAieCQyIiAhPSAieCIKLSAgdGhlbgotICAgIFVOU1VQUE9SVEVEPSIiCi0gICAgbGlzdD0iJDIiCi0gICAgZm9yIGVhY2ggaW4gJGxpc3QKLSAgICBkbwotICAgICAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoJGVhY2gsCi0gICAgICAgICAgV0FSTklOR19DWFhGTEFHUz0iJFdBUk5JTkdfQ1hYRkxBR1MgJGVhY2giLAotICAgICAgICAgIFVOU1VQUE9SVEVEPSIkVU5TVVBQT1JURUQgJGVhY2giKQotICAgIGRvbmUKLSAgICBpZiB0ZXN0ICJYJFVOU1VQUE9SVEVEIiAhPSBYIDsgdGhlbgotICAgICAgQUNfTVNHX05PVElDRShbdW5zdXBwb3J0ZWQgY29tcGlsZXIgZmxhZ3M6ICRVTlNVUFBPUlRFRF0pCi0gICAgZmkKLSAgZmkKLQotICBBQ19TVUJTVChXQVJOSU5HX0NYWEZMQUdTKQotICBBQ19TVUJTVChFUlJPUl9DWFhGTEFHUykKLSAgQUNfTVNHX05PVElDRShbc2V0IFdBUk5JTkdfQ1hYRkxBR1MgdG8gJFdBUk5JTkdfQ1hYRkxBR1NdKQotICBBQ19NU0dfTk9USUNFKFtzZXQgRVJST1JfQ1hYRkxBR1MgdG8gJEVSUk9SX0NYWEZMQUdTXSkKLV0pCi0KLWRubCBTZXRzIFdBUk5JTkdfT0JKQ0ZMQUdTIGFuZCBFUlJPUl9PQkpDRkxBR1MgdG8gc29tZXRoaW5nIHRoZSBjb21waWxlciAKLWRubCB3aWxsIGFjY2VwdCBhbmQgQUNfU1VCU1QgdGhlbSBzbyB0aGV5IGFyZSBhdmFpbGFibGUgaW4gTWFrZWZpbGUKLWRubAotZG5sIFdBUk5JTkdfT0JKQ0ZMQUdTIHdpbGwgY29udGFpbiBmbGFncyB0byBtYWtlIHRoZSBjb21waWxlciBlbWl0IG1vcmUKLWRubCAgIHdhcm5pbmdzLgotZG5sIEVSUk9SX09CSkNGTEFHUyB3aWxsIGNvbnRhaW4gZmxhZ3MgdG8gbWFrZSB0aG9zZSB3YXJuaW5ncyBmYXRhbCwKLWRubCAgIHVubGVzcyBBREQtV0VSUk9SIGlzIHNldCB0byAibm8iCi1kbmwgCi1kbmwgSWYgTU9SRV9GTEFHUyBpcyBzZXQsIHRyaWVzIHRvIGFkZCBlYWNoIG9mIHRoZSBnaXZlbiBmbGFncwotZG5sIHRvIFdBUk5JTkdfQ0ZMQUdTIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGVtLiBFYWNoIGZsYWcgaXMgCi1kbmwgdGVzdGVkIHNlcGFyYXRlbHkuCi1kbmwKLWRubCBUaGVzZSBmbGFncyBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBtYWtlIHRpbWU6Ci1kbmwgbWFrZSBFUlJPUl9PQkpDRkxBR1M9Ci1BQ19ERUZVTihbQUdfR1NUX1NFVF9FUlJPUl9PQkpDRkxBR1NdLAotWwotICBBQ19SRVFVSVJFKFtBQ19QUk9HX09CSkNdKQotICBBQ19SRVFVSVJFKFtBU19PQkpDX0NPTVBJTEVSX0ZMQUddKQotCi0gIEVSUk9SX09CSkNGTEFHUz0iIgotICBXQVJOSU5HX09CSkNGTEFHUz0iIgotCi0gIGRubCBpZiB3ZSBzdXBwb3J0IC1XYWxsLCBzZXQgaXQgdW5jb25kaXRpb25hbGx5Ci0gIEFTX09CSkNfQ09NUElMRVJfRkxBRygtV2FsbCwgV0FSTklOR19PQkpDRkxBR1M9IiRXQVJOSU5HX09CSkNGTEFHUyAtV2FsbCIpCi0KLSAgZG5sIGlmIGFza2VkIGZvciwgYWRkIC1XZXJyb3IgaWYgc3VwcG9ydGVkCi0gIGlmIHRlc3QgIngkMSIgIT0gInhubyIKLSAgdGhlbgotICAgIEFTX09CSkNfQ09NUElMRVJfRkxBRygtV2Vycm9yLCBFUlJPUl9PQkpDRkxBR1M9IiRFUlJPUl9PQkpDRkxBR1MgLVdlcnJvciIpCi0KLSAgICBpZiB0ZXN0ICJ4JEVSUk9SX09CSkNGTEFHUyIgIT0gIngiCi0gICAgdGhlbgotCWRubCBBZGQgLWZuby1zdHJpY3QtYWxpYXNpbmcgZm9yIEdMaWIgdmVyc2lvbnMgYmVmb3JlIDIuMTkuOAotCWRubCBhcyBiZWZvcmUgR19MT0NLIGFuZCBmcmllbmRzIGNhdXNlZCBzdHJpY3QgYWxpYXNpbmcgY29tcGlsZXIKLQlkbmwgd2FybmluZ3MuCi0JUEtHX0NIRUNLX0VYSVNUUyhbZ2xpYi0yLjAgPCAyLjE5LjhdLCBbCi0JICBBU19PQkpDX0NPTVBJTEVSX0ZMQUcoWy1mbm8tc3RyaWN0LWFsaWFzaW5nXSwKLQkgICAgRVJST1JfT0JKQ0ZMQUdTPSIkRVJST1JfT0JKQ0ZMQUdTIC1mbm8tc3RyaWN0LWFsaWFzaW5nIikKLQkgIF0pCi0gICAgZmkKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JDIiICE9ICJ4IgotICB0aGVuCi0gICAgVU5TVVBQT1JURUQ9IiIKLSAgICBsaXN0PSIkMiIKLSAgICBmb3IgZWFjaCBpbiAkbGlzdAotICAgIGRvCi0gICAgICBBU19PQkpDX0NPTVBJTEVSX0ZMQUcoJGVhY2gsCi0gICAgICAgICAgV0FSTklOR19PQkpDRkxBR1M9IiRXQVJOSU5HX09CSkNGTEFHUyAkZWFjaCIsCi0gICAgICAgICAgVU5TVVBQT1JURUQ9IiRVTlNVUFBPUlRFRCAkZWFjaCIpCi0gICAgZG9uZQotICAgIGlmIHRlc3QgIlgkVU5TVVBQT1JURUQiICE9IFggOyB0aGVuCi0gICAgICBBQ19NU0dfTk9USUNFKFt1bnN1cHBvcnRlZCBjb21waWxlciBmbGFnczogJFVOU1VQUE9SVEVEXSkKLSAgICBmaQotICBmaQotCi0gIEFDX1NVQlNUKFdBUk5JTkdfT0JKQ0ZMQUdTKQotICBBQ19TVUJTVChFUlJPUl9PQkpDRkxBR1MpCi0gIEFDX01TR19OT1RJQ0UoW3NldCBXQVJOSU5HX09CSkNGTEFHUyB0byAkV0FSTklOR19PQkpDRkxBR1NdKQotICBBQ19NU0dfTk9USUNFKFtzZXQgRVJST1JfT0JKQ0ZMQUdTIHRvICRFUlJPUl9PQkpDRkxBR1NdKQotXSkKLQotZG5sIFNldHMgdGhlIGRlZmF1bHQgZXJyb3IgbGV2ZWwgZm9yIGRlYnVnZ2luZyBtZXNzYWdlcwotQUNfREVGVU4oW0FHX0dTVF9TRVRfTEVWRUxfREVGQVVMVF0sCi1bCi0gIGRubCBkZWZpbmUgY29ycmVjdCBlcnJvcmxldmVsIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMuIFdlIHdhbnQgdG8gaGF2ZQotICBkbmwgR1NUX0VSUk9SIG1lc3NhZ2VzIHByaW50ZWQgd2hlbiBydW5uaW5nIGN2cyBidWlsZHMKLSAgaWYgdGVzdCAieFskMV0iID0gInh5ZXMiOyB0aGVuCi0gICAgR1NUX0xFVkVMX0RFRkFVTFQ9R1NUX0xFVkVMX0VSUk9SCi0gIGVsc2UKLSAgICBHU1RfTEVWRUxfREVGQVVMVD1HU1RfTEVWRUxfTk9ORQotICBmaQotICBBQ19ERUZJTkVfVU5RVU9URUQoR1NUX0xFVkVMX0RFRkFVTFQsICRHU1RfTEVWRUxfREVGQVVMVCwKLSAgICBbRGVmYXVsdCBlcnJvcmxldmVsIHRvIHVzZV0pCi0gIGRubCBBQ19TVUJTVCBzbyB3ZSBjYW4gdXNlIGl0IGZvciB3aW4zMi9jb21tb24vY29uZmlnLmgKLSAgQUNfU1VCU1QoR1NUX0xFVkVMX0RFRkFVTFQpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IGIvY29tbW9uL200L2dzdC1mZWF0dXJlLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzYyMTVlLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi1kbmwgUGVyZm9ybSBhIGNoZWNrIGZvciBhIGZlYXR1cmUgZm9yIEdTdHJlYW1lcgotZG5sIFJpY2hhcmQgQm91bHRvbiA8cmljaGFyZC1hbHNhQHRhcnRhcnVzLm9yZz4KLWRubCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4gYWRkZWQgdXNlZnVsIHN0dWZmCi1kbmwgTGFzdCBtb2RpZmljYXRpb246IDI1LzA2LzIwMDEKLWRubAotZG5sIEFHX0dTVF9DSEVDS19GRUFUVVJFKEZFQVRVUkUtTkFNRSwgRkVBVFVSRS1ERVNDUklQVElPTiwKLWRubCAgICAgICAgICAgICAgICAgICBERVBFTkRFTlQtUExVR0lOUywgVEVTVC1GT1ItRkVBVFVSRSwKLWRubCAgICAgICAgICAgICAgICAgICBESVNBQkxFLUJZLURFRkFVTFQsIEFDVElPTi1JRi1VU0UsIEFDVElPTi1JRi1OT1RVU0UpCi1kbmwKLWRubCBUaGlzIG1hY3JvIGFkZHMgYSBjb21tYW5kIGxpbmUgYXJndW1lbnQgdG8gYWxsb3cgdGhlIHVzZXIgdG8gZW5hYmxlCi1kbmwgb3IgZGlzYWJsZSBhIGZlYXR1cmUsIGFuZCBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLCBwZXJmb3JtcyBhIHN1cHBsaWVkCi1kbmwgdGVzdCB0byBjaGVjayBpZiB0aGUgZmVhdHVyZSBpcyBhdmFpbGFibGUuCi1kbmwKLWRubCBUaGUgdGVzdCBzaG91bGQgZGVmaW5lIEhBVkVfPEZFQVRVUkUtTkFNRT4gdG8gInllcyIgb3IgIm5vIiBkZXBlbmRpbmcKLWRubCBvbiB3aGV0aGVyIHRoZSBmZWF0dXJlIGlzIGF2YWlsYWJsZS4KLWRubAotZG5sIFRoZSBtYWNybyB3aWxsIHNldCBVU0VfPEZFQVRVUkUtTkFNRT4gdG8gInllcyIgb3IgIm5vIiBkZXBlbmRpbmcgb24KLWRubCB3aGV0aGVyIHRoZSBmZWF0dXJlIGlzIHRvIGJlIHVzZWQuCi1kbmwgVGhvbWFzIGNoYW5nZWQgdGhpcywgc28gdGhhdCB3aGVuIFVTRV88RkVBVFVSRS1OQU1FPiB3YXMgYWxyZWFkeSBzZXQKLWRubCB0byBubywgdGhlbiBpdCBzdGF5cyB0aGF0IHdheS4KLWRubAotZG5sIFRoZSBtYWNybyB3aWxsIGNhbGwgQU1fQ09ORElUSU9OQUwoVVNFXzxGRUFUVVJFLU5BTUU+LCAuLi4pIHRvIGFsbG93Ci1kbmwgdGhlIGZlYXR1cmUgdG8gY29udHJvbCB3aGF0IGlzIGJ1aWx0IGluIE1ha2VmaWxlLmFtcy4gIElmIHlvdSB3YW50Ci1kbmwgYWRkaXRpb25hbCBhY3Rpb25zIHJlc3VsdGluZyBmcm9tIHRoZSB0ZXN0LCB5b3UgY2FuIGFkZCB0aGVtIHdpdGggdGhlCi1kbmwgQUNUSU9OLUlGLVVTRSBhbmQgQUNUSU9OLUlGLU5PVFVTRSBwYXJhbWV0ZXJzLgotZG5sCi1kbmwgRkVBVFVSRS1OQU1FICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSwgYW5kIHNob3VsZCBiZSBpbgotZG5sICAgICAgICAgICAgICAgICAgICAgcHVyZWx5IHVwcGVyIGNhc2UgY2hhcmFjdGVycy4KLWRubCBGRUFUVVJFLURFU0NSSVBUSU9OIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGZlYXR1cmUgaW4gaGVscCB0ZXh0IGZvcgotZG5sICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudC4KLWRubCBERVBFTkRFTlQtUExVR0lOUyAgIGxpc3RzIGFueSBwbHVnLWlucyB3aGljaCBkZXBlbmQgb24gdGhpcyBmZWF0dXJlLgotZG5sIFRFU1QtRk9SLUZFQVRVUkUgICAgaXMgYSB0ZXN0IHdoaWNoIHNldHMgSEFWRV88RkVBVFVSRS1OQU1FPiB0byAieWVzIgotZG5sICAgICAgICAgICAgICAgICAgICAgb3IgIm5vIiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmVhdHVyZSBpcwotZG5sICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLgotZG5sIERJU0FCTEUtQlktREVGQVVMVCAgaWYgImRpc2FibGVkIiwgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwKLWRubCAgICAgICAgICAgICAgICAgICAgIGlmIGFueSBvdGhlciB2YWx1ZSwgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotZG5sIEFDVElPTi1JRi1VU0UgICAgICAgYW55IGV4dHJhIGFjdGlvbnMgdG8gcGVyZm9ybSBpZiB0aGUgZmVhdHVyZSBpcyB0byBiZQotZG5sICAgICAgICAgICAgICAgICAgICAgdXNlZC4KLWRubCBBQ1RJT04tSUYtTk9UVVNFICAgIGFueSBleHRyYSBhY3Rpb25zIHRvIHBlcmZvcm0gaWYgdGhlIGZlYXR1cmUgaXMgbm90IHRvCi1kbmwgICAgICAgICAgICAgICAgICAgICBiZSB1c2VkLgotZG5sCi1kbmwKLWRubCB0aG9tYXMgOgotZG5sIHdlIGFsc28gYWRkZWQgYSBoaXN0b3J5LgotZG5sIEdTVF9QTFVHSU5TX1lFUyB3aWxsIGNvbnRhaW4gYWxsIHBsdWdpbnMgdG8gYmUgYnVpbHQKLWRubCAgICAgICAgICAgICAgICAgdGhhdCB3ZXJlIGNoZWNrZWQgdGhyb3VnaCBBR19HU1RfQ0hFQ0tfRkVBVFVSRQotZG5sIEdTVF9QTFVHSU5TX05PIHdpbGwgY29udGFpbiB0aG9zZSB0aGF0IHdvbid0IGJlIGJ1aWx0Ci0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfRkVBVFVSRV0sCi1bZWNobwotQUNfTVNHX05PVElDRSgqKiogY2hlY2tpbmcgZmVhdHVyZTogWyQyXSAqKiopCi1pZiB0ZXN0ICJ4WyQzXSIgIT0gIngiCi10aGVuCi0gIEFDX01TR19OT1RJQ0UoKioqIGZvciBwbHVnLWluczogWyQzXSAqKiopCi1maQotZG5sCi1idWlsdGluKGRlZmluZSwgW2dzdF9lbmRpc2FibGVdLCBpZmVsc2UoJDUsIFtkaXNhYmxlZF0sIFtlbmFibGVdLCBbZGlzYWJsZV0pKWRubAotZG5sIGlmIGl0IGlzIHNldCB0byBOTywgdGhlbiBkb24ndCBldmVuIGNvbnNpZGVyIGl0IGZvciBidWlsZGluZwotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9bJDFdIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotQUNfQVJHX0VOQUJMRSh0cmFuc2xpdChbJDFdLCBBLVosIGEteiksCi0gIFsgIF1idWlsdGluKGZvcm1hdCwgLS0lLTI2cyBnc3RfZW5kaXNhYmxlICVzLCBnc3RfZW5kaXNhYmxlLXRyYW5zbGl0KFskMV0sIEEtWiwgYS16KSwgWyQyXWlmZWxzZShbJDNdLCwsOiBbJDNdKSksCi0gIFsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfWyQxXT15ZXM7OwotICAgICAgbm8pIFVTRV9bJDFdPW5vOzsKLSAgICAgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10cmFuc2xpdChbJDFdLCBBLVosIGEteikpIDs7Ci0gICAgZXNhY10sCi0gIFsgVVNFXyQxPV1pZmVsc2UoJDUsIFtkaXNhYmxlZF0sIFtub10sIFt5ZXNdKSkgICAgICAgICAgIGRubCBERUZBVUxUCi0KLWRubCAqKiogc2V0IGl0IGJhY2sgdG8gbm8gaWYgaXQgd2FzIHByZXNldCB0byBubwotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX1skMV09Im5vIgotICBBQ19NU0dfV0FSTigqKiogJDMgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0KQotZmkKLU5PVVNFPQotCi1kbmwgKioqIENoZWNrIGlmIGl0IGlzIHBvcnRlZCBvciBub3QKLWlmIGVjaG8gIiBbJEdTVF9QTFVHSU5TX05PTlBPUlRFRF0gIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIFskMV0gIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfWyQxXT0ibm8iCi0gIEFDX01TR19XQVJOKCoqKiAkMyBub3QgcG9ydGVkKQotZmkKLQotZG5sICoqKiBJZiBpdCdzIGVuYWJsZWQKLQotaWYgdGVzdCB4JFVTRV9bJDFdID0geHllczsgdGhlbgotICBkbmwgc2F2ZSBjb21waWxlIHZhcmlhYmxlcyBiZWZvcmUgdGhlIHRlc3QKLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfWyQxXT1ubwotICBkbmwgVEVTVF9GT1JfRkVBVFVSRQotICAkNAotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgZG5sIElmIGl0IGlzbid0IGZvdW5kLCB1bnNldCBVU0VfWyQxXQotICBpZiB0ZXN0IHgkSEFWRV9bJDFdID0geG5vOyB0aGVuCi0gICAgVVNFX1skMV09bm8KLSAgZWxzZQotICAgIGlmZWxzZShbJDNdLCAsIDosIFtBQ19NU0dfTk9USUNFKCoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IFskM10pXSkKLSAgZmkKLWZpCi1kbmwgKioqIFdhcm4gaWYgaXQncyBkaXNhYmxlZCBvciBub3QgZm91bmQKLWlmIHRlc3QgeCRVU0VfWyQxXSA9IHh5ZXM7IHRoZW4KLSAgaWZlbHNlKFskNl0sICwgOiwgWyQ2XSkKLSAgaWYgdGVzdCAieCQzIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ZRVM9Ilx0WyQzXVxuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLSAgQUNfREVGSU5FKEhBVkVfWyQxXSwgLCBbRGVmaW5lIHRvIGVuYWJsZSAkMl1pZmVsc2UoJDMsLCwgWyAodXNlZCBieSAkMyldKS4pCi1lbHNlCi0gIGlmZWxzZShbJDNdLCAsIDosIFtBQ19NU0dfTk9USUNFKCoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBbJDNdKV0pCi0gIGlmIHRlc3QgIngkMyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0WyQzXVxuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICBpZmVsc2UoWyQ3XSwgLCA6LCBbJDddKQotZmkKLWRubCAqKiogRGVmaW5lIHRoZSBjb25kaXRpb25hbCBhcyBhcHByb3ByaWF0ZQotQU1fQ09ORElUSU9OQUwoVVNFX1skMV0sIHRlc3QgeCRVU0VfWyQxXSA9IHh5ZXMpCi1dKQotCi1kbmwgVXNlIEFDX0NIRUNLX0xJQiBhbmQgQUNfQ0hFQ0tfSEVBREVSIHRvIGRvIGJvdGggdGVzdHMgYXQgb25jZQotZG5sIHNldHMgSEFWRV9tb2R1bGUgaWYgd2UgaGF2ZSBpdAotZG5sIFJpY2hhcmQgQm91bHRvbiA8cmljaGFyZC1hbHNhQHRhcnRhcnVzLm9yZz4KLWRubCBMYXN0IG1vZGlmaWNhdGlvbjogMjYvMDYvMjAwMQotZG5sIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoRkVBVFVSRS1OQU1FLCBMSUIgTkFNRSwgTElCIEZVTkNUSU9OLCBFWFRSQSBMRCBGTEFHUywKLWRubCAgICAgICAgICAgICAgICAgICAgIEhFQURFUiBOQU1FLCBBQ1RJT04tSUYtRk9VTkQsIEFDVElPTi1JRi1OT1QtRk9VTkQpCi1kbmwKLWRubCBUaGlzIGNoZWNrIHdhcyB3cml0dGVuIGZvciBHU3RyZWFtZXI6IGl0IHNob3VsZCBiZSByZW5hbWVkIGFuZCBjaGVja2VkCi1kbmwgZm9yIHBvcnRhYmlsaXR5IGlmIHlvdSBkZWNpZGUgdG8gdXNlIGl0IGVsc2V3aGVyZS4KLWRubAotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19MSUJIRUFERVJdLAotWwotICBBQ19DSEVDS19MSUIoWyQyXSwgWyQzXSwgSEFWRV9bJDFdPXllcywgSEFWRV9bJDFdPW5vLFskNF0pCi0gIGlmIHRlc3QgIngkSEFWRV9bJDFdIiA9ICJ4eWVzIjsgdGhlbgotICAgIEFDX0NIRUNLX0hFQURFUihbJDVdLCA6LCBIQVZFX1skMV09bm8pCi0gICAgaWYgdGVzdCAieCRIQVZFX1skMV0iID0gInh5ZXMiOyB0aGVuCi0gICAgICBkbmwgZXhlY3V0ZSB3aGF0IG5lZWRzIHRvIGJlCi0gICAgICBpZmVsc2UoWyQ2XSwgLCA6LCBbJDZdKQotICAgIGVsc2UKLSAgICAgIGlmZWxzZShbJDddLCAsIDosIFskN10pCi0gICAgZmkKLSAgZWxzZQotICAgIGlmZWxzZShbJDddLCAsIDosIFskN10pCi0gIGZpCi0gIEFDX1NVQlNUKEhBVkVfWyQxXSkKLV0KLSkKLQotZG5sIDIwMDQtMDItMTQgVGhvbWFzIC0gY2hhbmdlZCB0byBnZXQgc2V0IHByb3Blcmx5IGFuZCB1c2UgcHJvcGVyIG91dHB1dAotZG5sIDIwMDMtMDYtMjcgQmVuamFtaW4gT3R0ZSAtIGNoYW5nZWQgdG8gbWFrZSB0aGlzIHdvcmsgd2l0aCBnc3Rjb25maWcuaAotZG5sCi1kbmwgQWRkIGEgc3Vic3lzdGVtIC0tZGlzYWJsZSBmbGFnIGFuZCBhbGwgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzIGFuZCBzdWJzdGl0aW9ucwotZG5sCi1kbmwgQUdfR1NUX0NIRUNLX1NVQlNZU1RFTV9ESVNBQkxFKFNZU05BTUUsIFtzdWJzeXN0ZW0gbmFtZV0pCi1kbmwKLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfU1VCU1lTVEVNX0RJU0FCTEVdLAotWwotICBkbmwgdGhpcyBkZWZpbmUgd2lsbCByZXBsYWNlIGVhY2ggbGl0ZXJhbCBzdWJzeXNfZGVmIG9jY3VycmVuY2Ugd2l0aAotICBkbmwgdGhlIGxvd2VyY2FzZSBoeXBoZW4tc2VwYXJhdGVkIHN1YnN5c3RlbQotICBkbmwgZS5nLiBpZiAkMSBpcyBHU1RfREVCVUcgdGhlbiBzdWJzeXNfZGVmIHdpbGwgYmUgYSBtYWNybyB3aXRoIGdzdC1kZWJ1ZwotICBkZWZpbmUoW3N1YnN5c19kZWZdLHRyYW5zbGl0KFskMV0sIF9BLVosIC1hLXopKQotCi0gIEFDX0FSR19FTkFCTEUoc3Vic3lzX2RlZiwKLSAgICBBQ19IRUxQX1NUUklORygtLWRpc2FibGUtc3Vic3lzX2RlZiwgW2Rpc2FibGUgJDJdKSwKLSAgICBbCi0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgR1NUX0RJU0FCTEVfWyQxXT1ubyA7OwotICAgICAgICBubykgR1NUX0RJU0FCTEVfWyQxXT15ZXMgOzsKLSAgICAgICAgKikgQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1zdWJzeXNfZGVmXSkgOzsKLSAgICAgICBlc2FjCi0gICAgXSwKLSAgICBbR1NUX0RJU0FCTEVfWyQxXT1ub10pIGRubCBEZWZhdWx0IHZhbHVlCi0KLSAgaWYgdGVzdCB4JEdTVF9ESVNBQkxFX1skMV0gPSB4eWVzOyB0aGVuCi0gICAgQUNfTVNHX05PVElDRShbZGlzYWJsZWQgc3Vic3lzdGVtIFskMl1dKQotICAgIEdTVF9ESVNBQkxFX1skMV1fREVGSU5FPSIjZGVmaW5lIEdTVF9ESVNBQkxFXyQxIDEiCi0gIGVsc2UKLSAgICBHU1RfRElTQUJMRV9bJDFdX0RFRklORT0iLyogI3VuZGVmIEdTVF9ESVNBQkxFXyQxICovIgotICBmaQotICBBQ19TVUJTVChHU1RfRElTQUJMRV9bJDFdX0RFRklORSkKLSAgdW5kZWZpbmUoW3N1YnN5c19kZWZdKQotXSkKLQotCi1kbmwgUGFyc2UgZ3N0Y29uZmlnLmggZm9yIGZlYXR1cmUgYW5kIGRlZmluZXMgYWRkIHRoZSBzeW1ib2xzIGFuZCBzdWJzdGl0aW9ucwotZG5sCi1kbmwgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKEdTVF9DT05GSUdQQVRILCBGRUFUVVJFKQotZG5sCi1BQ19ERUZVTihbQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFXSwKLVsKLSAgZ3JlcCA+L2Rldi9udWxsICIjdW5kZWYgR1NUX0RJU0FCTEVfJDIiICQxCi0gIGlmIHRlc3QgJD8gPSAwOyB0aGVuCi0gICAgR1NUX0RJU0FCTEVfWyQyXT0wCi0gIGVsc2UKLSAgICBHU1RfRElTQUJMRV9bJDJdPTEKLSAgZmkKLSAgQUNfU1VCU1QoR1NUX0RJU0FCTEVfWyQyXSkKLV0pCi0KLWRubCBQYXJzZSBnc3Rjb25maWcuaCBhbmQgZGVmaW5lcyBhZGQgdGhlIHN5bWJvbHMgYW5kIHN1YnN0aXRpb25zCi1kbmwKLWRubCBHU1RfQ09ORklHUEFUSD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1pbmNsdWRlZGlyIGdzdHJlYW1lci0xLjBgIi9nc3QvZ3N0Y29uZmlnLmgiCi1kbmwgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFUyhHU1RfQ09ORklHUEFUSCkKLWRubAotQUNfREVGVU4oW0FHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRVNdLAotWwotICBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEUoJDEsR1NUX0RFQlVHKQotICBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEUoJDEsTE9BRFNBVkUpCi0gIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRSgkMSxQQVJTRSkKLSAgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKCQxLFRSQUNFKQotICBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEUoJDEsQUxMT0NfVFJBQ0UpCi0gIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRSgkMSxSRUdJU1RSWSkKLSAgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKCQxLFBMVUdJTikKLSAgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKCQxLFhNTCkKLV0pCi0KLWRubCBBR19HU1RfQ0hFQ0tfR1NUX0RFQlVHX0RJU0FCTEVEKEFDVElPTi1JRi1ESVNBQkxFRCwgQUNUSU9OLUlGLU5PVC1ESVNBQkxFRCkKLWRubAotZG5sIENoZWNrcyBpZiB0aGUgR1N0cmVhbWVyIGRlYnVnZ2luZyBzeXN0ZW0gaXMgZGlzYWJsZWQgaW4gdGhlIGNvcmUgdmVyc2lvbgotZG5sIHdlIGFyZSBjb21waWxpbmcgYWdhaW5zdCAoYnkgY2hlY2tpbmcgZ3N0Y29uZmlnLmgpCi1kbmwKLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX0RFQlVHX0RJU0FCTEVEXSwKLVsKLSAgQUNfUkVRVUlSRShbQUdfR1NUX0NIRUNLX0dTVF0pCi0KLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBHU3RyZWFtZXIgZGVidWdnaW5nIHN5c3RlbSBpcyBlbmFibGVkXSkKLSAgQUNfTEFOR19QVVNIKFtDXSkKLSAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJEdTVF9DRkxBR1MgJENGTEFHUyIKLSAgQUNfQ09NUElMRV9JRkVMU0UoWwotICAgIEFDX0xBTkdfU09VUkNFKFtbCi0gICAgICAjaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotICAgICAgI2lmZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICAgICAgI2Vycm9yICJkZWJ1Z2dpbmcgZGlzYWJsZWQsIG1ha2UgY29tcGlsZXIgZmFpbCIKLSAgICAgICNlbmRpZl1dKV0sIFsgZGVidWdfc3lzdGVtX2VuYWJsZWQ9eWVzXSwgW2RlYnVnX3N5c3RlbV9lbmFibGVkPW5vXSkKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0gIEFDX0xBTkdfUE9QKFtDXSkKLQotICBBQ19NU0dfUkVTVUxUKFskZGVidWdfc3lzdGVtX2VuYWJsZWRdKQotCi0gIGlmIHRlc3QgIngkZGVidWdfc3lzdGVtX2VuYWJsZWQiID0gInh5ZXMiIDsgdGhlbgotICAgICQyCi0gICAgdHJ1ZQotICBlbHNlCi0gICAgJDEKLSAgICB0cnVlCi0gIGZpCi1dKQotCi1kbmwgcmVsaWVzIG9uIEdTVF9QTFVHSU5TX0FMTCwgR1NUX1BMVUdJTlNfU0VMRUNURUQsIEdTVF9QTFVHSU5TX1lFUywKLWRubCBHU1RfUExVR0lOU19OTywgYW5kIEJVSUxEX0VYVEVSTkFMCi1BQ19ERUZVTihbQUdfR1NUX09VVFBVVF9QTFVHSU5TXSwgWwotCi1wcmludGYgImNvbmZpZ3VyZTogKioqIFBsdWctaW5zIHdpdGhvdXQgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHRoYXQgd2lsbCBiZSBidWlsdDpcbiIKLSggZm9yIGkgaW4gJEdTVF9QTFVHSU5TX1NFTEVDVEVEOyBkbyBwcmludGYgJ1x0JyRpJ1xuJzsgZG9uZSApIHwgc29ydAotcHJpbnRmICJcbiIKLQotcHJpbnRmICJjb25maWd1cmU6ICoqKiBQbHVnLWlucyB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgTk9UIGJlIGJ1aWx0OlxuIgotKCBmb3IgaSBpbiAkR1NUX1BMVUdJTlNfQUxMOyBkbwotICAgIGNhc2UgIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiBpbgotICAgICAgKlwgJGlcICopCi0JOzsKLSAgICAgICopCi0JcHJpbnRmICdcdCckaSdcbicKLQk7OwotICAgIGVzYWMKLSAgZG9uZSApIHwgc29ydAotcHJpbnRmICJcbiIKLQotcHJpbnRmICJjb25maWd1cmU6ICoqKiBQbHVnLWlucyB0aGF0IGhhdmUgTk9UIGJlZW4gcG9ydGVkOlxuIgotKCBmb3IgaSBpbiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEOyBkbwotCXByaW50ZiAnXHQnJGknXG4nCi0gIGRvbmUgKSB8IHNvcnQKLXByaW50ZiAiXG4iCi0KLWlmIHRlc3QgIngkQlVJTERfRVhURVJOQUwiID0gInhubyI7IHRoZW4KLSAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBObyBwbHVnLWlucyB3aXRoIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aWxsIGJlIGJ1aWx0XG4iCi1lbHNlCi0gIHByaW50ZiAiY29uZmlndXJlOiAqKiogUGx1Zy1pbnMgd2l0aCBkZXBlbmRlbmNpZXMgdGhhdCB3aWxsIGJlIGJ1aWx0OiIKLSAgcHJpbnRmICIkR1NUX1BMVUdJTlNfWUVTXG4iIHwgc29ydAotICBwcmludGYgIlxuIgotICBwcmludGYgImNvbmZpZ3VyZTogKioqIFBsdWctaW5zIHdpdGggZGVwZW5kZW5jaWVzIHRoYXQgd2lsbCBOT1QgYmUgYnVpbHQ6IgotICBwcmludGYgIiRHU1RfUExVR0lOU19OT1xuIiB8IHNvcnQKLSAgcHJpbnRmICJcbiIKLWZpCi1dKQotCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IGIvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhZGZkMy4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotZG5sCi1kbmwgQ2hlY2sgZm9yIGNvbXBpbGVyIG1lY2hhbmlzbSB0byBzaG93IGZ1bmN0aW9ucyBpbiBkZWJ1Z2dpbmcKLWRubCBjb3BpZWQgZnJvbSBhbiBBbGkgcGF0Y2ggZmxvYXRpbmcgb24gdGhlIGludGVybmV0Ci1kbmwKLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfRlVOQ1RJT05dLFsKLSAgZG5sICMxOiBfX1BSRVRUWV9GVU5DVElPTl9fCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyICRDQyBpbXBsZW1lbnRzIF9fUFJFVFRZX0ZVTkNUSU9OX18pCi0gIEFDX0NBQ0hFX1ZBTChnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb24sWwotICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkaW8uaD5dLAotICAgICAgICAgICAgICAgIFtwcmludGYoIiVzIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7XSwKLSAgICAgICAgICAgICAgICBnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb249eWVzLAotICAgICAgICAgICAgICAgIGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbj1ubykKLSAgXSkKLSAgQUNfTVNHX1JFU1VMVCgkZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uKQotICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uIiA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX1BSRVRUWV9GVU5DVElPTiwgMSwKLSAgICAgICAgICAgICAgW2RlZmluZWQgaWYgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgX19QUkVUVFlfRlVOQ1RJT05fX10pCi0gIGZpCi0KLWRubCAjMjogX19GVU5DVElPTl9fCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyICRDQyBpbXBsZW1lbnRzIF9fRlVOQ1RJT05fXykKLSAgQUNfQ0FDSEVfVkFMKGdzdF9jdl9oYXZlX2Z1bmN0aW9uLFsKLSAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGlvLmg+XSwKLSAgICAgICAgICAgICAgICBbcHJpbnRmKCIlcyIsIF9fRlVOQ1RJT05fXyk7XSwKLSAgICAgICAgICAgICAgICBnc3RfY3ZfaGF2ZV9mdW5jdGlvbj15ZXMsCi0gICAgICAgICAgICAgICAgZ3N0X2N2X2hhdmVfZnVuY3Rpb249bm8pCi0gIF0pCi0gIEFDX01TR19SRVNVTFQoJGdzdF9jdl9oYXZlX2Z1bmN0aW9uKQotICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuY3Rpb24iID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfRlVOQ1RJT04sIDEsCi0gICAgICAgICAgICAgIFtkZWZpbmVkIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIF9fRlVOQ1RJT05fX10pCi0gIGZpCi0KLWRubCAjMzogX19mdW5jX18KLSAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgJENDIGltcGxlbWVudHMgX19mdW5jX18pCi0gIEFDX0NBQ0hFX1ZBTChnc3RfY3ZfaGF2ZV9mdW5jLFsKLSAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGlvLmg+XSwKLSAgICAgICAgICAgICAgICBbcHJpbnRmKCIlcyIsIF9fZnVuY19fKTtdLAotICAgICAgICAgICAgICAgIGdzdF9jdl9oYXZlX2Z1bmM9eWVzLAotICAgICAgICAgICAgICAgIGdzdF9jdl9oYXZlX2Z1bmM9bm8pCi0gIF0pCi0gIEFDX01TR19SRVNVTFQoJGdzdF9jdl9oYXZlX2Z1bmMpCi0gIGlmIHRlc3QgIiRnc3RfY3ZfaGF2ZV9mdW5jIiA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX0ZVTkMsIDEsCi0gICAgICAgICAgICAgIFtkZWZpbmVkIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIF9fZnVuY19fXSkKLSAgZmkKLQotZG5sIG5vdyBkZWZpbmUgRlVOQ1RJT04gdG8gd2hhdGV2ZXIgd29ya3MsIGFuZCBmYWxsYmFjayB0byAiIgotICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uIiA9IHllczsgdGhlbgotICAgIGZ1bmN0aW9uPV9fUFJFVFRZX0ZVTkNUSU9OX18KLSAgZWxzZQotICAgIGlmIHRlc3QgIiRnc3RfY3ZfaGF2ZV9mdW5jdGlvbiIgPSB5ZXM7IHRoZW4KLSAgICAgIGZ1bmN0aW9uPV9fRlVOQ1RJT05fXwotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRnc3RfY3ZfaGF2ZV9mdW5jIiA9IHllczsgdGhlbgotICAgICAgICBmdW5jdGlvbj1fX2Z1bmNfXwotICAgICAgZWxzZQotICAgICAgICBmdW5jdGlvbj1cIlwiCi0gICAgICBmaQotICAgIGZpCi0gIGZpCi0gIEFDX0RFRklORV9VTlFVT1RFRChHU1RfRlVOQ1RJT04sICRmdW5jdGlvbiwgW21hY3JvIHRvIHVzZSB0byBzaG93IGZ1bmN0aW9uIG5hbWVdKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBiL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY4MTdlYi4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1kbmwgZ2V0dGV4dCBzZXR1cAotCi1kbmwgQUdfR1NUX0dFVFRFWFQoW2dldHRleHQtcGFja2FnZV0pCi1kbmwgZGVmaW5lcyBHRVRURVhUX1BBQ0tBR0UgYW5kIExPQ0FMRURJUgotCi1BQ19ERUZVTihbQUdfR1NUX0dFVFRFWFRdLAotWwotICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgotICAgIEdFVFRFWFRfUEFDS0FHRT1bJDFdCi0gIGVsc2UKLSAgICBHRVRURVhUX1BBQ0tBR0U9W05VTExdCi0gIGZpCi0gIEFDX1NVQlNUKEdFVFRFWFRfUEFDS0FHRSkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKFtHRVRURVhUX1BBQ0tBR0VdLCAiJEdFVFRFWFRfUEFDS0FHRSIsCi0gICAgICAgICAgICAgICAgICAgICBbZ2V0dGV4dCBwYWNrYWdlIG5hbWVdKQotCi0gIGRubCBtYWtlIHN1cmUgcG8vTWFrZXZhcnMgaXMga2VwdCBpbiBzeW5jIHdpdGggR0VUVEVYVF9QQUNLQUdFCi0gIGlmIHRlc3QgLWUgIiR7c3JjZGlyfS9wby9NYWtldmFycyI7IHRoZW4KLSAgICBpZiAhIGdyZXAgLWUgIiQxIiAiJHtzcmNkaXJ9L3BvL01ha2V2YXJzIjsgdGhlbgotICAgICAgQUNfTVNHX0VSUk9SKFtET01BSU4gaW4gcG8vTWFrZXZhcnMgZG9lcyBub3QgbWF0Y2ggR0VUVEVYVF9QQUNLQUdFICQxXSkKLSAgICBmaQotICBmaQotCi0gIGRubCBkZWZpbmUgTE9DQUxFRElSIGluIGNvbmZpZy5oCi0gIEFTX0FDX0VYUEFORChMT0NBTEVESVIsICRkYXRhZGlyL2xvY2FsZSkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKFtMT0NBTEVESVJdLCAiJExPQ0FMRURJUiIsCi0gICAgICAgICAgICAgICAgICAgICBbZ2V0dGV4dCBsb2NhbGUgZGlyXSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IGIvY29tbW9uL200L2dzdC1nbGliMi5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3MjUwNy4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWdsaWIyLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLWRubCBjaGVjayBmb3IgYSBtaW5pbXVtIHZlcnNpb24gb2YgR0xpYgotCi1kbmwgQUdfR1NUX0dMSUJfQ0hFQ0soW21pbmltdW0tdmVyc2lvbi1yZXF1aXJlZF0pCi0KLUFDX0RFRlVOKFtBR19HU1RfR0xJQl9DSEVDS10sCi1bCi0gIEFDX1JFUVVJUkUoW0FTX05BTk9dKQotCi0gIGRubCBNaW5pbXVtIHJlcXVpcmVkIHZlcnNpb24gb2YgR0xpYgotICBHTElCX1JFUT1bJDFdCi0gIGlmIHRlc3QgIngkR0xJQl9SRVEiID0gIngiCi0gIHRoZW4KLSAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSBzcGVjaWZ5IGEgcmVxdWlyZWQgdmVyc2lvbiBmb3IgR0xpYiAyLjBdKQotICBmaQotICBBQ19TVUJTVChHTElCX1JFUSkKLQotICBkbmwgQ2hlY2sgZm9yIGdsaWIgd2l0aCBldmVyeXRoaW5nCi0gIEFHX0dTVF9QS0dfQ0hFQ0tfTU9EVUxFUyhHTElCLAotICAgIGdsaWItMi4wID49ICRHTElCX1JFUSBnb2JqZWN0LTIuMCBnbW9kdWxlLW5vLWV4cG9ydC0yLjApCi0KLSAgaWYgdGVzdCAieCRIQVZFX0dMSUIiID0gInhubyI7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoW1RoaXMgcGFja2FnZSByZXF1aXJlcyBHTGliID49ICRHTElCX1JFUSB0byBjb21waWxlLl0pCi0gIGZpCi0KLSAgZG5sIEFkZCBkZWZpbmUgdG8gdGVsbCBHTGliIHRoYXQgdGhyZWFkaW5nIGlzIGFsd2F5cyBlbmFibGVkIHdpdGhpbiBHU3RyZWFtZXIKLSAgZG5sIGNvZGUgKG9wdGltaXNhdGlvbiwgYnlwYXNzZXMgY2hlY2tzIGlmIHRoZSB0aHJlYWRpbmcgc3lzdGVtIGlzIGVuYWJsZWQKLSAgZG5sIHdoZW4gdXNpbmcgdGhyZWFkaW5nIHByaW1pdGl2ZXMpCi0gIEdMSUJfRVhUUkFfQ0ZMQUdTPSIkR0xJQl9FWFRSQV9DRkxBR1MgLURHX1RIUkVBRFNfTUFOREFUT1JZIgotCi0gIGRubCBEZWZpbmUgR19ESVNBQkxFX0RFUFJFQ0FURUQgZm9yIGRldmVsb3BtZW50IHZlcnNpb25zCi0gIGlmIHRlc3QgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JTk9SICUgMmAiID0gIngxIiAtYSAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlDUk8gJzwnIDkwYCIgPSAieDEiOyB0aGVuCi0gICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfRElTQUJMRV9ERVBSRUNBVEVEIgotICBmaQotCi0gIEFDX0FSR19FTkFCTEUoZ29iamVjdC1jYXN0LWNoZWNrcywKLSAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ29iamVjdC1jYXN0LWNoZWNrc1s9QDw6QG5vL2F1dG8veWVzQDo+QF1dLAotICAgICAgW0VuYWJsZSBHT2JqZWN0IGNhc3QgY2hlY2tzXSksW2VuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzPSRlbmFibGV2YWxdLAotICAgIFtlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz1hdXRvXSkKLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzIiA9ICJ4YXV0byI7IHRoZW4KLSAgICBkbmwgVHVybiBvbiBjYXN0IGNoZWNrcyBvbmx5IGZvciBkZXZlbG9wbWVudCB2ZXJzaW9ucwotICAgIGlmIHRlc3QgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JTk9SICUgMmAiID0gIngxIiAtYSAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlDUk8gJzwnIDkwYCIgPSAieDEiOyB0aGVuCi0gICAgICBlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz15ZXMKLSAgICBlbHNlCi0gICAgICBlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz1ubwotICAgIGZpCi0gIGZpCi0KLSAgaWYgdGVzdCAieCRlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcyIgPSAieG5vIjsgdGhlbgotICAgIEdMSUJfRVhUUkFfQ0ZMQUdTPSIkR0xJQl9FWFRSQV9DRkxBR1MgLURHX0RJU0FCTEVfQ0FTVF9DSEVDS1MiCi0gIGZpCi0KLSAgQUNfQVJHX0VOQUJMRShnbGliLWFzc2VydHMsCi0gICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdsaWItYXNzZXJ0c1s9QDw6QG5vL3llc0A6PkBdXSwKLSAgICAgIFtFbmFibGUgR0xpYiBhc3NlcnRpb25dKSxbZW5hYmxlX2dsaWJfYXNzZXJ0aW9ucz0kZW5hYmxldmFsXSwKLSAgICBbZW5hYmxlX2dsaWJfYXNzZXJ0aW9ucz15ZXNdKQotCi0gIGlmIHRlc3QgIngkZW5hYmxlX2dsaWJfYXNzZXJ0aW9ucyIgPSAieG5vIjsgdGhlbgotICAgIEdMSUJfRVhUUkFfQ0ZMQUdTPSIkR0xJQl9FWFRSQV9DRkxBR1MgLURHX0RJU0FCTEVfQVNTRVJUIgotICBmaQotCi0gIGRubCBGaW5kIGxvY2F0aW9uIG9mIGdsaWIgdXRpbHMuIFBlb3BsZSBtYXkgd2FudCB0byBvciBoYXZlIHRvIG92ZXJyaWRlIHRoZXNlLAotICBkbmwgZS5nLiBpbiBhIGNyb3NzLWNvbXBpbGUgc2l0dWF0aW9uIHdoZXJlIFBBVEggaXMgYSBiaXQgbWVzc2VkIHVwLiBXZSBuZWVkCi0gIGRubCBmb3IgdGhlc2UgdG9vbHMgdG8gd29yayBvbiB0aGUgaG9zdCwgc28gY2FuJ3QganVzdCB1c2UgdGhlIG9uZSBmcm9tIHRoZQotICBkbmwgR0xpYiBpbnN0YWxsYXRpb24gdGhhdCBwa2ctY29uZmlnIHBpY2tzIHVwLCBhcyB0aGF0IG1pZ2h0IGJlIGZvciBhCi0gIGRubCBkaWZmZXJlbnQgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KLSAgZG5sCi0gIGRubCBnbGliLWdlbm1hcnNoYWw6Ci0gIEFDX01TR19DSEVDS0lORyhmb3IgZ2xpYi1nZW5tYXJzaGFsKQotICBpZiB0ZXN0ICJ4JEdMSUJfR0VOTUFSU0hBTCIgIT0gIngiOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChbJEdMSUJfR0VOTUFSU0hBTCAoZnJvbSBlbnZpcm9ubWVudCldKQotICBlbHNlCi0gICAgR0xJQl9HRU5NQVJTSEFMPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdsaWJfZ2VubWFyc2hhbCBnbGliLTIuMGAKLSAgICBpZiAkR0xJQl9HRU5NQVJTSEFMIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCA+L2Rldi9udWxsOyB0aGVuCi0gICAgICBBQ19NU0dfUkVTVUxUKFskR0xJQl9HRU5NQVJTSEFMIChmcm9tIHBrZy1jb25maWcgcGF0aCldKQotICAgIGVsc2UKLSAgICAgIEFDX1BBVEhfUFJPRyhHTElCX0dFTk1BUlNIQUwsIFtnbGliLWdlbm1hcnNoYWxdLCBbZ2xpYi1nZW5tYXJzaGFsXSkKLSAgICAgIEFDX01TR19SRVNVTFQoWyRHTElCX0dFTk1BUlNIQUxdKQotICAgIGZpCi0gIGZpCi0gIGlmICEgJEdMSUJfR0VOTUFSU0hBTCAtLXZlcnNpb24gMj4vZGV2L251bGwgPi9kZXYvbnVsbDsgdGhlbgotICAgIEFDX01TR19XQVJOKFskR0xJQl9HRU5NQVJTSEFMIGRvZXMgbm90IHNlZW0gdG8gd29yayFdKQotICBmaQotICBBQ19TVUJTVChHTElCX0dFTk1BUlNIQUwpCi0KLSAgZG5sIGdsaWItbWtlbnVtczoKLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBnbGliLW1rZW51bXMpCi0gIGlmIHRlc3QgIngkR0xJQl9NS0VOVU1TIiAhPSAieCI7IHRoZW4KLSAgICBBQ19NU0dfUkVTVUxUKFskR0xJQl9NS0VOVU1TIChmcm9tIGVudmlyb25tZW50KV0pCi0gIGVsc2UKLSAgICBkbmwgZ2xpYi1ta2VudW1zIGlzIHdyaXR0ZW4gaW4gcGVybCBzbyBzaG91bGQgYWx3YXlzIHdvcmsgcmVhbGx5Ci0gICAgR0xJQl9NS0VOVU1TPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdsaWJfbWtlbnVtcyBnbGliLTIuMGAKLSAgICBBQ19NU0dfUkVTVUxUKFskR0xJQl9NS0VOVU1TXSkKLSAgZmkKLSAgaWYgISAkR0xJQl9NS0VOVU1TIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCA+L2Rldi9udWxsOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oWyRHTElCX01LRU5VTVMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIV0pCi0gIGZpCi0gIEFDX1NVQlNUKEdMSUJfTUtFTlVNUykKLQotICBBQ19TVUJTVChHTElCX0VYVFJBX0NGTEFHUykKLQotICBkbmwgTm93IGNoZWNrIGZvciBHSU8KLSAgUEtHX0NIRUNLX01PRFVMRVMoR0lPLCBnaW8tMi4wID49ICRHTElCX1JFUSkKLSAgaWYgdGVzdCAieCRIQVZFX0dJTyIgPSAieG5vIjsgdGhlbgotICAgIEFDX01TR19FUlJPUihbVGhpcyBwYWNrYWdlIHJlcXVpcmVzIEdJTyA+PSAkR0xJQl9SRVEgdG8gY29tcGlsZS5dKQotICBmaQotICAKLSAgR0lPX01PRFVMRV9ESVI9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdpb21vZHVsZWRpciBnaW8tMi4wYCIKLSAgQUNfREVGSU5FX1VOUVVPVEVEKEdJT19NT0RVTEVfRElSLCAiJEdJT19NT0RVTEVfRElSIiwKLSAgICAgIFtUaGUgR0lPIG1vZHVsZXMgZGlyZWN0b3J5Ll0pCi0gIEdJT19MSUJESVI9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWxpYmRpciBnaW8tMi4wYCIKLSAgQUNfREVGSU5FX1VOUVVPVEVEKEdJT19MSUJESVIsICIkR0lPX0xJQkRJUiIsCi0gICAgICBbVGhlIEdJTyBsaWJyYXJ5IGRpcmVjdG9yeS5dKQotICBHSU9fUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ2lvLTIuMGAiCi0gIEFDX0RFRklORV9VTlFVT1RFRChHSU9fUFJFRklYLCAiJEdJT19QUkVGSVgiLAotICAgICAgW1RoZSBHSU8gaW5zdGFsbCBwcmVmaXguXSkKLQotICBBQ19TVUJTVChHSU9fQ0ZMQUdTKQotICBBQ19TVUJTVChHSU9fTElCUykKLSAgQUNfU1VCU1QoR0lPX0xERkxBR1MpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1saWJ4bWwyLm00IGIvY29tbW9uL200L2dzdC1saWJ4bWwyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTg0M2YwLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtbGlieG1sMi5tNAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLWRubCBjYWxsIHRoaXMgbWFjcm8gd2l0aCB0aGUgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIGFzIGFuIGFyZ3VtZW50Ci1kbmwgdGhpcyBtYWNybyBzZXRzIGFuZCBBQ19TVUJTVHMgWE1MX0NGTEFHUyBhbmQgWE1MX0xJQlMKLWRubCBpdCBhbHNvIHNldHMgTElCWE1MX1BLRywgdXNlZCBmb3IgdGhlIHBrZy1jb25maWcgZmlsZQotCi1BQ19ERUZVTihbQUdfR1NUX0xJQlhNTDJfQ0hFQ0tdLAotWwotICBkbmwgTWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIG9mIGxpYnhtbDIKLSAgZG5sIGRlZmF1bHQgdG8gMi40LjkgaWYgbm90IHNwZWNpZmllZAotICBMSUJYTUwyX1JFUT1pZmVsc2UoWyQxXSwsMi40LjksWyQxXSkKLSAgQUNfU1VCU1QoTElCWE1MMl9SRVEpCi0KLSAgZG5sIGNoZWNrIGZvciBsaWJ4bWwyCi0gIFBLR19DSEVDS19NT0RVTEVTKFhNTCwgbGlieG1sLTIuMCA+PSAkTElCWE1MMl9SRVEsCi0gICAgICAgICAgICAgICAgICAgIEhBVkVfTElCWE1MMj15ZXMsIFsKLSAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICAgICAgICAgICAgICAgICAgIEhBVkVfTElCWE1MMj1ubwotICAgICAgICAgICAgICAgICAgICBdKQotICBpZiB0ZXN0ICJ4JEhBVkVfTElCWE1MMiIgPSAieHllcyI7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9MSUJYTUwyLCAxLCBbRGVmaW5lIGlmIGxpYnhtbDIgaXMgYXZhaWxhYmxlXSkKLSAgZWxzZQotICAgIEFDX01TR19FUlJPUihbCi0gICAgICAgIE5lZWQgbGlieG1sMiBhbmQgZGV2ZWxvcG1lbnQgaGVhZGVycy9maWxlcyB0byBidWlsZCBHU3RyZWFtZXIuCi0KLSAgICAgICAgWW91IGNhbiBkbyB3aXRob3V0IGxpYnhtbDIgaWYgeW91IHBhc3MgLS1kaXNhYmxlLWxvYWRzYXZlIHRvCi0gICAgICAgIGNvbmZpZ3VyZSwgYnV0IHRoYXQgYnJlYWtzIEFCSSwgc28gZG9uJ3QgZG8gdGhhdCB1bmxlc3MgeW91Ci0gICAgICAgIGFyZSBidWlsZGluZyBmb3IgYW4gZW1iZWRkZWQgc2V0dXAgYW5kIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgotICAgIF0pCi0gIGZpCi0gIGRubCB0aGlzIGlzIGZvciB0aGUgLnBjIGZpbGUKLSAgTElCWE1MX1BLRz0nLCBsaWJ4bWwtMi4wJwotICBBQ19TVUJTVChMSUJYTUxfUEtHKQotICBBQ19TVUJTVChYTUxfTElCUykKLSAgQUNfU1VCU1QoWE1MX0NGTEFHUykKLQotICBkbmwgWE1MX0xJQlMgbWlnaHQgcHVsbCBpbiAtbHogd2l0aG91dCB6bGliIGFjdHVhbGx5IGJlaW5nIG9uIHRoZSBzeXN0ZW0sIHNvCi0gIGRubCB0cnkgbGlua2luZyB3aXRoIHRoZXNlIExJQlMgYW5kIENGTEFHUwotICBhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGFjX3NhdmVfTElCUz0kTElCUwotICBDRkxBR1M9IiRDRkxBR1MgJFhNTF9DRkxBR1MiCi0gIExJQlM9IiRMSUJTICRYTUxfTElCUyIKLSAgQUNfVFJZX0xJTksoWwotI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLV0sWwotLyogZnVuY3Rpb24gYm9keSAqLwotXSwKLSAgICBBQ19NU0dfTk9USUNFKFtUZXN0IHhtbDIgcHJvZ3JhbSBsaW5rZWRdKSwKLSAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBsaW5rIGxpYnhtbDIgdGVzdCBwcm9ncmFtLiAgQ2hlY2sgaWYgeW91IGhhdmUgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMuXSkKLSAgKQotICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgTElCUz0iJGFjX3NhdmVfTElCUyIKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBiL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Y0NGU2Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00CisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotZG5sIG1hY3JvcyB0byBzZXQgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUKLWRubAotZG5sIFVzYWdlOgotZG5sCi1kbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoKQotZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKFtub10uLi4pCi1kbmwgc2V0cyB0aGUgcmVsZWFzZSBkYXRldGltZSB0byB0aGUgY3VycmVudCBkYXRlCi1kbmwgKG5vID0gdGhpcyBpcyBub3QgYSByZWxlYXNlLCBidXQgZ2l0IG9yIHByZXJlbGVhc2UpCi1kbmwKLWRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbWVlZWS1NTS1ERF0pCi1kbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW3llc10sIFtZWVlZLU1NLUREXSkKLWRubCBzZXRzIHRoZSByZWxlYXNlIGRhdGV0aW1lIHRvIHRoZSBzcGVjaWZpZWQgZGF0ZSAoYW5kIHRpbWUsIGlmIGdpdmVuKQotZG5sICh5ZXMgPSB0aGlzIGlzIGEgcmVsZWFzZSwgbm90IGdpdCBvciBwcmVyZWxlYXNlKQotZG5sCi1kbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW3llc10sIFtET0FQLUZJTEVdLCBbUkVMRUFTRS1WRVJTSU9OXSkKLWRubCBzZXRzIHRoZSByZWxlYXNlIGRhdGUgdG8gdGhlIHJlbGVhc2UgZGF0ZSBhc3NvY2lhdGVkIHdpdGggdmVyc2lvbgotZG5sIFJFTEVBU0UtVkVSU0lPTiBpbiB0aGUgLmRvYXAgZmlsZSBET0FQLUZJTEUKLWRubCAoeWVzID0gdGhpcyBpcyBhIHJlbGVhc2UsIG5vdCBnaXQgb3IgcHJlcmVsZWFzZSkKLWRubAotZG5sIFdlIG5lZWQgdG8gdHJlYXQgcHJlLXJlbGVhc2VzIGxpa2UgZ2l0IGJlY2F1c2UgdGhlcmUgd29uJ3QgYmUgYW4gZW50cnkKLWRubCBpbiB0aGUgLmRvYXAgZmlsZSBmb3IgcHJlLXJlbGVhc2VzIHlldCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZQotZG5sIGRhdGUgb2YgdGhlIGxhc3QgcmVsZWFzZSBlaXRoZXIuCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1BQ19ERUZVTihbQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUVdLAotWwotICBkbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoKQotICBkbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW25vXS4uLikKLSAgaWYgdGVzdCAieCQxIiA9ICJ4bm8iIC1vICJ4JDEiID0gIngiOyB0aGVuCi0gICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT1gZGF0ZSAtdSAiKyVZLSVtLSVkVCVIOiVNWiJgCi0gIGVsaWYgdGVzdCAieCQxIiA9ICJ4eWVzIjsgdGhlbgotICAgIGRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbeWVzXSwgW1lZWVktTU0tRERdKQotICAgIGRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbeWVzXSwgW0RPQVAtRklMRV0sIFtSRUxFQVNFLVZFUlNJT05dKQotY2hhbmdlcXVvdGUoPDwsID4+KWRubAotICAgIGlmICggZWNobyAkMiB8IGdyZXAgJ14yMFsxLTldWzAtOV0tWzAtMV1bMC05XS1bMC0zXVswLTldJyA+L2Rldi9udWxsICkgOyB0aGVuCi1jaGFuZ2VxdW90ZShbLCBdKWRubAotICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0kMgotICAgIGVsc2UKLSAgICAgIGRubCB3ZSBhc3N1bWUgdGhlIC5kb2FwIGZpbGUgY29udGFpbnMgdGhlIGRhdGUgYXMgWVlZWS1NTS1ERAotICAgICAgWVlZWV9NTV9ERD1gc2ggIiR7c3JjZGlyfS9jb21tb24vZXh0cmFjdC1yZWxlYXNlLWRhdGUtZnJvbS1kb2FwLWZpbGUiICQzICQyYDsKLSAgICAgIGlmIHRlc3QgIngkWVlZWV9NTV9ERCIgIT0gIngiOyB0aGVuCi0gICAgICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9JFlZWVlfTU1fREQKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX0VSUk9SKFtTRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FOiBjb3VsZCBub3QgZXh0cmFjdAotICAgICAgICAgICAgcmVsZWFzZSBkYXRlIGZvciByZWxlYXNlIHZlcnNpb24gJDMgZnJvbSAkMl0pCi0gICAgICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9IiIKLSAgICAgIGZpCi0gICAgZmkKLSAgZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKFtZWVlZLU1NLUREXSkKLWNoYW5nZXF1b3RlKDw8LCA+PilkbmwKLSAgZWxpZiAoIGVjaG8gJDEgfCBncmVwICdeMjBbMS05XVswLTldLVswLTFdWzAtOV0tWzAtM11bMC05XScgPi9kZXYvbnVsbCApIDsgdGhlbgotY2hhbmdlcXVvdGUoWywgXSlkbmwKLSAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSQxCi0gIGVsc2UKLSAgICBBQ19NU0dfV0FSTihbU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogaW52YWxpZCBmaXJzdCBhcmd1bWVudF0pCi0gICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0iIgotICBmaQotCi0gIGlmIHRlc3QgIngkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPSAieCI7IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbSW52YWxpZCBwYWNrYWdlIHJlbGVhc2UgZGF0ZSB0aW1lOiAkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRV0pCi0gIGVsc2UKLSAgICBBQ19NU0dfTk9USUNFKFtTZXR0aW5nIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgdG8gJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUVdKQotCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKFtHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FXSwKLSAgICAgICAgWyIkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSJdLAotICAgICAgICBbR1N0cmVhbWVyIHBhY2thZ2UgcmVsZWFzZSBkYXRlL3RpbWUgZm9yIHBsdWdpbnMgYXMgWVlZWS1NTS1ERF0pCi0gIGZpCi1dKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUVfV0lUSF9OQU5PCi1kbmwKLWRubCBVc2FnZToKLWRubAotZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKFtOQU5PLVZFUlNJT05dLCBbRE9BUC1GSUxFXSwgW1JFTEVBU0UtVkVSU0lPTl0pCi1kbmwgaWYgTkFOTy1WRVJTSU9OIGlzIDAsIHNldHMgdGhlIHJlbGVhc2UgZGF0ZSB0byB0aGUgcmVsZWFzZSBkYXRlIGFzc29jaWF0ZWQKLWRubCB3aXRoIHZlcnNpb24gUkVMRUFTRS1WRVJTSU9OIGluIHRoZSAuZG9hcCBmaWxlIERPQVAtRklMRSwgb3RoZXJ3aXNlIHNldHMKLWRubCB0aGUgcmVsZWFzZSBkYXRlIGFuZCB0aW1lIHRvIHRoZSBjdXJyZW50IGRhdGUvdGltZS4KLWRubAotZG5sIFdlIG5lZWQgdG8gdHJlYXQgcHJlLXJlbGVhc2VzIGxpa2UgZ2l0IGJlY2F1c2UgdGhlcmUgd29uJ3QgYmUgYW4gZW50cnkKLWRubCBpbiB0aGUgLmRvYXAgZmlsZSBmb3IgcHJlLXJlbGVhc2VzIHlldCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZQotZG5sIGRhdGUgb2YgdGhlIGxhc3QgcmVsZWFzZSBlaXRoZXIuCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1BQ19ERUZVTihbQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUVfV0lUSF9OQU5PXSwKLVsKLSAgaWYgdGVzdCAieCQxIiA9ICJ4MCI7IHRoZW4KLSAgICBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbeWVzXSwgWyAkMiBdLCBbICQzIF0pCi0gIGVsc2UKLSAgICBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbbm9dKQotICBmaQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IGIvY29tbW9uL200L2dzdC1wYXJzZXIubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MmVmNzIuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1wYXJzZXIubTQKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi1BQ19ERUZVTihbQUdfR1NUX0JJU09OX0NIRUNLXSwKLVsKLSAgZG5sIEZJWE1FOiBjaGVjayBpZiBBQ19QUk9HX1lBQ0MgaXMgc3VpdGFibGUgaGVyZQotICBkbmwgRklYTUU6IG1ha2UgcHJlY2lvdXMKLSAgQUNfUEFUSF9QUk9HKEJJU09OX1BBVEgsIGJpc29uLCBubykKLSAgaWYgdGVzdCB4JEJJU09OX1BBVEggPSB4bm87IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoQ291bGQgbm90IGZpbmQgYmlzb24pCi0gIGZpCi0KLSAgZG5sIGNoZWNrIGJpc29uIHZlcnNpb24KLSAgZG5sIHdlIG5lZWQgdmVyc2lvbiA+PSAyLjQgZm9yIHRoZSAnPD4nIHN1cHBvcnQKLSAgZG5sIGluIHRoZSBwYXJzZXIuCi0gIGRubCBGaXJzdCBsaW5lcyBvYnNlcnZlZDogJ2Jpc29uIChHTlUgQmlzb24pIDIuMycgb3IgJ0dOVSBCaXNvbiB2ZXJzaW9uIDEuMjgnCi0gIGJpc29uX21pbl92ZXJzaW9uPTIuNAotICBiaXNvbl92ZXJzaW9uPWAkQklTT05fUEFUSCAtLXZlcnNpb24gfCBoZWFkIC1uIDEgfCAgc2VkICdzL15bW14wLTldXSovLycgfCBzZWQgJ3MvW1teMC05XV0qJC8vJyB8IGN1dCAtZCcgJyAtZjFgCi0gIEFDX01TR19DSEVDS0lORyhbYmlzb24gdmVyc2lvbiAkYmlzb25fdmVyc2lvbiA+PSAkYmlzb25fbWluX3ZlcnNpb25dKQotCi0gIGlmIHBlcmwgLXdlICJleGl0ICgoJ3YkYmlzb25fdmVyc2lvbicgZ2UgJ3YkYmlzb25fbWluX3ZlcnNpb24nKSA/IDAgOiAxKSI7IHRoZW4KLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotICBlbHNlCi0gICAgQUNfTVNHX0VSUk9SKFtub10pCi0gIGZpCi1dKQotCi1BQ19ERUZVTihbQUdfR1NUX0ZMRVhfQ0hFQ0tdLAotWwotICBkbmwgd2UgcmVxdWlyZSBmbGV4IGZvciBidWlsZGluZyB0aGUgcGFyc2VyCi0gIEFDX1BBVEhfUFJPRyhGTEVYX1BBVEgsIGZsZXgsIG5vKQotICBpZiB0ZXN0IHgkRkxFWF9QQVRIID0geG5vOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKENvdWxkIG5vdCBmaW5kIGZsZXgpCi0gIGZpCi0KLSAgZG5sIGNoZWNrIGZsZXggdmVyc2lvbgotICBkbmwgd2UgbmVlZCB2ZXJzaW9uID49IDIuNS4zMSBmb3IgdGhlIHJlZW50cmFuY3kgc3VwcG9ydAotICBkbmwgaW4gdGhlIHBhcnNlci4KLSAgZmxleF9taW5fdmVyc2lvbj0yLjUuMzEKLSAgZmxleF92ZXJzaW9uPWAkRkxFWF9QQVRIIC0tdmVyc2lvbiB8IGhlYWQgLW4gMSB8IGF3ayAne3ByaW50ICQyfSdgCi0gIEFDX01TR19DSEVDS0lORyhbZmxleCB2ZXJzaW9uICRmbGV4X3ZlcnNpb24gPj0gJGZsZXhfbWluX3ZlcnNpb25dKQotICBpZiBwZXJsIC13IDw8RU9GCi0gICAgKFwkbWluX3ZlcnNpb25fbWFqb3IsIFwkbWluX3ZlcnNpb25fbWlub3IsIFwkbWluX3ZlcnNpb25fbWljcm8gKSA9ICIkZmxleF9taW5fdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOwotICAgIChcJGZsZXhfdmVyc2lvbl9tYWpvciwgXCRmbGV4X3ZlcnNpb25fbWlub3IsIFwkZmxleF92ZXJzaW9uX21pY3JvICkgPSAiJGZsZXhfdmVyc2lvbiIgPX4gLyhcZCspXC4oXGQrKVwuKFxkKykvOwotICAgIGV4aXQgKCgoXCRmbGV4X3ZlcnNpb25fbWFqb3IgPiBcJG1pbl92ZXJzaW9uX21ham9yKSB8fAotICAgICAoKFwkZmxleF92ZXJzaW9uX21ham9yID09IFwkbWluX3ZlcnNpb25fbWFqb3IpICYmCi0gICAgICAoXCRmbGV4X3ZlcnNpb25fbWlub3IgPiBcJG1pbl92ZXJzaW9uX21pbm9yKSkgfHwKLSAgICAgKChcJGZsZXhfdmVyc2lvbl9tYWpvciA9PSBcJG1pbl92ZXJzaW9uX21ham9yKSAmJgotICAgICAgKFwkZmxleF92ZXJzaW9uX21pbm9yID09IFwkbWluX3ZlcnNpb25fbWlub3IpICYmCi0gICAgICAoXCRmbGV4X3ZlcnNpb25fbWljcm8gPj0gXCRtaW5fdmVyc2lvbl9taWNybykpKQotICAgICA/IDAgOiAxKTsKLUVPRgotICB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gIGVsc2UKLSAgICBBQ19NU0dfRVJST1IoW25vXSkKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IGIvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBkNmZhZi4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00CisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotZG5sIEFHX0dTVF9QTEFURk9STQotZG5sIENoZWNrIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyBmZWF0dXJlcyBhbmQgZGVmaW5lIHNvbWUgdmFyaWFibGVzCi1kbmwKLWRubCBHU1RfRVhUUkFfTU9EVUxFX1NVRkZJWDogY29udGFpbnMgYSBwbGF0Zm9ybSBzcGVjaWZpYwotZG5sICAgZXh0cmEgbW9kdWxlIHN1ZmZpeCBhZGRpdGlvbmFsIHRvIEdfTU9EVUxFX1NVRkZJWAotZG5sCi1kbmwgSEFWRV9PU1g6IERlZmluZWQgaWYgY29tcGlsaW5nIGZvciBPUyBYCi1kbmwKLWRubCBHU1RfSEFWRV9VTlNBRkVfRk9SSzogRGVmaW5lZCBpZiBmb3JrIGlzIHVuc2FmZSAoV2luZG93cykKLWRubAotZG5sIEhBVkVfV0lOMzI6IERlZmluZWQgaWYgY29tcGlsaW5nIG9uIFdpbjMyCi1kbmwKLQotQUNfREVGVU4oW0FHX0dTVF9QTEFURk9STV0sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKLQotICBjYXNlICRob3N0X29zIGluCi0gICAgcmhhcHNvZHkqKQotICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9FWFRSQV9NT0RVTEVfU1VGRklYLCBbIi5keWxpYiJdLCBbRXh0cmEgcGxhdGZvcm0gc3BlY2lmaWMgcGx1Z2luIHN1ZmZpeF0pCi0gICAgICA7OwotICAgIGRhcndpbiopCi0gICAgICBBQ19ERUZJTkVfVU5RVU9URUQoR1NUX0VYVFJBX01PRFVMRV9TVUZGSVgsIFsiLmR5bGliIl0sIFtFeHRyYSBwbGF0Zm9ybSBzcGVjaWZpYyBwbHVnaW4gc3VmZml4XSkKLSAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX09TWCwgMSwgW0RlZmluZWQgaWYgY29tcGlsaW5nIGZvciBPU1hdKQotICAgICAgOzsKLSAgICBjeWd3aW4qKQotICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9IQVZFX1VOU0FGRV9GT1JLLCAxLCBbRGVmaW5lZCB3aGVuIHJlZ2lzdHJ5IHNjYW5uaW5nIHRocm91Z2ggZm9yayBpcyB1bnNhZmVdKQotICAgICAgOzsKLSAgICBtaW5ndyogfCBtc3ZjKiB8IG1rcyopCi0gICAgICBkbmwgSEFWRV9XSU4zMiBjdXJyZW50bHkgbWVhbnMgImRpc2FibGUgUE9TSVhpc21zIi4KLSAgICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1dJTjMyLCAxLCBbRGVmaW5lZCBpZiBjb21waWxpbmcgZm9yIFdpbmRvd3NdKQotCi0gICAgICBkbmwgZGVmaW5lIF9fTVNWQ1JUX1ZFUlNJT05fXyB2ZXJzaW9uIGlmIG5vdCBzZXQgYWxyZWFkeSBieSB0aGUKLSAgICAgIGRubCBjb21waWxlciAoaWUuIG1vc3RseSBmb3IgbWluZ3cpLiBUaGlzIGlzIG5lZWRlZCBmb3IgdGhpbmdzIGxpa2UKLSAgICAgIGRubCBfX3N0YXQ2NCB0byBiZSBhdmFpbGFibGUuIElmIHNldCBieSB0aGUgY29tcGlsZXIsIGVuc3VyZSBpdCdzCi0gICAgICBkbmwgbmV3IGVub3VnaCAtIHdlIG5lZWQgYXQgbGVhc3QgV2luWFAgU1AyLgotICAgICAgQUNfVFJZX0NPTVBJTEUoWyBdLCBbIHJldHVybiBfX01TVkNSVF9WRVJTSU9OX187IF0sIFsKLSAgICAgICAgICBBQ19UUllfQ09NUElMRShbIF0sIFsKLSAgICAgICAgICAgICNpZiBfX01TVkNSVF9WRVJTSU9OX18gPCAweDA2MDEKLSAgICAgICAgICAgICNlcnJvciAiTVNWQ1JUIHRvbyBvbGQiCi0gICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICBdLCBbCi0gICAgICAgICAgICBBQ19NU0dfTk9USUNFKFtNU1ZDUlQgdmVyc2lvbiBsb29rcyBva10pCi0gICAgICAgICAgXSwgWwotICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtNU1ZDUlQgdmVyc2lvbiB0b28gb2xkLCBuZWVkIGF0IGxlYXN0IFdpblhQIFNQMl0pCi0gICAgICAgICAgXSkKLSAgICAgIF0sIFsKLSAgICAgICAgQUNfTVNHX05PVElDRShbU2V0dGluZyBNU1ZDUlQgdmVyc2lvbiB0byAweDA2MDFdKQotICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoX19NU1ZDUlRfVkVSU0lPTl9fLCAweDA2MDEsIFtXZSBuZWVkIGF0IGxlYXN0IFdpblhQIFNQMiBmb3IgX19zdGF0NjRdKQotICAgICAgXSkKLSAgICAgIDs7Ci0gICAgICopCi0gICAgICA7OwotICBlc2FjCi1dKQotCi1BQ19ERUZVTihbQUdfR1NUX0xJQlRPT0xfUFJFUEFSRV0sCi1bCi0gIGRubCBQZXJzdWFkZSBsaWJ0b29sIHRvIGFsc28gbGluayAoLWwpIGEgJ3B1cmUnIChEaXJlY3RYKSBzdGF0aWMgbGliLAotICBkbmwgaS5lLiBhcyBvcHBvc2VkIHRvIG9ubHkgaW1wb3J0IGxpYiB3aXRoIGRsbCBjb3VudGVycGFydC4KLSAgZG5sIE5lZWRzIHRvIGJlIHR3ZWFrZWQgYmVmb3JlIGxpYnRvb2wncyBjaGVja3MuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgY3lnd2luKiB8IG1pbmd3KikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIGVzYWMKLV0pClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBiL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMmFiNmUuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLWRubCBBR19HU1RfUExVR0lOX0RPQ1MoW01JTklNVU0tR1RLLURPQy1WRVJTSU9OXSkKLWRubAotZG5sIGNoZWNrcyBmb3IgcHJlcmVxdWlzaXRlcyBmb3IgdGhlIGNvbW1vbi9tYW5nbGUtdG1wbC5weSBzY3JpcHQKLWRubCB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIHBsdWdpbiBkb2N1bWVudGF0aW9uCi0KLUFDX0RFRlVOKFtBR19HU1RfUExVR0lOX0RPQ1NdLAotWwotICBBQ19CRUZPUkUoW0dUS19ET0NfQ0hFQ0tdLFskMF0pZG5sIGNoZWNrIGZvciBndGstZG9jIGZpcnN0Ci0gIEFDX1JFUVVJUkUoW0FNX1BBVEhfUFlUSE9OXSlkbmwgZmluZCBweXRob24gZmlyc3QKLQotICBidWlsZF9wbHVnaW5fZG9jcz1ubwotICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgcGx1Z2luIGRvY3VtZW50YXRpb25dKQotICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzOyB0aGVuCi0gICAgaWYgdGVzdCB4JFBZVEhPTiAhPSB4OyB0aGVuCi0gICAgICBidWlsZF9wbHVnaW5fZG9jcz15ZXMKLSAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX1JFU1VMVChbbm8gKHB5dGhvbiBub3QgZm91bmQpXSkKLSAgICBmaQotICBlbHNlCi0gICAgQUNfTVNHX1JFU1VMVChbbm8gKGd0ay1kb2MgZGlzYWJsZWQgb3Igbm90IGF2YWlsYWJsZSldKQotICBmaQotCi0gIEFNX0NPTkRJVElPTkFMKEVOQUJMRV9QTFVHSU5fRE9DUywgdGVzdCB4JGJ1aWxkX3BsdWdpbl9kb2NzID0geHllcykKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBiL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWUxMzAxLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotZG5sIEFHX0dTVF9TRVRfUExVR0lORElSCi0KLWRubCBBQ19ERUZJTkUgUExVR0lORElSIHRvIHRoZSBmdWxsIGxvY2F0aW9uIHdoZXJlIHBsdWctaW5zIHdpbGwgYmUgaW5zdGFsbGVkCi1kbmwgQUNfU1VCU1QgcGx1Z2luZGlyLCB0byBiZSB1c2VkIGluIE1ha2VmaWxlLmFtJ3MKLQotQUNfREVGVU4oW0FHX0dTVF9TRVRfUExVR0lORElSXSwKLVsKLSAgZG5sIGRlZmluZSBsb2NhdGlvbiBvZiBwbHVnaW4gZGlyZWN0b3J5Ci0gIEFTX0FDX0VYUEFORChQTFVHSU5ESVIsICR7bGliZGlyfS9nc3RyZWFtZXItJEdTVF9BUElfVkVSU0lPTikKLSAgQUNfREVGSU5FX1VOUVVPVEVEKFBMVUdJTkRJUiwgIiRQTFVHSU5ESVIiLAotICAgIFtkaXJlY3Rvcnkgd2hlcmUgcGx1Z2lucyBhcmUgbG9jYXRlZF0pCi0gIEFDX01TR19OT1RJQ0UoW1VzaW5nICRQTFVHSU5ESVIgYXMgdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uXSkKLQotICBkbmwgcGx1Z2luIGRpcmVjdG9yeSBjb25maWd1cmUtdGltZSB2YXJpYWJsZSBmb3IgdXNlIGluIE1ha2VmaWxlLmFtCi0gIHBsdWdpbmRpcj0iXCQobGliZGlyKS9nc3RyZWFtZXItJEdTVF9BUElfVkVSU0lPTiIKLSAgQUNfU1VCU1QocGx1Z2luZGlyKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtdmFsZ3JpbmQubTQgYi9jb21tb24vbTQvZ3N0LXZhbGdyaW5kLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzBkNjA4Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtdmFsZ3JpbmQubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1BQ19ERUZVTihbQUdfR1NUX1ZBTEdSSU5EX0NIRUNLXSwKLVsKLSAgZG5sIHZhbGdyaW5kIGluY2x1c2lvbgotICBBQ19BUkdfRU5BQkxFKHZhbGdyaW5kLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtdmFsZ3JpbmRdLCBbZGlzYWJsZSBydW4tdGltZSB2YWxncmluZCBkZXRlY3Rpb25dKSwKLSAgICBbCi0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgVVNFX1ZBTEdSSU5EPSIkVVNFX0RFQlVHIiA7OwotICAgICAgICBubykgIFVTRV9WQUxHUklORD1ubyA7OwotICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdmFsZ3JpbmQpIDs7Ci0gICAgICBlc2FjXSwKLSAgICBbCi0gICAgICBVU0VfVkFMR1JJTkQ9IiRVU0VfREVCVUciCi0gICAgXSkgZG5sIERlZmF1bHQgdmFsdWUKLQotICBWQUxHUklORF9SRVE9IjMuMCIKLSAgaWYgdGVzdCAieCRVU0VfVkFMR1JJTkQiID0geHllczsgdGhlbgotICAgIFBLR19DSEVDS19NT0RVTEVTKFZBTEdSSU5ELCB2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRLAotICAgICAgVVNFX1ZBTEdSSU5EPSJ5ZXMiLAotICAgICAgWwotICAgICAgICBVU0VfVkFMR1JJTkQ9Im5vIgotICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0gICAgICBdKQotICBmaQotCi0gIGlmIHRlc3QgIngkVVNFX1ZBTEdSSU5EIiA9IHh5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9WQUxHUklORCwgMSwgW0RlZmluZSBpZiB2YWxncmluZCBzaG91bGQgYmUgdXNlZF0pCi0gICAgQUNfTVNHX05PVElDRShVc2luZyBleHRyYSBjb2RlIHBhdGhzIGZvciB2YWxncmluZCkKLSAgZmkKLSAgQUNfU1VCU1QoVkFMR1JJTkRfQ0ZMQUdTKQotICBBQ19TVUJTVChWQUxHUklORF9MSUJTKQotCi0gIEFDX1BBVEhfUFJPRyhWQUxHUklORF9QQVRILCB2YWxncmluZCwgbm8pCi0gIEFNX0NPTkRJVElPTkFMKEhBVkVfVkFMR1JJTkQsIHRlc3QgISAieCRWQUxHUklORF9QQVRIIiA9ICJ4bm8iKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QteDExLm00IGIvY29tbW9uL200L2dzdC14MTEubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MWRkZmYuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC14MTEubTQKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1kbmwgbWFjcm9zIGZvciBYLXJlbGF0ZWQgZGV0ZWN0aW9ucwotZG5sIEFDX1NVQlNUJ3MgSEFWRV9YLCBYX0NGTEFHUywgWF9MSUJTCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX1hdLAotWwotICBBQ19QQVRIX1hUUkEKLSAgYWNfY2ZsYWdzX3NhdmU9IiRDRkxBR1MiCi0gIGFjX2NwcGZsYWdzX3NhdmU9IiRDUFBGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTICRYX0NGTEFHUyIKLSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWF9DRkxBR1MiCi0KLSAgZG5sIG5vdyB0cnkgdG8gZmluZCB0aGUgSEVBREVSCi0gIEhBVkVfWD0ibm8iCi0gIEFDX0NIRUNLX0hFQURFUihbWDExL1hsaWIuaF0sIFsKLSAgICBkbmwgYW5kIHRoZW4gdGhlIGxpYnJhcnkgd2l0aCB0aGUgbW9zdCB1bmlxdWl0b3VzIGZ1bmN0aW9uCi0gICAgQUNfQ0hFQ0tfTElCKFgxMSwgW1hTeW5jXSwgW0hBVkVfWD0ieWVzIl0sIFtdLCBbJFhfTElCUyAkWF9QUkVfTElCUyAkWF9FWFRSQV9MSUJTXSkKLSAgXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKLQotICBpZiB0ZXN0ICJ4JEhBVkVfWCIgPSAieG5vIgotICB0aGVuCi0gICAgQUNfTVNHX05PVElDRShbY2Fubm90IGZpbmQgWDExIGRldmVsb3BtZW50IGZpbGVzXSkKLSAgZWxzZQotICAgIGRubCB0aGlzIGlzIG11Y2ggbW9yZSB0aGFuIHdlIHdhbnQKLSAgICBYX0xJQlM9IiRYX0xJQlMgJFhfUFJFX0xJQlMgJFhfRVhUUkFfTElCUyIKLSAgICBkbmwgQUNfUEFUSF9YVFJBIG9ubHkgZGVmaW5lcyB0aGUgcGF0aCBuZWVkZWQgdG8gZmluZCB0aGUgWCBsaWJzLAotICAgIGRubCBpdCBkb2VzIG5vdCBhZGQgdGhlIGxpYnM7IHRoZXJlZm9yZSB3ZSBhZGQgdGhlbSBoZXJlCi0gICAgWF9MSUJTPSIkWF9MSUJTIC1sWDExIgotICAgIEFDX1NVQlNUKFhfQ0ZMQUdTKQotICAgIEFDX1NVQlNUKFhfTElCUykKLSAgZmkKLSAgQUNfU1VCU1QoSEFWRV9YKQotCi0gIENGTEFHUz0iJGFjX2NmbGFnc19zYXZlIgotICBDUFBGTEFHUz0iJGFjX2NwcGZsYWdzX3NhdmUiCi1dKQotCi1kbmwgKioqIFhWaWRlbyAqKioKLWRubCBMb29rIGZvciB0aGUgUElDIGxpYnJhcnkgZmlyc3QsIERlYmlhbiByZXF1aXJlcyBpdC4KLWRubCBDaGVjayBkZWJpYW4tZGV2ZWwgYXJjaGl2ZXMgZm9yIGdvcnkgZGV0YWlscy4KLWRubCAyMDAyMDExMDoKLWRubCBBdCB0aGUgbW9tZW50IFhGcmVlODYgZG9lc24ndCBkaXN0cmlidXRlIHNoYXJlZCBsaWJYdiBkdWUKLWRubCB0byB1bnN0YWJsZSBBUEkuICBPbiBtYW55IHBsYXRmb3JtcyB5b3UgQ0FOIE5PVCBsaW5rIGEgc2hhcmVkCi1kbmwgbGliIHRvIGEgc3RhdGljIG5vbi1QSUMgbGliLiAgVGhpcyBpcyB3aGF0IHRoZSB4dmlkZW8gR1N0cmVhbWVyCi1kbmwgcGx1Zy1pbiB3YW50cyB0byBkby4gIFNvIERlYmlhbiBkaXN0cmlidXRlcyBhIFBJQyBjb21waWxlZAotZG5sIHZlcnNpb24gb2YgdGhlIHN0YXRpYyBsaWIgZm9yIHBsdWctaW5zIHRvIGxpbmsgdG8gd2hlbiBpdCBpcwotZG5sIGluYXBwcm9wcmlhdGUgdG8gbGluayB0aGUgbWFpbiBhcHBsaWNhdGlvbiB0byBsaWJYdiBkaXJlY3RseS4KLWRubCBGSVhNRTogYWRkIGNoZWNrIGlmIHRoaXMgcGxhdGZvcm0gY2FuIHN1cHBvcnQgbGlua2luZyB0byBhCi1kbmwgICAgICAgIG5vbi1QSUMgbGliWHYsIGlmIG5vdCB0aGVuIGRvbiBub3QgdXNlIFh2LgotZG5sIEZJWE1FOiBwZXJoYXBzIHdhcm4gdXNlciBpZiB0aGV5IGhhdmUgYSBzaGFyZWQgbGliWHYgc2luY2UKLWRubCAgICAgICAgdGhpcyBpcyBhbiBlcnJvciB1bnRpbCBYRnJlZTg2IHN0YXJ0cyBzaGlwcGluZyBvbmUKLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfWFZdLAotWwotICBpZiB0ZXN0IHgkSEFWRV9YID0geHllczsgdGhlbgotICAgIEFDX0NIRUNLX0xJQihYdl9waWMsIFh2UXVlcnlFeHRlbnNpb24sCi0gICAgICAgICAgICAgICAgIEhBVkVfWFZJREVPPSJ5ZXMiLCBIQVZFX1hWSURFTz0ibm8iLAotICAgICAgICAgICAgICAgICAkWF9MSUJTIC1sWGV4dCkKLQotICAgIGlmIHRlc3QgeCRIQVZFX1hWSURFTyA9IHh5ZXM7IHRoZW4KLSAgICAgIFhWSURFT19MSUJTPSItbFh2X3BpYyAtbFhleHQiCi0gICAgICBBQ19TVUJTVChYVklERU9fTElCUykKLSAgICBlbHNlCi0gICAgICBkbmwgdHJ5IGFnYWluIHVzaW5nIHNvbWV0aGluZyBlbHNlIGlmIHdlIGRpZG4ndCBmaW5kIGl0IGZpcnN0Ci0gICAgICBpZiB0ZXN0IHgkSEFWRV9YVklERU8gPSB4bm87IHRoZW4KLSAgICAgICAgQUNfQ0hFQ0tfTElCKFh2LCBYdlF1ZXJ5RXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgIEhBVkVfWFZJREVPPSJ5ZXMiLCBIQVZFX1hWSURFTz0ibm8iLAotICAgICAgICAgICAgICAgICAgICRYX0xJQlMgLWxYZXh0KQotCi0gICAgICAgIGlmIHRlc3QgeCRIQVZFX1hWSURFTyA9IHh5ZXM7IHRoZW4KLSAgICAgICAgICBYVklERU9fTElCUz0iLWxYdiAtbFhleHQiCi0gICAgICAgICAgQUNfU1VCU1QoWFZJREVPX0xJQlMpCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIGZpCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC5tNCBiL2NvbW1vbi9tNC9nc3QubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YzUzY2IuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLWRubCBBR19HU1RfSU5JVAotZG5sIHNldHMgdXAgdXNlIG9mIEdTdHJlYW1lciBjb25maWd1cmUuYWMgbWFjcm9zCi1kbmwgYWxsIEdTdHJlYW1lciBhdXRvY29uZiBtYWNyb3MgYXJlIHByZWZpeGVkCi1kbmwgd2l0aCBBR19HU1RfIGZvciBwdWJsaWMgbWFjcm9zCi1kbmwgd2l0aCBfQUdfR1NUXyBmb3IgcHJpdmF0ZSBtYWNyb3MKLWRubAotZG5sIFdlIGNhbGwgQUNfQ0FOT05JQ0FMX1RBUkdFVCBhbmQgQUNfQ0FOT05JQ0FMX0hPU1Qgc28gdGhhdAotZG5sIGl0IGlzIHZhbGlkIGJlZm9yZSBBQ19BUkdfUFJPR1JBTSBpcyBjYWxsZWQKLQotQUNfREVGVU4oW0FHX0dTVF9JTklUXSwKLVsKLSAgbTRfcGF0dGVybl9mb3JiaWQoXl8/QUdfR1NUXykKLSAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgd2UgdXNlIGhvc3RfIHZhcmlhYmxlcwotICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfVEFSR0VUXSkgZG5sIHdlIHVzZSB0YXJnZXRfIHZhcmlhYmxlcwotXSkKLQotZG5sIEFHX0dTVF9QS0dfQ09ORklHX1BBVEgKLWRubAotZG5sIHNldHMgdXAgYSBHU1RfUEtHX0NPTkZJR19QQVRIIHZhcmlhYmxlIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0KLWRubCB3aGljaCBjb250YWlucyB0aGUgcGF0aCBvZiB0aGUgaW4tdHJlZSBwa2djb25maWcgZGlyZWN0b3J5IGZpcnN0Ci1kbmwgYW5kIHRoZW4gYW55IHBhdGhzIHNwZWNpZmllZCBpbiBQS0dfQ09ORklHX1BBVEguCi1kbmwKLWRubCBXZSBkbyB0aGlzIG1vc3RseSBzbyB3ZSBkb24ndCBoYXZlIHRvIHVzZSB1bnBvcnRhYmxlIHNoZWxsIGNvbnN0cnVjdHMKLWRubCBzdWNoIGFzICR7UEtHX0NPTkZJR19QQVRIOis6JFBLR19DT05GSUdfUEFUSH0gaW4gTWFrZWZpbGUuYW0gdG8gaGFuZGxlCi1kbmwgdGhlIGNhc2Ugd2hlcmUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQsIGJ1dCBhbHNvIGluIG9yZGVyCi1kbmwgdG8gYXZvaWQgYSB0cmFpbGluZyAnOicgaW4gdGhlIFBLR19DT05GSUdfUEFUSCB3aGljaCBhcHBhcmVudGx5IGNhdXNlcwotZG5sIHByb2JsZW1zIHdpdGggcGtnLWNvbmZpZyBvbiB3aW5kb3dzIHdpdGggbXN5cy9taW5ndy4KLUFDX0RFRlVOKFtBR19HU1RfUEtHX0NPTkZJR19QQVRIXSwKLVsKLSAgR1NUX1BLR19DT05GSUdfUEFUSD0iXCQodG9wX2J1aWxkZGlyKS9wa2djb25maWciCi0gIGlmIHRlc3QgIngkUEtHX0NPTkZJR19QQVRIIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUEtHX0NPTkZJR19QQVRIPSIkR1NUX1BLR19DT05GSUdfUEFUSDokUEtHX0NPTkZJR19QQVRIIgotICBmaQotICBBQ19TVUJTVChbR1NUX1BLR19DT05GSUdfUEFUSF0pCi0gIEFDX01TR19OT1RJQ0UoW1VzaW5nIEdTVF9QS0dfQ09ORklHX1BBVEggPSAkR1NUX1BLR19DT05GSUdfUEFUSF0pCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2d0ay1kb2MubTQgYi9jb21tb24vbTQvZ3RrLWRvYy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0M2YxYy4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3RrLWRvYy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLWRubCAtKi0gbW9kZTogYXV0b2NvbmYgLSotCi0KLSMgc2VyaWFsIDEKLQotZG5sIFVzYWdlOgotZG5sICAgR1RLX0RPQ19DSEVDSyhbbWluaW11bS1ndGstZG9jLXZlcnNpb25dKQotQUNfREVGVU4oW0dUS19ET0NfQ0hFQ0tdLAotWwotICBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKLSAgQUNfQkVGT1JFKFtBQ19QUk9HX0xJQlRPT0xdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKLSAgQUNfQkVGT1JFKFtBTV9QUk9HX0xJQlRPT0xdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKLQotICBkbmwgY2hlY2sgZm9yIHRvb2xzIHdlIGFkZGVkIGR1cmluZyBkZXZlbG9wbWVudAotICBBQ19QQVRIX1BST0coW0dUS0RPQ19DSEVDS10sW2d0a2RvYy1jaGVja10pCi0gIEFDX1BBVEhfUFJPR1MoW0dUS0RPQ19SRUJBU0VdLFtndGtkb2MtcmViYXNlXSxbdHJ1ZV0pCi0gIEFDX1BBVEhfUFJPRyhbR1RLRE9DX01LUERGXSxbZ3RrZG9jLW1rcGRmXSkKLQotICBkbmwgZm9yIG92ZXJyaWRpbmcgdGhlIGRvY3VtZW50YXRpb24gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQotICBBQ19BUkdfV0lUSChbaHRtbC1kaXJdLAotICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtaHRtbC1kaXI9UEFUSF0sIFtwYXRoIHRvIGluc3RhbGxlZCBkb2NzXSksLAotICAgIFt3aXRoX2h0bWxfZGlyPScke2RhdGFkaXJ9L2d0ay1kb2MvaHRtbCddKQotICBIVE1MX0RJUj0iJHdpdGhfaHRtbF9kaXIiCi0gIEFDX1NVQlNUKFtIVE1MX0RJUl0pCi0KLSAgZG5sIGVuYWJsZS9kaXNhYmxlIGRvY3VtZW50YXRpb24gYnVpbGRpbmcKLSAgQUNfQVJHX0VOQUJMRShbZ3RrLWRvY10sCi0gICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWd0ay1kb2NdLAotICAgICAgICAgICAgICAgICAgIFt1c2UgZ3RrLWRvYyB0byBidWlsZCBkb2N1bWVudGF0aW9uIFtbZGVmYXVsdD1ub11dXSksLAotICAgIFtlbmFibGVfZ3RrX2RvYz1ub10pCi0KLSAgaWYgdGVzdCB4JGVuYWJsZV9ndGtfZG9jID0geHllczsgdGhlbgotICAgIGlmZWxzZShbJDFdLFtdLAotICAgICAgW1BLR19DSEVDS19FWElTVFMoW2d0ay1kb2NdLCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbZ3RrLWRvYyBub3QgaW5zdGFsbGVkIGFuZCAtLWVuYWJsZS1ndGstZG9jIHJlcXVlc3RlZF0pKV0sCi0gICAgICBbUEtHX0NIRUNLX0VYSVNUUyhbZ3RrLWRvYyA+PSAkMV0sLAotICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtZb3UgbmVlZCB0byBoYXZlIGd0ay1kb2MgPj0gJDEgaW5zdGFsbGVkIHRvIGJ1aWxkICRQQUNLQUdFX05BTUVdKSldKQotICAgIGRubCBkb24ndCBjaGVjayBmb3IgZ2xpYiBpZiB3ZSBidWlsZCBnbGliCi0gICAgaWYgdGVzdCAieCRQQUNLQUdFX05BTUUiICE9ICJ4Z2xpYiI7IHRoZW4KLSAgICAgIGRubCBkb24ndCBmYWlsIGlmIHNvbWVvbmUgZG9lcyBub3QgaGF2ZSBnbGliCi0gICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhHVEtET0NfREVQUywgZ2xpYi0yLjAgPj0gMi4xMC4wIGdvYmplY3QtMi4wICA+PSAyLjEwLjAsLCkKLSAgICBmaQotICAgIGRubCBkb24ndCByZWx5IG9uIHNlZCBiZWluZyBwdWxsZWQgaW4gaW1wbGljaXRseS4gRml4ZXMgU29sYXJpcyBidWlsZC4KLSAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgotICAgICAgQUNfUFJPR19TRUQKLSAgICBmaQotICBmaQotCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBndGstZG9jIGRvY3VtZW50YXRpb25dKQotICBBQ19NU0dfUkVTVUxUKCRlbmFibGVfZ3RrX2RvYykKLQotICBkbmwgZW5hYmxlL2Rpc2FibGUgb3V0cHV0IGZvcm1hdHMKLSAgQUNfQVJHX0VOQUJMRShbZ3RrLWRvYy1odG1sXSwKLSAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ3RrLWRvYy1odG1sXSwKLSAgICAgICAgICAgICAgICAgICBbYnVpbGQgZG9jdW1lbnRhdGlvbiBpbiBodG1sIGZvcm1hdCBbW2RlZmF1bHQ9eWVzXV1dKSwsCi0gICAgW2VuYWJsZV9ndGtfZG9jX2h0bWw9eWVzXSkKLSAgICBBQ19BUkdfRU5BQkxFKFtndGstZG9jLXBkZl0sCi0gICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ3RrLWRvYy1wZGZdLAotICAgICAgICAgICAgICAgICAgICAgW2J1aWxkIGRvY3VtZW50YXRpb24gaW4gcGRmIGZvcm1hdCBbW2RlZmF1bHQ9bm9dXV0pLCwKLSAgICAgIFtlbmFibGVfZ3RrX2RvY19wZGY9bm9dKQotCi0gIGlmIHRlc3QgLXogIiRHVEtET0NfTUtQREYiOyB0aGVuCi0gICAgZW5hYmxlX2d0a19kb2NfcGRmPW5vCi0gIGZpCi0KLQotICBBTV9DT05ESVRJT05BTChbRU5BQkxFX0dUS19ET0NdLCBbdGVzdCB4JGVuYWJsZV9ndGtfZG9jID0geHllc10pCi0gIEFNX0NPTkRJVElPTkFMKFtHVEtfRE9DX0JVSUxEX0hUTUxdLCBbdGVzdCB4JGVuYWJsZV9ndGtfZG9jX2h0bWwgPSB4eWVzXSkKLSAgQU1fQ09ORElUSU9OQUwoW0dUS19ET0NfQlVJTERfUERGXSwgW3Rlc3QgeCRlbmFibGVfZ3RrX2RvY19wZGYgPSB4eWVzXSkKLSAgQU1fQ09ORElUSU9OQUwoW0dUS19ET0NfVVNFX0xJQlRPT0xdLCBbdGVzdCAtbiAiJExJQlRPT0wiXSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBiL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJiZTU3Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00CisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotZG5sIC0qLSBtb2RlOiBhdXRvY29uZiAtKi0KLWRubCBDb3B5cmlnaHQgMjAwOSBKb2hhbiBEYWhsaW4KLWRubAotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgYXV0aG9yKHMpIGdpdmVzIHVubGltaXRlZAotZG5sIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci1kbmwgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi1kbmwKLQotIyBzZXJpYWwgMQotCi1tNF9kZWZpbmUoW19HT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tfSU5URVJOQUxdLAotWwotICAgIEFDX0JFRk9SRShbQUNfUFJPR19MSUJUT09MXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0Ci0gICAgQUNfQkVGT1JFKFtBTV9QUk9HX0xJQlRPT0xdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKLSAgICBBQ19CRUZPUkUoW0xUX0lOSVRdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKLQotICAgIGRubCBlbmFibGUvZGlzYWJsZSBpbnRyb3NwZWN0aW9uCi0gICAgbTRfaWYoWyQyXSwgW3JlcXVpcmVdLAotICAgIFtkbmwKLSAgICAgICAgZW5hYmxlX2ludHJvc3BlY3Rpb249eWVzCi0gICAgXSxbZG5sCi0gICAgICAgIEFDX0FSR19FTkFCTEUoaW50cm9zcGVjdGlvbiwKLSAgICAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnRyb3NwZWN0aW9uWz1APDpAbm8vYXV0by95ZXNAOj5AXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRW5hYmxlIGludHJvc3BlY3Rpb24gZm9yIHRoaXMgYnVpbGRdKSwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZV9pbnRyb3NwZWN0aW9uPWF1dG9dKQotICAgIF0pZG5sCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBnb2JqZWN0LWludHJvc3BlY3Rpb25dKQotCi0gICAgZG5sIHByZXNlbmNlL3ZlcnNpb24gY2hlY2tpbmcKLSAgICBBU19DQVNFKFskZW5hYmxlX2ludHJvc3BlY3Rpb25dLAotICAgIFtub10sIFtkbmwKLSAgICAgICAgZm91bmRfaW50cm9zcGVjdGlvbj0ibm8gKGRpc2FibGVkLCB1c2UgLS1lbmFibGUtaW50cm9zcGVjdGlvbiB0byBlbmFibGUpIgotICAgIF0sZG5sCi0gICAgW3llc10sW2RubAotICAgICAgICBQS0dfQ0hFQ0tfRVhJU1RTKFtnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wXSwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wIGlzIG5vdCBpbnN0YWxsZWRdKSkKLSAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCA+PSAkMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfaW50cm9zcGVjdGlvbj15ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtZb3UgbmVlZCB0byBoYXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbiA+PSAkMSBpbnN0YWxsZWQgdG8gYnVpbGQgQUNfUEFDS0FHRV9OQU1FXSkpCi0gICAgXSxkbmwKLSAgICBbYXV0b10sW2RubAotICAgICAgICBQS0dfQ0hFQ0tfRVhJU1RTKFtnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wID49ICQxXSwgZm91bmRfaW50cm9zcGVjdGlvbj15ZXMsIGZvdW5kX2ludHJvc3BlY3Rpb249bm8pCi0gICAgXSxkbmwKLSAgICBbZG5sCQotICAgICAgICBBQ19NU0dfRVJST1IoW2ludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIC0tZW5hYmxlLWludHJvc3BlY3Rpb24sIHNob3VsZCBiZSBvbmUgb2YgQDw6QG5vL2F1dG8veWVzQDo+QF0pCi0gICAgXSlkbmwKLQotICAgIEFDX01TR19SRVNVTFQoWyRmb3VuZF9pbnRyb3NwZWN0aW9uXSkKLQotICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj0KLSAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPQotICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9Ci0gICAgSU5UUk9TUEVDVElPTl9HSVJESVI9Ci0gICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPQotICAgIGlmIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyI7IHRoZW4KLSAgICAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9zY2FubmVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0gICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2NvbXBpbGVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0gICAgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2dlbmVyYXRlIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0gICAgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2lyZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0gICAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPSIkKCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dHlwZWxpYmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wKSIKLSAgICAgICBJTlRST1NQRUNUSU9OX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLSAgICAgICBJTlRST1NQRUNUSU9OX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYC9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL01ha2VmaWxlLmludHJvc3BlY3Rpb24KLSAgICAgICBJTlRST1NQRUNUSU9OX0lOSVQ9ImV4dGVybiB2b2lkIGdzdF9pbml0KGdpbnQqLGdjaGFyKiopOyBnc3RfaW5pdChOVUxMLE5VTEwpOyIKLSAgICBmaQotICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fU0NBTk5FUikKLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKQotICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fR0VORVJBVEUpCi0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9HSVJESVIpCi0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9UWVBFTElCRElSKQotICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fQ0ZMQUdTKQotICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fTElCUykKLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX01BS0VGSUxFKQotICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fSU5JVCkKLQotICAgIEFNX0NPTkRJVElPTkFMKEhBVkVfSU5UUk9TUEVDVElPTiwgdGVzdCAieCRmb3VuZF9pbnRyb3NwZWN0aW9uIiA9ICJ4eWVzIikKLV0pCi0KLQotZG5sIFVzYWdlOgotZG5sICAgR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFttaW5pbXVtLWctaS12ZXJzaW9uXSkKLQotQUNfREVGVU4oW0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS10sCi1bCi0gIF9HT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tfSU5URVJOQUwoWyQxXSkKLV0pCi0KLWRubCBVc2FnZToKLWRubCAgIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9SRVFVSVJFKFttaW5pbXVtLWctaS12ZXJzaW9uXSkKLQotCi1BQ19ERUZVTihbR09CSkVDVF9JTlRST1NQRUNUSU9OX1JFUVVJUkVdLAotWwotICBfR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLX0lOVEVSTkFMKFskMV0sIFtyZXF1aXJlXSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvb3JjLm00IGIvY29tbW9uL200L29yYy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiMjQ1OS4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvb3JjLm00CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotZG5sIHBrZy1jb25maWctYmFzZWQgY2hlY2tzIGZvciBPcmMKLQotZG5sIHNwZWNpZmljOgotZG5sIE9SQ19DSEVDSyhbUkVRVUlSRURfVkVSU0lPTl0pCi0KLUFDX0RFRlVOKFtPUkNfQ0hFQ0tdLAotWwotICBPUkNfUkVRPWlmZWxzZShbJDFdLCAsICIwLjQuNiIsIFskMV0pCi0KLSAgQUNfQVJHX0VOQUJMRShvcmMsCi0gIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vcmNdLFt1c2UgT3JjIGlmIGluc3RhbGxlZF0pLAotICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgIGF1dG8pIGVuYWJsZV9vcmM9YXV0byA7OwotICAgIHllcykgZW5hYmxlX29yYz15ZXMgOzsKLSAgICBubykgIGVuYWJsZV9vcmM9bm8gOzsKLSAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtb3JjKSA7OwotICBlc2FjCi0gIF0sCi0gIFtlbmFibGVfb3JjPWF1dG9dKSBkbmwgRGVmYXVsdCB2YWx1ZQotCi0gIGlmIHRlc3QgIngkZW5hYmxlX29yYyIgIT0gInhubyIgOyB0aGVuCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoT1JDLCBvcmMtMC40ID49ICRPUkNfUkVRLCBbCi0gICAgICBBQ19ERUZJTkUoSEFWRV9PUkMsIDEsIFtVc2UgT3JjXSkKLSAgICAgIEhBVkVfT1JDPXllcwotICAgICAgaWYgdGVzdCAieCRPUkNDIiA9ICJ4IiA7IHRoZW4KLSAgICAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciB1c2FibGUgb3JjYykKLSAgICAgICAgT1JDQz1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1vcmNjIG9yYy0wLjRgCi0gICAgICAgIGRubCBjaGVjayB3aGV0aGVyIHRoZSBvcmNjIGZvdW5kIGJ5IHBrZy1jb25maWcgY2FuIGJlIHJ1biBmcm9tIHRoZSBidWlsZCBlbnZpcm9ubWVudAotICAgICAgICBkbmwgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UgKGUuZy4gd2hlbiBjcm9zcy1jb21waWxpbmcpIGZhbGwgYmFjayB0byBvcmNjIGZyb20gUEFUSAotICAgICAgICBBU19JRihbJE9SQ0MgLS12ZXJzaW9uIDE+IC9kZXYvbnVsbCAyPiAvZGV2L251bGxdLCBbXSwgW09SQ0M9YHdoaWNoIG9yY2NgXSkKLSAgICAgICAgQUNfTVNHX1JFU1VMVCgkT1JDQykKLSAgICAgIGZpCi0gICAgICBBQ19TVUJTVChPUkNDKQotICAgICAgT1JDQ19GTEFHUz0iLS1jb21wYXQgJE9SQ19SRVEiCi0gICAgICBBQ19TVUJTVChPUkNDX0ZMQUdTKQotICAgICAgQVNfSUYoW3Rlc3QgIngkT1JDQyIgPSAieCJdLCBbSEFWRV9PUkNDPW5vXSwgW0hBVkVfT1JDQz15ZXNdKQotICAgIF0sIFsKLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX29yYyIgPSAieHllcyIgOyB0aGVuCi0gICAgICAgIEFDX01TR19FUlJPUihbLS1lbmFibGUtb3JjIHNwZWNpZmllZCwgYnV0IE9yYyA+PSAkT1JDX1JFUSBub3QgZm91bmRdKQotICAgICAgZmkKLSAgICAgIEFDX0RFRklORShESVNBQkxFX09SQywgMSwgW0Rpc2FibGUgT3JjXSkKLSAgICAgIEhBVkVfT1JDPW5vCi0gICAgICBIQVZFX09SQ0M9bm8KLSAgICBdKQotICBlbHNlCi0gICAgQUNfREVGSU5FKERJU0FCTEVfT1JDLCAxLCBbRGlzYWJsZSBPcmNdKQotICAgIEhBVkVfT1JDPW5vCi0gICAgSEFWRV9PUkNDPW5vCi0gIGZpCi0gIEFNX0NPTkRJVElPTkFMKEhBVkVfT1JDLCBbdGVzdCAieCRIQVZFX09SQyIgPSAieHllcyJdKQotICBBTV9DT05ESVRJT05BTChIQVZFX09SQ0MsIFt0ZXN0ICJ4JEhBVkVfT1JDQyIgPSAieHllcyJdKQotCi1dKSkKLQotQUNfREVGVU4oW09SQ19PVVRQVVRdLAotWwotICBpZiB0ZXN0ICIkSEFWRV9PUkMiID0geWVzIDsgdGhlbgotICAgIHByaW50ZiAiY29uZmlndXJlOiAqKiogT3JjIGFjY2VsZXJhdGlvbiBlbmFibGVkLlxuIgotICBlbHNlCi0gICAgaWYgdGVzdCAieCRlbmFibGVfb3JjIiA9ICJ4bm8iIDsgdGhlbgotICAgICAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBPcmMgYWNjZWxlcmF0aW9uIGRpc2FibGVkIGJ5IC0tZGlzYWJsZS1vcmMuICBTbG93ZXIgY29kZSBwYXRoc1xuIgotICAgICAgcHJpbnRmICIgICAgICAgICAgICAgICB3aWxsIGJlIHVzZWQuXG4iCi0gICAgZWxzZQotICAgICAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBPcmMgYWNjZWxlcmF0aW9uIGRpc2FibGVkLiAgUmVxdWlyZXMgT3JjID49ICRPUkNfUkVRLCB3aGljaCB3YXNcbiIKLSAgICAgIHByaW50ZiAiICAgICAgICAgICAgICAgbm90IGZvdW5kLiAgU2xvd2VyIGNvZGUgcGF0aHMgd2lsbCBiZSB1c2VkLlxuIgotICAgIGZpCi0gIGZpCi0gIHByaW50ZiAiXG4iCi1dKQotCmRpZmYgLS1naXQgYS9jb21tb24vbTQvcGtnLm00IGIvY29tbW9uL200L3BrZy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk2ZTI5NC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvcGtnLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLSMgcGtnLm00IC0gTWFjcm9zIHRvIGxvY2F0ZSBhbmQgdXRpbGlzZSBwa2ctY29uZmlnLiAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLSMKLSMgQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi0jIFBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW1BLR19QUk9HX1BLR19DT05GSUddLAotW200X3BhdHRlcm5fZm9yYmlkKFteXz9QS0dfW0EtWl9dKyRdKQotbTRfcGF0dGVybl9hbGxvdyhbXlBLR19DT05GSUcoX1BBVEgpPyRdKQotQUNfQVJHX1ZBUihbUEtHX0NPTkZJR10sIFtwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eV0pZG5sCi1pZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCi0JQUNfUEFUSF9UT09MKFtQS0dfQ09ORklHXSwgW3BrZy1jb25maWddKQotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotCV9wa2dfbWluX3ZlcnNpb249bTRfZGVmYXVsdChbJDFdLCBbMC45LjBdKQotCUFDX01TR19DSEVDS0lORyhbcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uXSkKLQlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KLQkJQUNfTVNHX1JFU1VMVChbeWVzXSkKLQllbHNlCi0JCUFDX01TR19SRVNVTFQoW25vXSkKLQkJUEtHX0NPTkZJRz0iIgotCWZpCi0KLWZpW11kbmwKLV0pIyBQS0dfUFJPR19QS0dfQ09ORklHCi0KLSMgUEtHX0NIRUNLX0VYSVNUUyhNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQotIwotIyBDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLiAgU2ltaWxhcgotIyB0byBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCi0jCi0jCi0jIFNpbWlsYXIgdG8gUEtHX0NIRUNLX01PRFVMRVMsIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBpbnN0YW5jZSBvZgotIyB0aGlzIG9yIFBLR19DSEVDS19NT0RVTEVTIGlzIGNhbGxlZCwgb3IgbWFrZSBzdXJlIHRvIGNhbGwKLSMgUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW1BLR19DSEVDS19FWElTVFNdLAotW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICBBQ19SVU5fTE9HKFskUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJDEiXSk7IHRoZW4KLSAgbTRfaWZ2YWwoWyQyXSwgWyQyXSwgWzpdKQotbTRfaWZ2YWxuKFskM10sIFtlbHNlCi0gICQzXSlkbmwKLWZpXSkKLQotCi0jIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbX1BLR19DT05GSUddLAotW2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiQkMSI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1tdJDE9IiQkMSIKLSAgICBlbHNlCi0gICAgICAgIFBLR19DSEVDS19FWElTVFMoWyQzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbcGtnX2N2X1tdJDE9YCRQS0dfQ09ORklHIC0tW10kMiAiJDMiIDI+L2Rldi9udWxsYF0sCi0JCQkgW3BrZ19mYWlsZWQ9eWVzXSkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmlbXWRubAotXSkjIF9QS0dfQ09ORklHCi0KLSMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVEXSwKLVtBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maVtdZG5sCi1dKSMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECi0KLQotIyBQS0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLAotIyBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCi0jCi0jCi0jIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCi0jIFBLR19DSEVDS19NT0RVTEVTIG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCi0jIGV4cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyIGNvbmZpZ3VyZS5hYwotIwotIwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW1BLR19DSEVDS19NT0RVTEVTXSwKLVtBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKLUFDX0FSR19WQVIoWyQxXVtfQ0ZMQUdTXSwgW0MgY29tcGlsZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAotQUNfQVJHX1ZBUihbJDFdW19MSUJTXSwgW2xpbmtlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCi0KLXBrZ19mYWlsZWQ9bm8KLUFDX01TR19DSEVDS0lORyhbZm9yICQxXSkKLQotX1BLR19DT05GSUcoWyQxXVtfQ0ZMQUdTXSwgW2NmbGFnc10sIFskMl0pCi1fUEtHX0NPTkZJRyhbJDFdW19MSUJTXSwgW2xpYnNdLCBbJDJdKQotCi1tNF9kZWZpbmUoW19QS0dfVEVYVF0sIFtBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICQxW11fQ0ZMQUdTCi1hbmQgJDFbXV9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KLVNlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLl0pCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLSAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiQyImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiQyImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkJDFbXV9QS0dfRVJST1JTIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0KLQlpZmVsc2UoWyQ0XSwgLCBbQUNfTVNHX0VSUk9SKGRubAotW1BhY2thZ2UgcmVxdWlyZW1lbnRzICgkMikgd2VyZSBub3QgbWV0OgotCi0kJDFfUEtHX0VSUk9SUwotCi1Db25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKLWluc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCi0KLV9QS0dfVEVYVAotXSldLAotCQlbQUNfTVNHX1JFU1VMVChbbm9dKQotICAgICAgICAgICAgICAgICQ0XSkKLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQlpZmVsc2UoWyQ0XSwgLCBbQUNfTVNHX0ZBSUxVUkUoZG5sCi1bVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0Ci1pcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCi1wYXRoIHRvIHBrZy1jb25maWcuCi0KLV9QS0dfVEVYVAotCi1UbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi5dKV0sCi0JCVskNF0pCi1lbHNlCi0JJDFbXV9DRkxBR1M9JHBrZ19jdl9bXSQxW11fQ0ZMQUdTCi0JJDFbXV9MSUJTPSRwa2dfY3ZfW10kMVtdX0xJQlMKLSAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLQlpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQotZmlbXWRubAotXSkjIFBLR19DSEVDS19NT0RVTEVTCmRpZmYgLS1naXQgYS9jb21tb24vbWFuZ2xlLWRiLnB5IGIvY29tbW9uL21hbmdsZS1kYi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYzZTViYy4uMDAwMDAwMAotLS0gYS9jb21tb24vbWFuZ2xlLWRiLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotIyAtKi0gTW9kZTogUHl0aG9uIC0qLQotIyB2aTpzaTpldDpzdz00OnN0cz00OnRzPTQKLQotIiIiCi1JbnNlcnQgaW5jbHVkZXMgZm9yIHRoZSBlbGVtZW50LSotZGV0YWlscy54bWwgZmlsZXMgaW50byB0aGUgcmVsYXRlZCBkb2Nib29rCi1maWxlcy4KLSIiIgotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uLCB1bmljb2RlX2xpdGVyYWxzCi0KLWltcG9ydCBjb2RlY3MKLWltcG9ydCBnbG9iCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotaW1wb3J0IHhtbC5kb20ubWluaWRvbQotCi1kZWYgcGF0Y2gocmVsYXRlZCwgZGV0YWlscyk6Ci0gICAgdHJ5OgotICAgICAgICBkb2MgPSB4bWwuZG9tLm1pbmlkb20ucGFyc2UocmVsYXRlZCkKLSAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgcmV0dXJuCi0KLSAgICAjIGZpbmQgdGhlIGluc2VydGlvbiBwb2ludAotICAgIGVsZW0gPSBOb25lCi0gICAgZm9yIGUgaW4gZG9jLmNoaWxkTm9kZXM6Ci0gICAgICAgIGlmIGUubm9kZVR5cGUgPT0gZS5FTEVNRU5UX05PREUgYW5kIGUubG9jYWxOYW1lID09ICdyZWZlbnRyeSc6Ci0gICAgICAgICAgICBlbGVtID0gZQotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBlbGVtID09IE5vbmU6Ci0gICAgICAgIHJldHVybgotCi0gICAgZWxlbTIgPSBOb25lCi0gICAgZm9yIGUgaW4gZWxlbS5jaGlsZE5vZGVzOgotICAgICAgICBpZiBlLm5vZGVUeXBlID09IGUuRUxFTUVOVF9OT0RFIGFuZCBlLmxvY2FsTmFtZSA9PSAncmVmc2VjdDEnOgotICAgICAgICAgICAgaWQgPSBlLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJykKLSAgICAgICAgICAgIHJvbGUgPSBlLmdldEF0dHJpYnV0ZU5vZGUoJ3JvbGUnKQotICAgICAgICAgICAgaWYgaWQgYW5kIGlkLm5vZGVWYWx1ZS5lbmRzd2l0aCgnLmRlc2NyaXB0aW9uJykgYW5kIHJvbGUgYW5kIHJvbGUubm9kZVZhbHVlID09ICdkZXNjJzoKLSAgICAgICAgICAgICAgICBlbGVtMiA9IGUKLSAgICAgICAgICAgICAgICBicmVhawotICAgIGlmIGVsZW0yID09IE5vbmU6Ci0gICAgICAgIHJldHVybgotCi0gICAgIyBpbnNlcnQgaW5jbHVkZQotICAgIGluY2x1ZGUgPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5jbHVkZScpCi0gICAgaW5jbHVkZS5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUnKQotICAgIGluY2x1ZGUuc2V0QXR0cmlidXRlKCdocmVmJywgZGV0YWlscykKLSAgICBmYWxsYmFjayA9IGRvYy5jcmVhdGVFbGVtZW50KCdmYWxsYmFjaycpCi0gICAgZmFsbGJhY2suc2V0QXR0cmlidXRlKCd4bWxucycsICdodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlJykKLSAgICBpbmNsdWRlLmFwcGVuZENoaWxkKGZhbGxiYWNrKQotICAgIGVsZW0yLmFwcGVuZENoaWxkKGluY2x1ZGUpCi0KLSAgICAjIHN0b3JlIHBhdGNoZWQgZmlsZQotICAgIHJlc3VsdCA9IGNvZGVjcy5vcGVuKHJlbGF0ZWQsIG1vZGU9InciLCBlbmNvZGluZz0idXRmLTgiKQotICAgICNyZXN1bHQgPSBvcGVuKHJlbGF0ZWQsICJ3YiIpCi0gICAgZG9jLndyaXRleG1sKHJlc3VsdCkKLSAgICByZXN1bHQuY2xvc2UoKQotCi1kZWYgbWFpbigpOgotICAgIGlmIG5vdCBsZW4oc3lzLmFyZ3YpID09IDI6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1BsZWFzZSBzcGVjaWZ5IHRoZSB4bWwvIGRpcicpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICB4bWxkaXIgPSBzeXMuYXJndlsxXQotCi0gICAgIyBwYXJzZSBhbGwgKi1kZXRhaWxzLnhtbCBmaWxlcyBhbmQgcGF0Y2ggaW5jbHVkZXMgaW50byB0aGUgY29ycmVzcG9uZGluZwotICAgICMgeG1sIGZpbGVzCi0gICAgZm9yIGRldGFpbHMgaW4gZ2xvYi5nbG9iKCIlcy9lbGVtZW50LSotZGV0YWlscy54bWwiICUgeG1sZGlyKToKLSAgICAgICAgcGF0Y2ggKGRldGFpbHMucmVwbGFjZSgiLWRldGFpbHMiLCAiIiksIG9zLnBhdGguYmFzZW5hbWUoZGV0YWlscykpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvY29tbW9uL29yYy5tYWsgYi9jb21tb24vb3JjLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzMmI1ZC4uMDAwMDAwMAotLS0gYS9jb21tb24vb3JjLm1haworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSMKLSMgVGhpcyBpcyBhIG1ha2VmaWxlLmFtIGZyYWdtZW50IHRvIGJ1aWxkIE9yYyBjb2RlLgotIwotIyBEZWZpbmUgT1JDX1NPVVJDRSBhbmQgdGhlbiBpbmNsdWRlIHRoaXMgZmlsZSwgc3VjaCBhczoKLSMKLSMgIE9SQ19TT1VSQ0U9Z3N0YWRkZXJvcmMKLSMgIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vb3JjLm1hawotIwotIyBUaGlzIGZyYWdtZW50IHdpbGwgY3JlYXRlIHRtcC1vcmMuYyBhbmQgZ3N0YWRkZXJvcmMuaCBmcm9tCi0jIGdzdGFkZGVyb3JjLm9yYy4KLSMKLSMgV2hlbiAnbWFrZSBkaXN0JyBpcyBydW4gYXQgdGhlIHRvcCBsZXZlbCwgb3IgJ21ha2Ugb3JjLXVwZGF0ZScKLSMgaW4gYSBkaXJlY3RvcnkgaW5jbHVkaW5nIHRoaXMgZnJhZ21lbnQsIHRoZSBnZW5lcmF0ZWQgc291cmNlIAotIyBmaWxlcyB3aWxsIGJlIGNvcGllZCB0byAkKE9SQ19TT1VSQ0UpLWRpc3QuW2NoXS4gIFRoZXNlIGZpbGVzCi0jIHNob3VsZCBiZSBjaGVja2VkIGluIHRvIGdpdCwgc2luY2UgdGhleSBhcmUgdXNlZCBpZiBPcmMgaXMKLSMgZGlzYWJsZWQuCi0jIAotIyBOb3RlIHRoYXQgdGhpcyBmaWxlIGRlZmluZXMgQlVJTFRfU09VUkNFUywgc28gYW55IGxhdGVyIHVzYWdlCi0jIG9mIEJVSUxUX1NPVVJDRVMgaW4gdGhlIE1ha2VmaWxlLmFtIHRoYXQgaW5jbHVkZXMgdGhpcyBmaWxlCi0jIG11c3QgdXNlICcrPScuCi0jCi0KLQotRVhUUkFfRElTVCA9ICQoT1JDX1NPVVJDRSkub3JjCi0KLU9SQ19OT0RJU1RfU09VUkNFUyA9IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLUJVSUxUX1NPVVJDRVMgPSB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi0KLQotb3JjLXVwZGF0ZTogdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotCSQodG9wX3NyY2RpcikvY29tbW9uL2dzdC1pbmRlbnQgdG1wLW9yYy5jCi0JY3AgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotCWNwICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmgKLQotb3JjY192X2dlbiA9ICQob3JjY192X2dlbl8kKFYpKQotb3JjY192X2dlbl8gPSAkKG9yY2Nfdl9nZW5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1vcmNjX3ZfZ2VuXzAgPSBAZWNobyAiICBPUkNDICAgJEAiOwotCi1jcF92X2dlbiA9ICQoY3Bfdl9nZW5fJChWKSkKLWNwX3ZfZ2VuXyA9ICQoY3Bfdl9nZW5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1jcF92X2dlbl8wID0gQGVjaG8gIiAgQ1AgICAgICRAIjsKLQotaWYgSEFWRV9PUkNDCi10bXAtb3JjLmM6ICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYwotCSQob3JjY192X2dlbikkKE9SQ0MpICQoT1JDQ19GTEFHUykgLS1pbXBsZW1lbnRhdGlvbiAtLWluY2x1ZGUgZ2xpYi5oIC1vIHRtcC1vcmMuYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLQotJChPUkNfU09VUkNFKS5oOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLQkkKG9yY2Nfdl9nZW4pJChPUkNDKSAkKE9SQ0NfRkxBR1MpIC0taGVhZGVyIC0taW5jbHVkZSBnbGliLmggLW8gJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYwotZWxzZQotdG1wLW9yYy5jOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi0JJChjcF92X2dlbiljcCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMgdG1wLW9yYy5jCi0KLSQoT1JDX1NPVVJDRSkuaDogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotCSQoY3Bfdl9nZW4pY3AgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oICQoT1JDX1NPVVJDRSkuaAotZW5kaWYKLQotY2xlYW4tbG9jYWw6IGNsZWFuLW9yYwotLlBIT05ZOiBjbGVhbi1vcmMKLWNsZWFuLW9yYzoKLQlybSAtZiB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi0KLWRpc3QtaG9vazogZGlzdC1ob29rLW9yYwotLlBIT05ZOiBkaXN0LWhvb2stb3JjCi0KLSMgd2UgdHJ5IGFuZCBjb3B5IHVwZGF0ZWQgb3JjIC1kaXN0IGZpbGVzIGJlbG93LCBidXQgZG9uJ3QgZmFpbCBpZiBpdAotIyBkb2Vzbid0IHdvcmsgYXMgdGhlIHNyY2RpciBtaWdodCBub3QgYmUgd3JpdGFibGUKLWRpc3QtaG9vay1vcmM6IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3QtaW5kZW50IHRtcC1vcmMuYwotCXJtIC1mIHRtcC1vcmMuY34KLQljbXAgLXMgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYyB8fCBcCi0JICBjcCB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jIHx8IHRydWUKLQljbXAgLXMgJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaCB8fCBcCi0JICBjcCAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oIHx8IHRydWUKLQljcCAtcCB0bXAtb3JjLmMgJChkaXN0ZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotCWNwIC1wICQoT1JDX1NPVVJDRSkuaCAkKGRpc3RkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oCi0KZGlmZiAtLWdpdCBhL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hayBiL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY4ODVkZi4uMDAwMDAwMAotLS0gYS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIGluY2x1ZGUgdGhpcyBhdCB0aGUgZW5kIG9mICRNT0RVTEUvZXh0L01ha2VmaWxlLmFtIHRvIGZvcmNlIG1ha2UgdG8KLSMgYnVpbGQgc3ViZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWwgd2hlbiBtYWtlIC1qTiBpcyB1c2VkLiBXZSB3aWxsIGVuZCB1cAotIyBkZXNjZW5kaW5nIGludG8gYWxsIHN1YmRpcmVjdG9yaWVzIGEgc2Vjb25kIHRpbWUsIGJ1dCBvbmx5IGFmdGVyIHRoZSBmaXJzdAotIyAocGFyYWxsZWwpIHJ1biBoYXMgZmluaXNoZWQsIHNvIGl0IHNob3VsZCBnbyByaWdodCB0aHJvdWdoIHRoZSBzZWNvbmQgdGltZS4KLQotLlBIT05ZOiBpbmRlcGVuZGVudC1zdWJkaXJzICQoU1VCRElSUykKLQotaW5kZXBlbmRlbnQtc3ViZGlyczogJChTVUJESVJTKQotCi0kKFNVQkRJUlMpOgotCSQoTUFLRSkgLUMgJEAKLQotYWxsLXJlY3Vyc2l2ZTogaW5kZXBlbmRlbnQtc3ViZGlycwpkaWZmIC0tZ2l0IGEvY29tbW9uL3BsdWdpbnMueHNsIGIvY29tbW9uL3BsdWdpbnMueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDUxNWI2Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9wbHVnaW5zLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnPz4gPCEtLSotIG1vZGU6IHhtbCAtKi0tPgotCi08eHNsOnN0eWxlc2hlZXQKLSAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gIHhtbG5zOmV4c2w9Imh0dHA6Ly9leHNsdC5vcmcvY29tbW9uIgotICB4bWxuczpzdHI9Imh0dHA6Ly9leHNsdC5vcmcvc3RyaW5ncyIKLSAgZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXM9ImV4c2wgc3RyIgotICB2ZXJzaW9uPSIxLjAiPgotPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGluZGVudD0ieWVzIgotICAgICAgICAgICAgZG9jdHlwZS1wdWJsaWMgPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCi0gICAgICAgICAgICBkb2N0eXBlLXN5c3RlbSA9ICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIvPgotCi08eHNsOnBhcmFtIG5hbWU9Im1vZHVsZSIgLz4KLQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJlbGVtZW50Ij4KLSAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9ImxpbmsiPgotICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImxpbmtlbmQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbW9kdWxlIiAvPi1wbHVnaW5zLTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIi8+PC94c2w6YXR0cmlidXRlPgotICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIiAvPgotICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+Ci0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGVzY3JpcHRpb24iIC8+PC94c2w6ZWxlbWVudD4KLSAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgPC94c2w6ZWxlbWVudD4KLSAgICA8eHNsOnZhcmlhYmxlIG5hbWU9Im5hbWUiPjx4c2w6Y29weS1vZiBzZWxlY3Q9Im5hbWUiLz48L3hzbDp2YXJpYWJsZT4KLSAgICA8IS0tIGhlcmUgd2Ugd3JpdGUgYW4gZWxlbWVudC0obmFtZSktZGV0YWlscy54bWwgZmlsZSBmb3IgdGhlIGVsZW1lbnQgLS0+Ci0gICAgPGV4c2w6ZG9jdW1lbnQgaHJlZj0ie2NvbmNhdCAoJ3htbC9lbGVtZW50LScsICRuYW1lLCAnLWRldGFpbHMueG1sJyl9IiBtZXRob2Q9InhtbCIgaW5kZW50PSJ5ZXMiPgotCi0gICAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmc3lub3BzaXNkaXYiPgotICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmc2VjdDIiPgotICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0aXRsZSI+RWxlbWVudCBJbmZvcm1hdGlvbjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmlhYmxlbGlzdCI+Ci0KLSAgICAgICAgICAgIDwhLS0gcGx1Z2luIG5hbWUgYW5kIGxpbmsgLS0+Ci0gICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPnBsdWdpbjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPgotICAgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9ImxpbmsiPgotICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJsaW5rZW5kIj5wbHVnaW4tPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4uLy4uL25hbWUiLz48L3hzbDphdHRyaWJ1dGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi8uLi9uYW1lIiAvPgotICAgICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5hdXRob3I8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iYXV0aG9yIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPmNsYXNzPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNsYXNzIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICAgICAgPC94c2w6ZWxlbWVudD4gPCEtLSB2YXJpYWJsZWxpc3QgLS0+Ci0gICAgICAgIDwveHNsOmVsZW1lbnQ+IDwhLS0gcmVmc2VjdDIgLS0+Ci0KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnNlY3QyIj4KLSAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGl0bGUiPkVsZW1lbnQgUGFkczwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgPCEtLSBwcm9jZXNzIGFsbCBjYXBzIC0tPgotICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJwYWRzL2NhcHMiPgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmlhYmxlbGlzdCI+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgotICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5uYW1lPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+ZGlyZWN0aW9uPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkaXJlY3Rpb24iIC8+PC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgotICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5wcmVzZW5jZTwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0icHJlc2VuY2UiIC8+PC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSdzdHI6dG9rZW5pemUoZGV0YWlscywgIjsiKSc+Ci0gICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT0xIj5kZXRhaWxzPC94c2w6aWY+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PScuJy8+PC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+Ci0KLSAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+IDwhLS0gdmFyaWFibGVsaXN0IC0tPgotCi0gICAgICAgICAgICA8IS0teHNsOmVsZW1lbnQgbmFtZT0icHJvZ3JhbWxpc3RpbmciPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXRhaWxzIiAvPjwveHNsOmVsZW1lbnQtLT4KLQotICAgICAgICAgIDwveHNsOmZvci1lYWNoPgotICAgICAgICA8L3hzbDplbGVtZW50PiA8IS0tIHJlZnNlY3QyIC0tPgotICAgICAgPC94c2w6ZWxlbWVudD4gPCEtLSByZWZzeW5vcHNpc2RpdiAtLT4KLQotICAgIDwvZXhzbDpkb2N1bWVudD4KLSAgPC94c2w6dGVtcGxhdGU+Ci0KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGx1Z2luIj4KLSAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmZW50cnkiPgotICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaWQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkbW9kdWxlIiAvPi1wbHVnaW5zLXBsdWdpbi08eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvPjwveHNsOmF0dHJpYnV0ZT4KLQotICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZm1ldGEiPgotICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmZW50cnl0aXRsZSI+Ci0gICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUiLz4KLSAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Im1hbnZvbG51bSI+MzwveHNsOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZtaXNjaW5mbyI+RklYTUUgTGlicmFyeTwveHNsOmVsZW1lbnQ+Ci0gICAgICA8L3hzbDplbGVtZW50PiA8IS0tIHJlZm1ldGEgLS0+Ci0KLSAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZuYW1lZGl2Ij4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZm5hbWUiPgotICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIi8+Ci0gICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnB1cnBvc2UiPgotICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJhbmNob3IiPgotICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaWQiPnBsdWdpbi08eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvPjwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXNjcmlwdGlvbiIvPgotICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnNlY3QxIj4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRpdGxlIj5QbHVnaW4gSW5mb3JtYXRpb248L3hzbDplbGVtZW50PgotICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFyaWFibGVsaXN0Ij4KLQotICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPmZpbGVuYW1lPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iYmFzZW5hbWUiIC8+PC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPnZlcnNpb248L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJ2ZXJzaW9uIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ibGljZW5zZSIgLz48L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+Ci0gICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+cGFja2FnZTwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InBhY2thZ2UiIC8+PC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPm9yaWdpbjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+Ci0gICAgICAgICAgICAgICAgPCEtLSBvbmx5IHNob3cgb3JpZ2luIGFzIGxpbmsgaWYgaXQgc3RhcnRzIHdpdGggaHR0cCAtLT4KLSAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KLSAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJzdHJpbmcoQGhyZWYsIDEsIDQpID0gJ2h0dHAnIj4KLSAgICAgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InVsaW5rIj4KLSAgICAgICAgICAgICAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJ1cmwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJvcmlnaW4iIC8+PC94c2w6YXR0cmlidXRlPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJvcmlnaW4iIC8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDp3aGVuPgotICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJvcmlnaW4iIC8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+Ci0gICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgotICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmc2VjdDEiPgotICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGl0bGUiPkVsZW1lbnRzPC94c2w6ZWxlbWVudD4KLSAgICAgICAgPCEtLSBwcm9jZXNzIGFsbCBlbGVtZW50cyAtLT4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmlhYmxlbGlzdCI+Ci0gICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJlbGVtZW50cyIvPgotICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgPC94c2w6dGVtcGxhdGU+Ci0KLSAgPCEtLSBpZ25vcmUgLS0+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImdzdC1wbHVnaW4tcGF0aHMiIC8+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9jb21tb24vcG8ubWFrIGIvY29tbW9uL3BvLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAxOWZhYy4uMDAwMDAwMAotLS0gYS9jb21tb24vcG8ubWFrCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIHJ1bGUgdG8gZG93bmxvYWQgdGhlIGxhdGVzdCAucG8gZmlsZXMKLWRvd25sb2FkLXBvOiAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMgJChQQUNLQUdFKQotCmRpZmYgLS1naXQgYS9jb21tb24vcmVsZWFzZS5tYWsgYi9jb21tb24vcmVsZWFzZS5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NGMyZjEuLjAwMDAwMDAKLS0tIGEvY29tbW9uL3JlbGVhc2UubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBpbmNsdWRlIHRoaXMgc25pcHBldCB0byBhZGQgYSBjb21tb24gcmVsZWFzZTogdGFyZ2V0IGJ5IHVzaW5nCi0jIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vcmVsZWFzZS5tYWsKLQotcmVsZWFzZTogZGlzdAotCUAkKE1BS0UpICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHouc2hhMjU2c3VtCi0JQGVjaG8KLQlAZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKLQlAZWNobyAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyQoUEFDS0FHRSkvJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54eiIKLQlAY2F0ICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHouc2hhMjU2c3VtCi0JQGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0JQGlmIFsgLWQgfi9yZWxlYXNlcy8gXTsgdGhlbiBcCi0JICBjcCAtdiAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6IH4vcmVsZWFzZXMvOyBcCi0JZmkKLQlAaWYgWyAtZCAuLi93d3cvZGF0YS9zcmMgXTsgdGhlbiBcCi0JICBtdiAtdiAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6IC4uL3d3dy9kYXRhL3NyYy8kKFBBQ0tBR0UpLyA7IFwKLQkgIG12IC12ICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHouc2hhMjU2c3VtIC4uL3d3dy9kYXRhL3NyYy8kKFBBQ0tBR0UpLyA7IFwKLQllbGlmIFsgLWQgLi4vLi4vd3d3L2RhdGEvc3JjIF07IHRoZW4gXAotCSAgbXYgLXYgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54eiAuLi8uLi93d3cvZGF0YS9zcmMvJChQQUNLQUdFKS8gOyBcCi0JICBtdiAtdiAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6LnNoYTI1NnN1bSAuLi8uLi93d3cvZGF0YS9zcmMvJChQQUNLQUdFKS8gOyBcCi0JZmkKLQlAZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKLQotIyBnZW5lcmF0ZSBzaGEyNTYgc3VtIGZpbGVzCi0lLnNoYTI1NnN1bTogJQotCUBzaGEyNTZzdW0gJDwgPiAkQAotCi0jIGNoZWNrIHRoYXQgbm8gbWFyc2hhbCBvciBlbnVtdHlwZXMgZmlsZXMgYXJlIGluY2x1ZGVkCi0jIHRoaXMgaW4gdHVybiBlbnN1cmVzIHRoYXQgZGlzdGNoZWNrIGZhaWxzIGZvciBtaXNzaW5nIC5saXN0IGZpbGVzIHdoaWNoIGlzIGN1cnJlbnRseQotIyBzaGFkb3dlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIC5jIGFuZCAuaCBmaWxlcyBhcmUgaW5jbHVkZWQuCi1kaXN0Y2hlY2staG9vazoKLQlAdGVzdCAieCIgPSAieGBmaW5kICQoZGlzdGRpcikgLW5hbWUgXCotZW51bXR5cGVzLltjaF0gfCBncmVwIC12IHdpbjMyYCIgJiYgXAotCXRlc3QgIngiID0gInhgZmluZCAkKGRpc3RkaXIpIC1uYW1lIFwqLW1hcnNoYWwuW2NoXWAiIHx8IFwKLQkoIGVjaG8gIioqKiBMZWZ0b3ZlciBlbnVtdHlwZXMgb3IgbWFyc2hhbCBmaWxlcyBpbiB0aGUgdGFyYmFsbC4iICYmIFwKLQkgIGVjaG8gIioqKiBNYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgbm90IGRpc3RlZDoiICYmIFwKLQkgIGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1lbnVtdHlwZXMuW2NoXSB8IGdyZXAgLXYgd2luMzIgJiYgXAotCSAgZmluZCAkKGRpc3RkaXIpIC1uYW1lIFwqLW1hcnNoYWwuW2NoXSAmJiBcCi0JICBmYWxzZSApCmRpZmYgLS1naXQgYS9jb21tb24vc2NhbmdvYmotbWVyZ2UucHkgYi9jb21tb24vc2NhbmdvYmotbWVyZ2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQ2NzM2YjQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL3NjYW5nb2JqLW1lcmdlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0jIC0qLSBNb2RlOiBQeXRob24gLSotCi0jIHZpOnNpOmV0OnN3PTQ6c3RzPTQ6dHM9NAotCi0iIiIKLXBhcnNlLCBtZXJnZSBhbmQgd3JpdGUgZ3N0ZG9jLXNjYW5vYmogZmlsZXMKLSIiIgotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uLCB1bmljb2RlX2xpdGVyYWxzCi0KLWltcG9ydCBjb2RlY3MKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1kZWYgZGVidWcoKmFyZ3MpOgotICAgIHBhc3MKLQotIyBPcmRlcmVkRGljdCBjbGFzcyBiYXNlZCBvbgotIyBodHRwOi8vYXNwbi5hY3RpdmVzdGF0ZS5jb20vQVNQTi9Db29rYm9vay9QeXRob24vUmVjaXBlLzEwNzc0NwotIyBMaWNlbnNlZCB1bmRlciB0aGUgUHl0aG9uIExpY2Vuc2UKLWNsYXNzIE9yZGVyZWREaWN0KGRpY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fa2V5cyA9IFtdCi0gICAgICAgIGRpY3QuX19pbml0X18oc2VsZikKLQotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICBkaWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSkKLSAgICAgICAgc2VsZi5fa2V5cy5yZW1vdmUoa2V5KQotCi0gICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgaXRlbSk6Ci0gICAgICAgIGRpY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCBpdGVtKQotICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuX2tleXM6IHNlbGYuX2tleXMuYXBwZW5kKGtleSkKLQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgZGljdC5jbGVhcihzZWxmKQotICAgICAgICBzZWxmLl9rZXlzID0gW10KLQotICAgIGRlZiBjb3B5KHNlbGYpOgotICAgICAgICBkaWN0ID0gZGljdC5jb3B5KHNlbGYpCi0gICAgICAgIGRpY3QuX2tleXMgPSBzZWxmLl9rZXlzWzpdCi0gICAgICAgIHJldHVybiBkaWN0Ci0KLSAgICBkZWYgaXRlbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiB6aXAoc2VsZi5fa2V5cywgc2VsZi52YWx1ZXMoKSkKLQotICAgIGRlZiBrZXlzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fa2V5cwotCi0gICAgZGVmIHBvcGl0ZW0oc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleXNbLTFdCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2RpY3Rpb25hcnkgaXMgZW1wdHknKQotCi0gICAgICAgIHZhbCA9IHNlbGZba2V5XQotICAgICAgICBkZWwgc2VsZltrZXldCi0KLSAgICAgICAgcmV0dXJuIChrZXksIHZhbCkKLQotICAgIGRlZiBzZXRkZWZhdWx0KHNlbGYsIGtleSwgZmFpbG9iaiA9IE5vbmUpOgotICAgICAgICBkaWN0LnNldGRlZmF1bHQoc2VsZiwga2V5LCBmYWlsb2JqKQotICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuX2tleXM6IHNlbGYuX2tleXMuYXBwZW5kKGtleSkKLQotICAgIGRlZiB1cGRhdGUoc2VsZiwgZGljdCk6Ci0gICAgICAgIGRpY3QudXBkYXRlKHNlbGYsIGRpY3QpCi0gICAgICAgIGZvciBrZXkgaW4gZGljdC5rZXlzKCk6Ci0gICAgICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuX2tleXM6IHNlbGYuX2tleXMuYXBwZW5kKGtleSkKLQotICAgIGRlZiB2YWx1ZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBtYXAoc2VsZi5nZXQsIHNlbGYuX2tleXMpCi0KLWNsYXNzIE9iamVjdDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYuX3NpZ25hbHMgPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIHNlbGYuX2FyZ3MgPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8T2JqZWN0ICVzPiIgJSBzZWxmLm5hbWUKLQotICAgIGRlZiBhZGRfc2lnbmFsKHNlbGYsIHNpZ25hbCwgb3ZlcndyaXRlPVRydWUpOgotICAgICAgICBpZiBub3Qgb3ZlcndyaXRlIGFuZCBzaWduYWwubmFtZSBpbiBzZWxmLl9zaWduYWxzOgotICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigic2lnbmFsICVzIGFscmVhZHkgaW4gJXIiICUgKHNpZ25hbC5uYW1lLCBzZWxmKSkKLSAgICAgICAgc2VsZi5fc2lnbmFsc1tzaWduYWwubmFtZV0gPSBzaWduYWwKLQotICAgIGRlZiBhZGRfYXJnKHNlbGYsIGFyZywgb3ZlcndyaXRlPVRydWUpOgotICAgICAgICBpZiBub3Qgb3ZlcndyaXRlIGFuZCBhcmcubmFtZSBpbiBzZWxmLl9hcmdzOgotICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigiYXJnICVzIGFscmVhZHkgaW4gJXIiICUgKGFyZy5uYW1lLCBzZWxmKSkKLSAgICAgICAgc2VsZi5fYXJnc1thcmcubmFtZV0gPSBhcmcKLQotY2xhc3MgRG9jYWJsZToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuYXR0cnM6Ci0gICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwga3dhcmdzW2tleV0pCi0gICAgICAgIHNlbGYuZGljdCA9IGt3YXJncwotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjwlciAlcz4iICUgKHN0cihzZWxmLl9fY2xhc3NfXyksIHNlbGYubmFtZSkKLQotY2xhc3MgU2lnbmFsKERvY2FibGUpOgotICAgIGF0dHJzID0gWyduYW1lJywgJ3JldHVybnMnLCAnYXJncyddCi0KLWNsYXNzIEFyZyhEb2NhYmxlKToKLSAgICBhdHRycyA9IFsnbmFtZScsICd0eXBlJywgJ3JhbmdlJywgJ2ZsYWdzJywgJ25pY2snLCAnYmx1cmInLCAnZGVmYXVsdCddCi0KLWNsYXNzIEdEb2M6Ci0gICAgZGVmIGxvYWRfZmlsZShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxpbmVzID0gY29kZWNzLm9wZW4oZmlsZW5hbWUsIGVuY29kaW5nPSd1dGYtOCcpLnJlYWRsaW5lcygpCi0gICAgICAgICAgICBzZWxmLmxvYWRfZGF0YSgiIi5qb2luKGxpbmVzKSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAoIldBUk5JTkcgLSBjb3VsZCBub3QgcmVhZCBmcm9tICVzIiAlIGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBwcmludCAoIldBUk5JTkcgLSBjb3VsZCBub3QgcGFyc2UgJXM6ICVzIiAlIChmaWxlbmFtZSwgZSkpCi0KLSAgICBkZWYgc2F2ZV9maWxlKHNlbGYsIGZpbGVuYW1lLCBiYWNrdXA9RmFsc2UpOgotICAgICAgICAiIiIKLSAgICAgICAgU2F2ZSB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIGdpdmVuIGZpbGUgaWYgdGhlIGZpbGUgY29udGVudCBjaGFuZ2VkLgotICAgICAgICAiIiIKLSAgICAgICAgb2xkZGF0YSA9IE5vbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGluZXMgPSBjb2RlY3Mub3BlbihmaWxlbmFtZSwgZW5jb2Rpbmc9J3V0Zi04JykucmVhZGxpbmVzKCkKLSAgICAgICAgICAgIG9sZGRhdGEgPSAiIi5qb2luKGxpbmVzKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHByaW50ICgiV0FSTklORyAtIGNvdWxkIG5vdCByZWFkIGZyb20gJXMiICUgZmlsZW5hbWUpCi0gICAgICAgIG5ld2RhdGEgPSBzZWxmLmdldF9kYXRhKCkKLSAgICAgICAgaWYgb2xkZGF0YSBhbmQgb2xkZGF0YSA9PSBuZXdkYXRhOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgb2xkZGF0YToKLSAgICAgICAgICAgIGlmIGJhY2t1cDoKLSAgICAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJy5iYWsnKQotCi0gICAgICAgIGhhbmRsZSA9IGNvZGVjcy5vcGVuKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPSd1dGYtOCcpCi0gICAgICAgIGhhbmRsZS53cml0ZShuZXdkYXRhKQotICAgICAgICBoYW5kbGUuY2xvc2UoKQotCi1jbGFzcyBTaWduYWxzKEdEb2MpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fb2JqZWN0cyA9IE9yZGVyZWREaWN0KCkKLQotICAgIGRlZiBsb2FkX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAgICAgICIiIgotICAgICAgICBMb2FkIHRoZSAuc2lnbmFscyBsaW5lcywgY3JlYXRpbmcgb3VyIGxpc3Qgb2Ygb2JqZWN0cyBhbmQgc2lnbmFscy4KLSAgICAgICAgIiIiCi0gICAgICAgIGltcG9ydCByZQotICAgICAgICBzbWF0Y2hlciA9IHJlLmNvbXBpbGUoCi0gICAgICAgICAgICAnKD9zKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWFrZSAuIG1hdGNoIFxuCi0gICAgICAgICAgICAnPFNJR05BTD5cbiguKj8pPC9TSUdOQUw+XG4nCi0gICAgICAgICAgICApCi0gICAgICAgIG5tYXRjaGVyID0gcmUuY29tcGlsZSgKLSAgICAgICAgICAgICc8TkFNRT4nCi0gICAgICAgICAgICAnKD9QPG9iamVjdD5cUyopJyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgb2JqZWN0Ci0gICAgICAgICAgICAnOjonCi0gICAgICAgICAgICAnKD9QPHNpZ25hbD5cUyopJyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgc2lnbmFsCi0gICAgICAgICAgICAnPC9OQU1FPicKLSAgICAgICAgKQotICAgICAgICBybWF0Y2hlciA9IHJlLmNvbXBpbGUoCi0gICAgICAgICAgICAnKD9zKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWFrZSAuIG1hdGNoIFxuCi0gICAgICAgICAgICAnPFJFVFVSTlM+KD9QPHJldHVybnM+XFMqKTwvUkVUVVJOUz5cbicgICAgICMgc3RvcmUgcmV0dXJucwotICAgICAgICAgICAgJyg/UDxhcmdzPi4qKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIGFyZ3MKLSAgICAgICAgKQotICAgICAgICBmb3IgYmxvY2sgaW4gc21hdGNoZXIuZmluZGFsbChkYXRhKToKLSAgICAgICAgICAgIG5tYXRjaCA9IG5tYXRjaGVyLnNlYXJjaChibG9jaykKLSAgICAgICAgICAgIGlmIG5tYXRjaDoKLSAgICAgICAgICAgICAgICBvID0gbm1hdGNoLmdyb3VwKCdvYmplY3QnKQotICAgICAgICAgICAgICAgIGRlYnVnKCJGb3VuZCBvYmplY3QiLCBvKQotICAgICAgICAgICAgICAgIGRlYnVnKCJGb3VuZCBzaWduYWwiLCBubWF0Y2guZ3JvdXAoJ3NpZ25hbCcpKQotICAgICAgICAgICAgICAgIGlmIG8gbm90IGluIHNlbGYuX29iamVjdHM6Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IE9iamVjdChvKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vYmplY3RzW29dID0gb2JqZWN0Ci0KLSAgICAgICAgICAgICAgICBybWF0Y2ggPSBybWF0Y2hlci5zZWFyY2goYmxvY2spCi0gICAgICAgICAgICAgICAgaWYgcm1hdGNoOgotICAgICAgICAgICAgICAgICAgICBkaWN0ID0gcm1hdGNoLmdyb3VwZGljdCgpLmNvcHkoKQotICAgICAgICAgICAgICAgICAgICBkaWN0WyduYW1lJ10gPSBubWF0Y2guZ3JvdXAoJ3NpZ25hbCcpCi0gICAgICAgICAgICAgICAgICAgIHNpZ25hbCA9IFNpZ25hbCgqKmRpY3QpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX29iamVjdHNbb10uYWRkX3NpZ25hbChzaWduYWwpCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIG8gaW4gc2VsZi5fb2JqZWN0cy52YWx1ZXMoKToKLSAgICAgICAgICAgIGZvciBzIGluIG8uX3NpZ25hbHMudmFsdWVzKCk6Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSAiIiI8U0lHTkFMPgotPE5BTUU+JShvYmplY3Qpczo6JShuYW1lKXM8L05BTUU+Ci08UkVUVVJOUz4lKHJldHVybnMpczwvUkVUVVJOUz4KLSUoYXJncylzPC9TSUdOQUw+Ci0iIiIKLSAgICAgICAgICAgICAgICBkID0gcy5kaWN0LmNvcHkoKQotICAgICAgICAgICAgICAgIGRbJ29iamVjdCddID0gby5uYW1lCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGJsb2NrICUgZCkKLQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKSArICdcbicKLQotY2xhc3MgQXJncyhHRG9jKToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX29iamVjdHMgPSBPcmRlcmVkRGljdCgpCi0KLSAgICBkZWYgbG9hZF9kYXRhKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiIKLSAgICAgICAgTG9hZCB0aGUgLmFyZ3MgbGluZXMsIGNyZWF0aW5nIG91ciBsaXN0IG9mIG9iamVjdHMgYW5kIGFyZ3MuCi0gICAgICAgICIiIgotICAgICAgICBpbXBvcnQgcmUKLSAgICAgICAgYW1hdGNoZXIgPSByZS5jb21waWxlKAotICAgICAgICAgICAgJyg/cyknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1ha2UgLiBtYXRjaCBcbgotICAgICAgICAgICAgJzxBUkc+XG4oLio/KTwvQVJHPlxuJwotICAgICAgICAgICAgKQotICAgICAgICBubWF0Y2hlciA9IHJlLmNvbXBpbGUoCi0gICAgICAgICAgICAnPE5BTUU+JwotICAgICAgICAgICAgJyg/UDxvYmplY3Q+XFMqKScgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIG9iamVjdAotICAgICAgICAgICAgJzo6JwotICAgICAgICAgICAgJyg/UDxhcmc+XFMqKScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIGFyZwotICAgICAgICAgICAgJzwvTkFNRT4nCi0gICAgICAgICkKLSAgICAgICAgcm1hdGNoZXIgPSByZS5jb21waWxlKAotICAgICAgICAgICAgJyg/cyknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1ha2UgLiBtYXRjaCBcbgotICAgICAgICAgICAgJzxUWVBFPig/UDx0eXBlPlxTKik8L1RZUEU+XG4nICAgICAgICAgICAgICAjIHN0b3JlIHR5cGUKLSAgICAgICAgICAgICc8UkFOR0U+KD9QPHJhbmdlPi4qPyk8L1JBTkdFPlxuJyAgICAgICAgICAgIyBzdG9yZSByYW5nZQotICAgICAgICAgICAgJzxGTEFHUz4oP1A8ZmxhZ3M+XFMqKTwvRkxBR1M+XG4nICAgICAgICAgICAjIHN0b3JlIGZsYWdzCi0gICAgICAgICAgICAnPE5JQ0s+KD9QPG5pY2s+Lio/KTwvTklDSz5cbicgICAgICAgICAgICAgICMgc3RvcmUgbmljawotICAgICAgICAgICAgJzxCTFVSQj4oP1A8Ymx1cmI+Lio/KTwvQkxVUkI+XG4nICAgICAgICAgICAjIHN0b3JlIGJsdXJiCi0gICAgICAgICAgICAnPERFRkFVTFQ+KD9QPGRlZmF1bHQ+Lio/KTwvREVGQVVMVD5cbicgICAgICMgc3RvcmUgZGVmYXVsdAotICAgICAgICApCi0gICAgICAgIGZvciBibG9jayBpbiBhbWF0Y2hlci5maW5kYWxsKGRhdGEpOgotICAgICAgICAgICAgbm1hdGNoID0gbm1hdGNoZXIuc2VhcmNoKGJsb2NrKQotICAgICAgICAgICAgaWYgbm1hdGNoOgotICAgICAgICAgICAgICAgIG8gPSBubWF0Y2guZ3JvdXAoJ29iamVjdCcpCi0gICAgICAgICAgICAgICAgZGVidWcoIkZvdW5kIG9iamVjdCIsIG8pCi0gICAgICAgICAgICAgICAgZGVidWcoIkZvdW5kIGFyZyIsIG5tYXRjaC5ncm91cCgnYXJnJykpCi0gICAgICAgICAgICAgICAgaWYgbyBub3QgaW4gc2VsZi5fb2JqZWN0czoKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gT2JqZWN0KG8pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX29iamVjdHNbb10gPSBvYmplY3QKLQotICAgICAgICAgICAgICAgIHJtYXRjaCA9IHJtYXRjaGVyLnNlYXJjaChibG9jaykKLSAgICAgICAgICAgICAgICBpZiBybWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgIGRpY3QgPSBybWF0Y2guZ3JvdXBkaWN0KCkuY29weSgpCi0gICAgICAgICAgICAgICAgICAgIGRpY3RbJ25hbWUnXSA9IG5tYXRjaC5ncm91cCgnYXJnJykKLSAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnKCoqZGljdCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2JqZWN0c1tvXS5hZGRfYXJnKGFyZykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCAoIkVSUk9SOiBjb3VsZCBub3QgbWF0Y2ggYXJnIGZyb20gYmxvY2sgJXMiICUgYmxvY2spCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIG8gaW4gc2VsZi5fb2JqZWN0cy52YWx1ZXMoKToKLSAgICAgICAgICAgIGZvciBhIGluIG8uX2FyZ3MudmFsdWVzKCk6Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSAiIiI8QVJHPgotPE5BTUU+JShvYmplY3Qpczo6JShuYW1lKXM8L05BTUU+Ci08VFlQRT4lKHR5cGUpczwvVFlQRT4KLTxSQU5HRT4lKHJhbmdlKXM8L1JBTkdFPgotPEZMQUdTPiUoZmxhZ3MpczwvRkxBR1M+Ci08TklDSz4lKG5pY2spczwvTklDSz4KLTxCTFVSQj4lKGJsdXJiKXM8L0JMVVJCPgotPERFRkFVTFQ+JShkZWZhdWx0KXM8L0RFRkFVTFQ+Ci08L0FSRz4KLSIiIgotICAgICAgICAgICAgICAgIGQgPSBhLmRpY3QuY29weSgpCi0gICAgICAgICAgICAgICAgZFsnb2JqZWN0J10gPSBvLm5hbWUKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYmxvY2sgJSBkKQotCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpICsgJ1xuJwotCi1jbGFzcyBTaW5nbGVMaW5lKEdEb2MpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fb2JqZWN0cyA9IFtdCi0KLSAgICBkZWYgbG9hZF9kYXRhKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiIKLSAgICAgICAgTG9hZCB0aGUgLmludGVyZmFjZXMvLnByZXJlcXVpc2l0ZXMgbGluZXMsIG1lcmdlIGR1cGxpY2F0ZXMKLSAgICAgICAgIiIiCi0gICAgICAgICMgc3BsaXQgZGF0YSBvbiAnXG4nCi0gICAgICAgIGxpbmVzID0gZGF0YS5zcGxpdGxpbmVzKCk7Ci0gICAgICAgICMgbWVyZ2UgdGhlbSBpbnRvIHNlbGYuX29iamVjdHMKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBsaW5lIG5vdCBpbiBzZWxmLl9vYmplY3RzOgotICAgICAgICAgICAgICAgIHNlbGYuX29iamVjdHMuYXBwZW5kKGxpbmUpCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gc29ydGVkKHNlbGYuX29iamVjdHMpCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpICsgJ1xuJwotCi1kZWYgbWFpbihhcmd2KToKLSAgICBtb2R1bGVuYW1lID0gTm9uZQotICAgIHRyeToKLSAgICAgICAgbW9kdWxlbmFtZSA9IGFyZ3ZbMV0KLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnUGxlYXNlIHByb3ZpZGUgYSBkb2N1bWVudGF0aW9uIG1vZHVsZSBuYW1lXG4nKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgc2lnbmFscyA9IFNpZ25hbHMoKQotICAgIHNpZ25hbHMubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLnNpZ25hbHMnKQotICAgIHNpZ25hbHMubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLnNpZ25hbHMubmV3JykKLSAgICBzaWduYWxzLnNhdmVfZmlsZShtb2R1bGVuYW1lICsgJy5zaWduYWxzJywgYmFja3VwPVRydWUpCi0gICAgb3MudW5saW5rKG1vZHVsZW5hbWUgKyAnLnNpZ25hbHMubmV3JykKLQotICAgIGFyZ3MgPSBBcmdzKCkKLSAgICBhcmdzLmxvYWRfZmlsZShtb2R1bGVuYW1lICsgJy5hcmdzJykKLSAgICBhcmdzLmxvYWRfZmlsZShtb2R1bGVuYW1lICsgJy5hcmdzLm5ldycpCi0gICAgYXJncy5zYXZlX2ZpbGUobW9kdWxlbmFtZSArICcuYXJncycsIGJhY2t1cD1UcnVlKQotICAgIG9zLnVubGluayhtb2R1bGVuYW1lICsgJy5hcmdzLm5ldycpCi0KLSAgICBpZmFjZXMgPSBTaW5nbGVMaW5lKCkKLSAgICBpZmFjZXMubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLmludGVyZmFjZXMnKQotICAgIGlmYWNlcy5sb2FkX2ZpbGUobW9kdWxlbmFtZSArICcuaW50ZXJmYWNlcy5uZXcnKQotICAgIGlmYWNlcy5zYXZlX2ZpbGUobW9kdWxlbmFtZSArICcuaW50ZXJmYWNlcycsIGJhY2t1cD1UcnVlKQotICAgIG9zLnVubGluayhtb2R1bGVuYW1lICsgJy5pbnRlcmZhY2VzLm5ldycpCi0KLSAgICBwcmVyZXEgPSBTaW5nbGVMaW5lKCkKLSAgICBwcmVyZXEubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLnByZXJlcXVpc2l0ZXMnKQotICAgIHByZXJlcS5sb2FkX2ZpbGUobW9kdWxlbmFtZSArICcucHJlcmVxdWlzaXRlcy5uZXcnKQotICAgIHByZXJlcS5zYXZlX2ZpbGUobW9kdWxlbmFtZSArICcucHJlcmVxdWlzaXRlcycsIGJhY2t1cD1UcnVlKQotICAgIG9zLnVubGluayhtb2R1bGVuYW1lICsgJy5wcmVyZXF1aXNpdGVzLm5ldycpCi0KLW1haW4oc3lzLmFyZ3YpCmRpZmYgLS1naXQgYS9jb21tb24vdXBsb2FkLWRvYy5tYWsgYi9jb21tb24vdXBsb2FkLWRvYy5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYzQ5NDUuLjAwMDAwMDAKLS0tIGEvY29tbW9uL3VwbG9hZC1kb2MubWFrCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotIyB0aGlzIHNuaXBwZXQgaXMgdG8gYmUgaW5jbHVkZWQgYnkgYm90aCBvdXIgZG9jYm9vayBtYW51YWxzCi0jIGFuZCBndGstZG9jIEFQSSByZWZlcmVuY2VzCi0KLSMgaXQgYWRkcyBhbiB1cGxvYWQgdGFyZ2V0IHRvIGVhY2ggb2YgdGhlc2UgZGlyJ3MgTWFrZWZpbGVzCi0KLSMgZWFjaCBNYWtlZmlsZS5hbSBzaG91bGQgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgotIyAtIERPQzogdGhlIGJhc2UgbmFtZSBvZiB0aGUgZG9jdW1lbnRhdGlvbgotIyAgICAgICAgKGZhcSwgbWFudWFsLCBwd2csIGdzdHJlYW1lciwgZ3N0cmVhbWVyLWxpYnMpCi0jIC0gRk9STUFUUzogdGhlIGZvcm1hdHMgaW4gd2hpY2ggRE9DIGlzIG91dHB1dAotIyAgICAgICAgICAgIChodG1sIHBzIHBkZikKLQotIyBpZiB5b3Ugd2FudCB0byB1c2UgaXQsIG1ha2Ugc3VyZSB5b3VyICRIT01FLy5zc2gvY29uZmlnIGZpbGUgY29udGFpbnMgdGhlCi0jIGNvcnJlY3QgVXNlciBlbnRyeSBmb3IgdGhlIEhvc3QgZW50cnkgZm9yIHRoZSBET0NfU0VSVkVSCi0KLSMgdGhlc2UgdmFyaWFibGVzIGRlZmluZSB0aGUgbG9jYXRpb24gb2YgdGhlIG9ubGluZSBkb2NzCi1ET0NfU0VSVkVSID0gZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZwotRE9DX0JBU0UgPSAvc3J2L2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvd3d3L2RhdGEvZG9jCi1ET0NfVVJMID0gJChET0NfU0VSVkVSKTokKERPQ19CQVNFKQotCi11cGxvYWQ6ICQoRk9STUFUUykKLQlAaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKLQkgIGVjaG8gIlByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCi0JICBpZiB0ZXN0IHgkKGJ1aWxkZGlyKSAhPSB4JChzcmNkaXIpOyB0aGVuIFwKLQkgICAgZWNobyAibWFrZSB1cGxvYWQgY2FuIG9ubHkgYmUgdXNlZCBpZiBzcmNkaXIgPT0gYnVpbGRkaXIiOyBcCi0JICAgIGV4aXQgMTsgXAotCSAgZmk7IFwKLQkgICMgZ3RrZG9jLXJlYmFzZSBzb21ldGltZXMgZ2V0cyBjb25mdXNlZCwgc28gcmVzZXQgZXZlcnl0aGluZyB0byBcCi0JICAjIGxvY2FsIGxpbmtzIGJlZm9yZSByZWJhc2luZyB0byBvbmxpbmUgbGlua3MgICAgICAgICAgICAgICAgICAgXAotCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgMj4vZGV2L251bGwgMj4vZGV2L251bGwgOyBcCi0JICByZWJhc2U9YGd0a2RvYy1yZWJhc2UgLS12ZXJib3NlIC0tb25saW5lIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbGAgOyBcCi0JICBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1lICJPbi0qbGluZSI7IFwKLQkgIGZvciByZXEgaW4gZ2xpYiBnb2JqZWN0IGdzdHJlYW1lciBnc3RyZWFtZXItbGlicyBnc3QtcGx1Z2lucy1iYXNlLWxpYnM7IGRvIFwKLQkgICAgaWYgISAoIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWkgLWUgIk9uLSpsaW5lLiovJCRyZXEvIiApOyB0aGVuIFwKLQkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKLQkgICAgICBlY2hvICIgQ291bGQgbm90IGRldGVybWluZSBvbmxpbmUgbG9jYXRpb24gZm9yICQkcmVxIGRvY3MuIENyb3NzLXJlZmVyZW5jaW5nIHdpbGwgYmUgIiA7IFwKLQkgICAgICBlY2hvICIgYnJva2VuLCBzbyBub3QgdXBsb2FkaW5nLiBNYWtlIHN1cmUgdGhlIGxpYnJhcnkncyBndGstZG9jIGRvY3VtZW50YXRpb24gaXMgICAgIiA7IFwKLQkgICAgICBlY2hvICIgaW5zdGFsbGVkIHNvbWV3aGVyZSBpbiAvdXNyL3NoYXJlL2d0ay1kb2MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA7IFwKLQkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKLQkgICAgICBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQkgIGV4cG9ydCBTUkM9IiQkU1JDIGh0bWwiOyBcCi0JZmk7IFwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBzID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wcyI7IGZpOyBcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwZGYgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBkZiI7IGZpOyBcCi0JXAotCSMgdXBsb2FkIHJlbGVhc2VzIHRvIGJvdGggWC5ZLyBhbmQgaGVhZC8gc3ViZGlyZWN0b3JpZXMgXAotCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyLyQoUEFDS0FHRV9WRVJTSU9OX01BSk9SKS4kKFBBQ0tBR0VfVkVSU0lPTl9NSU5PUikvJChET0MpOyBcCi0JZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCi0JcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCi0JXAotCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyL2hlYWQvJChET0MpOyBcCi0JZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCi0JcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCi0JXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICBlY2hvICJVbi1wcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAotCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgOyBcCi0JZmk7IFwKLQllY2hvIERvbmUKZGlmZiAtLWdpdCBhL2NvbW1vbi93aW4zMi5tYWsgYi9jb21tb24vd2luMzIubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDYwNTMyLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi93aW4zMi5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0jIHZhcmlvdXMgdGVzdHMgdG8gbWFrZSBzdXJlIHdlIGRpc3QgdGhlIHdpbjMyIHN0dWZmIChmb3IgTVNWQyBidWlsZHMpIHJpZ2h0Ci0KLSMgdGhlIE1BTklGRVNUIGNvbnRhaW5zIGFsbCB3aW4zMiByZWxhdGVkIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGRpc3RlZAotd2luMzIgPSAkKHNoZWxsIGNhdCAkKHRvcF9zcmNkaXIpL3dpbjMyL01BTklGRVNUKQotCi0jIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKLSMgdGhlc2UgYXJlIGxpYnJhcnkgLmRlZiBmaWxlcyB3aXRoIHRoZSBzeW1ib2xzIHRvIGV4cG9ydAotd2luMzJkZWZzID0gJChzaGVsbCBmaW5kICQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uIC1uYW1lICcqLmRlZicpCi0KLSMgd2lsZGNhcmQgaXMgYXBwYXJlbnRseSBub3QgcG9ydGFibGUgdG8gb3RoZXIgbWFrZXMsIGhlbmNlIHRoZSB1c2Ugb2YgZmluZAotIyB0aGVzZSBhcmUgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGRpc3RlZCB3aXRoIENSTEYgbGluZSBlbmRpbmdzOgotd2luMzJjcmxmID0gJChzaGVsbCBmaW5kICQodG9wX3NyY2Rpcikvd2luMzIgLW5hbWUgJyouZHN3JyAtbyAtbmFtZSAnKi5kc3AnKQotCi13aW4zMi1kZWJ1ZzoKLQlAZWNobzsgXAotCWVjaG8gd2luMzIgICAgID0gJCh3aW4zMik7IFwKLQllY2hvOyBcCi0JZWNobyB3aW4zMmRlZnMgPSAkKHdpbjMyZGVmcyk7IFwKLQllY2hvOyBcCi0JZWNobyB3aW4zMmNybGYgPSAkKHdpbjMyY3JsZik7IFwKLQllY2hvCi0KLXdpbjMyLWNoZWNrLWNybGY6Ci0JQGVjaG8gQ2hlY2tpbmcgd2luMzIgZmlsZXMgZm9yIENSIExGIGxpbmUgZW5kaW5ncyAuLi47IFwKLQlmYWlsPTAgOyBcCi0JZm9yIGVhY2ggaW4gJCh3aW4zMmNybGYpIDsgZG8gXAotCSAgcmVzdWx0PWBwZXJsIC1lICdwcmludCBncmVwKC9cclxuLyw8PiknICIkJGVhY2giIHwgd2MgLWxgOyBcCi0JICBpZiB0ZXN0ICIkJHJlc3VsdCIgPSAwIDsgdGhlbiBcCi0JICAgIGVjaG8gJCRlYWNoIG11c3QgYmUgZml4ZWQgdG8gaGF2ZSBDUkxGIGxpbmUgZW5kaW5ncyA7IFwKLQkgICAgZmFpbD0xOyBcCi0JICBmaSA7IFwKLQlkb25lIDsgXAotCWV4aXQgJCRmYWlsCi0KLSMgbWFrZSBzdXJlIGFsbCBzeW1ib2xzIHdlIGV4cG9ydCBvbiBsaW51eCBhcmUgZGVmaW5lZCBpbiB0aGUgd2luMzIgLmRlZiB0b28KLSMgKGRvbid0IGNhcmUgYWJvdXQgb3RoZXIgdW5peGVzIGZvciBub3csIGl0J3MgZW5vdWdoIGlmIGl0IHdvcmtzIG9uIG9uZSBvZgotIyB0aGUgbGludXggYnVpbGQgYm90czsgd2UgYXNzdW1lIC5zbyApCi1jaGVjay1leHBvcnRzOgotCUBmYWlsPTAgOyBcCi0JZm9yIGwgaW4gJCh3aW4zMmRlZnMpOyBkbyBcCi0JICBsaWJiYXNlPWBiYXNlbmFtZSAiJCRsIiAiLmRlZiJgOyBcCi0JICBsaWJzbz1gZmluZCAiJCh0b3BfYnVpbGRkaXIpIiAtbmFtZSAiJCRsaWJiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALnNvIiB8IGdyZXAgLXYgL19idWlsZC8gfCBoZWFkIC1uMWA7IFwKLQkgIGxpYmRlZj0iJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vJCRsaWJiYXNlLmRlZiI7IFwKLQkgIGlmIHRlc3QgIngkJGxpYnNvIiAhPSAieCI7IHRoZW4gXAotCSAgICBlY2hvIENoZWNraW5nIHN5bWJvbHMgaW4gJCRsaWJzbzsgXAotCSAgICBpZiAhICgkKHRvcF9zcmNkaXIpL2NvbW1vbi9jaGVjay1leHBvcnRzICQkbGliZGVmICQkbGlic28pIDsgdGhlbiBcCi0JICAgICAgZWNobyAiJCRsaWJkZWYiOyBcCi0JICAgICAgaWYgdGVzdCAiJCRsaWJiYXNlIiAhPSAibGliZ3N0Z2wiOyB0aGVuIFwKLQkgICAgICAgIGZhaWw9MTsgXAotCSAgICAgIGZpOyBcCi0JICAgIGZpOyBcCi0JICBmaTsgXAotCWRvbmUgOyBcCi0JaWYgdGVzdCAkJGZhaWwgIT0gMDsgdGhlbiBcCi0JICBlY2hvICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSc7IFwKLQkgIGVjaG8gJ1J1biB0aGlzIHRvIHVwZGF0ZSB0aGUgLmRlZiBmaWxlczonOyBcCi0JICBlY2hvICdtYWtlIHVwZGF0ZS1leHBvcnRzJzsgXAotCSAgZWNobyAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nOyBcCi0JZmk7IFwKLQlleGl0ICQkZmFpbAotCi11cGRhdGUtZXhwb3J0czoKLQltYWtlIGNoZWNrLWV4cG9ydHMgMj4mMSB8IHBhdGNoIC1wMQotCWlmIHRlc3QgLWYgIiQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uL2xpYmdzdGdsLmRlZiI7IHRoZW4gXAotCSAgZ2l0IGNoZWNrb3V0ICIkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi9saWJnc3RnbC5kZWYiOyAgXAotCWZpCi0JZ2l0IGFkZCAkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi9saWJnc3QqLmRlZgotCWdpdCBkaWZmIC0tY2FjaGVkIC0tICQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uLwotCWVjaG8gJ15eXi0tLSB1cGRhdGVkIGFuZCBzdGFnZWQgY2hhbmdlcyBhYm92ZScKLQotIyBjb21wbGFpbiBhYm91dCBub25wb3J0YWJsZSBwcmludGYgZm9ybWF0IHN0cmluZ3MgKCVsbGQsICVsbHUsICV6dSBldGMuKQotY2hlY2stbm9ucG9ydGFibGUtcHJpbnQtZm9ybWF0OgotCUBmYWlsPTAgOyBcCi0JbG9jPWBmaW5kICIkKHRvcF9zcmNkaXIpIiAtbmFtZSAnKi5jJyB8IHhhcmdzIGdyZXAgLW4gLWUgJyVbMC05XSpsbFt1ZHhdJyAtZSAnJVswLTldKnpbdWR4XSdgOyBcCi0JaWYgdGVzdCAieCQkbG9jIiAhPSAieCI7IHRoZW4gXAotCSAgZWNobyAiUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIHByaW50IGZvcm1hdCBzdHJpbmdzOiIgOyBcCi0JICBmaW5kICIkKHRvcF9zcmNkaXIpIiAtbmFtZSAnKi5jJyB8IHhhcmdzIGdyZXAgLW4gLWUgJyVbMC05XSpsbFt1ZHhdJyAtZSAnJVswLTldKnpbdWR4XSc7IFwKLQkgIGZhaWw9MTsgXAotCWZpOyBcCi0JZXhpdCAkJGZhaWwKLQotZGlzdC1ob29rOiBjaGVjay1leHBvcnRzIHdpbjMyLWNoZWNrLWNybGYKLQotCmRpZmYgLS1naXQgYS9jb21waWxlIGIvY29tcGlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTg1YjcyMy4uMDAwMDAwMAotLS0gYS9jb21waWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kICctYyAtbycuCi0KLXNjcmlwdHZlcnNpb249MjAxMi0xMC0xNC4xMTsgIyBVVEMKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAotIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCi0jIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgotCi1ubD0nCi0nCi0KLSMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCi0jIHRoZXJlIHRvIHByZXZlbnQgdG9vbHMgZnJvbSBjb21wbGFpbmluZyBhYm91dCB3aGl0ZXNwYWNlIHVzYWdlLgotSUZTPSIgIiIJJG5sIgotCi1maWxlX2NvbnY9Ci0KLSMgZnVuY19maWxlX2NvbnYgYnVpbGRfZmlsZSBsYXp5Ci0jIENvbnZlcnQgYSAkYnVpbGQgZmlsZSB0byAkaG9zdCBmb3JtIGFuZCBzdG9yZSBpdCBpbiAkZmlsZQotIyBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBXaW5kb3dzIGhvc3RzLiBJZiB0aGUgZGV0ZXJtaW5lZCBjb252ZXJzaW9uCi0jIHR5cGUgaXMgbGlzdGVkIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHdpbGwKLSMgdGFrZSBwbGFjZS4KLWZ1bmNfZmlsZV9jb252ICgpCi17Ci0gIGZpbGU9JDEKLSAgY2FzZSAkZmlsZSBpbgotICAgIC8gfCAvWyEvXSopICMgYWJzb2x1dGUgZmlsZSwgYW5kIG5vdCBhIFVOQyBmaWxlCi0gICAgICBpZiB0ZXN0IC16ICIkZmlsZV9jb252IjsgdGhlbgotCSMgbGF6aWx5IGRldGVybWluZSBob3cgdG8gY29udmVydCBhYnMgZmlsZXMKLQljYXNlIGB1bmFtZSAtc2AgaW4KLQkgIE1JTkdXKikKLQkgICAgZmlsZV9jb252PW1pbmd3Ci0JICAgIDs7Ci0JICBDWUdXSU4qKQotCSAgICBmaWxlX2NvbnY9Y3lnd2luCi0JICAgIDs7Ci0JICAqKQotCSAgICBmaWxlX2NvbnY9d2luZQotCSAgICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBjYXNlICRmaWxlX2NvbnYvLCQyLCBpbgotCSosJGZpbGVfY29udiwqKQotCSAgOzsKLQltaW5ndy8qKQotCSAgZmlsZT1gY21kIC8vQyBlY2hvICIkZmlsZSAiIHwgc2VkIC1lICdzLyJcKC4qXCkgIiAqJC9cMS8nYAotCSAgOzsKLQljeWd3aW4vKikKLQkgIGZpbGU9YGN5Z3BhdGggLW0gIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCi0JICA7OwotCXdpbmUvKikKLQkgIGZpbGU9YHdpbmVwYXRoIC13ICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAotCSAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gIGVzYWMKLX0KLQotIyBmdW5jX2NsX2Rhc2hMIGxpbmtkaXIKLSMgTWFrZSBjbCBsb29rIGZvciBsaWJyYXJpZXMgaW4gTElOS0RJUgotZnVuY19jbF9kYXNoTCAoKQotewotICBmdW5jX2ZpbGVfY29udiAiJDEiCi0gIGlmIHRlc3QgLXogIiRsaWJfcGF0aCI7IHRoZW4KLSAgICBsaWJfcGF0aD0kZmlsZQotICBlbHNlCi0gICAgbGliX3BhdGg9IiRsaWJfcGF0aDskZmlsZSIKLSAgZmkKLSAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAtTElCUEFUSDokZmlsZSIKLX0KLQotIyBmdW5jX2NsX2Rhc2hsIGxpYnJhcnkKLSMgRG8gYSBsaWJyYXJ5IHNlYXJjaC1wYXRoIGxvb2t1cCBmb3IgY2wKLWZ1bmNfY2xfZGFzaGwgKCkKLXsKLSAgbGliPSQxCi0gIGZvdW5kPW5vCi0gIHNhdmVfSUZTPSRJRlMKLSAgSUZTPSc7JwotICBmb3IgZGlyIGluICRsaWJfcGF0aCAkTElCCi0gIGRvCi0gICAgSUZTPSRzYXZlX0lGUwotICAgIGlmICRzaGFyZWQgJiYgdGVzdCAtZiAiJGRpci8kbGliLmRsbC5saWIiOyB0aGVuCi0gICAgICBmb3VuZD15ZXMKLSAgICAgIGxpYj0kZGlyLyRsaWIuZGxsLmxpYgotICAgICAgYnJlYWsKLSAgICBmaQotICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYi5saWIiOyB0aGVuCi0gICAgICBmb3VuZD15ZXMKLSAgICAgIGxpYj0kZGlyLyRsaWIubGliCi0gICAgICBicmVhawotICAgIGZpCi0gICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbGliLmEiOyB0aGVuCi0gICAgICBmb3VuZD15ZXMKLSAgICAgIGxpYj0kZGlyL2xpYiRsaWIuYQotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0kc2F2ZV9JRlMKLQotICBpZiB0ZXN0ICIkZm91bmQiICE9IHllczsgdGhlbgotICAgIGxpYj0kbGliLmxpYgotICBmaQotfQotCi0jIGZ1bmNfY2xfd3JhcHBlciBjbCBhcmcuLi4KLSMgQWRqdXN0IGNvbXBpbGUgY29tbWFuZCB0byBzdWl0IGNsCi1mdW5jX2NsX3dyYXBwZXIgKCkKLXsKLSAgIyBBc3N1bWUgYSBjYXBhYmxlIHNoZWxsCi0gIGxpYl9wYXRoPQotICBzaGFyZWQ9OgotICBsaW5rZXJfb3B0cz0KLSAgZm9yIGFyZwotICBkbwotICAgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCi0gICAgICBlYXQ9Ci0gICAgZWxzZQotICAgICAgY2FzZSAkMSBpbgotCS1vKQotCSAgIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzICdjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCi0JICBlYXQ9MQotCSAgY2FzZSAkMiBpbgotCSAgICAqLm8gfCAqLltvT11bYkJdW2pKXSkKLQkgICAgICBmdW5jX2ZpbGVfY29udiAiJDIiCi0JICAgICAgc2V0IHggIiRAIiAtRm8iJGZpbGUiCi0JICAgICAgc2hpZnQKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIGZ1bmNfZmlsZV9jb252ICIkMiIKLQkgICAgICBzZXQgeCAiJEAiIC1GZSIkZmlsZSIKLQkgICAgICBzaGlmdAotCSAgICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCS1JKQotCSAgZWF0PTEKLQkgIGZ1bmNfZmlsZV9jb252ICIkMiIgbWluZ3cKLQkgIHNldCB4ICIkQCIgLUkiJGZpbGUiCi0JICBzaGlmdAotCSAgOzsKLQktSSopCi0JICBmdW5jX2ZpbGVfY29udiAiJHsxIy1JfSIgbWluZ3cKLQkgIHNldCB4ICIkQCIgLUkiJGZpbGUiCi0JICBzaGlmdAotCSAgOzsKLQktbCkKLQkgIGVhdD0xCi0JICBmdW5jX2NsX2Rhc2hsICIkMiIKLQkgIHNldCB4ICIkQCIgIiRsaWIiCi0JICBzaGlmdAotCSAgOzsKLQktbCopCi0JICBmdW5jX2NsX2Rhc2hsICIkezEjLWx9IgotCSAgc2V0IHggIiRAIiAiJGxpYiIKLQkgIHNoaWZ0Ci0JICA7OwotCS1MKQotCSAgZWF0PTEKLQkgIGZ1bmNfY2xfZGFzaEwgIiQyIgotCSAgOzsKLQktTCopCi0JICBmdW5jX2NsX2Rhc2hMICIkezEjLUx9IgotCSAgOzsKLQktc3RhdGljKQotCSAgc2hhcmVkPWZhbHNlCi0JICA7OwotCS1XbCwqKQotCSAgYXJnPSR7MSMtV2wsfQotCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCi0JICBmb3IgZmxhZyBpbiAkYXJnOyBkbwotCSAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkZmxhZyIKLQkgIGRvbmUKLQkgIElGUz0iJHNhdmVfaWZzIgotCSAgOzsKLQktWGxpbmtlcikKLQkgIGVhdD0xCi0JICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzICQyIgotCSAgOzsKLQktKikKLQkgIHNldCB4ICIkQCIgIiQxIgotCSAgc2hpZnQKLQkgIDs7Ci0JKi5jYyB8ICouQ0MgfCAqLmN4eCB8ICouQ1hYIHwgKi5bY0NdKyspCi0JICBmdW5jX2ZpbGVfY29udiAiJDEiCi0JICBzZXQgeCAiJEAiIC1UcCIkZmlsZSIKLQkgIHNoaWZ0Ci0JICA7OwotCSouYyB8ICouY3BwIHwgKi5DUFAgfCAqLmxpYiB8ICouTElCIHwgKi5MaWIgfCAqLk9CSiB8ICoub2JqIHwgKi5bb09dKQotCSAgZnVuY19maWxlX2NvbnYgIiQxIiBtaW5ndwotCSAgc2V0IHggIiRAIiAiJGZpbGUiCi0JICBzaGlmdAotCSAgOzsKLQkqKQotCSAgc2V0IHggIiRAIiAiJDEiCi0JICBzaGlmdAotCSAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIHNoaWZ0Ci0gIGRvbmUKLSAgaWYgdGVzdCAtbiAiJGxpbmtlcl9vcHRzIjsgdGhlbgotICAgIGxpbmtlcl9vcHRzPSItbGluayRsaW5rZXJfb3B0cyIKLSAgZmkKLSAgZXhlYyAiJEAiICRsaW5rZXJfb3B0cwotICBleGl0IDEKLX0KLQotZWF0PQotCi1jYXNlICQxIGluCi0gICcnKQotICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKLSAgICAgZXhpdCAxOwotICAgICA7OwotICAtaCB8IC0taCopCi0gICAgY2F0IDw8XEVPRgotVXNhZ2U6IGNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KLQotV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kICctYyAtbycuCi1SZW1vdmUgJy1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKLWFyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgotCi1JZiB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHdob2xlIHBhY2thZ2UgdGhpcyBpcyBub3QgdGhlCi1yaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSAnSU5TVEFMTCcuCi0KLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCi1FT0YKLSAgICBleGl0ICQ/Ci0gICAgOzsKLSAgLXYgfCAtLXYqKQotICAgIGVjaG8gImNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCi0gICAgZXhpdCAkPwotICAgIDs7Ci0gIGNsIHwgKlsvXFxdY2wgfCBjbC5leGUgfCAqWy9cXF1jbC5leGUgKQotICAgIGZ1bmNfY2xfd3JhcHBlciAiJEAiICAgICAgIyBEb2Vzbid0IHJldHVybi4uLgotICAgIDs7Ci1lc2FjCi0KLW9maWxlPQotY2ZpbGU9Ci0KLWZvciBhcmcKLWRvCi0gIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCi0gICAgZWF0PQotICBlbHNlCi0gICAgY2FzZSAkMSBpbgotICAgICAgLW8pCi0JIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzICdjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCi0JIyBTbyB3ZSBzdHJpcCAnLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCi0JZWF0PTEKLQljYXNlICQyIGluCi0JICAqLm8gfCAqLm9iaikKLQkgICAgb2ZpbGU9JDIKLQkgICAgOzsKLQkgICopCi0JICAgIHNldCB4ICIkQCIgLW8gIiQyIgotCSAgICBzaGlmdAotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgKi5jKQotCWNmaWxlPSQxCi0Jc2V0IHggIiRAIiAiJDEiCi0Jc2hpZnQKLQk7OwotICAgICAgKikKLQlzZXQgeCAiJEAiICIkMSIKLQlzaGlmdAotCTs7Ci0gICAgZXNhYwotICBmaQotICBzaGlmdAotZG9uZQotCi1pZiB0ZXN0IC16ICIkb2ZpbGUiIHx8IHRlc3QgLXogIiRjZmlsZSI7IHRoZW4KLSAgIyBJZiBubyAnLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQotICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCi0gICMgbm9ybWFsIGNvbXBpbGF0aW9uIHRoYXQgdGhlIGxvc2luZyBjb21waWxlciBjYW4gaGFuZGxlLiAgSWYgbm8KLSAgIyAnLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbwotICAjIG9rLgotICBleGVjICIkQCIKLWZpCi0KLSMgTmFtZSBvZiBmaWxlIHdlIGV4cGVjdCBjb21waWxlciB0byBjcmVhdGUuCi1jb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgJ3N8Xi4qW1xcL118fDsgc3xeW2EtekEtWl06fHw7IHMvXC5jJC8uby8nYAotCi0jIENyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkuCi0jIE5vdGU6IHVzZSAnWy9cXDouLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKLSMgdGhhdCB3ZSBhcmUgdXNpbmcgZm9yIHRoZSAubyBmaWxlLiAgQWxzbywgYmFzZSB0aGUgbmFtZSBvbiB0aGUgZXhwZWN0ZWQKLSMgb2JqZWN0IGZpbGUgbmFtZSwgc2luY2UgdGhhdCBpcyB3aGF0IG1hdHRlcnMgd2l0aCBhIHBhcmFsbGVsIGJ1aWxkLgotbG9ja2Rpcj1gZWNobyAiJGNvZmlsZSIgfCBzZWQgLWUgJ3N8Wy9cXDouLV18X3xnJ2AuZAotd2hpbGUgdHJ1ZTsgZG8KLSAgaWYgbWtkaXIgIiRsb2NrZGlyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBicmVhawotICBmaQotICBzbGVlcCAxCi1kb25lCi0jIEZJWE1FOiByYWNlIGNvbmRpdGlvbiBoZXJlIGlmIHVzZXIga2lsbHMgYmV0d2VlbiBta2RpciBhbmQgdHJhcC4KLXRyYXAgInJtZGlyICckbG9ja2Rpcic7IGV4aXQgMSIgMSAyIDE1Ci0KLSMgUnVuIHRoZSBjb21waWxlLgotIiRAIgotcmV0PSQ/Ci0KLWlmIHRlc3QgLWYgIiRjb2ZpbGUiOyB0aGVuCi0gIHRlc3QgIiRjb2ZpbGUiID0gIiRvZmlsZSIgfHwgbXYgIiRjb2ZpbGUiICIkb2ZpbGUiCi1lbGlmIHRlc3QgLWYgIiR7Y29maWxlfWJqIjsgdGhlbgotICB0ZXN0ICIke2NvZmlsZX1iaiIgPSAiJG9maWxlIiB8fCBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCi1maQotCi1ybWRpciAiJGxvY2tkaXIiCi1leGl0ICRyZXQKLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIG1vZGU6IHNoZWxsLXNjcmlwdAotIyBzaC1pbmRlbnRhdGlvbjogMgotIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKLSMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCi0jIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgotIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCi0jIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZy5ndWVzcyBiL2NvbmZpZy5ndWVzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmU5YWQ3Zi4uMDAwMDAwMAotLS0gYS9jb25maWcuZ3Vlc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYyICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KLSMgICBDb3B5cmlnaHQgMTk5Mi0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi10aW1lc3RhbXA9JzIwMTYtMTAtMDInCi0KLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAotIyBwcm9ncmFtLiAgVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNwotIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCi0jCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lcjsgbWFpbnRhaW5lZCBzaW5jZSAyMDAwIGJ5IEJlbiBFbGxpc3Rvbi4KLSMKLSMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206Ci0jIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3MKLSMKLSMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uCi0KLQotbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCi0KLXVzYWdlPSJcCi1Vc2FnZTogJDAgW09QVElPTl0KLQotT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgotCi1PcGVyYXRpb24gbW9kZXM6Ci0gIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0Ci0gIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0Ci0KLVJlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCi0KLXZlcnNpb249IlwKLUdOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCi0KLU9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KLUNvcHlyaWdodCAxOTkyLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLVRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCi13YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCi0KLWhlbHA9IgotVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgotCi0jIFBhcnNlIGNvbW1hbmQgbGluZQotd2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCi0gIGNhc2UgJDEgaW4KLSAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQotICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OwotICAgIC0tdmVyc2lvbiB8IC12ICkKLSAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7Ci0gICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKLSAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7Ci0gICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCi0gICAgICAgc2hpZnQ7IGJyZWFrIDs7Ci0gICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgotICAgICAgIGJyZWFrIDs7Ci0gICAgLSogKQotICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCi0gICAgICAgZXhpdCAxIDs7Ci0gICAgKiApCi0gICAgICAgYnJlYWsgOzsKLSAgZXNhYwotZG9uZQotCi1pZiB0ZXN0ICQjICE9IDA7IHRoZW4KLSAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCi0gIGV4aXQgMQotZmkKLQotdHJhcCAnZXhpdCAxJyAxIDIgMTUKLQotIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQotIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcwotIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCi0jIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCi0KLSMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKLSMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KLQotIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgotCi1zZXRfY2NfZm9yX2J1aWxkPScKLXRyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwotdHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKLTogJHtUTVBESVI9L3RtcH0gOwotIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKLSB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAotIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAotIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKLWR1bW15PSR0bXAvZHVtbXkgOwotdG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7Ci1jYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCi0gLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7Ci0JZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbwotCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCi0JICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOwotCSAgZmkgOwotCWRvbmUgOwotCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCi0JICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOwotCWZpCi0JOzsKLSAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OwotICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKLWVzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JwotCi0jIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgotIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCi1pZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgotCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAotZmkKLQotVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCi1VTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KLVVOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCi1VTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KLQotY2FzZSAiJHtVTkFNRV9TWVNURU19IiBpbgotTGludXh8R05VfEdOVS8qKQotCSMgSWYgdGhlIHN5c3RlbSBsYWNrcyBhIGNvbXBpbGVyLCB0aGVuIGp1c3QgcGljayBnbGliYy4KLQkjIFdlIGNvdWxkIHByb2JhYmx5IHRyeSBoYXJkZXIuCi0JTElCQz1nbnUKLQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQljYXQgPDwtRU9GID4gJGR1bW15LmMKLQkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLQkjaWYgZGVmaW5lZChfX1VDTElCQ19fKQotCUxJQkM9dWNsaWJjCi0JI2VsaWYgZGVmaW5lZChfX2RpZXRsaWJjX18pCi0JTElCQz1kaWV0bGliYwotCSNlbHNlCi0JTElCQz1nbnUKLQkjZW5kaWYKLQlFT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnIHwgc2VkICdzLCAsLGcnYAotCTs7Ci1lc2FjCi0KLSMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KLQotY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgotICAgICo6TmV0QlNEOio6KikKLQkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgotCSMgbW9yZSBvZiB0aGUgdHVwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAotCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5Ci0JIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCi0JIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAotCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQotCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgotCSMKLQkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKLQkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KLQlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCi0JVU5BTUVfTUFDSElORV9BUkNIPWAodW5hbWUgLXAgMj4vZGV2L251bGwgfHwgXAotCSAgICAvc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKLQkgICAgL3Vzci9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAotCSAgICBlY2hvIHVua25vd24pYAotCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KLQkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OwotCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7Ci0JICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7Ci0JICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKLQkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OwotCSAgICBlYXJtdiopCi0JCWFyY2g9YGVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9IHwgc2VkIC1lICdzLF5lXChhcm12WzAtOV1cKS4qJCxcMSwnYAotCQllbmRpYW49YGVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9IHwgc2VkIC1uZSAncyxeLipcKGViXCkkLFwxLHAnYAotCQltYWNoaW5lPSR7YXJjaH0ke2VuZGlhbn0tdW5rbm93bgotCQk7OwotCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7Ci0JZXNhYwotCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAotCSMgdG8gRUxGIHJlY2VudGx5IChvciB3aWxsIGluIHRoZSBmdXR1cmUpIGFuZCBBQkkuCi0JY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgotCSAgICBlYXJtKikKLQkJb3M9bmV0YnNkZWxmCi0JCTs7Ci0JICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQotCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCi0JCQl8IGdyZXAgLXEgX19FTEZfXwotCQl0aGVuCi0JCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCi0JCSAgICAjIFJldHVybiBuZXRic2QgZm9yIGVpdGhlci4gIEZJWD8KLQkJICAgIG9zPW5ldGJzZAotCQllbHNlCi0JCSAgICBvcz1uZXRic2RlbGYKLQkJZmkKLQkJOzsKLQkgICAgKikKLQkJb3M9bmV0YnNkCi0JCTs7Ci0JZXNhYwotCSMgRGV0ZXJtaW5lIEFCSSB0YWdzLgotCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KLQkgICAgZWFybSopCi0JCWV4cHI9J3MvXmVhcm12WzAtOV0vLWVhYmkvO3MvZWIkLy8nCi0JCWFiaT1gZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0gfCBzZWQgLWUgIiRleHByImAKLQkJOzsKLQllc2FjCi0JIyBUaGUgT1MgcmVsZWFzZQotCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCi0JIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAotCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKLQkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KLQljYXNlICIke1VOQU1FX1ZFUlNJT059IiBpbgotCSAgICBEZWJpYW4qKQotCQlyZWxlYXNlPSctZ251JwotCQk7OwotCSAgICAqKQotCQlyZWxlYXNlPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvWy1fXS4qLy8nIHwgY3V0IC1kLiAtZjEsMmAKLQkJOzsKLQllc2FjCi0JIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06Ci0JIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06Ci0JIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgotCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9JHthYml9IgotCWV4aXQgOzsKLSAgICAqOkJpdHJpZzoqOiopCi0JVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL0JpdHJpZy4vLydgCi0JZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1iaXRyaWcke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6T3BlbkJTRDoqOiopCi0JVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAotCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpMaWJlcnR5QlNEOio6KikKLQlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvXi4qQlNEXC4vLydgCi0JZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1saWJlcnR5YnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOmVra29CU0Q6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6U29saWRCU0Q6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBtYWNwcGM6TWlyQlNEOio6KikKLQllY2hvIHBvd2VycGMtdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6TWlyQlNEOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6U29ydGl4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb3J0aXgKLQlleGl0IDs7Ci0gICAgYWxwaGE6T1NGMToqOiopCi0JY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgotCSo0LjApCi0JCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCi0JCTs7Ci0JKjUuKikKLQkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKLQkJOzsKLQllc2FjCi0JIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KLQkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAotCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKLQkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KLQlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCi0JY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgotCSAgICAiRVY0ICgyMTA2NCkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhIDs7Ci0JICAgICJFVjQuNSAoMjEwNjQpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYSA7OwotCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYSA7OwotCSAgICAiRVY1ICgyMTE2NCkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7Ci0JICAgICJFVjUuNiAoMjExNjRBKSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7Ci0JICAgICJFVjUuNiAoMjExNjRQQykiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgICAgIkVWNS43ICgyMTE2NFBDKSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NyA7OwotCSAgICAiRVY2ICgyMTI2NCkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7Ci0JICAgICJFVjYuNyAoMjEyNjRBKSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7Ci0JICAgICJFVjYuOENCICgyMTI2NEMpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKLQkgICAgIkVWNi44QUwgKDIxMjY0QikiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OwotCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7Ci0JICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFldjY5IDs7Ci0JICAgICJFVjcgKDIxMzY0KSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFldjcgOzsKLQkgICAgIkVWNy45ICgyMTM2NEEpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2NzkgOzsKLQllc2FjCi0JIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KLQkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KLQkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgotCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgotCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpgCi0JIyBSZXNldCBFWElUIHRyYXAgYmVmb3JlIGV4aXRpbmcgdG8gYXZvaWQgc3B1cmlvdXMgbm9uLXplcm8gZXhpdCBjb2RlLgotCWV4aXRjb2RlPSQ/Ci0JdHJhcCAnJyAwCi0JZXhpdCAkZXhpdGNvZGUgOzsKLSAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQotCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KLQkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKLQkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KLQllY2hvIGFscGhhLXBjLWludGVyaXgKLQlleGl0IDs7Ci0gICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQotCWVjaG8gYWxwaGEtZGVjLXdpbm50My41Ci0JZXhpdCA7OwotICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQotCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0Ci0JZXhpdCA7OwotICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcwotCWV4aXQgOzsKLSAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKLQlleGl0IDs7Ci0gICAgKjpPUy8zOTA6KjoqKQotCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KLQlleGl0IDs7Ci0gICAgKjp6L1ZNOio6KikKLQllY2hvIHMzOTAtaWJtLXp2bW9lCi0JZXhpdCA7OwotICAgICo6T1M0MDA6KjoqKQotCWVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKLQlleGl0IDs7Ci0gICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQotCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgYXJtKjpyaXNjb3M6KjoqfGFybSo6UklTQ09TOio6KikKLQllY2hvIGFybS11bmtub3duLXJpc2NvcwotCWV4aXQgOzsKLSAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQotCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKLQlleGl0IDs7Ci0gICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCi0JIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KLQlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCi0JCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCi0JZWxzZQotCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKLQlmaQotCWV4aXQgOzsKLSAgICBOSUxFKjoqOio6ZGNvc3gpCi0JZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAotCWV4aXQgOzsKLSAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKLQllY2hvIHNwYXJjLWljbC1ueDYKLQlleGl0IDs7Ci0gICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQotCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgotCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7Ci0JZXNhYyA7OwotICAgIHMzOTB4OlN1bk9TOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgIHN1bjRIOlN1bk9TOjUuKjoqKQotCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCi0JZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKLQlleGl0IDs7Ci0gICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCi0JZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JU1VOX0FSQ0g9aTM4NgotCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgotCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KLQkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCi0JaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gbm9fY29tcGlsZXJfZm91bmQgXTsgdGhlbgotCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fYW1kNjQnOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCi0JCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCi0JICAgIHRoZW4KLQkJU1VOX0FSQ0g9eDg2XzY0Ci0JICAgIGZpCi0JZmkKLQllY2hvICR7U1VOX0FSQ0h9LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgIHN1bjQqOlN1bk9TOjYqOiopCi0JIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKLQkjIFN1bk9TNi4gIEhhcmQgdG8gZ3Vlc3MgZXhhY3RseSB3aGF0IFN1bk9TNiB3aWxsIGJlIGxpa2UsIGJ1dAotCSMgaXQncyBsaWtlbHkgdG8gYmUgbW9yZSBsaWtlIFNvbGFyaXMgdGhhbiBTdW5PUzQuCi0JZWNobyBzcGFyYy1zdW4tc29sYXJpczNgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKLQlleGl0IDs7Ci0gICAgc3VuNCo6U3VuT1M6KjoqKQotCWNhc2UgImAvdXNyL2Jpbi9hcmNoIC1rYCIgaW4KLQkgICAgU2VyaWVzKnxTNCopCi0JCVVOQU1FX1JFTEVBU0U9YHVuYW1lIC12YAotCQk7OwotCWVzYWMKLQkjIEphcGFuZXNlIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIGA0LjEuMy1KTCcuCi0JZWNobyBzcGFyYy1zdW4tc3Vub3NgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vJ2AKLQlleGl0IDs7Ci0gICAgc3VuMyo6U3VuT1M6KjoqKQotCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIHN1bio6Kjo0LjJCU0Q6KikKLQlVTkFNRV9SRUxFQVNFPWAoc2VkIDFxIC9ldGMvbW90ZCB8IGF3ayAne3ByaW50IHN1YnN0cigkNSwxLDMpfScpIDI+L2Rldi9udWxsYAotCXRlc3QgIngke1VOQU1FX1JFTEVBU0V9IiA9IHggJiYgVU5BTUVfUkVMRUFTRT0zCi0JY2FzZSAiYC9iaW4vYXJjaGAiIGluCi0JICAgIHN1bjMpCi0JCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9Ci0JCTs7Ci0JICAgIHN1bjQpCi0JCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCQk7OwotCWVzYWMKLQlleGl0IDs7Ci0gICAgYXVzaHA6U3VuT1M6KjoqKQotCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQotICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAotICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKLSAgICAjID4gbTY4MDAwKS4gIFRoZSBzeXN0ZW0gbmFtZSByYW5nZXMgZnJvbSAiTWlOVCIgb3ZlciAiRnJlZU1pTlQiCi0gICAgIyB0byB0aGUgbG93ZXJjYXNlIHZlcnNpb24gIm1pbnQiIChvciAiZnJlZW1pbnQiKS4gIEZpbmFsbHkKLSAgICAjIHRoZSBzeXN0ZW0gbmFtZSAiVE9TIiBkZW5vdGVzIGEgc3lzdGVtIHdoaWNoIGlzIGFjdHVhbGx5IG5vdAotICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAotICAgICMgYmUgbm8gcHJvYmxlbS4KLSAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKLQllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQotCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKLQllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQotCWVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBoYWRlcyo6Kk1pTlQ6KjoqIHwgaGFkZXMqOiptaW50Oio6KiB8ICpoYWRlcyo6KlRPUzoqOiopCi0JZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQotCWVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIG02OGs6bWFjaHRlbjoqOiopCi0JZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIHBvd2VycGM6bWFjaHRlbjoqOiopCi0JZWNobyBwb3dlcnBjLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFJJU0MqOk1hY2g6KjoqKQotCWVjaG8gbWlwcy1kZWMtbWFjaF9ic2Q0LjMKLQlleGl0IDs7Ci0gICAgUklTQyo6VUxUUklYOio6KikKLQllY2hvIG1pcHMtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgVkFYKjpVTFRSSVgqOio6KikKLQllY2hvIHZheC1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAyMDIwOkNMSVg6KjoqIHwgMjQzMDpDTElYOio6KikKLQllY2hvIGNsaXBwZXItaW50ZXJncmFwaC1jbGl4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBtaXBzOio6KjpVTUlQUyB8IG1pcHM6KjoqOlJJU0NvcykKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLSNpZmRlZiBfX2NwbHVzcGx1cwotI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCi0JaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSNlbHNlCi0JaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKLSNlbmRpZgotCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKLQkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQotCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOwotCSNlbmRpZgotCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCi0JICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7Ci0JI2VuZGlmCi0JI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCi0JICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKLQkjZW5kaWYKLQkjZW5kaWYKLQkgIGV4aXQgKC0xKTsKLQl9Ci1FT0YKLQkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJgotCSAgZHVtbXlhcmc9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKLQkgIFNZU1RFTV9OQU1FPWAkZHVtbXkgJGR1bW15YXJnYCAmJgotCSAgICB7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KLQllY2hvIG1pcHMtbWlwcy1yaXNjb3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIE1vdG9yb2xhOlBvd2VyTUFYX09TOio6KikKLQllY2hvIHBvd2VycGMtbW90b3JvbGEtcG93ZXJtYXgKLQlleGl0IDs7Ci0gICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCi0JZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAotCWV4aXQgOzsKLSAgICBOaWdodF9IYXdrOio6KjpQb3dlck1BWF9PUyB8IFN5bmVyZ3k6UG93ZXJNQVhfT1M6KjoqKQotCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKLQlleGl0IDs7Ci0gICAgTmlnaHRfSGF3azpQb3dlcl9VTklYOio6KikKLQllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VydW5peAotCWV4aXQgOzsKLSAgICBtODhrOkNYL1VYOjcqOiopCi0JZWNobyBtODhrLWhhcnJpcy1jeHV4NwotCWV4aXQgOzsKLSAgICBtODhrOio6NCo6UjQqKQotCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2NAotCWV4aXQgOzsKLSAgICBtODhrOio6Myo6UjMqKQotCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MwotCWV4aXQgOzsKLSAgICBBVmlpT046ZGd1eDoqOiopCi0JIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKLQlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAotCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KLQl0aGVuCi0JICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAotCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQotCSAgICB0aGVuCi0JCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQotCSAgICBlbHNlCi0JCWVjaG8gbTg4ay1kZy1kZ3V4YmNzJHtVTkFNRV9SRUxFQVNFfQotCSAgICBmaQotCWVsc2UKLQkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9Ci0JZmkKLQlleGl0IDs7Ci0gICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKLQllY2hvIG04OGstZG9scGhpbi1zeXN2MwotCWV4aXQgOzsKLSAgICBNODgqOio6UjMqOiopCi0JIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMwotCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MwotCWV4aXQgOzsKLSAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKLQllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCi0JZXhpdCA7OwotICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCi0JZWNobyBtNjhrLXRla3Ryb25peC1ic2QKLQlleGl0IDs7Ci0gICAgKjpJUklYKjoqOiopCi0JZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAotCWV4aXQgOzsKLSAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCi0JZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKLQlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCi0gICAgaSo4NjpBSVg6KjoqKQotCWVjaG8gaTM4Ni1pYm0tYWl4Ci0JZXhpdCA7OwotICAgIGlhNjQ6QUlYOio6KikKLQlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KLQkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKLQllbHNlCi0JCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9Ci0JZmkKLQllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KLQlleGl0IDs7Ci0gICAgKjpBSVg6MjozKQotCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgotCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYwotCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgotCi0JCW1haW4oKQotCQkJewotCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCi0JCQkJZXhpdCgxKTsKLQkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7Ci0JCQlleGl0KDApOwotCQkJfQotRU9GCi0JCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCi0JCXRoZW4KLQkJCWVjaG8gIiRTWVNURU1fTkFNRSIKLQkJZWxzZQotCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41Ci0JCWZpCi0JZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40Ci0JZWxzZQotCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCi0JZmkKLQlleGl0IDs7Ci0gICAgKjpBSVg6KjpbNDU2N10pCi0JSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCi0JaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JCUlCTV9BUkNIPXJzNjAwMAotCWVsc2UKLQkJSUJNX0FSQ0g9cG93ZXJwYwotCWZpCi0JaWYgWyAteCAvdXNyL2Jpbi9sc2xwcCBdIDsgdGhlbgotCQlJQk1fUkVWPWAvdXNyL2Jpbi9sc2xwcCAtTHFjIGJvcy5ydGUubGliYyB8Ci0JCQkgICBhd2sgLUY6ICd7IHByaW50ICQzIH0nIHwgc2VkIHMvWzAtOV0qJC8wL2AKLQllbHNlCi0JCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9Ci0JZmkKLQllY2hvICR7SUJNX0FSQ0h9LWlibS1haXgke0lCTV9SRVZ9Ci0JZXhpdCA7OwotICAgICo6QUlYOio6KikKLQllY2hvIHJzNjAwMC1pYm0tYWl4Ci0JZXhpdCA7OwotICAgIGlibXJ0OjQuNEJTRDoqfHJvbXAtaWJtOkJTRDoqKQotCWVjaG8gcm9tcC1pYm0tYnNkNC40Ci0JZXhpdCA7OwotICAgIGlibXJ0OipCU0Q6Knxyb21wLWlibTpCU0Q6KikgICAgICAgICAgICAjIGNvdmVycyBSVC9QQyBCU0QgYW5kCi0JZWNobyByb21wLWlibS1ic2Qke1VOQU1FX1JFTEVBU0V9ICAgIyA0LjMgd2l0aCB1bmFtZSBhZGRlZCB0bwotCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCi0gICAgKjpCT1NYOio6KikKLQllY2hvIHJzNjAwMC1idWxsLWJvc3gKLQlleGl0IDs7Ci0gICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKLQllY2hvIG02OGstYnVsbC1zeXN2MwotCWV4aXQgOzsKLSAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCi0JZWNobyBtNjhrLWhwLWJzZAotCWV4aXQgOzsKLSAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQotCWVjaG8gbTY4ay1ocC1ic2Q0LjQKLQlleGl0IDs7Ci0gICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQotCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAotCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCi0JICAgIDkwMDAvMzE/ICkgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OwotCSAgICA5MDAwL1szNF0/PyApICAgICAgICAgSFBfQVJDSD1tNjhrIDs7Ci0JICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQotCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgotCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCi0JCSAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKLQkJICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgotCQkgICAgICA1MjMpIEhQX0FSQ0g9aHBwYTEuMCA7OyAjIENQVV9QQV9SSVNDMV8wCi0JCSAgICAgIDUyOCkgSFBfQVJDSD1ocHBhMS4xIDs7ICMgQ1BVX1BBX1JJU0MxXzEKLQkJICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCi0JCQljYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KLQkJCSAgMzIpIEhQX0FSQ0g9aHBwYTIuMG4gOzsKLQkJCSAgNjQpIEhQX0FSQ0g9aHBwYTIuMHcgOzsKLQkJCSAgJycpIEhQX0FSQ0g9aHBwYTIuMCA7OyAgICMgSFAtVVggMTAuMjAKLQkJCWVzYWMgOzsKLQkJICAgIGVzYWMKLQkJZmkKLQkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCi0JCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JCSAgICBzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKLQotCQkjZGVmaW5lIF9IUFVYX1NPVVJDRQotCQkjaW5jbHVkZSA8c3RkbGliLmg+Ci0JCSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotCQlpbnQgbWFpbiAoKQotCQl7Ci0JCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKLQkJICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKLQkJI2VuZGlmCi0JCSAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOwotCi0JCSAgICBzd2l0Y2ggKGNwdSkKLQkJCXsKLQkJCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOwotCQkJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7Ci0JCQljYXNlIENQVV9QQV9SSVNDMl8wOgotCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCi0JCQkgICAgc3dpdGNoIChiaXRzKQotCQkJCXsKLQkJCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7Ci0JCQkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOwotCQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOwotCQkJCX0gYnJlYWs7Ci0JCSNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCi0JCQkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7Ci0JCSNlbmRpZgotCQkJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7Ci0JCQl9Ci0JCSAgICBleGl0ICgwKTsKLQkJfQotRU9GCi0JCSAgICAoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCi0JCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCi0JCWZpIDs7Ci0JZXNhYwotCWlmIFsgJHtIUF9BUkNIfSA9IGhwcGEyLjB3IF0KLQl0aGVuCi0JICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQotCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZwotCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKLQkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKLQkgICAgIwotCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCi0JICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCi0JICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCi0JICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMwotCi0JICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAotCQlncmVwIC1xIF9fTFA2NF9fCi0JICAgIHRoZW4KLQkJSFBfQVJDSD1ocHBhMi4wdwotCSAgICBlbHNlCi0JCUhQX0FSQ0g9aHBwYTY0Ci0JICAgIGZpCi0JZmkKLQllY2hvICR7SFBfQVJDSH0taHAtaHB1eCR7SFBVWF9SRVZ9Ci0JZXhpdCA7OwotICAgIGlhNjQ6SFAtVVg6KjoqKQotCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAotCWVjaG8gaWE2NC1ocC1ocHV4JHtIUFVYX1JFVn0KLQlleGl0IDs7Ci0gICAgMzA1MCo6SEktVVg6KjoqKQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSNpbmNsdWRlIDx1bmlzdGQuaD4KLQlpbnQKLQltYWluICgpCi0JewotCSAgbG9uZyBjcHUgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOwotCSAgLyogVGhlIG9yZGVyIG1hdHRlcnMsIGJlY2F1c2UgQ1BVX0lTX0hQX01DNjhLIGVycm9uZW91c2x5IHJldHVybnMKLQkgICAgIHRydWUgZm9yIENQVV9QQV9SSVNDMV8wLiAgQ1BVX0lTX1BBX1JJU0MgcmV0dXJucyBjb3JyZWN0Ci0JICAgICByZXN1bHRzLCBob3dldmVyLiAgKi8KLQkgIGlmIChDUFVfSVNfUEFfUklTQyAoY3B1KSkKLQkgICAgewotCSAgICAgIHN3aXRjaCAoY3B1KQotCQl7Ci0JCSAgY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOwotCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKLQkJICBjYXNlIENQVV9QQV9SSVNDMl8wOiBwdXRzICgiaHBwYTIuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7Ci0JCSAgZGVmYXVsdDogcHV0cyAoImhwcGEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOwotCQl9Ci0JICAgIH0KLQkgIGVsc2UgaWYgKENQVV9JU19IUF9NQzY4SyAoY3B1KSkKLQkgICAgcHV0cyAoIm02OGstaGl0YWNoaS1oaXV4d2UyIik7Ci0JICBlbHNlIHB1dHMgKCJ1bmtub3duLWhpdGFjaGktaGl1eHdlMiIpOwotCSAgZXhpdCAoMCk7Ci0JfQotRU9GCi0JJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKLQkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9Ci0JZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgotCWV4aXQgOzsKLSAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCi0JZWNobyBocHBhMS4xLWhwLWJzZAotCWV4aXQgOzsKLSAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQotCWVjaG8gaHBwYTEuMC1ocC1ic2QKLQlleGl0IDs7Ci0gICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQotCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAotCWV4aXQgOzsKLSAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKLQllY2hvIGhwcGExLjEtaHAtb3NmCi0JZXhpdCA7OwotICAgIGhwOD8/Ok9TRjE6KjoqKQotCWVjaG8gaHBwYTEuMC1ocC1vc2YKLQlleGl0IDs7Ci0gICAgaSo4NjpPU0YxOio6KikKLQlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCi0JICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjFtawotCWVsc2UKLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMQotCWZpCi0JZXhpdCA7OwotICAgIHBhcmlzYyo6TGl0ZXMqOio6KikKLQllY2hvIGhwcGExLjEtaHAtbGl0ZXMKLQlleGl0IDs7Ci0gICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKLQllY2hvIGMxLWNvbnZleC1ic2QKLQlleGl0IDs7Ci0gICAgQzIqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMio6KikKLQlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKLQl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKLQllbHNlIGVjaG8gYzItY29udmV4LWJzZAotCWZpCi0JZXhpdCA7OwotICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKLQllY2hvIGMzNC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKLQllY2hvIGMzOC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIEM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzQqOiopCi0JZWNobyBjNC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIENSQVkqWS1NUDoqOio6KikKLQllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsKLSAgICBDUkFZKltBLVpdOTA6KjoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSBcCi0JfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCi0JICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAotCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDs7Ci0gICAgQ1JBWSpUUzoqOio6KikKLQllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsKLSAgICBDUkFZKlQzRToqOio6KikKLQllY2hvIGFscGhhZXY1LWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDs7Ci0gICAgQ1JBWSpTVjE6KjoqOiopCi0JZWNobyBzdjEtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDs7Ci0gICAgKjpVTklDT1MvbXA6KjoqKQotCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDs7Ci0gICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCi0JRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YAotCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdzL1wvLy8nYAotCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCi0JZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKLQlleGl0IDs7Ci0gICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQotCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdzL1wvLy8nYAotCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiB8IHNlZCAtZSAncy8gL18vJ2AKLQllY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCi0JZXhpdCA7OwotICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBzcGFyYyo6QlNEL09TOio6KikKLQllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpCU0QvT1M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6RnJlZUJTRDoqOiopCi0JVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKLQljYXNlICR7VU5BTUVfUFJPQ0VTU09SfSBpbgotCSAgICBhbWQ2NCkKLQkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OwotCSAgICAqKQotCQllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7Ci0JZXNhYwotCWV4aXQgOzsKLSAgICBpKjpDWUdXSU4qOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgotCWV4aXQgOzsKLSAgICAqOk1JTkdXNjQqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3NjQKLQlleGl0IDs7Ci0gICAgKjpNSU5HVyo6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgotCWV4aXQgOzsKLSAgICAqOk1TWVMqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zeXMKLQlleGl0IDs7Ci0gICAgaSo6d2luZG93czMyKjoqKQotCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKLQlleGl0IDs7Ci0gICAgaSo6UFcqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKLQlleGl0IDs7Ci0gICAgKjpJbnRlcml4KjoqKQotCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgotCSAgICB4ODYpCi0JCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQotCQlleGl0IDs7Ci0JICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQotCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9Ci0JCWV4aXQgOzsKLQkgICAgSUE2NCkKLQkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KLQkJZXhpdCA7OwotCWVzYWMgOzsKLSAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCi0JZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKLQlleGl0IDs7Ci0gICAgODY2NDpXaW5kb3dzX05UOiopCi0JZWNobyB4ODZfNjQtcGMtbWtzCi0JZXhpdCA7OwotICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQotCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KLQkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQotCSMgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQgb2YgaTM4Nj8KLQllY2hvIGk1ODYtcGMtaW50ZXJpeAotCWV4aXQgOzsKLSAgICBpKjpVV0lOKjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCi0JZXhpdCA7OwotICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQotCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCi0JZXhpdCA7OwotICAgIHAqOkNZR1dJTio6KikKLQllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgotCWV4aXQgOzsKLSAgICBwcmVwKjpTdW5PUzo1Lio6KikKLQllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgICo6R05VOio6KikKLQkjIHRoZSBHTlUgc3lzdGVtCi0JZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLSR7TElCQ31gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAotCWV4aXQgOzsKLSAgICAqOkdOVS8qOio6KikKLQkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICJbOnVwcGVyOl0iICJbOmxvd2VyOl0iYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBpKjg2Ok1pbml4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKLQlleGl0IDs7Ci0gICAgYWFyY2g2NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBhYXJjaDY0X2JlOkxpbnV4Oio6KikKLQlVTkFNRV9NQUNISU5FPWFhcmNoNjRfYmUKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGFscGhhOkxpbnV4Oio6KikKLQljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgotCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKLQkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OwotCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKLQkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OwotCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7Ci0JZXNhYwotCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQotCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9Z251bGliYzEgOyBmaQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgYXJjOkxpbnV4Oio6KiB8IGFyY2ViOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGFybSo6TGludXg6KjoqKQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCi0JICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KLQl0aGVuCi0JICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQllbHNlCi0JICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCi0JCXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCi0JICAgIHRoZW4KLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmkKLQkgICAgZWxzZQotCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9ZWFiaWhmCi0JICAgIGZpCi0JZmkKLQlleGl0IDs7Ci0gICAgYXZyMzIqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGNyaXM6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgY3Jpc3YzMjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBlMms6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgZnJ2OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGhleGFnb246TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgaSo4NjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgaWE2NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBrMW9tOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIG0zMnIqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIG02OCo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSN1bmRlZiBDUFUKLQkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQotCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKLQkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQotCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKLQkjZWxzZQotCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCi0JQ1BVPSR7VU5BTUVfTUFDSElORX0KLQkjZWxzZQotCUNQVT0KLQkjZW5kaWYKLQkjZW5kaWYKLUVPRgotCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKLQl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KLQk7OwotICAgIG1pcHM2NGVsOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIG9wZW5yaXNjKjpMaW51eDoqOiopCi0JZWNobyBvcjFrLXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBvcjMyOkxpbnV4Oio6KiB8IG9yMWsqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHBhZHJlOkxpbnV4Oio6KikKLQllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQotCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCi0JIyBMb29rIGZvciBDUFUgbGV2ZWwKLQljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgotCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtJHtMSUJDfSA7OwotCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OwotCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtJHtMSUJDfSA7OwotCWVzYWMKLQlleGl0IDs7Ci0gICAgcHBjNjQ6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBwcGM6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgcHBjNjRsZTpMaW51eDoqOiopCi0JZWNobyBwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgcHBjbGU6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwY2xlLXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICByaXNjdjMyOkxpbnV4Oio6KiB8IHJpc2N2NjQ6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHNoNjQqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHNoKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHRpbGUqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHZheDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHg4Nl82NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgeHRlbnNhKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQotCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCi0JIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAotCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCi0JZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKLQlleGl0IDs7Ci0gICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKLQkjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCi0JIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgotCSMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKLQkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCi0JIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Y0LjJ1dyR7VU5BTUVfVkVSU0lPTn0KLQlleGl0IDs7Ci0gICAgaSo4NjpPUy8yOio6KikKLQkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQotCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14Ci0JZXhpdCA7OwotICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAotCWV4aXQgOzsKLSAgICBpKjg2OmF0aGVvczoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCi0JZXhpdCA7OwotICAgIGkqODY6c3lsbGFibGU6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQotCWV4aXQgOzsKLSAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKLQllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIGkqODY6KkRPUzoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKLQlleGl0IDs7Ci0gICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKLQlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKLQlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9Ci0JZWxzZQotCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQotCWZpCi0JZXhpdCA7OwotICAgIGkqODY6Kjo1Ols2NzhdKikKLQkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KLQljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgotCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKLQkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7Ci0JICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7Ci0JZXNhYwotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQotCWV4aXQgOzsKLSAgICBpKjg2Oio6My4yOiopCi0JaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgotCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCi0JZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCi0JCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKLQkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2Ci0JCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCi0JCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKLQkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCi0JCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKLQkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCi0JCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKLQllbHNlCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKLQlmaQotCWV4aXQgOzsKLSAgICBwYzoqOio6KikKLQkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKLQkjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAotCSMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCi0JIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgotCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cmUgd2lsbCBkZWNpZGUgdGhhdAotCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgotCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCi0JZXhpdCA7OwotICAgIEludGVsOk1hY2g6Myo6KikKLQllY2hvIGkzODYtcGMtbWFjaDMKLQlleGl0IDs7Ci0gICAgcGFyYWdvbjoqOio6KikKLQllY2hvIGk4NjAtaW50ZWwtb3NmMQotCWV4aXQgOzsKLSAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0Ci0JaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KLQkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKLQllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCi0JICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAotCWZpCi0JZXhpdCA7OwotICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKLQkjICJtaW5pZnJhbWUiCi0JZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2Ci0JZXhpdCA7OwotICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKLQllY2hvIG02OGstY29udmVyZ2VudC1zeXN2Ci0JZXhpdCA7OwotICAgIE02ODA/MDpELU5JWDo1LjM6KikKLQllY2hvIG02OGstZGlhYi1kbml4Ci0JZXhpdCA7OwotICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCi0JdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OwotICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQotCU9TX1JFTD0nJwotCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAotCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCi0JL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0JICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQotCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAotCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKLSAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKLQkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKLQkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OwotICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQotCU9TX1JFTD0nLjMnCi0JdGVzdCAtciAvZXRjLy5yZWxpZCBcCi0JICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCi0JL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0JICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9Ci0JL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCi0JICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9Ci0JL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCi0JICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7Ci0gICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCi0JZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCi0JZWNobyBtNjhrLWF0YXJpLXN5c3Y0Ci0JZXhpdCA7OwotICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQotCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCi0JZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgU01bQkVdUzpVTklYX1NWOio6KikKLQllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKLQllY2hvIG1pcHMtc25pLXN5c3Y0Ci0JZXhpdCA7OwotICAgIFJNKjpTSU5JWC0qOio6KikKLQllY2hvIG1pcHMtc25pLXN5c3Y0Ci0JZXhpdCA7OwotICAgICo6U0lOSVgtKjoqOiopCi0JaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KLQkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXNuaS1zeXN2NAotCWVsc2UKLQkJZWNobyBuczMyay1zbmktc3lzdgotCWZpCi0JZXhpdCA7OwotICAgIFBFTlRJVU06Kjo0LjAqOiopCSMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0Ci0JCQkjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+Ci0JZWNobyBpNTg2LXVuaXN5cy1zeXN2NAotCWV4aXQgOzsKLSAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKLQkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCi0JIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCi0JZWNobyBocHBhMS4xLXN0cmF0dXMtc3lzdjQKLQlleGl0IDs7Ci0gICAgKjoqOio6RlRYKikKLQkjIEZyb20gc2VhbmZAc3dkYy5zdHJhdHVzLmNvbS4KLQllY2hvIGk4NjAtc3RyYXR1cy1zeXN2NAotCWV4aXQgOzsKLSAgICBpKjg2OlZPUzoqOiopCi0JIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXN0cmF0dXMtdm9zCi0JZXhpdCA7OwotICAgICo6Vk9TOio6KikKLQkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KLQllY2hvIGhwcGExLjEtc3RyYXR1cy12b3MKLQlleGl0IDs7Ci0gICAgbWM2OCo6QS9VWDoqOiopCi0JZWNobyBtNjhrLWFwcGxlLWF1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgbmV3cyo6TkVXUy1PUzo2KjoqKQotCWVjaG8gbWlwcy1zb255LW5ld3NvczYKLQlleGl0IDs7Ci0gICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCi0JaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCi0JCWVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KLQllbHNlCi0JCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9Ci0JZmkKLQlleGl0IDs7Ci0gICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgotCWVjaG8gcG93ZXJwYy1iZS1iZW9zCi0JZXhpdCA7OwotICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KLQllY2hvIHBvd2VycGMtYXBwbGUtYmVvcwotCWV4aXQgOzsKLSAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgotCWVjaG8gaTU4Ni1wYy1iZW9zCi0JZXhpdCA7OwotICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KLQllY2hvIGk1ODYtcGMtaGFpa3UKLQlleGl0IDs7Ci0gICAgeDg2XzY0OkhhaWt1Oio6KikKLQllY2hvIHg4Nl82NC11bmtub3duLWhhaWt1Ci0JZXhpdCA7OwotICAgIFNYLTQ6U1VQRVItVVg6KjoqKQotCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBTWC01OlNVUEVSLVVYOio6KikKLQllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgU1gtNjpTVVBFUi1VWDoqOiopCi0JZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFNYLTc6U1VQRVItVVg6KjoqKQotCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBTWC04OlNVUEVSLVVYOio6KikKLQllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgU1gtOFI6U1VQRVItVVg6KjoqKQotCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgU1gtQUNFOlNVUEVSLVVYOio6KikKLQllY2hvIHN4YWNlLW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQotCWVjaG8gcG93ZXJwYy1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpSaGFwc29keToqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOkRhcndpbjoqOiopCi0JVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgotCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYwotCWZpCi0JaWYgdGVzdCBgZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuLiovLydgIC1sZSAxMCA7IHRoZW4KLQkgICAgaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gbm9fY29tcGlsZXJfZm91bmQgXTsgdGhlbgotCQlpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKLQkJICAgIChDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKLQkJICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCi0JCXRoZW4KLQkJICAgIGNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgotCQkJaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OwotCQkJcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OwotCQkgICAgZXNhYwotCQlmaQotCSAgICBmaQotCWVsaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBpMzg2IDsgdGhlbgotCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBvbiBPUyBYIDEwLjksIGFzIGl0IHNoaXBzIHdpdGggYSBzdHViCi0JICAgICMgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0IHByb21wdGluZyB0byBpbnN0YWxsCi0JICAgICMgZGV2ZWxvcGVyIHRvb2xzLiAgQW55IHN5c3RlbSBydW5uaW5nIE1hYyBPUyBYIDEwLjcgb3IKLQkgICAgIyBsYXRlciAoRGFyd2luIDExIGFuZCBsYXRlcikgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIDY0LWJpdAotCSAgICAjIHByb2Nlc3Nvci4gVGhpcyBpcyBub3QgdHJ1ZSBvZiB0aGUgQVJNIHZlcnNpb24gb2YgRGFyd2luCi0JICAgICMgdGhhdCBBcHBsZSB1c2VzIGluIHBvcnRhYmxlIGRldmljZXMuCi0JICAgIFVOQU1FX1BST0NFU1NPUj14ODZfNjQKLQlmaQotCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCi0JVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKLQlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IHg4NjsgdGhlbgotCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgotCQlVTkFNRV9NQUNISU5FPXBjCi0JZmkKLQllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6UU5YOio6NCopCi0JZWNobyBpMzg2LXBjLXFueAotCWV4aXQgOzsKLSAgICBORU8tPzpOT05TVE9QX0tFUk5FTDoqOiopCi0JZWNobyBuZW8tdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgTlNFLSo6Tk9OU1RPUF9LRVJORUw6KjoqKQotCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKLQllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOk5vblN0b3AtVVg6KjoqKQotCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4Ci0JZXhpdCA7OwotICAgIEJTMjAwMDpQT1NJWCo6KjoqKQotCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgotCWV4aXQgOzsKLSAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOlBsYW45Oio6KikKLQkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKLQkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgotCSMgb3BlcmF0aW5nIHN5c3RlbXMuCi0JaWYgdGVzdCAiJGNwdXR5cGUiID0gMzg2OyB0aGVuCi0JICAgIFVOQU1FX01BQ0hJTkU9aTM4NgotCWVsc2UKLQkgICAgVU5BTUVfTUFDSElORT0iJGNwdXR5cGUiCi0JZmkKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1wbGFuOQotCWV4aXQgOzsKLSAgICAqOlRPUFMtMTA6KjoqKQotCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMTAKLQlleGl0IDs7Ci0gICAgKjpURU5FWDoqOiopCi0JZWNobyBwZHAxMC11bmtub3duLXRlbmV4Ci0JZXhpdCA7OwotICAgIEtTMTA6VE9QUy0yMDoqOiogfCBLTDEwOlRPUFMtMjA6KjoqIHwgVFlQRTQ6VE9QUy0yMDoqOiopCi0JZWNobyBwZHAxMC1kZWMtdG9wczIwCi0JZXhpdCA7OwotICAgIFhLTC0xOlRPUFMtMjA6KjoqIHwgVFlQRTU6VE9QUy0yMDoqOiopCi0JZWNobyBwZHAxMC14a2wtdG9wczIwCi0JZXhpdCA7OwotICAgICo6VE9QUy0yMDoqOiopCi0JZWNobyBwZHAxMC11bmtub3duLXRvcHMyMAotCWV4aXQgOzsKLSAgICAqOklUUzoqOiopCi0JZWNobyBwZHAxMC11bmtub3duLWl0cwotCWV4aXQgOzsKLSAgICBTRUk6KjoqOlNFSVVYKQotCWVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6RHJhZ29uRmx5Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCi0JZXhpdCA7OwotICAgICo6KlZNUzoqOiopCi0JVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKLQljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgotCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OwotCSAgICBJKikgZWNobyBpYTY0LWRlYy12bXMgOyBleGl0IDs7Ci0JICAgIFYqKSBlY2hvIHZheC1kZWMtdm1zIDsgZXhpdCA7OwotCWVzYWMgOzsKLSAgICAqOlhFTklYOio6U3lzVikKLQllY2hvIGkzODYtcGMteGVuaXgKLQlleGl0IDs7Ci0gICAgaSo4Njpza3lvczoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNreW9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gLiokLy8nYAotCWV4aXQgOzsKLSAgICBpKjg2OnJkb3M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCi0JZXhpdCA7OwotICAgIGkqODY6QVJPUzoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWFyb3MKLQlleGl0IDs7Ci0gICAgeDg2XzY0OlZNa2VybmVsOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1lc3gKLQlleGl0IDs7Ci0gICAgYW1kNjQ6SXNpbG9uXCBPbmVGUzoqOiopCi0JZWNobyB4ODZfNjQtdW5rbm93bi1vbmVmcwotCWV4aXQgOzsKLWVzYWMKLQotY2F0ID4mMiA8PEVPRgotJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQotCi1UaGlzIHNjcmlwdCAodmVyc2lvbiAkdGltZXN0YW1wKSwgaGFzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlCi1vcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUgdXNpbmcuIElmIHlvdXIgc2NyaXB0IGlzIG9sZCwgb3ZlcndyaXRlCi1jb25maWcuZ3Vlc3MgYW5kIGNvbmZpZy5zdWIgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb25zIGZyb206Ci0KLSAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcwotYW5kCi0gIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViCi0KLUlmICQwIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCwgc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueQotaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlIHBlcnRpbmVudCB0byBjb25maWctcGF0Y2hlc0BnbnUub3JnIHRvCi1wcm92aWRlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgotCi1jb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAotCi11bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLXVuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi11bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLQotL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKLS9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKLQotaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAotL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCi0vdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKLS9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCi0vdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKLS91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAotCi1VTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQotVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KLVVOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KLVVOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059Ci1FT0YKLQotZXhpdCAxCi0KLSMgTG9jYWwgdmFyaWFibGVzOgotIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKLSMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgotIyB0aW1lLXN0YW1wLWVuZDogIiciCi0jIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZy5oLmluIGIvY29uZmlnLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMmY4YzkuLjAwMDAwMDAKLS0tIGEvY29uZmlnLmguaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1NTUgKzAsMCBAQAotLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCi0KLS8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KLSN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKLQotLyogcG9sbCBkb2Vzbid0IHdvcmsgb24gZGV2aWNlcyAqLwotI3VuZGVmIEJST0tFTl9QT0xMCi0KLS8qIERlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUKLSAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KLSN1bmRlZiBFTkFCTEVfTkxTCi0KLS8qIFN1YnVuaXQgcHJvdG9jb2wgcmVzdWx0IG91dHB1dCAqLwotI3VuZGVmIEVOQUJMRV9TVUJVTklUCi0KLS8qIGdldHRleHQgcGFja2FnZSBuYW1lICovCi0jdW5kZWYgR0VUVEVYVF9QQUNLQUdFCi0KLS8qIFRoZSBHSU8gbGlicmFyeSBkaXJlY3RvcnkuICovCi0jdW5kZWYgR0lPX0xJQkRJUgotCi0vKiBUaGUgR0lPIG1vZHVsZXMgZGlyZWN0b3J5LiAqLwotI3VuZGVmIEdJT19NT0RVTEVfRElSCi0KLS8qIFRoZSBHSU8gaW5zdGFsbCBwcmVmaXguICovCi0jdW5kZWYgR0lPX1BSRUZJWAotCi0vKiBHU3RyZWFtZXIgQVBJIFZlcnNpb24gKi8KLSN1bmRlZiBHU1RfQVBJX1ZFUlNJT04KLQotLyogZGF0YSBkaXIgKi8KLSN1bmRlZiBHU1RfREFUQURJUgotCi0vKiBEZWZpbmUgaWYgb3B0aW9uIHBhcnNpbmcgaXMgZGlzYWJsZWQgKi8KLSN1bmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORwotCi0vKiBEZWZpbmUgaWYgcGlwZWxpbmUgcGFyc2luZyBjb2RlIGlzIGRpc2FibGVkICovCi0jdW5kZWYgR1NUX0RJU0FCTEVfUEFSU0UKLQotLyogRGVmaW5lIGlmIGV4dHJhIHJ1bnRpbWUgY2hlY2tzIHNob3VsZCBiZSBlbmFibGVkICovCi0jdW5kZWYgR1NUX0VOQUJMRV9FWFRSQV9DSEVDS1MKLQotLyogRXh0cmEgcGxhdGZvcm0gc3BlY2lmaWMgcGx1Z2luIHN1ZmZpeCAqLwotI3VuZGVmIEdTVF9FWFRSQV9NT0RVTEVfU1VGRklYCi0KLS8qIG1hY3JvIHRvIHVzZSB0byBzaG93IGZ1bmN0aW9uIG5hbWUgKi8KLSN1bmRlZiBHU1RfRlVOQ1RJT04KLQotLyogRGVmaW5lZCBpZiBnY292IGlzIGVuYWJsZWQgdG8gZm9yY2UgYSByZWJ1aWxkIGR1ZSB0byBjb25maWcuaCBjaGFuZ2luZyAqLwotI3VuZGVmIEdTVF9HQ09WX0VOQUJMRUQKLQotLyogRGVmaW5lZCB3aGVuIHJlZ2lzdHJ5IHNjYW5uaW5nIHRocm91Z2ggZm9yayBpcyB1bnNhZmUgKi8KLSN1bmRlZiBHU1RfSEFWRV9VTlNBRkVfRk9SSwotCi0vKiBEZWZhdWx0IGVycm9ybGV2ZWwgdG8gdXNlICovCi0jdW5kZWYgR1NUX0xFVkVMX0RFRkFVTFQKLQotLyogR1N0cmVhbWVyIGxpY2Vuc2UgKi8KLSN1bmRlZiBHU1RfTElDRU5TRQotCi0vKiBwYWNrYWdlIG5hbWUgaW4gcGx1Z2lucyAqLwotI3VuZGVmIEdTVF9QQUNLQUdFX05BTUUKLQotLyogcGFja2FnZSBvcmlnaW4gKi8KLSN1bmRlZiBHU1RfUEFDS0FHRV9PUklHSU4KLQotLyogR1N0cmVhbWVyIHBhY2thZ2UgcmVsZWFzZSBkYXRlL3RpbWUgZm9yIHBsdWdpbnMgYXMgWVlZWS1NTS1ERCAqLwotI3VuZGVmIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUKLQotLyogRGVmaW5lIGlmIHN0YXRpYyBwbHVnaW5zIHNob3VsZCBiZSBidWlsdCAqLwotI3VuZGVmIEdTVF9QTFVHSU5fQlVJTERfU1RBVElDCi0KLS8qIGxvY2F0aW9uIG9mIHRoZSBpbnN0YWxsZWQgZ3N0LXBsdWdpbi1zY2FubmVyICovCi0jdW5kZWYgR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRAotCi0vKiBsb2NhdGlvbiBvZiB0aGUgaW5zdGFsbGVkIGdzdC1wdHAtaGVscGVyICovCi0jdW5kZWYgR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYWxhcm0nIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfQUxBUk0KLQotLyogSGF2ZSBiYWNrdHJhY2UgKi8KLSN1bmRlZiBIQVZFX0JBQ0tUUkFDRQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQotICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLwotI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCi0gICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLwotI3VuZGVmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQotCi0vKiBIYXZlIGNsb2NrX2dldHRpbWUgKi8KLSN1bmRlZiBIQVZFX0NMT0NLX0dFVFRJTUUKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIEFBUkNINjQgKi8KLSN1bmRlZiBIQVZFX0NQVV9BQVJDSDY0Ci0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhbiBBbHBoYSAqLwotI3VuZGVmIEhBVkVfQ1BVX0FMUEhBCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhbiBBUkMgKi8KLSN1bmRlZiBIQVZFX0NQVV9BUkMKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIEFSTSAqLwotI3VuZGVmIEhBVkVfQ1BVX0FSTQotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBDUklTICovCi0jdW5kZWYgSEFWRV9DUFVfQ1JJUwotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBDUklTdjMyICovCi0jdW5kZWYgSEFWRV9DUFVfQ1JJU1YzMgotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBIUFBBICovCi0jdW5kZWYgSEFWRV9DUFVfSFBQQQotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4geDg2ICovCi0jdW5kZWYgSEFWRV9DUFVfSTM4NgotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBJQTY0ICovCi0jdW5kZWYgSEFWRV9DUFVfSUE2NAotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBNNjhLICovCi0jdW5kZWYgSEFWRV9DUFVfTTY4SwotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBNSVBTICovCi0jdW5kZWYgSEFWRV9DUFVfTUlQUwotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBQb3dlclBDICovCi0jdW5kZWYgSEFWRV9DUFVfUFBDCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIDY0IGJpdCBQb3dlclBDICovCi0jdW5kZWYgSEFWRV9DUFVfUFBDNjQKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgUzM5MCAqLwotI3VuZGVmIEhBVkVfQ1BVX1MzOTAKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgU1BBUkMgKi8KLSN1bmRlZiBIQVZFX0NQVV9TUEFSQwotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSB4ODZfNjQgKi8KLSN1bmRlZiBIQVZFX0NQVV9YODZfNjQKLQotLyogRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4KLSAgICovCi0jdW5kZWYgSEFWRV9EQ0dFVFRFWFQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBhbGFybScsIGFuZCB0byAwIGlmIHlvdSBkb24ndC4KLSAgICovCi0jdW5kZWYgSEFWRV9ERUNMX0FMQVJNCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgbG9jYWx0aW1lX3InLCBhbmQgdG8gMCBpZiB5b3UKLSAgIGRvbid0LiAqLwotI3VuZGVmIEhBVkVfREVDTF9MT0NBTFRJTUVfUgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cmR1cCcsIGFuZCB0byAwIGlmIHlvdSBkb24ndC4KLSAgICovCi0jdW5kZWYgSEFWRV9ERUNMX1NUUkRVUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHN0cnNpZ25hbCcsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jdW5kZWYgSEFWRV9ERUNMX1NUUlNJR05BTAotCi0vKiBEZWZpbmVkIGlmIHdlIGhhdmUgZGxhZGRyICgpICovCi0jdW5kZWYgSEFWRV9ETEFERFIKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0RMRkNOX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxleGVjaW5mby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0VYRUNJTkZPX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmZ2V0cG9zJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0ZHRVRQT1MKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0ZPUksKLQotLyogRGVmaW5lIHRvIDEgaWYgZnNlZWtvIChhbmQgcHJlc3VtYWJseSBmdGVsbG8pIGV4aXN0cyBhbmQgaXMgZGVjbGFyZWQuICovCi0jdW5kZWYgSEFWRV9GU0VFS08KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmc2V0cG9zJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0ZTRVRQT1MKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdGVsbG8nIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfRlRFTExPCi0KLS8qIGRlZmluZWQgaWYgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgX19mdW5jX18gKi8KLSN1bmRlZiBIQVZFX0ZVTkMKLQotLyogZGVmaW5lZCBpZiB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBfX0ZVTkNUSU9OX18gKi8KLSN1bmRlZiBIQVZFX0ZVTkNUSU9OCi0KLS8qIGdldGlmYWRkcnMoKSBhbmQgQUZfTElOSyBpcyBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX0dFVElGQUREUlNfQUZfTElOSwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVFBBR0VTSVpFCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGlkJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVFBJRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJ1c2FnZScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9HRVRSVVNBR0UKLQotLyogRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuICovCi0jdW5kZWYgSEFWRV9HRVRURVhUCi0KLS8qIEhhdmUgR01QIGxpYnJhcnkgKi8KLSN1bmRlZiBIQVZFX0dNUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdtdGltZV9yJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dNVElNRV9SCi0KLS8qIEhhdmUgR1NMIGxpYnJhcnkgKi8KLSN1bmRlZiBIQVZFX0dTTAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLiAqLwotI3VuZGVmIEhBVkVfSUNPTlYKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludG1heF90Jy4gKi8KLSN1bmRlZiBIQVZFX0lOVE1BWF9UCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9JTlRUWVBFU19ICi0KLS8qIERlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kCi0gICBkZWNsYXJlcyB1aW50bWF4X3QuICovCi0jdW5kZWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJ0JyBsaWJyYXJ5ICgtbHJ0KS4gKi8KLSN1bmRlZiBIQVZFX0xJQlJUCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lX3InIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfTE9DQUxUSU1FX1IKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgbG9uZyBsb25nICovCi0jdW5kZWYgSEFWRV9MT05HX0xPTkcKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGxvbmcgbG9uZyBpbnQnLiAqLwotI3VuZGVmIEhBVkVfTE9OR19MT05HX0lOVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX01FTU9SWV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtzdGVtcCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9NS1NURU1QCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBgbW1hcCcgc3lzdGVtIGNhbGwuICovCi0jdW5kZWYgSEFWRV9NTUFQCi0KLS8qIEhhdmUgYSBtb25vdG9uaWMgY2xvY2sgKi8KLSN1bmRlZiBIQVZFX01PTk9UT05JQ19DTE9DSwotCi0vKiBEZWZpbmVkIGlmIGNvbXBpbGluZyBmb3IgT1NYICovCi0jdW5kZWYgSEFWRV9PU1gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb2xsJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1BPTEwKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwb2xsLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfUE9MTF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfbWVtYWxpZ24nIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfUE9TSVhfTUVNQUxJR04KLQotLyogSGF2ZSBwb3NpeCB0aW1lcnMgKi8KLSN1bmRlZiBIQVZFX1BPU0lYX1RJTUVSUwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBwb2xsJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1BQT0xMCi0KLS8qIGRlZmluZWQgaWYgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgX19QUkVUVFlfRlVOQ1RJT05fXyAqLwotI3VuZGVmIEhBVkVfUFJFVFRZX0ZVTkNUSU9OCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1BST0NFU1NfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBzZWxlY3QnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfUFNFTEVDVAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy4gKi8KLSN1bmRlZiBIQVZFX1BUSFJFQUQKLQotLyogSGF2ZSBQVEhSRUFEX1BSSU9fSU5IRVJJVC4gKi8KLSN1bmRlZiBIQVZFX1BUSFJFQURfUFJJT19JTkhFUklUCi0KLS8qIEhhdmUgZnVuY3Rpb24gcHRocmVhZF9zZXRuYW1lX25wKGNvbnN0IGNoYXIqKSAqLwotI3VuZGVmIEhBVkVfUFRIUkVBRF9TRVROQU1FX05QX1dJVEhPVVRfVElECi0KLS8qIFBUUCBzdXBwb3J0IGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfUFRQCi0KLS8qIFVzZSBjYXBhYmlsaXRpZXMgZm9yIHBlcm1pc3Npb25zIGluIFBUUCBoZWxwZXIgKi8KLSN1bmRlZiBIQVZFX1BUUF9IRUxQRVJfQ0FQQUJJTElUSUVTCi0KLS8qIFVzZSBzZXR1aWQtcm9vdCBmb3IgcGVybWlzc2lvbnMgaW4gUFRQIGhlbHBlciAqLwotI3VuZGVmIEhBVkVfUFRQX0hFTFBFUl9TRVRVSUQKLQotLyogUFRQIGhlbHBlciBzZXR1aWQgZ3JvdXAgKi8KLSN1bmRlZiBIQVZFX1BUUF9IRUxQRVJfU0VUVUlEX0dST1VQCi0KLS8qIFBUUCBoZWxwZXIgc2V0dWlkIHVzZXIgKi8KLSN1bmRlZiBIQVZFX1BUUF9IRUxQRVJfU0VUVUlEX1VTRVIKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHB0cmRpZmZfdCcuICovCi0jdW5kZWYgSEFWRV9QVFJESUZGX1QKLQotLyogRGVmaW5lIGlmIFJEVFNDIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfUkRUU0MKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRpdGltZXInIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU0VUSVRJTUVSCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1NJR0FDVElPTgotCi0vKiBTSU9DR0lGQ09ORiwgU0lPQ0dJRkZMQUdTIGFuZCBTSU9DR0lGSFdBRERSIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfU0lPQ0dJRkNPTkZfU0lPQ0dJRkZMQUdTX1NJT0NHSUZIV0FERFIKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVERJTlRfSAotCi0vKiBEZWZpbmUgaWYgPHN0ZGludC5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMKLSAgIHVpbnRtYXhfdC4gKi8KLSN1bmRlZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGlvX2V4dC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NURElPX0VYVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RETElCX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjYXNlc3RyJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1NUUkNBU0VTVFIKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RSSU5HU19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RSSU5HX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJzaWduYWwnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU1RSU0lHTkFMCi0KLS8qIERlZmluZSB0byAxIGlmIGBpdF9pbnRlcnZhbCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpdGltZXJzcGVjJy4gKi8KLSN1bmRlZiBIQVZFX1NUUlVDVF9JVElNRVJTUEVDX0lUX0lOVEVSVkFMCi0KLS8qIERlZmluZSB0byAxIGlmIGBpdF92YWx1ZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpdGltZXJzcGVjJy4gKi8KLSN1bmRlZiBIQVZFX1NUUlVDVF9JVElNRVJTUEVDX0lUX1ZBTFVFCi0KLS8qIERlZmluZSB0byAxIGlmIGB0dl9uc2VjJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHRpbWVzcGVjJy4gKi8KLSN1bmRlZiBIQVZFX1NUUlVDVF9USU1FU1BFQ19UVl9OU0VDCi0KLS8qIERlZmluZSB0byAxIGlmIGB0dl9zZWMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdGltZXNwZWMnLiAqLwotI3VuZGVmIEhBVkVfU1RSVUNUX1RJTUVTUEVDX1RWX1NFQwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BvbGwuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfUE9MTF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3ByY3RsLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1BSQ1RMX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmVzb3VyY2UuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfU09DS0VUX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19TVEFUX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfVElNRVNfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1RJTUVfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19UWVBFU19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19VSU9fSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91dHNuYW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1VUU05BTUVfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy93YWl0Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1dBSVRfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRpbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9USU1FX0gKLQotLyogSGF2ZSB0bV9nbXRvZmYgZmllbGQgaW4gc3RydWN0IHRtICovCi0jdW5kZWYgSEFWRV9UTV9HTVRPRkYKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1Y29udGV4dC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1VDT05URVhUX0gKLQotLyogSGF2ZSBfX3VpbnQxMjhfdCB0eXBlICovCi0jdW5kZWYgSEFWRV9VSU5UMTI4X1QKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9VTklTVERfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdW5zaWduZWQgbG9uZyBsb25nIGludCcuICovCi0jdW5kZWYgSEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCi0KLS8qIGxpYnVud2luZCBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX1VOV0lORAotCi0vKiBEZWZpbmUgaWYgdmFsZ3JpbmQgc2hvdWxkIGJlIHVzZWQgKi8KLSN1bmRlZiBIQVZFX1ZBTEdSSU5ECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9WQUxHUklORF9WQUxHUklORF9ICi0KLS8qIERlZmluZWQgaWYgY29tcGlsaW5nIGZvciBXaW5kb3dzICovCi0jdW5kZWYgSEFWRV9XSU4zMgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfV0lOU09DSzJfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9nZXRwaWQnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfX0dFVFBJRAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zdHJkdXAnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfX1NUUkRVUAotCi0vKiB0aGUgaG9zdCBDUFUgKi8KLSN1bmRlZiBIT1NUX0NQVQotCi0vKiBsaWJyYXJ5IGRpciAqLwotI3VuZGVmIExJQkRJUgotCi0vKiBnZXR0ZXh0IGxvY2FsZSBkaXIgKi8KLSN1bmRlZiBMT0NBTEVESVIKLQotLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IHdoZXJlIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4gKi8KLSN1bmRlZiBMVF9PQkpESVIKLQotLyogTWVtb3J5IGFsaWdubWVudCB0byB1c2UgKi8KLSN1bmRlZiBNRU1PUllfQUxJR05NRU5UCi0KLS8qIE1lbW9yeSBhbGlnbm1lbnQgYnkgbWFsbG9jIGRlZmF1bHQgKi8KLSN1bmRlZiBNRU1PUllfQUxJR05NRU5UX01BTExPQwotCi0vKiBNZW1vcnkgYWxpZ25tZW50IGJ5IHBhZ2VzaXplICovCi0jdW5kZWYgTUVNT1JZX0FMSUdOTUVOVF9QQUdFU0laRQotCi0vKiBOYW1lIG9mIHBhY2thZ2UgKi8KLSN1bmRlZiBQQUNLQUdFCi0KLS8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX05BTUUKLQotLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKLQotLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1VSTAotCi0vKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgotCi0vKiBkaXJlY3Rvcnkgd2hlcmUgcGx1Z2lucyBhcmUgbG9jYXRlZCAqLwotI3VuZGVmIFBMVUdJTkRJUgotCi0vKiBEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50IHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbgotICAgeW91ciBzeXN0ZW0uICovCi0jdW5kZWYgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUKLQotLyogVGhlIHNpemUgb2YgYGNoYXInLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi0jdW5kZWYgU0laRU9GX0NIQVIKLQotLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSN1bmRlZiBTSVpFT0ZfSU5UCi0KLS8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI3VuZGVmIFNJWkVPRl9MT05HCi0KLS8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSN1bmRlZiBTSVpFT0ZfU0hPUlQKLQotLyogVGhlIHNpemUgb2YgYHZvaWQqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI3VuZGVmIFNJWkVPRl9WT0lEUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSN1bmRlZiBTVERDX0hFQURFUlMKLQotLyogTmVlZCB0byBkZWZpbmUgdGhlIGl0aW1lcnNwZWMgc3RydWN0dXJlICovCi0jdW5kZWYgU1RSVUNUX0lUSU1FUlNQRUNfREVGSU5JVElPTl9NSVNTSU5HCi0KLS8qIE5lZWQgdG8gZGVmaW5lIHRoZSB0aW1lc3BlYyBzdHJ1Y3R1cmUgKi8KLSN1bmRlZiBTVFJVQ1RfVElNRVNQRUNfREVGSU5JVElPTl9NSVNTSU5HCi0KLS8qIHRoZSB0YXJnZXQgQ1BVICovCi0jdW5kZWYgVEFSR0VUX0NQVQotCi0vKiBEZWZpbmUgaWYgd2Ugc2hvdWxkIHBvaXNvbiBkZWFsbG9jYXRlZCBtZW1vcnkgKi8KLSN1bmRlZiBVU0VfUE9JU09OSU5HCi0KLS8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KLSN1bmRlZiBWRVJTSU9OCi0KLS8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAotICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCi0jaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKLSMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXwotIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCi0jIGVuZGlmCi0jZWxzZQotIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCi0jICB1bmRlZiBXT1JEU19CSUdFTkRJQU4KLSMgZW5kaWYKLSNlbmRpZgotCi0vKiBFbmFibGUgbGFyZ2UgaW5vZGUgbnVtYmVycyBvbiBNYWMgT1MgWCAxMC41LiAgKi8KLSNpZm5kZWYgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFCi0jIGRlZmluZSBfREFSV0lOX1VTRV82NF9CSVRfSU5PREUgMQotI2VuZGlmCi0KLS8qIE51bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuICovCi0jdW5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKLQotLyogRGVmaW5lIHRvIDEgdG8gbWFrZSBmc2Vla28gdmlzaWJsZSBvbiBzb21lIGhvc3RzIChlLmcuIGdsaWJjIDIuMikuICovCi0jdW5kZWYgX0xBUkdFRklMRV9TT1VSQ0UKLQotLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLiAqLwotI3VuZGVmIF9MQVJHRV9GSUxFUwotCi0vKiBXZSBuZWVkIGF0IGxlYXN0IFdpblhQIFNQMiBmb3IgX19zdGF0NjQgKi8KLSN1bmRlZiBfX01TVkNSVF9WRVJTSU9OX18KLQotLyogY2xvY2tpZF90ICovCi0jdW5kZWYgY2xvY2tpZF90Ci0KLS8qIERlZmluZSB0byB0aGUgd2lkZXN0IHNpZ25lZCBpbnRlZ2VyIHR5cGUgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvCi0gICBub3QgZGVmaW5lLiAqLwotI3VuZGVmIGludG1heF90Ci0KLS8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KLSN1bmRlZiBzaXplX3QKLQotLyogdGltZXJfdCAqLwotI3VuZGVmIHRpbWVyX3QKZGlmZiAtLWdpdCBhL2NvbmZpZy5ycGF0aCBiL2NvbmZpZy5ycGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYzU0N2M2OC4uMDAwMDAwMAotLS0gYS9jb25maWcucnBhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2NjYgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBPdXRwdXQgYSBzeXN0ZW0gZGVwZW5kZW50IHNldCBvZiB2YXJpYWJsZXMsIGRlc2NyaWJpbmcgaG93IHRvIHNldCB0aGUKLSMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgotIwotIyAgIENvcHlyaWdodCAxOTk2LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQotIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0jCi0jICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKLSMgICB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSMgICBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLSMKLSMgVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBob3N0IHNwZWNpZmljYXRpb24sCi0jICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCi0jIG9yCi0jICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQotIyBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIENDLCBHQ0MsIExERkxBR1MsIExELCB3aXRoX2dudV9sZAotIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCi0jCi0jIFRoZSBzZXQgb2YgZGVmaW5lZCB2YXJpYWJsZXMgaXMgYXQgdGhlIGVuZCBvZiB0aGlzIHNjcmlwdC4KLQotIyBLbm93biBsaW1pdGF0aW9uczoKLSMgLSBPbiBJUklYIDYuNSB3aXRoIENDPSJjYyIsIHRoZSBydW4gdGltZSBzZWFyY2ggcGF0Y2ggbXVzdCBub3QgYmUgbG9uZ2VyCi0jICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQotIyAgIGtub3duIHdvcmthcm91bmQgaXMgdG8gY2hvb3NlIHNob3J0ZXIgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgYnVpbGQKLSMgICBkaXJlY3RvcnkgYW5kL29yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgotCi0jIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKLSMgd2hpY2ggbmVlZHMgJy5saWInKS4KLWxpYmV4dD1hCi1zaHJleHQ9LnNvCi0KLWhvc3Q9IiQxIgotaG9zdF9jcHU9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCi1ob3N0X3ZlbmRvcj1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKLWhvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCi0KLSMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ0NfQkFTRU5BTUUuCi0KLWZvciBjY190ZW1wIGluICRDQyIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YGVjaG8gIiRjY190ZW1wIiB8IHNlZCAtZSAncyVeLiovJSUnYAotCi0jIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQy4KLQotd2w9Ci1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB3bD0nLVdsLCcKLWVsc2UKLSAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgYWl4KikKLSAgICAgIHdsPSctV2wsJwotICAgICAgOzsKLSAgICBkYXJ3aW4qKQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgICB3bD0nLVdsLCcKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgOzsKLSAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgICAgIHdsPSctV2wsJwotICAgICAgOzsKLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIG5ld3NvczYpCi0gICAgICA7OwotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICBpY2MqIHwgZWNjKikKLSAgICAgICAgICB3bD0nLVdsLCcKLSAgICAgICAgICA7OwotICAgICAgICBwZ2NjIHwgcGdmNzcgfCBwZ2Y5MCkKLSAgICAgICAgICB3bD0nLVdsLCcKLSAgICAgICAgICA7OwotICAgICAgICBjY2MqKQotICAgICAgICAgIHdsPSctV2wsJwotICAgICAgICAgIDs7Ci0gICAgICAgIGNvbW8pCi0gICAgICAgICAgd2w9Jy1sb3B0PScKLSAgICAgICAgICA7OwotICAgICAgICAqKQotICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotICAgICAgICAgICAgKlN1blwgQyopCi0gICAgICAgICAgICAgIHdsPSctV2wsJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICB3bD0nLVdsLCcKLSAgICAgIDs7Ci0gICAgcmRvcyopCi0gICAgICA7OwotICAgIHNvbGFyaXMqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIHN1bm9zNCopCi0gICAgICB3bD0nLVFvcHRpb24gbGQgJwotICAgICAgOzsKLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICB3bD0nLVdsLCcKLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgOzsKLSAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIHVuaWNvcyopCi0gICAgICB3bD0nLVdsLCcKLSAgICAgIDs7Ci0gICAgdXRzNCopCi0gICAgICA7OwotICBlc2FjCi1maQotCi0jIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUy4KLQotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9Ci1oYXJkY29kZV9kaXJlY3Q9bm8KLWhhcmRjb2RlX21pbnVzX0w9bm8KLQotY2FzZSAiJGhvc3Rfb3MiIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCi0gICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICBmaQotICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICA7OwotZXNhYwotCi1sZF9zaGxpYnM9eWVzCi1pZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCi0gICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQotICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICMgVW5saWtlIGxpYnRvb2wsIHdlIHVzZSAtcnBhdGggaGVyZSwgbm90IC0tcnBhdGgsIHNpbmNlIHRoZSBkb2N1bWVudGVkCi0gICMgb3B0aW9uIG9mIEdOVSBsZCBpcyBjYWxsZWQgLXJwYXRoLCBub3QgLS1ycGF0aC4KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBhbWlnYW9zKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cwotICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKLSAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAotICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKLSAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbm5vdCB1c2UKLSAgICAgICMgdGhlbS4KLSAgICAgIGxkX3NobGlicz1ubwotICAgICAgOzsKLSAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICA6Ci0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICA6Ci0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIDs7Ci0gICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgOgotICAgICAgZWxzZQotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIG5ldGJzZCopCi0gICAgICA7OwotICAgIHNvbGFyaXMqKQotICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICA6Ci0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgotICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQotICAgICAgICAgIGxkX3NobGlicz1ubwotICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICAgICAgZmkKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBzdW5vczQqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgOzsKLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIDoKLSAgICAgIGVsc2UKLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgZXNhYwotICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vOyB0aGVuCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLSAgZmkKLWVsc2UKLSAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgYWl4MyopCi0gICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQotICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICAgICMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotICAgICAgICAjIGJyb2tlbiBjb2xsZWN0Mi4KLSAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLSAgICBhaXg0KiB8IGFpeDUqKQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotICAgICAgZWxzZQotICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0gICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLSAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLSAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCi0gICAgICAgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAgICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZmkKLSAgICAgICAgICBkb25lCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLSAgICAgICAgICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0gICAgICAgICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0gICAgICAgICAgdGhlbgotICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0gICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLSAgICAgICAgICBmaQotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICAjIEJlZ2luIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCi0gICAgICBlY2hvICdpbnQgbWFpbiAoKSB7IHJldHVybiAwOyB9JyA+IGNvbmZ0ZXN0LmMKLSAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAotICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQotfSdgCi0gICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gICAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KLX0nYAotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgICAgICAgYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiCi0gICAgICBmaQotICAgICAgcm0gLWYgY29uZnRlc3QuYyBjb25mdGVzdAotICAgICAgIyBFbmQgX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgZWxzZQotICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotICAgICAgICBlbHNlCi0gICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIGxkX3NobGlicz1ubwotICAgICAgOzsKLSAgICBic2RpWzQ1XSopCi0gICAgICA7OwotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0gICAgICBsaWJleHQ9bGliCi0gICAgICA7OwotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgICAgICA6Ci0gICAgICBlbHNlCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgeGxjKikKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgKikKLSAgICAgICAgICAgIGxkX3NobGlicz1ubwotICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZGd1eCopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICA7OwotICAgIGZyZWVic2QxKikKLSAgICAgIGxkX3NobGlicz1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkMi4yKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIDs7Ci0gICAgZnJlZWJzZDIqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIDs7Ci0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgOzsKLSAgICBocHV4OSopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIDs7Ci0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgICAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgIDs7Ci0gICAgbmV0YnNkKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIDs7Ci0gICAgbmV3c29zNikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgOzsKLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0gICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgotICAgICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKLSAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgICAgICAgICAgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgb3MyKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICA7OwotICAgIG9zZjMqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICA7OwotICAgIG9zZjQqIHwgb3NmNSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0gICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5Ci0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgOzsKLSAgICBzb2xhcmlzKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgIDs7Ci0gICAgc3Vub3M0KikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICA7OwotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICAgICAgc25pKQotICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/Ci0gICAgICAgICAgOzsKLSAgICAgICAgc2llbWVucykKLSAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KLSAgICAgICAgICA7OwotICAgICAgICBtb3Rvcm9sYSkKLSAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIHN5c3Y0LjMqKQotICAgICAgOzsKLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0gICAgICAgIGxkX3NobGlicz15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgICA7OwotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCi0gICAgICA7OwotICAgIHV0czQqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgOzsKLSAgICAqKQotICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICA7OwotICBlc2FjCi1maQotCi0jIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcwotIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSLgotIyBVbmxpa2UgbGlidG9vbC5tNCwgaGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IF9hbGxfIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LCBidXQKLSMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0Ci0jIGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQsIG9yIHBvc3NpYmx5IHR3byBvZiB0aGVtIGlmIHRoZQotIyBsaW5rZXIgaGFzIHNwZWNpYWwgc2VhcmNoIHJ1bGVzLgotbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLWNhc2UgIiRob3N0X29zIiBpbgotICBhaXgzKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCi0gICAgOzsKLSAgYWl4NCogfCBhaXg1KikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBhbWlnYW9zKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCi0gICAgOzsKLSAgYmVvcyopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgYnNkaVs0NV0qKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICBzaHJleHQ9LmRsbAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEgJGxpYm5hbWUubGliJwotICAgIDs7Ci0gIGRhcndpbiogfCByaGFwc29keSopCi0gICAgc2hyZXh0PS5keWxpYgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGRndXgqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGZyZWVic2QxKikKLSAgICA7OwotICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgICBmcmVlYnNkWzEyM10qKQotICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnIDs7Ci0gICAgICAqKQotICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZ251KikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaWE2NCopCi0gICAgICAgIHNocmV4dD0uc28KLSAgICAgICAgOzsKLSAgICAgIGhwcGEqNjQqKQotICAgICAgICBzaHJleHQ9LnNsCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBzaHJleHQ9LnNsCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGludGVyaXhbMy05XSopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgJExEIGluCi0gICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OwotICAgICAgICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiA7OwotICAgICAgICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKSBsaWJzdWZmPTY0IHNobGlic3VmZj02NCA7OwotICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAga25ldGJzZCotZ251KQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIG5ldGJzZCopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgbmV3c29zNikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBudG8tcW54KikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCi0gICAgOzsKLSAgb3MyKikKLSAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICAgIHNocmV4dD0uZGxsCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJwotICAgIDs7Ci0gIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICByZG9zKikKLSAgICA7OwotICBzb2xhcmlzKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBzdW5vczQqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKLSAgICA7OwotICBzeXN2NCB8IHN5c3Y0LjMqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIHN5c3Y0Kk1QKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICB1dHM0KikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotZXNhYwotCi1zZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJwotZXNjYXBlZF93bD1gZWNobyAiWCR3bCIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKLWVzY2FwZWRfbGlibmFtZV9zcGVjPWBlY2hvICJYJGxpYm5hbWVfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWM9YGVjaG8gIlgkbGlicmFyeV9uYW1lc19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi1lc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotCi1MQ19BTEw9QyBzZWQgLWUgJ3MvXlwoW2EtekEtWjAtOV9dKlwpPS9hY2xfY3ZfXDE9LycgPDxFT0YKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9IiRlc2NhcGVkX3dsIgotCi0jIFN0YXRpYyBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJzbyIpLgotc2hsaWJleHQ9IiRzaGxpYmV4dCIKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgotCi0jIExpYnJhcnkgbmFtZXMgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0iJGhhcmRjb2RlX2RpcmVjdCIKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgotCi1FT0YKZGlmZiAtLWdpdCBhL2NvbmZpZy5zdWIgYi9jb25maWcuc3ViCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkZDJjYTkzLi4wMDAwMDAwCi0tLSBhL2NvbmZpZy5zdWIKKysrIC9kZXYvbnVsbApAQCAtMSwxODI1ICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgotIyAgIENvcHlyaWdodCAxOTkyLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLXRpbWVzdGFtcD0nMjAxNi0xMS0wNCcKLQotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0jIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0Ci0jIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3Ci0jIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KLQotCi0jIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LgotIwotIyBDb25maWd1cmF0aW9uIHN1YnJvdXRpbmUgdG8gdmFsaWRhdGUgYW5kIGNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gdHlwZS4KLSMgU3VwcGx5IHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlIGFzIGFuIGFyZ3VtZW50LgotIyBJZiBpdCBpcyBpbnZhbGlkLCB3ZSBwcmludCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0ZGVyciBhbmQgZXhpdCB3aXRoIGNvZGUgMS4KLSMgT3RoZXJ3aXNlLCB3ZSBwcmludCB0aGUgY2Fub25pY2FsIGNvbmZpZyB0eXBlIG9uIHN0ZG91dCBhbmQgc3VjY2VlZC4KLQotIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKLSMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWIKLQotIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKLSMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCi0jIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCi0jIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCi0jIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAotIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCi0jIGNvbmZpZ3VyYXRpb24uCi0KLSMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCi0jIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06Ci0jCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCi0jIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKLSMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCi0jIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KLQotbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCi0KLXVzYWdlPSJcCi1Vc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUyBvciBBTElBUwotCi1DYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCi0KLU9wZXJhdGlvbiBtb2RlczoKLSAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0Ci0gIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKLSAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKLQotUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKLQotdmVyc2lvbj0iXAotR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCi0KLUNvcHlyaWdodCAxOTkyLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLVRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCi13YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCi0KLWhlbHA9IgotVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgotCi0jIFBhcnNlIGNvbW1hbmQgbGluZQotd2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCi0gIGNhc2UgJDEgaW4KLSAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQotICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OwotICAgIC0tdmVyc2lvbiB8IC12ICkKLSAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7Ci0gICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKLSAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7Ci0gICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCi0gICAgICAgc2hpZnQ7IGJyZWFrIDs7Ci0gICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgotICAgICAgIGJyZWFrIDs7Ci0gICAgLSogKQotICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKLSAgICAgICBleGl0IDEgOzsKLQotICAgICpsb2NhbCopCi0gICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCi0gICAgICAgZWNobyAkMQotICAgICAgIGV4aXQgOzsKLQotICAgICogKQotICAgICAgIGJyZWFrIDs7Ci0gIGVzYWMKLWRvbmUKLQotY2FzZSAkIyBpbgotIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKLSAgICBleGl0IDE7OwotIDEpIDs7Ci0gKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCi0gICAgZXhpdCAxOzsKLWVzYWMKLQotIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgotIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KLW1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAotY2FzZSAkbWF5YmVfb3MgaW4KLSAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBcCi0gIGxpbnV4LW11c2wqIHwgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAotICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1lYWJpKiB8IFwKLSAga29wZW5zb2xhcmlzKi1nbnUqIHwgY2xvdWRhYmkqLWVhYmkqIHwgXAotICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCi0gICAgb3M9LSRtYXliZV9vcwotICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCi0gICAgOzsKLSAgYW5kcm9pZC1saW51eCkKLSAgICBvcz0tbGludXgtYW5kcm9pZAotICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgLXVua25vd24KLSAgICA7OwotICAqKQotICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKLSAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KLSAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCi0gICAgZWxzZSBvcz07IGZpCi0gICAgOzsKLWVzYWMKLQotIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCi0jIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbwotIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQotIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCi1jYXNlICRvcyBpbgotCS1zdW4qb3MqKQotCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KLQkJOzsKLQktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAotCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAotCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCi0JLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKLQktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAotCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAotCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSopCi0JCW9zPQotCQliYXNpY19tYWNoaW5lPSQxCi0JCTs7Ci0JLWJsdWVnZW5lKikKLQkJb3M9LWNuawotCQk7OwotCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQotCQlvcz0KLQkJYmFzaWNfbWFjaGluZT0kMQotCQk7OwotCS1zY291dCkKLQkJOzsKLQktd3JzKQotCQlvcz0tdnh3b3JrcwotCQliYXNpY19tYWNoaW5lPSQxCi0JCTs7Ci0JLWNob3J1c29zKikKLQkJb3M9LWNob3J1c29zCi0JCWJhc2ljX21hY2hpbmU9JDEKLQkJOzsKLQktY2hvcnVzcmRiKQotCQlvcz0tY2hvcnVzcmRiCi0JCWJhc2ljX21hY2hpbmU9JDEKLQkJOzsKLQktaGl1eCopCi0JCW9zPS1oaXV4d2UyCi0JCTs7Ci0JLXNjbzYpCi0JCW9zPS1zY281djYKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY281KQotCQlvcz0tc2NvMy4ydjUKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY280KQotCQlvcz0tc2NvMy4ydjQKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY28zLjIuWzQtOV0qKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvc2NvMy4yLi9zY28zLjJ2LydgCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktc2NvMy4ydls0LTldKikKLQkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY281djYqKQotCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCi0JCTs7Ci0JLXNjbyopCi0JCW9zPS1zY28zLjJ2MgotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCi0JCTs7Ci0JLXVkayopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktaXNjKQotCQlvcz0taXNjMi4yCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktY2xpeCopCi0JCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1pbnRlcmdyYXBoCi0JCTs7Ci0JLWlzYyopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktbHlueCoxNzgpCi0JCW9zPS1seW54b3MxNzgKLQkJOzsKLQktbHlueCo1KQotCQlvcz0tbHlueG9zNQotCQk7OwotCS1seW54KikKLQkJb3M9LWx5bnhvcwotCQk7OwotCS1wdHgqKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXNlcXVlbnQvJ2AKLQkJOzsKLQktd2luZG93c250KikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3dpbmRvd3NudC93aW5udC8nYAotCQk7OwotCS1wc29zKikKLQkJb3M9LXBzb3MKLQkJOzsKLQktbWludCB8IC1taW50WzAtOV0qKQotCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKLQkJb3M9LW1pbnQKLQkJOzsKLWVzYWMKLQotIyBEZWNvZGUgYWxpYXNlcyBmb3IgY2VydGFpbiBDUFUtQ09NUEFOWSBjb21iaW5hdGlvbnMuCi1jYXNlICRiYXNpY19tYWNoaW5lIGluCi0JIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZS4KLQkjIFNvbWUgYXJlIG9taXR0ZWQgaGVyZSBiZWNhdXNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGJlbG93LgotCTE3NTBhIHwgNTgwIFwKLQl8IGEyOWsgXAotCXwgYWFyY2g2NCB8IGFhcmNoNjRfYmUgXAotCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKLQl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAotCXwgYW0zM18yLjAgXAotCXwgYXJjIHwgYXJjZWIgXAotCXwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMi04XSB8IGFybXZbMy04XVtsYl0gfCBhcm12N1thcm1dIFwKLQl8IGF2ciB8IGF2cjMyIFwKLQl8IGJhIFwKLQl8IGJlMzIgfCBiZTY0IFwKLQl8IGJmaW4gXAotCXwgYzR4IHwgYzgwNTEgfCBjbGlwcGVyIFwKLQl8IGQxMHYgfCBkMzB2IHwgZGx4IHwgZHNwMTZ4eCBcCi0JfCBlMmsgfCBlcGlwaGFueSBcCi0JfCBmaWRvIHwgZnIzMCB8IGZydiB8IGZ0MzIgXAotCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKLQl8IGhleGFnb24gXAotCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCi0JfCBpcDJrIHwgaXEyMDAwIFwKLQl8IGsxb20gXAotCXwgbGUzMiB8IGxlNjQgXAotCXwgbG0zMiBcCi0JfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKLQl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtaWNyb2JsYXplZWwgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKLQl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAotCXwgbWlwczE2IFwKLQl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKLQl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKLQl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCi0JfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAotCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKLQl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKLQl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKLQl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKLQl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKLQl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKLQl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCi0JfCBtaXBzaXNhMzJyNiB8IG1pcHNpc2EzMnI2ZWwgXAotCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAotCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKLQl8IG1pcHNpc2E2NHI2IHwgbWlwc2lzYTY0cjZlbCBcCi0JfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCi0JfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAotCXwgbWlwc3I1OTAwIHwgbWlwc3I1OTAwZWwgXAotCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKLQl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKLQl8IG1veGllIFwKLQl8IG10IFwKLQl8IG1zcDQzMCBcCi0JfCBuZHMzMiB8IG5kczMybGUgfCBuZHMzMmJlIFwKLQl8IG5pb3MgfCBuaW9zMiB8IG5pb3MyZWIgfCBuaW9zMmVsIFwKLQl8IG5zMTZrIHwgbnMzMmsgXAotCXwgb3BlbjggfCBvcjFrIHwgb3Ixa25kIHwgb3IzMiBcCi0JfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAotCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIFwKLQl8IHBydSBcCi0JfCBweXJhbWlkIFwKLQl8IHJpc2N2MzIgfCByaXNjdjY0IFwKLQl8IHJsNzggfCByeCBcCi0JfCBzY29yZSBcCi0JfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFsyMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKLQl8IHNoNjQgfCBzaDY0bGUgXAotCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAotCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKLQl8IHNwdSBcCi0JfCB0YWhvZSB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAotCXwgdWJpY29tMzIgXAotCXwgdjg1MCB8IHY4NTBlIHwgdjg1MGUxIHwgdjg1MGUyIHwgdjg1MGVzIHwgdjg1MGUydjMgXAotCXwgdmlzaXVtIFwKLQl8IHdlMzJrIFwKLQl8IHg4NiB8IHhjMTZ4IHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKLQl8IHo4ayB8IHo4MCkKLQkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCi0JCTs7Ci0JYzU0eCkKLQkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgotCQk7OwotCWM1NXgpCi0JCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KLQkJOzsKLQljNngpCi0JCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgotCQk7OwotCWxlb258bGVvblszLTldKQotCQliYXNpY19tYWNoaW5lPXNwYXJjLSRiYXNpY19tYWNoaW5lCi0JCTs7Ci0JbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgbTY4aGNzMTJ4IHwgbnZwdHggfCBwaWNvY2hpcCkKLQkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCi0JCW9zPS1ub25lCi0JCTs7Ci0JbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUgfCB6OGspCi0JCTs7Ci0JbXMxKQotCQliYXNpY19tYWNoaW5lPW10LXVua25vd24KLQkJOzsKLQotCXN0cm9uZ2FybSB8IHRodW1iIHwgeHNjYWxlKQotCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCi0JCTs7Ci0JeGdhdGUpCi0JCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgotCQlvcz0tbm9uZQotCQk7OwotCXhzY2FsZWViKQotCQliYXNpY19tYWNoaW5lPWFybWViLXVua25vd24KLQkJOzsKLQotCXhzY2FsZWVsKQotCQliYXNpY19tYWNoaW5lPWFybWVsLXVua25vd24KLQkJOzsKLQotCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCi0JIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCi0JIyAoMikgdGhlIHdvcmQgInVua25vd24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgotCWkqODYgfCB4ODZfNjQpCi0JICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCi0JICA7OwotCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCi0JKi0qLSopCi0JCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgotCQlleGl0IDEKLQkJOzsKLQkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgotCTU4MC0qIFwKLQl8IGEyOWstKiBcCi0JfCBhYXJjaDY0LSogfCBhYXJjaDY0X2JlLSogXAotCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCi0JfCBhbHBoYTY0LSogfCBhbHBoYTY0ZXZbNC04XS0qIHwgYWxwaGE2NGV2NTYtKiB8IGFscGhhNjRldjZbNzhdLSogXAotCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiB8IGFyY2ViLSogXAotCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCi0JfCBhdnItKiB8IGF2cjMyLSogXAotCXwgYmEtKiBcCi0JfCBiZTMyLSogfCBiZTY0LSogXAotCXwgYmZpbi0qIHwgYnMyMDAwLSogXAotCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogXAotCXwgYzgwNTEtKiB8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCi0JfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCi0JfCBlMmstKiB8IGVseHNpLSogXAotCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAotCXwgaDgzMDAtKiB8IGg4NTAwLSogXAotCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKLQl8IGhleGFnb24tKiBcCi0JfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAotCXwgaXAyay0qIHwgaXEyMDAwLSogXAotCXwgazFvbS0qIFwKLQl8IGxlMzItKiB8IGxlNjQtKiBcCi0JfCBsbTMyLSogXAotCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAotCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKLQl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogXAotCXwgbWljcm9ibGF6ZS0qIHwgbWljcm9ibGF6ZWVsLSogXAotCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAotCXwgbWlwczE2LSogXAotCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKLQl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCi0JfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKLQl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAotCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCi0JfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAotCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKLQl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCi0JfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAotCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKLQl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAotCXwgbWlwc2lzYTMycjYtKiB8IG1pcHNpc2EzMnI2ZWwtKiBcCi0JfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAotCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCi0JfCBtaXBzaXNhNjRyNi0qIHwgbWlwc2lzYTY0cjZlbC0qIFwKLQl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCi0JfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKLQl8IG1pcHNyNTkwMC0qIHwgbWlwc3I1OTAwZWwtKiBcCi0JfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKLQl8IG1taXgtKiBcCi0JfCBtdC0qIFwKLQl8IG1zcDQzMC0qIFwKLQl8IG5kczMyLSogfCBuZHMzMmxlLSogfCBuZHMzMmJlLSogXAotCXwgbmlvcy0qIHwgbmlvczItKiB8IG5pb3MyZWItKiB8IG5pb3MyZWwtKiBcCi0JfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKLQl8IG9wZW44LSogXAotCXwgb3IxayotKiBcCi0JfCBvcmlvbi0qIFwKLQl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAotCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXAotCXwgcHJ1LSogXAotCXwgcHlyYW1pZC0qIFwKLQl8IHJpc2N2MzItKiB8IHJpc2N2NjQtKiBcCi0JfCBybDc4LSogfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAotCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAotCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCi0JfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCi0JfCBzcGFyY2xpdGUtKiBcCi0JfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN2MS0qIHwgc3gqLSogXAotCXwgdGFob2UtKiBcCi0JfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCi0JfCB0aWxlKi0qIFwKLQl8IHRyb24tKiBcCi0JfCB1Ymljb20zMi0qIFwKLQl8IHY4NTAtKiB8IHY4NTBlLSogfCB2ODUwZTEtKiB8IHY4NTBlcy0qIHwgdjg1MGUyLSogfCB2ODUwZTJ2My0qIFwKLQl8IHZheC0qIFwKLQl8IHZpc2l1bS0qIFwKLQl8IHdlMzJrLSogXAotCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiBcCi0JfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCi0JfCB5bXAtKiBcCi0JfCB6OGstKiB8IHo4MC0qKQotCQk7OwotCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KLQl4dGVuc2EqKQotCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KLQkJOzsKLQkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCi0JIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KLQkzODZic2QpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCi0JCW9zPS1ic2QKLQkJOzsKLQkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0Ci0JCTs7Ci0JM2IqKQotCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAotCQk7OwotCWEyOWtoaWYpCi0JCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKLQkJb3M9LXVkaQotCQk7OwotCWFiYWN1cykKLQkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgotCQk7OwotCWFkb2JlNjhrKQotCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQotCQlvcz0tc2NvdXQKLQkJOzsKLQlhbGxpYW50IHwgZng4MCkKLQkJYmFzaWNfbWFjaGluZT1meDgwLWFsbGlhbnQKLQkJOzsKLQlhbHRvcyB8IGFsdG9zMzA2OCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWFsdG9zCi0JCTs7Ci0JYW0yOWspCi0JCWJhc2ljX21hY2hpbmU9YTI5ay1ub25lCi0JCW9zPS1ic2QKLQkJOzsKLQlhbWQ2NCkKLQkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKLQkJOzsKLQlhbWQ2NC0qKQotCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCWFtZGFobCkKLQkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JYW1pZ2EgfCBhbWlnYS0qKQotCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgotCQk7OwotCWFtaWdhb3MgfCBhbWlnYWRvcykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KLQkJb3M9LWFtaWdhb3MKLQkJOzsKLQlhbWlnYXVuaXggfCBhbWl4KQotCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgotCQlvcz0tc3lzdjQKLQkJOzsKLQlhcG9sbG82OCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbwotCQlvcz0tc3lzdgotCQk7OwotCWFwb2xsbzY4YnNkKQotCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCi0JCW9zPS1ic2QKLQkJOzsKLQlhcm9zKQotCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJb3M9LWFyb3MKLQkJOzsKLQlhc21qcykKLQkJYmFzaWNfbWFjaGluZT1hc21qcy11bmtub3duCi0JCTs7Ci0JYXV4KQotCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKLQkJb3M9LWF1eAotCQk7OwotCWJhbGFuY2UpCi0JCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAotCQlvcz0tZHluaXgKLQkJOzsKLQlibGFja2ZpbikKLQkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JYmxhY2tmaW4tKikKLQkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCW9zPS1saW51eAotCQk7OwotCWJsdWVnZW5lKikKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQotCQlvcz0tY25rCi0JCTs7Ci0JYzU0eC0qKQotCQliYXNpY19tYWNoaW5lPXRpYzU0eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCWM1NXgtKikKLQkJYmFzaWNfbWFjaGluZT10aWM1NXgtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQljNngtKikKLQkJYmFzaWNfbWFjaGluZT10aWM2eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCWM5MCkKLQkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQotCQlvcz0tdW5pY29zCi0JCTs7Ci0JY2VnY2MpCi0JCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KLQkJb3M9LWNlZ2NjCi0JCTs7Ci0JY29udmV4LWMxKQotCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAotCQlvcz0tYnNkCi0JCTs7Ci0JY29udmV4LWMyKQotCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAotCQlvcz0tYnNkCi0JCTs7Ci0JY29udmV4LWMzMikKLQkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4Ci0JCW9zPS1ic2QKLQkJOzsKLQljb252ZXgtYzM0KQotCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKLQkJb3M9LWJzZAotCQk7OwotCWNvbnZleC1jMzgpCi0JCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAotCQlvcz0tYnNkCi0JCTs7Ci0JY3JheSB8IGo5MCkKLQkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQotCQlvcz0tdW5pY29zCi0JCTs7Ci0JY3JheW52KQotCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5Ci0JCW9zPS11bmljb3NtcAotCQk7OwotCWNyMTYgfCBjcjE2LSopCi0JCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCi0JCW9zPS1lbGYKLQkJOzsKLQljcmRzIHwgdW5vcykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKLQkJOzsKLQljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCi0JCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCi0JCTs7Ci0JY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKLQkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKLQkJOzsKLQljcngpCi0JCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KLQkJb3M9LWVsZgotCQk7OwotCWRhMzAgfCBkYTMwLSopCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCi0JCTs7Ci0JZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQotCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCi0JCTs7Ci0JZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQotCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYwotCQlvcz0tdG9wczEwCi0JCTs7Ci0JZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQotCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYwotCQlvcz0tdG9wczIwCi0JCTs7Ci0JZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKLQkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCi0JCTs7Ci0JZGVsdGE4OCkKLQkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCi0JCW9zPS1zeXN2MwotCQk7OwotCWRpY29zKQotCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKLQkJb3M9LWRpY29zCi0JCTs7Ci0JZGpncHApCi0JCWJhc2ljX21hY2hpbmU9aTU4Ni1wYwotCQlvcz0tbXNkb3NkamdwcAotCQk7OwotCWRweDIwIHwgZHB4MjAtKikKLQkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAotCQlvcz0tYm9zeAotCQk7OwotCWRweDIqIHwgZHB4MiotYnVsbCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKLQkJb3M9LXN5c3YzCi0JCTs7Ci0JZTUwMHZbMTJdKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgotCQlvcz0kb3Mic3BlIgotCQk7OwotCWU1MDB2WzEyXS0qKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJb3M9JG9zInNwZSIKLQkJOzsKLQllYm1vbjI5aykKLQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQlvcz0tZWJtb24KLQkJOzsKLQllbHhzaSkKLQkJYmFzaWNfbWFjaGluZT1lbHhzaS1lbHhzaQotCQlvcz0tYnNkCi0JCTs7Ci0JZW5jb3JlIHwgdW1heCB8IG1tYXgpCi0JCWJhc2ljX21hY2hpbmU9bnMzMmstZW5jb3JlCi0JCTs7Ci0JZXMxODAwIHwgT1NFNjhrIHwgb3NlNjhrIHwgb3NlIHwgT1NFKQotCQliYXNpY19tYWNoaW5lPW02OGstZXJpY3Nzb24KLQkJb3M9LW9zZQotCQk7OwotCWZ4MjgwMCkKLQkJYmFzaWNfbWFjaGluZT1pODYwLWFsbGlhbnQKLQkJOzsKLQlnZW5peCkKLQkJYmFzaWNfbWFjaGluZT1uczMyay1ucwotCQk7OwotCWdtaWNybykKLQkJYmFzaWNfbWFjaGluZT10cm9uLWdtaWNybwotCQlvcz0tc3lzdgotCQk7OwotCWdvMzIpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQlvcz0tZ28zMgotCQk7OwotCWgzMDUwciogfCBoaXV4KikKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKLQkJb3M9LWhpdXh3ZTIKLQkJOzsKLQloODMwMGhtcykKLQkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCi0JCW9zPS1obXMKLQkJOzsKLQloODMwMHhyYXkpCi0JCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQotCQlvcz0teHJheQotCQk7OwotCWg4NTAwaG1zKQotCQliYXNpY19tYWNoaW5lPWg4NTAwLWhpdGFjaGkKLQkJb3M9LWhtcwotCQk7OwotCWhhcnJpcykKLQkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcwotCQlvcz0tc3lzdjMKLQkJOzsKLQlocDMwMC0qKQotCQliYXNpY19tYWNoaW5lPW02OGstaHAKLQkJOzsKLQlocDMwMGJzZCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCi0JCW9zPS1ic2QKLQkJOzsKLQlocDMwMGhwdXgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1ocAotCQlvcz0taHB1eAotCQk7OwotCWhwM2s5WzAtOV1bMC05XSB8IGhwOVswLTldWzAtOV0pCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAotCQk7OwotCWhwOWsyWzAtOV1bMC05XSB8IGhwOWszMVswLTldKQotCQliYXNpY19tYWNoaW5lPW02ODAwMC1ocAotCQk7OwotCWhwOWszWzItOV1bMC05XSkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCi0JCTs7Ci0JaHA5azZbMC05XVswLTldIHwgaHA2WzAtOV1bMC05XSkKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCi0JCTs7Ci0JaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKLQkJOzsKLQlocDlrNzhbMC05XSB8IGhwNzhbMC05XSkKLQkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCTs7Ci0JaHA5azhbNjddMSB8IGhwOFs2N10xIHwgaHA5azgwWzI0XSB8IGhwODBbMjRdIHwgaHA5azhbNzhdOSB8IGhwOFs3OF05IHwgaHA5azg5MyB8IGhwODkzKQotCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKLQkJOzsKLQlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCTs7Ci0JaHA5azhbMC05XVswLTldIHwgaHA4WzAtOV1bMC05XSkKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCi0JCTs7Ci0JaHBwYS1uZXh0KQotCQlvcz0tbmV4dHN0ZXAzCi0JCTs7Ci0JaHBwYW9zZikKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCW9zPS1vc2YKLQkJOzsKLQlocHBybykKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCW9zPS1wcm9lbGYKLQkJOzsKLQlpMzcwLWlibSogfCBpYm0qKQotCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCi0JCTs7Ci0JaSo4NnYzMikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCi0JCW9zPS1zeXN2MzIKLQkJOzsKLQlpKjg2djQqKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKLQkJb3M9LXN5c3Y0Ci0JCTs7Ci0JaSo4NnYpCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAotCQlvcz0tc3lzdgotCQk7OwotCWkqODZzb2wyKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKLQkJb3M9LXNvbGFyaXMyCi0JCTs7Ci0JaTM4Nm1hY2gpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCi0JCW9zPS1tYWNoCi0JCTs7Ci0JaTM4Ni12c3RhIHwgdnN0YSkKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KLQkJb3M9LXZzdGEKLQkJOzsKLQlpcmlzIHwgaXJpczRkKQotCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCi0JCWNhc2UgJG9zIGluCi0JCSAgICAtaXJpeCopCi0JCQk7OwotCQkgICAgKikKLQkJCW9zPS1pcml4NAotCQkJOzsKLQkJZXNhYwotCQk7OwotCWlzaTY4IHwgaXNpKQotCQliYXNpY19tYWNoaW5lPW02OGstaXNpCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JbGVvbi0qfGxlb25bMy05XS0qKQotCQliYXNpY19tYWNoaW5lPXNwYXJjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzLy0uKi8vJ2AKLQkJOzsKLQltNjhrbm9tbXUpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCi0JCW9zPS1saW51eAotCQk7OwotCW02OGtub21tdS0qKQotCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JbTg4ay1vbXJvbiopCi0JCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgotCQk7OwotCW1hZ251bSB8IG0zMjMwKQotCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcwotCQlvcz0tc3lzdgotCQk7OwotCW1lcmxpbikKLQkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JbWljcm9ibGF6ZSopCi0JCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKLQkJOzsKLQltaW5ndzY0KQotCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYwotCQlvcz0tbWluZ3c2NAotCQk7OwotCW1pbmd3MzIpCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQlvcz0tbWluZ3czMgotCQk7OwotCW1pbmd3MzJjZSkKLQkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgotCQlvcz0tbWluZ3czMmNlCi0JCTs7Ci0JbWluaWZyYW1lKQotCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50Ci0JCTs7Ci0JKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQotCQlvcz0tbWludAotCQk7OwotCW1pcHMzKi0qKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAotCQk7OwotCW1pcHMzKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgotCQk7OwotCW1vbml0b3IpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKLQkJb3M9LWNvZmYKLQkJOzsKLQltb3JwaG9zKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgotCQlvcz0tbW9ycGhvcwotCQk7OwotCW1veGllYm94KQotCQliYXNpY19tYWNoaW5lPW1veGllLXVua25vd24KLQkJb3M9LW1veGllYm94Ci0JCTs7Ci0JbXNkb3MpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQlvcz0tbXNkb3MKLQkJOzsKLQltczEtKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAotCQk7OwotCW1zeXMpCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQlvcz0tbXN5cwotCQk7OwotCW12cykKLQkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQotCQlvcz0tbXZzCi0JCTs7Ci0JbmFjbCkKLQkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KLQkJb3M9LW5hY2wKLQkJOzsKLQluY3IzMDAwKQotCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCi0JCW9zPS1zeXN2NAotCQk7OwotCW5ldGJzZDM4NikKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KLQkJb3M9LW5ldGJzZAotCQk7OwotCW5ldHdpbmRlcikKLQkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKLQkJb3M9LW5ld3NvcwotCQk7OwotCW5ld3MxMDAwKQotCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255Ci0JCW9zPS1uZXdzb3MKLQkJOzsKLQluZXdzLTM2MDAgfCByaXNjLW5ld3MpCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1zb255Ci0JCW9zPS1uZXdzb3MKLQkJOzsKLQluZWN2NzApCi0JCWJhc2ljX21hY2hpbmU9djcwLW5lYwotCQlvcz0tc3lzdgotCQk7OwotCW5leHQgfCBtKi1uZXh0ICkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKLQkJY2FzZSAkb3MgaW4KLQkJICAgIC1uZXh0c3RlcCogKQotCQkJOzsKLQkJICAgIC1uczIqKQotCQkgICAgICBvcz0tbmV4dHN0ZXAyCi0JCQk7OwotCQkgICAgKikKLQkJICAgICAgb3M9LW5leHRzdGVwMwotCQkJOzsKLQkJZXNhYwotCQk7OwotCW5oMzAwMCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcwotCQlvcz0tY3h1eAotCQk7OwotCW5oWzQ1XTAwMCkKLQkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcwotCQlvcz0tY3h1eAotCQk7OwotCW5pbmR5OTYwKQotCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKLQkJb3M9LW5pbmR5Ci0JCTs7Ci0JbW9uOTYwKQotCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKLQkJb3M9LW1vbjk2MAotCQk7OwotCW5vbnN0b3B1eCkKLQkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQotCQlvcz0tbm9uc3RvcHV4Ci0JCTs7Ci0JbnAxKQotCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAotCQk7OwotCW5lby10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQotCQk7OwotCW5zZS10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQotCQk7OwotCW5zci10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQotCQk7OwotCW9wNTBuLSogfCBvcDYwYy0qKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCi0JCW9zPS1wcm9lbGYKLQkJOzsKLQlvcGVucmlzYyB8IG9wZW5yaXNjLSopCi0JCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCi0JCTs7Ci0Jb3M0MDApCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KLQkJb3M9LW9zNDAwCi0JCTs7Ci0JT1NFNjgwMDAgfCBvc2U2ODAwMCkKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KLQkJb3M9LW9zZQotCQk7OwotCW9zNjhrKQotCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQotCQlvcz0tb3M2OGsKLQkJOzsKLQlwYS1oaXRhY2hpKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQotCQlvcz0taGl1eHdlMgotCQk7OwotCXBhcmFnb24pCi0JCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAotCQlvcz0tb3NmCi0JCTs7Ci0JcGFyaXNjKQotCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgotCQlvcz0tbGludXgKLQkJOzsKLQlwYXJpc2MtKikKLQkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCW9zPS1saW51eAotCQk7OwotCXBiZCkKLQkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKLQkJOzsKLQlwYmIpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKLQkJOzsKLQlwYzUzMiB8IHBjNTMyLSopCi0JCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKLQkJOzsKLQlwYzk4KQotCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJOzsKLQlwYzk4LSopCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKLQkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCi0JCTs7Ci0JcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQotCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKLQkJOzsKLQlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKLQkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCi0JCTs7Ci0JcGVudGl1bTQpCi0JCWJhc2ljX21hY2hpbmU9aTc4Ni1wYwotCQk7OwotCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKLQkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQotCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQotCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwZW50aXVtNC0qKQotCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwbikKLQkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAotCQk7OwotCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQotCQk7OwotCXBwYyB8IHBwY2JlKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgotCQk7OwotCXBwYy0qIHwgcHBjYmUtKikKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JcHBjbGUgfCBwb3dlcnBjbGl0dGxlKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCi0JCTs7Ci0JcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgotCQk7OwotCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSkKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCi0JCTs7Ci0JcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwczIpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KLQkJOzsKLQlwdzMyKQotCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgotCQlvcz0tcHczMgotCQk7OwotCXJkb3MgfCByZG9zNjQpCi0JCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCi0JCW9zPS1yZG9zCi0JCTs7Ci0JcmRvczMyKQotCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJb3M9LXJkb3MKLQkJOzsKLQlyb202OGspCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKLQkJb3M9LWNvZmYKLQkJOzsKLQlybVs0Nl0wMCkKLQkJYmFzaWNfbWFjaGluZT1taXBzLXNpZW1lbnMKLQkJOzsKLQlydHBjIHwgcnRwYy0qKQotCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCi0JCTs7Ci0JczM5MCB8IHMzOTAtKikKLQkJYmFzaWNfbWFjaGluZT1zMzkwLWlibQotCQk7OwotCXMzOTB4IHwgczM5MHgtKikKLQkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KLQkJOzsKLQlzYTI5MjAwKQotCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCi0JCW9zPS11ZGkKLQkJOzsKLQlzYjEpCi0JCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KLQkJOzsKLQlzYjFlbCkKLQkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjFlbC11bmtub3duCi0JCTs7Ci0Jc2RlKQotCQliYXNpY19tYWNoaW5lPW1pcHNpc2EzMi1zZGUKLQkJb3M9LWVsZgotCQk7OwotCXNlaSkKLQkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQotCQlvcz0tc2VpdXgKLQkJOzsKLQlzZXF1ZW50KQotCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAotCQk7OwotCXNoKQotCQliYXNpY19tYWNoaW5lPXNoLWhpdGFjaGkKLQkJb3M9LWhtcwotCQk7OwotCXNoNWVsKQotCQliYXNpY19tYWNoaW5lPXNoNWxlLXVua25vd24KLQkJOzsKLQlzaDY0KQotCQliYXNpY19tYWNoaW5lPXNoNjQtdW5rbm93bgotCQk7OwotCXNwYXJjbGl0ZS13cnMgfCBzaW1zby13cnMpCi0JCWJhc2ljX21hY2hpbmU9c3BhcmNsaXRlLXdycwotCQlvcz0tdnh3b3JrcwotCQk7OwotCXNwczcpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCi0JCW9zPS1zeXN2MgotCQk7OwotCXNwdXIpCi0JCWJhc2ljX21hY2hpbmU9c3B1ci11bmtub3duCi0JCTs7Ci0Jc3QyMDAwKQotCQliYXNpY19tYWNoaW5lPW02OGstdGFuZGVtCi0JCTs7Ci0Jc3RyYXR1cykKLQkJYmFzaWNfbWFjaGluZT1pODYwLXN0cmF0dXMKLQkJb3M9LXN5c3Y0Ci0JCTs7Ci0Jc3Ryb25nYXJtLSogfCB0aHVtYi0qKQotCQliYXNpY19tYWNoaW5lPWFybS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXN1bjIpCi0JCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgotCQk7OwotCXN1bjJvczMpCi0JCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgotCQlvcz0tc3Vub3MzCi0JCTs7Ci0Jc3VuMm9zNCkKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCi0JCW9zPS1zdW5vczQKLQkJOzsKLQlzdW4zb3MzKQotCQliYXNpY19tYWNoaW5lPW02OGstc3VuCi0JCW9zPS1zdW5vczMKLQkJOzsKLQlzdW4zb3M0KQotCQliYXNpY19tYWNoaW5lPW02OGstc3VuCi0JCW9zPS1zdW5vczQKLQkJOzsKLQlzdW40b3MzKQotCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQlvcz0tc3Vub3MzCi0JCTs7Ci0Jc3VuNG9zNCkKLQkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KLQkJb3M9LXN1bm9zNAotCQk7OwotCXN1bjRzb2wyKQotCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQlvcz0tc29sYXJpczIKLQkJOzsKLQlzdW4zIHwgc3VuMy0qKQotCQliYXNpY19tYWNoaW5lPW02OGstc3VuCi0JCTs7Ci0Jc3VuNCkKLQkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KLQkJOzsKLQlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgotCQk7OwotCXN2MSkKLQkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQotCQlvcz0tdW5pY29zCi0JCTs7Ci0Jc3ltbWV0cnkpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50Ci0JCW9zPS1keW5peAotCQk7OwotCXQzZSkKLQkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5Ci0JCW9zPS11bmljb3MKLQkJOzsKLQl0OTApCi0JCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKLQkJb3M9LXVuaWNvcwotCQk7OwotCXRpbGUqKQotCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KLQkJb3M9LWxpbnV4LWdudQotCQk7OwotCXR4MzkpCi0JCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgotCQk7OwotCXR4MzllbCkKLQkJYmFzaWNfbWFjaGluZT1taXBzdHgzOWVsLXVua25vd24KLQkJOzsKLQl0b2FkMSkKLQkJYmFzaWNfbWFjaGluZT1wZHAxMC14a2wKLQkJb3M9LXRvcHMyMAotCQk7OwotCXRvd2VyIHwgdG93ZXItMzIpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1uY3IKLQkJOzsKLQl0cGYpCi0JCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCi0JCW9zPS10cGYKLQkJOzsKLQl1ZGkyOWspCi0JCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKLQkJb3M9LXVkaQotCQk7OwotCXVsdHJhMykKLQkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQotCQlvcz0tc3ltMQotCQk7OwotCXY4MTAgfCBuZWN2ODEwKQotCQliYXNpY19tYWNoaW5lPXY4MTAtbmVjCi0JCW9zPS1ub25lCi0JCTs7Ci0JdmF4dikKLQkJYmFzaWNfbWFjaGluZT12YXgtZGVjCi0JCW9zPS1zeXN2Ci0JCTs7Ci0Jdm1zKQotCQliYXNpY19tYWNoaW5lPXZheC1kZWMKLQkJb3M9LXZtcwotCQk7OwotCXZwcCp8dnh8dngtKikKLQkJYmFzaWNfbWFjaGluZT1mMzAxLWZ1aml0c3UKLQkJOzsKLQl2eHdvcmtzOTYwKQotCQliYXNpY19tYWNoaW5lPWk5NjAtd3JzCi0JCW9zPS12eHdvcmtzCi0JCTs7Ci0Jdnh3b3JrczY4KQotCQliYXNpY19tYWNoaW5lPW02OGstd3JzCi0JCW9zPS12eHdvcmtzCi0JCTs7Ci0Jdnh3b3JrczI5aykKLQkJYmFzaWNfbWFjaGluZT1hMjlrLXdycwotCQlvcz0tdnh3b3JrcwotCQk7OwotCXc2NSopCi0JCWJhc2ljX21hY2hpbmU9dzY1LXdkYwotCQlvcz0tbm9uZQotCQk7OwotCXc4OWstKikKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKLQkJb3M9LXByb2VsZgotCQk7OwotCXhib3gpCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQlvcz0tbWluZ3czMgotCQk7OwotCXhwcyB8IHhwczEwMCkKLQkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCi0JCTs7Ci0JeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL154c2NhbGUvYXJtLydgCi0JCTs7Ci0JeW1wKQotCQliYXNpY19tYWNoaW5lPXltcC1jcmF5Ci0JCW9zPS11bmljb3MKLQkJOzsKLQl6OGstKi1jb2ZmKQotCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCi0JCW9zPS1zaW0KLQkJOzsKLQl6ODAtKi1jb2ZmKQotCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCi0JCW9zPS1zaW0KLQkJOzsKLQlub25lKQotCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQotCQlvcz0tbm9uZQotCQk7OwotCi0jIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG1hbnVmYWN0dXJlciBvZiBjZXJ0YWluIENQVSB0eXBlcy4gIEl0IGlzIGluCi0jIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFudWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCi0Jdzg5aykKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKLQkJOzsKLQlvcDUwbikKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQotCQk7OwotCW9wNjBjKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCi0JCTs7Ci0Jcm9tcCkKLQkJYmFzaWNfbWFjaGluZT1yb21wLWlibQotCQk7OwotCW1taXgpCi0JCWJhc2ljX21hY2hpbmU9bW1peC1rbnV0aAotCQk7OwotCXJzNjAwMCkKLQkJYmFzaWNfbWFjaGluZT1yczYwMDAtaWJtCi0JCTs7Ci0JdmF4KQotCQliYXNpY19tYWNoaW5lPXZheC1kZWMKLQkJOzsKLQlwZHAxMCkKLQkJIyB0aGVyZSBhcmUgbWFueSBjbG9uZXMsIHNvIERFQyBpcyBub3QgYSBzYWZlIGJldAotCQliYXNpY19tYWNoaW5lPXBkcDEwLXVua25vd24KLQkJOzsKLQlwZHAxMSkKLQkJYmFzaWNfbWFjaGluZT1wZHAxMS1kZWMKLQkJOzsKLQl3ZTMyaykKLQkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKLQkJOzsKLQlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCi0JCWJhc2ljX21hY2hpbmU9c2gtdW5rbm93bgotCQk7OwotCXNwYXJjIHwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2KQotCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQk7OwotCWN5ZHJhKQotCQliYXNpY19tYWNoaW5lPWN5ZHJhLWN5ZHJvbWUKLQkJOzsKLQlvcmlvbikKLQkJYmFzaWNfbWFjaGluZT1vcmlvbi1oaWdobGV2ZWwKLQkJOzsKLQlvcmlvbjEwNSkKLQkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWhpZ2hsZXZlbAotCQk7OwotCW1hYyB8IG1wdyB8IG1hYy1tcHcpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQotCQk7OwotCXBtYWMgfCBwbWFjLW1wdykKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWFwcGxlCi0JCTs7Ci0JKi11bmtub3duKQotCQkjIE1ha2Ugc3VyZSB0byBtYXRjaCBhbiBhbHJlYWR5LWNhbm9uaWNhbGl6ZWQgbWFjaGluZSBuYW1lLgotCQk7OwotCSopCi0JCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgotCQlleGl0IDEKLQkJOzsKLWVzYWMKLQotIyBIZXJlIHdlIGNhbm9uaWNhbGl6ZSBjZXJ0YWluIGFsaWFzZXMgZm9yIG1hbnVmYWN0dXJlcnMuCi1jYXNlICRiYXNpY19tYWNoaW5lIGluCi0JKi1kaWdpdGFsKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9kaWdpdGFsLiovZGVjLydgCi0JCTs7Ci0JKi1jb21tb2RvcmUqKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2NvbW1vZG9yZS4qL2NibS8nYAotCQk7OwotCSopCi0JCTs7Ci1lc2FjCi0KLSMgRGVjb2RlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBhbGlhc2VzIGZvciBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgotCi1pZiBbIHgiJG9zIiAhPSB4IiIgXQotdGhlbgotY2FzZSAkb3MgaW4KLQkjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcwotCSMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCi0JIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCi0JLWF1cm9yYXV4KQotCQlvcz0tYXVyb3JhdXgKLQkJOzsKLQktc29sYXJpczEgfCAtc29sYXJpczEuKikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnYAotCQk7OwotCS1zb2xhcmlzKQotCQlvcz0tc29sYXJpczIKLQkJOzsKLQktc3ZyNCopCi0JCW9zPS1zeXN2NAotCQk7OwotCS11bml4d2FyZSopCi0JCW9zPS1zeXN2NC4ydXcKLQkJOzsKLQktZ251L2xpbnV4KikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGdudS9saW51eHxsaW51eC1nbnV8J2AKLQkJOzsKLQkjIEZpcnN0IGFjY2VwdCB0aGUgYmFzaWMgc3lzdGVtIHR5cGVzLgotCSMgVGhlIHBvcnRhYmxlIHN5c3RlbXMgY29tZXMgZmlyc3QuCi0JIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KLQkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCi0JLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAotCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKLQkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLWF1cm9yYXV4KiB8IC1zb2xhcmlzKiBcCi0JICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIHwgLXBsYW45KiBcCi0JICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCi0JICAgICAgfCAtYW9zKiB8IC1hcm9zKiB8IC1jbG91ZGFiaSogfCAtc29ydGl4KiBcCi0JICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKLQkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKLQkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCi0JICAgICAgfCAtYml0cmlnKiB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogfCAtbGliZXJ0eWJzZCogXAotCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAotCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKLQkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCi0JICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCi0JICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKLQkgICAgICB8IC1jeWd3aW4qIHwgLW1zeXMqIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCi0JICAgICAgfCAtbWlkaXBpeCogfCAtbWluZ3czMiogfCAtbWluZ3c2NCogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCi0JICAgICAgfCAtbGludXgtbmV3bGliKiB8IC1saW51eC1tdXNsKiB8IC1saW51eC11Y2xpYmMqIFwKLQkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiB8IC1tb3hpZWJveCogXAotCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCi0JICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCi0JICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCi0JICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAotCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAotCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCi0JICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqIFwKLQkgICAgICB8IC1vbmVmcyogfCAtdGlydG9zKiB8IC1waG9lbml4KiB8IC1mdWNoc2lhKikKLQkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCi0JCTs7Ci0JLXFueCopCi0JCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQkJICAgIHg4Ni0qIHwgaSo4Ni0qKQotCQkJOzsKLQkJICAgICopCi0JCQlvcz0tbnRvJG9zCi0JCQk7OwotCQllc2FjCi0JCTs7Ci0JLW50by1xbngqKQotCQk7OwotCS1udG8qKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKLQkJOzsKLQktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCi0JICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAotCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCi0JCTs7Ci0JLW1hYyopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKLQkJOzsKLQktbGludXgtZGlldGxpYmMpCi0JCW9zPS1saW51eC1kaWV0bGliYwotCQk7OwotCS1saW51eCopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKLQkJOzsKLQktc3Vub3M1KikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAotCQk7OwotCS1zdW5vczYqKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCi0JCTs7Ci0JLW9wZW5lZCopCi0JCW9zPS1vcGVuZWRpdGlvbgotCQk7OwotCS1vczQwMCopCi0JCW9zPS1vczQwMAotCQk7OwotCS13aW5jZSopCi0JCW9zPS13aW5jZQotCQk7OwotCS1vc2Zyb3NlKikKLQkJb3M9LW9zZnJvc2UKLQkJOzsKLQktb3NmKikKLQkJb3M9LW9zZgotCQk7OwotCS11dGVrKikKLQkJb3M9LWJzZAotCQk7OwotCS1keW5peCopCi0JCW9zPS1ic2QKLQkJOzsKLQktYWNpcyopCi0JCW9zPS1hb3MKLQkJOzsKLQktYXRoZW9zKikKLQkJb3M9LWF0aGVvcwotCQk7OwotCS1zeWxsYWJsZSopCi0JCW9zPS1zeWxsYWJsZQotCQk7OwotCS0zODZic2QpCi0JCW9zPS1ic2QKLQkJOzsKLQktY3RpeCogfCAtdXRzKikKLQkJb3M9LXN5c3YKLQkJOzsKLQktbm92YSopCi0JCW9zPS1ydG1rLW5vdmEKLQkJOzsKLQktbnMyICkKLQkJb3M9LW5leHRzdGVwMgotCQk7OwotCS1uc2sqKQotCQlvcz0tbnNrCi0JCTs7Ci0JIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgotCS1zaW5peDUuKikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKLQkJOzsKLQktc2luaXgqKQotCQlvcz0tc3lzdjQKLQkJOzsKLQktdHBmKikKLQkJb3M9LXRwZgotCQk7OwotCS10cml0b24qKQotCQlvcz0tc3lzdjMKLQkJOzsKLQktb3NzKikKLQkJb3M9LXN5c3YzCi0JCTs7Ci0JLXN2cjQpCi0JCW9zPS1zeXN2NAotCQk7OwotCS1zdnIzKQotCQlvcz0tc3lzdjMKLQkJOzsKLQktc3lzdnI0KQotCQlvcz0tc3lzdjQKLQkJOzsKLQkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCi0JLXN5c3YqKQotCQk7OwotCS1vc2UqKQotCQlvcz0tb3NlCi0JCTs7Ci0JLWVzMTgwMCopCi0JCW9zPS1vc2UKLQkJOzsKLQkteGVuaXgpCi0JCW9zPS14ZW5peAotCQk7OwotCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCi0JCW9zPS1taW50Ci0JCTs7Ci0JLWFyb3MqKQotCQlvcz0tYXJvcwotCQk7OwotCS16dm1vZSkKLQkJb3M9LXp2bW9lCi0JCTs7Ci0JLWRpY29zKikKLQkJb3M9LWRpY29zCi0JCTs7Ci0JLW5hY2wqKQotCQk7OwotCS1pb3MpCi0JCTs7Ci0JLW5vbmUpCi0JCTs7Ci0JKikKLQkJIyBHZXQgcmlkIG9mIHRoZSBgLScgYXQgdGhlIGJlZ2lubmluZyBvZiAkb3MuCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAncy9bXi1dKi0vLydgCi0JCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogc3lzdGVtIFxgJG9zXCcgbm90IHJlY29nbml6ZWQgMT4mMgotCQlleGl0IDEKLQkJOzsKLWVzYWMKLWVsc2UKLQotIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgotIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHdoYXQgdGhlIHZlbmRvciBjdXJyZW50bHkgc2hpcHMgb3V0IHRoZSBkb29yIHdpdGggdGhlaXIKLSMgbWFjaGluZSBvciBwdXQgYW5vdGhlciB3YXksIHRoZSBtb3N0IHBvcHVsYXIgb3MgcHJvdmlkZWQgd2l0aCB0aGUgbWFjaGluZS4KLQotIyBOb3RlIHRoYXQgaWYgeW91J3JlIGdvaW5nIHRvIHRyeSB0byBtYXRjaCAiLU1BTlVGQUNUVVJFUiIgaGVyZSAoc2F5LAotIyAiLXN1biIpLCB0aGVuIHlvdSBoYXZlIHRvIHRlbGwgdGhlIGNhc2Ugc3RhdGVtZW50IHVwIHRvd2FyZHMgdGhlIHRvcAotIyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcgc3lzdGVtLiAgT3RoZXJ3aXNlLCBjb2RlIGFib3ZlCi0jIHdpbGwgc2lnbmFsIGFuIGVycm9yIHNheWluZyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcKLSMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCi0KLWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQlzY29yZS0qKQotCQlvcz0tZWxmCi0JCTs7Ci0Jc3B1LSopCi0JCW9zPS1lbGYKLQkJOzsKLQkqLWFjb3JuKQotCQlvcz0tcmlzY2l4MS4yCi0JCTs7Ci0JYXJtKi1yZWJlbCkKLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JYXJtKi1zZW1pKQotCQlvcz0tYW91dAotCQk7OwotCWM0eC0qIHwgdGljNHgtKikKLQkJb3M9LWNvZmYKLQkJOzsKLQljODA1MS0qKQotCQlvcz0tZWxmCi0JCTs7Ci0JaGV4YWdvbi0qKQotCQlvcz0tZWxmCi0JCTs7Ci0JdGljNTR4LSopCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JdGljNTV4LSopCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JdGljNngtKikKLQkJb3M9LWNvZmYKLQkJOzsKLQkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCi0JcGRwMTAtKikKLQkJb3M9LXRvcHMyMAotCQk7OwotCXBkcDExLSopCi0JCW9zPS1ub25lCi0JCTs7Ci0JKi1kZWMgfCB2YXgtKikKLQkJb3M9LXVsdHJpeDQuMgotCQk7OwotCW02OCotYXBvbGxvKQotCQlvcz0tZG9tYWluCi0JCTs7Ci0JaTM4Ni1zdW4pCi0JCW9zPS1zdW5vczQuMC4yCi0JCTs7Ci0JbTY4MDAwLXN1bikKLQkJb3M9LXN1bm9zMwotCQk7OwotCW02OCotY2lzY28pCi0JCW9zPS1hb3V0Ci0JCTs7Ci0JbWVwLSopCi0JCW9zPS1lbGYKLQkJOzsKLQltaXBzKi1jaXNjbykKLQkJb3M9LWVsZgotCQk7OwotCW1pcHMqLSopCi0JCW9zPS1lbGYKLQkJOzsKLQlvcjMyLSopCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JKi10dGkpCSMgbXVzdCBiZSBiZWZvcmUgc3BhcmMgZW50cnkgb3Igd2UgZ2V0IHRoZSB3cm9uZyBvcy4KLQkJb3M9LXN5c3YzCi0JCTs7Ci0Jc3BhcmMtKiB8ICotc3VuKQotCQlvcz0tc3Vub3M0LjEuMQotCQk7OwotCSotYmUpCi0JCW9zPS1iZW9zCi0JCTs7Ci0JKi1oYWlrdSkKLQkJb3M9LWhhaWt1Ci0JCTs7Ci0JKi1pYm0pCi0JCW9zPS1haXgKLQkJOzsKLQkqLWtudXRoKQotCQlvcz0tbW1peHdhcmUKLQkJOzsKLQkqLXdlYykKLQkJb3M9LXByb2VsZgotCQk7OwotCSotd2luYm9uZCkKLQkJb3M9LXByb2VsZgotCQk7OwotCSotb2tpKQotCQlvcz0tcHJvZWxmCi0JCTs7Ci0JKi1ocCkKLQkJb3M9LWhwdXgKLQkJOzsKLQkqLWhpdGFjaGkpCi0JCW9zPS1oaXV4Ci0JCTs7Ci0JaTg2MC0qIHwgKi1hdHQgfCAqLW5jciB8ICotYWx0b3MgfCAqLW1vdG9yb2xhIHwgKi1jb252ZXJnZW50KQotCQlvcz0tc3lzdgotCQk7OwotCSotY2JtKQotCQlvcz0tYW1pZ2FvcwotCQk7OwotCSotZGcpCi0JCW9zPS1kZ3V4Ci0JCTs7Ci0JKi1kb2xwaGluKQotCQlvcz0tc3lzdjMKLQkJOzsKLQltNjhrLWNjdXIpCi0JCW9zPS1ydHUKLQkJOzsKLQltODhrLW9tcm9uKikKLQkJb3M9LWx1bmEKLQkJOzsKLQkqLW5leHQgKQotCQlvcz0tbmV4dHN0ZXAKLQkJOzsKLQkqLXNlcXVlbnQpCi0JCW9zPS1wdHgKLQkJOzsKLQkqLWNyZHMpCi0JCW9zPS11bm9zCi0JCTs7Ci0JKi1ucykKLQkJb3M9LWdlbml4Ci0JCTs7Ci0JaTM3MC0qKQotCQlvcz0tbXZzCi0JCTs7Ci0JKi1uZXh0KQotCQlvcz0tbmV4dHN0ZXAzCi0JCTs7Ci0JKi1nb3VsZCkKLQkJb3M9LXN5c3YKLQkJOzsKLQkqLWhpZ2hsZXZlbCkKLQkJb3M9LWJzZAotCQk7OwotCSotZW5jb3JlKQotCQlvcz0tYnNkCi0JCTs7Ci0JKi1zZ2kpCi0JCW9zPS1pcml4Ci0JCTs7Ci0JKi1zaWVtZW5zKQotCQlvcz0tc3lzdjQKLQkJOzsKLQkqLW1hc3Njb21wKQotCQlvcz0tcnR1Ci0JCTs7Ci0JZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQotCQlvcz0tdXhwdgotCQk7OwotCSotcm9tNjhrKQotCQlvcz0tY29mZgotCQk7OwotCSotKmJ1ZykKLQkJb3M9LWNvZmYKLQkJOzsKLQkqLWFwcGxlKQotCQlvcz0tbWFjb3MKLQkJOzsKLQkqLWF0YXJpKikKLQkJb3M9LW1pbnQKLQkJOzsKLQkqKQotCQlvcz0tbm9uZQotCQk7OwotZXNhYwotZmkKLQotIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKLSMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCi12ZW5kb3I9dW5rbm93bgotY2FzZSAkYmFzaWNfbWFjaGluZSBpbgotCSotdW5rbm93bikKLQkJY2FzZSAkb3MgaW4KLQkJCS1yaXNjaXgqKQotCQkJCXZlbmRvcj1hY29ybgotCQkJCTs7Ci0JCQktc3Vub3MqKQotCQkJCXZlbmRvcj1zdW4KLQkJCQk7OwotCQkJLWNuayp8LWFpeCopCi0JCQkJdmVuZG9yPWlibQotCQkJCTs7Ci0JCQktYmVvcyopCi0JCQkJdmVuZG9yPWJlCi0JCQkJOzsKLQkJCS1ocHV4KikKLQkJCQl2ZW5kb3I9aHAKLQkJCQk7OwotCQkJLW1wZWl4KikKLQkJCQl2ZW5kb3I9aHAKLQkJCQk7OwotCQkJLWhpdXgqKQotCQkJCXZlbmRvcj1oaXRhY2hpCi0JCQkJOzsKLQkJCS11bm9zKikKLQkJCQl2ZW5kb3I9Y3JkcwotCQkJCTs7Ci0JCQktZGd1eCopCi0JCQkJdmVuZG9yPWRnCi0JCQkJOzsKLQkJCS1sdW5hKikKLQkJCQl2ZW5kb3I9b21yb24KLQkJCQk7OwotCQkJLWdlbml4KikKLQkJCQl2ZW5kb3I9bnMKLQkJCQk7OwotCQkJLW12cyogfCAtb3BlbmVkKikKLQkJCQl2ZW5kb3I9aWJtCi0JCQkJOzsKLQkJCS1vczQwMCopCi0JCQkJdmVuZG9yPWlibQotCQkJCTs7Ci0JCQktcHR4KikKLQkJCQl2ZW5kb3I9c2VxdWVudAotCQkJCTs7Ci0JCQktdHBmKikKLQkJCQl2ZW5kb3I9aWJtCi0JCQkJOzsKLQkJCS12eHNpbSogfCAtdnh3b3JrcyogfCAtd2luZGlzcyopCi0JCQkJdmVuZG9yPXdycwotCQkJCTs7Ci0JCQktYXV4KikKLQkJCQl2ZW5kb3I9YXBwbGUKLQkJCQk7OwotCQkJLWhtcyopCi0JCQkJdmVuZG9yPWhpdGFjaGkKLQkJCQk7OwotCQkJLW1wdyogfCAtbWFjb3MqKQotCQkJCXZlbmRvcj1hcHBsZQotCQkJCTs7Ci0JCQktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQotCQkJCXZlbmRvcj1hdGFyaQotCQkJCTs7Ci0JCQktdm9zKikKLQkJCQl2ZW5kb3I9c3RyYXR1cwotCQkJCTs7Ci0JCWVzYWMKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAicy91bmtub3duLyR2ZW5kb3IvImAKLQkJOzsKLWVzYWMKLQotZWNobyAkYmFzaWNfbWFjaGluZSRvcwotZXhpdAotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKLSMgdGltZS1zdGFtcC1lbmQ6ICInIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDkxMmUxYzkuLjAwMDAwMDAKLS0tIGEvY29uZmlndXJlCisrKyAvZGV2L251bGwKQEAgLTEsMzI0MzUgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIEdTdHJlYW1lciAxLjEwLjQuCi0jCi0jIFJlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXI+LgotIwotIwotIyBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NiwgMTk5OC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIwotIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSAgZW11bGF0ZSBzaAotICBOVUxMQ01EPToKLSAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotZWxzZQotICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKLSAgKnBvc2l4KikgOgotICAgIHNldCAtbyBwb3NpeCA7OyAjKAotICAqKSA6Ci0gICAgIDs7Ci1lc2FjCi1maQotCi0KLWFzX25sPScKLScKLWV4cG9ydCBhc19ubAotIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KLWFzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCi1hc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KLWFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCi0jIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKLSMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCi1pZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCi0gICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19lY2hvPSdwcmludCAtciAtLScKLSAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCi1lbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2VjaG89J3ByaW50ZiAlc1xuJwotICBhc19lY2hvX249J3ByaW50ZiAlcycKLWVsc2UKLSAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCi0gICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKLSAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCi0gIGVsc2UKLSAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJwotICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCi0gICAgICBhcmc9JDE7Ci0gICAgICBjYXNlICRhcmcgaW4gIygKLSAgICAgICoiJGFzX25sIiopCi0JZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7Ci0JYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKLSAgICAgIGVzYWM7Ci0gICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCi0gICAgJwotICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQotICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCi0gIGZpCi0gIGV4cG9ydCBhc19lY2hvX2JvZHkKLSAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJwotZmkKLQotIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBQQVRIX1NFUEFSQVRPUj06Ci0gIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKLSAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAotICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIH0KLWZpCi0KLQotIyBJRlMKLSMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCi0jIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KLSMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAotIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQotSUZTPSIgIiIJJGFzX25sIgotCi0jIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgotYXNfbXlzZWxmPQotY2FzZSAkMCBpbiAjKCgKLSAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gICAgIDs7Ci1lc2FjCi0jIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCi0jIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLWlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KLSAgYXNfbXlzZWxmPSQwCi1maQotaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgotICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgotICBleGl0IDEKLWZpCi0KLSMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KLSMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKLSMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKLSMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCi1mb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICi1kbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAotICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKLWRvbmUKLVBTMT0nJCAnCi1QUzI9Jz4gJwotUFM0PScrICcKLQotIyBOTFMgbnVpc2FuY2VzLgotTENfQUxMPUMKLWV4cG9ydCBMQ19BTEwKLUxBTkdVQUdFPUMKLWV4cG9ydCBMQU5HVUFHRQotCi0jIENEUEFUSC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotIyBVc2UgYSBwcm9wZXIgaW50ZXJuYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gZW5zdXJlIHdlIGRvbid0IGZhbGwKLSAgIyBpbnRvIGFuIGluZmluaXRlIGxvb3AsIGNvbnRpbnVvdXNseSByZS1leGVjdXRpbmcgb3Vyc2VsdmVzLgotICBpZiB0ZXN0IHgiJHtfYXNfY2FuX3JlZXhlY30iICE9IHhubyAmJiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbgotICAgIF9hc19jYW5fcmVleGVjPW5vOyBleHBvcnQgX2FzX2Nhbl9yZWV4ZWM7Ci0gICAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKLSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCi0jIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgotIyBQcmVzZXJ2ZSAtdiBhbmQgLXggdG8gdGhlIHJlcGxhY2VtZW50IHNoZWxsLgotQkFTSF9FTlY9L2Rldi9udWxsCi1FTlY9L2Rldi9udWxsCi0odW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKLWNhc2UgJC0gaW4gIyAoKCgoCi0gICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OwotICAqdiogKSBhc19vcHRzPS12IDs7Ci0gICp4KiApIGFzX29wdHM9LXggOzsKLSAgKiApIGFzX29wdHM9IDs7Ci1lc2FjCi1leGVjICRDT05GSUdfU0hFTEwgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQotIyBBZG1pdHRlZGx5LCB0aGlzIGlzIHF1aXRlIHBhcmFub2lkLCBzaW5jZSBhbGwgdGhlIGtub3duIHNoZWxscyBiYWlsCi0jIG91dCBhZnRlciBhIGZhaWxlZCBgZXhlYycuCi0kYXNfZWNobyAiJDA6IGNvdWxkIG5vdCByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCIgPiYyCi1hc19mbl9leGl0IDI1NQotICBmaQotICAjIFdlIGRvbid0IHdhbnQgdGhpcyB0byBwcm9wYWdhdGUgdG8gb3RoZXIgc3VicHJvY2Vzc2VzLgotICAgICAgICAgIHsgX2FzX2Nhbl9yZWV4ZWM9OyB1bnNldCBfYXNfY2FuX3JlZXhlYzt9Ci1pZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCi0gIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKLSAgKnBvc2l4KikgOgotICAgIHNldCAtbyBwb3NpeCA7OyAjKAotICAqKSA6Ci0gICAgIDs7Ci1lc2FjCi1maQotIgotICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQotYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Ci1hc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KLWFzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KLWFzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KLQotZXhpdGNvZGU9MAotYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Ci1hc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KLWFzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Ci1hc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQotaWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgotCi1lbHNlCi0gIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgotZmkKLXRlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEKLXRlc3QgLXggLyB8fCBleGl0IDEiCi0gIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCi0gIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KLSAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKLSAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQotCi0gIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCR7QkFTSF9WRVJTSU9OK3NldH1cIiB8fCAoCi0gICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCi0gICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KLSAgICBFQ0hPPVwkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNITwotICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKLSAgICB0ZXN0IFwiWFxgcHJpbnRmICVzIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiBcXAotICAgICAgfHwgdGVzdCBcIlhcYHByaW50IC1yIC0tIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiApIHx8IGV4aXQgMQotdGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEiCi0gIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCi1lbHNlCi0gIGFzX2hhdmVfcmVxdWlyZWQ9bm8KLWZpCi0gIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKLQotZWxzZQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1hc19mb3VuZD1mYWxzZQotZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBhc19mb3VuZD06Ci0gIGNhc2UgJGFzX2RpciBpbiAjKAotCSAvKikKLQkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCi0JICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCi0JICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKLQkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKLSAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcwotCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgotICBicmVhayAyCi1maQotZmkKLQkgICBkb25lOzsKLSAgICAgICBlc2FjCi0gIGFzX2ZvdW5kPWZhbHNlCi1kb25lCi0kYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKLQkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKLWZpOyB9Ci1JRlM9JGFzX3NhdmVfSUZTCi0KLQotICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgotICBleHBvcnQgQ09ORklHX1NIRUxMCi0gICAgICAgICAgICAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKLSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCi0jIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgotIyBQcmVzZXJ2ZSAtdiBhbmQgLXggdG8gdGhlIHJlcGxhY2VtZW50IHNoZWxsLgotQkFTSF9FTlY9L2Rldi9udWxsCi1FTlY9L2Rldi9udWxsCi0odW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKLWNhc2UgJC0gaW4gIyAoKCgoCi0gICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OwotICAqdiogKSBhc19vcHRzPS12IDs7Ci0gICp4KiApIGFzX29wdHM9LXggOzsKLSAgKiApIGFzX29wdHM9IDs7Ci1lc2FjCi1leGVjICRDT05GSUdfU0hFTEwgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQotIyBBZG1pdHRlZGx5LCB0aGlzIGlzIHF1aXRlIHBhcmFub2lkLCBzaW5jZSBhbGwgdGhlIGtub3duIHNoZWxscyBiYWlsCi0jIG91dCBhZnRlciBhIGZhaWxlZCBgZXhlYycuCi0kYXNfZWNobyAiJDA6IGNvdWxkIG5vdCByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCIgPiYyCi1leGl0IDI1NQotZmkKLQotICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKLSAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgotICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKLSAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KLSAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKLSAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCi0gIGVsc2UKLSAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFuZAotJDA6IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lcgotJDA6IGFib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dAotJDA6IGJlZm9yZSB0aGlzIG1lc3NhZ2UuIFRoZW4gaW5zdGFsbCBhIG1vZGVybiBzaGVsbCwgb3IKLSQwOiBtYW51YWxseSBydW4gdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEgc2hlbGwgaWYgeW91IGRvCi0kMDogaGF2ZSBvbmUuIgotICBmaQotICBleGl0IDEKLWZpCi1maQotZmkKLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci1leHBvcnQgU0hFTEwKLSMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgotQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KLXVuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUwotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIGFzX2ZuX3Vuc2V0IFZBUgotIyAtLS0tLS0tLS0tLS0tLS0KLSMgUG9ydGFibHkgdW5zZXQgVkFSLgotYXNfZm5fdW5zZXQgKCkKLXsKLSAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQotfQotYXNfdW5zZXQ9YXNfZm5fdW5zZXQKLQotIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCi1hc19mbl9zZXRfc3RhdHVzICgpCi17Ci0gIHJldHVybiAkMQotfSAjIGFzX2ZuX3NldF9zdGF0dXMKLQotIyBhc19mbl9leGl0IFNUQVRVUwotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCi1hc19mbl9leGl0ICgpCi17Ci0gIHNldCArZQotICBhc19mbl9zZXRfc3RhdHVzICQxCi0gIGV4aXQgJDEKLX0gIyBhc19mbl9leGl0Ci0KLSMgYXNfZm5fbWtkaXJfcAotIyAtLS0tLS0tLS0tLS0tCi0jIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KLWFzX2ZuX21rZGlyX3AgKCkKLXsKLQotICBjYXNlICRhc19kaXIgaW4gIygKLSAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OwotICBlc2FjCi0gIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgewotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgOjsgZG8KLSAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAotICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCi0gICAgICAqKSBhc19xZGlyPSRhc19kaXI7OwotICAgICAgZXNhYwotICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCi0gICAgZG9uZQotICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKLQotCi19ICMgYXNfZm5fbWtkaXJfcAotCi0jIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KLWFzX2ZuX2V4ZWN1dGFibGVfcCAoKQotewotICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCi19ICMgYXNfZm5fZXhlY3V0YWJsZV9wCi0jIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCi0jIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKLSMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKLSMgaW1wbGVtZW50YXRpb25zLgotaWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgotICBldmFsICdhc19mbl9hcHBlbmQgKCkKLSAgewotICAgIGV2YWwgJDErPVwkMgotICB9JwotZWxzZQotICBhc19mbl9hcHBlbmQgKCkKLSAgewotICAgIGV2YWwgJDE9XCQkMVwkMgotICB9Ci1maSAjIGFzX2ZuX2FwcGVuZAotCi0jIGFzX2ZuX2FyaXRoIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQotIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCi0jIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgotaWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCi0gIHsKLSAgICBhc192YWw9JCgoICQqICkpCi0gIH0nCi1lbHNlCi0gIGFzX2ZuX2FyaXRoICgpCi0gIHsKLSAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAotICB9Ci1maSAjIGFzX2ZuX2FyaXRoCi0KLQotIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCi0jIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKLSMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCi1hc19mbl9lcnJvciAoKQotewotICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQotICBpZiB0ZXN0ICIkNCI7IHRoZW4KLSAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0Ci0gIGZpCi0gICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCi0gIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cwotfSAjIGFzX2ZuX2Vycm9yCi0KLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCi0gICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgotICBhc19leHByPWV4cHIKLWVsc2UKLSAgYXNfZXhwcj1mYWxzZQotZmkKLQotaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgotICBhc19iYXNlbmFtZT1iYXNlbmFtZQotZWxzZQotICBhc19iYXNlbmFtZT1mYWxzZQotZmkKLQotaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2Rpcm5hbWU9ZGlybmFtZQotZWxzZQotICBhc19kaXJuYW1lPWZhbHNlCi1maQotCi1hc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKLSRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWC8iJDAiIHwKLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwvXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwvXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0KLSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KLWFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwotYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCi1hc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKLWFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cwotCi0KLSAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCi0gIGV2YWwgJ3Rlc3QgIngkYXNfbGluZW5vXzEnJGFzX3J1biciICE9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiAmJgotICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7Ci0gICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQotICBzZWQgLW4gJwotICAgIHAKLSAgICAvWyRdTElORU5PLz0KLSAgJyA8JGFzX215c2VsZiB8Ci0gICAgc2VkICcKLSAgICAgIHMvWyRdTElORU5PLiovJi0vCi0gICAgICB0IGxpbmVubwotICAgICAgYgotICAgICAgOmxpbmVubwotICAgICAgTgotICAgICAgOmxvb3AKLSAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLwotICAgICAgdCBsb29wCi0gICAgICBzLy1cbi4qLy8KLSAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAotICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQotCi0gICMgSWYgd2UgaGFkIHRvIHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMLCB3ZSdyZSBlbnN1cmVkIHRvIGhhdmUKLSAgIyBhbHJlYWR5IGRvbmUgdGhhdCwgc28gZW5zdXJlIHdlIGRvbid0IHRyeSB0byBkbyBzbyBhZ2FpbiBhbmQgZmFsbAotICAjIGluIGFuIGluZmluaXRlIGxvb3AuICBUaGlzIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGluIHByYWN0aWNlLgotICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjCi0gICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCi0gICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQotICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgotICAuICIuLyRhc19tZS5saW5lbm8iCi0gICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgotICBleGl0Ci19Ci0KLUVDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9Ci1jYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAotLW4qKQotICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KLSAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCi0gIHh5KSAgRUNIT19DPSdcYyc7OwotICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCi0gICAgICAgRUNIT19UPScJJzs7Ci0gIGVzYWM7OwotKikKLSAgRUNIT19OPSctbic7OwotZXNhYwotCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQotaWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCi0gIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKLWVsc2UKLSAgcm0gLWYgY29uZiQkLmRpcgotICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCi1maQotaWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgotICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgICBhc19sbl9zPSdsbiAtcycKLSAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgotICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCi0gICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCi0gICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCi0gICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAotICAgICAgYXNfbG5fcz0nY3AgLXBSJwotICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICAgIGFzX2xuX3M9bG4KLSAgZWxzZQotICAgIGFzX2xuX3M9J2NwIC1wUicKLSAgZmkKLWVsc2UKLSAgYXNfbG5fcz0nY3AgLXBSJwotZmkKLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKLXJtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKLQotaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCi1lbHNlCi0gIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCi0gIGFzX21rZGlyX3A9ZmFsc2UKLWZpCi0KLWFzX3Rlc3RfeD0ndGVzdCAteCcKLWFzX2V4ZWN1dGFibGVfcD1hc19mbl9leGVjdXRhYmxlX3AKLQotIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgotYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKLQotIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCi1hc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgotCi1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotCi0KLXRlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKLWV4ZWMgNj4mMQotCi0jIE5hbWUgb2YgdGhlIGhvc3QuCi0jIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCi0jIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KLWFjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAotCi0jCi0jIEluaXRpYWxpemF0aW9ucy4KLSMKLWFjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKLWFjX2NsZWFuX2ZpbGVzPQotYWNfY29uZmlnX2xpYm9ial9kaXI9LgotTElCT0JKUz0KLWNyb3NzX2NvbXBpbGluZz1ubwotc3ViZGlycz0KLU1GTEFHUz0KLU1BS0VGTEFHUz0KLQotIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCi1QQUNLQUdFX05BTUU9J0dTdHJlYW1lcicKLVBBQ0tBR0VfVEFSTkFNRT0nZ3N0cmVhbWVyJwotUEFDS0FHRV9WRVJTSU9OPScxLjEwLjQnCi1QQUNLQUdFX1NUUklORz0nR1N0cmVhbWVyIDEuMTAuNCcKLVBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXInCi1QQUNLQUdFX1VSTD0nJwotCi1hY191bmlxdWVfZmlsZT0iZ3N0L2dzdC5jIgotIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgotYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAotIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWZkZWYgU1REQ19IRUFERVJTCi0jIGluY2x1ZGUgPHN0ZGxpYi5oPgotIyBpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbHNlCi0jIGlmZGVmIEhBVkVfU1RETElCX0gKLSMgIGluY2x1ZGUgPHN0ZGxpYi5oPgotIyBlbmRpZgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TVFJJTkdfSAotIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICi0jICBpbmNsdWRlIDxtZW1vcnkuaD4KLSMgZW5kaWYKLSMgaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NUUklOR1NfSAotIyBpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKLSMgaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1RESU5UX0gKLSMgaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIgotCi1ndF9uZWVkcz0KLWFjX2hlYWRlcl9saXN0PQotYWNfc3Vic3RfdmFycz0nYW1fX0VYRUVYVF9GQUxTRQotYW1fX0VYRUVYVF9UUlVFCi1MVExJQk9CSlMKLUxJQk9CSlMKLVNVQlVOSVRfRkFMU0UKLVNVQlVOSVRfVFJVRQotRU5BQkxFX1NVQlVOSVQKLUhBVkVfQ0xPQ0tfR0VUVElNRV9GQUxTRQotSEFWRV9DTE9DS19HRVRUSU1FX1RSVUUKLUhBVkVfVElNRVJfQ1JFQVRFX1NFVFRJTUVfREVMRVRFX0ZBTFNFCi1IQVZFX1RJTUVSX0NSRUFURV9TRVRUSU1FX0RFTEVURV9UUlVFCi1IQVZFX1NUUlNJR05BTF9GQUxTRQotSEFWRV9TVFJTSUdOQUxfVFJVRQotSEFWRV9MT0NBTFRJTUVfUl9GQUxTRQotSEFWRV9MT0NBTFRJTUVfUl9UUlVFCi1IQVZFX0FMQVJNX0ZBTFNFCi1IQVZFX0FMQVJNX1RSVUUKLUhBVkVfRk9SSwotQ0hFQ0tfVkVSU0lPTgotQ0hFQ0tfTUlDUk9fVkVSU0lPTgotQ0hFQ0tfTUlOT1JfVkVSU0lPTgotQ0hFQ0tfTUFKT1JfVkVSU0lPTgotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVECi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVECi1HU1RfUExVR0lOX0xERkxBR1MKLUdTVF9PQkpfTElCUwotR1NUX09CSl9DWFhGTEFHUwotR1NUX09CSl9DRkxBR1MKLUdTVF9MSUJfTERGTEFHUwotR1NUX0FMTF9MREZMQUdTCi1HU1RfQUxMX0xJQlMKLUdTVF9BTExfQ1hYRkxBR1MKLUdTVF9BTExfQ0ZMQUdTCi1HU1RfT1BUSU9OX0NYWEZMQUdTCi1HU1RfT1BUSU9OX0NGTEFHUwotREVQUkVDQVRFRF9DRkxBR1MKLVBST0ZJTEVfQ0ZMQUdTCi1HU1RfTEVWRUxfREVGQVVMVAotUFJJTlRGX0NGTEFHUwotRVJST1JfQ0ZMQUdTCi1XQVJOSU5HX0NGTEFHUwotcGx1Z2luZGlyCi1QTFVHSU5ESVIKLURBVEFESVIKLUxJQkRJUgotR1NUX0xJQ0VOU0UKLUhBVkVfQ0hFQ0tfRkFMU0UKLUhBVkVfQ0hFQ0tfVFJVRQotVU5XSU5EX0xJQlMKLVVOV0lORF9DRkxBR1MKLUhBVkVfR1RLX0ZBTFNFCi1IQVZFX0dUS19UUlVFCi1HVEtfTElCUwotR1RLX0NGTEFHUwotR0xJQl9QUkVGSVgKLUdJT19MREZMQUdTCi1HSU9fTElCUwotR0lPX0NGTEFHUwotR0xJQl9FWFRSQV9DRkxBR1MKLUdMSUJfTUtFTlVNUwotR0xJQl9HRU5NQVJTSEFMCi1HTElCX0xJQlMKLUdMSUJfQ0ZMQUdTCi1HTElCX1JFUQotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0ZBTFNFCi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfVFJVRQotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORQotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0ZBTFNFCi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfVFJVRQotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORQotSEFWRV9NTUFQX0ZBTFNFCi1IQVZFX01NQVBfVFJVRQotU09DS0VUX0xJQlMKLUhBVkVfR0VUUlVTQUdFX0ZBTFNFCi1IQVZFX0dFVFJVU0FHRV9UUlVFCi1IQVZFX0dTTAotR1NMX0xJQlMKLUhBVkVfR01QCi1HTVBfTElCUwotV0lOMzJfTElCUwotSEFWRV9XSU5TT0NLMl9IX0ZBTFNFCi1IQVZFX1dJTlNPQ0syX0hfVFJVRQotSEFWRV9QVEhSRUFEX0ZBTFNFCi1IQVZFX1BUSFJFQURfVFJVRQotUFRIUkVBRF9DRkxBR1MKLVBUSFJFQURfTElCUwotUFRIUkVBRF9DQwotYXhfcHRocmVhZF9jb25maWcKLUhBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX0ZBTFNFCi1IQVZFX1NZU19USU1FU19IX0FORF9VTklTVERfSF9UUlVFCi1IQVZFX1NZU19TT0NLRVRfSF9GQUxTRQotSEFWRV9TWVNfU09DS0VUX0hfVFJVRQotTElCTQotRU5BQkxFX1BMVUdJTl9ET0NTX0ZBTFNFCi1FTkFCTEVfUExVR0lOX0RPQ1NfVFJVRQotcGtncHlleGVjZGlyCi1weWV4ZWNkaXIKLXBrZ3B5dGhvbmRpcgotcHl0aG9uZGlyCi1QWVRIT05fUExBVEZPUk0KLVBZVEhPTl9FWEVDX1BSRUZJWAotUFlUSE9OX1BSRUZJWAotUFlUSE9OX1ZFUlNJT04KLVBZVEhPTgotR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRQotR1RLX0RPQ19VU0VfTElCVE9PTF9UUlVFCi1HVEtfRE9DX0JVSUxEX1BERl9GQUxTRQotR1RLX0RPQ19CVUlMRF9QREZfVFJVRQotR1RLX0RPQ19CVUlMRF9IVE1MX0ZBTFNFCi1HVEtfRE9DX0JVSUxEX0hUTUxfVFJVRQotRU5BQkxFX0dUS19ET0NfRkFMU0UKLUVOQUJMRV9HVEtfRE9DX1RSVUUKLUdUS0RPQ19ERVBTX0xJQlMKLUdUS0RPQ19ERVBTX0NGTEFHUwotSFRNTF9ESVIKLUdUS0RPQ19NS1BERgotR1RLRE9DX1JFQkFTRQotR1RLRE9DX0NIRUNLCi1ET0NfUFNfRkFMU0UKLURPQ19QU19UUlVFCi1ET0NfUERGX0ZBTFNFCi1ET0NfUERGX1RSVUUKLURPQ19IVE1MX0ZBTFNFCi1ET0NfSFRNTF9UUlVFCi1FTkFCTEVfRE9DQk9PS19GQUxTRQotRU5BQkxFX0RPQ0JPT0tfVFJVRQotSEFWRV9FUFNUT1BERgotSEFWRV9QTk1UT1BTCi1IQVZFX1BOR1RPUE5NCi1IQVZFX1hNTExJTlQKLUhBVkVfRFZJUFMKLUNBVF9FTlRSWV9FTkQKLUNBVF9FTlRSWV9TVEFSVAotRE9DQk9PS19ST09UCi1YU0xUUFJPQ19GTEFHUwotWE1MX0NBVEFMT0cKLVhTTFRQUk9DCi1IQVZFX1BTMlBERgotSEFWRV9KQURFVEVYCi1IQVZFX1hTTFRQUk9DCi1IQVZFX0RPQ0JPT0syUFMKLUhBVkVfSU5UUk9TUEVDVElPTl9GQUxTRQotSEFWRV9JTlRST1NQRUNUSU9OX1RSVUUKLUlOVFJPU1BFQ1RJT05fSU5JVAotSU5UUk9TUEVDVElPTl9NQUtFRklMRQotSU5UUk9TUEVDVElPTl9MSUJTCi1JTlRST1NQRUNUSU9OX0NGTEFHUwotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSCi1JTlRST1NQRUNUSU9OX0dJUkRJUgotSU5UUk9TUEVDVElPTl9HRU5FUkFURQotSU5UUk9TUEVDVElPTl9DT01QSUxFUgotSU5UUk9TUEVDVElPTl9TQ0FOTkVSCi1IQVZFX1ZBTEdSSU5EX0ZBTFNFCi1IQVZFX1ZBTEdSSU5EX1RSVUUKLVZBTEdSSU5EX1BBVEgKLUZMRVhfUEFUSAotQklTT05fUEFUSAotUEVSTF9QQVRICi1IQVZFX0NYWF9GQUxTRQotSEFWRV9DWFhfVFJVRQotQ1hYQ1BQCi1hbV9fZmFzdGRlcENYWF9GQUxTRQotYW1fX2Zhc3RkZXBDWFhfVFJVRQotQ1hYREVQTU9ERQotYWNfY3RfQ1hYCi1DWFgKLWFtX19mYXN0ZGVwQ0NBU19GQUxTRQotYW1fX2Zhc3RkZXBDQ0FTX1RSVUUKLUNDQVNERVBNT0RFCi1DQ0FTCi1IT1NUX0NQVQotSEFWRV9DUFVfQ1JJU1YzMl9GQUxTRQotSEFWRV9DUFVfQ1JJU1YzMl9UUlVFCi1IQVZFX0NQVV9DUklTX0ZBTFNFCi1IQVZFX0NQVV9DUklTX1RSVUUKLUhBVkVfQ1BVX1g4Nl82NF9GQUxTRQotSEFWRV9DUFVfWDg2XzY0X1RSVUUKLUhBVkVfQ1BVX002OEtfRkFMU0UKLUhBVkVfQ1BVX002OEtfVFJVRQotSEFWRV9DUFVfSUE2NF9GQUxTRQotSEFWRV9DUFVfSUE2NF9UUlVFCi1IQVZFX0NQVV9TMzkwX0ZBTFNFCi1IQVZFX0NQVV9TMzkwX1RSVUUKLUhBVkVfQ1BVX01JUFNfRkFMU0UKLUhBVkVfQ1BVX01JUFNfVFJVRQotSEFWRV9DUFVfSFBQQV9GQUxTRQotSEFWRV9DUFVfSFBQQV9UUlVFCi1IQVZFX0NQVV9TUEFSQ19GQUxTRQotSEFWRV9DUFVfU1BBUkNfVFJVRQotSEFWRV9DUFVfQVJNX0ZBTFNFCi1IQVZFX0NQVV9BUk1fVFJVRQotSEFWRV9DUFVfQVJDX0ZBTFNFCi1IQVZFX0NQVV9BUkNfVFJVRQotSEFWRV9DUFVfQUxQSEFfRkFMU0UKLUhBVkVfQ1BVX0FMUEhBX1RSVUUKLUhBVkVfQ1BVX1BQQzY0X0ZBTFNFCi1IQVZFX0NQVV9QUEM2NF9UUlVFCi1IQVZFX0NQVV9QUENfRkFMU0UKLUhBVkVfQ1BVX1BQQ19UUlVFCi1IQVZFX0NQVV9JMzg2X0ZBTFNFCi1IQVZFX0NQVV9JMzg2X1RSVUUKLUhBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVNfRkFMU0UKLUhBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVNfVFJVRQotSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9GQUxTRQotSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9UUlVFCi1IQVZFX1BUUF9GQUxTRQotSEFWRV9QVFBfVFJVRQotU0VUQ0FQCi1IQVZFX0NBUAotQ0FQX0xJQlMKLUJVSUxEX1RPT0xTX0ZBTFNFCi1CVUlMRF9UT09MU19UUlVFCi1CVUlMRF9CRU5DSE1BUktTX0ZBTFNFCi1CVUlMRF9CRU5DSE1BUktTX1RSVUUKLUJVSUxEX0ZBSUxJTkdfVEVTVFNfRkFMU0UKLUJVSUxEX0ZBSUxJTkdfVEVTVFNfVFJVRQotQlVJTERfVEVTVFNfRkFMU0UKLUJVSUxEX1RFU1RTX1RSVUUKLUdTVF9QTFVHSU5fQlVJTERfU1RBVElDX0ZBTFNFCi1HU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19UUlVFCi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUwotRU5BQkxFX0JBU0hfQ09NUExFVElPTl9GQUxTRQotRU5BQkxFX0JBU0hfQ09NUExFVElPTl9UUlVFCi1CQVNIX0hFTFBFUlNfRElSCi1CQVNIX0NPTVBMRVRJT05fRElSCi1CQVNIX0NPTVBMRVRJT05fTElCUwotQkFTSF9DT01QTEVUSU9OX0NGTEFHUwotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQwotR1NUX1BLR19DT05GSUdfUEFUSAotR1NUX1BBQ0tBR0VfT1JJR0lOCi1HU1RfUEFDS0FHRV9OQU1FCi1CVUlMRF9FWEFNUExFU19GQUxTRQotQlVJTERfRVhBTVBMRVNfVFJVRQotR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRQotR1NUX0dDT1ZfRU5BQkxFRF9UUlVFCi1DQ0FTRkxBR1MKLUZGTEFHUwotQ1hYRkxBR1MKLUdDT1YKLUdDT1ZfTElCUwotR0NPVl9DRkxBR1MKLVZBTEdSSU5EX0xJQlMKLVZBTEdSSU5EX0NGTEFHUwotUEtHX0NPTkZJRwotR1NUX0RJU0FCTEVfUExVR0lOX0ZBTFNFCi1HU1RfRElTQUJMRV9QTFVHSU5fVFJVRQotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORQotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUwotR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0UKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX1RSVUUKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORQotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfRkFMU0UKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX1RSVUUKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORQotR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0UKLUdTVF9ESVNBQkxFX1BBUlNFX1RSVUUKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORQotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19GQUxTRQotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19UUlVFCi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORQotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFCi1HU1RfRElTQUJMRV9HU1RfREVCVUdfVFJVRQotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORQotTE9DQUxFRElSCi1HRVRURVhUX1BBQ0tBR0UKLVBPU1VCCi1MVExJQklOVEwKLUxJQklOVEwKLUlOVExMSUJTCi1MVExJQklDT05WCi1MSUJJQ09OVgotSU5UTF9NQUNPU1hfTElCUwotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUwotTVNHTUVSR0UKLVhHRVRURVhUXzAxNQotWEdFVFRFWFQKLUdNU0dGTVRfMDE1Ci1NU0dGTVRfMDE1Ci1HTVNHRk1UCi1NU0dGTVQKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTgotVVNFX05MUwotQUNMT0NBTF9BTUZMQUdTCi1DUFAKLUxUX1NZU19MSUJSQVJZX1BBVEgKLU9UT09MNjQKLU9UT09MCi1MSVBPCi1OTUVESVQKLURTWU1VVElMCi1NQU5JRkVTVF9UT09MCi1SQU5MSUIKLWFjX2N0X0FSCi1BUgotTE5fUwotTk0KLWFjX2N0X0RVTVBCSU4KLURVTVBCSU4KLUxECi1GR1JFUAotRUdSRVAKLUdSRVAKLVNFRAotYW1fX2Zhc3RkZXBDQ19GQUxTRQotYW1fX2Zhc3RkZXBDQ19UUlVFCi1DQ0RFUE1PREUKLWFtX19ub2RlcAotQU1ERVBCQUNLU0xBU0gKLUFNREVQX0ZBTFNFCi1BTURFUF9UUlVFCi1hbV9fcXVvdGUKLWFtX19pbmNsdWRlCi1ERVBESVIKLU9CSkVYVAotRVhFRVhUCi1hY19jdF9DQwotQ1BQRkxBR1MKLUxERkxBR1MKLUNGTEFHUwotQ0MKLUxJQlRPT0wKLU9CSkRVTVAKLURMTFRPT0wKLUFTCi1HU1RfTFRfTERGTEFHUwotR1NUX0xJQlZFUlNJT04KLUdTVF9BR0UKLUdTVF9SRVZJU0lPTgotR1NUX0NVUlJFTlQKLUdTVF9BUElfVkVSU0lPTgotR1NUX1ZFUlNJT05fTkFOTwotR1NUX1ZFUlNJT05fTUlDUk8KLUdTVF9WRVJTSU9OX01JTk9SCi1HU1RfVkVSU0lPTl9NQUpPUgotTUFJTlQKLU1BSU5UQUlORVJfTU9ERV9GQUxTRQotTUFJTlRBSU5FUl9NT0RFX1RSVUUKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFCi1QQUNLQUdFX1ZFUlNJT05fTkFOTwotUEFDS0FHRV9WRVJTSU9OX01JQ1JPCi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUgotQU1fQkFDS1NMQVNICi1BTV9ERUZBVUxUX1ZFUkJPU0lUWQotQU1fREVGQVVMVF9WCi1BTV9WCi1hbV9fdW50YXIKLWFtX190YXIKLUFNVEFSCi1hbV9fbGVhZGluZ19kb3QKLVNFVF9NQUtFCi1BV0sKLW1rZGlyX3AKLU1LRElSX1AKLUlOU1RBTExfU1RSSVBfUFJPR1JBTQotU1RSSVAKLWluc3RhbGxfc2gKLU1BS0VJTkZPCi1BVVRPSEVBREVSCi1BVVRPTUFLRQotQVVUT0NPTkYKLUFDTE9DQUwKLVZFUlNJT04KLVBBQ0tBR0UKLUNZR1BBVEhfVwotYW1fX2lzcmMKLUlOU1RBTExfREFUQQotSU5TVEFMTF9TQ1JJUFQKLUlOU1RBTExfUFJPR1JBTQotdGFyZ2V0X29zCi10YXJnZXRfdmVuZG9yCi10YXJnZXRfY3B1Ci10YXJnZXQKLWhvc3Rfb3MKLWhvc3RfdmVuZG9yCi1ob3N0X2NwdQotaG9zdAotYnVpbGRfb3MKLWJ1aWxkX3ZlbmRvcgotYnVpbGRfY3B1Ci1idWlsZAotdGFyZ2V0X2FsaWFzCi1ob3N0X2FsaWFzCi1idWlsZF9hbGlhcwotTElCUwotRUNIT19UCi1FQ0hPX04KLUVDSE9fQwotREVGUwotbWFuZGlyCi1sb2NhbGVkaXIKLWxpYmRpcgotcHNkaXIKLXBkZmRpcgotZHZpZGlyCi1odG1sZGlyCi1pbmZvZGlyCi1kb2NkaXIKLW9sZGluY2x1ZGVkaXIKLWluY2x1ZGVkaXIKLXJ1bnN0YXRlZGlyCi1sb2NhbHN0YXRlZGlyCi1zaGFyZWRzdGF0ZWRpcgotc3lzY29uZmRpcgotZGF0YWRpcgotZGF0YXJvb3RkaXIKLWxpYmV4ZWNkaXIKLXNiaW5kaXIKLWJpbmRpcgotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZQotcHJlZml4Ci1leGVjX3ByZWZpeAotUEFDS0FHRV9VUkwKLVBBQ0tBR0VfQlVHUkVQT1JUCi1QQUNLQUdFX1NUUklORwotUEFDS0FHRV9WRVJTSU9OCi1QQUNLQUdFX1RBUk5BTUUKLVBBQ0tBR0VfTkFNRQotUEFUSF9TRVBBUkFUT1IKLVNIRUxMJwotYWNfc3Vic3RfZmlsZXM9JycKLWFjX3VzZXJfb3B0cz0nCi1lbmFibGVfb3B0aW9uX2NoZWNraW5nCi1lbmFibGVfc2lsZW50X3J1bGVzCi1lbmFibGVfbWFpbnRhaW5lcl9tb2RlCi1lbmFibGVfc3RhdGljCi1lbmFibGVfc2hhcmVkCi13aXRoX3BpYwotZW5hYmxlX2Zhc3RfaW5zdGFsbAotd2l0aF9haXhfc29uYW1lCi1lbmFibGVfZGVwZW5kZW5jeV90cmFja2luZwotd2l0aF9nbnVfbGQKLXdpdGhfc3lzcm9vdAotZW5hYmxlX2xpYnRvb2xfbG9jawotd2l0aF9hdXRvY29uZgotd2l0aF9hdXRvaGVhZGVyCi13aXRoX2F1dG9tYWtlCi13aXRoX2FjbG9jYWwKLWVuYWJsZV9ubHMKLWVuYWJsZV9ycGF0aAotd2l0aF9saWJpY29udl9wcmVmaXgKLXdpdGhfbGliaW50bF9wcmVmaXgKLWVuYWJsZV9mYXRhbF93YXJuaW5ncwotZW5hYmxlX2V4dHJhX2NoZWNrCi1lbmFibGVfZ3N0X2RlYnVnCi1lbmFibGVfZ3N0X3RyYWNlcl9ob29rcwotZW5hYmxlX3BhcnNlCi1lbmFibGVfb3B0aW9uX3BhcnNpbmcKLWVuYWJsZV9yZWdpc3RyeQotZW5hYmxlX3BsdWdpbgotZW5hYmxlX2RlYnVnCi1lbmFibGVfcHJvZmlsaW5nCi1lbmFibGVfdmFsZ3JpbmQKLWVuYWJsZV9nY292Ci1lbmFibGVfZXhhbXBsZXMKLXdpdGhfcGtnX2NvbmZpZ19wYXRoCi13aXRoX3BhY2thZ2VfbmFtZQotd2l0aF9wYWNrYWdlX29yaWdpbgotd2l0aF9iYXNoX2NvbXBsZXRpb25fZGlyCi1lbmFibGVfc3RhdGljX3BsdWdpbnMKLWVuYWJsZV90ZXN0cwotZW5hYmxlX2ZhaWxpbmdfdGVzdHMKLWVuYWJsZV9iZW5jaG1hcmtzCi1lbmFibGVfdG9vbHMKLWVuYWJsZV9wb2lzb25pbmcKLXdpdGhfcHRwX2hlbHBlcl9zZXR1aWRfdXNlcgotd2l0aF9wdHBfaGVscGVyX3NldHVpZF9ncm91cAotd2l0aF9wdHBfaGVscGVyX3Blcm1pc3Npb25zCi1lbmFibGVfbGFyZ2VmaWxlCi1lbmFibGVfaW50cm9zcGVjdGlvbgotZW5hYmxlX2RvY2Jvb2sKLXdpdGhfaHRtbF9kaXIKLWVuYWJsZV9ndGtfZG9jCi1lbmFibGVfZ3RrX2RvY19odG1sCi1lbmFibGVfZ3RrX2RvY19wZGYKLWVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzCi1lbmFibGVfZ2xpYl9hc3NlcnRzCi1lbmFibGVfY2hlY2sKLXdpdGhfbWVtb3J5X2FsaWdubWVudAotZW5hYmxlX0JzeW1ib2xpYwotJwotICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKLWhvc3RfYWxpYXMKLXRhcmdldF9hbGlhcwotQ0MKLUNGTEFHUwotTERGTEFHUwotTElCUwotQ1BQRkxBR1MKLUxUX1NZU19MSUJSQVJZX1BBVEgKLUNQUAotUEtHX0NPTkZJRwotVkFMR1JJTkRfQ0ZMQUdTCi1WQUxHUklORF9MSUJTCi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTCi1CQVNIX0NPTVBMRVRJT05fTElCUwotQ0NBUwotQ0NBU0ZMQUdTCi1DWFgKLUNYWEZMQUdTCi1DQ0MKLUNYWENQUAotR1RLRE9DX0RFUFNfQ0ZMQUdTCi1HVEtET0NfREVQU19MSUJTCi1QWVRIT04KLUdMSUJfQ0ZMQUdTCi1HTElCX0xJQlMKLUdJT19DRkxBR1MKLUdJT19MSUJTCi1HVEtfQ0ZMQUdTCi1HVEtfTElCUwotVU5XSU5EX0NGTEFHUwotVU5XSU5EX0xJQlMnCi0KLQotIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgotYWNfaW5pdF9oZWxwPQotYWNfaW5pdF92ZXJzaW9uPWZhbHNlCi1hY191bnJlY29nbml6ZWRfb3B0cz0KLWFjX3VucmVjb2duaXplZF9zZXA9Ci0jIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAotIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgotY2FjaGVfZmlsZT0vZGV2L251bGwKLWV4ZWNfcHJlZml4PU5PTkUKLW5vX2NyZWF0ZT0KLW5vX3JlY3Vyc2lvbj0KLXByZWZpeD1OT05FCi1wcm9ncmFtX3ByZWZpeD1OT05FCi1wcm9ncmFtX3N1ZmZpeD1OT05FCi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAotc2lsZW50PQotc2l0ZT0KLXNyY2Rpcj0KLXZlcmJvc2U9Ci14X2luY2x1ZGVzPU5PTkUKLXhfbGlicmFyaWVzPU5PTkUKLQotIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCi0jIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKLSMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4Ci0jIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCi0jIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgotIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQotYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCi1zYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJwotbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKLWRhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCi1kYXRhZGlyPScke2RhdGFyb290ZGlyfScKLXN5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCi1zaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKLWxvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCi1ydW5zdGF0ZWRpcj0nJHtsb2NhbHN0YXRlZGlyfS9ydW4nCi1pbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKLW9sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKLWRvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKLWluZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCi1odG1sZGlyPScke2RvY2Rpcn0nCi1kdmlkaXI9JyR7ZG9jZGlyfScKLXBkZmRpcj0nJHtkb2NkaXJ9JwotcHNkaXI9JyR7ZG9jZGlyfScKLWxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJwotbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCi1tYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKLQotYWNfcHJldj0KLWFjX2Rhc2hkYXNoPQotZm9yIGFjX29wdGlvbgotZG8KLSAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCi0gIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgotICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KLSAgICBhY19wcmV2PQotICAgIGNvbnRpbnVlCi0gIGZpCi0KLSAgY2FzZSAkYWNfb3B0aW9uIGluCi0gICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7Ci0gICo9KSAgIGFjX29wdGFyZz0gOzsKLSAgKikgICAgYWNfb3B0YXJnPXllcyA7OwotICBlc2FjCi0KLSAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KLQotICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KLSAgLS0pCi0gICAgYWNfZGFzaGRhc2g9eWVzIDs7Ci0KLSAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKLSAgICBhY19wcmV2PWJpbmRpciA7OwotICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQotICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKLSAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7Ci0gIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQotICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKLQotICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCi0gIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQotICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OwotICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKLSAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKLSAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKLQotICAtLWNvbmZpZy1jYWNoZSB8IC1DKQotICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7Ci0KLSAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCi0gICAgYWNfcHJldj1kYXRhZGlyIDs7Ci0gIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCi0gICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCi0gIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQotICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKLSAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAotICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKLSAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQotICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCi0gICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgotICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAotICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKLSAgICBjYXNlICRhY191c2VyX29wdHMgaW4KLSAgICAgICoiCi0iZW5hYmxlXyRhY191c2Vyb3B0IgotIiopIDs7Ci0gICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKLQkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKLSAgICBlc2FjCi0gICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKLQotICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQotICAgIGFjX3ByZXY9ZG9jZGlyIDs7Ci0gIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQotICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKLSAgICBhY19wcmV2PWR2aWRpciA7OwotICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQotICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKLSAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCi0gICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgotICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAotICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKLSAgICBjYXNlICRhY191c2VyX29wdHMgaW4KLSAgICAgICoiCi0iZW5hYmxlXyRhY191c2Vyb3B0IgotIiopIDs7Ci0gICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgotCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwotICAgIGVzYWMKLSAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OwotCi0gIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKLSAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAotICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKLSAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7Ci0gIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAotICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAotICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKLSAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7Ci0KLSAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKLSAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KLSAgICB3aXRoX2dhcz15ZXMgOzsKLQotICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQotICAgIGFjX2luaXRfaGVscD1sb25nIDs7Ci0gIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKLSAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7Ci0gIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKLSAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKLQotICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKLSAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKLSAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKLSAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKLQotICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKLSAgICBhY19wcmV2PWh0bWxkaXIgOzsKLSAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCi0gIHwgLS1odD0qKQotICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKLSAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKLSAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKLSAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKLSAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQotICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCi0gICAgYWNfcHJldj1pbmZvZGlyIDs7Ci0gIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCi0gICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKLSAgICBhY19wcmV2PWxpYmRpciA7OwotICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCi0gICAgbGliZGlyPSRhY19vcHRhcmcgOzsKLQotICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCi0gIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQotICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OwotICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAotICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKLSAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKLQotICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCi0gICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKLSAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKLSAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKLSAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKLSAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKLSAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCi0gIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQotICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCi0gICAgYWNfcHJldj1tYW5kaXIgOzsKLSAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQotICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLW5mcCB8IC0tbmZwIHwgLS1uZikKLSAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgotICAgIHdpdGhfZnA9bm8gOzsKLQotICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAotICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKLSAgICBub19jcmVhdGU9eWVzIDs7Ci0KLSAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCi0gIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQotICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKLQotICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCi0gIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAotICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCi0gICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7Ci0gIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAotICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCi0gIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCi0gICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKLSAgICBhY19wcmV2PXByZWZpeCA7OwotICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCi0gICAgcHJlZml4PSRhY19vcHRhcmcgOzsKLQotICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAotICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKLSAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7Ci0gIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAotICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCi0gICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OwotCi0gIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCi0gIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQotICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKLSAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCi0gIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKLSAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7Ci0KLSAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAotICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAotICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAotICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAotICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCi0gICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7Ci0gIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKLSAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQotICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OwotCi0gIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCi0gICAgYWNfcHJldj1wZGZkaXIgOzsKLSAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKLSAgICBwZGZkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCi0gICAgYWNfcHJldj1wc2RpciA7OwotICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKLSAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKLSAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCi0gICAgc2lsZW50PXllcyA7OwotCi0gIC1ydW5zdGF0ZWRpciB8IC0tcnVuc3RhdGVkaXIgfCAtLXJ1bnN0YXRlZGkgfCAtLXJ1bnN0YXRlZCBcCi0gIHwgLS1ydW5zdGF0ZSB8IC0tcnVuc3RhdCB8IC0tcnVuc3RhIHwgLS1ydW5zdCB8IC0tcnVucyBcCi0gIHwgLS1ydW4gfCAtLXJ1IHwgLS1yKQotICAgIGFjX3ByZXY9cnVuc3RhdGVkaXIgOzsKLSAgLXJ1bnN0YXRlZGlyPSogfCAtLXJ1bnN0YXRlZGlyPSogfCAtLXJ1bnN0YXRlZGk9KiB8IC0tcnVuc3RhdGVkPSogXAotICB8IC0tcnVuc3RhdGU9KiB8IC0tcnVuc3RhdD0qIHwgLS1ydW5zdGE9KiB8IC0tcnVuc3Q9KiB8IC0tcnVucz0qIFwKLSAgfCAtLXJ1bj0qIHwgLS1ydT0qIHwgLS1yPSopCi0gICAgcnVuc3RhdGVkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQotICAgIGFjX3ByZXY9c2JpbmRpciA7OwotICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAotICB8IC0tc2JpPSogfCAtLXNiPSopCi0gICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCi0gIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAotICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAotICB8IC0tc2hhIHwgLS1zaCkKLSAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7Ci0gIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAotICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAotICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKLSAgfCAtLXNoYT0qIHwgLS1zaD0qKQotICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKLQotICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQotICAgIGFjX3ByZXY9c2l0ZSA7OwotICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQotICAgIHNpdGU9JGFjX29wdGFyZyA7OwotCi0gIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCi0gICAgYWNfcHJldj1zcmNkaXIgOzsKLSAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKLSAgICBzcmNkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKLSAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCi0gICAgYWNfcHJldj1zeXNjb25mZGlyIDs7Ci0gIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCi0gIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKLSAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKLQotICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQotICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7Ci0gIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKLSAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OwotCi0gIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCi0gICAgdmVyYm9zZT15ZXMgOzsKLQotICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQotICAgIGFjX2luaXRfdmVyc2lvbj06IDs7Ci0KLSAgLXdpdGgtKiB8IC0td2l0aC0qKQotICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCi0gICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgotICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAotICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKLSAgICBjYXNlICRhY191c2VyX29wdHMgaW4KLSAgICAgICoiCi0id2l0aF8kYWNfdXNlcm9wdCIKLSIqKSA7OwotICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCi0JIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7Ci0gICAgZXNhYwotICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OwotCi0gIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKLSAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKLSAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKLSAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCi0gICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCi0gICAgICAqIgotIndpdGhfJGFjX3VzZXJvcHQiCi0iKikgOzsKLSAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIgotCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwotICAgIGVzYWMKLSAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsKLQotICAtLXgpCi0gICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgotICAgIHdpdGhfeD15ZXMgOzsKLQotICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCi0gIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCi0gICAgYWNfcHJldj14X2luY2x1ZGVzIDs7Ci0gIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCi0gIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKLSAgICB4X2luY2x1ZGVzPSRhY19vcHRhcmcgOzsKLQotICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAotICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKLSAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7Ci0gIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKLSAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCi0gICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OwotCi0gIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJwotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKLSAgICA7OwotCi0gICo9KikKLSAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCi0gICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGNhc2UgJGFjX2VudnZhciBpbiAjKAotICAgICAgJycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQotICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsKLSAgICBlc2FjCi0gICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCi0gICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKLQotICAqKQotICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KLSAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKLSAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKLSAgICA6ICIke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufSIKLSAgICA7OwotCi0gIGVzYWMKLWRvbmUKLQotaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCi0gIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKLSAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKLWZpCi0KLWlmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KLSAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgotICAgIG5vKSA7OwotICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKLSAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7Ci0gIGVzYWMKLWZpCi0KLSMgQ2hlY2sgYWxsIGRpcmVjdG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5LgotZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCi0JCWRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXAotCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCi0JCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyIHJ1bnN0YXRlZGlyCi1kbwotICBldmFsIGFjX3ZhbD1cJCRhY192YXIKLSAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KLSAgY2FzZSAkYWNfdmFsIGluCi0gICAgKi8gKQotICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCi0gICAgICBldmFsICRhY192YXI9XCRhY192YWw7OwotICBlc2FjCi0gICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KLSAgY2FzZSAkYWNfdmFsIGluCi0gICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKLSAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7Ci0gIGVzYWMKLSAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCi1kb25lCi0KLSMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKLSMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgotIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgotYnVpbGQ9JGJ1aWxkX2FsaWFzCi1ob3N0PSRob3N0X2FsaWFzCi10YXJnZXQ9JHRhcmdldF9hbGlhcwotCi0jIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCi1pZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KLSAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCi0gIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9eWVzCi0gIGZpCi1maQotCi1hY190b29sX3ByZWZpeD0KLXRlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KLQotdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAotCi0KLWFjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgotYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgotYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8Ci0gIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKLXRlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAotICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgotCi0KLSMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KLWlmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCi0gIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCi0gICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KLSAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8Ci0kYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgc3JjZGlyPSRhY19jb25mZGlyCi0gIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCi0gICAgc3JjZGlyPS4uCi0gIGZpCi1lbHNlCi0gIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KLWZpCi1pZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgotICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKLSAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKLWZpCi1hY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCi1hY19hYnNfY29uZmRpcj1gKAotCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCi0JcHdkKWAKLSMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCi1pZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCi0gIHNyY2Rpcj0uCi1maQotIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KLSMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbwotIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCi1jYXNlICRzcmNkaXIgaW4KLSovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OwotZXNhYwotZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KLSAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQotICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KLSAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQotICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KLWRvbmUKLQotIwotIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgotIwotaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KLSAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCi0gICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KLSAgY2F0IDw8X0FDRU9GCi1cYGNvbmZpZ3VyZScgY29uZmlndXJlcyBHU3RyZWFtZXIgMS4xMC40IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KLQotVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCi0KLVRvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKLVZBUj1WQUxVRS4gIFNlZSBiZWxvdyBmb3IgZGVzY3JpcHRpb25zIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCB2YXJpYWJsZXMuCi0KLURlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgotCi1Db25maWd1cmF0aW9uOgotICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAotICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCi0gICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcwotICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcgLi4uJyBtZXNzYWdlcwotICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCi0gIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCi0gIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCi0gICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQotCi1JbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6Ci0gIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAotICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQotICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAotICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQotCi1CeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KLVxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5Ci1hbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAotZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KLQotRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCi0KLUZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6Ci0gIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQotICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KLSAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQotICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KLSAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQotICAtLXJ1bnN0YXRlZGlyPURJUiAgICAgICBtb2RpZmlhYmxlIHBlci1wcm9jZXNzIGRhdGEgW0xPQ0FMU1RBVEVESVIvcnVuXQotICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQotICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCi0gIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCi0gIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KLSAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQotICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KLSAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KLSAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvZ3N0cmVhbWVyXQotICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQotX0FDRU9GCi0KLSAgY2F0IDw8XF9BQ0VPRgotCi1Qcm9ncmFtIG5hbWVzOgotICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCi0gIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcwotICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTSAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcwotCi1TeXN0ZW0gdHlwZXM6Ci0gIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCi0gIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQotICAtLXRhcmdldD1UQVJHRVQgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIGNvbXBpbGVycyBmb3IgVEFSR0VUIFtIT1NUXQotX0FDRU9GCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgotICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIEdTdHJlYW1lciAxLjEwLjQ6Ijs7Ci0gICBlc2FjCi0gIGNhdCA8PFxfQUNFT0YKLQotT3B0aW9uYWwgRmVhdHVyZXM6Ci0gIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKLSAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQotICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCi0gIC0tZW5hYmxlLXNpbGVudC1ydWxlcyAgIGxlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpCi0gIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTAiKQotICAtLWRpc2FibGUtbWFpbnRhaW5lci1tb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwgKGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcgotICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PW5vXQotICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KLSAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQotICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKLSAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCi0gIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcykKLSAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzCi0gIC0tZGlzYWJsZS1mYXRhbC13YXJuaW5ncwotICAgICAgICAgICAgICAgICAgICAgICAgICBEb24ndCB0dXJuIGNvbXBpbGVyIHdhcm5pbmdzIGludG8gZmF0YWwgZXJyb3JzCi0gIC0tZW5hYmxlLWV4dHJhLWNoZWNrcyAgIEVuYWJsZSBleHRyYSBydW50aW1lIGNoZWNrcwotICAtLWRpc2FibGUtZ3N0LWRlYnVnICAgICBkaXNhYmxlIGRlYnVnZ2luZyBzdWJzeXN0ZW0KLSAgLS1kaXNhYmxlLWdzdC10cmFjZXItaG9va3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSB0cmFjaW5nIHN1YnN5c3RlbSBob29rcwotICAtLWRpc2FibGUtcGFyc2UgICAgICAgICBkaXNhYmxlIGNvbW1hbmQtbGluZSBwYXJzZXIKLSAgLS1kaXNhYmxlLW9wdGlvbi1wYXJzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUgb3B0aW9uIHBhcnNpbmcgd2hlbiBnc3RfaW5pdAotICAtLWRpc2FibGUtcmVnaXN0cnkgICAgICBkaXNhYmxlIHBsdWdpbiByZWdpc3RyeQotICAtLWRpc2FibGUtcGx1Z2luICAgICAgICBkaXNhYmxlIHBsdWdpbgotICAtLWRpc2FibGUtZGVidWcgICAgICAgICBkaXNhYmxlIGFkZGl0aW9uIG9mIC1nIGRlYnVnZ2luZyBpbmZvCi0gIC0tZW5hYmxlLXByb2ZpbGluZyAgICAgIGFkZHMgLXBnIHRvIGNvbXBpbGVyIGNvbW1hbmRsaW5lLCBmb3IgcHJvZmlsaW5nCi0gIC0tZGlzYWJsZS12YWxncmluZCAgICAgIGRpc2FibGUgcnVuLXRpbWUgdmFsZ3JpbmQgZGV0ZWN0aW9uCi0gIC0tZW5hYmxlLWdjb3YgICAgICAgICAgIGNvbXBpbGUgd2l0aCBjb3ZlcmFnZSBwcm9maWxpbmcgaW5zdHJ1bWVudGF0aW9uIChnY2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSkKLSAgLS1kaXNhYmxlLWV4YW1wbGVzICAgICAgZGlzYWJsZSBidWlsZGluZyBleGFtcGxlcwotICAtLWVuYWJsZS1zdGF0aWMtcGx1Z2lucyBidWlsZCBzdGF0aWMgcGx1Z2lucyBbZGVmYXVsdD1ub10KLSAgLS1kaXNhYmxlLXRlc3RzICAgICAgICAgZGlzYWJsZSBidWlsZGluZyB0ZXN0IGFwcHMKLSAgLS1kaXNhYmxlLWZhaWxpbmctdGVzdHMgZGlzYWJsZSBidWlsZGluZyB0ZXN0cyBrbm93biB0byBmYWlsCi0gIC0tZGlzYWJsZS1iZW5jaG1hcmtzICAgIGRpc2FibGUgYnVpbGRpbmcgYmVuY2htYXJrcyBhcHBzCi0gIC0tZGlzYWJsZS10b29scyAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgdG9vbHMKLSAgLS1lbmFibGUtcG9pc29uaW5nICAgICAgZW5hYmxlIHBvaXNvbmluZyBvZiBkZWFsbG9jYXRlZCBvYmplY3RzCi0gIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKLSAgLS1lbmFibGUtaW50cm9zcGVjdGlvbj1bbm8vYXV0by95ZXNdCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBpbnRyb3NwZWN0aW9uIGZvciB0aGlzIGJ1aWxkCi0gIC0tZW5hYmxlLWRvY2Jvb2sgICAgICAgIHVzZSBkb2Nib29rIHRvIGJ1aWxkIGRvY3VtZW50YXRpb24gW2RlZmF1bHQ9bm9dCi0gIC0tZW5hYmxlLWd0ay1kb2MgICAgICAgIHVzZSBndGstZG9jIHRvIGJ1aWxkIGRvY3VtZW50YXRpb24gW1tkZWZhdWx0PW5vXV0KLSAgLS1lbmFibGUtZ3RrLWRvYy1odG1sICAgYnVpbGQgZG9jdW1lbnRhdGlvbiBpbiBodG1sIGZvcm1hdCBbW2RlZmF1bHQ9eWVzXV0KLSAgLS1lbmFibGUtZ3RrLWRvYy1wZGYgICAgYnVpbGQgZG9jdW1lbnRhdGlvbiBpbiBwZGYgZm9ybWF0IFtbZGVmYXVsdD1ub11dCi0gIC0tZW5hYmxlLWdvYmplY3QtY2FzdC1jaGVja3M9W25vL2F1dG8veWVzXQotICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgR09iamVjdCBjYXN0IGNoZWNrcwotICAtLWVuYWJsZS1nbGliLWFzc2VydHM9W25vL3llc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEdMaWIgYXNzZXJ0aW9uCi0gIC0tZGlzYWJsZS1jaGVjayAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgdW5pdCB0ZXN0IGxpYnJhcmllcwotICAtLWRpc2FibGUtQnN5bWJvbGljICAgICBhdm9pZCBsaW5raW5nIHdpdGggLUJzeW1ib2xpYwotCi1PcHRpb25hbCBQYWNrYWdlczoKLSAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCi0gIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKLSAgLS13aXRoLXBpY1s9UEtHU10gICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCi0gIC0td2l0aC1haXgtc29uYW1lPWFpeHxzdnI0fGJvdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyAoYWthICJTT05BTUUiKSB2YXJpYW50IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgb24gQUlYLCBbZGVmYXVsdD1haXhdLgotICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCi0gIC0td2l0aC1zeXNyb290Wz1ESVJdICAgIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSIChvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgotICAtLXdpdGgtYXV0b2NvbmYgICAgICAgICB1c2UgYSBkaWZmZXJlbnQgYXV0b2NvbmYgZm9yIHJlZ2VuZXJhdGlvbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZXMKLSAgLS13aXRoLWF1dG9oZWFkZXIgICAgICAgdXNlIGEgZGlmZmVyZW50IGF1dG9oZWFkZXIgZm9yIHJlZ2VuZXJhdGlvbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZXMKLSAgLS13aXRoLWF1dG9tYWtlICAgICAgICAgdXNlIGEgZGlmZmVyZW50IGF1dG9tYWtlIGZvciByZWdlbmVyYXRpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzCi0gIC0td2l0aC1hY2xvY2FsICAgICAgICAgIHVzZSBhIGRpZmZlcmVudCBhY2xvY2FsIGZvciByZWdlbmVyYXRpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzCi0gIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBkZWZhdWx0PW5vCi0gIC0td2l0aC1saWJpY29udi1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKLSAgLS13aXRob3V0LWxpYmljb252LXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJpY29udiBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKLSAgLS13aXRoLWxpYmludGwtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmludGwgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKLSAgLS13aXRob3V0LWxpYmludGwtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmludGwgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyCi0gIC0td2l0aC1wa2ctY29uZmlnLXBhdGggIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBrZy1jb25maWcoMSkgZGlycwotICAtLXdpdGgtcGFja2FnZS1uYW1lICAgICBzcGVjaWZ5IHBhY2thZ2UgbmFtZSB0byB1c2UgaW4gcGx1Z2lucwotICAtLXdpdGgtcGFja2FnZS1vcmlnaW4gICBzcGVjaWZ5IHBhY2thZ2Ugb3JpZ2luIFVSTCB0byB1c2UgaW4gcGx1Z2lucwotICAtLXdpdGgtYmFzaC1jb21wbGV0aW9uLWRpcj1QQVRICi0gICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGwgdGhlIGJhc2ggYXV0by1jb21wbGV0aW9uIHNjcmlwdCBpbiB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4gW2RlZmF1bHQ9eWVzXQotICAtLXdpdGgtcHRwLWhlbHBlci1zZXR1aWQtdXNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyIHRvIHN3aXRjaCB0byB3aGVuIGluc3RhbGxpbmcgZ3N0LXB0cC1oZWxwZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dWlkIHJvb3QKLSAgLS13aXRoLXB0cC1oZWxwZXItc2V0dWlkLWdyb3VwCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIHRvIHN3aXRjaCB0byB3aGVuIGluc3RhbGxpbmcgZ3N0LXB0cC1oZWxwZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dWlkIHJvb3QKLSAgLS13aXRoLXB0cC1oZWxwZXItcGVybWlzc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaG93IHRvIGdhaW4gUFRQIHBlcm1pc3Npb25zIChub25lLCBzZXR1aWQtcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzLCBhdXRvKQotICAtLXdpdGgtaHRtbC1kaXI9UEFUSCAgICBwYXRoIHRvIGluc3RhbGxlZCBkb2NzCi0gIC0td2l0aC1tZW1vcnktYWxpZ25tZW50IDgsTixtYWxsb2MscGFnZXNpemUgKGRlZmF1bHQgaXMgMzIpCi0KLVNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgotICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKLSAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncwotICBMREZMQUdTICAgICBsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKLSAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgotICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+Ci0gIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKLSAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+Ci0gIExUX1NZU19MSUJSQVJZX1BBVEgKLSAgICAgICAgICAgICAgVXNlci1kZWZpbmVkIHJ1bi10aW1lIGxpYnJhcnkgc2VhcmNoIHBhdGguCi0gIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCi0gIFBLR19DT05GSUcgIHBhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5Ci0gIFZBTEdSSU5EX0NGTEFHUwotICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBWQUxHUklORCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFZBTEdSSU5EX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBWQUxHUklORCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEJBU0hfQ09NUExFVElPTl9DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgQkFTSF9DT01QTEVUSU9OLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgQkFTSF9DT01QTEVUSU9OX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBCQVNIX0NPTVBMRVRJT04sIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBDQ0FTICAgICAgICBhc3NlbWJsZXIgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdHMgdG8gQ0MpCi0gIENDQVNGTEFHUyAgIGFzc2VtYmxlciBjb21waWxlciBmbGFncyAoZGVmYXVsdHMgdG8gQ0ZMQUdTKQotICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAotICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKLSAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgotICBHVEtET0NfREVQU19DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgR1RLRE9DX0RFUFMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHVEtET0NfREVQU19MSUJTCi0gICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgR1RLRE9DX0RFUFMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBQWVRIT04gICAgICB0aGUgUHl0aG9uIGludGVycHJldGVyCi0gIEdMSUJfQ0ZMQUdTIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdMSUIsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHTElCX0xJQlMgICBsaW5rZXIgZmxhZ3MgZm9yIEdMSUIsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHSU9fQ0ZMQUdTICBDIGNvbXBpbGVyIGZsYWdzIGZvciBHSU8sIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHSU9fTElCUyAgICBsaW5rZXIgZmxhZ3MgZm9yIEdJTywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdUS19DRkxBR1MgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdUSywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdUS19MSUJTICAgIGxpbmtlciBmbGFncyBmb3IgR1RLLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgVU5XSU5EX0NGTEFHUwotICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBVTldJTkQsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBVTldJTkRfTElCUyBsaW5rZXIgZmxhZ3MgZm9yIFVOV0lORCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0KLVVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCi1pdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCi0KLVJlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXI+LgotX0FDRU9GCi1hY19zdGF0dXM9JD8KLWZpCi0KLWlmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KLSAgIyBJZiB0aGVyZSBhcmUgc3ViZGlycywgcmVwb3J0IHRoZWlyIHNwZWNpZmljIC0taGVscC4KLSAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKLSAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAotICAgICAgeyBjZCAiJHNyY2RpciIgJiYgYWNfcHdkPWBwd2RgICYmIHNyY2Rpcj0uICYmIHRlc3QgLWQgIiRhY19kaXIiOyB9IHx8Ci0gICAgICBjb250aW51ZQotICAgIGFjX2J1aWxkZGlyPS4KLQotY2FzZSAiJGFjX2RpciIgaW4KLS4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OwotKikKLSAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKLSAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKLSAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgotICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Ci0gICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OwotICBlc2FjIDs7Ci1lc2FjCi1hY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKLWFjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKLSMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6Ci1hY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKLQotY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KLSAgICBhY19zcmNkaXI9LgotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKLSAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KLSAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OwotICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgotICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBuYW1lLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCi0gICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Ci1lc2FjCi1hY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4Ci0KLSAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9Ci0gICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCi0gICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgotICAgICAgZWNobyAmJgotICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKLSAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgotICAgICAgZWNobyAmJgotICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQotICAgIGVsc2UKLSAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCi0gICAgZmkgfHwgYWNfc3RhdHVzPSQ/Ci0gICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQotICBkb25lCi1maQotCi10ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKLWlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KLSAgY2F0IDw8XF9BQ0VPRgotR1N0cmVhbWVyIGNvbmZpZ3VyZSAxLjEwLjQKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQotCi1Db3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1UaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgotX0FDRU9GCi0gIGV4aXQKLWZpCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgQXV0b2NvbmYgaW5pdGlhbGl6YXRpb24uICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBhY19mbl9jX3RyeV9jb21waWxlIExJTkVOTwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCi1hY19mbl9jX3RyeV9jb21waWxlICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0gICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgotICBhY19yZXR2YWw9MAotZWxzZQotICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX3JldHZhbD0xCi1maQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jX3RyeV9jb21waWxlCi0KLSMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgotYWNfZm5fY190cnlfbGluayAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci0gIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCi0gIGFjX3N0YXR1cz0kPwotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCi0gIGZpCi0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKLQkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKLQkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKLSAgICAgICB9OyB0aGVuIDoKLSAgYWNfcmV0dmFsPTAKLWVsc2UKLSAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19yZXR2YWw9MQotZmkKLSAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgotICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCi0gICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCi0gICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbwotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jX3RyeV9saW5rCi0KLSMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCi0jIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCi1hY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLSNpbmNsdWRlIDwkMj4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBldmFsICIkMz15ZXMiCi1lbHNlCi0gIGV2YWwgIiQzPW5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2YWwgYWNfcmVzPVwkJDMKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLQotfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKLQotIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgotYWNfZm5fY190cnlfY3BwICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0gICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICAgYWNfcmV0dmFsPTEKLWZpCi0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKLQotfSAjIGFjX2ZuX2NfdHJ5X2NwcAotCi0jIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKLSMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCi1hY19mbl9jX3RyeV9ydW4gKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgeyBjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKLWZpCi0gIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fY190cnlfcnVuCi0KLSMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQotYWNfZm5fY19jaGVja19mdW5jICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICQyCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgJDIgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCi1jaG9rZSBtZQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuICQyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiQzPXllcyIKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ldmFsIGFjX3Jlcz1cJCQzCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0KLX0gIyBhY19mbl9jX2NoZWNrX2Z1bmMKLQotIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9wcmVwcm9jIExJTkVOTyBIRUFERVIgVkFSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdHMgd2hldGhlciBIRUFERVIgaXMgcHJlc2VudCwgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgotYWNfZm5fY19jaGVja19oZWFkZXJfcHJlcHJvYyAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQotaWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkMj4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiQzPXllcyIKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2YWwgYWNfcmVzPVwkJDMKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLQotfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX3ByZXByb2MKLQotIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzLCBnaXZpbmcgYSB3YXJuaW5nIGlmIGl0IGNhbm5vdCBiZSBjb21waWxlZCB1c2luZwotIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSCi0jIGFjY29yZGluZ2x5LgotYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIGlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZmkKLWV2YWwgYWNfcmVzPVwkJDMKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLSNpbmNsdWRlIDwkMj4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0KLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkMj4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAjKCgKLSAgeWVzOm5vOiApCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSggJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCi0gICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKLWZpCi1ldmFsIGFjX3Jlcz1cJCQzCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLWZpCi0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotCi19ICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbAotCi0jIGFjX2ZuX2NfY2hlY2tfZGVjbCBMSU5FTk8gU1lNQk9MIFZBUiBJTkNMVURFUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdHMgd2hldGhlciBTWU1CT0wgaXMgZGVjbGFyZWQgaW4gSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCi0jIGFjY29yZGluZ2x5LgotYWNfZm5fY19jaGVja19kZWNsICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgYXNfZGVjbF9uYW1lPWBlY2hvICQyfHNlZCAncy8gKiguKi8vJ2AKLSAgYXNfZGVjbF91c2U9YGVjaG8gJDJ8c2VkIC1lICdzLygvKCgvJyAtZSAncy8pLykgMCYvJyAtZSAncy8sLykgMCYgKC9nJ2AKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotI2lmbmRlZiAkYXNfZGVjbF9uYW1lCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgKHZvaWQpICRhc19kZWNsX3VzZTsKLSNlbHNlCi0gICh2b2lkKSAkYXNfZGVjbF9uYW1lOwotI2VuZGlmCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiQzPXllcyIKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZXZhbCBhY19yZXM9XCQkMwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotCi19ICMgYWNfZm5fY19jaGVja19kZWNsCi0KLSMgYWNfZm5fY3h4X3RyeV9jb21waWxlIExJTkVOTwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KLWFjX2ZuX2N4eF90cnlfY29tcGlsZSAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKLSAgICBjYXQgY29uZnRlc3QuZXIxID4mNQotICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKLSAgZmkKLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgotICBhY19yZXR2YWw9MAotZWxzZQotICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX3JldHZhbD0xCi1maQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jeHhfdHJ5X2NvbXBpbGUKLQotIyBhY19mbl9jeHhfdHJ5X2NwcCBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KLWFjX2ZuX2N4eF90cnlfY3BwICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0gICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4gOgotICBhY19yZXR2YWw9MAotZWxzZQotICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAgIGFjX3JldHZhbD0xCi1maQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jeHhfdHJ5X2NwcAotCi0jIGFjX2ZuX2N4eF90cnlfbGluayBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCi1hY19mbl9jeHhfdHJ5X2xpbmsgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0gICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKLQkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKLQkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKLSAgICAgICB9OyB0aGVuIDoKLSAgYWNfcmV0dmFsPTAKLWVsc2UKLSAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19yZXR2YWw9MQotZmkKLSAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgotICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCi0gICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCi0gICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbwotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jeHhfdHJ5X2xpbmsKLQotIyBhY19mbl9jX2NoZWNrX3R5cGUgTElORU5PIFRZUEUgVkFSIElOQ0xVREVTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdHMgd2hldGhlciBUWVBFIGV4aXN0cyBhZnRlciBoYXZpbmcgaW5jbHVkZWQgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUKLSMgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgotYWNfZm5fY19jaGVja190eXBlICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ0Ci1pbnQKLW1haW4gKCkKLXsKLWlmIChzaXplb2YgKCQyKSkKLQkgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotaWYgKHNpemVvZiAoKCQyKSkpCi0JICAgIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgZXZhbCAiJDM9eWVzIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2YWwgYWNfcmVzPVwkJDMKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLQotfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQotCi0jIGFjX2ZuX2NfY2hlY2tfbWVtYmVyIExJTkVOTyBBR0dSIE1FTUJFUiBWQVIgSU5DTFVERVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcmllcyB0byBmaW5kIGlmIHRoZSBmaWVsZCBNRU1CRVIgZXhpc3RzIGluIHR5cGUgQUdHUiwgYWZ0ZXIgaW5jbHVkaW5nCi0jIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KLWFjX2ZuX2NfY2hlY2tfbWVtYmVyICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIuJDMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLiQzLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQ0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDUKLWludAotbWFpbiAoKQotewotc3RhdGljICQyIGFjX2FnZ3I7Ci1pZiAoYWNfYWdnci4kMykKLXJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiQ0PXllcyIKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDUKLWludAotbWFpbiAoKQotewotc3RhdGljICQyIGFjX2FnZ3I7Ci1pZiAoc2l6ZW9mIGFjX2FnZ3IuJDMpCi1yZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBldmFsICIkND15ZXMiCi1lbHNlCi0gIGV2YWwgIiQ0PW5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2YWwgYWNfcmVzPVwkJDQKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLQotfSAjIGFjX2ZuX2NfY2hlY2tfbWVtYmVyCi0KLSMgYWNfZm5fY19jb21wdXRlX2ludCBMSU5FTk8gRVhQUiBWQVIgSU5DTFVERVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKLSMgSU5DTFVERVMsIHNldHRpbmcgVkFSIGFjY29yZGluZ2x5LiBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlIGNvdWxkIGJlCi0jIGNvbXB1dGVkCi1hY19mbl9jX2NvbXB1dGVfaW50ICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDA7Ci1yZXR1cm4gdGVzdF9hcnJheSBbMF07Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDA7Ci1yZXR1cm4gdGVzdF9hcnJheSBbMF07Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19oaT0kYWNfbWlkOyBicmVhawotZWxzZQotICBhc19mbl9hcml0aCAkYWNfbWlkICsgMSAmJiBhY19sbz0kYXNfdmFsCi0JCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgotCQkJICBhY19sbz0gYWNfaGk9Ci0JCQkgIGJyZWFrCi0JCQlmaQotCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCArIDEgJiYgYWNfbWlkPSRhc192YWwKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kNAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwOwotcmV0dXJuIHRlc3RfYXJyYXkgWzBdOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDA7Ci1yZXR1cm4gdGVzdF9hcnJheSBbMF07Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgLSAxICYmIGFjX2hpPSRhc192YWwKLQkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgIGFjX2xvPSBhY19oaT0KLQkJCSAgYnJlYWsKLQkJCWZpCi0JCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICYmIGFjX21pZD0kYXNfdmFsCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgYWNfbG89IGFjX2hpPQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYXNfZm5fYXJpdGggJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvICYmIGFjX21pZD0kYXNfdmFsCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwOwotcmV0dXJuIHRlc3RfYXJyYXkgWzBdOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgKyAxICYmIGFjX2xvPSRhc192YWwKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLWNhc2UgJGFjX2xvIGluICMoKAotPyopIGV2YWwgIiQzPVwkYWNfbG8iOyBhY19yZXR2YWw9MCA7OwotJycpIGFjX3JldHZhbD0xIDs7Ci1lc2FjCi0gIGVsc2UKLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kNAotc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOwotICBpZiAoISBmKQotICAgIHJldHVybiAxOwotICBpZiAoKCQyKSA8IDApCi0gICAgewotICAgICAgbG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoJDIpKQotCXJldHVybiAxOwotICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgkMikpCi0JcmV0dXJuIDE7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7Ci0gICAgfQotICAvKiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBjb25mdXNpb24KLSAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLwotICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGVjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTAKLWVsc2UKLSAgYWNfcmV0dmFsPTEKLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1ybSAtZiBjb25mdGVzdC52YWwKLQotICBmaQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jX2NvbXB1dGVfaW50Ci1jYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKLVRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCi1ydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgotCi1JdCB3YXMgY3JlYXRlZCBieSBHU3RyZWFtZXIgJGFzX21lIDEuMTAuNCwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKLQotICAkICQwICRACi0KLV9BQ0VPRgotZXhlYyA1Pj5jb25maWcubG9nCi17Ci1jYXQgPDxfQVNVTkFNRQotIyMgLS0tLS0tLS0tICMjCi0jIyBQbGF0Zm9ybS4gIyMKLSMjIC0tLS0tLS0tLSAjIwotCi1ob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAotdW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi11bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLXVuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotdW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi0KLS91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCi0KLS9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLS91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLQotX0FTVU5BTUUKLQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLX0gPiY1Ci0KLWNhdCA+JjUgPDxfQUNFT0YKLQotCi0jIyAtLS0tLS0tLS0tLSAjIwotIyMgQ29yZSB0ZXN0cy4gIyMKLSMjIC0tLS0tLS0tLS0tICMjCi0KLV9BQ0VPRgotCi0KLSMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCi0jIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KLSMgU3RyaXAgb3V0IC0tc2lsZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgaXQgZm9yIGZ1dHVyZSBydW5zLgotIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgotIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCi1hY19jb25maWd1cmVfYXJncz0KLWFjX2NvbmZpZ3VyZV9hcmdzMD0KLWFjX2NvbmZpZ3VyZV9hcmdzMT0KLWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlCi1mb3IgYWNfcGFzcyBpbiAxIDIKLWRvCi0gIGZvciBhY19hcmcKLSAgZG8KLSAgICBjYXNlICRhY19hcmcgaW4KLSAgICAtbm8tY3JlYXRlIHwgLS1uby1jKiB8IC1uIHwgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tciopIGNvbnRpbnVlIDs7Ci0gICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKLSAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKLSAgICAgIGNvbnRpbnVlIDs7Ci0gICAgKlwnKikKLSAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7Ci0gICAgZXNhYwotICAgIGNhc2UgJGFjX3Bhc3MgaW4KLSAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OwotICAgIDIpCi0gICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MxICIgJyRhY19hcmcnIgotICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCi0JYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgotICAgICAgZWxzZQotCWNhc2UgJGFjX2FyZyBpbgotCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCi0JICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCi0JICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCi0JICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKLQkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCi0JICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi1kb25lCi17IGFjX2NvbmZpZ3VyZV9hcmdzMD07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMDt9Ci17IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9Ci0KLSMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKLSMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCi0jIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KLSMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgotIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgotdHJhcCAnZXhpdF9zdGF0dXM9JD8KLSAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCi0gIHsKLSAgICBlY2hvCi0KLSAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgQ2FjaGUgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIyIKLSAgICBlY2hvCi0gICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKLSgKLSAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbwotICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgotICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAotICAgICoke2FzX25sfSopCi0gICAgICBjYXNlICRhY192YXIgaW4gIygKLSAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKLSAgICAgIGVzYWMKLSAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAotICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAotICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKLSAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7Ci0gICAgICBlc2FjIDs7Ci0gICAgZXNhYwotICBkb25lCi0gIChzZXQpIDI+JjEgfAotICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKLSAgICAqJHthc19ubH1hY19zcGFjZT1cICopCi0gICAgICBzZWQgLW4gXAotCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOwotCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgotICAgICAgOzsgIygKLSAgICAqKQotICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKLSAgICAgIDs7Ci0gICAgZXNhYyB8Ci0gICAgc29ydAotKQotICAgIGVjaG8KLQotICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIgotICAgIGVjaG8KLSAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCi0gICAgZG8KLSAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgotICAgICAgY2FzZSAkYWNfdmFsIGluCi0gICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7Ci0gICAgICBlc2FjCi0gICAgICAkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCi0gICAgZG9uZSB8IHNvcnQKLSAgICBlY2hvCi0KLSAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCi0gICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKLSAgICAgIGVjaG8KLSAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCi0gICAgICBkbwotCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgotCWNhc2UgJGFjX3ZhbCBpbgotCSpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKLQllc2FjCi0JJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgotICAgICAgZG9uZSB8IHNvcnQKLSAgICAgIGVjaG8KLSAgICBmaQotCi0gICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCi0gICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0gIyMKLSMjIGNvbmZkZWZzLmguICMjCi0jIyAtLS0tLS0tLS0tLSAjIyIKLSAgICAgIGVjaG8KLSAgICAgIGNhdCBjb25mZGVmcy5oCi0gICAgICBlY2hvCi0gICAgZmkKLSAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCi0gICAgICAkYXNfZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCi0gICAgJGFzX2VjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCi0gIH0gPiY1Ci0gIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgotICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKLSAgICBleGl0ICRleGl0X3N0YXR1cwotJyAwCi1mb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KLSAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgYXNfZm5fZXhpdCAxJyAkYWNfc2lnbmFsCi1kb25lCi1hY19zaWduYWw9MAotCi0jIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgotcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzLmgKLQotJGFzX2VjaG8gIi8qIGNvbmZkZWZzLmggKi8iID4gY29uZmRlZnMuaAotCi0jIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCi1fQUNFT0YKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCi1fQUNFT0YKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCi1fQUNFT0YKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgotX0FDRU9GCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKLV9BQ0VPRgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFBBQ0tBR0VfVVJMICIkUEFDS0FHRV9VUkwiCi1fQUNFT0YKLQotCi0jIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KLSMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCi1hY19zaXRlX2ZpbGUxPU5PTkUKLWFjX3NpdGVfZmlsZTI9Tk9ORQotaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgotICAjIFdlIGRvIG5vdCB3YW50IGEgUEFUSCBzZWFyY2ggZm9yIGNvbmZpZy5zaXRlLgotICBjYXNlICRDT05GSUdfU0lURSBpbiAjKCgKLSAgICAtKikgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OwotICAgICovKikgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEU7OwotICAgICopICAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCi0gIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQotICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCi1lbHNlCi0gIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCi0gIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQotZmkKLWZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCi1kbwotICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQotICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGFjX3NpdGVfZmlsZSIgJiYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9Ci0gICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1Ci0gICAgLiAiJGFjX3NpdGVfZmlsZSIgXAotICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiZmFpbGVkIHRvIGxvYWQgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLSAgZmkKLWRvbmUKLQotaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCi0gICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCi0gIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Ci0gICAgY2FzZSAkY2FjaGVfZmlsZSBpbgotICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OwotICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OwotICAgIGVzYWMKLSAgZmkKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KLSAgPiRjYWNoZV9maWxlCi1maQotCi1ndF9uZWVkcz0iJGd0X25lZWRzICIKLWFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHN0ZGxpYi5oIgotYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgdW5pc3RkLmgiCi1hc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvcGFyYW0uaCIKLSMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKLSMgdmFsdWUuCi1hY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKLWZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCi0gIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0Ci0gIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0Ci0gIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKLSAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQotICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCi0gICAgc2V0LCkKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KLSAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7Ci0gICAgLHNldCkKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQotICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKLSAgICAsKTs7Ci0gICAgKikKLSAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KLQkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4KLQlhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGAKLQlhY19uZXdfdmFsX3c9YGVjaG8geCAkYWNfbmV3X3ZhbGAKLQlpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxfdyI7IHRoZW4KLQkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9Ci0JICBhY19jYWNoZV9jb3JydXB0ZWQ9OgotCWVsc2UKLQkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9Ci0JICBldmFsICRhY192YXI9XCRhY19vbGRfdmFsCi0JZmkKLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQotJGFzX2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mNQotJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiYyO30KLSAgICAgIGZpOzsKLSAgZXNhYwotICAjIFBhc3MgcHJlY2lvdXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuCi0gIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9IHNldDsgdGhlbgotICAgIGNhc2UgJGFjX25ld192YWwgaW4KLSAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwotICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7Ci0gICAgZXNhYwotICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgotICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCi0gICAgICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7Ci0gICAgZXNhYwotICBmaQotZG9uZQotaWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQotICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKLWZpCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi1hY19hdXhfZGlyPQotZm9yIGFjX2RpciBpbiAiJHNyY2RpciIgIiRzcmNkaXIvLi4iICIkc3JjZGlyLy4uLy4uIjsgZG8KLSAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCi0gICAgYnJlYWsKLSAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgotICAgIGJyZWFrCi0gIGZpCi1kb25lCi1pZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgIiRMSU5FTk8iIDUKLWZpCi0KLSMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAotIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgotIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5Ci0jIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCi1hY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCi1hY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KLWFjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KLQotCi0jIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCi0kU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAiJExJTkVOTyIgNQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2J1aWxkKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi10ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKLSAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKLXRlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgotICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAiJExJTkVOTyIgNQotYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAotICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9Ci1jYXNlICRhY19jdl9idWlsZCBpbgotKi0qLSopIDs7Ci0qKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiICIkTElORU5PIiA1OzsKLWVzYWMKLWJ1aWxkPSRhY19jdl9idWlsZAotYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwotc2V0IHggJGFjX2N2X2J1aWxkCi1zaGlmdAotYnVpbGRfY3B1PSQxCi1idWlsZF92ZW5kb3I9JDIKLXNoaWZ0OyBzaGlmdAotIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCi0jIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Ci1idWlsZF9vcz0kKgotSUZTPSRhY19zYXZlX0lGUwotY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9ob3N0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KLSAgYWNfY3ZfaG9zdD0kYWNfY3ZfYnVpbGQKLWVsc2UKLSAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKLSAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2hvc3QiID4mNjsgfQotY2FzZSAkYWNfY3ZfaG9zdCBpbgotKi0qLSopIDs7Ci0qKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OwotZXNhYwotaG9zdD0kYWNfY3ZfaG9zdAotYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwotc2V0IHggJGFjX2N2X2hvc3QKLXNoaWZ0Ci1ob3N0X2NwdT0kMQotaG9zdF92ZW5kb3I9JDIKLXNoaWZ0OyBzaGlmdAotIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCi0jIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Ci1ob3N0X29zPSQqCi1JRlM9JGFjX3NhdmVfSUZTCi1jYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYwotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQotaWYgJHthY19jdl90YXJnZXQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICJ4JHRhcmdldF9hbGlhcyIgPSB4OyB0aGVuCi0gIGFjX2N2X3RhcmdldD0kYWNfY3ZfaG9zdAotZWxzZQotICBhY19jdl90YXJnZXQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJHRhcmdldF9hbGlhc2AgfHwKLSAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJHRhcmdldF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1Ci1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90YXJnZXQiID4mNQotJGFzX2VjaG8gIiRhY19jdl90YXJnZXQiID4mNjsgfQotY2FzZSAkYWNfY3ZfdGFyZ2V0IGluCi0qLSotKikgOzsKLSopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiICIkTElORU5PIiA1OzsKLWVzYWMKLXRhcmdldD0kYWNfY3ZfdGFyZ2V0Ci1hY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCi1zZXQgeCAkYWNfY3ZfdGFyZ2V0Ci1zaGlmdAotdGFyZ2V0X2NwdT0kMQotdGFyZ2V0X3ZlbmRvcj0kMgotc2hpZnQ7IHNoaWZ0Ci0jIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKLSMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKLXRhcmdldF9vcz0kKgotSUZTPSRhY19zYXZlX0lGUwotY2FzZSAkdGFyZ2V0X29zIGluICpcICopIHRhcmdldF9vcz1gZWNobyAiJHRhcmdldF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKLQotCi0jIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCi0jIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCi10ZXN0IC1uICIkdGFyZ2V0X2FsaWFzIiAmJgotICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCi0gICAgTk9ORU5PTkVzLHgseCwgJiYKLSAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LQotCi0KLQotCi1hbV9fYXBpX3ZlcnNpb249JzEuMTUnCi0KLSMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAotIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCi0jIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKLSMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCi0jIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKLSMgSVJJWCAvc2Jpbi9pbnN0YWxsCi0jIEFJWCAvYmluL2luc3RhbGwKLSMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcwotIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKLSMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncwotIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgotIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCi0jIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KLSMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBtdWx0aXBsZSBmaWxlcy4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KLWlmICR7YWNfY3ZfcGF0aF9pbnN0YWxsKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgotY2FzZSAkYXNfZGlyLyBpbiAjKCgKLSAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXAotICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKLSAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11PUzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCi0gIC91c3IvdWNiLyogKSA7OwotICAqKQotICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCi0gICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290Ci0gICAgIyBieSBkZWZhdWx0LgotICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KLSAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotCWlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KLQkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgotCSAgICA6Ci0JICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCi0JICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCi0JICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCi0JICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgotCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgotCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCi0JICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCi0JICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCi0JICAgIHRoZW4KLQkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCi0JICAgICAgYnJlYWsgMwotCSAgICBmaQotCSAgZmkKLQlmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICA7OwotZXNhYwotCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCi0KLWZpCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCi0gICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCi0gIGVsc2UKLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCi0gICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAotICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCi0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgotICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKLSAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQotJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KLQotIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgotIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KLXRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9Ci0jIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQotIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgotYW1fbGY9JwotJwotY2FzZSBgcHdkYCBpbgotICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXSopCi0gICAgYXNfZm5fZXJyb3IgJD8gInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lIiAiJExJTkVOTyIgNTs7Ci1lc2FjCi1jYXNlICRzcmNkaXIgaW4KLSAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKLSAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIHNyY2RpciB2YWx1ZTogJyRzcmNkaXInIiAiJExJTkVOTyIgNTs7Ci1lc2FjCi0KLSMgRG8gJ3NldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKLSMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQotIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwotIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKLSMgZGlyZWN0b3J5KS4KLWlmICgKLSAgIGFtX2hhc19zbGVwdD1ubwotICAgZm9yIGFtX3RyeSBpbiAxIDI7IGRvCi0gICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQotICAgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCi0gICAgIGlmIHRlc3QgIiQqIiA9ICJYIjsgdGhlbgotCSMgLUwgZGlkbid0IHdvcmsuCi0Jc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKLSAgICAgZmkKLSAgICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKLQkmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KLQotCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KLQkjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCi0JIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQotCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLQlhc19mbl9lcnJvciAkPyAibHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotICBhbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiAiJExJTkVOTyIgNQotICAgICBmaQotICAgICBpZiB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlIHx8IHRlc3QgJGFtX3RyeSAtZXEgMjsgdGhlbgotICAgICAgIGJyZWFrCi0gICAgIGZpCi0gICAgICMgSnVzdCBpbiBjYXNlLgotICAgICBzbGVlcCAxCi0gICAgIGFtX2hhc19zbGVwdD15ZXMKLSAgIGRvbmUKLSAgIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUKLSAgICkKLXRoZW4KLSAgICMgT2suCi0gICA6Ci1lbHNlCi0gICBhc19mbl9lcnJvciAkPyAibmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCi1DaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgIiRMSU5FTk8iIDUKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotIyBJZiB3ZSBkaWRuJ3Qgc2xlZXAsIHdlIHN0aWxsIG5lZWQgdG8gZW5zdXJlIHRpbWUgc3RhbXBzIG9mIGNvbmZpZy5zdGF0dXMgYW5kCi0jIGdlbmVyYXRlZCBmaWxlcyBhcmUgc3RyaWN0bHkgbmV3ZXIuCi1hbV9zbGVlcF9waWQ9Ci1pZiBncmVwICdzbGVwdDogbm8nIGNvbmZ0ZXN0LmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICggc2xlZXAgMSApICYKLSAgYW1fc2xlZXBfcGlkPSQhCi1maQotCi1ybSAtZiBjb25mdGVzdC5maWxlCi0KLXRlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgotICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKLSMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgotdGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCi0gIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKLSMgRG91YmxlIGFueSBcIG9yICQuCi0jIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgotYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJwotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCi0KLSMgRXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGguCi1hbV9hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiICYmIHB3ZGAKLQotaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCi0gIGNhc2UgJGFtX2F1eF9kaXIgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OwotICAqKQotICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OwotICBlc2FjCi1maQotIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCi1pZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgotICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgotZWxzZQotICBhbV9taXNzaW5nX3J1bj0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KLWZpCi0KLWlmIHRlc3QgeCIke2luc3RhbGxfc2grc2V0fSIgIT0geHNldDsgdGhlbgotICBjYXNlICRhbV9hdXhfZGlyIGluCi0gICpcICogfCAqXAkqKQotICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7Ci0gICopCi0gICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCi0gIGVzYWMKLWZpCi0KLSMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nICdzdHJpcCcgd2hlbiB0aGUgdXNlcgotIyBydW4gIm1ha2UgaW5zdGFsbC1zdHJpcCIuICBIb3dldmVyICdzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAotIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQotIyB3aWxsIGhvbm9yIHRoZSAnU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKLWlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1Ci0kYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KLSAgYWNfY3RfU1RSSVA9JFNUUklQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCi1pZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQotJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KLSAgICBTVFJJUD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBTVFJJUD0kYWNfY3RfU1RSSVAKLSAgZmkKLWVsc2UKLSAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgotZmkKLQotZmkKLUlOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gIiA+JjY7IH0KLWlmIHRlc3QgLXogIiRNS0RJUl9QIjsgdGhlbgotICBpZiAke2FjX2N2X3BhdGhfbWtkaXIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL29wdC9zZncvYmluCi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbwotCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLQkgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIHx8IGNvbnRpbnVlCi0JICAgY2FzZSBgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC0tdmVyc2lvbiAyPiYxYCBpbiAjKAotCSAgICAgJ21rZGlyIChHTlUgY29yZXV0aWxzKSAnKiB8IFwKLQkgICAgICdta2RpciAoY29yZXV0aWxzKSAnKiB8IFwKLQkgICAgICdta2RpciAoZmlsZXV0aWxzKSAnNC4xKikKLQkgICAgICAgYWNfY3ZfcGF0aF9ta2Rpcj0kYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0Ci0JICAgICAgIGJyZWFrIDM7OwotCSAgIGVzYWMKLQkgZG9uZQotICAgICAgIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotCi0gIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KLSAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCi0gICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCi0gIGVsc2UKLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCi0gICAgIyB2YWx1ZSBmb3IgTUtESVJfUCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAotICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCi0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgotICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgotICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUtESVJfUCIgPiY1Ci0kYXNfZWNobyAiJE1LRElSX1AiID4mNjsgfQotCi1mb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgotICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQVdLPSRhY19jdl9wcm9nX0FXSwotaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQotJGFzX2VjaG8gIiRBV0siID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhawotZG9uZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQotc2V0IHggJHtNQUtFLW1ha2V9Ci1hY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKLWlmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgotU0hFTEwgPSAvYmluL3NoCi1hbGw6Ci0JQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKLV9BQ0VPRgotIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgotY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCi0gICpAQEAlJSU9Pyo9QEBAJSUlKikKLSAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OwotICAqKQotICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKLWVzYWMKLXJtIC1mIGNvbmZ0ZXN0Lm1ha2UKLWZpCi1pZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLSAgU0VUX01BS0U9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCi1maQotCi1ybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAotbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAudHN0OyB0aGVuCi0gIGFtX19sZWFkaW5nX2RvdD0uCi1lbHNlCi0gIGFtX19sZWFkaW5nX2RvdD1fCi1maQotcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9ydWxlcytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9ydWxlczsKLWZpCi0KLWNhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gIyAoKCgKLSAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKLSAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKLSAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKLWVzYWMKLWFtX21ha2U9JHtNQUtFLW1ha2V9Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMuLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiAkYXNfZWNobyAnVFJVRT0kKEJBUiQoVikpCi1CQVIwPWZhbHNlCi1CQVIxPXRydWUKLVY9MQotYW1fX2RvaXQ6Ci0JQCQoVFJVRSkKLS5QSE9OWTogYW1fX2RvaXQnIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCi1lbHNlCi0gIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCi1maQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY2OyB9Ci1pZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgotICAgIEFNX1Y9JyQoViknCi0gIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCi1lbHNlCi0gIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCi0gIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKLWZpCi1BTV9CQUNLU0xBU0g9J1wnCi0KLWlmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KLSAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKLSAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgotICBhbV9faXNyYz0nIC1JJChzcmNkaXIpJwotICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKLSAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAic291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiICIkTElORU5PIiA1Ci0gIGZpCi1maQotCi0jIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKLWlmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCi0gIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgotICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKLSAgZWxzZQotICAgIENZR1BBVEhfVz1lY2hvCi0gIGZpCi1maQotCi0KLSMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KLSBQQUNLQUdFPSdnc3RyZWFtZXInCi0gVkVSU0lPTj0nMS4xMC40JwotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRSAiJFBBQ0tBR0UiCi1fQUNFT0YKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgotX0FDRU9GCi0KLSMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KLQotQUNMT0NBTD0ke0FDTE9DQUwtIiR7YW1fbWlzc2luZ19ydW59YWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0ifQotCi0KLUFVVE9DT05GPSR7QVVUT0NPTkYtIiR7YW1fbWlzc2luZ19ydW59YXV0b2NvbmYifQotCi0KLUFVVE9NQUtFPSR7QVVUT01BS0UtIiR7YW1fbWlzc2luZ19ydW59YXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259In0KLQotCi1BVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn1hdXRvaGVhZGVyIn0KLQotCi1NQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KLQotIyBGb3IgYmV0dGVyIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBUbyBiZSByZW1vdmVkIG9uY2UgQXV0b21ha2UgMS45LngKLSMgZGllcyBvdXQgZm9yIGdvb2QuICBGb3IgbW9yZSBiYWNrZ3JvdW5kLCBzZWU6Ci0jIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b21ha2UvMjAxMi0wNy9tc2cwMDAwMS5odG1sPgotIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMTQuaHRtbD4KLW1rZGlyX3A9JyQoTUtESVJfUCknCi0KLSMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldCAoYW5kIHBvc3NpYmx5IHRoZSBUQVAgZHJpdmVyKS4gIFRoZQotIyBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uIHNvbWUgcGxhdGZvcm1zLgotIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKLSMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgotQU1UQVI9JyQke1RBUi10YXJ9JwotCi0KLSMgV2UnbGwgbG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KLV9hbV90b29scz0nZ251dGFyIHBsYWludGFyIHBheCBjcGlvIG5vbmUnCi0KLSMgVGhlIFBPU0lYIDE5ODggJ3VzdGFyJyBmb3JtYXQgaXMgZGVmaW5lZCB3aXRoIGZpeGVkLXNpemUgZmllbGRzLgotICAgICAgIyBUaGVyZSBpcyBub3RhYmx5IGEgMjEgYml0cyBsaW1pdCBmb3IgdGhlIFVJRCBhbmQgdGhlIEdJRC4gIEluIGZhY3QsCi0gICAgICAjIHRoZSAncGF4JyB1dGlsaXR5IGNhbiBoYW5nIG9uIGJpZ2dlciBVSUQvR0lEIChzZWUgYXV0b21ha2UgYnVnIzgzNDMKLSAgICAgICMgYW5kIGJ1ZyMxMzU4OCkuCi0gICAgICBhbV9tYXhfdWlkPTIwOTcxNTEgIyAyXjIxIC0gMQotICAgICAgYW1fbWF4X2dpZD0kYW1fbWF4X3VpZAotICAgICAgIyBUaGUgJFVJRCBhbmQgJEdJRCB2YXJpYWJsZXMgYXJlIG5vdCBwb3J0YWJsZSwgc28gd2UgbmVlZCB0byByZXNvcnQKLSAgICAgICMgdG8gdGhlIFBPU0lYLW1hbmRhdGVkIGlkKDEpIHV0aWxpdHkuICBFcnJvcnMgaW4gdGhlICdpZCcgY2FsbHMKLSAgICAgICMgYmVsb3cgYXJlIGRlZmluaXRlbHkgdW5leHBlY3RlZCwgc28gYWxsb3cgdGhlIHVzZXJzIHRvIHNlZSB0aGVtCi0gICAgICAjICh0aGF0IGlzLCBhdm9pZCBzdGRlcnIgcmVkaXJlY3Rpb24pLgotICAgICAgYW1fdWlkPWBpZCAtdSB8fCBlY2hvIHVua25vd25gCi0gICAgICBhbV9naWQ9YGlkIC1nIHx8IGVjaG8gdW5rbm93bmAKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBVSUQgJyRhbV91aWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBVSUQgJyRhbV91aWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXQuLi4gIiA+JjY7IH0KLSAgICAgIGlmIHRlc3QgJGFtX3VpZCAtbGUgJGFtX21heF91aWQ7IHRoZW4KLSAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0gICAgICBlbHNlCi0gICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgICAgIF9hbV90b29scz1ub25lCi0gICAgICBmaQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEdJRCAnJGFtX2dpZCcgaXMgc3VwcG9ydGVkIGJ5IHVzdGFyIGZvcm1hdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEdJRCAnJGFtX2dpZCcgaXMgc3VwcG9ydGVkIGJ5IHVzdGFyIGZvcm1hdC4uLiAiID4mNjsgfQotICAgICAgaWYgdGVzdCAkYW1fZ2lkIC1sZSAkYW1fbWF4X2dpZDsgdGhlbgotICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgIF9hbV90b29scz1ub25lCi0gICAgICBmaQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNyZWF0ZSBhIHVzdGFyIHRhciBhcmNoaXZlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjcmVhdGUgYSB1c3RhciB0YXIgYXJjaGl2ZS4uLiAiID4mNjsgfQotCi0gICMgR28gYWhlYWQgZXZlbiBpZiB3ZSBoYXZlIHRoZSB2YWx1ZSBhbHJlYWR5IGNhY2hlZC4gIFdlIGRvIHNvIGJlY2F1c2Ugd2UKLSAgIyBuZWVkIHRvIHNldCB0aGUgdmFsdWVzIGZvciB0aGUgJ2FtX190YXInIGFuZCAnYW1fX3VudGFyJyB2YXJpYWJsZXMuCi0gIF9hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyX3VzdGFyLSRfYW1fdG9vbHN9Ci0KLSAgZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHM7IGRvCi0gICAgY2FzZSAkX2FtX3Rvb2wgaW4KLSAgICBnbnV0YXIpCi0gICAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7IGRvCi0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRfYW1fdGFyIC0tdmVyc2lvbiIgPiY1Ci0gICAoJF9hbV90YXIgLS12ZXJzaW9uKSA+JjUgMj4mNQotICAgYWNfc3RhdHVzPSQ/Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiBicmVhawotICAgICAgZG9uZQotICAgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9dXN0YXIgLWNoZiAtICInIiQkdGFyZGlyIicKLSAgICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD11c3RhciAtY2hmIC0gIiciJHRhcmRpciInCi0gICAgICBhbV9fdW50YXI9IiRfYW1fdGFyIC14ZiAtIgotICAgICAgOzsKLSAgICBwbGFpbnRhcikKLSAgICAgICMgTXVzdCBza2lwIEdOVSB0YXI6IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JtYXQ9IGl0IGRvZXNuJ3QgY3JlYXRlCi0gICAgICAjIHVzdGFyIHRhcmJhbGwgZWl0aGVyLgotICAgICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQotICAgICAgYW1fX3Rhcj0ndGFyIGNoZiAtICIkJHRhcmRpciInCi0gICAgICBhbV9fdGFyXz0ndGFyIGNoZiAtICIkdGFyZGlyIicKLSAgICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCi0gICAgICA7OwotICAgIHBheCkKLSAgICAgIGFtX190YXI9J3BheCAtTCAteCB1c3RhciAtdyAiJCR0YXJkaXIiJwotICAgICAgYW1fX3Rhcl89J3BheCAtTCAteCB1c3RhciAtdyAiJHRhcmRpciInCi0gICAgICBhbV9fdW50YXI9J3BheCAtcicKLSAgICAgIDs7Ci0gICAgY3BpbykKLSAgICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IIHVzdGFyIC1MJwotICAgICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggdXN0YXIgLUwnCi0gICAgICBhbV9fdW50YXI9J2NwaW8gLWkgLUggdXN0YXIgLWQnCi0gICAgICA7OwotICAgIG5vbmUpCi0gICAgICBhbV9fdGFyPWZhbHNlCi0gICAgICBhbV9fdGFyXz1mYWxzZQotICAgICAgYW1fX3VudGFyPWZhbHNlCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgSWYgdGhlIHZhbHVlIHdhcyBjYWNoZWQsIHN0b3Agbm93LiAgV2UganVzdCB3YW50ZWQgdG8gaGF2ZSBhbV9fdGFyCi0gICAgIyBhbmQgYW1fX3VudGFyIHNldC4KLSAgICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyX3VzdGFyfSIgJiYgYnJlYWsKLQotICAgICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3Jrcy4KLSAgICBybSAtcmYgY29uZnRlc3QuZGlyCi0gICAgbWtkaXIgY29uZnRlc3QuZGlyCi0gICAgZWNobyBHcmVwTWUgPiBjb25mdGVzdC5kaXIvZmlsZQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHRhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhciIgPiY1Ci0gICAodGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyKSA+JjUgMj4mNQotICAgYWNfc3RhdHVzPSQ/Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKLSAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LnRhcjsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJGFtX191bnRhciA8Y29uZnRlc3QudGFyIiA+JjUKLSAgICgkYW1fX3VudGFyIDxjb25mdGVzdC50YXIpID4mNSAyPiY1Ci0gICBhY19zdGF0dXM9JD8KLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIChleGl0ICRhY19zdGF0dXMpOyB9Ci0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjYXQgY29uZnRlc3QuZGlyL2ZpbGUiID4mNQotICAgKGNhdCBjb25mdGVzdC5kaXIvZmlsZSkgPiY1IDI+JjUKLSAgIGFjX3N0YXR1cz0kPwotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLSAgICAgIGdyZXAgR3JlcE1lIGNvbmZ0ZXN0LmRpci9maWxlID4vZGV2L251bGwgMj4mMSAmJiBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotCi0gIGlmICR7YW1fY3ZfcHJvZ190YXJfdXN0YXIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhbV9jdl9wcm9nX3Rhcl91c3Rhcj0kX2FtX3Rvb2wKLWZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9wcm9nX3Rhcl91c3RhciIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3Byb2dfdGFyX3VzdGFyIiA+JjY7IH0KLQotCi0KLQotCi0KLSMgUE9TSVggd2lsbCBzYXkgaW4gYSBmdXR1cmUgdmVyc2lvbiB0aGF0IHJ1bm5pbmcgInJtIC1mIiB3aXRoIG5vIGFyZ3VtZW50Ci0jIGlzIE9LOyBhbmQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIG1ha2UgdGhhdCBhc3N1bXB0aW9uIGluIG91ciBNYWtlZmlsZQotIyByZWNpcGVzLiAgU28gdXNlIGFuIGFnZ3Jlc3NpdmUgcHJvYmUgdG8gY2hlY2sgdGhhdCB0aGUgdXNhZ2Ugd2Ugd2FudCBpcwotIyBhY3R1YWxseSBzdXBwb3J0ZWQgImluIHRoZSB3aWxkIiB0byBhbiBhY2NlcHRhYmxlIGRlZ3JlZS4KLSMgU2VlIGF1dG9tYWtlIGJ1ZyMxMDgyOC4KLSMgVG8gbWFrZSBhbnkgaXNzdWUgbW9yZSB2aXNpYmxlLCBjYXVzZSB0aGUgcnVubmluZyBjb25maWd1cmUgdG8gYmUgYWJvcnRlZAotIyBieSBkZWZhdWx0IGlmIHRoZSAncm0nIHByb2dyYW0gaW4gdXNlIGRvZXNuJ3QgbWF0Y2ggb3VyIGV4cGVjdGF0aW9uczsgdGhlCi0jIHVzZXIgY2FuIHN0aWxsIG92ZXJyaWRlIHRoaXMgdGhvdWdoLgotaWYgcm0gLWYgJiYgcm0gLWZyICYmIHJtIC1yZjsgdGhlbiA6IE9LOyBlbHNlCi0gIGNhdCA+JjIgPDwnRU5EJwotT29wcyEKLQotWW91ciAncm0nIHByb2dyYW0gc2VlbXMgdW5hYmxlIHRvIHJ1biB3aXRob3V0IGZpbGUgb3BlcmFuZHMgc3BlY2lmaWVkCi1vbiB0aGUgY29tbWFuZCBsaW5lLCBldmVuIHdoZW4gdGhlICctZicgb3B0aW9uIGlzIHByZXNlbnQuICBUaGlzIGlzIGNvbnRyYXJ5Ci10byB0aGUgYmVoYXZpb3VyIG9mIG1vc3Qgcm0gcHJvZ3JhbXMgb3V0IHRoZXJlLCBhbmQgbm90IGNvbmZvcm1pbmcgd2l0aAotdGhlIHVwY29taW5nIFBPU0lYIHN0YW5kYXJkOiA8aHR0cDovL2F1c3Rpbmdyb3VwYnVncy5uZXQvdmlldy5waHA/aWQ9NTQyPgotCi1QbGVhc2UgdGVsbCBidWctYXV0b21ha2VAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSB2YWx1ZQotb2YgeW91ciAkUEFUSCBhbmQgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLiAgVGhpcwotY2FuIGhlbHAgdXMgaW1wcm92ZSBmdXR1cmUgYXV0b21ha2UgdmVyc2lvbnMuCi0KLUVORAotICBpZiB0ZXN0IHgiJEFDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIiA9IHgieWVzIjsgdGhlbgotICAgIGVjaG8gJ0NvbmZpZ3VyYXRpb24gd2lsbCBwcm9jZWVkIGFueXdheSwgc2luY2UgeW91IGhhdmUgc2V0IHRoZScgPiYyCi0gICAgZWNobyAnQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0gdmFyaWFibGUgdG8gInllcyInID4mMgotICAgIGVjaG8gPiYyCi0gIGVsc2UKLSAgICBjYXQgPiYyIDw8J0VORCcKLUFib3J0aW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MsIHRvIGVuc3VyZSB5b3UgdGFrZSBub3RpY2Ugb2YgdGhlIGlzc3VlLgotCi1Zb3UgY2FuIGRvd25sb2FkIGFuZCBpbnN0YWxsIEdOVSBjb3JldXRpbHMgdG8gZ2V0IGFuICdybScgaW1wbGVtZW50YXRpb24KLXRoYXQgYmVoYXZlcyBwcm9wZXJseTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jb3JldXRpbHMvPi4KLQotSWYgeW91IHdhbnQgdG8gY29tcGxldGUgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB1c2luZyB5b3VyIHByb2JsZW1hdGljCi0ncm0nIGFueXdheSwgZXhwb3J0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTQotdG8gInllcyIsIGFuZCByZS1ydW4gY29uZmlndXJlLgotCi1FTkQKLSAgICBhc19mbl9lcnJvciAkPyAiWW91ciAncm0nIHByb2dyYW0gaXMgYmFkLCBzb3JyeS4iICIkTElORU5PIiA1Ci0gIGZpCi1maQotCi0KLQotICBQQUNLQUdFX1ZFUlNJT05fTUFKT1I9JChlY2hvIDEuMTAuNCB8IGN1dCAtZCcuJyAtZjEpCi0gIFBBQ0tBR0VfVkVSU0lPTl9NSU5PUj0kKGVjaG8gMS4xMC40IHwgY3V0IC1kJy4nIC1mMikKLSAgUEFDS0FHRV9WRVJTSU9OX01JQ1JPPSQoZWNobyAxLjEwLjQgfCBjdXQgLWQnLicgLWYzKQotCi0KLQotCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgbmFubyB2ZXJzaW9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIG5hbm8gdmVyc2lvbi4uLiAiID4mNjsgfQotCi0gIE5BTk89JChlY2hvIDEuMTAuNCB8IGN1dCAtZCcuJyAtZjQpCi0KLSAgaWYgdGVzdCB4IiROQU5PIiA9IHggfHwgdGVzdCAieCROQU5PIiA9ICJ4MCIgOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IDAgKHJlbGVhc2UpIiA+JjUKLSRhc19lY2hvICIwIChyZWxlYXNlKSIgPiY2OyB9Ci0gICAgTkFOTz0wCi0gICAgUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0U9MQotICAgIEdTVF9HSVQ9Im5vIgotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICROQU5PIiA+JjUKLSRhc19lY2hvICIkTkFOTyIgPiY2OyB9Ci0gICAgUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0U9MC5gZGF0ZSArJVklbSVkLiVIJU0lU2AKLSAgICBpZiB0ZXN0ICJ4JE5BTk8iICE9ICJ4MSIgOyB0aGVuCi0gICAgICAgR1NUX0dJVD0ibm8iCi0gICAgZWxzZQotICAgICAgIEdTVF9HSVQ9InllcyIKLSAgICBmaQotICBmaQotICBQQUNLQUdFX1ZFUlNJT05fTkFOTz0kTkFOTwotCi0KLQotCi0KLQotYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBjb25maWcuaCIKLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuLi4gIiA+JjY7IH0KLSAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21haW50YWluZXJfbW9kZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX21haW50YWluZXJfbW9kZTsgVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsCi1lbHNlCi0gIFVTRV9NQUlOVEFJTkVSX01PREU9eWVzCi1maQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY1Ci0kYXNfZWNobyAiJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNjsgfQotICAgaWYgdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllczsgdGhlbgotICBNQUlOVEFJTkVSX01PREVfVFJVRT0KLSAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPScjJwotZWxzZQotICBNQUlOVEFJTkVSX01PREVfVFJVRT0nIycKLSAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPQotZmkKLQotICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKLQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9ydWxlcytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9ydWxlczsKLWZpCi0KLWNhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gIyAoKCgKLSAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKLSAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKLSAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKLWVzYWMKLWFtX21ha2U9JHtNQUtFLW1ha2V9Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMuLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiAkYXNfZWNobyAnVFJVRT0kKEJBUiQoVikpCi1CQVIwPWZhbHNlCi1CQVIxPXRydWUKLVY9MQotYW1fX2RvaXQ6Ci0JQCQoVFJVRSkKLS5QSE9OWTogYW1fX2RvaXQnIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCi1lbHNlCi0gIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCi1maQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY2OyB9Ci1pZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgotICAgIEFNX1Y9JyQoViknCi0gIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCi1lbHNlCi0gIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCi0gIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKLWZpCi1BTV9CQUNLU0xBU0g9J1wnCi0KLQotR1NUX1ZFUlNJT05fTUFKT1I9JFBBQ0tBR0VfVkVSU0lPTl9NQUpPUgotR1NUX1ZFUlNJT05fTUlOT1I9JFBBQ0tBR0VfVkVSU0lPTl9NSU5PUgotR1NUX1ZFUlNJT05fTUlDUk89JFBBQ0tBR0VfVkVSU0lPTl9NSUNSTwotR1NUX1ZFUlNJT05fTkFOTz0kUEFDS0FHRV9WRVJTSU9OX05BTk8KLQotCi0KLQotCi1HU1RfQVBJX1ZFUlNJT049MS4wCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHU1RfQVBJX1ZFUlNJT04gIiRHU1RfQVBJX1ZFUlNJT04iCi1fQUNFT0YKLQotCi1jYXNlIGBwd2RgIGluCi0gICpcICogfCAqXAkqKQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIFxgcHdkXGAiID4mMjt9IDs7Ci1lc2FjCi0KLQotCi1tYWNyb192ZXJzaW9uPScyLjQuNicKLW1hY3JvX3JldmlzaW9uPScyLjQuNicKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotbHRtYWluPSRhY19hdXhfZGlyL2x0bWFpbi5zaAotCi0jIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCi0jIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgotZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KLWRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucwotbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCi0KLUVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCi1FQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLUVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KLSMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgotaWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0gICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotICBFQ0hPPSdwcmludCAtciAtLScKLWVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi0gIEVDSE89J3ByaW50ZiAlc1xuJwotZWxzZQotICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCi0gIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQotICB7Ci0gICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKLSQxCi1fTFRFQ0hPX0VPRicKLSAgfQotICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCi1maQotCi0jIGZ1bmNfZWNob19hbGwgYXJnLi4uCi0jIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCi1mdW5jX2VjaG9fYWxsICgpCi17Ci0gICAgJEVDSE8gIiIKLX0KLQotY2FzZSAkRUNITyBpbgotICBwcmludGYqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnRmIiA+JjUKLSRhc19lY2hvICJwcmludGYiID4mNjsgfSA7OwotICBwcmludCopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludCAtciIgPiY1Ci0kYXNfZWNobyAicHJpbnQgLXIiID4mNjsgfSA7OwotICAqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogY2F0IiA+JjUKLSRhc19lY2hvICJjYXQiID4mNjsgfSA7OwotZXNhYwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLURFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKLQotYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgotCi0KLWFtX21ha2U9JHtNQUtFLW1ha2V9Ci1jYXQgPiBjb25maW5jIDw8ICdFTkQnCi1hbV9fZG9pdDoKLQlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKLS5QSE9OWTogYW1fX2RvaXQKLUVORAotIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gIiA+JjY7IH0KLWFtX19pbmNsdWRlPSIjIgotYW1fX3F1b3RlPQotX2FtX3Jlc3VsdD1ub25lCi0jIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgotZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgotIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gJ21ha2UnLgotY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKLSp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQotICBhbV9faW5jbHVkZT1pbmNsdWRlCi0gIGFtX19xdW90ZT0KLSAgX2FtX3Jlc3VsdD1HTlUKLSAgOzsKLWVzYWMKLSMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgotaWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgotICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgotICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKLSAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQotICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQotICAgICBhbV9fcXVvdGU9IlwiIgotICAgICBfYW1fcmVzdWx0PUJTRAotICAgICA7OwotICAgZXNhYwotZmkKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQotJGFzX2VjaG8gIiRfYW1fcmVzdWx0IiA+JjY7IH0KLXJtIC1mIGNvbmZpbmMgY29uZm1mCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nOwotZmkKLQotaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCi0gIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCi0gIEFNREVQQkFDS1NMQVNIPSdcJwotICBhbV9fbm9kZXA9J19ubycKLWZpCi0gaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCi0gIEFNREVQX1RSVUU9Ci0gIEFNREVQX0ZBTFNFPScjJwotZWxzZQotICBBTURFUF9UUlVFPScjJwotICBBTURFUF9GQUxTRT0KLWZpCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0gIGZpCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgZmkKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLSAgYWNfcHJvZ19yZWplY3RlZD1ubwotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCi0gICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKLSAgICAgICBjb250aW51ZQotICAgICBmaQotICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1pZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCi0gICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KLSAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCi0gIHNoaWZ0Ci0gIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgotICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgotICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KLSAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KLSAgICBzaGlmdAotICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgotICBmaQotZmkKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCi0gIGRvbmUKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KLSAgICBDQz0iIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIENDPSRhY19jdF9DQwotICBmaQotZmkKLQotZmkKLQotCi10ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLSRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotc2V0IFggJGFjX2NvbXBpbGUKLWFjX2NvbXBpbGVyPSQyCi1mb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCi0gIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgc2VkICcxMGFcCi0uLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCi0gICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotZG9uZQotCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCi1hY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEub3V0LmRTWU0gYS5leGUgYi5vdXQiCi0jIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCi0jIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCi0jIG9mIGV4ZWV4dC4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9Ci1hY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAotCi0jIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6Ci1hY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgotCi1hY19ybWZpbGVzPQotZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCi1kbwotICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OwotICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OwotICBlc2FjCi1kb25lCi1ybSAtZiAkYWNfcm1maWxlcwotCi1pZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgotICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KLSMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCi0jIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAotIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KLSMgQXV0b2NvbmYuCi1mb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKLWRvCi0gIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQotICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQotCTs7Ci0gICAgW2FiXS5vdXQgKQotCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0Ci0JIyBjZXJ0YWlubHkgcmlnaHQuCi0JYnJlYWs7OwotICAgICouKiApCi0JaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87Ci0JdGhlbiA6OyBlbHNlCi0JICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCi0JZmkKLQkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKLQkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKLQkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KLQkjIEV2ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKLQkjIGFjdHVhbGx5IHdvcmtpbmcuCi0JYnJlYWs7OwotICAgICogKQotCWJyZWFrOzsKLSAgZXNhYwotZG9uZQotdGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9Ci0KLWVsc2UKLSAgYWNfZmlsZT0nJwotZmkKLWlmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgNzcgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQotYWNfZXhlZXh0PSRhY19jdl9leGVleHQKLQotcm0gLWYgLXIgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKLWFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAiID4mNjsgfQotaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgotICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAod2VsbCwgb2JzZXJ2YWJsZSkKLSMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAotIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKLSMgYHJtJy4KLWZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbwotICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKLSAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKLSAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKLQkgIGJyZWFrOzsKLSAgICAqICkgYnJlYWs7OwotICBlc2FjCi1kb25lCi1lbHNlCi0gIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci1maQotcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2V4ZWV4dCIgPiY2OyB9Ci0KLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKLUVYRUVYVD0kYWNfY3ZfZXhlZXh0Ci1hY19leGVleHQ9JEVYRUVYVAotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1pbnQKLW1haW4gKCkKLXsKLUZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7Ci0gcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgotIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCi0gIHsgeyBhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0gIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCcKLSAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPW5vCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCi0JY3Jvc3NfY29tcGlsaW5nPXllcwotICAgIGVsc2UKLQl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCi1JZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0gICAgZmkKLSAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1Ci0kYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9Ci0KLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91dAotYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfb2JqZXh0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagotaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgotICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbwotICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7Ci0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gKSA7OwotICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAotICAgICAgIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotZWxzZQotICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQoteyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci1maQotcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQotT0JKRVhUPSRhY19jdl9vYmpleHQKLWFjX29iamV4dD0kT0JKRVhUCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQotaWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCi0gIEdDQz15ZXMKLWVsc2UKLSAgR0NDPQotZmkKLWFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KLWFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZwotICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKLSAgIGFjX2N2X3Byb2dfY2NfZz1ubwotICAgQ0ZMQUdTPSItZyIKLSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1lbHNlCi0gIENGTEFHUz0iIgotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCi0JIENGTEFHUz0iLWciCi0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Ci1pZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCi0gIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKLWVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItZyAtTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIENGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ0ZMQUdTPQotICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9wcm9nX2NjX2M4OT1ubwotYWNfc2F2ZV9DQz0kQ0MKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotc3RydWN0IHN0YXQ7Ci0vKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCi1zdHJ1Y3QgYnVmIHsgaW50IHg7IH07Ci1GSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOwotc3RhdGljIGNoYXIgKmUgKHAsIGkpCi0gICAgIGNoYXIgKipwOwotICAgICBpbnQgaTsKLXsKLSAgcmV0dXJuIHBbaV07Ci19Ci1zdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCi17Ci0gIGNoYXIgKnM7Ci0gIHZhX2xpc3QgdjsKLSAgdmFfc3RhcnQgKHYscCk7Ci0gIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7Ci0gIHZhX2VuZCAodik7Ci0gIHJldHVybiBzOwotfQotCi0vKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcwotICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgotICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCi0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0Ci0gICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCi0gICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKLSAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KLWludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07Ci0KLS8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycwotICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLwotI2RlZmluZSBGT08oeCkgJ3gnCi1pbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKLQotaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Ci1zdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKLXN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OwotaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7Ci1pbnQgYXJnYzsKLWNoYXIgKiphcmd2OwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKLQktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgotZG8KLSAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCi0gIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKLUNDPSRhY19zYXZlX0NDCi0KLWZpCi0jIEFDX0NBQ0hFX1ZBTAotY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KLSAgeCkKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKLSAgeG5vKQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OwotICAqKQotICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Ci1lc2FjCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgotCi1maQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9wcm9nX2NjX2Nfbys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotICAjIE1ha2Ugc3VyZSBpdCB3b3JrcyBib3RoIHdpdGggJENDIGFuZCB3aXRoIHNpbXBsZSBjYy4KLSAgIyBGb2xsb3dpbmcgQUNfUFJPR19DQ19DX08sIHdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZQotICAjIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywKLSAgIyB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCi0gIGFtX2N2X3Byb2dfY2NfY19vPXllcwotICBmb3IgYW1faSBpbiAxIDI7IGRvCi0gICAgaWYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQiID4mNQotICAgKCRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0KSA+JjUgMj4mNQotICAgYWNfc3RhdHVzPSQ/Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSBcCi0gICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0OyB0aGVuCi0gICAgICA6IE9LCi0gICAgZWxzZQotICAgICAgYW1fY3ZfcHJvZ19jY19jX289bm8KLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBybSAtZiBjb3JlIGNvbmZ0ZXN0KgotICB1bnNldCBhbV9pCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9wcm9nX2NjX2NfbyIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3Byb2dfY2NfY19vIiA+JjY7IH0KLWlmIHRlc3QgIiRhbV9jdl9wcm9nX2NjX2NfbyIgIT0geWVzOyB0aGVuCi0gICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgotICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KLSAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgotICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAotICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKLSAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKLWZpCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEIi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGFtX191bml2ZXJzYWw9ZmFsc2UKLSAgY2FzZSAiICRkZXBjYyAiIGluICMoCi0gICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7Ci0gICAgIGVzYWMKLQotICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KLSAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKLSAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCi0gICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgotICAgICMKLSAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQotICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCi0gICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCi0gICAgOiA+IHN1Yi9jb25mdGVzdC5jCi0gICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCi0gICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCi0gICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAotICAgICAgIyBTb2xhcmlzIDEwIC9iaW4vc2guCi0gICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKLSAgICBkb25lCi0gICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgotCi0gICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKLSAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCi0gICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgZ2NjKQotICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KLSAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCi0gICAgICA7OwotICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgQWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBlbHNlCi0JYnJlYWsKLSAgICAgIGZpCi0gICAgICA7OwotICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKLSAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rICctYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCi0gICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKLSAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCi0gICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgICBhbV9fbWludXNfb2JqPQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKLSAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLSAgZG9uZQotCi0gIGNkIC4uCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLWVsc2UKLSAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Ci1DQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotIGlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ0NfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKLWVsc2UKLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJwotICBhbV9fZmFzdGRlcENDX0ZBTFNFPQotZmkKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLwotICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbwotICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCi0gICAgIGRvbmUKLSAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKLSAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQotICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgotICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQotICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfU0VEIiB8fCBjb250aW51ZQotIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKLWNhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgotKkdOVSopCi0gIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OwotKikKLSAgYWNfY291bnQ9MAotICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKLSAgd2hpbGUgOgotICBkbwotICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCi0gICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgotICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKLSAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhawotICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKLSAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KLSAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQotICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKLSAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKLSAgICBmaQotICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKLSAgZG9uZQotICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKLWVzYWMKLQotICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKLSAgICBkb25lCi0gIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKLSAgZmkKLWVsc2UKLSAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9Ci0gU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCi0gIHJtIC1mIGNvbmZ0ZXN0LnNlZAotCi10ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCi1Yc2VkPSIkU0VEIC1lIDFzL15YLy8iCi0KLQotCi0KLQotCi0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgotICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9HUkVQIiB8fCBjb250aW51ZQotIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAotY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgotKkdOVSopCi0gIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OwotKikKLSAgYWNfY291bnQ9MAotICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKLSAgd2hpbGUgOgotICBkbwotICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCi0gICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgotICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCi0gICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKLSAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCi0gICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCi0gICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgotICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCi0gICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCi0gICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAotICAgIGZpCi0gICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICBkb25lCi0gIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OwotZXNhYwotCi0gICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKLSAgICBkb25lCi0gIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQotICBmaQotZWxzZQotICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKLWZpCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9Ci0gR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCi0gICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgotICAgZWxzZQotICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCi0gIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0VHUkVQIiB8fCBjb250aW51ZQotIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCi1jYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgotKkdOVSopCi0gIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OwotKikKLSAgYWNfY291bnQ9MAotICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKLSAgd2hpbGUgOgotICBkbwotICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCi0gICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgotICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgotICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhawotICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKLSAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgotICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCi0gICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKLSAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAotICAgIGZpCi0gICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICBkb25lCi0gIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OwotZXNhYwotCi0gICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCi0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLSAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQotICBmaQotZWxzZQotICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAotZmkKLQotICAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KLSBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfRkdSRVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiBlY2hvICdhYipjJyB8ICRHUkVQIC1GICdhYipjJyA+L2Rldi9udWxsIDI+JjEKLSAgIHRoZW4gYWNfY3ZfcGF0aF9GR1JFUD0iJEdSRVAgLUYiCi0gICBlbHNlCi0gICAgIGlmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KLSAgYWNfcGF0aF9GR1JFUF9mb3VuZD1mYWxzZQotICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9GR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRkdSRVAiIHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKLWNhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCi0qR05VKikKLSAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7Ci0qKQotICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgotICB3aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCi0gICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCi0gICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCi0gICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAotICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCi0gICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgotICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKLSAgICBkb25lCi0gIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCi1maQotCi0gICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQotIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKLQotCi10ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzCi1lbHNlCi0gIHdpdGhfZ251X2xkPW5vCi1maQotCi1hY19wcm9nPWxkCi1pZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9Ci0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndwotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKLSAgKikKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfcHJvZyBpbgotICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgotICAgIFtcXC9dKiB8ID86W1xcL10qKQotICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKLSAgICAgIDs7Ci0gICIiKQotICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgotICAgIGFjX3Byb2c9bGQKLSAgICA7OwotICAqKQotICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICB3aXRoX2dudV9sZD11bmtub3duCi0gICAgOzsKLSAgZXNhYwotZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KLWZpCi1pZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZwotICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAotICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0gICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCi0JOzsKLSAgICAgICopCi0JdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSRsdF9zYXZlX2lmcwotZWxzZQotICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpCi1maQotCi1MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKLSRhc19lY2hvICIkTEQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi10ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCi1jYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIGx0X2N2X3Byb2dfZ251X2xkPXllcwotICA7OwotKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KLSAgOzsKLWVzYWMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQotd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCi0KLQotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcGF0aF9OTSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KLSAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGx0X2N2X3BhdGhfTk09JE5NCi1lbHNlCi0gIGx0X25tX3RvX2NoZWNrPSR7YWNfdG9vbF9wcmVmaXh9bm0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCi0gIGZpCi0gIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbwotICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSRhY19kaXIvJGx0X3RtcF9ubQotICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiOyB0aGVuCi0JIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlICdzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKLQkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCi0JIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCi0JIyBNU1lTIGNvbnZlcnRzIC9kZXYvbnVsbCB0byBOVUwsIE1pbkdXIG5tIHRyZWF0cyBOVUwgYXMgZW1wdHkKLQljYXNlICRidWlsZF9vcyBpbgotCW1pbmd3KikgbHRfYmFkX2ZpbGU9Y29uZnRlc3Qubm0vbm9maWxlIDs7Ci0JKikgbHRfYmFkX2ZpbGU9L2Rldi9udWxsIDs7Ci0JZXNhYwotCWNhc2UgYCIkdG1wX25tIiAtQiAkbHRfYmFkX2ZpbGUgMj4mMSB8IHNlZCAnMXEnYCBpbgotCSokbHRfYmFkX2ZpbGUqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKLQkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCi0JICBicmVhayAyCi0JICA7OwotCSopCi0JICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkgICovZGV2L251bGwqKQotCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhayAyCi0JICAgIDs7Ci0JICAqKQotCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAotCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncwotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9JGx0X3NhdmVfaWZzCi0gIGRvbmUKLSAgOiAke2x0X2N2X3BhdGhfTk09bm99Ci1maQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQotaWYgdGVzdCBubyAhPSAiJGx0X2N2X3BhdGhfTk0iOyB0aGVuCi0gIE5NPSRsdF9jdl9wYXRoX05NCi1lbHNlCi0gICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgotICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgotICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotICBlbHNlCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgotICBkbwotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19EVU1QQklOKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCi0gIGFjX2N2X3Byb2dfRFVNUEJJTj0iJERVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1EVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KLWlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERVTVBCSU4iID4mNQotJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiREVU1QQklOIjsgdGhlbgotICBhY19jdF9EVU1QQklOPSREVU1QQklOCi0gIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCi1pZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhawotZG9uZQotCi0gIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCi0gICAgRFVNUEJJTj0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCi0gIGZpCi1maQotCi0gICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLSAgICAqQ09GRiopCi0gICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIERVTVBCSU49OgotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLSAgaWYgdGVzdCA6ICE9ICIkRFVNUEJJTiI7IHRoZW4KLSAgICBOTT0kRFVNUEJJTgotICBmaQotZmkKLXRlc3QgLXogIiROTSIgJiYgTk09bm0KLQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X25tX2ludGVyZmFjZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgotICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mNSkKLSAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQotICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JjUpCi0gIGNhdCBjb25mdGVzdC5vdXQgPiY1Ci0gIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgotICBmaQotICBybSAtZiBjb25mdGVzdCoKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X25tX2ludGVyZmFjZSIgPiY2OyB9Ci0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9Ci1MTl9TPSRhc19sbl9zCi1pZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQotJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9Ci1maQotCi0jIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3Zfc3lzX21heF9jbWRfbGVuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgICBpPTAKLSAgdGVzdHN0cmluZz1BQkNECi0KLSAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgbXNkb3NkamdwcCopCi0gICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYwotICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KLSAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcwotICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKLSAgICA7OwotCi0gIGdudSopCi0gICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCi0gICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7Ci0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQotICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCi0gICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KLSAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAotICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKLSAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCi0gICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5Ci0gICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIG1pbnQqKQotICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIGFtaWdhb3MqKQotICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KLSAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYml0cmlnKiB8IGRhcndpbiogfCBkcmFnb25mbHkqIHwgZnJlZWJzZCogfCBuZXRic2QqIHwgb3BlbmJzZCopCi0gICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCi0gICAgZmkKLSAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICA7OwotCi0gIGludGVyaXgqKQotICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKLSAgICA7OwotCi0gIG9zMiopCi0gICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCi0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbCSBdLy8nYAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAotICAgIGZpCi0gICAgOzsKLSAgKikKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiAmJiBcCi0gICAgICAgdGVzdCB1bmRlZmluZWQgIT0gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICBlbHNlCi0gICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCi0gICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCi0gICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDg7IGRvCi0gICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwotICAgICAgZG9uZQotICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KLSAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCi0gICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAotICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgotICAgICAgd2hpbGUgeyB0ZXN0IFhgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCi0JICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgotCSAgICAgIHRlc3QgMTcgIT0gIiRpIiAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCi0gICAgICBkbwotICAgICAgICBpPWBleHByICRpICsgMWAKLSAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCi0gICAgICBkb25lCi0gICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKLSAgICAgIHRlc3RzdHJpbmc9Ci0gICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCi0gICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQotICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotCi1maQotCi1pZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKLSRhc19lY2hvICJub25lIiA+JjY7IH0KLWZpCi1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLQotCi0KLQotCi06ICR7Q1A9ImNwIC1mIn0KLTogJHtNVj0ibXYgLWYifQotOiAke1JNPSJybSAtZiJ9Ci0KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBsdF91bnNldD11bnNldAotZWxzZQotICBsdF91bnNldD1mYWxzZQotZmkKLQotCi0KLQotCi0jIHRlc3QgRUJDRElDIG9yIEFTQ0lJCi1jYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCi0gQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KLSAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCi0gIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCi0gIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKLSAgOzsKLSAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KLSAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCi0gIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJwotICA7OwotZXNhYwotCi0KLQotCi0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRob3N0IGluCi0gICotKi1taW5ndyogKQotICAgIGNhc2UgJGJ1aWxkIGluCi0gICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgICAgICAgOzsKLSAgICAgICotKi1jeWd3aW4qICkKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgotICAgICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICAqLSotY3lnd2luKiApCi0gICAgY2FzZSAkYnVpbGQgaW4KLSAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgotICAgICAgICA7OwotICAgICAgKi0qLWN5Z3dpbiogKQotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSAgICAgICAgOzsKLSAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCi0gICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0gICAgOzsKLWVzYWMKLQotZmkKLQotdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9Ci0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KLWx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqICkKLSAgICBjYXNlICRidWlsZCBpbgotICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci1lc2FjCi0KLWZpCi0KLXRvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2xkX3JlbG9hZF9mbGFnKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQotJGFzX2VjaG8gIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9Ci1yZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKLWNhc2UgJHJlbG9hZF9mbGFnIGluCi0iIiB8ICIgIiopIDs7Ci0qKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKLWVzYWMKLXJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKLSAgICBmaQotICAgIDs7Ci0gIGRhcndpbiopCi0gICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR3bC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZWxzZQotICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGZpCi0gICAgOzsKLWVzYWMKLQotCi0KLQotCi0KLQotCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgotICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLU9CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAotaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1Ci0kYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCi0gIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAotaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KLSAgICBPQkpEVU1QPSJmYWxzZSIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCi0gIGZpCi1lbHNlCi0gIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCi1maQotCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKLWx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQotbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCi0jIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKLSMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KLSMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgotIyAndW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCi0jICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCi0jICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCi0jICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCi0jIHRoYXQgcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlICdmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciAncGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeFs0LTldKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYmVvcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KLSAgOzsKLQotY3lnd2luKikKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIDs7Ci0KLW1pbmd3KiB8IHB3MzIqKQotICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5Ci0gICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAotICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgotICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIGVsc2UKLSAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKLSAgZmkKLSAgOzsKLQotY2VnY2MqKQotICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBpKjg2ICkKLSAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCi0gICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgotICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JwotICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICBmaQotICA7OwotCi1oYWlrdSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWhwdXgxMC4yMCogfCBocHV4MTEqKQotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAotICAgIDs7Ci0gICopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18UEEtUklTQ1swLTldXC5bMC05XSkgc2hhcmVkIGxpYnJhcnknCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkTEQgaW4KLSAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OwotICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKLSAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OwotICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gIGVzYWMKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298X3BpY1wuYSkkJwotICBmaQotICA7OwotCi1uZXdvczYqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCi0gIDs7Ci0KLSpudG8qIHwgKnFueCopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLW9wZW5ic2QqIHwgYml0cmlnKikKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1yZG9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc29sYXJpcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICBtb3Rvcm9sYSkKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVswLTldWzAtOV0qIFZlcnNpb24gWzAtOV0nCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCi0gICAgOzsKLSAgbmNyKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgc2VxdWVudCkKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJwotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCi0gICAgOzsKLSAgc25pKQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgZHluYW1pYyBsaWIiCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCi0gICAgOzsKLSAgc2llbWVucykKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIHBjKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi10cGYqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7Owotb3MyKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLWVzYWMKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9Ci0KLWZpbGVfbWFnaWNfZ2xvYj0KLXdhbnRfbm9jYXNlZ2xvYj1ubwotaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBtaW5ndyogfCBwdzMyKikKLSAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICB3YW50X25vY2FzZWdsb2I9eWVzCi0gICAgZWxzZQotICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLWZpCi0KLWZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi10ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0gIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCi1pZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKLSRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KLSAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCi1pZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgotICAgIERMTFRPT0w9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKLSAgZmkKLWVsc2UKLSAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKLWZpCi0KLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLQotCi0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKLQotY2FzZSAkaG9zdF9vcyBpbgotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoOwotICAjIGRlY2lkZSB3aGljaCBvbmUgdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAotICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KLSAgKi0taWRlbnRpZnktc3RyaWN0KikKLSAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjawotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLSopCi0gICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgotICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotICA7OwotZXNhYwotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KLXNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAotdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotCi0KLQotCi0KLQotCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gYXIKLSAgZG8KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQVIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1BUj0kYWNfY3ZfcHJvZ19BUgotaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFSIiA+JjUKLSRhc19lY2hvICIkQVIiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRBUiI7IHRoZW4KLSAgYWNfY3RfQVI9JEFSCi0gIGZvciBhY19wcm9nIGluIGFyCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfQVIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgotaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfQVIiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCi1kb25lCi0KLSAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCi0gICAgQVI9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIEFSPSRhY19jdF9BUgotICBmaQotZmkKLQotOiAke0FSPWFyfQotOiAke0FSX0ZMQUdTPWNydX0KLQotCi0KLQotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2FyX2F0X2ZpbGUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9hcl9hdF9maWxlPW5vCi0gICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0Ci0gICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKLSAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1Ci0gIChldmFsICRsdF9hcl90cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0gICAgICBpZiB0ZXN0IDAgLWVxICIkYWNfc3RhdHVzIjsgdGhlbgotCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCi0Jcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCi0JeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKLSAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLQlpZiB0ZXN0IDAgLW5lICIkYWNfc3RhdHVzIjsgdGhlbgotICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAotICAgICAgICBmaQotICAgICAgZmkKLSAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KLQotaWYgdGVzdCBubyA9ICIkbHRfY3ZfYXJfYXRfZmlsZSI7IHRoZW4KLSAgYXJjaGl2ZXJfbGlzdF9zcGVjPQotZWxzZQotICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKLWZpCi0KLQotCi0KLQotCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKLWlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1Ci0kYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KLSAgYWNfY3RfU1RSSVA9JFNUUklQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCi1pZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQotJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KLSAgICBTVFJJUD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBTVFJJUD0kYWNfY3RfU1RSSVAKLSAgZmkKLWVsc2UKLSAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgotZmkKLQotdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06Ci0KLQotCi0KLQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQotJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KLSAgYWNfY3RfUkFOTElCPSRSQU5MSUIKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCi1pZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCi0gICAgUkFOTElCPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCi0gIGZpCi1lbHNlCi0gIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgotZmkKLQotdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKLQotCi0KLQotCi0KLSMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgotb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCi1vbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQotCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gIGJpdHJpZyogfCBvcGVuYnNkKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCi0gICAgOzsKLSAgKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCi0gICAgOzsKLSAgZXNhYwotICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgotZmkKLQotY2FzZSAkaG9zdF9vcyBpbgotICBkYXJ3aW4qKQotICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKLSAgKikKLSAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKLWVzYWMKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0jIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0KLSMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgotIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KLQotIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgotc3ltY29kZT0nW0JDREVHUlNUXScKLQotIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCi1zeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJwotCi0jIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4KikKLSAgc3ltY29kZT0nW0JDRFRdJwotICA7OwotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICBzeW1jb2RlPSdbQUJDREdJU1RXXScKLSAgOzsKLWhwdXgqKQotICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJwotICBmaQotICA7OwotaXJpeCogfCBub25zdG9wdXgqKQotICBzeW1jb2RlPSdbQkNERUdSU1RdJwotICA7Owotb3NmKikKLSAgc3ltY29kZT0nW0JDREVHUVJTVF0nCi0gIDs7Ci1zb2xhcmlzKikKLSAgc3ltY29kZT0nW0JEUlRdJwotICA7Owotc2NvMy4ydjUqKQotICBzeW1jb2RlPSdbRFRdJwotICA7Owotc3lzdjQuMnV3MiopCi0gIHN5bWNvZGU9J1tEVF0nCi0gIDs7Ci1zeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICBzeW1jb2RlPSdbQUJEVF0nCi0gIDs7Ci1zeXN2NCkKLSAgc3ltY29kZT0nW0RGTlNUVV0nCi0gIDs7Ci1lc2FjCi0KLSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgotY2FzZSBgJE5NIC1WIDI+JjFgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OwotZXNhYwotCi1pZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotICAjIEdldHMgbGlzdCBvZiBkYXRhIHN5bWJvbHMgdG8gaW1wb3J0LgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9InNlZCAtbiAtZSAncy9eSSAuKiBcKC4qXCkkL1wxL3AnIgotICAjIEFkanVzdCB0aGUgYmVsb3cgZ2xvYmFsIHN5bWJvbCB0cmFuc2Zvcm1zIHRvIGZpeHVwIGltcG9ydGVkIHZhcmlhYmxlcy4KLSAgbHRfY2RlY2xfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBjaGFyIFwxOy9wJyIKLSAgbHRfY19uYW1lX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIgotICBsdF9jX25hbWVfbGliX2hvb2s9IlwKLSAgLWUgJ3MvXkkgLiogXChsaWIuKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJ1wKLSAgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIDB9LC9wJyIKLWVsc2UKLSAgIyBEaXNhYmxlIGhvb2tzIGJ5IGRlZmF1bHQuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0KLSAgbHRfY2RlY2xfaG9vaz0KLSAgbHRfY19uYW1lX2hvb2s9Ci0gIGx0X2NfbmFtZV9saWJfaG9vaz0KLWZpCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCi0jIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKLSMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4iXAotJGx0X2NkZWNsX2hvb2tcCi0iIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyJcCi0iIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIlwKLSRsdF9jX25hbWVfaG9va1wKLSIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCi0iIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIgotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSB3aXRoIGxpYiBwcmVmaXggYW5kCi0jIHN5bWJvbCBhZGRyZXNzLgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIlwKLSRsdF9jX25hbWVfbGliX2hvb2tcCi0iIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAotIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXChsaWIuKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyJcCi0iIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIgotCi0jIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KLW9wdF9jcj0KLWNhc2UgJGJ1aWxkX29zIGluCi1taW5ndyopCi0gIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKLSAgOzsKLWVzYWMKLQotIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCi1mb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCi0KLSAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KLSAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKLQotICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCi0gIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24sCi0gICAgIyBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlIGFuZCBJIGZvciBhbnkgaW1wb3J0ZWQgdmFyaWFibGUuCi0gICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCi0gICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLICciXAotIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCi0iICAgICAvXkNPRkYgU1lNQk9MIFRBQkxFL3tmb3IoaSBpbiBoaWRlKSBkZWxldGUgaGlkZVtpXX07IlwKLSIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAotIiAgICAgL14gKlN5bWJvbCBuYW1lICo6IC97c3BsaXQoXCQgMCxzbixcIjpcIik7IHNpPXN1YnN0cihzblsyXSwyKX07IlwKLSIgICAgIC9eICpUeXBlICo6IGNvZGUve3ByaW50IFwiVFwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAotIiAgICAgL14gKlR5cGUgKjogZGF0YS97cHJpbnQgXCJJXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCi0iICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAotIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAotIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCi0iICAgICB7Zj1cIkRcIn07IFwkIDB+L1woXCkuKlx8L3tmPVwiVFwifTsiXAotIiAgICAge3NwbGl0KFwkIDAsYSwvXHx8XHIvKTsgc3BsaXQoYVsyXSxzKX07IlwKLSIgICAgIHNbMV1+L15bQD9dL3twcmludCBmLHNbMV0sc1sxXTsgbmV4dH07IlwKLSIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgZix0WzFdLHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKLSIgICAgICcgcHJmeD1eJGFjX3N5bXByZngiCi0gIGVsc2UKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgotICBmaQotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCi0KLSAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCi0gIHBpcGVfd29ya3M9bm8KLQotICBybSAtZiBjb25mdGVzdCoKLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLWNoYXIgbm1fdGVzdF92YXI7Ci12b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKLXZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi1pbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQotX0xUX0VPRgotCi0gIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KLSAgICBubGlzdD1jb25mdGVzdC5ubQotICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0XCIiOyB9ID4mNQotICAoZXZhbCAkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgotICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLSAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCi0JbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCi0gICAgICBlbHNlCi0Jcm0gLWYgIiRubGlzdCJUCi0gICAgICBmaQotCi0gICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLS8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQotICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwotIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSNlbGlmIGRlZmluZWQgX19vc2ZfXwotLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCi0jIGRlZmluZSBMVF9ETFNZTV9DT05TVAotI2Vsc2UKLSMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1fTFRfRU9GCi0JICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCi0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JwotCi0JICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLQotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwotTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgdm9pZCAgICAgICAqYWRkcmVzczsKLX0KLWx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Ci17Ci0gIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKLV9MVF9FT0YKLQkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0JICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAodm9pZCAqKSAwfQotfTsKLQotLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCi0jaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECi1zdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewotICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotX0xUX0VPRgotCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLQkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKLQkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotCSAgTElCUz1jb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCi0JICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0JICAgIHBpcGVfd29ya3M9eWVzCi0JICBmaQotCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKLQkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUwotCWVsc2UKLQkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQotCWZpCi0gICAgICBlbHNlCi0JZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JjUKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiY1Ci0gICAgZmkKLSAgZWxzZQotICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKLQotICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCi0gIGlmIHRlc3QgeWVzID0gIiRwaXBlX3dvcmtzIjsgdGhlbgotICAgIGJyZWFrCi0gIGVsc2UKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQotICBmaQotZG9uZQotCi1maQotCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9Ci1maQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQotJGFzX2VjaG8gImZhaWxlZCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvayIgPiY1Ci0kYXNfZWNobyAib2siID4mNjsgfQotZmkKLQotIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCi1pZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLWVsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KLSAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCi1maQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzcm9vdCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfc3lzcm9vdDsKLWVsc2UKLSAgd2l0aF9zeXNyb290PW5vCi1maQotCi0KLWx0X3N5c3Jvb3Q9Ci1jYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKLSB5ZXMpCi0gICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAotICAgZmkKLSAgIDs7ICMoCi0gLyopCi0gICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICA7OyAjKAotIG5vfCcnKQotICAgOzsgIygKLSAqKQotICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX3N5c3Jvb3QiID4mNQotJGFzX2VjaG8gIiR3aXRoX3N5c3Jvb3QiID4mNjsgfQotICAgYXNfZm5fZXJyb3IgJD8gIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1Ci0gICA7OwotZXNhYwotCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKLSRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9Ci0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB3b3JraW5nIGRkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHdvcmtpbmcgZGQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9sdF9ERCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIHByaW50ZiAwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiA+Y29uZnRlc3QuaQotY2F0IGNvbmZ0ZXN0LmkgY29uZnRlc3QuaSA+Y29uZnRlc3QyLmkKLTogJHtsdF9ERDo9JEREfQotaWYgdGVzdCAteiAiJGx0X0REIjsgdGhlbgotICBhY19wYXRoX2x0X0REX2ZvdW5kPWZhbHNlCi0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfcHJvZyBpbiBkZDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGFjX3BhdGhfbHRfREQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX2x0X0REIiB8fCBjb250aW51ZQotaWYgIiRhY19wYXRoX2x0X0REIiBicz0zMiBjb3VudD0xIDxjb25mdGVzdDIuaSA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsOyB0aGVuCi0gIGNtcCAtcyBjb25mdGVzdC5pIGNvbmZ0ZXN0Lm91dCBcCi0gICYmIGFjX2N2X3BhdGhfbHRfREQ9IiRhY19wYXRoX2x0X0REIiBhY19wYXRoX2x0X0REX2ZvdW5kPToKLWZpCi0gICAgICAkYWNfcGF0aF9sdF9ERF9mb3VuZCAmJiBicmVhayAzCi0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLSAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfbHRfREQiOyB0aGVuCi0gICAgOgotICBmaQotZWxzZQotICBhY19jdl9wYXRoX2x0X0REPSRsdF9ERAotZmkKLQotcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdDIuaSBjb25mdGVzdC5vdXQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfbHRfREQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wYXRoX2x0X0REIiA+JjY7IH0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byB0cnVuY2F0ZSBiaW5hcnkgcGlwZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHRydW5jYXRlIGJpbmFyeSBwaXBlcy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl90cnVuY2F0ZV9iaW4rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBwcmludGYgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYgPmNvbmZ0ZXN0LmkKLWNhdCBjb25mdGVzdC5pIGNvbmZ0ZXN0LmkgPmNvbmZ0ZXN0Mi5pCi1sdF9jdl90cnVuY2F0ZV9iaW49Ci1pZiAiJGFjX2N2X3BhdGhfbHRfREQiIGJzPTMyIGNvdW50PTEgPGNvbmZ0ZXN0Mi5pID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGw7IHRoZW4KLSAgY21wIC1zIGNvbmZ0ZXN0LmkgY29uZnRlc3Qub3V0IFwKLSAgJiYgbHRfY3ZfdHJ1bmNhdGVfYmluPSIkYWNfY3ZfcGF0aF9sdF9ERCBicz00MDk2IGNvdW50PTEiCi1maQotcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdDIuaSBjb25mdGVzdC5vdXQKLXRlc3QgLXogIiRsdF9jdl90cnVuY2F0ZV9iaW4iICYmIGx0X2N2X3RydW5jYXRlX2Jpbj0iJFNFRCAtZSA0cSIKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RydW5jYXRlX2JpbiIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3RydW5jYXRlX2JpbiIgPiY2OyB9Ci0KLQotCi0KLQotCi0KLSMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgotZnVuY19jY19iYXNlbmFtZSAoKQotewotICAgIGZvciBjY190ZW1wIGluICQqIiI7IGRvCi0gICAgICBjYXNlICRjY190ZW1wIGluCi0gICAgICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICAgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICAgICAgXC0qKSA7OwotICAgICAgICAqKSBicmVhazs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotICAgIGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAotfQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKLWZpCi0KLXRlc3Qgbm8gPSAiJGVuYWJsZV9saWJ0b29sX2xvY2siIHx8IGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCi0KLSMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAotIyBsaWJ0b29sIHN1cHBvcnQuCi1jYXNlICRob3N0IGluCi1pYTY0LSotaHB1eCopCi0gICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBtb2RlCi0gICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAgICpFTEYtMzIqKQotCUhQVVhfSUE2NF9NT0RFPTMyCi0JOzsKLSAgICAgICpFTEYtNjQqKQotCUhQVVhfSUE2NF9NT0RFPTY0Ci0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLSotKi1pcml4NiopCi0gICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKLSAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgotICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgotICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotCSozMi1iaXQqKQotCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKLQkgIDs7Ci0JKk4zMiopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCi0JICA7OwotCSo2NC1iaXQqKQotCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgotCTs7Ci0gICAgICBlc2FjCi0gICAgZWxzZQotICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotCSozMi1iaXQqKQotCSAgTEQ9IiR7TEQtbGR9IC0zMiIKLQkgIDs7Ci0JKk4zMiopCi0JICBMRD0iJHtMRC1sZH0gLW4zMiIKLQkgIDs7Ci0JKjY0LWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLTY0IgotCSAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLW1pcHM2NCotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCi0gIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgICBlbXVsPWVsZgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAgICozMi1iaXQqKQotCWVtdWw9IiR7ZW11bH0zMiIKLQk7OwotICAgICAgKjY0LWJpdCopCi0JZW11bD0iJHtlbXVsfTY0IgotCTs7Ci0gICAgZXNhYwotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAgICpNU0IqKQotCWVtdWw9IiR7ZW11bH1idHNtaXAiCi0JOzsKLSAgICAgICpMU0IqKQotCWVtdWw9IiR7ZW11bH1sdHNtaXAiCi0JOzsKLSAgICBlc2FjCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKk4zMiopCi0JZW11bD0iJHtlbXVsfW4zMiIKLQk7OwotICAgIGVzYWMKLSAgICBMRD0iJHtMRC1sZH0gLW0gJGVtdWwiCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQoteDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKLXMzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCi0gICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKLSAgIyBvcHRpb25zIGFjY29yZGluZ2x5LiAgTm90ZSB0aGF0IHRoZSBsaXN0ZWQgY2FzZXMgb25seSBjb3ZlciB0aGUKLSAgIyBzaXR1YXRpb25zIHdoZXJlIGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCAoc3VjaCBhcyB3aGVuCi0gICMgZG9pbmcgMzItYml0IGNvbXBpbGF0aW9uIGZvciBhIGhvc3Qgd2hlcmUgbGQgZGVmYXVsdHMgdG8gNjQtYml0LCBvcgotICAjIHZpY2UgdmVyc2EpOyB0aGUgY29tbW9uIGNhc2VzIHdoZXJlIG5vIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgZG8KLSAgIyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICAgKjMyLWJpdCopCi0JY2FzZSAkaG9zdCBpbgotCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKLQkgICAgOzsKLQkgIHg4Nl82NC0qbGludXgqKQotCSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0JICAgICAgKng4Ni02NCopCi0JCUxEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCi0JCTs7Ci0JICAgICAgKikKLQkJTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotCQk7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICBwb3dlcnBjNjRsZS0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCi0JICAgIDs7Ci0JICBwb3dlcnBjNjQtKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCi0JICAgIDs7Ci0JICBzMzkweC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCi0JICAgIDs7Ci0JICBzcGFyYzY0LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgICo2NC1iaXQqKQotCWNhc2UgJGhvc3QgaW4KLQkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKLQkgICAgOzsKLQkgIHg4Nl82NC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKLQkgICAgOzsKLQkgIHBvd2VycGNsZS0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgotCSAgICA7OwotCSAgcG93ZXJwYy0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCi0JICAgIDs7Ci0JICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKLQkgICAgOzsKLQkgIHNwYXJjKi0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLSotKi1zY28zLjJ2NSopCi0gICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KLSAgU0FWRV9DRkxBR1M9JENGTEFHUwotICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2NjX25lZWRzX2JlbGYrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLSAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCi1lbHNlCi0gIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KLSAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9jY19uZWVkc19iZWxmIjsgdGhlbgotICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0kU0FWRV9DRkxBR1MKLSAgZmkKLSAgOzsKLSotKnNvbGFyaXMqKQotICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCi0gICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqNjQtYml0KikKLSAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCi0gICAgICB5ZXMqKQotICAgICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIGk/ODYtKi1zb2xhcmlzKnx4ODZfNjQtKi1zb2xhcmlzKikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKLSAgICAgICAgICA7OwotICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KLSAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICAgIExEPSR7TEQtbGR9X3NvbDIKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLSAgICAgICopCi0JaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICBMRD0iJHtMRC1sZH0gLTY0IgotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci1lc2FjCi0KLW5lZWRfbG9ja3M9JGVuYWJsZV9saWJ0b29sX2xvY2sKLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCi1pZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKLSRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBtdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCi1pZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgotICAgIE1BTklGRVNUX1RPT0w9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAotICBmaQotZWxzZQotICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgotZmkKLQotdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQotICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0Ci0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCi0gIGZpCi0gIHJtIC1mIGNvbmZ0ZXN0KgotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KLWlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIjsgdGhlbgotICBNQU5JRkVTVF9UT09MPToKLWZpCi0KLQotCi0KLQotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4qKQotICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKLWlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1Ci0kYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KLSAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCi1pZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQotJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KLSAgICBEU1lNVVRJTD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKLSAgZmkKLWVsc2UKLSAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgotZmkKLQotICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX05NRURJVCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1OTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCi1pZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5NRURJVCIgPiY1Ci0kYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgotICBhY19jdF9OTUVESVQ9JE5NRURJVAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKLWlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfTk1FRElUIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KLSAgICBOTUVESVQ9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgTk1FRElUPSRhY19jdF9OTUVESVQKLSAgZmkKLWVsc2UKLSAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCi1maQotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19MSVBPKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCi0gIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotTElQTz0kYWNfY3ZfcHJvZ19MSVBPCi1pZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSVBPIiA+JjUKLSRhc19lY2hvICIkTElQTyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KLSAgYWNfY3RfTElQTz0kTElQTwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCi1pZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfTElQTyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgotICAgIExJUE89IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgTElQTz0kYWNfY3RfTElQTwotICBmaQotZWxzZQotICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgotZmkKLQotICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19PVE9PTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKLWlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1Ci0kYXNfZWNobyAiJE9UT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KLSAgYWNfY3RfT1RPT0w9JE9UT09MCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCi1pZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQotJGFzX2VjaG8gIiRhY19jdF9PVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KLSAgICBPVE9PTD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBPVE9PTD0kYWNfY3RfT1RPT0wKLSAgZmkKLWVsc2UKLSAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgotZmkKLQotICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgotICBhY19jdl9wcm9nX09UT09MNjQ9IiRPVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLU9UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAotaWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0w2NCIgPiY1Ci0kYXNfZWNobyAiJE9UT09MNjQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCi0gIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSJvdG9vbDY0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAotaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KLSAgICBPVE9PTDY0PSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKLSAgZmkKLWVsc2UKLSAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBpZiB0ZXN0IC16ICIkTFRfTVVMVElfTU9EVUxFIjsgdGhlbgotCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQotCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQotCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKLQkjIGxpbmsgZmxhZ3MuCi0Jcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgotCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCi0JZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLS1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JjUKLQkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAotCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKLSAgICAgICAgX2x0X3Jlc3VsdD0kPwotCSMgSWYgdGhlcmUgaXMgYSBub24tZW1wdHkgZXJyb3IgbG9nLCBhbmQgInNpbmdsZV9tb2R1bGUiCi0JIyBhcHBlYXJzIGluIGl0LCBhc3N1bWUgdGhlIGZsYWcgY2F1c2VkIGEgbGlua2VyIHdhcm5pbmcKLSAgICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgc2luZ2xlX21vZHVsZSBjb25mdGVzdC5lcnI7IHRoZW4KLQkgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0JIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KLQkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgotCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiOyB0aGVuCi0JICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcwotCWVsc2UKLQkgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0JZmkKLQlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCi0Jcm0gLWYgY29uZnRlc3QuKgotICAgICAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjY7IH0KLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCi0gICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKLSAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQotICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKLWVsc2UKLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQlMREZMQUdTPSRzYXZlX0xERkxBR1MKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjY7IH0KLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9sZF9mb3JjZV9sb2FkKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubwotICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCi1pbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQotX0xUX0VPRgotICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiY1Ci0gICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKLSAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKLSAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKLSAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1Ci0gICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQotICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCi1pbnQgbWFpbigpIHsgcmV0dXJuIDA7fQotX0xUX0VPRgotICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiY1Ci0gICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCi0gICAgICBfbHRfcmVzdWx0PSQ/Ci0gICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgotCWNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IiAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcwotICAgICAgZWxzZQotCWNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICAgICBmaQotICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCi0gICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjY7IH0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAgZGFyd2luMS4qKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCi0gICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCi0gICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAotICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/Ci0gICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCi0JMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0JMTAuWzAxMl1bLC5dKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotCTEwLiopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwotICAgICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KLSAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCi0gICAgZmkKLSAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IjsgdGhlbgotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR3bC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0nCi0gICAgZWxzZQotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0gJGxpYicKLSAgICBmaQotICAgIGlmIHRlc3QgOiAhPSAiJERTWU1VVElMIiAmJiB0ZXN0IG5vID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgotICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKLSAgICBlbHNlCi0gICAgICBfbHRfZHN5bXV0aWw9Ci0gICAgZmkKLSAgICA7OwotICBlc2FjCi0KLSMgZnVuY19tdW5nZV9wYXRoX2xpc3QgVkFSSUFCTEUgUEFUSAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBWQVJJQUJMRSBpcyBuYW1lIG9mIHZhcmlhYmxlIGNvbnRhaW5pbmcgX3NwYWNlXyBzZXBhcmF0ZWQgbGlzdCBvZgotIyBkaXJlY3RvcmllcyB0byBiZSBtdW5nZWQgYnkgdGhlIGNvbnRlbnRzIG9mIFBBVEgsIHdoaWNoIGlzIHN0cmluZwotIyBoYXZpbmcgYSBmb3JtYXQ6Ci0jICJESVJbOkRJUl06IgotIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUKLSMgIjpESVJbOkRJUl0iCi0jICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklBQkxFCi0jICJESVJQWzpESVJQXTo6W0RJUkE6XURJUkEiCi0jICAgICAgIHN0cmluZyAiRElSUFsgRElSUF0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFIGFuZCBzdHJpbmcKLSMgICAgICAgIkRJUkFbIERJUkFdIiB3aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklBQkxFCi0jICJESVJbOkRJUl0iCi0jICAgICAgIFZBUklBQkxFIHdpbGwgYmUgcmVwbGFjZWQgYnkgIkRJUlsgRElSXSIKLWZ1bmNfbXVuZ2VfcGF0aF9saXN0ICgpCi17Ci0gICAgY2FzZSB4JDIgaW4KLSAgICB4KQotICAgICAgICA7OwotICAgICo6KQotICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgIFwkJDFcIgotICAgICAgICA7OwotICAgIHg6KikKLSAgICAgICAgZXZhbCAkMT1cIlwkJDEgYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgXCIKLSAgICAgICAgOzsKLSAgICAqOjoqKQotICAgICAgICBldmFsICQxPVwiXCQkMVwgYCRFQ0hPICQyIHwgJFNFRCAtZSAncy8uKjo6Ly8nIC1lICdzLzovIC9nJ2BcIgotICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAtZSAncy86Oi4qLy8nIC1lICdzLzovIC9nJ2BcIFwkJDFcIgotICAgICAgICA7OwotICAgICopCi0gICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2BcIgotICAgICAgICA7OwotICAgIGVzYWMKLX0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQotIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KLWlmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCi0gIENQUD0KLWZpCi1pZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgotICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAotICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCi0gICAgZG8KLSAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgotICBicmVhawotZmkKLQotICAgIGRvbmUKLSAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCi0KLWZpCi0gIENQUD0kYWNfY3ZfcHJvZ19DUFAKLWVsc2UKLSAgYWNfY3ZfcHJvZ19DUFA9JENQUAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKLSRhc19lY2hvICIkQ1BQIiA+JjY7IH0KLWFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgotCi1lbHNlCi0gIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIDoKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCi0jIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCi0jZWxzZQotIyBkZWZpbmUgSVNMT1dFUihjKSBcCi0JCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCi0JCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAotCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKLSNlbmRpZgotCi0jZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQotaW50Ci1tYWluICgpCi17Ci0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQotCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQotICAgICAgcmV0dXJuIDI7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLWZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLQotIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KLWZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAotCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKLWRvIDoKLSAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLWZvciBhY19oZWFkZXIgaW4gZGxmY24uaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiZGxmY24uaCIgImFjX2N2X2hlYWRlcl9kbGZjbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotICBHU1RfQ1VSUkVOVD0xMDA0Ci0gIEdTVF9SRVZJU0lPTj0wCi0gIEdTVF9BR0U9MTAwNAotICBHU1RfTElCVkVSU0lPTj0xMDA0OjA6MTAwNAotCi0KLQotCi0KLSAgR1NUX0xUX0xERkxBR1M9IiRHU1RfTFRfTERGTEFHUyAtdmVyc2lvbi1pbmZvICRHU1RfTElCVkVSU0lPTiIKLSAgaWYgdGVzdCAhIC16ICIiCi0gIHRoZW4KLSAgICBHU1RfTFRfTERGTEFHUz0iJEdTVF9MVF9MREZMQUdTIC1yZWxlYXNlICIKLSAgZmkKLQotCi0KLQotCi0KLQotIyBTZXQgb3B0aW9ucwotZW5hYmxlX2Rsb3Blbj15ZXMKLWVuYWJsZV93aW4zMl9kbGw9eWVzCi0KLWNhc2UgJGhvc3QgaW4KLSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19BUys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQVM9JGFjX2N2X3Byb2dfQVMKLWlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUyIgPiY1Ci0kYXNfZWNobyAiJEFTIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KLSAgYWNfY3RfQVM9JEFTCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9BUys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCi1pZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQotJGFzX2VjaG8gIiRhY19jdF9BUyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KLSAgICBBUz0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQVM9JGFjX2N0X0FTCi0gIGZpCi1lbHNlCi0gIEFTPSIkYWNfY3ZfcHJvZ19BUyIKLWZpCi0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0gIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCi1pZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKLSRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KLSAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCi1pZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgotICAgIERMTFRPT0w9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKLSAgZmkKLWVsc2UKLSAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKLWZpCi0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCi1pZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKLSRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCi1pZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgotICAgIE9CSkRVTVA9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKLSAgZmkKLWVsc2UKLSAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKLWZpCi0KLSAgOzsKLWVzYWMKLQotdGVzdCAteiAiJEFTIiAmJiBBUz1hcwotCi0KLQotCi0KLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLQotCi0KLQotCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi0KLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKLSAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OwotICAgICopCi0gICAgIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0kbHRfc2F2ZV9pZnMKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX3N0YXRpYz15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSRsdF9zYXZlX2lmcwotICAgICAgOzsKLSAgICBlc2FjCi1lbHNlCi0gIGVuYWJsZV9zdGF0aWM9bm8KLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSRsdF9zYXZlX2lmcwotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICA7OwotICAgIGVzYWMKLWVsc2UKLSAgZW5hYmxlX3NoYXJlZD15ZXMKLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfcGljOyBsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJHdpdGh2YWwgaW4KLSAgICB5ZXN8bm8pIHBpY19tb2RlPSR3aXRodmFsIDs7Ci0gICAgKikKLSAgICAgIHBpY19tb2RlPWRlZmF1bHQKLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAotICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KLQlJRlM9JGx0X3NhdmVfaWZzCi0JaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KLQkgIHBpY19tb2RlPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICA7OwotICAgIGVzYWMKLWVsc2UKLSAgcGljX21vZGU9ZGVmYXVsdAotZmkKLQotCi0KLQotCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKLSAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OwotICAgICopCi0gICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9JGx0X3NhdmVfaWZzCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotZmkKLQotCi0KLQotCi0KLQotCi0gIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPQotY2FzZSAkaG9zdCwkZW5hYmxlX3NoYXJlZCBpbgotcG93ZXIqLSotYWl4WzUtOV0qLHllcykKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGljaCB2YXJpYW50IG9mIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgdG8gcHJvdmlkZS4uLiAiID4mNjsgfQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWFpeC1zb25hbWUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2FpeF9zb25hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2FpeF9zb25hbWU7IGNhc2UgJHdpdGh2YWwgaW4KLSAgICBhaXh8c3ZyNHxib3RoKQotICAgICAgOzsKLSAgICAqKQotICAgICAgYXNfZm5fZXJyb3IgJD8gIlVua25vd24gYXJndW1lbnQgdG8gLS13aXRoLWFpeC1zb25hbWUiICIkTElORU5PIiA1Ci0gICAgICA7OwotICAgIGVzYWMKLSAgICBsdF9jdl93aXRoX2FpeF9zb25hbWU9JHdpdGhfYWl4X3NvbmFtZQotZWxzZQotICBpZiAke2x0X2N2X3dpdGhfYWl4X3NvbmFtZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3dpdGhfYWl4X3NvbmFtZT1haXgKLWZpCi0KLSAgICB3aXRoX2FpeF9zb25hbWU9JGx0X2N2X3dpdGhfYWl4X3NvbmFtZQotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfYWl4X3NvbmFtZSIgPiY1Ci0kYXNfZWNobyAiJHdpdGhfYWl4X3NvbmFtZSIgPiY2OyB9Ci0gIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgotICAgICMgRm9yIHRoZSBBSVggd2F5IG9mIG11bHRpbGliLCB3ZSBuYW1lIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIKLSAgICAjIGJhc2VkIG9uIHRoZSBiaXR3aWR0aCB1c2VkLCB0cmFkaXRpb25hbGx5ICdzaHIubycgb3IgJ3Nocl82NC5vJywKLSAgICAjIGFuZCAnc2hyLmltcCcgb3IgJ3Nocl82NC5pbXAnLCByZXNwZWN0aXZlbHksIGZvciB0aGUgSW1wb3J0IEZpbGUuCi0gICAgIyBFdmVuIHdoZW4gR05VIGNvbXBpbGVycyBpZ25vcmUgT0JKRUNUX01PREUgYnV0IG5lZWQgJy1tYWl4NjQnIGZsYWcsCi0gICAgIyB0aGUgQUlYIHRvb2xjaGFpbiB3b3JrcyBiZXR0ZXIgd2l0aCBPQkpFQ1RfTU9ERSBzZXQgKGRlZmF1bHQgMzIpLgotICAgIGlmIHRlc3QgNjQgPSAiJHtPQkpFQ1RfTU9ERS0zMn0iOyB0aGVuCi0gICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHJfNjQKLSAgICBlbHNlCi0gICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHIKLSAgICBmaQotICBmaQotICA7OwotKikKLSAgd2l0aF9haXhfc29uYW1lPWFpeAotICA7OwotZXNhYwotCi0KLQotCi0KLQotCi0KLQotCi0jIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCi1MSUJUT09MX0RFUFM9JGx0bWFpbgotCi0jIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi10ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgotICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWZpCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X29iamRpcis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCi1ta2RpciAubGlicyAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAubGliczsgdGhlbgotICBsdF9jdl9vYmpkaXI9LmxpYnMKLWVsc2UKLSAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KLSAgbHRfY3Zfb2JqZGlyPV9saWJzCi1maQotcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9Ci1vYmpkaXI9JGx0X2N2X29iamRpcgotCi0KLQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKLV9BQ0VPRgotCi0KLQotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0gICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi0gIGlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KLSAgICBDT0xMRUNUX05BTUVTPQotICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLSMgR2xvYmFsIHZhcmlhYmxlczoKLW9maWxlPWxpYnRvb2wKLWNhbl9idWlsZF9zaGFyZWQ9eWVzCi0KLSMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotIyB3aGljaCBuZWVkcyAnLmxpYicpLgotbGliZXh0PWEKLQotd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCi0KLW9sZF9DQz0kQ0MKLW9sZF9DRkxBR1M9JENGTEFHUwotCi0jIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwotdGVzdCAteiAiJENDIiAmJiBDQz1jYwotdGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCi10ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKLXRlc3QgLXogIiRMRCIgJiYgTEQ9bGQKLXRlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCi0KLWZ1bmNfY2NfYmFzZW5hbWUgJGNvbXBpbGVyCi1jY19iYXNlbmFtZT0kZnVuY19jY19iYXNlbmFtZV9yZXN1bHQKLQotCi0jIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKLXRlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCi1jYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotZmlsZV9tYWdpYyopCi0gIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJE1BR0lDX0NNRCBpbgotW1xcLypdIHwgID86W1xcL10qKQotICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotKikKLSAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAotICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgotICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KLSAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvIiR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKLSAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KLQljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCSJmaWxlX21hZ2ljICIqKQotCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECi0JICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8Ci0JICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCi0qKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCi0qKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKLSoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAotKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCi0qKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91Ci0qKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCi0qKiogYnVnLWxpYnRvb2xAZ251Lm9yZwotCi1fTFRfRU9GCi0JICBmaSA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSRsdF9zYXZlX2lmcwotICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECi0gIDs7Ci1lc2FjCi1maQotCi1NQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECi1pZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1Ci0kYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0KLQotCi1pZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBmaWxlLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkTUFHSUNfQ01EIGluCi1bXFwvKl0gfCAgPzpbXFwvXSopCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0qKQotICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECi0gIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCi0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvZmlsZSI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvImZpbGUiCi0gICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCi0JY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLQkiZmlsZV9tYWdpYyAiKikKLQkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAotCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAotCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAotCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAotKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgotKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCi0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKLSoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAotKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQotKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwotKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKLQotX0xUX0VPRgotCSAgZmkgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0kbHRfc2F2ZV9pZnMKLSAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAotICA7OwotZXNhYwotZmkKLQotTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAotaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQotJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBlbHNlCi0gICAgTUFHSUNfQ01EPToKLSAgZmkKLWZpCi0KLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLQotbHRfc2F2ZV9DQz0kQ0MKLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9YwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0PSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKLQotCi0KLQotCi0KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0jIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKLSMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgotY29tcGlsZXJfREVGQVVMVD0kQ0MKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJFJNIGNvbmZ0ZXN0KgotCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gLXIgY29uZnRlc3QqCi0KLQotIyMgQ0FWRUFUIEVNUFRPUjoKLSMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCi0jIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQotIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCi1pZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCi0KLWx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQotCi1pZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBudmNjKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJyA7OwotICBlc2FjCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCi0gICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50Ci0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQotCi1pZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgotZWxzZQotICAgIDoKLWZpCi0KLWZpCi0KLQotCi0KLQotCi0gIGx0X3Byb2dfY29tcGlsZXJfd2w9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpYz0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQotCi0KLSAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIHBvd2VycGMpCi0gICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgotICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3MyKikKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHdsLXN0YXRpYycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaGFpa3UqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgotICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Ci0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKLSAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZwotICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICAqbnRvKiB8ICpxbngqKQotICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKLSAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctWGxpbmtlciAnCi0gICAgICBpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSItWGNvbXBpbGVyICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgZWxzZQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgbmFnZm9yKikKLSAgICAgICAgIyBOQUcgRm9ydHJhbiBjb21waWxlcgotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJwotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3MyKikKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHdsLXN0YXRpYycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nK1onCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR3bC1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KLSAgICAgIGVjYyopCi0JbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KLSAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgotICAgICAgaWNjKiB8IGlmb3J0KikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCi0gICAgICBsZjk1KikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCi0JOzsKLSAgICAgIG5hZ2ZvciopCi0JIyBOQUcgRm9ydHJhbiBjb21waWxlcgotCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0JOzsKLSAgICAgIHRjYyopCi0JIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKLQk7OwotICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi0JbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgICA7OwotICAgICAgY2NjKikKLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKLQkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQotCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCi0JOzsKLSAgICAgICopCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQ2VyZXNcIEZvcnRyYW4qIHwgKlN1bipGb3J0cmFuKlwgWzEtN10uKiB8ICpTdW4qRm9ydHJhbipcIDguWzAtM10qKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJwotCSAgOzsKLQkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCi0JICA7OwotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JICA7OwotICAgICAgICAqSW50ZWwqXCBbQ0ZdKkNvbXBpbGVyKikKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKLQkgIDs7Ci0JKlBvcnRsYW5kXCBHcm91cCopCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mcGljJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCi0gICAgICA7OwotCi0gICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHJkb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtjb25mb3JtX3BpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHVuaWNvcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXBpYycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKLSAgICA7OwotZXNhYwotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KLWx0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYwotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KLSAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJFJNIGNvbmZ0ZXN0KgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KLQotaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIjsgdGhlbgotICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWM9IiAkbHRfcHJvZ19jb21waWxlcl9waWMiIDs7Ci0gICAgIGVzYWMKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCi1maQotCi1maQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubwotICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgotICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCi0gICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQotCi1pZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiOyB0aGVuCi0gICAgOgotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQotZmkKLQotCi0KLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCi0gICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0Ci0gICB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkUk0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICAkUk0gLXIgY29uZnRlc3QKLSAgICRSTSBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9Ci0KLQotCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KLSAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRSTSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgICRSTSAtciBjb25mdGVzdAotICAgJFJNIGNvbmZ0ZXN0KgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KLQotCi0KLQotaGFyZF9saW5rcz1ub3R0ZXN0ZWQKLWlmIHRlc3Qgbm8gPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiAmJiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQotICBoYXJkX2xpbmtzPXllcwotICAkUk0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQotJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KLSAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KLSAgICBuZWVkX2xvY2tzPXdhcm4KLSAgZmkKLWVsc2UKLSAgbmVlZF9sb2Nrcz1ubwotZmkKLQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0KLSAgcnVucGF0aF92YXI9Ci0gIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KLSAgYXJjaGl2ZV9jbWRzPQotICBhcmNoaXZlX2V4cHN5bV9jbWRzPQotICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KLSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubwotICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Ci0gIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgaGFyZGNvZGVfYXV0b21hdGljPW5vCi0gIGhhcmRjb2RlX2RpcmVjdD1ubwotICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLSAgaGFyZGNvZGVfbWludXNfTD1ubwotICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCi0gIGluaGVyaXRfcnBhdGg9bm8KLSAgbGlua19hbGxfZGVwbGlicz11bmtub3duCi0gIG1vZHVsZV9jbWRzPQotICBtb2R1bGVfZXhwc3ltX2NtZHM9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9Ci0gIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIGluY2x1ZGVfZXhwc3ltcz0KLSAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKLSAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgJyAoJyBhbmQgJykkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgotICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogJ2F8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyAnYScgYW5kICdiYycsCi0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgJ2QnLgotICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqIHwgYml0cmlnKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQotICAgIGxpbmtfYWxsX2RlcGxpYnM9bm8KLSAgICA7OwotICBlc2FjCi0KLSAgbGRfc2hsaWJzPXllcwotCi0gICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgotICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KLSAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KLSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0JIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5Ci0JIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAotCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCi0JIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KLQljYXNlIGAkTEQgLXYgMj4mMWAgaW4KLQkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OwotCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuWzItOV0qKSA7OwotCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKLQkgICopCi0JICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgKikKLQlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKLQk7OwotICAgIGVzYWMKLSAgZmkKLQotICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHdsJwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICBlbHNlCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KLSAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKF4pXCspXHNcKy8vJyAyPiYxYCBpbgotICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKLQotICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXhbMy05XSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KLQlsZF9zaGxpYnM9bm8KLQljYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCi0qKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KLSoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQotKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscwotKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgotKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCi0KLV9MVF9FT0YKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcwotCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgotICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICAgIGZpfgotICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhhaWt1KikKLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICBzaHJleHRfY21kcz0uZGxsCi0gICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQlwcmVmaXhfY21kcz0iJFNFRCJ+Ci0JaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCi0JICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKLQlmaX4KLQlwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KLQljYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJwotICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICA7OwotCi0gICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCi0gICAgICB0bXBfZGlldD1ubwotICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCi0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKLQkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCi0gICAgICB0aGVuCi0JdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCi0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0gICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0JCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwotCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OwotICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMwotICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKLQl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCi0JICB0bXBfYWRkZmxhZz0gOzsKLQludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcwotCSAgOzsKLQllc2FjCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQllc2FjCi0JYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQotICAgICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgotICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0gICAgICAgIGZpCi0KLQljYXNlICRjY19iYXNlbmFtZSBpbgotCXRjYyopCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1yZHluYW1pYycKLQkgIDs7Ci0JeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQotCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLQkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQkgIGZpCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLQlsZF9zaGxpYnM9bm8KLQljYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKLSoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgotICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQotCWxkX3NobGlicz1ubwotCWNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2Fubm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCi0JICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQotCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KLQkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgbGRfc2hsaWJzPW5vCi0JICBmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCBubyA9ICIkbGRfc2hsaWJzIjsgdGhlbgotICAgICAgcnVucGF0aF92YXI9Ci0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ci0gICAgZmkKLSAgZWxzZQotICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4MyopCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQotICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQloYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYWl4WzQtOV0qKQotICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0JIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0KLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEdOVSBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHRvIEFJWCBubS4KLQkjIFdpdGhvdXQgdGhlICItbCIgb3B0aW9uLCBvciB3aXRoIHRoZSAiLUIiIG9wdGlvbiwgQUlYIG5tIHRyZWF0cwotCSMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzCi0JIyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCi0JIyBXaGlsZSB0aGUgJ3dlYWsnIGtleXdvcmQgaXMgaWdub3JlZCBpbiB0aGUgRXhwb3J0IEZpbGUsIHdlIG5lZWQKLQkjIGl0IGluIHRoZSBJbXBvcnQgRmlsZSBmb3IgdGhlICdhaXgtc29uYW1lJyBmZWF0dXJlLCBzbyB3ZSBoYXZlCi0JIyB0byByZXBsYWNlIHRoZSAiLUIiIG9wdGlvbiB3aXRoICItUCIgZm9yIEFJWCBubS4KLQlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IGlmIChcJCAyID09ICJXIikgeyBwcmludCBcJCAzICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMyB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW15CXSpcKSQvUFwxLydcJydgIC1QQ3BnbCAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgJiYgKHN1YnN0cihcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgaGF2ZSBydW50aW1lIGxpbmtpbmcgZW5hYmxlZCwgYW5kIHVzZSBpdCBmb3IgZXhlY3V0YWJsZXMuCi0JIyBGb3Igc2hhcmVkIGxpYnJhcmllcywgd2UgZW5hYmxlL2Rpc2FibGUgcnVudGltZSBsaW5raW5nCi0JIyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGNyZWF0ZWQgLQotCSMgd2hlbiAid2l0aF9haXhfc29uYW1lLGFpeF91c2VfcnVudGltZWxpbmtpbmciIGlzOgotCSMgImFpeCxubyIgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKLQkjICJhaXgseWVzIiAgbGliLnNvICAgICAgICAgIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCi0JIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQotCSMgImJvdGgsbm8iICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzCi0JIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcwotCSMgImJvdGgseWVzIiBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKLQkjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vCi0JIyAic3ZyNCwqIiAgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcwotCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKLQljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCi0JICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgIGlmICh0ZXN0IHgtYnJ0bCA9ICJ4JGxkX2ZsYWciIHx8IHRlc3QgeC1XbCwtYnJ0bCA9ICJ4JGxkX2ZsYWciKTsgdGhlbgotCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICBicmVhawotCSAgZmkKLQkgIGRvbmUKLQkgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgotCSAgICAjIFdpdGggYWl4LXNvbmFtZT1zdnI0LCB3ZSBjcmVhdGUgdGhlIGxpYi5zby5WIHNoYXJlZCBhcmNoaXZlcyBvbmx5LAotCSAgICAjIHNvIHdlIGRvbid0IGhhdmUgbGliLmEgc2hhcmVkIGxpYnMgdG8gbGluayBvdXIgZXhlY3V0YWJsZXMuCi0JICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgotCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWJydGwiCi0JICBmaQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgYXJjaGl2ZV9jbWRzPScnCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwotICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICAgIGZpbGVfbGlzdF9zcGVjPSckd2wtZiwnCi0gICAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KLSAgICAgIGFpeCwqKSA7OyAjIHRyYWRpdGlvbmFsLCBubyBpbXBvcnQgZmlsZQotICAgICAgc3ZyNCwqIHwgKix5ZXMpICMgdXNlIGltcG9ydCBmaWxlCi0JIyBUaGUgSW1wb3J0IEZpbGUgZGVmaW5lcyB3aGF0IHRvIGhhcmRjb2RlLgotCWhhcmRjb2RlX2RpcmVjdD1ubwotCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT1ubwotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgotCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JICB0aGVuCi0JICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLQkgIDoKLQkgIGVsc2UKLQkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLQkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAotCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9Ci0JICBmaQotCSAgOzsKLQllc2FjCi0Jc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHdsLUcnCi0JZmkKLQkjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCi0JIyBzaGFyZWQgbGlicmFyeSwgb3IgdGhlIGxpbmtlciBtYXkgZXZlbnR1YWxseSBmaW5kIHNoYXJlZCBsaWJyYXJpZXMKLQkjIC93aXRoLyBJbXBvcnQgRmlsZSAtIHdlIGRvIG5vdCB3YW50IHRvIG1peCB0aGVtLgotCXNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKLQlzaGFyZWRfZmxhZ19zdnI0PSctc2hhcmVkICR3bC1HJwotICAgICAgZWxzZQotCSMgbm90IHVzaW5nIGdjYwotCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0JIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLQkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCi0JICBlbHNlCi0JICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJwotCSAgZmkKLQkgIHNoYXJlZF9mbGFnX2FpeD0nJHdsLWJNOlNSRScKLQkgIHNoYXJlZF9mbGFnX3N2cjQ9JyR3bC1HJwotCWZpCi0gICAgICBmaQotCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1iZXhwYWxsJwotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcwotICAgICAgaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCi0gICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi1lbHNlCi0gIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkgIC9eMC8gewotCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0JICAgICAgcAotCSAgfQotICAgICAgfScKLSAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICBmaQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPS91c3IvbGliOi9saWIKLSAgZmkKLQotZmkKLQotICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCi1maQotCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCi0gICAgICBlbHNlCi0JaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLQllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotCSAjIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi1lbHNlCi0gIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkgIC9eMC8gewotCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0JICAgICAgcAotCSAgfQotICAgICAgfScKLSAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICBmaQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPS91c3IvbGliOi9saWIKLSAgZmkKLQotZmkKLQotICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCi1maQotCi0JIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnPScgJHdsLWJlcm5vdG9rJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtYmVyb2snCi0JICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgZWxzZQotCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKLQkgIGZpCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZH4kTUtESVIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCi0JICAjIC1icnRsIGFmZmVjdHMgbXVsdGlwbGUgbGlua2VyIHNldHRpbmdzLCAtYmVyb2sgZG9lcyBub3QgYW5kIGlzIG92ZXJyaWRkZW4gbGF0ZXIKLQkgIGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkPSdgZnVuY19lY2hvX2FsbCAiJGNvbXBpbGVyX2ZsYWdzICIgfCAkU0VEIC1lICJzJS1icnRsXFwoWywgXVxcKSUtYmVyb2tcXDElZyJgJwotCSAgaWYgdGVzdCBzdnI0ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgotCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9leHBzeW1fY21kcyInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCi0JICBmaQotCSAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2V4cHN5bV9jbWRzIid+JENDICckc2hhcmVkX2ZsYWdfc3ZyNCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICckY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQnJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kU1RSSVAgLWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm9+KCBmdW5jX2VjaG9fYWxsICIjISAkc29uYW1lKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSI7IGlmIHRlc3Qgc2hyXzY0ID0gIiRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiIyA2NCI7IGVsc2UgZnVuY19lY2hvX2FsbCAiIyAzMiI7IGZpOyBjYXQgJGV4cG9ydF9zeW1ib2xzICkgPiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMuaW1wfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMuaW1wJwotCSAgZWxzZQotCSAgICAjIHVzZWQgYnkgLWRscHJlb3BlbiB0byBnZXQgdGhlIHN5bWJvbHMKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0iJGFyY2hpdmVfZXhwc3ltX2NtZHMiJ34kTVYgICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJG91dHB1dF9vYmpkaXInCi0JICBmaQotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iJGFyY2hpdmVfZXhwc3ltX2NtZHMiJ34kUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYnNkaVs0NV0qKQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPS1yZHluYW1pYwotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBjbCopCi0JIyBOYXRpdmUgTVNWQwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLQlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCi0JZmlsZV9saXN0X3NwZWM9J0AnCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLQlsaWJleHQ9bGliCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9LmRsbAotCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+bGlua25hbWVzPScKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCi0gICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOwotICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSAgICAgICAgICBmaX4KLSAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0gICAgICAgICAgbGlua25hbWVzPScKLQkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCi0JIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCi0JZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLQlleGNsdWRlX2V4cHN5bXM9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKLQlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0JIyBEb24ndCB1c2UgcmFubGliCi0Jb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLSAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLSAgICAgICAgICAgICouZXhlfCouRVhFKSA7OwotICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKLSAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgZXNhY34KLSAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLSAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0gICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLSAgICAgICAgICBmaScKLQk7OwotICAgICAgKikKLQkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJwotCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLQlsaWJleHQ9bGliCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9LmRsbAotCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0Jb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKLQkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLQllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLQotCi0gIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCi0gIGhhcmRjb2RlX2RpcmVjdD1ubwotICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKLSAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKLQotICBlbHNlCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKLSAgZmkKLSAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkCi0gIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgIGlmb3J0KnxuYWdmb3IqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7Ci0gICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7Ci0gIGVzYWMKLSAgaWYgdGVzdCB5ZXMgPSAiJF9sdF9kYXJfY2FuX3NoYXJlZCI7IHRoZW4KLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCi0gICAgYXJjaGl2ZV9jbWRzPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKLSAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kc3ltdXRpbCIKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgotICAgIG1vZHVsZV9leHBzeW1fY21kcz0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgotCi0gIGVsc2UKLSAgbGRfc2hsaWJzPW5vCi0gIGZpCi0KLSAgICAgIDs7Ci0KLSAgICBkZ3V4KikKLSAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubwotICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQotICAgICMgZXh0cmEgc3BhY2UpLgotICAgIGZyZWVic2QyLjIqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMi4qKQotICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJwotICAgICAgOzsKLQotICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLQloYXJkY29kZV9kaXJlY3Q9eWVzCi0JaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQloYXJkY29kZV9taW51c19MPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0KLQkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAotCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCi0JICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9fYis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9bm8KLSAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgTERGTEFHUz0iJExERkxBR1MgLWIiCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjY7IH0KLQotaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi1lbHNlCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotZmkKLQotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCp8aWE2NCopCi0JICBoYXJkY29kZV9kaXJlY3Q9bm8KLQkgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLQkgIDs7Ci0JKikKLQkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLQkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90Ci0JIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAotCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCi0JIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIHNhdmVfTERGTEFHUz0kTERGTEFHUwotCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHdsLWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bC9kZXYvbnVsbCIKLQkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi1pbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCi1lbHNlCi0gIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAgICAgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KLQlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiOyB0aGVuCi0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgJHdsLWV4cG9ydHNfZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQlmaQotCWxpbmtfYWxsX2RlcGxpYnM9bm8KLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBmaQotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgIGluaGVyaXRfcnBhdGg9eWVzCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICAgICAgOzsKLQotICAgIGxpbnV4KikKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICB0Y2MqKQotCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCi0JbGRfc2hsaWJzPXllcwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIDs7Ci0KLSAgICAqbnRvKiB8ICpxbngqKQotICAgICAgOzsKLQotICAgIG9wZW5ic2QqIHwgYml0cmlnKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JaGFyZGNvZGVfZGlyZWN0PXllcwotCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLQloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGgsJGxpYmRpcicKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCi0JZWxzZQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGgsJGxpYmRpcicKLQlmaQotICAgICAgZWxzZQotCWxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICBzaHJleHRfY21kcz0uZGxsCi0gICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQlwcmVmaXhfY21kcz0iJFNFRCJ+Ci0JaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCi0JICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKLQlmaX4KLQlwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KLQljYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0gICAgICA7OwotCi0gICAgb3NmMyopCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICA7OwotCi0gICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgotICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1pbnB1dCAkd2wkbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKLQotCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0Jd2xhcmM9JyR3bCcKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bC16ICR7d2x9dGV4dCAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLSAgICAgIGVsc2UKLQljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLQkqIkNvbXBpbGVycyA1LjAiKikKLQkgIHdsYXJjPScnCi0JICBhcmNoaXZlX2NtZHM9JyRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0JICA7OwotCSopCi0JICB3bGFyYz0nJHdsJwotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgJyR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0JIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3Qgc2VxdWVudCA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCi0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwotCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KLQk7OwotCXNpZW1lbnMpCi0JICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKLQkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KLQkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIHJlbG9hZF9jbWRzPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLQkgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgICA7OwotCW1vdG9yb2xhKQotCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQuMyopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nLUJleHBvcnQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcwotCWxkX3NobGlicz15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPSckd2wteix0ZXh0JwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR3bC16LHRleHQnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHdsLXosbm9kZWZzJwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1SLCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwotICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCBzbmkgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUJsYXJnZWR5bnN5bScKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGZpCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKLSRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KLXRlc3Qgbm8gPSAiJGxkX3NobGlicyIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi13aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCi0KLSAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCi0gICAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgJFJNIGNvbmZ0ZXN0KgotCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0JaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotCSAgc29uYW1lPWNvbmZ0ZXN0Ci0JICBsaWI9Y29uZnRlc3QKLQkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotCSAgZGVwbGlicz0KLQkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCi0JICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKLQkgIGNvbXBpbGVyX2ZsYWdzPS12Ci0JICBsaW5rZXJfZmxhZ3M9LXYKLQkgIHZlcnN0cmluZz0KLQkgIG91dHB1dF9vYmpkaXI9LgotCSAgbGlibmFtZT1jb25mdGVzdAotCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLQkgIHRoZW4KLQkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KLQkgIGVsc2UKLQkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCi0JICBmaQotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLQllbHNlCi0JICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLQlmaQotCSRSTSBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9Ci0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovLC9MUi8nIDs7Ci0gICAgKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LycgOzsKLSAgZXNhYwotICBjYXNlICRob3N0X29zIGluCi0gICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PVwoW0EtWmEtel06XCl8XDF8ZycgOzsKLSAgICAqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PS98L3xnJyA7OwotICBlc2FjCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCi0gIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KLSAgKlw7KikKLSAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCi0gICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCi0gICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCi0gICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAotICAgIDs7Ci0gICopCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgOzsKLSAgZXNhYwotICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAotICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4uLgotICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KLSAgbHRfbXVsdGlfb3NfZGlyPS9gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCi0gICMgLi4uYnV0IGlmIHNvbWUgcGF0aCBjb21wb25lbnQgYWxyZWFkeSBlbmRzIHdpdGggdGhlIG11bHRpbGliIGRpciB3ZSBhc3N1bWUKLSAgIyB0aGF0IGFsbCBpcyBmaW5lIGFuZCB0cnVzdCAtcHJpbnQtc2VhcmNoLWRpcnMgYXMgaXMgKEdDQyA0LjI/IG9yIG5ld2VyKS4KLSAgY2FzZSAiJGx0X211bHRpX29zX2RpcjsgJGx0X3NlYXJjaF9wYXRoX3NwZWMgIiBpbgotICAiLzsgIiogfCAiLy47ICIqIHwgIi8uLzsgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIvICIqKQotICAgIGx0X211bHRpX29zX2Rpcj0KLSAgICA7OwotICBlc2FjCi0gIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KLSAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgotICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIgotICAgIGVsaWYgdGVzdCAtbiAiJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAotCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgotICAgIGZpCi0gIGRvbmUKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJwotQkVHSU4ge1JTID0gIiAiOyBGUyA9ICIvfFxuIjt9IHsKLSAgbHRfZm9vID0gIiI7Ci0gIGx0X2NvdW50ID0gMDsKLSAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKLSAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7Ci0gICAgICBpZiAoJGx0X2kgPT0gIi4uIikgewotICAgICAgICBsdF9jb3VudCsrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKLSAgICAgICAgICBsdF9mb28gPSAiLyIgJGx0X2kgbHRfZm9vOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGx0X2NvdW50LS07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW2x0X2Zvb10rKzsgfQotICBpZiAobHRfZnJlcVtsdF9mb29dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Ci19J2AKLSAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCi0gICMgZm9yIHRoZXNlIGhvc3RzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCi0gICAgICAkU0VEICdzfC9cKFtBLVphLXpdOlwpfFwxfGcnYCA7OwotICBlc2FjCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKLWVsc2UKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotZmkKLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPS5zbwotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLQotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUuYScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0KLSAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICA7OwotCi1haXhbNC05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGVsc2UKLSAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCi0gICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgJyMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiAnLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgotICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQotICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKLQkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJENDIC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgVXNpbmcgSW1wb3J0IEZpbGVzIGFzIGFyY2hpdmUgbWVtYmVycywgaXQgaXMgcG9zc2libGUgdG8gc3VwcG9ydAotICAgICMgZmlsZW5hbWUtYmFzZWQgdmVyc2lvbmluZyBvZiBzaGFyZWQgbGlicmFyeSBhcmNoaXZlcyBvbiBBSVguIFdoaWxlCi0gICAgIyB0aGlzIHdvdWxkIHdvcmsgZm9yIGJvdGggd2l0aCBhbmQgd2l0aG91dCBydW50aW1lIGxpbmtpbmcsIGl0IHdpbGwKLSAgICAjIHByZXZlbnQgc3RhdGljIGxpbmtpbmcgb2Ygc3VjaCBhcmNoaXZlcy4gU28gd2UgZG8gZmlsZW5hbWUtYmFzZWQKLSAgICAjIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgd2l0aCAuc28gZXh0ZW5zaW9uIG9ubHksIHdoaWNoIGlzIHVzZWQKLSAgICAjIHdoZW4gYm90aCBydW50aW1lIGxpbmtpbmcgYW5kIHNoYXJlZCBsaW5raW5nIGlzIGVuYWJsZWQuCi0gICAgIyBVbmZvcnR1bmF0ZWx5LCBydW50aW1lIGxpbmtpbmcgbWF5IGltcGFjdCBwZXJmb3JtYW5jZSwgc28gd2UgZG8KLSAgICAjIG5vdCB3YW50IHRoaXMgdG8gYmUgdGhlIGRlZmF1bHQgZXZlbnR1YWxseS4gQWxzbywgd2UgdXNlIHRoZQotICAgICMgdmVyc2lvbmVkIC5zbyBsaWJzIGZvciBleGVjdXRhYmxlcyBvbmx5IGlmIHRoZXJlIGlzIHRoZSAtYnJ0bAotICAgICMgbGlua2VyIGZsYWcgaW4gTERGTEFHUyBhcyB3ZWxsLCBvciAtLXdpdGgtYWl4LXNvbmFtZT1zdnI0IG9ubHkuCi0gICAgIyBUbyBhbGxvdyBmb3IgZmlsZW5hbWUtYmFzZWQgdmVyc2lvbmluZyBzdXBwb3J0LCB3ZSBuZWVkIHRvIGNyZWF0ZQotICAgICMgbGliTkFNRS5zby5WIGFzIGFuIGFyY2hpdmUgZmlsZSwgY29udGFpbmluZzoKLSAgICAjICopIGFuIEltcG9ydCBGaWxlLCByZWZlcnJpbmcgdG8gdGhlIHZlcnNpb25lZCBmaWxlbmFtZSBvZiB0aGUKLSAgICAjICAgIGFyY2hpdmUgYXMgd2VsbCBhcyB0aGUgc2hhcmVkIGFyY2hpdmUgbWVtYmVyLCB0ZWxsaW5nIHRoZQotICAgICMgICAgYml0d2lkdGggKDMyIG9yIDY0KSBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGFuZCBwcm92aWRpbmcgdGhlCi0gICAgIyAgICBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMgb2YgdGhhdCBzaGFyZWQgb2JqZWN0LCBldmVudHVhbGx5Ci0gICAgIyAgICBkZWNvcmF0ZWQgd2l0aCB0aGUgJ3dlYWsnIGtleXdvcmQKLSAgICAjICopIHRoZSBzaGFyZWQgb2JqZWN0IHdpdGggdGhlIEZfTE9BRE9OTFkgZmxhZyBzZXQsIHRvIHJlYWxseSBhdm9pZAotICAgICMgICAgaXQgYmVpbmcgc2VlbiBieSB0aGUgbGlua2VyLgotICAgICMgQXQgcnVuIHRpbWUgd2UgYmV0dGVyIHVzZSB0aGUgcmVhbCBmaWxlIHJhdGhlciB0aGFuIGFub3RoZXIgc3ltbGluaywKLSAgICAjIGJ1dCBmb3IgbGluayB0aW1lIHdlIGNyZWF0ZSB0aGUgc3ltbGluayBsaWJOQU1FLnNvIC0+IGxpYk5BTUUuc28uVgotCi0gICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbm5vdCBoYXJkY29kZSBjb3JyZWN0Ci0gICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwotICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgYWl4LHllcykgIyB0cmFkaXRpb25hbCBsaWJ0b29sCi0gICAgICBkeW5hbWljX2xpbmtlcj0nQUlYIHVudmVyc2lvbmFibGUgbGliLnNvJwotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgICAgOzsKLSAgICBhaXgsbm8pICMgdHJhZGl0aW9uYWwgQUlYIG9ubHkKLSAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggbGliLmEobGliLnNvLlYpJwotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICA7OwotICAgIHN2cjQsKikgIyBmdWxsIHN2cjQgb25seQotICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgICAgIyBXZSBkbyBub3Qgc3BlY2lmeSBhIHBhdGggaW4gSW1wb3J0IEZpbGVzLCBzbyBMSUJQQVRIIGZpcmVzLgotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgICAgOzsKLSAgICAqLHllcykgIyBib3RoLCBwcmVmZXIgc3ZyNAotICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyksIGxpYi5hKGxpYi5zby5WKSIKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLmEgbmVlZHMgZXh0cmEgaGFuZGxpbmcKLSAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9IiRyZWFsbmFtZSJ+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRsaW5rbmFtZSJ+JGluc3RhbGxfc2hhcmVkX3Byb2cgIiRkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0In50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJwotICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdmb3IgbiBpbiAkbGlicmFyeV9uYW1lcyAkb2xkX2xpYnJhcnk7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRuIn50ZXN0ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiA9ICIkbiIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCi0gICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgICA7OwotICAgICosbm8pICMgYm90aCwgcHJlZmVyIGFpeAotICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuYShsaWIuc28uViksIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSIKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgICAgIyB1bnByZWZlcnJlZCBzaGFyZWRsaWIgbGliTkFNRS5zby5WIGFuZCBzeW1saW5rIGxpYk5BTUUuc28gbmVlZCBleHRyYSBoYW5kbGluZwotICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAteiAiJGRsbmFtZSIgfHwgJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kZGxuYW1lICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAteiAiJHRzdHJpcG1lIiB8fCB0ZXN0IC16ICIkc3RyaXBsaWIiIHx8ICRzdHJpcGxpYiAkZGVzdGRpci8kZGxuYW1lfnRlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9JHJlYWxuYW1lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRsaW5rbmFtZSJ+KGNkICIkZGVzdGRpciIgJiYgJExOX1MgLWYgJGRsbmFtZSAkZnVuY19zdHJpcG5hbWVfcmVzdWx0LnNvKScKLSAgICAgIHBvc3R1bmluc3RhbGxfY21kcz0ndGVzdCAteiAiJGRsbmFtZSIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUifmZvciBuIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLmEiICIkbiJ+ZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28iJwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBjYXNlICRob3N0X2NwdSBpbgotICBwb3dlcnBjKQotICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KLSAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIDs7Ci0gIG02OGspCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0uZGxsCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCi0gIHllcywqKQotICAgICMgZ2NjCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgotICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKLSAgICAgIGZpJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRSTSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKLQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSIKLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgY2VnY2MqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICA7OwotCi0gICosY2wqKQotICAgICMgTmF0aXZlIE1TVkMKLSAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwubGliJwotCi0gICAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgICBtaW5ndyopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ci0gICAgICBsdF9zYXZlX2lmcz0kSUZTCi0gICAgICBJRlM9JzsnCi0gICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCi0gICAgICBkbwotICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCi0gICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAotICAgICAgOzsKLSAgICBjeWd3aW4qKQotICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQotICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0gICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICA7OwotICAgICopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JExJQgotICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKLSAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJFJNIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCi0gICAgOzsKLQotICAqKQotICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0ICRsaWJuYW1lLmxpYicKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAotICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLQotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbMjNdLiopIG9iamZvcm1hdD1hb3V0IDs7Ci0gICAgKikgb2JqZm9ybWF0PWVsZiA7OwotICAgIGVzYWMKLSAgZmkKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAotICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KLSAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwotICAgICAgbmVlZF92ZXJzaW9uPXllcwotICAgICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X29zIGluCi0gIGZyZWVic2QyLiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotaGFpa3UqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICBpZiB0ZXN0IDMyID0gIiRIUFVYX0lBNjRfTU9ERSI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliL2hwdXgzMgotICAgIGVsc2UKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKLSAgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliL2hwdXg2NAotICAgIGZpCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICA7OwotICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKLSAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQotICA7OwotCi1pbnRlcml4WzMtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWxpbnV4KmFuZHJvaWQqKQotICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCi0gIGZpbmlzaF9jbWRzPQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJwotICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCi0gICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAotICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKLSAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCi0JIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLWZpCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLSAgICBsaWJkaXI9JHNhdmVfbGliZGlyCi0KLWZpCi0KLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICAjIElkZWFsbHksIHdlIGNvdWxkIHVzZSBsZGNvbmZpZyB0byByZXBvcnQgKmFsbCogZGlyZWN0b3JlcyB3aGljaCBhcmUKLSAgIyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLCBob3dldmVyIHRoaXMgaXMgc3RpbGwgbm90IHBvc3NpYmxlLiAgQXNpZGUgZnJvbSBub3QKLSAgIyBiZWluZyBjZXJ0YWluIC9zYmluL2xkY29uZmlnIGlzIGF2YWlsYWJsZSwgY29tbWFuZAotICAjICdsZGNvbmZpZyAtTiAtWCAtdiB8IGdyZXAgXi8nIG9uIDY0Yml0IEZlZG9yYSBkb2VzIG5vdCByZXBvcnQgL3Vzci9saWI2NCwKLSAgIyBldmVuIHRob3VnaCBpdCBpcyBzZWFyY2hlZCBhdCBydW4tdGltZS4gIFRyeSB0byBkbyB0aGUgYmVzdCBndWVzcyBieQotICAjIGFwcGVuZGluZyBsZC5zby5jb25mIGNvbnRlbnRzIChhbmQgaW5jbHVkZXMpIHRvIHRoZSBzZWFyY2ggcGF0aC4KLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2RlbGYqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIDs7Ci0KLW5ldGJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwotICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwotICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi0qbnRvKiB8ICpxbngqKQotICB2ZXJzaW9uX3R5cGU9cW54Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCi0gIDs7Ci0KLW9wZW5ic2QqIHwgYml0cmlnKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KLSAgICBuZWVkX3ZlcnNpb249bm8KLSAgZWxzZQotICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgZmkKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPS5kbGwKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIE9TLzIgY2FuIG9ubHkgbG9hZCBhIERMTCB3aXRoIGEgYmFzZSBuYW1lIG9mIDggY2hhcmFjdGVycyBvciBsZXNzLgotICBzb25hbWVfc3BlYz0nYHRlc3QgLW4gIiRvczJkbGxuYW1lIiAmJiBsaWJuYW1lPSIkb3MyZGxsbmFtZSI7Ci0gICAgdj0kKCRFQ0hPICRyZWxlYXNlJHZlcnN1ZmZpeCB8IHRyIC1kIC4tKTsKLSAgICBuPSQoJEVDSE8gJGxpYm5hbWUgfCBjdXQgLWIgLSQoKDggLSAkeyN2fSkpIHwgdHIgLiBfKTsKLSAgICAkRUNITyAkbiR2YCRzaGFyZWRfZXh0JwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1fZGxsLiRsaWJleHQnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1CRUdJTkxJQlBBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KLSAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgotICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCi0gICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKLSAgICBmaScKLSAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAkUk0gXCRkbHBhdGgnCi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPXNjbwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdHBmKikKLSAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLSRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQotdGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotCi1pZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotZmkKLQotaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLWZpCi0KLSMgcmVtZW1iZXIgdW5hdWdtZW50ZWQgc3lzX2xpYl9kbHNlYXJjaF9wYXRoIGNvbnRlbnQgZm9yIGxpYnRvb2wgc2NyaXB0IGRlY2xzLi4uCi1jb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIC4uLiBidXQgaXQgbmVlZHMgTFRfU1lTX0xJQlJBUllfUEFUSCBtdW5naW5nIGZvciBvdGhlciBjb25maWd1cmUtdGltZSBjb2RlCi1mdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAiJExUX1NZU19MSUJSQVJZX1BBVEgiCi0KLSMgdG8gYmUgdXNlZCBhcyBkZWZhdWx0IExUX1NZU19MSUJSQVJZX1BBVEggdmFsdWUgaW4gZ2VuZXJhdGVkIGxpYnRvb2wKLWNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9JExUX1NZU19MSUJSQVJZX1BBVEgKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQotaGFyZGNvZGVfYWN0aW9uPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8Ci0gICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8Ci0gICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCBubyAhPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgJiYKLSAgICAgdGVzdCBubyAhPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIGhhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQotJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQotCi1pZiB0ZXN0IHJlbGluayA9ICIkaGFyZGNvZGVfYWN0aW9uIiB8fAotICAgdGVzdCB5ZXMgPSAiJGluaGVyaXRfcnBhdGgiOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8Ci0gICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotCi0KLQotCi0KLQotICBpZiB0ZXN0IHllcyAhPSAiJGVuYWJsZV9kbG9wZW4iOyB0aGVuCi0gIGVuYWJsZV9kbG9wZW49dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KLWVsc2UKLSAgbHRfY3ZfZGxvcGVuPW5vCi0gIGx0X2N2X2Rsb3Blbl9saWJzPQotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPWxvYWRfYWRkX29uCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0gICAgOzsKLQotICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBsdF9jdl9kbG9wZW49TG9hZExpYnJhcnkKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICA7OwotCi0gIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgIDs7Ci0KLSAgZGFyd2luKikKLSAgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZGxvcGVuICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZGxvcGVuICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGwKLWVsc2UKLQotICAgIGx0X2N2X2Rsb3Blbj1keWxkCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0KLWZpCi0KLSAgICA7OwotCi0gIHRwZiopCi0gICAgIyBEb24ndCB0cnkgdG8gcnVuIGFueSBsaW5rIHRlc3RzIGZvciBUUEYuICBXZSBrbm93IGl0J3MgaW1wb3NzaWJsZQotICAgICMgYmVjYXVzZSBUUEYgaXMgYSBjcm9zcy1jb21waWxlciwgYW5kIHdlIGtub3cgaG93IHdlIG9wZW4gRFNPcy4KLSAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KLSAgICA7OwotCi0gICopCi0gICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2hsX2xvYWQiICJhY19jdl9mdW5jX3NobF9sb2FkIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49c2hsX2xvYWQKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGRsZCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgc2hsX2xvYWQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBzaGxfbG9hZCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfZGxkX3NobF9sb2FkPXllcwotZWxzZQotICBhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPXNobF9sb2FkIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkCi1lbHNlCi0gIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPWRsb3BlbgotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZGwgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGRsb3BlbiAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGRsb3BlbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfZGxfZGxvcGVuPXllcwotZWxzZQotICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxzdmxkICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBkbG9wZW4gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBkbG9wZW4gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPXllcwotZWxzZQotICBhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sc3ZsZAotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX2RsZF9kbGRfbGluays6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZGxkICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBkbGRfbGluayAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGRsZF9saW5rICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ZGxkX2xpbmsgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGQKLWZpCi0KLQotZmkKLQotCi1maQotCi0KLWZpCi0KLQotZmkKLQotCi1maQotCi0gICAgOzsKLSAgZXNhYwotCi0gIGlmIHRlc3Qgbm8gPSAiJGx0X2N2X2Rsb3BlbiI7IHRoZW4KLSAgICBlbmFibGVfZGxvcGVuPW5vCi0gIGVsc2UKLSAgICBlbmFibGVfZGxvcGVuPXllcwotICBmaQotCi0gIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgotICBkbG9wZW4pCi0gICAgc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgICB0ZXN0IHllcyA9ICIkYWNfY3ZfaGVhZGVyX2RsZmNuX2giICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCi0KLSAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKLSAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCi0KLSAgICBzYXZlX0xJQlM9JExJQlMKLSAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2Rsb3Blbl9zZWxmKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgCSAgaWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgotICBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcwotZWxzZQotICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLQotI2lmIEhBVkVfRExGQ05fSAotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBSVExEX0dMT0JBTAotIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAotI2Vsc2UKLSMgIGlmZGVmIERMX0dMT0JBTAotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAotIyAgZWxzZQotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQotICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLwotI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCi0jICBpZmRlZiBSVExEX0xBWlkKLSMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQotIyAgZWxzZQotIyAgICBpZmRlZiBETF9MQVpZCi0jICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKLSMgICAgZWxzZQotIyAgICAgIGlmZGVmIFJUTERfTk9XCi0jICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmZGVmIERMX05PVwotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBXaGVuIC1mdmlzaWJpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAotICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwotI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKLWludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLSNlbmRpZgotCi1pbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KLWludCBtYWluICgpCi17Ci0gIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKLQotICBpZiAoc2VsZikKLSAgICB7Ci0gICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKLSAgICAgIGVsc2UKLSAgICAgICAgewotCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOwotICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7Ci0JfQotICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCi0gICAgfQotICBlbHNlCi0gICAgcHV0cyAoZGxlcnJvciAoKSk7Ci0KLSAgcmV0dXJuIHN0YXR1czsKLX0KLV9MVF9FT0YKLSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICJjb25mdGVzdCRhY19leGVleHQiIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCi0gICAgbHRfc3RhdHVzPSQ/Ci0gICAgY2FzZSB4JGx0X3N0YXR1cyBpbgotICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7Ci0gICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OwotICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmPW5vIDs7Ci0gICAgZXNhYwotICBlbHNlIDoKLSAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAotICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCi0gIGZpCi1maQotcm0gLWZyIGNvbmZ0ZXN0KgotCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQotCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2Rsb3Blbl9zZWxmIjsgdGhlbgotICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIAkgIGlmIHRlc3QgeWVzID0gIiRjcm9zc19jb21waWxpbmciOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCi1lbHNlCi0gIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLSNpbmNsdWRlICJjb25mZGVmcy5oIgotCi0jaWYgSEFWRV9ETEZDTl9ICi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lmZGVmIFJUTERfR0xPQkFMCi0jICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCi0jZWxzZQotIyAgaWZkZWYgRExfR0xPQkFMCi0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCi0jICBlbHNlCi0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCi0gICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCi0jaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKLSMgIGlmZGVmIFJUTERfTEFaWQotIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCi0jICBlbHNlCi0jICAgIGlmZGVmIERMX0xBWlkKLSMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQotIyAgICBlbHNlCi0jICAgICAgaWZkZWYgUlRMRF9OT1cKLSMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCi0jICAgICAgZWxzZQotIyAgICAgICAgaWZkZWYgRExfTk9XCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVwotIyAgICAgICAgZWxzZQotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCi0jICAgICAgICBlbmRpZgotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFdoZW4gLWZ2aXNpYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCi0gICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0jaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQotaW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotI2VuZGlmCi0KLWludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQotaW50IG1haW4gKCkKLXsKLSAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci0gIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOwotCi0gIGlmIChzZWxmKQotICAgIHsKLSAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOwotICAgICAgZWxzZQotICAgICAgICB7Ci0JICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7Ci0gICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKLQl9Ci0gICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KLSAgICB9Ci0gIGVsc2UKLSAgICBwdXRzIChkbGVycm9yICgpKTsKLQotICByZXR1cm4gc3RhdHVzOwotfQotX0xUX0VPRgotICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKLSAgICBsdF9zdGF0dXM9JD8KLSAgICBjYXNlIHgkbHRfc3RhdHVzIGluCi0gICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7Ci0gICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKLSAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8gOzsKLSAgICBlc2FjCi0gIGVsc2UgOgotICAgICMgY29tcGlsYXRpb24gZmFpbGVkCi0gICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vCi0gIGZpCi1maQotcm0gLWZyIGNvbmZ0ZXN0KgotCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9Ci0gICAgZmkKLQotICAgIENQUEZMQUdTPSRzYXZlX0NQUEZMQUdTCi0gICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0gICAgTElCUz0kc2F2ZV9MSUJTCi0gICAgOzsKLSAgZXNhYwotCi0gIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OwotICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OwotICBlc2FjCi1maQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLXN0cmlwbGliPQotb2xkX3N0cmlwbGliPQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICIgPiY2OyB9Ci1pZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgotICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgotICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLWVsc2UKLSMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAotICBjYXNlICRob3N0X29zIGluCi0gIGRhcndpbiopCi0gICAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKLSAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLSAgICBlbHNlCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICBmaQotICAgIDs7Ci0gICopCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgOzsKLSAgZXNhYwotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgIyBSZXBvcnQgd2hhdCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1Ci0kYXNfZWNobyAiJGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQotICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0gICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwotICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gICAgZmkKLSAgICA7OwotCi0gIGFpeFs0LTldKikKLSAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KLSAgICAgIGNhc2UgJGVuYWJsZV9zaGFyZWQsJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgotICAgICAgeWVzLGFpeCx5ZXMpIDs7CQkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBmaWxlIG9ubHkKLSAgICAgIHllcyxzdnI0LCopIDs7CQkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBhcmNoaXZlIG1lbWJlciBvbmx5Ci0gICAgICB5ZXMsKikgZW5hYmxlX3N0YXRpYz1ubyA7OwkjIHNoYXJlZCBvYmplY3QgaW4gbGliLmEgYXJjaGl2ZSBhcyB3ZWxsCi0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1Ci0kYXNfZWNobyAiJGVuYWJsZV9zaGFyZWQiID4mNjsgfQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQotICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLSAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1Ci0kYXNfZWNobyAiJGVuYWJsZV9zdGF0aWMiID4mNjsgfQotCi0KLQotCi1maQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1DQz0kbHRfc2F2ZV9DQwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKLQotCi0KLQotIyBPbmx5IGV4cGFuZCBvbmNlOgotCi0KLQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWF1dG9jb25mIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9hdXRvY29uZitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfYXV0b2NvbmY7Ci0gICAgICB1bnNldCBBVVRPQ09ORgotCi1BVVRPQ09ORj0ke0FVVE9DT05GLSIke2FtX21pc3NpbmdfcnVufSR7d2l0aHZhbH0ifQotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRBVVRPQ09ORiBhcyBhdXRvY29uZiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyAkQVVUT0NPTkYgYXMgYXV0b2NvbmYiID4mNjt9Ci0KLWZpCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWF1dG9oZWFkZXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2F1dG9oZWFkZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2F1dG9oZWFkZXI7Ci0gICAgICB1bnNldCBBVVRPSEVBREVSCi0KLUFVVE9IRUFERVI9JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufSR7d2l0aHZhbH0ifQotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRBVVRPSEVBREVSIGFzIGF1dG9oZWFkZXIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogVXNpbmcgJEFVVE9IRUFERVIgYXMgYXV0b2hlYWRlciIgPiY2O30KLQotZmkKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXV0b21ha2Ugd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2F1dG9tYWtlK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9hdXRvbWFrZTsKLSAgICAgIHVuc2V0IEFVVE9NQUtFCi0KLUFVVE9NQUtFPSR7QVVUT01BS0UtIiR7YW1fbWlzc2luZ19ydW59JHt3aXRodmFsfSJ9Ci0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgJEFVVE9NQUtFIGFzIGF1dG9tYWtlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRBVVRPTUFLRSBhcyBhdXRvbWFrZSIgPiY2O30KLQotZmkKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWNsb2NhbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYWNsb2NhbCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfYWNsb2NhbDsKLSAgICAgIHVuc2V0IEFDTE9DQUwKLQotQUNMT0NBTD0ke0FDTE9DQUwtIiR7YW1fbWlzc2luZ19ydW59JHt3aXRodmFsfSJ9Ci0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgJEFDTE9DQUwgYXMgYWNsb2NhbCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyAkQUNMT0NBTCBhcyBhY2xvY2FsIiA+JjY7fQotCi1maQotCi0KLQotQUNMT0NBTF9BTUZMQUdTPSItSSBtNCAtSSBjb21tb24vbTQiCi0KLQotCi0KLW1rZGlyX3A9IiRNS0RJUl9QIgotY2FzZSAkbWtkaXJfcCBpbgotICBbXFwvJF0qIHwgPzpbXFwvXSopIDs7Ci0gICovKikgbWtkaXJfcD0iXCQodG9wX2J1aWxkZGlyKS8kbWtkaXJfcCIgOzsKLWVzYWMKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJlcXVlc3RlZC4uLiAiID4mNjsgfQotICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbmxzK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfbmxzOyBVU0VfTkxTPSRlbmFibGV2YWwKLWVsc2UKLSAgVVNFX05MUz15ZXMKLWZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKLSRhc19lY2hvICIkVVNFX05MUyIgPiY2OyB9Ci0KLQotCi0KLSAgICAgIEdFVFRFWFRfTUFDUk9fVkVSU0lPTj0wLjE3Ci0KLQotCi0KLSMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi0KLSMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAotIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KLWNhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKLSMhIC9iaW4vc2gKLWV4aXQgMAotX0FTRU9GCi1jaG1vZCAreCBjb25mJCQuZmlsZQotaWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgotZWxzZQotICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCi1maQotcm0gLWYgY29uZiQkLmZpbGUKLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAiJE1TR0ZNVCIgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gICAgYWNfY3ZfcGF0aF9NU0dGTVQ9IiRNU0dGTVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICAgIDs7Ci0gICopCi0gICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgotICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mNQotICAgICAgICAgIGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+JjUgMj4mMSAmJgotICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KLSAgICAgICAgICAgIGFjX2N2X3BhdGhfTVNHRk1UPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICAgICAgICAgYnJlYWsgMgotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBkb25lCi0gICAgZG9uZQotICAgIElGUz0iJGFjX3NhdmVfSUZTIgotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9NU0dGTVQiICYmIGFjX2N2X3BhdGhfTVNHRk1UPSI6IgotICAgIDs7Ci1lc2FjCi1maQotTVNHRk1UPSIkYWNfY3ZfcGF0aF9NU0dGTVQiCi1pZiB0ZXN0ICIkTVNHRk1UIiAhPSAiOiI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNU0dGTVQiID4mNQotJGFzX2VjaG8gIiRNU0dGTVQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnbXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBnbXNnZm10OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9HTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkR01TR0ZNVCBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkR01TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfR01TR0ZNVD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HTVNHRk1UIiAmJiBhY19jdl9wYXRoX0dNU0dGTVQ9IiRNU0dGTVQiCi0gIDs7Ci1lc2FjCi1maQotR01TR0ZNVD0kYWNfY3ZfcGF0aF9HTVNHRk1UCi1pZiB0ZXN0IC1uICIkR01TR0ZNVCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTVNHRk1UIiA+JjUKLSRhc19lY2hvICIkR01TR0ZNVCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0KLSAgICBjYXNlIGAkTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KLSAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIE1TR0ZNVF8wMTU9OiA7OwotICAgICopIE1TR0ZNVF8wMTU9JE1TR0ZNVCA7OwotICBlc2FjCi0KLSAgY2FzZSBgJEdNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgotICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgR01TR0ZNVF8wMTU9OiA7OwotICAgICopIEdNU0dGTVRfMDE1PSRHTVNHRk1UIDs7Ci0gIGVzYWMKLQotCi0KLSMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi0KLSMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAotIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KLWNhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKLSMhIC9iaW4vc2gKLWV4aXQgMAotX0FTRU9GCi1jaG1vZCAreCBjb25mJCQuZmlsZQotaWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgotZWxzZQotICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCi1maQotcm0gLWYgY29uZiQkLmZpbGUKLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX1hHRVRURVhUKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAiJFhHRVRURVhUIiBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgICBhY19jdl9wYXRoX1hHRVRURVhUPSIkWEdFVFRFWFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICAgIDs7Ci0gICopCi0gICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgotICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mNQotICAgICAgICAgIGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPiY1IDI+JjEgJiYKLSAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgotICAgICAgICAgICAgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAgICAgICAgIGJyZWFrIDIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICBJRlM9IiRhY19zYXZlX0lGUyIKLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhfWEdFVFRFWFQiICYmIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IjoiCi0gICAgOzsKLWVzYWMKLWZpCi1YR0VUVEVYVD0iJGFjX2N2X3BhdGhfWEdFVFRFWFQiCi1pZiB0ZXN0ICIkWEdFVFRFWFQiICE9ICI6IjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKLSRhc19lY2hvICIkWEdFVFRFWFQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgICBybSAtZiBtZXNzYWdlcy5wbwotCi0gICAgY2FzZSBgJFhHRVRURVhUIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KLSAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIFhHRVRURVhUXzAxNT06IDs7Ci0gICAgKikgWEdFVFRFWFRfMDE1PSRYR0VUVEVYVCA7OwotICBlc2FjCi0KLQotCi0jIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0jIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKLSMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCi1jYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCi0jISAvYmluL3NoCi1leGl0IDAKLV9BU0VPRgotY2htb2QgK3ggY29uZiQkLmZpbGUKLWlmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKLWVsc2UKLSAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgotZmkKLXJtIC1mIGNvbmYkJC5maWxlCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnbWVyZ2UiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG1zZ21lcmdlOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9NU0dNRVJHRSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgIiRNU0dNRVJHRSIgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gICAgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iJE1TR01FUkdFIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgICA7OwotICAqKQotICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgICBJRlM9IiRhY19zYXZlX0lGUyIKLSAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICAgICAgICBlY2hvICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3JkLi4uIiA+JjUKLSAgICAgICAgICBpZiAkYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPiY1IDI+JjE7IHRoZW4KLSAgICAgICAgICAgIGFjX2N2X3BhdGhfTVNHTUVSR0U9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgICAgICAgICBicmVhayAyCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgIGRvbmUKLSAgICBkb25lCi0gICAgSUZTPSIkYWNfc2F2ZV9JRlMiCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX01TR01FUkdFIiAmJiBhY19jdl9wYXRoX01TR01FUkdFPSI6IgotICAgIDs7Ci1lc2FjCi1maQotTVNHTUVSR0U9IiRhY19jdl9wYXRoX01TR01FUkdFIgotaWYgdGVzdCAiJE1TR01FUkdFIiAhPSAiOiI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNU0dNRVJHRSIgPiY1Ci0kYXNfZWNobyAiJE1TR01FUkdFIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICAgICAgdGVzdCAtbiAiJGxvY2FsZWRpciIgfHwgbG9jYWxlZGlyPScke2RhdGFkaXJ9L2xvY2FsZScKLQotCi0gICAgdGVzdCAtbiAiJHtYR0VUVEVYVF9FWFRSQV9PUFRJT05TK3NldH0iIHx8IFhHRVRURVhUX0VYVFJBX09QVElPTlM9Ci0KLQotICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgcG8tZGlyZWN0b3JpZXMiCi0KLQotCi0gICAgICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCi0gICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgotICBlbHNlCi0gICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKLSAgZmkKLSAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCi0gICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCi0gIGVsc2UKLSAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZmkKLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKLWVsc2UKLSAgd2l0aF9nbnVfbGQ9bm8KLWZpCi0KLSMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi1hY19wcm9nPWxkCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSBHQ0MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgR0NDLi4uICIgPiY2OyB9Ci0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKQotICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKLSAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCi0gICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCi0gICAgICBkb25lCi0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKLSAgICAgIDs7Ci0gICIiKQotICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgotICAgIGFjX3Byb2c9bGQKLSAgICA7OwotICAqKQotICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICB3aXRoX2dudV9sZD11bmtub3duCi0gICAgOzsKLSAgZXNhYwotZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KLWZpCi1pZiAke2FjbF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhfU0VQQVJBVE9SLTp9IgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKLSAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGFjX3NhdmVfaWZzIgotZWxzZQotICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpCi1maQotCi1MRD0iJGFjbF9jdl9wYXRoX0xEIgotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKLSRhc19lY2hvICIkTEQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi10ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KLWlmICR7YWNsX2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OwotKikKLSAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7Ci1lc2FjCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY2xfY3ZfcHJvZ19nbnVfbGQiID4mNQotJGFzX2VjaG8gIiRhY2xfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQotd2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAotCi0KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW4iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbi4uLiAiID4mNjsgfQotaWYgJHthY2xfY3ZfcnBhdGgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi0gICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAotICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAotICAgIC4gLi9jb25mdGVzdC5zaAotICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKLSAgICBhY2xfY3ZfcnBhdGg9ZG9uZQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY2xfY3ZfcnBhdGgiID4mNQotJGFzX2VjaG8gIiRhY2xfY3ZfcnBhdGgiID4mNjsgfQotICB3bD0iJGFjbF9jdl93bCIKLSAgYWNsX2xpYmV4dD0iJGFjbF9jdl9saWJleHQiCi0gIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKLSAgYWNsX2xpYm5hbWVfc3BlYz0iJGFjbF9jdl9saWJuYW1lX3NwZWMiCi0gIGFjbF9saWJyYXJ5X25hbWVzX3NwZWM9IiRhY2xfY3ZfbGlicmFyeV9uYW1lc19zcGVjIgotICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgotICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgotICBhY2xfaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKLSAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKLSAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBhdGggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9ycGF0aDsgOgotZWxzZQotICBlbmFibGVfcnBhdGg9eWVzCi1maQotCi0KLQotICAgICAgICAgICAgICAgICAgYWNsX2xpYmRpcnN0ZW09bGliCi0gIHNlYXJjaHBhdGg9YChMQ19BTEw9QyAkQ0MgLXByaW50LXNlYXJjaC1kaXJzKSAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAncyxebGlicmFyaWVzOiAsLHAnIHwgc2VkIC1lICdzLF49LCwnYAotICBpZiB0ZXN0IC1uICIkc2VhcmNocGF0aCI7IHRoZW4KLSAgICBhY2xfc2F2ZV9JRlM9IiR7SUZTPSAJfSI7IElGUz0iOiIKLSAgICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hwYXRoOyBkbwotICAgICAgaWYgdGVzdCAtZCAiJHNlYXJjaGRpciI7IHRoZW4KLSAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KLSAgICAgICAgICAqL2xpYjY0LyB8ICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OwotICAgICAgICAgICopIHNlYXJjaGRpcj1gY2QgIiRzZWFyY2hkaXIiICYmIHB3ZGAKLSAgICAgICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgotICAgICAgICAgICAgICAgKi9saWI2NCApIGFjbF9saWJkaXJzdGVtPWxpYjY0IDs7Ci0gICAgICAgICAgICAgZXNhYyA7OwotICAgICAgICBlc2FjCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9IiRhY2xfc2F2ZV9JRlMiCi0gIGZpCi0KLQotCi0KLQotCi0KLQotCi0gICAgdXNlX2FkZGl0aW9uYWw9eWVzCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLQotICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgotICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKLQotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJpY29udi1wcmVmaXggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2xpYmljb252X3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfbGliaWNvbnZfcHJlZml4OwotICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgotICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KLSAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLQotICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgotICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKLQotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSAgICAgIGVsc2UKLSAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgotICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgotICAgICAgZmkKLSAgICBmaQotCi1maQotCi0gICAgICBMSUJJQ09OVj0KLSAgTFRMSUJJQ09OVj0KLSAgSU5DSUNPTlY9Ci0gIExJQklDT05WX1BSRUZJWD0KLSAgcnBhdGhkaXJzPQotICBsdHJwYXRoZGlycz0KLSAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQotICBuYW1lc19uZXh0X3JvdW5kPSdpY29udiAnCi0gIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KLSAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKLSAgICBuYW1lc19uZXh0X3JvdW5kPQotICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbwotICAgICAgYWxyZWFkeV9oYW5kbGVkPQotICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KLSAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgotICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgZG9uZQotICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KLSAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgotICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKLSAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKLSAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgotICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSR2YWx1ZSIKLSAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCi0gICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JHZhbHVlIgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICBmaQotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9Ci0gICAgICAgICAgZm91bmRfbGE9Ci0gICAgICAgICAgZm91bmRfc289Ci0gICAgICAgICAgZm91bmRfYT0KLSAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hyZXh0PQotICAgICAgICAgIGZpCi0gICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgotICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCi0gICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgotICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGZpCi0gICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCi0gICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICBldmFsIHg9XCIkeFwiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KLSAgICAgICAgICAgICAgICAtTCopCi0gICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCi0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBkb25lCi0gICAgICAgICAgZmkKLSAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgotICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJQ09OVjsgZG8KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICBldmFsIHg9XCIkeFwiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9LUwkZm91bmRfZGlyIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iCi0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9hIgotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KLSAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCi0gICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQotICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCi0gICAgICAgICAgICAgICAgTElCSUNPTlZfUFJFRklYPSIkYmFzZWRpciIKLSAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCi0gICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKLSAgICAgICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ0lDT05WOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lDT05WPSIke0lOQ0lDT05WfSR7SU5DSUNPTlY6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCi0gICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KLSAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7Ci0gICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCi0gICAgICAgICAgICAgICAgICAtTCopCi0gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OwotICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJQ09OVjsgZG8KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICBldmFsIHg9XCIkeFwiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJQ09OVjsgZG8KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICBldmFsIHg9XCIkeFwiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgIC1SKikKLSAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgLWwqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCi0gICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAqLmxhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRkZXAiCi0gICAgICAgICAgICAgICAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9JGRlcCIKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tbCRuYW1lIgotICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0tbCRuYW1lIgotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIGRvbmUKLSAgZG9uZQotICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgYWxsZGlycz0KLSAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCi0gICAgICBkb25lCi0gICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCi0gICAgICBsaWJkaXI9IiRhbGxkaXJzIgotICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKLSAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZsYWciCi0gICAgZWxzZQotICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCi0gICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKLSAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgotICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmbGFnIgotICAgICAgZG9uZQotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCi0gICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1SJGZvdW5kX2RpciIKLSAgICBkb25lCi0gIGZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlLi4uICIgPiY2OyB9Ci1pZiAke2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGd0X3NhdmVfTElCUz0iJExJQlMiCi0gICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKLSAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUHJlZmVyZW5jZXMuaD4KLWludAotbWFpbiAoKQotewotQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZShOVUxMLCBOVUxMKQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT15ZXMKLWVsc2UKLSAgZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAgTElCUz0iJGd0X3NhdmVfTElCUyIKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY1Ci0kYXNfZWNobyAiJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY2OyB9Ci0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NGUFJFRkVSRU5DRVNDT1BZQVBQVkFMVUUgMSIgPj5jb25mZGVmcy5oCi0KLSAgZmkKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDRkxvY2FsZUNvcHlDdXJyZW50IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBDRkxvY2FsZUNvcHlDdXJyZW50Li4uICIgPiY2OyB9Ci1pZiAke2d0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGd0X3NhdmVfTElCUz0iJExJQlMiCi0gICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKLSAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGTG9jYWxlLmg+Ci1pbnQKLW1haW4gKCkKLXsKLUNGTG9jYWxlQ29weUN1cnJlbnQoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9eWVzCi1lbHNlCi0gIGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgIExJQlM9IiRndF9zYXZlX0xJQlMiCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQiID4mNQotJGFzX2VjaG8gIiRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQiID4mNjsgfQotICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UIDEiID4+Y29uZmRlZnMuaAotCi0gIGZpCi0gIElOVExfTUFDT1NYX0xJQlM9Ci0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllcyB8fCB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KLSAgICBJTlRMX01BQ09TWF9MSUJTPSItV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCi0gIGZpCi0KLQotCi0KLQotCi0gIExJQklOVEw9Ci0gIExUTElCSU5UTD0KLSAgUE9TVUI9Ci0KLSAgICBjYXNlICIgJGd0X25lZWRzICIgaW4KLSAgICAqIiBuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MgIiopIGd0X2FwaV92ZXJzaW9uPTMgOzsKLSAgICAqIiBuZWVkLW5nZXR0ZXh0ICIqKSBndF9hcGlfdmVyc2lvbj0yIDs7Ci0gICAgKikgZ3RfYXBpX3ZlcnNpb249MSA7OwotICBlc2FjCi0gIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJjIgotICBndF9mdW5jX2dudWdldHRleHRfbGliaW50bD0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliaW50bCIKLQotICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCi0gICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCi0KLQotICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMzsgdGhlbgotICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0nCi0jaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCi0jZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQotI2VuZGlmCi10eXBlZGVmIGludCBhcnJheSBbMiAqIChfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTigwKSA+PSAxKSAtIDFdOwotJwotICAgICAgICBlbHNlCi0gICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPQotICAgICAgICBmaQotICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMjsgdGhlbgotICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPScgKyAqIG5nZXR0ZXh0ICgiIiwgIiIsIDApJwotICAgICAgICBlbHNlCi0gICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9Ci0gICAgICAgIGZpCi0KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliYyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliYy4uLiAiID4mNjsgfQotaWYgZXZhbCBcJHskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bGliaW50bC5oPgotJGd0X3JldmlzaW9uX3Rlc3RfY29kZQotZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOwotZXh0ZXJuIGludCAqX25sX2RvbWFpbl9iaW5kaW5nczsKLWludAotbWFpbiAoKQotewotYmluZHRleHRkb21haW4gKCIiLCAiIik7Ci1yZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3MKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9eWVzIgotZWxzZQotICBldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9bm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ldmFsIGFjX3Jlcz1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0KLSAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiAhPSAieWVzIjsgfTsgdGhlbgotCi0KLQotCi0KLSAgICAgICAgICBhbV9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0KLSAgZm9yIGVsZW1lbnQgaW4gJElOQ0lDT05WOyBkbwotICAgIGhhdmVpdD0KLSAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLSAgZXZhbCB4PVwiJHhcIgotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgotICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0kZWxlbWVudCIKLSAgICBmaQotICBkb25lCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpY29udiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgaWNvbnYuLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfZnVuY19pY29udis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0KLSAgICBhbV9jdl9mdW5jX2ljb252PSJubywgY29uc2lkZXIgaW5zdGFsbGluZyBHTlUgbGliaWNvbnYiCi0gICAgYW1fY3ZfbGliX2ljb252PW5vCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGljb252Lmg+Ci1pbnQKLW1haW4gKCkKLXsKLWljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKLSAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICBpY29udl9jbG9zZShjZCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYW1fY3ZfZnVuY19pY29udj15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiAhPSB5ZXM7IHRoZW4KLSAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCi0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8aWNvbnYuaD4KLWludAotbWFpbiAoKQotewotaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOwotICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgICBpY29udl9jbG9zZShjZCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYW1fY3ZfbGliX2ljb252PXllcwotICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgotICAgIGZpCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X2Z1bmNfaWNvbnYiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9mdW5jX2ljb252IiA+JjY7IH0KLSAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBpY29udiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBpY29udi4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9mdW5jX2ljb252X3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQotICAgICAgICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgIGlmIHRlc3QgJGFtX2N2X2xpYl9pY29udiA9IHllczsgdGhlbgotICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICAgICAgICAgYWl4KiB8IGhwdXgqKSBhbV9jdl9mdW5jX2ljb252X3dvcmtzPSJndWVzc2luZyBubyIgOzsKLSAgICAgICAgICAgKikgICAgICAgICAgICBhbV9jdl9mdW5jX2ljb252X3dvcmtzPSJndWVzc2luZyB5ZXMiIDs7Ci0gICAgICAgICBlc2FjCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2luY2x1ZGUgPGljb252Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci1pbnQgbWFpbiAoKQotewotICAvKiBUZXN0IGFnYWluc3QgQUlYIDUuMSBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VjY2Vzc2Z1bAotICAgICByZXR1cm5zLiAgKi8KLSAgewotICAgIGljb252X3QgY2RfdXRmOF90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiVVRGLTgiKTsKLSAgICBpZiAoY2RfdXRmOF90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQotICAgICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzNDJcMjAyXDI1NCI7IC8qIEVVUk8gU0lHTiAqLwotICAgICAgICBjaGFyIGJ1ZlsxMF07Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7Ci0gICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOwotICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7Ci0gICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7Ci0gICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfdXRmOF90b184ODU5MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7Ci0gICAgICAgIGlmIChyZXMgPT0gMCkKLSAgICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgfQotI2lmIDAgLyogVGhpcyBidWcgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSB0aGUgY2FsbGVyLiAgKi8KLSAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgMC4gICovCi0gIHsKLSAgICBpY29udl90IGNkXzg4NTkxX3RvX3V0ZjggPSBpY29udl9vcGVuICgidXRmOCIsICJpc284ODU5MSIpOwotICAgIGlmIChjZF84ODU5MV90b191dGY4ICE9IChpY29udl90KSgtMSkpCi0gICAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDMwNHJnZXIgbWl0IGJcMzY2c2VuIEJcMzc0YmNoZW4gb2huZSBBdWdlbm1hXDMzNyI7Ci0gICAgICAgIGNoYXIgYnVmWzUwXTsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKLSAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7Ci0gICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKLSAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKLSAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKLSAgICAgICAgaWYgKChpbnQpcmVzID4gMCkKLSAgICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgfQotI2VuZGlmCi0gIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IE5vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcwotICAgICBwcm92aWRlZC4gICovCi0gIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KLSAgICAgIGljb252X29wZW4gKCJVVEYtOCIsICJFVUMtSlAiKSA9PSAoaWNvbnZfdCkoLTEpCi0gICAgICAvKiBUcnkgSVJJWCwgT1NGLzEgbmFtZXMuICAqLwotICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKQotICAgICAgLyogVHJ5IEFJWCBuYW1lcy4gICovCi0gICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiSUJNLWV1Y0pQIikgPT0gKGljb252X3QpKC0xKQotICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KLSAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKLSAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICBhbV9jdl9mdW5jX2ljb252X3dvcmtzPXllcwotZWxzZQotICBhbV9jdl9mdW5jX2ljb252X3dvcmtzPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQotICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiID4mNjsgfQotICAgIGNhc2UgIiRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiBpbgotICAgICAgKm5vKSBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubyA7OwotICAgICAgKikgICBhbV9mdW5jX2ljb252PXllcyA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vCi0gIGZpCi0gIGlmIHRlc3QgIiRhbV9mdW5jX2ljb252IiA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0lDT05WIDEiID4+Y29uZmRlZnMuaAotCi0gIGZpCi0gIGlmIHRlc3QgIiRhbV9jdl9saWJfaWNvbnYiID0geWVzOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmljb252IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaWNvbnYuLi4gIiA+JjY7IH0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJQklDT05WIiA+JjUKLSRhc19lY2hvICIkTElCSUNPTlYiID4mNjsgfQotICBlbHNlCi0gICAgICAgICAgICBDUFBGTEFHUz0iJGFtX3NhdmVfQ1BQRkxBR1MiCi0gICAgTElCSUNPTlY9Ci0gICAgTFRMSUJJQ09OVj0KLSAgZmkKLQotCi0KLQotCi0KLQotCi0gICAgdXNlX2FkZGl0aW9uYWw9eWVzCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLQotICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgotICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKLQotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJpbnRsLXByZWZpeCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbGliaW50bF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2xpYmludGxfcHJlZml4OwotICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgotICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KLSAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLQotICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgotICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKLQotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSAgICAgIGVsc2UKLSAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgotICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgotICAgICAgZmkKLSAgICBmaQotCi1maQotCi0gICAgICBMSUJJTlRMPQotICBMVExJQklOVEw9Ci0gIElOQ0lOVEw9Ci0gIExJQklOVExfUFJFRklYPQotICBycGF0aGRpcnM9Ci0gIGx0cnBhdGhkaXJzPQotICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9Ci0gIG5hbWVzX25leHRfcm91bmQ9J2ludGwgJwotICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCi0gICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCi0gICAgbmFtZXNfbmV4dF9yb3VuZD0KLSAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KLSAgICAgIGFscmVhZHlfaGFuZGxlZD0KLSAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCi0gICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KLSAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCi0gICAgICAgICAgYnJlYWsKLSAgICAgICAgZmkKLSAgICAgIGRvbmUKLSAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCi0gICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCi0gICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCi0gICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCi0gICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKLSAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kdmFsdWUiCi0gICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgotICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfSR2YWx1ZSIKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgZmkKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPQotICAgICAgICAgIGZvdW5kX2xhPQotICAgICAgICAgIGZvdW5kX3NvPQotICAgICAgICAgIGZvdW5kX2E9Ci0gICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQotICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTogc2hyZXh0PS5zbwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNocmV4dD0KLSAgICAgICAgICBmaQotICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCi0gICAgICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KLSAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAotICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAotICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKLSAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbwotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKLSAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgotICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICBmaQotICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgotICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCSU5UTDsgZG8KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICBldmFsIHg9XCIkeFwiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KLSAgICAgICAgICAgICAgICAtTCopCi0gICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCi0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBkb25lCi0gICAgICAgICAgZmkKLSAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgotICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJTlRMOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRmb3VuZF9kaXIiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1sJG5hbWUiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX2EiCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQotICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KLSAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAqLyRhY2xfbGliZGlyc3RlbS8pCi0gICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2AKLSAgICAgICAgICAgICAgICBMSUJJTlRMX1BSRUZJWD0iJGJhc2VkaXIiCi0gICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgotICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7Ci0gICAgICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNJTlRMOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lOVEw9IiR7SU5DSU5UTH0ke0lOQ0lOVEw6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCi0gICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KLSAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7Ci0gICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCi0gICAgICAgICAgICAgICAgICAtTCopCi0gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OwotICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJTlRMOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklOVEw7IGRvCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLSAgZXZhbCB4PVwiJHhcIgotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAtUiopCi0gICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgIC1sKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgKi5sYSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZGVwIgotICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfSRkZXAiCi0gICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LWwkbmFtZSIKLSAgICAgICAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9LWwkbmFtZSIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZmkKLSAgICBkb25lCi0gIGRvbmUKLSAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbGRpcnM9Ci0gICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgotICAgICAgZG9uZQotICAgICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgotICAgICAgbGliZGlyPSIkYWxsZGlycyIKLSAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0gICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCi0gICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmbGFnIgotICAgIGVsc2UKLSAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgotICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCi0gICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0gICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKLSAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZmxhZyIKLSAgICAgIGRvbmUKLSAgICBmaQotICBmaQotICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbwotICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0tUiRmb3VuZF9kaXIiCi0gICAgZG9uZQotICBmaQotCi0gICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliaW50bCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGdldHRleHQgaW4gbGliaW50bC4uLiAiID4mNjsgfQotaWYgZXZhbCBcJHskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJTkNJTlRMIgotICAgICAgICAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgotICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGxpYmludGwuaD4KLSRndF9yZXZpc2lvbl90ZXN0X2NvZGUKLWV4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKLWV4dGVybgotI2lmZGVmIF9fY3BsdXNwbHVzCi0iQyIKLSNlbmRpZgotY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTsKLWludAotbWFpbiAoKQotewotYmluZHRleHRkb21haW4gKCIiLCAiIik7Ci1yZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCi1lbHNlCi0gIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD1ubyIKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiAhPSB5ZXM7IH0gJiYgdGVzdCAtbiAiJExJQklDT05WIjsgdGhlbgotICAgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCi0gICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0kZ3RfcmV2aXNpb25fdGVzdF9jb2RlCi1leHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7Ci1leHRlcm4KLSNpZmRlZiBfX2NwbHVzcGx1cwotIkMiCi0jZW5kaWYKLWNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKik7Ci1pbnQKLW1haW4gKCkKLXsKLWJpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOwotcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgiIikKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBMSUJJTlRMPSIkTElCSU5UTCAkTElCSUNPTlYiCi0gICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgotICAgICAgICAgICAgICAgIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMiCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIENQUEZMQUdTPSIkZ3Rfc2F2ZV9DUFBGTEFHUyIKLSAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiCi1maQotZXZhbCBhY19yZXM9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICAgICAgICBmaQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKLSAgICAgICAgICAgfHwgeyB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0gXAotICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAotICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXRvb2xzOyB9OyB0aGVuCi0gICAgICAgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PXllcwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIExJQklOVEw9Ci0gICAgICAgICAgTFRMSUJJTlRMPQotICAgICAgICAgIElOQ0lOVEw9Ci0gICAgICAgIGZpCi0KLQotCi0gICAgaWYgdGVzdCAtbiAiJElOVExfTUFDT1NYX0xJQlMiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKLSAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgICAgICAgICAgTElCSU5UTD0iJExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCi0gICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkSU5UTF9NQUNPU1hfTElCUyIKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAotICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9OTFMgMSIgPj5jb25mZGVmcy5oCi0KLSAgICBlbHNlCi0gICAgICBVU0VfTkxTPW5vCi0gICAgZmkKLSAgZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIE5MUyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBOTFMuLi4gIiA+JjY7IH0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTkxTIiA+JjUKLSRhc19lY2hvICIkVVNFX05MUyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb20uLi4gIiA+JjY7IH0KLSAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KLSAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgotICAgICAgZWxzZQotICAgICAgICBndF9zb3VyY2U9ImxpYmMiCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCi0gICAgZmkKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X3NvdXJjZSIgPiY1Ci0kYXNfZWNobyAiJGd0X3NvdXJjZSIgPiY2OyB9Ci0gIGZpCi0KLSAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLQotICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaW50bCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmludGwuLi4gIiA+JjY7IH0KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSUJJTlRMIiA+JjUKLSRhc19lY2hvICIkTElCSU5UTCIgPiY2OyB9Ci0KLSAgZm9yIGVsZW1lbnQgaW4gJElOQ0lOVEw7IGRvCi0gICAgaGF2ZWl0PQotICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICBldmFsIHg9XCIkeFwiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCi0gICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfSRlbGVtZW50IgotICAgIGZpCi0gIGRvbmUKLQotICAgICAgZmkKLQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVFRFWFQgMSIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9EQ0dFVFRFWFQgMSIgPj5jb25mZGVmcy5oCi0KLSAgICBmaQotCi0gICAgICAgIFBPU1VCPXBvCi0gIGZpCi0KLQotCi0gICAgSU5UTExJQlM9IiRMSUJJTlRMIgotCi0KLQotCi0KLQotCi0gIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCi0gICAgR0VUVEVYVF9QQUNLQUdFPWdzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OCi0gIGVsc2UKLSAgICBHRVRURVhUX1BBQ0tBR0U9TlVMTAotICBmaQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR0VUVEVYVF9QQUNLQUdFICIkR0VUVEVYVF9QQUNLQUdFIgotX0FDRU9GCi0KLQotICAgIGlmIHRlc3QgLWUgIiR7c3JjZGlyfS9wby9NYWtldmFycyI7IHRoZW4KLSAgICBpZiAhIGdyZXAgLWUgImdzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OIiAiJHtzcmNkaXJ9L3BvL01ha2V2YXJzIjsgdGhlbgotICAgICAgYXNfZm5fZXJyb3IgJD8gIkRPTUFJTiBpbiBwby9NYWtldmFycyBkb2VzIG5vdCBtYXRjaCBHRVRURVhUX1BBQ0tBR0UgZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT04iICIkTElORU5PIiA1Ci0gICAgZmkKLSAgZmkKLQotCi0gIEVYUF9WQVI9TE9DQUxFRElSCi0gIEZST01fVkFSPSRkYXRhZGlyL2xvY2FsZQotCi0gICAgcHJlZml4X3NhdmU9JHByZWZpeAotICBleGVjX3ByZWZpeF9zYXZlPSRleGVjX3ByZWZpeAotCi0gICAgaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgotICAgIHByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgotICBmaQotICAgIGlmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgotICAgIGV4ZWNfcHJlZml4PSRwcmVmaXgKLSAgZmkKLQotICBmdWxsX3Zhcj0iJEZST01fVkFSIgotICAgIHdoaWxlIHRydWU7IGRvCi0gICAgbmV3X2Z1bGxfdmFyPSJgZXZhbCBlY2hvICRmdWxsX3ZhcmAiCi0gICAgaWYgdGVzdCAieCRuZXdfZnVsbF92YXIiID0gIngkZnVsbF92YXIiOyB0aGVuIGJyZWFrOyBmaQotICAgIGZ1bGxfdmFyPSRuZXdfZnVsbF92YXIKLSAgZG9uZQotCi0gICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgotICBMT0NBTEVESVI9IiRmdWxsX3ZhciIKLQotCi0gICAgcHJlZml4PSRwcmVmaXhfc2F2ZQotICBleGVjX3ByZWZpeD0kZXhlY19wcmVmaXhfc2F2ZQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTE9DQUxFRElSICIkTE9DQUxFRElSIgotX0FDRU9GCi0KLQotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmF0YWwtd2FybmluZ3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZmF0YWxfd2FybmluZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9mYXRhbF93YXJuaW5nczsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBGQVRBTF9XQVJOSU5HUz15ZXMgOzsKLSAgICAgICAgbm8pICBGQVRBTF9XQVJOSU5HUz1ubyA7OwotICAgICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtZmF0YWwtd2FybmluZ3MiICIkTElORU5PIiA1IDs7Ci0gICAgICBlc2FjCi0KLWVsc2UKLQotICAgICAgaWYgdGVzdCAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlOT1IgJSAyYCIgPSAieDEiIC1hICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAnPCcgOTBgIiA9ICJ4MSI7IHRoZW4KLSAgICAgICAgRkFUQUxfV0FSTklOR1M9eWVzCi0gICAgICBlbHNlCi0gICAgICAgIEZBVEFMX1dBUk5JTkdTPW5vCi0gICAgICBmaQotCi1maQotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZXh0cmEtY2hlY2sgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZXh0cmFfY2hlY2src2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9leHRyYV9jaGVjazsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBFWFRSQV9DSEVDS1M9eWVzIDs7Ci0gICAgICAgIG5vKSAgRVhUUkFfQ0hFQ0tTPW5vIDs7Ci0gICAgICAgICopICAgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWV4dHJhLWNoZWNrcyIgIiRMSU5FTk8iIDUgOzsKLSAgICAgIGVzYWMKLQotZWxzZQotCi0gICAgICBpZiB0ZXN0ICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSU5PUiAlIDJgIiA9ICJ4MSIgLWEgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JQ1JPICc8JyA5MGAiID0gIngxIjsgdGhlbgotICAgICAgICBFWFRSQV9DSEVDS1M9eWVzCi0gICAgICBlbHNlCi0gICAgICAgIEVYVFJBX0NIRUNLUz1ubwotICAgICAgZmkKLQotZmkKLQotCi0gICAgaWYgdGVzdCAieCRFWFRSQV9DSEVDS1MiID0gInh5ZXMiOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEdTVF9FTkFCTEVfRVhUUkFfQ0hFQ0tTIDEiID4+Y29uZmRlZnMuaAotCi0gICAgZmkKLQotCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nc3QtZGVidWcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZ3N0X2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ3N0X2RlYnVnOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIEdTVF9ESVNBQkxFX0dTVF9ERUJVRz1ubyA7OwotICAgICAgICBubykgR1NUX0RJU0FCTEVfR1NUX0RFQlVHPXllcyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZ3N0LWRlYnVnIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBHU1RfRElTQUJMRV9HU1RfREVCVUc9bm8KLWZpCi0KLSAgaWYgdGVzdCB4JEdTVF9ESVNBQkxFX0dTVF9ERUJVRyA9IHh5ZXM7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGVkIHN1YnN5c3RlbSBkZWJ1Z2dpbmcgc3Vic3lzdGVtIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGVkIHN1YnN5c3RlbSBkZWJ1Z2dpbmcgc3Vic3lzdGVtIiA+JjY7fQotICAgIEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkU9IiNkZWZpbmUgR1NUX0RJU0FCTEVfR1NUX0RFQlVHIDEiCi0gIGVsc2UKLSAgICBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FPSIvKiAjdW5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovIgotICBmaQotCi0KLQotIGlmIHRlc3QgIngkR1NUX0RJU0FCTEVfR1NUX0RFQlVHIiA9ICJ4eWVzIjsgdGhlbgotICBHU1RfRElTQUJMRV9HU1RfREVCVUdfVFJVRT0KLSAgR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFPScjJwotZWxzZQotICBHU1RfRElTQUJMRV9HU1RfREVCVUdfVFJVRT0nIycKLSAgR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFPQotZmkKLQotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ3N0LXRyYWNlci1ob29rcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9nc3RfdHJhY2VyX2hvb2tzK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ3N0X3RyYWNlcl9ob29rczsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTPW5vIDs7Ci0gICAgICAgIG5vKSBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTPXllcyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZ3N0LXRyYWNlci1ob29rcyIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LUz1ubwotZmkKLQotICBpZiB0ZXN0IHgkR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LUyA9IHh5ZXM7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGVkIHN1YnN5c3RlbSB0cmFjaW5nIHN1YnN5c3RlbSBob29rcyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxlZCBzdWJzeXN0ZW0gdHJhY2luZyBzdWJzeXN0ZW0gaG9va3MiID4mNjt9Ci0gICAgR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkU9IiNkZWZpbmUgR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LUyAxIgotICBlbHNlCi0gICAgR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkU9Ii8qICN1bmRlZiBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTICovIgotICBmaQotCi0KLQotIGlmIHRlc3QgIngkR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LUyIgPSAieHllcyI7IHRoZW4KLSAgR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19UUlVFPQotICBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0ZBTFNFPScjJwotZWxzZQotICBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX1RSVUU9JyMnCi0gIEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfRkFMU0U9Ci1maQotCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wYXJzZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wYXJzZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3BhcnNlOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIEdTVF9ESVNBQkxFX1BBUlNFPW5vIDs7Ci0gICAgICAgIG5vKSBHU1RfRElTQUJMRV9QQVJTRT15ZXMgOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXBhcnNlIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBHU1RfRElTQUJMRV9QQVJTRT1ubwotZmkKLQotICBpZiB0ZXN0IHgkR1NUX0RJU0FCTEVfUEFSU0UgPSB4eWVzOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxlZCBzdWJzeXN0ZW0gY29tbWFuZC1saW5lIHBhcnNlciIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxlZCBzdWJzeXN0ZW0gY29tbWFuZC1saW5lIHBhcnNlciIgPiY2O30KLSAgICBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkU9IiNkZWZpbmUgR1NUX0RJU0FCTEVfUEFSU0UgMSIKLSAgZWxzZQotICAgIEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORT0iLyogI3VuZGVmIEdTVF9ESVNBQkxFX1BBUlNFICovIgotICBmaQotCi0KLQotIGlmIHRlc3QgIngkR1NUX0RJU0FCTEVfUEFSU0UiID0gInh5ZXMiOyB0aGVuCi0gIEdTVF9ESVNBQkxFX1BBUlNFX1RSVUU9Ci0gIEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFPScjJwotZWxzZQotICBHU1RfRElTQUJMRV9QQVJTRV9UUlVFPScjJwotICBHU1RfRElTQUJMRV9QQVJTRV9GQUxTRT0KLWZpCi0KLWlmIHRlc3QgIngkR1NUX0RJU0FCTEVfUEFSU0UiID0geHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBHU1RfRElTQUJMRV9QQVJTRSAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wdGlvbi1wYXJzaW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29wdGlvbl9wYXJzaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfb3B0aW9uX3BhcnNpbmc7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkc9bm8gOzsKLSAgICAgICAgbm8pIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HPXllcyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtb3B0aW9uLXBhcnNpbmciICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HPW5vCi1maQotCi0gIGlmIHRlc3QgeCRHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORyA9IHh5ZXM7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGVkIHN1YnN5c3RlbSBvcHRpb24gcGFyc2luZyB3aGVuIGdzdF9pbml0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGVkIHN1YnN5c3RlbSBvcHRpb24gcGFyc2luZyB3aGVuIGdzdF9pbml0IiA+JjY7fQotICAgIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORT0iI2RlZmluZSBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORyAxIgotICBlbHNlCi0gICAgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FPSIvKiAjdW5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcgKi8iCi0gIGZpCi0KLQotCi0gaWYgdGVzdCAieCRHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORyIgPSAieHllcyI7IHRoZW4KLSAgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfVFJVRT0KLSAgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfRkFMU0U9JyMnCi1lbHNlCi0gIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX1RSVUU9JyMnCi0gIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0ZBTFNFPQotZmkKLQotaWYgdGVzdCAieCRHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORyIgPSB4eWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HIDEiID4+Y29uZmRlZnMuaAotCi1maQotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVnaXN0cnkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcmVnaXN0cnkrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9yZWdpc3RyeTsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBHU1RfRElTQUJMRV9SRUdJU1RSWT1ubyA7OwotICAgICAgICBubykgR1NUX0RJU0FCTEVfUkVHSVNUUlk9eWVzIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1yZWdpc3RyeSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgR1NUX0RJU0FCTEVfUkVHSVNUUlk9bm8KLWZpCi0KLSAgaWYgdGVzdCB4JEdTVF9ESVNBQkxFX1JFR0lTVFJZID0geHllczsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsZWQgc3Vic3lzdGVtIHBsdWdpbiByZWdpc3RyeSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxlZCBzdWJzeXN0ZW0gcGx1Z2luIHJlZ2lzdHJ5IiA+JjY7fQotICAgIEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORT0iI2RlZmluZSBHU1RfRElTQUJMRV9SRUdJU1RSWSAxIgotICBlbHNlCi0gICAgR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FPSIvKiAjdW5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkgKi8iCi0gIGZpCi0KLQotCi0gaWYgdGVzdCAieCRHU1RfRElTQUJMRV9SRUdJU1RSWSIgPSAieHllcyI7IHRoZW4KLSAgR1NUX0RJU0FCTEVfUkVHSVNUUllfVFJVRT0KLSAgR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0U9JyMnCi1lbHNlCi0gIEdTVF9ESVNBQkxFX1JFR0lTVFJZX1RSVUU9JyMnCi0gIEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFPQotZmkKLQotaWYgdGVzdCAieCRHU1RfRElTQUJMRV9SRUdJU1RSWSIgPSAieHllcyIKLXRoZW4KLSAgR1NUX1JFR0lTVFJZX0RPQ19UWVBFUz0iJSIKLWVsc2UKLSAgR1NUX1JFR0lTVFJZX0RPQ19UWVBFUz0KLWZpCi0KLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBsdWdpbiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wbHVnaW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9wbHVnaW47Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgR1NUX0RJU0FCTEVfUExVR0lOPW5vIDs7Ci0gICAgICAgIG5vKSBHU1RfRElTQUJMRV9QTFVHSU49eWVzIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1wbHVnaW4iICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIEdTVF9ESVNBQkxFX1BMVUdJTj1ubwotZmkKLQotICBpZiB0ZXN0IHgkR1NUX0RJU0FCTEVfUExVR0lOID0geHllczsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsZWQgc3Vic3lzdGVtIHBsdWdpbiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxlZCBzdWJzeXN0ZW0gcGx1Z2luIiA+JjY7fQotICAgIEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkU9IiNkZWZpbmUgR1NUX0RJU0FCTEVfUExVR0lOIDEiCi0gIGVsc2UKLSAgICBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FPSIvKiAjdW5kZWYgR1NUX0RJU0FCTEVfUExVR0lOICovIgotICBmaQotCi0KLQotIGlmIHRlc3QgIngkR1NUX0RJU0FCTEVfUExVR0lOIiA9ICJ4eWVzIjsgdGhlbgotICBHU1RfRElTQUJMRV9QTFVHSU5fVFJVRT0KLSAgR1NUX0RJU0FCTEVfUExVR0lOX0ZBTFNFPScjJwotZWxzZQotICBHU1RfRElTQUJMRV9QTFVHSU5fVFJVRT0nIycKLSAgR1NUX0RJU0FCTEVfUExVR0lOX0ZBTFNFPQotZmkKLQotCi0KLSAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9kZWJ1ZzsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBVU0VfREVCVUc9eWVzIDs7Ci0gICAgICAgIG5vKSAgVVNFX0RFQlVHPW5vIDs7Ci0gICAgICAgICopICAgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRlYnVnIiAiJExJTkVOTyIgNSA7OwotICAgICAgZXNhYwotCi1lbHNlCi0gIFVTRV9ERUJVRz15ZXMKLWZpCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcHJvZmlsaW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3Byb2ZpbGluZytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3Byb2ZpbGluZzsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBVU0VfUFJPRklMSU5HPXllcyA7OwotICAgICAgICBubykgIFVTRV9QUk9GSUxJTkc9bm8gOzsKLSAgICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcHJvZmlsaW5nIiAiJExJTkVOTyIgNSA7OwotICAgICAgZXNhYwotCi1lbHNlCi0gIFVTRV9QUk9GSUxJTkc9bm8KLWZpCi0KLQotCi1pZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCi0JaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkUEtHX0NPTkZJRyBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICA7OwotZXNhYwotZmkKLVBLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRwotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1Ci0kYXNfZWNobyAiJFBLR19DT05GSUciID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCi0gIGFjX3B0X1BLR19DT05GSUc9JFBLR19DT05GSUcKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICA7OwotZXNhYwotZmkKLWFjX3B0X1BLR19DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRwotaWYgdGVzdCAtbiAiJGFjX3B0X1BLR19DT05GSUciOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1Ci0kYXNfZWNobyAiJGFjX3B0X1BLR19DT05GSUciID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19wdF9QS0dfQ09ORklHIiA9IHg7IHRoZW4KLSAgICBQS0dfQ09ORklHPSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRwotICBmaQotZWxzZQotICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgotZmkKLQotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotCV9wa2dfbWluX3ZlcnNpb249MC45LjAKLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KLQlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQllbHNlCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCQlQS0dfQ09ORklHPSIiCi0JZmkKLQotZmkKLQotICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS12YWxncmluZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV92YWxncmluZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3ZhbGdyaW5kOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIFVTRV9WQUxHUklORD0iJFVTRV9ERUJVRyIgOzsKLSAgICAgICAgbm8pICBVU0VfVkFMR1JJTkQ9bm8gOzsKLSAgICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdmFsZ3JpbmQiICIkTElORU5PIiA1IDs7Ci0gICAgICBlc2FjCi0KLWVsc2UKLSAgVVNFX1ZBTEdSSU5EPSIkVVNFX0RFQlVHIgotZmkKLSAgIFZBTEdSSU5EX1JFUT0iMy4wIgotICBpZiB0ZXN0ICJ4JFVTRV9WQUxHUklORCIgPSB4eWVzOyB0aGVuCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFZBTEdSSU5EIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBWQUxHUklORC4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkVkFMR1JJTkRfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfVkFMR1JJTkRfQ0ZMQUdTPSIkVkFMR1JJTkRfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwidmFsZ3JpbmQgPj0gXCRWQUxHUklORF9SRVFcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAidmFsZ3JpbmQgPj0gJFZBTEdSSU5EX1JFUSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9WQUxHUklORF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJ2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkVkFMR1JJTkRfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1ZBTEdSSU5EX0xJQlM9IiRWQUxHUklORF9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwidmFsZ3JpbmQgPj0gXCRWQUxHUklORF9SRVFcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAidmFsZ3JpbmQgPj0gJFZBTEdSSU5EX1JFUSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9WQUxHUklORF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgInZhbGdyaW5kID49ICRWQUxHUklORF9SRVEiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgVkFMR1JJTkRfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJ2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgVkFMR1JJTkRfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJ2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkVkFMR1JJTkRfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgICAgICAgICAgICBVU0VfVkFMR1JJTkQ9Im5vIgotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCVVTRV9WQUxHUklORD0ibm8iCi1lbHNlCi0JVkFMR1JJTkRfQ0ZMQUdTPSRwa2dfY3ZfVkFMR1JJTkRfQ0ZMQUdTCi0JVkFMR1JJTkRfTElCUz0kcGtnX2N2X1ZBTEdSSU5EX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQlVU0VfVkFMR1JJTkQ9InllcyIKLWZpCi0gIGZpCi0gIGlmIHRlc3QgIngkVVNFX1ZBTEdSSU5EIiA9IHh5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9WQUxHUklORCAxIiA+PmNvbmZkZWZzLmgKLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgZXh0cmEgY29kZSBwYXRocyBmb3IgdmFsZ3JpbmQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogVXNpbmcgZXh0cmEgY29kZSBwYXRocyBmb3IgdmFsZ3JpbmQiID4mNjt9Ci0gIGZpCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2NvdiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9nY292K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ2NvdjsgZW5hYmxlX2djb3Y9JGVuYWJsZXZhbAotZWxzZQotICBlbmFibGVfZ2Nvdj1ubwotZmkKLQotICBpZiB0ZXN0IHgkZW5hYmxlX2djb3YgPSB4eWVzIDsgdGhlbgotICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyIKLSAgICB0aGVuCi0gICAgICBhc19mbl9lcnJvciAkPyAiZ2NvdiBvbmx5IHdvcmtzIGlmIGdjYyBpcyB1c2VkIiAiJExJTkVOTyIgNQotICAgIGZpCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyBcIi1mcHJvZmlsZS1hcmNzXCIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIFwiLWZwcm9maWxlLWFyY3NcIi4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgIi1mcHJvZmlsZS1hcmNzIiIKLQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLQotICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KLSAgICBHQ09WX0NGTEFHUz0iJEdDT1ZfQ0ZMQUdTIC1mcHJvZmlsZS1hcmNzIgotICAgIHRydWUKLSAgZWxzZQotICAgIHRydWUKLSAgICB0cnVlCi0gIGZpCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1Ci0kYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgXCItZnRlc3QtY292ZXJhZ2VcIiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgXCItZnRlc3QtY292ZXJhZ2VcIi4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgIi1mdGVzdC1jb3ZlcmFnZSIiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgR0NPVl9DRkxBR1M9IiRHQ09WX0NGTEFHUyAtZnRlc3QtY292ZXJhZ2UiCi0gICAgdHJ1ZQotICBlbHNlCi0gICAgdHJ1ZQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLSAgICAgICAgR0NPVl9DRkxBR1M9YGVjaG8gIiRHQ09WX0NGTEFHUyIgfCBzZWQgLWUgJ3MvLU9bMC05XSovL2cnYAotICAgICAgICAgICAgICAgIEdDT1ZfTElCUz0tbGdjb3YKLQotCi0gICAgR0NPVj1gZWNobyAkQ0MgfCBzZWQgcy9nY2MvZ2Nvdi9nYAotCi0KLSAgICBHU1RfR0NPVl9FTkFCTEVEPXllcwotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEdTVF9HQ09WX0VOQUJMRUQgMQotX0FDRU9GCi0KLSAgICAgICAgaWYgdGVzdCAieCRHU1RfR0NPVl9FTkFCTEVEIiA9ICJ4eWVzIgotICAgIHRoZW4KLSAgICAgIENGTEFHUz0iJENGTEFHUyAtTzAiCi0KLSAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLU8wIgotCi0gICAgICBGRkxBR1M9IiRGRkxBR1MgLU8wIgotCi0gICAgICBDQ0FTRkxBR1M9IiRDQ0FTRkxBR1MgLU8wIgotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGdjb3YgZW5hYmxlZCwgc2V0dGluZyBDRkxBR1MgYW5kIGZyaWVuZHMgdG8gJENGTEFHUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBnY292IGVuYWJsZWQsIHNldHRpbmcgQ0ZMQUdTIGFuZCBmcmllbmRzIHRvICRDRkxBR1MiID4mNjt9Ci0gICAgZmkKLSAgZmkKLSAgIGlmIHRlc3QgeCRlbmFibGVfZ2NvdiA9IHh5ZXM7IHRoZW4KLSAgR1NUX0dDT1ZfRU5BQkxFRF9UUlVFPQotICBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFPScjJwotZWxzZQotICBHU1RfR0NPVl9FTkFCTEVEX1RSVUU9JyMnCi0gIEdTVF9HQ09WX0VOQUJMRURfRkFMU0U9Ci1maQotCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leGFtcGxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9leGFtcGxlcytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2V4YW1wbGVzOwotICAgICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgICAgeWVzKSBCVUlMRF9FWEFNUExFUz15ZXMgOzsKLSAgICAgICAgICBubykgIEJVSUxEX0VYQU1QTEVTPW5vIDs7Ci0gICAgICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWV4YW1wbGVzIiAiJExJTkVOTyIgNSA7OwotICAgICAgICBlc2FjCi0KLWVsc2UKLSAgQlVJTERfRVhBTVBMRVM9eWVzCi1maQotICAgIGlmIHRlc3QgIngkQlVJTERfRVhBTVBMRVMiID0gInh5ZXMiOyB0aGVuCi0gIEJVSUxEX0VYQU1QTEVTX1RSVUU9Ci0gIEJVSUxEX0VYQU1QTEVTX0ZBTFNFPScjJwotZWxzZQotICBCVUlMRF9FWEFNUExFU19UUlVFPScjJwotICBCVUlMRF9FWEFNUExFU19GQUxTRT0KLWZpCi0KLQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wa2ctY29uZmlnLXBhdGggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BrZ19jb25maWdfcGF0aCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfcGtnX2NvbmZpZ19wYXRoOwotICAgICAgIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9JHt3aXRodmFsfQotICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogU2V0IFBLR19DT05GSUdfUEFUSCB0byAkUEtHX0NPTkZJR19QQVRIIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFNldCBQS0dfQ09ORklHX1BBVEggdG8gJFBLR19DT05GSUdfUEFUSCIgPiY2O30KLQotZmkKLQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wYWNrYWdlLW5hbWUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BhY2thZ2VfbmFtZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfcGFja2FnZV9uYW1lOwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW5hbWUiICIkTElORU5PIiA1IDs7Ci0gICAgICAgIG5vKSAgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtcGFja2FnZS1uYW1lIiAiJExJTkVOTyIgNSA7OwotICAgICAgICAqKSAgIEdTVF9QQUNLQUdFX05BTUU9IiR7d2l0aHZhbH0iIDs7Ci0gICAgICBlc2FjCi0KLWVsc2UKLQotICAgICAgUD0KLSAgICAgIGlmIHRlc3QgIngkUCIgPSAieCIKLSAgICAgIHRoZW4KLSAgICAgICAgUD0kUEFDS0FHRV9OQU1FCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICJ4JFBBQ0tBR0VfVkVSU0lPTl9OQU5PIiA9ICJ4MCIKLSAgICAgIHRoZW4KLSAgICAgICAgR1NUX1BBQ0tBR0VfTkFNRT0iJFAgc291cmNlIHJlbGVhc2UiCi0gICAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngxIgotICAgICAgICB0aGVuCi0gICAgICAgICAgR1NUX1BBQ0tBR0VfTkFNRT0iJFAgZ2l0IgotICAgICAgICBlbHNlCi0gICAgICAgICAgR1NUX1BBQ0tBR0VfTkFNRT0iJFAgcHJlcmVsZWFzZSIKLSAgICAgICAgZmkKLSAgICAgIGZpCi0KLQotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRHU1RfUEFDS0FHRV9OQU1FIGFzIHBhY2thZ2UgbmFtZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyAkR1NUX1BBQ0tBR0VfTkFNRSBhcyBwYWNrYWdlIG5hbWUiID4mNjt9Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX1BBQ0tBR0VfTkFNRSAiJEdTVF9QQUNLQUdFX05BTUUiCi1fQUNFT0YKLQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBhY2thZ2Utb3JpZ2luIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wYWNrYWdlX29yaWdpbitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfcGFja2FnZV9vcmlnaW47Ci0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICB5ZXMpIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLXBhY2thZ2Utb3JpZ2luIiAiJExJTkVOTyIgNSA7OwotICAgICAgICBubykgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLXBhY2thZ2Utb3JpZ2luIiAiJExJTkVOTyIgNSA7OwotICAgICAgICAqKSAgIEdTVF9QQUNLQUdFX09SSUdJTj0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLQotZWxzZQotICBHU1RfUEFDS0FHRV9PUklHSU49IlVua25vd24gcGFja2FnZSBvcmlnaW4iCi1maQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgJEdTVF9QQUNLQUdFX09SSUdJTiBhcyBwYWNrYWdlIG9yaWdpbiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyAkR1NUX1BBQ0tBR0VfT1JJR0lOIGFzIHBhY2thZ2Ugb3JpZ2luIiA+JjY7fQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEdTVF9QQUNLQUdFX09SSUdJTiAiJEdTVF9QQUNLQUdFX09SSUdJTiIKLV9BQ0VPRgotCi0KLQotCi0KLSAgR1NUX1BLR19DT05GSUdfUEFUSD0iXCQodG9wX2J1aWxkZGlyKS9wa2djb25maWciCi0gIGlmIHRlc3QgIngkUEtHX0NPTkZJR19QQVRIIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUEtHX0NPTkZJR19QQVRIPSIkR1NUX1BLR19DT05GSUdfUEFUSDokUEtHX0NPTkZJR19QQVRIIgotICBmaQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgR1NUX1BLR19DT05GSUdfUEFUSCA9ICRHU1RfUEtHX0NPTkZJR19QQVRIIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nIEdTVF9QS0dfQ09ORklHX1BBVEggPSAkR1NUX1BLR19DT05GSUdfUEFUSCIgPiY2O30KLQotCi0KLSAgaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDAiOyB0aGVuCi0KLSAgICAgIGlmIHRlc3QgInh5ZXMiID0gInhubyIgLW8gInh5ZXMiID0gIngiOyB0aGVuCi0gICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT1gZGF0ZSAtdSAiKyVZLSVtLSVkVCVIOiVNWiJgCi0gIGVsaWYgdGVzdCAieHllcyIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgIGlmICggZWNobyAgIiR7c3JjZGlyfS9nc3RyZWFtZXIuZG9hcCIgIHwgZ3JlcCAnXjIwWzEtOV1bMC05XS1bMC0xXVswLTldLVswLTNdWzAtOV0nID4vZGV2L251bGwgKSA7IHRoZW4KLSAgICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9ICIke3NyY2Rpcn0vZ3N0cmVhbWVyLmRvYXAiCi0gICAgZWxzZQotICAgICAgICAgICAgWVlZWV9NTV9ERD1gc2ggIiR7c3JjZGlyfS9jb21tb24vZXh0cmFjdC1yZWxlYXNlLWRhdGUtZnJvbS1kb2FwLWZpbGUiICAkUEFDS0FHRV9WRVJTSU9OX01BSk9SLiRQQUNLQUdFX1ZFUlNJT05fTUlOT1IuJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAgICIke3NyY2Rpcn0vZ3N0cmVhbWVyLmRvYXAiIGA7Ci0gICAgICBpZiB0ZXN0ICJ4JFlZWVlfTU1fREQiICE9ICJ4IjsgdGhlbgotICAgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSRZWVlZX01NX0RECi0gICAgICBlbHNlCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJTRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FOiBjb3VsZCBub3QgZXh0cmFjdAotICAgICAgICAgICAgcmVsZWFzZSBkYXRlIGZvciByZWxlYXNlIHZlcnNpb24gICRQQUNLQUdFX1ZFUlNJT05fTUFKT1IuJFBBQ0tBR0VfVkVSU0lPTl9NSU5PUi4kUEFDS0FHRV9WRVJTSU9OX01JQ1JPICBmcm9tICBcIiR7c3JjZGlyfS9nc3RyZWFtZXIuZG9hcFwiICIgIiRMSU5FTk8iIDUKLSAgICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0iIgotICAgICAgZmkKLSAgICBmaQotICAgIGVsaWYgKCBlY2hvIHllcyB8IGdyZXAgJ14yMFsxLTldWzAtOV0tWzAtMV1bMC05XS1bMC0zXVswLTldJyA+L2Rldi9udWxsICkgOyB0aGVuCi0gICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT15ZXMKLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogaW52YWxpZCBmaXJzdCBhcmd1bWVudCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBTRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FOiBpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IiA+JjI7fQotICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9IiIKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID0gIngiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBJbnZhbGlkIHBhY2thZ2UgcmVsZWFzZSBkYXRlIHRpbWU6ICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEludmFsaWQgcGFja2FnZSByZWxlYXNlIGRhdGUgdGltZTogJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mMjt9Ci0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFNldHRpbmcgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSB0byAkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBTZXR0aW5nIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgdG8gJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mNjt9Ci0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FICIkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIKLV9BQ0VPRgotCi0gIGZpCi0KLSAgZWxzZQotCi0gICAgICBpZiB0ZXN0ICJ4bm8iID0gInhubyIgLW8gInhubyIgPSAieCI7IHRoZW4KLSAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPWBkYXRlIC11ICIrJVktJW0tJWRUJUg6JU1aImAKLSAgZWxpZiB0ZXN0ICJ4bm8iID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICBpZiAoIGVjaG8gIHwgZ3JlcCAnXjIwWzEtOV1bMC05XS1bMC0xXVswLTldLVswLTNdWzAtOV0nID4vZGV2L251bGwgKSA7IHRoZW4KLSAgICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9Ci0gICAgZWxzZQotICAgICAgICAgICAgWVlZWV9NTV9ERD1gc2ggIiR7c3JjZGlyfS9jb21tb24vZXh0cmFjdC1yZWxlYXNlLWRhdGUtZnJvbS1kb2FwLWZpbGUiICBgOwotICAgICAgaWYgdGVzdCAieCRZWVlZX01NX0REIiAhPSAieCI7IHRoZW4KLSAgICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0kWVlZWV9NTV9ERAotICAgICAgZWxzZQotICAgICAgICBhc19mbl9lcnJvciAkPyAiU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogY291bGQgbm90IGV4dHJhY3QKLSAgICAgICAgICAgIHJlbGVhc2UgZGF0ZSBmb3IgcmVsZWFzZSB2ZXJzaW9uICBmcm9tICIgIiRMSU5FTk8iIDUKLSAgICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0iIgotICAgICAgZmkKLSAgICBmaQotICAgIGVsaWYgKCBlY2hvIG5vIHwgZ3JlcCAnXjIwWzEtOV1bMC05XS1bMC0xXVswLTldLVswLTNdWzAtOV0nID4vZGV2L251bGwgKSA7IHRoZW4KLSAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFNFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU6IGludmFsaWQgZmlyc3QgYXJndW1lbnQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogaW52YWxpZCBmaXJzdCBhcmd1bWVudCIgPiYyO30KLSAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSIiCi0gIGZpCi0KLSAgaWYgdGVzdCAieCRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA9ICJ4IjsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogSW52YWxpZCBwYWNrYWdlIHJlbGVhc2UgZGF0ZSB0aW1lOiAkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbnZhbGlkIHBhY2thZ2UgcmVsZWFzZSBkYXRlIHRpbWU6ICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA+JjI7fQotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBTZXR0aW5nIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgdG8gJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogU2V0dGluZyBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHRvICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA+JjY7fQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSAiJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiCi1fQUNFT0YKLQotICBmaQotCi0gIGZpCi0KLQotIyBXZSBvbmx5IHVzZSB0aGlzIHdoZW4gYnVpbGRpbmcgd2l0aCBNU1ZDLCB3aGljaCBpcyBvbmx5IGRvbmUgd2l0aCB0aGUKLSMgYWx0ZXJuYXRlIE1lc29uIGJ1aWxkIHN5c3RlbSBmaWxlcwotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQz0wCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWJhc2gtY29tcGxldGlvbi1kaXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2Jhc2hfY29tcGxldGlvbl9kaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2Jhc2hfY29tcGxldGlvbl9kaXI7Ci1lbHNlCi0gIHdpdGhfYmFzaF9jb21wbGV0aW9uX2Rpcj15ZXMKLWZpCi0KLQotaWYgdGVzdCAieCR3aXRoX2Jhc2hfY29tcGxldGlvbl9kaXIiID0gInh5ZXMiCi10aGVuCi0gICAgZXh0cmFfYXJncz0KLQotICAgIGlmIHRlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiCi0gICAgdGhlbgotICAgICAgICBleHRyYV9hcmdzPSItLWRlZmluZS12YXJpYWJsZT1wcmVmaXg9XCIkcHJlZml4XCIiCi0gICAgZmkKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCQVNIX0NPTVBMRVRJT04iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJBU0hfQ09NUExFVElPTi4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkQkFTSF9DT01QTEVUSU9OX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0JBU0hfQ09NUExFVElPTl9DRkxBR1M9IiRCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiYmFzaC1jb21wbGV0aW9uID49IDIuMFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJiYXNoLWNvbXBsZXRpb24gPj0gMi4wIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0JBU0hfQ09NUExFVElPTl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJiYXNoLWNvbXBsZXRpb24gPj0gMi4wIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkQkFTSF9DT01QTEVUSU9OX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9CQVNIX0NPTVBMRVRJT05fTElCUz0iJEJBU0hfQ09NUExFVElPTl9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiYmFzaC1jb21wbGV0aW9uID49IDIuMFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJiYXNoLWNvbXBsZXRpb24gPj0gMi4wIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0JBU0hfQ09NUExFVElPTl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgImJhc2gtY29tcGxldGlvbiA+PSAyLjAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgQkFTSF9DT01QTEVUSU9OX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiYmFzaC1jb21wbGV0aW9uID49IDIuMCJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEJBU0hfQ09NUExFVElPTl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImJhc2gtY29tcGxldGlvbiA+PSAyLjAiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRCQVNIX0NPTVBMRVRJT05fUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgICAgICAgICAgICBCQVNIX0NPTVBMRVRJT05fRElSPSIkZGF0YWRpci9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMiCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0JQkFTSF9DT01QTEVUSU9OX0RJUj0iJGRhdGFkaXIvYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zIgotZWxzZQotCUJBU0hfQ09NUExFVElPTl9DRkxBR1M9JHBrZ19jdl9CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTCi0JQkFTSF9DT01QTEVUSU9OX0xJQlM9JHBrZ19jdl9CQVNIX0NPTVBMRVRJT05fTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCUJBU0hfQ09NUExFVElPTl9ESVI9ImBldmFsIHBrZy1jb25maWcgJGV4dHJhX2FyZ3MgLS12YXJpYWJsZT1jb21wbGV0aW9uc2RpciBiYXNoLWNvbXBsZXRpb25gIgotZmkKLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQkFTSF9DT01QTEVUSU9OIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBCQVNIX0NPTVBMRVRJT04uLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEJBU0hfQ09NUExFVElPTl9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTPSIkQkFTSF9DT01QTEVUSU9OX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImJhc2gtY29tcGxldGlvbiA+PSAyLjBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiYmFzaC1jb21wbGV0aW9uID49IDIuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiYmFzaC1jb21wbGV0aW9uID49IDIuMCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEJBU0hfQ09NUExFVElPTl9MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfQkFTSF9DT01QTEVUSU9OX0xJQlM9IiRCQVNIX0NPTVBMRVRJT05fTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImJhc2gtY29tcGxldGlvbiA+PSAyLjBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiYmFzaC1jb21wbGV0aW9uID49IDIuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9CQVNIX0NPTVBMRVRJT05fTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJiYXNoLWNvbXBsZXRpb24gPj0gMi4wIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEJBU0hfQ09NUExFVElPTl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImJhc2gtY29tcGxldGlvbiA+PSAyLjAiYAotICAgICAgICBlbHNlCi0JICAgICAgICBCQVNIX0NPTVBMRVRJT05fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJiYXNoLWNvbXBsZXRpb24gPj0gMi4wImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkQkFTSF9DT01QTEVUSU9OX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgQkFTSF9IRUxQRVJTX0RJUj0iJGRhdGFkaXIvYmFzaC1jb21wbGV0aW9uL2hlbHBlcnMiCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0JQkFTSF9IRUxQRVJTX0RJUj0iJGRhdGFkaXIvYmFzaC1jb21wbGV0aW9uL2hlbHBlcnMiCi1lbHNlCi0JQkFTSF9DT01QTEVUSU9OX0NGTEFHUz0kcGtnX2N2X0JBU0hfQ09NUExFVElPTl9DRkxBR1MKLQlCQVNIX0NPTVBMRVRJT05fTElCUz0kcGtnX2N2X0JBU0hfQ09NUExFVElPTl9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JQkFTSF9IRUxQRVJTX0RJUj0iYGV2YWwgcGtnLWNvbmZpZyAkZXh0cmFfYXJncyAtLXZhcmlhYmxlPWhlbHBlcnNkaXIgYmFzaC1jb21wbGV0aW9uYCIKLWZpCi1lbHNlCi0gICAgQkFTSF9DT01QTEVUSU9OX0RJUj0iJHdpdGhfYmFzaF9jb21wbGV0aW9uX2Rpci9jb21wbGV0aW9ucyIKLSAgICBCQVNIX0hFTFBFUlNfRElSPSIkd2l0aF9iYXNoX2NvbXBsZXRpb25fZGlyL2hlbHBlcnMiCi1maQotCi0KLQotIGlmIHRlc3QgIngkd2l0aF9iYXNoX2NvbXBsZXRpb25fZGlyIiAhPSAieG5vIjsgdGhlbgotICBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUU9Ci0gIEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fRkFMU0U9JyMnCi1lbHNlCi0gIEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fVFJVRT0nIycKLSAgRU5BQkxFX0JBU0hfQ09NUExFVElPTl9GQUxTRT0KLWZpCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBwbHVnaW5zIG9yIG5vdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBwbHVnaW5zIG9yIG5vdC4uLiAiID4mNjsgfQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYy1wbHVnaW5zIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpY19wbHVnaW5zK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljX3BsdWdpbnM7IGNhc2UgJGVuYWJsZXZhbCBpbiAjKAotICBubykgOgotICAgICA7OyAjKAotICB5ZXMpIDoKLSAgICAgOzsgIygKLSAgKikgOgotICAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgXCIkZW5hYmxldmFsXCIgZm9yIC0tZW5hYmxlLXN0YXRpYy1wbHVnaW5zIiAiJExJTkVOTyIgNSA7OwotZXNhYwotZWxzZQotICBlbmFibGVfc3RhdGljX3BsdWdpbnM9bm8KLWZpCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpY19wbHVnaW5zIiA+JjUKLSRhc19lY2hvICIkZW5hYmxlX3N0YXRpY19wbHVnaW5zIiA+JjY7IH0KLWlmIHRlc3QgIngkZW5hYmxlX3N0YXRpY19wbHVnaW5zIiA9IHh5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUMgMSIgPj5jb25mZGVmcy5oCi0KLSAgR1NUX1BMVUdJTl9MSUJUT09MRkxBR1M9IiIKLWVsc2UKLSAgR1NUX1BMVUdJTl9MSUJUT09MRkxBR1M9Ii0tdGFnPWRpc2FibGUtc3RhdGljIgotZmkKLQotIGlmIHRlc3QgIngkZW5hYmxlX3N0YXRpY19wbHVnaW5zIiA9ICJ4eWVzIjsgdGhlbgotICBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19UUlVFPQotICBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19GQUxTRT0nIycKLWVsc2UKLSAgR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUNfVFJVRT0nIycKLSAgR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUNfRkFMU0U9Ci1maQotCi0KLWlmIHRlc3QgeCRlbmFibGVfc3RhdGljID0geHllcyAtYSB4JGVuYWJsZV9zaGFyZWQgPSB4bm87IHRoZW4KLSAgR1NUX09CSl9TVEFUSUNfQ0ZMQUdTPSItREdTVF9TVEFUSUNfQ09NUElMQVRJT04iCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGVzdHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfdGVzdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV90ZXN0czsKLSAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIEJVSUxEX1RFU1RTPXllcyA7OwotICAgICAgbm8pICBCVUlMRF9URVNUUz1ubyA7OwotICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLXRlc3RzIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLQotZWxzZQotICBCVUlMRF9URVNUUz15ZXMKLWZpCi0gIGlmIHRlc3QgIngkQlVJTERfVEVTVFMiID0gInh5ZXMiOyB0aGVuCi0gIEJVSUxEX1RFU1RTX1RSVUU9Ci0gIEJVSUxEX1RFU1RTX0ZBTFNFPScjJwotZWxzZQotICBCVUlMRF9URVNUU19UUlVFPScjJwotICBCVUlMRF9URVNUU19GQUxTRT0KLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhaWxpbmctdGVzdHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZmFpbGluZ190ZXN0cytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2ZhaWxpbmdfdGVzdHM7Ci0gICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBCVUlMRF9GQUlMSU5HX1RFU1RTPXllcyA7OwotICAgICAgbm8pICBCVUlMRF9GQUlMSU5HX1RFU1RTPW5vIDs7Ci0gICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtZmFpbGluZy10ZXN0cyIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi0KLWVsc2UKLSAgQlVJTERfRkFJTElOR19URVNUUz1ubwotZmkKLSAgaWYgdGVzdCAieCRCVUlMRF9GQUlMSU5HX1RFU1RTIiA9ICJ4eWVzIjsgdGhlbgotICBCVUlMRF9GQUlMSU5HX1RFU1RTX1RSVUU9Ci0gIEJVSUxEX0ZBSUxJTkdfVEVTVFNfRkFMU0U9JyMnCi1lbHNlCi0gIEJVSUxEX0ZBSUxJTkdfVEVTVFNfVFJVRT0nIycKLSAgQlVJTERfRkFJTElOR19URVNUU19GQUxTRT0KLWZpCi0KLWlmIHRlc3QgeCRCVUlMRF9GQUlMSU5HX1RFU1RTID0geHllczsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGJ1aWxkaW5nIHRlc3RzIGtub3duIHRvIGZhaWwsIHVzZSAtLWRpc2FibGUtZmFpbGluZy10ZXN0cyB0byBkaXNhYmxlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGJ1aWxkaW5nIHRlc3RzIGtub3duIHRvIGZhaWwsIHVzZSAtLWRpc2FibGUtZmFpbGluZy10ZXN0cyB0byBkaXNhYmxlIiA+JjI7fQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFNpc3N5ICEgQnkgYXNraW5nIHRvIG5vdCBidWlsZCB0aGUgdGVzdHMga25vd24gdG8gZmFpbCwgeW91IGhlcmVieSB3YWl2ZSB5b3VyIHJpZ2h0IHRvIGN1c3RvbWVyIHN1cHBvcnQuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhpcyBFVUxBLCBwbGVhc2UgcHJlc3MgQ3RybC1DIGJlZm9yZSB0aGUgbmV4dCBsaW5lIGlzIHByaW50ZWQuICBCeSBhbGxvd2luZyB0aGUgbmV4dCBsaW5lIHRvIGJlIHByaW50ZWQsIHlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgRVVMQS4iID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogU2lzc3kgISBCeSBhc2tpbmcgdG8gbm90IGJ1aWxkIHRoZSB0ZXN0cyBrbm93biB0byBmYWlsLCB5b3UgaGVyZWJ5IHdhaXZlIHlvdXIgcmlnaHQgdG8gY3VzdG9tZXIgc3VwcG9ydC4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGlzIEVVTEEsIHBsZWFzZSBwcmVzcyBDdHJsLUMgYmVmb3JlIHRoZSBuZXh0IGxpbmUgaXMgcHJpbnRlZC4gIEJ5IGFsbG93aW5nIHRoZSBuZXh0IGxpbmUgdG8gYmUgcHJpbnRlZCwgeW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBFVUxBLiIgPiYyO30KLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1iZW5jaG1hcmtzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2JlbmNobWFya3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9iZW5jaG1hcmtzOwotICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgQlVJTERfQkVOQ0hNQVJLUz15ZXMgOzsKLSAgICAgIG5vKSAgQlVJTERfQkVOQ0hNQVJLUz1ubyA7OwotICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWJlbmNobWFya3MiICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotCi1lbHNlCi0gIEJVSUxEX0JFTkNITUFSS1M9eWVzCi1maQotICBpZiB0ZXN0ICJ4JEJVSUxEX0JFTkNITUFSS1MiID0gInh5ZXMiOyB0aGVuCi0gIEJVSUxEX0JFTkNITUFSS1NfVFJVRT0KLSAgQlVJTERfQkVOQ0hNQVJLU19GQUxTRT0nIycKLWVsc2UKLSAgQlVJTERfQkVOQ0hNQVJLU19UUlVFPScjJwotICBCVUlMRF9CRU5DSE1BUktTX0ZBTFNFPQotZmkKLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdG9vbHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfdG9vbHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV90b29sczsKLSAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIEJVSUxEX1RPT0xTPXllcyA7OwotICAgICAgbm8pICBCVUlMRF9UT09MUz1ubyA7OwotICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLXRvb2xzIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLQotZWxzZQotICBCVUlMRF9UT09MUz15ZXMKLWZpCi0gIGlmIHRlc3QgIngkQlVJTERfVE9PTFMiID0gInh5ZXMiOyB0aGVuCi0gIEJVSUxEX1RPT0xTX1RSVUU9Ci0gIEJVSUxEX1RPT0xTX0ZBTFNFPScjJwotZWxzZQotICBCVUlMRF9UT09MU19UUlVFPScjJwotICBCVUlMRF9UT09MU19GQUxTRT0KLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbmluZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25pbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25pbmc7Ci0gICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfUE9JU09OSU5HPXllcyA7OwotICAgICAgbm8pICBVU0VfUE9JU09OSU5HPW5vIDs7Ci0gICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1wb2lzb25pbmciICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotCi1lbHNlCi0gIFVTRV9QT0lTT05JTkc9bm8KLWZpCi0gaWYgdGVzdCAieCRVU0VfUE9JU09OSU5HIiA9IHh5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgVVNFX1BPSVNPTklORyAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIFBUUCBzdXBwb3J0IGNhbiBiZSBlbmFibGVkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgUFRQIHN1cHBvcnQgY2FuIGJlIGVuYWJsZWQuLi4gIiA+JjY7IH0KLWNhc2UgIiRob3N0X29zIiBpbgotICAqYW5kcm9pZCopCi0gICAgICAgIEhBVkVfUFRQPW5vCi0gICAgOzsKLSAgbWluZ3cqfHB3MzIqfGN5Z3dpbiopCi0gICAgICAgIEhBVkVfUFRQPW5vCi0gICAgOzsKLSAgZGFyd2luKikKLSAgICAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfcHJlcHJvYyAiJExJTkVOTyIgIk1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaCIgImFjX2N2X2hlYWRlcl9Nb2JpbGVDb3JlU2VydmljZXNfTW9iaWxlQ29yZVNlcnZpY2VzX2giCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9Nb2JpbGVDb3JlU2VydmljZXNfTW9iaWxlQ29yZVNlcnZpY2VzX2giID0geHllczsgdGhlbiA6Ci0gIEhBVkVfUFRQPSJubyIKLWVsc2UKLSAgSEFWRV9QVFA9InllcyIKLWZpCi0KLQotICAgIDs7Ci0gIGxpbnV4KnxkYXJ3aW4qfHNvbGFyaXMqfG5ldGJzZCp8ZnJlZWJzZCp8b3BlbmJzZCp8a2ZyZWVic2QqfGRyYWdvbmZseSp8Z251KikKLSAgICBIQVZFX1BUUD15ZXMKLSAgICA7OwotICAqKQotICAgIEhBVkVfUFRQPW5vCi0gICAgOzsKLWVzYWMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9QVFAiID4mNQotJGFzX2VjaG8gIiRIQVZFX1BUUCIgPiY2OyB9Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wdHAtaGVscGVyLXNldHVpZC11c2VyIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wdHBfaGVscGVyX3NldHVpZF91c2VyK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9wdHBfaGVscGVyX3NldHVpZF91c2VyOwotICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgIT0gIngiCi0gICAgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfVVNFUiAiJHdpdGh2YWwiCi1fQUNFT0YKLQotICAgIGZpCi0KLWZpCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXB0cC1oZWxwZXItc2V0dWlkLWdyb3VwIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wdHBfaGVscGVyX3NldHVpZF9ncm91cCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfcHRwX2hlbHBlcl9zZXR1aWRfZ3JvdXA7Ci0gICAgaWYgdGVzdCAieCR3aXRodmFsIiAhPSAieCIKLSAgICB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9HUk9VUCAiJHdpdGh2YWwiCi1fQUNFT0YKLQotICAgIGZpCi0KLWZpCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXB0cC1oZWxwZXItcGVybWlzc2lvbnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnM7Ci1lbHNlCi0gIHdpdGhfcHRwX2hlbHBlcl9wZXJtaXNzaW9ucz1hdXRvCi1maQotCi0KLWdzdF9wdHBfaGF2ZV9jYXA9bm8KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjYXBfaW5pdCBpbiAtbGNhcCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgY2FwX2luaXQgaW4gLWxjYXAuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX2NhcF9jYXBfaW5pdCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sY2FwICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBjYXBfaW5pdCAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGNhcF9pbml0ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9jYXBfY2FwX2luaXQ9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9jYXBfY2FwX2luaXQ9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2NhcF9jYXBfaW5pdCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9jYXBfY2FwX2luaXQiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfY2FwX2NhcF9pbml0IiA9IHh5ZXM7IHRoZW4gOgotICBIQVZFX0NBUD15ZXMKLWVsc2UKLSAgSEFWRV9DQVA9bm8KLWZpCi0KLSAgaWYgdGVzdCAieCRIQVZFX0NBUCIgPSAieHllcyI7IHRoZW4KLSAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL2NhcGFiaWxpdHkuaCIgImFjX2N2X2hlYWRlcl9zeXNfY2FwYWJpbGl0eV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfY2FwYWJpbGl0eV9oIiA9IHh5ZXM7IHRoZW4gOgotICA6Ci1lbHNlCi0gIEhBVkVfQ0FQPW5vCi1maQotCi0KLSAgICBpZiB0ZXN0ICJ4JEhBVkVfQ0FQIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICAgICAgQ0FQX0xJQlM9Ii1sY2FwIgotCi0gICAgICAgICAgICAgICAgICAgICAgIGdzdF9wdHBfaGF2ZV9jYXA9eWVzCi0gICAgZWxzZQotICAgICAgOgotICAgIGZpCi0gIGVsc2UKLSAgICA6Ci0gIGZpCi0KLQotCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic2V0Y2FwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBzZXRjYXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX1NFVENBUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJFNFVENBUCBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9TRVRDQVA9IiRTRVRDQVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1hc19kdW1teT0iJFBBVEg6L3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW4iCi1mb3IgYXNfZGlyIGluICRhc19kdW1teQotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9TRVRDQVA9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VUQ0FQIiAmJiBhY19jdl9wYXRoX1NFVENBUD0ibm8iCi0gIDs7Ci1lc2FjCi1maQotU0VUQ0FQPSRhY19jdl9wYXRoX1NFVENBUAotaWYgdGVzdCAtbiAiJFNFVENBUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTRVRDQVAiID4mNQotJGFzX2VjaG8gIiRTRVRDQVAiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotCi1pZiB0ZXN0ICJ4JEhBVkVfUFRQIiA9ICJ4eWVzIjsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1BUUCAxIiA+PmNvbmZkZWZzLmgKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBTSU9DR0lGQ09ORiwgU0lPQ0dJRkZMQUdTIGFuZCBTSU9DR0lGSFdBRERSIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBTSU9DR0lGQ09ORiwgU0lPQ0dJRkZMQUdTIGFuZCBTSU9DR0lGSFdBRERSLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgICAgICAgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotICAgICAgICAjaW5jbHVkZSA8bmV0L2lmLmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gICAgICAgIHN0cnVjdCBpZnJlcSBpZnI7Ci0gICAgICAgIHN0cnVjdCBpZmNvbmYgaWZjOwotICAgICAgICBpb2N0bCgwLCBTSU9DR0lGQ09ORiwgJmlmYyk7Ci0gICAgICAgIGlvY3RsKDAsIFNJT0NHSUZGTEFHUywgJmlmcik7Ci0gICAgICAgIGlvY3RsKDAsIFNJT0NHSUZIV0FERFIsICZpZnIpOwotICAgICAgICBpbnQgZHVtbXkgPSBpZnIuaWZyX2h3YWRkci5zYV9kYXRhWzBdOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NJT0NHSUZDT05GX1NJT0NHSUZGTEFHU19TSU9DR0lGSFdBRERSIDEiID4+Y29uZmRlZnMuaAotCi0KLWVsc2UKLQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZXRpZmFkZHJzKCkgYW5kIEFGX0xJTksiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldGlmYWRkcnMoKSBhbmQgQUZfTElOSy4uLiAiID4mNjsgfQotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0gICAgICAgICNpbmNsdWRlIDxpZmFkZHJzLmg+Ci0gICAgICAgICNpbmNsdWRlIDxuZXQvaWYuaD4KLSAgICAgICAgI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICAgICAgICBzdHJ1Y3QgaWZhZGRycyAqaWZhZGRyOwotICAgICAgICBnZXRpZmFkZHJzKCZpZmFkZHIpOwotICAgICAgICBpbnQgZHVtbXkgPSAoaWZhZGRyLT5pZmFfZmxhZ3MgJiBJRkZfTE9PUEJBQ0spICYmIGlmYWRkci0+aWZhX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9MSU5LOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVElGQUREUlNfQUZfTElOSyAxIiA+PmNvbmZkZWZzLmgKLQotCi1lbHNlCi0KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaW5zdGFsbCBnc3QtcHRwLWhlbHBlciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaW5zdGFsbCBnc3QtcHRwLWhlbHBlci4uLiAiID4mNjsgfQotaWYgdGVzdCAieCR3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnMiID0gInhhdXRvIjsgdGhlbgotICAgIGlmIHRlc3QgIngkZ3N0X3B0cF9oYXZlX2NhcCIgPSAieHllcyIgLWEgIngkU0VUQ0FQIiAhPSAieG5vIjsgdGhlbgotICAgICAgICB3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnM9ImNhcGFiaWxpdGllcyIKLSAgICBlbHNlCi0gICAgICAgIHdpdGhfcHRwX2hlbHBlcl9wZXJtaXNzaW9ucz0ic2V0dWlkLXJvb3QiCi0gICAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfcHRwX2hlbHBlcl9wZXJtaXNzaW9ucyIgPiY1Ci0kYXNfZWNobyAiJHdpdGhfcHRwX2hlbHBlcl9wZXJtaXNzaW9ucyIgPiY2OyB9Ci0KLWNhc2UgIiR3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnMiIGluCi0gIG5vbmUpCi0gICAgOzsKLSAgc2V0dWlkLXJvb3QpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRQX0hFTFBFUl9TRVRVSUQgMSIgPj5jb25mZGVmcy5oCi0KLSAgICA7OwotICBjYXBhYmlsaXRpZXMpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVMgMSIgPj5jb25mZGVmcy5oCi0KLSAgICA7OwotICAqKQotICAgIGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIHBhcmFtZXRlciAkd2l0aF9wdHBfaGVscGVyX3Blcm1pc3Npb25zIiAiJExJTkVOTyIgNQotICAgIDs7Ci1lc2FjCi0KLWZpCi0KLSBpZiB0ZXN0ICJ4JEhBVkVfUFRQIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX1BUUF9UUlVFPQotICBIQVZFX1BUUF9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9QVFBfVFJVRT0nIycKLSAgSEFWRV9QVFBfRkFMU0U9Ci1maQotCi0gaWYgdGVzdCAieCR3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnMiID0gInhzZXR1aWQtcm9vdCI7IHRoZW4KLSAgSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9UUlVFPQotICBIQVZFX1BUUF9IRUxQRVJfU0VUVUlEX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX1BUUF9IRUxQRVJfU0VUVUlEX1RSVUU9JyMnCi0gIEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfRkFMU0U9Ci1maQotCi0gaWYgdGVzdCAieCR3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnMiID0gInhjYXBhYmlsaXRpZXMiOyB0aGVuCi0gIEhBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVNfVFJVRT0KLSAgSEFWRV9QVFBfSEVMUEVSX0NBUEFCSUxJVElFU19GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9QVFBfSEVMUEVSX0NBUEFCSUxJVElFU19UUlVFPScjJwotICBIQVZFX1BUUF9IRUxQRVJfQ0FQQUJJTElUSUVTX0ZBTFNFPQotZmkKLQotCi0KLQotCi0gICAgY2FzZSAieCR7dGFyZ2V0X2NwdX0iIGluCi0gICAgeGk/ODYgfCB4az8gfCB4aT84Nl82NCkKLSAgICAgIGNhc2UgJHRhcmdldF9vcyBpbgotICAgICAgICAgc29sYXJpcyopCi0gICAgICAgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJfX2kzODYiICJhY19jdl9oYXZlX2RlY2xfX19pMzg2IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9fX2kzODYiID0geHllczsgdGhlbiA6Ci0gIEkzODZfQUJJPSJ5ZXMiCi1lbHNlCi0gIEkzODZfQUJJPSJubyIKLWZpCi0KLSAgICAgICAgICAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgIl9fYW1kNjQiICJhY19jdl9oYXZlX2RlY2xfX19hbWQ2NCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfX19hbWQ2NCIgPSB4eWVzOyB0aGVuIDoKLSAgQU1ENjRfQUJJPSJ5ZXMiCi1lbHNlCi0gIEFNRDY0X0FCST0ibm8iCi1maQotCi0KLSAgICAgICAgICAgIGlmIHRlc3QgIngkSTM4Nl9BQkkiID0gInh5ZXMiIDsgdGhlbgotICAgICAgICAgICAgICAgSEFWRV9DUFVfSTM4Nj15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfSTM4NiAxIiA+PmNvbmZkZWZzLmgKLQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGlmIHRlc3QgIngkQU1ENjRfQUJJIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgICAgICAgICAgICBIQVZFX0NQVV9YODZfNjQ9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX1g4Nl82NCAxIiA+PmNvbmZkZWZzLmgKLQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAqKQotICAgICAgICAgICAgSEFWRV9DUFVfSTM4Nj15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfSTM4NiAxIiA+PmNvbmZkZWZzLmgKLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ4JHt0YXJnZXRfY3B1fSIgaW4KLSAgICAgICAgICAgICAgeGkzODYgfCB4aTQ4NikgOzsKLSAgICAgICAgICAgICopCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUkRUU0MgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIHhwb3dlcnBjKQotICAgICAgSEFWRV9DUFVfUFBDPXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9QUEMgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4cG93ZXJwYzY0KQotICAgICAgSEFWRV9DUFVfUFBDNjQ9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX1BQQzY0IDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgeGFscGhhKikKLSAgICAgIEhBVkVfQ1BVX0FMUEhBPXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9BTFBIQSAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhhcmMqKQotICAgICAgSEFWRV9DUFVfQVJDPXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9BUkMgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4YXJtKikKLSAgICAgIEhBVkVfQ1BVX0FSTT15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQVJNIDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgeGFhcmNoNjQqKQotICAgICAgSEFWRV9DUFVfQUFSQ0g2ND15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQUFSQ0g2NCAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhzcGFyYyopCi0gICAgICBIQVZFX0NQVV9TUEFSQz15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfU1BBUkMgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4bWlwcyopCi0gICAgICBIQVZFX0NQVV9NSVBTPXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9NSVBTIDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgeGhwcGEqKQotICAgICAgSEFWRV9DUFVfSFBQQT15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfSFBQQSAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhzMzkwKikKLSAgICAgIEhBVkVfQ1BVX1MzOTA9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX1MzOTAgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4aWE2NCopCi0gICAgICBIQVZFX0NQVV9JQTY0PXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9JQTY0IDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgeG02OGsqKQotICAgICAgSEFWRV9DUFVfTTY4Sz15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfTTY4SyAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHh4ODZfNjQpCi0gICAgICBIQVZFX0NQVV9YODZfNjQ9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX1g4Nl82NCAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhjcmlzKQotICAgICAgSEFWRV9DUFVfQ1JJUz15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQ1JJUyAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhjcmlzdjMyKQotICAgICAgSEFWRV9DUFVfQ1JJU1YzMj15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQ1JJU1YzMiAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICBlc2FjCi0KLSAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfY19iaWdlbmRpYW4rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCi0gICAgIyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgdW5pdmVyc2FsIGNvbXBpbGVyLgotICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZm5kZWYgX19BUFBMRV9DQ19fCi0JICAgICAgIG5vdCBhIHVuaXZlcnNhbCBjYXBhYmxlIGNvbXBpbGVyCi0JICAgICAjZW5kaWYKLQkgICAgIHR5cGVkZWYgaW50IGR1bW15OwotCi1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotCSMgQ2hlY2sgZm9yIHBvdGVudGlhbCAtYXJjaCBmbGFncy4gIEl0IGlzIG5vdCB1bml2ZXJzYWwgdW5sZXNzCi0JIyB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIC1hcmNoIGZsYWdzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4KLQlhY19hcmNoPQotCWFjX3ByZXY9Ci0JZm9yIGFjX3dvcmQgaW4gJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTOyBkbwotCSBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KLQkgICBjYXNlICRhY193b3JkIGluCi0JICAgICBpPzg2IHwgeDg2XzY0IHwgcHBjIHwgcHBjNjQpCi0JICAgICAgIGlmIHRlc3QgLXogIiRhY19hcmNoIiB8fCB0ZXN0ICIkYWNfYXJjaCIgPSAiJGFjX3dvcmQiOyB0aGVuCi0JCSBhY19hcmNoPSRhY193b3JkCi0JICAgICAgIGVsc2UKLQkJIGFjX2N2X2NfYmlnZW5kaWFuPXVuaXZlcnNhbAotCQkgYnJlYWsKLQkgICAgICAgZmkKLQkgICAgICAgOzsKLQkgICBlc2FjCi0JICAgYWNfcHJldj0KLQkgZWxpZiB0ZXN0ICJ4JGFjX3dvcmQiID0gIngtYXJjaCI7IHRoZW4KLQkgICBhY19wcmV2PWFyY2gKLQkgZmkKLSAgICAgICBkb25lCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCi0gICAgICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotCi1pbnQKLW1haW4gKCkKLXsKLSNpZiAhIChkZWZpbmVkIEJZVEVfT1JERVIgJiYgZGVmaW5lZCBCSUdfRU5ESUFOIFwKLQkJICAgICAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOIFwKLQkJICAgICAmJiBMSVRUTEVfRU5ESUFOKQotCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKLQkgICAgICNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4KLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCQkjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0KLWludAotbWFpbiAoKQotewotI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgotCQkgbm90IGJpZyBlbmRpYW4KLQkJI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKLWVsc2UKLSAgYWNfY3ZfY19iaWdlbmRpYW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICBmaQotICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgotICAgICAgIyBTZWUgaWYgPGxpbWl0cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlzKS4KLSAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotaW50Ci1tYWluICgpCi17Ci0jaWYgISAoZGVmaW5lZCBfTElUVExFX0VORElBTiB8fCBkZWZpbmVkIF9CSUdfRU5ESUFOKQotCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MKLQkgICAgICNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBfQklHX0VORElBTiBvciBub3QuCi0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9CSUdfRU5ESUFOCi0JCSBub3QgYmlnIGVuZGlhbgotCQkjZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2NfYmlnZW5kaWFuPXllcwotZWxzZQotICBhY19jdl9jX2JpZ2VuZGlhbj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIGZpCi0gICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCi0gICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCi0gICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgotCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi1zaG9ydCBpbnQgYXNjaWlfbW1bXSA9Ci0JCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07Ci0JCXNob3J0IGludCBhc2NpaV9paVtdID0KLQkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKLQkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKLQkJICByZXR1cm4gYXNjaWlfbW1baV0gKyBhc2NpaV9paVtpXTsKLQkJfQotCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQotCQkgIHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9OwotCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQotCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OwotCQlpbnQgdXNlX2ViY2RpYyAoaW50IGkpIHsKLQkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOwotCQl9Ci0JCWV4dGVybiBpbnQgZm9vOwotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4KLQkgICAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKLQkgICAgZmkKLQkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgotCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCi0JCWFjX2N2X2NfYmlnZW5kaWFuPW5vCi0JICAgICAgZWxzZQotCQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KLQkJYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgotCSAgICAgIGZpCi0JICAgIGZpCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLQotCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLwotCSAgICAgdW5pb24KLQkgICAgIHsKLQkgICAgICAgbG9uZyBpbnQgbDsKLQkgICAgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsKLQkgICAgIH0gdTsKLQkgICAgIHUubCA9IDE7Ci0JICAgICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0gMTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfY19iaWdlbmRpYW49bm8KLWVsc2UKLSAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQotICAgIGZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2JpZ2VuZGlhbiIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjY7IH0KLSBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKAotICAgeWVzKQotICAgICAkYXNfZWNobyAiI2RlZmluZSBXT1JEU19CSUdFTkRJQU4gMSIgPj5jb25mZGVmcy5oCi07OyAjKAotICAgbm8pCi0gICAgICA7OyAjKAotICAgdW5pdmVyc2FsKQotCi0kYXNfZWNobyAiI2RlZmluZSBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQgMSIgPj5jb25mZGVmcy5oCi0KLSAgICAgOzsgIygKLSAgICopCi0gICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bmtub3duIGVuZGlhbm5lc3MKLSBwcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgIiRMSU5FTk8iIDUgOzsKLSBlc2FjCi0KLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9JMzg2IiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9JMzg2X1RSVUU9Ci0gIEhBVkVfQ1BVX0kzODZfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX0kzODZfVFJVRT0nIycKLSAgSEFWRV9DUFVfSTM4Nl9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfUFBDIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9QUENfVFJVRT0KLSAgSEFWRV9DUFVfUFBDX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9QUENfVFJVRT0nIycKLSAgSEFWRV9DUFVfUFBDX0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9QUEM2NCIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfUFBDNjRfVFJVRT0KLSAgSEFWRV9DUFVfUFBDNjRfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX1BQQzY0X1RSVUU9JyMnCi0gIEhBVkVfQ1BVX1BQQzY0X0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9BTFBIQSIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfQUxQSEFfVFJVRT0KLSAgSEFWRV9DUFVfQUxQSEFfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX0FMUEhBX1RSVUU9JyMnCi0gIEhBVkVfQ1BVX0FMUEhBX0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9BUkMiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX0FSQ19UUlVFPQotICBIQVZFX0NQVV9BUkNfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX0FSQ19UUlVFPScjJwotICBIQVZFX0NQVV9BUkNfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX0FSTSIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfQVJNX1RSVUU9Ci0gIEhBVkVfQ1BVX0FSTV9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9DUFVfQVJNX1RSVUU9JyMnCi0gIEhBVkVfQ1BVX0FSTV9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfU1BBUkMiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX1NQQVJDX1RSVUU9Ci0gIEhBVkVfQ1BVX1NQQVJDX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9TUEFSQ19UUlVFPScjJwotICBIQVZFX0NQVV9TUEFSQ19GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfSFBQQSIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfSFBQQV9UUlVFPQotICBIQVZFX0NQVV9IUFBBX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9IUFBBX1RSVUU9JyMnCi0gIEhBVkVfQ1BVX0hQUEFfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX01JUFMiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX01JUFNfVFJVRT0KLSAgSEFWRV9DUFVfTUlQU19GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9DUFVfTUlQU19UUlVFPScjJwotICBIQVZFX0NQVV9NSVBTX0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9TMzkwIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9TMzkwX1RSVUU9Ci0gIEhBVkVfQ1BVX1MzOTBfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX1MzOTBfVFJVRT0nIycKLSAgSEFWRV9DUFVfUzM5MF9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfSUE2NCIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfSUE2NF9UUlVFPQotICBIQVZFX0NQVV9JQTY0X0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9JQTY0X1RSVUU9JyMnCi0gIEhBVkVfQ1BVX0lBNjRfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX002OEsiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX002OEtfVFJVRT0KLSAgSEFWRV9DUFVfTTY4S19GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9DUFVfTTY4S19UUlVFPScjJwotICBIQVZFX0NQVV9NNjhLX0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9YODZfNjQiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX1g4Nl82NF9UUlVFPQotICBIQVZFX0NQVV9YODZfNjRfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX1g4Nl82NF9UUlVFPScjJwotICBIQVZFX0NQVV9YODZfNjRfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX0NSSVMiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX0NSSVNfVFJVRT0KLSAgSEFWRV9DUFVfQ1JJU19GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9DUFVfQ1JJU19UUlVFPScjJwotICBIQVZFX0NQVV9DUklTX0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9DUklTVjMyIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9DUklTVjMyX1RSVUU9Ci0gIEhBVkVfQ1BVX0NSSVNWMzJfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX0NSSVNWMzJfVFJVRT0nIycKLSAgSEFWRV9DUFVfQ1JJU1YzMl9GQUxTRT0KLWZpCi0KLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhPU1RfQ1BVICIkaG9zdF9jcHUiCi1fQUNFT0YKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFRBUkdFVF9DUFUgIiR0YXJnZXRfY3B1IgotX0FDRU9GCi0KLQotSE9TVF9DUFU9JGhvc3RfY3B1Ci0KLQotCi0KLQotICBjYXNlICRob3N0X29zIGluCi0gICAgcmhhcHNvZHkqKQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEdTVF9FWFRSQV9NT0RVTEVfU1VGRklYICIuZHlsaWIiCi1fQUNFT0YKLQotICAgICAgOzsKLSAgICBkYXJ3aW4qKQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEdTVF9FWFRSQV9NT0RVTEVfU1VGRklYICIuZHlsaWIiCi1fQUNFT0YKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfT1NYIDEKLV9BQ0VPRgotCi0gICAgICA7OwotICAgIGN5Z3dpbiopCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX0hBVkVfVU5TQUZFX0ZPUksgMQotX0FDRU9GCi0KLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgbXN2YyogfCBta3MqKQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfV0lOMzIgMQotX0FDRU9GCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLSByZXR1cm4gX19NU1ZDUlRfVkVSU0lPTl9fOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gICAgICAgICAgICAjaWYgX19NU1ZDUlRfVkVSU0lPTl9fIDwgMHgwNjAxCi0gICAgICAgICAgICAjZXJyb3IgIk1TVkNSVCB0b28gb2xkIgotICAgICAgICAgICAgI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0gICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IE1TVkNSVCB2ZXJzaW9uIGxvb2tzIG9rIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IE1TVkNSVCB2ZXJzaW9uIGxvb2tzIG9rIiA+JjY7fQotCi1lbHNlCi0KLSAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJNU1ZDUlQgdmVyc2lvbiB0b28gb2xkLCBuZWVkIGF0IGxlYXN0IFdpblhQIFNQMiIgIiRMSU5FTk8iIDUKLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1lbHNlCi0KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBTZXR0aW5nIE1TVkNSVCB2ZXJzaW9uIHRvIDB4MDYwMSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBTZXR0aW5nIE1TVkNSVCB2ZXJzaW9uIHRvIDB4MDYwMSIgPiY2O30KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBfX01TVkNSVF9WRVJTSU9OX18gMHgwNjAxCi1fQUNFT0YKLQotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICA7OwotICAgICAqKQotICAgICAgOzsKLSAgZXNhYwotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxhcmdlZmlsZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9sYXJnZWZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9sYXJnZWZpbGU7Ci1maQotCi1pZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87IHRoZW4KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3N5c19sYXJnZWZpbGVfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDPW5vCi0gICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotICAgICAgIGFjX3NhdmVfQ0M9JENDCi0gICAgICAgd2hpbGUgOjsgZG8KLQkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKLQkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgotCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCi0gICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAotICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKLSAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCi0jZGVmaW5lIExBUkdFX09GRl9UICgoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpIC0gMSArICgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkpCi0gIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQotCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCi0JCSAgICAgID8gMSA6IC0xXTsKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLQkgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBicmVhawotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKLQkgQ0M9IiRDQyAtbjMyIgotCSBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWsKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0Ci0JIGJyZWFrCi0gICAgICAgZG9uZQotICAgICAgIENDPSRhY19zYXZlX0NDCi0gICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotICAgIGZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiA+JjUKLSRhc19lY2hvICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgotICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCi0gIGZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAiID4mNjsgfQotaWYgJHthY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIHdoaWxlIDo7IGRvCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KLSAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCi0gICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycwotICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KLSNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkgLSAxICsgKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSkKLSAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCi0JCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKLQkJICAgICAgPyAxIDogLTFdOwotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubzsgYnJlYWsKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgotICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKLSAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCi0gICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLwotI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQotICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKLQkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQotCQkgICAgICA/IDEgOiAtMV07Ci1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0OyBicmVhawotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz11bmtub3duCi0gIGJyZWFrCi1kb25lCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjY7IH0KLWNhc2UgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIGluICMoCi0gIG5vIHwgdW5rbm93bikgOzsKLSAgKikKLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzCi1fQUNFT0YKLTs7Ci1lc2FjCi1ybSAtcmYgY29uZnRlc3QqCi0gIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBfTEFSR0VfRklMRVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAiID4mNjsgfQotaWYgJHthY19jdl9zeXNfbGFyZ2VfZmlsZXMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICB3aGlsZSA6OyBkbwotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCi0gICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAotICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKLSAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCi0jZGVmaW5lIExBUkdFX09GRl9UICgoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpIC0gMSArICgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkpCi0gIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQotCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCi0JCSAgICAgID8gMSA6IC0xXTsKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPW5vOyBicmVhawotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jZGVmaW5lIF9MQVJHRV9GSUxFUyAxCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCi0gICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAotICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKLSAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCi0jZGVmaW5lIExBUkdFX09GRl9UICgoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpIC0gMSArICgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkpCi0gIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQotCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCi0JCSAgICAgID8gMSA6IC0xXTsKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPTE7IGJyZWFrCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGFjX2N2X3N5c19sYXJnZV9maWxlcz11bmtub3duCi0gIGJyZWFrCi1kb25lCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNQotJGFzX2VjaG8gIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNjsgfQotY2FzZSAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIGluICMoCi0gIG5vIHwgdW5rbm93bikgOzsKLSAgKikKLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgX0xBUkdFX0ZJTEVTICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMKLV9BQ0VPRgotOzsKLWVzYWMKLXJtIC1yZiBjb25mdGVzdCoKLSAgZmkKLQotCi1maQotCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0gIGZpCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgZmkKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLSAgYWNfcHJvZ19yZWplY3RlZD1ubwotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCi0gICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKLSAgICAgICBjb250aW51ZQotICAgICBmaQotICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1pZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCi0gICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KLSAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCi0gIHNoaWZ0Ci0gIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgotICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgotICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KLSAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KLSAgICBzaGlmdAotICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgotICBmaQotZmkKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCi0gIGRvbmUKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KLSAgICBDQz0iIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIENDPSRhY19jdF9DQwotICBmaQotZmkKLQotZmkKLQotCi10ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLSRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotc2V0IFggJGFjX2NvbXBpbGUKLWFjX2NvbXBpbGVyPSQyCi1mb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCi0gIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgc2VkICcxMGFcCi0uLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCi0gICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotZG9uZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQotaWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCi0gIEdDQz15ZXMKLWVsc2UKLSAgR0NDPQotZmkKLWFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KLWFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZwotICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKLSAgIGFjX2N2X3Byb2dfY2NfZz1ubwotICAgQ0ZMQUdTPSItZyIKLSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1lbHNlCi0gIENGTEFHUz0iIgotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCi0JIENGTEFHUz0iLWciCi0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Ci1pZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCi0gIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKLWVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItZyAtTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIENGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ0ZMQUdTPQotICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9wcm9nX2NjX2M4OT1ubwotYWNfc2F2ZV9DQz0kQ0MKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotc3RydWN0IHN0YXQ7Ci0vKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCi1zdHJ1Y3QgYnVmIHsgaW50IHg7IH07Ci1GSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOwotc3RhdGljIGNoYXIgKmUgKHAsIGkpCi0gICAgIGNoYXIgKipwOwotICAgICBpbnQgaTsKLXsKLSAgcmV0dXJuIHBbaV07Ci19Ci1zdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCi17Ci0gIGNoYXIgKnM7Ci0gIHZhX2xpc3QgdjsKLSAgdmFfc3RhcnQgKHYscCk7Ci0gIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7Ci0gIHZhX2VuZCAodik7Ci0gIHJldHVybiBzOwotfQotCi0vKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcwotICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgotICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCi0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0Ci0gICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCi0gICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKLSAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KLWludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07Ci0KLS8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycwotICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLwotI2RlZmluZSBGT08oeCkgJ3gnCi1pbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKLQotaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Ci1zdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKLXN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OwotaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7Ci1pbnQgYXJnYzsKLWNoYXIgKiphcmd2OwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKLQktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgotZG8KLSAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCi0gIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKLUNDPSRhY19zYXZlX0NDCi0KLWZpCi0jIEFDX0NBQ0hFX1ZBTAotY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KLSAgeCkKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKLSAgeG5vKQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OwotICAqKQotICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Ci1lc2FjCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgotCi1maQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9wcm9nX2NjX2Nfbys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotICAjIE1ha2Ugc3VyZSBpdCB3b3JrcyBib3RoIHdpdGggJENDIGFuZCB3aXRoIHNpbXBsZSBjYy4KLSAgIyBGb2xsb3dpbmcgQUNfUFJPR19DQ19DX08sIHdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZQotICAjIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywKLSAgIyB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCi0gIGFtX2N2X3Byb2dfY2NfY19vPXllcwotICBmb3IgYW1faSBpbiAxIDI7IGRvCi0gICAgaWYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQiID4mNQotICAgKCRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0KSA+JjUgMj4mNQotICAgYWNfc3RhdHVzPSQ/Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSBcCi0gICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0OyB0aGVuCi0gICAgICA6IE9LCi0gICAgZWxzZQotICAgICAgYW1fY3ZfcHJvZ19jY19jX289bm8KLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBybSAtZiBjb3JlIGNvbmZ0ZXN0KgotICB1bnNldCBhbV9pCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9wcm9nX2NjX2NfbyIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3Byb2dfY2NfY19vIiA+JjY7IH0KLWlmIHRlc3QgIiRhbV9jdl9wcm9nX2NjX2NfbyIgIT0geWVzOyB0aGVuCi0gICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgotICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KLSAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgotICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAotICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKLSAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKLWZpCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEIi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGFtX191bml2ZXJzYWw9ZmFsc2UKLSAgY2FzZSAiICRkZXBjYyAiIGluICMoCi0gICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7Ci0gICAgIGVzYWMKLQotICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KLSAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKLSAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCi0gICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgotICAgICMKLSAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQotICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCi0gICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCi0gICAgOiA+IHN1Yi9jb25mdGVzdC5jCi0gICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCi0gICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCi0gICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAotICAgICAgIyBTb2xhcmlzIDEwIC9iaW4vc2guCi0gICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKLSAgICBkb25lCi0gICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgotCi0gICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKLSAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCi0gICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgZ2NjKQotICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KLSAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCi0gICAgICA7OwotICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgQWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBlbHNlCi0JYnJlYWsKLSAgICAgIGZpCi0gICAgICA7OwotICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKLSAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rICctYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCi0gICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKLSAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCi0gICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgICBhbV9fbWludXNfb2JqPQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKLSAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLSAgZG9uZQotCi0gIGNkIC4uCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLWVsc2UKLSAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Ci1DQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotIGlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ0NfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKLWVsc2UKLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJwotICBhbV9fZmFzdGRlcENDX0ZBTFNFPQotZmkKLQotCi0gICBjYXNlICRhY19jdl9wcm9nX2NjX3N0ZGMgaW4gIygKLSAgbm8pIDoKLSAgICBhY19jdl9wcm9nX2NjX2M5OT1ubzsgYWNfY3ZfcHJvZ19jY19jODk9bm8gOzsgIygKLSAgKikgOgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDOTkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDOTkuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jY19jOTkrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9wcm9nX2NjX2M5OT1ubwotYWNfc2F2ZV9DQz0kQ0MKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d2NoYXIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vLyBDaGVjayB2YXJhcmdzIG1hY3Jvcy4gIFRoZXNlIGV4YW1wbGVzIGFyZSB0YWtlbiBmcm9tIEM5OSA2LjEwLjMuNS4KLSNkZWZpbmUgZGVidWcoLi4uKSBmcHJpbnRmIChzdGRlcnIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBzaG93bGlzdCguLi4pIHB1dHMgKCNfX1ZBX0FSR1NfXykKLSNkZWZpbmUgcmVwb3J0KHRlc3QsLi4uKSAoKHRlc3QpID8gcHV0cyAoI3Rlc3QpIDogcHJpbnRmIChfX1ZBX0FSR1NfXykpCi1zdGF0aWMgdm9pZAotdGVzdF92YXJhcmdzX21hY3JvcyAodm9pZCkKLXsKLSAgaW50IHggPSAxMjM0OwotICBpbnQgeSA9IDU2Nzg7Ci0gIGRlYnVnICgiRmxhZyIpOwotICBkZWJ1ZyAoIlggPSAlZFxuIiwgeCk7Ci0gIHNob3dsaXN0IChUaGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGl0ZW1zLik7Ci0gIHJlcG9ydCAoeD55LCAieCBpcyAlZCBidXQgeSBpcyAlZCIsIHgsIHkpOwotfQotCi0vLyBDaGVjayBsb25nIGxvbmcgdHlwZXMuCi0jZGVmaW5lIEJJRzY0IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsCi0jZGVmaW5lIEJJRzMyIDQyOTQ5NjcyOTV1bAotI2RlZmluZSBCSUdfT0sgKEJJRzY0IC8gQklHMzIgPT0gNDI5NDk2NzI5N3VsbCAmJiBCSUc2NCAlIEJJRzMyID09IDApCi0jaWYgIUJJR19PSwotICB5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW47Ci0jZW5kaWYKLSNpZiBCSUdfT0sKLSNlbHNlCi0gIHlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbjsKLSNlbmRpZgotc3RhdGljIGxvbmcgbG9uZyBpbnQgYmlnbnVtID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHViaWdudW0gPSBCSUc2NDsKLQotc3RydWN0IGluY29tcGxldGVfYXJyYXkKLXsKLSAgaW50IGRhdGFzaXplOwotICBkb3VibGUgZGF0YVtdOwotfTsKLQotc3RydWN0IG5hbWVkX2luaXQgewotICBpbnQgbnVtYmVyOwotICBjb25zdCB3Y2hhcl90ICpuYW1lOwotICBkb3VibGUgYXZlcmFnZTsKLX07Ci0KLXR5cGVkZWYgY29uc3QgY2hhciAqY2NwOwotCi1zdGF0aWMgaW5saW5lIGludAotdGVzdF9yZXN0cmljdCAoY2NwIHJlc3RyaWN0IHRleHQpCi17Ci0gIC8vIFNlZSBpZiBDKystc3R5bGUgY29tbWVudHMgd29yay4KLSAgLy8gSXRlcmF0ZSB0aHJvdWdoIGl0ZW1zIHZpYSB0aGUgcmVzdHJpY3RlZCBwb2ludGVyLgotICAvLyBBbHNvIGNoZWNrIGZvciBkZWNsYXJhdGlvbnMgaW4gZm9yIGxvb3BzLgotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgKih0ZXh0K2kpICE9ICdcMCc7ICsraSkKLSAgICBjb250aW51ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8vIENoZWNrIHZhcmFyZ3MgYW5kIHZhX2NvcHkuCi1zdGF0aWMgdm9pZAotdGVzdF92YXJhcmdzIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKLSAgdmFfbGlzdCBhcmdzX2NvcHk7Ci0gIHZhX2NvcHkgKGFyZ3NfY29weSwgYXJncyk7Ci0KLSAgY29uc3QgY2hhciAqc3RyOwotICBpbnQgbnVtYmVyOwotICBmbG9hdCBmbnVtYmVyOwotCi0gIHdoaWxlICgqZm9ybWF0KQotICAgIHsKLSAgICAgIHN3aXRjaCAoKmZvcm1hdCsrKQotCXsKLQljYXNlICdzJzogLy8gc3RyaW5nCi0JICBzdHIgPSB2YV9hcmcgKGFyZ3NfY29weSwgY29uc3QgY2hhciAqKTsKLQkgIGJyZWFrOwotCWNhc2UgJ2QnOiAvLyBpbnQKLQkgIG51bWJlciA9IHZhX2FyZyAoYXJnc19jb3B5LCBpbnQpOwotCSAgYnJlYWs7Ci0JY2FzZSAnZic6IC8vIGZsb2F0Ci0JICBmbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGRvdWJsZSk7Ci0JICBicmVhazsKLQlkZWZhdWx0OgotCSAgYnJlYWs7Ci0JfQotICAgIH0KLSAgdmFfZW5kIChhcmdzX2NvcHkpOwotICB2YV9lbmQgKGFyZ3MpOwotfQotCi1pbnQKLW1haW4gKCkKLXsKLQotICAvLyBDaGVjayBib29sLgotICBfQm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgLy8gQ2hlY2sgcmVzdHJpY3QuCi0gIGlmICh0ZXN0X3Jlc3RyaWN0ICgiU3RyaW5nIGxpdGVyYWwiKSA9PSAwKQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotICBjaGFyICpyZXN0cmljdCBuZXd2YXIgPSAiQW5vdGhlciBzdHJpbmciOwotCi0gIC8vIENoZWNrIHZhcmFyZ3MuCi0gIHRlc3RfdmFyYXJncyAoInMsIGQnIGYgLiIsICJzdHJpbmciLCA2NSwgMzQuMjM0KTsKLSAgdGVzdF92YXJhcmdzX21hY3JvcyAoKTsKLQotICAvLyBDaGVjayBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgotICBzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSAqaWEgPQotICAgIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSkgKyAoc2l6ZW9mIChkb3VibGUpICogMTApKTsKLSAgaWEtPmRhdGFzaXplID0gMTA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaWEtPmRhdGFzaXplOyArK2kpCi0gICAgaWEtPmRhdGFbaV0gPSBpICogMS4yMzQ7Ci0KLSAgLy8gQ2hlY2sgbmFtZWQgaW5pdGlhbGl6ZXJzLgotICBzdHJ1Y3QgbmFtZWRfaW5pdCBuaSA9IHsKLSAgICAubnVtYmVyID0gMzQsCi0gICAgLm5hbWUgPSBMIlRlc3Qgd2lkZSBzdHJpbmciLAotICAgIC5hdmVyYWdlID0gNTQzLjM0MzQzLAotICB9OwotCi0gIG5pLm51bWJlciA9IDU4OwotCi0gIGludCBkeW5hbWljX2FycmF5W25pLm51bWJlcl07Ci0gIGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyIC0gMV0gPSA1NDM7Ci0KLSAgLy8gd29yayBhcm91bmQgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzCi0gIHJldHVybiAoIXN1Y2Nlc3MgfHwgYmlnbnVtID09IDBMTCB8fCB1YmlnbnVtID09IDB1TEwgfHwgbmV3dmFyWzBdID09ICd4JwotCSAgfHwgZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSAhPSA1NDMpOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWZvciBhY19hcmcgaW4gJycgLXN0ZD1nbnU5OSAtc3RkPWM5OSAtYzk5IC1BQzk5IC1EX1NURENfQzk5PSAtcWxhbmdsdmw9ZXh0Yzk5Ci1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2M5OT0kYWNfYXJnCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzk5IiAhPSAieG5vIiAmJiBicmVhawotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotQ0M9JGFjX3NhdmVfQ0MKLQotZmkKLSMgQUNfQ0FDSEVfVkFMCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzk5IiBpbgotICB4KQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwotICB4bm8pCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLSRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7Ci0gICopCi0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jOTkiCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M5OSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzk5IiA+JjY7IH0gOzsKLWVzYWMKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jOTkiICE9IHhubzsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfY3ZfcHJvZ19jY19jOTkKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2N2X3Byb2dfY2NfYzg5PW5vCi1hY19zYXZlX0NDPSRDQwotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1zdHJ1Y3Qgc3RhdDsKLS8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KLXN0cnVjdCBidWYgeyBpbnQgeDsgfTsKLUZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7Ci1zdGF0aWMgY2hhciAqZSAocCwgaSkKLSAgICAgY2hhciAqKnA7Ci0gICAgIGludCBpOwotewotICByZXR1cm4gcFtpXTsKLX0KLXN0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKLXsKLSAgY2hhciAqczsKLSAgdmFfbGlzdCB2OwotICB2YV9zdGFydCAodixwKTsKLSAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKLSAgdmFfZW5kICh2KTsKLSAgcmV0dXJuIHM7Ci19Ci0KLS8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCi0gICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCi0gICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKLSAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKLSAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KLSAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLwotaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKLQotLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCi0gICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCi0jZGVmaW5lIEZPTyh4KSAneCcKLWludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOwotCi1pbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKLXN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Owotc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307Ci1pbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKLWludCBhcmdjOwotY2hhciAqKmFyZ3Y7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAotCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCi1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhawotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotQ0M9JGFjX3NhdmVfQ0MKLQotZmkKLSMgQUNfQ0FDSEVfVkFMCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgotICB4KQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwotICB4bm8pCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLSRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7Ci0gICopCi0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKLWVzYWMKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfY3ZfcHJvZ19jY19jODkKLWVsc2UKLSAgYWNfY3ZfcHJvZ19jY19zdGRjPW5vCi1maQotCi1maQotIDs7Ci1lc2FjCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBTdGFuZGFyZCBDIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gU3RhbmRhcmQgQy4uLiAiID4mNjsgfQotICBpZiAke2FjX2N2X3Byb2dfY2Nfc3RkYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1maQotCi0gIGNhc2UgJGFjX2N2X3Byb2dfY2Nfc3RkYyBpbiAjKAotICBubykgOgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OyAjKAotICAnJykgOgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OyAjKAotICAqKSA6Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNjsgfSA7OwotZXNhYwotCi0KLQotCi0jIEJ5IGRlZmF1bHQgd2Ugc2ltcGx5IHVzZSB0aGUgQyBjb21waWxlciB0byBidWlsZCBhc3NlbWJseSBjb2RlLgotCi10ZXN0ICIke0NDQVMrc2V0fSIgPSBzZXQgfHwgQ0NBUz0kQ0MKLXRlc3QgIiR7Q0NBU0ZMQUdTK3NldH0iID0gc2V0IHx8IENDQVNGTEFHUz0kQ0ZMQUdTCi0KLQotCi1kZXBjYz0iJENDQVMiICAgYW1fY29tcGlsZXJfbGlzdD0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEIi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLSAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KLSAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKLSAgZmkKLSAgYW1fX3VuaXZlcnNhbD1mYWxzZQotCi0KLSAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCi0gICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCi0gICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAotICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KLSAgICAjCi0gICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKLSAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgotICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgotICAgIDogPiBzdWIvY29uZnRlc3QuYwotICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbwotICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYwotICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKLSAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgotICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCi0gICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgotICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCi0gICAgY2FzZSAkZGVwbW9kZSBpbgotICAgIGdjYykKLSAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCi0gICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQotICAgICAgOzsKLSAgICBub3NpZGVlZmZlY3QpCi0gICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCi0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KLQljb250aW51ZQotICAgICAgZWxzZQotCWJyZWFrCi0gICAgICBmaQotICAgICAgOzsKLSAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCi0gICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcwotICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCi0gICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgotICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQotICAgICAgYW1fX21pbnVzX29iaj0KLSAgICAgIDs7Ci0gICAgbm9uZSkgYnJlYWsgOzsKLSAgICBlc2FjCi0gICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCi0gICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCi0gICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCi0gICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQotICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAotICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCi0gICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKLSAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCi0gICAgICAgIGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLSAgZG9uZQotCi0gIGNkIC4uCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLWVsc2UKLSAgYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLSRhc19lY2hvICIkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Ci1DQ0FTREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCi0KLSBpZgotICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAotICAmJiB0ZXN0ICIkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ0NBU19UUlVFPQotICBhbV9fZmFzdGRlcENDQVNfRkFMU0U9JyMnCi1lbHNlCi0gIGFtX19mYXN0ZGVwQ0NBU19UUlVFPScjJwotICBhbV9fZmFzdGRlcENDQVNfRkFMU0U9Ci1maQotCi0KLQotYWNfZXh0PWNwcAotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLWlmIHRlc3QgLXogIiRDWFgiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRDQ0MiOyB0aGVuCi0gICAgQ1hYPSRDQ0MKLSAgZWxzZQotICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKLSAgZG8KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLUNYWD0kYWNfY3ZfcHJvZ19DWFgKLWlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYIiA+JjUKLSRhc19lY2hvICIkQ1hYIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KLSAgYWNfY3RfQ1hYPSRDWFgKLSAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAotaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQotJGFzX2VjaG8gIiRhY19jdF9DWFgiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhawotZG9uZQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQ1hYIiA9IHg7IHRoZW4KLSAgICBDWFg9ImcrKyIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBDWFg9JGFjX2N0X0NYWAotICBmaQotZmkKLQotICBmaQotZmkKLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLSRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1zZXQgWCAkYWNfY29tcGlsZQotYWNfY29tcGlsZXI9JDIKLWZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KLSAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBzZWQgJzEwYVwKLS4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KLSAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKLSAgICBjYXQgY29uZnRlc3QuZXIxID4mNQotICBmaQotICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCi0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci1kb25lCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jb21waWxlcl9nbnU9eWVzCi1lbHNlCi0gIGFjX2NvbXBpbGVyX2dudT1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQotJGFzX2VjaG8gIiRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjY7IH0KLWlmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgotICBHWFg9eWVzCi1lbHNlCi0gIEdYWD0KLWZpCi1hY190ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQotYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jeHhfZys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKLSAgIGFjX2N4eF93ZXJyb3JfZmxhZz15ZXMKLSAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KLSAgIENYWEZMQUdTPSItZyIKLSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY3h4X2c9eWVzCi1lbHNlCi0gIENYWEZMQUdTPSIiCi0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKLQkgQ1hYRkxBR1M9Ii1nIgotCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2N4eF9nPXllcwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQotaWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCi0gIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCi1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLWcgLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgIENYWEZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDWFhGTEFHUz0KLSAgZmkKLWZpCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWRlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCi0gICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKLSAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKLSAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKLSAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkICdEJyAtLSBiZWNhdXNlICctTUQnIG1lYW5zICJwdXQgdGhlIG91dHB1dAotICAjIGluIEQiLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi0gIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQotICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgotICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgotICBjZCBjb25mdGVzdC5kaXIKLSAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCi0gICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCi0gICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCi0gICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgotICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKLSAgIyBkaXJlY3RvcnkuCi0gIG1rZGlyIHN1YgotCi0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGFtX191bml2ZXJzYWw9ZmFsc2UKLSAgY2FzZSAiICRkZXBjYyAiIGluICMoCi0gICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7Ci0gICAgIGVzYWMKLQotICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KLSAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKLSAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCi0gICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgotICAgICMKLSAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQotICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCi0gICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCi0gICAgOiA+IHN1Yi9jb25mdGVzdC5jCi0gICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCi0gICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCi0gICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAotICAgICAgIyBTb2xhcmlzIDEwIC9iaW4vc2guCi0gICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKLSAgICBkb25lCi0gICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgotCi0gICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKLSAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCi0gICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgZ2NjKQotICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KLSAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCi0gICAgICA7OwotICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgQWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBlbHNlCi0JYnJlYWsKLSAgICAgIGZpCi0gICAgICA7OwotICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKLSAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rICctYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCi0gICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKLSAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCi0gICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgICBhbV9fbWludXNfb2JqPQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKLSAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLQotICBjZCAuLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi1lbHNlCi0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQotQ1hYREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotIGlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgotICBhbV9fZmFzdGRlcENYWF9UUlVFPQotICBhbV9fZmFzdGRlcENYWF9GQUxTRT0nIycKLWVsc2UKLSAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0nIycKLSAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9Ci1maQotCi0KLQotCi1mdW5jX3N0cmlwbmFtZV9jbmYgKCkKLXsKLSAgY2FzZSAkMiBpbgotICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAicyVeJDElJTsgcyVcXFxcJDJcJCUlImA7OwotICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAicyVeJDElJTsgcyUkMlwkJSUiYDs7Ci0gIGVzYWMKLX0gIyBmdW5jX3N0cmlwbmFtZV9jbmYKLQotICAgICAgaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0IG5vICE9ICIkQ1hYIiAmJgotICAgICggKHRlc3QgZysrID0gIiRDWFgiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0gICAgKHRlc3QgZysrICE9ICIkQ1hYIikpKTsgdGhlbgotICBhY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KLWlmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCi0gIGlmICR7YWNfY3ZfcHJvZ19DWFhDUFArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCi0gICAgZm9yIENYWENQUCBpbiAiJENYWCAtRSIgIi9saWIvY3BwIgotICAgIGRvCi0gICAgICBhY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKLSAgYnJlYWsKLWZpCi0KLSAgICBkb25lCi0gICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAotCi1maQotICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCi1lbHNlCi0gIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWENQUCIgPiY1Ci0kYXNfZWNobyAiJENYWENQUCIgPiY2OyB9Ci1hY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKLQotZWxzZQotICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotZWxzZQotICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKLWZpCi0KLWFjX2V4dD1jcHAKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQotYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubwotYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9Ci1jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPW5vCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPQotaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD1ubwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Ci1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KLWhhcmRjb2RlX21pbnVzX0xfQ1hYPW5vCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAotaGFyZGNvZGVfYXV0b21hdGljX0NYWD1ubwotaW5oZXJpdF9ycGF0aF9DWFg9bm8KLW1vZHVsZV9jbWRzX0NYWD0KLW1vZHVsZV9leHBzeW1fY21kc19DWFg9Ci1saW5rX2FsbF9kZXBsaWJzX0NYWD11bmtub3duCi1vbGRfYXJjaGl2ZV9jbWRzX0NYWD0kb2xkX2FyY2hpdmVfY21kcwotcmVsb2FkX2ZsYWdfQ1hYPSRyZWxvYWRfZmxhZwotcmVsb2FkX2NtZHNfQ1hYPSRyZWxvYWRfY21kcwotbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPQotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQotZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9bm8KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9Y3BwCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLW9iamV4dF9DWFg9JG9iamV4dAotCi0jIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0Ci0jIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCi0jIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCi0jIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KLWlmIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiOyB0aGVuCi0gICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi0gIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW10pIHsgcmV0dXJuKDApOyB9JwotCi0gICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotCi0KLQotCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0gICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJFJNIGNvbmZ0ZXN0KgotCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRSTSAtciBjb25mdGVzdCoKLQotCi0gICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi0gIGx0X3NhdmVfQ0M9JENDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgbHRfc2F2ZV9MRD0kTEQKLSAgbHRfc2F2ZV9HQ0M9JEdDQwotICBHQ0M9JEdYWAotICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKLSAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAotICBlbHNlCi0gICAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi0gIGZpCi0gIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgotICAgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLSAgZWxzZQotICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECi0gIGZpCi0gIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi0gIENDPSR7Q1hYLSJjKysifQotICBDRkxBR1M9JENYWEZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBjb21waWxlcl9DWFg9JENDCi0gIGZ1bmNfY2NfYmFzZW5hbWUgJGNvbXBpbGVyCi1jY19iYXNlbmFtZT0kZnVuY19jY19iYXNlbmFtZV9yZXN1bHQKLQotCi0gIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLSAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKLSAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5Ci0gICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nIC1mbm8tYnVpbHRpbicKLSAgICBlbHNlCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9Ci0gICAgZmkKLQotICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0gICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0IG5vID0gIiR3aXRodmFsIiB8fCB3aXRoX2dudV9sZD15ZXMKLWVsc2UKLSAgd2l0aF9nbnVfbGQ9bm8KLWZpCi0KLWFjX3Byb2c9bGQKLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiwgd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1xcL10qIHwgPzpbXFwvXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0kYWNfcHJvZwotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQotZmkKLWlmICR7bHRfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9MRD0kYWNfZGlyLyRhY19wcm9nCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3Qgbm8gIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0IHllcyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9JGx0X3NhdmVfaWZzCi1lbHNlCi0gIGx0X2N2X3BhdGhfTEQ9JExEICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotZmkKLWZpCi0KLUxEPSRsdF9jdl9wYXRoX0xECi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQotJGFzX2VjaG8gIiRMRCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLXRlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCi0gIDs7Ci0qKQotICBsdF9jdl9wcm9nX2dudV9sZD1ubwotICA7OwotZXNhYwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Ci13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotCi0KLQotCi0KLQotICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCi0gICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KLSAgICAgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJwotCi0gICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KLSAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKLSAgICAgICAgd2xhcmM9JyR3bCcKLQotICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKLQkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICBlbHNlCi0gICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQotICAgICAgICBmaQotICAgICAgZWxzZQotICAgICAgICB3aXRoX2dudV9sZD1ubwotICAgICAgICB3bGFyYz0KLQotICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgotICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQotICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAotICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KLSAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICAgICAgZmkKLQotICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQotICAgIGVsc2UKLSAgICAgIEdYWD1ubwotICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICAgIHdsYXJjPQotICAgIGZpCi0KLSAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0gICAgbGRfc2hsaWJzX0NYWD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgzKikKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgICAgOzsKLSAgICAgIGFpeFs0LTldKikKLSAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLSAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCi0gICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICAgICAgbm9fZW50cnlfZmxhZz0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgICAgICMgaGF2ZSBydW50aW1lIGxpbmtpbmcgZW5hYmxlZCwgYW5kIHVzZSBpdCBmb3IgZXhlY3V0YWJsZXMuCi0gICAgICAgICAgIyBGb3Igc2hhcmVkIGxpYnJhcmllcywgd2UgZW5hYmxlL2Rpc2FibGUgcnVudGltZSBsaW5raW5nCi0gICAgICAgICAgIyBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGNyZWF0ZWQgLQotICAgICAgICAgICMgd2hlbiAid2l0aF9haXhfc29uYW1lLGFpeF91c2VfcnVudGltZWxpbmtpbmciIGlzOgotICAgICAgICAgICMgImFpeCxubyIgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKLSAgICAgICAgICAjICJhaXgseWVzIiAgbGliLnNvICAgICAgICAgIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCi0gICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQotICAgICAgICAgICMgImJvdGgsbm8iICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzCi0gICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcwotICAgICAgICAgICMgImJvdGgseWVzIiBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKLSAgICAgICAgICAjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vCi0gICAgICAgICAgIyAic3ZyNCwqIiAgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcwotICAgICAgICAgICMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKLSAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCi0JICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KLQkgICAgICAqLWJydGwqKQotCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgICAgIGJyZWFrCi0JICAgICAgICA7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgICBpZiB0ZXN0IHN2cjQsbm8gPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgICAjIFdpdGggYWl4LXNvbmFtZT1zdnI0LCB3ZSBjcmVhdGUgdGhlIGxpYi5zby5WIHNoYXJlZCBhcmNoaXZlcyBvbmx5LAotCSAgICAgICMgc28gd2UgZG9uJ3QgaGF2ZSBsaWIuYSBzaGFyZWQgbGlicyB0byBsaW5rIG91ciBleGVjdXRhYmxlcy4KLQkgICAgICAjIFdlIGhhdmUgdG8gZm9yY2UgcnVudGltZSBsaW5raW5nIGluIHRoaXMgY2FzZS4KLQkgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtYnJ0bCIKLQkgICAgZmkKLQkgICAgOzsKLSAgICAgICAgICBlc2FjCi0KLSAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgICAgZmkKLQotICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPScnCi0gICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JwotICAgICAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLSAgICAgICAgZmlsZV9saXN0X3NwZWNfQ1hYPSckd2wtZiwnCi0gICAgICAgIGNhc2UgJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgotICAgICAgICBhaXgsKikgOzsJIyBubyBpbXBvcnQgZmlsZQotICAgICAgICBzdnI0LCogfCAqLHllcykgIyB1c2UgaW1wb3J0IGZpbGUKLSAgICAgICAgICAjIFRoZSBJbXBvcnQgRmlsZSBkZWZpbmVzIHdoYXQgdG8gaGFyZGNvZGUuCi0gICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9bm8KLSAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLSAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCi0JICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLQkgICAgOgotCSAgZWxzZQotCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0JICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9dW5zdXBwb3J0ZWQKLQkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLQkgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQotCSAgZmkKLSAgICAgICAgICBlc2FjCi0gICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JHNoYXJlZF9mbGFnJyAkd2wtRycKLQkgIGZpCi0JICAjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCi0JICAjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcwotCSAgIyAvd2l0aC8gSW1wb3J0IEZpbGUgLSB3ZSBkbyBub3Qgd2FudCB0byBtaXggdGhlbS4KLQkgIHNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKLQkgIHNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKLSAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLQkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0gICAgICAgICAgZWxzZQotCSAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCi0JICAgIGVsc2UKLQkgICAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKLQkgICAgZmkKLQkgICAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJwotCSAgICBzaGFyZWRfZmxhZ19zdnI0PSckd2wtRycKLSAgICAgICAgICBmaQotICAgICAgICBmaQotCi0gICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1iZXhwYWxsJwotICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCi0JIyBleHBvcnQuCi0gICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCi0JaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0gICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0gICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotICAgICAgICAgICMgVGhlICItRyIgbGlua2VyIGZsYWcgYWxsb3dzIHVuZGVmaW5lZCBzeW1ib2xzLgotICAgICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm5vdG9rJwotICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQotICAgICAgICAgICMgZXhlY3V0YWJsZS4KLSAgICAgICAgICBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCi0gIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAotZWxzZQotICBpZiAke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotCi0gIGx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JICAvXjAvIHsKLQkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLwotCSAgICAgIHAKLQkgIH0KLSAgICAgIH0nCi0gIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0gICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLSAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSAgZmkKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KLSAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPS91c3IvbGliOi9saWIKLSAgZmkKLQotZmkKLQotICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAotZmkKLQotICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ii16IG5vZGVmcyIKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgICAgIGVsc2UKLQkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0JICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLQkgICAgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgotICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLWVsc2UKLSAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLQotICBsdF9haXhfbGlicGF0aF9zZWQ9JwotICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCSAgL14wLyB7Ci0JICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLQkgICAgICBwCi0JICB9Ci0gICAgICB9JwotICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgotICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0gIGZpCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0vdXNyL2xpYjovbGliCi0gIGZpCi0KLWZpCi0KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKLWZpCi0KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1iZXJub3RvaycKLQkgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWJlcm9rJwotCSAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JICAgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgIGVsc2UKLQkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyRjb252ZW5pZW5jZScKLQkgICAgZmkKLQkgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKLQkgICAgIyAtYnJ0bCBhZmZlY3RzIG11bHRpcGxlIGxpbmtlciBzZXR0aW5ncywgLWJlcm9rIGRvZXMgbm90IGFuZCBpcyBvdmVycmlkZGVuIGxhdGVyCi0JICAgIGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkPSdgZnVuY19lY2hvX2FsbCAiJGNvbXBpbGVyX2ZsYWdzICIgfCAkU0VEIC1lICJzJS1icnRsXFwoWywgXVxcKSUtYmVyb2tcXDElZyJgJwotCSAgICBpZiB0ZXN0IHN2cjQgIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCi0JICAgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkCi0JICAgICAgIyBsaWJyYXJpZXMuIE5lZWQgLWJub3J0bCBsYXRlLCB3ZSBtYXkgaGF2ZSAtYnJ0bCBpbiBMREZMQUdTLgotCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiJ34kQ0MgJyRzaGFyZWRfZmxhZ19haXgnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICckY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQnJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lJwotCSAgICBmaQotCSAgICBpZiB0ZXN0IGFpeCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KLQkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iJGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIid+JENDICckc2hhcmVkX2ZsYWdfc3ZyNCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICckY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQnJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kU1RSSVAgLWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm9+KCBmdW5jX2VjaG9fYWxsICIjISAkc29uYW1lKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSI7IGlmIHRlc3Qgc2hyXzY0ID0gIiRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiIyA2NCI7IGVsc2UgZnVuY19lY2hvX2FsbCAiIyAzMiI7IGZpOyBjYXQgJGV4cG9ydF9zeW1ib2xzICkgPiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMuaW1wfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMuaW1wJwotCSAgICBlbHNlCi0JICAgICAgIyB1c2VkIGJ5IC1kbHByZW9wZW4gdG8gZ2V0IHRoZSBzeW1ib2xzCi0JICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCInfiRNViAgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkb3V0cHV0X29iamRpcicKLQkgICAgZmkKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCInfiRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgICA7OwotCi0gICAgICBiZW9zKikKLQlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKLQkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLQkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JZWxzZQotCSAgbGRfc2hsaWJzX0NYWD1ubwotCWZpCi0JOzsKLQotICAgICAgY2hvcnVzKikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICAqKQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLQljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCi0JLGNsKiB8IG5vLGNsKikKLQkgICMgTmF0aXZlIE1TVkMKLQkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLQkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nICcKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKLQkgIGZpbGVfbGlzdF9zcGVjX0NYWD0nQCcKLQkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0JICBsaWJleHQ9bGliCi0JICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQkgIHNocmV4dF9jbWRzPS5kbGwKLQkgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+bGlua25hbWVzPScKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCi0gICAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7Ci0gICAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotICAgICAgICAgICAgZml+Ci0gICAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0gICAgICAgICAgICBsaW5rbmFtZXM9JwotCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgotCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsIENYWCk9J3RydWUnCi0JICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKLQkgICMgRG9uJ3QgdXNlIHJhbmxpYgotCSAgb2xkX3Bvc3RpbnN0YWxsX2NtZHNfQ1hYPSdjaG1vZCA2NDQgJG9sZGxpYicKLQkgIHBvc3RsaW5rX2NtZHNfQ1hYPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+Ci0gICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotICAgICAgICAgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotICAgICAgICAgICAgICAqLmV4ZXwqLkVYRSkgOzsKLSAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICBsdF9vdXRwdXRmaWxlPSRsdF9vdXRwdXRmaWxlLmV4ZQotICAgICAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0kbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZQotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICBlc2FjfgotICAgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KLSAgICAgICAgICAgIGlmIHRlc3QgOiAhPSAiJE1BTklGRVNUX1RPT0wiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotICAgICAgICAgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOwotICAgICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLSAgICAgICAgICAgIGZpJwotCSAgOzsKLQkqKQotCSAgIyBnKysKLQkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubwotCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCi0KLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKLQkgICAgIyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kIEVYUE9SVFMuLi4KLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmICAgdGVzdCBERUYgPSAiYCRTRUQgLW4gICAgIC1lICdcJydzL15bCSBdKi8vJ1wnJyAgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnICAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnXCcnICAgICAtZSBxICAgICAkZXhwb3J0X3N5bWJvbHNgIiA7IHRoZW4KLSAgICAgICAgICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgICAgICAgIGZpfgotICAgICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkgIGVsc2UKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotCi0KLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgaGFyZGNvZGVfYXV0b21hdGljX0NYWD15ZXMKLSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKLSAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHdsLWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCi0KLSAgZWxzZQotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJwotICBmaQotICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZAotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICBpZm9ydCp8bmFnZm9yKikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OwotICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OwotICBlc2FjCi0gIGlmIHRlc3QgeWVzID0gIiRfbHRfZGFyX2Nhbl9zaGFyZWQiOyB0aGVuCi0gICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAotICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2RzeW11dGlsIgotICAgIG1vZHVsZV9jbWRzX0NYWD0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kc3ltdXRpbCIKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgLWUgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCi0gICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIjsgdGhlbgotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kc3ltdXRpbCIKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCRsaWItbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYi1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmckX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCi0gICAgZmkKLQotICBlbHNlCi0gIGxkX3NobGlic19DWFg9bm8KLSAgZmkKLQotCTs7Ci0KLSAgICAgIG9zMiopCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKLQloYXJkY29kZV9taW51c19MX0NYWD15ZXMKLQlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKLQlzaHJleHRfY21kcz0uZGxsCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgIGVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICBlbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICBwcmVmaXhfY21kcz0iJFNFRCJ+Ci0JICBpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgICAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7Ci0JICBmaX4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCSAgY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotCW9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfQ1hYPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfV9kbGwuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0JZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCi0JOzsKLQotICAgICAgZGd1eCopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgZWMrKyopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JICAgIDs7Ci0gICAgICAgICAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JICAgIDs7Ci0gICAgICAgICAgKikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBmcmVlYnNkMi4qKQotICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCi0JIyBzd2l0Y2ggdG8gRUxGCi0gICAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZC1lbGYqKQotICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICAgICAjIGNvbnZlbnRpb25zCi0gICAgICAgIGxkX3NobGlic19DWFg9eWVzCi0gICAgICAgIDs7Ci0KLSAgICAgIGhhaWt1KikKLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLSAgICAgICAgOzsKLQotICAgICAgaHB1eDkqKQotICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsK2IgJHdsJGxpYmRpcicKLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKLSAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLSAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgICAgICAgOzsKLSAgICAgICAgICBhQ0MqKQotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0gICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLSAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBocHV4MTAqfGhwdXgxMSopCi0gICAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bCtiICR3bCRsaWJkaXInCi0JICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLSAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAqKQotCSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgICAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICAgICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgICAgICAgICA7OwotICAgICAgICAgICopCi0gICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKLSAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JICAgIDs7Ci0gICAgICAgICAgYUNDKikKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgICBocHBhKjY0KikKLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgOzsKLQkgICAgICBpYTY0KikKLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgICAgKikKLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICMKLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0JICAgIDs7Ci0gICAgICAgICAgKikKLQkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLQkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgICAgICAgIGhwcGEqNjQqKQotCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgICAgIDs7Ci0JICAgICAgICAgIGlhNjQqKQotCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgICAgICAgOzsKLQkgICAgICAgICAgKikKLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgICAgIDs7Ci0JICAgICAgICBlc2FjCi0JICAgICAgZmkKLQkgICAgZWxzZQotCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgZmkKLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBpbnRlcml4WzMtOV0qKQotCWhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKLQkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0JIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLQkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0JIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkICJzfF58X3wiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLQk7OwotICAgICAgaXJpeDUqIHwgaXJpeDYqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLQkgICAgIyBTR0kgQysrCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSAgICAjIGluIHRoZSBhcmNoaXZlLgotCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgotCSAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JICAgICAgZWxzZQotCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgIC1vICRsaWInCi0JICAgICAgZmkKLQkgICAgZmkKLQkgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0gICAgICAgIGluaGVyaXRfcnBhdGhfQ1hYPXllcwotICAgICAgICA7OwotCi0gICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIEtDQyopCi0JICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAjCi0JICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJwotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgICAgOzsKLQkgIGljcGMqIHwgZWNwYyogKQotCSAgICAjIEludGVsIEMrKwotCSAgICB3aXRoX2dudV9sZD15ZXMKLQkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKLQkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KLQkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JICAgICAgKiJWZXJzaW9uIDcuIiopCi0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCQk7OwotCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICAgICAgICB0bXBfaWR5bj0KLQkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwotCQllc2FjCi0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JCTs7Ci0JICAgIGVzYWMKLQkgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKLQkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgICA7OwotICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQotICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQkgICAgY2FzZSBgJENDIC1WYCBpbgotCSAgICAqcGdDQ1wgWzEtNV0uKiB8ICpwZ2NwcFwgWzEtNV0uKikKLQkgICAgICBwcmVsaW5rX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+Ci0gICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+Ci0gICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJwotCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgotICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+Ci0gICAgICAgICAgICAgICAgJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+Ci0gICAgICAgICAgICAgICAgJFJBTkxJQiAkb2xkbGliJwotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0gICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+Ci0gICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0gICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KLSAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KLSAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgICAgICA7OwotCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scwotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLS1ycGF0aCAkd2wkbGliZGlyJwotCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJwotCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICAgICAgICA7OwotCSAgY3h4KikKLQkgICAgIyBDb21wYXEgQysrCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCi0JICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKLQkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAjCi0JICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICJYJGxpc3QiIHwgJFhzZWQnCi0JICAgIDs7Ci0JICB4bCogfCBtcGl4bCogfCBiZ3hsKikKLQkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJwotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCi0JICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgICAgICRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXZlcnNpb24tc2NyaXB0ICR3bCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCSAgICBmaQotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCi0JICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCi0JICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLQkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgICAgICBjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPXllcwotCi0JICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgotCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKLQkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KLQkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKLQotCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCi0JICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCWVzYWMKLQk7OwotCi0gICAgICBseW54b3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLQotICAgICAgbTg4ayopCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLQotICAgICAgbXZzKikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBjeHgqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotCSAgKikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgOzsKLQllc2FjCi0JOzsKLQotICAgICAgbmV0YnNkKikKLSAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQkgIGFyY2hpdmVfY21kc19DWFg9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJwotCSAgd2xhcmM9Ci0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJwotCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLQkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0JZmkKLQkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJwotCTs7Ci0KLSAgICAgICpudG8qIHwgKnFueCopCi0gICAgICAgIGxkX3NobGlic19DWFg9eWVzCi0JOzsKLQotICAgICAgb3BlbmJzZCogfCBiaXRyaWcqKQotCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLQkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCi0JICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIjsgdGhlbgotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJwotCSAgZmkKLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLQllbHNlCi0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JZmkKLQk7OwotCi0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgS0NDKikKLQkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKLQkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCSAgICBjYXNlICRob3N0IGluCi0JICAgICAgb3NmMyopIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKLQkgICAgICAqKSBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLSAgICAgICAgICBSQ0MqKQotCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotICAgICAgICAgIGN4eCopCi0JICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICBvc2YzKikKLQkgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkJOzsKLQkgICAgICAqKQotCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLSAgICAgICAgICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR3bC1pbnB1dCAkd2wkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0gICAgICAgICAgICAgICAgICAkUk0gJGxpYi5leHAnCi0JICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCi0JCTs7Ci0JICAgIGVzYWMKLQotCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICMKLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0JICAgIDs7Ci0JICAqKQotCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCi0JICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICAgb3NmMyopCi0JICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCQkgIDs7Ci0JICAgICAgICAqKQotCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JCSAgOzsKLQkgICAgICBlc2FjCi0KLQkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0JICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQotCSAgICBlbHNlCi0JICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICBmaQotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHBzb3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgICA7OwotCi0gICAgICBzdW5vczQqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLQkgICAgIyBTdW4gQysrIDQueAotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotICAgICAgICAgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHNvbGFyaXMqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKiB8IHN1bkNDKikKLQkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtTSAkd2wkbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0JICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0JICAgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0JICAgICAgKikKLQkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4KLQkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQkgICAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCi0KLQkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KLQkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICAgIDs7Ci0gICAgICAgICAgZ2N4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKLQotCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KLQkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCi0JICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC16ICR7d2x9ZGVmcycKLQkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0KLQkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCi0JICAgICAgZWxzZQotCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSAnLUcnIE5PVCAnLXNoYXJlZCcgb24gdGhpcwotCSAgICAgICAgIyBwbGF0Zm9ybS4KLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAgICAgICAkQ0MgLUcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCi0JICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQkgICAgICBmaQotCi0JICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1SICR3bCRsaWJkaXInCi0JICAgICAgY2FzZSAkaG9zdF9vcyBpbgotCQlzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0JCSopCi0JCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQkJICA7OwotCSAgICAgIGVzYWMKLQkgICAgZmkKLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHdsLXosdGV4dCcKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgQ0MqKQotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotCSMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLQkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0JIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0JIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotCSMgYXMgLXogZGVmcy4KLQlub191bmRlZmluZWRfZmxhZ19DWFg9JyR3bC16LHRleHQnCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSckd2wteixub2RlZnMnCi0JYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLVIsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKLQlsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtQmV4cG9ydCcKLQlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLQljYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJG9sZG9ianN+Ci0gICAgICAgICAgICAgICciJG9sZF9hcmNoaXZlX2NtZHNfQ1hYIgotCSAgICByZWxvYWRfY21kc19DWFg9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+Ci0gICAgICAgICAgICAgICciJHJlbG9hZF9jbWRzX0NYWCIKLQkgICAgOzsKLQkgICopCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgOzsKLQllc2FjCi0gICAgICA7OwotCi0gICAgICB0YW5kZW0qKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgICAgdnh3b3JrcyopCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICAgIDs7Ci0KLSAgICAgICopCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKLSRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9Ci0gICAgdGVzdCBubyA9ICIkbGRfc2hsaWJzX0NYWCIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0gICAgR0NDX0NYWD0kR1hYCi0gICAgTERfQ1hYPSRMRAotCi0gICAgIyMgQ0FWRUFUIEVNUFRPUjoKLSAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5Ci0gICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCi0gICAgIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKLXByZWRlcF9vYmplY3RzX0NYWD0KLXBvc3RkZXBfb2JqZWN0c19DWFg9Ci1wcmVkZXBzX0NYWD0KLXBvc3RkZXBzX0NYWD0KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9Ci0KLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi1jbGFzcyBGb28KLXsKLXB1YmxpYzoKLSAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Ci1wcml2YXRlOgotICBpbnQgYTsKLX07Ci1fTFRfRU9GCi0KLQotX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUwotY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAotKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7Ci0qXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7Ci0qXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Ci1lc2FjCi0KLWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi0KLSAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQotICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KLSAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubwotCi0gIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KLSAgICBjYXNlICRwcmV2JHAgaW4KLQotICAgIC1MKiB8IC1SKiB8IC1sKikKLSAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgotICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KLSAgICAgICBpZiB0ZXN0IHgtTCA9ICIkcCIgfHwKLSAgICAgICAgICB0ZXN0IHgtUiA9ICIkcCI7IHRoZW4KLQkgcHJldj0kcAotCSBjb250aW51ZQotICAgICAgIGZpCi0KLSAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgotICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgotICAgICAgICAgY2FzZSAkcCBpbgotICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0gICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotICAgICAgICAgZXNhYwotICAgICAgIGZpCi0gICAgICAgY2FzZSAkcCBpbgotICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0gICAgICAgZXNhYwotICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCi0JIGNhc2UgJHByZXYgaW4KLQkgLUwgfCAtUikKLQkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKLQkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKLQkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KLQkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KLQkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9JHByZXYkcAotCSAgIGVsc2UKLQkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHByZXYkcCIKLQkgICBmaQotCSAgIDs7Ci0JICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCi0JICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgotCSBlc2FjCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkcG9zdGRlcHNfQ1hYIjsgdGhlbgotCSAgIHBvc3RkZXBzX0NYWD0kcHJldiRwCi0JIGVsc2UKLQkgICBwb3N0ZGVwc19DWFg9IiR7cG9zdGRlcHNfQ1hYfSAkcHJldiRwIgotCSBmaQotICAgICAgIGZpCi0gICAgICAgcHJldj0KLSAgICAgICA7OwotCi0gICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCi0gICAgKi4kb2JqZXh0KQotICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAotICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgotICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgotCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcwotCSBjb250aW51ZQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0IG5vID0gIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIjsgdGhlbgotCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgotCSAgIHByZWRlcF9vYmplY3RzX0NYWD0kcAotCSBlbHNlCi0JICAgcHJlZGVwX29iamVjdHNfQ1hYPSIkcHJlZGVwX29iamVjdHNfQ1hYICRwIgotCSBmaQotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJHBvc3RkZXBfb2JqZWN0c19DWFgiOyB0aGVuCi0JICAgcG9zdGRlcF9vYmplY3RzX0NYWD0kcAotCSBlbHNlCi0JICAgcG9zdGRlcF9vYmplY3RzX0NYWD0iJHBvc3RkZXBfb2JqZWN0c19DWFggJHAiCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCi0KLSAgICBlc2FjCi0gIGRvbmUKLQotICAjIENsZWFuIHVwLgotICBybSAtZiBhLm91dCBhLmV4ZQotZWxzZQotICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgQ1hYIHRlc3QgcHJvZ3JhbSIKLWZpCi0KLSRSTSAtZiBjb25mZXN0LiRvYmpleHQKLUNGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKLQotIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KLWNhc2UgJGhvc3Rfb3MgaW4KLWludGVyaXhbMy05XSopCi0gICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KLSAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KLSAgcHJlZGVwX29iamVjdHNfQ1hYPQotICBwb3N0ZGVwX29iamVjdHNfQ1hYPQotICBwb3N0ZGVwc19DWFg9Ci0gIDs7Ci1lc2FjCi0KLQotY2FzZSAiICRwb3N0ZGVwc19DWFggIiBpbgotKiIgLWxjICIqKSBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8gOzsKLWVzYWMKLSBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPQotaWYgdGVzdCAtbiAiJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSI7IHRoZW4KLSBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPWBlY2hvICIgJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSIgfCAkU0VEIC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPQotbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQotCi0KLSAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgotICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBwb3dlcnBjKQotICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLSAgICAgICAgOzsKLSAgICAgIG02OGspCi0gICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAgICAgICAjIGFkZGluZyB0aGUgJy1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICAgICAgICMgbGlrZSAnLW02ODA0MCcuCi0gICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvczIqKQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHdsLXN0YXRpYycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgICAgOzsKLSAgICBoYWlrdSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCi0gICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Ci0gICAgICA7OwotICAgIGludGVyaXhbMy05XSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKLSAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZwotICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KikKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICpxbngqIHwgKm50byopCi0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQyAtc2hhcmVkJwotICAgICAgOzsKLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4WzQtOV0qKQotCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLQlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JZWxzZQotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0JZmkKLQk7OwotICAgICAgY2hvcnVzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCWN4Y2g2OCopCi0JICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCBDWFgpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKLQkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0JIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKLQk7OwotICAgICAgZGd1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGVjKysqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICA7OwotCSAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0JIyBGcmVlQlNEIHVzZXMgR05VIEMrKwotCTs7Ci0gICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSckd2wtYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSckd2wtYSAke3dsfWFyY2hpdmUnCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGhwcGEqNjQqfGlhNjQqKQotCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGludGVyaXgqKQotCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQotCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KLQk7OwotICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKLQkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJwotCSAgICA7OwotCSAgZWNwYyogKQotCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJwotCSAgICA7OwotCSAgaWNwYyogKQotCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCi0JICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyogfCBwZ2NwcCopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mcGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBDb21wYXEgQysrCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICB4bGMqIHwgeGxDKiB8IGJneGxbY0NdKiB8IG1waXhsW2NDXSopCi0JICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXFwaWMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXFzdGF0aWNsaW5rJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCi0JOzsKLSAgICAgICpxbngqIHwgKm50byopCi0gICAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQyAtc2hhcmVkJwotICAgICAgICA7OwotICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIDs7Ci0JICBSQ0MqKQotCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICBjeHgqKQotCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQotCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBwc29zKikKLQk7OwotICAgICAgc29sYXJpcyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKiB8IHN1bkNDKikKLQkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJwotCSAgICA7OwotCSAgZ2N4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN1bm9zNCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgIyBTdW4gQysrIDQueAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JICBsY2MqKQotCSAgICAjIEx1Y2lkCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgdGFuZGVtKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgTkNDKikKLQkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgdnh3b3JrcyopCi0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICBmaQotCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgotICAgIDs7Ci1lc2FjCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWAotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD1ubwotICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPXllcwotICAgICBmaQotICAgZmkKLSAgICRSTSBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjY7IH0KLQotaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCI7IHRoZW4KLSAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA7OwotICAgICBlc2FjCi1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCi1maQotCi1maQotCi0KLQotCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFhcIgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9bm8KLSAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY2OyB9Ci0KLWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiOyB0aGVuCi0gICAgOgotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KLWZpCi0KLQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9bm8KLSAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkUk0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICAkUk0gLXIgY29uZnRlc3QKLSAgICRSTSBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KLQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9bm8KLSAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkUk0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICAkUk0gLXIgY29uZnRlc3QKLSAgICRSTSBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KLQotCi0KLQotaGFyZF9saW5rcz1ub3R0ZXN0ZWQKLWlmIHRlc3Qgbm8gPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KLSAgaGFyZF9saW5rcz15ZXMKLSAgJFJNIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKLSRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9Ci0gIGlmIHRlc3Qgbm8gPSAiJGhhcmRfbGlua3MiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0KLSAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJwotICBjYXNlICRob3N0X29zIGluCi0gIGFpeFs0LTldKikKLSAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLSAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEdOVSBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHRvIEFJWCBubS4KLSAgICAjIFdpdGhvdXQgdGhlICItbCIgb3B0aW9uLCBvciB3aXRoIHRoZSAiLUIiIG9wdGlvbiwgQUlYIG5tIHRyZWF0cwotICAgICMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzCi0gICAgIyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCi0gICAgIyBXaGlsZSB0aGUgJ3dlYWsnIGtleXdvcmQgaXMgaWdub3JlZCBpbiB0aGUgRXhwb3J0IEZpbGUsIHdlIG5lZWQKLSAgICAjIGl0IGluIHRoZSBJbXBvcnQgRmlsZSBmb3IgdGhlICdhaXgtc29uYW1lJyBmZWF0dXJlLCBzbyB3ZSBoYXZlCi0gICAgIyB0byByZXBsYWNlIHRoZSAiLUIiIG9wdGlvbiB3aXRoICItUCIgZm9yIEFJWCBubS4KLSAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBpZiAoXCQgMiA9PSAiVyIpIHsgcHJpbnQgXCQgMyAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDMgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nYGZ1bmNfZWNob19hbGwgJE5NIHwgJFNFRCAtZSAnXCcncy9CXChbXkJdKlwpJC9QXDEvJ1wnJ2AgLVBDcGdsICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSAmJiAoc3Vic3RyKFwkIDEsMSwxKSAhPSAiLiIpKSB7IGlmICgoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgeyBwcmludCBcJCAxICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMSB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGZpCi0gICAgOzsKLSAgcHczMiopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JGx0ZGxsX2NtZHMKLSAgICA7OwotICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgY2wqKQotICAgICAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJwotICAgICAgOzsKLSAgICAqKQotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQotICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgKikKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIDs7Ci0gIGVzYWMKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKLSRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9Ci10ZXN0IG5vID0gIiRsZF9zaGxpYnNfQ1hYIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXdpdGhfZ251X2xkX0NYWD0kd2l0aF9nbnVfbGQKLQotCi0KLQotCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiBpbgoteHx4eWVzKQotICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCi0gIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQotICBpZiB0ZXN0IHllcyx5ZXMgPSAiJEdDQywkZW5hYmxlX3NoYXJlZCI7IHRoZW4KLSAgICBjYXNlICRhcmNoaXZlX2NtZHNfQ1hYIGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICRSTSBjb25mdGVzdCoKLQllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotCWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KLQkgIHNvbmFtZT1jb25mdGVzdAotCSAgbGliPWNvbmZ0ZXN0Ci0JICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLQkgIGRlcGxpYnM9Ci0JICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFgKLQkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKLQkgIGNvbXBpbGVyX2ZsYWdzPS12Ci0JICBsaW5rZXJfZmxhZ3M9LXYKLQkgIHZlcnN0cmluZz0KLQkgIG91dHB1dF9vYmpkaXI9LgotCSAgbGlibmFtZT1jb25mdGVzdAotCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ci0JICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0JICB0aGVuCi0JICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotCSAgZWxzZQotCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCi0JICBmaQotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0JZWxzZQotCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0JZmkKLQkkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY2OyB9Ci0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWAotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQotCi1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0uc28KLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi0KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgOzsKLQotYWl4WzQtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICRDQyAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCi0JOgotICAgICAgZWxzZQotCWNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICAjIFVzaW5nIEltcG9ydCBGaWxlcyBhcyBhcmNoaXZlIG1lbWJlcnMsIGl0IGlzIHBvc3NpYmxlIHRvIHN1cHBvcnQKLSAgICAjIGZpbGVuYW1lLWJhc2VkIHZlcnNpb25pbmcgb2Ygc2hhcmVkIGxpYnJhcnkgYXJjaGl2ZXMgb24gQUlYLiBXaGlsZQotICAgICMgdGhpcyB3b3VsZCB3b3JrIGZvciBib3RoIHdpdGggYW5kIHdpdGhvdXQgcnVudGltZSBsaW5raW5nLCBpdCB3aWxsCi0gICAgIyBwcmV2ZW50IHN0YXRpYyBsaW5raW5nIG9mIHN1Y2ggYXJjaGl2ZXMuIFNvIHdlIGRvIGZpbGVuYW1lLWJhc2VkCi0gICAgIyBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIHdpdGggLnNvIGV4dGVuc2lvbiBvbmx5LCB3aGljaCBpcyB1c2VkCi0gICAgIyB3aGVuIGJvdGggcnVudGltZSBsaW5raW5nIGFuZCBzaGFyZWQgbGlua2luZyBpcyBlbmFibGVkLgotICAgICMgVW5mb3J0dW5hdGVseSwgcnVudGltZSBsaW5raW5nIG1heSBpbXBhY3QgcGVyZm9ybWFuY2UsIHNvIHdlIGRvCi0gICAgIyBub3Qgd2FudCB0aGlzIHRvIGJlIHRoZSBkZWZhdWx0IGV2ZW50dWFsbHkuIEFsc28sIHdlIHVzZSB0aGUKLSAgICAjIHZlcnNpb25lZCAuc28gbGlicyBmb3IgZXhlY3V0YWJsZXMgb25seSBpZiB0aGVyZSBpcyB0aGUgLWJydGwKLSAgICAjIGxpbmtlciBmbGFnIGluIExERkxBR1MgYXMgd2VsbCwgb3IgLS13aXRoLWFpeC1zb25hbWU9c3ZyNCBvbmx5LgotICAgICMgVG8gYWxsb3cgZm9yIGZpbGVuYW1lLWJhc2VkIHZlcnNpb25pbmcgc3VwcG9ydCwgd2UgbmVlZCB0byBjcmVhdGUKLSAgICAjIGxpYk5BTUUuc28uViBhcyBhbiBhcmNoaXZlIGZpbGUsIGNvbnRhaW5pbmc6Ci0gICAgIyAqKSBhbiBJbXBvcnQgRmlsZSwgcmVmZXJyaW5nIHRvIHRoZSB2ZXJzaW9uZWQgZmlsZW5hbWUgb2YgdGhlCi0gICAgIyAgICBhcmNoaXZlIGFzIHdlbGwgYXMgdGhlIHNoYXJlZCBhcmNoaXZlIG1lbWJlciwgdGVsbGluZyB0aGUKLSAgICAjICAgIGJpdHdpZHRoICgzMiBvciA2NCkgb2YgdGhhdCBzaGFyZWQgb2JqZWN0LCBhbmQgcHJvdmlkaW5nIHRoZQotICAgICMgICAgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgZXZlbnR1YWxseQotICAgICMgICAgZGVjb3JhdGVkIHdpdGggdGhlICd3ZWFrJyBrZXl3b3JkCi0gICAgIyAqKSB0aGUgc2hhcmVkIG9iamVjdCB3aXRoIHRoZSBGX0xPQURPTkxZIGZsYWcgc2V0LCB0byByZWFsbHkgYXZvaWQKLSAgICAjICAgIGl0IGJlaW5nIHNlZW4gYnkgdGhlIGxpbmtlci4KLSAgICAjIEF0IHJ1biB0aW1lIHdlIGJldHRlciB1c2UgdGhlIHJlYWwgZmlsZSByYXRoZXIgdGhhbiBhbm90aGVyIHN5bWxpbmssCi0gICAgIyBidXQgZm9yIGxpbmsgdGltZSB3ZSBjcmVhdGUgdGhlIHN5bWxpbmsgbGliTkFNRS5zbyAtPiBsaWJOQU1FLnNvLlYKLQotICAgIGNhc2UgJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW5ub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGFpeCx5ZXMpICMgdHJhZGl0aW9uYWwgbGlidG9vbAotICAgICAgZHluYW1pY19saW5rZXI9J0FJWCB1bnZlcnNpb25hYmxlIGxpYi5zbycKLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICAgIDs7Ci0gICAgYWl4LG5vKSAjIHRyYWRpdGlvbmFsIEFJWCBvbmx5Ci0gICAgICBkeW5hbWljX2xpbmtlcj0nQUlYIGxpYi5hKGxpYi5zby5WKScKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgICAgOzsKLSAgICBzdnI0LCopICMgZnVsbCBzdnI0IG9ubHkKLSAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICAgIDs7Ci0gICAgKix5ZXMpICMgYm90aCwgcHJlZmVyIHN2cjQKLSAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pLCBsaWIuYShsaWIuc28uVikiCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgICAgIyB1bnByZWZlcnJlZCBzaGFyZWRsaWIgbGliTkFNRS5hIG5lZWRzIGV4dHJhIGhhbmRsaW5nCi0gICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC1uICIkbGlua25hbWUiIHx8IGxpbmtuYW1lPSIkcmVhbG5hbWUifmZ1bmNfc3RyaXBuYW1lICIiICIuc28iICIkbGlua25hbWUifiRpbnN0YWxsX3NoYXJlZF9wcm9nICIkZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCJ+dGVzdCAteiAiJHRzdHJpcG1lIiB8fCB0ZXN0IC16ICIkc3RyaXBsaWIiIHx8ICRzdHJpcGxpYiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKLSAgICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXMgJG9sZF9saWJyYXJ5OyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuc28iICIkbiJ+dGVzdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgPSAiJG4iIHx8IGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJwotICAgICAgIyBXZSBkbyBub3Qgc3BlY2lmeSBhIHBhdGggaW4gSW1wb3J0IEZpbGVzLCBzbyBMSUJQQVRIIGZpcmVzLgotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgICAgOzsKLSAgICAqLG5vKSAjIGJvdGgsIHByZWZlciBhaXgKLSAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLmEobGliLnNvLlYpLCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuc28uViBhbmQgc3ltbGluayBsaWJOQU1FLnNvIG5lZWQgZXh0cmEgaGFuZGxpbmcKLSAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLXogIiRkbG5hbWUiIHx8ICRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJGRsbmFtZSAkZGVzdGRpci8kZGxuYW1lfnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC1uICIkbGlua25hbWUiIHx8IGxpbmtuYW1lPSRyZWFsbmFtZX5mdW5jX3N0cmlwbmFtZSAiIiAiLmEiICIkbGlua25hbWUifihjZCAiJGRlc3RkaXIiICYmICRMTl9TIC1mICRkbG5hbWUgJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyknCi0gICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J3Rlc3QgLXogIiRkbG5hbWUiIHx8IGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIn5mb3IgbiBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJG4ifmZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LnNvIicKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgcG93ZXJwYykKLSAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCi0gICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICA7OwotICBtNjhrKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9LmRsbAotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0KLSAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgotICB5ZXMsKikKLSAgICAjIGdjYwotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgotICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KLSAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87Ci0gICAgICBmaScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkUk0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiopCi0gICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCi0KLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgY2VnY2MqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICA7OwotCi0gICosY2wqKQotICAgICMgTmF0aXZlIE1TVkMKLSAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwubGliJwotCi0gICAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgICBtaW5ndyopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ci0gICAgICBsdF9zYXZlX2lmcz0kSUZTCi0gICAgICBJRlM9JzsnCi0gICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCi0gICAgICBkbwotICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCi0gICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAotICAgICAgOzsKLSAgICBjeWd3aW4qKQotICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQotICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0gICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICA7OwotICAgICopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JExJQgotICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKLSAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJFJNIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCi0gICAgOzsKLQotICAqKQotICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0ICRsaWJuYW1lLmxpYicKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAotICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKLSAgOzsKLQotZGd1eCopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzIzXS4qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMi4qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAotICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWhhaWt1KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4MzIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4NjQKLSAgICBmaQotICAgIDs7Ci0gIGhwcGEqNjQqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6Ci0gIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLQllbHNlCi0JCXZlcnNpb25fdHlwZT1pcml4Ci0JZmkgOzsKLSAgZXNhYwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9Ci0gICAgOzsKLSAgKikKLSAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECi0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKLSAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKLSAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQotICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7Ci0gICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCi0gICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OwotICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIC91c3IvbG9jYWwvbGliJGxpYnN1ZmYiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiIKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCi1saW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1saW51eCphbmRyb2lkKikKLSAgdmVyc2lvbl90eXBlPW5vbmUgIyBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCB2ZXJzaW9uZWQgbGlicmFyaWVzLgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JwotICBmaW5pc2hfY21kcz0KLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgotICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKLSAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotCi0gIGR5bmFtaWNfbGlua2VyPSdBbmRyb2lkIGxpbmtlcicKLSAgIyBEb24ndCBlbWJlZCAtcnBhdGggZGlyZWN0b3JpZXMgc2luY2UgdGhlIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0KLSAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICi0gIGlmICR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgc2F2ZV9saWJkaXI9JGxpYmRpcgotICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWFwiOyBcCi0JIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYXCIiCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLWZpCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLSAgICBsaWJkaXI9JHNhdmVfbGliZGlyCi0KLWZpCi0KLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICAjIElkZWFsbHksIHdlIGNvdWxkIHVzZSBsZGNvbmZpZyB0byByZXBvcnQgKmFsbCogZGlyZWN0b3JlcyB3aGljaCBhcmUKLSAgIyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLCBob3dldmVyIHRoaXMgaXMgc3RpbGwgbm90IHBvc3NpYmxlLiAgQXNpZGUgZnJvbSBub3QKLSAgIyBiZWluZyBjZXJ0YWluIC9zYmluL2xkY29uZmlnIGlzIGF2YWlsYWJsZSwgY29tbWFuZAotICAjICdsZGNvbmZpZyAtTiAtWCAtdiB8IGdyZXAgXi8nIG9uIDY0Yml0IEZlZG9yYSBkb2VzIG5vdCByZXBvcnQgL3Vzci9saWI2NCwKLSAgIyBldmVuIHRob3VnaCBpdCBpcyBzZWFyY2hlZCBhdCBydW4tdGltZS4gIFRyeSB0byBkbyB0aGUgYmVzdCBndWVzcyBieQotICAjIGFwcGVuZGluZyBsZC5zby5jb25mIGNvbnRlbnRzIChhbmQgaW5jbHVkZXMpIHRvIHRoZSBzZWFyY2ggcGF0aC4KLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2RlbGYqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIDs7Ci0KLW5ldGJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwotICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwotICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi0qbnRvKiB8ICpxbngqKQotICB2ZXJzaW9uX3R5cGU9cW54Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCi0gIDs7Ci0KLW9wZW5ic2QqIHwgYml0cmlnKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KLSAgICBuZWVkX3ZlcnNpb249bm8KLSAgZWxzZQotICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgZmkKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPS5kbGwKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIE9TLzIgY2FuIG9ubHkgbG9hZCBhIERMTCB3aXRoIGEgYmFzZSBuYW1lIG9mIDggY2hhcmFjdGVycyBvciBsZXNzLgotICBzb25hbWVfc3BlYz0nYHRlc3QgLW4gIiRvczJkbGxuYW1lIiAmJiBsaWJuYW1lPSIkb3MyZGxsbmFtZSI7Ci0gICAgdj0kKCRFQ0hPICRyZWxlYXNlJHZlcnN1ZmZpeCB8IHRyIC1kIC4tKTsKLSAgICBuPSQoJEVDSE8gJGxpYm5hbWUgfCBjdXQgLWIgLSQoKDggLSAkeyN2fSkpIHwgdHIgLiBfKTsKLSAgICAkRUNITyAkbiR2YCRzaGFyZWRfZXh0JwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1fZGxsLiRsaWJleHQnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1CRUdJTkxJQlBBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KLSAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgotICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCi0gICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKLSAgICBmaScKLSAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAkUk0gXCRkbHBhdGgnCi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPXNjbwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdHBmKikKLSAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLSRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQotdGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotCi1pZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotZmkKLQotaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLWZpCi0KLSMgcmVtZW1iZXIgdW5hdWdtZW50ZWQgc3lzX2xpYl9kbHNlYXJjaF9wYXRoIGNvbnRlbnQgZm9yIGxpYnRvb2wgc2NyaXB0IGRlY2xzLi4uCi1jb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIC4uLiBidXQgaXQgbmVlZHMgTFRfU1lTX0xJQlJBUllfUEFUSCBtdW5naW5nIGZvciBvdGhlciBjb25maWd1cmUtdGltZSBjb2RlCi1mdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAiJExUX1NZU19MSUJSQVJZX1BBVEgiCi0KLSMgdG8gYmUgdXNlZCBhcyBkZWZhdWx0IExUX1NZU19MSUJSQVJZX1BBVEggdmFsdWUgaW4gZ2VuZXJhdGVkIGxpYnRvb2wKLWNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9JExUX1NZU19MSUJSQVJZX1BBVEgKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9Ci1oYXJkY29kZV9hY3Rpb25fQ1hYPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8fAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwKLSAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIjsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCBubyAhPSAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIENYWCkiICYmCi0gICAgIHRlc3Qgbm8gIT0gIiRoYXJkY29kZV9taW51c19MX0NYWCI7IHRoZW4KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9aW1tZWRpYXRlCi0gIGZpCi1lbHNlCi0gICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCi0gICMgZGlyZWN0b3JpZXMuCi0gIGhhcmRjb2RlX2FjdGlvbl9DWFg9dW5zdXBwb3J0ZWQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNQotJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjY7IH0KLQotaWYgdGVzdCByZWxpbmsgPSAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiIHx8Ci0gICB0ZXN0IHllcyA9ICIkaW5oZXJpdF9ycGF0aF9DWFgiOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8Ci0gICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotCi0KLQotCi0KLQotCi0gIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgotCi0gIENDPSRsdF9zYXZlX0NDCi0gIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLSAgTERDWFg9JExECi0gIExEPSRsdF9zYXZlX0xECi0gIEdDQz0kbHRfc2F2ZV9HQ0MKLSAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLSAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAotICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKLSAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCi0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1maSAjIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi1hY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0gY2xhc3MgRm9vIHsgaW50IGJhcjsgfTsKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICB3b3JraW5nX2N4eD15ZXMKLWVsc2UKLSAgd29ya2luZ19jeHg9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB3b3JraW5nIGMrKyBjb21waWxlciBmb3VuZDogJHdvcmtpbmdfY3h4IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IHdvcmtpbmcgYysrIGNvbXBpbGVyIGZvdW5kOiAkd29ya2luZ19jeHgiID4mNjt9Ci0gaWYgdGVzdCAieCR3b3JraW5nX2N4eCIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DWFhfVFJVRT0KLSAgSEFWRV9DWFhfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1hYX1RSVUU9JyMnCi0gIEhBVkVfQ1hYX0ZBTFNFPQotZmkKLQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBlcmwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHBlcmw7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX1BFUkxfUEFUSCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJFBFUkxfUEFUSCBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9QRVJMX1BBVEg9IiRQRVJMX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX1BFUkxfUEFUSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QRVJMX1BBVEgiICYmIGFjX2N2X3BhdGhfUEVSTF9QQVRIPSJubyIKLSAgOzsKLWVzYWMKLWZpCi1QRVJMX1BBVEg9JGFjX2N2X3BhdGhfUEVSTF9QQVRICi1pZiB0ZXN0IC1uICIkUEVSTF9QQVRIIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBFUkxfUEFUSCIgPiY1Ci0kYXNfZWNobyAiJFBFUkxfUEFUSCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1pZiB0ZXN0IHgkUEVSTF9QQVRIID0geG5vOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBwZXJsIiAiJExJTkVOTyIgNQotZmkKLQotaWYgdGVzdCAieCRHU1RfRElTQUJMRV9QQVJTRSIgIT0geHllczsgdGhlbgotCi0gICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImJpc29uIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBiaXNvbjsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfQklTT05fUEFUSCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJEJJU09OX1BBVEggaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfQklTT05fUEFUSD0iJEJJU09OX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX0JJU09OX1BBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhfQklTT05fUEFUSCIgJiYgYWNfY3ZfcGF0aF9CSVNPTl9QQVRIPSJubyIKLSAgOzsKLWVzYWMKLWZpCi1CSVNPTl9QQVRIPSRhY19jdl9wYXRoX0JJU09OX1BBVEgKLWlmIHRlc3QgLW4gIiRCSVNPTl9QQVRIIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEJJU09OX1BBVEgiID4mNQotJGFzX2VjaG8gIiRCSVNPTl9QQVRIIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgaWYgdGVzdCB4JEJJU09OX1BBVEggPSB4bm87IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgYmlzb24iICIkTElORU5PIiA1Ci0gIGZpCi0KLSAgICAgICAgICBiaXNvbl9taW5fdmVyc2lvbj0yLjQKLSAgYmlzb25fdmVyc2lvbj1gJEJJU09OX1BBVEggLS12ZXJzaW9uIHwgaGVhZCAtbiAxIHwgIHNlZCAncy9eW14wLTldKi8vJyB8IHNlZCAncy9bXjAtOV0qJC8vJyB8IGN1dCAtZCcgJyAtZjFgCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYmlzb24gdmVyc2lvbiAkYmlzb25fdmVyc2lvbiA+PSAkYmlzb25fbWluX3ZlcnNpb24iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgYmlzb24gdmVyc2lvbiAkYmlzb25fdmVyc2lvbiA+PSAkYmlzb25fbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KLQotICBpZiBwZXJsIC13ZSAiZXhpdCAoKCd2JGJpc29uX3ZlcnNpb24nIGdlICd2JGJpc29uX21pbl92ZXJzaW9uJykgPyAwIDogMSkiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLSAgZWxzZQotICAgIGFzX2ZuX2Vycm9yICQ/ICJubyIgIiRMSU5FTk8iIDUKLSAgZmkKLQotCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJmbGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBmbGV4OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9GTEVYX1BBVEgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRGTEVYX1BBVEggaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfRkxFWF9QQVRIPSIkRkxFWF9QQVRIIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9GTEVYX1BBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhfRkxFWF9QQVRIIiAmJiBhY19jdl9wYXRoX0ZMRVhfUEFUSD0ibm8iCi0gIDs7Ci1lc2FjCi1maQotRkxFWF9QQVRIPSRhY19jdl9wYXRoX0ZMRVhfUEFUSAotaWYgdGVzdCAtbiAiJEZMRVhfUEFUSCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRGTEVYX1BBVEgiID4mNQotJGFzX2VjaG8gIiRGTEVYX1BBVEgiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBpZiB0ZXN0IHgkRkxFWF9QQVRIID0geG5vOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIGZsZXgiICIkTElORU5PIiA1Ci0gIGZpCi0KLSAgICAgICAgZmxleF9taW5fdmVyc2lvbj0yLjUuMzEKLSAgZmxleF92ZXJzaW9uPWAkRkxFWF9QQVRIIC0tdmVyc2lvbiB8IGhlYWQgLW4gMSB8IGF3ayAne3ByaW50IH0nYAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZsZXggdmVyc2lvbiAkZmxleF92ZXJzaW9uID49ICRmbGV4X21pbl92ZXJzaW9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZsZXggdmVyc2lvbiAkZmxleF92ZXJzaW9uID49ICRmbGV4X21pbl92ZXJzaW9uLi4uICIgPiY2OyB9Ci0gIGlmIHBlcmwgLXcgPDxFT0YKLSAgICAoXCRtaW5fdmVyc2lvbl9tYWpvciwgXCRtaW5fdmVyc2lvbl9taW5vciwgXCRtaW5fdmVyc2lvbl9taWNybyApID0gIiRmbGV4X21pbl92ZXJzaW9uIiA9fiAvKFxkKylcLihcZCspXC4oXGQrKS87Ci0gICAgKFwkZmxleF92ZXJzaW9uX21ham9yLCBcJGZsZXhfdmVyc2lvbl9taW5vciwgXCRmbGV4X3ZlcnNpb25fbWljcm8gKSA9ICIkZmxleF92ZXJzaW9uIiA9fiAvKFxkKylcLihcZCspXC4oXGQrKS87Ci0gICAgZXhpdCAoKChcJGZsZXhfdmVyc2lvbl9tYWpvciA+IFwkbWluX3ZlcnNpb25fbWFqb3IpIHx8Ci0gICAgICgoXCRmbGV4X3ZlcnNpb25fbWFqb3IgPT0gXCRtaW5fdmVyc2lvbl9tYWpvcikgJiYKLSAgICAgIChcJGZsZXhfdmVyc2lvbl9taW5vciA+IFwkbWluX3ZlcnNpb25fbWlub3IpKSB8fAotICAgICAoKFwkZmxleF92ZXJzaW9uX21ham9yID09IFwkbWluX3ZlcnNpb25fbWFqb3IpICYmCi0gICAgICAoXCRmbGV4X3ZlcnNpb25fbWlub3IgPT0gXCRtaW5fdmVyc2lvbl9taW5vcikgJiYKLSAgICAgIChcJGZsZXhfdmVyc2lvbl9taWNybyA+PSBcJG1pbl92ZXJzaW9uX21pY3JvKSkpCi0gICAgID8gMCA6IDEpOwotRU9GCi0gIHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotICBlbHNlCi0gICAgYXNfZm5fZXJyb3IgJD8gIm5vIiAiJExJTkVOTyIgNQotICBmaQotCi1maQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInZhbGdyaW5kIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSB2YWxncmluZDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfVkFMR1JJTkRfUEFUSCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJFZBTEdSSU5EX1BBVEggaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfVkFMR1JJTkRfUEFUSD0iJFZBTEdSSU5EX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX1ZBTEdSSU5EX1BBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhfVkFMR1JJTkRfUEFUSCIgJiYgYWNfY3ZfcGF0aF9WQUxHUklORF9QQVRIPSJubyIKLSAgOzsKLWVzYWMKLWZpCi1WQUxHUklORF9QQVRIPSRhY19jdl9wYXRoX1ZBTEdSSU5EX1BBVEgKLWlmIHRlc3QgLW4gIiRWQUxHUklORF9QQVRIIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFZBTEdSSU5EX1BBVEgiID4mNQotJGFzX2VjaG8gIiRWQUxHUklORF9QQVRIIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSBpZiB0ZXN0ICEgIngkVkFMR1JJTkRfUEFUSCIgPSAieG5vIjsgdGhlbgotICBIQVZFX1ZBTEdSSU5EX1RSVUU9Ci0gIEhBVkVfVkFMR1JJTkRfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfVkFMR1JJTkRfVFJVRT0nIycKLSAgSEFWRV9WQUxHUklORF9GQUxTRT0KLWZpCi0KLQotCi0KLQotICAgICAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2ludHJvc3BlY3Rpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9pbnRyb3NwZWN0aW9uOwotZWxzZQotICBlbmFibGVfaW50cm9zcGVjdGlvbj1hdXRvCi1maQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnb2JqZWN0LWludHJvc3BlY3Rpb24iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdvYmplY3QtaW50cm9zcGVjdGlvbi4uLiAiID4mNjsgfQotCi0gICAgICAgIGNhc2UgJGVuYWJsZV9pbnRyb3NwZWN0aW9uIGluICMoCi0gIG5vKSA6Ci0gICAgICAgICAgICBmb3VuZF9pbnRyb3NwZWN0aW9uPSJubyAoZGlzYWJsZWQsIHVzZSAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uIHRvIGVuYWJsZSkiCi0gICAgIDs7ICMoCi0gICAgICB5ZXMpIDoKLSAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgYXNfZm5fZXJyb3IgJD8gImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgaXMgbm90IGluc3RhbGxlZCIgIiRMSU5FTk8iIDUKLWZpCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMS4zMS4xXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMS4zMS4xIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgZm91bmRfaW50cm9zcGVjdGlvbj15ZXMKLWVsc2UKLSAgYXNfZm5fZXJyb3IgJD8gIllvdSBuZWVkIHRvIGhhdmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uID49IDEuMzEuMSBpbnN0YWxsZWQgdG8gYnVpbGQgR1N0cmVhbWVyIiAiJExJTkVOTyIgNQotZmkKLSAgICAgOzsgIygKLSAgICAgIGF1dG8pIDoKLSAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMS4zMS4xXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMS4zMS4xIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgZm91bmRfaW50cm9zcGVjdGlvbj15ZXMKLWVsc2UKLSAgZm91bmRfaW50cm9zcGVjdGlvbj1ubwotZmkKLSAgICAgOzsgIygKLSAgKikgOgotICAgICAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uLCBzaG91bGQgYmUgb25lIG9mIFtuby9hdXRvL3llc10iICIkTElORU5PIiA1Ci0gICAgIDs7Ci1lc2FjCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmb3VuZF9pbnRyb3NwZWN0aW9uIiA+JjUKLSRhc19lY2hvICIkZm91bmRfaW50cm9zcGVjdGlvbiIgPiY2OyB9Ci0KLSAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9Ci0gICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj0KLSAgICBJTlRST1NQRUNUSU9OX0dFTkVSQVRFPQotICAgIElOVFJPU1BFQ1RJT05fR0lSRElSPQotICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0KLSAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCi0gICAgICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfc2Nhbm5lciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fQ09NUElMRVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9jb21waWxlciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9nZW5lcmF0ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fR0lSRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdpcmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0iJCgkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXR5cGVsaWJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCkiCi0gICAgICAgSU5UUk9TUEVDVElPTl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0gICAgICAgSU5UUk9TUEVDVElPTl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLSAgICAgICBJTlRST1NQRUNUSU9OX01BS0VGSUxFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCi0gICAgICAgSU5UUk9TUEVDVElPTl9JTklUPSJleHRlcm4gdm9pZCBnc3RfaW5pdChnaW50KixnY2hhcioqKTsgZ3N0X2luaXQoTlVMTCxOVUxMKTsiCi0gICAgZmkKLQotCi0KLQotCi0KLQotCi0KLQotICAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFPQotICBIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFPScjJwotICBIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0U9Ci1maQotCi0KLQotCi0KLSAgICBpZiB0ZXN0ICJ4JFBBQ0tBR0VfVEFSTkFNRSIgPSAieCIKLSAgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJJbnRlcm5hbCBlcnJvciAtIFBBQ0tBR0VfVEFSTkFNRSBub3Qgc2V0IiAiJExJTkVOTyIgNQotICBmaQotICBkb2NkaXI9IlwkKGRhdGFkaXIpL2RvYy8kUEFDS0FHRV9UQVJOQU1FLSRHU1RfQVBJX1ZFUlNJT04iCi0KLSAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG9jYm9vayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kb2Nib29rK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZG9jYm9vazsKLWVsc2UKLSAgZW5hYmxlX2RvY2Jvb2s9bm8KLWZpCi0KLQotICBoYXZlX2RvY2Jvb2s9bm8KLQotICBpZiB0ZXN0IHgkZW5hYmxlX2RvY2Jvb2sgPSB4eWVzOyB0aGVuCi0KLSAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkb2Nib29rMnBzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBkb2Nib29rMnBzOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19IQVZFX0RPQ0JPT0syUFMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkSEFWRV9ET0NCT09LMlBTIjsgdGhlbgotICBhY19jdl9wcm9nX0hBVkVfRE9DQk9PSzJQUz0iJEhBVkVfRE9DQk9PSzJQUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0hBVkVfRE9DQk9PSzJQUz0ieWVzIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX0hBVkVfRE9DQk9PSzJQUyIgJiYgYWNfY3ZfcHJvZ19IQVZFX0RPQ0JPT0syUFM9Im5vIgotZmkKLWZpCi1IQVZFX0RPQ0JPT0syUFM9JGFjX2N2X3Byb2dfSEFWRV9ET0NCT09LMlBTCi1pZiB0ZXN0IC1uICIkSEFWRV9ET0NCT09LMlBTIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEhBVkVfRE9DQk9PSzJQUyIgPiY1Ci0kYXNfZWNobyAiJEhBVkVfRE9DQk9PSzJQUyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4c2x0cHJvYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgeHNsdHByb2M7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0hBVkVfWFNMVFBST0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkSEFWRV9YU0xUUFJPQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19IQVZFX1hTTFRQUk9DPSIkSEFWRV9YU0xUUFJPQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0hBVkVfWFNMVFBST0M9InllcyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX1hTTFRQUk9DIiAmJiBhY19jdl9wcm9nX0hBVkVfWFNMVFBST0M9Im5vIgotZmkKLWZpCi1IQVZFX1hTTFRQUk9DPSRhY19jdl9wcm9nX0hBVkVfWFNMVFBST0MKLWlmIHRlc3QgLW4gIiRIQVZFX1hTTFRQUk9DIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEhBVkVfWFNMVFBST0MiID4mNQotJGFzX2VjaG8gIiRIQVZFX1hTTFRQUk9DIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImphZGV0ZXgiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGphZGV0ZXg7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0hBVkVfSkFERVRFWCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRIQVZFX0pBREVURVgiOyB0aGVuCi0gIGFjX2N2X3Byb2dfSEFWRV9KQURFVEVYPSIkSEFWRV9KQURFVEVYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfSEFWRV9KQURFVEVYPSJ5ZXMiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfSEFWRV9KQURFVEVYIiAmJiBhY19jdl9wcm9nX0hBVkVfSkFERVRFWD0ibm8iCi1maQotZmkKLUhBVkVfSkFERVRFWD0kYWNfY3ZfcHJvZ19IQVZFX0pBREVURVgKLWlmIHRlc3QgLW4gIiRIQVZFX0pBREVURVgiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9KQURFVEVYIiA+JjUKLSRhc19lY2hvICIkSEFWRV9KQURFVEVYIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBzMnBkZiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcHMycGRmOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19IQVZFX1BTMlBERis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRIQVZFX1BTMlBERiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19IQVZFX1BTMlBERj0iJEhBVkVfUFMyUERGIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfSEFWRV9QUzJQREY9InllcyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX1BTMlBERiIgJiYgYWNfY3ZfcHJvZ19IQVZFX1BTMlBERj0ibm8iCi1maQotZmkKLUhBVkVfUFMyUERGPSRhY19jdl9wcm9nX0hBVkVfUFMyUERGCi1pZiB0ZXN0IC1uICIkSEFWRV9QUzJQREYiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9QUzJQREYiID4mNQotJGFzX2VjaG8gIiRIQVZFX1BTMlBERiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0KLQotICBYU0xUUFJPQ19GTEFHUz0tLW5vbmV0Ci0gIERPQ0JPT0tfUk9PVD0KLSAgVFlQRV9MQz14bWwKLSAgVFlQRV9VQz1YTUwKLSAgRE9DQk9PS19WRVJTSU9OPTQuMS4yCi0KLSAgaWYgdGVzdCAtbiAiJFhNTF9DQVRBTE9HX0ZJTEVTIjsgdGhlbgotICAgIG9sZElGUz0kSUZTCi0gICAgSUZTPScgJwotICAgIGZvciB4bWxfY2F0YWxvZ19maWxlIGluICRYTUxfQ0FUQUxPR19GSUxFUzsgZG8KLSAgICAgIGlmIHRlc3QgLWYgJHhtbF9jYXRhbG9nX2ZpbGU7IHRoZW4KLSAgICAgICAgWE1MX0NBVEFMT0c9JHhtbF9jYXRhbG9nX2ZpbGUKLSAgICAgICAgQ0FUX0VOVFJZX1NUQVJUPSc8IS0tJwotICAgICAgICBDQVRfRU5UUllfRU5EPSctLT4nCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9JG9sZElGUwotICBlbGlmIHRlc3QgISAtZiAvZXRjL3htbC9jYXRhbG9nOyB0aGVuCi0gICAgZm9yIGkgaW4gL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2svc3R5bGVzaGVldC94c2wvbndhbHNoIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy8gL3Vzci9sb2NhbC9zaGFyZS94c2wvZG9jYm9vayA7Ci0gICAgZG8KLSAgICAgIGlmIHRlc3QgLWQgIiRpIjsgdGhlbgotICAgICAgICBET0NCT09LX1JPT1Q9JGkKLSAgICAgIGZpCi0gICAgZG9uZQotICBlbHNlCi0gICAgWE1MX0NBVEFMT0c9L2V0Yy94bWwvY2F0YWxvZwotICAgIENBVF9FTlRSWV9TVEFSVD0nPCEtLScKLSAgICBDQVRfRU5UUllfRU5EPSctLT4nCi0gIGZpCi0KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhzbHRwcm9jIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSB4c2x0cHJvYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfWFNMVFBST0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkWFNMVFBST0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfWFNMVFBST0M9IiRYU0xUUFJPQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX1hTTFRQUk9DPSJ4c2x0cHJvYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1YU0xUUFJPQz0kYWNfY3ZfcHJvZ19YU0xUUFJPQwotaWYgdGVzdCAtbiAiJFhTTFRQUk9DIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhTTFRQUk9DIiA+JjUKLSRhc19lY2hvICIkWFNMVFBST0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBYU0xUUFJPQ19XT1JLUz1ubwotICBpZiB0ZXN0IC1uICIkWFNMVFBST0MiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHhzbHRwcm9jIGRvY2Jvb2sgcHJvY2Vzc2luZyB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHhzbHRwcm9jIGRvY2Jvb2sgcHJvY2Vzc2luZyB3b3Jrcy4uLiAiID4mNjsgfQotCi0gICAgaWYgdGVzdCAtbiAiJFhNTF9DQVRBTE9HIjsgdGhlbgotICAgICAgREJfRklMRT0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQveGh0bWwvZG9jYm9vay54c2wiCi0gICAgZWxzZQotICAgICAgREJfRklMRT0iJERPQ0JPT0tfUk9PVC94aHRtbC9kb2Nib29rLnhzbCIKLSAgICBmaQotICAgICRYU0xUUFJPQyAkWFNMVFBST0NfRkxBR1MgJERCX0ZJTEUgPi9kZXYvbnVsbCAyPiYxIDw8IEVORAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0nSVNPLTg4NTktMSc/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgJFRZUEVfVUMgViRET0NCT09LX1ZFUlNJT04vL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyRUWVBFX0xDLyRET0NCT09LX1ZFUlNJT04vZG9jYm9va3guZHRkIj4KLTxib29rIGlkPSJ0ZXN0Ij4KLTwvYm9vaz4KLUVORAotICAgIGlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KLSAgICAgIFhTTFRQUk9DX1dPUktTPXllcwotICAgIGZpCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYU0xUUFJPQ19XT1JLUyIgPiY1Ci0kYXNfZWNobyAiJFhTTFRQUk9DX1dPUktTIiA+JjY7IH0KLSAgZmkKLQotICBpZiB0ZXN0ICJ4JFhTTFRQUk9DX1dPUktTIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBoYXZlX2RvY2Jvb2s9eWVzCi0gIGVsc2UKLSAgICAgICAgaGF2ZV9kb2Nib29rPW5vCi0gIGZpCi0KLQotCi0KLQotCi0KLQotICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImR2aXBzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBkdmlwczsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfSEFWRV9EVklQUys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRIQVZFX0RWSVBTIjsgdGhlbgotICBhY19jdl9wcm9nX0hBVkVfRFZJUFM9IiRIQVZFX0RWSVBTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfSEFWRV9EVklQUz0ieWVzIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX0hBVkVfRFZJUFMiICYmIGFjX2N2X3Byb2dfSEFWRV9EVklQUz0ibm8iCi1maQotZmkKLUhBVkVfRFZJUFM9JGFjX2N2X3Byb2dfSEFWRV9EVklQUwotaWYgdGVzdCAtbiAiJEhBVkVfRFZJUFMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9EVklQUyIgPiY1Ci0kYXNfZWNobyAiJEhBVkVfRFZJUFMiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAieG1sbGludCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgeG1sbGludDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfSEFWRV9YTUxMSU5UKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEhBVkVfWE1MTElOVCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19IQVZFX1hNTExJTlQ9IiRIQVZFX1hNTExJTlQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19IQVZFX1hNTExJTlQ9InllcyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX1hNTExJTlQiICYmIGFjX2N2X3Byb2dfSEFWRV9YTUxMSU5UPSJubyIKLWZpCi1maQotSEFWRV9YTUxMSU5UPSRhY19jdl9wcm9nX0hBVkVfWE1MTElOVAotaWYgdGVzdCAtbiAiJEhBVkVfWE1MTElOVCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRIQVZFX1hNTExJTlQiID4mNQotJGFzX2VjaG8gIiRIQVZFX1hNTExJTlQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwbmd0b3BubSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcG5ndG9wbm07IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0hBVkVfUE5HVE9QTk0rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkSEFWRV9QTkdUT1BOTSI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19IQVZFX1BOR1RPUE5NPSIkSEFWRV9QTkdUT1BOTSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0hBVkVfUE5HVE9QTk09InllcyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX1BOR1RPUE5NIiAmJiBhY19jdl9wcm9nX0hBVkVfUE5HVE9QTk09Im5vIgotZmkKLWZpCi1IQVZFX1BOR1RPUE5NPSRhY19jdl9wcm9nX0hBVkVfUE5HVE9QTk0KLWlmIHRlc3QgLW4gIiRIQVZFX1BOR1RPUE5NIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEhBVkVfUE5HVE9QTk0iID4mNQotJGFzX2VjaG8gIiRIQVZFX1BOR1RPUE5NIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBubXRvcHMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHBubXRvcHM7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0hBVkVfUE5NVE9QUys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRIQVZFX1BOTVRPUFMiOyB0aGVuCi0gIGFjX2N2X3Byb2dfSEFWRV9QTk1UT1BTPSIkSEFWRV9QTk1UT1BTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfSEFWRV9QTk1UT1BTPSJ5ZXMiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfSEFWRV9QTk1UT1BTIiAmJiBhY19jdl9wcm9nX0hBVkVfUE5NVE9QUz0ibm8iCi1maQotZmkKLUhBVkVfUE5NVE9QUz0kYWNfY3ZfcHJvZ19IQVZFX1BOTVRPUFMKLWlmIHRlc3QgLW4gIiRIQVZFX1BOTVRPUFMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9QTk1UT1BTIiA+JjUKLSRhc19lY2hvICIkSEFWRV9QTk1UT1BTIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImVwc3RvcGRmIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBlcHN0b3BkZjsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfSEFWRV9FUFNUT1BERis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRIQVZFX0VQU1RPUERGIjsgdGhlbgotICBhY19jdl9wcm9nX0hBVkVfRVBTVE9QREY9IiRIQVZFX0VQU1RPUERGIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfSEFWRV9FUFNUT1BERj0ieWVzIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX0hBVkVfRVBTVE9QREYiICYmIGFjX2N2X3Byb2dfSEFWRV9FUFNUT1BERj0ibm8iCi1maQotZmkKLUhBVkVfRVBTVE9QREY9JGFjX2N2X3Byb2dfSEFWRV9FUFNUT1BERgotaWYgdGVzdCAtbiAiJEhBVkVfRVBTVE9QREYiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9FUFNUT1BERiIgPiY1Ci0kYXNfZWNobyAiJEhBVkVfRVBTVE9QREYiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotCi0gICAgICAgIGlmIHRlc3QgIngkSEFWRV9YU0xUUFJPQyIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkZW5hYmxlX2RvY2Jvb2siID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfWE1MTElOVCIgPSAieHllcyI7IHRoZW4KLSAgICAgIERPQ19IVE1MPXllcwotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXaWxsIG91dHB1dCBIVE1MIGRvY3VtZW50YXRpb24iID4mNQotJGFzX2VjaG8gIiRhc19tZTogV2lsbCBvdXRwdXQgSFRNTCBkb2N1bWVudGF0aW9uIiA+JjY7fQotICAgICBlbHNlCi0gICAgICBET0NfSFRNTD1ubwotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXaWxsIG5vdCBvdXRwdXQgSFRNTCBkb2N1bWVudGF0aW9uIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdpbGwgbm90IG91dHB1dCBIVE1MIGRvY3VtZW50YXRpb24iID4mNjt9Ci0gICAgZmkKLQotICAgICAgICBpZiB0ZXN0ICJ4JEhBVkVfRE9DQk9PSzJQUyIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkZW5hYmxlX2RvY2Jvb2siID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfWE1MTElOVCIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkSEFWRV9KQURFVEVYIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRIQVZFX0RWSVBTIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRIQVZFX1BOR1RPUE5NIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRIQVZFX1BOTVRPUFMiID0gInh5ZXMiOyB0aGVuCi0gICAgICBET0NfUFM9eWVzCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdpbGwgb3V0cHV0IFBTIGRvY3VtZW50YXRpb24iID4mNQotJGFzX2VjaG8gIiRhc19tZTogV2lsbCBvdXRwdXQgUFMgZG9jdW1lbnRhdGlvbiIgPiY2O30KLSAgICBlbHNlCi0gICAgICBET0NfUFM9bm8KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV2lsbCBub3Qgb3V0cHV0IFBTIGRvY3VtZW50YXRpb24iID4mNQotJGFzX2VjaG8gIiRhc19tZTogV2lsbCBub3Qgb3V0cHV0IFBTIGRvY3VtZW50YXRpb24iID4mNjt9Ci0gICAgZmkKLQotICAgICAgICBpZiB0ZXN0ICJ4JERPQ19QUyIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkZW5hYmxlX2RvY2Jvb2siID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfWE1MTElOVCIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkSEFWRV9QUzJQREYiID0gInh5ZXMiOyB0aGVuCi0gICAgICBET0NfUERGPXllcwotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXaWxsIG91dHB1dCBQREYgZG9jdW1lbnRhdGlvbiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXaWxsIG91dHB1dCBQREYgZG9jdW1lbnRhdGlvbiIgPiY2O30KLSAgICBlbHNlCi0gICAgICBET0NfUERGPW5vCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdpbGwgbm90IG91dHB1dCBQREYgZG9jdW1lbnRhdGlvbiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXaWxsIG5vdCBvdXRwdXQgUERGIGRvY3VtZW50YXRpb24iID4mNjt9Ci0gICAgZmkKLQotICAgICAgICBpZiB0ZXN0ICJ4JGhhdmVfZG9jYm9vayIgIT0gInh5ZXMiOyB0aGVuCi0gICAgICBlbmFibGVfZG9jYm9vaz1ubwotICAgIGZpCi0gIGZpCi0KLSAgICBpZiB0ZXN0ICJ4JGhhdmVfZG9jYm9vayIgPSAieHllcyI7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IEluc3RhbGxpbmcgZG9jdW1lbnRhdGlvbiBpbiAkZG9jZGlyIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IEluc3RhbGxpbmcgZG9jdW1lbnRhdGlvbiBpbiAkZG9jZGlyIiA+JjY7fQotCi0gIGZpCi0KLSAgIGlmIHRlc3QgeCRlbmFibGVfZG9jYm9vayA9IHh5ZXM7IHRoZW4KLSAgRU5BQkxFX0RPQ0JPT0tfVFJVRT0KLSAgRU5BQkxFX0RPQ0JPT0tfRkFMU0U9JyMnCi1lbHNlCi0gIEVOQUJMRV9ET0NCT09LX1RSVUU9JyMnCi0gIEVOQUJMRV9ET0NCT09LX0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCB4JERPQ19IVE1MID0geHllczsgdGhlbgotICBET0NfSFRNTF9UUlVFPQotICBET0NfSFRNTF9GQUxTRT0nIycKLWVsc2UKLSAgRE9DX0hUTUxfVFJVRT0nIycKLSAgRE9DX0hUTUxfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0IHgkRE9DX1BERiA9IHh5ZXM7IHRoZW4KLSAgRE9DX1BERl9UUlVFPQotICBET0NfUERGX0ZBTFNFPScjJwotZWxzZQotICBET0NfUERGX1RSVUU9JyMnCi0gIERPQ19QREZfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0IHgkRE9DX1BTID0geHllczsgdGhlbgotICBET0NfUFNfVFJVRT0KLSAgRE9DX1BTX0ZBTFNFPScjJwotZWxzZQotICBET0NfUFNfVFJVRT0nIycKLSAgRE9DX1BTX0ZBTFNFPQotZmkKLQotCi0KLQotCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJndGtkb2MtY2hlY2siLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGd0a2RvYy1jaGVjazsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfR1RLRE9DX0NIRUNLKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkR1RLRE9DX0NIRUNLIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0dUS0RPQ19DSEVDSz0iJEdUS0RPQ19DSEVDSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfR1RLRE9DX0NIRUNLPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIDs7Ci1lc2FjCi1maQotR1RLRE9DX0NIRUNLPSRhY19jdl9wYXRoX0dUS0RPQ19DSEVDSwotaWYgdGVzdCAtbiAiJEdUS0RPQ19DSEVDSyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHVEtET0NfQ0hFQ0siID4mNQotJGFzX2VjaG8gIiRHVEtET0NfQ0hFQ0siID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBmb3IgYWNfcHJvZyBpbiBndGtkb2MtcmViYXNlCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfR1RLRE9DX1JFQkFTRSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJEdUS0RPQ19SRUJBU0UgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfR1RLRE9DX1JFQkFTRT0iJEdUS0RPQ19SRUJBU0UiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX0dUS0RPQ19SRUJBU0U9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgOzsKLWVzYWMKLWZpCi1HVEtET0NfUkVCQVNFPSRhY19jdl9wYXRoX0dUS0RPQ19SRUJBU0UKLWlmIHRlc3QgLW4gIiRHVEtET0NfUkVCQVNFIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdUS0RPQ19SRUJBU0UiID4mNQotJGFzX2VjaG8gIiRHVEtET0NfUkVCQVNFIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJEdUS0RPQ19SRUJBU0UiICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkR1RLRE9DX1JFQkFTRSIgfHwgR1RLRE9DX1JFQkFTRT0idHJ1ZSIKLQotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImd0a2RvYy1ta3BkZiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZ3RrZG9jLW1rcGRmOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9HVEtET0NfTUtQREYrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRHVEtET0NfTUtQREYgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfR1RLRE9DX01LUERGPSIkR1RLRE9DX01LUERGIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9HVEtET0NfTUtQREY9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgOzsKLWVzYWMKLWZpCi1HVEtET0NfTUtQREY9JGFjX2N2X3BhdGhfR1RLRE9DX01LUERGCi1pZiB0ZXN0IC1uICIkR1RLRE9DX01LUERGIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdUS0RPQ19NS1BERiIgPiY1Ci0kYXNfZWNobyAiJEdUS0RPQ19NS1BERiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1odG1sLWRpciB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfaHRtbF9kaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2h0bWxfZGlyOwotZWxzZQotICB3aXRoX2h0bWxfZGlyPScke2RhdGFkaXJ9L2d0ay1kb2MvaHRtbCcKLWZpCi0KLSAgSFRNTF9ESVI9IiR3aXRoX2h0bWxfZGlyIgotCi0KLSAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ3RrLWRvYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ndGtfZG9jK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ3RrX2RvYzsKLWVsc2UKLSAgZW5hYmxlX2d0a19kb2M9bm8KLWZpCi0KLQotICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ3RrLWRvYyA+PSAxLjEyXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImd0ay1kb2MgPj0gMS4xMiIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgYXNfZm5fZXJyb3IgJD8gIllvdSBuZWVkIHRvIGhhdmUgZ3RrLWRvYyA+PSAxLjEyIGluc3RhbGxlZCB0byBidWlsZCAkUEFDS0FHRV9OQU1FIiAiJExJTkVOTyIgNQotZmkKLSAgICAgICAgaWYgdGVzdCAieCRQQUNLQUdFX05BTUUiICE9ICJ4Z2xpYiI7IHRoZW4KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR1RLRE9DX0RFUFMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdUS0RPQ19ERVBTLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHVEtET0NfREVQU19DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HVEtET0NfREVQU19DRkxBR1M9IiRHVEtET0NfREVQU19DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnbGliLTIuMCA+PSAyLjEwLjAgZ29iamVjdC0yLjAgID49IDIuMTAuMFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJnbGliLTIuMCA+PSAyLjEwLjAgZ29iamVjdC0yLjAgID49IDIuMTAuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HVEtET0NfREVQU19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJnbGliLTIuMCA+PSAyLjEwLjAgZ29iamVjdC0yLjAgID49IDIuMTAuMCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdUS0RPQ19ERVBTX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HVEtET0NfREVQU19MSUJTPSIkR1RLRE9DX0RFUFNfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdsaWItMi4wID49IDIuMTAuMCBnb2JqZWN0LTIuMCAgPj0gMi4xMC4wXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdsaWItMi4wID49IDIuMTAuMCBnb2JqZWN0LTIuMCAgPj0gMi4xMC4wIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dUS0RPQ19ERVBTX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiZ2xpYi0yLjAgPj0gMi4xMC4wIGdvYmplY3QtMi4wICA+PSAyLjEwLjAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgR1RLRE9DX0RFUFNfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJnbGliLTIuMCA+PSAyLjEwLjAgZ29iamVjdC0yLjAgID49IDIuMTAuMCJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEdUS0RPQ19ERVBTX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAgPj0gMi4xMC4wIGdvYmplY3QtMi4wICA+PSAyLjEwLjAiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRHVEtET0NfREVQU19QS0dfRVJST1JTIiA+JjUKLQotCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAoZ2xpYi0yLjAgPj0gMi4xMC4wIGdvYmplY3QtMi4wICA+PSAyLjEwLjApIHdlcmUgbm90IG1ldDoKLQotJEdUS0RPQ19ERVBTX1BLR19FUlJPUlMKLQotQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91Ci1pbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdUS0RPQ19ERVBTX0NGTEFHUwotYW5kIEdUS0RPQ19ERVBTX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgotU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCi0iICIkTElORU5PIiA1Ci1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0JeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0Ci1pcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCi1wYXRoIHRvIHBrZy1jb25maWcuCi0KLUFsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgR1RLRE9DX0RFUFNfQ0ZMQUdTCi1hbmQgR1RLRE9DX0RFUFNfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCi1TZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KLQotVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotZWxzZQotCUdUS0RPQ19ERVBTX0NGTEFHUz0kcGtnX2N2X0dUS0RPQ19ERVBTX0NGTEFHUwotCUdUS0RPQ19ERVBTX0xJQlM9JHBrZ19jdl9HVEtET0NfREVQU19MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JOgotZmkKLSAgICBmaQotICAgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KLSAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KLSAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgotICAgICBkb25lCi0gICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCi0gICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KLSAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KLSAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX1NFRCIgfHwgY29udGludWUKLSMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECi1jYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KLSpHTlUqKQotICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKLSopCi0gIGFjX2NvdW50PTAKLSAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCi0gIHdoaWxlIDoKLSAgZG8KLSAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgotICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKLSAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKLSAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCi0gICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKLSAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCi0gICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCi0gICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCi0gICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCi0gICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCi0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLSAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfU0VEPSRTRUQKLWZpCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQotIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgotICBybSAtZiBjb25mdGVzdC5zZWQKLQotICAgIGZpCi0gIGZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGd0ay1kb2MgZG9jdW1lbnRhdGlvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGd0ay1kb2MgZG9jdW1lbnRhdGlvbi4uLiAiID4mNjsgfQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9ndGtfZG9jIiA+JjUKLSRhc19lY2hvICIkZW5hYmxlX2d0a19kb2MiID4mNjsgfQotCi0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWd0ay1kb2MtaHRtbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ndGtfZG9jX2h0bWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9ndGtfZG9jX2h0bWw7Ci1lbHNlCi0gIGVuYWJsZV9ndGtfZG9jX2h0bWw9eWVzCi1maQotCi0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWd0ay1kb2MtcGRmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2d0a19kb2NfcGRmK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ3RrX2RvY19wZGY7Ci1lbHNlCi0gIGVuYWJsZV9ndGtfZG9jX3BkZj1ubwotZmkKLQotCi0gIGlmIHRlc3QgLXogIiRHVEtET0NfTUtQREYiOyB0aGVuCi0gICAgZW5hYmxlX2d0a19kb2NfcGRmPW5vCi0gIGZpCi0KLQotICAgaWYgdGVzdCB4JGVuYWJsZV9ndGtfZG9jID0geHllczsgdGhlbgotICBFTkFCTEVfR1RLX0RPQ19UUlVFPQotICBFTkFCTEVfR1RLX0RPQ19GQUxTRT0nIycKLWVsc2UKLSAgRU5BQkxFX0dUS19ET0NfVFJVRT0nIycKLSAgRU5BQkxFX0dUS19ET0NfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2NfaHRtbCA9IHh5ZXM7IHRoZW4KLSAgR1RLX0RPQ19CVUlMRF9IVE1MX1RSVUU9Ci0gIEdUS19ET0NfQlVJTERfSFRNTF9GQUxTRT0nIycKLWVsc2UKLSAgR1RLX0RPQ19CVUlMRF9IVE1MX1RSVUU9JyMnCi0gIEdUS19ET0NfQlVJTERfSFRNTF9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgeCRlbmFibGVfZ3RrX2RvY19wZGYgPSB4eWVzOyB0aGVuCi0gIEdUS19ET0NfQlVJTERfUERGX1RSVUU9Ci0gIEdUS19ET0NfQlVJTERfUERGX0ZBTFNFPScjJwotZWxzZQotICBHVEtfRE9DX0JVSUxEX1BERl9UUlVFPScjJwotICBHVEtfRE9DX0JVSUxEX1BERl9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgLW4gIiRMSUJUT09MIjsgdGhlbgotICBHVEtfRE9DX1VTRV9MSUJUT09MX1RSVUU9Ci0gIEdUS19ET0NfVVNFX0xJQlRPT0xfRkFMU0U9JyMnCi1lbHNlCi0gIEdUS19ET0NfVVNFX0xJQlRPT0xfVFJVRT0nIycKLSAgR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRT0KLWZpCi0KLQotCi0KLQotCi0KLQotICAgICAgICAjIEZpbmQgYW55IFB5dGhvbiBpbnRlcnByZXRlci4KLSAgICBpZiB0ZXN0IC16ICIkUFlUSE9OIjsgdGhlbgotICAgICAgZm9yIGFjX3Byb2cgaW4gcHl0aG9uIHB5dGhvbjIgcHl0aG9uMyBweXRob24zLjMgcHl0aG9uMy4yIHB5dGhvbjMuMSBweXRob24zLjAgcHl0aG9uMi43ICBweXRob24yLjYgcHl0aG9uMi41IHB5dGhvbjIuNCBweXRob24yLjMgcHl0aG9uMi4yIHB5dGhvbjIuMSBweXRob24yLjAKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9QWVRIT04rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRQWVRIT04gaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfUFlUSE9OPSIkUFlUSE9OIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QWVRIT049IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgOzsKLWVzYWMKLWZpCi1QWVRIT049JGFjX2N2X3BhdGhfUFlUSE9OCi1pZiB0ZXN0IC1uICIkUFlUSE9OIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBZVEhPTiIgPiY1Ci0kYXNfZWNobyAiJFBZVEhPTiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRQWVRIT04iICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkUFlUSE9OIiB8fCBQWVRIT049IjoiCi0KLSAgICBmaQotICAgIGFtX2Rpc3BsYXlfUFlUSE9OPXB5dGhvbgotCi0KLSAgaWYgdGVzdCAiJFBZVEhPTiIgPSA6OyB0aGVuCi0gICAgICBhc19mbl9lcnJvciAkPyAibm8gc3VpdGFibGUgUHl0aG9uIGludGVycHJldGVyIGZvdW5kIiAiJExJTkVOTyIgNQotICBlbHNlCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gdmVyc2lvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHZlcnNpb24uLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfcHl0aG9uX3ZlcnNpb24rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbls6M10pImAKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3B5dGhvbl92ZXJzaW9uIiA+JjUKLSRhc19lY2hvICIkYW1fY3ZfcHl0aG9uX3ZlcnNpb24iID4mNjsgfQotICBQWVRIT05fVkVSU0lPTj0kYW1fY3ZfcHl0aG9uX3ZlcnNpb24KLQotCi0KLSAgUFlUSE9OX1BSRUZJWD0nJHtwcmVmaXh9JwotCi0gIFBZVEhPTl9FWEVDX1BSRUZJWD0nJHtleGVjX3ByZWZpeH0nCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBwbGF0Zm9ybSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHBsYXRmb3JtLi4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X3B5dGhvbl9wbGF0Zm9ybSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFtX2N2X3B5dGhvbl9wbGF0Zm9ybT1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMucGxhdGZvcm0pImAKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3B5dGhvbl9wbGF0Zm9ybSIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3B5dGhvbl9wbGF0Zm9ybSIgPiY2OyB9Ci0gIFBZVEhPTl9QTEFURk9STT0kYW1fY3ZfcHl0aG9uX3BsYXRmb3JtCi0KLQotICAjIEp1c3QgZmFjdG9yIG91dCBzb21lIGNvZGUgZHVwbGljYXRpb24uCi0gIGFtX3B5dGhvbl9zZXR1cF9zeXNjb25maWc9IlwKLWltcG9ydCBzeXMKLSMgUHJlZmVyIHN5c2NvbmZpZyBvdmVyIGRpc3R1dGlscy5zeXNjb25maWcsIGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eQotIyB3aXRoIHB5dGhvbiAzLnguICBTZWUgYXV0b21ha2UgYnVnIzEwMjI3LgotdHJ5OgotICAgIGltcG9ydCBzeXNjb25maWcKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBjYW5fdXNlX3N5c2NvbmZpZyA9IDAKLWVsc2U6Ci0gICAgY2FuX3VzZV9zeXNjb25maWcgPSAxCi0jIENhbid0IHVzZSBzeXNjb25maWcgaW4gQ1B5dGhvbiAyLjcsIHNpbmNlIGl0J3MgYnJva2VuIGluIHZpcnR1YWxlbnZzOgotIyA8aHR0cHM6Ly9naXRodWIuY29tL3B5cGEvdmlydHVhbGVudi9pc3N1ZXMvMTE4PgotdHJ5OgotICAgIGZyb20gcGxhdGZvcm0gaW1wb3J0IHB5dGhvbl9pbXBsZW1lbnRhdGlvbgotICAgIGlmIHB5dGhvbl9pbXBsZW1lbnRhdGlvbigpID09ICdDUHl0aG9uJyBhbmQgc3lzLnZlcnNpb25bOjNdID09ICcyLjcnOgotICAgICAgICBjYW5fdXNlX3N5c2NvbmZpZyA9IDAKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzIgotCi0KLSAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBzY3JpcHQgZGlyZWN0b3J5IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gc2NyaXB0IGRpcmVjdG9yeS4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9weXRob25fcHl0aG9uZGlyKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAieCRwcmVmaXgiID0geE5PTkUKLSAgICAgdGhlbgotICAgICAgIGFtX3B5X3ByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKLSAgICAgZWxzZQotICAgICAgIGFtX3B5X3ByZWZpeD0kcHJlZml4Ci0gICAgIGZpCi0gICAgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9YCRQWVRIT04gLWMgIgotJGFtX3B5dGhvbl9zZXR1cF9zeXNjb25maWcKLWlmIGNhbl91c2Vfc3lzY29uZmlnOgotICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3BhdGgoJ3B1cmVsaWInLCB2YXJzPXsnYmFzZSc6JyRhbV9weV9wcmVmaXgnfSkKLWVsc2U6Ci0gICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwotICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMCwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAotICAgICBjYXNlICRhbV9jdl9weXRob25fcHl0aG9uZGlyIGluCi0gICAgICRhbV9weV9wcmVmaXgqKQotICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKLSAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWBlY2hvICIkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciIgfCBzZWQgInMsXiRhbV9fc3RyaXBfcHJlZml4LCRQWVRIT05fUFJFRklYLCJgCi0gICAgICAgOzsKLSAgICAgKikKLSAgICAgICBjYXNlICRhbV9weV9wcmVmaXggaW4KLSAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7Ci0gICAgICAgICAqKQotCSAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0kUFlUSE9OX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKLQkgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0gICAgIGVzYWMKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3B5dGhvbl9weXRob25kaXIiID4mNjsgfQotICBweXRob25kaXI9JGFtX2N2X3B5dGhvbl9weXRob25kaXIKLQotCi0KLSAgcGtncHl0aG9uZGlyPVwke3B5dGhvbmRpcn0vJFBBQ0tBR0UKLQotCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBleHRlbnNpb24gbW9kdWxlIGRpcmVjdG9yeSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIGV4dGVuc2lvbiBtb2R1bGUgZGlyZWN0b3J5Li4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X3B5dGhvbl9weWV4ZWNkaXIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FCi0gICAgIHRoZW4KLSAgICAgICBhbV9weV9leGVjX3ByZWZpeD0kYW1fcHlfcHJlZml4Ci0gICAgIGVsc2UKLSAgICAgICBhbV9weV9leGVjX3ByZWZpeD0kZXhlY19wcmVmaXgKLSAgICAgZmkKLSAgICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj1gJFBZVEhPTiAtYyAiCi0kYW1fcHl0aG9uX3NldHVwX3N5c2NvbmZpZwotaWYgY2FuX3VzZV9zeXNjb25maWc6Ci0gICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGxpYicsIHZhcnM9eydwbGF0YmFzZSc6JyRhbV9weV9wcmVmaXgnfSkKLWVsc2U6Ci0gICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwotICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMSwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAotICAgICBjYXNlICRhbV9jdl9weXRob25fcHlleGVjZGlyIGluCi0gICAgICRhbV9weV9leGVjX3ByZWZpeCopCi0gICAgICAgYW1fX3N0cmlwX3ByZWZpeD1gZWNobyAiJGFtX3B5X2V4ZWNfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCi0gICAgICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj1gZWNobyAiJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIiIHwgc2VkICJzLF4kYW1fX3N0cmlwX3ByZWZpeCwkUFlUSE9OX0VYRUNfUFJFRklYLCJgCi0gICAgICAgOzsKLSAgICAgKikKLSAgICAgICBjYXNlICRhbV9weV9leGVjX3ByZWZpeCBpbgotICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKLSAgICAgICAgICopCi0JICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0kUFlUSE9OX0VYRUNfUFJFRklYL2xpYi9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcwotCSAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0gICAgIGVzYWMKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIiID4mNjsgfQotICBweWV4ZWNkaXI9JGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIKLQotCi0KLSAgcGtncHlleGVjZGlyPVwke3B5ZXhlY2Rpcn0vJFBBQ0tBR0UKLQotCi0KLSAgZmkKLQotCi0KLQotICBidWlsZF9wbHVnaW5fZG9jcz1ubwotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgcGx1Z2luIGRvY3VtZW50YXRpb24iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBwbHVnaW4gZG9jdW1lbnRhdGlvbi4uLiAiID4mNjsgfQotICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzOyB0aGVuCi0gICAgaWYgdGVzdCB4JFBZVEhPTiAhPSB4OyB0aGVuCi0gICAgICBidWlsZF9wbHVnaW5fZG9jcz15ZXMKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0gICAgZWxzZQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIChweXRob24gbm90IGZvdW5kKSIgPiY1Ci0kYXNfZWNobyAibm8gKHB5dGhvbiBub3QgZm91bmQpIiA+JjY7IH0KLSAgICBmaQotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIChndGstZG9jIGRpc2FibGVkIG9yIG5vdCBhdmFpbGFibGUpIiA+JjUKLSRhc19lY2hvICJubyAoZ3RrLWRvYyBkaXNhYmxlZCBvciBub3QgYXZhaWxhYmxlKSIgPiY2OyB9Ci0gIGZpCi0KLSAgIGlmIHRlc3QgeCRidWlsZF9wbHVnaW5fZG9jcyA9IHh5ZXM7IHRoZW4KLSAgRU5BQkxFX1BMVUdJTl9ET0NTX1RSVUU9Ci0gIEVOQUJMRV9QTFVHSU5fRE9DU19GQUxTRT0nIycKLWVsc2UKLSAgRU5BQkxFX1BMVUdJTl9ET0NTX1RSVUU9JyMnCi0gIEVOQUJMRV9QTFVHSU5fRE9DU19GQUxTRT0KLWZpCi0KLQotCi0KLUxJQk09Ci1jYXNlICRob3N0IGluCi0qLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCi0gICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAotICA7OwotKi1uY3Itc3lzdjQuMyopCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9td3ZhbGlkY2hlY2tsIGluIC1sbXciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9td3ZhbGlkY2hlY2tsIGluIC1sbXcuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX213X19td3ZhbGlkY2hlY2tsKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxtdyAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgX213dmFsaWRjaGVja2wgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBfbXd2YWxpZGNoZWNrbCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2w9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9td19fbXd2YWxpZGNoZWNrbD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID0geHllczsgdGhlbiA6Ci0gIExJQk09LWxtdwotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjb3MgaW4gLWxtIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBjb3MgaW4gLWxtLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9tX2Nvcys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbSAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgY29zICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gY29zICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9tX2Nvcz15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX21fY29zPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9tX2NvcyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9tX2NvcyIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9tX2NvcyIgPSB4eWVzOyB0aGVuIDoKLSAgTElCTT0iJExJQk0gLWxtIgotZmkKLQotICA7OwotKikKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY29zIGluIC1sbSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgY29zIGluIC1sbS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfbV9jb3MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbG0gICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGNvcyAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGNvcyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfbV9jb3M9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9tX2Nvcz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbV9jb3MiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbV9jb3MiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbV9jb3MiID0geHllczsgdGhlbiA6Ci0gIExJQk09LWxtCi1maQotCi0gIDs7Ci1lc2FjCi0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQotaWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmbG9hdC5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2hlYWRlcl9zdGRjPXllcwotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICA6Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQotIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQotI2Vsc2UKLSMgZGVmaW5lIElTTE9XRVIoYykgXAotCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAotCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKLQkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKLSMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCi0jZW5kaWYKLQotI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKLWludAotbWFpbiAoKQotewotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKLQl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKLSAgICAgIHJldHVybiAyOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1maQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQotJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCi0KLWZpCi0KLQotZm9yIGFjX2hlYWRlciBpbiB1Y29udGV4dC5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJ1Y29udGV4dC5oIiAiYWNfY3ZfaGVhZGVyX3Vjb250ZXh0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdWNvbnRleHRfaCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VDT05URVhUX0ggMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9zb2NrZXQuaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lzL3NvY2tldC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ci0iCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2giID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggMQotX0FDRU9GCi0gSEFWRV9TWVNfU09DS0VUX0g9eWVzCi1lbHNlCi0gIEhBVkVfU1lTX1NPQ0tFVF9IPW5vCi1maQotCi1kb25lCi0KLSBpZiB0ZXN0ICJ4JEhBVkVfU1lTX1NPQ0tFVF9IIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX1NZU19TT0NLRVRfSF9UUlVFPQotICBIQVZFX1NZU19TT0NLRVRfSF9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9TWVNfU09DS0VUX0hfVFJVRT0nIycKLSAgSEFWRV9TWVNfU09DS0VUX0hfRkFMU0U9Ci1maQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3RpbWVzLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy90aW1lcy5oIiAiYWNfY3ZfaGVhZGVyX3N5c190aW1lc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c190aW1lc19oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQotX0FDRU9GCi0gSEFWRV9TWVNfVElNRVNfSD15ZXMKLWVsc2UKLSAgSEFWRV9TWVNfVElNRV9IPW5vCi1maQotCi1kb25lCi0KLWZvciBhY19oZWFkZXIgaW4gdW5pc3RkLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInVuaXN0ZC5oIiAiYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotX0FDRU9GCi0gSEFWRV9VTklTVERfSD15ZXMKLWVsc2UKLSAgSEFWRV9VTklTVERfSD1ubwotZmkKLQotZG9uZQotCi0gaWYgdGVzdCAieCRIQVZFX1NZU19USU1FU19IIiA9ICJ4eWVzIiAtYSAieCRIQVZFX1VOSVNURF9IIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX1NZU19USU1FU19IX0FORF9VTklTVERfSF9UUlVFPQotICBIQVZFX1NZU19USU1FU19IX0FORF9VTklTVERfSF9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9TWVNfVElNRVNfSF9BTkRfVU5JU1REX0hfVFJVRT0nIycKLSAgSEFWRV9TWVNfVElNRVNfSF9BTkRfVU5JU1REX0hfRkFMU0U9Ci1maQotCi0KLWZvciBhY19oZWFkZXIgaW4gcHJvY2Vzcy5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJwcm9jZXNzLmgiICJhY19jdl9oZWFkZXJfcHJvY2Vzc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3Byb2Nlc3NfaCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3V0c25hbWUuaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lzL3V0c25hbWUuaCIgImFjX2N2X2hlYWRlcl9zeXNfdXRzbmFtZV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c191dHNuYW1lX2giID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TWVNfVVRTTkFNRV9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzdGRpb19leHQuaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3RkaW9fZXh0LmgiICJhY19jdl9oZWFkZXJfc3RkaW9fZXh0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3RkaW9fZXh0X2giID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVERJT19FWFRfSCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLQotCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1heF9wdGhyZWFkX29rPW5vCi0KLSMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBmYWlscyBpZiBwdGhyZWFkLmgKLSMgcmVxdWlyZXMgc3BlY2lhbCBjb21waWxlciBmbGFncyAoZS5nLiBvbiBUcnU2NCBvciBTZXF1ZW50KS4KLSMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KLQotIyBGaXJzdCBvZiBhbGwsIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBzZXQgYW55IG9mIHRoZSBQVEhSRUFEX0xJQlMsCi0jIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZwotIyB0aGVtOgotaWYgdGVzdCAieCRQVEhSRUFEX0NGTEFHUyRQVEhSRUFEX0xJQlMiICE9ICJ4IjsgdGhlbgotICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0M9IiRDQyIKLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICBpZiB0ZXN0ICJ4JFBUSFJFQURfQ0MiICE9ICJ4IjsgdGhlbiA6Ci0gIENDPSIkUFRIUkVBRF9DQyIKLWZpCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfam9pbiB1c2luZyAkQ0MgJFBUSFJFQURfQ0ZMQUdTICRQVEhSRUFEX0xJQlMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfam9pbiB1c2luZyAkQ0MgJFBUSFJFQURfQ0ZMQUdTICRQVEhSRUFEX0xJQlMuLi4gIiA+JjY7IH0KLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIHB0aHJlYWRfam9pbiAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIHB0aHJlYWRfam9pbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBheF9wdGhyZWFkX29rPXllcwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfcHRocmVhZF9vayIgPiY1Ci0kYXNfZWNobyAiJGF4X3B0aHJlYWRfb2siID4mNjsgfQotICAgICAgICBpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInhubyI7IHRoZW4KLSAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9IiIKLSAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgotICAgICAgICBmaQotICAgICAgICBDQz0iJGF4X3B0aHJlYWRfc2F2ZV9DQyIKLSAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgTElCUz0iJGF4X3B0aHJlYWRfc2F2ZV9MSUJTIgotZmkKLQotIyBXZSBtdXN0IGNoZWNrIGZvciB0aGUgdGhyZWFkcyBsaWJyYXJ5IHVuZGVyIGEgbnVtYmVyIG9mIGRpZmZlcmVudAotIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugc29tZSBzeXN0ZW1zCi0jIChlLmcuIERFQykgaGF2ZSBib3RoIC1scHRocmVhZCBhbmQgLWxwdGhyZWFkcywgd2hlcmUgb25lIG9mIHRoZQotIyBsaWJyYXJpZXMgaXMgYnJva2VuIChub24tUE9TSVgpLgotCi0jIENyZWF0ZSBhIGxpc3Qgb2YgdGhyZWFkIGZsYWdzIHRvIHRyeS4gIEl0ZW1zIHN0YXJ0aW5nIHdpdGggYSAiLSIgYXJlCi0jIEMgY29tcGlsZXIgZmxhZ3MsIGFuZCBvdGhlciBpdGVtcyBhcmUgbGlicmFyeSBuYW1lcywgZXhjZXB0IGZvciAibm9uZSIKLSMgd2hpY2ggaW5kaWNhdGVzIHRoYXQgd2UgdHJ5IHdpdGhvdXQgYW55IGZsYWdzIGF0IGFsbCwgYW5kICJwdGhyZWFkLWNvbmZpZyIKLSMgd2hpY2ggaXMgYSBwcm9ncmFtIHJldHVybmluZyB0aGUgZmxhZ3MgZm9yIHRoZSBQdGggZW11bGF0aW9uIGxpYnJhcnkuCi0KLWF4X3B0aHJlYWRfZmxhZ3M9InB0aHJlYWRzIG5vbmUgLUt0aHJlYWQgLXB0aHJlYWQgLXB0aHJlYWRzIC1tdGhyZWFkcyBwdGhyZWFkIC0tdGhyZWFkLXNhZmUgLW10IHB0aHJlYWQtY29uZmlnIgotCi0jIFRoZSBvcmRlcmluZyAqaXMqIChzb21ldGltZXMpIGltcG9ydGFudC4gIFNvbWUgbm90ZXMgb24gdGhlCi0jIGluZGl2aWR1YWwgaXRlbXMgZm9sbG93OgotCi0jIHB0aHJlYWRzOiBBSVggKG11c3QgY2hlY2sgdGhpcyBiZWZvcmUgLWxwdGhyZWFkKQotIyBub25lOiBpbiBjYXNlIHRocmVhZHMgYXJlIGluIGxpYmM7IHNob3VsZCBiZSB0cmllZCBiZWZvcmUgLUt0aHJlYWQgYW5kCi0jICAgICAgIG90aGVyIGNvbXBpbGVyIGZsYWdzIHRvIHByZXZlbnQgY29udGludWFsIGNvbXBpbGVyIHdhcm5pbmdzCi0jIC1LdGhyZWFkOiBTZXF1ZW50ICh0aHJlYWRzIGluIGxpYmMsIGJ1dCAtS3RocmVhZCBuZWVkZWQgZm9yIHB0aHJlYWQuaCkKLSMgLXB0aHJlYWQ6IExpbnV4L2djYyAoa2VybmVsIHRocmVhZHMpLCBCU0QvZ2NjICh1c2VybGFuZCB0aHJlYWRzKSwgVHJ1NjQKLSMgICAgICAgICAgIChOb3RlOiBIUCBDIHJlamVjdHMgdGhpcyB3aXRoICJiYWQgZm9ybSBmb3IgYC10JyBvcHRpb24iKQotIyAtcHRocmVhZHM6IFNvbGFyaXMvZ2NjIChOb3RlOiBIUCBDIGFsc28gcmVqZWN0cykKLSMgLW10OiBTdW4gV29ya3Nob3AgQyAobWF5IG9ubHkgbGluayBTdW5PUyB0aHJlYWRzIFstbHRocmVhZF0sIGJ1dCBpdAotIyAgICAgIGRvZXNuJ3QgaHVydCB0byBjaGVjayBzaW5jZSB0aGlzIHNvbWV0aW1lcyBkZWZpbmVzIHB0aHJlYWRzIGFuZAotIyAgICAgIC1EX1JFRU5UUkFOVCB0b28pLCBIUCBDIChtdXN0IGJlIGNoZWNrZWQgYmVmb3JlIC1scHRocmVhZCwgd2hpY2gKLSMgICAgICBpcyBwcmVzZW50IGJ1dCBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHk7IGFuZCBiZWZvcmUgLW10aHJlYWRzLAotIyAgICAgIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGludGVycHJldHMgdGhpcyBhcyAiLW10IiArICItaHJlYWRzIikKLSMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKLSMgcHRocmVhZDogTGludXgsIGV0Y2V0ZXJhCi0jIC0tdGhyZWFkLXNhZmU6IEtBSSBDKysKLSMgcHRocmVhZC1jb25maWc6IHVzZSBwdGhyZWFkLWNvbmZpZyBwcm9ncmFtIChmb3IgR05VIFB0aCBsaWJyYXJ5KQotCi1jYXNlICRob3N0X29zIGluCi0KLSAgICAgICAgZnJlZWJzZCopCi0KLSAgICAgICAgIyAta3RocmVhZDogRnJlZUJTRCBrZXJuZWwgdGhyZWFkcyAocHJlZmVycmVkIHRvIC1wdGhyZWFkIHNpbmNlIFNNUC1hYmxlKQotICAgICAgICAjIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQotCi0gICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1rdGhyZWFkIGx0aHJlYWQgJGF4X3B0aHJlYWRfZmxhZ3MiCi0gICAgICAgIDs7Ci0KLSAgICAgICAgaHB1eCopCi0KLSAgICAgICAgIyBGcm9tIHRoZSBjYygxKSBtYW4gcGFnZTogIlstbXRdIFNldHMgdmFyaW91cyAtRCBmbGFncyB0byBlbmFibGUKLSAgICAgICAgIyBtdWx0aS10aHJlYWRpbmcgYW5kIGFsc28gc2V0cyAtbHB0aHJlYWQuIgotCi0gICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1tdCAtcHRocmVhZCBwdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgotICAgICAgICA7OwotCi0gICAgICAgIG9wZW5lZGl0aW9uKikKLQotICAgICAgICAjIElCTSB6L09TIHJlcXVpcmVzIGEgZmVhdHVyZS10ZXN0IG1hY3JvIHRvIGJlIGRlZmluZWQgaW4gb3JkZXIgdG8KLSAgICAgICAgIyBlbmFibGUgUE9TSVggdGhyZWFkcyBhdCBhbGwsIHNvIGdpdmUgdGhlIHVzZXIgYSBoaW50IGlmIHRoaXMgaXMKLSAgICAgICAgIyBub3Qgc2V0LiAoV2UgZG9uJ3QgZGVmaW5lIHRoZXNlIG91cnNlbHZlcywgYXMgdGhleSBjYW4gYWZmZWN0Ci0gICAgICAgICMgb3RoZXIgcG9ydGlvbnMgb2YgdGhlIHN5c3RlbSBBUEkgaW4gdW5wcmVkaWN0YWJsZSB3YXlzLikKLQotICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSMgICAgICAgICAgICBpZiAhZGVmaW5lZChfT1BFTl9USFJFQURTKSAmJiAhZGVmaW5lZChfVU5JWDAzX1RIUkVBRFMpCi0gICAgICAgICAgICAgQVhfUFRIUkVBRF9aT1NfTUlTU0lORwotIyAgICAgICAgICAgIGVuZGlmCi0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIkFYX1BUSFJFQURfWk9TX01JU1NJTkciID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogSUJNIHovT1MgcmVxdWlyZXMgLURfT1BFTl9USFJFQURTIG9yIC1EX1VOSVgwM19USFJFQURTIHRvIGVuYWJsZSBwdGhyZWFkcyBzdXBwb3J0LiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJQk0gei9PUyByZXF1aXJlcyAtRF9PUEVOX1RIUkVBRFMgb3IgLURfVU5JWDAzX1RIUkVBRFMgdG8gZW5hYmxlIHB0aHJlYWRzIHN1cHBvcnQuIiA+JjI7fQotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi0gICAgICAgIDs7Ci0KLSAgICAgICAgc29sYXJpcyopCi0KLSAgICAgICAgIyBPbiBTb2xhcmlzIChhdCBsZWFzdCwgZm9yIHNvbWUgdmVyc2lvbnMpLCBsaWJjIGNvbnRhaW5zIHN0dWJiZWQKLSAgICAgICAgIyAobm9uLWZ1bmN0aW9uYWwpIHZlcnNpb25zIG9mIHRoZSBwdGhyZWFkcyByb3V0aW5lcywgc28gbGluay1iYXNlZAotICAgICAgICAjIHRlc3RzIHdpbGwgZXJyb25lb3VzbHkgc3VjY2VlZC4gKE4uQi46IFRoZSBzdHVicyBhcmUgbWlzc2luZwotICAgICAgICAjIHB0aHJlYWRfY2xlYW51cF9wdXNoLCBvciByYXRoZXIgYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhpcyBtYWNybywKLSAgICAgICAgIyBzbyB3ZSBjb3VsZCBjaGVjayBmb3IgdGhhdCwgYnV0IHdobyBrbm93cyB3aGV0aGVyIHRoZXknbGwgc3R1YgotICAgICAgICAjIHRoYXQgdG9vIGluIGEgZnV0dXJlIGxpYmMuKSAgU28gd2UnbGwgY2hlY2sgZmlyc3QgZm9yIHRoZQotICAgICAgICAjIHN0YW5kYXJkIFNvbGFyaXMgd2F5IG9mIGxpbmtpbmcgcHRocmVhZHMgKC1tdCAtbHB0aHJlYWQpLgotCi0gICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1tdCxwdGhyZWFkIHB0aHJlYWQgJGF4X3B0aHJlYWRfZmxhZ3MiCi0gICAgICAgIDs7Ci1lc2FjCi0KLSMgR0NDIGdlbmVyYWxseSB1c2VzIC1wdGhyZWFkLCBvciAtcHRocmVhZHMgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4gU1BBUkMpCi0KLWlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbiA6Ci0gIGF4X3B0aHJlYWRfZmxhZ3M9Ii1wdGhyZWFkIC1wdGhyZWFkcyAkYXhfcHRocmVhZF9mbGFncyIKLWZpCi0KLSMgVGhlIHByZXNlbmNlIG9mIGEgZmVhdHVyZSB0ZXN0IG1hY3JvIHJlcXVlc3RpbmcgcmUtZW50cmFudCBmdW5jdGlvbgotIyBkZWZpbml0aW9ucyBpcywgb24gc29tZSBzeXN0ZW1zLCBhIHN0cm9uZyBoaW50IHRoYXQgcHRocmVhZHMgc3VwcG9ydCBpcwotIyBjb3JyZWN0bHkgZW5hYmxlZAotCi1jYXNlICRob3N0X29zIGluCi0gICAgICAgIGRhcndpbiogfCBocHV4KiB8IGxpbnV4KiB8IG9zZiogfCBzb2xhcmlzKikKLSAgICAgICAgYXhfcHRocmVhZF9jaGVja19tYWNybz0iX1JFRU5UUkFOVCIKLSAgICAgICAgOzsKLQotICAgICAgICBhaXgqKQotICAgICAgICBheF9wdGhyZWFkX2NoZWNrX21hY3JvPSJfVEhSRUFEX1NBRkUiCi0gICAgICAgIDs7Ci0KLSAgICAgICAgKikKLSAgICAgICAgYXhfcHRocmVhZF9jaGVja19tYWNybz0iLS0iCi0gICAgICAgIDs7Ci1lc2FjCi1pZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfY2hlY2tfbWFjcm8iID0gIngtLSI7IHRoZW4gOgotICBheF9wdGhyZWFkX2NoZWNrX2NvbmQ9MAotZWxzZQotICBheF9wdGhyZWFkX2NoZWNrX2NvbmQ9IiFkZWZpbmVkKCRheF9wdGhyZWFkX2NoZWNrX21hY3JvKSIKLWZpCi0KLSMgQXJlIHdlIGNvbXBpbGluZyB3aXRoIENsYW5nPwotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGlzIENsYW5nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGlzIENsYW5nLi4uICIgPiY2OyB9Ci1pZiAke2F4X2N2X1BUSFJFQURfQ0xBTkcrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBheF9jdl9QVEhSRUFEX0NMQU5HPW5vCi0gICAgICMgTm90ZSB0aGF0IEF1dG9jb25mIHNldHMgR0NDPXllcyBmb3IgQ2xhbmcgYXMgd2VsbCBhcyBHQ0MKLSAgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIE5vdGU6IENsYW5nIDIuNyBsYWNrcyBfX2NsYW5nX1thLXpdK19fICovCi0jICAgICAgICAgICAgaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIGRlZmluZWQoX19sbHZtX18pCi0gICAgICAgICAgICAgQVhfUFRIUkVBRF9DQ19JU19DTEFORwotIyAgICAgICAgICAgIGVuZGlmCi0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIkFYX1BUSFJFQURfQ0NfSVNfQ0xBTkciID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gIGF4X2N2X1BUSFJFQURfQ0xBTkc9eWVzCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLSAgICAgZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfY3ZfUFRIUkVBRF9DTEFORyIgPiY1Ci0kYXNfZWNobyAiJGF4X2N2X1BUSFJFQURfQ0xBTkciID4mNjsgfQotYXhfcHRocmVhZF9jbGFuZz0iJGF4X2N2X1BUSFJFQURfQ0xBTkciCi0KLWF4X3B0aHJlYWRfY2xhbmdfd2FybmluZz1ubwotCi0jIENsYW5nIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcsIGJlY2F1c2Ugb2xkZXIgdmVyc2lvbnMgaGFuZGxlIHRoZSAtcHRocmVhZAotIyBvcHRpb24gaW4gYSByYXRoZXIuLi4gaWRpb3N5bmNyYXRpYyB3YXkKLQotaWYgdGVzdCAieCRheF9wdGhyZWFkX2NsYW5nIiA9ICJ4eWVzIjsgdGhlbgotCi0gICAgICAgICMgQ2xhbmcgdGFrZXMgLXB0aHJlYWQ7IGl0IGhhcyBuZXZlciBzdXBwb3J0ZWQgYW55IG90aGVyIGZsYWcKLQotICAgICAgICAjIChOb3RlIDE6IFRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZCBpZiBhIHN5c3RlbSB0aGF0IENsYW5nCi0gICAgICAgICMgc3VwcG9ydHMgaGFzIFBPU0lYIHRocmVhZHMgaW4gYSBzZXBhcmF0ZSBsaWJyYXJ5LiAgVGhpcyB0ZW5kcyBub3QKLSAgICAgICAgIyB0byBiZSB0aGUgd2F5IG9mIG1vZGVybiBzeXN0ZW1zLCBidXQgaXQncyBjb25jZWl2YWJsZS4pCi0KLSAgICAgICAgIyAoTm90ZSAyOiBPbiBzb21lIHN5c3RlbXMsIG5vdGFibHkgRGFyd2luLCAtcHRocmVhZCBpcyBub3QgbmVlZGVkCi0gICAgICAgICMgdG8gZ2V0IFBPU0lYIHRocmVhZHMgc3VwcG9ydDsgdGhlIEFQSSBpcyBhbHdheXMgcHJlc2VudCBhbmQKLSAgICAgICAgIyBhY3RpdmUuICBXZSBjb3VsZCByZWFzb25hYmx5IGxlYXZlIFBUSFJFQURfQ0ZMQUdTIGVtcHR5LiAgQnV0Ci0gICAgICAgICMgLXB0aHJlYWQgZG9lcyBkZWZpbmUgX1JFRU5UUkFOVCwgYW5kIHdoaWxlIHRoZSBEYXJ3aW4gaGVhZGVycwotICAgICAgICAjIGlnbm9yZSB0aGlzIG1hY3JvLCB0aGlyZC1wYXJ0eSBoZWFkZXJzIG1pZ2h0IG5vdC4pCi0KLSAgICAgICAgUFRIUkVBRF9DRkxBR1M9Ii1wdGhyZWFkIgotICAgICAgICBQVEhSRUFEX0xJQlM9Ci0KLSAgICAgICAgYXhfcHRocmVhZF9vaz15ZXMKLQotICAgICAgICAjIEhvd2V2ZXIsIG9sZGVyIHZlcnNpb25zIG9mIENsYW5nIG1ha2UgYSBwb2ludCBvZiB3YXJuaW5nIHRoZSB1c2VyCi0gICAgICAgICMgdGhhdCwgaW4gYW4gaW52b2NhdGlvbiB3aGVyZSBvbmx5IGxpbmtpbmcgYW5kIG5vIGNvbXBpbGF0aW9uIGlzCi0gICAgICAgICMgdGFraW5nIHBsYWNlLCB0aGUgLXB0aHJlYWQgb3B0aW9uIGhhcyBubyBlZmZlY3QgKCJhcmd1bWVudCB1bnVzZWQKLSAgICAgICAgIyBkdXJpbmcgY29tcGlsYXRpb24iKS4gIFRoZXkgZXhwZWN0IC1wdGhyZWFkIHRvIGJlIHBhc3NlZCBpbiBvbmx5Ci0gICAgICAgICMgd2hlbiBzb3VyY2UgY29kZSBpcyBiZWluZyBjb21waWxlZC4KLSAgICAgICAgIwotICAgICAgICAjIFByb2JsZW0gaXMsIHRoaXMgaXMgYXQgb2RkcyB3aXRoIHRoZSB3YXkgQXV0b21ha2UgYW5kIG1vc3Qgb3RoZXIKLSAgICAgICAgIyBDIGJ1aWxkIGZyYW1ld29ya3MgZnVuY3Rpb24sIHdoaWNoIGlzIHRoYXQgdGhlIHNhbWUgZmxhZ3MgdXNlZCBpbgotICAgICAgICAjIGNvbXBpbGF0aW9uIChDRkxBR1MpIGFyZSBhbHNvIHVzZWQgaW4gbGlua2luZy4gIE1hbnkgc3lzdGVtcwotICAgICAgICAjIHN1cHBvcnRlZCBieSBBWF9QVEhSRUFEIHJlcXVpcmUgZXhhY3RseSB0aGlzIGZvciBQT1NJWCB0aHJlYWRzCi0gICAgICAgICMgc3VwcG9ydCwgYW5kIGluIGZhY3QgaXQgaXMgb2Z0ZW4gbm90IHN0cmFpZ2h0Zm9yd2FyZCB0byBzcGVjaWZ5IGEKLSAgICAgICAgIyBmbGFnIHRoYXQgaXMgdXNlZCBvbmx5IGluIHRoZSBjb21waWxhdGlvbiBwaGFzZSBhbmQgbm90IGluCi0gICAgICAgICMgbGlua2luZy4gIFN1Y2ggYSBzY2VuYXJpbyBpcyBleHRyZW1lbHkgcmFyZSBpbiBwcmFjdGljZS4KLSAgICAgICAgIwotICAgICAgICAjIEV2ZW4gdGhvdWdoIHVzZSBvZiB0aGUgLXB0aHJlYWQgZmxhZyBpbiBsaW5raW5nIHdvdWxkIG9ubHkgcHJpbnQKLSAgICAgICAgIyBhIHdhcm5pbmcsIHRoaXMgY2FuIGJlIGEgbnVpc2FuY2UgZm9yIHdlbGwtcnVuIHNvZnR3YXJlIHByb2plY3RzCi0gICAgICAgICMgdGhhdCBidWlsZCB3aXRoIC1XZXJyb3IuICBTbyBpZiB0aGUgYWN0aXZlIHZlcnNpb24gb2YgQ2xhbmcgaGFzCi0gICAgICAgICMgdGhpcyBtaXNmZWF0dXJlLCB3ZSBzZWFyY2ggZm9yIGFuIG9wdGlvbiB0byBzcXVhc2ggaXQuCi0KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIENsYW5nIG5lZWRzIGZsYWcgdG8gcHJldmVudCBcImFyZ3VtZW50IHVudXNlZFwiIHdhcm5pbmcgd2hlbiBsaW5raW5nIHdpdGggLXB0aHJlYWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBDbGFuZyBuZWVkcyBmbGFnIHRvIHByZXZlbnQgXCJhcmd1bWVudCB1bnVzZWRcIiB3YXJuaW5nIHdoZW4gbGlua2luZyB3aXRoIC1wdGhyZWFkLi4uICIgPiY2OyB9Ci1pZiAke2F4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUc9dW5rbm93bgotICAgICAgICAgICAgICMgQ3JlYXRlIGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mICRhY19saW5rIHRoYXQgY29tcGlsZXMgYW5kCi0gICAgICAgICAgICAgIyBsaW5rcyBpbiB0d28gc3RlcHMgKC5jIC0+IC5vLCAubyAtPiBleGUpIGluc3RlYWQgb2Ygb25lCi0gICAgICAgICAgICAgIyAoLmMgLT4gZXhlKSwgYmVjYXVzZSB0aGUgd2FybmluZyBvY2N1cnMgb25seSBpbiB0aGUgc2Vjb25kCi0gICAgICAgICAgICAgIyBzdGVwCi0gICAgICAgICAgICAgYXhfcHRocmVhZF9zYXZlX2FjX2xpbms9IiRhY19saW5rIgotICAgICAgICAgICAgIGF4X3B0aHJlYWRfc2VkPSdzL2NvbmZ0ZXN0XC5cJGFjX2V4dC9jb25mdGVzdC4kYWNfb2JqZXh0L2cnCi0gICAgICAgICAgICAgYXhfcHRocmVhZF9saW5rX3N0ZXA9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgIiRheF9wdGhyZWFkX3NlZCJgCi0gICAgICAgICAgICAgYXhfcHRocmVhZF8yc3RlcF9hY19saW5rPSIoJGFjX2NvbXBpbGUpICYmIChlY2hvID09PT0gPiY1KSAmJiAoJGF4X3B0aHJlYWRfbGlua19zdGVwKSIKLSAgICAgICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgICAgICAgICAgIGZvciBheF9wdGhyZWFkX3RyeSBpbiAnJyAtUXVudXNlZC1hcmd1bWVudHMgLVduby11bnVzZWQtY29tbWFuZC1saW5lLWFyZ3VtZW50IHVua25vd247IGRvCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAieCRheF9wdGhyZWFkX3RyeSIgPSAieHVua25vd24iOyB0aGVuIDoKLSAgYnJlYWsKLWZpCi0gICAgICAgICAgICAgICAgQ0ZMQUdTPSItV2Vycm9yIC1XdW5rbm93bi13YXJuaW5nLW9wdGlvbiAkYXhfcHRocmVhZF90cnkgLXB0aHJlYWQgJGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1MiCi0gICAgICAgICAgICAgICAgYWNfbGluaz0iJGF4X3B0aHJlYWRfc2F2ZV9hY19saW5rIgotICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLWludCBtYWluKHZvaWQpe3JldHVybiAwO30KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19saW5rPSIkYXhfcHRocmVhZF8yc3RlcF9hY19saW5rIgotICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotaW50IG1haW4odm9pZCl7cmV0dXJuIDA7fQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGJyZWFrCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgIGFjX2xpbms9IiRheF9wdGhyZWFkX3NhdmVfYWNfbGluayIKLSAgICAgICAgICAgICBDRkxBR1M9IiRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgotICAgICAgICAgICAgIGlmIHRlc3QgIngkYXhfcHRocmVhZF90cnkiID0gIngiOyB0aGVuIDoKLSAgYXhfcHRocmVhZF90cnk9bm8KLWZpCi0gICAgICAgICAgICAgYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUc9IiRheF9wdGhyZWFkX3RyeSIKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUciID4mNQotJGFzX2VjaG8gIiRheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRyIgPiY2OyB9Ci0KLSAgICAgICAgY2FzZSAiJGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHIiBpbgotICAgICAgICAgICAgICAgIG5vIHwgdW5rbm93bikgOzsKLSAgICAgICAgICAgICAgICAqKSBQVEhSRUFEX0NGTEFHUz0iJGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHICRQVEhSRUFEX0NGTEFHUyIgOzsKLSAgICAgICAgZXNhYwotCi1maSAjICRheF9wdGhyZWFkX2NsYW5nID0geWVzCi0KLWlmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieG5vIjsgdGhlbgotZm9yIGF4X3B0aHJlYWRfdHJ5X2ZsYWcgaW4gJGF4X3B0aHJlYWRfZmxhZ3M7IGRvCi0KLSAgICAgICAgY2FzZSAkYXhfcHRocmVhZF90cnlfZmxhZyBpbgotICAgICAgICAgICAgICAgIG5vbmUpCi0gICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aG91dCBhbnkgZmxhZ3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGhvdXQgYW55IGZsYWdzLi4uICIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAgICAgICAgIC1tdCxwdGhyZWFkKQotICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggLW10IC1scHRocmVhZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAtbXQgLWxwdGhyZWFkLi4uICIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9Ii1tdCIKLSAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1scHRocmVhZCIKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAgICAgLSopCi0gICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkYXhfcHRocmVhZF90cnlfZmxhZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkYXhfcHRocmVhZF90cnlfZmxhZy4uLiAiID4mNjsgfQotICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkYXhfcHRocmVhZF90cnlfZmxhZyIKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAgICAgcHRocmVhZC1jb25maWcpCi0gICAgICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwdGhyZWFkLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcHRocmVhZC1jb25maWc7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGF4X3B0aHJlYWRfY29uZmlnIjsgdGhlbgotICBhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnPSIkYXhfcHRocmVhZF9jb25maWciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19heF9wdGhyZWFkX2NvbmZpZz0ieWVzIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnIiAmJiBhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnPSJubyIKLWZpCi1maQotYXhfcHRocmVhZF9jb25maWc9JGFjX2N2X3Byb2dfYXhfcHRocmVhZF9jb25maWcKLWlmIHRlc3QgLW4gIiRheF9wdGhyZWFkX2NvbmZpZyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9wdGhyZWFkX2NvbmZpZyIgPiY1Ci0kYXNfZWNobyAiJGF4X3B0aHJlYWRfY29uZmlnIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfY29uZmlnIiA9ICJ4bm8iOyB0aGVuIDoKLSAgY29udGludWUKLWZpCi0gICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9ImBwdGhyZWFkLWNvbmZpZyAtLWNmbGFnc2AiCi0gICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSJgcHRocmVhZC1jb25maWcgLS1sZGZsYWdzYCBgcHRocmVhZC1jb25maWcgLS1saWJzYCIKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRheF9wdGhyZWFkX3RyeV9mbGFnIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRheF9wdGhyZWFkX3RyeV9mbGFnLi4uICIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbCRheF9wdGhyZWFkX3RyeV9mbGFnIgotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLQotICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgICAgICBheF9wdGhyZWFkX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0KLSAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBmdW5jdGlvbnMuICBXZSBtdXN0IGluY2x1ZGUgcHRocmVhZC5oLAotICAgICAgICAjIHNpbmNlIHNvbWUgZnVuY3Rpb25zIG1heSBiZSBtYWNyb3MuICAoT24gdGhlIFNlcXVlbnQsIHdlCi0gICAgICAgICMgbmVlZCBhIHNwZWNpYWwgZmxhZyAtS3RocmVhZCB0byBtYWtlIHRoaXMgaGVhZGVyIGNvbXBpbGUuKQotICAgICAgICAjIFdlIGNoZWNrIGZvciBwdGhyZWFkX2pvaW4gYmVjYXVzZSBpdCBpcyBpbiAtbHB0aHJlYWQgb24gSVJJWAotICAgICAgICAjIHdoaWxlIHB0aHJlYWRfY3JlYXRlIGlzIGluIGxpYmMuICBXZSBjaGVjayBmb3IgcHRocmVhZF9hdHRyX2luaXQKLSAgICAgICAgIyBkdWUgdG8gREVDIGNyYXppbmVzcyB3aXRoIC1scHRocmVhZHMuICBXZSBjaGVjayBmb3IKLSAgICAgICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCBiZWNhdXNlIGl0IGlzIG9uZSBvZiB0aGUgZmV3IHB0aHJlYWQKLSAgICAgICAgIyBmdW5jdGlvbnMgb24gU29sYXJpcyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG5vbi1mdW5jdGlvbmFsIGxpYmMgc3R1Yi4KLSAgICAgICAgIyBXZSB0cnkgcHRocmVhZF9jcmVhdGUgb24gZ2VuZXJhbCBwcmluY2lwbGVzLgotCi0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jICAgICAgICAgICAgICAgICAgICAgICBpZiAkYXhfcHRocmVhZF9jaGVja19jb25kCi0jICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgIiRheF9wdGhyZWFkX2NoZWNrX21hY3JvIG11c3QgYmUgZGVmaW5lZCIKLSMgICAgICAgICAgICAgICAgICAgICAgIGVuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCByb3V0aW5lKHZvaWQgKmEpIHsgYSA9IDA7IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkICpzdGFydF9yb3V0aW5lKHZvaWQgKmEpIHsgcmV0dXJuIGE7IH0KLWludAotbWFpbiAoKQotewotcHRocmVhZF90IHRoOyBwdGhyZWFkX2F0dHJfdCBhdHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUoJnRoLCAwLCBzdGFydF9yb3V0aW5lLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfam9pbih0aCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NsZWFudXBfcHVzaChyb3V0aW5lLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY2xlYW51cF9wb3AoMCkgLyogOyAqLwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGF4X3B0aHJlYWRfb2s9eWVzCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgICBDRkxBR1M9IiRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgotICAgICAgICBMSUJTPSIkYXhfcHRocmVhZF9zYXZlX0xJQlMiCi0KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9wdGhyZWFkX29rIiA+JjUKLSRhc19lY2hvICIkYXhfcHRocmVhZF9vayIgPiY2OyB9Ci0gICAgICAgIGlmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieHllcyI7IHRoZW4gOgotICBicmVhawotZmkKLQotICAgICAgICBQVEhSRUFEX0xJQlM9IiIKLSAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKLWRvbmUKLWZpCi0KLSMgVmFyaW91cyBvdGhlciBjaGVja3M6Ci1pZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKLSAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKLQotICAgICAgICAjIERldGVjdCBBSVggbG9zc2FnZTogSk9JTkFCTEUgYXR0cmlidXRlIGlzIGNhbGxlZCBVTkRFVEFDSEVELgotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igam9pbmFibGUgcHRocmVhZCBhdHRyaWJ1dGUuLi4gIiA+JjY7IH0KLWlmICR7YXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSPXVua25vd24KLSAgICAgICAgICAgICBmb3IgYXhfcHRocmVhZF9hdHRyIGluIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIFBUSFJFQURfQ1JFQVRFX1VOREVUQUNIRUQ7IGRvCi0gICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci1pbnQKLW1haW4gKCkKLXsKLWludCBhdHRyID0gJGF4X3B0aHJlYWRfYXR0cjsgcmV0dXJuIGF0dHIgLyogOyAqLwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUj0kYXhfcHRocmVhZF9hdHRyOyBicmVhawotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgICAgZG9uZQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFIiID4mNQotJGFzX2VjaG8gIiRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFIiID4mNjsgfQotICAgICAgICBpZiB0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUiIgIT0gInh1bmtub3duIiAmJiBcCi0gICAgICAgICAgICAgICB0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUiIgIT0gInhQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSIgJiYgXAotICAgICAgICAgICAgICAgdGVzdCAieCRheF9wdGhyZWFkX2pvaW5hYmxlX2F0dHJfZGVmaW5lZCIgIT0gInh5ZXMiOyB0aGVuIDoKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSAkYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSCi1fQUNFT0YKLQotICAgICAgICAgICAgICAgYXhfcHRocmVhZF9qb2luYWJsZV9hdHRyX2RlZmluZWQ9eWVzCi0KLWZpCi0KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIG1vcmUgc3BlY2lhbCBmbGFncyBhcmUgcmVxdWlyZWQgZm9yIHB0aHJlYWRzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHMuLi4gIiA+JjY7IH0KLWlmICR7YXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTPW5vCi0gICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgICAgIGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUz0iLURfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MiCi0gICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICBlc2FjCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUyIgPiY1Ci0kYXNfZWNobyAiJGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUyIgPiY2OyB9Ci0gICAgICAgIGlmIHRlc3QgIngkYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTIiAhPSAieG5vIiAmJiBcCi0gICAgICAgICAgICAgICB0ZXN0ICJ4JGF4X3B0aHJlYWRfc3BlY2lhbF9mbGFnc19hZGRlZCIgIT0gInh5ZXMiOyB0aGVuIDoKLSAgUFRIUkVBRF9DRkxBR1M9IiRheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgotICAgICAgICAgICAgICAgYXhfcHRocmVhZF9zcGVjaWFsX2ZsYWdzX2FkZGVkPXllcwotZmkKLQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBQVEhSRUFEX1BSSU9fSU5IRVJJVCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgUFRIUkVBRF9QUklPX0lOSEVSSVQuLi4gIiA+JjY7IH0KLWlmICR7YXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotaW50Ci1tYWluICgpCi17Ci1pbnQgaSA9IFBUSFJFQURfUFJJT19JTkhFUklUOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGF4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUPXllcwotZWxzZQotICBheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUIiA+JjUKLSRhc19lY2hvICIkYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQiID4mNjsgfQotICAgICAgICBpZiB0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgICAgICAgICB0ZXN0ICJ4JGF4X3B0aHJlYWRfcHJpb19pbmhlcml0X2RlZmluZWQiICE9ICJ4eWVzIjsgdGhlbiA6Ci0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRIUkVBRF9QUklPX0lOSEVSSVQgMSIgPj5jb25mZGVmcy5oCi0KLSAgICAgICAgICAgICAgIGF4X3B0aHJlYWRfcHJpb19pbmhlcml0X2RlZmluZWQ9eWVzCi0KLWZpCi0KLSAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgTElCUz0iJGF4X3B0aHJlYWRfc2F2ZV9MSUJTIgotCi0gICAgICAgICMgTW9yZSBBSVggbG9zc2FnZTogY29tcGlsZSB3aXRoICpfciB2YXJpYW50Ci0gICAgICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgICBhaXgqKQotICAgICAgICAgICAgICAgIGNhc2UgIngvJENDIiBpbiAjKAotICB4Ki9jODl8eCovYzg5XzEyOHx4Ki9jOTl8eCovYzk5XzEyOHx4Ki9jY3x4Ki9jYzEyOHx4Ki94bGN8eCoveGxjX3Y2fHgqL3hsYzEyOHx4Ki94bGMxMjhfdjYpIDoKLSAgICAjaGFuZGxlIGFic29sdXRlIHBhdGggZGlmZmVyZW50bHkgZnJvbSBQQVRIIGJhc2VkIHByb2dyYW0gbG9va3VwCi0gICAgICAgICAgICAgICAgICAgICBjYXNlICJ4JENDIiBpbiAjKAotICB4LyopIDoKLSAgICBpZiBhc19mbl9leGVjdXRhYmxlX3AgJHtDQ31fcjsgdGhlbiA6Ci0gIFBUSFJFQURfQ0M9IiR7Q0N9X3IiCi1maSA7OyAjKAotICAqKSA6Ci0gICAgZm9yIGFjX3Byb2cgaW4gJHtDQ31fcgotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX1BUSFJFQURfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkUFRIUkVBRF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19QVEhSRUFEX0NDPSIkUFRIUkVBRF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX1BUSFJFQURfQ0M9IiRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLVBUSFJFQURfQ0M9JGFjX2N2X3Byb2dfUFRIUkVBRF9DQwotaWYgdGVzdCAtbiAiJFBUSFJFQURfQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUFRIUkVBRF9DQyIgPiY1Ci0kYXNfZWNobyAiJFBUSFJFQURfQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICB0ZXN0IC1uICIkUFRIUkVBRF9DQyIgJiYgYnJlYWsKLWRvbmUKLXRlc3QgLW4gIiRQVEhSRUFEX0NDIiB8fCBQVEhSRUFEX0NDPSIkQ0MiCi0gOzsKLWVzYWMgOzsgIygKLSAgKikgOgotICAgICA7OwotZXNhYwotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgIGZpCi1maQotCi10ZXN0IC1uICIkUFRIUkVBRF9DQyIgfHwgUFRIUkVBRF9DQz0iJENDIgotCi0KLQotCi0KLSMgRmluYWxseSwgZXhlY3V0ZSBBQ1RJT04tSUYtRk9VTkQvQUNUSU9OLUlGLU5PVC1GT1VORDoKLWlmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieHllcyI7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QVEhSRUFEIDEiID4+Y29uZmRlZnMuaAotCi0gICAgICAgIDoKLWVsc2UKLSAgICAgICAgYXhfcHRocmVhZF9vaz1ubwotCi1maQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLSBpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfUFRIUkVBRF9UUlVFPQotICBIQVZFX1BUSFJFQURfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfUFRIUkVBRF9UUlVFPScjJwotICBIQVZFX1BUSFJFQURfRkFMU0U9Ci1maQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3ByY3RsLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy9wcmN0bC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19wcmN0bF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19wcmN0bF9oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfU1lTX1BSQ1RMX0ggMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX3NldG5hbWVfbnAoY29uc3QgY2hhciopIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX3NldG5hbWVfbnAoY29uc3QgY2hhciopLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotaW50Ci1tYWluICgpCi17Ci1wdGhyZWFkX3NldG5hbWVfbnAoImV4YW1wbGUiKQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRIUkVBRF9TRVROQU1FX05QX1dJVEhPVVRfVElEIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3Vpby5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvdWlvLmgiICJhY19jdl9oZWFkZXJfc3lzX3Vpb19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c191aW9faCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1NZU19VSU9fSCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLWZvciBhY19oZWFkZXIgaW4gdmFsZ3JpbmQvdmFsZ3JpbmQuaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAidmFsZ3JpbmQvdmFsZ3JpbmQuaCIgImFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2giID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9WQUxHUklORF9WQUxHUklORF9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiB3aW5zb2NrMi5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJ3aW5zb2NrMi5oIiAiYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQotX0FDRU9GCi0gSEFWRV9XSU5TT0NLMl9IPXllcwotZWxzZQotICBIQVZFX1dJTlNPQ0syX0g9bm8KLWZpCi0KLWRvbmUKLQotIGlmIHRlc3QgIngkSEFWRV9XSU5TT0NLMl9IIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX1dJTlNPQ0syX0hfVFJVRT0KLSAgSEFWRV9XSU5TT0NLMl9IX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX1dJTlNPQ0syX0hfVFJVRT0nIycKLSAgSEFWRV9XSU5TT0NLMl9IX0ZBTFNFPQotZmkKLQotaWYgdGVzdCAieCRIQVZFX1dJTlNPQ0syX0giID0gInh5ZXMiOyB0aGVuCi0gIFdJTjMyX0xJQlM9Ii1sd3MyXzMyIgotCi1maQotCi1pZiB0ZXN0ICJ4JEJVSUxEX1RFU1RTIiA9ICJ4eWVzIjsgdGhlbgotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9fZ21wel9pbml0X3NldF9kIGluIC1sZ21wIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX2dtcHpfaW5pdF9zZXRfZCBpbiAtbGdtcC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfZ21wX19fZ21wel9pbml0X3NldF9kKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxnbXAgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIF9fZ21wel9pbml0X3NldF9kICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gX19nbXB6X2luaXRfc2V0X2QgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2dtcF9fX2dtcHpfaW5pdF9zZXRfZD15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX2dtcF9fX2dtcHpfaW5pdF9zZXRfZD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZ21wX19fZ21wel9pbml0X3NldF9kIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2dtcF9fX2dtcHpfaW5pdF9zZXRfZCIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9nbXBfX19nbXB6X2luaXRfc2V0X2QiID0geHllczsgdGhlbiA6Ci0gIEhBVkVfR01QPXllcwotZWxzZQotICBIQVZFX0dNUD1ubwotZmkKLQotICBpZiB0ZXN0ICJ4JEhBVkVfR01QIiA9ICJ4eWVzIjsgdGhlbgotICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJnbXAuaCIgImFjX2N2X2hlYWRlcl9nbXBfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZ21wX2giID0geHllczsgdGhlbiA6Ci0gIDoKLWVsc2UKLSAgSEFWRV9HTVA9bm8KLWZpCi0KLQotICAgIGlmIHRlc3QgIngkSEFWRV9HTVAiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICBHTVBfTElCUz0iLWxnbXAiCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HTVAgMSIgPj5jb25mZGVmcy5oCi0KLSAgICBlbHNlCi0gICAgICA6Ci0gICAgZmkKLSAgZWxzZQotICAgIDoKLSAgZmkKLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnc2xfcm5nX3VuaWZvcm1faW50IGluIC1sZ3NsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBnc2xfcm5nX3VuaWZvcm1faW50IGluIC1sZ3NsLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9nc2xfZ3NsX3JuZ191bmlmb3JtX2ludCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZ3NsIC1sZ3NsY2JsYXMgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZ3NsX3JuZ191bmlmb3JtX2ludCAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGdzbF9ybmdfdW5pZm9ybV9pbnQgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2dzbF9nc2xfcm5nX3VuaWZvcm1faW50PXllcwotZWxzZQotICBhY19jdl9saWJfZ3NsX2dzbF9ybmdfdW5pZm9ybV9pbnQ9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2dzbF9nc2xfcm5nX3VuaWZvcm1faW50IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2dzbF9nc2xfcm5nX3VuaWZvcm1faW50IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2dzbF9nc2xfcm5nX3VuaWZvcm1faW50IiA9IHh5ZXM7IHRoZW4gOgotICBIQVZFX0dTTD15ZXMKLWVsc2UKLSAgSEFWRV9HU0w9bm8KLWZpCi0KLSAgaWYgdGVzdCAieCRIQVZFX0dTTCIgPSAieHllcyI7IHRoZW4KLSAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZ3NsL2dzbF9ybmcuaCIgImFjX2N2X2hlYWRlcl9nc2xfZ3NsX3JuZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9nc2xfZ3NsX3JuZ19oIiA9IHh5ZXM7IHRoZW4gOgotICA6Ci1lbHNlCi0gIEhBVkVfR1NMPW5vCi1maQotCi0KLSAgICBpZiB0ZXN0ICJ4JEhBVkVfR1NMIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICAgICAgR1NMX0xJQlM9Ii1sZ3NsIC1sZ3NsY2JsYXMiCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HU0wgMSIgPj5jb25mZGVmcy5oCi0KLSAgICBlbHNlCi0gICAgICA6Ci0gICAgZmkKLSAgZWxzZQotICAgIDoKLSAgZmkKLQotCi0KLWZpCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9fdWludDEyOF90IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX3VpbnQxMjhfdC4uLiAiID4mNjsgfQotaWYgJHtnc3RfY3ZfdWludDEyOF90Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICAgICAgc3RhdGljIF9fdWludDEyOF90IHYxID0gMTAwOwotICAgICAgc3RhdGljIF9fdWludDEyOF90IHYyID0gMTA7Ci0gICAgICBzdGF0aWMgX191aW50MTI4X3QgdTsKLSAgICAgIHUgPSB2MSAvIHYyOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLQotICAgICAgZ3N0X2N2X3VpbnQxMjhfdD15ZXMKLQotZWxzZQotCi0gICAgICBnc3RfY3ZfdWludDEyOF90PW5vCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnc3RfY3ZfdWludDEyOF90IiA+JjUKLSRhc19lY2hvICIkZ3N0X2N2X3VpbnQxMjhfdCIgPiY2OyB9Ci1pZiB0ZXN0IHgkZ3N0X2N2X3VpbnQxMjhfdCA9IHh5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VSU5UMTI4X1QgMSIgPj5jb25mZGVmcy5oCi0KLWZpCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRtX2dtdG9mZiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgdG1fZ210b2ZmLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGhhdmVfdG1fZ210b2ZmPSJubyAoY3Jvc3MgY29tcGlsaW5nKSIKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0JI2luY2x1ZGUgPHRpbWUuaD4KLQlpbnQgbWFpbih2b2lkKSB7Ci0JICBzdHJ1Y3QgdG0gdDsKLQkgIHQudG1fZ210b2ZmID0gMDsKLQkgIGV4aXQoMCk7Ci0JfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgaGF2ZV90bV9nbXRvZmY9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfVE1fR01UT0ZGIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIGhhdmVfdG1fZ210b2ZmPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3RtX2dtdG9mZiIgPiY1Ci0kYXNfZWNobyAiJGhhdmVfdG1fZ210b2ZmIiA+JjY7IH0KLQotCi0KLWZvciBhY19mdW5jIGluIHN0cmNhc2VzdHIKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RyY2FzZXN0ciIgImFjX2N2X2Z1bmNfc3RyY2FzZXN0ciIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJjYXNlc3RyIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfU1RSQ0FTRVNUUiAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiBnbXRpbWVfcgotZG8gOgotICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnbXRpbWVfciIgImFjX2N2X2Z1bmNfZ210aW1lX3IiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ210aW1lX3IiID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9HTVRJTUVfUiAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotZm9yIGFjX2Z1bmMgaW4gbG9jYWx0aW1lX3IKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAibG9jYWx0aW1lX3IiICJhY19jdl9mdW5jX2xvY2FsdGltZV9yIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2xvY2FsdGltZV9yIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLWZvciBhY19mdW5jIGluIHNpZ2FjdGlvbgotZG8gOgotICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaWdhY3Rpb24iICJhY19jdl9mdW5jX3NpZ2FjdGlvbiIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19zaWdhY3Rpb24iID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLWZvciBhY19mdW5jIGluIGdldHJ1c2FnZQotZG8gOgotICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRydXNhZ2UiICJhY19jdl9mdW5jX2dldHJ1c2FnZSIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRydXNhZ2UiID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9HRVRSVVNBR0UgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0cnVzYWdlIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0dFVFJVU0FHRV9UUlVFPQotICBIQVZFX0dFVFJVU0FHRV9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9HRVRSVVNBR0VfVFJVRT0nIycKLSAgSEFWRV9HRVRSVVNBR0VfRkFMU0U9Ci1maQotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9yZXNvdXJjZS5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvcmVzb3VyY2UuaCIgImFjX2N2X2hlYWRlcl9zeXNfcmVzb3VyY2VfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3Jlc291cmNlX2giID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TWVNfUkVTT1VSQ0VfSCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9MQVJHRUZJTEVfU09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9MQVJHRUZJTEVfU09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICB3aGlsZSA6OyBkbwotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIGZvciBvZmZfdCAqLwotICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KLWludAotbWFpbiAoKQotewotaW50ICgqZnApIChGSUxFICosIG9mZl90LCBpbnQpID0gZnNlZWtvOwotICAgICByZXR1cm4gZnNlZWtvIChzdGRpbiwgMCwgMCkgJiYgZnAgKHN0ZGluLCAwLCAwKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT1ubzsgYnJlYWsKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovCi0gICAgICNpbmNsdWRlIDxzdGRpby5oPgotaW50Ci1tYWluICgpCi17Ci1pbnQgKCpmcCkgKEZJTEUgKiwgb2ZmX3QsIGludCkgPSBmc2Vla287Ci0gICAgIHJldHVybiBmc2Vla28gKHN0ZGluLCAwLCAwKSAmJiBmcCAoc3RkaW4sIDAsIDApOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTE7IGJyZWFrCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2U9dW5rbm93bgotICBicmVhawotZG9uZQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UiID4mNQotJGFzX2VjaG8gIiRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgPiY2OyB9Ci1jYXNlICRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSBpbiAjKAotICBubyB8IHVua25vd24pIDs7Ci0gICopCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFICRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZQotX0FDRU9GCi07OwotZXNhYwotcm0gLXJmIGNvbmZ0ZXN0KgotCi0jIFdlIHVzZWQgdG8gdHJ5IGRlZmluaW5nIF9YT1BFTl9TT1VSQ0U9NTAwIHRvbywgdG8gd29yayBhcm91bmQgYSBidWcKLSMgaW4gZ2xpYmMgMi4xLjMsIGJ1dCB0aGF0IGJyZWFrcyB0b28gbWFueSBvdGhlciB0aGluZ3MuCi0jIElmIHlvdSB3YW50IGZzZWVrbyBhbmQgZnRlbGxvIHdpdGggZ2xpYmMsIHVwZ3JhZGUgdG8gYSBmaXhlZCBnbGliYy4KLWlmIHRlc3QgJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlICE9IHVua25vd247IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GU0VFS08gMSIgPj5jb25mZGVmcy5oCi0KLWZpCi0KLWZvciBhY19mdW5jIGluIGZ0ZWxsbwotZG8gOgotICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJmdGVsbG8iICJhY19jdl9mdW5jX2Z0ZWxsbyIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19mdGVsbG8iID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9GVEVMTE8gMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gZmdldHBvcwotZG8gOgotICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJmZ2V0cG9zIiAiYWNfY3ZfZnVuY19mZ2V0cG9zIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2ZnZXRwb3MiID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9GR0VUUE9TIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi1mb3IgYWNfZnVuYyBpbiBmc2V0cG9zCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImZzZXRwb3MiICJhY19jdl9mdW5jX2ZzZXRwb3MiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZnNldHBvcyIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0ZTRVRQT1MgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvcG9sbC5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvcG9sbC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19wb2xsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3BvbGxfaCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1NZU19QT0xMX0ggMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotZm9yIGFjX2hlYWRlciBpbiBwb2xsLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInBvbGwuaCIgImFjX2N2X2hlYWRlcl9wb2xsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcG9sbF9oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfUE9MTF9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLWZvciBhY19mdW5jIGluIHBvbGwKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicG9sbCIgImFjX2N2X2Z1bmNfcG9sbCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19wb2xsIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfUE9MTCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotZm9yIGFjX2Z1bmMgaW4gcHBvbGwKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicHBvbGwiICJhY19jdl9mdW5jX3Bwb2xsIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX3Bwb2xsIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfUFBPTEwgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLWZvciBhY19mdW5jIGluIHBzZWxlY3QKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicHNlbGVjdCIgImFjX2N2X2Z1bmNfcHNlbGVjdCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19wc2VsZWN0IiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfUFNFTEVDVCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzb2NrZXRwYWlyIiAiYWNfY3ZfZnVuY19zb2NrZXRwYWlyIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX3NvY2tldHBhaXIiID0geHllczsgdGhlbiA6Ci0KLWVsc2UKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzb2NrZXRwYWlyIGluIC1sc29ja2V0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzb2NrZXRwYWlyIGluIC1sc29ja2V0Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9zb2NrZXRfc29ja2V0cGFpcis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sc29ja2V0ICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBzb2NrZXRwYWlyICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gc29ja2V0cGFpciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfc29ja2V0X3NvY2tldHBhaXI9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0cGFpcj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc29ja2V0X3NvY2tldHBhaXIiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfc29ja2V0X3NvY2tldHBhaXIiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfc29ja2V0X3NvY2tldHBhaXIiID0geHllczsgdGhlbiA6Ci0KLSAgICBTT0NLRVRfTElCUz0iLWxzb2NrZXQiCi0KLQotZmkKLQotCi1maQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnJva2VuIHBvbGwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJyb2tlbiBwb2xsLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGJyb2tlbl9wb2xsPSJubyAoY3Jvc3MgY29tcGlsaW5nKSIKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0JI2luY2x1ZGUgPHN0ZGxpYi5oPgotCSNpbmNsdWRlIDxmY250bC5oPgotCSNpZmRlZiBIQVZFX1NZU19QT0xMX0gKLQkjaW5jbHVkZSA8c3lzL3BvbGwuaD4KLQkjZW5kaWYKLQkjaWZkZWYgSEFWRV9QT0xMX0gKLQkjaW5jbHVkZSA8cG9sbC5oPgotCSNlbmRpZgotCWludCBtYWluKHZvaWQpIHsKLQkgIHN0cnVjdCBwb2xsZmQgZmRzWzFdOwotCSAgaW50IGZkOwotCSAgZmQgPSBvcGVuKCIvZGV2L251bGwiLCAxKTsKLQkgIGZkc1swXS5mZCA9IGZkOwotCSAgZmRzWzBdLmV2ZW50cyA9IFBPTExJTjsKLQkgIGZkc1swXS5yZXZlbnRzID0gMDsKLQkgIGlmIChwb2xsKGZkcywgMSwgMCkgPCAwIHx8IChmZHNbMF0ucmV2ZW50cyAmIFBPTExOVkFMKSAhPSAwKSB7Ci0JCWV4aXQoMSk7ICAvKiBEb2VzIG5vdCB3b3JrIGZvciBkZXZpY2VzIC0tIGZhaWwgKi8KLQkgIH0KLQkgIGV4aXQoMCk7Ci0JfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYnJva2VuX3BvbGw9bm8KLWVsc2UKLSAgYnJva2VuX3BvbGw9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEJST0tFTl9QT0xMIDEiID4+Y29uZmRlZnMuaAotCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRicm9rZW5fcG9sbCIgPiY1Ci0kYXNfZWNobyAiJGJyb2tlbl9wb2xsIiA+JjY7IH0KLQotCi0KLQotICBmb3IgYWNfaGVhZGVyIGluICRhY19oZWFkZXJfbGlzdAotZG8gOgotICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gZ2V0cGFnZXNpemUKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0cGFnZXNpemUiICJhY19jdl9mdW5jX2dldHBhZ2VzaXplIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHBhZ2VzaXplIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbW1hcCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBtbWFwLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm8KLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLS8qIG1hbGxvYyBtaWdodCBoYXZlIGJlZW4gcmVuYW1lZCBhcyBycGxfbWFsbG9jLiAqLwotI3VuZGVmIG1hbGxvYwotCi0vKiBUaGFua3MgdG8gTWlrZSBIYWVydGVsIGFuZCBKaW0gQXZlcmEgZm9yIHRoaXMgdGVzdC4KLSAgIEhlcmUgaXMgYSBtYXRyaXggb2YgbW1hcCBwb3NzaWJpbGl0aWVzOgotCW1tYXAgcHJpdmF0ZSBub3QgZml4ZWQKLQltbWFwIHByaXZhdGUgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRseSB1bm1hcHBlZAotCW1tYXAgcHJpdmF0ZSBmaXhlZCBhdCBzb21ld2hlcmUgYWxyZWFkeSBtYXBwZWQKLQltbWFwIHNoYXJlZCBub3QgZml4ZWQKLQltbWFwIHNoYXJlZCBmaXhlZCBhdCBzb21ld2hlcmUgY3VycmVudGx5IHVubWFwcGVkCi0JbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGFscmVhZHkgbWFwcGVkCi0gICBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgd2Ugc2hvdWxkIHZlcmlmeSB0aGF0IGNoYW5nZXMgY2Fubm90IGJlIHJlYWQoKQotICAgYmFjayBmcm9tIHRoZSBmaWxlLCBub3IgbW1hcCdzIGJhY2sgZnJvbSB0aGUgZmlsZSBhdCBhIGRpZmZlcmVudAotICAgYWRkcmVzcy4gIChUaGVyZSBoYXZlIGJlZW4gc3lzdGVtcyB3aGVyZSBwcml2YXRlIHdhcyBub3QgY29ycmVjdGx5Ci0gICBpbXBsZW1lbnRlZCBsaWtlIHRoZSBpbmZhbW91cyBpMzg2IHN2cjQuMCwgYW5kIHN5c3RlbXMgd2hlcmUgdGhlCi0gICBWTSBwYWdlIGNhY2hlIHdhcyBub3QgY29oZXJlbnQgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gYnVmZmVyIGNhY2hlCi0gICBsaWtlIGVhcmx5IHZlcnNpb25zIG9mIEZyZWVCU0QgYW5kIHBvc3NpYmx5IGNvbnRlbXBvcmFyeSBOZXRCU0QuKQotICAgRm9yIHNoYXJlZCBtYXBwaW5ncywgd2Ugc2hvdWxkIGNvbnZlcnNlbHkgdmVyaWZ5IHRoYXQgY2hhbmdlcyBnZXQKLSAgIHByb3BhZ2F0ZWQgYmFjayB0byBhbGwgdGhlIHBsYWNlcyB0aGV5J3JlIHN1cHBvc2VkIHRvIGJlLgotCi0gICBHcmVwIHdhbnRzIHByaXZhdGUgZml4ZWQgYWxyZWFkeSBtYXBwZWQuCi0gICBUaGUgbWFpbiB0aGluZ3MgZ3JlcCBuZWVkcyB0byBrbm93IGFib3V0IG1tYXAgYXJlOgotICAgKiBkb2VzIGl0IGV4aXN0IGFuZCBpcyBpdCBzYWZlIHRvIHdyaXRlIGludG8gdGhlIG1tYXAnZCBhcmVhCi0gICAqIGhvdyB0byB1c2UgaXQgKEJTRCB2YXJpYW50cykgICovCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLSNpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgIWRlZmluZWQgSEFWRV9TVERMSUJfSAotY2hhciAqbWFsbG9jICgpOwotI2VuZGlmCi0KLS8qIFRoaXMgbWVzcyB3YXMgY29waWVkIGZyb20gdGhlIEdOVSBnZXRwYWdlc2l6ZS5oLiAgKi8KLSNpZm5kZWYgSEFWRV9HRVRQQUdFU0laRQotIyBpZmRlZiBfU0NfUEFHRVNJWkUKLSMgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIHN5c2NvbmYoX1NDX1BBR0VTSVpFKQotIyBlbHNlIC8qIG5vIF9TQ19QQUdFU0laRSAqLwotIyAgaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotIyAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgotIyAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKLSMgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgRVhFQ19QQUdFU0laRQotIyAgIGVsc2UgLyogbm8gRVhFQ19QQUdFU0laRSAqLwotIyAgICBpZmRlZiBOQlBHCi0jICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBOQlBHICogQ0xTSVpFCi0jICAgICBpZm5kZWYgQ0xTSVpFCi0jICAgICAgZGVmaW5lIENMU0laRSAxCi0jICAgICBlbmRpZiAvKiBubyBDTFNJWkUgKi8KLSMgICAgZWxzZSAvKiBubyBOQlBHICovCi0jICAgICBpZmRlZiBOQlBDCi0jICAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgTkJQQwotIyAgICAgZWxzZSAvKiBubyBOQlBDICovCi0jICAgICAgaWZkZWYgUEFHRVNJWkUKLSMgICAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgUEFHRVNJWkUKLSMgICAgICBlbmRpZiAvKiBQQUdFU0laRSAqLwotIyAgICAgZW5kaWYgLyogbm8gTkJQQyAqLwotIyAgICBlbmRpZiAvKiBubyBOQlBHICovCi0jICAgZW5kaWYgLyogbm8gRVhFQ19QQUdFU0laRSAqLwotIyAgZWxzZSAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCi0jICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgODE5MgkvKiBwdW50IHRvdGFsbHkgKi8KLSMgIGVuZGlmIC8qIG5vIEhBVkVfU1lTX1BBUkFNX0ggKi8KLSMgZW5kaWYgLyogbm8gX1NDX1BBR0VTSVpFICovCi0KLSNlbmRpZiAvKiBubyBIQVZFX0dFVFBBR0VTSVpFICovCi0KLWludAotbWFpbiAoKQotewotICBjaGFyICpkYXRhLCAqZGF0YTIsICpkYXRhMzsKLSAgY29uc3QgY2hhciAqY2RhdGEyOwotICBpbnQgaSwgcGFnZXNpemU7Ci0gIGludCBmZCwgZmQyOwotCi0gIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUgKCk7Ci0KLSAgLyogRmlyc3QsIG1ha2UgYSBmaWxlIHdpdGggc29tZSBrbm93biBnYXJiYWdlIGluIGl0LiAqLwotICBkYXRhID0gKGNoYXIgKikgbWFsbG9jIChwYWdlc2l6ZSk7Ci0gIGlmICghZGF0YSkKLSAgICByZXR1cm4gMTsKLSAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCi0gICAgKihkYXRhICsgaSkgPSByYW5kICgpOwotICB1bWFzayAoMCk7Ci0gIGZkID0gY3JlYXQgKCJjb25mdGVzdC5tbWFwIiwgMDYwMCk7Ci0gIGlmIChmZCA8IDApCi0gICAgcmV0dXJuIDI7Ci0gIGlmICh3cml0ZSAoZmQsIGRhdGEsIHBhZ2VzaXplKSAhPSBwYWdlc2l6ZSkKLSAgICByZXR1cm4gMzsKLSAgY2xvc2UgKGZkKTsKLQotICAvKiBOZXh0LCBjaGVjayB0aGF0IHRoZSB0YWlsIG9mIGEgcGFnZSBpcyB6ZXJvLWZpbGxlZC4gIEZpbGUgbXVzdCBoYXZlCi0gICAgIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNlIHdlIHJpc2sgU0lHQlVTIGZvciBlbnRpcmUgcGFnZS4gICovCi0gIGZkMiA9IG9wZW4gKCJjb25mdGVzdC50eHQiLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19UUlVOQywgMDYwMCk7Ci0gIGlmIChmZDIgPCAwKQotICAgIHJldHVybiA0OwotICBjZGF0YTIgPSAiIjsKLSAgaWYgKHdyaXRlIChmZDIsIGNkYXRhMiwgMSkgIT0gMSkKLSAgICByZXR1cm4gNTsKLSAgZGF0YTIgPSAoY2hhciAqKSBtbWFwICgwLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQyLCAwTCk7Ci0gIGlmIChkYXRhMiA9PSBNQVBfRkFJTEVEKQotICAgIHJldHVybiA2OwotICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKLSAgICBpZiAoKihkYXRhMiArIGkpKQotICAgICAgcmV0dXJuIDc7Ci0gIGNsb3NlIChmZDIpOwotICBpZiAobXVubWFwIChkYXRhMiwgcGFnZXNpemUpKQotICAgIHJldHVybiA4OwotCi0gIC8qIE5leHQsIHRyeSB0byBtbWFwIHRoZSBmaWxlIGF0IGEgZml4ZWQgYWRkcmVzcyB3aGljaCBhbHJlYWR5IGhhcwotICAgICBzb21ldGhpbmcgZWxzZSBhbGxvY2F0ZWQgYXQgaXQuICBJZiB3ZSBjYW4sIGFsc28gbWFrZSBzdXJlIHRoYXQKLSAgICAgd2Ugc2VlIHRoZSBzYW1lIGdhcmJhZ2UuICAqLwotICBmZCA9IG9wZW4gKCJjb25mdGVzdC5tbWFwIiwgT19SRFdSKTsKLSAgaWYgKGZkIDwgMCkKLSAgICByZXR1cm4gOTsKLSAgaWYgKGRhdGEyICE9IG1tYXAgKGRhdGEyLCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLQkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9GSVhFRCwgZmQsIDBMKSkKLSAgICByZXR1cm4gMTA7Ci0gIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQotICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEyICsgaSkpCi0gICAgICByZXR1cm4gMTE7Ci0KLSAgLyogRmluYWxseSwgbWFrZSBzdXJlIHRoYXQgY2hhbmdlcyB0byB0aGUgbWFwcGVkIGFyZWEgZG8gbm90Ci0gICAgIHBlcmNvbGF0ZSBiYWNrIHRvIHRoZSBmaWxlIGFzIHNlZW4gYnkgcmVhZCgpLiAgKFRoaXMgaXMgYSBidWcgb24KLSAgICAgc29tZSB2YXJpYW50cyBvZiBpMzg2IHN2cjQuMC4pICAqLwotICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKLSAgICAqKGRhdGEyICsgaSkgPSAqKGRhdGEyICsgaSkgKyAxOwotICBkYXRhMyA9IChjaGFyICopIG1hbGxvYyAocGFnZXNpemUpOwotICBpZiAoIWRhdGEzKQotICAgIHJldHVybiAxMjsKLSAgaWYgKHJlYWQgKGZkLCBkYXRhMywgcGFnZXNpemUpICE9IHBhZ2VzaXplKQotICAgIHJldHVybiAxMzsKLSAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCi0gICAgaWYgKCooZGF0YSArIGkpICE9ICooZGF0YTMgKyBpKSkKLSAgICAgIHJldHVybiAxNDsKLSAgY2xvc2UgKGZkKTsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllcwotZWxzZQotICBhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX01NQVAgMSIgPj5jb25mZGVmcy5oCi0KLWZpCi1ybSAtZiBjb25mdGVzdC5tbWFwIGNvbmZ0ZXN0LnR4dAotCi0gaWYgdGVzdCAieCRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX01NQVBfVFJVRT0KLSAgSEFWRV9NTUFQX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX01NQVBfVFJVRT0nIycKLSAgSEFWRV9NTUFQX0ZBTFNFPQotZmkKLQotCi1mb3IgYWNfZnVuYyBpbiBwb3NpeF9tZW1hbGlnbgotZG8gOgotICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJwb3NpeF9tZW1hbGlnbiIgImFjX2N2X2Z1bmNfcG9zaXhfbWVtYWxpZ24iCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcG9zaXhfbWVtYWxpZ24iID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9QT1NJWF9NRU1BTElHTiAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotZm9yIGFjX2Z1bmMgaW4gZ2V0cGFnZXNpemUKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0cGFnZXNpemUiICJhY19jdl9mdW5jX2dldHBhZ2VzaXplIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHBhZ2VzaXplIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotQ0xPQ0tfR0VUVElNRV9GT1VORD0ibm8iCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJjbG9ja19nZXR0aW1lIiAiYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2Nsb2NrX2dldHRpbWUiID0geHllczsgdGhlbiA6Ci0gIENMT0NLX0dFVFRJTUVfRk9VTkQ9InllcyIKLWVsc2UKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjbG9ja19nZXR0aW1lIGluIC1scnQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNsb2NrX2dldHRpbWUgaW4gLWxydC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scnQgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGNsb2NrX2dldHRpbWUgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBjbG9ja19nZXR0aW1lICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lPXllcwotZWxzZQotICBhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZT1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWUiID0geHllczsgdGhlbiA6Ci0KLSAgICBDTE9DS19HRVRUSU1FX0ZPVU5EPSJ5ZXMiCi0gICAgTElCUz0iJExJQlMgLWxydCIKLQotZWxzZQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY2xvY2tfZ2V0dGltZSBpbiAtbHB0aHJlYWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNsb2NrX2dldHRpbWUgaW4gLWxwdGhyZWFkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9wdGhyZWFkX2Nsb2NrX2dldHRpbWUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHB0aHJlYWQgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGNsb2NrX2dldHRpbWUgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBjbG9ja19nZXR0aW1lICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9wdGhyZWFkX2Nsb2NrX2dldHRpbWU9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9wdGhyZWFkX2Nsb2NrX2dldHRpbWU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfY2xvY2tfZ2V0dGltZSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9wdGhyZWFkX2Nsb2NrX2dldHRpbWUiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfcHRocmVhZF9jbG9ja19nZXR0aW1lIiA9IHh5ZXM7IHRoZW4gOgotCi0gICAgICBDTE9DS19HRVRUSU1FX0ZPVU5EPSJ5ZXMiCi0gICAgICBMSUJTPSIkTElCUyAtbHB0aHJlYWQiCi0KLWZpCi0KLQotZmkKLQotCi1maQotCi0KLSMgV2l0aCBYQ29kZSA4LCBjbG9ja19nZXR0aW1lIHdpbGwgYmUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgYXMgYmVpbmcgYXZhaWxhYmxlCi0jIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB2ZXJzaW9uIG9mIE9TIFggeW91IHRhcmdldCBiZWNhdXNlIHRoZSBzeW1ib2wgaXMgYXZhaWxhYmxlCi0jIGluIHRoZSAudGJkIGZpbGUgYXMgYSB3ZWFrIHN5bWJvbC4KLSMgU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyNDUxCi0jCi0jIFdlIGNhbm5vdCBzaW1wbHkgZG8gQUNfQ0hFQ0tfRlVOQ1Mgd2l0aCAtV2wsLW5vX3dlYWtfaW1wb3J0cyBiZWNhdXNlIHRoZQotIyBhdXRvY29uZiBjaGVjayBkb2VzIGl0cyBvd24gcHJvdG90eXBlIGRlY2xhcmF0aW9uIHRoYXQgZG9lc24ndCB0cmlnZ2VyIHRoYXQKLSMgY29tcGlsZXIgZmxhZy4KLSMKLSMgSXQncyBvbmx5IHN0YXJ0aW5nIGZyb20gbWFjT1MgMTAuMTIgYW5kIGlPUyAxMC4wIHRoYXQgY2xvY2tfZ2V0dGltZSBpcwotIyBhY3R1YWxseSBhdmFpbGFibGUsIHNvIHdlIGNhbiB1bmNvbmRpdGlvbmFsbHkgZGlzYWJsZSBpdCBmb3Igb2xkZXIgdmVyc2lvbnMuCi1jYXNlICIkaG9zdF9vcyIgaW4KLSAgZGFyd2luKikKLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KLSNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4KLSNpZiBkZWZpbmVkKFRBUkdFVF9PU19NQUMpCi0jICBpZiBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfMTIKLSMgICAgZXJyb3IgIk5vdCBjb21waWxpbmcgZm9yIE9TIFggMTAuMTIgb3IgbGF0ZXIiCi0jICBlbmRpZgotI2Vsc2UKLSMgIGlmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgX19JUEhPTkVfMTBfMAotIyAgICBlcnJvciAiTm90IGNvbXBpbGluZyBmb3IgaU9TIDEwLjAgb3IgbGF0ZXIiCi0jICBlbmRpZgotI2VuZGlmCi0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0KLSAgICBpZiB0ZXN0ICIkQ0xPQ0tfR0VUVElNRV9GT1VORCIgPSAieWVzIjsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBEaXNhYmxpbmcgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgY2xvY2tfZ2V0dGltZSBvbiBPUyBYIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IERpc2FibGluZyBpbmNvcnJlY3RseSBkZXRlY3RlZCBjbG9ja19nZXR0aW1lIG9uIE9TIFgiID4mNjt9Ci0gICAgZmkKLSAgICBDTE9DS19HRVRUSU1FX0ZPVU5EPSJubyIKLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIDs7Ci1lc2FjCi0KLWlmIHRlc3QgIiRDTE9DS19HRVRUSU1FX0ZPVU5EIiA9ICJ5ZXMiOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcG9zaXggdGltZXJzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBwb3NpeCB0aW1lcnMuLi4gIiA+JjY7IH0KLWlmICR7Z3N0X2N2X3Bvc2l4X3RpbWVycys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2luY2x1ZGUgPHRpbWUuaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci0KLSNpZiAhZGVmaW5lZChfUE9TSVhfVElNRVJTKSB8fCBfUE9TSVhfVElNRVJTIDwgMCB8fCAhZGVmaW5lZChDTE9DS19SRUFMVElNRSkKLSNlcnJvciBFaXRoZXIgX1BPU0lYX1RJTUVSUyBvciBDTE9DS19SRUFMVElNRSBub3QgZGVmaW5lZAotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0gICAgICBnc3RfY3ZfcG9zaXhfdGltZXJzPXllcwotCi1lbHNlCi0KLSAgICAgIGdzdF9jdl9wb3NpeF90aW1lcnM9bm8KLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnc3RfY3ZfcG9zaXhfdGltZXJzIiA+JjUKLSRhc19lY2hvICIkZ3N0X2N2X3Bvc2l4X3RpbWVycyIgPiY2OyB9Ci0KLWlmIHRlc3QgIiRnc3RfY3ZfcG9zaXhfdGltZXJzIiA9ICJ5ZXMiOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUE9TSVhfVElNRVJTIDEiID4+Y29uZmRlZnMuaAotCi0gIEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfUE9TSVhfVElNRVJTIDEiCi1lbHNlCi0gIEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfUE9TSVhfVElNRVJTIDAiCi1maQotCi0gaWYgdGVzdCAiJGdzdF9jdl9wb3NpeF90aW1lcnMiID0gInllcyI7IHRoZW4KLSAgR1NUX0hBVkVfUE9TSVhfVElNRVJTX1RSVUU9Ci0gIEdTVF9IQVZFX1BPU0lYX1RJTUVSU19GQUxTRT0nIycKLWVsc2UKLSAgR1NUX0hBVkVfUE9TSVhfVElNRVJTX1RSVUU9JyMnCi0gIEdTVF9IQVZFX1BPU0lYX1RJTUVSU19GQUxTRT0KLWZpCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbW9ub3RvbmljIGNsb2NrIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBtb25vdG9uaWMgY2xvY2suLi4gIiA+JjY7IH0KLWlmICR7Z3N0X2N2X21vbm90b25pY19jbG9jays6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2luY2x1ZGUgPHRpbWUuaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci0KLSNpZiAhZGVmaW5lZChfUE9TSVhfTU9OT1RPTklDX0NMT0NLKSB8fCBfUE9TSVhfTU9OT1RPTklDX0NMT0NLIDwgMCB8fCAhZGVmaW5lZChDTE9DS19NT05PVE9OSUMpCi0jZXJyb3IgRWl0aGVyIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgb3IgQ0xPQ0tfTU9OT1RPTklDIG5vdCBkZWZpbmVkCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgICAgIGdzdF9jdl9tb25vdG9uaWNfY2xvY2s9eWVzCi0KLWVsc2UKLQotICAgICAgZ3N0X2N2X21vbm90b25pY19jbG9jaz1ubwotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdzdF9jdl9tb25vdG9uaWNfY2xvY2siID4mNQotJGFzX2VjaG8gIiRnc3RfY3ZfbW9ub3RvbmljX2Nsb2NrIiA+JjY7IH0KLQotaWYgdGVzdCAiJGdzdF9jdl9tb25vdG9uaWNfY2xvY2siID0gInllcyI7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NT05PVE9OSUNfQ0xPQ0sgMSIgPj5jb25mZGVmcy5oCi0KLSAgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORT0iI2RlZmluZSBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0sgMSIKLWVsc2UKLSAgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORT0iI2RlZmluZSBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0sgMCIKLWZpCi0KLSBpZiB0ZXN0ICIkZ3N0X2N2X21vbm90b25pY19jbG9jayIgPSAieWVzIjsgdGhlbgotICBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfVFJVRT0KLSAgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0ZBTFNFPScjJwotZWxzZQotICBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfVFJVRT0nIycKLSAgR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0ZBTFNFPQotZmkKLQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGltcGxlbWVudHMgX19QUkVUVFlfRlVOQ1RJT05fXyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBpbXBsZW1lbnRzIF9fUFJFVFRZX0ZVTkNUSU9OX18uLi4gIiA+JjY7IH0KLSAgaWYgJHtnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb24rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1pbnQKLW1haW4gKCkKLXsKLXByaW50ZigiJXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb249eWVzCi1lbHNlCi0gIGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb24iID4mNQotJGFzX2VjaG8gIiRnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb24iID4mNjsgfQotICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uIiA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1BSRVRUWV9GVU5DVElPTiAxIiA+PmNvbmZkZWZzLmgKLQotICBmaQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgaW1wbGVtZW50cyBfX0ZVTkNUSU9OX18iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgaW1wbGVtZW50cyBfX0ZVTkNUSU9OX18uLi4gIiA+JjY7IH0KLSAgaWYgJHtnc3RfY3ZfaGF2ZV9mdW5jdGlvbis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0KLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLWludAotbWFpbiAoKQotewotcHJpbnRmKCIlcyIsIF9fRlVOQ1RJT05fXyk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZ3N0X2N2X2hhdmVfZnVuY3Rpb249eWVzCi1lbHNlCi0gIGdzdF9jdl9oYXZlX2Z1bmN0aW9uPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdzdF9jdl9oYXZlX2Z1bmN0aW9uIiA+JjUKLSRhc19lY2hvICIkZ3N0X2N2X2hhdmVfZnVuY3Rpb24iID4mNjsgfQotICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuY3Rpb24iID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfRlVOQ1RJT04gMSIgPj5jb25mZGVmcy5oCi0KLSAgZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGltcGxlbWVudHMgX19mdW5jX18iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgaW1wbGVtZW50cyBfX2Z1bmNfXy4uLiAiID4mNjsgfQotICBpZiAke2dzdF9jdl9oYXZlX2Z1bmMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1pbnQKLW1haW4gKCkKLXsKLXByaW50ZigiJXMiLCBfX2Z1bmNfXyk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZ3N0X2N2X2hhdmVfZnVuYz15ZXMKLWVsc2UKLSAgZ3N0X2N2X2hhdmVfZnVuYz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnc3RfY3ZfaGF2ZV9mdW5jIiA+JjUKLSRhc19lY2hvICIkZ3N0X2N2X2hhdmVfZnVuYyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRnc3RfY3ZfaGF2ZV9mdW5jIiA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZVTkMgMSIgPj5jb25mZGVmcy5oCi0KLSAgZmkKLQotICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uIiA9IHllczsgdGhlbgotICAgIGZ1bmN0aW9uPV9fUFJFVFRZX0ZVTkNUSU9OX18KLSAgZWxzZQotICAgIGlmIHRlc3QgIiRnc3RfY3ZfaGF2ZV9mdW5jdGlvbiIgPSB5ZXM7IHRoZW4KLSAgICAgIGZ1bmN0aW9uPV9fRlVOQ1RJT05fXwotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRnc3RfY3ZfaGF2ZV9mdW5jIiA9IHllczsgdGhlbgotICAgICAgICBmdW5jdGlvbj1fX2Z1bmNfXwotICAgICAgZWxzZQotICAgICAgICBmdW5jdGlvbj1cIlwiCi0gICAgICBmaQotICAgIGZpCi0gIGZpCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX0ZVTkNUSU9OICRmdW5jdGlvbgotX0FDRU9GCi0KLQotCi1zYXZlX2NmbGFncz0iJENGTEFHUyIKLUNGTEFHUz0iJENGTEFHUyAtRF9HTlVfU09VUkNFIgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxhZGRyIGluIC1sZGwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsYWRkciBpbiAtbGRsLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9kbF9kbGFkZHIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGRsICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBkbGFkZHIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBkbGFkZHIgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2RsX2RsYWRkcj15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX2RsX2RsYWRkcj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxhZGRyIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2RsYWRkciIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbGFkZHIiID0geHllczsgdGhlbiA6Ci0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfRExBRERSIDEiID4+Y29uZmRlZnMuaAotCi0gICBMSUJTPSIkTElCUyAtbGRsIgotZmkKLQotQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCi0KLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX0dTVF9ERUJVR30iICE9ICJ4eWVzIjsgdGhlbgotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxvbmcgbG9uZyBpbnQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxvbmcgbG9uZyBpbnQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0gIC8qIFRlc3QgcHJlcHJvY2Vzc29yLiAgKi8KLSAgICAgICNpZiAhICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIDwgMCAmJiAwIDwgOTIyMzM3MjAzNjg1NDc3NTgwN2xsKQotICAgICAgICBlcnJvciBpbiBwcmVwcm9jZXNzb3I7Ci0gICAgICAjZW5kaWYKLSAgICAgICNpZiAhICgxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAtMXVsbCkKLSAgICAgICAgZXJyb3IgaW4gcHJlcHJvY2Vzc29yOwotICAgICAgI2VuZGlmCi0gICAgICAvKiBUZXN0IGxpdGVyYWxzLiAgKi8KLSAgICAgIGxvbmcgbG9uZyBpbnQgbGwgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7Ci0gICAgICBsb25nIGxvbmcgaW50IG5sbCA9IC05MjIzMzcyMDM2ODU0Nzc1ODA3TEw7Ci0gICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMOwotICAgICAgLyogVGVzdCBjb25zdGFudCBleHByZXNzaW9ucy4gICAqLwotICAgICAgdHlwZWRlZiBpbnQgYVsoKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgPCAwICYmIDAgPCA5MjIzMzcyMDM2ODU0Nzc1ODA3bGwpCi0JCSAgICAgPyAxIDogLTEpXTsKLSAgICAgIHR5cGVkZWYgaW50IGJbKDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIDw9ICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSAtMQotCQkgICAgID8gMSA6IC0xKV07Ci0gICAgICBpbnQgaSA9IDYzOwotaW50Ci1tYWluICgpCi17Ci0vKiBUZXN0IGF2YWlsYWJpbGl0eSBvZiBydW50aW1lIHJvdXRpbmVzIGZvciBzaGlmdCBhbmQgZGl2aXNpb24uICAqLwotICAgICAgbG9uZyBsb25nIGludCBsbG1heCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKLSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsbWF4ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGw7Ci0gICAgICByZXR1cm4gKChsbCA8PCA2MykgfCAobGwgPj4gNjMpIHwgKGxsIDwgaSkgfCAobGwgPiBpKQotCSAgICAgIHwgKGxsbWF4IC8gbGwpIHwgKGxsbWF4ICUgbGwpCi0JICAgICAgfCAodWxsIDw8IDYzKSB8ICh1bGwgPj4gNjMpIHwgKHVsbCA8PCBpKSB8ICh1bGwgPj4gaSkKLQkgICAgICB8ICh1bGxtYXggLyB1bGwpIHwgKHVsbG1heCAlIHVsbCkpOwotICA7Ci0gIHJldHVybiAwOwotfQotCi1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgCQkJaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQkgICAgICAgI2lmbmRlZiBMTE9OR19NQVgKLQkgICAgICAgIyBkZWZpbmUgSEFMRiBcCi0JCQkoMUxMIDw8IChzaXplb2YgKGxvbmcgbG9uZyBpbnQpICogQ0hBUl9CSVQgLSAyKSkKLQkgICAgICAgIyBkZWZpbmUgTExPTkdfTUFYIChIQUxGIC0gMSArIEhBTEYpCi0JICAgICAgICNlbmRpZgotaW50Ci1tYWluICgpCi17Ci1sb25nIGxvbmcgaW50IG4gPSAxOwotCSAgICAgICBpbnQgaTsKLQkgICAgICAgZm9yIChpID0gMDsgOyBpKyspCi0JCSB7Ci0JCSAgIGxvbmcgbG9uZyBpbnQgbSA9IG4gPDwgaTsKLQkJICAgaWYgKG0gPj4gaSAhPSBuKQotCQkgICAgIHJldHVybiAxOwotCQkgICBpZiAoTExPTkdfTUFYIC8gMiA8IG0pCi0JCSAgICAgYnJlYWs7Ci0JCSB9Ci0JICAgICAgIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PXllcwotZWxzZQotICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1lbHNlCi0gIGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQiID4mNQotJGFzX2VjaG8gIiRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQiID4mNjsgfQotICBpZiB0ZXN0ICRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MT05HX0xPTkdfSU5UIDEiID4+Y29uZmRlZnMuaAotCi0gIGZpCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1bnNpZ25lZCBsb25nIGxvbmcgaW50IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB1bnNpZ25lZCBsb25nIGxvbmcgaW50Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAvKiBUZXN0IHByZXByb2Nlc3Nvci4gICovCi0gICAgICAjaWYgISAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKLSAgICAgICAgZXJyb3IgaW4gcHJlcHJvY2Vzc29yOwotICAgICAgI2VuZGlmCi0gICAgICAjaWYgISAoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gLTF1bGwpCi0gICAgICAgIGVycm9yIGluIHByZXByb2Nlc3NvcjsKLSAgICAgICNlbmRpZgotICAgICAgLyogVGVzdCBsaXRlcmFscy4gICovCi0gICAgICBsb25nIGxvbmcgaW50IGxsID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOwotICAgICAgbG9uZyBsb25nIGludCBubGwgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOwotICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGwgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTDsKLSAgICAgIC8qIFRlc3QgY29uc3RhbnQgZXhwcmVzc2lvbnMuICAgKi8KLSAgICAgIHR5cGVkZWYgaW50IGFbKCgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIDwgMCAmJiAwIDwgOTIyMzM3MjAzNjg1NDc3NTgwN2xsKQotCQkgICAgID8gMSA6IC0xKV07Ci0gICAgICB0eXBlZGVmIGludCBiWygxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAodW5zaWduZWQgbG9uZyBsb25nIGludCkgLTEKLQkJICAgICA/IDEgOiAtMSldOwotICAgICAgaW50IGkgPSA2MzsKLWludAotbWFpbiAoKQotewotLyogVGVzdCBhdmFpbGFiaWxpdHkgb2YgcnVudGltZSByb3V0aW5lcyBmb3Igc2hpZnQgYW5kIGRpdmlzaW9uLiAgKi8KLSAgICAgIGxvbmcgbG9uZyBpbnQgbGxtYXggPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7Ci0gICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbG1heCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsOwotICAgICAgcmV0dXJuICgobGwgPDwgNjMpIHwgKGxsID4+IDYzKSB8IChsbCA8IGkpIHwgKGxsID4gaSkKLQkgICAgICB8IChsbG1heCAvIGxsKSB8IChsbG1heCAlIGxsKQotCSAgICAgIHwgKHVsbCA8PCA2MykgfCAodWxsID4+IDYzKSB8ICh1bGwgPDwgaSkgfCAodWxsID4+IGkpCi0JICAgICAgfCAodWxsbWF4IC8gdWxsKSB8ICh1bGxtYXggJSB1bGwpKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludD15ZXMKLWVsc2UKLSAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY2OyB9Ci0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgMSIgPj5jb25mZGVmcy5oCi0KLSAgZmkKLQotCi0gIGlmIHRlc3QgeCRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50ID0geHllc3llczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0xPTkdfTE9ORyAxIiA+PmNvbmZkZWZzLmgKLQotICBmaQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW50dHlwZXMuaCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgaW50dHlwZXMuaC4uLiAiID4mNjsgfQotaWYgJHtnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotaW50Ci1tYWluICgpCi17Ci11aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xOyByZXR1cm4gIWk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzCi1lbHNlCi0gIGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCIgPiY1Ci0kYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oIiA+JjY7IH0KLSAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIDEKLV9BQ0VPRgotCi0gIGZpCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludC5oIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQuaC4uLiAiID4mNjsgfQotaWYgJHtnbF9jdl9oZWFkZXJfc3RkaW50X2grOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci1pbnQKLW1haW4gKCkKLXsKLXVpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBnbF9jdl9oZWFkZXJfc3RkaW50X2g9eWVzCi1lbHNlCi0gIGdsX2N2X2hlYWRlcl9zdGRpbnRfaD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oIiA+JjUKLSRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oIiA+JjY7IH0KLSAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggMQotX0FDRU9GCi0KLSAgZmkKLQotCi0gIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInB0cmRpZmZfdCIgImFjX2N2X3R5cGVfcHRyZGlmZl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcHRyZGlmZl90IiA9IHh5ZXM7IHRoZW4gOgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfUFRSRElGRl9UIDEKLV9BQ0VPRgotCi0KLWZpCi0KLQotCi0KLSAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50bWF4X3QiICJhY19jdl90eXBlX2ludG1heF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50bWF4X3QiID0geHllczsgdGhlbiA6Ci0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU5UTUFYX1QgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzIFwKLSAgICAgICAmJiBhY190eXBlPSdsb25nIGxvbmcgaW50JyBcCi0gICAgICAgfHwgYWNfdHlwZT0nbG9uZyBpbnQnCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgaW50bWF4X3QgJGFjX3R5cGUKLV9BQ0VPRgotCi1maQotCi0KLSAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2l6ZV90IiAiYWNfY3ZfdHlwZV9zaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaXplX3QiID0geHllczsgdGhlbiA6Ci0KLWVsc2UKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBzaXplX3QgdW5zaWduZWQgaW50Ci1fQUNFT0YKLQotZmkKLQotZmkKLQotCi1HTElCX1JFUT0yLjQwLjAKLQotCi0KLSAgICBHTElCX1JFUT0kR0xJQl9SRVEKLSAgaWYgdGVzdCAieCRHTElCX1JFUSIgPSAieCIKLSAgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2Ugc3BlY2lmeSBhIHJlcXVpcmVkIHZlcnNpb24gZm9yIEdMaWIgMi4wIiAiJExJTkVOTyIgNQotICBmaQotCi0KLQotICB3aGljaD0iZ2xpYi0yLjAgPj0gJEdMSUJfUkVRIGdvYmplY3QtMi4wIGdtb2R1bGUtbm8tZXhwb3J0LTIuMCIKLSAgICByZXF1aXJlZD0ibm8iCi0KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR0xJQiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR0xJQi4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR0xJQl9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HTElCX0NGTEFHUz0iJEdMSUJfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR0xJQl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkd2hpY2giIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHTElCX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HTElCX0xJQlM9IiRHTElCX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJHdoaWNoXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiR3aGljaCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HTElCX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEdMSUJfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBHTElCX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR0xJQl9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0dMSUI9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRHTElCX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdMSUJfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR0xJQl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0dMSUI9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRHTElCX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdMSUJfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR0xJQl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxzZQotCUdMSUJfQ0ZMQUdTPSRwa2dfY3ZfR0xJQl9DRkxBR1MKLQlHTElCX0xJQlM9JHBrZ19jdl9HTElCX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9HTElCPSJ5ZXMiCi0KLWZpCi0KLQotCi0gIGlmIHRlc3QgIngkSEFWRV9HTElCIiA9ICJ4bm8iOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIlRoaXMgcGFja2FnZSByZXF1aXJlcyBHTGliID49ICRHTElCX1JFUSB0byBjb21waWxlLiIgIiRMSU5FTk8iIDUKLSAgZmkKLQotICAgICAgICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19USFJFQURTX01BTkRBVE9SWSIKLQotICAgIGlmIHRlc3QgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JTk9SICUgMmAiID0gIngxIiAtYSAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlDUk8gJzwnIDkwYCIgPSAieDEiOyB0aGVuCi0gICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfRElTQUJMRV9ERVBSRUNBVEVEIgotICBmaQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nb2JqZWN0LWNhc3QtY2hlY2tzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzOyBlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz0kZW5hYmxldmFsCi1lbHNlCi0gIGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzPWF1dG8KLWZpCi0KLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzIiA9ICJ4YXV0byI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlOT1IgJSAyYCIgPSAieDEiIC1hICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAnPCcgOTBgIiA9ICJ4MSI7IHRoZW4KLSAgICAgIGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzPXllcwotICAgIGVsc2UKLSAgICAgIGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzPW5vCi0gICAgZmkKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzIiA9ICJ4bm8iOyB0aGVuCi0gICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfRElTQUJMRV9DQVNUX0NIRUNLUyIKLSAgZmkKLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2xpYi1hc3NlcnRzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2dsaWJfYXNzZXJ0cytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2dsaWJfYXNzZXJ0czsgZW5hYmxlX2dsaWJfYXNzZXJ0aW9ucz0kZW5hYmxldmFsCi1lbHNlCi0gIGVuYWJsZV9nbGliX2Fzc2VydGlvbnM9eWVzCi1maQotCi0KLSAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYl9hc3NlcnRpb25zIiA9ICJ4bm8iOyB0aGVuCi0gICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfRElTQUJMRV9BU1NFUlQiCi0gIGZpCi0KLSAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnbGliLWdlbm1hcnNoYWwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdsaWItZ2VubWFyc2hhbC4uLiAiID4mNjsgfQotICBpZiB0ZXN0ICJ4JEdMSUJfR0VOTUFSU0hBTCIgIT0gIngiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTElCX0dFTk1BUlNIQUwgKGZyb20gZW52aXJvbm1lbnQpIiA+JjUKLSRhc19lY2hvICIkR0xJQl9HRU5NQVJTSEFMIChmcm9tIGVudmlyb25tZW50KSIgPiY2OyB9Ci0gIGVsc2UKLSAgICBHTElCX0dFTk1BUlNIQUw9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2xpYl9nZW5tYXJzaGFsIGdsaWItMi4wYAotICAgIGlmICRHTElCX0dFTk1BUlNIQUwgLS12ZXJzaW9uIDI+L2Rldi9udWxsID4vZGV2L251bGw7IHRoZW4KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR0xJQl9HRU5NQVJTSEFMIChmcm9tIHBrZy1jb25maWcgcGF0aCkiID4mNQotJGFzX2VjaG8gIiRHTElCX0dFTk1BUlNIQUwgKGZyb20gcGtnLWNvbmZpZyBwYXRoKSIgPiY2OyB9Ci0gICAgZWxzZQotICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnbGliLWdlbm1hcnNoYWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdsaWItZ2VubWFyc2hhbDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfR0xJQl9HRU5NQVJTSEFMKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkR0xJQl9HRU5NQVJTSEFMIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0dMSUJfR0VOTUFSU0hBTD0iJEdMSUJfR0VOTUFSU0hBTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfR0xJQl9HRU5NQVJTSEFMPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX0dMSUJfR0VOTUFSU0hBTCIgJiYgYWNfY3ZfcGF0aF9HTElCX0dFTk1BUlNIQUw9ImdsaWItZ2VubWFyc2hhbCIKLSAgOzsKLWVzYWMKLWZpCi1HTElCX0dFTk1BUlNIQUw9JGFjX2N2X3BhdGhfR0xJQl9HRU5NQVJTSEFMCi1pZiB0ZXN0IC1uICIkR0xJQl9HRU5NQVJTSEFMIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdMSUJfR0VOTUFSU0hBTCIgPiY1Ci0kYXNfZWNobyAiJEdMSUJfR0VOTUFSU0hBTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdMSUJfR0VOTUFSU0hBTCIgPiY1Ci0kYXNfZWNobyAiJEdMSUJfR0VOTUFSU0hBTCIgPiY2OyB9Ci0gICAgZmkKLSAgZmkKLSAgaWYgISAkR0xJQl9HRU5NQVJTSEFMIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCA+L2Rldi9udWxsOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkR0xJQl9HRU5NQVJTSEFMIGRvZXMgbm90IHNlZW0gdG8gd29yayEiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJEdMSUJfR0VOTUFSU0hBTCBkb2VzIG5vdCBzZWVtIHRvIHdvcmshIiA+JjI7fQotICBmaQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnbGliLW1rZW51bXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdsaWItbWtlbnVtcy4uLiAiID4mNjsgfQotICBpZiB0ZXN0ICJ4JEdMSUJfTUtFTlVNUyIgIT0gIngiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTElCX01LRU5VTVMgKGZyb20gZW52aXJvbm1lbnQpIiA+JjUKLSRhc19lY2hvICIkR0xJQl9NS0VOVU1TIChmcm9tIGVudmlyb25tZW50KSIgPiY2OyB9Ci0gIGVsc2UKLSAgICAgICAgR0xJQl9NS0VOVU1TPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdsaWJfbWtlbnVtcyBnbGliLTIuMGAKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdMSUJfTUtFTlVNUyIgPiY1Ci0kYXNfZWNobyAiJEdMSUJfTUtFTlVNUyIgPiY2OyB9Ci0gIGZpCi0gIGlmICEgJEdMSUJfTUtFTlVNUyAtLXZlcnNpb24gMj4vZGV2L251bGwgPi9kZXYvbnVsbDsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJEdMSUJfTUtFTlVNUyBkb2VzIG5vdCBzZWVtIHRvIHdvcmshIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRHTElCX01LRU5VTVMgZG9lcyBub3Qgc2VlbSB0byB3b3JrISIgPiYyO30KLSAgZmkKLQotCi0KLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHSU8iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdJTy4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR0lPX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dJT19DRkxBR1M9IiRHSU9fQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ2lvLTIuMCA+PSBcJEdMSUJfUkVRXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdpby0yLjAgPj0gJEdMSUJfUkVRIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dJT19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJnaW8tMi4wID49ICRHTElCX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdJT19MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfR0lPX0xJQlM9IiRHSU9fTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdpby0yLjAgPj0gXCRHTElCX1JFUVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJnaW8tMi4wID49ICRHTElCX1JFUSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HSU9fTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJnaW8tMi4wID49ICRHTElCX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBHSU9fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJnaW8tMi4wID49ICRHTElCX1JFUSJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEdJT19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImdpby0yLjAgPj0gJEdMSUJfUkVRImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR0lPX1BLR19FUlJPUlMiID4mNQotCi0JYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzIChnaW8tMi4wID49ICRHTElCX1JFUSkgd2VyZSBub3QgbWV0OgotCi0kR0lPX1BLR19FUlJPUlMKLQotQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91Ci1pbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdJT19DRkxBR1MKLWFuZCBHSU9fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCi1TZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KLSIgIiRMSU5FTk8iIDUKLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKLWlzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKLXBhdGggdG8gcGtnLWNvbmZpZy4KLQotQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHSU9fQ0ZMQUdTCi1hbmQgR0lPX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgotU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCi0KLVRvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWVsc2UKLQlHSU9fQ0ZMQUdTPSRwa2dfY3ZfR0lPX0NGTEFHUwotCUdJT19MSUJTPSRwa2dfY3ZfR0lPX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQk6Ci1maQotICBpZiB0ZXN0ICJ4JEhBVkVfR0lPIiA9ICJ4bm8iOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIlRoaXMgcGFja2FnZSByZXF1aXJlcyBHSU8gPj0gJEdMSUJfUkVRIHRvIGNvbXBpbGUuIiAiJExJTkVOTyIgNQotICBmaQotCi0gIEdJT19NT0RVTEVfRElSPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1naW9tb2R1bGVkaXIgZ2lvLTIuMGAiCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR0lPX01PRFVMRV9ESVIgIiRHSU9fTU9EVUxFX0RJUiIKLV9BQ0VPRgotCi0gIEdJT19MSUJESVI9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWxpYmRpciBnaW8tMi4wYCIKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHSU9fTElCRElSICIkR0lPX0xJQkRJUiIKLV9BQ0VPRgotCi0gIEdJT19QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnaW8tMi4wYCIKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHSU9fUFJFRklYICIkR0lPX1BSRUZJWCIKLV9BQ0VPRgotCi0KLQotCi0KLQotCi1HTElCX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdsaWItMi4wYCIKLQotCi1IQVZFX0dUSz1ubwotR1RLX1JFUT0zLjEwCi1pZiB0ZXN0ICJ4JEJVSUxEX0VYQU1QTEVTIiA9ICJ4eWVzIjsgdGhlbgotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHVEsiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdUSy4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR1RLX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dUS19DRkxBR1M9IiRHVEtfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ3RrKy0zLjAgPj0gXCRHVEtfUkVRXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImd0aystMy4wID49ICRHVEtfUkVRIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dUS19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJndGsrLTMuMCA+PSAkR1RLX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdUS19MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfR1RLX0xJQlM9IiRHVEtfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImd0aystMy4wID49IFwkR1RLX1JFUVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJndGsrLTMuMCA+PSAkR1RLX1JFUSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HVEtfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJndGsrLTMuMCA+PSAkR1RLX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBHVEtfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJndGsrLTMuMCA+PSAkR1RLX1JFUSJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEdUS19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImd0aystMy4wID49ICRHVEtfUkVRImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR1RLX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgSEFWRV9HVEs9bm8KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQlIQVZFX0dUSz1ubwotZWxzZQotCUdUS19DRkxBR1M9JHBrZ19jdl9HVEtfQ0ZMQUdTCi0JR1RLX0xJQlM9JHBrZ19jdl9HVEtfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCUhBVkVfR1RLPXllcwotZmkKLQotCi1maQotIGlmIHRlc3QgIngkSEFWRV9HVEsiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfR1RLX1RSVUU9Ci0gIEhBVkVfR1RLX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0dUS19UUlVFPScjJwotICBIQVZFX0dUS19GQUxTRT0KLWZpCi0KLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBVTldJTkQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFVOV0lORC4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkVU5XSU5EX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1VOV0lORF9DRkxBR1M9IiRVTldJTkRfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwibGlidW53aW5kXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImxpYnVud2luZCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9VTldJTkRfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAibGlidW53aW5kIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkVU5XSU5EX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9VTldJTkRfTElCUz0iJFVOV0lORF9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwibGlidW53aW5kXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImxpYnVud2luZCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9VTldJTkRfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJsaWJ1bndpbmQiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgVU5XSU5EX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAibGlidW53aW5kImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgVU5XSU5EX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAibGlidW53aW5kImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkVU5XSU5EX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgSEFWRV9VTldJTkQ9bm8KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQlIQVZFX1VOV0lORD1ubwotZWxzZQotCVVOV0lORF9DRkxBR1M9JHBrZ19jdl9VTldJTkRfQ0ZMQUdTCi0JVU5XSU5EX0xJQlM9JHBrZ19jdl9VTldJTkRfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCUhBVkVfVU5XSU5EPXllcwotZmkKLQotYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiYmFja3RyYWNlIiAiYWNfY3ZfZnVuY19iYWNrdHJhY2UiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfYmFja3RyYWNlIiA9IHh5ZXM7IHRoZW4gOgotCi0gIGZvciBhY19oZWFkZXIgaW4gZXhlY2luZm8uaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZXhlY2luZm8uaCIgImFjX2N2X2hlYWRlcl9leGVjaW5mb19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9leGVjaW5mb19oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfRVhFQ0lORk9fSCAxCi1fQUNFT0YKLQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0JBQ0tUUkFDRSAxIiA+PmNvbmZkZWZzLmgKLQotCi1maQotCi1kb25lCi0KLQotZmkKLQotCi1pZiB0ZXN0ICJ4JEhBVkVfVU5XSU5EIiA9ICJ4eWVzIjsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1VOV0lORCAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNoZWNrIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2NoZWNrK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfY2hlY2s7Ci0gICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBCVUlMRF9DSEVDSz15ZXMgOzsKLSAgICAgIG5vKSAgQlVJTERfQ0hFQ0s9bm8gOzsKLSAgICAgICopICAgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1jaGVjayIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi0KLWVsc2UKLQotICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBtaW5ndyogfCBtc3ZjKiB8IG1rcyopIEJVSUxEX0NIRUNLPW5vIDs7Ci0gICAgICAqKSBCVUlMRF9DSEVDSz15ZXMgOzsKLSAgICBlc2FjCi0KLWZpCi0KLSBpZiB0ZXN0ICJ4JEJVSUxEX0NIRUNLIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NIRUNLX1RSVUU9Ci0gIEhBVkVfQ0hFQ0tfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ0hFQ0tfVFJVRT0nIycKLSAgSEFWRV9DSEVDS19GQUxTRT0KLWZpCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1lbW9yeS1hbGlnbm1lbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21lbW9yeV9hbGlnbm1lbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX21lbW9yeV9hbGlnbm1lbnQ7Ci0gICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIgotICAgIHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgTUVNT1JZX0FMSUdOTUVOVCAzMiIgPj5jb25mZGVmcy5oCi0KLSAgICBlbHNlCi0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICBtYWxsb2MpCi0kYXNfZWNobyAiI2RlZmluZSBNRU1PUllfQUxJR05NRU5UX01BTExPQyAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgICAgICBwYWdlc2l6ZSkKLSRhc19lY2hvICIjZGVmaW5lIE1FTU9SWV9BTElHTk1FTlRfUEFHRVNJWkUgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICAgICAgKikKLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTUVNT1JZX0FMSUdOTUVOVCAke3dpdGh2YWx9Ci1fQUNFT0YKLSA7OwotICAgICAgZXNhYwotICAgIGZpCi0KLWVsc2UKLQotCi0kYXNfZWNobyAiI2RlZmluZSBNRU1PUllfQUxJR05NRU5UX01BTExPQyAxIiA+PmNvbmZkZWZzLmgKLQotCi0KLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLUJzeW1ib2xpYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9Cc3ltYm9saWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9Cc3ltYm9saWM7Ci1lbHNlCi0gIFNBVkVEX0xERkxBR1M9IiR7TERGTEFHU30iIFNBVkVEX0xJQlM9IiR7TElCU30iCi0gICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtQnN5bWJvbGljLWZ1bmN0aW9ucyBsaW5rZXIgZmxhZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgLUJzeW1ib2xpYy1mdW5jdGlvbnMgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KLSAgICAgICAgICAgICAgIExERkxBR1M9LVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zCi0gICAgICAgICAgICAgICBMSUJTPQotICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiAwCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9Cc3ltYm9saWM9eWVzCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX0JzeW1ib2xpYz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgICAgICBMREZMQUdTPSIke1NBVkVEX0xERkxBR1N9IiBMSUJTPSIke1NBVkVEX0xJQlN9IgotZmkKLQotCi0KLQotR1NUX0xJQ0VOU0U9IkxHUEwiCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX0xJQ0VOU0UgIiRHU1RfTElDRU5TRSIKLV9BQ0VPRgotCi0KLQotCi0gIEVYUF9WQVI9TElCRElSCi0gIEZST01fVkFSPSRsaWJkaXIKLQotICAgIHByZWZpeF9zYXZlPSRwcmVmaXgKLSAgZXhlY19wcmVmaXhfc2F2ZT0kZXhlY19wcmVmaXgKLQotICAgIGlmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KLSAgICBwcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKLSAgZmkKLSAgICBpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KLSAgICBleGVjX3ByZWZpeD0kcHJlZml4Ci0gIGZpCi0KLSAgZnVsbF92YXI9IiRGUk9NX1ZBUiIKLSAgICB3aGlsZSB0cnVlOyBkbwotICAgIG5ld19mdWxsX3Zhcj0iYGV2YWwgZWNobyAkZnVsbF92YXJgIgotICAgIGlmIHRlc3QgIngkbmV3X2Z1bGxfdmFyIiA9ICJ4JGZ1bGxfdmFyIjsgdGhlbiBicmVhazsgZmkKLSAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCi0gIGRvbmUKLQotICAgIGZ1bGxfdmFyPSRuZXdfZnVsbF92YXIKLSAgTElCRElSPSIkZnVsbF92YXIiCi0KLQotICAgIHByZWZpeD0kcHJlZml4X3NhdmUKLSAgZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4X3NhdmUKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIExJQkRJUiAiJExJQkRJUiIKLV9BQ0VPRgotCi0KLSAgRVhQX1ZBUj1EQVRBRElSCi0gIEZST01fVkFSPSRkYXRhZGlyCi0KLSAgICBwcmVmaXhfc2F2ZT0kcHJlZml4Ci0gIGV4ZWNfcHJlZml4X3NhdmU9JGV4ZWNfcHJlZml4Ci0KLSAgICBpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCi0gIGZpCi0gICAgaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgZXhlY19wcmVmaXg9JHByZWZpeAotICBmaQotCi0gIGZ1bGxfdmFyPSIkRlJPTV9WQVIiCi0gICAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBuZXdfZnVsbF92YXI9ImBldmFsIGVjaG8gJGZ1bGxfdmFyYCIKLSAgICBpZiB0ZXN0ICJ4JG5ld19mdWxsX3ZhciIgPSAieCRmdWxsX3ZhciI7IHRoZW4gYnJlYWs7IGZpCi0gICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgotICBkb25lCi0KLSAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCi0gIERBVEFESVI9IiRmdWxsX3ZhciIKLQotCi0gICAgcHJlZml4PSRwcmVmaXhfc2F2ZQotICBleGVjX3ByZWZpeD0kZXhlY19wcmVmaXhfc2F2ZQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX0RBVEFESVIgIiREQVRBRElSIgotX0FDRU9GCi0KLQotCi0KLSAgRVhQX1ZBUj1QTFVHSU5ESVIKLSAgRlJPTV9WQVI9JHtsaWJkaXJ9L2dzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OCi0KLSAgICBwcmVmaXhfc2F2ZT0kcHJlZml4Ci0gIGV4ZWNfcHJlZml4X3NhdmU9JGV4ZWNfcHJlZml4Ci0KLSAgICBpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCi0gIGZpCi0gICAgaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgZXhlY19wcmVmaXg9JHByZWZpeAotICBmaQotCi0gIGZ1bGxfdmFyPSIkRlJPTV9WQVIiCi0gICAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBuZXdfZnVsbF92YXI9ImBldmFsIGVjaG8gJGZ1bGxfdmFyYCIKLSAgICBpZiB0ZXN0ICJ4JG5ld19mdWxsX3ZhciIgPSAieCRmdWxsX3ZhciI7IHRoZW4gYnJlYWs7IGZpCi0gICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgotICBkb25lCi0KLSAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCi0gIFBMVUdJTkRJUj0iJGZ1bGxfdmFyIgotCi0KLSAgICBwcmVmaXg9JHByZWZpeF9zYXZlCi0gIGV4ZWNfcHJlZml4PSRleGVjX3ByZWZpeF9zYXZlCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQTFVHSU5ESVIgIiRQTFVHSU5ESVIiCi1fQUNFT0YKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRQTFVHSU5ESVIgYXMgdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRQTFVHSU5ESVIgYXMgdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIiA+JjY7fQotCi0gICAgcGx1Z2luZGlyPSJcJChsaWJkaXIpL2dzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OIgotCi0KLQotTk9fV0FSTklOR1M9IiIKLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX0dTVF9ERUJVR30iID0gInh5ZXMiOyB0aGVuCi0gIE5PX1dBUk5JTkdTPSItV25vLXVudXNlZCIKLWZpCi0KLQotCi0KLQotICBXQVJOSU5HX0NGTEFHUz0iIgotICBFUlJPUl9DRkxBR1M9IiIKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XYWxsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV2FsbC4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLVdhbGwiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV2FsbCIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudC4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XdmxhIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV3ZsYS4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLVd2bGEiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV3ZsYSIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XcG9pbnRlci1hcml0aCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdwb2ludGVyLWFyaXRoLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAtV3BvaW50ZXItYXJpdGgiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV3BvaW50ZXItYXJpdGgiCi0gICAgdHJ1ZQotICBlbHNlCi0KLSAgICB0cnVlCi0gIGZpCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1Ci0kYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQotCi0KLSAgICBpZiB0ZXN0ICJ4JEZBVEFMX1dBUk5JTkdTIiAhPSAieG5vIgotICB0aGVuCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdlcnJvciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdlcnJvci4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciIKLQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLQotICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KLSAgICBFUlJPUl9DRkxBR1M9IiRFUlJPUl9DRkxBR1MgLVdlcnJvciIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLSAgZmkKLQotICBpZiB0ZXN0ICJ4LVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3JlZHVuZGFudC1kZWNscyAtV3VuZGVmIC1Xd3JpdGUtc3RyaW5ncyAtV2Zvcm1hdC1ub25saXRlcmFsIC1XZm9ybWF0LXNlY3VyaXR5IC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdpbml0LXNlbGYgLVdtaXNzaW5nLWluY2x1ZGUtZGlycyAtV2FkZHJlc3MgLVdhZ2dyZWdhdGUtcmV0dXJuIC1Xbm8tbXVsdGljaGFyIC1XbmVzdGVkLWV4dGVybnMgJE5PX1dBUk5JTkdTIiAhPSAieCIKLSAgdGhlbgotICAgIFVOU1VQUE9SVEVEPSIiCi0gICAgbGlzdD0iLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3JlZHVuZGFudC1kZWNscyAtV3VuZGVmIC1Xd3JpdGUtc3RyaW5ncyAtV2Zvcm1hdC1ub25saXRlcmFsIC1XZm9ybWF0LXNlY3VyaXR5IC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdpbml0LXNlbGYgLVdtaXNzaW5nLWluY2x1ZGUtZGlycyAtV2FkZHJlc3MgLVdhZ2dyZWdhdGUtcmV0dXJuIC1Xbm8tbXVsdGljaGFyIC1XbmVzdGVkLWV4dGVybnMgJE5PX1dBUk5JTkdTIgotICAgIGZvciBlYWNoIGluICRsaXN0Ci0gICAgZG8KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAkZWFjaCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgJGVhY2guLi4gIiA+JjY7IH0KLQotICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTICRlYWNoIgotCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBmbGFnX29rPXllcwotZWxzZQotICBmbGFnX29rPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgJGVhY2giCi0gICAgdHJ1ZQotICBlbHNlCi0gICAgVU5TVVBQT1JURUQ9IiRVTlNVUFBPUlRFRCAkZWFjaCIKLSAgICB0cnVlCi0gIGZpCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1Ci0kYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQotCi0gICAgZG9uZQotICAgIGlmIHRlc3QgIlgkVU5TVVBQT1JURUQiICE9IFggOyB0aGVuCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVuc3VwcG9ydGVkIGNvbXBpbGVyIGZsYWdzOiAkVU5TVVBQT1JURUQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogdW5zdXBwb3J0ZWQgY29tcGlsZXIgZmxhZ3M6ICRVTlNVUFBPUlRFRCIgPiY2O30KLSAgICBmaQotICBmaQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHNldCBXQVJOSU5HX0NGTEFHUyB0byAkV0FSTklOR19DRkxBR1MiID4mNQotJGFzX2VjaG8gIiRhc19tZTogc2V0IFdBUk5JTkdfQ0ZMQUdTIHRvICRXQVJOSU5HX0NGTEFHUyIgPiY2O30KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBzZXQgRVJST1JfQ0ZMQUdTIHRvICRFUlJPUl9DRkxBR1MiID4mNQotJGFzX2VjaG8gIiRhc19tZTogc2V0IEVSUk9SX0NGTEFHUyB0byAkRVJST1JfQ0ZMQUdTIiA+JjY7fQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV25vLWZvcm1hdC1ub25saXRlcmFsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV25vLWZvcm1hdC1ub25saXRlcmFsLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAtV25vLWZvcm1hdC1ub25saXRlcmFsIgotCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBmbGFnX29rPXllcwotZWxzZQotICBmbGFnX29rPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgIFBSSU5URl9DRkxBR1M9Ii1Xbm8tZm9ybWF0LW5vbmxpdGVyYWwiCi0gICAgdHJ1ZQotICBlbHNlCi0KLSAgICB0cnVlCi0gIGZpCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1Ci0kYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQotCi0KLQotCi0gICAgICBpZiB0ZXN0ICJ4JEdTVF9HSVQiID0gInh5ZXMiOyB0aGVuCi0gICAgR1NUX0xFVkVMX0RFRkFVTFQ9R1NUX0xFVkVMX0VSUk9SCi0gIGVsc2UKLSAgICBHU1RfTEVWRUxfREVGQVVMVD1HU1RfTEVWRUxfTk9ORQotICBmaQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEdTVF9MRVZFTF9ERUZBVUxUICRHU1RfTEVWRUxfREVGQVVMVAotX0FDRU9GCi0KLQotCi0KLQotCi1pZiB0ZXN0ICJ4JFVTRV9ERUJVRyIgPSB4eWVzOyB0aGVuCi0gICBQUk9GSUxFX0NGTEFHUz0iLWciCi1maQotCi0KLSMgR1NUX0RJU0FCTEVfREVQUkVDQVRFRDogaGlkZSB0aGUgdmlzaWJpbGl0eSBvZiBkZXByZWNhdGVkCi0jIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgQVBJIHRoYXQgZ3N0cmVhbWVyIHVzZXMKLSMgR1NUX1JFTU9WRV9ERVBSRUNBVEVEOiBkb24ndCBjb21waWxlIGRlcHJlY2F0ZWQgZnVuY3Rpb25hbGl0eSAoYnJlYWtzIEFCSSkKLWlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngxIjsgdGhlbgotICAgIERFUFJFQ0FURURfQ0ZMQUdTPSItREdTVF9ESVNBQkxFX0RFUFJFQ0FURUQiCi1lbHNlCi0gIERFUFJFQ0FURURfQ0ZMQUdTPSIiCi1maQotCi0KLUdTVF9PUFRJT05fQ0ZMQUdTPSJcJChXQVJOSU5HX0NGTEFHUykgXCQoREVCVUdfQ0ZMQUdTKSBcJChQUk9GSUxFX0NGTEFHUykgXCQoR0NPVl9DRkxBR1MpIFwkKE9QVF9DRkxBR1MpIFwkKERFUFJFQ0FURURfQ0ZMQUdTKSIKLUdTVF9PUFRJT05fQ1hYRkxBR1M9IlwkKFdBUk5JTkdfQ1hYRkxBR1MpIFwkKEVSUk9SX0NYWEZMQUdTKSBcJChERUJVR19DRkxBR1MpIFwkKFBST0ZJTEVfQ0ZMQUdTKSBcJChHQ09WX0NGTEFHUykgXCQoT1BUX0NGTEFHUykgXCQoREVQUkVDQVRFRF9DRkxBR1MpIgotR1NUX09QVElPTl9DRkxBR1M9IiRHU1RfT1BUSU9OX0NGTEFHUyIKLUdTVF9PUFRJT05fQ1hYRkxBR1M9IiRHU1RfT1BUSU9OX0NYWEZMQUdTIgotCi0KLQotR1NUX0FMTF9DWFhGTEFHUz0iLUlcJCh0b3Bfc3JjZGlyKS9saWJzIC1JXCQodG9wX3NyY2RpcikgLUlcJCh0b3BfYnVpbGRkaXIpL2xpYnMgLUlcJCh0b3BfYnVpbGRkaXIpICRHTElCX0NGTEFHUyBcJChHTElCX0VYVFJBX0NGTEFHUykgJFhNTF9DRkxBR1MgXCQoR1NUX09QVElPTl9DWFhGTEFHUykgXCQoRVJST1JfQ1hYRkxBR1MpIgotR1NUX0FMTF9DRkxBR1M9Ii1JXCQodG9wX3NyY2RpcikvbGlicyAtSVwkKHRvcF9zcmNkaXIpIC1JXCQodG9wX2J1aWxkZGlyKS9saWJzIC1JXCQodG9wX2J1aWxkZGlyKSAkR0xJQl9DRkxBR1MgXCQoR0xJQl9FWFRSQV9DRkxBR1MpICRYTUxfQ0ZMQUdTIFwkKEdTVF9PUFRJT05fQ0ZMQUdTKSBcJChFUlJPUl9DRkxBR1MpIgotCi1HU1RfQUxMX0xJQlM9IiRHTElCX0xJQlMgJExUTElCSU5UTCBcJChHQ09WX0xJQlMpIgotCi1HU1RfQUxMX0xERkxBR1M9Ii1uby11bmRlZmluZWQiCi1pZiB0ZXN0ICJ4JHtlbmFibGVfQnN5bWJvbGljfSIgPSAieHllcyI7IHRoZW4KLSAgR1NUX0FMTF9MREZMQUdTPSIkR1NUX0FMTF9MREZMQUdTIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyIKLWZpCi0KLQotCi0KLQotCi1HU1RfTElCX0xERkxBR1M9Ii1leHBvcnQtc3ltYm9scy1yZWdleCBcXl8/XChnc3RfXHxHc3RcfEdTVF9cKS4qIgotCi0KLUdTVF9PQkpfQ0ZMQUdTPSJcJChHU1RfQUxMX0NGTEFHUykgJEdTVF9PQkpfU1RBVElDX0NGTEFHUyIKLUdTVF9PQkpfQ1hYRkxBR1M9IlwkKEdTVF9BTExfQ1hYRkxBR1MpICRHU1RfT0JKX1NUQVRJQ19DRkxBR1MiCi1HU1RfT0JKX0xJQlM9IlwkKHRvcF9idWlsZGRpcikvZ3N0L2xpYmdzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OLmxhIFwkKEdTVF9BTExfTElCUykiCi0KLQotCi0KLUdTVF9QTFVHSU5fTERGTEFHUz0iLW1vZHVsZSAtYXZvaWQtdmVyc2lvbiAtZXhwb3J0LXN5bWJvbHMtcmVnZXggJ15fKmdzdF9wbHVnaW5fLionICRHU1RfQUxMX0xERkxBR1MiCi1HU1RfUExVR0lOX0xERkxBR1M9IiRHU1RfUExVR0lOX0xERkxBR1MiCi0KLQotCi0gIEVYUF9WQVI9R1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRAotICBGUk9NX1ZBUj0ke2xpYmV4ZWNkaXJ9L2dzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OL2dzdC1wbHVnaW4tc2Nhbm5lcgotCi0gICAgcHJlZml4X3NhdmU9JHByZWZpeAotICBleGVjX3ByZWZpeF9zYXZlPSRleGVjX3ByZWZpeAotCi0gICAgaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgotICAgIHByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgotICBmaQotICAgIGlmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgotICAgIGV4ZWNfcHJlZml4PSRwcmVmaXgKLSAgZmkKLQotICBmdWxsX3Zhcj0iJEZST01fVkFSIgotICAgIHdoaWxlIHRydWU7IGRvCi0gICAgbmV3X2Z1bGxfdmFyPSJgZXZhbCBlY2hvICRmdWxsX3ZhcmAiCi0gICAgaWYgdGVzdCAieCRuZXdfZnVsbF92YXIiID0gIngkZnVsbF92YXIiOyB0aGVuIGJyZWFrOyBmaQotICAgIGZ1bGxfdmFyPSRuZXdfZnVsbF92YXIKLSAgZG9uZQotCi0gICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgotICBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEPSIkZnVsbF92YXIiCi0KLQotICAgIHByZWZpeD0kcHJlZml4X3NhdmUKLSAgZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4X3NhdmUKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgIiRHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEIgotX0FDRU9GCi0KLQotCi0KLSAgRVhQX1ZBUj1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQKLSAgRlJPTV9WQVI9JHtsaWJleGVjZGlyfS9nc3RyZWFtZXItJEdTVF9BUElfVkVSU0lPTi9nc3QtcHRwLWhlbHBlcgotCi0gICAgcHJlZml4X3NhdmU9JHByZWZpeAotICBleGVjX3ByZWZpeF9zYXZlPSRleGVjX3ByZWZpeAotCi0gICAgaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgotICAgIHByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgotICBmaQotICAgIGlmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgotICAgIGV4ZWNfcHJlZml4PSRwcmVmaXgKLSAgZmkKLQotICBmdWxsX3Zhcj0iJEZST01fVkFSIgotICAgIHdoaWxlIHRydWU7IGRvCi0gICAgbmV3X2Z1bGxfdmFyPSJgZXZhbCBlY2hvICRmdWxsX3ZhcmAiCi0gICAgaWYgdGVzdCAieCRuZXdfZnVsbF92YXIiID0gIngkZnVsbF92YXIiOyB0aGVuIGJyZWFrOyBmaQotICAgIGZ1bGxfdmFyPSRuZXdfZnVsbF92YXIKLSAgZG9uZQotCi0gICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgotICBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQ9IiRmdWxsX3ZhciIKLQotCi0gICAgcHJlZml4PSRwcmVmaXhfc2F2ZQotICBleGVjX3ByZWZpeD0kZXhlY19wcmVmaXhfc2F2ZQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEICIkR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEIgotX0FDRU9GCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogUnVubmluZyBjaGVjayB1bml0IHRlc3QgZnJhbWV3b3JrIGNoZWNrcyBub3cuLi4iID4mNQotJGFzX2VjaG8gIiRhc19tZTogUnVubmluZyBjaGVjayB1bml0IHRlc3QgZnJhbWV3b3JrIGNoZWNrcyBub3cuLi4iID4mNjt9Ci0KLUNIRUNLX01BSk9SX1ZFUlNJT049MAotQ0hFQ0tfTUlOT1JfVkVSU0lPTj05Ci1DSEVDS19NSUNST19WRVJTSU9OPTE0Ci1DSEVDS19WRVJTSU9OPSRDSEVDS19NQUpPUl9WRVJTSU9OLiRDSEVDS19NSU5PUl9WRVJTSU9OLiRDSEVDS19NSUNST19WRVJTSU9OCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHVuaXN0ZC5oIHN5cy93YWl0Lmggc3lzL3RpbWUuaAotZG8gOgotICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gbG9jYWx0aW1lX3IKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAibG9jYWx0aW1lX3IiICJhY19jdl9mdW5jX2xvY2FsdGltZV9yIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2xvY2FsdGltZV9yIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTE9DQUxUSU1FX1IgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gZ2V0cGlkIF9nZXRwaWQKLWRvIDoKLSAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInN0cmR1cCIgImFjX2N2X2hhdmVfZGVjbF9zdHJkdXAiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N0cmR1cCIgPSB4eWVzOyB0aGVuIDoKLSAgYWNfaGF2ZV9kZWNsPTEKLWVsc2UKLSAgYWNfaGF2ZV9kZWNsPTAKLWZpCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX1NUUkRVUCAkYWNfaGF2ZV9kZWNsCi1fQUNFT0YKLQotZm9yIGFjX2Z1bmMgaW4gX3N0cmR1cAotZG8gOgotICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJfc3RyZHVwIiAiYWNfY3ZfZnVuY19fc3RyZHVwIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX19zdHJkdXAiID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9fU1RSRFVQIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWZvciBhY19mdW5jIGluIG1rc3RlbXAKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAibWtzdGVtcCIgImFjX2N2X2Z1bmNfbWtzdGVtcCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19ta3N0ZW1wIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTUtTVEVNUCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiBmb3JrCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImZvcmsiICJhY19jdl9mdW5jX2ZvcmsiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9yayIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0ZPUksgMQotX0FDRU9GCi0gSEFWRV9GT1JLPTEKLWVsc2UKLSAgSEFWRV9GT1JLPTAKLWZpCi1kb25lCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHRpbWUuaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidGltZS5oIiAiYWNfY3ZfaGVhZGVyX3RpbWVfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGltZV9oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVElNRV9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLWFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImFsYXJtIiAiYWNfY3ZfaGF2ZV9kZWNsX2FsYXJtIiAiCi0gICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpZiBIQVZFX1RJTUVfSAotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZiAvKiBIQVZFX1RJTUVfSCAqLwotCi0iCi1pZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9hbGFybSIgPSB4eWVzOyB0aGVuIDoKLSAgYWNfaGF2ZV9kZWNsPTEKLWVsc2UKLSAgYWNfaGF2ZV9kZWNsPTAKLWZpCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ERUNMX0FMQVJNICRhY19oYXZlX2RlY2wKLV9BQ0VPRgotYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAibG9jYWx0aW1lX3IiICJhY19jdl9oYXZlX2RlY2xfbG9jYWx0aW1lX3IiICIKLSAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAotI2lmIEhBVkVfVElNRV9ICi0jaW5jbHVkZSA8dGltZS5oPgotI2VuZGlmIC8qIEhBVkVfVElNRV9IICovCi0KLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2xvY2FsdGltZV9yIiA9IHh5ZXM7IHRoZW4gOgotICBhY19oYXZlX2RlY2w9MQotZWxzZQotICBhY19oYXZlX2RlY2w9MAotZmkKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfTE9DQUxUSU1FX1IgJGFjX2hhdmVfZGVjbAotX0FDRU9GCi1hY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzdHJzaWduYWwiICJhY19jdl9oYXZlX2RlY2xfc3Ryc2lnbmFsIiAiCi0gICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpZiBIQVZFX1RJTUVfSAotI2luY2x1ZGUgPHRpbWUuaD4KLSNlbmRpZiAvKiBIQVZFX1RJTUVfSCAqLwotCi0iCi1pZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zdHJzaWduYWwiID0geHllczsgdGhlbiA6Ci0gIGFjX2hhdmVfZGVjbD0xCi1lbHNlCi0gIGFjX2hhdmVfZGVjbD0wCi1maQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9TVFJTSUdOQUwgJGFjX2hhdmVfZGVjbAotX0FDRU9GCi0KLWZvciBhY19mdW5jIGluIGFsYXJtIHNldGl0aW1lciBzdHJzaWduYWwKLWRvIDoKLSAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0gaWYgdGVzdCAieCRhY19jdl9mdW5jX2FsYXJtIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0FMQVJNX1RSVUU9Ci0gIEhBVkVfQUxBUk1fRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQUxBUk1fVFJVRT0nIycKLSAgSEFWRV9BTEFSTV9GQUxTRT0KLWZpCi0KLSBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbG9jYWx0aW1lX3IiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfTE9DQUxUSU1FX1JfVFJVRT0KLSAgSEFWRV9MT0NBTFRJTUVfUl9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9MT0NBTFRJTUVfUl9UUlVFPScjJwotICBIQVZFX0xPQ0FMVElNRV9SX0ZBTFNFPQotZmkKLQotIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJzaWduYWwiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfU1RSU0lHTkFMX1RSVUU9Ci0gIEhBVkVfU1RSU0lHTkFMX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX1NUUlNJR05BTF9UUlVFPScjJwotICBIQVZFX1NUUlNJR05BTF9GQUxTRT0KLWZpCi0KLQotYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdGltZXNwZWMiICJ0dl9zZWMiICJhY19jdl9tZW1iZXJfc3RydWN0X3RpbWVzcGVjX3R2X3NlYyIgIgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpZiBIQVZFX1BUSFJFQUQKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZW5kaWYgLyogSEFWRV9QVEhSRUFEICovCi0KLSIKLWlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF90aW1lc3BlY190dl9zZWMiID0geHllczsgdGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVNQRUNfVFZfU0VDIDEKLV9BQ0VPRgotCi0KLWVsc2UKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBTVFJVQ1RfVElNRVNQRUNfREVGSU5JVElPTl9NSVNTSU5HIDEKLV9BQ0VPRgotCi1maQotYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdGltZXNwZWMiICJ0dl9uc2VjIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF90aW1lc3BlY190dl9uc2VjIiAiCi0jaW5jbHVkZSA8dGltZS5oPgotI2lmIEhBVkVfUFRIUkVBRAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KLQotIgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3RpbWVzcGVjX3R2X25zZWMiID0geHllczsgdGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVFJVQ1RfVElNRVNQRUNfVFZfTlNFQyAxCi1fQUNFT0YKLQotCi1lbHNlCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU1RSVUNUX1RJTUVTUEVDX0RFRklOSVRJT05fTUlTU0lORyAxCi1fQUNFT0YKLQotZmkKLQotYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXRpbWVyc3BlYyIgIml0X2ludGVydmFsIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pdGltZXJzcGVjX2l0X2ludGVydmFsIiAiCi0jaW5jbHVkZSA8dGltZS5oPgotI2lmIEhBVkVfUFRIUkVBRAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KLQotIgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2l0aW1lcnNwZWNfaXRfaW50ZXJ2YWwiID0geHllczsgdGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVFJVQ1RfSVRJTUVSU1BFQ19JVF9JTlRFUlZBTCAxCi1fQUNFT0YKLQotCi1lbHNlCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU1RSVUNUX0lUSU1FUlNQRUNfREVGSU5JVElPTl9NSVNTSU5HIDEKLV9BQ0VPRgotCi1maQotYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXRpbWVyc3BlYyIgIml0X3ZhbHVlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pdGltZXJzcGVjX2l0X3ZhbHVlIiAiCi0jaW5jbHVkZSA8dGltZS5oPgotI2lmIEhBVkVfUFRIUkVBRAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KLQotIgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2l0aW1lcnNwZWNfaXRfdmFsdWUiID0geHllczsgdGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVFJVQ1RfSVRJTUVSU1BFQ19JVF9WQUxVRSAxCi1fQUNFT0YKLQotCi1lbHNlCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU1RSVUNUX0lUSU1FUlNQRUNfREVGSU5JVElPTl9NSVNTSU5HIDEKLV9BQ0VPRgotCi1maQotCi0KLWFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInRpbWVyX3QiICJhY19jdl90eXBlX3RpbWVyX3QiICIKLSAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAotI2lmIEhBVkVfUFRIUkVBRAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KLQotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3RpbWVyX3QiID0geHllczsgdGhlbiA6Ci0KLWVsc2UKLQotCi0kYXNfZWNobyAiI2RlZmluZSB0aW1lcl90IGludCIgPj5jb25mZGVmcy5oCi0KLQotZmkKLQotYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiY2xvY2tpZF90IiAiYWNfY3ZfdHlwZV9jbG9ja2lkX3QiICIKLSAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAotI2lmIEhBVkVfUFRIUkVBRAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KLQotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX2Nsb2NraWRfdCIgPSB4eWVzOyB0aGVuIDoKLQotZWxzZQotCi0KLSRhc19lY2hvICIjZGVmaW5lIGNsb2NraWRfdCBpbnQiID4+Y29uZmRlZnMuaAotCi0KLWZpCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdGltZXJfY3JlYXRlLCB0aW1lcl9zZXR0aW1lLCB0aW1lcl9kZWxldGUgaW4gLWxydCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgdGltZXJfY3JlYXRlLCB0aW1lcl9zZXR0aW1lLCB0aW1lcl9kZWxldGUgaW4gLWxydC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfcnRfdGltZXJfY3JlYXRlX190aW1lcl9zZXR0aW1lX190aW1lcl9kZWxldGUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHJ0ICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciB0aW1lcl9jcmVhdGUsIHRpbWVyX3NldHRpbWUsIHRpbWVyX2RlbGV0ZSAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIHRpbWVyX2NyZWF0ZSwgdGltZXJfc2V0dGltZSwgdGltZXJfZGVsZXRlICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9ydF90aW1lcl9jcmVhdGVfX3RpbWVyX3NldHRpbWVfX3RpbWVyX2RlbGV0ZT15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX3J0X3RpbWVyX2NyZWF0ZV9fdGltZXJfc2V0dGltZV9fdGltZXJfZGVsZXRlPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ydF90aW1lcl9jcmVhdGVfX3RpbWVyX3NldHRpbWVfX3RpbWVyX2RlbGV0ZSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9ydF90aW1lcl9jcmVhdGVfX3RpbWVyX3NldHRpbWVfX3RpbWVyX2RlbGV0ZSIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ydF90aW1lcl9jcmVhdGVfX3RpbWVyX3NldHRpbWVfX3RpbWVyX2RlbGV0ZSIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQlJUIDEKLV9BQ0VPRgotCi0gIExJQlM9Ii1scnQgJExJQlMiCi0KLWZpCi0KLSBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ydF90aW1lcl9jcmVhdGVfX3RpbWVyX3NldHRpbWVfX3RpbWVyX2RlbGV0ZSIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9USU1FUl9DUkVBVEVfU0VUVElNRV9ERUxFVEVfVFJVRT0KLSAgSEFWRV9USU1FUl9DUkVBVEVfU0VUVElNRV9ERUxFVEVfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfVElNRVJfQ1JFQVRFX1NFVFRJTUVfREVMRVRFX1RSVUU9JyMnCi0gIEhBVkVfVElNRVJfQ1JFQVRFX1NFVFRJTUVfREVMRVRFX0ZBTFNFPQotZmkKLQotCi0gaWYgdGVzdCAieCRDTE9DS19HRVRUSU1FX0ZPVU5EIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NMT0NLX0dFVFRJTUVfVFJVRT0KLSAgSEFWRV9DTE9DS19HRVRUSU1FX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NMT0NLX0dFVFRJTUVfVFJVRT0nIycKLSAgSEFWRV9DTE9DS19HRVRUSU1FX0ZBTFNFPQotZmkKLQotCi0jIC0tLS0tLSBBWCBDUkVBVEUgU1RESU5UIEggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHR5cGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdHlwZXMuLi4gIiA+JjY7IH0KLWFjX3N0ZGludF9oPWBlY2hvIF9zdGRpbnQuaGAKLSMgdHJ5IHRvIHNob3J0Y2lyY3VpdCAtIGlmIHRoZSBkZWZhdWx0IGluY2x1ZGUgcGF0aCBvZiB0aGUgY29tcGlsZXIKLSMgY2FuIGZpbmQgYSAic3RkaW50LmgiIGhlYWRlciB0aGVuIHdlIGFzc3VtZSB0aGF0IGFsbCBjb21waWxlcnMgY2FuLgotaWYgJHthY19jdl9oZWFkZXJfc3RkaW50X3QrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi1vbGRfQ1hYRkxBR1M9IiRDWFhGTEFHUyIgOyBDWFhGTEFHUz0iIgotb2xkX0NQUEZMQUdTPSIkQ1BQRkxBR1MiIDsgQ1BQRkxBR1M9IiIKLW9sZF9DRkxBR1M9IiRDRkxBR1MiICAgICA7IENGTEFHUz0iIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGludC5oPgotaW50Ci1tYWluICgpCi17Ci1pbnRfbGVhc3QzMl90IHYgPSAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3N0ZGludF9yZXN1bHQ9Iihhc3N1bWluZyBDOTkgY29tcGF0aWJsZSBzeXN0ZW0pIgotIGFjX2N2X2hlYWRlcl9zdGRpbnRfdD0ic3RkaW50LmgiOwotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkaW50X3Q9IiIKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIgJiYgdGVzdCAiLiRhY19jdl9oZWFkZXJfc3RkaW50X3QiID0gIi4iOyB0aGVuCi1DRkxBR1M9Ii1zdGQ9Yzk5IgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGludC5oPgotaW50Ci1tYWluICgpCi17Ci1pbnRfbGVhc3QzMl90IHYgPSAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogeW91ciBHQ0MgY29tcGlsZXIgaGFzIGEgZGVmdW5jdCBzdGRpbnQuaCBmb3IgaXRzIGRlZmF1bHQtbW9kZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3VyIEdDQyBjb21waWxlciBoYXMgYSBkZWZ1bmN0IHN0ZGludC5oIGZvciBpdHMgZGVmYXVsdC1tb2RlIiA+JjI7fQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLUNYWEZMQUdTPSIkb2xkX0NYWEZMQUdTIgotQ1BQRkxBR1M9IiRvbGRfQ1BQRkxBR1MiCi1DRkxBR1M9IiRvbGRfQ0ZMQUdTIgotZmkKLQotCi12PSIuLi4gJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCIKLWlmIHRlc3QgIiRhY19zdGRpbnRfaCIgPSAic3RkaW50LmgiIDsgdGhlbgotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAoYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRoZW0gaW4gLi9zdGRpbnQuaD8pIiA+JjUKLSRhc19lY2hvICIoYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRoZW0gaW4gLi9zdGRpbnQuaD8pIiA+JjY7IH0KLWVsaWYgdGVzdCAiJGFjX3N0ZGludF9oIiA9ICJpbnR0eXBlcy5oIiA7IHRoZW4KLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0aGVtIGluIC4vaW50dHlwZXMuaD8pIiA+JjUKLSRhc19lY2hvICIoYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRoZW0gaW4gLi9pbnR0eXBlcy5oPykiID4mNjsgfQotZWxpZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIgPSAiXyIgOyB0aGVuCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IChwdXR0aW5nIHRoZW0gaW50byAkYWNfc3RkaW50X2gpJHYiID4mNQotJGFzX2VjaG8gIihwdXR0aW5nIHRoZW0gaW50byAkYWNfc3RkaW50X2gpJHYiID4mNjsgfQotZWxzZQotIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X3QiCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkaW50IChzaG9ydGNpcmN1aXQpIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGludCAoc2hvcnRjaXJjdWl0KSIgPiY2OyB9Ci1maQotCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIgPSAiXyIgOyB0aGVuICMgY2FuIG5vdCBzaG9ydGNpcmN1aXQuLgotCi0KLWludHR5cGVfaGVhZGVycz1gZWNobyAgfCBzZWQgLWUgJ3MvLC8gL2cnYAotCi1hY19jdl9zdGRpbnRfcmVzdWx0PSIobm8gaGVscGZ1bCBzeXN0ZW0gdHlwZWRlZnMgc2VlbikiCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludCB1aW50cHRyX3QiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0ZGludCB1aW50cHRyX3QuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfaGVhZGVyX3N0ZGludF94Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQotIGFjX2N2X2hlYWRlcl9zdGRpbnRfeD0iIiAjIHRoZSAxOTk3IHR5cGVkZWZzIChpbnR0eXBlcy5oKQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKC4uKSIgPiY1Ci0kYXNfZWNobyAiKC4uKSIgPiY2OyB9Ci0gIGZvciBpIGluICAgIHN0ZGludC5oIGludHR5cGVzLmggc3lzL2ludHR5cGVzLmggJGludHR5cGVfaGVhZGVycwotICBkbwotICAgdW5zZXQgYWNfY3ZfdHlwZV91aW50cHRyX3QKLSAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDY0X3QKLSAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnRwdHJfdCIgImFjX2N2X3R5cGVfdWludHB0cl90IiAiI2luY2x1ZGUgPCRpPgotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnRwdHJfdCIgPSB4eWVzOyB0aGVuIDoKLSAgYWNfY3ZfaGVhZGVyX3N0ZGludF94PSRpCi1lbHNlCi0gIGNvbnRpbnVlCi1maQotCi0gICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1aW50NjRfdCIgImFjX2N2X3R5cGVfdWludDY0X3QiICIjaW5jbHVkZTwkaT4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50NjRfdCIgPSB4eWVzOyB0aGVuIDoKLSAgYW5kNjQ9Ii91aW50NjRfdCIKLWVsc2UKLSAgYW5kNjQ9IiIKLWZpCi0KLSAgIGFjX2N2X3N0ZGludF9yZXN1bHQ9IihzZWVuIHVpbnRwdHJfdCRhbmQ2NCBpbiAkaSkiCi0gYnJlYWsKLSAgZG9uZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQgdWludHB0cl90IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdWludHB0cl90Li4uICIgPiY2OyB9Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPiY2OyB9Ci0KLQotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3giID0gIl8iIDsgdGhlbgotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQgdWludDMyX3QiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0ZGludCB1aW50MzJfdC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9oZWFkZXJfc3RkaW50X28rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi0gYWNfY3ZfaGVhZGVyX3N0ZGludF9vPSIiICMgdGhlIDE5OTUgdHlwZWRlZnMgKHN5cy9pbnR0eXBlcy5oKQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKC4uKSIgPiY1Ci0kYXNfZWNobyAiKC4uKSIgPiY2OyB9Ci0gIGZvciBpIGluICAgIGludHR5cGVzLmggc3lzL2ludHR5cGVzLmggc3RkaW50LmggJGludHR5cGVfaGVhZGVycwotICBkbwotICAgdW5zZXQgYWNfY3ZfdHlwZV91aW50MzJfdAotICAgdW5zZXQgYWNfY3ZfdHlwZV91aW50NjRfdAotICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidWludDMyX3QiICJhY19jdl90eXBlX3VpbnQzMl90IiAiI2luY2x1ZGUgPCRpPgotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQzMl90IiA9IHh5ZXM7IHRoZW4gOgotICBhY19jdl9oZWFkZXJfc3RkaW50X289JGkKLWVsc2UKLSAgY29udGludWUKLWZpCi0KLSAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnQ2NF90IiAiYWNfY3ZfdHlwZV91aW50NjRfdCIgIiNpbmNsdWRlPCRpPgotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnQ2NF90IiA9IHh5ZXM7IHRoZW4gOgotICBhbmQ2ND0iL3VpbnQ2NF90IgotZWxzZQotICBhbmQ2ND0iIgotZmkKLQotICAgYWNfY3Zfc3RkaW50X3Jlc3VsdD0iKHNlZW4gdWludDMyX3QkYW5kNjQgaW4gJGkpIgotIGJyZWFrCi0gICBicmVhazsKLSAgZG9uZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQgdWludDMyX3QiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0ZGludCB1aW50MzJfdC4uLiAiID4mNjsgfQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkaW50X28iID4mNQotJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkaW50X28iID4mNjsgfQotCi1maQotCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPSAiXyIgOyB0aGVuCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgPSAiXyIgOyB0aGVuCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludCB1X2ludDMyX3QiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0ZGludCB1X2ludDMyX3QuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfaGVhZGVyX3N0ZGludF91Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQotIGFjX2N2X2hlYWRlcl9zdGRpbnRfdT0iIiAjIHRoZSBCU0QgdHlwZWRlZnMgKHN5cy90eXBlcy5oKQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKC4uKSIgPiY1Ci0kYXNfZWNobyAiKC4uKSIgPiY2OyB9Ci0gIGZvciBpIGluICAgIHN5cy90eXBlcy5oIGludHR5cGVzLmggc3lzL2ludHR5cGVzLmggJGludHR5cGVfaGVhZGVycyA7IGRvCi0gICB1bnNldCBhY19jdl90eXBlX3VfaW50MzJfdAotICAgdW5zZXQgYWNfY3ZfdHlwZV91X2ludDY0X3QKLSAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVfaW50MzJfdCIgImFjX2N2X3R5cGVfdV9pbnQzMl90IiAiI2luY2x1ZGUgPCRpPgotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3VfaW50MzJfdCIgPSB4eWVzOyB0aGVuIDoKLSAgYWNfY3ZfaGVhZGVyX3N0ZGludF91PSRpCi1lbHNlCi0gIGNvbnRpbnVlCi1maQotCi0gICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1X2ludDY0X3QiICJhY19jdl90eXBlX3VfaW50NjRfdCIgIiNpbmNsdWRlPCRpPgotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3VfaW50NjRfdCIgPSB4eWVzOyB0aGVuIDoKLSAgYW5kNjQ9Ii91X2ludDY0X3QiCi1lbHNlCi0gIGFuZDY0PSIiCi1maQotCi0gICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoc2VlbiB1X2ludDMyX3QkYW5kNjQgaW4gJGkpIgotIGJyZWFrCi0gICBicmVhazsKLSAgZG9uZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQgdV9pbnQzMl90IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdV9pbnQzMl90Li4uICIgPiY2OyB9Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIgPiY2OyB9Ci0KLWZpIGZpCi0KLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiA9ICJfIiA7IHRoZW4KLSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludCBkYXRhdHlwZSBtb2RlbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50IGRhdGF0eXBlIG1vZGVsLi4uICIgPiY2OyB9Ci0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKC4uKSIgPiY1Ci0kYXNfZWNobyAiKC4uKSIgPiY2OyB9Ci0KLSAgICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0jIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0jIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgY2hhciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGNoYXIuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfc2l6ZW9mX2NoYXIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChjaGFyKSkiICJhY19jdl9zaXplb2ZfY2hhciIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgotCi1lbHNlCi0gIGlmIHRlc3QgIiRhY19jdl90eXBlX2NoYXIiID0geWVzOyB0aGVuCi0gICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoY2hhcikKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0gICBlbHNlCi0gICAgIGFjX2N2X3NpemVvZl9jaGFyPTAKLSAgIGZpCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfY2hhciIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3NpemVvZl9jaGFyIiA+JjY7IH0KLQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU0laRU9GX0NIQVIgJGFjX2N2X3NpemVvZl9jaGFyCi1fQUNFT0YKLQotCi0gICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0jIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHNob3J0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygc2hvcnQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfc2l6ZW9mX3Nob3J0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoc2hvcnQpKSIgImFjX2N2X3NpemVvZl9zaG9ydCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgotCi1lbHNlCi0gIGlmIHRlc3QgIiRhY19jdl90eXBlX3Nob3J0IiA9IHllczsgdGhlbgotICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLSAgIGVsc2UKLSAgICAgYWNfY3Zfc2l6ZW9mX3Nob3J0PTAKLSAgIGZpCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfc2hvcnQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9zaXplb2Zfc2hvcnQiID4mNjsgfQotCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBTSVpFT0ZfU0hPUlQgJGFjX2N2X3NpemVvZl9zaG9ydAotX0FDRU9GCi0KLQotICAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBpbnQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfc2l6ZW9mX2ludCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGludCkpIiAiYWNfY3Zfc2l6ZW9mX2ludCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgotCi1lbHNlCi0gIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludCIgPSB5ZXM7IHRoZW4KLSAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotICAgZWxzZQotICAgICBhY19jdl9zaXplb2ZfaW50PTAKLSAgIGZpCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50IiA+JjUKLSRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2ludCIgPiY2OyB9Ci0KLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFNJWkVPRl9JTlQgJGFjX2N2X3NpemVvZl9pbnQKLV9BQ0VPRgotCi0KLSAgICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0jIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0jIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfc2l6ZW9mX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgotCi1lbHNlCi0gIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmciID0geWVzOyB0aGVuCi0gICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZykKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0gICBlbHNlCi0gICAgIGFjX2N2X3NpemVvZl9sb25nPTAKLSAgIGZpCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3NpemVvZl9sb25nIiA+JjY7IH0KLQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU0laRU9GX0xPTkcgJGFjX2N2X3NpemVvZl9sb25nCi1fQUNFT0YKLQotCi0gICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0jIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHZvaWQqIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygdm9pZCouLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfc2l6ZW9mX3ZvaWRwKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAodm9pZCopKSIgImFjX2N2X3NpemVvZl92b2lkcCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgotCi1lbHNlCi0gIGlmIHRlc3QgIiRhY19jdl90eXBlX3ZvaWRwIiA9IHllczsgdGhlbgotICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHZvaWQqKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLSAgIGVsc2UKLSAgICAgYWNfY3Zfc2l6ZW9mX3ZvaWRwPTAKLSAgIGZpCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfdm9pZHAiID4mNQotJGFzX2VjaG8gIiRhY19jdl9zaXplb2Zfdm9pZHAiID4mNjsgfQotCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBTSVpFT0ZfVk9JRFAgJGFjX2N2X3NpemVvZl92b2lkcAotX0FDRU9GCi0KLQotICAgYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIiCi0gICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX2NoYXIiCi0gICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX3Nob3J0IgotICAgYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9pbnQiCi0gICBhY19jdl9sb25nX2RhdGFfbW9kZWw9IiIKLSAgIGFjX2N2X2xvbmdfZGF0YV9tb2RlbD0iJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCRhY19jdl9zaXplb2ZfaW50IgotICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9sb25nIgotICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsJGFjX2N2X3NpemVvZl92b2lkcCIKLSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGF0YSBtb2RlbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBkYXRhIG1vZGVsLi4uICIgPiY2OyB9Ci0gICBjYXNlICIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsLyRhY19jdl9sb25nX2RhdGFfbW9kZWwiIGluCi0gICAgMTIyLzI0MikgICAgIGFjX2N2X2RhdGFfbW9kZWw9IklQMTYiICA7IG49InN0YW5kYXJkIDE2Yml0IG1hY2hpbmUiIDs7Ci0gICAgMTIyLzI0NCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxQMzIiICA7IG49InN0YW5kYXJkIDMyYml0IG1hY2hpbmUiIDs7Ci0gICAgMTIyLyopICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9ImkxNiIgICA7IG49InVudXN1YWwgaW50MTYgbW9kZWwiIDs7Ci0gICAgMTI0LzQ0NCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IklMUDMyIiA7IG49InN0YW5kYXJkIDMyYml0IHVuaXhpc2giIDs7Ci0gICAgMTI0LzQ4OCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxQNjQiICA7IG49InN0YW5kYXJkIDY0Yml0IHVuaXhpc2giIDs7Ci0gICAgMTI0LzQ0OCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxMUDY0IiA7IG49InVudXN1YWwgNjRiaXQgdW5peGlzaCIgOzsKLSAgICAxMjQvKikgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaTMyIiAgIDsgbj0idW51c3VhbCBpbnQzMiBtb2RlbCIgOzsKLSAgICAxMjgvODg4KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iSUxQNjQiIDsgbj0idW51c3VhbCA2NGJpdCBudW1lcmljIiA7OwotICAgIDEyOC8qKSAgICAgICBhY19jdl9kYXRhX21vZGVsPSJpNjQiICAgOyBuPSJ1bnVzdWFsIGludDY0IG1vZGVsIiA7OwotICAgIDIyMi8qMikgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1AxNiIgOyBuPSJzdHJpY3QgMTZiaXQgZHNwdHlwZSIgOzsKLSAgICAzMzMvKjMpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQMjQiIDsgbj0ic3RyaWN0IDI0Yml0IGRzcHR5cGUiIDs7Ci0gICAgNDQ0Lyo0KSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDMyIiA7IG49InN0cmljdCAzMmJpdCBkc3B0eXBlIiA7OwotICAgIDY2Ni8qNikgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1A0OCIgOyBuPSJzdHJpY3QgNDhiaXQgZHNwdHlwZSIgOzsKLSAgICA4ODgvKjgpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQNjQiIDsgbj0ic3RyaWN0IDY0Yml0IGRzcHR5cGUiIDs7Ci0gICAgMjIyLyp8MzMzLyp8NDQ0Lyp8NjY2Lyp8ODg4LyopIDoKLSAgICAgICAgICAgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaURTUCIgIDsgbj0idW51c3VhbCBkc3B0eXBlIiA7OwotICAgICAqKSAgICAgICAgICBhY19jdl9kYXRhX21vZGVsPSJub25lIiAgOyBuPSJ2ZXJ5IHVudXN1YWwgbW9kZWwiIDs7Ci0gICBlc2FjCi0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2RhdGFfbW9kZWwgKCRhY19jdl9sb25nX2RhdGFfbW9kZWwsICRuKSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2RhdGFfbW9kZWwgKCRhY19jdl9sb25nX2RhdGFfbW9kZWwsICRuKSIgPiY2OyB9Ci0KLWZpCi0KLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiAhPSAiXyIgOyB0aGVuCi0gICBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF94IgotZWxpZiAgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X28iICE9ICJfIiA7IHRoZW4KLSAgIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X28iCi1lbGlmICB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIgIT0gIl8iIDsgdGhlbgotICAgYWNfY3ZfaGVhZGVyX3N0ZGludD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIKLWVsc2UKLSAgIGFjX2N2X2hlYWRlcl9zdGRpbnQ9InN0ZGRlZi5oIgotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZXh0cmEgaW50dHlwZXMgaW4gY2hvc2VuIGhlYWRlciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZXh0cmEgaW50dHlwZXMgaW4gY2hvc2VuIGhlYWRlci4uLiAiID4mNjsgfQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICgkYWNfY3ZfaGVhZGVyX3N0ZGludCkiID4mNQotJGFzX2VjaG8gIigkYWNfY3ZfaGVhZGVyX3N0ZGludCkiID4mNjsgfQotdW5zZXQgYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90Ci11bnNldCBhY19jdl90eXBlX2ludF9mYXN0MzJfdAotYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50X2xlYXN0MzJfdCIgImFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdCIgIiNpbmNsdWRlIDwkYWNfY3ZfaGVhZGVyX3N0ZGludD4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90IiA9IHh5ZXM7IHRoZW4gOgotCi1maQotCi1hY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJpbnRfZmFzdDMyX3QiICJhY19jdl90eXBlX2ludF9mYXN0MzJfdCIgIiNpbmNsdWRlPCRhY19jdl9oZWFkZXJfc3RkaW50PgotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX2ludF9mYXN0MzJfdCIgPSB4eWVzOyB0aGVuIDoKLQotZmkKLQotYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50bWF4X3QiICJhY19jdl90eXBlX2ludG1heF90IiAiI2luY2x1ZGUgPCRhY19jdl9oZWFkZXJfc3RkaW50PgotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX2ludG1heF90IiA9IHh5ZXM7IHRoZW4gOgotCi1maQotCi0KLWZpICMgc2hvcnRjaXJjdXQgdG8gc3lzdGVtICJzdGRpbnQuaCIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tIFBSRVBBUkUgVkFSSUFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaWYgdGVzdCAiJEdDQyIgPSAieWVzIiA7IHRoZW4KLWFjX2N2X3N0ZGludF9tZXNzYWdlPSJ1c2luZyBnbnUgY29tcGlsZXIgImAkQ0MgLS12ZXJzaW9uIHwgaGVhZCAtMWAKLWVsc2UKLWFjX2N2X3N0ZGludF9tZXNzYWdlPSJ1c2luZyAkQ0MiCi1maQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbWFrZSB1c2Ugb2YgJGFjX2N2X2hlYWRlcl9zdGRpbnQgaW4gJGFjX3N0ZGludF9oICRhY19jdl9zdGRpbnRfcmVzdWx0IiA+JjUKLSRhc19lY2hvICJtYWtlIHVzZSBvZiAkYWNfY3ZfaGVhZGVyX3N0ZGludCBpbiAkYWNfc3RkaW50X2ggJGFjX2N2X3N0ZGludF9yZXN1bHQiID4mNjsgfQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tIERPTkUgaW50dHlwZXMuaCBjaGVja3MgU1RBUlQgaGVhZGVyIC0tLS0tLS0tLS0tLS0KLWFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyAkYWNfc3RkaW50X2giCi0KLQotCi1lbmFibGVfc3VidW5pdD1mYWxzZQotCi1pZiB0ZXN0IHhmYWxzZSA9IHgiJGVuYWJsZV9zdWJ1bml0IjsgdGhlbgotRU5BQkxFX1NVQlVOSVQ9IjAiCi1lbHNlCi1FTkFCTEVfU1VCVU5JVD0iMSIKLWZpCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBFTkFCTEVfU1VCVU5JVCAkRU5BQkxFX1NVQlVOSVQKLV9BQ0VPRgotCi0KLSBpZiB0ZXN0IHgiJGVuYWJsZV9zdWJ1bml0IiAhPSAieGZhbHNlIjsgdGhlbgotICBTVUJVTklUX1RSVUU9Ci0gIFNVQlVOSVRfRkFMU0U9JyMnCi1lbHNlCi0gIFNVQlVOSVRfVFJVRT0nIycKLSAgU1VCVU5JVF9GQUxTRT0KLWZpCi0KLQotCi0KLWFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSBkYXRhL01ha2VmaWxlIGdzdC9NYWtlZmlsZSBnc3QvZ3N0Y29uZmlnLmggZ3N0L2dzdHZlcnNpb24uaCBnc3QvcGFyc2UvTWFrZWZpbGUgZ3N0L3ByaW50Zi9NYWtlZmlsZSBsaWJzL01ha2VmaWxlIGxpYnMvZ3N0L01ha2VmaWxlIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUgbGlicy9nc3QvY2hlY2svTWFrZWZpbGUgbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUgbGlicy9nc3QvY2hlY2svaW50ZXJuYWwtY2hlY2suaDpsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oLmluIGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUgbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZSBsaWJzL2dzdC9uZXQvTWFrZWZpbGUgcGx1Z2lucy9NYWtlZmlsZSBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZSBwby9NYWtlZmlsZS5pbiB0ZXN0cy9NYWtlZmlsZSB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlIHRlc3RzL2NoZWNrL01ha2VmaWxlIHRlc3RzL21pc2MvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9wdHAvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvc3RyZWFtaWRkZW11eC9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlIHRvb2xzL01ha2VmaWxlIGNvbW1vbi9NYWtlZmlsZSBjb21tb24vbTQvTWFrZWZpbGUgZG9jcy9NYWtlZmlsZSBkb2NzL2Rlc2lnbi9NYWtlZmlsZSBkb2NzL2ZhcS9NYWtlZmlsZSBkb2NzL2dzdC9NYWtlZmlsZSBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMgZG9jcy9saWJzL01ha2VmaWxlIGRvY3MvcGx1Z2lucy9NYWtlZmlsZSBkb2NzL21hbnVhbC9NYWtlZmlsZSBkb2NzL3B3Zy9NYWtlZmlsZSBkb2NzL3NsaWRlcy9NYWtlZmlsZSBkb2NzL3hzbC9NYWtlZmlsZSBkb2NzL3ZlcnNpb24uZW50aXRpZXMgbTQvTWFrZWZpbGUgcGtnY29uZmlnL01ha2VmaWxlIHN0YW1wLmggcGtnY29uZmlnL2dzdHJlYW1lci5wYyBwa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjIHBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS5wYyBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMgcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYyBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjIHBrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYyBwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMgcGtnY29uZmlnL2dzdHJlYW1lci1uZXQucGMgcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMgZ3N0cmVhbWVyLnNwZWMiCi0KLQotc2VkIFwKLSAgICAtZSAncy8uKmNvbmZpZy5oLmluLiphdXRvaGVhZGVyLiovXC8qIEF1dG9nZW5lcmF0ZWQgY29uZmlnLmggY3JlYXRlZCBmb3Igd2luMzIgVmlzdWFsIFN0dWRpbyBidWlsZHMgKlwvXG5cblwvKiBQUkVGSVggLS0gc3BlY2lmaWNhbGx5IGFkZGVkIGZvciBXaW5kb3dzIGZvciBlYXNpZXIgbW92aW5nICpcL1xuI2RlZmluZSBQUkVGSVggIkM6XFxcXGdzdHJlYW1lciIvJyBcCi0gICAgLWUgJ3MvLiogR0VUVEVYVF9QQUNLQUdFJC8jZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSAiJyRHRVRURVhUX1BBQ0tBR0UnIi8nIFwKLSAgICAtZSAncy8uKiBHU1RfREFUQURJUiQvI2RlZmluZSBHU1RfREFUQURJUiBQUkVGSVggIlxcXFxzaGFyZSIvJyBcCi0gICAgLWUgJ3MvLiogR1NUX0xFVkVMX0RFRkFVTFQkLyNkZWZpbmUgR1NUX0xFVkVMX0RFRkFVTFQgR1NUX0xFVkVMX0VSUk9SLycgXAotICAgIC1lICdzLy4qIEdTVF9MSUNFTlNFJC8jZGVmaW5lIEdTVF9MSUNFTlNFICInJEdTVF9MSUNFTlNFJyIvJyBcCi0gICAgLWUgJ3MvLiogR1NUX0FQSV9WRVJTSU9OJC8jZGVmaW5lIEdTVF9BUElfVkVSU0lPTiAiJyRHU1RfQVBJX1ZFUlNJT04nIi8nIFwKLSAgICAtZSAicywuKiBHU1RfUEFDS0FHRV9OQU1FJCwjZGVmaW5lIEdTVF9QQUNLQUdFX05BTUUgXCIke0dTVF9QQUNLQUdFX05BTUV9XCIsIiBcCi0gICAgLWUgJ3MvLiogR1NUX1BBQ0tBR0VfT1JJR0lOJC8jZGVmaW5lIEdTVF9QQUNLQUdFX09SSUdJTiAiVW5rbm93biBwYWNrYWdlIG9yaWdpbiIvJyBcCi0gICAgLWUgInMsLiogR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSQsI2RlZmluZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIFwiJHtHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FfVwiLCIgXAotICAgIC1lICdzLy4qIEhBVkVfQ1BVX0kzODYkLyNkZWZpbmUgSEFWRV9DUFVfSTM4NiAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfRkdFVFBPUyQvI2RlZmluZSBIQVZFX0ZHRVRQT1MgMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX0ZTRVRQT1MkLyNkZWZpbmUgSEFWRV9GU0VUUE9TIDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9QUk9DRVNTX0gkLyNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1NURExJQl9IJC8jZGVmaW5lIEhBVkVfU1RETElCX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1NUUklOR19IJC8jZGVmaW5lIEhBVkVfU1RSSU5HX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1NZU19TVEFUX0gkLyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9TWVNfVFlQRVNfSCQvI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9XSU4zMiQvI2RlZmluZSBIQVZFX1dJTjMyIDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9XSU5TT0NLMl9IJC8jZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxLycgXAotICAgIC1lICdzLy4qIEhPU1RfQ1BVJC8jZGVmaW5lIEhPU1RfQ1BVICJpNjg2Ii8nIFwKLSAgICAtZSAncy8uKiBNRU1PUllfQUxJR05NRU5UX01BTExPQy8jZGVmaW5lIE1FTU9SWV9BTElHTk1FTlRfTUFMTE9DIDEvJyBcCi0gICAgLWUgJ3MvLiogTElCRElSJC8jaWZkZWYgX0RFQlVHXG4jICBkZWZpbmUgTElCRElSIFBSRUZJWCAiXFxcXGRlYnVnXFxcXGxpYiJcbiNlbHNlXG4jICBkZWZpbmUgTElCRElSIFBSRUZJWCAiXFxcXGxpYiJcbiNlbmRpZi8nIFwKLSAgICAtZSAncy8uKiBMT0NBTEVESVIkLyNkZWZpbmUgTE9DQUxFRElSIFBSRUZJWCAiXFxcXHNoYXJlXFxcXGxvY2FsZSIvJyBcCi0gICAgLWUgJ3MvLiogUEFDS0FHRSQvI2RlZmluZSBQQUNLQUdFICJnc3RyZWFtZXIiLycgXAotICAgIC1lICdzLy4qIFBBQ0tBR0VfQlVHUkVQT1JUJC8jZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJodHRwOlwvXC9idWd6aWxsYS5nbm9tZS5vcmdcL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXIiLycgXAotICAgIC1lICdzLy4qIFBBQ0tBR0VfTkFNRSQvI2RlZmluZSBQQUNLQUdFX05BTUUgIickUEFDS0FHRV9OQU1FJyIvJyBcCi0gICAgLWUgInMvLiogUEFDS0FHRV9TVFJJTkckLyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgXCIkUEFDS0FHRV9TVFJJTkdcIi8iIFwKLSAgICAtZSAncy8uKiBQQUNLQUdFX1RBUk5BTUUkLyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICInJFBBQ0tBR0VfVEFSTkFNRSciLycgXAotICAgIC1lICdzLy4qIFBBQ0tBR0VfVkVSU0lPTiQvI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIickUEFDS0FHRV9WRVJTSU9OJyIvJyBcCi0gICAgLWUgJ3MvLiogUExVR0lORElSJC8jaWZkZWYgX0RFQlVHXG4jICBkZWZpbmUgUExVR0lORElSIFBSRUZJWCAiXFxcXGRlYnVnXFxcXGxpYlxcXFxnc3RyZWFtZXItMS4wIlxuI2Vsc2VcbiMgIGRlZmluZSBQTFVHSU5ESVIgUFJFRklYICJcXFxcbGliXFxcXGdzdHJlYW1lci0xLjAiXG4jZW5kaWYvJyBcCi0gICAgLWUgJ3MvLiogR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCQvI2RlZmluZSBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEIExJQkRJUiAiXFxcXGdzdC1wbHVnaW4tc2Nhbm5lciIvJyBcCi0gICAgLWUgJ3MvLiogVkVSU0lPTiQvI2RlZmluZSBWRVJTSU9OICInJFZFUlNJT04nIi8nIFwKLSAgICBjb25maWcuaC5pbiA+d2luMzIvY29tbW9uL2NvbmZpZy5oLW5ldwotCi1jYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKLSMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQotIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCi0jIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgotIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAotIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCi0jCi0jIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAotIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCi0jCi0jIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KLSMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKLSMgZm9sbG93aW5nIHZhbHVlcy4KLQotX0FDRU9GCi0KLSMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCi0jIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgotIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KLSMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAotIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KLSgKLSAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbwotICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgotICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAotICAgICoke2FzX25sfSopCi0gICAgICBjYXNlICRhY192YXIgaW4gIygKLSAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKLSAgICAgIGVzYWMKLSAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAotICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAotICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKLSAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7Ci0gICAgICBlc2FjIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgKHNldCkgMj4mMSB8Ci0gICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAotICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKLSAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKLSAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCi0gICAgICBzZWQgLW4gXAotCSJzLycvJ1xcXFwnJy9nOwotCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgotICAgICAgOzsgIygKLSAgICAqKQotICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KLSAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCi0gICAgICA7OwotICAgIGVzYWMgfAotICAgIHNvcnQKLSkgfAotICBzZWQgJwotICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKLSAgICAgdCBjbGVhcgotICAgICA6Y2xlYXIKLSAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLwotICAgICB0IGVuZAotICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KLSAgICAgOmVuZCcgPj5jb25mY2FjaGUKLWlmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Ci0gICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KLQljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCi0gICAgICBlbHNlCi0gICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKLSAgICAgICAgKi8qIHwgPzoqKQotCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgotCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKLSAgICAgICAgKikKLQkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICBmaQotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KLSAgZmkKLWZpCi1ybSAtZiBjb25mY2FjaGUKLQotdGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAotIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCi10ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCi0KLURFRlM9LURIQVZFX0NPTkZJR19ICi0KLWFjX2xpYm9ianM9Ci1hY19sdGxpYm9ianM9Ci1VPQotZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCi0gICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KLSAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCi0gIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAotICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCi0gICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgotICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgotICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKLWRvbmUKLUxJQk9CSlM9JGFjX2xpYm9ianMKLQotTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmUuLi4gIiA+JjY7IH0KLSAgIGlmIHRlc3QgLW4gIiRhbV9zbGVlcF9waWQiOyB0aGVuCi0gICAgICMgSGlkZSB3YXJuaW5ncyBhYm91dCByZXVzZWQgUElEcy4KLSAgICAgd2FpdCAkYW1fc2xlZXBfcGlkIDI+L2Rldi9udWxsCi0gICBmaQotICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRvbmUiID4mNQotJGFzX2VjaG8gImRvbmUiID4mNjsgfQotIGlmIHRlc3QgLW4gIiRFWEVFWFQiOyB0aGVuCi0gIGFtX19FWEVFWFRfVFJVRT0KLSAgYW1fX0VYRUVYVF9GQUxTRT0nIycKLWVsc2UKLSAgYW1fX0VYRUVYVF9UUlVFPScjJwotICBhbV9fRVhFRVhUX0ZBTFNFPQotZmkKLQotaWYgdGVzdCAteiAiJHtNQUlOVEFJTkVSX01PREVfVFJVRX0iICYmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTUFJTlRBSU5FUl9NT0RFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtBTURFUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTURFUF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9HU1RfREVCVUdfVFJVRX0iICYmIHRlc3QgLXogIiR7R1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR1NUX0RJU0FCTEVfR1NUX0RFQlVHXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9QQVJTRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9QQVJTRV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9ESVNBQkxFX1BBUlNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9SRUdJU1RSWV9UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9ESVNBQkxFX1JFR0lTVFJZXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfRElTQUJMRV9QTFVHSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7R1NUX0RJU0FCTEVfUExVR0lOX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR1NUX0RJU0FCTEVfUExVR0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfR0NPVl9FTkFCTEVEX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dTVF9HQ09WX0VOQUJMRURfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHU1RfR0NPVl9FTkFCTEVEXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtCVUlMRF9FWEFNUExFU19UUlVFfSIgJiYgdGVzdCAteiAiJHtCVUlMRF9FWEFNUExFU19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkJVSUxEX0VYQU1QTEVTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUV9IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9CQVNIX0NPTVBMRVRJT05fRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJFTkFCTEVfQkFTSF9DT01QTEVUSU9OXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9QTFVHSU5fQlVJTERfU1RBVElDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtCVUlMRF9URVNUU19UUlVFfSIgJiYgdGVzdCAteiAiJHtCVUlMRF9URVNUU19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkJVSUxEX1RFU1RTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtCVUlMRF9GQUlMSU5HX1RFU1RTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0JVSUxEX0ZBSUxJTkdfVEVTVFNfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJCVUlMRF9GQUlMSU5HX1RFU1RTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtCVUlMRF9CRU5DSE1BUktTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0JVSUxEX0JFTkNITUFSS1NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJCVUlMRF9CRU5DSE1BUktTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtCVUlMRF9UT09MU19UUlVFfSIgJiYgdGVzdCAteiAiJHtCVUlMRF9UT09MU19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkJVSUxEX1RPT0xTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX1BUUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1BUUF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfUFRQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX1BUUF9IRUxQRVJfU0VUVUlEX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfUFRQX0hFTFBFUl9TRVRVSURfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1BUUF9IRUxQRVJfU0VUVUlEXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX1BUUF9IRUxQRVJfQ0FQQUJJTElUSUVTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVNfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1BUUF9IRUxQRVJfQ0FQQUJJTElUSUVTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0kzODZfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfSTM4Nl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0kzODZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1BQQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9QUENfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9QUENcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1BQQzY0X1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX1BQQzY0X0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfUFBDNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FMUEhBX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FMUEhBX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfQUxQSEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FSQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9BUkNfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9BUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FSTV9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9BUk1fRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9BUk1cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1NQQVJDX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX1NQQVJDX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfU1BBUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0hQUEFfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfSFBQQV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0hQUEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX01JUFNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfTUlQU19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX01JUFNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1MzOTBfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfUzM5MF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX1MzOTBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0lBNjRfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfSUE2NF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0lBNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX002OEtfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfTTY4S19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX002OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX1g4Nl82NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9YODZfNjRfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9YODZfNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0NSSVNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfQ1JJU19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0NSSVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1BVX0NSSVNWMzJfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfQ1JJU1YzMl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0NSSVNWMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDQVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1hYX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfVkFMR1JJTkRfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9WQUxHUklORF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfVkFMR1JJTkRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfSU5UUk9TUEVDVElPTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0lOVFJPU1BFQ1RJT05cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0VOQUJMRV9ET0NCT09LX1RSVUV9IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9ET0NCT09LX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX0RPQ0JPT0tcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0RPQ19IVE1MX1RSVUV9IiAmJiB0ZXN0IC16ICIke0RPQ19IVE1MX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRE9DX0hUTUxcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0RPQ19QREZfVFJVRX0iICYmIHRlc3QgLXogIiR7RE9DX1BERl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRPQ19QREZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0RPQ19QU19UUlVFfSIgJiYgdGVzdCAteiAiJHtET0NfUFNfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJET0NfUFNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0VOQUJMRV9HVEtfRE9DX1RSVUV9IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9HVEtfRE9DX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX0dUS19ET0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0dUS19ET0NfQlVJTERfSFRNTF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHVEtfRE9DX0JVSUxEX0hUTUxfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHVEtfRE9DX0JVSUxEX0hUTUxcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0dUS19ET0NfQlVJTERfUERGX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dUS19ET0NfQlVJTERfUERGX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR1RLX0RPQ19CVUlMRF9QREZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0dUS19ET0NfVVNFX0xJQlRPT0xfVFJVRX0iICYmIHRlc3QgLXogIiR7R1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdUS19ET0NfVVNFX0xJQlRPT0xcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0VOQUJMRV9QTFVHSU5fRE9DU19UUlVFfSIgJiYgdGVzdCAteiAiJHtFTkFCTEVfUExVR0lOX0RPQ1NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJFTkFCTEVfUExVR0lOX0RPQ1NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfU1lTX1NPQ0tFVF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfU1lTX1NPQ0tFVF9IX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9TWVNfU09DS0VUX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9IX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9TWVNfVElNRVNfSF9BTkRfVU5JU1REX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfUFRIUkVBRF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1BUSFJFQURfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1BUSFJFQURcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfV0lOU09DSzJfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1dJTlNPQ0syX0hfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1dJTlNPQ0syX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfR0VUUlVTQUdFX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfR0VUUlVTQUdFX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HRVRSVVNBR0VcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfTU1BUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX01NQVBfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX01NQVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0dTVF9IQVZFX1BPU0lYX1RJTUVSU19UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfSEFWRV9QT1NJWF9USU1FUlNfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHU1RfSEFWRV9QT1NJWF9USU1FUlNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0dTVF9IQVZFX01PTk9UT05JQ19DTE9DS19UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfR1RLX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfR1RLX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HVEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ0hFQ0tfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DSEVDS19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ0hFQ0tcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQUxBUk1fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9BTEFSTV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQUxBUk1cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfTE9DQUxUSU1FX1JfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9MT0NBTFRJTUVfUl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfTE9DQUxUSU1FX1JcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfU1RSU0lHTkFMX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfU1RSU0lHTkFMX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9TVFJTSUdOQUxcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfVElNRVJfQ1JFQVRFX1NFVFRJTUVfREVMRVRFX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfVElNRVJfQ1JFQVRFX1NFVFRJTUVfREVMRVRFX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9USU1FUl9DUkVBVEVfU0VUVElNRV9ERUxFVEVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0hBVkVfQ0xPQ0tfR0VUVElNRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NMT0NLX0dFVFRJTUVfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NMT0NLX0dFVFRJTUVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke1NVQlVOSVRfVFJVRX0iICYmIHRlc3QgLXogIiR7U1VCVU5JVF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlNVQlVOSVRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi0KLTogIiR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9IgotYWNfd3JpdGVfZmFpbD0wCi1hY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwotYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Ci1hc193cml0ZV9mYWlsPTAKLWNhdCA+JENPTkZJR19TVEFUVVMgPDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCi0jISAkU0hFTEwKLSMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KLSMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgotIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZwotIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgotCi1kZWJ1Zz1mYWxzZQotYWNfY3NfcmVjaGVjaz1mYWxzZQotYWNfY3Nfc2lsZW50PWZhbHNlCi0KLVNIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9Ci1leHBvcnQgU0hFTEwKLV9BU0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gIGVtdWxhdGUgc2gKLSAgTlVMTENNRD06Ci0gICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCi0gICpwb3NpeCopIDoKLSAgICBzZXQgLW8gcG9zaXggOzsgIygKLSAgKikgOgotICAgICA7OwotZXNhYwotZmkKLQotCi1hc19ubD0nCi0nCi1leHBvcnQgYXNfbmwKLSMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCi1hc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwotYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCi1hc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobwotIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCi0jIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgotaWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAotICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCi0gIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJwotZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19lY2hvPSdwcmludGYgJXNcbicKLSAgYXNfZWNob19uPSdwcmludGYgJXMnCi1lbHNlCi0gIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgotICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCi0gICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJwotICBlbHNlCi0gICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKLSAgICBhc19lY2hvX25fYm9keT0nZXZhbAotICAgICAgYXJnPSQxOwotICAgICAgY2FzZSAkYXJnIGluICMoCi0gICAgICAqIiRhc19ubCIqKQotCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOwotCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7Ci0gICAgICBlc2FjOwotICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgotICAgICcKLSAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKLSAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJwotICBmaQotICBleHBvcnQgYXNfZWNob19ib2R5Ci0gIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKLWZpCi0KLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgUEFUSF9TRVBBUkFUT1I9OgotICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7Ci0gICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKLSAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICB9Ci1maQotCi0KLSMgSUZTCi0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcwotIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCi0jIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKLSMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKLUlGUz0iICIiCSRhc19ubCIKLQotIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KLWFzX215c2VsZj0KLWNhc2UgJDAgaW4gIygoCi0gICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKLSAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICAgICA7OwotZXNhYwotIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCi1pZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCi0gIGFzX215c2VsZj0kMAotZmkKLWlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KLSAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKLSAgZXhpdCAxCi1maQotCi0jIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCi0jIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCi0jIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCi0jIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgotZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAotZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKLSAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Ci1kb25lCi1QUzE9JyQgJwotUFMyPSc+ICcKLVBTND0nKyAnCi0KLSMgTkxTIG51aXNhbmNlcy4KLUxDX0FMTD1DCi1leHBvcnQgTENfQUxMCi1MQU5HVUFHRT1DCi1leHBvcnQgTEFOR1VBR0UKLQotIyBDRFBBVEguCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLQotIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCi0jIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKLSMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCi1hc19mbl9lcnJvciAoKQotewotICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQotICBpZiB0ZXN0ICIkNCI7IHRoZW4KLSAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0Ci0gIGZpCi0gICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCi0gIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cwotfSAjIGFzX2ZuX2Vycm9yCi0KLQotIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCi1hc19mbl9zZXRfc3RhdHVzICgpCi17Ci0gIHJldHVybiAkMQotfSAjIGFzX2ZuX3NldF9zdGF0dXMKLQotIyBhc19mbl9leGl0IFNUQVRVUwotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCi1hc19mbl9leGl0ICgpCi17Ci0gIHNldCArZQotICBhc19mbl9zZXRfc3RhdHVzICQxCi0gIGV4aXQgJDEKLX0gIyBhc19mbl9leGl0Ci0KLSMgYXNfZm5fdW5zZXQgVkFSCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBQb3J0YWJseSB1bnNldCBWQVIuCi1hc19mbl91bnNldCAoKQotewotICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Ci19Ci1hc191bnNldD1hc19mbl91bnNldAotIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQotIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCi0jIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCi0jIGltcGxlbWVudGF0aW9ucy4KLWlmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKLSAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCi0gIHsKLSAgICBldmFsICQxKz1cJDIKLSAgfScKLWVsc2UKLSAgYXNfZm5fYXBwZW5kICgpCi0gIHsKLSAgICBldmFsICQxPVwkJDFcJDIKLSAgfQotZmkgIyBhc19mbl9hcHBlbmQKLQotIyBhc19mbl9hcml0aCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKLSMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cwotIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KLWlmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgotICBldmFsICdhc19mbl9hcml0aCAoKQotICB7Ci0gICAgYXNfdmFsPSQoKCAkKiApKQotICB9JwotZWxzZQotICBhc19mbl9hcml0aCAoKQotICB7Ci0gICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKLSAgfQotZmkgIyBhc19mbl9hcml0aAotCi0KLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCi0gICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgotICBhc19leHByPWV4cHIKLWVsc2UKLSAgYXNfZXhwcj1mYWxzZQotZmkKLQotaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgotICBhc19iYXNlbmFtZT1iYXNlbmFtZQotZWxzZQotICBhc19iYXNlbmFtZT1mYWxzZQotZmkKLQotaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2Rpcm5hbWU9ZGlybmFtZQotZWxzZQotICBhc19kaXJuYW1lPWZhbHNlCi1maQotCi1hc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKLSRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWC8iJDAiIHwKLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwvXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwvXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0KLSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KLWFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwotYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCi1hc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKLWFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cwotCi1FQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQotY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKLS1uKikKLSAgY2FzZSBgZWNobyAneHlcYydgIGluCi0gICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgotICB4eSkgIEVDSE9fQz0nXGMnOzsKLSAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAotICAgICAgIEVDSE9fVD0nCSc7OwotICBlc2FjOzsKLSopCi0gIEVDSE9fTj0nLW4nOzsKLWVzYWMKLQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKLWlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgotICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCi1lbHNlCi0gIHJtIC1mIGNvbmYkJC5kaXIKLSAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAotZmkKLWlmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KLSAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgYXNfbG5fcz0nbG4gLXMnCi0gICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKLSAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgotICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgotICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgotICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKLSAgICAgIGFzX2xuX3M9J2NwIC1wUicKLSAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgICBhc19sbl9zPWxuCi0gIGVsc2UKLSAgICBhc19sbl9zPSdjcCAtcFInCi0gIGZpCi1lbHNlCi0gIGFzX2xuX3M9J2NwIC1wUicKLWZpCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCi1ybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCi0KLQotIyBhc19mbl9ta2Rpcl9wCi0jIC0tLS0tLS0tLS0tLS0KLSMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgotYXNfZm5fbWtkaXJfcCAoKQotewotCi0gIGNhc2UgJGFzX2RpciBpbiAjKAotICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7Ci0gIGVzYWMKLSAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7Ci0gICAgYXNfZGlycz0KLSAgICB3aGlsZSA6OyBkbwotICAgICAgY2FzZSAkYXNfZGlyIGluICMoCi0gICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKLSAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7Ci0gICAgICBlc2FjCi0gICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci0kYXNfZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKLSAgICBkb25lCi0gICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgotICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgotCi0KLX0gIyBhc19mbl9ta2Rpcl9wCi1pZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKLWVsc2UKLSAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKLSAgYXNfbWtkaXJfcD1mYWxzZQotZmkKLQotCi0jIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KLWFzX2ZuX2V4ZWN1dGFibGVfcCAoKQotewotICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCi19ICMgYXNfZm5fZXhlY3V0YWJsZV9wCi1hc190ZXN0X3g9J3Rlc3QgLXgnCi1hc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCi0KLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KLWFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCi0KLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgotYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKLQotCi1leGVjIDY+JjEKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0VPRgotdGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bwotIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCi0jIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgotYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgR1N0cmVhbWVyICRhc19tZSAxLjEwLjQsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCi0KLSAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwotICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKLSAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUwotICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCi0gICQgJDAgJEAKLQotb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCi0iCi0KLV9BQ0VPRgotCi1jYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKLSIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKLWVzYWMKLQotY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKLSIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Ci1lc2FjCi0KLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0jIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCi1jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCi1jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgotY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgotCi1fQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotYWNfY3NfdXNhZ2U9IlwKLVxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucwotZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCi1hbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCi0KLVVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgotCi0gIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0Ci0gICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0Ci0gIC1xLCAtLXF1aWV0LCAtLXNpbGVudAotICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwotICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKLSAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQotICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQotICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCi0gICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKLQotQ29uZmlndXJhdGlvbiBmaWxlczoKLSRjb25maWdfZmlsZXMKLQotQ29uZmlndXJhdGlvbiBoZWFkZXJzOgotJGNvbmZpZ19oZWFkZXJzCi0KLUNvbmZpZ3VyYXRpb24gY29tbWFuZHM6Ci0kY29uZmlnX2NvbW1hbmRzCi0KLVJlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXI+LiIKLQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWFjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCi1hY19jc192ZXJzaW9uPSJcXAotR1N0cmVhbWVyIGNvbmZpZy5zdGF0dXMgMS4xMC40Ci1jb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjksCi0gIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgotCi1Db3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1UaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCi0KLWFjX3B3ZD0nJGFjX3B3ZCcKLXNyY2Rpcj0nJHNyY2RpcicKLUlOU1RBTEw9JyRJTlNUQUxMJwotTUtESVJfUD0nJE1LRElSX1AnCi1BV0s9JyRBV0snCi10ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3awotX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSMgVGhlIGRlZmF1bHQgbGlzdHMgYXBwbHkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBhbnkgZmlsZS4KLWFjX25lZWRfZGVmYXVsdHM9Ogotd2hpbGUgdGVzdCAkIyAhPSAwCi1kbwotICBjYXNlICQxIGluCi0gIC0tKj0/KikKLSAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAotICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdYW149XSo9XCguKlwpJ2AKLSAgICBhY19zaGlmdD06Ci0gICAgOzsKLSAgLS0qPSkKLSAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAotICAgIGFjX29wdGFyZz0KLSAgICBhY19zaGlmdD06Ci0gICAgOzsKLSAgKikKLSAgICBhY19vcHRpb249JDEKLSAgICBhY19vcHRhcmc9JDIKLSAgICBhY19zaGlmdD1zaGlmdAotICAgIDs7Ci0gIGVzYWMKLQotICBjYXNlICRhY19vcHRpb24gaW4KLSAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KLSAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCi0gICAgYWNfY3NfcmVjaGVjaz06IDs7Ci0gIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKLSAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7Ci0gIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCi0gICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7Ci0gIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCi0gICAgZGVidWc9OiA7OwotICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQotICAgICRhY19zaGlmdAotICAgIGNhc2UgJGFjX29wdGFyZyBpbgotICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7Ci0gICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7Ci0gICAgZXNhYwotICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCi0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7Ci0gIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKLSAgICAkYWNfc2hpZnQKLSAgICBjYXNlICRhY19vcHRhcmcgaW4KLSAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwotICAgIGVzYWMKLSAgICBhc19mbl9hcHBlbmQgQ09ORklHX0hFQURFUlMgIiAnJGFjX29wdGFyZyciCi0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7Ci0gIC0taGUgfCAtLWgpCi0gICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKLSAgICBhc19mbl9lcnJvciAkPyAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7Ci0gIC0taGVscCB8IC0taGVsIHwgLWggKQotICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7Ci0gIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCi0gIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKLSAgICBhY19jc19zaWxlbnQ9OiA7OwotCi0gICMgVGhpcyBpcyBhbiBlcnJvci4KLSAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJwotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7Ci0KLSAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCi0gICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKLQotICBlc2FjCi0gIHNoaWZ0Ci1kb25lCi0KLWFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQotCi1pZiAkYWNfY3Nfc2lsZW50OyB0aGVuCi0gIGV4ZWMgNj4vZGV2L251bGwKLSAgYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9IiRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLXNpbGVudCIKLWZpCi0KLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1pZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KLSAgc2V0IFggJFNIRUxMICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KLSAgc2hpZnQKLSAgXCRhc19lY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCQqIiA+JjYKLSAgQ09ORklHX1NIRUxMPSckU0hFTEwnCi0gIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgZXhlYyAiXCRAIgotZmkKLQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1leGVjIDU+PmNvbmZpZy5sb2cKLXsKLSAgZWNobwotICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAotIyMgUnVubmluZyAkYXNfbWUuICMjCi1fQVNCT1gKLSAgJGFzX2VjaG8gIiRhY19sb2ciCi19ID4mNQotCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotIwotIyBJTklULUNPTU1BTkRTCi0jCi1BTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiCi0KLQotIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKLSMgaWYgQ0RQQVRIIGlzIHNldC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JwotZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JwotZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKLW1hY3JvX3ZlcnNpb249J2AkRUNITyAiJG1hY3JvX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbWFjcm9fcmV2aXNpb249J2AkRUNITyAiJG1hY3JvX3JldmlzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUFTPSdgJEVDSE8gIiRBUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1ETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLU9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZW5hYmxlX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfc2hhcmVkPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXBpY19tb2RlPSdgJEVDSE8gIiRwaWNfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfZmFzdF9pbnN0YWxsPSdgJEVDSE8gIiRlbmFibGVfZmFzdF9pbnN0YWxsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPSdgJEVDSE8gIiRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1TSEVMTD0nYCRFQ0hPICIkU0hFTEwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotRUNITz0nYCRFQ0hPICIkRUNITyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1QQVRIX1NFUEFSQVRPUj0nYCRFQ0hPICIkUEFUSF9TRVBBUkFUT1IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaG9zdF9hbGlhcz0nYCRFQ0hPICIkaG9zdF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1ob3N0PSdgJEVDSE8gIiRob3N0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhvc3Rfb3M9J2AkRUNITyAiJGhvc3Rfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYnVpbGRfYWxpYXM9J2AkRUNITyAiJGJ1aWxkX2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWJ1aWxkPSdgJEVDSE8gIiRidWlsZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1idWlsZF9vcz0nYCRFQ0hPICIkYnVpbGRfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotU0VEPSdgJEVDSE8gIiRTRUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotWHNlZD0nYCRFQ0hPICIkWHNlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1HUkVQPSdgJEVDSE8gIiRHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUVHUkVQPSdgJEVDSE8gIiRFR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1GR1JFUD0nYCRFQ0hPICIkRkdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotTEQ9J2AkRUNITyAiJExEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLU5NPSdgJEVDSE8gIiROTSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1MTl9TPSdgJEVDSE8gIiRMTl9TIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW1heF9jbWRfbGVuPSdgJEVDSE8gIiRtYXhfY21kX2xlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1hY19vYmpleHQ9J2AkRUNITyAiJGFjX29iamV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXdhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1BUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLVNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1SQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0nYCRFQ0hPICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUNDPSdgJEVDSE8gIiRDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1DRkxBR1M9J2AkRUNITyAiJENGTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1jb21waWxlcj0nYCRFQ0hPICIkY29tcGlsZXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotR0NDPSdgJEVDSE8gIiRHQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3Zfbm1faW50ZXJmYWNlPSdgJEVDSE8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3ZfdHJ1bmNhdGVfYmluPSdgJEVDSE8gIiRsdF9jdl90cnVuY2F0ZV9iaW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1NQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLURTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1OTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1MSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLU9UT09MPSdgJEVDSE8gIiRPVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1PVE9PTDY0PSdgJEVDSE8gIiRPVE9PTDY0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWxpYmV4dD0nYCRFQ0hPICIkbGliZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNocmV4dF9jbWRzPSdgJEVDSE8gIiRzaHJleHRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWNvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVfY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbW9kdWxlX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW1vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXdpdGhfZ251X2xkPSdgJEVDSE8gIiR3aXRoX2dudV9sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1hbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9kaXJlY3Q9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9taW51c19MPSdgJEVDSE8gIiRoYXJkY29kZV9taW51c19MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1saW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW5lZWRfdmVyc2lvbj0nYCRFQ0hPICIkbmVlZF92ZXJzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXZlcnNpb25fdHlwZT0nYCRFQ0hPICIkdmVyc2lvbl90eXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXJ1bnBhdGhfdmFyPSdgJEVDSE8gIiRydW5wYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRzaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0nYCRFQ0hPICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWxpYm5hbWVfc3BlYz0nYCRFQ0hPICIkbGlibmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWxpYnJhcnlfbmFtZXNfc3BlYz0nYCRFQ0hPICIkbGlicmFyeV9uYW1lc19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNvbmFtZV9zcGVjPSdgJEVDSE8gIiRzb25hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1pbnN0YWxsX292ZXJyaWRlX21vZGU9J2AkRUNITyAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXBvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWZpbmlzaF9jbWRzPSdgJEVDSE8gIiRmaW5pc2hfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1maW5pc2hfZXZhbD0nYCRFQ0hPICIkZmluaXNoX2V2YWwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfaW50b19saWJzPSdgJEVDSE8gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aD0nYCRFQ0hPICIkY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSdgJEVDSE8gIiRjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2FjdGlvbj0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWVuYWJsZV9kbG9wZW49J2AkRUNITyAiJGVuYWJsZV9kbG9wZW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZW5hYmxlX2Rsb3Blbl9zZWxmPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGYiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vbGRfc3RyaXBsaWI9J2AkRUNITyAiJG9sZF9zdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1zdHJpcGxpYj0nYCRFQ0hPICIkc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcHJlZGVwX29iamVjdHM9J2AkRUNITyAiJHByZWRlcF9vYmplY3RzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXBvc3RkZXBfb2JqZWN0cz0nYCRFQ0hPICIkcG9zdGRlcF9vYmplY3RzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXByZWRlcHM9J2AkRUNITyAiJHByZWRlcHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcG9zdGRlcHM9J2AkRUNITyAiJHBvc3RkZXBzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUxEX0NYWD0nYCRFQ0hPICIkTERfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXJlbG9hZF9mbGFnX0NYWD0nYCRFQ0hPICIkcmVsb2FkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXJlbG9hZF9jbWRzX0NYWD0nYCRFQ0hPICIkcmVsb2FkX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1jb21waWxlcl9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1HQ0NfQ1hYPSdgJEVDSE8gIiRHQ0NfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1tb2R1bGVfY21kc19DWFg9J2AkRUNITyAiJG1vZHVsZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIiRtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXdpdGhfZ251X2xkX0NYWD0nYCRFQ0hPICIkd2l0aF9nbnVfbGRfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nYCRFQ0hPICIkbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfZGlyZWN0X0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX21pbnVzX0xfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9taW51c19MX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfYXV0b21hdGljX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1pbmhlcml0X3JwYXRoX0NYWD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWV4Y2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wcmVsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXBvc3RsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1maWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9hY3Rpb25fQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcHJlZGVwX29iamVjdHNfQ1hYPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcG9zdGRlcF9vYmplY3RzX0NYWD0nYCRFQ0hPICIkcG9zdGRlcF9vYmplY3RzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wcmVkZXBzX0NYWD0nYCRFQ0hPICIkcHJlZGVwc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcG9zdGRlcHNfQ1hYPSdgJEVDSE8gIiRwb3N0ZGVwc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0KLUxUQ0M9JyRMVENDJwotTFRDRkxBR1M9JyRMVENGTEFHUycKLWNvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKLQotIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgotZnVuY19mYWxsYmFja19lY2hvICgpCi17Ci0gIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCi1cJDEKLV9MVEVDSE9fRU9GJwotfQotCi0jIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgotZm9yIHZhciBpbiBBUyBcCi1ETExUT09MIFwKLU9CSkRVTVAgXAotU0hFTEwgXAotRUNITyBcCi1QQVRIX1NFUEFSQVRPUiBcCi1TRUQgXAotR1JFUCBcCi1FR1JFUCBcCi1GR1JFUCBcCi1MRCBcCi1OTSBcCi1MTl9TIFwKLWx0X1NQMk5MIFwKLWx0X05MMlNQIFwKLXJlbG9hZF9mbGFnIFwKLWRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKLWZpbGVfbWFnaWNfY21kIFwKLWZpbGVfbWFnaWNfZ2xvYiBcCi13YW50X25vY2FzZWdsb2IgXAotc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAotQVIgXAotQVJfRkxBR1MgXAotYXJjaGl2ZXJfbGlzdF9zcGVjIFwKLVNUUklQIFwKLVJBTkxJQiBcCi1DQyBcCi1DRkxBR1MgXAotY29tcGlsZXIgXAotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQgXAotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCi1sdF9jdl9ubV9pbnRlcmZhY2UgXAotbm1fZmlsZV9saXN0X3NwZWMgXAotbHRfY3ZfdHJ1bmNhdGVfYmluIFwKLWx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKLWx0X3Byb2dfY29tcGlsZXJfcGljIFwKLWx0X3Byb2dfY29tcGlsZXJfd2wgXAotbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAotbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAotbmVlZF9sb2NrcyBcCi1NQU5JRkVTVF9UT09MIFwKLURTWU1VVElMIFwKLU5NRURJVCBcCi1MSVBPIFwKLU9UT09MIFwKLU9UT09MNjQgXAotc2hyZXh0X2NtZHMgXAotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKLWNvbXBpbGVyX25lZWRzX29iamVjdCBcCi13aXRoX2dudV9sZCBcCi1hbGxvd191bmRlZmluZWRfZmxhZyBcCi1ub191bmRlZmluZWRfZmxhZyBcCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAotZXhjbHVkZV9leHBzeW1zIFwKLWluY2x1ZGVfZXhwc3ltcyBcCi1maWxlX2xpc3Rfc3BlYyBcCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBcCi1saWJuYW1lX3NwZWMgXAotbGlicmFyeV9uYW1lc19zcGVjIFwKLXNvbmFtZV9zcGVjIFwKLWluc3RhbGxfb3ZlcnJpZGVfbW9kZSBcCi1maW5pc2hfZXZhbCBcCi1vbGRfc3RyaXBsaWIgXAotc3RyaXBsaWIgXAotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIFwKLXByZWRlcF9vYmplY3RzIFwKLXBvc3RkZXBfb2JqZWN0cyBcCi1wcmVkZXBzIFwKLXBvc3RkZXBzIFwKLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCBcCi1MRF9DWFggXAotcmVsb2FkX2ZsYWdfQ1hYIFwKLWNvbXBpbGVyX0NYWCBcCi1sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAotbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIFwKLWx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCi1sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFggXAotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFggXAotY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCBcCi13aXRoX2dudV9sZF9DWFggXAotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKLW5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCi1leGNsdWRlX2V4cHN5bXNfQ1hYIFwKLWluY2x1ZGVfZXhwc3ltc19DWFggXAotZmlsZV9saXN0X3NwZWNfQ1hYIFwKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFggXAotcHJlZGVwX29iamVjdHNfQ1hYIFwKLXBvc3RkZXBfb2JqZWN0c19DWFggXAotcHJlZGVwc19DWFggXAotcG9zdGRlcHNfQ1hYIFwKLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg7IGRvCi0gICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCi0gICAgKltcXFxcXFxcYFxcIlxcXCRdKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotZG9uZQotCi0jIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi1mb3IgdmFyIGluIHJlbG9hZF9jbWRzIFwKLW9sZF9wb3N0aW5zdGFsbF9jbWRzIFwKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotb2xkX2FyY2hpdmVfY21kcyBcCi1leHRyYWN0X2V4cHN5bXNfY21kcyBcCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKLWFyY2hpdmVfY21kcyBcCi1hcmNoaXZlX2V4cHN5bV9jbWRzIFwKLW1vZHVsZV9jbWRzIFwKLW1vZHVsZV9leHBzeW1fY21kcyBcCi1leHBvcnRfc3ltYm9sc19jbWRzIFwKLXByZWxpbmtfY21kcyBcCi1wb3N0bGlua19jbWRzIFwKLXBvc3RpbnN0YWxsX2NtZHMgXAotcG9zdHVuaW5zdGFsbF9jbWRzIFwKLWZpbmlzaF9jbWRzIFwKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCi1jb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoIFwKLWNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGggXAotcmVsb2FkX2NtZHNfQ1hYIFwKLW9sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIFwKLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCBcCi1hcmNoaXZlX2NtZHNfQ1hYIFwKLWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIFwKLW1vZHVsZV9jbWRzX0NYWCBcCi1tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIFwKLWV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKLXByZWxpbmtfY21kc19DWFggXAotcG9zdGxpbmtfY21kc19DWFg7IGRvCi0gICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCi0gICAgKltcXFxcXFxcYFxcIlxcXCRdKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotZG9uZQotCi1hY19hdXhfZGlyPSckYWNfYXV4X2RpcicKLQotIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCi0jIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgotaWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KLSAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi1maQotCi0KLSAgICBQQUNLQUdFPSckUEFDS0FHRScKLSAgICBWRVJTSU9OPSckVkVSU0lPTicKLSAgICBSTT0nJFJNJwotICAgIG9maWxlPSckb2ZpbGUnCi0KLQotCi0KLQotIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQotICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0Ci0gICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgotICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCi0gICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgotICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKLQotIyB2YXJpYWJsZXMgZm9yIGNyZWF0ZSBzdGRpbnQuaCByZXBsYWNlbWVudAotUEFDS0FHRT0iJFBBQ0tBR0UiCi1WRVJTSU9OPSIkVkVSU0lPTiIKLWFjX3N0ZGludF9oPSIkYWNfc3RkaW50X2giCi1fYWNfc3RkaW50X2g9YCRhc19lY2hvICJfJFBBQ0tBR0UtJGFjX3N0ZGludF9oIiB8ICRhc190cl9jcHBgCi1hY19jdl9zdGRpbnRfbWVzc2FnZT0iJGFjX2N2X3N0ZGludF9tZXNzYWdlIgotYWNfY3ZfaGVhZGVyX3N0ZGludF90PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF90IgotYWNfY3ZfaGVhZGVyX3N0ZGludF94PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF94IgotYWNfY3ZfaGVhZGVyX3N0ZGludF9vPSIkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIgotYWNfY3ZfaGVhZGVyX3N0ZGludF91PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF91IgotYWNfY3ZfdHlwZV91aW50NjRfdD0iJGFjX2N2X3R5cGVfdWludDY0X3QiCi1hY19jdl90eXBlX3VfaW50NjRfdD0iJGFjX2N2X3R5cGVfdV9pbnQ2NF90IgotYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsIgotYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsIgotYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90PSIkYWNfY3ZfdHlwZV9pbnRfbGVhc3QzMl90IgotYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3Q9IiRhY19jdl90eXBlX2ludF9mYXN0MzJfdCIKLWFjX2N2X3R5cGVfaW50bWF4X3Q9IiRhY19jdl90eXBlX2ludG1heF90IgotCi0KLV9BQ0VPRgotCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0KLSMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgotZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCi1kbwotICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCi0gICAgImNvbmZpZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb25maWcuaCIgOzsKLSAgICAiZGVwZmlsZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7Ci0gICAgImxpYnRvb2wiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKLSAgICAicG8tZGlyZWN0b3JpZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgcG8tZGlyZWN0b3JpZXMiIDs7Ci0gICAgIiRhY19zdGRpbnRfaCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyAkYWNfc3RkaW50X2giIDs7Ci0gICAgIk1ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OwotICAgICJkYXRhL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRhdGEvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9nc3Rjb25maWcuaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvZ3N0Y29uZmlnLmgiIDs7Ci0gICAgImdzdC9nc3R2ZXJzaW9uLmgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2dzdHZlcnNpb24uaCIgOzsKLSAgICAiZ3N0L3BhcnNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9wYXJzZS9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L3ByaW50Zi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvcHJpbnRmL01ha2VmaWxlIiA7OwotICAgICJsaWJzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnMvTWFrZWZpbGUiIDs7Ci0gICAgImxpYnMvZ3N0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnMvZ3N0L01ha2VmaWxlIiA7OwotICAgICJsaWJzL2dzdC9iYXNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUiIDs7Ci0gICAgImxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlIiA7OwotICAgICJsaWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZSIgOzsKLSAgICAibGlicy9nc3QvY2hlY2svaW50ZXJuYWwtY2hlY2suaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL2dzdC9jaGVjay9pbnRlcm5hbC1jaGVjay5oOmxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW4iIDs7Ci0gICAgImxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZSIgOzsKLSAgICAibGlicy9nc3QvaGVscGVycy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlIiA7OwotICAgICJsaWJzL2dzdC9uZXQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicy9nc3QvbmV0L01ha2VmaWxlIiA7OwotICAgICJwbHVnaW5zL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBsdWdpbnMvTWFrZWZpbGUiIDs7Ci0gICAgInBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZSIgOzsKLSAgICAicGx1Z2lucy90cmFjZXJzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZSIgOzsKLSAgICAicG8vTWFrZWZpbGUuaW4iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcG8vTWFrZWZpbGUuaW4iIDs7Ci0gICAgInRlc3RzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL01ha2VmaWxlIiA7OwotICAgICJ0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2NoZWNrL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2NoZWNrL01ha2VmaWxlIiA7OwotICAgICJ0ZXN0cy9taXNjL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL21pc2MvTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlIiA7OwotICAgICJ0ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvbWVtb3J5L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL21lbW9yeS9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvbmV0Y2xvY2svTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvbmV0Y2xvY2svTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL3B0cC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9wdHAvTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL3N0cmVhbWlkZGVtdXgvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvc3RyZWFtaWRkZW11eC9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlIiA7OwotICAgICJ0b29scy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0b29scy9NYWtlZmlsZSIgOzsKLSAgICAiY29tbW9uL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGNvbW1vbi9NYWtlZmlsZSIgOzsKLSAgICAiY29tbW9uL200L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGNvbW1vbi9tNC9NYWtlZmlsZSIgOzsKLSAgICAiZG9jcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL01ha2VmaWxlIiA7OwotICAgICJkb2NzL2Rlc2lnbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL2Rlc2lnbi9NYWtlZmlsZSIgOzsKLSAgICAiZG9jcy9mYXEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9mYXEvTWFrZWZpbGUiIDs7Ci0gICAgImRvY3MvZ3N0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3MvZ3N0L01ha2VmaWxlIiA7OwotICAgICJkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzIiA7OwotICAgICJkb2NzL2xpYnMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9saWJzL01ha2VmaWxlIiA7OwotICAgICJkb2NzL3BsdWdpbnMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9wbHVnaW5zL01ha2VmaWxlIiA7OwotICAgICJkb2NzL21hbnVhbC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL21hbnVhbC9NYWtlZmlsZSIgOzsKLSAgICAiZG9jcy9wd2cvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jcy9wd2cvTWFrZWZpbGUiIDs7Ci0gICAgImRvY3Mvc2xpZGVzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3Mvc2xpZGVzL01ha2VmaWxlIiA7OwotICAgICJkb2NzL3hzbC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL3hzbC9NYWtlZmlsZSIgOzsKLSAgICAiZG9jcy92ZXJzaW9uLmVudGl0aWVzIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3MvdmVyc2lvbi5lbnRpdGllcyIgOzsKLSAgICAibTQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbTQvTWFrZWZpbGUiIDs7Ci0gICAgInBrZ2NvbmZpZy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvTWFrZWZpbGUiIDs7Ci0gICAgInN0YW1wLmgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc3RhbXAuaCIgOzsKLSAgICAicGtnY29uZmlnL2dzdHJlYW1lci5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvZ3N0cmVhbWVyLnBjIiA7OwotICAgICJwa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMiIDs7Ci0gICAgInBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UucGMiIDs7Ci0gICAgInBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMiIDs7Ci0gICAgInBrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2sucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYyIgOzsKLSAgICAicGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjIiA7OwotICAgICJwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXIucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLnBjIiA7OwotICAgICJwa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjIiA7OwotICAgICJwa2djb25maWcvZ3N0cmVhbWVyLW5ldC5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvZ3N0cmVhbWVyLW5ldC5wYyIgOzsKLSAgICAicGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMiIDs7Ci0gICAgImdzdHJlYW1lci5zcGVjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdHJlYW1lci5zcGVjIiA7OwotCi0gICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwotICBlc2FjCi1kb25lCi0KLQotIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAotIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCi0jIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5Ci0jIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgotaWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KLSAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKLSAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKLSAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKLWZpCi0KLSMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQotIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAotIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zLgotIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgotIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgotIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9yZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuCi0kZGVidWcgfHwKLXsKLSAgdG1wPSBhY190bXA9Ci0gIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/Ci0gIDogIiR7YWNfdG1wOj0kdG1wfSIKLSAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKLScgMAotICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQotfQotIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCi0KLXsKLSAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCi0gIHRlc3QgLWQgIiR0bXAiCi19ICB8fAotewotICB0bXA9Li9jb25mJCQtJFJBTkRPTQotICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKLX0gfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1Ci1hY190bXA9JHRtcAotCi0jIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCi0jIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgotIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCi1pZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgotCi0KLWFjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKLSMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KLSMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcwotIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KLWlmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgotICBldmFsIGFjX2NyPVwkXCdcXHJcJwotZmkKLWFjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKLWlmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCi0gIGFjX2NzX2F3a19jcj0nXFxyJwotZWxzZQotICBhY19jc19hd2tfY3I9JGFjX2NyCi1maQotCi1lY2hvICdCRUdJTiB7JyA+IiRhY190bXAvc3ViczEuYXdrIiAmJgotX0FDRU9GCi0KLQotewotICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgotICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCi0gIGVjaG8gIl9BQ0VPRiIKLX0gPmNvbmYkJHN1YnMuc2ggfHwKLSAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQotYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKLWFjX2RlbGltPSclIV8hIyAnCi1mb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KLSAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKLSAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1Ci0KLSAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKLSAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KLSAgICBicmVhawotICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKLSAgZWxzZQotICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCi0gIGZpCi1kb25lCi1ybSAtZiBjb25mJCRzdWJzLnNoCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgotX0FDRU9GCi1zZWQgLW4gJwotaAotcy9eL1NbIi87IHMvIS4qLyJdPS8KLXAKLWcKLXMvXlteIV0qIS8vCi06cmVwbAotdCByZXBsCi1zLyciJGFjX2RlbGltIickLy8KLXQgZGVsaW0KLTpubAotaAotcy9cKC5cezE0OFx9XCkuLiovXDEvCi10IG1vcmUxCi1zL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCi1wCi1uCi1iIHJlcGwKLTptb3JlMQotcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLwotcAotZwotcy8uXHsxNDhcfS8vCi10IG5sCi06ZGVsaW0KLWgKLXMvXCguXHsxNDhcfVwpLi4qL1wxLwotdCBtb3JlMgotcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KLXAKLWIKLTptb3JlMgotcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLwotcAotZwotcy8uXHsxNDhcfS8vCi10IGRlbGltCi0nIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCi0vXlteIiJdL3sKLSAgTgotICBzL1xuLy8KLX0KLScgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKLXJtIC1mIGNvbmYkJHN1YnMuYXdrCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLV9BQ0FXSwotY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKLSAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKLSAgRlMgPSAiByIKLQotfQotewotICBsaW5lID0gJCAwCi0gIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQotICBzdWJzdGVkID0gMAotICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCi0gIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBpKyspIHsKLSAgICBrZXkgPSBmaWVsZFtpXQotICAgIGtleWxlbiA9IGxlbmd0aChrZXkpCi0gICAgaWYgKFNfaXNfc2V0W2tleV0pIHsKLSAgICAgIHZhbHVlID0gU1trZXldCi0gICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxlbiArIDMpCi0gICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQotICAgICAgc3Vic3RlZCA9IDEKLSAgICB9IGVsc2UKLSAgICAgIGxlbiArPSAxICsga2V5bGVuCi0gIH0KLQotICBwcmludCBsaW5lCi19Ci0KLV9BQ0FXSwotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1pZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKLWVsc2UKLSAgY2F0Ci1maSA8ICIkYWNfdG1wL3N1YnMxLmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXAotICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1Ci1fQUNFT0YKLQotIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKLSMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKLSMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5Ci0jIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCi1pZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgotICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSovewotaAotcy8vLwotcy9eLzovCi1zL1sJIF0qJC86Lwotcy86XCQoc3JjZGlyKTovOi9nCi1zLzpcJHtzcmNkaXJ9Oi86L2cKLXMvOkBzcmNkaXJAOi86L2cKLXMvXjoqLy8KLXMvOiokLy8KLXgKLXMvXCg9WwkgXSpcKS4qL1wxLwotRwotcy9cbi8vCi1zL15bXj1dKj1bCSBdKiQvLwotfScKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKLQotIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCi0jIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCi0jIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KLWlmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KLWNhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAotQkVHSU4gewotX0FDRU9GCi0KLSMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCi0jIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCi0jIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCi0KLSMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKLSMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KLWFjX2RlbGltPSclIV8hIyAnCi1mb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KLSAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAotICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCi0gICAgYnJlYWsKLSAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQotICBlbHNlCi0gICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKLSAgZmkKLWRvbmUKLQotIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCi0jIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKLSMgbmV3bGluZSBzZXF1ZW5jZXMuCi0KLWFjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCi1zZWQgLW4gJwotcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCi10IHJzZXQKLTpyc2V0Ci1zL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwotdCBkZWYKLWQKLTpkZWYKLXMvXFwkLy8KLXQgYnNubAotcy9bIlxcXS9cXCYvZwotcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCi1EWyJcMSJdPSIgXDMiL3AKLXMvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCi1kCi06YnNubAotcy9bIlxcXS9cXCYvZwotcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCi1EWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKLXQgY29udAotcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKLXQgY29udAotZAotOmNvbnQKLW4KLXMvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwotdCBjbGVhcgotOmNsZWFyCi1zL1xcJC8vCi10IGJzbmxjCi1zL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKLWQKLTpic25sYwotcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCi1iIGNvbnQKLScgPGNvbmZkZWZzLmggfCBzZWQgJwotcy8nIiRhY19kZWxpbSInLyJcXFwKLSIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0gIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCi0gIEZTID0gIgciCi19Ci0vXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKLSAgbGluZSA9IFwkIDAKLSAgc3BsaXQobGluZSwgYXJnLCAiICIpCi0gIGlmIChhcmdbMV0gPT0gIiMiKSB7Ci0gICAgZGVmdW5kZWYgPSBhcmdbMl0KLSAgICBtYWMxID0gYXJnWzNdCi0gIH0gZWxzZSB7Ci0gICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQotICAgIG1hYzEgPSBhcmdbMl0KLSAgfQotICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCi0gIG1hY3JvID0gbWFjMlsxXQotICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKLSAgaWYgKERfaXNfc2V0W21hY3JvXSkgewotICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCi0gICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQotICAgIG5leHQKLSAgfSBlbHNlIHsKLSAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCi0gICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAotICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgotICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7Ci0gICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCi0gICAgICBuZXh0Ci0gICAgfQotICB9Ci19Ci17IHByaW50IH0KLV9BQ0FXSwotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQotZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCi0KLQotZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKLXNoaWZ0Ci1mb3IgYWNfdGFnCi1kbwotICBjYXNlICRhY190YWcgaW4KLSAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KLSAgOltGSExdKjoqKTs7Ci0gIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OwotICA6W0ZIXS0pIGFjX3RhZz0tOi07OwotICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OwotICBlc2FjCi0gIGFjX3NhdmVfSUZTPSRJRlMKLSAgSUZTPToKLSAgc2V0IHggJGFjX3RhZwotICBJRlM9JGFjX3NhdmVfSUZTCi0gIHNoaWZ0Ci0gIGFjX2ZpbGU9JDEKLSAgc2hpZnQKLQotICBjYXNlICRhY19tb2RlIGluCi0gIDpMKSBhY19zb3VyY2U9JDE7OwotICA6W0ZIXSkKLSAgICBhY19maWxlX2lucHV0cz0KLSAgICBmb3IgYWNfZgotICAgIGRvCi0gICAgICBjYXNlICRhY19mIGluCi0gICAgICAtKSBhY19mPSIkYWNfdG1wL3N0ZGluIjs7Ci0gICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQotCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKLQkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KLQkgdGVzdCAtZiAiJGFjX2YiIHx8Ci0JICAgY2FzZSAkYWNfZiBpbgotCSAgIFtcXC8kXSopIGZhbHNlOzsKLQkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7Ci0JICAgZXNhYyB8fAotCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7Ci0gICAgICBlc2FjCi0gICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCi0gICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgotICAgIGRvbmUKLQotICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0Ci0gICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgotICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCi0gICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAotCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCi0JYCcgYnkgY29uZmlndXJlLicKLSAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Ci0gICAgZmkKLSAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgotICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAotICAgICpcJiogfCAqXHwqIHwgKlxcKiApCi0gICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8Ci0gICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCi0gICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkYWNfdGFnIGluCi0gICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKLSAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0KLSAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8Ci0kYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCi0gIGFjX2J1aWxkZGlyPS4KLQotY2FzZSAiJGFjX2RpciIgaW4KLS4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OwotKikKLSAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKLSAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKLSAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgotICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Ci0gICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OwotICBlc2FjIDs7Ci1lc2FjCi1hY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKLWFjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKLSMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6Ci1hY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKLQotY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KLSAgICBhY19zcmNkaXI9LgotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKLSAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KLSAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OwotICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgotICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBuYW1lLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCi0gICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Ci1lc2FjCi1hY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4Ci0KLQotICBjYXNlICRhY19tb2RlIGluCi0gIDpGKQotICAjCi0gICMgQ09ORklHX0ZJTEUKLSAgIwotCi0gIGNhc2UgJElOU1RBTEwgaW4KLSAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OwotICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRfcHJlZml4JElOU1RBTEwgOzsKLSAgZXNhYwotICBhY19NS0RJUl9QPSRNS0RJUl9QCi0gIGNhc2UgJE1LRElSX1AgaW4KLSAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKLSAgKi8qKSBhY19NS0RJUl9QPSRhY190b3BfYnVpbGRfcHJlZml4JE1LRElSX1AgOzsKLSAgZXNhYwotX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KLSMgRklYTUU6IFRoaXMgaGFjayBzaG91bGQgYmUgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZnRlciAyLjYwLgotYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49Ci1hY19zZWRfZGF0YXJvb3Q9JwotL2RhdGFyb290ZGlyLyB7Ci0gIHAKLSAgcQotfQotL0BkYXRhZGlyQC9wCi0vQGRvY2RpckAvcAotL0BpbmZvZGlyQC9wCi0vQGxvY2FsZWRpckAvcAotL0BtYW5kaXJAL3AnCi1jYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCi0qZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7Ci0qQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCi0gIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKLSAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKLSAgcyZAaW5mb2RpckAmJGluZm9kaXImZwotICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZwotICBzJkBtYW5kaXJAJiRtYW5kaXImZwotICBzJlxcXCR7ZGF0YXJvb3RkaXJ9JiRkYXRhcm9vdGRpciZnJyA7OwotZXNhYwotX0FDRU9GCi0KLSMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KLSMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgotIyBGSVhNRTogZG8gd2UgcmVhbGx5IHdhbnQgdG8gbWFpbnRhaW4gdGhpcyBmZWF0dXJlPwotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1hY19zZWRfZXh0cmE9IiRhY192cHN1YgotJGV4dHJhc3ViCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLTp0Ci0vQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCi1zfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0Ci1zJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKLXMmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKLXMmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0Ci1zJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0Ci1zJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0Ci1zJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKLXMmQGJ1aWxkZGlyQCYkYWNfYnVpbGRkaXImO3QgdAotcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKLXMmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKLXMmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKLXMmQE1LRElSX1BAJiRhY19NS0RJUl9QJjt0IHQKLSRhY19kYXRhcm9vdGRpcl9oYWNrCi0iCi1ldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkYWNfdG1wL3N1YnMuYXdrIiBcCi0gID4kYWNfdG1wL291dCB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKLQotdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKLSAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJGFjX3RtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKLSAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgXAotICAgICAgIiRhY190bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCi13aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCi13aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mMjt9Ci0KLSAgcm0gLWYgIiRhY190bXAvc3RkaW4iCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgLSkgY2F0ICIkYWNfdG1wL291dCIgJiYgcm0gLWYgIiRhY190bXAvb3V0Ijs7Ci0gICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKLSAgZXNhYyBcCi0gIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQotIDs7Ci0gIDpIKQotICAjCi0gICMgQ09ORklHX0hFQURFUgotICAjCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICB7Ci0gICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKLSAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgotICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCi0gICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKLSAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiRhY190bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQotICAgIGVsc2UKLSAgICAgIHJtIC1mICIkYWNfZmlsZSIKLSAgICAgIG12ICIkYWNfdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKLQl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKLSAgICBmaQotICBlbHNlCi0gICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCi0gICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAotICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKLSAgZmkKLSMgQ29tcHV0ZSAiJGFjX2ZpbGUiJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgotX2FtX2FyZz0iJGFjX2ZpbGUiCi1fYW1fc3RhbXBfY291bnQ9MQotZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCi0gIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQotICAgICAgYnJlYWsgOzsKLSAgICAqICkKLSAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKLSAgZXNhYwotZG9uZQotZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmAkYXNfZGlybmFtZSAtLSAiJF9hbV9hcmciIHx8Ci0kYXNfZXhwciBYIiRfYW1fYXJnIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRfYW1fYXJnIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgiJF9hbV9hcmciIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAotIDs7Ci0KLSAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9Ci0gOzsKLSAgZXNhYwotCi0KLSAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCi0gICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCB7Ci0gICMgT2xkZXIgQXV0b2NvbmYgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcwotICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCi0gICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgotICBjYXNlICRDT05GSUdfRklMRVMgaW4KLSAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKLSAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7Ci0gIGVzYWMKLSAgc2hpZnQKLSAgZm9yIG1mCi0gIGRvCi0gICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLSAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAotICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCi0gICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkICdNYWtlZmlsZS5pbicsIGJ1dAotICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgotICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCi0gICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KLSAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQotICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgotICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgIGRpcnBhcnQ9YCRhc19kaXJuYW1lIC0tICIkbWYiIHx8Ci0kYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci0kYXNfZWNobyBYIiRtZiIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKVteL10uKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKSQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0gICAgZWxzZQotICAgICAgY29udGludWUKLSAgICBmaQotICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCi0gICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgJ21ha2UnLgotICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCi0gICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKLSAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgICB0ZXN0IC16ICIkYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCi0gICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKLSAgICAjIGV4cGFuc2lvbi4KLSAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAotCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJ2A7IGRvCi0gICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQotICAgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAotJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci0kYXNfZWNobyBYIiRmaWxlIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcjsgYXNfZm5fbWtkaXJfcAotICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKLSAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgotICAgIGRvbmUKLSAgZG9uZQotfQotIDs7Ci0gICAgImxpYnRvb2wiOkMpCi0KLSAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKLSAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCi0gICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICAgIGZpCi0KLSAgICBjZmdmaWxlPSR7b2ZpbGV9VAotICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICAgJFJNICIkY2ZnZmlsZSIKLQotICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotIyEgJFNIRUxMCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UpICRWRVJTSU9OCi0jIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KLQotIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgotCi0jIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLSMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLSMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdCBpcyBidWlsdAotIyB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgIHNhbWUKLSMgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotIwotIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0KLSMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9J0NYWCAnCi0KLSMgQ29uZmlndXJlZCBkZWZhdWx0cyBmb3Igc3lzX2xpYl9kbHNlYXJjaF9wYXRoIG11bmdpbmcuCi06IFwke0xUX1NZU19MSUJSQVJZX1BBVEg9IiRjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIn0KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKLQotIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/Ci1tYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCi1tYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KLQotIyBBc3NlbWJsZXIgcHJvZ3JhbS4KLUFTPSRsdF9BUwotCi0jIERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0kbHRfRExMVE9PTAotCi0jIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KLU9CSkRVTVA9JGx0X09CSkRVTVAKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBTaGFyZWQgYXJjaGl2ZSBtZW1iZXIgYmFzZW5hbWUsZm9yIGZpbGVuYW1lIGJhc2VkIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgb24gQUlYLgotc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9JHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjCi0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzLgotRUNITz0kbHRfRUNITwotCi0jIFRoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KLVBBVEhfU0VQQVJBVE9SPSRsdF9QQVRIX1NFUEFSQVRPUgotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCi1TRUQ9JGx0X1NFRAotCi0jIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgotWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKLQotIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KLUdSRVA9JGx0X0dSRVAKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KLUZHUkVQPSRsdF9GR1JFUAotCi0jIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgotTk09JGx0X05NCi0KLSMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9JGFjX29iamV4dAotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0kZXhlZXh0Ci0KLSMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KLWx0X3Vuc2V0PSRsdF91bnNldAotCi0jIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCi1TUDJOTD0kbHRfbHRfU1AyTkwKLQotIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgotTkwyU1A9JGx0X2x0X05MMlNQCi0KLSMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KLXRvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLQotIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KLXRvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLWZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCi0KLSMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKLQotIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgotc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi0KLSMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCi1hcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYwotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgotU1RSSVA9JGx0X1NUUklQCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIFdoZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbi4KLWxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0kbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0NGTEFHUwotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbnRvIGEgbGlzdCBvZiBzeW1ib2xzIHRvIG1hbnVhbGx5IHJlbG9jYXRlLgotZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKLQotIyBUaGUgbmFtZSBsaXN0ZXIgaW50ZXJmYWNlLgotbm1faW50ZXJmYWNlPSRsdF9sdF9jdl9ubV9pbnRlcmZhY2UKLQotIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCi1ubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKLQotIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIHdoZXJlIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KLWx0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKLQotIyBDb21tYW5kIHRvIHRydW5jYXRlIGEgYmluYXJ5IHBpcGUuCi1sdF90cnVuY2F0ZV9iaW49JGx0X2x0X2N2X3RydW5jYXRlX2JpbgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIi4KLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgTWFuaWZlc3QgdG9vbC4KLU1BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKLQotIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgotRFNZTVVUSUw9JGx0X0RTWU1VVElMCi0KLSMgVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFguCi1OTUVESVQ9JGx0X05NRURJVAotCi0jIFRvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFguCi1MSVBPPSRsdF9MSVBPCi0KLSMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFguCi1PVE9PTD0kbHRfT1RPT0wKLQotIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNC4KLU9UT09MNjQ9JGx0X09UT09MNjQKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9JGxpYmV4dAotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JGx0X3NocmV4dF9jbWRzCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCBsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0kbHRfdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsKLQotIyBEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUKLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzLgotaW5zdGFsbF9vdmVycmlkZV9tb2RlPSRsdF9pbnN0YWxsX292ZXJyaWRlX21vZGUKLQotIyBDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKLSMgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBEZXRlY3RlZCBydW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoCi0KLSMgRXhwbGljaXQgTFRfU1lTX0xJQlJBUllfUEFUSCBzZXQgZHVyaW5nIC4vY29uZmlndXJlIHRpbWUuCi1jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSRsdF9jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRAotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCi0KLSMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcgotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYwotCi0jIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgotY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcwotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZwotIyBhIHNoYXJlZCBhcmNoaXZlLgotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcwotCi0jIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KLXdpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCi0KLSMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCi0jIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCi0jIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwotIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwkc2hsaWJwYXRoX3ZhciBpZiB0aGUKLSMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCi1oYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQotCi0jIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCi0jIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCi0KLSMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKLSMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKLQotIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKLSMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKLSMgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCi0KLSMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKLSMgdG8gcnVudGltZSBwYXRoIGxpc3QuCi1pbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicwotCi0jIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwotCi0jIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgotcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKLQotIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgotcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcwotCi0jIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KLWZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bwotIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0cwotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHMKLXByZWRlcHM9JGx0X3ByZWRlcHMKLXBvc3RkZXBzPSRsdF9wb3N0ZGVwcwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAotCi0jICMjIyBFTkQgTElCVE9PTCBDT05GSUcKLQotX0xUX0VPRgotCi0gICAgY2F0IDw8J19MVF9FT0YnID4+ICIkY2ZnZmlsZSIKLQotIyAjIyMgQkVHSU4gRlVOQ1RJT05TIFNIQVJFRCBXSVRIIENPTkZJR1VSRQotCi0jIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IFZBUklBQkxFIFBBVEgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVkFSSUFCTEUgaXMgbmFtZSBvZiB2YXJpYWJsZSBjb250YWluaW5nIF9zcGFjZV8gc2VwYXJhdGVkIGxpc3Qgb2YKLSMgZGlyZWN0b3JpZXMgdG8gYmUgbXVuZ2VkIGJ5IHRoZSBjb250ZW50cyBvZiBQQVRILCB3aGljaCBpcyBzdHJpbmcKLSMgaGF2aW5nIGEgZm9ybWF0OgotIyAiRElSWzpESVJdOiIKLSMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFCi0jICI6RElSWzpESVJdIgotIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQotIyAiRElSUFs6RElSUF06OltESVJBOl1ESVJBIgotIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCi0jICAgICAgICJESVJBWyBESVJBXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQotIyAiRElSWzpESVJdIgotIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCi1mdW5jX211bmdlX3BhdGhfbGlzdCAoKQotewotICAgIGNhc2UgeCQyIGluCi0gICAgeCkKLSAgICAgICAgOzsKLSAgICAqOikKLSAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYCBcJCQxXCIKLSAgICAgICAgOzsKLSAgICB4OiopCi0gICAgICAgIGV2YWwgJDE9XCJcJCQxIGAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCi0gICAgICAgIDs7Ci0gICAgKjo6KikKLSAgICAgICAgZXZhbCAkMT1cIlwkJDFcIGAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvLio6Oi8vJyAtZSAncy86LyAvZydgXCIKLSAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvOjouKi8vJyAtZSAncy86LyAvZydgXCBcJCQxXCIKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgXCIKLSAgICAgICAgOzsKLSAgICBlc2FjCi19Ci0KLQotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1mdW5jX2NjX2Jhc2VuYW1lICgpCi17Ci0gICAgZm9yIGNjX3RlbXAgaW4gJCoiIjsgZG8KLSAgICAgIGNhc2UgJGNjX3RlbXAgaW4KLSAgICAgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgICAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgICAgICBcLSopIDs7Ci0gICAgICAgICopIGJyZWFrOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0gICAgZnVuY19jY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCi19Ci0KLQotIyAjIyMgRU5EIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKLQotX0xUX0VPRgotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KLSAgQ09MTEVDVF9OQU1FUz0KLSAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLWZpCi1fTFRfRU9GCi0gICAgOzsKLSAgZXNhYwotCi0KLWx0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKLQotCi0gICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgotICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCi0gICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCi0gICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/Ci0gIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLSAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLQotICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi0KLQotICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKLQotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX0NYWAotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWdfQ1hYCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHNfQ1hYCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfQ1hYCi0KLSMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9DWFgKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYCi0KLSMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCi1jb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFgKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFgKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfQ1hYCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0NYWAotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKLSMgYSBzaGFyZWQgYXJjaGl2ZS4KLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19DWFgKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0NYWAotCi0jIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KLXdpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZF9DWFgKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19DWFgKLQotIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWAotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWAotCi0jIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKLSMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9DWFgKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCi0jIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwotIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwkc2hsaWJwYXRoX3ZhciBpZiB0aGUKLSMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCi1oYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFgKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgotIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9DWFgKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgotIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgKLQotIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKLSMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKLSMgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0NYWAotCi0jIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCi0jIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgotaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aF9DWFgKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAotCi0jIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWAotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0NYWAotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19DWFgKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKLQotIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KLXByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzX0NYWAotCi0jIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCi1wb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzX0NYWAotCi0jIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KLWZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlY19DWFgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0NYWAotCi0jIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWAotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bwotIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19DWFgKLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0NYWAotcHJlZGVwcz0kbHRfcHJlZGVwc19DWFgKLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19DWFgKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYCi0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IENYWAotX0xUX0VPRgotCi0gOzsKLSAgICAicG8tZGlyZWN0b3JpZXMiOkMpCi0gICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKLSAgICAgIGNhc2UgIiRhY19maWxlIiBpbgotICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OwotICAgICAgZXNhYwotICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCi0gICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKLSAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCi0gICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKLSAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCi0gICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKLSAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgotICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCi0gICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKLSAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KLSAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7Ci0gICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7Ci0gICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKLSAgICAgICAgZXNhYwotICAgICAgICAjIFRyZWF0IGEgZGlyZWN0b3J5IGFzIGEgUE8gZGlyZWN0b3J5IGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBhCi0gICAgICAgICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBsZSBQTwotICAgICAgICAjIGRpcmVjdG9yaWVzIHVuZGVyIGRpZmZlcmVudCBuYW1lcyBvciBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgotICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCi0gICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgotICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKLSAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAotICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgotICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgotICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCi0gICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgotICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJwotICAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICMgVGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIHdhcyBnaXZlbiBpbiBjb25maWd1cmUuaW4uCi0gICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgotICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCi0gICAgICAgICAgZmkKLSAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQotICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCi0gICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCi0gICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQotICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKLSAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgotICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OwotICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgICBQT0ZJTEVTPQotICAgICAgICAgIFVQREFURVBPRklMRVM9Ci0gICAgICAgICAgRFVNTVlQT0ZJTEVTPQotICAgICAgICAgIEdNT0ZJTEVTPQotICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKLSAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKLSAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCi0gICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCi0gICAgICAgICAgZG9uZQotICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUwotICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gICAgICAgICAgSU5TVF9MSU5HVUFTPQotICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICAgICAgICAgIHVzZWl0PW5vCi0gICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbwotICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCi0gICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgotICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAotICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcwotICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgotICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KLSAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKLSAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZG9uZQotICAgICAgICAgIGZpCi0gICAgICAgICAgQ0FUQUxPR1M9Ci0gICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCi0gICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgotICAgICAgICAgICAgZG9uZQotICAgICAgICAgIGZpCi0gICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCi0gICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCi0gICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KLSAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KLSAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OwotICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OwotICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGRvbmUKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBkb25lIDs7Ci0gICAgIiRhY19zdGRpbnRfaCI6QykKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX3N0ZGludF9oIDogJF9hY19zdGRpbnRfaCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfc3RkaW50X2ggOiAkX2FjX3N0ZGludF9oIiA+JjY7fQotYWNfc3RkaW50PSR0bXAvX3N0ZGludC5oCi0KLWVjaG8gIiNpZm5kZWYiICRfYWNfc3RkaW50X2ggPiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUiICRfYWNfc3RkaW50X2ggIjEiID4+JGFjX3N0ZGludAotZWNobyAiI2lmbmRlZiIgX0dFTkVSQVRFRF9TVERJTlRfSCA+PiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUiIF9HRU5FUkFURURfU1RESU5UX0ggJyInJFBBQ0tBR0UgJFZFUlNJT04nIicgPj4kYWNfc3RkaW50Ci1lY2hvICIvKiBnZW5lcmF0ZWQgJGFjX2N2X3N0ZGludF9tZXNzYWdlICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF90IiAhPSAiXyIgOyB0aGVuCi1lY2hvICIjZGVmaW5lIF9TVERJTlRfSEFWRV9TVERJTlRfSCIgIjEiID4+JGFjX3N0ZGludAotZWNobyAiI2luY2x1ZGUgPHN0ZGludC5oPiIgPj4kYWNfc3RkaW50Ci1lY2hvICIjZW5kaWYiID4+JGFjX3N0ZGludAotZWNobyAiI2VuZGlmIiA+PiRhY19zdGRpbnQKLWVsc2UKLQotY2F0ID4+JGFjX3N0ZGludCA8PFNURElOVF9FT0YKLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLiBzaG9ydGNpcmN1aXQgcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSCB8fCBkZWZpbmVkIF9TVERJTlRfSEFWRV9TVERJTlRfSAotI2luY2x1ZGUgPHN0ZGludC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4gY29uZmlndXJlZCBwYXJ0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotU1RESU5UX0VPRgotCi1lY2hvICIvKiB3aGV0aGVyIHdlIGhhdmUgYSBDOTkgY29tcGF0aWJsZSBzdGRpbnQgaGVhZGVyIGZpbGUgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3giICE9ICJfIiA7IHRoZW4KLSAgYWNfaGVhZGVyPSIkYWNfY3ZfaGVhZGVyX3N0ZGludF94IgotICBlY2hvICIjZGVmaW5lIF9TVERJTlRfSEVBREVSX0lOVFBUUiIgJyInIiRhY19oZWFkZXIiJyInID4+JGFjX3N0ZGludAotZWxzZQotICBlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IRUFERVJfSU5UUFRSICovIiA+PiRhY19zdGRpbnQKLWZpCi0KLWVjaG8gIi8qIHdoZXRoZXIgd2UgaGF2ZSBhIEM5NiBjb21wYXRpYmxlIGludHR5cGVzIGhlYWRlciBmaWxlICovIiA+PiRhY19zdGRpbnQKLWlmICB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgIT0gIl8iIDsgdGhlbgotICBhY19oZWFkZXI9IiRhY19jdl9oZWFkZXJfc3RkaW50X28iCi0gIGVjaG8gIiNkZWZpbmUgX1NURElOVF9IRUFERVJfVUlOVDMyIiAnIiciJGFjX2hlYWRlciInIicgPj4kYWNfc3RkaW50Ci1lbHNlCi0gIGVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hFQURFUl9VSU5UMzIgKi8iID4+JGFjX3N0ZGludAotZmkKLQotZWNobyAiLyogd2hldGhlciB3ZSBoYXZlIGEgQlNEIGNvbXBhdGlibGUgaW5ldCB0eXBlcyBoZWFkZXIgKi8iID4+JGFjX3N0ZGludAotaWYgIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF91IiAhPSAiXyIgOyB0aGVuCi0gIGFjX2hlYWRlcj0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIKLSAgZWNobyAiI2RlZmluZSBfU1RESU5UX0hFQURFUl9VX0lOVDMyIiAnIiciJGFjX2hlYWRlciInIicgPj4kYWNfc3RkaW50Ci1lbHNlCi0gIGVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hFQURFUl9VX0lOVDMyICovIiA+PiRhY19zdGRpbnQKLWZpCi0KLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWlmIHRlc3QgIl8kYWNfaGVhZGVyIiAhPSAiXyIgOyB0aGVuIGlmIHRlc3QgIiRhY19oZWFkZXIiICE9ICJzdGRkZWYuaCIgOyB0aGVuCi0gIGVjaG8gIiNpbmNsdWRlIDwkYWNfaGVhZGVyPiIgPj4kYWNfc3RkaW50Ci0gIGVjaG8gIiIgPj4kYWNfc3RkaW50Ci1maSBmaQotCi1lY2hvICIvKiB3aGljaCA2NGJpdCB0eXBlZGVmIGhhcyBiZWVuIGZvdW5kICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIiRhY19jdl90eXBlX3VpbnQ2NF90IiA9ICJ5ZXMiIDsgdGhlbgotZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9VSU5UNjRfVCIgIjEiICA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfVUlOVDY0X1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWlmIHRlc3QgIiRhY19jdl90eXBlX3VfaW50NjRfdCIgPSAieWVzIiA7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfVV9JTlQ2NF9UIiAiMSIgID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9VX0lOVDY0X1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWVjaG8gIi8qIHdoaWNoIHR5cGUgbW9kZWwgaGFzIGJlZW4gZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiXyRhY19jdl9jaGFyX2RhdGFfbW9kZWwiICE9ICJfIiA7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0NIQVJfTU9ERUwiICIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsIiA+PiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0xPTkdfTU9ERUwiICIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsIiA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0NIQVJfTU9ERUwgLy8gc2tpcHBlZCAqLyIgPj4kYWNfc3RkaW50Ci1lY2hvICIvKiAjdW5kZWYgX1NURElOVF9MT05HX01PREVMIC8vIHNraXBwZWQgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWVjaG8gIi8qIHdoZXRoZXIgaW50X2xlYXN0IHR5cGVzIHdlcmUgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdCIgPSAieWVzIjsgdGhlbgotZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9JTlRfTEVBU1QzMl9UIiAiMSIgID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9JTlRfTEVBU1QzMl9UICovIiA+PiRhY19zdGRpbnQKLWZpCi1lY2hvICIvKiB3aGV0aGVyIGludF9mYXN0IHR5cGVzIHdlcmUgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50X2Zhc3QzMl90IiA9ICJ5ZXMiOyB0aGVuCi1lY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX0lOVF9GQVNUMzJfVCIgIjEiID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9JTlRfRkFTVDMyX1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIi8qIHdoZXRoZXIgaW50bWF4X3QgdHlwZSB3YXMgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50bWF4X3QiID0gInllcyI7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfSU5UTUFYX1QiICIxIiA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfSU5UTUFYX1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLSAgY2F0ID4+JGFjX3N0ZGludCA8PFNURElOVF9FT0YKLS8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uIGRldGVjdGlvbnMgcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCi0KLS8qIHdoZXRoZXIgd2UgbmVlZCB0byBkZWZpbmUgYml0c3BlY2lmaWMgdHlwZXMgZnJvbSBjb21waWxlciBiYXNlIHR5cGVzICovCi0jaWZuZGVmIF9TVERJTlRfSEVBREVSX0lOVFBUUgotI2lmbmRlZiBfU1RESU5UX0hFQURFUl9VSU5UMzIKLSNpZm5kZWYgX1NURElOVF9IRUFERVJfVV9JTlQzMgotI2RlZmluZSBfU1RESU5UX05FRURfSU5UX01PREVMX1QKLSNlbHNlCi0jZGVmaW5lIF9TVERJTlRfSEFWRV9VX0lOVF9UWVBFUwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX1NURElOVF9IQVZFX1VfSU5UX1RZUEVTCi0jdW5kZWYgX1NURElOVF9ORUVEX0lOVF9NT0RFTF9UCi0jZW5kaWYKLQotI2lmZGVmICBfU1RESU5UX0NIQVJfTU9ERUwKLSNpZiAgICAgX1NURElOVF9DSEFSX01PREVMKzAgPT0gMTIyIHx8IF9TVERJTlRfQ0hBUl9NT0RFTCswID09IDEyNAotI2lmbmRlZiBfU1RESU5UX0JZVEVfTU9ERUwKLSNkZWZpbmUgX1NURElOVF9CWVRFX01PREVMIDEyCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgX1NURElOVF9IQVZFX0lOVF9MRUFTVDMyX1QKLSNkZWZpbmUgX1NURElOVF9ORUVEX0lOVF9MRUFTVF9UCi0jZW5kaWYKLQotI2lmbmRlZiBfU1RESU5UX0hBVkVfSU5UX0ZBU1QzMl9UCi0jZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRfRkFTVF9UCi0jZW5kaWYKLQotI2lmbmRlZiBfU1RESU5UX0hFQURFUl9JTlRQVFIKLSNkZWZpbmUgX1NURElOVF9ORUVEX0lOVFBUUl9UCi0jaWZuZGVmIF9TVERJTlRfSEFWRV9JTlRNQVhfVAotI2RlZmluZSBfU1RESU5UX05FRURfSU5UTUFYX1QKLSNlbmRpZgotI2VuZGlmCi0KLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4gZGVmaW5pdGlvbiBwYXJ0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotLyogc29tZSBzeXN0ZW0gaGVhZGVycyBoYXZlIGdvb2QgdWludDY0X3QgKi8KLSNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKLSNpZiAgICAgZGVmaW5lZCBfU1RESU5UX0hBVkVfVUlOVDY0X1QgIHx8IGRlZmluZWQgSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotI2VsaWYgICBkZWZpbmVkIF9TVERJTlRfSEFWRV9VX0lOVDY0X1QgfHwgZGVmaW5lZCBIQVZFX1VfSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiB1X2ludDY0X3QgdWludDY0X3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIF9IQVZFX1VJTlQ2NF9UCi0vKiAuLiBoZXJlIGFyZSBzb21lIGNvbW1vbiBoZXVyaXN0aWNzIHVzaW5nIGNvbXBpbGVyIHJ1bnRpbWUgc3BlY2lmaWNzICovCi0jaWYgZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCi0jZGVmaW5lIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0KLSNlbGlmICFkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXwotI2lmIGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX1dBVENPTUNfXyB8fCBkZWZpbmVkIF9fQk9STEFORENfXwotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiBfX2ludDY0IGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7Ci0KLSNlbGlmIGRlZmluZWQgX19HTlVDX18gfHwgZGVmaW5lZCBfX01XRVJLU19fIHx8IGRlZmluZWQgX19FTEZfXwotLyogbm90ZTogYWxsIEVMRi1zeXN0ZW1zIHNlZW0gdG8gaGF2ZSBsb2ZmLXN1cHBvcnQgd2hpY2ggbmVlZHMgNjQtYml0ICovCi0jaWYgIWRlZmluZWQgX05PX0xPTkdMT05HCi0jZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCi0jZGVmaW5lIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0jZW5kaWYKLQotI2VsaWYgZGVmaW5lZCBfX2FscGhhIHx8IChkZWZpbmVkIF9fbWlwcyAmJiBkZWZpbmVkIF9BQklOMzIpCi0jaWYgIWRlZmluZWQgX05PX0xPTkdMT05HCi10eXBlZGVmIGxvbmcgaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50NjRfdDsKLSNlbmRpZgotICAvKiBjb21waWxlci9jcHUgdHlwZSB0byBkZWZpbmUgaW50NjRfdCAqLwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBfU1RESU5UX0hBVkVfVV9JTlRfVFlQRVMKLS8qIGludDhfdCBpbnQxNl90IGludDMyX3QgZGVmaW5lZCBieSBpbmV0IGNvZGUsIHJlZGVjbGFyZSB0aGUgdV9pbnRYWCB0eXBlcyAqLwotdHlwZWRlZiB1X2ludDhfdCB1aW50OF90OwotdHlwZWRlZiB1X2ludDE2X3QgdWludDE2X3Q7Ci10eXBlZGVmIHVfaW50MzJfdCB1aW50MzJfdDsKLQotLyogZ2xpYmMgY29tcGF0aWJpbGl0eSAqLwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBfU1RESU5UX05FRURfSU5UX01PREVMX1QKLS8qIHdlIG11c3QgZ3Vlc3MgYWxsIHRoZSBiYXNpYyB0eXBlcy4gQXBhcnQgZnJvbSBieXRlLWFkcmVzc2FibGUgc3lzdGVtLCAqLwotLyogdGhlcmUgYSBmZXcgMzItYml0LW9ubHkgZHNwLXN5c3RlbXMgdGhhdCB3ZSBndWFyZCB3aXRoIEJZVEVfTU9ERUwgOC19ICovCi0vKiAoYnR3LCB0aG9zZSBuaWJibGUtYWRkcmVzc2FibGUgc3lzdGVtcyBhcmUgd2F5IG9mZiwgb3Igc28gd2UgYXNzdW1lKSAqLwotCi0KLSNpZiBkZWZpbmVkIF9TVERJTlRfQllURV9NT0RFTAotI2lmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDI0MgotLyogMjo0OjIgPSAgSVAxNiA9IGEgbm9ybWFsIDE2LWJpdCBzeXN0ZW0gICAgICAgICAgICAgICAgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgIHVpbnQ4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIHVpbnQzMl90OwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLXR5cGVkZWYgICAgICAgICAgY2hhciAgICBpbnQ4X3Q7Ci10eXBlZGVmICAgICAgICAgIHNob3J0ICAgaW50MTZfdDsKLXR5cGVkZWYgICAgICAgICAgbG9uZyAgICBpbnQzMl90OwotI2VuZGlmCi0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDQgfHwgX1NURElOVF9MT05HX01PREVMID09IDQ0NAotLyogMjo0OjQgPSAgTFAzMiA9IGEgMzItYml0IHN5c3RlbSBkZXJpdmVkIGZyb20gYSAxNi1iaXQgKi8KLS8qIDQ6NDo0ID0gSUxQMzIgPSBhIG5vcm1hbCAzMi1iaXQgc3lzdGVtICAgICAgICAgICAgICAgICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50MzJfdDsKLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi10eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwotdHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Ci10eXBlZGVmICAgICAgICAgIGludCAgICAgaW50MzJfdDsKLSNlbmRpZgotI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDg0IHx8IF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ4OAotLyogNDo4OjQgPSAgSVAzMiA9IGEgMzItYml0IHN5c3RlbSBwcmVwYXJlZCBmb3IgNjQtYml0ICAgICovCi0vKiA0Ojg6OCA9ICBMUDY0ID0gYSBub3JtYWwgNjQtYml0IHN5c3RlbSAgICAgICAgICAgICAgICAgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgIHVpbnQ4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgIHVpbnQzMl90OwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLXR5cGVkZWYgICAgICAgICAgY2hhciAgICBpbnQ4X3Q7Ci10eXBlZGVmICAgICAgICAgIHNob3J0ICAgaW50MTZfdDsKLXR5cGVkZWYgICAgICAgICAgaW50ICAgICBpbnQzMl90OwotI2VuZGlmCi0vKiB0aGlzIHN5c3RlbSBoYXMgYSAibG9uZyIgb2YgNjRiaXQgKi8KLSNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKLSNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIHVpbnQ2NF90OwotdHlwZWRlZiAgICAgICAgICBsb25nICAgIGludDY0X3Q7Ci0jZW5kaWYKLSNlbGlmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ0OAotLyogICAgICBMTFA2NCAgIGEgNjQtYml0IHN5c3RlbSBkZXJpdmVkIGZyb20gYSAzMi1iaXQgc3lzdGVtICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50MzJfdDsKLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi10eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwotdHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Ci10eXBlZGVmICAgICAgICAgIGludCAgICAgaW50MzJfdDsKLSNlbmRpZgotLyogYXNzdW1pbmcgdGhlIHN5c3RlbSBoYXMgYSAibG9uZyBsb25nIiAqLwotI2lmbmRlZiBfSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci10eXBlZGVmICAgICAgICAgIGxvbmcgbG9uZyAgaW50NjRfdDsKLSNlbmRpZgotI2Vsc2UKLSNkZWZpbmUgX1NURElOVF9OT19JTlQzMl9UCi0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIF9TVERJTlRfTk9fSU5UOF9UCi0jZGVmaW5lIF9TVERJTlRfTk9fSU5UMzJfVAotI2VuZGlmCi0jZW5kaWYKLQotLyoKLSAqIHF1b3RlIGZyb20gU3VuT1MtNS44IHN5cy9pbnR0eXBlcy5oOgotICogVXNlIGF0IHlvdXIgb3duIHJpc2suICBBcyBvZiBGZWJydWFyeSAxOTk2LCB0aGUgY29tbWl0dGVlIGlzIHNxdWFyZWx5Ci0gKiBiZWhpbmQgdGhlIGZpeGVkIHNpemVkIHR5cGVzOyB0aGUgImxlYXN0IiBhbmQgImZhc3QiIHR5cGVzIGFyZSBzdGlsbCBiZWluZwotICogZGlzY3Vzc2VkLiAgVGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlICJmYXN0IiB0eXBlcyBtYXkgYmUgcmVtb3ZlZCBiZWZvcmUKLSAqIHRoZSBzdGFuZGFyZCBpcyBmaW5hbGl6ZWQgaXMgaGlnaCBlbm91Z2ggdGhhdCB0aGV5IGFyZSBub3QgY3VycmVudGx5Ci0gKiBpbXBsZW1lbnRlZC4KLSAqLwotCi0jaWYgZGVmaW5lZCBfU1RESU5UX05FRURfSU5UX0xFQVNUX1QKLXR5cGVkZWYgIGludDhfdCAgICBpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmICBpbnQxNl90ICAgaW50X2xlYXN0MTZfdDsKLXR5cGVkZWYgIGludDMyX3QgICBpbnRfbGVhc3QzMl90OwotI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCi10eXBlZGVmICBpbnQ2NF90ICAgaW50X2xlYXN0NjRfdDsKLSNlbmRpZgotCi10eXBlZGVmIHVpbnQ4X3QgICB1aW50X2xlYXN0OF90OwotdHlwZWRlZiB1aW50MTZfdCAgdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmIHVpbnQzMl90ICB1aW50X2xlYXN0MzJfdDsKLSNpZmRlZiBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiB1aW50NjRfdCAgdWludF9sZWFzdDY0X3Q7Ci0jZW5kaWYKLSAgLyogbGVhc3QgdHlwZXMgKi8KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBfU1RESU5UX05FRURfSU5UX0ZBU1RfVAotdHlwZWRlZiAgaW50OF90ICAgIGludF9mYXN0OF90OwotdHlwZWRlZiAgaW50ICAgICAgIGludF9mYXN0MTZfdDsKLXR5cGVkZWYgIGludDMyX3QgICBpbnRfZmFzdDMyX3Q7Ci0jaWZkZWYgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgIGludDY0X3QgICBpbnRfZmFzdDY0X3Q7Ci0jZW5kaWYKLQotdHlwZWRlZiB1aW50OF90ICAgdWludF9mYXN0OF90OwotdHlwZWRlZiB1bnNpZ25lZCAgdWludF9mYXN0MTZfdDsKLXR5cGVkZWYgdWludDMyX3QgIHVpbnRfZmFzdDMyX3Q7Ci0jaWZkZWYgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgdWludDY0X3QgIHVpbnRfZmFzdDY0X3Q7Ci0jZW5kaWYKLSAgLyogZmFzdCB0eXBlcyAqLwotI2VuZGlmCi0KLSNpZmRlZiBfU1RESU5UX05FRURfSU5UTUFYX1QKLSNpZmRlZiBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiAgaW50NjRfdCAgICAgICBpbnRtYXhfdDsKLXR5cGVkZWYgdWludDY0X3QgICAgICB1aW50bWF4X3Q7Ci0jZWxzZQotdHlwZWRlZiAgICAgICAgICBsb25nICBpbnRtYXhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50bWF4X3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX1NURElOVF9ORUVEX0lOVFBUUl9UCi0jaWZuZGVmIF9faW50cHRyX3RfZGVmaW5lZAotI2RlZmluZSBfX2ludHB0cl90X2RlZmluZWQKLS8qIHdlIGVuY291cmFnZSB1c2luZyAibG9uZyIgdG8gc3RvcmUgcG9pbnRlciB2YWx1ZXMsIG5ldmVyIHVzZSAiaW50IiAhICovCi0jaWYgICBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDIgfHwgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDg0Ci10eXBlZGVmICB1bnNpZ25lZCBpbnQgICB1aW50cHRyX3Q7Ci10eXBlZGVmICAgICAgICAgICBpbnQgICAgaW50cHRyX3Q7Ci0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDQgfHwgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDQ0Ci10eXBlZGVmICB1bnNpZ25lZCBsb25nICB1aW50cHRyX3Q7Ci10eXBlZGVmICAgICAgICAgICBsb25nICAgaW50cHRyX3Q7Ci0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0NDggJiYgZGVmaW5lZCBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiAgICAgICAgdWludDY0X3QgdWludHB0cl90OwotdHlwZWRlZiAgICAgICAgIGludDY0X3QgIGludHB0cl90OwotI2Vsc2UgLyogbWF0Y2hlcyB0eXBpY2FsIHN5c3RlbSB0eXBlcyBJTFAzMiBhbmQgTFA2NCAtIGJ1dCBub3QgSVAxNiBvciBMTFA2NCAqLwotdHlwZWRlZiAgdW5zaWduZWQgbG9uZyAgdWludHB0cl90OwotdHlwZWRlZiAgICAgICAgICAgbG9uZyAgIGludHB0cl90OwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBUaGUgSVNPIEM5OSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBpbiBDKysgaW1wbGVtZW50YXRpb25zIHRoZXNlCi0gICBzaG91bGQgb25seSBiZSBkZWZpbmVkIGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLiAgKi8KLSNpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNpZm5kZWYgVUlOVDMyX0MKLQotLyogU2lnbmVkLiAgKi8KLSMgZGVmaW5lIElOVDhfQyhjKSAgICAgIGMKLSMgZGVmaW5lIElOVDE2X0MoYykgICAgIGMKLSMgZGVmaW5lIElOVDMyX0MoYykgICAgIGMKLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBJTlQ2NF9DKGMpICAgIGMgIyMgTAotIyBlbHNlCi0jICBkZWZpbmUgSU5UNjRfQyhjKSAgICBjICMjIExMCi0jIGVuZGlmCi0KLS8qIFVuc2lnbmVkLiAgKi8KLSMgZGVmaW5lIFVJTlQ4X0MoYykgICAgIGMgIyMgVQotIyBkZWZpbmUgVUlOVDE2X0MoYykgICAgYyAjIyBVCi0jIGRlZmluZSBVSU5UMzJfQyhjKSAgICBjICMjIFUKLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBVSU5UNjRfQyhjKSAgIGMgIyMgVUwKLSMgZWxzZQotIyAgZGVmaW5lIFVJTlQ2NF9DKGMpICAgYyAjIyBVTEwKLSMgZW5kaWYKLQotLyogTWF4aW1hbCB0eXBlLiAgKi8KLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBJTlRNQVhfQyhjKSAgIGMgIyMgTAotIyAgZGVmaW5lIFVJTlRNQVhfQyhjKSAgYyAjIyBVTAotIyBlbHNlCi0jICBkZWZpbmUgSU5UTUFYX0MoYykgICBjICMjIExMCi0jICBkZWZpbmUgVUlOVE1BWF9DKGMpICBjICMjIFVMTAotIyBlbmRpZgotCi0gIC8qIGxpdGVyYWxudW1iZXJzICovCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBUaGVzZSBsaW1pdHMgYXJlIG1lcmlseSB0aG9zZSBvZiBhIHR3byBjb21wbGVtZW50IGJ5dGUtb3JpZW50ZWQgc3lzdGVtICovCi0KLS8qIE1pbmltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KLSMgZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jIGRlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKLSMgZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jIGRlZmluZSBJTlQ2NF9NSU4gICAgICAgICAgICAgICgtX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCi0vKiBNYXhpbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcy4gICovCi0jIGRlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCi0jIGRlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSMgZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jIGRlZmluZSBJTlQ2NF9NQVggICAgICAgICAgICAgIChfX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNykpCi0KLS8qIE1heGltdW0gb2YgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMuICAqLwotIyBkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1KQotIyBkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzUpCi0jIGRlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSMgZGVmaW5lIFVJTlQ2NF9NQVggICAgICAgICAgICAgKF9fVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUpKQotCi0vKiBNaW5pbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLwotIyBkZWZpbmUgSU5UX0xFQVNUOF9NSU4gICAgICAgICBJTlQ4X01JTgotIyBkZWZpbmUgSU5UX0xFQVNUMTZfTUlOICAgICAgICBJTlQxNl9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDMyX01JTiAgICAgICAgSU5UMzJfTUlOCi0jIGRlZmluZSBJTlRfTEVBU1Q2NF9NSU4gICAgICAgIElOVDY0X01JTgotLyogTWF4aW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KLSMgZGVmaW5lIElOVF9MRUFTVDhfTUFYICAgICAgICAgSU5UOF9NQVgKLSMgZGVmaW5lIElOVF9MRUFTVDE2X01BWCAgICAgICAgSU5UMTZfTUFYCi0jIGRlZmluZSBJTlRfTEVBU1QzMl9NQVggICAgICAgIElOVDMyX01BWAotIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICAgICAgICBJTlQ2NF9NQVgKLQotLyogTWF4aW11bSBvZiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLwotIyBkZWZpbmUgVUlOVF9MRUFTVDhfTUFYICAgICAgICBVSU5UOF9NQVgKLSMgZGVmaW5lIFVJTlRfTEVBU1QxNl9NQVggICAgICAgVUlOVDE2X01BWAotIyBkZWZpbmUgVUlOVF9MRUFTVDMyX01BWCAgICAgICBVSU5UMzJfTUFYCi0jIGRlZmluZSBVSU5UX0xFQVNUNjRfTUFYICAgICAgIFVJTlQ2NF9NQVgKLQotICAvKiBzaG9ydGNpcmN1aXQqLwotI2VuZGlmCi0gIC8qIG9uY2UgKi8KLSNlbmRpZgotI2VuZGlmCi1TVERJTlRfRU9GCi1maQotICAgIGlmIGNtcCAtcyAkYWNfc3RkaW50X2ggJGFjX3N0ZGludCAyPi9kZXYvbnVsbDsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfc3RkaW50X2ggaXMgdW5jaGFuZ2VkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRhY19zdGRpbnRfaCBpcyB1bmNoYW5nZWQiID4mNjt9Ci0gICAgZWxzZQotICAgICAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX3N0ZGludF9oIiB8fAotJGFzX2V4cHIgWCIkYWNfc3RkaW50X2giIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX3N0ZGludF9oIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhY19zdGRpbnRfaCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfc3RkaW50X2giIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkYWNfc3RkaW50X2giIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICAgICAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAotICAgICAgcm0gLWYgJGFjX3N0ZGludF9oCi0gICAgICBtdiAkYWNfc3RkaW50ICRhY19zdGRpbnRfaAotICAgIGZpCi0gOzsKLQotICBlc2FjCi1kb25lICMgZm9yIGFjX3RhZwotCi0KLWFzX2ZuX2V4aXQgMAotX0FDRU9GCi1hY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQotCi10ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAotICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKLQotCi0jIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCi0jIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KLSMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCi0jIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKLSMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCi0jIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCi0jIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKLSMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCi1pZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KLSAgYWNfY3Nfc3VjY2Vzcz06Ci0gIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KLSAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKLSAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKLSAgZXhlYyA1Pi9kZXYvbnVsbAotICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCi0gIGV4ZWMgNT4+Y29uZmlnLmxvZwotICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAotICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgJGFjX2NzX3N1Y2Nlc3MgfHwgYXNfZm5fZXhpdCAxCi1maQotaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX0dTVF9ERUJVR30iID0gInhubyI7IHRoZW4gZW5hYmxlX2dzdF9kZWJ1Zz0ieWVzIjsgZmkKLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1N9IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9nc3RfdHJhY2VyX2hvb2tzPSJ5ZXMiOyBmaQotaWYgdGVzdCAieCR7R1NUX0RJU0FCTEVfUEFSU0V9IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9wYXJzZT0ieWVzIjsgZmkKLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HfSIgPSAieG5vIjsgdGhlbiBlbmFibGVfb3B0aW9uX3BhcnNpbmc9InllcyI7IGZpCi1pZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9QTFVHSU59IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9wbHVnaW49InllcyI7IGZpCi1pZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9SRUdJU1RSWX0iID0gInhubyI7IHRoZW4gZW5hYmxlX3JlZ2lzdHJ5PSJ5ZXMiOyBmaQotCi1lY2hvICIKLQotQ29uZmlndXJhdGlvbgotCVZlcnNpb24gICAgICAgICAgICAgICAgICAgIDogJHtWRVJTSU9OfQotCVNvdXJjZSBjb2RlIGxvY2F0aW9uICAgICAgIDogJHtzcmNkaXJ9Ci0JUHJlZml4ICAgICAgICAgICAgICAgICAgICAgOiAke3ByZWZpeH0KLQlDb21waWxlciAgICAgICAgICAgICAgICAgICA6ICR7Q0N9Ci0JUGFja2FnZSBuYW1lICAgICAgICAgICAgICAgOiAke0dTVF9QQUNLQUdFX05BTUV9Ci0JUGFja2FnZSBvcmlnaW4gICAgICAgICAgICAgOiAke0dTVF9QQUNLQUdFX09SSUdJTn0KLQotCURvY3VtZW50YXRpb24gKG1hbnVhbHMpICAgIDogJHtlbmFibGVfZG9jYm9va30KLQlEb2N1bWVudGF0aW9uIChBUEkpICAgICAgICA6ICR7ZW5hYmxlX2d0a19kb2N9Ci0KLQlEZWJ1ZyBsb2dnaW5nICAgICAgICAgICAgICA6ICR7ZW5hYmxlX2dzdF9kZWJ1Z30KLQlUcmFjaW5nIHN1YnN5c3RlbSBob29rcyAgICA6ICR7ZW5hYmxlX2dzdF90cmFjZXJfaG9va3N9Ci0JQ29tbWFuZC1saW5lIHBhcnNlciAgICAgICAgOiAke2VuYWJsZV9wYXJzZX0KLQlPcHRpb24gcGFyc2luZyBpbiBnc3RfaW5pdCA6ICR7ZW5hYmxlX29wdGlvbl9wYXJzaW5nfQotCVBsdWdpbiByZWdpc3RyeSAgICAgICAgICAgIDogJHtlbmFibGVfcmVnaXN0cnl9Ci0JUGx1Z2luIHN1cHBvcnQJICAgICAgICAgICA6ICR7ZW5hYmxlX3BsdWdpbn0KLQlTdGF0aWMgcGx1Z2lucyAgICAgICAgICAgICA6ICR7ZW5hYmxlX3N0YXRpY19wbHVnaW5zfQotCVVuaXQgdGVzdGluZyBzdXBwb3J0ICAgICAgIDogJHtCVUlMRF9DSEVDS30KLQlQVFAgY2xvY2sgc3VwcG9ydCAgICAgICAgICA6ICR7SEFWRV9QVFB9Ci0JbGlidW53aW5kIHN1cHBvcnQgICAgICAgICAgOiAke0hBVkVfVU5XSU5EfQotCi0JRGVidWcgICAgICAgICAgICAgICAgICAgICAgOiAke1VTRV9ERUJVR30KLQlQcm9maWxpbmcgICAgICAgICAgICAgICAgICA6ICR7VVNFX1BST0ZJTElOR30KLQotCUJ1aWxkaW5nIGJlbmNobWFya3MgICAgICAgIDogJHtCVUlMRF9CRU5DSE1BUktTfQotCUJ1aWxkaW5nIGV4YW1wbGVzICAgICAgICAgIDogJHtCVUlMRF9FWEFNUExFU30KLQlCdWlsZGluZyB0ZXN0IGFwcHMgICAgICAgICA6ICR7QlVJTERfVEVTVFN9Ci0JQnVpbGRpbmcgdGVzdHMgdGhhdCBmYWlsICAgOiAke0JVSUxEX0ZBSUxJTkdfVEVTVFN9Ci0JQnVpbGRpbmcgdG9vbHMgICAgICAgICAgICAgOiAke0JVSUxEX1RPT0xTfQotIgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTQyNDU3Li4wMDAwMDAwCi0tLSBhL2NvbmZpZ3VyZS5hYworKysgL2Rldi9udWxsCkBAIC0xLDExNzYgKzAsMCBAQAotQUNfUFJFUkVRKFsyLjY5XSkKLQotZG5sIGluaXRpYWxpemUgYXV0b2NvbmYKLWRubCB3aGVuIGdvaW5nIHRvL2Zyb20gcmVsZWFzZSBwbGVhc2Ugc2V0IHRoZSBuYW5vIChmb3VydGggbnVtYmVyKSByaWdodCAhCi1kbmwgcmVsZWFzZXMgb25seSBkbyBXYWxsLCBnaXQgYW5kIHByZXJlbGVhc2UgZG9lcyBXZXJyb3IgdG9vCi1kbmwKLUFDX0lOSVQoW0dTdHJlYW1lcl0sWzEuMTAuNF0sW2h0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lcl0sW2dzdHJlYW1lcl0pCi1BR19HU1RfSU5JVAotCi1kbmwgaW5pdGlhbGl6ZSBhdXRvbWFrZSAod2UgcmVxdWlyZSBHTlUgbWFrZSkKLUFNX0lOSVRfQVVUT01BS0UoWy1Xbm8tcG9ydGFiaWxpdHkgMS4xNCBuby1kaXN0LWd6aXAgZGlzdC14eiB0YXItdXN0YXIgc3ViZGlyLW9iamVjdHNdKQotCi1kbmwgZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTl8qIHZhcmlhYmxlcwotQVNfVkVSU0lPTgotCi1kbmwgY2hlY2sgaWYgdGhpcyBpcyBhIHJlbGVhc2UgdmVyc2lvbgotQVNfTkFOTyhHU1RfR0lUPSJubyIsIEdTVF9HSVQ9InllcyIpCi0KLWRubCBjYW4gYXV0b2NvbmYgZmluZCB0aGUgc291cmNlID8KLUFDX0NPTkZJR19TUkNESVIoW2dzdC9nc3QuY10pCi0KLWRubCBkZWZpbmUgdGhlIG91dHB1dCBoZWFkZXIgZm9yIGNvbmZpZwotQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKLQotZG5sIEFNX01BSU5UQUlORVJfTU9ERSBvbmx5IHByb3ZpZGVzIHRoZSBvcHRpb24gdG8gY29uZmlndXJlIHRvIGVuYWJsZSBpdAotQU1fTUFJTlRBSU5FUl9NT0RFKFtlbmFibGVdKQotCi1kbmwgc2V0cyBob3N0XyogdmFyaWFibGVzCi1BQ19DQU5PTklDQUxfSE9TVAotCi1kbmwgdXNlIHByZXR0eSBidWlsZCBvdXRwdXQgYnkgZGVmYXVsdAotQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKQotCi1kbmwgR1N0cmVhbWVyIHZlcnNpb25pbmcsIHRoaXMgaXMgbW9zdGx5IGluZm9ybWF0aW9uYWwKLUdTVF9WRVJTSU9OX01BSk9SPSRQQUNLQUdFX1ZFUlNJT05fTUFKT1IKLUdTVF9WRVJTSU9OX01JTk9SPSRQQUNLQUdFX1ZFUlNJT05fTUlOT1IKLUdTVF9WRVJTSU9OX01JQ1JPPSRQQUNLQUdFX1ZFUlNJT05fTUlDUk8KLUdTVF9WRVJTSU9OX05BTk89JFBBQ0tBR0VfVkVSU0lPTl9OQU5PCi1BQ19TVUJTVChHU1RfVkVSU0lPTl9NQUpPUikKLUFDX1NVQlNUKEdTVF9WRVJTSU9OX01JTk9SKQotQUNfU1VCU1QoR1NUX1ZFUlNJT05fTUlDUk8pCi1BQ19TVUJTVChHU1RfVkVSU0lPTl9OQU5PKQotCi1kbmwgb3VyIGxpYnJhcmllcyBhbmQgaW5zdGFsbCBkaXJzIHVzZSBHU1RfQVBJX1ZFUlNJT04gaW4gdGhlIGZpbGVuYW1lCi1kbmwgdG8gYWxsb3cgc2lkZS1ieS1zaWRlIGluc3RhbGxhdGlvbiBvZiBkaWZmZXJlbnQgQVBJIHZlcnNpb25zCi1HU1RfQVBJX1ZFUlNJT049MS4wCi1BQ19TVUJTVChHU1RfQVBJX1ZFUlNJT04pCi1BQ19ERUZJTkVfVU5RVU9URUQoR1NUX0FQSV9WRVJTSU9OLCAiJEdTVF9BUElfVkVSU0lPTiIsCi0gIFtHU3RyZWFtZXIgQVBJIFZlcnNpb25dKQotCi1kbmwgQ1VSUkVOVCwgUkVWSVNJT04sIEFHRQotZG5sIC0gbGlicmFyeSBzb3VyY2UgY2hhbmdlZCAtPiBpbmNyZW1lbnQgUkVWSVNJT04KLWRubCAtIGludGVyZmFjZXMgYWRkZWQvcmVtb3ZlZC9jaGFuZ2VkIC0+IGluY3JlbWVudCBDVVJSRU5ULCBSRVZJU0lPTiA9IDAKLWRubCAtIGludGVyZmFjZXMgYWRkZWQgLT4gaW5jcmVtZW50IEFHRQotZG5sIC0gaW50ZXJmYWNlcyByZW1vdmVkIC0+IEFHRSA9IDAKLWRubAotZG5sIEtlZXAgQ1VSUkVOVCBhcyBNSU5PUiAqIDEwMCArIE1JQ1JPCi1kbmwgRXggOiAxLjAuMCA9PiAwCi1kbmwgICAgICAxLjAuMyA9PiAzCi1kbmwgICAgICAxLjEuMCA9PiAxMDAKLWRubCAgICAgIDEuMi41ID0+IDIwNQotZG5sICAgICAgMS4xMC45ICh3aG8ga25vd3MpID0+IDEwMDkKLWRubAotZG5sIHNldHMgR1NUX0xUX0xERkxBR1MKLUFTX0xJQlRPT0woR1NULCAxMDA0LCAwLCAxMDA0KQotCi1kbmwgKioqIGF1dG90b29scyBzdHVmZiAqKioqCi0KLWRubCBhbGxvdyBmb3IgZGlmZmVyZW50IGF1dG90b29scwotQVNfQVVUT1RPT0xTX0FMVEVSTkFURQotCi1kbmwgQWRkIHBhcmFtZXRlcnMgZm9yIGFjbG9jYWwgKGtlZXAgaW4gc3luYyB3aXRoIE1ha2VmaWxlLmFtKQotQUNfU1VCU1QoQUNMT0NBTF9BTUZMQUdTLCAiLUkgbTQgLUkgY29tbW9uL200IikKLQotZG5sIHNldCB1cCBnZXR0ZXh0Ci1kbmwgdGhlIHZlcnNpb24gY2hlY2sgbmVlZHMgdG8gc3RheSBoZXJlIGJlY2F1c2UgYXV0b3BvaW50IGdyZXBzIGZvciBpdAotQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xN10pCi1BTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKQotQUdfR1NUX0dFVFRFWFQoW2dzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OXSkKLQotZG5sICoqKiBjaGVjayBmb3IgYXJndW1lbnRzIHRvIGNvbmZpZ3VyZSAqKioKLQotQUdfR1NUX0FSR19ESVNBQkxFX0ZBVEFMX1dBUk5JTkdTCi1BR19HU1RfQVJHX0VOQUJMRV9FWFRSQV9DSEVDS1MKLQotZG5sIHN1YnN5c3RlbXMgLSBjYW4gaW5mbHVlbmNlIG90aGVyIGRlY2lzaW9ucyBzbyBuZWVkcyB0byBiZSBoaWdoIHVwCi1kbmwgd2UgbmVlZCB0byBBTV9DT05ESVRJT05BTCB0aGVtIGhlcmUgZm9yIGF1dG9tYWtlIDEuNi54IGNvbXBhdGliaWxpdHkKLUFHX0dTVF9DSEVDS19TVUJTWVNURU1fRElTQUJMRShHU1RfREVCVUcsW2RlYnVnZ2luZyBzdWJzeXN0ZW1dKQotQU1fQ09ORElUSU9OQUwoR1NUX0RJU0FCTEVfR1NUX0RFQlVHLCB0ZXN0ICJ4JEdTVF9ESVNBQkxFX0dTVF9ERUJVRyIgPSAieHllcyIpCi1BR19HU1RfQ0hFQ0tfU1VCU1lTVEVNX0RJU0FCTEUoR1NUX1RSQUNFUl9IT09LUyxbdHJhY2luZyBzdWJzeXN0ZW0gaG9va3NdKQotQU1fQ09ORElUSU9OQUwoR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LUywgdGVzdCAieCRHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTIiA9ICJ4eWVzIikKLUFHX0dTVF9DSEVDS19TVUJTWVNURU1fRElTQUJMRShQQVJTRSxbY29tbWFuZC1saW5lIHBhcnNlcl0pCi1BTV9DT05ESVRJT05BTChHU1RfRElTQUJMRV9QQVJTRSwgdGVzdCAieCRHU1RfRElTQUJMRV9QQVJTRSIgPSAieHllcyIpCi1pZiB0ZXN0ICJ4JEdTVF9ESVNBQkxFX1BBUlNFIiA9IHh5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEdTVF9ESVNBQkxFX1BBUlNFLCAxLAotICAgIFtEZWZpbmUgaWYgcGlwZWxpbmUgcGFyc2luZyBjb2RlIGlzIGRpc2FibGVkXSkKLWZpCi1BR19HU1RfQ0hFQ0tfU1VCU1lTVEVNX0RJU0FCTEUoT1BUSU9OX1BBUlNJTkcsW29wdGlvbiBwYXJzaW5nIHdoZW4gZ3N0X2luaXRdKQotQU1fQ09ORElUSU9OQUwoR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcsIHRlc3QgIngkR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkciID0gInh5ZXMiKQotaWYgdGVzdCAieCRHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORyIgPSB4eWVzOyB0aGVuCi0gIEFDX0RFRklORShHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORywgMSwKLSAgICBbRGVmaW5lIGlmIG9wdGlvbiBwYXJzaW5nIGlzIGRpc2FibGVkXSkKLWZpCi1BR19HU1RfQ0hFQ0tfU1VCU1lTVEVNX0RJU0FCTEUoUkVHSVNUUlksW3BsdWdpbiByZWdpc3RyeV0pCi1BTV9DT05ESVRJT05BTChHU1RfRElTQUJMRV9SRUdJU1RSWSwgdGVzdCAieCRHU1RfRElTQUJMRV9SRUdJU1RSWSIgPSAieHllcyIpCi1kbmwgZGVmaW5lIGEgc3Vic3RpdHV0aW9uIHRvIHVzZSBpbiBkb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMKLWlmIHRlc3QgIngkR1NUX0RJU0FCTEVfUkVHSVNUUlkiID0gInh5ZXMiCi10aGVuCi0gIEdTVF9SRUdJU1RSWV9ET0NfVFlQRVM9IiUiCi1lbHNlCi0gIEdTVF9SRUdJU1RSWV9ET0NfVFlQRVM9Ci1maQotQUNfU1VCU1QoR1NUX1JFR0lTVFJZX0RPQ19UWVBFUykKLUFHX0dTVF9DSEVDS19TVUJTWVNURU1fRElTQUJMRShQTFVHSU4sW3BsdWdpbl0pCi1BTV9DT05ESVRJT05BTChHU1RfRElTQUJMRV9QTFVHSU4sIHRlc3QgIngkR1NUX0RJU0FCTEVfUExVR0lOIiA9ICJ4eWVzIikKLQotQUdfR1NUX0FSR19ERUJVRwotQUdfR1NUX0FSR19QUk9GSUxJTkcKLUFHX0dTVF9BUkdfVkFMR1JJTkQKLUFHX0dTVF9BUkdfR0NPVgotCi1BR19HU1RfQVJHX0VYQU1QTEVTCi0KLUFHX0dTVF9BUkdfV0lUSF9QS0dfQ09ORklHX1BBVEgKLUFHX0dTVF9BUkdfV0lUSF9QQUNLQUdFX05BTUUKLUFHX0dTVF9BUkdfV0lUSF9QQUNLQUdFX09SSUdJTgotCi1BR19HU1RfUEtHX0NPTkZJR19QQVRICi0KLUFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FX1dJVEhfTkFOTyhbJFBBQ0tBR0VfVkVSU0lPTl9OQU5PXSwKLSAgWyIke3NyY2Rpcn0vZ3N0cmVhbWVyLmRvYXAiXSwKLSAgWyRQQUNLQUdFX1ZFUlNJT05fTUFKT1IuJFBBQ0tBR0VfVkVSU0lPTl9NSU5PUi4kUEFDS0FHRV9WRVJTSU9OX01JQ1JPXSkKLQotIyBXZSBvbmx5IHVzZSB0aGlzIHdoZW4gYnVpbGRpbmcgd2l0aCBNU1ZDLCB3aGljaCBpcyBvbmx5IGRvbmUgd2l0aCB0aGUKLSMgYWx0ZXJuYXRlIE1lc29uIGJ1aWxkIHN5c3RlbSBmaWxlcwotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQz0wCi1BQ19TVUJTVChHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDKQotCi1kbmwgY2hlY2sgZm9yIGJhc2ggY29tcGxldGlvbgotQUNfQVJHX1dJVEgoW2Jhc2gtY29tcGxldGlvbi1kaXJdLAotICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtYmFzaC1jb21wbGV0aW9uLWRpcls9UEFUSF1dLAotICAgICAgICBbSW5zdGFsbCB0aGUgYmFzaCBhdXRvLWNvbXBsZXRpb24gc2NyaXB0IGluIHRoaXMgZGlyZWN0b3J5LiBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCi0gICAgW10sCi0gICAgW3dpdGhfYmFzaF9jb21wbGV0aW9uX2Rpcj15ZXNdKQotCi1pZiB0ZXN0ICJ4JHdpdGhfYmFzaF9jb21wbGV0aW9uX2RpciIgPSAieHllcyIKLXRoZW4KLSAgICBleHRyYV9hcmdzPQotCi0gICAgaWYgdGVzdCAieCRwcmVmaXgiICE9ICJ4Tk9ORSIKLSAgICB0aGVuCi0gICAgICAgIGV4dHJhX2FyZ3M9Ii0tZGVmaW5lLXZhcmlhYmxlPXByZWZpeD1cIiRwcmVmaXhcIiIKLSAgICBmaQotCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoW0JBU0hfQ09NUExFVElPTl0sIFtiYXNoLWNvbXBsZXRpb24gPj0gMi4wXSwKLSAgICAgICAgW0JBU0hfQ09NUExFVElPTl9ESVI9ImBldmFsIHBrZy1jb25maWcgJGV4dHJhX2FyZ3MgLS12YXJpYWJsZT1jb21wbGV0aW9uc2RpciBiYXNoLWNvbXBsZXRpb25gIl0sCi0gICAgICAgIFtCQVNIX0NPTVBMRVRJT05fRElSPSIkZGF0YWRpci9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMiXSkKLSAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbQkFTSF9DT01QTEVUSU9OXSwgW2Jhc2gtY29tcGxldGlvbiA+PSAyLjBdLAotICAgICAgICBbQkFTSF9IRUxQRVJTX0RJUj0iYGV2YWwgcGtnLWNvbmZpZyAkZXh0cmFfYXJncyAtLXZhcmlhYmxlPWhlbHBlcnNkaXIgYmFzaC1jb21wbGV0aW9uYCJdLAotICAgICAgICBbQkFTSF9IRUxQRVJTX0RJUj0iJGRhdGFkaXIvYmFzaC1jb21wbGV0aW9uL2hlbHBlcnMiXSkKLWVsc2UKLSAgICBCQVNIX0NPTVBMRVRJT05fRElSPSIkd2l0aF9iYXNoX2NvbXBsZXRpb25fZGlyL2NvbXBsZXRpb25zIgotICAgIEJBU0hfSEVMUEVSU19ESVI9IiR3aXRoX2Jhc2hfY29tcGxldGlvbl9kaXIvaGVscGVycyIKLWZpCi0KLUFDX1NVQlNUKFtCQVNIX0NPTVBMRVRJT05fRElSXSkKLUFDX1NVQlNUKFtCQVNIX0hFTFBFUlNfRElSXSkKLUFNX0NPTkRJVElPTkFMKFtFTkFCTEVfQkFTSF9DT01QTEVUSU9OXSxbdGVzdCAieCR3aXRoX2Jhc2hfY29tcGxldGlvbl9kaXIiICE9ICJ4bm8iXSkKLQotZG5sIGJ1aWxkIHN0YXRpYyBwbHVnaW5zIG9yIG5vdAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBwbHVnaW5zIG9yIG5vdF0pCi1BQ19BUkdfRU5BQkxFKAotICBzdGF0aWMtcGx1Z2lucywKLSAgQUNfSEVMUF9TVFJJTkcoCi0gICAgWy0tZW5hYmxlLXN0YXRpYy1wbHVnaW5zXSwKLSAgICBbYnVpbGQgc3RhdGljIHBsdWdpbnMgQDw6QGRlZmF1bHQ9bm9AOj5AXSksCi0gIFtBU19DQVNFKAotICAgIFskZW5hYmxldmFsXSwgW25vXSwgW10sIFt5ZXNdLCBbXSwKLSAgICBbQUNfTVNHX0VSUk9SKFtiYWQgdmFsdWUgIiRlbmFibGV2YWwiIGZvciAtLWVuYWJsZS1zdGF0aWMtcGx1Z2luc10pXSldLAotICBbZW5hYmxlX3N0YXRpY19wbHVnaW5zPW5vXSkKLUFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljX3BsdWdpbnNdKQotaWYgdGVzdCAieCRlbmFibGVfc3RhdGljX3BsdWdpbnMiID0geHllczsgdGhlbgotICBBQ19ERUZJTkUoR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUMsIDEsCi0gICAgW0RlZmluZSBpZiBzdGF0aWMgcGx1Z2lucyBzaG91bGQgYmUgYnVpbHRdKQotICBHU1RfUExVR0lOX0xJQlRPT0xGTEFHUz0iIgotZWxzZQotICBHU1RfUExVR0lOX0xJQlRPT0xGTEFHUz0iLS10YWc9ZGlzYWJsZS1zdGF0aWMiCi1maQotQUNfU1VCU1QoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1BTV9DT05ESVRJT05BTChHU1RfUExVR0lOX0JVSUxEX1NUQVRJQywgdGVzdCAieCRlbmFibGVfc3RhdGljX3BsdWdpbnMiID0gInh5ZXMiKQotCi1kbmwgSWYgb25seSBidWlsZGluZyBzdGF0aWMgbGlicmFyaWVzLCBkZWZpbmUgR1NUX1NUQVRJQ19DT01QSUxBVElPTi4gVGhpcyBpcwotZG5sIG5lZWRlZCBvbmx5IG9uIFdpbmRvd3MsIGJ1dCBpdCBkb2Vzbid0IGh1cnQgdG8gaGF2ZSBpdCBldmVyeXdoZXJlLgotaWYgdGVzdCB4JGVuYWJsZV9zdGF0aWMgPSB4eWVzIC1hIHgkZW5hYmxlX3NoYXJlZCA9IHhubzsgdGhlbgotICBHU1RfT0JKX1NUQVRJQ19DRkxBR1M9Ii1ER1NUX1NUQVRJQ19DT01QSUxBVElPTiIKLWZpCi0KLWRubCBidWlsZGluZyBvZiB0ZXN0cwotQUNfQVJHX0VOQUJMRSh0ZXN0cywKLSAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10ZXN0c10sW2Rpc2FibGUgYnVpbGRpbmcgdGVzdCBhcHBzXSksCi0gIFsKLSAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIEJVSUxEX1RFU1RTPXllcyA7OwotICAgICAgbm8pICBCVUlMRF9URVNUUz1ubyA7OwotICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLXRlc3RzKSA7OwotICAgIGVzYWMKLSAgXSwKLVtCVUlMRF9URVNUUz15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQotQU1fQ09ORElUSU9OQUwoQlVJTERfVEVTVFMsICAgICAgICAgdGVzdCAieCRCVUlMRF9URVNUUyIgPSAieHllcyIpCi0KLWRubCB0ZXN0cyBrbm93biB0byBmYWlsCi1BQ19BUkdfRU5BQkxFKGZhaWxpbmctdGVzdHMsCi0gIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZmFpbGluZy10ZXN0c10sW2Rpc2FibGUgYnVpbGRpbmcgdGVzdHMga25vd24gdG8gZmFpbF0pLAotICBbCi0gICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBCVUlMRF9GQUlMSU5HX1RFU1RTPXllcyA7OwotICAgICAgbm8pICBCVUlMRF9GQUlMSU5HX1RFU1RTPW5vIDs7Ci0gICAgICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtZmFpbGluZy10ZXN0cykgOzsKLSAgICBlc2FjCi0gIF0sCi0gIFtCVUlMRF9GQUlMSU5HX1RFU1RTPW5vXSkgZG5sIERlZmF1bHQgdmFsdWUKLUFNX0NPTkRJVElPTkFMKEJVSUxEX0ZBSUxJTkdfVEVTVFMsIHRlc3QgIngkQlVJTERfRkFJTElOR19URVNUUyIgPSAieHllcyIpCi1pZiB0ZXN0IHgkQlVJTERfRkFJTElOR19URVNUUyA9IHh5ZXM7IHRoZW4KLSAgQUNfTVNHX1dBUk4oW2J1aWxkaW5nIHRlc3RzIGtub3duIHRvIGZhaWwsIHVzZSAtLWRpc2FibGUtZmFpbGluZy10ZXN0cyB0byBkaXNhYmxlXSkKLWVsc2UKLSAgQUNfTVNHX1dBUk4oW1Npc3N5ICEgQnkgYXNraW5nIHRvIG5vdCBidWlsZCB0aGUgdGVzdHMga25vd24gdG8gZmFpbCwgeW91IGhlcmVieSB3YWl2ZSB5b3VyIHJpZ2h0IHRvIGN1c3RvbWVyIHN1cHBvcnQuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhpcyBFVUxBLCBwbGVhc2UgcHJlc3MgQ3RybC1DIGJlZm9yZSB0aGUgbmV4dCBsaW5lIGlzIHByaW50ZWQuICBCeSBhbGxvd2luZyB0aGUgbmV4dCBsaW5lIHRvIGJlIHByaW50ZWQsIHlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgRVVMQS5dKQotZmkKLQotZG5sIGJ1aWxkaW5nIG9mIGJlbmNobWFya3MKLUFDX0FSR19FTkFCTEUoYmVuY2htYXJrcywKLSAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1iZW5jaG1hcmtzXSxbZGlzYWJsZSBidWlsZGluZyBiZW5jaG1hcmtzIGFwcHNdKSwKLSAgWwotICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgQlVJTERfQkVOQ0hNQVJLUz15ZXMgOzsKLSAgICAgIG5vKSAgQlVJTERfQkVOQ0hNQVJLUz1ubyA7OwotICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWJlbmNobWFya3MpIDs7Ci0gICAgZXNhYwotICBdLAotW0JVSUxEX0JFTkNITUFSS1M9eWVzXSkgZG5sIERlZmF1bHQgdmFsdWUKLUFNX0NPTkRJVElPTkFMKEJVSUxEX0JFTkNITUFSS1MsIHRlc3QgIngkQlVJTERfQkVOQ0hNQVJLUyIgPSAieHllcyIpCi0KLWRubCBidWlsZGluZyBvZiB0b29scwotQUNfQVJHX0VOQUJMRSh0b29scywKLSAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS10b29sc10sW2Rpc2FibGUgYnVpbGRpbmcgdG9vbHNdKSwKLSAgWwotICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgQlVJTERfVE9PTFM9eWVzIDs7Ci0gICAgICBubykgIEJVSUxEX1RPT0xTPW5vIDs7Ci0gICAgICAqKSAgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtdG9vbHMpIDs7Ci0gICAgZXNhYwotICBdLAotW0JVSUxEX1RPT0xTPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCi1BTV9DT05ESVRJT05BTChCVUlMRF9UT09MUywgdGVzdCAieCRCVUlMRF9UT09MUyIgPSAieHllcyIpCi0KLWRubCBwb2lzb24gZGVzdHJveWVkIG9iamVjdHMKLUFDX0FSR19FTkFCTEUocG9pc29uaW5nLAotICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uaW5nXSxbZW5hYmxlIHBvaXNvbmluZyBvZiBkZWFsbG9jYXRlZCBvYmplY3RzXSksCi0gIFsKLSAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9QT0lTT05JTkc9eWVzIDs7Ci0gICAgICBubykgIFVTRV9QT0lTT05JTkc9bm8gOzsKLSAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXBvaXNvbmluZykgOzsKLSAgICBlc2FjCi0gIF0sCi0gIFtVU0VfUE9JU09OSU5HPW5vXSkgZG5sIERlZmF1bHQgdmFsdWUKLWlmIHRlc3QgIngkVVNFX1BPSVNPTklORyIgPSB4eWVzOyB0aGVuCi0gIEFDX0RFRklORShVU0VfUE9JU09OSU5HLCAxLAotICAgIFtEZWZpbmUgaWYgd2Ugc2hvdWxkIHBvaXNvbiBkZWFsbG9jYXRlZCBtZW1vcnldKQotZmkKLQotZG5sIFBUUCBzdXBwb3J0IHBhcnRzCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgUFRQIHN1cHBvcnQgY2FuIGJlIGVuYWJsZWRdKQotY2FzZSAiJGhvc3Rfb3MiIGluCi0gICphbmRyb2lkKikKLSAgICBkbmwgQ2FuJ3QgcnVuIG9uIEFuZHJvaWQgYmVjYXVzZSBvZiBwZXJtaXNzaW9ucwotICAgIEhBVkVfUFRQPW5vCi0gICAgOzsKLSAgbWluZ3cqfHB3MzIqfGN5Z3dpbiopCi0gICAgZG5sIE5vdCBwb3J0ZWQgdG8gV2luZG93cyB5ZXQKLSAgICBIQVZFX1BUUD1ubwotICAgIDs7Ci0gIGRhcndpbiopCi0gICAgZG5sIENhbid0IHJ1biBvbiBpT1MgYmVjYXVzZSBvZiBwZXJtaXNzaW9ucwotICAgIEFDX0NIRUNLX0hFQURFUihNb2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2VzLmgsIEhBVkVfUFRQPSJubyIsIEhBVkVfUFRQPSJ5ZXMiLCBbLV0pCi0gICAgOzsKLSAgbGludXgqfGRhcndpbip8c29sYXJpcyp8bmV0YnNkKnxmcmVlYnNkKnxvcGVuYnNkKnxrZnJlZWJzZCp8ZHJhZ29uZmx5KnxnbnUqKQotICAgIEhBVkVfUFRQPXllcwotICAgIDs7Ci0gICopCi0gICAgSEFWRV9QVFA9bm8KLSAgICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJEhBVkVfUFRQXSkKLQotZG5sIHVzZXIvZ3JvdXAgdG8gY2hhbmdlIHRvIGluIGdzdC1wdHAtaGVscGVyCi1BQ19BUkdfV0lUSChbcHRwLWhlbHBlci1zZXR1aWQtdXNlcl0sCi0gIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcHRwLWhlbHBlci1zZXR1aWQtdXNlcl0sW1VzZXIgdG8gc3dpdGNoIHRvIHdoZW4gaW5zdGFsbGluZyBnc3QtcHRwLWhlbHBlciBzZXR1aWQgcm9vdF0pLAotICBbCi0gICAgaWYgdGVzdCAieCR3aXRodmFsIiAhPSAieCIKLSAgICB0aGVuCi0gICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9VU0VSLCAiJHdpdGh2YWwiLCBbUFRQIGhlbHBlciBzZXR1aWQgdXNlcl0pCi0gICAgZmkKLSAgXSwgW10KLSkKLQotZG5sIGdyb3VwL2dyb3VwIHRvIGNoYW5nZSB0byBpbiBnc3QtcHRwLWhlbHBlcgotQUNfQVJHX1dJVEgoW3B0cC1oZWxwZXItc2V0dWlkLWdyb3VwXSwKLSAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wdHAtaGVscGVyLXNldHVpZC1ncm91cF0sW0dyb3VwIHRvIHN3aXRjaCB0byB3aGVuIGluc3RhbGxpbmcgZ3N0LXB0cC1oZWxwZXIgc2V0dWlkIHJvb3RdKSwKLSAgWwotICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgIT0gIngiCi0gICAgdGhlbgotICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfR1JPVVAsICIkd2l0aHZhbCIsIFtQVFAgaGVscGVyIHNldHVpZCBncm91cF0pCi0gICAgZmkKLSAgXSwgW10KLSkKLQotQUNfQVJHX1dJVEgoCi0gIHB0cC1oZWxwZXItcGVybWlzc2lvbnMsCi0gIEFDX0hFTFBfU1RSSU5HKAotICAgIFstLXdpdGgtcHRwLWhlbHBlci1wZXJtaXNzaW9uc10sCi0gICAgW2hvdyB0byBnYWluIFBUUCBwZXJtaXNzaW9ucyAobm9uZSwgc2V0dWlkLXJvb3QsIGNhcGFiaWxpdGllcywgYXV0byldKSwKLSAgICBbXSwKLSAgICBbd2l0aF9wdHBfaGVscGVyX3Blcm1pc3Npb25zPWF1dG9dKQotCi1nc3RfcHRwX2hhdmVfY2FwPW5vCi1BR19HU1RfQ0hFQ0tfTElCSEVBREVSKENBUCwgY2FwLAotICAgICAgICAgICAgICAgICAgICAgICBjYXBfaW5pdCwgLAotICAgICAgICAgICAgICAgICAgICAgICBzeXMvY2FwYWJpbGl0eS5oLAotICAgICAgICAgICAgICAgICAgICAgICBDQVBfTElCUz0iLWxjYXAiCi0gICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKENBUF9MSUJTKQotICAgICAgICAgICAgICAgICAgICAgICBnc3RfcHRwX2hhdmVfY2FwPXllcykKLQotQUNfUEFUSF9QUk9HKFtTRVRDQVBdLCBbc2V0Y2FwXSwgW25vXSwgWyRQQVRIOi91c3IvYmluOi9iaW46L3Vzci9zYmluOi9zYmluXSkKLQotaWYgdGVzdCAieCRIQVZFX1BUUCIgPSAieHllcyI7IHRoZW4KLUFDX0RFRklORShIQVZFX1BUUCwgMSwgW1BUUCBzdXBwb3J0IGF2YWlsYWJsZV0pCi0KLUFDX01TR19DSEVDS0lORyhbZm9yIFNJT0NHSUZDT05GLCBTSU9DR0lGRkxBR1MgYW5kIFNJT0NHSUZIV0FERFJdKQotQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgKLSAgICBbWwotICAgICAgICAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0gICAgICAgICNpbmNsdWRlIDxuZXQvaWYuaD4KLSAgICBdXSwKLSAgICBbWwotICAgICAgICBzdHJ1Y3QgaWZyZXEgaWZyOwotICAgICAgICBzdHJ1Y3QgaWZjb25mIGlmYzsKLSAgICAgICAgaW9jdGwoMCwgU0lPQ0dJRkNPTkYsICZpZmMpOwotICAgICAgICBpb2N0bCgwLCBTSU9DR0lGRkxBR1MsICZpZnIpOwotICAgICAgICBpb2N0bCgwLCBTSU9DR0lGSFdBRERSLCAmaWZyKTsKLSAgICAgICAgaW50IGR1bW15ID0gaWZyLmlmcl9od2FkZHIuc2FfZGF0YVswXTsKLSAgICBdXSldLCBbCi0gICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICAgICBBQ19ERUZJTkUoSEFWRV9TSU9DR0lGQ09ORl9TSU9DR0lGRkxBR1NfU0lPQ0dJRkhXQUREUiwgMSwgW1NJT0NHSUZDT05GLCBTSU9DR0lGRkxBR1MgYW5kIFNJT0NHSUZIV0FERFIgaXMgYXZhaWxhYmxlXSkKLSAgICBdLCBbCi0gICAgICAgIEFDX01TR19SRVNVTFQobm8pCi1dKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBnZXRpZmFkZHJzKCkgYW5kIEFGX0xJTktdKQotQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgKLSAgICBbWwotICAgICAgICAjaW5jbHVkZSA8aWZhZGRycy5oPgotICAgICAgICAjaW5jbHVkZSA8bmV0L2lmLmg+Ci0gICAgICAgICNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KLSAgICBdXSwKLSAgICBbWwotICAgICAgICBzdHJ1Y3QgaWZhZGRycyAqaWZhZGRyOwotICAgICAgICBnZXRpZmFkZHJzKCZpZmFkZHIpOwotICAgICAgICBpbnQgZHVtbXkgPSAoaWZhZGRyLT5pZmFfZmxhZ3MgJiBJRkZfTE9PUEJBQ0spICYmIGlmYWRkci0+aWZhX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9MSU5LOwotICAgIF1dKV0sIFsKLSAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gICAgICAgIEFDX0RFRklORShIQVZFX0dFVElGQUREUlNfQUZfTElOSywgMSwgW2dldGlmYWRkcnMoKSBhbmQgQUZfTElOSyBpcyBhdmFpbGFibGVdKQotICAgIF0sIFsKLSAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLSAgICBdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBpbnN0YWxsIGdzdC1wdHAtaGVscGVyXSkKLWlmIHRlc3QgIngkd2l0aF9wdHBfaGVscGVyX3Blcm1pc3Npb25zIiA9ICJ4YXV0byI7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGdzdF9wdHBfaGF2ZV9jYXAiID0gInh5ZXMiIC1hICJ4JFNFVENBUCIgIT0gInhubyI7IHRoZW4KLSAgICAgICAgd2l0aF9wdHBfaGVscGVyX3Blcm1pc3Npb25zPSJjYXBhYmlsaXRpZXMiCi0gICAgZWxzZQotICAgICAgICB3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnM9InNldHVpZC1yb290IgotICAgIGZpCi1maQotQUNfTVNHX1JFU1VMVChbJHdpdGhfcHRwX2hlbHBlcl9wZXJtaXNzaW9uc10pCi0KLWNhc2UgIiR3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnMiIGluCi0gIG5vbmUpCi0gICAgOzsKLSAgc2V0dWlkLXJvb3QpCi0gICAgIEFDX0RFRklORShIQVZFX1BUUF9IRUxQRVJfU0VUVUlELCAxLAotICAgICAgICBbVXNlIHNldHVpZC1yb290IGZvciBwZXJtaXNzaW9ucyBpbiBQVFAgaGVscGVyXSkKLSAgICA7OwotICBjYXBhYmlsaXRpZXMpCi0gICAgIEFDX0RFRklORShIQVZFX1BUUF9IRUxQRVJfQ0FQQUJJTElUSUVTLCAxLAotICAgICAgICBbVXNlIGNhcGFiaWxpdGllcyBmb3IgcGVybWlzc2lvbnMgaW4gUFRQIGhlbHBlcl0pCi0gICAgOzsKLSAgKikKLSAgICBBQ19NU0dfRVJST1IoSW52YWxpZCBwYXJhbWV0ZXIgWyR3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnNdKQotICAgIDs7Ci1lc2FjCi0KLWZpCi0KLUFNX0NPTkRJVElPTkFMKEhBVkVfUFRQLCB0ZXN0ICJ4JEhBVkVfUFRQIiA9ICJ4eWVzIikKLUFNX0NPTkRJVElPTkFMKEhBVkVfUFRQX0hFTFBFUl9TRVRVSUQsIHRlc3QgIngkd2l0aF9wdHBfaGVscGVyX3Blcm1pc3Npb25zIiA9ICJ4c2V0dWlkLXJvb3QiKQotQU1fQ09ORElUSU9OQUwoSEFWRV9QVFBfSEVMUEVSX0NBUEFCSUxJVElFUywgdGVzdCAieCR3aXRoX3B0cF9oZWxwZXJfcGVybWlzc2lvbnMiID0gInhjYXBhYmlsaXRpZXMiKQotCi1kbmwgKioqIGNoZWNrcyBmb3IgcGxhdGZvcm0gKioqCi0KLWRubCAqIGhhcmR3YXJlL2FyY2hpdGVjdHVyZSAqCi0KLWRubCBjb21tb24vbTQvZ3N0LWFyY2gubTQKLWRubCBjaGVjayBDUFUgdHlwZQotQUdfR1NUX0FSQ0gKLWRubCBzdWJzdGl0dXRpb24gZm9yIHdpbjMyL2NvbW1vbi9jb25maWcuaAotSE9TVF9DUFU9JGhvc3RfY3B1Ci1BQ19TVUJTVChIT1NUX0NQVSkKLQotZG5sIGNoZWNrIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyBzZXR0aW5ncwotQUdfR1NUX1BMQVRGT1JNCi0KLWRubCAqIHNvZnR3YXJlICoKLQotZG5sIGNoZWNrIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQKLWRubCBhZmZlY3RlZCBwbHVnaW5zIG11c3QgaW5jbHVkZSBjb25maWcuaAotQUNfU1lTX0xBUkdFRklMRQotCi1kbmwgKioqIGNoZWNrcyBmb3IgcHJvZ3JhbXMgKioqCi0KLWRubCBmaW5kIGEgY29tcGlsZXIKLUFDX1BST0dfQ0MKLUFDX1BST0dfQ0NfU1REQwotCi1kbmwgY2hlY2sgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzICctYycgYW5kICctbycgb3B0aW9ucwotQU1fUFJPR19DQ19DX08KLQotZG5sIGZpbmQgYW4gYXNzZW1ibGVyCi1BTV9QUk9HX0FTCi0KLWRubCBkZXRlcm1pbmUgaWYgYysrIGlzIGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbQotQUNfUFJPR19DWFgKLWRubCBDWFggbWF5IGJlIHNldCB0byBzb21lIGRlZmF1bHQgZXZlbiBpZiBubyBjKysgY29tcGlsZXIgaXMgYXZhaWxhYmxlCi1kbmwgKHRoYW5rcyBhdXRvdG9vbHMhKSwgc28ganVzdCB0cnkgdG8gY29tcGlsZSBzb21lIGMrKyBjb2RlIHRvIG1ha2Ugc3VyZQotQUNfTEFOR19QVVNIKFtDKytdKQotQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyBjbGFzcyBGb28geyBpbnQgYmFyOyB9O11dLCBbW11dKV0sW3dvcmtpbmdfY3h4PXllc10sW3dvcmtpbmdfY3h4PW5vXSkKLUFDX0xBTkdfUE9QKFtDKytdKQotQUNfTVNHX05PVElDRShbd29ya2luZyBjKysgY29tcGlsZXIgZm91bmQ6ICR3b3JraW5nX2N4eF0pCi1BTV9DT05ESVRJT05BTChIQVZFX0NYWCwgdGVzdCAieCR3b3JraW5nX2N4eCIgPSAieHllcyIpCi0KLWRubCBQZXJsIGlzIHVzZWQgaW4gYnVpbGRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgaW4gdGhlIHZlcnNpb24gY2hlY2tzCi1BQ19QQVRIX1BST0coUEVSTF9QQVRILCBwZXJsLCBubykKLWlmIHRlc3QgeCRQRVJMX1BBVEggPSB4bm87IHRoZW4KLSAgQUNfTVNHX0VSUk9SKENvdWxkIG5vdCBmaW5kIHBlcmwpCi1maQotCi1kbmwgd2UgcmVxdWlyZSBmbGV4IGFuZCBiaXNvbiBmb3IgYnVpbGRpbmcgdGhlIHBhcnNlcgotaWYgdGVzdCAieCRHU1RfRElTQUJMRV9QQVJTRSIgIT0geHllczsgdGhlbgotICBBR19HU1RfQklTT05fQ0hFQ0sKLSAgQUdfR1NUX0ZMRVhfQ0hFQ0sKLWZpCi0KLUFDX1BBVEhfUFJPRyhWQUxHUklORF9QQVRILCB2YWxncmluZCwgbm8pCi1BTV9DT05ESVRJT05BTChIQVZFX1ZBTEdSSU5ELCB0ZXN0ICEgIngkVkFMR1JJTkRfUEFUSCIgPSAieG5vIikKLQotZG5sIGNoZWNrIGZvciBnb2JqZWN0LWludHJvc3BlY3Rpb24KLUdPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDSyhbMS4zMS4xXSkKLQotZG5sIGNoZWNrIGZvciBkb2N1bWVudGF0aW9uIHRvb2xzCi1BR19HU1RfRE9DQk9PS19DSEVDSwotR1RLX0RPQ19DSEVDSyhbMS4xMl0pCi1BR19HU1RfUExVR0lOX0RPQ1MoWzEuMTJdKQotCi1kbmwgKioqIGNoZWNrcyBmb3IgbGlicmFyaWVzICoqKgotCi1kbmwgY2hlY2sgZm9yIGxpYm0sIGZvciBzaW4oKQotTFRfTElCX00KLUFDX1NVQlNUKExJQk0pCi0KLWRubCAqKiogY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMgKioqCi0KLWRubCBjaGVjayBpZiB3ZSBoYXZlIEFOU0kgQyBoZWFkZXIgZmlsZXMKLUFDX0hFQURFUl9TVERDCi0KLWRubCBDaGVjayBmb3IgdWNvbnRleHQuaAotQUNfQ0hFQ0tfSEVBREVSUyhbdWNvbnRleHQuaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKQotCi1kbmwgQ2hlY2sgZm9yIHN5cy9zb2NrZXQuaAotQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3NvY2tldC5oXSwgW0hBVkVfU1lTX1NPQ0tFVF9IPXllc10sIFtIQVZFX1NZU19TT0NLRVRfSD1ub10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKLUFNX0NPTkRJVElPTkFMKEhBVkVfU1lTX1NPQ0tFVF9ILCB0ZXN0ICJ4JEhBVkVfU1lTX1NPQ0tFVF9IIiA9ICJ4eWVzIikKLQotZG5sIGNoZWNrIGZvciBzeXMvdGltZXMuaCBmb3IgdGVzdHMvZXhhbXBsZXMvYWRhcHRlci8KLUFDX0NIRUNLX0hFQURFUlMoW3N5cy90aW1lcy5oXSwgW0hBVkVfU1lTX1RJTUVTX0g9eWVzXSwgW0hBVkVfU1lTX1RJTUVfSD1ub10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKLUFDX0NIRUNLX0hFQURFUlMoW3VuaXN0ZC5oXSwgW0hBVkVfVU5JU1REX0g9eWVzXSwgW0hBVkVfVU5JU1REX0g9bm9dLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pCi1BTV9DT05ESVRJT05BTChIQVZFX1NZU19USU1FU19IX0FORF9VTklTVERfSCwgdGVzdCAieCRIQVZFX1NZU19USU1FU19IIiA9ICJ4eWVzIiAtYSAieCRIQVZFX1VOSVNURF9IIiA9ICJ4eWVzIikKLQotZG5sIENoZWNrIGZvciBwcm9jZXNzLmggZm9yIGdldHBpZCgpIG9uIHdpbjMyCi1BQ19DSEVDS19IRUFERVJTKFtwcm9jZXNzLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKLQotZG5sIENoZWNrIGZvciBzeXMvdXRzbmFtZS5oIGZvciB1bmFtZQotQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3V0c25hbWUuaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKQotCi1kbmwgQ2hlY2sgZm9yIHN0ZGlvX2V4dC5mIGZvciBfX2ZidWZzaXplCi1BQ19DSEVDS19IRUFERVJTKFtzdGRpb19leHQuaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKQotCi1kbmwgY2hlY2sgZm9yIHB0aHJlYWRzCi1kbmwgd2l0aG91dCBhcmd1bWVudHMgQVhfUFRIUkVBRCgpIHdpbGwgZG8gQUNfREVGSU5FKEhBVkVfUFRIUkVBRCkKLWRubCB3aGljaCBsYXRlciBjaGVja3MgdXNlIGluIHRoZWlyIHRlc3QgY29kZQotQVhfUFRIUkVBRCgpCi1BTV9DT05ESVRJT05BTChIQVZFX1BUSFJFQUQsIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieHllcyIpCi0KLWRubCBjaGVjayBmb3Igc3lzL3ByY3RsIGZvciBzZXR0aW5nIHRocmVhZCBuYW1lIG9uIExpbnV4Ci1BQ19DSEVDS19IRUFERVJTKFtzeXMvcHJjdGwuaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKQotCi1kbmwgY2hlY2sgZm9yIHB0aHJlYWRfc2V0bmFtZV9ucChjb25zdCBjaGFyKikKLWRubCB3aGljaCBpcyBwcmVzZW50IG9uIE9TIFggMTAuNiwgaU9TIDMuMiBhbmQgYWJvdmUKLUFDX01TR19DSEVDS0lORyhmb3IgcHRocmVhZF9zZXRuYW1lX25wKGNvbnN0IGNoYXIqKSkKLUFDX0xJTktfSUZFTFNFKAotICAgIFtBQ19MQU5HX1BST0dSQU0oCi0gICAgICAgIFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCi0gICAgICAgIFtwdGhyZWFkX3NldG5hbWVfbnAoImV4YW1wbGUiKV0pXSwKLSAgICBbQUNfTVNHX1JFU1VMVCh5ZXMpCi0gICAgIEFDX0RFRklORShIQVZFX1BUSFJFQURfU0VUTkFNRV9OUF9XSVRIT1VUX1RJRCwxLAotICAgICAgICBbSGF2ZSBmdW5jdGlvbiBwdGhyZWFkX3NldG5hbWVfbnAoY29uc3QgY2hhciopXSldLAotICAgIFtBQ19NU0dfUkVTVUxUKG5vKV0pCi0KLWRubCBjaGVjayBmb3Igc3lzL3Vpby5oIGZvciB3cml0ZXYoKQotQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3Vpby5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pCi0KLWRubCBDaGVjayBmb3IgdmFsZ3JpbmQuaAotZG5sIHNlcGFyYXRlIGZyb20gSEFWRV9WQUxHUklORCBiZWNhdXNlIHlvdSBjYW4gaGF2ZSB0aGUgcHJvZ3JhbSwgYnV0IG5vdAotZG5sIHRoZSBkZXYgcGFja2FnZQotQUNfQ0hFQ0tfSEVBREVSUyhbdmFsZ3JpbmQvdmFsZ3JpbmQuaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKQotCi1kbmwgdXNlZCBpbiBnc3QvZ3N0cG9sbC5jCi1BQ19DSEVDS19IRUFERVJTKFt3aW5zb2NrMi5oXSwgW0hBVkVfV0lOU09DSzJfSD15ZXNdLCBbSEFWRV9XSU5TT0NLMl9IPW5vXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKQotQU1fQ09ORElUSU9OQUwoSEFWRV9XSU5TT0NLMl9ILCB0ZXN0ICJ4JEhBVkVfV0lOU09DSzJfSCIgPSAieHllcyIpCi1pZiB0ZXN0ICJ4JEhBVkVfV0lOU09DSzJfSCIgPSAieHllcyI7IHRoZW4KLSAgV0lOMzJfTElCUz0iLWx3czJfMzIiCi0gIEFDX1NVQlNUKFdJTjMyX0xJQlMpCi1maQotCi1kbmwgY2hlY2sgZm9yIEdNUC9HU0wsIHVzZWQgYnkgdGhlIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSB1bml0IHRlc3Qgb25seQotaWYgdGVzdCAieCRCVUlMRF9URVNUUyIgPSAieHllcyI7IHRoZW4KLSAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTVAsIGdtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBfX2dtcHpfaW5pdF9zZXRfZCwgLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdtcC5oLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdNUF9MSUJTPSItbGdtcCIKLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChHTVBfTElCUykKLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HTVAsIFsxXSxbSGF2ZSBHTVAgbGlicmFyeV0pKQotICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdTTCwgZ3NsLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdzbF9ybmdfdW5pZm9ybV9pbnQsIC1sZ3NsY2JsYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ3NsL2dzbF9ybmcuaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHU0xfTElCUz0iLWxnc2wgLWxnc2xjYmxhcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChHU0xfTElCUykKLSAgICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HU0wsIFsxXSxbSGF2ZSBHU0wgbGlicmFyeV0pKQotZmkKLQotZG5sICoqKiBjaGVja3MgZm9yIHR5cGVzL2RlZmluZXMgKioqCi0KLWRubCAqKiogY2hlY2tzIGZvciBzdHJ1Y3R1cmVzICoqKgotCi1kbmwgKioqIGNoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzICoqKgotCi1kbmwgY2hlY2sgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIF9fdWludDEyOF90IChnY2MpCi1kbmwgQWN0dWFsbHkgY2hlY2sgZm9yIDEyOC1iaXQgZGl2aXNpb24sIHNpbmNlIHRoYXQncyB3aGF0IHdlIHVzZQotZG5sIHVpbnQxMjhfdCBmb3IuCi1BQ19DQUNIRV9DSEVDSyhmb3IgX191aW50MTI4X3QsIGdzdF9jdl91aW50MTI4X3QsCi0gICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyBdXSwgW1sKLSAgICAgIHN0YXRpYyBfX3VpbnQxMjhfdCB2MSA9IDEwMDsKLSAgICAgIHN0YXRpYyBfX3VpbnQxMjhfdCB2MiA9IDEwOwotICAgICAgc3RhdGljIF9fdWludDEyOF90IHU7Ci0gICAgICB1ID0gdjEgLyB2MjsKLSAgICBdXSldLFsKLSAgICAgIGdzdF9jdl91aW50MTI4X3Q9eWVzCi0gICAgXSxbCi0gICAgICBnc3RfY3ZfdWludDEyOF90PW5vCi0gICAgXSkKLSkKLWlmIHRlc3QgeCRnc3RfY3ZfdWludDEyOF90ID0geHllczsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9VSU5UMTI4X1QsIDEsIFtIYXZlIF9fdWludDEyOF90IHR5cGVdKQotZmkKLQotZG5sICoqKiBjaGVja2luZyBmb3IgdG1fZ210b2ZmICoqKgotQUNfTVNHX0NIRUNLSU5HKFtmb3IgdG1fZ210b2ZmXSkKLUFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCi0JI2luY2x1ZGUgPHRpbWUuaD4KLQlpbnQgbWFpbih2b2lkKSB7Ci0JICBzdHJ1Y3QgdG0gdDsKLQkgIHQudG1fZ210b2ZmID0gMDsKLQkgIGV4aXQoMCk7Ci0JfV1dKV0sCi0gIFtoYXZlX3RtX2dtdG9mZj15ZXMKLSAgIEFDX0RFRklORShIQVZFX1RNX0dNVE9GRiwxLFtIYXZlIHRtX2dtdG9mZiBmaWVsZCBpbiBzdHJ1Y3QgdG1dKV0sCi0gIFtoYXZlX3RtX2dtdG9mZj1ub10sCi0gIFtoYXZlX3RtX2dtdG9mZj0ibm8gKGNyb3NzIGNvbXBpbGluZykiXSkKLUFDX01TR19SRVNVTFQoJGhhdmVfdG1fZ210b2ZmKQotCi0KLWRubCAqKiogY2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucyAqKioKLQotQUNfQ0hFQ0tfRlVOQ1MoW3N0cmNhc2VzdHJdKQotCi1BQ19DSEVDS19GVU5DUyhbZ210aW1lX3JdKQotQUNfQ0hFQ0tfRlVOQ1MoW2xvY2FsdGltZV9yXSkKLUFDX0NIRUNLX0ZVTkNTKFtzaWdhY3Rpb25dKQotQUNfQ0hFQ0tfRlVOQ1MoW2dldHJ1c2FnZV0pCi1BTV9DT05ESVRJT05BTChIQVZFX0dFVFJVU0FHRSwgdGVzdCAieCRhY19jdl9mdW5jX2dldHJ1c2FnZSIgPSAieHllcyIpCi1BQ19DSEVDS19IRUFERVJTKFtzeXMvcmVzb3VyY2UuaF0pCi0KLWRubCBjaGVjayBmb3IgZnNlZWtvKCkKLUFDX0ZVTkNfRlNFRUtPCi1kbmwgY2hlY2sgZm9yIGZ0ZWxsbygpCi1BQ19DSEVDS19GVU5DUyhbZnRlbGxvXSkKLQotQUNfQ0hFQ0tfRlVOQ1MoW2ZnZXRwb3NdKQotQUNfQ0hFQ0tfRlVOQ1MoW2ZzZXRwb3NdKQotCi1kbmwgY2hlY2sgZm9yIHBvbGwoKSwgcHBvbGwoKSBhbmQgcHNlbGVjdCgpCi1BQ19DSEVDS19IRUFERVJTKFtzeXMvcG9sbC5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pCi1BQ19DSEVDS19IRUFERVJTKFtwb2xsLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSkKLUFDX0NIRUNLX0ZVTkNTKFtwb2xsXSkKLUFDX0NIRUNLX0ZVTkNTKFtwcG9sbF0pCi1BQ19DSEVDS19GVU5DUyhbcHNlbGVjdF0pCi0KLWRubCBjaGVjayBmb3Igc29ja2V0cGFpcigpCi1BQ19DSEVDS19GVU5DKHNvY2tldHBhaXIsIFtdLCBbCi0gIEFDX0NIRUNLX0xJQihzb2NrZXQsIHNvY2tldHBhaXIsIFsKLSAgICBTT0NLRVRfTElCUz0iLWxzb2NrZXQiCi0gICAgQUNfU1VCU1QoU09DS0VUX0xJQlMpCi0gIF0pCi1dKQotCi1kbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotZG5sICoqKiBHTGliIFBPTEwqIGNvbXBhdGliaWxpdHkgZGVmaW5lcyAqKioKLWRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUFDX01TR19DSEVDS0lORyhbZm9yIGJyb2tlbiBwb2xsXSkKLUFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCi0JI2luY2x1ZGUgPHN0ZGxpYi5oPgotCSNpbmNsdWRlIDxmY250bC5oPgotCSNpZmRlZiBIQVZFX1NZU19QT0xMX0gKLQkjaW5jbHVkZSA8c3lzL3BvbGwuaD4KLQkjZW5kaWYKLQkjaWZkZWYgSEFWRV9QT0xMX0gKLQkjaW5jbHVkZSA8cG9sbC5oPgotCSNlbmRpZgotCWludCBtYWluKHZvaWQpIHsKLQkgIHN0cnVjdCBwb2xsZmQgZmRzWzFdOwotCSAgaW50IGZkOwotCSAgZmQgPSBvcGVuKCIvZGV2L251bGwiLCAxKTsKLQkgIGZkc1swXS5mZCA9IGZkOwotCSAgZmRzWzBdLmV2ZW50cyA9IFBPTExJTjsKLQkgIGZkc1swXS5yZXZlbnRzID0gMDsKLQkgIGlmIChwb2xsKGZkcywgMSwgMCkgPCAwIHx8IChmZHNbMF0ucmV2ZW50cyAmIFBPTExOVkFMKSAhPSAwKSB7Ci0JCWV4aXQoMSk7ICAvKiBEb2VzIG5vdCB3b3JrIGZvciBkZXZpY2VzIC0tIGZhaWwgKi8KLQkgIH0KLQkgIGV4aXQoMCk7Ci0JfV1dKV0sCi0gIFticm9rZW5fcG9sbD1ub10sCi0gIFticm9rZW5fcG9sbD15ZXMKLSAgIEFDX0RFRklORShCUk9LRU5fUE9MTCwxLFtwb2xsIGRvZXNuJ3Qgd29yayBvbiBkZXZpY2VzXSldLAotICBbYnJva2VuX3BvbGw9Im5vIChjcm9zcyBjb21waWxpbmcpIl0pCi1BQ19NU0dfUkVTVUxUKCRicm9rZW5fcG9sbCkKLQotZG5sIGNoZWNrIGZvciBtbWFwKCkKLUFDX0ZVTkNfTU1BUAotQU1fQ09ORElUSU9OQUwoSEFWRV9NTUFQLCB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID0gInh5ZXMiKQotCi1kbmwgY2hlY2sgZm9yIHBvc2l4X21lbWFsaWduKCksIGdldHBhZ2VzaXplKCkKLUFDX0NIRUNLX0ZVTkNTKFtwb3NpeF9tZW1hbGlnbl0pCi1BQ19DSEVDS19GVU5DUyhbZ2V0cGFnZXNpemVdKQotCi1kbmwgQ2hlY2sgZm9yIFBPU0lYIHRpbWVycwotQ0xPQ0tfR0VUVElNRV9GT1VORD0ibm8iCi1BQ19DSEVDS19GVU5DKGNsb2NrX2dldHRpbWUsIFtDTE9DS19HRVRUSU1FX0ZPVU5EPSJ5ZXMiXSwgWwotICBBQ19DSEVDS19MSUIocnQsIGNsb2NrX2dldHRpbWUsIFsKLSAgICBDTE9DS19HRVRUSU1FX0ZPVU5EPSJ5ZXMiCi0gICAgTElCUz0iJExJQlMgLWxydCIKLSAgXSwgWwotICAgIEFDX0NIRUNLX0xJQihwdGhyZWFkLCBjbG9ja19nZXR0aW1lLCBbCi0gICAgICBDTE9DS19HRVRUSU1FX0ZPVU5EPSJ5ZXMiCi0gICAgICBMSUJTPSIkTElCUyAtbHB0aHJlYWQiCi0gICAgXSkKLSAgXSkKLV0pCi0KLSMgV2l0aCBYQ29kZSA4LCBjbG9ja19nZXR0aW1lIHdpbGwgYmUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgYXMgYmVpbmcgYXZhaWxhYmxlCi0jIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB2ZXJzaW9uIG9mIE9TIFggeW91IHRhcmdldCBiZWNhdXNlIHRoZSBzeW1ib2wgaXMgYXZhaWxhYmxlCi0jIGluIHRoZSAudGJkIGZpbGUgYXMgYSB3ZWFrIHN5bWJvbC4KLSMgU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyNDUxIAotIwotIyBXZSBjYW5ub3Qgc2ltcGx5IGRvIEFDX0NIRUNLX0ZVTkNTIHdpdGggLVdsLC1ub193ZWFrX2ltcG9ydHMgYmVjYXVzZSB0aGUKLSMgYXV0b2NvbmYgY2hlY2sgZG9lcyBpdHMgb3duIHByb3RvdHlwZSBkZWNsYXJhdGlvbiB0aGF0IGRvZXNuJ3QgdHJpZ2dlciB0aGF0Ci0jIGNvbXBpbGVyIGZsYWcuCi0jCi0jIEl0J3Mgb25seSBzdGFydGluZyBmcm9tIG1hY09TIDEwLjEyIGFuZCBpT1MgMTAuMCB0aGF0IGNsb2NrX2dldHRpbWUgaXMKLSMgYWN0dWFsbHkgYXZhaWxhYmxlLCBzbyB3ZSBjYW4gdW5jb25kaXRpb25hbGx5IGRpc2FibGUgaXQgZm9yIG9sZGVyIHZlcnNpb25zLgotY2FzZSAiJGhvc3Rfb3MiIGluCi0gIGRhcndpbiopCi0gICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCi0jaW5jbHVkZSA8QXZhaWxhYmlsaXR5TWFjcm9zLmg+Ci0jaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+Ci0jaWYgZGVmaW5lZChUQVJHRVRfT1NfTUFDKQotIyAgaWYgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCBNQUNfT1NfWF9WRVJTSU9OXzEwXzEyCi0jICAgIGVycm9yICJOb3QgY29tcGlsaW5nIGZvciBPUyBYIDEwLjEyIG9yIGxhdGVyIgotIyAgZW5kaWYKLSNlbHNlCi0jICBpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA8IF9fSVBIT05FXzEwXzAKLSMgICAgZXJyb3IgIk5vdCBjb21waWxpbmcgZm9yIGlPUyAxMC4wIG9yIGxhdGVyIgotIyAgZW5kaWYKLSNlbmRpZgotICAgIF1dKV0sIFtdLCBbCi0gICAgaWYgdGVzdCAiJENMT0NLX0dFVFRJTUVfRk9VTkQiID0gInllcyI7IHRoZW4KLSAgICAgIEFDX01TR19OT1RJQ0UoW0Rpc2FibGluZyBpbmNvcnJlY3RseSBkZXRlY3RlZCBjbG9ja19nZXR0aW1lIG9uIE9TIFhdKQotICAgIGZpCi0gICAgQ0xPQ0tfR0VUVElNRV9GT1VORD0ibm8iCi0gICAgXSkKLSAgICA7OwotZXNhYwotCi1pZiB0ZXN0ICIkQ0xPQ0tfR0VUVElNRV9GT1VORCIgPSAieWVzIjsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9DTE9DS19HRVRUSU1FLCAxLCBbSGF2ZSBjbG9ja19nZXR0aW1lXSkKLWZpCi0KLUFDX0NBQ0hFX0NIRUNLKGZvciBwb3NpeCB0aW1lcnMsIGdzdF9jdl9wb3NpeF90aW1lcnMsCi0gICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwotI2luY2x1ZGUgPHRpbWUuaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSAgICBdXSwgW1sKLSNpZiAhZGVmaW5lZChfUE9TSVhfVElNRVJTKSB8fCBfUE9TSVhfVElNRVJTIDwgMCB8fCAhZGVmaW5lZChDTE9DS19SRUFMVElNRSkKLSNlcnJvciBFaXRoZXIgX1BPU0lYX1RJTUVSUyBvciBDTE9DS19SRUFMVElNRSBub3QgZGVmaW5lZAotI2VuZGlmCi0gICAgXV0pXSxbCi0gICAgICBnc3RfY3ZfcG9zaXhfdGltZXJzPXllcwotICAgIF0sWwotICAgICAgZ3N0X2N2X3Bvc2l4X3RpbWVycz1ubwotICAgIF0pCi0pCi0KLWlmIHRlc3QgIiRnc3RfY3ZfcG9zaXhfdGltZXJzIiA9ICJ5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX1BPU0lYX1RJTUVSUywxLFtIYXZlIHBvc2l4IHRpbWVyc10pCi0gIEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfUE9TSVhfVElNRVJTIDEiCi1lbHNlCi0gIEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkU9IiNkZWZpbmUgR1NUX0hBVkVfUE9TSVhfVElNRVJTIDAiCi1maQotQUNfU1VCU1QoR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSkKLUFNX0NPTkRJVElPTkFMKEdTVF9IQVZFX1BPU0lYX1RJTUVSUywgdGVzdCAiJGdzdF9jdl9wb3NpeF90aW1lcnMiID0gInllcyIpCi0KLUFDX0NBQ0hFX0NIRUNLKGZvciBtb25vdG9uaWMgY2xvY2ssIGdzdF9jdl9tb25vdG9uaWNfY2xvY2ssCi0gICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwotI2luY2x1ZGUgPHRpbWUuaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSAgICBdXSwgW1sKLSNpZiAhZGVmaW5lZChfUE9TSVhfTU9OT1RPTklDX0NMT0NLKSB8fCBfUE9TSVhfTU9OT1RPTklDX0NMT0NLIDwgMCB8fCAhZGVmaW5lZChDTE9DS19NT05PVE9OSUMpCi0jZXJyb3IgRWl0aGVyIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgb3IgQ0xPQ0tfTU9OT1RPTklDIG5vdCBkZWZpbmVkCi0jZW5kaWYKLSAgICBdXSldLFsKLSAgICAgIGdzdF9jdl9tb25vdG9uaWNfY2xvY2s9eWVzCi0gICAgXSxbCi0gICAgICBnc3RfY3ZfbW9ub3RvbmljX2Nsb2NrPW5vCi0gICAgXSkKLSkKLQotaWYgdGVzdCAiJGdzdF9jdl9tb25vdG9uaWNfY2xvY2siID0gInllcyI7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfTU9OT1RPTklDX0NMT0NLLDEsW0hhdmUgYSBtb25vdG9uaWMgY2xvY2tdKQotICBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FPSIjZGVmaW5lIEdTVF9IQVZFX01PTk9UT05JQ19DTE9DSyAxIgotZWxzZQotICBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FPSIjZGVmaW5lIEdTVF9IQVZFX01PTk9UT05JQ19DTE9DSyAwIgotZmkKLUFDX1NVQlNUKEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUpCi1BTV9DT05ESVRJT05BTChHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0ssIHRlc3QgIiRnc3RfY3ZfbW9ub3RvbmljX2Nsb2NrIiA9ICJ5ZXMiKQotCi1kbmwgQ2hlY2sgZm9yIGEgd2F5IHRvIGRpc3BsYXkgdGhlIGZ1bmN0aW9uIG5hbWUgaW4gZGVidWcgb3V0cHV0Ci1BR19HU1RfQ0hFQ0tfRlVOQ1RJT04KLQotZG5sIHRlc3QgaWYgd2UgaGF2ZSBkbGFkZHIoKTsgd2UgdXNlIGl0IGZvciBkZWJ1Z2dpbmc7IHNlZSBnc3QvZ3N0aW5mby5jCi1zYXZlX2NmbGFncz0iJENGTEFHUyIKLUNGTEFHUz0iJENGTEFHUyAtRF9HTlVfU09VUkNFIgotQUNfQ0hFQ0tfTElCKGRsLCBkbGFkZHIsCi0gICBBQ19ERUZJTkUoSEFWRV9ETEFERFIsIDEsIFtEZWZpbmVkIGlmIHdlIGhhdmUgZGxhZGRyICgpXSkKLSAgIExJQlM9IiRMSUJTIC1sZGwiKQotQ0ZMQUdTPSIkc2F2ZV9jZmxhZ3MiCi0KLWRubCBDaGVjayBwcmludGYgc3R1ZmYKLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX0dTVF9ERUJVR30iICE9ICJ4eWVzIjsgdGhlbgotICBBQ19UWVBFX0xPTkdfTE9OR19JTlQKLSAgQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCi0KLSAgaWYgdGVzdCB4JGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB4eWVzeWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKFtIQVZFX0xPTkdfTE9OR10sIFsxXSwgW0RlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGxvbmcgbG9uZ10pCi0gIGZpCi0KLSAgZG5sIC91c3Ivc2hhcmUvYWNsb2NhbC9pbnR0eXBlc19oLm00IC0gc2hpcHMgd2l0aCBnZXR0ZXh0IGFwcGFyZW50bHkKLSAgZ2xfQUNfSEVBREVSX0lOVFRZUEVTX0gKLQotICBkbmwgL3Vzci9zaGFyZS9hY2xvY2FsL3N0ZGludF9oLm00IC0gc2hpcHMgd2l0aCBnZXR0ZXh0IGFwcGFyZW50bHkKLSAgZ2xfQUNfSEVBREVSX1NURElOVF9ICi0KLSAgQUNfQ0hFQ0tfVFlQRVMocHRyZGlmZl90KQotCi0gIEFDX1RZUEVfSU5UTUFYX1QKLSAgQUNfVFlQRV9TSVpFX1QKLWZpCi0KLWRubCAqKiogY2hlY2tzIGZvciBkZXBlbmRlbmN5IGxpYnJhcmllcyAqKioKLQotZG5sIEdMaWIKLUdMSUJfUkVRPTIuNDAuMAotQUdfR1NUX0dMSUJfQ0hFQ0soWyRHTElCX1JFUV0pCi0KLWRubCBDaGVjayBmb3IgZG9jdW1lbnRhdGlvbiB4cmVmcwotR0xJQl9QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnbGliLTIuMGAiCi1BQ19TVUJTVChHTElCX1BSRUZJWCkKLQotZG5sIEdUSyBpcyBvcHRpb25hbCBhbmQgb25seSB1c2VkIGluIGV4YW1wbGVzCi1IQVZFX0dUSz1ubwotR1RLX1JFUT0zLjEwCi1pZiB0ZXN0ICJ4JEJVSUxEX0VYQU1QTEVTIiA9ICJ4eWVzIjsgdGhlbgotICBQS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIGd0aystMy4wID49ICRHVEtfUkVRLCBIQVZFX0dUSz15ZXMsIEhBVkVfR1RLPW5vKQotICBBQ19TVUJTVChHVEtfTElCUykKLSAgQUNfU1VCU1QoR1RLX0NGTEFHUykKLWZpCi1BTV9DT05ESVRJT05BTChIQVZFX0dUSywgdGVzdCAieCRIQVZFX0dUSyIgPSAieHllcyIpCi0KLWRubCBsaWJ1bndpbmQgaXMgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBsZWFrcyB0cmFjZXIKLVBLR19DSEVDS19NT0RVTEVTKFVOV0lORCwgbGlidW53aW5kLCBIQVZFX1VOV0lORD15ZXMsIEhBVkVfVU5XSU5EPW5vKQotCi1kbmwgQ2hlY2sgZm9yIGJhY2t0cmFjZSgpIGZyb20gbGliYwotQUNfQ0hFQ0tfRlVOQyhiYWNrdHJhY2UsIFsKLSAgQUNfQ0hFQ0tfSEVBREVSUyhbZXhlY2luZm8uaF0sIFsKLSAgICBBQ19ERUZJTkUoSEFWRV9CQUNLVFJBQ0UsMSxbSGF2ZSBiYWNrdHJhY2VdKQotICBdLCBbXSwgW10pCi1dKQotCi1pZiB0ZXN0ICJ4JEhBVkVfVU5XSU5EIiA9ICJ4eWVzIjsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9VTldJTkQsIDEsIFtsaWJ1bndpbmQgYXZhaWxhYmxlXSkKLWZpCi0KLWRubCBidWlsZGluZyBvZiB1bml0IHRlc3QgbGlicmFyaWVzCi1BQ19BUkdfRU5BQkxFKGNoZWNrLAotICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWNoZWNrXSxbZGlzYWJsZSBidWlsZGluZyB1bml0IHRlc3QgbGlicmFyaWVzXSksCi0gIFsKLSAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIEJVSUxEX0NIRUNLPXllcyA7OwotICAgICAgbm8pICBCVUlMRF9DSEVDSz1ubyA7OwotICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWNoZWNrKSA7OwotICAgIGVzYWMKLSAgXSwgWwotICAgIGRubCBEZWZhdWx0IHZhbHVlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgbWluZ3cqIHwgbXN2YyogfCBta3MqKSBCVUlMRF9DSEVDSz1ubyA7OwotICAgICAgKikgQlVJTERfQ0hFQ0s9eWVzIDs7Ci0gICAgZXNhYwotXSkKLWRubCBiaXQgb2YgYSBtaXNub21lciwgYnV0IGtlZXAgdGhlIGNvbmRpdGlvbmFsIG5hbWVkIGxpa2UgdGhpcyBzbyB3ZSBkb24ndAotZG5sIGhhdmUgdG8gY2hhbmdlIHRvbyBtdWNoIGVsc2V3aGVyZQotQU1fQ09ORElUSU9OQUwoSEFWRV9DSEVDSywgdGVzdCAieCRCVUlMRF9DSEVDSyIgPSAieHllcyIpCi0KLWRubCBjb25maWd1cmUgdGhlIGRlc2lyZWQgbWVtb3J5IGFsaWdubWVudAotQUNfQVJHX1dJVEgoW21lbW9yeS1hbGlnbm1lbnRdLAotICBBU19IRUxQX1NUUklORyhbLS13aXRoLW1lbW9yeS1hbGlnbm1lbnRdLFs4LE4sbWFsbG9jLHBhZ2VzaXplIChkZWZhdWx0IGlzIDMyKV0pLAotICBbCi0gICAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIgotICAgIHRoZW4KLSAgICAgIEFDX0RFRklORShNRU1PUllfQUxJR05NRU5ULCAzMiwgW01lbW9yeSBhbGlnbm1lbnQgdG8gdXNlXSkKLSAgICBlbHNlCi0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICBtYWxsb2MpIEFDX0RFRklORShNRU1PUllfQUxJR05NRU5UX01BTExPQywgMSwgW01lbW9yeSBhbGlnbm1lbnQgYnkgbWFsbG9jIGRlZmF1bHRdKSA7OwotICAgICAgICBwYWdlc2l6ZSkgIEFDX0RFRklORShNRU1PUllfQUxJR05NRU5UX1BBR0VTSVpFLCAxLCBbTWVtb3J5IGFsaWdubWVudCBieSBwYWdlc2l6ZV0pIDs7Ci0gICAgICAgICopICAgQUNfREVGSU5FX1VOUVVPVEVEKE1FTU9SWV9BTElHTk1FTlQsICR7d2l0aHZhbH0sIFtNZW1vcnkgYWxpZ25tZW50IHRvIHVzZV0pIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgXSwgWwotICAgIEFDX0RFRklORShNRU1PUllfQUxJR05NRU5UX01BTExPQywgMSwgW01lbW9yeSBhbGlnbm1lbnQgYnkgbWFsbG9jIGRlZmF1bHRdKQotICBdCi0pCi0KLWRubCBDaGVjayBmb3IgLUJzeW1ib2xpYy1mdW5jdGlvbnMgbGlua2VyIGZsYWcgdXNlZCB0byBhdm9pZAotZG5sIGludHJhLWxpYnJhcnkgUExUIGp1bXBzLCBpZiBhdmFpbGFibGUuCi1BQ19BUkdfRU5BQkxFKEJzeW1ib2xpYywKLSAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtQnN5bWJvbGljXSxbYXZvaWQgbGlua2luZyB3aXRoIC1Cc3ltYm9saWNdKV0sLAotICAgICAgICAgICAgICBbU0FWRURfTERGTEFHUz0iJHtMREZMQUdTfSIgU0FWRURfTElCUz0iJHtMSUJTfSIKLSAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIC1Cc3ltYm9saWMtZnVuY3Rpb25zIGxpbmtlciBmbGFnXSkKLSAgICAgICAgICAgICAgIExERkxBR1M9LVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zCi0gICAgICAgICAgICAgICBMSUJTPQotICAgICAgICAgICAgICAgQUNfVFJZX0xJTksoW10sIFtyZXR1cm4gMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9Cc3ltYm9saWM9eWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9Cc3ltYm9saWM9bm8pCi0gICAgICAgICAgICAgICBMREZMQUdTPSIke1NBVkVEX0xERkxBR1N9IiBMSUJTPSIke1NBVkVEX0xJQlN9Il0pCi0KLQotZG5sICoqKiBzZXQgdmFyaWFibGVzIGJhc2VkIG9uIGNvbmZpZ3VyZSBhcmd1bWVudHMKLQotZG5sIHNldCBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlCi1HU1RfTElDRU5TRT0iTEdQTCIKLUFDX0RFRklORV9VTlFVT1RFRChHU1RfTElDRU5TRSwgIiRHU1RfTElDRU5TRSIsIFtHU3RyZWFtZXIgbGljZW5zZV0pCi1BQ19TVUJTVChHU1RfTElDRU5TRSkKLQotZG5sIGRlZmluZSBMSUJESVIsIEdTVF9EQVRBRElSIHNvIHdlIGNhbiBpbmZvcm0gcGVvcGxlIHdoZXJlIHdlIGxpdmUKLUFTX0FDX0VYUEFORChMSUJESVIsICRsaWJkaXIpCi1BQ19ERUZJTkVfVU5RVU9URUQoTElCRElSLCAiJExJQkRJUiIsIFtsaWJyYXJ5IGRpcl0pCi1BU19BQ19FWFBBTkQoREFUQURJUiwgJGRhdGFkaXIpCi1BQ19ERUZJTkVfVU5RVU9URUQoR1NUX0RBVEFESVIsICIkREFUQURJUiIsIFtkYXRhIGRpcl0pCi0KLWRubCBzZXQgbG9jYXRpb24gb2YgcGx1Z2luIGRpcmVjdG9yeQotQUdfR1NUX1NFVF9QTFVHSU5ESVIKLQotZG5sIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IHVudXNlZCB2YXJpYWJsZXMgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkCi1OT19XQVJOSU5HUz0iIgotaWYgdGVzdCAieCR7R1NUX0RJU0FCTEVfR1NUX0RFQlVHfSIgPSAieHllcyI7IHRoZW4KLSAgTk9fV0FSTklOR1M9Ii1Xbm8tdW51c2VkIgotZmkKLQotZG5sIGRlZmluZSBhbiBFUlJPUl9DRkxBR1MgTWFrZWZpbGUgdmFyaWFibGUKLUFHX0dTVF9TRVRfRVJST1JfQ0ZMQUdTKCRGQVRBTF9XQVJOSU5HUywgWy1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdyZWR1bmRhbnQtZGVjbHMgLVd1bmRlZiAtV3dyaXRlLXN0cmluZ3MgLVdmb3JtYXQtbm9ubGl0ZXJhbCAtV2Zvcm1hdC1zZWN1cml0eSAtV29sZC1zdHlsZS1kZWZpbml0aW9uIC1XaW5pdC1zZWxmIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMgLVdhZGRyZXNzIC1XYWdncmVnYXRlLXJldHVybiAtV25vLW11bHRpY2hhciAtV25lc3RlZC1leHRlcm5zICROT19XQVJOSU5HU10pCi0KLWRubCBzcGVjaWFsIHdhcm5pbmcgZmxhZ3MgZm9yIGdzdC9wcmludGYKLUFTX0NPTVBJTEVSX0ZMQUcoWy1Xbm8tZm9ybWF0LW5vbmxpdGVyYWxdLCBbUFJJTlRGX0NGTEFHUz0iLVduby1mb3JtYXQtbm9ubGl0ZXJhbCJdKQotQUNfU1VCU1QoUFJJTlRGX0NGTEFHUykKLQotZG5sIGRlZmluZSBjb3JyZWN0IGxldmVsIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMKLUFHX0dTVF9TRVRfTEVWRUxfREVGQVVMVCgkR1NUX0dJVCkKLQotZG5sICoqKiBmaW5hbGl6ZSBDRkxBR1MsIExERkxBR1MsIExJQlMKLQotZG5sIE92ZXJ2aWV3OgotZG5sIEdTVF9PUFRJT05fQ0ZMQUdTOiAgY29tbW9uIGNmbGFncyBmb3IgcHJvZmlsaW5nLCBkZWJ1Z2dpbmcsIGVycm9ycywgLi4uCi1kbmwgR1NUX0FMTF8qOiAgICAgICAgICB2YXJzIHNoYXJlZCBieSBhbGwgYnVpbHQgb2JqZWN0cwotZG5sIEdTVF9MSUJfTERGTEFHUzogICAgYWRkaXRpb25hbCBsaW5rZXIgZmxhZ3MgZm9yIGFsbCBsaWJhcmllcwotZG5sIEdTVF9PQkpfKjogICAgICAgICAgYWRkaXRpb25hbCB2YXJzIHRvIGxpbmsgdG8gdGhlIGNvcmUgbGlicmFyeQotZG5sCQkJaW5jbHVkZSBHU1RfQUxMXyoKLWRubCBHU1RfTFRfTERGTEFHUzoJbGlicmFyeSB2ZXJzaW9uaW5nIG9mIG91ciBsaWJyYXJpZXMKLWRubCBHU1RfUExVR0lOX0xERkxBR1M6IGZsYWdzIHRvIGJlIHVzZWQgZm9yIGFsbCBwbHVnaW5zCi0KLWRubCBHU1RfT1BUSU9OX0NGTEFHUwotaWYgdGVzdCAieCRVU0VfREVCVUciID0geHllczsgdGhlbgotICAgUFJPRklMRV9DRkxBR1M9Ii1nIgotZmkKLUFDX1NVQlNUKFBST0ZJTEVfQ0ZMQUdTKQotCi0jIEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQ6IGhpZGUgdGhlIHZpc2liaWxpdHkgb2YgZGVwcmVjYXRlZAotIyBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIEFQSSB0aGF0IGdzdHJlYW1lciB1c2VzCi0jIEdTVF9SRU1PVkVfREVQUkVDQVRFRDogZG9uJ3QgY29tcGlsZSBkZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkgKGJyZWFrcyBBQkkpCi1pZiB0ZXN0ICJ4JFBBQ0tBR0VfVkVSU0lPTl9OQU5PIiA9ICJ4MSI7IHRoZW4KLSAgZG5sIERlZmluZSBfb25seV8gd2hlbiBjb21waWxpbmcgZnJvbSBnaXQgKG5vdCBmb3IgcHJlLXJlbGVhc2VzIG9yIHJlbGVhc2VzKQotICBERVBSRUNBVEVEX0NGTEFHUz0iLURHU1RfRElTQUJMRV9ERVBSRUNBVEVEIgotZWxzZQotICBERVBSRUNBVEVEX0NGTEFHUz0iIgotZmkKLUFDX1NVQlNUKERFUFJFQ0FURURfQ0ZMQUdTKQotCi1kbmwgZXZlcnkgZmxhZyBpbiBHU1RfT1BUSU9OX0NGTEFHUyBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBtYWtlIHRpbWUgdmlhIGUuZy4KLWRubCBtYWtlIERFUFJFQ0FURURfQ0ZMQUdTPScnCi1HU1RfT1BUSU9OX0NGTEFHUz0iXCQoV0FSTklOR19DRkxBR1MpIFwkKERFQlVHX0NGTEFHUykgXCQoUFJPRklMRV9DRkxBR1MpIFwkKEdDT1ZfQ0ZMQUdTKSBcJChPUFRfQ0ZMQUdTKSBcJChERVBSRUNBVEVEX0NGTEFHUykiCi1HU1RfT1BUSU9OX0NYWEZMQUdTPSJcJChXQVJOSU5HX0NYWEZMQUdTKSBcJChFUlJPUl9DWFhGTEFHUykgXCQoREVCVUdfQ0ZMQUdTKSBcJChQUk9GSUxFX0NGTEFHUykgXCQoR0NPVl9DRkxBR1MpIFwkKE9QVF9DRkxBR1MpIFwkKERFUFJFQ0FURURfQ0ZMQUdTKSIKLUdTVF9PUFRJT05fQ0ZMQUdTPSIkR1NUX09QVElPTl9DRkxBR1MiCi1HU1RfT1BUSU9OX0NYWEZMQUdTPSIkR1NUX09QVElPTl9DWFhGTEFHUyIKLUFDX1NVQlNUKEdTVF9PUFRJT05fQ0ZMQUdTKQotQUNfU1VCU1QoR1NUX09QVElPTl9DWFhGTEFHUykKLQotZG5sIEdTVF9BTExfKgotZG5sIHZhcnMgY29tbW9uIHRvIGZvciBhbGwgaW50ZXJuYWwgb2JqZWN0cyAoY29yZSBsaWJzLCBlbGVtZW50cywgYXBwbGljYXRpb25zKQotZG5sIENGTEFHUzoKLWRubCAtIHNyYyBhbmQgYnVpbGQgZGlycyBuZWVkIHRvIGJlIGFkZGVkIGJlY2F1c2UgZXZlcnkgcGllY2UgdGhhdCBnZXRzIGJ1aWx0Ci1kbmwgICB3aWxsIG5lZWQgdGhlIEdTdHJlYW1lciBzb3VyY2UgYW5kIGdlbmVyYXRlZCBoZWFkZXJzCi1kbmwgTElCUzogWE1MIGRvZXNuJ3QgbmVlZCB0byBiZSBhZGRlZCBiZWNhdXNlIHdlIGRvbid0IGV4cGxpY2l0bHkgdXNlIHN5bWJvbHMKLWRubCAgICAgICBmcm9tIExpYlhNTCBleGNlcHQgZm9yIGluIHRoZSBjb3JlIGxpYnJhcnkKLUdTVF9BTExfQ1hYRkxBR1M9Ii1JXCQodG9wX3NyY2RpcikvbGlicyAtSVwkKHRvcF9zcmNkaXIpIC1JXCQodG9wX2J1aWxkZGlyKS9saWJzIC1JXCQodG9wX2J1aWxkZGlyKSAkR0xJQl9DRkxBR1MgXCQoR0xJQl9FWFRSQV9DRkxBR1MpICRYTUxfQ0ZMQUdTIFwkKEdTVF9PUFRJT05fQ1hYRkxBR1MpIFwkKEVSUk9SX0NYWEZMQUdTKSIKLUdTVF9BTExfQ0ZMQUdTPSItSVwkKHRvcF9zcmNkaXIpL2xpYnMgLUlcJCh0b3Bfc3JjZGlyKSAtSVwkKHRvcF9idWlsZGRpcikvbGlicyAtSVwkKHRvcF9idWlsZGRpcikgJEdMSUJfQ0ZMQUdTIFwkKEdMSUJfRVhUUkFfQ0ZMQUdTKSAkWE1MX0NGTEFHUyBcJChHU1RfT1BUSU9OX0NGTEFHUykgXCQoRVJST1JfQ0ZMQUdTKSIKLQotZG5sIEZJWE1FOiBjaGVjayBpZiBMVExJQklOVEwgaXMgbmVlZGVkIGV2ZXJ5d2hlcmUKLWRubCBJIHByZXN1bWUgaXQgaXMgZ2l2ZW4gdGhhdCBpdCBjb250YWlucyB0aGUgc3ltYm9scyB0aGF0IF8oKSBzdHVmZiBtYXBzIHRvCi1HU1RfQUxMX0xJQlM9IiRHTElCX0xJQlMgJExUTElCSU5UTCBcJChHQ09WX0xJQlMpIgotCi1kbmwgTERGTEFHUyByZWFsbHkgc2hvdWxkIG9ubHkgY29udGFpbiBmbGFncywgbm90IGxpYnMgLSB0aGV5IGdldCBhZGRlZCBiZWZvcmUKLWRubCB3aGF0ZXZlcnRhcmdldF9MSUJTIGFuZCAtTCBmbGFncyBoZXJlIGFmZmVjdCB0aGUgcmVzdCBvZiB0aGUgbGlua2luZwotR1NUX0FMTF9MREZMQUdTPSItbm8tdW5kZWZpbmVkIgotaWYgdGVzdCAieCR7ZW5hYmxlX0JzeW1ib2xpY30iID0gInh5ZXMiOyB0aGVuCi0gIEdTVF9BTExfTERGTEFHUz0iJEdTVF9BTExfTERGTEFHUyAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMiCi1maQotCi1BQ19TVUJTVChHU1RfQUxMX0NGTEFHUykKLUFDX1NVQlNUKEdTVF9BTExfQ1hYRkxBR1MpCi1BQ19TVUJTVChHU1RfQUxMX0xJQlMpCi1BQ19TVUJTVChHU1RfQUxMX0xERkxBR1MpCi0KLWRubCBHU1RfTElCX0xERkxBR1MKLWRubCBsaW5rZXIgZmxhZ3Mgc2hhcmVkIGJ5IGFsbCBsaWJyYXJpZXMKLWRubCBMREZMQUdTIG1vZGlmaWVyIGRlZmluaW5nIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSBidWlsdCBsaWJyYXJpZXMKLUdTVF9MSUJfTERGTEFHUz0iLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFxeW19dP1woZ3N0X1x8R3N0XHxHU1RfXCkuKiIKLUFDX1NVQlNUKEdTVF9MSUJfTERGTEFHUykKLQotZG5sIEdTVF9PQkpfKgotZG5sIGRlZmF1bHQgdmFycyBmb3IgYWxsIGludGVybmFsIG9iamVjdHMgYnVpbHQgb24gbGliZ3N0cmVhbWVyCi1kbmwgaW5jbHVkZXMgR1NUX0FMTF8qCi1HU1RfT0JKX0NGTEFHUz0iXCQoR1NUX0FMTF9DRkxBR1MpICRHU1RfT0JKX1NUQVRJQ19DRkxBR1MiCi1HU1RfT0JKX0NYWEZMQUdTPSJcJChHU1RfQUxMX0NYWEZMQUdTKSAkR1NUX09CSl9TVEFUSUNfQ0ZMQUdTIgotR1NUX09CSl9MSUJTPSJcJCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItJEdTVF9BUElfVkVSU0lPTi5sYSBcJChHU1RfQUxMX0xJQlMpIgotQUNfU1VCU1QoR1NUX09CSl9DRkxBR1MpCi1BQ19TVUJTVChHU1RfT0JKX0NYWEZMQUdTKQotQUNfU1VCU1QoR1NUX09CSl9MSUJTKQotCi1kbmwgR1NUX1BMVUdJTl9MREZMQUdTCi1kbmwgTERGTEFHUyBmb3IgcGx1Z2luczsgaW5jbHVkZXMgR1NUX0FMTF9MREZMQUdTCi1HU1RfUExVR0lOX0xERkxBR1M9Ii1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLWV4cG9ydC1zeW1ib2xzLXJlZ2V4ICdeW19dKmdzdF9wbHVnaW5fLionICRHU1RfQUxMX0xERkxBR1MiCi1BQ19TVUJTVChHU1RfUExVR0lOX0xERkxBR1MsICIkR1NUX1BMVUdJTl9MREZMQUdTIikKLQotZG5sIHBsdWdpbiBzY2FubmVyIGxvY2F0aW9ucwotQVNfQUNfRVhQQU5EKEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQsJHtsaWJleGVjZGlyfS9nc3RyZWFtZXItJEdTVF9BUElfVkVSU0lPTi9nc3QtcGx1Z2luLXNjYW5uZXIpCi1BQ19ERUZJTkVfVU5RVU9URUQoR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCwKLSAgICAiJEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQiLCBbbG9jYXRpb24gb2YgdGhlIGluc3RhbGxlZCBnc3QtcGx1Z2luLXNjYW5uZXJdKQotQUNfU1VCU1QoR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCkKLQotZG5sIHB0cCBoZWxwZXIgbG9jYXRpb25zCi1BU19BQ19FWFBBTkQoR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVELCR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT04vZ3N0LXB0cC1oZWxwZXIpCi1BQ19ERUZJTkVfVU5RVU9URUQoR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVELAotICAgICIkR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEIiwgW2xvY2F0aW9uIG9mIHRoZSBpbnN0YWxsZWQgZ3N0LXB0cC1oZWxwZXJdKQotQUNfU1VCU1QoR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEKQotCi1kbmwgdGhpbmdzIGZvciBvdXIgaW50ZXJuYWwgbGliY2hlY2sgKG11c3QgYmUgY2FsbGVkIGV2ZW4gaWYgYnVpbGRpbmcKLWRubCBsaWJjaGVjayBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IGRlZmluZXMgY29uZGl0aW9uYWxzKQotQUdfR1NUX0NIRUNLX0NIRUNLUwotCi1BQ19DT05GSUdfRklMRVMoCi1NYWtlZmlsZQotZGF0YS9NYWtlZmlsZQotZ3N0L01ha2VmaWxlCi1nc3QvZ3N0Y29uZmlnLmgKLWdzdC9nc3R2ZXJzaW9uLmgKLWdzdC9wYXJzZS9NYWtlZmlsZQotZ3N0L3ByaW50Zi9NYWtlZmlsZQotbGlicy9NYWtlZmlsZQotbGlicy9nc3QvTWFrZWZpbGUKLWxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUKLWxpYnMvZ3N0L2NoZWNrL01ha2VmaWxlCi1saWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZQotbGlicy9nc3QvY2hlY2svaW50ZXJuYWwtY2hlY2suaDpsaWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oLmluCi1saWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlCi1saWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlCi1saWJzL2dzdC9uZXQvTWFrZWZpbGUKLXBsdWdpbnMvTWFrZWZpbGUKLXBsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUKLXBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZQotcG8vTWFrZWZpbGUuaW4KLXRlc3RzL01ha2VmaWxlCi10ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlCi10ZXN0cy9jaGVjay9NYWtlZmlsZQotdGVzdHMvbWlzYy9NYWtlZmlsZQotdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUKLXRlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUKLXRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUKLXRlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL01ha2VmaWxlCi10ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlCi10ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUKLXRlc3RzL2V4YW1wbGVzL21lbW9yeS9NYWtlZmlsZQotdGVzdHMvZXhhbXBsZXMvbmV0Y2xvY2svTWFrZWZpbGUKLXRlc3RzL2V4YW1wbGVzL3B0cC9NYWtlZmlsZQotdGVzdHMvZXhhbXBsZXMvc3RyZWFtaWRkZW11eC9NYWtlZmlsZQotdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZQotdG9vbHMvTWFrZWZpbGUKLWNvbW1vbi9NYWtlZmlsZQotY29tbW9uL200L01ha2VmaWxlCi1kb2NzL01ha2VmaWxlCi1kb2NzL2Rlc2lnbi9NYWtlZmlsZQotZG9jcy9mYXEvTWFrZWZpbGUKLWRvY3MvZ3N0L01ha2VmaWxlCi1kb2NzL2dzdC9nc3RyZWFtZXIudHlwZXMKLWRvY3MvbGlicy9NYWtlZmlsZQotZG9jcy9wbHVnaW5zL01ha2VmaWxlCi1kb2NzL21hbnVhbC9NYWtlZmlsZQotZG9jcy9wd2cvTWFrZWZpbGUKLWRvY3Mvc2xpZGVzL01ha2VmaWxlCi1kb2NzL3hzbC9NYWtlZmlsZQotZG9jcy92ZXJzaW9uLmVudGl0aWVzCi1tNC9NYWtlZmlsZQotcGtnY29uZmlnL01ha2VmaWxlCi1zdGFtcC5oCi1wa2djb25maWcvZ3N0cmVhbWVyLnBjCi1wa2djb25maWcvZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjCi1wa2djb25maWcvZ3N0cmVhbWVyLWJhc2UucGMKLXBrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS11bmluc3RhbGxlZC5wYwotcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYwotcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYwotcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLnBjCi1wa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMKLXBrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjCi1wa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYwotZ3N0cmVhbWVyLnNwZWMKLSkKLQotZG5sIENyZWF0ZSB0aGUgY29uZmlnLmggZmlsZSBmb3IgVmlzdWFsIFN0dWRpbyBidWlsZHMKLWRubCBCZXdhcmUgb2Ygc3BhY2VzIGFuZCAvJ3MgaW4gc29tZSBvZiB0aGUgc2hlbGwgdmFyaWFibGUgY29udGVudHMuCi1zZWQgXAotICAgIC1lICdzLy4qY29uZmlnLmguaW4uKmF1dG9oZWFkZXIuKi9cLyogQXV0b2dlbmVyYXRlZCBjb25maWcuaCBjcmVhdGVkIGZvciB3aW4zMiBWaXN1YWwgU3R1ZGlvIGJ1aWxkcyAqXC9cblxuXC8qIFBSRUZJWCAtLSBzcGVjaWZpY2FsbHkgYWRkZWQgZm9yIFdpbmRvd3MgZm9yIGVhc2llciBtb3ZpbmcgKlwvXG4jZGVmaW5lIFBSRUZJWCAiQzpcXFxcZ3N0cmVhbWVyIi8nIFwKLSAgICAtZSAncy8uKiBHRVRURVhUX1BBQ0tBR0UkLyNkZWZpbmUgR0VUVEVYVF9QQUNLQUdFICInJEdFVFRFWFRfUEFDS0FHRSciLycgXAotICAgIC1lICdzLy4qIEdTVF9EQVRBRElSJC8jZGVmaW5lIEdTVF9EQVRBRElSIFBSRUZJWCAiXFxcXHNoYXJlIi8nIFwKLSAgICAtZSAncy8uKiBHU1RfTEVWRUxfREVGQVVMVCQvI2RlZmluZSBHU1RfTEVWRUxfREVGQVVMVCBHU1RfTEVWRUxfRVJST1IvJyBcCi0gICAgLWUgJ3MvLiogR1NUX0xJQ0VOU0UkLyNkZWZpbmUgR1NUX0xJQ0VOU0UgIickR1NUX0xJQ0VOU0UnIi8nIFwKLSAgICAtZSAncy8uKiBHU1RfQVBJX1ZFUlNJT04kLyNkZWZpbmUgR1NUX0FQSV9WRVJTSU9OICInJEdTVF9BUElfVkVSU0lPTiciLycgXAotICAgIC1lICJzLC4qIEdTVF9QQUNLQUdFX05BTUUkLCNkZWZpbmUgR1NUX1BBQ0tBR0VfTkFNRSBcIiR7R1NUX1BBQ0tBR0VfTkFNRX1cIiwiIFwKLSAgICAtZSAncy8uKiBHU1RfUEFDS0FHRV9PUklHSU4kLyNkZWZpbmUgR1NUX1BBQ0tBR0VfT1JJR0lOICJVbmtub3duIHBhY2thZ2Ugb3JpZ2luIi8nIFwKLSAgICAtZSAicywuKiBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FJCwjZGVmaW5lIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgXCIke0dTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUV9XCIsIiBcCi0gICAgLWUgJ3MvLiogSEFWRV9DUFVfSTM4NiQvI2RlZmluZSBIQVZFX0NQVV9JMzg2IDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9GR0VUUE9TJC8jZGVmaW5lIEhBVkVfRkdFVFBPUyAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfRlNFVFBPUyQvI2RlZmluZSBIQVZFX0ZTRVRQT1MgMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1BST0NFU1NfSCQvI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfU1RETElCX0gkLyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfU1RSSU5HX0gkLyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfU1lTX1NUQVRfSCQvI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1NZU19UWVBFU19IJC8jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1dJTjMyJC8jZGVmaW5lIEhBVkVfV0lOMzIgMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1dJTlNPQ0syX0gkLyNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDEvJyBcCi0gICAgLWUgJ3MvLiogSE9TVF9DUFUkLyNkZWZpbmUgSE9TVF9DUFUgImk2ODYiLycgXAotICAgIC1lICdzLy4qIE1FTU9SWV9BTElHTk1FTlRfTUFMTE9DLyNkZWZpbmUgTUVNT1JZX0FMSUdOTUVOVF9NQUxMT0MgMS8nIFwKLSAgICAtZSAncy8uKiBMSUJESVIkLyNpZmRlZiBfREVCVUdcbiMgIGRlZmluZSBMSUJESVIgUFJFRklYICJcXFxcZGVidWdcXFxcbGliIlxuI2Vsc2VcbiMgIGRlZmluZSBMSUJESVIgUFJFRklYICJcXFxcbGliIlxuI2VuZGlmLycgXAotICAgIC1lICdzLy4qIExPQ0FMRURJUiQvI2RlZmluZSBMT0NBTEVESVIgUFJFRklYICJcXFxcc2hhcmVcXFxcbG9jYWxlIi8nIFwKLSAgICAtZSAncy8uKiBQQUNLQUdFJC8jZGVmaW5lIFBBQ0tBR0UgImdzdHJlYW1lciIvJyBcCi0gICAgLWUgJ3MvLiogUEFDS0FHRV9CVUdSRVBPUlQkLyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImh0dHA6XC9cL2J1Z3ppbGxhLmdub21lLm9yZ1wvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lciIvJyBcCi0gICAgLWUgJ3MvLiogUEFDS0FHRV9OQU1FJC8jZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJyRQQUNLQUdFX05BTUUnIi8nIFwKLSAgICAtZSAicy8uKiBQQUNLQUdFX1NUUklORyQvI2RlZmluZSBQQUNLQUdFX1NUUklORyBcIiRQQUNLQUdFX1NUUklOR1wiLyIgXAotICAgIC1lICdzLy4qIFBBQ0tBR0VfVEFSTkFNRSQvI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIickUEFDS0FHRV9UQVJOQU1FJyIvJyBcCi0gICAgLWUgJ3MvLiogUEFDS0FHRV9WRVJTSU9OJC8jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJyRQQUNLQUdFX1ZFUlNJT04nIi8nIFwKLSAgICAtZSAncy8uKiBQTFVHSU5ESVIkLyNpZmRlZiBfREVCVUdcbiMgIGRlZmluZSBQTFVHSU5ESVIgUFJFRklYICJcXFxcZGVidWdcXFxcbGliXFxcXGdzdHJlYW1lci0xLjAiXG4jZWxzZVxuIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcXFxsaWJcXFxcZ3N0cmVhbWVyLTEuMCJcbiNlbmRpZi8nIFwKLSAgICAtZSAncy8uKiBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEJC8jZGVmaW5lIEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgTElCRElSICJcXFxcZ3N0LXBsdWdpbi1zY2FubmVyIi8nIFwKLSAgICAtZSAncy8uKiBWRVJTSU9OJC8jZGVmaW5lIFZFUlNJT04gIickVkVSU0lPTiciLycgXAotICAgIGNvbmZpZy5oLmluID53aW4zMi9jb21tb24vY29uZmlnLmgtbmV3Ci0KLUFDX09VVFBVVAotCi1kbmwgbmVnYXRlIGZvciBvdXRwdXQKLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX0dTVF9ERUJVR30iID0gInhubyI7IHRoZW4gZW5hYmxlX2dzdF9kZWJ1Zz0ieWVzIjsgZmkKLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1N9IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9nc3RfdHJhY2VyX2hvb2tzPSJ5ZXMiOyBmaQotaWYgdGVzdCAieCR7R1NUX0RJU0FCTEVfUEFSU0V9IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9wYXJzZT0ieWVzIjsgZmkKLWlmIHRlc3QgIngke0dTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HfSIgPSAieG5vIjsgdGhlbiBlbmFibGVfb3B0aW9uX3BhcnNpbmc9InllcyI7IGZpCi1pZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9QTFVHSU59IiA9ICJ4bm8iOyB0aGVuIGVuYWJsZV9wbHVnaW49InllcyI7IGZpCi1pZiB0ZXN0ICJ4JHtHU1RfRElTQUJMRV9SRUdJU1RSWX0iID0gInhubyI7IHRoZW4gZW5hYmxlX3JlZ2lzdHJ5PSJ5ZXMiOyBmaQotCi1lY2hvICIKLQotQ29uZmlndXJhdGlvbgotCVZlcnNpb24gICAgICAgICAgICAgICAgICAgIDogJHtWRVJTSU9OfQotCVNvdXJjZSBjb2RlIGxvY2F0aW9uICAgICAgIDogJHtzcmNkaXJ9Ci0JUHJlZml4ICAgICAgICAgICAgICAgICAgICAgOiAke3ByZWZpeH0KLQlDb21waWxlciAgICAgICAgICAgICAgICAgICA6ICR7Q0N9Ci0JUGFja2FnZSBuYW1lICAgICAgICAgICAgICAgOiAke0dTVF9QQUNLQUdFX05BTUV9Ci0JUGFja2FnZSBvcmlnaW4gICAgICAgICAgICAgOiAke0dTVF9QQUNLQUdFX09SSUdJTn0KLQotCURvY3VtZW50YXRpb24gKG1hbnVhbHMpICAgIDogJHtlbmFibGVfZG9jYm9va30KLQlEb2N1bWVudGF0aW9uIChBUEkpICAgICAgICA6ICR7ZW5hYmxlX2d0a19kb2N9Ci0KLQlEZWJ1ZyBsb2dnaW5nICAgICAgICAgICAgICA6ICR7ZW5hYmxlX2dzdF9kZWJ1Z30KLQlUcmFjaW5nIHN1YnN5c3RlbSBob29rcyAgICA6ICR7ZW5hYmxlX2dzdF90cmFjZXJfaG9va3N9Ci0JQ29tbWFuZC1saW5lIHBhcnNlciAgICAgICAgOiAke2VuYWJsZV9wYXJzZX0KLQlPcHRpb24gcGFyc2luZyBpbiBnc3RfaW5pdCA6ICR7ZW5hYmxlX29wdGlvbl9wYXJzaW5nfQotCVBsdWdpbiByZWdpc3RyeSAgICAgICAgICAgIDogJHtlbmFibGVfcmVnaXN0cnl9Ci0JUGx1Z2luIHN1cHBvcnQJICAgICAgICAgICA6ICR7ZW5hYmxlX3BsdWdpbn0KLQlTdGF0aWMgcGx1Z2lucyAgICAgICAgICAgICA6ICR7ZW5hYmxlX3N0YXRpY19wbHVnaW5zfQotCVVuaXQgdGVzdGluZyBzdXBwb3J0ICAgICAgIDogJHtCVUlMRF9DSEVDS30KLQlQVFAgY2xvY2sgc3VwcG9ydCAgICAgICAgICA6ICR7SEFWRV9QVFB9Ci0JbGlidW53aW5kIHN1cHBvcnQgICAgICAgICAgOiAke0hBVkVfVU5XSU5EfQotCi0JRGVidWcgICAgICAgICAgICAgICAgICAgICAgOiAke1VTRV9ERUJVR30KLQlQcm9maWxpbmcgICAgICAgICAgICAgICAgICA6ICR7VVNFX1BST0ZJTElOR30KLQotCUJ1aWxkaW5nIGJlbmNobWFya3MgICAgICAgIDogJHtCVUlMRF9CRU5DSE1BUktTfQotCUJ1aWxkaW5nIGV4YW1wbGVzICAgICAgICAgIDogJHtCVUlMRF9FWEFNUExFU30KLQlCdWlsZGluZyB0ZXN0IGFwcHMgICAgICAgICA6ICR7QlVJTERfVEVTVFN9Ci0JQnVpbGRpbmcgdGVzdHMgdGhhdCBmYWlsICAgOiAke0JVSUxEX0ZBSUxJTkdfVEVTVFN9Ci0JQnVpbGRpbmcgdG9vbHMgICAgICAgICAgICAgOiAke0JVSUxEX1RPT0xTfQotIgpkaWZmIC0tZ2l0IGEvZGF0YS9NYWtlZmlsZS5hbSBiL2RhdGEvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwOTg0OTIuLjAwMDAwMDAKLS0tIGEvZGF0YS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotaWYgRU5BQkxFX0JBU0hfQ09NUExFVElPTgotYmFzaGNvbXBsZXRpb25kaXIgPSAkKEJBU0hfQ09NUExFVElPTl9ESVIpCi1kaXN0X2Jhc2hjb21wbGV0aW9uX0RBVEEgPSBjb21wbGV0aW9ucy9nc3QtaW5zcGVjdC0xLjAgY29tcGxldGlvbnMvZ3N0LWxhdW5jaC0xLjAKLWVuZGlmCmRpZmYgLS1naXQgYS9kYXRhL01ha2VmaWxlLmluIGIvZGF0YS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiNmEyMC4uMDAwMDAwMAotLS0gYS9kYXRhL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNzA0ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBkYXRhCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAotCSQoYW1fX2Rpc3RfYmFzaGNvbXBsZXRpb25fREFUQV9ESVNUKSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX19kaXN0X2Jhc2hjb21wbGV0aW9uX0RBVEFfRElTVCA9IGNvbXBsZXRpb25zL2dzdC1pbnNwZWN0LTEuMCBcCi0JY29tcGxldGlvbnMvZ3N0LWxhdW5jaC0xLjAKLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJhc2hjb21wbGV0aW9uZGlyKSIKLURBVEEgPSAkKGRpc3RfYmFzaGNvbXBsZXRpb25fREFUQSkKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotQEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fVFJVRUBiYXNoY29tcGxldGlvbmRpciA9ICQoQkFTSF9DT01QTEVUSU9OX0RJUikKLUBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUVAZGlzdF9iYXNoY29tcGxldGlvbl9EQVRBID0gY29tcGxldGlvbnMvZ3N0LWluc3BlY3QtMS4wIGNvbXBsZXRpb25zL2dzdC1sYXVuY2gtMS4wCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkYXRhL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGRhdGEvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi1pbnN0YWxsLWRpc3RfYmFzaGNvbXBsZXRpb25EQVRBOiAkKGRpc3RfYmFzaGNvbXBsZXRpb25fREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChkaXN0X2Jhc2hjb21wbGV0aW9uX0RBVEEpJzsgdGVzdCAtbiAiJChiYXNoY29tcGxldGlvbmRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoYmFzaGNvbXBsZXRpb25kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJhc2hjb21wbGV0aW9uZGlyKSIgfHwgZXhpdCAxOyBcCi0JZmk7IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBlY2hvICIkJGQkJHAiOyBcCi0JZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCi0Jd2hpbGUgcmVhZCBmaWxlczsgZG8gXAotCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChiYXNoY29tcGxldGlvbmRpciknIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGJhc2hjb21wbGV0aW9uZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1kaXN0X2Jhc2hjb21wbGV0aW9uREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGRpc3RfYmFzaGNvbXBsZXRpb25fREFUQSknOyB0ZXN0IC1uICIkKGJhc2hjb21wbGV0aW9uZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQoYmFzaGNvbXBsZXRpb25kaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotdGFncyBUQUdTOgotCi1jdGFncyBDVEFHUzoKLQotY3Njb3BlIGNzY29wZWxpc3Q6Ci0KLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChEQVRBKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQoYmFzaGNvbXBsZXRpb25kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGlzdF9iYXNoY29tcGxldGlvbkRBVEEKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtZGlzdF9iYXNoY29tcGxldGlvbkRBVEEKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIFwKLQlpbnN0YWxsLWRpc3RfYmFzaGNvbXBsZXRpb25EQVRBIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKLQlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAotCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncy1hbSB1bmluc3RhbGwgXAotCXVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZGlzdF9iYXNoY29tcGxldGlvbkRBVEEKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RhdGEvY29tcGxldGlvbnMvZ3N0LWluc3BlY3QtMS4wIGIvZGF0YS9jb21wbGV0aW9ucy9nc3QtaW5zcGVjdC0xLjAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MGUxNDAuLjAwMDAwMDAKLS0tIGEvZGF0YS9jb21wbGV0aW9ucy9nc3QtaW5zcGVjdC0xLjAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotIyBHU3RyZWFtZXIKLSMgQ29weXJpZ2h0IChDKSAyMDE1IE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLSMKLSMgYmFzaC96c2ggY29tcGxldGlvbiBzdXBwb3J0IGZvciBnc3QtaW5zcGVjdAotIwotIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0jIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi1fR1NUX0hFTFBFUkRJUj0iJHtCQVNIX1NPVVJDRVswXSUvKn0vLi4vaGVscGVycyIKLQotaWYgW1sgISAtZCAiJF9HU1RfSEVMUEVSRElSIiAgXV07IHRoZW4KLQlfR1NUX0hFTFBFUkRJUj0iJChwa2ctY29uZmlnIC0tdmFyaWFibGU9aGVscGVyc2RpciBnc3RyZWFtZXItMS4wKSIKLWVsc2UKLQlfR1NUX0hFTFBFUkRJUj1gY2QgIiRfR1NUX0hFTFBFUkRJUiI7IHB3ZGAKLWZpCi0KLSMgQ29tbW9uIGRlZmluaXRpb25zCi0uICIkX0dTVF9IRUxQRVJESVIiL2dzdAotCi1fR1NUX0hFTFBFUj0iJF9HU1RfSEVMUEVSRElSL2dzdC1jb21wbGV0aW9uLWhlbHBlci0xLjAiCi0KLV9nc3RfaW5zcGVjdF9hbGxfYXJndW1lbnRzICgpCi17Ci0JQ09NUFJFUExZPSggJChjb21wZ2VuIC1XICIkKGdzdC1pbnNwZWN0LTEuMCAtLWhlbHAtYWxsIHwgZ3JlcCAtb2ggJ1tbOmdyYXBoOl1dKi0tW1s6Z3JhcGg6XV0qJyB8IGN1dCAtZCc9JyAtZjEpIiAtLSAkY3VyKSApCi19Ci0KLV9nc3RfaW5zcGVjdF9hbGxfZWxlbWVudHMgKCkKLXsKLQlDT01QUkVQTFk9KCAkKGNvbXBnZW4gLVcgIiQoJF9HU1RfSEVMUEVSIC1sKSIgLS0gJGN1cikgKQotfQotCi1fZ3N0aW5zcGVjdF9fX2F0bGVhc3RfdmVyc2lvbiAoKSB7IF9nc3RfbWFuZGF0b3J5X2FyZ3VtZW50OyB9Ci0KLV9nc3RpbnNwZWN0X19fZXhpc3RzICgpCi17Ci0JX2dzdF9pbnNwZWN0X2FsbF9lbGVtZW50cwotfQotCi1fX2luc3BlY3RfbWFpbiAoKQotewotCWxvY2FsIGk9MSBjb21tYW5kIGZ1bmN0aW9uX2V4aXN0cyBjb21wbGV0aW9uX2Z1bmMKLQotCXdoaWxlIFtbICRpIC1uZSAkQ09NUF9DV09SRCBdXTsKLQkJZG8KLQkJCWxvY2FsIHZhcgotCQkJdmFyPSIke0NPTVBfV09SRFNbaV19IgotCQkJaWYgW1sgIiR2YXIiID09ICItLSIqIF1dCi0JCQl0aGVuCi0JCQkJY29tbWFuZD0iJHZhciIKLQkJCWZpCi0JCWk9JCgoJGkrMSkpCi0JCWRvbmUKLQotCWlmIFtbICIkY29tbWFuZCIgPT0gIi0tZ3N0IiogXV07IHRoZW4KLQkJY29tcGxldGlvbl9mdW5jPSJfJHtjb21tYW5kLy8tL199IgotCWVsc2UKLQkJY29tcGxldGlvbl9mdW5jPSJfZ3N0aW5zcGVjdF8ke2NvbW1hbmQvLy0vX30iCi0JZmkKLQotCWRlY2xhcmUgLWYgJGNvbXBsZXRpb25fZnVuYyA+L2Rldi9udWxsIDI+JjEKLQotCWZ1bmN0aW9uX2V4aXN0cz0kPwotCi0JaWYgW1sgIiRjdXIiID09ICItLSIqIF1dOyB0aGVuCi0JCV9nc3RfaW5zcGVjdF9hbGxfYXJndW1lbnRzCi0JZWxpZiBbICRmdW5jdGlvbl9leGlzdHMgLWVxIDAgXQotCXRoZW4KLQkJJGNvbXBsZXRpb25fZnVuYwotCWVsc2UKLQkJX2dzdF9pbnNwZWN0X2FsbF9lbGVtZW50cwotCWZpCi19Ci0KLV9nc3RfaW5zcGVjdF9mdW5jX3dyYXAgKCkKLXsKLQlsb2NhbCBjdXIgcHJldgotCWN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKLQlwcmV2PSIke0NPTVBfV09SRFNbQ09NUF9DV09SRC0xXX0iCi0JJDEKLX0KLQotIyBTZXR1cCBjb21wbGV0aW9uIGZvciBjZXJ0YWluIGZ1bmN0aW9ucyBkZWZpbmVkIGFib3ZlIGJ5IHNldHRpbmcgY29tbW9uCi0jIHZhcmlhYmxlcyBhbmQgd29ya2Fyb3VuZHMuCi0jIFRoaXMgaXMgTk9UIGEgcHVibGljIGZ1bmN0aW9uOyB1c2UgYXQgeW91ciBvd24gcmlzay4KLV9nc3RfaW5zcGVjdF9jb21wbGV0ZSAoKQotewotCWxvY2FsIHdyYXBwZXI9Il9faW5zcGVjdF93cmFwJHsyfSIKLQlldmFsICIkd3JhcHBlciAoKSB7IF9nc3RfaW5zcGVjdF9mdW5jX3dyYXAgJDIgOyB9IgotCWNvbXBsZXRlIC1vIGJhc2hkZWZhdWx0IC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiAkd3JhcHBlciAkMSAyPi9kZXYvbnVsbCBcCi0JCXx8IGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiAkd3JhcHBlciAkMQotfQotCi1fZ3N0X2luc3BlY3RfY29tcGxldGUgZ3N0LWluc3BlY3QtMS4wIF9faW5zcGVjdF9tYWluCmRpZmYgLS1naXQgYS9kYXRhL2NvbXBsZXRpb25zL2dzdC1sYXVuY2gtMS4wIGIvZGF0YS9jb21wbGV0aW9ucy9nc3QtbGF1bmNoLTEuMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQxY2Y4NC4uMDAwMDAwMAotLS0gYS9kYXRhL2NvbXBsZXRpb25zL2dzdC1sYXVuY2gtMS4wCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLSMgR1N0cmVhbWVyCi0jIENvcHlyaWdodCAoQykgMjAxNSBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0jCi0jIGJhc2gvenNoIGNvbXBsZXRpb24gc3VwcG9ydCBmb3IgZ3N0LWxhdW5jaAotIwotIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0jIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi1fR1NUX0hFTFBFUkRJUj0iJHtCQVNIX1NPVVJDRVswXSUvKn0vLi4vaGVscGVycyIKLQotaWYgW1sgISAtZCAiJF9HU1RfSEVMUEVSRElSIiBdXTsgdGhlbgotCV9HU1RfSEVMUEVSRElSPSIkKHBrZy1jb25maWcgLS12YXJpYWJsZT1oZWxwZXJzZGlyIGdzdHJlYW1lci0xLjApIgotZWxzZQotCV9HU1RfSEVMUEVSRElSPWBjZCAiJF9HU1RfSEVMUEVSRElSIjsgcHdkYAotZmkKLQotIyBDb21tb24gZGVmaW5pdGlvbnMKLS4gIiRfR1NUX0hFTFBFUkRJUiIvZ3N0Ci0KLV9HU1RfSEVMUEVSPSIkX0dTVF9IRUxQRVJESVIvZ3N0LWNvbXBsZXRpb24taGVscGVyLTEuMCIKLQotX2dzdF9sYXVuY2hfYWxsX2FyZ3VtZW50cyAoKQotewotCUNPTVBSRVBMWT0oICQoY29tcGdlbiAtVyAiJChnc3QtbGF1bmNoLTEuMCAtLWhlbHAtYWxsIHwgZ3JlcCAtb2ggJ1tbOmdyYXBoOl1dKi0tW1s6Z3JhcGg6XV0qJyB8IGN1dCAtZCc9JyAtZjEpIiAtLSAkY3VyKSApCi19Ci0KLV9nc3RfY29tcGxldGVfY29tcGF0aWJsZV9lbGVtZW50cyAoKQotewotCUNPTVBSRVBMWT0oICQoY29tcGdlbiAtVyAiJCgkX0dTVF9IRUxQRVIgLS1jb21wYXRpYmxlLXdpdGggJHByZXZpb3VzX2VsZW1lbnQpIiAtLSAkY3VyKSApCi19Ci0KLV9nc3RfY29tcGxldGVfYWxsX2VsZW1lbnRzICgpCi17Ci0JQ09NUFJFUExZPSggJChjb21wZ2VuIC1XICIkKCRfR1NUX0hFTFBFUiAtbCkiIC0tICRjdXIpICkKLX0KLQotX2dzdF9jb21wbGV0ZV9lbGVtZW50X3Byb3BlcnRpZXMgKCkKLXsKLQlDT01QUkVQTFk9KCAkKGNvbXBnZW4gLVcgIiQoJF9HU1RfSEVMUEVSIC0tZWxlbWVudC1wcm9wZXJ0aWVzICRwcmV2aW91c19lbGVtZW50KSIgLS0gJGN1cikgKQotfQotCi1fZ3N0bGF1bmNoX19fZXhjbHVkZV8gKCkgeyBfZ3N0X21hbmRhdG9yeV9hcmd1bWVudDsgfQotCi1fZ3N0X2xhdW5jaF9tYWluICgpCi17Ci0JbG9jYWwgaT0xIGNvbW1hbmQgZnVuY3Rpb25fZXhpc3RzIHByZXZpb3VzX2VsZW1lbnQgaGF2ZV9wcmV2aW91c19lbGVtZW50PTAgY29tcGxldGlvbl9mdW5jCi0KLQl3aGlsZSBbWyAkaSAtbmUgJENPTVBfQ1dPUkQgXV07Ci0JCWRvCi0JCQlsb2NhbCB2YXIKLQkJCXZhcj0iJHtDT01QX1dPUkRTW2ldfSIKLQkJCWlmIFtbICIkdmFyIiA9PSAiLS0iKiBdXQotCQkJdGhlbgotCQkJCWNvbW1hbmQ9IiR2YXIiCi0JCQlmaQotCQlpPSQoKCRpKzEpKQotCQlkb25lCi0KLQlpPTEKLQl3aGlsZSBbWyAkaSAtbmUgJENPTVBfQ1dPUkQgXV07Ci0JCWRvCi0JCQlsb2NhbCB2YXIKLQkJCXZhcj0iJHtDT01QX1dPUkRTW2ldfSIKLQotCQkJaWYgW1sgIiR2YXIiID09ICItLSIqIF1dCi0JCQl0aGVuCi0JCQkJaT0kKCgkaSsxKSkKLQkJCQljb250aW51ZQotCQkJZmkKLQotCQkJJChnc3QtaW5zcGVjdC0xLjAgLS1leGlzdHMgJHZhcikKLQkJCWlmIFsgJD8gLWVxIDAgXQotCQkJdGhlbgotCQkJCXByZXZpb3VzX2VsZW1lbnQ9IiR2YXIiCi0JCQkJaGF2ZV9wcmV2aW91c19lbGVtZW50PTEKLQkJCWZpCi0JCWk9JCgoJGkrMSkpCi0JCWRvbmUKLQotCWlmIFtbICIkY29tbWFuZCIgPT0gIi0tZ3N0IiogXV07IHRoZW4KLQkJY29tcGxldGlvbl9mdW5jPSJfJHtjb21tYW5kLy8tL199IgotCWVsc2UKLQkJY29tcGxldGlvbl9mdW5jPSJfZ3N0bGF1bmNoXyR7Y29tbWFuZC8vLS9ffSIKLQlmaQotCi0JIyBTZWVtcyBsaWtlIGJhc2ggZG9lc24ndCBsaWtlICJleGNsdWRlIiBpbiBmdW5jdGlvbiBuYW1lcwotCWlmIFtbICIkY29tcGxldGlvbl9mdW5jIiA9PSAiX2dzdGxhdW5jaF9fX2V4Y2x1ZGUiIF1dCi0JdGhlbgotCQljb21wbGV0aW9uX2Z1bmM9Il9nc3RsYXVuY2hfX19leGNsdWRlXyIKLQlmaQotCi0JZGVjbGFyZSAtZiAkY29tcGxldGlvbl9mdW5jID4vZGV2L251bGwgMj4mMQotCi0JZnVuY3Rpb25fZXhpc3RzPSQ/Ci0KLQlpZiBbWyAiJGN1ciIgPT0gIi0tIiogXV07IHRoZW4KLQkJX2dzdF9sYXVuY2hfYWxsX2FyZ3VtZW50cwotCWVsaWYgWyAkZnVuY3Rpb25fZXhpc3RzIC1lcSAwIF0KLQl0aGVuCi0JCSRjb21wbGV0aW9uX2Z1bmMKLQllbGlmIFsgJGhhdmVfcHJldmlvdXNfZWxlbWVudCAtbmUgMCBdICYmIFtbICIkcHJldiIgPT0gIiEiIF1dCi0JdGhlbgotCQlfZ3N0X2NvbXBsZXRlX2NvbXBhdGlibGVfZWxlbWVudHMKLQllbGlmIFsgJGhhdmVfcHJldmlvdXNfZWxlbWVudCAtbmUgMCBdCi0JdGhlbgotCQlfZ3N0X2NvbXBsZXRlX2VsZW1lbnRfcHJvcGVydGllcwotCWVsc2UKLQkJX2dzdF9jb21wbGV0ZV9hbGxfZWxlbWVudHMKLQlmaQotfQotCi1fZ3N0X2xhdW5jaF9mdW5jX3dyYXAgKCkKLXsKLQlsb2NhbCBjdXIgcHJldgotCWN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKLQlwcmV2PSIke0NPTVBfV09SRFNbQ09NUF9DV09SRC0xXX0iCi0JJDEKLX0KLQotIyBTZXR1cCBjb21wbGV0aW9uIGZvciBjZXJ0YWluIGZ1bmN0aW9ucyBkZWZpbmVkIGFib3ZlIGJ5IHNldHRpbmcgY29tbW9uCi0jIHZhcmlhYmxlcyBhbmQgd29ya2Fyb3VuZHMuCi0jIFRoaXMgaXMgTk9UIGEgcHVibGljIGZ1bmN0aW9uOyB1c2UgYXQgeW91ciBvd24gcmlzay4KLV9nc3RfbGF1bmNoX2NvbXBsZXRlICgpCi17Ci0JbG9jYWwgd3JhcHBlcj0iX19sYXVuY2hfd3JhcCR7Mn0iCi0JZXZhbCAiJHdyYXBwZXIgKCkgeyBfZ3N0X2xhdW5jaF9mdW5jX3dyYXAgJDIgOyB9IgotCWNvbXBsZXRlIC1vIGJhc2hkZWZhdWx0IC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiAkd3JhcHBlciAkMSAyPi9kZXYvbnVsbCBcCi0JCXx8IGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiAkd3JhcHBlciAkMQotfQotCi1fZ3N0X2xhdW5jaF9jb21wbGV0ZSBnc3QtbGF1bmNoLTEuMCBfZ3N0X2xhdW5jaF9tYWluCmRpZmYgLS1naXQgYS9kZXBjb21wIGIvZGVwY29tcApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZmM5ODcxMC4uMDAwMDAwMAotLS0gYS9kZXBjb21wCisrKyAvZGV2L251bGwKQEAgLTEsNzkxICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cwotCi1zY3JpcHR2ZXJzaW9uPTIwMTMtMDUtMzAuMDc7ICMgVVRDCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxleGFuZHJlIE9saXZhIDxvbGl2YUBkY2MudW5pY2FtcC5icj4uCi0KLWNhc2UgJDEgaW4KLSAgJycpCi0gICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCi0gICAgZXhpdCAxOwotICAgIDs7Ci0gIC1oIHwgLS1oKikKLSAgICBjYXQgPDxcRU9GCi1Vc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQotCi1SdW4gUFJPR1JBTVMgQVJHUyB0byBjb21waWxlIGEgZmlsZSwgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMKLWFzIHNpZGUtZWZmZWN0cy4KLQotRW52aXJvbm1lbnQgdmFyaWFibGVzOgotICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCi0gIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgJ1BST0dSQU1TIEFSR1MnLgotICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgJ1BST0dSQU1TIEFSR1MnLgotICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgotICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgotICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXR0aW5nIGRlcGVuZGVuY2llcy4KLSAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCi0KLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCi1FT0YKLSAgICBleGl0ICQ/Ci0gICAgOzsKLSAgLXYgfCAtLXYqKQotICAgIGVjaG8gImRlcGNvbXAgJHNjcmlwdHZlcnNpb24iCi0gICAgZXhpdCAkPwotICAgIDs7Ci1lc2FjCi0KLSMgR2V0IHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCBpbiB0aGUKLSMgZ2xvYmFsIHZhcmlhYmxlcyAnJGRpcicuICBOb3RlIHRoYXQgdGhpcyBkaXJlY3RvcnkgY29tcG9uZW50IHdpbGwKLSMgYmUgZWl0aGVyIGVtcHR5IG9yIGVuZGluZyB3aXRoIGEgJy8nIGNoYXJhY3Rlci4gIFRoaXMgaXMgZGVsaWJlcmF0ZS4KLXNldF9kaXJfZnJvbSAoKQotewotICBjYXNlICQxIGluCi0gICAgKi8qKSBkaXI9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2A7OwotICAgICAgKikgZGlyPTs7Ci0gIGVzYWMKLX0KLQotIyBHZXQgdGhlIHN1ZmZpeC1zdHJpcHBlZCBiYXNlbmFtZSBvZiB0aGUgZ2l2ZW4gcGF0aCwgYW5kIHNhdmUgaXQgdGhlCi0jIGdsb2JhbCB2YXJpYWJsZSAnJGJhc2UnLgotc2V0X2Jhc2VfZnJvbSAoKQotewotICBiYXNlPWBlY2hvICIkMSIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLlteLl0qJC8vJ2AKLX0KLQotIyBJZiBubyBkZXBlbmRlbmN5IGZpbGUgd2FzIGFjdHVhbGx5IGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGludm9jYXRpb24sCi0jIHdlIHN0aWxsIGhhdmUgdG8gY3JlYXRlIGEgZHVtbXkgZGVwZmlsZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlCi0jIE1ha2VmaWxlICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgotbWFrZV9kdW1teV9kZXBmaWxlICgpCi17Ci0gIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCi19Ci0KLSMgRmFjdG9yIG91dCBzb21lIGNvbW1vbiBwb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGdlbmVyYXRlZCBkZXBmaWxlLgotIyBSZXF1aXJlcyB0aGUgYXV4aWxpYXJ5IGdsb2JhbCB2YXJpYWJsZSAnJHRtcGRlcGZpbGUnIHRvIGJlIHNldC4KLWFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZSAoKQotewotICAjIElmIHRoZSBjb21waWxlciBhY3R1YWxseSBtYW5hZ2VkIHRvIHByb2R1Y2UgYSBkZXBlbmRlbmN5IGZpbGUsCi0gICMgcG9zdC1wcm9jZXNzIGl0LgotICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KLSAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm86IGRlcGVuZGVuY3kuaCcuCi0gICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KLSAgICAjICAgJG9iamVjdDogZGVwZW5kZW5jeS5oCi0gICAgIyBhbmQgb25lIHRvIHNpbXBseSBvdXRwdXQKLSAgICAjICAgZGVwZW5kZW5jeS5oOgotICAgICMgd2hpY2ggaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgotICAgIHsgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIgotICAgICAgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOlskdGFiIF0qLCwiIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIgotICAgIH0gPiAiJGRlcGZpbGUiCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICBlbHNlCi0gICAgbWFrZV9kdW1teV9kZXBmaWxlCi0gIGZpCi19Ci0KLSMgQSB0YWJ1bGF0aW9uIGNoYXJhY3Rlci4KLXRhYj0nCScKLSMgQSBuZXdsaW5lIGNoYXJhY3Rlci4KLW5sPScKLScKLSMgQ2hhcmFjdGVyIHJhbmdlcyBtaWdodCBiZSBwcm9ibGVtYXRpYyBvdXRzaWRlIHRoZSBDIGxvY2FsZS4KLSMgVGhlc2UgZGVmaW5pdGlvbnMgaGVscC4KLXVwcGVyPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaCi1sb3dlcj1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotZGlnaXRzPTAxMjM0NTY3ODkKLWFscGhhPSR7dXBwZXJ9JHtsb3dlcn0KLQotaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCi0gIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgotICBleGl0IDEKLWZpCi0KLSMgRGVwZW5kZW5jaWVzIGZvciBzdWIvYmFyLm8gb3Igc3ViL2Jhci5vYmogZ28gaW50byBzdWIvLmRlcHMvYmFyLlBvLgotZGVwZmlsZT0ke2RlcGZpbGUtYGVjaG8gIiRvYmplY3QiIHwKLSAgc2VkICdzfFteXFwvXSokfCcke0RFUERJUi0uZGVwc30nLyZ8O3N8XC5cKFteLl0qXCkkfC5QXDF8O3N8UG9iaiR8UG98J2B9Ci10bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQotCi1ybSAtZiAiJHRtcGRlcGZpbGUiCi0KLSMgQXZvaWQgaW50ZXJmZXJlbmNlcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4KLWdjY2ZsYWc9IGRhc2htZmxhZz0KLQotIyBTb21lIG1vZGVzIHdvcmsganVzdCBsaWtlIG90aGVyIG1vZGVzLCBidXQgdXNlIGRpZmZlcmVudCBmbGFncy4gIFdlCi0jIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAotIyB0byBtYWtlIGRlcGVuZC5tNCBlYXNpZXIgdG8gd3JpdGUuICBOb3RlIHRoYXQgd2UgKmNhbm5vdCogdXNlIGEgY2FzZQotIyBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBjYW4gb25seSBjb250YWluIG9uZSBjYXNlIHN0YXRlbWVudC4KLWlmIHRlc3QgIiRkZXBtb2RlIiA9IGhwOyB0aGVuCi0gICMgSFAgY29tcGlsZXIgdXNlcyAtTSBhbmQgbm8gZXh0cmEgYXJnLgotICBnY2NmbGFnPS1NCi0gIGRlcG1vZGU9Z2NjCi1maQotCi1pZiB0ZXN0ICIkZGVwbW9kZSIgPSBkYXNoWG1zdGRvdXQ7IHRoZW4KLSAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgotICBkYXNobWZsYWc9LXhNCi0gIGRlcG1vZGU9ZGFzaG1zdGRvdXQKLWZpCi0KLWN5Z3BhdGhfdT0iY3lncGF0aCAtdSAtZiAtIgotaWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Y21zeXM7IHRoZW4KLSAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3Zpc3VhbGNwcCBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCi0gICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAotICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKLSAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKLSAgZGVwbW9kZT1tc3Zpc3VhbGNwcAotZmkKLQotaWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Yzdtc3lzOyB0aGVuCi0gICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2YzcgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgotICAjIEp1c3QgY29udmVydCB0aGUgYmFja3NsYXNoLWVzY2FwZWQgYmFja3NsYXNoZXMgdG8gc2luZ2xlIGZvcndhcmQKLSAgIyBzbGFzaGVzIHRvIHNhdGlzZnkgZGVwZW5kLm00Ci0gIGN5Z3BhdGhfdT0nc2VkIHMsXFxcXCwvLGcnCi0gIGRlcG1vZGU9bXN2YzcKLWZpCi0KLWlmIHRlc3QgIiRkZXBtb2RlIiA9IHhsYzsgdGhlbgotICAjIElCTSBDL0MrKyBDb21waWxlcnMgeGxjL3hsQyBjYW4gb3V0cHV0IGdjYy1saWtlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24uCi0gIGdjY2ZsYWc9LXFtYWtlZGVwPWdjYywtTUYKLSAgZGVwbW9kZT1nY2MKLWZpCi0KLWNhc2UgIiRkZXBtb2RlIiBpbgotZ2NjMykKLSMjIGdjYyAzIGltcGxlbWVudHMgZGVwZW5kZW5jeSB0cmFja2luZyB0aGF0IGRvZXMgZXhhY3RseSB3aGF0Ci0jIyB3ZSB3YW50LiAgWWF5ISAgTm90ZTogZm9yIHNvbWUgcmVhc29uIGxpYnRvb2wgMS40IGRvZXNuJ3QgbGlrZQotIyMgaXQgaWYgLU1EIC1NUCBjb21lcyBhZnRlciB0aGUgLU1GIHN0dWZmLiAgSG1tLgotIyMgVW5mb3J0dW5hdGVseSwgRnJlZUJTRCBjODkgYWNjZXB0YW5jZSBvZiBmbGFncyBkZXBlbmRzIHVwb24KLSMjIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgb3JkZXI7IHNvIGFkZCB0aGUgZmxhZ3Mgd2hlcmUgdGhleQotIyMgYXBwZWFyIGluIGRlcGVuZDIuYW0uICBOb3RlIHRoYXQgdGhlIHNsb3dkb3duIGluY3VycmVkIGhlcmUKLSMjIGFmZmVjdHMgb25seSBjb25maWd1cmU6IGluIG1ha2VmaWxlcywgJUZBU1RERVAlIHNob3J0Y3V0cyB0aGlzLgotICBmb3IgYXJnCi0gIGRvCi0gICAgY2FzZSAkYXJnIGluCi0gICAgLWMpIHNldCBmbm9yZCAiJEAiIC1NVCAiJG9iamVjdCIgLU1EIC1NUCAtTUYgIiR0bXBkZXBmaWxlIiAiJGFyZyIgOzsKLSAgICAqKSAgc2V0IGZub3JkICIkQCIgIiRhcmciIDs7Ci0gICAgZXNhYwotICAgIHNoaWZ0ICMgZm5vcmQKLSAgICBzaGlmdCAjICRhcmcKLSAgZG9uZQotICAiJEAiCi0gIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgotICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgICBleGl0ICRzdGF0Ci0gIGZpCi0gIG12ICIkdG1wZGVwZmlsZSIgIiRkZXBmaWxlIgotICA7OwotCi1nY2MpCi0jIyBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGp1c3QgY2F0ZXIgdG8gb2Jzb3NldGUgcHJlLTMueCBHQ0MgY29tcGlsZXJzLgotIyMgYnV0IGFsc28gdG8gaW4tdXNlIGNvbXBpbGVycyBsaWtlIElNQiB4bGMveGxDIGFuZCB0aGUgSFAgQyBjb21waWxlci4KLSMjIChzZWUgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgdG8gJGdjY2ZsYWcgYWJvdmUpLgotIyMgVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBnZXQgZGVwZW5kZW5jeSBvdXRwdXQgZnJvbSBnY2MuICBIZXJlJ3MKLSMjIHdoeSB3ZSBwaWNrIHRoaXMgcmF0aGVyIG9ic2N1cmUgbWV0aG9kOgotIyMgLSBEb24ndCB3YW50IHRvIHVzZSAtTUQgYmVjYXVzZSB3ZSdkIGxpa2UgdGhlIGRlcGVuZGVuY2llcyB0byBlbmQKLSMjICAgdXAgaW4gYSBzdWJkaXIuICBIYXZpbmcgdG8gcmVuYW1lIGJ5IGhhbmQgaXMgdWdseS4KLSMjICAgKFdlIG1pZ2h0IGVuZCB1cCBkb2luZyB0aGlzIGFueXdheSB0byBzdXBwb3J0IG90aGVyIGNvbXBpbGVycy4pCi0jIyAtIFRoZSBERVBFTkRFTkNJRVNfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIG1ha2VzIGdjYyBhY3QgbGlrZQotIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuICBBbHNvLCBpdCBtaWdodCBub3QgYmUKLSMjICAgc3VwcG9ydGVkIGJ5IHRoZSBvdGhlciBjb21waWxlcnMgd2hpY2ggdXNlIHRoZSAnZ2NjJyBkZXBtb2RlLgotIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQotIyMgICB0aGFuIHJlbmFtaW5nKS4KLSAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCi0gICAgZ2NjZmxhZz0tTUQsCi0gIGZpCi0gICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KLSAgICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gICAgZXhpdCAkc3RhdAotICBmaQotICBybSAtZiAiJGRlcGZpbGUiCi0gIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0gICMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZQotICAjIGxldHRlcnMuCi0gIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAotICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgImRlbGV0ZWQgaGVhZGVyIGZpbGUiIHByb2JsZW0uCi0jIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQotIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCi0jIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZwotIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbwotIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCi0jIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlICc6Jy4gIE9uIHRoZSB0aGVvcnkKLSMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcwotIyMgd2VsbC4gIGhwIGRlcG1vZGUgYWxzbyBhZGRzIHRoYXQgc3BhY2UsIGJ1dCBhbHNvIHByZWZpeGVzIHRoZSBWUEFUSAotIyMgdG8gdGhlIG9iamVjdC4gIFRha2UgY2FyZSB0byBub3QgcmVwZWF0IGl0IGluIHRoZSBvdXRwdXQuCi0jIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgotIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCi0gICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICJzfC4qJG9iamVjdCR8fCIgLWUgJy86JC9kJyBcCi0gICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICA7OwotCi1ocCkKLSAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5Ci0gICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKLSAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KLSAgZXhpdCAxCi0gIDs7Ci0KLXNnaSkKLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgIiRAIiAiLVdwLC1NRHVwZGF0ZSwkdG1wZGVwZmlsZSIKLSAgZWxzZQotICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKLSAgZmkKLSAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgcm0gLWYgIiRkZXBmaWxlIgotCi0gIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcwotICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0gICAgIyBDbGlwIG9mZiB0aGUgaW5pdGlhbCBlbGVtZW50ICh0aGUgZGVwZW5kZW50KS4gIERvbid0IHRyeSB0byBiZQotICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCi0gICAgIyBsaW5lcyB3aXRoIG1vcmUgdGhhbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzICg0MDk2IGluCi0gICAgIyBJUklYIDYuMiBzZWQsIDgxOTIgaW4gSVJJWCA2LjUpLiAgV2UgYWxzbyByZW1vdmUgY29tbWVudCBsaW5lczsKLSAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSAnIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCi0gICAgIyBkZXBlbmRlbmN5IGxpbmUuCi0gICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCi0gICAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgXAotICAgICAgfCB0ciAiJG5sIiAnICcgPj4gIiRkZXBmaWxlIgotICAgIGVjaG8gPj4gIiRkZXBmaWxlIgotICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgotICAgIHRyICcgJyAiJG5sIiA8ICIkdG1wZGVwZmlsZSIgXAotICAgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKLSAgICAgID4+ICIkZGVwZmlsZSIKLSAgZWxzZQotICAgIG1ha2VfZHVtbXlfZGVwZmlsZQotICBmaQotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLXhsYykKLSAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5Ci0gICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKLSAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KLSAgZXhpdCAxCi0gIDs7Ci0KLWFpeCkKLSAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcwotICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQotICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzICckb2JqZWN0OicgYXQgdGhlCi0gICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCi0gICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgotICBzZXRfZGlyX2Zyb20gIiRvYmplY3QiCi0gIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCi0gIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgotICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51Ci0gICAgdG1wZGVwZmlsZTI9JGJhc2UudQotICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS51Ci0gICAgIiRAIiAtV2MsLU0KLSAgZWxzZQotICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51Ci0gICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLnUKLSAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UudQotICAgICIkQCIgLU0KLSAgZmkKLSAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKLSAgICBleGl0ICRzdGF0Ci0gIGZpCi0KLSAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKLSAgZG8KLSAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKLSAgZG9uZQotICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKLSAgOzsKLQotdGNjKQotICAjIHRjYyAoVGlueSBDIENvbXBpbGVyKSB1bmRlcnN0YW5kICctTUQgLU1GIGZpbGUnIHNpbmNlIHZlcnNpb24gMC45LjI2Ci0gICMgRklYTUU6IFRoYXQgdmVyc2lvbiBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhdCB0aGUgbW9tZW50IG9mIHdyaXRpbmcuCi0gICMgICAgICAgIE1ha2UgdGhhdCB0aGlzIHN0YXRlbWVudCByZW1haW5zIHRydWUgYWxzbyBmb3Igc3RhYmxlLCByZWxlYXNlZAotICAjICAgICAgICB2ZXJzaW9ucy4KLSAgIyBJdCB3aWxsIHdyYXAgbGluZXMgKGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgbG9uZyBvciBzaG9ydCkgd2l0aCBhCi0gICMgdHJhaWxpbmcgJ1wnLCBhcyBpbjoKLSAgIwotICAjICAgZm9vLm8gOiBcCi0gICMgICAgZm9vLmMgXAotICAjICAgIGZvby5oIFwKLSAgIwotICAjIEl0IHdpbGwgcHV0IGEgdHJhaWxpbmcgJ1wnIGV2ZW4gb24gdGhlIGxhc3QgbGluZSwgYW5kIHdpbGwgdXNlIGxlYWRpbmcKLSAgIyBzcGFjZXMgcmF0aGVyIHRoYW4gbGVhZGluZyB0YWJzIChhdCBsZWFzdCBzaW5jZSBpdHMgY29tbWl0IDAzOTRjYWY3Ci0gICMgIkVtaXQgc3BhY2VzIGZvciAtTUQiKS4KLSAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKLSAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgcm0gLWYgIiRkZXBmaWxlIgotICAjIEVhY2ggbm9uLWVtcHR5IGxpbmUgaXMgb2YgdGhlIGZvcm0gJ2Zvby5vIDogXCcgb3IgJyBkZXAuaCBcJy4KLSAgIyBXZSBoYXZlIHRvIGNoYW5nZSBsaW5lcyBvZiB0aGUgZmlyc3Qga2luZCB0byAnJG9iamVjdDogXCcuCi0gIHNlZCAtZSAic3wuKjp8JG9iamVjdCA6fCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICAjIEFuZCBmb3IgZWFjaCBsaW5lIG9mIHRoZSBzZWNvbmQga2luZCwgd2UgaGF2ZSB0byBlbWl0IGEgJ2RlcC5oOicKLSAgIyBkdW1teSBkZXBlbmRlbmN5LCB0byBhdm9pZCB0aGUgZGVsZXRlZC1oZWFkZXIgcHJvYmxlbS4KLSAgc2VkIC1uIC1lICdzfF4gICpcKC4qXCkgKlxcJHxcMTp8cCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICA7OwotCi0jIyBUaGUgb3JkZXIgb2YgdGhpcyBvcHRpb24gaW4gdGhlIGNhc2Ugc3RhdGVtZW50IGlzIGltcG9ydGFudCwgc2luY2UgdGhlCi0jIyBzaGVsbCBjb2RlIGluIGNvbmZpZ3VyZSB3aWxsIHRyeSBlYWNoIG9mIHRoZXNlIGZvcm1hdHMgaW4gdGhlIG9yZGVyCi0jIyBsaXN0ZWQgaW4gdGhpcyBmaWxlLiAgQSBwbGFpbiAnLU1EJyBvcHRpb24gd291bGQgYmUgdW5kZXJzdG9vZCBieSBtYW55Ci0jIyBjb21waWxlcnMsIHNvIHdlIG11c3QgZW5zdXJlIHRoaXMgY29tZXMgYWZ0ZXIgdGhlIGdjYyBhbmQgaWNjIG9wdGlvbnMuCi1wZ2NjKQotICAjIFBvcnRsYW5kJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyAnLU1EJy4KLSAgIyBXaWxsIGFsd2F5cyBvdXRwdXQgZGVwcyB0byAnZmlsZS5kJyB3aGVyZSBmaWxlIGlzIHRoZSByb290IG5hbWUgb2YgdGhlCi0gICMgc291cmNlIGZpbGUgdW5kZXIgY29tcGlsYXRpb24sIGV2ZW4gaWYgZmlsZSByZXNpZGVzIGluIGEgc3ViZGlyZWN0b3J5LgotICAjIFRoZSBvYmplY3QgZmlsZSBuYW1lIGRvZXMgbm90IGFmZmVjdCB0aGUgbmFtZSBvZiB0aGUgJy5kJyBmaWxlLgotICAjIHBnY2MgMTAuMiB3aWxsIG91dHB1dAotICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCi0gICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nICdcJyA6Ci0gICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAotICAjICAgICBzdWIvZm9vLmggLi4uIFwKLSAgIyAgICAgLi4uCi0gIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKLSAgIyBVc2UgdGhlIHNvdXJjZSwgbm90IHRoZSBvYmplY3QsIHRvIGRldGVybWluZSB0aGUgYmFzZSBuYW1lLCBzaW5jZQotICAjIHRoYXQncyBzYWRseSB3aGF0IHBnY2Mgd2lsbCBkbyB0b28uCi0gIHNldF9iYXNlX2Zyb20gIiRzb3VyY2UiCi0gIHRtcGRlcGZpbGU9JGJhc2UuZAotCi0gICMgRm9yIHByb2plY3RzIHRoYXQgYnVpbGQgdGhlIHNhbWUgc291cmNlIGZpbGUgdHdpY2UgaW50byBkaWZmZXJlbnQgb2JqZWN0Ci0gICMgZmlsZXMsIHRoZSBwZ2NjIGFwcHJvYWNoIG9mIHVzaW5nIHRoZSAqc291cmNlKiBmaWxlIHJvb3QgbmFtZSBjYW4gY2F1c2UKLSAgIyBwcm9ibGVtcyBpbiBwYXJhbGxlbCBidWlsZHMuICBVc2UgYSBsb2NraW5nIHN0cmF0ZWd5IHRvIGF2b2lkIHN0b21waW5nIG9uCi0gICMgdGhlIHNhbWUgJHRtcGRlcGZpbGUuCi0gIGxvY2tkaXI9JGJhc2UuZC1sb2NrCi0gIHRyYXAgIgotICAgIGVjaG8gJyQwOiBjYXVnaHQgc2lnbmFsLCBjbGVhbmluZyB1cC4uLicgPiYyCi0gICAgcm1kaXIgJyRsb2NrZGlyJwotICAgIGV4aXQgMQotICAiIDEgMiAxMyAxNQotICBudW10cmllcz0xMDAKLSAgaT0kbnVtdHJpZXMKLSAgd2hpbGUgdGVzdCAkaSAtZ3QgMDsgZG8KLSAgICAjIG1rZGlyIGlzIGEgcG9ydGFibGUgdGVzdC1hbmQtc2V0LgotICAgIGlmIG1rZGlyICIkbG9ja2RpciIgMj4vZGV2L251bGw7IHRoZW4KLSAgICAgICMgVGhpcyBwcm9jZXNzIGFjcXVpcmVkIHRoZSBsb2NrLgotICAgICAgIiRAIiAtTUQKLSAgICAgIHN0YXQ9JD8KLSAgICAgICMgUmVsZWFzZSB0aGUgbG9jay4KLSAgICAgIHJtZGlyICIkbG9ja2RpciIKLSAgICAgIGJyZWFrCi0gICAgZWxzZQotICAgICAgIyBJZiB0aGUgbG9jayBpcyBiZWluZyBoZWxkIGJ5IGEgZGlmZmVyZW50IHByb2Nlc3MsIHdhaXQKLSAgICAgICMgdW50aWwgdGhlIHdpbm5pbmcgcHJvY2VzcyBpcyBkb25lIG9yIHdlIHRpbWVvdXQuCi0gICAgICB3aGlsZSB0ZXN0IC1kICIkbG9ja2RpciIgJiYgdGVzdCAkaSAtZ3QgMDsgZG8KLSAgICAgICAgc2xlZXAgMQotICAgICAgICBpPWBleHByICRpIC0gMWAKLSAgICAgIGRvbmUKLSAgICBmaQotICAgIGk9YGV4cHIgJGkgLSAxYAotICBkb25lCi0gIHRyYXAgLSAxIDIgMTMgMTUKLSAgaWYgdGVzdCAkaSAtbGUgMDsgdGhlbgotICAgIGVjaG8gIiQwOiBmYWlsZWQgdG8gYWNxdWlyZSBsb2NrIGFmdGVyICRudW10cmllcyBhdHRlbXB0cyIgPiYyCi0gICAgZWNobyAiJDA6IGNoZWNrIGxvY2tkaXIgJyRsb2NrZGlyJyIgPiYyCi0gICAgZXhpdCAxCi0gIGZpCi0KLSAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgotICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgICBleGl0ICRzdGF0Ci0gIGZpCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcsCi0gICMgb3IgYGZvby5vOiBkZXAxLmggZGVwMi5oIFwnLCBvciBgIGRlcDMuaCBkZXA0LmggXCcuCi0gICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCi0gICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KLSAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCi0gICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiBcCi0gICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICA7OwotCi1ocDIpCi0gICMgVGhlICJocCIgc3RhbnphIGFib3ZlIGRvZXMgbm90IHdvcmsgd2l0aCBhQ0MgKEMrKykgYW5kIEhQJ3MgaWE2NAotICAjIGNvbXBpbGVycywgd2hpY2ggaGF2ZSBpbnRlZ3JhdGVkIHByZXByb2Nlc3NvcnMuICBUaGUgY29ycmVjdCBvcHRpb24KLSAgIyB0byB1c2Ugd2l0aCB0aGVzZSBpcyArTWFrZWQ7IGl0IHdyaXRlcyBkZXBlbmRlbmNpZXMgdG8gYSBmaWxlIG5hbWVkCi0gICMgJ2Zvby5kJywgd2hpY2ggbGFuZHMgbmV4dCB0byB0aGUgb2JqZWN0IGZpbGUsIHdoZXJldmVyIHRoYXQKLSAgIyBoYXBwZW5zIHRvIGJlLgotICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCi0gIHNldF9kaXJfZnJvbSAgIiRvYmplY3QiCi0gIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCi0gIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgotICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCi0gICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLmQKLSAgICAiJEAiIC1XYywrTWFrZWQKLSAgZWxzZQotICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCi0gICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKLSAgICAiJEAiICtNYWtlZAotICBmaQotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KLSAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKLSAgICAgZXhpdCAkc3RhdAotICBmaQotCi0gIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCi0gIGRvCi0gICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCi0gIGRvbmUKLSAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCi0gICAgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOiwkb2JqZWN0OiwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICAgIyBBZGQgJ2RlcGVuZGVudC5oOicgbGluZXMuCi0gICAgc2VkIC1uZSAnMiwkewotICAgICAgICAgICAgICAgcy9eICovLwotICAgICAgICAgICAgICAgcy8gXFwqJC8vCi0gICAgICAgICAgICAgICBzLyQvOi8KLSAgICAgICAgICAgICAgIHAKLSAgICAgICAgICAgICB9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKLSAgZWxzZQotICAgIG1ha2VfZHVtbXlfZGVwZmlsZQotICBmaQotICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZTIiCi0gIDs7Ci0KLXRydTY0KQotICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCi0gICMgZWZmZWN0LiAgJ2NjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvICdmb28uby5kJy4KLSAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAotICAjIGRlcGVuZGVuY2llcyBpbiAnZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KLSAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgotICBzZXRfZGlyX2Zyb20gICIkb2JqZWN0IgotICBzZXRfYmFzZV9mcm9tICIkb2JqZWN0IgotCi0gIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgotICAgICMgTGlidG9vbCBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZQotICAgICMgdHdvIGNvbXBpbGF0aW9ucyBvdXRwdXQgZGVwZW5kZW5jaWVzIGluICRkaXIubGlicy8kYmFzZS5vLmQgYW5kCi0gICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQotICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKLSAgICAjICRkaXIkYmFzZS5vLmQgb3ZlciAkZGlyLmxpYnMvJGJhc2Uuby5kIGJlY2F1c2UgdGhlIGxhdHRlciBpcwotICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCi0gICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCi0gICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41Ci0gICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIExpa2V3aXNlLgotICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0Ci0gICAgIiRAIiAtV2MsLU1ECi0gIGVsc2UKLSAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAotICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCi0gICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKLSAgICAiJEAiIC1NRAotICBmaQotCi0gIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgotICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCi0gICAgZXhpdCAkc3RhdAotICBmaQotCi0gIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCi0gIGRvCi0gICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCi0gIGRvbmUKLSAgIyBTYW1lIHBvc3QtcHJvY2Vzc2luZyB0aGF0IGlzIHJlcXVpcmVkIGZvciBBSVggbW9kZS4KLSAgYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlCi0gIDs7Ci0KLW1zdmM3KQotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICBzaG93SW5jbHVkZXM9LVdjLC1zaG93SW5jbHVkZXMKLSAgZWxzZQotICAgIHNob3dJbmNsdWRlcz0tc2hvd0luY2x1ZGVzCi0gIGZpCi0gICIkQCIgJHNob3dJbmNsdWRlcyA+ICIkdG1wZGVwZmlsZSIKLSAgc3RhdD0kPwotICBncmVwIC12ICdeTm90ZTogaW5jbHVkaW5nIGZpbGU6ICcgIiR0bXBkZXBmaWxlIgotICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgcm0gLWYgIiRkZXBmaWxlIgotICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICAjIFRoZSBmaXJzdCBzZWQgcHJvZ3JhbSBiZWxvdyBleHRyYWN0cyB0aGUgZmlsZSBuYW1lcyBhbmQgZXNjYXBlcwotICAjIGJhY2tzbGFzaGVzIGZvciBjeWdwYXRoLiAgVGhlIHNlY29uZCBzZWQgcHJvZ3JhbSBvdXRwdXRzIHRoZSBmaWxlCi0gICMgbmFtZSB3aGVuIHJlYWRpbmcsIGJ1dCBhbHNvIGFjY3VtdWxhdGVzIGFsbCBpbmNsdWRlIGZpbGVzIGluIHRoZQotICAjIGhvbGQgYnVmZmVyIGluIG9yZGVyIHRvIG91dHB1dCB0aGVtIGFnYWluIGF0IHRoZSBlbmQuICBUaGlzIG9ubHkKLSAgIyB3b3JrcyB3aXRoIHNlZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW4gaGFuZGxlIGxhcmdlIGJ1ZmZlcnMuCi0gIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gJwotL15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogICpcKC4qXCkvIHsKLSAgcy8vXDEvCi0gIHMvXFwvXFxcXC9nCi0gIHAKLX0nIHwgJGN5Z3BhdGhfdSB8IHNvcnQgLXUgfCBzZWQgLW4gJwotcy8gL1xcIC9nCi1zL1woLipcKS8nIiR0YWIiJ1wxIFxcL3AKLXMvLlwoLipcKSBcXC9cMTovCi1ICi0kIHsKLSAgcy8uKi8nIiR0YWIiJy8KLSAgRwotICBwCi19JyA+PiAiJGRlcGZpbGUiCi0gIGVjaG8gPj4gIiRkZXBmaWxlIiAjIG1ha2Ugc3VyZSB0aGUgZnJhZ21lbnQgZG9lc24ndCBlbmQgd2l0aCBhIGJhY2tzbGFzaAotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLW1zdmM3bXN5cykKLSAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5Ci0gICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKLSAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KLSAgZXhpdCAxCi0gIDs7Ci0KLSNub3NpZGVlZmZlY3QpCi0gICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdAotICAjIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtcyBmcm9tIHNsb3dlciBvbmVzLgotCi1kYXNobXN0ZG91dCkKLSAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCi0gICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8uCi0gICIkQCIgfHwgZXhpdCAkPwotCi0gICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCi0gIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgotICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCi0gICAgICBzaGlmdAotICAgIGRvbmUKLSAgICBzaGlmdAotICBmaQotCi0gICMgUmVtb3ZlICctbyAkb2JqZWN0Jy4KLSAgSUZTPSIgIgotICBmb3IgYXJnCi0gIGRvCi0gICAgY2FzZSAkYXJnIGluCi0gICAgLW8pCi0gICAgICBzaGlmdAotICAgICAgOzsKLSAgICAkb2JqZWN0KQotICAgICAgc2hpZnQKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgotICAgICAgc2hpZnQgIyBmbm9yZAotICAgICAgc2hpZnQgIyAkYXJnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIHRlc3QgLXogIiRkYXNobWZsYWciICYmIGRhc2htZmxhZz0tTQotICAjIFJlcXVpcmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgJzonCi0gICMgaW4gdGhlIHRhcmdldCBuYW1lLiAgVGhpcyBpcyB0byBjb3BlIHdpdGggRE9TLXN0eWxlIGZpbGVuYW1lczoKLSAgIyBhIGRlcGVuZGVuY3kgc3VjaCBhcyAnYzovZm9vL2JhcicgY291bGQgYmUgc2VlbiBhcyB0YXJnZXQgJ2MnIG90aGVyd2lzZS4KLSAgIiRAIiAkZGFzaG1mbGFnIHwKLSAgICBzZWQgInN8XlskdGFiIF0qW146JHRhYiBdW146XVteOl0qOlskdGFiIF0qfCRvYmplY3Q6IHwiID4gIiR0bXBkZXBmaWxlIgotICBybSAtZiAiJGRlcGZpbGUiCi0gIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIHNlZCBpbnZvY2F0aW9uCi0gICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCi0gICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgXAotICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQotZGFzaFhtc3Rkb3V0KQotICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5Ci0gICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgotICBleGl0IDEKLSAgOzsKLQotbWFrZWRlcGVuZCkKLSAgIiRAIiB8fCBleGl0ICQ/Ci0gICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KLSAgICAgIHNoaWZ0Ci0gICAgZG9uZQotICAgIHNoaWZ0Ci0gIGZpCi0gICMgWCBtYWtlZGVwZW5kCi0gIHNoaWZ0Ci0gIGNsZWFyZWQ9bm8gZWF0PW5vCi0gIGZvciBhcmcKLSAgZG8KLSAgICBjYXNlICRjbGVhcmVkIGluCi0gICAgbm8pCi0gICAgICBzZXQgIiI7IHNoaWZ0Ci0gICAgICBjbGVhcmVkPXllcyA7OwotICAgIGVzYWMKLSAgICBpZiB0ZXN0ICRlYXQgPSB5ZXM7IHRoZW4KLSAgICAgIGVhdD1ubwotICAgICAgY29udGludWUKLSAgICBmaQotICAgIGNhc2UgIiRhcmciIGluCi0gICAgLUQqfC1JKikKLSAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKLSAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQotICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KLSAgICAtYXJjaCkKLSAgICAgIGVhdD15ZXMgOzsKLSAgICAtKnwkb2JqZWN0KQotICAgICAgOzsKLSAgICAqKQotICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OwotICAgIGVzYWMKLSAgZG9uZQotICBvYmpfc3VmZml4PWBlY2hvICIkb2JqZWN0IiB8IHNlZCAncy9eLipcLi8uLydgCi0gIHRvdWNoICIkdG1wZGVwZmlsZSIKLSAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgotICBybSAtZiAiJGRlcGZpbGUiCi0gICMgbWFrZWRlcGVuZCBtYXkgcHJlcGVuZCB0aGUgVlBBVEggZnJvbSB0aGUgc291cmNlIGZpbGUgbmFtZSB0byB0aGUgb2JqZWN0LgotICAjIE5vIG5lZWQgdG8gcmVnZXgtZXNjYXBlICRvYmplY3QsIGV4Y2VzcyBtYXRjaGluZyBvZiAnLicgaXMgaGFybWxlc3MuCi0gIHNlZCAic3xeLipcKCRvYmplY3QgKjpcKXxcMXwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGUgbGFzdCBpbnZvY2F0aW9uCi0gICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIFwKLSAgICB8IHRyICcgJyAiJG5sIiBcCi0gICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgXAotICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKLSAgOzsKLQotY3BwKQotICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKLSAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KLSAgIiRAIiB8fCBleGl0ICQ/Ci0KLSAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KLSAgICAgIHNoaWZ0Ci0gICAgZG9uZQotICAgIHNoaWZ0Ci0gIGZpCi0KLSAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgotICBJRlM9IiAiCi0gIGZvciBhcmcKLSAgZG8KLSAgICBjYXNlICRhcmcgaW4KLSAgICAtbykKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICRvYmplY3QpCi0gICAgICBzaGlmdAotICAgICAgOzsKLSAgICAqKQotICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCi0gICAgICBzaGlmdCAjIGZub3JkCi0gICAgICBzaGlmdCAjICRhcmcKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgIiRAIiAtRSBcCi0gICAgfCBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAotICAgICAgICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCi0gICAgfCBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgotICBybSAtZiAiJGRlcGZpbGUiCi0gIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0gIGNhdCA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotICBzZWQgPCAiJHRtcGRlcGZpbGUiICcvXiQvZDtzL14gLy87cy8gXFwkLy87cy8kLyA6LycgPj4gIiRkZXBmaWxlIgotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLW1zdmlzdWFsY3BwKQotICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKLSAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KLSAgIiRAIiB8fCBleGl0ICQ/Ci0KLSAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KLSAgICAgIHNoaWZ0Ci0gICAgZG9uZQotICAgIHNoaWZ0Ci0gIGZpCi0KLSAgSUZTPSIgIgotICBmb3IgYXJnCi0gIGRvCi0gICAgY2FzZSAiJGFyZyIgaW4KLSAgICAtbykKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICRvYmplY3QpCi0gICAgICBzaGlmdAotICAgICAgOzsKLSAgICAiLUdtInwiL0dtInwiLUdpInwiL0dpInwiLVpJInwiL1pJIikKLSAgICAgICAgc2V0IGZub3JkICIkQCIKLSAgICAgICAgc2hpZnQKLSAgICAgICAgc2hpZnQKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKLSAgICAgICAgc2hpZnQKLSAgICAgICAgc2hpZnQKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLSAgIiRAIiAtRSAyPi9kZXYvbnVsbCB8Ci0gIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6XDE6cCcgfCAkY3lncGF0aF91IHwgc29ydCAtdSA+ICIkdG1wZGVwZmlsZSIKLSAgcm0gLWYgIiRkZXBmaWxlIgotICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OiciJHRhYiInXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgotICBlY2hvICIkdGFiIiA+PiAiJGRlcGZpbGUiCi0gIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQotbXN2Y21zeXMpCi0gICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQotICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCi0gICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCi0gIGV4aXQgMQotICA7OwotCi1ub25lKQotICBleGVjICIkQCIKLSAgOzsKLQotKikKLSAgZWNobyAiVW5rbm93biBkZXBtb2RlICRkZXBtb2RlIiAxPiYyCi0gIGV4aXQgMQotICA7OwotZXNhYwotCi1leGl0IDAKLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIG1vZGU6IHNoZWxsLXNjcmlwdAotIyBzaC1pbmRlbnRhdGlvbjogMgotIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKLSMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCi0jIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgotIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCi0jIEVuZDoKZGlmZiAtLWdpdCBhL2RvY3MvTWFrZWZpbGUuYW0gYi9kb2NzL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzliNzg5Li4wMDAwMDAwCi0tLSBhL2RvY3MvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1pZiBFTkFCTEVfRE9DQk9PSwotU1VCRElSU19ET0NCT09LID0gZmFxIG1hbnVhbCBwd2cKLWVsc2UKLVNVQkRJUlNfRE9DQk9PSyA9Ci1lbmRpZgotCi1pZiBFTkFCTEVfR1RLX0RPQwotaWYgRU5BQkxFX1BMVUdJTl9ET0NTCi1QTFVHSU5fRE9DU19ESVJTID0gcGx1Z2lucwotZWxzZQotUExVR0lOX0RPQ1NfRElSUyA9Ci1lbmRpZgotZWxzZQotUExVR0lOX0RPQ1NfRElSUyA9IHBsdWdpbnMKLWVuZGlmCi0KLUJVSUxUX1NPVVJDRVMgPSB2ZXJzaW9uLmVudGl0aWVzCi0KLVNVQkRJUlMgPSBkZXNpZ24gZ3N0IGxpYnMgJChQTFVHSU5fRE9DU19ESVJTKSAkKFNVQkRJUlNfRE9DQk9PSykKLURJU1RfU1VCRElSUyA9IGRlc2lnbiBnc3QgbGlicyBwbHVnaW5zIGZhcSBtYW51YWwgcHdnIHNsaWRlcyB4c2wKLQotRVhUUkFfRElTVCA9IFwKLQltYW51YWxzLm1hayBodG1saW5zdGFsbC5tYWsgXAotCWltYWdlLXBuZyBpbWFnZS1wZGYgaW1hZ2UtZXBzIHVybC5lbnRpdGllcyB2ZXJzaW9uLmVudGl0aWVzLmluIGxpc3QtdWxpbmsueHNsCi0KLXVwbG9hZDoKLQlAaWYgdGVzdCAieCQoU1VCRElSUykiICE9IHg7IHRoZW4gZm9yIGEgaW4gJChTVUJESVJTKTsgZG8gY2QgJCRhOyBtYWtlIHVwbG9hZDsgY2QgLi47IGRvbmU7IGZpCi0KLWxpYnM6IGdzdAotCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrCmRpZmYgLS1naXQgYS9kb2NzL01ha2VmaWxlLmluIGIvZG9jcy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI2NzczYi4uMDAwMDAwMAotLS0gYS9kb2NzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODYzICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIGluY2x1ZGUgdGhpcyBhdCB0aGUgZW5kIG9mICRNT0RVTEUvZXh0L01ha2VmaWxlLmFtIHRvIGZvcmNlIG1ha2UgdG8KLSMgYnVpbGQgc3ViZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWwgd2hlbiBtYWtlIC1qTiBpcyB1c2VkLiBXZSB3aWxsIGVuZCB1cAotIyBkZXNjZW5kaW5nIGludG8gYWxsIHN1YmRpcmVjdG9yaWVzIGEgc2Vjb25kIHRpbWUsIGJ1dCBvbmx5IGFmdGVyIHRoZSBmaXJzdAotIyAocGFyYWxsZWwpIHJ1biBoYXMgZmluaXNoZWQsIHNvIGl0IHNob3VsZCBnbyByaWdodCB0aHJvdWdoIHRoZSBzZWNvbmQgdGltZS4KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGRvY3MKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPSB2ZXJzaW9uLmVudGl0aWVzCi1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGNzY29wZWxpc3QtcmVjdXJzaXZlIFwKLQljdGFncy1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWR2aS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAotCWluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgXAotCWluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSBcCi0JdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLVJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCi0gIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLWFtX19yZWN1cnNpdmVfdGFyZ2V0cyA9IFwKLSAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAotICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCi0gICQoYW1fX2V4dHJhX3JlY3Vyc2l2ZV90YXJnZXRzKQotQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCi0JZGlzdGRpcgotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL3ZlcnNpb24uZW50aXRpZXMuaW4gXAotCSQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrIFJFQURNRQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWFtX19yZWxhdGl2aXplID0gXAotICBkaXIwPWBwd2RgOyBcCi0gIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAotICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAotICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAotICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKLSAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAotICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKLSAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCi0gICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAotICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKLSAgICAgIGVsc2UgXAotICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKLSAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgICAgICAgZWxzZSBcCi0gICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAotICAgICAgICBmaTsgXAotICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAotICAgICAgZmk7IFwKLSAgICBmaTsgXAotICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICBkb25lOyBcCi0gIHJlbGRpcj0iJCRkaXIyIgotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLUBFTkFCTEVfRE9DQk9PS19GQUxTRUBTVUJESVJTX0RPQ0JPT0sgPSAKLUBFTkFCTEVfRE9DQk9PS19UUlVFQFNVQkRJUlNfRE9DQk9PSyA9IGZhcSBtYW51YWwgcHdnCi1ARU5BQkxFX0dUS19ET0NfRkFMU0VAUExVR0lOX0RPQ1NfRElSUyA9IHBsdWdpbnMKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQEBFTkFCTEVfUExVR0lOX0RPQ1NfRkFMU0VAUExVR0lOX0RPQ1NfRElSUyA9IAotQEVOQUJMRV9HVEtfRE9DX1RSVUVAQEVOQUJMRV9QTFVHSU5fRE9DU19UUlVFQFBMVUdJTl9ET0NTX0RJUlMgPSBwbHVnaW5zCi1CVUlMVF9TT1VSQ0VTID0gdmVyc2lvbi5lbnRpdGllcwotU1VCRElSUyA9IGRlc2lnbiBnc3QgbGlicyAkKFBMVUdJTl9ET0NTX0RJUlMpICQoU1VCRElSU19ET0NCT09LKQotRElTVF9TVUJESVJTID0gZGVzaWduIGdzdCBsaWJzIHBsdWdpbnMgZmFxIG1hbnVhbCBwd2cgc2xpZGVzIHhzbAotRVhUUkFfRElTVCA9IFwKLQltYW51YWxzLm1hayBodG1saW5zdGFsbC5tYWsgXAotCWltYWdlLXBuZyBpbWFnZS1wZGYgaW1hZ2UtZXBzIHVybC5lbnRpdGllcyB2ZXJzaW9uLmVudGl0aWVzLmluIGxpc3QtdWxpbmsueHNsCi0KLWFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotJCh0b3Bfc3JjZGlyKS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci12ZXJzaW9uLmVudGl0aWVzOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvdmVyc2lvbi5lbnRpdGllcy5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6Ci0JQGZhaWw9OyBcCi0JaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKLQkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAotCWVsc2UgXAotCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZpOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtcmVjdXJzaXZlCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtcmVjdXJzaXZlCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCi0JICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCi0JICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKLQkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCi0JCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKLQkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAotCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1yZWN1cnNpdmUKLWFsbC1hbTogTWFrZWZpbGUKLWluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKLWluc3RhbGxkaXJzLWFtOgotaW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLQktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQotY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1yZWN1cnNpdmUKLQotZHZpLWFtOgotCi1odG1sOiBodG1sLXJlY3Vyc2l2ZQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLXJlY3Vyc2l2ZQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLXJlY3Vyc2l2ZQotCi1wZGYtYW06Ci0KLXBzOiBwcy1yZWN1cnNpdmUKLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBhbGwgY2hlY2sgaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBcCi0JY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAotCXBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi11cGxvYWQ6Ci0JQGlmIHRlc3QgIngkKFNVQkRJUlMpIiAhPSB4OyB0aGVuIGZvciBhIGluICQoU1VCRElSUyk7IGRvIGNkICQkYTsgbWFrZSB1cGxvYWQ7IGNkIC4uOyBkb25lOyBmaQotCi1saWJzOiBnc3QKLQotLlBIT05ZOiBpbmRlcGVuZGVudC1zdWJkaXJzICQoU1VCRElSUykKLQotaW5kZXBlbmRlbnQtc3ViZGlyczogJChTVUJESVJTKQotCi0kKFNVQkRJUlMpOgotCSQoTUFLRSkgLUMgJEAKLQotYWxsLXJlY3Vyc2l2ZTogaW5kZXBlbmRlbnQtc3ViZGlycwotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL1JFQURNRSBiL2RvY3MvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2NlYmIzLi4wMDAwMDAwCi0tLSBhL2RvY3MvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNDAxICswLDAgQEAKLUdTdHJlYW1lciBkb2N1bWVudGF0aW9uIG5vdGVzCi0KLUlNUE9SVEFOVAotPT09PT09PT09Ci0KLVBsZWFzZSBtYWtlIHN1cmUgeW91J3ZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgZXZlcnl0aGluZyBpbiB0aGlzIGZpbGUKLWJlZm9yZSB5b3UgdHJ5IGNoYW5naW5nIGRvY3VtZW50YXRpb24uCi0KLU9WRVJWSUVXCi09PT09PT09PQotCi1HU3RyZWFtZXIgaGFzIHR3byBzZXRzIG9mIGRvY3VtZW50YXRpb24gdGhhdCB3ZSBtYWludGFpbjoKLSogQVBJIHJlZmVyZW5jZXMsIHVzaW5nIGd0ay1kb2MgKGdzdHJlYW1lciwgZ3N0cmVhbWVyLWxpYnMpCi0qICJib29rcyIsIHVzaW5nIERvY0Jvb2svWE1MIChmYXEsIG1hbnVhbCwgcHdnKQotCi1ET0NCT09LIE5PVEVTCi09PT09PT09PT09PT09Ci0KLU9LLCBJJ3ZlIGdyb3duIHNvIHRpcmVkIG9mIGhhdmluZyB0byBjb2F4IHRoZSBkb2NzIHRvIGJ1aWxkIGV2ZXJ5IHRpbWUgSQotZ2V0IHJvdW5kIHRvIGl0IHRoYXQgSSd2ZSBkZWNpZGVkIHRvIG5vdGUgZG93biBzb21lIG9mIHRoZSB0aGluZ3MgdGhhdAotYXJlIGltcG9ydGFudCB0byBrbm93LgotCi1PVkVSVklFVwotLS0tLS0tLS0KLSogT3VyIGRvY3VtZW50YXRpb24gc2hvdWxkIGFsbCBiZSBEb2Nib29rL1hNTC4gIE5vIFNHTUwuCi0qIFRoZSBzb3VyY2UgZm9yIHRoZSBkb2N1bWVudGF0aW9uIGlzOgotICAtIG9uZSBvciBtb3JlIC54bWwgZmlsZXMsIHdpdGggdGhlIG1haW4gb25lIGJlaW5nIGdzdHJlYW1lci0od2hhdGV2ZXIpLnhtbAotICAtIGltYWdlIGZpbGVzCi0gICAgLSBpbiAuc3ZnCi0gICAgLSBpbiAucG5nIChhbmQgbWF5YmUgb3RoZXJzKQotKiBXZSB3YW50IHRvIGdlbmVyYXRlIGRvY3MgaW4gSFRNTCwgUFMgYW5kIFBERgotKiBXZSB3YW50IHRvIHVzZSB4bWwgdG8gdG8gZ2VuZXJhdGUgdGhlc2UKLQotQ09OVkVOVElPTlMKLS0tLS0tLS0tLS0tCi1XZSBzdGljayB0byBzb21lIHNpbXBsZSBjb252ZW50aW9ucyBmb3Igd3JpdGluZyBkb2Nib29rIGRvY3VtZW50YXRpb24uCi0qIGlkIG5hbWVzOgotICAtIGFsbCBpZCdzIHN0YXJ0IHdpdGggY2hhcHRlci0sIHBhcnQtLCBzZWN0aW9uLSwgb3IgbWlzYy0KLSAgLSB2ZXJpZnkgdGhpcyBpcyB0aGUgY2FzZSBieSBsb29raW5nIGF0IHRoZSBnZW5lcmF0ZWQgZmlsZSBuYW1lcyBpbiBodG1sLwotICAtIHNlY3Rpb25zIHNob3VsZCBhbHNvIGluY2x1ZGUgdGhlIGNoYXB0ZXIgbmFtZTsKLSAgICBmb3IgZXhhbXBsZSBpbiBhIGNoYXB0ZXIgY2FsbGVkIGNoYXB0ZXItZXhhbXBsZSwgYSBzZWN0aW9uIHdvdWxkIGJlCi0gICAgY2FsbGVkIHNlY3Rpb24tZXhhbXBsZS1oZWxsby13b3JsZAotKiB0aGVyZSBhcmUgY3VycmVudGx5IGNvbW1lbnRzIG9mIHRoZSBmb3JtIDwhLS0gc3luY2hyb25pemUgd2l0aCBQV0cgLS0+Ci0gIGluIHRoZSBkb2Nib29rIGZpbGUuIFBsZWFzZSBjaGVjayB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgb3RoZXIgbWFudWFsCi0gIHdoZW4gdXBkYXRpbmcuCi0KLUhPVyBJTUFHRVMgQVJFIEhBTkRMRUQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogdGhlIGZvcm1hdCBvZiBpbWFnZXMgdXNlZCBpczoKLSAgLSBQTkcgZm9yIGh0bWwKLSAgLSBFUFMgZm9yIHBzCi0gIC0gUERGIGZvciBwZGYKLQotKiBpbWFnZXMgbWF5IG5lZWQgdG8gYmUgY29udmVydGVkIGZyb20gdGhlaXIgc291cmNlIGZvcm1hdCB0byB0aGUgZW5kIGZvcm1hdAotCi0qIGEgZmlsZSBjYWxsZWQgaW1hZ2UuZW50aXRpZXMgaXMgZ2VuZXJhdGVkIHRoYXQgcHJvdmlkZXMgdHdvIGVudGl0aWVzOgotICAmaW1hZ2U7IGFuZCAmSU1BR0U7Ci0gICZpbWFnZTsgaXMgdGhlIGZpbGUgZXh0ZW5zaW9uIChwbmcsIHBzLCBwZGYpCi0qIGFsbCBnZW5lcmF0ZWQgaW1hZ2VzIHdpbGwgYmUgcHV0IGluIGltYWdlcy8KLQotSE9XIFRIRSBCVUlMRCBXT1JLUyBGT1IgRUFDSCBGT1JNQVQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIEhUTUw6Ci0gIC0geG1sdG8gaHRtbCBnc3RyZWFtZXItd2hhdGV2ZXIueG1sIHNob3VsZCBwcm9kdWNlIHRoZSBodG1sIGRvY3MuCi0gIC0gV2UgZG8gdGhpcyBpbiB0aGUgaHRtbCBzdWJkaXIgb2YgdGhlIGRvYyBidWlsZGRpci4KLSAgLSBpbWFnZXMgYXJlIGNvcGllZCB0byAoYnVpbGRkaXIpL2h0bWwvaW1hZ2VzCi0gIC0gUE5HUyBzaG91bGQgYmUgc2V0IHRvIGFsbCBvZiB0aGUgcG5nJ3MgcmVmZXJlbmNlZCBmb3IgaHRtbCwgYm90aAotICAgIGFscmVhZHkgdGhlcmUgYW5kIGF1dG8tZ2VuZXJhdGVkCi0KLSogUFMgOgotICAtIGltYWdlcyBhcmUgY29udmVydGVkIHRvIC5wcyBmaWxlcyBpbiBFUFMgZm9ybWF0LiAgR2VuZXJhdGVkIGltYWdlcyBhcmUKLSAgICBwdXQgaW4gaW1hZ2VzLwotICAtIHhtbHRvIHBzIGdzdHJlYW1lci13aGF0ZXZlci54bWwgZ2VuZXJhdGVzIHRoZSBwcyBmaWxlCi0KLSogUERGIDoKLSAgVGhlcmUgYXJlIHR3byB3YXlzOgotICAtIHBzMnBkZiBpcyB0aGUgZWFzaWVzdAotICAtIHdlIHNwZWNpZnkgcHMsIFBTIGFzIHRoZSBpbWFnZSB0eXBlLCBidXQgdXNpbmcgeG1sdG8gdGhlIGJ1aWxkIHdpbGwgZmFpbAotICAgIGJlY2F1c2UgaXQgdXNlcyBwczJwZGYgaW50ZXJuYWxseSBhbmQgaXQgZmFpbHMgdG8gZ2VuZXJhdGUgdGhlIGltYWdlcwotICAgIEJ5IGhhbmQtZ2VuZXJhdGluZyAucGRmIGltYWdlcyBiZWZvcmUgeG1sdG8gd2UgY2FuIG1ha2UgdGhlIGJ1aWxkIHN1Y2NlZWQuCi0gICAgKFRoaXMgaXMgd2h5IGltYWdlLXBkZiBoYXMgZmlsZSBleHQgcGRmIGJ1dCB0eXBlIEVQUzsgdGhpcyB0cmlja3MgeG1sdG8gaW4KLSAgICAgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nKQotICAgIHhtbHRvIHBkZiBnc3RyZWFtZXItd2hhdGV2ZXIueG1sIGdlbmVyYXRlcyBwZGYgKGJ1dCBzZWVtcyB0byBmYWlsIG9uIHRoZQotICAgIEZBUSwgc28gZm9yIG5vdyB3ZSB1c2UgcHMycGRmKQotCi1IT1cgVEhFIEJVSUxEIFNZU1RFTSBJUyBTRVQgVVAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBtYWtlIGFsbCBzaG91bGQgYnVpbGQgaHRtbCwgcHMsIGFuZCBwZGYKLSogaHRtbCBpcyBidWlsdCBpbiBhIHN1YmRpciwgd2l0aCB0aGUgcG5nL3BzIGltYWdlcyBjb3BpZWQgdGhlcmUKLSogcHMgYW5kIHBkZiBhcmUgYnVpbHQgaW4gdGhlIGN1cnJlbnQgZGlyLCBpbiBvbmUgZmlsZQotCi1TUEVMTCBDSEVDS0lORwotLS0tLS0tLS0tLS0tLS0KLSogd2l0aCBhc3BlbGwKLSAgKiBhc3BlbGwgLWIgLWMgLS1tb2RlPXNnbWwgLS1sYW5nPWVuIDxmaWxlPi54bWwKLSAgICB1bmZvcnR1bmF0ZWx5IHRoZSBjdXJzZXMtdWkgb2YgYXNwZWxsICgwLjUwLjUpIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSB4bWwgdGFncwotCi0KLUdUSy1ET0MgTk9URVMKLT09PT09PT09PT09PT0KLQotKiBmaWxlcyB1bmRlciBDVlMgY29udHJvbDoKLSAgLSBNYWtlZmlsZS5hbQotICAtIGdzdHJlYW1lci1zZWN0aW9ucy50eHQKLSAgICBkZXNjcmliZXMgd2hpY2ggc3ltYm9scyBsYXRlciBhcHBlYXIgb24gb25lIGFwaS1kb2MgcGFnZQotICAgIGNvbmZpZ3VyZSB3aGljaCBzeW1ib2xzIGFyZSBzaG93bi9pbnZpc2libGUvcHJpdmF0ZQotICAtIGdzdHJlYW1lci50eXBlcwotICAgIHRoZSB0eXBlcyBmaWxlIGxpc3RzIGFsbCBnZXRfdHlwZSgpIGZ1bmN0aW9ucyB0aGF0IHJlZ2lzdGVyIHRoZSBHT2JqZWN0IHR5cGVzCi0gIC0gZ3N0cmVhbWVyLWRvY3Muc2dtbAotICAgIGRlZmluZXMgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBhcGkgZG9jdW1lbnRhdGlvbgotICAtIHRtcGwvCi0gICAgLSBvbmx5IGFkZCB0aGUgZmlsZSB0byBDVlMgaWYgeW91IGhhdmUgYXQgbGVhc3QgZmlsbGVkIHRoZSBzaG9ydCBkZXNjcmlwdGlvbgotICAgICAgKGZpbGVuYW1lIGNvcnJlc3BvbmRzIHRvIHRoZSA8RklMRT4gdGFnIGluIHRoZSBzZWN0aW9ucyBmaWxlKQotICAgIC0gZG9jdW1lbnQgYXMgbXVjaCBhcyBwb3NzaWJsZSBpbiB0aGUgc291cmNlICgqLmMgZmlsZXMpCi0KLSogd2hhdCB0byBkbyB3aGVuIGFkZGluZyBhIG5ldyBwaWVjZSBvZiBBUEk6Ci0gIC0gYWRkIGJvdGggYW4gZW50aXR5IGFuZCB1c2UgdGhlIGVudGl0eSBpbiBnc3RyZWFtZXItZG9jcy5zZ21sCi0gIC0gYWRkIGEgbmV3IDxTRUNUSU9OPiB0byBnc3RyZWFtZXItc2VjdGlvbnMudHh0IGluIHRoZSBjb3JyZWN0IGFscGhhYmV0aWNhbAotICAgIHBvc2l0aW9uIHJlbGF0ZWQgdG8gdGhlIG90aGVyIHNlY3Rpb25zIChzbyB0aGF0IGl0IGlzIGVhc2llciB0byBsb2NhdGUpCi0gIC0gYWRkIGFsbCBkb2N1bWVudGVkIHN5bWJvbHMgdG8gZ3N0cmVhbWVyLXNlY3Rpb25zLnR4dCBpbiB0aGUgcHJvcGVyIHNlY3Rpb24KLSAgICAoZGVmYXVsdCksPFNVQlNFQ1RJT04gU3RhbmRhcmQ+LDxTVUJTRUNUSU9OIFByaXZhdGU+Ci0gIC0gZG9jdW1lbnQgYXQgbGVhc3QgdGhlIFNob3J0X0Rlc2NyaXB0aW9uIGluIHRtcGwvLnNnbWwKLSAgLSBkb2N1bWVudCBzeW1ib2xzIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQsIHNvIHRoYXQgd2hlbiBvbmUgY2hhbmdlcyB0aGUKLSAgICBkZWZpbml0aW9uLCB0aGUgY2hhY2VzIGFyZSBnb29kIHRoYXQgZG9jcyBhcmUgdXBkYXRlZC4KLSAgICAtIGRvY3VtZW50IGZ1bmN0aW9ucywgc2lnbmFscyBpbiB0aGUgLmMgZmlsZXMKLSAgICAtIGRvY3VtZW50IHN0cnVjdHMsIHR5cGVkZWZzLCBlbnVtcyBpbiB0aGUgLmggZmlsZXMKLQotKiBjaGVja2xpc3Q6Ci0gIC0gbWFrZSBzdXJlICotc2VjdGlvbnMudHh0IGhhcyBhIDxUSVRMRT4gc2V0IGZvciBlYWNoIDxGSUxFPgotICAtIGFkZCBvbmx5ICpvbmUqIDxUSVRMRT4gdG8gZWFjaCBmaWxlLCB3aGVuIHlvdSBoYXZlIG11bHRpcGxlIGNsYXNzZXMgaW4gb25lCi0gICAgc291cmNlLWZpbGUsIGNyZWF0ZSBvbmUgPEZJTEU+IHNlY3Rpb24gZm9yIGVhY2ggY2xhc3MKLSAgLSB0aGUgPFRJVExFPiAqbXVzdCogYmUgbmFtZWQgbGlrZSB0aGUgdHlwZSBvZiB0aGUgR1R5cGUsIHdoZW4gaXQgZ2V0cwotICAgIHJlZ2lzdGVyZWQgKG90aGVyd2lzZSBndGtkb2MgaW50cm9zcGVjdGlvbiBmYWlscykKLSAgLSBmb3IgY2xhcml0eSBuYW1lIHRoZSA8RklMRT4gbGlrZSB0aGUgPFRJVExFPiwgYnV0IGFsbCBsb3dlcmNhc2UKLQotKiB3aGF0IHRvIGRvIHdoZW4gdHJ5aW5nIHRvIGltcHJvdmUgdGhlIGRvY3MKLSAgLSBjb21wYXJlIHRoZSBvdXRwdXQgb2YKLSAgICBncmVwICJfZ2V0X3R5cGUiIGdzdHJlYW1lci1zZWN0aW9ucy50eHQgfCBzb3J0Ci0gICAgd2l0aCB0aGUgdHlwZXMgaW4gWFhYLnR5cGVzIHRvIGRldGVjdCBlbnRyaWVzIHRoYXQKLSAgICBhcmUgbWF5YmUgbWlzc2luZwotICAtIGd0ayBkb2NzIGRvZXMgbm90IHdhcm5zIGFib3V0IGVtcHR5IG1lbWJlciBkb2NzISwgcnVuCi0gICAgZmluZCAuIC1uYW1lICIqLltjLGhdIiAtZXhlYyBlZ3JlcCAtSG4gIl4gK1wqICtALio6ICokIiB7fSBcOwotICAgIGluIHRoZSBwcm9qZWN0IHJvb3QgdG8gZmluZCB0aGVtCi0gIC0gZ3RrIGRvY3MgZG9lcyBub3Qgd2FybnMgYWJvdXQgZW1wdHkgUmV0dXJuczogZG9jcyEsIHJ1bgotICAgIGZpbmQgLiAtbmFtZSAiKi5bYyxoXSIgLWV4ZWMgZWdyZXAgLUhuICJeICtcKiArQFJldHVybnM6ICokIiB7fSBcOwotICAgIGluIHRoZSBwcm9qZWN0IHJvb3QgdG8gZmluZCB0aGVtCi0KLSogd2hhdCBoYXBwZW5zIGR1cmluZyBhIGd0ay1kb2MgYnVpbGQgPwotICAtIFNjYW4gc3RlcDoKLSAgICAtIGJhc2VkIG9uIGEgJChNT0RVTEUpLnR5cGVzIGZpbGU6Ci0gICAgICAtIGd0a2RvYy1zY2FuZ29iaiBjcmVhdGVzIGEgZ3RrZG9jLXNjYW4gYmluYXJ5Ci0gICAgICAgIC0gdXNpbmcgQ0MsIExELCBDRkxBR1MsIExERkxBR1MgZW52IHZhcgotICAgICAgICAtIHVzaW5nIC0tdHlwZS1pbml0LWZ1bmMgYW5kIC0tbW9kdWxlIHBhcmFtZXRlcnMKLSAgICAgICAgLSBndGtkb2Mtc2NhbiBjcmVhdGVzCi0gICAgICAgICAgLSAkTU9EVUxFLnNpZ25hbHMubmV3Ci0gICAgICAgICAgLSAkTU9EVUxFLmhpZXJhcmNoeS5uZXcKLSAgICAgICAgICAtICRNT0RVTEUuaW50ZXJmYWNlcy5uZXcKLSAgICAgICAgICAtICRNT0RVTEUucHJlcmVxdWlzaXRlcy5uZXcKLSAgICAgICAgICAtICRNT0RVTEUuYXJncy5uZXcKLSAgICAgICAgLSBnZW5lcmF0ZWQgc291cmNlIGFuZCBvYmplY3RzIGdldCBkZWxldGVkCi0gICAgICAgIC0gZ3RrZG9jLXNjYW5nb2JqIG1lcmdlcyBjaGFuZ2VzIGludG8gdGhlIG9yaWdpbmFsIGZpbGVzCi0gICAgLSBndGtkb2Mtc2NhbgotICAgICAgLSBleHRyYWN0cyBkZWNscyBvZiBmdW5jdGlvbnMsIG1hY3JvcywgZW51bXMsIHN0cnVjdHMsIHVuaW9ucyBmcm9tIGhlYWRlcnMKLSAgICAgIC0gZ2VuZXJhdGVzCi0gICAgICAgIC0gJE1PRFVMRS1kZWNsLnR4dAotICAgICAgICAtICRNT0RVTEUtZGVjbC1saXN0LnR4dAotICAgICAgLSAkTU9EVUxFLWRlY2wtbGlzdC50eHQgdGhlbiBzaG91bGQgZ2V0IGNvcGllZCB0byAkTU9EVUxFLXNlY3Rpb25zLnR4dAotICAgIC0gc2Nhbi1idWlsZC5zdGFtcCBnZXRzIGNyZWF0ZWQKLSAgCi0gIC0gVGVtcGxhdGUgZ2VuZXJhdGlvbiBzdGVwOgotICAgIC0gZ3RrZG9jLW1rdG1wbCAtLW1vZHVsZT0kTU9EVUxFCi0gICAgICAtIHJlYWRzIGluIHRtcGwvKi5zZ21sCi0gICAgICAtIG1vdmVzIHRoZW0gdG8gdG1wbC8qLnNnbWwuYmFrCi0gICAgICAtIHJlY3JlYXRlcyB0bXBsLyouc2dtbCBhY2NvcmRpbmcgdG8gJE1PRFVMRS1zZWN0aW9ucy50eHQKLSAgICAgIC0gbW92ZXMgdW51c2VkIHN0dWZmIHRvICRNT0RVTEUtdW51c2VkLnR4dAotICAgIC0gdG1wbC1idWlsZC5zdGFtcCBnZXRzIGdlbmVyYXRlZAotCi0qIFBvc3NpYmxlIGVycm9ycyBhbmQgaG93IHRvIGZpeCB0aGVtCi0gIC0gV2FybmluZzogbXVsdGlwbGUgIklEcyIgZm9yIGNvbnN0cmFpbnQgbGlua2VuZDogZ3N0LXRhZy1yZWdpc3Rlci4KLSAgICAtIGNoZWNrIGlmIGdzdF90YWdfcmVnaXN0ZXIgaXMgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluIC1zZWN0aW9ucy50eHQKLQotU1RZTEUgR1VJREUgRk9SIEdUSy1ET0MKLT09PT09PT09PT09PT09PT09PT09PT09Ci0tIHRoaXMgaXMgaW4gYWRkaXRpb24gdG8gZ3RrLWRvYydzIHN0eWxlLWd1aWRlLnR4dAotCi0tIHdoZW4gZG9jdW1lbnRpbmcgc2lnbmFscywgdXNlICJ0aGUgI0dzdC4uLiIgZm9yIHRoZSBvYmplY3QgcmVjZWl2aW5nIHRoZQotICBzaWduYWw7IG5vIHRyYWlsaW5nIGRvdCwgYW5kIG5vICJ0aGF0IHJlY2VpdmVkIHRoZSBzaWduYWwiCi0tIGZ1bmN0aW9uL21hY3JvIGRlc2NyaXB0aW9ucyBhcmUgZGVzY3JpcHRpdmUsIG5vdCBpbXBlcmF0aXZlCi0gIGllLCBpdCB1c2VzIHRoZSB0aGlyZCBwZXJzb24gdmVyYgotLSBzeW5vcHNpcyBhbmQgZGVzY3JpcHRpb24gc2hvdWxkIGhhdmUgbW9zdC11c2VkL2FwcGxpY2F0aW9uIGZ1bmN0aW9ucyBhdCB0aGUKLSAgdG9wCi0tIGZ1bmN0aW9ucyB0aGF0IGNhbiByZXR1cm4gRkFMU0UvTlVMTCBvciBmYWlsIHNob3VsZCBkZXNjcmliZSB0aGVpciBmYWlsdXJlCi0gIGNvbmRpdGlvbnMgbGlrZSB0aGlzOgotICAqIFJldHVybnMgTlVMTCBpZiBubyBlbGVtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgZm91bmQgaW4gdGhlIGJpbiwgaWYKLSAgKiB0aGUgZnJvYmJsZSB3YXMgc3R1Y2sgaW4gdGhlIGZyb29iLCBvciB0aGUgZnJpenpsZSB3YXMgZnJhenplZC4KLS0gYSBsaW5lIHdpdGggZnVuY3Rpb24gYXR0cmlidXRlcyBzaG91bGQgYmUgYWRkZWQgYmVmb3JlIFJldHVybnM6Ci0gIC0gY2FuIGNvbnRhaW46Ci0gICAgIk1UIHNhZmUuIiAtIHRoZSBmdW5jdGlvbiBpcyB2ZXJpZmllZCB0byBiZSBtdWx0aXRocmVhZGluZ3NhZmUKLSAgICAiQ2FsbGVyIG93bnMgcmV0dXJuZWQgcmVmZXJlbmNlIiBmb3IgcmVmY291bnRlZCBjbGFzc2VzCi0gICAgIkNhbGxlciBvd25zIHJldHVybmVkIHZhbHVlIiBmb3Igb3RoZXIgdHlwZXMgKGl0ZXJhdG9ycywgLi4pCi0gIC0gd2UgZG8gdGhpcyBiZWNhdXNlLCBpbiBjb250cmFzdCB3aXRoIEdMaWIvR1RLLCB3ZSBhcmUgbW9yZSBleHBsaWNpdAotICAgIGFib3V0IHRocmVhZHNhZmV0eSBhbmQgcmVsYXRlZCBpc3N1ZXMKLS0gbGluayB0byBzaWduYWxzIGZyb20gdGhlIGRlc2NyaXB0aW9uIGxpa2UgdGhpczoKLSAgKiBUaGUgPGxpbmsgbGlua2VuZD0iR3N0QmluLWVsZW1lbnQtYWRkZWQiPmVsZW1lbnQtYWRkZWQ8L2xpbms+IHNpZ25hbAotCi1XRUJTSVRFIERPQ1VNRU5UQVRJT04KLT09PT09PT09PT09PT09PT09PT09PQotCi1VcGRhdGluZyB0aGUgb25saW5lIGRvY3VtZW50YXRpb24gaXMgcHJldHR5IHNpbXBsZS4KLU1ha2Ugc3VyZSB0aGF0IHlvdQotYSkgaGF2ZSBhIHdvcmtpbmcgZnJlZWRlc2t0b3Aub3JnIGFjY291bnQKLWIpICRIT01FLy5zc2gvY29uZmlnIHNldCB1cCBzbyB0aGF0IGl0IGhhcyB0aGUgcmlnaHQgVXNlciBmb3IgdGhlIEhvc3QKLSAgIChmb3IgZXhhbXBsZSwgSSBoYXZlOgotSG9zdCBmcmVlZGVza3RvcC5vcmcKLSAgVXNlciB0aG9tYXN2cwotYykgdmVyaWZ5IHRoaXMgd29ya3MgYnkgZG9pbmcgc3NoIGZyZWVkZXNrdG9wLm9yZyBhbmQgYmVpbmcgbG9nZ2VkIGluIHdpdGhvdXQKLSAgIGEgcGFzc3dvcmQgcHJvbXB0Ci1kKSBoYXZlIHZlcmlmaWVkIHlvdXIgY2hhbmdlcyBidWlsZCBkb2N1bWVudGF0aW9uIGxvY2FsbHkuCi0KLVRoZW4sIGFmdGVyIHVwZGF0aW5nIGFueSBvZiB0aGUgZG9jcywgcnVuICJtYWtlIHVwbG9hZCIgZnJvbSB0aGF0IGRpcmVjdG9yeS4KLU9yLCBydW4gIm1ha2UgdXBsb2FkIiBmcm9tIHRoaXMgKGRvY3MpIGRpcmVjdG9yeS4KLQotRE9DVU1FTlRJTkcgRUxFTUVOVFMKLT09PT09PT09PT09PT09PT09PT09Ci1BcyBvZiBzZXB0ZW1iZXIgMjAwNSB3ZSBoYXZlIHNvbWUgc3lzdGVtIHRvIGRvY3VtZW50IHBsdWdpbnMgYW5kIGVsZW1lbnRzCi1pbiB0aGUgdmFyaW91cyBwbHVnaW4gcGFja2FnZXMuCi0KLS0gaW4gYSBzdWJtb2R1bGUsIGRvY3MgZ28gaW4gZG9jcy9wbHVnaW5zCi0tIHRlbXBsYXRlIGNhbiBiZSBjb3BpZWQgZnJvbSBnc3QtcGx1Z2lucy1iYXNlCi0tIHRvIGFkZCBwbHVnaW5zIGRvY3VtZW50YXRpb246Ci0gIC0gY3JlYXRlIGRvY3MvcGx1Z2lucwotICAtIGNyZWF0ZSBNYWtlZmlsZS5hbSBhbmQgZnJpZW5kcywgYWRkIHRvIGNvbmZpZ3VyZS5hYwotICAtIGNyZWF0ZSBkb2NzL3ZlcnNpb24uZW50aXRpZXMuaW4sIGFkZCB0byBjb25maWd1cmUuYWMKLSAgLSBpbiBkb2NzL3BsdWdpbnM6Ci0gICAgLSBjcmVhdGUgJChtb2R1bGUpLXBsdWdpbnMudHlwZXMgd2l0aCAjaW5jbHVkZSA8Z3N0L2dzdC5oPgotICAgIC0gcnVuIG1ha2UKLSAgICAtIGVkaXQgdGhlIC1kb2NzLnNnbWwKLSAgICAtIGFkZCB0byBjdnM6Ci0gICAgICBjdnMgYWRkICotcGx1Z2lucy1kb2NzLnNnbWwgKi1wbHVnaW5zLmFyZ3MgKi1wbHVnaW5zLmhpZXJhcmNoeSAqLXBsdWdpbnMuaW50ZXJmYWNlcyAqLXBsdWdpbnMucHJlcmVxdWlzaXRlcyAqLXBsdWdpbnMuc2lnbmFscyAqLXBsdWdpbnMudHlwZXMgaW5zcGVjdC1idWlsZC5zdGFtcCBpbnNwZWN0LnN0YW1wIHNjYW5vYmotYnVpbGQuc3RhbXAKLSAgICAgIGN2cyBhZGQgaW5zcGVjdAotICAgICAgY3ZzIGFkZCBpbnNwZWN0LyoueG1sCi0gICAgLSBBZGRpdGlvbmFsIHR5cGVzIGNhbiBiZSBhZGRlZCB0byB0aGUgZG9jdW1lbnRhdGlvbiBieSBwbGFjaW5nIHRoZW0gaW4KLSAgICAgIHRoZSAudHlwZXMgZmlsZSBsaWtlIHRoaXM6Ci0gICAgICAgIHR5cGU6R3N0UGxheUJhc2VCaW4KLSAgICAgIFRoaXMgaXMgdXNlZnVsIGZvciBkb2N1bWVudGluZyBwbHVnaW4tcHJpdmF0ZSB0eXBlcyB0aGF0IGltcGxlbWVudAotICAgICAgc2lnbmFscyBvciBwcm9wZXJ0aWVzLiBUaGUgR1R5cGUgaXMgbG9va2VkIHVwIGJ5IG5hbWUgYWZ0ZXIgYWxsIHRoZQotICAgICAgZWxlbWVudCBjbGFzc2VzIGhhdmUgYmVlbiBwcmludGVkIC0gc28gdGhpcyBpcyBvbmx5IHVzZWZ1bCBmb3IgdHlwZXMKLSAgICAgIHRoYXQgYXJlIGNyZWF0ZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiBsb2FkaW5nIHBsdWdpbnMgYW5kIHJlZ2lzdGVyaW5nCi0gICAgICB0aGUgZWxlbWVudChzKS4KLQotLSB0byBhZGQgYSBwbHVnaW4gdG8gYmUgZG9jdW1lbnRlZDoKLSAgLSBtYWtlIHN1cmUgaW5zcGVjdC8gaGFzIGdlbmVyYXRlZCBhIGluc3BlY3QvcGx1Z2luLXh4eC54bWwgZmlsZSBmb3IgaXQuCi0gICAgLSBpZiBpdCBoYXMgbm90LCBtYWtlIHN1cmUgeW91IGhhdmUgcHlnc3QgaW5zdGFsbGVkIGFuZCBydW4gJ21ha2UgdXBkYXRlJy4KLSAgICAgIGFuZCBhZGQgaXQgdG8gQ1ZTLgotICAtIGFkZCBhbiB4aTppbmNsdWRlIGluIC1kb2NzLnNnbWwgaW4gdGhlIFBsdWdpbnMgY2hhcHRlciBmb3IgdGhhdCBwbHVnaW4KLQotLSB0byBhZGQgYW4gZWxlbWVudCB0byBiZSBkb2N1bWVudGVkOgotICAtIGFkZCBhbiB4aTppbmNsdWRlIGluIHRoZSBFbGVtZW50cyBjaGFwdGVyIGZvciB0aGUgZWxlbWVudAotICAgIGluIHRoZSBtYWluIC1kb2NzLnNnbWwKLSAgLSBhZGQgYSBzZWN0aW9uIGZvciBpdCBpbiAtc2VjdGlvbnMudHh0IHdpdGgKLSAgICAgIDxTRUNUSU9OPgotICAgICAgPEZJTEU+ZWxlbWVudC0oZWxlbWVudCk8L0ZJTEU+Ci0gICAgICA8VElUTEU+KGVsZW1lbnQpPC9USVRMRT4KLSAgICAgIEdzdFh4eAotICAgICAgPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci0gICAgICBHc3RYeHhDbGFzcwotICAgICAgR1NUX1hYWAotICAgICAgR1NUX1hYWF9DTEFTUwotICAgICAgR1NUX0lTX1hYWAotICAgICAgR1NUX0lTX1hYWF9DTEFTUwotICAgICAgR1NUX1RZUEVfWFhYCi0gICAgICBnc3RfeHh4X2dldF90eXBlCi0gICAgICA8L1NFQ1RJT04+Ci0gIC0gYWRkIGEgZ3RrLWRvYyBzZWN0aW9uIHRvIHRoZSBzb3VyY2UgY29kZSBsaWtlOgotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtbXVsdGlmZHNpbmsKLQotICBhbmQgZmlsbCBpdCB3aXRoIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGVsZW1lbnQsIHByZWZlcmFibHkgaW5zaWRlCi0gIGEgPHJlZnNlY3QyPiBkb2Nib29rIGNvbnRhaW5lci4KLSAgLSBhZGQgYW4gZXhhbXBsZToKLSAgICAtIGVpdGhlciBhIGZldyBwaXBlbGluZXMsIGluc2lkZSA8cHJvZ3JhbWxpc3Rpbmc+Ci0gICAgLSBvciBhIHBpZWNlIG9mIGNvZGU6Ci0gICAgICAtIGNyZWF0ZSBhbiBleGFtcGxlIHByb2dyYW0gKGVsZW1lbnQpLWV4YW1wbGUuYyBpbiB0aGUgcGx1Z2luIGRpcgotICAgICAgLSBhZGQgdGhlIGZ1bGwgcGF0aCAoc3RhcnRpbmcgd2l0aCAkKHRvcF9zcmNkaXIpKSBmb3IgdGhpcyBleGFtcGxlCi0gICAgICAgIHRvIHRoZSBFWEFNUExFX0NGSUxFUyB2YXJpYWJsZSBpbiBNYWtlZmlsZS5hbQotICAgICAgLSBhZGQgYW4geGluY2x1ZGUgb2YgYSBmaWxlIG5hbWVkICJlbGVtZW50LShlbGVtZW50KS1leGFtcGxlLnhtbCIKLSAgICAgICAgdG8gdGhlIGRvY2Jvb2sgZG9jdW1lbnRhdGlvbiBwaWVjZSBpbiB0aGUgZWxlbWVudCBzb3VyY2UgY29kZQotICAtIGFkZCB0aGUgaGVhZGVyIHRvIEVYVFJBX0hGSUxFUyBpbiBNYWtlZmlsZS5hbSB0byBiZSBhYmxlIHRvIGRvY3VtZW50Ci0gICAgc2lnbmFscyBhbmQgYXJnczsgaW4gdGhhdCBjYXNlLCB0aGUgb2JqZWN0IHN0cnVjdCBuZWVkcyB0byBiZSBpbgotICAgIC1zZWN0aW9ucy50eHQgb3V0c2lkZSBvZiB0aGUgU3RhbmRhcmQgU3Vic2VjdGlvbiAod2hpY2ggaXMgYW5ub3lpbmcsCi0gICAgYnV0IC4uLikKLSAgICAoRklYTUU6IGFyZSB3ZSBzdXJlIHdlIGNhbiBib3RoIGRvIHRoZSB4aW5jbHVkZSBmcm9tIHRoZSB0bXBsLyBzZ21sLAotICAgICBhcyB3ZWxsIGFzIGFuIG92ZXJyaWRlIGZyb20gdGhlIHNvdXJjZSBpdHNlbGYgPyBtYXliZSB3ZSBzaG91bGQganVzdAotICAgICBtYWtlIHN1cmUgdGhlIHhpbmNsdWRlIGlzIGluIHRoZSBzb3VyY2UgaXRzZWxmIGluc3RlYWQgPykKLSAgLSBpZiB0aGUgcGx1Z2luIGhhcyBubyBwdWJsaWMgaGVhZGVyLCBkb24ndCBhZGQgdGhlIGMtZmlsZSwgYWRkIGVudHJpZXMgdG8gdGhlCi0gICAgLW92ZXJyaWRlcy50eHQgZmlsZSAoc2VlIHBsYXliaW4gZG9jcyBpbiBwbHVnaW5zLWJhc2UpLgotICAtIHRvIHJlYnVpbGQgdGhlIGRvY3MsIGRvOgotICAgIG1ha2UgY2xlYW4KLSAgICBtYWtlIHVwZGF0ZQotICAgIG1ha2UKLSAgLSBleGFtcGxlcyB3aWxsIG9ubHkgc2hvdyB1cCB1c2luZyBndGstZG9jIDEuNCBvciBsYXRlciAtIGl0IHJlbGllcyBvbgotICAgIG1lcmdpbmcgc3R1ZmYgZnJvbSAuc2dtbCB3aXRoIGlubGluZSBkb2NzLiAgV2UgbWlnaHQgd2FudCB0byBjaGFuZ2UKLSAgICB0aGlzIHRvIG9ubHkgZ2V0IHN0dWZmIGZyb20gdGhlIHNvdXJjZS4KLSAgLSB5b3UgbmVlZCB0byBjb21taXQgcmVzdWx0aW5nIGZpbGVzIHRvIGdpdDoKLSAgICAtIGNoYW5nZXMgdG8gKi5zaWduYWxzIGFuZCAqLmFyZ3MKLSAgICAtIG5ldyBmaWxlcyBmb3IgeW91ciBwbHVnaW4gY3JlYXRlZCBpbiBpbnNwZWN0LwotICAtIGlmIHlvdSBnZXQgdGhpcyB3YXJuaW5nOgotICAgICIgRG9jdW1lbnRhdGlvbiBpbiB0ZW1wbGF0ZSB4eHggZm9yIC4vdG1wbC9lbGVtZW50LXl5eTpTaG9ydF9EZXNjcmlwdGlvbgotICAgICAgYmVpbmcgb3ZlcnJpZGRlbiBieSBpbmxpbmUgY29tbWVudHMiCi0gICAgcGVyLWRlZmF1bHQgdGhlIGRlc2NyaXB0aW9uIGZyb20gdGhlIEdTVF9FTEVNRU5UX0RFVEFJTFMgaXMgcHV0IHRvIHRoZQotICAgIFNob3J0X0Rlc2NyaXB0aW9uLiBUaGlzIHdhcm5pbmcgbWVhbiB5b3UgaGF2ZSBhIGRpZmZlcmVudCBvbmUgaW4gdGhlIHNlY3Rpb24KLSAgICBkb2NzIGFzICJAc2hvcnRfZGVzY3JpcHRpb246Ii4KLQotLSB0aGUgcGx1Z2luLWRvYy1saXN0IG9uIHRoZSBnc3RyZWFtZXIgaG9tZXBhZ2UgaXMgdXBkYXRlZCBhbG9uZyB3aXRoIG90aGVyCi0gIHdlYiBzaXRlIHVwZGF0ZXMuCi0KLS0gbWFpbnRhaW5lciB0cmlja3M6Ci0gIC0gaW4gZ3N0LXBsdWdpbnMtZm9vL2RvY3MvcGx1Z2lucy8sIHJ1bgotICAgICAgICBtYWtlIGNoZWNrLWluc3BlY3RlZC12ZXJzaW9ucwotICAgIHRvIHNob3cgcGx1Z2lucyB3aG9zZSBpbnNwZWN0IGluZm9ybWF0aW9uIGlzIG5vdCB1cC10by1kYXRlICh3aGljaCBpcwotICAgIHVzdWFsbHkgZWl0aGVyIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4gbW92ZWQgdG8gYSBkaWZmZXJlbnQgbW9kdWxlIG9yCi0gICAgYmVjYXVzZSB0aGV5IGFyZSBub3QgYnVpbHQgb24gdGhlIG1haW50YWluZXIncyBtYWNoaW5lIGZvciBzb21lIHJlYXNvbikuCi0gICAgV2hldGhlciBpdCByZWFsbHkgbWFrZXMgc2Vuc2UgdG8gdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlciBpcyBkZWJhdGFibGUKLSAgICAoYWZ0ZXIgYWxsLCB0aGUgaW5zcGVjdGVkIGluZm9ybWF0aW9uIG1heSBiZSBvdXRkYXRlZCBhbmQgdGhpbmdzIG1heSBoYXZlCi0gICAgY2hhbmdlZCwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZCBiZSBiYWQgdG8gY2hhbmdlIHRoZSB2ZXJzaW9uIG51bWJlcikKLSAgLSBmaW5kIGZpbGVzIHRoYXQgaGF2ZSBkb2NzCi0gICAgZm9yIGZpbGUgaW4gYGZpbmQgLiAtbmFtZSAiKi5jIiAtZXhlYyBncmVwIC1sICIgKiBTRUNUSU9OOmVsZW1lbnQtIiB7fSBcOyB8IHNvcnRgOyBkbyBpZiBbIC1lICR7ZmlsZS8uYy8uaH0gXTsgdGhlbiBlY2hvICR7ZmlsZS8uYy8uaH07IGVsc2UgZWNobyAibm8gaGVhZGVyIGZvciAkZmlsZSI7IGZpOyBkb25lCi0gICAgZm9yIGZpbGUgaW4gYGZpbmQgLiAtbmFtZSAiKi5jYyIgLWV4ZWMgZ3JlcCAtbCAiICogU0VDVElPTjplbGVtZW50LSIge30gXDsgfCBzb3J0YDsgZG8gaWYgWyAtZSAke2ZpbGUvLmNjLy5ofSBdOyB0aGVuIGVjaG8gJHtmaWxlLy5jYy8uaH07IGVsc2UgZWNobyAibm8gaGVhZGVyIGZvciAkZmlsZSI7IGZpOyBkb25lCi0gICAgLSBhZGQgdGhvc2UgLmggZmlsZXMgdG8gRVhUUkFfSEZJTEVTIGluIE1ha2VmaWxlLmFtCi0gIC0gdXBkYXRlIGdzdC1wbHVnaW5zLXh4eC1kb2NzLnNnbWwKLSAgICBjZCBkb2NzL3BsdWdpbnMKLSAgICBscyAtMSB4bWwvcGx1Z2luLSoueG1sIHwgc29ydCB8IHNlZCAtZSAicy9cKC4qXCkvICAgIFw8eGk6aW5jbHVkZSBocmVmPVwiXDFcIiBcL1w+LyIKLSAgICBscyAtMSB4bWwvZWxlbWVudC0qLnhtbCB8IGdyZXAgLXYgLS0gIi1kZXRhaWxzLnhtbCIgfCBzb3J0IHwgc2VkIC1lICJzL1woLipcKS8gICAgXDx4aTppbmNsdWRlIGhyZWY9XCJcMVwiIFwvXD4vIgotICAgIC0gbWF5YmUgd2UgY2FuIGdlbmVyYXRlIHRoZXNlIGxpc3RzIGFmdGVyICJtYWtlIHVwZGF0ZSIgYW5kIGp1c3QgeGk6aW5jbHVkZQotICAgICAgdGhlbSBpbiBnc3QtcGx1Z2lucy14eHgtZG9jcy5zZ21sLiBUaGV5IHNob3VsZCBiZSBjb21taXR0ZWQgdG8gdGhlIHZjcy4KLQotLSBwb3NzaWJsZSBlcnJvcnM6Ci0gIC0gIm11bHRpcGxlIGNvbnN0cmFpbnRzIGZvciBsaW5rZW5kIElEIjoKLSAgICBjaGVjayBpZiBlYWNoIHNlY3Rpb24gaW4gLXNlY3Rpb25zLnR4dCBhY3R1YWxseSBzdGFydHMgYW5kIGVuZHMgd2l0aAotICAgIDxTRUNUSU9OPiBhbmQgPC9TRUNUSU9OPgotICAtIGlmIGEgcGx1Z2luIGRvZXMgbm90IHNob3cgdXA6Ci0gICAgLSBjaGVjayBpbnNwZWN0L3BsdWdpbi14eHgueG1sIGFuZCB0bXBsL2VsZW1lbnRzLQotCi1SQU5ET00gVEhJTkdTIEknVkUgTEVBUk5FRAotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBmb3IgY2xlYW4gYnVpbGRkaXIgIT0gc3JjZGlyIHNlcGFyYXRpb24sIEkgd2FudGVkIHRvIHVzZSB4bWx0byAtLXNlYXJjaHBhdGgKLSAgc28gdGhlIHNvdXJjZSB4bWwgY291bGQgZmluZCB0aGUgYnVpbHQgZW50aXR5IGZpbGUuCi0gIEJ1dCB4bWx0byAtLXNlYXJjaHBhdGggaXMgKHJpZ2h0IG5vdykgZm9yIFRlWCBpbnB1dCwgbm90IHhtbCBpbnB1dC4KLSAgeHNsdHByb2MgaGFzIGEgLS1wYXRoIG9wdGlvbiAodGhhdCB4bWx0byBkb2Vzbid0IHVzZSB5ZXQpLCBidXQgaXQKLSAgcmVzb2x2ZXMgc2luZ2xlIGZpbGVzIHRvICQoc3BlY2lmaWVkX3BhdGgpLyQoc3JjZGlyKS8kKGZpbGUpCi0gIEZvciBub3csIHdlIG5lZWQgdG8gaGFjayBhcm91bmQgaXQgYnkgY29weWluZyB4bWwgdG8gdGhlIGJ1aWxkIGRpci4KLQotCi0ob2xkKSBET0NVTUVOVEFUSU9OIEJVSUxESU5HIE5PVEVTCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIGJ1aWxkIHRoZSBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbiB5b3UgbmVlZCB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCAoYmFzZWQgb24KLVJlZCBIYXQgcGFja2FnZXMpLiAgVGhlc2UgcGFja2FnZXMgY29tZXMgZnJvbSByYXdoaWRlIGFuZCBhcmUgdGhlIG9uZXMgdGhhdAotd2lsbCBiZSBpbiBSZWQgSGF0IDcuMy84LjAKLQotRG9jYm9vayBzdHVmZjoKLXNnbWwtY29tbW9uIAoteG1sLWNvbW1vbiAKLW9wZW5qYWRlIChuZWVkcyB0byBiZSByZWJ1aWx0IGZyb20gU1JQTSBmb3IgUmVkIEhhdCA3LjIpCi10ZXRleC1kdmlwcwotamFkZXRleAotZG9jYm9vay1kdGRzICAgICAgCi1kb2Nib29rLXN0eWxlLWRzc3NsIAotZG9jYm9vay1zdHlsZS14c2wKLWRvY2Jvb2stdXRpbHMKLQotWE1MIHN0dWZmOgotbGlieG1sMgotbGlieG1sMi1weXRob24KLWxpYnhtbDItZGV2ZWwKLWxpYnhzbHQKLWxpYnhzbHQtZGV2ZWwKLWxpYnhzbHQtcHl0aG9uCi0KLQotCi1HdGtkb2M6Ci1ndGstZG9jCi0KLU90aGVyIHN0dWZmOgotcGRmdG9wcwotCi1ERVZIRUxQIElOVEVHUkFUSU9OCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DaGVjayBodHRwOi8vd3d3LmltZW5kaW8uY29tL3Byb2plY3RzL2RldmhlbHAvCi1JdCdzIGEgcmVhbGx5IG5pY2UgZGV2ZWxvcG1lbnQgYXBwIGFsbG93aW5nIHlvdSB0byBsb29rIHVwIEFQSSBzdHVmZgotZnJvbSB2YXJpb3VzIGd0ay1kb2MnZCBsaWJyYXJpZXMuICBHU3RyZWFtZXIgaXMgb25lIG9mIHRoZXNlIDspCi0KLWd0ay1kb2MgZ2VuZXJhdGVzIGJvdGggaHRtbCBBUEkgZG9jcyBhbmQgdGhlIG1hdGNoaW5nIC5kZXZoZWxwKDIpIGJvb2tzLgotCi1JTUFHRVMKLS0tLS0tLQotSXQncyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgc291cmNlIGZvcm1hdCBmb3IgaW1hZ2VzLCB0byBiZSBhYmxlCi10byBjaGFuZ2UgYW5kIHJlZ2VuZXJhdGUgbGF0ZXIgb24uICBPcmlnaW5hbCBmaWxlcyBnbyBpbgotZG9jcy9pbWFnZXMKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL01ha2VmaWxlLmFtIGIvZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MTA5YzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0KLUVYVFJBX0RJU1QgPSBcCi0JZHJhZnQta2xhc3MudHh0IFwKLQlkcmFmdC1tZXRhZGF0YS50eHQgXAotCWRyYWZ0LXB1c2gtcHVsbC50eHQgXAotCWRyYWZ0LXRhZ3JlYWRpbmcudHh0IFwKLQlwYXJ0LWFjdGl2YXRpb24udHh0IFwKLQlwYXJ0LWJ1ZmZlcmluZy50eHQgXAotCXBhcnQtYnVmZmVycG9vbC50eHQgXAotCXBhcnQtYnVmZmVyLnR4dCBcCi0JcGFydC1jYXBzLnR4dCBcCi0JcGFydC1jbG9ja3MudHh0IFwKLQlwYXJ0LWNvbnRleHQudHh0IFwKLQlwYXJ0LWNvbnRyb2xsZXIudHh0IFwKLQlwYXJ0LWNvbnZlbnRpb25zLnR4dCBcCi0JcGFydC1keW5hbWljLnR4dCBcCi0JcGFydC1lbGVtZW50LXNpbmsudHh0IFwKLQlwYXJ0LWVsZW1lbnQtc291cmNlLnR4dCBcCi0JcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQgXAotCXBhcnQtZXZlbnRzLnR4dCBcCi0JcGFydC1mcmFtZXN0ZXAudHh0IFwKLQlwYXJ0LWdzdGJpbi50eHQgXAotCXBhcnQtZ3N0YnVzLnR4dCBcCi0JcGFydC1nc3RlbGVtZW50LnR4dCBcCi0JcGFydC1nc3RnaG9zdHBhZC50eHQgXAotCXBhcnQtZ3N0b2JqZWN0LnR4dCBcCi0JcGFydC1nc3RwaXBlbGluZS50eHQgXAotCXBhcnQtbGF0ZW5jeS50eHQgXAotCXBhcnQtbGl2ZS1zb3VyY2UudHh0IFwKLQlwYXJ0LW1lbW9yeS50eHQgXAotCXBhcnQtbWVzc2FnZXMudHh0IFwKLQlwYXJ0LW1ldGEudHh0IFwKLQlwYXJ0LW1pbmlvYmplY3QudHh0IFwKLQlwYXJ0LW1pc3NpbmctcGx1Z2lucy50eHQgXAotCXBhcnQtTVQtcmVmY291bnRpbmcudHh0IFwKLQlwYXJ0LW5lZ290aWF0aW9uLnR4dCBcCi0JcGFydC1vdmVydmlldy50eHQgXAotCXBhcnQtcHJlcm9sbC50eHQgXAotCXBhcnQtcHJvYmVzLnR4dCBcCi0JcGFydC1wcm9ncmVzcy50eHQgXAotCXBhcnQtcHVzaC1wdWxsLnR4dCBcCi0JcGFydC1xb3MudHh0IFwKLQlwYXJ0LXF1ZXJ5LnR4dCBcCi0JcGFydC1yZWxhdGlvbnMudHh0IFwKLQlwYXJ0LXNjaGVkdWxpbmcudHh0IFwKLQlwYXJ0LXNlZWtpbmcudHh0IFwKLQlwYXJ0LXNlZ21lbnRzLnR4dCBcCi0JcGFydC1zZXFudW1zLnR4dCBcCi0JcGFydC1zcGFyc2VzdHJlYW1zLnR4dCBcCi0JcGFydC1zdGFuZGFyZHMudHh0IFwKLQlwYXJ0LXN0YXRlcy50eHQgXAotCXBhcnQtc3RyZWFtLXN0YXR1cy50eHQgXAotCXBhcnQtc3RyZWFtcy50eHQgXAotCXBhcnQtc3luY2hyb25pc2F0aW9uLnR4dCBcCi0JcGFydC10b2MudHh0IFwKLQlwYXJ0LVRPRE8udHh0IFwKLQlwYXJ0LXRyYWNpbmcudHh0IFwKLQlwYXJ0LXRyaWNrbW9kZXMudHh0Ci0KLUNMRUFORklMRVMgPSBpbmRleC5odG1sIGluZGV4LnR4dAotCi1odG1sOgotCWlmICEgdGVzdCAteiBgd2hpY2ggYXNjaWlkb2NgOyB0aGVuIFwKLQkgIGVjaG8gPmluZGV4LnR4dCAgIkdTdHJlYW1lciBkZXNpZ24iOyBcCi0JICBlY2hvID4+aW5kZXgudHh0ICI9PT09PT09PT09PT09PT09IjsgXAotCSAgZWNobyA+PmluZGV4LnR4dCAiVGhlIEdzdHJlYW1lciBkZXZlbG9wZXJzIjsgXAotCSAgZWNobyA+PmluZGV4LnR4dCAiVmVyc2lvbiAkKFBBQ0tBR0VfVkVSU0lPTikiOyBcCi0JICBlY2hvID4+aW5kZXgudHh0ICIiOyBcCi0JICAoIGNkICQoc3JjZGlyKSAmJiBcCi0JICBjYXQgPj4kKGFic19idWlsZGRpcikvaW5kZXgudHh0ICQoRVhUUkFfRElTVCkgKTsgXAotCSAgYXNjaWlkb2MgLW8gaW5kZXguaHRtbCBpbmRleC50eHQ7IFwKLQllbHNlIFwKLQkgIGVjaG8gIm5lZWQgYXNjaWlkb2MgdG8gZ2VuZXJhdGUgaHRtbCI7IFwKLSAgICAgICAgZmk7Ci0KLXVwbG9hZDoKLQlAZWNobyBub3RoaW5nIHRvIHVwbG9hZAotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9NYWtlZmlsZS5pbiBiL2RvY3MvZGVzaWduL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmY4YmZhLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNzE5ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZG9jcy9kZXNpZ24KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotRVhUUkFfRElTVCA9IFwKLQlkcmFmdC1rbGFzcy50eHQgXAotCWRyYWZ0LW1ldGFkYXRhLnR4dCBcCi0JZHJhZnQtcHVzaC1wdWxsLnR4dCBcCi0JZHJhZnQtdGFncmVhZGluZy50eHQgXAotCXBhcnQtYWN0aXZhdGlvbi50eHQgXAotCXBhcnQtYnVmZmVyaW5nLnR4dCBcCi0JcGFydC1idWZmZXJwb29sLnR4dCBcCi0JcGFydC1idWZmZXIudHh0IFwKLQlwYXJ0LWNhcHMudHh0IFwKLQlwYXJ0LWNsb2Nrcy50eHQgXAotCXBhcnQtY29udGV4dC50eHQgXAotCXBhcnQtY29udHJvbGxlci50eHQgXAotCXBhcnQtY29udmVudGlvbnMudHh0IFwKLQlwYXJ0LWR5bmFtaWMudHh0IFwKLQlwYXJ0LWVsZW1lbnQtc2luay50eHQgXAotCXBhcnQtZWxlbWVudC1zb3VyY2UudHh0IFwKLQlwYXJ0LWVsZW1lbnQtdHJhbnNmb3JtLnR4dCBcCi0JcGFydC1ldmVudHMudHh0IFwKLQlwYXJ0LWZyYW1lc3RlcC50eHQgXAotCXBhcnQtZ3N0YmluLnR4dCBcCi0JcGFydC1nc3RidXMudHh0IFwKLQlwYXJ0LWdzdGVsZW1lbnQudHh0IFwKLQlwYXJ0LWdzdGdob3N0cGFkLnR4dCBcCi0JcGFydC1nc3RvYmplY3QudHh0IFwKLQlwYXJ0LWdzdHBpcGVsaW5lLnR4dCBcCi0JcGFydC1sYXRlbmN5LnR4dCBcCi0JcGFydC1saXZlLXNvdXJjZS50eHQgXAotCXBhcnQtbWVtb3J5LnR4dCBcCi0JcGFydC1tZXNzYWdlcy50eHQgXAotCXBhcnQtbWV0YS50eHQgXAotCXBhcnQtbWluaW9iamVjdC50eHQgXAotCXBhcnQtbWlzc2luZy1wbHVnaW5zLnR4dCBcCi0JcGFydC1NVC1yZWZjb3VudGluZy50eHQgXAotCXBhcnQtbmVnb3RpYXRpb24udHh0IFwKLQlwYXJ0LW92ZXJ2aWV3LnR4dCBcCi0JcGFydC1wcmVyb2xsLnR4dCBcCi0JcGFydC1wcm9iZXMudHh0IFwKLQlwYXJ0LXByb2dyZXNzLnR4dCBcCi0JcGFydC1wdXNoLXB1bGwudHh0IFwKLQlwYXJ0LXFvcy50eHQgXAotCXBhcnQtcXVlcnkudHh0IFwKLQlwYXJ0LXJlbGF0aW9ucy50eHQgXAotCXBhcnQtc2NoZWR1bGluZy50eHQgXAotCXBhcnQtc2Vla2luZy50eHQgXAotCXBhcnQtc2VnbWVudHMudHh0IFwKLQlwYXJ0LXNlcW51bXMudHh0IFwKLQlwYXJ0LXNwYXJzZXN0cmVhbXMudHh0IFwKLQlwYXJ0LXN0YW5kYXJkcy50eHQgXAotCXBhcnQtc3RhdGVzLnR4dCBcCi0JcGFydC1zdHJlYW0tc3RhdHVzLnR4dCBcCi0JcGFydC1zdHJlYW1zLnR4dCBcCi0JcGFydC1zeW5jaHJvbmlzYXRpb24udHh0IFwKLQlwYXJ0LXRvYy50eHQgXAotCXBhcnQtVE9ETy50eHQgXAotCXBhcnQtdHJhY2luZy50eHQgXAotCXBhcnQtdHJpY2ttb2Rlcy50eHQKLQotQ0xFQU5GSUxFUyA9IGluZGV4Lmh0bWwgaW5kZXgudHh0Ci1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL2Rlc2lnbi9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL2Rlc2lnbi9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLXRhZ3MgVEFHUzoKLQotY3RhZ3MgQ1RBR1M6Ci0KLWNzY29wZSBjc2NvcGVsaXN0OgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotaHRtbDoKLQlpZiAhIHRlc3QgLXogYHdoaWNoIGFzY2lpZG9jYDsgdGhlbiBcCi0JICBlY2hvID5pbmRleC50eHQgICJHU3RyZWFtZXIgZGVzaWduIjsgXAotCSAgZWNobyA+PmluZGV4LnR4dCAiPT09PT09PT09PT09PT09PSI7IFwKLQkgIGVjaG8gPj5pbmRleC50eHQgIlRoZSBHc3RyZWFtZXIgZGV2ZWxvcGVycyI7IFwKLQkgIGVjaG8gPj5pbmRleC50eHQgIlZlcnNpb24gJChQQUNLQUdFX1ZFUlNJT04pIjsgXAotCSAgZWNobyA+PmluZGV4LnR4dCAiIjsgXAotCSAgKCBjZCAkKHNyY2RpcikgJiYgXAotCSAgY2F0ID4+JChhYnNfYnVpbGRkaXIpL2luZGV4LnR4dCAkKEVYVFJBX0RJU1QpICk7IFwKLQkgIGFzY2lpZG9jIC1vIGluZGV4Lmh0bWwgaW5kZXgudHh0OyBcCi0JZWxzZSBcCi0JICBlY2hvICJuZWVkIGFzY2lpZG9jIHRvIGdlbmVyYXRlIGh0bWwiOyBcCi0gICAgICAgIGZpOwotCi11cGxvYWQ6Ci0JQGVjaG8gbm90aGluZyB0byB1cGxvYWQKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0IGIvZG9jcy9kZXNpZ24vZHJhZnQta2xhc3MudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGM0YjI1Li4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL2RyYWZ0LWtsYXNzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi1FbGVtZW50IEtsYXNzIGRlZmluaXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1QdXJwb3NlCi1+fn5+fn5+Ci0KLUFwcGxpY2F0aW9ucyBzaG91bGQgYmUgYWJsZSB0byByZXRyaWV2ZSBlbGVtZW50cyBmcm9tIHRoZSByZWdpc3RyeSBvZiBleGlzdGluZwotZWxlbWVudHMgYmFzZWQgb24gc3BlY2lmaWMgY2FwYWJpbGl0aWVzIG9yIGZlYXR1cmVzIG9mIHRoZSBlbGVtZW50LgotCi1BIHBsYXliYWNrIGFwcGxpY2F0aW9uIG1pZ2h0IHdhbnQgdG8gcmV0cmlldmUgYWxsIHRoZSBlbGVtZW50cyB0aGF0IGNhbiBiZQotdXNlZCBmb3IgdmlzdWFsaXNhdGlvbiwgZm9yIGV4YW1wbGUsIG9yIGEgdmlkZW8gZWRpdG9yIG1pZ2h0IHdhbnQgdG8gc2VsZWN0Ci1hbGwgdmlkZW8gZWZmZWN0IGZpbHRlcnMuCi0KLVRoZSB0b3BpYyBvZiBkZWZpbmluZyB0aGUga2xhc3Mgb2YgZWxlbWVudHMgc2hvdWxkIGJlIGJhc2VkIG9uIHVzZSBjYXNlcy4KLQotQSBsaXN0IG9mIGNsYXNzZXMgdGhhdCBhcmUgdXNlZCBpbiBhIGluc3RhbGxhdGlvbiBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nOgotZ3N0LWluc3BlY3QtMS4wIC1hIHwgZ3JlcCAtaG8gQ2xhc3M6LiogfCBjdXQgLWM4LSB8IHNlZCAicy9cLy9cXG4vZyIgfCBzb3J0IHwgdW5pcQotCi1Qcm9wb3NhbAotfn5+fn5+fn4KLQotVGhlIEdzdEVsZW1lbnREZXRhaWxzIGNvbnRhaW5zIGEgZmllbGQgbmFtZWQga2xhc3MgdGhhdCBpcyBhIHBvaW50ZXIgdG8gYQotc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVsZW1lbnQgdHlwZS4KLQotSW4gdGhpcyBkb2N1bWVudCB3ZSBkZXNjcmliZSB0aGUgZm9ybWF0IGFuZCBjb250ZW50cyBvZiB0aGUgc3RyaW5nLiBFbGVtZW50cwotc2hvdWxkIGFkaGVyZSB0byB0aGlzIHNwZWNpZmljYXRpb24gYWx0aG91Z2ggdGhhdCBpcyBub3QgZW5mb3JjZWQgdG8gYWxsb3cKLWZvciB3aWxkIChhcHBsaWNhdGlvbiBzcGVjaWZpYykgY3VzdG9taXNhdGlvbi4KLQotMSkgc3RyaW5nIGZvcm1hdAotCi0gICAgPGtleXdvcmQ+WycvJzxrZXl3b3JkXSoKLQotICBUaGUgc3RyaW5nIGNvbnNpc3RzIG9mIGFuIF91bm9yZGVyZWRfIGxpc3Qgb2Yga2V5d29yZHMgc2VwYXJhdGVkIHdpdGggYSAnLycKLSAgY2hhcmFjdGVyLiBXaGlsZSB0aGUgLyBzdWdnZXN0cyBhIGhpZXJhcmNoeSwgdGhpcyBpcyBfbm90XyB0aGUgY2FzZS4KLQotMikga2V5d29yZCBjYXRlZ29yaWVzCi0KLSAtIGZ1bmN0aW9uYWwKLQotICAgQ2F0ZWdvcmllcyBhcmUgYmFzZSBvbiBfaW50ZW5kZWQgdXNhZ2VfIG9mIHRoZSBlbGVtZW50LiBTb21lIGVsZW1lbnRzCi0gICBtaWdodCBoYXZlIG90aGVyIHNpZGUtZWZmZWN0cyAoZXNwZWNpYWxseSBmb3IgZmlsZXJzL2VmZmVjdHMpLiBUaGUgcHVycG9zZQotICAgaXMgdG8gbGlzdCBlbm91Z2gga2V5d29yZHMgc28gdGhhdCBhcHBsaWNhdGlvbnMgY2FuIGRvIG1lYW5pbmdmdWwgZmlsdGVyaW5nLAotICAgbm90IHRvIGNvbXBsZXRlbHkgZGVzY3JpYmUgdGhlIGZ1bmN0aW9uYWxpdHksIHRoYXQgaXMgZXhwcmVzc2VkIGluIGNhcHMgZXRjLi4KLQotICAgKiBTb3VyY2UgICAgICAgIDogcHJvZHVjZXMgZGF0YQotICAgKiBTaW5rICAgICAgICAgIDogY29uc3VtZXMgZGF0YQotICAgKiBGaWx0ZXIgICAgICAgIDogZmlsdGVycy90cmFuc2Zvcm1zIGRhdGEsIG5vIG1vZGlmaWNhdGlvbiBvbiB0aGUgZGF0YSBpcwotICAgICAgICAgICAgICAgICAgICAgaW50ZW5kZWQgKGFsdGhvdWdoIGl0IG1pZ2h0IGJlIHVuYXZvaWRhYmxlKS4gVGhlCi0gICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgY2FuIGRlY2lkZSBvbiBpbnB1dCBhbmQgb3V0cHV0IGNhcHMgaW5kZXBlbmRlbnRseQotICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHN0cmVhbSBjb250ZW50cyAoR3N0QmFzZVRyYW5zZm9ybSkuCi0gICAqIEVmZmVjdCAgICAgICAgOiBhcHBsaWVzIGFuIGVmZmVjdCB0byBzb21lIGRhdGEsIGNoYW5nZXMgdG8gZGF0YSBhcmUKLSAgICAgICAgICAgICAgICAgICAgIGludGVuZGVkLiBFeGFtcGxlcyBhcmUgY29sb3JiYWxhbmNlLCB2b2x1bWUuIFRoZXNlCi0gICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyBjYW4gYWxzbyBiZSBpbXBsZW1lbnRlZCB3aXRoIEdzdEJhc2VUcmFuc2Zvcm0uCi0gICAqIERlbXV4ZXIgICAgICAgOiBzcGxpdHMgYXVkaW8sIHZpZGVvLCAuLi4gZnJvbSBhIHN0cmVhbQotICAgKiBNdXhlciAgICAgICAgIDogaW50ZXJsZWF2ZSBhdWRpbywgdmlkZW8sIC4uLiBpbnRvIG9uZSBzdHJlYW0sIHRoaXMgaXMKLSAgICAgICAgICAgICAgICAgICAgIGxpa2UgbWl4aW5nIGJ1dCB3aXRob3V0IGxvc2luZyBvciBkZWdyYWRpbmcgZWFjaCBzZXBhcmF0ZQotICAgICAgICAgICAgICAgICAgICAgaW5wdXQgc3RyZWFtLiBUaGUgcmV2ZXJzZSBvcGVyYXRpb24gaXMgcG9zc2libGUgd2l0aCBhCi0gICAgICAgICAgICAgICAgICAgICBEZW11eGVyIHRoYXQgcmVwcm9kdWNlcyB0aGUgZXhhY3Qgc2FtZSBpbnB1dCBzdHJlYW1zLgotICAgKiBEZWNvZGVyICAgICAgIDogZGVjb2RlcyBlbmNvZGVkIGRhdGEgaW50byBhIHJhdyBmb3JtYXQsIHRoZXJlIGlzIHR5cGljYWxseQotICAgICAgICAgICAgICAgICAgICAgbm8gcmVsYXRpb24gYmV0d2VlbiBpbnB1dCBjYXBzIGFuZCBvdXRwdXQgY2Fwcy4gVGhlIG91dHB1dAotICAgICAgICAgICAgICAgICAgICAgY2FwcyBhcmUgZGVmaW5lZCBpbiB0aGUgc3RyZWFtIGRhdGEuIFRoaXMgc2VwYXJhdGVzIHRoZQotICAgICAgICAgICAgICAgICAgICAgRGVjb2RlciBmcm9tIHRoZSBGaWx0ZXIgYW5kIEVmZmVjdC4KLSAgICogRW5jb2RlciAgICAgICA6IGVuY29kZXMgcmF3IGRhdGEgaW50byBhbiBlbmNvZGVkIGZvcm1hdC4KLSAgICogTWl4ZXIgICAgICAgICA6IGNvbWJpbmUgYXVkaW8sIHZpZGVvLCAuLiB0aGlzIGlzIGxpa2UgbXV4aW5nIGJ1dCB3aXRoCi0gICAgICAgICAgICAgICAgICAgICBhcHBseWluZyBzb21lIGFsZ29yaXRobSBzbyB0aGF0IHRoZSBpbmRpdmlkdWFsIHN0cmVhbXMKLSAgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgZXh0cmFjdGFibGUgYW55bW9yZSwgdGhlcmUgaXMgdGhlcmVmb3JlIG5vCi0gICAgICAgICAgICAgICAgICAgICByZXZlcnNlIG9wZXJhdGlvbiB0byBtaXhpbmcuIChhdWRpbyBtaXhlciwgdmlkZW8gbWl4ZXIsIC4uLikKLSAgICogQ29udmVydGVyICAgICA6IGNvbnZlcnQgYXVkaW8gaW50byB2aWRlbywgdGV4dCB0byBhdWRpbywgLi4uIFRoZSBjb252ZXJ0ZXIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGljYWxseSB3b3JrcyBvbiByYXcgdHlwZXMgb25seS4gVGhlIHNvdXJjZSBtZWRpYSB0eXBlCi0gICAgICAgICAgICAgICAgICAgICBpcyBsaXN0ZWQgZmlyc3QuCi0gICAqIEFuYWx5emVyICAgICAgOiByZXBvcnRzIGFib3V0IHRoZSBzdHJlYW0gY29udGVudHMuCi0gICAqIENvbnRyb2wgICAgICAgOiBjb250cm9scyBzb21lIGFzcGVjdCBvZiBhIGhhcmR3YXJlIGRldmljZQotICAgKiBFeHRyYWN0ZXIgICAgIDogZXh0cmFjdHMgdGFncy9oZWFkZXJzIGZyb20gYSBzdHJlYW0KLSAgICogRm9ybWF0dGVyICAgICA6IGFkZHMgdGFncy9oZWFkZXJzIHRvIGEgc3RyZWFtCi0gICAqIENvbm5lY3RvciAgICAgOiBhbGxvd3MgZm9yIG5ldyBjb25uZWN0aW9ucyBpbiB0aGUgcGlwZWxpbmUuICh0ZWUsIC4uLikKLSAgICogLi4uCi0KLSAtIEJhc2VkIG9uIG1lZGlhIHR5cGUKLQotICAgUHVycG9zZSBpcyB0byBtYWtlIGEgc2VsZWN0aW9uIGZvciBlbGVtZW50cyBvcGVyYXRpbmcgb24gdGhlIGRpZmZlcmVudAotICAgdHlwZXMgb2YgbWVkaWEuIEFuIGF1ZGlvIGFwcGxpY2F0aW9uIG11c3QgYmUgYWJsZSB0byBmaWx0ZXIgb3V0IHRoZQotICAgZWxlbWVudHMgb3BlcmF0aW5nIG9uIGF1ZGlvLCBmb3IgZXhhbXBsZS4KLQotICAgKiBBdWRpbyAgICAgICAgIDogb3BlcmF0ZXMgb24gYXVkaW8gZGF0YQotICAgKiBWaWRlbyAgICAgICAgIDogb3BlcmF0ZXMgb24gdmlkZW8gZGF0YQotICAgKiBJbWFnZSAgICAgICAgIDogb3BlcmF0ZXMgb24gaW1hZ2UgZGF0YS4gVXN1YWxseSB0aGlzIG1lZGlhIHR5cGUgY2FuIGFsc28KLSAgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgdG8gbWFrZSBhIHZpZGVvIHN0cmVhbSBpbiB3aGljaCBjYXNlIGl0IGlzIGFkZGVkCi0gICAgICAgICAgICAgICAgICAgICB0b2dldGhlciB3aXRoIHRoZSBWaWRlbyBtZWRpYSB0eXBlLgotICAgKiBUZXh0ICAgICAgICAgIDogb3BlcmF0ZXMgb24gdGV4dCBkYXRhCi0gICAqIE1ldGFkYXRhICAgICAgOiBvcGVyYXRlcyBvbiBtZXRhZGF0YQotICAgKiAuLi4KLQotIC0gRXh0cmEgZmVhdHVyZXMKLQotICAgVGhlIHB1cnBvc2UgaXMgdG8gZnVydGhlciBzcGVjaWFsaXplIHRoZSBlbGVtZW50LCBtb3N0bHkgZm9yCi0gICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBuZWVkcy4KLQotICAgKiBOZXR3b3JrICAgICAgIDogZWxlbWVudCBpcyB1c2VkIGluIG5ldHdvcmtlZCBzaXR1YXRpb25zCi0gICAqIFByb3RvY29sICAgICAgOiBpbXBsZW1lbnRzIHNvbWUgcHJvdG9jb2wgKFJUU1AsIEhUVFAsIC4uLikKLSAgICogUGF5bG9hZGVyICAgICA6IGVuY2Fwc3VsYXRlIGFzIHBheWxvYWQgKFJUUCwgUkRULC4uICkKLSAgICogRGVwYXlsb2FkZXIgICA6IHN0cmlwIGEgcGF5bG9hZCAoUlRQLCBSRFQsLi4gKQotICAgKiBSVFAgICAgICAgICAgIDogaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBSVFAgYXBwbGljYXRpb25zCi0gICAqIERldmljZSAgICAgICAgOiBvcGVyYXRlcyBvbiBzb21lIGhhcmR3YXJlIGRldmljZSAoZGlzaywgbmV0d29yaywKLSAgICAgICAgICAgICAgICAgICAgIGF1ZGlvIGNhcmQsIHZpZGVvIGNhcmQsIHVzYiwgLi4uKQotICAgKiBWaXN1YWxpc2F0aW9uIDogaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgYXVkaW8gdmlzdWFsaXNhdGlvbgotICAgKiBEZWJ1ZyAgICAgICAgIDogaW50ZW5kZWQgdXNhZ2UgaXMgbW9yZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotCi0gLSBDYXRlZ29yaWVzIGZvdW5kLCBidXQgbm90IHlldCBpbiBvbmUgb2YgdGhlIGFib3ZlIGxpc3RzCi0KLSAgICogQmluICAgICAgICAgICA6IHBsYXliaW4sIGRlY29kZWJpbiwgYmluLCBwaXBlbGluZQotICAgKiBDb2RlYyAgICAgICAgIDogbG90cyBvZiBkZWNvZGVycywgZW5jb2RlciwgZGVtdXhlcnMKLSAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSByZW1vdmVkPwotICAgKiBHZW5lcmljICAgICAgIDogc2hvdWxkIGJlIHJlbW92ZWQ/Ci0gICAqIEZpbGUgICAgICAgICAgOiBsaWtlIG5ldHdvcmssIHNob3VsZCBnbyB0byBFeHRyYT8KLSAgICogRWRpdG9yICAgICAgICA6IGdub25saW4sIHRleHRvdmVybGF5cwotICAgKiBEVkQsIEdEUCwgTEFEU1BBLCBQYXJzZXIsIFBsYXllciwgU3VidGl0bGUsIFRlc3RpbmcsIC4uLgotCi0zKSBzdWdnZXN0ZWQgb3JkZXI6Ci0KLSAgIDxmdW5jdGlvbmFsPlsvPG1lZGlhIHR5cGU+XSpbLzxleHRyYS4uLj5dKgotCi00KSBleGFtcGxlczoKLQotICAgYXBlZGVtdXggICAgICAgICA6IEV4dHJhY3Rlci9NZXRhZGF0YQotICAgYXVkaW90ZXN0c3JjICAgICA6IFNvdXJjZS9BdWRpbwotICAgYXV0b2F1ZGlvc2luayAgICA6IFNpbmsvQXVkaW8vRGV2aWNlCi0gICBjYWlyb3RpbWVvdmVybGF5IDogTWl4ZXIvVmlkZW8vVGV4dAotICAgZHZkZWMgICAgICAgICAgICA6IERlY29kZXIvVmlkZW8KLSAgIGR2ZGVtdXggICAgICAgICAgOiBEZW11eGVyCi0gICBnb29tICAgICAgICAgICAgIDogQ29udmVydGVyL0F1ZGlvL1ZpZGVvCi0gICBpZDNkZW11eCAgICAgICAgIDogRXh0cmFjdGVyL01ldGFkYXRhCi0gICB1ZHBzcmMgICAgICAgICAgIDogU291cmNlL05ldHdvcmsvUHJvdG9jb2wvRGV2aWNlCi0gICB2aWRlb21peGVyICAgICAgIDogTWl4ZXIvVmlkZW8KLSAgIHZpZGVvY29udmVydCAgICAgOiBGaWx0ZXIvVmlkZW8gICAgICAgICAgICAgKGludGVuZGVkIHVzZSB0byBjb252ZXJ0IHZpZGVvIHdpdGggYXMgbGl0dGxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlIGNoYW5nZSBhcyBwb3NzaWJsZSkKLSAgIHZlcnRpZ290diAgICAgICAgOiBFZmZlY3QvVmlkZW8gICAgICAgICAgICAgKGludGVuZGVkIHVzZSBpcyB0byBjaGFuZ2UgdGhlIHZpZGVvKQotICAgdm9sdW1lICAgICAgICAgICA6IEVmZmVjdC9BdWRpbyAgICAgICAgICAgICAoaW50ZW5kZWQgdXNlIGlzIHRvIGNoYW5nZSB0aGUgYXVkaW8gZGF0YSkKLSAgIHZvcmJpc2RlYyAgICAgICAgOiBEZWNvZGVyL0F1ZGlvCi0gICB2b3JiaXNlbmMgICAgICAgIDogRW5jb2Rlci9BdWRpbwotICAgb2dnbXV4ICAgICAgICAgICA6IE11eGVyCi0gICBhZGRlciAgICAgICAgICAgIDogTWl4ZXIvQXVkaW8KLSAgIHZpZGVvYm94ICAgICAgICAgOiBFZmZlY3QvVmlkZW8KLSAgIGFsc2FtaXhlciAgICAgICAgOiBDb250cm9sL0F1ZGlvL0RldmljZQotICAgYXVkaW9jb252ZXJ0ICAgICA6IEZpbHRlci9BdWRpbwotICAgYXVkaW9yZXNhbXBsZSAgICA6IEZpbHRlci9BdWRpbwotICAgeHZpbWFnZXNpbmsgICAgICA6IFNpbmsvVmlkZW8vRGV2aWNlCi0gICBuYXZzZWVrICAgICAgICAgIDogRmlsdGVyL0RlYnVnCi0gICBkZWNvZGViaW4gICAgICAgIDogRGVjb2Rlci9EZW11eGVyCi0gICBsZXZlbCAgICAgICAgICAgIDogRmlsdGVyL0FuYWx5emVyL0F1ZGlvCi0gICB0ZWUgICAgICAgICAgICAgIDogQ29ubmVjdG9yL0RlYnVnCi0KLSA1KSBvcGVuIGlzc3VlczoKLQotICAgLSBob3cgdG8gZGlmZmVyZW50aWF0ZSBwaHlzaWNhbCBkZXZpY2VzIGZyb20gbG9naWNhbCBvbmVzPwotICAgICBhdXRvYXVkaW9zaW5rICAgIDogU2luay9BdWRpby9EZXZpY2UKLSAgICAgYWxzYXNpbmsgICAgICAgICA6IFNpbmsvQXVkaW8vRGV2aWNlCi0KLVVzZSBjYXNlcwotfn5+fn5+fn5+Ci0KLS0gZ2V0IGEgbGlzdCBvZiBhbGwgZWxlbWVudHMgaW1wbGVtZW50aW5nIGEgdmlkZW8gZWZmZWN0IChwaXRpdmkpOgotCi0gICBrbGFzcy5jb250YWlucyAoRWZmZWN0ICYgVmlkZW8pCi0KLS0gZ2V0IGxpc3Qgb2YgbXV4ZXJzIChwaXRpdmkpOgotCi0gICBrbGFzcy5jb250YWlucyAoTXV4ZXIpCi0KLS0gZ2V0IGxpc3Qgb2YgdmlkZW8gZW5jb2RlcnMgKHBpdGl2aSk6Ci0KLSAgIGtsYXNzLmNvbnRhaW5zIChFbmNvZGVyICYgdmlkZW8pCi0KLS0gR2V0IGEgbGlzdCBvZiBhbGwgYXVkaW8vdmlkZW8gdmlzdWFsaXNhdGlvbnMgKHRvdGVtKToKLQotICAga2xhc3MuY29udGFpbnMgKFZpc3VhbGlzYXRpb24pCi0KLS0gR2V0IGEgbGlzdCBvZiBhbGwgZGVjb2RlcnMvZGVtdXhlci9tZXRhZGF0YSBwYXJzZXJzL3ZpcyAocGxheWJpbik6Ci0KLSAgIGtsYXNzLmNvbnRhaW5zIChWaXN1YWxpc2F0aW9uIHwgRGVtdXhlciB8IERlY29kZXIgfCAoRXh0cmFjdG9yICYgTWV0YWRhdGEpKQotCi0tIEdldCBhIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCBjYW4gY2FwdHVyZSBmcm9tIGFuIGF1ZGlvIGRldmljZSAoZ3N0LXByb3BlcnRpZXMpOgotCi0gICBrbGFzcy5jb250YWlucyAoU291cmNlICYgQXVkaW8gJiBEZXZpY2UpCi0KLSAgICAqIGZpbHRlcnMgb3V0IGF1ZGlvdGVzdHNyYywgc2luY2UgaXQgaXMgbm90IGEgZGV2aWNlCi0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vZHJhZnQtbWV0YWRhdGEudHh0IGIvZG9jcy9kZXNpZ24vZHJhZnQtbWV0YWRhdGEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTg0MDc1Li4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL2RyYWZ0LW1ldGFkYXRhLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi1NZXRhZGF0YQotLS0tLS0tLS0KLQotVGhpcyBkcmFmdCByZWNhcHMgdGhlIGN1cnJlbnQgbWV0YWRhdGEgaGFuZGxpbmcgaW4gR1N0cmVhbWVyIGFuZCBwcm9wb3NlcyBzb21lCi1hZGRpdGlvbnMuCi0KLQotU3VwcG9ydGVkIE1ldGFkYXRhIHN0YW5kYXJkcwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgcGFyYWdyYXBocyBiZWxvdyBsaXN0IHN1cHBvcnRlZCBuYXRpdmUgbWV0YWRhdGEgc3RhbmRhcmRzIHNvcnRlZCBieSB0eXBlIGFuZAotdGhlbiBpbiBhbHBoYWJldGljYWwgb3JkZXIuIFNvbWUgc3RhbmRhcmRzIGhhdmUgYmVlbiBleHRlbmRlZCB0byBzdXBwb3J0Ci1hZGRpdGlvbmFsIG1ldGFkYXRhLiBHU3RyZWFtZXIgYWxyZWFkeSBzdXBwb3J0cyBhbGwgb2YgdGhvc2UgdG8gc29tZSBleHRlbmQuIAotVGhpcyBpcyBzaG93bnMgaW4gdGhlIHRhYmxlIGJlbG93IGFzIGVpdGhlciBbLS1dLCBbci1dLCBbLXddIG9yIFtyd10gZGVwZW5kaW5nIG9uCi1yZWFkL3dyaXRlIHN1cHBvcnQgKDA4LkZlYi4yMDEwKS4KLQotQXVkaW8KLS0gbXAzCi0gIElEM3YyOiBbcnddCi0gICAgaHR0cDovL3d3dy5pZDMub3JnL0RldmVsb3Blcl9JbmZvcm1hdGlvbgotICBJRDN2MTogW3J3XSAKLSAgICBodHRwOi8vd3d3LmlkMy5vcmcvSUQzdjEKLSAgWE1QOiBbLS1dIChpbnNpZGUgSUQzdjIgUFJJViB0YWcgb2Ygb3duZXIgWE1QKQotICAgIGh0dHA6Ly93d3cuYWRvYmUuY29tL2Rldm5ldC94bXAvCi0tIG9nZy92b3JiaXMKLSAgdm9yYmlzY29tbWVudDogW3J3XSAKLSAgICBodHRwOi8vd3d3LnhpcGgub3JnL3ZvcmJpcy9kb2Mvdi1jb21tZW50Lmh0bWwKLSAgICBodHRwOi8vd2lraS54aXBoLm9yZy9Wb3JiaXNDb21tZW50Ci0tIHdhdgotICBMSVNUL0lORk8gY2h1bms6IFtyd10KLSAgICBodHRwOi8vd3d3LnNuby5waHkucXVlZW5zdS5jYS9+cGhpbC9leGlmdG9vbC9UYWdOYW1lcy9SSUZGLmh0bWwjSW5mbwotICAgIGh0dHA6Ly93d3cua2suaWlqNHUub3IuanAvfmtvbmRvL3dhdmUvbXBpZGF0YS50eHQKLSAgWE1QOiBbLS1dCi0gICAgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L3htcC8KLQotVmlkZW8KLS0gM2dwCi0gIHttb292LHRyYWt9LnVkdGE6ICBbcnddCi0gICAgIGh0dHA6Ly93d3cuM2dwcC5vcmcvZnRwL1NwZWNzL2h0bWwtaW5mby8yNjI0NC5odG0gCi0gIElEM1YyOiBbLS1dCi0gICAgIGh0dHA6Ly93d3cuM2dwcC5vcmcvZnRwL1NwZWNzL2h0bWwtaW5mby8yNjI0NC5odG0gCi0gICAgIGh0dHA6Ly93d3cubXA0cmEub3JnL3NwZWNzLmh0bWwjaWQzdjIKLS0gYXZpCi0gIExJU1QvSU5GTyBjaHVuazogW3J3XQotICAgIGh0dHA6Ly93d3cuc25vLnBoeS5xdWVlbnN1LmNhL35waGlsL2V4aWZ0b29sL1RhZ05hbWVzL1JJRkYuaHRtbCNJbmZvCi0gICAgaHR0cDovL3d3dy5ray5paWo0dS5vci5qcC9+a29uZG8vd2F2ZS9tcGlkYXRhLnR4dAotICBYTVA6IFstLV0gKGluc2lkZSAiX1BNWCIgY2h1bmspCi0gICAgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L3htcC8KLS0gYXNmCi0gID8/OiAKLSAgWE1QOiBbLS1dCi0gICAgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L3htcC8KLS0gZmx2IFstLV0KLSAgWE1QOiAoaW5zaWRlIG9uWE1QRGF0YSBzY3JpcHQgZGF0YSB0YWcpCi0gICAgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L3htcC8KLS0gbWt2Ci0gIHRhZ3M6IFtyd10KLSAgICBodHRwOi8vd3d3Lm1hdHJvc2thLm9yZy90ZWNobmljYWwvc3BlY3MvdGFnZ2luZy9pbmRleC5odG1sCi0tIG1vdgotICBYTVA6IFstLV0gKGluc2lkZSBtb292LnVkdGEuWE1QXyBib3gpCi0gICAgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L3htcC8KLS0gbXA0Ci0gIHttb292LHRyYWt9LnVkdGE6IFtyd10KLSAgICBodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXR0Zi9QdWJsaWNseUF2YWlsYWJsZVN0YW5kYXJkcy9jMDUxNTMzX0lTT19JRUNfMTQ0OTYtMTJfMjAwOC56aXAKLSAgbW9vdi51ZHRhLm1ldGEuaWxzdDogW3J3XQotICAgIGh0dHA6Ly9hdG9taWNwYXJzbGV5LnNvdXJjZWZvcmdlLm5ldC8KLSAgICBodHRwOi8vYXRvbWljcGFyc2xleS5zb3VyY2Vmb3JnZS5uZXQvbXBlZy00ZmlsZXMuaHRtbAotICBJRDN2MjogWy0tXQotICAgIGh0dHA6Ly93d3cubXA0cmEub3JnL3NwZWNzLmh0bWwjaWQzdjIKLSAgWE1QOiBbLS1dIChpbnNpZGUgVVVJRCBib3gpCi0gICAgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L3htcC8KLS0gbXhmCi0gID8/Ci0KLUltYWdlcwotLSBnaWYKLSAgWE1QOiBbLS1dCi0gICAgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L3htcC8KLS0ganBnCi0gIGppZjogW3J3XSAob25seSBjb21tZW50cykKLSAgRVhJRjogW3J3XSAodmlhIG1ldGFkYXRhIHBsdWdpbikKLSAgICBodHRwOi8vd3d3LmV4aWYub3JnL3NwZWNpZmljYXRpb25zLmh0bWwKLSAgSVBUQzogW3J3XSAodmlhIG1ldGFkYXRhIHBsdWdpbikKLSAgICBodHRwOi8vd3d3LmlwdGMub3JnL0lQVEM0WE1QLwotICBYTVA6IFtyd10gKHZpYSBtZXRhZGF0YSBwbHVnaW4pCi0gICAgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L3htcC8KLS0gcG5nCi0gIFhNUDogWy0tXQotICAgIGh0dHA6Ly93d3cuYWRvYmUuY29tL2Rldm5ldC94bXAvCi0KLWZ1cnRoZXIgTGlua3M6Ci1odHRwOi8vYWdlLmhvYmJhLm5sL2F1ZGlvL3RhZ19mcmFtZV9yZWZlcmVuY2UuaHRtbAotaHR0cDovL3dpa2kuY3JlYXRpdmVjb21tb25zLm9yZy9UcmFja2VyX0NDX0luZGV4aW5nCi0KLQotQ3VycmVudCBNZXRhZGF0YSBoYW5kbGluZwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1XaGVuIHJlYWRpbmcgZmlsZXMsIGRlbXV4ZXJzIG9yIHBhcnNlcnMgZXh0cmFjdCB0aGUgbWV0YWRhdGEuIEl0IHdpbGwgYmUgc2VudCAKLWEgR1NUX0VWRU5UX1RBRyB0byBkb3duc3RyZWFtIGVsZW1lbnRzLiBXaGVuIGEgc2luayBlbGVtZW50IHJlY2VpdmVzIGEgdGFnCi1ldmVudCwgaXQgd2lsbCBwb3N0IGEgR1NUX01FU1NBR0VfVEFHIG1lc3NhZ2Ugb24gdGhlIGJ1cyB3aXRoIHRoZSBjb250ZW50cyBvZgotdGhlIHRhZyBldmVudC4KLQotRWxlbWVudHMgcmVjZWl2aW5nIEdTVF9FVkVOVF9UQUcgZXZlbnRzIGNhbiBtYW5nbGUgdGhlbSwgbXV4IHRoZW0gaW50byB0aGUgCi1idWZmZXJzIHRoZXkgc2VuZCBvciBqdXN0IHBhc3MgdGhlbSB0aHJvdWdoLiBVc3VhbGx5IGlzIG11eGVycyB0aGF0IHdpbGwgZm9ybWF0Ci10aGUgdGFnIGRhdGEgaW50byB0aGUgZm9ybSByZXF1aXJlZCBieSB0aGUgZm9ybWF0IHRoZXkgbXV4LiBTdWNoIGVsZW1lbnRzIHdvdWxkCi1hbHNvIGltcGxlbWVudCB0aGUgR3N0VGFnU2V0dGVyIGludGVyZmFjZSB0byByZWNlaXZlIHRhZ3MgZnJvbSB0aGUgYXBwbGljYXRpb24uCi0KLSAgKy0tLS0tLS0tLS0rCi0gIHwgZGVtdXggICAgfAotIHNpbmsgICAgICAgc3JjIC0tPiBHc3RFdmVudCh0YWcpIG92ZXIgR3N0UGFkIHRvIGRvd25zdHJlYW0gZWxlbWVudAotICArLS0tLS0tLS0tLSsKLQotICAgICAgICAgICBtZXRob2QgY2FsbCBvdmVyIEdzdFRhZ1NldHRlciBpbnRlcmZhY2UgZnJvbSBhcHBsaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtdXggICAgICB8Ci1Hc3RFdmVudCh0YWcpIG92ZXIgR3N0UGFkIGZyb20gdXBzdHJlYW0gZWxlbWVudCAtLT4gc2luayAgICAgICBzcmMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsKLQotVGhlIGRhdGEgdXNlZCBpbiBhbGwgdGhvc2UgaW50ZXJmYWNlcyBpcyBHc3RUYWdMaXN0LiBJdCBpcyBiYXNlZCBvbiBhIAotR3N0U3RydWN0dXJlIHdoaWNoIGlzIGxpa2UgYSBoYXNoIHRhYmxlIHdpdGggZGlmZmVyZW50bHkgdHlwZWQgZW50cmllcy4gVGhlIGtleQotaXMgYWx3YXlzIGEgc3RyaW5nL0dRdWFyay4gTWFueSBrZXlzIGFyZSBwcmVkZWZpbmVkIGluIEdTdHJlYW1lciBjb3JlLiBNb3JlIGtleXMKLWFyZSBkZWZpbmVkIGluIGdzdC1wbHVnaW5zLWJhc2UvZ3N0LWxpYnMvZ3N0L3RhZy90YWcuaC4KLUlmIGVsZW1lbnRzIGFuZCBhcHBsaWNhdGlvbnMgdXNlIHByZWRlZmluZWQgdHlwZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHRyYW5zY29kZSBhCi1maWxlIGZyb20gb25lIGZvcm1hdCBpbnRvIGFub3RoZXIgd2hpbGUgcHJlc2VydmluZyBhbGwga25vd24gYW5kIG1hcHBlZAotbWV0YWRhdGEuCi0KLQotSXNzdWVzCi1+fn5+fn4KLQotVW5rbm93bi9Vbm1hcHBlZCBtZXRhZGF0YQotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1SaWdodCBub3cgR1N0cmVhbWVyIGNhbiBsb3NlIG1ldGFkYXRhIHdoZW4gdHJhbnNjb2RpbmcsIHJlbXV4aW5nIGNvbnRlbnQuIFRoaXMKLWNhbiBoYXBwZW5kIGFzIHdlIGRvbid0IG1hcCBhbGwgbWV0YWRhdGEgZmllbGRzIHRvIGdlbmVyaWMgb25lcy4KLQotV2Ugc2hvdWxkIHByb2JhYmx5IGFsc28gYWRkIHRoZSB3aG9sZSBtZXRhZGF0YSBibG9iIHRvIHRoZSBHc3RUYWdMaXN0LiBXZSB3b3VsZAotbmVlZCBhIEdTVF9UQUdfU1lTVEVNX3h4eCBkZWZpbmUgKGUuZy4gR1NUX1RBR19TWVNURU1fSUQzVjIpIGZvciBlYWNoIHN0YW5kYXJkLgotVGhlIGNvbnRlbnQgaXMgbm90IHByaW50YWJsZSBhbmQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmluYXJ5IGlmIG5vdCBrbm93bi4gVGhlCi10YWcgaXMgbm90IG1lcmdlYWJsZSAtIGNhbGwgZ3N0X3RhZ19yZWdpc3RlcigpIHdpdGggR3N0VGFnTWVyZ2VGdW5jPU5VTEwuIEFsc28KLXRoZSB0YWcgZGF0YSBpcyBvbmx5IHVzZWZ1bCBmb3IgdXBzdHJlYW0gZWxlbWVudHMsIG5vdCBmb3IgdGhlIGFwcGxpY2F0aW9uLiAKLQotQSBtdXhlciB3b3VsZCBmaXJzdCBzY2FuIGEgdGFnbGlzdCBmb3Iga25vd24gc3lzdGVtIHRhZ3MuIFVua25vd24gdGFncyBhcmUKLWlnbm9yZWQgYXMgYWxyZWFkeS4gSXQgd291bGQgZmlyc3QgcG9wdWxhdGUgaXRzIG93biBtZXRhZGF0YSBzdG9yZSB3aXRoIHRoZQotZW50cmllcyBmcm9tIHRoZSBzeXN0ZW0gdGFnIGFuZCB0aGUgdXBkYXRlIHRoZSBlbnRyaWVzIHdpdGggdGhlIGRhdGEgaW4gbm9ybWFsCi10YWdzLgotCi1CZWxvdyBpcyBhbiBpbml0aWFsIGxpc3Qgb2YgdGFnIHN5c3RlbXM6Ci1JRDNWMSAgICAgICAgICAgLSBHU1RfVEFHX1NZU1RFTV9JRDNWMQotSUQzVjIgICAgICAgICAgIC0gR1NUX1RBR19TWVNURU1fSUQzVjIKLVJJRkZfSU5GTyAgICAgICAtIEdTVF9UQUdfU1lTVEVNX1JJRkZfSU5GTwotWE1QICAgICAgICAgICAgIC0gR1NUX1RBR19TWVNURU1fWE1QCi0KLVdlIHdvdWxkIGJhc2ljYWxseSBuZWVkIHRoaXMgZm9yIGVhY2ggY29udGFpbmVyIGZvcm1hdC4KLQotU2VlIGFsc28gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTM0NTM1MgotCi1Mb3N0IG1ldGFkYXRhCi1eXl5eXl5eXl5eXl5eCi0KLUEgY2FzZSBzbGlnaGx5IGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyBpcyB0aGF0IHdoZW4gYW4gYXBwbGljYXRpb24gc2V0cyBhCi1Hc3RUYWdMaXN0IG9uIGEgcGlwZWxpbmUuIFJpZ2h0IGVsZW1lbnRzIGNvbnN1bWluZyB0YWdzIGRvIG5vdCByZXBvcnQgd2hpY2ggdGFncwotaGF2ZSBiZWVuIGNvbnN1bWVkLiAgRXNwZWNpYWxseSB3aGVuIHVzaW5nIGVsZW1lbnRzIHRoYXQgbWFrZSBtZXRhZGF0YSAKLXBlcnNpc3RlbnQsIHdlIGhhdmUgbm8gbWVhbnMgb2Yga25vd2luZyB3aGljaCBvZiB0aGUgdGFncyBtYWRlIGl0IGludG8gdGhlIAotdGFyZ2V0IHN0cmVhbSBhbmQgd2hpY2ggd2VyZSBub3Qgc2VyaWFsaXplZC4gSWRlYWxseSB0aGUgYXBwbGljYXRpb24gd291bGQgbGlrZQotdG8ga25vdyB3aGljaCBraW5kIG9mIG1ldGFkYXRhIGlzIGFjY2VwdGVkIGJ5IGEgcGlwbGVpbmUgdG8gcmVmbGVjdCB0aGF0IGluIHRoZQotVUkuCi0KLUFsdGhvdWdoIGl0IGlzIGluIHByYWN0aXNlIHNvIHRoYXQgZWxlbWVudHMgaW1wbGVtZW50aW5nIEdzdFRhZ1NldHRlciBhcmUgdGhlCi1vbmVzIHRoYXQgc2VyaWFsaXplLCB0aGlzIGRvZXMgbm90IGhhdmUgdG8gYmUgc28uIE90aGVyd2lzZSB3ZSBjb3VsZCBhZGQgYQotbWVhbnMgdG8gdGhhdCBpbnRlcmZhY2UsIHdoZXJlIGVsZW1lbnRzIGFkZCB0aGUgdGFncyB0aGV5IGhhdmUgc2VyaWFsaXplZC4gVGhlCi1hcHBsaWNhdGlvbiBjb3VsZCBidWlsZCBvbmUgbGlzdCBmcm9tIGFsbCB0aGUgdGFnIG1lc3NhZ2VzIGFuZCB0aGVuIHF1ZXJ5IGFsbAotdGhlIHNlcmlhbGl6ZWQgdGFncyBmcm9tIHRhZy1zZXR0ZXJzLiBUaGUgZGVsdGEgdGVsbHMgd2hhdCBoYXMgbm90IGJlZW4KLXNlcmlhbGl6ZWQuCi0KLUEgZGlmZmVyZW50IGFwcHJvYWNoIHdvdWxkIGJlIHRvIHF1ZXJ5IHRoZSBsaXN0IG9mIHN1cHBvcnRlZCB0YWdzIGluIGFkdmFuY2UuCi1UaGlzIGNvdWxkIGJlIGEgcXVlcnkgKEdTVF9RVUVSWV9UQUdfU1VQUE9SVCkuIFRoZSBxdWVyeSByZXN1bHQgY291bGQgYmUgYSBsaXN0Ci1vZiBlbGVtZW50cyBhbmQgdGhlaXIgdGFncy4gQXMgYSBjb252ZW5pZW5jZSB3ZSBjb3VsZCBmbGF0dGVuIHRoZSBsaXN0IG9mIHRhZ3MKLWZvciB0aGUgdG9wLWxldmVsIGVsZW1lbnQgKGlmIHRoZSBxdWVyeSB3YXMgc2VudCB0byBhIGJpbikgYW5kIGFkZCB0aGF0LgotCi1UYWdzIGFyZSBwZXIgRWxlbWVudAotXl5eXl5eXl5eXl5eXl5eXl5eXl4KLQotSW4gbWFueSBjYXNlcyB3ZSB3YW50IHRhZ3MgcGVyIHN0cmVhbS4gRXZlbiBtZXRhZGF0YSBzdGFuZGFyZHMgbGlrZSBtcDQvM2dwCi1tZXRhZGF0YSBzdXBwb3J0cyB0aGF0LiBSaWdodCBub3cgR1NUX01FU1NBR0VfU1JDKHRhZ3MpIGlzIHRoZSBlbGVtZW50LiBXZSB0cmllZAotY2hhbmdpbmcgdGhhdCB0byB0aGUgcGFkLCBidXQgdGhhdCBicm9rZSBhcHBsaWNhdGlvbnMuCi1BbHNvIHdlIG1pc3MgdGhlIHN5bW1ldHJpYyBmdW5jdGlvbmFsaXR5IGluIEdzdFRhZ1NldHRlci4gVGhpcyBpbnRlcmZhY2UgaXMKLXVzdWFsbHkgaW1wbGVtZW50ZWQgYnkgZWxlbWVudHMuCi0KLU9wZW4gYnVncwotXl5eXl5eXl5eCi0KLWh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3F1ZXJ5X2Zvcm1hdD1hZHZhbmNlZDtzaG9ydF9kZXNjPXRhZztidWdfc3RhdHVzPVVOQ09ORklSTUVEO2J1Z19zdGF0dXM9TkVXO2J1Z19zdGF0dXM9QVNTSUdORUQ7YnVnX3N0YXR1cz1SRU9QRU5FRDtidWdfc3RhdHVzPU5FRURJTkZPO3Nob3J0X2Rlc2NfdHlwZT1hbGx3b3Jkc3N1YnN0cjtwcm9kdWN0PUdTdHJlYW1lcgotCi1BZGQgR1NUX1RBR19NRVJHRV9SRU1PVkUKLWh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NjAzMDIKLQotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9kcmFmdC1wdXNoLXB1bGwudHh0IGIvZG9jcy9kZXNpZ24vZHJhZnQtcHVzaC1wdWxsLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzM2JjNy4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9kcmFmdC1wdXNoLXB1bGwudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLURSQUZUIHB1c2gtcHVsbCBzY2hlZHVsaW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdGF0dXMKLQotICBEUkFGVC4gREVQUkVDQVRFRCBieSBiZXR0ZXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KLQotT2JzZXJ2YXRpb25zOgotCi0gIC0gVGhlIG1haW4gc2NoZWR1bGluZyBtb2RlIGlzIGNoYWluIGJhc2VkIHNjaGVkdWxpbmcgd2hlcmUgdGhlIHNvdXJjZQotICAgIGVsZW1lbnQgcHVzaGVzIGJ1ZmZlcnMgdGhyb3VnaCB0aGUgcGlwZWxpbmUgdG8gdGhlIHNpbmtzLiB0aGlzIGlzCi0gICAgY2FsbGVkIHRoZSBwdXNoIG1vZGVsCi0KLSAgLSBJbiB0aGUgcHVsbCBtb2RlbCwgc29tZSBwbHVnaW4gcHVsbHMgYnVmZmVycyBmcm9tIGFuIHVwc3RyZWFtIHBlZXIKLSAgICBlbGVtZW50IGJlZm9yZSBjb25zdW1pbmcgYW5kL29yIHB1c2hpbmcgdGhlbSBmdXJ0aGVyIGRvd25zdHJlYW0uCi0KLQotVXNhZ2VzIG9mIHB1bGwgYmFzZWQgc2NoZWR1bGluZzoKLQotICAtIHNpbmtzIHRoYXQgcHVsbCBpbiBkYXRhLCBwb3NzaWJseSBhdCBmaXhlZCBpbnRlcnZhbHMgZHJpdmVuIGJ5IHNvbWUKLSAgICBoYXJkd2FyZSBkZXZpY2UgKGF1ZGlvY2FyZCwgdmlkZW9kZXZpY2UsIC4uLikuCi0KLSAgLSBFZmZpY2llbnQgcmFuZG9tIGFjY2VzcyB0byByZXNvdXJjZXMuIEVzcGVjaWFsbHkgdXNlZnVsIGZvciBjZXJ0YWluCi0gICAgdHlwZXMgb2YgZGVtdXhlcnMuCi0KLQotQVBJIGZvciBwdWxsLWJhc2VkIHNjaGVkdWxpbmc6Ci0KLSAgLSBhbiBlbGVtZW50IHRoYXQgd2FudHMgdG8gcHVsbCBkYXRhIGZyb20gYSBwZWVyIGVsZW1lbnQgbmVlZHMgdG8gY2FsbAotICAgIHRoZSBwdWxsX3JhbmdlKCkgbWV0aG9kLiBUaGlzIG1ldGhvZHMgcmVxdWlyZXMgYW4gb2Zmc2V0IGFuZCBhIHNpemUuCi0gICAgSXQgaXMgcG9zc2libGUgdG8gbGVhdmUgdGhlIG9mZnNldCBhbmQgc2l6ZSBhdCAtMSwgaW5kaWNhdGluZyB0aGF0Ci0gICAgYW55IG9mZnNldCBvciBzaXplIGlzIGFjY2VwdGFibGUsIHRoaXMgb2YgY291cnNlIHJlbW92ZXMgdGhlIGFkdmFudGFnZXMKLSAgICBvZiBnZXRyYW5nZSBiYXNlZCBzY2hlZHVsaW5nLgotCi0KLVR5cGVzIG9mIHB1bGwgYmFzZWQgc2NoZWR1bGluZzoKLQotICAtIHNvbWUgc291cmNlcyBjYW4gZG8gcmFuZG9tIGFjY2VzcyAoZmlsZSBzb3VyY2UsIC4uLikKLQotICAtIHNvbWUgc291cmNlcyBjYW4gcmVhZCBhIHJhbmRvbSBudW1iZXIgb2YgYnl0ZXMgYnV0IG5vdCBhdCBhIHJhbmRvbQotICAgIG9mZnNldC4gKGF1ZGlvIGNhcmRzLCAuLi4pIEF1ZGlvIGNhcmRzIHVzaW5nIGEgcmluZ2J1ZmZlciBjYW4KLSAgICBob3dldmVyIGRvIHJhbmRvbSBhY2Nlc3MgaW4gdGhlIHJpbmdidWZmZXIuCi0KLSAgLSBzb21lIHNvdXJjZXMgY2FuIGRvIHJhbmRvbSBhY2Nlc3MgaW4gYSByYW5nZSBvZiBieXRlcyBidXQgbm90IGluCi0gICAgYW5vdGhlciByYW5nZS4gKGEgY2FjaGluZyBuZXR3b3JrIHNvdXJjZSkuCi0KLSAgLSBzb21lIHNvdXJjZXMgY2FuIGRvIGEgZml4ZWQgc2l6ZSBkYXRhIGFuZCB3aXRob3V0IGFuIG9mZnNldC4gCi0gICAgKHZpZGVvIHNvdXJjZXMsIC4uLikKLSAgCi0gICAgICAKLUN1cnJlbnQgc2NoZWR1bGluZyBkZWNpc2lvbjoKLQotICAtIGNvcmUgc2VsZWN0cyBzY2hlZHVsaW5nIHR5cGUgc3RhcnRpbmcgb24gc2lua3MgYnkgbG9va2luZyBhdCBleGlzdGVuY2UKLSAgICBvZiBsb29wIGZ1bmN0aW9uIG9uIHNpbmtwYWQgYW5kIGNhbGxpbmcgX2NoZWNrX3B1bGxfcmFuZ2UoKSBvbiB0aGUKLSAgICBzb3VyY2UgcGFkIHRvIGFjdGl2YXRlIHRoZSBwYWRzIGluIHB1c2gvcHVsbCBtb2RlLgotCi0gIC0gZWxlbWVudCBwcm94aWVzIHB1bGwgbW9kZSBwYWQgYWN0aXZhdGlvbiB0byBwZWVyIHBhZC4KLQotUHJvYmxlbXM6Ci0KLSAgLSBjb3JlIG1ha2VzIGEgdG91Z2ggZGVzaWNpb24gd2l0aG91dCBrbm93aW5nIGFueXRoaW5nIGFib3V0IHRoZSAKLSAgICBlbGVtZW50LiBTb21lIGVsZW1lbnRzIGFyZSBhYmxlIHRvIGRlYWwgd2l0aCBhIHB1bGxfcmFuZ2UoKQotICAgIHdpdGhvdXQgb2Zmc2V0IHdoaWxlIG90aGVycyBuZWVkIGZ1bGwgcmFuZG9tICBhY2Nlc3MuCi0gICAgCi0KLVJlcXVpcmVtZW50czoKLQotICAtIGVsZW1lbnQgc2hvdWxkIGJlIGFibGUgdG8gc2VsZWN0IHNjaGVkdWxpbmcgbWV0aG9kIGl0c2VsZiBiYXNlZCBvbgotICAgIGhvdyBpdCBjYW4gdXNlIHRoZSBwZWVyIGVsZW1lbnQgcHVsbF9yYW5nZS4gVGhpcyBpbmNsdWRlcyBpZiB0aGUKLSAgICBwZWVyIGNhbiBvcGVyYXRlIHdpdGggb3Igd2l0aG91dCBvZmZzZXQvc2l6ZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQKLSAgICB0aGUgY29yZSBkb2VzIG5vdCBuZWVkIHRvIHNlbGVjdCB0aGUgc2NoZWR1bGluZyBtZXRob2QgYW55bW9yZSBhbmQKLSAgICBhbGxvd3MgZm9yIG1vcmUgZWZmaWNpZW50IHNjaGVkdWxpbmcgbWV0aG9kcyBhZGp1c3RlZCBmb3IgdGhlIAotICAgIHBhcnRpY3VsYXIgZWxlbWVudC4KLQotCi1Qcm9wb3NpdGlvbjoKLQotICAtIHBhZHMgYXJlIGFjdGl2YXRlZCB3aXRob3V0IHRoZSBjb3JlIHNlbGVjdGluZyBhIG1ldGhvZC4KLQotICAtIHBhZHMgcXVlcmllcyBzY2hlZHVsaW5nIG1vZGUgb2YgcGVlciBwYWQuIFRoaXMgcXVlcnkgaXMgcmF0aGVyCi0gICAgZmluZWdyYWluZWQgYW5kIGFsbG93cyB0aGUgZWxlbWVudCB0byBrbm93IGlmIHRoZSBwZWVyIHN1cHBvcnRzCi0gICAgb2Zmc2V0cyBhbmQgc2l6ZXMgaW4gdGhlIGdldF9yYW5nZSBmdW5jdGlvbi4gQSBwcm9wb3NpdGlvbiBmb3IKLSAgICB0aGUgcXVlcnkgaXMgb3V0bGluZWQgaW4gZHJhZnQtcXVlcnkudHh0LgotICAKLSAgLSBwYWQgc2VsZWN0cyBzY2hlZHVsaW5nIG1vZGUgYW5kIGluZm9ybXMgdGhlIHBlZXIgcGFkIG9mIHRoaXMKLSAgICBkZWNpc2lvbi4KLQotCi1UaGluZ3MgdG8gcXVlcnk6Ci0KLSAgLSBwYWQgY2FuIGRvIHJlYWwgcmFuZG9tIGFjY2VzcyAoZG93bnN0cmVhbSBwZWVyIGNhbiBhc2sgZm9yIG9mZnNldCAhPSAtMSkKLSAgICAgLSBtaW4gb2Zmc2V0Ci0gICAgIC0gc3VnZ2VzdCBzZXF1ZW50aWFsIGFjY2VzcwotICAgICAtIG1heCBvZmZzZXQKLSAgICAgLSBhbGlnbjogYWxsIG9mZnNldHMgc2hvdWxkIGJlIGFsaWduZWQgd2l0aCB0aGlzIHZhbHVlLgotICAtIHBhZCBjYW4gZ2l2ZSByYW5nZXMgZnJvbSBBIHRvIEIgbGVuZ3RoIChwZWVyIGNhbiBhc2sgZm9yIEEgPD0gbGVuZ3RoIDw9IEIpCi0gICAgIC0gbWluIGxlbmd0aAotICAgICAtIHN1Z2dlc3RlZCBsZW5ndGgKLSAgICAgLSBtYXggbGVuZ3RoCi0KLVVzZSBjYXNlczoKLQotICAtIEFuIGF1ZGlvIHNvdXJjZSBjYW4gcHJvdmlkZSByYW5kb20gYWNjZXNzIHRvIHRoZSBzYW1wbGVzIHF1ZXVlZCBpbiBpdHMKLSAgICBETUEgYnVmZmVyLCBpdCBob3dldmVyIHN1Z2dlc3RzIHNlcXVlbnRpYWwgYWNjZXNzIG1ldGhvZC4KLSAgICBBbiBhdWRpbyBzb3VyY2UgY2FuIHByb3ZpZGUgYSByYW5kb20gbnVtYmVyIG9mIHNhbXBsZXMgYnV0IHByZWZlcnMgCi0gICAgcmVhZGluZyBmcm9tIHRoZSBoYXJkd2FyZSB1c2luZyBhIGZpeGVkIHNlZ21lbnQgc2l6ZS4KLQotICAtIEEgY2FjaGluZyBuZXR3b3JrIHNvdXJjZSB3b3VsZCBzdWdnZXN0IHNlcXVlbnRpYWwgYWNjZXNzIGJ1dCBpcyBzZWVrYWJsZQotICAgIGluIHRoZSBjYWNoZWQgcmVnaW9uLiBBcHBsaWNhdGlvbnMgY2FuIHF1ZXJ5IGZvciB0aGUgYWxyZWFkeSBkb3dubG9hZGVkCi0gICAgcG9ydGlvbiBhbmQgdXBkYXRlIHRoZSBHVUksIGEgc2VlayBjYW4gYmUgZG9uZSBpbiB0aGF0IGFyZWEuCi0gICAgCi0gIC0gYSBsaXZlIHZpZGVvIHNvdXJjZSBjYW4gb25seSBwcm92aWRlIGJ1ZmZlcnMgc2VxdWVudGlhbHkuIEl0IGV4cG9zZXMKLSAgICBvZmZzZXRzIGFzIC0xLiBsZW5ndGhzIGFyZSBhbHNvIC0xLiAKLQotICAKLQotCi0gICAgCi0gICAgIApkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vZHJhZnQtdGFncmVhZGluZy50eHQgYi9kb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE2ODg1MC4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9kcmFmdC10YWdyZWFkaW5nLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLVRhZ3JlYWRpbmcKLS0tLS0tLS0tLS0KLQotVGhlIHRhZ3JlYWRpbmcgKG1ldGFkYXRhIHJlYWRpbmcpIHVzZSBjYXNlIGZvciBtZWRpYWNlbnRlciBhcHBsaWNhdGlvbnMgaXMgbm90Ci10b28gd2VsbCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgR1N0cmVhbWVyIGFyY2hpdGVjdHVyZS4gSXQgdXNlcyBkZW11eGVycyBvbiB0aGUKLWZpbGVzLCB3aGljaCBnZW5lcmFsbHkgc2FpZCB0YWtlcyB0b28gbG9uZyAoYnVpbGRpbmcgc2Vlay1pbmRleCwgcHJlcm9sbGluZykuCi1XaGF0IHdlIHdhbnQgaXMgc3BlY2lhbGl6ZWQgZWxlbWVudHMgLyBwYXJzaW5nIG1vZGVzIHRoYXQganVzdCBkbyB0aGUKLXRhZy1yZWFkaW5nLgotCi1UaGUgaWRlYSBpcyB0byBkZWZpbmUgYSBUYWdSZWFkSUZhY2UuIFRhZy1kZW11eGVycywgY2xhc3NpYyBkZW11eGVycyBhbmQgZGVjb2RlcgotcGx1Z2lucyBjYW4ganVzdCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBvciBwcm92aWRlIGEgc2VwYXJhdGUgZWxlbWVudCB0aGF0Ci1pbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2UuCi0KLUluIGFkZGl0aW9uIHdlIG5lZWQgYSB0YWdyZWFkYmluLCB0aGF0IHNpbWlsYXIgdG8gZGVjb2RlYmluIGRvZXMgYSB0eXBlZmluZCBhbmQKLXRoZW4gcGx1Z3MgdGhlIHJpZ2h0IHRhZ3JlYWQgZWxlbWVudChzKS4gSWYgd2lsbCBvbmx5IGxvb2sgYXQgZWxlbWVudHMgdGhhdAotaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UuIEl0IGNhbiBwbHVnIHNlcnZhbCBpZiBwb3NzaWJsZS4KLQotRm9yIG9wdGltYWwgcGVyZm9ybWFuY2UgdHlwZWZpbmQgYW5kIHRhZ3JlYWQgY291bGQgc2hhcmUgdGhlIGxpc3Qgb2YgYWxyZWFkeQotcGVla2VkIGJ1ZmZlcnMgKGEgcXVldWUgZWxlbWVudCBhZnRlciBzaW5rLCBidXQgdGhhdCB3b3VsZCBjaGFuZ2UgcHVsbCB0byBwdXNoKS4KLQotCi1EZXNpZ24KLX5+fn5+fgotCi1UaGUgcGxhbiBpcyB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gZG8gdGhlIGZvbGxvd2luZzoKLSAgcGlwZWxpbmUgPSAiZmlsZXNyYyAhIHRhZ2JpbiIKLSAgZm9yIChmaWxlX3BhdGggaW4gbGlzdF9vZl9maWxlcykgewotICAgIGZpbGVzcmMubG9jYXRpb249ZmlsZV9wYXRoCi0gICAgcGlwZWxpbmUuc2V0X3N0YXRlKFBBVVNFRCkKLSAgICAvLyB3YWl0IGZvciBUQUdTICYgRU9TCi0gICAgcGlwZWxpbmUuc2V0X3N0YXRlKFJFQURZKQotICB9Ci0KLSogaXQgc2hvdWxkIGhhdmUgb25lIHNpbmtwYWQgb2YgdHlwZSBBTlkKLSogaXQgc2hvdWxkIHNlbmQgRU9TIHdoZW4gYWxsIG1ldGFkYXRhIGhhcyBiZWVuIHJlYWQKLSAgImRvbmUiLXNpZ25hbCBmcm9tIGFsbCB0YWdyZWFkLWVsZW1lbnRzCi0qIHNwZWNpYWwgdGFncmVhZC1lbGVtZW50cyBzaG91bGQgaGF2ZSBSQU5LX05PTkUgdG8gYmUgbm90IGF1dG9wbHVnZ2VkIGJ5Ci0gIGRlY29kZWJpbgotCi1JbnRlcmZhY2UKLX5+fn5+fn5+fgotCi0qIGdib29sZWFuIGlmYWNlIHByb3BlcnR5ICJ0YWctcmVhZGluZyIKLSAgU3dpdGNoZXMgdGhlIGVsZW1lbnQgdG8gdGFncmVhZGluZyBtb2RlLiBOZWVkZWQgaWYgbm9ybWFsIGVsZW1lbnQgaW1wbGVtZW50Ci0gIHRoYXQgYmVoYXZpb3VyLiBFbGVtZW50cyB3aWxsIHNraXAgcGFyc2luZyB1bm5lZWRlZCBkYXRhLCBkb24ndCBidWlsZCBhCi0gIHNlZWtpbmcgaW5kZXgsIGV0Yy4KLSogc2lnbmFsICJkb25lIgotICBFcXVpdmFsZW50IG9mIEVPUy4KLQotVXNlIENhc2VzCi1+fn5+fn5+fn4KLQotKiBtcDMgd2l0aCBpZDMtIGFuZCBhcGV0YWdzCi0gICogcGx1ZyBpZDNkZW11eCAhIGFwZWRlbXV4Ci0qIGF2aSB3aXRoIHZvcmJpcyBhdWRpbwotICAqIHBsdWcgYXZpZGVtdXgKLSAgKiBuZXcgcGFkIC0+IGF1ZGlvL3ZvcmJpcwotICAqIHBsdWcgdm9yYmlzZGVjIG9yIHNwZWNpYWwgdm9yYmlzY29tbWVudCByZWFkZXIKLQotQWRkaXRpb25hbCBUaG91Z2h0cwotfn5+fn5+fn5+fn5+fn5+fn5+fgotCi0qIHdvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8gaGF2ZSAyLXBoYXNlIHRhZy1yZWFkaW5nIChwcm9wZXJ0eSBvbiB0YWdiaW4gYW5kL29yCi0gIHRhZ3JlYWQgZWxlbWVudHMpCi0gICogMXN0IHBoYXNlOiBnZXQgdGFnLWRhdGEgdGhhdCBhcmUgZGlyZWN0bHkgZW1iZWRkZWQgaW4gdGhlIGRhdGEKLSAgKiAybmQgcGhhc2U6IGdldCB0YWctZGF0YSB0aGF0IGhhcyB0byBiZSBnZW5lcmF0ZWQKLSAgICAqIGUuZy4gYWxidW0tYXJ0IHZpYSB3ZWIsIHZpZGVvLXRodW1ibmFpbHMKLSogd2hhdCBhYm91dCBjYWNoaW5nIGJhY2tlbmRzCi0gICogaXQgd291bGQgYmUgZ29vZCB0byBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gc3VwcGx5IHRhZ2JpbiB3aXRoIGEgdGFnY2FjaGUtCi0gICAgb2JqZWN0IGluc3RhbmNlLiBXaGVuZXZlciB0YWdiaW4gZ2V0cyBhICdsb2NhdGlvbicgdG8gdGFncmVhZCwgaXQgY29uc3VsdHMKLSAgICB0aGUgY2FjaGUgZmlyc3QuIHdoZW5ldmVyIHRoZXJlIGlzIGEgY2FjaGUtbWlzcyBpdCB3aWxsIHRhZy1yZWFkIGFuZCB0aGVuCi0gICAgc3RvcmUgaW4gdGhlIGNhY2hlCi0KLSAgICBHc3RUYWdMaXN0ICpnc3RfdGFnX2NhY2hlX2xvYWRfdGFnX2RhdGEgKEdzdFRhZ0NhY2hlICpzZWxmLCBjb25zdCBnY2hhciAqdXJpKTsKLSAgICBnc3RfdGFnX2NhY2hlX3N0b3JlX3RhZ19kYXRhIChHc3RUYWdDYWNoZSAqc2VsZiwgY29uc3QgZ2NoYXIgKnVyaSwgR3N0VGFnTGlzdCAqdGFncyk7Ci0KLVRlc3RzCi1+fn5+fgotCi0qIHdyaXRlIGEgZ2VuZXJpYyB0ZXN0IGZvciBwYXJzZXJzL2RlbXV4ZXJzIHRvIGVuc3VyZSB0aGV5IHNlbmQgdGFncyB1bnRpbCB0aGV5Ci0gIHJlYWNoZWQgUEFVU0VEIChlbGVtZW50cyBuZWVkIHRvIHBhcnNlIGZpbGUgZm9yIHByZXJvbGxpbmcgYW55d2F5KToKLSAgc2V0IHBpcGVsaW5lIHRvIHBhdXNlZCwgY2hlY2sgZm9yIHRhZ3MsIHNldCB0byBwbGF5aW5nLCBlcnJvciBvdXQgaWYgdGFncyBjb21lCi0gIGFmdGVyIHBhdXNlZAotCi1Db2RlIExvY2F0aW9ucwotfn5+fn5+fn5+fn5+fn4KLQotKiB0YWdyZWFkYmluIC0+IGdzdC1wbHVnaW5zLWJhc2UvZ3N0L3RhZ3JlYWQKLSogdGFncmVhZGVyaWZhY2UgLT4gZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvdGFnCi0KLVJldXNlCi1+fn5+fgotCi0qIG9nZyA6IGdzdC1wbHVnaW5zLWJhc2UvZXh0L29nZwotKiBhdmkgOiBnc3QtcGx1Z2lucy1nb29kL2dzdC9hdmkKLSogbXAzIDogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvaWQzZGVtdXgKLSogd2F2IDogZ3N0LXBsdWdpbnMtZ29vZC9nc3Qvd2F2cGFyc2UKLSogcXQgIDogZ3N0LXBsdWdpbnMtYmFkL2dzdC9xdGRlbXV4Ci0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtTVQtcmVmY291bnRpbmcudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OTE5YjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1NVC1yZWZjb3VudGluZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MTcgKzAsMCBAQAotQ29udmVudGlvbnMgZm9yIHRocmVhZCBhIHNhZmUgQVBJCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIEdTdHJlYW1lciBBUEkgaXMgZGVzaWduZWQgdG8gYmUgdGhyZWFkIHNhZmUuIFRoaXMgbWVhbnMgdGhhdCBBUEkgZnVuY3Rpb25zCi1jYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLiBHU3RyZWFtZXIgaW50ZXJuYWxseSB1c2VzCi10aHJlYWRzIHRvIHBlcmZvcm0gdGhlIGRhdGEgcGFzc2luZyBhbmQgdmFyaW91cyBhc3luY2hyb25vdXMgc2VydmljZXMgc3VjaCBhcwotdGhlIGNsb2NrIGNhbiBhbHNvIHVzZSB0aHJlYWRzLgotCi1UaGlzIGRlc2lnbiBkZWNpc2lvbiBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgdXNhZ2Ugb2YgdGhlIEFQSSBhbmQgdGhlIG9iamVjdHMKLXdoaWNoIHRoaXMgZG9jdW1lbnQgZXhwbGFpbnMuCi0KLU1UIHNhZmV0eSB0ZWNobmlxdWVzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1TZXZlcmFsIGRlc2lnbiBwYXR0ZXJucyBhcmUgdXNlZCB0byBndWFyYW50ZWUgb2JqZWN0IGNvbnNpc3RlbmN5IGluIEdTdHJlYW1lci4KLVRoaXMgaXMgYW4gb3ZlcnZpZXcgb2YgdGhlIG1ldGhvZHMgdXNlZCBpbiB2YXJpb3VzIEdTdHJlYW1lciBzdWJzeXN0ZW1zLgotCi1SZWZjb3VudGluZzoKLQotICBBbGwgc2hhcmVkIG9iamVjdHMgaGF2ZSBhIHJlZmNvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBFYWNoIHJlZmVyZW5jZQotICBvYnRhaW5lZCB0byB0aGUgb2JqZWN0IHNob3VsZCBpbmNyZWFzZSB0aGUgcmVmY291bnQgYW5kIGVhY2ggcmVmZXJlbmNlIGxvc3QKLSAgc2hvdWxkIGRlY3JlYXNlIHRoZSByZWZjb3VudC4KLQotICBUaGUgcmVmY291bnRpbmcgaXMgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIGFub3RoZXIgdGhyZWFkIGRlc3Ryb3lzIHRoZQotICBvYmplY3QsIHRoZSBvbmVzIHdoaWNoIHN0aWxsIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBkbyBub3QgcmVhZCBmcm9tCi0gIGludmFsaWQgbWVtb3J5IHdoZW4gYWNjZXNzaW5nIHRoZSBvYmplY3QuCi0KLSAgUmVmY291bnRpbmcgaXMgYWxzbyB1c2VkIHRvIGVuc3VyZSB0aGF0IG11dGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBvbmx5Ci0gIG1vZGlmaWVkIHdoZW4gdGhleSBhcmUgb3duZWQgYnkgdGhlIGNhbGxpbmcgY29kZS4KLQotICBJdCBpcyBhIHJlcXVpcmVtZW50IHRoYXQgd2hlbiB0d28gdGhyZWFkcyBoYXZlIGEgaGFuZGxlIG9uIGFuIG9iamVjdCwgdGhlCi0gIHJlZmNvdW50IG11c3QgYmUgbW9yZSB0aGFuIG9uZS4gVGhpcyBtZWFucyB0aGF0IHdoZW4gb25lIHRocmVhZCBwYXNzZXMgYW4KLSAgb2JqZWN0IHRvIGFub3RoZXIgdGhyZWFkIGl0IG11c3QgaW5jcmVhc2UgdGhlIHJlZmNvdW50LiBUaGlzIHJlcXVpcmVtZW50IG1ha2VzCi0gIHN1cmUgdGhhdCBvbmUgdGhyZWFkIGNhbm5vdCBzdWRkZW5seSBkaXNwb3NlIHRoZSBvYmplY3QgbWFraW5nIHRoZSBvdGhlcgotICB0aHJlYWQgY3Jhc2ggd2hlbiBpdCB0cmllcyB0byBhY2Nlc3MgdGhlIHBvaW50ZXIgdG8gaW52YWxpZCBtZW1vcnkuCi0KLVNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIHdyaXRhYmlsaXR5OgotCi0gIEFsbCBvYmplY3RzIGhhdmUgYSByZWZjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhlbS4gRWFjaCByZWZlcmVuY2Ugb2J0YWluZWQgdG8KLSAgdGhlIG9iamVjdCBzaG91bGQgaW5jcmVhc2UgdGhlIHJlZmNvdW50IGFuZCBlYWNoIHJlZmVyZW5jZSBsb3N0IHNob3VsZAotICBkZWNyZWFzZSB0aGUgcmVmY291bnQuCi0KLSAgRWFjaCB0aHJlYWQgaGF2aW5nIGEgcmVmY291bnQgdG8gdGhlIG9iamVjdCBjYW4gc2FmZWx5IHJlYWQgZnJvbSB0aGUgb2JqZWN0LgotICBidXQgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRoZSBvYmplY3Qgc2hvdWxkIGJlIHByZWNlZGVkIHdpdGggYQotICBfZ2V0X3dyaXRhYmxlKCkgZnVuY3Rpb24gY2FsbC4gVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIHRoZSByZWZjb3VudCBvZiB0aGUKLSAgb2JqZWN0IGFuZCBpZiB0aGUgb2JqZWN0IGlzIHJlZmVyZW5jZWQgYnkgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSwgYSBjb3B5IGlzCi0gIG1hZGUgb2YgdGhlIG9iamVjdCB0aGF0IGlzIHRoZW4gYnkgZGVmaW5pdGlvbiBvbmx5IHJlZmVyZW5jZWQgZnJvbSB0aGUgY2FsbGluZwotICB0aHJlYWQuIFRoaXMgbmV3IGNvcHkgaXMgdGhlbiBtb2RpZmlhYmxlIHdpdGhvdXQgYmVpbmcgdmlzaWJsZSB0byBvdGhlcgotICByZWZjb3VudCBob2xkZXJzLgotCi0gIFRoaXMgdGVjaG5pcXVlIGlzIHVzZWQgZm9yIGluZm9ybWF0aW9uIG9iamVjdHMgdGhhdCwgb25jZSBjcmVhdGVkLCBuZXZlcgotICBjaGFuZ2UgdGhlaXIgdmFsdWVzLiBUaGUgbGlmZXRpbWUgb2YgdGhlc2Ugb2JqZWN0cyBpcyBnZW5lcmFsbHkgc2hvcnQsIHRoZQotICBvYmplY3RzIGFyZSB1c3VhbGx5IHNpbXBsZSBhbmQgY2hlYXAgdG8gY29weS9jcmVhdGUuCi0KLSAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IG5vIHJlYWRlci93cml0ZXJzIGxvY2tzIGFyZSBuZWVkZWQuIGFsbAotICB0aHJlYWRzIGNhbiBjb25jdXJyZW50bHkgcmVhZCBidXQgd3JpdGVzIGhhcHBlbiBsb2NhbGx5IG9uIGEgbmV3IGNvcHkuIEluIG1vc3QKLSAgY2FzZXMgX2dldF93cml0YWJsZSgpIGNhbiBhdm9pZCBhIHJlYWwgY29weSBiZWNhdXNlIHRoZSBjYWxsaW5nIG1ldGhvZCBpcyB0aGUKLSAgb25seSBvbmUgaG9sZGluZyBhIHJlZmVyZW5jZSwgd2hpY2ggbWFrZXMgcmVhZC93cml0ZSB2ZXJ5IGNoZWFwLgotCi0gIFRoZSBkcmF3YmFjayBpcyB0aGF0IHNvbWV0aW1lcyAxIG5lZWRsZXNzIGNvcHkgY2FuIGJlIGRvbmUuIFRoaXMgd291bGQgaGFwcGVuCi0gIHdoZW4gTiB0aHJlYWRzIGNhbGwgX2dldF93cml0YWJsZSgpIGF0IHRoZSBzYW1lIHRpbWUsIGFsbCBzZWVpbmcgdGhhdCBOCi0gIHJlZmVyZW5jZXMgYXJlIGhlbGQgb24gdGhlIG9iamVjdC4gSW4gdGhpcyBjYXNlIDEgY29weSB0b28gbWFueSB3aWxsIGJlIGRvbmUuCi0gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpbiBhbnkgcHJhY3RpY2FsIHNpdHVhdGlvbiBiZWNhdXNlIHRoZSBjb3B5IG9wZXJhdGlvbiBpcwotICBmYXN0LgotIAotTXV0YWJsZSBzdWJzdHJ1Y3R1cmVzOgotCi0gIFNwZWNpYWwgdGVjaG5pcXVlcyBhcmUgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgY29uc2lzdGVuY3kgb2YgY29tcG91bmQgc2hhcmVkCi0gIG9iamVjdHMuIEFzIG1lbnRpb25lZCBhYm92ZSwgc2hhcmVkIG9iamVjdHMgbmVlZCB0byBoYXZlIGEgcmVmZXJlbmNlIGNvdW50IG9mCi0gIDEgaWYgdGhleSBhcmUgdG8gYmUgbW9kaWZpZWQuIEltcGxpY2l0IGluIHRoaXMgYXNzdW1wdGlvbiBpcyB0aGF0IGFsbCBwYXJ0cyBvZgotICB0aGUgc2hhcmVkIG9iamVjdCBiZWxvbmcgb25seSB0byB0aGUgb2JqZWN0LiBGb3IgZXhhbXBsZSwgYSBHc3RTdHJ1Y3R1cmUgaW4KLSAgb25lIEdzdENhcHMgb2JqZWN0IHNob3VsZCBub3QgYmVsb25nIHRvIGFueSBvdGhlciBHc3RDYXBzIG9iamVjdC4gVGhpcwotICBjb25kaXRpb24gc3VnZ2VzdHMgYSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwOiBzdHJ1Y3R1cmVzIGNhbiBvbmx5IGJlIGFkZGVkCi0gIHRvIHBhcmVudCBvYmplY3QgaWYgdGhleSBkbyBub3QgYWxyZWFkeSBoYXZlIGEgcGFyZW50IG9iamVjdC4KLQotICBJbiBhZGRpdGlvbiwgdGhlc2Ugc3Vic3RydWN0dXJlcyBtdXN0IG5vdCBiZSBtb2RpZmllZCB3aGlsZSBtb3JlIHRoYW4gb25lIGNvZGUKLSAgc2VnbWVudCBoYXMgYSByZWZlcmVuY2Ugb24gdGhlIHBhcmVudCBvYmplY3QuIEZvciBleGFtcGxlLCBpZiB0aGUgdXNlciBjcmVhdGVzCi0gIGEgR3N0U3RydWN0dXJlLCBhZGRzIGl0IHRvIGEgR3N0Q2FwcywgYW5kIHRoZSBHc3RDYXBzIGlzIHRoZW4gcmVmZXJlbmNlZCBieQotICBvdGhlciBjb2RlIHNlZ21lbnRzLCB0aGUgR3N0U3RydWN0dXJlIHNob3VsZCB0aGVuIGJlY29tZSBpbW11dGFibGUsIHNvIHRoYXQKLSAgY2hhbmdlcyB0byB0aGF0IGRhdGEgc3RydWN0dXJlIGRvIG5vdCBhZmZlY3Qgb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFRoaXMKLSAgbWVhbnMgdGhhdCB0aGUgY2hpbGQgaXMgb25seSBtdXRhYmxlIHdoZW4gdGhlIHBhcmVudCdzIHJlZmVyZW5jZSBjb3VudCBpcyAxLAotICBhcyB3ZWxsIGFzIHdoZW4gdGhlIGNoaWxkIHN0cnVjdHVyZSBoYXMgbm8gcGFyZW50LgotCi0gIFRoZSBnZW5lcmFsIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBpbmNsdWRlIGEgZmllbGQgaW4gY2hpbGQgc3RydWN0dXJlcwotICBwb2ludGluZyB0byB0aGUgcGFyZW50J3MgYXRvbWljIHJlZmVyZW5jZSBjb3VudC4gV2hlbiBzZXQgdG8gTlVMTCwgdGhpcwotICBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hpbGQgaGFzIG5vIHBhcmVudC4gT3RoZXJ3aXNlLCBwcm9jZWR1cmVzIHRoYXQgbW9kaWZ5IHRoZQotICBjaGlsZCBzdHJ1Y3R1cmUgbXVzdCBjaGVjayBpZiB0aGUgcGFyZW50J3MgcmVmY291bnQgaXMgMSwgYW5kIG90aGVyd2lzZSBtdXN0Ci0gIGNhdXNlIGFuIGVycm9yIHRvIGJlIHNpZ25hbGVkLgotCi0gIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbDsgYXBwbGljYXRpb24gb3IgcGx1Z2luCi0gIGNvZGUgdGhhdCBjYWxscyBfZ2V0X3dyaXRhYmxlKCkgb24gYW4gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gcmVjZWl2ZSBhbgotICBvYmplY3Qgb2YgcmVmY291bnQgMSwgd2hpY2ggbXVzdCB0aGVuIGJlIHdyaXRhYmxlLiBUaGUgb25seSB0cmljayBpcyB0aGF0IGEKLSAgcG9pbnRlciB0byBhIGNoaWxkIHN0cnVjdHVyZSBvZiBhbiBvYmplY3QgaXMgb25seSB2YWxpZCB3aGlsZSB0aGUgY2FsbGluZyBjb2RlCi0gIGhhcyBhIHJlZmVyZW5jZSBvbiB0aGUgcGFyZW50IG9iamVjdCwgYmVjYXVzZSB0aGUgcGFyZW50IGlzIHRoZSBvd25lciBvZiB0aGUKLSAgY2hpbGQuCi0KLU9iamVjdCBsb2NraW5nOgotCi0gIEZvciBvYmplY3RzIHRoYXQgY29udGFpbiBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhbGx5IGhhdmUgYSBsb25nZXIKLSAgbGlmZXRpbWUsIG9iamVjdCBsb2NraW5nIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlCi0gIG9iamVjdC4KLQotICBBbGwgcmVhZGVycyBhbmQgd3JpdGVycyBhY3F1aXJlIHRoZSBsb2NrIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIG9iamVjdC4gT25seSBvbmUKLSAgdGhyZWFkIGlzIGFsbG93ZWQgYWNjZXNzIHRoZSBwcm90ZWN0ZWQgc3RydWN0dXJlcyBhdCBhIHRpbWUuCi0KLSAgT2JqZWN0IGxvY2tpbmcgaXMgdXNlZCBmb3IgYWxsIG9iamVjdHMgZXh0ZW5kaW5nIGZyb20gR3N0T2JqZWN0IHN1Y2ggYXMKLSAgR3N0RWxlbWVudCwgR3N0UGFkLgotCi0gIE9iamVjdCBsb2NraW5nIGNhbiBiZSBkb25lIHdpdGggcmVjdXJzaXZlIGxvY2tzIG9yIHJlZ3VsYXIgbXV0ZXhlcy4gT2JqZWN0Ci0gIGxvY2tzIGluIEdTdHJlYW1lciBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtdXRleGVzIHdoaWNoIGNhdXNlIGRlYWRsb2NrcyB3aGVuCi0gIGxvY2tlZCByZWN1cnNpdmVseSBmcm9tIHRoZSBzYW1lIHRocmVhZC4gVGhpcyBpcyBkb25lIGJlY2F1c2UgcmVndWxhciBtdXRleGVzCi0gIGFyZSBjaGVhcGVyLgotCi1BdG9taWMgb3BlcmF0aW9ucwotCi0gIEF0b21pYyBvcGVyYXRpb25zIGFyZSBvcGVyYXRpb25zIHRoYXQgYXJlIHBlcmZvcm1lZCBhcyBvbmUgY29uc2lzdGVudAotICBvcGVyYXRpb24gZXZlbiB3aGVuIGV4ZWN1dGVkIGJ5IG11bHRpcGxlIHRocmVhZHMuIFRoZXkgZG8gaG93ZXZlciBub3QgdXNlIHRoZQotICBjb252ZW50aW9uYWwgYXByb2FjaCBvZiB1c2luZyBtdXRleGVzIHRvIHByb3RlY3QgdGhlIGNyaXRpY2FsIHNlY3Rpb24gYnV0IHJlbHkKLSAgb24gQ1BVIGZlYXR1cmVzIGFuZCBpbnN0cnVjdGlvbnMuCi0KLSAgVGhlIGFkdmFudGFnZXMgYXJlIG1vc3RseSBzcGVlZCByZWxhdGVkIHNpbmNlIHRoZXJlIGFyZSBubyBoZWF2eXdlaWdodCBsb2NrcwotICBpbnZvbHZlZC4gTW9zdCBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgYWxzbyBkbyBub3QgY2F1c2UgYSBjb250ZXh0IHN3aXRjaCBpbiBjYXNlCi0gIG9mIGNvbmN1cnJlbnQgYWNjZXNzIGJ1dCB1c2UgYSByZXRyeSBtZWNoYW5pc20gb3Igc3BpbmxvY2tpbmcuCi0KLSAgRGlzYWR2YW50YWdlcyBhcmUgdGhhdCBlYWNoIG9mIHRoZXNlIGluc3RydWN0aW9ucyB1c3VhbGx5IGNhdXNlIGEgY2FjaGUgZmx1c2gKLSAgb24gbXVsdGktQ1BVIG1hY2hpbmVzIHdoZW4gdHdvIHByb2Nlc3NvcnMgcGVyZm9ybSBjb25jdXJyZW50IGFjY2Vzcy4KLQotICBBdG9taWMgb3BlcmF0aW9ucyBhcmUgZ2VuZXJhbGx5IHVzZWQgZm9yIHJlZmNvdW50aW5nIGFuZCBmb3IgdGhlIGFsbG9jYXRpb24gb2YKLSAgc21hbGwgZml4ZWQgc2l6ZSBvYmplY3RzIGluIGEgbWVtY2h1bmsuIFRoZXkgY2FuIGFsc28gYmUgdXNlZCB0byBpbXBsZW1lbnQgYQotICBsb2NrZnJlZSBsaXN0IG9yIHN0YWNrLgotCi1Db21wYXJlIGFuZCBzd2FwCi0KLSAgQXMgcGFydCBvZiB0aGUgYXRvbWljIG9wZXJhdGlvbnMsIGNvbXBhcmUtYW5kLXN3YXAgKENBUykgY2FuIGJlIHVzZWQgdG8gYWNjZXNzCi0gIG9yIHVwZGF0ZSBhIHNpbmdsZSBwcm9wZXJ0eSBvciBwb2ludGVyIGluIGFuIG9iamVjdCB3aXRob3V0IGhhdmluZyB0byB0YWtlIGEKLSAgbG9jay4KLQotICBUaGlzIHRlY2huaXF1ZSBpcyBjdXJyZW50bHkgbm90IHVzZWQgaW4gR1N0cmVhbWVyIGJ1dCBtaWdodCBiZSBhZGRlZCBpbiB0aGUKLSAgZnV0dXJlIGluIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHBsYWNlcy4KLSAKLQotT2JqZWN0cwotfn5+fn5+fgotCi0qIExvY2tpbmcgaW52b2x2ZWQ6Ci0KLSAgICAtIGF0b21pYyBvcGVyYXRpb25zIGZvciByZWZjb3VudGluZwotICAgIC0gb2JqZWN0IGxvY2tpbmcKLQotICBBbGwgb2JqZWN0cyBzaG91bGQgaGF2ZSBhIGxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIFRoaXMgbG9jayBpcyB1c2VkIHRvIGtlZXAKLSAgaW50ZXJuYWwgY29uc2lzdGVuY3kgd2hlbiBtdWx0aXBsZSB0aHJlYWRzIGNhbGwgQVBJIGZ1bmN0aW9uIG9uIHRoZSBvYmplY3QuCi0KLSAgRm9yIG9iamVjdHMgdGhhdCBleHRlbmQgdGhlIEdTdHJlYW1lciBiYXNlIG9iamVjdCBjbGFzcyB0aGlzIGxvY2sgY2FuIGJlCi0gIG9idGFpbmVkIHdpdGggdGhlIG1hY3JvcyBHU1RfT0JKRUNUX0xPQ0soKSBhbmQgR1NUX09CSkVDVF9VTkxPQ0soKS4gRm9yIG90aGVyIG9iamVjdCB0aGF0IGRvCi0gIG5vdCBleHRlbmQgZnJvbSB0aGUgYmFzZSBHc3RPYmplY3QgY2xhc3MgdGhlc2UgbWFjcm9zIGNhbiBiZSBkaWZmZXJlbnQuCi0KLSogcmVmY291bnRpbmcKLQotICBBbGwgbmV3IG9iamVjdHMgY3JlYXRlZCBoYXZlIHRoZSBGTE9BVElORyBmbGFnIHNldC4gVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3QKLSAgaXMgbm90IG93bmVkIG9yIG1hbmFnZWQgeWV0IGJ5IGFueWJvZHkgb3RoZXIgdGhhbiB0aGUgb25lIGhvbGRpbmcgYSByZWZlcmVuY2UKLSAgdG8gdGhlIG9iamVjdC4gVGhlIG9iamVjdCBpbiB0aGlzIHN0YXRlIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgotCi0gIFZhcmlvdXMgb2JqZWN0IG1ldGhvZHMgY2FuIHRha2Ugb3duZXJzaGlwIG9mIGFub3RoZXIgb2JqZWN0LCB0aGlzIG1lYW5zIHRoYXQKLSAgYWZ0ZXIgY2FsbGluZyBhIG1ldGhvZCBvbiBvYmplY3QgQSB3aXRoIGFuIG9iamVjdCBCIGFzIGFuIGFyZ3VtZW50LCB0aGUgb2JqZWN0Ci0gIEIgaXMgbWFkZSBzb2xlIHByb3BlcnR5IG9mIG9iamVjdCBBLiBUaGlzIG1lYW5zIHRoYXQgYWZ0ZXIgdGhlIG1ldGhvZCBjYWxsIHlvdQotICBhcmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBvYmplY3QgYW55bW9yZSB1bmxlc3MgeW91IGtlZXAgYW4gZXh0cmEKLSAgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QuIEFuIGV4YW1wbGUgb2Ygc3VjaCBhIG1ldGhvZCBpcyB0aGUgX2Jpbl9hZGQoKSBtZXRob2QuCi0gIEFzIHNvb24gYXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYSBCaW4sIHRoZSBlbGVtZW50IHBhc3NlZCBhcyBhbiBhcmd1bWVudAotICBpcyBvd25lZCBieSB0aGUgYmluIGFuZCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGFjY2VzcyBpdCBhbnltb3JlIHdpdGhvdXQKLSAgdGFraW5nIGEgX3JlZigpIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGJpbi4gVGhlIHJlYXNvbiBiZWluZyB0aGF0IGFmdGVyIHRoZQotICBfYmluX2FkZCgpIGNhbGwgZGlzcG9zaW5nIHRoZSBiaW4gYWxzbyBkZXN0cm95cyB0aGUgZWxlbWVudC4KLQotICBUYWtpbmcgb3duZXJzaGlwIG9mIGFuIG9iamVjdCBoYXBwZW5zIHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgInNpbmtpbmciIHRoZQotICBvYmplY3QuIHRoZSBfc2luaygpIG1ldGhvZCBvbiBhbiBvYmplY3Qgd2lsbCBkZWNyZWFzZSB0aGUgcmVmY291bnQgb2YgdGhlCi0gIG9iamVjdCBpZiB0aGUgRkxPQVRJTkcgZmxhZyBpcyBzZXQuIFRoZSBhY3Qgb2YgdGFraW5nIG93bmVyc2hpcCBvZiBhbiBvYmplY3QKLSAgaXMgdGhlbiBwZXJmb3JtZWQgYXMgYSBfcmVmKCkgZm9sbG93ZWQgYnkgYSBfc2luaygpIGNhbGwgb24gdGhlIG9iamVjdC4KLQotICBUaGUgZmxvYXQvc2luayBwcm9jZXNzIGlzIHZlcnkgdXNlZnVsIHdoZW4gaW5pdGlhbGl6aW5nIGVsZW1lbnRzIHRoYXQgd2lsbAotICB0aGVuIGJlIHBsYWNlZCB1bmRlciBjb250cm9sIG9mIGEgcGFyZW50LiBUaGUgZmxvYXRpbmcgcmVmIGtlZXBzIHRoZSBvYmplY3QKLSAgYWxpdmUgdW50aWwgaXQgaXMgcGFyZW50ZWQsIGFuZCBvbmNlIHRoZSBvYmplY3QgaXMgcGFyZW50ZWQgeW91IGNhbiBmb3JnZXQKLSAgYWJvdXQgaXQuCi0KLSAgYWxzbyBzZWUgcGFydC1yZWxhdGlvbnMudHh0Ci0gIAotKiBwYXJlbnQtY2hpbGQgcmVsYXRpb25zCi0KLSAgT25lIGNhbiBjcmVhdGUgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgX29iamVjdF9zZXRfcGFyZW50KCkKLSAgbWV0aG9kLiBUaGlzIG1ldGhvZCByZWZzIGFuZCBzaW5rcyB0aGUgb2JqZWN0IGFuZCBhc3NpZ25zIGl0cyBwYXJlbnQgcHJvcGVydHkKLSAgdG8gdGhhdCBvZiB0aGUgbWFuYWdpbmcgcGFyZW50LgotCi0gIFRoZSBjaGlsZCBpcyBzYWlkIHRvIGhhdmUgYSB3ZWFrIGxpbmsgdG8gdGhlIHBhcmVudCBzaW5jZSB0aGUgcmVmY291bnQgb2YgdGhlCi0gIHBhcmVudCBpcyBub3QgaW5jcmVhc2VkIGluIHRoaXMgcHJvY2Vzcy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBwYXJlbnQgaXMKLSAgZGlzcG9zZWQgaXQgaGFzIHRvIHVuc2V0IGl0c2VsZiBhcyB0aGUgcGFyZW50IG9mIHRoZSBvYmplY3QgYmVmb3JlIGRpc3Bvc2luZwotICBpdHNlbGYsIGVsc2UgdGhlIGNoaWxkIG9iamVjdCBob2xkcyBhIHBhcmVudCBwb2ludGVyIHRvIGludmFsaWQgbWVtb3J5LgotICAKLSAgVGhlIHJlc3BvbnNpYmlsaXRpZXMgZm9yIGFuIG9iamVjdCB0aGF0IHNpbmtzIG90aGVyIG9iamVjdHMgYXJlIHN1bW1hcmlzZWQgYXM6Ci0KLSAgIC0gdGFraW5nIG93bmVyc2hpcCBvZiB0aGUgb2JqZWN0Ci0gICAgIC0gY2FsbCBfb2JqZWN0X3NldF9wYXJlbnQoKSB0byBzZXQgaXRzZWxmIGFzIHRoZSBvYmplY3QgcGFyZW50LCB0aGlzIGNhbGwKLSAgICAgICB3aWxsIF9yZWYoKSBhbmQgX3NpbmsoKSB0aGUgb2JqZWN0LgotICAgICAtIGtlZXAgcmVmZXJlbmNlIHRvIG9iamVjdCBpbiBhIGRhdGFzdHJ1Y3R1cmUgc3VjaCBhcyBhIGxpc3Qgb3IgYXJyYXkuCi0KLSAgIC0gb24gZGlzcG9zZQotICAgICAtIGNhbGwgX29iamVjdF91bnBhcmVudCgpIHRvIHJlc2V0IHRoZSBwYXJlbnQgcHJvcGVydHkgYW5kIHVucmVmIHRoZQotICAgICAgIG9iamVjdC4KLSAgICAgLSByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBsaXN0LgotCi0gIGFsc28gc2VlIHBhcnQtcmVsYXRpb25zLnR4dAotCi0qIFByb3BlcnRpZXMKLSAgCi0gIE1vc3Qgb2JqZWN0cyBhbHNvIGV4cG9zZSBzdGF0ZSBpbmZvcm1hdGlvbiB3aXRoIHB1YmxpYyBwcm9wZXJ0aWVzIGluIHRoZQotICBvYmplY3QuIFR3byB0eXBlcyBvZiBwcm9wZXJ0aWVzIG1pZ2h0IGV4aXN0OiBhY2Nlc3NpYmxlIHdpdGggb3Igd2l0aG91dAotICBob2xkaW5nIHRoZSBvYmplY3QgbG9jay4gQWxsIHByb3BlcnRpZXMgc2hvdWxkIG9ubHkgYmUgYWNjZXNzZWQgd2l0aCB0aGVpcgotICBjb3JyZXNwb25kaW5nIG1hY3Jvcy4gVGhlIHB1YmxpYyBvYmplY3QgcHJvcGVydGllcyBhcmUgbWFya2VkIGluIHRoZSAuaCBmaWxlcwotICB3aXRoIC8qPCBwdWJsaWMgPiovLiBUaGUgcHVibGljIHByb3BlcnRpZXMgdGhhdCByZXF1aXJlIGEgbG9jayB0byBiZSBoZWxkIGFyZQotICBtYXJrZWQgd2l0aCAvKjwgcHVibGljID4qLyAvKiB3aXRoIDxsb2NrX3R5cGU+ICovLCB3aGVyZSA8bG9ja190eXBlPiBjYW4gYmUKLSAgIkxPQ0siIG9yICJTVEFURV9MT0NLIiBvciBhbnkgb3RoZXIgbG9jayB0byBtYXJrIHRoZSB0eXBlKHMpIG9mIGxvY2sgdG8gYmUgCi0gIGhlbGQuCi0KLSAgRXhhbXBsZToKLQotICAgIGluIEdzdFBhZCB0aGVyZSBpcyBhIHB1YmxpYyBwcm9wZXJ0eSAiZGlyZWN0aW9uIi4gSXQgY2FuIGJlIGZvdW5kIGluIHRoZQotICAgIHNlY3Rpb24gbWFya2VkIGFzIHB1YmxpYyBhbmQgcmVxdWlyaW5nIHRoZSBMT0NLIHRvIGJlIGhlbGQuIFRoZXJlIGV4aXN0cwotICAgIGFsc28gYSBtYWNybyB0byBhY2Nlc3MgdGhlIHByb3BlcnR5LgotCi0gICAgICBzdHJ1Y3QgX0dzdFJlYWxQYWQgewotICAgICAgICAuLi4KLSAgICAgICAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBMT0NLICovCi0gICAgICAgIC4uLgotICAgICAgICBHc3RQYWREaXJlY3Rpb24gICAgICAgICAgICAgICAgZGlyZWN0aW9uOwotICAgICAgICAuLi4KLSAgICAgIH07Ci0KLSAgICAgICNkZWZpbmUgR1NUX1JQQURfRElSRUNUSU9OKHBhZCkgICAgICAoR1NUX1JFQUxfUEFEX0NBU1QocGFkKS0+ZGlyZWN0aW9uKQotICAKLSAgICBBY2Nlc3NpbmcgdGhlIHByb3BlcnR5IGlzIHRoZXJlZm9yZSBhbGxvd2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIGV4YW1wbGU6Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgICAgIGRpcmVjdGlvbiA9IEdTVF9SUEFEX0RJUkVDVElPTiAocGFkKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0qIFByb3BlcnR5IGxpZmV0aW1lCi0KLSAgQWxsIHByb3BlcnRpZXMgcmVxdWlyaW5nIGEgbG9jayBjYW4gY2hhbmdlIGFmdGVyIHJlbGVhc2luZyB0aGUgYXNzb2NpYXRlZAotICBsb2NrLiBUaGlzIG1lYW5zIHRoYXQgYXMgbG9uZyBhcyB5b3UgaG9sZCB0aGUgbG9jaywgdGhlIHN0YXRlIG9mIHRoZQotICBvYmplY3QgcmVnYXJkaW5nIHRoZSBsb2NrZWQgcHJvcGVydGllcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGluZm9ybWF0aW9uCi0gIG9idGFpbmVkLiBBcyBzb29uIGFzIHRoZSBsb2NrIGlzIHJlbGVhc2VkLCBhbnkgdmFsdWVzIGFjcXVpcmVkIGZyb20gdGhlCi0gIHByb3BlcnRpZXMgbWlnaHQgbm90IGJlIHZhbGlkIGFueW1vcmUgYW5kIGNhbiBhcyBiZXN0IGJlIGRlc2NyaWJlZCBhcyBhCi0gIHNuYXBzaG90IG9mIHRoZSBzdGF0ZSB3aGVuIHRoZSBsb2NrIHdhcyBoZWxkLgotCi0gIFRoaXMgbWVhbnMgdGhhdCBhbGwgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgYWNjZXNzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhlCi0gIGNyaXRpYWwgc2VjdGlvbiBzaG91bGQgYmUgY29waWVkIG9yIHJlZmNvdW50ZWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jay4KLQotICBNb3N0IG9iamVjdCBwcm92aWRlIGEgX2dldF88cHJvcGVydHk+KCkgbWV0aG9kIHRvIGdldCBhIGNvcHkgb3IgcmVmY291bnRlZAotICBpbnN0YW5jZSBvZiB0aGUgcHJvcGVydHkgdmFsdWUuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCB3b3J5IGFib3V0IGFueSBsb2NrcwotICBidXQgc2hvdWxkIHVucmVmL2ZyZWUgdGhlIG9iamVjdCBhZnRlciB1c2FnZS4KLQotICBFeGFtcGxlOgotCi0gICAgdGhlIGZvbGxvd2luZyBleGFtcGxlIGNvcnJlY3RseSBnZXRzIHRoZSBwZWVyIHBhZCBvZiBhbiBlbGVtZW50LiBJdCBpcwotICAgIHJlcXVpcmVkIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudCBvZiB0aGUgcGVlciBwYWQgYmVjYXVzZSBhcyBzb29uIGFzIHRoZQotICAgIGxvY2sgaXMgcmVsZWFzZWQsIHRoZSBwZWVyIGNvdWxkIGJlIHVucmVmZmVkIGFuZCBkaXNwb3NlZCwgbWFraW5nIHRoZQotICAgIHBvaW50ZXIgb2J0YWluZWQgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gcG9pbnQgdG8gaW52YWxpZCBtZW1vcnkuCi0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgICAgIHBlZXIgPSBHU1RfUlBBRF9QRUVSIChwYWQpOwotICAgICAgaWYgKHBlZXIpCi0gICAgICAgIGdzdF9vYmplY3RfcmVmIChHU1RfT0JKRUNUIChwZWVyKSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICAgIC4uLiB1c2UgcGVlciAuLi4KLQotICAgICAgaWYgKHBlZXIpCi0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBlZXIpKTsKLQotICAgIE5vdGUgdGhhdCBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2sgdGhlIHBlZXIgbWlnaHQgbm90IGFjdHVhbGx5IGJlIHRoZSBwZWVyCi0gICAgYW55bW9yZSBvZiB0aGUgcGFkLiBJZiB5b3UgbmVlZCB0byBiZSBzdXJlIGl0IGlzLCB5b3UgbmVlZCB0byBleHRlbmQgdGhlCi0gICAgY3JpdGljYWwgc2VjdGlvbiB0byBpbmNsdWRlIHRoZSBvcGVyYXRpb25zIG9uIHRoZSBwZWVyLgotCi0gICAgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlIGJ1dCB3aXRoIHVzaW5nIHRoZSBmdW5jdGlvbnMKLSAgICB0byBhY2Nlc3Mgb2JqZWN0IHByb3BlcnRpZXMuCi0KLSAgICAgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOwotICAgICAgaWYgKHBlZXIpIHsKLSAgICAgICAgLi4uIHVzZSBwZWVyIC4uLgotCi0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBlZXIpKTsKLSAgICAgIH0KLQotICBFeGFtcGxlOgotCi0gICAgQWNjZXNzaW5nIHRoZSBuYW1lIG9mIGFuIG9iamVjdCBtYWtlcyBhIGNvcHkgb2YgdGhlIG5hbWUuIFRoZSBjYWxsZXIgb2YgdGhlCi0gICAgZnVuY3Rpb24gc2hvdWxkIGdfZnJlZSgpIHRoZSBuYW1lIGFmdGVyIHVzYWdlLgotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCkKLSAgICAgIG5hbWUgPSBnX3N0cmR1cCAoR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpCi0gICAgICAuLi4gdXNlIG5hbWUgLi4uCi0KLSAgICAgIGdfZnJlZSAobmFtZSk7Ci0KLSAgICBvcjoKLQotICAgICAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKG9iamVjdCk7Ci0KLSAgICAgIC4uLiB1c2UgbmFtZSAuLi4KLQotICAgICAgZ19mcmVlIChuYW1lKTsKLSAgICAKLQotKiBBY2Nlc3NvciBtZXRob2RzCi0KLSAgRm9yIGFwbGljYXRpb25zIGl0IGlzIGVuY291cmFnZWQgdG8gdXNlIHRoZSBwdWJsaWMgbWV0aG9kcyBvZiB0aGUgb2JqZWN0LiBNb3N0Ci0gIHVzZWZ1bCBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgbWV0aG9kcyBzbyBpdCBpcyBzZWxkb20gcmVxdWlyZWQKLSAgdG8gYWNjZXNzIHRoZSBwdWJsaWMgZmllbGRzIG1hbnVhbGx5LgotCi0gIEFsbCBhY2Nlc3NvciBtZXRob2RzIHRoYXQgcmV0dXJuIGFuIG9iamVjdCBzaG91bGQgaW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIHRoZQotICByZXR1cm5lZCBvYmplY3QuIFRoZSBjYWxsZXIgc2hvdWxkIF91bnJlZigpIHRoZSBvYmplY3QgYWZ0ZXIgdXNhZ2UuIEVhY2gKLSAgbWV0aG9kIHNob3VsZCBzdGF0ZSB0aGlzIHJlZmNvdW50aW5nIHBvbGljeSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KLQotKiBBY2Nlc3NpbmcgbGlzdHMKLQotICBJZiB0aGUgb2JqZWN0IHByb3BlcnR5IGlzIGEgbGlzdCwgY29uY3VycmVudCBsaXN0IGl0ZXJhdGlvbiBpcyBuZWVkZWQgdG8gZ2V0Ci0gIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdC4gR1N0cmVhbWVyIHVzZXMgdGhlIGNvb2tpZSBtZWNoYW5pc20gdG8gbWFyayB0aGUgbGFzdAotICB1cGRhdGUgb2YgYSBsaXN0LiBUaGUgbGlzdCBhbmQgdGhlIGNvb2tpZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBzYW1lIGxvY2suIEVhY2gKLSAgdXBkYXRlIHRvIGEgbGlzdCByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGFjdGlvbnM6Ci0KLSAgIC0gYWNxdWlyZSBsb2NrCi0gICAtIHVwZGF0ZSBsaXN0Ci0gICAtIHVwZGF0ZSBjb29raWUKLSAgIC0gcmVsZWFzZSBsb2NrCi0KLSAgVXBkYXRpbmcgdGhlIGNvb2tpZSBpcyB1c3VhbGx5IGRvbmUgYnkgaW5jcmVtZW50aW5nIGl0cyB2YWx1ZSBieSBvbmUuIFNpbmNlCi0gIGNvb2tpZXMgdXNlIGd1aW50MzIgaXRzIHdyYXBhcm91bmQgaXMgZm9yIGFsbCBwcmFjdGljYWwgcmVhc29ucyBpcyBub3QgYQotICBwcm9ibGVtLgotCi0gIEl0ZXJhdGluZyBhIGxpc3QgY2FuIHNhZmVseSBiZSBkb25lIGJ5IHN1cnJvdW5kaW5nIHRoZSBsaXN0IGl0ZXJhdGlvbiB3aXRoIGEKLSAgbG9jay91bmxvY2sgb2YgdGhlIGxvY2suCi0KLSAgSW4gc29tZSBjYXNlcyBpdCBpcyBub3QgYSBnb29kIGlkZWEgdG8gaG9sZCB0aGUgbG9jayBmb3IgYSBsb25nIHRpbWUgd2hpbGUKLSAgaXRlcmF0aW5nIHRoZSBsaXN0LiBUaGUgc3RhdGUgY2hhbmdlIGNvZGUgZm9yIGEgYmluIGluIEdTdHJlYW1lciwgZm9yIGV4YW1wbGUsCi0gIGhhcyB0byBpdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IGFuZCBwZXJmb3JtIGEgYmxvY2tpbmcgY2FsbCBvbiBlYWNoIG9mIHRoZW0KLSAgcG90ZW50aWFsbHkgY2F1c2luZyBpbmZpbml0ZSBiaW4gbG9ja2luZy4gSW4gdGhpcyBjYXNlIHRoZSBjb29raWUgY2FuIGJlIHVzZWQgCi0gIHRvIGl0ZXJhdGUgYSBsaXN0LgotCi0gIEV4YW1wbGU6Ci0KLSAgICAgVGhlIGZvbGxvd2luZyBhbGdvcml0aG0gaXRlcmF0ZXMgYSBsaXN0IGFuZCByZXZlcnNlcyB0aGUgdXBkYXRlcyBpbiB0aGUKLSAgICAgY2FzZSBhIGNvbmN1cnJlbnQgdXBkYXRlIHdhcyBkb25lIHRvIHRoZSBsaXN0IHdoaWxlIGl0ZXJhdGluZy4gVGhlIGlkZWEgaXMKLSAgICAgdGhhdCB3aGVuZXZlciB3ZSByZWFjcXVpcmUgdGhlIGxvY2ssIHdlIGNoZWNrIGZvciB1cGRhdGVzIHRvIHRoZSBjb29raWUgdG8KLSAgICAgZGVjaWRlIGlmIHdlIGFyZSBzdGlsbCBpdGVyYXRpbmcgdGhlIHJpZ2h0IGxpc3QuCi0KLSAgICAgR1NUX09CSkVDVF9MT0NLIChsb2NrKTsKLSAgICAgLyogZ3JhYiBsaXN0IGFuZCBjb29raWUgKi8KLSAgICAgY29va2llID0gb2JqZWN0LT5saXN0X2Nvb2tpZTsKLSAgICAgbGlzdCA9IG9iamVjdC1saXN0OwotICAgICB3aGlsZSAobGlzdCkgewotICAgICAgIEdzdE9iamVjdCAqaXRlbSA9IEdTVF9PQkpFQ1QgKGxpc3QtPmRhdGEpOwotICAgICAgIC8qIG5lZWQgdG8gcmVmIHRoZSBpdGVtIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgKi8KLSAgICAgICBnc3Rfb2JqZWN0X3JlZiAoaXRlbSk7Ci0gICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGxvY2spOwotCi0gICAgICAgLi4uIHVzZS9jaGFuZ2UgaXRlbSBoZXJlLi4uCi0KLSAgICAgICAvKiByZWxlYXNlIGl0ZW0gaGVyZSAqLwotICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGl0ZW0pOwotICAKLSAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGxvY2spOwotICAgICAgIGlmIChjb29raWUgIT0gb2JqZWN0LT5saXN0X2Nvb2tpZSkgewotICAgICAgICAgLyogaGFuZGxlIHJvbGxiYWNrIGNhdXNlZCBieSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiAKLQkgICogb2YgdGhlIGxpc3QgaGVyZSAqLwotCi0JIC4uLnJvbGxiYWNrIGNoYW5nZXMgdG8gaXRlbXMuLi4KLQotCSAvKiBncmFiIG5ldyBjb29raWUgYW5kIGxpc3QgKi8KLQkgY29va2llID0gb2JqZWN0LT5saXN0X2Nvb2tpZTsKLQkgbGlzdCA9IG9iamVjdC0+bGlzdDsKLSAgICAgICB9Ci0gICAgICAgZWxzZSB7Ci0gICAgICAgICBsaXN0ID0gZ19saXN0X25leHQgKGxpc3QpOwotICAgICAgIH0KLSAgICAgfQotICAgICBHU1RfT0JKRUNUX1VOTE9DSyAobG9jayk7Ci0KLSogR3N0SXRlcmF0b3IKLQotICBHc3RJdGVyYXRvciBwcm92aWRlcyBhbiBlYXNpZXIgd2F5IG9mIHJldHJpZXZpbmcgZWxlbWVudHMgaW4gYSBjb25jdXJyZW50Ci0gIGxpc3QuIFRoZSBmb2xsb3dpbmcgY29kZSBleGFtcGxlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHByZXZpb3VzIGV4YW1wbGUuCi0gIAotICBFeGFtcGxlOgotICAgIAotICAgIGl0ID0gX2dldF9pdGVyYXRvcihvYmplY3QpOwotICAgIHdoaWxlICghZG9uZSkgewotICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSkgewotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLQotICAgICAgICAgIC4uLiB1c2UvY2hhbmdlIGl0ZW0gaGVyZS4uLgotCi0gICAgICAgICAgLyogcmVsZWFzZSBpdGVtIGhlcmUgKi8KLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChpdGVtKTsKLQkgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAgICAgLyogaGFuZGxlIHJvbGxiYWNrIGNhdXNlZCBieSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiAKLQkgICAqIG9mIHRoZSBsaXN0IGhlcmUgKi8KLQotCSAgLi4ucm9sbGJhY2sgY2hhbmdlcyB0byBpdGVtcy4uLgotCi0JICAvKiByZXN5bmMgaXRlcmF0b3IgdG8gc3RhcnQgYWdhaW4gKi8KLQkgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKLQkgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotCSAgZG9uZSA9IFRSVUU7Ci0JICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtVE9ETy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNzAxNTguLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1UT0RPLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLVRPRE8gLSBGdXR1cmUgRGV2ZWxvcG1lbnQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQVBJL0FCSQotfn5+fn5+fgotCi0tIGltcGxlbWVudCByZXR1cm4gdmFsdWVzIGZyb20gZXZlbnRzIGluIGFkZGl0aW9uIHRvIHRoZSBnYm9vbGVhbi4gVGhpcyBzaG91bGQKLSAgYmUgZG9uZSBieSBtYWtpbmcgdGhlIGV2ZW50IGNvbnRhaW4gYSBHc3RTdHJ1Y3R1cmUgd2l0aCBpbnB1dC9vdXRwdXQgdmFsdWVzLAotICBzaW1pbGFyIHRvIEdzdFF1ZXJ5LiBBIHR5cGljYWwgdXNlIGNhc2UgaXMgcGVyZm9ybWluZyBhIG5vbi1hY2N1cmF0ZSBzZWVrIHRvIGEKLSAga2V5ZnJhbWUsIGFmdGVyIHRoZSBzZWVrIHlvdSB3YW50IHRvIGdldCB0aGUgbmV3IHN0cmVhbSB0aW1lIHRoYXQgd2lsbAotICBhY3R1YWxseSBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgc2xpZGVyIGJhci4KLQotLSBtYWtlIGdzdF9wYWRfcHVzaF9ldmVudCgpIHJldHVybiBhIEdzdEZsb3dSZXR1cm4KLQotLSBHc3RFdmVudCwgR3N0TWVzc2FnZSByZWdpc3RlciBsaWtlIEdzdEZvcm1hdCBvciBHc3RRdWVyeS4KLQotLSBxdWVyeSBQT1NJVElPTi9EVVJBVElPTiByZXR1cm4gYWNjdXJhY3kuIEp1c3QgYSBmbGFnIG9yIGFjY3VyYWN5IHBlcmNlbnRhZ2UuCi0KLS0gdXNlIHwgaW5zdGVhZCBvZiArIGFzIGRpdmlkZXIgaW4gc2VyaWFsaXphdGlvbiBvZiBGbGFncwotICAoZ3N0dmFsdWUvZ3N0c3RydWN0dXJlKQotCi0tIHJldGhpbmsgaG93IHdlIGhhbmRsZSBkeW5hbWljIHJlcGx1Z2dpbmcgd3J0IHNlZ21lbnRzIGFuZCBvdGhlciBldmVudHMgdGhhdAotICBhbHJlYWR5IGdvdCBwdXNoZWQgYW5kIG5lZWQgdG8gYmUgcHVzaGVkIGFnYWluLiBNaWdodCBuZWVkIEdzdEZsb3dSZXR1cm4gZnJvbQotICBnc3RfcGFkX3B1c2hfZXZlbnQoKS4gRklYRUQgaW4gMC4xMSB3aXRoIHN0aWNreSBldmVudHMuCi0KLS0gT3B0aW1pemUgbmVnb3RpYXRpb24uIFdlIGN1cnJlbnRseSBkbyBhIGdldF9jYXBzKCkgY2FsbCB3aGVuIHdlIGxpbmsgcGFkcywKLSAgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgZ2VuZXJhdGUgYSBodWdlIGxpc3Qgb2YgY2FwcyBhbmQgYWxsIHRoZWlyCi0gIGNvbWJpbmF0aW9ucywgd2UgbmVlZCB0byBhdm9pZCBnZW5lcmF0aW5nIHRoZXNlIGh1Z2UgbGlzdHMgYnkgZ2VuZXJhdGluZyB0aGVtCi0gIFdlIGFsc28gbmVlZCB0byBpbmNyZW1lbnRhbGx5IHJldHVybiBpbnRlcnNlY3Rpb25zIGV0YywgZm9yIHRoaXMuIHNvbWV3aGF0Ci0gIGluY3JlbWVudGFsbHkgd2hlbiBuZWVkZWQuIFdlIGNhbiBkbyB0aGlzIHdpdGggYSBnc3RfcGFkX2l0ZXJhdGVfY2FwcygpIGNhbGwuCi0gIFdlIGFsc28gbmVlZCB0byBpbmNyZW1lbnRhbGx5IHJldHVybiBpbnRlcnNlY3Rpb25zIGV0YywgZm9yIHRoaXMuCi0gIEZJWEVEIGluIDAuMTEgd2l0aCBhIGZpbHRlciBvbiBnZXRjYXBzIGZ1bmN0aW9ucy4KLQotLSBFbGVtZW50cyBpbiBhIGJpbiBoYXZlIG5vIGNsdWUgYWJvdXQgdGhlIGZpbmFsIHN0YXRlIG9mIHRoZSBwYXJlbnQgZWxlbWVudAotICBzaW5jZSB0aGUgYmluIHNldHMgdGhlIHRhcmdldCBzdGF0ZSBvbiBpdHMgY2hpbGRyZW4gaW4gc21hbGwgc3RlcHMuIFRoaXMKLSAgY2F1c2VzIHByb2JsZW1zIGZvciBlbGVtZW50cyB0aGF0IGxpa2UgdG8ga25vdyB0aGUgZmluYWwgc3RhdGUgKHJ0c3BzcmMgZ29pbmcKLSAgdG8gUEFVU0VEIG9yIFJFQURZIGlzIGRpZmZlcmVudCBpbiB0aGF0IHdlIGNhbiBhdm9pZCBzZW5kaW5nIHRoZSB1c2VsZXNzCi0gIFBBVVNFRCByZXF1ZXN0KS4KLQotLSBNYWtlIHNlcmlhbGlzYXRpb24gb2Ygc3RydWN0dXJlcyBtb3JlIGNvbnNpc3RlbnQsIHJlYWRhYmxlIGFuZCBuaWNlciBjb2RlLXdpc2UuCi0KLS0gcGFkIGJsb2NrIGhhcyBzZXZlcmFsIGlzc3VlczogCi0gICogY2FuJ3QgYmxvY2sgb24gc2VsZWN0ZWQgdGhpbmdzLCBsaWtlIHB1c2gsIHB1bGwsIHBhZF9hbGxvYywgZXZlbnRzLCAuLi4KLSAgKiBjYW4ndCBjaGVjayB3aHkgdGhlIGJsb2NrIGhhcHBlbmVkLiBXZSBzaG91bGQgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGUgaXRlbS8KLSAgICByZWFzb24gdGhhdCBibG9ja2VkIHRoZSBwYWQuIAotICAqIGl0IG9ubHkgYmxvY2tzIG9uIGRhdGFwYXNzaW5nLiBXaGVuIEVPUywgdGhlIGJsb2NrIG5ldmVyIGhhcHBlbnMgYnV0IGlkZWFsbHkKLSAgICBzaG91bGQgYmVjYXVzZSBwYWQgYmxvY2sgc2hvdWxkIGluZm9ybSB0aGUgYXBwIHdoZW4gdGhlcmUgaXMgbm8gZGF0YWZsb3cuCi0gICogdGhlIHNhbWUgZ29lcyBmb3Igc2VnbWVudCBzZWVrcyB0aGF0IGRvbid0IHB1c2ggaW4tYmFuZCBFT1MgZXZlbnRzLiBNYXliZQotICAgIHNlZ21lbnQgc2Vla3Mgc2hvdWxkIGFsc28gc2VuZCBhbiBFT1MgZXZlbnQgd2hlbiB0aGV5J3JlIGRvbmUuCi0gICogYmxvY2tpbmcgc2hvdWxkIG9ubHkgaGFwcGVuIGZyb20gb25lIHRocmVhZC4gSWYgb25lIHRocmVhZCBkb2VzIHBhZF9hbGxvYwotICAgIGFuZCBhbm90aGVyIGEgcHVzaCwgdGhlIHB1c2ggbWlnaHQgYmUgYnVzeSB3aGlsZSB0aGUgYmxvY2sgY2FsbGJhY2sgaXMgZG9uZS4KLSAgKiBtYXliZSB0aGlzIG5hbWUgaXMgb3ZlcmxvYWRlZC4gV2UgbmVlZCB0byBsb29rIGF0IHNvbWUgbW9yZSB1c2UgY2FzZXMgYmVmb3JlCi0gICAgdHJ5aW5nIHRvIGZpeCB0aGlzLgotICBGSVhFRCBpbiAwLjExIHdpdGggQkxPQ0tJTkcgcHJvYmVzLgotCi0tIHJldGhpbmsgdGhlIHdheSB3ZSBkbyB1cHN0cmVhbSByZW5lZ290aWF0aW9uLiBDdXJyZW50bHkgaXQncyBkb25lIHdpdGgKLSAgcGFkX2FsbG9jIGJ1dCB0aGlzIGhhcyBtYW55IGlzc3VlcyBzdWNoIGFzIG9ubHkgYmVpbmcgYWJsZSB0byBzdWdnZXN0IDEgZm9ybWF0Ci0gIGFuZCB0aGUgbmVlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiB0aGlzIHN1Z2dlc3RlZCBmb3JtYXQgKHNvbWUgZWxlbWVudHMgc3VjaAotICBhcyBjYXBzZmlsdGVyIG9ubHkga25vdyBhYm91dCB0aGUgZm9ybWF0LCBub3QgdGhlIHNpemUpLiBXZSB3b3VsZCBpZGVhbGx5IGxpa2UKLSAgdG8gbGV0IHVwc3RyZWFtIHJlbmVnb3RpYXRlIGEgbmV3IGZvcm1hdCBqdXN0IGxpa2UgaXQgZGlkIHdoZW4gaXQgc3RhcnRlZC4KLSAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGVhc2lseSBiZSB0cmlnZ2VyZWQgd2l0aCBhIFJFTkVHT1RJQVRFIGV2ZW50LgotICBGSVhFRCBpbiAwLjExIHdpdGggUkVDT05GSUdVUkUgZXZlbnRzLgotCi0tIFJlbW92ZSB0aGUgcmVzdWx0IGZvcm1hdCB2YWx1ZSBpbiBxdWVyaWVzLiBGSVhFRCBpbiAwLjExCi0KLS0gVHJ5IHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgYWNjZXB0Y2FwcyBjYWxscyB3aGVuIHB1c2hpbmcgYnVmZmVycyBhcm91bmQuCi0gIFRoZSBlbGVtZW50IHB1c2hpbmcgdGhlIGJ1ZmZlciB1c3VhbGx5IG5lZ290aWF0ZWQgYWxyZWFkeSBhbmQgZGVjaWRlZCBvbiB0aGUKLSAgZm9ybWF0LgotICBUaGUgZWxlbWVudCByZWNlaXZpbmcgdGhlIGJ1ZmZlciB1c3VhbGx5IGhhcyB0byBhY2NlcHQgdGhlIGNhcHMgYW55d2F5LgotCi0KLUlNUExFTUVOVEFUSU9OCi1+fn5+fn5+fn5+fn5+fgotCi0tIGltcGxlbWVudCBtb3JlIFFPUywgc2VlIHBhcnQtcW9zLnR4dC4KLQotLSBpbXBsZW1lbnQgQlVGRkVSU0laRS4KLQotCi1ERVNJR04KLX5+fn5+fgotCi0tIHVubGlua2luZyBwYWRzIGluIHRoZSBQQVVTRUQgc3RhdGUgbmVlZHMgdG8gbWFrZSBzdXJlIHRoZSBzdHJlYW0gdGhyZWFkIGlzIG5vdAotICBleGVjdXRpbmcgY29kZS4gQ2FuIHRoaXMgYmUgZG9uZSB3aXRoIGEgZmx1c2ggdG8gdW5sb2NrIGFsbCBkb3duc3RyZWFtIGNoYWluCi0gIGZ1bmN0aW9ucz8gRG8gd2UgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IG9yIGxldCB0aGUgYXBwIGhhbmRsZSB0aGlzPwotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWFjdGl2YXRpb24udHh0IGIvZG9jcy9kZXNpZ24vcGFydC1hY3RpdmF0aW9uLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQwMjBlOS4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWFjdGl2YXRpb24udHh0CisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotUGFkIChkZSlhY3RpdmF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQWN0aXZhdGlvbgotfn5+fn5+fn5+fgotCi1XaGVuIGNoYW5naW5nIHN0YXRlcywgYSBiaW4gd2lsbCBzZXQgdGhlIHN0YXRlIG9uIGFsbCBvZiBpdHMgY2hpbGRyZW4gaW4KLXNpbmstdG8tc291cmNlIG9yZGVyLiBBcyBlbGVtZW50cyB1bmRlcmdvIHRoZSBSRUFEWS0+UEFVU0VEIHRyYW5zaXRpb24sCi10aGVpciBwYWRzIGFyZSBhY3RpdmF0ZWQgc28gYXMgdG8gcHJlcGFyZSBmb3IgZGF0YSBmbG93LiBTb21lIHBhZHMgd2lsbAotc3RhcnQgdGFza3MgdG8gZHJpdmUgdGhlIGRhdGEgZmxvdy4KLQotQW4gZWxlbWVudCBhY3RpdmF0ZXMgaXRzIHBhZHMgZnJvbSBzb3VyY2VwYWRzIHRvIHNpbmtwYWRzLiBUaGlzIHRvIG1ha2UKLXN1cmUgdGhhdCB3aGVuIHRoZSBzaW5rcGFkcyBhcmUgYWN0aXZhdGVkIGFuZCByZWFkeSB0byBhY2NlcHQgZGF0YSwgdGhlCi1zb3VyY2VwYWRzIGFyZSBhbHJlYWR5IGFjdGl2ZSB0byBwYXNzIHRoZSBkYXRhIGRvd25zdHJlYW0uCi0KLVBhZHMgY2FuIGJlIGFjdGl2YXRlZCBpbiBvbmUgb2YgdHdvIG1vZGVzLCBQVVNIIGFuZCBQVUxMLiBQVVNIIHBhZHMgYXJlCi10aGUgbm9ybWFsIGNhc2UsIHdoZXJlIHRoZSBzb3VyY2UgcGFkIGluIGEgbGluayBzZW5kcyBkYXRhIHRvIHRoZSBzaW5rCi1wYWQgdmlhIGdzdF9wYWRfcHVzaCgpLiBQVUxMIHBhZHMgaW5zdGVhZCBoYXZlIHNpbmsgcGFkcyByZXF1ZXN0IGRhdGEKLWZyb20gdGhlIHNvdXJjZSBwYWRzIHZpYSBnc3RfcGFkX3B1bGxfcmFuZ2UoKS4KLQotVG8gYWN0aXZhdGUgYSBwYWQsIHRoZSBjb3JlIHdpbGwgY2FsbCBnc3RfcGFkX3NldF9hY3RpdmUoKSB3aXRoIGEgVFJVRQotYXJndW1lbnQsIGluZGljYXRpbmcgdGhhdCB0aGUgcGFkIHNob3VsZCBiZSBhY3RpdmUuIElmIHRoZSBwYWQgaXMKLWFscmVhZHkgYWN0aXZlLCBiZSBpdCBpbiBhIFBVU0ggb3IgUFVMTCBtb2RlLCBnc3RfcGFkX3NldF9hY3RpdmUoKSB3aWxsCi1yZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZy4gT3RoZXJ3aXNlIGl0IHdpbGwgY2FsbCB0aGUgYWN0aXZhdGlvbgotZnVuY3Rpb24gb2YgdGhlIHBhZC4KLQotQmVjYXVzZSB0aGUgY29yZSBkb2VzIG5vdCBrbm93IGluIHdoaWNoIG1vZGUgdG8gYWN0aXZhdGUgYSBwYWQgKFBVU0ggb3IKLVBVTEwpLCBpdCBkZWxlZ2F0ZXMgdGhhdCBjaG9pY2UgdG8gYSBtZXRob2Qgb24gdGhlIHBhZCwgYWN0aXZhdGUoKS4gVGhlCi1hY3RpdmF0ZSgpIGZ1bmN0aW9uIG9mIGEgcGFkIHNob3VsZCBjaG9vc2Ugd2hldGhlciB0byBvcGVyYXRlIGluIFBVU0ggb3IKLVBVTEwgbW9kZS4gT25jZSB0aGUgY2hvaWNlIGlzIG1hZGUsIGl0IHNob3VsZCBjYWxsIGFjdGl2YXRlX21vZGUoKQotd2l0aCB0aGUgc2VsZWN0ZWQgYWN0aXZhdGlvbiBtb2RlLgotVGhlIGRlZmF1bHQgYWN0aXZhdGUoKSBmdW5jdGlvbiB3aWxsIGNhbGwgYWN0aXZhdGVfbW9kZSgpIHdpdGgKLSNHU1RfUEFEX01PREVfUFVTSCwgYXMgaXQgaXMgdGhlIGRlZmF1bHQgbWVjaGFuaXNtIGZvciBkYXRhIGZsb3cuCi1BIHNpbmsgcGFkIHRoYXQgc3VwcG9ydHMgZWl0aGVyIG1vZGUgb2Ygb3BlcmF0aW9uIG1pZ2h0IGNhbGwKLWFjdGl2YXRlX21vZGUoUFVMTCkgaWYgdGhlIFNDSEVEVUxJTkcgcXVlcnkgdXBzdHJlYW0gY29udGFpbnMgdGhlCi0jR1NUX1BBRF9NT0RFX1BVTEwgc2NoZWR1bGluZyBtb2RlLCBhbmQgYWN0aXZhdGVfbW9kZShQVVNIKSBvdGhlcndpc2UuCi0KLUNvbnNpZGVyIHRoZSBjYXNlIGZha2VzcmMgISBmYWtlc2luaywgd2hlcmUgZmFrZXNpbmsgaXMgY29uZmlndXJlZCB0bwotb3BlcmF0ZSBpbiBQVUxMIG1vZGUuIFN0YXRlIGNoYW5nZXMgaW4gdGhlIHBpcGVsaW5lIHdpbGwgc3RhcnQgd2l0aAotZmFrZXNpbmssIHdoaWNoIGlzIHRoZSBtb3N0IGRvd25zdHJlYW0gZWxlbWVudC4gVGhlIGNvcmUgd2lsbCBjYWxsCi1hY3RpdmF0ZSgpIG9uIGZha2VzaW5rJ3Mgc2luayBwYWQuIEZvciBmYWtlc2luayB0byBnbyBpbnRvIFBVTEwgbW9kZSwgaXQKLW5lZWRzIHRvIGltcGxlbWVudCBhIGN1c3RvbSBhY3RpdmF0ZSgpIGZ1bmN0aW9uIHRoYXQgd2lsbCBjYWxsCi1hY3RpdmF0ZV9tb2RlKFBVTEwpIG9uIGl0cyBzaW5rIHBhZCAoYmVjYXVzZSB0aGUgZGVmYXVsdCBpcyB0bwotdXNlIFBVU0ggbW9kZSkuIGFjdGl2YXRlX21vZGUoUFVMTCkgaXMgdGhlbiByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcKLXRoZSB0YXNrIHRoYXQgcHVsbHMgZnJvbSBmYWtlc3JjOnNyYy4gQ2xlYXJseSwgZmFrZXNyYyBuZWVkcyB0byBiZQotbm90aWZpZWQgdGhhdCBmYWtlc3JjIGlzIGFib3V0IHRvIHB1bGwgb24gaXRzIHNyYyBwYWQsIGV2ZW4gdGhvdWdoIHRoZQotcGlwZWxpbmUgaGFzIG5vdCB5ZXQgY2hhbmdlZCBmYWtlc3JjJ3Mgc3RhdGUuIEZvciB0aGlzIHJlYXNvbiwKLUdTdHJlYW1lciB3aWxsIGZpcnN0IGNhbGwgY2FsbCBhY3RpdmF0ZV9tb2RlKFBVTEwpIG9uIGZha2VzaW5rOnNpbmsncwotcGVlciBiZWZvcmUgY2FsbGluZyBhY3RpdmF0ZV9tb2RlKFBVTEwpIG9uIGZha2VzaW5rOnNpbmtzLgotCi1JbiBzaG9ydCwgdXBzdHJlYW0gZWxlbWVudHMgb3BlcmF0aW5nIGluIFBVTEwgbW9kZSBtdXN0IGJlIHJlYWR5IHRvCi1wcm9kdWNlIGRhdGEgaW4gUkVBRFksIGFmdGVyIGhhdmluZyBhY3RpdmF0ZV9tb2RlKFBVTEwpIGNhbGxlZCBvbiB0aGVpcgotc291cmNlIHBhZC4gQWxzbywgYSBjYWxsIHRvIGFjdGl2YXRlX21vZGUoUFVMTCkgbmVlZHMgdG8gcHJvcGFnYXRlIHRocm91Z2gKLXRoZSBwaXBlbGluZSB0byBldmVyeSBwYWQgdGhhdCBhIGdzdF9wYWRfcHVsbCgpIHdpbGwgcmVhY2guIEluIHRoZSBjYXNlCi1mYWtlc3JjICEgaWRlbnRpdHkgISBmYWtlc2luaywgY2FsbGluZyBhY3RpdmF0ZV9tb2RlKFBVTEwpIG9uIGlkZW50aXR5J3MKLXNvdXJjZSBwYWQgd291bGQgbmVlZCB0byBhY3RpdmF0ZSBpdHMgc2luayBwYWQgaW4gcHVsbCBtb2RlIGFzIHdlbGwsCi13aGljaCBzaG91bGQgcHJvcGFnYXRlIGFsbCB0aGUgd2F5IHRvIGZha2VzcmMuCi0KLUlmLCBvbiB0aGUgb3RoZXIgaGFuZCwgZmFrZXNyYyAhIGZha2VzaW5rIGlzIG9wZXJhdGluZyBpbiBQVVNIIG1vZGUsIHRoZQotYWN0aXZhdGlvbiBzZXF1ZW5jZSBpcyBkaWZmZXJlbnQuIEZpcnN0LCBhY3RpdmF0ZSgpIG9uIGZha2VzaW5rOnNpbmsKLWNhbGxzIGFjdGl2YXRlX21vZGUoUFVTSCkgb24gZmFrZXNpbms6c2luay4gVGhlbiBmYWtlc3JjJ3MgcGFkcyBhcmUKLWFjdGl2YXRlZDogc291cmNlcyBmaXJzdCwgdGhlbiBzaW5rcyAob2Ygd2hpY2ggZmFrZXNyYyBoYXMgbm9uZSkuCi1mYWtlc3JjOnNyYydzIGFjdGl2YXRpb24gZnVuY3Rpb24gaXMgdGhlbiBjYWxsZWQuCi0KLU5vdGUgdGhhdCBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHNldCBhbiBhY3RpdmF0aW9uIGZ1bmN0aW9uIG9uIGEKLXNvdXJjZSBwYWQuIFRoZSBwZWVyIG9mIGEgc291cmNlIHBhZCBpcyBkb3duc3RyZWFtLCBtZWFuaW5nIGl0IHNob3VsZAotaGF2ZSBiZWVuIGFjdGl2YXRlZCBmaXJzdC4gSWYgaXQgd2FzIGFjdGl2YXRlZCBpbiBQVUxMIG1vZGUsIHRoZQotc291cmNlIHBhZCBzaG91bGQgaGF2ZSBhbHJlYWR5IGhhZCBhY3RpdmF0ZV9tb2RlKFBVTEwpIGNhbGxlZCBvbiBpdCwgYW5kCi10aHVzIG5lZWRzIG5vIGZ1cnRoZXIgYWN0aXZhdGlvbi4gT3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBpbiBQVVNIIG1vZGUsCi13aGljaCBpcyB0aGUgY2hvaWNlIG9mIHRoZSBkZWZhdWx0IGFjdGl2YXRpb24gZnVuY3Rpb24uCi0KLVNvLCBpbiB0aGUgUFVTSCBjYXNlLCB0aGUgZGVmYXVsdCBhY3RpdmF0aW9uIGZ1bmN0aW9uIGNob29zZXMgUFVTSCBtb2RlLAotd2hpY2ggY2FsbHMgYWN0aXZhdGVfbW9kZShQVVNIKSwgd2hpY2ggd2lsbCB0aGVuIHN0YXJ0IGEgdGFzayBvbiB0aGUgc291cmNlCi1wYWQgYW5kIGJlZ2luIHB1c2hpbmcuIEluIHRoaXMgd2F5IFBVU0ggc2NoZWR1bGluZyBpcyBhIGJpdCBlYXNpZXIsCi1iZWNhdXNlIGl0IGZvbGxvd3MgdGhlIG9yZGVyIG9mIHN0YXRlIGNoYW5nZXMgaW4gYSBwaXBlbGluZS4gZmFrZXNpbmsgaXMKLWFscmVhZHkgaW4gUEFVU0VEIHdpdGggYW4gYWN0aXZlIHNpbmsgcGFkIGJ5IHRoZSB0aW1lIGZha2VzcmMgc3RhcnRzCi1wdXNoaW5nIGRhdGEuCi0KLURlYWN0aXZhdGlvbgotfn5+fn5+fn5+fn5+Ci0KLVBhZCBkZWFjdGl2YXRpb24gb2NjdXJzIHdoZW4gaXRzIHBhcmVudCBnb2VzIGludG8gdGhlIFJFQURZIHN0YXRlIG9yIHdoZW4gdGhlIAotcGFkIGlzIGRlYWN0aXZhdGVkIGV4cGxpY2l0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIG9yIGVsZW1lbnQuIAotZ3N0X3BhZF9zZXRfYWN0aXZlKCkgaXMgY2FsbGVkIHdpdGggYSBGQUxTRSBhcmd1bWVudCwgd2hpY2ggdGhlbiBjYWxscwotYWN0aXZhdGVfbW9kZShQVVNIKSBvciBhY3RpdmF0ZV9tb2RlKFBVTEwpIHdpdGggYSBGQUxTRSBhcmd1bWVudCwgZGVwZW5kaW5nCi1vbiB0aGUgY3VycmVudCBhY3RpdmF0aW9uIG1vZGUgb2YgdGhlIHBhZC4KLQotTW9kZSBzd2l0Y2hpbmcKLX5+fn5+fn5+fn5+fn5+Ci0KLUNoYW5naW5nIGZyb20gcHVzaCB0byBwdWxsIG1vZGVzIG5lZWRzIGEgYml0IG9mIHRob3VnaHQuIFRoaXMgaXMgYWN0dWFsbHkKLXBvc3NpYmxlIGFuZCBpbXBsZW1lbnRlZCBidXQgbm90IHlldCBkb2N1bWVudGVkIGhlcmUuCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtYnVmZmVyLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtYnVmZmVyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E5OGZlNS4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotR3N0QnVmZmVyCi0tLS0tLS0tLS0KLQotVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRlc2lnbiBmb3IgYnVmZmVycy4KLQotQSBHc3RCdWZmZXIgaXMgdGhlIG9iamVjdCB0aGF0IGlzIHBhc3NlZCBmcm9tIGFuIHVwc3RyZWFtIGVsZW1lbnQgdG8gYQotZG93bnN0cmVhbSBlbGVtZW50IGFuZCBjb250YWlucyBtZW1vcnkgYW5kIG1ldGFkYXRhIGluZm9ybWF0aW9uLgotCi1SZXF1aXJlbWVudHMKLX5+fn5+fn5+fn5+fgotCi0gLSBJdCBtdXN0IGJlIGZhc3QKLSAgICAqIGFsbG9jYXRpb24sIGZyZWUsIGxvdyBmcmFnbWVudGF0aW9uCi0gLSBNdXN0IGJlIGFibGUgdG8gYXR0YWNoIG11bHRpcGxlIG1lbW9yeSBibG9ja3MgdG8gdGhlIGJ1ZmZlcgotIC0gTXVzdCBiZSBhYmxlIHRvIGF0dGFjaCBhcmJpdHJhcnkgbWV0YWRhdGEgdG8gYnVmZmVycwotIC0gZWZmaWNpZW50IGhhbmRsaW5nIG9mIHN1YmJ1ZmZlciwgY29weSwgc3BhbiwgdHJpbQotCi1MaWZlY3ljbGUKLX5+fn5+fn5+fgotCi1Hc3RNZW1vcnkgZXh0ZW5kcyBmcm9tIEdzdE1pbmlPYmplY3QgYW5kIHRoZXJlZm9yZSB1c2VzIGl0cyBsaWZlY3ljbGUKLW1hbmFnZW1lbnQgKFNlZSBwYXJ0LW1pbmlvYmplY3QudHh0KS4KLQotV3JpdGFiaWxpdHkKLX5+fn5+fn5+fn5+Ci0KLVdoZW4gYSBCdWZmZXJzIGlzIHdyaXRhYmxlIGFzIHJldHVybmVkIGZyb20gZ3N0X2J1ZmZlcl9pc193cml0YWJsZSgpOgotCi0gLSBtZXRhZGF0YSBjYW4gYmUgYWRkZWQvcmVtb3ZlZCBhbmQgdGhlIG1ldGFkYXRhIGNhbiBiZSBjaGFuZ2VkCi0gLSBHc3RNZW1vcnkgYmxvY2tzIGNhbiBiZSBhZGRlZC9yZW1vdmVkCi0KLVRoZSBpbmRpdmlkdWFsIG1lbW9yeSBibG9ja3MgaGF2ZSB0aGVpciBvd24gbG9ja2luZyBhbmQgUkVBRE9OTFkgZmxhZ3MKLXRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZWlyIHdyaXRhYmlsaXR5LgotCi1CdWZmZXJzIGNhbiBiZSBtYWRlIHdyaXRhYmxlIHdpdGggZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkuIFRoaXMgd2lsbCBjb3B5IHRoZQotYnVmZmVyIHdpdGggdGhlIG1ldGFkYXRhIGFuZCB3aWxsIHJlZiB0aGUgbWVtb3J5IGluIHRoZSBidWZmZXIuIFRoaXMgbWVhbnMgdGhhdAotdGhlIG1lbW9yeSBpcyBub3QgYXV0b21hdGljYWxseSBjb3BpZWQgd2hlbiBjb3B5aW5nIGJ1ZmZlcnMuCi0KLQotTWFuYWdpbmcgR3N0TWVtb3J5Ci0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQSBHc3RCdWZmZXIgY29udGFpbnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gR3N0TWVtb3J5IG9iamVjdHMuIAotCi1XaGVuIHRoZSBidWZmZXIgaXMgd3JpdGFibGUsIGdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSgpIGNhbiBiZSB1c2VkIHRvIGFkZCBhCi1uZXcgR3N0TWVtb3J5IG9iamVjdCB0byB0aGUgYnVmZmVyLiBXaGVuIHRoZSBhcnJheSBvZiBtZW1vcnkgaXMgZnVsbCwgbWVtb3J5Ci13aWxsIGJlIG1lcmdlZCB0byBtYWtlIHJvb20gZm9yIHRoZSBuZXcgbWVtb3J5IG9iamVjdC4KLQotZ3N0X2J1ZmZlcl9uX21lbW9yeSgpIGlzIHVzZWQgdG8gZ2V0IHRoZSBhbW91bnQgb2YgbWVtb3J5IGJsb2NrcyBvbiB0aGUKLUdzdEJ1ZmZlci4KLQotV2l0aCBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5KCksIG1lbW9yeSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIG1lbW9yeSBhcnJheS4KLVRoZSBkZXNpcmVkIGFjY2VzcyBwYXR0ZXJuIGZvciB0aGUgbWVtb3J5IGJsb2NrIHNob3VsZCBiZSBzcGVjaWZpZWQgc28gdGhhdAotYXBwcm9wcmlhdGUgY2hlY2tzIGNhbiBiZSBtYWRlIGFuZCwgaW4gY2FzZSBvZiBHU1RfTUFQX1dSSVRFLCBhIHdyaXRhYmxlIGNvcHkKLWNhbiBiZSBjb25zdHJ1Y3RlZCB3aGVuIG5lZWRlZC4KLQotZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlKCkgYW5kIGdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeSgpIGNhbiBiZSB1c2VkIHRvCi1yZW1vdmUgbWVtb3J5IGZyb20gdGhlIEdzdEJ1ZmZlci4KLQotCi1TdWJidWZmZXJzCi0tLS0tLS0tLS0tCi0KLVN1YmJ1ZmZlcnMgYXJlIG1hZGUgYnkgY29weWluZyBvbmx5IGEgcmVnaW9uIG9mIHRoZSBtZW1vcnkgYmxvY2tzIGFuZCBjb3B5aW5nCi1hbGwgb2YgdGhlIG1ldGFkYXRhLgotCi0KLVNwYW4KLS0tLS0KLQotU3Bhbm5pbmcgd2lsbCBtZXJnZSB0b2dldGhlciB0aGUgZGF0YSBvZiAyIGJ1ZmZlcnMgaW50byBhIG5ldyBidWZmZXIKLQotCi1EYXRhIGFjY2VzcwotLS0tLS0tLS0tLS0KLQotIEFjY2Vzc2luZyB0aGUgZGF0YSBvZiB0aGUgYnVmZmVyIGNhbiBoYXBwZW4gYnkgcmV0cmlldmluZyB0aGUgaW5kaXZpZHVhbAotIEdzdE1lbW9yeSBvYmplY3RzIGluIHRoZSBHc3RCdWZmZXIgb3IgYnkgdXNpbmcgdGhlIGdzdF9idWZmZXJfbWFwKCkgYW5kCi0gZ3N0X2J1ZmZlcl91bm1hcCgpIGZ1bmN0aW9ucy4KLQotIFRoZSBfbWFwIGFuZCBfdW5tYXAgZnVuY3Rpb25zIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgbWVtb3J5IG9mIGFsbCBibG9ja3MgYXMKLSBvbmUgbGFyZ2UgY29udGlndW91cyByZWdpb24gb2YgbWVtb3J5LiBVc2luZyB0aGUgX21hcCBhbmQgX3VubWFwIGZ1bmN0aW9ucwotIG1pZ2h0IGJlIG1vcmUgY29udmVuaWVudCB0aGFuIGFjY2Vzc2luZyB0aGUgaW5kaXZpZHVhbCBtZW1vcnkgYmxvY2tzIGF0IHRoZQotIGV4cGVuc2Ugb2YgYmVpbmcgbW9yZSBleHBlbnNpdmUgYmVjYXVzZSBpdCBtaWdodCBwZXJmb3JtIG1lbWNweSBvcGVyYXRpb25zLgotCi0gRm9yIGJ1ZmZlcnMgd2l0aCBvbmx5IG9uZSBHc3RNZW1vcnkgb2JqZWN0ICh0aGUgbW9zdCBjb21tb24gY2FzZSksIF9tYXAgYW5kCi0gX3VubWFwIGhhdmUgbm8gcGVyZm9ybWFuY2UgcGVuYWx0eSBhdCBhbGwuCi0KLQotKiBSZWFkIGFjY2VzcyB3aXRoIDEgbWVtb3J5IGJsb2NrCi0KLSAgVGhlIG1lbW9yeSBibG9jayBpcyBhY2Nlc3NlZCBhbmQgbWFwcGVkIGZvciByZWFkIGFjY2Vzcy4KLSAgVGhlIG1lbW9yeSBibG9jayBpcyB1bm1hcHBlZCBhZnRlciB1c2FnZQotCi0qIHdyaXRlIGFjY2VzcyB3aXRoIDEgbWVtb3J5IGJsb2NrCi0KLSAgVGhlIGJ1ZmZlciBzaG91bGQgYmUgd3JpdGFibGUgb3IgdGhpcyBvcGVyYXRpb24gd2lsbCBmYWlsLgotICBUaGUgbWVtb3J5IGJsb2NrIGlzIGFjY2Vzc2VkLiBJZiB0aGUgbWVtb3J5IGJsb2NrIGlzIHJlYWRvbmx5LCBhIGNvcHkgaXMgbWFkZQotICBhbmQgdGhlIG9yaWdpbmFsIG1lbW9yeSBibG9jayBpcyByZXBsYWNlZCB3aXRoIHRoaXMgY29weS4gVGhlbiB0aGUgbWVtb3J5Ci0gIGJsb2NrIGlzIG1hcHBlZCBpbiB3cml0ZSBtb2RlIGFuZCB1bm1hcHBlZCBhZnRlciB1c2FnZS4KLQotKiBSZWFkIGFjY2VzcyB3aXRoIG11bHRpcGxlIG1lbW9yeSBibG9ja3MKLQotICBUaGUgbWVtb3J5IGJsb2NrcyBhcmUgY29tYmluZWQgaW50byBvbmUgbGFyZ2UgbWVtb3J5IGJsb2NrLiBJZiB0aGUgYnVmZmVyIGlzCi0gIHdyaXRhYmxlLCB0aGUgbWVtb3J5IGJsb2NrcyBhcmUgcmVwbGFjZWQgd2l0aCB0aGlzIG5ldyBjb21iaW5lZCBibG9jay4gSWYgdGhlCi0gIGJ1ZmZlciBpcyBub3Qgd3JpdGFibGUsIHRoZSBtZW1vcnkgaXMgcmV0dXJuZWQgYXMgaXMuIFRoZSBtZW1vcnkgYmxvY2sgaXMKLSAgdGhlbiBtYXBwZWQgaW4gcmVhZCBtb2RlLgotCi0gIFdoZW4gdGhlIG1lbW9yeSBpcyB1bm1hcHBlZCBhZnRlciB1c2FnZSBhbmQgdGhlIGJ1ZmZlciBoYXMgbXVsdGlwbGUgbWVtb3J5Ci0gIGJsb2NrcywgdGhpcyBtZWFucyB0aGF0IHRoZSBtYXAgb3BlcmF0aW9uIHdhcyBub3QgYWJsZSB0byBzdG9yZSB0aGUgY29tYmluZWQKLSAgYnVmZmVyIGFuZCBpdCB0aHVzIHJldHVybmVkIG1lbW9yeSB0aGF0IHNob3VsZCBiZSBmcmVlZC4gT3RoZXJ3aXNlLCB0aGUgbWVtb3J5Ci0gIGlzIHVubWFwcGVkLgotCi0qIFdyaXRlIGFjY2VzcyB3aXRoIG11bHRpcGxlIG1lbW9yeSBibG9ja3MKLQotICBUaGUgYnVmZmVyIHNob3VsZCBiZSB3cml0YWJsZSBvciB0aGUgb3BlcmF0aW9uIGZhaWxzLiBUaGUgbWVtb3J5IGJsb2NrcyBhcmUKLSAgY29tYmluZWQgaW50byBvbmUgbGFyZ2UgbWVtb3J5IGJsb2NrIGFuZCB0aGUgZXhpc3RpbmcgYmxvY2tzIGFyZSByZXBsYWNlZCB3aXRoCi0gIHRoaXMgbmV3IGJsb2NrLiBUaGUgbWVtb3J5IGlzIHRoZW4gbWFwcGVkIGluIHdyaXRlIG1vZGUgYW5kIHVubWFwcGVkIGFmdGVyCi0gIHVzYWdlLgotCi0KLVVzZSBjYXNlcwotLS0tLS0tLS0tCi0KLUdlbmVyYXRpbmcgUlRQIHBhY2tldHMgZnJvbSBoMjY0IHZpZGVvCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1XZSByZWNlaXZlIGFzIGlucHV0IGEgR3N0QnVmZmVyIHdpdGggYW4gZW5jb2RlZCBoMjY0IGltYWdlIGFuZCB3ZSBuZWVkIHRvCi1jcmVhdGUgUlRQIHBhY2tldHMgY29udGFpbmluZyB0aGlzIGgyNjQgZGF0YSBhcyB0aGUgcGF5bG9hZC4gV2UgdHlwaWNhbGx5IG5lZWQKLXRvIGZyYWdtZW50IHRoZSBoMjY0IGRhdGEgaW50byBtdWx0aXBsZSBwYWNrZXRzLCBlYWNoIHdpdGggdGhlaXIgb3duIFJUUCBhbmQKLXBheWxvYWQgc3BlY2lmaWMgaGVhZGVyLgotCi0gICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKwotICBpbnB1dCBIMjY0IGJ1ZmZlcjogICB8IE5BTFUxIHwgTkFMVTIgfCAgLi4uLi4gICAgICAgICAgICAgICAgICAgIHwgTkFMVXggIHwKLSAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgotICBhcnJheSBvZiAgICAgICAgICAgICArLSsgKy0tLS0tLS0rICArLSsgKy0tLS0tLS0rICAgICAgICAgICAgKy0rICstLS0tLS0tKwotICBvdXRwdXQgYnVmZmVyczogICAgICB8IHwgfCBOQUxVMSB8ICB8IHwgfCBOQUxVMiB8ICAgLi4uLiAgICAgfCB8IHwgTkFMVXggfAotICAgICAgICAgICAgICAgICAgICAgICArLSsgKy0tLS0tLS0rICArLSsgKy0tLS0tLS0rICAgICAgICAgICAgKy0rICstLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICA6ICA6ICAgICAgICAgICA6Ci0gICAgICAgICAgICAgICAgICAgICAgIFwtLS0tLS0tLS0tLS8gIFwtLS0tLS0tLS0tLS8KLSAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgMSAgICAgICAgYnVmZmVyIDIKLQotVGhlIG91dHB1dCBidWZmZXIgYXJyYXkgY29uc2lzdHMgb2YgeCBidWZmZXJzIGNvbnNpc3Rpbmcgb2YgYW4gUlRQIHBheWxvYWQgaGVhZGVyCi1hbmQgYSBzdWJidWZmZXIgb2YgdGhlIG9yaWdpbmFsIGlucHV0IEgyNjQgYnVmZmVyLiBTaW5jZSB0aGUgcnRwIGhlYWRlcnMgYW5kCi10aGUgaDI2NCBkYXRhIGRvbid0IG5lZWQgdG8gYmUgY29udGlndW91cyBpbiBtZW1vcnksIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBidWZmZXIKLWFzIHNlcGFyYXRlIEdzdE1lbW9yeSBibG9ja3MgYW5kIHdlIGNhbiBhdm9pZCB0byBtZW1jcHkgdGhlIGgyNjQgZGF0YSBpbnRvCi1jb250aWd1b3VzIG1lbW9yeS4KLQotQSB0eXBpY2FsIHVkcHNpbmsgd2lsbCB0aGVuIHVzZSBzb21ldGhpbmcgbGlrZSBzZW5kbXNnIHRvIHNlbmQgdGhlIG1lbW9yeSByZWdpb25zCi1vbiB0aGUgbmV0d29yayBpbnNpZGUgb25lIFVEUCBwYWNrZXQuIFRoaXMgd2lsbCBmdXJ0aGVyIGF2b2lkIGhhdmluZyB0byBtZW1jcHkKLWRhdGEgaW50byBjb250aWd1b3VzIG1lbW9yeS4KLQotVXNpbmcgYnVmZmVybGlzdHMsIHRoZSBjb21wbGV0ZSBhcnJheSBvZiBvdXRwdXQgYnVmZmVycyBjYW4gYmUgcHVzaGVkIGluIG9uZQotb3BlcmF0aW9uIHRvIHRoZSBwZWVyIGVsZW1lbnQuCi0KLQotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcmluZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMjA5M2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1idWZmZXJpbmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLUJ1ZmZlcmluZwotLS0tLS0tLS0tCi0KLVRoaXMgZG9jdW1lbnQgb3V0bGluZXMgdGhlIGJ1ZmZlcmluZyBwb2xpY3kgdXNlZCBpbiB0aGUgR1N0cmVhbWVyCi1jb3JlIHRoYXQgY2FuIGJlIHVzZWQgYnkgcGx1Z2lucyBhbmQgYXBwbGljYXRpb25zLgotCi1UaGUgcHVycG9zZSBvZiBidWZmZXJpbmcgaXMgdG8gYWNjdW11bGF0ZSBlbm91Z2ggZGF0YSBpbiBhIHBpcGVsaW5lIHNvIHRoYXQKLXBsYXliYWNrIGNhbiBvY2N1ciBzbW9vdGhseSBhbmQgd2l0aG91dCBpbnRlcnJ1cHRpb25zLiBJdCBpcyB0eXBpY2FsbHkgZG9uZQotd2hlbiByZWFkaW5nIGZyb20gYSAoc2xvdykgbm9uLWxpdmUgbmV0d29yayBzb3VyY2UgYnV0IGNhbiBhbHNvIGJlIHVzZWQgZm9yCi1saXZlIHNvdXJjZXMuCi0KLVdlIHdhbnQgdG8gYmUgYWJsZSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKLQotIC0gYnVmZmVyaW5nIHVwIHRvIGEgc3BlY2lmaWMgYW1vdW50IG9mIGRhdGEsIGluIG1lbW9yeSwgYmVmb3JlIHN0YXJ0aW5nIHBsYXliYWNrCi0gICBzbyB0aGF0IG5ldHdvcmsgZmx1Y3R1YXRpb25zIGFyZSBtaW5pbWl6ZWQuCi0gLSBkb3dubG9hZCBvZiB0aGUgbmV0d29yayBmaWxlIHRvIGEgbG9jYWwgZGlzayB3aXRoIGZhc3Qgc2Vla2luZyBpbiB0aGUKLSAgIGRvd25sb2FkZWQgZGF0YS4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBxdWlja3RpbWUveW91dHViZSBwbGF5ZXJzLgotIC0gY2FjaGluZyBvZiBzZW1pLWxpdmUgc3RyZWFtcyB0byBhIGxvY2FsLCBvbiBkaXNrLCByaW5nYnVmZmVyIHdpdGggc2Vla2luZyBpbgotICAgdGhlIGNhY2hlZCBhcmVhLiBUaGlzIGlzIHNpbWlsYXIgdG8gdGl2by1saWtlIHRpbWVzaGlmdGluZy4KLSAtIHByb2dyZXNzIHJlcG9ydCBhYm91dCB0aGUgYnVmZmVyaW5nIG9wZXJhdGlvbnMKLSAtIHRoZSBwb3NzaWJpbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIG1vcmUgY29tcGxleCBidWZmZXJpbmcKLQotU29tZSB1c2UgY2FzZXM6Ci0KLSAqIFN0cmVhbSBidWZmZXJpbmc6Ci0KLSAgICstLS0tLS0tLS0rICAgICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0rCi0gICB8IGh0dHBzcmMgfCAgICAgfCBidWZmZXIgIHwgICAgIHwgZGVtdXggfAotICAgfCAgICAgICAgc3JjIC0gc2luayAgICAgIHNyYyAtIHNpbmsgICAgIC4uLi4KLSAgICstLS0tLS0tLS0rICAgICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0rCi0KLSAgSW4gdGhpcyBjYXNlIHdlIGFyZSByZWFkaW5nIGZyb20gYSBzbG93IG5ldHdvcmsgc291cmNlIGludG8gYSBidWZmZXIgZWxlbWVudAotICAoc3VjaCBhcyBxdWV1ZTIpLiAKLSAgCi0gIFRoZSBidWZmZXIgZWxlbWVudCBoYXMgYSBsb3cgYW5kIGhpZ2ggd2F0ZXJtYXJrIGV4cHJlc3NlZCBpbiBieXRlcy4gVGhlCi0gIGJ1ZmZlciB1c2VzIHRoZSB3YXRlcm1hcmtzIGFzIGZvbGxvd3M6Ci0gIAotICAgLSBUaGUgYnVmZmVyIGVsZW1lbnQgd2lsbCBwb3N0IEJVRkZFUklORyBtZXNzYWdlcyB1bnRpbCB0aGUgaGlnaCB3YXRlcm1hcmsKLSAgICAgaXMgaGl0LiBUaGlzIGluc3RydWN0cyB0aGUgYXBwbGljYXRpb24gdG8ga2VlcCB0aGUgcGlwZWxpbmUgUEFVU0VELCB3aGljaAotICAgICB3aWxsIGV2ZW50dWFsbHkgYmxvY2sgdGhlIHNyY3BhZCBmcm9tIHB1c2hpbmcgd2hpbGUgZGF0YSBpcyBwcmVyb2xsZWQgaW4KLSAgICAgdGhlIHNpbmtzLgotICAgLSBXaGVuIHRoZSBoaWdoIHdhdGVybWFyayBpcyBoaXQsIGEgQlVGRkVSSU5HIG1lc3NhZ2Ugd2l0aCAxMDAlIHdpbGwgYmUKLSAgICAgcG9zdGVkLCB3aGljaCBpbnN0cnVjdHMgdGhlIGFwcGxpY2F0aW9uIHRvIGNvbnRpbnVlIHBsYXliYWNrLgotICAgLSBXaGVuIHRoZSBsb3cgd2F0ZXJtYXJrIGlzIGhpdCBkdXJpbmcgcGxheWJhY2ssIHRoZSBxdWV1ZSB3aWxsIHN0YXJ0IHBvc3RpbmcKLSAgICAgQlVGRkVSSU5HIG1lc3NhZ2VzIGFnYWluLCBtYWtpbmcgdGhlIGFwcGxpY2F0aW9uIFBBVVNFIHRoZSBwaXBlbGluZSBhZ2FpbgotICAgICB1bnRpbCB0aGUgaGlnaCB3YXRlcm1hcmsgaXMgaGl0IGFnYWluLiBUaGlzIGlzIGNhbGxlZCB0aGUgcmVidWZmZXJpbmcKLSAgICAgc3RhZ2UuCi0gICAtIER1cmluZyBwbGF5YmFjaywgdGhlIHF1ZXVlIGxldmVsIHdpbGwgZmx1Y3R1YXRlIGJldHdlZW4gdGhlIGhpZ2ggYW5kCi0gICAgIGxvdyB3YXRlcm1hcmtzIGFzIGEgd2F5IHRvIGNvbXBlbnNhdGUgZm9yIG5ldHdvcmsgaXJyZWd1bGFyaXRpZXMuCi0KLSAgVGhpcyBidWZmZXJpbmcgbWV0aG9kIGlzIHVzYWJsZSB3aGVuIHRoZSBkZW11eGVyIG9wZXJhdGVzIGluIHB1c2ggbW9kZS4KLSAgU2Vla2luZyBpbiB0aGUgc3RyZWFtIHJlcXVpcmVzIHRoZSBzZWVrIHRvIGhhcHBlbiBpbiB0aGUgbmV0d29yayBzb3VyY2UuCi0gIEl0IGlzIG1vc3RseSBkZXNpcmFibGUgd2hlbiB0aGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIGZpbGUgaXMgbm90IGtub3duLCBzdWNoCi0gIGFzIGluIGxpdmUgc3RyZWFtaW5nIG9yIHdoZW4gZWZmaWNpZW50IHNlZWtpbmcgaXMgbm90IHBvc3NpYmxlL3JlcXVpcmVkLgotCi0gKiBJbmNyZW1lbnRhbCBkb3dubG9hZAotCi0gICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0tLSsgICAgICstLS0tLS0tKwotICAgfCBodHRwc3JjIHwgICAgIHwgYnVmZmVyICB8ICAgICB8IGRlbXV4IHwKLSAgIHwgICAgICAgIHNyYyAtIHNpbmsgICAgICBzcmMgLSBzaW5rICAgICAuLi4uCi0gICArLS0tLS0tLS0tKyAgICAgKy0tLS18LS0tLSsgICAgICstLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgVgotICAgICAgICAgICAgICAgICAgICAgICBmaWxlCi0gIAotICBJbiB0aGlzIGNhc2UsIHdlIGtub3cgdGhlIHNlcnZlciBpcyBzdHJlYW1pbmcgYSBmaXhlZCBsZW5ndGggZmlsZSB0byB0aGUKLSAgY2xpZW50LiBUaGUgYXBwbGljYXRpb24gY2FuIGNob29zZSB0byBkb3dubG9hZCB0aGUgZmlsZSB0byBkaXNrLiBUaGUgYnVmZmVyCi0gIGVsZW1lbnQgd2lsbCBwcm92aWRlIGEgcHVzaCBvciBwdWxsIGJhc2VkIHNyY3BhZCB0byB0aGUgZGVtdXhlciB0byBuYXZpZ2F0ZSBpbgotICB0aGUgZG93bmxvYWRlZCBmaWxlLgotCi0gIFRoaXMgbW9kZSBpcyBvbmx5IHN1aXRhYmxlIHdoZW4gdGhlIGNsaWVudCBjYW4gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlCi0gIGZpbGUgb24gdGhlIHNlcnZlci4KLQotICBJbiB0aGlzIGNhc2UsIGJ1ZmZlcmluZyBtZXNzYWdlcyB3aWxsIGJlIGVtaXR0ZWQgYXMgdXN1YWwgd2hlbiB0aGUgcmVxdWVzdGVkCi0gIHJhbmdlIGlzIG5vdCB3aXRoaW4gdGhlIGRvd25sb2FkZWQgYXJlYSArIGJ1ZmZlcnNpemUuIFRoZSBidWZmZXJpbmcgbWVzc2FnZQotICB3aWxsIGFsc28gY29udGFpbiBhbiBpbmRpY2F0aW9uIHRoYXQgaW5jcmVtZW50YWwgZG93bmxvYWQgaXMgYmVpbmcgcGVyZm9ybWVkLgotICBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gbGV0IHRoZSBhcHBsaWNhdGlvbiBjb250cm9sIHRoZSBidWZmZXJpbmcgaW4gYSBtb3JlCi0gIGludGVsbGlnZW50IHdheSwgdXNpbmcgdGhlIEJVRkZFUklORyBxdWVyeSwgZm9yIGV4YW1wbGUuCi0KLSAgVGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlIEJVRkZFUklORyBxdWVyeSB0byBnZXQgdGhlIGVzdGltYXRlZCBkb3dubG9hZCB0aW1lCi0gIGFuZCBtYXRjaCB0aGlzIHRpbWUgdG8gdGhlIGN1cnJlbnQvcmVtYWluaW5nIHBsYXliYWNrIHRpbWUgdG8gY29udHJvbCB3aGVuCi0gIHBsYXliYWNrIHNob3VsZCBzdGFydCB0byBoYXZlIGEgbm9uLWludGVycnVwdGVkIHBsYXliYWNrIGV4cGVyaWVuY2UuCi0KLQotICogVGltZXNoaWZ0aW5nCi0KLSAgICstLS0tLS0tLS0rICAgICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0rCi0gICB8IGh0dHBzcmMgfCAgICAgfCBidWZmZXIgIHwgICAgIHwgZGVtdXggfAotICAgfCAgICAgICAgc3JjIC0gc2luayAgICAgIHNyYyAtIHNpbmsgICAgIC4uLi4KLSAgICstLS0tLS0tLS0rICAgICArLS0tLXwtLS0tKyAgICAgKy0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgICAgICBWCi0gICAgICAgICAgICAgICAgICAgIGZpbGUtcmluZ2J1ZmZlcgotCi0gIEluIHRoaXMgbW9kZSwgYSBmaXhlZCBzaXplIHJpbmdidWZmZXIgaXMga2VwdCB0byBkb3dubG9hZCB0aGUgc2VydmVyIGNvbnRlbnQuCi0gIFRoaXMgYWxsb3dzIGZvciBzZWVraW5nIGluIHRoZSBidWZmZXJlZCBkYXRhLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlCi0gIGJ1ZmZlciBvbmUgY2FuIHNlZWsgZnVydGhlciBiYWNrIGluIHRpbWUuCi0KLSAgVGhpcyBtb2RlIGlzIHN1aXRhYmxlIGZvciBhbGwgbGl2ZSBzdHJlYW1zLgotCi0gIEFzIHdpdGggdGhlIGluY3JlbWVudGFsIGRvd25sb2FkIG1vZGUsIGJ1ZmZlcmluZyBtZXNzYWdlcyBhcmUgZW1pdHRlZCBhbG9uZwotICB3aXRoIGFuIGluZGljYXRpb24gdGhhdCB0aW1lc2hpZnRpbmcgZG93bmxvYWQgaXMgaW4gcHJvZ3Jlc3MuIAotCi0KLSAqIExpdmUgYnVmZmVyaW5nCi0KLSAgSW4gbGl2ZSBwaXBlbGluZXMgd2UgdXN1YWxseSBpbnRyb2R1Y2Ugc29tZSBsYXRlbmN5IGJldHdlZW4gdGhlIGNhcHR1cmUgYW5kCi0gIHRoZSBwbGF5YmFjayBlbGVtZW50cy4gVGhpcyBsYXRlbmN5IGNhbiBiZSBpbnRyb2R1Y2VkIGJ5IGEgcXVldWUgKHN1Y2ggYXMgYQotICBqaXR0ZXJidWZmZXIpIG9yIGJ5IG90aGVyIG1lYW5zIChpbiB0aGUgYXVkaW9zaW5rKS4KLQotICBCdWZmZXJpbmcgbWVzc2FnZXMgY2FuIGJlIGVtaXR0ZWQgaW4gdGhvc2UgbGl2ZSBwaXBlbGluZXMgYXMgd2VsbCBhbmQgc2VydmUgYXMKLSAgYW4gaW5kaWNhdGlvbiB0byB0aGUgdXNlciBvZiB0aGUgbGF0ZW5jeSBidWZmZXJpbmcuIFRoZSBhcHBsaWNhdGlvbiB1c3VhbGx5Ci0gIGRvZXMgbm90IHJlYWN0IHRvIHRoZXNlIGJ1ZmZlcmluZyBtZXNzYWdlcyB3aXRoIGEgc3RhdGUgY2hhbmdlLgotCi0KLU1lc3NhZ2VzCi1+fn5+fn5+fgotCi1BIEdTVF9NRVNTQUdFX0JVRkZFUklORyBtdXN0IGJlIHBvc3RlZCBvbiB0aGUgYnVzIHdoZW4gcGxheWJhY2sgdGVtcG9yYXJpbHkKLXN0b3BzIHRvIGJ1ZmZlciBhbmQgd2hlbiBidWZmZXJpbmcgZmluaXNoZXMuIFdoZW4gdGhlIHBlcmNlbnRhZ2UgZmllbGQgaW4gdGhlCi1CVUZGRVJJTkcgbWVzc2FnZSBpcyAxMDAsIGJ1ZmZlcmluZyBpcyBkb25lLiBWYWx1ZXMgbGVzcyB0aGFuIDEwMCBtZWFuIHRoYXQKLWJ1ZmZlcmluZyBpcyBpbiBwcm9ncmVzcy4gCi0KLVRoZSBCVUZGRVJJTkcgbWVzc2FnZSBzaG91bGQgYmUgaW50ZXJjZXB0ZWQgYW5kIGFjdGVkIHVwb24gYnkgdGhlIGFwcGxpY2F0aW9uLgotVGhlIG1lc3NhZ2UgY29udGFpbnMgYXQgbGVhc3Qgb25lIGZpZWxkIHRoYXQgaXMgc3VmZmljaWVudCBmb3IgYmFzaWMKLWZ1bmN0aW9uYWxpdHk6Ci0KLSAgImJ1ZmZlci1wZXJjZW50IiwgR19UWVBFX0lOVCwgYmV0d2VlbiAwIGFuZCAxMDAKLQotU2V2ZXJhbCBtb3JlIGNsZXZlciB3YXlzIG9mIGRlYWxpbmcgd2l0aCB0aGUgYnVmZmVyaW5nIG1lc3NhZ2VzIGNhbiBiZSB1c2VkIHdoZW4KLWluIGluY3JlbWVudGFsIG9yIHRpbWVzaGlmdGluZyBkb3dubG9hZCBtb2RlLiBGb3IgdGhpcyBwdXJwb3NlIGFkZGl0aW9uYWwgZmllbGRzCi1hcmUgYWRkZWQgdG8gdGhlIGJ1ZmZlcmluZyBtZXNzYWdlOgotCi0gICJidWZmZXJpbmctbW9kZSIsIEdTVF9UWVBFX0JVRkZFUklOR19NT0RFLCAKLSAgICAgICAgICAgICAgICAgICBlbnVtIHsgInN0cmVhbSIsICJkb3dubG9hZCIsICJ0aW1lc2hpZnQiLCAibGl2ZSIgfQotICAgICAgLSBCdWZmZXJpbmcgbW9kZSBpbiB1c2UuIFNlZSBhYm92ZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlCi0gICAgICAgIGRpZmZlcmVudCBhbHRlcm5hdGl2ZXMuIFRoaXMgZmllbGQgY2FuIGJlIHVzZWQgdG8gbGV0IHRoZQotCWFwcGxpY2F0aW9uIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhlIGJ1ZmZlcmluZyBwcm9jZXNzLgotCi0gICJhdmctaW4tcmF0ZSIsIEdfVFlQRV9JTlQKLSAgICAgIC0gQXZlcmFnZSBpbnB1dCBidWZmZXJpbmcgc3BlZWQgaW4gYnl0ZXMvc2Vjb25kLiAtMSBpcyB1bmtub3duLgotICAgICAgICBUaGlzIGlzIHRoZSBhdmVyYWdlIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kIHRoYXQgaXMgcmVjZWl2ZWQgb24gdGhlCi0JYnVmZmVyaW5nIGVsZW1lbnQgaW5wdXQgKHNpbmspIHBhZHMuIEl0IGlzIGEgbWVhc3VyZW1lbnQgb2YgdGhlIG5ldHdvcmsKLQlzcGVlZCBpbiBtb3N0IGNhc2VzLgotCi0gICJhdmctb3V0LXJhdGUiLCBHX1RZUEVfSU5UCi0gICAgICAtIEF2ZXJhZ2UgY29uc3VtcHRpb24gc3BlZWQgaW4gYnl0ZXMvc2Vjb25kLiAtMSBpcyB1bmtub3duLgotICAgICAgICBUaGlzIGlzIHRoZSBhdmVyYWdlIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kIHRoYXQgaXMgY29uc3VtZWQgYnkgdGhlCi0JZG93bnN0cmVhbSBlbGVtZW50IG9mIHRoZSBidWZmZXJpbmcgZWxlbWVudC4gCi0KLSAgImJ1ZmZlcmluZy1sZWZ0IiwgR19UWVBFX0lOVDY0Ci0gICAgICAtIEVzdGltYXRlZCB0aW1lIHRoYXQgYnVmZmVyaW5nIHdpbGwgdGFrZSBpbiBtaWxsaXNlY29uZHMuIC0xIGlzIHVua25vd24uCi0gICAgICAgIFRoaXMgaXMgbWVhc3VyZWQgYmFzZWQgb24gdGhlIGF2Zy1pbi1yYXRlIGFuZCB0aGUgZmlsbGVkIGxldmVsIG9mIHRoZQotICAgICAgICBxdWV1ZS4gVGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhpcyBoaW50IHRvIHVwZGF0ZSB0aGUgR1VJIGFib3V0IHRoZQotICAgICAgICBlc3RpbWF0ZWQgcmVtYWluaW5nIHRpbWUgdGhhdCBidWZmZXJpbmcgd2lsbCB0YWtlLgotCi1BcHBsaWNhdGlvbgotfn5+fn5+fn5+fn4KLQotV2hpbGUgZGF0YSBpcyBidWZmZXJlZCB0aGUgcGlwZWxpbmUgc2hvdWxkIHJlbWFpbiBpbiB0aGUgUEFVU0VEIHN0YXRlLiBJdCBpcwotYWxzbyBwb3NzaWJsZSB0aGF0IG1vcmUgZGF0YSBzaG91bGQgYmUgYnVmZmVyZWQgd2hpbGUgdGhlIHBpcGVsaW5lIGlzIFBMQVlJTkcsCi1pbiB3aGljaCBjYXNlIHRoZSBwaXBlbGluZSBzaG91bGQgYmUgUEFVU0VEIHVudGlsIHRoZSBidWZmZXJpbmcgZmluaXNoZXMuCi0KLUJVRkZFUklORyBtZXNzYWdlcyBjYW4gYmUgcG9zdGVkIHdoaWxlIHRoZSBwaXBlbGluZSBpcyBwcmVyb2xsaW5nLiBUaGUKLWFwcGxpY2F0aW9uIHNob3VsZCBub3Qgc2V0IHRoZSBwaXBlbGluZSB0byBQTEFZSU5HIGJlZm9yZSBhIEJVRkZFUklORyBtZXNzYWdlCi13aXRoIGEgMTAwIHBlcmNlbnQgdmFsdWUgaXMgcmVjZWl2ZWQsIHdoaWNoIG1pZ2h0IG9ubHkgaGFwcGVuIGFmdGVyIHRoZSBwaXBlbGluZQotcHJlcm9sbHMuCi0KLUFuIGV4Y2VwdGlvbiBpcyBtYWRlIGZvciBsaXZlIHBpcGVsaW5lcy4gVGhlIGFwcGxpY2F0aW9uIG1heSBub3QgY2hhbmdlCi10aGUgc3RhdGUgb2YgYSBsaXZlIHBpcGVsaW5lIHdoZW4gYSBidWZmZXJpbmcgbWVzc2FnZSBpcyByZWNlaXZlZC4gVXN1YWxseSB0aGVzZQotYnVmZmVyaW5nIG1lc3NhZ2VzIGNvbnRhaW4gdGhlICJidWZmZXJpbmctbW9kZSIgPSAibGl2ZSIuCi0KLVRoZSBidWZmZXJpbmcgbWVzc2FnZSBjYW4gYWxzbyBpbnN0cnVjdCB0aGUgYXBwbGljYXRpb24gdG8gc3dpdGNoIHRvIGEKLXBlcmlvZGljYWwgQlVGRkVSSU5HIHF1ZXJ5IGluc3RlYWQsIHNvIGl0IGNhbiBtb3JlIHByZWNpc2VseSBjb250cm9sIHRoZQotYnVmZmVyaW5nIHByb2Nlc3MuIFRoZSBhcHBsaWNhdGlvbiBjYW4sIGZvciBleGFtcGxlLCBjaG9vc2Ugbm90IHRvIGFjdCBvbiB0aGUKLUJVRkZFUklORyBjb21wbGV0ZSBtZXNzYWdlIChidWZmZXItcGVyY2VudCA9IDEwMCkgdG8gcmVzdW1lIHBsYXliYWNrIGJ1dCB1c2UKLXRoZSBlc3RpbWF0ZWQgZG93bmxvYWQgdGltZSBpbnN0ZWFkLCByZXN1bWluZyBwbGF5YmFjayB3aGVuIGl0IGhhcyBkZXRlcm1pbmVkCi10aGF0IGl0IHNob3VsZCBiZSBhYmxlIHRvIHByb3ZpZGUgdW5pbnRlcnJ1cHRlZCBwbGF5YmFjay4KLQotCi1CdWZmZXJpbmcgUXVlcnkKLX5+fn5+fn5+fn5+fn5+fgotCi1JbiBhZGRpdGlvbiB0byB0aGUgQlVGRkVSSU5HIG1lc3NhZ2VzIHBvc3RlZCBieSB0aGUgYnVmZmVyaW5nIGVsZW1lbnRzLCB3ZSB3YW50Ci10byBiZSBhYmxlIHRvIHF1ZXJ5IHRoZSBzYW1lIGluZm9ybWF0aW9uIGZyb20gdGhlIGFwcGxpY2F0aW9uLiBXZSBhbHNvIHdhbnQgdG8KLWJlIGFibGUgdG8gcHJlc2VudCB0aGUgdXNlciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkb3dubG9hZGVkIHJhbmdlIGluIHRoZQotZmlsZSBzbyB0aGF0IHRoZSBHVUkgY2FuIHJlYWN0IG9uIGl0LgotCi1JbiBhZGRpdGlvbiB0byBhbGwgdGhlIGZpZWxkcyBwcmVzZW50IGluIHRoZSBidWZmZXJpbmcgbWVzc2FnZSwgdGhlIEJVRkZFUklORwotcXVlcnkgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZCwgd2hpY2ggaW5kaWNhdGVzIHRoZSBhdmFpbGFibGUgZG93bmxvYWRlZAotcmFuZ2UgaW4gYSBzcGVjaWZpYyBmb3JtYXQgYW5kIHRoZSBlc3RpbWF0ZWQgdGltZSB0byBjb21wbGV0ZToKLQotICAiYnVzeSIsIEdfVFlQRV9CT09MRUFOCi0gICAgLSBpZiBidWZmZXJpbmcgd2FzIGJ1c3kuIFRoaXMgZmxhZyBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHBhdXNlIHRoZQotICAgICAgcGlwZWxpbmUgYnkgdXNpbmcgdGhlIHF1ZXJ5IG9ubHkuCi0KLSAgImZvcm1hdCIsIEdTVF9UWVBFX0ZPUk1BVAotICAgIC0gdGhlIGZvcm1hdCBvZiB0aGUgInN0YXJ0IiBhbmQgInN0b3AiIHZhbHVlcyBiZWxvdyAgCi0gICAKLSAgInN0YXJ0IiwgR19UWVBFX0lOVDY0LCAtMSB1bmtub3duCi0gICAgLSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGF2YWlsYWJsZSBkYXRhLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcmFuZ2VzLAotICAgICAgdGhpcyBmaWVsZCBjb250YWlucyB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnRseSBkb3dubG9hZGluZwotICAgICAgcmFuZ2UuCi0KLSAgInN0b3AiLCBHX1RZUEVfSU5UNjQsIC0xIHVua25vd24KLSAgICAtIHRoZSBzdG9wIHBvc2l0aW9uIG9mIHRoZSBhdmFpbGFibGUgZGF0YS4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHJhbmdlcywKLSAgICAgIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIHN0b3AgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnRseSBkb3dubG9hZGluZwotICAgICAgcmFuZ2UuCi0KLSAgImVzdGltYXRlZC10b3RhbCIsIEdfVFlQRV9JTlQ2NAotICAgIC0gZ2l2ZXMgdGhlIGVzdGltYXRlZCBkb3dubG9hZCB0aW1lIGluIG1pbGxpc2Vjb25kcy4gLTEgdW5rbm93bi4KLQotICAgIFdoZW4gdGhlIHNpemUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZSBpcyBrbm93biwgdGhpcyB2YWx1ZSB3aWxsIGNvbnRhaW4KLSAgICB0aGUgbGF0ZXN0IGVzdGltYXRlIG9mIHRoZSByZW1haW5pbmcgZG93bmxvYWQgdGltZSBvZiB0aGUgY3VycmVudGx5Ci0gICAgZG93bmxvYWRpbmcgcmFuZ2UuIFRoaXMgdmFsdWUgaXMgdXN1YWxseSBvbmx5IGZpbGxlZCBmb3IgdGhlICJkb3dubG9hZCIKLSAgICBidWZmZXJpbmcgbW9kZS4gVGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBlc3RpbWF0ZSB0aGUKLSAgICBhbW91bnQgb2YgcmVtYWluaW5nIHRpbWUgdG8gZG93bmxvYWQgdGlsbCB0aGUgZW5kIG9mIHRoZSBmaWxlLgotCi0gICJidWZmZXJpbmctcmFuZ2VzIiwgR19UWVBFX0FSUkFZIG9mIEdzdFF1ZXJ5QnVmZmVyaW5nUmFuZ2UKLSAgICAtIGNvbnRhaW5zIG9wdGlvbmFsbHkgdGhlIGRvd25sb2FkZWQgYXJlYXMgaW4gdGhlIGZvcm1hdCBnaXZlbiBhYm92ZS4gT25lCi0gICAgICBvZiB0aGUgcmFuZ2VzIGNvbnRhaW5zIHRoZSBzYW1lIHN0YXJ0L3N0b3AgcG9zaXRpb24gYXMgYWJvdmUuCi0KLSAgICAgIHR5cGVkZWYgc3RydWN0Ci0gICAgICB7Ci0gICAgICAgIGdpbnQ2NCBzdGFydDsKLSAgICAgICAgZ2ludDY0IHN0b3A7Ci0gICAgICB9IEdzdFF1ZXJ5QnVmZmVyaW5nUmFuZ2U7Ci0KLQotRm9yIHRoZSAiZG93bmxvYWQiIGFuZCAidGltZXNoaWZ0IiBidWZmZXJpbmctbW9kZXMsIHRoZSBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbnMKLXNwZWNpZnkgdGhlIHJhbmdlcyB3aGVyZSBlZmZpY2llbnQgc2Vla2luZyBpbiB0aGUgZG93bmxvYWRlZCBtZWRpYSBpcyBwb3NzaWJsZS4KLVNlZWtpbmcgb3V0c2lkZSBvZiB0aGVzZSByYW5nZXMgbWlnaHQgYmUgc2xvdyBvciBub3QgYXQgYWxsIHBvc3NpYmxlLgotCi1Gb3IgdGhlICJzdHJlYW0iIGFuZCAibGl2ZSIgbW9kZSB0aGUgc3RhcnQgYW5kIHN0b3AgdmFsdWVzIGRlc2NyaWJlIHRoZSBvbGRlc3QKLWFuZCBuZXdlc3QgaXRlbSAoZXhwcmVzc2VkIGluICJmb3JtYXQiKSBpbiB0aGUgYnVmZmVyLiAKLQotCi1EZWZhdWx0cwotfn5+fn5+fn4KLQotU29tZSBkZWZhdWx0cyBmb3IgY29tbW9uIGVsZW1lbnRzOgotCi1BIEdzdEJhc2VTcmMgd2l0aCByYW5kb20gYWNjZXNzIHJlcGxpZXMgdG8gdGhlIEJVRkZFUklORyBxdWVyeSB3aXRoOgotCi0gICJidWZmZXItcGVyY2VudCIgPSAxMDAKLSAgImJ1ZmZlcmluZy1tb2RlIiA9ICJzdHJlYW0iCi0gICJhdmctaW4tcmF0ZSIgPSAtMQotICAiYXZnLW91dC1yYXRlIiA9IC0xCi0gICJidWZmZXJpbmctbGVmdCIgPSAwCi0gICJmb3JtYXQiID0gR1NUX0ZPUk1BVF9CWVRFUwotICAic3RhcnQiID0gMAotICAic3RvcCIgPSB0aGUgdG90YWwgZmlsZXNpemUKLSAgImVzdGltYXRlZC10b3RhbCIgPSAwCi0gICJidWZmZXJpbmctcmFuZ2VzIiA9IE5VTEwKLQotQSBHc3RCYXNlU3JjIGluIHB1c2ggbW9kZSByZXBsaWVzIHRvIHRoZSBCVUZGRVJJTkcgcXVlcnkgd2l0aDoKLQotICAiYnVmZmVyLXBlcmNlbnQiID0gMTAwCi0gICJidWZmZXJpbmctbW9kZSIgPSAic3RyZWFtIgotICAiYXZnLWluLXJhdGUiID0gLTEKLSAgImF2Zy1vdXQtcmF0ZSIgPSAtMQotICAiYnVmZmVyaW5nLWxlZnQiID0gMAotICAiZm9ybWF0IiA9IGEgdmFsaWQgR1NUX1RZUEVfRk9STUFUCi0gICJzdGFydCIgPSBjdXJyZW50IHBvc2l0aW9uCi0gICJzdG9wIiA9IGN1cnJlbnQgcG9zaXRpb24KLSAgImVzdGltYXRlZC10b3RhbCIgPSAtMQotICAiYnVmZmVyaW5nLXJhbmdlcyIgPSBOVUxMCi0KLQotQnVmZmVyaW5nIHN0cmF0ZWdpZXMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLSBCdWZmZXJpbmcgc3RyYXRlZ2llcyBhcmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHRoZSBidWZmZXJpbmcKLSBtZXNzYWdlIGFuZCBxdWVyeSBkZXNjcmliZWQgYWJvdmUuCi0KLSBNb3N0IHN0cmF0ZWdpZXMgaGF2ZSB0byBiYWxhbmNlIGJ1ZmZlcmluZyB0aW1lIHZlcnN1cyBtYXhpbWFsIHBsYXliYWNrCi0gZXhwZXJpZW5jZS4KLQotICogc2ltcGxlIGJ1ZmZlcmluZwotCi0gICBOT04tbGl2ZSBwaXBlbGluZXMgYXJlIGtlcHQgaW4gdGhlIHBhdXNlZCBzdGF0ZSB3aGlsZSBidWZmZXJpbmcgbWVzc2FnZXMgd2l0aAotICAgYSBwZXJjZW50IDwgMTAwJSBhcmUgcmVjZWl2ZWQuCi0KLSAgIFRoaXMgYnVmZmVyaW5nIHN0cmF0ZWd5IHJlbGllcyBvbiB0aGUgYnVmZmVyIHNpemUgYW5kIGxvdy9oaWdoIHdhdGVybWFya3Mgb2YKLSAgIHRoZSBlbGVtZW50LiBJdCBjYW4gd29yayB3aXRoIGEgZml4ZWQgc2l6ZSBidWZmZXIgaW4gbWVtb3J5IG9yIG9uIGRpc2suCi0KLSAgIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXMgdXN1YWxseSBleHByZXNzZWQgaW4gYSBmaXhlZCBhbW91bnQgb2YgdGltZSB1bml0cwotICAgYW5kIHRoZSBlc3RpbWF0ZWQgYml0cmF0ZSBvZiB0aGUgdXBzdHJlYW0gc291cmNlIGlzIHVzZWQgdG8gY29udmVydCB0aGlzIHRpbWUKLSAgIHRvIGJ5dGVzLgotCi0gICBBbGwgR1N0cmVhbWVyIGFwcGxpY2F0aW9ucyBtdXN0IGltcGxlbWVudCB0aGlzIHN0cmF0ZWd5LiBGYWlsdXJlIHRvIGRvIHNvCi0gICB3aWxsIHJlc3VsdCBpbiBzdGFydmF0aW9uIGF0IHRoZSBzaW5rLgotCi0gKiBuby1yZWJ1ZmZlciBzdHJhdGVneQotCi0gICBUaGlzIHN0cmF0ZWd5IHRyaWVzIHRvIGJ1ZmZlciBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUgc28gdGhhdCBwbGF5YmFjayBjYW4KLSAgIGNvbnRpbnVlIHdpdGhvdXQgYW55IGZ1cnRoZXIgcmVidWZmZXJpbmcuCi0KLSAgIFRoaXMgc3RyYXRlZ3kgaXMgaW5pdGlhbGx5IHNpbWlsYXIgdG8gc2ltcGxlIGJ1ZmZlcmluZywgdGhlIGRpZmZlcmVuY2UgaXMgaW4KLSAgIGRlY2lkaW5nIG9uIHRoZSBjb25kaXRpb24gdG8gY29udGludWUgcGxheWJhY2suIFdoZW4gYSAxMDAlIGJ1ZmZlcmluZyBtZXNzYWdlCi0gICBoYXMgYmVlbiByZWNlaXZlZCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IHlldCBzdGFydCB0aGUgcGxheWJhY2sgYnV0IGl0IHdpbGwKLSAgIHN0YXJ0IGEgcGVyaW9kaWMgYnVmZmVyaW5nIHF1ZXJ5LCB3aGljaCB3aWxsIHJldHVybiB0aGUgZXN0aW1hdGVkIGFtb3VudCBvZgotICAgYnVmZmVyaW5nIHRpbWUgbGVmdC4gV2hlbiB0aGUgZXN0aW1hdGVkIHRpbWUgbGVmdCBpcyBsZXNzIHRoYW4gdGhlIHJlbWFpbmluZwotICAgcGxheWJhY2sgdGltZSwgcGxheWJhY2sgY2FuIGNvbnRpbnVlLgotCi0gICBUaGlzIHN0cmF0ZWd5IHJlcXVpcmVzIGEgdW5saW1pdGVkIGJ1ZmZlciBzaXplIGluIG1lbW9yeSBvciBvbiBkaXNrLCBzdWNoIGFzCi0gICBwcm92aWRlZCBieSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGUgaW5jcmVtZW50YWwgZG93bmxvYWQgYnVmZmVyaW5nIG1vZGUuCi0KLSAgIFVzdWFsbHksIHRoZSBhcHBsaWNhdGlvbiBjYW4gY2hvb3NlIHRvIHN0YXJ0IHBsYXliYWNrIGV2ZW4gYmVmb3JlIHRoZQotICAgcmVtYWluaW5nIGJ1ZmZlciB0aW1lIGVsYXBzZWQgaW4gb3JkZXIgdG8gbW9yZSBxdWlja2x5IHN0YXJ0IHRoZSBwbGF5YmFjayBhdAotICAgdGhlIGV4cGVuc2Ugb2YgYSBwb3NzaWJsZSByZWJ1ZmZlcmluZyBwaGFzZS4KLQotICogSW5jcmVtZW50YWwgcmVidWZmZXJpbmcKLQotICAgVGhlIGFwcGxpY2F0aW9uIGltcGxlbWVudHMgdGhlIHNpbXBsZSBidWZmZXJpbmcgc3RyYXRlZ3kgYnV0IHdpdGggZWFjaAotICAgcmVidWZmZXJpbmcgcGhhc2UsIGl0IGluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAKLQotICAgVGhpcyBzdHJhdGVneSBoYXMgcXVpY2ssIGZpeGVkIHRpbWUgc3RhcnR1cCB0aW1lcyBidXQgaW5jcmVtZW50YWxseSBsb25nZXIKLSAgIHJlYnVmZmVyaW5nIHRpbWVzIGlmIHRoZSBuZXR3b3JrIGlzIHNsb3dlciB0aGFuIHRoZSBtZWRpYSBiaXRyYXRlLgotCi0gICAKLQotCi0KLQotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1idWZmZXJwb29sLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQzNTExZi4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWJ1ZmZlcnBvb2wudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLUJ1ZmZlcnBvb2wKLS0tLS0tLS0tLS0KLQotVGhpcyBkb2N1bWVudCBkZXRhaWxzIHRoZSBkZXNpZ24gb2YgaG93IGJ1ZmZlcnMgYXJlIGJlIGFsbG9jYXRlZCBhbmQKLW1hbmFnZWQgaW4gcG9vbHMuCi0KLUJ1ZmZlcnBvb2xzIGluY3JlYXNlIHBlcmZvcm1hbmNlIGJ5IHJlZHVjaW5nIGFsbG9jYXRpb24gb3ZlcmhlYWQgYW5kCi1pbXByb3ZpbmcgcG9zc2liaWxpdGllcyB0byBpbXBsZW1lbnQgemVyby1jb3B5IG1lbW9yeSB0cmFuc2Zlci4KLQotVG9nZXRoZXIgd2l0aCB0aGUgQUxMT0NBVElPTiBxdWVyeSwgZWxlbWVudHMgY2FuIG5lZ290aWF0ZSBhbGxvY2F0aW9uIHByb3BlcnRpZXMKLWFuZCBidWZmZXJwb29scyBiZXR3ZWVuIHRoZW1zZWx2ZXMuIFRoaXMgYWxzbyBhbGxvd3MgZWxlbWVudHMgdG8gbmVnb3RpYXRlCi1idWZmZXIgbWV0YWRhdGEgYmV0d2VlbiB0aGVtc2VsdmVzLgotCi1SZXF1aXJlbWVudHMKLS0tLS0tLS0tLS0tLQotCi0gLSBQcm92aWRlIGEgR3N0QnVmZmVyUG9vbCBiYXNlIGNsYXNzIHRvIGhlbHAgdGhlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZiBhCi0gICBsaXN0IG9mIHJldXNhYmxlIEdzdEJ1ZmZlciBvYmplY3RzLgotCi0gLSBMZXQgdXBzdHJlYW0gZWxlbWVudHMgaW5pdGlhdGUgdGhlIG5lZ290aWF0aW9uIG9mIGEgYnVmZmVycG9vbCBhbmQgaXRzCi0gICBjb25maWd1cmF0aW9uLiBBbGxvdyBkb3duc3RyZWFtIGVsZW1lbnRzIHByb3ZpZGUgYnVmZmVycG9vbCBwcm9wZXJ0aWVzIGFuZC9vcgotICAgYSBidWZmZXJwb29sLiBUaGlzIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKLQotICAgICogaGF2ZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFtb3VudCBvZiBidWZmZXJzIHdpdGggdGhlIG9wdGlvbiBvZiAKLSAgICAgIHByZWFsbG9jYXRpbmcgYnVmZmVycy4KLSAgICAqIGFsbG9jYXRvciwgYWxpZ25tZW50IGFuZCBwYWRkaW5nIHN1cHBvcnQKLSAgICAqIGJ1ZmZlciBtZXRhZGF0YQotICAgICogYXJiaXRyYXJ5IGV4dHJhIG9wdGlvbnMKLQotIC0gSW50ZWdyYXRlIHdpdGggZHluYW1pYyBjYXBzIHJlbmVnb3RpYXRpb24uCi0KLSAtIE5vdGlmeSB1cHN0cmVhbSBlbGVtZW50IG9mIG5ldyBidWZmZXJwb29sIGF2YWlsYWJpbGl0eS4gVGhpcyBpcyBpbXBvcnRhbnQKLSAgIHdoZW4gYSBuZXcgZWxlbWVudCwgdGhhdCBjYW4gcHJvdmlkZSBhIGJ1ZmZlcnBvb2wsIGlzIGR5bmFtaWNhbGx5IGxpbmtlZAotICAgZG93bnN0cmVhbS4KLQotCi1Hc3RCdWZmZXJQb29sCi0tLS0tLS0tLS0tLS0tCi0KLSBUaGUgYnVmZmVycG9vbCBvYmplY3QgbWFuYWdlcyBhIGxpc3Qgb2YgYnVmZmVycyB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgc3VjaAotIGFzIHNpemUsIHBhZGRpbmcgYW5kIGFsaWdubWVudC4KLQotIFRoZSBidWZmZXJwb29sIGhhcyB0d28gc3RhdGVzOiBhY3RpdmUgYW5kIGluYWN0aXZlLiBJbiB0aGUgaW5hY3RpdmUKLSBzdGF0ZSwgdGhlIGJ1ZmZlcnBvb2wgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgcmVxdWlyZWQgYWxsb2NhdGlvbgotIHByZWZlcmVuY2VzLiBJbiB0aGUgYWN0aXZlIHN0YXRlLCBidWZmZXJzIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBhbmQKLSByZXR1cm5lZCB0byB0aGUgcG9vbC4KLQotIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBidWZmZXJwb29sIGlzIGFibGUgdG8gYWxsb2NhdGUgYnVmZmVycwotIGZyb20gYW55IGFsbG9jYXRvciB3aXRoIGFyYml0cmFyeSBhbGlnbm1lbnQgYW5kIHBhZGRpbmcvcHJlZml4LgotCi0gQ3VzdG9tIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYnVmZmVycG9vbCBjYW4gb3ZlcnJpZGUgdGhlIGFsbG9jYXRpb24gYW5kCi0gZnJlZSBhbGdvcml0aG1zIG9mIHRoZSBidWZmZXJzIGZyb20gdGhlIHBvb2wuIFRoaXMgc2hvdWxkIGFsbG93IGZvcgotIGRpZmZlcmVudCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgc3VjaCBhcyB1c2luZyBzaGFyZWQgbWVtb3J5IG9yIGhhcmR3YXJlCi0gbWFwcGVkIG1lbW9yeS4KLQotCi1OZWdvdGlhdGlvbgotLS0tLS0tLS0tLS0KLQotIEFmdGVyIGEgcGFydGljdWxhciBtZWRpYSBmb3JtYXQgaGFzIGJlZW4gbmVnb3RpYXRlZCBiZXR3ZWVuIHR3byBwYWRzICh1c2luZyB0aGUKLSBDQVBTIGV2ZW50KSwgdGhleSBtdXN0IGFncmVlIG9uIGhvdyB0byBhbGxvY2F0ZSBidWZmZXJzLgotCi0gVGhlIHNyY3BhZCB3aWxsIGFsd2F5cyB0YWtlIHRoZSBpbml0aWF0aXZlIHRvIG5lZ290aWF0ZSB0aGUgYWxsb2NhdGlvbgotIHByb3BlcnRpZXMuIEl0IHN0YXJ0cyB3aXRoIGNyZWF0aW5nIGEgR1NUX1FVRVJZX0FMTE9DQVRJT04gd2l0aCB0aGUgbmVnb3RpYXRlZAotIGNhcHMuCi0KLSBUaGUgc3JjcGFkIGNhbiBzZXQgdGhlIG5lZWQtcG9vbCBmbGFnIHRvIFRSVUUgaW4gdGhlIHF1ZXJ5IHRvIG9wdGlvbmFsbHkgbWFrZSB0aGUKLSBwZWVyIHBhZCBhbGxvY2F0ZSBhIGJ1ZmZlcnBvb2wuIEl0IHNob3VsZCBvbmx5IGRvIHRoaXMgaWYgaXQgaXMgYWJsZSB0byB1c2UKLSB0aGUgcGVlciBwcm92aWRlZCBidWZmZXJwb29sLgotCi0gSXQgd2lsbCB0aGVuIGluc3BlY3QgdGhlIHJldHVybmVkIHJlc3VsdHMgYW5kIGNvbmZpZ3VyZSB0aGUgcmV0dXJuZWQgcG9vbCBvcgotIGNyZWF0ZSBhIG5ldyBwb29sIHdpdGggdGhlIHJldHVybmVkIHByb3BlcnRpZXMgd2hlbiBuZWVkZWQuCi0KLSBCdWZmZXJzIGFyZSB0aGVuIGFsbG9jYXRlZCBieSB0aGUgc3JjcGFkIGZyb20gdGhlIG5lZ290aWF0ZWQgcG9vbCBhbmQgcHVzaGVkIHRvCi0gdGhlIHBlZXIgcGFkIGFzIHVzdWFsLgotCi0gVGhlIGFsbG9jYXRpb24gcXVlcnkgY2FuIGFsc28gcmV0dXJuIGFuIGFsbG9jYXRvciBvYmplY3Qgd2hlbiB0aGUgYnVmZmVycyBhcmUgb2YKLSBkaWZmZXJlbnQgc2l6ZXMgYW5kIGNhbid0IGJlIGFsbG9jYXRlZCBmcm9tIGEgcG9vbC4KLQotCi1BbGxvY2F0aW9uIHF1ZXJ5Ci0tLS0tLS0tLS0tLS0tLS0tCi0KLSBUaGUgYWxsb2NhdGlvbiBxdWVyeSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6Ci0KLSAgKGluKSAiY2FwcyIsIEdTVF9UWVBFX0NBUFMKLSAgICAgICAgLSB0aGUgY2FwcyB0aGF0IHdhcyBuZWdvdGlhdGVkCi0KLSAgKGluKSAibmVlZC1wb29sIiwgR19UWVBFX0JPT0xFQU4KLSAgICAgICAgLSBpZiBhIEdzdEJ1ZmZlclBvb2wgaXMgcmVxdWVzdGVkCi0KLSAgKG91dCkgInBvb2wiLCBHX1RZUEVfQVJSQVkgb2Ygc3RydWN0dXJlCi0gICAgICAgIC0gYW4gYXJyYXkgb2YgcG9vbCBjb25maWd1cmF0aW9ucy4KLQotICAgICAgc3RydWN0IHsKLSAgICAgICAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLSAgICAgICAgZ3VpbnQgICAgICAgICAgc2l6ZTsKLSAgICAgICAgZ3VpbnQgICAgICAgICAgbWluX2J1ZmZlcnM7Ci0gICAgICAgIGd1aW50ICAgICAgICAgIG1heF9idWZmZXJzOwotICAgICAgfQotCi0gICAgICBVc2UgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2woKSB0byBnZXQgdGhlIHZhbHVlcy4KLQotICAgICAgVGhlIGFsbG9jYXRvciBjYW4gY29udGFpbiBtdWx0aXBsZSBwb29sIGNvbmZpZ3VyYXRpb25zLiBJZiBuZWVkLXBvb2wKLSAgICAgIHdhcyBUUlVFLCB0aGUgcG9vbCBtZW1iZXIgbWlnaHQgY29udGFpbiBhIEdzdEJ1ZmZlclBvb2wgd2hlbiB0aGUKLSAgICAgIGRvd25zdHJlYW0gZWxlbWVudCBjYW4gcHJvdmlkZSBvbmUuCi0KLSAgICAgIFNpemUgY29udGFpbnMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcnBvb2wncyBidWZmZXJzIGFuZCBpcyBuZXZlciAwLgotCi0gICAgICBtaW5fYnVmZmVycyBhbmQgbWF4X2J1ZmZlcnMgY29udGFpbiB0aGUgc3VnZ2VzdGVkIG1pbiBhbmQgbWF4IGFtb3VudCBvZgotICAgICAgYnVmZmVycyB0aGF0IHNob3VsZCBiZSBtYW5hZ2VkIGJ5IHRoZSBwb29sLgotCi0gICAgICBUaGUgdXBzdHJlYW0gZWxlbWVudCBjYW4gY2hvb3NlIHRvIHVzZSB0aGUgcHJvdmlkZWQgcG9vbCBvciBtYWtlIGl0cyBvd24KLSAgICAgIHBvb2wgd2hlbiBub25lIHdhcyBwcm92aWRlZCBvciB3aGVuIHRoZSBzdWdnZXN0ZWQgcG9vbCB3YXMgbm90Ci0gICAgICBhY2NlcHRhYmxlLgotCi0gICAgICBUaGUgcG9vbCBjYW4gdGhlbiBiZSBjb25maWd1cmVkIHdpdGggdGhlIHN1Z2dlc3RlZCBtaW4gYW5kIG1heCBhbW91bnQgb2YKLSAgICAgIGJ1ZmZlcnMgb3IgYSBkb3duc3RyZWFtIGVsZW1lbnQgbWlnaHQgY2hvb3NlIGRpZmZlcmVudCB2YWx1ZXMuIAotCi0gIChvdXQpICJhbGxvY2F0b3IiLCBHX1RZUEVfQVJSQVkgb2Ygc3RydWN0dXJlCi0gICAgICAgIC0gYW4gYXJyYXkgb2YgYWxsb2NhdG9yIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdXNlZC4KLQotICAgICAgc3RydWN0IHsKLSAgICAgICAgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7Ci0gICAgICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zOwotICAgICAgfQotCi0gICAgICBVc2UgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3BhcmFtKCkgdG8gZ2V0IHRoZSB2YWx1ZXMuCi0KLSAgICAgIFRoZSBlbGVtZW50IHBlcmZvcm1pbmcgdGhlIHF1ZXJ5IGNhbiB1c2UgdGhlIGFsbG9jYXRvcnMgYW5kIGl0cwotICAgICAgcGFyYW1ldGVycyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQuIAotCi0gICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSB0aGUgYWxsb2NhdG9yIGluIGEgcHJvdmlkZWQgcG9vbC4KLQotICAob3V0KSAibWV0YWRhdGEiLCBHX1RZUEVfQVJSQVkgb2Ygc3RydWN0dXJlCi0gICAgICAgIC0gYW4gYXJyYXkgb2YgbWV0YWRhdGEgcGFyYW1zIHRoYXQgY2FuIGJlIGFjY2VwdGVkLgotCi0gICAgICBzdHJ1Y3QgewotICAgICAgICBHVHlwZSBhcGk7Ci0gICAgICAgIEdzdFN0cnVjdHVyZSAqcGFyYW1zOwotICAgICAgfQotCi0gICAgICBVc2UgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGEoKSB0byBnZXQgdGhlIHZhbHVlcy4KLQotICAgICAgVGhlc2UgbWV0YWRhdGEgaXRlbXMgY2FuIGJlIGFjY2VwdGVkIGJ5IHRoZSBkb3duc3RyZWFtIGVsZW1lbnQgd2hlbgotICAgICAgcGxhY2VkIG9uIGJ1ZmZlcnMuIFRoZXJlIGlzIGFsc28gYW4gYXJiaXRyYXJ5IEdzdFN0cnVjdHVyZSBhc3NvY2lhdGVkCi0gICAgICB3aXRoIHRoZSBtZXRhZGF0YSB0aGF0IGNvbnRhaW5zIG1ldGFkYXRhLXNwZWNpZmljIG9wdGlvbnMuCi0KLSAgICAgIFNvbWUgYnVmZmVycG9vbHMgaGF2ZSBvcHRpb25zIHRvIGVuYWJsZSBtZXRhZGF0YSBvbiB0aGUgYnVmZmVycwotICAgICAgYWxsb2NhdGVkIGJ5IHRoZSBwb29sLgotCi0KLUFsbG9jYXRpbmcgZnJvbSBwb29sCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gQnVmZmVycyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIHBvb2wgb2YgYSBwYWQ6Ci0KLSAgcmVzID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCAmYnVmZmVyLCAmcGFyYW1zKTsKLQotIEEgR3N0QnVmZmVyIHRoYXQgaXMgYWxsb2NhdGVkIGZyb20gdGhlIHBvb2wgd2lsbCBhbHdheXMgYmUgd3JpdGFibGUgKGhhdmUgYQotIHJlZmNvdW50IG9mIDEpIGFuZCBpdCB3aWxsIGFsc28gaGF2ZSBpdHMgcG9vbCBtZW1iZXIgcG9pbnQgdG8gdGhlIEdzdEJ1ZmZlclBvb2wKLSB0aGF0IGNyZWF0ZWQgdGhlIGJ1ZmZlci4KLQotIEJ1ZmZlcnMgYXJlIHJlZmNvdW50ZWQgaW4gdGhlIHVzdWFsIHdheS4gV2hlbiB0aGUgcmVmY291bnQgb2YgdGhlIGJ1ZmZlcgotIHJlYWNoZXMgMCwgdGhlIGJ1ZmZlciBpcyBhdXRvbWF0aWNhbGx5IHJldHVybmVkIHRvIHRoZSBwb29sLgotCi0gU2luY2UgYWxsIHRoZSBidWZmZXJzIGFsbG9jYXRlZCBmcm9tIHRoZSBwb29sIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBvb2wsCi0gd2hlbiBub3RoaW5nIGVsc2UgaXMgaG9sZGluZyBhIHJlZmNvdW50IHRvIHRoZSBwb29sLCBpdCB3aWxsIGJlIGZpbmFsaXplZAotIHdoZW4gYWxsIHRoZSBidWZmZXJzIGZyb20gdGhlIHBvb2wgYXJlIHVucmVmZmVkLiBCeSBzZXR0aW5nIHRoZSBwb29sIHRvCi0gdGhlIGluYWN0aXZlIHN0YXRlIHdlIGNhbiBkcmFpbiBhbGwgYnVmZmVycyBmcm9tIHRoZSBwb29sLiAKLQotIFdoZW4gdGhlIHBvb2wgaXMgaW4gdGhlIGluYWN0aXZlIHN0YXRlLCBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKSB3aWxsCi0gcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HIGltbWVkaWF0ZWx5LgotCi0gRXh0cmEgcGFyYW1ldGVycyBjYW4gYmUgZ2l2ZW4gdG8gdGhlIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcigpIG1ldGhvZCB0bwotIGluZmx1ZW5jZSB0aGUgYWxsb2NhdGlvbiBkZWNpc2lvbi4gR1NUX0JVRkZFUl9QT09MX0ZMQUdfS0VZX1VOSVQgYW5kCi0gR1NUX0JVRkZFUl9QT09MX0ZMQUdfRElTQ09OVCBzZXJ2ZSBhcyBoaW50cy4KLQotIFdoZW4gdGhlIGJ1ZmZlcnBvb2wgaXMgY29uZmlndXJlZCB3aXRoIGEgbWF4aW11bSBudW1iZXIgb2YgYnVmZmVycywgYWxsb2NhdGlvbgotIHdpbGwgYmxvY2sgd2hlbiBhbGwgYnVmZmVycyBhcmUgb3V0c3RhbmRpbmcgdW50aWwgYSBidWZmZXIgaXMgcmV0dXJuZWQgdG8gdGhlCi0gcG9vbC4gVGhpcyBiZWhhdmlvdXIgY2FuIGJlIGNoYW5nZWQgYnkgc3BlY2lmeWluZyB0aGUKLSBHU1RfQlVGRkVSX1BPT0xfRkxBR19ET05UV0FJVCBmbGFnIGluIHRoZSBwYXJhbWV0ZXJzLiBXaXRoIHRoaXMgZmxhZyBzZXQsCi0gYWxsb2NhdGlvbiB3aWxsIHJldHVybiBHU1RfRkxPV19FT1Mgd2hlbiB0aGUgcG9vbCBpcyBlbXB0eS4KLQotCi1SZW5lZ290aWF0aW9uCi0tLS0tLS0tLS0tLS0tCi0KLVJlbmVnb3RpYXRpb24gb2YgdGhlIGJ1ZmZlcnBvb2wgbWlnaHQgbmVlZCB0byBiZSBwZXJmb3JtZWQgd2hlbiB0aGUKLWNvbmZpZ3VyYXRpb24gb2YgdGhlIHBvb2wgY2hhbmdlcy4gQ2hhbmdlcyBjYW4gYmUgaW4gdGhlIGJ1ZmZlciBzaXplIChiZWNhdXNlCi1vZiBhIGNhcHMgY2hhbmdlKSwgYWxpZ25tZW50IG9yIG51bWJlciBvZiBidWZmZXJzLiAKLQotKiBkb3duc3RyZWFtCi0KLSAgV2hlbiB0aGUgdXBzdHJlYW0gZWxlbWVudCB3YW50cyB0byBuZWdvdGlhdGUgYSBuZXcgZm9ybWF0LCBpdCBtaWdodCBuZWVkCi0gIHRvIHJlbmVnb3RpYXRlIGEgbmV3IGJ1ZmZlcnBvb2wgY29uZmlndXJhdGlvbiB3aXRoIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQuCi0gIFRoaXMgY2FuLCBmb3IgZXhhbXBsZSwgaGFwcGVuIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGNoYW5nZXMuCi0KLSAgV2UgY2FuIG5vdCBqdXN0IHJlY29uZmlndXJlIHRoZSBleGlzdGluZyBidWZmZXJwb29sIGJlY2F1c2UgdGhlcmUgbWlnaHQKLSAgc3RpbGwgYmUgb3V0c3RhbmRpbmcgYnVmZmVycyBmcm9tIHRoZSBwb29sIGluIHRoZSBwaXBlbGluZS4gVGhlcmVmb3JlIHdlCi0gIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGJ1ZmZlcnBvb2wgZm9yIHRoZSBuZXcgY29uZmlndXJhdGlvbiB3aGlsZSB3ZSBsZXQgdGhlCi0gIG9sZCBwb29sIGRyYWluLgotCi0gIEltcGxlbWVudGF0aW9ucyBjYW4gY2hvb3NlIHRvIHJldXNlIHRoZSBzYW1lIGJ1ZmZlcnBvb2wgb2JqZWN0IGFuZCB3YWl0IGZvcgotICB0aGUgZHJhaW4gdG8gZmluaXNoIGJlZm9yZSByZWNvbmZpZ3VyaW5nIHRoZSBwb29sLgotCi0gIFRoZSBlbGVtZW50IHRoYXQgd2FudHMgdG8gcmVuZWdvdGlhdGUgYSBuZXcgYnVmZmVycG9vbCB1c2VzIGV4YWN0bHkgdGhlIHNhbWUKLSAgYWxnb3JpdGhtIGFzIHdoZW4gaXQgZmlyc3Qgc3RhcnRlZC4gSXQgd2lsbCBuZWdvdGlhdGUgY2FwcyBmaXJzdCB0aGVuIHVzZSB0aGUKLSAgQUxMT0NBVElPTiBxdWVyeSB0byBnZXQgYW5kIGNvbmZpZ3VyZSB0aGUgbmV3IHBvb2wuCi0gIAotKiB1cHN0cmVhbSAKLQotICBXaGVuIGEgZG93bnN0cmVhbSBlbGVtZW50IHdhbnRzIHRvIG5lZ290aWF0ZSBhIG5ldyBmb3JtYXQsIGl0IHdpbGwgc2VuZCBhIAotICBSRUNPTkZJR1VSRSBldmVudCB1cHN0cmVhbS4gVGhpcyBpbnN0cnVjdHMgdXBzdHJlYW0gdG8gcmVuZWdvdGlhdGUgYm90aAotICB0aGUgZm9ybWF0IGFuZCB0aGUgYnVmZmVycG9vbCB3aGVuIG5lZWRlZC4KLQotICBBIHBpcGVsaW5lIHJlY29uZmlndXJhdGlvbiBoYXBwZW5zIHdoZW4gbmV3IGVsZW1lbnRzIGFyZSBhZGRlZCBvciByZW1vdmVkIGZyb20KLSAgdGhlIHBpcGVsaW5lIG9yIHdoZW4gdGhlIHRvcG9sb2d5IG9mIHRoZSBwaXBlbGluZSBjaGFuZ2VzLiBQaXBlbGluZQotICByZWNvbmZpZ3VyYXRpb24gYWxzbyB0cmlnZ2VycyBwb3NzaWJsZSByZW5lZ290aWF0aW9uIG9mIHRoZSBidWZmZXJwb29sIGFuZAotICBjYXBzLgotCi0gIEEgUkVDT05GSUdVUkUgZXZlbnQgdGFncyBlYWNoIHBhZCBpdCB0cmF2ZWxzIG9uIGFzIG5lZWRpbmcgcmVjb25maWd1cmF0aW9uLgotICBUaGUgbmV4dCBidWZmZXIgYWxsb2NhdGlvbiB3aWxsIHRoZW4gcmVxdWlyZSB0aGUgcmVuZWdvdGlhdGlvbiBvcgotICByZWNvbmZpZ3VyYXRpb24gb2YgYSBwb29sLgotCi0KLVNodXR0aW5nIGRvd24KLS0tLS0tLS0tLS0tLS0KLQotIEluIHB1c2ggbW9kZSwgYSBzb3VyY2UgcGFkIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBwb29sIHRvIHRoZQotIGluYWN0aXZlIHN0YXRlIHdoZW4gc3RyZWFtaW5nIHN0b3BzLiBUaGUgaW5hY3RpdmUgc3RhdGUgd2lsbCB1bmJsb2NrIGFueSBwZW5kaW5nCi0gYWxsb2NhdGlvbnMgc28gdGhhdCB0aGUgZWxlbWVudCBjYW4gc2h1dCBkb3duLgotCi0gSW4gcHVsbCBtb2RlLCB0aGUgc2luayBlbGVtZW50IHNob3VsZCBzZXQgdGhlIHBvb2wgdG8gdGhlIGluYWN0aXZlIHN0YXRlIHdoZW4KLSBzaHV0dGluZyBkb3duIHNvIHRoYXQgdGhlIHBlZXIgX2dldF9yYW5nZSgpIGZ1bmN0aW9uIGNhbiB1bmJsb2NrLgotCi0gSW4gdGhlIGluYWN0aXZlIHN0YXRlLCBhbGwgdGhlIGJ1ZmZlcnMgdGhhdCBhcmUgcmV0dXJuZWQgdG8gdGhlIHBvb2wgd2lsbAotIGF1dG9tYXRpY2FsbHkgYmUgZnJlZWQgYnkgdGhlIHBvb2wgYW5kIG5ldyBhbGxvY2F0aW9ucyB3aWxsIGZhaWwuCi0gCi0KLVVzZSBjYXNlcwotLS0tLS0tLS0tCi0KLTEpICB2aWRlb3Rlc3RzcmMgISB4dmltYWdlc2luawotCi0gQmVmb3JlIHZpZGVvdGVzdHNyYyBjYW4gb3V0cHV0IGEgYnVmZmVyLCBpdCBuZWVkcyB0byBuZWdvdGlhdGUgY2FwcyBhbmQKLSBhIGJ1ZmZlcnBvb2wgd2l0aCB0aGUgZG93bnN0cmVhbSBwZWVyIHBhZC4KLQotIEZpcnN0IGl0IHdpbGwgbmVnb3RpYXRlIGEgc3VpdGFibGUgZm9ybWF0IHdpdGggZG93bnN0cmVhbSBhY2NvcmRpbmcgdG8gdGhlCi0gbm9ybWFsIHJ1bGVzLiBJdCB3aWxsIHNlbmQgYSBDQVBTIGV2ZW50IGRvd25zdHJlYW0gd2l0aCB0aGUgbmVnb3RpYXRlZAotIGNvbmZpZ3VyYXRpb24uCi0KLSBUaGVuIGl0IGRvZXMgYW4gQUxMT0NBVElPTiBxdWVyeS4gSXQgd2lsbCB1c2UgdGhlIHJldHVybmVkIGJ1ZmZlcnBvb2wgb3IKLSBjb25maWd1cmVzIGl0cyBvd24gYnVmZmVycG9vbCB3aXRoIHRoZSByZXR1cm5lZCBwYXJhbWV0ZXJzLiBUaGUgYnVmZmVycG9vbCBpcwotIGluaXRpYWxseSBpbiB0aGUgaW5hY3RpdmUgc3RhdGUuCi0KLSBUaGUgQUxMT0NBVElPTiBxdWVyeSBsaXN0cyB0aGUgZGVzaXJlZCBjb25maWd1cmF0aW9uIG9mIHRoZSBkb3duc3RyZWFtIAotIHh2aW1hZ2VzaW5rLCB3aGljaCBjYW4gaGF2ZSBzcGVjaWZpYyBhbGlnbm1lbnQgYW5kL29yIG1pbi9tYXggYW1vdW50IG9mCi0gYnVmZmVycy4KLQotIHZpZGVvdGVzdHNyYyB1cGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBidWZmZXJwb29sLCBpdCB3aWxsIGxpa2VseQotIHNldCB0aGUgbWluIGJ1ZmZlcnMgdG8gMSBhbmQgdGhlIHNpemUgb2YgdGhlIGRlc2lyZWQgYnVmZmVycy4gSXQgdGhlbgotIHVwZGF0ZXMgdGhlIGJ1ZmZlcnBvb2wgY29uZmlndXJhdGlvbiB3aXRoIHRoZSBuZXcgcHJvcGVydGllcy4KLQotIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQsIHZpZGVvdGVzdHNyYyBzZXRzIHRoZQotIGJ1ZmZlcnBvb2wgdG8gdGhlIGFjdGl2ZSBzdGF0ZS4gVGhpcyBwcmVhbGxvY2F0ZXMgdGhlIGJ1ZmZlcnMgaW4gdGhlIHBvb2wKLSAoaWYgbmVlZGVkKS4gVGhpcyBvcGVyYXRpb24gY2FuIGZhaWwgd2hlbiB0aGVyZSBpcyBub3QgZW5vdWdoIG1lbW9yeQotIGF2YWlsYWJsZS4gU2luY2UgdGhlIGJ1ZmZlcnBvb2wgaXMgcHJvdmlkZWQgYnkgeHZpbWFnZXNpbmssIGl0IHdpbGwgYWxsb2NhdGUKLSBidWZmZXJzIGJhY2tlZCBieSBhbiBYdkltYWdlIGFuZCBwb2ludGluZyB0byBzaGFyZWQgbWVtb3J5IHdpdGggdGhlIFggc2VydmVyLgotCi0gSWYgdGhlIGJ1ZmZlcnBvb2wgaXMgc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZCwgdmlkZW90ZXN0c3JjIGNhbiBhY3F1aXJlIGEKLSBidWZmZXIgZnJvbSB0aGUgcG9vbCwgZmlsbCBpbiB0aGUgZGF0YSBhbmQgcHVzaCBpdCBvdXQgdG8geHZpbWFnZXNpbmsuCi0KLSB4dmltYWdlc2luayBjYW4ga25vdyB0aGF0IHRoZSBidWZmZXIgb3JpZ2luYXRlZCBmcm9tIGl0cyBwb29sIGJ5IGZvbGxvd2luZwotIHRoZSBwb29sIG1lbWJlci4KLQotIHdoZW4gc2h1dHRpbmcgZG93biwgdmlkZW90ZXN0c3JjIHdpbGwgc2V0IHRoZSBwb29sIHRvIHRoZSBpbmFjdGl2ZSBzdGF0ZSwKLSB0aGlzIHdpbGwgY2F1c2UgZnVydGhlciBhbGxvY2F0aW9ucyB0byBmYWlsIGFuZCBjdXJyZW50bHkgYWxsb2NhdGVkIGJ1ZmZlcnMKLSB0byBiZSBmcmVlZC4gdmlkZW90ZXN0c3JjIHdpbGwgdGhlbiBmcmVlIHRoZSBwb29sIGFuZCBzdG9wIHN0cmVhbWluZy4KLQotCi0yKSB2aWRlb3Rlc3RzcmMgISBxdWV1ZSAhIG15dmlkZW9zaW5rCi0KLSBJbiB0aGlzIHNlY29uZCB1c2UgY2FzZSB3ZSBoYXZlIGEgdmlkZW9zaW5rIHRoYXQgY2FuIGF0IG1vc3QgYWxsb2NhdGUKLSAzIHZpZGVvIGJ1ZmZlcnMuCi0KLSBBZ2FpbiB2aWRlb3Rlc3RzcmMgd2lsbCBoYXZlIHRvIG5lZ290aWF0ZSBhIGJ1ZmZlcnBvb2wgd2l0aCB0aGUgcGVlciAKLSBlbGVtZW50LiBGb3IgdGhpcyBpdCB3aWxsIHBlcmZvcm0gdGhlIEFMTE9DQVRJT04gcXVlcnkgd2hpY2gKLSBxdWV1ZSB3aWxsIHByb3h5IHRvIGl0cyBkb3duc3RyZWFtIHBlZXIgZWxlbWVudC4KLQotIFRoZSBidWZmZXJwb29sIHJldHVybmVkIGZyb20gbXl2aWRlb3Npbmsgd2lsbCBoYXZlIGEgbWF4X2J1ZmZlcnMgc2V0IHRvIDMuCi0gcXVldWUgYW5kIHZpZGVvdGVzdHNyYyBjYW4gb3BlcmF0ZSB3aXRoIHRoaXMgdXBwZXIgbGltaXQgYmVjYXVzZSBub25lIG9mCi0gdGhvc2UgZWxlbWVudHMgcmVxdWlyZSBtb3JlIHRoYW4gdGhhdCBhbW91bnQgb2YgYnVmZmVycyBmb3IgdGVtcG9yYXJ5Ci0gc3RvcmFnZS4KLQotIE15dmlkZW9zaW5rJ3MgYnVmZmVycG9vbCB3aWxsIHRoZW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSBzaXplIG9mIHRoZQotIGJ1ZmZlcnMgZm9yIHRoZSBuZWdvdGlhdGVkIGZvcm1hdCBhbmQgYWNjb3JkaW5nIHRvIHRoZSBwYWRkaW5nIGFuZCBhbGlnbm1lbnQKLSBydWxlcy4gV2hlbiB2aWRlb3Rlc3RzcmMgc2V0cyB0aGUgcG9vbCB0byBhY3RpdmUsIHRoZSAzIHZpZGVvCi0gYnVmZmVycyB3aWxsIGJlIHByZWFsbG9jYXRlZCBpbiB0aGUgcG9vbC4KLQotIHZpZGVvdGVzdHNyYyBhY3F1aXJlcyBhIGJ1ZmZlciBmcm9tIHRoZSBjb25maWd1cmVkIHBvb2wgb24gaXRzIHNyY3BhZCBhbmQKLSBwdXNoZXMgdGhpcyBpbnRvIHRoZSBxdWV1ZS4gV2hlbiB2aWRlb3Rlc3RzcmMgaGFzIGFjcXVpcmVkIGFuZCBwdXNoZWQKLSAzIGZyYW1lcywgdGhlIG5leHQgY2FsbCB0byBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKSB3aWxsIGJsb2NrCi0gKGFzc3VtaW5nIHRoZSBHU1RfQlVGRkVSX1BPT0xfRkxBR19ET05UV0FJVCBpcyBub3Qgc3BlY2lmaWVkKS4KLQotIFdoZW4gdGhlIHF1ZXVlIGhhcyBwdXNoZWQgb3V0IGEgYnVmZmVyIGFuZCB0aGUgc2luayBoYXMgcmVuZGVyZWQgaXQsIHRoZQotIHJlZmNvdW50IG9mIHRoZSBidWZmZXIgcmVhY2hlcyAwIGFuZCB0aGUgYnVmZmVyIGlzIHJlY3ljbGVkIGluIHRoZSBwb29sLgotIFRoaXMgd2lsbCB3YWtlIHVwIHRoZSB2aWRlb3Rlc3RzcmMgdGhhdCB3YXMgYmxvY2tlZCwgd2FpdGluZyBmb3IgbW9yZQotIGJ1ZmZlcnMgYW5kIHdpbGwgbWFrZSBpdCBwcm9kdWNlIHRoZSBuZXh0IGJ1ZmZlci4gCi0KLSBJbiB0aGlzIHNldHVwLCB0aGVyZSBhcmUgYXQgbW9zdCAzIGJ1ZmZlcnMgYWN0aXZlIGluIHRoZSBwaXBlbGluZSBhbmQKLSB0aGUgdmlkZW90ZXN0c3JjIGlzIHJhdGUgbGltaXRlZCBieSB0aGUgcmF0ZSBhdCB3aGljaCBidWZmZXJzIGFyZSByZWN5Y2xlZAotIGluIHRoZSBidWZmZXJwb29sLgotCi0gV2hlbiBzaHV0dGluZyBkb3duLCB2aWRlb3Rlc3RzcmMgd2lsbCBmaXJzdCBzZXQgdGhlIGJ1ZmZlcnBvb2wgb24gdGhlIHNyY3BhZAotIHRvIGluYWN0aXZlLiBUaGlzIGNhdXNlcyBhbnkgcGVuZGluZyAoYmxvY2tlZCkgYWNxdWlyZSB0byByZXR1cm4gd2l0aCBhIAotIEZMVVNISU5HIHJlc3VsdCBhbmQgY2F1c2VzIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHRvIHBhdXNlLgotCi0gCi0zKSAuLiAhIG15dmlkZW9kZWNvZGVyICEgcXVldWUgISBmYWtlc2luayAKLQotIEluIHRoaXMgY2FzZSwgdGhlIG15dmlkZW9kZWNvZGVyIHJlcXVpcmVzIGJ1ZmZlcnMgdG8gYmUgYWxpZ25lZCB0byAxMjgKLSBieXRlcyBhbmQgcGFkZGVkIHdpdGggNDA5NiBieXRlcy4gVGhlIHBpcGVsaW5lIHN0YXJ0cyBvdXQgd2l0aCB0aGUKLSBkZWNvZGVyIGxpbmtlZCB0byBhIGZha2VzaW5rIGJ1dCB3ZSB3aWxsIHRoZW4gZHluYW1pY2FsbHkgY2hhbmdlIHRoZQotIHNpbmsgdG8gb25lIHRoYXQgY2FuIHByb3ZpZGUgYSBidWZmZXJwb29sLgotCi0gV2hlbiBteXZpZGVvZGVjb2RlciBuZWdvdGlhdGVzIHRoZSBzaXplIHdpdGggdGhlIGRvd25zdHJlYW0gZmFrZXNpbmsgZWxlbWVudCwgaXQgd2lsbAotIHJlY2VpdmUgYSBOVUxMIGJ1ZmZlcnBvb2wgYmVjYXVzZSBmYWtlc2luayBkb2VzIG5vdCBwcm92aWRlIGEgYnVmZmVycG9vbC4KLSBJdCB3aWxsIHRoZW4gc2VsZWN0IGl0cyBvd24gY3VzdG9tIGJ1ZmZlcnBvb2wgdG8gc3RhcnQgdGhlIGRhdGEgdHJhbnNmZXIuCi0KLSBBdCBzb21lIHBvaW50IHdlIGJsb2NrIHRoZSBxdWV1ZSBzcmNwYWQsIHVubGluayB0aGUgcXVldWUgZnJvbSB0aGUgCi0gZmFrZXNpbmssIGxpbmsgYSBuZXcgc2luayBhbmQgc2V0IHRoZSBuZXcgc2luayB0byB0aGUgUExBWUlORyBzdGF0ZS4KLSBMaW5raW5nIHRoZSBuZXcgc2luayB3b3VsZCBhdXRvbWF0aWNhbGx5IHNlbmQgYSBSRUNPTkZJR1VSRSBldmVudCB1cHN0cmVhbQotIGFuZCwgdGhyb3VnaCBxdWV1ZSwgaW5mb3JtIG15dmlkZW9kZWNvZGVyIHRoYXQgaXQgc2hvdWxkIHJlbmVnb3RpYXRlIGl0cwotIGJ1ZmZlcnBvb2wgYmVjYXVzZSBkb3duc3RyZWFtIGhhcyBiZWVuIHJlY29uZmlndXJlZC4KLQotIEJlZm9yZSBwdXNoaW5nIHRoZSBuZXh0IGJ1ZmZlciwgbXl2aWRlb2RlY29kZXIgaGFzIHRvIHJlbmVnb3RpYXRlIGEgbmV3Ci0gYnVmZmVycG9vbC4gVG8gZG8gdGhpcywgaXQgcGVyZm9ybXMgdGhlIHVzdWFsIGJ1ZmZlcnBvb2wgbmVnb3RpYXRpb24KLSBhbGdvcml0aG0uIElmIGl0IGNhbiBvYnRhaW4gYW5kIGNvbmZpZ3VyZSBhIG5ldyBidWZmZXJwb29sIGZyb20gZG93bnN0cmVhbSwKLSBpdCBzZXRzIGl0cyBvd24gKG9sZCkgcG9vbCB0byBpbmFjdGl2ZSBhbmQgdW5yZWZzIGl0LiBUaGlzIHdpbGwgZXZlbnR1YWxseQotIGRyYWluIGFuZCB1bnJlZiB0aGUgb2xkIGJ1ZmZlcnBvb2wuCi0KLSBUaGUgbmV3IGJ1ZmZlcnBvb2wgaXMgc2V0IGFzIHRoZSBuZXcgYnVmZmVycG9vbCBmb3IgdGhlIHNyY3BhZCBhbmQgc2lua3BhZAotIG9mIHRoZSBxdWV1ZSBhbmQgc2V0IHRvIHRoZSBhY3RpdmUgc3RhdGUuCi0KLQotNCkgLi4gISBteXZpZGVvZGVjb2RlciAhIHF1ZXVlICEgbXl2aWRlb3NpbmsgCi0KLSBteXZpZGVvZGVjb2RlciBoYXMgbmVnb3RpYXRlZCBhIGJ1ZmZlcnBvb2wgd2l0aCB0aGUgZG93bnN0cmVhbSBteXZpZGVvc2luawotIHRvIGhhbmRsZSBidWZmZXJzIG9mIHNpemUgMzIweDI0MC4gSXQgaGFzIG5vdyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgCi0gdmlkZW8gZm9ybWF0IGFuZCBuZWVkcyB0byByZW5lZ290aWF0ZSB0byBhIHJlc29sdXRpb24gb2YgNjQweDQ4MC4gVGhpcwotIHJlcXVpcmVzIGl0IHRvIG5lZ290aWF0ZSBhIG5ldyBidWZmZXJwb29sIHdpdGggYSBsYXJnZXIgYnVmZmVyIHNpemUuCi0KLSBXaGVuIG15dmlkZW9kZWNvZGVyIG5lZWRzIHRvIGdldCB0aGUgYmlnZ2VyIGJ1ZmZlciwgaXQgc3RhcnRzIHRoZSAKLSBuZWdvdGlhdGlvbiBvZiBhIG5ldyBidWZmZXJwb29sLiBJdCBxdWVyaWVzIGEgYnVmZmVycG9vbCBmcm9tIGRvd25zdHJlYW0sCi0gcmVjb25maWd1cmVzIGl0IHdpdGggdGhlIG5ldyBjb25maWd1cmF0aW9uICh3aGljaCBpbmNsdWRlcyB0aGUgYmlnZ2VyIGJ1ZmZlcgotIHNpemUpIGFuZCBzZXRzIHRoZSBidWZmZXJwb29sIHRvIGFjdGl2ZS4gVGhlIG9sZCBwb29sIGlzIGluYWN0aXZhdGVkCi0gYW5kIHVucmVmZmVkLCB3aGljaCBjYXVzZXMgdGhlIG9sZCBmb3JtYXQgdG8gZHJhaW4uCi0KLSBJdCB0aGVuIHVzZXMgdGhlIG5ldyBidWZmZXJwb29sIGZvciBhbGxvY2F0aW5nIG5ldyBidWZmZXJzIG9mIHRoZSBuZXcgCi0gZGltZW5zaW9uLgotCi0gSWYgYXQgc29tZSBwb2ludCwgdGhlIGRlY29kZXIgd2FudHMgdG8gc3dpdGNoIHRvIGEgbG93ZXIgcmVzb2x1dGlvbiBhZ2FpbiwKLSBpdCBjYW4gY2hvb3NlIHRvIHVzZSB0aGUgY3VycmVudCBwb29sICh3aGljaCBoYXMgYnVmZmVycyB0aGF0IGFyZSBsYXJnZXIKLSB0aGFuIHRoZSByZXF1aXJlZCBzaXplKSBvciBpdCBjYW4gY2hvb3NlIHRvIHJlbmVnb3RpYXRlIGEgbmV3IGJ1ZmZlcnBvb2wuCi0KLQotNSkgLi4gISBteXZpZGVvZGVjb2RlciAhIHZpZGVvc2NhbGUgISBteXZpZGVvc2luayAKLQotIG15dmlkZW9zaW5rIGlzIHByb3ZpZGluZyBhIGJ1ZmZlcnBvb2wgZm9yIHVwc3RyZWFtIGVsZW1lbnRzIGFuZCB3YW50cyB0bwotIGNoYW5nZSB0aGUgcmVzb2x1dGlvbi4KLQotIG15dmlkZW9zaW5rIHNlbmRzIGEgUkVDT05GSUdVUkUgZXZlbnQgdXBzdHJlYW0gdG8gbm90aWZ5IHVwc3RyZWFtIHRoYXQgYQotIG5ldyBmb3JtYXQgaXMgZGVzaXJhYmxlLiBVcHN0cmVhbSBlbGVtZW50cyB0cnkgdG8gbmVnb3RpYXRlIGEgbmV3IGZvcm1hdAotIGFuZCBidWZmZXJwb29sIGJlZm9yZSBwdXNoaW5nIG91dCBhIG5ldyBidWZmZXIuIFRoZSBvbGQgYnVmZmVycG9vbHMgYXJlCi0gZHJhaW5lZCBpbiB0aGUgcmVndWxhciB3YXkuCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWNhcHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjI0NjEzLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtY2Fwcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotQ2FwcwotLS0tLQotCi1DYXBzIGFyZSBsaWdodHdlaWdodCByZWZjb3VudGVkIG9iamVjdHMgZGVzY3JpYmluZyBtZWRpYSB0eXBlcy4KLVRoZXkgYXJlIGNvbXBvc2VkIG9mIGFuIGFycmF5IG9mIEdzdFN0cnVjdHVyZXMgcGx1cywgb3B0aW9uYWxseSwKLWEgR3N0Q2Fwc0ZlYXR1cmVzIHNldCBmb3IgdGhlIEdzdFN0cnVjdHVyZS4KLQotQ2FwcyBhcmUgZXhwb3NlZCBvbiBHc3RQYWRUZW1wbGF0ZXMgdG8gZGVzY3JpYmUgYWxsIHBvc3NpYmxlIHR5cGVzIGEKLWdpdmVuIHBhZCBjYW4gaGFuZGxlLiBUaGV5IGFyZSBhbHNvIHN0b3JlZCBpbiB0aGUgcmVnaXN0cnkgYWxvbmcgd2l0aAotYSBkZXNjcmlwdGlvbiBvZiB0aGUgZWxlbWVudC4KLQotQ2FwcyBhcmUgZXhwb3NlZCBvbiB0aGUgZWxlbWVudCBwYWRzIHZpYSBDQVBTIGFuZCBBQ0NFUFRfQ0FQUyBxdWVyaWVzLgotCi1UaGlzIGZ1bmN0aW9uIGRlc2NyaWJlcyB0aGUgcG9zc2libGUgdHlwZXMgdGhhdCB0aGUgcGFkIGNhbiBoYW5kbGUgb3IKLXByb2R1Y2UgKHNlZSBwYXJ0LXBhZHMudHh0IGFuZCBwYXJ0LW5lZ290aWF0aW9uLnR4dCkuCi0KLVZhcmlvdXMgbWV0aG9kcyBleGlzdCB0byB3b3JrIHdpdGggdGhlIG1lZGlhIHR5cGVzIHN1Y2ggYXMgc3VidHJhY3RpbmcKLW9yIGludGVyc2VjdGluZy4KLQotT3BlcmF0aW9ucwotfn5+fn5+fn5+fgotRml4YXRpbmcKLS0tLS0tLS0tCi1DYXBzIGFyZSBmaXhlZCBpZiB0aGV5IG9ubHkgY29udGFpbiBhIHNpbmdsZSBzdHJ1Y3R1cmUgYW5kIHRoaXMKLXN0cnVjdHVyZSBpcyBmaXhlZC4gQSBzdHJ1Y3R1cmUgaXMgZml4ZWQgaWYgbm9uZSBvZiB0aGUgZmllbGRzIG9mIHRoZQotc3RydWN0dXJlIGlzIGFuIHVuZml4ZWQgdHlwZSwgZm9yIGV4YW1wbGUgYSByYW5nZSwgbGlzdCBvciBhcnJheS4KLQotRm9yIGZpeGF0aW5nIGNhcHMgb25seSB0aGUgZmlyc3Qgc3RydWN0dXJlIGlzIGtlcHQgYXMgdGhlIG9yZGVyIG9mCi1zdHJ1Y3R1cmVzIGlzIG1lYW50IHRvIGV4cHJlc3MgdGhlIHByZWZlcmVuY2VzIGZvciB0aGUgZGlmZmVyZW50Ci1zdHJ1Y3R1cmVzLiBBZnRlcndhcmRzLCBlYWNoIHVuZml4ZWQgZmllbGQgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgc2V0Ci10byB0aGUgdmFsdWUgdGhhdCBtYWtlcyBtb3N0IHNlbnNlIGZvciB0aGUgbWVkaWEgZm9ybWF0IGJ5IHRoZSBlbGVtZW50Ci1vciBwYWQgaW1wbGVtZW50YXRpb24gYW5kIHRoZW4gZXZlcnkgcmVtYWluaW5nIHVuZml4ZWQgZmllbGQgaXMgc2V0IHRvCi1hbiBhcmJpdHJhcnkgdmFsdWUgdGhhdCBpcyBhIHN1YnNldCBvZiB0aGUgdW5maXhlZCBmaWVsZCdzIHZhbHVlcy4KLQotRU1QVFkgY2FwcyBhcmUgZml4ZWQgY2FwcyBhbmQgQU5ZIGNhcHMgYXJlIG5vdC4gQ2FwcyB3aXRoIEFOWSBjYXBzIGZlYXR1cmVzCi1hcmUgbm90IGZpeGVkLgotCi1TdWJzZXQKLS0tLS0tLQotT25lIGNhcHMgIkEiIGlzIGEgc3Vic2V0IG9mIGFub3RoZXIgY2FwcyAiQiIgaWYgZm9yIGVhY2ggc3RydWN0dXJlIGluCi0iQSIgdGhlcmUgZXhpc3RzIGEgc3RydWN0dXJlIGluICJCIiB0aGF0IGlzIGEgc3VwZXJzZXQgb2YgdGhlIHN0cnVjdHVyZQotaW4gIkEiLgotCi1BIHN0cnVjdHVyZSAiYSIgaXMgdGhlIHN1YnNldCBvZiBhIHN0cnVjdHVyZSAiYiIgaWYgaXQgaGFzIHRoZSBzYW1lIAotc3RydWN0dXJlIG5hbWUsIHRoZSBzYW1lIGNhcHMgZmVhdHVyZXMgYW5kIGVhY2ggZmllbGQgaW4gImIiIGV4aXN0cwotaW4gImEiIGFuZCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluICJhIiBpcyBhIHN1YnNldCBvZiB0aGUgdmFsdWUgb2YKLXRoZSBmaWVsZCBpbiAiYiIuICJhIiBjYW4gaGF2ZSBhZGRpdGlvbmFsIGZpZWxkcyB0aGF0IGFyZSBub3QgaW4gImIiLgotCi1FTVBUWSBjYXBzIGFyZSBhIHN1YnNldCBvZiBldmVyeSBvdGhlciBjYXBzLiBFdmVyeSBjYXBzIGFyZSBhIHN1YnNldCBvZgotQU5ZIGNhcHMuCi0KLUVxdWFsaXR5Ci0tLS0tLS0tLQotQ2FwcyAiQSIgYW5kICJCIiBhcmUgZXF1YWwgaWYgIkEiIGlzIGEgc3Vic2V0IG9mICJCIiBhbmQgIkIiIGlzIGEgc3Vic2V0Ci1vZiAiQSIuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGNhcHMgYXJlIGV4cHJlc3NpbmcgdGhlIHNhbWUgcG9zc2liaWxpdGllcwotYnV0IHRoZWlyIHN0cnVjdHVyZXMgY2FuIHN0aWxsIGJlIGRpZmZlcmVudCBpZiB0aGV5IGNvbnRhaW4gdW5maXhlZAotZmllbGRzLgotCi1JbnRlcnNlY3Rpb24KLS0tLS0tLS0tLS0tLQotVGhlIGludGVyc2VjdGlvbiBvZiBjYXBzICJBIiBhbmQgY2FwcyAiQiIgYXJlIHRoZSBjYXBzIHRoYXQgY29udGFpbiB0aGUKLWludGVyc2VjdGlvbiBvZiBhbGwgdGhlaXIgc3RydWN0dXJlcyB3aXRoIGVhY2ggb3RoZXIuCi0KLVRoZSBpbnRlcnNlY3Rpb24gb2Ygc3RydWN0dXJlICJhIiBhbmQgc3RydWN0dXJlICJiIiBpcyBlbXB0eSBpZiB0aGVpcgotc3RydWN0dXJlIG5hbWUgb3IgdGhlaXIgY2FwcyBmZWF0dXJlcyBhcmUgbm90IGVxdWFsLCBvciBpZiAiYSIgYW5kICJiIgotY29udGFpbiB0aGUgc2FtZSBmaWVsZCBidXQgdGhlIGludGVyc2VjdGlvbiBvZiBib3RoIGZpZWxkIHZhbHVlcyBpcyBlbXB0eS4KLUlmIG9uZSBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCB0aGF0IGlzIG5vdCBleGlzdGluZyBpbiB0aGUgb3RoZXIKLXN0cnVjdHVyZSBpdCB3aWxsIGJlIGNvcGllZCBvdmVyIHRvIHRoZSBpbnRlcnNlY3Rpb24gd2l0aCB0aGUgc2FtZQotdmFsdWUuCi0KLVRoZSBpbnRlcnNlY3Rpb24gd2l0aCBBTlkgY2FwcyBpcyBhbHdheXMgdGhlIG90aGVyIGNhcHMgYW5kIHRoZSBpbnRlcnNlY3Rpb24KLXdpdGggRU1QVFkgY2FwcyBpcyBhbHdheXMgRU1QVFkuCi0KLVVuaW9uCi0tLS0tLQotVGhlIHVuaW9uIG9mIGNhcHMgIkEiIGFuZCBjYXBzICJCIiBhcmUgdGhlIGNhcHMgdGhhdCBjb250YWluIHRoZSB1bmlvbgotb2YgYWxsIHRoZWlyIHN0cnVjdHVyZXMgd2l0aCBlYWNoIG90aGVyLgotCi1UaGUgdW5pb24gb2Ygc3RydWN0dXJlICJhIiBhbmQgc3RydWN0dXJlICJiIiBhcmUgdGhlIHR3byBzdHJ1Y3R1cmVzICJhIgotYW5kICJiIiBpZiB0aGUgc3RydWN0dXJlIG5hbWVzIG9yIGNhcHMgZmVhdHVyZXMgYXJlIG5vdCBlcXVhbC4gT3RoZXJ3aXNlLAotdGhlIHVuaW9uIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyB0aGUgdW5pb24gb2YgZWFjaCBmaWVsZHMgdmFsdWUuCi1JZiBhIGZpZWxkIGlzIG9ubHkgaW4gb25lIG9mIHRoZSB0d28gc3RydWN0dXJlcyBpdCBpcyBub3QgY29udGFpbmVkIGluCi10aGUgdW5pb24uCi0KLVRoZSB1bmlvbiB3aXRoIEFOWSBjYXBzIGlzIGFsd2F5cyBBTlkgYW5kIHRoZSB1bmlvbiB3aXRoIEVNUFRZIGNhcHMgaXMKLWFsd2F5cyB0aGUgb3RoZXIgY2Fwcy4KLQotU3VidHJhY3Rpb24KLS0tLS0tLS0tLS0tCi1UaGUgc3VidHJhY3Rpb24gb2YgY2FwcyAiQSIgZnJvbSBjYXBzICJCIiBpcyB0aGUgbW9zdCBnZW5lcmljIHN1YnNldAotb2YgIkIiIHRoYXQgaGFzIGFuIGVtcHR5IGludGVyc2VjdGlvbiB3aXRoICJBIiBidXQgb25seSBjb250YWlucwotc3RydWN0dXJlcyB3aXRoIG5hbWVzIGFuZCBjYXBzIGZlYXR1cmVzIHRoYXQgYXJlIGV4aXN0aW5nIGluICJCIi4KLQotQmFzaWMgUnVsZXMKLX5+fn5+fn5+fn5+Ci0KLVNlbWFudGljcyBvZiBjYXBzIGFuZCB0aGVpciB1c2FnZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BIGNhcHMgY2FuIGNvbnRhaW4gbXVsdGlwbGUgc3RydWN0dXJlcywgaW4gd2hpY2ggY2FzZSBhbnkgb2YgdGhlCi1zdHJ1Y3R1cmVzIHdvdWxkIGJlIGFjY2VwdGFibGUuIFRoZSBzdHJ1Y3R1cmVzIGFyZSBpbiB0aGUgcHJlZmVycmVkCi1vcmRlciBvZiB0aGUgY3JlYXRvciBvZiB0aGUgY2Fwcywgd2l0aCB0aGUgcHJlZmVycmVkIHN0cnVjdHVyZSBiZWluZwotZmlyc3QgYW5kIGR1cmluZyBuZWdvdGlhdGlvbiBvZiBjYXBzIHRoaXMgb3JkZXIgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8KLXNlbGVjdCB0aGUgbW9zdCBvcHRpbWFsIHN0cnVjdHVyZS4KLQotRWFjaCBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGhhcyBhIG5hbWUgdGhhdCBzcGVjaWZpZXMgdGhlIG1lZGlhIHR5cGUsIGUuZy4KLSJ2aWRlby94LXRoZW9yYSIgdG8gc3BlY2lmeSBUaGVvcmEgdmlkZW8uIEFkZGl0aW9uYWwgZmllbGRzIGluIHRoZQotc3RydWN0dXJlIGFkZCBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIGFuZC9vciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVkaWEKLXR5cGUsIGxpa2UgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSB2aWRlbyBmcmFtZSwgb3IgdGhlIGNvZGVjIHByb2ZpbGUKLXRoYXQgaXMgdXNlZC4gVGhlc2UgZmllbGRzIGNhbiBiZSBub24tZml4ZWQgKGUuZy4gcmFuZ2VzKSBmb3Igbm9uLWZpeGVkCi1jYXBzIGJ1dCBtdXN0IGJlIGZpeGF0ZWQgdG8gYSBmaXhlZCB2YWx1ZSBkdXJpbmcgbmVnb3RpYXRpb24uCi1JZiBhIGZpZWxkIGlzIGluY2x1ZGVkIGluIHRoZSBjYXBzIHJldHVybmVkIGJ5IGEgcGFkIHZpYSB0aGUgQ0FQUyBxdWVyeSwKLWl0IGltcG9zZXMgYW4gYWRkaXRpb25hbCBjb25zdHJhaW50IGR1cmluZyBuZWdvdGlhdGlvbi4gVGhlIGNhcHMgaW4gdGhlCi1lbmQgbXVzdCBoYXZlIHRoaXMgZmllbGQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgYSBzdWJzZXQgb2YgdGhlIG5vbi1maXhlZAotdmFsdWUuIEFkZGl0aW9uYWwgZmllbGRzIHRoYXQgYXJlIGFkZGVkIGluIHRoZSBuZWdvdGlhdGVkIGNhcHMgZ2l2ZQotYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVkaWEgYnV0IGFyZSB0cmVhdGVkIGFzIG9wdGlvbmFsLgotSW5mb3JtYXRpb24gdGhhdCBjYW4gY2hhbmdlIGZvciBldmVyeSBidWZmZXIgYW5kIGlzIG5vdCByZWxldmFudCBkdXJpbmcKLW5lZ290aWF0aW9uIG11c3Qgbm90IGJlIHN0b3JlZCBpbnNpZGUgdGhlIGNhcHMuCi0KLQotRm9yIGVhY2ggb2YgdGhlIHN0cnVjdHVyZXMgaW4gY2FwcyBpdCBpcyBwb3NzaWJsZSB0byBzdG9yZSBjYXBzCi1mZWF0dXJlcy4gVGhlIGNhcHMgZmVhdHVyZXMgYXJlIGV4cHJlc3NpbmcgYWRkaXRpb25hbCByZXF1aXJlbWVudHMKLWZvciBhIHNwZWNpZmljIHN0cnVjdHVyZSwgYW5kIG9ubHkgc3RydWN0dXJlcyB3aXRoIHRoZSBzYW1lIG5hbWUgX2FuZF8KLWVxdWFsIGNhcHMgZmVhdHVyZXMgYXJlIGNvbnNpZGVyZWQgY29tcGF0aWJsZS4KLUNhcHMgZmVhdHVyZXMgY2FuIGJlIHVzZWQgdG8gcmVxdWlyZSBhIHNwZWNpZmljIG1lbW9yeSByZXByZXNlbnRhdGlvbgotb3IgYSBzcGVjaWZpYyBtZXRhIHRvIGJlIHNldCBvbiBidWZmZXJzLCBmb3IgZXhhbXBsZSBhIHBhZCBjb3VsZCByZXF1aXJlCi1mb3IgYSBzcGVjaWZpYyBzdHJ1Y3R1cmUgdGhhdCBpdCBpcyBwYXNzZWQgRUdMSW1hZ2UgbWVtb3J5IG9yIGJ1ZmZlcnMgd2l0aAotdGhlIHZpZGVvIG1ldGEuCi1JZiBubyBjYXBzIGZlYXR1cmVzIGFyZSBwcm92aWRlZCBmb3IgYSBzdHJ1Y3R1cmUsIGl0IGlzIGFzc3VtZWQgdGhhdAotc3lzdGVtIG1lbW9yeSBpcyByZXF1aXJlZCB1bmxlc3MgbGF0ZXIgbmVnb3RpYXRpb24gc3RlcHMgKGUuZy4gdGhlCi1BTExPQ0FUSU9OIHF1ZXJ5KSBkZXRlY3QgdGhhdCBzb21ldGhpbmcgZWxzZSBjYW4gYmUgdXNlZC4gVGhlIHNwZWNpYWwKLUFOWSBjYXBzIGZlYXR1cmVzIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhhdCBhbnkgY2FwcyBmZWF0dXJlIHdvdWxkCi1iZSBhY2NlcHRlZCwgZm9yIGV4YW1wbGUgaWYgdGhlIGJ1ZmZlciBtZW1vcnkgaXMgbm90IHRvdWNoZWQgYXQgYWxsLgotCi0KLUNvbXBhdGliaWxpdHkgb2YgY2FwcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QYWRzIGNhbiBiZSBsaW5rZWQgd2hlbiB0aGUgY2FwcyBvZiBib3RoIHBhZHMgYXJlIGNvbXBhdGlibGUuIFRoaXMgaXMKLXRoZSBjYXNlIHdoZW4gdGhlaXIgaW50ZXJzZWN0aW9uIGlzIG5vdCBlbXB0eS4KLQotRm9yIGNoZWNraW5nIGlmIGEgcGFkIGFjdHVhbGx5IHN1cHBvcnRzIGEgZml4ZWQgY2FwcyBhbiBpbnRlcnNlY3Rpb24gaXMKLW5vdCBlbm91Z2guIEluc3RlYWQgdGhlIGZpeGVkIGNhcHMgbXVzdCBiZSBhdCBsZWFzdCBhIHN1YnNldCBvZiB0aGUKLXBhZCdzIGNhcHMgYnV0IHBhZHMgY2FuIGludHJvZHVjZSBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIHdoaWNoIHdvdWxkIGJlCi1jaGVja2VkIGluIHRoZSBBQ0NFUFRfQ0FQUyBxdWVyeSBoYW5kbGVyLgotCi1EYXRhIGZsb3cgY2FuIG9ubHkgaGFwcGVuIGFmdGVyIHBhZHMgaGF2ZSBkZWNpZGVkIG9uIGNvbW1vbiBmaXhlZCBjYXBzLgotVGhlc2UgY2FwcyBhcmUgZGlzdHJpYnV0ZWQgdG8gYm90aCBwYWRzIHdpdGggdGhlIENBUFMgZXZlbnQuCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtY2xvY2tzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0OWE0OS4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWNsb2Nrcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi1DbG9ja3MKLS0tLS0tLQotCi1UaGUgR3N0Q2xvY2sgcmV0dXJucyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB0aW1lIHdpdGggdGhlIG1ldGhvZCAKLV9nZXRfdGltZSgpLiBJdHMgYWNjdXJhY3kgYW5kIGJhc2UgdGltZSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBjbG9jayAKLWltcGxlbWVudGF0aW9uIGJ1dCB0aW1lIGlzIGFsd2F5cyBleHByZXNzZWQgaW4gbmFub3NlY29uZHMuIFNpbmNlIHRoZQotYmFzZWxpbmUgb2YgdGhlIGNsb2NrIGlzIHVuZGVmaW5lZCwgdGhlIGNsb2NrIHRpbWUgcmV0dXJuZWQgaXMgbm90Ci1tZWFuaW5nZnVsIGluIGl0c2VsZiwgd2hhdCBtYXR0ZXJzIGFyZSB0aGUgZGVsdGFzIGJldHdlZW4gdHdvIGNsb2NrCi10aW1lcy4KLVRoZSB0aW1lIHJlcG9ydGVkIGJ5IHRoZSBjbG9jayBpcyBjYWxsZWQgdGhlIGFic29sdXRlX3RpbWUuCi0KLQotQ2xvY2sgU2VsZWN0aW9uCi1+fn5+fn5+fn5+fn5+fn4KLQotVG8gc3luY2hyb25pemUgdGhlIGRpZmZlcmVudCBlbGVtZW50cywgdGhlIEdzdFBpcGVsaW5lIGlzIHJlc3BvbnNpYmxlIGZvcgotc2VsZWN0aW5nIGFuZCBkaXN0cmlidXRpbmcgYSBnbG9iYWwgR3N0Q2xvY2sgZm9yIGFsbCB0aGUgZWxlbWVudHMgaW4gaXQuCi0KLVRoaXMgc2VsZWN0aW9uIGhhcHBlbnMgd2hlbmV2ZXIgdGhlIHBpcGVsaW5lIGdvZXMgdG8gUExBWUlORy4gV2hlbmV2ZXIgYW4KLWVsZW1lbnQgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBwaXBlbGluZSwgdGhpcyBzZWxlY3Rpb24gd2lsbCBiZSByZWRvbmUgaW4gdGhlCi1uZXh0IHN0YXRlIGNoYW5nZSB0byBQTEFZSU5HLiBBZGRpbmcgYW4gZWxlbWVudCB0aGF0IGNhbiBwcm92aWRlIGEgY2xvY2sgd2lsbAotcG9zdCBhIEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUgbWVzc2FnZSBvbiB0aGUgYnVzIHRvIGluZm9ybSBwYXJlbnQgYmlucyBvZiB0aGUKLWZhY3QgdGhhdCBhIGNsb2NrIHJlY2FsY3VsYXRpb24gaXMgbmVlZGVkLiAKLQotV2hlbiBhIGNsb2NrIGlzIHNlbGVjdGVkLCBhIE5FV19DTE9DSyBtZXNzYWdlIGlzIHBvc3RlZCBvbiB0aGUgYnVzIHNpZ25hbGluZyB0aGUKLWNsb2NrIHRvIHRoZSBhcHBsaWNhdGlvbi4KLQotV2hlbiB0aGUgZWxlbWVudCB0aGF0IHByb3ZpZGVkIHRoZSBjbG9jayBpcyByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5lLCBhCi1DTE9DS19MT1NUIG1lc3NhZ2UgaXMgcG9zdGVkLiBUaGUgYXBwbGljYXRpb24gbXVzdCB0aGVuIHNldCB0aGUgcGlwZWxpbmUgdG8KLVBBVVNFRCBhbmQgUExBWUlORyBhZ2FpbiBpbiBvcmRlciB0byBsZXQgdGhlIHBpcGVsaW5lIHNlbGVjdCBhIG5ldyBjbG9jawotYW5kIGRpc3RyaWJ1dGUgYSBuZXcgYmFzZSB0aW1lLgotCi1UaGUgY2xvY2sgc2VsZWN0aW9uIGlzIHBlcmZvcm1lZCBhcyBwYXJ0IG9mIHRoZSBzdGF0ZSBjaGFuZ2UgZnJvbSBQQVVTRUQgdG8KLVBMQVlJTkcgYW5kIGlzIGRlc2NyaWJlZCBpbiBwYXJ0LXN0YXRlcy50eHQuCi0KLQotQ2xvY2sgZmVhdHVyZXMKLX5+fn5+fn5+fn5+fn5+Ci0KLVRoZSBjbG9jayBzdXBwb3J0cyBwZXJpb2RpYyBhbmQgc2luZ2xlIHNob3QgY2xvY2sgbm90aWZpY2F0aW9ucyBib3RoCi1zeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzLgotCi1PbmUgZmlyc3QgbmVlZHMgdG8gY3JlYXRlIGEgR3N0Q2xvY2tJRCBmb3IgdGhlIHBlcmlvZGljIG9yIHNpbmdsZSBzaG90Ci1ub3RpZmljYXRpb24gdXNpbmcgX2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCgpIG9yIF9jbG9ja19uZXdfcGVyaW9kaWNfaWQoKS4KLQotVG8gcGVyZm9ybSBhIGJsb2NraW5nIHdhaXQgZm9yIHRoZSBzcGVjaWZpYyB0aW1lIG9mIHRoZSBHc3RDbG9ja0lEIHVzZSB0aGUKLWdzdF9jbG9ja19pZF93YWl0KCkuIFRvIHJlY2VpdmUgYSBjYWxsYmFjayB3aGVuIHRoZSBzcGVjaWZpYyB0aW1lIGlzIHJlYWNoZWQKLWluIHRoZSBjbG9jayB1c2UgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKS4gQm90aCB0aGVzZSBjYWxscyBjYW4gYmUgaW50ZXJydXB0ZWQKLXdpdGggdGhlIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlKCkgY2FsbC4gSWYgdGhlIGJsb2NraW5nIHdhaXQgaXMgdW5zY2hlZHVsZWQKLWEgdmFsdWUgb2YgR1NUX0NMT0NLX1VOU0NIRURVTEVEIGlzIHJldHVybmVkLgotCi1UaGUgYXN5bmMgY2FsbGJhY2tzIGNhbiBoYXBwZW4gZnJvbSBhbnkgdGhyZWFkLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlCi1jb3JlIG9yIGZyb20gYSBzdHJlYW1pbmcgdGhyZWFkLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGlzLgotCi1BIEdzdENsb2NrSUQgdGhhdCBoYXMgYmVlbiB1bnNjaGVkdWxlZCBjYW5ub3QgYmUgdXNlZCBhZ2FpbiBmb3IgYW55IHdhaXQKLW9wZXJhdGlvbi4gCi0KLUl0IGlzIHBvc3NpYmxlIHRvIHBlcmZvcm0gYSBibG9ja2luZyB3YWl0IG9uIHRoZSBzYW1lIElEIGZyb20gbXVsdGlwbGUgCi10aHJlYWRzLiBIb3dldmVyLCByZWdpc3RlcmluZyB0aGUgc2FtZSBJRCBmb3IgbXVsdGlwbGUgYXN5bmMgbm90aWZpY2F0aW9ucyBpcyAKLW5vdCBwb3NzaWJsZSwgdGhlIGNhbGxiYWNrIHdpbGwgb25seSBiZSBjYWxsZWQgb25jZS4KLQotTm9uZSBvZiB0aGUgd2FpdCBvcGVyYXRpb25zIHVucmVmIHRoZSBHc3RDbG9ja0lELCB0aGUgb3duZXIgaXMgCi1yZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nIHRoZSBpZHMgaXRzZWxmLiBUaGlzIGhvbGRzIHRydWUgZm9yIGJvdGggcGVyaW9kaWMgYW5kCi1zaW5nbGUgc2hvdCBub3RpZmljYXRpb25zLiBUaGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIG93bmVyIG9mIHRoZSBDbG9ja0lECi1oYXMgdG8ga2VlcCBhIGhhbmRsZSB0byB0aGUgSUQgdG8gdW5ibG9jayB0aGUgd2FpdCBvbiBGTFVTSElORyBldmVudHMKLW9yIHN0YXRlIGNoYW5nZXMgYW5kIGlmIHdlIHVucmVmIGl0IGF1dG9tYXRpY2FsbHksIHRoZSBoYW5kbGUgbWlnaHQgYmUKLWludmFsaWQuCi0KLVRoZXNlIGNsb2NrIG9wZXJhdGlvbnMgZG8gbm90IG9wZXJhdGUgb24gdGhlIHN0cmVhbSB0aW1lLCBzbyB0aGUgY2FsbGJhY2tzCi13aWxsIGFsc28gb2NjdXIgd2hlbiBub3QgaW4gUExBWUlORyBzdGF0ZSBhcyBpZiB0aGUgY2xvY2sganVzdCBrZWVwcyBvbiAKLXJ1bm5pbmcuIFNvbWUgY2xvY2tzIGhvd2V2ZXIgZG8gbm90IHByb2dyZXNzIHdoZW4gdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlZAotdGhlIGNsb2NrIGlzIG5vdCBQTEFZSU5HLgotCi0KLUNsb2NrIGltcGxlbWVudGF0aW9ucwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVRoZSBHU3RyZWFtZXIgY29yZSBwcm92aWRlcyBhIEdzdFN5c3RlbUNsb2NrIGJhc2VkIG9uIHRoZSBzeXN0ZW0gdGltZS4gCi1Bc3luY2hyb25vdXMgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgZnJvbSBhbiBpbnRlcm5hbCB0aHJlYWQuCi0KLUNsb2NrIGltcGxlbWVudGVycyBhcmUgZW5jb3VyYWdlZCB0byBzdWJjbGFzcyB0aGlzIHN5c3RlbWNsb2NrIGFzIGl0Ci1pbXBsZW1lbnRzIHRoZSBhc3luYyBub3RpZmljYXRpb24uCi0KLVN1YmNsYXNzZXMgY2FuIGhvd2V2ZXIgb3ZlcnJpZGUgYWxsIG9mIHRoZSBpbXBvcnRhbnQgbWV0aG9kcyBmb3Igc3luYyBhbmQKLWFzeW5jIG5vdGlmaWNhdGlvbnMgdG8gaW1wbGVtZW50IHRoZWlyIG93biBjYWxsYmFjayBtZXRob2RzIG9yIGJsb2NraW5nCi13YWl0IG9wZXJhdGlvbnMuCi0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1jb250ZXh0LnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtY29udGV4dC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYzcwNmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1jb250ZXh0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLUNvbnRleHQKLS0tLS0tLS0KLQotR3N0Q29udGV4dCBpcyBhIGNvbnRhaW5lciBvYmplY3QsIGNvbnRhaW5pbmcgYSB0eXBlIHN0cmluZyBhbmQgYQotZ2VuZXJpYyBHc3RTdHJ1Y3R1cmUuIEl0IGlzIHVzZWQgdG8gc3RvcmUgYW5kIHByb3BhZ2F0ZSBjb250ZXh0Ci1pbmZvcm1hdGlvbiBpbiBhIHBpcGVsaW5lLCBsaWtlIGRldmljZSBoYW5kbGVzLCBkaXNwbGF5IHNlcnZlcgotY29ubmVjdGlvbnMgYW5kIG90aGVyIGluZm9ybWF0aW9uIHRoYXQgc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuCi1tdWx0aXBsZSBlbGVtZW50cyBpbiBhIHBpcGVsaW5lLgotCi1Gb3Igc2hhcmluZyBjb250ZXh0IG9iamVjdHMgYW5kIGRpc3RyaWJ1dGluZyB0aGVtIGJldHdlZW4gYXBwbGljYXRpb24KLWFuZCBlbGVtZW50cyBpbiBhIHBpcGVsaW5lLCB0aGVyZSBhcmUgZG93bnN0cmVhbSBxdWVyaWVzLCB1cHN0cmVhbQotcXVlcmllcywgbWVzc2FnZXMgYW5kIGZ1bmN0aW9ucyB0byBzZXQgYSBjb250ZXh0IG9uIGEgY29tcGxldGUgcGlwZWxpbmUuCi0KLQotQ29udGV4dCB0eXBlcwotfn5+fn5+fn5+fn5+fgotQ29udGV4dCB0eXBlIG5hbWVzIHNob3VsZCBiZSB1bmlxdWUgYW5kIGJlIHB1dCBpbiBhcHByb3ByaWF0ZSBuYW1lc3BhY2VzLAotdG8gcHJldmVudCBuYW1lIGNvbmZsaWN0cywgZS5nLiAiZ3N0LmVnbC5FR0xEaXNwbGF5Ii4gT25seSBvbmUgc3BlY2lmaWMKLXR5cGUgaXMgYWxsb3dlZCBwZXIgY29udGV4dCB0eXBlIG5hbWUuCi0KLQotRWxlbWVudHMKLX5+fn5+fn5+Ci1FbGVtZW50cyB0aGF0IG5lZWQgYSBzcGVjaWZpYyBjb250ZXh0IGZvciB0aGVpciBvcGVyYXRpb24gd291bGQKLWRvIHRoZSBmb2xsb3dpbmcgc3RlcHMgdW50aWwgb25lIHN1Y2NlZWRzOgotCi0gMSkgQ2hlY2sgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBjb250ZXh0IG9mIHRoZSBzcGVjaWZpYyB0eXBlLAotICAgIGkuZS4gaXQgd2FzIHByZXZpb3VzbHkgc2V0IHZpYSBnc3RfZWxlbWVudF9zZXRfY29udGV4dCgpLgotCi0gMikgUXVlcnkgZG93bnN0cmVhbSB3aXRoIEdTVF9RVUVSWV9DT05URVhUIGZvciB0aGUgY29udGV4dCBhbmQgY2hlY2sgaWYKLSAgICBkb3duc3RyZWFtIGFscmVhZHkgaGFzIGEgY29udGV4dCBvZiB0aGUgc3BlY2lmaWMgdHlwZQotCi0gMykgUXVlcnkgdXBzdHJlYW0gd2l0aCBHU1RfUVVFUllfQ09OVEVYVCBmb3IgdGhlIGNvbnRleHQgYW5kIGNoZWNrIGlmCi0gICAgdXBzdHJlYW0gYWxyZWFkeSBoYXMgYSBjb250ZXh0IG9mIHRoZSBzcGVjaWZpYyB0eXBlCi0KLSA0KSBQb3N0IGEgR1NUX01FU1NBR0VfTkVFRF9DT05URVhUIG1lc3NhZ2Ugb24gdGhlIGJ1cyB3aXRoIHRoZSByZXF1aXJlZAotICAgIGNvbnRleHQgdHlwZXMgYW5kIGFmdGVyd2FyZHMgY2hlY2sgaWYgYSB1c2FibGUgY29udGV4dCB3YXMgc2V0IG5vdwotICAgIGFzIGluIDEpLiBUaGUgbWVzc2FnZSBjb3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJlbnQgYmlucyBvZiB0aGUKLSAgICBlbGVtZW50IGFuZCB0aGUgYXBwbGljYXRpb24uCi0KLSA0KSBDcmVhdGUgYSBjb250ZXh0IGJ5IGl0c2VsZiBhbmQgcG9zdCBhIEdTVF9NRVNTQUdFX0hBVkVfQ09OVEVYVCBtZXNzYWdlCi0gICAgb24gdGhlIGJ1cy4KLQotCi1CaW5zIHdpbGwgcHJvcGFnYXRlIGFueSBjb250ZXh0IHRoYXQgaXMgc2V0IG9uIHRoZW0gdG8gdGhlaXIgY2hpbGQgZWxlbWVudHMgdmlhCi1nc3RfZWxlbWVudF9zZXRfY29udGV4dCgpLiBFdmVuIHRvIGVsZW1lbnRzIGFkZGVkIGFmdGVyIGEgZ2l2ZW4gY29udGV4dCBoYXMKLWJlZW4gc2V0LgotCi1CaW5zIGNhbiBoYW5kbGUgdGhlIEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCBtZXNzYWdlLCBjYW4gZmlsdGVyIGJvdGgKLW1lc3NhZ2VzIGFuZCBjYW4gYWxzbyBzZXQgZGlmZmVyZW50IGNvbnRleHRzIGZvciBkaWZmZXJlbnQgcGlwZWxpbmUgcGFydHMuCi0KLQotQXBwbGljYXRpb25zCi1+fn5+fn5+fn5+fn4KLUFwcGxpY2F0aW9ucyBjYW4gc2V0IGEgc3BlY2lmaWMgY29udGV4dCBvbiBhIHBpcGVsaW5lIG9yIGVsZW1lbnRzIGluc2lkZQotYSBwaXBlbGluZSB3aXRoIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KCkuCi0KLUlmIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSBwaXBlbGluZSBuZWVkcyBhIHNwZWNpZmljIGNvbnRleHQsIGl0IHdpbGwgcG9zdAotYSBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQgbWVzc2FnZSBvbiB0aGUgYnVzLiBUaGUgYXBwbGljYXRpb24gY2FuIG5vdwotY3JlYXRlIGEgY29udGV4dCBvZiB0aGUgcmVxdWVzdGVkIHR5cGUgb3IgcGFzcyBhbiBhbHJlYWR5IGV4aXN0aW5nIGNvbnRleHQKLXRvIHRoZSBlbGVtZW50IChvciB0byB0aGUgY29tcGxldGUgcGlwZWxpbmUpLgotCi1XaGVuZXZlciBhbiBlbGVtZW50IGNyZWF0ZXMgYSBjb250ZXh0IGludGVybmFsbHkgaXQgd2lsbCBwb3N0IGEKLUdTVF9NRVNTQUdFX0hBVkVfQ09OVEVYVCBtZXNzYWdlIG9uIHRoZSBidXMuIEJpbnMgd2lsbCBjYWNoZSB0aGVzZQotY29udGV4dHMgYW5kIHBhc3MgdGhlbSB0byBhbnkgZnV0dXJlIGVsZW1lbnQgdGhhdCByZXF1ZXN0cyB0aGVtLgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1jb250cm9sbGVyLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtY29udHJvbGxlci50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YzkzOTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1jb250cm9sbGVyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLUNvbnRyb2xsZXIKLS0tLS0tLS0tLS0KLQotVGhlIGNvbnRyb2xsZXIgc3Vic3lzdGVtIGFsbG93cyB0byBhdXRvbWF0ZSBlbGVtZW50IHByb3BlcnR5IGNoYW5nZXMuIEl0IHdvcmtzCi1zbyB0aGF0IGFsbCBwYXJhbWV0ZXIgY2hhbmdlcyBhcmUgdGltZSBiYXNlZCBhbmQgZWxlbWVudHMgcmVxdWVzdCBwcm9wZXJ0eQotdXBkYXRlcyBhdCBwcm9jZXNzaW5nIHRpbWUuCi0KLUVsZW1lbnQgdmlldwotfn5+fn5+fn5+fn5+Ci1FbGVtZW50cyBkb24ndCBuZWVkIHRvIGRvIG11Y2guIFRoZXkgbmVlZCB0bzoKLS0gbWFyayBvYmplY3QgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBjaGFuZ2VkIHdoaWxlIHByb2Nlc3Npbmcgd2l0aAotICBHU1RfUEFSQU1fQ09OVFJPTExBQkxFCi0tIGNhbGwgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoc2VsZiwgdGltZXN0YW1wKSBpbiB0aGUgcHJvY2Vzc2luZyBmdW5jdGlvbgotICBiZWZvcmUgYWNjZXNzaW5nIHRoZSBwYXJhbWV0ZXJzLgotICAKLUFsbCBvcmRlcmVkIHByb3BlcnR5IHR5cGVzIGNhbiBiZSBhdXRvbWF0ZWQgKGludCwgZG91YmxlLCBib29sZWFuLCBlbnVtKS4gT3RoZXIKLXByb3BlcnR5IHR5cGVzIGNhbiBhbHNvIGJlIGF1dG9tYXRlZCBieSB1c2luZyBzcGVjaWFsIGNvbnRyb2wgYmluZGluZ3MuIE9uZSBjYW4KLWUuZy4gd3JpdGUgYSBjb250cm9sLWJpbmRpbmcgdGhhdCB1cGRhdGVzIGEgdGV4dCBwcm9wZXJ0eSBiYXNlZCBvbiB0aW1lc3RhbXBzLgotCi1BcHBsaWNhdGlvbiB2aWV3Ci1+fn5+fn5+fn5+fn5+fn5+Ci1BcHBsaWNhdGlvbnMgbmVlZCB0byBzZXR1cCB0aGUgcHJvcGVydHkgYXV0b21hdGlvbi4gRm9yIHRoYXQgdGhleSBuZWVkIHRvIGNyZWF0ZQotYSBHc3RDb250cm9sU291cmNlIGFuZCBhdHRhY2ggaXQgdG8gYSBwcm9wZXJ0eSB1c2luZyBHc3RDb250cm9sQmluZGluZy4gVmFyaW91cwotY29udHJvbC1zb3VyY2VzIGFuZCBjb250cm9sLWJpbmRpbmdzIGV4aXN0LiBBbGwgY29udHJvbCBzb3VyY2VzIHByb2R1Y2UgY29udHJvbAotdmFsdWUgc2VxdWVuY2VzIGluIHRoZSBmb3JtIG9mIGdkb3VibGUgdmFsdWVzLiBUaGUgY29udHJvbCBiaW5kaW5ncyBtYXAgdGhlbSB0bwotdGhlIHZhbHVlIHJhbmdlIGFuZCB0eXBlIG9mIHRoZSBib3VuZCBwcm9wZXJ0eS4KLQotT25lIGNvbnRyb2wtc291cmNlIGNhbiBiZSBhdHRhY2hlZCB0byBvbmUgb3IgbW9yZSBwcm9wZXJ0aWVzIGF0IHRoZSBzYW1lIHRpbWUuCi1JZiBpdCBpcyBhdHRhY2hlZCBtdWx0aXBsZSB0aW1lcywgdGhlbiBlYWNoIGNvbnRyb2wtYmluZGluZyB3aWxsIHNjYWxlIGFuZAotY29udmVydCB0aGUgY29udHJvbCB2YWx1ZXMgdG8gdGhlIHRhcmdldCBwcm9wZXJ0eSB0eXBlIGFuZCByYW5nZS4KLQotT25lIGNhbiBjcmVhdGUgY29tcGxleCBjb250cm9sLWN1cnZlcyBieSB1c2luZyBhIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLgotVGhpcyBhbGxvd3MgdGhlIGNsYXNzaWMgdXNlciBlZGl0YWJsZSBjb250cm9sLWN1cnZlIChvZnRlbiBzZWVuIGluIGF1ZGlvL3ZpZGVvCi1lZGl0b3JzKS4gQW5vdGhlciB3YXkgaXMgdG8gdXNlIGNvbXB1dGVkIGNvbnRyb2wgY3VydmVzLiBHc3RMRk9Db250cm9sU291cmNlIGNhbgotZ2VuZXJhdGUgdmFyaW91cyByZXBldGl0aXZlIHNpZ25hbHMuIFRob3NlIGNhbiBiZSBtYWRlIG1vcmUgY29tcGxleCBieSBjaGFpbmluZwotdGhlIGNvbnRyb2wgc291cmNlcy4gT25lIGNhbiBhdHRhY2ggYW5vdGhlciBjb250cm9sLXNvdXJjZSB0byBlLmcuIG1vZHVsYXRlIHRoZQotZnJlcXVlbmN5IG9mIHRoZSBmaXJzdCBHc3RMRk9Db250cm9sU291cmNlLgotCi1JbiBtb3N0IGNhc2VzIEdzdENvbnRyb2xCaW5kaW5nRGlyZWN0IHdpbGwgYmUgdGhlIGJpbmRpbmcgdG8gYmUgdXNlZC4gT3RoZXIKLWNvbnRyb2wgYmluZGluZ3MgYXJlIHRoZXJlIHRvIGhhbmRsZSBzcGVjaWFsIGNhc2VzLCBzdWNoIGFzIGhhdmluZyAxLTQgY29udHJvbC0KLXNvdXJjZXMgYW5kIGNvbWJpbmUgdGhlaXIgdmFsdWVzIGludG8gYSBzaW5nbGUgZ3VpbnQgdG8gY29udHJvbCBhIHJnYmEtY29sb3IKLXByb3BlcnR5LgotCi0KLVRPRE8KLX5+fn4KLWNvbnRyb2wtc291cmNlIHZhbHVlIHJhbmdlcwotLSBjb250cm9sIHNvdXJjZXMgc2hvdWxkIGlkZWFsbHkgZW1pdCB2YWx1ZXMgYmV0d2VlbiBbMC4wIGFuZCAxLjBdCi0tIHJpZ2h0IG5vdyBsZm8tY29udHJvbC1zb3VyY2VzIGVtaXRzIHZhbHVlcyBiZXR3ZWVuIFstMS4wIGFuZCAxLjBdCi0tIHdlIGNhbiBtYWtlIGNvbnRyb2wtc291cmNlcyBhbm5vdW5jZSB0aGF0IG9yIGZpeCBpdCBpbiBhIGxmbzItY29udHJvbC1zb3VyY2UKLQotcmFuZ2VkLWNvbnRyb2wtYmluZGluZwotLSBpdCBtaWdodCBiZSBhIG5pY2UgdGhpbmcgdG8gaGF2ZSBhIGNvbnRyb2wtYmluZGluZyB0aGF0IGhhcyBzY2FsZSBhbmQgb2Zmc2V0Ci0gIHByb3BlcnRpZXMKLS0gd2hlbiBhdHRhY2hpbmcgYSBjb250cm9sLXNvdXJjZSB0byBlLmcuIHZvbHVtZSwgb25lIG5lZWRzIHRvIGJlIGF3YXJlIHRoYXQKLSAgdGhlIHZhbHVlcyBnbyBmcm9tIFswLjAgdG8gNC4wXQotLSB3ZSBjYW4gYWxzbyBoYXZlIGEgIm1hcHBpbmctbW9kZSI9e0FTX0lTLCBUUkFOU0ZPUk1FRH0gb24gZGlyZWN0LWNvbnRyb2wtYmluZGluZwotICBhbmQgdHdvIGV4dHJhIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCBpbiBUUkFOU0ZPUk1FRCBtb2RlCi0gIAotY29udHJvbC1zZXR1cCBkZXNjcmlwdGlvbnMKLS0gaXQgd291bGQgYmUgbmljZSB0byBoYXZlIGEgd2F5IHRvIHBhcnNlIGEgdGV4dHVhbCBjb250cm9sLXNldHVwIGRlc2NyaXB0aW9uLiBUaGlzCi0gIGNvdWxkIGJlIHVzZWQgaW4gZ3N0LWxhdW5jaCBhbmQgaW4gcHJlc2V0cy4gSXQgbmVlZHMgdG8gYmUgY29tcGxlbWVudGVkIHdpdGggYQotICBmb3JtYXR0ZXIgKGZvciB0aGUgcHJlc2V0IHN0b3JhZ2Ugb3IgZS5nLiBmb3IgZGVidWcgbG9nZ2luZykuCi0tIHRoaXMgY291bGQgYmUgZnVuY3Rpb24tc3R5bGU6Ci0gIGRpcmVjdChjb250cm9sLXNvdXJjZT1sZm8od2F2ZWZvcm09J3NpbmUnLG9mZnNldD0wLjUpKQotICBvciBnc3QtbGF1bmNoIHN0eWxlIChsb29rcyB3ZWlyZCkKLSAgbGZvIHdhdmU9c2luZSBvZmZzZXQ9MC41ICEgZGlyZWN0IC5jb250cm9sLXNvdXJjZQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1jb252ZW50aW9ucy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWNvbnZlbnRpb25zLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3YjY3Yi4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWNvbnZlbnRpb25zLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLURvY3VtZW50YXRpb24gY29udmVudGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRHVlIHRvIHRoZSBwb3RlbnRpYWwgZm9yIGV4cG9uZW50aWFsIGdyb3d0aCwgc2V2ZXJhbCBhYmJyZXZpYXRpbmcgY29udmVudGlvbnMgd2lsbCBiZSB1c2VkIHRocm91Z2hvdXQgdGhpcyAKLWRvY3VtZW50YXRpb24uICBUaGVzZSBjb252ZW50aW9ucyBoYXZlIGdyb3duIHByaW1hcmlseSBmcm9tIGV4dHJlbWVseSBpbi1kZXB0aCBkaXNjdXNzaW9ucyBvZiB0aGUgYXJjaGl0ZWN0dXJlIGluIElSQy4KLVRoaXMgaGFzIHZlcmlmaWVkIHRoZSBzYWZldHkgb2YgdGhlc2UgY29udmVudGlvbnMsIGlmIHVzZWQgcHJvcGVybHkuICBUaGVyZSBhcmUgbm8ga25vd24gbmFtZXNwYWNlIGNvbmZsaWN0cyBhcyBsb25nIGFzIAotY29udGV4dCBpcyByaWdvcm91c2x5IG9ic2VydmVkLgotCi1PYmplY3QgY2xhc3Nlcwotfn5+fn5+fn5+fn5+fn4KLQotU2luY2UgZXZlcnl0aGluZyBzdGFydHMgd2l0aCBHc3QsIHdlIHdpbGwgZ2VuZXJhbGx5IHJlZmVyIHRvIG9iamVjdHMgYnkgdGhlIHNob3J0ZXIgbmFtZSwgaS5lLiBFbGVtZW50IG9yIFBhZC4gIFRoZXNlIAotbmFtZXMgd2lsbCBhbHdheXMgaGF2ZSB0aGVpciBmaXJzdCBsZXR0ZXIgY2FwaXRhbGl6ZWQuCi0KLUZ1bmN0aW9uIG5hbWVzCi1+fn5+fn5+fn5+fn5+fgotCi1XaXRoaW4gdGhlIGNvbnRleHQgb2YgYSBnaXZlbiBvYmplY3QsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoYXQgb2JqZWN0J3MgaGVhZGVyIGFuZC9vciBzb3VyY2UgZmlsZSB3aWxsIGhhdmUgdGhlaXIgCi1vYmplY3Qtc3BlY2lmaWMgcHJlZml4IHN0cmlwcGVkLiAgRm9yIGluc3RhbmNlLCBnc3RfZWxlbWVudF9hZGRfcGFkKCkgd291bGQgYmUgcmVmZXJyZWQgdG8gYXMgc2ltcGx5IF9hZGRfcGFkKCkuICBOb3RlIAotdGhhdCB0aGUgdHJhaWxpbmcgcGFyZW50aGVzZXMgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50LCBidXQgc29tZXRpbWVzIG1heSBub3QgYmUuICBBIHByZWZpeGluZyB1bmRlcnNjb3JlIChfKSB3aWxsIAotYWx3YXlzIHRlbGwgeW91IGl0J3MgYSBmdW5jdGlvbiwgaG93ZXZlciwgcmVnYXJkbGVzcyBvZiB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aGUgdHJhaWxpbmcgcGFyZW50aGVzZXMuCi0KLWRlZmluZXMgYW5kIGVudW1zCi1+fn5+fn5+fn5+fn5+fn5+fgotCi1WYWx1ZXMgYW5kIG1hY3JvcyBkZWZpbmVkIGFzIGVudW1zIGFuZCBwcmVwcm9jZXNzb3IgbWFjcm9zIHdpbGwgYmUgcmVmZXJyZWQgdG8gaW4gYWxsIGNhcGl0YWxzLCBhcyBwZXIgdGhlaXIgCi1kZWZpbml0aW9uLiAgVGhpcyBpbmNsdWRlcyBvYmplY3QgZmxhZ3MgYW5kIGVsZW1lbnQgc3RhdGVzLCBhcyB3ZWxsIGFzIGdlbmVyYWwgZW51bXMuICBFeGFtcGxlcyBhcmUgdGhlIHN0YXRlcyBOVUxMLCAKLVJFQURZLCBQTEFZSU5HLCBhbmQgUEFVU0VEOyB0aGUgZWxlbWVudCBmbGFncyBMT0NLRURfU1RBVEUgLCBhbmQgc3RhdGUgcmV0dXJuIHZhbHVlcyBTVUNDRVNTLCBGQUlMVVJFLCBhbmQgCi1BU1lOQy4gIFdoZXJlIHRoZXJlIGlzIGEgcHJlZml4LCBhcyBpbiB0aGUgZWxlbWVudCBmbGFncywgaXQgaXMgdXN1YWxseSBkcm9wcGVkIGFuZCBpbXBsaWVkLiAgTm90ZSBob3dldmVyIHRoYXQgCi1lbGVtZW50IGZsYWdzIHNob3VsZCBiZSBjcm9zcy1jaGVja2VkIHdpdGggdGhlIGhlYWRlciwgYXMgdGhlcmUgYXJlIGN1cnJlbnRseSB0d28gY29udmVudGlvbnMgaW4gdXNlOiB3aXRoIGFuZCB3aXRob3V0IAotX0ZMQUdTXyBpbiB0aGUgbWlkZGxlLgotCi1EcmF3aW5nIGNvbnZlbnRpb25zCi1+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVdoZW4gZHJhd2luZyBwaWN0dXJlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIGFwcGx5OgotCi1vYmplY3RzCi1eXl5eXl5eCi0KLU9iamVjdHMgYXJlIGRyYXduIHdpdGggYSBib3ggbGlrZToKLQotICArLS0tLS0tKwotICB8ICAgICAgfAotICArLS0tLS0tKwotICAKLQotcG9pbnRlcnMKLV5eXl5eXl5eCi0KLWEgcG9pbnRlciB0byBhbiBvYmplY3QuCi0KLSAgICAgICstLS0tLSsKLSAqLS0tPnwgICAgIHwKLSAgICAgICstLS0tLSsKLQotYW4gaW52YWxpZCBwb2ludGVyLCB0aGlzIGlzIGEgcG9pbnRlciB0aGF0IHNob3VsZCBub3QgYmUgdXNlZC4KLQotICotLy8tPgotCi0KLWVsZW1lbnRzCi1eXl5eXl5eXgotCi0gICstLS0tLS0tLS0tKwotICB8IG5hbWUgICAgIHwKLSBzaW5rICAgICAgIHNyYwotICArLS0tLS0tLS0tLSsKLQotcGFkIGxpbmtzCi1eXl5eXl5eXl4KLQotICAtLS0tLSsgICAgKy0tLQotICAgICAgIHwgICAgfAotICAgICAgc3JjLS1zaW5rCi0gIC0tLS0tKyAgICArLS0tCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtZHluYW1pYy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWR5bmFtaWMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTg1OTI0Li4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtZHluYW1pYy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1EeW5hbWljIHBpcGVsaW5lcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgbWFueSB1c2UgY2FzZXMgZm9yIGR5bmFtaWNhbGx5IGNvbnN0cnVjdGluZyBhbmQKLW1hbmlwdWxhdGluZyBhIHJ1bm5pbmcgb3IgcGF1c2VkIHBpcGVsaW5lIGFuZCB0aGUgZmVhdHVyZXMgcHJvdmlkZWQgYnkKLUdTdHJlYW1lci4KLQotV2hlbiBjb25zdHJ1Y3RpbmcgZHluYW1pYyBwaXBlbGluZXMgaXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlCi1mb2xsb3dpbmcgZmVhdHVyZXMgb2YgZ3N0cmVhbWVyOgotCi0gLSBwYWQgYmxvY2tpbmcgKHBhcnQtYmxvY2sudHh0KQotIC0gcGxheWJhY2sgc2VnbWVudHMuCi0gLSBzdHJlYW1pbmcgdnMgYXBwbGljYXRpb24gdGhyZWFkcy4KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNpbmsudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2Y5Yzg1Li4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtZWxlbWVudC1zaW5rLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI5MiArMCwwIEBACi1TaW5rIGVsZW1lbnRzCi0tLS0tLS0tLS0tLS0tCi0KLVNpbmsgZWxlbWVudHMgY29uc3VtZSBkYXRhIGFuZCBub3JtYWxseSBoYXZlIG5vIHNvdXJjZSBwYWRzLgotCi1UeXBpY2FsIHNpbmsgZWxlbWVudHMgaW5jbHVkZToKLQotIC0gYXVkaW8vdmlkZW8gcmVuZGVyZXJzCi0gLSBuZXR3b3JrIHNpbmtzCi0gLSBmaWxlc2lua3MKLQotU2lua3MgYXJlIGhhcmRlciB0byBjb25zdHJ1Y3QgdGhhbiBvdGhlciBlbGVtZW50IHR5cGVzIGFzIHRoZXkgYXJlIAotdHJlYXRlZCBzcGVjaWFsbHkgYnkgdGhlIEdTdHJlYW1lciBjb3JlLgotCi1zdGF0ZSBjaGFuZ2VzCi1+fn5+fn5+fn5+fn5+Ci0KLUEgc2luayBhbHdheXMgcmV0dXJucyBBU1lOQyBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UgdG8gUEFVU0VELCB0aGlzIAotaW5jbHVkZXMgYSBzdGF0ZSBjaGFuZ2UgZnJvbSBSRUFEWS0+UEFVU0VEIGFuZCBQTEFZSU5HLT5QQVVTRUQuIFRoZQotcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhpcyB3YXkgd2UgY2FuIGRldGVjdCB3aGVuIHRoZSBmaXJzdCBidWZmZXIKLW9yIGV2ZW50IGFycml2ZXMgaW4gdGhlIHNpbmsgd2hlbiB0aGUgc3RhdGUgY2hhbmdlIGNvbXBsZXRlcy4KLQotQSBzaW5rIHNob3VsZCBibG9jayBvbiB0aGUgZmlyc3QgRU9TIGV2ZW50IG9yIGJ1ZmZlciByZWNlaXZlZCBpbiB0aGUKLVJFQURZLT5QQVVTRUQgc3RhdGUgYmVmb3JlIGNvbW1pdGluZyB0aGUgc3RhdGUgdG8gUEFVU0VELgotCi1GTFVTSElORyBldmVudHMgaGF2ZSB0byBiZSBoYW5kbGVkIG91dCBvZiBzeW5jIHdpdGggdGhlIGJ1ZmZlciBmbG93Ci1hbmQgdGFrZSBubyBwYXJ0IGluIHRoZSBwcmVyb2xsIHByb2NlZHVyZS4KLQotRXZlbnRzIG90aGVyIHRoYW4gRU9TIGRvIG5vdCBjb21wbGV0ZSB0aGUgcHJlcm9sbCBzdGFnZS4KLQotc2luayBvdmVydmlldwotfn5+fn5+fn5+fn5+fgotCi0gLSBUT0RPOiBQUkVST0xMX0xPQ0sgY2FuIGJlIHJlbW92ZWQgYW5kIHdlIGNhbiBzYWZlbHkgdXNlIHRoZSBTVFJFQU1fTE9DSy4KLQotCi0KLSAgIyBDb21taXQgdGhlIHN0YXRlLiBXZSByZXR1cm4gVFJVRSBpZiB3ZSBjYW4gY29udGludWUKLSAgIyBzdHJlYW1pbmcsIEZBTFNFIGluIHRoZSBjYXNlIHdlIGdvIHRvIGEgUkVBRFkgb3IgTlVMTCBzdGF0ZS4KLSAgIyBpZiB3ZSBnbyB0byBQTEFZSU5HLCB3ZSBkb24ndCBuZWVkIHRvIGJsb2NrIG9uIHByZXJvbGwuCi0gIGNvbW1pdAotICB7Ci0gICAgTE9DSwotICAgIHN3aXRjaCAocGVuZGluZykKLSAgICAgIGNhc2UgUExBWUlORzoKLSAgICAgICAgbmVlZF9wcmVyb2xsID0gRkFMU0UKLQlicmVhawotICAgICAgY2FzZSBQQVVTRUQ6Ci0JYnJlYWsKLSAgICAgIGNhc2UgUkVBRFk6Ci0gICAgICBjYXNlIE5VTEw6Ci0gICAgICAgIHJldHVybiBGQUxTRQotICAgICAgY2FzZSBWT0lEOgotICAgICAgICByZXR1cm4gVFJVRQotCi0gICAgIyB1cGRhdGUgc3RhdGUKLSAgICBzdGF0ZSA9IHBlbmRpbmcKLSAgICBuZXh0ID0gVk9JRAotICAgIHBlbmRpbmcgPSBWT0lECi0gICAgVU5MT0NLCi0gICAgcmV0dXJuIFRSVUUKLSAgfQotCi0gICMgU3luYyBhbiBvYmplY3QuIFdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIGVsZW1lbnQgdG8gcmVhY2gKLSAgIyB0aGUgUExBWUlORyBzdGF0ZSBiZWZvcmUgd2UgY2FuIHdhaXQgb24gdGhlIGNsb2NrLgotICAjIFNvbWUgaXRlbXMgZG8gbm90IG5lZWQgc3luY2hyb25pc2F0aW9uIChtb3N0IGV2ZW50cykgc28gdGhlCi0gICMgZ2V0X3RpbWVzIG1ldGhvZCByZXR1cm5zIEZBTFNFIChub3Qgc3luY2FibGUpCi0gICMgbmVlZF9wcmVyb2xsIGluZGljYXRlcyB0aGF0IHdlIGFyZSBub3QgaW4gdGhlIFBMQVlJTkcgc3RhdGUKLSAgIyBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gY29tbWl0IGFuZCBwb3RlbnRpYWxseSBibG9jayBvbiBwcmVyb2xsCi0gICMgaWYgb3VyIGNsb2NrX3dhaXQgZ290IGludGVycnVwdGVkIHdlIGNvbW1pdCBhbmQgYmxvY2sgYWdhaW4uCi0gICMgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBjdXJyZW50IGl0ZW0gYmVpbmcgcmVuZGVyZWQgaXMKLSAgIyBub3QgeWV0IGZpbmlzaGVkIGFuZCB3ZSBjYW4gdXNlIHRoYXQgaXRlbSB0byBmaW5pc2ggcHJlcm9sbC4KLSAgZG9fc3luYyAob2JqKQotICB7Ci0gICAgIyBnZXQgdGltaW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIG9iamVjdAotICAgIHN5bmNhYmxlID0gZ2V0X3RpbWVzIChvYmosICZzdGFydCwgJnN0b3ApCi0gICAgaWYgKCFzeW5jYWJsZSkKLSAgICAgIHJldHVybiBPSzsKLSBhZ2FpbjoKLSAgICB3aGlsZSAobmVlZF9wcmVyb2xsKQotICAgICAgaWYgKG5lZWRfY29tbWl0KQotICAgICAgICBuZWVkX2NvbW1pdCA9IEZBTFNFCi0gICAgICAgIGlmICghY29tbWl0KQotICAgICAgICAgIHJldHVybiBGTFVTSElORwotCi0gICAgICBpZiAobmVlZF9wcmVyb2xsKQotICAgICAgICAjIHJlbGVhc2UgUFJFUk9MTF9MT0NLIGFuZCB3YWl0LiBwcmVyb2xsZWQgY2FuIGJlIG9ic2VydmVkCi0gICAgICAgICMgYW5kIHdpbGwgYmUgVFJVRQotICAgICAgICBwcmVyb2xsZWQgPSBUUlVFCi0gICAgICAgIFBSRVJPTExfV0FJVCAocmVsZWFzaW5nIFBSRVJPTExfTE9DSykKLSAgICAgICAgcHJlcm9sbGVkID0gRkFMU0UKLSAgICAgICAgaWYgKGZsdXNoaW5nKQotICAgICAgICAgIHJldHVybiBGTFVTSElORwotCi0gICAgaWYgKHZhbGlkIChzdGFydCB8fCBzdG9wKSkKLSAgICAgIFBSRVJPTExfVU5MT0NLCi0gICAgICBlbmRfdGltZSA9IHN0b3AKLSAgICAgIHJldCA9IHdhaXRfY2xvY2sgKG9iaixzdGFydCkKLSAgICAgIFBSRVJPTExfTE9DSwotICAgICAgaWYgKGZsdXNoaW5nKQotICAgICAgICByZXR1cm4gRkxVU0hJTkcgCi0gICAgICAjIGlmIHRoZSBjbG9jayB3YXMgdW5zY2hlZHVsZWQsIHdlIHJlZG8gdGhlCi0gICAgICAjIHByZXJvbGwKLSAgICAgIGlmIChyZXQgPT0gVU5TQ0hFRFVMRUQpCi0gICAgICAgIGdvdG8gYWdhaW4gICAgICAgICAgCi0gIH0KLQotICAjIHJlbmRlciBhIHByZXJvbGxhYmxlIGl0ZW0gKEVPUyBvciBidWZmZXIpLiBJdCBpcwotICAjIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgUFJFUk9MTF9MT0NLIGhlbHQuCi0gIHJlbmRlcl9vYmplY3QgKG9iaikKLSAgewotICAgIHJldCA9IGRvX3N5bmMgKG9iaikKLSAgICBpZiAocmV0ICE9IE9LKQotICAgICAgcmV0dXJuIHJldDsKLQotICAgICMgcHJlcm9sbCBhbmQgc3luY2luZyBkb25lLCBub3cgd2UgY2FuIHJlbmRlcgotICAgIHJlbmRlcihvYmopCi0gIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAjIHNpbmtzIHRoYXQgc3luYyBvbiBidWZmZXIgY29udGVudHMgZG8gbGlrZSB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGUgKG1vcmVfdG9fcmVuZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgcmV0ID0gcmVuZGVyIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaWYgKHJldCA9PSBpbnRlcnJ1cHRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgcHJlcm9sbGVkID0gVFJVRQotICAgIHJlbmRlciAoYnVmZmVyKSAgICAgICAgICAtLS0tLT58ICAgICBQUkVST0xMX1dBSVQgKHJlbGVhc2luZyBQUkVST0xMX0xPQ0spCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHByZXJvbGxlZCA9IEZBTFNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIGlmIChmbHVzaGluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICByZXR1cm4gRkxVU0hJTkcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKLQotICAjIHF1ZXVlIGEgcHJlcm9sbGFibGUgaXRlbSAoRU9TIG9yIGJ1ZmZlcikuIEl0IGlzCi0gICMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBQUkVST0xMX0xPQ0sgaGVsdC4KLSAgIyBUaGlzIGZ1bmN0aW9uIHdpbGwgY29tbWl0IHRoZSBzdGF0ZSB3aGVuIHJlY2VpdmluZyB0aGUKLSAgIyBmaXJzdCBwcmVyb2xsYWJsZSBpdGVtLgotICAjIGl0ZW1zIGFyZSB0aGVuIGFkZGVkIHRvIHRoZSByZW5kZXJpbmcgcXVldWUgb3IgcmVuZGVyZWQKLSAgIyByaWdodCBhd2F5IGlmIG5vIHByZXJvbGwgaXMgbmVlZGVkLgotICBxdWV1ZSAob2JqLCBwcmVyb2xsYWJsZSkgCi0gIHsKLSAgICBpZiAobmVlZF9wcmVyb2xsKQotICAgICAgaWYgKHByZXJvbGxhYmxlKQotICAgICAgICBxdWV1ZWxlbisrCi0KLSAgICAgICMgZmlyc3QgaXRlbSBpbiB0aGUgcXVldWUgd2hpbGUgd2UgbmVlZCBwcmVyb2xsCi0gICAgICAjIHdpbGwgY29tcGxldGUgc3RhdGUgY2hhbmdlIGFuZCBjYWxsIHByZXJvbGwKLSAgICAgIGlmIChxdWV1ZWxlbiA9PSAxKQotICAgICAgICBwcmVyb2xsIChvYmopCi0gICAgICAgIGlmIChuZWVkX2NvbW1pdCkKLSAgICAgICAgICBuZWVkX2NvbW1pdCA9IEZBTFNFCi0gICAgICAgICAgaWYgKCFjb21taXQpCi0gICAgICAgICAgICByZXR1cm4gRkxVU0hJTkcKLQotICAgICAgIyB0aGVuIHNlZSBpZiB3ZSBuZWVkIG1vcmUgcHJlcm9sbCBpdGVtcyBiZWZvcmUgd2UKLSAgICAgICMgY2FuIGJsb2NrCi0gICAgICBpZiAobmVlZF9wcmVyb2xsKQotICAgICAgICBpZiAocXVldWVsZW4gPD0gbWF4cXVldWUpCi0gICAgICAgICAgcXVldWUuYWRkIChvYmopCi0gICAgICAgICAgcmV0dXJuIE9LCi0KLSAgICAjIG5vdyBjbGVhciB0aGUgcXVldWUgYW5kIHJlbmRlciBlYWNoIGl0ZW0gYmVmb3JlCi0gICAgIyByZW5kZXJpbmcgdGhlIGN1cnJlbnQgaXRlbS4KLSAgICB3aGlsZSAocXVldWUuaGFzSXRlbSkKLSAgICAgIHJlbmRlcl9vYmplY3QgKHF1ZXVlLnJlbW92ZSgpKQotCi0gICAgcmVuZGVyX29iamVjdCAob2JqKQotICAgIHF1ZXVlbGVuID0gMAotICB9Ci0KLSAgIyB2YXJpb3VzIGV2ZW50IGZ1bmN0aW9ucwotICBldmVudAotICAgIEVPUzoKLSAgICAgICMgZXZlbnRzIG11c3QgY29tcGxldGUgcHJlcm9sbCB0b28KLSAgICAgIFNUUkVBTV9MT0NLCi0gICAgICBQUkVST0xMX0xPQ0sKLSAgICAgIGlmIChmbHVzaGluZykKLSAgICAgICAgcmV0dXJuIEZBTFNFCi0gICAgICByZXQgPSBxdWV1ZSAoZXZlbnQsIFRSVUUpCi0gICAgICBpZiAocmV0ID09IEZMVVNISU5HKQotICAgICAgICByZXR1cm4gRkFMU0UKLSAgICAgIFBSRVJPTExfVU5MT0NLCi0gICAgICBTVFJFQU1fVU5MT0NLCi0gICAgICBicmVhawotICAgIFNFR01FTlQ6Ci0gICAgICAjIHRoZSBzZWdtZW50IG11c3QgYmUgdXNlZCB0byBjbGlwIGluY29taW5nCi0gICAgICAjIGJ1ZmZlcnMuIFRoZW4gdGhlbiBnbyBpbnRvIHRoZSBxdWV1ZSBhcyBub24tcHJlcm9sbGFibGUKLSAgICAgICMgaXRlbXMgdXNlZCBmb3Igc3luY2luZyB0aGUgYnVmZmVycwotICAgICAgU1RSRUFNX0xPQ0sKLSAgICAgIFBSRVJPTExfTE9DSwotICAgICAgaWYgKGZsdXNoaW5nKQotICAgICAgICByZXR1cm4gRkFMU0UKLSAgICAgIHNldF9jbGlwCi0gICAgICByZXQgPSBxdWV1ZSAoZXZlbnQsIEZBTFNFKQotICAgICAgaWYgKHJldCA9PSBGTFVTSElORykKLSAgICAgICAgcmV0dXJuIEZBTFNFCi0gICAgICBQUkVST0xMX1VOTE9DSwotICAgICAgU1RSRUFNX1VOTE9DSwotICAgICAgYnJlYWsKLSAgICBGTFVTSF9TVEFSVDoKLSAgICAgICMgc2V0IGZsdXNoaW5nIGFuZCB1bmJsb2NrIGFsbCB0aGF0IGlzIHdhaXRpbmcKLSAgICAgIGV2ZW50ICAgICAgICAgICAgICAgICAgIC0tLS0+IHN1YmNsYXNzZXMgY2FuIGludGVycnVwdCByZW5kZXIKLSAgICAgIFBSRVJPTExfTE9DSwotICAgICAgZmx1c2hpbmcgPSBUUlVFCi0gICAgICB1bmxvY2tfY2xvY2sKLSAgICAgIFBSRVJPTExfU0lHTkFMCi0gICAgICBQUkVST0xMX1VOTE9DSwotICAgICAgU1RSRUFNX0xPQ0sKLSAgICAgIGxvc3Rfc3RhdGUKLSAgICAgIFNUUkVBTV9VTkxPQ0sKLSAgICAgIGJyZWFrCi0gICAgRkxVU0hfRU5EOgotICAgICAgIyB1bnNldCBmbHVzaGluZyBhbmQgY2xlYXIgYWxsIGRhdGEgYW5kIGVvcwotICAgICAgU1RSRUFNX0xPQ0sKLSAgICAgIGV2ZW50IAotICAgICAgUFJFUk9MTF9MT0NLCi0gICAgICBxdWV1ZS5jbGVhcgotICAgICAgcXVldWVsZW4gPSAwCi0gICAgICBmbHVzaGluZyA9IEZBTFNFCi0gICAgICBlb3MgPSBGQUxTRQotICAgICAgUFJFUk9MTF9VTkxPQ0sKLSAgICAgIFNUUkVBTV9VTkxPQ0sKLSAgICAgIGJyZWFrCi0KLSAgIyB0aGUgY2hhaW4gZnVuY3Rpb24gY2hlY2tzIHRoZSBidWZmZXIgZmFsbHMgd2l0aGluIHRoZQotICAjIGNvbmZpZ3VyZWQgc2VnbWVudCBhbmQgcXVldWVzIHRoZSBidWZmZXIgZm9yIHByZXJvbGwgYW5kCi0gICMgcmVuZGVyaW5nCi0gIGNoYWluCi0gICAgU1RSRUFNX0xPQ0sKLSAgICBQUkVST0xMX0xPQ0sKLSAgICBpZiAoZmx1c2hpbmcpCi0gICAgICByZXR1cm4gRkxVU0hJTkcKLSAgICBpZiAoY2xpcCkKLSAgICAgIHF1ZXVlIChidWZmZXIsIFRSVUUpCi0gICAgUFJFUk9MTF9VTkxPQ0sKLSAgICBTVFJFQU1fVU5MT0NLCi0KLSAgc3RhdGUKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pCi0gICAgICBSRUFEWV9QQVVTRUQ6Ci0gICAgICAgICMgbm8gZGF0YXBhc3NpbmcgaXMgZ29pbmcgb24gc28gd2UgYWx3YXlzIHJldHVybiBBU1lOQwotICAgICAgICByZXQgPSBBU1lOQwotCW5lZWRfY29tbWl0ID0gVFJVRQotICAgICAgICBlb3MgPSBGQUxTRQotICAgICAgICBmbHVzaGluZyA9IEZBTFNFCi0JbmVlZF9wcmVyb2xsID0gVFJVRQotCXByZXJvbGxlZCA9IEZBTFNFCi0gICAgICAgIGJyZWFrCi0gICAgICBQQVVTRURfUExBWUlORzoKLSAgICAgICAgIyB3ZSBncmFiIHRoZSBwcmVyb2xsIGxvY2suIFRoaXMgd2UgY2FuIG9ubHkgZG8gaWYgdGhlCi0JIyBjaGFpbiBmdW5jdGlvbiBpcyBlaXRoZXIgZG9pbmcgc29tZSBjbG9jayBzeW5jLCB3ZSBhcmUKLQkjIHdhaXRpbmcgZm9yIHByZXJvbGwgb3IgdGhlIGNoYWluIGZ1bmN0aW9uIGlzIG5vdCBiZWluZyBjYWxsZWQuCi0gICAgICAgIFBSRVJPTExfTE9DSwotCWlmIChwcmVyb2xsZWQgfHwgZW9zKQotICAgICAgICAgIHJldCA9IE9LCi0JICBuZWVkX2NvbW1pdCA9IEZBTFNFCi0JICBuZWVkX3ByZXJvbGwgPSBGQUxTRQotCSAgaWYgKGVvcykKLQkgICAgcG9zdF9lb3MKLQkgIGVsc2UKLSAgICAgICAgICAgIFBSRVJPTExfU0lHTkFMCi0JZWxzZQotCSAgbmVlZF9wcmVyb2xsID0gVFJVRQotCSAgbmVlZF9jb21taXQgPSBUUlVFCi0gICAgICAgICAgcmV0ID0gQVNZTkMKLSAgICAgICAgUFJFUk9MTF9VTkxPQ0sKLSAgICAgICAgYnJlYWsKLSAgICAgIFBMQVlJTkdfUEFVU0VEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tPiBzdWJjbGFzcyBjYW4gaW50ZXJydXB0IHJlbmRlcgotICAgICAgICAjIHdlIGdyYWIgdGhlIHByZXJvbGwgbG9jay4gVGhpcyB3ZSBjYW4gb25seSBkbyBpZiB0aGUKLQkjIGNoYWluIGZ1bmN0aW9uIGlzIGVpdGhlciBkb2luZyBzb21lIGNsb2NrIHN5bmMKLQkjIG9yIHRoZSBjaGFpbiBmdW5jdGlvbiBpcyBub3QgYmVpbmcgY2FsbGVkLiAKLSAgICAgICAgUFJFUk9MTF9MT0NLCi0JbmVlZF9wcmVyb2xsID0gVFJVRQotICAgICAgICB1bmxvY2tfY2xvY2sKLQlpZiAocHJlcm9sbGVkIHx8IGVvcykKLSAgICAgICAgICByZXQgPSBPSwotCWVsc2UKLSAgICAgICAgICByZXQgPSBBU1lOQwotICAgICAgICBQUkVST0xMX1VOTE9DSwotICAgICAgICBicmVhawotICAgICAgUEFVU0VEX1JFQURZOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tPiBzdWJjbGFzcyBjYW4gaW50ZXJydXB0IHJlbmRlcgotICAgICAgICAjIHdlIGdyYWIgdGhlIHByZXJvbGwgbG9jay4gU2V0IHRvIGZsdXNoaW5nIGFuZCB1bmxvY2sKLQkjIGV2ZXJ5dGhpbmcuIFRoaXMgc2hvdWxkIGV4aXQgdGhlIGNoYWluIGZ1bmN0aW9ucyBhbmQgc3RvcAotCSMgc3RyZWFtaW5nLgotICAgICAgICBQUkVST0xMX0xPQ0sKLSAgICAgICAgZmx1c2hpbmcgPSBUUlVFCi0gICAgICAgIHVubG9ja19jbG9jawotICAgICAgICBxdWV1ZS5jbGVhcgotICAgICAgICBxdWV1ZWxlbiA9IDAKLSAgICAgICAgUFJFUk9MTF9TSUdOQUwKLSAgICAgICAgcmV0ID0gT0sKLSAgICAgICAgUFJFUk9MTF9VTkxPQ0sKLSAgICAgICAgYnJlYWsKLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXNvdXJjZS50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc291cmNlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM5ODU1My4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWVsZW1lbnQtc291cmNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi1Tb3VyY2UgZWxlbWVudHMKLS0tLS0tLS0tLS0tLS0tLQotCi1BIHNvdXJjZSBlbGVtZW50IGlzIGFuIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBkYXRhIHRvIHRoZSBwaXBlbGluZS4gSXQKLWRvZXMgdHlwaWNhbGx5IG5vdCBoYXZlIGFueSBzaW5rIChpbnB1dCkgcGFkcy4KLQotVHlwaWNhbCBzb3VyY2UgZWxlbWVudHMgaW5jbHVkZToKLQotIC0gZmlsZSByZWFkZXJzCi0gLSBuZXR3b3JrIGVsZW1lbnRzIChsaXZlIG9yIG5vdCkKLSAtIGNhcHR1cmUgZWxlbWVudHMgKHZpZGVvL2F1ZGlvLy4uLikKLSAtIGdlbmVyYXRvcnMgKHNpZ25hbHMvdmlkZW8vYXVkaW8vLi4uKQotCi0KLUxpdmUgc291cmNlcwotfn5+fn5+fn5+fn5+Ci0KLUEgc291cmNlIGlzIHNhaWQgdG8gYmUgYSBsaXZlIHNvdXJjZSB3aGVuIGl0IGhhcyB0aGUgZm9sbG93aW5nIHByb3BlcnR5OgotCi0gKiB0ZW1wb3JhcmlseSBzdG9wcGluZyByZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBjYXVzZXMgZGF0YSB0byBiZSBsb3N0LiAKLQotSW4gZ2VuZXJhbCB3aGVuIHRoaXMgcHJvcGVydHkgaG9sZHMsIHRoZSBzb3VyY2UgYWxzbyBwcm9kdWNlcyBkYXRhIGF0IGEgZml4ZWQKLXJhdGUuIE1vc3Qgc291cmNlcyBoYXZlIGEgbGltaXQgb24gdGhlIHJhdGUgYXQgd2hpY2ggdGhleSBjYW4gZGVsaXZlciBkYXRhLCB3aGljaAotbWlnaHQgYmUgZmFzdGVyIG9yIHNsb3dlciB0aGFuIHRoZSBjb25zdW1wdGlvbiByYXRlLiBUaGlzIHByb3BlcnR5IGhvd2V2ZXIgZG9lcwotbm90IG1ha2UgdGhlbSBhIGxpdmUgc291cmNlLgotCi1MZXQncyBsb29rIGF0IHNvbWUgZXhhbXBsZSBzb3VyY2VzLgotCi0gLSBmaWxlIHJlYWRlcnM6IHlvdSBjYW4gUEFVU0Ugd2l0aG91dCBsb3NpbmcgZGF0YS4gVGhlcmUgaXMgaG93ZXZlciBhIGxpbWl0IHRvCi0gICBob3cgZmFzdCB5b3UgY2FuIHJlYWQgZnJvbSB0aGlzIHNvdXJjZS4gVGhpcyBsaW1pdCBpcyB1c3VhbGx5IG11Y2ggaGlnaGVyCi0gICB0aGFuIHRoZSBjb25zdW1wdGlvbiByYXRlLiBJbiBzb21lIGNhc2VzIGl0IG1pZ2h0IGJlIHNsb3dlciAoYW4gTkZTIHNoYXJlLAotICAgZm9yIGV4YW1wbGUpIGluIHdoaWNoIGNhc2UgeW91IG1pZ2h0IG5lZWQgdG8gdXNlIHNvbWUgYnVmZmVyaW5nCi0gICAoc2VlIHBhcnQtYnVmZmVyaW5nLnR4dCkuCi0KLSAtIEhUVFAgbmV0d29yayBlbGVtZW50OiB5b3UgY2FuIFBBVVNFIHdpdGhvdXQgZGF0YSBsb3NzLiBEZXBlbmRpbmcgb24gdGhlCi0gICBhdmFpbGFibGUgbmV0d29yayBiYW5kd2lkdGgsIGNvbnN1bXB0aW9uIHJhdGUgbWlnaHQgYmUgaGlnaGVyIHRoYW4gcHJvZHVjdGlvbgotICAgcmF0ZSBpbiB3aGljaCBjYXNlIGJ1ZmZlcmluZyBzaG91bGQgYmUgdXNlZCAoc2VlIHBhcnQtYnVmZmVyaW5nLnR4dCkuCi0gIAotIC0gYXVkaW8gc291cmNlOiBwYXVzaW5nIHRoZSBhdWRpbyBjYXB0dXJlIHdpbGwgbGVhZCB0byBsb3N0IGRhdGEuIHRoaXMgc291cmNlCi0gICBpcyB0aGVyZWZvcmUgZGVmaW5hdGx5IGxpdmUuIEluIGFkZGl0aW9uLCBhbiBhdWRpbyBzb3VyY2Ugd2lsbCBwcm9kdWNlIGRhdGEKLSAgIGF0IGEgZml4ZWQgcmF0ZSAodGhlIHNhbXBsZXJhdGUpLiBBbHNvIGRlcGVuZGluZyBvbiB0aGUgYnVmZmVyc2l6ZSwgdGhpcwotICAgc291cmNlIHdpbGwgaW50cm9kdWNlIGEgbGF0ZW5jeSAoc2VlIHBhcnQtbGF0ZW5jeS50eHQpLgotCi0gLSB1ZHAgbmV0d29yayBzb3VyY2U6IFBhdXNpbmcgdGhlIHJlY2VpdmluZyBwYXJ0IHdpbGwgbGVhZCB0byBsb3N0IGRhdGEuIFRoaXMKLSAgIHNvdXJjZSBpcyB0aGVyZWZvcmUgYSBsaXZlIHNvdXJjZS4gQWxzbyBpbiBhIHR5cGljYWwgY2FzZSB0aGUgdWRwIHBhY2tldHMKLSAgIHdpbGwgYmUgcmVjZWl2ZWQgYXQgYSBjZXJ0YWluIHJhdGUsIHdoaWNoIG1pZ2h0IGJlIGRpZmZpY3VsdCB0byBndWVzcyBiZWNhdXNlCi0gICBvZiBuZXR3b3JrIGppdHRlci4gVGhpcyBzb3VyY2UgZG9lcyBub3QgbmVjZXNzYXJpbHkgaW50cm9kdWNlIGxhdGVuY3kgb24gaXRzCi0gICBvd24uCi0KLSAtIGR2YiBzb3VyY2U6IFBBVVNJTkcgdGhpcyBlbGVtZW50IHdpbGwgbGVhZCB0byBkYXRhIGxvc3MsIGl0J3MgYSBsaXZlIHNvdXJjZQotICAgc2ltaWxhciB0byBhIFVEUCBzb3VyY2UuIAotCi0KLVNvdXJjZSB0eXBlcwotfn5+fn5+fn5+fn5+Ci0KLUEgc291cmNlIGVsZW1lbnQgY2FuIG9wZXJhdGUgaW4gdGhyZWUgd2F5czoKLQotICAtIGl0IGlzIGZ1bGx5IHNlZWthYmxlLCB0aGlzIG1lYW5zIHRoYXQgcmFuZG9tIGFjY2VzcyBjYW4gYmUgcGVyZm9ybWVkCi0gICAgb24gaXQgaW4gYW4gZWZmaWNpZW50IHdheS4gKGEgZmlsZSByZWFkZXIsLi4uKS4gVGhpcyBhbHNvIHR5cGljYWxseQotICAgIG1lYW5zIHRoYXQgdGhlIHNvdXJjZSBpcyBub3QgbGl2ZS4KLQotICAtIGRhdGEgY2FuIGJlIG9idGFpbmVkIGZyb20gaXQgd2l0aCBhIHZhcmlhYmxlIHNpemUuIFRoaXMgbWVhbnMgdGhhdAotICAgIHRoZSBzb3VyY2UgY2FuIGdpdmUgTiBieXRlcyBvZiBkYXRhLiBBbiBleGFtcGxlIGlzIGFuIGF1ZGlvIHNvdXJjZS4KLSAgICBBIHZpZGVvIHNvdXJjZSBhbHdheXMgcHJvdmlkZXMgdGhlIHNhbWUgYW1vdW50IG9mIGRhdGEgKG9uZSB2aWRlbyAKLSAgICBmcmFtZSkuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIGZ1bGx5IHNlZWthYmxlIHNvdXJjZS4KLQotICAtIGl0IGlzIGEgbGl2ZSBzb3VyY2UsIHNlZSBhYm92ZS4KLQotV2hlbiB3cml0aW5nIGEgc291cmNlLCBvbmUgaGFzIHRvIGxvb2sgYXQgaG93IHRoZSBzb3VyY2UgY2FuIG9wZXJhdGUgdG8KLWRlY2lkZSBvbiB0aGUgc2NoZWR1bGluZyBtZXRob2RzIHRvIGltcGxlbWVudCBvbiB0aGUgc291cmNlLgotCi0gIC0gZnVsbHkgc2Vla2FibGUgc291cmNlcyBpbXBsZW1lbnQgYSBnZXRyYW5nZSBmdW5jdGlvbiBvbiB0aGUgc291cmNlIHBhZC4KLQotICAtIHNvdXJjZXMgdGhhdCBjYW4gZ2l2ZSBOIGJ5dGVzIGJ1dCBjYW5ub3QgZG8gc2Vla2luZyBhbHNvIGltcGxlbWVudCBhCi0gICAgZ2V0cmFuZ2UgZnVuY3Rpb24gYnV0IHN0YXRlIHRoYXQgdGhleSBjYW5ub3QgZG8gcmFuZG9tIGFjY2Vzcy4KLQotICAtIHNvdXJjZXMgdGhhdCBhcmUgcHVyZWx5IGxpdmUgc291cmNlcyBpbXBsZW1lbnQgYSB0YXNrIHRvIHB1c2ggb3V0Ci0gICAgZGF0YS4KLQotQW55IHNvdXJjZSB0aGF0IGhhcyBhIGdldHJhbmdlIGZ1bmN0aW9uIG11c3QgYWxzbyBpbXBsZW1lbnQgYSBwdXNoIGJhc2VkCi1zY2hlZHVsaW5nIG1vZGUuIEluIHRoaXMgbW9kZSB0aGUgc291cmNlIHN0YXJ0cyBhIHRhc2sgdGhhdCBnZXRzIE4gYnl0ZXMKLWFuZCBwdXNoZXMgdGhlbSBvdXQuIFdoZW5ldmVyIHBvc3NpYmxlLCB0aGUgcGVlciBlbGVtZW50IHdpbGwgc2VsZWN0IHRoZQotZ2V0cmFuZ2UgYmFzZWQgc2NoZWR1bGluZyBtZXRob2Qgb2YgdGhlIHNvdXJjZSwgdGhvdWdoLgotCi1BIHNvdXJjZSB3aXRoIGEgZ2V0cmFuZ2UgZnVuY3Rpb24gbXVzdCBhY3RpdmF0ZSBpdHNlbGYgaW4gdGhlIHBhZCBhY3RpdmF0ZQotZnVuY3Rpb24uIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRvd25zdHJlYW0gcGVlciBlbGVtZW50IHdpbGwgZGVjaWRlCi1hbmQgYWN0aXZhdGUgdGhlIHNvdXJjZSBlbGVtZW50IGluIGl0cyBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gYmVmb3JlIHRoZQotc291cmNlJ3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLQotCi1Tb3VyY2UgYmFzZSBjbGFzc2VzCi1+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLUdzdEJhc2VTcmM6Ci0KLVRoaXMgYmFzZSBjbGFzcyBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHJhbmRvbSBhY2Nlc3Mgc291cmNlIGFuZAotaXMgdmVyeSB3ZWxsIHN1aXRlZCBmb3IgZmlsZSByZWFkZXIgbGlrZSBzb3VyY2VzLgotCi0KLUdzdFB1c2hTcmM6Ci0KLUJhc2UgY2xhc3MgZm9yIGJsb2NrLWJhc2VkIHNvdXJjZXMuIFRoaXMgY2xhc3MgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgCi1lbGVtZW50cyB0aGF0IGNhbm5vdCBkbyByYW5kb20gYWNjZXNzLCBvciBhdCBsZWFzdCB2ZXJ5IHNsb3dseS4gVGhlCi1zb3VyY2UgdXN1YWxseSBwcmVmZXJzIHRvIHB1c2ggb3V0IGEgZml4ZWQgc2l6ZSBidWZmZXIuCi0KLUNsYXNzZXMgZXh0ZW5kaW5nIHRoaXMgYmFzZSBjbGFzcyB3aWxsIHVzdWFsbHkgYmUgc2NoZWR1bGVkIGluIGEgcHVzaAotYmFzZWQgbW9kZS4gSWYgdGhlIHBlZXIgYWNjZXB0cyB0byBvcGVyYXRlIHdpdGhvdXQgb2Zmc2V0cyBhbmQgd2l0aGluCi10aGUgbGltaXRzIG9mIHRoZSBhbGxvd2VkIGJsb2NrIHNpemUsIHRoaXMgY2xhc3MgY2FuIG9wZXJhdGUgaW4gZ2V0cmFuZ2UKLWJhc2VkIG1vZGUgYXV0b21hdGljYWxseS4KLQotVGhlIHN1YmNsYXNzIHNob3VsZCBleHRlbmQgdGhlIG1ldGhvZHMgZnJvbSB0aGUgYmFzZWNsYXNzIGluCi1hZGRpdGlvbiB0byB0aGUgY3JlYXRlIG1ldGhvZC4gSWYgdGhlIHNvdXJjZSBpcyBzZWVrYWJsZSwgaXQKLW5lZWRzIHRvIG92ZXJyaWRlIEdzdEJhc2VTcmM6OmV2ZW50KCkgaW4gYWRkaXRpb24gdG8gCi1Hc3RCYXNlU3JjOjppc19zZWVrYWJsZSgpIGluIG9yZGVyIHRvIHJldHJpZXZlIHRoZSBzZWVrIG9mZnNldCwKLXdoaWNoIGlzIHRoZSBvZmZzZXQgb2YgdGhlIG5leHQgYnVmZmVyIHRvIGJlIHJlcXVlc3RlZC4KLQotRmx1c2hpbmcsIHNjaGVkdWxpbmcgYW5kIHN5bmMgaXMgYWxsIGhhbmRsZWQgYnkgdGhpcyBiYXNlIGNsYXNzLgotCi0KLVRpbWVzdGFtcHMKLX5+fn5+fn5+fn4KLQotQSBub24tbGl2ZSBzb3VyY2Ugc2hvdWxkIHRpbWVzdGFtcCB0aGUgYnVmZmVycyBpdCBwcm9kdWNlcyBzdGFydGluZyBmcm9tIDAuIElmCi1pdCBpcyBub3QgcG9zc2libGUgdG8gdGltZXN0YW1wIGV2ZXJ5IGJ1ZmZlciAoZmlsZXNyYyksIHRoZSBzb3VyY2UgaXMgYWxsb3dlZCB0bwotb25seSB0aW1lc3RhbXAgdGhlIGZpcnN0IGJ1ZmZlciAoYXMgMCkuCi0KLUxpdmUgc291cmNlcyBvbmx5IHByb2R1Y2UgZGF0YSBpbiB0aGUgUExBWUlORyBzdGF0ZSwgd2hlbiB0aGUgY2xvY2sgaXMgcnVubmluZy4KLVRoZXkgc2hvdWxkIHRpbWVzdGFtcCBlYWNoIGJ1ZmZlciB0aGV5IHByb2R1Y2Ugd2l0aCB0aGUgY3VycmVudCBydW5uaW5nX3RpbWUgb2YKLXRoZSBwaXBlbGluZSwgd2hpY2ggaXMgZXhwcmVzc2VkIGFzOgotCi0gICAgYWJzb2x1dGVfdGltZSAtIGJhc2VfdGltZQotCi1XaXRoIGFic29sdXRlX3RpbWUgdGhlIHRpbWUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBpcGVsaW5lIHdpdGgKLWdzdF9jbG9ja19nZXRfdGltZSgpIGFuZCBiYXNlX3RpbWUgYmVpbmcgdGhlIHRpbWUgb2YgdGhhdCBjbG9jayB3aGVuIHRoZQotcGlwZWxpbmUgd2FzIGxhc3Qgc2V0IHRvIFBMQVlJTkcuCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtZWxlbWVudC10cmFuc2Zvcm0udHh0IGIvZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZmE5YjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1lbGVtZW50LXRyYW5zZm9ybS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotVHJhbnNmb3JtIGVsZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVHJhbnNmb3JtIGVsZW1lbnRzIHRyYW5zZm9ybSBpbnB1dCBidWZmZXJzIHRvIG91dHB1dCBidWZmZXJzIGJhc2VkCi1vbiB0aGUgc2luayBhbmQgc291cmNlIGNhcHMuIAotCi1BbiBpbXBvcnRhbnQgcmVxdWlyZW1lbnQgZm9yIGEgdHJhbnNmb3JtIGlzIHRoYXQgdGhlIG91dHB1dCBjYXBzIGFyZSBjb21wbGV0ZWx5Ci1kZWZpbmVkIGJ5IHRoZSBpbnB1dCBjYXBzIGFuZCB2aWNlIHZlcnNhLiBUaGlzIG1lYW5zIHRoYXQgYSB0eXBpY2FsIGRlY29kZXIKLWVsZW1lbnQgY2FuIE5PVCBiZSBpbXBsZW1lbnRlZCB3aXRoIGEgdHJhbnNmb3JtIGVsZW1lbnQsIHRoaXMgaXMgYmVjYXVzZSB0aGUKLW91dHB1dCBjYXBzIGxpa2Ugd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZGVjb21wcmVzc2VkIHZpZGVvIGZyYW1lLCBmb3IgZXhhbXBsZSwKLWFyZSBlbmNvZGVkIGluIHRoZSBzdHJlYW0gYW5kIHRodXMgbm90IGRlZmluZWQgYnkgdGhlIGlucHV0IGNhcHMuCi0KLVR5cGljYWwgdHJhbnNmb3JtIGVsZW1lbnRzIGluY2x1ZGU6Ci0KLSAtIGF1ZGlvIGNvbnZlcnRvcnMgKGF1ZGlvY29udmVydCwgYXVkaW9yZXNhbXBsZSwuLi4pCi0gLSB2aWRlbyBjb252ZXJ0b3JzIChjb2xvcnNwYWNlLCB2aWRlb3NjYWxlLCAuLi4pCi0gLSBmaWx0ZXJzIChjYXBzZmlsdGVyLCB2b2x1bWUsIGNvbG9yYmFsYW5jZSwgLi4uKQotCi1UaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHRyYW5zZm9ybSBlbGVtZW50IGhhcyB0byB0YWtlIGNhcmUgb2YKLXRoZSBmb2xsb3dpbmcgdGhpbmdzOgotCi0gLSBlZmZpY2llbnQgbmVnb3RpYXRpb24gYm90aCB1cCBhbmQgZG93bnN0cmVhbQotIC0gZWZmaWNpZW50IGJ1ZmZlciBhbGxvYyBhbmQgb3RoZXIgYnVmZmVyIG1hbmFnZW1lbnQKLQotU29tZSB0cmFuc2Zvcm0gZWxlbWVudHMgY2FuIG9wZXJhdGUgaW4gZGlmZmVyZW50IG1vZGVzOgotCi0gLSBwYXNzdGhyb3VnaCAobm8gY2hhbmdlcyBhcmUgZG9uZSBvbiB0aGUgaW5wdXQgYnVmZmVycykKLSAtIGluLXBsYWNlIChjaGFuZ2VzIG1hZGUgZGlyZWN0bHkgdG8gdGhlIGluY29taW5nIGJ1ZmZlcnMgd2l0aG91dCByZXF1aXJpbmcgYQotICAgY29weSBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb24pCi0gLSBtZXRhZGF0YSBjaGFuZ2VzIG9ubHkgCi0gCi1EZXBlbmRpbmcgb24gdGhlIG1vZGUgb2Ygb3BlcmF0aW9uIHRoZSBidWZmZXIgYWxsb2NhdGlvbiBzdHJhdGVneSBtaWdodCBjaGFuZ2UuCi0KLVRoZSB0cmFuc2Zvcm0gZWxlbWVudCBzaG91bGQgYXQgYW55IHBvaW50IGJlIGFibGUgdG8gcmVuZWdvdGlhdGUgc2luayBhbmQgc3JjCi1jYXBzIGFzIHdlbGwgYXMgY2hhbmdlIHRoZSBvcGVyYXRpb24gbW9kZS4KLQotSW4gYWRkaXRpb24sIHRoZSB0cmFuc2Zvcm0gZWxlbWVudCB3aWxsIHR5cGljYWxseSB0YWtlIGNhcmUgb2YgdGhlIGZvbGxvd2luZwotdGhpbmdzIGFzIHdlbGw6Ci0KLSAtIGZsdXNoaW5nLCBzZWVraW5nCi0gLSBzdGF0ZSBjaGFuZ2VzCi0gLSB0aW1lc3RhbXBpbmcsIHRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgYnkgY29weWluZyB0aGUgaW5wdXQgdGltZXN0YW1wcyB0byB0aGUKLSAgIG91dHB1dCBidWZmZXJzIGJ1dCBzdWJjbGFzc2VzIHNob3VsZCBiZSBhYmxlIHRvIG92ZXJyaWRlIHRoaXMuCi0gLSBRb1MsIGF2b2lkaW5nIGNhbGxzIHRvIHRoZSBzdWJjbGFzcyB0cmFuc2Zvcm0gZnVuY3Rpb24KLSAtIGhhbmRsZSBzY2hlZHVsaW5nIGlzc3VlcyBzdWNoIGFzIHB1c2ggYW5kIHB1bGwgYmFzZWQgb3BlcmF0aW9uLgotCi1JbiB0aGUgbmV4dCBzZWN0aW9ucywgd2Ugd2lsbCBkZXNjcmliZSB0aGUgYmVoYXZpb3VyIG9mIHRoZSB0cmFuc2Zvcm0gZWxlbWVudCBpbgotZWFjaCBvZiB0aGUgYWJvdmUgdXNlIGNhc2VzLiBXZSBmb2N1cyBtb3N0bHkgb24gdGhlIGJ1ZmZlciBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMKLWFuZCBjYXBzIG5lZ290aWF0aW9uLgotCi1Qcm9jZXNzaW5nCi1+fn5+fn5+fn5+Ci0KLUEgdHJhbnNmb3JtIGhhcyAyIG1haW4gcHJvY2Vzc2luZyBmdW5jdGlvbnM6Ci0KLSAtIHRyYW5zZm9ybSgpOgotCi0gICBUcmFuc2Zvcm0gdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gVGhlIG91dHB1dCBidWZmZXIgaXMKLSAgIGd1YXJhbnRlZWQgdG8gYmUgd3JpdGFibGUgYW5kIGRpZmZlcmVudCBmcm9tIHRoZSBpbnB1dCBidWZmZXIuCi0KLSAtIHRyYW5zZm9ybV9pcCgpOgotCi0gICBUcmFuc2Zvcm0gdGhlIGlucHV0IGJ1ZmZlciBpbi1wbGFjZS4gVGhlIGlucHV0IGJ1ZmZlciBpcyB3cml0YWJsZSBhbmQgb2YKLSAgIGJpZ2dlciBvciBlcXVhbCBzaXplIHRoYW4gdGhlIG91dHB1dCBidWZmZXIuIAotCi1BIHRyYW5zZm9ybSBjYW4gb3BlcmF0ZSBpbiB0aGUgZm9sbG93aW5nIG1vZGVzOgotCi0gLSBwYXNzdGhyb3VnaDoKLQotICAgVGhlIGVsZW1lbnQgd2lsbCBub3QgbWFrZSBjaGFuZ2VzIHRvIHRoZSBidWZmZXJzLCBidWZmZXJzIGFyZSBwdXNoZWQgc3RyYWlnaHQKLSAgIHRocm91Z2gsIGNhcHMgb24gYm90aCBzaWRlcyBuZWVkIHRvIGJlIHRoZSBzYW1lLiBUaGUgZWxlbWVudCBjYW4gb3B0aW9uYWxseQotICAgaW1wbGVtZW50IGEgdHJhbnNmb3JtX2lwKCkgZnVuY3Rpb24gdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGRhdGEsIHRoZSBidWZmZXIKLSAgIGRvZXMgbm90IGhhdmUgdG8gYmUgd3JpdGFibGUuCi0KLSAtIGluLXBsYWNlOgotCi0gICBDaGFuZ2VzIGNhbiBiZSBtYWRlIHRvIHRoZSBpbnB1dCBidWZmZXIgZGlyZWN0bHkgdG8gb2J0YWluIHRoZSBvdXRwdXQgYnVmZmVyLgotICAgVGhlIHRyYW5zZm9ybSBtdXN0IGltcGxlbWVudCBhIHRyYW5zZm9ybV9pcCgpIGZ1bmN0aW9uLgotCi0gLSBjb3B5LXRyYW5zZm9ybQotCi0gICBUaGUgdHJhbnNmb3JtIGlzIHBlcmZvcm1lZCBieSBjb3B5aW5nIGFuZCB0cmFuc2Zvcm1pbmcgdGhlIGlucHV0IGJ1ZmZlciB0byBhCi0gICBuZXcgb3V0cHV0IGJ1ZmZlci4gVGhlIHRyYW5zZm9ybSBtdXN0IGltcGxlbWVudCBhIHRyYW5zZm9ybSgpIGZ1bmN0aW9uLgotCi1XaGVuIG5vIHRyYW5zZm9ybSgpIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBvbmx5IGluLXBsYWNlIGFuZCBwYXNzdGhyb3VnaAotb3BlcmF0aW9uIGlzIGFsbG93ZWQsIHRoaXMgbWVhbnMgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGNhcHMgbXVzdCBiZSBlcXVhbAotb3IgdGhhdCB0aGUgc291cmNlIGJ1ZmZlciBzaXplIGlzIGJpZ2dlciBvciBlcXVhbCB0aGFuIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCi0KLVdoZW4gbm8gdHJhbnNmb3JtX2lwKCkgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIG9ubHkgcGFzc3Rocm91Z2ggYW5kCi1jb3B5LXRyYW5zZm9ybXMgYXJlIHN1cHBvcnRlZC4gUHJvdmlkaW5nIHRoaXMgZnVuY3Rpb24gaXMgYW4gb3B0aW1pc2F0aW9uIHRoYXQKLWNhbiBhdm9pZCBhIGJ1ZmZlciBjb3B5LgotCi1XaGVuIG5vIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQsIHdlIGNhbiBvbmx5IHByb2Nlc3MgaW4gcGFzc3Rocm91Z2ggbW9kZS4KLQotCi1OZWdvdGlhdGlvbgotfn5+fn5+fn5+fn4KLQotVHlwaWNhbCAocmUpbmVnb3RpYXRpb24gb2YgdGhlIHRyYW5zZm9ybSBlbGVtZW50IGluIHB1c2ggbW9kZSBhbHdheXMgZ29lcyBmcm9tCi1zaW5rIHRvIHNyYywgdGhpcyBtZWFucyB0cmlnZ2VycyB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOgotIAotICAtIHRoZSBzaW5rcGFkIHJlY2VpdmVzIGEgbmV3IGNhcHMgZXZlbnQuCi0gIC0gdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiBmaWd1cmVzIG91dCB3aGF0IGl0IGNhbiBjb252ZXJ0IHRoZXNlIGNhcHMgdG8uCi0gIC0gdHJ5IHRvIHNlZSBpZiB3ZSBjYW4gY29uZmlndXJlIHRoZSBjYXBzIHVubW9kaWZpZWQgb24gdGhlIHBlZXIuIFdlIG5lZWQgdG8KLSAgICBkbyB0aGlzIGJlY2F1c2Ugd2UgcHJlZmVyIHRvIG5vdCBkbyBhbnl0aGluZy4KLSAgLSB0aGUgdHJhbnNmb3JtIGNvbmZpZ3VyZXMgaXRzZWxmIHRvIHRyYW5zZm9ybSBmcm9tIHRoZSBuZXcgc2luayBjYXBzIHRvIHRoZQotICAgIHRhcmdldCBzcmMgY2FwcwotICAtIHRoZSB0cmFuc2Zvcm0gcHJvY2Vzc2VzIGFuZCBzZXRzIHRoZSBvdXRwdXQgY2FwcyBvbiB0aGUgc3JjIHBhZAotCi1XZSBjYWxsIHRoaXMgZG93bnN0cmVhbSBuZWdvdGlhdGlvbiAoRE4pIGFuZCBpdCBnb2VzIHJvdWdobHkgbGlrZSB0aGlzOgotCi0gICAgICAgICAgICAgICBzaW5rcGFkICAgICAgICAgICAgICB0cmFuc2Zvcm0gICAgICAgICAgICAgICBzcmNwYWQKLSAgICAgQ0FQUyBldmVudCAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAtLS0tLS0tLS0tLS0+fCAgZmluZF90cmFuc2Zvcm0oKSAgfCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLT58ICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgQ0FQUyBldmVudCAgICAgfAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICB8IDxjb25maWd1cmUgY2Fwcz4gPC18ICAgICAgICAgICAgICAgICAgICAgIHwKLQotCi1UaGVzZSBzdGVwcyBjb25maWd1cmUgdGhlIGVsZW1lbnQgZm9yIGEgdHJhbnNmb3JtYXRpb24gZnJvbSB0aGUgaW5wdXQgY2FwcyB0bwotdGhlIG91dHB1dCBjYXBzLgotCi1UaGUgdHJhbnNmb3JtIGhhcyAzIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG5lZ290aWF0aW9uOgotCi0gICAtIHRyYW5zZm9ybV9jYXBzKCk6Ci0gICAgIAotICAgICBUcmFuc2Zvcm0gdGhlIGNhcHMgb24gYSBjZXJ0YWluIHBhZCB0byBhbGwgdGhlIHBvc3NpYmxlIHN1cHBvcnRlZCBjYXBzIG9uCi0gICAgIHRoZSBvdGhlciBwYWQuIFRoZSBpbnB1dCBjYXBzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGEgc2ltcGxlIGNhcHMgd2l0aCBqdXN0Ci0gICAgIG9uZSBzdHJ1Y3R1cmUuIFRoZSBjYXBzIGRvIG5vdCBoYXZlIHRvIGJlIGZpeGVkLgotICAgICAgCi0gICAtIGZpeGF0ZV9jYXBzKCk6Ci0KLSAgICAgR2l2ZW4gYSBjYXBzIG9uIG9uZSBwYWQsIGZpeGF0ZSB0aGUgY2FwcyBvbiB0aGUgb3RoZXIgcGFkLiBUaGUgdGFyZ2V0IGNhcHMKLSAgICAgYXJlIHdyaXRhYmxlLgotCi0gICAtIHNldF9jYXBzKCk6Ci0KLSAgICAgQ29uZmlndXJlIHRoZSB0cmFuc2Zvcm0gZm9yIGEgdHJhbnNmb3JtYXRpb24gYmV0d2VlbiBzcmMgY2FwcyBhbmQgZGVzdAotICAgICBjYXBzLiBCb3RoIGNhcHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgZml4ZWQgY2Fwcy4KLQotSWYgbm8gdHJhbnNmb3JtX2NhcHMoKSBpcyBkZWZpbmVkLCB3ZSBjYW4gb25seSBwZXJmb3JtIHRoZSBpZGVudGl0eSB0cmFuc2Zvcm0sCi1ieSBkZWZhdWx0LiAKLQotSWYgbm8gc2V0X2NhcHMoKSBpcyBkZWZpbmVkLCB3ZSBkb24ndCBjYXJlIGFib3V0IGNhcHMuIEluIHRoYXQgY2FzZSB3ZSBhbHNvCi1hc3N1bWUgbm90aGluZyBpcyBnb2luZyB0byB3cml0ZSB0byB0aGUgYnVmZmVyIGFuZCB3ZSBkb24ndCBlbmZvcmNlIGEgd3JpdGFibGUKLWJ1ZmZlciBmb3IgdGhlIHRyYW5zZm9ybV9pcCBmdW5jdGlvbiwgd2hlbiBwcmVzZW50LgotCi1PbmUgY29tbW9uIGZ1bmN0aW9uIHRoYXQgd2UgbmVlZCBmb3IgdGhlIHRyYW5zZm9ybSBlbGVtZW50IGlzIHRvIGZpbmQgdGhlIGJlc3QKLXRyYW5zZm9ybSBmcm9tIG9uZSBmb3JtYXQgKHNyYykgdG8gYW5vdGhlciAoZGVzdCkuIFNvbWUgcmVxdWlyZW1lbnRzIG9mIHRoaXMKLWZ1bmN0aW9uIGFyZToKLQotICAgLSBoYXMgYSBmaXhlZCBzcmMgY2FwcwotICAgLSBmaW5kcyBhIGZpeGVkIGRlc3QgY2FwcyB0aGF0IHRoZSB0cmFuc2Zvcm0gZWxlbWVudCBjYW4gdHJhbnNmb3JtIHRvCi0gICAtIHRoZSBkZXN0IGNhcHMgYXJlIGNvbXBhdGlibGUgYW5kIGNhbiBiZSBhY2NlcHRlZCBieSBwZWVyIGVsZW1lbnRzCi0gICAtIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcHJlZmVycyB0byBtYWtlIHNyYyBjYXBzID09IGRlc3QgY2FwcwotICAgLSB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGNhbiBvcHRpb25hbGx5IGZpeGF0ZSBkZXN0IGNhcHMuCi0KLVRoZSBmaW5kX3RyYW5zZm9ybSgpIGZ1bmN0aW9uIGdvZXMgbGlrZSB0aGlzOgotCi0gICAtIHN0YXJ0IGZyb20gc3JjIGFwcywgdGhlc2UgY2FwcyBhcmUgZml4ZWQuCi0gICAtIGNoZWNrIGlmIHRoZSBjYXBzIGFyZSBhY2NlcHRhYmxlIGZvciB1cyBhcyBzcmMgY2Fwcy4gVGhpcyBpcyB1c3VhbGx5Ci0gICAgIGVuZm9yY2VkIGJ5IHRoZSBwYWR0ZW1wbGF0ZSBvZiB0aGUgZWxlbWVudC4KLSAgIC0gY2FsY3VsYXRlIGFsbCBjYXBzIHdlIGNhbiB0cmFuc2Zvcm0gdG9vIHdpdGggdHJhbnNmb3JtX2NhcHMoKQotICAgLSBpZiB0aGUgb3JpZ2luYWwgY2FwcyBhcmUgYSBzdWJzZXQgb2YgdGhlIHRyYW5zZm9ybXMsIHRyeSB0byBzZWUgaWYgdGhlCi0gICAgIHRoZSBjYXBzIGFyZSBhY2NlcHRhYmxlIGZvciB0aGUgcGVlci4gSWYgdGhpcyBpcyBwb3NzaWJsZSwgd2UgY2FuCi0gICAgIHBlcmZvcm0gcGFzc3Rocm91Z2ggYW5kIG1ha2Ugc3JjID09IGRlc3QuICBUaGlzIGlzIHBlcmZvcm1lZCBieSBzaW1wbHkKLSAgICAgY2FsbGluZyBnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMoKS4KLSAgIC0gaWYgdGhlIGNhcHMgYXJlIG5vdCBmaXhlZCwgd2UgbmVlZCB0byBmaXhhdGUgaXQsIHN0YXJ0IGJ5IHRha2luZyB0aGUgcGVlcgotICAgICBjYXBzIGFuZCBpbnRlcnNlY3Qgd2l0aCB0aGVtLgotICAgLSBmb3IgZWFjaCBvZiB0aGUgdHJhbnNmb3JtZWQgY2FwcyByZXRyaWV2ZWQgd2l0aCB0cmFuc2Zvcm1fY2FwcygpOgotICAgICAgLSB0cnkgdG8gZml4YXRlIHRoZSBjYXBzIHdpdGggZml4YXRlX2NhcHMoKQotICAgICAgLSBpZiB0aGUgY2FwcyBhcmUgZml4YXRlZCwgY2hlY2sgaWYgdGhlIHBlZXIgYWNjZXB0cyB0aGVtIHdpdGgKLQlfcGVlcl9hY2NlcHRfY2FwcygpLCBpZiB0aGUgcGVlciBhY2NlcHRzLCB3ZSBoYXZlIGZvdW5kIGEgZGVzdCBjYXBzLgotICAgLSBpZiB3ZSBydW4gb3V0IG9mIGNhcHMsIHdlIGZhaWwgdG8gZmluZCBhIHRyYW5zZm9ybS4KLSAgIC0gaWYgd2UgZm91bmQgYSBkZXN0aW5hdGlvbiBjYXBzLCBjb25maWd1cmUgdGhlIHRyYW5zZm9ybSB3aXRoIHNldF9jYXBzKCkuCi0KLUFmdGVyIHRoaXMgbmVnb3RpYXRpb24gcHJvY2VzcywgdGhlIHRyYW5zZm9ybSBlbGVtZW50IGlzIHVzdWFsbHkgaW4gYSBzdGVhZHkKLXN0YXRlLiBXZSBjYW4gaWRlbnRpZnkgdGhlc2Ugc3RlYWR5IHN0YXRlczoKLQotICAtIHNyYyBhbmQgc2luayBwYWRzIGJvdGggaGF2ZSB0aGUgc2FtZSBjYXBzLiBOb3RlIHRoYXQgd2hlbiB0aGUgY2FwcyBhcmUgZXF1YWwKLSAgICBvbiBib3RoIHBhZHMsIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYXV0b21hdGljYWxseSBoYXZlIHRoZSBzYW1lIHNpemUuCi0gICAgVGhlIGVsZW1lbnQgY2FuIG9wZXJhdGUgb24gdGhlIGJ1ZmZlcnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOiAoU2FtZSBjYXBzLCBTQykKLQotICAgICAgLSBwYXNzdGhyb3VnaDogYnVmZmVycyBhcmUgaW5zcGVjdGVkIGJ1dCBubyBtZXRhZGF0YSBvciBidWZmZXIgZGF0YQotCWlzIGNoYW5nZWQuIFRoZSBpbnB1dCBidWZmZXJzIGRvbid0IG5lZWQgdG8gYmUgd3JpdGFibGUuIFRoZSBpbnB1dAotCWJ1ZmZlciBpcyBzaW1wbHkgcHVzaGVkIG91dCBhZ2FpbiB3aXRob3V0IG1vZGlmaWNhdGlvbnMuIChTQ1ApCi0KLSAgICAgICAgICAgICAgIHNpbmtwYWQgICAgICAgICAgICAgIHRyYW5zZm9ybSAgICAgICAgICAgICAgIHNyY3BhZAotICAgICAgIGNoYWluKCkgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIC0tLS0tLS0tLS0tLT58ICAgaGFuZGxlX2J1ZmZlcigpICB8ICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgICBwYWRfcHVzaCgpICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKLQotICAgICAgLSBpbi1wbGFjZTogYnVmZmVycyBhcmUgbW9kaWZpZWQgaW4tcGxhY2UsIHRoaXMgbWVhbnMgdGhhdCB0aGUgaW5wdXQKLQlidWZmZXIgaXMgbW9kaWZpZWQgdG8gcHJvZHVjZSBhIG5ldyBvdXRwdXQgYnVmZmVyLiBUaGlzIHJlcXVpcmVzIHRoZQotCWlucHV0IGJ1ZmZlciB0byBiZSB3cml0YWJsZS4gSWYgdGhlIGlucHV0IGJ1ZmZlciBpcyBub3Qgd3JpdGFibGUsIGEgbmV3Ci0JYnVmZmVyIGhhcyB0byBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgYnVmZmVycG9vbC4gKFNDSSkKLQotICAgICAgICAgICAgICAgc2lua3BhZCAgICAgICAgICAgICAgdHJhbnNmb3JtICAgICAgICAgICAgICAgc3JjcGFkCi0gICAgICAgY2hhaW4oKSAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgLS0tLS0tLS0tLS0tPnwgICBoYW5kbGVfYnVmZmVyKCkgIHwgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgWyF3cml0YWJsZV0gICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICBhbGxvYyBidWZmZXIgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIC4tfCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICA8dHJhbnNmb3JtX2lwPiAgfCB8ICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAnPnwgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgIHBhZF9wdXNoKCkgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfAotCi0gICAgICAtIGNvcHkgdHJhbnNmb3JtOiBhIG5ldyBvdXRwdXQgYnVmZmVyIGlzIGFsbG9jYXRlIGZyb20gdGhlIGJ1ZmZlcnBvb2wKLSAgICAgICAgYW5kIGRhdGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG91dHB1dCBidWZmZXIuCi0gICAgICAgIChTQ0MpCi0KLSAgICAgICAgICAgICAgIHNpbmtwYWQgICAgICAgICAgICAgIHRyYW5zZm9ybSAgICAgICAgICAgICAgIHNyY3BhZAotICAgICAgIGNoYWluKCkgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIC0tLS0tLS0tLS0tLT58ICAgaGFuZGxlX2J1ZmZlcigpICB8ICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgYWxsb2MgYnVmZmVyICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgLi18ICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgICAgIDx0cmFuc2Zvcm0+ICB8IHwgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICc+fCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgcGFkX3B1c2goKSAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8Ci0KLSAgLSBzcmMgYW5kIHNpbmsgcGFkcyBoYXZlIGRpZmZlcmVudCBjYXBzLiBUaGUgZWxlbWVudCBjYW4gb3BlcmF0ZSBvbiB0aGUKLSAgICBidWZmZXJzIGluIHRoZSBmb2xsb3dpbmcgd2F5OiAoRGlmZmVyZW50IENhcHMsIERDKQotCi0gICAgICAtIGluLXBsYWNlOiBpbnB1dCBidWZmZXJzIGFyZSBtb2RpZmllZCBpbi1wbGFjZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbnB1dAotCWJ1ZmZlciBoYXMgYSBzaXplIHRoYXQgaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHRoZSBvdXRwdXQgc2l6ZS4gVGhlIGlucHV0Ci0JYnVmZmVyIHdpbGwgYmUgcmVzaXplZCB0byB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlci4gSWYgdGhlIGlucHV0Ci0JYnVmZmVyIGlzIG5vdCB3cml0YWJsZSBvciB0aGUgb3V0cHV0IHNpemUgaXMgYmlnZ2VyIHRoYW4gdGhlIGlucHV0IHNpemUsCi0Jd2UgbmVlZCB0byBwYWQtYWxsb2MgYSBuZXcgYnVmZmVyLiAoRENJKQotCi0gICAgICAgICAgICAgICBzaW5rcGFkICAgICAgICAgICAgICB0cmFuc2Zvcm0gICAgICAgICAgICAgICBzcmNwYWQKLSAgICAgICBjaGFpbigpICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAtLS0tLS0tLS0tLS0+fCAgIGhhbmRsZV9idWZmZXIoKSAgfCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLT58ICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgWyF3cml0YWJsZSB8fCAhc2l6ZV0gfAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgYWxsb2MgYnVmZmVyICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgLi18ICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgIDx0cmFuc2Zvcm1faXA+ICB8IHwgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICc+fCAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgcGFkX3B1c2goKSAgICAgIHwKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8Ci0KLSAgICAgIC0gY29weSB0cmFuc2Zvcm06IGEgbmV3IG91dHB1dCBidWZmZXIgaXMgYWxsb2NhdGVkIGFuZCB0aGUgZGF0YSBmcm9tIHRoZQotCWlucHV0IGJ1ZmZlciBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLiBUaGUgZmxvdyBpcyBleGFjdGx5Ci0JdGhlIHNhbWUgYXMgdGhlIGNhc2Ugd2l0aCB0aGUgc2FtZS1jYXBzIG5lZ290aWF0aW9uLiAoRENDKQotIAotV2UgY2FuIGltbWVkaWF0ZWx5IG9ic2VydmUgdGhhdCB0aGUgY29weSB0cmFuc2Zvcm0gc3RhdGVzIHdpbGwgbmVlZCB0bwotYWxsb2NhdGUgYSBuZXcgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlcnBvb2wuIFdoZW4gdGhlIHRyYW5zZm9ybSBlbGVtZW50IGlzCi1yZWNlaXZpbmcgYSBub24td3JpdGFibGUgYnVmZmVyIGluIHRoZSBpbi1wbGFjZSBzdGF0ZSwgaXQgd2lsbCBhbHNvCi1uZWVkIHRvIHBlcmZvcm0gYW4gYWxsb2NhdGlvbi4gVGhlcmUgaXMgbm8gcmVhc29uIHdoeSB0aGUgcGFzc3Rocm91Z2ggc3RhdGUgd291bGQKLXBlcmZvcm0gYW4gYWxsb2NhdGlvbi4KLQotVGhpcyBzdGVhZHkgc3RhdGUgY2hhbmdlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgb2NjdXI6Ci0KLSAgLSB0aGUgc2luayBwYWQgcmVjZWl2ZXMgbmV3IGNhcHMsIHRoaXMgdHJpZ2dlcnMgdGhlIGFib3ZlIGRvd25zdHJlYW0KLSAgICByZW5lZ290YXRpb24gcHJvY2Vzcywgc2VlIGFib3ZlIGZvciB0aGUgZmxvdy4KLSAgLSB0aGUgdHJhbnNmb3JtIGVsZW1lbnQgd2FudHMgdG8gcmVuZWdvdGlhdGUgKGJlY2F1c2Ugb2YgY2hhbmdlZCBwcm9wZXJ0aWVzLAotICAgIGZvciBleGFtcGxlKS4gVGhpcyBlc3NlbnRpYWxseSBjbGVhcnMgdGhlIGN1cnJlbnQgc3RlYWR5IHN0YXRlIGFuZAotICAgIHRyaWdnZXJzIHRoZSBkb3duc3RyZWFtIGFuZCB1cHN0cmVhbSByZW5lZ290aWF0aW9uIHByb2Nlc3MuIFRoaXMgc2l0dWF0aW9uCi0gICAgYWxzbyBoYXBwZW5zIHdoZW4gYSBSRUNPTkZJR1VSRSBldmVudCB3YXMgcmVjZWl2ZWQgb24gdGhlIHRyYW5zZm9ybSBzcmNwYWQuCi0KLQotQWxsb2NhdGlvbgotfn5+fn5+fn5+fgotCi1BZnRlciB0aGUgdHJhbnNmb3JtIGVsZW1lbnQgaXMgY29uZmlndXJlZCB3aXRoIGNhcHMsIGEgYnVmZmVycG9vbCBuZWVkcyB0byBiZQotbmVnb3RpYXRlZCB0byBwZXJmb3JtIHRoZSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMuIFdlIGhhdmUgMiBjYXNlczoKLQotICAtIFRoZSBlbGVtZW50IGlzIG9wZXJhdGluZyBpbiBwYXNzdGhyb3VnaCB3ZSBkb24ndCBuZWVkIHRvIGFsbG9jYXRlIGEgYnVmZmVyCi0gICAgaW4gdGhlIHRyYW5zZm9ybSBlbGVtZW50LgotICAtIFRoZSBlbGVtZW50IGlzIG5vdCBvcGVyYXRpbmcgaW4gcGFzc3Rocm91Z2ggYW5kIG5lZWRzIHRvIGFsbG9jYXRpb24gYW4KLSAgICBvdXRwdXQgYnVmZmVyLgotCi1JbiBjYXNlIDEsIHdlIGRvbid0IHF1ZXJ5IGFuZCBjb25maWd1cmUgYSBwb29sLiBXZSBsZXQgdXBzdHJlYW0gZGVjaWRlIGlmIGl0Ci13YW50cyB0byB1c2UgYSBidWZmZXJwb29sIGFuZCB0aGVuIHdlIHdpbGwgcHJveHkgdGhlIGJ1ZmZlcnBvb2wgZnJvbSBkb3duc3RyZWFtCi10byB1cHN0cmVhbS4KLQotSW4gY2FzZSAyLCB3ZSBxdWVyeSBhbmQgc2V0IGEgYnVmZmVycG9vbCBvbiB0aGUgc3JjcGFkIHRoYXQgd2lsbCBiZSB1c2VkIGZvcgotZG9pbmcgdGhlIGFsbG9jYXRpb25zLgotCi1JbiBvcmRlciB0byBwZXJmb3JtIGFsbG9jYXRpb24sIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHNpemUgb2YgdGhlCi1vdXRwdXQgYnVmZmVyIGFmdGVyIHRoZSB0cmFuc2Zvcm0uICBXZSBuZWVkIGFkZGl0aW9uYWwgZnVuY3Rpb24gdG8KLXJldHJpZXZlIHRoZSBzaXplLiBUaGVyZSBhcmUgdHdvIGZ1bmN0aW9uczoKLQotICAtIHRyYW5zZm9ybV9zaXplKCkKLSAgICAKLSAgICBHaXZlbiBhIGNhcHMgYW5kIGEgc2l6ZSBvbiBvbmUgcGFkLCBhbmQgYSBjYXBzIG9uIHRoZSBvdGhlciBwYWQsIGNhbGN1bGF0ZQotICAgIHRoZSBzaXplIG9mIHRoZSBvdGhlciBidWZmZXIuIFRoaXMgZnVuY3Rpb24gaXMgYWJsZSB0byBwZXJmb3JtIGFsbCBzaXplCi0gICAgdHJhbnNmb3JtcyBhbmQgaXMgdGhlIHByZWZlcnJlZCBtZXRob2Qgb2YgdHJhbnNmb3JtaW5nIGEgc2l6ZS4KLQotICAtIGdldF91bml0X3NpemUoKQotCi0gICAgV2hlbiB0aGUgaW5wdXQgc2l6ZSBhbmQgb3V0cHV0IHNpemUgYXJlIGFsd2F5cyBhIG11bHRpcGxlIG9mIGVhY2ggb3RoZXIKLSAgICAoYXVkaW8gY29udmVyc2lvbiwgLi4pIHdlIGNhbiBkZWZpbmUgYSBtb3JlIHNpbXBsZSBnZXRfdW5pdF9zaXplKCkgZnVuY3Rpb24uCi0gICAgVGhlIHRyYW5zZm9ybSB3aWxsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgc2FtZSBhbW91bnQgb2YgdW5pdHMgaW4gdGhlCi0gICAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBidWZmZXJzLgotCi0gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoZSBtYXBwaW5nIGJldHdlZW4gY2FwcyBhbmQgc2l6ZSBpcyBrZXB0IGluIGEgY2FjaGUuCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtZXZlbnRzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiNDFmOS4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWV2ZW50cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotRXZlbnRzCi0tLS0tLS0KLQotRXZlbnRzIGFyZSBvYmplY3RzIHBhc3NlZCBhcm91bmQgaW4gcGFyYWxsZWwgdG8gdGhlIGJ1ZmZlciBkYXRhZmxvdyB0bwotbm90aWZ5IGVsZW1lbnRzIG9mIHZhcmlvdXMgZXZlbnRzLgotCi1FdmVudHMgYXJlIHJlY2VpdmVkIG9uIHBhZHMgdXNpbmcgdGhlIGV2ZW50IGZ1bmN0aW9uLiBTb21lIGV2ZW50cyBzaG91bGQKLWJlIGludGVybGVhdmVkIHdpdGggdGhlIGRhdGEgc3RyZWFtIHNvIHRoZXkgcmVxdWlyZSB0YWtpbmcgdGhlIFNUUkVBTV9MT0NLLAotb3RoZXJzIGRvbid0LgotCi1EaWZmZXJlbnQgdHlwZXMgb2YgZXZlbnRzIGV4aXN0IHRvIGltcGxlbWVudCB2YXJpb3VzIGZ1bmN0aW9uYWxpdGllcy4KLQotICBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6ICAgZGF0YSBpcyB0byBiZSBkaXNjYXJkZWQKLSAgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6ICAgIGRhdGEgaXMgYWxsb3dlZCBhZ2FpbgotICBHU1RfRVZFTlRfQ0FQUzogICAgICAgICAgRm9ybWF0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb2xsb3dpbmcgYnVmZmVycwotICBHU1RfRVZFTlRfU0VHTUVOVDogICAgICAgVGltaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZm9sbG93aW5nIGJ1ZmZlcnMKLSAgR1NUX0VWRU5UX1RBRzogICAgICAgICAgIFN0cmVhbSBtZXRhZGF0YS4KLSAgR1NUX0VWRU5UX0JVRkZFUlNJWkU6ICAgIEJ1ZmZlciBzaXplIHJlcXVpcmVtZW50cwotICBHU1RfRVZFTlRfU0lOS19NRVNTQUdFOiAgQW4gZXZlbnQgdHVybmVkIGludG8gYSBtZXNzYWdlIGJ5IHNpbmtzCi0gIEdTVF9FVkVOVF9FT1M6IAkgICBubyBtb3JlIGRhdGEgaXMgdG8gYmUgZXhwZWN0ZWQgb24gYSBwYWQuCi0gIEdTVF9FVkVOVF9RT1M6ICAgICAgICAgICBBIG5vdGlmaWNhdGlvbiBvZiB0aGUgcXVhbGl0eSBvZiBzZXJ2aWNlIG9mIHRoZSBzdHJlYW0KLSAgR1NUX0VWRU5UX1NFRUs6ICAgICAgICAgIEEgc2VlayBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIGEgbmV3IHBvc2l0aW9uIGluIHRoZSBzdHJlYW0KLSAgR1NUX0VWRU5UX05BVklHQVRJT046ICAgIEEgbmF2aWdhdGlvbiBldmVudC4KLSAgR1NUX0VWRU5UX0xBVEVOQ1k6ICAgICAgIENvbmZpZ3VyZSB0aGUgbGF0ZW5jeSBpbiBhIHBpcGVsaW5lCi0gIEdTVF9FVkVOVF9TVEVQOiAgICAgICAgICBTdGVwcGluZyBldmVudAotICBHU1RfRVZFTlRfUkVDT05GSUdVUkU6ICAgc3RyZWFtIHJlY29uZmlndXJlIGV2ZW50Ci0KLSAgKiBHU1RfRVZFTlRfRFJBSU46ICAgICAgIFBsYXkgYWxsIGRhdGEgZG93bnN0cmVhbSBiZWZvcmUgcmV0dXJuaW5nLgotCi0qIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHVuZGVyIGludmVzdGlnYXRpb24sIG1pZ2h0IGJlIG5lZWRlZCB0byBkbyBzdGlsbCBmcmFtZXMKLSAgaW4gRFZELgotCi0KLXNyYyBwYWRzCi0tLS0tLS0tLQotCi1BIGdzdF9wYWRfcHVzaF9ldmVudCgpIG9uIGEgc3JjcGFkIHdpbGwgZmlyc3Qgc3RvcmUgdGhlIHN0aWNreSBldmVudCBpbiB0aGUKLXN0aWNreSBhcnJheSBiZWZvcmUgc2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBlZXIgcGFkLiBJZiB0aGVyZSBpcyBubyBwZWVyIHBhZAotYW5kIHRoZSBldmVudCB3YXMgbm90IHN0b3JlZCBpbiB0aGUgc3RpY2t5IGFycmF5LCBGQUxTRSBpcyByZXR1cm5lZC4KLQotRmx1c2hpbmcgcGFkcyB3aWxsIHJlZnVzZSB0aGUgZXZlbnRzIGFuZCB3aWxsIG5vdCBzdG9yZSB0aGUgc3RpY2t5IGV2ZW50cy4KLQotCi1zaW5rIHBhZHMKLS0tLS0tLS0tLQotCi1BIGdzdF9wYWRfc2VuZF9ldmVudCgpIG9uIGEgc2lua3BhZCB3aWxsIGNhbGwgdGhlIGV2ZW50IGZ1bmN0aW9uIG9uIHRoZSBwYWQuIElmCi10aGUgZXZlbnQgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzLCB0aGUgc3RpY2t5IGV2ZW50IGlzIHN0b3JlZCBpbiB0aGUgc3RpY2t5Ci1ldmVudCBhcnJheSBhbmQgdGhlIGV2ZW50IGlzIG1hcmtlZCBmb3IgdXBkYXRlLgotCi1XaGVuIHRoZSBwYWQgaXMgZmx1c2hpbmcsIHRoZSBfc2VuZF9ldmVudCgpIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UgaW1tZWRpYXRlbHkuCi0KLVdoZW4gdGhlIG5leHQgZGF0YSBpdGVtIGlzIHB1c2hlZCwgdGhlIHBlbmRpbmcgZXZlbnRzIGFyZSBwdXNoZWQgZmlyc3QuCi0KLVRoaXMgZW5zdXJlcyB0aGF0IHRoZSBldmVudCBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQgZm9yIGZsdXNoaW5nIHBhZHMgYW5kIHRoYXQKLXRoZSBzdGlja3kgYXJyYXkgb25seSBjb250YWlucyBldmVudHMgZm9yIHdoaWNoIHRoZSBldmVudCBmdW5jdGlvbiByZXR1cm5lZAotc3VjY2Vzcy4KLQotCi1wYWQgbGluawotLS0tLS0tLS0KLQotV2hlbiBsaW5raW5nIHBhZHMsIHRoZSBzcmNwYWQgc3RpY2t5IGV2ZW50cyBhcmUgbWFya2VkIGZvciB1cGRhdGUgd2hlbiB0aGV5IGFyZQotZGlmZmVyZW50IGZyb20gdGhlIHNpbmtwYWQgZXZlbnRzLiBUaGUgbmV4dCBidWZmZXIgcHVzaCB3aWxsIHB1c2ggdGhlIGV2ZW50cyB0bwotdGhlIHNpbmtwYWQuCi0KLQotRkxVU0hfU1RBUlQvU1RPUAotfn5+fn5+fn5+fn5+fn5+fgotCi1BIGZsdXNoIGV2ZW50IGlzIHNlbnQgYm90aCBkb3duc3RyZWFtIGFuZCB1cHN0cmVhbSB0byBjbGVhciBhbnkgcGVuZGluZyBkYXRhIAotZnJvbSB0aGUgcGlwZWxpbmUuIFRoaXMgbWlnaHQgYmUgbmVlZGVkIHRvIG1ha2UgdGhlIGdyYXBoIG1vcmUgcmVzcG9uc2l2ZSAKLXdoZW4gdGhlIG5vcm1hbCBkYXRhZmxvdyBnZXRzIGludGVycnVwdGVkIGJ5IGZvciBleGFtcGxlIGEgc2VlayBldmVudC4KLQotRmx1c2hpbmcgaGFwcGVucyBpbiB0d28gc3RhZ2VzLgotCi0gMSkgYSBzb3VyY2UgZWxlbWVudCBzZW5kcyB0aGUgRkxVU0hfU1RBUlQgZXZlbnQgdG8gdGhlIGRvd25zdHJlYW0gcGVlciBlbGVtZW50LgotICAgIFRoZSBkb3duc3RyZWFtIGVsZW1lbnQgc3RhcnRzIHJlamVjdGluZyBidWZmZXJzIGZyb20gdGhlIHVwc3RyZWFtIGVsZW1lbnRzLiBJdAotICAgIHNlbmRzIHRoZSBmbHVzaCBldmVudCBmdXJ0aGVyIGRvd25zdHJlYW0gYW5kIGRpc2NhcmRzIGFueSBidWZmZXJzIGl0IGlzIAotICAgIGhvbGRpbmcgYXMgd2VsbCBhcyByZXR1cm4gZnJvbSB0aGUgY2hhaW4gZnVuY3Rpb24gYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBhbGwgdXBzdHJlYW0gZWxlbWVudHMgZ2V0IHVuYmxvY2tlZC4KLSAgICBUaGlzIGV2ZW50IGlzIG5vdCBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgU1RSRUFNX0xPQ0sgYW5kIGNhbiBiZSBkb25lIGluIHRoZSAKLSAgICBhcHBsaWNhdGlvbiB0aHJlYWQuCi0KLSAyKSBhIHNvdXJjZSBlbGVtZW50IHNlbmRzIHRoZSBGTFVTSF9TVE9QIGV2ZW50IHRvIGluZGljYXRlCi0gICAgdGhhdCB0aGUgZG93bnN0cmVhbSBlbGVtZW50IGNhbiBhY2NlcHQgYnVmZmVycyBhZ2Fpbi4gVGhlIGRvd25zdHJlYW0gCi0gICAgZWxlbWVudCBzZW5kcyB0aGUgZmx1c2ggZXZlbnQgdG8gaXRzIHBlZXIgZWxlbWVudHMuIEFmdGVyIHRoaXMgc3RlcCBkYXRhZmxvdwotICAgIGNvbnRpbnVlcy4gVGhlIEZMVVNIX1NUT1AgY2FsbCBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgU1RSRUFNX0xPQ0sgc28gYW55Ci0gICAgZGF0YSB1c2VkIGJ5IHRoZSBjaGFpbiBmdW5jdGlvbiBjYW4gc2FmZWx5IGZyZWVkIGhlcmUgaWYgbmVlZGVkLiBBbnkgCi0gICAgcGVuZGluZyBFT1MgZXZlbnRzIHNob3VsZCBiZSBkaXNjYXJkZWQgdG9vLgotCi1BZnRlciB0aGUgZmx1c2ggY29tcGxldGVzIHRoZSBzZWNvbmQgc3RhZ2UsIGRhdGEgaXMgZmxvd2luZyBhZ2FpbiBpbiB0aGUgcGlwZWxpbmUKLWFuZCBhbGwgYnVmZmVycyBhcmUgbW9yZSByZWNlbnQgdGhhbiB0aG9zZSBiZWZvcmUgdGhlIGZsdXNoLgotCi1Gb3IgZWxlbWVudHMgdGhhdCB1c2UgdGhlIHB1bGxyYW5nZSBmdW5jdGlvbiwgdGhleSBzZW5kIGJvdGggZmx1c2ggZXZlbnRzIHRvCi10aGUgdXBzdHJlYW0gcGFkcyBpbiB0aGUgc2FtZSB3YXkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHB1bGxyYW5nZSBmdW5jdGlvbgotdW5sb2NrcyBhbmQgYW55IHBlbmRpbmcgYnVmZmVycyBhcmUgY2xlYXJlZCBpbiB0aGUgdXBzdHJlYW0gZWxlbWVudHMuCi0KLUEgRkxVU0hfU1RBUlQgbWF5IGluc3RydWN0IHRoZSBwaXBlbGluZSB0byBkaXN0cmlidXRlIGEgbmV3IGJhc2VfdGltZSB0bwotZWxlbWVudHMgc28gdGhhdCB0aGUgcnVubmluZ190aW1lIGlzIHJlc2V0IHRvIDAuIAotKHNlZSBwYXJ0LWNsb2Nrcy50eHQgYW5kIHBhcnQtc3luY2hyb25pc2F0aW9uLnR4dCkuCi0KLQotRU9TCi1+fn4KLQotVGhlIEVPUyBldmVudCBjYW4gb25seSBiZSBzZW50IG9uIGEgc2lua3BhZC4gSXQgaXMgdHlwaWNhbGx5IGVtaXR0ZWQgYnkgdGhlCi1zb3VyY2UgZWxlbWVudCB3aGVuIGl0IGhhcyBmaW5pc2hlZCBzZW5kaW5nIGRhdGEuIFRoaXMgZXZlbnQgaXMgbWFpbmx5IHNlbnQKLWluIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGJ1dCBjYW4gYWxzbyBiZSBzZW50IGZyb20gdGhlIGFwcGxpY2F0aW9uIHRocmVhZC4KLQotVGhlIGRvd25zdHJlYW0gZWxlbWVudCBzaG91bGQgZm9yd2FyZCB0aGUgRU9TIGV2ZW50IHRvIGl0cyBkb3duc3RyZWFtIHBlZXIKLWVsZW1lbnRzLiBUaGlzIHdheSB0aGUgZXZlbnQgd2lsbCBldmVudHVhbGx5IHJlYWNoIHRoZSBzaW5rcyB3aGljaCBzaG91bGQKLXRoZW4gcG9zdCBhbiBFT1MgbWVzc2FnZSBvbiB0aGUgYnVzIHdoZW4gaW4gUExBWUlORy4KLQotQW4gZWxlbWVudCBtaWdodCB3YW50IHRvIGZsdXNoIGl0cyBpbnRlcm5hbGx5IHF1ZXVlZCBkYXRhIGJlZm9yZSBmb3J3YXJkaW5nCi10aGUgRU9TIGV2ZW50IGRvd25zdHJlYW0uIFRoaXMgZmx1c2hpbmcgY2FuIGJlIGRvbmUgaW4gdGhlIHNhbWUgdGhyZWFkIGFzCi10aGUgb25lIGhhbmRsaW5nIHRoZSBFT1MgZXZlbnQuCi0KLUZvciBlbGVtZW50cyB3aXRoIG11bHRpcGxlIHNpbmsgcGFkcyBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byB3YWl0IGZvciBFT1Mgb24KLWFsbCB0aGUgcGFkcyBiZWZvcmUgZm9yd2FyZGluZyB0aGUgZXZlbnQuCi0KLVRoZSBFT1MgZXZlbnQgc2hvdWxkIGFsd2F5cyBiZSBpbnRlcmxlYXZlZCB3aXRoIHRoZSBkYXRhIGZsb3csIHRoZXJlZm9yZSB0aGUKLUdTdHJlYW1lciBjb3JlIHdpbGwgdGFrZSB0aGUgU1RSRUFNX0xPQ0suCi0KLVNvbWV0aW1lcyB0aGUgRU9TIGV2ZW50IGlzIGdlbmVyYXRlZCBieSBhbm90aGVyIGVsZW1lbnQgdGhhbiB0aGUgc291cmNlLCBmb3IgCi1leGFtcGxlIGEgZGVtdXhlciBlbGVtZW50IGNhbiBnZW5lcmF0ZSBhbiBFT1MgZXZlbnQgYmVmb3JlIHRoZSBzb3VyY2UgZWxlbWVudC4KLVRoaXMgaXMgbm90IGEgcHJvYmxlbSwgdGhlIGRlbXV4ZXIgZG9lcyBub3Qgc2VuZCBhbiBFT1MgZXZlbnQgdG8gdGhlIHVwc3RyZWFtCi1lbGVtZW50IGJ1dCByZXR1cm5zIEdTVF9GTE9XX0VPUywgY2F1c2luZyB0aGUgc291cmNlIGVsZW1lbnQgdG8gc3RvcAotc2VuZGluZyBkYXRhLgotCi1BbiBlbGVtZW50IHRoYXQgc2VuZHMgRU9TIG9uIGEgcGFkIHNob3VsZCBzdG9wIHNlbmRpbmcgZGF0YSBvbiB0aGF0IHBhZC4gU291cmNlCi1lbGVtZW50cyB0eXBpY2FsbHkgcGF1c2UoKSB0aGVpciB0YXNrIGZvciB0aGF0IHB1cnBvc2UuCi0KLUJ5IGRlZmF1bHQsIGEgR3N0QmluIGNvbGxlY3RzIGFsbCBFT1MgbWVzc2FnZXMgZnJvbSBhbGwgaXRzIHNpbmtzIGJlZm9yZSAKLXBvc3RpbmcgdGhlIEVPUyBtZXNzYWdlIHRvIGl0cyBwYXJlbnQuCi0KLVRoZSBFT1MgaXMgb25seSBwb3N0ZWQgb24gdGhlIGJ1cyBieSB0aGUgc2luayBlbGVtZW50cyBpbiB0aGUgUExBWUlORyBzdGF0ZS4gSWYKLXRoZSBFT1MgZXZlbnQgaXMgcmVjZWl2ZWQgaW4gdGhlIFBBVVNFRCBzdGF0ZSwgaXQgaXMgcXVldWVkIHVudGlsIHRoZSBlbGVtZW50Ci1nb2VzIHRvIFBMQVlJTkcuCi0KLUEgRkxVU0hfU1RPUCBldmVudCBvbiBhbiBlbGVtZW50IGZsdXNoZXMgdGhlIEVPUyBzdGF0ZSBhbmQgYWxsIHBlbmRpbmcgRU9TIG1lc3NhZ2VzLgotCi0KLVNFR01FTlQKLX5+fn5+fn4KLQotQSBzZWdtZW50IGV2ZW50IGlzIHNlbnQgZG93bnN0cmVhbSBieSBhbiBlbGVtZW50IHRvIGluZGljYXRlIHRoYXQgdGhlIGZvbGxvd2luZwotZ3JvdXAgb2YgYnVmZmVycyBzdGFydCBhbmQgZW5kIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb25zLiBUaGUgbmV3c2VnbWVudCBldmVudAotYWxzbyBjb250YWlucyB0aGUgcGxheWJhY2sgc3BlZWQgYW5kIHRoZSBhcHBsaWVkIHJhdGUgb2YgdGhlIHN0cmVhbS4KLQotU2luY2UgdGhlIHN0cmVhbSB0aW1lIGlzIGFsd2F5cyBzZXQgdG8gMCBhdCBzdGFydCBhbmQgYWZ0ZXIgYSBzZWVrLCBhIDAKLXBvaW50IGZvciBhbGwgbmV4dCBidWZmZXIncyB0aW1lc3RhbXBzIGhhcyB0byBiZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlCi1waXBlbGluZSB1c2luZyB0aGUgU0VHTUVOVCBldmVudC4KLQotQmVmb3JlIHNlbmRpbmcgYnVmZmVycywgYW4gZWxlbWVudCBtdXN0IHNlbmQgYSBTRUdNRU5UIGV2ZW50LiBBbiBlbGVtZW50IGlzCi1mcmVlIHRvIHJlZnVzZSBidWZmZXJzIGlmIHRoZXkgd2VyZSBub3QgcHJlY2VkZWQgYnkgYSBTRUdNRU5UIGV2ZW50LgotCi1FbGVtZW50cyB0aGF0IHN5bmMgdG8gdGhlIGNsb2NrIHNob3VsZCBzdG9yZSB0aGUgU0VHTUVOVCBzdGFydCBhbmQgZW5kIHZhbHVlcwotYW5kIHN1YnRyYWN0IHRoZSBzdGFydCB2YWx1ZSBmcm9tIHRoZSBidWZmZXIgdGltZXN0YW1wIGJlZm9yZSBjb21wYXJpbmcKLWl0IGFnYWluc3QgdGhlIHN0cmVhbSB0aW1lIChzZWUgcGFydC1jbG9ja3MudHh0KS4KLQotQW4gZWxlbWVudCBpcyBhbGxvd2VkIHRvIHNlbmQgb3V0IGJ1ZmZlcnMgd2l0aCB0aGUgU0VHTUVOVCBzdGFydCB0aW1lIGFscmVhZHkKLXN1YnRyYWN0ZWQgZnJvbSB0aGUgdGltZXN0YW1wLiBJZiBpdCBkb2VzIHNvLCBpdCBuZWVkcyB0byBzZW5kIGEgY29ycmVjdGVkCi1TRUdNRU5UIGRvd25zdHJlYW0sIGllLCBvbmUgd2l0aCBzdGFydCB0aW1lIDAuCi0KLUEgU0VHTUVOVCBldmVudCBzaG91bGQgYmUgZ2VuZXJhdGVkIGFzIHNvb24gYXMgcG9zc2libGUgaW4gdGhlIHBpcGVsaW5lIGFuZAotaXMgdXN1YWxseSBnZW5lcmF0ZWQgYnkgYSBkZW11eGVyIG9yIHNvdXJjZS4gVGhlIGV2ZW50IGlzIGdlbmVyYXRlZCBiZWZvcmUgCi1wdXNoaW5nIHRoZSBmaXJzdCBidWZmZXIgYW5kIGFmdGVyIGEgc2VlaywgcmlnaHQgYmVmb3JlIHB1c2hpbmcgdGhlIG5ldyBidWZmZXIuCi0KLVRoZSBTRUdNRU5UIGV2ZW50IHNob3VsZCBiZSBzZW50IGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgYW5kIHNob3VsZCBiZQotc2VyaWFsaXplZCB3aXRoIHRoZSBidWZmZXJzLgotCi1CdWZmZXJzIHNob3VsZCBiZSBjbGlwcGVkIHdpdGhpbiB0aGUgcmFuZ2UgaW5kaWNhdGVkIGJ5IHRoZSBuZXdzZWdtZW50IGV2ZW50Ci1zdGFydCBhbmQgc3RvcCB2YWx1ZXMuIFNpbmtzIG11c3QgZHJvcCBidWZmZXJzIHdpdGggdGltZXN0YW1wcyBvdXQgb2YgdGhlCi1pbmRpY2F0ZWQgc2VnbWVudCByYW5nZS4KLQotCi1UQUcKLX5+fgotICAKLVRoZSB0YWcgZXZlbnQgaXMgc2VudCBkb3duc3RyZWFtIHdoZW4gYW4gZWxlbWVudCBoYXMgZGlzY292ZXJlZCBtZXRhZGF0YQotdGFncyBpbiBhIG1lZGlhIGZpbGUuIEVuY29kZXJzIGNhbiB1c2UgdGhpcyBldmVudCB0byBhZGp1c3QgdGhlaXIgdGFnZ2luZwotc3lzdGVtLiBBIHRhZyBpcyBzZXJpYWxpemVkIHdpdGggYnVmZmVycy4KLQotCi1CVUZGRVJTSVpFCi1+fn5+fn5+fn5+Ci0KLU5PVEU6IFRoaXMgZXZlbnQgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KLQotQW4gZWxlbWVudCBjYW4gc3VnZ2VzdCBhIGJ1ZmZlcnNpemUgZm9yIGRvd25zdHJlYW0gZWxlbWVudHMuIFRoaXMgaXMKLXR5cGljYWxseSBkb25lIGJ5IGVsZW1lbnRzIHRoYXQgcHJvZHVjZSBkYXRhIG9uIG11bHRpcGxlIHNvdXJjZSBwYWRzCi1zdWNoIGFzIGRlbXV4ZXJzLgotCi0KLVFPUwotfn5+Ci0KLUEgUU9TLCBvciBxdWFsaXR5IG9mIHNlcnZpY2UgbWVzc2FnZSwgaXMgZ2VuZXJhdGVkIGluIGFuIGVsZW1lbnQgdG8gcmVwb3J0Ci10byB0aGUgdXBzdHJlYW0gZWxlbWVudHMgYWJvdXQgdGhlIGN1cnJlbnQgcXVhbGl0eSBvZiByZWFsLXRpbWUgcGVyZm9ybWFuY2UKLW9mIHRoZSBzdHJlYW0uIFRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgYnkgdGhlIHNpbmtzIHRoYXQgbWVhc3VyZSB0aGUgYW1vdW50Ci1vZiBmcmFtZWRyb3BzIHRoZXkgaGF2ZS4gKHNlZSBwYXJ0LXFvcy50eHQpCi0KLQotU0VFSwotfn5+fgotCi1BIHNlZWsgZXZlbnQgaXMgaXNzdWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBjb25maWd1cmUgdGhlIHBsYXliYWNrIHJhbmdlCi1vZiBhIHN0cmVhbS4gSXQgaXMgY2FsbGVkIGZvcm0gdGhlIGFwcGxpY2F0aW9uIHRocmVhZCBhbmQgdHJhdmVscyB1cHN0cmVhbS4KLQotVGhlIHNlZWsgZXZlbnQgY29udGFpbnMgdGhlIG5ldyBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbiBvZiBwbGF5YmFjawotYWZ0ZXIgdGhlIHNlZWsgaXMgcGVyZm9ybWVkLiBPcHRpb25hbGx5IHRoZSBzdG9wIHBvc2l0aW9uIGNhbiBiZSBsZWZ0Ci1hdCAtMSB0byBjb250aW51ZSBwbGF5YmFjayB0byB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIFRoZSBzZWVrIGV2ZW50Ci1hbHNvIGNvbnRhaW5zIHRoZSBuZXcgcGxheWJhY2sgcmF0ZSBvZiB0aGUgc3RyZWFtLCAxLjAgaXMgbm9ybWFsIHBsYXliYWNrLAotMi4wIGRvdWJsZSBzcGVlZCBhbmQgbmVnYXRpdmUgdmFsdWVzIG1lYW4gYmFja3dhcmRzIHBsYXliYWNrLgotCi1BIHNlZWsgdXN1YWxseSBmbHVzaGVzIHRoZSBncmFwaCB0byBtaW5pbWl6ZSBsYXRlbmN5IGFmdGVyIHRoZSBzZWVrLiBUaGlzCi1iZWhhdmlvdXIgaXMgdHJpZ2dlcmVkIGJ5IHVzaW5nIHRoZSBTRUVLX0ZMVVNIIGZsYWcgb24gdGhlIHNlZWsgZXZlbnQuIAotCi1UaGUgc2VlayBldmVudCB1c3VhbGx5IHN0YXJ0cyBmcm9tIHRoZSBzaW5rIGVsZW1lbnRzIGFuZCB0cmF2ZWxzIHVwc3RyZWFtCi1mcm9tIGVsZW1lbnQgdG8gZWxlbWVudCB1bnRpbCBpdCByZWFjaGVzIGFuIGVsZW1lbnQgdGhhdCBjYW4gcGVyZm9ybSB0aGUKLXNlZWsuIE5vIGludGVybWVkaWF0ZSBlbGVtZW50IGlzIGFsbG93ZWQgdG8gYXNzdW1lIHRoYXQgYSBzZWVrIHRvIHRoaXMKLWxvY2F0aW9uIHdpbGwgaGFwcGVuLiBJdCBpcyBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZXMgaWYgaXQKLW5lZWRzIHRvIGRvIHNvLiB0aGlzIGlzIHR5cGljYWxseSB0aGUgY2FzZSBpZiBhIHNlZWsgaXMgcmVxdWVzdGVkIGZvciBhCi1ub24tdGltZSBwb3NpdGlvbi4KLQotVGhlIGFjdHVhbCBzZWVrIGlzIHBlcmZvcm1lZCBpbiB0aGUgYXBwbGljYXRpb24gdGhyZWFkIHNvIHRoYXQgc3VjY2Vzcwotb3IgZmFpbHVyZSBjYW4gYmUgcmVwb3J0ZWQgYXMgYSByZXR1cm4gdmFsdWUgb2YgdGhlIHNlZWsgZXZlbnQuIEl0IGlzCi10aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgc2VlaywgdGhlIGVsZW1lbnQgYWNxdWlyZXMKLXRoZSBTVFJFQU1fTE9DSyBzbyB0aGF0IHRoZSBzdHJlYW1pbmcgdGhyZWFkIGFuZCB0aGUgc2VlayBnZXQgc2VyaWFsaXplZC4KLQotVGhlIGdlbmVyYWwgZmxvdyBvZiBleGVjdXRpbmcgdGhlIHNlZWsgd2l0aCBGTFVTSCBpcyBhcyBmb2xsb3dzOgotCi0gMSkgdW5ibG9jayB0aGUgc3RyZWFtaW5nIHRocmVhZHMsIHRoZXkgY291bGQgYmUgYmxvY2tlZCBpbiBhIGNoYWluIAotICAgIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyBhIEZMVVNIX1NUQVJUIG9uIGFsbCBzcmNwYWRzIG9yIGJ5IHBhdXNpbmcKLSAgICB0aGUgc3RyZWFtaW5nIHRhc2ssIGRlcGVuZGluZyBvbiB0aGUgc2VlayBGTFVTSCBmbGFnLgotICAgIFRoZSBmbHVzaCB3aWxsIG1ha2Ugc3VyZSB0aGF0IGFsbCBkb3duc3RyZWFtIGVsZW1lbnRzIHVubG9jayBhbmQKLSAgICB0aGF0IGNvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhpcyBlbGVtZW50IGNoYWluL2xvb3AgZnVuY3Rpb24uCi0gICAgV2UgY2Fubm90IGxvY2sgdGhlIFNUUkVBTV9MT0NLIGJlZm9yZSBkb2luZyB0aGlzIHNpbmNlIGl0IG1pZ2h0Ci0gICAgY2F1c2UgYSBkZWFkbG9jay4KLQotIDIpIGFjcXVpcmUgdGhlIFNUUkVBTV9MT0NLLiBUaGlzIHdpbGwgd29yayBzaW5jZSB0aGUgY2hhaW4vbG9vcCBmdW5jdGlvbgotICAgIHdhcyB1bmxvY2tlZC9wYXVzZWQgaW4gc3RlcCAxKS4KLQotIDMpIHBlcmZvcm0gdGhlIHNlZWsuIHNpbmNlIHRoZSBTVFJFQU1fTE9DSyBpcyBoZWxkLCB0aGUgc3RyZWFtaW5nIHRocmVhZAotICAgIHdpbGwgd2FpdCBmb3IgdGhlIHNlZWsgdG8gY29tcGxldGUuIE1vc3QgbGlrZWx5LCB0aGUgc3RyZWFtIHRocmVhZAotICAgIHdpbGwgcGF1c2UgYmVjYXVzZSB0aGUgcGVlciBlbGVtZW50cyBhcmUgZmx1c2hpbmcuCi0KLSA0KSBzZW5kIGEgRkxVU0hfU1RPUCBldmVudCB0byBhbGwgcGVlciBlbGVtZW50cyB0byBhbGxvdyBzdHJlYW1pbmcgYWdhaW4uCi0KLSA1KSBjcmVhdGUgYSBTRUdNRU5UIGV2ZW50IHRvIHNpZ25hbCB0aGUgbmV3IGJ1ZmZlciB0aW1lc3RhbXAgYmFzZSB0aW1lLgotICAgIFRoaXMgZXZlbnQgbXVzdCBiZSBxdWV1ZWQgdG8gYmUgc2VudCBieSB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLQotIDYpIHN0YXJ0IHN0b3BwZWQgdGFza3MgYW5kIHVubG9jayB0aGUgU1RSRUFNX0xPQ0ssIGRhdGFmbG93IHdpbGwgY29udGludWUKLSAgICBub3cgZnJvbSB0aGUgbmV3IHBvc2l0aW9uLgotCi1Nb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWZmZXJlbnQgc2VlayB0eXBlcyBjYW4gYmUgZm91bmQgaW4gCi1wYXJ0LXNlZWtpbmcudHh0LgotCi0KLU5BVklHQVRJT04KLX5+fn5+fn5+fn5+Ci0KLUEgbmF2aWdhdGlvbiBldmVudCBpcyBnZW5lcmF0ZWQgYnkgYSBzaW5rIGVsZW1lbnQgdG8gc2lnbmFsIHRoZSBlbGVtZW50cwotb2YgYSBuYXZpZ2F0aW9uIGV2ZW50IHN1Y2ggYXMgYSBtb3VzZSBtb3ZlbWVudCBvciBidXR0b24gY2xpY2suCi1OYXZpZ2F0aW9uIGV2ZW50cyB0cmF2ZWwgdXBzdHJlYW0uCi0KLQotTEFURU5DWQotfn5+fn5+fgotCi1BIGxhdGVuY3kgZXZlbnQgaXMgdXNlZCB0byBjb25maWd1cmUgYSBjZXJ0YWluIGxhdGVuY3kgaW4gdGhlIHBpcGVsaW5lLiBJdAotY29udGFpbnMgYSBzaW5nbGUgR3N0Q2xvY2tUaW1lIHdpdGggdGhlIHJlcXVpcmVkIGxhdGVuY3kuIFRoZSBsYXRlbmN5IHZhbHVlIGlzCi1jYWxjdWxhdGVkIGJ5IHRoZSBwaXBlbGluZSBhbmQgZGlzdHJpYnV0ZWQgdG8gYWxsIHNpbmsgZWxlbWVudHMgYmVmb3JlIHRoZXkgYXJlCi1zZXQgdG8gUExBWUlORy4gVGhlIHNpbmtzIHdpbGwgYWRkIHRoZSBjb25maWd1cmVkIGxhdGVuY3kgdmFsdWUgdG8gdGhlCi10aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgaW4gb3JkZXIgdG8gZGVsYXkgdGhlaXIgcHJlc2VudGF0aW9uLgotKFNlZSBhbHNvIHBhcnQtbGF0ZW5jeS50eHQpLgotCi0KLURSQUlOCi1+fn5+fgotCi1OT1RFOiBUaGlzIGV2ZW50IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCi0KLURyYWluIGV2ZW50IGluZGljYXRlcyB0aGF0IHVwc3RyZWFtIGlzIGFib3V0IHRvIHBlcmZvcm0gYSByZWFsLXRpbWUgZXZlbnQsIHN1Y2gKLWFzIHBhdXNpbmcgdG8gcHJlc2VudCBhbiBpbnRlcmFjdGl2ZSBtZW51IG9yIHN1Y2gsIGFuZCBuZWVkcyB0byB3YWl0IGZvciBhbGwKLWRhdGEgaXQgaGFzIHNlbnQgdG8gYmUgcGxheWVkLW91dCBpbiB0aGUgc2luay4KLQotRHJhaW4gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBsaXZlIGVsZW1lbnRzLCBhcyBpdCBtYXkgb3RoZXJ3aXNlIG9jY3VyIGR1cmluZwotcHJlcm9sbGluZy4KLQotVXN1YWxseSBhZnRlciBkcmFpbmluZyB0aGUgcGlwZWxpbmUsIGFuIGVsZW1lbnQgZWl0aGVyIG5lZWRzIHRvIG1vZGlmeSB0aW1lc3RhbXBzLAotb3IgRkxVU0ggdG8gcHJldmVudCBzdWJzZXF1ZW50IGRhdGEgYmVpbmcgZGlzY2FyZGVkIGF0IHRoZSBzaW5rcyBmb3IgYXJyaXZpbmcKLWxhdGUgKG9ubHkgYXBwbGllcyBkdXJpbmcgcGxheWJhY2sgc2NlbmFyaW9zKS4gCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtZnJhbWVzdGVwLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtZnJhbWVzdGVwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU2OGU5Ni4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWZyYW1lc3RlcC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotRnJhbWUgc3RlcAotLS0tLS0tLS0tLQotCi1UaGlzIGRvY3VtZW50IG91dGxpbmVzIHRoZSBkZXRhaWxzIG9mIHRoZSBmcmFtZSBzdGVwcGluZyBmdW5jdGlvbmFsaXR5IGluCi1HU3RyZWFtZXIuCi0KLVRoZSBzdGVwcGluZyBmdW5jdGlvbmFsaXR5IG9wZXJhdGVzIG9uIHRoZSBjdXJyZW50IHBsYXliYWNrIHNlZ21lbnQsIHBvc2l0aW9uCi1hbmQgcmF0ZSBhcyBpdCB3YXMgY29uZmlndXJlZCB3aXRoIGEgcmVndWxhciBzZWVrIGV2ZW50LiBJbiBjb250cmFzdCB0byB0aGUgc2VlawotZXZlbnQsIGl0IG9wZXJhdGVzIHZlcnkgY2xvc2VseSB0byB0aGUgc2luayBhbmQgdGh1cyBoYXMgYSB2ZXJ5IGxvdyBsYXRlbmN5IGFuZAotaXMgbm90IHNsb3dlZCBkb3duIGJ5IHF1ZXVlcyBhbmQgZG9lcyBub3QgYWN0dWFsbHkgcGVyZm9ybSBhbnkgc2Vla2luZyBsb2dpYy4KLUZvciB0aGlzIHJlYXNvbiB3ZSB3YW50IHRvIGluY2x1ZGUgYSBuZXcgQVBJIGluc3RlYWQgb2YgcmV1c2luZyB0aGUgc2VlayBBUEkuCi0KLVRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzIGFyZSBuZWVkZWQ6Ci0KLSAtIFRoZSBhYmlsaXR5IHRvIHdhbGsgZm9yd2FyZHMgYW5kIGJhY2t3YXJkcyBpbiB0aGUgc3RyZWFtLgotIC0gQXJiaXRyYXJ5IGluY3JlbWVudHMgaW4gYW55IHN1cHBvcnRlZCBmb3JtYXQgKHRpbWUsIGZyYW1lcywgYnl0ZXMgLi4uKQotIC0gSGlnaCBzcGVlZCwgbWluaW1hbCBvdmVyaGVhZC4gVGhpcyBtZWNoYW5pc20gaXMgbm90IG1vcmUgZXhwZW5zaXZlIHRoYW4KLSAgIHNpbXBsZSBwbGF5YmFjay4gCi0gLSBzd2l0Y2hpbmcgYmV0d2VlbiBmb3J3YXJkcyBhbmQgYmFja3dhcmRzIHN0ZXBwaW5nIHNob3VsZCBiZSBmYXN0LgotIC0gTWFpbnRhaW4gc3luY2hyb25pc2F0aW9uIGJldHdlZW4gc3RyZWFtcy4KLSAtIEdldCBmZWVkYmFjayBvZiB0aGUgYW1vdW50IG9mIHNraXBwZWQgZGF0YS4KLSAtIEFiaWxpdHkgdG8gcGxheSBhIGNlcnRhaW4gYW1vdW50IG9mIGRhdGEgYXQgYW4gYXJiaXRyYXJ5IHNwZWVkLgotCi1XZSB3YW50IGEgc3lzdGVtIHdoZXJlIHdlIGNhbiBzdGVwIGZyYW1lcyBpbiBQQVVTRUQgYXMgd2VsbCBhcyBwbGF5IHNob3J0Ci1zZWdtZW50cyBvZiBkYXRhIGluIFBMQVlJTkcuCi0KLQotVXNlIENhc2VzCi1+fn5+fn5+fn4KLQotICogZnJhbWUgc3RlcHBpbmcgaW4gdmlkZW8gb25seSBwaXBlbGluZSBpbiBQQVVTRUQKLQotICAgIC4tLS0tLS4gICAgLi0tLS0tLS0uICAgICAgICAgICAgICAuLS0tLS0tLiAgICAuLS0tLS0tLS4KLSAgICB8IHNyYyB8ICAgIHwgZGVtdXggfCAgICAuLS0tLS0uICAgfCB2ZGVjIHwgICAgfCB2c2luayB8Ci0gICAgfCAgICBzcmMtPnNpbmsgICAgc3JjMS0+fHF1ZXVlfC0+c2luayAgIHNyYy0+c2luayAgICAgfAotICAgICctLS0tLScgICAgJy0tLS0tLS0nICAgICctLS0tLScgICAnLS0tLS0tJyAgICAnLS0tLS0tLScKLQotICAgIC0gYXBwIHNldHMgdGhlIHBpcGVsaW5lIHRvIFBBVVNFRCB0byBibG9jayBvbiB0aGUgcHJlcm9sbCBwaWN0dXJlCi0gICAgLSBhcHAgc2Vla3MgdG8gcmVxdWlyZWQgcG9zaXRpb24gaW4gdGhlIHN0cmVhbS4gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIGEKLSAgICAgIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIHJhdGUgZGVwZW5kaW5nIG9uIHRoZSByZXF1aXJlZCBmcmFtZSBzdGVwcGluZwotICAgICAgZGlyZWN0aW9uLgotICAgIC0gYXBwIHN0ZXBzIGZyYW1lcyAoaW4gR1NUX0ZPUk1BVF9ERUZBVUxUIG9yIEdTVF9GT1JNQVRfQlVGRkVSKS4gVGhlCi0gICAgICBwaXBlbGluZSBsb3NlcyBpdHMgUEFVU0VEIHN0YXRlIHVudGlsIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgZnJhbWVzIGhhdmUKLSAgICAgIGJlZW4gc2tpcHBlZCwgaXQgdGhlbiBwcmVyb2xscyBhZ2Fpbi4gVGhpcyBza2lwcGluZyBpcyBwdXJlbHkgZG9uZSBpbgotICAgICAgdGhlIHNpbmsuCi0gICAgLSBzaW5rIHBvc3RzIFNURVBfRE9ORSB3aXRoIGFtb3VudCBvZiBmcmFtZXMgc3RlcHBlZCBhbmQgY29ycmVzcG9uZGluZyB0aW1lCi0gICAgICBpbnRlcnZhbC4KLQotICogZnJhbWUgc3RlcHBpbmcgaW4gYXVkaW8vdmlkZW8gcGlwZWxpbmUgaW4gUEFVU0VECi0KLSAgICAuLS0tLS0uICAgIC4tLS0tLS0tLiAgICAgICAgICAgICAgLi0tLS0tLS4gICAgLi0tLS0tLS0uCi0gICAgfCBzcmMgfCAgICB8IGRlbXV4IHwgICAgLi0tLS0tLiAgIHwgdmRlYyB8ICAgIHwgdnNpbmsgfAotICAgIHwgICAgc3JjLT5zaW5rICAgIHNyYzEtPnxxdWV1ZXwtPnNpbmsgICBzcmMtPnNpbmsgICAgIHwKLSAgICAnLS0tLS0nICAgIHwgICAgICAgfCAgICAnLS0tLS0nICAgJy0tLS0tLScgICAgJy0tLS0tLS0nCi0gICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgIC4tLS0tLS0uICAgIC4tLS0tLS0tLgotICAgICAgICAgICAgICAgfCAgICAgICB8ICAgIC4tLS0tLS4gICB8IGFkZWMgfCAgICB8IGFzaW5rIHwKLSAgICAgICAgICAgICAgIHwgICAgICBzcmMyLT58cXVldWV8LT5zaW5rICAgc3JjLT5zaW5rICAgICB8Ci0gICAgICAgICAgICAgICAnLS0tLS0tLScgICAgJy0tLS0tJyAgICctLS0tLS0nICAgICctLS0tLS0tJwotCi0KLSAgICAtIGFwcCBzZXRzIHRoZSBwaXBlbGluZSB0byBQQVVTRUQgdG8gYmxvY2sgb24gdGhlIHByZXJvbGwgcGljdHVyZQotICAgIC0gYXBwIHNlZWtzIHRvIHJlcXVpcmVkIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0uIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBhCi0gICAgICBwb3NpdGl2ZSBvciBuZWdhdGl2ZSByYXRlIGRlcGVuZGluZyBvbiB0aGUgcmVxdWlyZWQgZnJhbWUgc3RlcHBpbmcKLSAgICAgIGRpcmVjdGlvbi4KLSAgICAtIGFwcCBzdGVwcyBmcmFtZXMgKGluIEdTVF9GT1JNQVRfREVGQVVMVCBvciBHU1RfRk9STUFUX0JVRkZFUikgb3IgYW4gYW1vdW50Ci0gICAgICBvZiB0aW1lIG9uIHRoZSB2aWRlbyBzaW5rLiBUaGUgcGlwZWxpbmUgbG9zZXMgaXRzIFBBVVNFRCBzdGF0ZSB1bnRpbCB0aGUKLSAgICAgIHJlcXVpcmVkIG51bWJlciBvZiBmcmFtZXMgaGF2ZSBiZWVuIHNraXBwZWQsIGl0IHRoZW4gcHJlcm9sbHMgYWdhaW4uCi0gICAgICBUaGlzIHNraXBwaW5nIGlzIHB1cmVseSBkb25lIGluIHRoZSBzaW5rLgotICAgIC0gc2luayBwb3N0cyBTVEVQX0RPTkUgd2l0aCBhbW91bnQgb2YgZnJhbWVzIHN0ZXBwZWQgYW5kIGNvcnJlc3BvbmRpbmcgdGltZQotICAgICAgaW50ZXJ2YWwuCi0gICAgLSB0aGUgYXBwIHNraXBzIHRoZSBzYW1lIGFtb3VudCBvZiB0aW1lIG9uIHRoZSBhdWRpb3NpbmsgdG8gYWxpZ24gdGhlCi0gICAgICBzdHJlYW1zIGFnYWluLiBXaGVuIGh1Z2UgYW1vdW50IG9mIHZpZGVvIGZyYW1lcyBhcmUgc2tpcHBlZCwgdGhlcmUgbmVlZHMKLSAgICAgIHRvIGJlIGVub3VnaCBxdWV1ZWluZyBpbiB0aGUgcGlwZWxpbmUgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGFjY3VtdWxhdGVkCi0gICAgICBhdWRpby4KLQotICogZnJhbWUgc3RlcHBpbmcgaW4gYXVkaW8vdmlkZW8gcGlwZWxpbmUgaW4gUExBWUlORwotCi0gICAgLSBhcHAgc2V0cyB0aGUgcGlwZWxpbmUgdG8gUEFVU0VEIHRvIGJsb2NrIG9uIHRoZSBwcmVyb2xsIHBpY3R1cmUKLSAgICAtIGFwcCBzZWVrcyB0byByZXF1aXJlZCBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtLiBUaGlzIGNhbiBiZSBkb25lIHdpdGggYQotICAgICAgcG9zaXRpdmUgb3IgbmVnYXRpdmUgcmF0ZSBkZXBlbmRpbmcgb24gdGhlIHJlcXVpcmVkIGZyYW1lIHN0ZXBwaW5nCi0gICAgICBkaXJlY3Rpb24uCi0gICAgLSBhcHAgY29uZmlndXJlcyBmcmFtZXMgc3RlcHMgKGluIEdTVF9GT1JNQVRfREVGQVVMVCBvciBHU1RfRk9STUFUX0JVRkZFUikgb3IKLSAgICAgIGFuIGFtb3VudCBvZiB0aW1lIG9uIHRoZSBzaW5rLiBUaGUgc3RlcCBldmVudCBoYXMgYSBmbGFnIGluZGljYXRpbmcgbGl2ZQotICAgICAgc3RlcHBpbmcgc28gdGhhdCB0aGUgc3RlcHBpbmcgd2lsbCBvbmx5IGhhcHBlbnMgaW4gUExBWUlORy4gCi0gICAgLSBhcHAgc2V0cyBwaXBlbGluZSB0byBQTEFZSU5HLiBUaGUgcGlwZWxpbmUgY29udGludWVzIFBMQVlJTkcgdW50aWwgaXQKLSAgICAgIGNvbnN1bWVkIHRoZSBhbW91bnQgb2YgdGltZS4KLSAgICAtIHNpbmsgcG9zdHMgU1RFUF9ET05FIHdpdGggYW1vdW50IG9mIGZyYW1lcyBzdGVwcGVkIGFuZCBjb3JyZXNwb25kaW5nIHRpbWUKLSAgICAgIGludGVydmFsLiBUaGUgc2luayB3aWxsIHRoZW4gd2FpdCBmb3IgYW5vdGhlciBzdGVwIGV2ZW50LiBTaW5jZSB0aGUKLSAgICAgIFNURVBfRE9ORSBtZXNzYWdlIHdhcyBlbWl0dGVkIGJ5IHRoZSBzaW5rIHdoZW4gaXQgaGFuZGVkIG9mZiB0aGUgYnVmZmVyIHRvCi0gICAgICB0aGUgZGV2aWNlLCB0aGVyZSBpcyB1c3VhbGx5IHN1ZmZpY2llbnQgdGltZSB0byBxdWV1ZSBhIG5ldyBTVEVQIGV2ZW50IHNvCi0gICAgICB0aGF0IG9uZSBjYW4gc2VhbWxlc3NseSBjb250aW51ZSBzdGVwcGluZy4KLQotCi1ldmVudHMKLX5+fn5+fgotCi1BIG5ldyBHU1RfRVZFTlRfU1RFUCBldmVudCBpcyBpbnRyb2R1Y2VkIHRvIHN0YXJ0IHRoZSBzdGVwIG9wZXJhdGlvbi4gIAotVGhlIHN0ZXAgZXZlbnQgaXMgY3JlYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBzdHJ1Y3R1cmU6Ci0KLSAgImZvcm1hdCIsIEdTVF9UWVBFX0ZPUk1BVAotICAgICBUaGUgZm9ybWF0IG9mIHRoZSBzdGVwIHVuaXRzCi0KLSAgImFtb3VudCIsIEdfVFlQRV9VSU5UNjQKLSAgICAgVGhlIGFtb3VudCBvZiB1bml0cyB0byBzdGVwLiBBIDAgYW1vdW50IGltbWVkaWF0ZWx5IGNvbXBsZXRlcyBhbmQgY2FuIGJlCi0gICAgIHVzZWQgdG8gY2FuY2VsIHRoZSBjdXJyZW50IHN0ZXAgYW5kIHJlc3VtZSBub3JtYWwgbm9uLXN0ZXBwaW5nIGJlaGF2aW91cgotICAgICB0byB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LgotICAgICBBIC0xIGFtb3VudCBzdGVwcyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LgotCi0gICJyYXRlIiwgR19UWVBFX0RPVUJMRQotICAgICBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZnJhbWVzIHNob3VsZCBiZSBzdGVwcGVkIGluIFBMQVlJTkcgbW9kZS4gMS4wIGlzCi0gICAgIHRoZSBub3JtYWwgcGxheWJhY2sgc3BlZWQgYW5kIGRpcmVjdGlvbiBvZiB0aGUgc2VnbWVudCwgMi4wCi0gICAgIGlzIGRvdWJsZSBzcGVlZC4gQSBzcGVlZCBvZiAwLjAgaXMgbm90IGFsbG93ZWQuIFdoZW4gcGVyZm9ybWluZyBhCi0gICAgIGZsdXNoaW5nIHN0ZXAsIHRoZSBzcGVlZCBpcyBub3QgcmVsZXZhbnQuIE5vdGUgdGhhdCB3ZSBkb24ndCBhbGxvdyBuZWdhdGl2ZQotICAgICByYXRlcyBoZXJlLCB1c2UgYSBzZWVrIHdpdGggYSBuZWdhdGl2ZSByYXRlIGZpcnN0IHRvIHJldmVyc2UgdGhlIHBsYXliYWNrCi0gICAgIGRpcmVjdGlvbi4KLQotICAiZmx1c2giLCBHX1RZUEVfQk9PTEVBTgotICAgICB3aGVuIGZsdXNoaW5nIGlzIFRSVUUsIHRoZSBzdGVwIGlzIHBlcmZvcm1lZCBpbW1lZGlhdGVseToKLQotICAgICAgLSBJbiB0aGUgUEFVU0VEIHN0YXRlIHRoZSBwaXBlbGluZSBsb3NlcyB0aGUgUEFVU0VEIHN0YXRlLCB0aGUgcmVxdWVzdGVkCi0gICAgICAgIGFtb3VudCBvZiBkYXRhIGlzIHNraXBwZWQgYW5kIHRoZSBwaXBlbGluZSBwcmVyb2xscyBhZ2FpbiB3aGVuIGEKLQlub24taW50ZXJtZWRpYXRlIHN0ZXAgY29tcGxldGVzLgotCVdoZW4gdGhlIHBpcGVsaW5lIHdhcyBzdGVwcGluZyB3aGlsZSB0aGUgZXZlbnQgaXMgc2VudCwgdGhlIGN1cnJlbnQgc3RlcAotCW9wZXJhdGlvbiBpcyB1cGRhdGVkIHdpdGggdGhlIG5ldyBhbW91bnQgYW5kIGZvcm1hdC4gVGhlIHNpbmsgd2lsbCBkbyBhCi0JYmVzdCBlZmZvcnQgdG8gY29tcGx5IHdpdGggdGhlIG5ldyBhbW91bnQuCi0gICAgICAtIEluIHRoZSBQTEFZSU5HIHN0YXRlLCB0aGUgcGlwZWxpbmUgbG9zZXMgdGhlIFBMQVlJTkcgc3RhdGUsIHRoZQotICAgICAgICByZXF1ZXN0ZWQgYW1vdW50IG9mIGRhdGEgaXMgc2tpcHBlZCAobm90IHJlbmRlcmVkKSBmcm9tIHRoZSBwcmV2aW91cyBTVEVQCi0JcmVxdWVzdCBvciBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBQQVVTRUQgaWYgbm8gcHJldmlvdXMgU1RFUAotCW9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkLiBUaGUgcGlwZWxpbmUgZ29lcyBiYWNrIHRvIHRoZSBQTEFZSU5HIHN0YXRlCi0Jd2hlbiBhIG5vbi1pbnRlcm1lZGlhdGUgc3RlcCBjb21wbGV0ZXMuCi0KLSAgICAgV2hlbiBmbHVzaGluZyBpcyBGQUxTRSwgdGhlIHN0ZXAgd2lsbCBiZSBwZXJmb3JtZWQgbGF0ZXIuCi0KLSAgICAgIC0gSW4gdGhlIFBBVVNFRCBzdGF0ZSB0aGUgc3RlcCB3aWxsIGJlIGRvbmUgd2hlbiBnb2luZyB0byBQTEFZSU5HLiBBbnkKLQlwcmV2aW91cyBzdGVwIG9wZXJhdGlvbiB3aWxsIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgbmV3IFNURVAgZXZlbnQuCi0gICAgICAtIEluIHRoZSBQTEFZSU5HIHN0YXRlIHRoZSBzdGVwIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBhZnRlciB0aGUKLQljdXJyZW50IHN0ZXAgb3BlcmF0aW9uIGNvbXBsZXRlcy4gSWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIHN0ZXAKLQlvcGVyYXRpb24sIHRoZSBzdGVwIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUKLQlsYXN0IFBBVVNFRCBzdGF0ZS4gCi0KLSAgImludGVybWVkaWF0ZSIsIEdfVFlQRV9CT09MRUFOCi0gICAgIFNpZ25hbCB0aGF0IHRoaXMgc3RlcCBvcGVyYXRpb24gaXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAsIHBhcnQgb2YgYSBzZXJpZXMKLSAgICAgb2Ygc3RlcCBvcGVyYXRpb25zLiBJdCBpcyBtb3N0bHkgaW50ZXJlc3RpbmcgZm9yIHN0ZXBwaW5nIGluIHRoZSBQQVVTRUQgc3RhdGUKLSAgICAgYmVjYXVzZSB0aGUgc2luayB3aWxsIG9ubHkgcGVyZm9ybSBhIHByZXJvbGwgYWZ0ZXIgYSBub24taW50ZXJtZWRpYXRlIHN0ZXAKLSAgICAgb3BlcmF0aW9uIGNvbXBsZXRlcy4gSW50ZXJtZWRpYXRlIHN0ZXBzIGFyZSB1c2VmdWwgdG8gZmx1c2ggb3V0IGRhdGEgZnJvbQotICAgICBvdGhlciBzaW5rcyBpbiBvcmRlciB0byBub3QgY2F1c2UgZXhjZXNzaXZlIHF1ZXVlaW5nLiBJbiB0aGUgUExBWUlORyBzdGF0ZQotICAgICB0aGUgaW50ZXJtZWRpYXRlIGZsYWcgaGFzIG5vIHZpc3VhbCBlZmZlY3QuIEluIGFsbCBzdGF0ZXMsIHRoZSBpbnRlcm1lZGlhdGUKLSAgICAgZmxhZyBpcyBwYXNzZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgR1NUX01FU1NBR0VfU1RFUF9ET05FLgotCi0KLVRoZSBhcHBsaWNhdGlvbiB3aWxsIGNyZWF0ZSBhIFNURVAgZXZlbnQgdG8gc3RhcnQgb3Igc3RvcCB0aGUgc3RlcHBpbmcKLW9wZXJhdGlvbi4gQm90aCBzdGVwcGluZyBpbiBQQVVTRUQgYW5kIFBMQVlJTkcgY2FuIGJlIHBlcmZvcm1lZCBieSBtZWFucyBvZiAKLXRoZSBmbHVzaCBmbGFnLgotCi1UaGUgZXZlbnQgaXMgdXN1YWxseSBzZW50IHRvIHRoZSBwaXBlbGluZSwgd2hpY2ggd2lsbCB0eXBpY2FsbHkgZGlzdHJpYnV0ZSB0aGUKLWV2ZW50IHRvIGFsbCBvZiBpdHMgc2lua3MuIEZvciBzb21lIHVzZSBjYXNlcywgbGlrZSBmcmFtZSBzdGVwcGluZyBvbiB2aWRlbwotZnJhbWVzIG9ubHksIHRoZSBldmVudCBzaG91bGQgb25seSBiZSBzZW50IHRvIHRoZSB2aWRlbyBzaW5rIGFuZCB1cG9uIHJlY2VwdGlvbgotb2YgdGhlIFNURVBfRE9ORSBtZXNzYWdlLCBvbmUgY2FuIHN0ZXAgdGhlIG90aGVyIHNpbmtzIHRvIGFsaWduIHRoZSBzdHJlYW1zCi1hZ2Fpbi4KLQotRm9yIGxhcmdlIHN0ZXBwaW5nIGFtb3VudHMsIHRoZXJlIG5lZWRzIHRvIGJlIGVub3VnaCBxdWV1ZWluZyBpbiBmcm9udCBvZiBhbGwKLXRoZSBzaW5rcy4gSWYgbGFyZ2Ugc3RlcHMgbmVlZCB0byBiZSBwZXJmb3JtZWQsIHRoZXkgY2FuIGJlIHNwbGl0IHVwIGludG8KLXNtYWxsZXIgc3RlcCBvcGVyYXRpb25zIHVzaW5nIHRoZSAiaW50ZXJtZWRpYXRlIiBmbGFnIG9uIHRoZSBzdGVwLiAKLQotU2luY2UgdGhlIHN0ZXAgZXZlbnQgZG9lcyBub3QgdXBkYXRlIHRoZSBiYXNlX3RpbWUgb2YgYW55IG9mIHRoZSBlbGVtZW50cywgdGhlCi1zaW5rcyBzaG91bGQga2VlcCB0cmFjayBvZiB0aGUgYW1vdW50IG9mIHN0ZXBwZWQgZGF0YSBpbiBvcmRlciB0byByZW1haW4KLXN5bmNocm9uaXplZCBhZ2FpbnN0IHRoZSBjbG9jay4KLQotCi1tZXNzYWdlcwotfn5+fn5+fn4KLQotQSBHU1RfTUVTU0FHRV9TVEVQX1NUQVJUIGlzIGNyZWF0ZWQuIEl0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzLgotCi0gICJhY3RpdmUiCi0gICAgIElmIHRoZSBzdGVwIHdhcyBxdWV1ZWQgb3IgYWN0aXZhdGVkLgotCi0gICJmb3JtYXQiLCBHU1RfVFlQRV9GT1JNQVQKLSAgICAgVGhlIGZvcm1hdCBvZiB0aGUgc3RlcCB1bml0cyB0aGF0IHF1ZXVlZC9hY3RpdmF0ZWQuCi0KLSAgImFtb3VudCIsIEdfVFlQRV9VSU5UNjQKLSAgICAgVGhlIGFtb3VudCBvZiB1bml0cyB0aGF0IHdlcmUgcXVldWVkL2FjdGl2YXRlZC4KLQotICAicmF0ZSIsIEdfVFlQRV9ET1VCTEUKLSAgICAgVGhlIHJhdGUgYW5kIGRpcmVjdGlvbiBhdCB3aGljaCB0aGUgZnJhbWVzIHdlcmUgcXVldWVkL2FjdGl2YXRlZC4KLQotICAiZmx1c2giLCBHX1RZUEVfQk9PTEVBTgotICAgICBJZiB0aGUgcXVldWVkL2FjdGl2YXRlZCBmcmFtZXMgd2lsbCBiZSBmbHVzaGVkLgotCi0gICJpbnRlcm1lZGlhdGUiLCBHX1RZUEVfQk9PTEVBTgotICAgICBJZiB0aGlzIGlzIGFuIGludGVybWVkaWF0ZSBzdGVwIG9wZXJhdGlvbiB0aGF0IHF1ZXVlZC9hY3RpdmF0ZWQuCi0KLVRoZSBTVEVQX1NUQVJUIG1lc3NhZ2UgaXMgZW1pdHRlZCAyIHRpbWVzOgotIAotICAqIGZpcnN0IHdoZW4gYW4gZWxlbWVudCByZWNlaXZlZCB0aGUgU1RFUCBldmVudCBhbmQgcXVldWVkIGl0LiBUaGUgImFjdGl2ZSIKLSAgICBmaWVsZCB3aWxsIGJlIEZBTFNFIGluIHRoaXMgY2FzZS4KLQotICAqIHNlY29uZCB3aGVuIHRoZSBzdGVwIG9wZXJhdGlvbiBzdGFydGVkIGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkLiBUaGUgImFjdGl2ZSIKLSAgICBmaWVsZCBpcyBUUlVFIGluIHRoaXMgY2FzZS4gQWZ0ZXIgdGhpcyBtZXNzYWdlIGlzIGVtaXR0ZWQsIHRoZSBhcHBsaWNhdGlvbgotICAgIGNhbiBxdWV1ZSBhIG5ldyBzdGVwIG9wZXJhdGlvbi4KLQotVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXNzYWdlIGlzIHRvIGZpbmQgb3V0IGhvdyBtYW55IGVsZW1lbnRzIHBhcnRpY2lwYXRlIGluIHRoZQotc3RlcCBvcGVyYXRpb24gYW5kIHRvIHF1ZXVlIG5ldyBzdGVwIG9wZXJhdGlvbnMgYXQgdGhlIGVhcmxpZXN0IHBvc3NpYmxlCi1tb21lbnQuCi0KLUEgbmV3IEdTVF9NRVNTQUdFX1NURVBfRE9ORSBtZXNzYWdlIGlzIGNyZWF0ZWQuIEl0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcKLWZpZWxkczoKLQotICAiZm9ybWF0IiwgR1NUX1RZUEVfRk9STUFUCi0gICAgIFRoZSBmb3JtYXQgb2YgdGhlIHN0ZXAgdW5pdHMgdGhhdCBjb21wbGV0ZWQuCi0KLSAgImFtb3VudCIsIEdfVFlQRV9VSU5UNjQKLSAgICAgVGhlIGFtb3VudCBvZiB1bml0cyB0aGF0IHdlcmUgc3RlcHBlZC4KLQotICAicmF0ZSIsIEdfVFlQRV9ET1VCTEUKLSAgICAgVGhlIHJhdGUgYW5kIGRpcmVjdGlvbiBhdCB3aGljaCB0aGUgZnJhbWVzIHdlcmUgc3RlcHBlZC4KLQotICAiZmx1c2giLCBHX1RZUEVfQk9PTEVBTgotICAgICBJZiB0aGUgc3RlcHBlZCBmcmFtZXMgd2VyZSBmbHVzaGVkLgotCi0gICJpbnRlcm1lZGlhdGUiLCBHX1RZUEVfQk9PTEVBTgotICAgICBJZiB0aGlzIGlzIGFuIGludGVybWVkaWF0ZSBzdGVwIG9wZXJhdGlvbiB0aGF0IGNvbXBsZXRlZC4KLQotICAiZHVyYXRpb24iLCBHX1RZUEVfVUlOVDY0Ci0gICAgIFRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgc3RlcHBlZCB1bml0cyBpbiBHU1RfRk9STUFUX1RJTUUuCi0KLSAgImVvcyIsIEdfVFlQRV9CT09MRUFOCi0gICAgIFRoZSBzdGVwIGVuZGVkIGJlY2F1c2Ugb2YgRU9TLgotCi1UaGUgbWVzc2FnZSBpcyBlbWl0dGVkIGJ5IHRoZSBlbGVtZW50IHRoYXQgcGVyZm9ybXMgdGhlIHN0ZXAgb3BlcmF0aW9uLiBUaGUKLXB1cnBvc2UgaXMgdG8gcmV0dXJuIHRoZSBkdXJhdGlvbiBpbiBHU1RfRk9STUFUX1RJTUUgb2YgdGhlIHN0ZXBwZWQgbWVkaWEuIFRoaXMKLWVzcGVjaWFsbHkgaW50ZXJlc3RpbmcgdG8gYWxpZ24gb3RoZXIgc3RyZWFtIGluIGNhc2Ugb2Ygc3RlcHBpbmcgZnJhbWVzIG9uIHRoZQotdmlkZW8gc2luayBlbGVtZW50LgotCi0KLURpcmVjdGlvbiBzd2l0Y2gKLX5+fn5+fn5+fn5+fn5+fn4KLQotV2hlbiBxdWlja2x5IHN3aXRjaGluZyBiZXR3ZWVuIGEgZm9yd2FyZHMgYW5kIGEgYmFja3dhcmRzIHN0ZXAgb2YsIGZvciBleGFtcGxlLAotb25lIHZpZGVvIGZyYW1lLCB3ZSBuZWVkIGVpdGhlcjoKLQotICBhKSBpc3N1ZSBhIG5ldyBzZWVrIHRvIGNoYW5nZSB0aGUgZGlyZWN0aW9uIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gIGIpIGNhY2hlIGEgY2VydGFpbiBudW1iZXIgb2Ygc3RlcHBlZCBmcmFtZXMgYW5kIHdhbGsgdGhlIGNhY2hlLgotCi1vcHRpb24gYSkgbWlnaHQgYmUgdmVyeSBzbG93LgotRm9yIG9wdGlvbiBiKSB3ZSB3b3VsZCBpZGVhbGx5IGxpa2UgdG8gb2ZmbG9hZCB0aGlzIGNhY2hpbmcgZnVuY3Rpb25hbGl0eSB0byBhCi1zZXBhcmF0ZSBlbGVtZW50LCB3aGljaCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gZm9yd2FyZCB0aGUgU1RFUCBldmVudCB1cHN0cmVhbS4KLUl0J3MgdW5jbGVhciBob3cgdGhpcyBjb3VsZCB3b3JrIGluIGEgZ2VuZXJpYyB3YXkuIFdoYXQgaXMgYSBkZW11eGVyIHN1cHBvc2VkCi10byBkbyB3aGVuIGl0IHJlY2VpdmVkIGEgc3RlcCBldmVudD8gYSBmbHVzaGluZyBzZWVrIHRvIHdoYXQgc3RyZWFtIHBvc2l0aW9uPwotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGJpbi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNjJhOWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1nc3RiaW4udHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLUdzdEJpbgotLS0tLS0tCi0KLUdzdEJpbiBpcyBhIGNvbnRhaW5lciBlbGVtZW50IGZvciBvdGhlciBHc3RFbGVtZW50cy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZQotdG8gZ3JvdXAgZWxlbWVudHMgdG9nZXRoZXIgc28gdGhhdCB0aGV5IGNhbiBiZSB0cmVhdGVkIGFzIG9uZSBzaW5nbGUgCi1Hc3RFbGVtZW50LiBBIEdzdEJpbiBwcm92aWRlcyBhIEdzdEJ1cyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBjb2xsYXRlcyBtZXNzYWdlcwotZnJvbSB0aGVtLgotCi1BZGQvcmVtb3ZpbmcgZWxlbWVudHMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiBhIGJpbiBpcyB0byBhZGQgYW5kIHJlbW92ZSBHc3RFbGVtZW50cyB0by9mcm9tIGl0LgotZ3N0X2Jpbl9hZGQoKSBhbmQgZ3N0X2Jpbl9yZW1vdmUoKSBwZXJmb3JtIHRoZXNlIG9wZXJhdGlvbnMgcmVzcGVjdGl2ZWx5LgotCi1UaGUgYmluIG1haW50YWlucyBhIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAgd2l0aCBpdHMgZWxlbWVudHMgKHNlZSBwYXJ0LQotcmVsYXRpb25zLnR4dCkuCi0KLQotUmV0cmlldmluZyBlbGVtZW50cwotfn5+fn5+fn5+fn5+fn5+fn5+fgotCi1Hc3RCaW4gcHJvdmlkZXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIHRvIHJldHJpZXZlIG9uZSBvciBtb3JlIGNoaWxkcmVuIGZyb20KLWl0c2VsZi4gQSBmZXcgZXhhbXBsZXMgb2YgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uczoKLQotZ3N0X2Jpbl9nZXRfYnlfbmFtZSgpIHJldHJpZXZlcyBhbiBlbGVtZW50IGJ5IG5hbWUuCi0KLWdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cygpIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gYWxsIHRoZSBjaGlsZHJlbi4KLQotCi1lbGVtZW50IG1hbmFnZW1lbnQKLX5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgbW9zdCBpbXBvcnRhbnQgZnVuY3Rpb24gb2YgdGhlIEdzdEJpbiBpcyB0byBkaXN0cmlidXRlIGFsbCBHc3RFbGVtZW50Ci1vcGVyYXRpb25zIG9uIGl0c2VsZiB0byBhbGwgb2YgaXRzIGNoaWxkcmVuLiBUaGlzIGluY2x1ZGVzOgotCi0gLSBzdGF0ZSBjaGFuZ2VzCi0gLSBpbmRleCBnZXQvc2V0Ci0gLSBjbG9jayBnZXQvc2V0Ci0KLVRoZSBzdGF0ZSBjaGFuZ2UgZGlzdHJpYnV0aW9uIGlzIHRoZSBtb3N0IGNvbXBsZXggYW5kIGlzIGV4cGxhaW5lZCBpbiAKLXBhcnQtc3RhdGVzLnR4dC4KLQotR3N0QnVzCi1+fn5+fn4KLQotVGhlIEdzdEJpbiBjcmVhdGVzIGEgR3N0QnVzIGZvciBpdHMgY2hpbGRyZW4gYW5kIGRpc3RyaWJ1dGVzIGl0IHdoZW4gY2hpbGQKLWVsZW1lbnRzIGFyZSBhZGRlZCB0byB0aGUgYmluLiBUaGUgYmluIGF0dGFjaGVzIGEgc3luYyBoYW5kbGVyIHRvIHJlY2VpdmUKLW1lc3NhZ2VzIGZyb20gY2hpbGRyZW4uIFRoZSBidXMgZm9yIHJlY2VpdmluZyBtZXNzYWdlcyBmcm9tIGNoaWxkcmVuIGlzIAotZGlzdGluY3QgZnJvbSB0aGUgYmluJ3Mgb3duIGV4dGVybmFsbHktdmlzaWJsZSBHc3RCdXMuIAotCi1NZXNzYWdlcyByZWNlaXZlZCBmcm9tIGNoaWxkcmVuIGFyZSBmb3J3YXJkZWQgaW50YWN0IG9udG8gdGhlIGJpbidzIAotZXh0ZXJuYWwgbWVzc2FnZSBidXMsIGV4Y2VwdCBmb3IgRU9TIGFuZCBTRUdNRU5UX1NUQVJUL0RPTkUgd2hpY2ggYXJlIAotaGFuZGxlZCBzcGVjaWFsbHkuCi0KLUFTWU5DX1NUQVJUL0FTWU5DX1NUT1AgbWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSB0aGUgY2hpbGRyZW4gYXJlIHVzZWQgdG8KLXRyaWdnZXIgYSByZWNhbGN1bGF0aW9uIG9mIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBiaW4sIGFzIGRlc2NyaWJlZCBpbiAKLXBhcnQtc3RhdGVzLnR4dC4KLQotVGhlIGFwcGxpY2F0aW9uIGNhbiByZXRyaWV2ZSB0aGUgZXh0ZXJuYWwgR3N0QnVzIGFuZCBpbnRlZ3JhdGUgaXQgaW4gdGhlCi1tYWlubG9vcCBvciBpdCBjYW4ganVzdCBfcG9wKCkgbWVzc2FnZXMgb2ZmIGluIGl0cyBvd24gdGhyZWFkLgotCi1XaGVuIGEgYmluIGdvZXMgdG8gUkVBRFkgaXQgd2lsbCBjbGVhciBhbGwgY2FjaGVkIG1lc3NhZ2VzLgotCi0KLUVPUwotfn5+Ci0KLVRoZSBzaW5rIGVsZW1lbnRzIHdpbGwgcG9zdCBhbiBFT1MgbWVzc2FnZSBvbiB0aGUgYnVzIHdoZW4gdGhleSByZWFjaCBFT1MuIFRoZQotRU9TIG1lc3NhZ2UgaXMgb25seSBwb3N0ZWQgdG8gdGhlIGJ1cyB3aGVuIHRoZSBzaW5rIGVsZW1lbnQgaXMgaW4gUExBWUlORy4KLQotVGhlIGJpbiBjb2xsZWN0cyBhbGwgRU9TIG1lc3NhZ2VzIGFuZCBmb3J3YXJkcyBpdCB0byB0aGUgYXBwbGljYXRpb24gYXMKLXNvb24gYXMgYWxsIHRoZSBzaW5rcyBoYXZlIHBvc3RlZCBhbiBFT1MuCi0KLVRoZSBsaXN0IG9mIHF1ZXVlZCBFT1MgbWVzc2FnZXMgaXMgY2xlYXJlZCB3aGVuIHRoZSBiaW4gZ29lcyB0byBQQVVTRUQKLWFnYWluLiBUaGlzIG1lYW5zIHRoYXQgYWxsIGVsZW1lbnRzIHNob3VsZCByZXBvc3QgdGhlIEVPUyBtZXNzYWdlIHdoZW4gZ29pbmcKLXRvIFBMQVlJTkcgYWdhaW4uCi0KLQotU0VHTUVOVF9TVEFSVC9ET05FCi1+fn5+fn5+fn5+fn5+fn5+fn4KLQotQSBiaW4gY29sbGVjdHMgU0VHTUVOVF9TVEFSVCBtZXNzYWdlcyBidXQgZG9lcyBub3QgcG9zdCB0aGVtIHRvIHRoZSBhcHBsaWNhdGlvbi4KLUl0IGNvdW50cyB0aGUgbnVtYmVyIG9mIFNFR01FTlRfU1RBUlQgbWVzc2FnZXMgYW5kIHBvc3RzIGEgU0VHTUVOVF9TVE9QIG1lc3NhZ2UKLXRvIHRoZSBhcHBsaWNhdGlvbiB3aGVuIGFuIGVxdWFsIG51bWJlciBvZiBTRUdNRU5UX1NUT1AgbWVzc2FnZXMgd2hlcmUgcmVjZWl2ZWQuCi0KLVRoZSBjYWNoZWQgU0VHTUVOVF9TVEFSVC9TVE9QIG1lc3NhZ2VzIGFyZSBjbGVhcmVkIHdoZW4gZ29pbmcgdG8gUkVBRFkuCi0KLQotRFVSQVRJT04KLX5+fn5+fn5+Ci0KLVdoZW4gYSBEVVJBVElPTiBxdWVyeSBpcyBwZXJmb3JtZWQgb24gYSBiaW4sIGl0IHdpbGwgZm9yd2FyZCB0aGUgcXVlcnkgdG8gYWxsCi1pdHMgc2luayBlbGVtZW50cy4gVGhlIGJpbiB3aWxsIGNhbGN1bGF0ZSB0aGUgdG90YWwgZHVyYXRpb24gYXMgdGhlIE1BWCBvZiBhbGwKLXJldHVybmVkIGR1cmF0aW9ucyBhbmQgd2lsbCB0aGVuIGNhY2hlIHRoZSByZXN1bHQgc28gdGhhdCBhbnkgZnVydGhlciBxdWVyeSBjYW4KLXVzZSB0aGUgY2FjaGVkIHZlcnNpb24uIFRoZSByZWFzb24gZm9yIGNhY2hpbmcgdGhlIHJlc3VsdCBpcyBiZWNhdXNlIHRoZQotZHVyYXRpb24gb2YgYSBzdHJlYW0gdHlwaWNhbGx5IGRvZXMgbm90IGNoYW5nZSB0aGF0IG9mdGVuLgotCi1BIEdTVF9NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQgcG9zdGVkIGJ5IGFuIGVsZW1lbnQgd2lsbCBjbGVhciB0aGUgY2FjaGVkCi1kdXJhdGlvbiB2YWx1ZSBzbyB0aGF0IHRoZSBiaW4gd2lsbCBxdWVyeSB0aGUgc2lua3MgYWdhaW4uIFRoaXMgbWVzc2FnZSBpcwotdHlwaWNhbGx5IHBvc3RlZCBieSBlbGVtZW50cyB0aGF0IGNhbGN1bGF0ZSB0aGUgZHVyYXRpb24gb2YgdGhlIHN0cmVhbSBiYXNlZAotb24gc29tZSBhdmVyYWdlIGJpdHJhdGUsIHdoaWNoIG1pZ2h0IGNoYW5nZSB3aGlsZSBwbGF5aW5nIHRoZSBzdHJlYW0uIFRoZQotRFVSQVRJT05fQ0hBTkdFRCBtZXNzYWdlIGlzIHBvc3RlZCB0byB0aGUgYXBwbGljYXRpb24sIHdoaWNoIGNhbiB0aGVuIGZldGNoCi10aGUgdXBkYXRlZCBEVVJBVElPTi4KLQotCi1TdWJjbGFzc2luZwotfn5+fn5+fn5+fn4KLQotU3ViY2xhc3NlcyBvZiBHc3RCaW4gYXJlIGZyZWUgdG8gaW1wbGVtZW50IHRoZWlyIG93biBhZGQvcmVtb3ZlIGltcGxlbWVudGF0aW9ucy4KLUl0IGlzIGEgZ29vZCBpZGVhIHRvIHVwZGF0ZSB0aGUgR0xpc3Qgb2YgY2hpbGRyZW4gc28gdGhhdCB0aGUgX2l0ZXJhdGUoKSBmdW5jdGlvbnMKLWNhbiBzdGlsbCBiZSB1c2VkIGlmIHRoZSBjdXN0b20gYmluIGFsbG93cyBhY2Nlc3MgdG8gaXRzIGNoaWxkcmVuLgotCi1BbnkgYmluIHN1YmNsYXNzIGNhbiBhbHNvIGltcGxlbWVudCBhIGN1c3RvbSBtZXNzYWdlIGhhbmRsZXIgYnkgb3ZlcnJpZGluZyB0aGUKLWRlZmF1bHQgbWVzc2FnZSBoYW5kbGVyLgotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGJ1cy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGJ1cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlODA2NGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1nc3RidXMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotR3N0QnVzCi0tLS0tLS0KLQotVGhlIEdzdEJ1cyBpcyBhbiBvYmplY3QgcmVzcG9uc2libGUgZm9yIGRlbGl2ZXJpbmcgR3N0TWVzc2FnZXMgaW4KLWEgZmlyc3QtaW4gZmlyc3Qtb3V0IHdheSBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkcyB0byB0aGUgYXBwbGljYXRpb24uCi0KLVNpbmNlIHRoZSBhcHBsaWNhdGlvbiB0eXBpY2FsbHkgb25seSB3YW50cyB0byBkZWFsIHdpdGggZGVsaXZlcnkgb2YgdGhlc2UKLW1lc3NhZ2VzIGZyb20gb25lIHRocmVhZCwgdGhlIEdzdEJ1cyB3aWxsIG1hcnNoYWxsIHRoZSBtZXNzYWdlcyBiZXR3ZWVuCi1kaWZmZXJlbnQgdGhyZWFkcy4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgdGhlIGFjdHVhbCBzdHJlYW1pbmcgb2YgbWVkaWEKLWlzIGRvbmUgaW4gYW5vdGhlciB0aHJlYWRzIChzdHJlYW1pbmcgdGhyZWFkcykgdGhhbiB0aGUgYXBwbGljYXRpb24uIEl0IGlzCi1hbHNvIGltcG9ydGFudCB0byBub3QgYmxvY2sgdGhlIHN0cmVhbWluZyB0aHJlYWRzIHdoaWxlIHRoZSBhcHBsaWNhdGlvbiBkZWFscwotd2l0aCB0aGUgbWVzc2FnZS4KLQotVGhlIEdzdEJ1cyBwcm92aWRlcyBzdXBwb3J0IGZvciBHU291cmNlIGJhc2VkIG5vdGlmaWNhdGlvbnMuIFRoaXMgbWFrZXMgaXQKLXBvc3NpYmxlIHRvIGhhbmRsZSB0aGUgZGVsaXZlcnkgaW4gdGhlIGdsaWIgbWFpbmxvb3AuIERpZmZlcmVudCBHU291cmNlcyAKLWNhbiBiZSBhZGRlZCB0byB0aGUgc2FtZSBiaW4gcHJvdmlkZWQgdGhleSBsaXN0ZW4gdG8gZGlmZmVyZW50IG1lc3NhZ2UgdHlwZXMuCi0KLUEgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGJ1cyB3aXRoIHRoZSBnc3RfYnVzX3Bvc3QoKSBtZXRob2QuIFdpdGggdGhlCi1nc3RfYnVzX3BlZWsoKSBhbmQgX3BvcCgpIG1ldGhvZHMgb25lIGNhbiBsb29rIGF0IG9yIHJldHJpZXZlIGEgcHJldmlvdXNseQotcG9zdGVkIG1lc3NhZ2UuCi0KLVRoZSBidXMgY2FuIGJlIHBvbGxlZCB3aXRoIHRoZSBnc3RfYnVzX3BvbGwoKSBtZXRob2QuIFRoaXMgbWV0aG9kcyBibG9ja3MKLXVwIHRvIHRoZSBzcGVjaWZpZWQgdGltZW91dCB2YWx1ZSB1bnRpbCBvbmUgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlcyB0eXBlcwotaXMgcG9zdGVkIG9uIHRoZSBidXMuIFRoZSBhcHBsaWNhdGlvbiBjYW4gdGhlbiBfcG9wKCkgdGhlIG1lc3NhZ2VzIGZyb20gdGhlCi1idXMgdG8gaGFuZGxlIHRoZW0uIAotCi1JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGdldCBtZXNzYWdlcyBmcm9tIHRoZSBidXMgd2l0aG91dCBhbnkgdGhyZWFkIAotbWFyc2hhbGxpbmcgd2l0aCB0aGUgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKCkgbWV0aG9kLiBUaGlzIG1ha2VzIGl0Ci1wb3NzaWJsZSB0byByZWFjdCB0byBhIG1lc3NhZ2UgaW4gdGhlIHNhbWUgdGhyZWFkIHRoYXQgcG9zdGVkIHRoZQotbWVzc2FnZSBvbiB0aGUgYnVzLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGFibGUKLXRvIGRlYWwgd2l0aCBtZXNzYWdlcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLgotCi1JZiBubyBtZXNzYWdlcyBhcmUgcG9wcGVkIGZyb20gdGhlIGJ1cyB3aXRoIGVpdGhlciBhIEdTb3VyY2Ugb3IgZ3N0X2J1c19wb3AoKSwKLXRoZXkgcmVtYWluIG9uIHRoZSBidXMuCi0KLVdoZW4gYSBwaXBlbGluZSBvciBiaW4gZ29lcyBmcm9tIFJFQURZIGludG8gTlVMTCBzdGF0ZSwgaXQgd2lsbCBzZXQgaXRzIGJ1cwotdG8gZmx1c2hpbmcsIGllLiB0aGUgYnVzIHdpbGwgZHJvcCBhbGwgZXhpc3RpbmcgYW5kIG5ldyBtZXNzYWdlcyBvbiB0aGUgYnVzLAotVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBidXMgbWVzc2FnZXMgaG9sZCByZWZlcmVuY2VzIHRvIHRoZSBiaW4vcGlwZWxpbmUKLW9yIGl0cyBlbGVtZW50cywgc28gdGhlcmUgYXJlIGNpcmN1bGFyIHJlZmVyZW5jZXMgdGhhdCBuZWVkIHRvIGJlIGJyb2tlbiBpZgotb25lIGV2ZXIgd2FudHMgdG8gYmUgYWJsZSB0byBkZXN0cm95IGEgYmluIG9yIHBpcGVsaW5lIHByb3Blcmx5LgotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGVsZW1lbnQudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1nc3RlbGVtZW50LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxZmZjNi4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdGVsZW1lbnQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotR3N0RWxlbWVudAotLS0tLS0tLS0tLQotCi1UaGUgRWxlbWVudCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgb2JqZWN0IGluIHRoZSBlbnRpcmUgR1N0cmVhbWVyIHN5c3RlbSwgYXMgaXQKLWRlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgcGlwZWxpbmUuICBFbGVtZW50cyBpbmNsdWRlIHNvdXJjZXMsIGZpbHRlcnMsCi1zaW5rcywgYW5kIGNvbnRhaW5lcnMgKEJpbnMpLiAgVGhleSBtYXkgYmUgYW4gaW50cmluc2ljIHBhcnQgb2YgdGhlIGNvcmUKLUdTdHJlYW1lciBsaWJyYXJ5LCBvciBtYXkgYmUgbG9hZGVkIGZyb20gYSBwbHVnaW4uICBJbiBzb21lIGNhc2VzIHRoZXkncmUgZXZlbgotZmFicmljYXRlZCBmcm9tIGNvbXBsZXRlbHkgZGlmZmVyZW50IHN5c3RlbXMgKHNlZSB0aGUgTEFEU1BBIHBsdWdpbikuICBUaGV5Ci1hcmUgZ2VuZXJhbGx5IGNyZWF0ZWQgZnJvbSBhIEdzdEVsZW1lbnRGYWN0b3J5LCB3aGljaCB3aWxsIGJlIGNvdmVyZWQgaW4KLWFub3RoZXIgY2hhcHRlciwgYnV0IGZvciB0aGUgaW50cmluc2ljIHR5cGVzIHRoZXkgY2FuIGJlIGNyZWF0ZWQgd2l0aCBzcGVjaWZpYwotZnVuY3Rpb25zLgotCi1FbGVtZW50cyBjb250YWlucyBHc3RQYWRzIChhbHNvIGNvdmVyZWQgaW4gYW5vdGhlciBjaGFwdGVyKSwgd2hpY2ggYXJlCi1zdWJzZXF1ZW50bHkgdXNlZCB0byBjb25uZWN0IHRoZSBFbGVtZW50cyB0b2dldGhlciB0byBmb3JtIGEgcGlwZWxpbmUgY2FwYWJsZQotb2YgcGFzc2luZyBhbmQgcHJvY2Vzc2luZyBkYXRhLiAgVGhleSBoYXZlIGEgcGFyZW50LCB3aGljaCBtdXN0IGJlIGFub3RoZXIKLUVsZW1lbnQuICBUaGlzIGFsbG93cyBkZWVwbHkgbmVzdGVkIHBpcGVsaW5lcywgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZgotImJsYWNrLWJveCIgbWV0YS1lbGVtZW50cy4KLQotTmFtZQotfn5+fgotCi1BbGwgZWxlbWVudHMgYXJlIG5hbWVkLCBhbmQgd2hpbGUgdGhleSBzaG91bGQgaWRlYWxseSBiZSB1bmlxdWUgaW4gYW55IGdpdmVuCi1waXBlbGluZSwgdGhleSBkbyBub3QgaGF2ZSB0byBiZS4gIFRoZSBvbmx5IGd1YXJhbnRlZWQgdW5pcXVlIG5hbWUgZm9yIGFuCi1lbGVtZW50IGlzIGl0cyBjb21wbGV0ZSBwYXRoIGluIHRoZSBvYmplY3QgaGllcmFyY2h5LiAgSW4gb3RoZXIgd29yZHMsIGFuCi1lbGVtZW50J3MgbmFtZSBpcyB1bmlxdWUgaW5zaWRlIGl0cyBwYXJlbnQuICAoVGhpcyBmb2xsb3dzIGZyb20gR3N0T2JqZWN0J3MKLW5hbWUgZXhwbGFuYXRpb24pCi0KLVRoaXMgdW5pcXVlbmVzcyBpcyBndWFyYW50ZWVkIHRocm91Z2ggYWxsIGZ1bmN0aW9ucyB3aGVyZSBlaXRoZXIgcGFyZW50YWdlCi1vciBuYW1lIG9mIGFuIGVsZW1lbnQgaXMgY2hhbmdlZC4KLQotCi1QYWRzCi1+fn5+Ci0KLUdzdFBhZHMgYXJlIHRoZSBwcm9wZXJ0eSBvZiBhIGdpdmVuIEdzdEVsZW1lbnQuICBUaGV5IHByb3ZpZGUgdGhlIGNvbm5lY3Rpb24KLWNhcGFiaWxpdHksIHdpdGggYWxsb3dpbmcgYXJiaXRyYXJ5IHN0cnVjdHVyZSBpbiB0aGUgZ3JhcGguICBGb3IgYW55IEVsZW1lbnQKLWJ1dCBhIHNvdXJjZSBvciBzaW5rLCB0aGVyZSB3aWxsIGJlIGF0IGxlYXN0IDIgUGFkcyBvd25lZCBieSB0aGUgRWxlbWVudC4gIAotVGhlc2UgcGFkcyBhcmUgc3RvcmVkIGluIGEgc2luZ2xlIEdMaXN0IHdpdGhpbiB0aGUgRWxlbWVudC4gIFNldmVyYWwgY291bnRlcnMKLWFyZSBrZXB0IGluIG9yZGVyIHRvIGFsbG93IHF1aWNrZXIgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgdHlwZSBhbmQgcHJvcGVydGllcyBvZgotYSBnaXZlbiBFbGVtZW50LgotCi1QYWRzIG1heSBiZSBhZGRlZCB0byBhbiBlbGVtZW50IHdpdGggX2FkZF9wYWQuICBSZXRyaWV2YWwgaXMgdmlhIF9nZXRfc3RhdGljX3BhZCgpLAotd2hpY2ggb3BlcmF0ZXMgb24gdGhlIG5hbWUgb2YgdGhlIFBhZCAodGhlIHVuaXF1ZSBrZXkpLiAgVGhpcyBtZWFucyB0aGF0IGFsbAotUGFkcyBvd25lZCBieSBhIGdpdmVuIEVsZW1lbnQgbXVzdCBoYXZlIHVuaXF1ZSBuYW1lcy4KLUEgcG9pbnRlciB0byB0aGUgR0xpc3Qgb2YgcGFkcyBtYXkgYmUgb2J0YWluZWQgd2l0aCBfaXRlcmF0ZV9wYWRzLiAKLQotZ3N0X2VsZW1lbnRfYWRkX3BhZChlbGVtZW50LHBhZHMpOgotCVNldHMgdGhlIGVsZW1lbnQgYXMgdGhlIHBhcmVudCBvZiB0aGUgcGFkLCB0aGVuIGFkZHMgdGhlIHBhZCB0byB0aGUKLQllbGVtZW50J3MgbGlzdCBvZiBwYWRzLCBrZWVwaW5nIHRoZSBjb3VudHMgb2YgdG90YWwsIHNyYywgYW5kIHNpbmsgcGFkcwotCXVwIHRvIGRhdGUuICBFbWl0cyB0aGUgIm5ld19wYWQiIHNpZ25hbCB3aXRoIHRoZSBwYWQgYXMgYXJndW1lbnQuIAotCUZhaWxzIGlmIGVpdGhlciB0aGUgZWxlbWVudCBvciBwYWQgYXJlIGVpdGhlciBOVUxMIG9yIG5vdCB3aGF0IHRoZXkKLQljbGFpbSB0byBiZS4gIFNob3VsZCBmYWlsIGlmIHRoZSBwYWQgYWxyZWFkeSBoYXMgYSBwYXJlbnQuIFNob3VsZCBmYWlsCi0JaWYgdGhlIHBhZCBpcyBhbHJlYWR5IG93bmVkIGJ5IHRoZSBlbGVtZW50LiAgU2hvdWxkIGZhaWwgaWYgdGhlcmUncwotCWFscmVhZHkgYSBwYWQgYnkgdGhhdCBuYW1lIGluIHRoZSBsaXN0IG9mIHBhZHMuCi0KLXBhZCA9IGdzdF9lbGVtZW50X2dldF9wYWQoZWxlbWVudCwicGFkbmFtZSIpOgotCVNlYXJjaGVzIHRocm91Z2ggdGhlIGxpc3Qgb2YgcGFkcyAKLQotCi1HaG9zdCBQYWRzCi1+fn5+fn5+fn5+Ci0KLU1vcmUgaW5mbyBpbiBwYXJ0LWdzdGdob3N0cGFkLnR4dC4KLQotU3RhdGUKLX5+fn5+Ci0KLUFuIGVsZW1lbnQgaGFzIGEgc3RhdGUuIE1vcmUgaW5mbyBpbiBwYXJ0LXN0YXRlcy50eHQuCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtZ3N0Z2hvc3RwYWQudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0M2Y2ZWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1nc3RnaG9zdHBhZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0NTEgKzAsMCBAQAotR2hvc3RwYWRzCi0tLS0tLS0tLS0KLQotR2hvc3RQYWRzIGFyZSB1c2VkIHRvIGJ1aWxkIGNvbXBsZXggY29tcG91bmQgZWxlbWVudHMgb3V0IG9mCi1leGlzdGluZyBlbGVtZW50cy4gVGhleSBhcmUgdXNlZCB0byBleHBvc2UgaW50ZXJuYWwgZWxlbWVudCBwYWRzCi1vbiB0aGUgY29tcGxleCBlbGVtZW50LgotCi1Tb21lIGRlc2lnbiByZXF1aXJlbWVudHMKLQotICAtIE11c3QgbG9vayBsaWtlIGEgcmVhbCBHc3RQYWQgb24gYm90aCBzaWRlcy4KLSAgLSB0YXJnZXQgb2YgR2hvc3RwYWQgbXVzdCBiZSBjaGFuZ2VhYmxlCi0gIC0gdGFyZ2V0IGNhbiBiZSBpbml0aWFsbHkgTlVMTAotCi0qIGEgR2hvc3RQYWQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSBwcml2YXRlIEdzdFByb3h5UGFkIGNsYXNzOgotCi0KLSAgIEdzdFByb3h5UGFkCi0gICAoLS0tLS0tLS0tLS0tLS0tLS0tKQotICAgfCBHc3RQYWQgICAgICAgICAgIHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS18Ci0gICB8IEdzdFBhZCAqdGFyZ2V0ICAgfAotICAgKC0tLS0tLS0tLS0tLS0tLS0tLSkKLSAgIHwgR3N0UGFkICppbnRlcm5hbCB8Ci0gICAoLS0tLS0tLS0tLS0tLS0tLS0tKQotCi0KLSAgIEdzdEdob3N0UGFkCi0gICAoLS0tLS0tLS0tLS0tLS0tLS0tKSAgIC1cCi0gICB8IEdzdFBhZCAgICAgICAgICAgfCAgICB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tfCAgICB8ICAgICAgICAgICAgICAKLSAgIHwgR3N0UGFkICp0YXJnZXQgICB8ICAgICA+IEdzdFByb3h5UGFkCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tfCAgICB8Ci0gICB8IEdzdFBhZCAqaW50ZXJuYWwgfCAgICB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tfCAgIC0vCi0gICB8IDxwcml2YXRlIGRhdGE+ICAgfCAgICAgCi0gICAoLS0tLS0tLS0tLS0tLS0tLS0tKSAgICAgCi0KLSAgQSBHc3RHaG9zdFBhZCAoWCkgaXMgX2Fsd2F5c18gY3JlYXRlZCB0b2dldGhlciB3aXRoIGEgR3N0UHJveHlQYWQgKFkpLiAKLSAgVGhlIGludGVybmFsIHBhZCBwb2ludGVycyBhcmUgc2V0IHRvIHBvaW50IHRvIHRoZSBlYWNob3RoZXIuIFRoZSAKLSAgR3N0UHJveHlQYWQgcGFpcnMgaGF2ZSBvcHBvc2l0ZSBkaXJlY3Rpb25zLCB0aGUgR3N0R2hvc3RQYWQgaGFzIHRoZSBzYW1lCi0gIGRpcmVjdGlvbiBhcyB0aGUgKGZ1dHVyZSkgZ2hvc3RlZCBwYWQgKHRhcmdldCkuCi0KLQotCSgtIFggLS0tLS0tLS0pCi0JfCAgICAgICAgICAgIHwKLQl8IHRhcmdldCAqICAgfAotCXwtLS0tLS0tLS0tLS18Ci0gICAgICAgIHwgaW50ZXJuYWwgKi0tLS0rICAgCi0JKC0tLS0tLS0tLS0tLSkgIHwKLSAgICAgICAgICBeICAgICAgICAgICAgIFYKLQkgIHwgICgtIFkgLS0tLS0tLS0pCi0JICB8ICB8ICAgICAgICAgICAgfAotCSAgfCAgfCB0YXJnZXQgKiAgIHwKLQkgIHwgIHwtLS0tLS0tLS0tLS18Ci0gICAgICAgICAgKy0tLS0qIGludGVybmFsIHwgICAgIAotCSAgICAgKC0tLS0tLS0tLS0tLSkKLQotICBXaGljaCB3ZSB3aWxsIGFiYnJldmlhdGUgdG86Ci0KLQkoLSBYIC0tLS0tLS0tKSAgICAgIAotCXwgICAgICAgICAgICB8ICAgICAKLQl8IHRhcmdldCAqLS0tLS0tLS0tPi8vCi0JKC0tLS0tLS0tLS0tLSkgICAgIAotICAgICAgICAgICAgIHwgICAgICAgICAgICAKLSAJICAgICgtIFkgLS0tLS0tLS0pIAotICAJICAgIHwgdGFyZ2V0ICotLS0tLT4vLwotCSAgICAoLS0tLS0tLS0tLS0tKQotCi0gIFRoZSBHc3RHaG9zdFBhZCAoWCkgaXMgYWxzbyBzZXQgYXMgdGhlIHBhcmVudCBvZiB0aGUgR3N0UHJveHlQYWQgKFkpLgotCi0gIFRoZSB0YXJnZXQgaXMgYSBwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCBwYWRzIHBlZXIuIEl0IGlzIGFuIG9wdGltaXNhdGlvbiB0bwotICBxdWlja2x5IGdldCB0byB0aGUgcGVlciBvZiBhIGdob3N0cGFkIHdpdGhvdXQgaGF2aW5nIHRvIGRlcmVmZXJlbmNlIHRoZQotICBpbnRlcm5hbC0+cGVlci4KLQotICBTb21lIHVzZSBjYXNlIGZvbGxvdyB3aXRoIGEgZGVzY3JpcHRpb24gb2YgaG93IHRoZSBkYXRhc3RydWN0dXJlCi0gIGlzIG1vZGlmaWVkLgotCi0KLSogQ3JlYXRpbmcgYSBnaG9zdHBhZCB3aXRoIGEgdGFyZ2V0OgotCi0gICBnc3RfZ2hvc3RfcGFkX25ldyAoY2hhciAqbmFtZSwgR3N0UGFkICp0YXJnZXQpCi0KLSAgIDEpIGNyZWF0ZSBuZXcgR3N0R2hvc3RQYWQgWCArIEdzdFByb3h5UGFkIFkKLSAgIDIpIFggbmFtZSBzZXQgdG8gQG5hbWUKLSAgIDMpIFggZGlyZWN0aW9uIGlzIHRoZSBzYW1lIGFzIHRoZSB0YXJnZXQsIFkgaXMgb3Bwb3NpdGUuCi0gICA0KSB0aGUgdGFyZ2V0IG9mIFggaXMgc2V0IHRvIEB0YXJnZXQKLSAgIDUpIFkgaXMgbGlua2VkIHRvIEB0YXJnZXQKLSAgIDYpIGxpbmsvdW5saW5rIGFuZCBhY3RpdmF0ZSBmdW5jdGlvbnMgYXJlIHNldCB1cAotICAgICAgb24gR3N0R2hvc3RQYWQuCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0tLS0tLS0KLQkoLSBYIC0tLS0tLS0tKSAgICAgICAgICAgICAgICB8Ci0JfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfC0tLS0tLSkKLQl8IHRhcmdldCAqLS0tLS0tLS0tLS0tLS0tLS0tPiB8IHNpbmsgfAotCSgtLS0tLS0tLS0tLS0pICAgICAgIC0tLS0tLS0+IHwtLS0tLS0pCi0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgLyAgICAgICAgICgtLS0tLS0tLS0tLS0tLQotIAkgICAgKC0gWSAtLS0tLS0tLSkgLyAocGFkIGxpbmspCi0gICAgICAvLzwtLS0tLSogdGFyZ2V0ICAgfC8gICAgICAKLQkgICAgKC0tLS0tLS0tLS0tLSkKLQkKLSAgIC0gQXV0b21hdGljYWxseSB0YWtlcyBzYW1lIGRpcmVjdGlvbiBhcyB0YXJnZXQuCi0gICAtIHRhcmdldCBpcyBmaWxsZWQgaW4gYXV0b21hdGljYWxseS4KLQotCi0qIENyZWF0aW5nIGEgZ2hvc3RwYWQgd2l0aG91dCBhIHRhcmdldAotCi0gICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgKGNoYXIgKm5hbWUsIEdzdFBhZERpcmVjdGlvbiBkaXIpCi0KLSAgIDEpIGNyZWF0ZSBuZXcgR3N0R2hvc3RQYWQgWCArIEdzdFByb3h5UGFkIFkKLSAgIDIpIFggbmFtZSBzZXQgdG8gQG5hbWUKLSAgIDMpIFggZGlyZWN0aW9uIGlzIEBkaXIKLSAgIDUpIGxpbmsvdW5saW5rIGFuZCBhY3RpdmF0ZSBmdW5jdGlvbnMgYXJlIHNldCB1cAotICAgICAgb24gR3N0R2hvc3RQYWQuCi0KLQkoLSBYIC0tLS0tLS0tKSAgICAgIAotCXwgICAgICAgICAgICB8ICAgICAKLQl8IHRhcmdldCAqLS0tLS0tLS0tPi8vCi0JKC0tLS0tLS0tLS0tLSkgICAgIAotICAgICAgICAgICAgIHwgICAgICAgICAgICAKLSAJICAgICgtIFkgLS0tLS0tLS0pIAotICAJICAgIHwgdGFyZ2V0ICotLS0tLT4vLwotCSAgICAoLS0tLS0tLS0tLS0tKQotCi0gICAtIGFsbG93cyBmb3Igc2V0dGluZyB0aGUgdGFyZ2V0IGxhdGVyCi0KLQotKiBTZXR0aW5nIHRhcmdldCBvbiBhbiB1bnRhcmdldHRlZCB1bmxpbmtlZCBnaG9zdHBhZAotCi0gICBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKGNoYXIgKm5hbWUsIEdzdFBhZCAqbmV3dGFyZ2V0KQotCi0JKC0gWCAtLS0tLS0tLSkgICAgICAKLQl8ICAgICAgICAgICAgfCAgICAgCi0JfCB0YXJnZXQgKi0tLS0tLS0tLT4vLwotCSgtLS0tLS0tLS0tLS0pICAgICAKLSAgICAgICAgICAgICB8ICAgICAgICAgICAgCi0gCSAgICAoLSBZIC0tLS0tLS0tKSAKLSAgCSAgICB8IHRhcmdldCAqLS0tLS0+Ly8KLQkgICAgKC0tLS0tLS0tLS0tLSkKLQotICAgMSkgYXNzZXJ0IGRpcmVjdGlvbiBvZiBuZXd0YXJnZXQgPT0gWCBkaXJlY3Rpb24KLSAgIDIpIHRhcmdldCBpcyBzZXQgdG8gbmV3dGFyZ2V0Ci0gICAzKSBpbnRlcm5hbCBwYWQgWSBpcyBsaW5rZWQgdG8gbmV3dGFyZ2V0Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0tLS0tLS0tLS0tLS0tCi0JKC0gWCAtLS0tLS0tLSkgICAgICAgICAgICAgICAgfAotCXwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwtLS0tLS0pCi0JfCB0YXJnZXQgKi0tLS0tLS0tLS0tLS0tLS0tLT4gfCBzaW5rIHwKLQkoLS0tLS0tLS0tLS0tKSAgICAgICAtLS0tLS0tPiB8LS0tLS0tKQotICAgICAgICAgICAgIHwgICAgICAgICAgICAgIC8gICAgICAgICAoLS0tLS0tLS0tLS0tLS0KLSAJICAgICgtIFkgLS0tLS0tLS0pIC8gKHBhZCBsaW5rKQotICAgICAgLy88LS0tLS0qIHRhcmdldCAgIHwvICAgICAgCi0JICAgICgtLS0tLS0tLS0tLS0pCi0KLSogU2V0dGluZyB0YXJnZXQgb24gYSB0YXJnZXR0ZWQgdW5saW5rZWQgZ2hvc3RwYWQKLQotICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChjaGFyICpuYW1lLCBHc3RQYWQgKm5ld3RhcmdldCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0tLS0tLS0KLQkoLSBYIC0tLS0tLS0tKSAgICAgICAgICAgICAgICB8Ci0JfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfC0tLS0tLS0pCi0JfCB0YXJnZXQgKi0tLS0tLS0tLS0tLS0tLS0tLT4gfCBzaW5rMSB8Ci0JKC0tLS0tLS0tLS0tLSkgICAgICAgLS0tLS0tLT4gfC0tLS0tLS0pCi0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgLyAgICAgICAgICgtLS0tLS0tLS0tLS0tLQotIAkgICAgKC0gWSAtLS0tLS0tLSkgLyAocGFkIGxpbmspCi0gICAgICAvLzwtLS0tLSogdGFyZ2V0ICAgfC8gICAgICAKLQkgICAgKC0tLS0tLS0tLS0tLSkKLQotICAgMSkgYXNzZXJ0IGRpcmVjdGlvbiBvZiBuZXd0YXJnZXQgKHNpbmsyKSA9PSBYIGRpcmVjdGlvbgotICAgMikgdW5saW5rIGludGVybmFsIHBhZCBZIGFuZCBvbGR0YXJnZXQKLSAgIDMpIHRhcmdldCBpcyBzZXQgdG8gbmV3dGFyZ2V0IChzaW5rMikKLSAgIDQpIGludGVybmFsIHBhZCBZIGlzIGxpbmtlZCB0byBuZXd0YXJnZXQKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0tLS0tLS0KLQkoLSBYIC0tLS0tLS0tKSAgICAgICAgICAgICAgICB8Ci0JfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfC0tLS0tLS0pCi0JfCB0YXJnZXQgKi0tLS0tLS0tLS0tLS0tLS0tLT4gfCBzaW5rMiB8Ci0JKC0tLS0tLS0tLS0tLSkgICAgICAgLS0tLS0tLT4gfC0tLS0tLS0pCi0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgLyAgICAgICAgICgtLS0tLS0tLS0tLS0tLQotIAkgICAgKC0gWSAtLS0tLS0tLSkgLyAocGFkIGxpbmspCi0gICAgICAvLzwtLS0tLSogdGFyZ2V0ICAgfC8gICAgICAKLQkgICAgKC0tLS0tLS0tLS0tLSkKLQotKiBMaW5raW5nIGEgcGFkIHRvIGFuIHVudGFyZ2V0dGVkIGdob3N0cGFkOgotCi0gIGdzdF9wYWRfbGluayAoc3JjLCBYKQotCi0JICAgICAgKC0gWCAtLS0tLS0tLSkgICAgICAKLQkgICAgICB8ICAgICAgICAgICAgfCAgICAgCi0JICAgICAgfCB0YXJnZXQgKi0tLS0tLS0tLT4vLwotCSAgICAgICgtLS0tLS0tLS0tLS0pICAgICAKLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgCi0gCSAgICAgICAgICAoLSBZIC0tLS0tLS0tKSAKLSAgCSAgICAgICAgICB8IHRhcmdldCAqLS0tLS0+Ly8KLQkgICAgICAgICAgKC0tLS0tLS0tLS0tLSkKLSAgICAgLS0tLS0tLSkKLSAgICAgICAgICAgIHwKLSAgICAgICgtLS0tLXwKLSAgICAgIHwgc3JjIHwKLSAgICAgICgtLS0tLXwKLSAgICAgLS0tLS0tLSkKLQotICAgICBYIGlzIGEgc2luayBHc3RHaG9zdFBhZCB3aXRob3V0IGEgdGFyZ2V0LiBUaGUgaW50ZXJuYWwgR3N0UHJveHlQYWQgWSBoYXMKLSAgICAgdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHRoZSBzcmMgcGFkIChwZWVyKS4KLQotICAgIDEpIGxpbmsgZnVuY3Rpb24gaXMgY2FsbGVkCi0gICAgICBhKSBZIGRpcmVjdGlvbiBpcyBzYW1lIGFzIEBzcmMKLSAgICAgIGIpIFkgdGFyZ2V0IGlzIHNldCB0byBAc3JjCi0gICAgICBjKSBZIGlzIGFjdGl2YXRlZCBpbiB0aGUgc2FtZSBtb2RlIGFzIFgKLSAgICAgIGQpIGNvcmUgbWFrZXMgbGluayBmcm9tIEBzcmMgdG8gWAotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAoLSBYIC0tLS0tLS0tKQotICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfCB0YXJnZXQgKi0tLS0tPi8vCi0gICAgICAgICAgICAgICAgICAgICAgICA+KC0tLS0tLS0tLS0tLSkKLSAgICAgICAocmVhbCBwYWQgbGluaykgLyAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAvICAgICAgKC0gWSAtLS0tLS0pCi0gICAgICAgICAgICAgICAgICAgICAvICAgIC0tLS0tKiB0YXJnZXQgfAotICAgICAgICAgIC0tLS0tLS0pICAvICAgIC8gICAoLS0tLS0tLS0tLSkKLSAgICAgICAgICAgICAgICAgfCAvICAgIC8gICAgICAgICAgICAgICAgIAotICAgICAgICAgICAoLS0tLS18LyAgICAvICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgIHwgc3JjIHw8LS0tLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICgtLS0tLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgLS0tLS0tLSkKLQotCi0qIExpbmtpbmcgYSBwYWQgdG8gYSB0YXJnZXR0ZWQgZ2hvc3RwYWQ6Ci0KLSAgICBnc3RfcGFkX2xpbmsgKHNyYywgWCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICgtIFggLS0tLS0tLS0pICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICB8LS0tLS0tKQotICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGFyZ2V0ICotLS0tLS0tLS0tLS0tPnwgc2luayB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKC0tLS0tLS0tLS0tLSkgICAgICAgICA+fC0tLS0tLSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgLyAoLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAvCi0gICAgICAgICAgLS0tLS0tLSkgICAgICAgICAgICAgICAgICB8ICAgICAgIC8gKHJlYWwgcGFkIGxpbmspCi0JCSB8ICAgICAgICAgICAgKC0gWSAtLS0tLS0pIC8KLSAgICAgICAgICAgKC0tLS0tfCAgICAgICAgICAgIHwgICAgICAgICAgfC8KLSAgICAgICAgICAgfCBzcmMgfCAgICAgICAvLzwtLS0tKiB0YXJnZXQgfAotICAgICAgICAgICAoLS0tLS18ICAgICAgICAgICAgKC0tLS0tLS0tLS0pCi0gICAgICAgICAgLS0tLS0tLSkKLQotCi0gICAgMSkgbGluayBmdW5jdGlvbiBpcyBjYWxsZWQKLSAgICAgIGEpIFkgZGlyZWN0aW9uIGlzIHNhbWUgYXMgQHNyYwotICAgICAgYikgWSB0YXJnZXQgaXMgc2V0IHRvIEBzcmMKLSAgICAgIGMpIFkgaXMgYWN0aXZhdGVkIGluIHRoZSBzYW1lIG1vZGUgYXMgWAotICAgICAgZCkgY29yZSBtYWtlcyBsaW5rIGZyb20gQHNyYyB0byBYCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAoLSBYIC0tLS0tLS0tKSAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfC0tLS0tLSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB8IHRhcmdldCAqLS0tLS0tLS0tLS0tLT58IHNpbmsgfAotICAgICAgICAgICAgICAgICAgICAgICAgPigtLS0tLS0tLS0tLS0pICAgICAgICAgPnwtLS0tLS0pCi0gICAgICAgKHJlYWwgcGFkIGxpbmspIC8gICAgICAgICAgICB8ICAgICAgICAgIC8gKC0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICB8ICAgICAgICAgLwotICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgfCAgICAgICAgLwotICAgICAgICAgIC0tLS0tLS0pICAvICAgICAgICAgICAgICAgfCAgICAgICAvIChyZWFsIHBhZCBsaW5rKQotCQkgfCAvICAgICAgICAgICgtIFkgLS0tLS0tKSAvCi0gICAgICAgICAgICgtLS0tLXwvICAgICAgICAgICB8ICAgICAgICAgIHwvCi0gICAgICAgICAgIHwgc3JjIHw8LS0tLS0tLS0tLS0tLSogdGFyZ2V0IHwKLSAgICAgICAgICAgKC0tLS0tfCAgICAgICAgICAgICgtLS0tLS0tLS0tKQotICAgICAgICAgIC0tLS0tLS0pCi0KLQotKiBTZXR0aW5nIHRhcmdldCBvbiB1bnRhcmdldHRlZCBsaW5rZWQgZ2hvc3RwYWQ6Ci0KLSAgIGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoY2hhciAqbmFtZSwgR3N0UGFkICpuZXd0YXJnZXQpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKC0gWCAtLS0tLS0tLSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKLSAgICAgICAgICAgICAgICAgICAgICAgICB8IHRhcmdldCAqLS0tLS0tPi8vCi0gICAgICAgICAgICAgICAgICAgICAgICA+KC0tLS0tLS0tLS0tLSkKLSAgICAgICAocmVhbCBwYWQgbGluaykgLyAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgIHwKLSAgICAgICAgICAtLS0tLS0tKSAgLyAgICAgICAgICAgICAgIHwKLQkJIHwgLyAgICAgICAgICAoLSBZIC0tLS0tLSkKLSAgICAgICAgICAgKC0tLS0tfC8gICAgICAgICAgIHwgICAgICAgICAgfAotICAgICAgICAgICB8IHNyYyB8PC0tLS0tLS0tLS0tLS0qIHRhcmdldCB8Ci0gICAgICAgICAgICgtLS0tLXwgICAgICAgICAgICAoLS0tLS0tLS0tLSkKLSAgICAgICAgICAtLS0tLS0tKQotCi0gICAxKSBhc3NlcnQgZGlyZWN0aW9uIG9mIEBuZXd0YXJnZXQgPT0gWCBkaXJlY3Rpb24KLSAgIDIpIFggdGFyZ2V0IGlzIHNldCB0byBAbmV3dGFyZ2V0Ci0gICAzKSBZIGlzIGxpbmtlZCB0byBAbmV3dGFyZ2V0Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAoLSBYIC0tLS0tLS0tKSAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfC0tLS0tLSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB8IHRhcmdldCAqLS0tLS0tLS0tLS0tLT58IHNpbmsgfAotICAgICAgICAgICAgICAgICAgICAgICAgPigtLS0tLS0tLS0tLS0pICAgICAgICAgPnwtLS0tLS0pCi0gICAgICAgKHJlYWwgcGFkIGxpbmspIC8gICAgICAgICAgICB8ICAgICAgICAgIC8gKC0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICB8ICAgICAgICAgLwotICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgfCAgICAgICAgLwotICAgICAgICAgIC0tLS0tLS0pICAvICAgICAgICAgICAgICAgfCAgICAgICAvIChyZWFsIHBhZCBsaW5rKQotCQkgfCAvICAgICAgICAgICgtIFkgLS0tLS0tKSAvCi0gICAgICAgICAgICgtLS0tLXwvICAgICAgICAgICB8ICAgICAgICAgIHwvCi0gICAgICAgICAgIHwgc3JjIHw8LS0tLS0tLS0tLS0tLSogdGFyZ2V0IHwKLSAgICAgICAgICAgKC0tLS0tfCAgICAgICAgICAgICgtLS0tLS0tLS0tKQotICAgICAgICAgIC0tLS0tLS0pCi0KLSogU2V0dGluZyB0YXJnZXQgb24gdGFyZ2V0dGVkIGxpbmtlZCBnaG9zdHBhZDoKLQotICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChjaGFyICpuYW1lLCBHc3RQYWQgKm5ld3RhcmdldCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICgtIFggLS0tLS0tLS0pICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICB8LS0tLS0tLSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB8IHRhcmdldCAqLS0tLS0tLS0tLS0tLT58IHNpbmsxIHwKLSAgICAgICAgICAgICAgICAgICAgICAgID4oLS0tLS0tLS0tLS0tKSAgICAgICAgID58LS0tLS0tLSkKLSAgICAgICAocmVhbCBwYWQgbGluaykgLyAgICAgICAgICAgIHwgICAgICAgICAgLyAoLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgIHwgICAgICAgICAvCi0gICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgICB8ICAgICAgICAvCi0gICAgICAgICAgLS0tLS0tLSkgIC8gICAgICAgICAgICAgICB8ICAgICAgIC8gKHJlYWwgcGFkIGxpbmspCi0JCSB8IC8gICAgICAgICAgKC0gWSAtLS0tLS0pIC8KLSAgICAgICAgICAgKC0tLS0tfC8gICAgICAgICAgIHwgICAgICAgICAgfC8KLSAgICAgICAgICAgfCBzcmMgfDwtLS0tLS0tLS0tLS0tKiB0YXJnZXQgfAotICAgICAgICAgICAoLS0tLS18ICAgICAgICAgICAgKC0tLS0tLS0tLS0pCi0gICAgICAgICAgLS0tLS0tLSkKLQotICAgMSkgYXNzZXJ0IGRpcmVjdGlvbiBvZiBAbmV3dGFyZ2V0ID09IFggZGlyZWN0aW9uCi0gICAyKSBZIGFuZCBYIHRhcmdldCBhcmUgdW5saW5rZWQKLSAgIDIpIFggdGFyZ2V0IGlzIHNldCB0byBAbmV3dGFyZ2V0Ci0gICAzKSBZIGlzIGxpbmtlZCB0byBAbmV3dGFyZ2V0Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAoLSBYIC0tLS0tLS0tKSAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfC0tLS0tLS0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgfCB0YXJnZXQgKi0tLS0tLS0tLS0tLS0+fCBzaW5rMiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICA+KC0tLS0tLS0tLS0tLSkgICAgICAgICA+fC0tLS0tLS0pCi0gICAgICAgKHJlYWwgcGFkIGxpbmspIC8gICAgICAgICAgICB8ICAgICAgICAgIC8gKC0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICB8ICAgICAgICAgLwotICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgfCAgICAgICAgLwotICAgICAgICAgIC0tLS0tLS0pICAvICAgICAgICAgICAgICAgfCAgICAgICAvIChyZWFsIHBhZCBsaW5rKQotCQkgfCAvICAgICAgICAgICgtIFkgLS0tLS0tKSAvCi0gICAgICAgICAgICgtLS0tLXwvICAgICAgICAgICB8ICAgICAgICAgIHwvCi0gICAgICAgICAgIHwgc3JjIHw8LS0tLS0tLS0tLS0tLSogdGFyZ2V0IHwKLSAgICAgICAgICAgKC0tLS0tfCAgICAgICAgICAgICgtLS0tLS0tLS0tKQotICAgICAgICAgIC0tLS0tLS0pCi0KLQotQWN0aXZhdGlvbgotfn5+fn5+fn5+fgotCi1Tb21ldGltZXMgZ2hvc3QgcGFkcyBzaG91bGQgcHJveHkgYWN0aXZhdGlvbiBmdW5jdGlvbnMuIFRoaXMgdGhpbmdpZQotYXR0ZW1wdHMgdG8gZXhwbGFpbiBob3cgaXQgc2hvdWxkIHdvcmsgaW4gdGhlIGRpZmZlcmVudCBjYXNlcy4KLQotICArLS0tKyAgICAgKy0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLSsgICAgICAgKy0tLS0rCi0gIHwgQSArLS0tLS0rIEIgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQyAgfC0tLS0tLS0rIEQgIHwKLSAgKy0tLSsgICAgICstLS09KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0tLS0rICAgICAgICstLS0tKwotICAgICAgICAgICAgICArLS09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09LSsKLSAgICAgICAgICAgICAgfCAgKz0tLS0rICAgKy0tLS0rICArLS0tLSsgICstLS09KyB8Ci0gICAgICAgICAgICAgIHwgIHwgYSAgKy0tLSsgYiAgPT09PSAgYyArLS0rIGQgIHwgfAotICAgICAgICAgICAgICB8ICArLS0tLSsgICArLS0tLSsgICstLS0tKyAgKy0tLS0rIHwKLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICBzdGF0ZSBjaGFuZ2UgZ29lcyBmcm9tIHJpZ2h0IHRvIGxlZnQKLSAgICAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFsbCBvZiB0aGUgbGFiZWxlZCBib3hlcyBhcmUgcGFkcy4gVGhlIGRhc2hlcyAoLS0tKSBzaG93IHBhZCBsaW5rcywgYW5kCi10aGUgZG91YmxlLWxpbmVzICg9PT0pIGFyZSBpbnRlcm5hbCBjb25uZWN0aW9ucy4gVGhlIGJveCBhcm91bmQgYSwgYiwgYywKLWFuZCBkIGlzIGEgYmluLiBCIGFuZCBDIGFyZSBnaG9zdCBwYWRzLCBhbmQgYSBhbmQgZCBhcmUgcHJveHkgcGFkcy4gVGhlCi1hcnJvdyByZXByZXNlbnRzIHRoZSBkaXJlY3Rpb24gb2YgYSBzdGF0ZSBjaGFuZ2UgYWxnb3JpdGhtLiBOb3QgY291bnRpbmcKLXRoZSBiaW4sIHRoZXJlIGFyZSB0aHJlZSBlbGVtZW50cyBpbnZvbHZlZCBoZXJlIC0tIHRoZSBwYXJlbnQgb2YgRCwgdGhlCi1wYXJlbnQgb2YgQSwgYW5kIHRoZSBwYXJlbnQgb2YgYiBhbmQgYy4KLQotTm93LCBpbiB0aGUgc3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gUEFVU0VELCBhc3N1bWluZyB0aGUgcGlwZWxpbmUKLWRvZXMgbm90IGhhdmUgYSBsaXZlIHNvdXJjZSwgYWxsIG9mIHRoZSBwYWRzIHdpbGwgZW5kIHVwIGFjdGl2YXRlZCBhdAotdGhlIGVuZC4gVGhlcmUgYXJlIDQgcG9zc2libGUgYWN0aXZhdGlvbiBtb2RlczoKLQotICAxKSBBRCBhbmQgYWIgaW4gUFVTSCwgY2QgYW5kIENEIGluIFBVU0gKLSAgMikgQUQgYW5kIGFiIGluIFBVU0gsIGNkIGFuZCBDRCBpbiBQVUxMCi0gIDMpIEFEIGFuZCBhYiBpbiBQVUxMLCBjZCBhbmQgQ0QgaW4gUFVTSAotICA0KSBBRCBhbmQgYWIgaW4gUFVMTCwgY2QgYW5kIENEIGluIFBVTEwKLQotV2hlbiBhY3RpdmF0aW5nICgxKSwgdGhlIHN0YXRlIGNoYW5nZSBhbGdvcml0aG0gd2lsbCBmaXJzdCB2aXNpdCB0aGUKLXBhcmVudCBvZiBEIGFuZCBhY3RpdmF0ZSBEIGluIHB1c2ggbW9kZS4gVGhlbiBpdCB2aXNpdHMgdGhlIGJpbi4gVGhlIGJpbgotd2lsbCBmaXJzdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGl0cyBjaGlsZCBiZWZvcmUgYWN0aXZhdGluZyBpdHMgcGFkcy4KLVRoYXQgbWVhbnMgYyB3aWxsIGJlIGFjdGl2YXRlZCBpbiBwdXNoIG1vZGUuIFsqXSBBdCB0aGlzIHBvaW50LCBkIGFuZCBDCi1zaG91bGQgYWxzbyBiZSBhY3RpdmUgaW4gcHVzaCBtb2RlLCBiZWNhdXNlIGl0IGNvdWxkIGJlIHRoYXQgYWN0aXZhdGluZwotYyBpbiBwdXNoIG1vZGUgc3RhcnRzIGEgdGhyZWFkLCB3aGljaCBzdGFydHMgcHVzaGluZyB0byBwYWRzIHdoaWNoCi1hcmVuJ3QgcmVhZHkgeWV0LiBUaGVuIGIgaXMgYWN0aXZhdGVkIGluIHB1c2ggbW9kZS4gVGhlbiwgdGhlIGJpbgotYWN0aXZhdGVzIEMgaW4gcHVzaCBtb2RlLCB3aGljaCBzaG91bGQgYWxyZWFkeSBiZSBpbiBwdXNoIG1vZGUsIHNvCi1ub3RoaW5nIGlzIGRvbmUuIEl0IHRoZW4gYWN0aXZhdGVzIEIgaW4gcHVzaCBtb2RlLCB3aGljaCBhY3RpdmF0ZXMgYiBpbgotcHVzaCBtb2RlLCBidXQgaXQncyBhbHJlYWR5IHRoZXJlLCB0aGVuIGFjdGl2YXRlcyBhIGluIHB1c2ggbW9kZSBhcwotd2VsbC4gVGhlIG9yZGVyIG9mIGFjdGl2YXRpbmcgYSBhbmQgYiBkb2VzIG5vdCBtYXR0ZXIgaW4gdGhpcyBjYXNlLgotVGhlbiwgZmluYWxseSwgdGhlIHN0YXRlIGNoYW5nZSBhbGdvcml0aG0gbW92ZXMgdG8gdGhlIHBhcmVudCBvZiBBLAotYWN0aXZhdGVzIEEgaW4gcHVzaCBtb2RlLCBhbmQgZGF0YWZsb3cgYmVnaW5zLgotCi1bKl0gTm90IHlldCBpbXBsZW1lbnRlZC4KLQotQWN0aXZhdGlvbiBtb2RlICgyKSBpcyBpbXBsYXVzaWJsZSwgc28gd2UgY2FuIGlnbm9yZSBpdCBmb3Igbm93LiBUaGF0Ci1sZWF2ZXMgdXMgd2l0aCB0aGUgcmVzdC4KLQotKDMpIGlzIHRoZSBzYW1lIGFzICgxKSB1bnRpbCB5b3UgZ2V0IHRvIGFjdGl2YXRpbmcgYi4gQWN0aXZhdGluZyBiIHdpbGwKLXByb3h5IGRpcmVjdGx5IHRvIGFjdGl2YXRpbmcgYSwgd2hpY2ggd2lsbCBhY3RpdmF0ZSBCIGFuZCBBIGFzIHdlbGwuCi1UaGVuIHdoZW4gdGhlIHN0YXRlIGNoYW5nZSBhbGdvcml0aG0gZ2V0cyB0byBCIGFuZCBBIGl0IHNlZXMgdGhhdCB0aGV5Ci1hcmUgYWxyZWFkeSBhY3RpdmUsIHNvIGl0IGlnbm9yZXMgdGhlbS4KLQotU2ltaWxhcmx5IGluICg0KSwgYWN0aXZhdGluZyBEIHdpbGwgY2F1c2UgdGhlIGFjdGl2YXRpb24gb2YgYWxsIG9mIHRoZQotcmVzdCBvZiB0aGUgcGFkcywgaW4gdGhpcyBvcmRlcjogQyBkIGMgYiBhIEIgQS4gVGhlbiB3aGVuIHRoZSBzdGF0ZQotY2hhbmdlIGdldHMgdG8gdGhlIG90aGVyIGVsZW1lbnRzIHRoZXkgYXJlIGFscmVhZHkgYWN0aXZlLCBhbmQgaW4gZmFjdAotZGF0YSBmbG93IGlzIGFscmVhZHkgb2NjdXJyaW5nLgotCi1TbywgZnJvbSB0aGVzZSBzY2VuYXJpb3MsIHdlIGNhbiBkaXN0aWxsIGhvdyBnaG9zdCBwYWQgYWN0aXZhdGlvbgotZnVuY3Rpb25zIHNob3VsZCB3b3JrOgotCi1HaG9zdCBzb3VyY2UgcGFkcyAoZS5nLiBDKToKLSAgcHVzaDoKLSAgICBjYWxsZWQgYnk6IGVsZW1lbnQgc3RhdGUgY2hhbmdlIGhhbmRsZXIKLSAgICBiZWhhdmlvcjoganVzdCByZXR1cm4gVFJVRQotICBwdWxsOgotICAgIGNhbGxlZCBieTogcGVlcidzIGFjdGl2YXRlcHVsbAotICAgIGJlaGF2aW9yOiBjaGFuZ2UgdGhlIGludGVybmFsIHBhZCwgd2hpY2ggcHJveGllcyB0byBpdHMgcGVlciBlLmcuIEMKLSAgICAgICAgY2hhbmdlcyBkIHdoaWNoIGNoYW5nZXMgYy4KLQotSW50ZXJuYWwgc2luayBwYWRzIChlLmcuIGQpOgotICBwdXNoOiAKLSAgICBjYWxsZWQgYnk6IG5vYm9keSAoZG9lc24ndCBzZWVtIHBvc3NpYmxlKQotICAgIGJlaGF2aW9yOiBuL2EKLSAgcHVsbDoKLSAgICBjYWxsZWQgYnk6IGdob3N0IHBhZAotICAgIGJlaGF2aW9yOiBwcm94eSB0byBwZWVyIGZpcnN0Ci0KLUludGVybmFsIHNyYyBwYWRzIChlLmcuIGEpOgotICBwdXNoOgotICAgIGNhbGxlZCBieTogZ2hvc3QgcGFkCi0gICAgYmVoYXZpb3I6IGFjdGl2YXRlIHBlZXIgaW4gcHVzaCBtb2RlCi0gIHB1bGw6Ci0gICAgY2FsbGVkIGJ5OiBwZWVyJ3MgYWN0aXZhdGVwdWxsCi0gICAgYmVoYXZpb3I6IHByb3h5IHRvIGdob3N0IHBhZCwgd2hpY2ggcHJveGllcyB0byBpdHMgcGVlciAoZS5nLiBhCi0gICAgICAgIGNhbGxzIEIgd2hpY2ggY2FsbHMgQSkKLQotR2hvc3Qgc2luayBwYWRzIChlLmcuIEIpOgotICBwdXNoOgotICAgIGNhbGxlZCBieTogZWxlbWVudCBzdGF0ZSBjaGFuZ2UgaGFuZGxlcgotICAgIGJlaGF2aW9yOiBjaGFuZ2UgdGhlIGludGVybmFsIHBhZCwgd2hpY2ggcHJveGllcyB0byBwZWVyIChlLmcuIEIKLSAgICAgICAgY2hhbmdlcyBhIHdoaWNoIGNoYW5nZXMgYikKLSAgcHVsbDoKLSAgICBjYWxsZWQgYnk6IGludGVybmFsIHBhZAotICAgIGJlaGF2aW9yOiBwcm94eSB0byBwZWVyCi0KLQotSXQgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBoYXZlIGFjdGl2YXRpb24gZnVuY3Rpb25zIG9uIHByb3h5IHBhZHMKLXRoYXQgYXJlbid0IHBhcnQgb2YgYSBnaG9zdCBwYWQgYXJyYW5nZW1lbnQuCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdG9iamVjdC50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdG9iamVjdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3M2RjN2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1nc3RvYmplY3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotR3N0T2JqZWN0Ci0tLS0tLS0tLS0KLQotVGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBlbnRpcmUgR1N0cmVhbWVyIGhpZXJhcmNoeSBpcyB0aGUgR3N0T2JqZWN0LgotCi1QYXJlbnRhZ2UKLX5+fn5+fn5+fgotCi1BIHBvaW50ZXIgaXMgYXZhaWxhYmxlIHRvIHN0b3JlIHRoZSBjdXJyZW50IHBhcmVudCBvZiB0aGUgb2JqZWN0LiAgVGhpcyBpcyBvbmUKLW9mIHRoZSB0d28gZnVuZGFtZW50YWwgcmVxdWlyZW1lbnRzIGZvciBhIGhpZXJhcmNoaWNhbCBzeXN0ZW0gc3VjaCBhcyBHU3RyZWFtZXIKLShmb3IgdGhlIG90aGVyLCByZWFkIHVwIG9uIEdzdEJpbikuICBUaHJlZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkOgotX3NldF9wYXJlbnQoKSwgX2dldF9wYXJlbnQoKSwgYW5kIF91bnBhcmVudCgpLiAgVGhlIHRoaXJkIGlzIHJlcXVpcmVkIGJlY2F1c2UKLXRoZXJlIGlzIGFuIGV4cGxpY2l0IGNoZWNrIGluIF9zZXRfcGFyZW50KCk6IGFuIG9iamVjdCBtdXN0IG5vdCBhbHJlYWR5IGhhdmUgYQotcGFyZW50IGlmIHlvdSB3aXNoIHRvIHNldCBvbmUuICBZb3UgbXVzdCB1bnBhcmVudCB0aGUgb2JqZWN0IGZpcnN0LiAgVGhpcwotYWxsb3dzIGZvciBuZXcgYWRkaXRpb25zIGxhdGVyLgotCi0tIEdzdE9iamVjdCdzIHRoYXQgY2FuIGJlIHBhcmVudGVkOgotICBHc3RFbGVtZW50IChpbnNpZGUgYSBiaW4pCi0gIEdzdFBhZCAoaW5zaWRlIGFuIGVsZW1lbnQpCi0KLQotTmFtaW5nCi1+fn5+fn4KLQotLSBuYW1lcyBvZiBvYmplY3RzIGNhbm5vdCBiZSBjaGFuZ2VkIHdoZW4gdGhleSBhcmUgcGFyZW50ZWQgCi0tIG5hbWVzIG9mIG9iamVjdHMgc2hvdWxkIGJlIHVuaXF1ZSBhY3Jvc3MgcGFyZW50Ci0tIHNldF9uYW1lKCkgY2FuIGZhaWwgYmVjYXVzZSBvZiB0aGlzCi0tIGFzIGNhbiBnc3RfZWxlbWVudF9hZGRfcGFkKCkvZ3N0X2Jpbl9hZGRfZWxlbWVudCgpCi0tIGdzdF9vYmplY3Rfc2V0X25hbWUoKSBvbmx5IGNoYW5nZXMgdGhlIG9iamVjdCdzIG5hbWUKLQotLSBvYmplY3RzIGFsc28gaGF2ZSBhIG5hbWVfcHJlZml4IHRoYXQgaXMgdXNlZCB0byBwcmVmaXggdGhlIG9iamVjdCBuYW1lCi0gIGR1cmluZyBkZWJ1Z2dpbmcgYW5kIGlkZW50aWZpY2F0aW9uCi0tIHRoZXJlIGFyZSBvYmplY3Qtc3BlY2lmaWMgc2V0X25hbWUncygpIHdoaWNoIGFsc28gc2V0IHRoZSBuYW1lX3ByZWZpeAotICBvbiB0aGUgb2JqZWN0LiAgVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB0byBnaXZlIHRoZSBvYmplY3QKLSAgYSBtb3JlIGlkZW50aWZpYWJsZSBuYW1lLiAgVHlwaWNhbGx5IGEgcGFyZW50IHdpbGwgY2FsbCBfc2V0X25hbWVfcHJlZml4Ci0gIG9uIGNoaWxkcmVuLCB0YWtpbmcgYSBsb2NrIG9uIHRoZW0gdG8gZG8gc28uCi0KLQotTG9ja2luZwotfn5+fn5+fgotCi1UaGUgR3N0T2JqZWN0IGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgcHJpbWl0aXZlcyB0byBsb2NrIHRoZSBvYmplY3QgaW4gYQotdGhyZWFkLXNhZmUgbWFubmVyLiAgVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJvdmlkZSBnZW5lcmFsIHRocmVhZC1zYWZldHkgYXMKLW5lZWRlZC4gIEhvd2V2ZXIsIHRoaXMgbG9jayBpcyBnZW5lcmljLCBpLmUuIGl0IGNvdmVycyB0aGUgd2hvbGUgb2JqZWN0LgotCi1UaGUgb2JqZWN0IExPQ0sgaXMgYSB2ZXJ5IGxvd2xldmVsIGxvY2sgdGhhdCBzaG91bGQgb25seSBiZSBoZWxkIHRvIGFjY2VzcwotdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGZvciBzaG9ydCBwZXJpb2RzIG9mIGNvZGUuCi0KLUFsbCBtZW1iZXJzIG9mIHRoZSBHc3RPYmplY3Qgc3RydWN0dXJlIG1hcmtlZCBhcwotLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBMT0NLICovCi1hcmUgcHJvdGVjdGVkIGJ5IHRoaXMgbG9jay4gIFRoZXNlIG1lbWJlcnMgY2FuIG9ubHkgYmUgYWNjZXNzZWQgZm9yIHJlYWRpbmcKLW9yIHdyaXRpbmcgd2hpbGUgdGhlIGxvY2sgaXMgaGVsZC4gQWxsIG1lbWJlcnMgc2hvdWxkIGJlIGNvcGllZCBvciByZWZmZWQKLWlmIHRoZXkgYXJlIHVzZWQgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBMT0NLLgotCi1Ob3RlIHRoYXQgdGhpcyBkb2VzICpub3QqIG1lYW4gdGhhdCBubyBvdGhlciB0aHJlYWQgY2FuIG1vZGlmeSB0aGUgb2JqZWN0IGF0Ci10aGUgc2FtZSB0aW1lIHRoYXQgdGhlIGxvY2sgaXMgaGVsZC4gIEl0IG9ubHkgbWVhbnMgdGhhdCBhbnkgdHdvIHNlY3Rpb25zIG9mCi1jb2RlIHRoYXQgb2JleSB0aGUgbG9jayBhcmUgZ3VhcmFudGVlZCB0byBub3QgYmUgcnVubmluZyBzaW11bHRhbmVvdXNseS4gICJUaGUKLWxvY2sgaXMgdm9sdW50YXJ5IGFuZCBjb29wZXJhdGl2ZSIuCi0KLVRoaXMgbG9jayB3aWxsIGlkZWFsbHkgYmUgdXNlZCBmb3IgcGFyZW50YWdlLCBmbGFncyBhbmQgbmFtaW5nLCB3aGljaCBpcwotcmVhc29uYWJsZSwgc2luY2UgdGhleSBhcmUgdGhlIG9ubHkgcG9zc2libGUgdGhpbmdzIHRvIHByb3RlY3QgaW4gdGhlCi1Hc3RPYmplY3QuCi0KLQotTG9ja2luZyBvcmRlcgotfn5+fn5+fn5+fn5+fgotCi1JbiBwYXJlbnQtY2hpbGQgc2l0dWF0aW9ucyB0aGUgbG9jayBvZiB0aGUgcGFyZW50IG11c3QgYWx3YXlzIGJlIHRha2VuIGZpcnN0Ci1iZWZvcmUgdGFraW5nIHRoZSBsb2NrIG9mIHRoZSBjaGlsZC4gSXQgaXMgTk9UIGFsbG93ZWQgdG8gaG9sZCB0aGUgY2hpbGQKLWxvY2sgYmVmb3JlIHRha2luZyB0aGUgcGFyZW50IGxvY2suCi0KLVRoaXMgcG9saWN5IGFsbG93cyBmb3IgcGFyZW50cyB0byBpdGVyYXRlIHRoZWlyIGNoaWxkcmVuIGFuZCBzZXR0aW5nIHByb3BlcnRpZXMKLW9uIHRoZW0uCi0KLVdoZW5ldmVyIGEgbmVzdGVkIGxvY2sgbmVlZHMgdG8gYmUgdGFrZW4gb24gb2JqZWN0cyBub3QgaW52b2x2ZWQgaW4gYSAKLXBhcmVudC1jaGlsZCByZWxhdGlvbiAoZWcuIHBhZHMpLCBhbiBleHBsaWN0aWMgbG9ja2luZyBvcmRlciBoYXMgdG8gYmUgZGVmaW5lZC4KLQotCi1QYXRoIEdlbmVyYXRpb24KLX5+fn5+fn5+fn5+fn5+fgotCi1EdWUgdG8gdGhlIGJhc2UgbmF0dXJlIG9mIHRoZSBHc3RPYmplY3QsIGl0IGJlY29tZXMgdGhlIG9ubHkgcmVhc29uYWJsZSBwbGFjZQotdG8gcHV0IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiAoX2dldF9wYXRoX3N0cmluZykuICBJdCB3aWxsIGdlbmVyYXRlIGEgc3RyaW5nCi1kZXNjcmliaW5nIHRoZSBwYXJlbnQgaGllcmFyY2h5IG9mIGEgZ2l2ZW4gR3N0T2JqZWN0LiAgCi0KLQotRmxhZ3MKLX5+fn5+Ci0KLUVhY2ggb2JqZWN0IGluIHRoZSBHU3RyZWFtZXIgb2JqZWN0IGhpZXJhcmNoeSBjYW4gaGF2ZSBmbGFncyBhc3NvY2lhdGVkIHdpdGggaXQsCi13aGljaCBhcmUgdXNlZCB0byBkZXNjcmliZSBhIHN0YXRlIG9yIGEgZmVhdHVyZSBvZiB0aGUgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1nc3RwaXBlbGluZS50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU1OTlkNi4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWdzdHBpcGVsaW5lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLUdzdFBpcGVsaW5lCi0tLS0tLS0tLS0tLQotCi1BIEdzdFBpcGVsaW5lIGlzIHVzdWFsbHkgYSB0b3BsZXZlbCBiaW4gYW5kIHByb3ZpZGVzIGFsbCBvZiBpdHMgCi1jaGlsZHJlbiB3aXRoIGEgY2xvY2suCi0KLUEgR3N0UGlwZWxpbmUgYWxzbyBwcm92aWRlcyBhIHRvcGxldmVsIEdzdEJ1cyAoc2VlIHBhcnQtZ3N0YnVzLnR4dCkKLQotVGhlIHBpcGVsaW5lIGFsc28gY2FsY3VsYXRlcyB0aGUgcnVubmluZ190aW1lIGJhc2VkIG9uIHRoZSBzZWxlY3RlZAotY2xvY2sgKHNlZSBhbHNvIGNsb2Nrcy50eHQgYW5kIHBhcnQtc3luY2hyb25pc2F0aW9uLnR4dCkuCi0KLVRoZSBwaXBlbGluZSB3aWxsIGNhbGN1bGF0ZSBhIGdsb2JhbCBsYXRlbmN5IGZvciB0aGUgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lLgotKFNlZSBhbHNvIHBhcnQtbGF0ZW5jeS50eHQpLgotCi1TdGF0ZSBjaGFuZ2VzCi1+fn5+fn5+fn5+fn5+Ci0KLUluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgc3RhdGUgY2hhbmdlIHByb2NlZHVyZSBvZiBpdHMgcGFyZW50IGNsYXNzCi1Hc3RCaW4sIHRoZSBwaXBlbGluZSBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGFjdGlvbnMgZHVyaW5nIGEgc3RhdGUgY2hhbmdlOgotCi0gLSBOVUxMIC0+IFJFQURZOgotICAgIC0gc2V0IHRoZSBidXMgdG8gbm9uLWZsdXNoaW5nCi0KLSAtIFJFQURZIC0+IFBBVVNFRDoKLSAgICAtIHJlc2V0IHRoZSBydW5uaW5nX3RpbWUgdG8gMAotCi0gLSBQQVVTRUQgLT4gUExBWUlORzoKLSAgICAtIFNlbGVjdCBhbmQgYSBjbG9jay4KLSAgICAtIGNhbGN1bGF0ZSBiYXNlX3RpbWUgdXNpbmcgdGhlIHJ1bm5pbmdfdGltZS4KLSAgICAtIGNhbGN1bGF0ZSBhbmQgZGlzdHJpYnV0ZSBsYXRlbmN5LgotICAgIC0gc2V0IGNsb2NrIGFuZCBiYXNlX3RpbWUgb24gYWxsIGVsZW1lbnRzIGJlZm9yZSBwZXJmb3JtaW5nIHRoZQotICAgICAgc3RhdGUgY2hhbmdlLgotCi0gLSBQTEFZSU5HIC0+IFBBVVNFRDoKLSAgICAtIGNhbGN1bGF0ZSB0aGUgcnVubmluZ190aW1lIHdoZW4gdGhlIHBpcGVsaW5lIHdhcyBQQVVTRUQuCi0KLSAtIFJFQURZIC0+IE5VTEw6Ci0gICAgLSBzZXQgdGhlIGJ1cyB0byBmbHVzaGluZyAod2hlbiBhdXRvLWZsdXNoaW5nIGlzIGVuYWJsZWQpCi0KLVRoZSBydW5uaW5nX3RpbWUgcmVwcmVzZW50cyB0aGUgdG90YWwgZWxhcHNlZCB0aW1lLCBtZWFzdXJlZCBpbiBjbG9jayB1bml0cywKLXRoYXQgdGhlIHBpcGVsaW5lIHNwZW50IGluIHRoZSBQTEFZSU5HIHN0YXRlIChzZWUgcGFydC1zeW5jaHJvbmlzYXRpb24udHh0KS4KLVRoZSBydW5uaW5nX3RpbWUgaXMgc2V0IHRvIDAgYWZ0ZXIgYSBmbHVzaGluZyBzZWVrLgotCi0KLUNsb2NrIHNlbGVjdGlvbgotfn5+fn5+fn5+fn5+fn5+Ci0KLVNpbmNlIGFsbCBvZiB0aGUgY2hpbGRyZW4gb2YgYSBHc3RQaXBlbGluZSBtdXN0IHVzZSB0aGUgc2FtZSBjbG9jaywgdGhlCi1waXBlbGluZSBtdXN0IHNlbGVjdCBhIGNsb2NrLiBUaGlzIGNsb2NrIHNlbGVjdGlvbiBoYXBwZW5zIHdoZW4gdGhlIHBpcGVsaW5lCi1nb2VzIHRvIHRoZSBQTEFZSU5HIHN0YXRlLgotCi1UaGUgZGVmYXVsdCBjbG9jayBzZWxlY3Rpb24gYWxnb3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6Ci0KLSAtIElmIHRoZSBhcHBsaWNhdGlvbiBzZWxlY3RlZCBhIGNsb2NrLCB1c2UgdGhhdCBjbG9jay4gKHNlZSBiZWxvdykKLQotIC0gVXNlIHRoZSBjbG9jayBvZiBtb3N0IHVwc3RyZWFtIGVsZW1lbnQgdGhhdCBjYW4gcHJvdmlkZSBhIGNsb2NrLiBUaGlzIAotICAgc2VsZWN0aW9uIGlzIHBlcmZvcm1lZCBieSBpdGVyYXRpbmcgdGhlIGVsZW1lbnQgc3RhcnRpbmcgZnJvbSB0aGUgCi0gICBzaW5rcyBnb2luZyB1cHN0cmVhbS4gCi0KLSAgICAqIHNpbmNlIHRoaXMgc2VsZWN0aW9uIHByb2NlZHVyZSBoYXBwZW5zIGluIHRoZSBQQVVTRUQtPlBMQVlJTkcKLSAgICAgIHN0YXRlIGNoYW5nZSwgYWxsIHRoZSBzaW5rcyBhcmUgcHJlcm9sbGVkIGFuZCB3ZSBjYW4gdGh1cyBiZSBzdXJlCi0gICAgICB0aGF0IGVhY2ggc2luayBpcyBsaW5rZWQgdG8gc29tZSB1cHN0cmVhbSBlbGVtZW50LgotICAgICogaW4gdGhlIGNhc2Ugb2YgYSBsaXZlIHBpcGVsaW5lIChOT19QUkVST0xMKSwgdGhlIHNpbmsgd2lsbCBub3QgeWV0Ci0gICAgICBiZSBwcmVyb2xsZWQgYW5kIHRoZSBzZWxlY3Rpb24gcHJvY2VzcyB3aWxsIHNlbGVjdCB0aGUgY2xvY2sgb2YKLSAgICAgIGEgbW9yZSB1cHN0cmVhbSBlbGVtZW50LgotICAgICAgCi0gLSB1c2UgR3N0U3lzdGVtQ2xvY2ssIHRoaXMgb25seSBoYXBwZW5zIHdoZW4gbm8gZWxlbWVudCBwcm92aWRlcyBhCi0gICB1c2FibGUgY2xvY2suCi0KLVRoZSBhcHBsaWNhdGlvbiBjYW4gaW5mbHVlbmNlIHRoaXMgY2xvY2sgc2VsZWN0aW9uIHdpdGggdHdvIG1ldGhvZHM6Ci1nc3RfcGlwZWxpbmVfdXNlX2Nsb2NrKCkgYW5kIGdzdF9waXBlbGluZV9hdXRvX2Nsb2NrKCkuIAotCi1UaGUgX3VzZV9jbG9jaygpIG1ldGhvZCBmb3JjZXMgdGhlIHVzZSBvZiBhIHNwZWNpZmljIGNsb2NrIG9uIHRoZSBwaXBlbGluZSAKLXJlZ2FyZGxlc3Mgb2Ygd2hhdCBjbG9jayBwcm92aWRlcnMgYXJlIGNoaWxkcmVuIG9mIHRoZSBwaXBlbGluZS4gU2V0dGluZyAKLU5VTEwgZGlzYWJsZXMgdGhlIGNsb2NrIGNvbXBsZXRlbHkgYW5kIG1ha2VzIHRoZSBwaXBlbGluZSBydW4gYXMgZmFzdCBhcyAKLXBvc3NpYmxlLgotCi1UaGUgX2F1dG9fY2xvY2soKSBtZXRob2QgcmVtb3ZlcyB0aGUgZml4ZWQgY2xvY2sgYW5kIHJlYWN0aXZhdGVzIHRoZSBhdXRvLQotbWF0aWMgY2xvY2sgc2VsZWN0aW9uIGFsZ29yaXRobSBkZXNjcmliZWQgYWJvdmUuCi0KLQotR3N0QnVzCi1+fn5+fn4KLQotQSBHc3RQaXBlbGluZSBwcm92aWRlcyBhIEdzdEJ1cyB0byB0aGUgYXBwbGljYXRpb24uIFRoZSBidXMgY2FuIGJlIHJldHJpZXZlZAotd2l0aCBnc3RfcGlwZWxpbmVfZ2V0X2J1cygpIGFuZCBjYW4gdGhlbiBiZSB1c2VkIHRvIHJldHJpZXZlIG1lc3NhZ2VzIHBvc3RlZCBieQotdGhlIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZSAoc2VlIHBhcnQtZ3N0YnVzLnR4dCkuCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtbGF0ZW5jeS50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWxhdGVuY3kudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDEwOWU4Li4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtbGF0ZW5jeS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MDcgKzAsMCBAQAotTGF0ZW5jeQotLS0tLS0tLQotCi1UaGUgbGF0ZW5jeSBpcyB0aGUgdGltZSBpdCB0YWtlcyBmb3IgYSBzYW1wbGUgY2FwdHVyZWQgYXQgdGltZXN0YW1wIDAgdG8gcmVhY2ggdGhlCi1zaW5rLiBUaGlzIHRpbWUgaXMgbWVhc3VyZWQgYWdhaW5zdCB0aGUgY2xvY2sgaW4gdGhlIHBpcGVsaW5lLiBGb3IgcGlwZWxpbmVzCi13aGVyZSB0aGUgb25seSBlbGVtZW50cyB0aGF0IHN5bmNocm9uaXplIGFnYWluc3QgdGhlIGNsb2NrIGFyZSB0aGUgc2lua3MsIHRoZQotbGF0ZW5jeSBpcyBhbHdheXMgMCBzaW5jZSBubyBvdGhlciBlbGVtZW50IGlzIGRlbGF5aW5nIHRoZSBidWZmZXIuCi0KLUZvciBwaXBlbGluZXMgd2l0aCBsaXZlIHNvdXJjZXMsIGEgbGF0ZW5jeSBpcyBpbnRyb2R1Y2VkLCBtb3N0bHkgYmVjYXVzZSBvZiB0aGUKLXdheSBhIGxpdmUgc291cmNlIHdvcmtzLiBDb25zaWRlciBhbiBhdWRpbyBzb3VyY2UsIGl0IHdpbGwgc3RhcnQgY2FwdHVyaW5nIHRoZQotZmlyc3Qgc2FtcGxlIGF0IHRpbWUgMC4gSWYgdGhlIHNvdXJjZSBwdXNoZXMgYnVmZmVycyB3aXRoIDQ0MTAwIHNhbXBsZXMgYXQgYQotdGltZSBhdCA0NDEwMEh6IGl0IHdpbGwgaGF2ZSBjb2xsZWN0ZWQgdGhlIGJ1ZmZlciBhdCBzZWNvbmQgMS4KLVNpbmNlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciBpcyAwIGFuZCB0aGUgdGltZSBvZiB0aGUgY2xvY2sgaXMgbm93ID49IDEKLXNlY29uZCwgdGhlIHNpbmsgd2lsbCBkcm9wIHRoaXMgYnVmZmVyIGJlY2F1c2UgaXQgaXMgdG9vIGxhdGUuCi1XaXRob3V0IGFueSBsYXRlbmN5IGNvbXBlbnNhdGlvbiBpbiB0aGUgc2luaywgYWxsIGJ1ZmZlcnMgd2lsbCBiZSBkcm9wcGVkLgotCi1UaGUgc2l0dWF0aW9uIGJlY29tZXMgbW9yZSBjb21wbGV4IGluIHRoZSBwcmVzZW5jZSBvZjoKLQotIC0gMiBsaXZlIHNvdXJjZXMgY29ubmVjdGVkIHRvIDIgbGl2ZSBzaW5rcyB3aXRoIGRpZmZlcmVudCBsYXRlbmNpZXMKLSAgICAqIGF1ZGlvL3ZpZGVvIGNhcHR1cmUgd2l0aCBzeW5jaHJvbml6ZWQgbGl2ZSBwcmV2aWV3LgotICAgICogYWRkZWQgbGF0ZW5jaWVzIGR1ZSB0byBlZmZlY3RzIChkZWxheXMsIHJlc2FtcGxlcnMuLi4pCi0gLSAxIGxpdmUgc291cmNlIGNvbm5lY3RlZCB0byAyIGxpdmUgc2lua3MKLSAgICAqIGZpcmV3aXJlIERWCi0gICAgKiBSVFAsIHdpdGggYWRkZWQgbGF0ZW5jaWVzIGJlY2F1c2Ugb2Ygaml0dGVyIGJ1ZmZlcnMuCi0gLSBtaXhlZCBsaXZlIHNvdXJjZSBhbmQgbm9uLWxpdmUgc291cmNlIHNjZW5hcmlvcy4KLSAgICAqIHN5bmNocm9uaXplZCBhdWRpbyBjYXB0dXJlIHdpdGggbm9uLWxpdmUgcGxheWJhY2suIChvdmVyZHVicywuLikKLSAtIGNsb2NrIHNsYXZpbmcgaW4gdGhlIHNpbmtzIGR1ZSB0byB0aGUgbGl2ZSBzb3VyY2VzIHByb3ZpZGluZyB0aGVpciBvd24KLSAgIGNsb2Nrcy4KLQotVG8gcGVyZm9ybSB0aGUgbmVlZGVkIGxhdGVuY3kgY29ycmVjdGlvbnMgaW4gdGhlIGFib3ZlIHNjZW5hcmlvcywgd2UgbXVzdAotZGV2ZWxvcCBhbiBhbGdvcml0aG0gdG8gY2FsY3VsYXRlIGEgZ2xvYmFsIGxhdGVuY3kgZm9yIHRoZSBwaXBlbGluZS4gVGhlCi1hbGdvcml0aG0gbXVzdCBiZSBleHRlbnNpYmxlIHNvIHRoYXQgaXQgY2FuIG9wdGltaXplIHRoZSBsYXRlbmN5IGF0IHJ1bnRpbWUuIAotSXQgbXVzdCBhbHNvIGJlIHBvc3NpYmxlIHRvIGRpc2FibGUgb3IgdHVuZSB0aGUgYWxnb3JpdGhtIGJhc2VkIG9uIHNwZWNpZmljCi1hcHBsaWNhdGlvbiBuZWVkcyAocmVxdWlyZWQgbWluaW1hbCBsYXRlbmN5KS4KLQotCi1QaXBlbGluZXMgd2l0aG91dCBsYXRlbmN5IGNvbXBlbnNhdGlvbgotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotV2Ugc2hvdyBzb21lIGV4YW1wbGVzIHRvIGRlbW9uc3RyYXRlIHRoZSBwcm9ibGVtIG9mIGxhdGVuY3kgaW4gdHlwaWNhbAotY2FwdHVyZSBwaXBlbGluZXMuCi0KLS0gRXhhbXBsZSAxCi0KLSAgQW4gYXVkaW8gY2FwdHVyZS9wbGF5YmFjayBwaXBlbGluZS4KLQotICAgYXNyYzogYXVkaW8gc291cmNlLCBwcm92aWRlcyBhIGNsb2NrCi0gICBhc2luayBhdWRpbyBzaW5rLCBwcm92aWRlcyBhIGNsb2NrCi0KLSAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgIHwKLSAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKLSAgIHwgfCBhc3JjIHwgICAgICB8IGFzaW5rIHwgIHwKLSAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKLSAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKLSAgICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKLQotIE5VTEwtPlJFQURZOgotICBhc2luazogTlVMTC0+UkVBRFk6IHByb2JlcyBkZXZpY2UsIHJldHVybnMgU1VDQ0VTUyAKLSAgYXNyYzogTlVMTC0+UkVBRFk6ICBwcm9iZXMgZGV2aWNlLCByZXR1cm5zIFNVQ0NFU1MKLQotIFJFQURZLT5QQVVTRUQ6Ci0gIGFzaW5rOiBSRUFEWTotPlBBVVNFRCBvcGVuIGRldmljZSwgcmV0dXJucyBBU1lOQyAKLSAgYXNyYzogUkVBRFktPlBBVVNFRDogIG9wZW4gZGV2aWNlLCByZXR1cm5zIE5PX1BSRVJPTEwKLQotICAqIFNpbmNlIHRoZSBzb3VyY2UgaXMgYSBsaXZlIHNvdXJjZSwgaXQgd2lsbCBvbmx5IHByb2R1Y2UgZGF0YSBpbiB0aGUKLSAgICBQTEFZSU5HIHN0YXRlLiBUbyBub3RlIHRoaXMgZmFjdCwgaXQgcmV0dXJucyBOT19QUkVST0xMIGZyb20gdGhlIHN0YXRlIGNoYW5nZQotICAgIGZ1bmN0aW9uLgotICAqIFRoaXMgc2luayByZXR1cm5zIEFTWU5DIGJlY2F1c2UgaXQgY2FuIG9ubHkgY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZSB0bwotICAgIFBBVVNFRCB3aGVuIGl0IHJlY2VpdmVzIHRoZSBmaXJzdCBidWZmZXIuCi0KLSAgQXQgdGhpcyBwb2ludCB0aGUgcGlwZWxpbmUgaXMgbm90IHByb2Nlc3NpbmcgZGF0YSBhbmQgdGhlIGNsb2NrIGlzIG5vdAotICBydW5uaW5nLiBVbmxlc3MgYSBuZXcgYWN0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgcGlwZWxpbmUsIHRoaXMgc2l0dWF0aW9uIHdpbGwKLSAgbmV2ZXIgY2hhbmdlLgotCi0gUEFVU0VELT5QTEFZSU5HOgotICBhc3JjIGNsb2NrIHNlbGVjdGVkIGJlY2F1c2UgaXQgaXMgdGhlIG1vc3QgdXBzdHJlYW0gY2xvY2sgcHJvdmlkZXIuIGFzaW5rIGNhbgotICBvbmx5IHByb3ZpZGUgYSBjbG9jayB3aGVuIGl0IHJlY2VpdmVkIHRoZSBmaXJzdCBidWZmZXIgYW5kIGNvbmZpZ3VyZWQgdGhlCi0gIGRldmljZSB3aXRoIHRoZSBzYW1wbGVyYXRlIGluIHRoZSBjYXBzLgotCi0gIGFzaW5rOiBQQVVTRUQ6LT5QTEFZSU5HLCBzZXRzIHBlbmRpbmcgc3RhdGUgdG8gUExBWUlORywgcmV0dXJucyBBU1lOQyBiZWNhdXMKLSAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyBub3QgcHJlcm9sbGVkLiBUaGUgc2luayB3aWxsIGNvbW1pdCBzdGF0ZSB0bwotCQkJIFBMQVlJTkcgd2hlbiBpdCBwcmVyb2xscy4KLSAgYXNyYzogUEFVU0VELT5QTEFZSU5HOiBzdGFydHMgcHVzaGluZyBidWZmZXJzLgotCi0gICogc2luY2UgdGhlIHNpbmsgaXMgc3RpbGwgcGVyZm9ybWluZyBhIHN0YXRlIGNoYW5nZSBmcm9tIFJFQURZIC0+IFBBVVNFRCwgaXQKLSAgICByZW1haW5zIEFTWU5DLiBUaGUgcGVuZGluZyBzdGF0ZSB3aWxsIGJlIHNldCB0byBQTEFZSU5HLgotICAqIFRoZSBjbG9jayBzdGFydHMgcnVubmluZyBhcyBzb29uIGFzIGFsbCB0aGUgZWxlbWVudHMgaGF2ZSBiZWVuIHNldCB0bwotICAgIFBMQVlJTkcuCi0gICogdGhlIHNvdXJjZSBpcyBhIGxpdmUgc291cmNlIHdpdGggYSBsYXRlbmN5LiBTaW5jZSBpdCBpcyBzeW5jaHJvbml6ZWQgd2l0aAotICAgIHRoZSBjbG9jaywgaXQgd2lsbCBwcm9kdWNlIGEgYnVmZmVyIHdpdGggdGltZXN0YW1wIDAgYW5kIGR1cmF0aW9uIEQgYWZ0ZXIKLSAgICB0aW1lIEQsIGllLiBpdCB3aWxsIG9ubHkgYmUgYWJsZSB0byBwcm9kdWNlIHRoZSBsYXN0IHNhbXBsZSBvZiB0aGUgYnVmZmVyCi0gICAgKHdpdGggdGltZXN0YW1wIEQpIGF0IHRpbWUgRC4gVGhpcyBsYXRlbmN5IGRlcGVuZHMgb24gdGhlIHNpemUgb2YgdGhlCi0gICAgYnVmZmVyLgotICAqIHRoZSBzaW5rIHdpbGwgcmVjZWl2ZSB0aGUgYnVmZmVyIHdpdGggdGltZXN0YW1wIDAgYXQgdGltZSA+PSBELiBBdCB0aGlzCi0gICAgcG9pbnQgdGhlIGJ1ZmZlciBpcyB0b28gbGF0ZSBhbHJlYWR5IGFuZCBtaWdodCBiZSBkcm9wcGVkLiBUaGlzIHN0YXRlIG9mCi0gICAgY29uc3RhbnRseSBkcm9wcGluZyBkYXRhIHdpbGwgbm90IGNoYW5nZSB1bmxlc3MgYSBjb25zdGFudCBsYXRlbmN5Ci0gICAgY29ycmVjdGlvbiBpcyBhZGRlZCB0byB0aGUgaW5jb21pbmcgYnVmZmVyIHRpbWVzdGFtcHMuCi0KLSAgVGhlIHByb2JsZW0gaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlIHNpbmsgaXMgc2V0IHRvIChwZW5kaW5nKSBQTEFZSU5HCi0gIHdpdGhvdXQgYmVpbmcgcHJlcm9sbGVkLCB3aGljaCBvbmx5IGhhcHBlbnMgaW4gbGl2ZSBwaXBlbGluZXMuIAotCi0tIEV4YW1wbGUgMgotCi0gIEFuIGF1ZGlvL3ZpZGVvIGNhcHR1cmUvcGxheWJhY2sgcGlwZWxpbmUuIFdlIGNhcHR1cmUgYm90aCBhdWRpbyBhbmQgdmlkZW8gYW5kCi0gIGhhdmUgdGhlbSBwbGF5ZWQgYmFjayBzeW5jaHJvbml6ZWQgYWdhaW4uCi0KLSAgIGFzcmM6IGF1ZGlvIHNvdXJjZSwgcHJvdmlkZXMgYSBjbG9jawotICAgYXNpbmsgYXVkaW8gc2luaywgcHJvdmlkZXMgYSBjbG9jawotICAgdnNyYzogdmlkZW8gc291cmNlCi0gICB2c2luayB2aWRlbyBzaW5rCi0KLSAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgIHwKLSAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKLSAgIHwgfCBhc3JjIHwgICAgICB8IGFzaW5rIHwgIHwKLSAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKLSAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKLSAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKLSAgIHwgfCB2c3JjIHwgICAgICB8IHZzaW5rIHwgIHwKLSAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKLSAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKLSAgICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKLQotICBUaGUgc3RhdGUgY2hhbmdlcyBoYXBwZW4gaW4gdGhlIHNhbWUgd2F5IGFzIGV4YW1wbGUgMS4gQm90aCBzaW5rcyBlbmQgdXAgd2l0aAotICBwZW5kaW5nIHN0YXRlIG9mIFBMQVlJTkcgYW5kIGEgcmV0dXJuIHZhbHVlIG9mIEFTWU5DIHVudGlsIHRoZXkgcmVjZWl2ZSB0aGUKLSAgZmlyc3QgYnVmZmVyLgotCi0gIEZvciBhdWRpbyBhbmQgdmlkZW8gdG8gYmUgcGxheWVkIGluIHN5bmMsIGJvdGggc2lua3MgbXVzdCBjb21wZW5zYXRlIGZvciB0aGUKLSAgbGF0ZW5jeSBvZiBpdHMgc291cmNlIGJ1dCBtdXN0IGFsc28gdXNlIGV4YWN0bHkgdGhlIHNhbWUgbGF0ZW5jeSBjb3JyZWN0aW9uLiAgCi0KLSAgU3VwcG9zZSBhc3JjIGhhcyBhIGxhdGVuY3kgb2YgMjBtcyBhbmQgdnNyYyBhIGxhdGVuY3kgb2YgMzNtcywgdGhlIHRvdGFsCi0gIGxhdGVuY3kgaW4gdGhlIHBpcGVsaW5lIGhhcyB0byBiZSBhdCBsZWFzdCAzM21zLiBUaGlzIGFsc28gbWVhbnMgdGhhdCB0aGUKLSAgcGlwZWxpbmUgbXVzdCBoYXZlIGF0IGxlYXN0IGEgMzMgLSAyMCA9IDEzbXMgYnVmZmVyaW5nIG9uIHRoZSBhdWRpbyBzdHJlYW0gb3IKLSAgZWxzZSB0aGUgYXVkaW8gc3JjIHdpbGwgdW5kZXJydW4gd2hpbGUgdGhlIGF1ZGlvc2luayB3YWl0cyBmb3IgdGhlIHByZXZpb3VzCi0gIHNhbXBsZSB0byBwbGF5LgotCi0tIEV4YW1wbGUgMwotCi0gIEFuIGV4YW1wbGUgb2YgdGhlIGNvbWJpbmF0aW9uIG9mIGEgbm9uLWxpdmUgKGZpbGUpIGFuZCBhIGxpdmUgc291cmNlICh2c3JjKSAKLSAgY29ubmVjdGVkIHRvIGxpdmUgc2lua3MgKHZzaW5rLCBzaW5rKS4gCi0KLSAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLSAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgIHwKLSAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKLSAgIHwgfCBmaWxlIHwgICAgICB8IHNpbmsgIHwgIHwKLSAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKLSAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKLSAgIHwgLi0tLS0tLS4gICAgICAuLS0tLS0tLS4gIHwKLSAgIHwgfCB2c3JjIHwgICAgICB8IHZzaW5rIHwgIHwKLSAgIHwgfCAgICAgc3JjIC0+IHNpbmsgICAgIHwgIHwKLSAgIHwgJy0tLS0tLScgICAgICAnLS0tLS0tLScgIHwKLSAgICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKLQotICBUaGUgc3RhdGUgY2hhbmdlcyBoYXBwZW4gaW4gdGhlIHNhbWUgd2F5IGFzIGV4YW1wbGUgMS4gRXhjZXB0IHNpbmsgd2lsbCBiZQotICBhYmxlIHRvIHByZXJvbGwgKGNvbW1pdCBpdHMgc3RhdGUgdG8gUEFVU0VEKS4KLQotICBJbiB0aGlzIGNhc2Ugc2luayB3aWxsIGhhdmUgbm8gbGF0ZW5jeSBidXQgdnNpbmsgd2lsbC4gVGhlIHRvdGFsIGxhdGVuY3kKLSAgc2hvdWxkIGJlIHRoYXQgb2YgdnNpbmsuCi0KLSAgTm90ZSB0aGF0IGJlY2F1c2Ugb2YgdGhlIHByZXNlbmNlIG9mIGEgbGl2ZSBzb3VyY2UgKHZzcmMpLCB0aGUgcGlwZWxpbmUgY2FuIGJlCi0gIHNldCB0byBwbGF5aW5nIGJlZm9yZSBzaW5rIGlzIGFibGUgdG8gcHJlcm9sbC4gV2l0aG91dCBjb21wZW5zYXRpb24gZm9yIHRoZQotICBsaXZlIHNvdXJjZSwgdGhpcyBtaWdodCBsZWFkIHRvIHN5bmNocm9uaXNhdGlvbiBwcm9ibGVtcyBiZWNhdXNlIHRoZSBsYXRlbmN5Ci0gIHNob3VsZCBiZSBjb25maWd1cmVkIGluIHRoZSBlbGVtZW50IGJlZm9yZSBpdCBjYW4gZ28gdG8gUExBWUlORy4KLQotCi0tIEV4YW1wbGUgNAotCi0gIEFuIGV4YW1wbGUgb2YgdGhlIGNvbWJpbmF0aW9uIG9mIGEgbm9uLWxpdmUgYW5kIGEgbGl2ZSBzb3VyY2UuIFRoZSBub24tbGl2ZQotICBzb3VyY2UgaXMgY29ubmVjdGVkIHRvIGEgbGl2ZSBzaW5rIGFuZCB0aGUgbGl2ZSBzb3VyY2UgdG8gYSBub24tbGl2ZSBzaW5rLgotCi0gICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi0gICB8IHBpcGVsaW5lICAgICAgICAgICAgICAgICB8Ci0gICB8IC4tLS0tLS0uICAgICAgLi0tLS0tLS0uICB8Ci0gICB8IHwgZmlsZSB8ICAgICAgfCBzaW5rICB8ICB8Ci0gICB8IHwgICAgIHNyYyAtPiBzaW5rICAgICB8ICB8Ci0gICB8ICctLS0tLS0nICAgICAgJy0tLS0tLS0nICB8Ci0gICB8IC4tLS0tLS0uICAgICAgLi0tLS0tLS0uICB8Ci0gICB8IHwgdnNyYyB8ICAgICAgfCBmaWxlcyB8ICB8Ci0gICB8IHwgICAgIHNyYyAtPiBzaW5rICAgICB8ICB8Ci0gICB8ICctLS0tLS0nICAgICAgJy0tLS0tLS0nICB8Ci0gICAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCi0KLSAgVGhlIHN0YXRlIGNoYW5nZXMgaGFwcGVuIGluIHRoZSBzYW1lIHdheSBhcyBleGFtcGxlIDMuIFNpbmsgd2lsbCBiZQotICBhYmxlIHRvIHByZXJvbGwgKGNvbW1pdCBpdHMgc3RhdGUgdG8gUEFVU0VEKS4gZmlsZXMgd2lsbCBub3QgYmUgYWJsZSB0bwotICBwcmVyb2xsLgotCi0gIHNpbmsgd2lsbCBoYXZlIG5vIGxhdGVuY3kgc2luY2UgaXQgaXMgbm90IGNvbm5lY3RlZCB0byBhIGxpdmUgc291cmNlLiBmaWxlcwotICBkb2VzIG5vdCBkbyBzeW5jaHJvbmlzYXRpb24gc28gaXQgZG9lcyBub3QgY2FyZSBhYm91dCBsYXRlbmN5LgotCi0gIFRoZSB0b3RhbCBsYXRlbmN5IGluIHRoZSBwaXBlbGluZSBpcyAwLiBUaGUgdnNyYyBjYXB0dXJlcyBpbiBzeW5jIHdpdGggdGhlCi0gIHBsYXliYWNrIGluIHNpbmsuCi0KLSAgQXMgaW4gZXhhbXBsZSAzLCBzaW5rIGNhbiBvbmx5IGJlIHNldCB0byBQTEFZSU5HIGFmdGVyIGl0IHN1Y2Nlc3NmdWxseQotICBwcmVyb2xsZWQuCi0KLQotU3RhdGUgQ2hhbmdlcwotfn5+fn5+fn5+fn5+fgotCi1BIFNpbmsgaXMgbmV2ZXIgc2V0IHRvIFBMQVlJTkcgYmVmb3JlIGl0IGlzIHByZXJvbGxlZC4gSW4gb3JkZXIgdG8gZG8gdGhpcywgdGhlCi1waXBlbGluZSAoYXQgdGhlIEdzdEJpbiBsZXZlbCkga2VlcHMgdHJhY2sgb2YgYWxsCi1lbGVtZW50cyB0aGF0IHJlcXVpcmUgcHJlcm9sbCAodGhlIG9uZXMgdGhhdCByZXR1cm4gQVNZTkMgZnJvbSB0aGUgc3RhdGUKLWNoYW5nZSkuIFRoZXNlIGVsZW1lbnRzIHBvc3RlZCBhIEFTWU5DX1NUQVJUIG1lc3NhZ2Ugd2l0aG91dCBhIG1hdGNoaW5nCi1BU1lOQ19ET05FIG1lc3NhZ2UuCi0KLVRoZSBwaXBlbGluZSB3aWxsIG5vdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBzdGlsbCBkb2luZyBhbgotQVNZTkMgc3RhdGUgY2hhbmdlLgotCi1XaGVuIGFuIEFTWU5DIGVsZW1lbnQgcHJlcm9sbHMsIGl0IGNvbW1pdHMgaXRzIHN0YXRlIHRvIFBBVVNFRCBhbmQgcG9zdHMgYW4KLUFTWU5DX0RPTkUgbWVzc2FnZS4gVGhlIHBpcGVsaW5lIG5vdGljZXMgdGhpcyBBU1lOQ19ET05FIG1lc3NhZ2UgYW5kIG1hdGNoZXMgaXQKLXdpdGggdGhlIEFTWU5DX1NUQVJUIG1lc3NhZ2UgaXQgY2FjaGVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50LiAKLQotV2hlbiBhbGwgQVNZTkNfU1RBUlQgbWVzc2FnZXMgYXJlIG1hdGNoZWQgd2l0aCBhbiBBU1lOQ19ET05FIG1lc3NhZ2UsIHRoZQotcGlwZWxpbmUgcHJvY2VlZHMgd2l0aCBzZXR0aW5nIHRoZSBlbGVtZW50cyB0byB0aGUgZmluYWwgc3RhdGUgYWdhaW4uCi0KLVRoZSBiYXNlIHRpbWUgb2YgdGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgc2V0IGJ5IHRoZSBwaXBlbGluZSB3aGVuIGl0IGNoYW5nZWQgdGhlCi1OT19QUkVST0xMIGVsZW1lbnQgdG8gUExBWUlORy4gVGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGUKLXNlcGFyYXRlIGFzeW5jIHN0YXRlIGNoYW5nZSB0aHJlYWQgKGxpa2UgdGhlIG9uZSBjdXJyZW50bHkgdXNlZCBmb3IgZ29pbmcgZnJvbQotUEFVU0VELT5QTEFZSU5HIGluIGEgbm9uLWxpdmUgcGlwZWxpbmUpLgotCi0KLVF1ZXJ5Ci1+fn5+fgotCi1UaGUgcGlwZWxpbmUgbGF0ZW5jeSBpcyBxdWVyaWVkIHdpdGggdGhlIExBVEVOQ1kgcXVlcnkuCi0KLSAob3V0KSAibGl2ZSIsIEdfVFlQRV9CT09MRUFOIChkZWZhdWx0IEZBTFNFKQotICAgICAgICAtIGlmIGEgbGl2ZSBlbGVtZW50IGlzIGZvdW5kIHVwc3RyZWFtCi0KLSAob3V0KSAibWluLWxhdGVuY3kiLCBHX1RZUEVfVUlOVDY0IChkZWZhdWx0IDAsIG11c3Qgbm90IGJlIE5PTkUpCi0gICAgICAgIC0gdGhlIG1pbmltdW0gbGF0ZW5jeSBpbiB0aGUgcGlwZWxpbmUsIG1lYW5pbmcgdGhlIG1pbmltdW0gdGltZQotICAgICAgICAgIGRvd25zdHJlYW0gZWxlbWVudHMgc3luY2hyb25pemluZyB0byB0aGUgY2xvY2sgaGF2ZSB0byB3YWl0IHVudGlsCi0gICAgICAgICAgdGhleSBjYW4gYmUgc3VyZSB0aGF0IGFsbCBkYXRhIGZvciB0aGUgY3VycmVudCBydW5uaW5nIHRpbWUgaGFzCi0gICAgICAgICAgYmVlbiByZWNlaXZlZC4KLQotICAgICAgICAgIEVsZW1lbnRzIGFuc3dlcmluZyB0aGUgbGF0ZW5jeSBxdWVyeSBhbmQgaW50cm9kdWNpbmcgbGF0ZW5jeSBtdXN0Ci0gICAgICAgICAgc2V0IHRoaXMgdG8gdGhlIG1heGltdW0gdGltZSBmb3Igd2hpY2ggdGhleSB3aWxsIGRlbGF5IGRhdGEsIHdoaWxlCi0gICAgICAgICAgY29uc2lkZXJpbmcgdXBzdHJlYW0ncyBtaW5pbXVtIGxhdGVuY3kuIEFzIHN1Y2gsIGZyb20gYW4gZWxlbWVudCdzCi0gICAgICAgICAgcGVyc3BlY3RpdmUgdGhpcyBpcyAqbm90KiBpdHMgb3duIG1pbmltdW0gbGF0ZW5jeSBidXQgaXRzIG93bgotICAgICAgICAgIG1heGltdW0gbGF0ZW5jeS4KLSAgICAgICAgICBDb25zaWRlcmluZyB1cHN0cmVhbSdzIG1pbmltdW0gbGF0ZW5jeSBpbiBnZW5lcmFsIG1lYW5zIHRoYXQgdGhlCi0gICAgICAgICAgZWxlbWVudCdzIG93biB2YWx1ZSBpcyBhZGRlZCB0byB1cHN0cmVhbSdzIHZhbHVlLCBhcyB0aGlzIHdpbGwgZ2l2ZQotICAgICAgICAgIHRoZSBvdmVyYWxsIG1pbmltdW0gbGF0ZW5jeSBvZiBhbGwgZWxlbWVudHMgZnJvbSB0aGUgc291cmNlIHRvIHRoZQotICAgICAgICAgIGN1cnJlbnQgZWxlbWVudDoKLQotICAgICAgICAgIG1pbl9sYXRlbmN5ID0gdXBzdHJlYW1fbWluX2xhdGVuY3kgKyBvd25fbWluX2xhdGVuY3kKLQotIChvdXQpICJtYXgtbGF0ZW5jeSIsIEdfVFlQRV9VSU5UNjQgKGRlZmF1bHQgMCwgTk9ORSBtZWFuaW5nIGluZmluaXR5KQotICAgICAgICAtIHRoZSBtYXhpbXVtIGxhdGVuY3kgaW4gdGhlIHBpcGVsaW5lLCBtZWFuaW5nIHRoZSBtYXhpbXVtIHRpbWUgYW4KLSAgICAgICAgICBlbGVtZW50IHN5bmNocm9uaXppbmcgdG8gdGhlIGNsb2NrIGlzIGFsbG93ZWQgdG8gd2FpdCBmb3IgcmVjZWl2aW5nCi0gICAgICAgICAgYWxsIGRhdGEgZm9yIHRoZSBjdXJyZW50IHJ1bm5pbmcgdGltZS4gV2FpdGluZyBmb3IgYSBsb25nZXIgdGltZQotICAgICAgICAgIHdpbGwgcmVzdWx0IGluIGRhdGEgbG9zcywgb3ZlcnJ1bnMgYW5kIHVuZGVycnVucyBvZiBidWZmZXJzIGFuZCBpbgotICAgICAgICAgIGdlbmVyYWwgYnJlYWtzIHN5bmNocm9uaXplZCBkYXRhIGZsb3cgaW4gdGhlIHBpcGVsaW5lLgotCi0gICAgICAgICAgRWxlbWVudHMgYW5zd2VyaW5nIHRoZSBsYXRlbmN5IHF1ZXJ5IHNob3VsZCBzZXQgdGhpcyB0byB0aGUgbWF4aW11bQotICAgICAgICAgIHRpbWUgZm9yIHdoaWNoIHRoZXkgY2FuIGJ1ZmZlciB1cHN0cmVhbSBkYXRhIHdpdGhvdXQgYmxvY2tpbmcgb3IKLSAgICAgICAgICBkcm9wcGluZyBmdXJ0aGVyIGRhdGEuIEZvciBhbiBlbGVtZW50IHRoaXMgdmFsdWUgd2lsbCBnZW5lcmFsbHkgYmUKLSAgICAgICAgICBpdHMgb3duIG1pbmltdW0gbGF0ZW5jeSwgYnV0IG1pZ2h0IGJlIGJpZ2dlciB0aGFuIHRoYXQgaWYgaXQgY2FuCi0gICAgICAgICAgYnVmZmVyIG1vcmUgZGF0YS4gQXMgc3VjaCwgcXVldWUgZWxlbWVudHMgY2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UKLSAgICAgICAgICB0aGUgbWF4aW11bSBsYXRlbmN5LgotCi0gICAgICAgICAgVGhlIHZhbHVlIHNldCBpbiB0aGUgcXVlcnkgc2hvdWxkIGFnYWluIGNvbnNpZGVyIHVwc3RyZWFtJ3MgbWF4aW11bQotICAgICAgICAgIGxhdGVuY3k6Ci0gICAgICAgICAgLSBJZiB0aGUgY3VycmVudCBlbGVtZW50IGhhcyBibG9ja2luZyBidWZmZXJpbmcsIGkuZS4gaXQgZG9lcwotICAgICAgICAgICAgbm90IGRyb3AgZGF0YSBieSBpdHNlbGYgd2hlbiBpdHMgaW50ZXJuYWwgYnVmZmVyIGlzIGZ1bGwsIGl0IHNob3VsZAotICAgICAgICAgICAganVzdCBhZGQgaXRzIG93biBtYXhpbXVtIGxhdGVuY3kgKGkuZS4gdGhlIHNpemUgb2YgaXRzIGludGVybmFsCi0gICAgICAgICAgICBidWZmZXIpIHRvIHVwc3RyZWFtJ3MgdmFsdWUuIElmIHVwc3RyZWFtJ3MgbWF4aW11bSBsYXRlbmN5LCBvciB0aGUKLSAgICAgICAgICAgIGVsZW1lbnRzIGludGVybmFsIG1heGltdW0gbGF0ZW5jeSB3YXMgTk9ORSAoaS5lLiBpbmZpbml0eSksIGl0IHdpbGwKLSAgICAgICAgICAgIGJlIHNldCB0byBpbmZpbml0eS4KLQotICAgICAgICAgICAgaWYgKHVwc3RyZWFtX21heF9sYXRlbmN5ID09IE5PTkUgfHwgb3duX21heF9sYXRlbmN5ID09IE5PTkUpCi0gICAgICAgICAgICAgIG1heF9sYXRlbmN5ID0gTk9ORTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgbWF4X2xhdGVuY3kgPSB1cHN0cmVhbV9tYXhfbGF0ZW5jeSArIG93bl9tYXhfbGF0ZW5jeQotCi0gICAgICAgICAgICBJZiB0aGUgZWxlbWVudCBoYXMgbXVsdGlwbGUgc2lua3BhZHMsIHRoZSBtaW5pbXVtIHVwc3RyZWFtIGxhdGVuY3kgaXMKLSAgICAgICAgICAgIHRoZSBtYXhpbXVtIG9mIGFsbCBsaXZlIHVwc3RyZWFtIG1pbmltdW0gbGF0ZW5jaWVzLgotCi0gICAgICAgICAgLSBJZiB0aGUgY3VycmVudCBlbGVtZW50IGhhcyBsZWFreSBidWZmZXJpbmcsIGkuZS4gaXQgZHJvcHMgZGF0YSBieQotICAgICAgICAgICAgaXRzZWxmIHdoZW4gaXRzIGludGVybmFsIGJ1ZmZlciBpcyBmdWxsLCBpdCBzaG91bGQgdGFrZSB0aGUgbWluaW11bQotICAgICAgICAgICAgb2YgaXRzIG93biBtYXhpbXVtIGxhdGVuY3kgYW5kIHVwc3RyZWFtJ3MuIEV4YW1wbGVzIGZvciBzdWNoCi0gICAgICAgICAgICBlbGVtZW50cyBhcmUgYXVkaW8gc2lua3MgYW5kIHNvdXJjZXMgd2l0aCBhbiBpbnRlcm5hbCByaW5nYnVmZmVyLAotICAgICAgICAgICAgbGVha3kgcXVldWVzIGFuZCBpbiBnZW5lcmFsIGxpdmUgc291cmNlcyB3aXRoIGEgbGltaXRlZCBhbW91bnQgb2YKLSAgICAgICAgICAgIGludGVybmFsIGJ1ZmZlcnMgdGhhdCBjYW4gYmUgdXNlZC4KLQotICAgICAgICAgICAgbWF4X2xhdGVuY3kgPSBNSU4gKHVwc3RyZWFtX21heF9sYXRlbmN5LCBvd25fbWF4X2xhdGVuY3kpCi0KLSAgICAgICAgICAgIE5vdGU6IG1hbnkgR1N0cmVhbWVyIGJhc2UgY2xhc3NlcyBhbGxvdyBzdWJjbGFzc2VzIHRvIHNldCBhCi0gICAgICAgICAgICBtaW5pbXVtIGFuZCBtYXhpbXVtIGxhdGVuY3kgYW5kIGhhbmRsZSB0aGUgcXVlcnkgdGhlbXNlbHZlcy4gVGhlc2UKLSAgICAgICAgICAgIGJhc2UgY2xhc3NlcyBhc3N1bWUgbm9uLWxlYWt5IChpLmUuIGJsb2NraW5nKSBidWZmZXJpbmcgZm9yIHRoZQotICAgICAgICAgICAgbWF4aW11bSBsYXRlbmN5LiBUaGUgYmFzZSBjbGFzcycgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIG5lZWRzIHRvIGJlCi0gICAgICAgICAgICBvdmVycmlkZGVuIHRvIGNvcnJlY3RseSBoYW5kbGUgbGVha3kgYnVmZmVyaW5nLgotCi0gICAgICAgICAgICBJZiB0aGUgZWxlbWVudCBoYXMgbXVsdGlwbGUgc2lua3BhZHMsIHRoZSBtYXhpbXVtIHVwc3RyZWFtIGxhdGVuY3kgaXMKLSAgICAgICAgICAgIHRoZSBtaW5pbXVtIG9mIGFsbCBsaXZlIHVwc3RyZWFtIG1heGltdW0gbGF0ZW5jaWVzLgotCi1FdmVudAotfn5+fn4KLQotVGhlIGxhdGVuY3kgaW4gdGhlIHBpcGVsaW5lIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgTEFURU5DWSBldmVudCwgd2hpY2ggY29udGFpbnMKLXRoZSBmb2xsb3dpbmcgZmllbGRzOgotCi0gICAgICAibGF0ZW5jeSIsIEdfVFlQRV9VSU5UNjQKLSAgICAgICAgLSB0aGUgY29uZmlndXJlZCBsYXRlbmN5IGluIHRoZSBwaXBlbGluZQotCi0KLUxhdGVuY3kgY29tcGVuc2F0aW9uCi1+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1MYXRlbmN5IGNhbGN1bGF0aW9uIGFuZCBjb21wZW5zYXRpb24gaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgcGlwZWxpbmUgcHJvY2VlZHMgdG8KLXRoZSBQTEFZSU5HIHN0YXRlLiAKLQotV2hlbiB0aGUgcGlwZWxpbmUgY29sbGVjdGVkIGFsbCBBU1lOQ19ET05FIG1lc3NhZ2VzIGl0IGNhbiBjYWxjdWxhdGUgdGhlIGdsb2JhbAotbGF0ZW5jeSBhcyBmb2xsb3dzOgotCi0gIC0gcGVyZm9ybSBhIGxhdGVuY3kgcXVlcnkgb24gYWxsIHNpbmtzCi0gICAgLSBzb3VyY2VzIHNldCB0aGVpciBtaW5pbXVtIGFuZCBtYXhpbXVtIGxhdGVuY3kKLSAgICAtIG90aGVyIGVsZW1lbnRzIGFkZCB0aGVpciBvd24gdmFsdWVzIGFzIGRlc2NyaWJlZCBhYm92ZQotICAtIGxhdGVuY3kgPSBNQVggKGFsbCBtaW4gbGF0ZW5jaWVzKQotICAtIGlmIE1JTiAoYWxsIG1heCBsYXRlbmNpZXMpIDwgbGF0ZW5jeSB3ZSBoYXZlIGFuIGltcG9zc2libGUgc2l0dWF0aW9uIGFuZCB3ZQotICAgIG11c3QgZ2VuZXJhdGUgYW4gZXJyb3IgaW5kaWNhdGluZyB0aGF0IHRoaXMgcGlwZWxpbmUgY2Fubm90IGJlIHBsYXllZC4gVGhpcwotICAgIHVzdWFsbHkgbWVhbnMgdGhhdCB0aGVyZSBpcyBub3QgZW5vdWdoIGJ1ZmZlcmluZyBpbiBzb21lIGNoYWluIG9mIHRoZQotICAgIHBpcGVsaW5lLiBBIHF1ZXVlIGNhbiBiZSBhZGRlZCB0byB0aG9zZSBjaGFpbnMuCi0KLVRoZSBzaW5rcyBnYXRoZXIgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIGEgTEFURU5DWSBxdWVyeSB1cHN0cmVhbS4gSW50ZXJtZWRpYXRlCi1lbGVtZW50cyBwYXNzIHRoZSBxdWVyeSB1cHN0cmVhbSBhbmQgYWRkIHRoZSBhbW91bnQgb2YgbGF0ZW5jeSB0aGV5IGFkZCB0byB0aGUKLXJlc3VsdC4KLQotZXgxOgotICBzaW5rMTogWzIwIC0gMjBdCi0gIHNpbmsyOiBbMzMgLSA0MF0KLQotICBNQVggKDIwLCAzMykgPSAzMwotICBNSU4gKDIwLCA0MCkgPSAyMCA8IDMzIC0+IGltcG9zc2libGUKLQotZXgyOgotICBzaW5rMTogWzIwIC0gNTBdCi0gIHNpbmsyOiBbMzMgLSA0MF0KLQotICBNQVggKDIwLCAzMykgPSAzMwotICBNSU4gKDUwLCA0MCkgPSA0MCA+PSAzMyAtPiBsYXRlbmN5ID0gMzMKLQotVGhlIGxhdGVuY3kgaXMgc2V0IG9uIHRoZSBwaXBlbGluZSBieSBzZW5kaW5nIGEgTEFURU5DWSBldmVudCB0byB0aGUgc2lua3MKLWluIHRoZSBwaXBlbGluZS4gVGhpcyBldmVudCBjb25maWd1cmVzIHRoZSB0b3RhbCBsYXRlbmN5IG9uIHRoZSBzaW5rcy4gVGhlCi1zaW5rIGZvcndhcmRzIHRoaXMgTEFURU5DWSBldmVudCB1cHN0cmVhbSBzbyB0aGF0IGludGVybWVkaWF0ZSBlbGVtZW50cyBjYW4KLWNvbmZpZ3VyZSB0aGVtc2VsdmVzIGFzIHdlbGwuCi0KLUFmdGVyIHRoaXMgc3RlcCwgdGhlIHBpcGVsaW5lIGNvbnRpbnVlcyBzZXR0aW5nIHRoZSBwZW5kaW5nIHN0YXRlIG9uIGl0cwotZWxlbWVudHMuCi0KLUEgc2luayBhZGRzIHRoZSBsYXRlbmN5IHZhbHVlLCByZWNlaXZlZCBpbiB0aGUgTEFURU5DWSBldmVudCwgdG8KLXRoZSB0aW1lcyB1c2VkIGZvciBzeW5jaHJvbml6aW5nIGFnYWluc3QgdGhlIGNsb2NrLiBUaGlzIHdpbGwgZWZmZWN0aXZlbHkKLWRlbGF5IHRoZSByZW5kZXJpbmcgb2YgdGhlIGJ1ZmZlciB3aXRoIHRoZSByZXF1aXJlZCBsYXRlbmN5LiBTaW5jZSB0aGlzIGRlbGF5IGlzCi10aGUgc2FtZSBmb3IgYWxsIHNpbmtzLCBhbGwgc2lua3Mgd2lsbCByZW5kZXIgZGF0YSByZWxhdGl2ZWx5IHN5bmNocm9uaXNlZC4KLQotCi1GbHVzaGluZyBhIHBsYXlpbmcgcGlwZWxpbmUKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1XZSBjYW4gaW1wbGVtZW50IHJlc3luY2hyb25pc2F0aW9uIGFmdGVyIGFuIHVuY29udHJvbGxlZCBGTFVTSCBpbiAocGFydCBvZikgYQotcGlwZWxpbmUgaW4gdGhlIHNhbWUgd2F5LiBJbmRlZWQsIHdoZW4gYSBmbHVzaCBpcyBwZXJmb3JtZWQgb24KLWEgUExBWUlORyBsaXZlIGVsZW1lbnQsIGEgbmV3IGJhc2UgdGltZSBtdXN0IGJlIGRpc3RyaWJ1dGVkIHRvIHRoaXMgZWxlbWVudC4KLQotQSBmbHVzaCBpbiBhIHBpcGVsaW5lIGNhbiBoYXBwZW4gaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKLQotIC0gZmx1c2hpbmcgc2VlayBpbiB0aGUgcGlwZWxpbmUKLSAgICAtIHBlcmZvcm1lZCBieSB0aGUgYXBwbGljYXRpb24gb24gdGhlIHBpcGVsaW5lCi0gICAgLSBwZXJmb3JtZWQgYnkgdGhlIGFwcGxpY2F0aW9uIG9uIGFuIGVsZW1lbnQKLSAtIGZsdXNoIHByZWZvcm1lZCBieSBhbiBlbGVtZW50Ci0gICAgLSBhZnRlciByZWNlaXZpbmcgYSBuYXZpZ2F0aW9uIGV2ZW50IChEVkQsIC4uLikKLQotV2hlbiBhIHBsYXlpbmcgc2luayBpcyBmbHVzaGVkIGJ5IGEgRkxVU0hfU1RBUlQgZXZlbnQsIGFuIEFTWU5DX1NUQVJUICBtZXNzYWdlIGlzCi1wb3N0ZWQgYnkgdGhlIGVsZW1lbnQuIEFzIHBhcnQgb2YgdGhlIG1lc3NhZ2UsIHRoZSBmYWN0IHRoYXQgdGhlIGVsZW1lbnQgZ290Ci1mbHVzaGVkIGlzIGluY2x1ZGVkLiBUaGUgZWxlbWVudCBhbHNvIGdvZXMgdG8gYSBwZW5kaW5nIFBBVVNFRCBzdGF0ZSBhbmQgaGFzIHRvCi1iZSBzZXQgdG8gdGhlIFBMQVlJTkcgc3RhdGUgYWdhaW4gbGF0ZXIuCi0KLVRoZSBBU1lOQ19TVEFSVCBtZXNzYWdlIGlzIGtlcHQgYnkgdGhlIHBhcmVudCBiaW4uIFdoZW4gdGhlIGVsZW1lbnQgcHJlcm9sbHMsCi1pdCBwb3N0cyBhbiBBU1lOQ19ET05FIG1lc3NhZ2UuIAotCi1XaGVuIGFsbCBBU1lOQ19TVEFSVCBtZXNzYWdlcyBhcmUgbWF0Y2hlZCB3aXRoIGFuIEFTWU5DX0RPTkUgbWVzc2FnZSwgdGhlIGJpbgotd2lsbCBjYXB0dXJlIGEgbmV3IGJhc2VfdGltZSBmcm9tIHRoZSBjbG9jayBhbmQgd2lsbCBicmluZyBhbGwgdGhlIHNpbmtzIGJhY2sgdG8KLVBMQVlJTkcgYWZ0ZXIgc2V0dGluZyB0aGUgbmV3IGJhc2UgdGltZSBvbiB0aGVtLiBJdCdzIGFsc28gcG9zc2libGUKLXRvIHBlcmZvcm0gYWRkaXRpb25hbCBsYXRlbmN5IGNhbGN1bGF0aW9ucyBhbmQgYWRqdXN0bWVudHMgYmVmb3JlIGRvaW5nIHRoaXMuIAotCi0KLUR5bmFtaWNhbGx5IGFkanVzdGluZyBsYXRlbmN5Ci1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1BbiBlbGVtZW50IHRoYXQgd2FudCB0byBjaGFuZ2UgdGhlIGxhdGVuY3kgaW4gdGhlIHBpcGVsaW5lIGNhbiBkbyB0aGlzIGJ5Ci1wb3N0aW5nIGEgTEFURU5DWSBtZXNzYWdlIG9uIHRoZSBidXMuIFRoaXMgbWVzc2FnZSBpbnN0cnVjdHMgdGhlIHBpcGVsaW5lIHRvOgotCi0gLSBxdWVyeSB0aGUgbGF0ZW5jeSBpbiB0aGUgcGlwZWxpbmUgKHdoaWNoIG1pZ2h0IG5vdyBoYXZlIGNoYW5nZWQpIHdpdGggYQotICAgTEFURU5DWSBxdWVyeS4KLSAtIHJlZGlzdHJpYnV0ZSBhIG5ldyBnbG9iYWwgbGF0ZW5jeSB0byBhbGwgZWxlbWVudHMgd2l0aCBhIExBVEVOQ1kgZXZlbnQuCi0KLUEgdXNlIGNhc2Ugd2hlcmUgdGhlIGxhdGVuY3kgaW4gYSBwaXBlbGluZSBjYW4gY2hhbmdlIGNvdWxkIGJlIGEgbmV0d29yayBlbGVtZW50Ci10aGF0IG9ic2VydmVzIGFuIGluY3JlYXNlZCBpbnRlciBwYWNrZXQgYXJyaXZhbCBqaXR0ZXIgb3IgZXhjZXNzaXZlIHBhY2tldCBsb3NzCi1hbmQgZGVjaWRlcyB0byBpbmNyZWFzZSBpdHMgaW50ZXJuYWwgYnVmZmVyaW5nIChhbmQgdGh1cyB0aGUgbGF0ZW5jeSkuIFRoZQotZWxlbWVudCBtdXN0IHBvc3QgYSBMQVRFTkNZIG1lc3NhZ2UgYW5kIHBlcmZvcm0gdGhlIGFkZGl0aW9uYWwgbGF0ZW5jeQotYWRqdXN0bWVudHMgd2hlbiBpdCByZWNlaXZlcyB0aGUgTEFURU5DWSBldmVudCBmcm9tIHRoZSBkb3duc3RyZWFtIHBlZXIgZWxlbWVudC4KLQotSW4gYSBzaW1pbGFyIHdheSBjYW4gdGhlIGxhdGVuY3kgYmUgZGVjcmVhc2VkIHdoZW4gbmV0d29yayBjb25kaXRpb25zIGFyZQotaW1wcm92aW5nIGFnYWluLgotCi1MYXRlbmN5IGFkanVzdG1lbnRzIHdpbGwgaW50cm9kdWNlIGdsaXRjaGVzIGluIHBsYXliYWNrIGluIHRoZSBzaW5rcyBhbmQgbXVzdAotb25seSBiZSBwZXJmb3JtZWQgaW4gc3BlY2lhbCBjb25kaXRpb25zLgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1saXZlLXNvdXJjZS50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LWxpdmUtc291cmNlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcwNTVhNS4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LWxpdmUtc291cmNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLUxpdmUgc291cmNlcwotLS0tLS0tLS0tLS0tCi0KLUEgbGl2ZSBzb3VyY2UgaXMgYSBzb3VyY2UgdGhhdCBjYW5ub3QgYmUgYXJiaXRyYXJpbHkgUEFVU0VEIHdpdGhvdXQgbG9zaW5nCi1kYXRhLgotCi1BIGxpdmUgc291cmNlIHN1Y2ggYXMgYW4gZWxlbWVudCBjYXB0dXJpbmcgYXVkaW8gb3IgdmlkZW8gbmVlZCB0byBiZSBoYW5kbGVkCi1pbiBhIHNwZWNpYWwgd2F5LiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHN0YXJ0IHRoZSBkYXRhZmxvdyBpbiB0aGUgUEFVU0VECi1zdGF0ZSBmb3IgdGhvc2UgZGV2aWNlcyBhcyB0aGUgdXNlciBtaWdodCB3YWl0IGEgbG9uZyB0aW1lIGJldHdlZW4gZ29pbmcgZnJvbQotUEFVU0VEIHRvIFBMQVlJTkcsIG1ha2luZyB0aGUgcHJldmlvdXNseSBjYXB0dXJlZCBidWZmZXJzIGlycmVsZXZhbnQuCi0KLUEgbGl2ZSBzb3VyY2UgdGhlcmVmb3JlIG9ubHkgcHJvZHVjZXMgYnVmZmVycyBpbiB0aGUgUExBWUlORyBzdGF0ZS4gVGhpcyBoYXMKLWltcGxpY2F0aW9ucyBmb3Igc2lua3Mgd2FpdGluZyBmb3IgYSBidWZmZXIgdG8gY29tcGxldGUgdGhlIHByZXJvbGwgc3RhdGUKLXNpbmNlIHN1Y2ggYSBidWZmZXIgbWlnaHQgbmV2ZXIgYXJyaXZlLgotCi1MaXZlIHNvdXJjZXMgcmV0dXJuIE5PX1BSRVJPTEwgd2hlbiBnb2luZyB0byB0aGUgUEFVU0VEIHN0YXRlIHRvIGluZm9ybSB0aGUKLWJpbi9waXBlbGluZSB0aGF0IHRoaXMgZWxlbWVudCB3aWxsIG5vdCBiZSBhYmxlIHRvIHByb2R1Y2UgZGF0YSBpbiB0aGUKLVBBVVNFRCBzdGF0ZS4gTk9fUFJFUk9MTCBzaG91bGQgYmUgcmV0dXJuZWQgZm9yIGJvdGggUkVBRFktPlBBVVNFRCBhbmQKLVBMQVlJTkctPlBBVVNFRC4KLQotV2hlbiBwZXJmb3JtaW5nIGEgZ2V0X3N0YXRlKCkgb24gYSBiaW4gd2l0aCBhIG5vbi16ZXJvIHRpbWVvdXQgdmFsdWUsIHRoZQotYmluIG11c3QgYmUgc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBsaXZlIHNvdXJjZXMgaW4gdGhlIHBpcGVsaW5lIGJlY2F1c2UgZWxzZQotdGhlIGdldF9zdGF0ZSgpIGZ1bmN0aW9uIHdvdWxkIGJsb2NrIG9uIHRoZSBzaW5rcy4KLQotQSBnc3RiaW4gdGhlcmVmb3JlIGFsd2F5cyBwZXJmb3JtcyBhIHplcm8gdGltZW91dCBnZXRfc3RhdGUoKSBvbiBpdHMKLWVsZW1lbnRzIHRvIGRpc2NvdmVyIHRoZSBOT19QUkVST0xMIChhbmQgRVJST1IpIGVsZW1lbnRzIGJlZm9yZSBwZXJmb3JtaW5nCi1hIGJsb2NraW5nIHdhaXQuCi0KLQotU2NoZWR1bGluZwotfn5+fn5+fn5+fgotCi1MaXZlIHNvdXJjZXMgd2lsbCBub3QgcHJvZHVjZSBkYXRhIGluIHRoZSBwYXVzZWQgc3RhdGUuIFRoZXkgYmxvY2sgaW4gdGhlIAotZ2V0cmFuZ2UgZnVuY3Rpb24gb3IgaW4gdGhlIGxvb3AgZnVuY3Rpb24gdW50aWwgdGhleSBnbyB0byBQTEFZSU5HLgotCi0KLUxhdGVuY3kKLX5+fn5+fn4KLQotVGhlIGxpdmUgc291cmNlIHRpbWVzdGFtcHMgaXRzIGRhdGEgd2l0aCB0aGUgdGltZSBvZiB0aGUgY2xvY2sgYXQgdGhlCi10aW1lIHRoZSBkYXRhIHdhcyBjYXB0dXJlZC4gTm9ybWFsbHkgaXQgd2lsbCB0YWtlIHNvbWUgdGltZSB0byBjYXB0dXJlCi10aGUgZmlyc3Qgc2FtcGxlIG9mIGRhdGEgYW5kIHRoZSBsYXN0IHNhbXBsZS4gVGhpcyBtZWFucyB0aGF0IHdoZW4gdGhlCi1idWZmZXIgYXJyaXZlcyBhdCB0aGUgc2luaywgaXQgd2lsbCBhbHJlYWR5IGJlIGxhdGUgYW5kIHdpbGwgYmUgZHJvcHBlZC4KLQotVGhlIGxhdGVuY3kgaXMgdGhlIHRpbWUgaXQgdGFrZXMgdG8gY29uc3RydWN0IG9uZSBidWZmZXIgb2YgZGF0YS4gVGhpcyBsYXRlbmN5Ci1pcyBleHBvc2VkIHdpdGggYSBMQVRFTkNZIHF1ZXJ5LgotCi1TZWUgcGFydC1sYXRlbmN5LnR4dC4KLQotCi1UaW1lc3RhbXBzCi1+fn5+fn5+fn5+Ci0KLUxpdmUgc291cmNlcyBhbHdheXMgdGltZXN0YW1wIHRoZWlyIGJ1ZmZlcnMgd2l0aCB0aGUgcnVubmluZ190aW1lIG9mIHRoZQotcGlwZWxpbmUuIFRoaXMgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gbWF0Y2ggdGhlIHRpbWVzdGFtcHMgb2YgZGlmZmVyZW50IGxpdmUKLXNvdXJjZXMgaW4gb3JkZXIgdG8gc3luY2hyb25pemUgdGhlbS4KLQotVGhpcyBpcyBpbiBjb250cmFzdCB0byBub24tbGl2ZSBzb3VyY2VzLCB3aGljaCB0aW1lc3RhbXAgdGhlaXIgYnVmZmVycyBzdGFydGluZwotZnJvbSBydW5uaW5nX3RpbWUgMC4KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1tZW1vcnkudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1tZW1vcnkudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjUyOGU4Li4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtbWVtb3J5LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi1Hc3RNZW1vcnkKLS0tLS0tLS0tLQotCi1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGVzaWduIG9mIHRoZSBtZW1vcnkgb2JqZWN0cy4KLQotR3N0TWVtb3J5IG9iamVjdHMgYXJlIHVzdWFsbHkgYWRkZWQgdG8gR3N0QnVmZmVyIG9iamVjdHMgYW5kIGNvbnRhaW4gdGhlCi1tdWx0aW1lZGlhIGRhdGEgcGFzc2VkIGFyb3VuZCBpbiB0aGUgcGlwZWxpbmUuCi0KLVJlcXVpcmVtZW50cwotfn5+fn5+fn5+fn5+Ci0KLSAtIEl0IG11c3QgYmUgcG9zc2libGUgdG8gaGF2ZSBkaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRvcnMKLSAtIEl0IG11c3QgYmUgcG9zc2libGUgdG8gZWZmaWNpZW50bHkgc2hhcmUgbWVtb3J5IG9iamVjdHMsIGNvcHksIHNwYW4KLSAgIGFuZCB0cmltLgotCi0KLU1lbW9yeSBsYXlvdXQKLX5+fn5+fn5+fn5+fn4KLQotIEdzdE1lbW9yeSBtYW5hZ2VzIGEgbWVtb3J5IHJlZ2lvbi4gVGhlIGFjY2Vzc2libGUgcGFydCBvZiB0aGUgbWFuYWdlZCByZWdpb24gaXMKLSBkZWZpbmVkIGJ5IGFuIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lvbiBhbmQgYSBzaXplLiBUaGlzCi0gbWVhbnMgdGhhdCB0aGUgbWFuYWdlZCByZWdpb24gY2FuIGJlIGxhcmdlciB0aGFuIHdoYXQgaXMgdmlzaWJsZSB0byB0aGUgdXNlciBvZgotIEdzdE1lbW9yeSBBUEkuCi0KLSBTY2hlbWF0aWNhbGx5LCBHc3RNZW1vcnkgaGFzIGEgcG9pbnRlciB0byBhIG1lbW9yeSByZWdpb24gb2YgX21heHNpemVfLiBUaGUgYXJlYQotIHN0YXJ0aW5nIGZyb20gX29mZnNldF8gYW5kIF9zaXplXyBpcyBhY2Nlc3NpYmxlLgotCi0gICAgICAgICAgICAgICBtZW1vcnkKLSAgICBHc3RNZW1vcnkgIC0+Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCi0gICAgICAgICAgICAgICAgIF4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4c2l6ZQotICAgICAgICAgICAgICAgICAgICAgIF4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLV4gICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAgICAgICAgICAgIHNpemUKLQotIFRoZSBjdXJyZW50IHByb3BlcnRpZXMgb2YgdGhlIGFjY2Vzc2libGUgbWVtb3J5IGNhbiBiZSByZXRyaWV2ZWQgd2l0aDoKLQotICAgZ3NpemUgICAgICAgZ3N0X21lbW9yeV9nZXRfc2l6ZXMgIChHc3RNZW1vcnkgKm1lbSwgZ3NpemUgKm9mZnNldCwgZ3NpemUgKm1heHNpemUpOwotCi0gVGhlIG9mZnNldCBhbmQgc2l6ZSBjYW4gYmUgY2hhbmdlZCB3aXRoOgotCi0gICB2b2lkICAgICAgICBnc3RfbWVtb3J5X3Jlc2l6ZSAgICAgKEdzdE1lbW9yeSAqbWVtLCBnc3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKLQotCi1BbGxvY2F0b3JzCi1+fn5+fn5+fn5+Ci0KLSBHc3RNZW1vcnkgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBhbGxvY2F0b3JzLiBBbGxvY2F0b3JzIGFyZSBhIHN1YmNsYXNzCi0gb2YgR3N0T2JqZWN0IGFuZCBjYW4gYmUgc3ViY2xhc3NlZCB0byBtYWtlIGN1c3RvbSBhbGxvY2F0b3JzLgotCi0gIHN0cnVjdCBfR3N0QWxsb2NhdG9yIHsKLSAgICBHc3RPYmplY3QgICAgICAgICAgICAgICAgIG9iamVjdDsKLQotICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAqbWVtX3R5cGU7Ci0KLSAgICBHc3RNZW1vcnlNYXBGdW5jdGlvbiAgICAgIG1lbV9tYXA7Ci0gICAgR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiAgICBtZW1fdW5tYXA7Ci0KLSAgICBHc3RNZW1vcnlDb3B5RnVuY3Rpb24gICAgIG1lbV9jb3B5OwotICAgIEdzdE1lbW9yeVNoYXJlRnVuY3Rpb24gICAgbWVtX3NoYXJlOwotICAgIEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uICAgbWVtX2lzX3NwYW47Ci0gIH07Ci0KLSBUaGUgYWxsb2NhdG9yIGNsYXNzIGhhcyAyIHZpcnR1YWwgbWV0aG9kcy4gT25lIHRvIGNyZWF0ZSBhIEdzdE1lbW9yeSwKLSBhbm90aGVyIHRvIGZyZWUgaXQgYWdhaW4uCi0KLSAgc3RydWN0IF9Hc3RBbGxvY2F0b3JDbGFzcyB7Ci0gICAgR3N0T2JqZWN0Q2xhc3Mgb2JqZWN0X2NsYXNzOwotCi0gICAgR3N0TWVtb3J5ICogICgqYWxsb2MpICAgICAgKEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yLCBnc2l6ZSBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBbGxvY2F0aW9uUGFyYW1zICpwYXJhbXMpOwotICAgIHZvaWQgICAgICAgICAoKmZyZWUpICAgICAgIChHc3RBbGxvY2F0b3IgKmFsbG9jYXRvciwgR3N0TWVtb3J5ICptZW1vcnkpOwotICB9OwotCi0KLSBBbGxvY2F0b3JzIGFyZSByZWZjb3VudGVkLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJlZ2lzdGVyIHRoZSBhbGxvY2F0b3IgdG8gdGhlCi0gR1N0cmVhbWVyIHN5c3RlbS4gVGhpcyB3YXksIHRoZSBhbGxvY2F0b3IgY2FuIGJlIHJldHJpZXZlZCBieSBuYW1lLgotCi0gQWZ0ZXIgYW4gYWxsb2NhdG9yIGlzIGNyZWF0ZWQsIG5ldyBHc3RNZW1vcnkgY2FuIGJlIGNyZWF0ZWQgd2l0aCAKLQotICAgR3N0TWVtb3J5ICogZ3N0X2FsbG9jYXRvcl9hbGxvYyAoY29uc3QgR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKnBhcmFtcyk7Ci0KLSBHc3RBbGxvY2F0aW9uUGFyYW1zIGNvbnRhaW4gZXh0cmEgaW5mbyBzdWNoIGFzIGZsYWdzLCBhbGlnbm1lbnQsIHByZWZpeCBhbmQKLSBwYWRkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSBUaGUgR3N0TWVtb3J5IG9iamVjdCBpcyBhIHJlZmNvdW50ZWQgb2JqZWN0IHRoYXQgbXVzdCBiZSBmcmVlZCB3aXRoCi0gZ3N0X21lbW9yeV91bnJlZiAoKS4KLQotIFRoZSBHc3RNZW1vcnkga2VlcHMgYSByZWYgdG8gdGhlIGFsbG9jYXRvciB0aGF0IGFsbG9jYXRlZCBpdC4gSW5zaWRlIHRoZQotIGFsbG9jYXRvciBhcmUgdGhlIG1vc3QgY29tbW9uIEdzdE1lbW9yeSBvcGVyYXRpb25zIGxpc3RlZC4gQ3VzdG9tCi0gR3N0QWxsb2NhdG9yIGltcGxlbWVudGF0aW9ucyBtdXN0IGltcGxlbWVudCB0aGUgdmFyaW91cyBvcGVyYXRpb25zIG9uCi0gdGhlIG1lbW9yeSB0aGV5IGFsbG9jYXRlLgotCi0gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYSBuZXcgR3N0TWVtb3J5IG9iamVjdCB0aGF0IHdyYXBzIGV4aXN0aW5nCi0gbWVtb3J5IHdpdGg6Ci0gIAotICAgR3N0TWVtb3J5ICogZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAgKEdzdE1lbW9yeUZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEsIGdzaXplIG1heHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwotCi1MaWZlY3ljbGUKLX5+fn5+fn5+fgotCi1Hc3RNZW1vcnkgZXh0ZW5kcyBmcm9tIEdzdE1pbmlPYmplY3QgYW5kIHRoZXJlZm9yZSB1c2VzIGl0cyBsaWZlY3ljbGUKLW1hbmFnZW1lbnQgKFNlZSBwYXJ0LW1pbmlvYmplY3QudHh0KS4KLQotCi0KLURhdGEgQWNjZXNzCi1+fn5+fn5+fn5+fgotCi0gQWNjZXNzIHRvIHRoZSBtZW1vcnkgcmVnaW9uIGlzIGFsd2F5cyBjb250cm9sbGVkIHdpdGggYSBtYXAgYW5kIHVubWFwIG1ldGhvZAotIGNhbGwuIFRoaXMgYWxsb3dzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBtb25pdG9yIHRoZSBhY2Nlc3MgcGF0dGVybnMgb3Igc2V0IHVwCi0gdGhlIHJlcXVpcmVkIG1lbW9yeSBtYXBwaW5ncyB3aGVuIG5lZWRlZC4KLQotIFRoZSBhY2Nlc3Mgb2YgdGhlIG1lbW9yeSBvYmplY3QgaXMgY29udHJvbGxlZCB3aXRoIHRoZSBsb2NraW5nIG1lY2hhbmlzbSBvbgotIEdzdE1pbmlPYmplY3QgKFNlZSBwYXJ0LW1pbmlvYmplY3QudHh0KS4KLQotIE1hcHBpbmcgYSBtZW1vcnkgcmVnaW9uIHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gc3BlY2lmeSB0aGUgYWNjZXNzIG1ldGhvZDogUkVBRAotIGFuZC9vciBXUklURS4gTWFwcGluZyBhIG1lbW9yeSByZWdpb24gd2lsbCBmaXJzdCB0cnkgdG8gZ2V0IGEgbG9jayBvbiB0aGUKLSBtZW1vcnkgaW4gdGhlIHJlcXVlc3RlZCBhY2Nlc3MgbW9kZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBtYXAgb3BlcmF0aW9uIGNhbgotIGZhaWwgd2hlbiBXUklURSBhY2Nlc3MgaXMgcmVxdWVzdGVkIG9uIGEgbm9uLXdyaXRhYmxlIG1lbW9yeSBvYmplY3QgKGl0IGhhcwotIGFuIGV4Y2x1c2l2ZSBjb3VudGVyID4gMSwgdGhlIG1lbW9yeSBpcyBhbHJlYWR5IGxvY2tlZCBpbiBhbiBpbmNvbXBhdGlibGUKLSBhY2Nlc3MgbW9kZSBvciB0aGUgbWVtb3J5IGlzIG1hcmtlZCByZWFkb25seSkuCi0KLSBBZnRlciB0aGUgZGF0YSBoYXMgYmVlbiBhY2Nlc3NlZCBpbiB0aGUgb2JqZWN0LCB0aGUgdW5tYXAgY2FsbCBtdXN0IGJlCi0gcGVyZm9ybWVkLCB3aGljaCB3aWxsIHVubG9jayB0aGUgbWVtb3J5IGFnYWluLgotCi0gSXQgaXMgYWxsb3dlZCB0byByZWN1cnNpdmVseSBtYXAgbXVsdGlwbGUgdGltZXMgd2l0aCB0aGUgc2FtZSBvciBuYXJyb3dlcgotIGFjY2VzcyBtb2Rlcy4gRm9yIGVhY2ggb2YgdGhlIG1hcCBjYWxscywgYSBjb3JyZXNwb25kaW5nIHVubWFwIGNhbGwgbmVlZHMgdG8KLSBiZSBtYWRlLiBXUklURS1vbmx5IG1lbW9yeSBjYW5ub3QgYmUgbWFwcGVkIGluIFJFQUQgbW9kZSBhbmQgUkVBRC1vbmx5IG1lbW9yeQotIGNhbm5vdCBiZSBtYXBwZWQgaW4gV1JJVEUgbW9kZS4KLSAKLSBUaGUgbWVtb3J5IHBvaW50ZXIgcmV0dXJuZWQgZnJvbSB0aGUgbWFwIGNhbGwgaXMgZ3VhcmFudGVlZCB0byByZW1haW4gdmFsaWQgaW4KLSB0aGUgcmVxdWVzdGVkIG1hcHBpbmcgbW9kZSB1bnRpbCB0aGUgY29ycmVzcG9uZGluZyB1bm1hcCBjYWxsIGlzIHBlcmZvcm1lZCBvbgotIHRoZSBwb2ludGVyLgotIAotIFdoZW4gbXVsdGlwbGUgbWFwIG9wZXJhdGlvbnMgYXJlIG5lc3RlZCBhbmQgcmV0dXJuIHRoZSBzYW1lIHBvaW50ZXIsIHRoZSBwb2ludGVyCi0gaXMgdmFsaWQgdW50aWwgdGhlIGxhc3QgdW5tYXAgY2FsbCBpcyBkb25lLgotCi0gV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIG9uIGEgbWVtb3J5IG9iamVjdCBpcyBkcm9wcGVkLCBhbGwgb3V0c3RhbmRpbmcKLSBtYXBwaW5ncyBzaG91bGQgaGF2ZSBiZWVuIHVubWFwcGVkLgotCi0gUmVzaXppbmcgYSBHc3RNZW1vcnkgZG9lcyBub3QgaW5mbHVlbmNlIGFueSBjdXJyZW50IG1hcHBpbmdzIGluIGFueSB3YXkuCi0KLUNvcHkKLX5+fn4KLQotIEEgR3N0TWVtb3J5IGNvcHkgY2FuIGJlIG1hZGUgd2l0aCB0aGUgZ3N0X21lbW9yeV9jb3B5KCkgY2FsbC4gTm9ybWFsbHksCi0gYWxsb2NhdG9ycyB3aWxsIGltcGxlbWVudCBhIGN1c3RvbSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdG8gbWFrZSBhIGNvcHkgb2YKLSB0aGUgc2FtZSBraW5kIG9mIG1lbW9yeSBhcyB0aGUgb3JpZ2luYWwgb25lLgotCi0gVGhpcyBpcyB3aGF0IHRoZSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBjb3B5IGZ1bmN0aW9uIGRvZXMsIGFsYmVpdCBzbG93ZXIKLSB0aGFuIHdoYXQgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gY291bGQgZG8uCi0KLSBUaGUgY29weSBvcGVyYXRpb24gaXMgb25seSByZXF1aXJlZCB0byBjb3B5IHRoZSB2aXNpYmxlIHJhbmdlIG9mIHRoZSBtZW1vcnkKLSBibG9jay4KLQotCi1TaGFyZQotfn5+fn4KLQotIEEgbWVtb3J5IHJlZ2lvbiBjYW4gYmUgc2hhcmVkIGJldHdlZW4gR3N0TWVtb3J5IG9iamVjdCB3aXRoIHRoZQotIGdzdF9tZW1vcnlfc2hhcmUoKSBvcGVyYXRpb24uIAotCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtbWVzc2FnZXMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMDhkYmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1tZXNzYWdlcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotTWVzc2FnZXMKLS0tLS0tLS0tCi0KLU1lc3NhZ2VzIGFyZSByZWZjb3VudGVkIGxpZ2h0d2VpZ2h0IG9iamVjdHMgdG8gc2lnbmFsIHRoZSBhcHBsaWNhdGlvbgotb2YgcGlwZWxpbmUgZXZlbnRzLiAKLQotTWVzc2FnZXMgYXJlIGltcGxlbWVudGVkIGFzIGEgc3ViY2xhc3Mgb2YgR3N0TWluaU9iamVjdCB3aXRoIGEgZ2VuZXJpYyAKLUdzdFN0cnVjdHVyZSBhcyB0aGUgY29udGVudC4gVGhpcyBhbGxvd3MgZm9yIHdyaXRpbmcgY3VzdG9tIG1lc3NhZ2VzIHdpdGhvdXQKLXJlcXVpcmluZyBhbiBBUEkgY2hhbmdlIHdoaWxlIGFsbG93aW5nIGEgd2lkZSByYW5nZSBvZiBkaWZmZXJlbnQgdHlwZXMKLW9mIG1lc3NhZ2VzLgotCi1NZXNzYWdlcyBhcmUgcG9zdGVkIGJ5IG9iamVjdHMgaW4gdGhlIHBpcGVsaW5lIGFuZCBhcmUgcGFzc2VkIHRvIHRoZSAKLWFwcGxpY2F0aW9uIHVzaW5nIHRoZSBHc3RCdXMgKFNlZSBhbHNvIHBhcnQtZ3N0YnVzLnR4dCBhbmQgcGFydC1nc3RwaXBlbGluZS50eHQpLiAKLQotCi1NZXNzYWdlIHR5cGVzCi1+fn5+fn5+fn5+fn5+Ci0KLUdTVF9NRVNTQUdFX0VPUzoKLQotICBQb3N0ZWQgYnkgc2luayBlbGVtZW50cy4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB0byB0aGUgYXBwbGljYXRpb24gd2hlbiBhbGwKLSAgdGhlIHNpbmtzIGluIGEgcGlwZWxpbmUgaGF2ZSBwb3N0ZWQgYW4gRU9TIG1lc3NhZ2UuIFdoZW4gcGVyZm9ybWluZyBhCi0gIGZsdXNoaW5nIHNlZWssIHRoZSBFT1Mgc3RhdGUgb2YgdGhlIHBpcGVsaW5lIGFuZCBzaW5rcyBpcyByZXNldC4KLQotR1NUX01FU1NBR0VfRVJST1I6Ci0KLSAgQW4gZWxlbWVudCBpbiB0aGUgcGlwZWxpbmUgZ290IGludG8gYW4gZXJyb3Igc3RhdGUuIFRoZSBtZXNzYWdlIGNhcnJpZXMKLSAgYSBHRXJyb3IgYW5kIGEgZGVidWcgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yLiBUaGlzIHVzdWFsbHkgbWVhbnMgdGhhdAotICBwYXJ0IG9mIHRoZSBwaXBlbGluZSBpcyBub3Qgc3RyZWFtaW5nIGFueW1vcmUuCi0KLUdTVF9NRVNTQUdFX1dBUk5JTkc6Ci0KLSAgQW4gZWxlbWVudCBpbiB0aGUgcGlwZWxpbmUgZW5jb3VudGVyZWQgYSBjb25kaXRpb24gdGhhdCBtYWRlIGl0IHByb2R1Y2UgYQotICB3YXJuaW5nLiBUaGlzIGNvdWxkIGJlIGEgcmVjb3ZlcmFibGUgZGVjb2RpbmcgZXJyb3Igb3Igc29tZSBvdGhlciBub24gZmF0YWwKLSAgZXZlbnQuIFRoZSBwaXBlbGluZSBjb250aW51ZXMgc3RyZWFtaW5nIGFmdGVyIGEgd2FybmluZy4KLQotR1NUX01FU1NBR0VfSU5GTzoKLQotICBBbiBlbGVtZW50IHByb2R1Y2VkIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4KLQotR1NUX01FU1NBR0VfVEFHOgotCi0gIEFuIGVsZW1lbnQgZGVjb2RlZCBtZXRhZGF0YSBhYm91dCB0aGUgc3RyZWFtLiBUaGUgbWVzc2FnZSBjYXJyaWVzIGEgR3N0VGFnTGlzdAotICB3aXRoIHRoZSB0YWcgaW5mb3JtYXRpb24uCi0KLUdTVF9NRVNTQUdFX0JVRkZFUklORzoKLQotICBBbiBlbGVtZW50IGlzIGJ1ZmZlcmluZyBkYXRhIGFuZCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHRha2Ugc29tZSB0aW1lLiBUaGlzCi0gIG1lc3NhZ2UgaXMgdHlwaWNhbGx5IGVtaXR0ZWQgYnkgZWxlbWVudHMgdGhhdCBwZXJmb3JtIHNvbWUgc29ydCBvZiBuZXR3b3JrCi0gIGJ1ZmZlcmluZy4gV2hpbGUgdGhlIHBpcGVsaW5lIGlzIGJ1ZmZlcmluZyBpdCBzaG91bGQgcmVtYWluIGluIHRoZSBQQVVTRUQKLSAgc3RhdGUuIFdoZW4gdGhlIGJ1ZmZlcmluZyBpcyBmaW5pc2hlZCwgaXQgY2FuIHJlc3VtZSBQTEFZSU5HLgotCi1HU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEOgotCi0gIEFuIGVsZW1lbnQgY2hhbmdlZCBzdGF0ZSBpbiB0aGUgcGlwZWxpbmUuIFRoZSBtZXNzYWdlIGNhcnJpZXMgdGhlIG9sZCwgbmV3Ci0gIGFuZCBwZW5kaW5nIHN0YXRlIG9mIHRoZSBlbGVtZW50LgotCi1HU1RfTUVTU0FHRV9TVEFURV9ESVJUWToKLSAgCi0gIEFuIGludGVybmFsIG1lc3NhZ2UgdXNlZCB0byBpbnN0cnVjdCBhIHBpcGVsaW5lIGhpZXJhcmNoeSB0aGF0IGEgc3RhdGUKLSAgcmVjYWxjdWxhdGlvbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWNhdXNlIG9mIGFuIEFTWU5DIHN0YXRlIGNoYW5nZSBjb21wbGV0ZWQuCi0gIFRoaXMgbWVzc2FnZSBpcyBub3QgdXNlZCBhbnltb3JlLgotCi1HU1RfTUVTU0FHRV9TVEVQX0RPTkU6Ci0KLSAgQW4gZWxlbWVudCBzdGVwcGluZyBmcmFtZXMgaGFzIGZpbmlzaGVkLiBUaGlzIGlzIGN1cnJlbnRseSBub3QgdXNlZC4KLQotR1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERToKLQotICBBbiBlbGVtZW50IG5vdGlmaWVzIGl0cyBjYXBhYmlsaXR5IG9mIHByb3ZpZGluZyBhIGNsb2NrIGZvciB0aGUgcGlwZWxpbmUuCi0KLUdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q6Ci0KLSAgVGhlIGN1cnJlbnQgY2xvY2ssIGFzIHNlbGVjdGVkIGJ5IHRoZSBwaXBlbGluZSwgYmVjYW1lIHVudXNhYmxlLiBUaGUgcGlwZWxpbmUgCi0gIHdpbGwgc2VsZWN0IGEgbmV3IGNsb2NrIG9uIHRoZSBuZXh0IFBMQVlJTkcgc3RhdGUgY2hhbmdlLgotCi1HU1RfTUVTU0FHRV9ORVdfQ0xPQ0s6Ci0KLSAgQSBuZXcgY2xvY2sgd2FzIHNlbGVjdGVkIGZvciB0aGUgcGlwZWxpbmUuCi0KLUdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0U6Ci0KLSAgVGhlIHBpcGVsaW5lIGNoYW5nZWQgaXRzIHN0cnVjdHVyZSwgVGhpcyBtZWFucyBlbGVtZW50cyB3ZXJlIGFkZGVkIG9yIHJlbW92ZWQgb3IKLSAgcGFkcyB3ZXJlIGxpbmtlZCBvciB1bmxpbmtlZC4gVGhpcyBtZXNzYWdlIGlzIG5vdCB5ZXQgdXNlZC4KLQotR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUzoKLQotICBQb3N0ZWQgYnkgYW4gZWxlbWVudCB3aGVuIGl0IHN0YXJ0cy9zdG9wcy9wYXVzZXMgYSBzdHJlYW1pbmcgdGFzay4gSXQKLSAgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlYXNvbiB3aHkgdGhlIHN0cmVhbSBzdGF0ZSBjaGFuZ2VkIGFsb25nCi0gIHdpdGggdGhlIHRocmVhZCBpZC4gVGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlY3QKLSAgZmFpbHVyZXMgaW4gc3RyZWFtaW5nIHRocmVhZHMgYW5kL29yIHRvIGFkanVzdCBzdHJlYW1pbmcgdGhyZWFkIHByaW9yaXRpZXMuCi0gIAotR1NUX01FU1NBR0VfQVBQTElDQVRJT046Ci0KLSAgVGhlIGFwcGxpY2F0aW9uIHBvc3RlZCBhIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBtdXN0IGJlIHVzZWQgd2hlbiB0aGUKLSAgYXBwbGljYXRpb24gcG9zdHMgYSBtZXNzYWdlIG9uIHRoZSBidXMuCi0KLUdTVF9NRVNTQUdFX0VMRU1FTlQ6Ci0KLSAgRWxlbWVudC1zcGVjaWZpYyBtZXNzYWdlLiBTZWUgdGhlIHNwZWNpZmljIGVsZW1lbnQncyBkb2N1bWVudGF0aW9uCi0KLUdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQ6Ci0KLSAgQW4gZWxlbWVudCBzdGFydGVkIHBsYXliYWNrIG9mIGEgbmV3IHNlZ21lbnQuIFRoaXMgbWVzc2FnZSBpcyBub3QgZm9yd2FyZGVkCi0gIHRvIGFwcGxpY2F0aW9ucyBidXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIHNjaGVkdWxlIFNFR01FTlRfRE9ORSBtZXNzYWdlcy4KLQotR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FOgotCi0gIEFuIGVsZW1lbnQgb3IgYmluIGNvbXBsZXRlZCBwbGF5YmFjayBvZiBhIHNlZ21lbnQuIFRoaXMgbWVzc2FnZSBpcyBvbmx5IHBvc3RlZAotICBvbiB0aGUgYnVzIGlmIGEgU0VHTUVOVCBzZWVrIGlzIHBlcmZvcm1lZCBvbiBhIHBpcGVsaW5lLgotCi1HU1RfTUVTU0FHRV9EVVJBVElPTl9DSEFOR0VEOgotCi0gIEFuIGVsZW1lbnQgcG9zdHMgdGhpcyBtZXNzYWdlIHdoZW4gaXQgaGFzIGRldGVjdGVkIG9yIHVwZGF0ZWQgdGhlIHN0cmVhbSBkdXJhdGlvbi4KLQotR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQ6Ci0KLSAgUG9zdGVkIGJ5IHNpbmtzIHdoZW4gdGhleSBzdGFydCBhbiBhc3luY2hyb25vdXMgc3RhdGUgY2hhbmdlLgotCi1HU1RfTUVTU0FHRV9BU1lOQ19ET05FOgotCi0gIFBvc3RlZCBieSBzaW5rcyB3aGVuIHRoZXkgcmVjZWl2ZSB0aGUgZmlyc3QgZGF0YSBidWZmZXIgYW5kIGNvbXBsZXRlIHRoZQotICBhc3luY2hyb25vdXMgc3RhdGUgY2hhbmdlLgotCi1HU1RfTUVTU0FHRV9MQVRFTkNZOgotCi0gIFBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZSBsYXRlbmN5IGluIGEgcGlwZWxpbmUgY2hhbmdlZCBhbmQgYSBuZXcgZ2xvYmFsCi0gIGxhdGVuY3kgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYnkgdGhlIHBpcGVsaW5lIG9yIGFwcGxpY2F0aW9uLgotCi1HU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFOgotCi0gIFBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgd2FudCB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBwaXBlbGluZSB0aGV5Ci0gIGFyZSBpbi4gQSB0eXBpY2FsIHVzZSBjYXNlIHdvdWxkIGJlIGFuIGF1ZGlvIHNpbmsgdGhhdCByZXF1ZXN0cyB0aGUgcGlwZWxpbmUKLSAgdG8gcGF1c2UgaW4gb3JkZXIgdG8gcGxheSBhIGhpZ2hlciBwcmlvcml0eSBzdHJlYW0uCi0KLUdTVF9NRVNTQUdFX1NURVBfU1RBUlQ6Ci0KLSAgQSBTdGVwcGluZyBvcGVyYXRpb24gaGFzIHN0YXJ0ZWQuCi0KLUdTVF9NRVNTQUdFX1FPUzoKLQotICBBIGJ1ZmZlciB3YXMgZHJvcHBlZCBvciBhbiBlbGVtZW50IGNoYW5nZWQgaXRzIHByb2Nlc3Npbmcgc3RyYXRlZ3kgZm9yCi0gIFF1YWxpdHkgb2YgU2VydmljZSByZWFzb25zLgotCi1HU1RfTUVTU0FHRV9QUk9HUkVTUzoKLQotICBBIHByb2dyZXNzIG1lc3NhZ2Ugd2FzIHBvc3RlZC4gUHJvZ3Jlc3MgbWVzc2FnZXMgaW5mb3JtIHRoZSBhcHBsaWNhdGlvbiBhYm91dAotICB0aGUgc3RhdGUgb2YgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LW1ldGEudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1tZXRhLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBlMjgxNC4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LW1ldGEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzk2ICswLDAgQEAKLUdzdE1ldGEKLS0tLS0tLS0KLQotVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRlc2lnbiBmb3IgYXJiaXRyYXJ5IHBlci1idWZmZXIgbWV0YWRhdGEuCi0KLUJ1ZmZlciBtZXRhZGF0YSB0eXBpY2FsbHkgZGVzY3JpYmVzIHRoZSBsb3cgbGV2ZWwgcHJvcGVydGllcyBvZiB0aGUgYnVmZmVyCi1jb250ZW50LiBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBjb21tb25seSBub3QgbmVnb3RpYXRlZCB3aXRoIGNhcHMgYnV0IHRoZXkgYXJlCi1uZWdvdGlhdGVkIGluIHRoZSBidWZmZXJwb29scy4KLQotU29tZSBleGFtcGxlcyBvZiBtZXRhZGF0YToKLQotIC0gaW50ZXJsYWNpbmcgaW5mb3JtYXRpb24KLSAtIHZpZGVvIGFsaWdubWVudCwgY3JvcHBpbmcsIHBhbm5pbmcgaW5mb3JtYXRpb24KLSAtIGV4dHJhIGNvbnRhaW5lciBpbmZvcm1hdGlvbiBzdWNoIGFzIGdyYW51bGVwb3MsIC4uLgotIC0gZXh0cmEgZ2xvYmFsIGJ1ZmZlciBwcm9wZXJ0aWVzCi0KLQotUmVxdWlyZW1lbnRzCi1+fn5+fn5+fn5+fn4KLQotIC0gSXQgbXVzdCBiZSBmYXN0Ci0gICAgKiBhbGxvY2F0aW9uLCBmcmVlLCBsb3cgZnJhZ21lbnRhdGlvbgotICAgICogYWNjZXNzIHRvIHRoZSBtZXRhZGF0YSBmaWVsZHMsIHByZWZlcmFibHkgbm90IG11Y2ggc2xvd2VyIHRoYW4gZGlyZWN0bHkKLSAgICAgIGFjY2Vzc2luZyBhIEMgc3RydWN0dXJlIGZpZWxkCi0gLSBJdCBtdXN0IGJlIGV4dGVuc2libGUuIEVsZW1lbnRzIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBuZXcgYXJiaXRyYXJ5IG1ldGFkYXRhCi0gICB3aXRob3V0IHJlcXVpcmluZyBtdWNoIGVmZm9ydC4gQWxzbyBuZXcgbWV0YWRhdGEgZmllbGRzIHNob3VsZCBub3QgYnJlYWsgQVBJCi0gICBvciBBQkkuCi0gLSBJdCBwbGF5cyBuaWNlIHdpdGggc3ViYnVmZmVycy4gV2hlbiBhIHN1YmJ1ZmZlciBpcyBjcmVhdGVkLCB0aGUgdmFyaW91cwotICAgYnVmZmVyIG1ldGFkYXRhIHNob3VsZCBiZSBjb3BpZWQvdXBkYXRlZCBjb3JyZWN0bHkuCi0gLSBXZSBzaG91bGQgYmUgYWJsZSB0byBuZWdvdGlhdGUgbWV0YWRhdGEgYmV0d2VlbiBlbGVtZW50cwotCi1Vc2UgY2FzZXMKLS0tLS0tLS0tLQotCi0gKiBWaWRlbyBwbGFuZXMKLQotIFZpZGVvIGRhdGEgaXMgc29tZXRpbWVzIGFsbG9jYXRlZCBpbiBub24tY29udGlndW91cyBwbGFuZXMgZm9yIHRoZSBZIGFuZCB0aGUgVVYKLSBkYXRhLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSB0aGUgZGF0YSBvbiBhIGJ1ZmZlciB1c2luZyBtdWx0aXBsZQotIHBvaW50ZXJzIGluIG1lbW9yeS4gV2UgYWxzbyBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSB0aGUgc3RyaWRlIGZvciB0aGVzZQotIHBsYW5lcy4KLQotICogRXh0cmEgYnVmZmVyIGRhdGEKLQotIFNvbWUgZWxlbWVudHMgbWlnaHQgbmVlZCB0byBzdG9yZSBleHRyYSBkYXRhIGZvciBhIGJ1ZmZlci4gVGhpcyBpcyB0eXBpY2FsbHkKLSBkb25lIHdoZW4gdGhlIHJlc291cmNlcyBhcmUgYWxsb2NhdGVkIGZyb20gYW5vdGhlciBzdWJzeXN0ZW0gc3VjaCBhcyBPTVggb3IKLSBYMTEuIAotCi0gKiBQcm9jZXNzaW5nIGluZm9ybWF0aW9uCi0KLSBQYW4gYW5kIGNyb3AgaW5mb3JtYXRpb24gY2FuIGJlIGFkZGVkIHRvIHRoZSBidWZmZXIgZGF0YSB3aGVuIHRoZSBkb3duc3RyZWFtCi0gZWxlbWVudCBjYW4gdW5kZXJzdGFuZCBhbmQgdXNlIHRoaXMgbWV0YWRhdGEuIEFuIGltYWdlc2luayBjYW4sIGZvciBleGFtcGxlLAotIHVzZSB0aGUgcGFuIGFuZCBjcm9wcGluZyBpbmZvcm1hdGlvbiB3aGVuIGJsaXR0aW5nIHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuCi0gd2l0aCBsaXR0bGUgb3ZlcmhlYWQuCi0KLQotR3N0TWV0YQotfn5+fn5+fgotCi1BIEdzdE1ldGEgaXMgYSBzdHJ1Y3R1cmUgYXMgZm9sbG93czoKLQotICBzdHJ1Y3QgX0dzdE1ldGEgewotICAgIEdzdE1ldGFGbGFncyAgICAgICBmbGFnczsKLSAgICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbzsgICAgLyogdGFnIGFuZCBpbmZvIGZvciB0aGUgbWV0YSBpdGVtICovCi0gIH07Ci0KLVRoZSBwdXJwb3NlIG9mIHRoZSB0aGlzIHN0cnVjdHVyZSBpcyB0byBzZXJ2ZSBhcyBhIGNvbW1vbiBoZWFkZXIgZm9yIGFsbCBtZXRhZGF0YQotaW5mb3JtYXRpb24gdGhhdCB3ZSBjYW4gYXR0YWNoIHRvIGEgYnVmZmVyLiBTcGVjaWZpYyBtZXRhZGF0YSwgc3VjaCBhcyB0aW1pbmcgbWV0YWRhdGEsCi13aWxsIGhhdmUgdGhpcyBzdHJ1Y3R1cmUgYXMgdGhlIGZpcnN0IGZpZWxkLiBGb3IgZXhhbXBsZToKLQotICBzdHJ1Y3QgX0dzdE1ldGFUaW1pbmcgewotICAgIEdzdE1ldGEgICAgICAgIG1ldGE7ICAgICAgICAvKiBjb21tb24gbWV0YSBoZWFkZXIgKi8KLSAKLSAgICBHc3RDbG9ja1RpbWUgICBkdHM7ICAgICAgICAgLyogZGVjb2RpbmcgdGltZXN0YW1wICovCi0gICAgR3N0Q2xvY2tUaW1lICAgcHRzOyAgICAgICAgIC8qIHByZXNlbnRhdGlvbiB0aW1lc3RhbXAgKi8KLSAgICBHc3RDbG9ja1RpbWUgICBkdXJhdGlvbjsgICAgLyogZHVyYXRpb24gb2YgdGhlIGRhdGEgKi8KLSAgICBHc3RDbG9ja1RpbWUgICBjbG9ja19yYXRlOyAgLyogY2xvY2sgcmF0ZSBmb3IgdGhlIGFib3ZlIHZhbHVlcyAqLwotICB9OwotCi1PciBhbm90aGVyIGV4YW1wbGUgZm9yIHRoZSB2aWRlbyBtZW1vcnkgcmVnaW9ucyB0aGF0IGNvbnNpc3RzIG9mIGJvdGggZmllbGRzIGFuZAotbWV0aG9kcy4KLQotCi0gI2RlZmluZSBHU1RfVklERU9fTUFYX1BMQU5FUyA0Ci0KLSBzdHJ1Y3QgR3N0TWV0YVZpZGVvIHsKLSAgIEdzdE1ldGEgICAgICAgbWV0YTsKLQotICAgR3N0QnVmZmVyICAgICAgICAgKmJ1ZmZlcjsKLQotICAgR3N0VmlkZW9GbGFncyAgICAgIGZsYWdzOwotICAgR3N0VmlkZW9Gb3JtYXQgICAgIGZvcm1hdDsKLSAgIGd1aW50ICAgICAgICAgICAgICBpZAotICAgZ3VpbnQgICAgICAgICAgICAgIHdpZHRoOwotICAgZ3VpbnQgICAgICAgICAgICAgIGhlaWdodDsKLQotICAgZ3VpbnQgICAgICAgICAgICAgIG5fcGxhbmVzOwotICAgZ3NpemUgICAgICAgICAgICAgIG9mZnNldFtHU1RfVklERU9fTUFYX1BMQU5FU107ICAgLyogb2Zmc2V0IGluIHRoZSBidWZmZXIgbWVtb3J5IHJlZ2lvbiBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpcnN0IHBpeGVsLiAqLwotICAgZ2ludCAgICAgICAgICAgICAgIHN0cmlkZVtHU1RfVklERU9fTUFYX1BMQU5FU107ICAgLyogc3RyaWRlIG9mIHRoZSBpbWFnZSBsaW5lcy4gQ2FuIGJlIG5lZ2F0aXZlIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBpbWFnZSBpcyB1cHNpZGUtZG93biAqLwotCi0gICBncG9pbnRlciAoKm1hcCkgICAgKEdzdE1ldGFWaWRlbyAqbWV0YSwgZ3VpbnQgcGxhbmUsIGdwb2ludGVyICogZGF0YSwgZ2ludCAqc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICBHc3RNYXBGbGFncyBmbGFncyk7Ci0gICBnYm9vbGVhbiAoKnVubWFwKSAgKEdzdE1ldGFWaWRlbyAqbWV0YSwgZ3VpbnQgcGxhbmUsIGdwb2ludGVyIGRhdGEpOwotIH07Ci0KLSBncG9pbnRlciBnc3RfbWV0YV92aWRlb19tYXAgICAoR3N0TWV0YVZpZGVvICptZXRhLCBndWludCBwbGFuZSwgZ3BvaW50ZXIgKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICpzdHJpZGUsIEdzdE1hcGZsYWdzIGZsYWdzKTsKLSBnYm9vbGVhbiBnc3RfbWV0YV92aWRlb191bm1hcCAoR3N0TWV0YVZpZGVvICptZXRhLCBndWludCBwbGFuZSwgZ3BvaW50ZXIgZGF0YSk7Ci0KLUdzdE1ldGEgZGVyaXZlZCBzdHJ1Y3R1cmVzIGRlZmluZSB0aGUgQVBJIG9mIHRoZSBtZXRhZGF0YS4gVGhlIEFQSSBjYW4gY29uc2lzdCBvZgotZmllbGRzIGFuZC9vciBtZXRob2RzLiBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZQotc2FtZSBHc3RNZXRhIHN0cnVjdHVyZS4KLQotVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZXRhIEFQSSB3b3VsZCB0eXBpY2FsbHkgYWRkIG1vcmUgZmllbGRzIHRvIHRoZQotcHVibGljIHN0cnVjdHVyZSB0aGF0IGFsbG93IGl0IHRvIGltcGxlbWVudCB0aGUgQVBJLgotCi1Hc3RNZXRhSW5mbyB3aWxsIHBvaW50IHRvIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1ldGFkYXRhIGFuZCBsb29rcyBsaWtlIHRoaXM6Ci0KLSAgc3RydWN0IF9Hc3RNZXRhSW5mbyB7Ci0gICAgR1R5cGUgICAgICAgICAgICAgICAgICAgICAgYXBpOyAgICAgICAvKiBhcGkgdHlwZSAqLwotICAgIEdUeXBlICAgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgLyogaW1wbGVtZW50YXRpb24gdHlwZSAqLwotICAgIGdzaXplICAgICAgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgLyogc2l6ZSBvZiB0aGUgc3RydWN0dXJlICovCi0KLSAgICBHc3RNZXRhSW5pdEZ1bmN0aW9uICAgICAgICBpbml0X2Z1bmM7Ci0gICAgR3N0TWV0YUZyZWVGdW5jdGlvbiAgICAgICAgZnJlZV9mdW5jOwotICAgIEdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiAgIHRyYW5zZm9ybV9mdW5jOwotICB9OwotCi1hcGkgd2lsbCBjb250YWluIGEgR1R5cGUgb2YgdGhlIG1ldGFkYXRhIEFQSS4gQSByZXBvc2l0b3J5IG9mIHJlZ2lzdGVyZWQgTWV0YUluZm8KLXdpbGwgYmUgbWFpbnRhaW5lZCBieSB0aGUgY29yZS4gV2Ugd2lsbCByZWdpc3RlciBzb21lIGNvbW1vbiBtZXRhZGF0YSBzdHJ1Y3R1cmVzCi1pbiBjb3JlIGFuZCBzb21lIG1lZGlhIHNwZWNpZmljIGluZm8gZm9yIGF1ZGlvL3ZpZGVvL3RleHQgaW4gLWJhc2UuIFBsdWdpbnMgY2FuCi1yZWdpc3RlciBhZGRpdGlvbmFsIGN1c3RvbSBtZXRhZGF0YS4KLQotRm9yIGVhY2ggaW1wbGVtZW50YXRpb24gb2YgYXBpLCB0aGVyZSB3aWxsIHRodXMgYmUgYSB1bmlxdWUgR3N0TWV0YUluZm8uIEluIHRoZQotY2FzZSBvZiBtZXRhZGF0YSB3aXRoIGEgd2VsbCBkZWZpbmVkIEFQSSwgdGhlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGluaXQKLWZ1bmN0aW9uIHdpbGwgc2V0dXAgdGhlIG1ldGhvZHMgaW4gdGhlIG1ldGFkYXRhIHN0cnVjdHVyZS4gQSB1bmlxdWUgR1R5cGUgd2lsbAotYmUgbWFkZSBmb3IgZWFjaCBpbXBsZW1lbnRhdGlvbiBhbmQgc3RvcmVkIGluIHRoZSB0eXBlIGZpZWxkLgotCi1BbG9uZyB3aXRoIHRoZSBtZXRhZGF0YSBkZXNjcmlwdGlvbiB3ZSB3aWxsIGhhdmUgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUvZnJlZSAoYW5kL29yIHJlZmNvdW50KQotYSBzcGVjaWZpYyBHc3RNZXRhIGluc3RhbmNlLiBXZSBhbHNvIGhhdmUgdGhlIHBvc3NpYmlsaXR5IHRvIGFkZCBhIGN1c3RvbQotdHJhbnNmb3JtIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBtZXRhZGF0YSB3aGVuIGEgdHJhbnNmb3JtYXRpb24KLWhhcHBlbnMuCi0KLVRoZXJlIGFyZSBubyBleHBsaWNpdCBtZXRob2RzIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIG1ldGFkYXRhLiBTaW5jZQotZWFjaCB0eXBlIGhhcyBhIEdUeXBlLCB3ZSBjYW4gcmV1c2UgdGhlIEdWYWx1ZSB0cmFuc2Zvcm0gZnVuY3Rpb25zIGZvciB0aGlzLgotCi1UaGUgcHVycG9zZSBvZiB0aGUgc2VwYXJhdGUgTWV0YUluZm8gaXMgdG8gbm90IGhhdmUgdG8gY2FycnkgdGhlIGZyZWUvaW5pdCBmdW5jdGlvbnMgaW4KLWVhY2ggYnVmZmVyIGluc3RhbmNlIGJ1dCB0byBkZWZpbmUgdGhlbSBnbG9iYWxseS4gV2Ugc3RpbGwgd2FudCBxdWljayBhY2Nlc3MgdG8gdGhlIGluZm8KLXNvIHdlIG5lZWQgdG8gbWFrZSB0aGUgYnVmZmVyIG1ldGFkYXRhIHBvaW50IHRvIHRoZSBpbmZvLgotCi1UZWNobmljYWxseSB3ZSBjb3VsZCBhbHNvIHNwZWNpZnkgdGhlIGZpZWxkIGFuZCB0eXBlcyBpbiB0aGUgTWV0YUluZm8gYW5kCi1wcm92aWRlIGEgZ2VuZXJpYyBBUEkgdG8gcmV0cmlldmUgdGhlIG1ldGFkYXRhIGZpZWxkcyB3aXRob3V0IHRoZSBuZWVkIGZvciBhCi1oZWFkZXIgZmlsZS4gV2Ugd2lsbCBub3QgZG8gdGhpcyB5ZXQuCi0KLUFsbG9jYXRpb24gb2YgdGhlIEdzdEJ1ZmZlciBzdHJ1Y3R1cmUgd2lsbCByZXN1bHQgaW4gdGhlIGFsbG9jYXRpb24gb2YgYSBtZW1vcnkgcmVnaW9uCi1vZiBhIGN1c3RvbWl6YWJsZSBzaXplICg1MTIgYnl0ZXMpLiBPbmx5IHRoZSBmaXJzdCBzaXplb2YgKEdzdEJ1ZmZlcikgYnl0ZXMgb2YgdGhpcwotcmVnaW9uIHdpbGwgaW5pdGlhbGx5IGJlIHVzZWQuIFRoZSByZW1haW5pbmcgYnl0ZXMgd2lsbCBiZSBwYXJ0IG9mIHRoZSBmcmVlIG1ldGFkYXRhCi1yZWdpb24gb2YgdGhlIGJ1ZmZlci4gRGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhcmUgcG9zc2libGUgYW5kIGFyZSBpbnZpc2libGUKLWluIHRoZSBBUEkgb3IgQUJJLgotCi1UaGUgY29tcGxldGUgYnVmZmVyIHdpdGggbWV0YWRhdGEgY291bGQsIGZvciBleGFtcGxlLCBsb29rIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLUdzdE1pbmlPYmplY3QgICAgICAgICAgICB8ICAgICBHVHlwZSAoR3N0QnVmZmVyKSAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICByZWZjb3VudCwgZmxhZ3MsIGNvcHkvZGlzcC9mcmVlIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLUdzdEJ1ZmZlciAgICAgICAgICAgICAgICB8ICAgICBwb29sLHB0cyxkdHMsZHVyYXRpb24sb2Zmc2V0cyAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICA8cHJpdmF0ZSBkYXRhPiAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICArLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLisKLSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBuZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tKwotICAgICAgICAgICAgICAgICAgICAgICstIHwgICAgIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0+IEdzdE1ldGFJbmZvCi1Hc3RNZXRhVGltaW5nICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgICBkdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAotICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgIHB0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgZHVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgICAgICAgICAgICAgICAgICAgICArLSB8ICAgICBjbG9ja19yYXRlICAgICAgICAgICAgICAgICAgICAgIHwgfAotICAgICAgICAgICAgICAgICAgICAgICAgICsgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gKyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgbmV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLSsKLUdzdE1ldGFWaWRlbyAgICAgICArLSArLSB8ICAgICBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tPiBHc3RNZXRhSW5mbwotICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgfCAgfCAgfCAgICAgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgICAgICAgICAgICAgICAgICB8ICB8ICB8ICAgICBuX3BsYW5lcyAgICAgICAgICAgICAgICAgICAgICAgIHwgfAotICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgICAgIHBsYW5lc1tdICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgfCAgfCAgfCAgICAgbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgICAgICAgICAgICAgICAgICB8ICB8ICB8ICAgICB1bm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAotICAgICAgICAgICAgICAgICAgICstIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgICAgfCAgfCAgICAgcHJpdmF0ZSBmaWVsZHMgICAgICAgICAgICAgICAgICB8IHwKLUdzdE1ldGFWaWRlb0ltcGwgICAgICB8ICB8ICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAotICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICAgICAgICAgICAgKy0gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICArIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICsgLgotICAgICAgICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCi0KLQotQVBJIGV4YW1wbGVzCi1+fn5+fn5+fn5+fn4KLQotQnVmZmVycyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgbm9ybWFsIGdzdF9idWZmZXJfbmV3IGZ1bmN0aW9ucy4gVGhlIHN0YW5kYXJkIGZpZWxkcwotYXJlIGluaXRpYWxpemVkIGFzIHVzdWFsLiBBIG1lbW9yeSBhcmVhIHRoYXQgaXMgYmlnZ2VyIHRoYW4gdGhlIHN0cnVjdHVyZSBzaXplCi1pcyBhbGxvY2F0ZWQgZm9yIHRoZSBidWZmZXIgbWV0YWRhdGEuCi0KLSAgZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLUFmdGVyIGNyZWF0aW5nIGEgYnVmZmVyLCB0aGUgYXBwbGljYXRpb24gY2FuIHNldCBjYXBzIGFuZCBhZGQgbWV0YWRhdGEKLWluZm9ybWF0aW9uLiAKLQotVG8gYWRkIG9yIHJldHJpZXZlIG1ldGFkYXRhLCBhIGhhbmRsZSB0byBhIEdzdE1ldGFJbmZvIHN0cnVjdHVyZSBuZWVkcyB0byBiZQotb2J0YWluZWQuIFRoaXMgZGVmaW5lcyB0aGUgaW1wbGVtZW50YXRpb24gYW5kIEFQSSBvZiB0aGUgbWV0YWRhdGEuIFVzdWFsbHksIGEKLWhhbmRsZSB0byB0aGlzIGluZm8gc3RydWN0dXJlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIGEgcHVibGljIF9nZXRfaW5mbygpCi1tZXRob2QgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5IChmb3Igc2hhcmVkIG1ldGFkYXRhKS4KLQotVGhlIGZvbGxvd2luZyBkZWZpbmVzIGNhbiB1c3VhbGx5IGJlIGZvdW5kIGluIHRoZSBzaGFyZWQgLmggZmlsZS4KLQotICBHc3RNZXRhSW5mbyAqIGdzdF9tZXRhX3RpbWluZ19nZXRfaW5mbygpOwotICAjZGVmaW5lIEdTVF9NRVRBX1RJTUlOR19JTkZPICAoZ3N0X21ldGFfdGltaW5nX2dldF9pbmZvKCkpCi0KLUFkZGluZyBtZXRhZGF0YSB0byBhIGJ1ZmZlciBjYW4gYmUgZG9uZSB3aXRoIHRoZSBnc3RfYnVmZmVyX2FkZF9tZXRhKCkgY2FsbC4KLVRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgbmV3IG1ldGFkYXRhIGJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpZWQgYnkKLXRoZSBHc3RNZXRhSW5mby4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBwYXNzIGEgZ2VuZXJpYyBwb2ludGVyIHRvIHRoZSBhZGRfbWV0YSgpCi1mdW5jdGlvbiB0aGF0IGNhbiBjb250YWluIHBhcmFtZXRlcnMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IG1ldGFkYXRhIGZpZWxkcy4KLQotUmV0cmlldmluZyB0aGUgbWV0YWRhdGEgb24gYSBidWZmZXIgY2FuIGJlIGRvbmUgd2l0aCB0aGUKLWdzdF9idWZmZXJfbWV0YV9nZXQoKSBtZXRob2QuIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIGFuIGV4aXN0aW5nIG1ldGFkYXRhCi1jb25mb3JtaW5nIHRvIHRoZSBBUEkgc3BlY2lmaWVkIGluIHRoZSBnaXZlbiBpbmZvLiBXaGVuIG5vIHN1Y2ggbWV0YWRhdGEgZXhpc3RzLAotdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIE5VTEwuCi0KLSAgR3N0TWV0YVRpbWluZyAqdGltaW5nOwotCi0gIHRpbWluZyA9IGdzdF9idWZmZXJfZ2V0X21ldGEgKGJ1ZmZlciwgR1NUX01FVEFfVElNSU5HX0lORk8pOwotCi1PbmNlIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmZvIGhhcyBiZWVuIG9idGFpbmVkLCB0aGUgYXNzb2NpYXRlZCBtZXRhZGF0YSBjYW4gYmUKLWFkZGVkIG9yIG1vZGlmaWVkIG9uIGEgYnVmZmVyLgotCi0gIHRpbWluZy0+dGltZXN0YW1wID0gMDsKLSAgdGltaW5nLT5kdXJhdGlvbiA9IDIwICogR1NUX01TRUNPTkQ7Ci0KLU90aGVyIGNvbnZlbmllbmNlIG1hY3JvcyBjYW4gYmUgbWFkZSB0byBzaW1wbGlmeSB0aGUgYWJvdmUgY29kZToKLQotICNkZWZpbmUgZ3N0X2J1ZmZlcl9nZXRfbWV0YV90aW1pbmcoYikgXAotICAgICgoR3N0TWV0YVRpbWluZyAqKSBnc3RfYnVmZmVyX2dldF9tZXRhICgoYiksIEdTVF9NRVRBX1RJTUlOR19JTkZPKQotCi1UaGlzIG1ha2VzIHRoZSBjb2RlIGxvb2sgbGlrZSB0aGlzOgotCi0gIEdzdE1ldGFUaW1pbmcgKnRpbWluZzsKLQotICB0aW1pbmcgPSBnc3RfYnVmZmVyX2dldF9tZXRhX3RpbWluZyAoYnVmZmVyKTsKLSAgdGltaW5nLT50aW1lc3RhbXAgPSAwOwotICB0aW1pbmctPmR1cmF0aW9uID0gMjAgKiBHU1RfTVNFQ09ORDsKLSAKLVRvIGl0ZXJhdGUgdGhlIGRpZmZlcmVudCBtZXRhaW5mbyBzdHJ1Y3R1cmVzLCBvbmUgY2FuIHVzZSB0aGUKLWdzdF9idWZmZXJfbWV0YV9nZXRfbmV4dCgpIG1ldGhvZHMuCi0KLSBHc3RNZXRhICpjdXJyZW50ID0gTlVMTDsKLQotIC8qIHBhc3NpbmcgTlVMTCBnaXZlcyB0aGUgZmlyc3QgZW50cnkgKi8gCi0gY3VycmVudCA9IGdzdF9idWZmZXJfbWV0YV9nZXRfbmV4dCAoYnVmZmVyLCBjdXJyZW50KTsKLQotIC8qIHBhc3NpbmcgYSBHc3RNZXRhIHJldHVybnMgdGhlIG5leHQgKi8KLSBjdXJyZW50ID0gZ3N0X2J1ZmZlcl9tZXRhX2dldF9uZXh0IChidWZmZXIsIGN1cnJlbnQpOwotCi0KLU1lbW9yeSBtYW5hZ2VtZW50Ci1+fn5+fn5+fn5+fn5+fn5+fgotCi0qIGFsbG9jYXRpb24KLQotICBXZSBpbml0aWFsbHkgYWxsb2NhdGUgYSByZWFzb25hYmxlIHNpemVkIEdzdEJ1ZmZlciBzdHJ1Y3R1cmUgKHNheSA1MTIgYnl0ZXMpLgotCi0gIFNpbmNlIHRoZSBjb21wbGV0ZSBidWZmZXIgc3RydWN0dXJlLCBpbmNsdWRpbmcgYSBsYXJnZSBhcmVhIGZvciBtZXRhZGF0YSwgaXMKLSAgYWxsb2NhdGVkIGluIG9uZSBnbywgd2UgY2FuIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG1lbW9yeSBhbGxvY2F0aW9ucyB3aGlsZSBzdGlsbAotICBwcm92aWRpbmcgZHluYW1pYyBtZXRhZGF0YS4KLQotICBXaGVuIGFkZGluZyBtZXRhZGF0YSwgd2UgbmVlZCB0byBjYWxsIHRoZSBpbml0IGZ1bmN0aW9uIG9mIHRoZSBhc3NvY2lhdGVkCi0gIG1ldGFkYXRhIGluZm8gc3RydWN0dXJlLiBTaW5jZSBhZGRpbmcgdGhlIG1ldGFkYXRhIHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gcGFzcwotICBhIGhhbmRsZSB0byB0aGUgaW5mbywgdGhpcyBvcGVyYXRpb24gZG9lcyBub3QgcmVxdWlyZSB0YWJsZSBsb29rdXBzLgotCi0gIFBlci1tZXRhZGF0YSBtZW1vcnkgaW5pdGlhbGlzYXRpb24gaXMgbmVlZGVkIGJlY2F1c2Ugbm90IGFsbCBtZXRhZGF0YSBpcwotICBpbml0aWFsaXplZCBpbiB0aGUgc2FtZSB3YXkuIFdlIG5lZWQgdG8sIGZvciBleGFtcGxlLCBzZXQgdGhlIHRpbWVzdGFtcHMgdG8KLSAgTk9ORSBpbiB0aGUgTWV0YVRpbWluZyBzdHJ1Y3R1cmVzLgotCi0gIFRoZSBpbml0L2ZyZWUgZnVuY3Rpb25zIGNhbiBhbHNvIGJlIHVzZWQgdG8gaW1wbGVtZW50IHJlZmNvdW50aW5nIGZvciBhIG1ldGFkYXRhCi0gIHN0cnVjdHVyZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gYSBzdHJ1Y3R1cmUgaXMgc2hhcmVkIGJldHdlZW4gYnVmZmVycy4KLQotICBXaGVuIHRoZSBmcmVlX3NpemUgb2YgdGhlIEdzdEJ1ZmZlciBpcyBleGhhdXN0ZWQsIHdlIHdpbGwgYWxsb2NhdGUgbmV3IG1lbW9yeQotICBmb3IgZWFjaCBuZXdseSBhZGRlZCBNZXRhIGFuZCB1c2UgdGhlIG5leHQgcG9pbnRlcnMgdG8gcG9pbnQgdG8gdGhpcy4gSXQKLSAgaXMgZXhwZWN0ZWQgdGhhdCB0aGlzIGRvZXMgbm90IG9jY3VyIG9mdGVuIGFuZCB3ZSBtaWdodCBiZSBhYmxlIHRvIG9wdGltaXplCi0gIHRoaXMgdHJhbnNwYXJlbnRseSBpbiB0aGUgZnV0dXJlLgotCi0qIGZyZWUKLQotICBXaGVuIGEgR3N0QnVmZmVyIGlzIGZyZWVkLCB3ZSBwb3RlbnRpYWxseSBtaWdodCBoYXZlIHRvIGNhbGwgYSBjdXN0b20gZnJlZQotICBmdW5jdGlvbiBvbiB0aGUgbWV0YWRhdGEgaW5mby4gSW4gdGhlIGNhc2Ugb2YgdGhlIE1lbW9yeSBtZXRhZGF0YSwgd2UgbmVlZCB0bwotICBjYWxsIHRoZSBhc3NvY2lhdGVkIGZyZWUgZnVuY3Rpb24gdG8gZnJlZSB0aGUgbWVtb3J5LgotICAKLSAgV2hlbiBmcmVlaW5nIGEgR3N0QnVmZmVyLCB0aGUgY3VzdG9tIGJ1ZmZlciBmcmVlIGZ1bmN0aW9uIHdpbGwgaXRlcmF0ZSBhbGwgb2YKLSAgdGhlIG1ldGFkYXRhIGluIHRoZSBidWZmZXIgYW5kIGNhbGwgdGhlIGFzc29jaWF0ZWQgZnJlZSBmdW5jdGlvbnMgaW4gdGhlCi0gIE1ldGFJbmZvIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW50cmllcy4gVXN1YWxseSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIE5VTEwuCi0KLQotU2VyaWFsaXphdGlvbgotfn5+fn5+fn5+fn5+fgotCi1XaGVuIGJ1ZmZlciBzaG91bGQgYmUgc2VudCBvdmVyIHRoZSB3aXJlIG9yIGJlIHNlcmlhbGl6ZWQgaW4gR0RQLCB3ZSBuZWVkIGEgd2F5Ci10byBwZXJmb3JtIGN1c3RvbSBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24gb24gdGhlIG1ldGFkYXRhLgotCi1mb3IgdGhpcyB3ZSBjYW4gdXNlIHRoZSBHVmFsdWUgdHJhbnNmb3JtIGZ1bmN0aW9ucy4KLQotCi1UcmFuc2Zvcm1hdGlvbnMKLX5+fn5+fn5+fn5+fn5+fgotCi1BZnRlciBjZXJ0YWluIHRyYW5zZm9ybWF0aW9ucywgdGhlIG1ldGFkYXRhIG9uIGEgYnVmZmVyIG1pZ2h0IG5vdCBiZSByZWxldmFudAotYW55bW9yZS4KLQotQ29uc2lkZXIsIGZvciBleGFtcGxlLCBtZXRhZGF0YSB0aGF0IGxpc3RzIGNlcnRhaW4gcmVnaW9ucyBvZiBpbnRlcmVzdAotb24gdGhlIHZpZGVvIGRhdGEuIElmIHRoZSB2aWRlbyBpcyBzY2FsZWQgb3Igcm90YXRlZCwgdGhlIGNvb3JkaW5hdGVzIG1pZ2h0IG5vdAotbWFrZSBzZW5zZSBhbnltb3JlLiBBIHRyYW5zZm9ybSBlbGVtZW50IHNob3VsZCBiZSBhYmxlIHRvIGFkanVzdCBvciByZW1vdmUgdGhlCi1hc3NvY2lhdGVkIG1ldGFkYXRhIHdoZW4gaXQgYmVjb21lcyBpbnZhbGlkLiAKLQotV2UgY2FuIG1ha2UgdGhlIHRyYW5zZm9ybSBlbGVtZW50IGF3YXJlIG9mIHRoZSBtZXRhZGF0YSBzbyB0aGF0IGl0IGNhbiBhZGp1c3Qgb3IKLXJlbW92ZSBpbiBhbiBpbnRlbGxpZ2VudCB3YXkuIFNpbmNlIHdlIGFsbG93IGFyYml0cmFyeSBtZXRhZGF0YSwgd2UgY2FuJ3QgZG8KLXRoaXMgZm9yIGFsbCBtZXRhZGF0YSBhbmQgdGh1cyB3ZSBuZWVkIHNvbWUgb3RoZXIgd2F5LgotCi1PbmUgcHJvcG9zaXRpb24gaXMgdG8gdGFnIHRoZSBtZXRhZGF0YSB0eXBlIHdpdGgga2V5d29yZHMgdGhhdCBzcGVjaWZ5IHdoYXQgaXQKLWZ1bmN0aW9uYWxseSByZWZlcnMgdG9vLiBXZSBjb3VsZCwgZm9yIGV4YW1wbGUsIHRhZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSByZWdpb25zCi1vZiBpbnRlcmVzdCB3aXRoIGEgdGFnIHRoYXQgbm90ZXMgdGhhdCB0aGUgbWV0YWRhdGEgcmVmZXJzIHRvIGFic29sdXRlIHBpeGVsCi1wb3NpdGlvbnMuIEEgdHJhbnNmb3JtIGNvdWxkIHRoZW4ga25vdyB0aGF0IHRoZSBtZXRhZGF0YSBpcyBub3QgdmFsaWQgYW55bW9yZQotd2hlbiB0aGUgcG9zaXRpb24gb2YgdGhlIHBpeGVscyBjaGFuZ2VkIChkdWUgdG8gcm90YXRpb24sIGZsaXBwaW5nLCBzY2FsaW5nIGFuZAotc28gb24pLgotCi0KLVN1YmJ1ZmZlcnMKLX5+fn5+fn5+fn4KLQotU3ViYnVmZmVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBhIGdlbmVyaWMgY29weS4gUGFyYW1ldGVycyB0byB0aGUgY29weQotYXJlIHRoZSBvZmZzZXQgYW5kIHNpemUuIFRoaXMgYWxsb3dzIGVhY2ggbWV0YWRhdGEgc3RydWN0dXJlIHRvIGltcGxlbWVudCB0aGUKLWFjdGlvbnMgbmVlZGVkIHRvIHVwZGF0ZSB0aGUgbWV0YWRhdGEgb2YgdGhlIHN1YmJ1ZmZlci4gCi0KLUl0IG1pZ2h0IG5vdCBtYWtlIHNlbnNlIGZvciBzb21lIG1ldGFkYXRhIHRvIHdvcmsgd2l0aCBzdWJidWZmZXJzLiBGb3IgZXhhbXBsZQotd2hlbiAgd2UgdGFrZSBhIHN1YmJ1ZmZlciBvZiBhIGJ1ZmZlciB3aXRoIGEgdmlkZW8gZnJhbWUsIHRoZSBHc3RNZXRhVmlkZW8KLXNpbXBseSBiZWNvbWVzIGludmFsaWQgYW5kIGlzIHJlbW92ZWQgZnJvbSB0aGUgbmV3IHN1YmJ1ZmZlci4KLQotCi1SZWxhdGlvbnNoaXAgd2l0aCBHc3RDYXBzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVRoZSBkaWZmZXJlbmNlIGJldHdlZW4gR3N0Q2FwcywgdXNlZCBpbiBuZWdvdGlhdGlvbiwgYW5kIHRoZSBtZXRhZGF0YSBpcyBub3QKLWNsZWFybHkgZGVmaW5lZC4gCi0KLVdlIHdvdWxkIGxpa2UgdG8gdGhpbmsgb2YgdGhlIEdzdENhcHMgY29udGFpbmluZyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvCi1mdW5jdGlvbmFsbHkgbmVnb3RpYXRlIHRoZSBmb3JtYXQgYmV0d2VlbiB0d28gZWxlbWVudHMuIFRoZSBNZXRhZGF0YSBzaG91bGQgdGhlbgotb25seSBjb250YWluIHZhcmlhYmxlcyB0aGF0IGNhbiBjaGFuZ2UgYmV0d2VlbiBlYWNoIGJ1ZmZlci4KLQotRm9yIGV4YW1wbGUsIGZvciB2aWRlbyB3ZSB3b3VsZCBoYXZlIHdpZHRoL2hlaWdodC9mcmFtZXJhdGUgaW4gdGhlIGNhcHMgYnV0IHRoZW4KLWhhdmUgdGhlIG1vcmUgdGVjaG5pY2FsIGRldGFpbHMsIHN1Y2ggYXMgc3RyaWRlLCBkYXRhIHBvaW50ZXJzLCBwYW4vY3JvcC96b29tCi1ldGMgaW4gdGhlIG1ldGFkYXRhLgotCi1BIHNjaGVtZSBsaWtlIHRoaXMgd291bGQgc3RpbGwgYWxsb3cgdXMgdG8gZnVuY3Rpb25hbGx5IHNwZWNpZnkgdGhlIGRlc2lyZWQKLXZpZGVvIHJlc29sdXRpb24gd2hpbGUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd291bGQgYmUgaW5zaWRlIHRoZSBtZXRhZGF0YS4KLQotUmVsYXRpb25zaGlwIHdpdGggR3N0TWluaU9iamVjdCBxZGF0YQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1xZGF0YSBvbiBhIG1pbmlvYmplY3QgaXMgZWxlbWVudCBwcml2YXRlIGFuZCBpcyBub3QgdmlzaWJsZSB0byBvdGhlciBlbGVtZW50LgotVGhlcmVmb3JlIHFkYXRhIG5ldmVyIGNvbnRhaW5zIGVzc2VudGlhbCBpbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgYnVmZmVyCi1jb250ZW50LiAKLQotCi1Db21wYXRpYmlsaXR5Ci1+fn5+fn5+fn5+fn5+Ci0KLVdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZWxlbWVudHMgZXhjaGFuZ2UgbWV0YWRhdGEgdGhhdCB0aGV5IGJvdGggdW5kZXJzdGFuZCwKLVRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aGVuIHRoZSBtZXRhZGF0YSBkZXNjcmliZXMgdGhlIGRhdGEgbGF5b3V0IGluCi1tZW1vcnkgKHN1Y2ggYXMgc3RyaWRlcykuCi0KLVRoZSBBTExPQ0FUSU9OIHF1ZXJ5IGlzIHVzZWQgdG8gbGV0IHVwc3RyZWFtIGtub3cgd2hhdCBtZXRhZGF0YSB3ZSBjYW4gc3Vwb3J0LgotCi1JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBidWZmZXJwb29sIGFkZCBjZXJ0YWluIG1ldGFkYXRhIHRvIHRoZSBidWZmZXJzCi1mcm9tIHRoZSBwb29sLiBUaGlzIGZlYXR1cmUgaXMgYWN0aXZhdGVkIGJ5IGVuYWJsaW5nIGEgYnVmZmVyIG9wdGlvbiB3aGVuCi1jb25maWd1cmluZyB0aGUgcG9vbC4KLQotCi1Ob3Rlcwotfn5+fn4KLQotU29tZSBzdHJ1Y3R1cmVzIHRoYXQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGFkZCB0byBidWZmZXJzLgotCi0qIENsZWFuIEFwZXJ0dXJlCi0qIEFyYml0cmFyeSBNYXRyaXggVHJhbnNmb3JtCi0qIEFzcGVjdCByYXRpbwotKiBQYW4vY3JvcC96b29tCi0qIFZpZGVvIHN0cmlkZXMKLQotU29tZSBvZiB0aGVzZSBvdmVybGFwLCB3ZSBuZWVkIHRvIGZpbmQgYSBtaW5pbWFsIHNldCBvZiBtZXRhZGF0YSBzdHJ1Y3R1cmVzIHRoYXQKLWFsbG93cyB1cyB0byBkZWZpbmUgYWxsIHVzZSBjYXNlcy4KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtbWluaW9iamVjdC50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LW1pbmlvYmplY3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzA0NzgwLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtbWluaW9iamVjdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotR3N0TWluaU9iamVjdAotLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGVzaWduIG9mIHRoZSBtaW5pb2JqZWN0IGJhc2UgY2xhc3MuCi0KLVRoZSBtaW5pb2JqZWN0IGFic3RyYWN0IGJhc2UgY2xhc3MgaXMgdXNlZCB0byBjb25zdHJ1Y3QgbGlnaHR3ZWlnaHQgcmVmY291bnRlZAotYW5kIGJveGVkIHR5cGVzIHRoYXQgYXJlIGZyZXF1ZW50bHkgY3JlYXRlZCBhbmQgZGVzdHJveWVkLgotCi1SZXF1aXJlbWVudHMKLX5+fn5+fn5+fn5+fgotCi0gLSBCZSBsaWdodHdlaWdodAotIC0gUmVmY291bnRlZAotIC0gSSBtdXN0IGJlIHBvc3NpYmxlIHRvIGNvbnRyb2wgYWNjZXNzIHRvIHRoZSBvYmplY3QsIGllLiB3aGVuIHRoZSBvYmplY3QgaXMKLSAgIHJlYWRhYmxlIGFuZCB3cml0YWJsZS4KLSAtIFN1YmNsYXNzZXMgbXVzdCBiZSBhYmxlIHRvIHVzZSB0aGVpciBvd24gYWxsb2NhdG9yIGZvciB0aGUgbWVtb3J5LgotCi0KLVVzYWdlCi1+fn5+fgotCi1Vc2VycyBvZiB0aGUgR3N0TWluaU9iamVjdCBpbmZyYXN0cnVjdHVyZSB3aWxsIG5lZWQgdG8gZGVmaW5lIGEgc3RydWN0dXJlIHRoYXQKLWluY2x1ZGVzIHRoZSBHc3RNaW5pT2JqZWN0IHN0cnVjdHVyZSBhcyB0aGUgZmlyc3QgZmllbGQuCi0KLSBzdHJ1Y3QgewotICAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKLQotICAgLyogbXkgZmllbGRzICovCi0gICAuLi4gCi0gfSBNeU9iamVjdAotCi1UaGUgc3ViY2xhc3Mgc2hvdWxkIHRoZW4gaW1wbGVtZW50IGEgY29uc3RydWN0b3IgbWV0aG9kIHdoZXJlIGl0IGFsbG9jYXRlcyB0aGUKLW1lbW9yeSBmb3IgaXRzIHN0cnVjdHVyZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIG1pbmlvYmplY3Qgc3RydWN0dXJlIHdpdGgKLWdzdF9taW5pX29iamVjdF9pbml0KCkuIENvcHkgYW5kIEZyZWUgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byB0aGUKLWdzdF9taW5pX29iamVjdF9pbml0KCkgZnVuY3Rpb24uCi0KLSAgTXlPYmplY3QgKgotICBteV9vYmplY3RfbmV3KCkKLSAgewotICAgIE15T2JqZWN0ICpyZXMgPSBnX3NsaWNlX25ldyAoTXlPYmplY3QpOwotCi0gICAgZ3N0X21pbmlfb2JqZWN0X2luaXQgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChyZXMpLCAwLAotICAgICAgICBNWV9UWVBFX09CSkVDVCwKLSAgICAgICAgKEdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24pIF9teV9vYmplY3RfY29weSwKLSAgICAgICAgKEdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24pIE5VTEwsCi0gICAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBfbXlfb2JqZWN0X2ZyZWUpOwotCi0gICAgLyogb3RoZXIgaW5pdCAqLwotICAgIC4uLi4uCi0KLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLVRoZSBGcmVlIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvcgotdGhlIHN0cnVjdHVyZS4KLQotICBzdGF0aWMgdm9pZAotICBfbXlfb2JqZWN0X2ZyZWUgKE15T2JqZWN0ICpvYmopCi0gIHsKLSAgICAvKiBvdGhlciBjbGVhbnVwICovCi0gICAgLi4uCi0KLSAgICBnX3NsaWNlX2ZyZWUgKE15T2JqZWN0LCBvYmopOwotICB9Ci0KLQotTGlmZWN5Y2xlCi1+fn5+fn5+fn4KLQotR3N0TWluaU9iamVjdCBpcyByZWZjb3VudGVkLiBXaGVuIGEgR3N0TWluaU9iamVjdCBpcyBmaXJzdCBjcmVhdGVkLAotaXQgaGFzIGEgcmVmY291bnQgb2YgMS4KLQotRWFjaCB2YXJpYWJsZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGEgR3N0TWluaU9iamVjdCBpcyByZXNwb25zaWJsZSBmb3IKLXVwZGF0aW5nIHRoZSByZWZjb3VudC4gVGhpcyBpbmNsdWRlcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50IHdpdGgKLWdzdF9taW5pX29iamVjdF9yZWYoKSB3aGVuIGEgcmVmZXJlbmNlIGlzIGtlcHQgdG8gYSBtaW5pb2JqZWN0IG9yCi1nc3RfbWluaV9vYmplY3RfdW5yZWYoKSB3aGVuIGEgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLgotCi1XaGVuIHRoZSByZWZjb3VudCByZWFjaGVzIDAsIGFuZCB0aHVzIG5vIG9iamVjdHMgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKLW1pbmlvYmplY3QgYW55bW9yZSwgd2UgY2FuIGZyZWUgdGhlIG1pbmlvYmplY3QuIAotCi1XaGVuIGZyZWVpbmcgdGhlIG1pbmlvYmplY3QsIGZpcnN0IHRoZSBHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIGlzIGNhbGxlZC4KLVRoaXMgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXZpdmUgdGhlIG9iamVjdCBhZ2FpbiBieSBpbmNyZW1lbnRpbmcgdGhlCi1yZWZjb3VudCwgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgcmV0dXJuIEZBTFNFIGZyb20gdGhlIGRpc3Bvc2UgZnVuY3Rpb24uIFRoZQotZGlzcG9zZSBmdW5jdGlvbiBpcyB1c2VkIGJ5IEdzdEJ1ZmZlciB0byByZXZpdmUgdGhlIGJ1ZmZlciBiYWNrIGludG8gdGhlCi1Hc3RCdWZmZXJQb29sIHdoZW4gbmVlZGVkLgotCi1XaGVuIHRoZSBkaXNwb3NlIGZ1bmN0aW9uIHJldHVybnMgVFJVRSwgdGhlIEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24gd2lsbCBiZQotY2FsbGVkIGFuZCB0aGUgbWluaW9iamVjdCB3aWxsIGJlIGZyZWVkLiAKLQotCi1Db3B5Ci1+fn5+Ci0KLUEgbWluaW9iamVjdCBjYW4gYmUgY29waWVkIHdpdGggZ3N0X21pbmlfb2JqZWN0X2NvcHkoKS4gVGhpcyBmdW5jdGlvbiB3aWxsCi1jYWxsIHRoZSBjdXN0b20gY29weSBmdW5jdGlvbiB0aGF0IHdhcyBwcm92aWRlZCB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBuZXcKLUdzdE1pbmlPYmplY3Qgc3ViY2xhc3MuCi0KLVRoZSBjb3B5IGZ1bmN0aW9uIHNob3VsZCB0cnkgdG8gcHJlc2VydmUgYXMgbXVjaCBpbmZvIGZyb20gdGhlIG9yaWdpbmFsIG9iamVjdAotYXMgcG9zc2libGUuCi0KLVRoZSBuZXcgY29weSBzaG91bGQgYmUgd3JpdGFibGUuCi0KLQotQWNjZXNzIG1hbmFnZW1lbnQKLX5+fn5+fn5+fn5+fn5+fn5+Ci0KLUdzdE1pbmlPYmplY3QgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHRocmVhZHMuIEl0IGlzIGltcG9ydGFudCB0aGF0IHdoZW4KLWEgdGhyZWFkIHdyaXRlcyB0byBhIEdzdE1pbmlPYmplY3QgdGhhdCB0aGUgb3RoZXIgdGhyZWFkcyBkb24ndCBub3Qgc2VlIHRoZQotY2hhbmdlcy4KLQotVG8gYXZvaWQgZXhwb3NpbmcgY2hhbmdlcyBmcm9tIG9uZSB0aHJlYWQgdG8gYW5vdGhlciB0aHJlYWQsIHRoZSBtaW5pb2JqZWN0cwotYXJlIG1hbmFnZWQgaW4gYSBDb3B5LU9uLVdyaXRlIHdheS4gQSBjb3B5IGlzIG9ubHkgbWFkZSB3aGVuIGl0IGlzIGtub3duIHRoYXQKLXRoZSBvYmplY3QgaXMgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgb2JqZWN0cyBvciB0aHJlYWRzLgotCi1UaGVyZSBhcmUgMiBtZXRob2RzIGltcGxlbWVudGVkIGZvciBjb250cm9sbGluZyBhY2Nlc3MgdG8gdGhlIG1pbmlvYmplY3QuIAotCi0gLSBBIGZpcnN0IG1ldGhvZCByZWxpZXMgb24gdGhlIHJlZmNvdW50IG9mIHRoZSBvYmplY3QgdG8gY29udHJvbCB3cml0YWJpbGl0eS4KLSAgIE9iamVjdHMgdXNpbmcgdGhpcyBtZXRob2QgaGF2ZSB0aGUgTE9DS0FCTEUgZmxhZyB1bnNldC4KLQotIC0gQSBzZWNvbmQgbWV0aG9kIHJlbGllcyBvbiBhIHNlcGFyYXRlIGNvdW50ZXIgZm9yIGNvbnRyb2xsaW5nCi0gICB0aGUgYWNjZXNzIHRvIHRoZSBvYmplY3QuIE9iamVjdHMgdXNpbmcgdGhpcyBtZXRob2QgaGF2ZSB0aGUgTE9DS0FCTEUgZmxhZwotICAgc2V0LgotCi0gWW91IGNhbiBjaGVjayBpZiBhbiBvYmplY3QgaXMgd3JpdGFibGUgd2l0aCBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUoKSBhbmQKLSB5b3UgY2FuIG1ha2UgYW55IG1pbmlvYmplY3Qgd3JpdGFibGUgd2l0aCBnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSgpLgotIFRoaXMgd2lsbCBjcmVhdGUgYSB3cml0YWJsZSBjb3B5IHdoZW4gdGhlIG9iamVjdCB3YXMgbm90IHdyaXRhYmxlLgotCi0KLSBub24tTE9DS0FCTEUgR3N0TWluaU9iamVjdHMKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIFRoZXNlIEdzdE1pbmlPYmplY3RzIGhhdmUgdGhlIExPQ0tBQkxFIGZsYWcgdW5zZXQuIFRoZXkgdXNlIHRoZSByZWZjb3VudCB2YWx1ZQotIHRvIGNvbnRyb2wgd3JpdGFiaWxpdHkgb2YgdGhlIG9iamVjdC4KLQotIFdoZW4gdGhlIHJlZmNvdW50IG9mIHRoZSBtaW5pb2JqZWN0IGlzID4gMSwgdGhlIG9iamVjdHMgaXQgcmVmZXJlbmNlZCBieSBhdAotIGxlYXN0IDIgb2JqZWN0cyBhbmQgaXMgdGh1cyBjb25zaWRlcmVkIHVud3JpdGFibGUuIEEgY29weSBtdXN0IGJlIG1hZGUgYmVmb3JlIGEKLSBtb2RpZmljYXRpb24gdG8gdGhlIG9iamVjdCBjYW4gYmUgZG9uZS4KLQotIFVzaW5nIHRoZSByZWZjb3VudCB0byBjb250cm9sIHdyaXRhYmlsaXR5IGlzIHByb2JsZW1hdGljIGZvciBtYW55IGxhbmd1YWdlCi0gYmluZGluZ3MgdGhhdCBjYW4ga2VlcCBhZGRpdGlvbmFsIHJlZmVyZW5jZXMgdG8gdGhlIG9iamVjdHMuIFRoaXMgbWV0aG9kIGlzCi0gbWFpbmx5IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgdW50aWwgYWxsIHVzZXJzIG9mIHRoZSBtaW5pb2JqZWN0cyBhcmUKLSBjb252ZXJ0ZWQgdG8gdXNlIHRoZSBMT0NBS0JMRSBmbGFnLgotCi0KLSBMT0NLQUJMRSBHc3RNaW5pT2JqZWN0cwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSBUaGVzZSBHc3RNaW5pT2JqZWN0cyBoYXZlIHRoZSBMT0NLQUJMRSBmbGFnIHNldC4gVGhleSB1c2UgYSBzZXBhcmF0ZSBjb3VudGVyCi0gZm9yIGNvbnRyb2xsaW5nIHdyaXRhYmlsaXR5IGFuZCBhY2Nlc3MgdG8gdGhlIG9iamVjdC4KLQotIEl0IGNvbnNpc3RzIG9mIDIgY29tcG9uZW50czoKLQotICogZXhjbHVzaXZlIGNvdW50ZXIKLQotICBFYWNoIG9iamVjdCB0aGF0IHdhbnRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gYSBHc3RNaW5pT2JqZWN0IGFuZCBkb2Vzbid0IHdhbnQgdG8KLSAgc2VlIHRoZSBjaGFuZ2VzIGZyb20gb3RoZXIgb3duZXJzIG9mIHRoZSBzYW1lIEdzdE1pbmlPYmplY3QgbmVlZHMgdG8gbG9jayB0aGUKLSAgR3N0TWluaU9iamVjdCBpbiBFWENMVVNJVkUgbW9kZSwgd2hpY2ggd2lsbCBpbmNyZWFzZSB0aGUgZXhjbHVzaXZlIGNvdW50ZXIuCi0KLSAgVGhlIGV4Y2x1c2l2ZSBjb3VudGVyIGNvdW50cyB0aGUgYW1vdW50IG9mIG9iamVjdHMgdGhhdCBzaGFyZSB0aGlzCi0gIEdzdE1pbmlPYmplY3QuIFRoZSBjb3VudGVyIGlzIGluaXRpYWxseSAwLCBtZWFuaW5nIHRoYXQgdGhlIG9iamVjdCBpcyBub3Qgc2hhcmVkIHdpdGgKLSAgYW55IG9iamVjdC4KLQotICBXaGVuIGEgcmVmZXJlbmNlIHRvIGEgR3N0TWluaU9iamVjdCByZWxlYXNlLCBib3RoIHRoZSByZWYgY291bnQgYW5kIHRoZQotICBleGNsdXNpdmUgY291bnRlciB3aWxsIGJlIGRlY3JlYXNlZCB3aXRoIGdzdF9taW5pX29iamVjdF91bnJlZigpIGFuZAotICBnc3RfbWluaV9vYmplY3RfdW5sb2NrICgpIHJlc3BlY3RpdmVseS4KLQotICogbG9ja2luZwotCi0gIEFsbCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgbXVzdCBiZSBwZXJmb3JtZWQgYmV0d2VlbiBhIGdzdF9taW5pX29iamVjdF9sb2NrKCkgYW5kCi0gIGdzdF9taW5pX29iamVjdF91bmxvY2soKSBwYWlyIHdpdGggdGhlIHJlcXVlc3RlZCBhY2Nlc3MgbWV0aG9kLgotCi0gIEEgZ3N0X21pbmlfb2JqZWN0X2xvY2soKSBjYW4gZmFpbCB3aGVuIGEgV1JJVEUgbG9jayBpcyByZXF1ZXN0ZWQgYW5kIHRoZSBleGNsdXNpdmUKLSAgY291bnRlciBpcyA+IDEuIEluZGVlZCBhIEdzdE1pbmlPYmplY3Qgb2JqZWN0IHdpdGggYW4gZXhjbHVzaXZlIGNvdW50ZXIgPiAxIGlzCi0gIGxvY2tlZCBFWENMVVNJVkVMWSBieSBhdCBsZWFzdCAyIG9iamVjdHMgYW5kIGlzIHRoZXJlZm9yZSBub3Qgd3JpdGFibGUuCi0KLSAgT25jZSB0aGUgR3N0TWluaU9iamVjdCBpcyBsb2NrZWQgd2l0aCBhIGNlcnRhaW4gYWNjZXNzIG1vZGUsIGl0IGNhbiBiZSByZWN1cnNpdmVseQotICBsb2NrZWQgd2l0aCB0aGUgc2FtZSBvciBuYXJyb3dlciBhY2Nlc3MgbW9kZS4gRm9yIGV4YW1wbGUsIGZpcnN0IGxvY2tpbmcgdGhlCi0gIEdzdE1pbmlPYmplY3QgaW4gUkVBRFdSSVRFIG1vZGUgYWxsb3dzIHlvdSB0byByZWN1c2l2ZWx5IGxvY2sgdGhlCi0gIEdzdE1pbmlPYmplY3QgaW4KLSAgUkVBRFdSSVRFLCBSRUFEIGFuZCBXUklURSBtb2RlLiBNZW1vcnkgbG9ja2VkIGluIFJFQUQgbW9kZSBjYW5ub3QgYmUgbG9ja2VkCi0gIHJlY3Vyc2l2ZWx5IGluIFdSSVRFIG9yIFJFQURXUklURSBtb2RlLgotCi0gIE5vdGUgdGhhdCBtdWx0aXBsZSB0aHJlYWRzIGNhbiBSRUFEIGxvY2sgdGhlIEdzdE1pbmlPYmplY3QgY29uY3VycmVudGx5IGJ1dCBjYW5ub3QKLSAgbG9jayB0aGUgb2JqZWN0IGluIFdSSVRFIG1vZGUgYmVjYXVzZSB0aGUgZXhjbHVzaXZlIGNvdW50ZXIgbXVzdCBiZSA+IDEuCi0KLSAgQWxsIGNhbGxzIHRvIGdzdF9taW5pX29iamVjdF9sb2NrKCkgbmVlZCB0byBiZSBwYWlyZWQgd2l0aCBvbmUKLSAgZ3N0X21pbmlfb2JqZWN0X3VubG9jaygpIGNhbGwgd2l0aCB0aGUgc2FtZSBhY2Nlc3MgbW9kZS4gV2hlbiB0aGUgbGFzdCByZWZjb3VudAotICBvZiB0aGUgb2JqZWN0IGlzIHJlbW92ZWQsIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIG91dHN0YW5kaW5nIGxvY2tzLgotCi0gTm90ZSB0aGF0IGEgc2hhcmVkIGNvdW50ZXIgb2YgYm90aCAwIGFuZCAxIGxlYXZlcyB0aGUgR3N0TWluaU9iamVjdCB3cml0YWJsZS4gVGhlCi0gcmVhc29uIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBjcmVhdGUgYW5kIHBhc3Mgb3duZXJzaGlwIG9mIHRoZSBHc3RNaW5pT2JqZWN0IHRvCi0gYW5vdGhlciBvYmplY3Qgd2hpbGUga2VlcGluZyBpdCB3cml0YWJsZS4gV2hlbiB0aGUgR3N0TWluaU9iamVjdCBpcwotIGNyZWF0ZWQgd2l0aCBhIHNoYXJlZCBjb3VudCBvZiAwLCBpdCBpcyB3cml0YWJsZS4gV2hlbiB0aGUgR3N0TWluaU9iamVjdCBpcyB0aGVuCi0gYWRkZWQgdG8gYW5vdGhlciBvYmplY3QsIHRoZSBzaGFyZWQgY291bnQgaXMgaW5jcmVtZW50ZWQgdG8gMSBhbmQgdGhlCi0gR3N0TWluaU9iamVjdCByZW1haW5zIHdyaXRhYmxlLiBUaGUgMCBzaGFyZSBjb3VudGVyIGhhcyBhIHNpbWlsYXIgcHVycG9zZSBhcyB0aGUgZmxvYXRpbmcKLSByZWZlcmVuY2UgaW4gR09iamVjdC4KLQotCi1XZWFrIHJlZmVyZW5jZXMKLX5+fn5+fn5+fn5+fn5+fgotCi1Hc3RNaW5pT2JqZWN0IGhhcyBzdXBwb3J0IGZvciB3ZWFrIHJlZmVyZW5jZXMuIEEgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hlbgotdGhlIG9iamVjdCBpcyBmcmVlZCBmb3IgYWxsIHJlZ2lzdGVyZWQgd2VhayByZWZlcmVuY2VzLgotCi0KLVFEYXRhCi1+fn5+fgotCi1FeHRyYSBkYXRhIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBHc3RNaW5pT2JqZWN0IGJ5IHVzaW5nIHRoZSBRRGF0YSBBUEkuCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LW1pc3NpbmctcGx1Z2lucy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LW1pc3NpbmctcGx1Z2lucy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Njc4NTguLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1taXNzaW5nLXBsdWdpbnMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLVdoYXQgdG8gZG8gd2hlbiBhIHBsdWdpbiBpcyBtaXNzaW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgbWVjaGFuaXNtIGFuZCBBUEkgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQgcmVxdWlyZXMgR1N0cmVhbWVyIGNvcmUgYW5kCi1nc3QtcGx1Z2lucy1iYXNlIHZlcnNpb25zID49IDAuMTAuMTIuIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gc29tZSBhc3BlY3RzIG9mCi10aGlzIGRvY3VtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgbGliZ3N0YmFzZXV0aWxzIEFQSSByZWZlcmVuY2UuCi0KLVdlIG9ubHkgZGlzY3VzcyBwbGF5YmFjayBwaXBlbGluZXMgZm9yIG5vdy4KLQotQSB0aHJlZSBzdGVwIHByb2Nlc3M6Ci0KLTEpIEdTdHJlYW1lciBsZXZlbAotCi0gLSBlbGVtZW50cyB3aWxsIHVzZSBhICJtaXNzaW5nLXBsdWdpbiIgZWxlbWVudCBtZXNzYWdlIHRvIHJlcG9ydCBtaXNzaW5nCi0gICBwbHVnaW5zLCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzIHNldDoKLQotICAgICAtIHR5cGU6IChzdHJpbmcpIHsgInVyaXNvdXJjZSIsICJ1cmlzaW5rIiwgImRlY29kZXIiLCAiZW5jb2RlciIsICJlbGVtZW50IiB9Ci0gICAgICAgICAod2UgZG8gbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gZGVtdXhlci9kZWNvZGVycy9wYXJzZXJzIGV0Yy4pCi0gICAgIC0gZGV0YWlsOiAoc3RyaW5nKSBvciAoY2FwcykgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIHsgQU5ZIH0KLSAgICAgICAgIGV4OiAibW1zLCAibW1zaCIsICJhdWRpby94LW1wMyxyYXRlPTQ4MDAwLC4uLiIKLSAgICAgLSBuYW1lOiAoc3RyaW5nKSB7IEFOWSB9Ci0gICAgICAgICBleDogIk1NUyBwcm90b2NvbCBoYW5kbGVyIiwuLgotCi0gLSBtaXNzaW5nIHVyaSBoYW5kbGVyIAotICAKLSAgZXguIG1tczovL2Zvby5iYXIvZmlsZS5hc2YKLQotICBXaGVuIG5vIHByb3RvY29sIGhhbmRsZXIgaXMgaW5zdGFsbGVkIGZvciBtbXM6Ly8sIHRoZSBhcHBsaWNhdGlvbiB3aWxsIG5vdCBiZQotICBhYmxlIHRvIGluc3RhbnRpYXRlIGFuIGVsZW1lbnQgZm9yIHRoYXQgdXJpIChnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkKLSAgcmV0dXJucyBOVUxMKS4KLQotICBQbGF5YmluIHdpbGwgcG9zdCBhICJtaXNzaW5nLXBsdWdpbiIgZWxlbWVudCBtZXNzYWdlIHdpdGggdGhlIHR5cGUgc2V0IHRvIAotICAidXJpc291cmNlIiwgZGV0YWlsIHNldCB0byAibW1zIi4gT3B0aW9uYWxseSB0aGUgZnJpZW5kbHkgbmFtZSBjYW4gYmUgZmlsbGVkCi0gIGluIGFzIHdlbGwuCi0KLSAtIG1pc3NpbmcgdHlwZWZpbmQgZnVuY3Rpb24KLQotICBXZSBkb24ndCByZWNvZ25pemUgdGhlIHR5cGUgb2YgdGhlIGZpbGUsIHRoaXMgc2hvdWxkIG5vcm1hbGx5IG5vdCBoYXBwZW4KLSAgYmVjYXVzZSBhbGwgdGhlIHR5cGVmaW5kZXJzIGFyZSBpbiB0aGUgYmFzaWMgR1N0cmVhbWVyIGluc3RhbGxhdGlvbi4KLSAgVGhlcmUgaXMgbm90IG11Y2ggdXNlZnVsIGluZm9ybWF0aW9uIHdlIGNhbiBnaXZlIGFib3V0IGhvdyB0byByZXNvbHZlIHRoaXMgCi0gIGlzc3VlLiBJdCBpcyBwb3NzaWJsZSB0byB1c2UgdGhlIGZpcnN0IE4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gZGV0ZXJtaW5lIHRoZQotICB0eXBlIChhbmQgbmVlZGVkIHBsdWdpbikgb24gdGhlIHNlcnZlci4gV2UgZG9uJ3QgZXhwbG9yZSB0aGlzIG9wdGlvbiBpbiB0aGlzCi0gIGRvY3VtZW50IHlldCwgYnV0IHRoZSBwcm9wb3NhbCBpcyBmbGV4aWJsZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdGhpcyBpbiB0aGUKLSAgZnV0dXJlIHNob3VsZCB0aGUgbmVlZCBhcmlzZS4KLQotIC0gbWlzc2luZyBkZW11eGVyCi0KLSAgVHlwaWNhbGx5IGFmdGVyIHJ1bm5pbmcgdHlwZWZpbmQgb24gdGhlIGRhdGEgd2UgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSAKLSAgZmlsZS4gSWYgdGhlcmUgaXMgbm8gcGx1Z2luIGZvdW5kIGZvciB0aGUgdHlwZSwgYSAibWlzc2luZy1wbHVnaW4iIGVsZW1lbnQKLSAgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZGVjb2RlYmluIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6IFR5cGUgc2V0IHRvCi0gICJkZWNvZGVyIiwgZGV0YWlsIHNldCB0byB0aGUgY2FwcyBmb3Igd2l0Y2ggbm8gcGx1Z2luIHdhcyBmb3VuZC4gT3B0aW9uYWxseQotICB0aGUgZnJpZW5kbHkgbmFtZSBjYW4gYmUgZmlsbGVkIGluIGFzIHdlbGwuCi0KLSAtIG1pc3NpbmcgZGVjb2RlciAKLQotICBUaGUgZGVtdXhlciB3aWxsIGR5bmFtaWNhbGx5IGNyZWF0ZSBuZXcgcGFkcyB3aXRoIHNwZWNpZmljIGNhcHMgd2hpbGUgaXQgCi0gIGZpZ3VyZXMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyIGZvcm1hdC4gRGVjb2RlYmluIHRyaWVzIHRvIGZpbmQgdGhlCi0gIGRlY29kZXJzIGZvciB0aGVzZSBmb3JtYXRzIGluIHRoZSByZWdpc3RyeS4gSWYgdGhlcmUgaXMgbm8gZGVjb2RlciBmb3VuZCwgYQotICAibWlzc2luZy1wbHVnaW4iIGVsZW1lbnQgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZGVjb2RlYmluIHdpdGggdGhlIGZvbGxvd2luZwotICBmaWVsZHM6IFR5cGUgc2V0IHRvICJkZWNvZGVyIiwgZGV0YWlsIHNldCB0byB0aGUgY2FwcyBmb3Igd2hpY2ggbm8gcGx1Z2luCi0gIHdhcyBmb3VuZC4gT3B0aW9uYWxseSB0aGUgZnJpZW5kbHkgbmFtZSBjYW4gYmUgZmlsbGVkIGluIGFzIHdlbGwuIFRoZXJlIGlzCi0gIG5vIGRpc3RpbmN0aW9uIG1hZGUgYmV0d2VlbiB0aGUgbWlzc2luZyBkZW11eGVyIGFuZCBkZWNvZGVyIGF0IHRoZQotICBhcHBsaWNhdGlvbiBsZXZlbC4KLQotIC0gbWlzc2luZyBlbGVtZW50Ci0KLSAgRGVjb2RlYmluIGFuZCBwbGF5YmluIHdpbGwgY3JlYXRlIGEgc2V0IG9mIGhlbHBlciBlbGVtZW50cyB3aGVuIHRoZXkgc2V0IHVwCi0gIHRoZWlyIGRlY29kaW5nIHBpcGVsaW5lLiBUaGVzZSBlbGVtZW50cyBhcmUgdHlwaWNhbGx5IGNvbG9yc3BhY2UsIHNhbXBsZSByYXRlLAotICBhdWRpbyBzaW5rcywuLi4gVGhlaXIgcHJlc2VuY2Ugb24gdGhlIHN5c3RlbSBpcyByZXF1aXJlZCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkKLSAgb2YgZGVjb2RlYmluLiBJdCBpcyB0eXBpY2FsbHkgYSBwYWNrYWdlIGRlcGVuZGVuY3kgZXJyb3IgaWYgdGhleSBhcmUgbm90Ci0gIHByZXNlbnQgYnV0IGluIGNhc2Ugb2YgYSBjb3JydXB0ZWQgc3lzdGVtIHRoZSBmb2xsb3dpbmcgIm1pc3NpbmctcGx1Z2luIgotICBlbGVtZW50IG1lc3NhZ2Ugd2lsbCBiZSBlbWl0dGVkOiB0eXBlIHNldCB0byAiZWxlbWVudCIsIGRldGFpbCBzZXQgdG8gdGhlCi0gIGVsZW1lbnQgZmFjdG9yeSBuYW1lIGFuZCB0aGUgZnJpZW5kbHkgbmFtZSBvcHRpb25hbGx5IHNldCB0byBhIGRlc2NyaXB0aW9uCi0gIG9mIHRoZSBlbGVtZW50J3MgZnVuY3Rpb25hbGl0eSBpbiB0aGUgZGVjb2RpbmcgcGlwZWxpbmUuCi0KLSBFeGNlcHQgZm9yIHJlcG9ydGluZyB0aGUgbWlzc2luZyBwbHVnaW5zLCBubyBmdXJ0aGVyIHBvbGljeSBpcyBlbmZvcmNlZCBhdCB0aGUKLSBHU3RyZWFtZXIgbGV2ZWwuIEl0IGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiB0byBkZWNpZGUgd2hldGhlciBhIG1pc3NpbmcKLSBwbHVnaW4gY29uc3RpdHV0ZXMgYSBwcm9ibGVtIG9yIG5vdC4KLQotCi0yKSBhcHBsaWNhdGlvbiBsZXZlbAotCi0gVGhlIGFwcGxpY2F0aW9uJ3Mgam9iIGlzIHRvIGxpc3RlbiBmb3IgdGhlICJtaXNzaW5nLXBsdWdpbiIgZWxlbWVudCBtZXNzYWdlcwotIGFuZCB0byBkZWNpZGUgb24gYSBwb2xpY3kgdG8gaGFuZGxlIHRoZW0uIEZvbGxvd2luZyBjYXNlcyBleGlzdDoKLQotIC0gcGFydGlhbGx5IG1pc3NpbmcgcGx1Z2lucwotCi0gVGhlIGFwcGxpY2F0aW9uIHdpbGwgYmUgYWJsZSB0byBjb21wbGV0ZSBhIHN0YXRlIGNoYW5nZSB0byBQQVVTRUQgYnV0IHRoZXJlIAotIHdpbGwgYmUgYSAibWlzc2luZy1wbHVnaW4iIGVsZW1lbnQgbWVzc2FnZSBvbiB0aGUgR3N0QnVzLiAKLQotIFRoaXMgbWVhbnMgdGhhdCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHBsYXkgYmFjayBwYXJ0IG9mIHRoZSBtZWRpYSBmaWxlIGJ1dCBub3QKLSBhbGwgb2YgaXQuIAotCi0gRm9yIGV4YW1wbGU6IHN1cHBvc2Ugd2UgaGF2ZSBhbiAuYXZpIGZpbGUgd2l0aCBtcDMgYXVkaW8gYW5kIGRpdnggdmlkZW8uIElmIHdlIAotIGhhdmUgdGhlIG1wMyBhdWRpbyBkZWNvZGVyIGJ1dCBub3QgdGhlIGRpdnggdmlkZW8gZGVjb2RlciwgaXQgd2lsbCBiZSBwb3NzaWJsZQotIHRvIHBsYXkgb25seSB0aGUgYXVkaW8gcGFydCBidXQgbm90IHRoZSB2aWRlbyBwYXJ0LiBGb3IgYW4gYXVkaW8gcGxheWJhY2sKLSBhcHBsaWNhdGlvbiwgdGhpcyBpcyBub3QgYSBwcm9ibGVtIGJ1dCBhIHZpZGVvIHBsYXllciBtaWdodCB3YW50IHRvIGRlY2lkZSBvbjoKLQotICAgLSByZXF1aXJlIHRoZSB1c2UgdG8gaW5zdGFsbCB0aGUgYWRkaXRpb25hbGx5IHJlcXVpcmVkIHBsdWdpbnMuIAotICAgLSBpbmZvcm0gdGhlIHVzZXIgdGhhdCBvbmx5IHRoZSBhdWRpbyB3aWxsIGJlIHBsYXllZCBiYWNrCi0gICAtIGFzayB0aGUgdXNlciBpZiBpdCBzaG91bGQgZG93bmxvYWQgdGhlIGFkZGl0aW9uYWwgY29kZWMgb3Igb25seSBwbGF5IHRoZSAKLSAgICAgYXVkaW8gcGFydC4KLSAgIC0gLi4uCi0KLSAtIGNvbXBsZXRlbHkgdW5wbGF5YWJsZSBzdHJlYW0KLQotIFRoZSBhcHBsaWNhdGlvbiB3aWxsIHJlY2VpdmUgYW4gRVJST1IgbWVzc2FnZSBmcm9tIEdTdHJlYW1lciBpbmZvcm1pbmcgaXQgdGhhdAotIHBsYXliYWNrIHN0b3BwZWQgKGJlZm9yZSBpdCBjb3VsZCByZWFjaCBQQVVTRUQpLiBUaGlzIGhhcHBlbnMgYmVjYXVzZSBub25lIG9mCi0gdGhlIHN0cmVhbXMgaXMgY29ubmVjdGVkIHRvIGEgZGVjb2Rlci4gVGhlIGVycm9yIGNvZGUgYW5kIGRvbWFpbiBzaG91bGQgYmUgb25lCi0gb2YgdGhlIGZvbGxvd2luZyBpbiB0aGlzIGNhc2U6Ci0gICAgLSBHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTiAoZG9tYWluOiBHU1RfQ09SRV9FUlJPUikKLSAgICAtIEdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5EIChkb21haW46IEdTVF9TVFJFQU1fRVJST1IpCi0KLSBUaGUgYXBwbGljYXRpb24gY2FuIHRoZW4gc2VlIHRoYXQgdGhlcmUgYXJlIGEgc2V0IG9mICJtaXNzaW5nLXBsdWdpbiIgZWxlbWVudAotIG1lc3NhZ2VzIG9uIHRoZSBHc3RCdXMgYW5kIGNhbiBkZWNpZGUgdG8gdHJpZ2dlciB0aGUgZG93bmxvYWQgcHJvY2VkdXJlLiBJdAotIGRvZXMgdGhhdCBhcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLgotCi0gIm1pc3NpbmctcGx1Z2luIiBlbGVtZW50IG1lc3NhZ2VzIGNhbiBiZSBpZGVudGlmaWVkIHVzaW5nIHRoZSBmdW5jdGlvbgotIGdzdF9pc19taXNzaW5nX3BsdWdpbl9tZXNzYWdlKCkuCi0KLQotMykgUGx1Z2luIGRvd25sb2FkIHN0YWdlCi0KLSAgQXQgdGhpcyBwb2ludCB0aGUgYXBwbGljYXRpb24gaGFzCi0gICAgLSBjb2xsZWN0ZWQgb25lIG9yIG1vcmUgIm1pc3NpbmctcGx1Z2luIiBlbGVtZW50IG1lc3NhZ2VzCi0gICAgLSBtYWRlIGEgZGVjaXNpb24gdGhhdCBhZGRpdGlvbmFsIHBsdWdpbnMgc2hvdWxkIGJlIGluc3RhbGxlZAotCi0gIEl0IHdpbGwgY2FsbCBhIEdTdHJlYW1lciB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgZWFjaCAibWlzc2luZy1wbHVnaW4iCi0gIG1lc3NhZ2UgaW50byBhbiBpZGVudGlmaWVyIHN0cmluZyBkZXNjcmliaW5nIHRoZSBtaXNzaW5nIGNhcGFiaWxpdHkuIFRoaXMgaXMKLSAgZG9uZSB1c2luZyB0aGUgZnVuY3Rpb24gZ3N0X21pc3NpbmdfcGx1Z2luX21lc3NhZ2VfZ2V0X2luc3RhbGxlcl9kZXRhaWwoKS4KLQotICBUaGUgYXBwbGljYXRpb24gd2lsbCB0aGVuIHBhc3MgdGhlc2Ugc3RyaW5ncyB0byBnc3RfaW5zdGFsbF9wbHVnaW5zX2FzeW5jKCkKLSAgb3IgZ3N0X2luc3RhbGxfcGx1Z2luc19zeW5jKCkgdG8gaW5pdGlhdGUgdGhlIGRvd25sb2FkLiBTZWUgdGhlIEFQSQotICBkb2N1bWVudGF0aW9uIHRoZXJlIChsaWJnc3RiYXNldXRpbHMsIHBhcnQgb2YgZ3N0LXBsdWdpbnMtYmFzZSkgZm9yIG1vcmUKLSAgZGV0YWlscy4KLQotICBXaGVuIG5ldyBwbHVnaW5zIGhhdmUgYmVlbiBpbnN0YWxsZWQsIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGhhdmUgdG8gaW5pdGlhdGUKLSAgYSByZS1zY2FuIG9mIHRoZSBHU3RyZWFtZXIgcGx1Z2luIHJlZ2lzdHJ5IHVzaW5nIGdzdF91cGRhdGVfcmVnaXN0cnkoKS4KLQotCi00KSBGb3JtYXQgb2YgdGhlIChVVEYtOCkgc3RyaW5nIElEIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgaW5zdGFsbGVyIHN5c3RlbQotCi0gIFRoZSBzdHJpbmcgaXMgbWFkZSB1cCBvZiBzZXZlcmFsIGZpZWxkcywgc2VwYXJhdGVkIGJ5ICd8JyBjaGFyYWN0ZXJzLgotICBUaGUgZmllbGRzIGFyZToKLQotICAgIC0gcGx1Z2luIHN5c3RlbSBpZGVudGlmaWVyLCBpZS4gImdzdHJlYW1lciIKLSAgICAgIFRoaXMgaWRlbnRpZmllciBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgb2YgdGhlIHJlc3Qgb2YgdGhlIGRldGFpbCBzdHJpbmcuCi0gICAgICBBdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxlcnMgc2hvdWxkIG5vdCBwcm9jZXNzIGRldGFpbCBzdHJpbmdzIHdpdGgKLSAgICAgIHVua25vd24gaWRlbnRpZmllcnMuIFRoaXMgYWxsb3dzIG90aGVyIHBsdWdpbi1iYXNlZCBsaWJyYXJpZXMgdG8gdXNlCi0gICAgICB0aGUgc2FtZSBtZWNoYW5pc20gZm9yIHRoZWlyIGF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG5lZWRzLCBvcgotICAgICAgZm9yIHRoZSBmb3JtYXQgdG8gYmUgY2hhbmdlZCBzaG91bGQgaXQgdHVybiBvdXQgdG8gYmUgaW5zdWZmaWNpZW50LgotCi0gICAgLSBwbHVnaW4gc3lzdGVtIHZlcnNpb24sIGUuZy4gIjAuMTAiCi0gICAgICBUaGlzIGlzIHJlcXVpcmVkIHNvIHRoYXQgd2hlbiB0aGVyZSBpcyBhIEdTdHJlYW1lci0wLjEyIG9yIEdTdHJlYW1lci0xLjAKLSAgICAgIGF0IHNvbWVtIHBvaW50IGluIGZ1dHVyZSwgdGhlIGRpZmZlcmVudCBtYWpvciB2ZXJzaW9ucyBjYW4gc3RpbGwgY28tZXhpc3QKLSAgICAgIGFuZCB1c2UgdGhlIHNhbWUgcGx1Z2luIGluc3RhbGwgbWVjaGFuaXNtIGluIHRoZSBzYW1lIHdheS4KLQotICAgIC0gYXBwbGljYXRpb24gaWRlbnRpZmllciwgZS5nLiAidG90ZW0iCi0gICAgICBUaGlzIG1heSBhbHNvIGJlIGluIHRoZSBmb3JtIG9mICJwaWQvMTIzNDUiIGlmIHRoZSBwcm9ncmFtIG5hbWUgY2FuJ3QKLSAgICAgIGJlIG9idGFpbmVkIGZvciBzb21lIHJlYXNvbi4KLQotICAgIC0gaHVtYW4tcmVhZGFibGUgbG9jYWxpc2VkIGRlc2NyaXB0aW9uIG9mIHRoZSByZXF1aXJlZCBjb21wb25lbnQsCi0gICAgICBlLmcuICJWb3JiaXMgYXVkaW8gZGVjb2RlciIKLQotICAgIC0gaWRlbnRpZmllciBzdHJpbmcgZm9yIHRoZSByZXF1aXJlZCBjb21wb25lbnQsIGUuZy4KLQotICAgICAgICAgLSB1cmlzb3VyY2UtJChQUk9UT0NPTF9SRVFVSVJFRCkKLSAgICAgICAgICAgICBlLmcuIHVyaXNvdXJjZS1odHRwIG9yIHVyaXNvdXJjZS1tbXMKLQotICAgICAgICAgLSBlbGVtZW50LSQoRUxFTUVOVF9SRVFVSVJFRCksCi0gICAgICAgICAgICAgZS5nLiBlbGVtZW50LXZpZGVvY29udmVydAotCi0gICAgICAgICAtIGRlY29kZXItJChDQVBTX1JFUVVJUkVEKQotICAgICAgICAgICAgIGUuZy4gZGVjb2Rlci1hdWRpby94LXZvcmJpcyBvcgotICAgICAgICAgICAgICAgICAgZGVjb2Rlci1hcHBsaWNhdGlvbi9vZ2cgb3IKLSAgICAgICAgICAgICAgICAgIGRlY29kZXItYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0IG9yCi0gICAgICAgICAgICAgICAgICBkZWNvZGVyLXZpZGVvL21wZWcsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbil0cnVlLCBtcGVndmVyc2lvbj0oaW50KTIKLQotICAgICAgICAgLSBlbmNvZGVyLSQoQ0FQU19SRVFVSVJFRCkKLSAgICAgICAgICAgICBlLmcuIGVuY29kZXItYXVkaW8veC12b3JiaXMKLQotICAgIC0gb3B0aW9uYWwgZnVydGhlciBmaWVsZHMgbm90IHlldCBzcGVjaWZpZWQKLQotCi0gIEFuIGVudGlyZSBJRCBzdHJpbmcgbWlnaHQgdGhlbiBsb29rIGxpa2UgdGhpcywgZm9yIGV4YW1wbGU6Ci0KLSAgICBnc3RyZWFtZXJ8MC4xMHx0b3RlbXxWb3JiaXMgYXVkaW8gZGVjb2RlcnxkZWNvZGVyLWF1ZGlvL3gtdm9yYmlzCi0KLSAgUGx1Z2luIGluc3RhbGxlcnMgcGFyc2luZyB0aGlzIElEIHN0cmluZyBzaG91bGQgZXhwZWN0IGZ1cnRoZXIgZmllbGRzIGFsc28KLSAgc2VwYXJhdGVkIGJ5ICd8JyBzeW1ib2xzIGFuZCBlaXRoZXIgaWdub3JlIHRoZW0sIHdhcm4gdGhlIHVzZXIsIG9yIGVycm9yCi0gIG91dCB3aGVuIGVuY291bnRlcmluZyB0aGVtLgotIAotICBUaGUgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBsaWJnc3RiYXNldXRpbHMKLSAgbGlicmFyeSB0aGF0IGNhbiBiZSBmb3VuZCBpbiBnc3QtcGx1Z2lucy1iYXNlIHZlcnNpb25zID49IDAuMTAuMTIgYW5kIGNhbgotICBhbHNvIGJlIHVzZWQgYnkgZGVtdXhlcnMgdG8gZmluZCBvdXQgdGhlIGNvZGVjIG5hbWVzIGZvciB0YWdsaXN0cyBmcm9tIGdpdmVuCi0gIGNhcHMgaW4gYSB1bmlmaWVkIGFuZCBjb25zaXN0ZW50IHdheS4KLQotICBBcHBsaWNhdGlvbnMgY2FuIGNyZWF0ZSB0aGVzZSBkZXRhaWwgc3RyaW5ncyB1c2luZyB0aGUgZnVuY3Rpb24KLSAgZ3N0X21pc3NpbmdfcGx1Z2luX21lc3NhZ2VfZ2V0X2luc3RhbGxlcl9kZXRhaWwoKSBvbiBhIGdpdmVuIG1pc3NpbmctcGx1Z2luCi0gIG1lc3NhZ2UuCi0KLQotNSkgVXNpbmcgbWlzc2luZy1wbHVnaW4gbWVzc2FnZXMgZm9yIGVycm9yIHJlcG9ydGluZzoKLQotICBNaXNzaW5nLXBsdWdpbiBtZXNzYWdlcyBhcmUgYWxzbyB1c2VmdWwgZm9yIGVycm9yIHJlcG9ydGluZyBwdXJwb3NlcywgZWl0aGVyCi0gIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGxpYmdpbW1lLWNvZGVjLCBvciB0aGUKLSAgZXh0ZXJuYWwgaW5zdGFsbGVyIGlzIG5vdCBhdmFpbGFibGUgb3Igbm90IGFibGUgdG8gaW5zdGFsbCB0aGUgcmVxdWlyZWQKLSAgcGx1Z2lucy4KLQotICBXaGVuIGNyZWF0aW5nIGVycm9yIG1lc3NhZ2VzLCBhcHBsaWNhdGlvbnMgbWF5IHVzZSB0aGUgZnVuY3Rpb24KLSAgZ3N0X21pc3NpbmdfcGx1Z2luX21lc3NhZ2VfZ2V0X2Rlc2NyaXB0aW9uKCkgdG8gb2J0YWluIGEgcG9zc2libHkgdHJhbnNsYXRlZAotICBkZXNjcmlwdGlvbiBmcm9tIGVhY2ggbWlzc2luZy1wbHVnaW4gbWVzc2FnZSAoZS5nLiAiTWF0cm9za2EgZGVtdXhlciIgb3IKLSAgIlRoZW9yYSB2aWRlbyBkZXBheWxvYWRlciIpLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlcG9ydCB0byB0aGUgdXNlciBleGFjdGx5Ci0gIHdoYXQgaXQgaXMgdGhhdCBpcyBtaXNzaW5nLgotCi0KLTYpIE5vdGVzIGZvciBwYWNrYWdlcnMKLQotIC0gQW4gZWFzeSB3YXkgdG8gaW50cm9zcGVjdCBwbHVnaW4gLnNvIGZpbGVzIGlzOgotCi0gICAgICQgZ3N0LWluc3BlY3QgLS1wcmludC1wbHVnaW4tYXV0by1pbnN0YWxsLWluZm8gL3BhdGgvdG8vbGliZ3N0Zm9vLnNvCi0KLSAgIFRoZSBvdXRwdXQgd2lsbCBiZSBzb21ldGhpbmcgbGlrZToKLQotICAgICBkZWNvZGVyLWF1ZGlvL3gtdm9yYmlzCi0gICAgIGVsZW1lbnQtdm9yYmlzZGVjCi0gICAgIGVsZW1lbnQtdm9yYmlzZW5jCi0gICAgIGVsZW1lbnQtdm9yYmlzcGFyc2UKLSAgICAgZWxlbWVudC12b3JiaXN0YWcKLSAgICAgZW5jb2Rlci1hdWRpby94LXZvcmJpcwotCi0gICBCVVQgY291bGQgYWxzbyBiZSBsaWtlIHRoaXMgKGZyb20gdGhlIGZhYWQgZWxlbWVudCBpbiB0aGlzIGNhc2UpOgotCi0gICAgIGRlY29kZXItYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7IDIsIDQgfQotCi0gICBOT1RFIHRoYXQgdGhpcyBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIHRoZSBjYXBzIHN0cmluZyB0aGF0IHRoZSBpbnN0YWxsZXIKLSAgIHdpbGwgZ2V0IGZyb20gdGhlIGFwcGxpY2F0aW9uLiBUaGUgYXBwbGljYXRpb24gd2lsbCBhbHdheXMgZXZlciBhc2sgZm9yCi0gICBvbmUgb2YKLQotICAgICBkZWNvZGVyLWF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMgotICAgICBkZWNvZGVyLWF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNAotCi0KLSAtIHdoZW4gaW50cm9zcGVjdGluZywga2VlcCBpbiBtaW5kIHRoYXQgdGhlcmUgYXJlIEdTdHJlYW1lciBwbHVnaW5zIHRoYXQKLSAgIGluIHR1cm4gbG9hZCBleHRlcm5hbCBwbHVnaW5zLiBFeGFtcGxlcyBvZiB0aGVzZSBhcmUgcGl0ZmRsbCwgbGFkc3BhLCBvcgotICAgdGhlIEdTdHJlYW1lciBsaWJ2aXN1YWwgcGx1Z2luLiBUaG9zZSBwbHVnaW5zIHdpbGwgb25seSBhbm5vdW5jZSBlbGVtZW50cwotICAgZm9yIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIGV4dGVybmFsIHBsdWdpbnMgYXQgdGhlIHRpbWUgb2YgaW50cm9zcGVjdGlvbiEKLSAgIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiBwaXRmZGxsLCB0aGlzIGlzIG5vdCByZWFsbHkgcmVsZXZhbnQgdG8gdGhlIHBsYXliYWNrCi0gICBjYXNlLCBidXQgbWF5IGJlY29tZSBhbiBpc3N1ZSBpbiBmdXR1cmUgd2hlbiBhcHBsaWNhdGlvbnMgbGlrZSBidXp6dGFyZCwKLSAgIGpva29zaGVyIG9yIHBpdGl2aSBzdGFydCByZXF1ZXN0aW9uIGVsZW1lbnRzIGJ5IG5hbWUsIGZvciBleGFtcGxlIGxhZHNwYQotICAgZWZmZWN0IGVsZW1lbnRzIG9yIHNvLgotICAgCi0gICBUaGlzIGNhc2UgY291bGQgYmUgaGFuZGxlZCBpZiB0aG9zZSB3cmFwcGVyIHBsdWdpbnMgd291bGQgYWxzbyBwcm92aWRlIGEKLSAgIGdzdC1pbnN0YWxsLXh4eC1wbHVnaW5zLWhlbHBlciwgd2hlcmUgeHh4PXtsYWRzcGF8dmlzdWFsfC4uLn0uIFRodXMgaWYgdGhlCi0gICBkaXN0cm8gc3BlY2lmaWMgZ3N0LWluc3RhbGwtcGx1Z2lucy1oZWxwZXIgY2FuJ3QgcmVzb2x2ZSBhIHJlcXVlc3QgZm9yIGUuZy4KLSAgIGVsZW1lbnQtYm1sLXNvbmljdmVyYiBpdCBjYW4gZm9yd2FyZCB0aGUgcmVxdWVzdCB0byAKLSAgIGdzdC1pbnN0YWxsLWJtbC1wbHVnaW5zLWhlbHBlciAoYm1sIGlzIHRoZSBidXp6IG1hY2hpbmUgbG9hZGVyKS4KLQotCi03KSBGdXJ0aGVyIHJlZmVyZW5jZXM6Ci0KLWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWJhc2UtbGlicy9odG1sL2dzdHJlYW1lci1iYXNlLXV0aWxzLmh0bWwKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtbmVnb3RpYXRpb24udHh0IGIvZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZTY3YWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1uZWdvdGlhdGlvbi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNTMgKzAsMCBAQAotTmVnb3RpYXRpb24KLS0tLS0tLS0tLS0tCi0KLUNhcGFiaWxpdGllcyBuZWdvdGlhdGlvbiBpcyB0aGUgcHJvY2VzcyBvZiBkZWNpZGluZyBvbiBhbiBhZGVxdWF0ZQotZm9ybWF0IGZvciBkYXRhZmxvdyB3aXRoaW4gYSBHU3RyZWFtZXIgcGlwZWxpbmUuIElkZWFsbHksIG5lZ290aWF0aW9uCi0oYWxzbyBrbm93biBhcyAiY2Fwc25lZ28iKSB0cmFuc2ZlcnMgaW5mb3JtYXRpb24gZnJvbSB0aG9zZSBwYXJ0cyBvZiB0aGUKLXBpcGVsaW5lIHRoYXQgaGF2ZSBpbmZvcm1hdGlvbiB0byB0aG9zZSBwYXJ0cyBvZiB0aGUgcGlwZWxpbmUgdGhhdCBhcmUKLWZsZXhpYmxlLCBjb25zdHJhaW5lZCBieSB0aG9zZSBwYXJ0cyBvZiB0aGUgcGlwZWxpbmUgdGhhdCBhcmUgbm90Ci1mbGV4aWJsZS4KLQotCi1CYXNpYyBydWxlcwotfn5+fn5+fn5+fn4KLQotVGhlc2Ugc2ltcGxlIHJ1bGVzIG11c3QgYmUgZm9sbG93ZWQ6Ci0KLSAxKSBkb3duc3RyZWFtIHN1Z2dlc3RzIGZvcm1hdHMKLSAyKSB1cHN0cmVhbSBkZWNpZGVzIG9uIGZvcm1hdAotCi1UaGVyZSBhcmUgNCBxdWVyaWVzL2V2ZW50cyB1c2VkIGluIGNhcHMgbmVnb3RpYXRpb246Ci0KLSAxKSBHU1RfUVVFUllfQ0FQUyAgICAgICAgOiBnZXQgcG9zc2libGUgZm9ybWF0cwotIDIpIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUyA6IGNoZWNrIGlmIGZvcm1hdCBpcyBwb3NzaWJsZQotIDMpIEdTVF9FVkVOVF9DQVBTICAgICAgICA6IGNvbmZpZ3VyZSBmb3JtYXQgKGRvd25zdHJlYW0pCi0gNCkgR1NUX0VWRU5UX1JFQ09ORklHVVJFIDogaW5mb3JtIHVwc3RyZWFtIG9mIHBvc3NpYmx5IG5ldyBjYXBzCi0KLQotUXVlcmllcwotLS0tLS0tLQotCi1BIHBhZCBjYW4gYXNrIHRoZSBwZWVyIHBhZCBmb3IgaXRzIHN1cHBvcnRlZCBHc3RDYXBzLiBJdCBkb2VzIHRoaXMgd2l0aAotdGhlIENBUFMgcXVlcnkuIFRoZSBsaXN0IG9mIHN1cHBvcnRlZCBjYXBzIGNhbiBiZSB1c2VkIHRvIGNob29zZSBhbgotYXBwcm9wcmlhdGUgR3N0Q2FwcyBmb3IgdGhlIGRhdGEgdHJhbnNmZXIuCi1UaGUgQ0FQUyBxdWVyeSB3b3JrcyByZWN1cnNpdmVseSwgZWxlbWVudHMgc2hvdWxkIHRha2UgdGhlaXIgcGVlcnMgaW50bwotY29uc2lkZXJhdGlvbiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgcG9zc2libGUgY2Fwcy4gQmVjYXVzZSB0aGUgcmVzdWx0IGNhcHMKLWNhbiBiZSB2ZXJ5IGxhcmdlLCB0aGUgZmlsdGVyIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBjYXBzLiBPbmx5IHRoZQotY2FwcyB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIgd2lsbCBiZSByZXR1cm5lZCBhcyB0aGUgcmVzdWx0IGNhcHMuIFRoZQotb3JkZXIgb2YgdGhlIGZpbHRlciBjYXBzIGdpdmVzIHRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIG9mIHRoZSBjYWxsZXIgYW5kCi1zaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50IGZvciB0aGUgcmV0dXJuZWQgY2Fwcy4KLQotIChpbikgImZpbHRlciIsIEdTVF9UWVBFX0NBUFMgKGRlZmF1bHQgTlVMTCkKLSAgICAgICAtIGEgR3N0Q2FwcyB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgYWdhaW5zdAotCi0gKG91dCkgImNhcHMiLCBHU1RfVFlQRV9DQVBTIChkZWZhdWx0IE5VTEwpCi0gICAgICAgLSB0aGUgcmVzdWx0IGNhcHMKLQotCi0KLUEgcGFkIGNhbiBhc2sgdGhlIHBlZXIgcGFkIGlmIGl0IHN1cHBvcnRzIGEgZ2l2ZW4gY2Fwcy4gSXQgZG9lcyB0aGlzIHdpdGgKLXRoZSBBQ0NFUFRfQ0FQUyBxdWVyeS4gVGhlIGNhcHMgbXVzdCBiZSBmaXhlZC4KLVRoZSBBQ0NFUFRfQ0FQUyBxdWVyeSBpcyBub3QgcmVxdWlyZWQgdG8gd29yayByZWN1cnNpdmVseSwgaXQgY2FuIHNpbXBseQotcmV0dXJuIFRSVUUgaWYgYSBzdWJzZXF1ZW50IENBUFMgZXZlbnQgd2l0aCB0aG9zZSBjYXBzIHdvdWxkIHJldHVybgotc3VjY2Vzcy4KLQotIChpbikgImNhcHMiLCBHU1RfVFlQRV9DQVBTCi0gICAgICAgLSBhIEdzdENhcHMgdG8gY2hlY2ssIG11c3QgYmUgZml4ZWQKLQotIChvdXQpICJyZXN1bHQiLCBHX1RZUEVfQk9PTEVBTiAoZGVmYXVsdCBGQUxTRSkKLSAgICAgICAtIFRSVUUgaWYgdGhlIGNhcHMgYXJlIGFjY2VwdGVkCi0KLQotRXZlbnRzCi1+fn5+fn4KLQotV2hlbiBhIG1lZGlhIGZvcm1hdCBpcyBuZWdvdGlhdGVkLCBwZWVyIGVsZW1lbnRzIGFyZSBub3RpZmllZCBvZiB0aGUgR3N0Q2Fwcwotd2l0aCB0aGUgQ0FQUyBldmVudC4gVGhlIGNhcHMgbXVzdCBiZSBmaXhlZC4KLQotICAgICJjYXBzIiwgR1NUX1RZUEVfQ0FQUwotICAgICAgIC0gdGhlIG5lZ290aWF0ZWQgR3N0Q2FwcywgbXVzdCBiZSBmaXhlZAotCi0KLU9wZXJhdGlvbgotfn5+fn5+fn5+Ci0KLUdTdHJlYW1lcidzIHR3byBzY2hlZHVsaW5nIG1vZGVzLCBwdXNoIG1vZGUgYW5kIHB1bGwgbW9kZSwgbGVuZAotdGhlbXNlbHZlcyB0byBkaWZmZXJlbnQgbWVjaGFuaXNtcyB0byBhY2hpZXZlIHRoaXMgZ29hbC4gQXMgaXQgaXMgbW9yZQotY29tbW9uIHdlIGRlc2NyaWJlIHB1c2ggbW9kZSBuZWdvdGlhdGlvbiBmaXJzdC4KLQotCi1QdXNoLW1vZGUgbmVnb3RpYXRpb24KLX5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1QdXNoLW1vZGUgbmVnb3RpYXRpb24gaGFwcGVucyB3aGVuIGVsZW1lbnRzIHdhbnQgdG8gcHVzaCBidWZmZXJzIGFuZAotbmVlZCB0byBkZWNpZGUgb24gdGhlIGZvcm1hdC4gVGhpcyBpcyBjYWxsZWQgZG93bnN0cmVhbSBuZWdvdGlhdGlvbgotYmVjYXVzZSB0aGUgdXBzdHJlYW0gZWxlbWVudCBkZWNpZGVzIHRoZSBmb3JtYXQgZm9yIHRoZSBkb3duc3RyZWFtCi1lbGVtZW50LiBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlLgotCi1OZWdvdGlhdGlvbiBjYW4gYWxzbyBoYXBwZW4gd2hlbiBhIGRvd25zdHJlYW0gZWxlbWVudCB3YW50cyB0byByZWNlaXZlIAotYW5vdGhlciBkYXRhIGZvcm1hdCBmcm9tIGFuIHVwc3RyZWFtIGVsZW1lbnQuIFRoaXMgaXMgY2FsbGVkIHVwc3RyZWFtCi1uZWdvdGlhdGlvbi4KLQotVGhlIGJhc2ljcyBvZiBuZWdvdGlhdGlvbiBhcmUgYXMgZm9sbG93czoKLQotIC0gR3N0Q2FwcyAoc2VlIHBhcnQtY2Fwcy50eHQpIGFyZSByZWZjb3VudGVkIGJlZm9yZSB0aGV5IGFyZSBwdXNoZWQgYXMKLSAgIGFuIGV2ZW50IHRvIGRlc2NyaWJlIHRoZSBjb250ZW50cyBvZiB0aGUgZm9sbG93aW5nIGJ1ZmZlci4KLQotIC0gQW4gZWxlbWVudCBzaG91bGQgcmVjb25maWd1cmUgaXRzZWxmIHRvIHRoZSBuZXcgZm9ybWF0IHJlY2VpdmVkIGFzIGEgQ0FQUwotICAgZXZlbnQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGZvbGxvd2luZyBidWZmZXJzLiBJZiB0aGUgZGF0YSB0eXBlIGluIHRoZQotICAgY2FwcyBldmVudCBpcyBub3QgYWNjZXB0YWJsZSwgdGhlIGVsZW1lbnQgc2hvdWxkIHJlZnVzZSB0aGUgZXZlbnQuIFRoZQotICAgZWxlbWVudCBzaG91bGQgYWxzbyByZWZ1c2UgdGhlIG5leHQgYnVmZmVycyBieSByZXR1cm5pbmcgYW4gYXBwcm9wcmlhdGUKLSAgIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBjaGFpbiBmdW5jdGlvbi4KLQotIC0gRG93bnN0cmVhbSBlbGVtZW50cyBjYW4gcmVxdWVzdCBhIGZvcm1hdCBjaGFuZ2Ugb2YgdGhlIHN0cmVhbSBieSBzZW5kaW5nIGEKLSAgIFJFQ09ORklHVVJFIGV2ZW50IHVwc3RyZWFtLiBVcHN0cmVhbSBlbGVtZW50cyB3aWxsIHJlbmVnb3RpYXRlIGEgbmV3IGZvcm1hdAotICAgd2hlbiB0aGV5IHJlY2VpdmUgYSBSRUNPTkZJR1VSRSBldmVudC4KLQotVGhlIGdlbmVyYWwgZmxvdyBmb3IgYSBzb3VyY2UgcGFkIHN0YXJ0aW5nIHRoZSBuZWdvdGlhdGlvbi4KLQotICAgICAgICAgICAgIHNyYyAgICAgICAgICAgICAgc2luawotICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgIHwgIHF1ZXJ5Y2Fwcz8gICAgIHwKLSAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0+fAotICAgICAgICAgICAgICB8ICAgICBjYXBzICAgICAgICB8Ci0gc2VsZWN0IGNhcHMgIHw8IC0gLSAtIC0gLSAtIC0gLXwKLSBmcm9tIHRoZSAgICAgfCAgICAgICAgICAgICAgICAgfAotIGNhbmRpZGF0ZXMgICB8ICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwtLgotICAgICAgICAgICAgICB8ICBhY2NlcHRzPyAgICAgICB8IHwKLSAgdHlwZSBBICAgICAgfC0tLS0tLS0tLS0tLS0tLS0+fCB8IG9wdGlvbmFsCi0gICAgICAgICAgICAgIHwgICAgICB5ZXMgICAgICAgIHwgfAotICAgICAgICAgICAgICB8PCAtIC0gLSAtIC0gLSAtIC18IHwKLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfC0nCi0gICAgICAgICAgICAgIHwgIHNlbmRfZXZlbnQoKSAgIHwKLSBzZW5kIENBUFMgICAgfC0tLS0tLS0tLS0tLS0tLS0+fCBSZWNlaXZlIHR5cGUgQSwgcmVjb25maWd1cmUgdG8KLSBldmVudCBBICAgICAgfCAgICAgICAgICAgICAgICAgfCBwcm9jZXNzIHR5cGUgQS4KLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICB8ICBwdXNoICAgICAgICAgICB8Ci0gcHVzaCBidWZmZXIgIHwtLS0tLS0tLS0tLS0tLS0tPnwgUHJvY2VzcyBidWZmZXIgb2YgdHlwZSBBCi0gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKLQotIE9uZSBwb3NzaWJsZSBpbXBsZW1lbnRhdGlvbiBpbiBwc2V1ZG8gY29kZToKLQotIFtlbGVtZW50IHdhbnRzIHRvIGNyZWF0ZSBhIGJ1ZmZlcl0KLSBpZiBub3QgZm9ybWF0Ci0gICAjIHNlZSB3aGF0IHdlIGNhbiBkbwotICAgb3VyY2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAoc3JjcGFkKQotICAgIyBzZWUgd2hhdCB0aGUgcGVlciBjYW4gZG8gZmlsdGVyZWQgYWdhaW5zdCBvdXIgY2FwcwotICAgY2FuZGlkYXRlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChzcmNwYWQsIG91cmNhcHMpCi0KLSAgIGZvcmVhY2ggY2FuZGlkYXRlIGluIGNhbmRpZGF0ZXMKLSAgICAgIyBtYWtlIHN1cmUgdGhlIGNhcHMgaXMgZml4ZWQKLSAgICAgZml4ZWRjYXBzID0gZ3N0X3BhZF9maXhhdGVfY2FwcyAoc3JjcGFkLCBjYW5kaWRhdGUpCi0KLSAgICAgIyBzZWUgaWYgdGhlIHBlZXIgYWNjZXB0cyBpdAotICAgICBpZiBnc3RfcGFkX3BlZXJfYWNjZXB0X2NhcHMgKHNyY3BhZCwgZml4ZWRjYXBzKQotICAgICAgICMgc3RvcmUgdGhlIGNhcHMgYXMgdGhlIG5lZ290aWF0ZWQgY2FwcywgdGhpcyB3aWxsCi0gICAgICAgIyBjYWxsIHRoZSBzZXRjYXBzIGZ1bmN0aW9uIG9uIHRoZSBwYWQKLSAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChmaXhlZGNhcHMpKQotICAgICAgIGJyZWFrCi0gICAgIGVuZGlmCi0gICBkb25lCi0gZW5kaWYKLQotICNuZWdvdGlhdGUgYWxsb2NhdG9yL2J1ZmZlcnBvb2wgd2l0aCB0aGUgQUxMT0NBVElPTiBxdWVyeQotCi0gYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemUsIDApOwotICMgZmlsbCBidWZmZXIgYW5kIHB1c2gKLQotCi1UaGUgZ2VuZXJhbCBmbG93IGZvciBhIHNpbmsgcGFkIHN0YXJ0aW5nIGEgcmVuZWdvdGlhdGlvbi4KLQotICAgICAgICAgICAgIHNyYyAgICAgICAgICAgICAgc2luawotICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgIHwgIGFjY2VwdHM/ICAgICAgIHwKLSAgICAgICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tfCB0eXBlIEIKLSAgICAgICAgICAgICAgfCAgICAgIHllcyAgICAgICAgfAotICAgICAgICAgICAgICB8LSAtIC0gLSAtIC0gLSAtID58LS4KLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB8IHN1Z2dlc3QgQiBjYXBzIG5leHQKLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfDwnCi0gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgfCAgIHB1c2hfZXZlbnQoKSAgfAotICBtYXJrICAgICAgLi18PC0tLS0tLS0tLS0tLS0tLS18IHNlbmQgUkVDT05GSUdVUkUgZXZlbnQKLSByZW5lZ290aWF0ZXwgfCAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgJz58ICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgIHwgIHF1ZXJ5Y2FwcygpICAgIHwKLSByZW5lZ290aWF0ZSAgfC0tLS0tLS0tLS0tLS0tLS0+fCAKLSAgICAgICAgICAgICAgfCAgc3VnZ2VzdCBCICAgICAgfAotICAgICAgICAgICAgICB8PCAtIC0gLSAtIC0gLSAtIC18Ci0gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgfCAgc2VuZF9ldmVudCgpICAgfAotIHNlbmQgQ0FQUyAgICB8LS0tLS0tLS0tLS0tLS0tLT58IFJlY2VpdmUgdHlwZSBCLCByZWNvbmZpZ3VyZSB0bwotIGV2ZW50IEIgICAgICB8ICAgICAgICAgICAgICAgICB8IHByb2Nlc3MgdHlwZSBCLgotICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgIHwgIHB1c2ggICAgICAgICAgIHwKLSBwdXNoIGJ1ZmZlciAgfC0tLS0tLS0tLS0tLS0tLS0+fCBQcm9jZXNzIGJ1ZmZlciBvZiB0eXBlIEIKLSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAotCi0KLVVzZSBjYXNlOgotCi0KLXZpZGVvdGVzdHNyYyAhIHh2aW1hZ2VzaW5rCi0KLSAgMSkgV2hvIGRlY2lkZXMgd2hhdCBmb3JtYXQgdG8gdXNlPwotICAgLSBzcmMgcGFkIGFsd2F5cyBkZWNpZGVzLCBieSBjb252ZW50aW9uLiBzaW5rcGFkIGNhbiBzdWdnZXN0IGEgZm9ybWF0Ci0gICAgIGJ5IHB1dHRpbmcgaXQgaGlnaCBpbiB0aGUgY2FwcyBxdWVyeSByZXN1bHQgR3N0Q2Fwcy4gCi0gICAtIHNpbmNlIHRoZSBzcmMgZGVjaWRlcywgaXQgY2FuIGFsd2F5cyBjaG9vc2Ugc29tZXRoaW5nIHRoYXQgaXQgY2FuIGRvLAotICAgICBzbyB0aGlzIHN0ZXAgY2FuIG9ubHkgZmFpbCBpZiB0aGUgc2lua3BhZCBzdGF0ZWQgaXQgY291bGQgYWNjZXB0Ci0gICAgIHNvbWV0aGluZyB3aGlsZSBsYXRlciBvbiBpdCBjb3VsZG4ndC4KLQotICAyKSBXaGVuIGRvZXMgbmVnb3RpYXRpb24gaGFwcGVuPwotICAgLSBiZWZvcmUgc3JjcGFkIGRvZXMgYSBwdXNoLCBpdCBmaWd1cmVzIG91dCBhIHR5cGUgYXMgc3RhdGVkIGluIDEpLCB0aGVuIAotICAgICBpdCBwdXNoZXMgYSBjYXBzIGV2ZW50IHdpdGggdGhlIHR5cGUuIFRoZSBzaW5rIGNoZWNrcyB0aGUgbWVkaWEgdHlwZSBhbmQKLSAgICAgY29uZmlndXJlcyBpdHNlbGYgZm9yIHRoaXMgdHlwZS4KLSAgIC0gdGhlIHNvdXJjZSB0aGVuIHVzdWFsbHkgZG9lcyBhbiBBTExPQ0FUSU9OIHF1ZXJ5IHRvIG5lZ290aWF0ZSBhIGJ1ZmZlcnBvb2wKLSAgICAgd2l0aCB0aGUgc2luay4gSXQgdGhlbiBhbGxvY2F0ZXMgYSBidWZmZXIgZnJvbSB0aGUgcG9vbCBhbmQgcHVzaGVzIGl0IHRvCi0gICAgIHRoZSBzaW5rLiBzaW5jZSB0aGUgc2luayBhY2NlcHRlZCB0aGUgY2FwcywgaXQgY2FuIGNyZWF0ZSBhIHBvb2wgZm9yIHRoZQotICAgICBmb3JtYXQuCi0gICAtIHNpbmNlIHRoZSBzaW5rIHN0YXRlZCBpbiAxKSBpdCBjb3VsZCBhY2NlcHQgdGhlIHR5cGUsIGl0IHdpbGwgYmUgYWJsZSB0bwotICAgICBoYW5kbGUgaXQuCi0gICAgIAotICAzKSBIb3cgY2FuIHNpbmsgcmVxdWVzdCBhbm90aGVyIGZvcm1hdD8KLSAgIC0gc2luayBhc2tzIGlmIG5ldyBmb3JtYXQgaXMgcG9zc2libGUgZm9yIHRoZSBzb3VyY2UuCi0gICAtIHNpbmsgcHVzaGVzIFJFQ09ORklHVVJFIGV2ZW50IHVwc3RyZWFtCi0gICAtIHNyYyByZWNlaXZlcyB0aGUgUkVDT05GSUdVUkUgZXZlbnQgYW5kIG1hcmtzIHJlbmVnb3RpYXRpb24KLSAgIC0gT24gdGhlIG5leHQgYnVmZmVyIHB1c2gsIHRoZSBzb3VyY2UgcmVuZWdvdGlhdGVzIHRoZSBjYXBzIGFuZCB0aGUKLSAgICAgYnVmZmVycG9vbC4gVGhlIHNpbmsgd2lsbCBwdXQgdGhlIG5ldyBuZXcgcHJlZmVycmVkIGZvcm1hdCBoaWdoIGluIHRoZSBsaXN0Ci0gICAgIG9mIGNhcHMgaXQgcmV0dXJucyBmcm9tIGl0cyBjYXBzIHF1ZXJ5LgotCi12aWRlb3Rlc3RzcmMgISBxdWV1ZSAhIHh2aW1hZ2VzaW5rCi0KLSAgLSBxdWV1ZSBwcm94aWVzIGFsbCBhY2NlcHQgYW5kIGNhcHMgcXVlcmllcyB0byB0aGUgb3RoZXIgcGVlciBwYWQuCi0gIC0gcXVldWUgcHJveGllcyB0aGUgYnVmZmVycG9vbAotICAtIHF1ZXVlIHByb3hpZXMgdGhlIFJFQ09ORklHVVJFIGV2ZW50Ci0gIC0gcXVldWUgc3RvcmVzIENBUFMgZXZlbnQgaW4gdGhlIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHF1ZXVlIGNhbiBjb250YWluCi0gICAgYnVmZmVycyB3aXRoIGRpZmZlcmVudCB0eXBlcy4KLQotICAgCi1QdWxsLW1vZGUgbmVnb3RpYXRpb24KLX5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1SYXRpb25hbGUKLV5eXl5eXl5eXgotCi1BIHBpcGVsaW5lIGluIHB1bGwgbW9kZSBoYXMgZGlmZmVyZW50IG5lZ290aWF0aW9uIG5lZWRzIHRoYW4gb25lCi1hY3RpdmF0ZWQgaW4gcHVzaCBtb2RlLiBQdXNoIG1vZGUgaXMgb3B0aW1pemVkIGZvciB0d28gdXNlIGNhc2VzOgotCi0gKiBQbGF5YmFjayBvZiBtZWRpYSBmaWxlcywgaW4gd2hpY2ggdGhlIGRlbXV4ZXJzIGFuZCB0aGUgZGVjb2RlcnMgYXJlCi0gICB0aGUgcG9pbnRzIGZyb20gd2hpY2ggZm9ybWF0IGluZm9ybWF0aW9uIHNob3VsZCBkaXNzZW1pbmF0ZSB0byB0aGUKLSAgIHJlc3Qgb2YgdGhlIHBpcGVsaW5lOyBhbmQKLQotICogUmVjb3JkaW5nIGZyb20gbGl2ZSBzb3VyY2VzLCBpbiB3aGljaCB1c2VycyBhcmUgYWNjdXN0b21lZCB0byBwdXR0aW5nCi0gICBhIGNhcHNmaWx0ZXIgZGlyZWN0bHkgYWZ0ZXIgdGhlIHNvdXJjZSBlbGVtZW50OyB0aHVzIHRoZSBjYXBzCi0gICBpbmZvcm1hdGlvbiBmbG93IHByb2NlZWRzIGZyb20gdGhlIHVzZXIsIHRocm91Z2ggdGhlIHBvdGVudGlhbCBjYXBzCi0gICBvZiB0aGUgc291cmNlLCB0byB0aGUgc2lua3Mgb2YgdGhlIHBpcGVsaW5lLgotCi1JbiBjb250cmFzdCwgcHVsbCBtb2RlIGhhcyBvdGhlciB0eXBpY2FsIHVzZSBjYXNlczoKLQotICogUGxheWJhY2sgZnJvbSBhIGxvc3N5IHNvdXJjZSwgc3VjaCBhcyBSVFAsIGluIHdoaWNoIG1vcmUga25vd2xlZGdlCi0gICBhYm91dCB0aGUgbGF0ZW5jeSBvZiB0aGUgcGlwZWxpbmUgY2FuIGluY3JlYXNlIHF1YWxpdHk7IG9yCi0KLSAqIEF1ZGlvIHN5bnRoZXNpcywgaW4gd2hpY2ggYXVkaW8gQVBJcyBhcmUgdHVuZWQgdG8gcHJvZHVjZSBvbmx5IHRoZQotICAgbmVjZXNzYXJ5IG51bWJlciBvZiBzYW1wbGVzLCB0eXBpY2FsbHkgZHJpdmVuIGJ5IGEgaGFyZHdhcmUgaW50ZXJydXB0Ci0gICB0byBmaWxsIGEgRE1BIGJ1ZmZlciBvciBhIEphY2tbMF0gcG9ydCBidWZmZXIuCi0KLSAqIExvdy1sYXRlbmN5IGVmZmVjdHMgcHJvY2Vzc2luZywgd2hlcmVieSBmaWx0ZXJzIHNob3VsZCBiZSBhcHBsaWVkIGFzCi0gICBkYXRhIGlzIHRyYW5zZmVycmVkIGZyb20gYSByaW5nIGJ1ZmZlciB0byBhIHNpbmsgaW5zdGVhZCBvZgotICAgYmVmb3JlaGFuZC4gRm9yIGV4YW1wbGUsIGluc3RlYWQgb2YgdXNpbmcgdGhlIGludGVybmFsIGFsc2FzaW5rCi0gICByaW5nYnVmZmVyIHRocmVhZCBpbiBwdXNoLW1vZGUgd2F2c3JjICEgdm9sdW1lICEgYWxzYXNpbmssIHBsYWNpbmcKLSAgIHRoZSB2b2x1bWUgaW5zaWRlIHRoZSBzb3VuZCBjYXJkIHdyaXRlciB0aHJlYWQgdmlhIHdhdnNyYyAhCi0gICBhdWRpb3JpbmdidWZmZXIgISB2b2x1bWUgISBhbHNhc2luay4KLQotWzBdIGh0dHA6Ly9qYWNraXQuc2YubmV0Ci0KLVRoZSBwcm9ibGVtIHdpdGggcHVsbCBtb2RlIGlzIHRoYXQgdGhlIHNpbmsgaGFzIHRvIGtub3cgdGhlIGZvcm1hdCBpbgotb3JkZXIgdG8ga25vdyBob3cgbWFueSBieXRlcyB0byBwdWxsIHZpYSBnc3RfcGFkX3B1bGxfcmFuZ2UoKS4gVGhpcwotbWVhbnMgdGhhdCBiZWZvcmUgcHVsbGluZywgdGhlIHNpbmsgbXVzdCBpbml0aWF0ZSBuZWdvdGF0aW9uIHRvIGRlY2lkZQotb24gYSBmb3JtYXQuCi0KLVJlY2FsbGluZyB0aGUgcHJpbmNpcGxlcyBvZiBjYXBzbmVnbywgd2hlcmVieSBpbmZvcm1hdGlvbiBtdXN0IGZsb3cgZnJvbQotdGhvc2UgdGhhdCBoYXZlIGl0IHRvIHRob3NlIHRoYXQgZG8gbm90LCB3ZSBzZWUgdGhhdCB0aGUgdGhyZWUgbmFtZWQgdXNlCi1jYXNlcyBoYXZlIGRpZmZlcmVudCBuZWdvdGlhdGlvbiByZXF1aXJlbWVudHM6Ci0KLSAqIFJUUCBhbmQgbG93LWxhdGVuY3kgcGxheWJhY2sgYXJlIGJvdGggbGlrZSB0aGUgbm9ybWFsIHBsYXliYWNrIGNhc2UsCi0gICBpbiB3aGljaCBpbmZvcm1hdGlvbiBmbG93cyBkb3duc3RyZWFtLgotCi0gKiBJbiBhdWRpbyBzeW50aGVzaXMsIHRoZSBwYXJ0IG9mIHRoZSBwaXBlbGluZSB0aGF0IGhhcyB0aGUgbW9zdAotICAgaW5mb3JtYXRpb24gaXMgdGhlIHNpbmssIGNvbnN0cmFpbmVkIGJ5IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGdyYXBoCi0gICB0aGF0IGZlZWRzIGl0LiBIb3dldmVyIHRoZSBjYXBzIGFyZSBub3QgY29tcGxldGVseSBzcGVjaWZpZWQ7IGF0IHNvbWUKLSAgIHBvaW50IHRoZSB1c2VyIGhhcyB0byBpbnRlcnZlbmUgdG8gY2hvb3NlIHRoZSBzYW1wbGUgcmF0ZSwgYXQgbGVhc3QuCi0gICBUaGlzIGNhbiBiZSBkb25lIGV4dGVybmFsbHkgdG8gZ3N0cmVhbWVyLCBhcyBpbiB0aGUgamFjayBlbGVtZW50cywgb3IKLSAgIGludGVybmFsbHkgdmlhIGEgY2Fwc2ZpbHRlciwgYXMgaXMgY3VzdG9tYXJ5IHdpdGggbGl2ZSBzb3VyY2VzLgotCi1HaXZlbiB0aGF0IHNpbmtzIHBvdGVudGlhbGx5IG5lZWQgdGhlIGlucHV0IG9mIHNvdXJjZXMsIGFzIGluIHRoZSBSVFAKLWNhc2UgYW5kIGF0IGxlYXN0IGFzIGEgZmlsdGVyIGluIHRoZSBzeW50aGVzaXMgY2FzZSwgdGhlcmUgbXVzdCBiZSBhCi1uZWdvdGlhdGlvbiBwaGFzZSBiZWZvcmUgdGhlIHB1bGwgdGhyZWFkIGlzIGFjdGl2YXRlZC4gQWxzbywgZ2l2ZW4gdGhlCi1sb3cgbGF0ZW5jeSBvZmZlcmVkIGJ5IHB1bGwgbW9kZSwgd2Ugd2FudCB0byBhdm9pZCBjYXBzbmVnbyBmcm9tIHdpdGhpbgotdGhlIHB1bGxpbmcgdGhyZWFkLCBpbiBjYXNlIGl0IGNhdXNlcyB1cyB0byBtaXNzIG91ciBzY2hlZHVsaW5nCi1kZWFkbGluZXMuCi0KLVRoZSBwdWxsIHRocmVhZCBpcyB1c3VhbGx5IHN0YXJ0ZWQgaW4gdGhlIFBBVVNFRC0+UExBWUlORyBzdGF0ZSBjaGFuZ2UuIFdlIG11c3QKLWJlIGFibGUgdG8gY29tcGxldGUgdGhlIG5lZ290aWF0aW9uIGJlZm9yZSB0aGlzIHN0YXRlIGNoYW5nZSBoYXBwZW5zLgotCi1UaGUgdGltZSB0byBkbyBjYXBzbmVnbywgdGhlbiwgaXMgYWZ0ZXIgdGhlIFNDSEVEVUxJTkcgcXVlcnkgaGFzIHN1Y2NlZWRlZCwKLWJ1dCBiZWZvcmUgdGhlIHNpbmsgaGFzIHNwYXduZWQgdGhlIHB1bGxpbmcgdGhyZWFkLgotCi0KLU1lY2hhbmlzbQotXl5eXl5eXl5eCi0KLVRoZSBzaW5rIGRldGVybWluZXMgdGhhdCB0aGUgdXBzdHJlYW0gZWxlbWVudHMgc3VwcG9ydCBwdWxsIGJhc2VkIHNjaGVkdWxpbmcgYnkKLWRvaW5nIGEgU0NIRURVTElORyBxdWVyeS4KLQotVGhlIHNpbmsgaW5pdGlhdGVzIHRoZSBuZWdvdGlhdGlvbiBwcm9jZXNzIGJ5IGludGVyc2VjdGluZyB0aGUgcmVzdWx0cwotb2YgZ3N0X3BhZF9xdWVyeV9jYXBzKCkgb24gaXRzIHNpbmsgcGFkIGFuZCBpdHMgcGVlciBzcmMgcGFkLiBUaGlzIGlzIHRoZQotb3BlcmF0aW9uIHBlcmZvcm1lZCBieSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMoKS4gSW4gdGhlIHNpbXBsZQotcGFzc3Rocm91Z2ggY2FzZSwgdGhlIHBlZXIgcGFkJ3MgY2FwcyBxdWVyeSBzaG91bGQgcmV0dXJuIHRoZQotaW50ZXJzZWN0aW9uIG9mIGNhbGxpbmcgZ2V0X2FsbG93ZWRfY2FwcygpIG9uIGFsbCBvZiBpdHMgc2luayBwYWRzLiBJbgotdGhpcyB3YXkgdGhlIHNpbmsgZWxlbWVudCBrbm93cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBlbnRpcmUgcGlwZWxpbmUuCi0KLVRoZSBzaW5rIGVsZW1lbnQgdGhlbiBmaXhhdGVzIHRoZSByZXN1bHRpbmcgY2FwcywgaWYgbmVjZXNzYXJ5LAotcmVzdWx0aW5nIGluIHRoZSBmbG93IGNhcHMuICBGcm9tIG5vdyBvbiwgdGhlIGNhcHMgcXVlcnkgb2YgdGhlIHNpbmtwYWQKLXdpbGwgb25seSByZXR1cm4gdGhlc2UgZml4ZWQgY2FwcyBtZWFuaW5nIHRoYXQgdXBzdHJlYW0gZWxlbWVudHMKLXdpbGwgb25seSBiZSBhYmxlIHRvIHByb2R1Y2UgdGhpcyBmb3JtYXQuCi0KLUlmIHRoZSBzaW5rIGVsZW1lbnQgY291bGQgbm90IHNldCBjYXBzIG9uIGl0cyBzaW5rIHBhZCwgaXQgc2hvdWxkIHBvc3QKLWFuIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGJ1cyBpbmRpY2F0aW5nIHRoYXQgbmVnb3RpYXRpb24gd2FzIG5vdAotcG9zc2libGUuCi0KLVdoZW4gbmVnb3RpYXRpb24gc3VjY2VlZGVkLCB0aGUgc2lua3BhZCBhbmQgYWxsIHVwc3RyZWFtIGludGVybmFsbHkgbGlua2VkIHBhZHMKLWFyZSBhY3RpdmF0ZWQgaW4gcHVsbCBtb2RlLiBUeXBpY2FsbHksIHRoaXMgb3BlcmF0aW9uIHdpbGwgdHJpZ2dlciBuZWdvdGlhdGlvbgotb24gdGhlIGRvd25zdHJlYW0gZWxlbWVudHMsIHdoaWNoIHdpbGwgbm93IGJlIGZvcmNlZCB0byBuZWdvdGlhdGUgdG8gdGhlCi1maW5hbCBmaXhlZCBkZXNpcmVkIGNhcHMgb2YgdGhlIHNpbmtwYWQuCi0KLUFmdGVyIHRoZXNlIHN0ZXBzLCB0aGUgc2luayBlbGVtZW50IHJldHVybnMgQVNZTkMgZnJvbSB0aGUgc3RhdGUgY2hhbmdlCi1mdW5jdGlvbi4gVGhlIHN0YXRlIHdpbGwgY29tbWl0IHRvIFBBVVNFRCB3aGVuIHRoZSBmaXJzdCBidWZmZXIgaXMgcmVjZWl2ZWQgaW4KLXRoZSBzaW5rLiBUaGlzIGlzIG5lZWRlZCB0byBwcm92aWRlIGEgY29uc2lzdGVudCBBUEkgdG8gdGhlIGFwcGxpY2F0aW9ucyB0aGF0Ci1leHBlY3QgQVNZTkMgcmV0dXJuIHZhbHVlcyBmcm9tIHNpbmtzIGJ1dCBpdCBhbHNvIGFsbG93cyB1cyB0byBwZXJmb3JtIHRoZQotcmVtYWluZGVyIG9mIHRoZSBuZWdvdGlhdGlvbiBvdXRzaWRlIG9mIHRoZSBjb250ZXh0IG9mIHRoZSBwdWxsaW5nIHRocmVhZC4KLQotCi1QYXR0ZXJucwotfn5+fn5+fn4KLQotV2UgY2FuIGlkZW50aWZ5IDMgcGF0dGVybnMgaW4gbmVnb3RpYXRpb246Ci0KLSAxKSBGaXhlZMKgOiBDYW4ndCBjaG9vc2UgdGhlIG91dHB1dCBmb3JtYXQKLSAgICAgIC0gQ2FwcyBlbmNvZGVkIGluIHRoZSBzdHJlYW0KLSAgICAgIC0gQSB2aWRlby9hdWRpbyBkZWNvZGVyCi0gICAgICAtIHVzdWFsbHkgdXNlcyBnc3RfcGFkX3VzZV9maXhlZF9jYXBzKCkKLQotIDIpIFRyYW5zZm9ybQotICAgICAgLSBDYXBzIG5vdCBtb2RpZmllZCAocGFzc3Rocm91Z2gpCi0gICAgICAtIGNhbiBkbyBjYXBzIHRyYW5zZm9ybSBiYXNlZCBvbiBlbGVtZW50IHByb3BlcnR5Ci0gICAgICAtIGZpeGVkIGNhcHMgZ2V0IHRyYW5zZm9ybWVkIGludG8gZml4ZWQgY2FwcwotICAgICAgLSB2aWRlb2JveAotCi0gMykgRHluYW1pY8KgOiBjYW4gY2hvb3NlIG91dHB1dCBmb3JtYXQgCi0gICAgICAtIEEgY29udmVydGVyIGVsZW1lbnQKLSAgICAgIC0gZGVwZW5kcyBvbiBkb3duc3RyZWFtIGNhcHMsIG5lZWRzIHRvIGRvIGEgQ0FQUyBxdWVyeSB0byBmaW5kCi0gICAgICAgIHRyYW5zZm9ybS4KLSAgICAgIC0gdXN1YWxseSBwcmVmZXJzIHRvIHVzZSB0aGUgaWRlbnRpdHkgdHJhbnNmb3JtCi0gICAgICAtIGZpeGVkIGNhcHMgY2FuIGJlIHRyYW5zZm9ybWVkIGludG8gdW5maXhlZCBjYXBzLgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1vdmVydmlldy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFkZDFmNi4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LW92ZXJ2aWV3LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDU0MSArMCwwIEBACi1PdmVydmlldwotLS0tLS0tLS0KLQotVGhpcyBwYXJ0IGdpdmVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24gb2YgR1N0cmVhbWVyIHdpdGggcmVmZXJlbmNlcyB0bwotdGhlIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb25zIG9mIHRoZSBkaWZmZXJlbnQgdG9waWNzLgotCi1UaGlzIGRvY3VtZW50IGlzIGludGVudGVkIGZvciBwZW9wbGUgdGhhdCB3YW50IHRvIGhhdmUgYSBnbG9iYWwgb3ZlcnZpZXcgb2YKLXRoZSBpbm5lciB3b3JraW5ncyBvZiBHU3RyZWFtZXIuCi0KLQotSW50cm9kdWN0aW9uCi1+fn5+fn5+fn5+fn4KLQotR1N0cmVhbWVyIGlzIGEgc2V0IG9mIGxpYnJhcmllcyBhbmQgcGx1Z2lucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCB2YXJpb3VzCi1tdWx0aW1lZGlhIGFwcGxpY2F0aW9ucyByYW5naW5nIGZyb20gZGVza3RvcCBwbGF5ZXJzLCBhdWRpby92aWRlbyByZWNvcmRlcnMsIAotbXVsdGltZWRpYSBzZXJ2ZXJzLCB0cmFuc2NvZGVycywgZXRjLiAKLQotQXBwbGljYXRpb25zIGFyZSBidWlsdCBieSBjb25zdHJ1Y3RpbmcgYSBwaXBlbGluZSBjb21wb3NlZCBvZiBlbGVtZW50cy4gQW4gZWxlbWVudAotaXMgYW4gb2JqZWN0IHRoYXQgcGVyZm9ybXMgc29tZSBhY3Rpb24gb24gYSBtdWx0aW1lZGlhIHN0cmVhbSBzdWNoIGFzOgotCi0tIHJlYWQgYSBmaWxlCi0tIGRlY29kZSBvciBlbmNvZGUgYmV0d2VlbiBmb3JtYXRzCi0tIGNhcHR1cmUgZnJvbSBhIGhhcmR3YXJlIGRldmljZQotLSByZW5kZXIgdG8gYSBoYXJkd2FyZSBkZXZpY2UKLS0gbWl4IG9yIG11bHRpcGxleCBtdWx0aXBsZSBzdHJlYW1zCi0KLUVsZW1lbnRzIGhhdmUgaW5wdXQgYW5kIG91dHB1dCBwYWRzIGNhbGxlZCBzaW5rIGFuZCBzb3VyY2UgcGFkcyBpbiBHU3RyZWFtZXIuIEFuCi1hcHBsaWNhdGlvbiBsaW5rcyBlbGVtZW50cyB0b2dldGhlciBvbiBwYWRzIHRvIGNvbnN0cnVjdCBhIHBpcGVsaW5lLiBCZWxvdyBpcwotYW4gZXhhbXBsZSBvZiBhbiBvZ2cvdm9yYmlzIHBsYXliYWNrIHBpcGVsaW5lLgotCi0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8ICAgIC0tLS0tLS0tLS0+IGRvd25zdHJlYW0gLS0tLS0tLS0tLS0tLS0tLS0tLT4gICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICB8IHBpcGVsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICB8ICstLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyB8Ci0gICB8IHwgZmlsZXNyYyB8ICAgfCBvZ2dkZW11eCB8ICAgfCB2b3JiaXNkZWMgfCAgIHwgYWxzYXNpbmsgfCB8Ci0gICB8IHwgICAgICAgIHNyYy1zaW5rICAgICAgIHNyYy1zaW5rICAgICAgICBzcmMtc2luayAgICAgICAgfCB8Ci0gICB8ICstLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICB8ICAgIDwtLS0tLS0tLS08IHVwc3RyZWFtIDwtLS0tLS0tLS0tLS0tLS0tLS0tPCAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLVRoZSBmaWxlc3JjIGVsZW1lbnQgcmVhZHMgZGF0YSBmcm9tIGEgZmlsZSBvbiBkaXNrLiBUaGUgb2dnZGVtdXggZWxlbWVudCBwYXJzZXMKLXRoZSBkYXRhIGFuZCBzZW5kcyB0aGUgY29tcHJlc3NlZCBhdWRpbyBkYXRhIHRvIHRoZSB2b3JiaXNkZWMgZWxlbWVudC4gVGhlCi12b3JiaXNkZWMgZWxlbWVudCBkZWNvZGVzIHRoZSBjb21wcmVzc2VkIGRhdGEgYW5kIHNlbmRzIGl0IHRvIHRoZSBhbHNhc2luawotZWxlbWVudC4gVGhlIGFsc2FzaW5rIGVsZW1lbnQgc2VuZHMgdGhlIHNhbXBsZXMgdG8gdGhlIGF1ZGlvIGNhcmQgZm9yIHBsYXliYWNrLgotCi1Eb3duc3RyZWFtIGFuZCB1cHN0cmVhbSBhcmUgdGhlIHRlcm1zIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGRpcmVjdGlvbiBpbiB0aGUKLVBpcGVsaW5lLiBGcm9tIHNvdXJjZSB0byBzaW5rIGlzIGNhbGxlZCAiZG93bnN0cmVhbSIgYW5kICJ1cHN0cmVhbSIgaXMgCi1mcm9tIHNpbmsgdG8gc291cmNlLiBEYXRhZmxvdyBhbHdheXMgaGFwcGVucyBkb3duc3RyZWFtLgotCi1UaGUgdGFzayBvZiB0aGUgYXBwbGljYXRpb24gaXMgdG8gY29uc3RydWN0IGEgcGlwZWxpbmUgYXMgYWJvdmUgdXNpbmcgZXhpc3RpbmcKLWVsZW1lbnRzLiBUaGlzIGlzIGZ1cnRoZXIgZXhwbGFpbmVkIGluIHRoZSBwaXBlbGluZSBidWlsZGluZyB0b3BpYy4KLQotVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8gbWFuYWdlIGFueSBvZiB0aGUgY29tcGxleGl0aWVzIG9mIHRoZQotYWN0dWFsIGRhdGFmbG93L2RlY29kaW5nL2NvbnZlcnNpb25zL3N5bmNocm9uaXNhdGlvbiBldGMuIGJ1dCBvbmx5IGNhbGxzIGhpZ2gKLWxldmVsIGZ1bmN0aW9ucyBvbiB0aGUgcGlwZWxpbmUgb2JqZWN0IHN1Y2ggYXMgUExBWS9QQVVTRS9TVE9QLgotCi1UaGUgYXBwbGljYXRpb24gYWxzbyByZWNlaXZlcyBtZXNzYWdlcyBhbmQgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBwaXBlbGluZSBzdWNoCi1hcyBtZXRhZGF0YSwgd2FybmluZywgZXJyb3IgYW5kIEVPUyBtZXNzYWdlcy4KLQotSWYgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIG1vcmUgY29udHJvbCBvdmVyIHRoZSBncmFwaCBpdCBpcyBwb3NzaWJsZSB0byBkaXJlY3RseQotYWNjZXNzIHRoZSBlbGVtZW50cyBhbmQgcGFkcyBpbiB0aGUgcGlwZWxpbmUuCi0KLQotRGVzaWduIG92ZXJ2aWV3Ci1+fn5+fn5+fn5+fn5+fn4KLQotR1N0cmVhbWVyIGRlc2lnbiBnb2FscyBpbmNsdWRlOgotCi0tIFByb2Nlc3MgbGFyZ2UgYW1vdW50cyBvZiBkYXRhIHF1aWNrbHkKLS0gQWxsb3cgZnVsbHkgbXVsdGl0aHJlYWRlZCBwcm9jZXNzaW5nCi0tIEFiaWxpdHkgdG8gZGVhbCB3aXRoIG11bHRpcGxlIGZvcm1hdHMKLS0gU3luY2hyb25pemUgZGlmZmVyZW50IGRhdGFmbG93cyAKLS0gQWJpbGl0eSB0byBkZWFsIHdpdGggbXVsdGlwbGUgZGV2aWNlcwotCi1UaGUgY2FwYWJpbGl0aWVzIHByZXNlbnRlZCB0byB0aGUgYXBwbGljYXRpb24gZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCi1pbnN0YWxsZWQgb24gdGhlIHN5c3RlbSBhbmQgdGhlaXIgZnVuY3Rpb25hbGl0eS4KLQotVGhlIEdTdHJlYW1lciBjb3JlIGlzIGRlc2lnbmVkIHRvIGJlIG1lZGlhIGFnbm9zdGljIGJ1dCBwcm92aWRlcyBtYW55IGZlYXR1cmVzCi10byBlbGVtZW50cyB0byBkZXNjcmliZSBtZWRpYSBmb3JtYXRzLgotCi0KLUVsZW1lbnRzCi1+fn5+fn5+fgotCi1UaGUgc21hbGxlc3QgYnVpbGRpbmcgYmxvY2tzIGluIGEgcGlwZWxpbmUgYXJlIGVsZW1lbnRzLiBBbiBlbGVtZW50IHByb3ZpZGVzIGEKLW51bWJlciBvZiBwYWRzIHdoaWNoIGNhbiBiZSBzb3VyY2Ugb3Igc2lua3BhZHMuIFNvdXJjZXBhZHMgcHJvdmlkZSBkYXRhIGFuZAotc2lua3BhZHMgY29uc3VtZSBkYXRhLiBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIGFuIG9nZyBkZW11eGVyIGVsZW1lbnQgdGhhdCBoYXMKLW9uZSBwYWQgdGhhdCB0YWtlcyAoc2lua3MpIGRhdGEgYW5kIHR3byBzb3VyY2UgcGFkcyB0aGF0IHByb2R1Y2UgZGF0YS4KLQotICAgICstLS0tLS0tLS0tLSsKLSAgICB8IG9nZ2RlbXV4ICB8Ci0gICAgfCAgICAgICAgICBzcmMwCi0gICBzaW5rICAgICAgICBzcmMxCi0gICAgKy0tLS0tLS0tLS0tKwotCi1BbiBlbGVtZW50IGNhbiBiZSBpbiBmb3VyIGRpZmZlcmVudCBzdGF0ZXM6IE5VTEwsIFJFQURZLCBQQVVTRUQsIFBMQVlJTkcuIEluIHRoZQotTlVMTCBhbmQgUkVBRFkgc3RhdGUsIHRoZSBlbGVtZW50IGlzIG5vdCBwcm9jZXNzaW5nIGFueSBkYXRhLiBJbiB0aGUgUExBWUlORyBzdGF0ZQotaXQgaXMgcHJvY2Vzc2luZyBkYXRhLiBUaGUgaW50ZXJtZWRpYXRlIFBBVVNFRCBzdGF0ZSBpcyB1c2VkIHRvIHByZXJvbGwgZGF0YSBpbgotdGhlIHBpcGVsaW5lLiBBIHN0YXRlIGNoYW5nZSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKCkuCi0KLUFuIGVsZW1lbnQgYWx3YXlzIGdvZXMgdGhyb3VnaCBhbGwgdGhlIGludGVybWVkaWF0ZSBzdGF0ZSBjaGFuZ2VzLiBUaGlzIG1lYW5zIHRoYXQKLXdoZW4gZW4gZWxlbWVudCBpcyBpbiB0aGUgUkVBRFkgc3RhdGUgYW5kIGlzIHB1dCB0byBQTEFZSU5HLCBpdCB3aWxsIGZpcnN0IGdvCi10aHJvdWdoIHRoZSBpbnRlcm1lZGlhdGUgUEFVU0VEIHN0YXRlLgotCi1BbiBlbGVtZW50IHN0YXRlIGNoYW5nZSB0byBQQVVTRUQgd2lsbCBhY3RpdmF0ZSB0aGUgcGFkcyBvZiB0aGUgZWxlbWVudC4gRmlyc3QgdGhlCi1zb3VyY2UgcGFkcyBhcmUgYWN0aXZhdGVkLCB0aGVuIHRoZSBzaW5rcGFkcy4gV2hlbiB0aGUgcGFkcyBhcmUgYWN0aXZhdGVkLCB0aGUKLXBhZCBhY3RpdmF0ZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFNvbWUgcGFkcyB3aWxsIHN0YXJ0IGEgdGhyZWFkIChHc3RUYXNrKSBvciBzb21lIAotb3RoZXIgbWVjaGFuaXNtIHRvIHN0YXJ0IHByb2R1Y2luZyBvciBjb25zdW1pbmcgZGF0YS4KLQotVGhlIFBBVVNFRCBzdGF0ZSBpcyBzcGVjaWFsIGFzIGl0IGlzIHVzZWQgdG8gcHJlcm9sbCBkYXRhIGluIHRoZSBwaXBlbGluZS4gVGhlIHB1cnBvc2UKLWlzIHRvIGZpbGwgYWxsIGNvbm5lY3RlZCBlbGVtZW50cyBpbiB0aGUgcGlwZWxpbmUgd2l0aCBkYXRhIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQKLVBMQVlJTkcgc3RhdGUgY2hhbmdlIGhhcHBlbnMgdmVyeSBxdWlja2x5LiBTb21lIGVsZW1lbnRzIHdpbGwgdGhlcmVmb3JlIG5vdCBjb21wbGV0ZQotdGhlIHN0YXRlIGNoYW5nZSB0byBQQVVTRUQgYmVmb3JlIHRoZXkgaGF2ZSByZWNlaXZlZCBlbm91Z2ggZGF0YS4gU2luayBlbGVtZW50cyBhcmUKLXJlcXVpcmVkIHRvIG9ubHkgY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZSB0byBQQVVTRUQgYWZ0ZXIgcmVjZWl2aW5nIHRoZSBmaXJzdCBkYXRhLgotCi1Ob3JtYWxseSB0aGUgc3RhdGUgY2hhbmdlcyBvZiBlbGVtZW50cyBhcmUgY29vcmRpbmF0ZWQgYnkgdGhlIHBpcGVsaW5lIGFzIGV4cGxhaW5lZAotaW4gW3BhcnQtc3RhdGVzLnR4dF0uCi0KLURpZmZlcmVudCBjYXRlZ29yaWVzIG9mIGVsZW1lbnRzIGV4aXN0OgotCi0tIHNvdXJjZSBlbGVtZW50cywgdGhlc2UgYXJlIGVsZW1lbnRzIHRoYXQgZG8gbm90IGNvbnN1bWUgZGF0YSBidXQgb25seSBwcm92aWRlIGRhdGEKLSAgICBmb3IgdGhlIHBpcGVsaW5lLgotLSBzaW5rIGVsZW1lbnRzLCB0aGVzZSBhcmUgZWxlbWVudHMgdGhhdCBkbyBub3QgcHJvZHVjZSBkYXRhIGJ1dCByZW5kZXJzIGRhdGEgdG8KLSAgICBhbiBvdXRwdXQgZGV2aWNlLgotLSB0cmFuc2Zvcm0gZWxlbWVudHMsIHRoZXNlIGVsZW1lbnRzIHRyYW5zZm9ybSBhbiBpbnB1dCBzdHJlYW0gaW4gYSBjZXJ0YWluIGZvcm1hdCAKLSAgIGludG8gYSBzdHJlYW0gb2YgYW5vdGhlciBmb3JtYXQuIEVuY29kZXIvZGVjb2Rlci9jb252ZXJ0ZXJzIGFyZSBleGFtcGxlcy4KLS0gZGVtdXhlciBlbGVtZW50cywgdGhlc2UgZWxlbWVudHMgcGFyc2UgYSBzdHJlYW0gYW5kIHByb2R1Y2Ugc2V2ZXJhbCBvdXRwdXQgc3RyZWFtcy4KLS0gbWl4ZXIvbXV4ZXIgZWxlbWVudHMsIGNvbWJpbmUgc2V2ZXJhbCBpbnB1dCBzdHJlYW1zIGludG8gb25lIG91dHB1dCBzdHJlYW0uCi0KLU90aGVyIGNhdGVnb3JpZXMgb2YgZWxlbWVudHMgY2FuIGJlIGNvbnN0cnVjdGVkIChzZWUgcGFydC1rbGFzcy50eHQpLgotCi0KLUJpbnMKLX5+fn4KLQotQSBiaW4gaXMgYW4gZWxlbWVudCBzdWJjbGFzcyBhbmQgYWN0cyBhcyBhIGNvbnRhaW5lciBmb3Igb3RoZXIgZWxlbWVudHMgc28gdGhhdCBtdWx0aXBsZSAKLWVsZW1lbnRzIGNhbiBiZSBjb21iaW5lZCBpbnRvIG9uZSBlbGVtZW50LgotCi1BIGJpbiBjb29yZGluYXRlcyBpdHMgY2hpbGRyZW4ncyBzdGF0ZSBjaGFuZ2VzIGFzIGV4cGxhaW5lZCBsYXRlci4gSXQgYWxzbyBkaXN0cmlidXRlcwotZXZlbnRzIGFuZCB2YXJpb3VzIG90aGVyIGZ1bmN0aW9uYWxpdHkgdG8gZWxlbWVudHMuCi0KLUEgYmluIGNhbiBoYXZlIGl0cyBvd24gc291cmNlIGFuZCBzaW5rcGFkcyBieSBnaG9zdHBhZGRpbmcgb25lIG9yIG1vcmUgb2YgaXRzIGNoaWxkcmVuJ3MKLXBhZHMgdG8gaXRzZWxmLgotCi1CZWxvdyBpcyBhIHBpY3R1cmUgb2YgYSBiaW4gd2l0aCB0d28gZWxlbWVudHMuIFRoZSBzaW5rcGFkIG9mIG9uZSBlbGVtZW50IGlzIGdob3N0cGFkZGVkCi10byB0aGUgYmluLgotCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgCi0gICAgfCBiaW4gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICB8ICAgICstLS0tLS0tLSsgICArLS0tLS0tLSsgfAotICAgIHwgICAgfCAgICAgICAgfCAgIHwgICAgICAgfCB8Ci0gICAgfCAgL3NpbmsgICAgIHNyYy1zaW5rICAgICB8IHwKLSAgIHNpbmsgICstLS0tLS0tLSsgICArLS0tLS0tLSsgfAotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLQotUGlwZWxpbmUKLX5+fn5+fn5+Ci0KLUEgcGlwZWxpbmUgaXMgYSBzcGVjaWFsIGJpbiBzdWJjbGFzcyB0aGF0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgdG8gaXRzIAotY2hpbGRyZW46Ci0KLSAtIFNlbGVjdCBhbmQgbWFuYWdlIGEgZ2xvYmFsIGNsb2NrIGZvciBhbGwgaXRzIGNoaWxkcmVuLgotIC0gTWFuYWdlIHJ1bm5pbmdfdGltZSBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgY2xvY2suIFJ1bm5pbmdfdGltZSBpcyB0aGUgZWxhcHNlZAotICAgdGltZSB0aGUgcGlwZWxpbmUgc3BlbnQgaW4gdGhlIFBMQVlJTkcgc3RhdGUgYW5kIGlzIHVzZWQgZm9yCi0gICBzeW5jaHJvbmlzYXRpb24uCi0gLSBNYW5hZ2UgbGF0ZW5jeSBpbiB0aGUgcGlwZWxpbmUuCi0gLSBQcm92aWRlIG1lYW5zIGZvciBlbGVtZW50cyB0byBjb211bmljYXRlIHdpdGggdGhlIGFwcGxpY2F0aW9uIGJ5IHRoZSBHc3RCdXMuCi0gLSBNYW5hZ2UgdGhlIGdsb2JhbCBzdGF0ZSBvZiB0aGUgZWxlbWVudHMgc3VjaCBhcyBFcnJvcnMgYW5kIGVuZC1vZi1zdHJlYW0uCi0KLU5vcm1hbGx5IHRoZSBhcHBsaWNhdGlvbiBjcmVhdGVzIG9uZSBwaXBlbGluZSB0aGF0IHdpbGwgbWFuYWdlIGFsbCB0aGUgZWxlbWVudHMKLWluIHRoZSBhcHBsaWNhdGlvbi4KLQotCi1EYXRhZmxvdyBhbmQgYnVmZmVycwotfn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotR1N0cmVhbWVyIHN1cHBvcnRzIHR3byBwb3NzaWJsZSB0eXBlcyBvZiBkYXRhZmxvdywgdGhlIHB1c2ggYW5kIHB1bGwgbW9kZWwuIEluIHRoZQotcHVzaCBtb2RlbCwgYW4gdXBzdHJlYW0gZWxlbWVudCBzZW5kcyBkYXRhIHRvIGEgZG93bnN0cmVhbSBlbGVtZW50IGJ5IGNhbGxpbmcgYQotbWV0aG9kIG9uIGEgc2lua3BhZC4gSW4gdGhlIHB1bGwgbW9kZWwsIGEgZG93bnN0cmVhbSBlbGVtZW50IHJlcXVlc3RzIGRhdGEgZnJvbQotYW4gdXBzdHJlYW0gZWxlbWVudCBieSBjYWxsaW5nIGEgbWV0aG9kIG9uIGEgc291cmNlIHBhZC4KLQotVGhlIG1vc3QgY29tbW9uIGRhdGFmbG93IGlzIHRoZSBwdXNoIG1vZGVsLiBUaGUgcHVsbCBtb2RlbCBjYW4gYmUgdXNlZCBpbiBzcGVjaWZpYwotY2lyY3Vtc3RhbmNlcyBieSBkZW11eGVyIGVsZW1lbnRzLiBUaGUgcHVsbCBtb2RlbCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGxvdyBsYXRlbmN5Ci1hdWRpbyBhcHBsaWNhdGlvbnMuCi0KLVRoZSBkYXRhIHBhc3NlZCBiZXR3ZWVuIHBhZHMgaXMgZW5jYXBzdWxhdGVkIGluIEJ1ZmZlcnMuIFRoZSBidWZmZXIgY29udGFpbnMgCi1wb2ludGVycyB0byB0aGUgYWN0dWFsIG1lbW9yeSBhbmQgYWxzbyBtZXRhZGF0YSBkZXNjcmliaW5nIHRoZSBtZW1vcnkuIFRoaXMgbWV0YWRhdGEKLWluY2x1ZGVzOgotIAotICAtIHRpbWVzdGFtcCBvZiB0aGUgZGF0YSwgdGhpcyBpcyB0aGUgdGltZSBpbnN0YW5jZSBhdCB3aGljaCB0aGUgZGF0YSB3YXMgY2FwdHVyZWQKLSAgICAgIG9yIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBkYXRhIHNob3VsZCBiZSBwbGF5ZWQgYmFjay4KLSAgLSBvZmZzZXQgb2YgdGhlIGRhdGE6IGEgbWVkaWEgc3BlY2lmaWMgb2Zmc2V0LCB0aGlzIGNvdWxkIGJlIHNhbXBsZXMgZm9yIGF1ZGlvIG9yCi0gICAgICBmcmFtZXMgZm9yIHZpZGVvLgotICAtIHRoZSBkdXJhdGlvbiBvZiB0aGUgZGF0YSBpbiB0aW1lLgotICAtIGFkZGl0aW9uYWwgZmxhZ3MgZGVzY3JpYmluZyBzcGVjaWFsIHByb3BlcnRpZXMgb2YgdGhlIGRhdGEgc3VjaCBhcyAKLSAgICBkaXNjb250aW51aXRpZXMgb3IgZGVsdGEgdW5pdHMuCi0gIC0gYWRkaXRpb25hbCBhcmJpdHJhcnkgbWV0YWRhdGEKLQotV2hlbiBhbiBlbGVtZW50IHdoaXNoZXMgdG8gc2VuZCBhIGJ1ZmZlciB0byBhbm90aGVyIGVsZW1lbnQgaXMgZG9lcyB0aGlzIHVzaW5nIG9uZQotb2YgdGhlIHBhZHMgdGhhdCBpcyBsaW5rZWQgdG8gYSBwYWQgb2YgdGhlIG90aGVyIGVsZW1lbnQuIEluIHRoZSBwdXNoIG1vZGVsLCBhIAotYnVmZmVyIGlzIHB1c2hlZCB0byB0aGUgcGVlciBwYWQgd2l0aCBnc3RfcGFkX3B1c2goKS4gSW4gdGhlIHB1bGwgbW9kZWwsIGEgYnVmZmVyCi1pcyBwdWxsZWQgZnJvbSB0aGUgcGVlciB3aXRoIHRoZSBnc3RfcGFkX3B1bGxfcmFuZ2UoKSBmdW5jdGlvbi4KLQotQmVmb3JlIGFuIGVsZW1lbnQgcHVzaGVzIG91dCBhIGJ1ZmZlciwgaXQgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBwZWVyIGVsZW1lbnQKLWNhbiB1bmRlcnN0YW5kIHRoZSBidWZmZXIgY29udGVudHMuICBJdCBkb2VzIHRoaXMgYnkgcXVlcnlpbmcgdGhlIHBlZXIgZWxlbWVudAotZm9yIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cyBhbmQgYnkgc2VsZWN0aW5nIGEgc3VpdGFibGUgY29tbW9uIGZvcm1hdC4gVGhlIHNlbGVjdGVkCi1mb3JtYXQgaXMgdGhlbiBmaXJzdCBzZW50IHRvIHRoZSBwZWVyIGVsZW1lbnQgd2l0aCBhIENBUFMgZXZlbnQgYmVmb3JlIHB1c2hpbmcKLXRoZSBidWZmZXIgKHNlZSBwYXJ0LW5lZ290aWF0aW9uLnR4dCkuCi0KLVdoZW4gYW4gZWxlbWVudCBwYWQgcmVjZWl2ZXMgYSBDQVBTIGV2ZW50LCBpdCBoYXMgdG8gY2hlY2sgaWYgaXQgdW5kZXJzdGFuZCB0aGUKLW1lZGlhIHR5cGUuIFRoZSBlbGVtZW50IG11c3QgcmVmdXNlIGZvbGxvd2luZyBidWZmZXJzIGlmIHRoZSBtZWRpYSB0eXBlCi1wcmVjZWRpbmcgaXQgd2FzIG5vdCBhY2NlcHRlZC4KLQotQm90aCBnc3RfcGFkX3B1c2goKSBhbmQgZ3N0X3BhZF9wdWxsX3JhbmdlKCkgaGF2ZSBhIHJldHVybiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIKLXRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLiBBbiBlcnJvciBjb2RlIG1lYW5zIHRoYXQgbm8gbW9yZSBkYXRhIHNob3VsZCBiZSBzZW50Ci10byB0aGF0IHBhZC4gQSBzb3VyY2UgZWxlbWVudCB0aGF0IGluaXRpYXRlcyB0aGUgZGF0YSBmbG93IGluIGEgdGhyZWFkIHR5cGljYWxseQotcGF1c2VzIHRoZSBwcm9kdWNpbmcgdGhyZWFkIHdoZW4gdGhpcyBoYXBwZW5zLgotCi1BIGJ1ZmZlciBjYW4gYmUgY3JlYXRlZCB3aXRoIGdzdF9idWZmZXJfbmV3KCkgb3IgYnkgcmVxdWVzdGluZyBhIHVzYWJsZSBidWZmZXIKLWZyb20gYSBidWZmZXIgcG9vbCB1c2luZyBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKS4gVXNpbmcgdGhlIHNlY29uZAotbWV0aG9kLCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBlZXIgZWxlbWVudCB0byBpbXBsZW1lbnQgYSBjdXN0b20gYnVmZmVyCi1hbGxvY2F0aW9uIGFsZ29yaXRobS4KLQotVGhlIHByb2Nlc3Mgb2Ygc2VsZWN0aW5nIGEgbWVkaWEgdHlwZSBpcyBjYWxsZWQgY2FwcyBuZWdvdGlhdGlvbi4KLQotCi1DYXBzCi1+fn5+Ci0KLUEgbWVkaWEgdHlwZSAoQ2FwcykgaXMgZGVzY3JpYmVkIHVzaW5nIGEgZ2VuZXJpYyBsaXN0IG9mIGtleS92YWx1ZSBwYWlycy4gVGhlIGtleSBpcwotYSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBjYW4gYmUgYSBzaW5nbGUvbGlzdC9yYW5nZSBvZiBpbnQvZmxvYXQvc3RyaW5nLiAKLQotQ2FwcyB0aGF0IGhhdmUgbm8gcmFuZ2VzL2xpc3Qgb3Igb3RoZXIgdmFyaWFibGUgcGFydHMgYXJlIHNhaWQgdG8gYmUgZml4ZWQgYW5kCi1jYW4gYmUgdXNlZCB0byBwdXQgb24gYSBidWZmZXIuCi0KLUNhcHMgd2l0aCB2YXJpYWJsZXMgaW4gdGhlbSBhcmUgdXNlZCB0byBkZXNjcmliZSBwb3NzaWJsZSBtZWRpYSB0eXBlcyB0aGF0IGNhbiBiZQotaGFuZGxlZCBieSBhIHBhZC4KLQotCi1EYXRhZmxvdyBhbmQgZXZlbnRzCi1+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVBhcmFsbGVsIHRvIHRoZSBkYXRhZmxvdyBpcyBhIGZsb3cgb2YgZXZlbnRzLiBVbmxpa2UgdGhlIGJ1ZmZlcnMsIGV2ZW50cyBjYW4gcGFzcwotYm90aCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbS4gU29tZSBldmVudHMgb25seSB0cmF2ZWwgdXBzdHJlYW0gb3RoZXJzIG9ubHkgZG93bnN0cmVhbS4KLQotVGhlIGV2ZW50cyBhcmUgdXNlZCB0byBkZW5vdGUgc3BlY2lhbCBjb25kaXRpb25zIGluIHRoZSBkYXRhZmxvdyBzdWNoIGFzIEVPUyBvciAKLXRvIGluZm9ybSBwbHVnaW5zIG9mIHNwZWNpYWwgZXZlbnRzIHN1Y2ggYXMgZmx1c2hpbmcgb3Igc2Vla2luZy4KLQotU29tZSBldmVudHMgbXVzdCBiZSBzZXJpYWxpemVkIHdpdGggdGhlIGJ1ZmZlciBmbG93LCBvdGhlcnMgZG9uJ3QuIFNlcmlhbGl6ZWQgCi1ldmVudHMgYXJlIGluc2VydGVkIGJldHdlZW4gdGhlIGJ1ZmZlcnMuIE5vbiBzZXJpYWxpemVkIGV2ZW50cyBqdW1wIGluIGZyb250Ci1vZiBhbnkgYnVmZmVycyBjdXJyZW50IGJlaW5nIHByb2Nlc3NlZC4KLQotQW4gZXhhbXBsZSBvZiBhIHNlcmlhbGl6ZWQgZXZlbnQgaXMgYSBUQUcgZXZlbnQgdGhhdCBpcyBpbnNlcnRlZCBiZXR3ZWVuIGJ1ZmZlcnMKLXRvIG1hcmsgbWV0YWRhdGEgZm9yIHRob3NlIGJ1ZmZlcnMuCi0KLUFuIGV4YW1wbGUgb2YgYSBub24gc2VyaWFsaXplZCBldmVudCBpcyB0aGUgRkxVU0ggZXZlbnQuCi0KLQotUGlwZWxpbmUgY29uc3RydWN0aW9uCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVGhlIGFwcGxpY2F0aW9uIHN0YXJ0cyBieSBjcmVhdGluZyBhIFBpcGVsaW5lIGVsZW1lbnQgdXNpbmcgZ3N0X3BpcGVsaW5lX25ldyAoKS4KLUVsZW1lbnRzIGFyZSBhZGRlZCB0byBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBwaXBlbGluZSB3aXRoIGdzdF9iaW5fYWRkKCkgYW5kCi1nc3RfYmluX3JlbW92ZSgpLgotCi1BZnRlciBhZGRpbmcgdGhlIGVsZW1lbnRzLCB0aGUgcGFkcyBvZiBhbiBlbGVtZW50IGNhbiBiZSByZXRyaWV2ZWQgd2l0aAotZ3N0X2VsZW1lbnRfZ2V0X3BhZCgpLiBQYWRzIGNhbiB0aGVuIGJlIGxpbmtlZCB0b2dldGhlciB3aXRoIGdzdF9wYWRfbGluaygpLgotCi1Tb21lIGVsZW1lbnRzIGNyZWF0ZSBuZXcgcGFkcyB3aGVuIGFjdHVhbCBkYXRhZmxvdyBpcyBoYXBwZW5pbmcgaW4gdGhlIHBpcGVsaW5lLgotV2l0aCBnX3NpZ25hbF9jb25uZWN0KCkgb25lIGNhbiByZWNlaXZlIGEgbm90aWZpY2F0aW9uIHdoZW4gYW4gZWxlbWVudCBoYXMgY3JlYXRlZAotYSBwYWQuIFRoZXNlIG5ldyBwYWRzIGNhbiB0aGVuIGJlIGxpbmtlZCB0byBvdGhlciB1bmxpbmtlZCBwYWRzLgotCi1Tb21lIGVsZW1lbnRzIGNhbm5vdCBiZSBsaW5rZWQgdG9nZXRoZXIgYmVjYXVzZSB0aGV5IG9wZXJhdGUgb24gZGlmZmVyZW50IAotaW5jb21wYXRpYmxlIGRhdGEgdHlwZXMuIFRoZSBwb3NzaWJsZSBkYXRhdHlwZXMgYSBwYWQgY2FuIHByb3ZpZGUgb3IgY29uc3VtZSBjYW4KLWJlIHJldHJpZXZlZCB3aXRoIGdzdF9wYWRfZ2V0X2NhcHMoKS4KLQotQmVsb3cgaXMgYSBzaW1wbGUgbXAzIHBsYXliYWNrIHBpcGVsaW5lIHRoYXQgd2UgY29uc3RydWN0ZWQuIFdlIHdpbGwgdXNlIHRoaXMKLXBpcGVsaW5lIGluIGZ1cnRoZXIgZXhhbXBsZXMuCi0gCi0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgcGlwZWxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgfCArLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyB8Ci0gICB8IHwgZmlsZXNyYyB8ICAgfCBtcDNkZWMgICB8ICAgfCBhbHNhc2luayB8IHwKLSAgIHwgfCAgICAgICAgc3JjLXNpbmsgICAgICAgc3JjLXNpbmsgICAgICAgIHwgfAotICAgfCArLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotCi1QaXBlbGluZSBjbG9jawotfn5+fn5+fn5+fn5+fn4KLQotT25lIG9mIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zIG9mIHRoZSBwaXBlbGluZSBpcyB0byBzZWxlY3QgYSBnbG9iYWwgY2xvY2sKLWZvciBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZS4KLQotVGhlIHB1cnBvc2Ugb2YgdGhlIGNsb2NrIGlzIHRvIHByb3ZpZGUgYSBzdHJpY2x5IGluY3JlYXNpbmcgdmFsdWUgYXQgdGhlIHJhdGUKLW9mIG9uZSBHU1RfU0VDT05EIHBlciBzZWNvbmQuIENsb2NrIHZhbHVlcyBhcmUgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzLgotRWxlbWVudHMgdXNlIHRoZSBjbG9jayB0aW1lIHRvIHN5bmNocm9uaXplIHRoZSBwbGF5YmFjayBvZiBkYXRhLgotCi1CZWZvcmUgdGhlIHBpcGVsaW5lIGlzIHNldCB0byBQTEFZSU5HLCB0aGUgcGlwZWxpbmUgYXNrcyBlYWNoIGVsZW1lbnQgaWYgdGhleSBjYW4KLXByb3ZpZGUgYSBjbG9jay4gVGhlIGNsb2NrIGlzIHNlbGVjdGVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci0KLS0gSWYgdGhlIGFwcGxpY2F0aW9uIHNlbGVjdGVkIGEgY2xvY2ssIHVzZSB0aGF0IG9uZS4KLS0gSWYgYSBzb3VyY2UgZWxlbWVudCBwcm92aWRlcyBhIGNsb2NrLCB1c2UgdGhhdCBjbG9jay4KLS0gU2VsZWN0IGEgY2xvY2sgZnJvbSBhbnkgb3RoZXIgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgY2xvY2ssIHN0YXJ0IHdpdGggdGhlCi0gIHNpbmtzLgotLSBJZiBubyBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2sgYSBkZWZhdWx0IHN5c3RlbSBjbG9jayBpcyB1c2VkIGZvciB0aGUgcGlwZWxpbmUuCi0KLUluIGEgdHlwaWNhbCBwbGF5YmFjayBwaXBlbGluZSB0aGlzIGFsZ29yaXRobSB3aWxsIHNlbGVjdCB0aGUgY2xvY2sgcHJvdmlkZWQgYnkgCi1hIHNpbmsgZWxlbWVudCBzdWNoIGFzIGFuIGF1ZGlvIHNpbmsuCi0KLUluIGNhcHR1cmUgcGlwZWxpbmVzLCB0aGlzIHdpbGwgdHlwaWNhbGx5IHNlbGVjdCB0aGUgY2xvY2sgb2YgdGhlIGRhdGEgcHJvZHVjZXIsIHdoaWNoCi1pbiBtb3N0IGNhc2VzIGNhbiBub3QgY29udHJvbCB0aGUgcmF0ZSBhdCB3aGljaCBpdCBwcm9kdWNlcyBkYXRhLgotCi0KLVBpcGVsaW5lIHN0YXRlcwotfn5+fn5+fn5+fn5+fn5+Ci0KLVdoZW4gYWxsIHRoZSBwYWRzIGFyZSBsaW5rZWQgYW5kIHNpZ25hbHMgaGF2ZSBiZWVuIGNvbm5lY3RlZCwgdGhlIHBpcGVsaW5lIGNhbgotYmUgcHV0IGluIHRoZSBQQVVTRUQgc3RhdGUgdG8gc3RhcnQgZGF0YWZsb3cuIAotCi1XaGVuIGEgYmluIChhbmQgaGVuY2UgYSBwaXBlbGluZSkgcGVyZm9ybXMgYSBzdGF0ZSBjaGFuZ2UsIGl0IHdpbGwgY2hhbmdlIHRoZSBzdGF0ZQotb2YgYWxsIGl0cyBjaGlsZHJlbi4gVGhlIHBpcGVsaW5lIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBvZiBpdHMgY2hpbGRyZW4gZnJvbSB0aGUKLXNpbmsgZWxlbWVudHMgdG8gdGhlIHNvdXJjZSBlbGVtZW50cywgdGhpcyB0byBtYWtlIHN1cmUgdGhhdCBubyB1cHN0cmVhbSBlbGVtZW50Ci1wcm9kdWNlcyBkYXRhIHRvIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgeWV0IHJlYWR5IHRvIGFjY2VwdCBpdC4gCi0KLUluIHRoZSBtcDMgcGxheWJhY2sgcGlwZWxpbmUsIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudHMgaXMgY2hhbmdlZCBpbiB0aGUgb3JkZXIKLWFsc2FzaW5rLCBtcDNkZWMsIGZpbGVzcmMuCi0KLUFsbCBpbnRlcm1lZGlhdGUgc3RhdGVzIGFyZSB0cmF2ZXJzZWQgZm9yIGVhY2ggZWxlbWVudCByZXN1bHRpbmcgaW4gdGhlIGZvbGxvd2luZwotY2hhaW4gb2Ygc3RhdGUgY2hhbmdlczoKLQotIGFsc2FzaW5rIHRvIFJFQURZOiAgdGhlIGF1ZGlvIGRldmljZSBpcyBwcm9iZWQKLSBtcDNkZWMgdG8gUkVBRFk6ICAgIG5vdGhpbmcgaGFwcGVucy4KLSBmaWxlc3JjIHRvIFJFQURZOiAgIHRoZSBmaWxlIGlzIHByb2JlZAotIGFsc2FzaW5rIHRvIFBBVVNFRDogdGhlIGF1ZGlvIGRldmljZSBpcyBvcGVuZWQuIGFsc2FzaW5rIGlzIGEgc2luayBhbmQgcmV0dXJucyAKLSAgICAgICAgICAgICAgICAgICAgIEFTWU5DIGJlY2F1c2UgaXQgZGlkIG5vdCByZWNlaXZlIGRhdGEgeWV0LgotIG1wM2RlYyB0byBQQVVTRUQ6ICAgdGhlIGRlY29kaW5nIGxpYnJhcnkgaXMgaW5pdGlhbGl6ZWQKLSBmaWxlc3JjIHRvIFBBVVNFRDogIHRoZSBmaWxlIGlzIG9wZW5lZCBhbmQgYSB0aHJlYWQgaXMgc3RhcnRlZCB0byBwdXNoIGRhdGEgdG8gCi0gICAgICAgICAgICAgICAgICAgICBtcDNkZWMKLQotQXQgdGhpcyBwb2ludCBkYXRhIGZsb3dzIGZyb20gZmlsZXNyYyB0byBtcDNkZWMgYW5kIGFsc2FzaW5rLiBTaW5jZSBtcDNkZWMgaXMgUEFVU0VELAotaXQgYWNjZXB0cyB0aGUgZGF0YSBmcm9tIGZpbGVzcmMgb24gdGhlIHNpbmtwYWQgYW5kIHN0YXJ0cyBkZWNvZGluZyB0aGUgY29tcHJlc3NlZAotZGF0YSB0byByYXcgYXVkaW8gc2FtcGxlcy4KLQotVGhlIG1wMyBkZWNvZGVyIGZpZ3VyZXMgb3V0IHRoZSBzYW1wbGVyYXRlLCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGFuZCBvdGhlciBhdWRpbwotcHJvcGVydGllcyBvZiB0aGUgcmF3IGF1ZGlvIHNhbXBsZXMgYW5kIHNlbmRzIG91dCBhIGNhcHMgZXZlbnQgd2l0aCB0aGUgbWVkaWEgdHlwZS4KLQotQWxzYXNpbmsgdGhlbiByZWNlaXZlcyB0aGUgY2FwcyBldmVudCwgaW5zcGVjdHMgdGhlIGNhcHMgYW5kIHJlY29uZmlndXJlcwotaXRzZWxmIHRvIHByb2Nlc3MgdGhlIG1lZGlhIHR5cGUuCi0KLW1wM2RlYyB0aGVuIHB1dHMgdGhlIGRlY29kZWQgc2FtcGxlcyBpbnRvIGEgQnVmZmVyIGFuZCBwdXNoZXMgdGhpcyBidWZmZXIgdG8gdGhlIG5leHQKLWVsZW1lbnQuCi0KLUFsc2FzaW5rIHJlY2VpdmVzIHRoZSBidWZmZXIgd2l0aCBzYW1wbGVzLiBTaW5jZSBpdCByZWNlaXZlZCB0aGUgZmlyc3QgYnVmZmVyIG9mCi1zYW1wbGVzLCBpdCBjb21wbGV0ZXMgdGhlIHN0YXRlIGNoYW5nZSB0byB0aGUgUEFVU0VEIHN0YXRlLiBBdCB0aGlzIHBvaW50IHRoZQotcGlwZWxpbmUgaXMgcHJlcm9sbGVkIGFuZCBhbGwgZWxlbWVudHMgaGF2ZSBzYW1wbGVzLiBBbHNhc2luayBpcyBub3cgYWxzbwotY2FwYWJsZSBvZiBwcm92aWRpbmcgYSBjbG9jayB0byB0aGUgcGlwZWxpbmUuCi0KLVNpbmNlIGFsc2FzaW5rIGlzIG5vdyBpbiB0aGUgUEFVU0VEIHN0YXRlIGl0IGJsb2NrcyB3aGlsZSByZWNlaXZpbmcgdGhlIGZpcnN0IGJ1ZmZlci4gVGhpcwotZWZmZWN0aXZlbHkgYmxvY2tzIGJvdGggbXAzZGVjIGFuZCBmaWxlc3JjIGluIHRoZWlyIGdzdF9wYWRfcHVzaCgpLgotCi1TaW5jZSBhbGwgZWxlbWVudHMgbm93IHJldHVybiBTVUNDRVNTIGZyb20gdGhlIGdzdF9lbGVtZW50X2dldF9zdGF0ZSgpIGZ1bmN0aW9uLAotdGhlIHBpcGVsaW5lIGNhbiBiZSBwdXQgaW4gdGhlIFBMQVlJTkcgc3RhdGUuCi0KLUJlZm9yZSBnb2luZyB0byBQTEFZSU5HLCB0aGUgcGlwZWxpbmUgc2VsZWN0IGEgY2xvY2sgYW5kIHNhbXBsZXMgdGhlIGN1cnJlbnQgdGltZSBvZiAKLXRoZSBjbG9jay4gVGhpcyBpcyB0aGUgYmFzZV90aW1lLiBJdCB0aGVuIGRpc3RyaWJ1dGVzIHRoaXMgdGltZSB0byBhbGwgZWxlbWVudHMuIAotRWxlbWVudHMgY2FuIHRoZW4gc3luY2hyb25pemUgYWdhaW5zdCB0aGUgY2xvY2sgdXNpbmcgdGhlIGJ1ZmZlciBydW5uaW5nX3RpbWUgKwotYmFzZV90aW1lIChTZWUgYWxzbyBwYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQpLiAKLQotVGhlIGZvbGxvd2luZyBjaGFpbiBvZiBzdGF0ZSBjaGFuZ2VzIHRoZW4gdGFrZXMgcGxhY2U6Ci0KLSBhbHNhc2luayB0byBQTEFZSU5HOiAgdGhlIHNhbXBsZXMgYXJlIHBsYXllZCB0byB0aGUgYXVkaW8gZGV2aWNlCi0gbXAzZGVjIHRvIFBMQVlJTkc6ICAgIG5vdGhpbmcgaGFwcGVucwotIGZpbGVzcmMgdG8gUExBWUlORzogICBub3RoaW5nIGhhcHBlbnMKLQotCi1QaXBlbGluZSBzdGF0dXMKLX5+fn5+fn5+fn5+fn5+fgotCi1UaGUgcGlwZWxpbmUgaW5mb3JtcyB0aGUgYXBwbGljYXRpb24gb2YgYW55IHNwZWNpYWwgZXZlbnRzIHRoYXQgb2NjdXIgaW4gdGhlCi1waXBlbGluZSB3aXRoIHRoZSBidXMuIFRoZSBidXMgaXMgYW4gb2JqZWN0IHRoYXQgdGhlIHBpcGVsaW5lIHByb3ZpZGVzIGFuZCB0aGF0Ci1jYW4gYmUgcmV0cmlldmVkIHdpdGggZ3N0X3BpcGVsaW5lX2dldF9idXMoKS4KLQotVGhlIGJ1cyBjYW4gYmUgcG9sbGVkIG9yIGFkZGVkIHRvIHRoZSBnbGliIG1haW5sb29wLgotCi1UaGUgYnVzIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCBlbGVtZW50cyBhZGRlZCB0byB0aGUgcGlwZWxpbmUuIFRoZSBlbGVtZW50cyB1c2UgdGhlIGJ1cwotdG8gcG9zdCBtZXNzYWdlcyBvbi4gVmFyaW91cyBtZXNzYWdlIHR5cGVzIGV4aXN0IHN1Y2ggYXMgRVJST1JTLCBXQVJOSU5HUywgRU9TLCAKLVNUQVRFX0NIQU5HRUQsIGV0Yy4uCi0KLVRoZSBwaXBlbGluZSBoYW5kbGVzIEVPUyBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIGVsZW1lbnRzIGluIGEgc3BlY2lhbCB3YXkuIEl0IHdpbGwKLW9ubHkgZm9yd2FyZCB0aGUgbWVzc2FnZSB0byB0aGUgYXBwbGljYXRpb24gd2hlbiBhbGwgc2luayBlbGVtZW50cyBoYXZlIHBvc3RlZCBhbgotRU9TIG1lc3NhZ2UuCi0KLU90aGVyIG1ldGhvZHMgZm9yIG9idGFpbmluZyB0aGUgcGlwZWxpbmUgc3RhdHVzIGluY2x1ZGUgdGhlIFF1ZXJ5IGZ1bmN0aW9uYWxpdHkgdGhhdAotY2FuIGJlIHBlcmZvcm1lZCB3aXRoIGdzdF9lbGVtZW50X3F1ZXJ5KCkgb24gdGhlIHBpcGVsaW5lLiBUaGlzIHR5cGUgb2YgcXVlcnkKLWlzIHVzZWZ1bCBmb3Igb2J0YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCB0b3RhbCB0aW1lIG9mCi10aGUgcGlwZWxpbmUuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcXVlcnkgZm9yIHRoZSBzdXBwb3J0ZWQgc2Vla2luZyBmb3JtYXRzIGFuZAotcmFuZ2VzLgotCi0KLVBpcGVsaW5lIEVPUwotfn5+fn5+fn5+fn5+Ci0KLVdoZW4gdGhlIHNvdXJjZSBmaWx0ZXIgZW5jb3VudGVycyB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGl0IHNlbmRzIGFuIEVPUyBldmVudCB0bwotdGhlIHBlZXIgZWxlbWVudC4gVGhpcyBldmVudCB3aWxsIHRoZW4gdHJhdmVsIGRvd25zdHJlYW0gdG8gYWxsIG9mIHRoZSBjb25uZWN0ZWQKLWVsZW1lbnRzIHRvIGluZm9ybSB0aGVtIG9mIHRoZSBFT1MuIFRoZSBlbGVtZW50IGlzIG5vdCBzdXBwb3NlZCB0byBhY2NlcHQgYW55IG1vcmUKLWRhdGEgYWZ0ZXIgcmVjZWl2aW5nIGFuIEVPUyBldmVudCBvbiBhIHNpbmtwYWQuCi0KLVRoZSBlbGVtZW50IHByb3ZpZGluZyB0aGUgc3RyZWFtaW5nIHRocmVhZCBzdG9wcyBzZW5kaW5nIGRhdGEgYWZ0ZXIgc2VuZGluZyB0aGUgCi1FT1MgZXZlbnQuCi0KLVRoZSBFT1MgZXZlbnQgd2lsbCBldmVudHVhbGx5IGFycml2ZSBpbiB0aGUgc2luayBlbGVtZW50LiBUaGUgc2luayB3aWxsIHRoZW4gcG9zdAotYW4gRU9TIG1lc3NhZ2Ugb24gdGhlIGJ1cyB0byBpbmZvcm0gdGhlIHBpcGVsaW5lIHRoYXQgYSBwYXJ0aWN1bGFyIHN0cmVhbSBoYXMKLWZpbmlzaGVkLiBXaGVuIGFsbCBzaW5rcyBoYXZlIHJlcG9ydGVkIEVPUywgdGhlIHBpcGVsaW5lIGZvcndhcmRzIHRoZSBFT1MgbWVzc2FnZQotdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGUgRU9TIG1lc3NhZ2UgaXMgb25seSBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGluIHRoZQotUExBWUlORyBzdGF0ZS4KLQotV2hlbiBpbiBFT1MsIHRoZSBwaXBlbGluZSByZW1haW5zIGluIHRoZSBQTEFZSU5HIHN0YXRlLCBpdCBpcyB0aGUgYXBwbGljYXRpb25zCi1yZXNwb25zYWJpbGl0eSB0byBQQVVTRSBvciBSRUFEWSB0aGUgcGlwZWxpbmUuIFRoZSBhcHBsaWNhdGlvbiBjYW4gYWxzbyBpc3N1ZQotYSBzZWVrLCBmb3IgZXhhbXBsZS4KLQotCi1QaXBlbGluZSBSRUFEWQotfn5+fn5+fn5+fn5+fn4KLQotV2hlbiBhIHJ1bm5pbmcgcGlwZWxpbmUgaXMgc2V0IGZyb20gdGhlIFBMQVlJTkcgdG8gUkVBRFkgc3RhdGUsIHRoZSBmb2xsb3dpbmcgCi1hY3Rpb25zIG9jY3VyIGluIHRoZSBwaXBlbGluZToKLQotIGFsc2FzaW5rIHRvIFBBVVNFRDogIGFsc2FzaW5rIGJsb2NrcyBhbmQgY29tcGxldGVzIHRoZSBzdGF0ZSBjaGFuZ2Ugb24gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgbmV4dCBzYW1wbGUuIElmIHRoZSBlbGVtZW50IHdhcyBFT1MsIGl0IGRvZXMgbm90IHdhaXQgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgYSBzYW1wbGUgdG8gY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZS4KLSBtcDNkZWMgdG8gUEFVU0VEOiAgICBub3RoaW5nIAotIGZpbGVzcmMgdG8gUEFVU0VEOiAgIG5vdGhpbmcKLQotR29pbmcgdG8gdGhlIGludGVybWVkaWF0ZSBQQVVTRUQgc3RhdGUgd2lsbCBibG9jayBhbGwgZWxlbWVudHMgaW4gdGhlIF9wdXNoKCkKLWZ1bmN0aW9ucy4gVGhpcyBoYXBwZW5zIGJlY2F1c2UgdGhlIHNpbmsgZWxlbWVudCBibG9ja3Mgb24gdGhlIGZpcnN0IGJ1ZmZlcgotaXQgcmVjZWl2ZXMuCi0KLVNvbWUgZWxlbWVudHMgbWlnaHQgYmUgcGVyZm9ybWluZyBibG9ja2luZyBvcGVyYXRpb25zIGluIHRoZSBQTEFZSU5HIHN0YXRlIHRoYXQKLW11c3QgYmUgdW5ibG9ja2VkIHdoZW4gdGhleSBnbyBpbnRvIHRoZSBQQVVTRUQgc3RhdGUuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZQotc3RhdGUgY2hhbmdlIGhhcHBlbnMgdmVyeSBmYXN0LgotCi1JbiB0aGUgbmV4dCBQQVVTRUQgdG8gUkVBRFkgc3RhdGUgY2hhbmdlIHRoZSBwaXBlbGluZSBoYXMgdG8gc2h1dCBkb3duIGFuZCBhbGwKLXN0cmVhbWluZyB0aHJlYWRzIG11c3Qgc3RvcCBzZW5kaW5nIGRhdGEuIFRoaXMgaGFwcGVucyBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOgotCi0gYWxzYXNpbmsgdG8gUkVBRFk6ICAgYWxzYXNpbmsgdW5ibG9ja3MgZnJvbSB0aGUgX2NoYWluKCkgZnVuY3Rpb24gYW5kIHJldHVybnMgYQotICAgICAgICAgICAgICAgICAgICAgIEZMVVNISU5HIHJldHVybiB2YWx1ZSB0byB0aGUgcGVlciBlbGVtZW50LiBUaGUgc2lua3BhZCBpcwotICAgICAgICAgICAgICAgICAgICAgIGRlYWN0aXZhdGVkIGFuZCBiZWNvbWVzIHVudXNhYmxlIGZvciBzZW5kaW5nIG1vcmUgZGF0YS4gCi0gbXAzZGVjIHRvIFJFQURZOiAgICAgdGhlIHBhZHMgYXJlIGRlYWN0aXZhdGVkIGFuZCB0aGUgc3RhdGUgY2hhbmdlIGNvbXBsZXRlcyB3aGVuCi0gICAgICAgICAgICAgICAgICAgICAgbXAzZGVjIGxlYXZlcyBpdHMgX2NoYWluKCkgZnVuY3Rpb24uIAotIGZpbGVzcmMgdG8gUkVBRFk6ICAgIHRoZSBwYWRzIGFyZSBkZWFjdGl2YXRlZCBhbmQgdGhlIHRocmVhZCBpcyBwYXVzZWQuCi0KLVRoZSB1cHN0cmVhbSBlbGVtZW50cyBmaW5pc2ggdGhlaXIgY2hhaW4oKSBmdW5jdGlvbiBiZWNhdXNlIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQKLXJldHVybmVkIGFuIGVycm9yIGNvZGUgKEZMVVNISU5HKSBmcm9tIHRoZSBfcHVzaCgpIGZ1bmN0aW9ucy4gVGhlc2UgZXJyb3IgY29kZXMgCi1hcmUgZXZlbnR1YWxseSByZXR1cm5lZCB0byB0aGUgZWxlbWVudCB0aGF0IHN0YXJ0ZWQgdGhlIHN0cmVhbWluZyB0aHJlYWQgKGZpbGVzcmMpLAotd2hpY2ggcGF1c2VzIHRoZSB0aHJlYWQgYW5kIGNvbXBsZXRlcyB0aGUgc3RhdGUgY2hhbmdlLgotCi1UaGlzIHNlcXVlbmNlIG9mIGV2ZW50cyBlbnN1cmUgdGhhdCBhbGwgZWxlbWVudHMgYXJlIHVuYmxvY2tlZCBhbmQgYWxsIHN0cmVhbWluZwotdGhyZWFkcyBzdG9wcGVkLgotCi0KLVBpcGVsaW5lIHNlZWtpbmcKLX5+fn5+fn5+fn5+fn5+fn4KLQotU2Vla2luZyBpbiB0aGUgcGlwZWxpbmUgcmVxdWlyZXMgYSB2ZXJ5IHNwZWNpZmljIG9yZGVyIG9mIG9wZXJhdGlvbnMgdG8gbWFrZQotc3VyZSB0aGF0IHRoZSBlbGVtZW50cyByZW1haW4gc3luY2hyb25pemVkIGFuZCB0aGF0IHRoZSBzZWVrIGlzIHBlcmZvcm1lZCB3aXRoCi1hIG1pbmltYWwgYW1vdW50IG9mIGxhdGVuY3kuCi0KLUFuIGFwcGxpY2F0aW9uIGlzc3VlcyBhIHNlZWsgZXZlbnQgb24gdGhlIHBpcGVsaW5lIHVzaW5nIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQoKQotb24gdGhlIHBpcGVsaW5lIGVsZW1lbnQuIFRoZSBldmVudCBjYW4gYmUgYSBzZWVrIGV2ZW50IGluIGFueSBvZiB0aGUgZm9ybWF0cwotc3VwcG9ydGVkIGJ5IHRoZSBlbGVtZW50cy4KLQotVGhlIHBpcGVsaW5lIGZpcnN0IHBhdXNlcyB0aGUgcGlwZWxpbmUgdG8gc3BlZWQgdXAgdGhlIHNlZWsgb3BlcmF0aW9ucy4KLQotVGhlIHBpcGVsaW5lIHRoZW4gaXNzdWVzIHRoZSBzZWVrIGV2ZW50IHRvIGFsbCBzaW5rIGVsZW1lbnRzLiBUaGUgc2luayB0aGVuIGZvcndhcmRzIAotdGhlIHNlZWsgZXZlbnQgdXBzdHJlYW0gdW50aWwgc29tZSBlbGVtZW50IGNhbiBwZXJmb3JtIHRoZSBzZWVrIG9wZXJhdGlvbiwgd2hpY2ggaXMKLXR5cGljYWxseSB0aGUgc291cmNlIG9yIGRlbXV4ZXIgZWxlbWVudC4gQWxsIGludGVybWVkaWF0ZSBlbGVtZW50cyBjYW4gdHJhbnNmb3JtIHRoZQotcmVxdWVzdGVkIHNlZWsgb2Zmc2V0IHRvIGFub3RoZXIgZm9ybWF0LCB0aGlzIHdheSBhIGRlY29kZXIgZWxlbWVudCBjYW4gdHJhbnNmb3JtIGEKLXNlZWsgdG8gYSBmcmFtZSBudW1iZXIgdG8gYSB0aW1lc3RhbXAsIGZvciBleGFtcGxlLgotCi1XaGVuIHRoZSBzZWVrIGV2ZW50IHJlYWNoZXMgYW4gZWxlbWVudCB0aGF0IHdpbGwgcGVyZm9ybSB0aGUgc2VlayBvcGVyYXRpb24sIHRoYXQgCi1lbGVtZW50IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHMuCi0KLSAgMSkgc2VuZCBhIEZMVVNIX1NUQVJUIGV2ZW50IHRvIGFsbCBkb3duc3RyZWFtIGFuZCB1cHN0cmVhbSBwZWVyIGVsZW1lbnRzLgotICAyKSBtYWtlIHN1cmUgdGhlIHN0cmVhbWluZyB0aHJlYWQgaXMgbm90IHJ1bm5pbmcuIFRoZSBzdHJlYW1pbmcgdGhyZWFkIHdpbGwKLSAgICAgYWx3YXlzIHN0b3AgYmVjYXVzZSBvZiBzdGVwIDEpLgotICAzKSBwZXJmb3JtIHRoZSBzZWVrIG9wZXJhdGlvbgotICA0KSBzZW5kIGEgRkxVU0ggZG9uZSBldmVudCB0byBhbGwgZG93bnN0cmVhbSBhbmQgdXBzdHJlYW0gcGVlciBlbGVtZW50cy4KLSAgNSkgc2VuZCBTRUdNRU5UIGV2ZW50IHRvIGluZm9ybSBhbGwgZWxlbWVudHMgb2YgdGhlIG5ldyBwb3NpdGlvbiBhbmQgdG8gY29tcGxldGUKLSAgICAgdGhlIHNlZWsuCi0KLUluIHN0ZXAgMSkgYWxsIGRvd25zdHJlYW0gZWxlbWVudHMgaGF2ZSB0byByZXR1cm4gZnJvbSBhbnkgYmxvY2tpbmcgb3BlcmF0aW9ucwotYW5kIGhhdmUgdG8gcmVmdXNlIGFueSBmdXJ0aGVyIGJ1ZmZlcnMgb3IgZXZlbnRzIGRpZmZlcmVudCBmcm9tIGEgRkxVU0ggZG9uZS4KLQotVGhlIGZpcnN0IHN0ZXAgZW5zdXJlcyB0aGF0IHRoZSBzdHJlYW1pbmcgdGhyZWFkIGV2ZW50dWFsbHkgdW5ibG9ja3MgYW5kIHRoYXQKLXN0ZXAgMikgY2FuIGJlIHBlcmZvcm1lZC4gQXQgdGhpcyBwb2ludCwgZGF0YWZsb3cgaXMgY29tcGxldGVseSBzdG9wcGVkIGluIHRoZQotcGlwZWxpbmUuIAotCi1JbiBzdGVwIDMpIHRoZSBlbGVtZW50IHBlcmZvcm1zIHRoZSBzZWVrIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24uIAotCi1JbiBzdGVwIDQpIGFsbCBwZWVyIGVsZW1lbnRzIGFyZSBhbGxvd2VkIHRvIGFjY2VwdCBkYXRhIGFnYWluIGFuZCBzdHJlYW1pbmcKLWNhbiBjb250aW51ZSBmcm9tIHRoZSBuZXcgcG9zaXRpb24uIEEgRkxVU0ggZG9uZSBldmVudCBpcyBzZW50IHRvIGFsbCB0aGUgcGVlcgotZWxlbWVudHMgc28gdGhhdCB0aGV5IGFjY2VwdCBuZXcgZGF0YSBhZ2FpbiBhbmQgcmVzdGFydCB0aGVpciBzdHJlYW1pbmcgdGhyZWFkcy4KLQotU3RlcCA1KSBpbmZvcm1zIGFsbCBlbGVtZW50cyBvZiB0aGUgbmV3IHBvc2l0aW9uIGluIHRoZSBzdHJlYW0uIEFmdGVyIHRoYXQgdGhlCi1ldmVudCBmdW5jdGlvbiByZXR1cm5zIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uLiBhbmQgdGhlIHN0cmVhbWluZyB0aHJlYWRzIHN0YXJ0Ci10byBwcm9kdWNlIG5ldyBkYXRhLgotCi1TaW5jZSB0aGUgcGlwZWxpbmUgaXMgc3RpbGwgUEFVU0VELCB0aGlzIHdpbGwgcHJlcm9sbCB0aGUgbmV4dCBtZWRpYSBzYW1wbGUgaW4gdGhlCi1zaW5rcy4gVGhlIGFwcGxpY2F0aW9uIGNhbiB3YWl0IGZvciB0aGlzIHByZXJvbGwgdG8gY29tcGxldGUgYnkgcGVyZm9ybWluZyBhIAotX2dldF9zdGF0ZSgpIG9uIHRoZSBwaXBlbGluZS4KLQotVGhlIGxhc3Qgc3RlcCBpbiB0aGUgc2VlayBvcGVyYXRpb24gaXMgdGhlbiB0byBhZGp1c3QgdGhlIHN0cmVhbSBydW5uaW5nX3RpbWUgb2YKLXRoZSBwaXBlbGluZSB0byAwIGFuZCB0byBzZXQgdGhlIHBpcGVsaW5lIGJhY2sgdG8gUExBWUlORy4KLQotVGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBpbiBvdXIgbXAzIHBsYXliYWNrIGV4YW1wbGUuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhKSBzZWVrIG9uIHBpcGVsaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYikgUEFVU0UgcGlwZWxpbmUKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tVi0tLS0tLS0tKwotICAgfCBwaXBlbGluZSAgICAgICAgICAgICAgICAgICAgICAgICB8IGMpIHNlZWsgb24gc2luawotICAgfCArLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyAgICstLS1WLS0tLS0tKyB8Ci0gICB8IHwgZmlsZXNyYyB8ICAgfCBtcDNkZWMgICB8ICAgfCBhbHNhc2luayB8IHwKLSAgIHwgfCAgICAgICAgc3JjLXNpbmsgICAgICAgc3JjLXNpbmsgICAgICAgIHwgfAotICAgfCArLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyAgICstLS0tfC0tLS0tKyB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLSsKLSAgICAgICAgICAgICAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICAgICAgICAgICAgZCkgc2VlayB0cmF2ZWxzIHVwc3RyZWFtCi0KLSAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IDEpIEZMVVNIIGV2ZW50Ci0JICAgICAgfCAyKSBzdG9wIHN0cmVhbWluZwotCSAgICAgIHwgMykgcGVyZm9ybSBzZWVrCi0gICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiA0KSBGTFVTSCBkb25lIGV2ZW50Ci0gICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiA1KSBTRUdNRU5UIGV2ZW50Ci0gIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGUpIHVwZGF0ZSBydW5uaW5nX3RpbWUgdG8gMAotCQkJCSAgICAgIHwgZikgUExBWSBwaXBlbGluZQotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXByZXJvbGwudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1wcmVyb2xsLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk3YzY2MS4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LXByZXJvbGwudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotUHJlcm9sbAotLS0tLS0tLQotCi1BIHNpbmsgZWxlbWVudCBjYW4gb25seSBjb21wbGV0ZSB0aGUgc3RhdGUgY2hhbmdlIHRvIFBBVVNFRCBhZnRlciBhIGJ1ZmZlcgotaGFzIGJlZW4gcXVldWVkIG9uIHRoZSBpbnB1dCBwYWQgb3IgcGFkcy4gVGhpcyBwcm9jZXNzIGlzIGNhbGxlZCBwcmVyb2xsaW5nCi1hbmQgaXMgbmVlZGVkIHRvIGZpbGwgdGhlIHBpcGVsaW5lIHdpdGggYnVmZmVycyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIHRvCi1QTEFZSU5HIGdvZXMgYXMgZmFzdCBhcyBwb3NzaWJsZSB3aXRoIG5vIHZpc3VhbCBkZWxheSBmb3IgdGhlIHVzZXIuCi0KLVByZXJvbGwgaXMgYWxzbyBjcnVjaWFsIGluIG1haW50YWluaW5nIGNvcnJlY3QgYXVkaW8gYW5kIHZpZGVvIHN5bmNocm9uaXNhdGlvbgotYW5kIGVuc3VyaW5nIHRoYXQgbm8gYnVmZmVycyBhcmUgZHJvcHBlZCBpbiB0aGUgc2lua3MuCi0KLUFmdGVyIHJlY2VpdmluZyBhIGJ1ZmZlciAob3IgRU9TKSBvbiBhIHBhZCB0aGUgY2hhaW4vZXZlbnQgZnVuY3Rpb24gc2hvdWxkCi13YWl0IHRvIHJlbmRlciB0aGUgYnVmZmVycyBvciBpbiB0aGUgRU9TIGNhc2UsIHdhaXQgdG8gcG9zdCB0aGUgRU9TCi1tZXNzYWdlLiBXaGlsZSB3YWl0aW5nLCB0aGUgc2luayB3aWxsIHdhaXQgZm9yIHRoZSBwcmVyb2xsIGNvbmQgdG8gYmUgc2lnbmFsbGVkLgotCi1TZXZlcmFsIHRoaW5ncyBjYW4gaGFwcGVuIHRoYXQgcmVxdWlyZSB0aGUgcHJlcm9sbCBjb25kIHRvIGJlIHNpZ25hbGxlZC4gVGhpcwotaW5jbHVkZSBzdGF0ZSBjaGFuZ2VzIG9yIGZsdXNoIGV2ZW50cy4gVGhlIHByZXJvbGxpbmcgaXMgaW1wbGVtZW50ZWQgaW4KLXNpbmtzIChzZWUgcGFydC1lbGVtZW50LXNpbmsudHh0KQotCi0KLUNvbW1pdHRpbmcgdGhlIHN0YXRlCi1+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1XaGVuIGdvaW5nIHRvIFBBVVNFRCBhbmQgUExBWUlORyBhIGJ1ZmZlciBzaG91bGQgYmUgcXVldWVkIGluIHRoZSBwYWQuIFdlIGFsc28KLW1ha2UgdGhpcyByZXF1aXJlbWVudCBmb3IgZ29pbmcgdG8gUExBWUlORyBzaW5jZSBhIGZsdXNoIGV2ZW50IGluIHRoZSBQQVVTRUQKLXN0YXRlIGNvdWxkIHVucXVldWUgdGhlIGJ1ZmZlciBhZ2Fpbi4KLQotVGhlIHN0YXRlIGlzIGNvbW1pdGVkIGluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotIC0gYSBidWZmZXIgaXMgcmVjZWl2ZWQgb24gYSBzaW5rcGFkCi0gLSBhbiBHQVAgZXZlbnQgaXMgcmVjZWl2ZWQgb24gYSBzaW5rcGFkLgotIC0gYW4gRU9TIGV2ZW50IGlzIHJlY2VpdmVkIG9uIGEgc2lua3BhZC4KLQotV2UgcmVxdWlyZSB0aGUgc3RhdGUgY2hhbmdlIHRvIGJlIGNvbW1pdGVkIGluIEVPUyBhcyB3ZWxsIHNpbmNlIGFuIEVPUyBtZWFucwotYnkgZGVmaW5pdGlvbiB0aGF0IG5vIGJ1ZmZlciBpcyBnb2luZyB0byBhcnJpdmUgYW55bW9yZS4KLQotQWZ0ZXIgdGhlIHN0YXRlIGlzIGNvbW1pdGVkLCBhIGJsb2NraW5nIHdhaXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBmb3IgdGhlIAotbmV4dCBldmVudC4gU29tZSBzaW5rcyBtaWdodCByZW5kZXIgdGhlIHByZXJvbGwgYnVmZmVyIGJlZm9yZSBzdGFydGluZyB0aGlzCi1ibG9ja2luZyB3YWl0LgotCi0KLVVubG9ja2luZyB0aGUgcHJlcm9sbAotfn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyB1bmxvY2sgdGhlIHByZXJvbGw6Ci0KLSAtIGEgc3RhdGUgY2hhbmdlCi0gLSBhIGZsdXNoIGV2ZW50Ci0KLVdoZW4gdGhlIHByZXJvbGwgaXMgdW5sb2NrZWQgYnkgYSBmbHVzaCBldmVudCwgYSByZXR1cm4gdmFsdWUgb2YKLUdTVF9GTE9XX0ZMVVNISU5HIGlzIHRvIGJlIHJldHVybmVkIHRvIHRoZSBwZWVyIHBhZC4KLQotV2hlbiBwcmVyb2xsIGlzIHVubG9ja2VkIGJ5IGEgc3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcsIHBsYXliYWNrIGFuZAotcmVuZGVyaW5nIG9mIHRoZSBidWZmZXJzIHNoYWxsIHN0YXJ0LgotCi1XaGVuIHByZXJvbGwgaXMgdW5sb2NrZWQgYnkgYSBzdGF0ZSBjaGFuZ2UgdG8gUkVBRFksIHRoZSBidWZmZXIgaXMKLXRvIGJlIGRpc2NhcmRlZCBhbmQgYSBHU1RfRkxPV19GTFVTSElORyBzaGFsbCBiZSByZXR1cm5lZCB0byB0aGUKLXBlZXIgZWxlbWVudC4KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1wcm9iZXMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1wcm9iZXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmZmODI2Li4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtcHJvYmVzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM2MiArMCwwIEBACi1Qcm9iZXMKLS0tLS0tLQotCi0gUHJvYmVzIGFyZSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgaW5zdGFsbGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQgd2lsbCBub3RpZnkKLSB0aGUgYXBwbGljYXRpb24gYWJvdXQgdGhlIHN0YXRlcyBvZiB0aGUgZGF0YWZsb3cuCi0KLQotUmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0KLQotQXBwbGljYXRpb25zIHNob3VsZCBiZSBhYmxlIHRvIG1vbml0b3IgYW5kIGNvbnRyb2wgdGhlIGRhdGFmbG93IG9uIHBhZHMuIFdlCi1pZGVudGlmeSB0aGUgZm9sbG93aW5nIHR5cGVzOgotCi0gLSBiZSBub3RpZmllZCB3aGVuIHRoZSBwYWQgaXMvYmVjb21lcyBpZGxlIGFuZCBtYWtlIHN1cmUgdGhlIHBhZCBzdGF5cyBpZGxlLgotICAgVGhpcyBpcyBlc3NlbnRpYWwgdG8gYmUgYWJsZSB0byBpbXBsZW1lbnQgZHluYW1pYyByZWxpbmtpbmcgb2YgZWxlbWVudHMKLSAgIHdpdGhvdXQgYnJlYWtpbmcgdGhlIGRhdGFmbG93LgotCi0gLSBiZSBub3RpZmllZCB3aGVuIGRhdGEsIGV2ZW50cyBvciBxdWVyaWVzIGFyZSBwdXNoZWQgb3Igc2VudCBvbiBhIHBhZC4gSXQKLSAgIHNob3VsZCBhbHNvIGJlIHBvc3NpYmxlIHRvIGluc3BlY3QgYW5kIG1vZGlmeSB0aGUgZGF0YS4KLSAKLSAtIGJlIGFibGUgdG8gZHJvcCwgcGFzcyBhbmQgYmxvY2sgb24gZGF0YSBiYXNlZCBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsYmFjay4KLQotIC0gYmUgYWJsZSB0byBkcm9wLCBwYXNzIGRhdGEgb24gYmxvY2tpbmcgcGFkcyBiYXNlZCBvbiBtZXRob2RzIHBlcmZvcm1lZCBieQotICAgdGhlIGFwcGxpY2F0aW9uIHRocmVhZC4KLQotCi1PdmVydmlldwotLS0tLS0tLS0KLQotIFRoZSBmdW5jdGlvbiBnc3RfcGFkX2FkZF9wcm9iZSgpIGlzIHVzZWQgdG8gYWRkIGEgcHJvYmUgdG8gYSBwYWQuIEl0IGFjY2VwdHMgYQotIHByb2JlIHR5cGUgbWFzayBhbmQgYSBjYWxsYmFjay4KLQotICAgZ3Vsb25nICBnc3RfcGFkX2FkZF9wcm9iZSAgICAoR3N0UGFkICpwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRQcm9iZVR5cGUgbWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZFByb2JlQ2FsbGJhY2sgY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2RhdGEpOwotCi0gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBndWxvbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBwcm9iZSBhbmQgdGhhdCBjYW4KLSBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgcHJvYmUgd2l0aCBnc3RfcGFkX3JlbW92ZV9wcm9iZSgpOgotCi0gICB2b2lkICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChHc3RQYWQgKnBhZCwgZ3Vsb25nIGlkKTsKLQotIFRoZSBtYXNrIHBhcmFtZXRlciBpcyBhIGJpdHdpc2Ugb3Igb2YgdGhlIGZvbGxvd2luZyBmbGFnczoKLSAgCi0gICAgdHlwZWRlZiBlbnVtCi0gICAgewotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0lOVkFMSUQgICAgICAgICAgPSAwLAotCi0gICAgICAvKiBmbGFncyB0byBjb250cm9sIGJsb2NraW5nICovCi0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfSURMRSAgICAgICAgICAgICA9ICgxIDw8IDApLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLICAgICAgICAgICAgPSAoMSA8PCAxKSwKLQotICAgICAgLyogZmxhZ3MgdG8gc2VsZWN0IGRhdGF0eXBlcyAqLwotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiAgICAgICAgICAgPSAoMSA8PCA0KSwKLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVJfTElTVCAgICAgID0gKDEgPDwgNSksCi0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSA9ICgxIDw8IDYpLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX1VQU1RSRUFNICAgPSAoMSA8PCA3KSwKLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCAgICAgID0gKDEgPDwgOCksCi0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTSA9ICgxIDw8IDkpLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX1VQU1RSRUFNICAgPSAoMSA8PCAxMCksCi0KLSAgICAgIC8qIGZsYWdzIHRvIHNlbGVjdCBzY2hlZHVsaW5nIG1vZGUgKi8KLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIICAgICAgICAgICAgID0gKDEgPDwgMTIpLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwgICAgICAgICAgICAgPSAoMSA8PCAxMyksCi0KLSAgICB9IEdzdFBhZFByb2JlVHlwZTsKLQotIFdoZW4gYWRkaW5nIGEgcHJvYmUgd2l0aCB0aGUgSURMRSBvciBCTE9DSyBmbGFnLCB0aGUgcHJvYmUgd2lsbCBiZWNvbWUgYQotIGJsb2NraW5nIHByb2JlIChzZWUgYmVsb3cpLiBPdGhlcndpc2UgdGhlIHByb2JlIHdpbGwgYmUgYSBEQVRBIHByb2JlLgotCi0gVGhlIGRhdGF0eXBlIGFuZCBzY2hlZHVsaW5nIHNlbGVjdG9yIGZsYWdzIGFyZSB1c2VkIHRvIHNlbGVjdCB3aGF0IGtpbmQgb2YKLSBkYXRhdHlwZXMgYW5kIHNjaGVkdWxpbmcgbW9kZXMgc2hvdWxkIGJlIGFsbG93ZWQgaW4gdGhlIGNhbGxiYWNrLgotIAotIFRoZSBibG9ja2luZyBmbGFncyBtdXN0IG1hdGNoIHRoZSB0cmlnZ2VyZWQgcHJvYmUgZXhhY3RseS4KLQotIFRoZSBwcm9iZSBjYWxsYmFjayBpcyBkZWZpbmVkIGFzOgotCi0gICBHc3RQYWRQcm9iZVJldHVybiAoKkdzdFBhZFByb2JlQ2FsbGJhY2spIChHc3RQYWQgKnBhZCwgR3N0UGFkUHJvYmVJbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotIEEgcHJvYmUgaW5mbyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IGFuZCBpdHMgdHlwZSBpcyBndWFyYW50ZWVkCi0gdG8gbWF0Y2ggdGhlIG1hc2sgdGhhdCB3YXMgdXNlZCB0byByZWdpc3RlciB0aGUgY2FsbGJhY2suIFRoZSBkYXRhIGl0ZW0gaW4gdGhlCi0gaW5mbyBjb250YWlucyB0eXBlIHNwZWNpZmljIGRhdGEsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGRhdGEgaXRlbSB0aGF0IGlzIGJsb2NrZWQKLSBvciBOVUxMIHdoZW4gbm8gZGF0YSBpdGVtIGlzIHByZXNlbnQuICAKLSAKLSBUaGUgcHJvYmUgY2FuIHJldHVybiBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm4gdmFsdWVzOgotCi0gICB0eXBlZGVmIGVudW0KLSAgIHsKLSAgICAgR1NUX1BBRF9QUk9CRV9EUk9QLAotICAgICBHU1RfUEFEX1BST0JFX09LLAotICAgICBHU1RfUEFEX1BST0JFX1JFTU9WRSwKLSAgICAgR1NUX1BBRF9QUk9CRV9QQVNTLAotICAgfSBHc3RQYWRQcm9iZVJldHVybjsKLQotIEdTVF9QQURfUFJPQkVfT0sgaXMgdGhlIG5vcm1hbCByZXR1cm4gdmFsdWUuICBEUk9QIHdpbGwgZHJvcCB0aGUgaXRlbSB0aGF0IGlzCi0gY3VycmVudGx5IGJlaW5nIHByb2JlZC4gR1NUX1BBRF9QUk9CRV9SRU1PVkUgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJvYmUgZnJvbSB0aGUKLSBsaXN0IG9mIHByb2Jlcy4gCi0gCi0gR1NUX1BBRF9QUk9CRV9QQVNTIGlzIHJlbGV2YW50IGZvciBibG9ja2luZyBwcm9iZXMgYW5kIHdpbGwgdGVtcG9yYXJpbHkgdW5ibG9jayB0aGUKLSBwYWQgYW5kIGxldCB0aGUgaXRlbSB0cm91Z2gsIGl0IHdpbGwgdGhlbiBibG9jayBhZ2FpbiBvbiB0aGUgbmV4dCBpdGVtLgotCi0KLUJsb2NraW5nIHByb2JlcwotLS0tLS0tLS0tLS0tLS0tCi0KLSAgQmxvY2tpbmcgcHJvYmVzIGFyZSBwcm9iZXMgd2l0aCBCTE9DSyBvciBJRExFIGZsYWdzIHNldC4gVGhleSB3aWxsIGFsd2F5cwotICBibG9jayB0aGUgZGF0YWZsb3cgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgotCi0gIFdoZW4gdGhlIElETEUgZmxhZyBpcyBzZXQsIHRoZSBwcm9iZSBjYWxsYmFjayBpcyBjYWxsZWQgYXMgc29vbiBhcyBubyBkYXRhIGlzCi0gIGZsb3dpbmcgb3ZlciB0aGUgcGFkLiBJZiBhdCB0aGUgdGltZSBvZiBwcm9iZSByZWdpc3RyYXRpb24sIHRoZSBwYWQgaXMgaWRsZSwKLSAgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGZyb20gdGhlIGN1cnJlbnQgdGhyZWFkLiBPdGhlcndpc2UsCi0gIHRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBhcyBzb29uIGFzIHRoZSBwYWQgYmVjb21lcyBpZGxlIGluIHRoZSBzdHJlYW1pbmcKLSAgdGhyZWFkLgotCi0gIFRoZSBJRExFIHByb2JlIGlzIHVzZWZ1bCB0byBwZXJmb3JtIGR5bmFtaWMgbGlua2luZywgaXQgYWxsb3dzIHRvIHdhaXQgZm9yIGZvcgotICBhIHNhZmUgbW9tZW50IHdoZW4gYW4gdW5saW5rL2xpbmsgb3BlcmF0aW9uIGNhbiBiZSBkb25lLiBTaW5jZSB0aGUgcHJvYmUgaXMgYQotICBibG9ja2luZyBwcm9iZSwgaXQgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWQgc3RheXMgaWRsZSB1bnRpbCB0aGUgcHJvYmUKLSAgaXMgcmVtb3ZlZC4KLQotICBXaGVuIHRoZSBCTE9DSyBmbGFnIGlzIHNldCwgdGhlIHByb2JlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW4gbmV3IGRhdGEKLSAgYXJyaXZlcyBvbiB0aGUgcGFkIGFuZCByaWdodCBiZWZvcmUgdGhlIHBhZCBnb2VzIGludG8gdGhlIGJsb2NraW5nIHN0YXRlLiBUaGlzCi0gIGNhbGxiYWNrIGlzIHRodXMgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBuZXcgZGF0YSBvbiB0aGUgcGFkLgotCi0gIFRoZSBibG9ja2luZyBwcm9iZSBpcyByZW1vdmVkIHdpdGggZ3N0X3BhZF9yZW1vdmVfcHJvYmUoKSBvciB3aGVuIHRoZSBwcm9iZQotICBjYWxsYmFjayByZXR1cm4gR1NUX1BBRF9QUk9CRV9SRU1PVkUuIEluIGJvdGggY2FzZXMsIGFuZCBpZiB0aGlzIHdhcyB0aGUgbGFzdAotICBibG9ja2luZyBwcm9iZSBvbiB0aGUgcGFkLCB0aGUgcGFkIGlzIHVuYmxvY2tlZCBhbmQgZGF0YWZsb3cgY2FuIGNvbnRpbnVlLgotCi0KLU5vbi1CbG9ja2luZyBwcm9iZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgTm9uLWJsb2NraW5nIHByb2JlcyBvciBEQVRBIHByb2JlcyBhcmUgcHJvYmVzIHRyaWdnZXJlZCB3aGVuIGRhdGEgaXMgZmxvd2luZwotICBvdmVyIHRoZSBwYWQuIFRoZSBhcmUgY2FsbGVkIGFmdGVyIHRoZSBibG9ja2luZyBwcm9iZXMgYXJlIHJ1biBhbmQgYWx3YXlzIHdpdGgKLSAgZGF0YS4KLQotCi1QdXNoIGRhdGFmbG93Ci0tLS0tLS0tLS0tLS0tCi0KLVB1c2ggcHJvYmVzIGhhdmUgdGhlIEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIIGZsYWcgc2V0IGluIHRoZSBjYWxsYmFja3MuCi0KLUluIHB1c2ggYmFzZWQgc2NoZWR1bGluZywgdGhlIGJsb2NraW5nIHByb2JlIGlzIGNhbGxlZCBmaXJzdCB3aXRoIHRoZSBkYXRhIGl0ZW0uCi1UaGVuIHRoZSBkYXRhIHByb2JlcyBhcmUgY2FsbGVkIGJlZm9yZSB0aGUgcGVlciBwYWQgY2hhaW4gb3IgZXZlbnQgZnVuY3Rpb24gaXMKLWNhbGxlZC4KLQotVGhlIGRhdGEgcHJvYmVzIGFyZSBjYWxsZWQgYmVmb3JlIHRoZSBwZWVyIHBhZCBpcyBjaGVja2VkLiBUaGlzIGFsbG93cyBmb3IKLWxpbmtpbmcgdGhlIHBhZCBpbiBlaXRoZXIgdGhlIEJMT0NLIG9yIERBVEEgcHJvYmVzIG9uIHRoZSBwYWQuCi0KLUJlZm9yZSB0aGUgcGVlcnBhZCBjaGFpbiBvciBldmVudCBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBwZWVyIHBhZCBibG9jayBhbmQKLWRhdGEgcHJvYmVzIGFyZSBjYWxsZWQuCi0KLUZpbmFsbHksIHRoZSBJRExFIHByb2JlIGlzIGNhbGxlZCBvbiB0aGUgcGFkIGFmdGVyIHRoZSBkYXRhIHdhcyBzZW50IHRvIHRoZQotcGVlciBwYWQuCi0KLVRoZSBwdXNoIGRhdGFmbG93IHByb2JlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBiaWRpcmVjdGlvbmFsIGV2ZW50cy4KLQotCi0gICAgICAgICAgICAgICAgICAgICBwYWQgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVycGFkCi0gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gZ3N0X3BhZF9wdXNoKCkgLyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gZ3N0X3BhZF9wdXNoX2V2ZW50KCkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gLS0tLS0tLS0tLS0tLS0tLS0tLS0+TyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAotICAgICAgICBmbHVzaGluZz8gICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKLSAgICAgICAgRkxVU0hJTkcgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgPCAtIC0gLSAtIC0gLSBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCi0gICAgICAgICAgICAgICAgICAgICAgTy0+IGRvIEJMT0NLIHByb2JlcyAgICAgICAgICAgICB8IAotICAgICAgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKLSAgICAgICAgICAgICAgICAgICAgICBPLT4gZG8gREFUQSBwcm9iZXMgICAgICAgICAgICAgIHwgCi0gICAgICAgICBubyBwZWVyPyAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgIE5PVF9MSU5LRUQgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAotICAgICAgICA8IC0gLSAtIC0gLSAtIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgIE8gICBnc3RfcGFkX2NoYWluKCkgLyAgICAgICAgICAgfCAKLSAgICAgICAgICAgICAgICAgICAgICBPICAgZ3N0X3BhZF9zZW5kX2V2ZW50KCkgICAgICAgIHwgCi0gICAgICAgICAgICAgICAgICAgICAgTy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5PCi0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICBmbHVzaGluZz8gICBPIAotICAgICAgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgICAgRkxVU0hJTkcgICAgTyAKLSAgICAgICAgICAgICAgICAgICAgICBPPCAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLU8gCi0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPLT4gZG8gQkxPQ0sgcHJvYmVzCi0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPIAotICAgICAgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTy0+IGRvIERBVEEgcHJvYmVzCi0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPIAotICAgICAgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTy0tLT4gY2hhaW5mdW5jIC8KLSAgICAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gICAgIGV2ZW50ZnVuYwotICAgICAgICAgICAgICAgICAgICAgIE88IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtTyAKLSAgICAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICBPLT4gZG8gSURMRSBwcm9iZXMgICAgICAgICAgICAgIHwgCi0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAotICAgICAgICA8IC0gLSAtIC0gLSAtIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKLSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCi0KLQotUHVsbCBkYXRhZmxvdwotLS0tLS0tLS0tLS0tLQotCi1QdWxsIHByb2JlcyBoYXZlIHRoZSBHU1RfUEFEX1BST0JFX1RZUEVfUFVMTCBmbGFnIHNldCBpbiB0aGUgY2FsbGJhY2tzLgotCi1UaGUgZ3N0X3BhZF9wdWxsX3JhbmdlKCkgY2FsbCB3aWxsIGZpcnN0IHRyaWdnZXIgdGhlIEJMT0NLIHByb2JlcyB3aXRob3V0IGEgREFUQQotaXRlbS4gVGhpcyBhbGxvd3MgdGhlIHBhZCB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBwZWVyIHBhZCBpcyByZXNvbHZlZC4gSXQgYWxzbwotYWxsb3dzIHRoZSBjYWxsYmFjayB0byBzZXQgYSBkYXRhIGl0ZW0gaW4gdGhlIHByb2JlIGluZm8uCi0KLUFmdGVyIHRoZSBibG9ja2luZyBwcm9iZSBhbmQgdGhlIGdldHJhbmdlIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB0aGUgcGVlciBwYWQKLWFuZCB0aGVyZSBpcyBhIGRhdGEgaXRlbSwgdGhlIERBVEEgcHJvYmVzIGFyZSBjYWxsZWQuCi0KLVdoZW4gY29udHJvbCByZXR1cm5zIHRvIHRoZSBzaW5rcGFkLCB0aGUgSURMRSBjYWxsYmFja3MgYXJlIGNhbGxlZC4gVGhlIElETEUKLWNhbGxiYWNrIGlzIGNhbGxlZCB3aXRob3V0IGEgZGF0YSBpdGVtIHNvIHRoYXQgaXQgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHRoZXJlCi13YXMgYW4gZXJyb3IuCi0KLUlmIHRoZXJlIGlzIGEgdmFsaWQgREFUQSBpdGVtLCB0aGUgREFUQSBwcm9iZXMgYXJlIGNhbGxlZCBmb3IgdGhlIGl0ZW0uCi0KLQotICAgICAgICAgICAgICAgICBzcmNwYWQgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtwYWQKLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3N0X3BhZF9wdWxsX3JhbmdlKCkKLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE88LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPCi0gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPICBmbHVzaGluZz8KLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gIEZMVVNISU5HIAotICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyAtIC0gLSAtIC0gLSAtIC0gLSAtID4KLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIGRvIEJMT0NLIHByb2JlcyA8LU8KLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gICBubyBwZWVyPwotICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyAgTk9UX0xJTktFRAotICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyAtIC0gLSAtIC0gLSAtIC0gLSAtID4KLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIGdzdF9wYWRfZ2V0X3JhbmdlKCkgIE8KLSAgICAgICAgICAgICAgICAgICBPPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU8KLSAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8KLSAgICAgICAgICAgICAgICAgICBPIGZsdXNoaW5nPyAgICAgICAgICAgICAgICAgICAgIE8KLSAgICAgICAgICAgICAgICAgICBPIEZMVVNISU5HICAgICAgICAgICAgICAgICAgICAgIE8KLSAgICAgICAgICAgICAgICAgICBPLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gPk8KLSBkbyBCTE9DSyBwcm9iZXMgPC1PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8KLSAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8KLSAgZ2V0cmFuZ2VmdW5jIDwtLS1PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8KLSAgICAgICAgICAgICAgICAgICBPICBmbG93IGVycm9yPyAgICAgICAgICAgICAgICAgIE8KLSAgICAgICAgICAgICAgICAgICBPLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gPk8KLSAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8KLSAgZG8gREFUQSBwcm9iZXMgPC1PICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8KLSAgICAgICAgICAgICAgICAgICBPLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gPk8KLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gCi0gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgZG8gSURMRSBwcm9iZXMgPC1PICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPICAgZmxvdyBlcnJvcj8KLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gLSAtIC0gLSAtIC0gLSAtIC0gLSA+Ci0gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPCi0gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgZG8gREFUQSBwcm9iZXMgPC1PICAKLSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gLSAtIC0gLSAtIC0gLSAtIC0gLSA+Ci0gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0KLQotUXVlcmllcwotLS0tLS0tLQotCi1RdWVyeSBwcm9iZXMgaGF2ZSB0aGUgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZXyogZmxhZyBzZXQgaW4gdGhlIGNhbGxiYWNrcy4KLQotCi0gICAgICAgICAgICAgICAgICAgICBwYWQgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVycGFkCi0gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gZ3N0X3BhZF9wZWVyX3F1ZXJ5KCkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gLS0tLS0tLS0tLS0tLS0tLS0tLS0+TyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAotICAgICAgICAgICAgICAgICAgICAgIE8tPiBkbyBCTE9DSyBwcm9iZXMgICAgICAgICAgICAgfCAKLSAgICAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCi0gICAgICAgICAgICAgICAgICAgICAgTy0+IGRvIFFVRVJZIHwgUFVTSCBwcm9iZXMgICAgICB8IAotICAgICAgICAgbm8gcGVlcj8gICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICBGQUxTRSAgICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKLSAgICAgICAgPCAtIC0gLSAtIC0gLSBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICBPICAgZ3N0X3BhZF9xdWVyeSgpICAgICAgICAgICAgIHwgCi0gICAgICAgICAgICAgICAgICAgICAgTy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5PCi0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPLT4gZG8gQkxPQ0sgcHJvYmVzCi0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPIAotICAgICAgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTy0+IGRvIFFVRVJZIHwgUFVTSCBwcm9iZXMKLSAgICAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gCi0gICAgICAgICAgICAgICAgICAgICAgTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPLS0tPiBxdWVyeWZ1bmMKLSAgICAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICBlcnJvciAgICAgIE8gCi0gICAgICAgIDwtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1PIAotICAgICAgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyAKLSAgICAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8tPiBkbyBRVUVSWSB8IFBVTEwgcHJvYmVzCi0gICAgICAgICAgICAgICAgICAgICAgTzwgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC1PIAotICAgICAgICAgICAgICAgICAgICAgIE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgIE8tPiBkbyBRVUVSWSB8IFBVTEwgcHJvYmVzICAgICAgfCAKLSAgICAgICAgICAgICAgICAgICAgICBPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCi0gICAgICAgIDwgLSAtIC0gLSAtIC0gTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAotICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKLQotRm9yIHF1ZXJpZXMsIHRoZSBQVVNIIFByb2JlVHlwZSBpcyBzZXQgd2hlbiB0aGUgcXVlcnkgaXMgdHJhdmVsaW5nIHRvIHRoZSBvYmplY3QKLXRoYXQgd2lsbCBhbnN3ZXIgdGhlIHF1ZXJ5IGFuZCB0aGUgUFVMTCB0eXBlIGlzIHNldCB3aGVuIHRoZSBxdWVyeSBjb250YWlucyB0aGUKLWFuc3dlci4KLQotVXNlLWNhc2VzCi0tLS0tLS0tLS0KLQotUHJlcm9sbGluZyBhIHBhcnRpYWwgcGlwZWxpbmUKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLSAuLS0tLS0tLS0tLiAgICAgIC4tLS0tLS0tLS0uICAgICAgICAgICAgICAgIC4tLS0tLS0tLS0tLgotIHwgZmlsZXNyYyB8ICAgICAgfCBkZW11eGVyIHwgICAgIC4tLS0tLS4gICAgfCBkZWNvZGVyMSB8Ci0gfCAgICAgICAgc3JjIC0+IHNpbmsgICAgICBzcmMxIC0+fHF1ZXVlfC0+IHNpbmsgICAgICAgc3JjIAotICctLS0tLS0tLS0nICAgICAgfCAgICAgICAgIHwgICAgICctLS0tLScgICAgJy0tLS0tLS0tLS0nIFgKLSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgIC4tLS0tLS0tLS0tLgotICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIC4tLS0tLS4gICAgfCBkZWNvZGVyMiB8Ci0gICAgICAgICAgICAgICAgICB8ICAgICAgICBzcmMyIC0+fHF1ZXVlfC0+IHNpbmsgICAgICAgc3JjCi0gICAgICAgICAgICAgICAgICAnLS0tLS0tLS0tJyAgICAgJy0tLS0tJyAgICAnLS0tLS0tLS0tLScgWAotCi0KLVRoZSBwdXJwb3NlIGlzIHRvIGNyZWF0ZSB0aGUgcGlwZWxpbmUgZHluYW1pY2FsbHkgdXAgdG8gdGhlCi1kZWNvZGVycyBidXQgbm90IHlldCBjb25uZWN0IHRoZW0gdG8gYSBzaW5rIGFuZCB3aXRob3V0IGxvc2luZwotYW55IGRhdGEuCi0KLVRvIGRvIHRoaXMsIHRoZSBzb3VyY2UgcGFkcyBvZiB0aGUgZGVjb2RlcnMgaXMgYmxvY2tlZCBzbyB0aGF0IG5vCi1ldmVudHMgb3IgYnVmZmVycyBjYW4gZXNjYXBlIGFuZCB3ZSBkb24ndCBpbnRlcnJ1cHQgdGhlIHN0cmVhbS4KLQotV2hlbiBhbGwgb2YgdGhlIGR5bmFtaWMgcGFkIGFyZSBjcmVhdGVkIChuby1tb3JlLXBhZHMgZW1pdHRlZCBieSB0aGUKLWJyYW5jaGluZyBwb2ludCwgaWUsIHRoZSBkZW11eGVyIG9yIHRoZSBxdWV1ZXMgZmlsbGVkKSBhbmQgdGhlIHBhZHMKLWFyZSBibG9ja2VkIChibG9ja2VkIGNhbGxiYWNrIHJlY2VpdmVkKSB0aGUgcGlwZWxpbmUgaXMgY29tcGxldGVseQotcHJlcm9sbGVkLgotCi1JdCBzaG91bGQgdGhlbiBiZSBwb3NzaWJsZSB0byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBvbiB0aGUKLXByZXJvbGxlZCBwaXBlbGluZToKLQotLSBxdWVyeSBkdXJhdGlvbi9wb3NpdGlvbgotLSBwZXJmb3JtIGEgZmx1c2hpbmcgc2VlayB0byBwcmVyb2xsIGEgbmV3IHBvc2l0aW9uCi0tIGNvbm5lY3Qgb3RoZXIgZWxlbWVudHMgYW5kIHVuYmxvY2sgdGhlIGJsb2NrZWQgcGFkcy4KLQotCi1keW5hbWljYWxseSBzd2l0Y2hpbmcgYW4gZWxlbWVudCBpbiBhIFBMQVlJTkcgcGlwZWxpbmUKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi0KLSAgLi0tLS0tLS0tLS0uICAgICAgLi0tLS0tLS0tLS0uICAgICAgLi0tLS0tLS0tLS0uCi0gIHwgZWxlbWVudDEgfCAgICAgIHwgZWxlbWVudDIgfCAgICAgIHwgZWxlbWVudDMgfAotIC4uLiAgICAgICAgc3JjIC0+IHNpbmsgICAgICAgc3JjIC0+IHNpbmsgICAgICAgLi4uCi0gICctLS0tLS0tLS0tJyAgICAgICctLS0tLS0tLS0tJyAgICAgICctLS0tLS0tLS0tJwotICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLS0tLS4KLSAgICAgICAgICAgICAgICAgICAgfCBlbGVtZW50NCB8Ci0gICAgICAgICAgICAgICAgICAgc2luayAgICAgICBzcmMgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgJy0tLS0tLS0tLS0nICAgICAgICAgICAgICAgICAgICAgCi0KLVRoZSBwdXJwb3NlIGlzIHRvIHJlcGxhY2UgZWxlbWVudDIgd2l0aCBlbGVtZW50NCBpbiB0aGUgUExBWUlORyAKLXBpcGVsaW5lLiAKLQotICAxKSBibG9jayBlbGVtZW50MSBzcmMgcGFkLgotICAyKSBpbnNpZGUgdGhlIGJsb2NrIGNhbGxiYWNrIG5vdGhpbmcgaXMgZmxvd2luZyBiZXR3ZWVuCi0gICAgIGVsZW1lbnQxIGFuZCBlbGVtZW50MiBhbmQgbm90aGluZyB3aWxsIGZsb3cgdW50aWwgdW5ibG9ja2VkLgotICAzKSB1bmxpbmsgZWxlbWVudDEgYW5kIGVsZW1lbnQyCi0gIDQpIG9wdGlvbmFsIHN0ZXA6IG1ha2Ugc3VyZSBkYXRhIGlzIGZsdXNoZWQgb3V0IG9mIGVsZW1lbnQyOgotICAgICA0YSkgcGFkIGV2ZW50IHByb2JlIG9uIGVsZW1lbnQyIHNyYwotICAgICA0Yikgc2VuZCBFT1MgdG8gZWxlbWVudDIsIHRoaXMgbWFrZXMgc3VyZSB0aGF0IGVsZW1lbnQyIGZsdXNoZXMKLSAgICAgICAgIG91dCB0aGUgbGFzdCBiaXRzIG9mIGRhdGEgaXQgaG9sZHMuCi0gICAgIDRjKSB3YWl0IGZvciBFT1MgdG8gYXBwZWFyIGluIHRoZSBwcm9iZSwgZHJvcCB0aGUgRU9TLgotICAgICA0ZCkgcmVtb3ZlIHRoZSBFT1MgcGFkIGV2ZW50IHByb2JlLgotICA1KSB1bmxpbmsgZWxlbWVudDIgYW5kIGVsZW1lbnQzCi0gICAgIDVhKSBvcHRpb25hbGx5IGVsZW1lbnQyIGNhbiBub3cgYmUgc2V0IHRvIE5VTEwgYW5kL29yIHJlbW92ZWQgZnJvbSB0aGUKLSAgICAgICAgIHBpcGVsaW5lLgotICA2KSBsaW5rIGVsZW1lbnQ0IGFuZCBlbGVtZW50MwotICA3KSBsaW5rIGVsZW1lbnQxIGFuZCBlbGVtZW50NAotICA4KSBtYWtlIHN1cmUgZWxlbWVudDQgaXMgaW4gdGhlIHNhbWUgc3RhdGUgYXMgdGhlIHJlc3Qgb2YgdGhlIGVsZW1lbnRzLiBUaGUKLSAgICAgZWxlbWVudCBzaG91bGQgYXQgbGVhc3QgYmUgUEFVU0VELgotICA5KSB1bmJsb2NrIGVsZW1lbnQxIHNyYwotCi1UaGUgc2FtZSBmbG93IGNhbiBiZSB1c2VkIHRvIHJlcGxhY2UgYW4gZWxlbWVudCBpbiBhIFBBVVNFRCBwaXBlbGluZS4gT2YKLWNvdXJzZSBpbiBhIFBBVVNFRCBwaXBlbGluZSB0aGVyZSBtaWdodCBub3QgYmUgZGF0YWZsb3cgc28gdGhlIGJsb2NrIG1pZ2h0Ci1ub3QgaW1tZWRpYXRlbHkgaGFwcGVuLgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1wcm9ncmVzcy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXByb2dyZXNzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3ODllNy4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LXByb2dyZXNzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi1Qcm9ncmVzcyBSZXBvcnRpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGVzaWduIGFuZCB1c2UgY2FzZXMgZm9yIHRoZSBwcm9ncmVzcyByZXBvcnRpbmcKLW1lc3NhZ2VzLgotCi1QUk9HUkVTUyBtZXNzYWdlcyBhcmUgcG9zdGVkIG9uIHRoZSBidXMgdG8gaW5mb3JtIHRoZSBhcHBsaWNhdGlvbiBhYm91dCB0aGUKLXByb2dyZXNzIG9mIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGluIHRoZSBwaXBlbGluZS4gVGhpcyBzaG91bGQgbm90IGJlIGNvbmZ1c2VkCi13aXRoIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLgotCi1XZSBhY2NvbW1vZGF0ZSBmb3IgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6Ci0KLSAtIEFwcGxpY2F0aW9uIGlzIGluZm9ybWVkIHdoZW4gYW4gYXN5bmMgb3BlcmF0aW9uIHN0YXJ0cyBhbmQgY29tcGxldGVzLgotIC0gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciB0aGUgYXBwbGljYXRpb24gdG8gZ2VuZXJpY2FsbHkgZGV0ZWN0IGNvbW1vbgotICAgb3BlcmF0aW9ucyBhbmQgaW5jb3Jwb3JhdGUgdGhlaXIgcHJvZ3Jlc3MgaW50byB0aGUgR1VJLgotIC0gQXBwbGljYXRpb25zIGNhbiBjYW5jZWwgcGVuZGluZyBvcGVyYXRpb25zIGJ5IGRvaW5nIHJlZ3VsYXIgc3RhdGUgY2hhbmdlcy4KLSAtIEFwcGxpY2F0aW9ucyBzaG91bGQgYmUgYWJsZSB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGFzeW5jIG9wZXJhdGlvbnMuCi0KLVdlIGFsbG93IGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvczoKLQotIC0gRWxlbWVudHMgd2FudCB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIGFib3V0IGFzeW5jaHJvbm91cyBETlMgbG9va3VwcyBhbmQKLSAgIHBlbmRpbmcgbmV0d29yayByZXF1ZXN0cy4gVGhpcyBpbmNsdWRlcyBzdGFydGluZyBhbmQgY29tcGxldGluZyB0aGUgbG9va3VwLgotIC0gRWxlbWVudHMgb3BlbmluZyBkZXZpY2VzIGFuZCByZXNvdXJjZXMgYXN5bmNocm9ub3VzbHkuCi0gLSBBcHBsaWNhdGlvbnMgaGF2aW5nIG1vcmUgZnJlZWRvbSB0byBpbXBsZW1lbnQgdGltZW91dCBhbmQgY2FuY2VsYXRpb24gb2YKLSAgIG9wZXJhdGlvbnMgdGhhdCBjdXJyZW50bHkgYmxvY2sgdGhlIHN0YXRlIGNoYW5nZXMgb3IgaGFwcGVuIGludmlzaWJseSBiZWhpbmQKLSAgIHRoZSBzY2VuZXMuCi0KLQotUmF0aW9uYWxlCi1+fn5+fn5+fn4KLQotVGhlIG1haW4gcmVhc29uIGZvciBhZGRpbmcgdGhlc2UgZXh0cmEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9ucyBpcyB0d29mb2xkOgotCi0gMSkgdG8gZ2l2ZSB0aGUgYXBwbGljYXRpb24gbW9yZSBpbmZvcm1hdGlvbiBvZiB3aGF0IGlzIGdvaW5nIG9uCi0KLSAgICBXaGVuIHRoZXJlIGFyZSB3ZWxsIGRlZmluZWQgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gY29kZXMsIGFwcGxpY2F0aW9ucwotICAgIGNhbiBsZXQgdGhlIHVzZXIga25vdyBhYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBwcm9ncmVzcy4gV2UgYW50aWNpcGF0ZSB0bwotICAgIGhhdmUgYXQgbGVhc3QgRE5TIHJlc29sdmluZyBhbmQgc2VydmVyIGNvbm5lY3Rpb25zIGFuZCByZXF1ZXN0cyBiZSB3ZWxsCi0gICAgZGVmaW5lZC4KLQotIDIpIFRvIG1ha2UgdGhlIHN0YXRlIGNoYW5nZXMgbm9uLWJsb2NraW5nIGFuZCBjYW5jZWxsYWJsZS4KLQotICAgIEN1cnJlbnRseSBzdGF0ZSBjaGFuZ2VzIHN1Y2ggYXMgZ29pbmcgdG8gdGhlIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSBvZnRlbiBkbwotICAgIGJsb2NraW5nIGNhbGxzIHN1Y2ggYXMgcmVzb2x2aW5nIEROUyBvciBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIHNlcnZlci4gVGhlc2UKLSAgICBvcGVyYXRpb25zIG9mdGVuIGJsb2NrIHRoZSBtYWluIHRocmVhZCBhbmQgYXJlIG9mdGVuIG5vdCBjYW5jZWxsYWJsZSwgY2F1c2luZwotICAgIGFwcGxpY2F0aW9uIGxvY2t1cHMuCi0KLSAgICBXZSB3b3VsZCBsaWtlIHRvIG1ha2UgdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiwgaW5zdGVhZCwgc3RhcnQgYSBzZXBhcmF0ZQotICAgIHRocmVhZCB0aGF0IHBlcmZvcm1zIHRoZSBibG9ja2luZyBvcGVyYXRpb25zIGluIGEgY2FuY2VsbGFibGUgd2F5LiBXaGVuIGdvaW5nCi0gICAgYmFjayB0byB0aGUgTlVMTCBzdGF0ZSwgYWxsIHBlbmRpbmcgb3BlcmF0aW9ucyB3b3VsZCBiZSBjYW5jZWxlZCBpbW1lZGlhdGVseS4KLQotICAgIEZvciBkb3dud2FyZCBzdGF0ZSBjaGFuZ2VzLCB3ZSB3YW50IHRvIGxldCB0aGUgYXBwbGljYXRpb24gaW1wbGVtZW50IGl0cyBvd24KLSAgICB0aW1lb3V0IG1lY2hhbmlzbS4gRm9yIGV4YW1wbGU6IHdoZW4gc3RvcHBpbmcgYW4gUlRTUCBzdHJlYW0sIHRoZSBjbGllbnRzCi0gICAgbmVlZHMgdG8gc2VuZCBhIFRFQVJET1dOIHJlcXVlc3QgdG8gdGhlIHNlcnZlci4gVGhpcyBjYW4gaG93ZXZlciB0YWtlIGFuCi0gICAgdW5saW1pdGVkIGFtb3VudCBvZiB0aW1lIGluIGNhc2Ugb2YgbmV0d29yayBwcm9ibGVtcy4gV2Ugd2FudCB0byBnaXZlIHRoZQotICAgIGFwcGxpY2F0aW9uIGFuIG9wcG9ydHVuaXR5IHRvIHdhaXQgKGFuZCB0aW1lb3V0KSBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlCi0gICAgYXN5bmMgb3BlcmF0aW9uIGJlZm9yZSBzZXR0aW5nIHRoZSBlbGVtZW50IHRvIHRoZSBmaW5hbCBOVUxMIHN0YXRlLgotCi1Qcm9ncmVzcyB1cGRhdGVzIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gYnVmZmVyaW5nIG1lc3NhZ2VzIGluIHRoZSBzYW1lIHdheSB0aGF0IHRoZQotYXBwbGljYXRpb24gY2FuIGRlY2lkZSB0byB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgYnVmZmVyaW5nIHByb2Nlc3MKLWJlZm9yZSBwZXJmb3JtaW5nIHRoZSBuZXh0IHN0YXRlIGNoYW5nZS4gSXQgbWlnaHQgbWFrZSBzZW5zZSB0byBpbXBsZW1lbnQKLWJ1ZmZlcmluZyB3aXRoIHRoZSBwcm9ncmVzcyBtZXNzYWdlcyBpbiB0aGUgZnV0dXJlLgotCi0KLUFzeW5jIHN0YXRlIGNoYW5nZXMKLX5+fn5+fn5+fn5+fn5+fn5+fn4KLQotR1N0cmVhbWVyIGN1cnJlbnRseSBoYXMgYSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DIHJldHVybiB2YWx1ZSB0byBub3RlIHRvIHRoZQotYXBwbGljYXRpb24gdGhhdCBhIHN0YXRlIGNoYW5nZSBpcyBoYXBwZW5pbmcgYXN5bmNocm9ub3VzbHkuCi0KLVRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZXR1cm4gdmFsdWUgaXMgdG8gbWFrZSB0aGUgcGlwZWxpbmUgd2FpdCBmb3IgcHJlcm9sbAotYW5kIGRlbGF5IGEgZnV0dXJlICh1cHdhcmRzKSBzdGF0ZSBjaGFuZ2VzIHVudGlsIHRoZSBzaW5rcyBhcmUgcHJlcm9sbGVkLgotCi1JbiB0aGUgY2FzZSBvZiBhc3luYyBvcGVyYXRpb25zIG9uIHNvdXJjZSwgdGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9yY2Ugc2lua3MKLXRvIHN0YXkgYXN5bmMgYmVjYXVzZSB0aGV5IHdpbGwgbm90IHByZXJvbGwgYmVmb3JlIHRoZSBzb3VyY2UgY2FuIHByb2R1Y2UgZGF0YS4KLQotVGhlIGZhY3QgdGhhdCBvdGhlciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBoYXBwZW4gYmVoaW5kIHRoZSBzY2VuZXMgaXMKLWlycmVsZXZhbnQgZm9yIHRoZSBwcmVyb2xsaW5nIHByb2Nlc3Mgc28gaXQgaXMgbm90IGltcGxlbWVudGVkIHdpdGggdGhlIEFTWU5DCi1zdGF0ZSBjaGFuZ2UgcmV0dXJuIHZhbHVlIGluIG9yZGVyIHRvIG5vdCBjb21wbGljYXRlIHRoZSBzdGF0ZSBjaGFuZ2VzIGFuZCBtaXgKLWNvbmNlcHRzLgotCi0KLVVzZSBjYXNlcwotfn5+fn5+fn5+Ci0KLSAqIFJUU1AgY2xpZW50IChidXQgYWxzbyBIVFRQLCBNTVMsIC4uLikKLQotICBXaGVuIHRoZSBjbGllbnQgZ29lcyBmcm9tIHRoZSBSRUFEWSB0byB0aGUgUEFVU0VEIHN0YXRlLCBpdCBvcGVucyBhIHNvY2tldCwKLSAgcGVyZm9ybXMgYSBETlMgbG9va3VwLCByZXRyaWV2ZXMgdGhlIFNEUCBhbmQgbmVnb3RpYXRlcyB0aGUgc3RyZWFtcy4gQWxsIHRoZXNlCi0gIG9wZXJhdGlvbnMgY3VycmVudGx5IGJsb2NrIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gZm9yIGFuIGluZGVmaW5pdGUgYW1vdW50Ci0gIG9mIHRpbWUgYW5kIHdoaWxlIHRoZXkgYXJlIGJsb2NraW5nIGNhbm5vdCBiZSBjYW5jZWxlZC4KLQotICBJbnN0ZWFkLCBhIHRocmVhZCB3b3VsZCBiZSBzdGFydGVkIHRvIHBlcmZvcm0gdGhlc2Ugb3BlcmF0aW9ucyBhc3luY2hyb25vdXNseQotICBhbmQgdGhlIHN0YXRlIGNoYW5nZSB3b3VsZCBjb21wbGV0ZSB3aXRoIHRoZSB1c3VhbCBOT19QUkVST0xMIHJldHVybiB2YWx1ZS4KLSAgQmVmb3JlIHN0YXJ0aW5nIHRoZSB0aHJlYWQgYSBQUk9HUkVTUyBtZXNzYWdlIHdvdWxkIGJlIHBvc3RlZCB0byBtYXJrIHRoZQotICBzdGFydCBvZiB0aGUgYXN5bmMgb3BlcmF0aW9uLgotCi0gIEFzIHRoZSBETlMgbG9va3VwIGNvbXBsZXRlcyBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIFBST0dSRVNTCi0gIG1lc3NhZ2VzIGFyZSBwb3N0ZWQgb24gdGhlIGJ1cyB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBwcm9ncmVzcy4gV2hlbgotICBzb21ldGhpbmcgZmFpbHMsIGFuIGVycm9yIGlzIHBvc3RlZCBhbmQgYSBQUk9HUkVTUyBDQU5DRUxFRCBtZXNzYWdlIGlzIHBvc3RlZC4KLSAgVGhlIGFwcGxpY2F0aW9uIGNhbiB0aGVuIHN0b3AgdGhlIHBpcGVsaW5lLgotCi0gIElmIHRoZXJlIGFyZSBubyBlcnJvcnMgYW5kIHRoZSBzZXR1cCBvZiB0aGUgc3RyZWFtcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBhCi0gIFBST0dSRVNTIENPTVBMRVRFRCBpcyBwb3N0ZWQgb24gdGhlIGJ1cy4gVGhlIHRocmVhZCB0aGVuIGdvZXMgdG8gc2xlZXAgYW5kIHRoZQotICBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGNvbXBsZXRlZC4KLQotICBUaGUgUlRTUCBwcm90b2NvbCByZXF1aXJlcyB0byBzZW5kIGEgVEVBUkRPV04gcmVxdWVzdCB0byB0aGUgc2VydmVyCi0gIGJlZm9yZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGFuZCBkZXN0cm95aW5nIHRoZSBzb2NrZXQuIEEgc3RhdGUgY2hhbmdlIHRvIHRoZQotICBSRUFEWSBzdGF0ZSB3aWxsIGlzc3VlIHRoZSBURUFSRE9XTiByZXF1ZXN0IGluIHRoZSBiYWNrZ3JvdW5kIGFuZCBub3RpZnkgdGhlCi0gIGFwcGxpY2F0aW9uIG9mIHRoaXMgcGVuZGluZyByZXF1ZXN0IHdpdGggYSBQUk9HUkVTUyBtZXNzYWdlLgotCi0gIFRoZSBhcHBsaWNhdGlvbiBtaWdodCB3YW50IHRvIG9ubHkgZ28gdG8gdGhlIE5VTEwgc3RhdGUgYWZ0ZXIgaXQgZ290IGNvbmZpcm1hdGlvbgotICB0aGF0IHRoZSBURUFSRE9XTiByZXF1ZXN0IGNvbXBsZXRlZCBvciBpdCBtaWdodCBjaG9vc2UgdG8gZ28gdG8gTlVMTCBhZnRlciBhCi0gIHRpbWVvdXQuIEl0IG1pZ2h0IGFsc28gYmUgcG9zc2libGUgdGhhdCB0aGUgYXBwbGljYXRpb24ganVzdCB3YW50IHRvIGNsb3NlIHRoZQotICBzb2NrZXQgYXMgZmFzdCBhcyBwb3NzaWJsZSB3aXRob3V0IHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gb2YgdGhlIFRFQVJET1dOIHJlcXVlc3QuCi0KLSAqIE5ldHdvcmsgcGVyZm9ybWFuY2UgbWVhc3VyaW5nCi0KLSAgRE5TIGxvb2t1cCBhbmQgY29ubmVjdGlvbiB0aW1lcyBjYW4gYmUgbWVhc3VyZWQgYnkgY2FsY3VsYXRpbmcgdGhlIGVsYXBzZWQKLSAgdGltZSBiZXR3ZWVuIHRoZSB2YXJpb3VzIFBST0dSRVNTIG1lc3NhZ2VzLgotCi0KLQotTWVzc2FnZXMKLX5+fn5+fn5+Ci0KLSBBIG5ldyBQUk9HUkVTUyBtZXNzYWdlIHdpbGwgYmUgY3JlYXRlZC4KLSBUaGUgZm9sbG93aW5nIGZpZWxkcyB3aWxsIGJlIGNvbnRhaW5lZCBpbiB0aGUgbWVzc2FnZToKLQotICAtICJ0eXBlIiwgR1NUX1RZUEVfUFJPR1JFU1NfVFlQRQotCi0gICAgICAtIGEgc2V0IG9mIHR5cGVzIHRvIGRlZmluZSB0aGUgdHlwZSBvZiBwcm9ncmVzcwotCi0gICAgICAgIEdTVF9QUk9HUkVTU19UWVBFX1NUQVJUOiBBIG5ldyB0YXNrIGlzIHN0YXJ0ZWQgaW4gdGhlIGJhY2tncm91bmQKLSAgICAgICAgR1NUX1BST0dSRVNTX1RZUEVfQ09OVElOVUU6IFRoZSBwcmV2aW91cyB0YXNrcyBjb21wbGV0ZWQgYW5kIGEgbmV3Ci0gICAgICAgICAgICAgICAgICBvbmUgY29udGludWVzLiBUaGlzIGlzIGRvbmUgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGZvbGxvdwotICAgICAgICAgICAgICAgICAgYSBzZXQgb2YgY29udGludW91cyB0YXNrcyBhbmQgcmVhY3QgdG8gQ09NUExFVEUgb25seSB3aGVuIHRoZQotICAgICAgICAgICAgICAgICAgZWxlbWVudCBjb21wbGV0ZWx5IGZpbmlzaGVkLgotICAgICAgICBHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRDogQSB0YXNrIGlzIGNhbmNlbGVkIGJ5IHRoZSB1c2VyLgotICAgICAgICBHU1RfUFJPR1JFU1NfVFlQRV9FUlJPUjogQSB0YXNrIHN0b3BwZWQgYmVjYXVzZSBvZiBhbiBlcnJvci4gSW4gY2FzZSBvZgotICAgICAgICAgICAgICAgICAgYW4gZXJyb3IsIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBoYXZlIGJlZW4gcG9zdGVkIGJlZm9yZS4KLSAgICAgICAgR1NUX1BST0dSRVNTX1RZUEVfQ09NUExFVEU6IEEgdGFzayBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgotCi0gIC0gImNvZGUiLCBHX1RZUEVfU1RSSU5HCi0KLSAgICAgQSBnZW5lcmljIGV4dGVuc2libGUgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvZ3JhbW1hdGljYWxseSBkZXRlcm1pbmUgdGhlCi0gICAgIGFjdGlvbiB0aGF0IGlzIGluIHByb2dyZXNzLiBTb21lIHN0YW5kYXJkIHByZWRlZmluZWQgY29kZXMgd2lsbCBiZQotICAgICBkZWZpbmVkLgotCi0gIC0gInRleHQiLCBHX1RZUEVfU1RSSU5HCi0KLSAgICAgQSB1c2VyIHZpc2libGUgc3RyaW5nIGRldGFpbGluZyB0aGUgYWN0aW9uLgotCi0gIC0gInBlcmNlbnQiLCBHX1RZUEVfSU5UICBiZXR3ZWVuIDAgYW5kIDEwMAotCi0gICAgUHJvZ3Jlc3Mgb2YgdGhlIGFjdGlvbiBhcyBhIHBlcmNlbnRhZ2UsIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBhbGxvd2VkOgotICAgICAgLSBHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCBhbHdheXMgaGFzIGEgMCUgdmFsdWUuCi0gICAgICAtIEdTVF9QUk9HUkVTU19UWVBFX0NPTlRJTlVFIGhhdmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMAotICAgICAgLSBHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRCwgR1NUX1BST0dSRVNTX1RZUEVfRVJST1IgYW5kCi0gICAgICAgIEdTVF9QUk9HUkVTU19UWVBFX0NPTVBMRVRFIGFsd2F5cyBoYXZlIGEgMTAwJSB2YWx1ZS4KLQotICAtICJ0aW1lb3V0IiwgR19UWVBFX0lOVCAgaW4gbWlsbGlzZWNvbmRzCi0KLSAgICAgVGhlIHRpbWVvdXQgb2YgdGhlIGFzeW5jIG9wZXJhdGlvbi4gLTEgaWYgdW5rbm93bi91bmxpbWl0ZWQuLgotICAgICBUaGlzIGZpZWxkIGNhbiBiZSBpbnRlcmVzdGluZyB0byB0aGUgYXBwbGljYXRpb24gd2hlbiBpdCB3YW50cyB0byBkaXNwbGF5Ci0gICAgIHNvbWUgc29ydCBvZiBwcm9ncmVzcyBpbmRpY2F0aW9uLgotCi0gIC0gLi4uLgotCi0gICAgIERlcGVuZGluZyBvbiB0aGUgY29kZSwgbW9yZSBmaWVsZHMgY2FuIGJlIHB1dCBoZXJlLgotCi0KLUltcGxlbWVudGF0aW9uCi1+fn5+fn5+fn5+fn5+fgotCi1FbGVtZW50cyBzaG91bGQgbm90IGRvIGJsb2NraW5nIG9wZXJhdGlvbnMgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLgotSW5zdGVhZCwgZWxlbWVudHMgc2hvdWxkIHBvc3QgYW4gYXBwcm9wcmlhdGUgcHJvZ3Jlc3MgbWVzc2FnZSB3aXRoIHRoZSByaWdodAotY29kZSBhbmQgb2YgdHlwZSBHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCBhbmQgdGhlbiBzdGFydCBhIHRocmVhZCB0byBwZXJmb3JtCi10aGUgYmxvY2tpbmcgY2FsbHMgaW4gYSBjYW5jZWxsYWJsZSBtYW5uZXIuCi0KLUl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBvbmx5IHN0YXJ0IGFzeW5jIG9wZXJhdGlvbnMgZnJvbSB0aGUgUkVBRFkgdG8gUEFVU0VECi1zdGF0ZSBhbmQgb253YXJkcyBhbmQgbm90IGZyb20gdGhlIE5VTEwgdG8gUkVBRFkgc3RhdGUuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMKLXRoYXQgc3RyZWFtaW5nIHRocmVhZHMgYXJlIHVzdWFsbHkgc3RhcnRlZCBpbiB0aGUgUkVBRFkgdG8gUEFVU0VEIHN0YXRlIGFuZCB0aGF0Ci10aGUgY3VycmVudCBOVUxMIHRvIFJFQURZIHN0YXRlIGNoYW5nZSBpcyB1c2VkIHRvIHBlcmZvcm0gYSBibG9ja2luZyBjaGVjayBmb3IKLXRoZSBwcmVzZW5jZSBvZiBkZXZpY2VzLgotCi1UaGUgcHJvZ3Jlc3MgbWVzc2FnZSBuZWVkcyB0byBiZSBwb3N0ZWQgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHNvIHRoYXQKLXRoZSBhcHBsaWNhdGlvbiBjYW4gaW1tZWRpYXRlbHkgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gYWZ0ZXIgc2V0dGluZyB0aGUgc3RhdGUuCi0KLVRoZSB0aHJlYWRzIHdpbGwgdXN1YWxseSBwZXJmb3JtIG1hbnkgYmxvY2tpbmcgY2FsbHMgd2l0aCBkaWZmZXJlbnQgY29kZXMKLWluIGEgcm93LCBhIGNsaWVudCBtaWdodCBmaXJzdCBkbyBhIEROUyBxdWVyeSBhbmQgdGhlbiBjb250aW51ZSB3aXRoCi1lc3RhYmxpc2hpbmcgYSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIuIEZvciB0aGlzIHB1cnBvc2UgdGhlCi1HU1RfUFJPR1JFU1NfVFlQRV9DT05USU5VRSBtdXN0IGJlIHVzZWQuCi0KLVVzdWFsbHksIHRoZSB0aHJlYWQgdXNlZCB0byBwZXJmb3JtIHRoZSBibG9ja2luZyBvcGVyYXRpb25zIGNhbiBiZSB1c2VkIHRvCi1pbXBsZW1lbnQgdGhlIHN0cmVhbWluZyB0aHJlYWRzIHdoZW4gbmVlZGVkLgotCi1VcG9uIGRvd253YXJkIHN0YXRlIGNoYW5nZXMsIG9wZXJhdGlvbnMgdGhhdCBhcmUgYnVzeSBpbiB0aGUgdGhyZWFkIGFyZSBjYW5jZWxlZAotYW5kIEdTVF9QUk9HUkVTU19UWVBFX0NBTkNFTEVEIGlzIHBvc3RlZC4KLQotVGhlIGFwcGxpY2F0aW9uIGNhbiBrbm93IGFib3V0IHBlbmRpbmcgdGFza3MgYmVjYXVzZSB0aGV5IHJlY2VpdmVkIHRoZQotR1NUX1BST0dSRVNTX1RZUEVfU1RBUlQgbWVzc2FnZXMgdGhhdCBkaWRuJ3QgY29tcGxldGUgd2l0aCBhCi1HU1RfUFJPR1JFU1NfVFlQRV9DT01QTEVURSBtZXNzYWdlLCBnb3QgY2FuY2VsZWQgd2l0aCBhCi1HU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRCBvciBlcnJvcmVkIHdpdGggR1NUX1BST0dSRVNTX1RZUEVfRVJST1IuCi1BcHBsaWNhdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8gY2hvb3NlIGlmIHRoZXkgd2FpdCBmb3IgdGhlIHBlbmRpbmcKLW9wZXJhdGlvbiBvciBjYW5jZWwgdGhlbS4KLQotSWYgYW4gYXN5bmMgb3BlcmF0aW9uIGZhaWxzLCBhbiBlcnJvciBtZXNzYWdlIGlzIHBvc3RlZCBmaXJzdCBiZWZvcmUgdGhlCi1HU1RfUFJPR1JFU1NfVFlQRV9FUlJPUiBwcm9ncmVzcyBtZXNzYWdlLgotCi0KLUNhdGVnb3JpZXMKLX5+fn5+fn5+fn4KLQotIFdlIHdhbnQgdG8gcHJvcG9zZSBzb21lIHN0YW5kYXJkIGNvZGVzIGhlcmU6Ci0KLSAgIm9wZW4iIDogQSByZXNvdXJjZSBpcyBiZWluZyBvcGVuZWQKLSAgImNsb3NlIiA6IEEgcmVzb3VyY2UgaXMgYmVpbmcgY2xvc2VkCi0KLSAgIm5hbWUtbG9va3VwIiA6IEEgRE5TIGxvb2t1cC4KLQotICAiY29ubmVjdCIgOiBBIHNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCi0KLSAgImRpc2Nvbm5lY3QiIDogYSBzb2NrZXQgY29ubmVjdGlvbiBpcyBjbG9zZWQKLQotICAicmVxdWVzdCIgOiBBIHJlcXVlc3QgaXMgc2VudCB0byBhIHNlcnZlciBhbmQgd2UgYXJlIHdhaXRpbmcgZm9yIGEKLSAgICAgICAgICAgICAgcmVwbHkuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgcmlnaHQgYmVmb3JlIHRoZSByZXF1ZXN0IGlzIHNlbnQKLSAgICAgICAgICAgICAgYW5kIGNvbXBsZXRlZCB3aGVuIHRoZSByZXBseSBoYXMgYXJyaXZlZCBjb21wbGV0ZWx5LgotCi0gICJtb3VudCIgOiBBIHZvbHVtZSBpcyBiZWluZyBtb3VudGVkCi0KLSAgInVubW91bnQiIDogQSB2b2x1bWUgaXMgYmVpbmcgdW5tb3VudGVkCi0KLSBNb3JlIGNvZGVzIGNhbiBiZSBwb3N0ZWQgYnkgZWxlbWVudHMgYW5kIGNhbiBiZSBtYWRlIG9mZmljaWFsIGxhdGVyLgpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1wdXNoLXB1bGwudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1wdXNoLXB1bGwudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDlmOGQ3Li4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtcHVzaC1wdWxsLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLXB1c2gtcHVsbAotLS0tLS0tLS0tCi0KLU5vcm1hbGx5IGEgc291cmNlIGVsZW1lbnQgd2lsbCBwdXNoIGRhdGEgdG8gdGhlIGRvd25zdHJlYW0gZWxlbWVudCB1c2luZwotdGhlIGdzdF9wYWRfcHVzaCgpIG1ldGhvZC4gVGhlIGRvd25zdHJlYW0gcGVlciBwYWQgd2lsbCByZWNlaXZlIHRoZQotYnVmZmVyIGluIHRoZSBDaGFpbiBmdW5jdGlvbi4gSW4gdGhlIHB1c2ggbW9kZSwgdGhlIHNvdXJjZSBlbGVtZW50IGlzIHRoZQotZHJpdmluZyBmb3JjZSBpbiB0aGUgcGlwZWxpbmUgYXMgaXQgaW5pdGlhdGVzIGRhdGEgdHJhbnNwb3J0LgotCi1JdCBpcyBhbHNvIHBvc3NpYmxlIGZvciBhbiBlbGVtZW50IHRvIHB1bGwgZGF0YSBmcm9tIGFuIHVwc3RyZWFtIGVsZW1lbnQuCi1UaGUgZG93bnN0cmVhbSBlbGVtZW50IGRvZXMgdGhpcyBieSBjYWxsaW5nIGdzdF9wYWRfcHVsbF9yYW5nZSgpIG9uIG9uZQotb2YgaXRzIHNpbmtwYWRzLiBJbiB0aGlzIG1vZGUsIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQgaXMgdGhlIGRyaXZpbmcgZm9yY2UgCi1pbiB0aGUgcGlwZWxpbmUgYXMgaXQgaW5pdGlhdGVzIGRhdGEgdHJhbnNmZXIuCi0KLUl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBlbGVtZW50cyBhcmUgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgdG8gaGFuZGxlIGEKLXB1c2goKSBvciBhIHB1bGxfcmFuZ2UoKSBmcm9tIHRoZSBwZWVyIGVsZW1lbnQuIEZvciBwdXNoKCkgYmFzZWQgZWxlbWVudHMKLXRoaXMgbWVhbnMgdGhhdCBhbGwgZG93bnN0cmVhbSBlbGVtZW50cyBzaG91bGQgYmUgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgYW5kCi1mb3IgcHVsbF9yYW5nZSgpIGJhc2VkIGVsZW1lbnRzIHRoaXMgbWVhbnMgdGhlIHVwc3RyZWFtIGVsZW1lbnRzIHNob3VsZAotYmUgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuCi0KLU1vc3Qgc2lua3BhZHMgaW1wbGVtZW50IGEgY2hhaW4gZnVuY3Rpb24uIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGNhc2UuCi1zaW5rcGFkcyBpbXBsZW1lbnRpbmcgYSBsb29wIGZ1bmN0aW9uIHdpbGwgYmUgdGhlIGV4Y2VwdGlvbi4gTGlrZXdpc2UKLXNyY3BhZHMgaW1wbGVtZW50aW5nIGEgZ2V0cmFuZ2UgZnVuY3Rpb24gd2lsbCBiZSB0aGUgZXhjZXB0aW9uLgotCi0KLXN0YXRlIGNoYW5nZXMKLX5+fn5+fn5+fn5+fn4KLQotVGhlIEdzdEJpbiBzZXRzIHRoZSBzdGF0ZSBvZiBhbGwgdGhlIHNpbmsgZWxlbWVudHMuIFRoZXNlIGFyZSB0aGUgZWxlbWVudHMKLXdpdGhvdXQgc291cmNlIHBhZHMuCi0KLVNldHRpbmcgdGhlIHN0YXRlIG9uIGFuIGVsZW1lbnQgd2lsbCBmaXJzdCBhY3RpdmF0ZSBhbGwgdGhlIHNyY3BhZHMgYW5kIHRoZW4KLXRoZSBzaW5rcGFkcy4gRm9yIGVhY2ggb2YgdGhlIHNpbmtwYWRzLCBnc3RfcGFkX2NoZWNrX3B1bGxfcmFuZ2UoKSBpcwotcGVyZm9ybWVkLiBJZiB0aGUgc2lua3BhZCBzdXBwb3J0cyBhIGxvb3BmdW5jdGlvbiBhbmQgdGhlIHBlZXIgcGFkIHJldHVybnMgVFJVRQotZnJvbSB0aGUgR3N0UGFkQ2hlY2tQdWxsUmFuZ2UgZnVuY3Rpb24sIHRoZW4gdGhlIHBlZXIgcGFkIGlzIGFjdGl2YXRlZCBmaXJzdCBhcwotaXQgbXVzdCBiZSBpbiB0aGUgcmlnaHQgc3RhdGUgdG8gaGFuZGxlIGEgX3B1bGxfcmFuZ2UoKS4gTm90ZSB0aGF0IHRoZQotc3RhdGUgY2hhbmdlIG9mIHRoZSBlbGVtZW50IGlzIG5vdCB5ZXQgcGVyZm9ybWVkLCBqdXN0IHRoZSBhY3RpdmF0ZSBmdW5jdGlvbgotaXMgY2FsbGVkIG9uIHRoZSBzb3VyY2UgcGFkLiBUaGlzIG1lYW5zIHRoYXQgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgYQotZ2V0cmFuZ2UgZnVuY3Rpb24gbXVzdCBiZSBwcmVwYXJlZCB0byBnZXQgdGhlaXIgYWN0aXZhdGUgZnVuY3Rpb24gY2FsbGVkCi1iZWZvcmUgdGhlaXIgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLgotCi1FbGVtZW50cyB0aGF0IGhhdmUgbXVsdGlwbGUgc2lua3BhZHMgdGhhdCByZXF1aXJlIGFsbCBvZiB0aGVtIHRvIG9wZXJhdGUKLWluIHRoZSBzYW1lIG1vZGUgKHB1c2gvcHVsbCkgY2FuIHVzZSB0aGUgX2NoZWNrX3B1bGxfcmFuZ2UoKSBvbiBhbGwKLXRoZWlyIHBhZHMgYW5kIGNhbiB0aGVuIHJlbW92ZSB0aGUgbG9vcCBmdW5jdGlvbnMgaWYgb25lIG9mIHRoZSBwYWRzIGRvZXMKLW5vdCBzdXBwb3J0IHB1bGwgYmFzZWQgbW9kZS4KLQotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXFvcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwOGIzNGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1xb3MudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLVF1YWxpdHktb2YtU2VydmljZQotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVF1YWxpdHkgb2Ygc2VydmljZSBpcyBhYm91dCBtZWFzdXJpbmcgYW5kIGFkanVzdGluZyB0aGUgcmVhbC10aW1lCi1wZXJmb3JtYW5jZSBvZiBhIHBpcGVsaW5lLgotCi1UaGUgcmVhbC10aW1lIHBlcmZvcm1hbmNlIGlzIGFsd2F5cyBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgcGlwZWxpbmUKLWNsb2NrIGFuZCB0eXBpY2FsbHkgaGFwcGVucyBpbiB0aGUgc2lua3Mgd2hlbiB0aGV5IHN5bmNocm9uaXplIGJ1ZmZlcnMKLWFnYWluc3QgdGhlIGNsb2NrLgotCi1UaGUgbWVhc3VyZW1lbnRzIHJlc3VsdCBpbiBRT1MgZXZlbnRzIHRoYXQgYWltIHRvIGFkanVzdCB0aGUgZGF0YXJhdGUKLWluIG9uZSBvciBtb3JlIHVwc3RyZWFtIGVsZW1lbnRzLiBUd28gdHlwZXMgb2YgYWRqdXN0bWVudHMgY2FuIGJlCi1tYWRlOgotCi0gIC0gc2hvcnQgdGltZSAiZW1lcmdlbmN5IiBjb3JyZWN0aW9ucyBiYXNlZCBvbiBsYXRlc3Qgb2JzZXJ2YXRpb24KLSAgICBpbiB0aGUgc2lua3MuCi0gIC0gbG9uZyB0ZXJtIHJhdGUgY29ycmVjdGlvbnMgYmFzZWQgb24gdHJlbmRzIG9ic2VydmVkIGluIHRoZSBzaW5rcy4KLQotSXQgaXMgYWxzbyBwb3NzaWJsZSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGFydGlmaWNpYWxseSBpbnRyb2R1Y2UgZGVsYXkKLWJldHdlZW4gc3luY2hyb25pemVkIGJ1ZmZlcnMsIHRoaXMgaXMgY2FsbGVkIHRocm90dGxpbmcuIEl0IGNhbiBiZSB1c2VkCi10byByZWR1Y2UgdGhlIGZyYW1lcmF0ZSwgZm9yIGV4YW1wbGUuCi0KLQotU291cmNlcyBvZiBxdWFsaXR5IHByb2JsZW1zCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotIC0gSGlnaCBDUFUgbG9hZAotIC0gTmV0d29yayBwcm9ibGVtcwotIC0gT3RoZXIgcmVzb3VyY2UgcHJvYmxlbXMgc3VjaCBhcyBkaXNrIGxvYWQsIG1lbW9yeSBib3R0bGVuZWNrcyBldGMuCi0gLSBhcHBsaWNhdGlvbiBsZXZlbCB0aHJvdHRsaW5nCi0KLQotUW9TIGV2ZW50Ci1+fn5+fn5+fn4KLQotVGhlIFFvUyBldmVudCBpcyBnZW5lcmF0ZWQgYnkgYW4gZWxlbWVudCB0aGF0IHN5bmNocm9uaXplcyBhZ2FpbnN0IHRoZSBjbG9jay4gSXQKLXRyYXZlbHMgdXBzdHJlYW0gYW5kIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOgotCi0gLSB0eXBlLCBHU1RfVFlQRV9RT1NfVFlQRToKLSAgICAgIFRoZSB0eXBlIG9mIHRoZSBRb1MgZXZlbnQsIHdlIGhhdmUgdGhlIGZvbGxvd2luZyB0eXBlcyBhbmQgdGhlIGRlZmF1bHQgdHlwZQotICAgICAgaXMgR1NUX1FPU19UWVBFX1VOREVSRkxPVzoKLQotICAgICAgR1NUX1FPU19UWVBFX09WRVJGTE9XOiAgYW4gZWxlbWVudCBpcyByZWNlaXZpbmcgYnVmZmVycyB0b28gZmFzdCBhbmQgY2FuJ3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgdXAgcHJvY2Vzc2luZyB0aGVtLiBVcHN0cmVhbSBzaG91bGQgcmVkdWNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZS4KLSAgICAgIEdTVF9RT1NfVFlQRV9VTkRFUkZMT1c6IGFuIGVsZW1lbnQgaXMgcmVjZWl2aW5nIGJ1ZmZlcnMgdG9vIHNsb3dseSBhbmQgaGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkcm9wIHRoZW0gYmVjYXVzZSB0aGV5IGFyZSB0b28gbGF0ZS4gVXBzdHJlYW0gc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZWFzZSB0aGUgcHJvY2Vzc2luZyByYXRlLgotICAgICAgR1NUX1FPU19UWVBFX1RIUk9UVExFOiAgdGhlIGFwcGxpY2F0aW9uIGlzIGFza2luZyB0byBhZGQgZXh0cmEgZGVsYXkgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycywgdXBzdHJlYW0gaXMgYWxsb3dlZCB0byBkcm9wIGJ1ZmZlcnMKLQotIC0gdGltZXN0YW1wLCBHX1RZUEVfVUlOVDY0OgotICAgICAgVGhlIHRpbWVzdGFtcCBvbiB0aGUgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBRb1MgZXZlbnQuIFRoZXNlIHRpbWVzdGFtcHMKLSAgICAgIGFyZSBleHByZXNzZWQgaW4gdG90YWwgcnVubmluZ190aW1lIGluIHRoZSBzaW5rIHNvIHRoYXQgdGhlIHZhbHVlIGlzIGV2ZXIKLSAgICAgIGluY3JlYXNpbmcuCi0KLSAtIGppdHRlciwgR19UWVBFX0lOVDY0OgotICAgICAgVGhlIGRpZmZlcmVuY2Ugb2YgdGhhdCB0aW1lc3RhbXAgYWdhaW5zdCB0aGUgY3VycmVudCBjbG9jayB0aW1lLiAgTmVnYXRpdmUKLSAgICAgIHZhbHVlcyBtZWFuIHRoZSB0aW1lc3RhbXAgd2FzIG9uIHRpbWUuIFBvc2l0aXZlIHZhbHVlcyBpbmRpY2F0ZSB0aGUKLSAgICAgIHRpbWVzdGFtcCB3YXMgbGF0ZSBieSB0aGF0IGFtb3VudC4gV2hlbiBidWZmZXJzIGFyZSByZWNlaXZlZCBpbiB0aW1lIGFuZCAKLSAgICAgIHRocm90dGxpbmcgaXMgbm90IGVuYWJsZWQsIHRoZSBRb1MgdHlwZSBmaWVsZCBpcyBzZXQgdG8gT1ZFUkZMT1cuCi0gICAgICBXaGVuIHRocm90dGxpbmcsIHRoZSBqaXR0ZXIgY29udGFpbnMgdGhlIHRocm90dGxpbmcgZGVsYXkgYWRkZWQgYnkgdGhlIAotICAgICAgYXBwbGljYXRpb24gYW5kIHRoZSB0eXBlIGlzIHNldCB0byBUSFJPVFRMRS4KLQotIC0gcHJvcG9ydGlvbiwgR19UWVBFX0RPVUJMRToKLSAgICAgIExvbmcgdGVybSBwcmVkaWN0aW9uIG9mIHRoZSBpZGVhbCByYXRlIHJlbGF0aXZlIHRvIG5vcm1hbCByYXRlIHRvIGdldAotICAgICAgb3B0aW1hbCBxdWFsaXR5LgotCi1UaGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGRlYWxzIHdpdGggaG93IHRoZXNlIHZhbHVlcyBjYW4gYmUgY2FsY3VsYXRlZAotaW4gYSBzaW5rIGFuZCBob3cgdGhlIHZhbHVlcyBjYW4gYmUgdXNlZCBieSBvdGhlciBlbGVtZW50cyB0byBhZGp1c3QgdGhlaXIKLW9wZXJhdGlvbnMuCi0KLQotUW9TIG1lc3NhZ2UKLX5+fn5+fn5+fn5+Ci0KLUEgUU9TIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMgd2hlbmV2ZXIgYW4gZWxlbWVudCBkZWNpZGVzIHRvOgotCi0gLSBkcm9wIGEgYnVmZmVyIGJlY2F1c2Ugb2YgUW9TIHJlYXNvbnMKLSAtIGNoYW5nZSBpdHMgcHJvY2Vzc2luZyBzdHJhdGVneSBiZWNhdXNlIG9mIFFvUyByZWFzb25zIChxdWFsaXR5KQotCi1JdCBzaG91bGQgYmUgZXhwZWN0ZWQgdGhhdCBjcmVhdGluZyBhbmQgcG9zdGluZyB0aGUgUW9TIG1lc3NhZ2UgaXMgcmVhc29uYWJseQotZmFzdCBhbmQgZG9lcyBub3Qgc2lnbmlmaWNhbnRseSBjb250cmlidXRlIHRvIHRoZSBRb1MgcHJvYmxlbXMuIE9wdGlvbnMgdG8KLWRpc2FibGUgdGhpcyBmZWF0dXJlIGNvdWxkIGFsc28gYmUgcHJlc2VudGVkIG9uIGVsZW1lbnRzLgotCi1UaGlzIG1lc3NhZ2UgY2FuIGJlIHBvc3RlZCBieSBhIHNpbmsvc3JjIHRoYXQgcGVyZm9ybXMgc3luY2hyb25pc2F0aW9uIGFnYWluc3QgdGhlCi1jbG9jayAobGl2ZSkgb3IgaXQgY291bGQgYmUgcG9zdGVkIGJ5IGFuIHVwc3RyZWFtIGVsZW1lbnQgdGhhdCBwZXJmb3JtcyBRb1MKLWJlY2F1c2Ugb2YgUU9TIGV2ZW50cyByZWNlaXZlZCBmcm9tIGEgZG93bnN0cmVhbSBlbGVtZW50ICghbGl2ZSkuCi0KLVRoZSBHU1RfTUVTU0FHRV9RT1MgY29udGFpbnMgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBpbmZvOgotCi0gLSBsaXZlOiBHX1RZUEVfQk9PTEVBTjoKLSAgICAgIElmIHRoZSBRb1MgbWVzc2FnZSB3YXMgZHJvcHBlZCBieSBhIGxpdmUgZWxlbWVudCBzdWNoIGFzIGEgc2luayBvciBhIGxpdmUKLSAgICAgIHNvdXJjZS4gSWYgdGhlIGxpdmUgcHJvcGVydHkgaXMgRkFMU0UsIHRoZSBRb1MgbWVzc2FnZSB3YXMgZ2VuZXJhdGVkIGFzIGEKLSAgICAgIHJlc3BvbnNlIHRvIGEgUW9TIGV2ZW50IGluIGEgbm9uLWxpdmUgZWxlbWVudC4KLQotIC0gcnVubmluZy10aW1lLCBHX1RZUEVfVUlOVDY0OgotICAgICAgVGhlIHJ1bm5pbmdfdGltZSBvZiB0aGUgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBRb1MgbWVzc2FnZS4KLQotIC0gc3RyZWFtLXRpbWUsIEdfVFlQRV9VSU5UNjQ6Ci0gICAgICBUaGUgc3RyZWFtX3RpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0IGdlbmVyYXRlZCB0aGUgUW9TIG1lc3NhZ2UuCi0KLSAtIHRpbWVzdGFtcCwgR19UWVBFX1VJTlQ2NDoKLSAgICAgIFRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciB0aGF0IGdlbmVyYXRlZCB0aGUgUW9TIG1lc3NhZ2UuCi0KLSAtIGR1cmF0aW9uLCBHX1RZUEVfVUlOVDY0OgotICAgICAgVGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIFFvUyBtZXNzYWdlLgotCi0KLSAtIGppdHRlciwgR19UWVBFX0lOVDY0OgotICAgICAgVGhlIGRpZmZlcmVuY2Ugb2YgdGhlIHJ1bm5pbmctdGltZSBhZ2FpbnN0IHRoZSBkZWFkbGluZS4gIE5lZ2F0aXZlCi0gICAgICB2YWx1ZXMgbWVhbiB0aGUgdGltZXN0YW1wIHdhcyBvbiB0aW1lLiBQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgdGhlCi0gICAgICB0aW1lc3RhbXAgd2FzIGxhdGUgKGFuZCBkcm9wcGVkKSBieSB0aGF0IGFtb3VudC4gVGhlIGRlYWRsaW5lIGNhbiBiZQotICAgICAgYSByZWFsdGltZSBydW5uaW5nX3RpbWUgb3IgYW4gZXN0aW1hdGVkIHJ1bm5pbmdfdGltZS4KLQotIC0gcHJvcG9ydGlvbiwgR19UWVBFX0RPVUJMRToKLSAgICAgIExvbmcgdGVybSBwcmVkaWN0aW9uIG9mIHRoZSBpZGVhbCByYXRlIHJlbGF0aXZlIHRvIG5vcm1hbCByYXRlIHRvIGdldAotICAgICAgb3B0aW1hbCBxdWFsaXR5LgotCi0gLSBxdWFsaXR5LCBHX1RZUEVfSU5UOgotICAgICAgQW4gZWxlbWVudCBkZXBlbmRlbnQgaW50ZWdlciB2YWx1ZSB0aGF0IHNwZWNpZmllcyB0aGUgY3VycmVudCBxdWFsaXR5Ci0gICAgICBsZXZlbCBvZiB0aGUgZWxlbWVudC4gVGhlIGRlZmF1bHQgbWF4aW11bSBxdWFsaXR5IGlzIDEwMDAwMDAuIAotCi0KLSAtIGZvcm1hdCwgR1NUX1RZUEVfRk9STUFUCi0gICAgICBVbml0cyBvZiB0aGUgJ3Byb2Nlc3NlZCcgYW5kICdkcm9wcGVkJyBmaWVsZHMuIFZpZGVvIHNpbmtzIGFuZCB2aWRlbwotICAgICAgZmlsdGVycyB3aWxsIHVzZSBHU1RfRk9STUFUX0JVRkZFUlMgKGZyYW1lcykuIEF1ZGlvIHNpbmtzIGFuZCBhdWRpbyBmaWx0ZXJzCi0gICAgICB3aWxsIGxpa2VseSB1c2UgR1NUX0ZPUk1BVF9ERUZBVUxUIChzYW1wbGVzKS4KLQotIC0gcHJvY2Vzc2VkOiBHX1RZUEVfVUlOVDY0OgotICAgICAgVG90YWwgbnVtYmVyIG9mIHVuaXRzIGNvcnJlY3RseSBwcm9jZXNzZWQgc2luY2UgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlIHRvCi0gICAgICBSRUFEWSBvciBhIGZsdXNoaW5nIG9wZXJhdGlvbi4KLQotIC0gZHJvcHBlZDogR19UWVBFX1VJTlQ2NDoKLSAgICAgIFRvdGFsIG51bWJlciBvZiB1bml0cyBkcm9wcGVkIHNpbmNlIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSB0byBSRUFEWSBvciBhCi0gICAgICBmbHVzaGluZyBvcGVyYXRpb24uCi0KLVRoZSAncnVubmluZy10aW1lJyBhbmQgJ3Byb2Nlc3NlZCcgZmllbGRzIGNhbiBiZSB1c2VkIHRvIGVzdGltYXRlIHRoZSBhdmVyYWdlCi1wcm9jZXNzaW5nIHJhdGUgKGZyYW1lcmF0ZSBmb3IgdmlkZW8pLgotCi1FbGVtZW50cyBtaWdodCBhZGQgYWRkaXRpb25hbCBmaWVsZHMgaW4gdGhlIG1lc3NhZ2Ugd2hpY2ggYXJlIGRvY3VtZW50ZWQgaW4gdGhlCi1yZWxldmFudCBlbGVtZW50cyBvciBiYXNlY2xhc3Nlcy4KLQotCi1Db2xsZWN0aW5nIHN0YXRpc3RpY3MKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1BIGJ1ZmZlciB3aXRoIHRpbWVzdGFtcCBCMSBhcnJpdmVzIGluIHRoZSBzaW5rIGF0IHRpbWUgVDEuIFRoZSBidWZmZXIKLXRpbWVzdGFtcCBpcyB0aGVuIHN5bmNocm9uaXplZCBhZ2FpbnN0IHRoZSBjbG9jayB3aGljaCB5aWVsZHMgYSBqaXR0ZXIgSjEKLXJldHVybiB2YWx1ZSBmcm9tIHRoZSBjbG9jay4gVGhlIGppdHRlciBKMSBpcyBzaW1wbHkgY2FsY3VsYXRlZCBhcwotCi0gIEoxID0gQ1QgLSBCMQotCi1XaGVyZSBDVCBpcyB0aGUgY2xvY2sgdGltZSB3aGVuIHRoZSBlbnRyeSBhcnJpdmVzIGluIHRoZSBzaW5rLiBUaGlzIHZhbHVlCi1pcyBjYWxjdWxhdGVkIGluc2lkZSB0aGUgY2xvY2sgd2hlbiB3ZSBwZXJmb3JtIGdzdF9jbG9ja19pZF93YWl0KCkuCi0KLUlmIHRoZSBqaXR0ZXIgaXMgbmVnYXRpdmUsIHRoZSBlbnRyeSBhcnJpdmVkIGluIHRpbWUgYW5kIGNhbiBiZSByZW5kZXJlZAotYWZ0ZXIgd2FpdGluZyBmb3IgdGhlIGNsb2NrIHRvIHJlYWNoIHRpbWUgQjEgKHdoaWNoIGlzIGFsc28gQ1QgLSBKMSkuCi0KLUlmIHRoZSBqaXR0ZXIgaXMgcG9zaXRpdmUgaG93ZXZlciwgdGhlIGVudHJ5IGFycml2ZWQgdG9vIGxhdGUgaW4gdGhlIHNpbmsgCi1hbmQgc2hvdWxkIHRoZXJlZm9yZSBiZSBkcm9wcGVkLiBKMSBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIGVudHJ5IHdhcyBsYXRlLgotCi1BbnkgYnVmZmVyIHRoYXQgYXJyaXZlcyBpbiB0aGUgc2luayBzaG91bGQgZ2VuZXJhdGUgYSBRb1MgZXZlbnQgdXBzdHJlYW0uCi0KLVVzaW5nIHRoZSBqaXR0ZXIgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgdGltZSB3aGVuIHRoZSBidWZmZXIgYXJyaXZlZCBpbiB0aGUKLXNpbms6IAotICAgICAKLSAgVDEgPSBCMSArIEoxLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCi0KLVRoZSB0aW1lIHRoZSBidWZmZXIgbGVhdmVzIHRoZSBzaW5rIGFmdGVyIHN5bmNocm9uaXNhdGlvbiBpcyBtZWFzdXJlZCBhczoKLQotICBUMiA9IEIxICsgKEoxIDwgMCA/IDAgOiBKMSkgICAgICAgICAgICAgICAgICAoMikKLQotRm9yIGJ1ZmZlcnMgdGhhdCBhcnJpdmUgaW4gdGltZSAoSjEgPCAwKSB0aGUgYnVmZmVyIGxlYXZlcyBhZnRlciBzeW5jaHJvbmlzYXRpb24KLXdoaWNoIGlzIGV4YWN0bHkgQjEuIExhdGUgYnVmZmVycyAoSjEgPj0gMCkgbGVhdmUgdGhlIHNpbmsgd2hlbiB0aGV5IGFycml2ZSwKLXdoaXRob3V0IGFueSBzeW5jaHJvbmlzYXRpb24sIHdoaWNoIGlzIFQyID0gVDEgPSBCMSArIEoxLgotCi1Vc2luZyBhIHByZXZpb3VzIFQwIGFuZCBhIG5ldyBUMSwgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgdGltZSBpdCB0b29rIGZvcgotdXBzdHJlYW0gdG8gZ2VuZXJhdGUgYSBidWZmZXIgd2l0aCB0aW1lc3RhbXAgQjEuCi0KLSAgUFQxID0gVDEgLSBUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMpCi0KLVdlIGNhbGwgUFQxIHRoZSBwcm9jZXNzaW5nIHRpbWUgbmVlZGVkIHRvIGdlbmVyYXRlIGJ1ZmZlciB3aXRoIHRpbWVzdGFtcCBCMS4KLQotTW9yZW92ZXIsIGdpdmVuIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIEQxLCB0aGUgY3VycmVudCBkYXRhIHJhdGUgKERSMSkgb2YgCi10aGUgdXBzdHJlYW0gZWxlbWVudCBpcyBnaXZlbiBhczoKLQotICAgICAgIFBUMSAgIFQxIC0gVDAKLSBEUjEgPSAtLS0gPSAtLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQpCi0gICAgICAgRDEgICAgICBEMQotCi1Gb3IgdmFsdWVzIDAuMCA8IERSMSA8PSAxLjAgdGhlIHVwc3RyZWFtIGVsZW1lbnQgaXMgcHJvZHVjaW5nIGZhc3RlciB0aGFuCi1yZWFsLXRpbWUuIElmIERSMSBpcyBleGFjdGx5IDEuMCwgdGhlIGVsZW1lbnQgaXMgcnVubmluZyBhdCBhIHBlcmZlY3Qgc3BlZWQuCi0KLVZhbHVlcyBEUjEgPiAxLjAgbWVhbiB0aGF0IHRoZSB1cHN0cmVhbSBlbGVtZW50IGNhbm5vdCBwcm9kdWNlIGJ1ZmZlcnMgb2YKLWR1cmF0aW9uIEQxIGluIHJlYWwtdGltZS4gSXQgaXMgZXhhY3RseSBEUjEgdGhhdCB0ZWxscyB0aGUgYW1vdW50IG9mIHNwZWVkdXAKLXdlIHJlcXVpcmUgZnJvbSB1cHN0cmVhbSB0byByZWdhaW4gcmVhbC10aW1lIHBlcmZvcm1hbmNlLgotCi1BbiBlbGVtZW50IHRoYXQgaXMgbm90IHJlY2VpdmluZyBlbm91Z2ggZGF0YSBpcyBzYWlkIHRvIGJlIHVuZGVyZmxvd2VkLgotCi0KLUVsZW1lbnQgbWVhc3VyZW1lbnRzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1JbiBhZGRpdGlvbiB0byB0aGUgbWVhc3VyZW1lbnRzIG9mIHRoZSBkYXRhcmF0ZSBvZiB0aGUgdXBzdHJlYW0gZWxlbWVudCwgYQotdHlwaWNhbCBlbGVtZW50IG11c3QgYWxzbyBtZWFzdXJlIGl0cyBvd24gcGVyZm9ybWFuY2UuIEdsb2JhbCBwaXBlbGluZSAKLXBlcmZvcm1hbmNlIHByb2JsZW1zIGNhbiBpbmRlZWQgYWxzbyBiZSBjYXVzZWQgYnkgdGhlIGVsZW1lbnQgaXRzZWxmIHdoZW4gaXQKLXJlY2VpdmVzIHRvbyBtdWNoIGRhdGEgaXQgY2Fubm90IHByb2Nlc3MgaW4gdGltZS4gVGhlIGVsZW1lbnQgaXMgdGhlbiBzYWlkIHRvCi1iZSBvdmVyZmxvd2VkLgotCi0KLVNob3J0IHRlcm0gY29ycmVjdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSB0aW1lc3RhbXAgYW5kIGppdHRlciBzZXJ2ZSBhcyBzaG9ydCB0ZXJtIGNvcnJlY3Rpb24gaW5mb3JtYXRpb24KLWZvciB1cHN0cmVhbSBlbGVtZW50cy4gSW5kZWVkLCBnaXZlbiBhcnJpdmFsIHRpbWUgVDEgYXMgZ2l2ZW4gaW4gKDEpCi13ZSBjYW4gYmUgY2VydGFpbiB0aGF0IGJ1ZmZlcnMgd2l0aCBhIHRpbWVzdGFtcCBCMiA8IFQxIHdpbGwgYmUgdG9vIGxhdGUKLWluIHRoZSBzaW5rLgotCi1JbiBjYXNlIG9mIGEgcG9zaXRpdmUgaml0dGVyIHdlIGNhbiB0aGVyZWZvcmUgc2VuZCBhIFFvUyBldmVudCB3aXRoCi1hIHRpbWVzdGFtcCBCMSwgaml0dGVyIEoxIGFuZCBwcm9wb3J0aW9uIGdpdmVuIGJ5ICg0KS4KLQotVGhpcyBhbGxvd3MgYW4gdXBzdHJlYW0gZWxlbWVudCB0byBub3QgZ2VuZXJhdGUgYW55IGRhdGEgd2l0aCB0aW1lc3RhbXBzCi1CMiA8IFQxLCB3aGVyZSB0aGUgZWxlbWVudCBjYW4gZGVyaXZlIFQxIGFzIEIxICsgSjEuCi0KLVRoaXMgd2lsbCBlZmZlY3RpdmVseSByZXN1bHQgaW4gZnJhbWUgZHJvcHMuCi0KLVRoZSBlbGVtZW50IGNhbiBldmVuIGRvIGEgYmV0dGVyIGVzdGltYXRpb24gb2YgdGhlIG5leHQgdmFsaWQgdGltZXN0YW1wIGl0Ci1zaG91bGQgb3V0cHV0LgotCi1JbmRlZWQsIGdpdmVuIHRoZSBlbGVtZW50IGdlbmVyYXRlZCBhIGJ1ZmZlciB3aXRoIHRpbWVzdGFtcCBCMCB0aGF0IGFycml2ZWQKLWluIHRpbWUgaW4gdGhlIHNpbmsgYnV0IHRoZW4gcmVjZWl2ZWQgYSBRb1MgZXZlbnQgc3RhdGluZyBCMSBhcnJpdmVkIEoxCi10b28gbGF0ZS4gVGhpcyBtZWFucyBnZW5lcmF0aW5nIEIxIHRvb2sgKEIxICsgSjEpIC0gQjAgPSBUMSAtIFQwID0gUFQxLCBhcyAKLWdpdmVuIGluICgzKS4gR2l2ZW4gdGhlIGJ1ZmZlciBCMSBoYWQgYSBkdXJhdGlvbiBEMSBhbmQgYXNzdW1pbmcgdGhhdAotZ2VuZXJhdGluZyBhIG5ldyBidWZmZXIgQjIgd2lsbCB0YWtlIHRoZSBzYW1lIGFtb3VudCBvZiBwcm9jZXNzaW5nIHRpbWUsCi1hIGJldHRlciBlc3RpbWF0aW9uIGZvciBCMiB3b3VsZCB0aGVuIGJlOgotCi0gIEIyID0gVDEgKyBEMiAqIERSMQotCi0gZXhwYW5kaW5nIGdpdmVzOgotCi0gIEIyID0gKEIxICsgSjEpICsgRDIgKiAoQjEgKyBKMSAtIEIwKQotICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0gIAotCQkgICAgICAgICAgICAgRDEKLQotIGFzc3VtaW5nIHRoZSBkdXJhdGlvbnMgb2YgdGhlIGZyYW1lcyBhcmUgZXF1YWwgYW5kIHRodXMgRDEgPSBEMjoKLQotICBCMiA9IChCMSArIEoxKSArIChCMSArIEoxIC0gQjApCi0KLSAgQjIgPSAgMiAqIChCMSArIEoxKSAtIEIwCi0KLSBhbHNvOgotCi0gIEIwID0gQjEgLSBEMQotCi0gc286Ci0KLSAgQjIgPSAgMiAqIChCMSArIEoxKSAtIChCMSAtIEQxKQotCi1XaGljaCB5aWVsZHMgYSBtb3JlIGFjY3VyYXRlIHByZWRpY3Rpb24gZm9yIHRoZSBuZXh0IGJ1ZmZlciBnaXZlbiBhczoKLQotICBCMiA9ICBCMSArIDIgKiBKMSArIEQxICAgICAgICAgICAgICAgICAgICAgICAgICAoNSkKLQotCi1Mb25nIHRlcm0gY29ycmVjdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGRhdGFyYXRlIHVzZWQgdG8gY2FsY3VsYXRlICg1KSBmb3IgdGhlIHNob3J0IHRlcm0gcHJlZGljdGlvbiBpcyBiYXNlZAotb24gYSBzaW5nbGUgb2JzZXJ2YXRpb24uIEEgbW9yZSBhY2N1cmF0ZSBkYXRhcmF0ZSBjYW4gYmUgb2J0YWluZWQgYnkKLWNyZWF0aW5nIGEgcnVubmluZyBhdmVyYWdlIG92ZXIgbXVsdGlwbGUgZGF0YXJhdGUgb2JzZXJ2YXRpb25zLgotCi1UaGlzIGF2ZXJhZ2UgaXMgbGVzcyBzdXNjZXB0aWJsZSB0byBzdWRkZW4gY2hhbmdlcyB0aGF0IHdvdWxkIG9ubHkgaW5mbHVlbmNlCi10aGUgZGF0YXJhdGUgZm9yIGEgdmVyeSBzaG9ydCBwZXJpb2QuCi0KLUEgcnVubmluZyBhdmVyYWdlIGlzIGNhbGN1bGF0ZWQgb3ZlciB0aGUgb2JzZXJ2YXRpb25zIGdpdmVuIGluICg0KSBhbmQgaXMKLXVzZWQgYXMgdGhlIHByb3BvcnRpb24gbWVtYmVyIGluIHRoZSBRb1MgZXZlbnQgdGhhdCBpcyBzZW50IHVwc3RyZWFtLgotCi1SZWNlaXZlcnMgb2YgdGhlIFFvUyBldmVudCBzaG91bGQgcGVybWFuZW50bHkgcmVkdWNlIHRoZWlyIGRhdGFyYXRlIAotYXMgZ2l2ZW4gYnkgdGhlIHByb3BvcnRpb24gbWVtYmVyLiBGYWlsdXJlIHRvIGRvIHNvIHdpbGwgY2VydGFpbmx5IGxlYWQgdG8KLW1vcmUgZHJvcHBlZCBmcmFtZXMgYW5kIGEgZ2VuZXJhbGx5IHdvcnNlIFFvUy4KLQotCi1UaHJvdHRsaW5nCi0tLS0tLS0tLS0tCi0KLUluIHRocm90dGxlIG1vZGUsIHRoZSB0aW1lIGRpc3RhbmNlIGJldHdlZW4gYnVmZmVycyBpcyBrZXB0IHRvIGEgY29uZmlndXJhYmxlCi10aHJvdHRsZSBpbnRlcnZhbC4gVGhpcyBtZWFucyB0aGF0IGVmZmVjdGl2ZWx5IHRoZSBidWZmZXIgcmF0ZSBpcyBsaW1pdGVkCi10byAxIGJ1ZmZlciBwZXIgdGhyb3R0bGUgaW50ZXJ2YWwuIFRoaXMgY2FuIGJlIHVzZWQgdG8gbGltaXQgdGhlIGZyYW1lcmF0ZSwKLWZvciBleGFtcGxlLgotCi1XaGVuIGFuIGVsZW1lbnQgaXMgY29uZmlndXJlZCBpbiB0aHJvdHRsaW5nIG1vZGUgKHRoaXMgaXMgdXN1YWxseSBvbmx5Ci1pbXBsZW1lbnRlZCBvbiBzaW5rcykgaXQgc2hvdWxkIHByb2R1Y2UgUW9TIGV2ZW50cyB1cHN0cmVhbSB3aXRoIHRoZSBqaXR0ZXIKLWZpZWxkIHNldCB0byB0aGUgdGhyb3R0bGUgaW50ZXJ2YWwuIFRoaXMgc2hvdWxkIGluc3RydWN0IHVwc3RyZWFtIGVsZW1lbnRzIHRvCi1za2lwIG9yIGRyb3AgdGhlIHJlbWFpbmluZyBidWZmZXJzIGluIHRoZSBjb25maWd1cmVkIHRocm90dGxlIGludGVydmFsLgotCi1UaGUgcHJvcG9ydGlvbiBmaWVsZCBpcyBzZXQgdG8gdGhlIGRlc2lyZWQgc2xvd2Rvd24gbmVlZGVkIHRvIGdldCB0aGUKLWRlc2lyZWQgdGhyb3R0bGUgaW50ZXJ2YWwuIEltcGxlbWVudGF0aW9ucyBjYW4gdXNlIHRoZSBRb1MgVGhyb3R0bGUgdHlwZSwKLXRoZSBwcm9wb3J0aW9uIGFuZCB0aGUgaml0dGVyIG1lbWJlciB0byB0dW5lIHRoZWlyIGltcGxlbWVudGF0aW9ucy4gCi0KLQotUW9TIHN0cmF0ZWdpZXMKLS0tLS0tLS0tLS0tLS0tCi0KLVNldmVyYWwgc3RyYXRlZ2llcyBleGlzdCB0byByZWR1Y2UgcHJvY2Vzc2luZyBkZWxheSB0aGF0IG1pZ2h0IGFmZmVjdAotcmVhbCB0aW1lIHBlcmZvcm1hbmNlLgotCi0gLSBsb3dlcmluZyBxdWFsaXR5Ci0gICAtIGRyb3BwaW5nIGZyYW1lcyAocmVkdWNlIENQVS9iYW5kd2lkdGggdXNhZ2UpCi0gICAtIHN3aXRjaCB0byBhIGxvd2VyIGRlY29kaW5nL2VuY29kaW5nIHF1YWxpdHkgKHJlZHVjZSBhbGdvcml0aG1pYwotICAgICBjb21wbGV4aXR5KQotICAgLSBzd2l0Y2ggdG8gYSBsb3dlciBxdWFsaXR5IHNvdXJjZSAocmVkdWNlIG5ldHdvcmsgdXNhZ2UpCi0gLSBpbmNyZWFzaW5nIHRocmVhZCBwcmlvcml0aWVzCi0gICAtIHN3aXRjaCB0byByZWFsLXRpbWUgc2NoZWR1bGluZwotICAgLSBhc3NpZ24gbW9yZSBDUFUgY3ljbGVzIHRvIGNyaXRpYWwgcGlwZWxpbmUgcGFydHMKLSAgIC0gYXNzaWduIG1vcmUgQ1BVKHMpIHRvIGNyaXRpY2FsIHBpcGVsaW5lIHBhcnRzCi0KLQotUW9TIGltcGxlbWVudGF0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IZXJlIGZvbGxvd3MgYSBzbWFsbCBvdmVydmlldyBvZiBob3cgUW9TIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiBhIHJhbmdlIG9mCi1kaWZmZXJlbnQgdHlwZXMgb2YgZWxlbWVudHMuCi0KLQotR3N0QmFzZVNpbmsKLS0tLS0tLS0tLS0tCi0KLVRoZSBwcmltYXJ5IGltcGxlbWVudG9yIG9mIFFvUyBpcyBHc3RCYXNlU2luay4gSXQgd2lsbCBjYWxjdWxhdGUgdGhlIGZvbGxvd2luZwotdmFsdWVzOgotCi0gLSB1cHN0cmVhbSBydW5uaW5nIGF2ZXJhZ2Ugb2YgcHJvY2Vzc2luZyB0aW1lICg1KSBpbiBzdHJlYW0gdGltZS4KLSAtIHJ1bm5pbmcgYXZlcmFnZSBvZiBidWZmZXIgZHVyYXRpb25zLgotIC0gcnVubmluZyBhdmVyYWdlIG9mIHJlbmRlciB0aW1lIChpbiBzeXN0ZW0gdGltZSkKLSAtIHJlbmRlcmVkL2Ryb3BwZWQgYnVmZmVycwotCi1UaGUgcHJvY2Vzc2luZyB0aW1lIGFuZCB0aGUgYXZlcmFnZSBidWZmZXIgZHVyYXRpb25zIHdpbGwgYmUgdXNlZCB0bwotY2FsY3VsYXRlIGEgcHJvcG9ydGlvbi4KLQotVGhlIHByb2Nlc3NpbmcgdGltZSBpbiBzeXN0ZW0gdGltZSBpcyBjb21wYXJlZCB0byByZW5kZXIgdGltZSB0byBkZWNpZGUgaWYKLXRoZSBtYWpvcml0eSBvZiB0aGUgdGltZSBpcyBzcGVuZCB1cHN0cmVhbSBvciBpbiB0aGUgc2luayBpdHNlbGYuIFRoaXMgdmFsdWUKLWlzIHVzZWQgdG8gZGVjaWRlIG92ZXJmbG93IG9yIHVuZGVyZmxvdy4KLQotVGhlIG51bWJlciBvZiByZW5kZXJlZCBhbmQgZHJvcHBlZCBidWZmZXJzIGlzIHVzZWQgdG8gcXVlcnkgc3RhdHMgb24gdGhlIHNpbmsuCi0KLUEgUW9TIGV2ZW50IHdpdGggdGhlIG1vc3QgY3VycmVudCB2YWx1ZXMgaXMgc2VudCB1cHN0cmVhbSBmb3IgZWFjaCBidWZmZXIgCi10aGF0IHdhcyByZWNlaXZlZCBieSB0aGUgc2luay4KLQotTm9ybWFsbHkgUW9TIGlzIG9ubHkgZW5hYmxlZCBmb3IgdmlkZW8gcGlwZWxpbmVzLiBUaGUgcmVhc29uIGJlaW5nIHRoYXQgZHJvcHMKLWluIGF1ZGlvIGFyZSBtb3JlIGRpc3R1cmJpbmcgdGhhbiBkcm9wcGluZyB2aWRlbyBmcmFtZXMuIEFsc28gdmlkZW8gcmVxdWlyZXMgaW4gCi1nZW5lcmFsIG1vcmUgcHJvY2Vzc2luZyB0aGFuIGF1ZGlvLgotCi1Ob3JtYWxseSB0aGVyZSBpcyBhIHRocmVzaG9sZCBmb3Igd2hlbiBidWZmZXJzIGdldCBkcm9wcGVkIGluIGEgdmlkZW8gc2luay4gRnJhbWVzCi10aGF0IGFycml2ZSAyMCBtaWxsaXNlY29uZHMgbGF0ZSBhcmUgc3RpbGwgcmVuZGVyZWQgYXMgaXQgaXMgbm90IG5vdGljZWFibGUgZm9yCi10aGUgaHVtYW4gZXllLgotCi1BIFFvUyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciBhIChwYXJ0IG9mIGEpIGJ1ZmZlciBpcyBkcm9wcGVkLgotCi1JbiB0aHJvdHRsZSBtb2RlLCB0aGUgc2luayBzZW5kcyBRb1MgZXZlbnQgdXBzdHJlYW0gd2l0aCB0aGUgdGltZXN0YW1wIHNldCB0bwotdGhlIHJ1bm5pbmdfdGltZSBvZiB0aGUgbGF0ZXN0IGJ1ZmZlciBhbmQgdGhlIGppdHRlciBzZXQgdG8gdGhlIHRocm90dGxlIGludGVydmFsLgotSWYgdGhlIHRocm90dGxlZCBidWZmZXIgaXMgbGF0ZSwgdGhlIGxhdGVuZXNzIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgdGhyb3R0bGUKLWludGVydmFsIGluIG9yZGVyIHRvIGtlZXAgdGhlIGRlc2lyZWQgdGhyb3R0bGUgaW50ZXJ2YWwuIAotCi0KLUdzdEJhc2VUcmFuc2Zvcm0KLS0tLS0tLS0tLS0tLS0tLS0KLQotVHJhbnNmb3JtIGVsZW1lbnRzIGNhbiBlbnRpcmVseSBza2lwIHRoZSB0cmFuc2Zvcm0gYmFzZWQgb24gdGhlIHRpbWVzdGFtcCBhbmQKLWppdHRlciB2YWx1ZXMgb2YgcmVjZW50IFFvUyBldmVudCBzaW5jZSB0aGVzZSBidWZmZXJzIHdpbGwgY2VydGFpbmx5IGFycml2ZQotdG9vIGxhdGUuCi0KLVdpdGggYW55IGludGVybWVkaWF0ZSBlbGVtZW50LCB0aGUgZWxlbWVudCBzaG91bGQgbWVhc3VyZSBpdHMgcGVyZm9ybWFuY2UgdG8KLWRlY2lkZSBpZiBpdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHF1YWxpdHkgcHJvYmxlbXMgb3IgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0KLWVsZW1lbnQuCi0KLXNvbWUgdHJhbnNmb3JtcyBjYW4gcmVkdWNlIHRoZSBjb21wbGV4aXR5IG9mIHRoZWlyIGFsZ29yaXRobXMuIERlcGVuZGluZyBvbiB0aGUKLWFsZ29yaXRobSwgdGhlIGNoYW5nZXMgaW4gcXVhbGl0eSBtYXkgaGF2ZSBkaXN0dXJiaW5nIHZpc3VhbCBvciBhdWRpYmxlIGVmZmVjdCAKLXRoYXQgc2hvdWxkIGJlIGF2b2lkZWQuCi0KLUEgUW9TIG1lc3NhZ2Ugc2hvdWxkIGJlIHBvc3RlZCB3aGVuIGEgZnJhbWUgaXMgZHJvcHBlZCBvciB3aGVuIHRoZSBxdWFsaXR5Ci1vZiB0aGUgZmlsdGVyIGlzIHJlZHVjZWQuIFRoZSBxdWFsaXR5IG1lbWJlciBpbiB0aGUgUU9TIG1lc3NhZ2Ugc2hvdWxkIHJlZmxlY3QKLXRoZSBxdWFsaXR5IHNldHRpbmcgb2YgdGhlIGZpbHRlci4KLQotCi1WaWRlbyBEZWNvZGVycwotLS0tLS0tLS0tLS0tLS0KLQotQSB2aWRlbyBkZWNvZGVyIGNhbiwgYmFzZWQgb24gdGhlIGNvZGVjIGluIHVzZSwgZGVjaWRlIHRvIG5vdCBkZWNvZGUgaW50ZXJtZWRpYXRlCi1mcmFtZXMuIEEgdHlwaWNhbCBjb2RlYyBjYW4gZm9yIGV4YW1wbGUgc2tpcCB0aGUgZGVjb2Rpbmcgb2YgQi1mcmFtZXMgdG8gcmVkdWNlCi10aGUgQ1BVIHVzYWdlIGFuZCBmcmFtZXJhdGUuCi0KLUlmIGVhY2ggZnJhbWUgaXMgaW5kZXBlbmRhbnRseSBkZWNvZGFibGUsIGFueSBhcmJpdHJhcnkgZnJhbWUgY2FuIGJlIHNraXBwZWQgYmFzZWQKLW9uIHRoZSB0aW1lc3RhbXAgYW5kIGppdHRlciB2YWx1ZXMgb2YgdGhlIGxhdGVzdCBRb1MgZXZlbnQuIEluIGFkZGl0aW9uIGNhbiB0aGUKLXByb3BvcnRpb24gbWVtYmVyIGJlIHVzZWQgdG8gcGVybWFuZW50bHkgc2tpcCBmcmFtZXMuCi0KLUl0IGlzIHN1Z2dlc3RlZCB0byBhZGp1c3QgdGhlIHF1YWxpdHkgZmllbGQgb2YgdGhlIFFvUyBtZXNzYWdlIHdpdGggdGhlIGV4cGVjdGVkCi1hbW91bnQgb2YgZHJvcHBlZCBmcmFtZXMgKHNraXBwaW5nIEIgYW5kL29yIFAgZnJhbWVzKS4gVGhpcyBkZXBlbmRzIG9uIHRoZQotcGFydGljdWxhciBzcGFjaW5nIG9mIEIgYW5kIFAgZnJhbWVzIGluIHRoZSBzdHJlYW0uIElmIHRoZSBxdWFsaXR5IGNvbnRyb2wgd291bGQKLXJlc3VsdCBpbiBoYWxmIG9mIHRoZSBmcmFtZXMgdG8gYmUgZHJvcHBlZCAodHlwaWNhbCBCIGZyYW1lIHNraXBwaW5nKSwgdGhlCi1xdWFsaXR5IGZpZWxkIHdvdWxkIGJlIHNldCB0byAxMDAwMDAwICogMS8yID0gNTAwMDAwLiBJZiBhIHR5cGljYWwgSSBmcmFtZSBzcGFjaW5nCi1vZiAxOCBmcmFtZXMgaXMgdXNlZCwgc2tpcHBpbmcgQiBhbmQgUCBmcmFtZXMgd291bGQgcmVzdWx0IGluIDE3IGRyb3BwZWQgZnJhbWVzCi1vciAxIGRlY29kZWQgZnJhbWUgZXZlcnkgMTggZnJhbWVzLiBUaGUgcXVhbGl0eSBtZW1iZXIgc2hvdWxkIGJlIHNldCB0bwotMTAwMDAwMCAqIDEvMTggPSA1NTU1NS4KLQotIC0gc2tpcHBpbmcgQiBmcmFtZXM6IHF1YWxpdHkgPSA1MDAwMDAKLSAtIHNraXBwaW5nIFAvQiBmcmFtZXM6IHF1YWxpdHkgPSA1NTU1NSAoZm9yIEktZnJhbWUgc3BhY2luZyBvZiAxOCBmcmFtZXMpCi0KLQotRGVtdXhlcnMKLS0tLS0tLS0tCi0KLURlbXV4ZXJzIHVzdWFsbHkgY2Fubm90IGRvIGEgbG90IHJlZ2FyZGluZyBRb1MgZXhjZXB0IGZvciBza2lwcGluZyBmcmFtZXMgdG8gdGhlIG5leHQKLWtleWZyYW1lIHdoZW4gYSBsYXRlbmVzcyBRb1MgZXZlbnQgYXJyaXZlcyBvbiBhIHNvdXJjZSBwYWQuCi0KLUEgZGVtdXhlciBjYW4gaG93ZXZlciBtZWFzdXJlIGlmIHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtcyBhcmUgdXBzdHJlYW0gb3IgZG93bnN0cmVhbQotYW5kIGZvcndhcmQgYW4gdXBkYXRlZCBRb1MgZXZlbnQgdXBzdHJlYW0uCi0KLU1vc3QgZGVtdXhlcnMgdGhhdCBoYXZlIG11bHRpcGxlIG91dHB1dCBwYWRzIG1pZ2h0IG5lZWQgdG8gY29tYmluZSB0aGUgUW9TCi1ldmVudHMgb24gYWxsIHRoZSBwYWRzIGFuZCBkZXJpdmUgYW4gYWdncmVnYXRlZCBRb1MgZXZlbnQgZm9yIHRoZSB1cHN0cmVhbSBlbGVtZW50LgotCi0KLVNvdXJjZXMKLS0tLS0tLS0KLQotVGhlIFFvUyBldmVudHMgb25seSBhcHBseSB0byBwdXNoIGJhc2VkIHNvdXJjZXMgc2luY2UgcHVsbCBiYXNlZCBzb3VyY2VzIGFyZSBlbnRpcmVseQotY29udHJvbGxlZCBieSBhbm90aGVyIGRvd25zdHJlYW0gZWxlbWVudC4KLQotU291cmNlcyBjYW4gcmVjZWl2ZSBhIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIHN3aXRjaCB0bwotbGVzcyBkZW1hbmRpbmcgc291cmNlIG1hdGVyaWFsLiBJbiBjYXNlIG9mIGEgbmV0d29yayBzdHJlYW0sIGEgc3dpdGNoIGNvdWxkIGJlIGRvbmUKLXRvIGEgbG93ZXIgb3IgaGlnaGVyIHF1YWxpdHkgc3RyZWFtIG9yIGFkZGl0aW9uYWwgZW5oYW5jZW1lbnQgbGF5ZXJzIGNvdWxkIGJlIHVzZWQKLW9yIGlnbm9yZWQuCi0KLUxpdmUgc291cmNlcyB3aWxsIGF1dG9tYXRpY2FsbHkgZHJvcCBkYXRhIHdoZW4gaXQgdGFrZXMgdG9vIGxvbmcgdG8gcHJvY2VzcyB0aGUgZGF0YSAKLXRoYXQgdGhlIGVsZW1lbnQgcHVzaGVzIG91dC4gCi0KLUxpdmUgc291cmNlcyBzaG91bGQgcG9zdCBhIFFvUyBtZXNzYWdlIHdoZW4gZGF0YSBpcyBkcm9wcGVkLgotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXF1ZXJ5LnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtcXVlcnkudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODE3NzNlLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtcXVlcnkudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLVF1ZXJ5Ci0tLS0tLQotCi1QdXJwb3NlCi1+fn5+fn5+Ci0KLVF1ZXJpZXMgYXJlIHVzZWQgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJlYW0uIAotQSBxdWVyeSBpcyBzdGFydGVkIG9uIGEgc3BlY2lmaWMgcGFkIGFuZCB0cmF2ZWxzIHVwIG9yIGRvd25zdHJlYW0uCi0KLQotUmVxdWlyZW1lbnRzCi1+fn5+fn5+fn5+fn4KLQotICAtIG11bHRpcGxlIHJldHVybiB2YWx1ZXMsIGdyb3VwZWQgdG9nZXRoZXIgd2hlbiB0aGV5IG1ha2Ugc2Vuc2UuCi0gIC0gb25lIHBhZCBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBxdWVyeQotICAtIGV4dGVuc2libGUgcXVlcmllcy4KLQotSW1wbGVtZW50YXRpb24KLX5+fn5+fn5+fn5+fn5+Ci0KLSAgLSBHc3RRdWVyeSBleHRlbmRzIEdzdE1pbmlPYmplY3QgYW5kIGNvbnRhaW5zIGEgR3N0U3RydWN0dXJlIChzZWUgR3N0TWVzc2FnZSkKLSAgLSBzb21lIHN0YW5kYXJkIHF1ZXJ5IHR5cGVzIGFyZSBkZWZpbmVkIGJlbG93Ci0gIC0gbWV0aG9kcyB0byBjcmVhdGUgYW5kIHBhcnNlIHRoZSByZXN1bHRzIGluIHRoZSBHc3RRdWVyeS4KLSAgLSBkZWZpbmUgcGFkIG1ldGhvZDoKLQotICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAoKkdzdFBhZFF1ZXJ5RnVuY3Rpb24pICAgICAgICAgIChHc3RQYWQgICAgKnBhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0T2JqZWN0ICpwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFF1ZXJ5ICAqcXVlcnkpOwotCi0gICAgcGFkIHJldHVybnMgcmVzdWx0IGluIHF1ZXJ5IHN0cnVjdHVyZSBhbmQgVFJVRSBhcyByZXN1bHQgb3IgRkFMU0Ugd2hlbgotICAgIHF1ZXJ5IGlzIG5vdCBzdXBwb3J0ZWQuCi0KLVF1ZXJ5IHR5cGVzCi1+fn5+fn5+fn5+fgotCi0gLSBHU1RfUVVFUllfUE9TSVRJT046Ci0gIAotICAgICBnZXQgaW5mbyBvbiBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBzdHJlYW0gaW4gc3RyZWFtX3RpbWUuCi0KLSAtIEdTVF9RVUVSWV9EVVJBVElPTjoKLQotICAgICBnZXQgaW5mbyBvbiB0aGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHN0cmVhbS4KLSAKLSAtIEdTVF9RVUVSWV9MQVRFTkNZOgotCi0gICAgIGdldCBhbW91bnQgb2YgbGF0ZW5jeSBpbnRyb2R1Y2VkIGluIHRoZSBwaXBlbGluZS4gKFNlZSBwYXJ0LWxhdGVuY3kudHh0KQotCi0gLSBHU1RfUVVFUllfUkFURToKLQotICAgICBnZXQgdGhlIGN1cnJlbnQgcGxheWJhY2sgcmF0ZSBvZiB0aGUgcGlwZWxpbmUKLQotIC0gR1NUX1FVRVJZX1NFRUtJTkc6Ci0gICAKLSAgICAgZ2V0IGluZm8gb24gaG93IHNlZWtpbmcgY2FuIGJlIGRvbmUgCi0gICAgICAgLSBnZXRyYW5nZSwgd2l0aC93aXRob3V0IG9mZnNldC9zaXplCi0gICAgICAgLSByYW5nZXMgd2hlcmUgc2Vla2luZyBpcyBlZmZpY2llbnQgKGZvciBjYWNoaW5nIG5ldHdvcmsgc291cmNlcykKLSAgICAgICAtIGZsYWdzIGRlc2NyaWJpbmcgc2Vla2luZyBiZWhhdmlvdXIgKGZvcndhcmQsIGJhY2t3YXJkLCBzZWdtZW50cywKLQkgICAgICAgICAgICAgcGxheSBiYWNrd2FyZHMsIC4uLikKLQotIC0gR1NUX1FVRVJZX1NFR01FTlQ6Ci0KLSAgICAgZ2V0IGluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIHBsYXliYWNrIHNlZ21lbnQuCi0KLSAtIEdTVF9RVUVSWV9DT05WRVJUOgotCi0gICAgIGNvbnZlcnQgZm9ybWF0L3ZhbHVlIHRvIGFub3RoZXIgZm9ybWF0L3ZhbHVlIHBhaXIuCi0KLSAtIEdTVF9RVUVSWV9GT1JNQVRTOgotCi0gICAgIHJldHVybiBsaXN0IG9mIHN1cHBvcnRlZCBmb3JtYXRzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIEdTVF9RVUVSWV9DT05WRVJULgotCi0gLSBHU1RfUVVFUllfQlVGRkVSSU5HOgotCi0gICAgIHF1ZXJ5IGF2YWlsYWJsZSBtZWRpYSBmb3IgZWZmaWNpZW50IHNlZWtpbmcgKFNlZSBwYXJ0LWJ1ZmZlcmluZy50eHQpCi0KLSAtIEdTVF9RVUVSWV9DVVNUT006Ci0KLSAgICAgYSBjdXN0b20gcXVlcnksIHRoZSBuYW1lIG9mIHRoZSBxdWVyeSBkZWZpbmVzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBxdWVyeS4KLQotIC0gR1NUX1FVRVJZX1VSSToKLQotICAgICBxdWVyeSB0aGUgdXJpIG9mIHRoZSBzb3VyY2Ugb3Igc2luayBlbGVtZW50Ci0KLSAtIEdTVF9RVUVSWV9BTExPQ0FUSU9OOgotCi0gICAgIHRoZSBidWZmZXIgYWxsb2NhdGlvbiBwcm9wZXJ0aWVzIChTZWUgcGFydC1idWZmZXJwb29sLnR4dCkKLQotIC0gR1NUX1FVRVJZX1NDSEVEVUxJTkc6Ci0KLSAgICAgdGhlIHNjaGVkdWxpbmcgcHJvcGVydGllcyAoU2VlIHBhcnQtc2NoZWR1bGluZy50eHQpCi0KLSAtIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUzoKLQotICAgICBjaGVjayBpZiBjYXBzIGFyZSBzdXBwb3J0ZWQgKFNlZSBwYXJ0LW5lZ290aWF0aW9uLnR4dCkKLQotIC0gR1NUX1FVRVJZX0NBUFM6Ci0KLSAgICAgZ2V0IHRoZSBwb3NzaWJsZSBjYXBzIChTZWUgcGFydC1uZWdvdGlhdGlvbi50eHQpCi0gICAgCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtcmVsYXRpb25zLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtcmVsYXRpb25zLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhjYzZkMC4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LXJlbGF0aW9ucy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0OTEgKzAsMCBAQAotT2JqZWN0IHJlbGF0aW9uIHR5cGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHJlbGF0aW9ucyBiZXR3ZWVuIG9iamVjdHMgdGhhdCBleGlzdCBpbiBHU3RyZWFtZXIuCi1JdCB3aWxsIGFsc28gZGVzY3JpYmUgdGhlIHdheSBvZiBoYW5kbGluZyB0aGUgcmVsYXRpb24gd3J0IGxvY2tpbmcgYW5kIAotcmVmY291bnRpbmcuCi0KLXBhcmVudC1jaGlsZCByZWxhdGlvbgotfn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLSAgICAgICstLS0tLS0tLS0rICAgICstLS0tLS0tKwotICAgICAgfCBwYXJlbnQgIHwgICAgfCBjaGlsZCB8Ci0gKi0tLT58ICAgICAgICotLS0tLT58ICAgICAgIHwKLSAgICAgIHwgICAgICAgRjF8PC0tLS0tKiAgICAxfAotICAgICAgKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0rCi0KLSAtIHByb3BlcnRpZXMKLQotICAgLSBwYXJlbnQgaGFzIHJlZmVyZW5jZXMgdG8gbXVsdGlwbGUgY2hpbGRyZW4KLSAgIC0gY2hpbGQgaGFzIHJlZmVyZW5jZSB0byBwYXJlbnQKLSAgIC0gcmVmZXJlbmNlIGZpZWxkcyBwcm90ZWN0ZWQgd2l0aCBMT0NLCi0gICAtIHRoZSByZWZlcmVuY2UgaGVsZCBieSBlYWNoIGNoaWxkIHRvIHRoZSBwYXJlbnQgaXMKLSAgICAgTk9UIHJlZmxlY3RlZCBpbiB0aGUgcmVmY291bnQgb2YgdGhlIHBhcmVudC4KLSAgIC0gdGhlIHBhcmVudCByZW1vdmVzIHRoZSBmbG9hdGluZyBmbGFnIG9mIHRoZSBjaGlsZCB3aGVuIHRha2luZwotICAgICBvd25lcnNoaXAuCi0gICAtIHRoZSBhcHBsaWNhdGlvbiBoYXMgdmFsaWQgcmVmZXJlbmNlIHRvIHBhcmVudAotICAgLSBjcmVhdGlvbi9kZXN0cnVjdGlvbiByZXF1aXJlcyB0d28gdW5uZXN0ZWQgbG9ja3MgYW5kIDEgcmVmY291bnQuCi0KLSAtIHVzYWdlIGluIEdTdHJlYW1lcgotCi0gICAgR3N0QmluIC0+IEdzdEVsZW1lbnQKLSAgICBHc3RFbGVtZW50IC0+IEdzdFJlYWxQYWQKLQotIC0gbGlmZWN5Y2xlCi0gCi0gYSkgb2JqZWN0IGNyZWF0aW9uCi0KLSAgICBUaGUgYXBwbGljYXRpb24gY3JlYXRlcyB0d28gb2JqZWN0IGFuZCBob2xkcyBhIHBvaW50ZXIKLSAgICB0byB0aGVtLiBUaGUgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IEZMT0FUSU5HIHdpdGggYSByZWZjb3VudAotICAgIG9mIDEuCi0KLSAgICAgICAgICstLS0tLS0tLS0rICAgICAgICAgICAgICArLS0tLS0tLSsKLSAgICAqLS0tPnwgcGFyZW50ICB8ICAgICAgICAgKi0tLT58IGNoaWxkIHwKLSAgICAgICAgIHwgICAgICAgKiB8ICAgICAgICAgICAgICB8ICAgICAgIHwKLSAgICAgICAgIHwgICAgICAgRjF8ICAgICAgICAgICAgICB8ICogICBGMXwKLSAgICAgICAgICstLS0tLS0tLS0rICAgICAgICAgICAgICArLS0tLS0tLSsKLQotIGIpIGVzdGFibGlzaGluZyB0aGUgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcAotCi0gICAgVGhlIGFwcGxpY2F0aW9uIHRoZW4gY2FsbHMgYSBtZXRob2Qgb24gdGhlIHBhcmVudCBvYmplY3QgdG8gdGFrZQotICAgIG93bmVyc2hpcCBvZiB0aGUgY2hpbGQgb2JqZWN0LiBUaGUgcGFyZW50IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcKLSAgICBhY3Rpb25zOgotCi0gICAgICByZXN1bHQgPSBfc2V0X3BhcmVudCAoY2hpbGQsIHBhcmVudCk7Ci0gICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIExPQ0sgKHBhcmVudCk7Ci0gICAgICAgIHJlZl9wb2ludGVyID0gY2hpbGQ7Ci0KLSAgICAgICAgLi4gdXBkYXRlIG90aGVyIGRhdGEgc3RydWN0dXJlcyAuLgotICAgICAgICBVTkxPQ0sgKHBhcmVudCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLi4gY2hpbGQgaGFkIHBhcmVudCAuLgotICAgICAgfQotCi0gICAgVGhlIF9zZXRfcGFyZW50KCkgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKLSAgICAKLSAgICAgIExPQ0sgKGNoaWxkKTsKLSAgICAgIGlmIChjaGlsZC0+cGFyZW50ICE9IE5VTEwpIHsKLSAgICAgICAgVU5MT0NLIChjaGlsZCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGlmIChJU19GTE9BVElORyAoY2hpbGQpKSB7Ci0gICAgICAgIFVOU0VUIChjaGlsZCwgRkxPQVRJTkcpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIF9yZWYgKGNoaWxkKTsKLSAgICAgIH0KLSAgICAgIGNoaWxkLT5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICBVTkxPQ0sgKGNoaWxkKTsKLSAgICAgIF9zaWduYWwgKFBBUkVOVF9TRVQsIGNoaWxkLCBwYXJlbnQpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICAKLSAgICBUaGUgZnVuY3Rpb24gYXRvbWljYWxseSBjaGVja3MgaWYgdGhlIGNoaWxkIGhhcyBubyBwYXJlbnQgeWV0Ci0gICAgYW5kIHdpbGwgc2V0IHRoZSBwYXJlbnQgaWYgbm90LiBJdCB3aWxsIGFsc28gc2luayB0aGUgY2hpbGQsIG1lYW5pbmcKLSAgICBhbGwgZmxvYXRpbmcgcmVmZXJlbmNlcyB0byB0aGUgY2hpbGQgYXJlIGludmFsaWQgbm93IGFzIGl0IHRha2VzCi0gICAgb3ZlciB0aGUgcmVmY291bnQgb2YgdGhlIG9iamVjdC4KLQotICAgIFZpc3VhbGx5OgotCi0gICAgICBhZnRlciBfc2V0X3BhcmVudCgpIHJldHVybnMgVFJVRToKLQotICAgICAgICAgICstLS0tLS0tLS0rICAgICAgICAgICAgKy0tLS0tLS0rCi0gICAgKi0tLS0+fCBwYXJlbnQgIHwgICAgICAqLS8vLT58IGNoaWxkIHwKLSAgICAgICAgICB8ICAgICAgICogfCAgICAgICAgICAgIHwgICAgICAgfAotICAgICAgICAgIHwgICAgICAgRjF8PC0tLS0tLS0tLS0tLS0qICAgIDF8Ci0gICAgICAgICAgKy0tLS0tLS0tLSsgICAgICAgICAgICArLS0tLS0tLSsKLQotICAgICAgYWZ0ZXIgcGFyZW50IHVwZGF0ZXMgcmVmX3BvaW50ZXIgdG8gY2hpbGQuCi0KLSAgICAgICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0rCi0gICAgKi0tLS0+fCBwYXJlbnQgIHwgICotLy8tPnwgY2hpbGQgfAotICAgICAgICAgIHwgICAgICAgKi0tLS0tLS0tLT58ICAgICAgIHwKLSAgICAgICAgICB8ICAgICAgIEYxfDwtLS0tLS0tLS0qICAgIDF8Ci0gICAgICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tKwotICAgICAKLSAgIC0gb25seSBvbmUgcGFyZW50IGlzIGFibGUgdG8gX3NpbmsgdGhlIHNhbWUgb2JqZWN0IGJlY2F1c2UgdGhlCi0gICAgIF9zZXRfcGFyZW50KCkgbWV0aG9kIGlzIGF0b21pYy4KLSAgIC0gc2luY2Ugb25seSBvbmUgcGFyZW50IGlzIGFibGUgdG8gX3NldF9wYXJlbnQoKSB0aGUgb2JqZWN0LCBvbmx5Ci0gICAgIG9uZSB3aWxsIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LgotICAgLSBzaW5jZSB0aGUgcGFyZW50IGNhbiBob2xkIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gY2hpbGRyZW4sIHdlIGRvbid0Ci0gICAgIG5lZWQgdG8gbG9jayB0aGUgcGFyZW50IHdoZW4gbG9ja2luZyB0aGUgY2hpbGQuIE1hbnkgdGhyZWFkcyBjYW4KLSAgICAgY2FsbCBfc2V0X3BhcmVudCgpIG9uIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIHBhcmVudCwgdGhlIHBhcmVudAotICAgICBjYW4gdGhlbiBhZGQgYWxsIHRob3NlIHRvIGl0cyBsaXN0cy4KLQotICAgTm90ZTogdGhhdCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQgYmVmb3JlIHRoZSBwYXJlbnQgaGFzIGFkZGVkIHRoZQotICAgZWxlbWVudCB0byBpdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIG5vdCBhIHByb2JsZW0KLSAgIHNpbmNlIHRoZSBwYXJlbnQgdXN1YWxseSBoYXMgaGlzIG93biBzaWduYWwgdG8gaW5mb3JtIHRoZSBhcHAgdGhhdAotICAgdGhlIGNoaWxkIHdhcyByZWZmZWQuIE9uZSBwb3NzaWJsZSBzb2x1dGlvbiB3b3VsZCBiZSB0byB1cGRhdGUgdGhlCi0gICBpbnRlcm5hbCBzdHJ1Y3R1cmUgZmlyc3QgYW5kIHRoZW4gcGVyZm9ybSBhIHJvbGxiYWNrIGlmIHRoZSBfc2V0X3BhcmVudCgpCi0gICBmYWlsZWQuIFRoaXMgaXMgbm90IGEgZ29vZCBzb2x1dGlvbiBhcyBpdGVyYXRvcnMgbWlnaHQgZ3JhYiB0aGUKLSAgICdoYWxmLWFkZGVkJyBjaGlsZCB0b28gc29vbi4KLSAgIAotIGMpIHVzaW5nIHRoZSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwCi0gICAKLSAgICAtIHNpbmNlIHRoZSBpbml0aWFsIGZsb2F0aW5nIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgb2JqZWN0IGJlY2FtZQotICAgICAgaW52YWxpZCBhZnRlciBnaXZpbmcgaXQgdG8gdGhlIHBhcmVudCwgYW55IHJlZmVyZW5jZSB0byBhIGNoaWxkCi0gICAgICBoYXMgYXQgbGVhc3QgYSByZWZjb3VudCA+IDEuCi0KLSAgICAtIHRoaXMgbWVhbnMgdGhhdCB1bnJlZmZpbmcgYSBjaGlsZCBvYmplY3QgY2Fubm90IGRlY3JlYXNlIHRoZSByZWZjb3VudAotICAgICAgdG8gMC4gSW4gZmFjdCwgb25seSB0aGUgcGFyZW50IGNhbiBkZXN0cm95IGFuZCBkaXNwb3NlIHRoZSBjaGlsZAotICAgICAgb2JqZWN0LgotCi0gICAgLSBnaXZlbiBhIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgb2JqZWN0LCB0aGUgcGFyZW50IHBvaW50ZXIgaXMgb25seQotICAgICAgdmFsaWQgd2hlbiBob2xkaW5nIHRoZSBjaGlsZCBMT0NLLiBJbmRlZWQsIGFmdGVyIHVubG9ja2luZyB0aGUgY2hpbGQKLSAgICAgIExPQ0ssIHRoZSBwYXJlbnQgY2FuIHVucGFyZW50IHRoZSBjaGlsZCBvciB0aGUgcGFyZW50IGNvdWxkIGV2ZW4gYmVjb21lCi0gICAgICBkaXNwb3NlZC4gVG8gYXZvaWQgdGhlIHBhcmVudCBkaXNwb3NlIHByb2JsZW0sIHdoZW4gb2J0YWluaW5nIHRoZSAKLSAgICAgIHBhcmVudCBwb2ludGVyLCBpZiBzaG91bGQgYmUgcmVmZmVkIGJlZm9yZSByZWxlYXNpbmcgdGhlIGNoaWxkIExPQ0suCi0gICAgCi0gICAgMSkgZ2V0dGluZyBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50LgotICAgICAgIAotICAgICAgIC0gYSByZWZlcmVjZSBpcyBoZWxkIHRvIHRoZSBjaGlsZCwgc28gaXQgY2Fubm90IGJlIGRpc3Bvc2VkLgotICAgICAgIAotICAgICAgIExPQ0sgKGNoaWxkKTsKLSAgICAgICBwYXJlbnQgPSBfcmVmIChjaGlsZC0+cGFyZW50KTsKLSAgICAgICBVTkxPQ0sgKGNoaWxkKTsKLQotICAgICAgIC4uIHVzZSBwYXJlbnQgLi4KLQotICAgICAgIF91bnJlZiAocGFyZW50KTsKLQotICAgIDIpIGdldHRpbmcgYSByZWZlcmVuY2UgdG8gYSBjaGlsZAotICAgICAgIAotICAgICAgIC0gYSByZWZlcmVuY2UgdG8gYSBjaGlsZCBjYW4gYmUgb2J0YWluZWQgYnkgcmVmZmluZyBpdCBiZWZvcmUgCi0gICAgICAgICBhZGRpbmcgaXQgdG8gdGhlIHBhcmVudCBvciBieSBxdWVyeWluZyB0aGUgcGFyZW50LgotCi0gICAgICAgLSB3aGVuIHJlcXVlc3RpbmcgYSBjaGlsZCBmcm9tIHRoZSBwYXJlbnQsIGEgcmVmZXJlbmNlIGlzIGhlbGQgdG8gCi0gICAgICAgICB0aGUgcGFyZW50IHNvIGl0IGNhbm5vdCBiZSBkaXNwb3NlZC4gVGhlIHBhcmVudCB3aWxsIHVzZSBpdHMKLSAgICAgICAgIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBsb2NhdGUgdGhlIGNoaWxkIGVsZW1lbnQgYW5kIHdpbGwKLSAgICAgICAgIHJldHVybiBhIHJlZmVyZW5jZSB0byBpdCB3aXRoIGFuIGluY3JlbWVudGVkIHJlZmNvdW50LiBUaGUKLSAgICAgICAgIHJlcXVlc3RlciBzaG91bGQgX3VucmVmKCkgdGhlIGNoaWxkIGFmdGVyIHVzYWdlLgotICAgICAgIAotICAgCi0gZCkgZGVzdHJveWluZyB0aGUgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcAotCi0gICAgLSBvbmx5IHRoZSBwYXJlbnQgY2FuIGFjdGl2ZWx5IGRlc3Ryb3kgdGhlIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAKLSAgICAgIHRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBhIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIHBhcmVudCB0byByZWxlYXNlCi0gICAgICBvd25lcnNoaXAgb2YgdGhlIGNoaWxkLgotCi0gICAgLSBhIGNoaWxkIHNoYWxsIG5ldmVyIHJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgcGFyZW50LgotCi0gICAgLSBzaW5jZSBjYWxsaW5nIGEgbWV0aG9kIG9uIHRoZSBwYXJlbnQgd2l0aCB0aGUgY2hpbGQgYXMgYW4gYXJndW1lbnQKLSAgICAgIHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gb2J0YWluIGEgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCwgdGhlIGNoaWxkCi0gICAgICByZWZjb3VudCBpcyBhdCBsZWFzdCA+IDEuCi0KLSAgICAtIHRoZSBwYXJlbnQgd2lsbCBwZXJmb3JtIHRoZSBmb2xvd2luZyBhY3Rpb25zOgotCi0gICAgICAgIExPQ0sgKHBhcmVudCk7Ci0gICAgICAgIGlmIChyZWZfcG9pbnRlciA9PSBjaGlsZCkgewotICAgICAgICAgIHJlZl9wb2ludGVyID0gTlVMTDsKLQotICAgICAgICAgIC4uIHVwZGF0ZSBvdGhlciBkYXRhIHN0cnVjdHVyZXMgLi4KLSAgICAgICAgICBVTkxPQ0sgKHBhcmVudCk7Ci0KLSAgICAgICAgICBfdW5wYXJlbnQgKGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBVTkxPQ0sgKHBhcmVudCk7Ci0gICAgICAgICAgLi4gbm90IG91ciBjaGlsZCAuLgotICAgICAgICB9Ci0KLSAgICBUaGUgX3VucGFyZW50KCkgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKLSAgICAKLSAgICAgIExPQ0sgKGNoaWxkKTsKLSAgICAgIGlmIChjaGlsZC0+cGFyZW50ICE9IE5VTEwpIHsKLSAgICAgICAgY2hpbGQtPnBhcmVudCA9IE5VTEw7Ci0gICAgICAgIFVOTE9DSyAoY2hpbGQpOwotICAgICAgICBfc2lnbmFsIChQQVJFTlRfVU5TRVQsIGNoaWxkLCBwYXJlbnQpOwotCi0gICAgICAgIF91bnJlZiAoY2hpbGQpOwotICAgICAgfQotICAgICAgZWxzZSB7Ci0gICAgICAgIFVOTE9DSyAoY2hpbGQpOwotICAgICAgfQotICAgICAgCi0gICAgU2luY2UgdGhlIF91bnBhcmVudCgpIG1ldGhvZCB1bnJlZnMgdGhlIGNoaWxkIG9iamVjdCwgaXQgaXMgcG9zc2libGUgdGhhdAotICAgIHRoZSBjaGlsZCBwb2ludGVyIGlzIGludmFsaWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbi4gSWYgdGhlIHBhcmVudCB3YW50cyB0bwotICAgIHBlcmZvcm0gb3RoZXIgYWN0aW9ucyBvbiB0aGUgY2hpbGQgKHN1Y2ggYXMgc2lnbmFsIGVtbWlzaW9uKSBpdCBzaG91bGQKLSAgICBfcmVmKCkgdGhlIGNoaWxkIGZpcnN0LgotCi0KLXNpbmdsZS1yZWZmZWQgcmVsYXRpb24KLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCi0gKi0tLT58IG9iamVjdDEgfCAgICotLS0+fCBvYmplY3QyIHwKLSAgICAgIHwgICAgICAgKi0tLS0tLS0tLT58ICAgICAgICAgfAotICAgICAgfCAgICAgICAgMXwgICAgICAgIHwgICAgICAgIDJ8Ci0gICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKLQotIC0gcHJvcGVydGllcwotCi0gICAtIG9uZSBvYmplY3QgaGFzIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIKLSAgIC0gcmVmZXJlbmNlIGZpZWxkIHByb3RlY3RlZCB3aXRoIExPQ0sKLSAgIC0gdGhlIHJlZmVyZW5jZSBoZWxkIGJ5IHRoZSBvYmplY3QgaXMgcmVmbGVjdGVkIGluIHRoZQotICAgICByZWZjb3VudCBvZiB0aGUgb3RoZXIgb2JqZWN0LgotICAgLSB0eXBpY2FsbHkgdGhlIG90aGVyIG9iamVjdCBjYW4gYmUgc2hhcmVkIGFtb25nIG11bHRpcGxlCi0gICAgIG90aGVyIG9iamVjdHMgd2hlcmUgZWFjaCByZWYgaXMgY291bnRlZCBmb3IgaW4gdGhlCi0gICAgIHJlZmNvdW50LgotICAgLSBubyBvYmplY3QgaGFzIG93bmVyc2hpcCBvZiB0aGUgb3RoZXIuIAotICAgLSBlaXRoZXIgc2hhcmVkIHN0YXRlIG9yIGNvcHktb24td3JpdGUuCi0gICAtIGNyZWF0aW9uL2Rlc3RydWN0aW9uIHJlcXVpcmVzIG9uZSBsb2NrIGFuZCBvbmUgcmVmY291bnQuCi0KLSAtIHVzYWdlCi0KLSAgICBHc3RSZWFsUGFkIC0+IEdzdENhcHMKLSAgICBHc3RCdWZmZXIgLT4gR3N0Q2FwcwotICAgIEdzdEV2ZW50IC0+IEdzdENhcHMKLSAgICBHc3RFdmVudCAtPiBHc3RPYmplY3QKLSAgICBHc3RNZXNzYWdlIC0+IEdzdENhcHMKLSAgICBHc3RNZXNzYWdlIC0+IEdzdE9iamVjdAotCi0gLSBsaWZlY3ljbGUKLQotIGEpIFR3byBvYmplY3RzIGV4aXN0IHVubGlua2VkLgotICAgCi0gICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKLSAqLS0tPnwgb2JqZWN0MSB8ICAgKi0tLT58IG9iamVjdDIgfAotICAgICAgfCAgICAgICogIHwgICAgICAgIHwgICAgICAgICB8Ci0gICAgICB8ICAgICAgICAxfCAgICAgICAgfCAgICAgICAgMXwKLSAgICAgICstLS0tLS0tLS0rICAgICAgICArLS0tLS0tLS0tKwotCi0gYikgZXN0YWJsaXNoaW5nIHRoZSBzaW5nbGUtcmVmZmVkIHJlbGF0aW9uc2hpcAotCi0gICBUaGUgc2Vjb25kIG9iamVjdCBpcyBhdHRhY2hlZCB0byB0aGUgZmlyc3Qgb25lIHVzaW5nIGEgbWV0aG9kCi0gICBvbiB0aGUgZmlyc3Qgb2JqZWN0LiBUaGUgc2Vjb25kIG9iamVjdCBpcyByZWZmZWQgYW5kIGEgcG9pbnRlcgotICAgaXMgdXBkYXRlZCBpbiB0aGUgZmlyc3Qgb2JqZWN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgotCi0gICAgIExPQ0sgKG9iamVjdDEpOwotICAgICBpZiAob2JqZWN0MS0+cG9pbnRlcikKLSAgICAgICBfdW5yZWYgKG9iamVjdDEtPnBvaW50ZXIpOwotICAgICBvYmplY3QxLT5wb2ludGVyID0gX3JlZiAob2JqZWN0Mik7Ci0gICAgIFVOTE9DSyAob2JqZWN0MSk7Ci0KLSAgIEFmdGVyIHJlbGVhc2luZyB0aGUgbG9jayBvbiB0aGUgZmlyc3Qgb2JqZWN0IGlzIGlzIG5vdCBzdXJlIHRoYXQKLSAgIG9iamVjdDIgaXMgc3RpbGwgcmVmZmVkIGZyb20gb2JqZWN0MS4KLQotICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCi0gKi0tLT58IG9iamVjdDEgfCAgICotLS0+fCBvYmplY3QyIHwKLSAgICAgIHwgICAgICAgKi0tLS0tLS0tLT58ICAgICAgICAgfAotICAgICAgfCAgICAgICAgMXwgICAgICAgIHwgICAgICAgIDJ8Ci0gICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKLQotIGMpIHVzaW5nIHRoZSBzaW5nbGUtcmVmZmVkIHJlbGF0aW9uc2hpcAotCi0gICBUaGUgb25seSB3YXkgdG8gYWNjZXNzIG9iamVjdDIgaXMgYnkgaG9sZGluZyBhIHJlZiB0byBpdCBvciBieQotICAgZ2V0dGluZyB0aGUgcmVmZXJlbmNlIGZyb20gb2JqZWN0MS4KLSAgIFJlYWRpbmcgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IG9iamVjdDEgY2FuIGJlIGRvbmUgbGlrZSB0aGlzOgotCi0gICAgIExPQ0sgKG9iamVjdDEpOwotICAgICBvYmplY3QyID0gb2JqZWN0MS0+cG9pbnRlcjsKLSAgICAgX3JlZiAob2JqZWN0Mik7Ci0gICAgIFVOTE9DSyAob2JqZWN0MSk7Ci0KLSAgICAgLi4gdXNlIG9iamVjdDIgLi4uCi0gICAgIF91bnJlZiAob2JqZWN0Mik7Ci0KLSAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LCBtb2RpZmljYXRpb25zIGNhbiBiZSBkb25lIGVpdGhlcgotICAgd2l0aCBjb3B5LW9uLXdyaXRlIG9yIGRpcmVjdGx5IGludG8gdGhlIG9iamVjdC4KLQotICAgQ29weSBvbiB3cml0ZSBjYW4gcHJhY3RpY2FsbHkgb25seSBiZSBkb25lIGxpa2UgdGhpczoKLQotICAgICBMT0NLIChvYmplY3QxKTsKLSAgICAgb2JqZWN0MiA9IG9iamVjdDEtPnBvaW50ZXI7Ci0gICAgIG9iamVjdDIgPSBfY29weV9vbl93cml0ZSAob2JqZWN0Mik7Ci0gICAgIC4uLiBtYWtlIG1vZGlmaWNhdGlvbnMgdG8gb2JqZWN0MiAuLi4KLSAgICAgVU5MT0NLIChvYmplY3QxKTsKLQotICAgUmVsZWFzaW5nIHRoZSBsb2NrIGhhcyBvbmx5IGEgdmVyeSBzbWFsbCB3aW5kb3cgd2hlcmUgdGhlIGNvcHlfb25fd3JpdGUKLSAgIGFjdHVhbGx5IGRvZXMgbm90IHBlcmZvcm0gYSBjb3B5OgotCi0gICAgIExPQ0sgKG9iamVjdDEpOwotICAgICBvYmplY3QyID0gb2JqZWN0MS0+cG9pbnRlcjsKLSAgICAgX3JlZiAob2JqZWN0Mik7Ci0gICAgIFVOTE9DSyAob2JqZWN0MSk7Ci0KLSAgICAgLi4gb2JqZWN0MiBub3cgaGFzIGF0IGxlYXN0IDIgcmVmY291bnRzIG1ha2luZyB0aGUgbmV4dAotICAgICAgICBjb3B5LW9uLXdyaXRlIG1ha2UgYSByZWFsIGNvcHksIHVubGVzcyBzb21lIG90aGVyIHRocmVhZAotICAgICAgICB3cml0ZXMgYW5vdGhlciBvYmplY3QyIHRvIG9iamVjdDEgaGVyZSAuLi4KLQotICAgICBvYmplY3QyID0gX2NvcHlfb25fd3JpdGUgKG9iamVjdDIpOwotCi0gICAgIC4uIG1ha2UgbW9kaWZpY2F0aW9ucyB0byBvYmplY3QyIC4uLgotCi0gICAgIExPQ0sgKG9iamVjdDEpOwotICAgICBpZiAob2JqZWN0MS0+cG9pbnRlciAhPSBvYmplY3QyKSB7Ci0gICAgICAgaWYgKG9iamVjdDEtPnBvaW50ZXIpCi0gICAgICAgICBfdW5yZWYgKG9iamVjdDEtPnBvaW50ZXIpOwotICAgICAgIG9iamVjdDEtPnBvaW50ZXIgPSBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0Mik7Ci0gICAgIH0KLSAgICAgVU5MT0NLIChvYmplY3QxKTsKLQotIGQpIGRlc3Ryb3lpbmcgdGhlIHNpbmdsZS1yZWZmZWQgcmVsYXRpb25zaGlwCi0gIAotICAgVGhlIGZvbG93aW5nIGFsZ29yaXRobSByZW1vdmVzIHRoZSBzaW5nbGUtcmVmZmVkIGxpbmsgYmV0d2VlbgotICAgb2JqZWN0MSBhbmQgb2JqZWN0Mi4KLQotICAgICBMT0NLIChvYmplY3QxKTsKLSAgICAgX3VucmVmIChvYmplY3QxLT5wb2ludGVyKTsKLSAgICAgb2JqZWN0MS0+cG9pbnRlciA9IE5VTEw7Ci0gICAgIFVOTE9DSyAob2JqZWN0MSk7Ci0gICAgIAotICAgV2hpY2ggeWllbGRzIHRoZSBmb2xsb3dpbmcgaW5pdGlhbCBzdGF0ZSBhZ2FpbjoKLQotICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCi0gKi0tLT58IG9iamVjdDEgfCAgICotLS0+fCBvYmplY3QyIHwKLSAgICAgIHwgICAgICAqICB8ICAgICAgICB8ICAgICAgICAgfAotICAgICAgfCAgICAgICAgMXwgICAgICAgIHwgICAgICAgIDF8Ci0gICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKLQotCi11bnJlZmZlZCByZWxhdGlvbgotfn5+fn5+fn5+fn5+fn5+fn4KLSAKLSAgICAgICstLS0tLS0tLS0rICAgICAgICArLS0tLS0tLS0tKwotICotLS0+fCBvYmplY3QxIHwgICAqLS0tPnwgb2JqZWN0MiB8Ci0gICAgICB8ICAgICAgICotLS0tLS0tLS0+fCAgICAgICAgIHwKLSAgICAgIHwgICAgICAgIDF8PC0tLS0tLS0tLSogICAgICAxfAotICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCi0gICAgICAKLSAtIHByb3BlcnRpZXMKLQotICAgLSB0d28gb2JqZWN0cyBoYXZlIHJlZmVyZW5jZXMgdG8gZWFjaCBvdGhlcgotICAgLSBib3RoIG9iamVjdHMgY2FuIG9ubHkgaGF2ZSAxIHJlZmVyZW5jZSB0byBhbm90aGVyIG9iamVjdC4KLSAgIC0gcmVmZXJlbmNlIGZpZWxkcyBwcm90ZWN0ZWQgd2l0aCBMT0NLCi0gICAtIHRoZSByZWZlcmVuY2VzIGhlbGQgYnkgZWFjaCBvYmplY3QgYXJlIE5PVCByZWZsZWN0ZWQgaW4gdGhlCi0gICAgIHJlZmNvdW50IG9mIHRoZSBvdGhlciBvYmplY3QuCi0gICAtIG5vIG9iamVjdCBoYXMgb3duZXJzaGlwIG9mIHRoZSBvdGhlci4KLSAgIC0gdHlwaWNhbGx5IGVhY2ggb2JqZWN0IGlzIG93bmVkIGJ5IGEgZGlmZmVyZW50IHBhcmVudC4KLSAgIC0gY3JlYXRpb24vZGVzdHJ1Y3Rpb24gcmVxdWlyZXMgdHdvIG5lc3RlZCBsb2NrcyBhbmQgbm8gcmVmY291bnRzLgotCi0gLSB1c2FnZQotCi0gICAtIFRoaXMgdHlwZSBvZiBsaW5rIGlzIHVzZWQgd2hlbiB0aGUgbGluayBpcyBsZXNzIGltcG9ydGFudCB0aGFuIAotICAgICB0aGUgZXhpc3RhbmNlIG9mIHRoZSBvYmplY3RzLCBJZiBvbmUgb2YgdGhlIG9iamVjdHMgaXMgZGlzcG9zZWQsIHNvIAotICAgICBpcyB0aGUgbGluay4KLSAgIAotICAgR3N0UmVhbFBhZCA8LT4gR3N0UmVhbFBhZCAoc3JjcGFkIGxvY2sgdGFrZW4gZmlyc3QpCi0KLSAtIGxpZmVjeWNsZQotCi0gYSkgVHdvIG9iamVjdHMgZXhpc3QgdW5saW5rZWQuCi0KLSAgICAgICstLS0tLS0tLS0rICAgICAgICArLS0tLS0tLS0tKwotICotLS0+fCBvYmplY3QxIHwgICAqLS0tPnwgb2JqZWN0MiB8Ci0gICAgICB8ICAgICAgICogfCAgICAgICAgfCAgICAgICAgIHwKLSAgICAgIHwgICAgICAgIDF8ICAgICAgICB8ICogICAgICAxfAotICAgICAgKy0tLS0tLS0tLSsgICAgICAgICstLS0tLS0tLS0rCi0KLSBiKSBlc3RhYmxpc2hpbmcgdGhlIHVucmVmZmVkIHJlbGF0aW9uc2hpcAotIAotICAgIFNpbmNlIHdlIG5lZWQgdG8gdGFrZSB0d28gbG9ja3MsIHRoZSBvcmRlciBpbiB3aGljaCB0aGVzZSBsb2NrcyBhcmUKLSAgICB0YWtlbiBpcyB2ZXJ5IGltcG9ydGFudCBvciB3ZSBtaWdodCBjYXVzZSBkZWFkbG9ja3MuIFRoaXMgbG9jayBvcmRlcgotICAgIG11c3QgYmUgZGVmaW5lZCBmb3IgYWxsIHVucmVmZmVkIHJlbGF0aW9ucy4gSW4gdGhlc2UgZXhhbXBsZXMgd2UgYWx3YXlzCi0gICAgbG9jayBvYmplY3QxIGZpcnN0IGFuZCB0aGVuIG9iamVjdDIuCi0KLSAgICAgIExPQ0sgKG9iamVjdDEpOwotICAgICAgTE9DSyAob2JqZWN0Mik7Ci0gICAgICBvYmplY3QyLT5yZWZwb2ludGVyID0gb2JqZWN0MTsKLSAgICAgIG9iamVjdDEtPnJlZnBvaW50ZXIgPSBvYmplY3QyOwotICAgICAgVU5MT0NLIChvYmplY3QyKTsKLSAgICAgIFVOTE9DSyAob2JqZWN0MSk7Ci0KLSBjKSB1c2luZyB0aGUgdW5yZWZmZWQgcmVsYXRpb25zaGlwCi0KLSAgICBSZWFkaW5nIHJlcXVpcmVzIHRha2luZyBvbmUgb2YgdGhlIGxvY2tzIGFuZCByZWFkaW5nIHRoZSBjb3JyZXNwb25pbmcKLSAgICBvYmplY3QuIEFnYWluIHdlIG5lZWQgdG8gcmVmIHRoZSBvYmplY3QgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jay4KLQotICAgICAgTE9DSyAob2JqZWN0MSk7Ci0gICAgICBvYmplY3QyID0gX3JlZiAob2JqZWN0MS0+cmVmcG9pbnRlcik7Ci0gICAgICBVTkxPQ0sgKG9iamVjdDEpOwotCi0gICAgICAuLiB1c2Ugb2JqZWN0MiAuLgotICAgICAgX3VucmVmIChvYmplY3QyKTsKLSAgICAgIAotIGQpIGRlc3Ryb3lpbmcgdGhlIHVucmVmZmVkIHJlbGF0aW9uc2hpcAotIAotICAgIEJlY2F1c2Ugb2YgdGhlIGxvY2sgb3JkZXIgd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdoZW4gZGVzdHJveWluZyB0aGlzCi0gICAgUmVsYXRpb24uIAotICAgIAotICAgIFdoZW4gb25seSBhIHJlZmVyZW5jZSB0byBvYmplY3QxIGlzIGhlbGQ6Ci0KLSAgICAgIExPQ0sgKG9iamVjdDEpOwotICAgICAgTE9DSyAob2JqZWN0Mik7Ci0gICAgICBvYmplY3QxLT5yZWZwb2ludGVyLT5yZWZwb2ludGVyID0gTlVMTDsKLSAgICAgIG9iamVjdDEtPnJlZnBvaW50ZXIgPSBOVUxMOwotICAgICAgVU5MT0NLIChvYmplY3QyKTsKLSAgICAgIFVOTE9DSyAob2JqZWN0MSk7Ci0KLSAgICBXaGVuIG9ubHkgYSByZWZlcmVuY2UgdG8gb2JqZWN0MiBpcyBoZWxkIHdlIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIHRvIHRoZQotICAgIG90aGVyIG9iamVjdCBmaXN0IHNvIHRoYXQgd2UgY2FuIGxvY2sgaXQgZmlyc3QuIFRoZXJlIGlzIGEgd2luZG93IHdoZXJlIAotICAgIHdlIG5lZWQgdG8gcmVsZWFzZSBhbGwgbG9ja3MgYW5kIHRoZSByZWxhdGlvbiBjb3VsZCBiZSBpbnZhbGlkLiBUbyBzb2x2ZQotICAgIHRoaXMgd2UgY2hlY2sgdGhlIHJlbGF0aW9uIGFmdGVyIGdyYWJiaW5nIGJvdGggbG9ja3MgYW5kIHJldHJ5IGlmIHRoZQotICAgIHJlbGF0aW9uIGNoYW5nZWQuCi0KLSAgICByZXRyeToKLSAgICAgIExPQ0sgKG9iamVjdDIpOwotICAgICAgb2JqZWN0MSA9IF9yZWYgKG9iamVjdDItPnJlZnBvaW50ZXIpOwotICAgICAgVU5MT0NLIChvYmplY3QyKTsKLSAgICAgIC4uIHRoaW5ncyBjYW4gY2hhbmdlIGhlcmUgLi4KLSAgICAgIExPQ0sgKG9iamVjdDEpOwotICAgICAgTE9DSyAob2JqZWN0Mik7Ci0gICAgICBpZiAob2JqZWN0MSA9PSBvYmplY3QyLT5yZWZwb2ludGVyKSB7Ci0gICAgICAgIC8qIHJlbGF0aW9uIHVuY2hhbmdlZCAqLwotICAgICAgICBvYmplY3QxLT5yZWZwb2ludGVyLT5yZWZwb2ludGVyID0gTlVMTDsKLSAgICAgICAgb2JqZWN0MS0+cmVmcG9pbnRlciA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLyogcmVsYXRpb24gY2hhbmdlZC4uIHJldHJ5ICovCi0gICAgICAgIFVOTE9DSyAob2JqZWN0Mik7Ci0gICAgICAgIFVOTE9DSyAob2JqZWN0MSk7Ci0gICAgICAgIF91bnJlZiAob2JqZWN0MSk7Ci0gICAgICAgIGdvdG8gcmV0cnk7Ci0gICAgICB9Ci0gICAgICBVTkxPQ0sgKG9iamVjdDIpOwotICAgICAgVU5MT0NLIChvYmplY3QxKTsKLSAgICAgIF91bnJlZiAob2JqZWN0MSk7Ci0KLSAgICBXaGVuIHJlZmVyZW5jZXMgYXJlIGhlbGQgdG8gYm90aCBvYmplY3RzLiBOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvCi0gICAgZ2V0IHJlZmVyZW5jZXMgdG8gYm90aCBvYmplY3RzIHdpdGggdGhlIGxvY2tzIHJlbGVhc2VkIHNpbmNlIHdoZW4gdGhlIAotICAgIHJlZmVyZW5jZXMgYXJlIHRha2VuIGFuZCB0aGUgbG9ja3MgYXJlIHJlbGVhc2VkLCBhIGNvbmN1cnJlbnQgdXBkYXRlIG1pZ2h0Ci0gICAgaGF2ZSBjaGFuZ2VkIHRoZSBsaW5rLCBtYWtpbmcgdGhlIHJlZmVyZW5jZXMgbm90IHBvaW50IHRvIGxpbmtlZCBvYmplY3RzLgotCi0gICAgICBMT0NLIChvYmplY3QxKTsKLSAgICAgIExPQ0sgKG9iamVjdDIpOwotICAgICAgaWYgKG9iamVjdDEtPnJlZnBvaW50ZXIgPT0gb2JqZWN0MikgewotICAgICAgICBvYmplY3QyLT5yZWZwb2ludGVyID0gTlVMTDsKLSAgICAgICAgb2JqZWN0MS0+cmVmcG9pbnRlciA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgLi4gb2JqZWN0cyBhcmUgbm90IGxpbmtlZCAuLgotICAgICAgfQotICAgICAgVU5MT0NLIChvYmplY3QyKTsKLSAgICAgIFVOTE9DSyAob2JqZWN0MSk7Ci0KLQotZG91YmxlLXJlZmZlZCByZWxhdGlvbgotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi0gICAgICArLS0tLS0tLS0tKyAgICAgICAgKy0tLS0tLS0tLSsKLSAqLS0tPnwgb2JqZWN0MSB8ICAgKi0tLT58IG9iamVjdDIgfAotICAgICAgfCAgICAgICAqLS0tLS0tLS0tPnwgICAgICAgICB8Ci0gICAgICB8ICAgICAgICAyfDwtLS0tLS0tLS0qICAgICAgMnwKLSAgICAgICstLS0tLS0tLS0rICAgICAgICArLS0tLS0tLS0tKwotCi0gLSBwcm9wZXJ0aWVzCi0KLSAgIC0gdHdvIG9iamVjdHMgaGF2ZSByZWZlcmVuY2VzIHRvIGVhY2ggb3RoZXIKLSAgIC0gcmVmZXJlbmNlIGZpZWxkcyBwcm90ZWN0ZWQgd2l0aCBMT0NLCi0gICAtIHRoZSByZWZlcmVuY2VzIGhlbGQgYnkgZWFjaCBvYmplY3QgYXJlIHJlZmxlY3RlZCBpbiB0aGUKLSAgICAgcmVmY291bnQgb2YgdGhlIG90aGVyIG9iamVjdC4KLSAgIC0gbm8gb2JqZWN0IGhhcyBvd25lcnNoaXAgb2YgdGhlIG90aGVyLgotICAgLSB0eXBpY2FsbHkgZWFjaCBvYmplY3QgaXMgb3duZWQgYnkgYSBkaWZmZXJlbnQgcGFyZW50LgotICAgLSBjcmVhdGlvbi9kZXN0cnVjdGlvbiByZXF1aXJlcyB0d28gbG9ja3MgYW5kIHR3byByZWZjb3VudHMuCi0KLSAtIHVzYWdlCi0gICAKLSAgIE5vdCB1c2VkIGluIEdTdHJlYW1lci4KLQotIC0gbGlmZWN5Y2xlCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXNjaGVkdWxpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWRkMzMxLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtc2NoZWR1bGluZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotU2NoZWR1bGluZwotLS0tLS0tLS0tLQotCi1UaGUgc2NoZWR1bGluZyBpbiBHU3RyZWFtZXIgaXMgYmFzZWQgb24gcGFkcyBhY3RpdmVseSBwdXNoaW5nIChwcm9kdWNpbmcpIGRhdGEgb3IKLXBhZCBwdWxsaW5nIGluIGRhdGEgKGNvbnN1bWluZykgZnJvbSBvdGhlciBwYWRzLgotCi1QdXNoaW5nCi1+fn5+fn5+Ci0KLUEgcGFkIGNhbiBwcm9kdWNlIGRhdGEgYW5kIHB1c2ggaXQgdG8gdGhlIG5leHQgcGFkLiBBIHBhZCB0aGF0IGJlaGF2ZXMgdGhpcyB3YXkKLWV4cG9zZXMgYSBsb29wIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBpdCByZXR1cm5zIGZhbHNlLgotVGhlIGxvb3AgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBibG9jayB3aGVuZXZlciBpdCB3YW50cy4gV2hlbiB0aGUgcGFkIGlzIGRlYWN0aXZhdGVkCi10aGUgbG9vcCBmdW5jdGlvbiBzaG91bGQgdW5ibG9jayB0aG91Z2guCi0KLUEgcGFkIG9wZXJhdGluZyBpbiB0aGUgcHVzaCBtb2RlIGNhbiBvbmx5IHByb2R1Y2UgZGF0YSB0byBhIHBhZCB0aGF0IGV4cG9zZXMgYQotY2hhaW4gZnVuY3Rpb24uIFRoaXMgY2hhaW4gZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgYnVmZmVyIHByb2R1Y2VkIGJ5Ci10aGUgcHVzaGluZyBwYWQuIAotCi1UaGlzIG1ldGhvZCBvZiBwcm9kdWNpbmcgZGF0YSBpcyBjYWxsZWQgdGhlIHN0cmVhbWluZyBtb2RlIHNpbmNlIHRoZSBwcm9kdWNlciAKLXByb2R1Y2VzIGEgY29uc3RhbnQgc3RyZWFtIG9mIGRhdGEuIAotCi1QdWxsaW5nCi1+fn5+fn5+Ci0KLVBhZHMgdGhhdCBvcGVyYXRlIGluIHB1bGxpbmcgbW9kZSBjYW4gb25seSBwdWxsIGRhdGEgZnJvbSBhIHBhZCB0aGF0IGV4cG9zZXMgdGhlCi1wdWxsX3JhbmdlIGZ1bmN0aW9uLiBJbiB0aGlzIGNhc2UsIHRoZSBzaW5rIHBhZCBleHBvc2VzIGEgbG9vcCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUKLWNhbGxlZCByZXBlYXRlZGx5IHVudGlsIHRoZSB0YXNrIGlzIHN0b3BwZWQuCi0KLUFmdGVyIHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBwZWVyIHBhZCwgdGhlIGxvb3AgZnVuY3Rpb24gd2lsbCB0eXBpY2FsbHkgY2FsbCB0aGUKLXB1c2ggZnVuY3Rpb24gdG8gcHVzaCB0aGUgcmVzdWx0IHRvIHRoZSBwZWVyIHNpbmtwYWQuCi0KLQotRGVjaWRpbmcgdGhlIHNjaGVkdWxpbmcgbW9kZQotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1XaGVuIGEgcGFkIGlzIGFjdGl2YXRlZCwgdGhlIF9hY3RpdmF0ZSgpIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIHBhZCBjYW4gdGhlbgotY2hvb3NlIHRvIGFjdGl2YXRlIGl0c2VsZiBpbiBwdXNoIG9yIHB1bGwgbW9kZSBkZXBlbmRpbmcgb24gdXBzdHJlYW0KLWNhcGFiaWxpdGllcy4KLQotVGhlIEdTdHJlYW1lciBjb3JlIHdpbGwgYnkgZGVmYXVsdCBhY3RpdmF0ZSBwYWRzIGluIHB1c2ggbW9kZSB3aGVuIHRoZXJlIGlzIG5vCi1hY3RpdmF0ZSBmdW5jdGlvbiBmb3IgdGhlIHBhZC4KLQotVGhlIGNoYWluIGZ1bmN0aW9uCi1+fn5+fn5+fn5+fn5+fn5+fn4KLQotVGhlIGNoYWluIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB1cHN0cmVhbSBlbGVtZW50IHBlcmZvcm1zIGEgX3B1c2goKSBvbiB0aGUgcGFkLgotVGhlIHVwc3RyZWFtIGVsZW1lbnQgY2FuIGJlIGFub3RoZXIgY2hhaW4gYmFzZWQgZWxlbWVudCBvciBhIHB1c2hpbmcgc291cmNlLgotCi1UaGUgZ2V0cmFuZ2UgZnVuY3Rpb24KLX5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgZ2V0cmFuZ2UgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwZWVyIHBhZCBwZXJmb3JtcyBhIF9wdWxsX3JhbmdlKCkgb24gdGhlIHBhZC4gVGhpcwotZG93bnN0cmVhbSBwYWQgY2FuIGJlIGEgcHVsbGluZyBlbGVtZW50IG9yIGFub3RoZXIgX3B1bGxfcmFuZ2UoKSBiYXNlZCBlbGVtZW50LgotCi0KLVNjaGVkdWxpbmcgUXVlcnkKLX5+fn5+fn5+fn5+fn5+fn4KLQotQSBzaW5rcGFkIGNhbiBhc2sgdGhlIHVwc3RyZWFtIHNyY3BhZCBmb3IgaXRzIHNjaGVkdWxpbmcgYXR0cmlidXRlcy4gSXQgZG9lcwotdGhpcyB3aXRoIHRoZSBTQ0hFRFVMSU5HIHF1ZXJ5LgotCi0KLSAob3V0KSAibW9kZXMiLCBHX1RZUEVfQVJSQVkgKGRlZmF1bHQgTlVMTCkKLSAgICAgICAtIGFuIGFycmF5IG9mIEdTVF9UWVBFX1BBRF9NT0RFIGVudW1zLiBDb250YWlucyBhbGwgdGhlIHN1cHBvcnRlZAotICAgICAgICAgc2NoZWR1bGluZyBtb2Rlcy4KLQotIChvdXQpICJmbGFncyIsIEdTVF9UWVBFX1NDSEVEVUxJTkdfRkxBR1MgKGRlZmF1bHQgMCkKLQotICAgICB0eXBlZGVmIGVudW0gewotICAgICAgIEdTVF9TQ0hFRFVMSU5HX0ZMQUdfU0VFS0FCTEUgICAgICAgICAgID0gKDEgPDwgMCksCi0gICAgICAgR1NUX1NDSEVEVUxJTkdfRkxBR19TRVFVRU5USUFMICAgICAgICAgPSAoMSA8PCAxKSwKLSAgICAgICBHU1RfU0NIRURVTElOR19GTEFHX0JBTkRXSURUSF9MSU1JVEVEICA9ICgxIDw8IDIpCi0gICAgIH0gR3N0U2NoZWR1bGluZ0ZsYWdzOwotCi0gICBfU0VFS0FCTEU6Ci0gICAgICAgLSB0aGUgb2Zmc2V0IG9mIGEgcHVsbCBvcGVyYXRpb24gY2FuIGJlIHNwZWNpZmllZCwgaWYgdGhpcyBmbGFnIGlzIGZhbHNlLAotICAgICAgICAgdGhlIG9mZnNldCBzaG91bGQgYmUgLTEsCi0gCi0gICBfU0VRVUVOVElBTDoKLSAgICAgICAtIHN1Z2dlc3Qgc2VxdWVudGlhbCBhY2Nlc3MgdG8gdGhlIGRhdGEuIElmIF9TRUVLQUJMRSBpcyBzcGVjaWZpZWQsCi0gICAgICAgICBzZWVrcyBhcmUgYWxsb3dlZCBidXQgc2hvdWxkIGJlIGF2b2lkZWQuIFRoaXMgaXMgY29tbW9uIGZvciBuZXR3b3JrCi0gICAgICAgICBzdHJlYW1zLgotCi0gICBfQkFORFdJRFRIX0xJTUlURUQ6Ci0gICAgICAgLSBzdWdnZXN0IHRoZSBlbGVtZW50IHN1cHBvcnRzIGJ1ZmZlcmluZyBkYXRhIGZvciBkb3duc3RyZWFtIHRvCi0gICAgICAgICBjb3BlIHdpdGggYmFuZHdpZHRoIGxpbWl0YXRpb25zLiBJZiB0aGlzIGZsYWcgaXMgb24gdGhlCi0gICAgICAgICBkb3duc3RyZWFtIGVsZW1lbnQgbWlnaHQgYXNrIGZvciBtb3JlIGRhdGEgdGhhbiBuZWNlc3NhcnkgZm9yCi0gICAgICAgICBub3JtYWwgcGxheWJhY2suIFRoaXMgdXNlLWNhc2UgaXMgaW50ZXJlc3RpbmcgZm9yIG9uLWRpc2sKLSAgICAgICAgIGJ1ZmZlcmluZyBzY2VuYXJpb3MgZm9yIGluc3RhbmNlLiBTZWVrIG9wZXJhdGlvbnMgbWlnaHQgYmUKLSAgICAgICAgIHNsb3cgYXMgd2VsbCBzbyBkb3duc3RyZWFtIGVsZW1lbnRzIHNob3VsZCB0YWtlIHRoaXMgaW50bwotICAgICAgICAgY29uc2lkZXJhdGlvbi4KLQotIChvdXQpICJtaW5zaXplIiwgR19UWVBFX0lOVCAoZGVmYXVsdCAxKQotICAgICAgIC0gdGhlIHN1Z2dlc3RlZCBtaW5pbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0cwotCi0gKG91dCkgIm1heHNpemUiLCBHX1RZUEVfSU5UIChkZWZhdWx0IC0xLCB1bmxpbWl0ZWQpCi0gICAgICAgLSB0aGUgc3VnZ2VzdGVkIG1heGltdW0gc2l6ZSBvZiBwdWxsIHJlcXVlc3RzCi0KLSAob3V0KSAiYWxpZ24iLCBHX1RZUEVfSU5UIChkZWZhdWx0IDApCi0gICAgICAgLSB0aGUgc3VnZ2VzdGVkIGFsaWdubWVudCBmb3IgdGhlIHB1bGwgcmVxdWVzdHMuCi0KLQotCi1QbHVnLWluIHRlY2huaXF1ZXMKLX5+fn5+fn5+fn5+fn5+fn5+fgotCi1NdWx0aS1zaW5rIGVsZW1lbnRzCi1eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLUVsZW1lbnRzIHdpdGggbXVsdGlwbGUgc2lua3MgY2FuIGVpdGhlciBleHBvc2UgYSBsb29wIGZ1bmN0aW9uIG9uIGVhY2ggb2YgdGhlIHBhZHMgdG8KLWFjdGl2ZWx5IHB1bGxfcmFuZ2UgZGF0YSBvciB0aGV5IGNhbiBleHBvc2UgYSBjaGFpbiBmdW5jdGlvbiBvbiBlYWNoIHBhZC4KLQotSW1wbGVtZW50aW5nIGEgY2hhaW4gZnVuY3Rpb24gaXMgdXN1YWxseSBlYXN5IGFuZCBhbGxvd3MgZm9yIGFsbCBwb3NzaWJsZSBzY2hlZHVsaW5nCi1tZXRob2RzLgotCi1QYWQgc2VsZWN0Ci0tLS0tLS0tLS0tCi0KLSAgSWYgdGhlIGNoYWluIGJhc2VkIHNpbmsgd2FudHMgdG8gd2FpdCBmb3Igb25lIG9mIHRoZSBwYWRzIHRvIHJlY2VpdmUgYSBidWZmZXIsIGp1c3QKLSAgaW1wbGVtZW50IHRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpbiB0aGUgY2hhaW4gZnVuY3Rpb24uIEJlIGF3YXJlIHRoYXQgdGhlIGFjdGlvbiBjb3VsZAotICBiZSBwZXJmb3JtZWQgaW4gZGlmZmVyZW50IHRocmVhZHMgYW5kIHBvc3NpYmx5IHNpbXVsdGFuZW91c2x5IHNvIGdyYWIgdGhlIFNUUkVBTV9MT0NLLgotCi1Db2xsZWN0IHBhZHMKLS0tLS0tLS0tLS0tLQotCi0gIElmIHRoZSBjaGFpbiBiYXNlZCBzaW5rIHBhZHMgYWxsIHJlcXVpcmUgb25lIGJ1ZmZlciBiZWZvcmUgdGhlIGVsZW1lbnQgY2FuIG9wZXJhdGUgb24KLSAgdGhlIGRhdGEsIGNvbGxlY3QgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBjaGFpbiBmdW5jdGlvbiBhbmQgcGVyZm9ybSB0aGUgYWN0aW9uIHdoZW4KLSAgYWxsIGNoYWlucGFkcyByZWNlaXZlZCB0aGUgYnVmZmVyLgotCi0gIEluIHRoaXMgY2FzZSB5b3UgcHJvYmFibHkgYWxzbyBkb24ndCB3YW50IHRvIGFjY2VwdCBtb3JlIGRhdGEgb24gYSBwYWQgdGhhdCBoYXMgYSBidWZmZXIKLSAgcXVldWVkLiBUaGlzIGNhbiBlYXNpbHkgYmUgZG9uZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0OgotCi0gICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gX2NoYWluIChHc3RQYWQgKnBhZCwgR3N0QnVmZmVyICpidWZmZXIpIAotICAgIHsKLSAgICAgIExPQ0sgKG15bG9jayk7Ci0gICAgICB3aGlsZSAocGFkLT5zdG9yZSAhPSBOVUxMKSB7Ci0gICAgICAgIFdBSVQgKG15Y29uZCwgbXlsb2NrKTsKLSAgICAgIH0KLSAgICAgIHBhZC0+c3RvcmUgPSBidWZmZXI7Ci0gICAgICBTSUdOQUwgKG15Y29uZCk7Ci0gICAgICBVTkxPQ0sgKG15bG9jayk7Ci0KLSAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBfcHVsbCAoR3N0UGFkICpwYWQsIEdzdEJ1ZmZlciAqKmJ1ZmZlcikgCi0gICAgewotICAgICAgTE9DSyAobXlsb2NrKTsKLSAgICAgIHdoaWxlIChwYWQtPnN0b3JlID09IE5VTEwpIHsKLSAgICAgICAgV0FJVCAobXljb25kLCBteWxvY2spOwotICAgICAgfQotICAgICAgKipidWZmZXIgPSBwYWQtPnN0b3JlOwotICAgICAgcGFkLT5zdG9yZSA9IE5VTEw7Ci0gICAgICBTSUdOQUwgKG15Y29uZCk7Ci0gICAgICBVTkxPQ0sgKG15bG9jayk7Ci0gICAgfQotICAKLQotQ2FzZXMKLX5+fn5+Ci0KLUluc2lkZSB0aGUgYnJhY2VzIGJlbG93IHRoZSBwYWRzIGlzIHN0YXRlZCB3aGF0IGZ1bmN0aW9uIHRoZQotcGFkIHN1cHBvcnQ6Ci0KLSAgbDogZXhwb3NlcyBhIGxvb3AgZnVuY3Rpb24sIHNvIGl0IGNhbiBhY3QgYXMgYSBwdXNoaW5nIHNvdXJjZS4KLSAgZzogZXhwb3NlcyBhIGdldHJhbmdlIGZ1bmN0aW9uCi0gIGM6IGV4cG9zZXMgYSBjaGFpbiBmdW5jdGlvbgotCi0gIGZvbGxvd2luZyBzY2hlZHVsaW5nIGRlY2lzaW9ucyBhcmUgbWFkZSBiYXNlZCBvbiB0aGUgc2NoZWR1bGluZwotICBtZXRob2RzIGV4cG9zZWQgYnkgdGhlIHBhZHM6Ci0KLSAgKGcpIC0gKGwpOiBzaW5rcGFkIHdpbGwgcHVsbCBkYXRhIGZyb20gc3JjCi0gIChsKSAtIChjKTogc3JjcGFkIGFjdGl2ZWx5IHB1c2hlcyBkYXRhIHRvIHNpbmtwYWQKLSAgKCkgIC0gKGMpOiBzcmNwYWQgd2lsbCBwdXNoIGRhdGEgdG8gc2lua3BhZC4KLQotICAoKSAgLSAoKSA6IG5vdCBzY2hlZHVsYWJsZS4KLSAgKCkgIC0gKGwpOiBub3Qgc2NoZWR1bGFibGUuCi0gIChnKSAtICgpIDogbm90IHNjaGVkdWxhYmxlLiAKLSAgKGcpIC0gKGMpOiBub3Qgc2NoZWR1bGFibGUuCi0gIChsKSAtICgpIDogbm90IHNjaGVkdWxhYmxlLgotICAobCkgLSAobCk6IG5vdCBzY2hlZHVsYWJsZQotCi0gICgpICAtIChnKTogaW1wb3NzaWJsZQotICAoZykgLSAoZyk6IGltcG9zc2libGUuCi0gIChsKSAtIChnKTogaW1wb3NzaWJsZQotICAoYykgLSAoKSA6IGltcG9zc2libGUKLSAgKGMpIC0gKGcpOiBpbXBvc3NpYmxlCi0gIChjKSAtIChsKTogaW1wb3NzaWJsZQotICAoYykgLSAoYyk6IGltcG9zc2libGUKLQotICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLSsKLSB8IGZpbGVzcmMgfCAgICB8IG1wM2RlY29kZXIgfCAgICB8IGF1ZGlvc2luayB8Ci0gfCAgICAgICAgc3JjLS1zaW5rICAgICAgICAgc3JjLS1zaW5rICAgICAgICAgfAotICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLSsKLSAgICAgICAgIChsLWcpIChjKSAgICAgICAgICAgKCkgICAoYykKLQotIFdoZW4gYWN0aXZhdGluZyB0aGUgcGFkczoKLQotICAgKiBhdWRpb3NpbmsgaGFzIGEgY2hhaW4gZnVuY3Rpb24gYW5kIHRoZSBwZWVyIHBhZCBoYXMgbm8KLSAgICAgbG9vcCBmdW5jdGlvbiwgbm8gc2NoZWR1bGluZyBpcyBkb25lLgotICAgKiBtcDNkZWNvZGVyIGFuZCBmaWxlc3JjIGV4cG9zZSBhbiAobCkgLSAoYykgY29ubmVjdGlvbiwKLSAgICAgYSB0aHJlYWQgaXMgY3JlYXRlZCB0byBjYWxsIHRoZSBzcmNwYWQgbG9vcCBmdW5jdGlvbi4KLQotICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKwotIHwgZmlsZXNyYyB8ICAgIHwgYXZpZGVtdXhlciB8ICAgIHwgZmFrZXNpbmsgfAotIHwgICAgICAgIHNyYy0tc2luayAgICAgICAgIHNyYy0tc2luayAgICAgICAgfAotICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKwotICAgICAgICAgKGwtZykgKGwpICAgICAgICAgICgpICAgKGMpCi0gICAgICAgICAKLSAgICogZmFrZXNpbmsgaGFzIGEgY2hhaW4gZnVuY3Rpb24gYW5kIHRoZSBwZWVyIHBhZCBoYXMgbm8KLSAgICAgbG9vcCBmdW5jdGlvbiwgbm8gc2NoZWR1bGluZyBpcyBkb25lLgotICAgKiBhdmlkZW11eGVyIGFuZCBmaWxlc3JjIGV4cG9zZSBhbiAoZykgLSAobCkgY29ubmVjdGlvbiwKLSAgICAgYSB0aHJlYWQgaXMgY3JlYXRlZCB0byBjYWxsIHRoZSBzaW5rcGFkIGxvb3AgZnVuY3Rpb24uCi0KLSArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0rCi0gfCBmaWxlc3JjIHwgICAgfCBpZGVudGl0eSB8ICAgIHwgYXZpZGVtdXhlciB8ICAgIHwgZmFrZXNpbmsgfAotIHwgICAgICAgIHNyYy0tc2luayAgICAgICBzcmMtLXNpbmsgICAgICAgICBzcmMtLXNpbmsgICAgICAgIHwKLSArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0rCi0gICAgICAgICAobC1nKSAoYykgICAgICAgICgpICAgKGwpICAgICAgICAgICgpICAgKGMpCi0KLSAgICogZmFrZXNpbmsgaGFzIGEgY2hhaW4gZnVuY3Rpb24gYW5kIHRoZSBwZWVyIHBhZCBoYXMgbm8KLSAgICAgbG9vcCBmdW5jdGlvbiwgbm8gc2NoZWR1bGluZyBpcyBkb25lLgotICAgKiBhdmlkZW11eGVyIGFuZCBpZGVudGl0eSBleHBvc2Ugbm8gc2NoZWR1bGFibGUgY29ubmVjdGlvbiBzbwotICAgICB0aGlzIHBpcGVsaW5lIGlzIG5vdCBzY2hlZHVsYWJsZS4KLQotICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLSsKLSB8IGZpbGVzcmMgfCAgICB8IGlkZW50aXR5IHwgICAgfCBhdmlkZW11eGVyIHwgICAgfCBmYWtlc2luayB8Ci0gfCAgICAgICAgc3JjLS1zaW5rICAgICAgIHNyYy0tc2luayAgICAgICAgIHNyYy0tc2luayAgICAgICAgfAotICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLSsKLSAgICAgICAgIChsLWcpIChjLWwpICAgICAgKGcpICAobCkgICAgICAgICAgKCkgICAoYykKLQotICAgKiBmYWtlc2luayBoYXMgYSBjaGFpbiBmdW5jdGlvbiBhbmQgdGhlIHBlZXIgcGFkIGhhcyBubwotICAgICBsb29wIGZ1bmN0aW9uLCBubyBzY2hlZHVsaW5nIGlzIGRvbmUuCi0gICAqIGF2aWRlbXV4ZXIgYW5kIGlkZW50aXR5IGV4cG9zZSBhbiAoZykgLSAobCkgY29ubmVjdGlvbiwKLSAgICAgYSB0aHJlYWQgaXMgY3JlYXRlZCB0byBjYWxsIHRoZSBzaW5rcGFkIGxvb3AgZnVuY3Rpb24uCi0gICAqIGlkZW50aXR5IGtub3dzIHRoZSBzcmNwYWQgaXMgZ2V0cmFuZ2UgYmFzZWQgYW5kIHVzZXMgdGhlCi0gICAgIHRocmVhZCBmcm9tIGF2aWRlbXV4IHRvIGdldHJhbmdlIGRhdGEgZnJvbSBmaWxlc3JjLgotCi0gKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKwotIHwgZmlsZXNyYyB8ICAgIHwgaWRlbnRpdHkgfCAgICB8IG9nZ2RlbXV4ZXIgfCAgICB8IGZha2VzaW5rIHwKLSB8ICAgICAgICBzcmMtLXNpbmsgICAgICAgc3JjLS1zaW5rICAgICAgICAgc3JjLS1zaW5rICAgICAgICB8Ci0gKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tKwotICAgICAgICAgKGwtZykgKGMpICAgICAgICAoKSAgIChsLWMpICAgICAgICAoKSAgIChjKQotCi0gICAqIGZha2VzaW5rIGhhcyBhIGNoYWluIGZ1bmN0aW9uIGFuZCB0aGUgcGVlciBwYWQgaGFzIG5vCi0gICAgIGxvb3AgZnVuY3Rpb24sIG5vIHNjaGVkdWxpbmcgaXMgZG9uZS4KLSAgICogb2dnZGVtdXhlciBhbmQgaWRlbnRpdHkgZXhwb3NlIGFuICgpIC0gKGwtYykgY29ubmVjdGlvbiwKLSAgICAgb2dnZGVtdXggaGFzIHRvIG9wZXJhdGUgaW4gY2hhaW4gbW9kZS4KLSAgICogaWRlbnRpdHkgY2hhbiBvbmx5IHdvcmsgY2hhaW4gYmFzZWQgYW5kIHNvIGZpbGVzcmMgY3JlYXRlcwotICAgICBhIHRocmVhZCB0byBwdXNoIGRhdGEgdG8gaWRlbnRpdHkuCi0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtc2Vla2luZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOTdhY2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1zZWVraW5nLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi1TZWVraW5nCi0tLS0tLS0tCi0KLVNlZWtpbmcgaW4gR1N0cmVhbWVyIG1lYW5zIGNvbmZpZ3VyaW5nIHRoZSBwaXBlbGluZSBmb3IgcGxheWJhY2sgb2YgdGhlCi1tZWRpYSBiZXR3ZWVuIGEgY2VydGFpbiBzdGFydCBhbmQgc3RvcCB0aW1lLCBjYWxsZWQgdGhlIHBsYXliYWNrIHNlZ21lbnQuCi1CeSBkZWZhdWx0IGEgcGlwZWxpbmUgd2lsbCBwbGF5IGZyb20gcG9zaXRpb24gMCB0byB0aGUgdG90YWwgZHVyYXRpb24gb2YgdGhlCi1tZWRpYSBhdCBhIHJhdGUgb2YgMS4wLgotCi1BIHNlZWsgaXMgcGVyZm9ybWVkIGJ5IHNlbmRpbmcgYSBzZWVrIGV2ZW50IHRvIHRoZSBzaW5rIGVsZW1lbnRzIG9mIGEKLXBpcGVsaW5lLiBTZW5kaW5nIHRoZSBzZWVrIGV2ZW50IHRvIGEgYmluIHdpbGwgYnkgZGVmYXVsdCBmb3J3YXJkCi10aGUgZXZlbnQgdG8gYWxsIHNpbmtzIGluIHRoZSBiaW4uCi0KLVdoZW4gcGVyZm9ybWluZyBhIHNlZWssIHRoZSBzdGFydCBhbmQgc3RvcCB2YWx1ZXMgb2YgdGhlIHNlZ21lbnQgY2FuIGJlCi1zcGVjaWZpZWQgYXMgYWJzb2x1dGUgcG9zaXRpb25zIG9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZAotcGxheWJhY2sgc2VnbWVudC4gTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50Ci1wbGF5YmFjayBwb3NpdGlvbi4gVG8gc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiwgb25lIG11c3QKLXF1ZXJ5IHRoZSBwb3NpdGlvbiBmaXJzdCBhbmQgdGhlbiBwZXJmb3JtIGFuIGFic29sdXRlIHNlZWsgdG8gdGhlIGRlc2lyZWQKLXBvc2l0aW9uLgotCi1GZWVkYmFjayBvZiB0aGUgc2VlayBvcGVyYXRpb24gY2FuIGJlIGltbWVkaWF0ZWx5IHVzaW5nIHRoZSBHU1RfU0VFS19GTEFHX0ZMVVNICi1mbGFnLiBXaXRoIHRoaXMgZmxhZywgYWxsIHBlbmRpbmcgZGF0YSBpbiB0aGUgcGlwZWxpbmUgaXMgZGlzY2FyZGVkIGFuZCBwbGF5YmFjawotc3RhcnRzIGZyb20gdGhlIG5ldyBwb3NpdGlvbiBpbW1lZGlhdGVseS4KLQotV2hlbiB0aGUgRkxVU0ggZmxhZyBpcyBub3Qgc2V0LCB0aGUgc2VlayB3aWxsIGJlIHF1ZXVlZCBhbmQgZXhlY3V0ZWQgYXMKLXNvb24gYXMgcG9zc2libGUsIHdoaWNoIG1pZ2h0IGJlIGFmdGVyIGFsbCBxdWV1ZXMgYXJlIGVtcHRpZWQuCi0KLVNlZWtpbmcgY2FuIGJlIHBlcmZvcm1lZCBpbiBkaWZmZXJlbnQgZm9ybWF0cyBzdWNoIGFzIHRpbWUsIGZyYW1lcwotb3Igc2FtcGxlcy4KLQotVGhlIHNlZWtpbmcgY2FuIGJlIHBlcmZvcm1lZCB0byBhIG5lYXJieSBrZXkgdW5pdCBvciB0byB0aGUgZXhhY3QKLShlc3RpbWF0ZWQpIHVuaXQgaW4gdGhlIG1lZGlhIChHU1RfU0VFS19GTEFHX0tFWV9VTklUKS4gU2VlIGJlbG93IGZvciBtb3JlCi1kZXRhaWxzIG9uIHRoaXMuCi0KLVRoZSBzZWVraW5nIGNhbiBiZSBwZXJmb3JtZWQgYnkgdXNpbmcgYW4gZXN0aW1hdGVkIHRhcmdldCBwb3NpdGlvbiBvciBpbiBhbgotYWNjdXJhdGUgd2F5IChHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKS4gRm9yIHNvbWUgZm9ybWF0cyB0aGlzIGNhbiByZXN1bHQgaW4KLWhhdmluZyB0byBzY2FuIHRoZSBjb21wbGV0ZSBmaWxlIGluIG9yZGVyIHRvIGFjY3VyYXRlbHkgZmluZCB0aGUgdGFyZ2V0IHVuaXQuCi1TZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzLgotCi1Ob24gc2VnbWVudCBzZWVraW5nIHdpbGwgbWFrZSB0aGUgcGlwZWxpbmUgZW1pdCBFT1Mgd2hlbiB0aGUgY29uZmlndXJlZCAKLXNlZ21lbnQgaGFzIGJlZW4gcGxheWVkLgotCi1TZWdtZW50IHNlZWtpbmcgKHVzaW5nIHRoZSBHU1RfU0VFS19GTEFHX1NFR01FTlQpIHdpbGwgbm90IGVtaXQgYW4gRU9TIGF0Ci10aGUgZW5kIG9mIHRoZSBwbGF5YmFjayBzZWdtZW50IGJ1dCB3aWxsIHBvc3QgYSBTRUdNRU5UX0RPTkUgbWVzc2FnZSBvbiB0aGUKLWJ1cy4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSB0aGUgZWxlbWVudCBkcml2aW5nIHRoZSBwbGF5YmFjayBpbiB0aGUKLXBpcGVsaW5lLCB0eXBpY2FsbHkgYSBkZW11eGVyLiAgQWZ0ZXIgcmVjZWl2aW5nIHRoZSBtZXNzYWdlLCB0aGUgYXBwbGljYXRpb24KLWNhbiByZWNvbm5lY3QgdGhlIHBpcGVsaW5lIG9yIGlzc3VlIG90aGVyIHNlZWsgZXZlbnRzIGluIHRoZSBwaXBlbGluZS4KLVNpbmNlIHRoZSBtZXNzYWdlIGlzIHBvc3RlZCBhcyBlYXJseSBhcyBwb3NzaWJsZSBpbiB0aGUgcGlwZWxpbmUsIHRoZQotYXBwbGljYXRpb24gaGFzIHNvbWUgdGltZSB0byBpc3N1ZSBhIG5ldyBzZWVrIHRvIG1ha2UgdGhlIHRyYW5zaXRpb24gc2VhbWxlc3MuCi1UeXBpY2FsbHkgdGhlIGFsbG93ZWQgZGVsYXkgaXMgZGVmaW5lZCBieSB0aGUgYnVmZmVyIHNpemVzIG9mIHRoZSBzaW5rcyBhcyB3ZWxsCi1hcyB0aGUgc2l6ZSBvZiBhbnkgcXVldWVzIGluIHRoZSBwaXBlbGluZS4KLQotVGhlIHNlZWsgY2FuIGFsc28gY2hhbmdlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGUgY29uZmlndXJlZCBzZWdtZW50LgotQSBzcGVlZCBvZiAxLjAgaXMgbm9ybWFsIHNwZWVkLCAyLjAgaXMgZG91YmxlIHNwZWVkLiBOZWdhdGl2ZSB2YWx1ZXMKLW1lYW4gYmFja3dhcmQgcGxheWJhY2suCi0KLVdoZW4gcGVyZm9ybWluZyBhIHNlZWsgd2l0aCBhIHBsYXliYWNrIHJhdGUgZGlmZmVyZW50IGZyb20gMS4wLCB0aGUKLUdTVF9TRUVLX0ZMQUdfU0tJUCBmbGFnIGNhbiBiZSB1c2VkIHRvIGluc3RydWN0IGRlY29kZXJzIGFuZCBkZW11eGVycyB0aGF0IHRoZXkKLWFyZSBhbGxvd2VkIHRvIHNraXAgZGVjb2RpbmcuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHJlc291cmNlIGNvbnN1bXB0aW9uIGlzCi1tb3JlIGltcG9ydGFudCB0aGFuIGFjY3VyYXRlbHkgcHJvZHVjaW5nIGFsbCBmcmFtZXMuCi0KLQotU2Vla2luZyBpbiBwdXNoIGJhc2VkIGVsZW1lbnRzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotCi0KLQotCi0KLUdlbmVyYXRpbmcgc2Vla2luZyBldmVudHMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotQSBzZWVrIGV2ZW50IGlzIGNyZWF0ZWQgd2l0aCBnc3RfZXZlbnRfbmV3X3NlZWsgKCkuCi0KLQotCi1TZWVraW5nIHZhcmlhbnRzCi1+fn5+fn5+fn5+fn5+fn5+Ci0KLVRoZSBkaWZmZXJlbnQga2luZHMgb2Ygc2Vla2luZyBtZXRob2RzIGFuZCB0aGVpciBpbnRlcm5hbCB3b3JraW5ncyBhcmUKLWRlc2NyaWJlZCBiZWxvdy4KLQotCi1GTFVTSCBzZWVraW5nCi1eXl5eXl5eXl5eXl5eCi0KLVRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIHdheSBvZiBwZXJmb3JtaW5nIGEgc2VlayBpbiBhIHBsYXliYWNrIGFwcGxpY2F0aW9uLgotVGhlIGFwcGxpY2F0aW9uIGlzc3VlcyBhIHNlZWsgb24gdGhlIHBpcGVsaW5lIGFuZCB0aGUgbmV3IG1lZGlhIGlzIGltbWVkaWF0ZWx5Ci1wbGF5ZWQgYWZ0ZXIgdGhlIHNlZWsgY2FsbCByZXR1cm5zLgotCi0KLXNlZWtpbmcgd2l0aG91dCBGTFVTSAotXl5eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLVRoaXMgc2VlayB0eXBlIGlzIHR5cGljYWxseSBwZXJmb3JtZWQgYWZ0ZXIgaXNzdWluZyBzZWdtZW50IHNlZWtzIHRvIGZpbmlzaAotdGhlIHBsYXliYWNrIG9mIHRoZSBwaXBlbGluZS4KLQotUGVyZm9ybWluZyBhIG5vbi1mbHVzaGluZyBzZWVrIGluIGEgUEFVU0VEIHBpcGVsaW5lIGJsb2NrcyB1bnRpbCB0aGUgcGlwZWxpbmUKLWlzIHNldCB0byBwbGF5aW5nIGFnYWluIHNpbmNlIGFsbCBkYXRhIHBhc3NpbmcgaXMgYmxvY2tlZCBpbiB0aGUgcHJlcm9sbGVkCi1zaW5rcy4KLQotCi1zZWdtZW50IHNlZWtpbmcgd2l0aCBGTFVTSAotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KLQotVGhpcyBzZWVrIGlzIHR5cGljYWxseSBwZXJmb3JtZWQgd2hlbiBzdGFydGluZyBzZWFtbGVzcyBsb29waW5nLgotCi0KLXNlZ21lbnQgc2Vla2luZyB3aXRob3V0IEZMVVNICi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1UaGlzIHNlZWsgaXMgdHlwaWNhbGx5IHBlcmZvcm1lZCB3aGVuIGNvbnRpbnVpbmcgc2VhbWxlc3MgbG9vcGluZy4KLQotCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIERlbXV4ZXIvcGFyc2VyIGJlaGF2aW91ciBhbmQgU0VFS19GTEFHX0tFWV9VTklUIGFuZCBTRUVLX0ZMQUdfQUNDVVJBVEUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIHNlY3Rpb24gYWltcyB0byBleHBsYWluIHRoZSBiZWhhdmlvdXIgZXhwZWN0ZWQgYnkgYW4gZWxlbWVudCB3aXRoIHJlZ2FyZAotdG8gdGhlIEtFWV9VTklUIGFuZCBBQ0NVUkFURSBzZWVrIGZsYWdzIHVzaW5nIHRoZSBleGFtcGxlIG9mIGEgcGFyc2VyIG9yCi1kZW11eGVyLgotCi0xLiBERUZBVUxUIEJFSEFWSU9VUjoKLQotV2hlbiBhIHNlZWsgdG8gYSBjZXJ0YWluIHBvc2l0aW9uIGlzIHJlcXVlc3RlZCwgdGhlIGRlbXV4ZXIvcGFyc2VyIHdpbGwKLWRvIHR3byB0aGluZ3MgKGlnbm9yaW5nIGZsdXNoaW5nIGFuZCBzZWdtZW50IHNlZWtzLCBhbmQgc2ltcGxpZmllZCBmb3IKLWlsbHVzdHJhdGlvbiBwdXJwb3Nlcyk6Ci0KLSAtIHNlbmQgYSBzZWdtZW50IGV2ZW50IHdpdGggYSBuZXcgc3RhcnQgcG9zaXRpb24KLQotIC0gc3RhcnQgcHVzaGluZyBkYXRhL2J1ZmZlcnMgYWdhaW4KLQotVG8gZW5zdXJlIHRoYXQgdGhlIGRhdGEgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24KLWNhbiBhY3R1YWxseSBiZSBkZWNvZGVkLCBhIGRlbXV4ZXIgb3IgcGFyc2VyIG5lZWRzIHRvIHN0YXJ0IHB1c2hpbmcgZGF0YQotZnJvbSBhIGtleWZyYW1lL2tleXVuaXQgYXQgb3IgYmVmb3JlIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbi4KLQotVW5sZXNzIHJlcXVlc3RlZCBkaWZmZXJlbnRseSAodmlhIHRoZSBLRVlfVU5JVCBmbGFnKSwgdGhlIHN0YXJ0IG9mIHRoZQotc2VnbWVudCBldmVudCBzaG91bGQgYmUgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLgotCi1TbyBieSBkZWZhdWx0IGEgZGVtdXhlci9wYXJzZXIgd2lsbCB0aGVuIHN0YXJ0IHB1c2hpbmcgZGF0YSBmcm9tCi1wb3NpdGlvbiBEQVRBIGFuZCBzZW5kIGEgc2VnbWVudCBldmVudCB3aXRoIHN0YXJ0IHBvc2l0aW9uIFNFR19TVEFSVCwKLWFuZCBEQVRBIDw9IFNFR19TVEFSVC4KLQotSWYgREFUQSA8IFNFR19TVEFSVCwgYSB3ZWxsLWJlaGF2ZWQgdmlkZW8gZGVjb2RlciB3aWxsIHN0YXJ0IGRlY29kaW5nIGZyYW1lcwotZnJvbSBEQVRBLCBidXQgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNlZ21lbnQgY29uZmlndXJlZCBieSB0aGUgZGVtdXhlciB2aWEKLXRoZSBzZWdtZW50IGV2ZW50LCBhbmQgb25seSBhY3R1YWxseSBvdXRwdXQgZGVjb2RlZCB2aWRlbyBmcmFtZXMgZnJvbQotU0VHX1NUQVJUIG9ud2FyZHMsIGRyb3BwaW5nIGFsbCBkZWNvZGVkIGZyYW1lcyB0aGF0IGFyZSBiZWZvcmUgdGhlCi1zZWdtZW50IHN0YXJ0IGFuZCBhZGp1c3RpbmcgdGhlIHRpbWVzdGFtcC9kdXJhdGlvbiBvZiB0aGUgYnVmZmVyIHRoYXQKLW92ZXJsYXBzIHRoZSBzZWdtZW50IHN0YXJ0ICgiY2xpcHBpbmciKS4gQSBub3Qtc28td2VsbC1iZWhhdmVkIHZpZGVvIGRlY29kZXIKLXdpbGwgc3RhcnQgZGVjb2RpbmcgZnJhbWVzIGZyb20gREFUQSBhbmQgcHVzaCBkZWNvZGVkIHZpZGVvIGZyYW1lcyBvdXQKLXN0YXJ0aW5nIGZyb20gcG9zaXRpb24gREFUQSwgaW4gd2hpY2ggY2FzZSB0aGUgZnJhbWVzIHRoYXQgYXJlIGJlZm9yZQotdGhlIGNvbmZpZ3VyZWQgc2VnbWVudCBzdGFydCB3aWxsIHVzdWFsbHkgYmUgZHJvcHBlZC9jbGlwcGVkIGRvd25zdHJlYW0KLShlLmcuIGJ5IHRoZSB2aWRlbyBzaW5rKS4KLQotCi0yLiBHU1RfU0VFS19GTEFHX0tFWV9VTklUOgotCi1JZiB0aGUgS0VZX1VOSVQgZmxhZyBpcyBzcGVjaWZpZWQsIHRoZSBkZW11eGVyL3BhcnNlciBzaG91bGQgYWRqdXN0IHRoZQotc2VnbWVudCBzdGFydCB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGtleSBmcmFtZSBjbG9zZXN0IHRvIHRoZSByZXF1ZXN0ZWQKLXNlZWsgcG9zaXRpb24gYW5kIHRoZW4gc3RhcnQgcHVzaGluZyBvdXQgZGF0YSBmcm9tIHRoZXJlLiBUaGUgbmVhcmVzdAota2V5IGZyYW1lIG1heSBiZSBiZWZvcmUgb3IgYWZ0ZXIgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLCBidXQgbWFueQotaW1wbGVtZW50YXRpb25zIHdpbGwgb25seSBsb29rIGZvciB0aGUgY2xvc2VzdCBrZXlmcmFtZSBiZWZvcmUgdGhlCi1yZXF1ZXN0ZWQgcG9zaXRpb24uCi0KLU1vc3QgbWVkaWEgcGxheWVycyBhbmQgdGh1bWJuYWlsZXJzIGRvIChhbmQgc2hvdWxkIGJlIGRvaW5nKSBLRVlfVU5JVCBzZWVrcwotYnkgZGVmYXVsdCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRvIGVuc3VyZSBhbG1vc3QtaW5zdGFudCByZXNwb25zaXZlbmVzcwotd2hlbiBzY3J1YmJpbmcgKGRyYWdnaW5nIHRoZSBzZWVrIHNsaWRlciBpbiBQQVVTRUQgb3IgUExBWUlORyBtb2RlKS4gVGhpcwotd29ya3Mgd2VsbCBmb3IgbW9zdCBtZWRpYSwgYnV0IHJlc3VsdHMgaW4gc3Vib3B0aW1hbCBiZWhhdmlvdXIgZm9yIGEgc21hbGwKLW51bWJlciBvZiAnb2RkJyBmaWxlcyAoZS5nLiBmaWxlcyB0aGF0IG9ubHkgaGF2ZSBvbmUga2V5ZnJhbWUgYXQgdGhlIHZlcnkKLWJlZ2lubmluZywgb3Igb25seSBhIGZldyBrZXlmcmFtZXMgdGhyb3VnaG91dCB0aGUgZW50aXJlIHN0cmVhbSkuIEF0IHRoZQotdGltZSBvZiB3cml0aW5nLCBhIHNvbHV0aW9uIGZvciB0aGlzIHN0aWxsIG5lZWRzIHRvIGJlIGZvdW5kLCBidXQgY291bGQgYmUKLWltcGxlbWVudGVkIGRlbXV4ZXIvcGFyc2VyLXNpZGUsIGUuZy4gbWFrZSBkZW11eGVycy9wYXJzZXJzIGlnbm9yZSB0aGUKLUtFWV9VTklUIGZsYWcgaWYgdGhlIHBvc2l0aW9uIGFkanVzdG1lbnQgd291bGQgYmUgbGFyZ2VyIHRoYW4gMS8xMHRoIG9mCi10aGUgZHVyYXRpb24gb3Igc29tZXN1Y2guCi0KLUZsYWdzIGNhbiBiZSB1c2VkIHRvIGluZmx1ZW5jZSBzbmFwcGluZyBkaXJlY3Rpb24gZm9yIHRob3NlIGNhc2VzIHdoZXJlIGl0Ci1tYXR0ZXJzLiBTTkFQX0JFRk9SRSB3aWxsIHNlbGVjdCB0aGUgcHJlY2VkaW5nIHBvc2l0aW9uIHRvIHRoZSBzZWVrIHRhcmdldCwKLWFuZCBTTkFQX0FGVEVSIHdpbGwgc2VsZWN0IHRoZSBmb2xsb3dpbmcgb25lLiBJZiBib3RoIGZsYWdzIGFyZSBzZXQsIHRoZQotbmVhcmVzdCBvbmUgdG8gdGhlIHNlZWsgdGFyZ2V0IHdpbGwgYmUgdXNlZC4gSWYgbm9uZSBvZiB0aGVzZSBmbGFncyBhcmUgc2V0LAotdGhlIHNlZWtpbmcgaW1wbGVtZW50aW9uIGlzIGZyZWUgdG8gc2VsZWN0IHdoaWNoZXZlciBpdCB3YW50cy4KLQotU3VtbWFyeToKLQotIC0gaWYgdGhlIEtFWV9VTklUIGZsYWcgaXMgKm5vdCogc3BlY2lmaWVkLCB0aGUgZGVtdXhlci9wYXJzZXIgc2hvdWxkCi0gICBzdGFydCBwdXNoaW5nIGRhdGEgZnJvbSBhIGtleSB1bml0IHByZWNlZGluZyB0aGUgc2VlayBwb3NpdGlvbgotICAgKG9yIGZyb20gdGhlIHNlZWsgcG9zaXRpb24gaWYgdGhhdCBmYWxscyBvbiBhIGtleSB1bml0KSwgYW5kCi0gICB0aGUgc3RhcnQgb2YgdGhlIG5ldyBzZWdtZW50IHNob3VsZCBiZSB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24uCi0KLSAtIGlmIHRoZSBLRVlfVU5JVCBmbGFnIGlzIHNwZWNpZmllZCwgdGhlIGRlbXV4ZXIvcGFyc2VyIHNob3VsZCBzdGFydAotICAgcHVzaGluZyBkYXRhIGZyb20gdGhlIGtleSB1bml0IG5lYXJlc3QgdGhlIHNlZWsgcG9zaXRpb24gKG9yIGZyb20KLSAgIHRoZSBzZWVrIHBvc2l0aW9uIGlmIHRoYXQgZmFsbHMgb24gYSBrZXkgdW5pdCksIGFuZAotICAgdGhlIHN0YXJ0IG9mIHRoZSBuZXcgc2VnbWVudCBzaG91bGQgYmUgYWRqdXN0ZWQgdG8gdGhlIHBvc2l0aW9uIG9mCi0gICB0aGF0IGtleSB1bml0IHdoaWNoIHdhcyBuZWFyZXN0IHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiAoaWUuCi0gICB0aGUgbmV3IHNlZ21lbnQgc3RhcnQgc2hvdWxkIGJlIHRoZSBwb3NpdGlvbiBmcm9tIHdoaWNoIGRhdGEgaXMKLSAgIHB1c2hlZCkuCi0KLQotMy4gR1NUX1NFRUtfRkxBR19BQ0NVUkFURToKLQotSWYgdGhlIEFDQ1VSQVRFIGZsYWcgaXMgc3BlY2lmaWVkIGluIGEgc2VlayByZXF1ZXN0LCB0aGUgZGVtdXhlci9wYXJzZXIKLWlzIGFza2VkIHRvIGRvIHdoYXRldmVyIGl0IHRha2VzICghKSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcG9zaXRpb24gc2Vla2VkCi10byBpcyBhY2N1cmF0ZSBpbiByZWxhdGlvbiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uIFRoaXMgbWVhbnMgdGhhdAotaXQgaXMgbm90IGFjY2VwdGFibGUgdG8ganVzdCBhcHByb3hpbWF0ZSB0aGUgcG9zaXRpb24gKGUuZy4gdXNpbmcgYW4gYXZlcmFnZQotYml0cmF0ZSkuIFRoZSBhY2hpZXZlZCBwb3NpdGlvbiBtdXN0IGJlIGV4YWN0LiBJbiB0aGUgd29yc3QgY2FzZSwgdGhlIGRlbXV4ZXIKLW9yIHBhcnNlciBuZWVkcyB0byBwdXNoIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFuZCBsZXQgZG93bnN0cmVhbQotY2xpcCBldmVyeXRoaW5nIGJlZm9yZSB0aGUgcmVxdWVzdGVkIHNlZ21lbnQgc3RhcnQuCi0KLVRoZSBBQ0NVUkFURSBmbGFnIGRvZXMgbm90IGFmZmVjdCB3aGF0IHRoZSBzZWdtZW50IHN0YXJ0IHNob3VsZCBiZSBpbgotcmVsYXRpb24gdG8gdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLiBPbmx5IHRoZSBLRVlfVU5JVCBmbGFnIChvciBpdHMKLWFic2VuY2UpIGhhcyBhbnkgZWZmZWN0IG9uIHRoYXQuCi0KLVZpZGVvIGVkaXRvcnMgYW5kIGZyYW1lLXN0ZXBwaW5nIGFwcGxpY2F0aW9ucyB1c3VhbGx5IHVzZSB0aGUgQUNDVVJBVEUgZmxhZy4KLQotU3VtbWFyeToKLQotIC0gaWYgdGhlIEFDQ1VSQVRFIGZsYWcgaXMgKm5vdCogc3BlY2lmaWVkLCBpdCBpcyB1cCB0byB0aGUgZGVtdXhlci9wYXJzZXIKLSAgIHRvIGRlY2lkZSBob3cgZXhhY3QgdGhlIHNlZWsgc2hvdWxkIGJlLiBJZiB0aGUgZmxhZyBpcyBub3Qgc3BlY2lmaWVkLAotICAgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIGRlbXV4ZXIvcGFyc2VyIGRvZXMgYSByZXNvbmFibGUgYmVzdCBlZmZvcnQKLSAgIGF0dGVtcHQsIHRyYWRpbmcgc3BlZWQgZm9yIGFjY3VyYWN5LiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbmRleCwgdGhlCi0gICBzZWVrIHBvc2l0aW9uIG1heSBiZSBhcHByb3hpbWF0ZWQuCi0KLSAtIGlmIHRoZSBBQ0NVUkFURSBmbGFnIGlzIHNwZWNpZmllZCwgYWJzb2x1dGUgYWNjdXJhY3kgaXMgcmVxdWlyZWQsIGFuZAotICAgc3BlZWQgaXMgb2Ygbm8gY29uY2Vybi4gSXQgaXMgbm90IGFjY2VwdGFibGUgdG8ganVzdCBhcHByb3hpbWF0ZSB0aGUKLSAgIHNlZWsgcG9zaXRpb24gaW4gdGhhdCBjYXNlLgotCi0gLSB0aGUgQUNDVVJBVEUgZmxhZyBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSBzZWdtZW50IHN0YXJ0cyBhdCB0aGUKLSAgIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uIG9yIHNob3VsZCBiZSBhZGp1c3RlZCB0byB0aGUgbmVhcmVzdCBrZXlmcmFtZSwKLSAgIG9ubHkgdGhlIEtFWV9VTklUIGZsYWcgZGV0ZXJtaW5lcyB0aGF0LgotCi0KLTQuIEFDQ1VSQVRFIGFuZCBLRVlfVU5JVCBjb21iaW5hdGlvbnM6Ci0KLUFsbCBjb21iaW5hdGlvbnMgb2YgdGhlc2UgdHdvIGZsYWdzIGFyZSB2YWxpZDoKLQotIC0gbmVpdGhlciBmbGFnIHNwZWNpZmllZDogc2VnbWVudCBzdGFydHMgYXQgc2VlayBwb3NpdGlvbiwgc2VuZCBkYXRhCi0gICBmcm9tIHByZWNlZGluZyBrZXkgZnJhbWUgKG9yIGVhcmxpZXIpLCBmZWVsIGZyZWUgdG8gYXBwcm94aW1hdGUgdGhlCi0gICBzZWVrIHBvc2l0aW9uCi0KLSAtIG9ubHkgS0VZX1VOSVQgc3BlY2lmaWVkOiBzZWdtZW50IHN0YXJ0cyBmcm9tIHBvc2l0aW9uIG9mIG5lYXJlc3QKLSAgIGtleWZyYW1lLCBzZW5kIGRhdGEgZnJvbSBuZWFyZXN0IGtleWZyYW1lLCBmZWVsIGZyZWUgdG8gYXBwcm94aW1hdGUgdGhlCi0gICBzZWVrIHBvc2l0aW9uCi0KLSAtIG9ubHkgQUNDVVJBVEUgc3BlY2lmaWVkOiBzZWdtZW50IHN0YXJ0cyBhdCBzZWVrIHBvc2l0aW9uLCBzZW5kIGRhdGEKLSAgIGZyb20gcHJlY2VkaW5nIGtleSBmcmFtZSAob3IgZWFybGllciksIGRvIG5vdCBhcHByb3hpbWF0ZSB0aGUgc2VlawotICAgcG9zaXRpb24gdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMKLQotIC0gQUNDVVJBVEUgfCBLRVlfVU5JVCBzcGVjaWZpZWQ6IHNlZ21lbnQgc3RhcnRzIGZyb20gcG9zaXRpb24gb2YgbmVhcmVzdAotICAga2V5ZnJhbWUsIHNlbmQgZGF0YSBmcm9tIG5lYXJlc3Qga2V5IGZyYW1lLCBkbyBub3QgYXBwcm94aW1hdGUgdGhlIHNlZWsKLSAgIHBvc2l0aW9uIHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtc2VnbWVudHMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNjYwNmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1zZWdtZW50cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotU2VnbWVudHMKLS0tLS0tLS0tCi0KLUEgc2VnbWVudCBpbiBHU3RyZWFtZXIgZGVub3RlcyBhIHNldCBvZiBtZWRpYSBzYW1wbGVzIHRoYXQgbXVzdCBiZQotcHJvY2Vzc2VkLiBBIHNlZ21lbnQgaGFzIGEgc3RhcnQgdGltZSwgYSBzdG9wIHRpbWUgYW5kIGEgcHJvY2Vzc2luZwotcmF0ZS4gCi0KLUEgbWVkaWEgc3RyZWFtIGhhcyBhIHN0YXJ0IGFuZCBhIHN0b3AgdGltZS4gVGhlIHN0YXJ0IHRpbWUgaXMKLWFsd2F5cyAwIGFuZCB0aGUgc3RvcCB0aW1lIGlzIHRoZSB0b3RhbCBkdXJhdGlvbiAob3IgLTEgaWYgdW5rbm93biwgCi1mb3IgZXhhbXBsZSBhIGxpdmUgc3RyZWFtKS4gV2UgY2FsbCB0aGlzIHRoZSBjb21wbGV0ZSBtZWRpYSBzdHJlYW0uCi0KLVRoZSBzZWdtZW50IG9mIHRoZSBjb21wbGV0ZSBtZWRpYSBzdHJlYW0gY2FuIGJlIHBsYXllZCBieSBpc3N1aW5nIGEgc2Vlawotb24gdGhlIHN0cmVhbS4gVGhlIHNlZWsgaGFzIGEgc3RhcnQgdGltZSwgYSBzdG9wIHRpbWUgYW5kIGEgcHJvY2Vzc2luZyByYXRlLgotCi0KLSAgICAgICAgICAgICAgIGNvbXBsZXRlIHN0cmVhbQotICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uCi0gICAgICAgICBzZWdtZW50Ci0gICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSAgIHN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICBzdG9wCi0KLQotVGhlIHBsYXliYWNrIG9mIGEgc2VnbWVudCBzdGFydHMgd2l0aCBhIHNvdXJjZSBvciBkZW11eGVyIGVsZW1lbnQgcHVzaGluZyBhCi1zZWdtZW50IGV2ZW50IGNvbnRhaW5pbmcgdGhlIHN0YXJ0IHRpbWUsIHN0b3AgdGltZSBhbmQgcmF0ZSBvZiB0aGUgc2VnbWVudC4KLVRoZSBwdXJwb3NlIG9mIHRoaXMgc2VnbWVudCBpcyB0byBpbmZvcm0gZG93bnN0cmVhbSBlbGVtZW50cyBvZiB0aGUgCi1yZXF1ZXN0ZWQgc2VnbWVudCBwb3NpdGlvbnMuIFNvbWUgZWxlbWVudHMgbWlnaHQgcHJvZHVjZSBidWZmZXJzIHRoYXQgZmFsbAotb3V0c2lkZSBvZiB0aGUgc2VnbWVudCBhbmQgdGhhdCBtaWdodCB0aGVyZWZvcmUgYmUgZGlzY2FyZGVkIG9yIGNsaXBwZWQuCi0KLQotVXNlIGNhc2U6IEZMVVNISU5HIHNlZWsKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLSAgZXguCi0KLSAgICBmaWxlc3JjICEgYXZpZGVtdXggISB2aWRlb2RlY29kZXIgISB2aWRlb3NpbmsKLQotICAgIFdoZW4gZG9pbmcgYSBzZWVrIGluIHRoaXMgcGlwZWxpbmUgZm9yIGEgc2VnbWVudCAxIHRvIDUgc2Vjb25kcywgYXZpZGVtdXgKLSAgICB3aWxsIHBlcmZvcm0gdGhlIHNlZWsuCi0KLSAgICBBdmlkZW11eCBzdGFydHMgYnkgc2VuZGluZyBhIEZMVVNIX1NUQVJUIGV2ZW50IGRvd25zdHJlYW0gYW5kIHVwc3RyZWFtLiBUaGlzCi0gICAgd2lsbCBjYXVzZSBpdHMgc3RyZWFtaW5nIHRhc2sgdG8gUEFVU0VEIGJlY2F1c2UgX3BhZF9wdWxsX3JhbmdlKCkgYW5kCi0gICAgX3BhZF9wdXNoKCkgd2lsbCByZXR1cm4gRkxVU0hJTkcuIEl0IHRoZW4gd2FpdHMgZm9yIHRoZSBTVFJFQU1fTE9DSywKLSAgICB3aGljaCB3aWxsIGJlIHVubG9ja2VkIHdoZW4gdGhlIHN0cmVhbWluZyB0YXNrIHBhdXNlcy4gQXQgdGhpcyBwb2ludCBubwotICAgIHN0cmVhbWluZyBpcyBoYXBwZW5pbmcgYW55bW9yZSBpbiB0aGUgcGlwZWxpbmUgYW5kIGEgRkxVU0hfU1RPUCBpcyBzZW50Ci0gICAgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0uCi0KLSAgICBXaGVuIGF2aWRlbXV4IHN0YXJ0cyBwbGF5YmFjayBvZiB0aGUgc2VnbWVudCBmcm9tIHNlY29uZCAxIHRvIDUsIGl0IHB1c2hlcwotICAgIG91dCBhIHNlZ21lbnQgd2l0aCAxIGFuZCA1IGFzIHN0YXJ0IGFuZCBzdG9wIHRpbWVzLiBUaGUgc3RyZWFtX3RpbWUgaW4KLSAgICB0aGUgc2VnbWVudCBpcyBhbHNvIDEgYXMgdGhpcyBpcyB0aGUgcG9zaXRpb24gd2Ugc2VlayB0by4KLQotICAgIFRoZSB2aWRlbyBkZWNvZGVyIHN0b3JlcyB0aGVzZSB2YWx1ZXMgaW50ZXJuYWxseSBhbmQgZm9yd2FyZHMgdGhlbSB0byB0aGUKLSAgICBuZXh0IGRvd25zdHJlYW0gZWxlbWVudCAodmlkZW9zaW5rLCB3aGljaCBhbHNvIHN0b3JlcyB0aGUgdmFsdWVzKQotCi0gICAgU2luY2Ugc2Vjb25kIDEgZG9lcyBub3QgY29udGFpbiBhIGtleWZyYW1lLCB0aGUgYXZpIGRlbXV4ZXIgc3RhcnRzIHNlbmRpbmcKLSAgICBkYXRhIGZyb20gdGhlIHByZXZpb3VzIGtleWZyYW1lIHdoaWNoIGlzIGF0IHRpbWVzdGFtcCAwLgotCi0gICAgVGhlIHZpZGVvIGRlY29kZXIgZGVjb2RlcyB0aGUga2V5ZnJhbWUgYnV0IGtub3dzIGl0IHNob3VsZCBub3QgcHVzaCB0aGUgCi0gICAgdmlkZW8gZnJhbWUgeWV0IGFzIGl0IGZhbGxzIG91dHNpZGUgb2YgdGhlIGNvbmZpZ3VyZWQgc2VnbWVudC4KLQotICAgIFdoZW4gdGhlIHZpZGVvIGRlY29kZXIgcmVjZWl2ZXMgdGhlIGZyYW1lIHdpdGggdGltZXN0YW1wIDEsIGl0IGlzIGFibGUgdG8KLSAgICBkZWNvZGUgdGhpcyBmcmFtZSBhcyBpdCByZWNlaXZlZCBhbmQgZGVjb2RlZCB0aGUgZGF0YSB1cCB0byB0aGUgcHJldmlvdXMgCi0gICAga2V5ZnJhbWUuIEl0IHRoZW4gY29udGludWVzIHRvIGRlY29kZSBhbmQgcHVzaCBmcmFtZXMgd2l0aCB0aW1lc3RhbXBzID49IDEuCi0gICAgV2hlbiBpdCByZWFjaGVzIHRpbWVzdGFtcCA1LCBpdCBkb2VzIG5vdCBkZWNvZGUgYW5kIHB1c2ggZnJhbWVzIGFueW1vcmUuCi0KLSAgICBUaGUgdmlkZW8gc2luayByZWNlaXZlcyBhIGZyYW1lIG9mIHRpbWVzdGFtcCAxLiBJdCB0YWtlcyB0aGUgc3RhcnQgdmFsdWUgb2YgCi0gICAgdGhlIHByZXZpb3VzIHNlZ21lbnQgYW5kIGFwbGllcyB0aGUgZm9sbG93aW5nIChzaW1wbGlmaWVkKSBmb3JtdWxhOgotCi0gICAgICAgIHJlbmRlcl90aW1lID0gQlVGRkVSX1RJTUVTVEFNUCAtIHNlZ21lbnRfc3RhcnQgKyBlbGVtZW50LT5iYXNlX3RpbWUKLQotICAgIEl0IHRoZW4gc3luY3MgYWdhaW5zdCB0aGUgY2xvY2sgd2l0aCB0aGlzIHJlbmRlcl90aW1lLiBOb3RlIHRoYXQgCi0gICAgQlVGRkVSX1RJTUVTVEFNUCBpcyBhbHdheXMgPj0gc2VnbWVudF9zdGFydCBvciBlbHNlIGl0IHdvdWxkIGZhbGwgb3V0c2lkZSBvZgotICAgIHRoZSBjb25maWd1cmUgc2VnbWVudC4KLQotICAgIFZpZGVvc2luayByZXBvcnRzIGl0cyBjdXJyZW50IHBvc2l0aW9uIGFzIChzaW1wbGlmaWVkKToKLQotICAgICAgICBjdXJyZW50X3Bvc2l0aW9uID0gY2xvY2tfdGltZSAtIGVsZW1lbnQtPmJhc2VfdGltZSArIHNlZ21lbnRfdGltZQotCi0gICAgU2VlIHBhcnQtc3luY2hyb25pc2F0aW9uLnR4dCBmb3IgYSBtb3JlIGRldGFpbGVkIGFuZCBhY2N1cmF0ZSBleHBsYW5hdGlvbiBvZgotICAgIHN5bmNocm9uaXNhdGlvbiBhbmQgcG9zaXRpb24gcmVwb3J0aW5nLgotCi0gICAgU2luY2UgYWZ0ZXIgYSBmbHVzaGluZyBzZWVrIHRoZSBzdHJlYW1fdGltZSBpcyByZXNldCB0byAwLCB0aGUgbmV3IGJ1ZmZlcgotICAgIHdpbGwgYmUgcmVuZGVyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNlZWsgYW5kIHRoZSBjdXJyZW50X3Bvc2l0aW9uIHdpbGwgYmUKLSAgICB0aGUgc3RyZWFtX3RpbWUgb2YgdGhlIHNlZWsgdGhhdCB3YXMgcGVyZm9ybWVkLgotCi0gICAgVGhlIHN0b3AgdGltZSBpcyBpbXBvcnRhbnQgd2hlbiB0aGUgdmlkZW8gZm9ybWF0IGNvbnRhaW5zIEIgZnJhbWVzLiBUaGUKLSAgICB2aWRlbyBkZWNvZGVyIHJlY2VpdmVzIGEgUCBmcmFtZSBmaXJzdCwgd2hpY2ggaXQgY2FuIGRlY29kZSBidXQgbm90IHB1c2ggeWV0LgotICAgIFdoZW4gaXQgcmVjZWl2ZXMgYSBCIGZyYW1lLCBpdCBjYW4gZGVjb2RlIHRoZSBCIGZyYW1lIGFuZCBwdXNoIHRoZSBCIGZyYW1lCi0gICAgZm9sbG93ZWQgYnkgdGhlIHByZXZpb3VzbHkgZGVjb2RlZCBQIGZyYW1lLiBJZiB0aGUgUCBmcmFtZSBpcyBvdXRzaWRlIG9mIHRoZQotICAgIHNlZ21lbnQsIHRoZSBkZWNvZGVyIGtub3dzIGl0IHNob3VsZCBub3Qgc2VuZCB0aGUgUCBmcmFtZS4KLQotICAgIEF2aWRlbXV4IHN0b3BzIHNlbmRpbmcgZGF0YSBhZnRlciBwdXNoaW5nIGEgZnJhbWUgd2l0aCB0aW1lc3RhbXAgNSBhbmQKLSAgICByZXR1cm5zIEdTVF9GTE9XX0VPUyBmcm9tIHRoZSBjaGFpbiBmdW5jdGlvbiB0byBtYWtlIHRoZSB1cHN0cmVhbQotICAgIGVsZW1lbnRzIHBlcmZvcm0gdGhlIEVPUyBsb2dpYy4KLQotCi1Vc2UgY2FzZTogbGl2ZSBzdHJlYW0KLX5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi0KLQotCi1Vc2UgY2FzZTogc2VnbWVudCBsb29waW5nCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLSAgQ29uc2lkZXIgdGhlIGNhc2Ugb2YgYSB3YXYgZmlsZSB3aXRoIHJhdyBhdWRpby4KLQotICAgIGZpbGVzcmMgISB3YXZwYXJzZSAhIGFsc2FzaW5rCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtc2VxbnVtcy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXNlcW51bXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjY4NDdkLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtc2VxbnVtcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi1TZXFudW1zIChTZXF1ZW5jZSBudW1iZXJzKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU2VxbnVtcyBhcmUgaW50ZWdlcnMgYXNzb2NpYXRlZCB0byBldmVudHMgYW5kIG1lc3NhZ2VzLiBUaGV5IGFyZSB1c2VkIHRvCi1pZGVudGlmeSBhIGdyb3VwIG9mIGV2ZW50cyBhbmQgbWVzc2FnZXMgYXMgYmVpbmcgcGFydCBvZiB0aGUgc2FtZSAnb3BlcmF0aW9uJwotb3ZlciB0aGUgcGlwZWxpbmUuCi0KLVdoZW5ldmVyIGEgbmV3IGV2ZW50IG9yIG1lc3NhZ2UgaXMgY3JlYXRlZCwgYSBzZXFudW0gaXMgc2V0IGludG8gdGhlbS4gVGhpcwotc2VxbnVtIGlzIGNyZWF0ZWQgZnJvbSBhbiBldmVyIGluY3JlYXNpbmcgc291cmNlIChzdGFydGluZyBmcm9tIDAgYW5kIGl0Ci1taWdodCB3cmFwIGFyb3VuZCksIHNvIGVhY2ggbmV3IGV2ZW50IGFuZCBtZXNzYWdlIGdldHMgYSBuZXcgYW5kIGhvcGVmdWxseQotdW5pcXVlIHNlcW51bS4KLQotU3VwcG9zZSBhbiBlbGVtZW50IHJlY2VpdmVzIGFuIGV2ZW50IEEgYW5kLCBhcyBwYXJ0IG9mIHRoZSBsb2dpYyBvZiBoYW5kbGluZwotdGhlIGV2ZW50IEEsIGNyZWF0ZXMgYSBuZXcgZXZlbnQgQi4gQiBzaG91bGQgaGF2ZSBpdHMgc2VxbnVtIHRvIHRoZSBzYW1lIGFzIEEsCi1iZWNhdXNlIHRoZXkgYXJlIHBhcnQgb2YgdGhlIHNhbWUgb3BlcmF0aW9uLiBUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIGlmIHRoaXMKLWVsZW1lbnQgaGFkIHRvIGNyZWF0ZSBtdWx0aXBsZSBldmVudHMgb3IgbWVzc2FnZXMsIGFsbCBvZiB0aG9zZSBzaG91bGQgaGF2ZQotdGhlIHNlcW51bSBzZXQgdG8gdGhlIHZhbHVlIG9uIHRoZSByZWNlaXZlZCBldmVudC4gRm9yIGV4YW1wbGUsIHdoZW4gYSBzaW5rCi1lbGVtZW50IHJlY2VpdmVzIGFuIEVPUyBldmVudCBhbmQgY3JlYXRlcyBhIG5ldyBFT1MgbWVzc2FnZSB0byBwb3N0LCBpdAotc2hvdWxkIGNvcHkgdGhlIHNlcW51bSBmcm9tIHRoZSBldmVudCB0byB0aGUgbWVzc2FnZSBiZWNhdXNlIHRoZSBFT1MgbWVzc2FnZQotaXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUgRU9TIGV2ZW50IGJlaW5nIHJlY2VpdmVkLgotCi1QcmVzZXJ2aW5nIHRoZSBzZXFudW1zIGFjY3Jvc3MgcmVsYXRlZCBldmVudHMgYW5kIG1lc3NhZ2VzIGFsbG93cyB0aGUgZWxlbWVudHMKLWFuZCBhcHBsaWNhdGlvbnMgdG8gaWRlbnRpZnkgYSBzZXQgb2YgZXZlbnRzL21lc3NhZ2VzIGFzIGJlaW5nIHBhcnQgb2YgYSBzaW5nbGUKLW9wZXJhdGlvbiBvbiB0aGUgcGlwZWxpbmUuIEZvciBleGFtcGxlLCBmbHVzaGVzLCBzZWdtZW50cyBhbmQgRU9TIHRoYXQgYXJlCi1yZWxhdGVkIHRvIGEgc2VlayBldmVudCBzdGFydGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KLQotU2VxbnVtcyBhcmUgYWxzbyB1c2VmdWwgZm9yIGVsZW1lbnRzIHRvIGRpc2NhcmQgZHVwbGljYXRlZCBldmVudHMsIGF2b2lkaW5nCi1oYW5kbGluZyB0aGVtIGFnYWluLgotCi1CZWxvdyBhcmUgc29tZSBzY2VuYXJpb3MgYXMgZXhhbXBsZXMgb2YgaG93IHRvIGhhbmRsZSBzZXFudW1zIHdoZW4gcmVjZXZpbmcKLWV2ZW50czoKLQotCi1Gb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgYXBwbGljYXRpb24gaGFzIGEgcGlwZWxpbmUgcnVubmluZyBhbmQgZG9lcyBhIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQKLXRvIHRoZSBwaXBlbGluZSB3aXRoIGFuIEVPUyBldmVudC4gQWxsIHRoZSBzb3VyY2VzIGluIHRoZSBwaXBlbGluZSB3aWxsCi1oYXZlIHRoZWlyIHNlbmRfZXZlbnQgaGFuZGxlcnMgY2FsbGVkIGFuZCB3aWxsIHJlY2VpdmUgdGhlIGV2ZW50IGZyb20KLXRoZSBhcHBsaWNhdGlvbi4KLQotV2hlbiBoYW5kbGluZyB0aGlzIGV2ZW50LCB0aGUgc291cmNlcyB3aWxsIHB1c2ggZWl0aGVyIHRoZSBzYW1lIEVPUyBkb3duc3RyZWFtCi1vciBjcmVhdGUgdGhlaXIgb3duIEVPUyBldmVudCBhbmQgcHVzaC4gSW4gdGhlIGxhdGVyIGNhc2UsIHRoZSBzb3VyY2Ugc2hvdWxkCi1jb3B5IHRoZSBzZXFudW0gZnJvbSB0aGUgb3JpZ2luYWwgRU9TIHRvIHRoZSBuZXdseSBjcmVhdGVkLiBUaGlzIHNhbWUgbG9naWMKLWFwcGxpZXMgdG8gYWxsIGVsZW1lbnRzIHRoYXQgcmVjZWl2ZSB0aGUgRU9TIGRvd25zdHJlYW0sIGVpdGhlciBwdXNoIHRoZQotc2FtZSBldmVudCBvciwgaWYgY3JlYXRpbmcgYSBuZXcgb25lLCBjb3B5IHRoZSBzZXFudW0uCi0KLVdoZW4gdGhlIEVPUyByZWFjaGVzIHRoZSBzaW5rLCBpdCB3aWxsIGNyZWF0ZSBhbiBFT1MgbWVzc2FnZSwgY29weSB0aGUKLXNlcW51bSB0byB0aGUgbWVzc2FnZSBhbmQgcG9zdCB0byB0aGUgYnVzLiBUaGUgYXBwbGljYXRpb24gcmVjZWl2ZXMgdGhlCi1tZXNzYWdlIGFuZCBjYW4gY29tcGFyZSB0aGUgc2VxbnVtIG9mIHRoZSBtZXNzYWdlIHdpdGggdGhlIG9uZSBmcm9tIHRoZQotb3JpZ2luYWwgZXZlbnQgc2VudCB0byB0aGUgcGlwZWxpbmUuIElmIHRoZXkgbWF0Y2gsIGl0IGtub3dzIHRoYXQgdGhpcwotRU9TIG1lc3NhZ2Ugd2FzIGNhdXNlZCBieSB0aGUgZXZlbnQgaXQgcHVzaGVkIGFuZCBub3QgZnJvbSBvdGhlciByZWFzb24KLShpbnB1dCBmaW5pc2hlZCBvciBjb25maWd1cmVkIHNlZ21lbnQgd2FzIG92ZXIpLiAKLQotCi0KLVNlZWtpbmcKLS0tLS0tLS0KLQotQSBzZWVrIGV2ZW50IHNlbnQgdG8gdGhlIHBpcGVsaW5lIGlzIGZvcndhcmRlZCB0byBhbGwgc2lua3MgaW4gaXQuIFRob3NlCi1zaW5rcywgdGhlbiwgcHVzaCB0aGUgc2VlayBldmVudCB1cHN0cmVhbSB1bnRpbCB0aGV5IHJlYWNoIGFuIGVsZW1lbnQKLXRoYXQgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBpdC4gSWYgdGhlIGVsZW1lbnQgaGFuZGxpbmcgdGhlIHNlZWsgaGFzCi1tdWx0aXBsZSBzb3VyY2UgcGFkcyAodGlwaWNhbGx5IGEgZGVtdXhlciBpcyBoYW5kbGluZyB0aGUgc2VlaykgaXQgbWlnaHQKLXJlY2VpdmUgdGhlIHNhbWUgc2VlayBldmVudCBvbiBhbGwgcGFkcy4gVG8gcHJldmVudCBoYW5kbGluZyB0aGUgc2FtZQotc2VlayBldmVudCBtdWx0aXBsZSB0aW1lcywgdGhlIHNlcW51bSBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB0aG9zZQotZXZlbnRzIGFzIGJlaW5nIHRoZSBzYW1lIGFuZCBvbmx5IGhhbmRsZSB0aGUgZmlyc3QgcmVjZWl2ZWQuCi0KLUFsc28sIHdoZW4gaGFuZGxpbmcgdGhlIHNlZWssIHRoZSBlbGVtZW50IG1pZ2h0IHB1c2ggZmx1c2gtc3RhcnQsIGZsdXNoLXN0b3AKLWFuZCBhIHNlZ21lbnQgZXZlbnQuIEFsbCB0aG9zZSBldmVudHMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc2VxbnVtIG9mIHRoZSBzZWVrCi1ldmVudCByZWNlaXZlZC4gV2hlbiB0aGlzIHNlZ21lbnQgaXMgb3ZlciBhbmQgYW4gRU9TL1NlZ21lbnQtZG9uZSBldmVudCBpcwotZ29pbmcgdG8gYmUgcHVzaGVkLCBpdCBhbHNvIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNlcW51bSBvZiB0aGUgc2VlayB0aGF0Ci1vcmlnaW5hdGVkIHRoZSBzZWdtZW50IHRvIGJlIHBsYXllZC4KLQotSGF2aW5nIHRoZSBzYW1lIHNlcW51bSBhcyB0aGUgc2VlayBvbiB0aGUgc2VnbWVudC1kb25lIG9yIEVPUyBldmVudHMgaXMKLWltcG9ydGFudCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGlkZW50aWZ5IHRoYXQgdGhlIHNlZ21lbnQgcmVxdWVzdGVkCi1ieSBpdHMgc2VlayBoYXMgZmluaXNoZWQgcGxheWluZy4KLQotCi0KLVF1ZXN0aW9ucwotLS0tLS0tLS0tCi0KLUEpIFdoYXQgaGFwcGVucyBpZiB0aGUgYXBwbGljYXRpb24gaGFzIHNlbnQgYSBzZWVrIHRvIHRoZSBwaXBlbGluZSBhbmQsCi0gICB3aGlsZSB0aGUgc2VnbWVudCByZWxhdGl2ZSB0byB0aGlzIHNlZWsgaXMgcGxheWluZywgaXQgc2VuZHMgYW4gRU9TCi0gICBldmVudD8gU2hvdWxkIHRoZSBFT1MgcHVzaGVkIGJ5IHRoZSBzb3VyY2UgaGF2ZSB0aGUgc2VxbnVtIG9mIHRoZQotICAgc2VnbWVudCBvciB0aGUgRU9TIGZyb20gdGhlIGFwcGxpY2F0aW9uPwotCi1JZiB0aGUgRU9TIHdhcyByZWNlaXZlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiBiZWZvcmUgdGhlIHNlZ21lbnQgZW5kZWQsIGl0Ci1zaG91bGQgaGF2ZSB0aGUgRU9TIGZyb20gdGhlIGFwcGxpY2F0aW9uIGV2ZW50LiBJZiB0aGUgc2VnbWVudCBlbmRzIGJlZm9yZQotdGhlIGFwcGxpY2F0aW9uIGV2ZW50IGlzIHJlY2VpdmVkL2hhbmRsZWQsIGl0IHNob3VsZCBoYXZlIHRoZSBzZWVrL3NlZ21lbnQKLXNlcW51bS4KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXNwYXJzZXN0cmVhbXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmIzZDJmLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtc3BhcnNlc3RyZWFtcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotRFJBRlQgU3BhcnNlIFN0cmVhbXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUludHJvZHVjdGlvbgotfn5+fn5+fn5+fn5+Ci0KLUluIDAuOCwgdGhlcmUgd2FzIHNvbWUgc3VwcG9ydCBmb3IgU3BhcnNlIFN0cmVhbXMgdGhyb3VnaCB0aGUgdXNlIG9mIAotRklMTEVSIGV2ZW50cy4gVGhlc2Ugd2VyZSB1c2VkIHRvIG1hcmsgZ2FwcyBiZXR3ZWVuIGJ1ZmZlcnMgc28gdGhhdCBkb3duc3RyZWFtCi1lbGVtZW50cyBjb3VsZCBrbm93IG5vdCB0byBleHBlY3QgYW55IG1vcmUgZGF0YSBmb3IgdGhhdCBnYXAuIAotCi1JbiAwLjEwLCBzZWdtZW50IGluZm9ybWF0aW9uIGNvbnZleWVkIHRocm91Z2ggU0VHTUVOVCBldmVudHMgY2FuIGJlIHVzZWQKLWZvciB0aGUgc2FtZSBwdXJwb3NlLgotCi1JbiAxLjAsIHRoZXJlIGlzIGEgR0FQIGV2ZW50IHRoYXQgd29ya3MgaW4gYSBzaW1pbGFyIGZhc2hpb24gYXMgdGhlIEZJTExFUgotZXZlbnQgaW4gMC44LgotCi1Vc2UgY2FzZXMKLX5+fn5+fn5+fgotCi0xKSBTdWItdGl0bGUgc3RyZWFtcwotICBTdWItdGl0bGUgaW5mb3JtYXRpb24gZnJvbSBtdXhlZCBmb3JtYXRzIHN1Y2ggYXMgTWF0cm9za2Egb3IgTVBFRyBjb25zaXN0IG9mCi0gIGlycmVndWxhciBidWZmZXJzIHNwYWNlZCBmYXIgYXBhcnQgY29tcGFyZWQgdG8gdGhlIG90aGVyIHN0cmVhbXMgCi0gIChhdWRpbyBhbmQgdmlkZW8pLiBTaW5jZSB0aGVzZSB1c3VhbGx5IG9ubHkgYXBwZWFyIHdoZW4gc29tZW9uZSBzcGVha3Mgb3IgCi0gIHNvbWUgb3RoZXIgYWN0aW9uIGluIHRoZSB2aWRlby9hdWRpbyBuZWVkcyBkZXNjcmliaW5nLCB0aGV5IGNhbiBiZSBhbnl3aGVyZQotICBmcm9tIDEtMiBzZWNvbmRzIHRvIHNldmVyYWwgbWludXRlcyBhcGFydC4KLSAgCi0gIERvd25zdHJlYW0gZWxlbWVudHMgdGhhdCB3YW50IHRvIG1peCBzdWItdGl0bGVzIGFuZCB2aWRlbyAoYW5kIG11eGVycykKLSAgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB3aGV0aGVyIHRvIHByb2Nlc3MgYSB2aWRlbyBwYWNrZXQgb3Igd2FpdCBhIG1vbWVudCAKLSAgZm9yIGEgY29ycmVzcG9uZGluZyBzdWItdGl0bGUgdG8gYmUgZGVsaXZlcmVkIG9uIGFub3RoZXIgcGFkLgotCi0yKSBTdGlsbCBmcmFtZS9tZW51IHN1cHBvcnQKLSAgSW4gRFZEcyAoYW5kIG90aGVyIGZvcm1hdHMpLCB0aGVyZSBhcmUgc3RpbGwtZnJhbWUgcmVnaW9ucyB3aGVyZSB0aGUgY3VycmVudAotICB2aWRlbyBmcmFtZSBzaG91bGQgYmUgcmV0YWluZWQgYW5kIG5vIGF1ZGlvIHBsYXllZCBmb3IgYSBwZXJpb2QuIEluIERWRCwgCi0gIHRoZXNlIGFyZSBkZXNjcmliZWQgZWl0aGVyIGFzIGEgZml4ZWQgZHVyYXRpb24sIG9yIGluZmluaXRlIGR1cmF0aW9uIHN0aWxsCi0gIGZyYW1lLiAKLQotMykgQXZvaWRpbmcgcHJvY2Vzc2luZyBzaWxlbmNlIGZyb20gYXVkaW8gZ2VuZXJhdG9ycwotICBJbWFnaW5lIGEgc291cmNlIHRoYXQgZnJvbSB0aW1lIHRvIHRpbWUgcHJvZHVjZXMgZW1wdHkgYnVmZmVycyAoc2lsZW5jZQotICBvciBibGFuayBpbWFnZXMpLiBJZiB0aGUgcGlwZWxpbmUgaGFzIG1hbnkgZWxlbWVudHMgbmV4dCwgaXQgaXMgYmV0dGVyIHRvCi0gIG9wdGltaXNlIHRoZSBvYnNvbGV0ZSBkYXRhIHByb2Nlc3NpbmcgaW4gdGhpcyBjYXNlLiBFeGFtcGxlcyBmb3Igc3VjaCBzb3VyY2VzCi0gIGFyZSBzb3VuZC1nZW5lcmF0b3JzIChzaW1zeW4gaW4gZ3N0LWJ1enp0YXJkKSBvciBhIHNvdXJjZSBpbiBhIHZvaXAgCi0gIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBub2lzZS1nYXRpbmcgKHRvIHNhdmUgYmFuZHdpdGgpLgotCi1EZXRhaWxzCi1+fn5+fn5+Ci0KLTEpIFN1Yi10aXRsZSBzdHJlYW1zCi0gIFRoZSBtYWluIHJlcXVpcmVtZW50IGhlcmUgaXMgdG8gYXZvaWQgc3RhbGxpbmcgdGhlIHBpcGVsaW5lIGJldHdlZW4gc3ViLXRpdGxlCi0gIHBhY2tldHMsIGFuZCBpcyBlZmZlY3RpdmVseSB1cGRhdGluZyB0aGUgbWluaW11bS10aW1lc3RhbXAgZm9yIHRoYXQgc3RyZWFtLgotICAKLSAgQSBkZW11eGVyIGNhbiBkbyB0aGlzIGJ5IHNlbmRpbmcgYW4gJ3VwZGF0ZScgU0VHTUVOVCB3aXRoIGEgbmV3IHN0YXJ0IHRpbWUKLSAgdG8gdGhlIHN1YnRpdGxlIHBhZC4gRm9yIGV4YW1wbGUsIGV2ZXJ5IHRpbWUgdGhlIFNDUiBpbiBNUEVHIGRhdGEgCi0gIGFkdmFuY2VzIG1vcmUgdGhhbiAwLjUgc2Vjb25kcywgdGhlIE1QRUcgZGVtdXhlciBjYW4gaXNzdWUgYSBTRUdNRU5UIHdpdGgKLSAgICh1cGRhdGU9VFJVRSwgc3RhcnQ9U0NSICkuIERvd25zdHJlYW0gZWxlbWVudHMgY2FuIHRoZW4gYmUgYXdhcmUgbm90IHRvIAotICAgZXhwZWN0IGFueSBkYXRhIG9sZGVyIHRoYW4gdGhlIG5ldyBzdGFydCB0aW1lLgotCi0gIFRoZSBzYW1lIGhvbGRzIHRydWUgZm9yIGFueSBlbGVtZW50IHRoYXQga25vd3MgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIAotICBzdHJlYW0gLSBvbmNlIHRoZSBlbGVtZW50IGtub3dzIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIGJlIHByZXNlbnRlZAotICB1bnRpbCB0aW1lICduJyBpdCBjYW4gYWR2YW5jZSB0aGUgc3RhcnQgdGltZSBvZiB0aGUgY3VycmVudCBzZWdtZW50IHRvICduJy4KLSAgIAotICBUaGlzIHRlY2huaXF1ZSBjYW4gYWxzbyBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gcmVwcmVzZW50IGEgc3RyZWFtIG9mIAotICBNSURJIGV2ZW50cyBzcGFjZWQgdG8gYSBjbG9jayBwZXJpb2QuIFdoZW4gdGhlcmUgaXMgbm8gZXZlbnQgcHJlc2VudCBmb3IgCi0gIGEgY2xvY2sgdGltZSwgYSBTRUdNRU5UIHVwZGF0ZSBjYW4gYmUgc2VudCBpbiBpdHMgcGxhY2UuCi0gIAotMikgU3RpbGwgZnJhbWUvbWVudSBzdXBwb3J0Ci0gIFN0aWxsIGZyYW1lcyBpbiBEVkQgbWVudXMgYXJlIG5vdCB0aGUgc2FtZSwgaW4gdGhhdCB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UKLSAgYSBnYXAgaW4gdGhlIHRpbWVzdGFtcHMgb2YgdGhlIGRhdGEuIEluc3RlYWQsIHRoZXkgcmVwcmVzZW50IGEgcGF1c2UgaW4gdGhlCi0gIHByZXNlbnRhdGlvbiBvZiBhIHN0cmVhbS4gQ29ycmVjdGx5IHBlcmZvcm1pbmcgdGhlIHdhaXQgcmVxdWlyZXMgc29tZQotICBzeW5jaHJvbmlzYXRpb24gd2l0aCBkb3duc3RyZWFtIGVsZW1lbnRzLiAKLSAgCi0gIEluIHRoaXMgc2NlbmFyaW8sIGFuIHVwc3RyZWFtIGVsZW1lbnQgdGhhdCB3YW50cyB0byBleGVjdXRlIGEgc3RpbGwgZnJhbWUKLSAgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICAKLSAgICAqIFNlbmQgYWxsIGRhdGEgYmVmb3JlIHRoZSBzdGlsbCBmcmFtZSB3YWl0Ci0gICAgKiBTZW5kIGEgRFJBSU4gZXZlbnQgdG8gZW5zdXJlIHRoYXQgYWxsIGRhdGEgaGFzIGJlZW4gcGxheWVkIGRvd25zdHJlYW0uCi0gICAgKiB3YWl0IG9uIHRoZSBjbG9jayBmb3IgdGhlIHJlcXVpcmVkIGR1cmF0aW9uLCBwb3NzaWJseSBpbnRlcnJ1cHRpbmcgCi0gICAgICBpZiBuZWNlc3NhcnkgZHVlIHRvIGFuIGludGVydmVuaW5nIGFjdGl2aXR5IChzdWNoIGFzIGEgdXNlciBuYXZpZ2F0aW9uKQotICAgICogRkxVU0ggdGhlIHBpcGVsaW5lIHVzaW5nIGEgbm9ybWFsIGZsdXNoIHNlcXVlbmNlIChGTFVTSF9TVEFSVCwgCi0gICAgICBjaGFpbi1sb2NrLCBGTFVTSF9TVE9QKQotICAgICogU2VuZCBhIFNFR01FTlQgdG8gcmVzdGFydCBwbGF5YmFjayB3aXRoIHRoZSBuZXh0IHRpbWVzdGFtcCBpbiB0aGUgCi0gICAgICBzdHJlYW0uCi0gIAotICBUaGUgdXBzdHJlYW0gZWxlbWVudCBwZXJmb3JtaW5nIHRoZSB3YWl0IG11c3Qgb25seSBkbyBzbyB3aGVuIGluIHRoZSBQTEFZSU5HIAotICBzdGF0ZS4gRHVyaW5nIFBBVVNFRCwgdGhlIGNsb2NrIHdpbGwgbm90IGJlIHJ1bm5pbmcsIGFuZCBtYXkgbm90IGV2ZW4gaGF2ZSAKLSAgYmVlbiBkaXN0cmlidXRlZCB0byB0aGUgZWxlbWVudCB5ZXQuCi0gIAotICBEUkFJTiBpcyBhIG5ldyBldmVudCB0aGF0IHdpbGwgYmxvY2sgb24gYSBzcmMgcGFkIHVudGlsIGFsbCBkYXRhIGRvd25zdHJlYW0gCi0gIGhhcyBiZWVuIHBsYXllZCBvdXQuIAotICAKLSAgRmx1c2hpbmcgYWZ0ZXIgY29tcGxldGluZyB0aGUgc3RpbGwgd2FpdCBpcyB0byBlbnN1cmUgdGhhdCBkYXRhIGFmdGVyIHRoZSB3YWl0Ci0gIGlzIHBsYXllZCBjb3JyZWN0bHkuIFdpdGhvdXQgaXQsIHNpbmtzIHdpbGwgY29uc2lkZXIgdGhlIGZpcnN0IGJ1ZmZlcnMgCi0gICh4IHNlY29uZHMsIHdoZXJlIHggaXMgdGhlIGR1cmF0aW9uIG9mIHRoZSB3YWl0IHRoYXQgb2NjdXJyZWQpIHRvIGJlCi0gIGFycml2aW5nIGxhdGUgYXQgdGhlIHNpbmssIGFuZCB0aGV5IHdpbGwgYmUgZGlzY2FyZGVkIGluc3RlYWQgb2YgcGxheWVkLgotCi0zKSBGb3IgYXVkaW8sIDMpIGlzIHRoZSBzYW1lIGNhc2UgYXMgMSkgLSB0aGVyZSBpcyBhICdnYXAnIGluIHRoZSBhdWRpbyBkYXRhIAotICAgdGhhdCBuZWVkcyB0byBiZSBwcmVzZW50ZWQsIGFuZCB0aGlzIGNhbiBiZSBkb25lIGJ5IHNlbmRpbmcgYSBTRUdNRU5UIAotICAgdXBkYXRlIHRoYXQgbW92ZXMgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHNlZ21lbnQgdG8gdGhlIG5leHQgdGltZXN0YW1wIHdoZW4gCi0gICBkYXRhIHdpbGwgYmUgc2VudC4KLSAgIAotICAgRm9yIHZpZGVvLCBob3dldmVyIGl0IGlzIHNsaWdodGx5IGRpZmZlcmVudC4gVmlkZW8gZnJhbWVzIGFyZSB0eXBpY2FsbHkKLSAgIHRyZWF0ZWQgYXQgdGhlIG1vbWVudCBhcyBjb250aW51aW5nIHRvIGJlIGRpc3BsYXllZCBhZnRlciB0aGVpciBpbmRpY2F0ZWQKLSAgIGR1cmF0aW9uIGlmIG5vIG5ldyBmcmFtZSBhcnJpdmVzLiBJbiAzKSwgaXQgaXMgZGVzaXJlZCB0byBkaXNwbGF5IGEgYmxhbmsKLSAgIGZyYW1lIGluc3RlYWQsIGluIHdoaWNoIGNhc2UgYXQgbGVhc3Qgb25lIGJsYW5rIGZyYW1lIHNob3VsZCBiZSBzZW50IGJlZm9yZQotICAgdXBkYXRpbmcgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHNlZ21lbnQuCi0gICAgCi0gICAKZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtc3RhbmRhcmRzLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtc3RhbmRhcmRzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQxNzE4NS4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LXN0YW5kYXJkcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1Pd25lcnNoaXAgb2YgZHluYW1pYyBvYmplY3RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFueSBvYmplY3Qtb3JpZW50ZWQgc3lzdGVtIG9yIGxhbmd1YWdlIHRoYXQgZG9lc24ndCBoYXZlIGF1dG9tYXRpYyBnYXJiYWdlIAotY29sbGVjdGlvbiBoYXMgbWFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgYXMgZmFyIGFzIHRoZSBwb2ludGVycyBnby4gVGhlcmVmb3JlLCAKLXNvbWUgc3RhbmRhcmRzIG11c3QgYmUgYWRoZXJlZCB0byBhcyBmYXIgYXMgd2hvIG93bnMgd2hhdC4KLQotU3RyaW5ncwotfn5+fn5+fgotCi1Bcmd1bWVudHMgcGFzc2VkIGludG8gYSBmdW5jdGlvbiBhcmUgb3duZWQgYnkgdGhlIGNhbGxlciwgYW5kIHRoZSBmdW5jdGlvbiAKLXdpbGwgbWFrZSBhIGNvcHkgb2YgdGhlIHN0cmluZyBmb3IgaXRzIG93biBpbnRlcm5hbCB1c2UuICBUaGUgc3RyaW5nIHNob3VsZCAKLWJlIGNvbnN0IGdjaGFyICouICBTdHJpbmdzIHJldHVybmVkIGZyb20gYSBmdW5jdGlvbiBhcmUgYWx3YXlzIGEgY29weSBvZiB0aGUKLW9yaWdpbmFsIGFuZCBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNhZ2UgYnkgdGhlIGNhbGxlci4KLQotICBleDoKLQotICAgICBuYW1lID0gZ3N0X2VsZW1lbnRfZ2V0X25hbWUgKGVsZW1lbnQpOyAgIC8qIGNvcHkgb2YgbmFtZSBpcyBtYWRlICovCi0gICAgIC4uIHVzZSBuYW1lIC4uCi0gICAgIGdfZnJlZSAobmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZSBhZnRlciB1c2FnZSAqLwotCi0KLU9iamVjdHMKLX5+fn5+fn4KLQotT2JqZWN0cyBwYXNzZWQgaW50byBhIGZ1bmN0aW9uIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyLCBhbnkgYWRkaXRpb25hbCAKLXJlZmVyZW5jZSBoZWxkIHRvIHRoZSBvYmplY3QgYWZ0ZXIgbGVhdmluZyB0aGUgZnVuY3Rpb24gc2hvdWxkIGluY3JlYXNlIHRoZSAKLXJlZmNvdW50IG9mIHRoYXQgb2JqZWN0LiAKLQotT2JqZWN0cyByZXR1cm5lZCBmcm9tIGEgZnVuY3Rpb24gYXJlIG93bmVkIGJ5IHRoZSBjYWxsZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUKLWNhbGxlZCBzaG91bGQgX2ZyZWUoKSBvciBfdW5yZWYoKSB0aGUgb2JqZWN0IGFmdGVyIHVzYWdlLgotCi0gIGV4OgotCi0gICAgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOyAgICAgICAgICAvKiBwZWVyIHdpdGggaW5jcmVhc2VkIHJlZmNvdW50ICovCi0gICAgIGlmIChwZWVyKSB7Ci0gICAgICAgLi4gdXNlIHBlZXIgLi4KLSAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwZWVyKSk7IC8qIHVucmVmIHBlZXIgYWZ0ZXIgdXNhZ2UgKi8KLSAgICAgfQotCi0KLUl0ZXJhdG9ycwotfn5+fn5+fn5+Ci0KLVdoZW4gcmV0cmlldmluZyBtdWx0aXBsZSBvYmplY3RzIGZyb20gYW4gb2JqZWN0IGFuIGl0ZXJhdG9yIHNob3VsZCBiZSB1c2VkLgotVGhlIGl0ZXJhdG9yIGFsbG93cyB5b3UgdG8gYWNjZXNzIHRoZSBvYmplY3RzIG9uZSBhZnRlciBhbm90aGVyIHdoaWxlIG1ha2luZwotc3VyZSB0aGF0IHRoZSBzZXQgb2Ygb2JqZWN0cyByZXRyaWV2ZWQgcmVtYWlucyBjb25zaXN0ZW50LgotCi1FYWNoIG9iamVjdCByZXRyaWV2ZWQgZnJvbSBhbiBpdGVyYXRvciBoYXMgaXRzIHJlZmNvdW50IGluY3JlYXNlZCBvciBpcyBhCi1jb3B5IG9mIHRoZSBvcmlnaW5hbC4gSW4gYW55IGNhc2UgdGhlIG9iamVjdCBzaG91bGQgYmUgdW5yZWZmZWQgb3IgZnJlZWQKLWFmdGVyIHVzYWdlLgotCi0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC1zdGF0ZXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWQzMDBjLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtc3RhdGVzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQwNiArMCwwIEBACi1TdGF0ZXMKLS0tLS0tLQotCi1Cb3RoIGVsZW1lbnRzIGFuZCBwYWRzIGNhbiBiZSBpbiBkaWZmZXJlbnQgc3RhdGVzLiBUaGUgc3RhdGVzIG9mIHRoZSBwYWRzIGFyZSAKLWxpbmtlZCB0byB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnQgc28gdGhlIGRlc2lnbiBvZiB0aGUgc3RhdGVzIGlzIG1haW5seQotZm9jdXNlZCBhcm91bmQgdGhlIGVsZW1lbnQgc3RhdGVzLgotCi1BbiBlbGVtZW50IGNhbiBiZSBpbiA0IHN0YXRlcy4gTlVMTCwgUkVBRFksIFBBVVNFRCBhbmQgUExBWUlORy4gV2hlbiBhbiBlbGVtZW50Ci1pcyBpbml0aWFsbHkgaW5zdGFudGlhdGVkLCBpdCBpcyBpbiB0aGUgTlVMTCBzdGF0ZS4KLQotCi1TdGF0ZSBkZWZpbml0aW9ucwotfn5+fn5+fn5+fn5+fn5+fn4KLQotIC0gTlVMTDogICAgVGhpcyBpcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhbiBlbGVtZW50LiAKLSAtIFJFQURZOiAgIFRoZSBlbGVtZW50IHNob3VsZCBiZSBwcmVwYXJlZCB0byBnbyB0byBQQVVTRUQuCi0gLSBQQVVTRUQ6ICBUaGUgZWxlbWVudCBzaG91bGQgYmUgcmVhZHkgdG8gYWNjZXB0IGFuZCBwcm9jZXNzIGRhdGEuIFNpbmsKLSAgICAgICAgICAgIGVsZW1lbnRzIGhvd2V2ZXIgb25seSBhY2NlcHQgb25lIGJ1ZmZlciBhbmQgdGhlbiBibG9jay4KLSAtIFBMQVlJTkc6IFRoZSBzYW1lIGFzIFBBVVNFRCBleGNlcHQgZm9yIGxpdmUgc291cmNlcyBhbmQgc2lua3MuIFNpbmtzIGFjY2VwdAotICAgICAgICAgICAgYW5kIHJlbmRlciBkYXRhLiBMaXZlIHNvdXJjZXMgcHJvZHVjZSBkYXRhLgotCi1XZSBjYWxsIHRoZSBzZXF1ZW5jZSBOVUxMLT5QTEFZSU5HIGFuIHVwd2FyZHMgc3RhdGUgY2hhbmdlIGFuZCBQTEFZSU5HLT5OVUxMCi1hIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2UuCi0KLQotU3RhdGUgdHJhbnNpdGlvbnMKLX5+fn5+fn5+fn5+fn5+fn5+Ci0KLXRoZSBmb2xsb3dpbmcgc3RhdGUgY2hhbmdlcyBhcmUgcG9zc2libGU6Ci0KLSBOVUxMIC0+IFJFQURZCi0gICAtIFRoZSBlbGVtZW50IG11c3QgY2hlY2sgaWYgdGhlIHJlc291cmNlcyBpdCBuZWVkcyBhcmUgYXZhaWxhYmxlLgotICAgICBEZXZpY2Ugc2lua3MgYW5kIHNvdXJjZXMgdHlwaWNhbGx5IHRyeSB0byBwcm9iZSB0aGUgZGV2aWNlIHRvIGNvbnN0cmFpbgotICAgICB0aGVpciBjYXBzLgotICAgLSBUaGUgZWxlbWVudCBvcGVucyB0aGUgZGV2aWNlLCB0aGlzIGlzIG5lZWRlZCBpZiB0aGUgcHJldmlvdXMgc3RlcCByZXF1aXJlcwotICAgICB0aGUgZGV2aWNlIHRvIGJlIG9wZW5lZC4KLQotIFJFQURZIC0+IFBBVVNFRAotICAgLSBUaGUgZWxlbWVudCBwYWRzIGFyZSBhY3RpdmF0ZWQgaW4gb3JkZXIgdG8gcmVjZWl2ZSBkYXRhIGluIFBBVVNFRC4KLSAgICAgU3RyZWFtaW5nIHRocmVhZHMgYXJlIHN0YXJ0ZWQuCi0gICAtIFNvbWUgZWxlbWVudHMgbWlnaHQgbmVlZCB0byByZXR1cm4gQVNZTkMgYW5kIGNvbXBsZXRlIHRoZSBzdGF0ZSBjaGFuZ2UKLSAgICAgd2hlbiB0aGV5IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uLiBJdCBpcyBhIHJlcXVpcmVtZW50IGZvciBzaW5rcyB0bwotICAgICByZXR1cm4gQVNZTkMgYW5kIGNvbXBsZXRlIHRoZSBzdGF0ZSBjaGFuZ2Ugd2hlbiB0aGV5IHJlY2VpdmUgdGhlIGZpcnN0Ci0gICAgIGJ1ZmZlciBvciBFT1MgZXZlbnQgKHByZXJvbGwpLiBTaW5rcyBhbHNvIGJsb2NrIHRoZSBkYXRhZmxvdyB3aGVuIGluIFBBVVNFRC4KLSAgIC0gQSBwaXBlbGluZSByZXNldHMgdGhlIHJ1bm5pbmdfdGltZSB0byAwLgotICAgLSBMaXZlIHNvdXJjZXMgcmV0dXJuIE5PX1BSRVJPTEwgYW5kIGRvbid0IGdlbmVyYXRlIGRhdGEuCi0gCi0gUEFVU0VEIC0+IFBMQVlJTkcKLSAgIC0gTW9zdCBlbGVtZW50cyBpZ25vcmUgdGhpcyBzdGF0ZSBjaGFuZ2UuCi0gICAtIFRoZSBwaXBlbGluZSBzZWxlY3RzIGEgY2xvY2sgYW5kIGRpc3RyaWJ1dGVzIHRoaXMgdG8gYWxsIHRoZSBjaGlsZHJlbgotICAgICBiZWZvcmUgc2V0dGluZyB0aGVtIHRvIFBMQVlJTkcuIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBvbmx5IGFsbG93ZWQgdG8KLSAgICAgc3luY2hyb25pemUgb24gdGhlIGNsb2NrIGluIHRoZSBQTEFZSU5HIHN0YXRlLgotICAgLSBUaGUgcGlwZWxpbmUgdXNlcyB0aGUgY2xvY2sgYW5kIHRoZSBydW5uaW5nX3RpbWUgdG8gY2FsY3VsYXRlIHRoZSBiYXNlX3RpbWUuCi0gICAgIFRoZSBiYXNlX3RpbWUgaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIGNoaWxkcmVuIHdoZW4gcGVyZm9ybWluZyB0aGUgc3RhdGUKLSAgICAgY2hhbmdlLgotICAgLSBTaW5rIGVsZW1lbnRzIHN0b3AgYmxvY2tpbmcgb24gdGhlIHByZXJvbGwgYnVmZmVyIG9yIGV2ZW50IGFuZCBzdGFydAotICAgICByZW5kZXJpbmcgdGhlIGRhdGEuCi0gICAtIFNpbmtzIGNhbiBwb3N0IHRoZSBFT1MgbWVzc2FnZSBpbiB0aGUgUExBWUlORyBzdGF0ZS4gSXQgaXMgbm90IGFsbG93ZWQgdG8KLSAgICAgcG9zdCBFT1Mgd2hlbiBub3QgaW4gdGhlIFBMQVlJTkcgc3RhdGUuCi0gICAtIFdoaWxlIHN0cmVhbWluZyBpbiBQQVVTRUQgb3IgUExBWUlORyBlbGVtZW50cyBjYW4gY3JlYXRlIGFuZCByZW1vdmUKLSAgICAgc29tZXRpbWVzIHBhZHMuCi0gICAtIExpdmUgc291cmNlcyBzdGFydCBnZW5lcmF0aW5nIGRhdGEgYW5kIHJldHVybiBTVUNDRVNTLgotCi0gUExBWUlORyAtPiBQQVVTRUQKLSAgIC0gTW9zdCBlbGVtZW50cyBpZ25vcmUgdGhpcyBzdGF0ZSBjaGFuZ2UuCi0gICAtIFRoZSBwaXBlbGluZSBjYWxjdWxhdGVzIHRoZSBydW5uaW5nX3RpbWUgYmFzZWQgb24gdGhlIGxhc3Qgc2VsZWN0ZWQgY2xvY2sKLSAgICAgYW5kIHRoZSBiYXNlX3RpbWUuIEl0IHN0b3JlcyB0aGlzIGluZm9ybWF0aW9uIHRvIGNvbnRpbnVlIHBsYXliYWNrIHdoZW4KLSAgICAgZ29pbmcgYmFjayB0byB0aGUgUExBWUlORyBzdGF0ZS4KLSAgIC0gU2lua3MgdW5ibG9jayBhbnkgY2xvY2sgd2FpdCBjYWxscy4KLSAgIC0gV2hlbiBhIHNpbmsgZG9lcyBub3QgaGF2ZSBhIHBlbmRpbmcgYnVmZmVyIHRvIHBsYXksIGl0IHJldHVybnMgQVNZTkMgZnJvbSAKLSAgICAgdGhpcyBzdGF0ZSBjaGFuZ2UgYW5kIGNvbXBsZXRlcyB0aGUgc3RhdGUgY2hhbmdlIHdoZW4gaXQgcmVjZWl2ZXMgYSBuZXcKLSAgICAgYnVmZmVyIG9yIGFuIEVPUyBldmVudC4KLSAgIC0gQW55IHF1ZXVlZCBFT1MgbWVzc2FnZXMgYXJlIHJlbW92ZWQgc2luY2UgdGhleSB3aWxsIGJlIHJlcG9zdGVkIHdoZW4gZ29pbmcKLSAgICAgYmFjayB0byB0aGUgUExBWUlORyBzdGF0ZS4gVGhlIEVPUyBtZXNzYWdlcyBhcmUgcXVldWVkIGluIEdzdEJpbnMuCi0gICAtIExpdmUgc291cmNlcyBzdG9wIGdlbmVyYXRpbmcgZGF0YSBhbmQgcmV0dXJuIE5PX1BSRVJPTEwuCi0KLSBQQVVTRUQgLT4gUkVBRFkKLSAgIC0gU2lua3MgdW5ibG9jayBhbnkgd2FpdHMgaW4gdGhlIHByZXJvbGwuCi0gICAtIEVsZW1lbnRzIHVuYmxvY2sgYW55IHdhaXRzIG9uIGRldmljZXMKLSAgIC0gQ2hhaW4gb3IgZ2V0X3JhbmdlIGZ1bmN0aW9ucyByZXR1cm4gRkxVU0hJTkcuCi0gICAtIFRoZSBlbGVtZW50IHBhZHMgYXJlIGRlYWN0aXZhdGVkIHNvIHRoYXQgc3RyZWFtaW5nIGJlY29tZXMgaW1wb3NzaWJsZSBhbmQKLSAgICAgYWxsIHN0cmVhbWluZyB0aHJlYWRzIGFyZSBzdG9wcGVkLgotICAgLSBUaGUgc2luayBmb3JnZXRzIGFsbCBuZWdvdGlhdGVkIGZvcm1hdHMKLSAgIC0gRWxlbWVudHMgcmVtb3ZlIGFsbCBzb21ldGltZXMgcGFkcwotIAotIFJFQURZIC0+IE5VTEwKLSAgIC0gRWxlbWVudHMgY2xvc2UgZGV2aWNlcwotICAgLSBFbGVtZW50cyByZXNldCBhbnkgaW50ZXJuYWwgc3RhdGUuCi0KLQotU3RhdGUgdmFyaWFibGVzCi1+fn5+fn5+fn5+fn5+fn4KLQotQW4gZWxlbWVudCBoYXMgNCBzdGF0ZSB2YXJpYWJsZXMgdGhhdCBhcmUgcHJvdGVjdGVkIHdpdGggdGhlIG9iamVjdCBMT0NLOgotCi0gIC0gU1RBVEUKLSAgLSBTVEFURV9ORVhUCi0gIC0gU1RBVEVfUEVORElORyAKLSAgLSBTVEFURV9SRVRVUk4KLQotVGhlIFNUQVRFIGFsd2F5cyByZWZsZWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZWxlbWVudC4gCi1UaGUgU1RBVEVfTkVYVCByZWZsZWN0cyB0aGUgbmV4dCBzdGF0ZSB0aGUgZWxlbWVudCB3aWxsIGdvIHRvLgotVGhlIFNUQVRFX1BFTkRJTkcgYWx3YXlzIHJlZmxlY3RzIHRoZSByZXF1aXJlZCBzdGF0ZSBvZiB0aGUgZWxlbWVudC4gCi1UaGUgU1RBVEVfUkVUVVJOIHJlZmxlY3RzIHRoZSBsYXN0IHJldHVybiB2YWx1ZSBvZiBhIHN0YXRlIGNoYW5nZS4KLQotVGhlIFNUQVRFX05FWFQgYW5kIFNUQVRFX1BFTkRJTkcgY2FuIGJlIFZPSURfUEVORElORyBpZiB0aGUgZWxlbWVudCBpcyBpbiAKLXRoZSByaWdodCBzdGF0ZS4gCi0KLUFuIGVsZW1lbnQgaGFzIGEgc3BlY2lhbCBsb2NrIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGludm9jYXRpb25zIG9mCi1fc2V0X3N0YXRlKCksIGNhbGxlZCB0aGUgU1RBVEVfTE9DSy4gCi0KLQotU2V0dGluZyBzdGF0ZSBvbiBlbGVtZW50cwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgc3RhdGUgb2YgYW4gZWxlbWVudCBjYW4gYmUgY2hhbmdlZCB3aXRoIF9lbGVtZW50X3NldF9zdGF0ZSgpLiBXaGVuIGNoYW5naW5nCi10aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBhbGwgaW50ZXJtZWRpYXRlIHN0YXRlcyB3aWxsIGFsc28gYmUgc2V0IG9uIHRoZSBlbGVtZW50Ci11bnRpbCB0aGUgZmluYWwgZGVzaXJlZCBzdGF0ZSBpcyBzZXQuCi0KLVRoZSBfc2V0X3N0YXRlKCkgZnVuY3Rpb24gY2FuIHJldHVybiAzIHBvc3NpYmxlIHZhbHVlczoKLQotICBHU1RfU1RBVEVfRkFJTFVSRTogVGhlIHN0YXRlIGNoYW5nZSBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLiBUaGUgcGx1Z2luIHNob3VsZAotICAgICAgICAgICAgICAgICAgICAgaGF2ZSBwb3N0ZWQgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIHdpdGggaW5mb3JtYXRpb24uCi0gIAotICBHU1RfU1RBVEVfU1VDQ0VTUzogVGhlIHN0YXRlIGNoYW5nZSBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgotCi0gIEdTVF9TVEFURV9BU1lOQzogICBUaGUgc3RhdGUgY2hhbmdlIHdpbGwgY29tcGxldGUgbGF0ZXIgb24uIFRoaXMgY2FuIGhhcHBlbiAKLSAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGVsZW1lbnQgbmVlZHMgYSBsb25nIHRpbWUgdG8gcGVyZm9ybSB0aGUgc3RhdGUKLQkJICAgICBjaGFuZ2Ugb3IgZm9yIHNpbmtzIHRoYXQgbmVlZCB0byByZWNlaXZlIHRoZSBmaXJzdCBidWZmZXIKLQkJICAgICBiZWZvcmUgdGhleSBjYW4gY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZSAocHJlcm9sbCkuCi0KLSAgR1NUX1NUQVRFX05PX1BSRVJPTEw6IFRoZSBzdGF0ZSBjaGFuZ2UgaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBidXQgdGhlIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgIHdpbGwgbm90IGJlIGFibGUgdG8gcHJvZHVjZSBkYXRhIGluIHRoZSBQQVVTRUQgc3RhdGUuCi0KLUluIHRoZSBjYXNlIG9mIGFuIEFTWU5DIHN0YXRlIGNoYW5nZSwgaXQgaXMgcG9zc2libGUgdG8gcHJvY2VlZCB0byB0aGUgbmV4dAotc3RhdGUgYmVmb3JlIHRoZSBjdXJyZW50IHN0YXRlIGNoYW5nZSBjb21wbGV0ZWQsIGhvd2V2ZXIsIHRoZSBlbGVtZW50IHdpbGwgb25seQotZ2V0IHRvIHRoaXMgbmV4dCBzdGF0ZSBiZWZvcmUgY29tcGxldGluZyB0aGUgcHJldmlvdXMgQVNZTkMgc3RhdGUgY2hhbmdlLiAKLUFmdGVyIHJlY2VpdmluZyBhbiBBU1lOQyByZXR1cm4gdmFsdWUsIHlvdSBjYW4gdXNlIF9lbGVtZW50X2dldF9zdGF0ZSgpIHRvIHBvbGwgCi10aGUgc3RhdHVzIG9mIHRoZSBlbGVtZW50LiBJZiB0aGUgcG9sbGluZyByZXR1cm5zIFNVQ0NFU1MsIHRoZSBlbGVtZW50IGNvbXBsZXRlZAotdGhlIHN0YXRlIGNoYW5nZSB0byB0aGUgbGFzdCByZXF1ZXN0ZWQgc3RhdGUgd2l0aCBfc2V0X3N0YXRlKCkuCi0KLVdoZW4gc2V0dGluZyB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCwgdGhlIFNUQVRFX1BFTkRJTkcgaXMgc2V0IHRvIHRoZSByZXF1aXJlZCAKLXN0YXRlLiBUaGVuIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gb2YgdGhlIGVsZW1lbnQgaXMgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IG9mIAotdGhhdCBmdW5jdGlvbiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgU1RBVEUgYW5kIFNUQVRFX1JFVFVSTiBmaWVsZHMsIFNUQVRFX05FWFQsCi1TVEFURV9QRU5ESU5HIGFuZCBTVEFURV9SRVRVUk4gZmllbGRzLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgQVNZTkMsIHRoaXMgcmVzdWx0Ci1pcyBpbW1lZGlhdGVseSByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgotCi0KLUdldHRpbmcgc3RhdGUgb2YgZWxlbWVudHMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVGhlIF9nZXRfc3RhdGUoKSBmdW5jdGlvbiB0YWtlcyAzIGFyZ3VtZW50cywgdHdvIHBvaW50ZXJzIHRoYXQgd2lsbCBob2xkIHRoZQotY3VycmVudCBhbmQgcGVuZGluZyBzdGF0ZSBhbmQgb25lIEdzdENsb2NrVGltZSB0aGF0IGhvbGRzIGEgdGltZW91dCB2YWx1ZS4gVGhlIAotZnVuY3Rpb24gcmV0dXJucyBhIEdzdEVsZW1lbnRTdGF0ZVJldHVybi4KLQotIC0gSWYgdGhlIGVsZW1lbnQgcmV0dXJuZWQgU1VDQ0VTUyB0byB0aGUgcHJldmlvdXMgX3NldF9zdGF0ZSgpIGZ1bmN0aW9uLCB0aGlzCi0gICBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbGFzdCBzdGF0ZSBzZXQgb24gdGhlIGVsZW1lbnQgYW5kIFZPSURfUEVORElORyBpbgotICAgdGhlIHBlbmRpbmcgc3RhdGUgdmFsdWUuIFRoZSBmdW5jdGlvbiByZXR1cm5zIEdTVF9TVEFURV9TVUNDRVNTLgotCi0gLSBJZiB0aGUgZWxlbWVudCByZXR1cm5lZCBOT19QUkVST0xMIHRvIHRoZSBwcmV2aW91cyBfc2V0X3N0YXRlKCkgZnVuY3Rpb24sIHRoaXMKLSAgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBsYXN0IHN0YXRlIHNldCBvbiB0aGUgZWxlbWVudCBhbmQgVk9JRF9QRU5ESU5HIGluCi0gICB0aGUgcGVuZGluZyBzdGF0ZSB2YWx1ZS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgR1NUX1NUQVRFX05PX1BSRVJPTEwuCi0KLSAtIElmIHRoZSBlbGVtZW50IHJldHVybmVkIEZBSUxVUkUgdG8gdGhlIHByZXZpb3VzIF9zZXRfc3RhdGUoKSBjYWxsLCB0aGlzIAotICAgZnVuY3Rpb24gd2lsbCByZXR1cm4gRkFJTFVSRSB3aXRoIHRoZSBzdGF0ZSBzZXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YKLSAgIHRoZSBlbGVtZW50IGFuZCB0aGUgcGVuZGluZyBzdGF0ZSBzZXQgdG8gdGhlIHZhbHVlIHVzZWQgaW4gdGhlIGxhc3QgY2FsbAotICAgb2YgX3NldF9zdGF0ZSgpLgotCi0gLSBJZiB0aGUgZWxlbWVudCByZXR1cm5lZCBBU1lOQyB0byB0aGUgcHJldmlvdXMgX3NldF9zdGF0ZSgpIGNhbGwsIHRoaXMgZnVuY3Rpb24KLSAgIHdpbGwgd2FpdCBmb3IgdGhlIGVsZW1lbnQgdG8gY29tcGxldGUgaXRzIHN0YXRlIGNoYW5nZSB1cCB0byB0aGUgYW1vdW50IG9mIHRpbWUKLSAgIHNwZWNpZmllZCBpbiB0aGUgR3N0Q2xvY2tUaW1lLiAKLQotICAgKiBJZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBjb21wbGV0ZSB0aGUgc3RhdGUgY2hhbmdlIGluIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIAotICAgICB0aW1lLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIEFTWU5DIHdpdGggdGhlIHN0YXRlIHNldCB0byB0aGUgY3VycmVudCBzdGF0ZQotICAgICBhbmQgdGhlIHBlbmRpbmcgc3RhdGUgc2V0IHRvIHRoZSBwZW5kaW5nIHN0YXRlLgotCi0gICAqIElmIHRoZSBlbGVtZW50IGNvbXBsZXRlcyB0aGUgc3RhdGUgY2hhbmdlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWVvdXQsIHRoaXMgCi0gICAgIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVwZGF0ZWQgc3RhdGUgYW5kIFZPSURfUEVORElORyBhcyB0aGUgcGVuZGluZyBzdGF0ZS4KLQotICAgKiBJZiB0aGUgZWxlbWVudCBhYm9ydHMgdGhlIEFTWU5DIHN0YXRlIGNoYW5nZSBkdWUgdG8gYW4gZXJyb3Igd2l0aGluIHRoZSAKLSAgICAgc3BlY2lmaWVkIHRpbWVvdXQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBGQUlMVVJFIHdpdGggdGhlIHN0YXRlIHNldCB0byBsYXN0Ci0gICAgIHN1Y2Nlc3NmdWwgc3RhdGUgYW5kIHBlbmRpbmcgc2V0IHRvIHRoZSBsYXN0IGF0dGVtcHQuIFRoZSBlbGVtZW50IHNob3VsZAotICAgICBhbHNvIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIHdpdGggbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvYmxlbS4KLQotCi1TdGF0ZXMgaW4gR3N0QmluCi1+fn5+fn5+fn5+fn5+fn5+Ci0KLUEgR3N0QmluIG1hbmFnZXMgdGhlIHN0YXRlIG9mIGl0cyBjaGlsZHJlbi4gSXQgZG9lcyB0aGlzIGJ5IHByb3BhZ2F0aW5nIHRoZSBzdGF0ZQotY2hhbmdlcyBwZXJmb3JtZWQgb24gaXQgdG8gYWxsIG9mIGl0cyBjaGlsZHJlbi4gIFRoZSBfc2V0X3N0YXRlKCkgZnVuY3Rpb24gb24gYSAKLWJpbiB3aWxsIGNhbGwgdGhlIF9zZXRfc3RhdGUoKSBmdW5jdGlvbiBvbiBhbGwgb2YgaXRzIGNoaWxkcmVuLCB0aGF0IGFyZQotbm90IGFscmVhZHkgaW4gdGhlIHRhcmdldCBzdGF0ZSBvciBpbiBhIGNoYW5nZSBzdGF0ZSB0byB0aGUgdGFyZ2V0IHN0YXRlLiAKLQotVGhlIGNoaWxkcmVuIGFyZSBpdGVyYXRlZCBmcm9tIHRoZSBzaW5rIGVsZW1lbnRzIHRvIHRoZSBzb3VyY2UgZWxlbWVudHMuIFRoaXMgbWFrZXMKLXN1cmUgdGhhdCB3aGVuIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50LCB0aGUgZG93bnN0cmVhbSBlbGVtZW50cyBhcmUgaW4KLXRoZSBjb3JyZWN0IHN0YXRlIHRvIHByb2Nlc3MgdGhlIGV2ZW50dWFsIGJ1ZmZlcnMuIEluIHRoZSBjYXNlIG9mIGEgZG93bndhcmRzCi1zdGF0ZSBjaGFuZ2UsIHRoZSBzaW5rIGVsZW1lbnRzIHdpbGwgc2h1dCBkb3duIGZpcnN0IHdoaWNoIG1ha2VzIHRoZSB1cHN0cmVhbQotZWxlbWVudHMgc2h1dCBkb3duIGFzIHdlbGwgc2luY2UgdGhlIF9wdXNoKCkgZnVuY3Rpb24gcmV0dXJucyBhIEdTVF9GTE9XX0ZMVVNISU5HCi1lcnJvci4KLQotSWYgYWxsIHRoZSBjaGlsZHJlbiByZXR1cm4gU1VDQ0VTUywgdGhlIGZ1bmN0aW9uIHJldHVybnMgU1VDQ0VTUyBhcyB3ZWxsLiAKLQotSWYgb25lIG9mIHRoZSBjaGlsZHJlbiByZXR1cm5zIEZBSUxVUkUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEZBSUxVUkUgYXMgd2VsbC4gSW4KLXRoaXMgc3RhdGUgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIGVsZW1lbnRzIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHN0YXRlLiBUaGUKLWFwcGxpY2F0aW9uIGNhbiBjaGVjayB3aGljaCBlbGVtZW50cyBoYXZlIGEgY2hhbmdlZCBzdGF0ZSwgd2hpY2ggd2VyZSBpbiBlcnJvcgotYW5kIHdoaWNoIHdlcmUgbm90IGFmZmVjdGVkIGJ5IGl0ZXJhdGluZyB0aGUgZWxlbWVudHMgYW5kIGNhbGxpbmcgX2dldF9zdGF0ZSgpCi1vbiB0aGUgZWxlbWVudHMuCi0KLUlmIGFmdGVyIGNhbGxpbmcgdGhlIHN0YXRlIGZ1bmN0aW9uIG9uIGFsbCBjaGlsZHJlbiwgb25lIG9mIHRoZSBjaGlsZHJlbiByZXR1cm5lZAotQVNZTkMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEFTWU5DIGFzIHdlbGwuCi0KLUlmIGFmdGVyIGNhbGxpbmcgdGhlIHN0YXRlIGZ1bmN0aW9uIG9uIGFsbCBjaGlsZHJlbiwgb25lIG9mIHRoZSBjaGlsZHJlbiByZXR1cm5lZAotTk9fUFJFUk9MTCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgTk9fUFJFUk9MTCBhcyB3ZWxsLiAKLQotSWYgYm90aCBOT19QUkVST0xMIGFuZCBBU1lOQyBjaGlsZHJlbiBhcmUgcHJlc2VudCwgTk9fUFJFUk9MTCBpcyByZXR1cm5lZC4KLQotVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJpbiBjYW4gYmUgcmV0cmlldmVkIHdpdGggX2dldF9zdGF0ZSgpLiAKLQotSWYgdGhlIGJpbiBpcyBwZXJmb3JtaW5nIGFuIEFTWU5DIHN0YXRlIGNoYW5nZSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBpdHMKLWN1cnJlbnQgc3RhdGUgZmllbGRzIHdoZW4gaXQgcmVjZWl2ZXMgc3RhdGUgbWVzc2FnZXMgZnJvbSB0aGUgY2hpbGRyZW4uCi0KLQotSW1wbGVtZW50aW5nIHN0YXRlcyBpbiBlbGVtZW50cwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1SRUFEWQotXl5eXl4KLQotCi0KLXVwd2FyZCBzdGF0ZSBjaGFuZ2UKLX5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVXB3YXJkIHN0YXRlIGNoYW5nZXMgYWx3YXlzIHJldHVybiBBU1lOQyBlaXRoZXIgaWYgdGhlIFNUQVRFX1BFTkRJTkcgaXMKLXJlYWNoZWQgb3Igbm90LgotCi1FbGVtZW50OgotCi0gIEEgLT4gQiA9PiBTVUNDRVNTIAotICAgIC0gY29tbWl0IHN0YXRlCi0KLSAgQSAtPiBCID0+IEFTWU5DIAotICAgIC0gbm8gY29tbWl0IHN0YXRlCi0gICAgLSBlbGVtZW50IGNvbW1pdHMgc3RhdGUgQVNZTkMKLQotICBBIC0+IEIgd2hpbGUgQVNZTkMKLSAgICAtIHVwZGF0ZSBTVEFURV9QRU5ESU5HIHN0YXRlCi0gICAgLSBubyBjb21taXQgc3RhdGUKLSAgICAtIG5vIGNoYW5nZV9zdGF0ZSBjYWxsZWQgb24gZWxlbWVudAotCi1CaW46Ci0KLSAgQS0+QjogYWxsIGVsZW1lbnRzIFNVQ0NFU1MKLSAgICAtIGNvbW1pdCBzdGF0ZQotCi0gIEEtPkI6IHNvbWUgZWxlbWVudHMgQVNZTkMKLSAgICAtIG5vIGNvbW1pdCBzdGF0ZQotICAgIC0gbGlzdGVuIGZvciBjb21taXQgbWVzc2FnZXMgb24gYnVzCi0gICAgLSBmb3IgZWFjaCBjb21taXQgbWVzc2FnZSwgcG9sbCBlbGVtZW50cywgdGhpcyBoYXBwZW5zIGluIGFub3RoZXIKLSAgICAgIHRocmVhZC4KLSAgICAtIGlmIG5vIEFTWU5DIGVsZW1lbnRzLCBjb21taXQgc3RhdGUsIGNvbnRpbnVlIHN0YXRlIGNoYW5nZSAKLSAgICAgIHRvIFNUQVRFX1BFTkRJTkcKLQotZG93bndhcmQgc3RhdGUgY2hhbmdlCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotRG93bndhcmQgc3RhdGUgY2hhbmdlcyBvbmx5IHJldHVybiBBU1lOQyBpZiB0aGUgZmluYWwgc3RhdGUgaXMgQVNZTkMuCi1UaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3Mgbm90IG5lZWRlZCB0byB3YWl0IGZvciBhbiBlbGVtZW50IHRvCi1jb21wbGV0ZSB0aGUgcHJlcm9sbCBvciBvdGhlciBBU1lOQyBzdGF0ZSBjaGFuZ2VzIHdoZW4gb25lIG9ubHkgd2FudHMgdG8KLXNodXQgZG93biBhbiBlbGVtZW50LgotCi1FbGVtZW50OgotCi0gIEEgLT4gQiA9PiBTVUNDRVNTIAotICAgIC0gY29tbWl0IHN0YXRlCi0KLSAgQSAtPiBCID0+IEFTWU5DIG5vdCBmaW5hbCBzdGF0ZQotICAgIC0gY29tbWl0IHN0YXRlIG9uIGJlaGFsZiBvZiBlbGVtZW50Ci0KLSAgQSAtPiBCID0+IEFTWU5DIGZpbmFsIHN0YXRlCi0gICAgLSBlbGVtZW50IHdpbGwgY29tbWl0IEFTWU5DIAotCi1CaW46Ci0gIAotICBBIC0+IEIgLT4gU1VDQ0VTUwotICAgIC0gY29tbWl0IHN0YXRlCi0KLSAgQSAtPiBCIC0+IEFTWU5DIG5vdCBmaW5hbCBzdGF0ZQotICAgIC0gY29tbWl0IHN0YXRlIG9uIGJlaGFsZiBvZiBlbGVtZW50LCBjb250aW51ZSBzdGF0ZSBjaGFuZ2UKLQotICBBIC0+IEIgPT4gQVNZTkMgZmluYWwgc3RhdGUKLSAgICAtIG5vIGNvbW1pdCBzdGF0ZQotICAgIC0gbGlzdGVuIGZvciBjb21taXQgbWVzc2FnZXMgb24gYnVzCi0gICAgLSBmb3IgZWFjaCBjb21taXQgbWVzc2FnZSwgcG9sbCBlbGVtZW50cwotICAgIC0gaWYgbm8gQVNZTkMgZWxlbWVudHMsIGNvbW1pdCBzdGF0ZQotCi0KLUxvY2tpbmcgb3ZlcnZpZXcgKGVsZW1lbnQpCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi0qIEVsZW1lbnQgY29tbWl0dGluZyBTVUNDRVNTCi0KLSAtIFNUQVRFX0xPQ0sgaXMgdGFrZW4gaW4gc2V0X3N0YXRlCi0gLSBjaGFuZ2Ugc3RhdGUgaXMgY2FsbGVkIGlmIFNVQ0NFU1MsIGNvbW1pdCBzdGF0ZSBpcyBjYWxsZWQKLSAtIGNvbW1pdCBzdGF0ZSBjYWxscyBjaGFuZ2Vfc3RhdGUgdG8gbmV4dCBzdGF0ZSBjaGFuZ2UuCi0gLSBpZiBmaW5hbCBzdGF0ZSBpcyByZWFjaGVkLCBzdGFjayB1bndpbmRzIGFuZCByZXN1bHQgaXMgcmV0dXJuZWQgdG8gCi0gICBzZXRfc3RhdGUgYW5kIGNhbGxlci4KLQotCi0gc2V0X3N0YXRlKGVsZW1lbnQpICAgICAgIGNoYW5nZV9zdGF0ZSAoZWxlbWVudCkgICBjb21taXRfc3RhdGUKLQotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgU1RBVEVfTE9DSyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgICAgICAgICAgICAgICAgICAgIHwgCi0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgCi0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgCi0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGRvIHN0YXRlIGNoYW5nZSkgICAgIHwKLSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWYgU1VDQ0VTUyAgICAgICAgICAgIHwKLSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IHBvc3QgbWVzc2FnZQotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgaWYgKCFmaW5hbCkgY2hhbmdlX3N0YXRlIChuZXh0KQotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IGVsc2UgU0lHTkFMCi0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICB8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgIHwgICAgIFNVQ0NFU1MgICAgICAgICAgICAgICAKLSAgICAgIHwgCi0gIFNUQVRFX1VOTE9DSwotICAgICAgfCAgICAgIAotICAgIFNVQ0NFU1MgICAKLSAgICAgICAgICAgCi0KLQotKiBFbGVtZW50IGNvbW1pdHRpbmcgQVNZTkMKLQotIC0gU1RBVEVfTE9DSyBpcyB0YWtlbiBpbiBzZXRfc3RhdGUKLSAtIGNoYW5nZSBzdGF0ZSBpcyBjYWxsZWQgYW5kIHJldHVybnMgQVNZTkMKLSAtIEFTWU5DIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCi0gLSBlbGVtZW50IHRha2VzIExPQ0sgaW4gc3RyZWFtaW5nIHRocmVhZC4KLSAtIGVsZW1lbnQgY2FsbHMgY29tbWl0X3N0YXRlIGluIHN0cmVhbWluZyB0aHJlYWQuCi0gLSBjb21taXQgc3RhdGUgY2FsbHMgY2hhbmdlX3N0YXRlIHRvIG5leHQgc3RhdGUgY2hhbmdlLgotCi0KLSBzZXRfc3RhdGUoZWxlbWVudCkgICAgICAgY2hhbmdlX3N0YXRlIChlbGVtZW50KSAgICAgc3RyZWFtX3RocmVhZCAgICAgIGNvbW1pdF9zdGF0ZSAoZWxlbWVudCkKLQotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICBTVEFURV9MT0NLICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IChzdGFydF90YXNrKSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgU1RSRUFNX0xPQ0sgICAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8Li4uICAgICAgICAgICAgICAgfAotICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotICAgICAgfCAgICAgQVNZTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSRUFNX1VOTE9DSyAgICAgICAgICAgfAotICBTVEFURV9VTkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAKLSAgICAgIHwgICAgICAgICAgICAgICAgLi4uLi5zeW5jLi4uLi4uLi4gICAgICAgICAgICAgICBTVEFURV9MT0NLICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAKLSAgICBBU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwtLS0+IHBvc3RfbWVzc2FnZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8LS0tPiBpZiAoIWZpbmFsKSBjaGFuZ2Vfc3RhdGUgKG5leHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICBlbHNlIFNJR05BTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8PC0tLS0tLS0tLS0tLS0tLS0tfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRFX1VOTE9DSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJFQU1fTE9DSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSRUFNX1VOTE9DSwotCi1SZW1hcmtzCi1+fn5+fn5+Ci0KLXNldF9zdGF0ZSBjYW5ub3QgYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgU1RBVEVfTE9DSwotcHJldmVudHMgdGhpcy4KLQotc3RhdGUgdmFyaWFibGVzIGFyZSBwcm90ZWN0ZWQgd2l0aCB0aGUgTE9DSy4KLQotY2FsbGluZyBzZXRfc3RhdGUgd2hpbGUgZ3N0X3N0YXRlIGlzIGNhbGxlZCBzaG91bGQgdW5sb2NrIHRoZSBnZXRfc3RhdGUgd2l0aAotYW4gZXJyb3IuIFRoZSBjb29raWUgd2lsbCBkbyB0aGF0LgotCi0KLSBzZXRfc3RhdGUoZWxlbWVudCkKLQotICBTVEFURV9MT0NLCi0KLSAgTE9DSwotICB1cGRhdGUgY3VycmVudCwgbmV4dCwgcGVuZGluZyBzdGF0ZQotICBjb29raWUrKwotICBVTkxPQ0sKLQotICBjaGFuZ2Vfc3RhdGUKLQotICBTVEFURV9VTkxPQ0sKLSAKLSAgIAotCi0KZGlmZiAtLWdpdCBhL2RvY3MvZGVzaWduL3BhcnQtc3RyZWFtLXN0YXR1cy50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbS1zdGF0dXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2UxY2QyLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtc3RyZWFtLXN0YXR1cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotU3RyZWFtIFN0YXR1cwotLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGVzaWduIGFuZCB1c2UgY2FzZXMgZm9yIHRoZSBzdHJlYW0gc3RhdHVzCi1tZXNzYWdlcy4KLQotU1RSRUFNX1NUQVRVUyBtZXNzYWdlcyBhcmUgcG9zdGVkIG9uIHRoZSBidXMgd2hlbiB0aGUgc3RhdGUgb2YgYSBzdHJlYW1pbmcKLXRocmVhZCBjaGFuZ2VzLiBUaGUgcHVycG9zZSBvZiB0aGlzIG1lc3NhZ2UgaXMgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvCi1pbnRlcmFjdCB3aXRoIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHByb3BlcnRpZXMsIHN1Y2ggYXMgdGhlIHRocmVhZCBwcmlvcml0eSBvcgotdGhlIHRocmVhZHBvb2wgdG8gdXNlLgotCi1XZSBhY2NvbW1vZGF0ZSBmb3IgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6Ci0KLSAtIEFwcGxpY2F0aW9uIGlzIGluZm9ybWVkIHdoZW4gYSBzdHJlYW1pbmcgdGhyZWFkIGlzIGFib3V0IHRvIGJlIGNyZWF0ZWQuIEl0Ci0gICBzaG91bGQgYmUgcG9zc2libGUgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBzdWdnZXN0IGEgY3VzdG9tIEdzdFRhc2tQb29sLgotIC0gQXBwbGljYXRpb24gaXMgaW5mb3JtZWQgd2hlbiB0aGUgc3RhdHVzIG9mIGEgc3RyZWFtaW5nIHRocmVhZCBpcyBjaGFuZ2VkLgotICAgVGhpcyBjYW4gYmUgaW50ZXJlc3RpbmcgZm9yIEdVSSBhcHBsaWNhdGlvbiB0aGF0IHdhbnQgdG8gdmlzdWFsaXplIHRoZSBzdGF0dXMKLSAgIG9mIHRoZSBzdHJlYW1pbmcgdGhyZWFkcyAocGxheWluZy9wYXVzZWQvc3RvcHBlZCkKLSAtIEFwcGxpY2F0aW9uIGlzIGluZm9ybWVkIHdoZW4gYSBzdHJlYW1pbmcgdGhyZWFkIGlzIGRlc3Ryb3llZC4KLQotV2UgYWxsb3cgZm9yIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOgotCi0gLSBFbGVtZW50cyByZXF1aXJlIGEgc3BlY2lmaWMgKGludGVybmFsKSBzdHJlYW1pbmcgdGhyZWFkIHRvIG9wZXJhdGUgb3IgdGhlCi0gICBhcHBsaWNhdGlvbiBjYW4gY3JlYXRlL3NwZWNpZnkgYSB0aHJlYWQgZm9yIHRoZSBlbGVtZW50LgotIC0gRWxlbWVudHMgYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGNvbmZpZ3VyZSBhIHByaW9yaXR5IG9uIHRoZSB0aHJlYWRzLgotCi0KLVVzZSBjYXNlcwotfn5+fn5+fn5+Ci0KLSAqIGJvb3N0IHRoZSBwcmlvcml0eSBvZiB0aGUgdWRwIHJlY2VpdmVyIHN0cmVhbWluZyB0aHJlYWQKLQotICAgIC4tLS0tLS0tLS4gICAgLi0tLS0tLS0uICAgIC4tLS0tLS0uICAgIC4tLS0tLS0tLgotICAgIHwgdWRwc3JjIHwgICAgfCBkZXBheSB8ICAgIHwgYWRlYyB8ICAgIHwgYXNpbmsgfAotICAgIHwgICAgICAgc3JjLT5zaW5rICAgIHNyYy0+c2luayAgIHNyYy0+c2luayAgICAgfAotICAgICctLS0tLS0tLScgICAgJy0tLS0tLS0nICAgICctLS0tLS0nICAgICctLS0tLS0tJwotCi0gIC0gd2hlbiBnb2luZyBmcm9tIFJFQURZIHRvIFBBVVNFRCBzdGF0ZSwgdWRwc3JjIHdpbGwgcmVxdWlyZSBhIHN0cmVhbWluZwotICAgIHRocmVhZCBmb3IgcHVzaGluZyBkYXRhIGludG8gdGhlIGRlcGF5bG9hZGVyLiBJdCB3aWxsIHBvc3QgYSBTVFJFQU1fU1RBVFVTCi0gICAgbWVzc2FnZSBpbmRpY2F0aW5nIGl0cyByZXF1aXJlbWVudCBmb3IgYSBzdHJlYW1pbmcgdGhyZWFkLgotCi0gIC0gVGhlIGFwcGxpY2F0aW9uIHdpbGwgdXN1YWxseSByZWFjdCB0byB0aGUgU1RSRUFNX1NUQVRVUyBtZXNzYWdlcyB3aXRoIGEgc3luYwotICAgIGJ1cyBoYW5kbGVyLgotCi0gIC0gVGhlIGFwcGxpY2F0aW9uIGNhbiBjb25maWd1cmUgdGhlIEdzdFRhc2sgd2l0aCBhIGN1c3RvbSBHc3RUYXNrUG9vbCB0bwotICAgIG1hbmFnZSB0aGUgc3RyZWFtaW5nIHRocmVhZCBvciBpdCBjYW4gaWdub3JlIHRoZSBtZXNzYWdlIHdoaWNoIHdpbGwgbWFrZQotICAgIHRoZSBlbGVtZW50IHVzZSBpdHMgZGVmYXVsdCBHc3RUYXNrUG9vbC4KLQotICAtIFRoZSBhcHBsaWNhdGlvbiBjYW4gcmVhY3QgdG8gdGhlIEVOVEVSL0xFQVZFIHN0cmVhbSBzdGF0dXMgbWVzc2FnZSB0bwotICAgIGNvbmZpZ3VyZSB0aGUgdGhyZWFkIHJpZ2h0IGJlZm9yZSBpdCBpcyBzdGFydGVkL3N0b3BwZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8KLSAgICBjb25maWd1cmUgdGhlIHRocmVhZCBwcmlvcml0eS4KLQotICAtIEJlZm9yZSB0aGUgR3N0VGFzayBpcyBjaGFuZ2VkIHN0YXRlIChzdGFydC9wYXVzZS9zdG9wKSBhIFNUUkVBTV9TVEFUVVMKLSAgICBtZXNzYWdlIGlzIHBvc3RlZCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBrZWVwIHRyYWNrIG9mCi0gICAgdGhlIHJ1bm5pbmcgc3RyZWFtaW5nIHRocmVhZHMuCi0KLQotTWVzc2FnZXMKLX5+fn5+fn5+Ci0KLSBUaGUgZXhpc3RpbmcgU1RSRUFNX1NUQVRVUyBtZXNzYWdlIHdpbGwgYmUgZnVydGhlciBkZWZpbmVkIGFuZCBpbXBsZW1lbnRlZCBpbgotIChzZWxlY3RlZCkgZWxlbWVudHMuIFRoZSBmb2xsb3dpbmcgZmllbGRzIHdpbGwgYmUgY29udGFpbmVkIGluIHRoZSBtZXNzYWdlOgotCi0gIC0gInR5cGUiLCBHU1RfVFlQRV9TVFJFQU1fU1RBVFVTX1RZUEUKLQotICAgICAgLSBhIHNldCBvZiB0eXBlcyB0byBjb250cm9sIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHRocmVhZDoKLSAgICAgICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURTogYSBuZXcgc3RyZWFtaW5nIHRocmVhZCBpcyBnb2luZyB0byBiZQotICAgICAgICAgIGNyZWF0ZWQuIFRoZSBhcHBsaWNhdGlvbiBoYXMgdGhlIGNoYW5jZSB0byBjb25maWd1cmUgYSBjdXN0b20gdGhyZWFkLgotICAgICAgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfRU5URVI6IHRoZSBzdHJlYW1pbmcgdGhyZWFkIGlzIGFib3V0IHRvIGVudGVyIGl0cwotICAgICAgICAgIGxvb3AgZnVuY3Rpb24gZm9yIHRoZSBmaXJzdCB0aW1lLgotICAgICAgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfTEVBVkU6IHRoZSBzdHJlYW1pbmcgdGhyZWFkIGlzIGFib3V0IHRvIGxlYXZlIGl0cwotICAgICAgICAgIGxvb3AuCi0gICAgICAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9ERVNUUk9ZOiBhIHN0cmVhbWluZyB0aHJlYWQgaXMgZGVzdHJveWVkCi0KLSAgICAgIC0gQSBzZXQgb2YgdHlwZXMgdG8gY29udHJvbCB0aGUgc3RhdGUgb2YgdGhlIHRocmVhZHM6IAotICAgICAgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RBUlQ6IGEgc3RyZWFtaW5nIHRocmVhZCBpcyBzdGFydGVkCi0gICAgICAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9QQVVTRTogYSBzdHJlYW1pbmcgdGhyZWFkIGlzIHBhdXNlZAotICAgICAgIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RPUDogYSBzdHJlYW1pbmcgdGhyZWFkIGlzIHN0b3BwZWQKLQotICAtICJvd25lciIsIEdTVF9UWVBFX0VMRU1FTlQKLSAgICAgIFRoZSBvd25lciBlbGVtZW50IG9mIHRoZSB0aHJlYWQuIFRoZSBtZXNzYWdlIHNvdXJjZSB3aWxsIGNvbnRhaW4gdGhlIHBhZAotICAgICAgKG9yIG9uZSBvZiB0aGUgcGFkcykgdGhhdCB3aWxsIHByb2R1Y2UgZGF0YSBieSB0aGlzIHRocmVhZC4gSWYgdGhpcyB0aHJlYWQKLSAgICAgIGRvZXMgbm90IHByb2R1Y2UgZGF0YSBvbiBhIHBhZCwgdGhlIG1lc3NhZ2Ugc291cmNlIHdpbGwgY29udGFpbiB0aGUgb3duZXIKLSAgICAgIGFzIHdlbGwuIFRoZSBpZGVhIGlzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBiZSBhYmxlIHRvIHNlZSBmcm9tIHRoZQotICAgICAgZWxlbWVudC9wYWQgd2hhdCBmdW5jdGlvbiB0aGlzIHRocmVhZCBoYXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlCi0gICAgICBhcHBsaWNhdGlvbiBhbmQgY29uZmlndXJlIHRoZSB0aHJlYWQgYXBwcm9wcmlhdGx5LgotCi0gIC0gIm9iamVjdCIsIEdfVFlQRSwgR3N0VGFzay9HVGhyZWFkCi0gICAgICBBIEdzdFRhc2svR1RocmVhZCBjb250cm9sbGluZyB0aGlzIHN0cmVhbWluZyB0aHJlYWQuCi0KLSAgLSAiZmxvdy1yZXR1cm4iLCBHc3RGbG93UmV0dXJuCi0gICAgICBBIHN0YXR1cyBjb2RlIGZvciB3aHkgdGhlIHRocmVhZCBzdGF0ZSBjaGFuZ2VkLiB3aGVuIHRocmVhZHMgYXJlIGNyZWF0ZWQKLSAgICAgIGFuZCBzdGFydGVkLCB0aGlzIGlzIHVzdWFsbHkgR1NUX0ZMT1dfT0sgYnV0IHdoZW4gdGhleSBhcmUgc3RvcHBpbmcgaXQKLSAgICAgIGNvbnRhaW5zIHRoZSByZWFzb24gY29kZSB3aHkgaXQgc3RvcHBlZC4KLQotICAtICJyZWFzb24iLCBHX1RZUEVfU1RSSU5HCi0gICAgICBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSByZWFzb24gd2h5IHRoZSB0aHJlYWQgc3RhcnRlZC9zdG9wcGVkL3BhdXNlZC4KLSAgICAgIENhbiBiZSBOVUxMIGlmIG5vIHJlYXNvbiBpcyBnaXZlbi4KLQotCi0KLUV2ZW50cwotfn5+fn5+Ci0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC1zdHJlYW1zLnR4dCBiL2RvY3MvZGVzaWduL3BhcnQtc3RyZWFtcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5Y2YwNzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1zdHJlYW1zLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLVN0cmVhbXMKLS0tLS0tLS0KLQotICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgb2JqZWN0cyB0aGF0IGFyZSBwYXNzZWQgZnJvbSBlbGVtZW50IHRvCi0gIGVsZW1lbnQgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQuCi0KLQotU3RyZWFtIG9iamVjdHMKLX5+fn5+fn5+fn5+fn5+Ci0KLVRoZSBmb2xsb3dpbmcgb2JqZWN0cyBhcmUgdG8gYmUgZXhwZWN0ZWQgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQ6Ci0KLSAtIGV2ZW50cwotICAgIC0gU1RSRUFNX1NUQVJUICAgICAgKFNUQVJUKQotICAgIC0gU0VHTUVOVCAgICAgICAgICAgKFNFR01FTlQpCi0gICAgLSBFT1MgICAgICAgICAgICAgKiAoRU9TKQotICAgIC0gVEFHICAgICAgICAgICAgICAgKFQpCi0gLSBidWZmZXJzICAgICAgICAgICAgKiAoQikKLQotT2JqZWN0cyBtYXJrZWQgd2l0aCAqIG5lZWQgdG8gYmUgc3luY2hyb25pc2VkIHRvIHRoZSBjbG9jayBpbiBzaW5rcwotYW5kIGxpdmUgc291cmNlcy4KLQotCi1UeXBpY2FsIHN0cmVhbQotfn5+fn5+fn5+fn5+fn4KLQotIEEgdHlwaWNhbCBzdHJlYW0gc3RhcnRzIHdpdGggYSBzdHJlYW0gc3RhcnQgZXZlbnQgdGhhdCBtYXJrcyB0aGUKLSBzdGFydCBvZiB0aGUgc3RyZWFtLCBmb2xsb3dlZCBieSBhIHNlZ21lbnQgZXZlbnQgdGhhdCBtYXJrcyB0aGUKLSBidWZmZXIgdGltZXN0YW1wIHJhbmdlLiBBZnRlciB0aGF0IGJ1ZmZlcnMgYXJlIHNlbnQgb25lIGFmdGVyIHRoZQotIG90aGVyLiBBZnRlciB0aGUgbGFzdCBidWZmZXIgYW4gRU9TIG1hcmtzIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4gTm8KLSBtb3JlIGJ1ZmZlcnMgYXJlIHRvIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgRU9TIGV2ZW50LgotCi0gICstLS0tLSstLS0tLS0tKyArLSsrLSsgICAgICstKyArLS0tKwotICB8U1RBUlR8U0VHTUVOVHwgfEJ8fEJ8IC4uLiB8QnwgfEVPU3wKLSAgKy0tLS0tKy0tLS0tLS0rICstKystKyAgICAgKy0rICstLS0rCi0KLSAgMSkgU1RSRUFNX1NUQVJUCi0gICAgIC0gbWFya3MgdGhlIHN0YXJ0IG9mIGEgc3RyZWFtOyB1bmxpa2UgdGhlIFNFR01FTlQgZXZlbnQsIHRoZXJlCi0gICAgICAgd2lsbCBiZSBubyBTVFJFQU1fU1RBUlQgZXZlbnQgYWZ0ZXIgZmx1c2hpbmcgc2Vla3MuCi0KLSAgMikgU0VHTUVOVCwgcmF0ZSwgc3RhcnQvc3RvcCwgdGltZQotICAgICAtIG1hcmtzIHZhbGlkIGJ1ZmZlciB0aW1lc3RhbXAgcmFuZ2UgKHN0YXJ0LCBzdG9wKQotICAgICAtIG1hcmtzIHN0cmVhbV90aW1lIG9mIGJ1ZmZlcnMgKHRpbWUpLiBUaGlzIGlzIHRoZSBzdHJlYW0gdGltZSBvZiBidWZmZXJzCi0gICAgICAgd2l0aCBhIHRpbWVzdGFtcCBvZiBTLnN0YXJ0LgotICAgICAtIG1hcmtzIHBsYXliYWNrIHJhdGUgKHJhdGUpLiBUaGlzIGlzIHRoZSByZXF1aXJlZCBwbGF5YmFjayByYXRlLgotICAgICAtIG1hcmtzIGFwcGxpZWQgcmF0ZSAoYXBwbGllZF9yYXRlKS4gVGhpcyBpcyB0aGUgYWxyZWFkeSBhcHBsaWVkIHBsYXliYWNrCi0gICAgICAgcmF0ZS4gKFNlZSBhbHNvIHBhcnQtdHJpY2ttb2Rlcy50eHQpCi0gICAgIC0gbWFya3MgcnVubmluZ190aW1lIG9mIGJ1ZmZlcnMuIFRoaXMgaXMgdGhlIHRpbWUgdXNlZCB0byBzeW5jaHJvbml6ZQotICAgICAgIGFnYWluc3QgdGhlIGNsb2NrLgotCi0gIDMpIE4gYnVmZmVycwotICAgICAtIGRpc3BsYXlhYmxlIGJ1ZmZlcnMgYXJlIGJldHdlZW4gc3RhcnQvc3RvcCBvZiB0aGUgU0VHTUVOVCAoUykuIEJ1ZmZlcnMKLSAgICAgICBvdXRzaWRlIHRoZSBzZWdtZW50IHJhbmdlIHNob3VsZCBiZSBkcm9wcGVkIG9yIGNsaXBwZWQuCi0KLSAgICAgLSBydW5uaW5nX3RpbWU6IAotICAgICAKLSAgICAgICAgIGlmIChTLnJhdGUgPiAwLjApCi0gICAgICAgICAgIHJ1bm5pbmdfdGltZSA9IChCLnRpbWVzdGFtcCAtIFMuc3RhcnQpIC8gQUJTIChTLnJhdGUpICsgUy5iYXNlCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIHJ1bm5pbmdfdGltZSA9IChTLnN0b3AgLSBCLnRpbWVzdGFtcCkgLyBBQlMgKFMucmF0ZSkgKyBTLmJhc2UKLQotICAgICAgICAqIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3luY2hyb25pemUgCi0JICBhZ2FpbnN0IHRoZSBjbG9jayAoU2VlIGFsc28gcGFydC1zeW5jaHJvbmlzYXRpb24udHh0KS4KLQotICAgICAtIHN0cmVhbV90aW1lOgotCi0gICAgICAgICBzdHJlYW1fdGltZSA9IChCLnRpbWVzdGFtcCAtIFMuc3RhcnQpICogQUJTIChTLmFwcGxpZWRfcmF0ZSkgKyBTLnRpbWUKLQotICAgICAgICAqIGN1cnJlbnQgcG9zaXRpb24gaW4gc3RyZWFtIGJldHdlZW4gMCBhbmQgZHVyYXRpb24uCi0KLSAgNCkgRU9TCi0gICAgIC0gbWFya3MgdGhlIGVuZCBvZiBkYXRhLCBub3RoaW5nIGlzIHRvIGJlIGV4cGVjdGVkIGFmdGVyIEVPUywgZWxlbWVudHMKLSAgICAgICBzaG91bGQgcmVmdXNlIG1vcmUgZGF0YSBhbmQgcmV0dXJuIEdTVF9GTE9XX0VPUy4gQSBGTFVTSF9TVE9QCi0gICAgICAgZXZlbnQgY2xlYXJzIHRoZSBFT1Mgc3RhdGUgb2YgYW4gZWxlbWVudC4KLQotCi1FbGVtZW50cwotfn5+fn5+fn4KLQotVGhlc2UgZXZlbnRzIGFyZSBnZW5lcmF0ZWQgdHlwaWNhbGx5IGVpdGhlciBieSB0aGUgR3N0QmFzZVNyYyBjbGFzcyBmb3IKLXNvdXJjZXMgb3BlcmF0aW5nIGluIHB1c2ggbW9kZSwgb3IgYnkgYSBwYXJzZXIvZGVtdXhlciBvcGVyYXRpbmcgaW4gcHVsbC1tb2RlCi1hbmQgcHVzaGluZyBwYXJzZWQvZGVtdXhlZCBkYXRhIGRvd25zdHJlYW0uCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQgYi9kb2NzL2Rlc2lnbi9wYXJ0LXN5bmNocm9uaXNhdGlvbi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYzlmMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9kZXNpZ24vcGFydC1zeW5jaHJvbmlzYXRpb24udHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLVN5bmNocm9uaXNhdGlvbgotLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgZG9jdW1lbnQgb3V0bGluZXMgdGhlIHRlY2huaXF1ZXMgdXNlZCBmb3IgZG9pbmcgc3luY2hyb25pc2VkIHBsYXliYWNrIG9mCi1tdWx0aXBsZSBzdHJlYW1zLgotCi1TeW5jaHJvbmlzYXRpb24gaW4gYSBHc3RQaXBlbGluZSBpcyBhY2hpZXZlZCB1c2luZyB0aGUgZm9sbG93aW5nIDMgY29tcG9uZW50czoKLQotIC0gYSBHc3RDbG9jaywgd2hpY2ggaXMgZ2xvYmFsIGZvciBhbGwgZWxlbWVudHMgaW4gYSBHc3RQaXBlbGluZS4KLSAtIFRpbWVzdGFtcHMgb24gYSBHc3RCdWZmZXIuCi0gLSB0aGUgU0VHTUVOVCBldmVudCBwcmVjZWRpbmcgdGhlIGJ1ZmZlcnMuCi0KLQotQSBHc3RDbG9jawotfn5+fn5+fn5+fgotCi1UaGlzIG9iamVjdCBwcm92aWRlcyBhIGNvdW50ZXIgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHRpbWUgaW4gbmFub3NlY29uZHMuCi1UaGlzIHZhbHVlIGlzIGNhbGxlZCB0aGUgYWJzb2x1dGVfdGltZS4KLQotRGlmZmVyZW50IHNvdXJjZXMgZXhpc3QgZm9yIHRoaXMgY291bnRlcjoKLQotIC0gdGhlIHN5c3RlbSB0aW1lICh3aXRoIGdfZ2V0X2N1cnJlbnRfdGltZSgpIGFuZCB3aXRoIG1pY3Jvc2Vjb25kIGFjY3VyYWN5KQotIC0gbW9ub3RvbmljIHRpbWUgKHdpdGggZ19nZXRfbW9ub3RvbmljX3RpbWUgKCkgd2l0aCBtaWNyb3NlY29uZCBhY2N1cmFjeSkKLSAtIGFuIGF1ZGlvIGRldmljZSAoYmFzZWQgb24gbnVtYmVyIG9mIHNhbXBsZXMgcGxheWVkKQotIC0gYSBuZXR3b3JrIHNvdXJjZSBiYXNlZCBvbiBwYWNrZXRzIHJlY2VpdmVkICsgdGltZXN0YW1wcyBpbiB0aG9zZSBwYWNrZXRzIChhCi0gICB0eXBpY2FsIGV4YW1wbGUgaXMgYW4gUlRQIHNvdXJjZSkKLSAtIC4uLgotCi1JbiBHU3RyZWFtZXIgYW55IGVsZW1lbnQgY2FuIHByb3ZpZGUgYSBHc3RDbG9jayBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUKLXBpcGVsaW5lLiBUaGUgR3N0UGlwZWxpbmUgb2JqZWN0IHdpbGwgc2VsZWN0IGEgY2xvY2sgZnJvbSBhbGwgdGhlIHByb3ZpZGVycyBhbmQKLXdpbGwgZGlzdHJpYnV0ZSBpdCB0byBhbGwgb3RoZXIgZWxlbWVudHMgKHNlZSBwYXJ0LWdzdHBpcGVsaW5lLnR4dCkuCi0KLUEgR3N0Q2xvY2sgYWx3YXlzIGNvdW50cyB0aW1lIHVwd2FyZHMgYW5kIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHN0YXJ0IGF0IDAuCi0KLVdoaWxlIGl0IGlzIHBvc3NpYmxlLCBpdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gY3JlYXRlIGEgY2xvY2sgZGVyaXZlZCBmcm9tIHRoZQotY29udGVudHMgb2YgYSBzdHJlYW0gKGZvciBleGFtcGxlLCBjcmVhdGUgYSBjbG9jayBmcm9tIHRoZSBQQ1IgaW4gYW4gbXBlZy10cwotc3RyZWFtKS4KLQotCi1SdW5uaW5nIHRpbWUKLX5+fn5+fn5+fn5+fgotCi1BZnRlciBhIHBpcGVsaW5lIHNlbGVjdGVkIGEgY2xvY2sgaXQgd2lsbCBtYWludGFpbiB0aGUgcnVubmluZ190aW1lIGJhc2VkIG9uIHRoZQotc2VsZWN0ZWQgY2xvY2suIFRoaXMgcnVubmluZ190aW1lIHJlcHJlc2VudHMgdGhlIHRvdGFsIHRpbWUgc3BlbnQgaW4gdGhlIFBMQVlJTkcKLXN0YXRlIGFuZCBpcyBjYWxjdWxhdGVkIGFzIGZvbGxvd3M6Ci0KLSAtIElmIHRoZSBwaXBlbGluZSBpcyBOVUxML1JFQURZLCB0aGUgcnVubmluZ190aW1lIGlzIHVuZGVmaW5lZC4KLSAtIEluIFBBVVNFRCwgdGhlIHJ1bm5pbmdfdGltZSByZW1haW5zIGF0IHRoZSB0aW1lIHdoZW4gaXQgd2FzIGxhc3QKLSAgIFBBVVNFRC4gV2hlbiB0aGUgc3RyZWFtIGlzIFBBVVNFRCBmb3IgdGhlIGZpcnN0IHRpbWUsIHRoZSBydW5uaW5nX3RpbWUKLSAgIGlzIDAuCi0gLSBJbiBQTEFZSU5HLCB0aGUgcnVubmluZ190aW1lIGlzIHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBhYnNvbHV0ZV90aW1lCi0gICBhbmQgdGhlIGJhc2UgdGltZS4gVGhlIGJhc2UgdGltZSBpcyBkZWZpbmVkIGFzIHRoZSBhYnNvbHV0ZV90aW1lIG1pbnVzCi0gICB0aGUgcnVubmluZ190aW1lIGF0IHRoZSB0aW1lIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHNldCB0byBQTEFZSU5HLgotIC0gYWZ0ZXIgYSBmbHVzaGluZyBzZWVrLCB0aGUgcnVubmluZ190aW1lIGlzIHNldCB0byAwIChzZWUgcGFydC1zZWVraW5nLnR4dCkuCi0gICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSByZWRpc3RyaWJ1dGluZyBhIG5ldyBiYXNlX3RpbWUgdG8gdGhlIGVsZW1lbnRzIHRoYXQKLSAgIGdvdCBmbHVzaGVkLgotCi1UaGlzIGFsZ29yaXRobSBjYXB0dXJlcyB0aGUgcnVubmluZ190aW1lIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHNldCBmcm9tIFBMQVlJTkcKLXRvIFBBVVNFRCBhbmQgcmVzdG9yZXMgdGhpcyB0aW1lIGJhc2VkIG9uIHRoZSBjdXJyZW50IGFic29sdXRlX3RpbWUgd2hlbiBnb2luZwotYmFjayB0byBQTEFZSU5HLiBUaGlzIGFsbG93cyBmb3IgYm90aCBjbG9ja3MgdGhhdCBwcm9ncmVzcyB3aGVuIGluIHRoZSBQQVVTRUQKLXN0YXRlIChzeXN0ZW1jbG9jaykgYW5kIGNsb2NrcyB0aGF0IGRvbid0IChhdWRpb2Nsb2NrKS4KLQotVGhlIGNsb2NrIGFuZCBwaXBlbGluZSBub3cgcHJvdmlkZSBhIHJ1bm5pbmdfdGltZSB0byBhbGwgZWxlbWVudHMgdGhhdCB3YW50IHRvCi1wZXJmb3JtIHN5bmNocm9uaXNhdGlvbi4gSW5kZWVkLCB0aGUgcnVubmluZyB0aW1lIGNhbiBiZSBvYnNlcnZlZCBpbiBlYWNoCi1lbGVtZW50IChkdXJpbmcgdGhlIFBMQVlJTkcgc3RhdGUpIGFzOgotICAKLSAgQy5ydW5uaW5nX3RpbWUgPSBhYnNvbHV0ZV90aW1lIC0gYmFzZV90aW1lCi0KLVdlIG5vdGUgQy5ydW5uaW5nX3RpbWUgYXMgdGhlIHJ1bm5pbmdfdGltZSBvYnRhaW5lZCBieSBsb29raW5nIGF0IHRoZSBjbG9jay4KLVRoaXMgdmFsdWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGF0IHRoZSByYXRlIG9mIHRoZSBjbG9jay4KLQotCi1UaW1lc3RhbXBzCi1+fn5+fn5+fn5+Ci0gCi1UaGUgR3N0QnVmZmVyIHRpbWVzdGFtcHMgYW5kIHRoZSBwcmVjZWRpbmcgU0VHTUVOVCBldmVudCAoU2VlCi1wYXJ0LXN0cmVhbXMudHh0KSBkZWZpbmUgYSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgYnVmZmVyIHRpbWVzdGFtcHMgdG8KLXJ1bm5pbmdfdGltZSBhcyBmb2xsb3dzOgotCi1UaGUgZm9sbG93aW5nIG5vdGF0aW9uIGlzIHVzZWQ6Ci0KLSBCOiBHc3RCdWZmZXIgCi0gIC0gQi50aW1lc3RhbXAgPSBidWZmZXIgdGltZXN0YW1wIChHU1RfQlVGRkVSX1BUUyBvciBHU1RfQlVGRkVSX0RUUykKLQotIFM6ICBTRUdNRU5UIGV2ZW50IHByZWNlZGluZyB0aGUgYnVmZmVycy4KLSAgLSBTLnN0YXJ0OiBzdGFydCBmaWVsZCBpbiB0aGUgU0VHTUVOVCBldmVudC4gVGhpcyBpcyB0aGUgbG93ZXN0IGFsbG93ZWQKLSAgICAgICAgICAgICB0aW1lc3RhbXAuCi0gIC0gUy5zdG9wOiBzdG9wIGZpZWxkIGluIHRoZSBTRUdNRU5UIGV2ZW50LiBUaGlzIGlzIHRoZSBoaWdoZXJzIGFsbG93ZWQKLSAgICAgICAgICAgIHRpbWVzdGFtcC4KLSAgLSBTLnJhdGU6IHJhdGUgZmllbGQgb2YgU0VHTUVOVCBldmVudC4gVGhpcyBpcyB0aGUgcGxheWJhY2sgcmF0ZS4KLSAgLSBTLmJhc2U6IGEgYmFzZSB0aW1lIGZvciB0aGUgdGltZS4gVGhpcyBpcyB0aGUgdG90YWwgZWxhcHNlZCBydW5uaW5nX3RpbWUgb2YgYW55Ci0gICAgICAgICAgICBwcmV2aW91cyBzZWdtZW50cy4KLSAgLSBTLm9mZnNldDogYW4gb2Zmc2V0IHRvIGFwcGx5IHRvIFMuc3RhcnQgb3IgUy5zdG9wLiBUaGlzIGlzIHRoZSBhbW91bnQgdGhhdAotICAgICAgICAgICAgICBoYXMgYWxyZWFkeSBiZWVuIGVsYXBzZWQgaW4gdGhlIHNlZ21lbnQuCi0KLVZhbGlkIGJ1ZmZlcnMgZm9yIHN5bmNocm9uaXNhdGlvbiBhcmUgdGhvc2Ugd2l0aCBCLnRpbWVzdGFtcCBiZXR3ZWVuIFMuc3RhcnQKLWFuZCBTLnN0b3AgKGFmdGVyIGFwcGx5aW5nIHRoZSBTLm9mZnNldCkuIEFsbCBvdGhlciBidWZmZXJzIG91dHNpZGUgdGhpcyByYW5nZQotc2hvdWxkIGJlIGRyb3BwZWQgb3IgY2xpcHBlZCB0byB0aGVzZSBib3VuZGFyaWVzIChzZWUgYWxzbyBwYXJ0LXNlZ21lbnRzLnR4dCkuCi0KLVRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb24gdG8gcnVubmluZ190aW1lIGV4aXN0OgotCi0gIGlmIChTLnJhdGUgPiAwLjApCi0gICAgQi5ydW5uaW5nX3RpbWUgPSAoQi50aW1lc3RhbXAgLSAoUy5zdGFydCArIFMub2Zmc2V0KSkgLyBBQlMgKFMucmF0ZSkgKyBTLmJhc2UKLSAgICA9PgotICAgIEIudGltZXN0YW1wID0gKEIucnVubmluZ190aW1lIC0gUy5iYXNlKSAqIEFCUyAoUy5yYXRlKSArIFMuc3RhcnQgKyBTLm9mZnNldAotICBlbHNlCi0gICAgQi5ydW5uaW5nX3RpbWUgPSAoKFMuc3RvcCAtIFMub2Zmc2V0KSAtIEIudGltZXN0YW1wKSAvIEFCUyAoUy5yYXRlKSArIFMuYmFzZQotICAgID0+Ci0gICAgQi50aW1lc3RhbXAgPSBTLnN0b3AgLSBTLm9mZnNldCAtICgoQi5ydW5uaW5nX3RpbWUgLSBTLmJhc2UpICogQUJTIChTLnJhdGUpKQotCi0KLVdlIHdyaXRlIEIucnVubmluZ190aW1lIGFzIHRoZSBydW5uaW5nX3RpbWUgb2J0YWluZWQgZnJvbSB0aGUgU0VHTUVOVCBldmVudAotYW5kIHRoZSBidWZmZXJzIG9mIHRoYXQgc2VnbWVudC4KLQotVGhlIGZpcnN0IGRpc3BsYXlhYmxlIGJ1ZmZlciB3aWxsIHlpZWxkIGEgdmFsdWUgb2YgMCAoc2luY2UgQi50aW1lc3RhbXAgPT0KLVMuc3RhcnQgYW5kIFMub2Zmc2V0IGFuZCBTLmJhc2UgPT0gMCkuCi0KLUZvciBTLnJhdGUgPiAxLjAsIHRoZSB0aW1lc3RhbXBzIHdpbGwgYmUgc2NhbGVkIGRvd24gdG8gaW5jcmVhc2UgdGhlIHBsYXliYWNrCi1yYXRlLiBMaWtld2lzZSwgYSByYXRlIGJldHdlZW4gMC4wIGFuZCAxLjAgd2lsbCBzbG93IGRvd24gcGxheWJhY2suCi0KLUZvciBuZWdhdGl2ZSByYXRlcywgdGltZXN0YW1wcyBhcmUgcmVjZWl2ZWQgc3RvcCBTLnN0b3AgdG8gUy5zdGFydCBzbyB0aGF0IHRoZQotZmlyc3QgYnVmZmVyIHJlY2VpdmVkIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byBCLnJ1bm5pbmdfdGltZSBvZiAwCi0oQi50aW1lc3RhbXAgPT0gUy5zdG9wIGFuZCBTLmJhc2UgPT0gMCkuCi0KLVRoaXMgbWFrZXMgaXQgc28gdGhhdCBCLnJ1bm5pbmdfdGltZSBpcyBhbHdheXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCi1zdGFydGluZyBmcm9tIDAgd2l0aCBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSByYXRlcy4KLQotCi1TeW5jaHJvbmlzYXRpb24KLX5+fn5+fn5+fn5+fn5+fgotCi1BcyB3ZSBoYXZlIHNlZW4sIHdlIGNhbiBnZXQgYSBydW5uaW5nX3RpbWU6Ci0KLSAtIHVzaW5nIHRoZSBjbG9jayBhbmQgdGhlIGVsZW1lbnQncyBiYXNlX3RpbWUgd2l0aDoKLQotICAgIEMucnVubmluZ190aW1lID0gYWJzb2x1dGVfdGltZSAtIGJhc2VfdGltZQotCi0gLSB1c2luZyB0aGUgYnVmZmVyIHRpbWVzdGFtcCBhbmQgdGhlIHByZWNlZGluZyBTRUdNRU5UIGV2ZW50IGFzIChhc3N1bWluZwotICAgcG9zaXRpdmUgcGxheWJhY2sgcmF0ZSk6Ci0KLSAgICBCLnJ1bm5pbmdfdGltZSA9IChCLnRpbWVzdGFtcCAtIChTLnN0YXJ0ICsgUy5vZmZzZXQpKSAvIEFCUyAoUy5yYXRlKSArIFMuYmFzZQotCi1XZSBwcmVmaXggQy4gYW5kIEIuIGJlZm9yZSB0aGUgdHdvIHJ1bm5pbmcgdGltZXMgdG8gbm90ZSBob3cgdGhleSB3ZXJlCi1jYWxjdWxhdGVkLgotCi1UaGUgdGFzayBvZiBzeW5jaHJvbml6ZWQgcGxheWJhY2sgaXMgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcGxheSBhIGJ1ZmZlciB3aXRoCi1CLnJ1bm5pbmdfdGltZSBhdCB0aGUgbW9tZW50IHdoZW4gdGhlIGNsb2NrIHJlYWNoZXMgdGhlIHNhbWUgQy5ydW5uaW5nX3RpbWUuCi0KLVRodXMgdGhlIGZvbGxvd2luZyBtdXN0IGhvbGQ6Ci0KLSAgIEIucnVubmluZ190aW1lID0gQy5ydW5uaW5nX3RpbWUKLQotZXhwYW5pbmc6Ci0KLSAgIEIucnVubmluZ190aW1lID0gYWJzb2x1dGVfdGltZSAtIGJhc2VfdGltZQotCi1vcjoKLQotICAgYWJzb2x1dGVfdGltZSA9IEIucnVubmluZ190aW1lICsgYmFzZV90aW1lCi0KLVRoZSBhYnNvbHV0ZV90aW1lIHdoZW4gYSBidWZmZXIgd2l0aCBCLnJ1bm5pbmdfdGltZSBzaG91bGQgYmUgcGxheWVkIGlzIG5vdGVkCi13aXRoIEIuc3luY190aW1lLiBUaHVzOgotCi0gIEIuc3luY190aW1lID0gQi5ydW5uaW5nX3RpbWUgKyBiYXNlX3RpbWUKLQotT25lIHRoZW4gd2FpdHMgZm9yIHRoZSBjbG9jayB0byByZWFjaCBCLnN5bmNfdGltZSBiZWZvcmUgcmVuZGVyaW5nIHRoZSBidWZmZXIgaW4KLXRoZSBzaW5rIChTZWUgYWxzbyBwYXJ0LWNsb2Nrcy50eHQpLgotCi1Gb3IgbXVsdGlwbGUgc3RyZWFtcyB0aGlzIG1lYW5zIHRoYXQgYnVmZmVycyB3aXRoIHRoZSBzYW1lIHJ1bm5pbmdfdGltZSBhcmUgdG8KLWJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLiAKLQotQSBkZW11eGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIFNFR01FTlQgaXQgZW1pdHMgb24gaXRzIG91dHB1dCBwYWRzIHlpZWxkCi10aGUgc2FtZSBydW5uaW5nX3RpbWUgZm9yIGJ1ZmZlcnMgdGhhdCBzaG91bGQgYmUgcGxheWVkIHN5bmNocm9uaXplZC4gVGhpcwotdXN1YWxseSBtZWFucyBzZW5kaW5nIHRoZSBzYW1lIFNFR01FTlQgb24gYWxsIHBhZHMgYW5kIG1ha2luZyBzdXJlIHRoYXQgdGhlCi1zeW5jaHJvbml6ZWQgYnVmZmVycyBoYXZlIHRoZSBzYW1lIHRpbWVzdGFtcHMuCi0KLQotU3RyZWFtIHRpbWUKLX5+fn5+fn5+fn5+Ci0KLVRoZSBzdHJlYW0gdGltZSBpcyBhbHNvIGtub3duIGFzIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtIGFuZCBpcyBhIHZhbHVlCi1iZXR3ZWVuIDAgYW5kIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgbWVkaWEgZmlsZS4KLQotSXQgaXMgdGhlIHN0cmVhbSB0aW1lIHRoYXQgaXMgdXNlZCBmb3I6Ci0KLSAgLSByZXBvcnQgdGhlIFBPU0lUSU9OIHF1ZXJ5IGluIHRoZSBwaXBlbGluZQotICAtIHRoZSBwb3NpdGlvbiB1c2VkIGluIHNlZWsgZXZlbnRzL3F1ZXJpZXMKLSAgLSB0aGUgcG9zaXRpb24gdXNlZCB0byBzeW5jaHJvbml6ZSBjb250cm9sbGVyIHZhbHVlcwotCi1BZGRpdGlvbmFsIGZpZWxkcyBpbiB0aGUgU0VHTUVOVCBhcmUgdXNlZDoKLQotICAtIFMudGltZTogdGltZSBmaWVsZCBpbiB0aGUgU0VHTUVOVCBldmVudC4gVGhpcyB0aGUgc3RyZWFtLXRpbWUgb2YgUy5zdGFydAotICAtIFMuYXBwbGllZF9yYXRlOiBUaGUgcmF0ZSBhbHJlYWR5IGFwcGxpZWQgdG8gdGhlIHNlZ21lbnQuCi0KLVN0cmVhbSB0aW1lIGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGJ1ZmZlciB0aW1lcyBhbmQgdGhlIHByZWNlZGluZyBTRUdNRU5UCi1ldmVudCBhcyBmb2xsb3dzOgotCi0gICAgc3RyZWFtX3RpbWUgPSAoQi50aW1lc3RhbXAgLSBTLnN0YXJ0KSAqIEFCUyAoUy5hcHBsaWVkX3JhdGUpICsgUy50aW1lCi0gICAgPT4gQi50aW1lc3RhbXAgPSAoc3RyZWFtX3RpbWUgLSBTLnRpbWUpIC8gQUJTKFMuYXBwbGllZF9yYXRlKSArIFMuc3RhcnQKLQotRm9yIG5lZ2F0aXZlIHJhdGVzLCBCLnRpbWVzdGFtcCB3aWxsIGdvIGJhY2t3YXJkcyBmcm9tIFMuc3RvcCB0byBTLnN0YXJ0LAotbWFraW5nIHRoZSBzdHJlYW0gdGltZSBnbyBiYWNrd2FyZHM6Ci0KLSAgICBzdHJlYW1fdGltZSA9IChTLnN0b3AgLSBCLnRpbWVzdGFtcCkgKiBBQlMoUy5hcHBsaWVkX3JhdGUpICsgUy50aW1lCi0gICAgPT4gQi50aW1lc3RhbXAgPSBTLnN0b3AgLSAoc3RyZWFtX3RpbWUgLSBTLnRpbWUpIC8gQUJTKFMuYXBwbGllZF9yYXRlKQotCi1JbiB0aGUgUExBWUlORyBzdGF0ZSwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgdGhlIHBpcGVsaW5lIGNsb2NrIHRvIGRlcml2ZQotdGhlIGN1cnJlbnQgc3RyZWFtX3RpbWUuCi0KLUdpdmUgdGhlIHR3byBmb3JtdWxhcyBhYm92ZSB0byBtYXRjaCB0aGUgY2xvY2sgdGltZXMgd2l0aCBidWZmZXIgdGltZXN0YW1wcwotYWxsb3dzIHVzIHRvIHJld3JpdGUgdGhlIGFib3ZlIGZvcm11bGEgZm9yIHN0cmVhbV90aW1lIChhbmQgZm9yIHBvc2l0aXZlIHJhdGVzKS4KLQotICAgIEMucnVubmluZ190aW1lID0gYWJzb2x1dGVfdGltZSAtIGJhc2VfdGltZQotICAgIEIucnVubmluZ190aW1lID0gKEIudGltZXN0YW1wIC0gKFMuc3RhcnQgKyBTLm9mZnNldCkpIC8gQUJTIChTLnJhdGUpICsgUy5iYXNlCi0KLSAgPT4KLSAgICAoQi50aW1lc3RhbXAgLSAoUy5zdGFydCArIFMub2Zmc2V0KSkgLyBBQlMgKFMucmF0ZSkgKyBTLmJhc2UgPSBhYnNvbHV0ZV90aW1lIC0gYmFzZV90aW1lOwotCi0gID0+Ci0gICAgKEIudGltZXN0YW1wIC0gKFMuc3RhcnQgKyBTLm9mZnNldCkpIC8gQUJTIChTLnJhdGUpID0gYWJzb2x1dGVfdGltZSAtIGJhc2VfdGltZSAtIFMuYmFzZTsKLQotICA9PgotICAgIChCLnRpbWVzdGFtcCAtIChTLnN0YXJ0ICsgUy5vZmZzZXQpKSA9IChhYnNvbHV0ZV90aW1lIC0gYmFzZV90aW1lIC0gUy5iYXNlKSAqIEFCUyAoUy5yYXRlKQotCi0gID0+Ci0gICAgKEIudGltZXN0YW1wIC0gUy5zdGFydCkgPSBTLm9mZnNldCArIChhYnNvbHV0ZV90aW1lIC0gYmFzZV90aW1lIC0gUy5iYXNlKSAqIEFCUyAoUy5yYXRlKQotCi0gIGZpbGxpbmcgKEIudGltZXN0YW1wIC0gUy5zdGFydCkgaW4gdGhlIGFib3ZlIGZvcm11bGUgZm9yIHN0cmVhbSB0aW1lCi0KLSAgPT4KLSAgICBzdHJlYW1fdGltZSA9IChTLm9mZnNldCArIChhYnNvbHV0ZV90aW1lIC0gYmFzZV90aW1lIC0gUy5iYXNlKSAqIEFCUyAoUy5yYXRlKSkgKiBBQlMgKFMuYXBwbGllZF9yYXRlKSArIFMudGltZQotCi1UaGlzIGxhc3QgZm9ybXVsYSBpcyB0eXBpY2FsbHkgdXNlZCBpbiBzaW5rcyB0byByZXBvcnQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4KLWFuIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgd2F5LgotCi1Ob3RlIHRoYXQgdGhlIHN0cmVhbSB0aW1lIGlzIG5ldmVyIHVzZWQgZm9yIHN5bmNocm9uaXNhdGlvbiBhZ2FpbnN0IHRoZSBjbG9jay4KLQpkaWZmIC0tZ2l0IGEvZG9jcy9kZXNpZ24vcGFydC10b2MudHh0IGIvZG9jcy9kZXNpZ24vcGFydC10b2MudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjE0ZjVkLi4wMDAwMDAwCi0tLSBhL2RvY3MvZGVzaWduL3BhcnQtdG9jLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi1JbXBsZW1lbnRpbmcgR3N0VG9jIHN1cHBvcnQgaW4gR1N0cmVhbWVyIGVsZW1lbnRzCi0KLTEuIEdlbmVyYWwgaW5mbyBhYm91dCBHc3RUb2Mgc3RydWN0dXJlCi0KLUdzdFRvYyBpbnRyb2R1Y2VzIGEgZ2VuZXJhbCB3YXkgdG8gaGFuZGxlIGNoYXB0ZXJzIHdpdGhpbiBtdWx0aW1lZGlhIGZvcm1hdHMuCi1Hc3RUb2MgY2FuIGJlIHJlcHJlc2VudGVkIGFzIHRyZWUgc3RydWN0dXJlIHdpdGggYXJiaXRyYXJ5IGhpZXJhcmNoeS4gVHJlZSBpdGVtCi1jYW4gYmUgZWl0aGVyIG9mIHR3byB0eXBlczogc2VxdWVuY2Ugb3IgYWx0ZXJuYXRpdmUuIFNlcXVlbmNlIHR5cGVzIGFjdHMgbGlrZSBhCi1wYXJ0IG9mIHRoZSBtZWRpYSBkYXRhLCBmb3IgZXhhbXBsZSBhdWRpbyB0cmFjayBpbiBDVUUgc2hlZXQsIG9yIHBhcnQgb2YgdGhlCi1tb3ZpZS4gQWx0ZXJuYXRpdmUgdHlwZXMgYWN0cyBsaWtlIHNvbWUga2luZCBvZiBzZWxlY3Rpb24gdG8gcHJvY2VzcyBhIGRpZmZlcmVudAotdmVyc2lvbiBvZiB0aGUgbWVkaWEgY29udGVudCwgZm9yIGV4YW1wbGUgRFZEIGFuZ2xlcy4KLUdzdFRvYyBoYXMgb25lIGNvbnN0cmFpbnQgb24gdGhlIHRyZWUgc3RydWN0dXJlOiBpdCBkb2VzIG5vdCBhbGxvdyBkaWZmZXJlbnQKLWVudHJ5IHR5cGVzIG9uIHRoZSBzYW1lIGxldmVsIG9mIHRoZSBoaWVyYXJjaHksIGkuZS4geW91IHNob3VsZG4ndAotaGF2ZSBlZGl0aW9ucyBhbmQgY2hhcHRlcnMgbWl4ZWQgdG9nZXRoZXIuIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiByaWdodCBUT0M6Ci0KLSAgLS0tLS0tLSAgVE9DICAtLS0tLS0tCi0gICAgICAgICAgIC8gIFwKLSAgIGVkaXRpb24xICAgIGVkaXRpb24yCi0gICB8ICAgICAgICAgICB8Ci0gICAtY2hhcHRlcjEgICAtY2hhcHRlcjMKLSAgIC1jaGFwdGVyMiAgICAgICAKLQotSGVyZSBhcmUgdHdvIGVkaXRpb25zIChhbHRlcm5hdGl2ZXMpLCB0aGUgZmlyc3QgY29udGFpbnMgdHdvIGNoYXB0ZXJzIChzZXF1ZW5jZQotdHlwZSksIGFuZCB0aGUgc2Vjb25kIGhhcyBvbmx5IG9uZSBjaGFwdGVyLiBBbmQgaGVyZSBpcyBhbiBleGFtcGxlIG9mIGludmFsaWQKLVRPQzoKLQotICAtLS0tLS0tICBUT0MgIC0tLS0tLS0KLSAgICAgICAgICAgLyAgXAotICAgZWRpdGlvbjEgICAgY2hhcHRlcjEKLSAgIHwgICAgICAgICAgICAgICAgIAotICAgLWNoYXB0ZXIxCi0gICAtY2hhcHRlcjIgICAgCi0gCi1IZXJlIHlvdSBoYXZlIGVkaXRpb24xIGFuZCBjaGFwdGVyMSBtaXhlZCBvbiB0aGUgc2FtZSBsZXZlbCBvZiBoaWVyYXJjaHksCi1hbmQgc3VjaCBUT0Mgd2lsbCBiZSBjb25zaWRlcmVkIGJyb2tlbi4KLQotR3N0VG9jIGhhcyAnZW50cmllcycgZmllbGQgb2YgR0xpc3QgdHlwZSB3aGljaCBjb25zaXN0cyBvZiBjaGlsZHJlbiBpdGVtcy4KLUVhY2ggaXRlbSBpcyBvZiB0eXBlIEdzdFRvY0VudHJ5LiBBbHNvIEdzdFRvYyBoYXMgbGlzdCBvZiB0YWdzIGFuZAotR3N0U3RydWN0dXJlIGNhbGxlZCAnaW5mbycuIFBsZWFzZSwgdXNlIEdzdFRvYy5pbmZvIGFuZCBHc3RUb2NFbnRyeS5pbmZvCi1maWVsZHMgdGhpcyB3YXk6IGNyZWF0ZSBhIEdzdFN0cnVjdHVyZSwgcHV0IGFsbCBpbmZvIHJlbGF0ZWQgdG8geW91ciBlbGVtZW50Ci10aGVyZSBhbmQgcHV0IHRoaXMgc3RydWN0dXJlIGludG8gdGhlICdpbmZvJyBmaWVsZCB1bmRlciB0aGUgbmFtZSBvZiB5b3VyCi1lbGVtZW50LiBTb21lIGZpZWxkcyBpbiB0aGUgJ2luZm8nIHN0cnVjdHVyZSBjYW4gYmUgdXNlZCBmb3IgaW50ZXJuYWwKLXB1cnBvc2VzLCBzbyB5b3Ugc2hvdWxkIHVzZSBpdCBpbiB0aGUgd2F5IGRlc2NyaWJlZCBhYm92ZSB0byBub3QgdG8KLW92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0ZW50IGZpZWxkcy4KLQotTGV0J3MgbG9vayBhdCBHc3RUb2NFbnRyeSBhIGJpdCBjbG9zZXIuIE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgZmllbGRzCi1pcyAndWlkJywgd2hpY2ggbXVzdCBiZSB1bmlxdWUgZm9yIGVhY2ggaXRlbSB3aXRoaW4gdGhlIFRPQy4gVGhpcyBpcyB1c2VkCi10byBpZGVudGlmeSBlYWNoIGl0ZW0gaW5zaWRlIFRPQywgZXNwZWNpYWxseSB3aGVuIGVsZW1lbnQgcmVjZWl2ZXMgVE9DCi1zZWxlY3QgZXZlbnQgd2l0aCBVSUQgdG8gc2VlayBvbi4gRmllbGQgJ3N1YmVudHJpZXMnIG9mIHR5cGUgR0xpc3QgY29udGFpbnMKLWNoaWxkcmVuIGl0ZW1zIG9mIHR5cGUgR3N0VG9jRW50cnkuIFRodXMgeW91IGNhbiBhY2hpZXZlIGFyYml0cmFyeSBoaWVyYXJjaHkKLWxldmVsLiBGaWVsZCAndHlwZScgY2FuIGJlIGVpdGhlciBHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiBvcgotR1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT04gd2hpY2ggY29ycmVzcG9uZHMgdG8gY2hhcHRlciBvciBlZGl0aW9uIHR5cGUgb2YKLWl0ZW0gcmVzcGVjdGl2ZWx5LiBGaWVsZCAndGFncycgaXMgYSBsaXN0IG9mIHRhZ3MgcmVsYXRlZCB0byB0aGUgaXRlbS4gQW5kIGZpZWxkCi0naW5mbycgaXMgc2ltaWxhciB0byBHc3RUb2MuaW5mbyBkZXNjcmliZWQgYWJvdmUuCi0KLVNvLCBhIGxpdHRsZSBtb3JlIGFib3V0IG1hbmFnaW5nIEdzdFRvYy4gVXNlIGdzdF90b2NfbmV3KCkgYW5kIGdzdF90b2NfdW5yZWYoKQotdG8gY3JlYXRlL2ZyZWUgaXQuIEdzdFRvY0VudHJ5IGNhbiBiZSBjcmVhdGVkIHVzaW5nIGdzdF90b2NfZW50cnlfbmV3KCkuCi1XaGlsZSBidWlsZGluZyBHc3RUb2MgeW91IGNhbiBzZXQgc3RhcnQgYW5kIHN0b3AgdGltZXN0YW1wcyBmb3IgZWFjaCBpdGVtIHVzaW5nCi1nc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wKCkgYW5kIGxvb3BfdHlwZSBhbmQgcmVwZWF0X2NvdW50IHVzaW5nCi1nc3RfdG9jX2VudHJ5X3NldF9sb29wKCkuCi1UaGUgYmVzdCB3YXkgdG8gcHJvY2VzcyBhbHJlYWR5IGNyZWF0ZWQgR3N0VG9jIGlzIHRvIHJlY3Vyc2l2ZWx5IGdvIHRocm91Z2gKLXRoZSAnZW50cmllcycgYW5kICdzdWJlbnRyaWVzJyBmaWVsZHMuCi0KLUFwcGxpY2F0aW9ucyBhbmQgcGx1Z2lucyBzaG91bGQgbm90IHJlbHkgb24gVE9DcyBoYXZpbmcgYSBjZXJ0YWluIGtpbmQgb2YKLXN0cnVjdHVyZSwgYnV0IHNob3VsZCBhbGxvdyBmb3IgZGlmZmVyZW50IGFsdGVybmF0aXZlcy4gRm9yIGV4YW1wbGUsIGEKLXNpbXBsZSBDVUUgc2hlZXQgZW1iZWRkZWQgaW4gYSBmaWxlIG1heSBiZSBwcmVzZW50ZWQgYXMgYSBmbGF0IGxpc3Qgb2YKLXRyYWNrIGVudHJpZXMsIG9yIGNvdWxkIGhhdmUgYSB0b3AtbGV2ZWwgZWRpdGlvbiBub2RlIChvciBzb21lIG90aGVyCi1hbHRlcm5hdGl2ZSB0eXBlIGVudHJ5KSB3aXRoIHRyYWNrIGVudHJpZXMgdW5kZXJuZWF0aCB0aGF0IG5vZGU7IG9yIGV2ZW4KLW11bHRpcGxlIHRvcC1sZXZlbCBlZGl0aW9uIG5vZGVzIChvciBzb21lIG90aGVyIGFsdGVybmF0aXZlIHR5cGUgZW50cmllcykKLWVhY2ggd2l0aCB0cmFjayBlbnRyaWVzIHVuZGVybmVhdGgsIGluIGNhc2UgdGhlIHNvdXJjZSBmaWxlIGhhcyBleHRyYWN0ZWQKLWEgdHJhY2sgbGlzdGluZyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzKS4KLQotCi0yLiBUT0Mgc2NvcGU6IGdsb2JhbCBhbmQgY3VycmVudAotCi1UaGVyZSBhcmUgdHdvIG1haW4gY29uc3VtZXJzIGZvciBUT0MgaW5mb3JtYXRpb246IGFwcGxpY2F0aW9ucyBhbmQgZWxlbWVudHMKLWluIHRoZSBwaXBlbGluZSB0aGF0IGFyZSBUT0Mgd3JpdGVycyAoc3VjaCBhcyBlLmcuIG1hdHJvc2thbXV4KS4KLQotQXBwbGljYXRpb25zIHR5cGljYWxseSB3YW50IHRvIGtub3cgdGhlIGVudGlyZSB0YWJsZSBvZiBjb250ZW50cyAoVE9DKSB3aXRoCi1hbGwgZW50cmllcyB0aGF0IGNhbiBwb3NzaWJseSBiZSBzZWxlY3RlZC4KLQotVE9DIHdyaXRlcnMgaW4gdGhlIHBpcGVsaW5lLCBob3dldmVyLCB3b3VsZCBub3Qgd2FudCB0byB3cml0ZSBhIFRPQyBmb3IgYWxsCi1wb3NzaWJsZS9hdmFpbGFibGUgc3RyZWFtcywgYnV0IG9ubHkgZm9yIHRoZSBjdXJyZW50IHN0cmVhbS4KLQotV2hlbiB0cmFuc2NvZGluZyBhIHRpdGxlIGZyb20gYSBEVkQsIGZvciBleGFtcGxlLCB0aGUgYXBwbGljYXRpb24gd291bGQgc3RpbGwKLXdhbnQgdG8ga25vdyB0aGUgZW50aXJlIFRPQywgd2l0aCBhbGwgdGl0bGVzLCB0aGUgY2hhcHRlcnMgZm9yIGVhY2ggdGl0bGUsCi1hbmQgdGhlIGF2YWlsYWJsZSBhbmdsZXMuIFdoZW4gdHJhbnNjb2RpbmcgdG8gYSBmaWxlLCB3ZSBvbmx5IHdhbnQgdGhlIFRPQwotaW5mb3JtYXRpb24gdGhhdCBpcyByZWxldmFudCB0byB0aGUgdHJhbnNjb2RlZCBzdHJlYW0gdG8gYmUgd3JpdHRlbiBpbnRvCi10aGUgZmlsZSBzdHJ1Y3R1cmUsIGUuZy4gdGhlIGNoYXB0ZXJzIG9mIHRoZSB0aXRsZSBiZWluZyB0cmFuc2NvZGVkIChvcgotcG9zc2libHkgb25seSBjaGFwdGVycyA1LTcgaWYgb25seSB0aG9zZSBoYXZlIGJlZW4gc2VsZWN0ZWQgZm9yIHBsYXliYWNrLwotdHJhbnNjb2RpbmcpLgotCi1UaGlzIGlzIHdoeSB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdHdvIGRpZmZlcmVudCBUT0NzIGZvciB0aG9zZSB0d28gdHlwZXMKLW9mIGNvbnN1bWVycy4KLQotRWxlbWVudHMgdGhhdCBleHRyYWN0IFRPQyBpbmZvcm1hdGlvbiBzaG91bGQgc2VuZCBUT0MgZXZlbnRzIGRvd25zdHJlYW0uCi0KLUxpa2Ugd2l0aCB0YWdzLCBzaW5rcyB3aWxsIHBvc3QgYSBUT0MgbWVzc2FnZSBvbiB0aGUgYnVzIGZvciB0aGUgYXBwbGljYXRpb24KLXdpdGggdGhlIGdsb2JhbCBUT0MsIG9uY2UgYSBnbG9iYWwgVE9DIGV2ZW50IHJlYWNoZXMgdGhlIHNpbmsuCi0KLQotMy4gV29ya2luZyB3aXRoIEdzdE1lc3NhZ2UKLQotSWYgYSB0YWJsZSBvZiBjb250ZW50cyBpcyBhdmFpbGFibGUsIGFwcGxpY2F0aW9ucyB3aWxsIHJlY2VpdmUgYSBUT0MgbWVzc2FnZQotb24gdGhlIHBpcGVsaW5lJ3MgR3N0QnVzLgotCi1BIFRPQyBtZXNzYWdlIHdpbGwgYmUgcG9zdGVkIG9uIHRoZSBidXMgYnkgc2lua3Mgd2hlbiB0aGUgcmVjZWl2ZSBhIFRPQyBldmVudAotY29udGFpbmluZyBhIFRPQyB3aXRoIGdsb2JhbCBzY29wZS4gRWxlbWVudHMgZXh0cmFjdGluZyBUT0NzIHNob3VsZCBub3QgcG9zdAotYSBUT0MgbWVzc2FnZSB0aGVtc2VsdmVzLCBidXQgc2VuZCBhIFRPQyBldmVudCBkb3duc3RyZWFtLgotCi1UaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlcmUgbWF5IGJlIGNhc2NhZGVzIG9mIFRPQ3MgKGUuZy4gYSB6aXAgYXJjaGl2ZQotY29udGFpbmluZyBtdWx0aXBsZSBtYXRyb3NrYSBmaWxlcywgZWFjaCB3aXRoIGEgVE9DKS4KLQotR3N0TWVzc2FnZSB3aXRoIEdzdFRvYyBjYW4gYmUgY3JlYXRlZCB1c2luZyBnc3RfbWVzc2FnZV9uZXdfdG9jKCkgYW5kIHBhcnNlZAotd2l0aCBnc3RfbWVzc2FnZV9wYXJzZV90b2MoKS4gVGhlICd1cGRhdGVkJyBwYXJhbWV0ZXIgaW4gdGhlc2UgbWV0aG9kcyBpbmRpY2F0ZXMKLXdoZXRoZXIgdGhlIFRPQyB3YXMganVzdCBkaXNjb3ZlcmVkIChzZXQgdG8gZmFsc2UpIG9yIFRPQyB3YXMgYWxyZWFkeSBmb3VuZCBhbmQKLWhhdmUgYmVlbiB1cGRhdGVkIChzZXQgdG8gdHJ1ZSkuIFRoaXMgbWVzc2FnZSB3aWxsIHR5cGljYWxseSBiZSBwb3N0ZWQgYnkgc2lua3MKLXRvIHBpcGVsaW5lIGluIGNhc2UgeW91IGhhdmUgZGlzY292ZXJlZCBUT0MgZGF0YSB3aXRoaW4geW91ciBlbGVtZW50LgotCi0KLTQuIFdvcmtpbmcgd2l0aCBHc3RFdmVudAotCi1UaGVyZSBhcmUgdHdvIHR5cGVzIG9mIFRPQy1yZWxhdGVkIGV2ZW50czoKLQotIC0gZG93bnN0cmVhbSBUT0MgZXZlbnRzIHRoYXQgY29udGFpbiBUT0MgaW5mb3JtYXRpb24gYW5kCi0gICB0cmF2ZWwgZG93bnN0cmVhbQotCi0gLSB0b2Mtc2VsZWN0IGV2ZW50cyB0aGF0IHRyYXZlbCB1cHN0cmVhbSBhbmQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0Ci0gICBhIGNlcnRhaW4gVE9DIGVudHJ5IGZvciBwbGF5YmFjayAoc2ltaWxhciB0byBzZWVrIGV2ZW50cykKLQotR3N0VG9jIHN1cHBvcnRzIHNlbGVjdCBldmVudCB0aHJvdWdoIEdzdEV2ZW50IGluZnJhc3RydWN0dXJlLiBUaGUgaWRlYSBpcyB0aGUKLWZvbGxvd2luZzogd2hlbiB5b3UgcmVjZWl2ZSBUT0Mgc2VsZWN0IGV2ZW50LCBwYXJzZSBpdCB3aXRoCi1nc3RfZXZlbnRfcGFyc2VfdG9jX3NlbGVjdCgpIGFuZCBzZWVrIHN0cmVhbSAoaWYgaXQgaXMgbm90IHN0cmVhbWFibGUpIGZvcgotc3BlY2lmaWVkIFRPQyBVSUQgKHlvdSBjYW4gdXNlIGdzdF90b2NfZmluZF9lbnRyeSgpIHRvIGZpbmQgZW50cnkgaW4gVE9DIGJ5IFVJRCkuCi1UbyBjcmVhdGUgVE9DIHNlbGVjdCBldmVudCB1c2UgZ3N0X2V2ZW50X25ld190b2Nfc2VsZWN0KCkuIFRoZSBjb21tb24gYWN0aW9uIG9uCi1zdWNoIGV2ZW50IGlzIHRvIHNlZWsgdG8gc3BlY2lmaWVkIFVJRCB3aXRoaW4geW91ciBlbGVtZW50LiAKLQotCi01LiBJbXBsZW1lbnRhdGlvbiBjb3ZlcmFnZSwgU3BlY2lmaWNhdGlvbnMsIC4uLgotCi1CZWxvdyBpcyBhIGxpc3Qgb2YgY29udGFpbmVyIGZvcm1hdHMsIGxpbmtzIHRvIGRvY3VtZW50YXRpb24gYW5kIGEgc3VtbWFyeSBvZgotdG9jIHJlbGF0ZWQgZmVhdHVyZXMuIEVhY2ggc2VjdGlvbiB0aXRsZSBhbHNvIGluZGljYXRlcyB3aGV0aGVyIHJlYWRpbmcvd3JpdGluZwotYSB0b2MgaXMgaW1wbGVtZW50ZWQuIEJlbG93IGhvbGxvdyBidWxsZXQgcG9pbnQgJ28nIGluZGljYXRlIG5vIHN1cHBvcnQgYW5kCi1maWxsZWQgYnVsbGV0cyAnKicgaW5kaWNhdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgaGFuZGxlZC4KLQotCi1BSUZDOiAtLy0KLWh0dHA6Ly93d3ctbW1zcC5lY2UubWNnaWxsLmNhL0RvY3VtZW50cy9BdWRpb0Zvcm1hdHMvQUlGRi9Eb2NzL0FJRkYtMS4zLnBkZgotbyAnTUFSSycKLW8gJ0lOU1QnCi0KLVRoZSAnTUFSSycgY2h1bmsgZGVmaW5lcyBhIGxpc3Qgb2YgKGN1ZS1pZCwgcG9zaXRpb25faW5fc2FtcGxlcywgbGFiZWwpLgotCi1UaGUgJ0lOU1QnIGNodW5rIGNvbnRhaW5zIGEgc3VzdGFpbkxvb3AgYW5kIHJlbGVhc2VMb29wLCBlYWNoIGNvbnNpc3Rpbmcgb2YgCi0obG9vcC10eXBlLCBjdWUtYmVnaW4sIGN1ZS1lbmQpCi0KLQotRkxBQzogcmVhZC93cml0ZQotaHR0cDovL3hpcGgub3JnL2ZsYWMvZm9ybWF0Lmh0bWwjbWV0YWRhdGFfYmxvY2tfY3Vlc2hlZXQKLSogTUVUQURBVEFfQkxPQ0tfQ1VFU0hFRVQKLSAgKiBDVUVTSEVFVF9UUkFDSwotICAgIG8gQ1VFU0hFRVRfVFJBQ0tfSU5ERVgKLSAgICAKLUJvdGggQ1VFU0hFRVRfVFJBQ0sgYW5kIENVRVNIRUVUX1RSQUNLX0lOREVYIGhhdmUgYSAocmVsYXRpdmUpIG9mZnNldCBpbgotc2FtcGxlcy4gQ1VFU0hFRVRfVFJBQ0sgaGFzIElTUkMgbWV0YWRhdGEuCi0KLQotTUtWOiByZWFkL3dyaXRlCi1odHRwOi8vbWF0cm9za2Eub3JnL3RlY2huaWNhbC9zcGVjcy9jaGFwdGVycy9pbmRleC5odG1sCi0qIENoYXB0ZXJzIGFuZCBFZGl0aW9ucyBlYWNoIGhhdmluZyBhIHVpZAotKiBDaGFwdGVyIGhhdmUgc3RhcnQvZW5kIHRpbWUgYW5kIG1ldGFkYXRhOgotICBDaGFwU3RyaW5nLCBDaGFwTGFuZ3VhZ2UsIENoYXBDb3VudHJ5Ci0KLSAgCi1NUDQ6Ci0qIGVsc3QKLQotVGhlICdlbHN0JyBhdG9tIGNvbnRhaW5zIGEgbGlzdCBvZiBlZGl0cy4gRWFjaCBlZGl0IGNvbnNpc3RzIG9mIChsZW5ndGgsIHN0YXJ0LAotcGxheS1iYWNrIHNwZWVkKS4KLQotCi1PR0c6IC0vLQotaHR0cHM6Ly93aWtpLnhpcGgub3JnL0NoYXB0ZXJfRXh0ZW5zaW9uCi1vIFZvcmJpc0NvbW1lbnQgZmllbGRzIGNhbGxlZCBDSEFQVEVSeHh4IGFuZCBDSEFQVEVSeHh4TkFNRSB3aXRoIHh4eCBiZWluZyBhCi1udW1iZXIgYmV0d2VlbiAwMDAgYW5kIDk5OS4KLQotCi1XQVY6IHJlYWQvd3JpdGUKLWh0dHA6Ly93d3cuc29uaWNzcG90LmNvbS9ndWlkZS93YXZlZmlsZXMuaHRtbAotKiAnY3VlICcKLW8gJ3Bsc3QnCi0qICdhZHRsJwotICAqICdsYWJsJwotICAqICdub3RlJwotICBvICdsdHh0JwotICBvICdzbXBsJwotCi1UaGUgJ2N1ZSAnIGNodW5rIGRlZmluZXMgYSBsaXN0IG9mIG1hcmtlcnMgaW4gdGhlIHN0cmVhbSB3aXRoICdjdWUtaWQncy4gVGhlCi0nc21wbCcgY2h1bmsgZGVmaW5lcyBhIGxpc3Qgb2YgcmVnaW9ucyBpbiB0aGUgc3RyZWFtIHdpdGggJ2N1ZS1pZCdzIGluIHRoZSBzYW1lCi1uYW1lc3BhY2UgKD8pLgotCi1UaGUgdmFyaW91cyAnYWR0bCcgY2h1bmtzOiAnbGFibCcsICdub3RlJyBhbmQgJ2x0eHQnIHJlZmVyIHRvIHRoZSAnY3VlLWlkJ3MuCi0KLUEgJ3Bsc3QnIGNodW5rIGRlZmluZXMgYSBzZXF1ZW5jZSBvZiBzZWdtZW50cyAoY3VlLWlkLCBsZW5ndGhfc2FtcGxlcywgcmVwZWF0cykuCi1UaGUgJ3NtcGwnIGNodW5rIGRlZmluZXMgYSBsaXN0IG9mIGxvb3BzIChjdWUtaWQsIGJlZywgZW5kLCBsb29wLXR5cGUsIHJlcGVhdHMpLgotCi0KLTYuIENvbmNsdXNpb24vSWRlYXMvRnV0dXJlIHdvcmsKLQotQmFzZWQgb24gdGhlIGRhdGEgb2YgY2hhcHRlciA1LCBhIGZldyB0aG91Z2h0cyBhbmQgb2JzZXJ2YXRpb25zIHRoYXQgY2FuIGJlIHVzZWQKLXRvIGV4dGVuZCBhbmQgcmVmaW5lIG91ciBBUEkuIFRoZXNlIHRoaW5ncyBiZWxvdyBhcmUgbm90IHJlZmxlY3RpbmcgdGhlIGN1cnJlbnQKLWltcGxlbWVudGF0aW9uLgotCi1BbGwgZm9ybWF0cyBoYXZlIHRhYmxlIG9mIFtjdWUtaWQsIGN1ZS1zdGFydCwgKGN1ZS1lbmQpLCAoZXh0cmEgdGFncyldCi0tIGN1ZS1pZCBpcyBjb21tb25seSByZXByZXNlbnRlZCBhcyBhbmQgdW5zaWduZWQgaW50IDMyYml0Ci0tIGN1ZS1lbmQgaXMgb3B0aW9uYWwKLS0gZXh0cmEgdGFncyBjb3VsZCBiZSByZXByZXNlbnRlZCBhcyBhIHN0cnVjdHVyZS90YWdsaXN0Ci0KLU1hbnkgZm9ybWF0cyBoYXZlIG1ldGFkYXRhIHRoYXQgcmVmZXJlbmNlcyB0aGUgY3VlLXRhYmxlLgotLSBsb29wcyBpbiBpbnN0cnVtZW50cyBpbiB3YXYsIGFpZmMKLS0gZWRpdCBsaXN0cyBpbiB3YXYsIG1wNAotCi1Gb3IgbXA0LmVkdGwsIHdhdi5wbHN0IHdlIGNvdWxkIGV4cG9zZSB0d28gZWRpdGlvbnMuCi0xKSB0aGUgZWRpdCBsaXN0IGlzIGZsYXR0ZW5lZDogZGVmYXVsdCwgZm9yIHBsYXliYWNrCi0yKSB0aGUgc3RyZWFtIGhhcyB0aGUgcmF3IGRhdGEgYW5kIHRoZSBlZGl0IGxpc3QgaXMgdGhlcmUgYXMgY2hhcHRlciBtYXJrZXJzOgotICAgdXNlZnVsIGZvciBlZGl0aW5nIHNvZnR3YXJlCi0KLVdlIG1pZ2h0IHdhbnQgdG8gaW50cm9kdWNlIGEgbmV3IEdTVF9UT0NfRU5UUllfVFlQRV9NQVJLRVIgb3IgX0NVRS4gVGhpcyB3b3VsZAotYmUgYSBzZXF1ZW5jZSBlbnRyeS10eXBlIGFuZCBpdCB3b3VsZCBub3QgYmUgdXNlZCBmb3IgbmF2aWdhdGlvbmFsIHB1cnBvc2VzLCBidXQKLXRvIGF0dGFjaCBkYXRhIHRvIGEgcG9pbnQgaW4gdGltZSAoZW52ZWxvcGVzLCBsb29wcywgLi4uKS4KLQotQVBJIHdpc2UgdGhlcmUgaXMgc29tZSBvdmVybGFwIGJldHdlZW46Ci0tIGV4cG9zaW5nIG11bHRpcGxlIGF1ZGlvL3ZpZGVvIHRyYWNrcyBhcyBwYWRzIG9yIGFzIFRvQyBlZGl0aW9ucy4gRm9yIFRvQwotICBlZGl0aW9ucywgd2UgaGF2ZSB0aGUgVG9jU2VsZWN0IGV2ZW50LgotLSBleHBvc2luZyBzdWJ0aXRsZXMgYXMgYSBzcGFyc2Ugc3RyZWFtIG9yIGFzIGFzIFRvQyBzZXF1ZW5jZSBvZiBtYXJrZXJzIHdpdGgKLSAgbGFiZWxzCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXRyYWNpbmcudHh0IGIvZG9jcy9kZXNpZ24vcGFydC10cmFjaW5nLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU1ZjQ2ZC4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LXRyYWNpbmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLVRyYWNpbmcKLT09PT09PT0KLQotVGhpcyBzdWJzeXN0ZW0gd2lsbCBwcm92aWRlIGEgbWVjaGFuaXNtIHRvIGdldCBzdHJ1Y3R1cmVkIHRyYWNpbmcgaW5mbyBmcm9tCi1HU3RyZWFtZXIgYXBwbGljYXRpb25zLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBwb3N0LXJ1biBhbmFseXNpcyBhcyB3ZWxsIGFzIGZvcgotbGl2ZSBpbnRyb3NwZWN0aW9uLgotCi1Vc2UgY2FzZXMKLS0tLS0tLS0tLQotKiBJJ2QgbGlrZSB0byBnZXQgc3RhdGlzdGljcyBmcm9tIGEgcnVubmluZyBhcHBsaWNhdGlvbi4KLQotKiBJJ2QgbGlrZSB0byB0byB1bmRlcnN0YW5kIHdoaWNoIHBhcnRzIG9mIG15IHBpcGVsaW5lIHVzZSBob3cgbWFueSByZXNvdXJjZXMuCi0KLSogSSdkIGxpa2UgdG8ga25vdyB3aGljaCBwYXJ0cyBvZiB0aGUgcGlwZWxpbmUgdXNlIGhvdyBtdWNoIG1lbW9yeS4KLQotKiBJJ2QgbGlrZSB0byBrbm93IGFib3V0IHJlZi1jb3VudHMgb2YgcGFydHMgaW4gdGhlIHBpcGVsaW5lIHRvIGZpbmQgcmVmLWNvdW50Ci0gIGlzc3Vlcy4KLQotTm9uIHVzZS1jYXNlcwotLS0tLS0tLS0tLS0tLQotKiBTb21lIGVsZW1lbnQgaW4gdGhlIHBpcGVsaW5lIGRvZXMgbm90IHBsYXkgYWxvbmcgdGhlIHJ1bGVzLCBmaW5kIG91dCB3aGljaAotICBvbmUuIFRoaXMgY291bGQgYmUgZG9uZSB3aXRoIGdlbmVyaWMgdGVzdHMuCi0KLURlc2lnbgotLS0tLS0tCi0KLVRoZSBzeXN0ZW0gYnJpbmdzIHRoZSBmb2xsb3dpbmcgbmV3IGl0ZW1zOgotY29yZSBob29rczogcHJvYmVzIGluIHRoZSBjb3JlIGFwaSwgdGhhdCB3aWxsIGV4cG9zZSBpbnRlcm5hbCBzdGF0ZSB3aGVuIHRyYWNpbmcKLSAgaXMgaW4gdXNlCi10cmFjZXJzOiBwbHVnaW4gZmVhdHVyZXMgdGhhdCBjYW4gcHJvY2VzcyBkYXRhIGZyb20gdGhlIGhvb2tzIGFuZCBlbWl0IGEgbG9nCi10cmFjaW5nIGZyb250LWVuZHM6IGFwcGxpY2F0aW9ucyB0aGF0IGNvbnN1bWUgbG9ncyBmcm9tIHRyYWNlcnMKLQotTGlrZSB0aGUgbG9nZ2luZywgdGhlIHRyYWNlciBob29rcyBjYW4gYmUgY29tcGlsZWQgb3V0IGFuZCBpZiBub3QgdXNlIGEgbG9jYWwKLWNvbmRpdGlvbiB0byBjaGVjayBpZiBhY3RpdmUuCi0KLUNlcnRhaW4gR1N0cmVhbWVyIGNvcmUgZnVuY3Rpb24gKHN1Y2ggYXMgZ3N0X3BhZF9wdXNoIG9yIGdzdF9lbGVtZW50X2FkZF9wYWQpCi13aWxsIGNhbGwgaW50byB0aGUgdHJhY2VyIHN1YnN5c3RlbSB0byBkaXNwYXRjaCBpbnRvIGFjdGl2ZSB0cmFjaW5nIG1vZHVsZXMuCi1EZXZlbG9wZXJzIHdpbGwgYmUgYWJsZSB0byBzZWxlY3QgYSBsaXN0IG9mIHBsdWdpbnMgYnkgc2V0dGluZyBhbiBlbnZpcm9ubWVudAotdmFyaWFibGUsIHN1Y2ggYXMgR1NUX1RSQUNFUlM9Im1lbWluZm87ZGJ1cyIuIE9uZSBjYW4gYWxzbyBwYXNzIHBhcmFtZXRlcnMgdG8KLXBsdWdpbnM6ICBHU1RfVFJBQ0VSUz0ibG9nKGV2ZW50cyxidWZmZXJzKTtzdGF0cyhhbGwpIi4KLVdoZW4gdGhlbiBwbHVnaW5zIGFyZSBsb2FkZWQsIHdlJ2xsIGFkZCB0aGVtIHRvIGNlcnRhaW4gaG9va3MgYWNjb3JkaW5nIHRvIHdoaWNoCi10aGV5IGFyZSBpbnRlcmVzdGVkIGluLgotCi1SaWdodCBub3cgdHJhY2luZyBpbmZvIGlzIGxvZ2dlZCBhcyBHc3RTdHJ1Y3R1cmVzIHRvIHRoZSBUUkFDRSBsZXZlbC4KLUlkZWE6IEFub3RoZXIgZW52IHZhciBHU1RfVFJBQ0VfQ0hBTk5FTCBjb3VsZCBiZSB1c2VkIHRvIHNlbmQgdGhlIHRyYWNpbmcgdG8gYQotZmlsZSBvciBhIHNvY2tldC4gU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMxODggZm9yCi1kaXNjdXNzaW9uIG9uIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLQotSG9vayBhcGkKLS0tLS0tLS0tCi1XZSdsbCB3cmFwIGludGVyZXN0aW5nIGFwaSBjYWxscyB3aXRoIHR3byBtYWNyb3MsIGUuZy4gZ3N0X3BhZF9wdXNoKCk6Ci0KLUdzdEZsb3dSZXR1cm4KLWdzdF9wYWRfcHVzaCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NSQyAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIEdTVF9UUkFDRVJfUEFEX1BVU0hfUFJFIChwYWQsIGJ1ZmZlcik7Ci0gIHJlcyA9IGdzdF9wYWRfcHVzaF9kYXRhIChwYWQsCi0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0gsIGJ1ZmZlcik7Ci0gIEdTVF9UUkFDRVJfUEFEX1BVU0hfUE9TVCAocGFkLCByZXMpOwotICByZXR1cm4gcmVzOwotfQotCi1UT0RPKGVuc29uaWMpOiBnY2MgaGFzIHNvbWUgbWFnaWMgZm9yIHdyYXBwaW5nIGZ1bmN0aW9ucwotLSBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwKLS0gaHR0cDovL3d3dy5jbGlmZm9yZC5hdC9jZnVuL2djY2ZlYXQvI2djY2ZlYXQwNS5jCi0KLVRPRE8oZW5zb25pYyk6IHdlIHNob3VsZCBldmFsIGlmIHdlIGNhbiB1c2Ugc29tZXRoaW5nIGxpa2UganVtcF9sYWJlbCBpbiB0aGUga2VybmVsCi0tIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzQxMjA3Mi8gKyBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy80MzUyMTUvCi0tIGh0dHA6Ly9seHIuZnJlZS1lbGVjdHJvbnMuY29tL3NvdXJjZS9rZXJuZWwvanVtcF9sYWJlbC5jCi0tIGh0dHA6Ly9seHIuZnJlZS1lbGVjdHJvbnMuY29tL3NvdXJjZS9pbmNsdWRlL2xpbnV4L2p1bXBfbGFiZWwuaAotLSBodHRwOi8vbHhyLmZyZWUtZWxlY3Ryb25zLmNvbS9zb3VyY2UvYXJjaC94ODYva2VybmVsL2p1bXBfbGFiZWwuYwotVE9ETyhlbnNvbmljKTogbGlibHR0bmctdXN0IHByb3ZpZGVzIHN1Y2ggYSBtZWNoYW5pc20gZm9yIHVzZXItc3BhY2UKLS0gYnV0IHRoaXMgaXMgbW9zdGx5IGFib3V0IGxvZ2dpbmcgdHJhY2VzCi0tIGl0IGlzIGxpbnV4IHNwZWNpZmljIDovCi0KLUluIGFkZGl0aW9uIHRvIGFwaSBob29rcyB3ZSBzaG91bGQgYWxzbyBwcm92aWRlIHRpbWVyIGhvb2tzLiBJbnRlcnZhbCB0aW1lcnMgYXJlCi11c2VmdWwgdG8gZ2V0IGUuZy4gcmVzb3VyY2UgdXNhZ2Ugc25hcHNob3RzLiBBbHNvIGFic29sdXRlIHRpbWVycyBtaWdodCBtYWtlCi1zZW5zZS4gQWxsIHRoaXMgY291bGQgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIGNsb2NrIHRocmVhZC4gV2UgY2FuIHVzZSBhbm90aGVyCi1lbnYtdmFyIEdTVF9UUkFDRV9USU1FUlM9IjEwMG1zLDc1bXMiIHRvIGNvbmZpZ3VyZSB0aW1lcnMgYW5kIHRoZW4gcGFzcyB0aGVtIHRvCi10aGUgdHJhY2VycyBsaWtlLCBHU1RfVFJBQ0VSUz0icnVzYWdlKHRpbWVyPTEwMG1zKTttZW1pbmZvKHRpbWVyPTc1bXMpIi4gTWF5YmUKLXdlIGNhbiBjcmVhdGUgdGhlbSBhZC1ob2MgYW5kIGF2b2lkIHRoZSBHU1RfVFJBQ0VfVElNRVJTIHZhci4KLQotSG9va3MgKCogYWxyZWFkeSBpbXBsZW1lbnRlZCkKLS0tLS0tCi0qIGdzdF9iaW5fYWRkCi0qIGdzdF9iaW5fcmVtb3ZlCi0qIGdzdF9lbGVtZW50X2FkZF9wYWQKLSogZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlCi0qIGdzdF9lbGVtZW50X3F1ZXJ5Ci0qIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQKLSogZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlCi0qIGdzdF9wYWRfbGluawotKiBnc3RfcGFkX3B1bGxfcmFuZ2UKLSogZ3N0X3BhZF9wdXNoCi0qIGdzdF9wYWRfcHVzaF9saXN0Ci0qIGdzdF9wYWRfcHVzaF9ldmVudAotKiBnc3RfcGFkX3VubGluawotCi1UcmFjZXIgYXBpCi0tLS0tLS0tLS0tCi1UcmFjZXJzIGFyZSBwbHVnaW4gZmVhdHVyZXMuIFRoZXkgaGF2ZSBhIHNpbXBsZSBhcGk6Ci0KLWNsYXNzIGluaXQKLUhlcmUgdGhlIHRyYWNlcnMgZGVzY3JpYmUgdGhlIGRhdGEgdGhlIHdpbGwgZW1pdC4KLQotaW5zdGFuY2UgaW5pdAotVHJhY2VycyBhdHRhY2ggaGFuZGxlcnMgdG8gb25lIG9yIG1vcmUgaG9va3MgdXNpbmcgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vaygpLgotSW4gY2FzZSB0aGUgYXJlIGNvbmZpZ3VyYWJsZSwgdGhleSBjYW4gcmVhZCB0aGUgb3B0aW9ucyBmcm9tIHRoZSAncGFyYW1zJwotcHJvcGVydHkuIFRoaXMgaXMgdGhlIGV4dHJhIGRldGFpbCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXIuCi0KLWhvb2sgZnVuY3Rpb25zCi1Ib29rcyBtYXJzaGFsIHRoZSBwYXJhbWV0ZXJzIGdpdmVuIHRvIGEgdHJhY2UgaG9vayBpbnRvIHZhcmFyZ3MgYW5kIGFsc28KLWFkZCBzb21lIGV4dHJhIGludG8gc3VjaCBhcyBhIHRpbWVzdGFtcC4gSG9va3Mgd2lsbCBiZSBjYWxsZWQgZnJvbSBtaXNjIHRocmVhZHMuCi1UaGUgdHJhY2UgcGx1Z2lucyBzaG91bGQgb25seSBjb25zdW1lICg9cmVhZCkgdGhlIHByb3ZpZGVkIGRhdGEuIEV4cGVuc2l2ZQotY29tcHV0YXRpb24gc2hvdWxkIGJlIGF2b2lkZWQgdG8gbm90IGFmZmVjdCB0aGUgZXhlY3V0aW9uIHRvbyBtdWNoLgotTW9zdCB0cmFjZSBwbHVnaW5zIHdpbGwgbG9nIGRhdGEgdG8gYSB0cmFjZSBjaGFubmVsLgotCi1pbnN0YW5jZSBkZXN0cnVjdGlvbgotVHJhY2VycyBjYW4gb3V0cHV0IHJlc3VsdHMgYW5kIHJlbGVhc2UgZGF0YS4gVGhpcyB3b3VsZCBpZGVhbGx5IGJlIGRvbmUgYXQgdGhlCi1lbmQgb2YgdGhlIGFwcGxpY2F0aW9ucywgYnV0IGdzdF9kZWluaXQoKSBpcyBub3QgbWFuZGF0b3J5LiBnc3RfdHJhY2VsaWIgd2FzCi11c2luZyBhIGdjY19kZXN0cnVjdG9yLiBJZGVhbGx5IHRyYWNlciBtb2R1bGVzIGxvZyBkYXRhIGFzIHRoZXkgaGF2ZSB0aGVtIGFuZAotbGVhdmUgYWdncmVnYXRpb24gdG8gYSB0b29sIHRoYXQgcHJvY2Vzc2VzIHRoZSBsb2cuCi0KLXRyYWNlciBldmVudCBjbGFzc2VzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTW9zdCB0cmFjZXJzIHdpbGwgbG9nIHNvbWUga2luZCBvZiAnZXZlbnRzJyA6IGEgZGF0YSB0cmFuc2ZlciwgYW4gZXZlbnQsCi1hIG1lc3NhZ2UsIGEgcXVlcnkgb3IgYSBtZWFzdXJlbWVudC4gRXZlcnkgdHJhY2VycyBzaG91bGQgZGVzY3JpYmUgdGhlIGRhdGEKLWZvcm1hdC4gVGhpcyB3YXkgdG9vbHMgdGhhdCBwcm9jZXNzIHRyYWNlciBsb2dzIGNhbiBzaG93IHRoZSBkYXRhIGluIGEKLW1lYW5pbmdmdWwgd2F5IHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgYWJvdXQgdGhlIHRyYWNlciBwbHVnaW4uCi0KLU9uZSB3YXkgd291bGQgYmUgdG8gaW50cm9zcGVjdCB0aGUgZGF0YSBmcm9tIHRoZSBwbHVnaW4uIFRoaXMgaGFzIHRoZQotZGlzYWR2YW50YWdlIHRoYXQgdGhlIHBvc3Rwcm9jZXNzaW5nIGFwcCBuZWVkcyB0byBsb2FkIHRoZSBwbHVnaW5zIG9yIHRhbGsgdG8KLXRoZSBnc3RyZWFtZXIgcmVnaXN0cnkuIEFuIGFsdGVybmF0aXZlIGlzIHRvIGFsc28gbG9nIHRoZSBmb3JtYXQgZGVzY3JpcHRpb24KLWludG8gdGhlIGxvZy4gUmlnaHQgbm93IHdlJ3JlIGxvZ2dpbmcgc2V2ZXJhbCBuZXN0ZWQgR3N0U3RydWN0dXJlIGZyb20gdGhlCi1fdHJhY2VyX2NsYXNzX2luaXQoKSBmdW5jdGlvbiAoZXhjZXB0IGluIHRoZSBsb2cgdHJhY2VyKS4KLQotLy8gdGhlIG5hbWUgaXMgdGhlIHZhbHVlIG5hbWUgKyAiLmNsYXNzIgotLy8gdGhlIGNvbnRlbnQgZGVzY3JpYmVzIGEgc2luZ2xlIGxvZyByZWNvcmQKLWdzdF90cmFjZXJfcmVjb3JkX25ldyAoInRocmVhZC1ydXNhZ2UuY2xhc3MiLAotICAgIC8vIHZhbHVlIGluIHRoZSBsb2cgcmVjb3JkIChvcmRlciBkb2VzIG5vdCBtYXR0ZXIpCi0gICAgLy8gJ3RocmVhZC1pZCcgaXMgYSAna2V5JyB0byByZWxhdGVkIHRoZSByZWNvcmQgdG8gc29tZXRoaW5nIGFzIGluZGljYXRlZAotICAgIC8vIGJ5ICdzY29wZScgc3Vic3RydWN0dXJlCi0gICAgInRocmVhZC1pZCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfR1VJTlQ2NCwKLSAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfVEhSRUFELAotICAgICAgICBOVUxMKSwKLSAgICAvLyBuZXh0IHZhbHVlIGluIHRoZSByZWNvcmQKLSAgICAvLyAnYXZlcmFnZS1jcHVsb2FkJyBpcyBhIG1lYXN1cmVtZW50IGFzIGluZGljYXRlZCBieSB0aGUgJ3ZhbHVlJwotICAgIC8vIHN1YnN0cnVjdHVyZQotICAgICJhdmVyYWdlLWNwdWxvYWQiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAvLyB2YWx1ZSB0eXBlCi0gICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgLy8gaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24sIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBncmFwaCBsYWJlbAotICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAiYXZlcmFnZSBjcHUgdXNhZ2UgcGVyIHRocmVhZCIsCi0gICAgICAgIC8vIGZsYWdzIHRoYXQgaGVscCB0byB1c2UgdGhlIHJpZ2h0IGdyYXBoIHR5cGUKLSAgICAgICAgLy8gZmxhZ3MgeyBhZ2dyZWdhdGVkLCB3aW5kb3dlZCwgY3VtdWxhdGl2ZSwgLi4uIH0KLSAgICAgICAgImZsYWdzIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX0ZMQUdTLCBHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX0FHR1JFR0FURUQsCi0gICAgICAgIC8vIHZhbHVlIHJhbmdlCi0gICAgICAgICJtaW4iLCBHX1RZUEVfVUlOVCwgMCwKLSAgICAgICAgIm1heCIsIEdfVFlQRV9VSU5ULCAxMDAsCi0gICAgICAgIE5VTEwpLAotICAgIC4uLgotICAgIE5VTEwpOwotCi1BIGZldyBpZGVhcyB0aGF0IGFyZSBub3QgeWV0IGluIHRoZSBhYm92ZSBzcGVjOgotLSBpdCB3b3VsZCBiZSBuaWNlIHRvIGRlc2NyaWJlIHRoZSB1bml0IG9mIHZhbHVlcwotICAtIHB1dHRpbmcgaXQgaW50byB0aGUgZGVzY3JpcHRpb24gaXMgbm90IGZsZXhpYmxlIHRob3VnaCwgZS5nLiB0aW1lIHdvdWxkIGJlCi0gICAgYSBndWludDY0IGJ1dCBhIHVpIHdvdWxkIHJlZm9ybWF0IGl0IHRvIGUuZy4gaDptOnMubXMKLSAgLSBvdGhlciB1bml0cyBhcmUgZS5nLjogcGVyY2VudCwgcGVyLW1pbGxlLCBvciBrYml0L3MKLS0gd2UnZCBsaWtlIHRvIGhhdmUgc29tZSBtZXRhZGF0YSBvbiBzY29wZXMKLSAgLSBlLmcuIHdlJ2QgbGlrZSB0byBsb2cgdGhlIHRocmVhZC1uYW1lcywgc28gdGhhdCBhIFVJIGNhbiBzaG93IHRoYXQgaW5zdGVhZAotICAgIG9mIHRocmVhZC1pZHMKLSAgLSB0aGUgc3RhdHMgdHJhY2VyIGxvZ3MgJ25ldy1lbGVtZW50JyBhbmQgJ25ldy1wYWQnIG1lc3NhZ2VzCi0gICAgLSB0aGV5IGFkZCBhIHVuaXF1ZSAnaXgnIHRvIGVhY2ggaW5zdGFuY2UgYXMgdGhlIG1lbW9yeSBwdHIgY2FuIGJlIHJldXNlZAotICAgICAgZm9yIG5ldyBpbnN0YW5jZXMsIHRoZSBkYXRhIGlzIGF0dGFjaGVkIHRvIHRoZSBvYmplY3RzIGFzIHFkYXRhCi0gICAgLSB0aGUgbGF0ZW5jeSB0cmFjZXIgd291bGQgbGlrZSB0byBhbHNvIHJlZmVyZW5jZSB0aGlzIG1ldGFkYXRhCi0tIHJpZ2h0IG5vdyB3ZSBsb2cgdGhlIGNsYXNzZXMgYXMgc3RydWN0dXJlcwotICAtIHRoaXMgaXMgaW1wb3J0YW50IHNvIHRoYXQgdGhlIGxvZyBpcyBzZWxmIGNvbnRhaW5lZAotICAtIGl0IHdvdWxkIGJlIG5pY2UgdG8gYWRkIHRoZW0gdG8gdGhlIHJlZ2lzdHJ5LCBzbyB0aGF0IGdzdC1pbnNwZWN0IGNhbiBzaG93Ci0gICAgdGhlbQotCi1XZSBjb3VsZCBhbHNvIGNvbnNpZGVyIHRvIGFkZCBlYWNoIHZhbHVlIGFzIGEgUkVBREFCTEUgZ29iamVjdCBwcm9wZXJ0eS4gVGhlCi1wcm9wZXJ0eSBoYXMgbmFtZS9kZXNjcmlwdGlvbi4gV2UgY291bGQgdXNlIHFkYXRhIGZvciBzY29wZSBhbmQgZmxhZ3MgKG9yIGhhdmUKLXNvbWUgbmV3IHByb3BlcnR5IGZsYWdzKS4KLVdlIHdvdWxkIGFsc28gbmVlZCBhIG5ldyAibm90aWZ5IiBzaWduYWwsIHNvIHRoYXQgdmFsdWUtY2hhbmdlIG5vdGlmaWNhdGlvbnMKLXdvdWxkIGluY2x1ZGUgYSB0aW1lLXN0YW1wLiBUaGlzIHdheSB0aGUgdHJhY2VycyB3b3VsZCBub3QgbmVlZHMgdG8gYmUgYXdhcmUgb2YKLXRoZSBsb2dnaW5nLiBUaGUgY29yZSB0cmFjZXIgd291bGQgcmVnaXN0ZXIgdGhlIG5vdGlmeSBoYW5kbGVycyBhbmQgZW1pdCB0aGUKLWxvZy4KLU9yIHdlIGp1c3QgYWRkIGEgZ3N0X3RyYWNlcl9jbGFzc19pbnN0YWxsX2V2ZW50KCkgYW5kIHRoYXQgbWltaWNzIHRoZQotZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgpLgotCi1Gcm9udGVuZHMgY2FuOgotLSBkbyBhbiBldmVudHMgb3ZlciB0aW1lIGhpc3RvZ3JhbQotLSBwbG90IGN1cnZlcyBvZiB2YWx1ZXMgb3ZlciB0aW1lIG9yIGRlbHRhcwotLSBzaG93IGdhdWdlcwotLSBjb2xsZWN0IHN0YXRpc3RpY3MgKG1pbiwgbWF4LCBhdmcsIC4uLikKLQotUGx1Z2lucyBpZGVhcwotPT09PT09PT09PT09PQotCi1XZSBjYW4gaGF2ZSBzb21lIHVuZGVyIGdzdHJlYW1lci9wbHVnaW5zL3RyYWNlcnMvCi0KLWxhdGVuY3kKLS0tLS0tLS0KLS0gcmVnaXN0ZXIgdG8gYnVmZmVyIGFuZCBldmVudCBmbG93Ci0tIHNlbmQgY3VzdG9tIGV2ZW50IG9uIGJ1ZmZlciBmbG93IGF0IHNvdXJjZSBlbGVtZW50cwotLSBjYXRjaCBldmVudHMgb24gZXZlbnQgdHJhbnNmZXIgYXQgc2luayBlbGVtZW50cwotCi1tZW1pbmZvIChub3QgeWV0IGltcGxlbWVudGVkKQotLS0tLS0tLQotLSByZWdpc3RlciB0byBhbiBpbnRlcnZhbC10aW1lciBob29rLgotLSBjYWxsIG1hbGxpbmZvKCkgYW5kIGxvZyBtZW1vcnkgdXNhZ2UKLQotcnVzYWdlCi0tLS0tLS0KLS0gcmVnaXN0ZXIgdG8gYW4gaW50ZXJ2YWwtdGltZXIgaG9vay4KLS0gY2FsbCBnZXRydXNhZ2UoKSBhbmQgbG9nIHJlc291cmNlIHVzYWdlCi0KLWRidXMgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCi0tLS0tCi0tIHByb3ZpZGUgYSBkYnVzIGlmYWNlIHRvIGFubm91bmNlIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSB0cmFjZWQKLS0gdHJhY2luZyBVSXMgY2FuIHVzZSB0aGUgZGJ1cyBpZmFjZSB0byBmaW5kIHRoZSBjaGFubmVscyB3aGVyZSBsb2dnaW5nIGFuZAotICB0cmFjaW5nIGlzIGdldHRpbmcgbG9nZ2VkIHRvCi0tIG9uZSB3b3VsZCBzdGFydCB0aGUgdHJhY2luZyBVSSBmaXJzdCBhbmQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgc3RhcnRlZCB3aXRoCi0gIHRyYWNpbmcgYWN0aXZhdGVkLCB0aGUgZGJ1cyBwbHVnaW4gd2lsbCBhbm5vdW5jZSB0aGUgbmV3IGFwcGxpY2F0aW9uLAotICB1cG9uIHdoaWNoIHRoZSB0cmFjaW5nIFVJIGNhbiBzdGFydCByZWFkaW5nIGZyb20gdGhlIGxvZyBjaGFubmVscywgdGhpcyBhdm9pZAotICBtaXNzaW5nIHNvbWUgZGF0YQotCi10b3BvbG9neSAobm90IHlldCBpbXBsZW1lbnRlZCkKLS0tLS0tLS0tCi0tIHJlZ2lzdGVyIHRvIHBpcGVsaW5lIHRvcG9sb2d5IGhvb2tzCi0tIHRyYWNpbmcgVUlzIGNhbiBzaG93IGEgbGl2ZSBwaXBlbGluZSBncmFwaAotCi1zdGF0cwotLS0tLS0KLS0gcmVnaXN0ZXIgdG8gYnVmZmVyLCBldmVudCwgbWVzc2FnZSBhbmQgcXVlcnkgZmxvdwotLSB0cmFjaW5nIGFwcHMgY2FuIGRvIGUuZy4gc3RhdGlzdGljcwotCi1yZWZjb3VudHMgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCi0tLS0tLS0tLS0KLS0gbG9nIHJlZi1jb3VudHMgb2Ygb2JqZWN0cwotLSBqdXN0IGxvZ2dpbmcgdGhlbSBvdXRzaWRlIG9mIGdsaWIvZ29iamVjdCB3b3VsZCBzdGlsbCBtYWtlIGl0IGhhcmQgdG8gZGV0ZWN0Ci0gIGlzc3VlcyB0aG91Z2gKLQotb3BlbmdsIChub3QgeWV0IGltcGxlbWVudGVkKQotLS0tLS0tCi0tIHVwbG9hZC9kb3dubG9hZCB0aW1lcwotLSB0aGVyZSBpcyBub3QgaGFyZHdhcmUgYWdub3N0aWMgd2F5IHRvIGdldCBlLmcuIG1lbW9yeSB1c2FnZSBpbmZvCi0gIChnbCBleHRlbnNpb25zKQotCi1tZW1vcnkgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCi0tLS0tLS0KLS0gdHJhY2UgbGl2ZSBpbnN0YW5jZSAoYW5kIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSkKLS0gdXNlIGFuIGF0ZXhpdCBoYW5kbGVyIHRvIGR1bXAgbGVha2VkIGluc3RhbmNlCi1odHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2NzYwI2M2Ci0KLWxlYWtzCi0tLS0tLQotLSB0cmFjayBjcmVhdGlvbi9kZXN0cnVjdGlvbiBvZiBHc3RPYmplY3QgYW5kIEdzdE1pbmlPYmplY3QKLS0gbG9nIHRob3NlIHdoaWNoIGFyZSBzdGlsbCBhbGl2ZSB3aGVuIGFwcCBpcyBleGl0aW5nIGFuZCByYWlzZSBhbiBlcnJvciBpZiBhbnkKLS0gSWYgdGhlIEdTVF9MRUFLU19UUkFDRVJfU0lHIGVudiB2YXJpYWJsZSBpcyBkZWZpbmVkIHRoZSB0cmFjZXIgd2lsbCBoYW5kbGUgdGhlIGZvbGxvd2luZyBVTklYIHNpZ25hbHM6Ci0gIC0gU0lHVVNSMTogbG9nIGFsaXZlIG9iamVjdHMKLSAgLSBTSUdVU1IyOiBjcmVhdGUgYSBjaGVja3BvaW50IGFuZCBwcmludCBhIGxpc3Qgb2Ygb2JqZWN0cyBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgc2luY2UKLSAgICB0aGUgcHJldmlvdXMgY2hlY2twb2ludC4KLS0gSWYgdGhlIEdTVF9MRUFLU19UUkFDRVJfU1RBQ0tfVFJBQ0UgZW52IHZhcmlhYmxlIGlzIGRlZmluZWQgbG9nIHRoZSBjcmVhdGlvbgotICBzdGFjayB0cmFjZSBvZiBsZWFrZWQgb2JqZWN0cy4gVGhpcyBtYXkgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSBtZW1vcnkKLSAgY29uc3VtcHRpb24uCi0KLVVzZXIgaW50ZXJmYWNlcwotPT09PT09PT09PT09PT09Ci0KLWdzdC1kZWJ1Zy12aWV3ZXIKLS0tLS0tLS0tLS0tLS0tLS0KLWdzdC1kZWJ1Zy12aWV3ZXIgY291bGQgYmUgZ2l2ZW4gdGhlIHRyYWNlIGxvZyBpbiBhZGRpdGlvbiB0byB0aGUgZGVidWcgbG9nIChvciBhCi1jb21iaW5lZCBsb2cpLiBBbHRlcm5hdGl2ZWx5IGl0IHdvdWxkIHNob3cgYSBkaWFsb2cgdGhhdCBzaG93cyBhbGwgbG9jYWwgYXBwcwotKGlmIHRoZSBkYnVzIHBsdWdpbiBpcyBsb2FkZWQpIGFuZCByZWFkIHRoZSBsb2cgc3RyZWFtcyBmcm9tIHRoZSBzb2NrZXRzL2ZpbGVzCi10aGF0IGFyZSBjb25maWd1cmVkIGZvciB0aGUgYXBwLgotCi1nc3QtdHJhY2VyCi0tLS0tLS0tLS0tCi1Db3VudGVycGFydCBvZiBnc3QtdHJhY2VsaWItdWkuCi0KLWdzdC1zdGF0cwotLS0tLS0tLS0tCi1BIHRlcm1pbmFsIGFwcCB0aGF0IHNob3dzIHN1bW1hcnkvcnVubmluZyBzdGF0cyBsaWtlIHRoZSBzdW1tYXJ5IGdzdC10cmFjZWxpYgotc2hvd3MgYXQgdGhlIGVuZCBvZiBhIHJ1bi4gQ3VycmVudGx5IG9ubHkgc2hvd3MgYW4gYWdncmVnYXRlZCBzdGF0dXMuCi0KLWxpdmUtZ3JhcGhlcnMKLS0tLS0tLS0tLS0tLS0KLU1heWJlIHdlIGNhbiBldmVuIGZlZWQgdGhlIGxvZyBpbnRvIGV4aXN0aW5nIGxpdmUgZ3JhcGhlcnMsIHdpdGggYSBsaXR0bGUgZHJpdmVyCi0qIGh0dHBzOi8vZ2l0aHViLmNvbS9ka29nYW4vZmVlZGdudXBsb3QKLQotCi1Qcm9ibGVtcyAvIE9wZW4gaXRlbXMKLT09PT09PT09PT09PT09PT09PT09PQotLSBzaG91bGQgdHJhY2VycyBsb2cgaW50byB0aGUgZGVidWcubG9nIG9yIGludG8gYSBzZXBhcmF0ZSBsb2c/Ci0gIC0gc2VwYXJhdGUgbG9nCi0gICAgLSB1c2UgYSBiaW5hcnkgZm9ybWF0PwotICAgIC0gd29yc2UgcGVyZm9ybWFuY2UgKHdlJ3JlIHdyaXRpbmcgdHdvIGxvZ3MgYXQgdGhlIHNhbWUgdGltZSkKLSAgICAtIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aGVuIHBlb3BsZSB0byBHU1RfREVCVUdfQ0hBTk5FTD1zdGRlcnIgYW5kCi0gICAgICBHU1RfVFJBQ0VfQ0hBTk5FTD1zdGRlcnIgKHVzZSBhIHNoYXJlZCBjaGFubmVsLCBidXQgd2hhdCBhYm91dCB0aGUKLSAgICAgIGZvcm1hdHM/KQotICAtIGRlYnVnIGxvZwotICAgIC0gdGhlIHRyYWNlciBzdWJzeXN0ZW0gd291bGQgbmVlZCB0byBsb2cgdGhlIEdTVF9UUkFDRSBhdCBhIGxldmVsIHRoYXQgaXMKLSAgICAgIGFjdGl2ZQotICAgIC0gc2hvdWxkIHRoZSB0cmFjZXIgY2FsbCBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCgpIHRvIGVuc3VyZSB0aGluZ3MKLSAgICAgIHdvcmssIGV2ZW4gdGhvdWdoIHRoZSBsZXZlbHMgZG9uJ3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBoZXJlCi0gIC0gbWFrZSBsb2dnaW5nIGEgdHJhY2VyIChhIGhvb2sgaW4gZ3N0X2RlYnVnX2xvZ192YWxpc3QsIG1vdmUKLSAgICBnc3RfZGVidWdfbG9nX2RlZmF1bHQoKSB0byB0aGUgdHJhY2VyIG1vZHVsZSkKLSAgICAtIGxvZyBhbGwgZGVidWcgbG9nIHRvIHRoZSB0cmFjZXIgbG9nLCBzb21lIG9mIHRoZSBjdXJyZW50IGxvZ2dpbmcKLSAgICAgIHN0YXRlbWVudHMgY2FuIGJlIHJlcGxhY2VkIGJ5IGdlbmVyaWMgbG9nZ2luZyBhcyBzaG93biBpbiB0aGUgbG9nLXRyYWNlcgotICAgIC0gYWRkIHRvb2xzL2dzdC1kZWJ1ZyB0byBleHRyYWN0IGEgaHVtYW4gcmVhZGFibGUgZGVidWcgbG9nIGZyb20gdGhlIHRyYWNlCi0gICAgICBsb2cKLSAgLSB3ZSBjb3VsZCBtYWludGFpbiBhIGxpc3Qgb2YgbG9nIGZ1bmN0aW9ucywgd2hlcmUgZ3N0X3RyYWNlcl9sb2dfdHJhY2UoKSBpcwotICAgIHRoZSBkZWZhdWx0IG9uZS4gVGhpcyB3YXkgZS5nLiBnc3QtdmFsaWRhdGUgY291bGQgY29uc3VtZSB0aGUgdHJhY2VzCi0gICAgZGlyZWN0bHkuCi0KLS0gd2hlbiBob29raW5nIGludG8gYSB0aW1lciwgc2hvdWxkIHdlIGp1c3QgaGF2ZSBzb21lIHByZWRlZmluZWQgaW50ZXJ2YWxzPwotICAtIGNhbiB3ZSBhZGQgYSB0cmFjZXIgbW9kdWxlIHRoYXQgcmVnaXN0ZXJzIHRoZSB0aW1lciBob29rPyB0aGVuIHdlIGNvdWxkIGRvCi0gICAgICBHU1RfVFJBQ0VSPSJ0aW1lcigxMG1zKTtydXNhZ2UiCi0gICAgcmlnaHQgbm93IHRoZSB0cmFjZXIgaG9va3MgYXJlIGRlZmluZWQgYXMgYW4gZW51bSB0aG91Z2guCi0KLS0gd2hlbiBjb25uZWN0aW5nIHRvIGEgcnVubmluZyBhcHAsIHdlIGNhbid0IGVhc2lseSBnZXQgdGhlICdjdXJyZW50JyBzdGF0ZSBpZgotICBsb2dnaW5nIGlzIHVzaW5nIGEgc29ja2V0LCBhcyBwYXN0IGV2ZW50cyBhcmUgbm90IGV4cGxpY2l0bHkgc3RvcmVkLCB3ZSBjb3VsZAotICBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgdG9wb2xvZ3kgYW5kIGVtaXQgZXZlbnRzIHdpdGggR1NUX0NMT0NLX1RJTUVfTk9ORSBhcyB0cwotICB0byBpbmRpY2F0ZSB0aGF0IHRoZSBldmVudHMgYXJlIHN5bnRoZXRpYy4KLQotLSB3ZSBuZWVkIHN0YWJsZSBpZHMgZm9yIHNjb3BlcyAodGhyZWFkcywgZWxlbWVudHMsIHBhZHMpCi0gIC0gdGhlIGFkZHJlc3MgY2FuIGJlIHJldXNlZAotICAtIHdlIGNhbiB1c2UgZ3N0X3V0aWxfc2VxbnVtX25leHQoKQotICAtIHNvbWV0aGluZyBsaWtlIGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nKCkgd29uJ3Qgd29yayBhcyBvYmplY3RzIGFyZQotICAgIGluaXRpYWxseSB3aXRob3V0IHBhcmVudAotCi0tIHJpZ2h0IG5vdyB0aGUgdHJhY2luZy1ob29rcyBhcmUgZW5hYmxlZC9kaXNhYmxlZCBmcm9tIGNvbmZpZ3VyZSB3aXRoCi0gIC0te2VuYWJsZSxkaXNhYmxlfS1nc3QtdHJhY2VyLWhvb2tzCi0gIFRoZSB0cmFjZXIgY29kZSBhbmQgdGhlIHBsdWdpbnMgYXJlIHN0aWxsIGJ1aWx0IHRob3VnaC4gV2Ugc2hvdWxkIGFkZCBhCi0gIC0te2VuYWJsZSxkaXNhYmxlfS1nc3QtdHJhY2VyIHRvIGRpc2FibGVkIHRoZSB3aG9sZSBzeXN0ZW0sIGFsbHRob3VnaCB0aGlzCi0gIGlzIGEgYml0IGNvbmZ1c2luZyB3aXRoIHRoZSAtLXtlbmFibGUsZGlzYWJsZX0tdHJhY2Ugb3B0aW9uIHdlIGhhdmUgYWxyZWFkeS4KLQotVHJ5IGl0Ci09PT09PT0KLUdTVF9ERUJVRz0iR1NUX1RSQUNFUjo3LEdTVF9CVUZGRVIqOjcsR1NUX0VWRU5UOjcsR1NUX01FU1NBR0U6NyIgR1NUX1RSQUNFUlM9bG9nIGdzdC1sYXVuY2gtMS4wIGZha2VzcmMgbnVtLWJ1ZmZlcnM9MTAgISBmYWtlc2luawotLSB0cmFjZXMgZm9yIGJ1ZmZlciBmbG93IGluIFRSQUNFIGxldmVsCi0KLUdTVF9ERUJVRz0iR1NUX1RSQUNFUjo3IiBHU1RfVFJBQ0VSUz0ic3RhdHM7cnVzYWdlIiBHU1RfREVCVUdfRklMRT10cmFjZS5sb2cgZ3N0LWxhdW5jaC0xLjAgZmFrZXNyYyBudW0tYnVmZmVycz0xMCBzaXpldHlwZT1maXhlZCAhIHF1ZXVlICEgZmFrZXNpbmsKLWdzdC1zdGF0cy0xLjAgdHJhY2UubG9nCi0tIHByaW50IHNvbWUgcGlwZWxpbmUgc3RhdHMgb24gZXhpdAotCi1HU1RfREVCVUc9IkdTVF9UUkFDRVI6NyIgR1NUX1RSQUNFUlM9InN0YXRzO3J1c2FnZSIgR1NUX0RFQlVHX0ZJTEU9dHJhY2UubG9nIC91c3IvYmluL2dzdC1wbGF5LTEuMCAtLWludGVyYWN0aXZlICRIT01FL1ZpZGVvcy9tb3ZpZS5tcDQKLS4vc2NyaXB0cy9nc3QtcGxvdC10cmFjZXMuc2ggLS1mb3JtYXQ9cG5nIHwgZ251cGxvdAotZW9nIHRyYWNlLmxvZy4qLnBuZwotLSBnZXQgdHMsIGF2ZXJhZ2UtY3B1bG9hZCwgY3VycmVudC1jcHVsb2FkLCB0aW1lIGFuZCBwbG90Ci0KLUdTVF9ERUJVRz0iR1NUX1RSQUNFUjo3IiBHU1RfVFJBQ0VSUz1sYXRlbmN5IGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyBudW0tYnVmZmVycz0xMCAhIGF1ZGlvY29udmVydCAhIHZvbHVtZSB2b2x1bWU9MC43ICEgYXV0b2F1ZGlvc2luawotLSBwcmludCBwcm9jZXNzaW5nIGxhdGVuY2llcwotCi1HU1RfVFJBQ0VSUz0ibGVha3MiIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz0xMCAhIGZha2VzaW5rCi0tIFJhaXNlIGEgd2FybmluZyBpZiBhIGxlYWsgaXMgZGV0ZWN0ZWQKLQotR1NUX0RFQlVHPSJHU1RfVFJBQ0VSOjciIEdTVF9UUkFDRVJTPSJsZWFrcyhHc3RFdmVudCxHc3RNZXNzYWdlKSIgZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEwICEgZmFrZXNpbmsKLS0gY2hlY2sgaWYgYW55IEdzdEV2ZW50IG9yIEdzdE1lc3NhZ2UgaXMgbGVha2VkIGFuZCByYWlzZSBhIHdhcm5pbmcKLQotUGVyZm9ybWFuY2UKLT09PT09PT09PT09Ci1ydW4gLi90ZXN0cy9iZW5jaG1hcmtzL3RyYWNpbmcuc2ggPHRyYWNlcihzKT4gPG1lZGlhPgotCi1lZ3JlcCAtYyAiKHByb2N8dGhyZWFkKS1ydXNhZ2UiIHRyYWNlLmxvZwotNjU4NjE4Ci1ncmVwIC1jICJnc3RfdHJhY2VyX2xvZ190cmFjZSIgdHJhY2UubG9nCi04MjMzNTEKLQotLSB3ZSBjYW4gb3B0aW1pemUgbW9zdCBvZiBpdCBieSB1c2luZyBxdWFya3MgaW4gc3RydWN0dXJlcyBvciBldmVudHVhbGx5IGF2b2lkIHN0cnVjdHVyZXMgdG90YWxseQotCmRpZmYgLS1naXQgYS9kb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0IGIvZG9jcy9kZXNpZ24vcGFydC10cmlja21vZGVzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc3OTNiYS4uMDAwMDAwMAotLS0gYS9kb2NzL2Rlc2lnbi9wYXJ0LXRyaWNrbW9kZXMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLVRyaWNrbW9kZXMKLS0tLS0tLS0tLS0KLQotR1N0cmVhbWVyIHByb3ZpZGVzIEFQSSBmb3IgcGVyZm9ybWluZyB2YXJpb3VzIHRyaWNrbW9kZSBwbGF5YmFjay4gVGhpcyBpbmNsdWRlczoKLQotIC0gc2VydmVyIHNpZGUgdHJpY2ttb2RlcwotIC0gY2xpZW50IHNpZGUgZmFzdC9zbG93IGZvcndhcmQgcGxheWJhY2sKLSAtIGNsaWVudCBzaWRlIGZhc3Qvc2xvdyBiYWNrd2FyZHMgcGxheWJhY2sKLQotU2VydmVyIHNpZGUgdHJpY2ttb2RlcyBtZWFuIHRoYXQgYSBzb3VyY2UgKG5ldHdvcmsgc291cmNlKSBjYW4gcHJvdmlkZSBhCi1zdHJlYW0gd2l0aCBkaWZmZXJlbnQgcGxheWJhY2sgc3BlZWQgYW5kIGRpcmVjdGlvbi4gVGhlIGNsaWVudCBkb2VzIG5vdCBoYXZlIHRvCi1wZXJmb3JtIGFueSBzcGVjaWFsIGFsZ29yaXRobXMgdG8gZGVjb2RlIHRoaXMgc3RyZWFtLgotCi1DbGllbnQgc2lkZSB0cmlja21vZGVzIG1lYW4gdGhhdCB0aGUgZGVjb2RpbmcgY2xpZW50IChHU3RyZWFtZXIpIHBlcmZvcm1zIHRoZQotbmVlZGVkIGFsZ29yaXRobXMgdG8gY2hhbmdlIHRoZSBkaXJlY3Rpb24gYW5kIHNwZWVkIG9mIHRoZSBtZWRpYSBmaWxlLgotCi1TZWVraW5nIGNhbiBib3RoIGJlIGRvbmUgaW4gYSBwbGF5YmFjayBwaXBlbGluZSBhbmQgYSB0cmFuc2NvZGluZyBwaXBlbGluZS4KLQotCi1HZW5lcmFsIHNlZWtpbmcgb3ZlcnZpZXcKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotQ29uc2lkZXIgYSB0eXBpY2FsIHBsYXliYWNrIHBpcGVsaW5lOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC4tLS0tLS0tLS0uICAuLS0tLS0tLgotICAgICAgICAgICAgICAuLS0tLS0tLS4gICB8IGRlY29kZXIgfC0+fCBzaW5rIHwgIAotICAuLS0tLS0tLS0uICB8ICAgICAgIHwtLT4nLS0tLS0tLS0tJyAgJy0tLS0tLScKLSAgfCBzb3VyY2UgfC0+fCBkZW11eCB8Ci0gICctLS0tLS0tLScgIHwgICAgICAgfC0tPi4tLS0tLS0tLS0uICAuLS0tLS0tLgotICAgICAgICAgICAgICAnLS0tLS0tLScgICB8IGRlY29kZXIgfC0+fCBzaW5rIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tLS0tLS0tLScgICctLS0tLS0nCi0KLVRoZSBwaXBlbGluZSBpcyBpbml0aWFsbHkgY29uZmlndXJlZCB0byBwbGF5IGJhY2sgYXQgc3BlZWQgMS4wIHN0YXJ0aW5nIGZyb20gCi1wb3NpdGlvbiAwIGFuZCBzdG9wcGluZyBhdCB0aGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIGZpbGUuIAotCi1XaGVuIHBlcmZvcm1pbmcgYSBzZWVrLCB0aGUgZm9sbG93aW5nIHN0ZXBzIGhhdmUgdG8gYmUgdGFrZW4gYnkgdGhlIGFwcGxpY2F0aW9uOgotCi1DcmVhdGUgYSBzZWVrIGV2ZW50Ci1eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLVRoZSBzZWVrIGV2ZW50IGNvbnRhaW5zOgotCi0tIHZhcmlvdXMgZmxhZ3MgZGVzY3JpYmluZzoKLSAgLSB3aGVyZSB0byBzZWVrIHRvIChLRVlfVU5JVCkKLSAgLSBob3cgYWNjdXJhdGUgdGhlIHNlZWsgc2hvdWxkIGJlIChBQ0NVUkFURSkKLSAgLSBob3cgdG8gcGVyZm9ybSB0aGUgc2VlayAoRkxVU0gpIAotICAtIHdoYXQgdG8gZG8gd2hlbiB0aGUgc3RvcCBwb3NpdGlvbiBpcyByZWFjaGVkIChTRUdNRU5UKS4KLSAgLSBleHRyYSBwbGF5YmFjayBvcHRpb25zIChTS0lQKQotLSBhIGZvcm1hdCB0byBzZWVrIGluLCB0aGlzIGNhbiBiZSB0aW1lLCBieXRlcywgdW5pdHMgKGZyYW1lcywgc2FtcGxlcyksIC4uLgotLSBhIHBsYXliYWNrIHJhdGUsIDEuMCBpcyBub3JtYWwgcGxheWJhY2sgc3BlZWQsIHBvc2l0aXZlIHZhbHVlcyBiaWdnZXIgdGhhbiAxLjAKLSAgbWVhbiBmYXN0IHBsYXliYWNrLiBuZWdhdGl2ZSB2YWx1ZXMgbWVhbiByZXZlcnNlIHBsYXliYWNrLiBBIHBsYXliYWNrIHNwZWVkIG9mCi0gIDAuMCBpcyBub3QgYWxsb3dlZCAoYnV0IGlzIGVxdWl2YWxlbnQgdG8gUEFVU0lORyB0aGUgcGlwZWxpbmUpLgotLSBhIHN0YXJ0IHBvc2l0aW9uLCB0aGlzIHZhbHVlIGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgCi0gIGZpbGUuIEl0IGNhbiBhbHNvIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgc3RhcnQgdmFsdWUuCi0tIGEgc3RvcCBwb3NpdGlvbiwgdGhpcyB2YWx1ZSBoYXMgdG8gYmUgYmV0d2VlbiAwIGFuZCB0aGUgdG90YWwgZHVyYXRpb24uIEl0IGNhbgotICBhbHNvIGJlIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgc3RvcCB2YWx1ZS4KLQotU2VlIGFsc28gZ3N0X2V2ZW50X25ld19zZWVrKCkuCi0KLQotU2VuZCB0aGUgc2VlayBldmVudAotXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1TZW5kIHRoZSBuZXcgc2VlayBldmVudCB0byB0aGUgcGlwZWxpbmUgd2l0aCBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KCkuCi0KLUJ5IGRlZmF1bHQgdGhlIHBpcGVsaW5lIHdpbGwgc2VuZCB0aGUgZXZlbnQgdG8gYWxsIHNpbmsgZWxlbWVudHMuCi1CeSBkZWZhdWx0IGFuIGVsZW1lbnQgd2lsbCBmb3J3YXJkIHRoZSBldmVudCB1cHN0cmVhbSBvbiBhbGwgc2lua3BhZHMuCi1FbGVtZW50cyBjYW4gbW9kaWZ5IHRoZSBmb3JtYXQgb2YgdGhlIHNlZWsgZXZlbnQuIFRoZSBtb3N0IGNvbW1vbiBmb3JtYXQgaXMKLUdTVF9GT1JNQVRfVElNRS4KLQotT25lIGVsZW1lbnQgd2lsbCBhY3R1YWxseSBwZXJmb3JtIHRoZSBzZWVrLCB0aGlzIGlzIHVzdWFsbHkgdGhlIGRlbXV4ZXIgb3IKLXNvdXJjZSBlbGVtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcGVyZm9ybSB0aGUgZGlmZmVyZW50IHNlZWsKLXR5cGVzIHNlZSBwYXJ0LXNlZWtpbmcudHh0LgotCi1Gb3IgY2xpZW50IHNpZGUgdHJpY2ttb2RlIGEgU0VHTUVOVCBldmVudCB3aWxsIGJlIHNlbnQgZG93bnN0cmVhbSB3aXRoCi10aGUgbmV3IHJhdGUgYW5kIHN0YXJ0L3N0b3AgcG9zaXRpb25zLiBBbGwgZWxlbWVudHMgcHJlcGFyZSB0aGVtc2VsdmVzIHRvCi1oYW5kbGUgdGhlIHJhdGUgKHNlZSBiZWxvdykuIFRoZSBhcHBsaWVkIHJhdGUgb2YgdGhlIFNFR01FTlQgZXZlbnQgd2lsbAotYmUgc2V0IHRvIDEuMCB0byBpbmRpY2F0ZSB0aGF0IG5vIHJhdGUgYWRqdXN0bWVudCBoYXMgYmVlbiBkb25lLgotCi1mb3Igc2VydmVyIHNpZGUgdHJpY2sgbW9kZSBhIFNFR01FTlQgZXZlbnQgaXMgc2VudCBkb3duc3RyZWFtIHdpdGggYQotcmF0ZSBvZiAxLjAgYW5kIHRoZSBzdGFydC9zdG9wIHBvc2l0aW9ucy4gVGhlIGVsZW1lbnRzIHdpbGwgY29uZmlndXJlIHRoZW1zZWx2ZXMKLWZvciBub3JtYWwgcGxheWJhY2sgc3BlZWQgc2luY2UgdGhlIHNlcnZlciB3aWxsIHBlcmZvcm0gdGhlIHJhdGUgY29udmVyc2lvbnMuCi1UaGUgYXBwbGllZCByYXRlIHdpbGwgYmUgc2V0IHRvIHRoZSByYXRlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGJ5IHRoZSBzZXJ2ZXIuIFRoaXMKLWlzIGRvbmUgdG8gaW5zdXJlIHRoYXQgdGhlIHBvc2l0aW9uIHJlcG9ydGluZyBwZXJmb3JtZWQgaW4gdGhlIHNpbmsgaXMgYXdhcmUgCi1vZiB0aGUgdHJpY2sgbW9kZS4KLQotV2hlbiB0aGUgc2VlayBzdWNjZWVkcywgdGhlIF9zZW5kX2V2ZW50KCkgZnVuY3Rpb24gd2lsbCByZXR1cm4gVFJVRS4KLQotCi1TZXJ2ZXIgc2lkZSB0cmlja21vZGUKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgc291cmNlIGVsZW1lbnQgb3BlcmF0ZXMgaW4gcHVzaCBtb2RlLiBJdCBjYW4gcmVvcGVuIGEgc2VydmVyIGNvbm5lY3Rpb24gcmVxdWVzdGluZwotYSBuZXcgYnl0ZSBvciB0aW1lIHBvc2l0aW9uIGFuZCBhIG5ldyBwbGF5YmFjayBzcGVlZC4gVGhlIGNhcGFiaWxpdGllcyBjYW4gYmUgcXVlcmllZAotZnJvbSB0aGUgc2VydmVyIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgb3BlbmVkLgotCi1XZSBhc3N1bWUgdGhlIHNvdXJjZSBlbGVtZW50IGlzIGRlcml2ZWQgZnJvbSB0aGUgR3N0UHVzaFNyYyBiYXNlIGNsYXNzLiBUaGUgYmFzZSBzb3VyY2UKLXNob3VsZCBiZSBjb25maWd1cmVkIHdpdGggZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKHNyYywgR1NUX0ZPUk1BVF9USU1FKS4gCi0KLVRoZSBkb19zZWVrIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgcHVzaCBzcmMgc3ViY2xhc3Mgd2l0aCB0aGUgc2VlayBpbmZvcm1hdGlvbgotcGFzc2VkIGluIHRoZSBHc3RTZWdtZW50IGFyZ3VtZW50LgotCi1UaGUgcmF0ZSB2YWx1ZSBpbiB0aGUgc2VnbWVudCBzaG91bGQgYmUgdXNlZCB0byByZW9wZW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlcgotcmVxdWVzdGluZyBkYXRhIGF0IHRoZSBuZXcgc3BlZWQgYW5kIHBvc3NpYmx5IGEgbmV3IHBsYXliYWNrIHBvc2l0aW9uLgotCi1XaGVuIHRoZSBzZXJ2ZXIgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHJlb3BlbmVkLCBzZXQgdGhlIHJhdGUgb2YgdGhlIHNlZ21lbnQKLXRvIDEuMCBzbyB0aGF0IHRoZSBjbGllbnQgc2lkZSB0cmlja21vZGUgaXMgbm90IGVuYWJsZWQuIFRoZSBhcHBsaWVkIHJhdGUgaW4gdGhlIAotc2VnbWVudCBpcyBzZXQgdG8gdGhlIHJhdGUgdHJhbnNmb3JtYXRpb24gZG9uZSBieSB0aGUgc2VydmVyLgotCi1BbHRlcm5hdGl2ZWx5IGEgY29tYmluYXRpb24gb2YgY2xpZW50IHNpZGUgYW5kIHNlcnZlcnNpZGUgdHJpY2ttb2RlIGNhbiBiZSB1c2VkLCBmb3IgCi1leGFtcGxlIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBjZXJ0YWluIHJhdGVzLCB0aGUgY2xpZW50IGNhbiBwZXJmb3JtIHJhdGUgCi1jb252ZXJzaW9uIGZvciB0aGUgcmVtYWluZGVyLgotCi0KLSAgICAgICAgICAgICAgIHNvdXJjZSAgICAgICAgICAgICAgIHNlcnZlcgotICAgZG9fc2VlayAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAotICAgICAtLS0tLS0tLS0tLT58ICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICB8ICByZW9wZW4gY29ubmVjdGlvbiAgfAotICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0+fAotICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgICAgICB8ICAgc3VjY2VzcyAgICAgICAgICAgLgotICAgICAgICAgICAgICAgICB8PC0tLS0tLS0tLS0tLS0tLS0tLS0tfAotICAgICAgIG1vZGlmeSAgICB8ICAgICAgICAgICAgICAgICAgICAgfAotICAgICByYXRlIHRvIDEuMCB8ICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgcmV0dXJuICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgIFRSVUUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAotIAotQWZ0ZXIgcGVyZm9ybWluZyB0aGUgc2VlaywgdGhlIHNvdXJjZSB3aWxsIGluZm9ybSB0aGUgZG93bnN0cmVhbSBlbGVtZW50cyBvZiB0aGUKLW5ldyBzZWdtZW50IHRoYXQgaXMgdG8gYmUgcGxheWVkIGJhY2suIFNpbmNlIHRoZSBzZWdtZW50IHdpbGwgaGF2ZSBhIHJhdGUgb2YgMS4wLAotbm8gY2xpZW50IHNpZGUgdHJpY2sgbW9kZXMgYXJlIGVuYWJsZWQuIFRoZSBzZWdtZW50IHdpbGwgaGF2ZSBhbiBhcHBsaWVkIHJhdGUKLWRpZmZlcmVudCBmcm9tIDEuMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtZWRpYSBjb250YWlucyBkYXRhIHdpdGggbm9uLXN0YW5kYXJkCi1wbGF5YmFjayBzcGVlZCBvciBkaXJlY3Rpb24uCi0KLQotY2xpZW50IHNpZGUgZm9yd2FyZCB0cmlja21vZGVzIAotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLVRoZSBzZWVrIGhhcHBlbnMgYXMgc3RhdGVkIGFib3ZlLiBhIFNFR01FTlQgZXZlbnQgaXMgc2VudCBkb3duc3RyZWFtIHdpdGggYSByYXRlCi1kaWZmZXJlbnQgZnJvbSAxLjAuIFBsdWdpbnMgcmVjZWl2aW5nIHRoZSBTRUdNRU5UIGNhbiBkZWNpZGUgdG8gcGVyZm9ybSB0aGUgCi1yYXRlIGNvbnZlcnNpb24gb2YgdGhlIG1lZGlhIGRhdGEgKHJldGltZXN0YW1wIHZpZGVvIGZyYW1lcywgcmVzYW1wbGUgYXVkaW8sIC4uLikuCi0KLUlmIGEgcGx1Z2luIGRlY2lkZXMgdG8gcmVzYW1wbGUgb3IgcmV0aW1lc3RhbXAsIGl0IHNob3VsZCBtb2RpZnkgdGhlIFNFR01FTlQgd2l0aAotYSByYXRlIG9mIDEuMCBhbmQgdXBkYXRlIHRoZSBhcHBsaWVkIHJhdGUgc28gdGhhdCBkb3duc3RyZWFtIGVsZW1lbnRzIGRvbid0IHJlc2FtcGxlCi1hZ2FpbiBidXQgYXJlIGF3YXJlIHRoYXQgdGhlIG1lZGlhIGhhcyBiZWVuIG1vZGlmaWVkLgotCi1UaGUgR1N0cmVhbWVyIGJhc2UgYXVkaW8gYW5kIHZpZGVvIHNpbmtzIHdpbGwgcmVzYW1wbGUgYXV0b21hdGljYWxseSBpZiB0aGV5IHJlY2VpdmUKLWEgU0VHTUVOVCBldmVudCB3aXRoIGEgcmF0ZSBkaWZmZXJlbnQgZnJvbSAxLjAuIFRoZSBwb3NpdGlvbiByZXBvcnRpbmcgaW4gdGhlCi1iYXNlIGF1ZGlvIGFuZCB2aWRlbyBzaW5rcyB3aWxsIGFsc28gZGVwZW5kIG9uIHRoZSBhcHBsaWVkIHJhdGUgb2YgdGhlIHNlZ21lbnQKLWluZm9ybWF0aW9uLgotCi1XaGVuIHRoZSBTS0lQIGZsYWcgaXMgc2V0LCBmcmFtZXMgY2FuIGJlIGRyb3BwZWQgaW4gdGhlIGVsZW1lbnRzLiBJZiBTIGlzIHRoZQotc3BlZWR1cCBmYWN0b3IsIGEgZ29vZCBhbGdvcml0aG0gZm9yIGltcGxlbWVudGluZyBmcmFtZSBza2lwcGluZyBpcyB0byBzZW5kIGF1ZGlvIGluCi1jaHVua3Mgb2YgTm1zICh1c3VhbGx5IDMwMG1zIGlzIGdvb2QpIGFuZCB0aGVuIHNraXAgKChTLTEpICogTm5zKSBvZiBhdWRpbyBkYXRhLgotRm9yIHRoZSB2aWRlbyB3ZSBzZW5kIG9ubHkgdGhlIGtleWZyYW1lcyBpbiB0aGUgKFMgKiBObnMpIGludGVydmFsLiBJbiB0aGlzCi1jYXNlLCB0aGUgZGVtdXhlciB3b3VsZCBzY2FsZSB0aGUgdGltZXN0YW1wcyBhbmQgd291bGQgc2V0IGFuIGFwcGxpZWQgcmF0ZSBvZiBTLgotCi0KLWNsaWVudCBzaWRlIGJhY2t3YXJkcyB0cmlja21vZGUgCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLUZvciBiYWNrd2FyZHMgcGxheWJhY2sgdGhlIGZvbGxvd2luZyBydWxlcyBhcHBseToKLQotIC0gdGhlIHJhdGUgaW4gdGhlIFNFR01FTlQgaXMgbGVzcyB0aGFuIDAuMC4KLSAtIHRoZSBTRUdNRU5UIHN0YXJ0IHBvc2l0aW9uIGlzIGxlc3MgdGhhbiB0aGUgc3RvcCBwb3NpdGlvbiwgcGxheWJhY2sgd2lsbAotICAgaG93ZXZlciBoYXBwZW4gZnJvbSBzdG9wIHRvIHN0YXJ0IGluIHJldmVyc2UuCi0gLSB0aGUgdGltZSBtZW1iZXIgaW4gdGhlIFNFR01FTlQgaXMgc2V0IHRvIHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgc3RhcnQKLSAgIHBvc2l0aW9uLgotCi1Gb3IgcGx1Z2lucyB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5OgotICAgCi0gLSBBIHNvdXJjZSBwbHVnaW4gc2VuZHMgZGF0YSBpbiBjaHVua3Mgc3RhcnRpbmcgZnJvbSB0aGUgbGFzdCBjaHVuayBvZiB0aGUKLSAgIGZpbGUuIFRoZSBhY3R1YWwgYnl0ZXMgYXJlIG5vdCByZXZlcnNlZC4gRWFjaCBjaHVuayB0aGF0IGlzIG5vdCBmb3J3YXJkCi0gICBjb250aW51b3VzIHdpdGggdGhlIHByZXZpb3VzIGNodW5rIGlzIG1hcmtlZCB3aXRoIGEgRElTQ09OVCBmbGFnLgotCi0gLSBBIGRlbXV4ZXIgYWNjdW11bGF0ZXMgdGhlIGNodW5rcy4gQXMgc29vbiBhcyBhIGtleWZyYW1lIGlzIGZvdW5kLCBldmVyeXRoaW5nCi0gICBzdGFydGluZyBmcm9tIHRoZSBrZXlmcmFtZSB1cCB0byB0aGUgYWNjdW11bGF0ZWQgZGF0YSBpcyBzZW50IGRvd25zdHJlYW0uCi0gICBUaW1lc3RhbXBzIG9uIHRoZSBidWZmZXJzIGFyZSBzZXQgc3RhcnRpbmcgZnJvbSB0aGUgc3RvcCBwb3NpdGlvbiB0byBzdGFydCwKLSAgIGVmZmVjdGl2ZWx5IGdvaW5nIGJhY2t3YXJkcy4gQ2h1bmtzIGFyZSBtYXJrZWQgd2l0aCBESVNDT05UIHdoZW4gdGhleSBhcmUgbm90Ci0gICBmb3J3YXJkIGNvbnRpbnVvdXMgd2l0aCB0aGUgcHJldmlvdXMgYnVmZmVyLgotCi0gLSBBIHZpZGVvIGRlY29kZXIgZGVjb2RlcyBhbmQgYWNjdW11bGF0ZXMgYWxsIGRlY29kZWQgZnJhbWVzLiBJZiBhIGJ1ZmZlciB3aXRoCi0gICBhIERJU0NPTlQsIFNFR01FTlQgb3IgRU9TIGlzIHJlY2VpdmVkLCBhbGwgYWNjdW11bGF0ZWQgZnJhbWVzIGFyZSBzZW50Ci0gICBkb3duc3RlYW0gaW4gcmV2ZXJzZS4KLQotIC0gQW4gYXVkaW8gZGVjb2RlciBkZWNvZGVzIGFuZCBhY2N1bXVsYXRlcyBhbGwgZGVjb2RlZCBhdWRpby4gSWYgYSBidWZmZXIgd2l0aAotICAgYSBESVNDT05ULCBTRUdNRU5UIG9yIEVPUyBpcyByZWNlaXZlZCwgYWxsIGFjY3VtdWxhdGVkIGF1ZGlvIGlzIHNlbnQKLSAgIGRvd25zdHJlYW0gaW4gcmV2ZXJzZSBvcmRlci4gU29tZSBhdWRpbyBjb2RlY3MgbmVlZCB0aGUgcHJldmlvdXMKLSAgIGRhdGEgYnVmZmVyIHRvIGRlY29kZSB0aGUgY3VycmVudCBvbmUsIGluIHRoYXQgY2FzZSwgdGhlIHByZXZpb3VzIERJU0NPTlQKLSAgIGJ1ZmZlciBuZWVkcyB0byBiZSBjb21iaW5lZCB3aXRoIHRoZSBsYXN0IG5vbi1ESVNDT05UIGJ1ZmZlciB0byBnZW5lcmF0ZSB0aGUKLSAgIGxhc3QgYml0IG9mIG91dHB1dC4KLQotIC0gQSBzaW5rIHJldmVyc2VzIChmb3IgYXVkaW8pIGFuZCByZXRpbWVzdGFtcHMgKGF1ZGlvLCB2aWRlbykgdGhlIGJ1ZmZlcnMKLSAgIGJlZm9yZSBwbGF5aW5nIHRoZW0gYmFjay4gUmV0aW1lc3RhbXBpbmcgb2NjdXJzIHJlbGF0aXZlIHRvIHRoZSBzdG9wCi0gICBwb3NpdGlvbiwgbWFraW5nIHRoZSB0aW1lc3RhbXBzIGluY3JlYXNlIGFnYWluIGFuZCBzdWl0YWJsZSBmb3Igc3luY2hyb25pemluZwotICAgYWdhaW5zdCB0aGUgY2xvY2suCi0gICBBdWRpbyBzaW5rcyBhbHNvIGhhdmUgdG8gcGVyZm9ybSBzaW1wbGUgcmVzYW1wbGluZyBiZWZvcmUgcGxheWluZyB0aGUKLSAgIHNhbXBsZXMuCi0KLSAtIGZvciB0cmFuc2NvZGluZywgYXVkaW8gYW5kIHZpZGVvIHJlc2FtcGxlcnMgY2FuIGJlIHVzZWQgdG8gcmV2ZXJzZSwgcmVzYW1wbGUKLSAgIGFuZCByZXRpbWVzdGFtcCB0aGUgYnVmZmVycy4gQW55IHJhdGUgYWRqdXN0bWVudHMgcGVyZm9ybWVkIG9uIHRoZSBtZWRpYSBtdXN0Ci0gICBiZSBhZGRlZCB0byB0aGUgYXBwbGllZF9yYXRlIGFuZCBzdWJ0cmFjdGVkIGZyb20gdGhlIHJhdGUgbWVtYmVycyBpbiB0aGUKLSAgIFNFR01FTlQgZXZlbnQuCi0KLSBJbiBTS0lQIG1vZGUsIHRoZSBzYW1lIGFsZ29yaXRobSBhcyBmb3IgZm9yd2FyZCBTS0lQIG1vZGUgY2FuIGJlIHVzZWQuCi0KLQotTm90ZXMKLX5+fn5+Ci0KLSAtIFRoZSBjbG9jay9ydW5uaW5nX3RpbWUga2VlcHMgcnVubmluZyBmb3J3YXJkLgotIC0gYmFja3dhcmRzIHBsYXliYWNrIHBvdGVudGlhbGx5IHVzZXMgYSBsb3Qgb2YgbWVtb3J5IGFzIGZyYW1lcyBhbmQgdW5kZWNvZGVkCi0gICBkYXRhIGdldHMgYnVmZmVyZWQuCi0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvTWFrZWZpbGUuYW0gYi9kb2NzL2ZhcS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM1ZWJiOS4uMDAwMDAwMAotLS0gYS9kb2NzL2ZhcS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMjIyB0aGlzIGlzIHRoZSBwYXJ0IHlvdSBjYW4gY3VzdG9taXplIGlmIHlvdSBuZWVkIHRvCi0KLSMgYmFzZSBuYW1lIG9mIGRvYwotRE9DID0gZmFxCi0jIGZvcm1hdHMgZGVmaW5lZCBmb3IgdXBsb2FkLWRvYy5tYWsKLUZPUk1BVFM9aHRtbCBwcyBwZGYKLQotIyBtYWluIHhtbCBmaWxlCi1NQUlOID0gJChET0MpLnhtbAotIyBhbGwgeG1sIHNvdXJjZXMKLVhNTCA9ICQobm90ZGlyICQod2lsZGNhcmQgJChzcmNkaXIpLyoueG1sKSkKLSMgYmFzZSBzdHlsZSBzaGVldAotQ1NTID0gYmFzZS5jc3MKLQotIyBpbWFnZSBzb3VyY2VzCi1QTkdfU1JDID0gCi1GSUdfU1JDID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi5maWcpKQotCi0jIGV4dHJhIHNvdXJjZXMgdG8gY29weSBpbiBidWlsZCBkaXJlY3RvcnkKLUVYVFJBX1NSQyA9IAotCi0jIyMgdGhpcyBpcyB0aGUgZ2VuZXJpYyBiaXQgYW5kIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgdGhpcwotCi0jIGdldCB0aGUgZ2VuZXJpYyBkb2NidWlsZGluZyBNYWtlZmlsZSBzdHVmZgotaW5jbHVkZSAkKHNyY2RpcikvLi4vbWFudWFscy5tYWsKLSMgZ2V0IHRoZSBnZW5lcmljIHVwbG9hZCB0YXJnZXQKLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKLQotIyMjIHRoaXMgaXMgc3RhbmRhcmQgYXV0b21ha2Ugc3R1ZmYKLQotIyBwYWNrYWdlIHVwIGFsbCB0aGUgc291cmNlCi1FWFRSQV9ESVNUID0gJChTUkMpCi0KLSMgaW5zdGFsbCBkb2N1bWVudGF0aW9uCi1mYXFkaXIgPSAkKGRvY2RpcikvJChET0MpCi1mYXFfREFUQSA9ICQoUERGX0RBVCkgJChQU19EQVQpCi0KLWluY2x1ZGUgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hawpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvTWFrZWZpbGUuaW4gYi9kb2NzL2ZhcS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0M2JlNi4uMDAwMDAwMAotLS0gYS9kb2NzL2ZhcS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDk4OCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotIyMjIHRoaXMgaXMgdGhlIHBhcnQgeW91IGNhbiBjdXN0b21pemUgaWYgeW91IG5lZWQgdG8KLQotIyMjIFRoZXNlIGFyZSBhbGwgZ2VuZXJpYzsgd2Ugc2V0IGFsbCB0aGUgdmFyaWFibGVzIHdlIG5lZWQKLQotIyB0aGlzIHNuaXBwZXQgaXMgdG8gYmUgaW5jbHVkZWQgYnkgYm90aCBvdXIgZG9jYm9vayBtYW51YWxzCi0jIGFuZCBndGstZG9jIEFQSSByZWZlcmVuY2VzCi0KLSMgaXQgYWRkcyBhbiB1cGxvYWQgdGFyZ2V0IHRvIGVhY2ggb2YgdGhlc2UgZGlyJ3MgTWFrZWZpbGVzCi0KLSMgZWFjaCBNYWtlZmlsZS5hbSBzaG91bGQgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgotIyAtIERPQzogdGhlIGJhc2UgbmFtZSBvZiB0aGUgZG9jdW1lbnRhdGlvbgotIyAgICAgICAgKGZhcSwgbWFudWFsLCBwd2csIGdzdHJlYW1lciwgZ3N0cmVhbWVyLWxpYnMpCi0jIC0gRk9STUFUUzogdGhlIGZvcm1hdHMgaW4gd2hpY2ggRE9DIGlzIG91dHB1dAotIyAgICAgICAgICAgIChodG1sIHBzIHBkZikKLQotIyBpZiB5b3Ugd2FudCB0byB1c2UgaXQsIG1ha2Ugc3VyZSB5b3VyICRIT01FLy5zc2gvY29uZmlnIGZpbGUgY29udGFpbnMgdGhlCi0jIGNvcnJlY3QgVXNlciBlbnRyeSBmb3IgdGhlIEhvc3QgZW50cnkgZm9yIHRoZSBET0NfU0VSVkVSCi0KLSMgdGhpcyBmaWxlIGFkZHMgcnVsZXMgZm9yIGluc3RhbGxpbmcgaHRtbCBzdWJ0cmVlcwotIyBJIHJlYWxseSBkb24ndCBsaWtlIHRoaXMgaGFjaywgYnV0IGF1dG9tYWtlIGRvZXNuJ3Qgc2VlbSB0byB3YW50IHRvCi0jIGluc3RhbGwgZGlyZWN0b3J5IHRyZWVzIDooCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGRvY3MvZmFxCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChmYXFkaXIpIgotREFUQSA9ICQoZmFxX0RBVEEpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hayBcCi0JJChzcmNkaXIpLy4uL21hbnVhbHMubWFrICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotCi0jIGJhc2UgbmFtZSBvZiBkb2MKLURPQyA9IGZhcQotIyBmb3JtYXRzIGRlZmluZWQgZm9yIHVwbG9hZC1kb2MubWFrCi1GT1JNQVRTID0gaHRtbCBwcyBwZGYKLQotIyBtYWluIHhtbCBmaWxlCi1NQUlOID0gJChET0MpLnhtbAotIyBhbGwgeG1sIHNvdXJjZXMKLVhNTCA9ICQobm90ZGlyICQod2lsZGNhcmQgJChzcmNkaXIpLyoueG1sKSkKLSMgYmFzZSBzdHlsZSBzaGVldAotQ1NTID0gYmFzZS5jc3MKLQotIyBpbWFnZSBzb3VyY2VzCi1QTkdfU1JDID0gCi1GSUdfU1JDID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi5maWcpKQotCi0jIGV4dHJhIHNvdXJjZXMgdG8gY29weSBpbiBidWlsZCBkaXJlY3RvcnkKLUVYVFJBX1NSQyA9IAotCi0jIGludGVybWVkaWFyeSBidWlsZCBwYXRoCi1CVUlMRERJUiA9IGJ1aWxkCi0jIHNhbWUgZm9yIGltYWdlcwotQlVJTERJTUFHRVNESVIgPSAkKEJVSUxERElSKS9pbWFnZXMKLQotIyBpbWFnZXMKLSMgcmlnaHQgbm93LCB3ZSBvbmx5IGFsbG93IC5wbmcgYW5kIC5maWcgYXMgc291cmNlCi0jIHdlIG1pZ2h0IGFkZCBtb3JlIGxhdGVyIGlmIHdlIGZlZWwgdGhlIG5lZWQKLQotIyBQTkcncyBjYW4gYmUgc291cmNlIG9yIGJ1aWx0IGZyb20gLmZpZwotUE5HID0gJChzdHJpcCAkKFBOR19TUkMpICQoRklHX1NSQzouZmlnPS5wbmcpKQotIyBFUFMgLnBzIGZpbGVzIGNhbiBiZSBidWlsdCBmcm9tIC5wbmcgb3IgLmZpZwotRVBTID0gJChzdHJpcCAkKEZJR19TUkM6LmZpZz0ucHMpICQoUE5HX1NSQzoucG5nPS5wcykpCi0jIFBERiAucGRmIGZpbGVzIGNhbiBiZSBidWlsdCBmcm9tIC5wbmcgb3IgLmZpZwotUERGID0gJChzdHJpcCAkKEZJR19TUkM6LmZpZz0ucGRmKSAkKFBOR19TUkM6LnBuZz0ucGRmKSkKLQotIyB3aGVyZSB3ZSBleHBlY3QgdG8gZmluZCBpbWFnZXMgZHVyaW5nIGJ1aWxkaW5nLCB3aGV0aGVyIGJ5IGNvcHlpbmcKLSMgb3IgYnkgZ2VuZXJhdGluZyB0aGVtCi1QTkdfQlVJTFQgPSAkKGZvcmVhY2ggZmlsZSwgJChQTkcpLCAkKEJVSUxESU1BR0VTRElSKS8kKGZpbGUpKQotRVBTX0JVSUxUID0gJChmb3JlYWNoIGZpbGUsICQoRVBTKSwgJChCVUlMRElNQUdFU0RJUikvJChmaWxlKSkKLVBERl9CVUlMVCA9ICQoZm9yZWFjaCBmaWxlLCAkKFBERiksICQoQlVJTERJTUFHRVNESVIpLyQoZmlsZSkpCi1TUkMgPSAkKFhNTCkgJChQTkdfU1JDKSAkKEZJR19TUkMpICQoQ1NTKSAkKEVYVFJBX1NSQykKLQotIyBnZW5lcmF0ZSBBNCBkb2NzCi1QQVBFUl9MT0NBTEUgPSBubF9OTAotQERPQ19IVE1MX0ZBTFNFQEhUTUxfREFUID0gCi0KLSMgY2FuIHdlIGdlbmVyYXRlIEhUTUwgPwotQERPQ19IVE1MX1RSVUVASFRNTF9EQVQgPSBodG1sCi1ARE9DX0hUTUxfRkFMU0VASFRNTF9UQVJHRVQgPSAKLUBET0NfSFRNTF9UUlVFQEhUTUxfVEFSR0VUID0gaHRtbC9pbmRleC5odG1sCi1ARE9DX1BTX0ZBTFNFQFBTX0RBVCA9IAotCi0jIGNhbiB3ZSBnZW5lcmF0ZSBQUyA/Ci1ARE9DX1BTX1RSVUVAUFNfREFUID0gJChET0MpLnBzCi1ARE9DX1BERl9GQUxTRUBQREZfREFUID0gCi0KLSMgY2FuIHdlIGdlbmVyYXRlIFBERiA/Ci1ARE9DX1BERl9UUlVFQFBERl9EQVQgPSAkKERPQykucGRmCi0KLSMgdGhlc2UgdmFyaWFibGVzIGRlZmluZSB0aGUgbG9jYXRpb24gb2YgdGhlIG9ubGluZSBkb2NzCi1ET0NfU0VSVkVSID0gZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZwotRE9DX0JBU0UgPSAvc3J2L2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvd3d3L2RhdGEvZG9jCi1ET0NfVVJMID0gJChET0NfU0VSVkVSKTokKERPQ19CQVNFKQotCi0jIyMgdGhpcyBpcyB0aGUgZ2VuZXJpYyBiaXQgYW5kIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgdGhpcwotCi0jIGdldCB0aGUgZ2VuZXJpYyBkb2NidWlsZGluZyBNYWtlZmlsZSBzdHVmZgotIyBnZXQgdGhlIGdlbmVyaWMgdXBsb2FkIHRhcmdldAotCi0jIyMgdGhpcyBpcyBzdGFuZGFyZCBhdXRvbWFrZSBzdHVmZgotCi0jIHBhY2thZ2UgdXAgYWxsIHRoZSBzb3VyY2UKLUVYVFJBX0RJU1QgPSAkKFNSQykKLQotIyBpbnN0YWxsIGRvY3VtZW50YXRpb24KLWZhcWRpciA9ICQoZG9jZGlyKS8kKERPQykKLWZhcV9EQVRBID0gJChQREZfREFUKSAkKFBTX0RBVCkKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpLy4uL21hbnVhbHMubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrICQoc3JjZGlyKS8uLi9odG1saW5zdGFsbC5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9mYXEvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9mYXEvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotJChzcmNkaXIpLy4uL21hbnVhbHMubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrICQoc3JjZGlyKS8uLi9odG1saW5zdGFsbC5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi1pbnN0YWxsLWZhcURBVEE6ICQoZmFxX0RBVEEpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQoZmFxX0RBVEEpJzsgdGVzdCAtbiAiJChmYXFkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGZhcWRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoZmFxZGlyKSIgfHwgZXhpdCAxOyBcCi0JZmk7IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBlY2hvICIkJGQkJHAiOyBcCi0JZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCi0Jd2hpbGUgcmVhZCBmaWxlczsgZG8gXAotCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChmYXFkaXIpJyI7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChmYXFkaXIpIiB8fCBleGl0ICQkPzsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWZhcURBVEE6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChmYXFfREFUQSknOyB0ZXN0IC1uICIkKGZhcWRpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKLQlkaXI9JyQoREVTVERJUikkKGZhcWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCi10YWdzIFRBR1M6Ci0KLWN0YWdzIENUQUdTOgotCi1jc2NvcGUgY3Njb3BlbGlzdDoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1sb2NhbAotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoREFUQSkgYWxsLWxvY2FsCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChmYXFkaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1mYXFEQVRBCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmLWFtOgotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtZmFxREFUQSB1bmluc3RhbGwtbG9jYWwKLQotLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNoZWNrLWxvY2FsIGNsZWFuIFwKLQljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBcCi0JZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKLQlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAotCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZmFxREFUQSBcCi0JaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKLQlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIFwKLQlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCi0JaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKLQlwcyBwcy1hbSB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWZhcURBVEEgXAotCXVuaW5zdGFsbC1sb2NhbAotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyMjIGdlbmVyYXRlIGFsbCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHQKLSMgaG9vayBpbiBodG1sIGdlbmVyYXRpb24KLWFsbC1sb2NhbDogaHRtbAotaHRtbDogJChIVE1MX1RBUkdFVCkKLXBzOiAkKFBTX0RBVCkKLXBkZjogJChQREZfREFUKQotCi1kZWJ1ZzoKLQlAZWNobyAib3V0cHV0dGluZyBzb21lIHVzZWZ1bCBkZWJ1ZyBpbmZvcm1hdGlvbiIKLQlAZWNobyAiU291cmNlIFhNTDoiCi0JQGVjaG8gIlhNTDogJyQoWE1MKSciCi0JQGVjaG8gIkNTUzogJyQoQ1NTKSciCi0JQGVjaG8gIlNvdXJjZSBpbWFnZSBmaWxlczoiCi0JQGVjaG8gIlBOR19TUkM6ICckKFBOR19TUkMpJyIKLQlAZWNobyAiRklHX1NSQzogJyQoRklHX1NSQyknIgotCUBlY2hvICJBbGwgdXNlZCBpbWFnZSBmaWxlczoiCi0JQGVjaG8gIlBORzogJyQoUE5HKSciCi0JQGVjaG8gIkVQUzogJyQoRVBTKSciCi0JQGVjaG8gIlBERjogJyQoUERGKSciCi0JQGVjaG8gIkFsbCB1c2VkIGltYWdlIGZpbGVzIGluIHRoZWlyIGJ1aWx0IHBhdGg6IgotCUBlY2hvICJQTkdfQlVJTFQ6ICckKFBOR19CVUlMVCknIgotCUBlY2hvICJFUFNfQlVJTFQ6ICckKEVQU19CVUlMVCknIgotCUBlY2hvICJQREZfQlVJTFQ6ICckKFBERl9CVUlMVCknIgotCUBlY2hvICJFbmQgcmVzdWx0IHByb2R1Y3RzOiIKLQlAZWNobyAiSFRNTF9EQVQ6ICckKEhUTUxfREFUKSciCi0JQGVjaG8gIlBTX0RBVDogICAnJChQU19EQVQpJyIKLQlAZWNobyAiUERGX0RBVDogICckKFBERl9EQVQpJyIKLQotIyBhIHJ1bGUgdG8gY29weSBhbGwgb2YgdGhlIHNvdXJjZSBmb3IgZG9jcyBpbnRvICQoYnVpbGRkaXIpL2J1aWxkCi0kKEJVSUxERElSKS8kKE1BSU4pOiAkKFhNTCkgJChDU1MpICQoRVhUUkFfU1JDKQotCUAtbWtkaXIgLXAgJChCVUlMRERJUik7IFwKLQlpZiB0ZXN0ICJ4JChFWFRSQV9TUkMpIiAhPSAieCI7IHRoZW4gZm9yIGEgaW4gJChFWFRSQV9TUkMpOyBkbyBjcCAkKHNyY2RpcikvJCRhICQoQlVJTERESVIpOyBkb25lOyBmaSA7IFwKLQlmb3IgYSBpbiAkKFhNTCk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmUgOyBcCi0JZm9yIGEgaW4gJChDU1MpOyBkbyBjcCAkKHNyY2RpcikvJCRhICQoQlVJTERESVIpOyBkb25lIDsgXAotCWNwIC4uL3ZlcnNpb24uZW50aXRpZXMgJChCVUlMRERJUikgOyBcCi0JY3AgJCh0b3Bfc3JjZGlyKS9kb2NzL3VybC5lbnRpdGllcyAkKEJVSUxERElSKQotCi1odG1sL2luZGV4Lmh0bWw6ICQoQlVJTERESVIpLyQoTUFJTikgJChQTkdfQlVJTFQpICQoRklHX1NSQykKLQlAJChNQUtFKSBjaGVjay1sb2NhbAotCUBlY2hvICIqKiogR2VuZXJhdGluZyBIVE1MIG91dHB1dCAqKioiCi0JQC1ta2RpciAtcCBodG1sCi0JQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1wbmcgJChCVUlMRERJUikvaW1hZ2UuZW50aXRpZXMKLQlAY2QgJChCVUlMRERJUikgJiYgJChYU0xUUFJPQykgLW8gLi4vaHRtbC8gLS1zdHJpbmdwYXJhbSBjaHVua2VyLm91dHB1dC5lbmNvZGluZyBVVEYtOCAtLXN0cmluZ3BhcmFtICB1c2UuaWQuYXMuZmlsZW5hbWUgMSAkKFhTTFRQUk9DX0ZMQUdTKSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQvaHRtbC9jaHVuay54c2wiICQoTUFJTikKLQlAdGVzdCAieCQoQ1NTKSIgIT0gIngiICYmIFwKLSAgICAgICAgICBlY2hvICJDb3B5aW5nIC5jc3MgZmlsZXM6ICQoQ1NTKSIgJiYgXAotICAgICAgICAgIGNwICQoc3JjZGlyKS8kKENTUykgaHRtbAotCUB0ZXN0ICJ4JChQTkcpIiAhPSAieCIgJiYgXAotICAgICAgICAgIGVjaG8gIkNvcHlpbmcgLnBuZyBpbWFnZXM6ICQoUE5HX0JVSUxUKSIgJiYgXAotCSAgbWtkaXIgLXAgaHRtbC9pbWFnZXMgJiYgXAotICAgICAgICAgIGNwICQoUE5HX0JVSUxUKSBodG1sL2ltYWdlcyB8fCB0cnVlCi0KLSQoRE9DKS5wczogJChCVUlMRERJUikvJChNQUlOKSAkKEVQU19CVUlMVCkgJChQTkdfU1JDKSAkKEZJR19TUkMpCi0JQCQoTUFLRSkgY2hlY2stbG9jYWwKLQlAZWNobyAiKioqIEdlbmVyYXRpbmcgUFMgb3V0cHV0ICoqKiIKLQlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLWVwcyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcwotCWNkICQoQlVJTERESVIpICYmIFNQX0VOQ09ESU5HPSJVVEYtOCIgZG9jYm9vazJwcyAtbyAuLiAkKE1BSU4pCi0jCWV4cG9ydCBMQ19QQVBFUj0kKFBBUEVSX0xPQ0FMRSkgJiYgY2QgJChCVUlMRERJUikgJiYgeG1sdG8gcHMgLW8gLi4gJChNQUlOKQotCi0kKERPQykucGRmOiAkKERPQykucHMKLQlAJChNQUtFKSBjaGVjay1sb2NhbAotCUBlY2hvICIqKiogR2VuZXJhdGluZyBQREYgb3V0cHV0ICoqKiIKLQlAcHMycGRmICQoRE9DKS5wcwotCi0jJChET0MpLnBkZjogJChNQUlOKSAkKFBERikgJChGSUdfU1JDKQotIwlAZWNobyAiKioqIEdlbmVyYXRpbmcgUERGIG91dHB1dCAqKioiCi0jCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtcGRmIGltYWdlLmVudGl0aWVzCi0jCUBleHBvcnQgTENfUEFQRVI9JChQQVBFUl9MT0NBTEUpICYmIHhtbHRvIHBkZiAkKE1BSU4pCi0jCUBybSBpbWFnZS5lbnRpdGllcwotCi1jbGVhbi1sb2NhbDoKLQktJChSTSkgLXIgJChCVUlMRERJUikKLQktJChSTSkgLXIgaHRtbAotCS0kKFJNKSAkKERPQykucHMKLQktJChSTSkgJChET0MpLnBkZgotCS0kKFJNKSAtciB3d3cKLQotIyMjIGltYWdlIGdlbmVyYXRpb24KLQotIyBjb3B5IHBuZyBmcm9tIHNvdXJjZSBkaXIgcG5nCi0kKEJVSUxESU1BR0VTRElSKS8lLnBuZzogJChzcmNkaXIpLyUucG5nCi0JQGVjaG8gIkNvcHlpbmcgJDwgdG8gJEAiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGNwICQ8ICRACi0jIG1ha2UgcG5nIGZyb20gZmlnCi0kKEJVSUxESU1BR0VTRElSKS8lLnBuZzogJS5maWcKLQlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgotCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQotCUBmaWcyZGV2IC1McG5nICQ8ICRACi0KLSMgbWFrZSBwcyhFUFMpIGZyb20gZmlnCi0kKEJVSUxESU1BR0VTRElSKS8lLnBzOiAlLmZpZwotCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGZpZzJkZXYgLUxlcHMgJDwgJEAKLQotIyBtYWtlIHBkZiBmcm9tIGZpZwotJChCVUlMRElNQUdFU0RJUikvJS5wZGY6ICUuZmlnCi0JQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKLQlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKLQlAZmlnMmRldiAtTHBkZiAkPCAkQAotCi0jIG1ha2UgcGRmIGZyb20gcG5nCi0kKEJVSUxESU1BR0VTRElSKS8lLnBkZjogJS5wbmcKLQlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgotCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQotCUBjYXQgJDwgfCBwbmd0b3BubSB8IHBubXRvcHMgLW5vdHVybiAyPiAvZGV2L251bGwgfCBlcHN0b3BkZiAtLWZpbHRlciAtLW91dGZpbGUgJEAgMj4gL2Rldi9udWxsCi0KLSMgbWFrZSBwcyhFUFMpIGZyb20gcG5nCi0kKEJVSUxESU1BR0VTRElSKS8lLnBzOiAlLnBuZwotCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGNhdCAkPCB8IHBuZ3RvcG5tIHwgcG5tdG9wcyAtbm90dXJuID4gJEAgMj4gL2Rldi9udWxsCi0KLSMgbWFrZSBzdXJlIHhtbCB2YWxpZGF0ZXMgcHJvcGVybHkKLWNoZWNrLWxvY2FsOiAkKEJVSUxERElSKS8kKE1BSU4pCi0JQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1wbmcgJChCVUlMRERJUikvaW1hZ2UuZW50aXRpZXMKLQlAY2QgJChCVUlMRERJUikgJiYgeG1sbGludCAtbm9vdXQgLXZhbGlkICQoTUFJTikKLQlAY2QgJChCVUlMRERJUikgJiYgXAotCWlmIFsgYHdoaWNoIGN1cmxgIF07IHRoZW4gXAotICAgIGxpbmtzPWAkKFhTTFRQUk9DKSAkKFhTTFRQUk9DX0ZMQUdTKSAtLXhpbmNsdWRlICQoYWJzX3RvcF9zcmNkaXIpL2RvY3MvbGlzdC11bGluay54c2wgJChNQUlOKSB8IGVncmVwICdeaHR0cCcgfCBzb3J0IHwgdW5pcWAgJiYgXAotICAgIGhhdmVfZXJyb3I9MCAmJiBcCi0gICAgZm9yIGxpbmsgaW4gJCRsaW5rczsgZG8gXAotICAgICAgY29kZT1gY3VybCAtcyAtbTIwIC1vIC9kZXYvbnVsbCAtSSAtdyAiJXtodHRwX2NvZGV9IiAkJGxpbmtgOyBcCi0gICAgICBpZiBbIFwoICQkPyAtbmUgMCBcKSAtbyBcKCAkJGNvZGUgLWd0IDM5OSBcKSBdOyB0aGVuIFwKLSAgICAgICAgZWNobyAiZXhpdF9zdGF0dXM9JCQ/LCBodHRwX2NvZGU9JCRjb2RlOiAkJGxpbmsiOyBcCi0gICAgICAgIGdyZXAgLUhuciAiJCRsaW5rIiAuOyBcCi0gICAgICAgIGhhdmVfZXJyb3I9MTsgXAotICAgICAgZmk7IFwKLSAgICBkb25lIFwKLSAgZmkKLQotIyBhdm9pZCAnY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGBidWlsZC9pbWFnZS5lbnRpdGllcyc6IEZpbGUgZXhpc3RzJwotIyBlcnJvcnMgZHVyaW5nICdtYWtlIGRpc3RjaGVjaycgYnkgZGlzYWJsaW5nIHBhcmFsbGVsIGJ1aWxkcwotLk5PVFBBUkFMTEVMOgotCi11cGxvYWQ6ICQoRk9STUFUUykKLQlAaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKLQkgIGVjaG8gIlByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCi0JICBpZiB0ZXN0IHgkKGJ1aWxkZGlyKSAhPSB4JChzcmNkaXIpOyB0aGVuIFwKLQkgICAgZWNobyAibWFrZSB1cGxvYWQgY2FuIG9ubHkgYmUgdXNlZCBpZiBzcmNkaXIgPT0gYnVpbGRkaXIiOyBcCi0JICAgIGV4aXQgMTsgXAotCSAgZmk7IFwKLQkgICMgZ3RrZG9jLXJlYmFzZSBzb21ldGltZXMgZ2V0cyBjb25mdXNlZCwgc28gcmVzZXQgZXZlcnl0aGluZyB0byBcCi0JICAjIGxvY2FsIGxpbmtzIGJlZm9yZSByZWJhc2luZyB0byBvbmxpbmUgbGlua3MgICAgICAgICAgICAgICAgICAgXAotCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgMj4vZGV2L251bGwgMj4vZGV2L251bGwgOyBcCi0JICByZWJhc2U9YGd0a2RvYy1yZWJhc2UgLS12ZXJib3NlIC0tb25saW5lIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbGAgOyBcCi0JICBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1lICJPbi0qbGluZSI7IFwKLQkgIGZvciByZXEgaW4gZ2xpYiBnb2JqZWN0IGdzdHJlYW1lciBnc3RyZWFtZXItbGlicyBnc3QtcGx1Z2lucy1iYXNlLWxpYnM7IGRvIFwKLQkgICAgaWYgISAoIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWkgLWUgIk9uLSpsaW5lLiovJCRyZXEvIiApOyB0aGVuIFwKLQkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKLQkgICAgICBlY2hvICIgQ291bGQgbm90IGRldGVybWluZSBvbmxpbmUgbG9jYXRpb24gZm9yICQkcmVxIGRvY3MuIENyb3NzLXJlZmVyZW5jaW5nIHdpbGwgYmUgIiA7IFwKLQkgICAgICBlY2hvICIgYnJva2VuLCBzbyBub3QgdXBsb2FkaW5nLiBNYWtlIHN1cmUgdGhlIGxpYnJhcnkncyBndGstZG9jIGRvY3VtZW50YXRpb24gaXMgICAgIiA7IFwKLQkgICAgICBlY2hvICIgaW5zdGFsbGVkIHNvbWV3aGVyZSBpbiAvdXNyL3NoYXJlL2d0ay1kb2MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA7IFwKLQkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKLQkgICAgICBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQkgIGV4cG9ydCBTUkM9IiQkU1JDIGh0bWwiOyBcCi0JZmk7IFwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBzID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wcyI7IGZpOyBcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwZGYgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBkZiI7IGZpOyBcCi0JXAotCSMgdXBsb2FkIHJlbGVhc2VzIHRvIGJvdGggWC5ZLyBhbmQgaGVhZC8gc3ViZGlyZWN0b3JpZXMgXAotCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyLyQoUEFDS0FHRV9WRVJTSU9OX01BSk9SKS4kKFBBQ0tBR0VfVkVSU0lPTl9NSU5PUikvJChET0MpOyBcCi0JZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCi0JcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCi0JXAotCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyL2hlYWQvJChET0MpOyBcCi0JZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCi0JcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCi0JXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICBlY2hvICJVbi1wcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAotCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgOyBcCi0JZmk7IFwKLQllY2hvIERvbmUKLQotQERPQ19IVE1MX1RSVUVAaW5zdGFsbC1kYXRhLWxvY2FsOiBodG1sCi1ARE9DX0hUTUxfVFJVRUAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKQotQERPQ19IVE1MX1RSVUVACWNwIC1wciAkKEhUTUxfREFUKSAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKQotCi1ARE9DX0hUTUxfVFJVRUB1bmluc3RhbGwtbG9jYWw6Ci1ARE9DX0hUTUxfVFJVRUAJZm9yIHBhcnQgaW4gJChIVE1MX0RBVCk7IGRvIHJtIC1yZiAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKS8kJHBhcnQ7IGRvbmUKLUBET0NfSFRNTF9GQUxTRUBpbnN0YWxsLWRhdGEtbG9jYWw6Ci1ARE9DX0hUTUxfRkFMU0VAdW5pbnN0YWxsLWxvY2FsOgotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL2ZhcS9iYXNlLmNzcyBiL2RvY3MvZmFxL2Jhc2UuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjRjMDc4Li4wMDAwMDAwCi0tLSBhL2RvY3MvZmFxL2Jhc2UuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1wcmUucHJvZ3JhbWxpc3RpbmcgeyAKLQkgYmFja2dyb3VuZDogI0U4RThGRjsKLX0KZGlmZiAtLWdpdCBhL2RvY3MvZmFxL2RlcGVuZGVuY2llcy54bWwgYi9kb2NzL2ZhcS9kZXBlbmRlbmNpZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmUwOTFjLi4wMDAwMDAwCi0tLSBhL2RvY3MvZmFxL2RlcGVuZGVuY2llcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08c2VjdDEgaWQ9ImNoYXB0ZXItZGVwZW5kZW5jaWVzIj4KLSAgPHRpdGxlIGlkPSJ0aXRsZS1kZXBlbmRlbmNpZXMiPkRlcGVuZGVuY2llczwvdGl0bGU+Ci0gIDxxYW5kYXNldCBkZWZhdWx0bGFiZWw9InFhbmRhIj4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJkZXBlbmRlbmNpZXMtd2h5LXNvLW1hbnkiPgotICAgICAgICA8cGFyYT5XaHkgYXJlIHRoZXJlIHNvIG1hbnkgZGVwZW5kZW5jaWVzID88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLU1ha2luZyBhIGZ1bGwtZmVhdHVyZWQgbWVkaWEgZnJhbWV3b3JrIGlzIGEgaHVnZSB1bmRlcnRha2luZyBpbiBpdHNlbGYuCi1CeSB1c2luZyB0aGUgd29yayBkb25lIGJ5IG90aGVycywgd2UgYm90aCByZWR1Y2UgdGhlIGFtb3VudCBvZiByZWR1bmRhbnQgd29yayAKLWJlaW5nIGRvbmUgYW5kIGxlYXZlIG91cnNlbHZlcyBmcmVlIHRvIHdvcmsgb24gdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYgCi1pbnN0ZWFkIG9mIHdvcmtpbmcgb24gdGhlIGxvdy1sZXZlbCBzdHVmZi4gIFdlIHdvdWxkIGJlIHN0dXBpZCBub3QgdG8gcmV1c2UKLXRoZSBjb2RlIG90aGVycyBoYXZlIHdyaXR0ZW4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1Ib3dldmVyLCBkbyByZWFsaXplIHRoYXQgaW4gbm8gd2F5IHlvdSBhcmUgZm9yY2VkIHRvIGhhdmUgYWxsIGRlcGVuZGVuY2llcwotaW5zdGFsbGVkLiAgTm9uZSBvZiB0aGUgY29yZSBkZXZlbG9wZXJzIGhhcyBhbGwgb2YgdGhlbSBpbnN0YWxsZWQuICBHU3RyZWFtZXIKLWhhcyBvbmx5IGEgZmV3IG9ibGlnYXRlIGRlcGVuZGVuY2llcyA6IEdMaWIgMi4wLCBsaWJvcmMsIGFuZCB2ZXJ5Ci1jb21tb24gc3R1ZmYgbGlrZSBnbGliYywgYSBDIGNvbXBpbGVyLCBhbmQgc28gb24uICBBbGwgb2YgdGhlIG90aGVyCi1kZXBlbmRlbmNpZXMgYXJlIG9wdGlvbmFsLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotU28sIGluIGNsb3NpbmcsIGxldCdzIHJlcGhyYXNlIHRoZSBxdWVzdGlvbiB0byAKLTxxdW90ZT5XaHkgYXJlIHlvdSBnaXZpbmcgbWUgc28gbWFueSBjaG9pY2VzIGFuZCBzdWNoIGEgcmljaCBlbnZpcm9ubWVudCA/Ci08L3F1b3RlPgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZGVwZW5kZW5jaWVzLXgiPgotICAgICAgICA8cGFyYT5JcyBHU3RyZWFtZXIgWCBpbmRlcGVuZGVudCA/PC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1ZZXMsIHdlIGhhdmUgbm8gaGFyZCBYIGRlcGVuZGVuY3kgaW4gYW55IG9mIG91ciBtb2R1bGVzLiBUaGVyZSBhcmUgbWFueQotR1N0cmVhbWVyIGFwcGxpY2F0aW9ucyB0aGF0IHJ1biBmaW5lIHdpdGhvdXQgYW55IG5lZWQgZm9yIFgsIGZvciBleGFtcGxlCi1zdHJlYW1pbmcgc2VydmVycywgdHJhbnNjb2RpbmcgYXBwbGljYXRpb25zLCBvciBhdWRpbyBhcHBsaWNhdGlvbnMgdGhhdAotZG9uJ3Qgb3V0cHV0IGFueSB2aWRlby4gT3RoZXIgYXBwbGljYXRpb25zIG91dHB1dCB2aWRlbyB0byBhIGZyYW1lYnVmZmVyLAotY3VzdG9tLW1hZGUgaGFyZHdhcmUgc2lua3MsIG9yIHZpYSB3YXlsYW5kLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZGVwZW5kZW5jaWVzLWxhZHNwYSI+Ci0gICAgICAgIDxwYXJhPldoYXQgaXMgR1N0cmVhbWVyJ3MgcG9zaXRpb24gb24gZWZmb3J0cyBzdWNoIGFzIExBRFNQQSA/PC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1HU3RyZWFtZXIgYWN0aXZlbHkgc3VwcG9ydHMgc3VjaCBlZmZvcnRzLCBhbmQgaW4gdGhlIGNhc2Ugb2YgCi08dWxpbmsgdXJsPSJodHRwOi8vd3d3LmxhZHNwYS5vcmcvIj48Y2l0ZXRpdGxlPkxBRFNQQTwvY2l0ZXRpdGxlPjwvdWxpbms+LAotd2UgYWxyZWFkeSBoYXZlIGEgd3JhcHBlciBwbHVnaW4uIFRoaXMgd3JhcHBlciBwbHVnLWluIGRldGVjdHMgdGhlIExBRFNQQQotcGx1Z2lucyBwcmVzZW50IG9uIHlvdXIgc3lzdGVtIGF0IHJ1biB0aW1lLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZGVwZW5kZW5jaWVzLW1pZGkiPgotICAgICAgICA8cGFyYT5Eb2VzIEdTdHJlYW1lciBzdXBwb3J0IE1JREkgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotTm90IHlldC4gVGhlIEdTdHJlYW1lciBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIGFibGUgdG8gc3VwcG9ydCB0aGUgbmVlZHMgb2YgCi1NSURJIGFwcGxpY2F0aW9ucyB2ZXJ5IHdlbGwgaG93ZXZlci4gSWYgeW91IGFyZSBhIGRldmVsb3BlciBpbnRlcmVzdGVkIGluIAotYWRkaW5nIE1JREkgc3VwcG9ydCB0byBHU3RyZWFtZXIgd2UgYXJlIHZlcnkgaW50ZXJlc3RlZCBpbiBnZXR0aW5nIGluIHRvdWNoIAotd2l0aCB5b3UuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1NSURJIHBsYXliYWNrIGlzIHByb3ZpZGVkIGJ5IHBsdWdpbnMgc3VjaCBhcyB3aWxkbWlkaSBhbmQgdGltaWRpdHkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJkZXBlbmRlbmNpZXMtZ25vbWUiPgotICAgICAgICA8cGFyYT5Eb2VzIEdTdHJlYW1lciBkZXBlbmQgb24gR05PTUUgb3IgR1RLKyA/PC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1Oby4gQnV0IG1hbnkgb2YgdGhlIGFwcGxpY2F0aW9ucyBkZXZlbG9wZWQgZm9yIEdTdHJlYW1lciBkbywgaW5jbHVkaW5nIHNvbWUKLW9mIG91ciBzYW1wbGUgYXBwbGljYXRpb25zLiBPdGhlciBhcHBsaWNhdGlvbnMgdXNlIHRoZSBRdCB0b29sa2l0LCBvciBhcmUKLXdyaXR0ZW4gZm9yIE1hYyBPUy9YIG9yIFdpbmRvd3MuIFdlIGFpbSB0byBwcm92aWRlIEFQSSB0aGF0IGlzIHRvb2xraXQKLWFnbm9zdGljIGFuZCBjYW4gYmUgdXNlZCBmcm9tIGFueSB0b29sa2l0LCBkZXNrdG9wIGVudmlyb25tZW50IG9yIG9wZXJhdGluZwotc3lzdGVtLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0gIDwvcWFuZGFzZXQ+Ci08L3NlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvZGV2ZWxvcGluZy54bWwgYi9kb2NzL2ZhcS9kZXZlbG9waW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY5YTM4OC4uMDAwMDAwMAotLS0gYS9kb2NzL2ZhcS9kZXZlbG9waW5nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi08c2VjdDEgaWQ9ImNoYXB0ZXItZGV2ZWxvcGluZyI+Ci0gIDx0aXRsZSBpZD0idGl0bGUtZGV2ZWxvcGluZyI+RGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMgd2l0aCBHU3RyZWFtZXI8L3RpdGxlPgotICA8cWFuZGFzZXQgZGVmYXVsdGxhYmVsPSJxYW5kYSI+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZGV2ZWxvcGluZy1jb21waWxlLXByb2dyYW1zIj4KLSAgICAgICAgPHBhcmE+SG93IGRvIEkgY29tcGlsZSBwcm9ncmFtcyB0aGF0IHVzZSBHU3RyZWFtZXIgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotR1N0cmVhbWVyIHVzZXMgcGtnLWNvbmZpZyB0byBhc3Npc3QgYXBwbGljYXRpb25zIHdpdGggY29tcGlsYXRpb24gYW5kIAotbGlua2luZyBmbGFncy4gCi1wa2ctY29uZmlnIGlzIGFscmVhZHkgdXNlZCBieSBHVEsrLCBHTk9NRSwgU0RMLCBhbmQgb3RoZXJzOyBzbyBpZiB5b3UgYXJlIAotZmFtaWxpYXIgd2l0aCB1c2luZyBpdCBmb3IgYW55IG9mIHRob3NlLCB5b3UncmUgc2V0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotSWYgeW91J3JlIG5vdCBmYW1pbGlhciB3aXRoIHBrZy1jb25maWcgdG8gY29tcGlsZSBhbmQgbGluayBhIHNtYWxsIAotb25lLWZpbGUgcHJvZ3JhbSwgcGFzcyB0aGUgLS1jZmxhZ3MgYW5kIC0tbGlicyBhcmd1bWVudHMgdG8gcGtnLWNvbmZpZy4KLUZvciBleGFtcGxlOgotPHByb2dyYW1saXN0aW5nPgotJCBsaWJ0b29sIC0tbW9kZT1saW5rIGdjYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgZ3N0cmVhbWVyLSZHU1RfQVBJX1ZFUlNJT047YCAtbyBteXByb2cgbXlwcm9nLmMKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci13b3VsZCBiZSBzdWZmaWNpZW50IGZvciBhIGdzdHJlYW1lci1vbmx5IHByb2dyYW0uIAotSWYgKGZvciBleGFtcGxlKSB5b3VyIGFwcCBhbHNvIHVzZWQgR1RLKyAyLjAsIHlvdSBjb3VsZCB1c2UKLTxwcm9ncmFtbGlzdGluZz4KLSQgbGlidG9vbCAtLW1vZGU9bGluayBnY2MgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdzdHJlYW1lci0mR1NUX0FQSV9WRVJTSU9OOyBndGsrLTIuMGAgLW8gbXlwcm9nIG15cHJvZy5jCi08L3Byb2dyYW1saXN0aW5nPgotVGhvc2UgYXJlIGJhY2stdGlja3MgKG9uIHRoZSBzYW1lIGtleSB3aXRoIHRoZSB0aWxkZSBvbiBVUyBrZXlib2FyZHMpLCAKLW5vdCBzaW5nbGUgcXVvdGVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotRm9yIGJpZ2dlciBwcm9qZWN0cywgeW91IHNob3VsZCBpbnRlZ3JhdGUgcGtnLWNvbmZpZyB1c2UgaW4geW91ciBNYWtlZmlsZSwKLW9yIGludGVncmF0ZSB3aXRoIGF1dG9jb25mIHVzaW5nIHRoZSBwa2cubTQgbWFjcm8gKHByb3ZpZGluZyBQS0dfQ09ORklHX0NIRUNLKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImRldmVsb3BpbmctdW5pbnN0YWxsZWQtZ3N0cmVhbWVyIj4KLSAgICAgICAgPHBhcmE+SG93IGRvIEkgZGV2ZWxvcCBhZ2FpbnN0IGFuIHVuaW5zdGFsbGVkIEdTdHJlYW1lciBjb3B5ID88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLUl0IGlzIHBvc3NpYmxlIHRvIGRldmVsb3AgYW5kIGNvbXBpbGUgYWdhaW5zdCBhbiB1bmluc3RhbGxlZCBjb3B5IG9mCi1nc3RyZWFtZXIgYW5kIGdzdC1wbHVnaW5zLSogKGZvciBleGFtcGxlLCBhZ2FpbnN0IGdpdCBjaGVja291dHMpLiBUaGlzCi1hbGxvd3MgeW91IHRvIGRldmVsb3AgYWdhaW5zdCBhbmQgdGVzdCB0aGUgbGF0ZXN0IEdTdHJlYW1lciB2ZXJzaW9uCi13aXRob3V0IGhhdmluZyB0byBpbnN0YWxsIGl0IGFuZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggeW91ciBzeXN0ZW0td2lkZQotR1N0cmVhbWVyIHNldHVwLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotVGhlIGVhc2llc3Qgd2F5IHRvbyBjcmVhdGUgc3VjaCBhIHNldHVwIGlzIHRoZQotPHVsaW5rIHVybD0iaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvdHJlZS9zY3JpcHRzL2NyZWF0ZS11bmluc3RhbGxlZC1zZXR1cC5zaCI+bGF0ZXN0IHZlcnNpb24gb2YgY3JlYXRlLXVuaW5zdGFsbGVkLXNldHVwLnNoPC91bGluaz4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLVRoaXMgc2V0dXAgbWFrZXMgdXNlIG9mIHRoZQotPHVsaW5rIHVybD0iaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvdHJlZS9zY3JpcHRzL2dzdC11bmluc3RhbGxlZCI+bGF0ZXN0IHZlcnNpb24gb2YgZ3N0LXVuaW5zdGFsbGVkPC91bGluaz4uCi1SdW5uaW5nIHRoaXMgc2NyaXB0LCB5b3UnbGwgYmUgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIHVuaW5zdGFsbGVkCi10b29scyBhbmQgcGx1Z2lucyB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdC4gIEFsc28sIHBrZy1jb25maWcgd2lsbCBkZXRlY3QgdGhlCi11bmluc3RhbGxlZCBjb3BpZXMgYmVmb3JlIChhbmQgcHJlZmVyIHRoZW0gdG8pIGFueSBpbnN0YWxsZWQgY29waWVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotTXVsdGlwbGUgdW5pbnN0YWxsZWQgc2V0dXBzIGNhbiBiZSB1c2VkIGluIHBhcmFsbGVsLiBIYXZlIGEgbG9vayBhdAotPHVsaW5rIHVybD0iaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvdHJlZS9zY3JpcHRzL2dzdC11bmluc3RhbGxlZCI+Z3N0LXVuaW5zdGFsbGVkPC91bGluaz4KLXRvIHNlZSBob3cgaXQgZGV0ZXJtaW5lcyB3aGljaCBlbnZpcm9ubWVudCBpcyB1c2VkLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZGV2ZWxvcGluZy1nY29uZiI+Ci0gICAgICAgIDxwYXJhPkhvdyBjYW4gSSB1c2UgR0NvbmYgdG8gZ2V0IHRoZSBzeXN0ZW0td2lkZSBkZWZhdWx0cyA/PC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1Gb3IgR05PTUUgYXBwbGljYXRpb25zIGl0J3MgYSBnb29kIGlkZWEgdG8gdXNlIEdDb25mIHRvIGZpbmQgdGhlIGRlZmF1bHQgd2F5cwotb2Ygb3V0cHV0dGluZyBhdWRpbyBhbmQgdmlkZW8uICBZb3UgY2FuIGRvIHRoaXMgYnkgdXNpbmcgdGhlICdnY29uZmF1ZGlvc2luaycKLWFuZCAnZ2NvbmZ2aWRlb3NpbmsnIGVsZW1lbnRzIGZvciBhdWRpbyBhbmQgdmlkZW8gb3V0cHV0LiBUaGV5IHdpbGwgdGFrZQotY2FyZSBvZiBldmVyeXRoaW5nIEdDb25mLXJlbGF0ZWQgZm9yIHlvdSBhbmQgYXV0b21hdGljYWxseSB1c2UgdGhlIG91dHB1dHMKLXRoYXQgdGhlIHVzZXIgY29uZmlndXJlZC4gSWYgeW91IGFyZSB1c2luZyBnY29uZmF1ZGlvc2luaywgeW91ciBhcHBsaWNhdGlvbgotc2hvdWxkIHNldCB0aGUgJ3Byb2ZpbGUnIHByb3BlcnR5LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZGV2ZWxvcGluZy1saWJ0b29sLXNjcmlwdHMiPgotICAgICAgICA8cGFyYT4KLUhvdyBkbyBJIGRlYnVnIHRoZXNlIGZ1bm55IHNoZWxsIHNjcmlwdHMgdGhhdCBsaWJ0b29sIG1ha2VzID8KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1XaGVuIHlvdSBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IHVuaW5zdGFsbGVkIEdTdHJlYW1lciB1c2luZyBsaWJ0b29sLCAKLWZ1bm55IHNoZWxsIHNjcmlwdHMgYXJlIG1hZGUgdG8gbW9kaWZ5IHlvdXIgc2hhcmVkIG9iamVjdCBzZWFyY2ggcGF0aCAKLWFuZCB0aGVuIHJ1biB5b3VyIHByb2dyYW0uIEZvciBpbnN0YW5jZSwgdG8gZGVidWcgZ3N0LWxhdW5jaCwgdHJ5IAotPHByb2dyYW1saXN0aW5nPgotbGlidG9vbCAtLW1vZGU9ZXhlY3V0ZSBnZGIgL3BhdGgvdG8vZ3N0LWxhdW5jaAotPC9wcm9ncmFtbGlzdGluZz4uIAotSWYgdGhpcyBkb2VzIG5vdCB3b3JrLCB5b3UncmUgcHJvYmFibHkgdXNpbmcgYSBicm9rZW4gdmVyc2lvbiBvZiBsaWJ0b29sLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImRldmVsb3BpbmctbWFpbC1nc3RyZWFtZXItZGV2ZWwiPgotICAgICAgICA8cGFyYT5XaHkgaXMgbWFpbCB0cmFmZmljIHNvIGxvdyBvbiBnc3RyZWFtZXItZGV2ZWwgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotT3VyIG1haW4gYXJlbmEgZm9yIGNvb3JkaW5hdGlvbiBhbmQgZGlzY3Vzc2lvbiBpcyBJUkMsIG5vdCBlbWFpbC4gCi1Kb2luIHVzIGluIDx1bGluayB1cmw9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2dzdHJlYW1lciI+I2dzdHJlYW1lciBvbiBpcmMuZnJlZW5vZGUubmV0PC91bGluaz4KLUZvciBsYXJnZXIgcGljdHVyZSBxdWVzdGlvbnMgb3IgZ2V0dGluZyBtb3JlIGlucHV0IGZyb20gbW9yZSBwZXJzb25zLAotYSBtYWlsIHRvIGdzdHJlYW1lci1kZXZlbCBpcyBuZXZlciBhIGJhZCBpZGVhLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZGV2ZWxvcGluZy12ZXJzaW9uaW5nIj4KLSAgICAgICAgPHBhcmE+V2hhdCBraW5kIG9mIHZlcnNpb25pbmcgc2NoZW1lIGRvZXMgR1N0cmVhbWVyIHVzZSA/PC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1Gb3IgcHVibGljIHJlbGVhc2VzLCBHU3RyZWFtZXIgdXNlcyBhIHN0YW5kYXJkIE1BSk9SLk1JTk9SLk1JQ1JPIHZlcnNpb24gCi1zY2hlbWUuICBJZiB0aGUgcmVsZWFzZSBjb25zaXN0cyBvZiBtb3N0bHkgYnVnIGZpeGVzIG9yIGluY3JlbWVudGFsIGNoYW5nZXMsIAotdGhlIE1JQ1JPIHZlcnNpb24gaXMgaW5jcmVtZW50ZWQuCi1JZiB0aGUgcmVsZWFzZSBjb250YWlucyBiaWcgY2hhbmdlcywgdGhlIE1JTk9SIHZlcnNpb24gaXMgaW5jcmVtZW50ZWQuCi1JZiB3ZSdyZSBwYXJ0aWN1bGFybHkgZ2lkZHksIHdlIG1pZ2h0IGV2ZW4gaW5jcmVhc2UgdGhlIE1BSk9SIG51bWJlci4gIAotRG9uJ3QgaG9sZCB5b3VyIGJyZWF0aCBmb3IgdGhhdCB0aG91Z2guCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1EdXJpbmcgdGhlIGRldmVsb3BtZW50IGN5Y2xlLCBHU3RyZWFtZXIgYWxzbyB1c2VzIGEgZm91cnRoIG9yIE5BTk8gbnVtYmVyLgotSWYgdGhpcyBudW1iZXIgaXMgMSwgdGhlbiBpdCdzIGEgZ2l0IGRldmVsb3BtZW50IHZlcnNpb24uICAKLUFueSB0YXJiYWxsIG9yIHBhY2thZ2UgdGhhdCBoYXMgYSBuYW5vIG51bWJlciBvZiAxIGlzIG1hZGUgZnJvbSBnaXQgYW5kIHRodXMgCi1ub3Qgc3VwcG9ydGVkLiAgQWRkaXRpb25hbGx5LCBpZiB5b3UgZGlkbid0IGdldCB0aGlzIHBhY2thZ2Ugb3IgdGFyYmFsbCBmcm9tCi10aGUgR1N0cmVhbWVyIHRlYW0sIGRvbid0IGhhdmUgaGlnaCBob3BlcyBvbiBpdCBkb2luZyB3aGF0ZXZlciB5b3Ugd2FudCBpdAotdG8gZG8uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1JZiB0aGUgbnVtYmVyIGlzIDIgb3IgaGlnaGVyLCBpdCdzIGFuIG9mZmljaWFsIHByZS1yZWxlYXNlIGluIHByZXBhcmF0aW9uIAotb2YgYW4gYWN0dWFsIGNvbXBsZXRlIHJlbGVhc2UuICBZb3VyIGhlbHAgaW4gdGVzdGluZyB0aGVzZSB0YXJiYWxscyBhbmQKLXBhY2thZ2VzIGlzIHZlcnkgbXVjaCBhcHByZWNpYXRlZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImRldmVsb3BpbmctY29kaW5nLXN0eWxlIj4KLSAgICAgICAgPHBhcmE+V2hhdCBpcyB0aGUgY29kaW5nIHN0eWxlIGZvciBHU3RyZWFtZXIgY29kZT88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLVRoZSBjb3JlIGFuZCBhbG1vc3QgYWxsIHBsdWdpbiBtb2R1bGVzIGFyZSBiYXNpY2FsbHkgY29kZWQgaW4gSyZhbXA7UiB3aXRoCi0yLXNwYWNlIGluZGVudGluZy4gSnVzdCBmb2xsb3cgd2hhdCdzIGFscmVhZHkgdGhlcmUgYW5kIHlvdSdsbCBiZSBmaW5lLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotSW5kaXZpZHVhbCBwbHVnaW5zIGluIGdzdC1wbHVnaW5zLSogb3IgcGx1Z2lucyB0aGF0IHlvdSB3YW50IGNvbnNpZGVyZWQgZm9yCi1hZGRpdGlvbiB0byBvbmUgb2YgdGhlIGdzdC1wbHVnaW5zLSogbW9kdWxlcyBzaG91bGQgYmUgY29kZWQgaW4gdGhlIHNhbWUgc3R5bGUuCi1JdCdzIGVhc2llciBpZiBldmVyeXRoaW5nIGlzIGNvbnNpc3RlbnQuIENvbnNpc3RlbmN5IGlzLCBvZiBjb3Vyc2UsIHRoZSBnb2FsLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLVNpbXBseSBydW4geW91ciBjb2RlIChvbmx5IHRoZSAqLmMgZmlsZXMsIG5vdCB0aGUgaGVhZGVyIGZpbGVzKSB0aHJvdWdoCi08cHJvZ3JhbWxpc3Rpbmc+Ci1pbmRlbnQgXAotICAtLWJyYWNlcy1vbi1pZi1saW5lIFwKLSAgLS1jYXNlLWJyYWNlLWluZGVudGF0aW9uMCBcCi0gIC0tY2FzZS1pbmRlbnRhdGlvbjIgXAotICAtLWJyYWNlcy1hZnRlci1zdHJ1Y3QtZGVjbC1saW5lIFwKLSAgLS1saW5lLWxlbmd0aDgwIFwKLSAgLS1uby10YWJzIFwKLSAgLS1jdWRkbGUtZWxzZSBcCi0gIC0tZG9udC1saW5lLXVwLXBhcmVudGhlc2VzIFwKLSAgLS1jb250aW51YXRpb24taW5kZW50YXRpb240IFwKLSAgLS1ob25vdXItbmV3bGluZXMgXAotICAtLXRhYi1zaXplOCBcCi0gIC0taW5kZW50LWxldmVsMgotPC9wcm9ncmFtbGlzdGluZz4KLWJlZm9yZSBzdWJtaXR0aW5nIGEgcGF0Y2guIChUaGlzIGlzIHVzaW5nIEdOVSBpbmRlbnQuKSBUaGVyZSBpcyBhbHNvIGEKLWdzdC1pbmRlbnQgc2NyaXB0IGluIHRoZSBHU3RyZWFtZXIgY29yZSBzb3VyY2UgdHJlZSBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5Ci13aGljaCB3cmFwcyB0aGlzIGFuZCBjb250YWlucyB0aGUgbGF0ZXN0IG9wdGlvbi4gVGhlIGVhc2llc3Qgd2F5IHRvIGdldCB0aGUKLWluZGVudGluZyByaWdodCBpcyBwcm9iYWJseSB0byBkZXZlbG9wIGFnYWluc3QgYSBnaXQgY2hlY2tvdXQuIFRoZSBsb2NhbAotZ2l0IGNvbW1pdCBob29rIHdpbGwgZW5zdXJlIGNvcnJlY3QgaW5kZW50YXRpb24uIFdlIG9ubHkgcmVxdWlyZSBjb2RlIGZpbGVzIHRvCi1iZSBpbmRlbnRlZCwgaGVhZGVyIGZpbGVzIG1heSBiZSBpbmRlbnRlZCBtYW51YWxseSBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5Ci0oaG93ZXZlciwgcGxlYXNlIHVzZSBzcGFjZXMgZm9yIGluZGVudGluZywgbm90IHRhYnMsIGV2ZW4gaW4gaGVhZGVyIGZpbGVzKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLTwhLS0gVE9ETyhlbnNvbmljKTogbGluayBpcyBkZWFkLCBwZW5kaW5nIHF1ZXN0aW9uIG9uIGRlc2t0b3AtZGV2ZWwKLUFzIGZvciB0aGUgY29kZSBpdHNlbGYsIHRoZSAKLTx1bGluayB1cmw9Imh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2RvYy9ndWlkZXMvcHJvZ3JhbW1pbmctZ3VpZGVsaW5lcy9ib29rMS5odG1sIj5HTk9NRQotY29kaW5nIGd1aWRlbGluZXM8L3VsaW5rPiBpcyBhIGdvb2QgcmVhZC4KLS0tPgotV2hlcmUgcG9zc2libGUsIHdlIHRyeSB0byBhZGhlcmUgdG8gdGhlIHNwaXJpdCBvZiBHT2JqZWN0IGFuZCB1c2Ugc2ltaWxhcgotY29kaW5nIGlkaW9tcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLVBhdGNoZXMgc2hvdWxkIGJlIG1hZGUgYWdhaW5zdCBnaXQgbWFzdGVyIG9yIHRoZSBsYXRlc3QgcmVsZWFzZSBhbmQgc2hvdWxkIGJlCi1pbiAndW5pZmllZCBjb250ZXh0JyBmb3JtYXQgKHVzZSBkaWZmIC11IC1wKS4gVGhleSBzaG91bGQgYmUgYXR0YWNoZWQgdG8KLWEgYnVnIHJlcG9ydCAob3IgZmVhdHVyZSByZXF1ZXN0KSBpbgotPHVsaW5rIHVybD0iaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyI+YnVnemlsbGE8L3VsaW5rPiByYXRoZXIgdGhhbgotc2VudCB0byB0aGUgbWFpbGluZyBsaXN0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0gICAgPHFhbmRhZW50cnk+Ci0gICAgPHF1ZXN0aW9uIGlkPSJkZXZlbG9waW5nLXRyYW5zbGF0aW9ucyI+Ci0gICAgPHBhcmE+SSBoYXZlIHRyYW5zbGF0ZWQgb25lIG9mIHRoZSBtb2R1bGUgLnBvIGZpbGVzIGludG8gYSBuZXcgbGFuZ3VhZ2UuIEhvdyBkbyBJIGdldCBpdCBpbmNsdWRlZD88L3BhcmE+Ci0gICAgPC9xdWVzdGlvbj4KLSAgICA8YW5zd2VyPgotICAgIDxwYXJhPkdTdHJlYW1lciB0cmFuc2xhdGlvbnMgYXJlIHVuaWZvcm1seSBtYW5hZ2VkIHRocm91Z2ggdGhlIFRyYW5zbGF0aW9uIFByb2plY3QgKGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnKS4gVGhlcmUgYXJlIHNvbWUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBqb2luIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRlYW0gYW5kIHN1Ym1pdCBuZXcgdHJhbnNsYXRpb25zIGF0IGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL2h0bWwvdHJhbnNsYXRvcnMuaHRtbC48L3BhcmE+Ci0gICAgPHBhcmE+TmV3IHRyYW5zbGF0aW9ucyBzdWJtaXR0ZWQgdmlhIHRoZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGFyZSBtZXJnZWQgcGVyaW9kaWNhbGx5IGludG8gZ2l0IGJ5IHRoZSBtYWludGFpbmVycyBieSBydW5uaW5nICdtYWtlIGRvd25sb2FkLXBvJyBpbiB0aGUgdmFyaW91cyBtb2R1bGVzLjwvcGFyYT4KLSAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0gIDwvcWFuZGFzZXQ+Ci08L3NlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvZmFxLnhtbCBiL2RvY3MvZmFxL2ZhcS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MWFiZDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9mYXEvZmFxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIGFydGljbGUgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgotICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiIFsKLQotPCFFTlRJVFkgJSBpbWFnZS1lbnRpdGllcyBTWVNURU0gImltYWdlLmVudGl0aWVzIj4KLSVpbWFnZS1lbnRpdGllczsKLTwhRU5USVRZICUgdmVyc2lvbi1lbnRpdGllcyBTWVNURU0gInZlcnNpb24uZW50aXRpZXMiPgotJXZlcnNpb24tZW50aXRpZXM7Ci0KLTwhRU5USVRZIFNUQVJUIFNZU1RFTSAic3RhcnQueG1sIj4KLTwhRU5USVRZIEdFTkVSQUwgU1lTVEVNICJnZW5lcmFsLnhtbCI+Ci08IUVOVElUWSBERVBFTkRFTkNJRVMgU1lTVEVNICJkZXBlbmRlbmNpZXMueG1sIj4KLQotPCFFTlRJVFkgR0VUVElORyBTWVNURU0gImdldHRpbmcueG1sIj4KLTwhRU5USVRZIFVTSU5HIFNZU1RFTSAidXNpbmcueG1sIj4KLTwhRU5USVRZIFRST1VCTEVTSE9PVElORyBTWVNURU0gInRyb3VibGVzaG9vdGluZy54bWwiPgotCi08IUVOVElUWSBHSVQgU1lTVEVNICJnaXQueG1sIj4KLTwhRU5USVRZIERFVkVMT1BJTkcgU1lTVEVNICJkZXZlbG9waW5nLnhtbCI+Ci0KLTwhRU5USVRZIExFR0FMIFNZU1RFTSAibGVnYWwueG1sIj4KLV0+Ci0KLTxhcnRpY2xlIGNsYXNzPSJmYXEiIGlkPSJpbmRleCI+Ci0gIDxhcnRpY2xlaW5mbz4KLSAgICA8dGl0bGU+R1N0cmVhbWVyIEZBUSAoJkdTVF9WRVJTSU9OOyk8L3RpdGxlPgotICAgIDxhYnN0cmFjdD4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIGlzIHRoZSBGQVEgZm9yIEdTdHJlYW1lciwgYSBtdWx0aW1lZGlhIGZyYW1ld29yay4KLSAgICAgICAgUXVlc3Rpb25zIGFuZCBhbnN3ZXJzIHJhbmdlIGZyb20gZ2VuZXJhbCBpbmZvcm1hdGlvbiB0bwotICAgICAgICBkZWVwLWRvd24tYW5kLWRpcnR5IGNvbXBpbGF0aW9uIGlzc3Vlcy4KLSAgICAgIDwvcGFyYT4KLSAgICA8L2Fic3RyYWN0PgotCi08IS0tCi0gICAgPHJldmhpc3Rvcnk+Ci0gICAgICA8cmV2aXNpb24+Ci0gICAgICAgIDxyZXZudW1iZXI+MC4yLjE8L3Jldm51bWJlcj4KLSAgICAgICAgPGRhdGU+MjAwNi0wNS0xOTwvZGF0ZT4KLSAgICAgICAgPHJldnJlbWFyaz5Tb21lIHVwZGF0ZXMgZm9yIEdTdHJlYW1lci0wLjEwPC9yZXZyZW1hcms+Ci0gICAgICA8L3JldmlzaW9uPgotCi0gICAgICA8cmV2aXNpb24+Ci0gICAgICAgIDxyZXZudW1iZXI+MC4yLjA8L3Jldm51bWJlcj4KLSAgICAgICAgPGRhdGU+MjAwNi0wMy0xNjwvZGF0ZT4KLSAgICAgICAgPHJldnJlbWFyaz5SZXZpZXcgYW5kIHVwZGF0ZSB3aG9sZSBkb2N1bWVudC48L3JldnJlbWFyaz4KLSAgICAgIDwvcmV2aXNpb24+Ci0KLSAgICAgIDxyZXZpc2lvbj4KLSAgICAgICAgPHJldm51bWJlcj4wLjEuMTwvcmV2bnVtYmVyPgotICAgICAgICA8ZGF0ZT4yMDAzLTA0LTI0PC9kYXRlPgotICAgICAgICA8cmV2cmVtYXJrPkFkZGVkIFEmYW1wO0EgYWJvdXQgZGV2ZWxvcGluZyB3aXRoIHVuaW5zdGFsbGVkIGNvcHkuPC9yZXZyZW1hcms+Ci0gICAgICA8L3JldmlzaW9uPgotCi0gICAgICA8cmV2aXNpb24+Ci0gICAgICAgIDxyZXZudW1iZXI+MC4xLjA8L3Jldm51bWJlcj4KLSAgICAgICAgPGRhdGU+MjAwMi0xMC0wMTwvZGF0ZT4KLSAgICAgICAgPHJldnJlbWFyaz5Jbml0aWFsIGNvbnZlcnNpb24gZnJvbSBGQVEgZGF0YWJhc2UuPC9yZXZyZW1hcms+Ci0gICAgICA8L3JldmlzaW9uPgotICAgIDwvcmV2aGlzdG9yeT4KLS0tPgotCi0gIDwvYXJ0aWNsZWluZm8+Ci0KLSAgJlNUQVJUOwotICAmR0VORVJBTDsKLSAgJkRFUEVOREVOQ0lFUzsKLQotICAmR0VUVElORzsKLSAgJlVTSU5HOwotICAmVFJPVUJMRVNIT09USU5HOwotCi0gICZHSVQ7Ci0gICZERVZFTE9QSU5HOwotCi0gICZMRUdBTDsKLQotPC9hcnRpY2xlPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvZ2VuZXJhbC54bWwgYi9kb2NzL2ZhcS9nZW5lcmFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1YmVjMC4uMDAwMDAwMAotLS0gYS9kb2NzL2ZhcS9nZW5lcmFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi08c2VjdDEgaWQ9ImNoYXB0ZXItZ2VuZXJhbCI+Ci0gIDx0aXRsZSBpZD0idGl0bGUtZ2VuZXJhbCI+R2VuZXJhbDwvdGl0bGU+Ci0gIDxxYW5kYXNldCBkZWZhdWx0bGFiZWw9InFhbmRhIj4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJnZW5lcmFsLW1lZGlhLXBsYXllciI+Ci0gICAgICAgIDxwYXJhPklzIEdTdHJlYW1lciBhIG1lZGlhIHBsYXllciA/PC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1ObywgR1N0cmVhbWVyIGlzIGEgZGV2ZWxvcG1lbnQgZnJhbWV3b3JrIGZvciBjcmVhdGluZyBhcHBsaWNhdGlvbnMgbGlrZSAKLW1lZGlhIHBsYXllcnMsIHZpZGVvIGVkaXRvcnMsIHN0cmVhbWluZyBtZWRpYSBicm9hZGNhc3RlcnMgYW5kIHNvIG9uLiAKLVRoYXQgc2FpZCwgdmVyeSBnb29kIG1lZGlhIHBsYXllcnMgY2FuIGVhc2lseSBiZSBidWlsdCBvbiB0b3AKLW9mIEdTdHJlYW1lciBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgdGhlIGhpZ2gtbGV2ZWwgb2JqZWN0IGNhbGxlZCBwbGF5YmluLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZ2VuZXJhbC13aHktYyI+Ci0gICAgICAgIDxwYXJhPgotV2h5IGlzIEdTdHJlYW1lciB3cml0dGVuIGluIEMgPyBXaHkgbm90IEMrKy9PYmplY3RpdmUtQy8uLi4gPwotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLVdlIGxpa2UgQy4gQXNpZGUgZnJvbSAicGVyc29uYWwgcHJlZmVyZW5jZSIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiB0ZWNobmljYWwgCi1yZWFzb25zIHdoeSBDIGlzIG5pY2UgaW4gdGhpcyBwcm9qZWN0OgotPGl0ZW1pemVkbGlzdD4KLTxsaXN0aXRlbT48cGFyYT5DIGlzIGV4dHJlbWVseSBwb3J0YWJsZS48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT5DIGlzIGZhc3QuPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+SXQgaXMgZWFzeSB0byBtYWtlIGxhbmd1YWdlIGJpbmRpbmdzIGZvciBsaWJyYXJpZXMgd3JpdHRlbiBpbiBDLgotPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+VGhlIEdPYmplY3Qgb2JqZWN0IHN5c3RlbSBwcm92aWRlZCBieSBHTGliIGltcGxlbWVudHMgb2JqZWN0cyBpbiBDLCAKLWluIGEgcG9ydGFibGUsIHBvd2VyZnVsIHdheS4gVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGZvciBpbnRyb3NwZWN0aW9uIGFuZCAKLXJ1bnRpbWUgZHluYW1pYyB0eXBpbmcuIEl0IGlzIGEgZnVsbCBPTyBzeXN0ZW0sIGJ1dCB3aXRob3V0IHRoZSBzeW50YWN0aWMgCi1zdWdhci4gSWYgeW91IHdhbnQgc3VnYXIsIHRha2UgYSBsb29rIGF0IAotPHVsaW5rIHVybD0iaHR0cDovL2xpdmUuZ25vbWUub3JnL1ZhbGEiPlZhbGE8L3VsaW5rPi48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT5Vc2Ugb2YgQyBpbnRlZ3JhdGVzIG5pY2VseSB3aXRoIEd0aysgYW5kIEdOT01FLiBTb21lIHBlb3BsZSBsaWtlIAotdGhpcyBhIGxvdCwgYnV0IG5laXRoZXIgR3RrKyBub3IgR05PTUUgYXJlIHJlcXVpcmVkIGJ5IEdTdHJlYW1lci48L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotPC9wYXJhPgotPHBhcmE+Ci1TbywgaW4gY2xvc2luZywgd2UgbGlrZSBDLiBJZiB5b3UgZG9uJ3QsIHRoYXQncyBmaW5lOyBpZiB5b3Ugc3RpbGwgd2FudCB0byAKLWhlbHAgb3V0IG9uIEdTdHJlYW1lciwgd2UgYWx3YXlzIG5lZWQgbW9yZSBsYW5ndWFnZSBiaW5kaW5nIHBlb3BsZS4gQW5kIGlmIAotbm90LCBkb24ndCBib3RoZXIgdXM7IHdlJ3JlIHdvcmtpbmcgOi0pCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJnZW5lcmFsLWFwcGxpY2F0aW9ucyI+Ci0gICAgICAgIDxwYXJhPldoYXQgYXBwbGljYXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIEdTdHJlYW1lciA/PC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotTWFueSBtZWRpYSBwbGF5ZXIgYXBwbGljYXRpb25zIGhhdmUgY2hvc2VuIEdTdHJlYW1lciBmb3IgdGhlaXIgYmFja2VuZC4gCi1BbHNvIGEgY291cGxlIG9mIG1lZGlhIGZvcm1hdCBjb252ZXJzaW9uIHRvb2xzIGhhdmUgYmVlbiB3cml0dGVuIHVzaW5nIHRoZSBwb3dlcnMgb2YgR1N0cmVhbWVyLgotV2l0aCB0aGUgYWR2ZW50IG9mIEdTdHJlYW1lci0wLjEwIHNldmVyYWwgbWVkaWEgZWRpdGluZyBhcHBsaWNhdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1Gb3IgYSBsaXN0IG9mIHByb2plY3RzLCBsb29rIGF0IHRoZQotPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvYXBwcy8iPmFwcGxpY2F0aW9uIGxpc3Q8L3VsaW5rPgotb24gdGhlIEdTdHJlYW1lciBwcm9qZWN0IHdlYnNpdGUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJnZW5lcmFsLWZvcm1hdCI+Ci0JPHBhcmE+RG9lcyBHU3RyZWFtZXIgc3VwcG9ydCB0aGUgZm9ybWF0IG9mIG15IG1lZGlhIGZpbGVzPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0gICAgICA8YW5zd2VyPgotCTxwYXJhPgotR1N0cmVhbWVyIGFpbXMgdG8gc3VwcG9ydCBldmVyeSBmb3JtYXQgaW1hZ2luYWJsZSwgYnV0IHRoYXQgZG9lc24ndCBtZWFuIHRoZSAKLWRldmVsb3BlcnMgaGF2ZSBtYW5hZ2VkIHRvIGFjaGlldmUgdGhhdCBhaW0geWV0LiBJZiBhIEdTdHJlYW1lciBlbmFibGVkIAotYXBwbGljYXRpb24gZG9lc24ndCBwbGF5IGJhY2sgeW91ciBmaWxlcywgeW91IGNhbiBoZWxwIHVzIHNvbHZlIHRoYXQgcHJvYmxlbQotYnkgPHVsaW5rIHVybD0iaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyI+ZmlsaW5nIGFuIGVuaGFuY2VtZW50IHJlcXVlc3QKLWJ1ZzwvdWxpbms+IGZvciB0aGF0IGZvcm1hdC4gSWYgeW91IGhhdmUgaXQsIHBsZWFzZSBwcm92aWRlOiAKLTxpdGVtaXplZGxpc3Q+Ci0gIDxsaXN0aXRlbT48cGFyYT5saW5rcyB0byBvdGhlciBwbGF5ZXJzLCBwcmVmZXJhYmx5IE9wZW4gU291cmNlIGFuZCB3b3JraW5nCi0gIG9uIFVuaXg8L3BhcmE+PC9saXN0aXRlbT4KLSAgPGxpc3RpdGVtPjxwYXJhPmxpbmtzIHRvIGV4cGxhbmF0aW9ucyBvZiB0aGUgZm9ybWF0LjwvcGFyYT48L2xpc3RpdGVtPgotICA8bGlzdGl0ZW0+PHBhcmE+d2F5cyB0byBvYnRhaW4gbWVkaWFmaWxlcyBpbiB0aGF0IGZvcm1hdCB0byB0ZXN0LgotICA8L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZ2VuZXJhbC1saWNlbnNpbmciPgotICAgICAgICA8cGFyYT4KLVdoYXQgYXJlIHRoZSBleGFjdCBsaWNlbnNpbmcgdGVybXMgZm9yIEdTdHJlYW1lciBhbmQgaXRzIHBsdWdpbnMgPwotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1BbGwgb2YgR1N0cmVhbWVyLCBpbmNsdWRpbmcgb3VyIG93biBwbHVnaW4gY29kZSwgaXMgbGljZW5zZWQgdW5kZXIgdGhlIAotPHVsaW5rIHVybD0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwtMi4xLmh0bWwiPkdOVSBMR1BMIDIuMTwvdWxpbms+IGxpY2Vuc2UuCi1Tb21lIG9mIHRoZSBsaWJyYXJpZXMgd2UgdXNlIGZvciBzb21lIG9mIHRoZSBwbHVnaW5zIGFyZSBob3dldmVyIHVuZGVyIHRoZSAKLUdQTCwgd2hpY2ggbWVhbnMgdGhhdCB0aG9zZSBwbHVnaW5zIGNhbiBub3QgYmUgdXNlZCBieSBhIG5vbi1HUEwtY29tcGF0aWJsZSAKLWFwcGxpY2F0aW9uLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLUFzIHBhcnQgb2YgdGhlIEdTdHJlYW1lciBzb3VyY2UgZG93bmxvYWQgeW91IGZpbmQgYSBmaWxlIGNhbGxlZCAKLUxJQ0VOU0VfcmVhZG1lIGluIGdzdC1wbHVnaW5zIHBhY2thZ2UuIFRoYXQgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBpbiB0aGUgZXhhY3QgbGljZW5zaW5nIAotdGVybXMgb2YgdGhlIGxpYnJhcmllcyB3ZSB1c2UuIEFzIGEgZ2VuZXJhbCBydWxlLCBHU3RyZWFtZXIgYWltcyBhdCB1c2luZyAKLW9ubHkgTEdQTCBvciBCU0QgbGljZW5zZWQgbGlicmFyaWVzIGlmIGF2YWlsYWJsZSBhbmQgb25seSB1c2UgR1BMIG9yIAotcHJvcHJpZXRhcnkgbGlicmFyaWVzIHdoZXJlIG5vIGdvb2QgTEdQTCBvciBCU0QgYWx0ZXJuYXRpdmVzIGFyZSBhdmFpbGFibGUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1Gcm9tIEdTdHJlYW1lciAwLjQuMiBvbiwgd2UgaW1wbGVtZW50ZWQgYSBsaWNlbnNlIGZpZWxkIGZvciBhbGwgb2YgdGhlIHBsdWdpbnMsCi1hbmQgaW4gdGhlIGZ1dHVyZSB3ZSBtaWdodCBoYXZlIHRoZSBhcHBsaWNhdGlvbiBlbmZvcmNlIGEgc3RyaWN0ZXIgcG9saWN5Ci0obXVjaCBsaWtlIHRhaW50aW5nIGluIHRoZSBrZXJuZWwpLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZ2VuZXJhbC1zb3VuZC1zZXJ2ZXIiPgotICAgICAgICA8cGFyYT5JcyBHU3RyZWFtZXIgYSBzb3VuZCBzZXJ2ZXIgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLU5vLCBHU3RyZWFtZXIgaXMgbm90IGEgc291bmRzZXJ2ZXIuIEdTdHJlYW1lciBkb2VzIGhvd2V2ZXIgaGF2ZSBwbHVnaW5zCi1zdXBwb3J0aW5nIG1vc3Qgb2YgdGhlIG1ham9yIHNvdW5kc2VydmVycyBhdmFpbGFibGUgdG9kYXksIGluY2x1ZGluZyAKLXB1bHNlYXVkaW8sIEVTRCwgYVJUU2QsIEphY2sgYW5kIG90aGVycy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImdlbmVyYWwtcGxhdGZvcm1zIj4KLSAgICAgICAgPHBhcmE+Ci1XaWxsIEdTdHJlYW1lciBiZSBhdmFpbGFibGUgZm9yIHBsYXRmb3JtcyBvdGhlciB0aGFuIFVuaXggPwotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1EZXBlbmRzLiBPdXIgbWFpbiB0YXJnZXQgaXMgdGhlIFVuaXggcGxhdGZvcm0uIEl0IGFsc28gd29ya3Mgb24gV2luMzIgYW5kIE1hYyBPUyBYLAotYnV0IGl0IG1heSBzdGlsbCBiZSBhIGJpdCBjaGFsbGVuZ2luZyB0byBnZXQgZXZlcnl0aGluZyB1cCBhbmQgcnVubmluZy4gIAotVGhhdCBzYWlkLCBpbnRlcmVzdCBoYXMgYmVlbiBleHByZXNzZWQgaW4gcG9ydGluZyBHU3RyZWFtZXIgdG8gb3RoZXIgcGxhdGZvcm1zIGFuZCB0aGUgR1N0cmVhbWVyIGNvcmUgCi10ZWFtIHdpbGwgZ2xhZGx5IGFjY2VwdCBwYXRjaGVzIHRvIGFjY29tcGxpc2ggdGhpcy4KLTwhLS0gUGxlYXNlIHJlZmVyIHRvIHRoZQotPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5uZXQvc3RhdHVzLz9jYXRlZ29yeT03Ij4KLXBsYXRmb3JtIHN1cHBvcnQgc3RhdHVzIHRhYmxlPC91bGluaz4gLS0+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJnZW5lcmFsLWdub21lIj4KLSAgICAgICAgPHBhcmE+V2hhdCBpcyBHU3RyZWFtZXIncyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgR05PTUUgY29tbXVuaXR5ID88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1XaGlsZSBHU3RyZWFtZXIgaXMgb3BlcmF0ZWQgYXMgYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgd2UgZG8gaGF2ZSBhIGNsb3NlIAotcmVsYXRpb25zaGlwIHdpdGggdGhlIEdOT01FIGNvbW11bml0eS4gTWFueSBvZiBvdXIgaGFja2VycyBjb25zaWRlciAKLXRoZW1zZWx2ZXMgYWxzbyB0byBiZSBtZW1iZXJzIG9mIHRoZSBHTk9NRSBjb21tdW5pdHkuCi1HU3RyZWFtZXIgaXMgb2ZmaWNpYWx5IGJ1bmRsZWQgd2l0aCB0aGUgR05PTUUgZGVza3RvcCwgYXMgbG90cyBvZiBwYWNrYWdlcwotKGxpa2UgZ25vbWUtbWVkaWEsIHRvdGVtIGFuZCByaHl0aG1ib3gpIGFyZSB1c2luZyBpdC4KLVRoaXMgZG9lcyBub3QgZXhjbHVkZSB1c2Ugb2YgR1N0cmVhbWVyIGJ5IG90aGVyIGNvbW11bml0aWVzIGF0IGFsbCwgb2YgY291cnNlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZ2VuZXJhbC1rZGUiPgotICAgICAgICA8cGFyYT5XaGF0IGlzIEdTdHJlYW1lcidzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBLREUgY29tbXVuaXR5ID88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1UaGUgR1N0cmVhbWVyIGNvbW11bml0eSB3YW50cyB0byBoYXZlIGFzIGdvb2QgYSByZWxhdGlvbnNoaXAgYXMgcG9zc2libGUgCi13aXRoIEtERSwgYW5kIHdlIGhvcGUgdGhhdCBzb21lZGF5IEtERSBkZWNpZGVzIHRvIGFkb3B0IEdTdHJlYW1lciBhcyB0aGVpciAKLW11bHRpbWVkaWEgQVBJIChwbGFubmVkIGZvciBLREUgNCkuIAotVGhlcmUgaGF2ZSBiZWVuIGNvbnRhY3RzIGZyb20gdGltZSB0byB0aW1lIGJldHdlZW4gdGhlIEdTdHJlYW1lciBjb21tdW5pdHkgCi1hbmQgS0RFIGFuZCB3ZSBkbyBhbHJlYWR5IGhhdmUgc3VwcG9ydCBmb3IgdGhlIGFSVFNkIHNvdW5kIHNlcnZlciB1c2VkIGJ5IEtERS4KLUFsc28sIHNvbWUgb2YgdGhlIEtERSBoYWNrZXJzIGhhdmUgY3JlYXRlZCBRdCBiaW5kaW5ncyBvZiBHU3RyZWFtZXIsIAotbWFkZSBhIHNpbXBsZSB2aWRlbyBwbGF5ZXIgYW5kIHVzaW5nIGl0IGluIHNvbWUgYXVkaW8gcGxheWVycyAoSnVLIGFuZCBBbWFyb0spLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZ2VuZXJhbC1teS1hcHBsaWNhdGlvbiI+Ci0gICAgICAgIDxwYXJhPgotSSdtIGNvbnNpZGVyaW5nIGFkZGluZyBHU3RyZWFtZXIgb3V0cHV0IHRvIG15IGFwcGxpY2F0aW9uLi4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotVGhhdCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNlLiBHU3RyZWFtZXIgaXMgbm90IGEgc291bmQgc2VydmVyLCBzbyB5b3UgZG9uJ3QgCi1vdXRwdXQgZGlyZWN0bHkgdG8gR1N0cmVhbWVyLCBhbmQgaXQncyBub3QgYW4gaW50ZXJtZWRpYXRlIEFQSSBiZXR3ZWVuIAotYXVkaW8gZGF0YSBhbmQgZGlmZmVyZW50IGtpbmRzIG9mIGF1ZGlvIHNpbmtzLiBJdCBpcyBhIGZ1bmRhbWVudGFsIGRlc2lnbiAKLWRlY2lzaW9uIHRvIHVzZSBHU3RyZWFtZXIgaW4geW91ciBhcHA7IHRoZXJlIGFyZSBubyBlYXN5IHdheXMgb2Ygc29tZWhvdyAKLSd0cmFuc2ZlcmluZycgZGF0YSBmcm9tIHlvdXIgYXBwIHRvIEdTdHJlYW1lci4gSW5zdGVhZCwgeW91ciBhcHAgd291bGQgaGF2ZSAKLXRvIHVzZSBvciBpbXBsZW1lbnQgYSBudW1iZXIgb2YgR1N0cmVhbWVyIGVsZW1lbnRzLCBzdHJpbmcgdGhlbSB0b2dldGhlciwgYW5kIAotdGVsbCB0aGVtIHRvIHJ1bi4gSW4gdGhhdCBtYW5uZXIgdGhlIGRhdGEgd291bGQgYWxsIGJlIGludGVybmFsIHRvIHRoZSAKLUdTdHJlYW1lciBwaXBlbGluZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLVRoYXQgc2FpZCwgaXQgaXMgcG9zc2libGUgdG8gd3JpdGUgYSBwbHVnaW4gc3BlY2lmaWMgdG8geW91ciBhcHAgdGhhdCBjYW4gZ2V0Ci1hdCB0aGUgYXVkaW8gZGF0YS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotICA8L3FhbmRhc2V0PgotCi08L3NlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvZ2V0dGluZy54bWwgYi9kb2NzL2ZhcS9nZXR0aW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg0NzBiMi4uMDAwMDAwMAotLS0gYS9kb2NzL2ZhcS9nZXR0aW5nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi08c2VjdDEgaWQ9ImNoYXB0ZXItZ2V0dGluZyI+Ci0gIDx0aXRsZSBpZD0idGl0bGUtZ2V0dGluZyI+R2V0dGluZyBHU3RyZWFtZXI8L3RpdGxlPgotICA8cWFuZGFzZXQgZGVmYXVsdGxhYmVsPSJxYW5kYSI+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZ2V0dGluZy1nc3RyZWFtZXIiPgotICAgICAgICA8cGFyYT5Ib3cgZG8gSSBnZXQgR1N0cmVhbWVyID88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLUdlbmVyYWxseSBzcGVha2luZywgeW91IGhhdmUgdGhyZWUgb3B0aW9ucywgcmFuZ2luZyBmcm9tIGVhc3kgdG8gaGFyZCA6Ci08aXRlbWl6ZWRsaXN0PgotPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9ImdldHRpbmctZ3N0cmVhbWVyLXBhY2thZ2VzIj4KLWRpc3RyaWJ1dGlvbi1zcGVjaWZpYyBwYWNrYWdlczwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJnZXR0aW5nLWdzdHJlYW1lci1zb3VyY2UiPgotc291cmNlIHRhcmJhbGxzPC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9ImdldHRpbmctZ3N0cmVhbWVyLXBhY2thZ2VzIj4KLWdpdDwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJnc3RyZWFtZXItdmVyc2lvbnMtZXhwbGFpbmVkIj4KLSAgICAgICAgPHBhcmE+VGhlcmUgc2VlbSB0byBiZSBkaWZmZXJlbnQgR1N0cmVhbWVyIHZlcnNpb25zLCBsaWtlIDAuMTAgYW5kIDEuMD8KLSAgICAgICAgICAgICAgV2hhdCdzIHVwIHdpdGggdGhhdD88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgIEdTdHJlYW1lci0wLjEwIGFuZCBHU3RyZWFtZXItMS4wIGFyZSB0aGUgbWFpbiB2ZXJzaW9uCi0gICAgICAgICAgICZhcG9zO3NlcmllcyZhcG9zOyBjdXJyZW50bHkgaW4gdXNlLiAgRm9yIGFsbCBwcmFjdGljYWwgcHVycG9zZXMKLSAgICAgICAgICAgeW91IHNob3VsZCB0aGluayBvZiB0aGVtIGFzIHR3byBjb21wbGV0ZWx5IGRpZmZlcmVudCBsaWJyYXJpZXMKLSAgICAgICAgICAgd2hpY2gganVzdCBoYXBwZW4gdG8gaGF2ZSBhIHNpbWlsYXIgbmFtZS4gIFRoZXkgY2FuIGJlIGluc3RhbGxlZAotICAgICAgICAgICBpbiBwYXJhbGxlbCBhbmQgYXJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgRm9yIHRoZSAwLjEwIHZlcnNpb24geW91IHdpbGwgbmVlZCB0aGUgMC4xMCBwbHVnaW5zIGFuZCBiaW5kaW5ncwotICAgICAgICAgICAoZ3N0LXBsdWdpbnMgMC4xMC54LCBnc3QtZmZtcGVnIDAuMTAueCwgZ3N0LXB5dGhvbiAwLjEwLnggZXRjLiksIHdoaWxlCi0gICAgICAgICAgIGZvciB0aGUgMS4wIHZlcnNpb24geW91IHdpbGwgbmVlZCB0aGUgMS4wIHBsdWdpbnMgYW5kIGJpbmRpbmdzCi0gICAgICAgICAgIChpZS4gZ3N0LXBsdWdpbnMtYmFzZSAxLjAueCwgZ3N0LXBsdWdpbnMtZ29vZCAxLjAueCwKLSAgICAgICAgICAgZ3N0LXBsdWdpbnMtdWdseSAxLjAueCwgZ3N0LXBsdWdpbnMtYmFkIDEuMC54LCBnc3QtZmZtcGVnIDEuMC54LAotICAgICAgICAgICBnc3QtcHl0aG9uIDEuMC54KS4gIFRoZSBtaWNybyB2ZXJzaW9uIGZvciBlYWNoIG1haW4gdmVyc2lvbiBkb2VzCi0gICAgICAgICAgIG5vdCBoYXZlIHRvIG1hdGNoIGV4YWN0bHksIG9ubHkgdGhlIG1ham9yIHZlcnNpb25zIG5lZWRzIHRvIGJlIHRoZQotICAgICAgICAgICBzYW1lIChpZS4gaXQgbWF5IGJlIHRoYXQgdGhlIGN1cnJlbnQgZ3N0LXBsdWdpbnMtZ29vZCB2ZXJzaW9uIGlzCi0gICAgICAgICAgIDEuMC42IGFuZCB0aGUgY3VycmVudCBHU3RyZWFtZXIgY29yZSB2ZXJzaW9uIGlzIDEuMC4xMykuCi0gICAgICAgICAgIEdTdHJlYW1lci0xLjAgd2lsbCBub3Qgc2VlIG9yIHVzZSBhbnkgb2YgdGhlIEdTdHJlYW1lci0wLjEwIHBsdWdpbnMKLSAgICAgICAgICAgYW5kIHZpY2UgdmVyc2EuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgQWxsIEdTdHJlYW1lciBjb21tYW5kIGxpbmUgdG9vbHMgYXJlIHN1ZmZpeGVkIHdpdGggdGhlaXIgbWFpbgotICAgICAgICAgICB2ZXJzaW9uLCBlLmcuIGdzdC1sYXVuY2gtMC4xMCBhbmQgZ3N0LWxhdW5jaC0xLjAsIG9yIGdzdC1pbnNwZWN0LTAuMTAKLSAgICAgICAgICAgYW5kIGdzdC1pbnNwZWN0LTEuMC4KLSAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgIDxwYXJhPgotICAgICAgICAgICBBcHBsaWNhdGlvbnMgd2lsbCB1c2UgZWl0aGVyIEdTdHJlYW1lci0wLjEwIG9yIEdTdHJlYW1lci0xLjAsIHNpbmNlCi0gICAgICAgICAgIHRoZSAwLjEwIGFuZCAxLjAgQVBJL0FCSSBhcmUgbm90IGNvbXBhdGlibGUuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgT2RkLW51bWJlcmVkIHZlcnNpb25zIHN1Y2ggYXMgMC45LngsIDAuMTEueCwgZXRjLiBhcmUgdW5zdGFibGUKLSAgICAgICAgICAgZGV2ZWxvcGVyIHJlbGVhc2VzIHRoYXQgc2hvdWxkIGdlbmVyYWxseSBub3QgYmUgdXNlZC4KLSAgICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImdzdHJlYW1lci12ZXJzaW9ucy13aGljaC1vbmUtdG8tZ2V0Ij4KLSAgICAgICAgPHBhcmE+U28gd2hpY2ggR1N0cmVhbWVyIHZlcnNpb24gc2hvdWxkIEkgZ2V0PzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgWW91IHNob3VsZCBkb3dubG9hZCBHU3RyZWFtZXItMS4wLiAgR1N0cmVhbWVyLTAuMTAgaXMgZW5kLW9mLWxpZmUuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iZ2V0dGluZy1nc3RyZWFtZXItc291cmNlIj4KLSAgICAgICAgPHBhcmE+SG93IGNhbiBJIGluc3RhbGwgR1N0cmVhbWVyIGZyb20gc291cmNlID88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICAgPHBhcmE+Ci1XZSBwcm92aWRlIHRhcmJhbGxzIG9mIG91ciByZWxlYXNlcyBvbiBvdXIgCi08IS0tIDx1bGluayB1cmw9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTE5MzYiPgotU291cmNlZm9yZ2UgZmlsZXMgcGFnZS48L3VsaW5rPgotICAgICAgICAgPC9wYXJhPgotICAgICAgICAgPHBhcmE+Ci1XZSBhbHNvIHB1dCBzb3VyY2UgdGFyYmFsbHMgb24gb3VyIC0tPm93biBzaXRlLCBhdAotPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyI+Ci1odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvCi08L3VsaW5rPgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotV2hlbiBjb21waWxpbmcgZnJvbSBzb3VyY2UsIG1ha2Ugc3VyZSB5b3Ugc3BlY2lmeSBQS0dfQ09ORklHX1BBVEggY29ycmVjdGx5Ci13aGVuIGJ1aWxkaW5nIGFnYWluc3QgR1N0cmVhbWVyLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBjb25maWd1cmVkIEdTdHJlYW1lcgotd2l0aCB0aGUgZGVmYXVsdCBwcmVmaXggKHdoaWNoIGlzIC91c3IvbG9jYWwpLCB0aGVuIHlvdSBuZWVkIHRvCi08cHJvZ3JhbWxpc3Rpbmc+Ci1leHBvcnQgUEtHX0NPTkZJR19QQVRIPS91c3IvbG9jYWwvbGliL3BrZ2NvbmZpZwotPC9wcm9ncmFtbGlzdGluZz4KLWJlZm9yZSBidWlsZGluZyBnc3QtcGx1Z2lucy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImdldHRpbmctZ3N0cmVhbWVyLXBhY2thZ2VzIj4KLSAgICAgICAgPHBhcmE+QXJlIHRoZXJlIHByZW1hZGUgYmluYXJpZXMgYXZhaWxhYmxlID88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLQlZZXMgd2UgY3VycmVudGx5IHByb3ZpZGUgPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvcGtnLyI+cHJlY29tcGlsZWQgcGFja2FnZXMgZm9yIFdpbmRvd3MsIE9TL1gsIEFuZHJvaWQgYW5kIGlPUzwvdWxpbms+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotCVdlIGN1cnJlbnRseSBkbyBub3QgcHJvdmlkZSBwYWNrYWdlcyBmb3IgTGludXggZGlzdHJpYnV0aW9ucywgYnV0Ci0gICAgICAgIHJhdGhlciByZWx5IG9uIHRoZSBkaXN0cmlidXRpb25zIGZvciB0aGF0LiBHU3RyZWFtZXIgcGFja2FnZXMgc2hvdWxkCi0gICAgICAgIGJlIGF2YWlsYWJsZSBmb3IgYWxsIG1ham9yIChhbmQgbWlub3IpIGRpc3RyaWJ1dGlvbnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImdldHRpbmctZ3N0cmVhbWVyMyI+Ci0gICAgICAgIDxwYXJhPldoeSBkb24ndCB5b3UgcHJvdmlkZSBwcmVtYWRlIGJpbmFyaWVzIGZvciBkaXN0cmlidXRpb24gWFkgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotCUdTdHJlYW1lciBpcyBydW4gb24gYSB2b2x1bnRlZXIgYmFzaXMuIFRoZSBwYWNrYWdlIHRoYXQgYXJlIHByb3ZpZGVkIGFyZSBtYWRlIGJ5IG5vbi1wYWlkIHBlb3BsZSB3aG8gZG8gdGhpcyBvbiB0aGVpciBvd24gdGltZS4gVGhlIGRpc3RyaWJ1dGlvbnMgd2Ugc3VwcG9ydCB3aXRoIGJpbmFyaWVzIGFyZSB0aGUgZGlzdHJpYnV0aW9ucyB0aGF0IHdlIGhhdmUgcGVvcGxlIHdobyBoYXZlIHZvbHVudGVlcmVkIHRvIG1ha2UgYmluYXJpZXMgZm9yLiBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gbWFpbnRhaW5pbmcgR1N0cmVhbWVyIGJpbmFyaWVzIGZvciBvdGhlciBkaXN0cmlidXRpb25zIG9yIFVuaWNlcyB3ZSB3b3VsZCBiZSBoYXBweSB0byBoZWFyIGZyb20geW91LiBDb250YWN0IHVzIHRocm91Z2ggdGhlIEdTdHJlYW1lci1kZXZlbCBtYWlsaW5nIGxpc3QuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImdldHRpbmctZ3N0cmVhbWVyNCI+Ci0gICAgICAgIDxwYXJhPkkgYW0gaGF2aW5nIHRyb3VibGUgY29tcGlsaW5nIEdTdHJlYW1lciBvbiBteSBMRlMgaW5zdGFsbGF0aW9uLCB3aHkgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotCUlmIHlvdSBhcmUgcnVubmluZyBMRlMgb3VyIGJhc2ljIG9waW5pb24gaXMgdGhhdCB5b3Ugc2hvdWxkIGJlIGtub3dsZWRnZWFibGUgZW5vdWdoIHRvIHNvbHZlIGFueSBidWlsZCBpc3N1ZXMgeW91IGdldCBvbiB5b3VyIG93bi4gQmVpbmcgdm9sdW50ZWVyZWQgYmFzZWQgd2UgY2FuJ3QgcHJvbWlzZSBzdXBwb3J0IHRvIGFueW9uZSBvZiBjb3Vyc2UsIGJ1dCBhcmUgeW91IHVzaW5nIExGUyBjb25zaWRlciB5b3Vyc2VsZiBleHRyYSB1bnN1cHBvcnRlZC4gV2UKLW5laXRoZXIgY2FuIG9yIHdhbnQgdG8ga25vdyBlbm91Z2gsIGFib3V0IGhvdyB5b3VyIHVuaXF1ZSBzeXN0ZW0gaXMgY29uZmlndXJlZCwgdG8gYmUgYWJsZSB0byBoZWxwIHlvdS4gVGhhdCBzYWlkLCBpZiB5b3UgY29tZSB0byB0aGUgI2dzdHJlYW1lciBjaGFubmVsIG9uIGlyYy5vcGVucHJvamVjdHMubmV0IHdlIG1pZ2h0IG9mIGNvdXJzZSBiZSBhYmxlIHRvIGdpdmUgeW91IHNvbWUgZ2VuZXJhbCBoaW50cyBhbmQgcG9pbnRlcnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJnZXR0aW5nLWdzdHJlYW1lci1naXQiPgotICAgICAgICA8cGFyYT5Ib3cgZG8gSSBnZXQgR1N0cmVhbWVyIHRocm91Z2ggZ2l0ID88L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgc2VlIHRoaXMgcGFnZSA6IDx1bGluayB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2Rldi8iPmh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2Rldi88L3VsaW5rPiBmb3IgZ2l0IGFjY2Vzcy4gKGFub255bW91cyBhbmQgZGV2ZWxvcGVyKQotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0JCi0gIDwvcWFuZGFzZXQ+Ci08L3NlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvZ2l0LnhtbCBiL2RvY3MvZmFxL2dpdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMjVlN2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9mYXEvZ2l0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi08c2VjdDEgaWQ9ImNoYXB0ZXItZ2l0Ij4KLSAgPHRpdGxlIGlkPSJ0aXRsZS1naXQiPkJ1aWxkaW5nIEdTdHJlYW1lciBmcm9tIGdpdDwvdGl0bGU+Ci0gIDxxYW5kYXNldCBkZWZhdWx0bGFiZWw9InFhbmRhIj4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJnaXQtdW5pbnN0YWxsZWQiPgotICAgICAgICA8cGFyYT4KLUlzIHRoZXJlIGEgd2F5IHRvIHRlc3Qgb3IgZGV2ZWxvcCBhZ2FpbnN0IEdTdHJlYW1lciBmcm9tIGdpdCB3aXRob3V0Ci1pbnRlcmZlcmluZyB3aXRoIG15IHN5c3RlbSBHU3RyZWFtZXIgaW5zdGFsbGVkIGZyb20gcGFja2FnZXM/Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotWWVzISBZb3UgaGF2ZSB0d28gb3B0aW9uczogeW91IGNhbiBlaXRoZXIgcnVuIEdTdHJlYW1lciBpbiBhbiB1bmluc3RhbGxlZCBzZXR1cAotKHNlZSA8bGluayBsaW5rZW5kPSJkZXZlbG9waW5nLXVuaW5zdGFsbGVkLWdzdHJlYW1lciI+SG93IGRvIEkgZGV2ZWxvcCBhZ2FpbnN0Ci1hbiB1bmluc3RhbGxlZCBHU3RyZWFtZXIgY29weSA/PC9saW5rPiksIG9yIHlvdSBjYW4gdXNlIEdOT01FJ3MgamhidWlsZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImdpdC1hbm9uIj4KLSAgICAgICAgPHBhcmE+Ci1Ib3cgZG8gSSBjaGVjayBvdXQgR1N0cmVhbWVyIGZyb20gZ2l0ID8KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1HU3RyZWFtZXIgaXMgaG9zdGVkIG9uIEZyZWVkZXNrdG9wLm9yZy4gIEdTdHJlYW1lciBjb25zaXN0cyBvZiB2YXJpb3VzIHBhcnRzLgotSW4gdGhlIGJlZ2lubmluZywgeW91IHdpbGwgYmUgaW50ZXJlc3RlZCBpbiB0aGUgImdzdHJlYW1lciIgbW9kdWxlLCBjb250YWluaW5nCi10aGUgY29yZSwgYW5kICJnc3QtcGx1Z2lucy1iYXNlIiBhbmQgImdzdC1wbHVnaW5zLWdvb2QiLCBjb250YWluaW5nIHRoZSBiYXNpYwotc2V0IG9mIHBsdWdpbnMuIEZpbmFsbHksIHlvdSBtYXkgYWxzbyBiZSBpbnRlcmVzdGVkIGluICJnc3QtcGx1Z2lucy11Z2x5IiwKLSJnc3QtcGx1Z2lucy1iYWQiIGFuZCAiZ3N0LWZmbXBlZyIgZm9yIG1vcmUgY29tcHJlaGVuc2l2ZSBtZWRpYSBmb3JtYXQgc3VwcG9ydC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLVRvIGNoZWNrIG91dCB0aGUgbGF0ZXN0IGdpdCB2ZXJzaW9uIG9mIHRoZSBjb3JlIGFuZCB0aGUgYmFzaWMgbW9kdWxlcywgdXNlCi08cHJvZ3JhbWxpc3Rpbmc+Ci0gZm9yIG1vZHVsZSBpbiBnc3RyZWFtZXIgZ3N0LXBsdWdpbnMtYmFzZSBnc3QtcGx1Z2lucy1nb29kOyBkbwotICAgZ2l0IGNsb25lIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC9nc3RyZWFtZXIvJG1vZHVsZSA7Ci0gZG9uZQotPC9wcm9ncmFtbGlzdGluZz4KLVRoaXMgd2lsbCBjcmVhdGUgdGhyZWUgZGlyZWN0b3JpZXMgaW4geW91ciBjdXJyZW50IGRpcmVjdG9yeTogImdzdHJlYW1lciIsCi0iZ3N0LXBsdWdpbnMtYmFzZSIsIGFuZCAiZ3N0LXBsdWdpbnMtZ29vZCIuIElmIHlvdSB3YW50IHRvIGdldCBhbm90aGVyIG1vZHVsZSwKLXVzZSB0aGUgYWJvdmUgZ2l0IGNsb25lIGNvbW1hbmQgbGluZSBhbmQgcmVwbGFjZSAkbW9kdWxlIHdpdGggdGhlIG5hbWUgb2YgdGhlCi1tb2R1bGUuIE9uY2UgeW91IGhhdmUgY2hlY2tlZCBvdXQgdGhlc2UgbW9kdWxlcywgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgaW50bwotZWFjaCBkaXJlY3RvcnkgYW5kIHJ1biAuL2F1dG9nZW4uc2gsIHdoaWNoIHdpbGwgYW1vbmcgb3RoZXIgdGhpbmdzIGNoZWNrb3V0Ci10aGUgY29tbW9uIG1vZHVsZSB1bmRlcm5lYXRoIGVhY2ggbW9kdWxlIGNoZWNrb3V0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotVGhlIDx1bGluayB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL21vZHVsZXMvIj5tb2R1bGVzIHBhZ2U8L3VsaW5rPgotaGFzIGEgbGlzdCBvZiBhY3RpdmUgb25lcyB0b2dldGhlciB3aXRoIGEgc2hvcnQgZGVzY3JpcHRpb24uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJnaXQtZGV2ZWxvcGVyIj4KLSAgICAgICAgPHBhcmE+Ci1Ib3cgZG8gSSBnZXQgZGV2ZWxvcGVyIGFjY2VzcyB0byBHU3RyZWFtZXIgZ2l0ID8KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1JZiB5b3Ugd2FudCB0byBnYWluIGRldmVsb3BlciBhY2Nlc3MgdG8gR1N0cmVhbWVyIGdpdCwgeW91IHNob3VsZCBhc2sgZm9yCi1pdCBvbiB0aGUgZGV2ZWxvcG1lbnQgbGlzdHMsIG9yIGFzayBvbmUgb2YgdGhlIG1haW50YWluZXJzIGRpcmVjdGx5LiBXZSB3aWxsCi11c3VhbGx5IG9ubHkgY29uc2lkZXIgcmVxdWVzdHMgYnkgZGV2ZWxvcGVycyB3aG8gaGF2ZSBiZWVuIGFjdGl2ZSBhbmQKLWNvbXBldGVudCBHU3RyZWFtZXIgY29udHJpYnV0b3JzIGZvciBzb21lIHRpbWUgYWxyZWFkeS4gSWYgeW91IGFyZSBub3QKLWFscmVhZHkgYSByZWdpc3RlcmVkIGRldmVsb3BlciB3aXRoIGEgdXNlciBhY2NvdW50IG9uIEZyZWVkZXNrdG9wLm9yZywKLXlvdSB3aWxsIHRoZW4gaGF2ZSB0byBwcm92aWRlIHRoZW0gd2l0aDoKLTxvcmRlcmVkbGlzdD4KLTxsaXN0aXRlbT48cGFyYT55b3VyIGRlc2lyZWQgdW5peCB1c2VybmFtZTwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPnlvdXIgZnVsbCBuYW1lPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+eW91ciBlLW1haWwgYWRkcmVzczwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPmEgY29weSBvZiB5b3VyIHB1YmxpYyBzc2h2MiBpZGVudGl0eS4KLUlmIHlvdSBkbyBub3QgaGF2ZSB0aGlzIHlldCwgeW91IGNhbiBnZW5lcmF0ZSBpdCBieSBydW5uaW5nCi0ic3NoLWtleWdlbiAtdCByc2EgLWYgfi8uc3NoL2lkX3JzYS5wdWItZmRvIi4gIFRoZSByZXN1bHRpbmcgcHVibGljIGtleQotd2lsbCBiZSBpbiA8ZmlsZW5hbWU+fi8uc3NoL2lkX3JzYS5wdWItZmRvPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT55b3VyIEdQRyBmaW5nZXJwcmludC4gIFRoaXMgd291bGQgYWxsb3cgeW91IHRvCi1hZGQgYW5kIHJlbW92ZSBzc2gga2V5cyB0byB5b3VyIGFjY291bnQuCi08L3BhcmE+PC9saXN0aXRlbT4KLTwvb3JkZXJlZGxpc3Q+Ci0KLU9uY2UgeW91IGhhdmUgYWxsIHRoZXNlIGl0ZW1zLCBzZWUgPHVsaW5rIHVybD0iaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL0FjY291bnRSZXF1ZXN0cyI+aHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL0FjY291bnRSZXF1ZXN0czwvdWxpbms+IGZvciB3aGF0IHRvIGRvIHdpdGggdGhlbS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0iYXV0b2dlbi1saWJ0b29sIj4KLSAgICAgICAgPGxhYmVsPkkgcmFuIGF1dG9nZW4uc2gsIGJ1dCBpdCBmYWlscyB3aXRoIGFjbG9jYWwgZXJyb3JzLiBXaGF0J3Mgd3JvbmcgPzwvbGFiZWw+Ci0gICAgICAgIDxwYXJhPgotPHByb2dyYW1saXN0aW5nPgotKyBydW5uaW5nIGFjbG9jYWwgLUkgbTQgLUkgY29tbW9uL200IC4uLgotYWNsb2NhbDogY29uZmlndXJlLmFjOiA4OiBtYWNybyBgQU1fRElTQUJMRV9TVEFUSUMnIG5vdCBmb3VuZCBpbiBsaWJyYXJ5Ci1hY2xvY2FsOiBjb25maWd1cmUuYWM6IDE3OiBtYWNybyBgQU1fUFJPR19MSUJUT09MJyBub3QgZm91bmQgaW4gbGlicmFyeQotYWNsb2NhbCBmYWlsZWQKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci1XaGF0J3Mgd3JvbmcgPwotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLWFjbG9jYWwgaXMgdW5hYmxlIHRvIGZpbmQgdHdvIG1hY3JvcyBpbnN0YWxsZWQgYnkgbGlidG9vbCBpbiBhIGZpbGUgY2FsbGVkCi1saWJ0b29sLm00LiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBpbmRpY2F0ZSB0aGF0IHlvdSBkb24ndCBoYXZlIGxpYnRvb2wsIGJ1dAotdGhhdCB3b3VsZCBtZWFuIGF1dG9nZW4uc2ggd291bGQgaGF2ZSBmYWlsZWQgb24gbm90IGZpbmRpbmcgbGlidG9vbC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLUl0IGlzIG1vcmUgbGlrZWx5IHRoYXQgeW91IGluc3RhbGxlZCBhdXRvbWFrZSAod2hpY2ggcHJvdmlkZXMgYWNsb2NhbCkgaW4KLWEgZGlmZmVyZW50IHByZWZpeCB0aGFuIGxpYnRvb2wuICBZb3UgY2FuIGNoZWNrIHRoaXMgYnkgZXhhbWluaW5nIGluIHdoYXQKLXByZWZpeCBib3RoIGFjbG9jYWwgYW5kIGxpYnRvb2wgYXJlIGluc3RhbGxlZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLVlvdSBjYW4gZG8gdGhyZWUgdGhpbmdzIHRvIGZpeCB0aGlzIDoKLTxvcmRlcmVkbGlzdD4KLTxsaXN0aXRlbT48cGFyYT5pbnN0YWxsIGF1dG9tYWtlIGluIHRoZSBzYW1lIHByZWZpeCBhcyBsaWJ0b29sPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+Zm9yY2UgdXNlIG9mIHRoZSBhdXRvbWFrZSBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgcHJlZml4IGFzIGxpYnRvb2wKLWJ5IHVzaW5nIHRoZSAtLXdpdGgtYXV0b21ha2Ugb3B0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+ZmlndXJlIG91dCB3aGF0IHByZWZpeCBsaWJ0b29sIGhhcyBiZWVuIGluc3RhbGxlZCB0byBhbmQgcG9pbnQKLWFjbG9jYWwgdG8gdGhlIHJpZ2h0IGxvY2F0aW9uIGJ5IHJ1bm5pbmcKLTxwcm9ncmFtbGlzdGluZz4KLWV4cG9ydCBBQ0xPQ0FMX0ZMQUdTPSItSSAkKHByZWZpeCkvc2hhcmUvYWNsb2NhbCIKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci13aGVyZSB5b3UgcmVwbGFjZSBwcmVmaXggd2l0aCB0aGUgcHJlZml4IHdoZXJlIGxpYnRvb2wgd2FzIGluc3RhbGxlZC4KLTwvcGFyYT48L2xpc3RpdGVtPgotPC9vcmRlcmVkbGlzdD4KLSAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0id2Vycm9yIj4KLSAgICAgICAgPHBhcmE+Ci1XaHkgaXMgIi1XYWxsIC1XZXJyb3IiIGJlaW5nIHVzZWQgPwotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLSItV2FsbCIgaXMgYmVpbmcgdXNlZCBiZWNhdXNlIGl0IGZpbmRzIGEgbG90IG9mIHBvc3NpYmxlIHByb2JsZW1zIHdpdGggY29kZS4KLU5vdCBhbGwgb2YgdGhlbSBhcmUgbmVjZXNzYXJpbHkgYSBwcm9ibGVtLCBidXQgaXQncyBiZXR0ZXIgdG8gaGF2ZSB0aGUgY29tcGlsZXIKLXJlcG9ydCBzb21lIGZhbHNlIHBvc2l0aXZlcyBhbmQgZmluZCBhIHdvcmstYXJvdW5kIHRoYW4gdG8gc3BlbmQgdGltZQotY2hhc2luZyBhIGJ1ZyBmb3IgZGF5cyB0aGF0IHRoZSBjb21waWxlciB3YXMgZ2l2aW5nIHlvdSBoaW50cyBhYm91dC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSItV2Vycm9yIiBpcyB0dXJuZWQgb2ZmIGZvciBhY3R1YWwgcmVsZWFzZXMuICBJdCdzIHR1cm5lZCBvbiBieSBkZWZhdWx0IGZvcgotZ2l0IGFuZCBwcmVyZWxlYXNlcyBzbyB0aGF0IHBlb3BsZSBhY3R1YWxseSBub3RpY2UgYW5kIGZpeCBwcm9ibGVtcyBmb3VuZCBieQotIi1XYWxsIi4gIFdlIHdhbnQgcGVvcGxlIHRvIGFjdGl2ZWx5IGhpdCBhbmQgcmVwb3J0IG9yIGZpeCB0aGVtLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotSWYgZm9yIGFueSByZWFzb24geW91IHdhbnQgdG8gYnlwYXNzIHRoZXNlIGZsYWdzIGFuZCB5b3UgYXJlIGNlcnRhaW4gaXQncyB0aGUKLXJpZ2h0IHRoaW5nIHRvIGRvLCB5b3UgY2FuIHJ1bgotPHByb2dyYW1saXN0aW5nPm1ha2UgRVJST1JfQ0ZMQUdTPSIiPC9wcm9ncmFtbGlzdGluZz4KLXRvIGNsZWFyIHRoZSBDRkxBR1MgZm9yIGVycm9yIGNoZWNraW5nLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgPC9xYW5kYXNldD4KLTwvc2VjdDE+CmRpZmYgLS1naXQgYS9kb2NzL2ZhcS9sZWdhbC54bWwgYi9kb2NzL2ZhcS9sZWdhbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYzU2ZmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9mYXEvbGVnYWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLTxzZWN0MSBpZD0iY2hhcHRlci1sZWdhbCI+Ci0gIDx0aXRsZSBpZD0idGl0bGUtbGVnYWwiPkdTdHJlYW1lciBMZWdhbCBJc3N1ZXM8L3RpdGxlPgotICA8cGFyYT4KLVRoaXMgcGFydCBvZiB0aGUgRkFRIGlzIGJhc2VkIG9uIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyB3ZSBhc2tlZCB0aGUgRlNGCi10byB1bmRlcnN0YW5kIGhvdyB0aGUgR1BMIHdvcmtzIGFuZCBob3cgcGF0ZW50cyBhZmZlY3RzIHRoZSBHUEwuIFRoZXNlCi1xdWVzdGlvbnMgd2VyZSBhbnN3ZXJlZCBieSB0aGUgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5mc2Yub3JnLyI+Ci1GU0YgbGF3eWVyczwvdWxpbms+LCBzbyB3ZSB2aWV3IHRoZW0gYXMgdGhlCi1maW5hbCBpbnRlcnByZXRhdGlvbiBvbiBob3cgdGhlIEdQTCBhbmQgTEdQTCBpbnRlcmFjdCB3aXRoIHBhdGVudHMgaW4gb3VyIAotb3Bpbmlvbi4gVGhpcyBjb25zdWx0YW5jeSB3YXMgcGFpZCBmb3IgYnkKLTx1bGluayB1cmw9Imh0dHA6Ly93d3cuZmx1ZW5kby5jb20vIj5GbHVlbmRvPC91bGluaz4KLWluIG9yZGVyIHRvIG9idGFpbiBjbGVhciBhbmQgcXVvdGFibGUgYW5zd2Vycy4gIFRoZXNlIGFuc3dlcnMgd2VyZSBjZXJ0aWZpZWQKLWJ5IHRoZSBGU0YgbGF3eWVyIHRlYW0gYW5kIHZlcmlmaWVkIGJ5IEZTRiBsYXd5ZXIgYW5kIGxhdyBwcm9mZXNzb3IgRWJlbiBNb2dsZW4uCi0gIDwvcGFyYT4KLQotICA8cWFuZGFzZXQgZGVmYXVsdGxhYmVsPSJxYW5kYSI+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0ibGVnYWwtZGlzdHJpYnV0ZS10aHJlZSI+Ci0gICAgICAgIDxwYXJhPgotQ2FuIHNvbWVvbmUgZGlzdHJpYnV0ZSB0aGUgY29tYmluYXRpb24gb2YKLTxpdGVtaXplZGxpc3Q+Ci0gIDxsaXN0aXRlbT48cGFyYT5HU3RyZWFtZXIsIHRoZSBMR1BMIGxpYnJhcnk8L3BhcmE+PC9saXN0aXRlbT4KLSAgPGxpc3RpdGVtPjxwYXJhPk15UGxheWVyLCBhIEdQTCBwbGF5YmFjayBhcHBsaWNhdGlvbjwvcGFyYT48L2xpc3RpdGVtPgotICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJpbmFyeS1vbmx5IFNvcmVuc29uIGRlY29kZXI8L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotdG9nZXRoZXIgaW4gb25lIGRpc3RyaWJ1dGlvbi9vcGVyYXRpbmcgc3lzdGVtID8gSWYgbm90LCB3aGF0Ci1uZWVkcyB0byBiZSBjaGFuZ2VkIHRvIG1ha2UgdGhpcyBwb3NzaWJsZSA/Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotVGhpcyB3b3VsZCBiZSBhIHByb2JsZW0sIGJlY2F1c2UgdGhlIEdTdHJlYW1lciBhbmQgTXlQbGF5ZXIgbGljZW5zZXMgd291bGQKLWZvcmJpZCBpdC4gIEluIG9yZGVyIHRvIGxpbmsgR1N0cmVhbWVyIHRvIE15UGxheWVyLCB5b3UgbmVlZCB0byB1c2Ugc2VjdGlvbgotMyBvZiB0aGUgTEdQTCB0byBjb252ZXJ0IEdTdHJlYW1lciB0byBHUEwuICBUaGUgR1BMIHZlcnNpb24gb2YgR1N0cmVhbWVyCi1mb3JiaWRzIGxpbmtpbmcgdG8gdGhlIFNvcmVuc29uIGRlY29kZXIuICBBbnl3YXksIHRoZSBNeVBsYXllciBHUEwKLWxpY2Vuc2UgZm9yYmlkcyB0aGlzLiAgCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLUlmIHRoZSBhdXRob3JzIG9mIE15UGxheWVyIHdhbnQgdG8gcGVybWl0IHRoaXMsIHdlIGhhdmUgYW4KLWV4Y2VwdGlvbiBmb3IgdGhlbTogdGhlIGNvbnRyb2xsZWQgaW50ZXJmYWNlIGV4Y2VwdGlvbiBmcm9tIHRoZSBGQVEuCi1UaGUgaWRlYSBvZiB0aGlzIGlzIHRoYXQgeW91IGNhbid0IGdldCBhcm91bmQgdGhlIEdQTCBqdXN0IGJ5IGluY2x1ZGluZwotYSBMR1BMIGJpdCBpbiB0aGUgbWlkZGxlLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci1Ob3RlOiBNeVBsYXllciBpcyBhIGNvbXBsZXRlbHkgZmljdGl0dW91cyBhcHBsaWNhdGlvbiBhdCB0aGUgdGltZSBvZiB3cml0aW5nLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJsZWdhbC1iaW5hcnktcGx1Z2luIj4KLSAgICAgICAgPHBhcmE+Ci1TdXBwb3NlIEFwcGxlIHdhbnRzIHRvIHdyaXRlIGEgYmluYXJ5LW9ubHkgcHJvcHJpZXRhcnkgCi1wbHVnaW4gZm9yIEdTdHJlYW1lciB0byBkZWNvZGUgU29yZW5zb24gdmlkZW8sIHdoaWNoIHdpbGwgYmUgc2hpcHBlZCAKLXN0YW5kLWFsb25lLCBub3QgcGFydCBvZiBhIHBhY2thZ2UgbGlrZSBpbiB0aGUgcXVlc3Rpb24gYWJvdmUuIAotQ2FuIEFwcGxlIGRpc3RyaWJ1dGUgdGhpcyBiaW5hcnktb25seSBwbHVnaW4gPwotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLVllcywgbW9kdWxvIGNlcnRhaW4gcmV2ZXJzZSBlbmdpbmVlcmluZyByZXF1aXJlbWVudHMgaW4gc2VjdGlvbiA2IG9mCi10aGUgTEdQTC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImxlZ2FsLWdwbC1wcm9ncmFtIj4KLSAgICAgICAgPHBhcmE+Ci1JZiBhIHByb2dyYW0gcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB1c2VzIGEgbGlicmFyeSB0aGF0IAotaXMgTEdQTCwgYW5kIHRoaXMgbGlicmFyeSBjYW4gZGxvcGVuIHBsdWctaW5zIGF0IHJ1bnRpbWUsIHdoYXQgYXJlIHRoZQotcmVxdWlyZW1lbnRzIGZvciB0aGUgbGljZW5zZSBvZiB0aGUgcGx1Zy1pbiA/Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotWW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgcGx1Zy1pbiB3aXRoIHRoZSBHUEwgYXBwbGljYXRpb24uIAotRGlzdHJpYnV0aW5nIHRoZSBwbHVnLWluIGFsb25lLCB3aXRoIHRoZSBrbm93bGVkZ2UgdGhhdCBpdCB3aWxsIGJlIHVzZWQKLXByaW1hcmlseSBieSBHUEwgc29mdHdhcmUgaXMgYSBiaXQgb2YgYW4gZWRnZSBjYXNlLiAgV2Ugd2lsbCBub3QgYWR2aXNlIHlvdQotdGhhdCBpdCB3b3VsZCBiZSBzYWZlIHRvIGRvIHNvLCBidXQgd2UgYWxzbyB3aWxsIG5vdCBhZHZpc2UgeW91IHRoYXQgaXQKLXdvdWxkIGJlIGFic29sdXRlbHkgZm9yYmlkZGVuLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0ibGVnYWwtc2FmZS1jb3VudHJpZXMiPgotICAgICAgICA8cGFyYT4KLUNhbiBzb21lb25lIGluIGEgY291bnRyeSB0aGF0IGRvZXMgbm90IGhhdmUgc29mdHdhcmUgcGF0ZW50cyBkaXN0cmlidXRlIAotY29kZSBjb3ZlcmVkIGJ5IFVTIHBhdGVudHMgdW5kZXIgdGhlIEdQTCB0byBwZW9wbGUgaW4sIGZvciBleGFtcGxlLCBOb3J3YXkgPyAKLUlmIGhlL3NoZSB2aXNpdHMgdGhlIFVTLCBjYW4gaGUvc2hlIGJlIGFycmVzdGVkID8KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1ZZXMsIGhlIGNhbi4KLU5vLCAgdGhlcmUgYXJlIG5vIGNyaW1pbmFsIHBlbmFsdGllcyBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBpbiB0aGUgVVMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJsZWdhbC11bnNhZmUtY291bnRyaWVzIj4KLSAgICAgICAgPHBhcmE+Ci1DYW4gc29tZW9uZSBmcm9tIHRoZSBVUyBkaXN0cmlidXRlIHNvZnR3YXJlIGNvdmVyZWQgYnkKLVVTIHBhdGVudHMgdW5kZXIgdGhlIEdQTCB0byBwZW9wbGUgaW4gTm9yd2F5ID8gVG8gcGVvcGxlIGluIHRoZSBVUyA/Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotVGhpcyBtaWdodCBpbmZyaW5nZSBzb21lIHBhdGVudHMsIGJ1dCB0aGUgR1BMIHdvdWxkIG5vdCBmb3JiaWQgaXQgCi1hYnNlbnQgc29tZSBhY3R1YWwgcmVzdHJpY3Rpb24sIHN1Y2ggYXMgYSBjb3VydCBqdWRnZW1lbnQgb3IgYWdyZWVtZW50LgotVGhlIFVTIGdvdmVybm1lbnQgaXMgZW1wb3dlcmVkIHRvIHJlZnVzZSBpbXBvcnRhdGlvbiBvZiBwYXRlbnQKLWluZnJpbmdpbmcgZGV2aWNlcywgaW5jbHVkaW5nIHNvZnR3YXJlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0ibGVnYWwtZ3BsLWxpYnJhcnktcGF0ZW50cyI+Ci0gICAgICAgIDxwYXJhPgotVGhlcmUgYXJlIGEgbG90IG9mIEdQTC0gb3IgTEdQTC1saWNlbnNlZCBsaWJyYXJpZXMgdGhhdCAKLWhhbmRsZSBtZWRpYSBjb2RlY3Mgd2hpY2ggaGF2ZSBwYXRlbnRzLiAgVGFrZSBtYWQsIGFuIG1wMyBkZWNvZGluZyBsaWJyYXJ5LAotYXMgYW4gZXhhbXBsZS4gIEl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuIEluIGNvdW50cmllcyB3aGVyZSBwYXRlbnRzIAotYXJlIHZhbGlkLCBkb2VzIHRoaXMgaW52YWxpZGF0ZSB0aGUgR1BMIGxpY2Vuc2UgZm9yIHRoaXMgcHJvamVjdCA/Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotVGhlIG1lcmUgZXhpc3RlbmNlIG9mIGEgcGF0ZW50IHdoaWNoIG1pZ2h0IHJlYWQgb24gdGhlIHByb2dyYW0gZG9lcyBub3QKLWNoYW5nZSBhbnl0aGluZy4gSG93ZXZlciwgaWYgYSBjb3VydCBqdWRnZW1lbnQgb3Igb3RoZXIgYWdyZWVtZW50Ci1wcmV2ZW50cyB5b3UgZnJvbSBkaXN0cmlidXRpbmcgbGlibWFkIHVuZGVyIEdQTCB0ZXJtcywgeW91IGNhbiBub3QKLWRpc3RyaWJ1dGUgaXQgYXQgYWxsLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci1UaGUgR1BMIGFuZCBMR1BMIHNheSAoc2VjdGlvbnMgNyBhbmQgMTEpOgotPHF1b3RlPklmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIKLW9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbgotYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC48L3F1b3RlPgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0ibGVnYWwtZ3BsLWNvdXJ0LWp1ZGdtZW50Ij4KLSAgICAgICAgPHBhcmE+Ci1TbyBsZXQncyBzYXkgdGhlcmUgaXMgYSBjb3VydCBqdWRnZW1lbnQuIERvZXMgdGhpcyBtZWFuIHRoYXQgdGhlIEdQTCBsaWNlbnNlIGlzCi1pbnZhbGlkIGZvciB0aGUgcHJvamVjdCBldmVyeXdoZXJlLCBvciBvbmx5IGluIHRoZSBjb3VudHJpZXMgd2hlcmUgaXQgY29uZmxpY3RzCi13aXRoIHRoZSBhcHBsaWNhYmxlIHBhdGVudHMgPwotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3F1ZXN0aW9uPgotCi0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLVRoZSBHUEwgb3BlcmF0ZXMgb24gYSBwZXItYWN0aW9uLCBub3QgcGVyLXByb2dyYW0gYmFzaXMuICBUaGF0IGlzLCBpZgoteW91IGFyZSBpbiBhIGNvdW50cnkgd2hpY2ggaGFzIHNvZnR3YXJlIHBhdGVudHMsIGFuZCBhIGNvdXJ0IHRlbGxzIHlvdQotdGhhdCB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgKHNheSkgbGlibWFkIGluIHNvdXJjZSBjb2RlIGZvcm0sIHRoZW4geW91Ci1jYW5ub3QgZGlzdHJpYnV0ZSBsaWJtYWQgYXQgYWxsLiAgVGhpcyBkb2Vzbid0IGFmZmVjdCBhbnlvbmUgZWxzZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9ImxlZ2FsLWdwbC1hbmQtYmluYXJ5Ij4KLSAgICAgICAgPHBhcmE+Ci1QYXRlbnRlZCBkZWNvZGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gR1N0cmVhbWVyIGVpdGhlciBieQotaGF2aW5nIGEgYmluYXJ5LW9ubHkgcGx1Z2luIGRvIHRoZSBkZWNvZGluZywgb3IgYnkgd3JpdGluZyBhIHBsdWdpbgotKHdpdGggYW55IGFwcGxpY2FibGUgbGljZW5zZSkgdGhhdCBsaW5rcyB0byBhIGJpbmFyeS1vbmx5IGxpYnJhcnkuCi1Eb2VzIHRoaXMgYWZmZWN0IHRoZSBsaWNlbnNpbmcgaXNzdWVzIGludm9sdmVkIGluIHJlZ2FyZHMgdG8gR1BML0xHUEw/Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotTm8uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLQotICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJsZWdhbC1ncGwtcGF0ZW50LWRpc3RyaWJ1dGlvbiI+Ci0gICAgICAgIDxwYXJhPgotSXMgaXQgY29ycmVjdCB0aGF0IHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSB0aGUgR1BMIG1hZCBsaWJyYXJ5IHRvCi1kZWNvZGUgbXAzJ3MsICpldmVuKiBpbiB0aGUgY2FzZSB3aGVyZSB5b3UgaGF2ZSBvYnRhaW5lZCBhIHZhbGlkIGxpY2Vuc2UgCi1mb3IgZGVjb2RpbmcgbXAzID8KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1UaGUgb25seSBHUEwtY29tcGF0aWJsZSBwYXRlbnQgbGljZW5zZXMgYXJlIHRob3NlIHdoaWNoIGFyZSBvcGVuIHRvICAKLWFsbCBwYXJ0aWVzIHBvc2Vzc2luZyBjb3BpZXMgb2YgR1BMIHNvZnR3YXJlIHdoaWNoIHByYWN0aWNlcyB0aGUgCi10ZWFjaGluZ3Mgb2YgdGhlIHBhdGVudC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotSWYgeW91IHRha2UgYSBsaWNlbnNlIHdoaWNoIGRvZXNuJ3QgYWxsb3cgb3RoZXJzIHRvIGRpc3RyaWJ1dGUKLW9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIGxpYm1hZCBwcmFjdGljaW5nIHRoZSBzYW1lIHBhdGVudAotY2xhaW1zIGFzIHRoZSB2ZXJzaW9uIHlvdSBkaXN0cmlidXRlLCB0aGVuIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgYXQKLWFsbC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotICA8L3FhbmRhc2V0PgotPC9zZWN0MT4KZGlmZiAtLWdpdCBhL2RvY3MvZmFxL3N0YXJ0LnhtbCBiL2RvY3MvZmFxL3N0YXJ0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlZGM5MS4uMDAwMDAwMAotLS0gYS9kb2NzL2ZhcS9zdGFydC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08c2VjdDEgaWQ9InN0YXJ0Ij4KLSAgPHRpdGxlIGlkPSJzdGFydC10aXRsZSI+R2V0dGluZyBTdGFydGVkPC90aXRsZT4KLSAgPHBhcmE+Ci1TbyB5b3UncmUgZWFnZXIgdG8gZ2V0IHN0YXJ0ZWQgbGVhcm5pbmcgYWJvdXQgR1N0cmVhbWVyLgotVGhlcmUncyBhIGZldyB3YXlzIHlvdSBjYW4gZ2V0IHN0YXJ0ZWQuCi0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci1JZiB5b3Ugd2FudCB0byBsZWFybiBieSByZWFkaW5nIGFib3V0IGl0LCBzdGFydCB3aXRoCi0gICAgICAgICAgPHhyZWYgbGlua2VuZD0idGl0bGUtZ2VuZXJhbCIgZW5kdGVybT0idGl0bGUtZ2VuZXJhbCIvPgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLUlmIHlvdSdkIHJhdGhlciBsZWFybiBieSB0cnlpbmcgaXQgb3V0LCBzdGFydCB3aXRoCi08eHJlZiBsaW5rZW5kPSJ0aXRsZS1nZXR0aW5nIiBlbmR0ZXJtPSJ0aXRsZS1nZXR0aW5nIi8+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotSWYgeW91IHdhbnQgdG8gbGl2ZSBvbiB0aGUgYmxlZWRpbmcgZWRnZSBhbmQgZGV2ZWxvcCBhbmQgdXNlIGdpdCwgc2VlCi08eHJlZiBsaW5rZW5kPSJ0aXRsZS1naXQiIGVuZHRlcm09InRpdGxlLWdpdCIvPgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3BhcmE+Ci08L3NlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jcy9mYXEvdHJvdWJsZXNob290aW5nLnhtbCBiL2RvY3MvZmFxL3Ryb3VibGVzaG9vdGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MjQzMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9mYXEvdHJvdWJsZXNob290aW5nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi08c2VjdDEgaWQ9ImNoYXB0ZXItdHJvdWJsZXNob290aW5nIj4KLSAgPHRpdGxlIGlkPSJ0aXRsZS10cm91Ymxlc2hvb3RpbmciPlRyb3VibGVzaG9vdGluZyBHU3RyZWFtZXI8L3RpdGxlPgotICA8cWFuZGFzZXQgZGVmYXVsdGxhYmVsPSJxYW5kYSI+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0idHJvdWJsZXNob290aW5nLW1pc3NpbmctcGx1Zy1pbiI+Ci0gICAgICAgIDxwYXJhPgotU29tZSBhcHBsaWNhdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgSSBhbSBtaXNzaW5nIGEgcGx1Zy1pbi4gIFdoYXQgZG8gSSBkbyA/Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotV2VsbCwgc3RhcnQgYnkgY2hlY2tpbmcgaWYgeW91IHJlYWxseSBhcmUgbWlzc2luZyB0aGUgcGx1Zy1pbi4KLSAgPHByb2dyYW1saXN0aW5nPgotZ3N0LWluc3BlY3QtMS4wIChwbHVnLWluKQotICA8L3Byb2dyYW1saXN0aW5nPgotYW5kIHJlcGxhY2UgKHBsdWctaW4pIHdpdGggdGhlIHBsdWctaW4geW91IHRoaW5rIGlzIG1pc3NpbmcuCi1JZiB0aGlzIGRvZXNuJ3QgcmV0dXJuIGFueSByZXN1bHQsIHRoZW4geW91IGVpdGhlciBkb24ndCBoYXZlIGl0IG9yIHlvdXIKLXJlZ2lzdHJ5IGNhbm5vdCBmaW5kIGl0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotSWYgeW91J3JlIG5vdCBzdXJlIGVpdGhlciB3YXksIHRoZW4gY2hhbmNlcyBhcmUgZ29vZCB0aGF0IHlvdSBkb24ndCBoYXZlCi1pdC4gIFlvdSBzaG91bGQgZ2V0IHRoZSBwbHVnLWluIGFuZCBydW4gZ3N0LXJlZ2lzdGVyIHRvIHJlZ2lzdGVyIGl0LgotSG93IHRvIGdldCB0aGUgcGx1Zy1pbiBkZXBlbmRzIG9uIHlvdXIgZGlzdHJpYnV0aW9uLgotPGl0ZW1pemVkbGlzdD4KLTxsaXN0aXRlbT48cGFyYT5pZiB5b3UgcnVuIEdTdHJlYW1lciB1c2luZyBwYWNrYWdlcyBmb3IgeW91ciBkaXN0cmlidXRpb24sIHlvdQotc2hvdWxkIGNoZWNrIHdoYXQgcGFja2FnZXMgYXJlIGF2YWlsYWJsZSBmb3IgeW91ciBkaXN0cmlidXRpb24gYW5kIHNlZQotaWYgYW55IG9mIHRoZSBhdmFpbGFibGUgcGFja2FnZXMgY29udGFpbnMgdGhlIHBsdWctaW4uCi08L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT5pZiB5b3UgcnVuIEdTdHJlYW1lciBmcm9tIGEgc291cmNlIGluc3RhbGwsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZQotdGhlIHBsdWctaW4gZGlkbid0IGdldCBidWlsdCBiZWNhdXNlIHlvdSBhcmUgbWlzc2luZyBhbiBleHRlcm5hbCBsaWJyYXJ5LgotV2hlbiB5b3UgcmFuIGNvbmZpZ3VyZSwgeW91IHNob3VsZCBoYXZlIGdvdHRlbiBvdXRwdXQgb2Ygd2hhdCBwbHVnLWlucyBhcmUKLWdvaW5nIHRvIGJlIGJ1aWx0LiAgWW91IGNhbiByZS1ydW4gY29uZmlndXJlIHRvIHNlZSBpZiBpdCdzIHRoZXJlLgotSWYgaXQgaXNuJ3QsIHRoZXJlIGlzIGEgZ29vZCByZWFzb24gd2h5IGl0IGlzIG5vdCBnZXR0aW5nIGJ1aWx0LgotVGhlIG1vc3QgbGlrZWx5IGlzIHRoYXQgeW91J3JlIG1pc3NpbmcgdGhlIGxpYnJhcnkgeW91IG5lZWQgZm9yIGl0LgotQ2hlY2sgdGhlIFJFQURNRSBmaWxlIGluIGdzdC1wbHVnaW5zIHRvIHNlZSB3aGF0IGxpYnJhcnkgeW91IG5lZWQuCi1NYWtlIHN1cmUgdG8gcmVtZW1iZXIgdG8gcmUtcnVuIGNvbmZpZ3VyZSBhZnRlciBpbnN0YWxsaW5nIHRoZSBzdXBwb3J0aW5nCi1saWJyYXJ5ICEKLTwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPgotaWYgeW91IHJ1biBHU3RyZWFtZXIgZnJvbSBnaXQsIHRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgYXMgZm9yIGEgc291cmNlIGluc3RhbGwuCi1HbyBvdmVyIHRoZSByZWFzb25zIHdoeSB0aGUgcGx1Zy1pbiBkaWRuJ3QgZ2V0IGNvbmZpZ3VyZWQgZm9yIGJ1aWxkLgotQ2hlY2sgb3V0cHV0IG9mIGNvbmZpZy5sb2cgZm9yIGEgY2x1ZSBhcyB0byB3aHkgaXQgZG9lc24ndCBnZXQgYnVpbHQgaWYKLXlvdSdyZSBzdXJlIHlvdSBoYXZlIHRoZSBsaWJyYXJ5IG5lZWRlZCBpbnN0YWxsZWQgaW4gYSBzYW5lIHBsYWNlLgotPC9wYXJhPjwvbGlzdGl0ZW0+Ci08L2l0ZW1pemVkbGlzdD4KLQotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICAgPC9xYW5kYWVudHJ5PgotCi0gICAgIDxxYW5kYWVudHJ5PgotICAgICAgPHF1ZXN0aW9uIGlkPSJ0cm91Ymxlc2hvb3Rpbmctb2xkLXBsdWctaW5zIj4KLSAgICAgICAgPHBhcmE+Ci1JIGdldCBhbiBlcnJvciB0aGF0IHNheXMgc29tZXRoaW5nIGxpa2UKLQotKHByb2Nlc3M6MjY2MjYpOiBHTGliLUdPYmplY3QtV0FSTklORyAqKjogc3BlY2lmaWVkIGluc3RhbmNlIHNpemUgZm9yIHR5cGUgCi1gRFZEUmVhZFNyYycgaXMgc21hbGxlciB0aGFuIHRoZSBwYXJlbnQgdHlwZSdzIGBHc3RFbGVtZW50JyBpbnN0YW5jZSBzaXplCi1XaGF0J3MgIHdyb25nID8KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1JZiB5b3UgcnVuIEdTdHJlYW1lciBmcm9tIGdpdCB1bmluc3RhbGxlZCwgaXQgbWVhbnMgdGhhdCBzb21ldGhpbmcgY2hhbmdlZCBpbgotdGhlIGNvcmUgdGhhdCByZXF1aXJlcyBhIHJlY29tcGlsYXRpb24gaW4gdGhlIHBsdWdpbnMuIFJlY29tcGlsZSB0aGUKLXBsdWdpbnMgYnkgZG9pbmcgIm1ha2UgY2xlYW4gJmFtcDsmYW1wOyBtYWtlIi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLUlmIHlvdSBydW4gR1N0cmVhbWVyIGluc3RhbGxlZCwgaXQgcHJvYmFibHkgbWVhbnMgdGhhdCB5b3UgcnVuIHRoZSBwbHVnaW5zCi1hZ2FpbnN0IGEgZGlmZmVyZW50IChpbmNvbXBhdGlibGUpIHZlcnNpb24gdGhhbiB0aGV5IHdlcmUgY29tcGlsZWQgYWdhaW5zdCwKLXdoaWNoIHVzdXNhbGx5IG1lYW5zIHRoYXQgeW91IHJ1biBtdWx0aXBsZSBpbnN0YWxsYXRpb25zIG9mIEdTdHJlYW1lci4KLVJlbW92ZSB0aGUgb2xkIG9uZXMgYW5kIC0gaWYgbmVlZGVkIC0gcmVjb21waWxlIGFnYWluIHRvIGVuc3VyZSB0aGF0IGl0IGlzCi11c2luZyB0aGUgcmlnaHQgdmVyc2lvbi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLU5vdGUgdGhhdCB3ZSBzdHJvbmdseSByZWNvbW1lbmQgdXNpbmcgRGViaWFuIG9yIFJQTSBwYWNrYWdlcywgc2luY2UgeW91IHdpbGwKLW5vdCBnZXQgc3VjaCBpc3N1ZXMgaWYgeW91IHVzZSBwcm92aWRlZCBwYWNrYWdlcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9InRyb3VibGVzaG9vdGluZy1zZWdmYXVsdCI+Ci0gICAgICAgIDxwYXJhPgotVGhlIEdTdHJlYW1lciBhcHBsaWNhdGlvbiBJIHVzZWQgc3RvcHMgd2l0aCBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gIFdoYXQgY2FuCi1JIGRvID8KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1UaGVyZSBhcmUgdHdvIHRoaW5ncyB5b3UgY2FuIGRvLiAgSWYgeW91IGNvbXBpbGVkIEdTdHJlYW1lciB3aXRoIHNwZWNpZmljCi1vcHRpbWl6YXRpb24gY29tcGlsYXRpb24gZmxhZ3MsIHlvdSBzaG91bGQgdHJ5IHJlY29tcGlsaW5nIEdTdHJlYW1lciwKLXRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIHBsdWctaW5zIHdpdGhvdXQgYW55IG9wdGltaXphdGlvbiBmbGFncy4gIFRoaXMgYWxsb3dzCi15b3UgdG8gdmVyaWZ5IGlmIHRoZSBwcm9ibGVtIGlzIGR1ZSB0byBvcHRpbWl6YXRpb24gb3IgZHVlIHRvIGJhZCBjb2RlLgotU2Vjb25kLCBpdCB3aWxsIGFsc28gYWxsb3cgeW91IHRvIHByb3ZpZGUgYSByZWFzb25hYmxlIGJhY2t0cmFjZSBpbiBjYXNlCi10aGUgc2VnbWVudGF0aW9uIGZhdWx0IHN0aWxsIG9jY3Vycy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLVRoZSBzZWNvbmQgdGhpbmcgeW91IGNhbiBkbyBpcyBsb29rIGF0IHRoZSBiYWNrdHJhY2UgdG8gZ2V0IGFuIGlkZWEgb2Ygd2hlcmUKLXRoaW5ncyBhcmUgZ29pbmcgd3JvbmcsIG9yIGdpdmUgdXMgYW4gaWRlYSBvZiB3aGF0IGlzIGdvaW5nIHdyb25nLgotVG8gcHJvdmlkZSBhIGJhY2t0cmFjZSwgeW91IHNob3VsZAotPG9yZGVyZWRsaXN0PgotPGxpc3RpdGVtPjxwYXJhPgotICBydW4gdGhlIGFwcGxpY2F0aW9uIGluIGdkYiBieSBzdGFydGluZyBpdCB3aXRoCi0gIDxwcm9ncmFtbGlzdGluZz4KLSAgICBnZGIgKGdzdC1hcHBsaWNhdGlvbikKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgKElmIHRoZSBhcHBsaWNhdGlvbiBpcyBpbiBhIHNvdXJjZSB0cmVlIGluc3RlYWQgb2YgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0sCi0gIHlvdSBtaWdodCB3YW50IHRvIHB1dCAibGlidG9vbCIgYmVmb3JlICJnZGIiKQotPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+Ci0gIFBhc3Mgb24gdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gdGhlIGFwcGxpY2F0aW9uIGJ5IHR5cGluZwotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0gICAgc2V0IGFyZ3MgKHRoZSBhcmd1bWVudHMgdG8gdGhlIGFwcGxpY2F0aW9uKQotICA8L3Byb2dyYW1saXN0aW5nPgotICBhdCB0aGUgKGdkYikgcHJvbXB0Ci08L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT4KLSAgVHlwZSAicnVuIiBhdCB0aGUgKGdkYikgcHJvbXB0IGFuZCB3YWl0IGZvciB0aGUgYXBwbGljYXRpb24gdG8KLSAgc2VnZmF1bHQuICBUaGUgYXBwbGljYXRpb24gd2lsbCBydW4gYSBsb3Qgc2xvd2VyLCBob3dldmVyLgotPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+Ci0gIEFmdGVyIHRoZSBzZWdmYXVsdCwgdHlwZSAiYnQiIHRvIGdldCBhIGJhY2t0cmFjZS4gIFRoaXMgaXMgYSBzdGFjayBvZgotICBmdW5jdGlvbiBjYWxscyBkZXRhaWxpbmcgdGhlIHBhdGggZnJvbSBtYWluICgpIHRvIHdoZXJlIHRoZSBjb2RlIGlzCi0gIGN1cnJlbnRseSBhdC4KLTwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPgotICBJZiB0aGUgYXBwbGljYXRpb24geW91J3JlIHRyeWluZyB0byBkZWJ1ZyBjb250YWlucyB0aHJlYWRzLCBpdCBpcyBhbHNvCi0gIHVzZWZ1bCB0byBkbwotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0gICAgaW5mbyB0aHJlYWRzCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIGFuZCBnZXQgYmFja3RyYWNlcyBvZiBhbGwgb2YgdGhlIHRocmVhZHMgaW52b2x2ZWQsIGJ5IHN3aXRjaGluZyB0bwotICBhIGRpZmZlcmVudCB0aHJlYWQgdXNpbmcgInRocmVhZCAobnVtYmVyKSIgYW5kIHRoZW4gYWdhaW4gcmVxdWVzdGluZwotICBhIGJhY2t0cmFjZSB1c2luZyAiYnQiLgotPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+Ci0gIElmIHlvdSBjYW4ndCBvciBkb24ndCB3YW50IHRvIHdvcmsgb3V0IHRoZSBwcm9ibGVtIHlvdXJzZWxmLCBhIGNvcHkgYW5kIHBhc3RlCi0gIG9mIGFsbCB0aGlzIGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB5b3VyIAotICA8bGluayBsaW5rZW5kPSJ1c2luZy1idWdzLXdoZXJlIj5idWcgcmVwb3J0PC9saW5rPi4KLTwvcGFyYT48L2xpc3RpdGVtPgotPC9vcmRlcmVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9InRyb3VibGVzaG9vdGluZy1nc3QtcmVnaXN0ZXIiPgotICAgICAgICA8cGFyYT4KLU9uIG15IHN5c3RlbSB0aGVyZSBpcyBubyBnc3QtcmVnaXN0ZXIgY29tbWFuZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1TaW5jZSBHU3RyZWFtZXIgdmVyc2lvbiAwLjEwIHRoaXMgaXMgbm90IG5lZWRlZCBhbnltb3JlLiBUaGUgcmVnaXN0cnkgd2lsbAotYmUgcmVidWlsdCBhdXRvbWF0aWNhbGx5LiBJZiB5b3Ugc3VzcGVjdCB0aGUgcmVnaXN0cnkgaXMgYnJva2VuLCBqdXN0IGRlbGV0ZSB0aGUKLTxmaWxlbmFtZT5yZWdpc3RyeS4qLnhtbDwvZmlsZW5hbWU+IGZpbGVzIHVuZGVyIDxmaWxlbmFtZT4kSE9NRS8uZ3N0cmVhbWVyLTEuWC88L2ZpbGVuYW1lPgotYW5kIHJ1bgotPHByb2dyYW1saXN0aW5nPgotICBnc3QtaW5zcGVjdC0xLjAKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci10byByZWJ1aWxkIHRoZSByZWdpc3RyeS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotICAgIAotICA8L3FhbmRhc2V0PgotPC9zZWN0MT4KZGlmZiAtLWdpdCBhL2RvY3MvZmFxL3VzaW5nLnhtbCBiL2RvY3MvZmFxL3VzaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5ODQyMS4uMDAwMDAwMAotLS0gYS9kb2NzL2ZhcS91c2luZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotPHNlY3QxIGlkPSJjaGFwdGVyLXVzaW5nIj4KLSAgPHRpdGxlIGlkPSJ0aXRsZS11c2luZyI+VXNpbmcgR1N0cmVhbWVyPC90aXRsZT4KLSAgPHFhbmRhc2V0IGRlZmF1bHRsYWJlbD0icWFuZGEiPgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9InVzaW5nLWdldHRpbmctc3RhcnRlZCI+Ci0gICAgICAgIDxwYXJhPk9rLCBJJ3ZlIGluc3RhbGxlZCBHU3RyZWFtZXIuICBXaGF0IGNhbiBJIGRvIG5leHQgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotRmlyc3Qgb2YgYWxsLCB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBhIHdvcmtpbmcgcmVnaXN0cnkgYW5kIHRoYXQgeW91IGNhbgotaW5zcGVjdCB0aGVtIGJ5IHR5cGluZwotPHByb2dyYW1saXN0aW5nPgotJCBnc3QtaW5zcGVjdC0xLjAgZmFrZXNyYwotPC9wcm9ncmFtbGlzdGluZz4KLVRoaXMgc2hvdWxkIHByaW50IG91dCBhIGJ1bmNoIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGFydGljdWxhciBlbGVtZW50LgotSWYgdGhpcyB0ZWxscyB5b3UgdGhhdCB0aGVyZSBpcyAibm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiIsIHlvdSBoYXZlbid0Ci1pbnN0YWxsZWQgR1N0cmVhbWVyIGNvcnJlY3RseS4gIFBsZWFzZSBjaGVjawotPGxpbmsgbGlua2VuZD0iY2hhcHRlci1nZXR0aW5nIj5ob3cgdG8gZ2V0IEdTdHJlYW1lcjwvbGluaz4KLUlmIHRoaXMgZmFpbHMgd2l0aCBhbnkgb3RoZXIgbWVzc2FnZSwgd2Ugd291bGQgYXBwcmVjaWF0ZSBhCi08bGluayBsaW5rZW5kPSJ1c2luZy1idWdzLXdoZXJlIj5idWcgcmVwb3J0PC9saW5rPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLUl0J3MgdGltZSB0byB0cnkgb3V0IGEgZmV3IHRoaW5ncy4gIFN0YXJ0IHdpdGggZ3N0LWxhdW5jaCBhbmQgdHdvIHBsdWctaW5zCi10aGF0IHlvdSByZWFsbHkgc2hvdWxkIGhhdmUgOiBmYWtlc3JjIGFuZCBmYWtlc2luay4gIFRoZXkgZG8gbm90aGluZyBleGNlcHQKLXBhc3MgZW1wdHkgYnVmZmVycy4gVHlwZSB0aGlzIGF0IHRoZSBjb21tYW5kLWxpbmUgOgotPHByb2dyYW1saXN0aW5nPgotJCBnc3QtbGF1bmNoLTEuMCAtdiBmYWtlc3JjIHNpbGVudD0wIG51bS1idWZmZXJzPTMgISBmYWtlc2luayBzaWxlbnQ9MAotPC9wcm9ncmFtbGlzdGluZz4KLVRoaXMgd2lsbCBwcmludCBvdXQgb3V0cHV0IHRoYXQgbG9va3Mgc2ltaWxhciB0byB0aGlzIDoKLTxwcm9ncmFtbGlzdGluZz4KLVJVTk5JTkcgcGlwZWxpbmUgLi4uCi1mYWtlc3JjMDogbGFzdC1tZXNzYWdlID0gImdldCAgICAgICoqKioqKiogKGZha2VzcmMwOnNyYylndDsgKDAgYnl0ZXMsIDApIDB4ODA1NzUxMCIKLWZha2VzaW5rMDogbGFzdC1tZXNzYWdlID0gImNoYWluICAgKioqKioqKiAoZmFrZXNpbmswOnNpbmspbHQ7ICgwIGJ5dGVzLCAwKSAweDgwNTc1MTAiCi1mYWtlc3JjMDogbGFzdC1tZXNzYWdlID0gImdldCAgICAgICoqKioqKiogKGZha2VzcmMwOnNyYylndDsgKDAgYnl0ZXMsIDEpIDB4ODA1NzUxMCIKLWZha2VzaW5rMDogbGFzdC1tZXNzYWdlID0gImNoYWluICAgKioqKioqKiAoZmFrZXNpbmswOnNpbmspbHQ7ICgwIGJ5dGVzLCAxKSAweDgwNTc1MTAiCi1mYWtlc3JjMDogbGFzdC1tZXNzYWdlID0gImdldCAgICAgICoqKioqKiogKGZha2VzcmMwOnNyYylndDsgKDAgYnl0ZXMsIDIpIDB4ODA1NzUxMCIKLWZha2VzaW5rMDogbGFzdC1tZXNzYWdlID0gImNoYWluICAgKioqKioqKiAoZmFrZXNpbmswOnNpbmspbHQ7ICgwIGJ5dGVzLCAyKSAweDgwNTc1MTAiCi1leGVjdXRpb24gZW5kZWQgYWZ0ZXIgNSBpdGVyYXRpb25zIChzdW0gMzAxNDc5MDAwIG5zLCBhdmVyYWdlIDYwMjk1ODAwIG5zLCBtaW4gMzAwMCBucywgbWF4IDEwNTQ4MjAwMCBucykKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0oU29tZSBwYXJ0cyBvZiBvdXRwdXQgaGF2ZSBiZWVuIHJlbW92ZWQgZm9yIGNsYXJpdHkpICBJZiBpdCBsb29rcyBzaW1pbGFyLCB0aGVuCi1HU3RyZWFtZXIgaXRzZWxmIGlzIHJ1bm5pbmcgY29ycmVjdGx5LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0idXNpbmctc291bmQiPgotICAgICAgICA8cGFyYT5DYW4gbXkgc3lzdGVtIHBsYXkgc291bmQgdGhyb3VnaCBHU3RyZWFtZXIgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotWW91IGNhbiB0ZXN0IHRoaXMgYnkgdHJ5aW5nIHRvIHBsYXkgYSBzaW5lIHRvbmUuICBGb3IgdGhpcywgeW91IG5lZWQgdG8KLWxpbmsgdGhlIGF1ZGlvdGVzdHNyYyBlbGVtZW50IHRvIGFuIG91dHB1dCBlbGVtZW50IHRoYXQgbWF0Y2hlcyB5b3VyIGhhcmR3YXJlLgotQSAobm9uLWNvbXBsZXRlKSBsaXN0IG9mIG91dHB1dCBwbHVnLWlucyBmb3IgYXVkaW8gaXMKLTxpdGVtaXplZGxpc3Q+Ci08bGlzdGl0ZW0+PHBhcmE+cHVsc2VzaW5rIGZvciBQdWxzZWF1ZGlvIG91dHB1dDwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPm9zc3NpbmsgZm9yIE9TUyBvdXRwdXQ8L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT5lc2RzaW5rIGZvciBFU291bmQgb3V0cHV0PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+YWxzYXNpbmsgZm9yIEFMU0Egb3V0cHV0PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+YWxzYXNwZGlmc2luayBmb3IgQUxTQSBTL1BESUYgb3V0cHV0PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+amFja2F1ZGlvc2luayBmb3IgSkFDSyBvdXRwdXQ8L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotRmlyc3Qgb2YgYWxsLCBydW4gZ3N0LWluc3BlY3QtMS4wIG9uIHRoZSBvdXRwdXQgcGx1Zy1pbiB5b3Ugd2FudCB0byB1c2UgdG8KLW1ha2Ugc3VyZSB5b3UgaGF2ZSBpdCBpbnN0YWxsZWQuICBGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSBQdWxzZWF1ZGlvLCBydW4KLTxwcm9ncmFtbGlzdGluZz4KLSQgZ3N0LWluc3BlY3QtMS4wIHB1bHNlc2luawotPC9wcm9ncmFtbGlzdGluZz4KLWFuZCBzZWUgaWYgdGhhdCBwcmludHMgb3V0IGEgYnVuY2ggb2YgcHJvcGVydGllcyBmb3IgdGhlIHBsdWctaW4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1UaGVuIHRyeSB0byBwbGF5IHRoZSBzaW5lIHRvbmUgYnkgcnVubmluZwotPHByb2dyYW1saXN0aW5nPgotJCBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgcHVsc2VzaW5rCi08L3Byb2dyYW1saXN0aW5nPgotYW5kIHNlZSBpZiB5b3UgaGVhciBzb21ldGhpbmcuICBNYWtlIHN1cmUgeW91ciB2b2x1bWUgaXMgdHVybmVkIHVwLAotYnV0IGFsc28gbWFrZSBzdXJlIGl0IGlzIG5vdCB0b28gbG91ZCBhbmQgeW91IGFyZSBub3Qgd2VhcmluZyB5b3VyIGhlYWRwaG9uZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1JbiBHTk9NRSwgeW91IGNhbiBjb25maWd1cmUgYXVkaW8gb3V0cHV0IGZvciBtb3N0IGFwcGxpY2F0aW9ucyBieSBydW5uaW5nCi08cHJvZ3JhbWxpc3Rpbmc+Ci0kIGdzdHJlYW1lci1wcm9wZXJ0aWVzCi08L3Byb2dyYW1saXN0aW5nPgotd2hpY2ggY2FuIGFsc28gYmUgZm91bmQgaW4gdGhlIHN0YXJ0IG1lbnUgKEFwcGxpY2F0aW9ucyAtPiBQcmVmZXJlbmNlcyAtPgotTXVsdGltZWRpYSBTeXN0ZW1zIFNlbGVjdG9yKS4gSW4gS0RFLCB0aGVyZSBpcyBub3QgeWV0IGEgc2hhcmVkIHdheSBvZgotc2V0dGluZyBhdWRpbyBvdXRwdXQgZm9yIGFsbCBhcHBsaWNhdGlvbnM7IGhvd2V2ZXIsIGFwcGxpY2F0aW9ucyBzdWNoCi1hcyBBbWFyb2sgYWxsb3cgeW91IHRvIHNwZWNpZnkgYW4gYXVkaW8gb3V0cHV0IGluIHRoZWlyIHByZWZlcmVuY2VzIGRpYWxvZy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9InVzaW5nLWdzdC1pbnNwZWN0Ij4KLSAgICAgICAgPHBhcmE+SG93IGNhbiBJIHNlZSB3aGF0IEdTdHJlYW1lciBwbHVnaW5zIEkgaGF2ZSBvbiBteSBzeXN0ZW0gPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotVG8gZG8gdGhpcyB5b3UgdXNlIHRoZSBnc3QtaW5zcGVjdAotY29tbWFuZC1saW5lIHRvb2wsIHdoaWNoIGNvbWVzIHN0YW5kYXJkIHdpdGggR1N0cmVhbWVyLgotSW52b2tlZCB3aXRob3V0IGFueSBhcmd1bWVudHMsCi08cHJvZ3JhbWxpc3Rpbmc+Ci0kIGdzdC1pbnNwZWN0LTEuMAotPC9wcm9ncmFtbGlzdGluZz4KLXdpbGwgcHJpbnQgb3V0IGEgbGlzdGluZyBvZiBpbnN0YWxsZWQgcGx1Z2lucy4KLVRvIGxlYXJuIG1vcmUgYWJvdXQgYSBwYXJ0aWN1bGFyIHBsdWdpbiwgcGFzcyBpdHMgbmFtZSBvbiB0aGUgY29tbWFuZCBsaW5lLiAKLUZvciBleGFtcGxlLAotPHByb2dyYW1saXN0aW5nPgotJCBnc3QtaW5zcGVjdC0xLjAgdm9sdW1lCi08L3Byb2dyYW1saXN0aW5nPgotd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdm9sdW1lIHBsdWdpbi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0gICAgPHFhbmRhZW50cnk+Ci0gICAgICA8cXVlc3Rpb24gaWQ9InVzaW5nLWJ1Z3Mtd2hlcmUiPgotICAgICAgICA8cGFyYT5XaGVyZSBzaG91bGQgSSByZXBvcnQgYnVncyA/PC9wYXJhPgotICAgICAgPC9xdWVzdGlvbj4KLQotICAgICAgPGFuc3dlcj4KLSAgICAgICAgPHBhcmE+Ci1CdWcgbWFuYWdlbWVudCBpcyBub3cgaG9zdGVkIG9uIEdOT01FJ3MgQnVnemlsbGEgYXQKLTx1bGluayB1cmw9Imh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciPmh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmc8L3VsaW5rPiwKLXVuZGVyIHRoZSBwcm9kdWN0IEdTdHJlYW1lci4gCi1Vc2luZyBidWd6aWxsYSB5b3UgY2FuIHZpZXcgcGFzdCBidWcgaGlzdG9yeSwgcmVwb3J0IG5ldyBidWdzLCBldGMuCi1CdWd6aWxsYSByZXF1aXJlcyB5b3UgdG8gbWFrZSBhbiBhY2NvdW50IGhlcmUsIHdoaWNoIG1pZ2h0IHNlZW0gY3VtYmVyc29tZSwKLWJ1dCBhbGxvd3MgdXMgdG8gYXQgbGVhc3QgaGF2ZSBhIGNoYW5jZSBhdCBjb250YWN0aW5nIHlvdSBmb3IgZnVydGhlcgotaW5mb3JtYXRpb24sIGFzIHdlIHdpbGwgbW9zdCBsaWtlbHkgaGF2ZSB0by4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9hbnN3ZXI+Ci0gICAgPC9xYW5kYWVudHJ5PgotCi0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0idXNpbmctYnVncy1ob3ciPgotICAgICAgICA8cGFyYT5Ib3cgc2hvdWxkIEkgcmVwb3J0IGJ1Z3MgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0KLSAgICAgIDxhbnN3ZXI+Ci0gICAgICAgIDxwYXJhPgotV2hlbiBkb2luZyBhIGJ1ZyByZXBvcnQsIHlvdSBzaG91bGQgYXQgbGVhc3QgZGVzY3JpYmUKLTxpdGVtaXplZGxpc3Q+Ci08bGlzdGl0ZW0+PHBhcmE+eW91ciBkaXN0cmlidXRpb248L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT4KLWhvdyB5b3UgaW5zdGFsbGVkIEdTdHJlYW1lciAoZnJvbSBnaXQsIHNvdXJjZSwgcGFja2FnZXMsIHdoaWNoID8pPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+aWYgeW91IGluc3RhbGxlZCBHU3RyZWFtZXIgYmVmb3JlPC9wYXJhPjwvbGlzdGl0ZW0+Ci08L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLUlmIHRoZSBhcHBsaWNhdGlvbiB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcyB3aXRoIGlzIHNlZ2ZhdWx0aW5nLCB0aGVuCi1wcm92aWRlIHVzIHdpdGggdGhlIG5lY2Vzc2FyeSBnZGIgb3V0cHV0LiAgU2VlCi08eHJlZiBsaW5rZW5kPSJ0cm91Ymxlc2hvb3Rpbmctc2VnZmF1bHQiIGVuZHRlcm09InRyb3VibGVzaG9vdGluZy1zZWdmYXVsdCIvPgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Fuc3dlcj4KLSAgICA8L3FhbmRhZW50cnk+Ci0KLSAgICA8cWFuZGFlbnRyeT4KLSAgICAgIDxxdWVzdGlvbiBpZD0idXNpbmctZ3N0LWxhdW5jaCI+Ci0gICAgICAgIDxwYXJhPkhvdyBkbyBJIHVzZSB0aGUgR1N0cmVhbWVyIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgPzwvcGFyYT4KLSAgICAgIDwvcXVlc3Rpb24+Ci0gICAgICA8YW5zd2VyPgotICAgICAgICA8cGFyYT4KLVlvdSBhY2Nlc3MgdGhlIEdTdHJlYW1lciBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHVzaW5nIHRoZSBjb21tYW5kIGdzdC1sYXVuY2guCi1UbyBkZWNvZGUgYW4gbXAzIGFuZCBwbGF5IGl0IHRocm91Z2ggUHVsc2VhdWRpbywgeW91IGNvdWxkIHVzZQotPHByb2dyYW1saXN0aW5nPgotZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj10aGVzb25nLm1wMyAhIG1hZCAhIHB1bHNlc2luawotPC9wcm9ncmFtbGlzdGluZz4uCi1Nb3JlIGV4YW1wbGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgZ3N0LWxhdW5jaCBtYW4gcGFnZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLVRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSByaWdodCBjb2RlYyBpbiBhIHBpcGVsaW5lLCB0cnkgCi08cHJvZ3JhbWxpc3Rpbmc+Ci1nc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPW15LXJhbmRvbS1tZWRpYS1maWxlLm1wZWcgISBkZWNvZGViaW4gIQotIHB1bHNlc2luawotPC9wcm9ncmFtbGlzdGluZz4uCi1vcgotPHByb2dyYW1saXN0aW5nPgotZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj1teS1yYW5kb20tbWVkaWEtZmlsZS5tcGVnICEgZGVjb2RlYmluICEKLSB2aWRlb2NvbnZlcnQgISB4dmltYWdlc2luawotPC9wcm9ncmFtbGlzdGluZz4KLVNvbWV0aGluZyBtb3JlIGNvbXBsaWNhdGVkOgotPHByb2dyYW1saXN0aW5nPgotZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj1teS1yYW5kb20tbWVkaWEtZmlsZS5tcGVnICEgZGVjb2RlYmluIG5hbWU9ZGVjb2RlcgotICAgZGVjb2Rlci4gISB2aWRlb2NvbnZlcnQgISB4dmltYWdlc2luawotICAgZGVjb2Rlci4gISBhdWRpb2NvbnZlcnQgISBwdWxzZXNpbmsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci1XZSBhbHNvIGhhdmUgYSBiYXNpYyBtZWRpYSBwbGF5aW5nIHBsdWdpbiB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIG1vc3QgdGhpbmdzCi1mb3IgeW91LiBUaGlzIHBsdWdpbiBpcyBjYWxsZWQgcGxheWJpbi4gVHJ5IHRoaXM6Ci08cHJvZ3JhbWxpc3Rpbmc+Ci1nc3QtbGF1bmNoLTEuMCBwbGF5YmluIHVyaT1maWxlOi8vL2hvbWUvam9lL215LXJhbmRvbS1tZWRpYS1maWxlLm1wZWcKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci1UaGlzIHNob3VsZCBwbGF5IHRoZSBmaWxlIGlmIHRoZSBmb3JtYXQgaXMgc3VwcG9ydGVkLCBpZS4geW91IGhhdmUgYWxsIHRoZQotbmVjZXNzYXJ5IGRlbXV4aW5nIGFuZCBkZWNvZGluZyBhbmQgc29tZSBvdXRwdXQgcGx1Z2lucyBpbnN0YWxsZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYW5zd2VyPgotICAgIDwvcWFuZGFlbnRyeT4KLSAgPC9xYW5kYXNldD4KLTwvc2VjdDE+CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9NYWtlZmlsZS5hbSBiL2RvY3MvZ3N0L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTdmYTFlLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCi0KLSMgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSwgZS5nLiAnZ2xpYicuCi0jIERPQ19NT0RVTEU9Z3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ACi1ET0NfTU9EVUxFPWdzdHJlYW1lcgotCi0jIGRvbid0IHdhbnQgJChET0NfTU9EVUxFKS1zY2FuLmMgdG8gYmUgYnVpbHQgd2l0aCAtV2Vycm9yCi1FUlJPUl9DRkxBR1M9Ci0KLUJVSUxUX1NPVVJDRVM9Z3N0cmVhbWVyLnR5cGVzCi0KLSMgZm9yIHVwbG9hZC1kb2MubWFrCi1ET0M9Z3N0cmVhbWVyCi1GT1JNQVRTPWh0bWwKLWh0bWw6IGh0bWwtYnVpbGQuc3RhbXAKLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKLQotIyBUaGUgdG9wLWxldmVsIFNHTUwgZmlsZS4gQ2hhbmdlIGl0IGlmIHlvdSB3YW50LgotRE9DX01BSU5fU0dNTF9GSUxFPSQoRE9DX01PRFVMRSktZG9jcy5zZ21sCi0KLSMgVGhlIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBjb2RlLiBSZWxhdGl2ZSB0byAkKHRvcF9zcmNkaXIpLgotIyBndGstZG9jIHdpbGwgc2VhcmNoIGFsbCAuYyAmIC5oIGZpbGVzIGJlbmVhdGggaGVyZSBmb3IgaW5saW5lIGNvbW1lbnRzCi0jIGRvY3VtZW50aW5nIGZ1bmN0aW9ucyBhbmQgbWFjcm9zLgotRE9DX1NPVVJDRV9ESVIgPSAkKHRvcF9zcmNkaXIpL2dzdAotCi0jIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1zY2FuLgotU0NBTl9PUFRJT05TPS0tZGVwcmVjYXRlZC1ndWFyZHM9IkdTVF9ESVNBQkxFX0RFUFJFQ0FURUQiIFwKLSAgLS1pZ25vcmUtZGVjb3JhdG9ycz0nR1NUX0VYUE9SVCcKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtbWtkYi4KLU1LREJfT1BUSU9OUz0tLXNnbWwtbW9kZSAtLW91dHB1dC1mb3JtYXQ9eG1sIC0taWdub3JlLWZpbGVzPXBhcnNlCi0KLSMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLWZpeHJlZi4KLUZJWFhSRUZfT1BUSU9OUz0tLWV4dHJhLWRpcj0kKEdMSUJfUFJFRklYKS9zaGFyZS9ndGstZG9jL2h0bWwKLQotIyBVc2VkIGZvciBkZXBlbmRlbmNpZXMuCi1IRklMRV9HTE9CPSQodG9wX3NyY2RpcikvZ3N0LyouaAotQ0ZJTEVfR0xPQj0kKHRvcF9zcmNkaXIpL2dzdC8qLmMKLQotIyBIZWFkZXIgZmlsZXMgdG8gaWdub3JlIHdoZW4gc2Nhbm5pbmcuIFVzZSBiYXNlIGZpbGUgbmFtZSwgbm8gcGF0aHMKLUlHTk9SRV9IRklMRVM9IFwKLQlnZXR0ZXh0LmggXAotCWdsaWItY29tcGF0LXByaXZhdGUuaCBcCi0JZ2xpYi1jb21wYXQuaCBcCi0JZ3N0LWkxOG4tYXBwLmggXAotCWdzdC1pMThuLWxpYi5oIFwKLQlnc3RfcHJpdmF0ZS5oIFwKLQlnc3RlbGVtZW50ZGV0YWlscy5oIFwKLQlnc3RtYWNyb3MuaCBcCi0JZ3N0bWFyc2hhbC5oIFwKLQltYXRoLWNvbXBhdC5oIFwKLQlcCi0JZ3JhbW1hci50YWIuaCBcCi0JZ3JhbW1hci50YWIucHJlLmggXAotICBwYXJzZV9sZXguaCBcCi0JdHlwZXMuaCBcCi0JXAotCWdzdC1wcmludGYuaCBcCi0JcHJpbnRmLWFyZ3MuaCBcCi0JcHJpbnRmLWV4dGVuc2lvbi5oIFwKLQlwcmludGYtcGFyc2UuaCBcCi0JdmFzbnByaW50Zi5oCi0KLWdzdC11bml2ZXJzZS5zdmc6IGdzdC11bml2ZXJzZS5kb3QKLQktZG90IC1Uc3ZnICQ8IHwgc2VkICdzL1woZm9udC1zaXplOlswLTldKlwuWzAtOV0qXCk7L1wxcHg7L2cnID4kQAotCi0jIEltYWdlcyB0byBjb3B5IGludG8gSFRNTCBkaXJlY3RvcnkuCi1IVE1MX0lNQUdFUyA9Ci0KLSMgRXh0cmEgU0dNTCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSAkKERPQ19NQUlOX1NHTUxfRklMRSkuCi1jb250ZW50X2ZpbGVzID0gYnVpbGRpbmcueG1sIHJ1bm5pbmcueG1sIGdzdC11bml2ZXJzZS5zdmcKLQotIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlLgotZXh0cmFfZmlsZXMgPSBnc3QtdW5pdmVyc2UuZG90Ci0KLSMgQ0ZMQUdTIGFuZCBMREZMQUdTIGZvciBjb21waWxpbmcgc2NhbiBwcm9ncmFtLiBPbmx5IG5lZWRlZCBpZiB5b3VyIGFwcC9saWIKLSMgY29udGFpbnMgR3RrT2JqZWN0cy9HT2JqZWN0cyBhbmQgeW91IHdhbnQgdG8gZG9jdW1lbnQgc2lnbmFscyBhbmQgcHJvcGVydGllcy4KLUdUS0RPQ19DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAtREdTVF9VU0VfVU5TVEFCTEVfQVBJCi1HVEtET0NfTElCUyA9ICQoR1NUX09CSl9MSUJTKSBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhCi0KLUdUS0RPQ19FWFRSQV9FTlZJUk9OTUVOVD0gXAotICAgIEdTVF9QTFVHSU5fU0NBTk5FUl8xXzA9JCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyCi0KLSMgSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zLCBwbGFjZSB0aGVtIGluIHRoaXMgZmlsZQotIyBhbmQgdW5jb21tZW50IHRoaXMgbGluZS4KLURPQ19PVkVSUklERVMgPSAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQKLQotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9ndGstZG9jLm1hawotCi0jIGd0ay1kb2MubWFrIGRlZmluZXMgQ0xFQU5GSUxFUwotQ0xFQU5GSUxFUyArPSBnc3QtdW5pdmVyc2Uuc3ZnCi0KZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L01ha2VmaWxlLmluIGIvZG9jcy9nc3QvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMDQ4OTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMDUyICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIHRoaXMgc25pcHBldCBpcyB0byBiZSBpbmNsdWRlZCBieSBib3RoIG91ciBkb2Nib29rIG1hbnVhbHMKLSMgYW5kIGd0ay1kb2MgQVBJIHJlZmVyZW5jZXMKLQotIyBpdCBhZGRzIGFuIHVwbG9hZCB0YXJnZXQgdG8gZWFjaCBvZiB0aGVzZSBkaXIncyBNYWtlZmlsZXMKLQotIyBlYWNoIE1ha2VmaWxlLmFtIHNob3VsZCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6Ci0jIC0gRE9DOiB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkb2N1bWVudGF0aW9uCi0jICAgICAgICAoZmFxLCBtYW51YWwsIHB3ZywgZ3N0cmVhbWVyLCBnc3RyZWFtZXItbGlicykKLSMgLSBGT1JNQVRTOiB0aGUgZm9ybWF0cyBpbiB3aGljaCBET0MgaXMgb3V0cHV0Ci0jICAgICAgICAgICAgKGh0bWwgcHMgcGRmKQotCi0jIGlmIHlvdSB3YW50IHRvIHVzZSBpdCwgbWFrZSBzdXJlIHlvdXIgJEhPTUUvLnNzaC9jb25maWcgZmlsZSBjb250YWlucyB0aGUKLSMgY29ycmVjdCBVc2VyIGVudHJ5IGZvciB0aGUgSG9zdCBlbnRyeSBmb3IgdGhlIERPQ19TRVJWRVIKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBnZW5lcmljIGFuZCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHRob21hczogZXhjZXB0IG9mIGNvdXJzZSB0aGF0IHdlIGRpZAotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZG9jcy9nc3QKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPSBnc3RyZWFtZXIudHlwZXMKLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9nc3RyZWFtZXIudHlwZXMuaW4gXAotCSQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MubWFrIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1hawotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotCi0jIGRvbid0IHdhbnQgJChET0NfTU9EVUxFKS1zY2FuLmMgdG8gYmUgYnVpbHQgd2l0aCAtV2Vycm9yCi1FUlJPUl9DRkxBR1MgPSAKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi0KLSMgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSwgZS5nLiAnZ2xpYicuCi0jIERPQ19NT0RVTEU9Z3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ACi1ET0NfTU9EVUxFID0gZ3N0cmVhbWVyCi1CVUlMVF9TT1VSQ0VTID0gZ3N0cmVhbWVyLnR5cGVzCi0KLSMgZm9yIHVwbG9hZC1kb2MubWFrCi1ET0MgPSBnc3RyZWFtZXIKLUZPUk1BVFMgPSBodG1sCi0KLSMgdGhlc2UgdmFyaWFibGVzIGRlZmluZSB0aGUgbG9jYXRpb24gb2YgdGhlIG9ubGluZSBkb2NzCi1ET0NfU0VSVkVSID0gZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZwotRE9DX0JBU0UgPSAvc3J2L2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvd3d3L2RhdGEvZG9jCi1ET0NfVVJMID0gJChET0NfU0VSVkVSKTokKERPQ19CQVNFKQotCi0jIFRoZSB0b3AtbGV2ZWwgU0dNTCBmaWxlLiBDaGFuZ2UgaXQgaWYgeW91IHdhbnQuCi1ET0NfTUFJTl9TR01MX0ZJTEUgPSAkKERPQ19NT0RVTEUpLWRvY3Muc2dtbAotCi0jIFRoZSBmaWxlcyBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZS4gUmVsYXRpdmUgdG8gJCh0b3Bfc3JjZGlyKS4KLSMgZ3RrLWRvYyB3aWxsIHNlYXJjaCBhbGwgLmMgJiAuaCBmaWxlcyBiZW5lYXRoIGhlcmUgZm9yIGlubGluZSBjb21tZW50cwotIyBkb2N1bWVudGluZyBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4KLURPQ19TT1VSQ0VfRElSID0gJCh0b3Bfc3JjZGlyKS9nc3QKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2Mtc2Nhbi4KLVNDQU5fT1BUSU9OUyA9IC0tZGVwcmVjYXRlZC1ndWFyZHM9IkdTVF9ESVNBQkxFX0RFUFJFQ0FURUQiIFwKLSAgLS1pZ25vcmUtZGVjb3JhdG9ycz0nR1NUX0VYUE9SVCcKLQotCi0jIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1ta2RiLgotTUtEQl9PUFRJT05TID0gLS1zZ21sLW1vZGUgLS1vdXRwdXQtZm9ybWF0PXhtbCAtLWlnbm9yZS1maWxlcz1wYXJzZQotCi0jIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1maXhyZWYuCi1GSVhYUkVGX09QVElPTlMgPSAtLWV4dHJhLWRpcj0kKEdMSUJfUFJFRklYKS9zaGFyZS9ndGstZG9jL2h0bWwKLQotIyBVc2VkIGZvciBkZXBlbmRlbmNpZXMuCi1IRklMRV9HTE9CID0gJCh0b3Bfc3JjZGlyKS9nc3QvKi5oCi1DRklMRV9HTE9CID0gJCh0b3Bfc3JjZGlyKS9nc3QvKi5jCi0KLSMgSGVhZGVyIGZpbGVzIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nLiBVc2UgYmFzZSBmaWxlIG5hbWUsIG5vIHBhdGhzCi1JR05PUkVfSEZJTEVTID0gXAotCWdldHRleHQuaCBcCi0JZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIFwKLQlnbGliLWNvbXBhdC5oIFwKLQlnc3QtaTE4bi1hcHAuaCBcCi0JZ3N0LWkxOG4tbGliLmggXAotCWdzdF9wcml2YXRlLmggXAotCWdzdGVsZW1lbnRkZXRhaWxzLmggXAotCWdzdG1hY3Jvcy5oIFwKLQlnc3RtYXJzaGFsLmggXAotCW1hdGgtY29tcGF0LmggXAotCVwKLQlncmFtbWFyLnRhYi5oIFwKLQlncmFtbWFyLnRhYi5wcmUuaCBcCi0gIHBhcnNlX2xleC5oIFwKLQl0eXBlcy5oIFwKLQlcCi0JZ3N0LXByaW50Zi5oIFwKLQlwcmludGYtYXJncy5oIFwKLQlwcmludGYtZXh0ZW5zaW9uLmggXAotCXByaW50Zi1wYXJzZS5oIFwKLQl2YXNucHJpbnRmLmgKLQotCi0jIEltYWdlcyB0byBjb3B5IGludG8gSFRNTCBkaXJlY3RvcnkuCi1IVE1MX0lNQUdFUyA9IAotCi0jIEV4dHJhIFNHTUwgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgYnkgJChET0NfTUFJTl9TR01MX0ZJTEUpLgotY29udGVudF9maWxlcyA9IGJ1aWxkaW5nLnhtbCBydW5uaW5nLnhtbCBnc3QtdW5pdmVyc2Uuc3ZnCi0KLSMgT3RoZXIgZmlsZXMgdG8gZGlzdHJpYnV0ZS4KLWV4dHJhX2ZpbGVzID0gZ3N0LXVuaXZlcnNlLmRvdAotCi0jIENGTEFHUyBhbmQgTERGTEFHUyBmb3IgY29tcGlsaW5nIHNjYW4gcHJvZ3JhbS4gT25seSBuZWVkZWQgaWYgeW91ciBhcHAvbGliCi0jIGNvbnRhaW5zIEd0a09iamVjdHMvR09iamVjdHMgYW5kIHlvdSB3YW50IHRvIGRvY3VtZW50IHNpZ25hbHMgYW5kIHByb3BlcnRpZXMuCi1HVEtET0NfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgLURHU1RfVVNFX1VOU1RBQkxFX0FQSQotR1RLRE9DX0xJQlMgPSAkKEdTVF9PQkpfTElCUykgXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQC5sYQotCi1HVEtET0NfRVhUUkFfRU5WSVJPTk1FTlQgPSBcCi0gICAgR1NUX1BMVUdJTl9TQ0FOTkVSXzFfMD0kKHRvcF9idWlsZGRpcikvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXIKLQotCi0jIElmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucywgcGxhY2UgdGhlbSBpbiB0aGlzIGZpbGUKLSMgYW5kIHVuY29tbWVudCB0aGlzIGxpbmUuCi1ET0NfT1ZFUlJJREVTID0gJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0Ci1AR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRUBHVEtET0NfQ0MgPSAkKENDKSAkKElOQ0xVREVTKSAkKEdUS0RPQ19ERVBTX0NGTEFHUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQEdUS19ET0NfVVNFX0xJQlRPT0xfVFJVRUBHVEtET0NfQ0MgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoSU5DTFVERVMpICQoR1RLRE9DX0RFUFNfQ0ZMQUdTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1AR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRUBHVEtET0NfTEQgPSAkKENDKSAkKEdUS0RPQ19ERVBTX0xJQlMpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpCi1AR1RLX0RPQ19VU0VfTElCVE9PTF9UUlVFQEdUS0RPQ19MRCA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykgJChHVEtET0NfREVQU19MSUJTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKQotQEdUS19ET0NfVVNFX0xJQlRPT0xfRkFMU0VAR1RLRE9DX1JVTiA9IAotQEdUS19ET0NfVVNFX0xJQlRPT0xfVFJVRUBHVEtET0NfUlVOID0gJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQotCi0jIFdlIHNldCBHUEFUSCBoZXJlOyB0aGlzIGdpdmVzIHVzIHNlbWFudGljcyBmb3IgR05VIG1ha2UKLSMgd2hpY2ggYXJlIG1vcmUgbGlrZSBvdGhlciBtYWtlJ3MgVlBBVEgsIHdoZW4gaXQgY29tZXMgdG8KLSMgd2hldGhlciBhIHNvdXJjZSB0aGF0IGlzIGEgdGFyZ2V0IG9mIG9uZSBydWxlIGlzIHRoZW4KLSMgc2VhcmNoZWQgZm9yIGluIFZQQVRIL0dQQVRILgotIwotR1BBVEggPSAkKHNyY2RpcikKLQotIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZQotVEFSR0VUX0RJUiA9ICQoSFRNTF9ESVIpLyQoRE9DX01PRFVMRSktQEdTVF9BUElfVkVSU0lPTkAKLUVYVFJBX0RJU1QgPSBcCi0JJChjb250ZW50X2ZpbGVzKQkJXAotCSQoZXh0cmFfZmlsZXMpCQkJXAotCSQoSFRNTF9JTUFHRVMpCQkJXAotCSQoRE9DX01BSU5fU0dNTF9GSUxFKQkJXAotCSQoRE9DX01PRFVMRSkudHlwZXMJCVwKLQkkKERPQ19PVkVSUklERVMpCQlcCi0JJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQKLQotRE9DX1NUQU1QUyA9IFwKLQlzZXR1cC1idWlsZC5zdGFtcAkJXAotCXNjYW4tYnVpbGQuc3RhbXAJCVwKLQlzZ21sLWJ1aWxkLnN0YW1wCQlcCi0JaHRtbC1idWlsZC5zdGFtcAkJXAotCXNnbWwuc3RhbXAJCVwKLQlodG1sLnN0YW1wCi0KLVNDQU5PQkpfRklMRVMgPSBcCi0JJChET0NfTU9EVUxFKS5hcmdzCQlcCi0JJChET0NfTU9EVUxFKS5oaWVyYXJjaHkJCVwKLQkkKERPQ19NT0RVTEUpLmludGVyZmFjZXMJCVwKLQkkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMJXAotCSQoRE9DX01PRFVMRSkuc2lnbmFscwkJXAotCS5saWJzLyQoRE9DX01PRFVMRSktc2Nhbi5vCi0KLVJFUE9SVF9GSUxFUyA9IFwKLQkkKERPQ19NT0RVTEUpLXVuZG9jdW1lbnRlZC50eHQgXAotCSQoRE9DX01PRFVMRSktdW5kZWNsYXJlZC50eHQgXAotCSQoRE9DX01PRFVMRSktdW51c2VkLnR4dAotCi0KLSMgZ3RrLWRvYy5tYWsgZGVmaW5lcyBDTEVBTkZJTEVTCi1DTEVBTkZJTEVTID0gJChTQ0FOT0JKX0ZJTEVTKSAkKFJFUE9SVF9GSUxFUykgJChET0NfU1RBTVBTKSBcCi0JZG9jLXJlZ2lzdHJ5LnhtbCBnc3QtdW5pdmVyc2Uuc3ZnCi1hbGw6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtYW0KLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9ndGstZG9jLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL2dzdC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL2dzdC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9ndGstZG9jLm1hayAkKGFtX19lbXB0eSk6Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLWdzdHJlYW1lci50eXBlczogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci50eXBlcy5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi10YWdzIFRBR1M6Ci0KLWN0YWdzIENUQUdTOgotCi1jc2NvcGUgY3Njb3BlbGlzdDoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIGRpc3RkaXI9IiQoZGlzdGRpcikiIFwKLQkgIGRpc3QtaG9vawotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSBhbGwtbG9jYWwKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLQktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxvY2FsCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltYWludGFpbmVyLWNsZWFuLWxvY2FsCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1sb2NhbAotCi0uTUFLRTogYWxsIGNoZWNrIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBjc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3QtaG9vayBcCi0JZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi1sb2NhbCBcCi0JZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBcCi0JaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBcCi0JaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKLQlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIFwKLQlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCi0JaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1haW50YWluZXItY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MtYW0gdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWxvY2FsCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotaHRtbDogaHRtbC1idWlsZC5zdGFtcAotCi11cGxvYWQ6ICQoRk9STUFUUykKLQlAaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKLQkgIGVjaG8gIlByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCi0JICBpZiB0ZXN0IHgkKGJ1aWxkZGlyKSAhPSB4JChzcmNkaXIpOyB0aGVuIFwKLQkgICAgZWNobyAibWFrZSB1cGxvYWQgY2FuIG9ubHkgYmUgdXNlZCBpZiBzcmNkaXIgPT0gYnVpbGRkaXIiOyBcCi0JICAgIGV4aXQgMTsgXAotCSAgZmk7IFwKLQkgICMgZ3RrZG9jLXJlYmFzZSBzb21ldGltZXMgZ2V0cyBjb25mdXNlZCwgc28gcmVzZXQgZXZlcnl0aGluZyB0byBcCi0JICAjIGxvY2FsIGxpbmtzIGJlZm9yZSByZWJhc2luZyB0byBvbmxpbmUgbGlua3MgICAgICAgICAgICAgICAgICAgXAotCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgMj4vZGV2L251bGwgMj4vZGV2L251bGwgOyBcCi0JICByZWJhc2U9YGd0a2RvYy1yZWJhc2UgLS12ZXJib3NlIC0tb25saW5lIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbGAgOyBcCi0JICBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1lICJPbi0qbGluZSI7IFwKLQkgIGZvciByZXEgaW4gZ2xpYiBnb2JqZWN0IGdzdHJlYW1lciBnc3RyZWFtZXItbGlicyBnc3QtcGx1Z2lucy1iYXNlLWxpYnM7IGRvIFwKLQkgICAgaWYgISAoIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWkgLWUgIk9uLSpsaW5lLiovJCRyZXEvIiApOyB0aGVuIFwKLQkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKLQkgICAgICBlY2hvICIgQ291bGQgbm90IGRldGVybWluZSBvbmxpbmUgbG9jYXRpb24gZm9yICQkcmVxIGRvY3MuIENyb3NzLXJlZmVyZW5jaW5nIHdpbGwgYmUgIiA7IFwKLQkgICAgICBlY2hvICIgYnJva2VuLCBzbyBub3QgdXBsb2FkaW5nLiBNYWtlIHN1cmUgdGhlIGxpYnJhcnkncyBndGstZG9jIGRvY3VtZW50YXRpb24gaXMgICAgIiA7IFwKLQkgICAgICBlY2hvICIgaW5zdGFsbGVkIHNvbWV3aGVyZSBpbiAvdXNyL3NoYXJlL2d0ay1kb2MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA7IFwKLQkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKLQkgICAgICBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQkgIGV4cG9ydCBTUkM9IiQkU1JDIGh0bWwiOyBcCi0JZmk7IFwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBzID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wcyI7IGZpOyBcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwZGYgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBkZiI7IGZpOyBcCi0JXAotCSMgdXBsb2FkIHJlbGVhc2VzIHRvIGJvdGggWC5ZLyBhbmQgaGVhZC8gc3ViZGlyZWN0b3JpZXMgXAotCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyLyQoUEFDS0FHRV9WRVJTSU9OX01BSk9SKS4kKFBBQ0tBR0VfVkVSU0lPTl9NSU5PUikvJChET0MpOyBcCi0JZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCi0JcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCi0JXAotCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyL2hlYWQvJChET0MpOyBcCi0JZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCi0JcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCi0JXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICBlY2hvICJVbi1wcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAotCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgOyBcCi0JZmk7IFwKLQllY2hvIERvbmUKLQotZ3N0LXVuaXZlcnNlLnN2ZzogZ3N0LXVuaXZlcnNlLmRvdAotCS1kb3QgLVRzdmcgJDwgfCBzZWQgJ3MvXChmb250LXNpemU6WzAtOV0qXC5bMC05XSpcKTsvXDFweDsvZycgPiRACi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQGFsbC1sb2NhbDogaHRtbC1idWlsZC5zdGFtcAotCi0jIyMjIHNldHVwICMjIyMKLQotQEVOQUJMRV9HVEtfRE9DX1RSVUVAc2V0dXAtYnVpbGQuc3RhbXA6ICQoY29udGVudF9maWxlcykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAktQGlmIHRlc3QgIiQoYWJzX3NyY2RpcikiICE9ICIkKGFic19idWlsZGRpcikiIDsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGVjaG8gJyAgRE9DICAgUHJlcGFyaW5nIGJ1aWxkJzsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBmaWxlcz1gZWNobyAkKERPQ19NQUlOX1NHTUxfRklMRSkgJChET0NfT1ZFUlJJREVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKERPQ19NT0RVTEUpLnR5cGVzICQoY29udGVudF9maWxlcylgOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGlmIHRlc3QgIngkJGZpbGVzIiAhPSAieCIgOyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGZvciBmaWxlIGluICQkZmlsZXMgOyBkbyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAgICAgdGVzdCAtZiAkKGFic19zcmNkaXIpLyQkZmlsZSAmJiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAgICAgICAgIGNwIC1wdSAkKGFic19zcmNkaXIpLyQkZmlsZSAkKGFic19idWlsZGRpcikvIHx8IHRydWU7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGRvbmU7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZmk7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBzZXR1cC1idWlsZC5zdGFtcAotCi0jIyMjIHNjYW4gIyMjIwotCi0jIGluIHRoZSBjYXNlIG9mIG5vbi1zcmNkaXIgYnVpbGRzLCB0aGUgYnVpbHQgZ3N0IGRpcmVjdG9yeSBnZXRzIGFkZGVkCi0jIHRvIGd0ay1kb2Mgc2Nhbm5pbmc7IGJ1dCBvbmx5IHRoZW4sIHRvIGF2b2lkIGR1cGxpY2F0ZXMKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQHNjYW4tYnVpbGQuc3RhbXA6ICQoSEZJTEVfR0xPQikgJChDRklMRV9HTE9CKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIFNjYW5uaW5nIGhlYWRlciBmaWxlcycKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAX3NvdXJjZV9kaXI9JycgOwkJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmb3IgaSBpbiAkKERPQ19TT1VSQ0VfRElSKSA7IGRvCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIF9zb3VyY2VfZGlyPSIkJHtfc291cmNlX2Rpcn0gLS1zb3VyY2UtZGlyPSQkaSIgOwkgICAgICAgIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlkb25lIDsJCQkJCQkJICAgICAgICBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZ3RrZG9jLXNjYW4JCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkKFNDQU5fT1BUSU9OUykgJChFWFRSQV9IRklMRVMpCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkJLS1tb2R1bGU9JChET0NfTU9EVUxFKQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkJHtfc291cmNlX2Rpcn0gICAgICAgICAJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLWlnbm9yZS1oZWFkZXJzPSIkKElHTk9SRV9IRklMRVMpIgotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBpZiBncmVwIC1sICdeLi4qJCQnICQoRE9DX01PRFVMRSkudHlwZXMgPiAvZGV2L251bGw7IHRoZW4JXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBlY2hvICIgIERPQyAgIEludHJvc3BlY3RpbmcgZ29iamVjdHMiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIHNjYW5vYmpfb3B0aW9ucz0iIjsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBndGtkb2Mtc2NhbmdvYmogMj4mMSAtLWhlbHAgfCBncmVwICA+L2Rldi9udWxsICJcLVwtdmVyYm9zZSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgaWYgdGVzdCAiJCQ/IiA9ICIwIjsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBpZiB0ZXN0ICJ4JChWKSIgPSAieDEiOyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgICAgICBzY2Fub2JqX29wdGlvbnM9Ii0tdmVyYm9zZSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPWBjZCAkKHRvcF9idWlsZGRpcikgJiYgcHdkYAlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9QTFVHSU5fUEFUSF8xXzA9CQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9SRUdJU1RSWV8xXzA9ZG9jLXJlZ2lzdHJ5LnhtbAkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICQoR1RLRE9DX0VYVFJBX0VOVklST05NRU5UKQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBDQz0iJChHVEtET0NfQ0MpIiBMRD0iJChHVEtET0NfTEQpIiBSVU49IiQoR1RLRE9DX1JVTikiCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgQ0ZMQUdTPSIkKEdUS0RPQ19DRkxBR1MpICQoQ0ZMQUdTKSIJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBMREZMQUdTPSIkKEdUS0RPQ19MSUJTKSAkKExERkxBR1MpIgkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGd0a2RvYy1zY2FuZ29iaiAtLXR5cGUtaW5pdC1mdW5jPSJnc3RfaW5pdChOVUxMLE5VTEwpIglcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAkJHNjYW5vYmpfb3B0aW9ucyAtLW1vZHVsZT0kKERPQ19NT0RVTEUpIDsJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAllbHNlCQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZvciBpIGluICQoU0NBTk9CSl9GSUxFUykgOyBkbwkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICQoTUtESVJfUCkgJChkaXJuYW1lICQkaSkgOwkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgIHRlc3QgLWYgJCRpIHx8IHRvdWNoICQkaSA7CQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG9uZQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmkKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggc2Nhbi1idWlsZC5zdGFtcAotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAkKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0OiBzY2FuLWJ1aWxkLnN0YW1wCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKLQotIyMjIyB4bWwgIyMjIwotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLWJ1aWxkLnN0YW1wOiBzZXR1cC1idWlsZC5zdGFtcCAkKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChleHBhbmRfY29udGVudF9maWxlcykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBCdWlsZGluZyBYTUwnCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQF9zb3VyY2VfZGlyPScnIDsJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZm9yIGkgaW4gJChET0NfU09VUkNFX0RJUikgOyBkbwkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBfc291cmNlX2Rpcj0iJCR7X3NvdXJjZV9kaXJ9IC0tc291cmNlLWRpcj0kJGkiIDsJICAgICAgICBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZG9uZSA7CQkJCQkJCSAgICAgICAgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWd0a2RvYy1ta2RiIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkgJCR7X3NvdXJjZV9kaXJ9ICAtLWV4cGFuZC1jb250ZW50LWZpbGVzPSIkKGV4cGFuZF9jb250ZW50X2ZpbGVzKSIgLS1tYWluLXNnbWwtZmlsZT0kKERPQ19NQUlOX1NHTUxfRklMRSkgLS1vdXRwdXQtZm9ybWF0PXhtbCAkKE1LREJfT1BUSU9OUykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyB4bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggc2dtbC1idWlsZC5zdGFtcAotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLnN0YW1wOiBzZ21sLWJ1aWxkLnN0YW1wCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKLQotIyMjIyBodG1sICMjIyMKLQotQEVOQUJMRV9HVEtfRE9DX1RSVUVAaHRtbC1idWlsZC5zdGFtcDogc2dtbC5zdGFtcCAkKERPQ19NQUlOX1NHTUxfRklMRSkgJChjb250ZW50X2ZpbGVzKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIEhUTUwnCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1yZiBodG1sCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQG1rZGlyIGh0bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLXByIHhtbCBodG1sCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGNwIC4uL3ZlcnNpb24uZW50aXRpZXMgLi8KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbWtodG1sX29wdGlvbnM9IiI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIGZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmk7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLW1raHRtbCAyPiYxIC0taGVscCB8IGdyZXAgID4vZGV2L251bGwgIlwtXC1wYXRoIjsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWlmIHRlc3QgIiQoPykiID0gIjAiOyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIG1raHRtbF9vcHRpb25zPS0tcGF0aD0iJChhYnNfc3JjZGlyKSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaTsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWNkIGh0bWwgJiYgZ3RrZG9jLW1raHRtbCAkJG1raHRtbF9vcHRpb25zICQoTUtIVE1MX09QVElPTlMpICQoRE9DX01PRFVMRSktQEdTVF9BUElfVkVSU0lPTkAgLi4vJChET0NfTUFJTl9TR01MX0ZJTEUpCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1yZiBodG1sL3htbAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtZiB2ZXJzaW9uLmVudGl0aWVzCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgICggY2QgJChzcmNkaXIpICYmIGNwICQoSFRNTF9JTUFHRVMpICQoYWJzX2J1aWxkZGlyKS9odG1sICkKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQGNsZWFuLWxvY2FsLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKLSMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBybSAtcmYgJChET0NfTU9EVUxFKS50eXBlczsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpCi1ARU5BQkxFX0dUS19ET0NfRkFMU0VAYWxsLWxvY2FsOgotQEVOQUJMRV9HVEtfRE9DX0ZBTFNFQGNsZWFuLWxvY2FsLWd0a2RvYzoKLQotY2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsLWd0a2RvYwotCUBybSAtZiAqfiAqLmJhawotCUBybSAtcmYgLmxpYnMKLQotZGlzdGNsZWFuLWxvY2FsOgotCUBybSAtZiAkKFJFUE9SVF9GSUxFUykgXAotCSAgICAgICAgJChET0NfTU9EVUxFKS1kZWNsLWxpc3QudHh0ICQoRE9DX01PRFVMRSktZGVjbC50eHQKLQlAcm0gLXJmIHRtcGwvKi5zZ21sLmJhawotCUBybSAtZiAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQotCUBybSAtZiAqLnN0YW1wIHx8IHRydWUKLQlAaWYgdGVzdCAiJChhYnNfc3JjZGlyKSIgIT0gIiQoYWJzX2J1aWxkZGlyKSIgOyB0aGVuIFwKLQkgICAgcm0gLWYgJChET0NfTUFJTl9TR01MX0ZJTEUpIDsgXAotCSAgICBybSAtZiAkKERPQ19PVkVSUklERVMpIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLnR5cGVzIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLmludGVyZmFjZXMgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgOyBcCi0JICAgIHJtIC1mICQoY29udGVudF9maWxlcykgOyBcCi0JICAgIHJtIC1yZiB0bXBsLyouc2dtbCA7IFwKLQlmaQotCUBybSAtcmYgKi5vCi0KLW1haW50YWluZXItY2xlYW4tbG9jYWw6IGNsZWFuCi0JQGNkICQoc3JjZGlyKSAmJiBybSAtcmYgaHRtbCBcCi0JCXhtbCAkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQgJChET0NfTU9EVUxFKS1kZWNsLnR4dAotCi0jIHRob21hczogbWFrZSBkb2NzIHBhcmFsbGVsIGluc3RhbGxhYmxlOyBkZXZoZWxwIHJlcXVpcmVzIG1ham9ybWlub3IgdG9vCi1pbnN0YWxsLWRhdGEtbG9jYWw6Ci0JKGluc3RhbGxmaWxlcz1gZWNobyAkKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3NgOyBcCi0JaWYgdGVzdCAiJCRpbnN0YWxsZmlsZXMiID0gJyQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzcyc7IFwKLQl0aGVuIGVjaG8gJy0tIE5vdGhpbmcgdG8gaW5zdGFsbCcgOyBcCi0JZWxzZSBcCi0JICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICBmb3IgaSBpbiAkJGluc3RhbGxmaWxlczsgZG8gXAotCSAgICBlY2hvICctLSBJbnN0YWxsaW5nICckJGkgOyBcCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKLQkgIGRvbmU7IFwKLQkgIGVjaG8gJy0tIEluc3RhbGxpbmcgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyJyA7IFwKLQkgIGlmIHRlc3QgLWUgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyOyB0aGVuIFwKLQkgICAgICAgICAgICAkKElOU1RBTExfREFUQSkgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyIFwKLQkgICAgICAgICAgICAkKERFU1RESVIpJChUQVJHRVRfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyOyBcCi0JICBmaTsgXAotCSAgJChHVEtET0NfUkVCQVNFKSAtLXJlbGF0aXZlIC0tZGVzdC1kaXI9JChERVNURElSKSAtLWh0bWwtZGlyPSQoREVTVERJUikkKFRBUkdFVF9ESVIpIHx8IHRydWUgOyBcCi0JZmkpCi11bmluc3RhbGwtbG9jYWw6Ci0JaWYgdGVzdCAtZCAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgdGhlbiBcCi0JICBybSAtcmYgJChERVNURElSKSQoVEFSR0VUX0RJUikvKjsgXAotCSAgcm1kaXIgLXAgJChERVNURElSKSQoVEFSR0VUX0RJUikgMj4vZGV2L251bGwgfHwgdHJ1ZTsgXAotCWVsc2UgXAotCSAgZWNobyAnLS0gTm90aGluZyB0byB1bmluc3RhbGwnIDsgXAotCWZpOwotCi0jCi0jIFJlcXVpcmUgZ3RrLWRvYyB3aGVuIG1ha2luZyBkaXN0Ci0jCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBkaXN0LWNoZWNrLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUBkaXN0LWNoZWNrLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUAJQGVjaG8gIioqKiBndGstZG9jIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBlbmFibGVkIGluIG9yZGVyIHRvIG1ha2UgZGlzdCIKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUAJQGZhbHNlCi0KLWRpc3QtaG9vazogZGlzdC1jaGVjay1ndGtkb2MgZGlzdC1ob29rLWxvY2FsCi0JbWtkaXIgJChkaXN0ZGlyKS9odG1sCi0JY3AgaHRtbC8qICQoZGlzdGRpcikvaHRtbAotCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS50eXBlcyAkKGRpc3RkaXIpLwotCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChkaXN0ZGlyKS8KLQljZCAkKGRpc3RkaXIpICYmIHJtIC1mICQoRElTVENMRUFORklMRVMpCi0JLWd0a2RvYy1yZWJhc2UgLS1vbmxpbmUgLS1yZWxhdGl2ZSAtLWh0bWwtZGlyPSQoZGlzdGRpcikvaHRtbAotCi0uUEhPTlkgOiBkaXN0LWhvb2stbG9jYWwgZG9jcwotCi0jIGF2b2lkIHNwdXJpb3VzIGJ1aWxkIGVycm9ycyB3aGVuIGRpc3RjaGVja2luZyB3aXRoIC1qTgotLk5PVFBBUkFMTEVMOgotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9idWlsZGluZy54bWwgYi9kb2NzL2dzdC9idWlsZGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZjhmYzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvYnVpbGRpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIHJlZmVudHJ5IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4zLy9FTiIKLSAgICAgICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMy9kb2Nib29reC5kdGQiIFsKLTwhRU5USVRZICUgdmVyc2lvbi1lbnRpdGllcyBTWVNURU0gInZlcnNpb24uZW50aXRpZXMiPgotJXZlcnNpb24tZW50aXRpZXM7Ci08IUVOVElUWSAlIGxvY2FsLmNvbW1vbi5hdHRyaWIgInhtbG5zOnhpICBDREFUQSAgI0ZJWEVEICdodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlJyI+Ci1dPgotPHJlZmVudHJ5IGlkPSJnc3QtYnVpbGRpbmciIHJldmlzaW9uPSIyNSBtYXIgMjAwOSI+Ci08cmVmbWV0YT4KLTxyZWZlbnRyeXRpdGxlPkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvcmVmZW50cnl0aXRsZT4KLTxtYW52b2xudW0+MzwvbWFudm9sbnVtPgotPHJlZm1pc2NpbmZvPkdTdHJlYW1lciBDb3JlPC9yZWZtaXNjaW5mbz4KLTwvcmVmbWV0YT4KLQotPHJlZm5hbWVkaXY+Ci08cmVmbmFtZT5CdWlsZGluZyBHU3RyZWFtZXIgYW5kIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L3JlZm5hbWU+Ci08cmVmcHVycG9zZT4KLUhvdyB0byBidWlsZCB0aGUgR1N0cmVhbWVyIGZyYW1ld29yayBhbmQgYXBwbGljYXRpb25zIHVzaW5nIGl0LgotPC9yZWZwdXJwb3NlPgotPC9yZWZuYW1lZGl2PgotCi08cmVmc2VjdDE+Ci08dGl0bGU+QnVpbGRpbmcgR1N0cmVhbWVyIG9uIFVOSVg8L3RpdGxlPgotCi0gIDwhLS0gdGhpcyBoYXMgYmVlbiBib3Jyb3dlZCBmcm9tIHRoZSBnbGliIGRvY3MgLS0+Ci0gIDxwYXJhPgotICAgIE9uIFVOSVgsIEdTdHJlYW1lciB1c2VzIHRoZSBzdGFuZGFyZCBHTlUgYnVpbGQgc3lzdGVtLAotICAgIHVzaW5nIDxhcHBsaWNhdGlvbj5hdXRvY29uZjwvYXBwbGljYXRpb24+IGZvciBwYWNrYWdlCi0gICAgY29uZmlndXJhdGlvbiBhbmQgcmVzb2x2aW5nIHBvcnRhYmlsaXR5IGlzc3VlcywKLSAgICA8YXBwbGljYXRpb24+YXV0b21ha2U8L2FwcGxpY2F0aW9uPiBmb3IgYnVpbGRpbmcgbWFrZWZpbGVzCi0gICAgdGhhdCBjb21wbHkgd2l0aCB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMsIGFuZAotICAgIDxhcHBsaWNhdGlvbj5saWJ0b29sPC9hcHBsaWNhdGlvbj4gZm9yIGJ1aWxkaW5nIHNoYXJlZAotICAgIGxpYnJhcmllcyBvbiBtdWx0aXBsZSBwbGF0Zm9ybXMuICBUaGUgbm9ybWFsIHNlcXVlbmNlIGZvcgotICAgIGNvbXBpbGluZyBhbmQgaW5zdGFsbGluZyB0aGUgR1N0cmVhbWVyIGxpYnJhcnkgaXMgdGh1czoKLQotICAgIDxsaXRlcmFsbGF5b3V0PgotICAgICAgPHVzZXJpbnB1dD4uL2NvbmZpZ3VyZTwvdXNlcmlucHV0PgotICAgICAgPHVzZXJpbnB1dD5tYWtlPC91c2VyaW5wdXQ+Ci0gICAgICA8dXNlcmlucHV0Pm1ha2UgaW5zdGFsbDwvdXNlcmlucHV0PgotICAgIDwvbGl0ZXJhbGxheW91dD4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPgotICAgIFRoZSBzdGFuZGFyZCBvcHRpb25zIHByb3ZpZGVkIGJ5IDxhcHBsaWNhdGlvbj5HTlUKLSAgICBhdXRvY29uZjwvYXBwbGljYXRpb24+IG1heSBiZSBwYXNzZWQgdG8gdGhlCi0gICAgPGNvbW1hbmQ+Y29uZmlndXJlPC9jb21tYW5kPiBzY3JpcHQuICBQbGVhc2Ugc2VlIHRoZQotICAgIDxhcHBsaWNhdGlvbj5hdXRvY29uZjwvYXBwbGljYXRpb24+IGRvY3VtZW50YXRpb24gb3IgcnVuCi0gICAgPGNvbW1hbmQ+Li9jb25maWd1cmUgLS1oZWxwPC9jb21tYW5kPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQKLSAgICB0aGUgc3RhbmRhcmQgb3B0aW9ucy4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPgotICAgIEluIGFkZGl0aW9uIHRoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMgdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZSBmZWF0dXJlcy4KLSAgICBFLmcuIHBhc3NpbmcgPG9wdGlvbj4tLWRpc2FibGUtZ3N0LWRlYnVnPC9vcHRpb24+IHRvIDxjb21tYW5kPmNvbmZpZ3VyZTwvY29tbWFuZD4KLSAgICB3aWxsIHR1cm4gdGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW0gaW50byBhIG5vbi1mdW5jdGlvbmFsIHN0dWIgYW5kIHJlbW92ZSBhbGwKLSAgICBtYWNybyBiYXNlZCBpbnZvY2F0aW9ucyBmcm9tIHdpdGhpbiB0aGUgbGlicmFyeSAoYW5kIGFueXRoaW5nIGNvbXBpbGVkCi0gICAgYWdhaW5zdCB0aGUgbGlicmFyeSBhZnRlcndhcmRzLikKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBJZiBsaWJyYXJ5IHNpemUgbWF0dGVycyBhbmQgb25lIGJ1aWxkcyBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQsIGl0IGlzCi0gICAgYWxzbyBwb3NzaWJsZSB0byB0b3RhbGx5IHJlbW92ZSBzdWJzeXN0ZW0gY29kZS4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IG5vdAotICAgIG9mZmVyZWQgYXMgYSBjb25maWd1cmUgb3B0aW9uIGFzIGl0IGNhdXNlcyBhbiBBQkkgYnJlYWsuIENvZGUgYnVpbHQgYWdhaW5zdAotICAgIGEgdmVyc2lvbiBvZiBHU3RyZWFtZXIgd2l0aG91dCB0aGVzZSBtb2RpZmljYXRpb25zIG5lZWRzIHRvIGJlIHJlY29tcGlsZWQuCi0KLSAgICA8bGl0ZXJhbGxheW91dD4KLSAgICAgIDx1c2VyaW5wdXQ+bWFrZSBDRkxBR1M9Ii1ER1NUX1JFTU9WRV9ERVBSRUNBVEVEIC1ER1NUX1JFTU9WRV9ESVNBQkxFRCI8L3VzZXJpbnB1dD4KLSAgICA8L2xpdGVyYWxsYXlvdXQ+Ci0KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8c3ltYm9sPkdTVF9SRU1PVkVfREVQUkVDQVRFRDwvc3ltYm9sPiAtIE9taXQgZGVwcmVjYXRlZCBmdW5jdGlvbnMKLSAgICAgICAgICBmcm9tIHRoZSBsaWJyYXJ5LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8c3ltYm9sPkdTVF9SRU1PVkVfRElTQUJMRUQ8L3N5bWJvbD4gLSBPbWl0IHN0dWJzIGZvciBkaXNhYmxlZAotICAgICAgICAgIHN1YnN5c3RlbXMgZnJvbSB0aGUgbGlicmFyeS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9wYXJhPgotCi08L3JlZnNlY3QxPgotCi08cmVmc2VjdDE+Ci08dGl0bGU+QnVpbGRpbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvdGl0bGU+Ci0KLTxwYXJhPgotQXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgY2FuIHVzZSA8Y29tbWFuZD5wa2ctY29uZmlnPC9jb21tYW5kPiB0byBnZXQgYWxsIHRoZQotbmVlZGVkIGNvbXBpbGVyIGFuZCBsaW5rZXIgZmxhZ3MgdG8gYnVpbGQgYWdhaW5zdCBHU3RyZWFtZXIuIFBsZWFzZSBub3RlIHRoYXQKLUdTdHJlYW1lciBpcyBzcGxpdCBpbnRvIHNldmVyYWwgbGlicmFyaWVzIGl0c2VsZi4KLTxjb21tYW5kPnBrZy1jb25maWcgLS1saXN0LWFsbCB8IGdyZXAgZ3N0cmVhbWVyPC9jb21tYW5kPiB3aWxsIGxpc3QgdGhlCi1hdmFpbGFibGUgbGlicmFyaWVzLgotPC9wYXJhPgotCi08L3JlZnNlY3QxPgotCi08L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvZ3N0LXVuaXZlcnNlLmRvdCBiL2RvY3MvZ3N0L2dzdC11bml2ZXJzZS5kb3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZjZiNWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvZ3N0LXVuaXZlcnNlLmRvdAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qIGRvdCAtVHBuZyBnc3QtdW5pdmVyc2UuZG90IC1vZ3N0LXVuaXZlcnNlLnBuZwotICoKLSAqIG90aGVyIGxheW91dHM6Ci0gKiBjaXJjbyAtVHBuZyBnc3QtdW5pdmVyc2UuZG90IC1vZ3N0LXVuaXZlcnNlLmNpcmNvLnBuZwotICogbmVhdG8gLVRwbmcgZ3N0LXVuaXZlcnNlLmRvdCAtb2dzdC11bml2ZXJzZS5uZWF0by5wbmcKLSAqCi0gKiB0b2RvOgotICogLSBhZGQgdXJscyB0byBhcGkgZG9jcwotICogLSB1c2UgY29sb3IKLSAqLwotZGlncmFwaCBwaXBlbGluZSB7Ci0gIG5vZGUgW3N0eWxlPSJmaWxsZWQiLCBzaGFwZT0iYm94IiwgZmlsbGNvbG9yPSIjZWVlZWVlIiwgZm9udHNpemU9IjlweCIsIGZvbnRuYW1lPSJCaXRzdHJlYW0gVmVyYSBTYW5zIiwgdGFyZ2V0PSJfdG9wIl07Ci0gIGVkZ2UgW2xhYmVsZm9udHNpemU9IjdweCIsIGZvbnRzaXplPSI3cHgiLCBsYWJlbGZvbnRuYW1lPSJCaXRzdHJlYW0gVmVyYSBTYW5zIiwgZm9udG5hbWU9IkJpdHN0cmVhbSBWZXJhIFNhbnMiXTsKLSAgbGFiZWxsb2M9dDsKLSAgbm9kZXNlcD0wLjI1OwotCi0gIC8qCi0gIGZvbnRuYW1lPSJCaXRzdHJlYW0gVmVyYSBTYW5zIjsKLSAgZm9udHNpemU9IjEwcHgiOwotICBsYWJlbD0iR1N0cmVhbWVyIFVuaXZlcnNlIjsKLSAgKi8KLSAgCi0gIC8qIG9iamVjdHMgKi8KLSAgYXBwbGljYXRpb24gW2NvbG9yPWJsYWNrLCBmaWxsY29sb3I9IiNmZmRkZGQiXTsKLSAgYmluIFtocmVmPSJHc3RCaW4uaHRtbCIsIGNvbG9yPWJsYWNrLCBmaWxsY29sb3I9IiNjY2NjZmYiXTsKLSAgYnVzIFtocmVmPSJHc3RCdXMuaHRtbCJdOwotICBidWZmZXIgW2hyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIsIGNvbG9yPWJsYWNrLCBmaWxsY29sb3I9IiNkZGZmZGQiXTsKLSAgY2FwcyBbaHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCJdOwotICBjbG9jayBbaHJlZj0iR3N0Q2xvY2suaHRtbCJdOwotICBlbGVtZW50IFtocmVmPSJHc3RFbGVtZW50Lmh0bWwiLCBjb2xvcj1ibGFjaywgZmlsbGNvbG9yPSIjY2NjY2ZmIl07Ci0gIGVsZW1lbnRfZmFjdG9yeSBbaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIsIGxhYmVsPSJlbGVtZW50IGZhY3RvcnkiXTsKLSAgZXZlbnQgW2hyZWY9ImdzdHJlYW1lci1Hc3RFdmVudC5odG1sIiwgY29sb3I9YmxhY2ssIGZpbGxjb2xvcj0iI2RkZmZkZCJdOwotICBtZXNzYWdlIFtocmVmPSJnc3RyZWFtZXItR3N0TWVzc2FnZS5odG1sIiwgY29sb3I9YmxhY2ssIGZpbGxjb2xvcj0iI2RkZmZkZCJdOwotICBwYWQgW2hyZWY9IkdzdFBhZC5odG1sIiwgY29sb3I9YmxhY2ssIGZpbGxjb2xvcj0iI2NjY2NmZiJdOwotICBwYWRfdGVtcGxhdGUgW2hyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiLCBsYWJlbD0icGFkIHRlbXBsYXRlIl07Ci0gIHBpcGVsaW5lIFtocmVmPSJHc3RQaXBlbGluZS5odG1sIiwgY29sb3I9YmxhY2ssIGZpbGxjb2xvcj0iI2NjY2NmZiJdOwotICBwbHVnaW4gW2hyZWY9IkdzdFBsdWdpbi5odG1sIl07Ci0gIHBsdWdpbl9mZWF0dXJlIFtocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiLCBsYWJlbD0icGx1Z2luIGZlYXR1cmUiXTsKLSAgcXVlcnkgW2hyZWY9ImdzdHJlYW1lci1Hc3RRdWVyeS5odG1sIiwgY29sb3I9YmxhY2ssIGZpbGxjb2xvcj0iI2RkZmZkZCJdOwotICByZWdpc3RyeSBbaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCJdOwotICBzdHJ1Y3R1cmUgW2hyZWY9ImdzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCJdOwotICAKLSAgLyogcmVsYXRpb25zICovCi0gIGJpbiAtPiBlbGVtZW50IFtsYWJlbD0iaXMtYSJdOwotICBwaXBlbGluZSAtPiBiaW4gW2xhYmVsPSJpcy1hIl07Ci0gIHBpcGVsaW5lIC0+IGJ1cyBbbGFiZWw9ImhhcyAxIl07Ci0gIHBpcGVsaW5lIC0+IGNsb2NrIFtsYWJlbD0iaGFzIDEiXTsKLSAgZWxlbWVudCAtPiBwYWRfdGVtcGxhdGUgW2xhYmVsPSJoYXMgbiJdOwotICBlbGVtZW50IC0+IHBhZCBbbGFiZWw9ImhhcyBuIl07Ci0gIGVsZW1lbnQgLT4gY2xvY2sgW2xhYmVsPSJtYXkgcHJvdmlkZSJdOwotICBwYWQgLT4gY2FwcyBbbGFiZWw9ImhhcyBuIl07Ci0gIHBhZF90ZW1wbGF0ZSAtPiBjYXBzIFtsYWJlbD0iaGFzIG4iXTsKLSAgYnVmZmVyIC0+IGNhcHMgW2xhYmVsPSJoYXMgbiJdOwotICBjYXBzIC0+IHN0cnVjdHVyZSBbbGFiZWw9ImhhcyBuIl07Ci0gIGJpbiAtPiBlbGVtZW50IFtsYWJlbD0iaGFzIG4iXTsKLSAgICAKLSAgcGFkIC0+IHBhZF90ZW1wbGF0ZSBbbGFiZWw9ImlzIGNyZWF0ZWQgZnJvbSJdOwotICBlbGVtZW50IC0+IGVsZW1lbnRfZmFjdG9yeSBbbGFiZWw9ImlzIGNyZWF0ZWQgZnJvbSJdOwotICAgIAotICBlbGVtZW50IC0+IHF1ZXJ5IFtsYWJlbD0iYW5zd2VycyJdOwotICBlbGVtZW50IC0+IGV2ZW50IFtsYWJlbD0ic2VuZCAmIHJlY2VpdmUiXTsKLSAgZWxlbWVudCAtPiBidWZmZXIgW2xhYmVsPSJzZW5kICYgcmVjZWl2ZSJdOwotICBlbGVtZW50IC0+IG1lc3NhZ2UgW2xhYmVsPSJzZW5kIl07Ci0gIGJ1cyAtPiBtZXNzYWdlIFtsYWJlbD0icmVjZWl2ZSJdOwotICAgIAotICByZWdpc3RyeSAtPiBwbHVnaW4gW2xhYmVsPSJoYXMgbiJdOwotICBwbHVnaW4gLT4gcGx1Z2luX2ZlYXR1cmUgW2xhYmVsPSJoYXMgbiJdOwotICBlbGVtZW50X2ZhY3RvcnkgLT4gcGx1Z2luX2ZlYXR1cmUgW2xhYmVsPSJpcy1hIl07Ci0gICAgCi0gIGFwcGxpY2F0aW9uIC0+IHBpcGVsaW5lIFtsYWJlbD0iaGFzIl07Ci0gIGFwcGxpY2F0aW9uIC0+IGJ1cyBbbGFiZWw9Imxpc3RlbiBvbiJdOwotICBhcHBsaWNhdGlvbiAtPiBxdWVyeSBbbGFiZWw9InNlbmQiXTsKLSAgYXBwbGljYXRpb24gLT4gZXZlbnQgW2xhYmVsPSJzZW5kIl07Ci19CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9nc3QtdW5pdmVyc2Uuc3ZnIGIvZG9jcy9nc3QvZ3N0LXVuaXZlcnNlLnN2ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEwNjdmOS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9nc3QtdW5pdmVyc2Uuc3ZnCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIgotICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgotPCEtLSBHZW5lcmF0ZWQgYnkgZ3JhcGh2aXogdmVyc2lvbiAyLjM4LjAgKDIwMTQwNDEzLjIwNDEpCi0gLS0+Ci08IS0tIFRpdGxlOiBwaXBlbGluZSBQYWdlczogMSAtLT4KLTxzdmcgd2lkdGg9IjcxMnB0IiBoZWlnaHQ9IjYzMnB0IgotIHZpZXdCb3g9IjAuMDAgMC4wMCA3MTIuMDAgNjMyLjAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KLTxnIGlkPSJncmFwaDAiIGNsYXNzPSJncmFwaCIgdHJhbnNmb3JtPSJzY2FsZSgxIDEpIHJvdGF0ZSgwKSB0cmFuc2xhdGUoNCA2MjgpIj4KLTx0aXRsZT5waXBlbGluZTwvdGl0bGU+Ci08cG9seWdvbiBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJub25lIiBwb2ludHM9Ii00LDQgLTQsLTYyOCA3MDgsLTYyOCA3MDgsNCAtNCw0Ii8+Ci08IS0tIGFwcGxpY2F0aW9uIC0tPgotPGcgaWQ9Im5vZGUxIiBjbGFzcz0ibm9kZSI+PHRpdGxlPmFwcGxpY2F0aW9uPC90aXRsZT4KLTxwb2x5Z29uIGZpbGw9IiNmZmRkZGQiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNTgxLC02MjQgNTEzLC02MjQgNTEzLC01ODggNTgxLC01ODggNTgxLC02MjQiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjU0NyIgeT0iLTYwMy44IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5hcHBsaWNhdGlvbjwvdGV4dD4KLTwvZz4KLTwhLS0gYnVzIC0tPgotPGcgaWQ9Im5vZGUzIiBjbGFzcz0ibm9kZSI+PHRpdGxlPmJ1czwvdGl0bGU+Ci08ZyBpZD0iYV9ub2RlMyI+PGEgeGxpbms6aHJlZj0iR3N0QnVzLmh0bWwiIHhsaW5rOnRpdGxlPSJidXMiIHRhcmdldD0iX3RvcCI+Ci08cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjEyMywtNDY0IDY5LC00NjQgNjksLTQyOCAxMjMsLTQyOCAxMjMsLTQ2NCIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iOTYiIHk9Ii00NDMuOCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+YnVzPC90ZXh0PgotPC9hPgotPC9nPgotPC9nPgotPCEtLSBhcHBsaWNhdGlvbiYjNDU7Jmd0O2J1cyAtLT4KLTxnIGlkPSJlZGdlMjQiIGNsYXNzPSJlZGdlIj48dGl0bGU+YXBwbGljYXRpb24mIzQ1OyZndDtidXM8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTUxMi44MzksLTYwMi4xMUM0MzEuMDcxLC01OTQuNzg3IDIyNi4zMzYsLTU3My45MzQgMTY1LC01NDQgMTMzLjM0OCwtNTI4LjU1MyAxMjQuOTgsLTUyMC4yODUgMTA3LC00OTAgMTA0LjE3MSwtNDg1LjIzNiAxMDIuMDY0LC00NzkuNzU1IDEwMC40OTYsLTQ3NC4zMzciLz4KLTxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjEwMy44MDUsLTQ3My4xMjQgOTguMDk2NiwtNDY0LjE5OCA5Ni45OTM1LC00NzQuNzM2IDEwMy44MDUsLTQ3My4xMjQiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE4MSIgeT0iLTUyNC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5saXN0ZW4gb248L3RleHQ+Ci08L2c+Ci08IS0tIGV2ZW50IC0tPgotPGcgaWQ9Im5vZGU5IiBjbGFzcz0ibm9kZSI+PHRpdGxlPmV2ZW50PC90aXRsZT4KLTxnIGlkPSJhX25vZGU5Ij48YSB4bGluazpocmVmPSJnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCIgeGxpbms6dGl0bGU9ImV2ZW50IiB0YXJnZXQ9Il90b3AiPgotPHBvbHlnb24gZmlsbD0iI2RkZmZkZCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI1OTUsLTMwNCA1NDEsLTMwNCA1NDEsLTI2OCA1OTUsLTI2OCA1OTUsLTMwNCIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNTY4IiB5PSItMjgzLjgiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPmV2ZW50PC90ZXh0PgotPC9hPgotPC9nPgotPC9nPgotPCEtLSBhcHBsaWNhdGlvbiYjNDU7Jmd0O2V2ZW50IC0tPgotPGcgaWQ9ImVkZ2UyNiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5hcHBsaWNhdGlvbiYjNDU7Jmd0O2V2ZW50PC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik01ODEuMDgzLC01OTAuMTA0QzYwNC43MzEsLTU3Ny4yMDggNjMyLC01NTYuMDQxIDYzMiwtNTI3IDYzMiwtNTI3IDYzMiwtNTI3IDYzMiwtMzY1IDYzMiwtMzQ0LjkwMSA2MjkuOTYxLC0zMzguMTUyIDYxOCwtMzIyIDYxMy45MzMsLTMxNi41MDggNjA4Ljc0MSwtMzExLjU2MSA2MDMuMjUsLTMwNy4yMzQiLz4KLTxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjYwNS4yNDQsLTMwNC4zNTcgNTk1LjA4NiwtMzAxLjM0NiA2MDEuMTQ5LC0zMTAuMDM0IDYwNS4yNDQsLTMwNC4zNTciLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjY0MSIgeT0iLTQ0NC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5zZW5kPC90ZXh0PgotPC9nPgotPCEtLSBwaXBlbGluZSAtLT4KLTxnIGlkPSJub2RlMTMiIGNsYXNzPSJub2RlIj48dGl0bGU+cGlwZWxpbmU8L3RpdGxlPgotPGcgaWQ9ImFfbm9kZTEzIj48YSB4bGluazpocmVmPSJHc3RQaXBlbGluZS5odG1sIiB4bGluazp0aXRsZT0icGlwZWxpbmUiIHRhcmdldD0iX3RvcCI+Ci08cG9seWdvbiBmaWxsPSIjY2NjY2ZmIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjI2MCwtNTQ0IDIwNiwtNTQ0IDIwNiwtNTA4IDI2MCwtNTA4IDI2MCwtNTQ0Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyMzMiIHk9Ii01MjMuOCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+cGlwZWxpbmU8L3RleHQ+Ci08L2E+Ci08L2c+Ci08L2c+Ci08IS0tIGFwcGxpY2F0aW9uJiM0NTsmZ3Q7cGlwZWxpbmUgLS0+Ci08ZyBpZD0iZWRnZTIzIiBjbGFzcz0iZWRnZSI+PHRpdGxlPmFwcGxpY2F0aW9uJiM0NTsmZ3Q7cGlwZWxpbmU8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTUxMi43OTksLTU5Ni41MDRDNDUzLjQ0NywtNTgxLjc2MSAzMzEuODQ5LC01NTEuNTU1IDI3MC4zNjMsLTUzNi4yODEiLz4KLTxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjI3MC44NjgsLTUzMi44IDI2MC4zMTksLTUzMy43ODYgMjY5LjE4MSwtNTM5LjU5NCAyNzAuODY4LC01MzIuOCIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNDA2LjUiIHk9Ii01NjQuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzPC90ZXh0PgotPC9nPgotPCEtLSBxdWVyeSAtLT4KLTxnIGlkPSJub2RlMTYiIGNsYXNzPSJub2RlIj48dGl0bGU+cXVlcnk8L3RpdGxlPgotPGcgaWQ9ImFfbm9kZTE2Ij48YSB4bGluazpocmVmPSJnc3RyZWFtZXItR3N0UXVlcnkuaHRtbCIgeGxpbms6dGl0bGU9InF1ZXJ5IiB0YXJnZXQ9Il90b3AiPgotPHBvbHlnb24gZmlsbD0iI2RkZmZkZCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI2OTAsLTMwNCA2MzYsLTMwNCA2MzYsLTI2OCA2OTAsLTI2OCA2OTAsLTMwNCIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNjYzIiB5PSItMjgzLjgiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPnF1ZXJ5PC90ZXh0PgotPC9hPgotPC9nPgotPC9nPgotPCEtLSBhcHBsaWNhdGlvbiYjNDU7Jmd0O3F1ZXJ5IC0tPgotPGcgaWQ9ImVkZ2UyNSIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5hcHBsaWNhdGlvbiYjNDU7Jmd0O3F1ZXJ5PC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik01ODEuMDAzLC02MDAuODc3QzYyMi4xNTQsLTU5My43NzIgNjg2LC01NzUuMDExIDY4NiwtNTI3IDY4NiwtNTI3IDY4NiwtNTI3IDY4NiwtMzY1IDY4NiwtMzQ3LjQ0OSA2ODAuNTc3LC0zMjguNTUxIDY3NC45OTcsLTMxMy43NTMiLz4KLTxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjY3OC4xNDcsLTMxMi4yMDUgNjcxLjE3NCwtMzA0LjIyOSA2NzEuNjUxLC0zMTQuODEzIDY3OC4xNDcsLTMxMi4yMDUiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjY5NSIgeT0iLTQ0NC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5zZW5kPC90ZXh0PgotPC9nPgotPCEtLSBiaW4gLS0+Ci08ZyBpZD0ibm9kZTIiIGNsYXNzPSJub2RlIj48dGl0bGU+YmluPC90aXRsZT4KLTxnIGlkPSJhX25vZGUyIj48YSB4bGluazpocmVmPSJHc3RCaW4uaHRtbCIgeGxpbms6dGl0bGU9ImJpbiIgdGFyZ2V0PSJfdG9wIj4KLTxwb2x5Z29uIGZpbGw9IiNjY2NjZmYiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzQ2LC00NjQgMjkyLC00NjQgMjkyLC00MjggMzQ2LC00MjggMzQ2LC00NjQiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjMxOSIgeT0iLTQ0My44IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5iaW48L3RleHQ+Ci08L2E+Ci08L2c+Ci08L2c+Ci08IS0tIGVsZW1lbnQgLS0+Ci08ZyBpZD0ibm9kZTciIGNsYXNzPSJub2RlIj48dGl0bGU+ZWxlbWVudDwvdGl0bGU+Ci08ZyBpZD0iYV9ub2RlNyI+PGEgeGxpbms6aHJlZj0iR3N0RWxlbWVudC5odG1sIiB4bGluazp0aXRsZT0iZWxlbWVudCIgdGFyZ2V0PSJfdG9wIj4KLTxwb2x5Z29uIGZpbGw9IiNjY2NjZmYiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzgyLjUsLTM4NCAzMjcuNSwtMzg0IDMyNy41LC0zNDggMzgyLjUsLTM0OCAzODIuNSwtMzg0Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzNTUiIHk9Ii0zNjMuOCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+ZWxlbWVudDwvdGV4dD4KLTwvYT4KLTwvZz4KLTwvZz4KLTwhLS0gYmluJiM0NTsmZ3Q7ZWxlbWVudCAtLT4KLTxnIGlkPSJlZGdlMSIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5iaW4mIzQ1OyZndDtlbGVtZW50PC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zMTYuNTEzLC00MjcuNjMxQzMxNi4wNjgsLTQxOS41MzkgMzE2LjU5MiwtNDA5Ljk2NCAzMjAsLTQwMiAzMjEuNTA5LC0zOTguNDc0IDMyMy41NTUsLTM5NS4xMTQgMzI1LjkwNSwtMzkxLjk3Ii8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzMjguNzU3LC0zOTQuMDI0IDMzMi42NzgsLTM4NC4xODEgMzIzLjQ3NSwtMzg5LjQzMSAzMjguNzU3LC0zOTQuMDI0Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzMjYuNSIgeT0iLTQwNC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5pcyYjNDU7YTwvdGV4dD4KLTwvZz4KLTwhLS0gYmluJiM0NTsmZ3Q7ZWxlbWVudCAtLT4KLTxnIGlkPSJlZGdlMTIiIGNsYXNzPSJlZGdlIj48dGl0bGU+YmluJiM0NTsmZ3Q7ZWxlbWVudDwvdGl0bGU+Ci08cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzI2Ljk5LC00MjcuNjg5QzMzMS42MDQsLTQxNy42OTIgMzM3LjUwNSwtNDA0LjkwNiAzNDIuNywtMzkzLjY1MSIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzQ2LjAyLC0zOTQuODA5IDM0Ny4wMzMsLTM4NC4yNjIgMzM5LjY2NCwtMzkxLjg3NSAzNDYuMDIsLTM5NC44MDkiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjM0OSIgeT0iLTQwNC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5oYXMgbjwvdGV4dD4KLTwvZz4KLTwhLS0gbWVzc2FnZSAtLT4KLTxnIGlkPSJub2RlMTAiIGNsYXNzPSJub2RlIj48dGl0bGU+bWVzc2FnZTwvdGl0bGU+Ci08ZyBpZD0iYV9ub2RlMTAiPjxhIHhsaW5rOmhyZWY9ImdzdHJlYW1lci1Hc3RNZXNzYWdlLmh0bWwiIHhsaW5rOnRpdGxlPSJtZXNzYWdlIiB0YXJnZXQ9Il90b3AiPgotPHBvbHlnb24gZmlsbD0iI2RkZmZkZCIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxMzEuNSwtMzA0IDcyLjUsLTMwNCA3Mi41LC0yNjggMTMxLjUsLTI2OCAxMzEuNSwtMzA0Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIxMDIiIHk9Ii0yODMuOCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+bWVzc2FnZTwvdGV4dD4KLTwvYT4KLTwvZz4KLTwvZz4KLTwhLS0gYnVzJiM0NTsmZ3Q7bWVzc2FnZSAtLT4KLTxnIGlkPSJlZGdlMTkiIGNsYXNzPSJlZGdlIj48dGl0bGU+YnVzJiM0NTsmZ3Q7bWVzc2FnZTwvdGl0bGU+Ci08cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNOTYuNjUzNSwtNDI3Ljc5Qzk3LjY5MDUsLTQwMC40ODUgOTkuNzIxNywtMzQ2Ljk5NCAxMDAuOTYsLTMxNC4zOCIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTA0LjQ2NSwtMzE0LjMxNCAxMDEuMzQ3LC0zMDQuMTg4IDk3LjQ3MDIsLTMxNC4wNDggMTA0LjQ2NSwtMzE0LjMxNCIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTE0IiB5PSItMzY0LjQiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPnJlY2VpdmU8L3RleHQ+Ci08L2c+Ci08IS0tIGJ1ZmZlciAtLT4KLTxnIGlkPSJub2RlNCIgY2xhc3M9Im5vZGUiPjx0aXRsZT5idWZmZXI8L3RpdGxlPgotPGcgaWQ9ImFfbm9kZTQiPjxhIHhsaW5rOmhyZWY9ImdzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCIgeGxpbms6dGl0bGU9ImJ1ZmZlciIgdGFyZ2V0PSJfdG9wIj4KLTxwb2x5Z29uIGZpbGw9IiNkZGZmZGQiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNTI4LC0yNTAgNDc0LC0yNTAgNDc0LC0yMTQgNTI4LC0yMTQgNTI4LC0yNTAiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjUwMSIgeT0iLTIyOS44IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5idWZmZXI8L3RleHQ+Ci08L2E+Ci08L2c+Ci08L2c+Ci08IS0tIGNhcHMgLS0+Ci08ZyBpZD0ibm9kZTUiIGNsYXNzPSJub2RlIj48dGl0bGU+Y2FwczwvdGl0bGU+Ci08ZyBpZD0iYV9ub2RlNSI+PGEgeGxpbms6aHJlZj0iZ3N0cmVhbWVyLUdzdENhcHMuaHRtbCIgeGxpbms6dGl0bGU9ImNhcHMiIHRhcmdldD0iX3RvcCI+Ci08cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjQ3OSwtMTE2IDQyNSwtMTE2IDQyNSwtODAgNDc5LC04MCA0NzksLTExNiIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNDUyIiB5PSItOTUuOCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+Y2FwczwvdGV4dD4KLTwvYT4KLTwvZz4KLTwvZz4KLTwhLS0gYnVmZmVyJiM0NTsmZ3Q7Y2FwcyAtLT4KLTxnIGlkPSJlZGdlMTAiIGNsYXNzPSJlZGdlIj48dGl0bGU+YnVmZmVyJiM0NTsmZ3Q7Y2FwczwvdGl0bGU+Ci08cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNNDk1LjA3NSwtMjEzLjczNEM0OTAuMDk0LC0xOTkuMzI2IDQ4Mi43MjksLTE3OC4yNzIgNDc2LC0xNjAgNDcxLjcyMSwtMTQ4LjM4MiA0NzAuNTIxLC0xNDUuNTI2IDQ2NiwtMTM0IDQ2NC45MjUsLTEzMS4yNTggNDYzLjc5NSwtMTI4LjM5OSA0NjIuNjYyLC0xMjUuNTQ4Ii8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0NjUuODM4LC0xMjQuMDYzIDQ1OC44ODIsLTExNi4wNzIgNDU5LjMzNiwtMTI2LjY1NyA0NjUuODM4LC0xMjQuMDYzIi8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0OTkiIHk9Ii0xNzYuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzIG48L3RleHQ+Ci08L2c+Ci08IS0tIHN0cnVjdHVyZSAtLT4KLTxnIGlkPSJub2RlMTgiIGNsYXNzPSJub2RlIj48dGl0bGU+c3RydWN0dXJlPC90aXRsZT4KLTxnIGlkPSJhX25vZGUxOCI+PGEgeGxpbms6aHJlZj0iZ3N0cmVhbWVyLUdzdFN0cnVjdHVyZS5odG1sIiB4bGluazp0aXRsZT0ic3RydWN0dXJlIiB0YXJnZXQ9Il90b3AiPgotPHBvbHlnb24gZmlsbD0iI2VlZWVlZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0ODIsLTM2IDQyMiwtMzYgNDIyLC0wIDQ4MiwtMCA0ODIsLTM2Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0NTIiIHk9Ii0xNS44IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5zdHJ1Y3R1cmU8L3RleHQ+Ci08L2E+Ci08L2c+Ci08L2c+Ci08IS0tIGNhcHMmIzQ1OyZndDtzdHJ1Y3R1cmUgLS0+Ci08ZyBpZD0iZWRnZTExIiBjbGFzcz0iZWRnZSI+PHRpdGxlPmNhcHMmIzQ1OyZndDtzdHJ1Y3R1cmU8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTQ1MiwtNzkuNjg5M0M0NTIsLTY5Ljg5MzggNDUyLC01Ny40MjE4IDQ1MiwtNDYuMzM1Ii8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0NTUuNSwtNDYuMjYyMyA0NTIsLTM2LjI2MjMgNDQ4LjUsLTQ2LjI2MjQgNDU1LjUsLTQ2LjI2MjMiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjQ2MiIgeT0iLTU2LjQiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmhhcyBuPC90ZXh0PgotPC9nPgotPCEtLSBjbG9jayAtLT4KLTxnIGlkPSJub2RlNiIgY2xhc3M9Im5vZGUiPjx0aXRsZT5jbG9jazwvdGl0bGU+Ci08ZyBpZD0iYV9ub2RlNiI+PGEgeGxpbms6aHJlZj0iR3N0Q2xvY2suaHRtbCIgeGxpbms6dGl0bGU9ImNsb2NrIiB0YXJnZXQ9Il90b3AiPgotPHBvbHlnb24gZmlsbD0iI2VlZWVlZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyMDQsLTMwNCAxNTAsLTMwNCAxNTAsLTI2OCAyMDQsLTI2OCAyMDQsLTMwNCIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTc3IiB5PSItMjgzLjgiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPmNsb2NrPC90ZXh0PgotPC9hPgotPC9nPgotPC9nPgotPCEtLSBlbGVtZW50JiM0NTsmZ3Q7YnVmZmVyIC0tPgotPGcgaWQ9ImVkZ2UxNyIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5lbGVtZW50JiM0NTsmZ3Q7YnVmZmVyPC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zODEuMzcyLC0zNDcuOTE3QzM5MC4xNjEsLTM0Mi4yMjEgNDAwLjAwNCwtMzM1LjgzOSA0MDksLTMzMCA0MjYuNzg1LC0zMTguNDU2IDQzMy41OTUsLTMxOC41NjkgNDQ5LC0zMDQgNDYzLjE1NywtMjkwLjYxMSA0NzYuMTE0LC0yNzIuOTQyIDQ4NS41NTMsLTI1OC41OCIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNDg4LjUxNiwtMjYwLjQ0MyA0OTAuOTU1LC0yNTAuMTMyIDQ4Mi42MTgsLTI1Ni42NzIgNDg4LjUxNiwtMjYwLjQ0MyIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNDUwLjUiIHk9Ii0zMjQuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+c2VuZCAmYW1wOyByZWNlaXZlPC90ZXh0PgotPC9nPgotPCEtLSBlbGVtZW50JiM0NTsmZ3Q7Y2xvY2sgLS0+Ci08ZyBpZD0iZWRnZTciIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O2Nsb2NrPC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zMjcuMjM0LC0zNjAuNDM5QzMwMS4zMDUsLTM1NS40MzUgMjYyLjA1MiwtMzQ1LjkyMSAyMzEsLTMzMCAyMjAuOTc5LC0zMjQuODYyIDIxMS4wMzksLTMxNy43MDIgMjAyLjQ3MSwtMzEwLjY5NyIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMjA0LjYwMiwtMzA3LjkxNSAxOTQuNzE4LC0zMDQuMSAyMDAuMDY1LC0zMTMuMjQ2IDIwNC42MDIsLTMwNy45MTUiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjI1My41IiB5PSItMzI0LjQiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPm1heSBwcm92aWRlPC90ZXh0PgotPC9nPgotPCEtLSBlbGVtZW50X2ZhY3RvcnkgLS0+Ci08ZyBpZD0ibm9kZTgiIGNsYXNzPSJub2RlIj48dGl0bGU+ZWxlbWVudF9mYWN0b3J5PC90aXRsZT4KLTxnIGlkPSJhX25vZGU4Ij48YSB4bGluazpocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB4bGluazp0aXRsZT0iZWxlbWVudCBmYWN0b3J5IiB0YXJnZXQ9Il90b3AiPgotPHBvbHlnb24gZmlsbD0iI2VlZWVlZSIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzMTIsLTMwNCAyMjIsLTMwNCAyMjIsLTI2OCAzMTIsLTI2OCAzMTIsLTMwNCIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjY3IiB5PSItMjgzLjgiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPmVsZW1lbnQgZmFjdG9yeTwvdGV4dD4KLTwvYT4KLTwvZz4KLTwvZz4KLTwhLS0gZWxlbWVudCYjNDU7Jmd0O2VsZW1lbnRfZmFjdG9yeSAtLT4KLTxnIGlkPSJlZGdlMTQiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O2VsZW1lbnRfZmFjdG9yeTwvdGl0bGU+Ci08cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzI3LjE5MiwtMzU2LjM2QzMxMy4wMTksLTM1MC43NjQgMjk2LjQxNCwtMzQyLjIwOCAyODUsLTMzMCAyODAuNjgsLTMyNS4zOCAyNzcuMzIsLTMxOS41NzMgMjc0LjczNywtMzEzLjczNCIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMjc3Ljg5OSwtMzEyLjIgMjcxLjA5LC0zMDQuMDgyIDI3MS4zNTEsLTMxNC42NzQgMjc3Ljg5OSwtMzEyLjIiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjMxMyIgeT0iLTMyNC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5pcyBjcmVhdGVkIGZyb208L3RleHQ+Ci08L2c+Ci08IS0tIGVsZW1lbnQmIzQ1OyZndDtldmVudCAtLT4KLTxnIGlkPSJlZGdlMTYiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O2V2ZW50PC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zODIuNjMyLC0zNTkuNjA1QzQwOS43NSwtMzUzLjg2NCA0NTIuMDE0LC0zNDMuNzE1IDQ4NywtMzMwIDUwMi4xNzUsLTMyNC4wNTEgNTE4LjE2NywtMzE1Ljk4NCA1MzEuODk1LC0zMDguNDQzIi8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI1MzMuOTg4LC0zMTEuMjgyIDU0MSwtMzAzLjM0IDUzMC41NjUsLTMwNS4xNzYgNTMzLjk4OCwtMzExLjI4MiIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iNTMzLjUiIHk9Ii0zMjQuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+c2VuZCAmYW1wOyByZWNlaXZlPC90ZXh0PgotPC9nPgotPCEtLSBlbGVtZW50JiM0NTsmZ3Q7bWVzc2FnZSAtLT4KLTxnIGlkPSJlZGdlMTgiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O21lc3NhZ2U8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTMyNy40MTUsLTM2MC42NzVDMjk1LjUxMSwtMzU1LjI2NiAyNDEuNjQ4LC0zNDQuODcxIDE5NywtMzMwIDE3OC4wMTUsLTMyMy42NzcgMTU3LjcxNCwtMzE0Ljc5OCAxNDAuNzczLC0zMDYuNzQ5Ii8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxNDIuMjYzLC0zMDMuNTgyIDEzMS43MzcsLTMwMi4zODQgMTM5LjIxOSwtMzA5Ljg4NSAxNDIuMjYzLC0zMDMuNTgyIi8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyMDYiIHk9Ii0zMjQuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+c2VuZDwvdGV4dD4KLTwvZz4KLTwhLS0gcGFkIC0tPgotPGcgaWQ9Im5vZGUxMSIgY2xhc3M9Im5vZGUiPjx0aXRsZT5wYWQ8L3RpdGxlPgotPGcgaWQ9ImFfbm9kZTExIj48YSB4bGluazpocmVmPSJHc3RQYWQuaHRtbCIgeGxpbms6dGl0bGU9InBhZCIgdGFyZ2V0PSJfdG9wIj4KLTxwb2x5Z29uIGZpbGw9IiNjY2NjZmYiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNDQwLC0zMDQgMzg2LC0zMDQgMzg2LC0yNjggNDQwLC0yNjggNDQwLC0zMDQiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjQxMyIgeT0iLTI4My44IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5wYWQ8L3RleHQ+Ci08L2E+Ci08L2c+Ci08L2c+Ci08IS0tIGVsZW1lbnQmIzQ1OyZndDtwYWQgLS0+Ci08ZyBpZD0iZWRnZTYiIGNsYXNzPSJlZGdlIj48dGl0bGU+ZWxlbWVudCYjNDU7Jmd0O3BhZDwvdGl0bGU+Ci08cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzY3Ljg3MiwtMzQ3LjY4OUMzNzUuNjA2LC0zMzcuMjg4IDM4NS41ODUsLTMyMy44NjkgMzk0LjE5MSwtMzEyLjI5NCIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMzk3LjAwNSwtMzE0LjM3NSA0MDAuMTY0LC0zMDQuMjYyIDM5MS4zODgsLTMxMC4xOTkgMzk3LjAwNSwtMzE0LjM3NSIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzk2IiB5PSItMzI0LjQiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmhhcyBuPC90ZXh0PgotPC9nPgotPCEtLSBwYWRfdGVtcGxhdGUgLS0+Ci08ZyBpZD0ibm9kZTEyIiBjbGFzcz0ibm9kZSI+PHRpdGxlPnBhZF90ZW1wbGF0ZTwvdGl0bGU+Ci08ZyBpZD0iYV9ub2RlMTIiPjxhIHhsaW5rOmhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHhsaW5rOnRpdGxlPSJwYWQgdGVtcGxhdGUiIHRhcmdldD0iX3RvcCI+Ci08cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjQxNiwtMTk2IDMzNiwtMTk2IDMzNiwtMTYwIDQxNiwtMTYwIDQxNiwtMTk2Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzNzYiIHk9Ii0xNzUuOCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+cGFkIHRlbXBsYXRlPC90ZXh0PgotPC9hPgotPC9nPgotPC9nPgotPCEtLSBlbGVtZW50JiM0NTsmZ3Q7cGFkX3RlbXBsYXRlIC0tPgotPGcgaWQ9ImVkZ2U1IiBjbGFzcz0iZWRnZSI+PHRpdGxlPmVsZW1lbnQmIzQ1OyZndDtwYWRfdGVtcGxhdGU8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTM1NC4zNzMsLTM0Ny43NjJDMzUzLjg5NCwtMzI4LjMxNSAzNTMuNzc5LC0yOTUuNzc1IDM1NywtMjY4IDM1OS40MjcsLTI0Ny4wNzUgMzY0LjQ4LC0yMjMuODA1IDM2OC43NjUsLTIwNi4zMDkiLz4KLTxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjM3Mi4yNTQsLTIwNi43ODUgMzcxLjMwMywtMTk2LjIzMyAzNjUuNDY2LC0yMDUuMDc1IDM3Mi4yNTQsLTIwNi43ODUiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjM2NyIgeT0iLTI4NC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5oYXMgbjwvdGV4dD4KLTwvZz4KLTwhLS0gZWxlbWVudCYjNDU7Jmd0O3F1ZXJ5IC0tPgotPGcgaWQ9ImVkZ2UxNSIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5lbGVtZW50JiM0NTsmZ3Q7cXVlcnk8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTM4Mi42NzYsLTM2Mi41OTZDNDIzLjMxOSwtMzU4LjU3MyA1MDEuMjM1LC0zNDguOTgxIDU2NSwtMzMwIDU4Ni4wNzgsLTMyMy43MjYgNjA4LjYxNiwtMzE0LjA2MSA2MjYuNzU3LC0zMDUuNDgyIi8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI2MjguMzIyLC0zMDguNjEzIDYzNS44MTEsLTMwMS4xMTggNjI1LjI4MywtMzAyLjMwNyA2MjguMzIyLC0zMDguNjEzIi8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI2MDMiIHk9Ii0zMjQuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+YW5zd2VyczwvdGV4dD4KLTwvZz4KLTwhLS0gcGx1Z2luX2ZlYXR1cmUgLS0+Ci08ZyBpZD0ibm9kZTE1IiBjbGFzcz0ibm9kZSI+PHRpdGxlPnBsdWdpbl9mZWF0dXJlPC90aXRsZT4KLTxnIGlkPSJhX25vZGUxNSI+PGEgeGxpbms6aHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB4bGluazp0aXRsZT0icGx1Z2luIGZlYXR1cmUiIHRhcmdldD0iX3RvcCI+Ci08cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE2NC41LC0xOTYgODEuNSwtMTk2IDgxLjUsLTE2MCAxNjQuNSwtMTYwIDE2NC41LC0xOTYiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjEyMyIgeT0iLTE3NS44IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI5LjAwIj5wbHVnaW4gZmVhdHVyZTwvdGV4dD4KLTwvYT4KLTwvZz4KLTwvZz4KLTwhLS0gZWxlbWVudF9mYWN0b3J5JiM0NTsmZ3Q7cGx1Z2luX2ZlYXR1cmUgLS0+Ci08ZyBpZD0iZWRnZTIyIiBjbGFzcz0iZWRnZSI+PHRpdGxlPmVsZW1lbnRfZmFjdG9yeSYjNDU7Jmd0O3BsdWdpbl9mZWF0dXJlPC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0yNDMuODY0LC0yNjcuOTY5QzIxOS43NiwtMjUwLjIyNiAxODEuODIxLC0yMjIuMjk5IDE1NC44ODUsLTIwMi40NzEiLz4KLTxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjE1Ni42ODUsLTE5OS40NSAxNDYuNTU3LC0xOTYuMzQxIDE1Mi41MzYsLTIwNS4wODggMTU2LjY4NSwtMTk5LjQ1Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyMjMuNSIgeT0iLTIzMC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5pcyYjNDU7YTwvdGV4dD4KLTwvZz4KLTwhLS0gcGFkJiM0NTsmZ3Q7Y2FwcyAtLT4KLTxnIGlkPSJlZGdlOCIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5wYWQmIzQ1OyZndDtjYXBzPC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik00MjcuOTQ1LC0yNjcuODgxQzQzMS44NywtMjYyLjQ5NCA0MzUuNjU1LC0yNTYuMjk4IDQzOCwtMjUwIDQ0Ni4xOTIsLTIyNy45OTIgNDQ5Ljc2NSwtMTYzLjMzMyA0NTEuMTc5LC0xMjYuMTUxIi8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSI0NTQuNjgyLC0xMjYuMTI4IDQ1MS41MzcsLTExNi4wMTEgNDQ3LjY4NiwtMTI1Ljg4MSA0NTQuNjgyLC0xMjYuMTI4Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0NjAiIHk9Ii0xNzYuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzIG48L3RleHQ+Ci08L2c+Ci08IS0tIHBhZCYjNDU7Jmd0O3BhZF90ZW1wbGF0ZSAtLT4KLTxnIGlkPSJlZGdlMTMiIGNsYXNzPSJlZGdlIj48dGl0bGU+cGFkJiM0NTsmZ3Q7cGFkX3RlbXBsYXRlPC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0zOTMuNzgsLTI2Ny42ODVDMzg5LjE0OCwtMjYyLjQ3MyAzODQuNzQ4LC0yNTYuNDE3IDM4MiwtMjUwIDM3Ni4xNiwtMjM2LjM2MSAzNzQuNDc1LC0yMTkuOTE4IDM3NC4zMzQsLTIwNi4yOTEiLz4KLTxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjM3Ny44MzcsLTIwNi4xMzEgMzc0LjUwMiwtMTk2LjA3NSAzNzAuODM4LC0yMDYuMDE2IDM3Ny44MzcsLTIwNi4xMzEiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjQxMCIgeT0iLTIzMC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5pcyBjcmVhdGVkIGZyb208L3RleHQ+Ci08L2c+Ci08IS0tIHBhZF90ZW1wbGF0ZSYjNDU7Jmd0O2NhcHMgLS0+Ci08ZyBpZD0iZWRnZTkiIGNsYXNzPSJlZGdlIj48dGl0bGU+cGFkX3RlbXBsYXRlJiM0NTsmZ3Q7Y2FwczwvdGl0bGU+Ci08cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMzkyLjg2NywtMTU5LjY4OUM0MDMuMTk4LC0xNDkuMDg2IDQxNi41ODYsLTEzNS4zNDYgNDI4LjAwOSwtMTIzLjYyMiIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNDMwLjcwOCwtMTI1Ljg2NyA0MzUuMTgsLTExNi4yNjIgNDI1LjY5NSwtMTIwLjk4MiA0MzAuNzA4LC0xMjUuODY3Ii8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI0MjciIHk9Ii0xMzYuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzIG48L3RleHQ+Ci08L2c+Ci08IS0tIHBpcGVsaW5lJiM0NTsmZ3Q7YmluIC0tPgotPGcgaWQ9ImVkZ2UyIiBjbGFzcz0iZWRnZSI+PHRpdGxlPnBpcGVsaW5lJiM0NTsmZ3Q7YmluPC90aXRsZT4KLTxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0yNTIuMDg2LC01MDcuNjg5QzI2My44ODgsLTQ5Ni45ODUgMjc5LjIxNSwtNDgzLjA4NCAyOTIuMjIxLC00NzEuMjg4Ii8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIyOTQuOTExLC00NzMuNTczIDI5OS45NjcsLTQ2NC4yNjIgMjkwLjIwOSwtNDY4LjM4OCAyOTQuOTExLC00NzMuNTczIi8+Ci08dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIyODUuNSIgeT0iLTQ4NC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5pcyYjNDU7YTwvdGV4dD4KLTwvZz4KLTwhLS0gcGlwZWxpbmUmIzQ1OyZndDtidXMgLS0+Ci08ZyBpZD0iZWRnZTMiIGNsYXNzPSJlZGdlIj48dGl0bGU+cGlwZWxpbmUmIzQ1OyZndDtidXM8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTIwNS45ODIsLTUyMi43NzhDMTgwLjY5LC01MTkuNDI1IDE0My4xMywtNTExLjAyNCAxMTgsLTQ5MCAxMTIuNzY2LC00ODUuNjIxIDEwOC42MzcsLTQ3OS42ODIgMTA1LjQzOSwtNDczLjYxNiIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTA4LjQ3NywtNDcxLjg0MiAxMDEuMTU0LC00NjQuMTg2IDEwMi4xMDQsLTQ3NC43MzggMTA4LjQ3NywtNDcxLjg0MiIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTI4IiB5PSItNDg0LjQiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmhhcyAxPC90ZXh0PgotPC9nPgotPCEtLSBwaXBlbGluZSYjNDU7Jmd0O2Nsb2NrIC0tPgotPGcgaWQ9ImVkZ2U0IiBjbGFzcz0iZWRnZSI+PHRpdGxlPnBpcGVsaW5lJiM0NTsmZ3Q7Y2xvY2s8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTIyNS43MjEsLTUwNy45MzlDMjExLjkxMiwtNDc0LjUzOCAxODIuMzY1LC0zOTcuODUxIDE3MiwtMzMwIDE3MS4yMzIsLTMyNC45NzEgMTcxLjIxOSwtMzE5LjU5NiAxNzEuNjE3LC0zMTQuNDA4Ii8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIxNzUuMTI2LC0zMTQuNTUzIDE3Mi44OTcsLTMwNC4xOTYgMTY4LjE4LC0zMTMuNjgyIDE3NS4xMjYsLTMxNC41NTMiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIwMSIgeT0iLTQwNC40IiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyIgZm9udC1zaXplPSI3LjAwIj5oYXMgMTwvdGV4dD4KLTwvZz4KLTwhLS0gcGx1Z2luIC0tPgotPGcgaWQ9Im5vZGUxNCIgY2xhc3M9Im5vZGUiPjx0aXRsZT5wbHVnaW48L3RpdGxlPgotPGcgaWQ9ImFfbm9kZTE0Ij48YSB4bGluazpocmVmPSJHc3RQbHVnaW4uaHRtbCIgeGxpbms6dGl0bGU9InBsdWdpbiIgdGFyZ2V0PSJfdG9wIj4KLTxwb2x5Z29uIGZpbGw9IiNlZWVlZWUiIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNTQsLTMwNCAwLC0zMDQgMCwtMjY4IDU0LC0yNjggNTQsLTMwNCIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjciIHk9Ii0yODMuOCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iOS4wMCI+cGx1Z2luPC90ZXh0PgotPC9hPgotPC9nPgotPC9nPgotPCEtLSBwbHVnaW4mIzQ1OyZndDtwbHVnaW5fZmVhdHVyZSAtLT4KLTxnIGlkPSJlZGdlMjEiIGNsYXNzPSJlZGdlIj48dGl0bGU+cGx1Z2luJiM0NTsmZ3Q7cGx1Z2luX2ZlYXR1cmU8L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTQyLjQyNDEsLTI2Ny45NjlDNTguMTQ1OCwtMjUwLjYxIDgyLjY5NTUsLTIyMy41MDMgMTAwLjU2NywtMjAzLjc2OSIvPgotPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iMTAzLjE3NywtMjA2LjEwMiAxMDcuMjk1LC0xOTYuMzQxIDk3Ljk4ODIsLTIwMS40MDMgMTAzLjE3NywtMjA2LjEwMiIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMTAwIiB5PSItMjMwLjQiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjcuMDAiPmhhcyBuPC90ZXh0PgotPC9nPgotPCEtLSByZWdpc3RyeSAtLT4KLTxnIGlkPSJub2RlMTciIGNsYXNzPSJub2RlIj48dGl0bGU+cmVnaXN0cnk8L3RpdGxlPgotPGcgaWQ9ImFfbm9kZTE3Ij48YSB4bGluazpocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB4bGluazp0aXRsZT0icmVnaXN0cnkiIHRhcmdldD0iX3RvcCI+Ci08cG9seWdvbiBmaWxsPSIjZWVlZWVlIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjU0LC0zODQgMCwtMzg0IDAsLTM0OCA1NCwtMzQ4IDU0LC0zODQiLz4KLTx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjI3IiB5PSItMzYzLjgiIGZvbnQtZmFtaWx5PSJCaXRzdHJlYW0gVmVyYSBTYW5zIiBmb250LXNpemU9IjkuMDAiPnJlZ2lzdHJ5PC90ZXh0PgotPC9hPgotPC9nPgotPC9nPgotPCEtLSByZWdpc3RyeSYjNDU7Jmd0O3BsdWdpbiAtLT4KLTxnIGlkPSJlZGdlMjAiIGNsYXNzPSJlZGdlIj48dGl0bGU+cmVnaXN0cnkmIzQ1OyZndDtwbHVnaW48L3RpdGxlPgotPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTI3LC0zNDcuNjg5QzI3LC0zMzcuODk0IDI3LC0zMjUuNDIyIDI3LC0zMTQuMzM1Ii8+Ci08cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIzMC41MDAxLC0zMTQuMjYyIDI3LC0zMDQuMjYyIDIzLjUwMDEsLTMxNC4yNjIgMzAuNTAwMSwtMzE0LjI2MiIvPgotPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzciIHk9Ii0zMjQuNCIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiIGZvbnQtc2l6ZT0iNy4wMCI+aGFzIG48L3RleHQ+Ci08L2c+Ci08L2c+Ci08L3N2Zz4KZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWwgYi9kb2NzL2dzdC9nc3RyZWFtZXItZG9jcy5zZ21sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2I4NWMzLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2dzdHJlYW1lci1kb2NzLnNnbWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMy8vRU4iCi0gICAgICAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjMvZG9jYm9va3guZHRkIiBbCi08IUVOVElUWSAlIHZlcnNpb24tZW50aXRpZXMgU1lTVEVNICJ2ZXJzaW9uLmVudGl0aWVzIj4KLSV2ZXJzaW9uLWVudGl0aWVzOwotPCFFTlRJVFkgJSBsb2NhbC5jb21tb24uYXR0cmliICJ4bWxuczp4aSAgQ0RBVEEgICNGSVhFRCAnaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSciPgotPCFFTlRJVFkgaGFzaCAiIyI+Ci1dPgotPGJvb2sgaWQ9ImluZGV4IiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSI+Ci0gIDxib29raW5mbz4KLSAgICA8dGl0bGU+R1N0cmVhbWVyICZHU1RfQVBJX1ZFUlNJT047IENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci0gICAgPHJlbGVhc2VpbmZvPgotICAgICAgZm9yIEdTdHJlYW1lciBDb3JlICZHU1RfQVBJX1ZFUlNJT047ICgmR1NUX1ZFUlNJT047KQotICAgICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgb24tbGluZSBhdAotICAgICAgPHVsaW5rIHJvbGU9Im9ubGluZS1sb2NhdGlvbiIgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC8iPmh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sLzwvdWxpbms+LgotICAgIDwvcmVsZWFzZWluZm8+Ci0gIDwvYm9va2luZm8+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImdzdHJlYW1lciI+Ci0KLSAgICA8dGl0bGU+R1N0cmVhbWVyIE92ZXJ2aWV3PC90aXRsZT4KLSAgICA8cGFyYT4KLUdTdHJlYW1lciBpcyBhIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmsuCi1JdCB1c2VzIGdyYXBocyBvZiBlbGVtZW50cyB3aGljaCBvcGVyYXRlIG9uIGRhdGEuCi1UaGUgZnVuY3Rpb25hbGl0eSB0byBwcm9jZXNzIG1lZGlhIGlzIHByb3ZpZGVkIGJ5IHBsdWctaW5zIHdoaWNoIHByb3ZpZGUKLWZlYXR1cmVzIGxpa2UgZWxlbWVudHMsIHR5cGVmaW5kaW5nLCBhbmQgc28gb24uCi1UaGlzIGFsbG93cyBuZXcgZnVuY3Rpb25hbGl0eSB0byBiZSBhZGRlZCBzaW1wbHkgYnkgaW5zdGFsbGluZyBuZXcgcGx1Zy1pbnMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci1HU3RyZWFtZXIgaXMgY3Jvc3MtcGxhdGZvcm0gYW5kIHdvcmtzIG9uIG1vc3QgVU5JWC1saWtlIHBsYXRmb3JtcyBhcyB3ZWxsIGFzCi1XaW5kb3dzLiAgSXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLShHTlUgTEdQTCkuCi0gICAgPC9wYXJhPgotCi0gICAgPG1lZGlhb2JqZWN0PgotICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImdzdC11bml2ZXJzZS5zdmciIGZvcm1hdD0iU1ZHIi8+Ci0gICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgPGNhcHRpb24+Ci0gICAgICAgIDxwYXJhPlJlbGF0aW9uIGJldHdlZW4gZ3N0cmVhbWVyIGNvcmUgb2JqZWN0cy48L3BhcmE+Ci0gICAgICA8L2NhcHRpb24+Ci0gICAgPC9tZWRpYW9iamVjdD4KLQotICAgIDx4aTppbmNsdWRlIGhyZWY9ImJ1aWxkaW5nLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJydW5uaW5nLnhtbCIgLz4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJsaWJnc3RyZWFtZXIiPgotICAgIDx0aXRsZT5HU3RyZWFtZXIgQ29yZSBMaWJyYXJ5PC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgbGliZ3N0cmVhbWVyLSZHU1RfQVBJX1ZFUlNJT047LnNvIHByb3ZpZGVzIGFsbCB0aGUgY29yZSBHU3RyZWFtZXIgc2VydmljZXMsCi0gICAgICBpbmNsdWRpbmcgaW5pdGlhbGl6YXRpb24sIHBsdWdpbiBtYW5hZ2VtZW50IGFuZCB0eXBlcywKLSAgICAgIGFzIHdlbGwgYXMgdGhlIG9iamVjdCBoaWVyYXJjaHkgdGhhdCBkZWZpbmVzIGVsZW1lbnRzIGFuZCBiaW5zLAotICAgICAgYWxvbmcgd2l0aCBzb21lIG1vcmUgc3BlY2lhbGl6ZWQgZWxlbWVudHMuCi0gICAgPC9wYXJhPgotCi0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGFsbG9jYXRvci54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGF0b21pY3F1ZXVlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0YmluLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0YnVmZmVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0YnVmZmVybGlzdC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJ1ZmZlcnBvb2wueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RidXMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RjYXBzLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Y2Fwc2ZlYXR1cmVzLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0c2FtcGxlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Y2hpbGRwcm94eS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNsb2NrLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Y29uZmlnLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Y29udGV4dC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNvbnRyb2xiaW5kaW5nLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0Y29udHJvbHNvdXJjZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGRhdGV0aW1lLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0ZWxlbWVudC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGVsZW1lbnRmYWN0b3J5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0ZXJyb3IueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RldmVudC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGZvcm1hdC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGdob3N0cGFkLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0aXRlcmF0b3IueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RtZW1vcnkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RtZXNzYWdlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0bWV0YS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdG1pbmlvYmplY3QueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RvYmplY3QueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RwYWQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RwYWR0ZW1wbGF0ZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHBhcmFtc3BlYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHBhcnNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0cGlwZWxpbmUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RwbHVnaW4ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RwbHVnaW5mZWF0dXJlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0cG9sbC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHByZXNldC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHByb3RlY3Rpb24ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RxdWVyeS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHJlZ2lzdHJ5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0c2VnbWVudC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHN0cmVhbXMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RzdHJlYW1jb2xsZWN0aW9uLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0c3RydWN0dXJlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0c3lzdGVtY2xvY2sueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R0YWdsaXN0LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dGFnc2V0dGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dGFzay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHRhc2twb29sLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dG9jLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dG9jc2V0dGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dHlwZWZpbmQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R0eXBlZmluZGZhY3RvcnkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R1cmkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R1cmloYW5kbGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dXRpbHMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3R2YWx1ZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHZlcnNpb24ueG1sIiAvPgotCi0gIDwvY2hhcHRlcj4KLQotICA8Y2hhcHRlciBpZD0iZ3N0cmVhbWVyLWRldmljZS1wcm9iaW5nIj4KLSAgICA8dGl0bGU+R1N0cmVhbWVyIERldmljZSBEaXNjb3ZlcnkgYW5kIERldmljZSBQcm9iaW5nPC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0ZGV2aWNlbW9uaXRvci54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGRldmljZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGRldmljZXByb3ZpZGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LnhtbCIgLz4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItc3VwcG9ydCI+Ci0gICAgPHRpdGxlPkdTdHJlYW1lciBDb3JlIFN1cHBvcnQ8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVGhlc2VzIG1vZHVsZXMgc3VwcG9ydCB0aGUgZ3N0cmVhbWVyIGNvcmUgYW5kIHBsdWdpbiBkZXZlbG9wbWVudC4KLSAgICAgIEFwcGxpY2F0aW9uIGRldmVsb3BlcnMgd2lsbCByYXJlbHkgbmVlZCB0byBrbm93IGFib3V0IGl0LgotICAgIDwvcGFyYT4KLQotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RpbmZvLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dHJhY2VyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dHJhY2VyZmFjdG9yeS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHRyYWNlcnJlY29yZC54bWwiIC8+Ci0KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItaGllcmFyY2h5Ij4KLSAgICA8dGl0bGU+T2JqZWN0IEhpZXJhcmNoeTwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3RyZWVfaW5kZXguc2dtbCIvPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGluZGV4PgotICAgIDx0aXRsZT5BUEkgSW5kZXg8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtZnVsbC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLSAgPC9pbmRleD4KLSAgPGluZGV4IHJvbGU9ImRlcHJlY2F0ZWQiPgotICAgIDx0aXRsZT5JbmRleCBvZiBkZXByZWNhdGVkIEFQSTwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC1kZXByZWNhdGVkLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgotICA8L2luZGV4PgotICA8aW5kZXg+Ci0gICAgPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4xMDwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC0xLjEwLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgotICA8L2luZGV4PgotICA8aW5kZXg+Ci0gICAgPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS44PC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LTEuOC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLSAgPC9pbmRleD4KLSAgPGluZGV4PgotICAgIDx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuNjwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC0xLjYueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+Ci0gIDwvaW5kZXg+Ci0gIDxpbmRleD4KLSAgICA8dGl0bGU+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjQ8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtMS40LnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgotICA8L2luZGV4PgotICA8aW5kZXg+Ci0gICAgPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4yLjM8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtMS4yLjMueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+Ci0gIDwvaW5kZXg+Ci0gIDxpbmRleD4KLSAgICA8dGl0bGU+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjI8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtMS4yLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgotICA8L2luZGV4PgotICA8aW5kZXg+Ci0gICAgPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjEwPC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LTEuMC4xMC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLSAgPC9pbmRleD4KLSAgPGluZGV4PgotICAgIDx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMC41PC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LTEuMC41LnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgotICA8L2luZGV4PgotCi0gIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5LnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgotCi08L2Jvb2s+CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9nc3RyZWFtZXItb3ZlcnJpZGVzLnR4dCBiL2RvY3MvZ3N0L2dzdHJlYW1lci1vdmVycmlkZXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2dzdHJlYW1lci1vdmVycmlkZXMudHh0CisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQgYi9kb2NzL2dzdC9nc3RyZWFtZXItc2VjdGlvbnMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzU1MTU1Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2dzdHJlYW1lci1zZWN0aW9ucy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzODQ3ICswLDAgQEAKLSMgR1N0cmVhbWVyIEFQSSByZWZlcmVuY2Ugc2VjdGlvbnMKLQotIyBwbGVhc2UgYWRkIHNlY3Rpb25zIGluIGFscGhhYmV0aWNhbCBvcmRlciB1c2luZyB0aGUgZm9sbG93aW5nIHRlbXBsYXRlCi0jIGxlYXZlIHR3byBlbXB0eSBsaW5lcyBiZXR3ZWVuIHNlY3Rpb25zCi0jIDxTRUNUSU9OPgotIyA8RklMRT5nc3R4eHg8L0ZJTEU+Ci0jIDxUSVRMRT5Hc3RYeHg8L1RJVExFPgotIyB0eXBlZGVmcwotIyBtYWNyb3MKLSMgY29uc3RydWN0b3IKLSMgbWV0aG9kcwotIyA8U1VCU0VDVElPTiBTdGFuZGFyZD4KLSMgPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLSMgPC9TRUNUSU9OPgotCi08SU5DTFVERT5nc3QvZ3N0Lmg8L0lOQ0xVREU+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3Q8L0ZJTEU+Ci08VElUTEU+R3N0PC9USVRMRT4KLWdzdF9pbml0Ci1nc3RfaW5pdF9jaGVjawotZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cAotZ3N0X2lzX2luaXRpYWxpemVkCi1nc3RfZGVpbml0Ci1nc3RfdmVyc2lvbgotZ3N0X3ZlcnNpb25fc3RyaW5nCi1nc3Rfc2VndHJhcF9pc19lbmFibGVkCi1nc3Rfc2VndHJhcF9zZXRfZW5hYmxlZAotZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZAotZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQKLWdzdF91cGRhdGVfcmVnaXN0cnkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1HU1RfUVVBUksKLUdzdFF1YXJrSWQKLUdzdFBsdWdpbkxvYWRlcgotR3N0UGx1Z2luTG9hZGVyRnVuY3MKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RhdG9taWNxdWV1ZTwvRklMRT4KLTxUSVRMRT5Hc3RBdG9taWNRdWV1ZTwvVElUTEU+Ci1Hc3RBdG9taWNRdWV1ZQotZ3N0X2F0b21pY19xdWV1ZV9uZXcKLQotZ3N0X2F0b21pY19xdWV1ZV9yZWYKLWdzdF9hdG9taWNfcXVldWVfdW5yZWYKLQotZ3N0X2F0b21pY19xdWV1ZV9wdXNoCi1nc3RfYXRvbWljX3F1ZXVlX3BlZWsKLWdzdF9hdG9taWNfcXVldWVfcG9wCi0KLWdzdF9hdG9taWNfcXVldWVfbGVuZ3RoCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX1RZUEVfQVRPTUlDX1FVRVVFCi1nc3RfYXRvbWljX3F1ZXVlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0YmluPC9GSUxFPgotPFRJVExFPkdzdEJpbjwvVElUTEU+Ci1Hc3RCaW4KLUdzdEJpbkNsYXNzCi0KLWdzdF9iaW5fbmV3Ci1nc3RfYmluX2FkZAotZ3N0X2Jpbl9yZW1vdmUKLQotZ3N0X2Jpbl9nZXRfYnlfbmFtZQotZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwCi1nc3RfYmluX2dldF9ieV9pbnRlcmZhY2UKLQotZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzCi1nc3RfYmluX2l0ZXJhdGVfcmVjdXJzZQotZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzCi1nc3RfYmluX2l0ZXJhdGVfc29ydGVkCi1nc3RfYmluX2l0ZXJhdGVfc291cmNlcwotZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UKLQotZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5Ci0KLTxTVUJTRUNUSU9OPgotZ3N0X2Jpbl9hZGRfbWFueQotZ3N0X2Jpbl9yZW1vdmVfbWFueQotZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZAotZ3N0X2Jpbl9zeW5jX2NoaWxkcmVuX3N0YXRlcwotCi08U1VCU0VDVElPTj4KLUdzdEJpbkZsYWdzCi0KLUdTVF9CSU5fSVNfTk9fUkVTWU5DCi0KLUdTVF9CSU5fQ0hJTERSRU4KLUdTVF9CSU5fQ0hJTERSRU5fQ09PS0lFCi1HU1RfQklOX05VTUNISUxEUkVOCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0JJTgotR1NUX0lTX0JJTgotR1NUX1RZUEVfQklOCi1HU1RfQklOX0NMQVNTCi1HU1RfSVNfQklOX0NMQVNTCi1HU1RfQklOX0dFVF9DTEFTUwotR1NUX1RZUEVfQklOX0ZMQUdTCi1HU1RfQklOX0NBU1QKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYmluX2dldF90eXBlCi1nc3RfYmluX2ZsYWdzX2dldF90eXBlCi1Hc3RCaW5Qcml2YXRlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RidXM8L0ZJTEU+Ci08VElUTEU+R3N0QnVzPC9USVRMRT4KLUdzdEJ1cwotR3N0QnVzRmxhZ3MKLUdzdEJ1c1N5bmNSZXBseQotR3N0QnVzRnVuYwotR3N0QnVzU3luY0hhbmRsZXIKLWdzdF9idXNfbmV3Ci1nc3RfYnVzX3Bvc3QKLWdzdF9idXNfaGF2ZV9wZW5kaW5nCi1nc3RfYnVzX3BlZWsKLWdzdF9idXNfcG9wCi1nc3RfYnVzX3BvcF9maWx0ZXJlZAotZ3N0X2J1c190aW1lZF9wb3AKLWdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkCi1nc3RfYnVzX3NldF9mbHVzaGluZwotZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyCi1nc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIKLWdzdF9idXNfY3JlYXRlX3dhdGNoCi1nc3RfYnVzX2FkZF93YXRjaF9mdWxsCi1nc3RfYnVzX2FkZF93YXRjaAotZ3N0X2J1c19yZW1vdmVfd2F0Y2gKLWdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24KLWdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbgotZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYwotZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoCi1nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbAotZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoCi1nc3RfYnVzX3BvbGwKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QnVzQ2xhc3MKLUdTVF9CVVMKLUdTVF9JU19CVVMKLUdTVF9UWVBFX0JVUwotR1NUX0JVU19DTEFTUwotR1NUX0lTX0JVU19DTEFTUwotR1NUX0JVU19HRVRfQ0xBU1MKLUdTVF9UWVBFX0JVU19GTEFHUwotR1NUX1RZUEVfQlVTX1NZTkNfUkVQTFkKLUdTVF9CVVNfQ0FTVAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9idXNfZ2V0X3R5cGUKLWdzdF9idXNfZmxhZ3NfZ2V0X3R5cGUKLWdzdF9idXNfc3luY19yZXBseV9nZXRfdHlwZQotR3N0QnVzUHJpdmF0ZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0YnVmZmVyPC9GSUxFPgotPFRJVExFPkdzdEJ1ZmZlcjwvVElUTEU+Ci1Hc3RCdWZmZXIKLUdzdEJ1ZmZlckZsYWdzCi1HU1RfQlVGRkVSX0ZMQUdTCi1HU1RfQlVGRkVSX0ZMQUdfSVNfU0VUCi1HU1RfQlVGRkVSX0ZMQUdfU0VUCi1HU1RfQlVGRkVSX0ZMQUdfVU5TRVQKLQotR1NUX0JVRkZFUl9QVFMKLUdTVF9CVUZGRVJfRFRTCi1HU1RfQlVGRkVSX0RUU19PUl9QVFMKLUdTVF9CVUZGRVJfRFVSQVRJT04KLUdTVF9CVUZGRVJfT0ZGU0VUCi1HU1RfQlVGRkVSX09GRlNFVF9FTkQKLUdTVF9CVUZGRVJfT0ZGU0VUX05PTkUKLUdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQKLUdTVF9CVUZGRVJfUFRTX0lTX1ZBTElECi1HU1RfQlVGRkVSX0RUU19JU19WQUxJRAotR1NUX0JVRkZFUl9PRkZTRVRfSVNfVkFMSUQKLUdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRAotR1NUX0JVRkZFUl9JU19ESVNDT05UCi0KLWdzdF9idWZmZXJfbmV3Ci1nc3RfYnVmZmVyX25ld19hbGxvY2F0ZQotZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZAotZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsCi0KLWdzdF9idWZmZXJfcmVmCi1nc3RfYnVmZmVyX3VucmVmCi0KLWdzdF9idWZmZXJfZ2V0X3NpemVzCi1nc3RfYnVmZmVyX2dldF9zaXplCi1nc3RfYnVmZmVyX2dldF9zaXplc19yYW5nZQotZ3N0X2J1ZmZlcl9yZXNpemVfcmFuZ2UKLWdzdF9idWZmZXJfcmVzaXplCi1nc3RfYnVmZmVyX3NldF9zaXplCi1nc3RfYnVmZmVyX2dldF9tYXhfbWVtb3J5Ci0KLWdzdF9idWZmZXJfcGVla19tZW1vcnkKLQotZ3N0X2J1ZmZlcl9uX21lbW9yeQotZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5Ci1nc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5X3JhbmdlCi1nc3RfYnVmZmVyX2dldF9tZW1vcnlfcmFuZ2UKLWdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZQotZ3N0X2J1ZmZlcl9maW5kX21lbW9yeQotCi1nc3RfYnVmZmVyX3ByZXBlbmRfbWVtb3J5Ci1nc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkKLWdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnkKLWdzdF9idWZmZXJfcmVwbGFjZV9hbGxfbWVtb3J5Ci1nc3RfYnVmZmVyX2dldF9tZW1vcnkKLWdzdF9idWZmZXJfZ2V0X2FsbF9tZW1vcnkKLWdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeQotZ3N0X2J1ZmZlcl9yZW1vdmVfYWxsX21lbW9yeQotCi1nc3RfYnVmZmVyX2lzX2FsbF9tZW1vcnlfd3JpdGFibGUKLWdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlCi0KLWdzdF9idWZmZXJfbWFwCi1nc3RfYnVmZmVyX21hcF9yYW5nZQotZ3N0X2J1ZmZlcl91bm1hcAotCi1nc3RfYnVmZmVyX21lbWNtcAotZ3N0X2J1ZmZlcl9leHRyYWN0Ci1nc3RfYnVmZmVyX2V4dHJhY3RfZHVwCi1nc3RfYnVmZmVyX2ZpbGwKLWdzdF9idWZmZXJfbWVtc2V0Ci0KLUdzdEJ1ZmZlckNvcHlGbGFncwotR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBCi1HU1RfQlVGRkVSX0NPUFlfQUxMCi1nc3RfYnVmZmVyX2NvcHkKLWdzdF9idWZmZXJfY29weV9pbnRvCi1nc3RfYnVmZmVyX2NvcHlfcmVnaW9uCi1nc3RfYnVmZmVyX2NvcHlfZGVlcAotCi1nc3RfYnVmZmVyX2lzX3dyaXRhYmxlCi1nc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUKLWdzdF9idWZmZXJfcmVwbGFjZQotCi1nc3RfYnVmZmVyX2FwcGVuZAotZ3N0X2J1ZmZlcl9hcHBlbmRfcmVnaW9uCi0KLWdzdF9idWZmZXJfZ2V0X21ldGEKLWdzdF9idWZmZXJfYWRkX21ldGEKLWdzdF9idWZmZXJfcmVtb3ZlX21ldGEKLWdzdF9idWZmZXJfaXRlcmF0ZV9tZXRhCi1Hc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmMKLWdzdF9idWZmZXJfZm9yZWFjaF9tZXRhCi0KLUdzdFBhcmVudEJ1ZmZlck1ldGEKLWdzdF9idWZmZXJfYWRkX3BhcmVudF9idWZmZXJfbWV0YQotZ3N0X2J1ZmZlcl9nZXRfcGFyZW50X2J1ZmZlcl9tZXRhCi0KLWdzdF9idWZmZXJfZ2V0X2ZsYWdzCi1nc3RfYnVmZmVyX3NldF9mbGFncwotZ3N0X2J1ZmZlcl91bnNldF9mbGFncwotZ3N0X2J1ZmZlcl9oYXNfZmxhZ3MKLQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RCdWZmZXJDbGFzcwotR1NUX0JVRkZFUgotR1NUX0lTX0JVRkZFUgotR1NUX1RZUEVfQlVGRkVSCi1HU1RfVFlQRV9CVUZGRVJfRkxBR1MKLUdTVF9UWVBFX0JVRkZFUl9DT1BZX0ZMQUdTCi1HU1RfQlVGRkVSX0NBU1QKLUdTVF9QQVJFTlRfQlVGRkVSX01FVEFfSU5GTwotR1NUX1RZUEVfUEFSRU5UX0JVRkZFUl9NRVRBX0FQSV9UWVBFCi1nc3RfcGFyZW50X2J1ZmZlcl9tZXRhX2dldF9pbmZvCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2J1ZmZlcl9nZXRfdHlwZQotZ3N0X2J1ZmZlcl9mbGFnc19nZXRfdHlwZQotZ3N0X2J1ZmZlcl9jb3B5X2ZsYWdzX2dldF90eXBlCi1nc3RfcGFyZW50X2J1ZmZlcl9tZXRhX2FwaV9nZXRfdHlwZQotR1NUX0JVRkZFUl9USU1FU1RBTVAKLUdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElECi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0bWV0YTwvRklMRT4KLTxUSVRMRT5Hc3RNZXRhPC9USVRMRT4KLUdzdE1ldGEKLUdzdE1ldGFGbGFncwotR1NUX01FVEFfRkxBR1MKLUdTVF9NRVRBX0ZMQUdfSVNfU0VUCi1HU1RfTUVUQV9GTEFHX1NFVAotR1NUX01FVEFfRkxBR19VTlNFVAotR3N0TWV0YUluZm8KLUdzdE1ldGFJbml0RnVuY3Rpb24KLUdzdE1ldGFGcmVlRnVuY3Rpb24KLUdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbgotR3N0TWV0YVRyYW5zZm9ybUNvcHkKLUdTVF9NRVRBX1RSQU5TRk9STV9JU19DT1BZCi1nc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlcgotZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZwotZ3N0X21ldGFfYXBpX3R5cGVfZ2V0X3RhZ3MKLUdTVF9NRVRBX1RBR19NRU1PUlkKLUdTVF9NRVRBX1RBR19NRU1PUllfU1RSCi1nc3RfbWV0YV9yZWdpc3RlcgotZ3N0X21ldGFfZ2V0X2luZm8KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX01FVEFfQ0FTVAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLUdTVF9UWVBFX01FVEFfRkxBR1MKLWdzdF9tZXRhX2ZsYWdzX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RidWZmZXJwb29sPC9GSUxFPgotPFRJVExFPkdzdEJ1ZmZlclBvb2w8L1RJVExFPgotR3N0QnVmZmVyUG9vbAotR3N0QnVmZmVyUG9vbENsYXNzCi1HU1RfQlVGRkVSX1BPT0xfSVNfRkxVU0hJTkcKLWdzdF9idWZmZXJfcG9vbF9uZXcKLQotZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfcGFyYW1zCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMKLWdzdF9idWZmZXJfcG9vbF9jb25maWdfdmFsaWRhdGVfcGFyYW1zCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9hbGxvY2F0b3IKLWdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvcgotCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX25fb3B0aW9ucwotZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb24KLWdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbgotCi1nc3RfYnVmZmVyX3Bvb2xfZ2V0X29wdGlvbnMKLWdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uCi0KLWdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnCi1nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZwotCi1nc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZQotZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZQotZ3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZwotCi1Hc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzCi1Hc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcwotZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyCi1nc3RfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0JVRkZFUl9QT09MX0NMQVNTCi1HU1RfQlVGRkVSX1BPT0xfQ0FTVAotR1NUX0JVRkZFUl9QT09MCi1HU1RfSVNfQlVGRkVSX1BPT0wKLUdTVF9UWVBFX0JVRkZFUl9QT09MCi1HU1RfVFlQRV9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdTCi1nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9mbGFnc19nZXRfdHlwZQotR1NUX0lTX0JVRkZFUl9QT09MX0NMQVNTCi1HU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2J1ZmZlcl9wb29sX2dldF90eXBlCi1Hc3RCdWZmZXJQb29sUHJpdmF0ZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGJ1ZmZlcmxpc3Q8L0ZJTEU+Ci08VElUTEU+R3N0QnVmZmVyTGlzdDwvVElUTEU+Ci1Hc3RCdWZmZXJMaXN0Ci0KLWdzdF9idWZmZXJfbGlzdF9uZXcKLWdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQKLWdzdF9idWZmZXJfbGlzdF9sZW5ndGgKLWdzdF9idWZmZXJfbGlzdF9hZGQKLWdzdF9idWZmZXJfbGlzdF9pbnNlcnQKLWdzdF9idWZmZXJfbGlzdF9yZW1vdmUKLQotZ3N0X2J1ZmZlcl9saXN0X3JlZgotZ3N0X2J1ZmZlcl9saXN0X3VucmVmCi1nc3RfYnVmZmVyX2xpc3RfY29weQotZ3N0X2J1ZmZlcl9saXN0X2NvcHlfZGVlcAotZ3N0X2J1ZmZlcl9saXN0X2lzX3dyaXRhYmxlCi1nc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZQotCi1Hc3RCdWZmZXJMaXN0RnVuYwotZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2gKLWdzdF9idWZmZXJfbGlzdF9nZXQKLQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfQlVGRkVSX0xJU1QKLUdTVF9JU19CVUZGRVJfTElTVAotR1NUX1RZUEVfQlVGRkVSX0xJU1QKLUdTVF9CVUZGRVJfTElTVF9DQVNUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2J1ZmZlcl9saXN0X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Y2FwczwvRklMRT4KLTxUSVRMRT5Hc3RDYXBzPC9USVRMRT4KLUdzdENhcHMKLUdzdFN0YXRpY0NhcHMKLUdzdENhcHNJbnRlcnNlY3RNb2RlCi0KLUdzdENhcHNGbGFncwotR1NUX0NBUFNfQU5ZCi1HU1RfQ0FQU19OT05FCi1HU1RfQ0FQU19SRUZDT1VOVAotR1NUX0NBUFNfUkVGQ09VTlRfVkFMVUUKLUdTVF9TVEFUSUNfQ0FQU19BTlkKLUdTVF9TVEFUSUNfQ0FQU19OT05FCi1HU1RfQ0FQU19JU19TSU1QTEUKLUdTVF9TVEFUSUNfQ0FQUwotR1NUX0NBUFNfRkxBR1MKLUdTVF9DQVBTX0ZMQUdfSVNfU0VUCi1HU1RfQ0FQU19GTEFHX1NFVAotR1NUX0NBUFNfRkxBR19VTlNFVAotCi1Hc3RDYXBzRm9yZWFjaEZ1bmMKLUdzdENhcHNNYXBGdW5jCi1Hc3RDYXBzRmlsdGVyTWFwRnVuYwotCi1nc3RfY2Fwc19uZXdfZW1wdHkKLWdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUKLWdzdF9jYXBzX25ld19hbnkKLWdzdF9jYXBzX25ld19zaW1wbGUKLWdzdF9jYXBzX25ld19mdWxsCi1nc3RfY2Fwc19uZXdfZnVsbF92YWxpc3QKLWdzdF9jYXBzX2lzX3dyaXRhYmxlCi1nc3RfY2Fwc19jb3B5Ci1nc3RfY2Fwc19jb3B5X250aAotZ3N0X3N0YXRpY19jYXBzX2dldAotZ3N0X3N0YXRpY19jYXBzX2NsZWFudXAKLWdzdF9jYXBzX2FwcGVuZAotZ3N0X2NhcHNfbWVyZ2UKLWdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUKLWdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfZnVsbAotZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZQotZ3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlCi1nc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUKLWdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZV9mdWxsCi1nc3RfY2Fwc19nZXRfc2l6ZQotZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZQotZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzCi1nc3RfY2Fwc19zZXRfZmVhdHVyZXMKLWdzdF9jYXBzX3NldF92YWx1ZQotZ3N0X2NhcHNfc2V0X3NpbXBsZQotZ3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3QKLWdzdF9jYXBzX2ZvcmVhY2gKLWdzdF9jYXBzX21hcF9pbl9wbGFjZQotZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UKLWdzdF9jYXBzX2lzX2FueQotZ3N0X2NhcHNfaXNfZW1wdHkKLWdzdF9jYXBzX2lzX2ZpeGVkCi1nc3RfY2Fwc19pc19lcXVhbAotZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQKLWdzdF9jYXBzX2lzX3N0cmljdGx5X2VxdWFsCi1nc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZQotZ3N0X2NhcHNfaXNfc3Vic2V0Ci1nc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlCi1nc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlX2Z1bGwKLWdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QKLWdzdF9jYXBzX2ludGVyc2VjdAotZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwKLWdzdF9jYXBzX25vcm1hbGl6ZQotZ3N0X2NhcHNfc2ltcGxpZnkKLWdzdF9jYXBzX3JlcGxhY2UKLWdzdF9jYXBzX3Rha2UKLWdzdF9jYXBzX3RvX3N0cmluZwotZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLWdzdF9jYXBzX3N1YnRyYWN0Ci1nc3RfY2Fwc19tYWtlX3dyaXRhYmxlCi1nc3RfY2Fwc190cnVuY2F0ZQotZ3N0X2NhcHNfZml4YXRlCi1nc3RfY2Fwc19yZWYKLWdzdF9jYXBzX3VucmVmCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9DQVBTCi1HU1RfSVNfQ0FQUwotR1NUX1RZUEVfQ0FQUwotR1NUX1RZUEVfQ0FQU19GTEFHUwotR1NUX1RZUEVfQ0FQU19JTlRFUlNFQ1RfTU9ERQotR1NUX0NBUFNfQ0FTVAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9jYXBzX2ZsYWdzX2dldF90eXBlCi1nc3RfY2Fwc19nZXRfdHlwZQotZ3N0X2NhcHNfaW50ZXJzZWN0X21vZGVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RjYXBzZmVhdHVyZXM8L0ZJTEU+Ci08VElUTEU+R3N0Q2Fwc0ZlYXR1cmVzPC9USVRMRT4KLUdzdENhcHNGZWF0dXJlcwotR1NUX0NBUFNfRkVBVFVSRVNfQU5ZCi1HU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWQotR1NUX0NBUFNfRkVBVFVSRV9NRU1PUllfU1lTVEVNX01FTU9SWQotZ3N0X2NhcHNfZmVhdHVyZXNfbmV3Ci1nc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHkKLWdzdF9jYXBzX2ZlYXR1cmVzX25ld19hbnkKLWdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZAotZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkX3ZhbGlzdAotZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X3ZhbGlzdAotCi1nc3RfY2Fwc19mZWF0dXJlc19jb3B5Ci1nc3RfY2Fwc19mZWF0dXJlc19mcmVlCi0KLWdzdF9jYXBzX2ZlYXR1cmVzX2Zyb21fc3RyaW5nCi1nc3RfY2Fwc19mZWF0dXJlc190b19zdHJpbmcKLQotZ3N0X2NhcHNfZmVhdHVyZXNfc2V0X3BhcmVudF9yZWZjb3VudAotCi1nc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbAotZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55Ci0KLWdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zCi1nc3RfY2Fwc19mZWF0dXJlc19jb250YWluc19pZAotCi1nc3RfY2Fwc19mZWF0dXJlc19nZXRfc2l6ZQotCi1nc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoCi1nc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoX2lkCi0KLWdzdF9jYXBzX2ZlYXR1cmVzX2FkZAotZ3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkCi1nc3RfY2Fwc19mZWF0dXJlc19yZW1vdmUKLWdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZV9pZAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfQ0FQU19GRUFUVVJFUwotR1NUX0NBUFNfRkVBVFVSRVNfQ0FTVAotR1NUX0lTX0NBUFNfRkVBVFVSRVMKLUdTVF9UWVBFX0NBUFNfRkVBVFVSRVMKLWdzdF9pc19jYXBzX2ZlYXR1cmVzCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RzYW1wbGU8L0ZJTEU+Ci08VElUTEU+R3N0U2FtcGxlPC9USVRMRT4KLUdzdFNhbXBsZQotZ3N0X3NhbXBsZV9nZXRfYnVmZmVyCi1nc3Rfc2FtcGxlX2dldF9idWZmZXJfbGlzdAotZ3N0X3NhbXBsZV9nZXRfY2FwcwotZ3N0X3NhbXBsZV9nZXRfaW5mbwotZ3N0X3NhbXBsZV9nZXRfc2VnbWVudAotZ3N0X3NhbXBsZV9zZXRfYnVmZmVyX2xpc3QKLWdzdF9zYW1wbGVfbmV3Ci1nc3Rfc2FtcGxlX3JlZgotZ3N0X3NhbXBsZV91bnJlZgotZ3N0X3NhbXBsZV9jb3B5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9JU19TQU1QTEUKLUdTVF9TQU1QTEUKLUdTVF9UWVBFX1NBTVBMRQotZ3N0X3NhbXBsZV9nZXRfdHlwZQotR1NUX1NBTVBMRV9DQVNUCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Y2hpbGRwcm94eTwvRklMRT4KLTxUSVRMRT5Hc3RDaGlsZFByb3h5PC9USVRMRT4KLUdzdENoaWxkUHJveHkKLUdzdENoaWxkUHJveHlJbnRlcmZhY2UKLWdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQKLWdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZQotZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleAotZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cAotZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eQotZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QKLWdzdF9jaGlsZF9wcm94eV9nZXQKLWdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkKLWdzdF9jaGlsZF9wcm94eV9zZXRfdmFsaXN0Ci1nc3RfY2hpbGRfcHJveHlfc2V0Ci1nc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQKLWdzdF9jaGlsZF9wcm94eV9jaGlsZF9yZW1vdmVkCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9DSElMRF9QUk9YWQotR1NUX0lTX0NISUxEX1BST1hZCi1HU1RfQ0hJTERfUFJPWFlfR0VUX0lOVEVSRkFDRQotR1NUX1RZUEVfQ0hJTERfUFJPWFkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfY2hpbGRfcHJveHlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdGNsb2NrPC9GSUxFPgotPFRJVExFPkdzdENsb2NrPC9USVRMRT4KLUdzdENsb2NrCi1Hc3RDbG9ja0NsYXNzCi1Hc3RDbG9ja1RpbWUKLUdzdENsb2NrVGltZURpZmYKLUdzdENsb2NrSUQKLUdTVF9DTE9DS19USU1FX05PTkUKLUdTVF9DTE9DS19USU1FX0lTX1ZBTElECi1HU1RfQ0xPQ0tfU1RJTUVfTk9ORQotR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElECi1HU1RfU0VDT05ECi1HU1RfTVNFQ09ORAotR1NUX1VTRUNPTkQKLUdTVF9OU0VDT05ECi1HU1RfVElNRV9BU19TRUNPTkRTCi1HU1RfVElNRV9BU19NU0VDT05EUwotR1NUX1RJTUVfQVNfVVNFQ09ORFMKLUdTVF9USU1FX0FTX05TRUNPTkRTCi1HU1RfQ0xPQ0tfRElGRgotR1NUX1RJTUVWQUxfVE9fVElNRQotR1NUX1RJTUVfVE9fVElNRVZBTAotR1NUX1RJTUVTUEVDX1RPX1RJTUUKLUdTVF9USU1FX1RPX1RJTUVTUEVDCi1Hc3RDbG9ja0VudHJ5Ci1Hc3RDbG9ja0NhbGxiYWNrCi1Hc3RDbG9ja0VudHJ5VHlwZQotR1NUX0NMT0NLX0VOVFJZCi1HU1RfQ0xPQ0tfRU5UUllfQ0xPQ0sKLUdTVF9DTE9DS19FTlRSWV9UWVBFCi1HU1RfQ0xPQ0tfRU5UUllfVElNRQotR1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMCi1HU1RfQ0xPQ0tfRU5UUllfU1RBVFVTCi1Hc3RDbG9ja1JldHVybgotR3N0Q2xvY2tGbGFncwotR1NUX0NMT0NLX0ZMQUdTCi1nc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uCi1nc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZAotZ3N0X2Nsb2NrX3NldF9tYXN0ZXIKLWdzdF9jbG9ja19nZXRfbWFzdGVyCi1nc3RfY2xvY2tfc2V0X3Jlc29sdXRpb24KLWdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbgotZ3N0X2Nsb2NrX2dldF90aW1lCi1nc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkCi1nc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkCi1nc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0Ci1nc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0Ci1nc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUKLWdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQKLWdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZAotZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uCi1nc3RfY2xvY2tfdW5hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbgotZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbgotZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbgotZ3N0X2Nsb2NrX2dldF90aW1lb3V0Ci1nc3RfY2xvY2tfc2V0X3RpbWVvdXQKLWdzdF9jbG9ja193YWl0X2Zvcl9zeW5jCi1nc3RfY2xvY2tfaXNfc3luY2VkCi1nc3RfY2xvY2tfc2V0X3N5bmNlZAotZ3N0X2Nsb2NrX2lkX2dldF90aW1lCi1nc3RfY2xvY2tfaWRfd2FpdAotZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMKLWdzdF9jbG9ja19pZF91bnNjaGVkdWxlCi1nc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jCi1nc3RfY2xvY2tfaWRfcmVmCi1nc3RfY2xvY2tfaWRfdW5yZWYKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0NMT0NLCi1HU1RfSVNfQ0xPQ0sKLUdTVF9UWVBFX0NMT0NLCi1HU1RfQ0xPQ0tfQ0xBU1MKLUdTVF9JU19DTE9DS19DTEFTUwotR1NUX0NMT0NLX0dFVF9DTEFTUwotR1NUX0NMT0NLX0NBU1QKLUdTVF9UWVBFX0NMT0NLX0VOVFJZX1RZUEUKLUdTVF9UWVBFX0NMT0NLX0ZMQUdTCi1HU1RfVFlQRV9DTE9DS19SRVRVUk4KLUdTVF9UWVBFX0NMT0NLX1RJTUUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1Hc3RDbG9ja1ByaXZhdGUKLUdTVF9DTE9DS19TTEFWRV9MT0NLCi1HU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLCi1nc3RfY2xvY2tfZ2V0X3R5cGUKLWdzdF9jbG9ja19lbnRyeV90eXBlX2dldF90eXBlCi1nc3RfY2xvY2tfZmxhZ3NfZ2V0X3R5cGUKLWdzdF9jbG9ja19yZXR1cm5fZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdGNvbXBhdDwvRklMRT4KLTxUSVRMRT5Hc3RDb21wYXQ8L1RJVExFPgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1nc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUKLWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2F1dGhvcgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZGVzY3JpcHRpb24KLWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2RvY3VtZW50YXRpb25fdXJpCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9pY29uX25hbWUKLWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2tsYXNzCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9sb25nbmFtZQotZ3N0X3BhZF9nZXRfY2Fwc19yZWZmZWQKLWdzdF9wYWRfcGVlcl9nZXRfY2Fwc19yZWZmZWQKLWdzdF9wYWRfc2V0X2NhcHMKLWdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYwotR1NUX0JVRkZFUl9USU1FU1RBTVAKLUdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElECi1HU1RfTUVTU0FHRV9EVVJBVElPTgotZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uCi1nc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbgotZ3N0X2FkYXB0ZXJfcHJldl90aW1lc3RhbXAKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3Rjb25maWc8L0ZJTEU+Ci08VElUTEU+R3N0Q29uZmlnPC9USVRMRT4KLUdTVF9ESVNBQkxFX0dTVF9ERUJVRwotR1NUX0RJU0FCTEVfUEFSU0UKLUdTVF9ESVNBQkxFX1JFR0lTVFJZCi1HU1RfRElTQUJMRV9QTFVHSU4KLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1HU1RfSEFWRV9HTElCXzJfOAotR1NUX0VYUE9SVAotR1NUX1BMVUdJTl9FWFBPUlQKLUdTVF9QQURESU5HCi1HU1RfUEFERElOR19MQVJHRQotR1NUX1BBRERJTkdfSU5JVAotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGNvbnRleHQ8L0ZJTEU+Ci08VElUTEU+R3N0Q29udGV4dDwvVElUTEU+Ci1Hc3RDb250ZXh0Ci1nc3RfY29udGV4dF9uZXcKLWdzdF9jb250ZXh0X3JlZgotZ3N0X2NvbnRleHRfdW5yZWYKLWdzdF9jb250ZXh0X2NvcHkKLWdzdF9jb250ZXh0X2dldF9jb250ZXh0X3R5cGUKLWdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUKLWdzdF9jb250ZXh0X2lzX3BlcnNpc3RlbnQKLWdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUKLWdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZQotZ3N0X2NvbnRleHRfbWFrZV93cml0YWJsZQotZ3N0X2NvbnRleHRfaXNfd3JpdGFibGUKLWdzdF9jb250ZXh0X3JlcGxhY2UKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0NPTlRFWFQKLUdTVF9DT05URVhUX0NBU1QKLUdTVF9JU19DT05URVhUCi1HU1RfVFlQRV9DT05URVhUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2NvbnRleHRfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3Rjb250cm9sYmluZGluZzwvRklMRT4KLTxUSVRMRT5Hc3RDb250cm9sQmluZGluZzwvVElUTEU+Ci1Hc3RDb250cm9sQmluZGluZwotR3N0Q29udHJvbEJpbmRpbmdDbGFzcwotZ3N0X2NvbnRyb2xfYmluZGluZ19zeW5jX3ZhbHVlcwotZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWUKLWdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlX2FycmF5Ci1nc3RfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5Ci1nc3RfY29udHJvbF9iaW5kaW5nX3NldF9kaXNhYmxlZAotZ3N0X2NvbnRyb2xfYmluZGluZ19pc19kaXNhYmxlZAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfQ09OVFJPTF9CSU5ESU5HCi1HU1RfSVNfQ09OVFJPTF9CSU5ESU5HCi1HU1RfQ09OVFJPTF9CSU5ESU5HX0NMQVNTCi1HU1RfSVNfQ09OVFJPTF9CSU5ESU5HX0NMQVNTCi1HU1RfQ09OVFJPTF9CSU5ESU5HX0dFVF9DTEFTUwotR1NUX1RZUEVfQ09OVFJPTF9CSU5ESU5HCi1HU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDCi08U1VCU0VDVElPTiBQcml2YXRlPgotR3N0Q29udHJvbEJpbmRpbmdDb252ZXJ0Ci1nc3RfY29udHJvbF9iaW5kaW5nX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Y29udHJvbHNvdXJjZTwvRklMRT4KLTxUSVRMRT5Hc3RDb250cm9sU291cmNlPC9USVRMRT4KLUdzdFZhbHVlQXJyYXkKLUdzdENvbnRyb2xTb3VyY2UKLUdzdENvbnRyb2xTb3VyY2VDbGFzcwotR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlCi1Hc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheQotR3N0VGltZWRWYWx1ZQotZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZQotZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfQ09OVFJPTF9TT1VSQ0UKLUdTVF9JU19DT05UUk9MX1NPVVJDRQotR1NUX0NPTlRST0xfU09VUkNFX0NMQVNTCi1HU1RfSVNfQ09OVFJPTF9TT1VSQ0VfQ0xBU1MKLUdTVF9DT05UUk9MX1NPVVJDRV9HRVRfQ0xBU1MKLUdTVF9UWVBFX0NPTlRST0xfU09VUkNFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2NvbnRyb2xfc291cmNlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RlbGVtZW50PC9GSUxFPgotPFRJVExFPkdzdEVsZW1lbnQ8L1RJVExFPgotR3N0RWxlbWVudAotR3N0RWxlbWVudENsYXNzCi1Hc3RFbGVtZW50RmxhZ3MKLUdzdFN0YXRlCi1Hc3RTdGF0ZUNoYW5nZQotR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLQotR1NUX1NUQVRFCi1HU1RfU1RBVEVfR0VUX05FWFQKLUdTVF9TVEFURV9ORVhUCi1HU1RfU1RBVEVfUEVORElORwotR1NUX1NUQVRFX1JFVFVSTgotR1NUX1NUQVRFX1RBUkdFVAotR1NUX1NUQVRFX1RSQU5TSVRJT04KLUdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQKLUdTVF9TVEFURV9UUkFOU0lUSU9OX05FWFQKLQotR1NUX1NUQVRFX0dFVF9MT0NLCi1HU1RfU1RBVEVfR0VUX0NPTkQKLQotR1NUX0VMRU1FTlRfTkFNRQotR1NUX0VMRU1FTlRfUEFSRU5UCi1HU1RfRUxFTUVOVF9CVVMKLUdTVF9FTEVNRU5UX0NMT0NLCi1HU1RfRUxFTUVOVF9QQURTCi1HU1RfRUxFTUVOVF9TVEFSVF9USU1FCi1HU1RfRUxFTUVOVF9FUlJPUgotR1NUX0VMRU1FTlRfRVJST1JfV0lUSF9ERVRBSUxTCi1HU1RfRUxFTUVOVF9GTE9XX0VSUk9SCi1HU1RfRUxFTUVOVF9XQVJOSU5HCi1HU1RfRUxFTUVOVF9XQVJOSU5HX1dJVEhfREVUQUlMUwotR1NUX0VMRU1FTlRfSU5GTwotR1NUX0VMRU1FTlRfSU5GT19XSVRIX0RFVEFJTFMKLUdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURQotCi08U1VCU0VDVElPTiBlbGVtZW50LW1ldGFkYXRhPgotR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SCi1HU1RfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTgotR1NUX0VMRU1FTlRfTUVUQURBVEFfRE9DX1VSSQotR1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FCi1HU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUwotR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUKLQotPFNVQlNFQ1RJT04gZWxlbWVudC1jb25zdHJ1Y3Rpb24+Ci1nc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlCi1nc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZQotZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZQotZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0Ci1nc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEKLWdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEKLWdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YQotZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YQotCi08U1VCU0VDVElPTiBlbGVtZW50LXBhZHM+Ci1nc3RfZWxlbWVudF9hZGRfcGFkCi1nc3RfZWxlbWVudF9jcmVhdGVfYWxsX3BhZHMKLWdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZAotZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlCi1nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQKLWdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkCi1nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZAotZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzCi1nc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkCi1nc3RfZWxlbWVudF9yZW1vdmVfcGFkCi1nc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMKLWdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzCi1nc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzCi0KLTxTVUJTRUNUSU9OIGVsZW1lbnQtbGlua2luZz4KLWdzdF9lbGVtZW50X2xpbmsKLWdzdF9lbGVtZW50X3VubGluawotZ3N0X2VsZW1lbnRfbGlua19tYW55Ci1nc3RfZWxlbWVudF91bmxpbmtfbWFueQotZ3N0X2VsZW1lbnRfbGlua19wYWRzCi1nc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbAotZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMKLWdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZAotZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZAotCi08U1VCU0VDVElPTiBlbGVtZW50LXByb3BlcnRpZXM+Ci1nc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGEKLWdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWUKLWdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUKLWdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lCi1nc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZQotZ3N0X2VsZW1lbnRfc2V0X2J1cwotZ3N0X2VsZW1lbnRfZ2V0X2J1cwotZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQKLWdzdF9lbGVtZW50X2dldF9jb250ZXh0Ci1nc3RfZWxlbWVudF9nZXRfY29udGV4dF91bmxvY2tlZAotZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRzCi1nc3RfZWxlbWVudF9nZXRfZmFjdG9yeQotZ3N0X2VsZW1lbnRfc2V0X25hbWUKLWdzdF9lbGVtZW50X2dldF9uYW1lCi1nc3RfZWxlbWVudF9zZXRfcGFyZW50Ci1nc3RfZWxlbWVudF9nZXRfcGFyZW50Ci0KLTxTVUJTRUNUSU9OIGVsZW1lbnQtY2xvY2tzPgotZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrCi1nc3RfZWxlbWVudF9nZXRfY2xvY2sKLWdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2sKLQotPFNVQlNFQ1RJT04gZWxlbWVudC1zdGF0ZXM+Ci1nc3RfZWxlbWVudF9zZXRfc3RhdGUKLWdzdF9lbGVtZW50X2dldF9zdGF0ZQotZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZQotZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlCi1nc3RfZWxlbWVudF9hYm9ydF9zdGF0ZQotZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUKLWdzdF9lbGVtZW50X2xvc3Rfc3RhdGUKLWdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lCi1nc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lCi1nc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50Ci1nc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUKLQotPFNVQlNFQ1RJT04gZWxlbWVudC1tZXNzYWdlcz4KLWdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbAotZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsX3dpdGhfZGV0YWlscwotZ3N0X21ha2VfZWxlbWVudF9tZXNzYWdlX2RldGFpbHMKLWdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZQotCi08U1VCU0VDVElPTiBlbGVtZW50LXF1ZXJ5PgotZ3N0X2VsZW1lbnRfcXVlcnkKLWdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQKLWdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uCi1nc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbgotCi08U1VCU0VDVElPTiBlbGVtZW50LWV2ZW50PgotZ3N0X2VsZW1lbnRfc2VuZF9ldmVudAotZ3N0X2VsZW1lbnRfc2Vla19zaW1wbGUKLWdzdF9lbGVtZW50X3NlZWsKLQotPFNVQlNFQ1RJT04gZWxlbWVudC1wcm9wZXJ0eS1ub3RpZmljYXRpb25zPgotZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaAotZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNoCi1nc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoCi0KLTxTVUJTRUNUSU9OIGVsZW1lbnQtY2FsbC1hc3luYz4KLUdzdEVsZW1lbnRDYWxsQXN5bmNGdW5jCi1nc3RfZWxlbWVudF9jYWxsX2FzeW5jCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0VMRU1FTlQKLUdTVF9JU19FTEVNRU5UCi1HU1RfRUxFTUVOVF9DTEFTUwotR1NUX0lTX0VMRU1FTlRfQ0xBU1MKLUdTVF9FTEVNRU5UX0dFVF9DTEFTUwotR1NUX1RZUEVfRUxFTUVOVAotR1NUX1RZUEVfRUxFTUVOVF9GTEFHUwotR1NUX0VMRU1FTlRfQ0FTVAotR1NUX1RZUEVfU1RBVEUKLUdTVF9UWVBFX1NUQVRFX0NIQU5HRQotR1NUX1RZUEVfU1RBVEVfQ0hBTkdFX1JFVFVSTgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLUdTVF9TVEFURV9MT0NLCi1HU1RfU1RBVEVfVFJZTE9DSwotR1NUX1NUQVRFX1VOTE9DSwotR1NUX1NUQVRFX1VOTE9DS19GVUxMCi1HU1RfU1RBVEVfTE9DS19GVUxMCi1HU1RfU1RBVEVfV0FJVAotR1NUX1NUQVRFX1dBSVRfVU5USUwKLUdTVF9TVEFURV9TSUdOQUwKLUdTVF9TVEFURV9CUk9BRENBU1QKLQotZ3N0X2VsZW1lbnRfZ2V0X3R5cGUKLWdzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlCi1nc3Rfc3RhdGVfZ2V0X3R5cGUKLWdzdF9zdGF0ZV9jaGFuZ2VfZ2V0X3R5cGUKLWdzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RlbGVtZW50ZmFjdG9yeTwvRklMRT4KLTxUSVRMRT5Hc3RFbGVtZW50RmFjdG9yeTwvVElUTEU+Ci1Hc3RFbGVtZW50RmFjdG9yeQotZ3N0X2VsZW1lbnRfcmVnaXN0ZXIKLWdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZAotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YQotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5cwotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXMKLWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzCi1nc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UKLWdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlCi1nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UKLWdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYWxsX2NhcHMKLWdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwcwotZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbnlfY2FwcwotZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcwotR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZQotR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FOWQotR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPVklERU9fU0lOS1MKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT19FTkNPREVSCi1HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RBQkxFCi1HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUgotR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ1JZUFRPUgotR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERVBBWUxPQURFUgotR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNSWVBUT1IKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTwotR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFCi1HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEEKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRQotR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPCi1HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQU5ZCi1HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTVVYRVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LCi1HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU1JDCi1HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlcgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cwotZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RWxlbWVudEZhY3RvcnlDbGFzcwotR1NUX0VMRU1FTlRfRkFDVE9SWQotR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUCi1HU1RfSVNfRUxFTUVOVF9GQUNUT1JZCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0NMQVNTCi1HU1RfSVNfRUxFTUVOVF9GQUNUT1JZX0NMQVNTCi1HU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFQ09ERVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVDUllQVE9SCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFTVVYRVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVQQVlMT0FERVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfRU5DT0RFUgotR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19FTkNSWVBUT1IKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfRk9STUFUVEVSCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01FRElBX0FVRElPCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01FRElBX0lNQUdFCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01FRElBX01FVEFEQVRBCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01FRElBX1NVQlRJVExFCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01FRElBX1ZJREVPCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01VWEVSCi1HU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX1BBUlNFUgotR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19QQVlMT0FERVIKLUdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfU0lOSwotR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19TUkMKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdGVycm9yPC9GSUxFPgotPFRJVExFPkdzdEdFcnJvcjwvVElUTEU+Ci1Hc3RDb3JlRXJyb3IKLUdzdExpYnJhcnlFcnJvcgotR3N0UmVzb3VyY2VFcnJvcgotR3N0U3RyZWFtRXJyb3IKLUdTVF9DT1JFX0VSUk9SCi1HU1RfTElCUkFSWV9FUlJPUgotR1NUX1JFU09VUkNFX0VSUk9SCi1HU1RfU1RSRUFNX0VSUk9SCi1HU1RfRVJST1JfU1lTVEVNCi1nc3RfZXJyb3JfZ2V0X21lc3NhZ2UKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX1RZUEVfQ09SRV9FUlJPUgotR1NUX1RZUEVfTElCUkFSWV9FUlJPUgotR1NUX1RZUEVfUkVTT1VSQ0VfRVJST1IKLUdTVF9UWVBFX1NUUkVBTV9FUlJPUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9jb3JlX2Vycm9yX2dldF90eXBlCi1nc3RfbGlicmFyeV9lcnJvcl9nZXRfdHlwZQotZ3N0X3Jlc291cmNlX2Vycm9yX2dldF90eXBlCi1nc3Rfc3RyZWFtX2Vycm9yX2dldF90eXBlCi1nc3RfY29yZV9lcnJvcl9xdWFyawotZ3N0X2xpYnJhcnlfZXJyb3JfcXVhcmsKLWdzdF9yZXNvdXJjZV9lcnJvcl9xdWFyawotZ3N0X3N0cmVhbV9lcnJvcl9xdWFyawotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0ZXZlbnQ8L0ZJTEU+Ci08VElUTEU+R3N0RXZlbnQ8L1RJVExFPgotR3N0RXZlbnQKLQotR3N0RXZlbnRUeXBlRmxhZ3MKLUdTVF9FVkVOVF9UWVBFX0JPVEgKLUdTVF9FVkVOVF9NQUtFX1RZUEUKLQotR3N0RXZlbnRUeXBlCi0KLUdTVF9FVkVOVF9UWVBFCi1HU1RfRVZFTlRfVFlQRV9OQU1FCi1HU1RfRVZFTlRfVElNRVNUQU1QCi1HU1RfRVZFTlRfU0VRTlVNCi0KLUdTVF9FVkVOVF9JU19VUFNUUkVBTQotR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0KLUdTVF9FVkVOVF9JU19TRVJJQUxJWkVECi1HU1RfRVZFTlRfSVNfU1RJQ0tZCi0KLWdzdF9ldmVudF90eXBlX2dldF9mbGFncwotZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUKLWdzdF9ldmVudF90eXBlX3RvX3F1YXJrCi0KLWdzdF9ldmVudF9yZWYKLWdzdF9ldmVudF91bnJlZgotZ3N0X2V2ZW50X3JlcGxhY2UKLWdzdF9ldmVudF9jb3B5Ci1nc3RfZXZlbnRfc3RlYWwKLWdzdF9ldmVudF90YWtlCi0KLWdzdF9ldmVudF9pc193cml0YWJsZQotZ3N0X2V2ZW50X21ha2Vfd3JpdGFibGUKLWdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUKLQotZ3N0X2V2ZW50X25ld19jdXN0b20KLWdzdF9ldmVudF9nZXRfc3RydWN0dXJlCi1nc3RfZXZlbnRfaGFzX25hbWUKLQotZ3N0X2V2ZW50X2dldF9zZXFudW0KLWdzdF9ldmVudF9zZXRfc2VxbnVtCi0KLWdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldAotZ3N0X2V2ZW50X3NldF9ydW5uaW5nX3RpbWVfb2Zmc2V0Ci0KLWdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQKLWdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcAotZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AKLQotZ3N0X2V2ZW50X25ld19lb3MKLQotZ3N0X2V2ZW50X25ld19nYXAKLWdzdF9ldmVudF9wYXJzZV9nYXAKLQotZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQKLWdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQKLUdzdFN0cmVhbUZsYWdzCi1nc3RfZXZlbnRfc2V0X3N0cmVhbV9mbGFncwotZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9mbGFncwotZ3N0X2V2ZW50X3NldF9ncm91cF9pZAotZ3N0X2V2ZW50X3BhcnNlX2dyb3VwX2lkCi0KLWdzdF9ldmVudF9zZXRfc3RyZWFtCi1nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtCi0KLWdzdF9ldmVudF9uZXdfc2VnbWVudAotZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQKLWdzdF9ldmVudF9jb3B5X3NlZ21lbnQKLQotZ3N0X2V2ZW50X25ld190YWcKLWdzdF9ldmVudF9wYXJzZV90YWcKLQotZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZQotZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplCi0KLUdzdFFPU1R5cGUKLWdzdF9ldmVudF9uZXdfcW9zCi1nc3RfZXZlbnRfcGFyc2VfcW9zCi0KLUdzdFNlZWtUeXBlCi1Hc3RTZWVrRmxhZ3MKLWdzdF9ldmVudF9uZXdfc2VlawotZ3N0X2V2ZW50X3BhcnNlX3NlZWsKLQotZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uCi0KLWdzdF9ldmVudF9uZXdfbGF0ZW5jeQotZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kKLQotZ3N0X2V2ZW50X25ld19zdGVwCi1nc3RfZXZlbnRfcGFyc2Vfc3RlcAotCi1nc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZQotZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZQotCi1nc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlCi0KLWdzdF9ldmVudF9uZXdfY2FwcwotZ3N0X2V2ZW50X3BhcnNlX2NhcHMKLQotZ3N0X2V2ZW50X25ld190b2MKLWdzdF9ldmVudF9wYXJzZV90b2MKLQotZ3N0X2V2ZW50X25ld190b2Nfc2VsZWN0Ci1nc3RfZXZlbnRfcGFyc2VfdG9jX3NlbGVjdAotCi1nc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZQotZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnRfZG9uZQotCi1nc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24KLWdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uCi0KLWdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMKLWdzdF9ldmVudF9wYXJzZV9zZWxlY3Rfc3RyZWFtcwotCi1nc3RfZXZlbnRfbmV3X3N0cmVhbV9jb2xsZWN0aW9uCi1nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24KLQotZ3N0X2V2ZW50X25ld19zdHJlYW1fZ3JvdXBfZG9uZQotZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9ncm91cF9kb25lCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEV2ZW50Q2xhc3MKLUdTVF9FVkVOVAotR1NUX0VWRU5UX0NBU1QKLUdTVF9JU19FVkVOVAotR1NUX0lTX0VWRU5UX0NMQVNTCi1HU1RfRVZFTlRfQ0xBU1MKLUdTVF9FVkVOVF9HRVRfQ0xBU1MKLUdTVF9UWVBFX0VWRU5UCi1HU1RfVFlQRV9FVkVOVF9UWVBFCi1HU1RfVFlQRV9TRUVLX1RZUEUKLUdTVF9UWVBFX1NFRUtfRkxBR1MKLUdTVF9UWVBFX1FPU19UWVBFCi1HU1RfVFlQRV9FVkVOVF9UWVBFX0ZMQUdTCi1HU1RfVFlQRV9TVFJFQU1fRkxBR1MKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1HU1RfRVZFTlRfVFlQRV9TSElGVAotR1NUX0VWRU5UX01BWF9TVElDS1kKLUdTVF9FVkVOVF9OVU1fU0hJRlQKLUdTVF9FVkVOVF9TVElDS1lfSURYCi1HU1RfRVZFTlRfU1RJQ0tZX0lEWF9UWVBFCi1HU1RfRVZFTlRfU1RJQ0tZX1NISUZUCi1GTEFHCi1nc3RfZXZlbnRfZ2V0X3R5cGUKLWdzdF9ldmVudF90eXBlX2dldF90eXBlCi1nc3Rfc2Vla190eXBlX2dldF90eXBlCi1nc3Rfc2Vla19mbGFnc19nZXRfdHlwZQotZ3N0X3Fvc190eXBlX2dldF90eXBlCi1nc3RfZXZlbnRfdHlwZV9mbGFnc19nZXRfdHlwZQotZ3N0X3N0cmVhbV9mbGFnc19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGZvcm1hdDwvRklMRT4KLTxUSVRMRT5Hc3RGb3JtYXQ8L1RJVExFPgotR3N0Rm9ybWF0Ci1HU1RfRk9STUFUX1BFUkNFTlRfTUFYCi1HU1RfRk9STUFUX1BFUkNFTlRfU0NBTEUKLUdzdEZvcm1hdERlZmluaXRpb24KLQotZ3N0X2Zvcm1hdF9nZXRfbmFtZQotZ3N0X2Zvcm1hdF90b19xdWFyawotZ3N0X2Zvcm1hdF9yZWdpc3RlcgotZ3N0X2Zvcm1hdF9nZXRfYnlfbmljawotZ3N0X2Zvcm1hdHNfY29udGFpbnMKLWdzdF9mb3JtYXRfZ2V0X2RldGFpbHMKLWdzdF9mb3JtYXRfaXRlcmF0ZV9kZWZpbml0aW9ucwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfVFlQRV9GT1JNQVQKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZm9ybWF0X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RnaG9zdHBhZDwvRklMRT4KLTxUSVRMRT5Hc3RHaG9zdFBhZDwvVElUTEU+Ci1Hc3RQcm94eVBhZAotR3N0R2hvc3RQYWQKLQotZ3N0X2dob3N0X3BhZF9uZXcKLWdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldAotZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZQotZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUKLQotZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0Ci1nc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQKLQotZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QKLQotZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHQKLQotZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHQKLQotZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwKLQotZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQKLWdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdAotZ3N0X3Byb3h5X3BhZF9jaGFpbl9saXN0X2RlZmF1bHQKLWdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RHaG9zdFBhZENsYXNzCi1HU1RfR0hPU1RfUEFECi1HU1RfSVNfR0hPU1RfUEFECi1HU1RfR0hPU1RfUEFEX0NMQVNTCi1HU1RfSVNfR0hPU1RfUEFEX0NMQVNTCi1HU1RfVFlQRV9HSE9TVF9QQUQKLUdTVF9HSE9TVF9QQURfQ0FTVAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLUdTVF9JU19QUk9YWV9QQUQKLUdTVF9JU19QUk9YWV9QQURfQ0xBU1MKLUdTVF9QUk9YWV9QQUQKLUdTVF9QUk9YWV9QQURfQ0xBU1MKLUdTVF9UWVBFX1BST1hZX1BBRAotR3N0R2hvc3RQYWRQcml2YXRlCi1Hc3RQcm94eVBhZENsYXNzCi1Hc3RQcm94eVBhZFByaXZhdGUKLWdzdF9wcm94eV9wYWRfZ2V0X3R5cGUKLWdzdF9naG9zdF9wYWRfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdGluZm88L0ZJTEU+Ci08VElUTEU+R3N0SW5mbzwvVElUTEU+Ci1Hc3REZWJ1Z0xldmVsCi1HU1RfTEVWRUxfREVGQVVMVAotR1NUX0xFVkVMX01BWAotR3N0RGVidWdDb2xvckZsYWdzCi1Hc3REZWJ1Z0NvbG9yTW9kZQotR3N0RGVidWdDYXRlZ29yeQotR3N0RGVidWdHcmFwaERldGFpbHMKLUdTVF9TVFJfTlVMTAotR1NUX0RFQlVHX1BBRF9OQU1FCi1HU1RfRlVOQ1RJT04KLUdzdExvZ0Z1bmN0aW9uCi1nc3RfZGVidWdfbG9nCi1nc3RfZGVidWdfbG9nX3ZhbGlzdAotZ3N0X2RlYnVnX21lc3NhZ2VfZ2V0Ci1nc3RfZGVidWdfbG9nX2RlZmF1bHQKLWdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZQotZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24KLWdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uCi1nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhCi1nc3RfZGVidWdfc2V0X2FjdGl2ZQotZ3N0X2RlYnVnX2lzX2FjdGl2ZQotZ3N0X2RlYnVnX3NldF9jb2xvcmVkCi1nc3RfZGVidWdfc2V0X2NvbG9yX21vZGUKLWdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZwotZ3N0X2RlYnVnX2lzX2NvbG9yZWQKLWdzdF9kZWJ1Z19nZXRfY29sb3JfbW9kZQotZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZAotZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZnJvbV9zdHJpbmcKLWdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQKLWdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zvcl9uYW1lCi1nc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lCi1HU1RfREVCVUdfQ0FURUdPUlkKLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMKLUdTVF9ERUJVR19DQVRFR09SWV9JTklUCi1HU1RfREVCVUdfQ0FURUdPUllfR0VUCi1nc3RfZGVidWdfY2F0ZWdvcnlfZnJlZQotZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQKLWdzdF9kZWJ1Z19jYXRlZ29yeV9yZXNldF90aHJlc2hvbGQKLWdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkCi1nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUKLWdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3IKLWdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb24KLWdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXMKLWdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcgotZ3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3IKLUdTVF9DQVRfTEVWRUxfTE9HCi1HU1RfQ0FUX0VSUk9SX09CSkVDVAotR1NUX0NBVF9XQVJOSU5HX09CSkVDVAotR1NUX0NBVF9JTkZPX09CSkVDVAotR1NUX0NBVF9ERUJVR19PQkpFQ1QKLUdTVF9DQVRfTE9HX09CSkVDVAotR1NUX0NBVF9GSVhNRV9PQkpFQ1QKLUdTVF9DQVRfVFJBQ0VfT0JKRUNUCi1HU1RfQ0FUX01FTURVTVBfT0JKRUNUCi1HU1RfQ0FUX0RFRkFVTFQKLUdTVF9DQVRfRVJST1IKLUdTVF9DQVRfV0FSTklORwotR1NUX0NBVF9JTkZPCi1HU1RfQ0FUX0RFQlVHCi1HU1RfQ0FUX0xPRwotR1NUX0NBVF9GSVhNRQotR1NUX0NBVF9UUkFDRQotR1NUX0NBVF9NRU1EVU1QCi1HU1RfRVJST1JfT0JKRUNUCi1HU1RfV0FSTklOR19PQkpFQ1QKLUdTVF9JTkZPX09CSkVDVAotR1NUX0RFQlVHX09CSkVDVAotR1NUX0xPR19PQkpFQ1QKLUdTVF9GSVhNRV9PQkpFQ1QKLUdTVF9UUkFDRV9PQkpFQ1QKLUdTVF9NRU1EVU1QX09CSkVDVAotR1NUX0VSUk9SCi1HU1RfV0FSTklORwotR1NUX0lORk8KLUdTVF9ERUJVRwotR1NUX0xPRwotR1NUX0ZJWE1FCi1HU1RfVFJBQ0UKLUdTVF9NRU1EVU1QCi1HU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUgotR1NUX0RFQlVHX0ZVTkNQVFIKLUdTVF9ERUJVR19GVU5DUFRSX05BTUUKLUdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUKLUdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUwotZ3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlCi1HU1RfVElNRV9GT1JNQVQKLUdTVF9USU1FX0FSR1MKLUdTVF9TVElNRV9GT1JNQVQKLUdTVF9TVElNRV9BUkdTCi1HU1RfUFRSX0ZPUk1BVAotR1NUX1NFR01FTlRfRk9STUFUCi1nc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhCi1nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlCi1nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlX3dpdGhfdHMKLWdzdF9pbmZvX3Zhc3ByaW50ZgotZ3N0X2luZm9fc3RyZHVwX3ZwcmludGYKLWdzdF9pbmZvX3N0cmR1cF9wcmludGYKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX1RZUEVfREVCVUdfQ09MT1JfRkxBR1MKLUdTVF9UWVBFX0RFQlVHX0NPTE9SX01PREUKLUdTVF9UWVBFX0RFQlVHX0xFVkVMCi1HU1RfVFlQRV9ERUJVR19HUkFQSF9ERVRBSUxTCi08U1VCU0VDVElPTiBQcml2YXRlPgotR1NUX0RFQlVHX0ZHX01BU0sKLUdTVF9ERUJVR19CR19NQVNLCi1HU1RfREVCVUdfRk9STUFUX01BU0sKLUdzdERlYnVnRnVuY1B0cgotR3N0RGVidWdNZXNzYWdlCi1nc3RfZGVidWdfY29sb3JfZmxhZ3NfZ2V0X3R5cGUKLWdzdF9kZWJ1Z19jb2xvcl9tb2RlX2dldF90eXBlCi1nc3RfZGVidWdfbGV2ZWxfZ2V0X3R5cGUKLWdzdF9kZWJ1Z19ncmFwaF9kZXRhaWxzX2dldF90eXBlCi1HU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RpdGVyYXRvcjwvRklMRT4KLTxUSVRMRT5Hc3RJdGVyYXRvcjwvVElUTEU+Ci1Hc3RJdGVyYXRvcgotCi1Hc3RJdGVyYXRvckl0ZW0KLUdzdEl0ZXJhdG9yUmVzdWx0Ci0KLUdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uCi1Hc3RJdGVyYXRvck5leHRGdW5jdGlvbgotR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24KLUdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24KLUdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uCi1Hc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbgotR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24KLQotR1NUX0lURVJBVE9SCi1HU1RfSVRFUkFUT1JfTE9DSwotR1NUX0lURVJBVE9SX0NPT0tJRQotR1NUX0lURVJBVE9SX09SSUdfQ09PS0lFCi0KLWdzdF9pdGVyYXRvcl9uZXcKLWdzdF9pdGVyYXRvcl9uZXdfbGlzdAotZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUKLQotZ3N0X2l0ZXJhdG9yX2NvcHkKLWdzdF9pdGVyYXRvcl9mcmVlCi0KLWdzdF9pdGVyYXRvcl9uZXh0Ci1nc3RfaXRlcmF0b3JfcmVzeW5jCi1nc3RfaXRlcmF0b3JfcHVzaAotZ3N0X2l0ZXJhdG9yX2ZpbHRlcgotZ3N0X2l0ZXJhdG9yX2ZvbGQKLWdzdF9pdGVyYXRvcl9mb3JlYWNoCi1nc3RfaXRlcmF0b3JfZmluZF9jdXN0b20KLQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfVFlQRV9JVEVSQVRPUgotR1NUX1RZUEVfSVRFUkFUT1JfSVRFTQotR1NUX1RZUEVfSVRFUkFUT1JfUkVTVUxUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2l0ZXJhdG9yX2dldF90eXBlCi1nc3RfaXRlcmF0b3JfaXRlbV9nZXRfdHlwZQotZ3N0X2l0ZXJhdG9yX3Jlc3VsdF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGFsbG9jYXRvcjwvRklMRT4KLTxUSVRMRT5Hc3RBbGxvY2F0b3I8L1RJVExFPgotZ3N0X21lbW9yeV9hbGlnbm1lbnQKLQotR3N0QWxsb2NhdG9yCi1Hc3RBbGxvY2F0b3JDbGFzcwotR3N0QWxsb2NhdG9yRmxhZ3MKLUdzdEFsbG9jYXRpb25QYXJhbXMKLQotR1NUX0FMTE9DQVRPUl9TWVNNRU0KLWdzdF9hbGxvY2F0b3JfZmluZAotZ3N0X2FsbG9jYXRvcl9yZWdpc3RlcgotZ3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdAotCi1nc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdAotZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2NvcHkKLWdzdF9hbGxvY2F0aW9uX3BhcmFtc19mcmVlCi0KLWdzdF9hbGxvY2F0b3JfYWxsb2MKLWdzdF9hbGxvY2F0b3JfZnJlZQotCi1nc3RfbWVtb3J5X25ld193cmFwcGVkCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0FMTE9DQVRPUgotR1NUX0FMTE9DQVRPUl9DQVNUCi1HU1RfQUxMT0NBVE9SX0NMQVNTCi1HU1RfQUxMT0NBVE9SX0dFVF9DTEFTUwotR1NUX0lTX0FMTE9DQVRPUgotR1NUX0lTX0FMTE9DQVRPUl9DTEFTUwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLUdTVF9UWVBFX0FMTE9DQVRPUl9GTEFHUwotR3N0QWxsb2NhdG9yUHJpdmF0ZQotR1NUX1RZUEVfQUxMT0NBVElPTl9QQVJBTVMKLWdzdF9hbGxvY2F0aW9uX3BhcmFtc19nZXRfdHlwZQotR1NUX1RZUEVfQUxMT0NBVE9SCi1nc3RfYWxsb2NhdG9yX2dldF90eXBlCi1nc3RfYWxsb2NhdG9yX2ZsYWdzX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0bWVtb3J5PC9GSUxFPgotPFRJVExFPkdzdE1lbW9yeTwvVElUTEU+Ci0KLUdzdE1lbW9yeUZsYWdzCi1HU1RfTUVNT1JZX0ZMQUdTCi1HU1RfTUVNT1JZX0ZMQUdfSVNfU0VUCi1HU1RfTUVNT1JZX0ZMQUdfVU5TRVQKLUdTVF9NRU1PUllfSVNfUkVBRE9OTFkKLUdTVF9NRU1PUllfSVNfTk9fU0hBUkUKLUdTVF9NRU1PUllfSVNfWkVST19QQURERUQKLUdTVF9NRU1PUllfSVNfWkVST19QUkVGSVhFRAotR1NUX01FTU9SWV9JU19QSFlTSUNBTExZX0NPTlRJR1VPVVMKLUdTVF9NRU1PUllfSVNfTk9UX01BUFBBQkxFCi0KLUdzdE1lbW9yeQotCi1Hc3RNYXBGbGFncwotR1NUX01BUF9SRUFEV1JJVEUKLQotR3N0TWFwSW5mbwotR1NUX01BUF9JTkZPX0lOSVQKLQotR3N0TWVtb3J5TWFwRnVuY3Rpb24KLUdzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbgotR3N0TWVtb3J5VW5tYXBGdW5jdGlvbgotR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb24KLUdzdE1lbW9yeUNvcHlGdW5jdGlvbgotR3N0TWVtb3J5U2hhcmVGdW5jdGlvbgotR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24KLQotZ3N0X21lbW9yeV9pbml0Ci0KLWdzdF9tZW1vcnlfaXNfdHlwZQotCi1nc3RfbWVtb3J5X3JlZgotZ3N0X21lbW9yeV91bnJlZgotCi1nc3RfbWVtb3J5X2dldF9zaXplcwotZ3N0X21lbW9yeV9yZXNpemUKLQotZ3N0X21lbW9yeV9sb2NrCi1nc3RfbWVtb3J5X3VubG9jawotZ3N0X21lbW9yeV9pc193cml0YWJsZQotZ3N0X21lbW9yeV9tYWtlX3dyaXRhYmxlCi0KLWdzdF9tZW1vcnlfbWFrZV9tYXBwZWQKLWdzdF9tZW1vcnlfbWFwCi1nc3RfbWVtb3J5X3VubWFwCi0KLWdzdF9tZW1vcnlfY29weQotZ3N0X21lbW9yeV9zaGFyZQotCi1nc3RfbWVtb3J5X2lzX3NwYW4KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX1RZUEVfTUVNT1JZCi1nc3RfbWVtb3J5X2dldF90eXBlCi1HU1RfTUVNT1JZX0NBU1QKLUdTVF9UWVBFX0xPQ0tfRkxBR1MKLWdzdF9sb2NrX2ZsYWdzX2dldF90eXBlCi1HU1RfVFlQRV9NQVBfRkxBR1MKLWdzdF9tYXBfZmxhZ3NfZ2V0X3R5cGUKLUdTVF9UWVBFX01FTU9SWV9GTEFHUwotZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdG1lc3NhZ2U8L0ZJTEU+Ci08VElUTEU+R3N0TWVzc2FnZTwvVElUTEU+Ci1Hc3RNZXNzYWdlCi1Hc3RNZXNzYWdlVHlwZQotR1NUX01FU1NBR0VfU1JDCi1HU1RfTUVTU0FHRV9TUkNfTkFNRQotR1NUX01FU1NBR0VfVElNRVNUQU1QCi1HU1RfTUVTU0FHRV9TRVFOVU0KLUdTVF9NRVNTQUdFX1RZUEUKLUdTVF9NRVNTQUdFX1RZUEVfSVNfRVhURU5ERUQKLUdTVF9NRVNTQUdFX1RZUEVfTkFNRQotZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyawotZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZQotZ3N0X21lc3NhZ2VfcmVmCi1nc3RfbWVzc2FnZV91bnJlZgotZ3N0X21lc3NhZ2VfY29weQotZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZQotZ3N0X21lc3NhZ2VfbWFrZV93cml0YWJsZQotZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bQotZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bQotZ3N0X21lc3NhZ2VfaGFzX25hbWUKLWdzdF9tZXNzYWdlX2lzX3dyaXRhYmxlCi1nc3RfbWVzc2FnZV9yZXBsYWNlCi0KLWdzdF9tZXNzYWdlX25ld19lb3MKLWdzdF9tZXNzYWdlX25ld19lcnJvcgotZ3N0X21lc3NhZ2VfbmV3X2Vycm9yX3dpdGhfZGV0YWlscwotZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IKLWdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yX2RldGFpbHMKLWdzdF9tZXNzYWdlX25ld193YXJuaW5nCi1nc3RfbWVzc2FnZV9uZXdfd2FybmluZ193aXRoX2RldGFpbHMKLWdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcKLWdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmdfZGV0YWlscwotZ3N0X21lc3NhZ2VfbmV3X2luZm8KLWdzdF9tZXNzYWdlX25ld19pbmZvX3dpdGhfZGV0YWlscwotZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbwotZ3N0X21lc3NhZ2VfcGFyc2VfaW5mb19kZXRhaWxzCi1nc3RfbWVzc2FnZV9uZXdfdGFnCi1nc3RfbWVzc2FnZV9wYXJzZV90YWcKLWdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcKLWdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZwotZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cwotZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzCi1nc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZAotZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZAotZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5Ci1nc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lCi1nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmUKLWdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlCi1nc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlCi1nc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdAotZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdAotZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9jawotZ3N0X21lc3NhZ2VfcGFyc2VfbmV3X2Nsb2NrCi1nc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24KLWdzdF9tZXNzYWdlX25ld19lbGVtZW50Ci1nc3RfbWVzc2FnZV9uZXdfY3VzdG9tCi1nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydAotZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydAotZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZQotZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lCi1nc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZAotZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kKLWdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydAotZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmUKLWdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmUKLWdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0Ci1nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0Ci1nc3RfbWVzc2FnZV9uZXdfcW9zCi1nc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcwotZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0cwotZ3N0X21lc3NhZ2VfcGFyc2VfcW9zCi1nc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzCi1nc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMKLWdzdF9tZXNzYWdlX25ld190b2MKLWdzdF9tZXNzYWdlX3BhcnNlX3RvYwotZ3N0X21lc3NhZ2VfbmV3X3Jlc2V0X3RpbWUKLWdzdF9tZXNzYWdlX3BhcnNlX3Jlc2V0X3RpbWUKLQotZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGFydAotZ3N0X21lc3NhZ2Vfc2V0X2dyb3VwX2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9ncm91cF9pZAotCi1nc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb24KLWdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uCi1Hc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlCi1nc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZQotZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZQotZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUKLWdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGUKLQotR3N0U3RyZWFtU3RhdHVzVHlwZQotZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMKLWdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMKLWdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdAotZ3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0Ci0KLUdzdFByb2dyZXNzVHlwZQotZ3N0X21lc3NhZ2VfbmV3X3Byb2dyZXNzCi1nc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzcwotCi1nc3RfbWVzc2FnZV9uZXdfbmVlZF9jb250ZXh0Ci1nc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGUKLWdzdF9tZXNzYWdlX25ld19oYXZlX2NvbnRleHQKLWdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dAotCi1nc3RfbWVzc2FnZV9uZXdfZGV2aWNlX2FkZGVkCi1nc3RfbWVzc2FnZV9uZXdfZGV2aWNlX3JlbW92ZWQKLWdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9hZGRlZAotZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX3JlbW92ZWQKLQotZ3N0X21lc3NhZ2VfbmV3X3Byb3BlcnR5X25vdGlmeQotZ3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5Ci0KLWdzdF9tZXNzYWdlX25ld19zdHJlYW1zX3NlbGVjdGVkCi1nc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1zX3NlbGVjdGVkCi1nc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2FkZAotZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc2l6ZQotZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc3RyZWFtCi0KLWdzdF9tZXNzYWdlX25ld19yZWRpcmVjdAotZ3N0X21lc3NhZ2VfYWRkX3JlZGlyZWN0X2VudHJ5Ci1nc3RfbWVzc2FnZV9wYXJzZV9yZWRpcmVjdF9lbnRyeQotZ3N0X21lc3NhZ2VfZ2V0X251bV9yZWRpcmVjdF9lbnRyaWVzCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TWVzc2FnZUNsYXNzCi1HU1RfTUVTU0FHRQotR1NUX01FU1NBR0VfQ0FTVAotR1NUX0lTX01FU1NBR0UKLUdTVF9UWVBFX01FU1NBR0UKLUdTVF9NRVNTQUdFX0NMQVNTCi1HU1RfSVNfTUVTU0FHRV9DTEFTUwotR1NUX01FU1NBR0VfR0VUX0NMQVNTCi1HU1RfVFlQRV9NRVNTQUdFX1RZUEUKLUdTVF9UWVBFX1NUUlVDVFVSRV9DSEFOR0VfVFlQRQotR1NUX1RZUEVfU1RSRUFNX1NUQVRVU19UWVBFCi1HU1RfVFlQRV9QUk9HUkVTU19UWVBFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X21lc3NhZ2VfZ2V0X3R5cGUKLWdzdF9tZXNzYWdlX3R5cGVfZ2V0X3R5cGUKLWdzdF9zdHJ1Y3R1cmVfY2hhbmdlX3R5cGVfZ2V0X3R5cGUKLWdzdF9zdHJlYW1fc3RhdHVzX3R5cGVfZ2V0X3R5cGUKLWdzdF9wcm9ncmVzc190eXBlX2dldF90eXBlCi1HU1RfTUVTU0FHRV9HRVRfQ09ORAotR1NUX01FU1NBR0VfR0VUX0xPQ0sKLUdTVF9NRVNTQUdFX0xPQ0sKLUdTVF9NRVNTQUdFX1NJR05BTAotR1NUX01FU1NBR0VfVU5MT0NLCi1HU1RfTUVTU0FHRV9XQUlUCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RtaW5pb2JqZWN0PC9GSUxFPgotPFRJVExFPkdzdE1pbmlPYmplY3Q8L1RJVExFPgotR3N0TWluaU9iamVjdAotR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbgotR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbgotR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbgotR3N0TWluaU9iamVjdE5vdGlmeQotCi1HU1RfTUlOSV9PQkpFQ1RfVFlQRQotCi1Hc3RNaW5pT2JqZWN0RmxhZ3MKLUdTVF9NSU5JX09CSkVDVF9GTEFHUwotR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUCi1HU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQKLUdTVF9NSU5JX09CSkVDVF9GTEFHX1VOU0VUCi1HU1RfTUlOSV9PQkpFQ1RfSVNfTE9DS0FCTEUKLQotR3N0TG9ja0ZsYWdzCi1HU1RfTE9DS19GTEFHX1JFQURXUklURQotCi1HU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQKLUdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRQotCi1HU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEUKLWdzdF9taW5pX29iamVjdF9pbml0Ci0KLWdzdF9taW5pX29iamVjdF9yZWYKLWdzdF9taW5pX29iamVjdF91bnJlZgotCi1nc3RfbWluaV9vYmplY3Rfd2Vha19yZWYKLWdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmCi0KLWdzdF9taW5pX29iamVjdF9sb2NrCi1nc3RfbWluaV9vYmplY3RfdW5sb2NrCi1nc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUKLWdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlCi0KLWdzdF9taW5pX29iamVjdF9jb3B5Ci0KLWdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEKLWdzdF9taW5pX29iamVjdF9nZXRfcWRhdGEKLWdzdF9taW5pX29iamVjdF9zdGVhbF9xZGF0YQotCi1nc3RfbWluaV9vYmplY3RfcmVwbGFjZQotZ3N0X21pbmlfb2JqZWN0X3Rha2UKLWdzdF9taW5pX29iamVjdF9zdGVhbAotCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9NSU5JX09CSkVDVAotR1NUX0lTX01JTklfT0JKRUNUX1RZUEUKLUdTVF9UWVBFX01JTklfT0JKRUNUX0ZMQUdTCi1HU1RfTUlOSV9PQkpFQ1RfQ0FTVAotR1NUX01JTklfT0JKRUNUX0NPTlNUX0NBU1QKLQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0b2JqZWN0PC9GSUxFPgotPFRJVExFPkdzdE9iamVjdDwvVElUTEU+Ci1Hc3RPYmplY3QKLUdzdE9iamVjdENsYXNzCi1Hc3RPYmplY3RGbGFncwotR1NUX09CSkVDVF9GTEFHUwotR1NUX09CSkVDVF9GTEFHX0lTX1NFVAotR1NUX09CSkVDVF9GTEFHX1NFVAotR1NUX09CSkVDVF9GTEFHX1VOU0VUCi1HU1RfT0JKRUNUX05BTUUKLUdTVF9PQkpFQ1RfUEFSRU5UCi1HU1RfT0JKRUNUX1JFRkNPVU5UCi1HU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFCi1HU1RfT0JKRUNUX0xPQ0sKLUdTVF9PQkpFQ1RfVFJZTE9DSwotR1NUX09CSkVDVF9VTkxPQ0sKLUdTVF9PQkpFQ1RfR0VUX0xPQ0sKLQotZ3N0X29iamVjdF9zZXRfbmFtZQotZ3N0X29iamVjdF9nZXRfbmFtZQotZ3N0X29iamVjdF9zZXRfcGFyZW50Ci1nc3Rfb2JqZWN0X2dldF9wYXJlbnQKLWdzdF9vYmplY3RfaGFzX2FzX3BhcmVudAotZ3N0X29iamVjdF91bnBhcmVudAotZ3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5Ci1nc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IKLWdzdF9vYmplY3RfY2hlY2tfdW5pcXVlbmVzcwotZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IKLWdzdF9vYmplY3RfaGFzX2FuY2VzdG9yCi1nc3Rfb2JqZWN0X3JlZgotZ3N0X29iamVjdF91bnJlZgotZ3N0X29iamVjdF9yZWZfc2luawotZ3N0X29iamVjdF9yZXBsYWNlCi1nc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZwotCi1nc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jCi1nc3Rfb2JqZWN0X3N5bmNfdmFsdWVzCi1nc3Rfb2JqZWN0X2hhc19hY3RpdmVfY29udHJvbF9iaW5kaW5ncwotZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nc19kaXNhYmxlZAotZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nX2Rpc2FibGVkCi1nc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcKLWdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfYmluZGluZwotZ3N0X29iamVjdF9yZW1vdmVfY29udHJvbF9iaW5kaW5nCi1nc3Rfb2JqZWN0X2dldF92YWx1ZQotZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkKLWdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkKLWdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZQotZ3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX09CSkVDVAotR1NUX0lTX09CSkVDVAotR1NUX09CSkVDVF9DTEFTUwotR1NUX0lTX09CSkVDVF9DTEFTUwotR1NUX09CSkVDVF9HRVRfQ0xBU1MKLUdTVF9UWVBFX09CSkVDVAotR1NUX1RZUEVfT0JKRUNUX0ZMQUdTCi1HU1RfT0JKRUNUX0NBU1QKLUdTVF9PQkpFQ1RfQ0xBU1NfQ0FTVAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9vYmplY3RfZ2V0X3R5cGUKLWdzdF9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdHBhZDwvRklMRT4KLTxUSVRMRT5Hc3RQYWQ8L1RJVExFPgotR3N0UGFkCi0KLUdzdFBhZERpcmVjdGlvbgotR3N0UGFkRmxhZ3MKLUdzdFBhZExpbmtSZXR1cm4KLWdzdF9wYWRfbGlua19nZXRfbmFtZQotR1NUX1BBRF9MSU5LX0ZBSUxFRAotR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwKLUdzdFBhZExpbmtDaGVjawotR3N0Rmxvd1JldHVybgotZ3N0X2Zsb3dfZ2V0X25hbWUKLWdzdF9mbG93X3RvX3F1YXJrCi1Hc3RQYWRNb2RlCi1nc3RfcGFkX21vZGVfZ2V0X25hbWUKLWdzdF9wYWRfc3RvcmVfc3RpY2t5X2V2ZW50Ci0KLTxTVUJTRUNUSU9OIEFwcGxpY2F0aW9uPgotZ3N0X3BhZF9nZXRfbmFtZQotZ3N0X3BhZF9nZXRfZGlyZWN0aW9uCi1nc3RfcGFkX2dldF9wYXJlbnQKLWdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50Ci1nc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUKLQotZ3N0X3BhZF9saW5rCi1nc3RfcGFkX2xpbmtfZnVsbAotZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nCi1nc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmdfZnVsbAotZ3N0X3BhZF91bmxpbmsKLWdzdF9wYWRfaXNfbGlua2VkCi1nc3RfcGFkX2Nhbl9saW5rCi0KLWdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcwotZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzCi1nc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcwotCi1nc3RfcGFkX2dldF9wZWVyCi1nc3RfcGFkX3VzZV9maXhlZF9jYXBzCi1nc3RfcGFkX2hhc19jdXJyZW50X2NhcHMKLQotZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50Ci1Hc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24KLWdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoCi0KLWdzdF9wYWRfaXNfYWN0aXZlCi1nc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuCi0KLTxTVUJTRUNUSU9OIHByb2Jlcz4KLUdzdFBhZFByb2JlUmV0dXJuCi1Hc3RQYWRQcm9iZVR5cGUKLQotR3N0UGFkUHJvYmVJbmZvCi1HU1RfUEFEX1BST0JFX0lORk9fVFlQRQotR1NUX1BBRF9QUk9CRV9JTkZPX0lECi1HU1RfUEFEX1BST0JFX0lORk9fREFUQQotCi1HU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSCi1HU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSX0xJU1QKLUdTVF9QQURfUFJPQkVfSU5GT19FVkVOVAotR1NUX1BBRF9QUk9CRV9JTkZPX1FVRVJZCi0KLWdzdF9wYWRfcHJvYmVfaW5mb19nZXRfYnVmZmVyCi1nc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2J1ZmZlcl9saXN0Ci1nc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2V2ZW50Ci1nc3RfcGFkX3Byb2JlX2luZm9fZ2V0X3F1ZXJ5Ci0KLUdTVF9QQURfUFJPQkVfSU5GT19PRkZTRVQKLUdTVF9QQURfUFJPQkVfSU5GT19TSVpFCi0KLUdTVF9QQURfUFJPQkVfSU5GT19GTE9XX1JFVFVSTgotCi1Hc3RQYWRQcm9iZUNhbGxiYWNrCi1nc3RfcGFkX2FkZF9wcm9iZQotZ3N0X3BhZF9yZW1vdmVfcHJvYmUKLQotZ3N0X3BhZF9pc19ibG9ja2VkCi1nc3RfcGFkX2lzX2Jsb2NraW5nCi0KLTxTVUJTRUNUSU9OIG9mZnNldD4KLWdzdF9wYWRfZ2V0X29mZnNldAotZ3N0X3BhZF9zZXRfb2Zmc2V0Ci0KLTxTVUJTRUNUSU9OIEVsZW1lbnQ+Ci1nc3RfcGFkX25ldwotZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZQotZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUKLQotZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24KLWdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uX2Z1bGwKLUdzdFBhZENoYWluRnVuY3Rpb24KLQotZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbgotZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxsCi1Hc3RQYWRDaGFpbkxpc3RGdW5jdGlvbgotCi1nc3RfcGFkX2dldF9yYW5nZQotZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24KLWdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uX2Z1bGwKLUdzdFBhZEdldFJhbmdlRnVuY3Rpb24KLQotZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24KLWdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uX2Z1bGwKLUdzdFBhZEV2ZW50RnVuY3Rpb24KLQotZ3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbgotZ3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbl9mdWxsCi1Hc3RQYWRFdmVudEZ1bGxGdW5jdGlvbgotCi1nc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uCi1nc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uX2Z1bGwKLUdzdFBhZExpbmtGdW5jdGlvbgotZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uCi1nc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb25fZnVsbAotR3N0UGFkVW5saW5rRnVuY3Rpb24KLQotZ3N0X3BhZF9wcm94eV9xdWVyeV9jYXBzCi1nc3RfcGFkX3Byb3h5X3F1ZXJ5X2FjY2VwdF9jYXBzCi0KLWdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uCi1nc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxsCi1Hc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uCi0KLWdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbgotZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uX2Z1bGwKLUdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uCi0KLWdzdF9wYWRfbmVlZHNfcmVjb25maWd1cmUKLWdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUKLWdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZQotCi1nc3RfcGFkX3B1c2gKLWdzdF9wYWRfcHVzaF9ldmVudAotZ3N0X3BhZF9wdXNoX2xpc3QKLWdzdF9wYWRfcHVsbF9yYW5nZQotZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlCi1nc3RfcGFkX3NlbmRfZXZlbnQKLWdzdF9wYWRfZXZlbnRfZGVmYXVsdAotCi1nc3RfcGFkX3F1ZXJ5Ci1nc3RfcGFkX3BlZXJfcXVlcnkKLQotZ3N0X3BhZF9xdWVyeV9kZWZhdWx0Ci0KLWdzdF9wYWRfcXVlcnlfcG9zaXRpb24KLWdzdF9wYWRfcXVlcnlfZHVyYXRpb24KLWdzdF9wYWRfcXVlcnlfY29udmVydAotZ3N0X3BhZF9xdWVyeV9hY2NlcHRfY2FwcwotZ3N0X3BhZF9xdWVyeV9jYXBzCi0KLWdzdF9wYWRfcGVlcl9xdWVyeV9wb3NpdGlvbgotZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uCi1nc3RfcGFkX3BlZXJfcXVlcnlfY29udmVydAotZ3N0X3BhZF9wZWVyX3F1ZXJ5X2FjY2VwdF9jYXBzCi1nc3RfcGFkX3BlZXJfcXVlcnlfY2FwcwotCi1nc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbgotZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb25fZnVsbAotR3N0UGFkUXVlcnlGdW5jdGlvbgotZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbgotZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbl9mdWxsCi1Hc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uCi1nc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MKLWdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0Ci0KLWdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZQotZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlCi0KLWdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZAotZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZgotZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50Zl92YWxpc3QKLQotZ3N0X3BhZF9nZXRfc3RyZWFtX2lkCi1nc3RfcGFkX2dldF9zdHJlYW0KLQotR3N0UGFkRm9yd2FyZEZ1bmN0aW9uCi1nc3RfcGFkX2ZvcndhcmQKLTxTVUJTRUNUSU9OIENvcmU+Ci1nc3RfcGFkX2NoYWluCi1nc3RfcGFkX2NoYWluX2xpc3QKLQotZ3N0X3BhZF9zdGFydF90YXNrCi1nc3RfcGFkX3BhdXNlX3Rhc2sKLWdzdF9wYWRfc3RvcF90YXNrCi0KLWdzdF9wYWRfc2V0X2FjdGl2ZQotCi1HU1RfUEFEX0dFVF9TVFJFQU1fTE9DSwotR1NUX1BBRF9TVFJFQU1fTE9DSwotR1NUX1BBRF9TVFJFQU1fVFJZTE9DSwotR1NUX1BBRF9TVFJFQU1fVU5MT0NLCi0KLUdTVF9QQURfTkFNRQotR1NUX1BBRF9QQVJFTlQKLUdTVF9QQURfRUxFTUVOVF9QUklWQVRFCi1HU1RfUEFEX1BBRF9URU1QTEFURQotR1NUX1BBRF9ESVJFQ1RJT04KLUdTVF9QQURfTEFTVF9GTE9XX1JFVFVSTgotCi1HU1RfUEFEX1RBU0sKLUdTVF9QQURfTU9ERQotR1NUX1BBRF9BQ1RJVkFURUZVTkMKLUdTVF9QQURfQUNUSVZBVEVNT0RFRlVOQwotR1NUX1BBRF9DSEFJTkZVTkMKLUdTVF9QQURfQ0hBSU5MSVNURlVOQwotR1NUX1BBRF9FVkVOVEZVTkMKLUdTVF9QQURfRVZFTlRGVUxMRlVOQwotR1NUX1BBRF9HRVRSQU5HRUZVTkMKLUdTVF9QQURfUVVFUllGVU5DCi1HU1RfUEFEX0lURVJJTlRMSU5LRlVOQwotR1NUX1BBRF9QRUVSCi1HU1RfUEFEX0xJTktGVU5DCi1HU1RfUEFEX1VOTElOS0ZVTkMKLQotR1NUX1BBRF9JU19MSU5LRUQKLUdTVF9QQURfSVNfU1JDCi1HU1RfUEFEX0lTX1NJTksKLUdTVF9QQURfSVNfQUNUSVZFCi1HU1RfUEFEX0lTX0JMT0NLRUQKLUdTVF9QQURfSVNfQkxPQ0tJTkcKLUdTVF9QQURfSVNfRkxVU0hJTkcKLUdTVF9QQURfU0VUX0ZMVVNISU5HCi1HU1RfUEFEX1VOU0VUX0ZMVVNISU5HCi1HU1RfUEFEX0lTX0VPUwotR1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRQotR1NUX1BBRF9IQVNfUEVORElOR19FVkVOVFMKLUdTVF9QQURfSVNfRklYRURfQ0FQUwotR1NUX1BBRF9ORUVEU19QQVJFTlQKLUdTVF9QQURfSVNfUFJPWFlfQ0FQUwotR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUwotR1NUX1BBRF9VTlNFVF9QUk9YWV9DQVBTCi1HU1RfUEFEX0lTX1BST1hZX0FMTE9DQVRJT04KLUdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04KLUdTVF9QQURfVU5TRVRfUFJPWFlfQUxMT0NBVElPTgotR1NUX1BBRF9TRVRfUFJPWFlfU0NIRURVTElORwotR1NUX1BBRF9VTlNFVF9QUk9YWV9TQ0hFRFVMSU5HCi1HU1RfUEFEX0lTX1BST1hZX1NDSEVEVUxJTkcKLUdTVF9QQURfSVNfQUNDRVBUX0lOVEVSU0VDVAotR1NUX1BBRF9TRVRfQUNDRVBUX0lOVEVSU0VDVAotR1NUX1BBRF9VTlNFVF9BQ0NFUFRfSU5URVJTRUNUCi1HU1RfUEFEX0lTX0FDQ0VQVF9URU1QTEFURQotR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFCi1HU1RfUEFEX1VOU0VUX0FDQ0VQVF9URU1QTEFURQotCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFBhZENsYXNzCi1Hc3RQYWRQcml2YXRlCi1HU1RfUEFECi1HU1RfSVNfUEFECi1HU1RfUEFEX0NMQVNTCi1HU1RfSVNfUEFEX0NMQVNTCi1HU1RfVFlQRV9QQUQKLUdTVF9UWVBFX1BBRF9ESVJFQ1RJT04KLUdTVF9UWVBFX1BBRF9GTEFHUwotR1NUX1RZUEVfUEFEX0xJTktfUkVUVVJOCi1HU1RfVFlQRV9QQURfTElOS19DSEVDSwotR1NUX1RZUEVfUEFEX1BSRVNFTkNFCi1HU1RfVFlQRV9QQURfTU9ERQotR1NUX1RZUEVfRkxPV19SRVRVUk4KLUdTVF9UWVBFX1BBRF9QUk9CRV9SRVRVUk4KLUdTVF9UWVBFX1BBRF9QUk9CRV9UWVBFCi0KLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcGFkX2dldF90eXBlCi1nc3RfcGFkX2RpcmVjdGlvbl9nZXRfdHlwZQotZ3N0X3BhZF9mbGFnc19nZXRfdHlwZQotZ3N0X3BhZF9saW5rX3JldHVybl9nZXRfdHlwZQotZ3N0X3BhZF9saW5rX2NoZWNrX2dldF90eXBlCi1nc3RfcGFkX3ByZXNlbmNlX2dldF90eXBlCi1nc3RfZmxvd19yZXR1cm5fZ2V0X3R5cGUKLWdzdF9wYWRfbW9kZV9nZXRfdHlwZQotZ3N0X3BhZF9wcm9iZV9yZXR1cm5fZ2V0X3R5cGUKLWdzdF9wYWRfcHJvYmVfdHlwZV9nZXRfdHlwZQotCi1HU1RfUEFEX0lTX0lOX0dFVENBUFMKLUdTVF9QQURfTU9ERV9BQ1RJVkFURQotR1NUX1BBRF9CTE9DS19CUk9BRENBU1QKLUdTVF9QQURfQkxPQ0tfR0VUX0NPTkQKLUdTVF9QQURfQkxPQ0tfU0lHTkFMCi1HU1RfUEFEX0JMT0NLX1dBSVQKLUdTVF9QQURfQ0FTVAotR1NUX1BBRF9ET19CVUZGRVJfU0lHTkFMUwotR1NUX1BBRF9ET19FVkVOVF9TSUdOQUxTCi1HU1RfUEFEX0lTX0lOX1NFVENBUFMKLQotR1NUX1BBRF9RVUVSWVRZUEVGVU5DCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RwYWR0ZW1wbGF0ZTwvRklMRT4KLTxUSVRMRT5Hc3RQYWRUZW1wbGF0ZTwvVElUTEU+Ci1Hc3RTdGF0aWNQYWRUZW1wbGF0ZQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUKLWdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldAotZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMKLUdzdFBhZFRlbXBsYXRlCi1Hc3RQYWRUZW1wbGF0ZUZsYWdzCi1Hc3RQYWRQcmVzZW5jZQotR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFCi1HU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTgotR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRQotR1NUX1BBRF9URU1QTEFURV9DQVBTCi1HU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVECi1nc3RfcGFkX3RlbXBsYXRlX25ldwotZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcwotCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFBhZFRlbXBsYXRlQ2xhc3MKLUdTVF9QQURfVEVNUExBVEUKLUdTVF9JU19QQURfVEVNUExBVEUKLUdTVF9QQURfVEVNUExBVEVfQ0xBU1MKLUdTVF9JU19QQURfVEVNUExBVEVfQ0xBU1MKLUdTVF9UWVBFX1BBRF9URU1QTEFURQotR1NUX1RZUEVfUEFEX1RFTVBMQVRFX0ZMQUdTCi1HU1RfVFlQRV9TVEFUSUNfQ0FQUwotR1NUX1RZUEVfU1RBVElDX1BBRF9URU1QTEFURQotCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQotZ3N0X3BhZF90ZW1wbGF0ZV9mbGFnc19nZXRfdHlwZQotZ3N0X3BhZF90ZW1wbGF0ZV9wYWRfY3JlYXRlZAotZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X3R5cGUKLWdzdF9zdGF0aWNfY2Fwc19nZXRfdHlwZQotCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RwYXJhbXNwZWM8L0ZJTEU+Ci08VElUTEU+R3N0UGFyYW1TcGVjPC9USVRMRT4KLQotR1NUX1BBUkFNX0NPTlRST0xMQUJMRQotR1NUX1BBUkFNX1VTRVJfU0hJRlQKLUdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRAotR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORwotR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkKLQotPFNVQlNFQ1RJT04gcGFyYW1zcGVjZnJhY3Rpb24+Ci1Hc3RQYXJhbVNwZWNGcmFjdGlvbgotZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb24KLQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfSVNfUEFSQU1fU1BFQ19GUkFDVElPTgotR1NUX1BBUkFNX1NQRUNfRlJBQ1RJT04KLUdTVF9UWVBFX1BBUkFNX0ZSQUNUSU9OCi1nc3RfcGFyYW1fc3BlY19mcmFjdGlvbl9nZXRfdHlwZQotCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RwYXJzZTwvRklMRT4KLTxUSVRMRT5Hc3RQYXJzZTwvVElUTEU+Ci1nc3RfcGFyc2VfZXJyb3JfcXVhcmsKLUdTVF9QQVJTRV9FUlJPUgotR3N0UGFyc2VFcnJvcgotR3N0UGFyc2VDb250ZXh0Ci1Hc3RQYXJzZUZsYWdzCi1nc3RfcGFyc2VfbGF1bmNoCi1nc3RfcGFyc2VfbGF1bmNoX2Z1bGwKLWdzdF9wYXJzZV9sYXVuY2h2Ci1nc3RfcGFyc2VfbGF1bmNodl9mdWxsCi1nc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24KLWdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsCi08U1VCU0VDVElPTj4KLWdzdF9wYXJzZV9jb250ZXh0X25ldwotZ3N0X3BhcnNlX2NvbnRleHRfZnJlZQotZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX1RZUEVfUEFSU0VfRVJST1IKLUdTVF9UWVBFX1BBUlNFX0ZMQUdTCi1HU1RfVFlQRV9QQVJTRV9DT05URVhUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X3R5cGUKLWdzdF9wYXJzZV9lcnJvcl9nZXRfdHlwZQotZ3N0X3BhcnNlX2ZsYWdzX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RwaXBlbGluZTwvRklMRT4KLTxUSVRMRT5Hc3RQaXBlbGluZTwvVElUTEU+Ci1Hc3RQaXBlbGluZQotR3N0UGlwZWxpbmVGbGFncwotCi1nc3RfcGlwZWxpbmVfbmV3Ci0KLWdzdF9waXBlbGluZV9nZXRfYnVzCi0KLWdzdF9waXBlbGluZV9zZXRfY2xvY2sKLWdzdF9waXBlbGluZV9nZXRfcGlwZWxpbmVfY2xvY2sKLWdzdF9waXBlbGluZV9nZXRfY2xvY2sKLQotZ3N0X3BpcGVsaW5lX3VzZV9jbG9jawotZ3N0X3BpcGVsaW5lX2F1dG9fY2xvY2sKLQotZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cwotZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cwotCi1nc3RfcGlwZWxpbmVfc2V0X2RlbGF5Ci1nc3RfcGlwZWxpbmVfZ2V0X2RlbGF5Ci0KLWdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeQotZ3N0X3BpcGVsaW5lX2dldF9sYXRlbmN5Ci0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UGlwZWxpbmVDbGFzcwotR1NUX1BJUEVMSU5FCi1HU1RfSVNfUElQRUxJTkUKLUdTVF9QSVBFTElORV9DTEFTUwotR1NUX0lTX1BJUEVMSU5FX0NMQVNTCi1HU1RfUElQRUxJTkVfR0VUX0NMQVNTCi1HU1RfVFlQRV9QSVBFTElORQotR1NUX1RZUEVfUElQRUxJTkVfRkxBR1MKLUdTVF9QSVBFTElORV9DQVNUCi08U1VCU0VDVElPTiBQcml2YXRlPgotR3N0UGlwZWxpbmVQcml2YXRlCi1nc3RfcGlwZWxpbmVfZ2V0X3R5cGUKLWdzdF9waXBlbGluZV9mbGFnc19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0cGx1Z2luPC9GSUxFPgotPFRJVExFPkdzdFBsdWdpbjwvVElUTEU+Ci1nc3RfcGx1Z2luX2Vycm9yX3F1YXJrCi1HU1RfUExVR0lOX0VSUk9SCi1Hc3RQbHVnaW5FcnJvcgotR3N0UGx1Z2luCi1Hc3RQbHVnaW5EZXNjCi1Hc3RQbHVnaW5Jbml0RnVuYwotR3N0UGx1Z2luSW5pdEZ1bGxGdW5jCi1HU1RfUExVR0lOX0RFRklORQotR1NUX1BMVUdJTl9TVEFUSUNfREVDTEFSRQotR1NUX1BMVUdJTl9TVEFUSUNfUkVHSVNURVIKLUdTVF9MSUNFTlNFX1VOS05PV04KLUdzdFBsdWdpbkZpbHRlcgotZ3N0X3BsdWdpbl9nZXRfbmFtZQotZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24KLWdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lCi1nc3RfcGx1Z2luX2dldF9saWNlbnNlCi1nc3RfcGx1Z2luX2dldF9wYWNrYWdlCi1nc3RfcGx1Z2luX2dldF9vcmlnaW4KLWdzdF9wbHVnaW5fZ2V0X3NvdXJjZQotZ3N0X3BsdWdpbl9nZXRfdmVyc2lvbgotZ3N0X3BsdWdpbl9nZXRfcmVsZWFzZV9kYXRlX3N0cmluZwotZ3N0X3BsdWdpbl9pc19sb2FkZWQKLWdzdF9wbHVnaW5fZ2V0X2NhY2hlX2RhdGEKLWdzdF9wbHVnaW5fc2V0X2NhY2hlX2RhdGEKLWdzdF9wbHVnaW5fbG9hZF9maWxlCi1nc3RfcGx1Z2luX2xvYWQKLWdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCi1nc3RfcGx1Z2luX2xpc3RfZnJlZQotZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMKLWdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljX2Z1bGwKLTxTVUJTRUNUSU9OPgotR3N0UGx1Z2luRmxhZ3MKLUdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncwotZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeQotZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UGx1Z2luQ2xhc3MKLUdTVF9QTFVHSU4KLUdTVF9QTFVHSU5fQ0FTVAotR1NUX1BMVUdJTl9DTEFTUwotR1NUX1BMVUdJTl9HRVRfQ0xBU1MKLUdTVF9UWVBFX1BMVUdJTgotR1NUX1RZUEVfUExVR0lOX0VSUk9SCi1HU1RfSVNfUExVR0lOCi1HU1RfSVNfUExVR0lOX0NMQVNTCi1HU1RfVFlQRV9QTFVHSU5fRkxBR1MKLUdTVF9UWVBFX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdTCi1Hc3RQbHVnaW5Qcml2YXRlCi1nc3RfcGx1Z2luX2RlcGVuZGVuY3lfZmxhZ3NfZ2V0X3R5cGUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcGx1Z2luX2dldF90eXBlCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3BsdWdpbl9lcnJvcl9nZXRfdHlwZQotZ3N0X3BsdWdpbl9mbGFnc19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0cGx1Z2luZmVhdHVyZTwvRklMRT4KLTxUSVRMRT5Hc3RQbHVnaW5GZWF0dXJlPC9USVRMRT4KLUdzdFBsdWdpbkZlYXR1cmUKLUdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIKLUdzdFJhbmsKLQotZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9yYW5rCi1nc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X25hbWUKLWdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcmFuawotZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lCi1nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbgotZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW5fbmFtZQotZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQKLWdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2NvcHkKLWdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUKLUdTVF9QTFVHSU5fRkVBVFVSRV9MSVNUX0RFQlVHCi1nc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbgotZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFBsdWdpbkZlYXR1cmVDbGFzcwotR1NUX1BMVUdJTl9GRUFUVVJFCi1HU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVAotR1NUX0lTX1BMVUdJTl9GRUFUVVJFCi1HU1RfUExVR0lOX0ZFQVRVUkVfQ0xBU1MKLUdTVF9JU19QTFVHSU5fRkVBVFVSRV9DTEFTUwotR1NUX1BMVUdJTl9GRUFUVVJFX0dFVF9DTEFTUwotR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUKLUdTVF9UWVBFX1JBTksKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3R5cGUKLWdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2RlYnVnCi1nc3RfcmFua19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0cG9sbDwvRklMRT4KLTxUSVRMRT5Hc3RQb2xsPC9USVRMRT4KLUdzdFBvbGwKLUdzdFBvbGxGRAotR1NUX1BPTExfRkRfSU5JVAotZ3N0X3BvbGxfYWRkX2ZkCi1nc3RfcG9sbF9mZF9jYW5fcmVhZAotZ3N0X3BvbGxfZmRfY2FuX3dyaXRlCi1nc3RfcG9sbF9mZF9jdGxfcmVhZAotZ3N0X3BvbGxfZmRfY3RsX3dyaXRlCi1nc3RfcG9sbF9mZF9oYXNfY2xvc2VkCi1nc3RfcG9sbF9mZF9oYXNfZXJyb3IKLWdzdF9wb2xsX2ZkX2lnbm9yZWQKLWdzdF9wb2xsX2ZkX2luaXQKLWdzdF9wb2xsX2ZyZWUKLWdzdF9wb2xsX25ldwotZ3N0X3BvbGxfbmV3X3RpbWVyCi1nc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkCi1nc3RfcG9sbF9yZW1vdmVfZmQKLWdzdF9wb2xsX3Jlc3RhcnQKLWdzdF9wb2xsX3NldF9jb250cm9sbGFibGUKLWdzdF9wb2xsX3NldF9mbHVzaGluZwotZ3N0X3BvbGxfd2FpdAotZ3N0X3BvbGxfcmVhZF9jb250cm9sCi1nc3RfcG9sbF93cml0ZV9jb250cm9sCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0cHJlc2V0PC9GSUxFPgotPFRJVExFPkdzdFByZXNldDwvVElUTEU+Ci1Hc3RQcmVzZXQKLUdzdFByZXNldEludGVyZmFjZQotZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzCi1nc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lcwotZ3N0X3ByZXNldF9sb2FkX3ByZXNldAotZ3N0X3ByZXNldF9zYXZlX3ByZXNldAotZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0Ci1nc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQKLWdzdF9wcmVzZXRfc2V0X21ldGEKLWdzdF9wcmVzZXRfZ2V0X21ldGEKLWdzdF9wcmVzZXRfc2V0X2FwcF9kaXIKLWdzdF9wcmVzZXRfZ2V0X2FwcF9kaXIKLWdzdF9wcmVzZXRfaXNfZWRpdGFibGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX1BSRVNFVAotR1NUX0lTX1BSRVNFVAotR1NUX1RZUEVfUFJFU0VUCi1HU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UKLWdzdF9wcmVzZXRfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3Rwcm90ZWN0aW9uPC9GSUxFPgotPFRJVExFPkdzdFByb3RlY3Rpb25NZXRhPC9USVRMRT4KLTxJTkNMVURFPmdzdC9nc3Rwcm90ZWN0aW9uLmg8L0lOQ0xVREU+Ci1Hc3RQcm90ZWN0aW9uTWV0YQotZ3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhCi1nc3RfYnVmZmVyX2dldF9wcm90ZWN0aW9uX21ldGEKLWdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW0KLUdTVF9QUk9URUNUSU9OX1NZU1RFTV9JRF9DQVBTX0ZJRUxECi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9QUk9URUNUSU9OX01FVEFfQVBJX1RZUEUKLUdTVF9QUk9URUNUSU9OX01FVEFfSU5GTwotZ3N0X3Byb3RlY3Rpb25fbWV0YV9nZXRfaW5mbwotZ3N0X3Byb3RlY3Rpb25fbWV0YV9hcGlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RxdWVyeTwvRklMRT4KLTxUSVRMRT5Hc3RRdWVyeTwvVElUTEU+Ci1Hc3RRdWVyeQotCi1Hc3RRdWVyeVR5cGVGbGFncwotR1NUX1FVRVJZX1RZUEVfQk9USAotR1NUX1FVRVJZX01BS0VfVFlQRQotCi1Hc3RRdWVyeVR5cGUKLQotR1NUX1FVRVJZX1RZUEUKLUdTVF9RVUVSWV9UWVBFX05BTUUKLQotR1NUX1FVRVJZX0lTX1VQU1RSRUFNCi1HU1RfUVVFUllfSVNfRE9XTlNUUkVBTQotR1NUX1FVRVJZX0lTX1NFUklBTElaRUQKLQotZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2ZsYWdzCi1nc3RfcXVlcnlfdHlwZV9nZXRfbmFtZQotZ3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmsKLQotZ3N0X3F1ZXJ5X3JlZgotZ3N0X3F1ZXJ5X3VucmVmCi1nc3RfcXVlcnlfY29weQotZ3N0X3F1ZXJ5X21ha2Vfd3JpdGFibGUKLWdzdF9xdWVyeV9pc193cml0YWJsZQotZ3N0X3F1ZXJ5X3JlcGxhY2UKLWdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmUKLQotZ3N0X3F1ZXJ5X25ld19jdXN0b20KLWdzdF9xdWVyeV9nZXRfc3RydWN0dXJlCi0KLWdzdF9xdWVyeV9uZXdfY29udmVydAotZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0Ci1nc3RfcXVlcnlfcGFyc2VfY29udmVydAotCi1nc3RfcXVlcnlfbmV3X3Bvc2l0aW9uCi1nc3RfcXVlcnlfc2V0X3Bvc2l0aW9uCi1nc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24KLQotZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbgotZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbgotZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uCi0KLWdzdF9xdWVyeV9uZXdfbGF0ZW5jeQotZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kKLWdzdF9xdWVyeV9zZXRfbGF0ZW5jeQotCi1nc3RfcXVlcnlfbmV3X3NlZWtpbmcKLWdzdF9xdWVyeV9zZXRfc2Vla2luZwotZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcKLQotZ3N0X3F1ZXJ5X25ld19mb3JtYXRzCi1nc3RfcXVlcnlfc2V0X2Zvcm1hdHMKLWdzdF9xdWVyeV9zZXRfZm9ybWF0c3YKLWdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHMKLWdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0Ci0KLWdzdF9xdWVyeV9uZXdfc2VnbWVudAotZ3N0X3F1ZXJ5X3NldF9zZWdtZW50Ci1nc3RfcXVlcnlfcGFyc2Vfc2VnbWVudAotCi1nc3RfcXVlcnlfbmV3X2NhcHMKLWdzdF9xdWVyeV9wYXJzZV9jYXBzCi1nc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0Ci1nc3RfcXVlcnlfcGFyc2VfY2Fwc19yZXN1bHQKLQotZ3N0X3F1ZXJ5X25ld19hY2NlcHRfY2FwcwotZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzCi1nc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdAotZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdAotCi1Hc3RCdWZmZXJpbmdNb2RlCi1nc3RfcXVlcnlfbmV3X2J1ZmZlcmluZwotZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudAotZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50Ci1nc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0cwotZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cwotZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2UKLWdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UKLWdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlCi1nc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlcwotZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UKLQotZ3N0X3F1ZXJ5X25ld191cmkKLWdzdF9xdWVyeV9wYXJzZV91cmkKLWdzdF9xdWVyeV9zZXRfdXJpCi1nc3RfcXVlcnlfcGFyc2VfdXJpX3JlZGlyZWN0aW9uCi1nc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbgotZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnQKLWdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uX3Blcm1hbmVudAotCi1nc3RfcXVlcnlfbmV3X2FsbG9jYXRpb24KLWdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uCi0KLWdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wb29sCi1nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29scwotZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2wKLWdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcG9vbAotZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9wb29sCi0KLWdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wYXJhbQotZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcGFyYW1zCi1nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW0KLWdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcGFyYW0KLWdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcGFyYW0KLQotZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEKLWdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzCi1nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWV0YQotZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9tZXRhCi1nc3RfcXVlcnlfZmluZF9hbGxvY2F0aW9uX21ldGEKLQotR3N0U2NoZWR1bGluZ0ZsYWdzCi1nc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcKLWdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nCi1nc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcKLWdzdF9xdWVyeV9hZGRfc2NoZWR1bGluZ19tb2RlCi1nc3RfcXVlcnlfZ2V0X25fc2NoZWR1bGluZ19tb2RlcwotZ3N0X3F1ZXJ5X3BhcnNlX250aF9zY2hlZHVsaW5nX21vZGUKLWdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlCi1nc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzCi0KLWdzdF9xdWVyeV9uZXdfZHJhaW4KLQotZ3N0X3F1ZXJ5X25ld19jb250ZXh0Ci1nc3RfcXVlcnlfc2V0X2NvbnRleHQKLWdzdF9xdWVyeV9wYXJzZV9jb250ZXh0Ci1nc3RfcXVlcnlfcGFyc2VfY29udGV4dF90eXBlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFF1ZXJ5Q2xhc3MKLUdTVF9RVUVSWQotR1NUX1FVRVJZX0NBU1QKLUdTVF9JU19RVUVSWQotR1NUX1FVRVJZX0NMQVNTCi1HU1RfSVNfUVVFUllfQ0xBU1MKLUdTVF9UWVBFX1FVRVJZCi1HU1RfVFlQRV9RVUVSWV9UWVBFCi1HU1RfUVVFUllfR0VUX0NMQVNTCi1HU1RfVFlQRV9RVUVSWV9UWVBFX0ZMQUdTCi1nc3RfcXVlcnlfdHlwZV9mbGFnc19nZXRfdHlwZQotR1NUX1RZUEVfQlVGRkVSSU5HX01PREUKLWdzdF9idWZmZXJpbmdfbW9kZV9nZXRfdHlwZQotR1NUX1RZUEVfU0NIRURVTElOR19GTEFHUwotZ3N0X3NjaGVkdWxpbmdfZmxhZ3NfZ2V0X3R5cGUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1HU1RfUVVFUllfTlVNX1NISUZUCi1nc3RfcXVlcnlfZ2V0X3R5cGUKLWdzdF9xdWVyeV90eXBlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RyZWdpc3RyeTwvRklMRT4KLTxUSVRMRT5Hc3RSZWdpc3RyeTwvVElUTEU+Ci1Hc3RSZWdpc3RyeQotZ3N0X3JlZ2lzdHJ5X2dldAotZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3QKLWdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZQotZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luCi1nc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0Ci1nc3RfcmVnaXN0cnlfYWRkX3BsdWdpbgotZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4KLWdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyCi1nc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIKLWdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbgotZ3N0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZQotZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlCi1nc3RfcmVnaXN0cnlfYWRkX3BhdGgKLWdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0Ci1nc3RfcmVnaXN0cnlfc2Nhbl9wYXRoCi1nc3RfcmVnaXN0cnlfbG9va3VwCi1nc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmUKLWdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZQotZ3N0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSZWdpc3RyeUNsYXNzCi1HU1RfUkVHSVNUUlkKLUdTVF9JU19SRUdJU1RSWQotR1NUX1JFR0lTVFJZX0NMQVNTCi1HU1RfSVNfUkVHSVNUUllfQ0xBU1MKLUdTVF9SRUdJU1RSWV9HRVRfQ0xBU1MKLUdTVF9UWVBFX1JFR0lTVFJZCi08U1VCU0VDVElPTiBQcml2YXRlPgotR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9MRU4KLUdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfU1RSCi1HU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fU1RSCi1HU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOCi1nc3RfcmVnaXN0cnlfZ2V0X3R5cGUKLUdzdFJlZ2lzdHJ5UHJpdmF0ZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0c2VnbWVudDwvRklMRT4KLTxUSVRMRT5Hc3RTZWdtZW50PC9USVRMRT4KLUdzdFNlZ21lbnQKLUdzdFNlZ21lbnRGbGFncwotZ3N0X3NlZ21lbnRfY2xpcAotZ3N0X3NlZ21lbnRfaW5pdAotZ3N0X3NlZ21lbnRfbmV3Ci1nc3Rfc2VnbWVudF9jb3B5Ci1nc3Rfc2VnbWVudF9mcmVlCi1nc3Rfc2VnbWVudF9kb19zZWVrCi1nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lCi1nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lX2Z1bGwKLWdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZQotZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lX2Z1bGwKLWdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lCi1nc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxsCi1nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZQotZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWVfZnVsbAotZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24KLWdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUKLWdzdF9zZWdtZW50X2NvcHlfaW50bwotZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZQotZ3N0X3NlZ21lbnRfaXNfZXF1YWwKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX1RZUEVfU0VHTUVOVAotR1NUX1RZUEVfU0VHTUVOVF9GTEFHUwotZ3N0X3NlZ21lbnRfZ2V0X3R5cGUKLWdzdF9zZWdtZW50X2ZsYWdzX2dldF90eXBlCi08U1VCU0VDVElPTiBQcml2YXRlPgotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHN0cmVhbXM8L0ZJTEU+Ci08VElUTEU+R3N0U3RyZWFtPC9USVRMRT4KLUdzdFN0cmVhbQotR3N0U3RyZWFtQ2xhc3MKLUdzdFN0cmVhbVR5cGUKLWdzdF9zdHJlYW1fbmV3Ci1nc3Rfc3RyZWFtX2dldF9jYXBzCi1nc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3MKLWdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZAotZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUKLWdzdF9zdHJlYW1fZ2V0X3RhZ3MKLWdzdF9zdHJlYW1fc2V0X2NhcHMKLWdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFncwotZ3N0X3N0cmVhbV9zZXRfc3RyZWFtX3R5cGUKLWdzdF9zdHJlYW1fc2V0X3RhZ3MKLWdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfSVNfU1RSRUFNCi1HU1RfSVNfU1RSRUFNX0NMQVNTCi1HU1RfU1RSRUFNCi1HU1RfU1RSRUFNX0NBU1QKLUdTVF9TVFJFQU1fQ0xBU1MKLUdTVF9TVFJFQU1fR0VUX0NMQVNTCi1HU1RfVFlQRV9TVFJFQU0KLUdTVF9UWVBFX1NUUkVBTV9UWVBFCi1nc3Rfc3RyZWFtX2dldF90eXBlCi1nc3Rfc3RyZWFtX3R5cGVfZ2V0X3R5cGUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1Hc3RTdHJlYW1Qcml2YXRlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0c3RyZWFtY29sbGVjdGlvbjwvRklMRT4KLTxUSVRMRT5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9USVRMRT4KLUdzdFN0cmVhbUNvbGxlY3Rpb24KLUdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzcwotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ldwotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0KLWdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfdXBzdHJlYW1faWQKLWdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZQotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF90eXBlCi1HU1RfSVNfU1RSRUFNX0NPTExFQ1RJT04KLUdTVF9JU19TVFJFQU1fQ09MTEVDVElPTl9DTEFTUwotR1NUX1NUUkVBTV9DT0xMRUNUSU9OCi1HU1RfU1RSRUFNX0NPTExFQ1RJT05fQ0FTVAotR1NUX1NUUkVBTV9DT0xMRUNUSU9OX0NMQVNTCi1HU1RfU1RSRUFNX0NPTExFQ1RJT05fR0VUX0NMQVNTCi1HU1RfVFlQRV9TVFJFQU1fQ09MTEVDVElPTgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLUdzdFN0cmVhbUNvbGxlY3Rpb25Qcml2YXRlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0c3RydWN0dXJlPC9GSUxFPgotPFRJVExFPkdzdFN0cnVjdHVyZTwvVElUTEU+Ci1Hc3RTdHJ1Y3R1cmUKLUdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jCi1Hc3RTdHJ1Y3R1cmVNYXBGdW5jCi1Hc3RTdHJ1Y3R1cmVGaWx0ZXJNYXBGdW5jCi1nc3Rfc3RydWN0dXJlX25ld19lbXB0eQotZ3N0X3N0cnVjdHVyZV9uZXdfaWRfZW1wdHkKLWdzdF9zdHJ1Y3R1cmVfbmV3Ci1nc3Rfc3RydWN0dXJlX25ld192YWxpc3QKLWdzdF9zdHJ1Y3R1cmVfbmV3X2lkCi1nc3Rfc3RydWN0dXJlX25ld19mcm9tX3N0cmluZwotZ3N0X3N0cnVjdHVyZV9jb3B5Ci1nc3Rfc3RydWN0dXJlX2ZyZWUKLWdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUKLWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUKLWdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUKLWdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQKLWdzdF9zdHJ1Y3R1cmVfaWRfZ2V0Ci1nc3Rfc3RydWN0dXJlX2lkX2dldF92YWxpc3QKLWdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlCi1nc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZQotZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlCi1nc3Rfc3RydWN0dXJlX2dldAotZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0Ci1nc3Rfc3RydWN0dXJlX2dldF92YWx1ZQotZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUKLWdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZQotZ3N0X3N0cnVjdHVyZV9zZXQKLWdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdAotZ3N0X3N0cnVjdHVyZV9pZF9zZXQKLWdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdAotZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQKLWdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcwotZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdAotZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkcwotZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGRfdHlwZQotZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcwotZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQKLWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkCi1nc3Rfc3RydWN0dXJlX2lzX2VxdWFsCi1nc3Rfc3RydWN0dXJlX2lzX3N1YnNldAotZ3N0X3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0Ci1nc3Rfc3RydWN0dXJlX2ludGVyc2VjdAotZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGQKLWdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkCi1nc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuCi1nc3Rfc3RydWN0dXJlX2dldF9pbnQKLWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQKLWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDY0Ci1nc3Rfc3RydWN0dXJlX2dldF91aW50NjQKLWdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZQotZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nCi1nc3Rfc3RydWN0dXJlX2dldF9kYXRlCi1nc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUKLWdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUKLWdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW0KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uCi1nc3Rfc3RydWN0dXJlX2ZvcmVhY2gKLWdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlCi1nc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlCi1nc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lCi1nc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQKLWdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nCi1nc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nCi1nc3Rfc3RydWN0dXJlX2ZpeGF0ZQotZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQKLWdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50Ci1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2RvdWJsZQotZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbgotZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9TVFJVQ1RVUkUKLUdTVF9TVFJVQ1RVUkVfQ0FTVAotR1NUX0lTX1NUUlVDVFVSRQotR1NUX1RZUEVfU1RSVUNUVVJFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3N0cnVjdHVyZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHN5c3RlbWNsb2NrPC9GSUxFPgotPFRJVExFPkdzdFN5c3RlbUNsb2NrPC9USVRMRT4KLUdzdENsb2NrVHlwZQotR3N0U3lzdGVtQ2xvY2sKLWdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluCi1nc3Rfc3lzdGVtX2Nsb2NrX3NldF9kZWZhdWx0Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFN5c3RlbUNsb2NrQ2xhc3MKLUdzdFN5c3RlbUNsb2NrUHJpdmF0ZQotR1NUX1NZU1RFTV9DTE9DSwotR1NUX0lTX1NZU1RFTV9DTE9DSwotZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZQotR1NUX1NZU1RFTV9DTE9DS19DTEFTUwotR1NUX0lTX1NZU1RFTV9DTE9DS19DTEFTUwotR1NUX1NZU1RFTV9DTE9DS19HRVRfQ0xBU1MKLUdTVF9UWVBFX1NZU1RFTV9DTE9DSwotR1NUX1NZU1RFTV9DTE9DS19DQVNUCi1HU1RfVFlQRV9DTE9DS19UWVBFCi1nc3RfY2xvY2tfdHlwZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRhZ2xpc3Q8L0ZJTEU+Ci08VElUTEU+R3N0VGFnTGlzdDwvVElUTEU+Ci1Hc3RUYWdMaXN0Ci1Hc3RUYWdNZXJnZU1vZGUKLUdzdFRhZ0ZsYWcKLUdzdFRhZ0ZvcmVhY2hGdW5jCi1Hc3RUYWdNZXJnZUZ1bmMKLQotR3N0VGFnU2NvcGUKLQotR1NUX1RBR19USVRMRQotR1NUX1RBR19USVRMRV9TT1JUTkFNRQotR1NUX1RBR19BUlRJU1QKLUdTVF9UQUdfQVJUSVNUX1NPUlROQU1FCi1HU1RfVEFHX0FMQlVNCi1HU1RfVEFHX0FMQlVNX1NPUlROQU1FCi1HU1RfVEFHX0FMQlVNX0FSVElTVAotR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUUKLUdTVF9UQUdfREFURQotR1NUX1RBR19EQVRFX1RJTUUKLUdTVF9UQUdfR0VOUkUKLUdTVF9UQUdfQ09NTUVOVAotR1NUX1RBR19FWFRFTkRFRF9DT01NRU5UCi1HU1RfVEFHX1RSQUNLX05VTUJFUgotR1NUX1RBR19UUkFDS19DT1VOVAotR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSCi1HU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVAotR1NUX1RBR19MT0NBVElPTgotR1NUX1RBR19IT01FUEFHRQotR1NUX1RBR19ERVNDUklQVElPTgotR1NUX1RBR19WRVJTSU9OCi1HU1RfVEFHX0lTUkMKLUdTVF9UQUdfT1JHQU5JWkFUSU9OCi1HU1RfVEFHX0NPUFlSSUdIVAotR1NUX1RBR19DT1BZUklHSFRfVVJJCi1HU1RfVEFHX0VOQ09ERURfQlkKLUdTVF9UQUdfQ09NUE9TRVIKLUdTVF9UQUdfQ09OVEFDVAotR1NUX1RBR19MSUNFTlNFCi1HU1RfVEFHX0xJQ0VOU0VfVVJJCi1HU1RfVEFHX1BFUkZPUk1FUgotR1NUX1RBR19EVVJBVElPTgotR1NUX1RBR19DT0RFQwotR1NUX1RBR19WSURFT19DT0RFQwotR1NUX1RBR19BVURJT19DT0RFQwotR1NUX1RBR19TVUJUSVRMRV9DT0RFQwotR1NUX1RBR19DT05UQUlORVJfRk9STUFUCi1HU1RfVEFHX0JJVFJBVEUKLUdTVF9UQUdfTk9NSU5BTF9CSVRSQVRFCi1HU1RfVEFHX01JTklNVU1fQklUUkFURQotR1NUX1RBR19NQVhJTVVNX0JJVFJBVEUKLUdTVF9UQUdfU0VSSUFMCi1HU1RfVEFHX0VOQ09ERVIKLUdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OCi1HU1RfVEFHX1RSQUNLX0dBSU4KLUdTVF9UQUdfVFJBQ0tfUEVBSwotR1NUX1RBR19BTEJVTV9HQUlOCi1HU1RfVEFHX0FMQlVNX1BFQUsKLUdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMCi1HU1RfVEFHX0xBTkdVQUdFX0NPREUKLUdTVF9UQUdfTEFOR1VBR0VfTkFNRQotR1NUX1RBR19JTUFHRQotR1NUX1RBR19QUkVWSUVXX0lNQUdFCi1HU1RfVEFHX0FUVEFDSE1FTlQKLUdTVF9UQUdfQkVBVFNfUEVSX01JTlVURQotR1NUX1RBR19LRVlXT1JEUwotR1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRQotR1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREUKLUdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xPTkdJVFVERQotR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OCi1HU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZCi1HU1RfVEFHX0dFT19MT0NBVElPTl9DT1VOVFJZCi1HU1RfVEFHX0dFT19MT0NBVElPTl9TVUJMT0NBVElPTgotR1NUX1RBR19HRU9fTE9DQVRJT05fSE9SSVpPTlRBTF9FUlJPUgotR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OCi1HU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRAotR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04KLUdTVF9UQUdfU0hPV19OQU1FCi1HU1RfVEFHX1NIT1dfU09SVE5BTUUKLUdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUgotR1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVIKLUdTVF9UQUdfTFlSSUNTCi1HU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FCi1HU1RfVEFHX0dST1VQSU5HCi1HU1RfVEFHX1VTRVJfUkFUSU5HCi1HU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVIKLUdTVF9UQUdfREVWSUNFX01PREVMCi1HU1RfVEFHX0FQUExJQ0FUSU9OX05BTUUKLUdTVF9UQUdfQVBQTElDQVRJT05fREFUQQotR1NUX1RBR19JTUFHRV9PUklFTlRBVElPTgotR1NUX1RBR19QVUJMSVNIRVIKLUdTVF9UQUdfSU5URVJQUkVURURfQlkKLUdTVF9UQUdfTUlESV9CQVNFX05PVEUKLUdTVF9UQUdfUFJJVkFURV9EQVRBCi0KLWdzdF90YWdfcmVnaXN0ZXIKLWdzdF90YWdfcmVnaXN0ZXJfc3RhdGljCi1nc3RfdGFnX21lcmdlX3VzZV9maXJzdAotZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEKLWdzdF90YWdfZXhpc3RzCi1nc3RfdGFnX2dldF90eXBlCi1nc3RfdGFnX2dldF9uaWNrCi1nc3RfdGFnX2dldF9kZXNjcmlwdGlvbgotZ3N0X3RhZ19nZXRfZmxhZwotZ3N0X3RhZ19pc19maXhlZAotZ3N0X3RhZ19saXN0X25ldwotZ3N0X3RhZ19saXN0X25ld19lbXB0eQotZ3N0X3RhZ19saXN0X25ld192YWxpc3QKLWdzdF90YWdfbGlzdF9uZXdfZnJvbV9zdHJpbmcKLWdzdF90YWdfbGlzdF9mcmVlCi1nc3RfdGFnX2xpc3RfZ2V0X3Njb3BlCi1nc3RfdGFnX2xpc3Rfc2V0X3Njb3BlCi1nc3RfdGFnX2xpc3RfdG9fc3RyaW5nCi1nc3RfdGFnX2xpc3RfaXNfZW1wdHkKLWdzdF90YWdfbGlzdF9pc19lcXVhbAotZ3N0X3RhZ19saXN0X2NvcHkKLWdzdF90YWdfbGlzdF9yZWYKLWdzdF90YWdfbGlzdF91bnJlZgotZ3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlCi1nc3RfdGFnX2xpc3RfbWFrZV93cml0YWJsZQotZ3N0X3RhZ19saXN0X2luc2VydAotZ3N0X3RhZ19saXN0X21lcmdlCi1nc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplCi1nc3RfdGFnX2xpc3Rfbl90YWdzCi1nc3RfdGFnX2xpc3RfbnRoX3RhZ19uYW1lCi1nc3RfdGFnX2xpc3RfYWRkCi1nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlCi1nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcwotZ3N0X3RhZ19saXN0X2FkZF92YWxpc3QKLWdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcwotZ3N0X3RhZ19saXN0X3JlbW92ZV90YWcKLWdzdF90YWdfbGlzdF9mb3JlYWNoCi1nc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4Ci1nc3RfdGFnX2xpc3RfY29weV92YWx1ZQotZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuCi1nc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW5faW5kZXgKLWdzdF90YWdfbGlzdF9nZXRfaW50Ci1nc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleAotZ3N0X3RhZ19saXN0X2dldF91aW50Ci1nc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXgKLWdzdF90YWdfbGlzdF9nZXRfaW50NjQKLWdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXgKLWdzdF90YWdfbGlzdF9nZXRfdWludDY0Ci1nc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NF9pbmRleAotZ3N0X3RhZ19saXN0X2dldF9mbG9hdAotZ3N0X3RhZ19saXN0X2dldF9mbG9hdF9pbmRleAotZ3N0X3RhZ19saXN0X2dldF9kb3VibGUKLWdzdF90YWdfbGlzdF9nZXRfZG91YmxlX2luZGV4Ci1nc3RfdGFnX2xpc3RfZ2V0X3N0cmluZwotZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXgKLWdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleAotZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyCi1nc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXJfaW5kZXgKLWdzdF90YWdfbGlzdF9nZXRfZGF0ZQotZ3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4Ci1nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZQotZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXgKLWdzdF90YWdfbGlzdF9nZXRfc2FtcGxlCi1nc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZV9pbmRleAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfVEFHX0xJU1QKLUdTVF9JU19UQUdfTElTVAotR1NUX1RBR19GTEFHX0lTX1ZBTElECi1HU1RfVEFHX01PREVfSVNfVkFMSUQKLUdTVF9UWVBFX1RBR19MSVNUCi1HU1RfVFlQRV9UQUdfRkxBRwotR1NUX1RZUEVfVEFHX01FUkdFX01PREUKLUdTVF9UWVBFX1RBR19TQ09QRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90YWdfbGlzdF9nZXRfdHlwZQotZ3N0X3RhZ19mbGFnX2dldF90eXBlCi1nc3RfdGFnX21lcmdlX21vZGVfZ2V0X3R5cGUKLWdzdF90YWdfc2NvcGVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRhZ3NldHRlcjwvRklMRT4KLTxUSVRMRT5Hc3RUYWdTZXR0ZXI8L1RJVExFPgotR3N0VGFnU2V0dGVyCi1Hc3RUYWdTZXR0ZXJJbnRlcmZhY2UKLWdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3MKLWdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MKLWdzdF90YWdfc2V0dGVyX2FkZF90YWdzCi1nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlCi1nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlcwotZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3QKLWdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcwotZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0Ci1nc3RfdGFnX3NldHRlcl9zZXRfdGFnX21lcmdlX21vZGUKLWdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfVEFHX1NFVFRFUgotR1NUX0lTX1RBR19TRVRURVIKLUdTVF9UQUdfU0VUVEVSX0dFVF9JTlRFUkZBQ0UKLUdTVF9UWVBFX1RBR19TRVRURVIKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdGFnX3NldHRlcl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRhc2twb29sPC9GSUxFPgotPFRJVExFPkdzdFRhc2tQb29sPC9USVRMRT4KLUdzdFRhc2tQb29sCi1Hc3RUYXNrUG9vbENsYXNzCi1Hc3RUYXNrUG9vbEZ1bmN0aW9uCi1nc3RfdGFza19wb29sX25ldwotZ3N0X3Rhc2tfcG9vbF9wcmVwYXJlCi1nc3RfdGFza19wb29sX3B1c2gKLWdzdF90YXNrX3Bvb2xfam9pbgotZ3N0X3Rhc2tfcG9vbF9jbGVhbnVwCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9JU19UQVNLX1BPT0wKLUdTVF9JU19UQVNLX1BPT0xfQ0xBU1MKLUdTVF9UQVNLX1BPT0wKLUdTVF9UQVNLX1BPT0xfQ0FTVAotR1NUX1RBU0tfUE9PTF9DTEFTUwotR1NUX1RBU0tfUE9PTF9HRVRfQ0xBU1MKLUdTVF9UWVBFX1RBU0tfUE9PTAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90YXNrX3Bvb2xfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRhc2s8L0ZJTEU+Ci08VElUTEU+R3N0VGFzazwvVElUTEU+Ci1Hc3RUYXNrCi1Hc3RUYXNrRnVuY3Rpb24KLUdzdFRhc2tTdGF0ZQotCi1HU1RfVEFTS19CUk9BRENBU1QKLUdTVF9UQVNLX0dFVF9DT05ECi1HU1RfVEFTS19HRVRfTE9DSwotR1NUX1RBU0tfU0lHTkFMCi1HU1RfVEFTS19TVEFURQotR1NUX1RBU0tfV0FJVAotCi1nc3RfdGFza19uZXcKLWdzdF90YXNrX3NldF9sb2NrCi0KLWdzdF90YXNrX3NldF9wb29sCi1nc3RfdGFza19nZXRfcG9vbAotCi1Hc3RUYXNrVGhyZWFkRnVuYwotZ3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrCi1nc3RfdGFza19zZXRfbGVhdmVfY2FsbGJhY2sKLQotZ3N0X3Rhc2tfZ2V0X3N0YXRlCi1nc3RfdGFza19zZXRfc3RhdGUKLWdzdF90YXNrX3BhdXNlCi1nc3RfdGFza19zdGFydAotZ3N0X3Rhc2tfc3RvcAotZ3N0X3Rhc2tfam9pbgotCi1nc3RfdGFza19jbGVhbnVwX2FsbAotCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFRhc2tDbGFzcwotR3N0VGFza1ByaXZhdGUKLUdTVF9UQVNLCi1HU1RfSVNfVEFTSwotR1NUX1RZUEVfVEFTSwotR1NUX1RBU0tfQ0xBU1MKLUdTVF9JU19UQVNLX0NMQVNTCi1HU1RfVEFTS19HRVRfQ0xBU1MKLUdTVF9UQVNLX0NBU1QKLUdTVF9UWVBFX1RBU0tfU1RBVEUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdGFza19nZXRfdHlwZQotZ3N0X3Rhc2tfc3RhdGVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRvYzwvRklMRT4KLTxUSVRMRT5Hc3RUb2M8L1RJVExFPgotR3N0VG9jCi1Hc3RUb2NTY29wZQotR3N0VG9jRW50cnkKLUdzdFRvY0VudHJ5VHlwZQotR3N0VG9jTG9vcFR5cGUKLWdzdF90b2NfbmV3Ci1nc3RfdG9jX3JlZgotZ3N0X3RvY191bnJlZgotZ3N0X3RvY19jb3B5Ci1nc3RfdG9jX21ha2Vfd3JpdGFibGUKLWdzdF90b2NfZ2V0X3Njb3BlCi1nc3RfdG9jX2dldF9lbnRyaWVzCi1nc3RfdG9jX2FwcGVuZF9lbnRyeQotZ3N0X3RvY19nZXRfdGFncwotZ3N0X3RvY19tZXJnZV90YWdzCi1nc3RfdG9jX3NldF90YWdzCi1nc3RfdG9jX2R1bXAKLWdzdF90b2NfZW50cnlfbmV3Ci1nc3RfdG9jX2VudHJ5X3JlZgotZ3N0X3RvY19lbnRyeV91bnJlZgotZ3N0X3RvY19lbnRyeV9jb3B5Ci1nc3RfdG9jX2VudHJ5X21ha2Vfd3JpdGFibGUKLWdzdF90b2NfZmluZF9lbnRyeQotZ3N0X3RvY19lbnRyeV9nZXRfdG9jCi1nc3RfdG9jX2VudHJ5X2dldF91aWQKLWdzdF90b2NfZW50cnlfZ2V0X3BhcmVudAotZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMKLWdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyeQotZ3N0X3RvY19lbnRyeV9nZXRfbG9vcAotZ3N0X3RvY19lbnRyeV9zZXRfbG9vcAotZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcwotZ3N0X3RvY19lbnRyeV9zZXRfc3RhcnRfc3RvcF90aW1lcwotZ3N0X3RvY19lbnRyeV9nZXRfdGFncwotZ3N0X3RvY19lbnRyeV9tZXJnZV90YWdzCi1nc3RfdG9jX2VudHJ5X3NldF90YWdzCi1nc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X25pY2sKLWdzdF90b2NfZW50cnlfZ2V0X2VudHJ5X3R5cGUKLWdzdF90b2NfZW50cnlfaXNfYWx0ZXJuYXRpdmUKLWdzdF90b2NfZW50cnlfaXNfc2VxdWVuY2UKLUdTVF9UT0NfRU5UUllfVFlQRV9JU19BTFRFUk5BVElWRQotR1NUX1RPQ19FTlRSWV9UWVBFX0lTX1NFUVVFTkNFCi1HU1RfVE9DX1JFUEVBVF9DT1VOVF9JTkZJTklURQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfVFlQRV9UT0MKLUdTVF9UWVBFX1RPQ19FTlRSWQotR1NUX1RZUEVfVE9DX0VOVFJZX1RZUEUKLUdTVF9UWVBFX1RPQ19MT09QX1RZUEUKLUdTVF9UWVBFX1RPQ19TQ09QRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90b2NfZ2V0X3R5cGUKLWdzdF90b2NfZW50cnlfZ2V0X3R5cGUKLWdzdF90b2NfZW50cnlfdHlwZV9nZXRfdHlwZQotZ3N0X3RvY19sb29wX3R5cGVfZ2V0X3R5cGUKLWdzdF90b2Nfc2NvcGVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRyYWNlcjwvRklMRT4KLTxUSVRMRT5Hc3RUcmFjZXI8L1RJVExFPgotR3N0VHJhY2VyCi1nc3RfdHJhY2VyX3JlZ2lzdGVyCi1nc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rCi0KLUdzdFRyYWNlckhvb2tCaW5BZGRQb3N0Ci1Hc3RUcmFjZXJIb29rQmluQWRkUHJlCi1Hc3RUcmFjZXJIb29rQmluUmVtb3ZlUG9zdAotR3N0VHJhY2VySG9va0JpblJlbW92ZVByZQotR3N0VHJhY2VySG9va0VsZW1lbnRBZGRQYWQKLUdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQb3N0Ci1Hc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUHJlCi1Hc3RUcmFjZXJIb29rRWxlbWVudE5ldwotR3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVBvc3QKLUdzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQcmUKLUdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQb3N0Ci1Hc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UHJlCi1Hc3RUcmFjZXJIb29rRWxlbWVudFJlbW92ZVBhZAotR3N0VHJhY2VySG9va1BhZExpbmtQb3N0Ci1Hc3RUcmFjZXJIb29rUGFkTGlua1ByZQotR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVBvc3QKLUdzdFRyYWNlckhvb2tQYWRQdWxsUmFuZ2VQcmUKLUdzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQb3N0Ci1Hc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UHJlCi1Hc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQb3N0Ci1Hc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQcmUKLUdzdFRyYWNlckhvb2tQYWRQdXNoUG9zdAotR3N0VHJhY2VySG9va1BhZFB1c2hQcmUKLUdzdFRyYWNlckhvb2tQYWRRdWVyeVBvc3QKLUdzdFRyYWNlckhvb2tQYWRRdWVyeVByZQotR3N0VHJhY2VySG9va1BhZFVubGlua1Bvc3QKLUdzdFRyYWNlckhvb2tQYWRVbmxpbmtQcmUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX1RSQUNFUgotR1NUX0lTX1RSQUNFUgotR1NUX1RZUEVfVFJBQ0VSCi1HU1RfVFJBQ0VSX0NMQVNTCi1HU1RfSVNfVFJBQ0VSX0NMQVNTCi1HU1RfVFJBQ0VSX0dFVF9DTEFTUwotR1NUX1RSQUNFUl9DQVNUCi08U1VCU0VDVElPTiBQcml2YXRlPgotR1NUX1RSQUNFUl9BUkdTCi1HU1RfVFJBQ0VSX0RJU1BBVENICi1HU1RfVFJBQ0VSX0lTX0VOQUJMRUQKLUdTVF9UUkFDRVJfUVVBUksKLUdTVF9UUkFDRVJfVFMKLUdTVF9UUkFDRVJfQklOX0FERF9QT1NUCi1HU1RfVFJBQ0VSX0JJTl9BRERfUFJFCi1HU1RfVFJBQ0VSX0JJTl9SRU1PVkVfUE9TVAotR1NUX1RSQUNFUl9CSU5fUkVNT1ZFX1BSRQotR1NUX1RSQUNFUl9FTEVNRU5UX0FERF9QQUQKLUdTVF9UUkFDRVJfRUxFTUVOVF9DSEFOR0VfU1RBVEVfUE9TVAotR1NUX1RSQUNFUl9FTEVNRU5UX0NIQU5HRV9TVEFURV9QUkUKLUdTVF9UUkFDRVJfRUxFTUVOVF9ORVcKLUdTVF9UUkFDRVJfRUxFTUVOVF9QT1NUX01FU1NBR0VfUE9TVAotR1NUX1RSQUNFUl9FTEVNRU5UX1BPU1RfTUVTU0FHRV9QUkUKLUdTVF9UUkFDRVJfRUxFTUVOVF9RVUVSWV9QT1NUCi1HU1RfVFJBQ0VSX0VMRU1FTlRfUVVFUllfUFJFCi1HU1RfVFJBQ0VSX0VMRU1FTlRfUkVNT1ZFX1BBRAotR1NUX1RSQUNFUl9QQURfTElOS19QT1NUCi1HU1RfVFJBQ0VSX1BBRF9MSU5LX1BSRQotR1NUX1RSQUNFUl9QQURfUFVMTF9SQU5HRV9QT1NUCi1HU1RfVFJBQ0VSX1BBRF9QVUxMX1JBTkdFX1BSRQotR1NUX1RSQUNFUl9QQURfUFVTSF9FVkVOVF9QT1NUCi1HU1RfVFJBQ0VSX1BBRF9QVVNIX0VWRU5UX1BSRQotR1NUX1RSQUNFUl9QQURfUFVTSF9MSVNUX1BPU1QKLUdTVF9UUkFDRVJfUEFEX1BVU0hfTElTVF9QUkUKLUdTVF9UUkFDRVJfUEFEX1BVU0hfUE9TVAotR1NUX1RSQUNFUl9QQURfUFVTSF9QUkUKLUdTVF9UUkFDRVJfUEFEX1FVRVJZX1BPU1QKLUdTVF9UUkFDRVJfUEFEX1FVRVJZX1BSRQotR1NUX1RSQUNFUl9QQURfVU5MSU5LX1BPU1QKLUdTVF9UUkFDRVJfUEFEX1VOTElOS19QUkUKLUdzdFRyYWNlckhvb2sKLUdzdFRyYWNlclF1YXJrSWQKLWdzdF90cmFjZXJfZ2V0X3R5cGUKLUdzdFRyYWNlclByaXZhdGUKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRyYWNlcmZhY3Rvcnk8L0ZJTEU+Ci08VElUTEU+R3N0VHJhY2VyRmFjdG9yeTwvVElUTEU+Ci1Hc3RUcmFjZXJGYWN0b3J5Ci1nc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X2xpc3QKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0VHJhY2VyRmFjdG9yeUNsYXNzCi1HU1RfVFJBQ0VSX0ZBQ1RPUlkKLUdTVF9JU19UUkFDRVJfRkFDVE9SWQotR1NUX1RSQUNFUl9GQUNUT1JZX0NMQVNTCi1HU1RfSVNfVFJBQ0VSX0ZBQ1RPUllfQ0xBU1MKLUdTVF9UUkFDRVJfRkFDVE9SWV9HRVRfQ0xBU1MKLUdTVF9UUkFDRVJfRkFDVE9SWV9DQVNUCi1HU1RfVFlQRV9UUkFDRVJfRkFDVE9SWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90cmFjZXJfZmFjdG9yeV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0dHJhY2VycmVjb3JkPC9GSUxFPgotPFRJVExFPkdzdFRyYWNlclJlY29yZDwvVElUTEU+Ci1Hc3RUcmFjZXJSZWNvcmQKLUdzdFRyYWNlclZhbHVlRmxhZ3MKLUdzdFRyYWNlclZhbHVlU2NvcGUKLWdzdF90cmFjZXJfcmVjb3JkX25ldwotZ3N0X3RyYWNlcl9yZWNvcmRfbG9nCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFRyYWNlclJlY29yZENsYXNzCi1HU1RfVFJBQ0VSX1JFQ09SRAotR1NUX0lTX1RSQUNFUl9SRUNPUkQKLUdTVF9UUkFDRVJfUkVDT1JEX0NMQVNTCi1HU1RfSVNfVFJBQ0VSX1JFQ09SRF9DTEFTUwotR1NUX1RSQUNFUl9SRUNPUkRfR0VUX0NMQVNTCi1HU1RfVFJBQ0VSX1JFQ09SRF9DQVNUCi1HU1RfVFlQRV9UUkFDRVJfUkVDT1JECi1HU1RfVFlQRV9UUkFDRVJfVkFMVUVfRkxBR1MKLUdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90cmFjZXJfcmVjb3JkX2dldF90eXBlCi1nc3RfdHJhY2VyX3ZhbHVlX2ZsYWdzX2dldF90eXBlCi1nc3RfdHJhY2VyX3ZhbHVlX3Njb3BlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3R0b2NzZXR0ZXI8L0ZJTEU+Ci08VElUTEU+R3N0VG9jU2V0dGVyPC9USVRMRT4KLUdzdFRvY1NldHRlcgotR3N0VG9jU2V0dGVySW50ZXJmYWNlCi1nc3RfdG9jX3NldHRlcl9zZXRfdG9jCi1nc3RfdG9jX3NldHRlcl9nZXRfdG9jCi1nc3RfdG9jX3NldHRlcl9yZXNldAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfSVNfVE9DX1NFVFRFUgotR1NUX1RPQ19TRVRURVIKLUdTVF9UT0NfU0VUVEVSX0dFVF9JRkFDRQotR1NUX1RZUEVfVE9DX1NFVFRFUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90b2Nfc2V0dGVyX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3R0eXBlZmluZDwvRklMRT4KLTxUSVRMRT5Hc3RUeXBlRmluZDwvVElUTEU+Ci1Hc3RUeXBlRmluZAotR3N0VHlwZUZpbmRGdW5jdGlvbgotR3N0VHlwZUZpbmRQcm9iYWJpbGl0eQotZ3N0X3R5cGVfZmluZF9wZWVrCi1nc3RfdHlwZV9maW5kX3N1Z2dlc3QKLWdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGUKLWdzdF90eXBlX2ZpbmRfZ2V0X2xlbmd0aAotZ3N0X3R5cGVfZmluZF9yZWdpc3RlcgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfVFlQRV9UWVBFX0ZJTkRfUFJPQkFCSUxJVFkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdHlwZV9maW5kX3Byb2JhYmlsaXR5X2dldF90eXBlCi1nc3RfdHlwZV9maW5kX2dldF90eXBlCi1HU1RfVFlQRV9UWVBFX0ZJTkQKLTwvU0VDVElPTj4KLQotCi08U0VDVElPTj4KLTxGSUxFPmdzdHR5cGVmaW5kZmFjdG9yeTwvRklMRT4KLTxUSVRMRT5Hc3RUeXBlRmluZEZhY3Rvcnk8L1RJVExFPgotR3N0VHlwZUZpbmRGYWN0b3J5Ci1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QKLWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9ucwotZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzCi1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfaGFzX2Z1bmN0aW9uCi1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RUeXBlRmluZEZhY3RvcnlDbGFzcwotR1NUX1RZUEVfRklORF9GQUNUT1JZCi1HU1RfSVNfVFlQRV9GSU5EX0ZBQ1RPUlkKLUdTVF9UWVBFX0ZJTkRfRkFDVE9SWV9DTEFTUwotR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZX0NMQVNTCi1HU1RfVFlQRV9GSU5EX0ZBQ1RPUllfR0VUX0NMQVNTCi1HU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0dXJpaGFuZGxlcjwvRklMRT4KLTxUSVRMRT5Hc3RVcmlIYW5kbGVyPC9USVRMRT4KLUdzdFVSSUhhbmRsZXIKLUdzdFVSSUhhbmRsZXJJbnRlcmZhY2UKLUdzdFVSSVR5cGUKLUdzdFVSSUVycm9yCi1nc3RfdXJpX2Vycm9yX3F1YXJrCi1HU1RfVVJJX1RZUEVfSVNfVkFMSUQKLUdTVF9VUklfTk9fUE9SVAotZ3N0X3VyaV9wcm90b2NvbF9pc192YWxpZAotZ3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWQKLWdzdF91cmlfaXNfdmFsaWQKLWdzdF91cmlfaGFzX3Byb3RvY29sCi1nc3RfdXJpX2dldF9wcm90b2NvbAotZ3N0X3VyaV9nZXRfbG9jYXRpb24KLWdzdF91cmlfY29uc3RydWN0Ci1nc3RfZmlsZW5hbWVfdG9fdXJpCi1nc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpCi1nc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlCi1nc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29scwotZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkKLWdzdF91cmlfaGFuZGxlcl9zZXRfdXJpCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9VUklfSEFORExFUgotR1NUX0lTX1VSSV9IQU5ETEVSCi1HU1RfVVJJX0hBTkRMRVJfR0VUX0lOVEVSRkFDRQotR1NUX1RZUEVfVVJJX0hBTkRMRVIKLUdTVF9UWVBFX1VSSV9UWVBFCi1nc3RfdXJpX2Vycm9yX2dldF90eXBlCi1HU1RfVFlQRV9VUklfRVJST1IKLUdTVF9VUklfRVJST1IKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUKLWdzdF91cmlfdHlwZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHVyaTwvRklMRT4KLTxUSVRMRT5Hc3RVcmk8L1RJVExFPgotR1NUX1VSSV9DQVNUCi1HU1RfVVJJX0NPTlNUX0NBU1QKLUdzdFVyaQotZ3N0X3VyaV9uZXcKLWdzdF91cmlfbmV3X3dpdGhfYmFzZQotZ3N0X3VyaV9mcm9tX3N0cmluZwotZ3N0X3VyaV9mcm9tX3N0cmluZ193aXRoX2Jhc2UKLWdzdF91cmlfY29weQotZ3N0X3VyaV9lcXVhbAotZ3N0X3VyaV9qb2luCi1nc3RfdXJpX2pvaW5fc3RyaW5ncwotZ3N0X3VyaV9pc193cml0YWJsZQotZ3N0X3VyaV9tYWtlX3dyaXRhYmxlCi1nc3RfdXJpX3RvX3N0cmluZwotZ3N0X3VyaV9yZWYKLWdzdF91cmlfdW5yZWYKLWdzdF91cmlfaXNfbm9ybWFsaXplZAotZ3N0X3VyaV9ub3JtYWxpemUKLWdzdF91cmlfZ2V0X3NjaGVtZQotZ3N0X3VyaV9zZXRfc2NoZW1lCi1nc3RfdXJpX2dldF91c2VyaW5mbwotZ3N0X3VyaV9zZXRfdXNlcmluZm8KLWdzdF91cmlfZ2V0X2hvc3QKLWdzdF91cmlfc2V0X2hvc3QKLWdzdF91cmlfZ2V0X3BvcnQKLWdzdF91cmlfc2V0X3BvcnQKLWdzdF91cmlfZ2V0X3BhdGgKLWdzdF91cmlfc2V0X3BhdGgKLWdzdF91cmlfZ2V0X3BhdGhfc3RyaW5nCi1nc3RfdXJpX3NldF9wYXRoX3N0cmluZwotZ3N0X3VyaV9nZXRfcGF0aF9zZWdtZW50cwotZ3N0X3VyaV9zZXRfcGF0aF9zZWdtZW50cwotZ3N0X3VyaV9hcHBlbmRfcGF0aAotZ3N0X3VyaV9hcHBlbmRfcGF0aF9zZWdtZW50Ci1nc3RfdXJpX2dldF9xdWVyeV9zdHJpbmcKLWdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZwotZ3N0X3VyaV9nZXRfcXVlcnlfdGFibGUKLWdzdF91cmlfc2V0X3F1ZXJ5X3RhYmxlCi1nc3RfdXJpX2dldF9xdWVyeV92YWx1ZQotZ3N0X3VyaV9zZXRfcXVlcnlfdmFsdWUKLWdzdF91cmlfcmVtb3ZlX3F1ZXJ5X2tleQotZ3N0X3VyaV9xdWVyeV9oYXNfa2V5Ci1nc3RfdXJpX2dldF9xdWVyeV9rZXlzCi1nc3RfdXJpX2dldF9mcmFnbWVudAotZ3N0X3VyaV9zZXRfZnJhZ21lbnQKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0lTX1VSSQotR1NUX1RZUEVfVVJJCi1HU1RfVVJJCi1nc3RfdXJpX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0dXRpbHM8L0ZJTEU+Ci08VElUTEU+R3N0VXRpbHM8L1RJVExFPgotR1NUX0NBTExfUEFSRU5UCi1HU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUCi1HU1RfUkVBRF9VSU5UOAotR1NUX1JFQURfVUlOVDE2X0xFCi1HU1RfUkVBRF9VSU5UMTZfQkUKLUdTVF9SRUFEX1VJTlQyNF9MRQotR1NUX1JFQURfVUlOVDI0X0JFCi1HU1RfUkVBRF9VSU5UMzJfTEUKLUdTVF9SRUFEX1VJTlQzMl9CRQotR1NUX1JFQURfVUlOVDY0X0xFCi1HU1RfUkVBRF9VSU5UNjRfQkUKLUdTVF9SRUFEX0ZMT0FUX0xFCi1HU1RfUkVBRF9GTE9BVF9CRQotR1NUX1JFQURfRE9VQkxFX0xFCi1HU1RfUkVBRF9ET1VCTEVfQkUKLUdTVF9XUklURV9VSU5UOAotR1NUX1dSSVRFX1VJTlQxNl9MRQotR1NUX1dSSVRFX1VJTlQxNl9CRQotR1NUX1dSSVRFX1VJTlQyNF9MRQotR1NUX1dSSVRFX1VJTlQyNF9CRQotR1NUX1dSSVRFX1VJTlQzMl9MRQotR1NUX1dSSVRFX1VJTlQzMl9CRQotR1NUX1dSSVRFX1VJTlQ2NF9MRQotR1NUX1dSSVRFX1VJTlQ2NF9CRQotR1NUX1dSSVRFX0ZMT0FUX0xFCi1HU1RfV1JJVEVfRkxPQVRfQkUKLUdTVF9XUklURV9ET1VCTEVfTEUKLUdTVF9XUklURV9ET1VCTEVfQkUKLUdTVF9ST1VORF9VUF8yCi1HU1RfUk9VTkRfVVBfNAotR1NUX1JPVU5EX1VQXzgKLUdTVF9ST1VORF9VUF8xNgotR1NUX1JPVU5EX1VQXzMyCi1HU1RfUk9VTkRfVVBfNjQKLUdTVF9ST1VORF9VUF8xMjgKLUdTVF9ST1VORF9VUF9OCi1HU1RfUk9VTkRfRE9XTl8yCi1HU1RfUk9VTkRfRE9XTl80Ci1HU1RfUk9VTkRfRE9XTl84Ci1HU1RfUk9VTkRfRE9XTl8xNgotR1NUX1JPVU5EX0RPV05fMzIKLUdTVF9ST1VORF9ET1dOXzY0Ci1HU1RfUk9VTkRfRE9XTl8xMjgKLUdTVF9ST1VORF9ET1dOX04KLUdET1VCTEVfRlJPTV9CRQotR0RPVUJMRV9GUk9NX0xFCi1HRE9VQkxFX1NXQVBfTEVfQkUKLUdET1VCTEVfVE9fQkUKLUdET1VCTEVfVE9fTEUKLUdGTE9BVF9GUk9NX0JFCi1HRkxPQVRfRlJPTV9MRQotR0ZMT0FUX1NXQVBfTEVfQkUKLUdGTE9BVF9UT19CRQotR0ZMT0FUX1RPX0xFCi0KLWdzdF9ndWludDY0X3RvX2dkb3VibGUKLWdzdF9nZG91YmxlX3RvX2d1aW50NjQKLWdzdF91dGlsX2R1bXBfbWVtCi1nc3RfdXRpbF91aW50NjRfc2NhbGUKLWdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZAotZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwKLWdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQKLWdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQKLWdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbAotZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IKLWdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yX2ludDY0Ci1nc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUKLWdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbgotZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkKLWdzdF91dGlsX2ZyYWN0aW9uX2FkZAotZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZQotZ3N0X3V0aWxfc2VxbnVtX25leHQKLWdzdF91dGlsX3NlcW51bV9jb21wYXJlCi1nc3RfdXRpbF9ncm91cF9pZF9uZXh0Ci1nc3RfdXRpbF9zZXRfb2JqZWN0X2FyZwotZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nCi1nc3RfdXRpbF9nZXRfdGltZXN0YW1wCi1Hc3RTZWFyY2hNb2RlCi1nc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoCi08U1VCU0VDVElPTiBQcml2YXRlPgotR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTUwotZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlCi1nc3RfdXRpbF9nZG91YmxlX3RvX2d1aW50NjQKLUdTVF9UWVBFX1NFQVJDSF9NT0RFCi1nc3Rfc2VhcmNoX21vZGVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RkYXRldGltZTwvRklMRT4KLTxUSVRMRT5Hc3REYXRlVGltZTwvVElUTEU+Ci1Hc3REYXRlVGltZQotR1NUX1RZUEVfREFURV9USU1FCi1nc3RfZGF0ZV90aW1lX2dldF9kYXkKLWdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoCi1nc3RfZGF0ZV90aW1lX2dldF9ob3VyCi1nc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZAotZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlCi1nc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0Ci1nc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQKLWdzdF9kYXRlX3RpbWVfZ2V0X3llYXIKLWdzdF9kYXRlX3RpbWVfbmV3Ci1nc3RfZGF0ZV90aW1lX25ld195bWQKLWdzdF9kYXRlX3RpbWVfbmV3X3ltCi1nc3RfZGF0ZV90aW1lX25ld195Ci1nc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZQotZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YwotZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZQotZ3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWUKLWdzdF9kYXRlX3RpbWVfbmV3X25vd191dGMKLWdzdF9kYXRlX3RpbWVfcmVmCi1nc3RfZGF0ZV90aW1lX3VucmVmCi0KLWdzdF9kYXRlX3RpbWVfaGFzX2RheQotZ3N0X2RhdGVfdGltZV9oYXNfbW9udGgKLWdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZAotZ3N0X2RhdGVfdGltZV9oYXNfdGltZQotZ3N0X2RhdGVfdGltZV9oYXNfeWVhcgotCi0KLWdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcKLWdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcKLQotZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nX2RhdGVfdGltZQotZ3N0X2RhdGVfdGltZV90b19nX2RhdGVfdGltZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHZhbHVlPC9GSUxFPgotPFRJVExFPkdzdFZhbHVlPC9USVRMRT4KLQotPFNVQlNFQ1RJT04gZm91cmNjPgotR1NUX01BS0VfRk9VUkNDCi1HU1RfU1RSX0ZPVVJDQwotR1NUX0ZPVVJDQ19GT1JNQVQKLUdTVF9GT1VSQ0NfQVJHUwotCi08U1VCU0VDVElPTiBpbnRyYW5nZT4KLUdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UKLUdTVF9UWVBFX0lOVF9SQU5HRQotZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UKLWdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbgotZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4Ci1nc3RfdmFsdWVfc2V0X2ludF9yYW5nZV9zdGVwCi1nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9zdGVwCi0KLTxTVUJTRUNUSU9OIGJpdG1hc2s+Ci1HU1RfVkFMVUVfSE9MRFNfQklUTUFTSwotR1NUX1RZUEVfQklUTUFTSwotZ3N0X3ZhbHVlX3NldF9iaXRtYXNrCi1nc3RfdmFsdWVfZ2V0X2JpdG1hc2sKLQotPFNVQlNFQ1RJT04gZmxhZ3NldD4KLUdTVF9WQUxVRV9IT0xEU19GTEFHX1NFVAotR1NUX1RZUEVfRkxBR19TRVQKLWdzdF9zdHJ1Y3R1cmVfZ2V0X2ZsYWdzZXQKLWdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFncwotZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sKLWdzdF92YWx1ZV9zZXRfZmxhZ3NldAotR1NUX0ZMQUdfU0VUX01BU0tfRVhBQ1QKLQotPFNVQlNFQ1RJT04gaW50NjRyYW5nZT4KLUdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRQotR1NUX1RZUEVfSU5UNjRfUkFOR0UKLWdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UKLWdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluCi1nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heAotZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZV9zdGVwCi1nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXAKLQotPFNVQlNFQ1RJT04gZG91YmxlcmFuZ2U+Ci1HU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFCi1HU1RfVFlQRV9ET1VCTEVfUkFOR0UKLWdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlCi1nc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4KLWdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heAotCi08U1VCU0VDVElPTiB2YWx1ZWxpc3Q+Ci1HU1RfVkFMVUVfSE9MRFNfTElTVAotR1NUX1RZUEVfTElTVAotR1NUX1ZBTFVFX0hPTERTX0FSUkFZCi1HU1RfVFlQRV9BUlJBWQotZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlCi1nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUKLWdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWUKLWdzdF92YWx1ZV9saXN0X2NvbmNhdAotZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UKLWdzdF92YWx1ZV9saXN0X2dldF9zaXplCi1nc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUKLQotPFNVQlNFQ1RJT04gZnJhY3Rpb24+Ci1HU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04KLUdTVF9UWVBFX0ZSQUNUSU9OCi1nc3RfdmFsdWVfc2V0X2ZyYWN0aW9uCi1nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvcgotZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcgotZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5Ci1nc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3QKLQotPFNVQlNFQ1RJT04gZnJhY3Rpb25yYW5nZT4KLUdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRQotR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UKLWdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UKLWdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluCi1nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heAotZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsCi0KLTxTVUJTRUNUSU9OIGRhdGV0aW1lPgotR1NUX1ZBTFVFX0hPTERTX0RBVEVfVElNRQotCi08U1VCU0VDVElPTiBjYXBzPgotR1NUX1ZBTFVFX0hPTERTX0NBUFMKLWdzdF92YWx1ZV9zZXRfY2FwcwotZ3N0X3ZhbHVlX2dldF9jYXBzCi0KLTxTVUJTRUNUSU9OIGNhcHNmZWF0dXJlPgotR1NUX1ZBTFVFX0hPTERTX0NBUFNfRkVBVFVSRVMKLWdzdF92YWx1ZV9zZXRfY2Fwc19mZWF0dXJlcwotZ3N0X3ZhbHVlX2dldF9jYXBzX2ZlYXR1cmVzCi0KLTxTVUJTRUNUSU9OIHN0cnVjdHVyZT4KLUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUKLWdzdF92YWx1ZV9zZXRfc3RydWN0dXJlCi1nc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZQotCi08U1VCU0VDVElPTiBidWZmZXI+Ci1HU1RfVkFMVUVfSE9MRFNfQlVGRkVSCi1nc3RfdmFsdWVfZ2V0X2J1ZmZlcgotZ3N0X3ZhbHVlX3NldF9idWZmZXIKLWdzdF92YWx1ZV90YWtlX2J1ZmZlcgotCi08U1VCU0VDVElPTiBzYW1wbGU+Ci1HU1RfVkFMVUVfSE9MRFNfU0FNUExFCi1nc3RfdmFsdWVfZ2V0X3NhbXBsZQotZ3N0X3ZhbHVlX3NldF9zYW1wbGUKLWdzdF92YWx1ZV90YWtlX3NhbXBsZQotCi08U1VCU0VDVElPTj4KLUdTVF9WQUxVRV9MRVNTX1RIQU4KLUdTVF9WQUxVRV9FUVVBTAotR1NUX1ZBTFVFX0dSRUFURVJfVEhBTgotR1NUX1ZBTFVFX1VOT1JERVJFRAotCi1Hc3RWYWx1ZUNvbXBhcmVGdW5jCi1Hc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMKLUdzdFZhbHVlRGVzZXJpYWxpemVGdW5jCi1Hc3RWYWx1ZVRhYmxlCi0KLWdzdF92YWx1ZV9pc19maXhlZAotZ3N0X3ZhbHVlX3JlZ2lzdGVyCi1nc3RfdmFsdWVfaW5pdF9hbmRfY29weQotZ3N0X3ZhbHVlX3NlcmlhbGl6ZQotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplCi1nc3RfdmFsdWVfY29tcGFyZQotZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlCi1nc3RfdmFsdWVfdW5pb24KLWdzdF92YWx1ZV9jYW5fdW5pb24KLWdzdF92YWx1ZV9zdWJ0cmFjdAotZ3N0X3ZhbHVlX2Nhbl9zdWJ0cmFjdAotZ3N0X3ZhbHVlX2ludGVyc2VjdAotZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3QKLWdzdF92YWx1ZV9pc19zdWJzZXQKLWdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUKLWdzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWUKLWdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZQotZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZQotZ3N0X3ZhbHVlX2FycmF5X3ByZXBlbmRfdmFsdWUKLWdzdF92YWx1ZV9maXhhdGUKLQotZ3N0X2ZsYWdzZXRfcmVnaXN0ZXIKLQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfVFlQRV9HX1RIUkVBRAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9kYXRlX2dldF90eXBlCi1nc3RfZGF0ZV90aW1lX2dldF90eXBlCi1nc3RfZG91YmxlX3JhbmdlX2dldF90eXBlCi1nc3RfZnJhY3Rpb25fZ2V0X3R5cGUKLWdzdF9mcmFjdGlvbl9yYW5nZV9nZXRfdHlwZQotZ3N0X2dfdGhyZWFkX2dldF90eXBlCi1nc3RfaW50X3JhbmdlX2dldF90eXBlCi1nc3RfaW50NjRfcmFuZ2VfZ2V0X3R5cGUKLWdzdF92YWx1ZV9hcnJheV9nZXRfdHlwZQotZ3N0X3ZhbHVlX2xpc3RfZ2V0X3R5cGUKLWdzdF9iaXRtYXNrX2dldF90eXBlCi1nc3RfZmxhZ3NldF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHZlcnNpb248L0ZJTEU+Ci08VElUTEU+R3N0VmVyc2lvbjwvVElUTEU+Ci1HU1RfVkVSU0lPTl9NQUpPUgotR1NUX1ZFUlNJT05fTUlOT1IKLUdTVF9WRVJTSU9OX01JQ1JPCi1HU1RfVkVSU0lPTl9OQU5PCi1HU1RfQ0hFQ0tfVkVSU0lPTgotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGRldmljZTwvRklMRT4KLTxUSVRMRT5Hc3REZXZpY2U8L1RJVExFPgotCi1Hc3REZXZpY2UKLUdzdERldmljZUNsYXNzCi0KLWdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnQKLWdzdF9kZXZpY2VfZ2V0X2NhcHMKLWdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzcwotZ3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lCi1nc3RfZGV2aWNlX2hhc19jbGFzc2VzCi1nc3RfZGV2aWNlX2hhc19jbGFzc2VzdgotZ3N0X2RldmljZV9yZWNvbmZpZ3VyZV9lbGVtZW50Ci1nc3RfZGV2aWNlX2dldF9wcm9wZXJ0aWVzCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0RFVklDRQotR1NUX0RFVklDRV9DQVNUCi1HU1RfREVWSUNFX0NMQVNTCi1HU1RfREVWSUNFX0dFVF9DTEFTUwotR1NUX0lTX0RFVklDRQotR1NUX0lTX0RFVklDRV9DTEFTUwotR1NUX1RZUEVfREVWSUNFCi1nc3RfZGV2aWNlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0ZGV2aWNlcHJvdmlkZXI8L0ZJTEU+Ci08VElUTEU+R3N0RGV2aWNlUHJvdmlkZXI8L1RJVExFPgotR3N0RGV2aWNlUHJvdmlkZXIKLUdzdERldmljZVByb3ZpZGVyQ2xhc3MKLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2FuX21vbml0b3IKLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2FkZF9zdGF0aWNfbWV0YWRhdGEKLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfZ2V0X21ldGFkYXRhCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9tZXRhZGF0YQotZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9hZGQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX3JlbW92ZQotZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9mYWN0b3J5Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX3JlZ2lzdGVyCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3AKLQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3REZXZpY2VQcml2YXRlCi1HU1RfREVWSUNFX1BST1ZJREVSCi1HU1RfREVWSUNFX1BST1ZJREVSX0NBU1QKLUdTVF9ERVZJQ0VfUFJPVklERVJfQ0xBU1MKLUdTVF9ERVZJQ0VfUFJPVklERVJfR0VUX0NMQVNTCi1HU1RfSVNfREVWSUNFX1BST1ZJREVSCi1HU1RfSVNfREVWSUNFX1BST1ZJREVSX0NMQVNTCi1HU1RfVFlQRV9ERVZJQ0VfUFJPVklERVIKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RkZXZpY2Vwcm92aWRlcmZhY3Rvcnk8L0ZJTEU+Ci08VElUTEU+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9USVRMRT4KLUdzdERldmljZVByb3ZpZGVyRmFjdG9yeQotR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3MKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2J5X25hbWUKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfZGV2aWNlX3Byb3ZpZGVyX3R5cGUKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGEKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5cwotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaGFzX2NsYXNzZXN2Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfbGlzdF9nZXRfZGV2aWNlX3Byb3ZpZGVycwotCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdERldmljZVByb3ZpZGVyUHJpdmF0ZQotR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZCi1HU1RfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUllfQ0FTVAotR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZX0NMQVNTCi1HU1RfVFlQRV9ERVZJQ0VfUFJPVklERVJfRkFDVE9SWQotR1NUX0lTX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZCi1HU1RfSVNfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUllfQ0xBU1MKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGRldmljZW1vbml0b3I8L0ZJTEU+Ci08VElUTEU+R3N0RGV2aWNlTW9uaXRvcjwvVElUTEU+Ci1Hc3REZXZpY2VNb25pdG9yCi1Hc3REZXZpY2VNb25pdG9yQ2xhc3MKLWdzdF9kZXZpY2VfbW9uaXRvcl9uZXcKLWdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfYnVzCi1nc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcgotZ3N0X2RldmljZV9tb25pdG9yX3JlbW92ZV9maWx0ZXIKLWdzdF9kZXZpY2VfbW9uaXRvcl9zdGFydAotZ3N0X2RldmljZV9tb25pdG9yX3N0b3AKLWdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlcwotZ3N0X2RldmljZV9tb25pdG9yX2dldF9wcm92aWRlcnMKLWdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfc2hvd19hbGxfZGV2aWNlcwotZ3N0X2RldmljZV9tb25pdG9yX3NldF9zaG93X2FsbF9kZXZpY2VzCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9oaWRkZW5fcHJvdmlkZXJzCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXIKLWdzdF9kZXZpY2VfcHJvdmlkZXJfdW5oaWRlX3Byb3ZpZGVyCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RGV2aWNlTW9uaXRvclByaXZhdGUKLUdTVF9ERVZJQ0VfTU9OSVRPUgotR1NUX0RFVklDRV9NT05JVE9SX0NBU1QKLUdTVF9ERVZJQ0VfTU9OSVRPUl9DTEFTUwotR1NUX0RFVklDRV9NT05JVE9SX0dFVF9DTEFTUwotR1NUX0lTX0RFVklDRV9NT05JVE9SCi1HU1RfSVNfREVWSUNFX01PTklUT1JfQ0xBU1MKLUdTVF9UWVBFX0RFVklDRV9NT05JVE9SCi1nc3RfZGV2aWNlX21vbml0b3JfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzIGIvZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTIyYzFlLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2dzdHJlYW1lci50eXBlcworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSUgYWRkIGEgX2dldF90eXBlIGZvciBldmVyeSBHT2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5kIHNpZ25hbHMgeW91IHdhbnQKLSUgZG9jdW1lbnRlZAotJSBhZGQgdGhlIHJlbGV2YW50IGluY2x1ZGVzIHRvIGJlIGFibGUgdG8gY2FsbCB0aG9zZSBfZ2V0X3R5cGUgZnVuY3Rpb25zCi0KLSUgYWRkaW5nIGEgZ2V0X3R5cGUgaGVyZSB3aWxsOgotJSAtIGNoYW5nZSBvdXRwdXQgZmlsZSBuYW1lIGZyb20gZ3N0cmVhbWVyLSh3aGF0ZXZlcikuaHRtbCB0byAod2hhdGV2ZXIpLmh0bWwKLSUgLSBkb2N1bWVudCBwcm9wZXJ0aWVzIGFuZCBzaWduYWxzCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRyYWNlci5oPgotI2luY2x1ZGUgPGdzdC9nc3R0cmFjZXJyZWNvcmQuaD4KLQotZ3N0X2Jpbl9nZXRfdHlwZQotZ3N0X2J1ZmZlcl9wb29sX2dldF90eXBlCi1nc3RfYnVzX2dldF90eXBlCi1nc3RfY2hpbGRfcHJveHlfZ2V0X3R5cGUKLWdzdF9jbG9ja19nZXRfdHlwZQotZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdHlwZQotZ3N0X2NvbnRyb2xfc291cmNlX2dldF90eXBlCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlCi1nc3RfZWxlbWVudF9nZXRfdHlwZQotZ3N0X2dob3N0X3BhZF9nZXRfdHlwZQotZ3N0X29iamVjdF9nZXRfdHlwZQotZ3N0X3BhZF9nZXRfdHlwZQotZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQotZ3N0X3BpcGVsaW5lX2dldF90eXBlCi1nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3R5cGUKLWdzdF9wcmVzZXRfZ2V0X3R5cGUKLWdzdF9yZWdpc3RyeV9nZXRfdHlwZQotZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZQotZ3N0X3RhZ19zZXR0ZXJfZ2V0X3R5cGUKLWdzdF90YXNrX2dldF90eXBlCi1nc3RfdHJhY2VyX2dldF90eXBlCi1nc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X3R5cGUKLWdzdF90cmFjZXJfcmVjb3JkX2dldF90eXBlCi1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X3R5cGUKLWdzdF91cmlfaGFuZGxlcl9nZXRfdHlwZQotCi1nc3RfYnVmZmVyX2dldF90eXBlCi1nc3RfYnVmZmVyX2xpc3RfZ2V0X3R5cGUKLWdzdF9jYXBzX2dldF90eXBlCi1nc3RfY29udGV4dF9nZXRfdHlwZQotZ3N0X2V2ZW50X2dldF90eXBlCi1nc3RfbWVtb3J5X2dldF90eXBlCi1nc3RfbWVzc2FnZV9nZXRfdHlwZQotZ3N0X3F1ZXJ5X2dldF90eXBlCi1nc3Rfc2FtcGxlX2dldF90eXBlCi1nc3RfdGFnX2xpc3RfZ2V0X3R5cGUKLWdzdF90b2NfZ2V0X3R5cGUKLWdzdF90b2NfZW50cnlfZ2V0X3R5cGUKLQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluIGIvZG9jcy9nc3QvZ3N0cmVhbWVyLnR5cGVzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTIyYzFlLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2dzdHJlYW1lci50eXBlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSUgYWRkIGEgX2dldF90eXBlIGZvciBldmVyeSBHT2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5kIHNpZ25hbHMgeW91IHdhbnQKLSUgZG9jdW1lbnRlZAotJSBhZGQgdGhlIHJlbGV2YW50IGluY2x1ZGVzIHRvIGJlIGFibGUgdG8gY2FsbCB0aG9zZSBfZ2V0X3R5cGUgZnVuY3Rpb25zCi0KLSUgYWRkaW5nIGEgZ2V0X3R5cGUgaGVyZSB3aWxsOgotJSAtIGNoYW5nZSBvdXRwdXQgZmlsZSBuYW1lIGZyb20gZ3N0cmVhbWVyLSh3aGF0ZXZlcikuaHRtbCB0byAod2hhdGV2ZXIpLmh0bWwKLSUgLSBkb2N1bWVudCBwcm9wZXJ0aWVzIGFuZCBzaWduYWxzCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRyYWNlci5oPgotI2luY2x1ZGUgPGdzdC9nc3R0cmFjZXJyZWNvcmQuaD4KLQotZ3N0X2Jpbl9nZXRfdHlwZQotZ3N0X2J1ZmZlcl9wb29sX2dldF90eXBlCi1nc3RfYnVzX2dldF90eXBlCi1nc3RfY2hpbGRfcHJveHlfZ2V0X3R5cGUKLWdzdF9jbG9ja19nZXRfdHlwZQotZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdHlwZQotZ3N0X2NvbnRyb2xfc291cmNlX2dldF90eXBlCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlCi1nc3RfZWxlbWVudF9nZXRfdHlwZQotZ3N0X2dob3N0X3BhZF9nZXRfdHlwZQotZ3N0X29iamVjdF9nZXRfdHlwZQotZ3N0X3BhZF9nZXRfdHlwZQotZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQotZ3N0X3BpcGVsaW5lX2dldF90eXBlCi1nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3R5cGUKLWdzdF9wcmVzZXRfZ2V0X3R5cGUKLWdzdF9yZWdpc3RyeV9nZXRfdHlwZQotZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZQotZ3N0X3RhZ19zZXR0ZXJfZ2V0X3R5cGUKLWdzdF90YXNrX2dldF90eXBlCi1nc3RfdHJhY2VyX2dldF90eXBlCi1nc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X3R5cGUKLWdzdF90cmFjZXJfcmVjb3JkX2dldF90eXBlCi1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X3R5cGUKLWdzdF91cmlfaGFuZGxlcl9nZXRfdHlwZQotCi1nc3RfYnVmZmVyX2dldF90eXBlCi1nc3RfYnVmZmVyX2xpc3RfZ2V0X3R5cGUKLWdzdF9jYXBzX2dldF90eXBlCi1nc3RfY29udGV4dF9nZXRfdHlwZQotZ3N0X2V2ZW50X2dldF90eXBlCi1nc3RfbWVtb3J5X2dldF90eXBlCi1nc3RfbWVzc2FnZV9nZXRfdHlwZQotZ3N0X3F1ZXJ5X2dldF90eXBlCi1nc3Rfc2FtcGxlX2dldF90eXBlCi1nc3RfdGFnX2xpc3RfZ2V0X3R5cGUKLWdzdF90b2NfZ2V0X3R5cGUKLWdzdF90b2NfZW50cnlfZ2V0X3R5cGUKLQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RBbGxvY2F0b3IuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0QWxsb2NhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZWQwODQuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RBbGxvY2F0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcxNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0QWxsb2NhdG9yOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIiB0aXRsZT0iR3N0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RBbGxvY2F0b3IuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEFsbG9jYXRvci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0QWxsb2NhdG9yIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0QWxsb2NhdG9yLnRvcF9vZl9wYWdlIj48L2E+R3N0QWxsb2NhdG9yPC9zcGFuPjwvaDI+Ci08cD5Hc3RBbGxvY2F0b3Ig4oCUIGFsbG9jYXRlIG1lbW9yeSBibG9ja3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QWxsb2NhdG9yLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1maW5kIiB0aXRsZT0iZ3N0X2FsbG9jYXRvcl9maW5kwqAoKSI+Z3N0X2FsbG9jYXRvcl9maW5kPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1yZWdpc3RlciIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfcmVnaXN0ZXLCoCgpIj5nc3RfYWxsb2NhdG9yX3JlZ2lzdGVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1zZXQtZGVmYXVsdCIgdGl0bGU9ImdzdF9hbGxvY2F0b3Jfc2V0X2RlZmF1bHTCoCgpIj5nc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRpb24tcGFyYW1zLWluaXQiIHRpdGxlPSJnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdMKgKCkiPmdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QWxsb2NhdGlvblBhcmFtczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtYWxsb2NhdGlvbi1wYXJhbXMtY29weSIgdGl0bGU9ImdzdF9hbGxvY2F0aW9uX3BhcmFtc19jb3B5wqAoKSI+Z3N0X2FsbG9jYXRpb25fcGFyYW1zX2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtYWxsb2NhdGlvbi1wYXJhbXMtZnJlZSIgdGl0bGU9ImdzdF9hbGxvY2F0aW9uX3BhcmFtc19mcmVlwqAoKSI+Z3N0X2FsbG9jYXRpb25fcGFyYW1zX2ZyZWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0b3ItYWxsb2MiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX2FsbG9jwqAoKSI+Z3N0X2FsbG9jYXRvcl9hbGxvYzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0b3ItZnJlZSIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfZnJlZcKgKCkiPmdzdF9hbGxvY2F0b3JfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LW1lbW9yeS1uZXctd3JhcHBlZCIgdGl0bGU9ImdzdF9tZW1vcnlfbmV3X3dyYXBwZWTCoCgpIj5nc3RfbWVtb3J5X25ld193cmFwcGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0QWxsb2NhdGlvblBhcmFtcyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEFsbG9jYXRvci5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0idmFyaWFibGVfdHlwZSI+ZXh0ZXJuPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1tZW1vcnktYWxpZ25tZW50IiB0aXRsZT0iZ3N0X21lbW9yeV9hbGlnbm1lbnQiPmdzdF9tZW1vcnlfYWxpZ25tZW50PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0b3Itc3RydWN0IiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0b3JDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RBbGxvY2F0b3JDbGFzcyI+R3N0QWxsb2NhdG9yQ2xhc3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFsbG9jYXRvckZsYWdzIj5Hc3RBbGxvY2F0b3JGbGFnczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEFsbG9jYXRpb25QYXJhbXMiPkdzdEFsbG9jYXRpb25QYXJhbXM8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI0dTVC1BTExPQ0FUT1ItU1lTTUVNOkNBUFMiIHRpdGxlPSJHU1RfQUxMT0NBVE9SX1NZU01FTSI+R1NUX0FMTE9DQVRPUl9TWVNNRU08L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QWxsb2NhdG9yLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUJveGVkLVR5cGVzLmh0bWwiPkdCb3hlZDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBbGxvY2F0aW9uUGFyYW1zCi0gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBbGxvY2F0b3IKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBbGxvY2F0b3IuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QWxsb2NhdG9yLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPk1lbW9yeSBpcyB1c3VhbGx5IGNyZWF0ZWQgYnkgYWxsb2NhdG9ycyB3aXRoIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0b3ItYWxsb2MiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX2FsbG9jwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWxsb2NhdG9yX2FsbG9jKCk8L2NvZGU+PC9hPgotbWV0aG9kIGNhbGwuIFdoZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlzIHVzZWQgYXMgdGhlIGFsbG9jYXRvciwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHdpbGwKLWJlIHVzZWQuPC9wPgotPHA+TmV3IGFsbG9jYXRvcnMgY2FuIGJlIHJlZ2lzdGVyZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1yZWdpc3RlciIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfcmVnaXN0ZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hbGxvY2F0b3JfcmVnaXN0ZXIoKTwvY29kZT48L2E+LgotQWxsb2NhdG9ycyBhcmUgaWRlbnRpZmllZCBieSBuYW1lIGFuZCBjYW4gYmUgcmV0cmlldmVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtYWxsb2NhdG9yLWZpbmQiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX2ZpbmTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hbGxvY2F0b3JfZmluZCgpPC9jb2RlPjwvYT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtYWxsb2NhdG9yLXNldC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdCgpPC9jb2RlPjwvYT4gY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZQotZGVmYXVsdCBhbGxvY2F0b3IuPC9wPgotPHA+TmV3IG1lbW9yeSBjYW4gYmUgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtbWVtb3J5LW5ldy13cmFwcGVkIiB0aXRsZT0iZ3N0X21lbW9yeV9uZXdfd3JhcHBlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9uZXdfd3JhcHBlZCgpPC9jb2RlPjwvYT4gdGhhdCB3cmFwcyB0aGUgbWVtb3J5Ci1hbGxvY2F0ZWQgZWxzZXdoZXJlLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QWxsb2NhdG9yLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWxsb2NhdG9yLWZpbmQiPjwvYT48aDM+Z3N0X2FsbG9jYXRvcl9maW5kwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfYWxsb2NhdG9yX2ZpbmQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaW5kIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGFsbG9jYXRvciB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0uIFdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHRoZQotZGVmYXVsdCBhbGxvY2F0b3Igd2lsbCBiZSByZXR1cm5lZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWxsb2NhdG9yLWZpbmQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIG5hbWUgb2YgdGhlIGFsbG9jYXRvci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWxsb2NhdG9yLWZpbmQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuCi10aGUgYWxsb2NhdG9yIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLXdhcyBub3QgcmVnaXN0ZXJlZC4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4KLXRvIHJlbGVhc2UgdGhlIGFsbG9jYXRvciBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWxsb2NhdG9yLXJlZ2lzdGVyIj48L2E+PGgzPmdzdF9hbGxvY2F0b3JfcmVnaXN0ZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYWxsb2NhdG9yX3JlZ2lzdGVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKmFsbG9jYXRvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWdpc3RlcnMgdGhlIG1lbW9yeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotLiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hbGxvY2F0b3ItcmVnaXN0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBhbGxvY2F0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWxsb2NhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFsbG9jYXRvci1zZXQtZGVmYXVsdCI+PC9hPjxoMz5nc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBkZWZhdWx0IGFsbG9jYXRvci4gVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hbGxvY2F0b3Itc2V0LWRlZmF1bHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFsbG9jYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hbGxvY2F0aW9uLXBhcmFtcy1pbml0Ij48L2E+PGgzPmdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluaXRpYWxpemUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmFtczwvY29kZT48L2VtPgotIHRvIGl0cyBkZWZhdWx0IHZhbHVlczwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hbGxvY2F0aW9uLXBhcmFtcy1pbml0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJhbXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdGlvblBhcmFtczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWxsb2NhdGlvbi1wYXJhbXMtY29weSI+PC9hPjxoMz5nc3RfYWxsb2NhdGlvbl9wYXJhbXNfY29wecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPsKgKgotZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2NvcHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIGNvcHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmFtczwvY29kZT48L2VtPgotLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9hbGxvY2F0aW9uX3BhcmFtc19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFsbG9jYXRpb24tcGFyYW1zLWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmFtczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdGlvblBhcmFtczwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWxsb2NhdGlvbi1wYXJhbXMtY29weS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3ICM8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiwgZnJlZSB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRpb24tcGFyYW1zLWZyZWUiIHRpdGxlPSJnc3RfYWxsb2NhdGlvbl9wYXJhbXNfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FsbG9jYXRpb25fcGFyYW1zX2ZyZWUoKTwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWxsb2NhdGlvbi1wYXJhbXMtZnJlZSI+PC9hPjxoMz5nc3RfYWxsb2NhdGlvbl9wYXJhbXNfZnJlZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9hbGxvY2F0aW9uX3BhcmFtc19mcmVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0aW9uUGFyYW1zPC9zcGFuPjwvYT4gKnBhcmFtczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GcmVlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJhbXM8L2NvZGU+PC9lbT4KLTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hbGxvY2F0aW9uLXBhcmFtcy1mcmVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJhbXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hbGxvY2F0b3ItYWxsb2MiPjwvYT48aDM+Z3N0X2FsbG9jYXRvcl9hbGxvY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotZ3N0X2FsbG9jYXRvcl9hbGxvYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVzZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gdG8gYWxsb2NhdGUgYSBuZXcgbWVtb3J5IGJsb2NrIHdpdGggbWVtb3J5IHRoYXQgaXMgYXQgbGVhc3QKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYmlnLjwvcD4KLTxwPlRoZSBvcHRpb25hbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyYW1zPC9jb2RlPjwvZW0+Ci0gY2FuIHNwZWNpZnkgdGhlIHByZWZpeCBhbmQgcGFkZGluZyBmb3IgdGhlIG1lbW9yeS4gSWYKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpcyBwYXNzZWQsIG5vIGZsYWdzLCBubyBleHRyYSBwcmVmaXgvcGFkZGluZyBhbmQgYSBkZWZhdWx0IGFsaWdubWVudCBpcwotdXNlZC48L3A+Ci08cD5UaGUgcHJlZml4L3BhZGRpbmcgd2lsbCBiZSBmaWxsZWQgd2l0aCAwIGlmIGZsYWdzIGNvbnRhaW5zCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLVpFUk8tUFJFRklYRUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9NRU1PUllfRkxBR19aRVJPX1BSRUZJWEVEPC9zcGFuPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctWkVSTy1QQURERUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9NRU1PUllfRkxBR19aRVJPX1BBRERFRDwvc3Bhbj48L2E+IHJlc3BlY3RpdmVseS48L3A+Ci08cD5XaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvY2F0b3I8L2NvZGU+PC9lbT4KLSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB3aWxsIGJlIHVzZWQuPC9wPgotPHA+VGhlIGFsaWdubWVudCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyYW1zPC9jb2RlPjwvZW0+Ci0gaXMgZ2l2ZW4gYXMgYSBiaXRtYXNrIHNvIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+Ci0gKyAxIGVxdWFscwotdGhlIGFtb3VudCBvZiBieXRlcyB0byBhbGlnbiB0by4gRm9yIGV4YW1wbGUsIHRvIGFsaWduIHRvIDggYnl0ZXMsCi11c2UgYW4gYWxpZ25tZW50IG9mIDcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFsbG9jYXRvci1hbGxvYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbGxvY2F0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiB0byB1c2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zaXplIG9mIHRoZSB2aXNpYmxlIG1lbW9yeSBhcmVhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmFtczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBvcHRpb25hbCBwYXJhbWV0ZXJzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFsbG9jYXRvci1hbGxvYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWxsb2NhdG9yLWZyZWUiPjwvYT48aDM+Z3N0X2FsbG9jYXRvcl9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2FsbG9jYXRvcl9mcmVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKmFsbG9jYXRvcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW1vcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnJlZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtb3J5PC9jb2RlPjwvZW0+Ci0gdGhhdCB3YXMgcHJldmlvdXNseSBhbGxvY2F0ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1hbGxvYyIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfYWxsb2PCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hbGxvY2F0b3JfYWxsb2MoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hbGxvY2F0b3ItZnJlZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbGxvY2F0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiB0byB1c2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW1vcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIG1lbW9yeSB0byBmcmVlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1uZXctd3JhcHBlZCI+PC9hPjxoMz5nc3RfbWVtb3J5X25ld193cmFwcGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVtb3J5X25ld193cmFwcGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RNZW1vcnlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBtYXhzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWxsb2NhdGUgYSBuZXcgbWVtb3J5IGJsb2NrIHRoYXQgd3JhcHMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhlIHByZWZpeC9wYWRkaW5nIG11c3QgYmUgZmlsbGVkIHdpdGggMCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLSBjb250YWlucwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBRy1aRVJPLVBSRUZJWEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVNT1JZX0ZMQUdfWkVST19QUkVGSVhFRDwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLVpFUk8tUEFEREVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQ8L3NwYW4+PC9hPiByZXNwZWN0aXZlbHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1uZXctd3JhcHBlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlGbGFncyIgdGl0bGU9ImVudW0gR3N0TWVtb3J5RmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlGbGFnczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gZGF0YSB0bwotd3JhcC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBndWludDhdWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWF4c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFsbG9jYXRlZCBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b2Zmc2V0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnNpemUgb2YgdmFsaWQgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdXNlcl9kYXRhLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gY2FsbGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPgotd2hlbiB0aGUgbWVtb3J5IGlzIGZyZWVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCB1bnRpbCBmaXJzdCBjYWxsZWQuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgYXN5bmM8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPiB1c2VyX2RhdGFdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktbmV3LXdyYXBwZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBbGxvY2F0b3Iub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktYWxpZ25tZW50Ij48L2E+PGgzPmdzdF9tZW1vcnlfYWxpZ25tZW50PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5HU1RfRVhQT1JUIGdzaXplIGdzdF9tZW1vcnlfYWxpZ25tZW50OwotPC9wcmU+Ci08cD5UaGUgZGVmYXVsdCBtZW1vcnkgYWxpZ25tZW50IGluIGJ5dGVzIC0gMQotYW4gYWxpZ25tZW50IG9mIDcgd291bGQgYmUgdGhlIHNhbWUgYXMgd2hhdCA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm1hbGxvYygpPC9jb2RlPiBndWFyYW50ZWVzLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QWxsb2NhdG9yLXN0cnVjdCI+PC9hPjxoMz5Hc3RBbGxvY2F0b3I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IHsKLSAgR3N0TWVtb3J5TWFwRnVuY3Rpb24gICAgICAgbWVtX21hcDsKLSAgR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiAgICAgbWVtX3VubWFwOwotCi0gIEdzdE1lbW9yeUNvcHlGdW5jdGlvbiAgICAgIG1lbV9jb3B5OwotICBHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uICAgICBtZW1fc2hhcmU7Ci0gIEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uICAgIG1lbV9pc19zcGFuOwotCi0gIEdzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbiAgIG1lbV9tYXBfZnVsbDsKLSAgR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb24gbWVtX3VubWFwX2Z1bGw7Ci19IEdzdEFsbG9jYXRvcjsKLTwvcHJlPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+IGlzIHVzZWQgdG8gY3JlYXRlIG5ldyBtZW1vcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QWxsb2NhdG9yLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5TWFwRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlNYXBGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlNYXBGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RBbGxvY2F0b3Itc3RydWN0Lm1lbS1tYXAiPjwvYT5tZW1fbWFwPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeU1hcEZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVVubWFwRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeVVubWFwRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0tdW5tYXAiPjwvYT5tZW1fdW5tYXA8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5VW5tYXBGdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlDb3B5RnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlDb3B5RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5Q29weUZ1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEFsbG9jYXRvci1zdHJ1Y3QubWVtLWNvcHkiPjwvYT5tZW1fY29weTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlDb3B5RnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeVNoYXJlRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5U2hhcmVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RBbGxvY2F0b3Itc3RydWN0Lm1lbS1zaGFyZSI+PC9hPm1lbV9zaGFyZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5SXNTcGFuRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0taXMtc3BhbiI+PC9hPm1lbV9pc19zcGFuPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0tbWFwLWZ1bGwiPjwvYT5tZW1fbWFwX2Z1bGw8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5TWFwRnVsbEZ1bmN0aW9uLgotV2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbV9tYXA8L2NvZGU+PC9lbT4KLWlmIHByZXNlbnQuIChTaW5jZSAxLjYpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVVubWFwRnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0tdW5tYXAtZnVsbCI+PC9hPm1lbV91bm1hcF9mdWxsPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeVVubWFwRnVsbEZ1bmN0aW9uLgotV2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbV91bm1hcDwvY29kZT48L2VtPgotaWYgcHJlc2VudC4gKFNpbmNlIDEuNik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFsbG9jYXRvckNsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RBbGxvY2F0b3JDbGFzczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEFsbG9jYXRvckNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3Mgb2JqZWN0X2NsYXNzOwotCi0gIEdzdE1lbW9yeSAqICAoKmFsbG9jKSAgICAgIChHc3RBbGxvY2F0b3IgKmFsbG9jYXRvciwgZ3NpemUgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKnBhcmFtcyk7Ci0gIHZvaWQgICAgICAgICAoKmZyZWUpICAgICAgIChHc3RBbGxvY2F0b3IgKmFsbG9jYXRvciwgR3N0TWVtb3J5ICptZW1vcnkpOwotfTsKLTwvcHJlPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+IGlzIHVzZWQgdG8gY3JlYXRlIG5ldyBtZW1vcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QWxsb2NhdG9yQ2xhc3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RPYmplY3RDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdENsYXNzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEFsbG9jYXRvckNsYXNzLm9iamVjdC1jbGFzcyI+PC9hPm9iamVjdF9jbGFzczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T2JqZWN0IHBhcmVudCBjbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEFsbG9jYXRvckNsYXNzLmFsbG9jIj48L2E+YWxsb2M8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmltcGxlbWVudGF0aW9uIHRoYXQgYWNxdWlyZXMgbWVtb3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QWxsb2NhdG9yQ2xhc3MuZnJlZSI+PC9hPmZyZWU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmltcGxlbWVudGF0aW9uIHRoYXQgcmVsZWFzZXMgbWVtb3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBbGxvY2F0b3JGbGFncyI+PC9hPjxoMz5lbnVtIEdzdEFsbG9jYXRvckZsYWdzPC9oMz4KLTxwPkZsYWdzIGZvciBhbGxvY2F0b3JzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEFsbG9jYXRvckZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUFMTE9DQVRPUi1GTEFHLUNVU1RPTS1BTExPQzpDQVBTIj48L2E+R1NUX0FMTE9DQVRPUl9GTEFHX0NVU1RPTV9BTExPQzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgYWxsb2NhdG9yIGhhcyBhIGN1c3RvbSBhbGxvYyBmdW5jdGlvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUFMTE9DQVRPUi1GTEFHLUxBU1Q6Q0FQUyI+PC9hPkdTVF9BTExPQ0FUT1JfRkxBR19MQVNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmZpcnN0IGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3VzdG9tIHB1cnBvc2VzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBbGxvY2F0aW9uUGFyYW1zLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QWxsb2NhdGlvblBhcmFtczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEFsbG9jYXRpb25QYXJhbXMgewotICBHc3RNZW1vcnlGbGFncyBmbGFnczsKLSAgZ3NpemUgICAgICAgICAgYWxpZ247Ci0gIGdzaXplICAgICAgICAgIHByZWZpeDsKLSAgZ3NpemUgICAgICAgICAgcGFkZGluZzsKLX07Ci08L3ByZT4KLTxwPlBhcmFtZXRlcnMgdG8gY29udHJvbCB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RBbGxvY2F0aW9uUGFyYW1zLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1lbW9yeUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5RmxhZ3M8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QWxsb2NhdGlvblBhcmFtcy1zdHJ1Y3QuZmxhZ3MiPjwvYT5mbGFnczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZmxhZ3MgdG8gY29udHJvbCBhbGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0LmFsaWduIj48L2E+YWxpZ248L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZXNpcmVkIGFsaWdubWVudCBvZiB0aGUgbWVtb3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0LnByZWZpeCI+PC9hPnByZWZpeDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRlc2lyZWQgcHJlZml4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0LnBhZGRpbmciPjwvYT5wYWRkaW5nPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGVzaXJlZCBwYWRkaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQUxMT0NBVE9SLVNZU01FTTpDQVBTIj48L2E+PGgzPkdTVF9BTExPQ0FUT1JfU1lTTUVNPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9BTExPQ0FUT1JfU1lTTUVNICAgIlN5c3RlbU1lbW9yeSIKLTwvcHJlPgotPHA+VGhlIGFsbG9jYXRvciBuYW1lIGZvciB0aGUgZGVmYXVsdCBzeXN0ZW0gbWVtb3J5IGFsbG9jYXRvcjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBbGxvY2F0b3Iuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0QmluLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdEJpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjM2ZmIxLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0QmluLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTg5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RCaW46IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmluLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RCaW4ub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmluLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJpbi5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RCaW4uc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0QmluIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0QmluLnRvcF9vZl9wYWdlIj48L2E+R3N0QmluPC9zcGFuPjwvaDI+Ci08cD5Hc3RCaW4g4oCUIEJhc2UgY2xhc3MgYW5kIGVsZW1lbnQgdGhhdCBjYW4gY29udGFpbiBvdGhlciBlbGVtZW50czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCaW4uZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLW5ldyIgdGl0bGU9ImdzdF9iaW5fbmV3wqAoKSI+Z3N0X2Jpbl9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkIiB0aXRsZT0iZ3N0X2Jpbl9hZGTCoCgpIj5nc3RfYmluX2FkZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1yZW1vdmUiIHRpdGxlPSJnc3RfYmluX3JlbW92ZcKgKCkiPmdzdF9iaW5fcmVtb3ZlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2Jpbl9nZXRfYnlfbmFtZcKgKCkiPmdzdF9iaW5fZ2V0X2J5X25hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tZ2V0LWJ5LW5hbWUtcmVjdXJzZS11cCIgdGl0bGU9ImdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cMKgKCkiPmdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktaW50ZXJmYWNlIiB0aXRsZT0iZ3N0X2Jpbl9nZXRfYnlfaW50ZXJmYWNlwqAoKSI+Z3N0X2Jpbl9nZXRfYnlfaW50ZXJmYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1lbGVtZW50cyIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9lbGVtZW50c8KgKCkiPmdzdF9iaW5faXRlcmF0ZV9lbGVtZW50czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtcmVjdXJzZSIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlwqAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLXNpbmtzIiB0aXRsZT0iZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzwqAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3NpbmtzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4taXRlcmF0ZS1zb3J0ZWQiIHRpdGxlPSJnc3RfYmluX2l0ZXJhdGVfc29ydGVkwqAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3NvcnRlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc291cmNlcyIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzwqAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3NvdXJjZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWFsbC1ieS1pbnRlcmZhY2UiIHRpdGxlPSJnc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZcKgKCkiPmdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlY2FsY3VsYXRlLWxhdGVuY3kiIHRpdGxlPSJnc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3nCoCgpIj5nc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3k8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZC1tYW55IiB0aXRsZT0iZ3N0X2Jpbl9hZGRfbWFuecKgKCkiPmdzdF9iaW5fYWRkX21hbnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZS1tYW55IiB0aXRsZT0iZ3N0X2Jpbl9yZW1vdmVfbWFuecKgKCkiPmdzdF9iaW5fcmVtb3ZlX21hbnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tZmluZC11bmxpbmtlZC1wYWQiIHRpdGxlPSJnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkwqAoKSI+Z3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1zeW5jLWNoaWxkcmVuLXN0YXRlcyIgdGl0bGU9ImdzdF9iaW5fc3luY19jaGlsZHJlbl9zdGF0ZXPCoCgpIj5nc3RfYmluX3N5bmNfY2hpbGRyZW5fc3RhdGVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR1NULUJJTi1JUy1OTy1SRVNZTkM6Q0FQUyIgdGl0bGU9IkdTVF9CSU5fSVNfTk9fUkVTWU5DKCkiPkdTVF9CSU5fSVNfTk9fUkVTWU5DPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dTVC1CSU4tQ0hJTERSRU46Q0FQUyIgdGl0bGU9IkdTVF9CSU5fQ0hJTERSRU4oKSI+R1NUX0JJTl9DSElMRFJFTjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHU1QtQklOLUNISUxEUkVOLUNPT0tJRTpDQVBTIiB0aXRsZT0iR1NUX0JJTl9DSElMRFJFTl9DT09LSUUoKSI+R1NUX0JJTl9DSElMRFJFTl9DT09LSUU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR1NULUJJTi1OVU1DSElMRFJFTjpDQVBTIiB0aXRsZT0iR1NUX0JJTl9OVU1DSElMRFJFTigpIj5HU1RfQklOX05VTUNISUxEUkVOPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJpbi5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbi0tYXN5bmMtaGFuZGxpbmciIHRpdGxlPSJUaGUg4oCcYXN5bmMtaGFuZGxpbmfigJ0gcHJvcGVydHkiPmFzeW5jLWhhbmRsaW5nPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLS1tZXNzYWdlLWZvcndhcmQiIHRpdGxlPSJUaGUg4oCcbWVzc2FnZS1mb3J3YXJk4oCdIHByb3BlcnR5Ij5tZXNzYWdlLWZvcndhcmQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJpbi5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbi1kZWVwLWVsZW1lbnQtYWRkZWQiIHRpdGxlPSJUaGUg4oCcZGVlcC1lbGVtZW50LWFkZGVk4oCdIHNpZ25hbCI+ZGVlcC1lbGVtZW50LWFkZGVkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZGVlcC1lbGVtZW50LXJlbW92ZWQiIHRpdGxlPSJUaGUg4oCcZGVlcC1lbGVtZW50LXJlbW92ZWTigJ0gc2lnbmFsIj5kZWVwLWVsZW1lbnQtcmVtb3ZlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZG8tbGF0ZW5jeSIgdGl0bGU9IlRoZSDigJxkby1sYXRlbmN54oCdIHNpZ25hbCI+ZG8tbGF0ZW5jeTwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbi1lbGVtZW50LWFkZGVkIiB0aXRsZT0iVGhlIOKAnGVsZW1lbnQtYWRkZWTigJ0gc2lnbmFsIj5lbGVtZW50LWFkZGVkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1yZW1vdmVkIiB0aXRsZT0iVGhlIOKAnGVsZW1lbnQtcmVtb3ZlZOKAnSBzaWduYWwiPmVsZW1lbnQtcmVtb3ZlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJpbi5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmluIj5Hc3RCaW48L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW5DbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCaW5DbGFzcyI+R3N0QmluQ2xhc3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJpbkZsYWdzIj5Hc3RCaW5GbGFnczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCaW4ub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QmluCi0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJpbi5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RCaW4gaW1wbGVtZW50cwotIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJpbi5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCaW4uZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gaXMgYW4gZWxlbWVudCB0aGF0IGNhbiBjb250YWluIG90aGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LCBhbGxvd2luZyB0aGVtIHRvIGJlCi1tYW5hZ2VkIGFzIGEgZ3JvdXAuCi1QYWRzIGZyb20gdGhlIGNoaWxkIGVsZW1lbnRzIGNhbiBiZSBnaG9zdGVkIHRvIHRoZSBiaW4sIHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0R2hvc3RQYWQ8L3NwYW4+PC9hPi4KLVRoaXMgbWFrZXMgdGhlIGJpbiBsb29rIGxpa2UgYW55IG90aGVyIGVsZW1lbnRzIGFuZCBlbmFibGVzIGNyZWF0aW9uIG9mCi1oaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb24gZWxlbWVudHMuPC9wPgotPHA+QSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gaXMgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLW5ldyIgdGl0bGU9ImdzdF9iaW5fbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX25ldygpPC9jb2RlPjwvYT4uIFVzZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IGluc3RlYWQgaWYgeW91Ci13YW50IHRvIGNyZWF0ZSBhIHRvcGxldmVsIGJpbiBiZWNhdXNlIGEgbm9ybWFsIGJpbiBkb2Vzbid0IGhhdmUgYSBidXMgb3IKLWhhbmRsZSBjbG9jayBkaXN0cmlidXRpb24gb2YgaXRzIG93bi48L3A+Ci08cD5BZnRlciB0aGUgYmluIGhhcyBiZWVuIGNyZWF0ZWQgeW91IHdpbGwgdHlwaWNhbGx5IGFkZCBlbGVtZW50cyB0byBpdCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQiIHRpdGxlPSJnc3RfYmluX2FkZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9hZGQoKTwvY29kZT48L2E+LiBZb3UgY2FuIHJlbW92ZSBlbGVtZW50cyB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX3JlbW92ZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+QW4gZWxlbWVudCBjYW4gYmUgcmV0cmlldmVkIGZyb20gYSBiaW4gd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1nZXQtYnktbmFtZSIgdGl0bGU9ImdzdF9iaW5fZ2V0X2J5X25hbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fZ2V0X2J5X25hbWUoKTwvY29kZT48L2E+LCB1c2luZyB0aGUKLWVsZW1lbnRzIG5hbWUuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lLXJlY3Vyc2UtdXAiIHRpdGxlPSJnc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCgpPC9jb2RlPjwvYT4gaXMgbWFpbmx5IHVzZWQgZm9yIGludGVybmFsCi1wdXJwb3NlcyBhbmQgd2lsbCBxdWVyeSB0aGUgcGFyZW50IGJpbnMgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgZm91bmQgaW4gdGhlCi1jdXJyZW50IGJpbi48L3A+Ci08cD5BbiBpdGVyYXRvciBvZiBlbGVtZW50cyBpbiBhIGJpbiBjYW4gYmUgcmV0cmlldmVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtZWxlbWVudHMiIHRpdGxlPSJnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cygpPC9jb2RlPjwvYT4uIFZhcmlvdXMgb3RoZXIgaXRlcmF0b3JzIGV4aXN0IHRvIHJldHJpZXZlIHRoZQotZWxlbWVudHMgaW4gYSBiaW4uPC9wPgotPHA+Z3N0X29iamVjdF91bnJlZigpIGlzIHVzZWQgdG8gZHJvcCB5b3VyIHJlZmVyZW5jZSB0byB0aGUgYmluLjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLWVsZW1lbnQtYWRkZWQiIHRpdGxlPSJUaGUg4oCcZWxlbWVudC1hZGRlZOKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxlbGVtZW50LWFkZGVk4oCdPC9zcGFuPjwvYT4gc2lnbmFsIGlzIGZpcmVkIHdoZW5ldmVyIGEgbmV3IGVsZW1lbnQgaXMgYWRkZWQgdG8KLXRoZSBiaW4uIExpa2V3aXNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLWVsZW1lbnQtcmVtb3ZlZCIgdGl0bGU9IlRoZSDigJxlbGVtZW50LXJlbW92ZWTigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcZWxlbWVudC1yZW1vdmVk4oCdPC9zcGFuPjwvYT4gc2lnbmFsIGlzIGZpcmVkIHdoZW5ldmVyIGFuCi1lbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgYmluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMy42LjEwLjkiPjwvYT48aDM+Tm90ZXM8L2gzPgotPHA+Ci1BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+IGludGVybmFsbHkgaW50ZXJjZXB0cyBldmVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBwb3N0ZWQgYnkgaXRzIGNoaWxkcmVuIGFuZAotaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGRlZmF1bHQgYmVoYXZpb3VyIGZvciBlYWNoIG9mIHRoZW06Ci08L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPkdTVF9NRVNTQUdFX0VPUzwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD5UaGlzIG1lc3NhZ2UgaXMgb25seSBwb3N0ZWQgYnkgc2lua3MgaW4gdGhlIFBMQVlJTkcKLSAgICBzdGF0ZS4gSWYgYWxsIHNpbmtzIHBvc3RlZCB0aGUgRU9TIG1lc3NhZ2UsIHRoaXMgYmluIHdpbGwgcG9zdCBhbmQgRU9TCi0gICAgbWVzc2FnZSB1cHdhcmRzLjwvcD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+R1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVDwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD5qdXN0IGNvbGxlY3RlZCBhbmQgbmV2ZXIgZm9yd2FyZGVkIHVwd2FyZHMuCi0gICAgVGhlIG1lc3NhZ2VzIGFyZSB1c2VkIHRvIGRlY2lkZSB3aGVuIGFsbCBlbGVtZW50cyBoYXZlIGNvbXBsZXRlZCBwbGF5YmFjawotICAgIG9mIHRoZWlyIHNlZ21lbnQuPC9wPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5HU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+PHA+IElzIHBvc3RlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiB3aGVuIGFsbCBlbGVtZW50cyB0aGF0IHBvc3RlZAotICAgIGEgU0VHTUVOVF9TVEFSVCBoYXZlIHBvc3RlZCBhIFNFR01FTlRfRE9ORS48L3A+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPkdTVF9NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQ8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+PHA+IElzIHBvc3RlZCBieSBhbiBlbGVtZW50IHRoYXQgZGV0ZWN0ZWQgYSBjaGFuZ2UKLSAgICBpbiB0aGUgc3RyZWFtIGR1cmF0aW9uLiBUaGUgZGVmYXVsdCBiaW4gYmVoYXZpb3VyIGlzIHRvIGNsZWFyIGFueQotICAgIGNhY2hlZCBkdXJhdGlvbiB2YWx1ZXMgc28gdGhhdCB0aGUgbmV4dCBkdXJhdGlvbiBxdWVyeSB3aWxsIHBlcmZvcm0KLSAgICBhIGZ1bGwgZHVyYXRpb24gcmVjYWxjdWxhdGlvbi4gVGhlIGR1cmF0aW9uIGNoYW5nZSBpcyBwb3N0ZWQgdG8gdGhlCi0gICAgYXBwbGljYXRpb24gc28gdGhhdCBpdCBjYW4gcmVmZXRjaCB0aGUgbmV3IGR1cmF0aW9uIHdpdGggYSBkdXJhdGlvbgotICAgIHF1ZXJ5LiBOb3RlIHRoYXQgdGhlc2UgbWVzc2FnZXMgY2FuIGJlIHBvc3RlZCBiZWZvcmUgdGhlIGJpbiBpcwotICAgIHByZXJvbGxlZCwgaW4gd2hpY2ggY2FzZSB0aGUgZHVyYXRpb24gcXVlcnkgbWlnaHQgZmFpbC4KLSAgICA8L3A+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPkdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+PHA+IFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgYW4gZWxlbWVudCB3aGVuIGl0Ci0gICAgY2FuIG5vIGxvbmdlciBwcm92aWRlIGEgY2xvY2suIFRoZSBkZWZhdWx0IGJpbiBiZWhhdmlvdXIgaXMgdG8KLSAgICBjaGVjayBpZiB0aGUgbG9zdCBjbG9jayB3YXMgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgYmluLiBJZiBzbyBhbmQKLSAgICB0aGUgYmluIGlzIGN1cnJlbnRseSBpbiB0aGUgUExBWUlORyBzdGF0ZSwgdGhlIG1lc3NhZ2UgaXMgZm9yd2FyZGVkIHRvCi0gICAgdGhlIGJpbiBwYXJlbnQuCi0gICAgVGhpcyBtZXNzYWdlIGlzIGFsc28gZ2VuZXJhdGVkIHdoZW4gYSBjbG9jayBwcm92aWRlciBpcyByZW1vdmVkIGZyb20KLSAgICB0aGUgYmluLiBJZiB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBpdCBzaG91bGQKLSAgICBQQVVTRSB0aGUgcGlwZWxpbmUgYW5kIHNldCBpdCBiYWNrIHRvIFBMQVlJTkcgdG8gZm9yY2UgYSBuZXcgY2xvY2sKLSAgICBkaXN0cmlidXRpb24uCi0gICAgPC9wPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5HU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFPC9zcGFuPjwvcD48L3RkPgotPHRkPjxwPiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gZWxlbWVudAotICAgIGNhbiBwcm92aWRlIGEgY2xvY2suIFRoaXMgbW9zdGx5IGhhcHBlbnMgd2hlbiBhIG5ldyBjbG9jawotICAgIHByb3ZpZGVyIGlzIGFkZGVkIHRvIHRoZSBiaW4uIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiB0aGUgYmluIGlzIHRvCi0gICAgbWFyayB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNsb2NrIGFzIGRpcnR5LCB3aGljaCB3aWxsIHBlcmZvcm0gYSBjbG9jawotICAgIHJlY2FsY3VsYXRpb24gdGhlIG5leHQgdGltZSB0aGUgYmluIGlzIGFza2VkIHRvIHByb3ZpZGUgYSBjbG9jay4KLSAgICBUaGlzIG1lc3NhZ2UgaXMgbmV2ZXIgc2VudCB0b3QgdGhlIGFwcGxpY2F0aW9uIGJ1dCBpcyBmb3J3YXJkZWQgdG8KLSAgICB0aGUgcGFyZW50IG9mIHRoZSBiaW4uCi0gICAgPC9wPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5PVEhFUlM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+PHA+IHBvc3RlZCB1cHdhcmRzLjwvcD48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPHA+Ci0KLQotQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIGFuc3dlcmluZyB0byBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjoKLTwvcD4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+R1NUX1FVRVJZX0RVUkFUSU9OPC9zcGFuPjwvcD48L3RkPgotPHRkPjxwPklmIHRoZSBxdWVyeSBoYXMgYmVlbiBhc2tlZCBiZWZvcmUgd2l0aCB0aGUgc2FtZSBmb3JtYXQKLSAgICBhbmQgdGhlIGJpbiBpcyBhIHRvcGxldmVsIGJpbiAoaWUuIGhhcyBubyBwYXJlbnQpLAotICAgIHVzZSB0aGUgY2FjaGVkIHByZXZpb3VzIHZhbHVlLiBJZiBubyBwcmV2aW91cyB2YWx1ZSB3YXMgY2FjaGVkLCB0aGUKLSAgICBxdWVyeSBpcyBzZW50IHRvIGFsbCBzaW5rIGVsZW1lbnRzIGluIHRoZSBiaW4gYW5kIHRoZSBNQVhJTVVNIG9mIGFsbAotICAgIHZhbHVlcyBpcyByZXR1cm5lZC4gSWYgdGhlIGJpbiBpcyBhIHRvcGxldmVsIGJpbiB0aGUgdmFsdWUgaXMgY2FjaGVkLgotICAgIElmIG5vIHNpbmtzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJpbiwgdGhlIHF1ZXJ5IGZhaWxzLgotICAgIDwvcD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+R1NUX1FVRVJZX1BPU0lUSU9OPC9zcGFuPjwvcD48L3RkPgotPHRkPjxwPlRoZSBxdWVyeSBpcyBzZW50IHRvIGFsbCBzaW5rIGVsZW1lbnRzIGluIHRoZSBiaW4gYW5kIHRoZQotICAgIE1BWElNVU0gb2YgYWxsIHZhbHVlcyBpcyByZXR1cm5lZC4gSWYgbm8gc2lua3MgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYmluLAotICAgIHRoZSBxdWVyeSBmYWlscy4KLSAgICA8L3A+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPk9USEVSUzwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD50aGUgcXVlcnkgaXMgZm9yd2FyZGVkIHRvIGFsbCBzaW5rIGVsZW1lbnRzLCB0aGUgcmVzdWx0Ci0gICAgb2YgdGhlIGZpcnN0IHNpbmsgdGhhdCBhbnN3ZXJzIHRoZSBxdWVyeSBzdWNjZXNzZnVsbHkgaXMgcmV0dXJuZWQuIElmIG5vCi0gICAgc2luayBpcyBpbiB0aGUgYmluLCB0aGUgcXVlcnkgZmFpbHMuPC9wPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08cD4KLQotQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiB3aWxsIGJ5IGRlZmF1bHQgZm9yd2FyZCBhbnkgZXZlbnQgc2VudCB0byBpdCB0byBhbGwgc2luayBlbGVtZW50cy4KLUlmIGFsbCB0aGUgc2lua3MgcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdGhlIGJpbiB3aWxsIGFsc28gcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgZWxzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpcwotcmV0dXJuZWQuIElmIG5vIHNpbmtzIGFyZSBpbiB0aGUgYmluLCB0aGUgZXZlbnQgaGFuZGxlciB3aWxsIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4uCi0KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCaW4uZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaW4tbmV3Ij48L2E+PGgzPmdzdF9iaW5fbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi1nc3RfYmluX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgYmluIHdpdGggdGhlIGdpdmVuIG5hbWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpbi1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIG5hbWUgb2YgdGhlIG5ldyBiaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpbi1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iQWxpYXMgZm9yIHRyYW5zZmVyIG5vbmUsIHVzZWQgZm9yIG9iamVjdHMgd2l0aCBmbG9hdGluZyByZWZzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZsb2F0aW5nPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLWFkZCI+PC9hPjxoMz5nc3RfYmluX2FkZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jpbl9hZGQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIHRoZSBnaXZlbiBlbGVtZW50IHRvIHRoZSBiaW4uICBTZXRzIHRoZSBlbGVtZW50J3MgcGFyZW50LCBhbmQgdGh1cwotdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBlbGVtZW50LiBBbiBlbGVtZW50IGNhbiBvbmx5IGJlIGFkZGVkIHRvIG9uZSBiaW4uPC9wPgotPHA+SWYgdGhlIGVsZW1lbnQncyBwYWRzIGFyZSBsaW5rZWQgdG8gb3RoZXIgcGFkcywgdGhlIHBhZHMgd2lsbCBiZSB1bmxpbmtlZAotYmVmb3JlIHRoZSBlbGVtZW50IGlzIGFkZGVkIHRvIHRoZSBiaW4uPC9wPgotPGRpdiBjbGFzcz0ibm90ZSI+Ci1XaGVuIHlvdSBhZGQgYW4gZWxlbWVudCB0byBhbiBhbHJlYWR5LXJ1bm5pbmcgcGlwZWxpbmUsIHlvdSB3aWxsIGhhdmUgdG8KLXRha2UgY2FyZSB0byBzZXQgdGhlIHN0YXRlIG9mIHRoZSBuZXdseS1hZGRlZCBlbGVtZW50IHRvIHRoZSBkZXNpcmVkCi1zdGF0ZSAodXN1YWxseSBQTEFZSU5HIG9yIFBBVVNFRCwgc2FtZSB5b3Ugc2V0IHRoZSBwaXBlbGluZSB0byBvcmlnaW5hbGx5KQotd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGF0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKCk8L2NvZGU+PC9hPiwgb3IgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3luYy1zdGF0ZS13aXRoLXBhcmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoKTwvY29kZT48L2E+LgotVGhlIGJpbiBvciBwaXBlbGluZSB3aWxsIG5vdCB0YWtlIGNhcmUgb2YgdGhpcyBmb3IgeW91LgotPC9kaXY+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4tYWRkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gYWRkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4tYWRkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBlbGVtZW50IGNvdWxkIGJlIGFkZGVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZgotdGhlIGJpbiBkb2VzIG5vdCB3YW50IHRvIGFjY2VwdCB0aGUgZWxlbWVudC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpbi1yZW1vdmUiPjwvYT48aDM+Z3N0X2Jpbl9yZW1vdmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iaW5fcmVtb3ZlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlcyB0aGUgZWxlbWVudCBmcm9tIHRoZSBiaW4sIHVucGFyZW50aW5nIGl0IGFzIHdlbGwuCi1VbnBhcmVudGluZyB0aGUgZWxlbWVudCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IHdpbGwgYmUgZGVyZWZlcmVuY2VkLAotc28gaWYgdGhlIGJpbiBob2xkcyB0aGUgb25seSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQsIHRoZSBlbGVtZW50Ci13aWxsIGJlIGZyZWVkIGluIHRoZSBwcm9jZXNzIG9mIHJlbW92aW5nIGl0IGZyb20gdGhlIGJpbi4gIElmIHlvdQotd2FudCB0aGUgZWxlbWVudCB0byBzdGlsbCBleGlzdCBhZnRlciByZW1vdmluZywgeW91IG5lZWQgdG8gY2FsbAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVmIiB0aXRsZT0iZ3N0X29iamVjdF9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfcmVmKCk8L2NvZGU+PC9hPiBiZWZvcmUgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgYmluLjwvcD4KLTxwPklmIHRoZSBlbGVtZW50J3MgcGFkcyBhcmUgbGlua2VkIHRvIG90aGVyIHBhZHMsIHRoZSBwYWRzIHdpbGwgYmUgdW5saW5rZWQKLWJlZm9yZSB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIGJpbi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4tcmVtb3ZlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcmVtb3ZlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4tcmVtb3ZlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBlbGVtZW50IGNvdWxkIGJlIHJlbW92ZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmCi10aGUgYmluIGRvZXMgbm90IHdhbnQgdG8gcmVtb3ZlIHRoZSBlbGVtZW50LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLWdldC1ieS1uYW1lIj48L2E+PGgzPmdzdF9iaW5fZ2V0X2J5X25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9iaW5fZ2V0X2J5X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBmcm9tIGEgYmluLiBUaGlzCi1mdW5jdGlvbiByZWN1cnNlcyBpbnRvIGNoaWxkIGJpbnMuPC9wPgotPHA+UmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm8gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIGZvdW5kIGluIHRoZSBiaW4uPC9wPgotPHA+TVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHJlZmVyZW5jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWdldC1ieS1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50IG5hbWUgdG8gc2VhcmNoIGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpbi1nZXQtYnktbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB3aXRoIHRoZSBnaXZlbgotbmFtZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaW4tZ2V0LWJ5LW5hbWUtcmVjdXJzZS11cCI+PC9hPjxoMz5nc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBlbGVtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGlzIGJpbi4gSWYgdGhlCi1lbGVtZW50IGlzIG5vdCBmb3VuZCwgYSByZWN1cnNpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBwYXJlbnQgYmluLjwvcD4KLTxwPlJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+bm8gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIGZvdW5kIGluIHRoZSBiaW48L3A+PC9saT48L3VsPjwvZGl2PgotPHA+TVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHJlZmVyZW5jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWdldC1ieS1uYW1lLXJlY3Vyc2UtdXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVsZW1lbnQgbmFtZSB0byBzZWFyY2ggZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWdldC1ieS1uYW1lLXJlY3Vyc2UtdXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4KLW5hbWUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLWdldC1ieS1pbnRlcmZhY2UiPjwvYT48aDM+Z3N0X2Jpbl9nZXRfYnlfaW50ZXJmYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi1nc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBpZmFjZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Mb29rcyBmb3IgYW4gZWxlbWVudCBpbnNpZGUgdGhlIGJpbiB0aGF0IGltcGxlbWVudHMgdGhlIGdpdmVuCi1pbnRlcmZhY2UuIElmIHN1Y2ggYW4gZWxlbWVudCBpcyBmb3VuZCwgaXQgcmV0dXJucyB0aGUgZWxlbWVudC4KLVlvdSBjYW4gY2FzdCB0aGlzIGVsZW1lbnQgdG8gdGhlIGdpdmVuIGludGVyZmFjZSBhZnRlcndhcmRzLiAgSWYgeW91IHdhbnQKLWFsbCBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGUgaW50ZXJmYWNlLCB1c2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtYWxsLWJ5LWludGVyZmFjZSIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSgpPC9jb2RlPjwvYT4uIFRoaXMgZnVuY3Rpb24gcmVjdXJzZXMgaW50byBjaGlsZCBiaW5zLjwvcD4KLTxwPk1UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCByZWZlcmVuY2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpbi1nZXQtYnktaW50ZXJmYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWZhY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBhbiBpbnRlcmZhY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4tZ2V0LWJ5LWludGVyZmFjZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaW5zaWRlIHRoZSBiaW4gaW1wbGVtZW50aW5nIHRoZSBpbnRlcmZhY2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaW4taXRlcmF0ZS1lbGVtZW50cyI+PC9hPjxoMz5nc3RfYmluX2l0ZXJhdGVfZWxlbWVudHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPsKgKgotZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIGFuIGl0ZXJhdG9yIGZvciB0aGUgZWxlbWVudHMgaW4gdGhpcyBiaW4uPC9wPgotPHA+TVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4taXRlcmF0ZS1lbGVtZW50cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4taXRlcmF0ZS1lbGVtZW50cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtcmVjdXJzZSI+PC9hPjxoMz5nc3RfYmluX2l0ZXJhdGVfcmVjdXJzZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyBhbiBpdGVyYXRvciBmb3IgdGhlIGVsZW1lbnRzIGluIHRoaXMgYmluLgotVGhpcyBpdGVyYXRvciByZWN1cnNlcyBpbnRvIEdzdEJpbiBjaGlsZHJlbi48L3A+Ci08cD5NVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpbi1pdGVyYXRlLXJlY3Vyc2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtcmVjdXJzZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtc2lua3MiPjwvYT48aDM+Z3N0X2Jpbl9pdGVyYXRlX3NpbmtzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLWdzdF9iaW5faXRlcmF0ZV9zaW5rcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyBhbiBpdGVyYXRvciBmb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBiaW4gdGhhdCBoYXZlIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1GTEFHLVNJTks6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FTEVNRU5UX0ZMQUdfU0lOSzwvc3Bhbj48L2E+IGZsYWcgc2V0LjwvcD4KLTxwPk1UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtc2lua3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtc2lua3MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4sCi1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpbi1pdGVyYXRlLXNvcnRlZCI+PC9hPjxoMz5nc3RfYmluX2l0ZXJhdGVfc29ydGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLWdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgYW4gaXRlcmF0b3IgZm9yIHRoZSBlbGVtZW50cyBpbiB0aGlzIGJpbiBpbiB0b3BvbG9naWNhbGx5Ci1zb3J0ZWQgb3JkZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZWxlbWVudHMgYXJlIHJldHVybmVkIGZyb20KLXRoZSBtb3N0IGRvd25zdHJlYW0gZWxlbWVudHMgKHNpbmtzKSB0byB0aGUgc291cmNlcy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byBwZXJmb3JtIHRoZSBzdGF0ZSBjaGFuZ2VzCi1vZiB0aGUgYmluIGVsZW1lbnRzIGFuZCBmb3IgY2xvY2sgc2VsZWN0aW9uLjwvcD4KLTxwPk1UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtc29ydGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpbi1pdGVyYXRlLXNvcnRlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtc291cmNlcyI+PC9hPjxoMz5nc3RfYmluX2l0ZXJhdGVfc291cmNlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfYmluX2l0ZXJhdGVfc291cmNlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyBhbiBpdGVyYXRvciBmb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBiaW4gdGhhdCBoYXZlIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1GTEFHLVNPVVJDRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VMRU1FTlRfRkxBR19TT1VSQ0U8L3NwYW4+PC9hPiBmbGFnIHNldC48L3A+Ci08cD5NVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpbi1pdGVyYXRlLXNvdXJjZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtc291cmNlcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLWl0ZXJhdGUtYWxsLWJ5LWludGVyZmFjZSI+PC9hPjxoMz5nc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gaWZhY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TG9va3MgZm9yIGFsbCBlbGVtZW50cyBpbnNpZGUgdGhlIGJpbiB0aGF0IGltcGxlbWVudHMgdGhlIGdpdmVuCi1pbnRlcmZhY2UuIFlvdSBjYW4gc2FmZWx5IGNhc3QgYWxsIHJldHVybmVkIGVsZW1lbnRzIHRvIHRoZSBnaXZlbiBpbnRlcmZhY2UuCi1UaGUgZnVuY3Rpb24gcmVjdXJzZXMgaW5zaWRlIGNoaWxkIGJpbnMuIFRoZSBpdGVyYXRvciB3aWxsIHlpZWxkIGEgc2VyaWVzCi1vZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0aGF0IHNob3VsZCBiZSB1bnJlZmZlZCBhZnRlciB1c2UuPC9wPgotPHA+TVQgc2FmZS4gIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4taXRlcmF0ZS1hbGwtYnktaW50ZXJmYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWZhY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBhbiBpbnRlcmZhY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4taXRlcmF0ZS1hbGwtYnktaW50ZXJmYWNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+Ci1mb3IgYWxsIGVsZW1lbnRzIGluIHRoZSBiaW4gaW1wbGVtZW50aW5nIHRoZSBnaXZlbiBpbnRlcmZhY2UsCi1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpbi1yZWNhbGN1bGF0ZS1sYXRlbmN5Ij48L2E+PGgzPmdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5RdWVyeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+Ci0gZm9yIHRoZSBjdXJyZW50IGxhdGVuY3kgdXNpbmcgYW5kIHJlY29uZmlndXJlcyB0aGlzIGxhdGVuY3kgdG8gYWxsIHRoZQotZWxlbWVudHMgd2l0aCBhIExBVEVOQ1kgZXZlbnQuPC9wPgotPHA+VGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IGNhbGxlZCBvbiB0aGUgcGlwZWxpbmUgd2hlbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtTEFURU5DWTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfTEFURU5DWTwvc3Bhbj48L2E+Ci1pcyBwb3N0ZWQgb24gdGhlIGJ1cy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHNpbXBseSBlbWl0cyB0aGUgJ2RvLWxhdGVuY3knIHNpZ25hbCBzbyBhbnkgY3VzdG9tIGxhdGVuY3kKLWNhbGN1bGF0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLXJlY2FsY3VsYXRlLWxhdGVuY3kucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLXJlY2FsY3VsYXRlLWxhdGVuY3kucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGxhdGVuY3kgY291bGQgYmUgcXVlcmllZCBhbmQgcmVjb25maWd1cmVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLWFkZC1tYW55Ij48L2E+PGgzPmdzdF9iaW5fYWRkX21hbnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmluX2FkZF9tYW55ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudF8xPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LXRlcm1pbmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byBhIGJpbi4gIFRoaXMgZnVuY3Rpb24gaXMKLWVxdWl2YWxlbnQgdG8gY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQiIHRpdGxlPSJnc3RfYmluX2FkZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9hZGQoKTwvY29kZT48L2E+IGZvciBlYWNoIG1lbWJlciBvZiB0aGUgbGlzdC4gVGhlIHJldHVybgotdmFsdWUgb2YgZWFjaCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQiIHRpdGxlPSJnc3RfYmluX2FkZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9hZGQoKTwvY29kZT48L2E+IGlzIGlnbm9yZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpbi1hZGQtbWFueS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gZWxlbWVudCB0byBhZGQgdG8gdGhlIGJpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRvIGFkZCB0byB0aGUgYmluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpbi1yZW1vdmUtbWFueSI+PC9hPjxoMz5nc3RfYmluX3JlbW92ZV9tYW55wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jpbl9yZW1vdmVfbWFueSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnRfMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlIGEgbGlzdCBvZiBlbGVtZW50cyBmcm9tIGEgYmluLiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQKLXRvIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlIiB0aXRsZT0iZ3N0X2Jpbl9yZW1vdmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fcmVtb3ZlKCk8L2NvZGU+PC9hPiB3aXRoIGVhY2ggbWVtYmVyIG9mIHRoZSBsaXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4tcmVtb3ZlLW1hbnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50XzE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGZpcnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHJlbW92ZSBmcm9tIHRoZSBiaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LXRlcm1pbmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byByZW1vdmUgZnJvbSB0aGUgYmluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpbi1maW5kLXVubGlua2VkLXBhZCI+PC9hPjxoMz5nc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiBkaXJlY3Rpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVjdXJzaXZlbHkgbG9va3MgZm9yIGVsZW1lbnRzIHdpdGggYW4gdW5saW5rZWQgcGFkIG9mIHRoZSBnaXZlbgotZGlyZWN0aW9uIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGJpbiBhbmQgcmV0dXJucyBhbiB1bmxpbmtlZCBwYWQKLWlmIG9uZSBpcyBmb3VuZCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IG90aGVyd2lzZS4gSWYgYSBwYWQgaXMgZm91bmQsIHRoZSBjYWxsZXIKLW93bnMgYSByZWZlcmVuY2UgdG8gaXQgYW5kIHNob3VsZCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBvbiB0aGUKLXBhZCB3aGVuIGl0IGlzIG5vdCBuZWVkZWQgYW55IGxvbmdlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLWZpbmQtdW5saW5rZWQtcGFkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJpbiBpbiB3aGljaCB0byBsb29rIGZvciBlbGVtZW50cyB3aXRoIHVubGlua2VkIHBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGlyZWN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+d2hldGhlciB0byBsb29rIGZvciBhbiB1bmxpbmtlZCBzb3VyY2Ugb3Igc2luayBwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4tZmluZC11bmxpbmtlZC1wYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB1bmxpbmtlZCBwYWQgb2YgdGhlIGdpdmVuCi1kaXJlY3Rpb24sIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmluLXN5bmMtY2hpbGRyZW4tc3RhdGVzIj48L2E+PGgzPmdzdF9iaW5fc3luY19jaGlsZHJlbl9zdGF0ZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iaW5fc3luY19jaGlsZHJlbl9zdGF0ZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN5bmNocm9uaXplcyB0aGUgc3RhdGUgb2YgZXZlcnkgY2hpbGQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPgotIHdpdGggdGhlIHN0YXRlCi1vZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+Ci0uIFNlZSBhbHNvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3luYy1zdGF0ZS13aXRoLXBhcmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaW4tc3luYy1jaGlsZHJlbi1zdGF0ZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmluLXN5bmMtY2hpbGRyZW4tc3RhdGVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN5bmNpbmcgdGhlIHN0YXRlIHdhcyBzdWNjZXNzZnVsIGZvciBhbGwgY2hpbGRyZW4sCi1vdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CSU4tSVMtTk8tUkVTWU5DOkNBUFMiPjwvYT48aDM+R1NUX0JJTl9JU19OT19SRVNZTkMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQklOX0lTX05PX1JFU1lOQyhiaW4pICAgICAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVChiaW4sR1NUX0JJTl9GTEFHX05PX1JFU1lOQykpCi08L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT4KLSB3aWxsIHJlc3luYyBpdHMgc3RhdGUgY2hhbmdlIHdoZW4gZWxlbWVudHMgYXJlIGFkZGVkIGFuZAotcmVtb3ZlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQklOLUlTLU5PLVJFU1lOQy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDEwLmh0bWwjYXBpLWluZGV4LTEuMC41Ij4xLjAuNTwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CSU4tQ0hJTERSRU46Q0FQUyI+PC9hPjxoMz5HU1RfQklOX0NISUxEUkVOKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JJTl9DSElMRFJFTihiaW4pCQkoR1NUX0JJTl9DQVNUKGJpbiktJmd0O2NoaWxkcmVuKQotPC9wcmU+Ci08cD5HZXRzIHRoZSBsaXN0IHdpdGggY2hpbGRyZW4gaW4gYSBiaW4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJJTi1DSElMRFJFTi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJJTi1DSElMRFJFTi1DT09LSUU6Q0FQUyI+PC9hPjxoMz5HU1RfQklOX0NISUxEUkVOX0NPT0tJRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CSU5fQ0hJTERSRU5fQ09PS0lFKGJpbinCoChHU1RfQklOX0NBU1QoYmluKS0mZ3Q7Y2hpbGRyZW5fY29va2llKQotPC9wcmU+Ci08cD5HZXRzIHRoZSBjaGlsZHJlbiBjb29raWUgdGhhdCB3YXRjaGVzIHRoZSBjaGlsZHJlbiBsaXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CSU4tQ0hJTERSRU4tQ09PS0lFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQklOLU5VTUNISUxEUkVOOkNBUFMiPjwvYT48aDM+R1NUX0JJTl9OVU1DSElMRFJFTigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CSU5fTlVNQ0hJTERSRU4oYmluKcKgKEdTVF9CSU5fQ0FTVChiaW4pLSZndDtudW1jaGlsZHJlbikKLTwvcHJlPgotPHA+R2V0cyB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIGEgYmluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CSU4tTlVNQ0hJTERSRU4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmluLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCaW4tc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCaW48L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCaW4gewotICAvKiBvdXIgY2hpbGRyZW4sIHN1YmNsYXNzIGFyZSBzdXBwb3NlZCB0byB1cGRhdGUgdGhlc2UKLSAgICogZmllbGRzIHRvIHJlZmxlY3QgdGhlaXIgc3RhdGUgd2l0aCBfaXRlcmF0ZV8qKCkgKi8KLSAgZ2ludAkJIG51bWNoaWxkcmVuOwotICBHTGlzdAkJKmNoaWxkcmVuOwotICBndWludDMyCSBjaGlsZHJlbl9jb29raWU7Ci0KLSAgR3N0QnVzICAgICAgICAqY2hpbGRfYnVzOwotICBHTGlzdCAgICAgICAgICptZXNzYWdlczsKLQotICBnYm9vbGVhbgkgcG9sbGluZzsKLSAgZ2Jvb2xlYW4gICAgICAgc3RhdGVfZGlydHk7Ci0KLSAgZ2Jvb2xlYW4gICAgICAgY2xvY2tfZGlydHk7Ci0gIEdzdENsb2NrwqAqcHJvdmlkZWRfY2xvY2s7Ci0gIEdzdEVsZW1lbnQgICAgKmNsb2NrX3Byb3ZpZGVyOwotfTsKLTwvcHJlPgotPHA+VGhlIEdzdEJpbiBiYXNlIGNsYXNzLiBTdWJjbGFzc2VzIGNhbiBhY2Nlc3MgdGhlc2UgZmllbGRzIHByb3ZpZGVkCi10aGUgTE9DSyBpcyB0YWtlbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCaW4ubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmluLXN0cnVjdC5udW1jaGlsZHJlbiI+PC9hPm51bWNoaWxkcmVuPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3QuY2hpbGRyZW4iPjwvYT5jaGlsZHJlbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBsaXN0IG9mIGNoaWxkcmVuIGluIHRoaXMgYmluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuRWxlbWVudF08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW4tc3RydWN0LmNoaWxkcmVuLWNvb2tpZSI+PC9hPmNoaWxkcmVuX2Nvb2tpZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dXBkYXRlZCB3aGVuZXZlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2hpbGRyZW48L2NvZGU+PC9lbT4KLWNoYW5nZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3QuY2hpbGQtYnVzIj48L2E+Y2hpbGRfYnVzPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5pbnRlcm5hbCBidXMgZm9yIGhhbmRsaW5nIGNoaWxkIG1lc3NhZ2VzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3QubWVzc2FnZXMiPjwvYT5tZXNzYWdlczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+IHF1ZXVlZCBhbmQgY2FjaGVkIG1lc3NhZ2VzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuTWVzc2FnZV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbi1zdHJ1Y3QucG9sbGluZyI+PC9hPnBvbGxpbmc8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBiaW4gaXMgY3VycmVudGx5IGNhbGN1bGF0aW5nIGl0cyBzdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW4tc3RydWN0LnN0YXRlLWRpcnR5Ij48L2E+c3RhdGVfZGlydHk8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBiaW4gbmVlZHMgdG8gcmVjYWxjdWxhdGUgaXRzIHN0YXRlIChkZXByZWNhdGVkKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW4tc3RydWN0LmNsb2NrLWRpcnR5Ij48L2E+Y2xvY2tfZGlydHk8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBiaW4gbmVlZHMgdG8gc2VsZWN0IGEgbmV3IGNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW4tc3RydWN0LnByb3ZpZGVkLWNsb2NrIj48L2E+cHJvdmlkZWRfY2xvY2s8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBsYXN0IGNsb2NrIHNlbGVjdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW4tc3RydWN0LmNsb2NrLXByb3ZpZGVyIj48L2E+Y2xvY2tfcHJvdmlkZXI8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50IHRoYXQgcHJvdmlkZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3ZpZGVkX2Nsb2NrPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJpbkNsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RCaW5DbGFzczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEJpbkNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiB2aXJ0dWFsIG1ldGhvZHMgZm9yIHN1YmNsYXNzZXMgKi8KLSAgZ2Jvb2xlYW7CoCgqYWRkX2VsZW1lbnQpCQkoR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmVsZW1lbnQpOwotICBnYm9vbGVhbsKgKCpyZW1vdmVfZWxlbWVudCnCoChHc3RCaW4gKmJpbiwgR3N0RWxlbWVudCAqZWxlbWVudCk7Ci0KLSAgdm9pZAkJKCpoYW5kbGVfbWVzc2FnZSnCoChHc3RCaW4gKmJpbiwgR3N0TWVzc2FnZSAqbWVzc2FnZSk7Ci0KLSAgLyogc2lnbmFsICovCi0gIHZvaWQgICAgICAgICAgKCpkZWVwX2VsZW1lbnRfYWRkZWQpICAgKEdzdEJpbiAqYmluLCBHc3RCaW4gKnN1Yl9iaW4sIEdzdEVsZW1lbnQgKmNoaWxkKTsKLSAgdm9pZCAgICAgICAgICAoKmRlZXBfZWxlbWVudF9yZW1vdmVkKSAoR3N0QmluICpiaW4sIEdzdEJpbiAqc3ViX2JpbiwgR3N0RWxlbWVudCAqY2hpbGQpOwotfTsKLTwvcHJlPgotPHA+U3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGRfZWxlbWVudDwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVtb3ZlX2VsZW1lbnQ8L2NvZGU+PC9lbT4KLSB0bwotdXBkYXRlIHRoZSBsaXN0IG9mIGNoaWxkcmVuIGluIHRoZSBiaW4uPC9wPgotPHA+VGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVfbWVzc2FnZTwvY29kZT48L2VtPgotIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiB0byBpbXBsZW1lbnQgY3VzdG9tCi1tZXNzYWdlIGhhbmRsaW5nLiAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhhbmRsZV9tZXNzYWdlPC9jb2RlPjwvZW0+Ci0gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBtZXNzYWdlLCBqdXN0IGxpa2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcG9zdC1tZXNzYWdlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZTwvc3Bhbj48L2E+LjwvcD4KLTxwPlRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudF9hZGRlZF9kZWVwPC9jb2RlPjwvZW0+Ci0gdmZ1bmMgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIG5ldyBlbGVtZW50IGhhcyBiZWVuCi1hZGRlZCB0byBhbnkgYmluIGluc2lkZSB0aGlzIGJpbiwgc28gaXQgd2lsbCBhbHNvIGJlIGNhbGxlZCBpZiBhIG5ldyBjaGlsZAotd2FzIGFkZGVkIHRvIGEgc3ViLWJpbiBvZiB0aGlzIGJpbi4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gaW1wbGVtZW50YXRpb25zIHRoYXQgb3ZlcnJpZGUKLXRoaXMgbWVzc2FnZSBzaG91bGQgY2hhaW4gdXAgdG8gdGhlIHBhcmVudCBjbGFzcyBpbXBsZW1lbnRhdGlvbiBzbyB0aGUKLWVsZW1lbnQtYWRkZWQtZGVlcCBzaWduYWwgaXMgZW1pdHRlZCBvbiBhbGwgcGFyZW50cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCaW5DbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmluQ2xhc3MuYWRkLWVsZW1lbnQiPjwvYT5hZGRfZWxlbWVudDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+bWV0aG9kIHRvIGFkZCBhbiBlbGVtZW50IHRvIGEgYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmluQ2xhc3MucmVtb3ZlLWVsZW1lbnQiPjwvYT5yZW1vdmVfZWxlbWVudDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+bWV0aG9kIHRvIHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYSBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW5DbGFzcy5oYW5kbGUtbWVzc2FnZSI+PC9hPmhhbmRsZV9tZXNzYWdlPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5tZXRob2QgdG8gaGFuZGxlIGEgbWVzc2FnZSBmcm9tIHRoZSBjaGlsZHJlbjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpbkNsYXNzLmRlZXAtZWxlbWVudC1hZGRlZCI+PC9hPmRlZXBfZWxlbWVudF9hZGRlZDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaW5DbGFzcy5kZWVwLWVsZW1lbnQtcmVtb3ZlZCI+PC9hPmRlZXBfZWxlbWVudF9yZW1vdmVkPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmluRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RCaW5GbGFnczwvaDM+Ci08cD5Hc3RCaW5GbGFncyBhcmUgYSBzZXQgb2YgZmxhZ3Mgc3BlY2lmaWMgdG8gYmlucy4gTW9zdCBhcmUgc2V0L3VzZWQKLWludGVybmFsbHkuIFRoZXkgY2FuIGJlIGNoZWNrZWQgdXNpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX09CSkVDVF9GTEFHX0lTX1NFVCgpPC9jb2RlPjwvYT4gbWFjcm8sCi1hbmQgKHVuKXNldCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9GTEFHX1NFVCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9PQkpFQ1RfRkxBR19TRVQoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfVU5TRVQoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfT0JKRUNUX0ZMQUdfVU5TRVQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJpbkZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJJTi1GTEFHLU5PLVJFU1lOQzpDQVBTIj48L2E+R1NUX0JJTl9GTEFHX05PX1JFU1lOQzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5kb24ndCByZXN5bmMgYSBzdGF0ZSBjaGFuZ2Ugd2hlbiBlbGVtZW50cyBhcmUKLSAgICAgICAgICAgIGFkZGVkIG9yIGxpbmtlZCBpbiB0aGUgYmluIChTaW5jZSAxLjAuNSk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJJTi1GTEFHLVNUUkVBTVMtQVdBUkU6Q0FQUyI+PC9hPkdTVF9CSU5fRkxBR19TVFJFQU1TX0FXQVJFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkluZGljYXRlcyB3aGV0aGVyIHRoZSBiaW4gY2FuIGhhbmRsZSBlbGVtZW50cwotICAgICAgICAgICAgdGhhdCBhZGQvcmVtb3ZlIHNvdXJjZSBwYWRzIGF0IGFueSBwb2ludCBpbiB0aW1lIHdpdGhvdXQKLSAgICAgICAgICAgIGZpcnN0IHBvc3RpbmcgYSBuby1tb3JlLXBhZHMgc2lnbmFsIChTaW5jZSAxLjEwKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQklOLUZMQUctTEFTVDpDQVBTIj48L2E+R1NUX0JJTl9GTEFHX0xBU1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGxhc3QgZW51bSBpbiB0aGUgc2VyaWVzIG9mIGZsYWdzIGZvciBiaW5zLgotRGVyaXZlZCBjbGFzc2VzIGNhbiB1c2UgdGhpcyBhcyBmaXJzdCB2YWx1ZSBpbiBhIGxpc3Qgb2YgZmxhZ3MuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJpbi5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmluLS1hc3luYy1oYW5kbGluZyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFzeW5jLWhhbmRsaW5n4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhc3luYy1oYW5kbGluZ+KAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPklmIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIHRoZSBiaW4gd2lsbCBoYW5kbGUgYXN5bmNocm9ub3VzIHN0YXRlIGNoYW5nZXMuCi1UaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgdGhlIGJpbiBzdWJjbGFzcyBpcyBtb2RpZnlpbmcgdGhlIHN0YXRlCi1vZiBpdHMgY2hpbGRyZW4gb24gaXRzIG93bi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJpbi0tbWVzc2FnZS1mb3J3YXJkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWVzc2FnZS1mb3J3YXJk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtZXNzYWdlLWZvcndhcmTigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkZvcndhcmQgYWxsIGNoaWxkcmVuIG1lc3NhZ2VzLCBldmVuIHRob3NlIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgZmlsdGVyZWQgYnkKLXRoZSBiaW4uIFRoaXMgY2FuIGJlIGludGVyZXN0aW5nIHdoZW4gb25lIHdhbnRzIHRvIGJlIG5vdGlmaWVkIG9mIHRoZSBFT1MKLXN0YXRlIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGZvciBleGFtcGxlLjwvcD4KLTxwPlRoZSBtZXNzYWdlcyBhcmUgY29udmVydGVkIHRvIGFuIEVMRU1FTlQgbWVzc2FnZSB3aXRoIHRoZSBiaW4gYXMgdGhlCi1zb3VyY2UuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1lc3NhZ2UgaXMgbmFtZWQgJ0dzdEJpbkZvcndhcmRlZCcgYW5kIGNvbnRhaW5zCi1hIGZpZWxkIG5hbWVkICdtZXNzYWdlJyBvZiB0eXBlIEdTVF9UWVBFX01FU1NBR0UgdGhhdCBjb250YWlucyB0aGUgb3JpZ2luYWwKLWZvcndhcmRlZCBtZXNzYWdlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCaW4uc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmluLWRlZXAtZWxlbWVudC1hZGRlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRlZXAtZWxlbWVudC1hZGRlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAgICAgKmJpbiwKLSAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICAgICAqc3ViX2JpbiwKLSAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+V2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSBlbGVtZW50IHdhcyBhZGRlZCB0byBzdWJfYmluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJpbi1kZWVwLWVsZW1lbnQtYWRkZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN1Yl9iaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gdGhlIGVsZW1lbnQgd2FzIGFkZGVkIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgYWRkZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1Yl9iaW48L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJpbi1kZWVwLWVsZW1lbnQtcmVtb3ZlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRlZXAtZWxlbWVudC1yZW1vdmVk4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICAgICAqYmluLAotICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gICAgICpzdWJfYmluLAotICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5XaWxsIGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSBzdWJfYmluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJpbi1kZWVwLWVsZW1lbnQtcmVtb3ZlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3ViX2JpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiB0aGUgZWxlbWVudCB3YXMgcmVtb3ZlZCBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJfYmluPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCaW4tZG8tbGF0ZW5jeSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRvLWxhdGVuY3nigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAgKmJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YSk8L3ByZT4KLTxwPldpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBiaW4gbmVlZHMgdG8gcGVyZm9ybSBsYXRlbmN5IGNhbGN1bGF0aW9ucy4gVGhpcwotc2lnbmFsIGlzIG9ubHkgZW1pdHRlZCBmb3IgdG9wbGV2ZWwgYmlucyBvciB3aGVuIGFzeW5jLWhhbmRsaW5nIGlzCi1lbmFibGVkLjwvcD4KLTxwPk9ubHkgb25lIHNpZ25hbCBoYW5kbGVyIGlzIGludm9rZWQuIElmIG5vIHNpZ25hbHMgYXJlIGNvbm5lY3RlZCwgdGhlCi1kZWZhdWx0IGhhbmRsZXIgaXMgaW52b2tlZCwgd2hpY2ggd2lsbCBxdWVyeSBhbmQgZGlzdHJpYnV0ZSB0aGUgbG93ZXN0Ci1wb3NzaWJsZSBsYXRlbmN5IHRvIGFsbCBzaW5rcy48L3A+Ci08cD5Db25uZWN0IHRvIHRoaXMgc2lnbmFsIGlmIHRoZSBkZWZhdWx0IGxhdGVuY3kgY2FsY3VsYXRpb25zIGFyZSBub3QKLXN1ZmZpY2llbnQsIGxpa2Ugd2hlbiB5b3UgbmVlZCBkaWZmZXJlbnQgbGF0ZW5jaWVzIGZvciBkaWZmZXJlbnQgc2lua3MgaW4KLXRoZSBzYW1lIHBpcGVsaW5lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJpbi1kby1sYXRlbmN5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmluLWVsZW1lbnQtYWRkZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxlbGVtZW50LWFkZGVk4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICAgICAqYmluLAotICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5XaWxsIGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgd2FzIGFkZGVkIHRvIHRoZSBiaW4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QmluLWVsZW1lbnQtYWRkZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgYWRkZWQgdG8gdGhlIGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCaW4tZWxlbWVudC1yZW1vdmVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZWxlbWVudC1yZW1vdmVk4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICAgICAqYmluLAotICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5XaWxsIGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgYmluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJpbi1lbGVtZW50LXJlbW92ZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdEJ1ZmZlci5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RCdWZmZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMxNTg3OS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdEJ1ZmZlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzk3MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0QnVmZmVyOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJ1ZmZlci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVmZmVyLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RCaW4uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RCdWZmZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RCdWZmZXIudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdWZmZXI8L3NwYW4+PC9oMj4KLTxwPkdzdEJ1ZmZlciDigJQgRGF0YS1wYXNzaW5nIGJ1ZmZlciB0eXBlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlci5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUdTOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdTKCkiPkdTVF9CVUZGRVJfRkxBR1M8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUlTLVNFVDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCgpIj5HU1RfQlVGRkVSX0ZMQUdfSVNfU0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRkxBR19TRVQoKSI+R1NUX0JVRkZFUl9GTEFHX1NFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRkxBR19VTlNFVCgpIj5HU1RfQlVGRkVSX0ZMQUdfVU5TRVQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1QVFM6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfUFRTKCkiPkdTVF9CVUZGRVJfUFRTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRFRTOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0RUUygpIj5HU1RfQlVGRkVSX0RUUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURUUy1PUi1QVFM6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRFRTX09SX1BUUygpIj5HU1RfQlVGRkVSX0RUU19PUl9QVFM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1EVVJBVElPTjpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9EVVJBVElPTigpIj5HU1RfQlVGRkVSX0RVUkFUSU9OPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVCgpIj5HU1RfQlVGRkVSX09GRlNFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1FTkQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfT0ZGU0VUX0VORCgpIj5HU1RfQlVGRkVSX09GRlNFVF9FTkQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1EVVJBVElPTi1JUy1WQUxJRDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCgpIj5HU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItUFRTLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX1BUU19JU19WQUxJRCgpIj5HU1RfQlVGRkVSX1BUU19JU19WQUxJRDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURUUy1JUy1WQUxJRDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQoKSI+R1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEKCkiPkdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULUVORC1JUy1WQUxJRDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEKCkiPkdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUlTLURJU0NPTlQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfSVNfRElTQ09OVCgpIj5HU1RfQlVGRkVSX0lTX0RJU0NPTlQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldyIgdGl0bGU9ImdzdF9idWZmZXJfbmV3wqAoKSI+Z3N0X2J1ZmZlcl9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LWFsbG9jYXRlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGXCoCgpIj5nc3RfYnVmZmVyX25ld19hbGxvY2F0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctd3JhcHBlZCIgdGl0bGU9ImdzdF9idWZmZXJfbmV3X3dyYXBwZWTCoCgpIj5nc3RfYnVmZmVyX25ld193cmFwcGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldy13cmFwcGVkLWZ1bGwiIHRpdGxlPSJnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGzCoCgpIj5nc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZWbCoCgpIj5nc3RfYnVmZmVyX3JlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiIHRpdGxlPSJnc3RfYnVmZmVyX3VucmVmwqAoKSI+Z3N0X2J1ZmZlcl91bnJlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtc2l6ZXMiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9zaXplc8KgKCkiPmdzdF9idWZmZXJfZ2V0X3NpemVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1zaXplIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfc2l6ZcKgKCkiPmdzdF9idWZmZXJfZ2V0X3NpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LXNpemVzLXJhbmdlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfc2l6ZXNfcmFuZ2XCoCgpIj5nc3RfYnVmZmVyX2dldF9zaXplc19yYW5nZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXNpemUtcmFuZ2UiIHRpdGxlPSJnc3RfYnVmZmVyX3Jlc2l6ZV9yYW5nZcKgKCkiPmdzdF9idWZmZXJfcmVzaXplX3JhbmdlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXNpemUiIHRpdGxlPSJnc3RfYnVmZmVyX3Jlc2l6ZcKgKCkiPmdzdF9idWZmZXJfcmVzaXplPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zZXQtc2l6ZSIgdGl0bGU9ImdzdF9idWZmZXJfc2V0X3NpemXCoCgpIj5nc3RfYnVmZmVyX3NldF9zaXplPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tYXgtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfbWF4X21lbW9yecKgKCkiPmdzdF9idWZmZXJfZ2V0X21heF9tZW1vcnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcGVlay1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3BlZWtfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9wZWVrX21lbW9yeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfbl9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX25fbWVtb3J5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pbnNlcnQtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXBsYWNlLW1lbW9yeS1yYW5nZSIgdGl0bGU9ImdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnlfcmFuZ2XCoCgpIj5nc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5X3JhbmdlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tZW1vcnktcmFuZ2UiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tZW1vcnlfcmFuZ2XCoCgpIj5nc3RfYnVmZmVyX2dldF9tZW1vcnlfcmFuZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlbW92ZS1tZW1vcnktcmFuZ2UiIHRpdGxlPSJnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2XCoCgpIj5nc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZmluZC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9maW5kX21lbW9yeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcHJlcGVuZC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3ByZXBlbmRfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9wcmVwZW5kX21lbW9yeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItYXBwZW5kLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfYXBwZW5kX21lbW9yecKgKCkiPmdzdF9idWZmZXJfYXBwZW5kX21lbW9yeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVwbGFjZS1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9yZXBsYWNlX21lbW9yeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVwbGFjZS1hbGwtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZXBsYWNlX2FsbF9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX3JlcGxhY2VfYWxsX21lbW9yeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9nZXRfbWVtb3J5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1hbGwtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfYWxsX21lbW9yecKgKCkiPmdzdF9idWZmZXJfZ2V0X2FsbF9tZW1vcnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlbW92ZS1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlbW92ZS1hbGwtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZW1vdmVfYWxsX21lbW9yecKgKCkiPmdzdF9idWZmZXJfcmVtb3ZlX2FsbF9tZW1vcnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtYWxsLW1lbW9yeS13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfaXNfYWxsX21lbW9yeV93cml0YWJsZcKgKCkiPmdzdF9idWZmZXJfaXNfYWxsX21lbW9yeV93cml0YWJsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pcy1tZW1vcnktcmFuZ2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX21lbW9yeV9yYW5nZV93cml0YWJsZcKgKCkiPmdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1hcCIgdGl0bGU9ImdzdF9idWZmZXJfbWFwwqAoKSI+Z3N0X2J1ZmZlcl9tYXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWFwLXJhbmdlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9tYXBfcmFuZ2XCoCgpIj5nc3RfYnVmZmVyX21hcF9yYW5nZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5tYXAiIHRpdGxlPSJnc3RfYnVmZmVyX3VubWFwwqAoKSI+Z3N0X2J1ZmZlcl91bm1hcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWVtY21wIiB0aXRsZT0iZ3N0X2J1ZmZlcl9tZW1jbXDCoCgpIj5nc3RfYnVmZmVyX21lbWNtcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1leHRyYWN0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9leHRyYWN0wqAoKSI+Z3N0X2J1ZmZlcl9leHRyYWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1leHRyYWN0LWR1cCIgdGl0bGU9ImdzdF9idWZmZXJfZXh0cmFjdF9kdXDCoCgpIj5nc3RfYnVmZmVyX2V4dHJhY3RfZHVwPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZpbGwiIHRpdGxlPSJnc3RfYnVmZmVyX2ZpbGzCoCgpIj5nc3RfYnVmZmVyX2ZpbGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWVtc2V0IiB0aXRsZT0iZ3N0X2J1ZmZlcl9tZW1zZXTCoCgpIj5nc3RfYnVmZmVyX21lbXNldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5wqAoKSI+Z3N0X2J1ZmZlcl9jb3B5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHktaW50byIgdGl0bGU9ImdzdF9idWZmZXJfY29weV9pbnRvwqAoKSI+Z3N0X2J1ZmZlcl9jb3B5X2ludG88L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1yZWdpb24iIHRpdGxlPSJnc3RfYnVmZmVyX2NvcHlfcmVnaW9uwqAoKSI+Z3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5LWRlZXAiIHRpdGxlPSJnc3RfYnVmZmVyX2NvcHlfZGVlcMKgKCkiPmdzdF9idWZmZXJfY29weV9kZWVwPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfaXNfd3JpdGFibGUoKSI+Z3N0X2J1ZmZlcl9pc193cml0YWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSI+Z3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXBsYWNlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZXBsYWNlwqAoKSI+Z3N0X2J1ZmZlcl9yZXBsYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFwcGVuZCIgdGl0bGU9ImdzdF9idWZmZXJfYXBwZW5kwqAoKSI+Z3N0X2J1ZmZlcl9hcHBlbmQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItYXBwZW5kLXJlZ2lvbiIgdGl0bGU9ImdzdF9idWZmZXJfYXBwZW5kX3JlZ2lvbsKgKCkiPmdzdF9idWZmZXJfYXBwZW5kX3JlZ2lvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9nZXRfbWV0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItYWRkLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9hZGRfbWV0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfcmVtb3ZlX21ldGHCoCgpIj5nc3RfYnVmZmVyX3JlbW92ZV9tZXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1ldGE8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pdGVyYXRlLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YcKgKCkiPmdzdF9idWZmZXJfaXRlcmF0ZV9tZXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmMiIHRpdGxlPSJHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmPCoCgpIj4qR3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZvcmVhY2gtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfZm9yZWFjaF9tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9mb3JlYWNoX21ldGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0UGFyZW50QnVmZmVyTWV0YSIgdGl0bGU9InN0cnVjdCBHc3RQYXJlbnRCdWZmZXJNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhcmVudEJ1ZmZlck1ldGE8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1hZGQtcGFyZW50LWJ1ZmZlci1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9hZGRfcGFyZW50X2J1ZmZlcl9tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9hZGRfcGFyZW50X2J1ZmZlcl9tZXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtcGFyZW50LWJ1ZmZlci1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfcGFyZW50X2J1ZmZlcl9tZXRhKCkiPmdzdF9idWZmZXJfZ2V0X3BhcmVudF9idWZmZXJfbWV0YTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckZsYWdzPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LWZsYWdzIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfZmxhZ3PCoCgpIj5nc3RfYnVmZmVyX2dldF9mbGFnczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zZXQtZmxhZ3MiIHRpdGxlPSJnc3RfYnVmZmVyX3NldF9mbGFnc8KgKCkiPmdzdF9idWZmZXJfc2V0X2ZsYWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVuc2V0LWZsYWdzIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnNldF9mbGFnc8KgKCkiPmdzdF9idWZmZXJfdW5zZXRfZmxhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaGFzLWZsYWdzIiB0aXRsZT0iZ3N0X2J1ZmZlcl9oYXNfZmxhZ3PCoCgpIj5nc3RfYnVmZmVyX2hhc19mbGFnczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlci5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj5Hc3RCdWZmZXJGbGFnczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSI+R1NUX0JVRkZFUl9PRkZTRVRfTk9ORTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJDb3B5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckNvcHlGbGFncyI+R3N0QnVmZmVyQ29weUZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktTUVUQURBVEE6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSI+R1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktQUxMOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0NPUFlfQUxMIj5HU1RfQlVGRkVSX0NPUFlfQUxMPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0UGFyZW50QnVmZmVyTWV0YSIgdGl0bGU9InN0cnVjdCBHc3RQYXJlbnRCdWZmZXJNZXRhIj5Hc3RQYXJlbnRCdWZmZXJNZXRhPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1Cb3hlZC1UeXBlcy5odG1sIj5HQm94ZWQ8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QnVmZmVyCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVmZmVyLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5CdWZmZXJzIGFyZSB0aGUgYmFzaWMgdW5pdCBvZiBkYXRhIHRyYW5zZmVyIGluIEdTdHJlYW1lci4gVGhleSBjb250YWluIHRoZQotdGltaW5nIGFuZCBvZmZzZXQgYWxvbmcgd2l0aCBvdGhlciBhcmJpdHJhcnkgbWV0YWRhdGEgdGhhdCBpcyBhc3NvY2lhdGVkCi13aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiBibG9ja3MgdGhhdCB0aGUgYnVmZmVyIGNvbnRhaW5zLjwvcD4KLTxwPkJ1ZmZlcnMgYXJlIHVzdWFsbHkgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldyIgdGl0bGU9ImdzdF9idWZmZXJfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX25ldygpPC9jb2RlPjwvYT4uIEFmdGVyIGEgYnVmZmVyIGhhcyBiZWVuCi1jcmVhdGVkIG9uZSB3aWxsIHR5cGljYWxseSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGl0IGFuZCBhZGQgaXQgdG8gdGhlIGJ1ZmZlci4KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVzIGEgYnVmZmVyIHRoYXQgY2FuIGhvbGQgYSBnaXZlbiB2aWRlbyBmcmFtZQotd2l0aCBhIGdpdmVuIHdpZHRoLCBoZWlnaHQgYW5kIGJpdHMgcGVyIHBsYW5lLjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+R3N0QnVmZmVyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmJ1ZmZlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotR3N0TWVtb3J5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPm1lbW9yeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotZ2ludCBzaXplPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHdpZHRoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGhlaWdodDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBicHA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+Ci1zaXplIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiB3aWR0aCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gaGVpZ2h0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBicHA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLWJ1ZmZlciA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldyI+Z3N0X2J1ZmZlcl9uZXc8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCk7PC9zcGFuPgotbWVtb3J5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0b3ItYWxsb2MiPmdzdF9hbGxvY2F0b3JfYWxsb2M8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5OVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHNpemU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pbnNlcnQtbWVtb3J5Ij5nc3RfYnVmZmVyX2luc2VydF9tZW1vcnk8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5idWZmZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAtPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IG1lbW9yeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08cD5BbHRlcm5hdGl2ZWx5LCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LWFsbG9jYXRlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKCk8L2NvZGU+PC9hPiB0byBjcmVhdGUgYSBidWZmZXIgd2l0aAotcHJlYWxsb2NhdGVkIGRhdGEgb2YgYSBnaXZlbiBzaXplLjwvcD4KLTxwPkJ1ZmZlcnMgY2FuIGNvbnRhaW4gYSBsaXN0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+IG9iamVjdHMuIFlvdSBjYW4gcmV0cmlldmUgaG93IG1hbnkKLW1lbW9yeSBvYmplY3RzIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbi1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX25fbWVtb3J5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX25fbWVtb3J5KCk8L2NvZGU+PC9hPiBhbmQgeW91IGNhbiBnZXQgYSBwb2ludGVyCi10byBtZW1vcnkgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1wZWVrLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfcGVla19tZW1vcnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcGVla19tZW1vcnkoKTwvY29kZT48L2E+PC9wPgotPHA+QSBidWZmZXIgd2lsbCB1c3VhbGx5IGhhdmUgdGltZXN0YW1wcywgYW5kIGEgZHVyYXRpb24sIGJ1dCBuZWl0aGVyIG9mIHRoZXNlCi1hcmUgZ3VhcmFudGVlZCAodGhleSBtYXkgYmUgc2V0IHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4pLiBXaGVuZXZlciBhCi1tZWFuaW5nZnVsIHZhbHVlIGNhbiBiZSBnaXZlbiBmb3IgdGhlc2UsIHRoZXkgc2hvdWxkIGJlIHNldC4gVGhlIHRpbWVzdGFtcHMKLWFuZCBkdXJhdGlvbiBhcmUgbWVhc3VyZWQgaW4gbmFub3NlY29uZHMgKHRoZXkgYXJlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHZhbHVlcykuPC9wPgotPHA+VGhlIGJ1ZmZlciBEVFMgcmVmZXJzIHRvIHRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgYnVmZmVyIHNob3VsZCBiZSBkZWNvZGVkIGFuZAotaXMgdXN1YWxseSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuIFRoZSBidWZmZXIgUFRTIHJlZmVycyB0byB0aGUgdGltZXN0YW1wIHdoZW4KLXRoZSBidWZmZXIgY29udGVudCBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFuZCBpcyBub3QgYWx3YXlzCi1tb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuPC9wPgotPHA+QSBidWZmZXIgY2FuIGFsc28gaGF2ZSBvbmUgb3IgYm90aCBvZiBhIHN0YXJ0IGFuZCBhbiBlbmQgb2Zmc2V0LiBUaGVzZSBhcmUKLW1lZGlhLXR5cGUgc3BlY2lmaWMuIEZvciB2aWRlbyBidWZmZXJzLCB0aGUgc3RhcnQgb2Zmc2V0IHdpbGwgZ2VuZXJhbGx5IGJlCi10aGUgZnJhbWUgbnVtYmVyLiBGb3IgYXVkaW8gYnVmZmVycywgaXQgd2lsbCBiZSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMKLXByb2R1Y2VkIHNvIGZhci4gRm9yIGNvbXByZXNzZWQgZGF0YSwgaXQgY291bGQgYmUgdGhlIGJ5dGUgb2Zmc2V0IGluIGEKLXNvdXJjZSBvciBkZXN0aW5hdGlvbiBmaWxlLiBMaWtld2lzZSwgdGhlIGVuZCBvZmZzZXQgd2lsbCBiZSB0aGUgb2Zmc2V0IG9mCi10aGUgZW5kIG9mIHRoZSBidWZmZXIuIFRoZXNlIGNhbiBvbmx5IGJlIG1lYW5pbmdmdWxseSBpbnRlcnByZXRlZCBpZiB5b3UKLWtub3cgdGhlIG1lZGlhIHR5cGUgb2YgdGhlIGJ1ZmZlciAodGhlIHByZWNlZGluZyBDQVBTIGV2ZW50KS4gRWl0aGVyIG9yIGJvdGgKLWNhbiBiZSBzZXQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfT0ZGU0VUX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQlVGRkVSX09GRlNFVF9OT05FPC9zcGFuPjwvYT4uPC9wPgotPHA+Z3N0X2J1ZmZlcl9yZWYoKSBpcyB1c2VkIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudCBvZiBhIGJ1ZmZlci4gVGhpcyBtdXN0IGJlCi1kb25lIHdoZW4geW91IHdhbnQgdG8ga2VlcCBhIGhhbmRsZSB0byB0aGUgYnVmZmVyIGFmdGVyIHB1c2hpbmcgaXQgdG8gdGhlCi1uZXh0IGVsZW1lbnQuIFRoZSBidWZmZXIgcmVmY291bnQgZGV0ZXJtaW5lcyB0aGUgd3JpdGFiaWxpdHkgb2YgdGhlIGJ1ZmZlciwgYQotYnVmZmVyIGlzIG9ubHkgd3JpdGFibGUgd2hlbiB0aGUgcmVmY291bnQgaXMgZXhhY3RseSAxLCBpLmUuIHdoZW4gdGhlIGNhbGxlcgotaGFzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyLjwvcD4KLTxwPlRvIGVmZmljaWVudGx5IGNyZWF0ZSBhIHNtYWxsZXIgYnVmZmVyIG91dCBvZiBhbiBleGlzdGluZyBvbmUsIHlvdSBjYW4KLXVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5LXJlZ2lvbiIgdGl0bGU9ImdzdF9idWZmZXJfY29weV9yZWdpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfY29weV9yZWdpb24oKTwvY29kZT48L2E+LiBUaGlzIG1ldGhvZCB0cmllcyB0byBzaGFyZSB0aGUgbWVtb3J5IG9iamVjdHMKLWJldHdlZW4gdGhlIHR3byBidWZmZXJzLjwvcD4KLTxwPklmIGEgcGx1Zy1pbiB3YW50cyB0byBtb2RpZnkgdGhlIGJ1ZmZlciBkYXRhIG9yIG1ldGFkYXRhIGluLXBsYWNlLCBpdCBzaG91bGQKLWZpcnN0IG9idGFpbiBhIGJ1ZmZlciB0aGF0IGlzIHNhZmUgdG8gbW9kaWZ5IGJ5IHVzaW5nCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPi4gIFRoaXMgZnVuY3Rpb24gaXMgb3B0aW1pemVkIHNvIHRoYXQgYSBjb3B5IHdpbGwKLW9ubHkgYmUgbWFkZSB3aGVuIGl0IGlzIG5lY2Vzc2FyeS48L3A+Ci08cD5TZXZlcmFsIGZsYWdzIG9mIHRoZSBidWZmZXIgY2FuIGJlIHNldCBhbmQgdW5zZXQgd2l0aCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfU0VUKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0JVRkZFUl9GTEFHX1NFVCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRkxBR19VTlNFVCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9CVUZGRVJfRkxBR19VTlNFVCgpPC9jb2RlPjwvYT4gbWFjcm9zLiBVc2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0JVRkZFUl9GTEFHX0lTX1NFVCgpPC9jb2RlPjwvYT4gdG8gdGVzdCBpZiBhIGNlcnRhaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckZsYWdzPC9zcGFuPjwvYT4gZmxhZyBpcyBzZXQuPC9wPgotPHA+QnVmZmVycyBjYW4gYmUgZWZmaWNpZW50bHkgbWVyZ2VkIGludG8gYSBsYXJnZXIgYnVmZmVyIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFwcGVuZCIgdGl0bGU9ImdzdF9idWZmZXJfYXBwZW5kwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2FwcGVuZCgpPC9jb2RlPjwvYT4uIENvcHlpbmcgb2YgbWVtb3J5IHdpbGwgb25seSBiZSBkb25lIHdoZW4gYWJzb2x1dGVseQotbmVlZGVkLjwvcD4KLTxwPkFyYml0cmFyeSBleHRyYSBtZXRhZGF0YSBjYW4gYmUgc2V0IG9uIGEgYnVmZmVyIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItYWRkLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9tZXRhwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2FkZF9tZXRhKCk8L2NvZGU+PC9hPi4KLU1ldGFkYXRhIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X21ldGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfZ2V0X21ldGEoKTwvY29kZT48L2E+LiBTZWUgYWxzbyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT48L3A+Ci08cD5BbiBlbGVtZW50IHNob3VsZCBlaXRoZXIgdW5yZWYgdGhlIGJ1ZmZlciBvciBwdXNoIGl0IG91dCBvbiBhIHNyYyBwYWQKLXVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giIHRpdGxlPSJnc3RfcGFkX3B1c2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVzaCgpPC9jb2RlPjwvYT4gKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPikuPC9wPgotPHA+QnVmZmVycyBhcmUgdXN1YWxseSBmcmVlZCBieSB1bnJlZmZpbmcgdGhlbSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4uIFdoZW4KLXRoZSByZWZjb3VudCBkcm9wcyB0byAwLCBhbnkgbWVtb3J5IGFuZCBtZXRhZGF0YSBwb2ludGVkIHRvIGJ5IHRoZSBidWZmZXIgaXMKLXVucmVmZmVkIGFzIHdlbGwuIEJ1ZmZlcnMgYWxsb2NhdGVkIGZyb20gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiB3aWxsIGJlIHJldHVybmVkIHRvCi10aGUgcG9vbCB3aGVuIHRoZSByZWZjb3VudCBkcm9wcyB0byAwLjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0UGFyZW50QnVmZmVyTWV0YSIgdGl0bGU9InN0cnVjdCBHc3RQYXJlbnRCdWZmZXJNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyZW50QnVmZmVyTWV0YTwvc3Bhbj48L2E+IGlzIGEgbWV0YSB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPgotdG8gaG9sZCBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGJ1ZmZlciB0aGF0IGlzIG9ubHkgcmVsZWFzZWQgd2hlbiB0aGUgY2hpbGQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGlzIHJlbGVhc2VkLjwvcD4KLTxwPlR5cGljYWxseSwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdFBhcmVudEJ1ZmZlck1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0UGFyZW50QnVmZmVyTWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhcmVudEJ1ZmZlck1ldGE8L3NwYW4+PC9hPiBpcyB1c2VkIHdoZW4gdGhlIGNoaWxkIGJ1ZmZlciBpcyBkaXJlY3RseQotdXNpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+IG9mIHRoZSBwYXJlbnQgYnVmZmVyLCBhbmQgd2FudHMgdG8gcHJldmVudCB0aGUgcGFyZW50Ci1idWZmZXIgZnJvbSBiZWluZyByZXR1cm5lZCB0byBhIGJ1ZmZlciBwb29sIHVudGlsIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiBpcyBhdmFpbGFibGUKLWZvciByZS11c2UuIChTaW5jZSAxLjYpPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCdWZmZXIuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItRkxBR1M6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX0ZMQUdTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9GTEFHUyhidWYpICAgICAgICAgICAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHUyhidWYpCi08L3ByZT4KLTxwPkEgZmxhZ3Mgd29yZCBjb250YWluaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVmZmVyRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJGbGFnczwvc3Bhbj48L2E+IGZsYWdzIHNldCBvbiB0aGlzIGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUdTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUlTLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfRkxBR19JU19TRVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKGJ1ZixmbGFnKSAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUIChidWYsIGZsYWcpCi08L3ByZT4KLTxwPkdpdmVzIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBmbGFnIG9uIGEgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1JUy1TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZ3M8L3NwYW4+PC9hPiBmbGFnIHRvIGNoZWNrLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctU0VUOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9GTEFHX1NFVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfRkxBR19TRVQoYnVmLGZsYWcpICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQgKGJ1ZiwgZmxhZykKLTwvcHJlPgotPHA+U2V0cyBhIGJ1ZmZlciBmbGFnIG9uIGEgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZ3M8L3NwYW4+PC9hPiBmbGFnIHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLVVOU0VUOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9GTEFHX1VOU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9GTEFHX1VOU0VUKGJ1ZixmbGFnKSAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1VOU0VUIChidWYsIGZsYWcpCi08L3ByZT4KLTxwPkNsZWFycyBhIGJ1ZmZlciBmbGFnLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1VTlNFVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVmZmVyRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJGbGFnczwvc3Bhbj48L2E+IGZsYWcgdG8gY2xlYXIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItUFRTOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9QVFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX1BUUyhidWYpICAgICAgICAgICAgICAgICAgICAgKEdTVF9CVUZGRVJfQ0FTVChidWYpLSZndDtwdHMpCi08L3ByZT4KLTxwPlRoZSBwcmVzZW50YXRpb24gdGltZXN0YW1wIChwdHMpIGluIG5hbm9zZWNvbmRzIChhcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+KQotb2YgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlci4gVGhpcyBpcyB0aGUgdGltZXN0YW1wIHdoZW4gdGhlIG1lZGlhIHNob3VsZCBiZQotcHJlc2VudGVkIHRvIHRoZSB1c2VyLgotVmFsdWUgd2lsbCBiZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvY29kZT48L2E+IGlmIHRoZSBwdHMgaXMgdW5rbm93bi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLVBUUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi46PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLURUUzpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfRFRTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9EVFMoYnVmKSAgICAgICAgICAgICAgICAgICAgIChHU1RfQlVGRkVSX0NBU1QoYnVmKS0mZ3Q7ZHRzKQotPC9wcmU+Ci08cD5UaGUgZGVjb2RpbmcgdGltZXN0YW1wIChkdHMpIGluIG5hbm9zZWNvbmRzIChhcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+KQotb2YgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlci4gVGhpcyBpcyB0aGUgdGltZXN0YW1wIHdoZW4gdGhlIG1lZGlhIHNob3VsZCBiZQotZGVjb2RlZCBvciBwcm9jZXNzZWQgb3RoZXJ3aXNlLgotVmFsdWUgd2lsbCBiZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvY29kZT48L2E+IGlmIHRoZSBkdHMgaXMgdW5rbm93bi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLURUUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi46PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLURUUy1PUi1QVFM6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX0RUU19PUl9QVFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX0RUU19PUl9QVFMoYnVmKSAgICAgICAgICAgICAgKEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEKGJ1ZikgPyBHU1RfQlVGRkVSX0RUUyhidWYpIDogR1NUX0JVRkZFUl9QVFMgKGJ1ZikpCi08L3ByZT4KLTxwPlJldHVybnMgdGhlIGJ1ZmZlciBkZWNvZGluZyB0aW1lc3RhbXAgKGR0cykgaWYgdmFsaWQsIGVsc2UgdGhlIGJ1ZmZlcgotcHJlc2VudGF0aW9uIHRpbWUgKHB0cyk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLURUUy1PUi1QVFMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uOjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1EVVJBVElPTjpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfRFVSQVRJT04oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX0RVUkFUSU9OKGJ1ZikgICAgICAgICAgICAgICAgKEdTVF9CVUZGRVJfQ0FTVChidWYpLSZndDtkdXJhdGlvbikKLTwvcHJlPgotPHA+VGhlIGR1cmF0aW9uIGluIG5hbm9zZWNvbmRzIChhcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+KSBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyLgotVmFsdWUgd2lsbCBiZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvY29kZT48L2E+IGlmIHRoZSBkdXJhdGlvbiBpcyB1bmtub3duLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItRFVSQVRJT04ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLU9GRlNFVDpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfT0ZGU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9PRkZTRVQoYnVmKSAgICAgICAgICAgICAgICAgIChHU1RfQlVGRkVSX0NBU1QoYnVmKS0mZ3Q7b2Zmc2V0KQotPC9wcmU+Ci08cD5UaGUgb2Zmc2V0IGluIHRoZSBzb3VyY2UgZmlsZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItT0ZGU0VULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1PRkZTRVQtRU5EOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9PRkZTRVRfRU5EKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKGJ1ZikgICAgICAgICAgICAgIChHU1RfQlVGRkVSX0NBU1QoYnVmKS0mZ3Q7b2Zmc2V0X2VuZCkKLTwvcHJlPgotPHA+VGhlIG9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgb2YgdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLU9GRlNFVC1FTkQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLURVUkFUSU9OLUlTLVZBTElEOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQoYnVmZmVyKSAgICAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikpKQotPC9wcmU+Ci08cD5UZXN0cyBpZiB0aGUgZHVyYXRpb24gaXMga25vd24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1EVVJBVElPTi1JUy1WQUxJRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1QVFMtSVMtVkFMSUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX1BUU19JU19WQUxJRCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEKGJ1ZmZlcikgICAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfUFRTIChidWZmZXIpKSkKLTwvcHJlPgotPHA+VGVzdHMgaWYgdGhlIHB0cyBpcyBrbm93bi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLVBUUy1JUy1WQUxJRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1EVFMtSVMtVkFMSUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX0RUU19JU19WQUxJRCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEKGJ1ZmZlcikgICAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfRFRTIChidWZmZXIpKSkKLTwvcHJlPgotPHA+VGVzdHMgaWYgdGhlIGR0cyBpcyBrbm93bi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLURUUy1JUy1WQUxJRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1PRkZTRVQtSVMtVkFMSUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX09GRlNFVF9JU19WQUxJRCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEKGJ1ZmZlcikgICAgICAoR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgIT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSkKLTwvcHJlPgotPHA+VGVzdHMgaWYgdGhlIHN0YXJ0IG9mZnNldCBpcyBrbm93bi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLU9GRlNFVC1JUy1WQUxJRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1PRkZTRVQtRU5ELUlTLVZBTElEOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEKGJ1ZmZlcikgIChHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlcikgIT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSkKLTwvcHJlPgotPHA+VGVzdHMgaWYgdGhlIGVuZCBvZmZzZXQgaXMga25vd24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1PRkZTRVQtRU5ELUlTLVZBTElELnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLUlTLURJU0NPTlQ6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX0lTX0RJU0NPTlQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX0lTX0RJU0NPTlQoYnVmZmVyKSAgIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKSkKLTwvcHJlPgotPHA+VGVzdHMgaWYgdGhlIGJ1ZmZlciBtYXJrcyBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLUlTLURJU0NPTlQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbmV3Ij48L2E+PGgzPmdzdF9idWZmZXJfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi1nc3RfYnVmZmVyX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciB3aXRob3V0IGFueSBkYXRhLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLW5ldy1hbGxvY2F0ZSI+PC9hPjxoMz5nc3RfYnVmZmVyX25ld19hbGxvY2F0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiAqYWxsb2NhdG9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRyaWVzIHRvIGNyZWF0ZSBhIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgd2l0aCBkYXRhIG9mIHRoZSBnaXZlbiBzaXplIGFuZAotZXh0cmEgcGFyYW1ldGVycyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvY2F0b3I8L2NvZGU+PC9lbT4KLS4gSWYgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgbWVtb3J5IGNhbid0IGJlCi1hbGxvY2F0ZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aWxsIGJlIHJldHVybmVkLiBUaGUgYWxsb2NhdGVkIGJ1ZmZlciBtZW1vcnkgaXMgbm90IGNsZWFyZWQuPC9wPgotPHA+V2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCB0aGUgZGVmYXVsdCBtZW1vcnkgYWxsb2NhdG9yIHdpbGwgYmUgdXNlZC48L3A+Ci08cD5Ob3RlIHRoYXQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotID09IDAsIHRoZSBidWZmZXIgd2lsbCBub3QgaGF2ZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1uZXctYWxsb2NhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWxsb2NhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiB0byB1c2UsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0byB1c2UgdGhlCi1kZWZhdWx0IGFsbG9jYXRvci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBuZXcgYnVmZmVyJ3MgZGF0YS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyYW1zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IG9wdGlvbmFsIHBhcmFtZXRlcnMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLW5ldy1hbGxvY2F0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYKLXRoZSBtZW1vcnkgY291bGRuJ3QgYmUgYWxsb2NhdGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbmV3LXdyYXBwZWQiPjwvYT48aDM+Z3N0X2J1ZmZlcl9uZXdfd3JhcHBlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IGJ1ZmZlciB0aGF0IHdyYXBzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotLiBUaGUgbWVtb3J5IHdpbGwgYmUgZnJlZWQKLXdpdGggZ19mcmVlIGFuZCB3aWxsIGJlIG1hcmtlZCB3cml0YWJsZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbmV3LXdyYXBwZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBkYXRhIHRvIHdyYXAuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ3VpbnQ4XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbGxvY2F0ZWQgc2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLW5ldy13cmFwcGVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbmV3LXdyYXBwZWQtZnVsbCI+PC9hPjxoMz5nc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlGbGFncyIgdGl0bGU9ImVudW0gR3N0TWVtb3J5RmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG1heHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFsbG9jYXRlIGEgbmV3IGJ1ZmZlciB0aGF0IHdyYXBzIHRoZSBnaXZlbiBtZW1vcnkuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0gbXVzdCBwb2ludCB0bwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT4KLSBvZiBtZW1vcnksIHRoZSB3cmFwcGVkIGJ1ZmZlciB3aWxsIGhhdmUgdGhlIHJlZ2lvbiBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSBhbmQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gdmlzaWJsZS48L3A+Ci08cD5XaGVuIHRoZSBidWZmZXIgaXMgZGVzdHJveWVkLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bm90aWZ5PC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBjYWxsZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhlIHByZWZpeC9wYWRkaW5nIG11c3QgYmUgZmlsbGVkIHdpdGggMCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLSBjb250YWlucwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBRy1aRVJPLVBSRUZJWEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVNT1JZX0ZMQUdfWkVST19QUkVGSVhFRDwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLVpFUk8tUEFEREVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQ8L3NwYW4+PC9hPiByZXNwZWN0aXZlbHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1uZXctd3JhcHBlZC1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RNZW1vcnlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUZsYWdzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBkYXRhIHRvIHdyYXAuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ3VpbnQ4XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1heHNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbGxvY2F0ZWQgc2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9mZnNldCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zaXplIG9mIHZhbGlkIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHVzZXJfZGF0YS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bm90aWZ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGNhbGxlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KLXdoZW4gdGhlIG1lbW9yeSBpcyBmcmVlZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgdW50aWwgZmlyc3QgY2FsbGVkLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGFzeW5jPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT4gdXNlcl9kYXRhXTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLW5ldy13cmFwcGVkLWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZWYiPjwvYT48aDM+Z3N0X2J1ZmZlcl9yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfcmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBnaXZlbiBidWZmZXIgYnkgb25lLjwvcD4KLTxwPk5vdGUgdGhhdCB0aGUgcmVmY291bnQgYWZmZWN0cyB0aGUgd3JpdGFiaWxpdHkKLW9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT4KLSBhbmQgaXRzIG1ldGFkYXRhLCBzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9pc193cml0YWJsZSgpPC9jb2RlPjwvYT4uCi1JdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGtlZXBpbmcgYWRkaXRpb25hbCByZWZlcmVuY2VzIHRvCi1Hc3RCdWZmZXIgaW5zdGFuY2VzIGNhbiBwb3RlbnRpYWxseSBpbmNyZWFzZSB0aGUgbnVtYmVyCi1vZiBtZW1jcHkgb3BlcmF0aW9ucyBpbiBhIHBpcGVsaW5lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVmLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXVucmVmIj48L2E+PGgzPmdzdF9idWZmZXJfdW5yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVmZmVyX3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZWNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBidWZmZXIuIElmIHRoZSByZWZjb3VudCByZWFjaGVzIDAsIHRoZSBidWZmZXIKLXdpdGggdGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgYW5kIG1lbW9yeSB3aWxsIGJlIGZyZWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItdW5yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LXNpemVzIj48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X3NpemVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX2dldF9zaXplcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICpvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotLjwvcD4KLTxwPldoZW4gbm90IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIHdpbGwgY29udGFpbiB0aGUgb2Zmc2V0IG9mIHRoZSBkYXRhIGluIHRoZQotZmlyc3QgbWVtb3J5IGJsb2NrIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT4KLSB3aWxsIGNvbnRhaW4gdGhlIHN1bSBvZgotdGhlIHNpemUgYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSBhbmQgdGhlIGFtb3VudCBvZiBleHRyYSBwYWRkaW5nIG9uIHRoZSBsYXN0Ci1tZW1vcnkgYmxvY2suICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIHVzZWQgdG8gcmVzaXplIHRoZQotYnVmZmVyIG1lbW9yeSBibG9ja3Mgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXNpemUiIHRpdGxlPSJnc3RfYnVmZmVyX3Jlc2l6ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9yZXNpemUoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LXNpemVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gdGhlIG9mZnNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWF4c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gdGhlIG1heHNpemUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1zaXplcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRvdGFsIHNpemUgb2YgdGhlIG1lbW9yeSBibG9ja3MgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1zaXplIj48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X3NpemXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4KLWdzdF9idWZmZXJfZ2V0X3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1zaXplLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdG90YWwgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LXNpemVzLXJhbmdlIj48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X3NpemVzX3JhbmdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX2dldF9zaXplc19yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gKm1heHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSB0b3RhbCBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSBtZW1vcnkgYmxvY2tzIHN0YXRpbmcgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLjwvcD4KLTxwPldoZW4gbm90IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIHdpbGwgY29udGFpbiB0aGUgb2Zmc2V0IG9mIHRoZSBkYXRhIGluIHRoZQotbWVtb3J5IGJsb2NrIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+Ci0gd2lsbCBjb250YWluIHRoZSBzdW0gb2YgdGhlIHNpemUKLWFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYW5kIHRoZSBhbW91bnQgb2YgZXh0cmEgcGFkZGluZyBvbiB0aGUgbWVtb3J5IGJsb2NrIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLSArCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci0gLTEuCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIHVzZWQgdG8gcmVzaXplIHRoZSBidWZmZXIgbWVtb3J5IGJsb2NrcyB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXNpemUtcmFuZ2UiIHRpdGxlPSJnc3RfYnVmZmVyX3Jlc2l6ZV9yYW5nZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9yZXNpemVfcmFuZ2UoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LXNpemVzLXJhbmdlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkeDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIGluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxlbmd0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gdGhlIG9mZnNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWF4c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gdGhlIG1heHNpemUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1zaXplcy1yYW5nZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRvdGFsIHNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPgotbWVtb3J5IGJsb2NrcyBzdGFydGluZyBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci1pbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVzaXplLXJhbmdlIj48L2E+PGgzPmdzdF9idWZmZXJfcmVzaXplX3JhbmdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX3Jlc2l6ZV9yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHRvdGFsIHNpemUgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSBtZW1vcnkgYmxvY2tzIHN0YXJ0aW5nIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLSBpbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZXNpemUtcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWR4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gaW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBsZW5ndGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9mZnNldCBhZGp1c3RtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IHNpemUgb3IgLTEgdG8ganVzdCBhZGp1c3QgdGhlIG9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZXNpemUtcmFuZ2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgcmVzaXppbmcgc3VjY2VlZGVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVzaXplIj48L2E+PGgzPmdzdF9idWZmZXJfcmVzaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9yZXNpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgb2Zmc2V0IGFuZCB0b3RhbCBzaXplIG9mIHRoZSBtZW1vcnkgYmxvY2tzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXJlc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2Zmc2V0IGFkanVzdG1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgc2l6ZSBvciAtMSB0byBqdXN0IGFkanVzdCB0aGUgb2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItc2V0LXNpemUiPjwvYT48aDM+Z3N0X2J1ZmZlcl9zZXRfc2l6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idWZmZXJfc2V0X3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHRvdGFsIHNpemUgb2YgdGhlIG1lbW9yeSBibG9ja3MgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItc2V0LXNpemUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgc2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1tYXgtbWVtb3J5Ij48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X21heF9tZW1vcnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF9idWZmZXJfZ2V0X21heF9tZW1vcnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgYmxvY2tzIHRoYXQgYSBidWZmZXIgY2FuIGhvbGQuIFRoaXMgaXMgYQotY29tcGlsZSB0aW1lIGNvbnN0YW50IHRoYXQgY2FuIGJlIHF1ZXJpZWQgd2l0aCB0aGUgZnVuY3Rpb24uPC9wPgotPHA+V2hlbiBtb3JlIG1lbW9yeSBibG9ja3MgYXJlIGFkZGVkLCBleGlzdGluZyBtZW1vcnkgYmxvY2tzIHdpbGwgYmUgbWVyZ2VkCi10b2dldGhlciB0byBtYWtlIHJvb20gZm9yIHRoZSBuZXcgYmxvY2suPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtbWF4LW1lbW9yeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgYmxvY2tzIHRoYXQgYSBidWZmZXIgY2FuIGhvbGQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcGVlay1tZW1vcnkiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wZWVrX21lbW9yecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaWR4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbWVtb3J5IGJsb2NrIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uIFRoZSBtZW1vcnkgYmxvY2sgc3RheXMgdmFsaWQgdW50aWwKLXRoZSBtZW1vcnkgYmxvY2sgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGlzIHJlbW92ZWQsIHJlcGxhY2VkIG9yIG1lcmdlZCwgdHlwaWNhbGx5IHdpdGgKLWFueSBjYWxsIHRoYXQgbW9kaWZpZXMgdGhlIG1lbW9yeSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wZWVrLW1lbW9yeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbiBpbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wZWVrLW1lbW9yeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbi1tZW1vcnkiPjwvYT48aDM+Z3N0X2J1ZmZlcl9uX21lbW9yecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9uX21lbW9yeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBhbW91bnQgb2YgbWVtb3J5IGJsb2NrcyB0aGF0IHRoaXMgYnVmZmVyIGhhcy4gVGhpcyBhbW91bnQgaXMgbmV2ZXIKLWxhcmdlciB0aGFuIHdoYXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LW1heC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tYXhfbWVtb3J5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2dldF9tYXhfbWVtb3J5KCk8L2NvZGU+PC9hPiByZXR1cm5zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbi1tZW1vcnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1uLW1lbW9yeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyB0aGlzIGJ1ZmZlciBpcyBtYWRlIG9mLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWluc2VydC1tZW1vcnkiPjwvYT48aDM+Z3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluc2VydCB0aGUgbWVtb3J5IGJsb2NrIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotLiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcAotb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIGFuZCB0aHVzIGRvZXNuJ3QgaW5jcmVhc2UgaXRzIHJlZmNvdW50LjwvcD4KLTxwPk9ubHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LW1heC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tYXhfbWVtb3J5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2dldF9tYXhfbWVtb3J5KCk8L2NvZGU+PC9hPiBjYW4gYmUgYWRkZWQgdG8gYSBidWZmZXIuIElmIG1vcmUgbWVtb3J5IGlzCi1hZGRlZCwgZXhpc3RpbmcgbWVtb3J5IGJsb2NrcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgbWVyZ2VkIHRvIG1ha2Ugcm9vbSBmb3IKLXRoZSBuZXcgbWVtb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItaW5zZXJ0LW1lbW9yeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW5kZXggdG8gYWRkIHRoZSBtZW1vcnkgYXQsIG9yIC0xIHRvIGFwcGVuZCBpdCB0byB0aGUgZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZXBsYWNlLW1lbW9yeS1yYW5nZSI+PC9hPjxoMz5nc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5X3JhbmdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9yZXBsYWNlX21lbW9yeV9yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaWR4PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXBsYWNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci0gbWVtb3J5IGJsb2NrcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gc3RhcnRpbmcgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotLjwvcD4KLTxwPklmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSBpcyAtMSwgYWxsIG1lbW9yeSBzdGFydGluZyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIHJlbW92ZWQgYW5kCi1yZXBsYWNlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIHdyaXRhYmxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVwbGFjZS1tZW1vcnktcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWR4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gaW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBsZW5ndGggc2hvdWxkIG5vdCBiZSAwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtbWVtb3J5LXJhbmdlIj48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X21lbW9yeV9yYW5nZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5X3JhbmdlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSBtZW1vcnkgYmxvY2tzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBzdGFydGluZyBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0uIFRoZSBtZW1vcnkgYmxvY2tzIHdpbGwKLWJlIG1lcmdlZCBpbnRvIG9uZSBsYXJnZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci0gaXMgLTEsIGFsbCBtZW1vcnkgc3RhcnRpbmcgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0gaXMgbWVyZ2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LW1lbW9yeS1yYW5nZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbiBpbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sZW5ndGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGxlbmd0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtbWVtb3J5LXJhbmdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiB0aGF0IGNvbnRhaW5zIHRoZSBtZXJnZWQgZGF0YSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci1ibG9ja3Mgc3RhcnRpbmcgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotLiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5yZWYiIHRpdGxlPSJnc3RfbWVtb3J5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5LXJhbmdlIj48L2E+PGgzPmdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbGVuZ3RoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci0gbWVtb3J5IGJsb2NrcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gc3RhcnRpbmcgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPgotIGNhbiBiZSAtMSwgaW4gd2hpY2ggY2FzZSBhbGwgbWVtb3J5IHN0YXJ0aW5nIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotIGlzIHJlbW92ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5LXJhbmdlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkeDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIGluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxlbmd0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZmluZC1tZW1vcnkiPjwvYT48aDM+Z3N0X2J1ZmZlcl9maW5kX21lbW9yecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9maW5kX21lbW9yeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKmlkeDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqbGVuZ3RoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICpza2lwPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpbmQgdGhlIG1lbW9yeSBibG9ja3MgdGhhdCBzcGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgc3RhcnRpbmcgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0KLWluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5XaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLSB3aWxsIGNvbnRhaW4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdAotbWVtb3J5IGJsb2NrIHdoZXJlIHRoZSBieXRlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gY2FuIGJlIGZvdW5kIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci0gY29udGFpbnMgdGhlCi1udW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjb250YWluaW5nIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIHJlbWFpbmluZyBieXRlcy4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNraXA8L2NvZGU+PC9lbT4KLSBjb250YWlucwotdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwIGluIHRoZSBtZW1vcnkgYmxvY2sgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotIHRvIGdldCB0byB0aGUgYnl0ZQotZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGNhbiBiZSAtMSB0byBnZXQgYWxsIHRoZSBtZW1vcnkgYmxvY2tzIGFmdGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWZpbmQtbWVtb3J5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIG9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkeDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGluZGV4LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gbGVuZ3RoLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2tpcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIHNraXAuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1maW5kLW1lbW9yeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci1ieXRlcyBzdGFydGluZyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLWNvdWxkIGJlIGZvdW5kIGluCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNraXA8L2NvZGU+PC9lbT4KLXdpbGwgYmUgZmlsbGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXByZXBlbmQtbWVtb3J5Ij48L2E+PGgzPmdzdF9idWZmZXJfcHJlcGVuZF9tZW1vcnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVmZmVyX3ByZXBlbmRfbWVtb3J5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlByZXBlbmQgdGhlIG1lbW9yeSBibG9jayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLiBUaGlzIGZ1bmN0aW9uIHRha2VzCi1vd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIGFuZCB0aHVzIGRvZXNuJ3QgaW5jcmVhc2UgaXRzIHJlZmNvdW50LjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWluc2VydC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2luc2VydF9tZW1vcnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSgpPC9jb2RlPjwvYT4gd2l0aCBhbiBpbmRleCBvZiAwLgotU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWluc2VydC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2luc2VydF9tZW1vcnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSgpPC9jb2RlPjwvYT4gZm9yIG1vcmUgZGV0YWlscy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXByZXBlbmQtbWVtb3J5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hcHBlbmQtbWVtb3J5Ij48L2E+PGgzPmdzdF9idWZmZXJfYXBwZW5kX21lbW9yecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFwcGVuZCB0aGUgbWVtb3J5IGJsb2NrIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24gdGFrZXMKLW93bmVyc2hpcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0gYW5kIHRodXMgZG9lc24ndCBpbmNyZWFzZSBpdHMgcmVmY291bnQuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaW5zZXJ0LW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfaW5zZXJ0X21lbW9yecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5KCk8L2NvZGU+PC9hPiB3aXRoIGFuIGluZGV4IG9mIC0xLgotU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWluc2VydC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2luc2VydF9tZW1vcnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSgpPC9jb2RlPjwvYT4gZm9yIG1vcmUgZGV0YWlscy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWFwcGVuZC1tZW1vcnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXJlcGxhY2UtbWVtb3J5Ij48L2E+PGgzPmdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXBsYWNlcyB0aGUgbWVtb3J5IGJsb2NrIGF0IGluZGV4IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZXBsYWNlLW1lbW9yeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbiBpbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVwbGFjZS1hbGwtbWVtb3J5Ij48L2E+PGgzPmdzdF9idWZmZXJfcmVwbGFjZV9hbGxfbWVtb3J5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9yZXBsYWNlX2FsbF9tZW1vcnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlcGxhY2VzIGFsbCBtZW1vcnkgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVwbGFjZS1hbGwtbWVtb3J5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtbWVtb3J5Ij48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X21lbW9yecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIG1lbW9yeSBibG9jayBhdCBpbmRleCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LW1lbW9yeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbiBpbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtbWVtb3J5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIG9mIHRoZQotbWVtb3J5IGJsb2NrIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLS4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXVucmVmIiB0aXRsZT0iZ3N0X21lbW9yeV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LWFsbC1tZW1vcnkiPjwvYT48aDM+Z3N0X2J1ZmZlcl9nZXRfYWxsX21lbW9yecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9nZXRfYWxsX21lbW9yeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGFsbCB0aGUgbWVtb3J5IGJsb2NrIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS4gVGhlIG1lbW9yeSBibG9ja3Mgd2lsbCBiZSBtZXJnZWQKLWludG8gb25lIGxhcmdlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LWFsbC1tZW1vcnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtYWxsLW1lbW9yeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gdGhhdCBjb250YWlucyB0aGUgbWVyZ2VkIG1lbW9yeS4KLVVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bnJlZiIgdGl0bGU9ImdzdF9tZW1vcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfdW5yZWYoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXJlbW92ZS1tZW1vcnkiPjwvYT48aDM+Z3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmUgdGhlIG1lbW9yeSBibG9jayBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGF0IGluZGV4IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkeDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIGluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVtb3ZlLWFsbC1tZW1vcnkiPjwvYT48aDM+Z3N0X2J1ZmZlcl9yZW1vdmVfYWxsX21lbW9yecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idWZmZXJfcmVtb3ZlX2FsbF9tZW1vcnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZSBhbGwgdGhlIG1lbW9yeSBibG9ja3MgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVtb3ZlLWFsbC1tZW1vcnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWlzLWFsbC1tZW1vcnktd3JpdGFibGUiPjwvYT48aDM+Z3N0X2J1ZmZlcl9pc19hbGxfbWVtb3J5X3dyaXRhYmxlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX2lzX2FsbF9tZW1vcnlfd3JpdGFibGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIGFsbCBtZW1vcnkgYmxvY2tzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBhcmUgd3JpdGFibGUuPC9wPgotPHA+Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGlzIHdyaXRhYmxlLCB1c2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9pc193cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfaXNfd3JpdGFibGUoKTwvY29kZT48L2E+IHRvIGNoZWNrIHRoYXQgaWYgbmVlZGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItaXMtYWxsLW1lbW9yeS13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWlzLWFsbC1tZW1vcnktd3JpdGFibGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYWxsIG1lbW9yeSBibG9ja3MgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotYXJlIHdyaXRhYmxlPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItaXMtbWVtb3J5LXJhbmdlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX2lzX21lbW9yeV9yYW5nZV93cml0YWJsZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci0gbWVtb3J5IGJsb2NrcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gc3RhcnRpbmcgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0gYXJlIHdyaXRhYmxlLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSBjYW4gYmUgLTEgdG8gY2hlY2sgYWxsIHRoZSBtZW1vcnkgYmxvY2tzIGFmdGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5Ob3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gaXMgd3JpdGFibGUsIHVzZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9pc193cml0YWJsZSgpPC9jb2RlPjwvYT4gdG8gY2hlY2sgdGhhdCBpZiBuZWVkZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1pcy1tZW1vcnktcmFuZ2Utd3JpdGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWR4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gaW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBsZW5ndGggc2hvdWxkIG5vdCBiZSAwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWlzLW1lbW9yeS1yYW5nZS13cml0YWJsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbWVtb3J5IHJhbmdlIGlzIHdyaXRhYmxlPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbWFwIj48L2E+PGgzPmdzdF9idWZmZXJfbWFwwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX21hcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIiB0aXRsZT0iR3N0TWFwSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEluZm88L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiBmaWxscyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPgotIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIiB0aXRsZT0iR3N0TWFwSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEluZm88L3NwYW4+PC9hPiBvZiBhbGwgbWVyZ2VkIG1lbW9yeQotYmxvY2tzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLSBkZXNjcmliZSB0aGUgZGVzaXJlZCBhY2Nlc3Mgb2YgdGhlIG1lbW9yeS4gV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLSBpcwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NQVAtV1JJVEU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9NQVBfV1JJVEU8L3NwYW4+PC9hPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIHNob3VsZCBiZSB3cml0YWJsZSAoYXMgcmV0dXJuZWQgZnJvbQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9pc193cml0YWJsZSgpPC9jb2RlPjwvYT4pLjwvcD4KLTxwPldoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGlzIHdyaXRhYmxlIGJ1dCB0aGUgbWVtb3J5IGlzbid0LCBhIHdyaXRhYmxlIGNvcHkgd2lsbAotYXV0b21hdGljYWxseSBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC4gVGhlIHJlYWRvbmx5IGNvcHkgb2YgdGhlCi1idWZmZXIgbWVtb3J5IHdpbGwgdGhlbiBhbHNvIGJlIHJlcGxhY2VkIHdpdGggdGhpcyB3cml0YWJsZSBjb3B5LjwvcD4KLTxwPlRoZSBtZW1vcnkgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZm88L2NvZGU+PC9lbT4KLSBzaG91bGQgYmUgdW5tYXBwZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bm1hcCIgdGl0bGU9ImdzdF9idWZmZXJfdW5tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfdW5tYXAoKTwvY29kZT48L2E+IGFmdGVyCi11c2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLW1hcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmZvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGluZm8gYWJvdXQgdGhlIG1hcHBpbmcuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZsYWdzIGZvciB0aGUgbWFwcGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1tYXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG1hcCBzdWNjZWVkZWQgYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Ci1jb250YWlucyB2YWxpZCBkYXRhLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLW1hcC1yYW5nZSI+PC9hPjxoMz5nc3RfYnVmZmVyX21hcF9yYW5nZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9tYXBfcmFuZ2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIiB0aXRsZT0iR3N0TWFwSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEluZm88L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiBmaWxscyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPgotIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIiB0aXRsZT0iR3N0TWFwSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEluZm88L3NwYW4+PC9hPiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvZW0+Ci0gbWVyZ2VkIG1lbW9yeSBibG9ja3MKLXN0YXJ0aW5nIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uIFdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPgotIGlzIC0xLCBhbGwgbWVtb3J5IGJsb2NrcyBzdGFydGluZwotZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0gYXJlIG1lcmdlZCBhbmQgbWFwcGVkLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotIGRlc2NyaWJlIHRoZSBkZXNpcmVkIGFjY2VzcyBvZiB0aGUgbWVtb3J5LiBXaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotIGlzCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1BUC1XUklURTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01BUF9XUklURTwvc3Bhbj48L2E+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIHdyaXRhYmxlIChhcyByZXR1cm5lZCBmcm9tCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfaXNfd3JpdGFibGUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCk8L2NvZGU+PC9hPikuPC9wPgotPHA+V2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gaXMgd3JpdGFibGUgYnV0IHRoZSBtZW1vcnkgaXNuJ3QsIGEgd3JpdGFibGUgY29weSB3aWxsCi1hdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLiBUaGUgcmVhZG9ubHkgY29weSBvZiB0aGUgYnVmZmVyIG1lbW9yeQotd2lsbCB0aGVuIGFsc28gYmUgcmVwbGFjZWQgd2l0aCB0aGlzIHdyaXRhYmxlIGNvcHkuPC9wPgotPHA+VGhlIG1lbW9yeSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPgotIHNob3VsZCBiZSB1bm1hcHBlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVubWFwIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bm1hcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bm1hcCgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1tYXAtcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWR4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gaW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBsZW5ndGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBpbmZvIGFib3V0IHRoZSBtYXBwaW5nLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mbGFncyBmb3IgdGhlIG1hcHBpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbWFwLXJhbmdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBtYXAgc3VjY2VlZGVkIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPgotY29udGFpbnMgdmFsaWQKLWRhdGEuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItdW5tYXAiPjwvYT48aDM+Z3N0X2J1ZmZlcl91bm1hcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idWZmZXJfdW5tYXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIiB0aXRsZT0iR3N0TWFwSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEluZm88L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWxlYXNlIHRoZSBtZW1vcnkgcHJldmlvdXNseSBtYXBwZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tYXAiIHRpdGxlPSJnc3RfYnVmZmVyX21hcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9tYXAoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItdW5tYXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1hcEluZm8iIHRpdGxlPSJHc3RNYXBJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWFwSW5mbzwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbWVtY21wIj48L2E+PGgzPmdzdF9idWZmZXJfbWVtY21wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9tZW1jbXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBtZW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29tcGFyZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIHN0YXJ0aW5nIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSB3aXRoIHRoZSBtZW1vcnkgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbWVtY21wLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvZmZzZXQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWVtb3J5IHRvIGNvbXBhcmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ3VpbnQ4XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2l6ZSB0byBjb21wYXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLW1lbWNtcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDAgaWYgdGhlIG1lbW9yeSBpcyBlcXVhbC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1leHRyYWN0Ij48L2E+PGgzPmdzdF9idWZmZXJfZXh0cmFjdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9leHRyYWN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRlc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvcHkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBzdGFydGluZyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWV4dHJhY3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9mZnNldCB0byBleHRyYWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGVzdGluYXRpb24gYWRkcmVzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpemUgdG8gZXh0cmFjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1leHRyYWN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGFtb3VudCBvZiBieXRlcyBleHRyYWN0ZWQuIFRoaXMgdmFsdWUgY2FuIGJlIGxvd2VyIHRoYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLXdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotZGlkIG5vdCBjb250YWluIGVub3VnaCBkYXRhLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWV4dHJhY3QtZHVwIj48L2E+PGgzPmdzdF9idWZmZXJfZXh0cmFjdF9kdXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVmZmVyX2V4dHJhY3RfZHVwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqZGVzdF9zaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3RzIGEgY29weSBvZiBhdCBtb3N0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgdGhlIGRhdGEgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIGludG8KLW5ld2x5LWFsbG9jYXRlZCBtZW1vcnkuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+Ci0gbXVzdCBiZSBmcmVlZCB1c2luZyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gZG9uZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWV4dHJhY3QtZHVwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9mZnNldCB0byBleHRyYWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2l6ZSB0byBleHRyYWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHdoZXJlCi10aGUgZGVzdGluYXRpb24gYXJyYXkgd2lsbCBiZSB3cml0dGVuLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPWRlc3Rfc2l6ZV1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ3VpbnQ4XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Rfc2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBIGxvY2F0aW9uIHdoZXJlIHRoZSBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+Ci1jYW4gYmUgd3JpdHRlbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOS5odG1sI2FwaS1pbmRleC0xLjAuMTAiPjEuMC4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZmlsbCI+PC9hPjxoMz5nc3RfYnVmZmVyX2ZpbGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4KLWdzdF9idWZmZXJfZmlsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4gc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3B5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWZpbGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9mZnNldCB0byBmaWxsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc291cmNlIGFkZHJlc3MuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ3VpbnQ4XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2l6ZSB0byBmaWxsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWZpbGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgYW1vdW50IG9mIGJ5dGVzIGNvcGllZC4gVGhpcyB2YWx1ZSBjYW4gYmUgbG93ZXIgdGhhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci1kaWQgbm90IGNvbnRhaW4gZW5vdWdoIGRhdGEuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbWVtc2V0Ij48L2E+PGgzPmdzdF9idWZmZXJfbWVtc2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX21lbXNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RmlsbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+Ci0gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotIHN0YXJ0aW5nIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbWVtc2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvZmZzZXQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB2YWx1ZSB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaXplIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1tZW1zZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgYW1vdW50IG9mIGJ5dGVzIGZpbGxlZC4gVGhpcyB2YWx1ZSBjYW4gYmUgbG93ZXIgdGhhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci1kaWQgbm90IGNvbnRhaW4gZW5vdWdoIGRhdGEuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItY29weSI+PC9hPjxoMz5nc3RfYnVmZmVyX2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfY29weSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWY8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiBUaGlzIHdpbGwgb25seSBjb3B5IHRoZSBidWZmZXIncwotZGF0YSB0byBhIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaWYgbmVlZGVkIChpZiB0aGUgdHlwZSBvZiBtZW1vcnkKLXJlcXVpcmVzIGl0KSwgb3RoZXJ3aXNlIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMganVzdCByZWZlcmVuY2VkLgotQ2hlY2sgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1kZWVwIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X2RlZXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfY29weV9kZWVwKCk8L2NvZGU+PC9hPiBpZiB5b3Ugd2FudCB0byBmb3JjZSB0aGUgZGF0YQotdG8gYmUgY29waWVkIHRvIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1jb3B5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItY29weS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IGNvcHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWNvcHktaW50byI+PC9hPjxoMz5nc3RfYnVmZmVyX2NvcHlfaW50b8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckNvcHlGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVmZmVyQ29weUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyQ29weUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3BpZXMgdGhlIGluZm9ybWF0aW9uIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPgotIGFscmVhZHkgY29udGFpbnMgbWVtb3J5IGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLSBjb250YWlucyBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLAotdGhlIG1lbW9yeSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIGFwcGVuZGVkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+Ci0gaW5kaWNhdGUgd2hpY2ggZmllbGRzIHdpbGwgYmUgY29waWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItY29weS1pbnRvLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGRlc3RpbmF0aW9uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZmxhZ3MgaW5kaWNhdGluZyB3aGF0IG1ldGFkYXRhIGZpZWxkcyBzaG91bGQgYmUgY29waWVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5vZmZzZXQgdG8gY29weSBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50b3RhbCBzaXplIHRvIGNvcHkuIElmIC0xLCBhbGwgZGF0YSBpcyBjb3BpZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWNvcHktaW50by5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY29weWluZyBzdWNjZWVkZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1jb3B5LXJlZ2lvbiI+PC9hPjxoMz5nc3RfYnVmZmVyX2NvcHlfcmVnaW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi1nc3RfYnVmZmVyX2NvcHlfcmVnaW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyQ29weUZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJDb3B5RmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJDb3B5RmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgc3ViLWJ1ZmZlciBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJlbnQ8L2NvZGU+PC9lbT4KLSBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0uCi1UaGlzIHN1Yi1idWZmZXIgdXNlcyB0aGUgYWN0dWFsIG1lbW9yeSBzcGFjZSBvZiB0aGUgcGFyZW50IGJ1ZmZlci4KLVRoaXMgZnVuY3Rpb24gd2lsbCBjb3B5IHRoZSBvZmZzZXQgYW5kIHRpbWVzdGFtcCBmaWVsZHMgd2hlbiB0aGUKLW9mZnNldCBpcyAwLiBJZiBub3QsIHRoZXkgd2lsbCBiZSBzZXQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19USU1FX05PTkU8L3NwYW4+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0JVRkZFUl9PRkZTRVRfTk9ORTwvc3Bhbj48L2E+LgotSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIGVxdWFscyAwIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGVxdWFscyB0aGUgdG90YWwgc2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0sIHRoZQotZHVyYXRpb24gYW5kIG9mZnNldCBlbmQgZmllbGRzIGFyZSBhbHNvIGNvcGllZC4gSWYgbm90IHRoZXkgd2lsbCBiZSBzZXQKLXRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0JVRkZFUl9PRkZTRVRfTk9ORTwvc3Bhbj48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1jb3B5LXJlZ2lvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyQ29weUZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJDb3B5RmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJDb3B5RmxhZ3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2Zmc2V0IGludG8gcGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGF0IHdoaWNoIHRoZSBuZXcgc3ViLWJ1ZmZlcgotYmVnaW5zLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpemUgb2YgdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBzdWItYnVmZmVyLCBpbiBieXRlcy4gSWYgLTEsIGFsbAotZGF0YSBpcyBjb3BpZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWNvcHktcmVnaW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIGFyZ3VtZW50cyB3ZXJlCi1pbnZhbGlkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWNvcHktZGVlcCI+PC9hPjxoMz5nc3RfYnVmZmVyX2NvcHlfZGVlcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9jb3B5X2RlZXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gVGhpcyB3aWxsIG1ha2UgYSBuZXdseSBhbGxvY2F0ZWQKLWNvcHkgb2YgdGhlIGRhdGEgdGhlIHNvdXJjZSBidWZmZXIgY29udGFpbnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1jb3B5LWRlZXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1jb3B5LWRlZXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKGJ1ZikgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZikpCi08L3ByZT4KLTxwPlRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IHdyaXRlIHRvIGEgYnVmZmVyJ3MgbWV0YWRhdGEgb3IgaXRzIG1lbW9yeSBhcnJheS4KLUl0IGlzIG9ubHkgc2FmZSB0byBjaGFuZ2UgYnVmZmVyIG1ldGFkYXRhIHdoZW4gdGhlIGN1cnJlbnQgcmVmZXJlbmNlIGlzCi13cml0YWJsZSwgaS5lLiBub2JvZHkgY2FuIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyB5b3Ugd2lsbCBtYWtlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItaXMtd3JpdGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbWFrZS13cml0YWJsZSI+PC9hPjxoMz5nc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZShidWYpICAgR1NUX0JVRkZFUl9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZikpKQotPC9wcmU+Ci08cD5SZXR1cm5zIGEgd3JpdGFibGUgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmPC9jb2RlPjwvZW0+Ci0uIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzCi1hbHJlYWR5IHdyaXRhYmxlLCB0aGlzIHdpbGwgc2ltcGx5IHJldHVybiB0aGUgc2FtZSBidWZmZXIuPC9wPgotPHA+VXNlIHRoaXMgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgYSBidWZmZXIgY2FuIGJlIHNhZmVseSBtb2RpZmllZCBiZWZvcmUKLW1ha2luZyBjaGFuZ2VzIHRvIGl0LCBpbmNsdWRpbmcgY2hhbmdpbmcgdGhlIG1ldGFkYXRhIHN1Y2ggYXMgUFRTL0RUUy48L3A+Ci08cD5JZiB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBzb3VyY2UgYnVmZmVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT4KLSBpcyBleGFjdGx5IG9uZSwgdGhlIGNhbGxlcgotaXMgdGhlIHNvbGUgb3duZXIgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGJ1ZmZlciBvYmplY3QgdW5jaGFuZ2VkLjwvcD4KLTxwPklmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QsIGEgY29weSB3aWxsIGJlIG1hZGUgdXNpbmcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHkiIHRpdGxlPSJnc3RfYnVmZmVyX2NvcHnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfY29weSgpPC9jb2RlPjwvYT4uIFRoZSBwYXNzZWQtaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPgotIHdpbGwgYmUgdW5yZWZmZWQgaW4gdGhhdCBjYXNlLCBhbmQgdGhlCi1jYWxsZXIgd2lsbCBub3cgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXcgcmV0dXJuZWQgYnVmZmVyIG9iamVjdC4gTm90ZQotdGhhdCB0aGlzIGp1c3QgY29waWVzIHRoZSBidWZmZXIgc3RydWN0dXJlIGl0c2VsZiwgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGlzCi1ub3QgY29waWVkIGlmIGl0IGNhbiBiZSBzaGFyZWQgYW1vbmdzdCBtdWx0aXBsZSBidWZmZXJzLjwvcD4KLTxwPkluIHNob3J0LCB0aGlzIGZ1bmN0aW9uIHVucmVmcyB0aGUgYnVmIGluIHRoZSBhcmd1bWVudCBhbmQgcmVmcyB0aGUgYnVmZmVyCi10aGF0IGl0IHJldHVybnMuIERvbid0IGFjY2VzcyB0aGUgYXJndW1lbnQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHVubGVzcwoteW91IGhhdmUgYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gaXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1tYWtlLXdyaXRhYmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1tYWtlLXdyaXRhYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSB3cml0YWJsZSBidWZmZXIgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlCi1zYW1lIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWY8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZXBsYWNlIj48L2E+PGgzPmdzdF9idWZmZXJfcmVwbGFjZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9yZXBsYWNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipvYnVmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKm5idWY8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TW9kaWZpZXMgYSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uIFRoZQotbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKLWluIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAotYnVmZmVyIGlzIHVucmVmZmVkLCB0aGUgbmV3IGlzIHJlZmZlZCkuPC9wPgotPHA+RWl0aGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnVmPC9jb2RlPjwvZW0+Ci0gb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9idWY8L2NvZGU+PC9lbT4KLSBtYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcmVwbGFjZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYnVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvCi1hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIGJlIHJlcGxhY2VkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmJ1ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdGhhdCB3aWxsCi1yZXBsYWNlIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2J1ZjwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZXBsYWNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9idWY8L2NvZGU+PC9lbT4KLXdhcyBkaWZmZXJlbnQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ1ZjwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWFwcGVuZCI+PC9hPjxoMz5nc3RfYnVmZmVyX2FwcGVuZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9hcHBlbmQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXBwZW5kIGFsbCB0aGUgbWVtb3J5IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjI8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmMTwvY29kZT48L2VtPgotLiBUaGUgcmVzdWx0IGJ1ZmZlciB3aWxsIGNvbnRhaW4gYQotY29uY2F0ZW5hdGlvbiBvZiB0aGUgbWVtb3J5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWYxPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWYyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hcHBlbmQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZmlyc3Qgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIGFwcGVuZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZjI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHNlY29uZCBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gYXBwZW5kLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYXBwZW5kLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0aGF0IGNvbnRhaW5zIHRoZSBtZW1vcnkKLW9mIHRoZSB0d28gc291cmNlIGJ1ZmZlcnMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYXBwZW5kLXJlZ2lvbiI+PC9hPjxoMz5nc3RfYnVmZmVyX2FwcGVuZF9yZWdpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfYXBwZW5kX3JlZ2lvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWYxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BcHBlbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmMjwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWYxPC9jb2RlPjwvZW0+Ci0uIFRoZSByZXN1bHQgYnVmZmVyIHdpbGwKLWNvbnRhaW4gYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBtZW1vcnkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjE8L2NvZGU+PC9lbT4KLSBhbmQgdGhlIHJlcXVlc3RlZCByZWdpb24gb2YKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWYyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hcHBlbmQtcmVnaW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZjE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGZpcnN0IHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0byBhcHBlbmQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWYyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzZWNvbmQgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIGFwcGVuZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvZmZzZXQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjI8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpemUgb3IgLTEgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjI8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hcHBlbmQtcmVnaW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0aGF0IGNvbnRhaW5zIHRoZSBtZW1vcnkKLW9mIHRoZSB0d28gc291cmNlIGJ1ZmZlcnMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LW1ldGEiPjwvYT48aDM+Z3N0X2J1ZmZlcl9nZXRfbWV0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfZ2V0X21ldGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gYXBpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbWV0YWRhdGEgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcGk8L2NvZGU+PC9lbT4KLSBvbiBidWZmZXIuIFdoZW4gdGhlcmUgaXMgbm8gc3VjaCBtZXRhZGF0YSwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlzCi1yZXR1cm5lZC4gSWYgbXVsdGlwbGUgbWV0YWRhdGEgd2l0aCB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFwaTwvY29kZT48L2VtPgotIGFyZSBhdHRhY2hlZCB0byB0aGlzCi1idWZmZXIgb25seSB0aGUgZmlyc3Qgb25lIGlzIHJldHVybmVkLiAgVG8gaGFuZGxlIG11bHRpcGxlIG1ldGFkYXRhIHdpdGggYQotZ2l2ZW4gQVBJIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pdGVyYXRlLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9pdGVyYXRlX21ldGEoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZvcmVhY2gtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfZm9yZWFjaF9tZXRhwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YSgpPC9jb2RlPjwvYT4gaW5zdGVhZAotYW5kIGNoZWNrIHRoZSBtZXRhLSZndDtpbmZvLmFwaSBtZW1iZXIgZm9yIHRoZSBBUEkgdHlwZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1tZXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXBpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgYW4gQVBJPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1tZXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG1ldGFkYXRhIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXBpPC9jb2RlPjwvZW0+Ci1vbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYWRkLW1ldGEiPjwvYT48aDM+Z3N0X2J1ZmZlcl9hZGRfbWV0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfYWRkX21ldGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBwYXJhbXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkIG1ldGFkYXRhIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSB1c2luZyB0aGUgcGFyYW1ldGVycyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyYW1zPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hZGQtbWV0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJhbXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYXJhbXMgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYWRkLW1ldGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWV0YWRhdGEgZm9yIHRoZSBhcGkgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZm88L2NvZGU+PC9lbT4KLW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWV0YSI+PC9hPjxoMz5nc3RfYnVmZmVyX3JlbW92ZV9tZXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX3JlbW92ZV9tZXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gKm1ldGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlIHRoZSBtZXRhZGF0YSBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1ldGE8L2NvZGU+PC9lbT4KLSBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWV0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1ldGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1yZW1vdmUtbWV0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbWV0YWRhdGEgZXhpc3RlZCBhbmQgd2FzIHJlbW92ZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIG5vIHN1Y2gKLW1ldGFkYXRhIHdhcyBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItaXRlcmF0ZS1tZXRhIj48L2E+PGgzPmdzdF9idWZmZXJfaXRlcmF0ZV9tZXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1ldGE8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9pdGVyYXRlX21ldGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAqc3RhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmUgdGhlIG5leHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+IGFmdGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jdXJyZW50PC9jb2RlPjwvZW0+Ci0uIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGF0ZTwvY29kZT48L2VtPgotIHBvaW50cwotdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCB0aGUgZmlyc3QgbWV0YWRhdGEgaXMgcmV0dXJuZWQuPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRlPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSB1cGRhdGVkIHdpdGggYW4gb3BhcXVlIHN0YXRlIHBvaW50ZXI8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWl0ZXJhdGUtbWV0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gb3BhcXVlIHN0YXRlIHBvaW50ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItaXRlcmF0ZS1tZXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5leHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgotd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcy4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmMiPjwvYT48aDM+R3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiAqKm1ldGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGZyb20gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZm9yZWFjaC1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfZm9yZWFjaF9tZXRhKCk8L2NvZGU+PC9hPi4gVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXRhPC9jb2RlPjwvZW0+Ci0KLWZpZWxkIHdpbGwgcG9pbnQgdG8gYSB0aGUgcmVmZXJlbmNlIG9mIHRoZSBtZXRhLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGZyb20gdGhpcyBjYWxsYmFjay48L3A+Ci08cD5XaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIHRoZSBuZXh0IG1ldGEgd2lsbCBiZQotcmV0dXJuZWQuIFdoZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZvcmVhY2gtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfZm9yZWFjaF9tZXRhwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YSgpPC9jb2RlPjwvYT4gd2lsbCByZXR1cm4uPC9wPgotPHA+V2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWV0YTwvY29kZT48L2VtPgotIGlzIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHRoZSBpdGVtIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWV0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBwYXNzZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZm9yZWFjaC1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfZm9yZWFjaF9tZXRhKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gd2hlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1mb3JlYWNoLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEoKTwvY29kZT48L2E+IHNob3VsZCBzdG9wPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZm9yZWFjaC1tZXRhIj48L2E+PGgzPmdzdF9idWZmZXJfZm9yZWFjaF9tZXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmMiIHRpdGxlPSJHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNhbGwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KLSBmb3IgZWFjaCBtZXRhIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIGNhbiBtb2RpZnkgdGhlIHBhc3NlZCBtZXRhIHBvaW50ZXIgb3IgaXRzIGNvbnRlbnRzLiBUaGUgcmV0dXJuIHZhbHVlCi1vZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIGRlZmluZSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb3IgaWYgdGhlIHJlbWFpbmluZyBtZXRhZGF0YSBpdGVtcwotaW4gdGhlIGJ1ZmZlciBzaG91bGQgYmUgc2tpcHBlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWZvcmVhY2gtbWV0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jIiB0aXRsZT0iR3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckZvcmVhY2hNZXRhRnVuYzwvc3Bhbj48L2E+IHRvIGNhbGwuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdXNlciBkYXRhIHBhc3NlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZm9yZWFjaC1tZXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotcmV0dXJuZWQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gZm9yIG9uZSBvZiB0aGUgbWV0YWRhdGEuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYWRkLXBhcmVudC1idWZmZXItbWV0YSI+PC9hPjxoMz5nc3RfYnVmZmVyX2FkZF9wYXJlbnRfYnVmZmVyX21ldGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0UGFyZW50QnVmZmVyTWV0YSIgdGl0bGU9InN0cnVjdCBHc3RQYXJlbnRCdWZmZXJNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhcmVudEJ1ZmZlck1ldGE8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9hZGRfcGFyZW50X2J1ZmZlcl9tZXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpyZWY8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdFBhcmVudEJ1ZmZlck1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0UGFyZW50QnVmZmVyTWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhcmVudEJ1ZmZlck1ldGE8L3NwYW4+PC9hPiB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gdGhhdCBob2xkcyBhIHJlZmVyZW5jZSBvbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZjwvY29kZT48L2VtPgotIHVudGlsIHRoZSBidWZmZXIgaXMgZnJlZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hZGQtcGFyZW50LWJ1ZmZlci1tZXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gcmVmLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYWRkLXBhcmVudC1idWZmZXItbWV0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0UGFyZW50QnVmZmVyTWV0YSIgdGl0bGU9InN0cnVjdCBHc3RQYXJlbnRCdWZmZXJNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyZW50QnVmZmVyTWV0YTwvc3Bhbj48L2E+IHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBidWZmZXIuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LXBhcmVudC1idWZmZXItbWV0YSI+PC9hPjxoMz5nc3RfYnVmZmVyX2dldF9wYXJlbnRfYnVmZmVyX21ldGEoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfYnVmZmVyX2dldF9wYXJlbnRfYnVmZmVyX21ldGEoYik8L3ByZT4KLTxwPkZpbmQgYW5kIHJldHVybiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RQYXJlbnRCdWZmZXJNZXRhIiB0aXRsZT0ic3RydWN0IEdzdFBhcmVudEJ1ZmZlck1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJlbnRCdWZmZXJNZXRhPC9zcGFuPjwvYT4gaWYgb25lIGV4aXN0cyBvbiB0aGUKLWJ1ZmZlcjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LXBhcmVudC1idWZmZXItbWV0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LWZsYWdzIj48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X2ZsYWdzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJGbGFncyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJGbGFnczwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX2dldF9mbGFncyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZ3M8L3NwYW4+PC9hPiBmbGFncyBzZXQgb24gdGhpcyBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtZmxhZ3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWdldC1mbGFncy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBmbGFncyBzZXQgb24gdGhpcyBidWZmZXIuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1zZXQtZmxhZ3MiPjwvYT48aDM+Z3N0X2J1ZmZlcl9zZXRfZmxhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9idWZmZXJfc2V0X2ZsYWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyBvbmUgb3IgbW9yZSBidWZmZXIgZmxhZ3Mgb24gYSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1zZXQtZmxhZ3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZ3M8L3NwYW4+PC9hPiB0byBzZXQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXNldC1mbGFncy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLXdlcmUgc3VjY2Vzc2Z1bGx5IHNldCBvbiBidWZmZXIuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci11bnNldC1mbGFncyI+PC9hPjxoMz5nc3RfYnVmZmVyX3Vuc2V0X2ZsYWdzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX3Vuc2V0X2ZsYWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DbGVhcnMgb25lIG9yIG1vcmUgYnVmZmVyIGZsYWdzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItdW5zZXQtZmxhZ3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZ3M8L3NwYW4+PC9hPiB0byBjbGVhcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci11bnNldC1mbGFncy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRydWUgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+Ci1pcyBzdWNjZXNzZnVsbHkgY2xlYXJlZCBmcm9tIGJ1ZmZlci48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWhhcy1mbGFncyI+PC9hPjxoMz5nc3RfYnVmZmVyX2hhc19mbGFnc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9oYXNfZmxhZ3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVmZmVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCdWZmZXItc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCdWZmZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCdWZmZXIgewotICBHc3RNaW5pT2JqZWN0ICAgICAgICAgIG1pbmlfb2JqZWN0OwotCi0gIEdzdEJ1ZmZlclBvb2wgICAgICAgICAqcG9vbDsKLQotICAvKiB0aW1lc3RhbXAgKi8KLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgICBwdHM7Ci0gIEdzdENsb2NrVGltZSAgICAgICAgICAgZHRzOwotICBHc3RDbG9ja1RpbWUgICAgICAgICAgIGR1cmF0aW9uOwotCi0gIC8qIG1lZGlhIHNwZWNpZmljIG9mZnNldCAqLwotICBndWludDY0ICAgICAgICAgICAgICAgIG9mZnNldDsKLSAgZ3VpbnQ2NCAgICAgICAgICAgICAgICBvZmZzZXRfZW5kOwotfTsKLTwvcHJlPgotPHA+VGhlIHN0cnVjdHVyZSBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiBVc2UgdGhlIGFzc29jaWF0ZWQgbWFjcm9zIHRvIGFjY2VzcyB0aGUgcHVibGljCi12YXJpYWJsZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QnVmZmVyLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlci1zdHJ1Y3QubWluaS1vYmplY3QiPjwvYT5taW5pX29iamVjdDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBzdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlci1zdHJ1Y3QucG9vbCI+PC9hPnBvb2w8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnBvaW50ZXIgdG8gdGhlIHBvb2wgb3duZXIgb2YgdGhlIGJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXItc3RydWN0LnB0cyI+PC9hPnB0czwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+cHJlc2VudGF0aW9uIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyLCBjYW4gYmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19USU1FX05PTkU8L3NwYW4+PC9hPiB3aGVuIHRoZQotcHRzIGlzIG5vdCBrbm93biBvciByZWxldmFudC4gVGhlIHB0cyBjb250YWlucyB0aGUgdGltZXN0YW1wIHdoZW4gdGhlCi1tZWRpYSBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXItc3RydWN0LmR0cyI+PC9hPmR0czwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZGVjb2RpbmcgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIsIGNhbiBiZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvc3Bhbj48L2E+IHdoZW4gdGhlCi1kdHMgaXMgbm90IGtub3duIG9yIHJlbGV2YW50LiBUaGUgZHRzIGNvbnRhaW5zIHRoZSB0aW1lc3RhbXAgd2hlbiB0aGUKLW1lZGlhIHNob3VsZCBiZSBwcm9jZXNzZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlci1zdHJ1Y3QuZHVyYXRpb24iPjwvYT5kdXJhdGlvbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZHVyYXRpb24gaW4gdGltZSBvZiB0aGUgYnVmZmVyIGRhdGEsIGNhbiBiZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvc3Bhbj48L2E+Ci13aGVuIHRoZSBkdXJhdGlvbiBpcyBub3Qga25vd24gb3IgcmVsZXZhbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXItc3RydWN0Lm9mZnNldCI+PC9hPm9mZnNldDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+YSBtZWRpYSBzcGVjaWZpYyBvZmZzZXQgZm9yIHRoZSBidWZmZXIgZGF0YS4KLUZvciB2aWRlbyBmcmFtZXMsIHRoaXMgaXMgdGhlIGZyYW1lIG51bWJlciBvZiB0aGlzIGJ1ZmZlci4KLUZvciBhdWRpbyBzYW1wbGVzLCB0aGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIGZpcnN0IHNhbXBsZSBpbiB0aGlzIGJ1ZmZlci4KLUZvciBmaWxlIGRhdGEgb3IgY29tcHJlc3NlZCBkYXRhIHRoaXMgaXMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBmaXJzdAotYnl0ZSBpbiB0aGlzIGJ1ZmZlci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlci1zdHJ1Y3Qub2Zmc2V0LWVuZCI+PC9hPm9mZnNldF9lbmQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBsYXN0IG9mZnNldCBjb250YWluZWQgaW4gdGhpcyBidWZmZXIuIEl0IGhhcyB0aGUgc2FtZQotZm9ybWF0IGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckZsYWdzIj48L2E+PGgzPmVudW0gR3N0QnVmZmVyRmxhZ3M8L2gzPgotPHA+QSBzZXQgb2YgYnVmZmVyIGZsYWdzIHVzZWQgdG8gZGVzY3JpYmUgcHJvcGVydGllcyBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUxJVkU6Q0FQUyI+PC9hPkdTVF9CVUZGRVJfRkxBR19MSVZFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBidWZmZXIgaXMgbGl2ZSBkYXRhIGFuZCBzaG91bGQgYmUgZGlzY2FyZGVkIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUEFVU0VEIHN0YXRlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctREVDT0RFLU9OTFk6Q0FQUyI+PC9hPkdTVF9CVUZGRVJfRkxBR19ERUNPREVfT05MWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgYnVmZmVyIGNvbnRhaW5zIGRhdGEgdGhhdCBzaG91bGQgYmUgZHJvcHBlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSBpdCB3aWxsIGJlIGNsaXBwZWQgYWdhaW5zdCB0aGUgc2VnbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcmllcyBvciBiZWNhdXNlIGl0IGRvZXMgbm90IGNvbnRhaW4gZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgc2hvd24gdG8gdGhlIHVzZXIuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1ESVNDT05UOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0ZMQUdfRElTQ09OVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgYnVmZmVyIG1hcmtzIGEgZGF0YSBkaXNjb250aW51aXR5IGluIHRoZSBzdHJlYW0uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHR5cGljYWxseSBvY2N1cnMgYWZ0ZXIgYSBzZWVrIG9yIGEgZHJvcHBlZCBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYSBsaXZlIG9yIG5ldHdvcmsgc291cmNlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctUkVTWU5DOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0ZMQUdfUkVTWU5DPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBidWZmZXIgdGltZXN0YW1wcyBtaWdodCBoYXZlIGEgZGlzY29udGludWl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoaXMgYnVmZmVyIGlzIGEgZ29vZCBwb2ludCB0byByZXN5bmNocm9uaXplLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctQ09SUlVQVEVEOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0ZMQUdfQ09SUlVQVEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBidWZmZXIgZGF0YSBpcyBjb3JydXB0ZWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1NQVJLRVI6Q0FQUyI+PC9hPkdTVF9CVUZGRVJfRkxBR19NQVJLRVI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGJ1ZmZlciBjb250YWlucyBhIG1lZGlhIHNwZWNpZmljIG1hcmtlci4gZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlbyB0aGlzIGlzIHR5cGljYWxseSB0aGUgZW5kIG9mIGEgZnJhbWUgYm91bmRhcnksIGZvciBhdWRpbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyB1c3VhbGx5IHRoZSBzdGFydCBvZiBhIHRhbGtzcHVydC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUhFQURFUjpDQVBTIj48L2E+R1NUX0JVRkZFUl9GTEFHX0hFQURFUjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgYnVmZmVyIGNvbnRhaW5zIGhlYWRlciBpbmZvcm1hdGlvbiB0aGF0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgdG8gZGVjb2RlIHRoZSBmb2xsb3dpbmcgZGF0YS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUdBUDpDQVBTIj48L2E+R1NUX0JVRkZFUl9GTEFHX0dBUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgYnVmZmVyIGhhcyBiZWVuIGNyZWF0ZWQgdG8gZmlsbCBhIGdhcCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSBhbmQgY29udGFpbnMgbWVkaWEgbmV1dHJhbCBkYXRhIChlbGVtZW50cyBjYW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCB0byBvcHRpbWl6ZWQgY29kZSBwYXRoIHRoYXQgaWdub3JlcyB0aGUgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50KS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLURST1BQQUJMRTpDQVBTIj48L2E+R1NUX0JVRkZFUl9GTEFHX0RST1BQQUJMRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgYnVmZmVyIGNhbiBiZSBkcm9wcGVkIHdpdGhvdXQgYnJlYWtpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sIGZvciBleGFtcGxlIHRvIHJlZHVjZSBiYW5kd2lkdGguPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItRkxBRy1ERUxUQS1VTklUOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGlzIHVuaXQgY2Fubm90IGJlIGRlY29kZWQgaW5kZXBlbmRlbnRseS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLVRBRy1NRU1PUlk6Q0FQUyI+PC9hPkdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoaXMgZmxhZyBpcyBzZXQgd2hlbiBtZW1vcnkgb2YgdGhlIGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWRkZWQvcmVtb3ZlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQlVGRkVSLUZMQUctU1lOQy1BRlRFUjpDQVBTIj48L2E+R1NUX0JVRkZFUl9GTEFHX1NZTkNfQUZURVI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RWxlbWVudHMgd2hpY2ggd3JpdGUgdG8gZGlzayBvciBwZXJtYW5lbnQKLQkJCQkgc3RvcmFnZSBzaG91bGQgZW5zdXJlIHRoZSBkYXRhIGlzIHN5bmNlZCBhZnRlcgotCQkJCSB3cml0aW5nIHRoZSBjb250ZW50cyBvZiB0aGlzIGJ1ZmZlci4gKFNpbmNlIDEuNik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1GTEFHLUxBU1Q6Q0FQUyI+PC9hPkdTVF9CVUZGRVJfRkxBR19MQVNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmFkZGl0aW9uYWwgbWVkaWEgc3BlY2lmaWMgZmxhZ3MgY2FuIGJlIGFkZGVkIHN0YXJ0aW5nIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZmxhZy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItT0ZGU0VULU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfQlVGRkVSX09GRlNFVF9OT05FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUgICgoZ3VpbnQ2NCktMSkKLTwvcHJlPgotPHA+Q29uc3RhbnQgZm9yIG5vLW9mZnNldCByZXR1cm4gcmVzdWx0cy48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckNvcHlGbGFncyI+PC9hPjxoMz5lbnVtIEdzdEJ1ZmZlckNvcHlGbGFnczwvaDM+Ci08cD5BIHNldCBvZiBmbGFncyB0aGF0IGNhbiBiZSBwcm92aWRlZCB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1pbnRvIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X2ludG/CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfY29weV9pbnRvKCk8L2NvZGU+PC9hPgotZnVuY3Rpb24gdG8gc3BlY2lmeSB3aGljaCBpdGVtcyBzaG91bGQgYmUgY29waWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckNvcHlGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItQ09QWS1OT05FOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0NPUFlfTk9ORTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5jb3B5IG5vdGhpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1DT1BZLUZMQUdTOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0NPUFlfRkxBR1M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZmxhZyBpbmRpY2F0aW5nIHRoYXQgYnVmZmVyIGZsYWdzIHNob3VsZCBiZSBjb3BpZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1DT1BZLVRJTUVTVEFNUFM6Q0FQUyI+PC9hPkdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmZsYWcgaW5kaWNhdGluZyB0aGF0IGJ1ZmZlciBwdHMsIGR0cywKLSAgZHVyYXRpb24sIG9mZnNldCBhbmQgb2Zmc2V0X2VuZCBzaG91bGQgYmUgY29waWVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItQ09QWS1NRVRBOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0NPUFlfTUVUQTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5mbGFnIGluZGljYXRpbmcgdGhhdCBidWZmZXIgbWV0YSBzaG91bGQgYmUKLSAgY29waWVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItQ09QWS1NRU1PUlk6Q0FQUyI+PC9hPkdTVF9CVUZGRVJfQ09QWV9NRU1PUlk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZmxhZyBpbmRpY2F0aW5nIHRoYXQgYnVmZmVyIG1lbW9yeSBzaG91bGQgYmUgcmVmZmVkCi0gIGFuZCBhcHBlbmRlZCB0byBhbHJlYWR5IGV4aXN0aW5nIG1lbW9yeS4gVW5sZXNzIHRoZSBtZW1vcnkgaXMgbWFya2VkIGFzCi0gIE5PX1NIQVJFLCBubyBhY3R1YWwgY29weSBvZiB0aGUgbWVtb3J5IGlzIG1hZGUgYnV0IGl0IGlzIHNpbXBseSByZWZmZWQuCi0gIEFkZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NUX0JVRkZFUl9DT1BZX0RFRVA8L2NvZGU+PC9lbT4KLSB0byBmb3JjZSBhIHJlYWwgY29weS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1DT1BZLU1FUkdFOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0NPUFlfTUVSR0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZmxhZyBpbmRpY2F0aW5nIHRoYXQgYnVmZmVyIG1lbW9yeSBzaG91bGQgYmUKLSAgbWVyZ2VkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVItQ09QWS1ERUVQOkNBUFMiPjwvYT5HU1RfQlVGRkVSX0NPUFlfREVFUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5mbGFnIGluZGljYXRpbmcgdGhhdCBtZW1vcnkgc2hvdWxkIGFsd2F5cyBiZQotICBjb3BpZWQgaW5zdGVhZCBvZiByZWZmZWQgKFNpbmNlIDEuMik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItQ09QWS1NRVRBREFUQTpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEE8L3ByZT4KLTxwPkNvbWJpbmF0aW9uIG9mIGFsbCBwb3NzaWJsZSBtZXRhZGF0YSBmaWVsZHMgdGhhdCBjYW4gYmUgY29waWVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHktaW50byIgdGl0bGU9ImdzdF9idWZmZXJfY29weV9pbnRvwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2NvcHlfaW50bygpPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQlVGRkVSLUNPUFktQUxMOkNBUFMiPjwvYT48aDM+R1NUX0JVRkZFUl9DT1BZX0FMTDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQlVGRkVSX0NPUFlfQUxMICAoKEdzdEJ1ZmZlckNvcHlGbGFncykoR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBIHwgR1NUX0JVRkZFUl9DT1BZX01FTU9SWSkpCi08L3ByZT4KLTxwPkNvbWJpbmF0aW9uIG9mIGFsbCBwb3NzaWJsZSBmaWVsZHMgdGhhdCBjYW4gYmUgY29waWVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHktaW50byIgdGl0bGU9ImdzdF9idWZmZXJfY29weV9pbnRvwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2NvcHlfaW50bygpPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYXJlbnRCdWZmZXJNZXRhIj48L2E+PGgzPnN0cnVjdCBHc3RQYXJlbnRCdWZmZXJNZXRhPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UGFyZW50QnVmZmVyTWV0YSB7Ci0gIEdzdE1ldGEgcGFyZW50OwotCi0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotfTsKLTwvcHJlPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RQYXJlbnRCdWZmZXJNZXRhIiB0aXRsZT0ic3RydWN0IEdzdFBhcmVudEJ1ZmZlck1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJlbnRCdWZmZXJNZXRhPC9zcGFuPjwvYT4gaXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KLXRvIGhvbGQgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBidWZmZXIgdGhhdCBpcyBvbmx5IHJlbGVhc2VkIHdoZW4gdGhlIGNoaWxkCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBpcyByZWxlYXNlZC48L3A+Ci08cD5UeXBpY2FsbHksIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RQYXJlbnRCdWZmZXJNZXRhIiB0aXRsZT0ic3RydWN0IEdzdFBhcmVudEJ1ZmZlck1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJlbnRCdWZmZXJNZXRhPC9zcGFuPjwvYT4gaXMgdXNlZCB3aGVuIHRoZSBjaGlsZCBidWZmZXIgaXMgZGlyZWN0bHkKLXVzaW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiBvZiB0aGUgcGFyZW50IGJ1ZmZlciwgYW5kIHdhbnRzIHRvIHByZXZlbnQgdGhlIHBhcmVudAotYnVmZmVyIGZyb20gYmVpbmcgcmV0dXJuZWQgdG8gYSBidWZmZXIgcG9vbCB1bnRpbCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gaXMgYXZhaWxhYmxlCi1mb3IgcmUtdXNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhcmVudEJ1ZmZlck1ldGEubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFyZW50QnVmZmVyTWV0YS5wYXJlbnQiPjwvYT5wYXJlbnQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+IHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFyZW50QnVmZmVyTWV0YS5idWZmZXIiPjwvYT5idWZmZXI8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBvbiB3aGljaCBhIHJlZmVyZW5jZSBpcyBiZWluZyBoZWxkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCdWZmZXIuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0QnVmZmVyTGlzdC5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RCdWZmZXJMaXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZmM0Y2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RCdWZmZXJMaXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdEJ1ZmZlckxpc3Q6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVmZmVyTGlzdC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVmZmVyTGlzdC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0QnVmZmVyTGlzdCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdEJ1ZmZlckxpc3QudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvaDI+Ci08cD5Hc3RCdWZmZXJMaXN0IOKAlCBMaXN0cyBvZiBidWZmZXJzIGZvciBkYXRhLXBhc3Npbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVmZmVyTGlzdC5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbmV3IiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X25ld8KgKCkiPmdzdF9idWZmZXJfbGlzdF9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbmV3LXNpemVkIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZMKgKCkiPmdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbGVuZ3RoIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aMKgKCkiPmdzdF9idWZmZXJfbGlzdF9sZW5ndGg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWFkZCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9hZGQoKSI+Z3N0X2J1ZmZlcl9saXN0X2FkZDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWluc2VydCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9pbnNlcnTCoCgpIj5nc3RfYnVmZmVyX2xpc3RfaW5zZXJ0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1yZW1vdmUiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlwqAoKSI+Z3N0X2J1ZmZlcl9saXN0X3JlbW92ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1yZWYiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfcmVmwqAoKSI+Z3N0X2J1ZmZlcl9saXN0X3JlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtdW5yZWYiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfdW5yZWbCoCgpIj5nc3RfYnVmZmVyX2xpc3RfdW5yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtY29weSIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9jb3B5wqAoKSI+Z3N0X2J1ZmZlcl9saXN0X2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtY29weS1kZWVwIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2NvcHlfZGVlcMKgKCkiPmdzdF9idWZmZXJfbGlzdF9jb3B5X2RlZXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2lzX3dyaXRhYmxlKCkiPmdzdF9idWZmZXJfbGlzdF9pc193cml0YWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZSgpIj5nc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0RnVuYyIgdGl0bGU9IkdzdEJ1ZmZlckxpc3RGdW5jwqAoKSI+KkdzdEJ1ZmZlckxpc3RGdW5jPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWZvcmVhY2giIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaMKgKCkiPmdzdF9idWZmZXJfbGlzdF9mb3JlYWNoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWdldCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9nZXTCoCgpIj5nc3RfYnVmZmVyX2xpc3RfZ2V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVmZmVyTGlzdC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0LXN0cnVjdCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckxpc3Qub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtQm94ZWQtVHlwZXMuaHRtbCI+R0JveGVkPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEJ1ZmZlckxpc3QKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCdWZmZXJMaXN0LmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckxpc3QuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+QnVmZmVyIGxpc3RzIGFyZSBhbiBvYmplY3QgY29udGFpbmluZyBhIGxpc3Qgb2YgYnVmZmVycy48L3A+Ci08cD5CdWZmZXIgbGlzdHMgYXJlIGNyZWF0ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1uZXciIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2xpc3RfbmV3KCk8L2NvZGU+PC9hPiBhbmQgZmlsbGVkIHdpdGggZGF0YQotdXNpbmcgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1pbnNlcnQiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2xpc3RfaW5zZXJ0KCk8L2NvZGU+PC9hPi48L3A+Ci08cD5CdWZmZXIgbGlzdHMgY2FuIGJlIHB1c2hlZCBvbiBhIHNyY3BhZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtbGlzdCIgdGl0bGU9ImdzdF9wYWRfcHVzaF9saXN0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2hfbGlzdCgpPC9jb2RlPjwvYT4uIFRoaXMgaXMKLWludGVyZXN0aW5nIHdoZW4gbXVsdGlwbGUgYnVmZmVycyBuZWVkIHRvIGJlIHB1c2hlZCBpbiBvbmUgZ28gYmVjYXVzZSBpdAotY2FuIHJlZHVjZSB0aGUgYW1vdW50IG9mIG92ZXJoZWFkIGZvciBwdXNoaW5nIGVhY2ggYnVmZmVyIGluZGl2aWR1YWxseS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckxpc3QuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1uZXciPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9saXN0X25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3LCBlbXB0eSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPi4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nCi10aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl9saXN0X3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2xpc3RfdW5yZWYoKTwvY29kZT48L2E+Ci1hZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LW5ldy1zaXplZCI+PC9hPjxoMz5nc3RfYnVmZmVyX2xpc3RfbmV3X3NpemVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfYnVmZmVyX2xpc3RfbmV3X3NpemVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3LCBlbXB0eSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPi4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nCi10aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4uIFRoZSBsaXN0IHdpbGwgaGF2ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIHNwYWNlIHByZWFsbG9jYXRlZCBzbwotdGhhdCBtZW1vcnkgcmVhbGxvY2F0aW9ucyBjYW4gYmUgYXZvaWRlZC48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX2xpc3RfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtbmV3LXNpemVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gaW5pdGlhbCByZXNlcnZlZCBzaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LW5ldy1zaXplZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2xpc3RfdW5yZWYoKTwvY29kZT48L2E+Ci1hZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LWxlbmd0aCI+PC9hPjxoMz5nc3RfYnVmZmVyX2xpc3RfbGVuZ3RowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX2xpc3RfbGVuZ3RoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtbGVuZ3RoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1sZW5ndGgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIGJ1ZmZlciBsaXN0PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1hZGQiPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X2FkZCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF9idWZmZXJfbGlzdF9hZGQobCxiKSBnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0KChsKSwtMSwoYikpOwotPC9wcmU+Ci08cD5BcHBlbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT4KLSBhdCB0aGUgZW5kIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LWFkZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtaW5zZXJ0Ij48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9pbnNlcnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVmZmVyX2xpc3RfaW5zZXJ0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluc2VydCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0uIE90aGVyIGJ1ZmZlcnMgYXJlIG1vdmVkIHRvIG1ha2Ugcm9vbSBmb3IKLXRoaXMgbmV3IGJ1ZmZlci48L3A+Ci08cD5BIC0xIHZhbHVlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0gd2lsbCBhcHBlbmQgdGhlIGJ1ZmZlciBhdCB0aGUgZW5kLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1pbnNlcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWR4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LXJlbW92ZSI+PC9hPjxoMz5nc3RfYnVmZmVyX2xpc3RfcmVtb3ZlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9saXN0X3JlbW92ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBsZW5ndGg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSBidWZmZXJzIHN0YXJ0aW5nIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0uIFRoZSBmb2xsb3dpbmcgYnVmZmVycwotYXJlIG1vdmVkIHRvIGNsb3NlIHRoZSBnYXAuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LXJlbW92ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGFtb3VudCB0byByZW1vdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LXJlZiI+PC9hPjxoMz5nc3RfYnVmZmVyX2xpc3RfcmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfYnVmZmVyX2xpc3RfcmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZ2l2ZW4gYnVmZmVyIGxpc3QgYnkgb25lLjwvcD4KLTxwPk5vdGUgdGhhdCB0aGUgcmVmY291bnQgYWZmZWN0cyB0aGUgd3JpdGFiaWxpdHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLSBhbmQgaXRzIGRhdGEsIHNlZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+LiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGtlZXBpbmcKLWFkZGl0aW9uYWwgcmVmZXJlbmNlcyB0byBHc3RCdWZmZXJMaXN0IGluc3RhbmNlcyBjYW4gcG90ZW50aWFsbHkgaW5jcmVhc2UKLXRoZSBudW1iZXIgb2YgbWVtY3B5IG9wZXJhdGlvbnMgaW4gYSBwaXBlbGluZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtcmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1yZWYucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtdW5yZWYiPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9saXN0X3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RGVjcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgYnVmZmVyIGxpc3QuIElmIHRoZSByZWZjb3VudCByZWFjaGVzIDAsIHRoZQotYnVmZmVyIGxpc3Qgd2lsbCBiZSBmcmVlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtdW5yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtY29weSI+PC9hPjxoMz5nc3RfYnVmZmVyX2xpc3RfY29wecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9saXN0X2NvcHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGdpdmVuIGJ1ZmZlciBsaXN0LiBUaGlzIHdpbGwgbWFrZSBhIG5ld2x5Ci1hbGxvY2F0ZWQgY29weSBvZiB0aGUgc291cmNlIGxpc3Qgd2l0aCBjb3BpZXMgb2YgYnVmZmVyIHBvaW50ZXJzLiBUaGUKLXJlZmNvdW50IG9mIGJ1ZmZlcnMgcG9pbnRlZCB0byB3aWxsIGJlIGluY3JlYXNlZCBieSBvbmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LWNvcHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1jb3B5LWRlZXAiPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X2NvcHlfZGVlcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9saXN0X2NvcHlfZGVlcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIGJ1ZmZlciBsaXN0LiBUaGlzIHdpbGwgbWFrZSBhIG5ld2x5IGFsbG9jYXRlZAotY29weSBvZiB0aGUgYnVmZmVyIHRoYXQgdGhlIHNvdXJjZSBidWZmZXIgbGlzdCBjb250YWlucy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtY29weS1kZWVwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1jb3B5LWRlZXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGUobGlzdCkgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobGlzdCkpCi08L3ByZT4KLTxwPlRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IGFkZCBidWZmZXJzIGFuZCBncm91cHMgaW50byBhIGJ1ZmZlciBsaXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1pcy13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X2J1ZmZlcl9saXN0X21ha2Vfd3JpdGFibGUobGlzdCkgR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobGlzdCkpKQotPC9wcmU+Ci08cD5NYWtlcyBhIHdyaXRhYmxlIGJ1ZmZlciBsaXN0IGZyb20gdGhlIGdpdmVuIGJ1ZmZlciBsaXN0LiBJZiB0aGUgc291cmNlIGJ1ZmZlcgotbGlzdCBpcyBhbHJlYWR5IHdyaXRhYmxlLCB0aGlzIHdpbGwgc2ltcGx5IHJldHVybiB0aGUgc2FtZSBidWZmZXIgbGlzdC4gQQotY29weSB3aWxsIG90aGVyd2lzZSBiZSBtYWRlIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWNvcHkiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfY29wecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X2NvcHkoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1tYWtlLXdyaXRhYmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1tYWtlLXdyaXRhYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSB3cml0YWJsZSBsaXN0LCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUKLXNhbWUgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QnVmZmVyTGlzdEZ1bmMiPjwvYT48aDM+R3N0QnVmZmVyTGlzdEZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RCdWZmZXJMaXN0RnVuYzxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICoqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgZnJvbSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1mb3JlYWNoIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbGlzdF9mb3JlYWNoKCk8L2NvZGU+PC9hPi4gVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLQotZmllbGQgd2lsbCBwb2ludCB0byBhIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGJ1ZmZlciBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+V2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCB0aGUgbmV4dCBidWZmZXIgd2lsbCBiZQotcmV0dXJuZWQuIFdoZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWZvcmVhY2giIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKTwvY29kZT48L2E+IHdpbGwgcmV0dXJuLjwvcD4KLTxwPldoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGlzIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHRoZSBpdGVtIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBidWZmZXJsaXN0LgotV2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gaGFzIGJlZW4gbWFkZSB3cml0YWJsZSwgdGhlIG5ldyBidWZmZXIgcmVmZXJlbmNlIGNhbiBiZSBhc3NpZ25lZAotdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcgdGhlIG9sZCBidWZmZXIgd2hlbgotcmVtb3Zpbmcgb3IgbW9kaWZ5aW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckxpc3RGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRoZSBidWZmZXIuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkeDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpbmRleCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1mb3JlYWNoIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfbGlzdF9mb3JlYWNoKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QnVmZmVyTGlzdEZ1bmMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiB3aGVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWZvcmVhY2giIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKTwvY29kZT48L2E+IHNob3VsZCBzdG9wPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1mb3JlYWNoIj48L2E+PGgzPmdzdF9idWZmZXJfbGlzdF9mb3JlYWNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3RGdW5jIiB0aXRsZT0iR3N0QnVmZmVyTGlzdEZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdEZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLSBmb3IgZWFjaCBidWZmZXIgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIGNhbiBtb2RpZnkgdGhlIHBhc3NlZCBidWZmZXIgcG9pbnRlciBvciBpdHMgY29udGVudHMuIFRoZSByZXR1cm4gdmFsdWUKLW9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gZGVmaW5lIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvciBpZiB0aGUgcmVtYWluaW5nIGJ1ZmZlcnMgaW4KLXRoZSBsaXN0IHNob3VsZCBiZSBza2lwcGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1mb3JlYWNoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3RGdW5jIiB0aXRsZT0iR3N0QnVmZmVyTGlzdEZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdEZ1bmM8L3NwYW4+PC9hPiB0byBjYWxsLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHVzZXIgZGF0YSBwYXNzZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWxpc3QtZm9yZWFjaC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci1yZXR1cm5lZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIGVhY2ggYnVmZmVyIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci1vciB3aGVuCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgotaXMgZW1wdHkuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1nZXQiPjwvYT48aDM+Z3N0X2J1ZmZlcl9saXN0X2dldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9saXN0X2dldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIGJ1ZmZlciBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1saXN0LWdldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItbGlzdC1nZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgYnVmZmVyIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZHg8L2NvZGU+PC9lbT4KLWluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ncm91cDwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhlcmUgaXMgbm8gYnVmZmVyLiBUaGUgYnVmZmVyIHJlbWFpbnMgdmFsaWQgYXMKLWxvbmcgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLWlzIHZhbGlkIGFuZCBidWZmZXIgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckxpc3Qub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckxpc3Qtc3RydWN0Ij48L2E+PGgzPkdzdEJ1ZmZlckxpc3Q8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXJMaXN0IEdzdEJ1ZmZlckxpc3Q7PC9wcmU+Ci08cD5PcGFxdWUgbGlzdCBvZiBncm91cGVkIGJ1ZmZlcnMuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlckxpc3Quc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RCdWZmZXJQb29sLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdEJ1ZmZlclBvb2wuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEzNzQxZS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdEJ1ZmZlclBvb2wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyOTAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdEJ1ZmZlclBvb2w6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVmZmVyUG9vbC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVmZmVyUG9vbC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QnVzLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0QnVmZmVyUG9vbCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2wudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvaDI+Ci08cD5Hc3RCdWZmZXJQb29sIOKAlCBQb29sIGZvciBidWZmZXJzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlclBvb2wuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1JUy1GTFVTSElORzpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9QT09MX0lTX0ZMVVNISU5HKCkiPkdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtbmV3IiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX25ld8KgKCkiPmdzdF9idWZmZXJfcG9vbF9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWdldC1wYXJhbXMiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9wYXJhbXPCoCgpIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9wYXJhbXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1zZXQtcGFyYW1zIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy12YWxpZGF0ZS1wYXJhbXMiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3ZhbGlkYXRlX3BhcmFtc8KgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfdmFsaWRhdGVfcGFyYW1zPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfYWxsb2NhdG9ywqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfYWxsb2NhdG9yPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctc2V0LWFsbG9jYXRvciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvcsKgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctbi1vcHRpb25zIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnPCoCgpIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX25fb3B0aW9uczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWFkZC1vcHRpb24iIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb27CoCgpIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfb3B0aW9uwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfb3B0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1oYXMtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKioKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LW9wdGlvbnMiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfZ2V0X29wdGlvbnPCoCgpIj5nc3RfYnVmZmVyX3Bvb2xfZ2V0X29wdGlvbnM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtaGFzLW9wdGlvbiIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2hhc19vcHRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtaXMtYWN0aXZlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZcKgKCkiPmdzdF9idWZmZXJfcG9vbF9pc19hY3RpdmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfZmx1c2hpbmfCoCgpIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2ZsdXNoaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWFjcXVpcmUtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVywqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1yZWxlYXNlLWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlcsKgKCkiPmdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlclBvb2wub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sLXN0cnVjdCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlclBvb2xDbGFzcyI+R3N0QnVmZmVyUG9vbENsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzIj5Hc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zIiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zIj5Hc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCdWZmZXJQb29sLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEJ1ZmZlclBvb2wKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCdWZmZXJQb29sLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlclBvb2wuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBwcmUtYWxsb2NhdGUgYW5kIHJlY3ljbGUKLWJ1ZmZlcnMgb2YgdGhlIHNhbWUgc2l6ZSBhbmQgd2l0aCB0aGUgc2FtZSBwcm9wZXJ0aWVzLjwvcD4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gaXMgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLW5ldyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9uZXcoKTwvY29kZT48L2E+LjwvcD4KLTxwPk9uY2UgYSBwb29sIGlzIGNyZWF0ZWQsIGl0IG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQuIEEgY2FsbCB0bwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZygpPC9jb2RlPjwvYT4gcmV0dXJucyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmcm9tCi10aGUgcG9vbC4gV2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctc2V0LXBhcmFtcyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zKCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1zZXQtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9ywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9hbGxvY2F0b3IoKTwvY29kZT48L2E+IHRoZSBidWZmZXJwb29sIHBhcmFtZXRlcnMgYW5kCi1hbGxvY2F0b3IgY2FuIGJlIGNvbmZpZ3VyZWQuIE90aGVyIHByb3BlcnRpZXMgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIHBvb2wKLWRlcGVuZGluZyBvbiB0aGUgcG9vbCBpbXBsZW1lbnRhdGlvbi48L3A+Ci08cD5BIGJ1ZmZlcnBvb2wgY2FuIGhhdmUgZXh0cmEgb3B0aW9ucyB0aGF0IGNhbiBiZSBlbmFibGVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1hZGQtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24oKTwvY29kZT48L2E+LiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgY2FuIGJlIHJldHJpZXZlZAotd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1nZXQtb3B0aW9ucyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9uc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zKCk8L2NvZGU+PC9hPi4gU29tZSBvcHRpb25zIGFsbG93IGZvciBhZGRpdGlvbmFsCi1jb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdG8gYmUgc2V0LjwvcD4KLTxwPkFmdGVyIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBoYXMgYmVlbiBjb25maWd1cmVkLAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZygpPC9jb2RlPjwvYT4gdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgcG9vbC4gVGhpcyBjYW4KLWZhaWwgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaXMgbm90IGFjY2VwdGVkLjwvcD4KLTxwPkFmdGVyIHRoZSBhIHBvb2wgaGFzIGJlZW4gY29uZmlndXJlZCwgaXQgY2FuIGJlIGFjdGl2YXRlZCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1zZXQtYWN0aXZlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlKCk8L2NvZGU+PC9hPi4gVGhpcyB3aWxsIHByZWFsbG9jYXRlIHRoZSBjb25maWd1cmVkIHJlc291cmNlcwotaW4gdGhlIHBvb2wuPC9wPgotPHA+V2hlbiB0aGUgcG9vbCBpcyBhY3RpdmUsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWFjcXVpcmUtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKTwvY29kZT48L2E+IGNhbiBiZSB1c2VkIHRvCi1yZXRyaWV2ZSBhIGJ1ZmZlciBmcm9tIHRoZSBwb29sLjwvcD4KLTxwPkJ1ZmZlcnMgYWxsb2NhdGVkIGZyb20gYSBidWZmZXJwb29sIHdpbGwgYXV0b21hdGljYWxseSBiZSByZXR1cm5lZCB0byB0aGUKLXBvb2wgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1yZWxlYXNlLWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyKCk8L2NvZGU+PC9hPiB3aGVuIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDAuPC9wPgotPHA+VGhlIGJ1ZmZlcnBvb2wgY2FuIGJlIGRlYWN0aXZhdGVkIGFnYWluIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSgpPC9jb2RlPjwvYT4uCi1BbGwgZnVydGhlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1hY3F1aXJlLWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCk8L2NvZGU+PC9hPiBjYWxscyB3aWxsIHJldHVybiBhbiBlcnJvci4gV2hlbgotYWxsIGJ1ZmZlcnMgYXJlIHJldHVybmVkIHRvIHRoZSBwb29sIHRoZXkgd2lsbCBiZSBmcmVlZC48L3A+Ci08cD5Vc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiB0byByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gYSBidWZmZXJwb29sLiBJZiB0aGUKLXJlZmNvdW50IG9mIHRoZSBwb29sIHJlYWNoZXMgMCwgdGhlIHBvb2wgd2lsbCBiZSBmcmVlZC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlclBvb2wuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CVUZGRVItUE9PTC1JUy1GTFVTSElORzpDQVBTIj48L2E+PGgzPkdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORyhwb29sKSAgKGdfYXRvbWljX2ludF9nZXQgKCZhbXA7cG9vbC0mZ3Q7Zmx1c2hpbmcpKQotPC9wcmU+Ci08cD5DaGVjayBpZiB0aGUgYnVmZmVycG9vbCBpcyBmbHVzaGluZy4gU3ViY2xhc3NlcyBtaWdodCB3YW50IHRvIGNoZWNrIHRoZQotc3RhdGUgb2YgdGhlIHBvb2wgaW4gdGhlIGFjcXVpcmUgZnVuY3Rpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJVRkZFUi1QT09MLUlTLUZMVVNISU5HLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHc3RCdWZmZXJQb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtbmV3Ij48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfcG9vbF9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiBpbnN0YW5jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkFsaWFzIGZvciB0cmFuc2ZlciBub25lLCB1c2VkIGZvciBvYmplY3RzIHdpdGggZmxvYXRpbmcgcmVmcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtcGFyYW1zIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X3BhcmFtc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfcGFyYW1zICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKmNvbmZpZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICoqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1pbl9idWZmZXJzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1heF9idWZmZXJzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uZmlnPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtcGFyYW1zLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbmZpZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+IGNvbmZpZ3VyYXRpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBjYXBzIG9mIGJ1ZmZlcnMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHNpemUgb2YgZWFjaCBidWZmZXIsIG5vdCBpbmNsdWRpbmcgcHJlZml4IGFuZCBwYWRkaW5nLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWluaW11bSBhbW91bnQgb2YgYnVmZmVycyB0byBhbGxvY2F0ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWF4X2J1ZmZlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgb3IgMCBmb3IgdW5saW1pdGVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtcGFyYW1zLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGFsbCBwYXJhbWV0ZXJzIGNvdWxkIGJlIGZldGNoZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctc2V0LXBhcmFtcyI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX2J1ZmZlcnM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtYXhfYnVmZmVyczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25maWd1cmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPgotIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1zZXQtcGFyYW1zLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbmZpZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gY29uZmlndXJhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2FwcyBmb3IgdGhlIGJ1ZmZlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaXplIG9mIGVhY2ggYnVmZmVyLCBub3QgaW5jbHVkaW5nIHByZWZpeCBhbmQgcGFkZGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtaW5pbXVtIGFtb3VudCBvZiBidWZmZXJzIHRvIGFsbG9jYXRlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtYXhpbXVtIGFtb3VudCBvZiBidWZmZXJzIHRvIGFsbG9jYXRlIG9yIDAgZm9yIHVubGltaXRlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy12YWxpZGF0ZS1wYXJhbXMiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ192YWxpZGF0ZV9wYXJhbXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9idWZmZXJfcG9vbF9jb25maWdfdmFsaWRhdGVfcGFyYW1zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX2J1ZmZlcnM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtYXhfYnVmZmVyczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5WYWxpZGF0ZSB0aGF0IGNoYW5nZXMgbWFkZSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uZmlnPC9jb2RlPjwvZW0+Ci0gYXJlIHN0aWxsIHZhbGlkIGluIHRoZSBjb250ZXh0IG9mIHRoZQotZXhwZWN0ZWQgcGFyYW1ldGVycy4gVGhpcyBmdW5jdGlvbiBpcyBhIGhlbHBlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlCi1jaGFuZ2VzIG1hZGUgYnkgYSBwb29sIHRvIGEgY29uZmlnIHdoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZygpPC9jb2RlPjwvYT4KLXJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uIFRoaXMgZXhwZWN0cyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gaGF2ZW4ndCBjaGFuZ2VkIGFuZCB0aGF0Ci08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluX2J1ZmZlcnM8L2NvZGU+PC9lbT4KLSBhcmVuJ3QgbG93ZXIgdGhlbiB3aGF0IHdlIGluaXRpYWxseSBleHBlY3RlZC4KLVRoaXMgZG9lcyBub3QgY2hlY2sgaWYgb3B0aW9ucyBvciBhbGxvY2F0b3IgcGFyYW1ldGVycyBhcmUgc3RpbGwgdmFsaWQsCi13b24ndCBjaGVjayBpZiBzaXplIGhhdmUgY2hhbmdlZCwgc2luY2UgY2hhbmdpbmcgdGhlIHNpemUgaXMgdmFsaWQgdG8gYWRhcHQKLXBhZGRpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy12YWxpZGF0ZS1wYXJhbXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29uZmlnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gY29uZmlndXJhdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGV4Y2VwdGVkIGNhcHMgb2YgYnVmZmVycy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXhwZWN0ZWQgc2l6ZSBvZiBlYWNoIGJ1ZmZlciwgbm90IGluY2x1ZGluZyBwcmVmaXggYW5kIHBhZGRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWluX2J1ZmZlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXhwZWN0ZWQgbWluaW11bSBhbW91bnQgb2YgYnVmZmVycyB0byBhbGxvY2F0ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWF4X2J1ZmZlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXhwZWN0IG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgb3IgMCBmb3IgdW5saW1pdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy12YWxpZGF0ZS1wYXJhbXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBpbiB0aGlzIGNvbnRleHQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LWFsbG9jYXRvciI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9hbGxvY2F0b3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X2FsbG9jYXRvciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpjb25maWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiAqKmFsbG9jYXRvcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdGlvblBhcmFtczwvc3Bhbj48L2E+ICpwYXJhbXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJhbXM8L2NvZGU+PC9lbT4KLSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25maWc8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWdldC1hbGxvY2F0b3IucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29uZmlnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gY29uZmlndXJhdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFsbG9jYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmFtczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtYWxsb2NhdG9yLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiB0aGUgdmFsdWVzIGFyZSBzZXQuIDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtY29uZmlnLXNldC1hbGxvY2F0b3IiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9ywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKmNvbmZpZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyYW1zPC9jb2RlPjwvZW0+Ci0gb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPgotLjwvcD4KLTxwPk9uZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJhbXM8L2NvZGU+PC9lbT4KLSBjYW4gYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBidXQgbm90IGJvdGguIFdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPgotCi1pcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHRoZSBkZWZhdWx0IGFsbG9jYXRvciBvZiB0aGUgcG9vbCB3aWxsIHVzZSB0aGUgdmFsdWVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJhbTwvY29kZT48L2VtPgotCi10byBwZXJmb3JtIGl0cyBhbGxvY2F0aW9uLiBXaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJhbTwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgdGhlIHBvb2wgd2lsbCB1c2UgdGhlCi1wcm92aWRlZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gd2l0aCBpdHMgZGVmYXVsdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPi48L3A+Ci08cD5BIGNhbGwgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZygpPC9jb2RlPjwvYT4gY2FuIHVwZGF0ZSB0aGUgYWxsb2NhdG9yIGFuZCBwYXJhbXMKLXdpdGggdGhlIHZhbHVlcyB0aGF0IGl0IGlzIGFibGUgdG8gZG8uIFNvbWUgcG9vbHMgYXJlLCBmb3IgZXhhbXBsZSwgbm90IGFibGUKLXRvIG9wZXJhdGUgd2l0aCBkaWZmZXJlbnQgYWxsb2NhdG9ycyBvciBjYW5ub3QgYWxsb2NhdGUgd2l0aCB0aGUgdmFsdWVzCi1zcGVjaWZpZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmFtczwvY29kZT48L2VtPgotLiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZygpPC9jb2RlPjwvYT4gdG8gZ2V0IHRoZSBjdXJyZW50bHkKLXVzZWQgdmFsdWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctc2V0LWFsbG9jYXRvci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb25maWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+IGNvbmZpZ3VyYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWxsb2NhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmFtczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1uLW9wdGlvbnMiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKmNvbmZpZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIGluIHRoZSBvcHRpb25zIGFycmF5IG9mIHRoZQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPgotIHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtY29uZmlnLW4tb3B0aW9ucy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29uZmlnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiBjb25maWd1cmF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1uLW9wdGlvbnMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgb3B0aW9ucyBhcnJheSBzaXplIGFzIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctYWRkLW9wdGlvbiI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY29uZmlnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm9wdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FbmFibGVkIHRoZSBvcHRpb24gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPgotLiBUaGlzIHdpbGwgaW5zdHJ1Y3QgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXJwb29sPC9jb2RlPjwvZW0+Ci0gdG8gZW5hYmxlCi10aGUgc3BlY2lmaWVkIG9wdGlvbiBvbiB0aGUgYnVmZmVycyB0aGF0IGl0IGFsbG9jYXRlcy48L3A+Ci08cD5UaGUgc3VwcG9ydGVkIG9wdGlvbnMgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT4KLSBjYW4gYmUgcmV0cmlldmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LW9wdGlvbnMiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfZ2V0X29wdGlvbnPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucygpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1hZGQtb3B0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbmZpZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gY29uZmlndXJhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vcHRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbiBvcHRpb24gdG8gYWRkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LW9wdGlvbiI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X29wdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpjb25maWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSBhbiBhdmFpbGFibGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPgotIGFuZCBnZXQgdGhlIG9wdGlvbiBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT4KLSBvZiB0aGUgb3B0aW9ucyBBUEkKLWFycmF5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LW9wdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb25maWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+IGNvbmZpZ3VyYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb3NpdGlvbiBpbiB0aGUgb3B0aW9uIGFycmF5IHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LW9wdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gb2YgdGhlIG9wdGlvbiBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1oYXMtb3B0aW9uIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKmNvbmZpZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpvcHRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPgotIGNvbnRhaW5zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vcHRpb248L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWhhcy1vcHRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29uZmlnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiBjb25maWd1cmF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9wdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIG9wdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1oYXMtb3B0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBvcHRpb25zIGFycmF5IGNvbnRhaW5zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vcHRpb248L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWdldC1vcHRpb25zIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9uc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKioKLWdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZyB3aXRoIHN1cHBvcnRlZCBidWZmZXJwb29sIG9wdGlvbnMgZm9yCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPgotLiBBbiBvcHRpb24gd291bGQgdHlwaWNhbGx5IGJlIGVuYWJsZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWFkZC1vcHRpb24iIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbigpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWdldC1vcHRpb25zLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1nZXQtb3B0aW9ucy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRlcm1pbmF0ZWQgYXJyYXkKLW9mIHN0cmluZ3MuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1oYXMtb3B0aW9uIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVmZmVyX3Bvb2xfaGFzX29wdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3B0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBidWZmZXJwb29sIHN1cHBvcnRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vcHRpb248L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtaGFzLW9wdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vcHRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbiBvcHRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1oYXMtb3B0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBidWZmZXIgcG9vbCBjb250YWlucyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b3B0aW9uPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1nZXQtY29uZmlnIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9vbC4gVGhpcyBjb25maWd1cmF0aW9uCi1jYW4gZWl0aGVyIGJlIG1vZGlmaWVkIGFuZCB1c2VkIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZygpPC9jb2RlPjwvYT4gY2FsbAotb3IgaXQgbXVzdCBiZSBmcmVlZCBhZnRlciB1c2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtZ2V0LWNvbmZpZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9vbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtZ2V0LWNvbmZpZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgY29weSBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+Ci0uIHVzZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJlZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZSBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1zZXQtY29uZmlnIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLXNldC1jb25maWciPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpjb25maWc8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwb29sLiBJZiB0aGUgcG9vbCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQsIGFuZAotdGhlIGNvbmZpZ3VyYXRpb24gaGF2ZW4ndCBjaGFuZ2UsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LiBJZiB0aGUKLXBvb2wgaXMgYWN0aXZlLCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBhbmQgYWN0aXZlIGNvbmZpZ3VyYXRpb24KLXdpbGwgcmVtYWluLiBCdWZmZXJzIGFsbG9jYXRlZCBmb3JtIHRoaXMgcG9vbCBtdXN0IGJlIHJldHVybmVkIG9yIGVsc2UgdGhpcwotZnVuY3Rpb24gd2lsbCBkbyBub3RoaW5nIGFuZCByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPgotIGlzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gdGhhdCBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvcgotdGhlIHBvb2wuIEEgZGVmYXVsdCBhbmQgbWFuZGF0b3J5IHNldCBvZiBwYXJhbWV0ZXJzIGNhbiBiZSBjb25maWd1cmVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1zZXQtcGFyYW1zIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctc2V0LWFsbG9jYXRvciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yKCk8L2NvZGU+PC9hPgotYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1hZGQtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24oKTwvY29kZT48L2E+LjwvcD4KLTxwPklmIHRoZSBwYXJhbWV0ZXJzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25maWc8L2NvZGU+PC9lbT4KLSBjYW4gbm90IGJlIHNldCBleGFjdGx5LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGFuZCB3aWxsIHRyeSB0byB1cGRhdGUgYXMgbXVjaCBzdGF0ZSBhcyBwb3NzaWJsZS4gVGhlIG5ldyBzdGF0ZSBjYW4KLXRoZW4gYmUgcmV0cmlldmVkIGFuZCByZWZpbmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZygpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbmZpZzwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1zZXQtY29uZmlnLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbmZpZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1zZXQtY29uZmlnLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gY291bGQgYmUgc2V0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtc2V0LWFjdGl2ZSI+PC9hPjxoMz5nc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnRyb2wgdGhlIGFjdGl2ZSBzdGF0ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPgotLiBXaGVuIHRoZSBwb29sIGlzIGluYWN0aXZlLCBuZXcgY2FsbHMgdG8KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWFjcXVpcmUtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKTwvY29kZT48L2E+IHdpbGwgcmV0dXJuIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUZMVVNISU5HOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19GTFVTSElORzwvY29kZT48L2E+LjwvcD4KLTxwPkFjdGl2YXRpbmcgdGhlIGJ1ZmZlcnBvb2wgd2lsbCBwcmVhbGxvY2F0ZSBhbGwgcmVzb3VyY2VzIGluIHRoZSBwb29sIGJhc2VkIG9uCi10aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9vbC48L3A+Ci08cD5EZWFjdGl2YXRpbmcgd2lsbCBmcmVlIHRoZSByZXNvdXJjZXMgYWdhaW4gd2hlbiB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcKLWJ1ZmZlcnMuIFdoZW4gdGhlcmUgYXJlIG91dHN0YW5kaW5nIGJ1ZmZlcnMsIHRoZXkgd2lsbCBiZSBmcmVlZCBhcyBzb29uIGFzCi10aGV5IGFyZSBhbGwgcmV0dXJuZWQgdG8gdGhlIHBvb2wuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLXNldC1hY3RpdmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9vbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWN0aXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5ldyBhY3RpdmUgc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1zZXQtYWN0aXZlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gd2hlbiB0aGUgcG9vbCB3YXMgbm90IGNvbmZpZ3VyZWQgb3Igd2hlbiBwcmVhbGxvY2F0aW9uIG9mIHRoZQotYnVmZmVycyBmYWlsZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1pcy1hY3RpdmUiPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+Ci0gaXMgYWN0aXZlLiBBIHBvb2wgY2FuIGJlIGFjdGl2YXRlZCB3aXRoIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSgpPC9jb2RlPjwvYT4gY2FsbC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtaXMtYWN0aXZlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1pcy1hY3RpdmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbiB0aGUgcG9vbCBpcyBhY3RpdmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1zZXQtZmx1c2hpbmciPjwvYT48aDM+Z3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idWZmZXJfcG9vbF9zZXRfZmx1c2hpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmbHVzaGluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FbmFibGUgb3IgZGlzYWJsZSB0aGUgZmx1c2hpbmcgc3RhdGUgb2YgYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPgotIHdpdGhvdXQgZnJlZWluZyBvcgotYWxsb2NhdGluZyBidWZmZXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1zZXQtZmx1c2hpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9vbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmx1c2hpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIHRvIHN0YXJ0IG9yIHN0b3AgZmx1c2hpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWFjcXVpcmUtYnVmZmVyIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMiIHRpdGxlPSJzdHJ1Y3QgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtczwvc3Bhbj48L2E+ICpwYXJhbXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWNxdWlyZSBhIGJ1ZmZlciBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBzaG91bGQgcG9pbnQgdG8gYSBtZW1vcnkgbG9jYXRpb24gdGhhdAotY2FuIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBuZXcgYnVmZmVyLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJhbXM8L2NvZGU+PC9lbT4KLSBjYW4gYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IG9yIGNvbnRhaW4gb3B0aW9uYWwgcGFyYW1ldGVycyB0byBpbmZsdWVuY2UgdGhlCi1hbGxvY2F0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItcG9vbC1hY3F1aXJlLWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBsb2NhdGlvbiBmb3IgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmFtczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwYXJhbWV0ZXJzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLWFjcXVpcmUtYnVmZmVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBzdWNoIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1GTFVTSElORzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZMT1dfRkxVU0hJTkc8L2NvZGU+PC9hPiB3aGVuIHRoZSBwb29sIGlzCi1pbmFjdGl2ZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1wb29sLXJlbGVhc2UtYnVmZmVyIj48L2E+PGgzPmdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWxlYXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPgotLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGhhdmUgcHJldmlvdXNseSBiZWVuIGFsbG9jYXRlZCBmcm9tCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPgotIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtYWNxdWlyZS1idWZmZXIiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcigpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxhc3QgcmVmIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLQotZGlzYXBwZWFycy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXBvb2wtcmVsZWFzZS1idWZmZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9vbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlclBvb2wub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlclBvb2wtc3RydWN0Ij48L2E+PGgzPkdzdEJ1ZmZlclBvb2w8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXJQb29sIEdzdEJ1ZmZlclBvb2w7PC9wcmU+Ci08cD5UaGUgc3RydWN0dXJlIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4uIFVzZSB0aGUgYXNzb2NpYXRlZCBtYWNyb3MgdG8gYWNjZXNzIHRoZSBwdWJsaWMKLXZhcmlhYmxlcy48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0QnVmZmVyUG9vbENsYXNzPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QnVmZmVyUG9vbENsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICAgb2JqZWN0X2NsYXNzOwotCi0gIGNvbnN0IGdjaGFyICoqICgqZ2V0X29wdGlvbnMpICAgIChHc3RCdWZmZXJQb29sICpwb29sKTsKLSAgZ2Jvb2xlYW4gICAgICAgKCpzZXRfY29uZmlnKSAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdFN0cnVjdHVyZSAqY29uZmlnKTsKLQotICBnYm9vbGVhbiAgICAgICAoKnN0YXJ0KSAgICAgICAgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCk7Ci0gIGdib29sZWFuICAgICAgICgqc3RvcCkgICAgICAgICAgIChHc3RCdWZmZXJQb29sICpwb29sKTsKLQotICBHc3RGbG93UmV0dXJuICAoKmFjcXVpcmVfYnVmZmVyKSAoR3N0QnVmZmVyUG9vbCAqcG9vbCwgR3N0QnVmZmVyICoqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgKnBhcmFtcyk7Ci0gIEdzdEZsb3dSZXR1cm4gICgqYWxsb2NfYnVmZmVyKSAgIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RCdWZmZXIgKipidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyAqcGFyYW1zKTsKLSAgdm9pZCAgICAgICAgICAgKCpyZXNldF9idWZmZXIpICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgdm9pZCAgICAgICAgICAgKCpyZWxlYXNlX2J1ZmZlcikgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgdm9pZCAgICAgICAgICAgKCpmcmVlX2J1ZmZlcikgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgdm9pZCAgICAgICAgICAgKCpmbHVzaF9zdGFydCkgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wpOwotICB2b2lkICAgICAgICAgICAoKmZsdXNoX3N0b3ApICAgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCk7Ci19OwotPC9wcmU+Ci08cD5UaGUgR3N0QnVmZmVyUG9vbCBjbGFzcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RPYmplY3RDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdENsYXNzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5vYmplY3QtY2xhc3MiPjwvYT5vYmplY3RfY2xhc3M8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk9iamVjdCBwYXJlbnQgY2xhc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3MuZ2V0LW9wdGlvbnMiPjwvYT5nZXRfb3B0aW9uczwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+Z2V0IGEgbGlzdCBvZiBvcHRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHBvb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3Muc2V0LWNvbmZpZyI+PC9hPnNldF9jb25maWc8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmFwcGx5IHRoZSBidWZmZXJwb29sIGNvbmZpZ3VyYXRpb24uIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KLXdpbGwgcGFyc2UgdGhlIGRlZmF1bHQgY29uZmlnIHBhcmFtZXRlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3Muc3RhcnQiPjwvYT5zdGFydDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+c3RhcnQgdGhlIGJ1ZmZlcnBvb2wuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgcHJlYWxsb2NhdGUKLW1pbi1idWZmZXJzIGJ1ZmZlcnMgYW5kIHB1dCB0aGVtIGluIHRoZSBxdWV1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+c3RvcCB0aGUgYnVmZmVycG9vbC4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBmcmVlIHRoZQotcHJlYWxsb2NhdGVkIGJ1ZmZlcnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsIHRoZSBidWZmZXJzIGFyZQotcmV0dXJuZWQgdG8gdGhlIHBvb2wuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLmFjcXVpcmUtYnVmZmVyIj48L2E+YWNxdWlyZV9idWZmZXI8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmdldCBhIG5ldyBidWZmZXIgZnJvbSB0aGUgcG9vbC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLXdpbGwgdGFrZSBhIGJ1ZmZlciBmcm9tIHRoZSBxdWV1ZSBhbmQgb3B0aW9uYWxseSB3YWl0IGZvciBhIGJ1ZmZlciB0bwotYmUgcmVsZWFzZWQgd2hlbiB0aGVyZSBhcmUgbm8gYnVmZmVycyBhdmFpbGFibGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLmFsbG9jLWJ1ZmZlciI+PC9hPmFsbG9jX2J1ZmZlcjwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+YWxsb2NhdGUgYSBidWZmZXIuIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcwotYnVmZmVycyBmcm9tIHRoZSBjb25maWd1cmVkIG1lbW9yeSBhbGxvY2F0b3IgYW5kIHdpdGggdGhlIGNvbmZpZ3VyZWQKLXBhcmFtZXRlcnMuIEFsbCBtZXRhZGF0YSB0aGF0IGlzIHByZXNlbnQgb24gdGhlIGFsbG9jYXRlZCBidWZmZXIgd2lsbAotYmUgbWFya2VkIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctUE9PTEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVUQV9GTEFHX1BPT0xFRDwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1GTEFHLUxPQ0tFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FVEFfRkxBR19MT0NLRUQ8L3NwYW4+PC9hPiBhbmQgd2lsbAotbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVmZmVyIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNldF9idWZmZXI8L2NvZGU+PC9lbT4KLS4gVGhlIGJ1ZmZlciBzaG91bGQKLWhhdmUgdGhlIEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZIGNsZWFyZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLnJlc2V0LWJ1ZmZlciI+PC9hPnJlc2V0X2J1ZmZlcjwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+cmVzZXQgdGhlIGJ1ZmZlciB0byBpdHMgc3RhdGUgd2hlbiBpdCB3YXMgZnJlc2hseSBhbGxvY2F0ZWQuCi1UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGNsZWFyIHRoZSBmbGFncywgdGltZXN0YW1wcyBhbmQKLXdpbGwgcmVtb3ZlIHRoZSBtZXRhZGF0YSB3aXRob3V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1GTEFHLVBPT0xFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FVEFfRkxBR19QT09MRUQ8L3NwYW4+PC9hPiBmbGFnIChldmVuCi10aGUgbWV0YWRhdGEgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1GTEFHLUxPQ0tFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FVEFfRkxBR19MT0NLRUQ8L3NwYW4+PC9hPikuIElmIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1UQUctTUVNT1JZOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWTwvc3Bhbj48L2E+IHdhcyBzZXQsIHRoaXMgZnVuY3Rpb24gY2FuIGFsc28gdHJ5IHRvCi1yZXN0b3JlIHRoZSBtZW1vcnkgYW5kIGNsZWFyIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVRBRy1NRU1PUlk6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZPC9zcGFuPjwvYT4gYWdhaW4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLnJlbGVhc2UtYnVmZmVyIj48L2E+cmVsZWFzZV9idWZmZXI8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnJlbGVhc2UgYSBidWZmZXIgYmFjayBpbiB0aGUgcG9vbC4gVGhlIGRlZmF1bHQKLWltcGxlbWVudGF0aW9uIHdpbGwgcHV0IHRoZSBidWZmZXIgYmFjayBpbiB0aGUgcXVldWUgYW5kIG5vdGlmeSBhbnkKLWJsb2NraW5nIGFjcXVpcmVfYnVmZmVyIGNhbGxzIHdoZW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctVEFHLU1FTU9SWTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlk8L3NwYW4+PC9hPgotaXMgbm90IHNldCBvbiB0aGUgYnVmZmVyLiBJZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVRBRy1NRU1PUlk6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZPC9zcGFuPjwvYT4gaXMgc2V0LCB0aGUKLWJ1ZmZlciB3aWxsIGJlIGZyZWVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyZWVfYnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLmZyZWUtYnVmZmVyIj48L2E+ZnJlZV9idWZmZXI8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmZyZWUgYSBidWZmZXIuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHVucmVmcyB0aGUgYnVmZmVyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5mbHVzaC1zdGFydCI+PC9hPmZsdXNoX3N0YXJ0PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5lbnRlciB0aGUgZmx1c2hpbmcgc3RhdGUuIChTaW5jZSAxLjQpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLmZsdXNoLXN0b3AiPjwvYT5mbHVzaF9zdG9wPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5sZWF2ZSB0aGUgZmx1c2hpZ24gc3RhdGUuIChTaW5jZSAxLjQpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzIj48L2E+PGgzPmVudW0gR3N0QnVmZmVyUG9vbEFjcXVpcmVGbGFnczwvaDM+Ci08cD5BZGRpdGlvbmFsIGZsYWdzIHRvIGNvbnRyb2wgdGhlIGFsbG9jYXRpb24gb2YgYSBidWZmZXI8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1QT09MLUFDUVVJUkUtRkxBRy1OT05FOkNBUFMiPjwvYT5HU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX05PTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bm8gZmxhZ3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1QT09MLUFDUVVJUkUtRkxBRy1LRVktVU5JVDpDQVBTIj48L2E+R1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19LRVlfVU5JVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5idWZmZXIgaXMga2V5ZnJhbWU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1QT09MLUFDUVVJUkUtRkxBRy1ET05UV0FJVDpDQVBTIj48L2E+R1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19ET05UV0FJVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD53aGVuIHRoZSBidWZmZXJwb29sIGlzIGVtcHR5LCBhY3F1aXJlX2J1ZmZlcgotd2lsbCBieSBkZWZhdWx0IGJsb2NrIHVudGlsIGEgYnVmZmVyIGlzIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWdhaW4uIFNldHRpbmcKLXRoaXMgZmxhZyBtYWtlcyBhY3F1aXJlX2J1ZmZlciByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVPUzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfRU9TPC9zcGFuPjwvYT4gaW5zdGVhZCBvZiBibG9ja2luZy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1QT09MLUFDUVVJUkUtRkxBRy1ESVNDT05UOkNBUFMiPjwvYT5HU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0RJU0NPTlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YnVmZmVyIGlzIGRpc2NvbnQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJVRkZFUi1QT09MLUFDUVVJUkUtRkxBRy1MQVNUOkNBUFMiPjwvYT5HU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0xBU1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bGFzdCBmbGFnLCBzdWJjbGFzc2VzIGNhbiB1c2UgcHJpdmF0ZSBmbGFncwotICAgc3RhcnRpbmcgZnJvbSB0aGlzIHZhbHVlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMiPjwvYT48aDM+c3RydWN0IEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgewotICBHc3RGb3JtYXQgICAgICAgICAgICAgICAgIGZvcm1hdDsKLSAgZ2ludDY0ICAgICAgICAgICAgICAgICAgICBzdGFydDsKLSAgZ2ludDY0ICAgICAgICAgICAgICAgICAgICBzdG9wOwotICBHc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzIGZsYWdzOwotfTsKLTwvcHJlPgotPHA+UGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWFjcXVpcmUtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKTwvY29kZT48L2E+IGZ1bmN0aW9uIHRvIGNvbnRyb2wgdGhlCi1hbGxvY2F0aW9uIG9mIHRoZSBidWZmZXIuPC9wPgotPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci0gbWVtYmVycyBidXQgb3RoZXIKLWltcGxlbWVudGF0aW9ucyBjYW4gdXNlIHRoaXMgZXh0cmEgaW5mb3JtYXRpb24gdG8gZGVjaWRlIHdoYXQgYnVmZmVyIHRvCi1yZXR1cm4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMuZm9ybWF0Ij48L2E+Zm9ybWF0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZm9ybWF0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPgotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcy5zdGFydCI+PC9hPnN0YXJ0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RhcnQgcG9zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcy5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0b3AgcG9zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xBY3F1aXJlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlclBvb2xBY3F1aXJlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zLmZsYWdzIj48L2E+ZmxhZ3M8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmFkZGl0aW9uYWwgZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVmZmVyUG9vbC5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RCdXMuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0QnVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NzM3ZjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RCdXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0OTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdEJ1czogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJ1cy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QnVzLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJ1cy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RCdXMuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdENhcHMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RCdXMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RCdXMudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdXM8L3NwYW4+PC9oMj4KLTxwPkdzdEJ1cyDigJQgQXN5bmNocm9ub3VzIG1lc3NhZ2UgYnVzIHN1YnN5c3RlbTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCdXMuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNGdW5jIiB0aXRsZT0iR3N0QnVzRnVuY8KgKCkiPipHc3RCdXNGdW5jPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c1N5bmNSZXBseSIgdGl0bGU9ImVudW0gR3N0QnVzU3luY1JlcGx5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1c1N5bmNSZXBseTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jSGFuZGxlciIgdGl0bGU9IkdzdEJ1c1N5bmNIYW5kbGVywqAoKSI+KkdzdEJ1c1N5bmNIYW5kbGVyPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLW5ldyIgdGl0bGU9ImdzdF9idXNfbmV3wqAoKSI+Z3N0X2J1c19uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9zdCIgdGl0bGU9ImdzdF9idXNfcG9zdMKgKCkiPmdzdF9idXNfcG9zdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1oYXZlLXBlbmRpbmciIHRpdGxlPSJnc3RfYnVzX2hhdmVfcGVuZGluZ8KgKCkiPmdzdF9idXNfaGF2ZV9wZW5kaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBlZWsiIHRpdGxlPSJnc3RfYnVzX3BlZWvCoCgpIj5nc3RfYnVzX3BlZWs8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wIiB0aXRsZT0iZ3N0X2J1c19wb3DCoCgpIj5nc3RfYnVzX3BvcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3AtZmlsdGVyZWQiIHRpdGxlPSJnc3RfYnVzX3BvcF9maWx0ZXJlZMKgKCkiPmdzdF9idXNfcG9wX2ZpbHRlcmVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXRpbWVkLXBvcCIgdGl0bGU9ImdzdF9idXNfdGltZWRfcG9wwqAoKSI+Z3N0X2J1c190aW1lZF9wb3A8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtdGltZWQtcG9wLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWTCoCgpIj5nc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtc2V0LWZsdXNoaW5nIiB0aXRsZT0iZ3N0X2J1c19zZXRfZmx1c2hpbmfCoCgpIj5nc3RfYnVzX3NldF9mbHVzaGluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtc2V0LXN5bmMtaGFuZGxlciIgdGl0bGU9ImdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcsKgKCkiPmdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jUmVwbHkiIHRpdGxlPSJlbnVtIEdzdEJ1c1N5bmNSZXBseSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdXNTeW5jUmVwbHk8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zeW5jLXNpZ25hbC1oYW5kbGVyIiB0aXRsZT0iZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVywqAoKSI+Z3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1NvdXJjZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWNyZWF0ZS13YXRjaCIgdGl0bGU9ImdzdF9idXNfY3JlYXRlX3dhdGNowqAoKSI+Z3N0X2J1c19jcmVhdGVfd2F0Y2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXdhdGNoLWZ1bGwiIHRpdGxlPSJnc3RfYnVzX2FkZF93YXRjaF9mdWxswqAoKSI+Z3N0X2J1c19hZGRfd2F0Y2hfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2giIHRpdGxlPSJnc3RfYnVzX2FkZF93YXRjaMKgKCkiPmdzdF9idXNfYWRkX3dhdGNoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXJlbW92ZS13YXRjaCIgdGl0bGU9ImdzdF9idXNfcmVtb3ZlX3dhdGNowqAoKSI+Z3N0X2J1c19yZW1vdmVfd2F0Y2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWRpc2FibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIiB0aXRsZT0iZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbsKgKCkiPmdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWVuYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iIHRpdGxlPSJnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb27CoCgpIj5nc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYXN5bmMtc2lnbmFsLWZ1bmMiIHRpdGxlPSJnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jwqAoKSI+Z3N0X2J1c19hc3luY19zaWduYWxfZnVuYzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfYWRkX3NpZ25hbF93YXRjaMKgKCkiPmdzdF9idXNfYWRkX3NpZ25hbF93YXRjaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaC1mdWxsIiB0aXRsZT0iZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGzCoCgpIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcmVtb3ZlLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaMKgKCkiPmdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb2xsIiB0aXRsZT0iZ3N0X2J1c19wb2xswqAoKSI+Z3N0X2J1c19wb2xsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVzLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1cy0tZW5hYmxlLWFzeW5jIiB0aXRsZT0iVGhlIOKAnGVuYWJsZS1hc3luY+KAnSBwcm9wZXJ0eSI+ZW5hYmxlLWFzeW5jPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5Xcml0ZSAvIENvbnN0cnVjdCBPbmx5PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1cy5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1cy1tZXNzYWdlIiB0aXRsZT0iVGhlIOKAnG1lc3NhZ2XigJ0gc2lnbmFsIj5tZXNzYWdlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLURFVEFJTEVEOkNBUFMiPkhhcyBEZXRhaWxzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzLXN5bmMtbWVzc2FnZSIgdGl0bGU9IlRoZSDigJxzeW5jLW1lc3NhZ2XigJ0gc2lnbmFsIj5zeW5jLW1lc3NhZ2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtREVUQUlMRUQ6Q0FQUyI+SGFzIERldGFpbHM8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVzLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RCdXMiPkdzdEJ1czwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVzRmxhZ3MiPkdzdEJ1c0ZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c1N5bmNSZXBseSIgdGl0bGU9ImVudW0gR3N0QnVzU3luY1JlcGx5Ij5Hc3RCdXNTeW5jUmVwbHk8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVzLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEJ1cwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1cy5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCdXMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IGlzIGFuIG9iamVjdCByZXNwb25zaWJsZSBmb3IgZGVsaXZlcmluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBwYWNrZXRzIGluCi1hIGZpcnN0LWluIGZpcnN0LW91dCB3YXkgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZHMgKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPikgdG8gdGhlCi1hcHBsaWNhdGlvbi48L3A+Ci08cD5TaW5jZSB0aGUgYXBwbGljYXRpb24gdHlwaWNhbGx5IG9ubHkgd2FudHMgdG8gZGVhbCB3aXRoIGRlbGl2ZXJ5IG9mIHRoZXNlCi1tZXNzYWdlcyBmcm9tIG9uZSB0aHJlYWQsIHRoZSBHc3RCdXMgd2lsbCBtYXJzaGFsbCB0aGUgbWVzc2FnZXMgYmV0d2VlbgotZGlmZmVyZW50IHRocmVhZHMuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIHRoZSBhY3R1YWwgc3RyZWFtaW5nIG9mIG1lZGlhCi1pcyBkb25lIGluIGFub3RoZXIgdGhyZWFkIHRoYW4gdGhlIGFwcGxpY2F0aW9uLjwvcD4KLTxwPlRoZSBHc3RCdXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU291cmNlPC9zcGFuPjwvYT4gYmFzZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBtYWtlcyBpdAotcG9zc2libGUgdG8gaGFuZGxlIHRoZSBkZWxpdmVyeSBpbiB0aGUgZ2xpYiBtYWlubG9vcC48L3A+Ci08cD5UaGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU291cmNlPC9zcGFuPjwvYT4gY2FsbGJhY2sgZnVuY3Rpb24gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYXN5bmMtc2lnbmFsLWZ1bmMiIHRpdGxlPSJnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jKCk8L2NvZGU+PC9hPiBjYW4gYmUgdXNlZCB0bwotY29udmVydCBhbGwgYnVzIG1lc3NhZ2VzIGludG8gc2lnbmFsIGVtaXNzaW9ucy48L3A+Ci08cD5BIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMgd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9zdCIgdGl0bGU9ImdzdF9idXNfcG9zdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19wb3N0KCk8L2NvZGU+PC9hPiBtZXRob2QuIFdpdGggdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wZWVrIiB0aXRsZT0iZ3N0X2J1c19wZWVrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX3BlZWsoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3AiIHRpdGxlPSJnc3RfYnVzX3BvcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19wb3AoKTwvY29kZT48L2E+IG1ldGhvZHMgb25lIGNhbiBsb29rIGF0IG9yIHJldHJpZXZlIGEKLXByZXZpb3VzbHkgcG9zdGVkIG1lc3NhZ2UuPC9wPgotPHA+VGhlIGJ1cyBjYW4gYmUgcG9sbGVkIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvbGwiIHRpdGxlPSJnc3RfYnVzX3BvbGzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9sbCgpPC9jb2RlPjwvYT4gbWV0aG9kLiBUaGlzIG1ldGhvZHMgYmxvY2tzCi11cCB0byB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgdmFsdWUgdW50aWwgb25lIG9mIHRoZSBzcGVjaWZpZWQgbWVzc2FnZXMgdHlwZXMKLWlzIHBvc3RlZCBvbiB0aGUgYnVzLiBUaGUgYXBwbGljYXRpb24gY2FuIHRoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wIiB0aXRsZT0iZ3N0X2J1c19wb3DCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9wKCk8L2NvZGU+PC9hPiB0aGUgbWVzc2FnZXMKLWZyb20gdGhlIGJ1cyB0byBoYW5kbGUgdGhlbS4KLUFsdGVybmF0aXZlbHkgdGhlIGFwcGxpY2F0aW9uIGNhbiByZWdpc3RlciBhbiBhc3luY2hyb25vdXMgYnVzIGZ1bmN0aW9uCi11c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2gtZnVsbCIgdGl0bGU9ImdzdF9idXNfYWRkX3dhdGNoX2Z1bGzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfYWRkX3dhdGNoX2Z1bGwoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC13YXRjaCIgdGl0bGU9ImdzdF9idXNfYWRkX3dhdGNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF93YXRjaCgpPC9jb2RlPjwvYT4uIFRoaXMgZnVuY3Rpb24gd2lsbAotaW5zdGFsbCBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNHU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R1NvdXJjZTwvc3Bhbj48L2E+IGluIHRoZSBkZWZhdWx0IGdsaWIgbWFpbiBsb29wIGFuZCB3aWxsIGRlbGl2ZXIgbWVzc2FnZXMKLWEgc2hvcnQgd2hpbGUgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gcG9zdGVkLiBOb3RlIHRoYXQgdGhlIG1haW4gbG9vcCBzaG91bGQKLWJlIHJ1bm5pbmcgZm9yIHRoZSBhc3luY2hyb25vdXMgY2FsbGJhY2tzLjwvcD4KLTxwPkl0IGlzIGFsc28gcG9zc2libGUgdG8gZ2V0IG1lc3NhZ2VzIGZyb20gdGhlIGJ1cyB3aXRob3V0IGFueSB0aHJlYWQKLW1hcnNoYWxsaW5nIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXNldC1zeW5jLWhhbmRsZXIiIHRpdGxlPSJnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcigpPC9jb2RlPjwvYT4gbWV0aG9kLiBUaGlzIG1ha2VzIGl0Ci1wb3NzaWJsZSB0byByZWFjdCB0byBhIG1lc3NhZ2UgaW4gdGhlIHNhbWUgdGhyZWFkIHRoYXQgcG9zdGVkIHRoZQotbWVzc2FnZSBvbiB0aGUgYnVzLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGFibGUKLXRvIGRlYWwgd2l0aCBtZXNzYWdlcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLjwvcD4KLTxwPkV2ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IGhhcyBvbmUgYnVzLjwvcD4KLTxwPk5vdGUgdGhhdCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IHdpbGwgc2V0IGl0cyBidXMgaW50byBmbHVzaGluZyBzdGF0ZSB3aGVuIGNoYW5naW5nCi1mcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCdXMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJ1c0Z1bmMiPjwvYT48aDM+R3N0QnVzRnVuY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdEJ1c0Z1bmM8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TcGVjaWZpZXMgdGhlIHR5cGUgb2YgZnVuY3Rpb24gcGFzc2VkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC13YXRjaCIgdGl0bGU9ImdzdF9idXNfYWRkX3dhdGNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF93YXRjaCgpPC9jb2RlPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC13YXRjaC1mdWxsIiB0aXRsZT0iZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19hZGRfd2F0Y2hfZnVsbCgpPC9jb2RlPjwvYT4sIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHRoZSBtYWlubG9vcCB3aGVuIGEgbWVzc2FnZQotaXMgYXZhaWxhYmxlIG9uIHRoZSBidXMuPC9wPgotPHA+VGhlIG1lc3NhZ2UgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHVucmVmZmVkIGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGlzCi1mdW5jdGlvbiBzbyBpdCBzaG91bGQgbm90IGJlIGZyZWVkIGluIHRoZSBmdW5jdGlvbi48L3A+Ci08cD5Ob3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgR1NvdXJjZUZ1bmMgd2hpY2ggbWVhbnMgdGhhdCByZXR1cm5pbmcKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IHdpbGwgcmVtb3ZlIHRoZSBHU291cmNlIGZyb20gdGhlIG1haW5sb29wLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJ1c0Z1bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRoYXQgc2VudCB0aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSB0aGF0IGhhcyBiZWVuIGdpdmVuLCB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCdXNGdW5jLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgdGhlIGV2ZW50IHNvdXJjZSBzaG91bGQgYmUgcmVtb3ZlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QnVzU3luY0hhbmRsZXIiPjwvYT48aDM+R3N0QnVzU3luY0hhbmRsZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzU3luY1JlcGx5IiB0aXRsZT0iZW51bSBHc3RCdXNTeW5jUmVwbHkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVzU3luY1JlcGx5PC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RCdXNTeW5jSGFuZGxlcjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SGFuZGxlciB3aWxsIGJlIGludm9rZWQgc3luY2hyb25vdXNseSwgd2hlbiBhIG5ldyBtZXNzYWdlIGhhcyBiZWVuIGluamVjdGVkCi1pbnRvIHRoZSBidXMuIFRoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWQgaW50ZXJuYWxseS4gT25seSBvbmUgc3luYyBoYW5kbGVyCi1jYW4gYmUgYXR0YWNoZWQgdG8gYSBnaXZlbiBidXMuPC9wPgotPHA+SWYgdGhlIGhhbmRsZXIgcmV0dXJucyBHU1RfQlVTX0RST1AsIGl0IHNob3VsZCB1bnJlZiB0aGUgbWVzc2FnZSwgZWxzZSB0aGUKLW1lc3NhZ2Ugc2hvdWxkIG5vdCBiZSB1bnJlZmZlZCBieSB0aGUgc3luYyBoYW5kbGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJ1c1N5bmNIYW5kbGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0aGF0IHNlbnQgdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgdGhhdCBoYXMgYmVlbiBnaXZlbiwgd2hlbiByZWdpc3RlcmluZyB0aGUgaGFuZGxlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QnVzU3luY0hhbmRsZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzU3luY1JlcGx5IiB0aXRsZT0iZW51bSBHc3RCdXNTeW5jUmVwbHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXNTeW5jUmVwbHk8L3NwYW4+PC9hPiBzdGF0aW5nIHdoYXQgdG8gZG8gd2l0aCB0aGUgbWVzc2FnZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVzLW5ldyI+PC9hPjxoMz5nc3RfYnVzX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdXM8L3NwYW4+PC9hPsKgKgotZ3N0X2J1c19uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBpbnN0YW5jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IGluc3RhbmNlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVzLXBvc3QiPjwvYT48aDM+Z3N0X2J1c19wb3N0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVzX3Bvc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9zdCBhIG1lc3NhZ2Ugb24gdGhlIGdpdmVuIGJ1cy4gT3duZXJzaGlwIG9mIHRoZSBtZXNzYWdlCi1pcyB0YWtlbiBieSB0aGUgYnVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtcG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIHBvc3Qgb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gdG8gcG9zdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLXBvc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG1lc3NhZ2UgY291bGQgYmUgcG9zdGVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgYnVzIGlzIGZsdXNoaW5nLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idXMtaGF2ZS1wZW5kaW5nIj48L2E+PGgzPmdzdF9idXNfaGF2ZV9wZW5kaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVzX2hhdmVfcGVuZGluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlcmUgYXJlIHBlbmRpbmcgbWVzc2FnZXMgb24gdGhlIGJ1cyB0aGF0Ci1zaG91bGQgYmUgaGFuZGxlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLWhhdmUtcGVuZGluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtaGF2ZS1wZW5kaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZXJlIGFyZSBtZXNzYWdlcyBvbiB0aGUgYnVzIHRvIGJlIGhhbmRsZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+Ci1vdGhlcndpc2UuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1cy1wZWVrIj48L2E+PGgzPmdzdF9idXNfcGVla8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X2J1c19wZWVrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QZWVrIHRoZSBtZXNzYWdlIG9uIHRoZSB0b3Agb2YgdGhlIGJ1cycgcXVldWUuIFRoZSBtZXNzYWdlIHdpbGwgcmVtYWluCi1vbiB0aGUgYnVzJyBtZXNzYWdlIHF1ZXVlLiBBIHJlZmVyZW5jZSBpcyByZXR1cm5lZCwgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkCi1ieSB0aGUgY2FsbGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtcGVlay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtcGVlay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiB0aGF0IGlzIG9uIHRoZQotYnVzLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIGJ1cyBpcyBlbXB0eS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idXMtcG9wIj48L2E+PGgzPmdzdF9idXNfcG9wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfYnVzX3BvcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgbWVzc2FnZSBmcm9tIHRoZSBidXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1wb3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gcG9wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1wb3AucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gdGhhdCBpcyBvbiB0aGUKLWJ1cywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBidXMgaXMgZW1wdHkuIFRoZSBtZXNzYWdlIGlzIHRha2VuIGZyb20KLXRoZSBidXMgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS11bnJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVzc2FnZV91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIKLXVzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1cy1wb3AtZmlsdGVyZWQiPjwvYT48aDM+Z3N0X2J1c19wb3BfZmlsdGVyZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9idXNfcG9wX2ZpbHRlcmVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIG1lc3NhZ2UgbWF0Y2hpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLSBmcm9tIHRoZSBidXMuICBXaWxsIGRpc2NhcmQgYWxsIG1lc3NhZ2VzIG9uCi10aGUgYnVzIHRoYXQgZG8gbm90IG1hdGNoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+Ci0gYW5kIHRoYXQgaGF2ZSBiZWVuIHBvc3RlZCBiZWZvcmUgdGhlIGZpcnN0Ci1tZXNzYWdlIHRoYXQgZG9lcyBtYXRjaCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotLiAgSWYgdGhlcmUgaXMgbm8gbWVzc2FnZSBtYXRjaGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotIG9uCi10aGUgYnVzLCBhbGwgbWVzc2FnZXMgd2lsbCBiZSBkaXNjYXJkZWQuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgbWVzc2FnZQotZW51bXMgYmV5b25kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRVhURU5ERUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9NRVNTQUdFX0VYVEVOREVEPC9zcGFuPjwvYT4gaW4gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudHM8L2NvZGU+PC9lbT4KLSBtYXNrLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtcG9wLWZpbHRlcmVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gcG9wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVzc2FnZSB0eXBlcyB0byB0YWtlIGludG8gYWNjb3VudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1wb3AtZmlsdGVyZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV4dCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBtYXRjaGluZwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLXRoYXQgaXMgb24gdGhlIGJ1cywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBidXMgaXMgZW1wdHkgb3IgdGhlcmUKLWlzIG5vIG1lc3NhZ2UgbWF0Y2hpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLS4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzCi1hbmQgbmVlZHMgdG8gYmUgdW5yZWZmZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXVucmVmIiB0aXRsZT0iZ3N0X21lc3NhZ2VfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idXMtdGltZWQtcG9wIj48L2E+PGgzPmdzdF9idXNfdGltZWRfcG9wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfYnVzX3RpbWVkX3BvcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVvdXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgbWVzc2FnZSBmcm9tIHRoZSBidXMsIHdhaXRpbmcgdXAgdG8gdGhlIHNwZWNpZmllZCB0aW1lb3V0LjwvcD4KLTxwPklmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lb3V0PC9jb2RlPjwvZW0+Ci0gaXMgMCwgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wIiB0aXRsZT0iZ3N0X2J1c19wb3DCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9wKCk8L2NvZGU+PC9hPi4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVvdXQ8L2NvZGU+PC9lbT4KLSBpcwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19USU1FX05PTkU8L3NwYW4+PC9hPiwgdGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIGZvcmV2ZXIgdW50aWwgYSBtZXNzYWdlIHdhcwotcG9zdGVkIG9uIHRoZSBidXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy10aW1lZC1wb3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0byBwb3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZW91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgdGltZW91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy10aW1lZC1wb3AucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gdGhhdCBpcyBvbiB0aGUKLWJ1cyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBidXMgaXMgZW1wdHkKLWFmdGVyIHRoZSB0aW1lb3V0IGV4cGlyZWQuICBUaGUgbWVzc2FnZSBpcyB0YWtlbiBmcm9tIHRoZSBidXMKLWFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdW5yZWYiIHRpdGxlPSJnc3RfbWVzc2FnZV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lc3NhZ2VfdW5yZWYoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1cy10aW1lZC1wb3AtZmlsdGVyZWQiPjwvYT48aDM+Z3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZW91dDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIG1lc3NhZ2UgZnJvbSB0aGUgYnVzIHdob3NlIHR5cGUgbWF0Y2hlcyB0aGUgbWVzc2FnZSB0eXBlIG1hc2sgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGVzPC9jb2RlPjwvZW0+Ci0sCi13YWl0aW5nIHVwIHRvIHRoZSBzcGVjaWZpZWQgdGltZW91dCAoYW5kIGRpc2NhcmRpbmcgYW55IG1lc3NhZ2VzIHRoYXQgZG8gbm90Ci1tYXRjaCB0aGUgbWFzayBwcm92aWRlZCkuPC9wPgotPHA+SWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVvdXQ8L2NvZGU+PC9lbT4KLSBpcyAwLCB0aGlzIGZ1bmN0aW9uIGJlaGF2ZXMgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3AtZmlsdGVyZWQiIHRpdGxlPSJnc3RfYnVzX3BvcF9maWx0ZXJlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19wb3BfZmlsdGVyZWQoKTwvY29kZT48L2E+LiBJZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVvdXQ8L2NvZGU+PC9lbT4KLSBpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvc3Bhbj48L2E+LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgZm9yZXZlciB1bnRpbCBhCi1tYXRjaGluZyBtZXNzYWdlIHdhcyBwb3N0ZWQgb24gdGhlIGJ1cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLXRpbWVkLXBvcC1maWx0ZXJlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIHBvcCBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHRpbWVvdXQgaW4gbmFub3NlY29uZHMsIG9yIEdTVF9DTE9DS19USU1FX05PTkUgdG8gd2FpdCBmb3JldmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVzc2FnZSB0eXBlcyB0byB0YWtlIGludG8gYWNjb3VudCwgR1NUX01FU1NBR0VfQU5ZIGZvciBhbnkgdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy10aW1lZC1wb3AtZmlsdGVyZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG1hdGNoaW5nIHRoZQotZmlsdGVyIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlczwvY29kZT48L2VtPgotLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm8gbWF0Y2hpbmcgbWVzc2FnZSB3YXMgZm91bmQgb24KLXRoZSBidXMgdW50aWwgdGhlIHRpbWVvdXQgZXhwaXJlZC4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbQotdGhlIGJ1cyBhbmQgbmVlZHMgdG8gYmUgdW5yZWZmZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXVucmVmIiB0aXRsZT0iZ3N0X21lc3NhZ2VfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlcgotdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVzLXNldC1mbHVzaGluZyI+PC9hPjxoMz5nc3RfYnVzX3NldF9mbHVzaGluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idXNfc2V0X2ZsdXNoaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmx1c2hpbmc8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoaW5nPC9jb2RlPjwvZW0+Ci0sIGZsdXNoIG91dCBhbmQgdW5yZWYgYW55IG1lc3NhZ2VzIHF1ZXVlZCBpbiB0aGUgYnVzLiBSZWxlYXNlcwotcmVmZXJlbmNlcyB0byB0aGUgbWVzc2FnZSBvcmlnaW4gb2JqZWN0cy4gV2lsbCBmbHVzaCBmdXR1cmUgbWVzc2FnZXMgdW50aWwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9idXNfc2V0X2ZsdXNoaW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX3NldF9mbHVzaGluZygpPC9jb2RlPjwvYT4gc2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2hpbmc8L2NvZGU+PC9lbT4KLSB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtc2V0LWZsdXNoaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmx1c2hpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIG9yIG5vdCB0byBmbHVzaCB0aGUgYnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idXMtc2V0LXN5bmMtaGFuZGxlciI+PC9hPjxoMz5nc3RfYnVzX3NldF9zeW5jX2hhbmRsZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c1N5bmNIYW5kbGVyIiB0aXRsZT0iR3N0QnVzU3luY0hhbmRsZXLCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzU3luY0hhbmRsZXI8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIHN5bmNocm9ub3VzIGhhbmRsZXIgb24gdGhlIGJ1cy4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCi1ldmVyeSB0aW1lIGEgbmV3IG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24KLXdpbGwgYmUgY2FsbGVkIGluIHRoZSBzYW1lIHRocmVhZCBjb250ZXh0IGFzIHRoZSBwb3N0aW5nIG9iamVjdC4gVGhpcwotZnVuY3Rpb24gaXMgdXN1YWxseSBvbmx5IGNhbGxlZCBieSB0aGUgY3JlYXRvciBvZiB0aGUgYnVzLiBBcHBsaWNhdGlvbnMKLXNob3VsZCBoYW5kbGUgbWVzc2FnZXMgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhlIGdzdF9idXMgd2F0Y2ggYW5kIHBvbGwKLWZ1bmN0aW9ucy48L3A+Ci08cD5Zb3UgY2Fubm90IHJlcGxhY2UgYW4gZXhpc3Rpbmcgc3luY19oYW5kbGVyLiBZb3UgY2FuIHBhc3MgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIHRoaXMKLWZ1bmN0aW9uLCB3aGljaCB3aWxsIGNsZWFyIHRoZSBleGlzdGluZyBoYW5kbGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtc2V0LXN5bmMtaGFuZGxlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIGluc3RhbGwgdGhlIGhhbmRsZXIgb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgaGFuZGxlciBmdW5jdGlvbiB0byBpbnN0YWxsLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Vc2VyIGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIGhhbmRsZXIgZnVuY3Rpb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhbGxlZCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KLWJlY29tZXMgdW51c2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idXMtc3luYy1zaWduYWwtaGFuZGxlciI+PC9hPjxoMz5nc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzU3luY1JlcGx5IiB0aXRsZT0iZW51bSBHc3RCdXNTeW5jUmVwbHkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVzU3luY1JlcGx5PC9zcGFuPjwvYT4KLWdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBoZWxwZXIgR3N0QnVzU3luY0hhbmRsZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFsbCBzeW5jaHJvbm91cwotbWVzc2FnZXMgaW50byBzaWduYWxzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtc3luYy1zaWduYWwtaGFuZGxlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gcmVjZWl2ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1zeW5jLXNpZ25hbC1oYW5kbGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gR1NUX0JVU19QQVNTPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idXMtY3JlYXRlLXdhdGNoIj48L2E+PGgzPmdzdF9idXNfY3JlYXRlX3dhdGNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1NvdXJjZTwvc3Bhbj48L2E+wqAqCi1nc3RfYnVzX2NyZWF0ZV93YXRjaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIHdhdGNoIGZvciB0aGlzIGJ1cy4gVGhlIEdTb3VyY2Ugd2lsbCBiZSBkaXNwYXRjaGVkIHdoZW5ldmVyCi1hIG1lc3NhZ2UgaXMgb24gdGhlIGJ1cy4gQWZ0ZXIgdGhlIEdTb3VyY2UgaXMgZGlzcGF0Y2hlZCwgdGhlCi1tZXNzYWdlIGlzIHBvcHBlZCBvZmYgdGhlIGJ1cyBhbmQgdW5yZWZmZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1jcmVhdGUtd2F0Y2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gY3JlYXRlIHRoZSB3YXRjaCBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLWNyZWF0ZS13YXRjaC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0dTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU291cmNlPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBtYWlubG9vcC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1cy1hZGQtd2F0Y2gtZnVsbCI+PC9hPjxoMz5nc3RfYnVzX2FkZF93YXRjaF9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfYnVzX2FkZF93YXRjaF9mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcHJpb3JpdHk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c0Z1bmMiIHRpdGxlPSJHc3RCdXNGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1c0Z1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkcyBhIGJ1cyB3YXRjaCB0byB0aGUgZGVmYXVsdCBtYWluIGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByaW9yaXR5PC9jb2RlPjwvZW0+Ci0gKGUuZy4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNHLVBSSU9SSVRZLURFRkFVTFQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdfUFJJT1JJVFlfREVGQVVMVDwvY29kZT48L2E+KS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBub24tZGVmYXVsdCAgbWFpbgotY29udGV4dCBzZXQgdXAgdXNpbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1jb250ZXh0LXB1c2gtdGhyZWFkLWRlZmF1bHQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19tYWluX2NvbnRleHRfcHVzaF90aHJlYWRfZGVmYXVsdCgpPC9jb2RlPjwvYT4gKGJlZm9yZQotb25lIGhhZCB0byBjcmVhdGUgYSBidXMgd2F0Y2ggc291cmNlIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGRlc2lyZWQgbWFpbgotY29udGV4dCAnbWFudWFsbHknKS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVjZWl2ZSBhc3luY2hyb25vdXMgbWVzc2FnZXMgaW4gdGhlIG1haW4gbG9vcC4KLVRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGJ1cyB3YXRjaCBwZXIgYnVzLCB5b3UgbXVzdCByZW1vdmUgaXQgYmVmb3JlIHlvdQotY2FuIHNldCBhIG5ldyBvbmUuPC9wPgotPHA+VGhlIGJ1cyB3YXRjaCB3aWxsIG9ubHkgd29yayBpZiBhIEdMaWIgbWFpbiBsb29wIGlzIGJlaW5nIHJ1bi48L3A+Ci08cD5XaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gaXMgY2FsbGVkLCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvIHRoZSBjYWxsZXI7IGlmIHlvdSB3YW50IHRvCi1rZWVwIGEgY29weSBvZiBpdCwgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3JlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lc3NhZ2VfcmVmKCk8L2NvZGU+PC9hPiBiZWZvcmUgbGVhdmluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotLjwvcD4KLTxwPlRoZSB3YXRjaCBjYW4gYmUgcmVtb3ZlZCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1yZW1vdmUtd2F0Y2giIHRpdGxlPSJnc3RfYnVzX3JlbW92ZV93YXRjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19yZW1vdmVfd2F0Y2goKTwvY29kZT48L2E+IG9yIGJ5IHJldHVybmluZyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPgotZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotLiBJZiB0aGUgd2F0Y2ggd2FzIGFkZGVkIHRvIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCBpdCBpcyBhbHNvCi1wb3NzaWJsZSB0byByZW1vdmUgdGhlIHdhdGNoIHVzaW5nIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLXNvdXJjZS1yZW1vdmUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19zb3VyY2VfcmVtb3ZlKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlJlbmFtZSB0aGUgb3JpZ2luYWwgc3ltYm9sJ3MgbmFtZSB0byBTWU1CT0wuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+cmVuYW1lLXRvPC9zcGFuPjwvYWNyb255bT4gZ3N0X2J1c19hZGRfd2F0Y2hdPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtYWRkLXdhdGNoLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0byBjcmVhdGUgdGhlIHdhdGNoIGZvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJpb3JpdHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcHJpb3JpdHkgb2YgdGhlIHdhdGNoLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHNvdXJjZSBpcyByZW1vdmVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1hZGQtd2F0Y2gtZnVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBldmVudCBzb3VyY2UgaWQgb3IgMCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+Ci1hbHJlYWR5IGdvdCBhbiBldmVudCBzb3VyY2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idXMtYWRkLXdhdGNoIj48L2E+PGgzPmdzdF9idXNfYWRkX3dhdGNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfYnVzX2FkZF93YXRjaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNGdW5jIiB0aXRsZT0iR3N0QnVzRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXNGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZHMgYSBidXMgd2F0Y2ggdG8gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdpdGggdGhlIGRlZmF1bHQgcHJpb3JpdHkKLSg8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjRy1QUklPUklUWS1ERUZBVUxUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1BSSU9SSVRZX0RFRkFVTFQ8L2NvZGU+PC9hPikuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGEgbm9uLWRlZmF1bHQgbWFpbgotY29udGV4dCBzZXQgdXAgdXNpbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1jb250ZXh0LXB1c2gtdGhyZWFkLWRlZmF1bHQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19tYWluX2NvbnRleHRfcHVzaF90aHJlYWRfZGVmYXVsdCgpPC9jb2RlPjwvYT4gKGJlZm9yZQotb25lIGhhZCB0byBjcmVhdGUgYSBidXMgd2F0Y2ggc291cmNlIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGRlc2lyZWQgbWFpbgotY29udGV4dCAnbWFudWFsbHknKS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVjZWl2ZSBhc3luY2hyb25vdXMgbWVzc2FnZXMgaW4gdGhlIG1haW4gbG9vcC4KLVRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGJ1cyB3YXRjaCBwZXIgYnVzLCB5b3UgbXVzdCByZW1vdmUgaXQgYmVmb3JlIHlvdQotY2FuIHNldCBhIG5ldyBvbmUuPC9wPgotPHA+VGhlIGJ1cyB3YXRjaCB3aWxsIG9ubHkgd29yayBpZiBhIEdMaWIgbWFpbiBsb29wIGlzIGJlaW5nIHJ1bi48L3A+Ci08cD5UaGUgd2F0Y2ggY2FuIGJlIHJlbW92ZWQgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcmVtb3ZlLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19yZW1vdmVfd2F0Y2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcmVtb3ZlX3dhdGNoKCk8L2NvZGU+PC9hPiBvciBieSByZXR1cm5pbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4KLWZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLS4gSWYgdGhlIHdhdGNoIHdhcyBhZGRlZCB0byB0aGUgZGVmYXVsdCBtYWluIGNvbnRleHQgaXQgaXMgYWxzbwotcG9zc2libGUgdG8gcmVtb3ZlIHRoZSB3YXRjaCB1c2luZyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1zb3VyY2UtcmVtb3ZlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfc291cmNlX3JlbW92ZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1hZGQtd2F0Y2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiB0byBjcmVhdGUgdGhlIHdhdGNoIGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLWFkZC13YXRjaC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBldmVudCBzb3VyY2UgaWQgb3IgMCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+Ci1hbHJlYWR5IGdvdCBhbiBldmVudCBzb3VyY2UuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1cy1yZW1vdmUtd2F0Y2giPjwvYT48aDM+Z3N0X2J1c19yZW1vdmVfd2F0Y2jCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9idXNfcmVtb3ZlX3dhdGNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmVzIGFuIGluc3RhbGxlZCBidXMgd2F0Y2ggZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1yZW1vdmUtd2F0Y2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gcmVtb3ZlIHRoZSB3YXRjaCBmcm9tLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtcmVtb3ZlLXdhdGNoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG9uIHN1Y2Nlc3Mgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1czwvY29kZT48L2VtPgotaGFzIG5vIGV2ZW50IHNvdXJjZS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1cy1kaXNhYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiI+PC9hPjxoMz5nc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5zdHJ1Y3RzIEdTdHJlYW1lciB0byBzdG9wIGVtaXR0aW5nIHRoZSAic3luYy1tZXNzYWdlIiBzaWduYWwgZm9yIHRoaXMgYnVzLgotU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWVuYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iIHRpdGxlPSJnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpPC9jb2RlPjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPHA+SW4gdGhlIGV2ZW50IHRoYXQgbXVsdGlwbGUgcGllY2VzIG9mIGNvZGUgaGF2ZSBjYWxsZWQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWVuYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iIHRpdGxlPSJnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpPC9jb2RlPjwvYT4sIHRoZSBzeW5jLW1lc3NhZ2UgZW1pc3Npb25zIHdpbGwgb25seQotYmUgc3RvcHBlZCBhZnRlciBhbGwgY2FsbHMgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtZW5hYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiIgdGl0bGU9ImdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKCk8L2NvZGU+PC9hPiB3ZXJlCi0iY2FuY2VsbGVkIiBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIEluIHRoaXMgd2F5IHRoZSBzZW1hbnRpY3MgYXJlIGV4YWN0bHkKLXRoZSBzYW1lIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9vYmplY3RfcmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3JlZigpPC9jb2RlPjwvYT4gdGhhdCB3aGljaCBjYWxscyBlbmFibGUgc2hvdWxkIGFsc28gY2FsbAotZGlzYWJsZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtZGlzYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gb24gd2hpY2ggeW91IHByZXZpb3VzbHkgY2FsbGVkCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1lbmFibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIiB0aXRsZT0iZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVzLWVuYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iPjwvYT48aDM+Z3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JbnN0cnVjdHMgR1N0cmVhbWVyIHRvIGVtaXQgdGhlICJzeW5jLW1lc3NhZ2UiIHNpZ25hbCBhZnRlciBydW5uaW5nIHRoZSBidXMncwotc3luYyBoYW5kbGVyLiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgc28gdGhhdCBjb2RlIGNhbiBlbnN1cmUgdGhhdCB0aGV5IGNhbgotc3luY2hyb25vdXNseSByZWNlaXZlIG1lc3NhZ2VzIHdpdGhvdXQgaGF2aW5nIHRvIGFmZmVjdCB3aGF0IHRoZSBiaW4ncyBzeW5jCi1oYW5kbGVyIGlzLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gVG8gY2xlYW4gdXAsIHRoZSBjYWxsZXIgaXMKLXJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWRpc2FibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uIiB0aXRsZT0iZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpPC9jb2RlPjwvYT4gYXMgbWFueSB0aW1lcwotYXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuPC9wPgotPHA+V2hpbGUgdGhpcyBmdW5jdGlvbiBsb29rcyBzaW1pbGFyIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC1zaWduYWwtd2F0Y2giIHRpdGxlPSJnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCgpPC9jb2RlPjwvYT4sIGl0IGlzIG5vdAotZXhhY3RseSB0aGUgc2FtZSAtLSB0aGlzIGZ1bmN0aW9uIGVuYWJsZXMgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+c3luY2hyb25vdXM8L2VtPjwvc3Bhbj4gZW1pc3Npb24gb2YKLXNpZ25hbHMgd2hlbiBtZXNzYWdlcyBhcnJpdmU7IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC1zaWduYWwtd2F0Y2giIHRpdGxlPSJnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCgpPC9jb2RlPjwvYT4gYWRkcyBhbiBpZGxlIGNhbGxiYWNrCi10byBwb3AgbWVzc2FnZXMgb2ZmIHRoZSBidXMgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXN5bmNocm9ub3VzbHk8L2VtPjwvc3Bhbj4uIFRoZSBzeW5jLW1lc3NhZ2Ugc2lnbmFsCi1jb21lcyBmcm9tIHRoZSB0aHJlYWQgb2Ygd2hhdGV2ZXIgb2JqZWN0IHBvc3RlZCB0aGUgbWVzc2FnZTsgdGhlICJtZXNzYWdlIgotc2lnbmFsIGlzIG1hcnNoYWxsZWQgdG8gdGhlIG1haW4gdGhyZWFkIHZpYSB0aGUgbWFpbiBsb29wLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1lbmFibGUtc3luYy1tZXNzYWdlLWVtaXNzaW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9uIHdoaWNoIHlvdSB3YW50IHRvIHJlY2VpdmUgdGhlICJzeW5jLW1lc3NhZ2UiIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1cy1hc3luYy1zaWduYWwtZnVuYyI+PC9hPjxoMz5nc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgaGVscGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNGdW5jIiB0aXRsZT0iR3N0QnVzRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXNGdW5jPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFsbCBhc3luY2hyb25vdXMgbWVzc2FnZXMKLWludG8gc2lnbmFscy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLWFzeW5jLXNpZ25hbC1mdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiByZWNlaXZlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLWFzeW5jLXNpZ25hbC1mdW5jLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idXMtYWRkLXNpZ25hbC13YXRjaCI+PC9hPjxoMz5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2jCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZHMgYSBidXMgc2lnbmFsIHdhdGNoIHRvIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCB3aXRoIHRoZSBkZWZhdWx0IHByaW9yaXR5Ci0oPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0ctUFJJT1JJVFktREVGQVVMVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19QUklPUklUWV9ERUZBVUxUPC9jb2RlPjwvYT4pLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIG5vbi1kZWZhdWx0Ci1tYWluIGNvbnRleHQgc2V0IHVwIHVzaW5nIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tY29udGV4dC1wdXNoLXRocmVhZC1kZWZhdWx0Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQoKTwvY29kZT48L2E+IChiZWZvcmUKLW9uZSBoYWQgdG8gY3JlYXRlIGEgYnVzIHdhdGNoIHNvdXJjZSBhbmQgYXR0YWNoIGl0IHRvIHRoZSBkZXNpcmVkIG1haW4KLWNvbnRleHQgJ21hbnVhbGx5JykuPC9wPgotPHA+QWZ0ZXIgY2FsbGluZyB0aGlzIHN0YXRlbWVudCwgdGhlIGJ1cyB3aWxsIGVtaXQgdGhlICJtZXNzYWdlIiBzaWduYWwgZm9yIGVhY2gKLW1lc3NhZ2UgcG9zdGVkIG9uIHRoZSBidXMuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBUbyBjbGVhbiB1cCwgdGhlIGNhbGxlciBpcwotcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcmVtb3ZlLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKCk8L2NvZGU+PC9hPiBhcyBtYW55IHRpbWVzIGFzIHRoaXMKLWZ1bmN0aW9uIGlzIGNhbGxlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idXMtYWRkLXNpZ25hbC13YXRjaC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBvbiB3aGljaCB5b3Ugd2FudCB0byByZWNlaXZlIHRoZSAibWVzc2FnZSIgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVzLWFkZC1zaWduYWwtd2F0Y2gtZnVsbCI+PC9hPjxoMz5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHByaW9yaXR5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZHMgYSBidXMgc2lnbmFsIHdhdGNoIHRvIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCB3aXRoIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJpb3JpdHk8L2NvZGU+PC9lbT4KLQotKGUuZy4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI0ctUFJJT1JJVFktREVGQVVMVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R19QUklPUklUWV9ERUZBVUxUPC9jb2RlPjwvYT4pLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIG5vbi1kZWZhdWx0IG1haW4KLWNvbnRleHQgc2V0IHVwIHVzaW5nIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tY29udGV4dC1wdXNoLXRocmVhZC1kZWZhdWx0Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQoKTwvY29kZT48L2E+Ci0oYmVmb3JlIG9uZSBoYWQgdG8gY3JlYXRlIGEgYnVzIHdhdGNoIHNvdXJjZSBhbmQgYXR0YWNoIGl0IHRvIHRoZSBkZXNpcmVkCi1tYWluIGNvbnRleHQgJ21hbnVhbGx5JykuPC9wPgotPHA+QWZ0ZXIgY2FsbGluZyB0aGlzIHN0YXRlbWVudCwgdGhlIGJ1cyB3aWxsIGVtaXQgdGhlICJtZXNzYWdlIiBzaWduYWwgZm9yIGVhY2gKLW1lc3NhZ2UgcG9zdGVkIG9uIHRoZSBidXMgd2hlbiB0aGUgbWFpbiBsb29wIGlzIHJ1bm5pbmcuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBUbyBjbGVhbiB1cCwgdGhlIGNhbGxlciBpcwotcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcmVtb3ZlLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoKCk8L2NvZGU+PC9hPiBhcyBtYW55IHRpbWVzIGFzIHRoaXMKLWZ1bmN0aW9uIGlzIGNhbGxlZC48L3A+Ci08cD5UaGVyZSBjYW4gb25seSBiZSBhIHNpbmdsZSBidXMgd2F0Y2ggcGVyIGJ1cywgeW91IG11c3QgcmVtb3ZlIGFueSBzaWduYWwKLXdhdGNoIGJlZm9yZSB5b3UgY2FuIHNldCBhbm90aGVyIHR5cGUgb2Ygd2F0Y2guPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLWFkZC1zaWduYWwtd2F0Y2gtZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9uIHdoaWNoIHlvdSB3YW50IHRvIHJlY2VpdmUgdGhlICJtZXNzYWdlIiBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJpb3JpdHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcHJpb3JpdHkgb2YgdGhlIHdhdGNoLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVzLXJlbW92ZS1zaWduYWwtd2F0Y2giPjwvYT48aDM+Z3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gKmJ1czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmVzIGEgc2lnbmFsIHdhdGNoIHByZXZpb3VzbHkgYWRkZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKTwvY29kZT48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1yZW1vdmUtc2lnbmFsLXdhdGNoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHlvdSBwcmV2aW91c2x5IGFkZGVkIGEgc2lnbmFsIHdhdGNoIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVzLXBvbGwiPjwvYT48aDM+Z3N0X2J1c19wb2xswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfYnVzX3BvbGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAqYnVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IGV2ZW50czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVvdXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9sbCB0aGUgYnVzIGZvciBtZXNzYWdlcy4gV2lsbCBibG9jayB3aGlsZSB3YWl0aW5nIGZvciBtZXNzYWdlcyB0byBjb21lLgotWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSB0aW1lIHRvIHBvbGwgd2l0aCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVvdXQ8L2NvZGU+PC9lbT4KLSBwYXJhbWV0ZXIuIElmCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPgotIGlzIG5lZ2F0aXZlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgaW5kZWZpbml0ZWx5LjwvcD4KLTxwPkFsbCBtZXNzYWdlcyBub3QgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50czwvY29kZT48L2VtPgotIHdpbGwgYmUgcG9wcGVkIG9mZiB0aGUgYnVzIGFuZCB3aWxsIGJlIGlnbm9yZWQuCi1JdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIG1lc3NhZ2UgZW51bXMgYmV5b25kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRVhURU5ERUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9NRVNTQUdFX0VYVEVOREVEPC9zcGFuPjwvYT4gaW4gdGhlCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnRzPC9jb2RlPjwvZW0+Ci0gbWFzazwvcD4KLTxwPkJlY2F1c2UgcG9sbCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIm1lc3NhZ2UiIHNpZ25hbCBlbmFibGVkIGJ5Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKTwvY29kZT48L2E+LCBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvbGwiIHRpdGxlPSJnc3RfYnVzX3BvbGzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9sbCgpPC9jb2RlPjwvYT4gd2lsbCBjYXVzZSB0aGUgIm1lc3NhZ2UiCi1zaWduYWwgdG8gYmUgZW1pdHRlZCBmb3IgZXZlcnkgbWVzc2FnZSB0aGF0IHBvbGwgc2Vlcy4gVGh1cyBhICJtZXNzYWdlIgotc2lnbmFsIGhhbmRsZXIgd2lsbCBzZWUgdGhlIHNhbWUgbWVzc2FnZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHNlZXMgLS0gbmVpdGhlcgotd2lsbCBzdGVhbCBtZXNzYWdlcyBmcm9tIHRoZSBvdGhlci48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHdpbGwgcnVuIGEgbWFpbiBsb29wIGZyb20gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdoZW4KLXBvbGxpbmcuPC9wPgotPHA+WW91IHNob3VsZCBuZXZlciB1c2UgdGhpcyBmdW5jdGlvbiwgc2luY2UgaXQgaXMgcHVyZSBldmlsLiBUaGlzIGlzCi1lc3BlY2lhbGx5IHRydWUgZm9yIEdVSSBhcHBsaWNhdGlvbnMgYmFzZWQgb24gR3RrKyBvciBRdCwgYnV0IGFsc28gZm9yIGFueQotb3RoZXIgbm9uLXRyaXZpYWwgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBHTGliIG1haW4gbG9vcC4gQXMgdGhpcyBmdW5jdGlvbgotcnVucyBhIEdMaWIgbWFpbiBsb29wLCBhbnkgY2FsbGJhY2sgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgR0xpYiBtYWluCi1jb250ZXh0IG1heSBiZSBpbnZva2VkLiBUaGlzIGNvdWxkIGJlIHRpbWVvdXRzLCBHVUkgZXZlbnRzLCBJL08gZXZlbnRzIGV0Yy47Ci1ldmVuIGlmIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXBvbGwiIHRpdGxlPSJnc3RfYnVzX3BvbGzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9sbCgpPC9jb2RlPjwvYT4gaXMgY2FsbGVkIHdpdGggYSAwIHRpbWVvdXQuIEFueSBvZiB0aGVzZSBjYWxsYmFja3MKLW1heSBkbyB0aGluZ3MgeW91IGRvIG5vdCBleHBlY3QsIGUuZy4gZGVzdHJveSB0aGUgbWFpbiBhcHBsaWNhdGlvbiB3aW5kb3cgb3IKLXNvbWUgb3RoZXIgcmVzb3VyY2U7IGNoYW5nZSBvdGhlciBhcHBsaWNhdGlvbiBzdGF0ZTsgZGlzcGxheSBhIGRpYWxvZyBhbmQKLXJ1biBhbm90aGVyIG1haW4gbG9vcCB1bnRpbCB0aGUgdXNlciBjbGlja3MgaXQgYXdheS4gSW4gc2hvcnQsIHVzaW5nIHRoaXMKLWZ1bmN0aW9uIG1heSBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSB0byB5b3VyIGNvZGUgdGhyb3VnaCB1bmV4cGVjdGVkCi1yZS1lbnRyYW5jeSBhbmQgdW5leHBlY3RlZCBjaGFuZ2VzIHRvIHlvdXIgYXBwbGljYXRpb24ncyBzdGF0ZS48L3A+Ci08cD5Gb3IgMCB0aW1lb3V0cyB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2J1c19wb3BfZmlsdGVyZWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfcG9wX2ZpbHRlcmVkKCk8L2NvZGU+PC9hPiBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb247IGZvcgotb3RoZXIgc2hvcnQgdGltZW91dHMgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXRpbWVkLXBvcC1maWx0ZXJlZCIgdGl0bGU9ImdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCgpPC9jb2RlPjwvYT47IGV2ZXJ5dGhpbmcgZWxzZSBpcwotYmV0dGVyIGhhbmRsZWQgYnkgc2V0dGluZyB1cCBhbiBhc3luY2hyb25vdXMgYnVzIHdhdGNoIGFuZCBkb2luZyB0aGluZ3MKLWZyb20gdGhlcmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1cy1wb2xsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBtYXNrIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPiwgcmVwcmVzZW50aW5nIHRoZSBzZXQgb2YgbWVzc2FnZSB0eXBlcyB0bwotcG9sbCBmb3IgKG5vdGUgc3BlY2lhbCBoYW5kbGluZyBvZiBleHRlbmRlZCBtZXNzYWdlIHR5cGVzIGJlbG93KTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBvbGwgdGltZW91dCwgYXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiwgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19USU1FX05PTkU8L3NwYW4+PC9hPiB0byBwb2xsCi1pbmRlZmluaXRlbHkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVzLXBvbGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWVzc2FnZSB0aGF0IHdhcyByZWNlaXZlZCwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgcG9sbCB0aW1lZCBvdXQuIFRoZSBtZXNzYWdlIGlzIHRha2VuIGZyb20gdGhlCi1idXMgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS11bnJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVzc2FnZV91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIKLXVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVzLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCdXMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCdXM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCdXM7PC9wcmU+Ci08cD5UaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QnVzRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RCdXNGbGFnczwvaDM+Ci08cD5UaGUgc3RhbmRhcmQgZmxhZ3MgdGhhdCBhIGJ1cyBtYXkgaGF2ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCdXNGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVVMtRkxVU0hJTkc6Q0FQUyI+PC9hPkdTVF9CVVNfRkxVU0hJTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIGJ1cyBpcyBjdXJyZW50bHkgZHJvcHBpbmcgYWxsIG1lc3NhZ2VzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVVMtRkxBRy1MQVNUOkNBUFMiPjwvYT5HU1RfQlVTX0ZMQUdfTEFTVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5vZmZzZXQgdG8gZGVmaW5lIG1vcmUgZmxhZ3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJ1c1N5bmNSZXBseSI+PC9hPjxoMz5lbnVtIEdzdEJ1c1N5bmNSZXBseTwvaDM+Ci08cD5UaGUgcmVzdWx0IHZhbHVlcyBmb3IgYSBHc3RCdXNTeW5jSGFuZGxlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCdXNTeW5jUmVwbHkubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQlVTLURST1A6Q0FQUyI+PC9hPkdTVF9CVVNfRFJPUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5kcm9wIHRoZSBtZXNzYWdlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVVMtUEFTUzpDQVBTIj48L2E+R1NUX0JVU19QQVNTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnBhc3MgdGhlIG1lc3NhZ2UgdG8gdGhlIGFzeW5jIHF1ZXVlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVVMtQVNZTkM6Q0FQUyI+PC9hPkdTVF9CVVNfQVNZTkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cGFzcyBtZXNzYWdlIHRvIGFzeW5jIHF1ZXVlLCBjb250aW51ZSBpZiBtZXNzYWdlIGlzIGhhbmRsZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QnVzLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCdXMtLWVuYWJsZS1hc3luYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGVuYWJsZS1hc3luY+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZW5hYmxlLWFzeW5j4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FbmFibGUgYXN5bmMgbWVzc2FnZSBkZWxpdmVyeSBmb3IgYnVzIHdhdGNoZXMgYW5kIGdzdF9idXNfcG9wKCkuPC9wPgotPHA+RmxhZ3M6IFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1cy5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCdXMtbWVzc2FnZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1lc3NhZ2XigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gICAgICpidXMsCi0gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPkEgbWVzc2FnZSBoYXMgYmVlbiBwb3N0ZWQgb24gdGhlIGJ1cy4gVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBmcm9tIGEKLUdTb3VyY2UgYWRkZWQgdG8gdGhlIG1haW5sb29wLiB0aGlzIHNpZ25hbCB3aWxsIG9ubHkgYmUgZW1pdHRlZCB3aGVuCi10aGVyZSBpcyBhIG1haW5sb29wIHJ1bm5pbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QnVzLW1lc3NhZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWVzc2FnZSB0aGF0IGhhcyBiZWVuIHBvc3RlZCBhc3luY2hyb25vdXNseTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLURFVEFJTEVEOkNBUFMiPkhhcyBEZXRhaWxzPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QnVzLXN5bmMtbWVzc2FnZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN5bmMtbWVzc2FnZeKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiAgICAgKmJ1cywKLSAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+QSBtZXNzYWdlIGhhcyBiZWVuIHBvc3RlZCBvbiB0aGUgYnVzLiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGZyb20gdGhlCi10aHJlYWQgdGhhdCBwb3N0ZWQgdGhlIG1lc3NhZ2Ugc28gb25lIGhhcyB0byBiZSBjYXJlZnVsIHdpdGggbG9ja2luZy48L3A+Ci08cD5UaGlzIHNpZ25hbCB3aWxsIG5vdCBiZSBlbWl0dGVkIGJ5IGRlZmF1bHQsIHlvdSBoYXZlIHRvIGNhbGwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWVuYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iIHRpdGxlPSJnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpPC9jb2RlPjwvYT4gYmVmb3JlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJ1cy1zeW5jLW1lc3NhZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWVzc2FnZSB0aGF0IGhhcyBiZWVuIHBvc3RlZCBzeW5jaHJvbm91c2x5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtREVUQUlMRUQ6Q0FQUyI+SGFzIERldGFpbHM8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJ1cy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0Q2Fwcy5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RDYXBzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDgxZjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RDYXBzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RDYXBzOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDYXBzLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDYXBzLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RCdXMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdENhcHMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RDYXBzLnRvcF9vZl9wYWdlIj48L2E+R3N0Q2Fwczwvc3Bhbj48L2gyPgotPHA+R3N0Q2FwcyDigJQgU3RydWN0dXJlIGRlc2NyaWJpbmcgc2V0cyBvZiBtZWRpYSBmb3JtYXRzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENhcHMuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19SRUZDT1VOVCgpIj5HU1RfQ0FQU19SRUZDT1VOVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtUkVGQ09VTlQtVkFMVUU6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFKCkiPkdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1JUy1TSU1QTEU6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0lTX1NJTVBMRSgpIj5HU1RfQ0FQU19JU19TSU1QTEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUyIgdGl0bGU9IkdTVF9TVEFUSUNfQ0FQUygpIj5HU1RfU1RBVElDX0NBUFM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUdTOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19GTEFHUygpIj5HU1RfQ0FQU19GTEFHUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBRy1JUy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZMQUdfSVNfU0VUKCkiPkdTVF9DQVBTX0ZMQUdfSVNfU0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkxBR19TRVQoKSI+R1NUX0NBUFNfRkxBR19TRVQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZMQUdfVU5TRVQoKSI+R1NUX0NBUFNfRkxBR19VTlNFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHc3RDYXBzRm9yZWFjaEZ1bmMiIHRpdGxlPSJHc3RDYXBzRm9yZWFjaEZ1bmPCoCgpIj4qR3N0Q2Fwc0ZvcmVhY2hGdW5jPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0Q2Fwc01hcEZ1bmMiIHRpdGxlPSJHc3RDYXBzTWFwRnVuY8KgKCkiPipHc3RDYXBzTWFwRnVuYzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHNGaWx0ZXJNYXBGdW5jIiB0aXRsZT0iR3N0Q2Fwc0ZpbHRlck1hcEZ1bmPCoCgpIj4qR3N0Q2Fwc0ZpbHRlck1hcEZ1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZW1wdHkiIHRpdGxlPSJnc3RfY2Fwc19uZXdfZW1wdHnCoCgpIj5nc3RfY2Fwc19uZXdfZW1wdHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZW1wdHktc2ltcGxlIiB0aXRsZT0iZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZcKgKCkiPmdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctYW55IiB0aXRsZT0iZ3N0X2NhcHNfbmV3X2FuecKgKCkiPmdzdF9jYXBzX25ld19hbnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctc2ltcGxlIiB0aXRsZT0iZ3N0X2NhcHNfbmV3X3NpbXBsZcKgKCkiPmdzdF9jYXBzX25ld19zaW1wbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZnVsbCIgdGl0bGU9ImdzdF9jYXBzX25ld19mdWxswqAoKSI+Z3N0X2NhcHNfbmV3X2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZnVsbC12YWxpc3QiIHRpdGxlPSJnc3RfY2Fwc19uZXdfZnVsbF92YWxpc3TCoCgpIj5nc3RfY2Fwc19uZXdfZnVsbF92YWxpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19pc193cml0YWJsZSgpIj5nc3RfY2Fwc19pc193cml0YWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jb3B5IiB0aXRsZT0iZ3N0X2NhcHNfY29wecKgKCkiPmdzdF9jYXBzX2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jb3B5LW50aCIgdGl0bGU9ImdzdF9jYXBzX2NvcHlfbnRowqAoKSI+Z3N0X2NhcHNfY29weV9udGg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3Qtc3RhdGljLWNhcHMtZ2V0IiB0aXRsZT0iZ3N0X3N0YXRpY19jYXBzX2dldMKgKCkiPmdzdF9zdGF0aWNfY2Fwc19nZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LXN0YXRpYy1jYXBzLWNsZWFudXAiIHRpdGxlPSJnc3Rfc3RhdGljX2NhcHNfY2xlYW51cMKgKCkiPmdzdF9zdGF0aWNfY2Fwc19jbGVhbnVwPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWFwcGVuZCIgdGl0bGU9ImdzdF9jYXBzX2FwcGVuZMKgKCkiPmdzdF9jYXBzX2FwcGVuZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1lcmdlIiB0aXRsZT0iZ3N0X2NhcHNfbWVyZ2XCoCgpIj5nc3RfY2Fwc19tZXJnZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1hcHBlbmQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZcKgKCkiPmdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtYXBwZW5kLXN0cnVjdHVyZS1mdWxsIiB0aXRsZT0iZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV9mdWxswqAoKSI+Z3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlbW92ZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlwqAoKSI+Z3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXN0ZWFsLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZcKgKCkiPmdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZcKgKCkiPmdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZS1mdWxsIiB0aXRsZT0iZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlX2Z1bGzCoCgpIj5nc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWdldC1zaXplIiB0aXRsZT0iZ3N0X2NhcHNfZ2V0X3NpemXCoCgpIj5nc3RfY2Fwc19nZXRfc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWdldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY2Fwc19nZXRfc3RydWN0dXJlwqAoKSI+Z3N0X2NhcHNfZ2V0X3N0cnVjdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWdldC1mZWF0dXJlcyIgdGl0bGU9ImdzdF9jYXBzX2dldF9mZWF0dXJlc8KgKCkiPmdzdF9jYXBzX2dldF9mZWF0dXJlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zZXQtZmVhdHVyZXMiIHRpdGxlPSJnc3RfY2Fwc19zZXRfZmVhdHVyZXPCoCgpIj5nc3RfY2Fwc19zZXRfZmVhdHVyZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LXZhbHVlIiB0aXRsZT0iZ3N0X2NhcHNfc2V0X3ZhbHVlwqAoKSI+Z3N0X2NhcHNfc2V0X3ZhbHVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC1zaW1wbGUiIHRpdGxlPSJnc3RfY2Fwc19zZXRfc2ltcGxlwqAoKSI+Z3N0X2NhcHNfc2V0X3NpbXBsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zZXQtc2ltcGxlLXZhbGlzdCIgdGl0bGU9ImdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0wqAoKSI+Z3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1mb3JlYWNoIiB0aXRsZT0iZ3N0X2NhcHNfZm9yZWFjaMKgKCkiPmdzdF9jYXBzX2ZvcmVhY2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3RfY2Fwc19tYXBfaW5fcGxhY2XCoCgpIj5nc3RfY2Fwc19tYXBfaW5fcGxhY2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZmlsdGVyLWFuZC1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZcKgKCkiPmdzdF9jYXBzX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtYW55IiB0aXRsZT0iZ3N0X2NhcHNfaXNfYW55wqAoKSI+Z3N0X2NhcHNfaXNfYW55PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZW1wdHkiIHRpdGxlPSJnc3RfY2Fwc19pc19lbXB0ecKgKCkiPmdzdF9jYXBzX2lzX2VtcHR5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZml4ZWQiIHRpdGxlPSJnc3RfY2Fwc19pc19maXhlZMKgKCkiPmdzdF9jYXBzX2lzX2ZpeGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZXF1YWwiIHRpdGxlPSJnc3RfY2Fwc19pc19lcXVhbMKgKCkiPmdzdF9jYXBzX2lzX2VxdWFsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZXF1YWwtZml4ZWQiIHRpdGxlPSJnc3RfY2Fwc19pc19lcXVhbF9maXhlZMKgKCkiPmdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3RyaWN0bHktZXF1YWwiIHRpdGxlPSJnc3RfY2Fwc19pc19zdHJpY3RseV9lcXVhbMKgKCkiPmdzdF9jYXBzX2lzX3N0cmljdGx5X2VxdWFsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtYWx3YXlzLWNvbXBhdGlibGUiIHRpdGxlPSJnc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZcKgKCkiPmdzdF9jYXBzX2lzX2Fsd2F5c19jb21wYXRpYmxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0IiB0aXRsZT0iZ3N0X2NhcHNfaXNfc3Vic2V0wqAoKSI+Z3N0X2NhcHNfaXNfc3Vic2V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmXCoCgpIj5nc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0LXN0cnVjdHVyZS1mdWxsIiB0aXRsZT0iZ3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZV9mdWxswqAoKSI+Z3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZV9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtY2FuLWludGVyc2VjdCIgdGl0bGU9ImdzdF9jYXBzX2Nhbl9pbnRlcnNlY3TCoCgpIj5nc3RfY2Fwc19jYW5faW50ZXJzZWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaW50ZXJzZWN0IiB0aXRsZT0iZ3N0X2NhcHNfaW50ZXJzZWN0wqAoKSI+Z3N0X2NhcHNfaW50ZXJzZWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaW50ZXJzZWN0LWZ1bGwiIHRpdGxlPSJnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbMKgKCkiPmdzdF9jYXBzX2ludGVyc2VjdF9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbm9ybWFsaXplIiB0aXRsZT0iZ3N0X2NhcHNfbm9ybWFsaXplwqAoKSI+Z3N0X2NhcHNfbm9ybWFsaXplPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2ltcGxpZnkiIHRpdGxlPSJnc3RfY2Fwc19zaW1wbGlmecKgKCkiPmdzdF9jYXBzX3NpbXBsaWZ5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVwbGFjZSIgdGl0bGU9ImdzdF9jYXBzX3JlcGxhY2XCoCgpIj5nc3RfY2Fwc19yZXBsYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdGFrZSIgdGl0bGU9ImdzdF9jYXBzX3Rha2XCoCgpIj5nc3RfY2Fwc190YWtlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdG8tc3RyaW5nIiB0aXRsZT0iZ3N0X2NhcHNfdG9fc3RyaW5nwqAoKSI+Z3N0X2NhcHNfdG9fc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfY2Fwc19mcm9tX3N0cmluZ8KgKCkiPmdzdF9jYXBzX2Zyb21fc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc3VidHJhY3QiIHRpdGxlPSJnc3RfY2Fwc19zdWJ0cmFjdMKgKCkiPmdzdF9jYXBzX3N1YnRyYWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkiPmdzdF9jYXBzX21ha2Vfd3JpdGFibGU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdHJ1bmNhdGUiIHRpdGxlPSJnc3RfY2Fwc190cnVuY2F0ZcKgKCkiPmdzdF9jYXBzX3RydW5jYXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZml4YXRlIiB0aXRsZT0iZ3N0X2NhcHNfZml4YXRlwqAoKSI+Z3N0X2NhcHNfZml4YXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVmIiB0aXRsZT0iZ3N0X2NhcHNfcmVmwqAoKSI+Z3N0X2NhcHNfcmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIiB0aXRsZT0iZ3N0X2NhcHNfdW5yZWbCoCgpIj5nc3RfY2Fwc191bnJlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENhcHMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0Q2FwcyI+R3N0Q2FwczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHc3RTdGF0aWNDYXBzIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY0NhcHMiPkdzdFN0YXRpY0NhcHM8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHNJbnRlcnNlY3RNb2RlIiB0aXRsZT0iZW51bSBHc3RDYXBzSW50ZXJzZWN0TW9kZSI+R3N0Q2Fwc0ludGVyc2VjdE1vZGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHNGbGFncyIgdGl0bGU9ImVudW0gR3N0Q2Fwc0ZsYWdzIj5Hc3RDYXBzRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0FOWSI+R1NUX0NBUFNfQU5ZPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfTk9ORSI+R1NUX0NBUFNfTk9ORTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUy1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9TVEFUSUNfQ0FQU19BTlkiPkdTVF9TVEFUSUNfQ0FQU19BTlk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX1NUQVRJQ19DQVBTX05PTkUiPkdTVF9TVEFUSUNfQ0FQU19OT05FPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENhcHMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtQm94ZWQtVHlwZXMuaHRtbCI+R0JveGVkPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdENhcHMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDYXBzLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENhcHMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+Q2FwcyAoY2FwYWJpbGl0aWVzKSBhcmUgbGlnaHR3ZWlnaHQgcmVmY291bnRlZCBvYmplY3RzIGRlc2NyaWJpbmcgbWVkaWEgdHlwZXMuCi1UaGV5IGFyZSBjb21wb3NlZCBvZiBhbiBhcnJheSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPi48L3A+Ci08cD5DYXBzIGFyZSBleHBvc2VkIG9uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IHRvIGRlc2NyaWJlIGFsbCBwb3NzaWJsZSB0eXBlcyBhCi1naXZlbiBwYWQgY2FuIGhhbmRsZS4gVGhleSBhcmUgYWxzbyBzdG9yZWQgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+IGFsb25nIHdpdGgKLWEgZGVzY3JpcHRpb24gb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LjwvcD4KLTxwPkNhcHMgYXJlIGV4cG9zZWQgb24gdGhlIGVsZW1lbnQgcGFkcyB1c2luZyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktY2FwcyIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfY2Fwc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9xdWVyeV9jYXBzKCk8L2NvZGU+PC9hPiBwYWQKLWZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGRlc2NyaWJlcyB0aGUgcG9zc2libGUgdHlwZXMgdGhhdCB0aGUgcGFkIGNhbgotaGFuZGxlIG9yIHByb2R1Y2UgYXQgcnVudGltZS48L3A+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudDo8L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTc8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkdzdENhcHMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+Y2FwcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LXNpbXBsZSI+Z3N0X2NhcHNfbmV3X3NpbXBsZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3ZpZGVvL3gtcmF3JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7Zm9ybWF0JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHX1RZUEVfU1RSSU5HPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0k0MjAmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtmcmFtZXJhdGUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEdTVF9UWVBFX0ZSQUNUSU9OPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjI1PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7cGl4ZWwtYXNwZWN0LXJhdGlvJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHU1RfVFlQRV9GUkFDVElPTjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7d2lkdGgmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEdfVFlQRV9JTlQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MzIwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7aGVpZ2h0JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHX1RZUEVfSU5UPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjI0MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLSAgIE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGlzIGZpeGVkIHdoZW4gaXQgaGFzIG5vIHByb3BlcnRpZXMgd2l0aCByYW5nZXMgb3IgbGlzdHMuIFVzZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1maXhlZCIgdGl0bGU9ImdzdF9jYXBzX2lzX2ZpeGVkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19pc19maXhlZCgpPC9jb2RlPjwvYT4gdG8gdGVzdCBmb3IgZml4ZWQgY2Fwcy4gRml4ZWQgY2FwcyBjYW4gYmUgdXNlZCBpbiBhCi1jYXBzIGV2ZW50IHRvIG5vdGlmeSBkb3duc3RyZWFtIGVsZW1lbnRzIG9mIHRoZSBjdXJyZW50IG1lZGlhIHR5cGUuPC9wPgotPHA+VmFyaW91cyBtZXRob2RzIGV4aXN0IHRvIHdvcmsgd2l0aCB0aGUgbWVkaWEgdHlwZXMgc3VjaCBhcyBzdWJ0cmFjdGluZwotb3IgaW50ZXJzZWN0aW5nLjwvcD4KLTxwPkJlIGF3YXJlIHRoYXQgdGhlIGN1cnJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gLyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBzZXJpYWxpemF0aW9uIGludG8gc3RyaW5nCi1oYXMgbGltaXRlZCBzdXBwb3J0IGZvciBuZXN0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gLyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBmaWVsZHMuIEl0IGNhbiBvbmx5Ci1zdXBwb3J0IG9uZSBsZXZlbCBvZiBuZXN0aW5nLiBVc2luZyBtb3JlIGxldmVscyB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZAotYmVoYXZpb3Igd2hlbiB1c2luZyBzZXJpYWxpemF0aW9uIGZlYXR1cmVzLCBzdWNoIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdG8tc3RyaW5nIiB0aXRsZT0iZ3N0X2NhcHNfdG9fc3RyaW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc190b19zdHJpbmcoKTwvY29kZT48L2E+IG9yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNlcmlhbGl6ZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXJpYWxpemXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9zZXJpYWxpemUoKTwvY29kZT48L2E+IGFuZCB0aGVpciBjb3VudGVycGFydHMuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDYXBzLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FQUy1SRUZDT1VOVDpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX1JFRkNPVU5UKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBUFNfUkVGQ09VTlQoY2FwcykgICAgICAgICAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVChjYXBzKQotPC9wcmU+Ci08cD5HZXQgYWNjZXNzIHRvIHRoZSByZWZlcmVuY2UgY291bnQgZmllbGQgb2YgdGhlIGNhcHM8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FQUy1SRUZDT1VOVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVBTLVJFRkNPVU5ULVZBTFVFOkNBUFMiPjwvYT48aDM+R1NUX0NBUFNfUkVGQ09VTlRfVkFMVUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRShjYXBzKSAgICAgICAgICAgR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKGNhcHMpCi08L3ByZT4KLTxwPkdldCB0aGUgcmVmZXJlbmNlIGNvdW50IHZhbHVlIG9mIHRoZSBjYXBzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVBTLVJFRkNPVU5ULVZBTFVFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBUFMtSVMtU0lNUExFOkNBUFMiPjwvYT48aDM+R1NUX0NBUFNfSVNfU0lNUExFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBUFNfSVNfU0lNUExFKGNhcHMpIChnc3RfY2Fwc19nZXRfc2l6ZShjYXBzKSA9PSAxKQotPC9wcmU+Ci08cD5Db252ZW5pZW5jZSBtYWNybyB0aGF0IGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZXMgaW4gdGhlIGdpdmVuIGNhcHMKLWlzIGV4YWN0bHkgb25lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVBTLUlTLVNJTVBMRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBpbnN0YW5jZSB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVNUQVRJQy1DQVBTIj48L2E+PGgzPkdTVF9TVEFUSUNfQ0FQUygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9TVEFUSUNfQ0FQUyhzdHJpbmcpPC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHN0YXRpYyBjYXBzIGZyb20gYW4gaW5wdXQgc3RyaW5nLgotVGhpcyBjYW4gYmUgdXNlZCBpbiBwYWQgdGVtcGxhdGVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1TVEFUSUMtQ0FQUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FQUy1GTEFHUzpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX0ZMQUdTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBUFNfRkxBR1MoY2FwcykgICAgICAgICAgICAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHUyhjYXBzKQotPC9wcmU+Ci08cD5BIGZsYWdzIHdvcmQgY29udGFpbmluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHNGbGFncyIgdGl0bGU9ImVudW0gR3N0Q2Fwc0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZsYWdzPC9zcGFuPjwvYT4gZmxhZ3Mgc2V0IG9uIHRoaXMgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FQUy1GTEFHUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FQUy1GTEFHLUlTLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX0ZMQUdfSVNfU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBUFNfRkxBR19JU19TRVQoY2FwcyxmbGFnKSAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUIChjYXBzLCBmbGFnKQotPC9wcmU+Ci08cD5HaXZlcyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgZmxhZyBvbiBhIGNhcHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNBUFMtRkxBRy1JUy1TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHc3RDYXBzRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENhcHNGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGbGFnczwvc3Bhbj48L2E+IHRvIGNoZWNrLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FQUy1GTEFHLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX0ZMQUdfU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBUFNfRkxBR19TRVQoY2FwcyxmbGFnKSAgICAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfU0VUIChjYXBzLCBmbGFnKQotPC9wcmU+Ci08cD5TZXRzIGEgY2FwcyBmbGFnIG9uIGEgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FQUy1GTEFHLVNFVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHNGbGFncyIgdGl0bGU9ImVudW0gR3N0Q2Fwc0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZsYWdzPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FQUy1GTEFHLVVOU0VUOkNBUFMiPjwvYT48aDM+R1NUX0NBUFNfRkxBR19VTlNFVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX0ZMQUdfVU5TRVQoY2FwcyxmbGFnKSAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1VOU0VUIChjYXBzLCBmbGFnKQotPC9wcmU+Ci08cD5DbGVhcnMgYSBjYXBzIGZsYWcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNBUFMtRkxBRy1VTlNFVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHNGbGFncyIgdGl0bGU9ImVudW0gR3N0Q2Fwc0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZsYWdzPC9zcGFuPjwvYT4gdG8gY2xlYXIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENhcHNGb3JlYWNoRnVuYyI+PC9hPjxoMz5Hc3RDYXBzRm9yZWFjaEZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RDYXBzRm9yZWFjaEZ1bmM8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZvcmVhY2giIHRpdGxlPSJnc3RfY2Fwc19mb3JlYWNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19mb3JlYWNoKCk8L2NvZGU+PC9hPi4gVGhlIGZ1bmN0aW9uIG1heQotbm90IG1vZGlmeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLSBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZvcmVhY2hGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENhcHNGb3JlYWNoRnVuYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZm9yZWFjaCBvcGVyYXRpb24gc2hvdWxkIGNvbnRpbnVlLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZgotdGhlIGZvcmVhY2ggb3BlcmF0aW9uIHNob3VsZCBzdG9wIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENhcHNNYXBGdW5jIj48L2E+PGgzPkdzdENhcHNNYXBGdW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0Q2Fwc01hcEZ1bmM8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3RfY2Fwc19tYXBfaW5fcGxhY2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21hcF9pbl9wbGFjZSgpPC9jb2RlPjwvYT4uIFRoZSBmdW5jdGlvbgotbWF5IG1vZGlmeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENhcHNNYXBGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENhcHNNYXBGdW5jLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBtYXAgb3BlcmF0aW9uIHNob3VsZCBjb250aW51ZSwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYKLXRoZSBtYXAgb3BlcmF0aW9uIHNob3VsZCBzdG9wIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENhcHNGaWx0ZXJNYXBGdW5jIj48L2E+PGgzPkdzdENhcHNGaWx0ZXJNYXBGdW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0Q2Fwc0ZpbHRlck1hcEZ1bmM8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1maWx0ZXItYW5kLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9jYXBzX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZSgpPC9jb2RlPjwvYT4uCi1UaGUgZnVuY3Rpb24gbWF5IG1vZGlmeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotLCBhbmQgYm90aCB3aWxsIGJlCi1yZW1vdmVkIGZyb20gdGhlIGNhcHMgaWYgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZpbHRlck1hcEZ1bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZpbHRlck1hcEZ1bmMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGZlYXR1cmVzIGFuZCBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHByZXNlcnZlZCwKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIGl0IHNob3VsZCBiZSByZW1vdmVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctZW1wdHkiPjwvYT48aDM+Z3N0X2NhcHNfbmV3X2VtcHR5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19uZXdfZW1wdHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0aGF0IGlzIGVtcHR5LiAgVGhhdCBpcywgdGhlIHJldHVybmVkCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBjb250YWlucyBubyBtZWRpYSBmb3JtYXRzLgotVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGlzIGd1YXJhbnRlZWQgdG8gYmUgd3JpdGFibGUuCi1DYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZyB0aGUgcmV0dXJuZWQgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctZW1wdHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctZW1wdHktc2ltcGxlIj48L2E+PGgzPmdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKm1lZGlhX3R5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0aGF0IGNvbnRhaW5zIG9uZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiB3aXRoIG5hbWUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZWRpYV90eXBlPC9jb2RlPjwvZW0+Ci0uCi1DYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZyB0aGUgcmV0dXJuZWQgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctZW1wdHktc2ltcGxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZWRpYV90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1lZGlhIHR5cGUgb2YgdGhlIHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW5ldy1lbXB0eS1zaW1wbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctYW55Ij48L2E+PGgzPmdzdF9jYXBzX25ld19hbnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX25ld19hbnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGNvbXBhdGlibGUgd2l0aAotYW55IG1lZGlhIGZvcm1hdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctYW55LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtbmV3LXNpbXBsZSI+PC9hPjxoMz5nc3RfY2Fwc19uZXdfc2ltcGxlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19uZXdfc2ltcGxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICptZWRpYV90eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgY29udGFpbnMgb25lIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiAgVGhlCi1zdHJ1Y3R1cmUgaXMgZGVmaW5lZCBieSB0aGUgYXJndW1lbnRzLCB3aGljaCBoYXZlIHRoZSBzYW1lIGZvcm1hdAotYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfbmV3KCk8L2NvZGU+PC9hPi4KLUNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nIHRoZSByZXR1cm5lZCBjYXBzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW5ldy1zaW1wbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVkaWFfdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZWRpYSB0eXBlIG9mIHRoZSBzdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Zmlyc3QgZmllbGQgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFkZGl0aW9uYWwgYXJndW1lbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctc2ltcGxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtbmV3LWZ1bGwiPjwvYT48aDM+Z3N0X2NhcHNfbmV3X2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX25ld19mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdDE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFuZCBhZGRzIGFsbCB0aGUgc3RydWN0dXJlcyBsaXN0ZWQgYXMKLWFyZ3VtZW50cy4gIFRoZSBsaXN0IG11c3QgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LXRlcm1pbmF0ZWQuICBUaGUgc3RydWN0dXJlcwotYXJlIG5vdCBjb3BpZWQ7IHRoZSByZXR1cm5lZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvd25zIHRoZSBzdHJ1Y3R1cmVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW5ldy1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdDE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZmlyc3Qgc3RydWN0dXJlIHRvIGFkZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hZGRpdGlvbmFsIHN0cnVjdHVyZXMgdG8gYWRkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctZnVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW5ldy1mdWxsLXZhbGlzdCI+PC9hPjxoMz5nc3RfY2Fwc19uZXdfZnVsbF92YWxpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX25ld19mdWxsX3ZhbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBhbmQgYWRkcyBhbGwgdGhlIHN0cnVjdHVyZXMgbGlzdGVkIGFzCi1hcmd1bWVudHMuICBUaGUgbGlzdCBtdXN0IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi10ZXJtaW5hdGVkLiAgVGhlIHN0cnVjdHVyZXMKLWFyZSBub3QgY29waWVkOyB0aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gb3ducyB0aGUgc3RydWN0dXJlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctZnVsbC12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZpcnN0IHN0cnVjdHVyZSB0byBhZGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFyX2FyZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hZGRpdGlvbmFsIHN0cnVjdHVyZXMgdG8gYWRkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1uZXctZnVsbC12YWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfY2Fwc19pc193cml0YWJsZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2NhcHNfaXNfd3JpdGFibGUoY2FwcykgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpKQotPC9wcmU+Ci08cD5UZXN0cyBpZiB5b3UgY2FuIHNhZmVseSBtb2RpZnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLS4gSXQgaXMgb25seSBzYWZlIHRvIG1vZGlmeSBjYXBzIHdoZW4KLXRoZXJlIGlzIG9ubHkgb25lIG93bmVyIG9mIHRoZSBjYXBzIC0gaWUsIHRoZSBvYmplY3QgaXMgd3JpdGFibGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtaXMtd3JpdGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1jb3B5Ij48L2E+PGgzPmdzdF9jYXBzX2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2NvcHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFzIGEgY29weSBvZiB0aGUgb2xkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0uIFRoZSBuZXcgY2FwcyB3aWxsIGhhdmUgYQotcmVmY291bnQgb2YgMSwgb3duZWQgYnkgdGhlIGNhbGxlci4gVGhlIHN0cnVjdHVyZXMgYXJlIGNvcGllZCBhcyB3ZWxsLjwvcD4KLTxwPk5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBzZW1hbnRpYyBlcXVpdmFsZW50IG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZWYiIHRpdGxlPSJnc3RfY2Fwc19yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3JlZigpPC9jb2RlPjwvYT4KLWZvbGxvd2VkIGJ5IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+LiBJZiB5b3Ugb25seSB3YW50IHRvIGhvbGQgb24gdG8gYQotcmVmZXJlbmNlIHRvIHRoZSBkYXRhLCB5b3Ugc2hvdWxkIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlZiIgdGl0bGU9ImdzdF9jYXBzX3JlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfcmVmKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5XaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgY2FwcywgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIiB0aXRsZT0iZ3N0X2NhcHNfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3VucmVmKCk8L2NvZGU+PC9hPiBvbiBpdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1jb3B5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1jb3B5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1jb3B5LW50aCI+PC9hPjxoMz5nc3RfY2Fwc19jb3B5X250aMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X2NhcHNfY29weV9udGggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbnRoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gYW5kIGFwcGVuZHMgYSBjb3B5IG9mIHRoZSBudGggc3RydWN0dXJlCi1jb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1jb3B5LW50aC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGNvcHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bnRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG50aCBzdHJ1Y3R1cmUgdG8gY29weTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtY29weS1udGgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RhdGljLWNhcHMtZ2V0Ij48L2E+PGgzPmdzdF9zdGF0aWNfY2Fwc19nZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9zdGF0aWNfY2Fwc19nZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdFN0YXRpY0NhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljQ2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY0NhcHM8L3NwYW4+PC9hPiAqc3RhdGljX2NhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29udmVydHMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdFN0YXRpY0NhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljQ2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY0NhcHM8L3NwYW4+PC9hPiB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdGF0aWMtY2Fwcy1nZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXRpY19jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2FwcyIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljQ2Fwczwvc3Bhbj48L2E+IHRvIGNvbnZlcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RhdGljLWNhcHMtZ2V0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBwb2ludGVyIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gVW5yZWYgYWZ0ZXIgdXNhZ2UuCi1TaW5jZSB0aGUgY29yZSBob2xkcyBhbiBhZGRpdGlvbmFsIHJlZiB0byB0aGUgcmV0dXJuZWQgY2FwcywKLXVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfbWFrZV93cml0YWJsZSgpPC9jb2RlPjwvYT4gb24gdGhlIHJldHVybmVkIGNhcHMgdG8gbW9kaWZ5IGl0LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RhdGljLWNhcHMtY2xlYW51cCI+PC9hPjxoMz5nc3Rfc3RhdGljX2NhcHNfY2xlYW51cMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zdGF0aWNfY2Fwc19jbGVhbnVwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHc3RTdGF0aWNDYXBzIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY0NhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNDYXBzPC9zcGFuPjwvYT4gKnN0YXRpY19jYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNsZWFuIHVwIHRoZSBjYWNoZWQgY2FwcyBjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXRpY19jYXBzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0YXRpYy1jYXBzLWNsZWFudXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXRpY19jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2FwcyIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljQ2Fwczwvc3Bhbj48L2E+IHRvIGNsZWFuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1hcHBlbmQiPjwvYT48aDM+Z3N0X2NhcHNfYXBwZW5kwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NhcHNfYXBwZW5kICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFwcGVuZHMgdGhlIHN0cnVjdHVyZXMgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPgotLiBUaGUgc3RydWN0dXJlcyBpbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+Ci0gYXJlIG5vdCBjb3BpZWQgLS0gdGhleSBhcmUgdHJhbnNmZXJyZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+Ci0sIGFuZCB0aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPgotIGlzCi1mcmVlZC4gSWYgZWl0aGVyIGNhcHMgaXMgQU5ZLCB0aGUgcmVzdWx0aW5nIGNhcHMgd2lsbCBiZSBBTlkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtYXBwZW5kLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzMjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gYXBwZW5kLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtbWVyZ2UiPjwvYT48aDM+Z3N0X2NhcHNfbWVyZ2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX21lcmdlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXBwZW5kcyB0aGUgc3RydWN0dXJlcyBjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+Ci0gaWYgdGhleSBhcmUgbm90IHlldAotZXhwcmVzc2VkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPgotLiBUaGUgc3RydWN0dXJlcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT4KLSBhcmUgbm90IGNvcGllZCAtLSB0aGV5IGFyZQotdHJhbnNmZXJyZWQgdG8gYSB3cml0YWJsZSBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPgotLCBhbmQgdGhlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT4KLSBpcyBmcmVlZC4KLUlmIGVpdGhlciBjYXBzIGlzIEFOWSwgdGhlIHJlc3VsdGluZyBjYXBzIHdpbGwgYmUgQU5ZLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW1lcmdlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0aGF0IHdpbGwgdGFrZSB0aGUgbmV3IGVudHJpZXMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzMjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gbWVyZ2UgaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtbWVyZ2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWVyZ2VkIGNhcHMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWFwcGVuZC1zdHJ1Y3R1cmUiPjwvYT48aDM+Z3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFwcGVuZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0uICBUaGUgc3RydWN0dXJlIGlzIG5vdCBjb3BpZWQ7IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0KLWJlY29tZXMgdGhlIG93bmVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1hcHBlbmQtc3RydWN0dXJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gdG8gYXBwZW5kLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtYXBwZW5kLXN0cnVjdHVyZS1mdWxsIj48L2E+PGgzPmdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+ICpmZWF0dXJlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BcHBlbmRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0uICBUaGUgc3RydWN0dXJlIGlzIG5vdCBjb3BpZWQ7IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0KLWJlY29tZXMgdGhlIG93bmVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1hcHBlbmQtc3RydWN0dXJlLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiB0byBhcHBlbmQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gdG8gYXBwZW5kLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1yZW1vdmUtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaWR4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPnJlbW92ZXMgdGhlIHN0cnVjdHVyZSB3aXRoIHRoZSBnaXZlbiBpbmRleCBmcm9tIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMKLWNvbnRhaW5lZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXJlbW92ZS1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byByZW1vdmUgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5JbmRleCBvZiB0aGUgc3RydWN0dXJlIHRvIHJlbW92ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1zdGVhbC1zdHJ1Y3R1cmUiPjwvYT48aDM+Z3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19zdGVhbF9zdHJ1Y3R1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyB0aGUgc3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIGluZGV4IGZyb20gdGhlIGxpc3Qgb2Ygc3RydWN0dXJlcwotY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0uIFRoZSBjYWxsZXIgYmVjb21lcyB0aGUgb3duZXIgb2YgdGhlIHJldHVybmVkIHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1zdGVhbC1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byByZXRyaWV2ZSBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+SW5kZXggb2YgdGhlIHN0cnVjdHVyZSB0byByZXRyaWV2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtc3RlYWwtc3RydWN0dXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBwb2ludGVyIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nCi10byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtbWVyZ2Utc3RydWN0dXJlIj48L2E+PGgzPmdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFwcGVuZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gaWYgaXRzIG5vdCBhbHJlYWR5IGV4cHJlc3NlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBtZXJnZSBpbnRvLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiB0byBtZXJnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1tZXJnZS1zdHJ1Y3R1cmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWVyZ2VkIGNhcHMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZS1mdWxsIj48L2E+PGgzPmdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZV9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXBwZW5kcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIGlmIGl0cyBub3QgYWxyZWFkeSBleHByZXNzZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1tZXJnZS1zdHJ1Y3R1cmUtZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBtZXJnZSBpbnRvLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiB0byBtZXJnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiB0byBtZXJnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZS1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG1lcmdlZCBjYXBzLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfY2Fwc19nZXRfc2l6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2NhcHNfZ2V0X3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlcyBjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1nZXQtc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1nZXQtc2l6ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci1jb250YWluczwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1nZXQtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9jYXBzX2dldF9zdHJ1Y3R1cmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaW5kcyB0aGUgc3RydWN0dXJlIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gdGhhdCBoYXMgdGhlIGluZGV4IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotLCBhbmQKLXJldHVybnMgaXQuPC9wPgotPHA+V0FSTklORzogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGNvbnN0IEdzdENhcHMgKiwgYnV0IHJldHVybnMgYQotbm9uLWNvbnN0IEdzdFN0cnVjdHVyZSAqLiAgVGhpcyBpcyBmb3IgcHJvZ3JhbW1pbmcgY29udmVuaWVuY2UgLS0KLXRoZSBjYWxsZXIgc2hvdWxkIGJlIGF3YXJlIHRoYXQgc3RydWN0dXJlcyBpbnNpZGUgYSBjb25zdGFudAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gSG93ZXZlciwgaWYgeW91IGtub3cgdGhlIGNhcHMKLWFyZSB3cml0YWJsZSwgZWl0aGVyIGJlY2F1c2UgeW91IGhhdmUganVzdCBjb3BpZWQgdGhlbSBvciBtYWRlCi10aGVtIHdyaXRhYmxlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+LCB5b3UgbWF5IG1vZGlmeSB0aGUKLXN0cnVjdHVyZSByZXR1cm5lZCBpbiB0aGUgdXN1YWwgd2F5LCBlLmcuIHdpdGggZnVuY3Rpb25zIGxpa2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3NldCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+WW91IGRvIG5vdCBuZWVkIHRvIGZyZWUgb3IgdW5yZWYgdGhlIHN0cnVjdHVyZSByZXR1cm5lZCwgaXQKLWJlbG9uZ3MgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWdldC1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW5kZXggb2YgdGhlIHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZ2V0LXN0cnVjdHVyZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgcG9pbnRlciB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gY29ycmVzcG9uZGluZwotdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWdldC1mZWF0dXJlcyI+PC9hPjxoMz5nc3RfY2Fwc19nZXRfZmVhdHVyZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2dldF9mZWF0dXJlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RmluZHMgdGhlIGZlYXR1cmVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gdGhhdCBoYXMgdGhlIGluZGV4IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotLCBhbmQKLXJldHVybnMgaXQuPC9wPgotPHA+V0FSTklORzogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGNvbnN0IEdzdENhcHMgKiwgYnV0IHJldHVybnMgYQotbm9uLWNvbnN0IEdzdENhcHNGZWF0dXJlcyAqLiAgVGhpcyBpcyBmb3IgcHJvZ3JhbW1pbmcgY29udmVuaWVuY2UgLS0KLXRoZSBjYWxsZXIgc2hvdWxkIGJlIGF3YXJlIHRoYXQgc3RydWN0dXJlcyBpbnNpZGUgYSBjb25zdGFudAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4gSG93ZXZlciwgaWYgeW91IGtub3cgdGhlIGNhcHMKLWFyZSB3cml0YWJsZSwgZWl0aGVyIGJlY2F1c2UgeW91IGhhdmUganVzdCBjb3BpZWQgdGhlbSBvciBtYWRlCi10aGVtIHdyaXRhYmxlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+LCB5b3UgbWF5IG1vZGlmeSB0aGUKLWZlYXR1cmVzIHJldHVybmVkIGluIHRoZSB1c3VhbCB3YXksIGUuZy4gd2l0aCBmdW5jdGlvbnMgbGlrZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLWFkZCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2FkZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfZmVhdHVyZXNfYWRkKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5Zb3UgZG8gbm90IG5lZWQgdG8gZnJlZSBvciB1bnJlZiB0aGUgc3RydWN0dXJlIHJldHVybmVkLCBpdAotYmVsb25ncyB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZ2V0LWZlYXR1cmVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWdldC1mZWF0dXJlcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgcG9pbnRlciB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gY29ycmVzcG9uZGluZwotdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXNldC1mZWF0dXJlcyI+PC9hPjxoMz5nc3RfY2Fwc19zZXRfZmVhdHVyZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2Fwc19zZXRfZmVhdHVyZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gKmZlYXR1cmVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotIGZvciB0aGUgc3RydWN0dXJlIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXNldC1mZWF0dXJlcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpbmRleCBvZiB0aGUgc3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiB0byBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXNldC12YWx1ZSI+PC9hPjxoMz5nc3RfY2Fwc19zZXRfdmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2Fwc19zZXRfdmFsdWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGQ8L2NvZGU+PC9lbT4KLSBvbiBhbGwgc3RydWN0dXJlcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIHRvIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS4KLVRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldF92YWx1ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUoKTwvY29kZT48L2E+IG9uCi1hbGwgc3RydWN0dXJlcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXNldC12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB3cml0YWJsZSBjYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFsdWUgdG8gc2V0IHRoZSBmaWVsZCB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1zZXQtc2ltcGxlIj48L2E+PGgzPmdzdF9jYXBzX3NldF9zaW1wbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2Fwc19zZXRfc2ltcGxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyBmaWVsZHMgaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gIFRoZSBhcmd1bWVudHMgbXVzdCBiZSBwYXNzZWQgaW4gdGhlIHNhbWUKLW1hbm5lciBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9zZXQoKTwvY29kZT48L2E+LCBhbmQgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LXRlcm1pbmF0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtc2V0LXNpbXBsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZpcnN0IGZpZWxkIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hZGRpdGlvbmFsIHBhcmFtZXRlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtc2V0LXNpbXBsZS12YWxpc3QiPjwvYT48aDM+Z3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIGZpZWxkcyBpbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiAgVGhlIGFyZ3VtZW50cyBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgc2FtZQotbWFubmVyIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3NldCgpPC9jb2RlPjwvYT4sIGFuZCBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1zZXQtc2ltcGxlLXZhbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZpcnN0IGZpZWxkIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YXJhcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWRkaXRpb25hbCBwYXJhbWV0ZXJzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZvcmVhY2giPjwvYT48aDM+Z3N0X2NhcHNfZm9yZWFjaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NhcHNfZm9yZWFjaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0Q2Fwc0ZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0Q2Fwc0ZvcmVhY2hGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGb3JlYWNoRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBvbmNlIGZvciBlYWNoIHN0cnVjdHVyZSBhbmQgY2FwcyBmZWF0dXJlIGluIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIFRoZSBmdW5jdGlvbiBtdXN0IG5vdCBtb2RpZnkgdGhlIGZpZWxkcy4KLUFsc28gc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWFwLWluLXBsYWNlIiB0aXRsZT0iZ3N0X2NhcHNfbWFwX2luX3BsYWNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19tYXBfaW5fcGxhY2UoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZpbHRlci1hbmQtbWFwLWluLXBsYWNlIiB0aXRsZT0iZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mb3JlYWNoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGZpZWxkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHByaXZhdGUgZGF0YS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mb3JlYWNoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdXBwbGllZCBmdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3IgZWFjaCBjYWxsLAotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1tYXAtaW4tcGxhY2UiPjwvYT48aDM+Z3N0X2NhcHNfbWFwX2luX3BsYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2Fwc19tYXBfaW5fcGxhY2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0Q2Fwc01hcEZ1bmMiIHRpdGxlPSJHc3RDYXBzTWFwRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzTWFwRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggc3RydWN0dXJlIGFuZCBjYXBzIGZlYXR1cmUgaW4gdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gSW4gY29udHJhc3QgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1mb3JlYWNoIiB0aXRsZT0iZ3N0X2NhcHNfZm9yZWFjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfZm9yZWFjaCgpPC9jb2RlPjwvYT4sIHRoZSBmdW5jdGlvbiBtYXkgbW9kaWZ5IGJ1dCBub3QKLWRlbGV0ZSB0aGUgc3RydWN0dXJlcyBhbmQgZmVhdHVyZXMuIFRoZSBjYXBzIG11c3QgYmUgbXV0YWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1tYXAtaW4tcGxhY2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZmllbGQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcHJpdmF0ZSBkYXRhLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW1hcC1pbi1wbGFjZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIGVhY2ggY2FsbCwKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmlsdGVyLWFuZC1tYXAtaW4tcGxhY2UiPjwvYT48aDM+Z3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHNGaWx0ZXJNYXBGdW5jIiB0aXRsZT0iR3N0Q2Fwc0ZpbHRlck1hcEZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZpbHRlck1hcEZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggc3RydWN0dXJlIGFuZCBjYXBzIGZlYXR1cmUgaW4gdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gSW4gY29udHJhc3QgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1mb3JlYWNoIiB0aXRsZT0iZ3N0X2NhcHNfZm9yZWFjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfZm9yZWFjaCgpPC9jb2RlPjwvYT4sIHRoZSBmdW5jdGlvbiBtYXkgbW9kaWZ5IHRoZQotc3RydWN0dXJlIGFuZCBmZWF0dXJlcy4gSW4gY29udHJhc3QgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1maWx0ZXItYW5kLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9jYXBzX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZSgpPC9jb2RlPjwvYT4sCi10aGUgc3RydWN0dXJlIGFuZCBmZWF0dXJlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjYXBzIGlmIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlzIHJldHVybmVkCi1mcm9tIHRoZSBmdW5jdGlvbi4KLVRoZSBjYXBzIG11c3QgYmUgbXV0YWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1maWx0ZXItYW5kLW1hcC1pbi1wbGFjZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBmaWVsZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwcml2YXRlIGRhdGEuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1hbnkiPjwvYT48aDM+Z3N0X2NhcHNfaXNfYW55wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2Fwc19pc19hbnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZXRlcm1pbmVzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gcmVwcmVzZW50cyBhbnkgbWVkaWEgZm9ybWF0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLWFueS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byB0ZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtaXMtYW55LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci1yZXByZXNlbnRzIGFueSBmb3JtYXQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLWVtcHR5Ij48L2E+PGgzPmdzdF9jYXBzX2lzX2VtcHR5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2Fwc19pc19lbXB0eSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkRldGVybWluZXMgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSByZXByZXNlbnRzIG5vIG1lZGlhIGZvcm1hdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtaXMtZW1wdHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gdGVzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLWVtcHR5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci1yZXByZXNlbnRzIG5vIGZvcm1hdHMuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLWZpeGVkIj48L2E+PGgzPmdzdF9jYXBzX2lzX2ZpeGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2Fwc19pc19maXhlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpeGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGRlc2NyaWJlIGV4YWN0bHkgb25lIGZvcm1hdCwgdGhhdCBpcywgdGhleSBoYXZlIGV4YWN0bHkKLW9uZSBzdHJ1Y3R1cmUsIGFuZCBlYWNoIGZpZWxkIGluIHRoZSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgZml4ZWQgdHlwZS4KLUV4YW1wbGVzIG9mIG5vbi1maXhlZCB0eXBlcyBhcmUgR1NUX1RZUEVfSU5UX1JBTkdFIGFuZCBHU1RfVFlQRV9MSVNULjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLWZpeGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1maXhlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotaXMgZml4ZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtaXMtZXF1YWwiPjwvYT48aDM+Z3N0X2NhcHNfaXNfZXF1YWzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jYXBzX2lzX2VxdWFsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBnaXZlbiBjYXBzIHJlcHJlc2VudCB0aGUgc2FtZSBzZXQgb2YgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1lcXVhbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbm90aGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1lcXVhbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBib3RoIGNhcHMgYXJlIGVxdWFsLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1lcXVhbC1maXhlZCI+PC9hPjxoMz5nc3RfY2Fwc19pc19lcXVhbF9maXhlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UZXN0cyBpZiB0d28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gYXJlIGVxdWFsLiAgVGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIG9uIGZpeGVkCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1lcXVhbC1maXhlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byB0ZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLWVxdWFsLWZpeGVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBhcmd1bWVudHMgcmVwcmVzZW50IHRoZSBzYW1lIGZvcm1hdDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1zdHJpY3RseS1lcXVhbCI+PC9hPjxoMz5nc3RfY2Fwc19pc19zdHJpY3RseV9lcXVhbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NhcHNfaXNfc3RyaWN0bHlfZXF1YWwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIGdpdmVuIGNhcHMgYXJlIGV4YWN0bHkgdGhlIHNhbWUgc2V0IG9mIGNhcHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtaXMtc3RyaWN0bHktZXF1YWwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW5vdGhlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtaXMtc3RyaWN0bHktZXF1YWwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYm90aCBjYXBzIGFyZSBzdHJpY3RseSBlcXVhbC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtaXMtYWx3YXlzLWNvbXBhdGlibGUiPjwvYT48aDM+Z3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jYXBzX2lzX2Fsd2F5c19jb21wYXRpYmxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBnaXZlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUgaXMgYWx3YXlzIGNvbXBhdGlibGUgd2l0aCBhbm90aGVyIGlmCi1ldmVyeSBtZWRpYSBmb3JtYXQgdGhhdCBpcyBpbiB0aGUgZmlyc3QgaXMgYWxzbyBjb250YWluZWQgaW4gdGhlCi1zZWNvbmQuICBUaGF0IGlzLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4KLSBpcyBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1hbHdheXMtY29tcGF0aWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byB0ZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLWFsd2F5cy1jb21wYXRpYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMTwvY29kZT48L2VtPgotaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLXN1YnNldCI+PC9hPjxoMz5nc3RfY2Fwc19pc19zdWJzZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jYXBzX2lzX3N1YnNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpzdWJzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqc3VwZXJzZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIGFsbCBjYXBzIHJlcHJlc2VudGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJzZXQ8L2NvZGU+PC9lbT4KLSBhcmUgYWxzbyByZXByZXNlbnRlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3VwZXJzZXQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1zdWJzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3Vic2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdXBlcnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcG90ZW50aWFsbHkgZ3JlYXRlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtaXMtc3Vic2V0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJzZXQ8L2NvZGU+PC9lbT4KLWlzIGEgc3Vic2V0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdXBlcnNldDwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLXN1YnNldC1zdHJ1Y3R1cmUiPjwvYT48aDM+Z3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLSBpcyBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1zdWJzZXQiIHRpdGxlPSJnc3RfY2Fwc19pc19zdWJzZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX2lzX3N1YnNldCgpPC9jb2RlPjwvYT4KLWZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLXN1YnNldC1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwb3RlbnRpYWwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gc3Vic2V0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLXN1YnNldC1zdHJ1Y3R1cmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1zdWJzZXQtc3RydWN0dXJlLWZ1bGwiPjwvYT48aDM+Z3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZV9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlX2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLSBpcyBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1zdWJzZXQiIHRpdGxlPSJnc3RfY2Fwc19pc19zdWJzZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX2lzX3N1YnNldCgpPC9jb2RlPjwvYT4KLWZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWlzLXN1YnNldC1zdHJ1Y3R1cmUtZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBvdGVudGlhbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pcy1zdWJzZXQtc3RydWN0dXJlLWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1jYW4taW50ZXJzZWN0Ij48L2E+PGgzPmdzdF9jYXBzX2Nhbl9pbnRlcnNlY3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRyaWVzIGludGVyc2VjdGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+Ci0gYW5kIHJlcG9ydHMgd2hldGhlciB0aGUgcmVzdWx0IHdvdWxkIG5vdAotYmUgZW1wdHk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1jYW4taW50ZXJzZWN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBpbnRlcnNlY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGludGVyc2VjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtY2FuLWludGVyc2VjdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBpbnRlcnNlY3Rpb24gd291bGQgYmUgbm90IGVtcHR5PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWludGVyc2VjdCI+PC9hPjxoMz5nc3RfY2Fwc19pbnRlcnNlY3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2ludGVyc2VjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgY29udGFpbnMgYWxsIHRoZSBmb3JtYXRzIHRoYXQgYXJlIGNvbW1vbgotdG8gYm90aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMyPC9jb2RlPjwvZW0+Ci0uIERlZmF1bHRzIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtSU5URVJTRUNULVpJRy1aQUc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHPC9jb2RlPjwvYT4gbW9kZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pbnRlcnNlY3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGludGVyc2VjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzMjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gaW50ZXJzZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pbnRlcnNlY3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1pbnRlcnNlY3QtZnVsbCI+PC9hPjxoMz5nc3RfY2Fwc19pbnRlcnNlY3RfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHc3RDYXBzSW50ZXJzZWN0TW9kZSIgdGl0bGU9ImVudW0gR3N0Q2Fwc0ludGVyc2VjdE1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzSW50ZXJzZWN0TW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgZm9ybWF0cyB0aGF0IGFyZSBjb21tb24KLXRvIGJvdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHMxPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzMjwvY29kZT48L2VtPgotLCB0aGUgb3JkZXIgaXMgZGVmaW5lZCBieSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHc3RDYXBzSW50ZXJzZWN0TW9kZSIgdGl0bGU9ImVudW0gR3N0Q2Fwc0ludGVyc2VjdE1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzSW50ZXJzZWN0TW9kZTwvc3Bhbj48L2E+Ci11c2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWludGVyc2VjdC1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBpbnRlcnNlY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGludGVyc2VjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGludGVyc2VjdGlvbiBhbGdvcml0aG0vbW9kZSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWludGVyc2VjdC1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtbm9ybWFsaXplIj48L2E+PGgzPmdzdF9jYXBzX25vcm1hbGl6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X2NhcHNfbm9ybWFsaXplICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgcmVwcmVzZW50cyB0aGUgc2FtZSBzZXQgb2YgZm9ybWF0cyBhcwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSwgYnV0IGNvbnRhaW5zIG5vIGxpc3RzLiAgRWFjaCBsaXN0IGlzIGV4cGFuZGVkIGludG8gc2VwYXJhdGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5Hc3RTdHJ1Y3R1cmVzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSBhbmQgd2lsbCBjYWxsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPgotb24gaXQgc28geW91IG11c3Qgbm90IHVzZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIGFmdGVyd2FyZHMgdW5sZXNzIHlvdSBrZWVwIGFuIGFkZGl0aW9uYWwKLXJlZmVyZW5jZSB0byBpdCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVmIiB0aXRsZT0iZ3N0X2NhcHNfcmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19yZWYoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW5vcm1hbGl6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIG5vcm1hbGl6ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtbm9ybWFsaXplLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5vcm1hbGl6ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXNpbXBsaWZ5Ij48L2E+PGgzPmdzdF9jYXBzX3NpbXBsaWZ5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19zaW1wbGlmeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnRzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIGludG8gYSByZXByZXNlbnRhdGlvbiB0aGF0IHJlcHJlc2VudHMgdGhlCi1zYW1lIHNldCBvZiBmb3JtYXRzLCBidXQgaW4gYSBzaW1wbGVyIGZvcm0uICBDb21wb25lbnQgc3RydWN0dXJlcyB0aGF0IGFyZQotaWRlbnRpY2FsIGFyZSBtZXJnZWQuICBDb21wb25lbnQgc3RydWN0dXJlcyB0aGF0IGhhdmUgdmFsdWVzIHRoYXQgY2FuIGJlCi1tZXJnZWQgYXJlIGFsc28gbWVyZ2VkLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gYW5kIHdpbGwgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfbWFrZV93cml0YWJsZSgpPC9jb2RlPjwvYT4KLW9uIGl0IGlmIG5lY2Vzc2FyeSwgc28geW91IG11c3Qgbm90IHVzZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIGFmdGVyd2FyZHMgdW5sZXNzIHlvdSBrZWVwIGFuCi1hZGRpdGlvbmFsIHJlZmVyZW5jZSB0byBpdCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVmIiB0aXRsZT0iZ3N0X2NhcHNfcmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19yZWYoKTwvY29kZT48L2E+LjwvcD4KLTxwPlRoaXMgbWV0aG9kIGRvZXMgbm90IHByZXNlcnZlIHRoZSBvcmlnaW5hbCBvcmRlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXNpbXBsaWZ5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc2ltcGxpZnkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXNpbXBsaWZ5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHNpbXBsaWZpZWQgY2Fwcy4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtcmVwbGFjZSI+PC9hPjxoMz5nc3RfY2Fwc19yZXBsYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2Fwc19yZXBsYWNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKipvbGRfY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqbmV3X2NhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TW9kaWZpZXMgYSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIFRoZQotbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKLWluIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAotY2FwcyBpcyB1bnJlZmZlZCwgdGhlIG5ldyBpcyByZWZmZWQpLjwvcD4KLTxwPkVpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X2NhcHM8L2NvZGU+PC9lbT4KLSBvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX2NhcHM8L2NvZGU+PC9lbT4KLSBtYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXJlcGxhY2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2xkX2NhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhIHBvaW50ZXIKLXRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gYmUgcmVwbGFjZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQgYW5kIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmlub3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uZXdfY2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCB3aWxsCi1yZXBsYWNlIHRoZSBjYXBzIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9jYXBzPC9jb2RlPjwvZW0+Ci0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1yZXBsYWNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdfY2FwczwvY29kZT48L2VtPgotd2FzIGRpZmZlcmVudCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfY2FwczwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXRha2UiPjwvYT48aDM+Z3N0X2NhcHNfdGFrZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NhcHNfdGFrZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICoqb2xkX2NhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKm5ld19jYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1vZGlmaWVzIGEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiBUaGlzCi1mdW5jdGlvbiBpcyBzaW1pbGFyIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVwbGFjZSIgdGl0bGU9ImdzdF9jYXBzX3JlcGxhY2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3JlcGxhY2UoKTwvY29kZT48L2E+IGV4Y2VwdCB0aGF0IGl0IHRha2VzIG93bmVyc2hpcAotb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19jYXBzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtdGFrZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vbGRfY2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGJlCi1yZXBsYWNlZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uZXdfY2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdGhhdCB3aWxsCi1yZXBsYWNlIHRoZSBjYXBzIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9jYXBzPC9jb2RlPjwvZW0+Ci0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy10YWtlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdfY2FwczwvY29kZT48L2VtPgotd2FzIGRpZmZlcmVudCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfY2FwczwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXRvLXN0cmluZyI+PC9hPjxoMz5nc3RfY2Fwc190b19zdHJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX3RvX3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICBUaGlzIHN0cmluZyByZXByZXNlbnRhdGlvbgotY2FuIGJlIGNvbnZlcnRlZCBiYWNrIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9jYXBzX2Zyb21fc3RyaW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19mcm9tX3N0cmluZygpPC9jb2RlPjwvYT4uPC9wPgotPHA+Rm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpdHMgZWFzaWVyIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxPRzpDQVBTIj5HU1RfTE9HPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7Y2FwcyBhcmUgJSZxdW90Ozwvc3Bhbj4gR1NUX1BUUl9GT1JNQVQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxwPgotVGhpcyBwcmludHMgdGhlIGNhcHMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybS48L3A+Ci08cD5UaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBzZXJpYWxpemF0aW9uIHdpbGwgbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMKLXdoZW4gdGhlcmUgYXJlIG5lc3RlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGRlZXBlciB0aGFuIG9uZSBsZXZlbC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy10by1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtdG8tc3RyaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mcm9tLXN0cmluZyI+PC9hPjxoMz5nc3RfY2Fwc19mcm9tX3N0cmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3RyaW5nPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gZnJvbSBhIHN0cmluZyByZXByZXNlbnRhdGlvbi48L3A+Ci08cD5UaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBzZXJpYWxpemF0aW9uIHdpbGwgbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMKLXdoZW4gdGhlcmUgYXJlIG5lc3RlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGRlZXBlciB0aGFuIG9uZSBsZXZlbC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mcm9tLXN0cmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJpbmcgdG8gY29udmVydCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZyb20tc3RyaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXdseSBhbGxvY2F0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXN1YnRyYWN0Ij48L2E+PGgzPmdzdF9jYXBzX3N1YnRyYWN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19zdWJ0cmFjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICptaW51ZW5kPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqc3VidHJhaGVuZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TdWJ0cmFjdHMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJ0cmFoZW5kPC9jb2RlPjwvZW0+Ci0gZnJvbSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbnVlbmQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJub3RlIj5UaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgcmVsaWFibHkgaWYgb3B0aW9uYWwgcHJvcGVydGllcyBmb3IgY2FwcwotYXJlIGluY2x1ZGVkIG9uIG9uZSBjYXBzIGFuZCBvbWl0dGVkIG9uIHRoZSBvdGhlci48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXN1YnRyYWN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbnVlbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBzdWJ0cmFjdCBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN1YnRyYWhlbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBzdWJ0cmFjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtc3VidHJhY3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcmVzdWx0aW5nIGNhcHMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLW1ha2Utd3JpdGFibGUiPjwvYT48aDM+Z3N0X2NhcHNfbWFrZV93cml0YWJsZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2NhcHNfbWFrZV93cml0YWJsZShjYXBzKSAgIEdTVF9DQVBTX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoY2FwcykpKQotPC9wcmU+Ci08cD5SZXR1cm5zIGEgd3JpdGFibGUgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLjwvcD4KLTxwPklmIHRoZXJlIGlzIG9ubHkgb25lIHJlZmVyZW5jZSBjb3VudCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLCB0aGUgY2FsbGVyIG11c3QgYmUgdGhlIG93bmVyLAotYW5kIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGNhcHMgb2JqZWN0IHVuY2hhbmdlZC4gSWYgb24gdGhlIG90aGVyCi1oYW5kIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QsIGEgbmV3IGNhcHMgb2JqZWN0IHdpbGwKLWJlIHJldHVybmVkLiBUaGUgY2FsbGVyJ3MgcmVmZXJlbmNlIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSByZW1vdmVkLCBhbmQgaW5zdGVhZCB0aGUKLWNhbGxlciB3aWxsIG93biBhIHJlZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgb2JqZWN0LjwvcD4KLTxwPkluIHNob3J0LCB0aGlzIGZ1bmN0aW9uIHVucmVmcyB0aGUgY2FwcyBpbiB0aGUgYXJndW1lbnQgYW5kIHJlZnMgdGhlIGNhcHMKLXRoYXQgaXQgcmV0dXJucy4gRG9uJ3QgYWNjZXNzIHRoZSBhcmd1bWVudCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFNlZQotYWxzbzogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZWYiIHRpdGxlPSJnc3RfY2Fwc19yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3JlZigpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtbWFrZS13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSB3cml0YWJsZSBjYXBzIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZQotc2FtZSBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy10cnVuY2F0ZSI+PC9hPjxoMz5nc3RfY2Fwc190cnVuY2F0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X2NhcHNfdHJ1bmNhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EaXNjYXJkIGFsbCBidXQgdGhlIGZpcnN0IHN0cnVjdHVyZSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0uIFVzZWZ1bCB3aGVuCi1maXhhdGluZy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIGFuZCB3aWxsIGNhbGwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+Ci1vbiBpdCBpZiBuZWNlc3NhcnksIHNvIHlvdSBtdXN0IG5vdCB1c2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSBhZnRlcndhcmRzIHVubGVzcyB5b3Uga2VlcCBhbgotYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gaXQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlZiIgdGl0bGU9ImdzdF9jYXBzX3JlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfcmVmKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy10cnVuY2F0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gdHJ1bmNhdGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLXRydW5jYXRlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdHJ1bmNhdGVkIGNhcHMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZpeGF0ZSI+PC9hPjxoMz5nc3RfY2Fwc19maXhhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2ZpeGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1vZGlmaWVzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIGludG8gYSByZXByZXNlbnRhdGlvbiB3aXRoIG9ubHkgZml4ZWQKLXZhbHVlcy4gRmlyc3QgdGhlIGNhcHMgd2lsbCBiZSB0cnVuY2F0ZWQgYW5kIHRoZW4gdGhlIGZpcnN0IHN0cnVjdHVyZSB3aWxsIGJlCi1maXhhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZml4YXRlKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIGFuZCB3aWxsIGNhbGwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+Ci1vbiBpdCBzbyB5b3UgbXVzdCBub3QgdXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gYWZ0ZXJ3YXJkcyB1bmxlc3MgeW91IGtlZXAgYW4gYWRkaXRpb25hbAotcmVmZXJlbmNlIHRvIGl0IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZWYiIHRpdGxlPSJnc3RfY2Fwc19yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3JlZigpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZml4YXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gZml4YXRlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1maXhhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgZml4YXRlZCBjYXBzLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1yZWYiPjwvYT48aDM+Z3N0X2NhcHNfcmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGQgYSByZWZlcmVuY2UgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvYmplY3QuPC9wPgotPHA+RnJvbSB0aGlzIHBvaW50IG9uLCB1bnRpbCB0aGUgY2FsbGVyIGNhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdW5yZWYiIHRpdGxlPSJnc3RfY2Fwc191bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfdW5yZWYoKTwvY29kZT48L2E+IG9yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfbWFrZV93cml0YWJsZSgpPC9jb2RlPjwvYT4sIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGUgY2FwcyBvYmplY3Qgd2lsbCBub3QKLWNoYW5nZS4gVGhpcyBtZWFucyBpdHMgc3RydWN0dXJlcyB3b24ndCBjaGFuZ2UsIGV0Yy4gVG8gdXNlIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KLW9iamVjdCwgeW91IG11c3QgYWx3YXlzIGhhdmUgYSByZWZjb3VudCBvbiBpdCAtLSBlaXRoZXIgdGhlIG9uZSBtYWRlCi1pbXBsaWNpdGx5IGJ5IGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctc2ltcGxlIiB0aXRsZT0iZ3N0X2NhcHNfbmV3X3NpbXBsZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfbmV3X3NpbXBsZSgpPC9jb2RlPjwvYT4sIG9yIHZpYSB0YWtpbmcgb25lIGV4cGxpY2l0bHkgd2l0aAotdGhpcyBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gcmVmZXJlbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtcmVmLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHNhbWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gb2JqZWN0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy11bnJlZiI+PC9hPjxoMz5nc3RfY2Fwc191bnJlZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jYXBzX3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VW5yZWYgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBhbmQgYW5kIGZyZWUgYWxsIGl0cyBzdHJ1Y3R1cmVzIGFuZCB0aGUKLXN0cnVjdHVyZXMnIHZhbHVlcyB3aGVuIHRoZSByZWZjb3VudCByZWFjaGVzIDAuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtdW5yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDYXBzLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDYXBzLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q2FwczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdENhcHMgewotICBHc3RNaW5pT2JqZWN0IG1pbmlfb2JqZWN0OwotfTsKLTwvcHJlPgotPHA+T2JqZWN0IGRlc2NyaWJpbmcgbWVkaWEgdHlwZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2Fwcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q2Fwcy1zdHJ1Y3QubWluaS1vYmplY3QiPjwvYT5taW5pX29iamVjdDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3RhdGljQ2FwcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0U3RhdGljQ2FwczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFN0YXRpY0NhcHMgewotICBHc3RDYXBzICpjYXBzOwotICBjb25zdCBjaGFyICpzdHJpbmc7Ci19OwotPC9wcmU+Ci08cD5EYXRhc3RydWN0dXJlIHRvIGluaXRpYWxpemUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gZnJvbSBhIHN0cmluZyBkZXNjcmlwdGlvbiB1c3VhbGx5Ci11c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMiIHRpdGxlPSJHU1RfU1RBVElDX0NBUFMoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfU1RBVElDX0NBUFMoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1zdGF0aWMtY2Fwcy1nZXQiIHRpdGxlPSJnc3Rfc3RhdGljX2NhcHNfZ2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RhdGljX2NhcHNfZ2V0KCk8L2NvZGU+PC9hPiB0bwotaW5zdGFudGlhdGUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RTdGF0aWNDYXBzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFN0YXRpY0NhcHMuY2FwcyI+PC9hPmNhcHM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjYWNoZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD5jb25zdMKgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RhdGljQ2Fwcy5zdHJpbmciPjwvYT5zdHJpbmc8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmEgc3RyaW5nIGRlc2NyaWJpbmcgYSBjYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDYXBzSW50ZXJzZWN0TW9kZSI+PC9hPjxoMz5lbnVtIEdzdENhcHNJbnRlcnNlY3RNb2RlPC9oMz4KLTxwPk1vZGVzIG9mIGNhcHMgaW50ZXJzZWN0aW9uPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHPC9jb2RlPjwvZW0+Ci0gdHJpZXMgdG8gcHJlc2VydmUgb3ZlcmFsbCBvcmRlciBvZiBib3RoIGNhcHMKLWJ5IGl0ZXJhdGluZyBvbiB0aGUgY2Fwcycgc3RydWN0dXJlcyBhcyB0aGUgZm9sbG93aW5nIG1hdHJpeCBzaG93czo8L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTU8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNhcHMxCi0gICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ky0tLS0tLS0tLS0tLS08L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MSAgMiAgNCAgNzwvc3Bhbj4KLWNhcHMyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij58PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4zICA1ICA4IDEwPC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPnw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjYgIDkgMTEgMTI8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD4KLVVzZWQgd2hlbiB0aGVyZSBpcyBubyBleHBsaWNpdCBwcmVjZWRlbmNlIG9mIG9uZSBjYXBzIG92ZXIgdGhlIG90aGVyLiBlLmcuCi10ZWUncyBzaW5rIHBhZCBnZXRjYXBzIGZ1bmN0aW9uLCBpdCB3aWxsIHByb2JlIGl0cyBzcmMgcGFkIHBlZXJzJyBmb3IgdGhlaXIKLWNhcHMgYW5kIGludGVyc2VjdCB0aGVtIHdpdGggdGhpcyBtb2RlLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5HU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1Q8L2NvZGU+PC9lbT4KLSBpcyB1c2VmdWwgd2hlbiBhbiBlbGVtZW50IHdhbnRzIHRvIHByZXNlcnZlCi1hbm90aGVyIGVsZW1lbnQncyBjYXBzIHByaW9yaXR5IG9yZGVyIHdoZW4gaW50ZXJzZWN0aW5nIHdpdGggaXRzIG93biBjYXBzLgotRXhhbXBsZTogSWYgY2FwczEgaXMgW0EsIEIsIENdIGFuZCBjYXBzMiBpcyBbRSwgQiwgRCwgQV0sIHRoZSByZXN1bHQKLXdvdWxkIGJlIFtBLCBCXSwgbWFpbnRhaW5pbmcgdGhlIGZpcnN0IGNhcHMgcHJpb3JpdHkgb24gdGhlIGludGVyc2VjdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDYXBzSW50ZXJzZWN0TW9kZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DQVBTLUlOVEVSU0VDVC1aSUctWkFHOkNBUFMiPjwvYT5HU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5aaWctemFncyBvdmVyIGJvdGggY2Fwcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNBUFMtSU5URVJTRUNULUZJUlNUOkNBUFMiPjwvYT5HU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+S2VlcHMgdGhlIGZpcnN0IGNhcHMgb3JkZXIuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDYXBzRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RDYXBzRmxhZ3M8L2gzPgotPHA+RXh0cmEgZmxhZ3MgZm9yIGEgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDYXBzRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNBUFMtRkxBRy1BTlk6Q0FQUyI+PC9hPkdTVF9DQVBTX0ZMQUdfQU5ZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkNhcHMgaGFzIG5vIHNwZWNpZmljIGNvbnRlbnQsIGJ1dCBjYW4gY29udGFpbgotICAgYW55dGhpbmcuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBUFMtQU5ZOkNBUFMiPjwvYT48aDM+R1NUX0NBUFNfQU5ZPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX0FOWSAgICAgICAgICAgICAgX2dzdF9jYXBzX2FueQotPC9wcmU+Ci08cD5NZWFucyB0aGF0IHRoZSBlbGVtZW50L3BhZCBjYW4gb3V0cHV0ICdhbnl0aGluZycuIFVzZWZ1bCBmb3IgZWxlbWVudHMKLXRoYXQgb3V0cHV0IHVua25vd24gbWVkaWEsIHN1Y2ggYXMgZmlsZXNyYy4gVGhpcyBtYWNybyByZXR1cm5zIGEgc2luZ2xldG9uIGFuZAotc2hvdWxkIG5vdCBiZSB1bnJlZmZlZC48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVBTLU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FQU19OT05FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX05PTkUgICAgICAgICAgICAgX2dzdF9jYXBzX25vbmUKLTwvcHJlPgotPHA+VGhlIG9wcG9zaXRlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtQU5ZOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19BTlkiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0FQU19BTlk8L2NvZGU+PC9hPjogaXQgbWVhbnMgdGhhdCB0aGUgcGFkL2VsZW1lbnQgb3V0cHV0cyBhbgotdW5kZWZpbmVkIG1lZGlhIHR5cGUgdGhhdCBjYW4gbm90IGJlIGRldGVjdGVkLiBUaGlzIG1hY3JvIHJldHVybnMgYSBzaW5nbGV0b24KLWFuZCBzaG91bGQgbm90IGJlIHVucmVmZmVkLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVNUQVRJQy1DQVBTLUFOWTpDQVBTIj48L2E+PGgzPkdTVF9TVEFUSUNfQ0FQU19BTlk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUQVRJQ19DQVBTX0FOWSAgICAgICBHU1RfU1RBVElDX0NBUFMoIkFOWSIpCi08L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc3RhdGljIGNhcHMgdGhhdCBtYXRjaGVzIGFueXRoaW5nLgotVGhpcyBjYW4gYmUgdXNlZCBpbiBwYWQgdGVtcGxhdGVzLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVNUQVRJQy1DQVBTLU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVElDX0NBUFNfTk9ORTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVElDX0NBUFNfTk9ORSAgICAgIEdTVF9TVEFUSUNfQ0FQUygiTk9ORSIpCi08L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc3RhdGljIGNhcHMgdGhhdCBtYXRjaGVzIG5vdGhpbmcuCi1UaGlzIGNhbiBiZSB1c2VkIGluIHBhZCB0ZW1wbGF0ZXMuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENhcHMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RDYXBzRmVhdHVyZXMuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NmEwZDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RDYXBzRmVhdHVyZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNDUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdENhcHNGZWF0dXJlczogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDYXBzRmVhdHVyZXMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENhcHNGZWF0dXJlcy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0Q2Fwcy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0Q2Fwc0ZlYXR1cmVzLnRvcF9vZl9wYWdlIj48L2E+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvaDI+Ci08cD5Hc3RDYXBzRmVhdHVyZXMg4oCUIEEgc2V0IG9mIGZlYXR1cmVzIGluIGNhcHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZlYXR1cmVzLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtbmV3IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3wqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctZW1wdHkiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHnCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldy1hbnkiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfYW55wqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfbmV3X2FueTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtbmV3LWlkIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctaWQtdmFsaXN0IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkX3ZhbGlzdMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZF92YWxpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldy12YWxpc3QiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfdmFsaXN0wqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfbmV3X3ZhbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtY29weSIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2NvcHnCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19jb3B5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtZnJlZSIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWXCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19mcmVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2Zyb21fc3RyaW5nwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfZnJvbV9zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLXRvLXN0cmluZyIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX3RvX3N0cmluZ8KgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX3RvX3N0cmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtc2V0LXBhcmVudC1yZWZjb3VudCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX3NldF9wYXJlbnRfcmVmY291bnTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1pcy1lcXVhbCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFswqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLWlzLWFueSIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2lzX2FuecKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2lzX2FueTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtY29udGFpbnMiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19jb250YWluc8KgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1jb250YWlucy1pZCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zX2lkwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnNfaWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLWdldC1zaXplIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3NpemXCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19nZXRfc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLWdldC1udGgiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRowqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtZ2V0LW50aC1pZCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGhfaWTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoX2lkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtYWRkIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfYWRkwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfYWRkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtYWRkLWlkIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtcmVtb3ZlIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtcmVtb3ZlLWlkIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlX2lkwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlX2lkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZlYXR1cmVzLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNHc3RDYXBzRmVhdHVyZXMtc3RydWN0IiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI0dTVC1DQVBTLUZFQVRVUkVTLUFOWTpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkVBVFVSRVNfQU5ZIj5HU1RfQ0FQU19GRUFUVVJFU19BTlk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI0dTVC1DQVBTLUZFQVRVUkVTLU1FTU9SWS1TWVNURU0tTUVNT1JZOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWSI+R1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI0dTVC1DQVBTLUZFQVRVUkUtTUVNT1JZLVNZU1RFTS1NRU1PUlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX1NZU1RFTV9NRU1PUlkiPkdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX1NZU1RFTV9NRU1PUlk8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZlYXR1cmVzLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUJveGVkLVR5cGVzLmh0bWwiPkdCb3hlZDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RDYXBzRmVhdHVyZXMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDYXBzRmVhdHVyZXMuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZlYXR1cmVzLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IGNhbiBvcHRpb25hbGx5IGJlIHNldCBvbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGFkZCByZXF1aXJlbWVudHMKLWZvciBhZGRpdGlvbmFsIGZlYXR1cmVzIGZvciBhIHNwZWNpZmljIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiBDYXBzIHN0cnVjdHVyZXMgd2l0aAotdGhlIHNhbWUgbmFtZSBidXQgd2l0aCBhIG5vbi1lcXVhbCBzZXQgb2YgY2FwcyBmZWF0dXJlcyBhcmUgbm90IGNvbXBhdGlibGUuCi1JZiBhIHBhZCBzdXBwb3J0cyBtdWx0aXBsZSBzZXRzIG9mIGZlYXR1cmVzIGl0IGhhcyB0byBhZGQgbXVsdGlwbGUgZXF1YWwKLXN0cnVjdHVyZXMgd2l0aCBkaWZmZXJlbnQgZmVhdHVyZSBzZXRzIHRvIHRoZSBjYXBzLjwvcD4KLTxwPkVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IGFyZSBlcXVpdmFsZW50IHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IHRoYXQgb25seQotY29udGFpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjR1NULUNBUFMtRkVBVFVSRS1NRU1PUlktU1lTVEVNLU1FTU9SWTpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkVBVFVSRV9NRU1PUllfU1lTVEVNX01FTU9SWSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX1NZU1RFTV9NRU1PUlk8L3NwYW4+PC9hPi4gQU5ZIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IGFzCi1jcmVhdGVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctYW55IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2FuecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfZmVhdHVyZXNfbmV3X2FueSgpPC9jb2RlPjwvYT4gYXJlIGVxdWFsIHRvIGFueSBvdGhlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPgotYW5kIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhhdCBhbnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gd291bGQgYmUgc3VwcG9ydGVkLCBlLmcuCi1mb3IgZWxlbWVudHMgdGhhdCBkb24ndCB0b3VjaCBidWZmZXIgbWVtb3J5LiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB3aXRoIEFOWSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPgotYXJlIGNvbnNpZGVyZWQgbm9uLWZpeGVkIGFuZCBkdXJpbmcgbmVnb3RpYXRpb24gc29tZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiBoYXZlCi10byBiZSBzZWxlY3RlZC48L3A+Ci08cD5FeGFtcGxlcyBmb3IgY2FwcyBmZWF0dXJlcyB3b3VsZCBiZSB0aGUgcmVxdWlyZW1lbnQgb2YgYSBzcGVjaWZpYyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPgotdHlwZXMgb3IgdGhlIHJlcXVpcmVtZW50IG9mIGhhdmluZyBhIHNwZWNpZmljIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiBvbiB0aGUgYnVmZmVyLiBGZWF0dXJlcwotYXJlIGdpdmVuIGFzIGEgc3RyaW5nIG9mIHRoZSBmb3JtYXQgIm1lbW9yeTpHc3RNZW1vcnlUeXBlTmFtZSIgb3IKLSJtZXRhOkdzdE1ldGFBUElOYW1lIi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENhcHNGZWF0dXJlcy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtbmV3Ij48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPsKgKgotZ3N0X2NhcHNfZmVhdHVyZXNfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZlYXR1cmUxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4gZmVhdHVyZXMuCi1UaGUgbGFzdCBhcmd1bWVudCBtdXN0IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc19mZWF0dXJlc19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtbmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmUxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiBmaXJzdCBmZWF0dXJlIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hZGRpdGlvbmFsIGZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldywgZW1wdHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLW5ldy1lbXB0eSI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2ZlYXR1cmVzX25ld19lbXB0eSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3LCBlbXB0eSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPi48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc19mZWF0dXJlc19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtbmV3LWVtcHR5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcsIGVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1uZXctYW55Ij48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX25ld19hbnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2ZlYXR1cmVzX25ld19hbnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldywgQU5ZIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LiBUaGlzIHdpbGwgYmUgZXF1YWwKLXRvIGFueSBvdGhlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiBidXQgY2FwcyB3aXRoIHRoZXNlIGFyZQotdW5maXhlZC48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc19mZWF0dXJlc19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtbmV3LWFueS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3LCBBTlkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLW5ldy1pZCI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19uZXdfaWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZlYXR1cmUxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4gZmVhdHVyZXMuCi1UaGUgbGFzdCBhcmd1bWVudCBtdXN0IGJlIDAuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLW5ldy1pZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgZmlyc3QgZmVhdHVyZSB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWRkaXRpb25hbCBmZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtbmV3LWlkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcsIGVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1uZXctaWQtdmFsaXN0Ij48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZF92YWxpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZF92YWxpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmZWF0dXJlMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IHdpdGggdGhlIGdpdmVuIGZlYXR1cmVzLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1uZXctaWQtdmFsaXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmUxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiBmaXJzdCBmZWF0dXJlIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YXJhcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFyaWFibGUgYXJndW1lbnQgbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtbmV3LWlkLXZhbGlzdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3LCBlbXB0eSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtbmV3LXZhbGlzdCI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19uZXdfdmFsaXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19mZWF0dXJlc19uZXdfdmFsaXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZlYXR1cmUxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiB2YXJhcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4gZmVhdHVyZXMuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLW5ldy12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIGZpcnN0IGZlYXR1cmUgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhcmFyZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD52YXJpYWJsZSBhcmd1bWVudCBsaXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1uZXctdmFsaXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcsIGVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1jb3B5Ij48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2ZlYXR1cmVzX2NvcHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RHVwbGljYXRlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IGFuZCBhbGwgaXRzIHZhbHVlcy48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc19mZWF0dXJlc19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtY29weS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IHRvIGR1cGxpY2F0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLWNvcHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtZnJlZSI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+ICpmZWF0dXJlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GcmVlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IGFuZCBhbGwgaXRzIHZhbHVlcy4gVGhlIGNhcHMgZmVhdHVyZXMgbXVzdCBub3QKLWhhdmUgYSBwYXJlbnQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1mcmVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gdG8gZnJlZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLWZyb20tc3RyaW5nIj48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX2Zyb21fc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+wqAqCi1nc3RfY2Fwc19mZWF0dXJlc19mcm9tX3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmZWF0dXJlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gZnJvbSBhIHN0cmluZyByZXByZXNlbnRhdGlvbi48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc19mZWF0dXJlc19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtZnJvbS1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1mcm9tLXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+IG9yCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2hlbiB0aGUgc3RyaW5nIGNvdWxkIG5vdCBiZSBwYXJzZWQuIEZyZWUgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLWZyZWUiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19mZWF0dXJlc19mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtdG8tc3RyaW5nIj48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX3RvX3N0cmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2NhcHNfZmVhdHVyZXNfdG9fc3RyaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gKmZlYXR1cmVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLjwvcD4KLTxwPkZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaXRzIGVhc2llciB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MT0c6Q0FQUyI+R1NUX0xPRzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2ZlYXR1cmVzIGlzICUmcXVvdDs8L3NwYW4+IEdTVF9QVFJfRk9STUFUPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGZlYXR1cmVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+Ci1UaGlzIHByaW50cyB0aGUgZmVhdHVyZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybS48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnX2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy10by1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLXRvLXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgcG9pbnRlciB0byBzdHJpbmcgYWxsb2NhdGVkIGJ5IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1tYWxsb2MiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19tYWxsb2MoKTwvY29kZT48L2E+LgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtc2V0LXBhcmVudC1yZWZjb3VudCI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gKmZlYXR1cmVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcmVmY291bnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgcGFyZW50X3JlZmNvdW50IGZpZWxkIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8KLWRldGVybWluZSB3aGV0aGVyIGEgY2FwcyBmZWF0dXJlcyBpcyBtdXRhYmxlIG9yIG5vdC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQotY2FsbGVkIGJ5IGNvZGUgaW1wbGVtZW50aW5nIHBhcmVudCBvYmplY3RzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LCBhcyBkZXNjcmliZWQgaW4KLXRoZSBNVCBSZWZjb3VudGluZyBzZWN0aW9uIG9mIHRoZSBkZXNpZ24gZG9jdW1lbnRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLXNldC1wYXJlbnQtcmVmY291bnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZmNvdW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byB0aGUgcGFyZW50J3MgcmVmY291bnQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1zZXQtcGFyZW50LXJlZmNvdW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYXJlbnQgcmVmY291bnQgY291bGQgYmUgc2V0LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1pcy1lcXVhbCI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXMxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXMyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmVzMjwvY29kZT48L2VtPgotIGFyZSBlcXVhbC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1pcy1lcXVhbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtaXMtZXF1YWwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmVzMTwvY29kZT48L2VtPgotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczI8L2NvZGU+PC9lbT4KLWFyZSBlcXVhbC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtaXMtYW55Ij48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX2lzX2FuecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gKmZlYXR1cmVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotIGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNHU1QtQ0FQUy1GRUFUVVJFUy1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZFQVRVUkVTX0FOWSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DQVBTX0ZFQVRVUkVTX0FOWTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLWlzLWFueS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLWlzLWFueS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLWlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNHU1QtQ0FQUy1GRUFUVVJFUy1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZFQVRVUkVTX0FOWSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DQVBTX0ZFQVRVUkVTX0FOWTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1jb250YWlucyI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19jb250YWluc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotIGNvbnRhaW5zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtY29udGFpbnMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1jb250YWlucy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLWNvbnRhaW5zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLWNvbnRhaW5zLWlkIj48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zX2lkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2Fwc19mZWF0dXJlc19jb250YWluc19pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+ICpmZWF0dXJlczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmVhdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLSBjb250YWlucyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLWNvbnRhaW5zLWlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtY29udGFpbnMtaWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmVzPC9jb2RlPjwvZW0+Ci1jb250YWlucyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19nZXRfc2l6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgbnVtYmVyIG9mIGZlYXR1cmVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLWdldC1zaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtZ2V0LXNpemUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbnVtYmVyIG9mIGZlYXR1cmVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtbnRoIj48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aTwvY29kZT48L2VtPgotLXRoIGZlYXR1cmUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmVzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtZ2V0LW50aC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbmRleCBvZiB0aGUgZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtZ2V0LW50aC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aTwvY29kZT48L2VtPgotLXRoIGZlYXR1cmUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmVzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLWdldC1udGgtaWQiPjwvYT48aDM+Z3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPgotZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+ICpmZWF0dXJlczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pPC9jb2RlPjwvZW0+Ci0tdGggZmVhdHVyZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtbnRoLWlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmluZGV4IG9mIHRoZSBmZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtbnRoLWlkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pPC9jb2RlPjwvZW0+Ci0tdGggZmVhdHVyZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtYWRkIj48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX2FkZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+ICpmZWF0dXJlczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZXM8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1hZGQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmZWF0dXJlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2Fwcy1mZWF0dXJlcy1hZGQtaWQiPjwvYT48aDM+Z3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4gKmZlYXR1cmVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmVhdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmVzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtYWRkLWlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmVhdHVyZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNhcHMtZmVhdHVyZXMtcmVtb3ZlIj48L2E+PGgzPmdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+ICpmZWF0dXJlczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT4KLSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLXJlbW92ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZlYXR1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLXJlbW92ZS1pZCI+PC9hPjxoMz5nc3RfY2Fwc19mZWF0dXJlc19yZW1vdmVfaWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2Fwc19mZWF0dXJlc19yZW1vdmVfaWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmZWF0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT4KLSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZWF0dXJlczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jYXBzLWZlYXR1cmVzLXJlbW92ZS1pZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZlYXR1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZlYXR1cmVzLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDYXBzRmVhdHVyZXMtc3RydWN0Ij48L2E+PGgzPkdzdENhcHNGZWF0dXJlczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHNGZWF0dXJlcyBHc3RDYXBzRmVhdHVyZXM7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVBTLUZFQVRVUkVTLUFOWTpDQVBTIj48L2E+PGgzPkdTVF9DQVBTX0ZFQVRVUkVTX0FOWTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0FQU19GRUFUVVJFU19BTlkgKF9nc3RfY2Fwc19mZWF0dXJlc19hbnkpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBUFMtRkVBVFVSRVMtTUVNT1JZLVNZU1RFTS1NRU1PUlk6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWSAoX2dzdF9jYXBzX2ZlYXR1cmVzX21lbW9yeV9zeXN0ZW1fbWVtb3J5KQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVBTLUZFQVRVUkUtTUVNT1JZLVNZU1RFTS1NRU1PUlk6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9TWVNURU1fTUVNT1JZPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX1NZU1RFTV9NRU1PUlkgIm1lbW9yeTpTeXN0ZW1NZW1vcnkiCi08L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDYXBzRmVhdHVyZXMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0Q2hpbGRQcm94eS5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RDaGlsZFByb3h5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlY2FhYmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RDaGlsZFByb3h5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MzEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdENoaWxkUHJveHk6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDaGlsZFByb3h5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDaGlsZFByb3h5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcmVyZXF1aXNpdGVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENoaWxkUHJveHkucHJlcmVxdWlzaXRlcyIgY2xhc3M9InNob3J0Y3V0Ij5QcmVyZXF1aXNpdGVzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ltcGxlbWVudGF0aW9ucyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDaGlsZFByb3h5LmltcGxlbWVudGF0aW9ucyIgY2xhc3M9InNob3J0Y3V0Ij5Lbm93biBJbXBsZW1lbnRhdGlvbnM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDaGlsZFByb3h5LnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RTYW1wbGUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdENsb2NrLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdENoaWxkUHJveHkudG9wX29mX3BhZ2UiPjwvYT5Hc3RDaGlsZFByb3h5PC9zcGFuPjwvaDI+Ci08cD5Hc3RDaGlsZFByb3h5IOKAlCBJbnRlcmZhY2UgZm9yIG11bHRpIGNoaWxkIGVsZW1lbnRzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDaGlsZFByb3h5LmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGRyZW4tY291bnQiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50wqAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R09iamVjdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9uYW1lwqAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HT2JqZWN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LWluZGV4IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleMKgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktbG9va3VwIiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cMKgKCkiPmdzdF9jaGlsZF9wcm94eV9sb29rdXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1wcm9wZXJ0eSIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHnCoCgpIj5nc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3TCoCgpIj5nc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldMKgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LXNldC1wcm9wZXJ0eSIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHnCoCgpIj5nc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1zZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3TCoCgpIj5nc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X3NldMKgKCkiPmdzdF9jaGlsZF9wcm94eV9zZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWNoaWxkLWFkZGVkIiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX2FkZGVkwqAoKSI+Z3N0X2NoaWxkX3Byb3h5X2NoaWxkX2FkZGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1jaGlsZC1yZW1vdmVkIiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWTCoCgpIj5nc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENoaWxkUHJveHkuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1hZGRlZCIgdGl0bGU9IlRoZSDigJxjaGlsZC1hZGRlZOKAnSBzaWduYWwiPmNoaWxkLWFkZGVkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1yZW1vdmVkIiB0aXRsZT0iVGhlIOKAnGNoaWxkLXJlbW92ZWTigJ0gc2lnbmFsIj5jaGlsZC1yZW1vdmVkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktc3RydWN0IiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5SW50ZXJmYWNlIiB0aXRsZT0ic3RydWN0IEdzdENoaWxkUHJveHlJbnRlcmZhY2UiPkdzdENoaWxkUHJveHlJbnRlcmZhY2U8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3QvdW5zdGFibGUvR1R5cGVNb2R1bGUuaHRtbCI+R0ludGVyZmFjZTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RDaGlsZFByb3h5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS5wcmVyZXF1aXNpdGVzIj48L2E+PGgyPlByZXJlcXVpc2l0ZXM8L2gyPgotPHA+Ci1Hc3RDaGlsZFByb3h5IHJlcXVpcmVzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDaGlsZFByb3h5LmltcGxlbWVudGF0aW9ucyI+PC9hPjxoMj5Lbm93biBJbXBsZW1lbnRhdGlvbnM8L2gyPgotPHA+Ci1Hc3RDaGlsZFByb3h5IGlzIGltcGxlbWVudGVkIGJ5Ci0gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+IGFuZCAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDaGlsZFByb3h5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgaW50ZXJmYWNlIGFic3RyYWN0cyBoYW5kbGluZyBvZiBwcm9wZXJ0eSBzZXRzIGZvciBlbGVtZW50cyB3aXRoCi1jaGlsZHJlbi4gSW1hZ2luZSBlbGVtZW50cyBzdWNoIGFzIG1peGVycyBvciBwb2x5cGhvbmljIGdlbmVyYXRvcnMuIFRoZXkgYWxsCi1oYXZlIG11bHRpcGxlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9yIHNvbWUga2luZCBvZiB2b2ljZSBvYmplY3RzLiBBbm90aGVyIHVzZSBjYXNlIGFyZQotY29udGFpbmVyIGVsZW1lbnRzIGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4uCi1UaGUgZWxlbWVudCBpbXBsZW1lbnRpbmcgdGhlIGludGVyZmFjZSBhY3RzIGFzIGEgcGFyZW50IGZvciB0aG9zZSBjaGlsZAotb2JqZWN0cy48L3A+Ci08cD5CeSBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UgdGhlIGNoaWxkIHByb3BlcnRpZXMgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdGhlCi1wYXJlbnQgZWxlbWVudCBieSB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfZ2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2hpbGRfcHJveHlfZ2V0KCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X3NldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NoaWxkX3Byb3h5X3NldCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+UHJvcGVydHkgbmFtZXMgYXJlIHdyaXR0ZW4gYXMgImNoaWxkLW5hbWU6OnByb3BlcnR5LW5hbWUiLiBUaGUgd2hvbGUgbmFtaW5nCi1zY2hlbWUgaXMgcmVjdXJzaXZlLiBUaHVzICJjaGlsZDE6OmNoaWxkMjo6cHJvcGVydHkiIGlzIHZhbGlkIHRvbywgaWYKLSJjaGlsZDEiIGFuZCAiY2hpbGQyIiBpbXBsZW1lbnQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+IGludGVyZmFjZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENoaWxkUHJveHkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGRyZW4tY291bnQiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgbnVtYmVyIG9mIGNoaWxkIG9iamVjdHMgdGhpcyBwYXJlbnQgY29udGFpbnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZHJlbi1jb3VudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkcmVuLWNvdW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG51bWJlciBvZiBjaGlsZCBvYmplY3RzPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZC1ieS1uYW1lIj48L2E+PGgzPmdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R09iamVjdDwvc3Bhbj48L2E+wqAqCi1nc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TG9va3MgdXAgYSBjaGlsZCBlbGVtZW50IGJ5IHRoZSBnaXZlbiBuYW1lLjwvcD4KLTxwPlRoaXMgdmlydHVhbCBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4KLXRvZ2V0aGVyIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LW5hbWUiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9uYW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X2dldF9uYW1lKCk8L2NvZGU+PC9hPi4gSWYgdGhlIGludGVyZmFjZSBpcyB0byBiZSB1c2VkIHdpdGgKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0czwvc3Bhbj48L2E+LCB0aGlzIG1ldGhvZHMgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBvYmplY3QgdG8gZ2V0IHRoZSBjaGlsZCBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY2hpbGQncyBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY2hpbGQgb2JqZWN0IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZgotbm90IGZvdW5kLiBVbnJlZiBhZnRlciB1c2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGQtYnktaW5kZXgiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R09iamVjdDwvc3Bhbj48L2E+wqAqCi1nc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDaGlsZFByb3h5PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GZXRjaGVzIGEgY2hpbGQgYnkgaXRzIG51bWJlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LWluZGV4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXJlbnQgb2JqZWN0IHRvIGdldCB0aGUgY2hpbGQgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjaGlsZCdzIHBvc2l0aW9uIGluIHRoZSBjaGlsZCBsaXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LWluZGV4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGNoaWxkIG9iamVjdCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYKLW5vdCBmb3VuZCAoaW5kZXggdG9vIGhpZ2gpLiBVbnJlZiBhZnRlciB1c2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1sb29rdXAiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2xvb2t1cMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqKnRhcmdldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdQYXJhbVNwZWM8L3NwYW4+PC9hPiAqKnBzcGVjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxvb2tzIHVwIHdoaWNoIG9iamVjdCBhbmQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gd291bGQgYmUgZWZmZWN0ZWQgYnkgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktbG9va3VwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNoaWxkIHByb3h5IG9iamVjdCB0byBsb29rdXAgdGhlIHByb3BlcnR5IGluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBsb29rIHVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhcmdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0Ci10YWtlcyB0aGUgcmVhbCBvYmplY3QgdG8gc2V0IHByb3BlcnR5IG9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wc3BlYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIHRha2UgdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1TcGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+Ci1kZXNjcmliaW5nIHRoZSBwcm9wZXJ0eS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1sb29rdXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldDwvY29kZT48L2VtPgotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wc3BlYzwvY29kZT48L2VtPgotY291bGQgYmUgZm91bmQuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS4gSW4gdGhhdAotY2FzZSB0aGUgdmFsdWVzIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHNwZWM8L2NvZGU+PC9lbT4KLWFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+Ci1hcmUgbm90IG1vZGlmaWVkLiBVbnJlZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+Ci1hZnRlcgotdXNhZ2UuIEZvciBwbGFpbiBHT2JqZWN0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+Ci1pcyB0aGUgc2FtZSBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1nZXQtcHJvcGVydHkiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0ecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgYSBzaW5nbGUgcHJvcGVydHkgdXNpbmcgdGhlIEdzdENoaWxkUHJveHkgbWVjaGFuaXNtLgotWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdCBieSBjYWxsaW5nIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS11bnNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Vuc2V0KCk8L2NvZGU+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1nZXQtcHJvcGVydHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b2JqZWN0IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIHRoZSBwcm9wZXJ0eTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdGhhdCBzaG91bGQgdGFrZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJPdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dCBjYWxsZXItYWxsb2NhdGVzPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWdldC12YWxpc3QiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdF9wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyBwcm9wZXJ0aWVzIG9mIHRoZSBwYXJlbnQgb2JqZWN0IGFuZCBpdHMgY2hpbGRyZW4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWdldC12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maXJzdF9wcm9wZXJ0eV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiB0aGUgZmlyc3QgcHJvcGVydHkgdG8gZ2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhcl9hcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSBuYW1lL3JldHVybiBsb2NhdGlvbiBwYWlycywgZm9sbG93ZWQgYnkgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1nZXQiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X2dldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jaGlsZF9wcm94eV9nZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdF9wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHByb3BlcnRpZXMgb2YgdGhlIHBhcmVudCBvYmplY3QgYW5kIGl0cyBjaGlsZHJlbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hpbGQtcHJveHktZ2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXJlbnQgb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpcnN0X3Byb3BlcnR5X25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSB0byBnZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSBuYW1lL3JldHVybiBsb2NhdGlvbiBwYWlycywgZm9sbG93ZWQgYnkgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1zZXQtcHJvcGVydHkiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0ecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgYSBzaW5nbGUgcHJvcGVydHkgdXNpbmcgdGhlIEdzdENoaWxkUHJveHkgbWVjaGFuaXNtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1zZXQtcHJvcGVydHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5ldyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGZvciB0aGUgcHJvcGVydHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LXNldC12YWxpc3QiPjwvYT48aDM+Z3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdF9wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyBwcm9wZXJ0aWVzIG9mIHRoZSBwYXJlbnQgb2JqZWN0IGFuZCBpdHMgY2hpbGRyZW4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LXNldC12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3RfcHJvcGVydHlfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgdGhlIGZpcnN0IHByb3BlcnR5IHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YXJfYXJnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSBuYW1lL3ZhbHVlIHBhaXJzLCBmb2xsb3dlZCBieSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LXNldCI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfc2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NoaWxkX3Byb3h5X3NldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpcnN0X3Byb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgcHJvcGVydGllcyBvZiB0aGUgcGFyZW50IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1zZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3RfcHJvcGVydHlfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgdGhlIGZpcnN0IHByb3BlcnR5IHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD52YWx1ZSBmb3IgdGhlIGZpcnN0IHByb3BlcnR5LCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IG1vcmUgbmFtZS92YWx1ZSBwYWlycywgZm9sbG93ZWQgYnkgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1jaGlsZC1hZGRlZCI+PC9hPjxoMz5nc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqY2hpbGQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FbWl0cyB0aGUgImNoaWxkLWFkZGVkIiBzaWduYWwuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWNoaWxkLWFkZGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXJlbnQgb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNoaWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5ld2x5IGFkZGVkIGNoaWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgbmV3IGNoaWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGlsZC1wcm94eS1jaGlsZC1yZW1vdmVkIj48L2E+PGgzPmdzdF9jaGlsZF9wcm94eV9jaGlsZF9yZW1vdmVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpjaGlsZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RW1pdHMgdGhlICJjaGlsZC1yZW1vdmVkIiBzaWduYWwuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoaWxkLXByb3h5LWNoaWxkLXJlbW92ZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2hpbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVtb3ZlZCBjaGlsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIG9sZCBjaGlsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENoaWxkUHJveHkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENoaWxkUHJveHktc3RydWN0Ij48L2E+PGgzPkdzdENoaWxkUHJveHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RDaGlsZFByb3h5IEdzdENoaWxkUHJveHk7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDaGlsZFByb3h5PC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDaGlsZFByb3h5SW50ZXJmYWNlIj48L2E+PGgzPnN0cnVjdCBHc3RDaGlsZFByb3h5SW50ZXJmYWNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q2hpbGRQcm94eUludGVyZmFjZSB7Ci0gIEdUeXBlSW50ZXJmYWNlIHBhcmVudDsKLQotICAvKiBtZXRob2RzICovCi0gIEdPYmplY3QgKiAoKmdldF9jaGlsZF9ieV9uYW1lKSAgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsIGNvbnN0IGdjaGFyICogbmFtZSk7Ci0gIEdPYmplY3QgKiAoKmdldF9jaGlsZF9ieV9pbmRleCkgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsIGd1aW50IGluZGV4KTsKLSAgZ3VpbnQgICAgICgqZ2V0X2NoaWxkcmVuX2NvdW50KSAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCk7Ci19OwotPC9wcmU+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiBpbnRlcmZhY2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eUludGVyZmFjZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlSW50ZXJmYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGVJbnRlcmZhY2U8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q2hpbGRQcm94eUludGVyZmFjZS5wYXJlbnQiPjwvYT5wYXJlbnQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnBhcmVudCBpbnRlcmZhY2UgdHlwZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDaGlsZFByb3h5SW50ZXJmYWNlLmdldC1jaGlsZC1ieS1uYW1lIj48L2E+Z2V0X2NoaWxkX2J5X25hbWU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnZpcnR1YWwgbWV0aG9kIHRvIGZldGNoIHRoZSBjaGlsZCBieSBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q2hpbGRQcm94eUludGVyZmFjZS5nZXQtY2hpbGQtYnktaW5kZXgiPjwvYT5nZXRfY2hpbGRfYnlfaW5kZXg8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnZpcnR1YWwgbWV0aG9kIHRvIGZldGNoIHRoZSBjaGlsZCBieSBpbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENoaWxkUHJveHlJbnRlcmZhY2UuZ2V0LWNoaWxkcmVuLWNvdW50Ij48L2E+Z2V0X2NoaWxkcmVuX2NvdW50PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD52aXJ0dWFsIG1ldGhvZCB0byBnZXQgdGhlIGNoaWxkcmVuIGNvdW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENoaWxkUHJveHkuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS1jaGlsZC1hZGRlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNoaWxkLWFkZGVk4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+ICpjaGlsZF9wcm94eSwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gICAgICAgKm9iamVjdCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICAgICAgICAgKm5hbWUsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5XaWxsIGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSB3YXMgYWRkZWQgdG8gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGlsZF9wcm94eTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENoaWxkUHJveHktY2hpbGQtYWRkZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2hpbGRfcHJveHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDaGlsZFByb3h5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhhdCB3YXMgYWRkZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBuZXcgY2hpbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS1jaGlsZC1yZW1vdmVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2hpbGQtcmVtb3ZlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiAqY2hpbGRfcHJveHksCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICAgICAgICpvYmplY3QsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAgICAgICAgICpuYW1lLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+V2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0gd2FzIHJlbW92ZWQgZnJvbSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoaWxkX3Byb3h5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2hpbGRQcm94eS1jaGlsZC1yZW1vdmVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNoaWxkX3Byb3h5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2hpbGRQcm94eTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgd2FzIHJlbW92ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBvbGQgY2hpbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDaGlsZFByb3h5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdENsb2NrLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdENsb2NrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZGYyYmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RDbG9jay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjc3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0Q2xvY2s6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdENvbmZpZy5odG1sIiB0aXRsZT0iR3N0Q29uZmlnIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENsb2NrLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDbG9jay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDbG9jay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDbG9jay5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdENvbmZpZy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdENsb2NrIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0Q2xvY2sudG9wX29mX3BhZ2UiPjwvYT5Hc3RDbG9jazwvc3Bhbj48L2gyPgotPHA+R3N0Q2xvY2sg4oCUIEFic3RyYWN0IGNsYXNzIGZvciBnbG9iYWwgY2xvY2tzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENsb2NrLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX0lTX1ZBTElEKCkiPkdTVF9DTE9DS19USU1FX0lTX1ZBTElEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVNUSU1FLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQoKSI+R1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtU0VDT05EUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVNfU0VDT05EUygpIj5HU1RfVElNRV9BU19TRUNPTkRTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtTVNFQ09ORFM6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX0FTX01TRUNPTkRTKCkiPkdTVF9USU1FX0FTX01TRUNPTkRTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtVVNFQ09ORFM6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX0FTX1VTRUNPTkRTKCkiPkdTVF9USU1FX0FTX1VTRUNPTkRTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtTlNFQ09ORFM6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX0FTX05TRUNPTkRTKCkiPkdTVF9USU1FX0FTX05TRUNPTkRTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLURJRkY6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19ESUZGKCkiPkdTVF9DTE9DS19ESUZGPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUVWQUwtVE8tVElNRTpDQVBTIiB0aXRsZT0iR1NUX1RJTUVWQUxfVE9fVElNRSgpIj5HU1RfVElNRVZBTF9UT19USU1FPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtVE8tVElNRVZBTDpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfVE9fVElNRVZBTCgpIj5HU1RfVElNRV9UT19USU1FVkFMPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUVTUEVDLVRPLVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9USU1FU1BFQ19UT19USU1FKCkiPkdTVF9USU1FU1BFQ19UT19USU1FPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtVE8tVElNRVNQRUM6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX1RPX1RJTUVTUEVDKCkiPkdTVF9USU1FX1RPX1RJTUVTUEVDPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NhbGxiYWNrIiB0aXRsZT0iR3N0Q2xvY2tDYWxsYmFja8KgKCkiPipHc3RDbG9ja0NhbGxiYWNrPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlk6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWSgpIj5HU1RfQ0xPQ0tfRU5UUlk8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktQ0xPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWV9DTE9DSygpIj5HU1RfQ0xPQ0tfRU5UUllfQ0xPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktVFlQRTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX0VOVFJZX1RZUEUoKSI+R1NUX0NMT0NLX0VOVFJZX1RZUEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktVElNRTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX0VOVFJZX1RJTUUoKSI+R1NUX0NMT0NLX0VOVFJZX1RJTUU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktSU5URVJWQUw6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWV9JTlRFUlZBTCgpIj5HU1RfQ0xPQ0tfRU5UUllfSU5URVJWQUw8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktU1RBVFVTOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTKCkiPkdTVF9DTE9DS19FTlRSWV9TVEFUVVM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19GTEFHUygpIj5HU1RfQ0xPQ0tfRkxBR1M8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGQtb2JzZXJ2YXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uwqAoKSI+Z3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stYWRkLW9ic2VydmF0aW9uLXVuYXBwbGllZCIgdGl0bGU9ImdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb25fdW5hcHBsaWVkwqAoKSI+Z3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbl91bmFwcGxpZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1tYXN0ZXIiIHRpdGxlPSJnc3RfY2xvY2tfc2V0X21hc3RlcsKgKCkiPmdzdF9jbG9ja19zZXRfbWFzdGVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtbWFzdGVyIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF9tYXN0ZXLCoCgpIj5nc3RfY2xvY2tfZ2V0X21hc3RlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LXJlc29sdXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfc2V0X3Jlc29sdXRpb27CoCgpIj5nc3RfY2xvY2tfc2V0X3Jlc29sdXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1yZXNvbHV0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uwqAoKSI+Z3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19nZXRfdGltZcKgKCkiPmdzdF9jbG9ja19nZXRfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stbmV3LXNpbmdsZS1zaG90LWlkIiB0aXRsZT0iZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZMKgKCkiPmdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLW5ldy1wZXJpb2RpYy1pZCIgdGl0bGU9ImdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWTCoCgpIj5nc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zaW5nbGUtc2hvdC1pZC1yZWluaXQiIHRpdGxlPSJnc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0wqAoKSI+Z3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stcGVyaW9kaWMtaWQtcmVpbml0IiB0aXRsZT0iZ3N0X2Nsb2NrX3BlcmlvZGljX2lkX3JlaW5pdMKgKCkiPmdzdF9jbG9ja19wZXJpb2RpY19pZF9yZWluaXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1pbnRlcm5hbC10aW1lIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lwqAoKSI+Z3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGp1c3QtdW5sb2NrZWQiIHRpdGxlPSJnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkwqAoKSI+Z3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stdW5hZGp1c3QtdW5sb2NrZWQiIHRpdGxlPSJnc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWTCoCgpIj5nc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkanVzdC13aXRoLWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uwqAoKSI+Z3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay11bmFkanVzdC13aXRoLWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX3VuYWRqdXN0X3dpdGhfY2FsaWJyYXRpb27CoCgpIj5nc3RfY2xvY2tfdW5hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1jYWxpYnJhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb27CoCgpIj5nc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbsKgKCkiPmdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lb3V0IiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF90aW1lb3V0wqAoKSI+Z3N0X2Nsb2NrX2dldF90aW1lb3V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LXRpbWVvdXQiIHRpdGxlPSJnc3RfY2xvY2tfc2V0X3RpbWVvdXTCoCgpIj5nc3RfY2xvY2tfc2V0X3RpbWVvdXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXdhaXQtZm9yLXN5bmMiIHRpdGxlPSJnc3RfY2xvY2tfd2FpdF9mb3Jfc3luY8KgKCkiPmdzdF9jbG9ja193YWl0X2Zvcl9zeW5jPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pcy1zeW5jZWQiIHRpdGxlPSJnc3RfY2xvY2tfaXNfc3luY2VkwqAoKSI+Z3N0X2Nsb2NrX2lzX3N5bmNlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1zeW5jZWQiIHRpdGxlPSJnc3RfY2xvY2tfc2V0X3N5bmNlZMKgKCkiPmdzdF9jbG9ja19zZXRfc3luY2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC1nZXQtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19pZF9nZXRfdGltZcKgKCkiPmdzdF9jbG9ja19pZF9nZXRfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RDbG9ja1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0IiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3dhaXTCoCgpIj5nc3RfY2xvY2tfaWRfd2FpdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RDbG9ja1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0LWFzeW5jIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmPCoCgpIj5nc3RfY2xvY2tfaWRfd2FpdF9hc3luYzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVuc2NoZWR1bGUiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZcKgKCkiPmdzdF9jbG9ja19pZF91bnNjaGVkdWxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtY29tcGFyZS1mdW5jIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuY8KgKCkiPmdzdF9jbG9ja19pZF9jb21wYXJlX2Z1bmM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXJlZiIgdGl0bGU9ImdzdF9jbG9ja19pZF9yZWbCoCgpIj5nc3RfY2xvY2tfaWRfcmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5yZWYiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5yZWbCoCgpIj5nc3RfY2xvY2tfaWRfdW5yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDbG9jay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS10aW1lb3V0IiB0aXRsZT0iVGhlIOKAnHRpbWVvdXTigJ0gcHJvcGVydHkiPnRpbWVvdXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0td2luZG93LXNpemUiIHRpdGxlPSJUaGUg4oCcd2luZG93LXNpemXigJ0gcHJvcGVydHkiPndpbmRvdy1zaXplPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXdpbmRvdy10aHJlc2hvbGQiIHRpdGxlPSJUaGUg4oCcd2luZG93LXRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+d2luZG93LXRocmVzaG9sZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2xvY2suc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zeW5jZWQiIHRpdGxlPSJUaGUg4oCcc3luY2Vk4oCdIHNpZ25hbCI+c3luY2VkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDbG9jay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENsb2NrIj5Hc3RDbG9jazwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RDbG9ja0NsYXNzIj5Hc3RDbG9ja0NsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJ0eXBlZGVmX2tleXdvcmQiPnR5cGVkZWY8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPkdzdENsb2NrVGltZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0idHlwZWRlZl9rZXl3b3JkIj50eXBlZGVmPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIgdGl0bGU9IkdzdENsb2NrVGltZURpZmYiPkdzdENsb2NrVGltZURpZmY8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InR5cGVkZWZfa2V5d29yZCI+dHlwZWRlZjwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj5Hc3RDbG9ja0lEPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPkdTVF9DTE9DS19USU1FX05PTkU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVNUSU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19TVElNRV9OT05FIj5HU1RfQ0xPQ0tfU1RJTUVfTk9ORTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtU0VDT05EOkNBUFMiIHRpdGxlPSJHU1RfU0VDT05EIj5HU1RfU0VDT05EPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1NU0VDT05EOkNBUFMiIHRpdGxlPSJHU1RfTVNFQ09ORCI+R1NUX01TRUNPTkQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVVTRUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9VU0VDT05EIj5HU1RfVVNFQ09ORDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtTlNFQ09ORDpDQVBTIiB0aXRsZT0iR1NUX05TRUNPTkQiPkdTVF9OU0VDT05EPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0VudHJ5IiB0aXRsZT0ic3RydWN0IEdzdENsb2NrRW50cnkiPkdzdENsb2NrRW50cnk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0VudHJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0Q2xvY2tFbnRyeVR5cGUiPkdzdENsb2NrRW50cnlUeXBlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdENsb2NrUmV0dXJuIj5Hc3RDbG9ja1JldHVybjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENsb2NrRmxhZ3MiPkdzdENsb2NrRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2xvY2sub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0Q2xvY2sKLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj5Hc3RTeXN0ZW1DbG9jazwvYT4KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDbG9jay5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDbG9jay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5HU3RyZWFtZXIgdXNlcyBhIGdsb2JhbCBjbG9jayB0byBzeW5jaHJvbml6ZSB0aGUgcGx1Z2lucyBpbiBhIHBpcGVsaW5lLgotRGlmZmVyZW50IGNsb2NrIGltcGxlbWVudGF0aW9ucyBhcmUgcG9zc2libGUgYnkgaW1wbGVtZW50aW5nIHRoaXMgYWJzdHJhY3QKLWJhc2UgY2xhc3Mgb3IsIG1vcmUgY29udmVuaWVudGx5LCBieSBzdWJjbGFzc2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3lzdGVtQ2xvY2s8L3NwYW4+PC9hPi48L3A+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gcmV0dXJucyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB0aW1lIHdpdGggdGhlIG1ldGhvZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF90aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfZ2V0X3RpbWUoKTwvY29kZT48L2E+LiBJdHMgYWNjdXJhY3kgYW5kIGJhc2UgdGltZSBkZXBlbmQgb24gdGhlIHNwZWNpZmljCi1jbG9jayBpbXBsZW1lbnRhdGlvbiBidXQgdGltZSBpcyBhbHdheXMgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzLiBTaW5jZSB0aGUKLWJhc2VsaW5lIG9mIHRoZSBjbG9jayBpcyB1bmRlZmluZWQsIHRoZSBjbG9jayB0aW1lIHJldHVybmVkIGlzIG5vdAotbWVhbmluZ2Z1bCBpbiBpdHNlbGYsIHdoYXQgbWF0dGVycyBhcmUgdGhlIGRlbHRhcyBiZXR3ZWVuIHR3byBjbG9jayB0aW1lcy4KLVRoZSB0aW1lIHJldHVybmVkIGJ5IGEgY2xvY2sgaXMgY2FsbGVkIHRoZSBhYnNvbHV0ZSB0aW1lLjwvcD4KLTxwPlRoZSBwaXBlbGluZSB1c2VzIHRoZSBjbG9jayB0byBjYWxjdWxhdGUgdGhlIHJ1bm5pbmcgdGltZS4gVXN1YWxseSBhbGwKLXJlbmRlcmVycyBzeW5jaHJvbml6ZSB0byB0aGUgZ2xvYmFsIGNsb2NrIHVzaW5nIHRoZSBidWZmZXIgdGltZXN0YW1wcywgdGhlCi1uZXdzZWdtZW50IGV2ZW50cyBhbmQgdGhlIGVsZW1lbnQncyBiYXNlIHRpbWUsIHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi48L3A+Ci08cD5BIGNsb2NrIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0IHBlcmlvZGljIGFuZCBzaW5nbGUgc2hvdCBjbG9jawotbm90aWZpY2F0aW9ucyBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMuPC9wPgotPHA+T25lIGZpcnN0IG5lZWRzIHRvIGNyZWF0ZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGZvciB0aGUgcGVyaW9kaWMgb3Igc2luZ2xlIHNob3QKLW5vdGlmaWNhdGlvbiB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stbmV3LXNpbmdsZS1zaG90LWlkIiB0aXRsZT0iZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCgpPC9jb2RlPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1uZXctcGVyaW9kaWMtaWQiIHRpdGxlPSJnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UbyBwZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBmb3IgdGhlIHNwZWNpZmljIHRpbWUgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHVzZSB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0IiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3dhaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19pZF93YWl0KCk8L2NvZGU+PC9hPi4gVG8gcmVjZWl2ZSBhIGNhbGxiYWNrIHdoZW4gdGhlIHNwZWNpZmljIHRpbWUgaXMgcmVhY2hlZAotaW4gdGhlIGNsb2NrIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtd2FpdC1hc3luYyIgdGl0bGU9ImdzdF9jbG9ja19pZF93YWl0X2FzeW5jwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfd2FpdF9hc3luYygpPC9jb2RlPjwvYT4uIEJvdGggdGhlc2UgY2FsbHMgY2FuIGJlCi1pbnRlcnJ1cHRlZCB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5zY2hlZHVsZSIgdGl0bGU9ImdzdF9jbG9ja19pZF91bnNjaGVkdWxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpPC9jb2RlPjwvYT4gY2FsbC4gSWYgdGhlIGJsb2NraW5nIHdhaXQgaXMKLXVuc2NoZWR1bGVkIGEgcmV0dXJuIHZhbHVlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1VTlNDSEVEVUxFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1VOU0NIRURVTEVEPC9zcGFuPjwvYT4gaXMgcmV0dXJuZWQuPC9wPgotPHA+UGVyaW9kaWMgY2FsbGJhY2tzIHNjaGVkdWxlZCBhc3luYyB3aWxsIGJlIHJlcGVhdGVkbHkgY2FsbGVkIGF1dG9tYXRpY2FsbHkKLXVudGlsIGl0IGlzIHVuc2NoZWR1bGVkLiBUbyBzY2hlZHVsZSBhIHN5bmMgcGVyaW9kaWMgY2FsbGJhY2ssCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtd2FpdCIgdGl0bGU9ImdzdF9jbG9ja19pZF93YWl0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfd2FpdCgpPC9jb2RlPjwvYT4gc2hvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5LjwvcD4KLTxwPlRoZSBhc3luYyBjYWxsYmFja3MgY2FuIGhhcHBlbiBmcm9tIGFueSB0aHJlYWQsIGVpdGhlciBwcm92aWRlZCBieSB0aGUgY29yZQotb3IgZnJvbSBhIHN0cmVhbWluZyB0aHJlYWQuIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoaXMuPC9wPgotPHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB0aGF0IGhhcyBiZWVuIHVuc2NoZWR1bGVkIGNhbm5vdCBiZSB1c2VkIGFnYWluIGZvciBhbnkgd2FpdAotb3BlcmF0aW9uLCBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdGhlIG9sZCB1bnNjaGVkdWxlZCBvbmUKLXNob3VsZCBiZSBkZXN0cm95ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5yZWYiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19pZF91bnJlZigpPC9jb2RlPjwvYT4uPC9wPgotPHA+SXQgaXMgcG9zc2libGUgdG8gcGVyZm9ybSBhIGJsb2NraW5nIHdhaXQgb24gdGhlIHNhbWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gZnJvbQotbXVsdGlwbGUgdGhyZWFkcy4gSG93ZXZlciwgcmVnaXN0ZXJpbmcgdGhlIHNhbWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gZm9yIG11bHRpcGxlCi1hc3luYyBub3RpZmljYXRpb25zIGlzIG5vdCBwb3NzaWJsZSwgdGhlIGNhbGxiYWNrIHdpbGwgb25seSBiZSBjYWxsZWQgZm9yCi10aGUgdGhyZWFkIHJlZ2lzdGVyaW5nIHRoZSBlbnRyeSBsYXN0LjwvcD4KLTxwPk5vbmUgb2YgdGhlIHdhaXQgb3BlcmF0aW9ucyB1bnJlZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4sIHRoZSBvd25lciBpcyByZXNwb25zaWJsZQotZm9yIHVucmVmZmluZyB0aGUgaWRzIGl0c2VsZi4gVGhpcyBob2xkcyBmb3IgYm90aCBwZXJpb2RpYyBhbmQgc2luZ2xlIHNob3QKLW5vdGlmaWNhdGlvbnMuIFRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgb3duZXIgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGhhcyB0bwota2VlcCBhIGhhbmRsZSB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gdW5ibG9jayB0aGUgd2FpdCBvbiBGTFVTSElORyBldmVudHMgb3IKLXN0YXRlIGNoYW5nZXMgYW5kIGlmIHRoZSBlbnRyeSB3b3VsZCBiZSB1bnJlZmZlZCBhdXRvbWF0aWNhbGx5LCB0aGUgaGFuZGxlIAotbWlnaHQgYmVjb21lIGludmFsaWQgd2l0aG91dCBhbnkgbm90aWZpY2F0aW9uLjwvcD4KLTxwPlRoZXNlIGNsb2NrIG9wZXJhdGlvbnMgZG8gbm90IG9wZXJhdGUgb24gdGhlIHJ1bm5pbmcgdGltZSwgc28gdGhlIGNhbGxiYWNrcwotd2lsbCBhbHNvIG9jY3VyIHdoZW4gbm90IGluIFBMQVlJTkcgc3RhdGUgYXMgaWYgdGhlIGNsb2NrIGp1c3Qga2VlcHMgb24KLXJ1bm5pbmcuIFNvbWUgY2xvY2tzIGhvd2V2ZXIgZG8gbm90IHByb2dyZXNzIHdoZW4gdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlZAotdGhlIGNsb2NrIGlzIG5vdCBQTEFZSU5HLjwvcD4KLTxwPldoZW4gYSBjbG9jayBoYXMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUNBTi1TRVQtTUFTVEVSOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUjwvc3Bhbj48L2E+IGZsYWcgc2V0LCBpdCBjYW4gYmUKLXNsYXZlZCB0byBhbm90aGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtbWFzdGVyIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9tYXN0ZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19zZXRfbWFzdGVyKCk8L2NvZGU+PC9hPi4gVGhlIGNsb2NrIHdpbGwKLXRoZW4gYXV0b21hdGljYWxseSBiZSBzeW5jaHJvbml6ZWQgdG8gdGhpcyBtYXN0ZXIgY2xvY2sgYnkgcmVwZWF0ZWRseQotc2FtcGxpbmcgdGhlIG1hc3RlciBjbG9jayBhbmQgdGhlIHNsYXZlIGNsb2NrIGFuZCByZWNhbGlicmF0aW5nIHRoZSBzbGF2ZQotY2xvY2sgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpPC9jb2RlPjwvYT4uIFRoaXMgZmVhdHVyZSBpcyBtb3N0bHkgdXNlZnVsIGZvcgotcGx1Z2lucyB0aGF0IGhhdmUgYW4gaW50ZXJuYWwgY2xvY2sgYnV0IG11c3Qgb3BlcmF0ZSB3aXRoIGFub3RoZXIgY2xvY2sKLXNlbGVjdGVkIGJ5IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi4gIFRoZXkgY2FuIHRyYWNrIHRoZSBvZmZzZXQgYW5kIHJhdGUgZGlmZmVyZW5jZQotb2YgdGhlaXIgaW50ZXJuYWwgY2xvY2sgcmVsYXRpdmUgdG8gdGhlIG1hc3RlciBjbG9jayBieSB1c2luZyB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uKCk8L2NvZGU+PC9hPiBmdW5jdGlvbi4gPC9wPgotPHA+VGhlIG1hc3Rlci9zbGF2ZSBzeW5jaHJvbmlzYXRpb24gY2FuIGJlIHR1bmVkIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS10aW1lb3V0IiB0aXRsZT0iVGhlIOKAnHRpbWVvdXTigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJx0aW1lb3V04oCdPC9zcGFuPjwvYT4sCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0td2luZG93LXNpemUiIHRpdGxlPSJUaGUg4oCcd2luZG93LXNpemXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJx3aW5kb3ctc2l6ZeKAnTwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0td2luZG93LXRocmVzaG9sZCIgdGl0bGU9IlRoZSDigJx3aW5kb3ctdGhyZXNob2xk4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcd2luZG93LXRocmVzaG9sZOKAnTwvc3Bhbj48L2E+IHByb3BlcnRpZXMuCi1UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCcdGltZW91dOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHRpbWVvdXTigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBpbnRlcnZhbCB0byBzYW1wbGUgdGhlIG1hc3RlcgotY2xvY2sgYW5kIHJ1biB0aGUgY2FsaWJyYXRpb24gZnVuY3Rpb25zLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0td2luZG93LXNpemUiIHRpdGxlPSJUaGUg4oCcd2luZG93LXNpemXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJx3aW5kb3ctc2l6ZeKAnTwvc3Bhbj48L2E+IGRlZmluZXMgdGhlCi1udW1iZXIgb2Ygc2FtcGxlcyB0byB1c2Ugd2hlbiBjYWxpYnJhdGluZyBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXdpbmRvdy10aHJlc2hvbGQiIHRpdGxlPSJUaGUg4oCcd2luZG93LXRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHdpbmRvdy10aHJlc2hvbGTigJ08L3NwYW4+PC9hPgotZGVmaW5lcyB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyBiZWZvcmUgdGhlIGNhbGlicmF0aW9uIGlzIHBlcmZvcm1lZC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENsb2NrLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stVElNRS1JUy1WQUxJRDpDQVBTIj48L2E+PGgzPkdTVF9DTE9DS19USU1FX0lTX1ZBTElEKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQodGltZSkgICAoKChHc3RDbG9ja1RpbWUpKHRpbWUpKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotPC9wcmU+Ci08cD5UZXN0cyBpZiBhIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHJlcHJlc2VudHMgYSB2YWxpZCBkZWZpbmVkIHRpbWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNMT0NLLVRJTUUtSVMtVkFMSUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jbG9jayB0aW1lIHRvIHZhbGlkYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stU1RJTUUtSVMtVkFMSUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQodGltZSkgICAoKChHc3RDbG9ja1RpbWVEaWZmKSh0aW1lKSkgIT0gR1NUX0NMT0NLX1NUSU1FX05PTkUpCi08L3ByZT4KLTxwPlRlc3RzIGlmIGEgZ2l2ZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIgdGl0bGU9IkdzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gb2YgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiByZXByZXNlbnRzIGEgdmFsaWQgZGVmaW5lZCB0aW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DTE9DSy1TVElNRS1JUy1WQUxJRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnNpZ25lZCBjbG9jayB0aW1lIHRvIHZhbGlkYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVElNRS1BUy1TRUNPTkRTOkNBUFMiPjwvYT48aDM+R1NUX1RJTUVfQVNfU0VDT05EUygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9USU1FX0FTX1NFQ09ORFModGltZSkgICgodGltZSkgLyBHU1RfU0VDT05EKQotPC9wcmU+Ci08cD5Db252ZXJ0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gc2Vjb25kcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVElNRS1BUy1TRUNPTkRTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1USU1FLUFTLU1TRUNPTkRTOkNBUFMiPjwvYT48aDM+R1NUX1RJTUVfQVNfTVNFQ09ORFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVElNRV9BU19NU0VDT05EUyh0aW1lKSAoKHRpbWUpIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwMDApKQotPC9wcmU+Ci08cD5Db252ZXJ0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gbWlsbGlzZWNvbmRzICgxLzEwMDAgb2YgYSBzZWNvbmQpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1USU1FLUFTLU1TRUNPTkRTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1USU1FLUFTLVVTRUNPTkRTOkNBUFMiPjwvYT48aDM+R1NUX1RJTUVfQVNfVVNFQ09ORFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVElNRV9BU19VU0VDT05EUyh0aW1lKSAoKHRpbWUpIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDApKQotPC9wcmU+Ci08cD5Db252ZXJ0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gbWljcm9zZWNvbmRzICgxLzEwMDAwMDAgb2YgYSBzZWNvbmQpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1USU1FLUFTLVVTRUNPTkRTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1USU1FLUFTLU5TRUNPTkRTOkNBUFMiPjwvYT48aDM+R1NUX1RJTUVfQVNfTlNFQ09ORFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVElNRV9BU19OU0VDT05EUyh0aW1lKSAodGltZSkKLTwvcHJlPgotPHA+Q29udmVydCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRvIG5hbm9zZWNvbmRzICgxLzEwMDAwMDAwMDAgb2YgYSBzZWNvbmQpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1USU1FLUFTLU5TRUNPTkRTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DTE9DSy1ESUZGOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX0RJRkYoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfRElGRihzLCBlKSAgICAgICAgICAgIChHc3RDbG9ja1RpbWVEaWZmKSgoZSkgLSAocykpCi08L3ByZT4KLTxwPkNhbGN1bGF0ZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gY2xvY2sgdGltZXMgYXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPi4KLVRoZSBkaWZmZXJlbmNlIGlzIGNhbGN1bGF0ZWQgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmU8L2NvZGU+PC9lbT4KLSAtIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNMT0NLLURJRkYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmaXJzdCB0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vjb25kIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRJTUVWQUwtVE8tVElNRTpDQVBTIj48L2E+PGgzPkdTVF9USU1FVkFMX1RPX1RJTUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVElNRVZBTF9UT19USU1FKHR2KSAgICAgICAgIChHc3RDbG9ja1RpbWUpKCh0dikudHZfc2VjICogR1NUX1NFQ09ORCArICh0dikudHZfdXNlYyAqIEdTVF9VU0VDT05EKQotPC9wcmU+Ci08cD5Db252ZXJ0IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHVGltZVZhbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdUaW1lVmFsPC9zcGFuPjwvYT4gdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVElNRVZBTC1UTy1USU1FLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50djwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1ldmFsIHRvIGNvbnZlcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1USU1FLVRPLVRJTUVWQUw6Q0FQUyI+PC9hPjxoMz5HU1RfVElNRV9UT19USU1FVkFMKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1RJTUVfVE9fVElNRVZBTCh0LHR2KTwvcHJlPgotPHA+Q29udmVydCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHVGltZVZhbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdUaW1lVmFsPC9zcGFuPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJub3RlIj5vbiAzMi1iaXQgc3lzdGVtcywgYSB0aW1ldmFsIGhhcyBhIHJhbmdlIG9mIG9ubHkgMl4zMiAtIDEgc2Vjb25kcywKLXdoaWNoIGlzIGFib3V0IDY4IHllYXJzLiAgRXhwZWN0IHRyb3VibGUgaWYgeW91IHdhbnQgdG8gc2NoZWR1bGUgc3R1ZmYKLWluIHlvdXIgcGlwZWxpbmUgZm9yIDIwMzguPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVElNRS1UTy1USU1FVkFMLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gY29udmVydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50djwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSB0YXJnZXQgdGltZXZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVElNRVNQRUMtVE8tVElNRTpDQVBTIj48L2E+PGgzPkdTVF9USU1FU1BFQ19UT19USU1FKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RJTUVTUEVDX1RPX1RJTUUodHMpICAgICAgICAoR3N0Q2xvY2tUaW1lKSgodHMpLnR2X3NlYyAqIEdTVF9TRUNPTkQgKyAodHMpLnR2X25zZWMgKiBHU1RfTlNFQ09ORCkKLTwvcHJlPgotPHA+Q29udmVydCBhIHN0cnVjdCB0aW1lc3BlYyAoc2VlIG1hbiBwc2VsZWN0KSB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1USU1FU1BFQy1UTy1USU1FLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1lc3BlYyB0byBjb252ZXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVElNRS1UTy1USU1FU1BFQzpDQVBTIj48L2E+PGgzPkdTVF9USU1FX1RPX1RJTUVTUEVDKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1RJTUVfVE9fVElNRVNQRUModCx0cyk8L3ByZT4KLTxwPkNvbnZlcnQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0byBhIHN0cnVjdCB0aW1lc3BlYyAoc2VlIG1hbiBwc2VsZWN0KTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1USU1FLVRPLVRJTUVTUEVDLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gY29udmVydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSB0YXJnZXQgdGltZXNwZWM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2xvY2tDYWxsYmFjayI+PC9hPjxoMz5Hc3RDbG9ja0NhbGxiYWNrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0Q2xvY2tDYWxsYmFjazxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGUgZnVuY3Rpb24gcHJvdG90eXBlIG9mIHRoZSBjYWxsYmFjay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDbG9ja0NhbGxiYWNrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGNsb2NrIHRoYXQgdHJpZ2dlcmVkIHRoZSBjYWxsYmFjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHRpbWUgaXQgd2FzIHRyaWdnZXJlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB0aGF0IGV4cGlyZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHBhc3NlZCBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMiIHRpdGxlPSJnc3RfY2xvY2tfaWRfd2FpdF9hc3luY8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKTwvY29kZT48L2E+IGZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDbG9ja0NhbGxiYWNrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IChjdXJyZW50bHkgdW51c2VkKTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlk6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfRU5UUlkoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfRU5UUlkoZW50cnkpICAgICAgICAgICgoR3N0Q2xvY2tFbnRyeSAqKShlbnRyeSkpCi08L3ByZT4KLTxwPkNhc3QgdG8gYSBjbG9jayBlbnRyeTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DTE9DSy1FTlRSWS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZW50cnkgdG8gY2FzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLUNMT0NLOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX0VOVFJZX0NMT0NLKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NMT0NLX0VOVFJZX0NMT0NLKGVudHJ5KSAgICAoKGVudHJ5KS0mZ3Q7Y2xvY2spCi08L3ByZT4KLTxwPkdldCB0aGUgb3duZXIgY2xvY2sgb2YgdGhlIGVudHJ5PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLUNMT0NLLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbnRyeSB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLVRZUEU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfRU5UUllfVFlQRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9UWVBFKGVudHJ5KSAgICAgKChlbnRyeSktJmd0O3R5cGUpCi08L3ByZT4KLTxwPkdldCB0aGUgdHlwZSBvZiB0aGUgY2xvY2sgZW50cnk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlktVFlQRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZW50cnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DTE9DSy1FTlRSWS1USU1FOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX0VOVFJZX1RJTUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfVElNRShlbnRyeSkgICAgICgoZW50cnkpLSZndDt0aW1lKQotPC9wcmU+Ci08cD5HZXQgdGhlIHJlcXVlc3RlZCB0aW1lIG9mIHRoaXMgZW50cnk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlktVElNRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZW50cnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DTE9DSy1FTlRSWS1JTlRFUlZBTDpDQVBTIj48L2E+PGgzPkdTVF9DTE9DS19FTlRSWV9JTlRFUlZBTCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9JTlRFUlZBTChlbnRyeSkgKChlbnRyeSktJmd0O2ludGVydmFsKQotPC9wcmU+Ci08cD5HZXQgdGhlIGludGVydmFsIG9mIHRoaXMgcGVyaW9kaWMgZW50cnk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlktSU5URVJWQUwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVudHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVudHJ5IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlktU1RBVFVTOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX0VOVFJZX1NUQVRVUygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DTE9DS19FTlRSWV9TVEFUVVMoZW50cnkpICAgKChlbnRyeSktJmd0O3N0YXR1cykKLTwvcHJlPgotPHA+VGhlIHN0YXR1cyBvZiB0aGUgZW50cnk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stRU5UUlktU1RBVFVTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbnRyeSB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNMT0NLLUZMQUdTOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX0ZMQUdTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NMT0NLX0ZMQUdTKGNsb2NrKSAgR1NUX09CSkVDVF9GTEFHUyhjbG9jaykKLTwvcHJlPgotPHA+R2V0cyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tGbGFncyIgdGl0bGU9ImVudW0gR3N0Q2xvY2tGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrRmxhZ3M8L3NwYW4+PC9hPiBjbG9jayBmbGFncy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stRkxBR1MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNsb2NrIHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stYWRkLW9ic2VydmF0aW9uIj48L2E+PGgzPmdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gc2xhdmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gbWFzdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcl9zcXVhcmVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoZSB0aW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXN0ZXI8L2NvZGU+PC9lbT4KLSBvZiB0aGUgbWFzdGVyIGNsb2NrIGFuZCB0aGUgdGltZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2xhdmU8L2NvZGU+PC9lbT4KLSBvZiB0aGUgc2xhdmUKLWNsb2NrIGFyZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBvYnNlcnZhdGlvbnMuIElmIGVub3VnaCBvYnNlcnZhdGlvbnMKLWFyZSBhdmFpbGFibGUsIGEgbGluZWFyIHJlZ3Jlc3Npb24gYWxnb3JpdGhtIGlzIHJ1biBvbiB0aGUKLW9ic2VydmF0aW9ucyBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+Ci0gaXMgcmVjYWxpYnJhdGVkLjwvcD4KLTxwPklmIHRoaXMgZnVuY3Rpb25zIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cl9zcXVhcmVkPC9jb2RlPjwvZW0+Ci0gd2lsbCBjb250YWluIHRoZSAKLWNvcnJlbGF0aW9uIGNvZWZmaWNpZW50IG9mIHRoZSBpbnRlcnBvbGF0aW9uLiBBIHZhbHVlIG9mIDEuMAotbWVhbnMgYSBwZXJmZWN0IHJlZ3Jlc3Npb24gd2FzIHBlcmZvcm1lZC4gVGhpcyB2YWx1ZSBjYW4KLWJlIHVzZWQgdG8gY29udHJvbCB0aGUgc2FtcGxpbmcgZnJlcXVlbmN5IG9mIHRoZSBtYXN0ZXIgYW5kIHNsYXZlCi1jbG9ja3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWFkZC1vYnNlcnZhdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNsYXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB0aW1lIG9uIHRoZSBzbGF2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXN0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHRpbWUgb24gdGhlIG1hc3RlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yX3NxdWFyZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stYWRkLW9ic2VydmF0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGVub3VnaCBvYnNlcnZhdGlvbnMgd2VyZSBhZGRlZCB0byBydW4gdGhlCi1yZWdyZXNzaW9uIGFsZ29yaXRobS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stYWRkLW9ic2VydmF0aW9uLXVuYXBwbGllZCI+PC9hPjxoMz5nc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbl91bmFwcGxpZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHNsYXZlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBtYXN0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcl9zcXVhcmVkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqaW50ZXJuYWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICpleHRlcm5hbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKnJhdGVfbnVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqcmF0ZV9kZW5vbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGQgYSBjbG9jayBvYnNlcnZhdGlvbiB0byB0aGUgaW50ZXJuYWwgc2xhdmluZyBhbGdvcml0aG0gdGhlIHNhbWUgYXMKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGQtb2JzZXJ2YXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uKCk8L2NvZGU+PC9hPiwgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBtYXN0ZXIgY2xvY2sKLWVzdGltYXRpb24sIHdpdGhvdXQgdXBkYXRpbmcgdGhlIGludGVybmFsIGNhbGlicmF0aW9uLjwvcD4KLTxwPlRoZSBjYWxsZXIgY2FuIHRoZW4gdGFrZSB0aGUgcmVzdWx0cyBhbmQgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpPC9jb2RlPjwvYT4KLXdpdGggdGhlIHZhbHVlcywgb3Igc29tZSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZW0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWFkZC1vYnNlcnZhdGlvbi11bmFwcGxpZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNsYXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB0aW1lIG9uIHRoZSBzbGF2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXN0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHRpbWUgb24gdGhlIG1hc3RlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yX3NxdWFyZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmludGVybmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGludGVybmFsIHRpbWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV4dGVybmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGV4dGVybmFsIHRpbWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJhdGVfbnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIHJhdGUgbnVtZXJhdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yYXRlX2Rlbm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIHJhdGUgZGVub21pbmF0b3IuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1zZXQtbWFzdGVyIj48L2E+PGgzPmdzdF9jbG9ja19zZXRfbWFzdGVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2xvY2tfc2V0X21hc3RlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKm1hc3RlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc3RlcjwvY29kZT48L2VtPgotIGFzIHRoZSBtYXN0ZXIgY2xvY2sgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPgotLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKLWNhbGlicmF0ZWQgc28gdGhhdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19nZXRfdGltZSgpPC9jb2RlPjwvYT4gcmVwb3J0cyB0aGUgc2FtZSB0aW1lIGFzIHRoZQotbWFzdGVyIGNsb2NrLiAgPC9wPgotPHA+QSBjbG9jayBwcm92aWRlciB0aGF0IHNsYXZlcyBpdHMgY2xvY2sgdG8gYSBtYXN0ZXIgY2FuIGdldCB0aGUgY3VycmVudAotY2FsaWJyYXRpb24gdmFsdWVzIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1jYWxpYnJhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24oKTwvY29kZT48L2E+LjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXN0ZXI8L2NvZGU+PC9lbT4KLSBjYW4gYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGluIHdoaWNoIGNhc2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+Ci0gd2lsbCBub3QgYmUgc2xhdmVkIGFueW1vcmUuIEl0IHdpbGwKLWhvd2V2ZXIga2VlcCByZXBvcnRpbmcgaXRzIHRpbWUgYWRqdXN0ZWQgd2l0aCB0aGUgbGFzdCBjb25maWd1cmVkIHJhdGUgCi1hbmQgdGltZSBvZmZzZXRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1zZXQtbWFzdGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWFzdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbWFzdGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLXNldC1tYXN0ZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNsb2NrIGlzIGNhcGFibGUgb2YgYmVpbmcgc2xhdmVkIHRvIGEgbWFzdGVyIGNsb2NrLgotVHJ5aW5nIHRvIHNldCBhIG1hc3RlciBvbiBhIGNsb2NrIHdpdGhvdXQgdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1DQU4tU0VULU1BU1RFUjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVI8L3NwYW4+PC9hPiBmbGFnIHdpbGwgbWFrZSB0aGlzIGZ1bmN0aW9uIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stZ2V0LW1hc3RlciI+PC9hPjxoMz5nc3RfY2xvY2tfZ2V0X21hc3RlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKgotZ3N0X2Nsb2NrX2dldF9tYXN0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBtYXN0ZXIgY2xvY2sgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLSBpcyBzbGF2ZWQgdG8gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhlIGNsb2NrIGlzCi1ub3Qgc2xhdmVkIHRvIGFueSBtYXN0ZXIgY2xvY2suPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWdldC1tYXN0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stZ2V0LW1hc3Rlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbWFzdGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgotd2hlbiB0aGlzIGNsb2NrIGlzIG5vdCBzbGF2ZWQgdG8gYSBtYXN0ZXIgY2xvY2suIFVucmVmIGFmdGVyCi11c2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1zZXQtcmVzb2x1dGlvbiI+PC9hPjxoMz5nc3RfY2xvY2tfc2V0X3Jlc29sdXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHJlc29sdXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBhY2N1cmFjeSBvZiB0aGUgY2xvY2suIFNvbWUgY2xvY2tzIGhhdmUgdGhlIHBvc3NpYmlsaXR5IHRvIG9wZXJhdGUKLXdpdGggZGlmZmVyZW50IGFjY3VyYWN5IGF0IHRoZSBleHBlbnNlIG9mIG1vcmUgcmVzb3VyY2UgdXNhZ2UuIFRoZXJlIGlzCi1ub3JtYWxseSBubyBuZWVkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCByZXNvbHV0aW9uIG9mIGEgY2xvY2suIFRoZSByZXNvbHV0aW9uCi1vZiBhIGNsb2NrIGNhbiBvbmx5IGJlIGNoYW5nZWQgaWYgdGhlIGNsb2NrIGhhcyB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUNBTi1TRVQtUkVTT0xVVElPTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9SRVNPTFVUSU9OPC9zcGFuPjwvYT4gZmxhZyBzZXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLXNldC1yZXNvbHV0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXNvbHV0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHJlc29sdXRpb24gdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stc2V0LXJlc29sdXRpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IHJlc29sdXRpb24gb2YgdGhlIGNsb2NrLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stZ2V0LXJlc29sdXRpb24iPjwvYT48aDM+Z3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBhY2N1cmFjeSBvZiB0aGUgY2xvY2suIFRoZSBhY2N1cmFjeSBvZiB0aGUgY2xvY2sgaXMgdGhlIGdyYW51bGFyaXR5Ci1vZiB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19nZXRfdGltZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2dldF90aW1lKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stZ2V0LXJlc29sdXRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1nZXQtcmVzb2x1dGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBjbG9jayBpbiB1bml0cyBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stZ2V0LXRpbWUiPjwvYT48aDM+Z3N0X2Nsb2NrX2dldF90aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3RfY2xvY2tfZ2V0X3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBnaXZlbiBjbG9jay4gVGhlIHRpbWUgaXMgYWx3YXlzCi1tb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgYW5kIGFkanVzdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudAotb2Zmc2V0IGFuZCByYXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1nZXQtdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWdldC10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHRpbWUgb2YgdGhlIGNsb2NrLiBPciBHU1RfQ0xPQ0tfVElNRV9OT05FIHdoZW4KLWdpdmVuIGludmFsaWQgaW5wdXQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLW5ldy1zaW5nbGUtc2hvdC1pZCI+PC9hPjxoMz5nc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+Ci1nc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLSB0byB0cmlnZ2VyIGEgc2luZ2xlIHNob3QKLW5vdGlmaWNhdGlvbiBhdCB0aGUgcmVxdWVzdGVkIHRpbWUuIFRoZSBzaW5nbGUgc2hvdCBpZCBzaG91bGQgYmUKLXVucmVmZmVkIGFmdGVyIHVzYWdlLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9jbG9ja19pZF91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1uZXctc2luZ2xlLXNob3QtaWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gZ2V0IGEgc2luZ2xlIHNob3Qgbm90aWZpY2F0aW9uIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLW5ldy1zaW5nbGUtc2hvdC1pZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IHRoZQotdGltZSBub3RpZmljYXRpb24uPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLW5ldy1wZXJpb2RpYy1pZCI+PC9hPjxoMz5nc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+Ci1nc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHN0YXJ0X3RpbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gaW50ZXJ2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGFuIElEIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+Ci0gdG8gdHJpZ2dlciBhIHBlcmlvZGljIG5vdGlmaWNhdGlvbi4KLVRoZSBwZXJpb2RpYyBub3RpZmljYXRpb25zIHdpbGwgc3RhcnQgYXQgdGltZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdGltZTwvY29kZT48L2VtPgotIGFuZAotd2lsbCB0aGVuIGJlIGZpcmVkIHdpdGggdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcnZhbDwvY29kZT48L2VtPgotLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4KLSBzaG91bGQgYmUgdW5yZWZmZWQKLWFmdGVyIHVzYWdlLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9jbG9ja19pZF91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1uZXctcGVyaW9kaWMtaWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gZ2V0IGEgcGVyaW9kaWMgbm90aWZpY2F0aW9uIGlkIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnRfdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgc3RhcnQgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgaW50ZXJ2YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1uZXctcGVyaW9kaWMtaWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCB0aGUKLXRpbWUgbm90aWZpY2F0aW9uLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1zaW5nbGUtc2hvdC1pZC1yZWluaXQiPjwvYT48aDM+Z3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlaW5pdGlhbGl6ZXMgdGhlIHByb3ZpZGVkIHNpbmdsZSBzaG90IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPgotIHRvIHRoZSBwcm92aWRlZCB0aW1lLiBEb2VzIG5vdAotbW9kaWZ5IHRoZSByZWZlcmVuY2UgY291bnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLXNpbmdsZS1zaG90LWlkLXJlaW5pdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcmVxdWVzdGVkIHRpbWUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stc2luZ2xlLXNob3QtaWQtcmVpbml0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBHc3RDbG9ja0lEIGNvdWxkIGJlIHJlaW5pdGlhbGl6ZWQgdG8gdGhlIHByb3ZpZGVkCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPgotLCBlbHNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stcGVyaW9kaWMtaWQtcmVpbml0Ij48L2E+PGgzPmdzdF9jbG9ja19wZXJpb2RpY19pZF9yZWluaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19wZXJpb2RpY19pZF9yZWluaXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gc3RhcnRfdGltZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWluaXRpYWxpemVzIHRoZSBwcm92aWRlZCBwZXJpb2RpYyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4KLSB0byB0aGUgcHJvdmlkZWQgc3RhcnQgdGltZSBhbmQKLWludGVydmFsLiBEb2VzIG5vdCBtb2RpZnkgdGhlIHJlZmVyZW5jZSBjb3VudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stcGVyaW9kaWMtaWQtcmVpbml0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnRfdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgc3RhcnQgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgaW50ZXJ2YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1wZXJpb2RpYy1pZC1yZWluaXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIEdzdENsb2NrSUQgY291bGQgYmUgcmVpbml0aWFsaXplZCB0byB0aGUgcHJvdmlkZWQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+Ci0sIGVsc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1nZXQtaW50ZXJuYWwtdGltZSI+PC9hPjxoMz5nc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBjdXJyZW50IGludGVybmFsIHRpbWUgb2YgdGhlIGdpdmVuIGNsb2NrLiBUaGUgdGltZSBpcyByZXR1cm5lZAotdW5hZGp1c3RlZCBmb3IgdGhlIG9mZnNldCBhbmQgdGhlIHJhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWdldC1pbnRlcm5hbC10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stZ2V0LWludGVybmFsLXRpbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgaW50ZXJuYWwgdGltZSBvZiB0aGUgY2xvY2suIE9yIEdTVF9DTE9DS19USU1FX05PTkUgd2hlbgotZ2l2ZW4gaW52YWxpZCBpbnB1dC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stYWRqdXN0LXVubG9ja2VkIj48L2E+PGgzPmdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gaW50ZXJuYWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29udmVydHMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm5hbDwvY29kZT48L2VtPgotIGNsb2NrIHRpbWUgdG8gdGhlIGV4dGVybmFsIHRpbWUsIGFkanVzdGluZyBmb3IgdGhlCi1yYXRlIGFuZCByZWZlcmVuY2UgdGltZSBzZXQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpPC9jb2RlPjwvYT4gYW5kIG1ha2luZyBzdXJlCi10aGF0IHRoZSByZXR1cm5lZCB0aW1lIGlzIGluY3JlYXNpbmcuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZQotY2xvY2sncyBPQkpFQ1RfTE9DSyBoZWxkIGFuZCBpcyBtYWlubHkgdXNlZCBieSBjbG9jayBzdWJjbGFzc2VzLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXVuYWRqdXN0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1hZGp1c3QtdW5sb2NrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcm5hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgY2xvY2sgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWFkanVzdC11bmxvY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBjb252ZXJ0ZWQgdGltZSBvZiB0aGUgY2xvY2suPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZCI+PC9hPjxoMz5nc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGV4dGVybmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnRzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZXJuYWw8L2NvZGU+PC9lbT4KLSBjbG9jayB0aW1lIHRvIHRoZSBpbnRlcm5hbCB0aW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPgotLAotdXNpbmcgdGhlIHJhdGUgYW5kIHJlZmVyZW5jZSB0aW1lIHNldCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKCk8L2NvZGU+PC9hPi4KLVRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBjbG9jaydzIE9CSkVDVF9MT0NLIGhlbGQgYW5kCi1pcyBtYWlubHkgdXNlZCBieSBjbG9jayBzdWJjbGFzc2VzLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkanVzdC11bmxvY2tlZCIgdGl0bGU9ImdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV4dGVybmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gZXh0ZXJuYWwgY2xvY2sgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLXVuYWRqdXN0LXVubG9ja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGludGVybmFsIHRpbWUgb2YgdGhlIGNsb2NrIGNvcnJlc3BvbmRpbmcgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVybmFsPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1hZGp1c3Qtd2l0aC1jYWxpYnJhdGlvbiI+PC9hPjxoMz5nc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGludGVybmFsX3RhcmdldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGNpbnRlcm5hbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGNleHRlcm5hbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGNudW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBjZGVub208L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29udmVydHMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm5hbF90YXJnZXQ8L2NvZGU+PC9lbT4KLSBjbG9jayB0aW1lIHRvIHRoZSBleHRlcm5hbCB0aW1lLAotdXNpbmcgdGhlIHBhc3NlZCBjYWxpYnJhdGlvbiBwYXJhbWV0ZXJzLiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZQotc2FtZSBjYWxjdWxhdGlvbiBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stYWRqdXN0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCgpPC9jb2RlPjwvYT4gd2hlbiBjYWxsZWQgdXNpbmcgdGhlCi1jdXJyZW50IGNhbGlicmF0aW9uIHBhcmFtZXRlcnMsIGJ1dCBkb2Vzbid0IGVuc3VyZSBhIG1vbm90b25pY2FsbHkKLWluY3JlYXNpbmcgcmVzdWx0IGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGp1c3QtdW5sb2NrZWQiIHRpdGxlPSJnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkKCk8L2NvZGU+PC9hPiBkb2VzLjwvcD4KLTxwPk5vdGU6IFRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLSBwYXJhbWV0ZXIgaXMgdW51c2VkIGFuZCBjYW4gYmUgTlVMTDwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1hZGp1c3Qtd2l0aC1jYWxpYnJhdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRvIHVzZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW50ZXJuYWxfdGFyZ2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBjbG9jayB0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNpbnRlcm5hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcmVmZXJlbmNlIGludGVybmFsIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2V4dGVybmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSByZWZlcmVuY2UgZXh0ZXJuYWwgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWVyYXRvciBvZiB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sgcmVsYXRpdmUgdG8gaXRzCi1pbnRlcm5hbCB0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNkZW5vbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZW5vbWluYXRvciBvZiB0aGUgcmF0ZSBvZiB0aGUgY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1hZGp1c3Qtd2l0aC1jYWxpYnJhdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBjb252ZXJ0ZWQgdGltZSBvZiB0aGUgY2xvY2suPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay11bmFkanVzdC13aXRoLWNhbGlicmF0aW9uIj48L2E+PGgzPmdzdF9jbG9ja191bmFkanVzdF93aXRoX2NhbGlicmF0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3RfY2xvY2tfdW5hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gZXh0ZXJuYWxfdGFyZ2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBjaW50ZXJuYWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGNleHRlcm5hbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gY251bTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gY2Rlbm9tPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnRzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZXJuYWxfdGFyZ2V0PC9jb2RlPjwvZW0+Ci0gY2xvY2sgdGltZSB0byB0aGUgaW50ZXJuYWwgdGltZSwKLXVzaW5nIHRoZSBwYXNzZWQgY2FsaWJyYXRpb24gcGFyYW1ldGVycy4gVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUKLXNhbWUgY2FsY3VsYXRpb24gYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXVuYWRqdXN0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWQoKTwvY29kZT48L2E+IHdoZW4gY2FsbGVkIHVzaW5nIHRoZQotY3VycmVudCBjYWxpYnJhdGlvbiBwYXJhbWV0ZXJzLjwvcD4KLTxwPk5vdGU6IFRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLSBwYXJhbWV0ZXIgaXMgdW51c2VkIGFuZCBjYW4gYmUgTlVMTDwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay11bmFkanVzdC13aXRoLWNhbGlicmF0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdG8gdXNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5leHRlcm5hbF90YXJnZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGNsb2NrIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2ludGVybmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSByZWZlcmVuY2UgaW50ZXJuYWwgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jZXh0ZXJuYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHJlZmVyZW5jZSBleHRlcm5hbCB0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNudW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtZXJhdG9yIG9mIHRoZSByYXRlIG9mIHRoZSBjbG9jayByZWxhdGl2ZSB0byBpdHMKLWludGVybmFsIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2Rlbm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRlbm9taW5hdG9yIG9mIHRoZSByYXRlIG9mIHRoZSBjbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLXVuYWRqdXN0LXdpdGgtY2FsaWJyYXRpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY29udmVydGVkIHRpbWUgb2YgdGhlIGNsb2NrLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDQuaHRtbCNhcGktaW5kZXgtMS44Ij4xLjg8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stZ2V0LWNhbGlicmF0aW9uIj48L2E+PGgzPmdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICppbnRlcm5hbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqZXh0ZXJuYWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKnJhdGVfbnVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+ICpyYXRlX2Rlbm9tPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGludGVybmFsIHJhdGUgYW5kIHJlZmVyZW5jZSB0aW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPgotLiBTZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKCk8L2NvZGU+PC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJuYWw8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVybmFsPC9jb2RlPjwvZW0+Ci0sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlX251bTwvY29kZT48L2VtPgotLCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGVfZGVub208L2NvZGU+PC9lbT4KLSBjYW4gYmUgbGVmdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlCi1jYWxsZXIgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlcy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1nZXQtY2FsaWJyYXRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcm5hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBpbnRlcm5hbCB0aW1lLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5leHRlcm5hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBleHRlcm5hbCB0aW1lLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yYXRlX251bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSByYXRlIG51bWVyYXRvci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZV9kZW5vbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSByYXRlIGRlbm9taW5hdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIj48L2E+PGgzPmdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGludGVybmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGV4dGVybmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHJhdGVfbnVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHJhdGVfZGVub208L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRqdXN0cyB0aGUgcmF0ZSBhbmQgdGltZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLS4gQSByYXRlIG9mIDEvMSBpcyB0aGUgbm9ybWFsIHNwZWVkIG9mCi10aGUgY2xvY2suIFZhbHVlcyBiaWdnZXIgdGhhbiAxLzEgbWFrZSB0aGUgY2xvY2sgZ28gZmFzdGVyLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcm5hbDwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZXJuYWw8L2NvZGU+PC9lbT4KLSBhcmUgY2FsaWJyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFycmFuZ2UgdGhhdAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF90aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfZ2V0X3RpbWUoKTwvY29kZT48L2E+IHNob3VsZCBoYXZlIGJlZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVybmFsPC9jb2RlPjwvZW0+Ci0gYXQgaW50ZXJuYWwgdGltZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJuYWw8L2NvZGU+PC9lbT4KLS4KLVRoaXMgaW50ZXJuYWwgdGltZSBzaG91bGQgbm90IGJlIGluIHRoZSBmdXR1cmU7IHRoYXQgaXMsIGl0IHNob3VsZCBiZSBsZXNzCi10aGFuIHRoZSB2YWx1ZSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LWludGVybmFsLXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSgpPC9jb2RlPjwvYT4gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC48L3A+Ci08cD5TdWJzZXF1ZW50IGNhbGxzIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSIgdGl0bGU9ImdzdF9jbG9ja19nZXRfdGltZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2dldF90aW1lKCk8L2NvZGU+PC9hPiB3aWxsIHJldHVybiBjbG9jayB0aW1lcyBjb21wdXRlZCBhcwotZm9sbG93czo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0gIHRpbWUgPSAoaW50ZXJuYWxfdGltZSAtIGludGVybmFsKSAqIHJhdGVfbnVtIC8gcmF0ZV9kZW5vbSArIGV4dGVybmFsCi08L3ByZT4KLTxwPlRoaXMgZm9ybXVsYSBpcyBpbXBsZW1lbnRlZCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stYWRqdXN0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCgpPC9jb2RlPjwvYT4uIE9mIGNvdXJzZSwgaXQKLXRyaWVzIHRvIGRvIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgcHJlY2lzZWx5IGFzIHBvc3NpYmxlLjwvcD4KLTxwPk5vdGUgdGhhdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19nZXRfdGltZSgpPC9jb2RlPjwvYT4gYWx3YXlzIHJldHVybnMgaW5jcmVhc2luZyB2YWx1ZXMgc28gd2hlbiB5b3UKLW1vdmUgdGhlIGNsb2NrIGJhY2t3YXJkcywgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF90aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfZ2V0X3RpbWUoKTwvY29kZT48L2E+IHdpbGwgcmVwb3J0IHRoZSBwcmV2aW91cyB2YWx1ZQotdW50aWwgdGhlIGNsb2NrIGNhdGNoZXMgdXAuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiB0byBjYWxpYnJhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW50ZXJuYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHJlZmVyZW5jZSBpbnRlcm5hbCB0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV4dGVybmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSByZWZlcmVuY2UgZXh0ZXJuYWwgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yYXRlX251bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1lcmF0b3Igb2YgdGhlIHJhdGUgb2YgdGhlIGNsb2NrIHJlbGF0aXZlIHRvIGl0cwotaW50ZXJuYWwgdGltZSA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZV9kZW5vbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZW5vbWluYXRvciBvZiB0aGUgcmF0ZSBvZiB0aGUgY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWdldC10aW1lb3V0Ij48L2E+PGgzPmdzdF9jbG9ja19nZXRfdGltZW91dMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotZ3N0X2Nsb2NrX2dldF90aW1lb3V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgYW1vdW50IG9mIHRpbWUgdGhhdCBtYXN0ZXIgYW5kIHNsYXZlIGNsb2NrcyBhcmUgc2FtcGxlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2stZ2V0LXRpbWVvdXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1nZXQtdGltZW91dC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHNhbXBsZXMuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1zZXQtdGltZW91dCI+PC9hPjxoMz5nc3RfY2xvY2tfc2V0X3RpbWVvdXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2xvY2tfc2V0X3RpbWVvdXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lb3V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG5hbm9zZWNvbmRzLCB0byBzYW1wbGUgbWFzdGVyIGFuZCBzbGF2ZQotY2xvY2tzPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLXNldC10aW1lb3V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB0aW1lb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay13YWl0LWZvci1zeW5jIj48L2E+PGgzPmdzdF9jbG9ja193YWl0X2Zvcl9zeW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY2xvY2tfd2FpdF9mb3Jfc3luYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZW91dDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5XYWl0cyB1bnRpbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLSBpcyBzeW5jZWQgZm9yIHJlcG9ydGluZyB0aGUgY3VycmVudCB0aW1lLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPgotCi1pcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvY29kZT48L2E+IGl0IHdpbGwgd2FpdCBmb3JldmVyLCBvdGhlcndpc2UgaXQgd2lsbCB0aW1lIG91dAotYWZ0ZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVvdXQ8L2NvZGU+PC9lbT4KLSBuYW5vc2Vjb25kcy48L3A+Ci08cD5Gb3IgYXN5bmNocm9ub3VzIHdhaXRpbmcsIHRoZSBHc3RDbG9jazo6c3luY2VkIHNpZ25hbCBjYW4gYmUgdXNlZC48L3A+Ci08cD5UaGlzIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBUUlVFIGlmIEdTVF9DTE9DS19GTEFHX05FRURTX1NUQVJUVVBfU1lOQwotaXMgbm90IHNldCBvbiB0aGUgY2xvY2ssIG9yIGlmIHRoZSBjbG9jayBpcyBhbHJlYWR5IHN5bmNlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2std2FpdC1mb3Itc3luYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR3N0Q2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZW91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRpbWVvdXQgZm9yIHdhaXRpbmcgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19USU1FX05PTkU8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLXdhaXQtZm9yLXN5bmMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgd2FpdGluZyB3YXMgc3VjY2Vzc2Z1bCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb24gdGltZW91dDwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2staXMtc3luY2VkIj48L2E+PGgzPmdzdF9jbG9ja19pc19zeW5jZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19pc19zeW5jZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiAqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBjbG9jayBpcyBjdXJyZW50bHkgc3luY2VkLjwvcD4KLTxwPlRoaXMgcmV0dXJucyBpZiBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMgaXMgbm90IHNldCBvbiB0aGUgY2xvY2suPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlzLXN5bmNlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdzdENsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlzLXN5bmNlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY2xvY2sgaXMgY3VycmVudGx5IHN5bmNlZDwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2stc2V0LXN5bmNlZCI+PC9hPjxoMz5nc3RfY2xvY2tfc2V0X3N5bmNlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jbG9ja19zZXRfc3luY2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBzeW5jZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLSB0byBzeW5jZWQgYW5kIGVtaXRzIHRoZSBHc3RDbG9jazo6c3luY2VkIHNpZ25hbCwgYW5kIHdha2VzIHVwIGFueQotdGhyZWFkIHdhaXRpbmcgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXdhaXQtZm9yLXN5bmMiIHRpdGxlPSJnc3RfY2xvY2tfd2FpdF9mb3Jfc3luY8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX3dhaXRfZm9yX3N5bmMoKTwvY29kZT48L2E+LjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCBpZiBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMKLWlzIHNldCBvbiB0aGUgY2xvY2ssIGFuZCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgc3ViY2xhc3NlcyBvbmx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1zZXQtc3luY2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHc3RDbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zeW5jZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pZiB0aGUgY2xvY2sgaXMgc3luY2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1pZC1nZXQtdGltZSI+PC9hPjxoMz5nc3RfY2xvY2tfaWRfZ2V0X3RpbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19pZF9nZXRfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdGltZSBvZiB0aGUgY2xvY2sgSUQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2staWQtZ2V0LXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlkLWdldC10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHRpbWUgb2YgdGhlIGdpdmVuIGNsb2NrIGlkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1pZC13YWl0Ij48L2E+PGgzPmdzdF9jbG9ja19pZF93YWl0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdENsb2NrUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrUmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19pZF93YWl0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiIHRpdGxlPSJHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+ICpqaXR0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGVyZm9ybSBhIGJsb2NraW5nIHdhaXQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+Ci0uIAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLW5ldy1zaW5nbGUtc2hvdC1pZCIgdGl0bGU9ImdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQoKTwvY29kZT48L2E+Ci1vciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stbmV3LXBlcmlvZGljLWlkIiB0aXRsZT0iZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCgpPC9jb2RlPjwvYT4gYW5kIHNob3VsZCBub3QgaGF2ZSBiZWVuIHVuc2NoZWR1bGVkCi13aXRoIGEgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5zY2hlZHVsZSIgdGl0bGU9ImdzdF9jbG9ja19pZF91bnNjaGVkdWxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpPC9jb2RlPjwvYT4uIDwvcD4KLTxwPklmIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aml0dGVyPC9jb2RlPjwvZW0+Ci0gYXJndW1lbnQgaXMgbm90IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBhbmQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX09LPC9zcGFuPjwvYT4KLW9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FQVJMWTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX0VBUkxZPC9zcGFuPjwvYT4sIGl0IHdpbGwgY29udGFpbiB0aGUgZGlmZmVyZW5jZQotYWdhaW5zdCB0aGUgY2xvY2sgYW5kIHRoZSB0aW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPgotIHdoZW4gdGhpcyBtZXRob2Qgd2FzCi1jYWxsZWQuIAotUG9zaXRpdmUgdmFsdWVzIGluZGljYXRlIGhvdyBsYXRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPgotIHdhcyByZWxhdGl2ZSB0byB0aGUgY2xvY2sKLShpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVBUkxZOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfRUFSTFk8L3NwYW4+PC9hPikuIAotTmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGhvdyBtdWNoIHRpbWUgd2FzIHNwZW50IHdhaXRpbmcgb24gdGhlIGNsb2NrIAotYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlkLXdhaXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gd2FpdCBvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5qaXR0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBqaXR0ZXIsCi1jYW4gYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlkLXdhaXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcmVzdWx0IG9mIHRoZSBibG9ja2luZyB3YWl0LiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRUFSTFk6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19FQVJMWTwvc3Bhbj48L2E+IHdpbGwgYmUgcmV0dXJuZWQKLWlmIHRoZSBjdXJyZW50IGNsb2NrIHRpbWUgaXMgcGFzdCB0aGUgdGltZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4KLSwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfT0s8L3NwYW4+PC9hPiBpZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+Ci13YXMgc2NoZWR1bGVkIGluIHRpbWUuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1VTlNDSEVEVUxFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NMT0NLX1VOU0NIRURVTEVEPC9zcGFuPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+Ci13YXMKLXVuc2NoZWR1bGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVuc2NoZWR1bGUiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUoKTwvY29kZT48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1pZC13YWl0LWFzeW5jIj48L2E+PGgzPmdzdF9jbG9ja19pZF93YWl0X2FzeW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdENsb2NrUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrUmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19pZF93YWl0X2FzeW5jICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrQ2FsbGJhY2siIHRpdGxlPSJHc3RDbG9ja0NhbGxiYWNrwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrQ2FsbGJhY2s8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IGRlc3Ryb3lfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWdpc3RlciBhIGNhbGxiYWNrIG9uIHRoZSBnaXZlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4KLSB3aXRoIHRoZSBnaXZlbgotZnVuY3Rpb24gYW5kIHVzZXJfZGF0YS4gV2hlbiBwYXNzaW5nIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gd2l0aCBhbiBpbnZhbGlkCi10aW1lIHRvIHRoaXMgZnVuY3Rpb24sIHRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseQotd2l0aCAgYSB0aW1lIHNldCB0byBHU1RfQ0xPQ0tfVElNRV9OT05FLiBUaGUgY2FsbGJhY2sgd2lsbAotYmUgY2FsbGVkIHdoZW4gdGhlIHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+Ci0gaGFzIGJlZW4gcmVhY2hlZC48L3A+Ci08cD5UaGUgY2FsbGJhY2sgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLSBjYW4gYmUgaW52b2tlZCBmcm9tIGFueSB0aHJlYWQsIGVpdGhlciBwcm92aWRlZCBieSB0aGUKLWNvcmUgb3IgZnJvbSBhIHN0cmVhbWluZyB0aHJlYWQuIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoaXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHRvIHdhaXQgb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBjYWxsYmFjayBmdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Vc2VyIGRhdGEgcGFzc2VkIGluIHRoZSBjYWxsYmFjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0cm95X2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBmb3IgdXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2staWQtd2FpdC1hc3luYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSByZXN1bHQgb2YgdGhlIG5vbiBibG9ja2luZyB3YWl0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1pZC11bnNjaGVkdWxlIj48L2E+PGgzPmdzdF9jbG9ja19pZF91bnNjaGVkdWxlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DYW5jZWwgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPgotLiBUaGlzIGNhbiBlaXRoZXIKLWJlIGFuIG91dHN0YW5kaW5nIGFzeW5jIG5vdGlmaWNhdGlvbiBvciBhIHBlbmRpbmcgc3luYyBub3RpZmljYXRpb24uCi1BZnRlciB0aGlzIGNhbGwsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPgotIGNhbm5vdCBiZSB1c2VkIGFueW1vcmUgdG8gcmVjZWl2ZSBzeW5jIG9yCi1hc3luYyBub3RpZmljYXRpb25zLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2staWQtdW5zY2hlZHVsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgaWQgdG8gdW5zY2hlZHVsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlkLWNvbXBhcmUtZnVuYyI+PC9hPjxoMz5nc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBpZDE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY29uc3Rwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NvbnN0cG9pbnRlcjwvc3Bhbj48L2E+IGlkMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db21wYXJlcyB0aGUgdHdvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IGluc3RhbmNlcy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZAotYXMgYSBHQ29tcGFyZUZ1bmMgd2hlbiBzb3J0aW5nIGlkcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2xvY2staWQtY29tcGFyZS1mdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB0byBjb21wYXJlIHdpdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1pZC1jb21wYXJlLWZ1bmMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBuZWdhdGl2ZSB2YWx1ZSBpZiBhICZsdDsgYjsgemVybyBpZiBhID0gYjsgcG9zaXRpdmUgdmFsdWUgaWYgYSAmZ3Q7IGI8L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2xvY2staWQtcmVmIj48L2E+PGgzPmdzdF9jbG9ja19pZF9yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4KLWdzdF9jbG9ja19pZF9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JbmNyZWFzZSB0aGUgcmVmY291bnQgb2YgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlkLXJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gcmVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNsb2NrLWlkLXJlZi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBzYW1lIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHdpdGggaW5jcmVhc2VkIHJlZmNvdW50LjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1pZC11bnJlZiI+PC9hPjxoMz5nc3RfY2xvY2tfaWRfdW5yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2xvY2tfaWRfdW5yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIiB0aXRsZT0iR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5VbnJlZiBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4KLS4gV2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gd2lsbCBiZSBmcmVlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jbG9jay1pZC11bnJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrSUQiIHRpdGxlPSJHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHRvIHVucmVmLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2xvY2sub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENsb2NrLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q2xvY2s8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDbG9jazs8L3ByZT4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGJhc2Ugc3RydWN0dXJlLiBUaGUgdmFsdWVzIG9mIHRoaXMgc3RydWN0dXJlIGFyZQotcHJvdGVjdGVkIGZvciBzdWJjbGFzc2VzLCB1c2UgdGhlIG1ldGhvZHMgdG8gdXNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENsb2NrQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdENsb2NrQ2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDbG9ja0NsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICAgICAgIHBhcmVudF9jbGFzczsKLQotICAvKiB2dGFibGUgKi8KLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgICgqY2hhbmdlX3Jlc29sdXRpb24pICAgIChHc3RDbG9jayAqY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIG9sZF9yZXNvbHV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSBuZXdfcmVzb2x1dGlvbik7Ci0gIEdzdENsb2NrVGltZSAgICAgICAgICAoKmdldF9yZXNvbHV0aW9uKSAgICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKLQotICBHc3RDbG9ja1RpbWUgICAgICAgICAgKCpnZXRfaW50ZXJuYWxfdGltZSkgICAgKEdzdENsb2NrICpjbG9jayk7Ci0KLSAgLyogd2FpdGluZyBvbiBhbiBJRCAqLwotICBHc3RDbG9ja1JldHVybiAgICAgICAgKCp3YWl0KSAgICAgICAgICAgICAgICAgKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tFbnRyeSAqZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiAqaml0dGVyKTsKLSAgR3N0Q2xvY2tSZXR1cm4gICAgICAgICgqd2FpdF9hc3luYykgICAgICAgICAgIChHc3RDbG9jayAqY2xvY2ssIEdzdENsb2NrRW50cnkgKmVudHJ5KTsKLSAgdm9pZCAgICAgICAgICAgICAgICAgICgqdW5zY2hlZHVsZSkgICAgICAgICAgIChHc3RDbG9jayAqY2xvY2ssIEdzdENsb2NrRW50cnkgKmVudHJ5KTsKLX07Ci08L3ByZT4KLTxwPkdTdHJlYW1lciBjbG9jayBjbGFzcy4gT3ZlcnJpZGUgdGhlIHZtZXRob2RzIHRvIGltcGxlbWVudCB0aGUgY2xvY2sKLWZ1bmN0aW9uYWxpdHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2xvY2tDbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q2xvY2tDbGFzcy5jaGFuZ2UtcmVzb2x1dGlvbiI+PC9hPmNoYW5nZV9yZXNvbHV0aW9uPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5jaGFuZ2UgdGhlIHJlc29sdXRpb24gb2YgdGhlIGNsb2NrLiBOb3QgYWxsIHZhbHVlcyBtaWdodAotYmUgYWNjZXB0YWJsZS4gVGhlIG5ldyByZXNvbHV0aW9uIHNob3VsZCBiZSByZXR1cm5lZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDbG9ja0NsYXNzLmdldC1yZXNvbHV0aW9uIj48L2E+Z2V0X3Jlc29sdXRpb248L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmdldCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2suPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q2xvY2tDbGFzcy5nZXQtaW50ZXJuYWwtdGltZSI+PC9hPmdldF9pbnRlcm5hbF90aW1lPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5nZXQgdGhlIGludGVybmFsIHVuYWRqdXN0ZWQgdGltZSBvZiB0aGUgY2xvY2suCi1pbXBsZW1lbnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndhaXRfaml0dGVyPC9jb2RlPjwvZW0+Ci1pbnN0ZWFkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENsb2NrQ2xhc3Mud2FpdCI+PC9hPndhaXQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnBlcmZvcm0gYSBibG9ja2luZyB3YWl0IG9uIHRoZSBnaXZlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0VudHJ5IiB0aXRsZT0ic3RydWN0IEdzdENsb2NrRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0VudHJ5PC9zcGFuPjwvYT4gYW5kIHJldHVybgotdGhlIGppdHRlci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDbG9ja0NsYXNzLndhaXQtYXN5bmMiPjwvYT53YWl0X2FzeW5jPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5wZXJmb3JtIGFuIGFzeW5jaHJvbm91cyB3YWl0IGZvciB0aGUgZ2l2ZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tFbnRyeSIgdGl0bGU9InN0cnVjdCBHc3RDbG9ja0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tFbnRyeTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENsb2NrQ2xhc3MudW5zY2hlZHVsZSI+PC9hPnVuc2NoZWR1bGU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnVuYmxvY2sgYSBibG9ja2luZyBvciBhc3luYyB3YWl0IG9wZXJhdGlvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENsb2NrVGltZSI+PC9hPjxoMz5Hc3RDbG9ja1RpbWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZ3VpbnQ2NCBHc3RDbG9ja1RpbWU7Ci08L3ByZT4KLTxwPkEgZGF0YXR5cGUgdG8gaG9sZCBhIHRpbWUsIG1lYXN1cmVkIGluIG5hbm9zZWNvbmRzLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PC9hPjxoMz5Hc3RDbG9ja1RpbWVEaWZmPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGdpbnQ2NCBHc3RDbG9ja1RpbWVEaWZmOwotPC9wcmU+Ci08cD5BIGRhdGF0eXBlIHRvIGhvbGQgYSB0aW1lIGRpZmZlcmVuY2UsIG1lYXN1cmVkIGluIG5hbm9zZWNvbmRzLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2xvY2tJRCI+PC9hPjxoMz5Hc3RDbG9ja0lEPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIGdwb2ludGVyIEdzdENsb2NrSUQ7Ci08L3ByZT4KLTxwPkEgZGF0YXR5cGUgdG8gaG9sZCB0aGUgaGFuZGxlIHRvIGFuIG91dHN0YW5kaW5nIHN5bmMgb3IgYXN5bmMgY2xvY2sgY2FsbGJhY2suPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiPjwvYT48aDM+R1NUX0NMT0NLX1RJTUVfTk9ORTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfVElNRV9OT05FICAgICAgICAgICAgICgoR3N0Q2xvY2tUaW1lKSAtMSkKLTwvcHJlPgotPHA+Q29uc3RhbnQgdG8gZGVmaW5lIGFuIHVuZGVmaW5lZCBjbG9jayB0aW1lLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNMT0NLLVNUSU1FLU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0xPQ0tfU1RJTUVfTk9ORTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSAgICAgICAgICAgICBHX01JTklOVDY0Ci08L3ByZT4KLTxwPkNvbnN0YW50IHRvIGRlZmluZSBhbiB1bmRlZmluZWQgY2xvY2sgdGltZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TRUNPTkQ6Q0FQUyI+PC9hPjxoMz5HU1RfU0VDT05EPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TRUNPTkQgIChHX1VTRUNfUEVSX1NFQyAqIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwKSkKLTwvcHJlPgotPHA+Q29uc3RhbnQgdGhhdCBkZWZpbmVzIG9uZSBHU3RyZWFtZXIgc2Vjb25kLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1TRUNPTkQ6Q0FQUyI+PC9hPjxoMz5HU1RfTVNFQ09ORDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTVNFQ09ORCAoR1NUX1NFQ09ORCAvIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwKSkKLTwvcHJlPgotPHA+Q29uc3RhbnQgdGhhdCBkZWZpbmVzIG9uZSBHU3RyZWFtZXIgbWlsbGlzZWNvbmQuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVVNFQ09ORDpDQVBTIj48L2E+PGgzPkdTVF9VU0VDT05EPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9VU0VDT05EIChHU1RfU0VDT05EIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwMDApKQotPC9wcmU+Ci08cD5Db25zdGFudCB0aGF0IGRlZmluZXMgb25lIEdTdHJlYW1lciBtaWNyb3NlY29uZC48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1OU0VDT05EOkNBUFMiPjwvYT48aDM+R1NUX05TRUNPTkQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX05TRUNPTkQgKEdTVF9TRUNPTkQgLyBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMDAwMDAwMCkpCi08L3ByZT4KLTxwPkNvbnN0YW50IHRoYXQgZGVmaW5lcyBvbmUgR1N0cmVhbWVyIG5hbm9zZWNvbmQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENsb2NrRW50cnkiPjwvYT48aDM+c3RydWN0IEdzdENsb2NrRW50cnk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDbG9ja0VudHJ5IHsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIHJlZmNvdW50OwotfTsKLTwvcHJlPgotPHA+QWxsIHBlbmRpbmcgdGltZW91dHMgb3IgcGVyaW9kaWMgbm90aWZpZXMgYXJlIGNvbnZlcnRlZCBpbnRvCi1hbiBlbnRyeS4KLU5vdGUgdGhhdCBHc3RDbG9ja0VudHJ5IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIG9wYXF1ZSBzdHJ1Y3R1cmUuIEl0IG11c3QKLW5vdCBiZSBleHRlbmRlZCBvciBhbGxvY2F0ZWQgdXNpbmcgYSBjdXN0b20gYWxsb2NhdG9yLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENsb2NrRW50cnkubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENsb2NrRW50cnkucmVmY291bnQiPjwvYT5yZWZjb3VudDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+cmVmZXJlbmNlIGNvdW50ZXIgKHJlYWQtb25seSk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDbG9ja0VudHJ5VHlwZSI+PC9hPjxoMz5lbnVtIEdzdENsb2NrRW50cnlUeXBlPC9oMz4KLTxwPlRoZSB0eXBlIG9mIHRoZSBjbG9jayBlbnRyeTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENsb2NrRW50cnlUeXBlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLVNJTkdMRTpDQVBTIj48L2E+R1NUX0NMT0NLX0VOVFJZX1NJTkdMRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIHNpbmdsZSBzaG90IHRpbWVvdXQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUVOVFJZLVBFUklPRElDOkNBUFMiPjwvYT5HU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YSBwZXJpb2RpYyB0aW1lb3V0IHJlcXVlc3Q8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENsb2NrUmV0dXJuIj48L2E+PGgzPmVudW0gR3N0Q2xvY2tSZXR1cm48L2gzPgotPHA+VGhlIHJldHVybiB2YWx1ZSBvZiBhIGNsb2NrIG9wZXJhdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDbG9ja1JldHVybi5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1PSzpDQVBTIj48L2E+R1NUX0NMT0NLX09LPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ0xPQ0stRUFSTFk6Q0FQUyI+PC9hPkdTVF9DTE9DS19FQVJMWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgb3BlcmF0aW9uIHdhcyBzY2hlZHVsZWQgdG9vIGxhdGUuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1VTlNDSEVEVUxFRDpDQVBTIj48L2E+R1NUX0NMT0NLX1VOU0NIRURVTEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBjbG9ja0lEIHdhcyB1bnNjaGVkdWxlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ0xPQ0stQlVTWTpDQVBTIj48L2E+R1NUX0NMT0NLX0JVU1k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIENsb2NrSUQgaXMgYnVzeTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ0xPQ0stQkFEVElNRTpDQVBTIj48L2E+R1NUX0NMT0NLX0JBRFRJTUU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSBiYWQgdGltZSB3YXMgcHJvdmlkZWQgdG8gYSBmdW5jdGlvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUVSUk9SOkNBUFMiPjwvYT5HU1RfQ0xPQ0tfRVJST1I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QW4gZXJyb3Igb2NjdXJyZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLVVOU1VQUE9SVEVEOkNBUFMiPjwvYT5HU1RfQ0xPQ0tfVU5TVVBQT1JURUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+T3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLURPTkU6Q0FQUyI+PC9hPkdTVF9DTE9DS19ET05FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBDbG9ja0lEIGlzIGRvbmUgd2FpdGluZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2xvY2tGbGFncyI+PC9hPjxoMz5lbnVtIEdzdENsb2NrRmxhZ3M8L2gzPgotPHA+VGhlIGNhcGFiaWxpdGllcyBvZiB0aGlzIGNsb2NrPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2xvY2tGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1GTEFHLUNBTi1ETy1TSU5HTEUtU1lOQzpDQVBTIj48L2E+R1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9TWU5DPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmNsb2NrIGNhbiBkbyBhIHNpbmdsZSBzeW5jIHRpbWVvdXQgcmVxdWVzdDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tU0lOR0xFLUFTWU5DOkNBUFMiPjwvYT5HU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX0FTWU5DPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmNsb2NrIGNhbiBkbyBhIHNpbmdsZSBhc3luYyB0aW1lb3V0IHJlcXVlc3Q8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUZMQUctQ0FOLURPLVBFUklPRElDLVNZTkM6Q0FQUyI+PC9hPkdTVF9DTE9DS19GTEFHX0NBTl9ET19QRVJJT0RJQ19TWU5DPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmNsb2NrIGNhbiBkbyBzeW5jIHBlcmlvZGljIHRpbWVvdXQgcmVxdWVzdHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUZMQUctQ0FOLURPLVBFUklPRElDLUFTWU5DOkNBUFMiPjwvYT5HU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfQVNZTkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Y2xvY2sgY2FuIGRvIGFzeW5jIHBlcmlvZGljIHRpbWVvdXQgY2FsbGJhY2tzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DTE9DSy1GTEFHLUNBTi1TRVQtUkVTT0xVVElPTjpDQVBTIj48L2E+R1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9SRVNPTFVUSU9OPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmNsb2NrJ3MgcmVzb2x1dGlvbiBjYW4gYmUgY2hhbmdlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ0xPQ0stRkxBRy1DQU4tU0VULU1BU1RFUjpDQVBTIj48L2E+R1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Y2xvY2sgY2FuIGJlIHNsYXZlZCB0byBhIG1hc3RlciBjbG9jazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ0xPQ0stRkxBRy1ORUVEUy1TVEFSVFVQLVNZTkM6Q0FQUyI+PC9hPkdTVF9DTE9DS19GTEFHX05FRURTX1NUQVJUVVBfU1lOQzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5jbG9jayBuZWVkcyB0byBiZSBzeW5jZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkCi0gICAgKFNpbmNlIDEuNik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLUZMQUctTEFTVDpDQVBTIj48L2E+R1NUX0NMT0NLX0ZMQUdfTEFTVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zdWJjbGFzc2VzIGNhbiBhZGQgYWRkaXRpb25hbCBmbGFncyBzdGFydGluZyBmcm9tIHRoaXMgZmxhZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDbG9jay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2xvY2stLXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0aW1lb3V04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aW1lb3V04oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgYW1vdW50IG9mIHRpbWUsIGluIG5hbm9zZWNvbmRzLCB0byBzYW1wbGUgbWFzdGVyIGFuZCBzbGF2ZSBjbG9ja3MuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMDAwMDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2xvY2stLXdpbmRvdy1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcd2luZG93LXNpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHdpbmRvdy1zaXpl4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCB0byBjYWxjdWxhdGUgcmF0ZSBhbmQgb2Zmc2V0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzIsMTAyNF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAzMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2xvY2stLXdpbmRvdy10aHJlc2hvbGQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx3aW5kb3ctdGhyZXNob2xk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx3aW5kb3ctdGhyZXNob2xk4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgdGhyZXNob2xkIHRvIHN0YXJ0IGNhbGN1bGF0aW5nIHJhdGUgYW5kIG9mZnNldC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsyLDEwMjRdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDbG9jay5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDbG9jay1zeW5jZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzeW5jZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gIHN5bmNlZCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5TaWduYWxlZCBvbiBjbG9ja3Mgd2l0aCBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMgc2V0IG9uY2UKLXRoZSBjbG9jayBpcyBzeW5jaHJvbml6ZWQsIG9yIHdoZW4gaXQgY29tcGxldGVseSBsb3N0IHN5bmNocm9uaXphdGlvbi4KLVRoaXMgc2lnbmFsIHdpbGwgbm90IGJlIGVtaXR0ZWQgb24gY2xvY2tzIHdpdGhvdXQgdGhlIGZsYWcuPC9wPgotPHA+VGhpcyBzaWduYWwgd2lsbCBiZSBlbWl0dGVkIGZyb20gYW4gYXJiaXRyYXJ5IHRocmVhZCwgbW9zdCBsaWtlbHkgbm90Ci10aGUgYXBwbGljYXRpb24ncyBtYWluIHRocmVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDbG9jay1zeW5jZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3luY2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aWYgdGhlIGNsb2NrIGlzIHN5bmNlZCBub3c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q2xvY2suc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwiIHRpdGxlPSJHc3RTeXN0ZW1DbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN5c3RlbUNsb2NrPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdENvbnRleHQuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0Q29udGV4dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzQ3NjU3Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0Q29udGV4dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTc0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RDb250ZXh0OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdENvbmZpZy5odG1sIiB0aXRsZT0iR3N0Q29uZmlnIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENvbnRleHQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdENvbnRleHQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RDb25maWcuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0Q29udGV4dCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdENvbnRleHQudG9wX29mX3BhZ2UiPjwvYT5Hc3RDb250ZXh0PC9zcGFuPjwvaDI+Ci08cD5Hc3RDb250ZXh0IOKAlCBMaWdodHdlaWdodCBvYmplY3RzIHRvIHJlcHJlc2VudCBlbGVtZW50IGNvbnRleHRzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRleHQuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtbmV3IiB0aXRsZT0iZ3N0X2NvbnRleHRfbmV3wqAoKSI+Z3N0X2NvbnRleHRfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtcmVmIiB0aXRsZT0iZ3N0X2NvbnRleHRfcmVmwqAoKSI+Z3N0X2NvbnRleHRfcmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LXVucmVmIiB0aXRsZT0iZ3N0X2NvbnRleHRfdW5yZWbCoCgpIj5nc3RfY29udGV4dF91bnJlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LWNvcHkiIHRpdGxlPSJnc3RfY29udGV4dF9jb3B5wqAoKSI+Z3N0X2NvbnRleHRfY29weTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1nZXQtY29udGV4dC10eXBlIiB0aXRsZT0iZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZcKgKCkiPmdzdF9jb250ZXh0X2dldF9jb250ZXh0X3R5cGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1oYXMtY29udGV4dC10eXBlIiB0aXRsZT0iZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZcKgKCkiPmdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1pcy1wZXJzaXN0ZW50IiB0aXRsZT0iZ3N0X2NvbnRleHRfaXNfcGVyc2lzdGVudMKgKCkiPmdzdF9jb250ZXh0X2lzX3BlcnNpc3RlbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmXCoCgpIj5nc3RfY29udGV4dF9nZXRfc3RydWN0dXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtd3JpdGFibGUtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlwqAoKSI+Z3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfY29udGV4dF9tYWtlX3dyaXRhYmxlKCkiPmdzdF9jb250ZXh0X21ha2Vfd3JpdGFibGU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NvbnRleHRfaXNfd3JpdGFibGUoKSI+Z3N0X2NvbnRleHRfaXNfd3JpdGFibGU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtcmVwbGFjZSIgdGl0bGU9ImdzdF9jb250ZXh0X3JlcGxhY2XCoCgpIj5nc3RfY29udGV4dF9yZXBsYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q29udGV4dC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNHc3RDb250ZXh0LXN0cnVjdCIgdGl0bGU9IkdzdENvbnRleHQiPkdzdENvbnRleHQ8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRleHQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtQm94ZWQtVHlwZXMuaHRtbCI+R0JveGVkPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdENvbnRleHQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb250ZXh0LmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRleHQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4gaXMgYSBjb250YWluZXIgb2JqZWN0IHVzZWQgdG8gc3RvcmUgY29udGV4dHMgbGlrZSBhIGRldmljZQotY29udGV4dCwgYSBkaXNwbGF5IHNlcnZlciBjb25uZWN0aW9uIGFuZCBzaW1pbGFyIGNvbmNlcHRzIHRoYXQgc2hvdWxkCi1iZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBlbGVtZW50cy48L3A+Ci08cD5BcHBsaWNhdGlvbnMgY2FuIHNldCBhIGNvbnRleHQgb24gYSBjb21wbGV0ZSBwaXBlbGluZSBieSB1c2luZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtY29udGV4dCIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9jb250ZXh0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfY29udGV4dCgpPC9jb2RlPjwvYT4sIHdoaWNoIHdpbGwgdGhlbiBiZSBwcm9wYWdhdGVkIHRvIGFsbAotY2hpbGQgZWxlbWVudHMuIEVsZW1lbnRzIGNhbiBoYW5kbGUgdGhlc2UgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3Muc2V0LWNvbnRleHQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0RWxlbWVudENsYXNzLnNldF9jb250ZXh0KCk8L2NvZGU+PC9hPgotYW5kIG1lcmdlIHRoZW0gd2l0aCB0aGUgY29udGV4dCBpbmZvcm1hdGlvbiB0aGV5IGFscmVhZHkgaGF2ZS48L3A+Ci08cD5XaGVuIGFuIGVsZW1lbnQgbmVlZHMgYSBjb250ZXh0IGl0IHdpbGwgZG8gdGhlIGZvbGxvd2luZyBhY3Rpb25zIGluIHRoaXMKLW9yZGVyIHVudGlsIG9uZSBzdGVwIHN1Y2NlZWRzOjwvcD4KLTxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkNoZWNrIGlmIHRoZSBlbGVtZW50IGFscmVhZHkgaGFzIGEgY29udGV4dDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+UXVlcnkgZG93bnN0cmVhbSB3aXRoIEdTVF9RVUVSWV9DT05URVhUIGZvciB0aGUgY29udGV4dDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+UXVlcnkgdXBzdHJlYW0gd2l0aCBHU1RfUVVFUllfQ09OVEVYVCBmb3IgdGhlIGNvbnRleHQ8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPlBvc3QgYSBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQgbWVzc2FnZSBvbiB0aGUgYnVzIHdpdGggdGhlIHJlcXVpcmVkCi1jb250ZXh0IHR5cGVzIGFuZCBhZnRlcndhcmRzIGNoZWNrIGlmIGEgdXNhYmxlIGNvbnRleHQgd2FzIHNldCBub3c8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkNyZWF0ZSBhIGNvbnRleHQgYnkgaXRzZWxmIGFuZCBwb3N0IGEgR1NUX01FU1NBR0VfSEFWRV9DT05URVhUIG1lc3NhZ2UKLW9uIHRoZSBidXMuPC9wPjwvbGk+Ci08L29sPjwvZGl2PgotPHA+QmlucyB3aWxsIGNhdGNoIEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCBtZXNzYWdlcyBhbmQgd2lsbCBzZXQgYW55IHByZXZpb3VzbHkKLWtub3duIGNvbnRleHQgb24gdGhlIGVsZW1lbnQgdGhhdCBhc2tzIGZvciBpdCBpZiBwb3NzaWJsZS4gT3RoZXJ3aXNlIHRoZQotYXBwbGljYXRpb24gc2hvdWxkIHByb3ZpZGUgb25lIGlmIGl0IGNhbi48L3A+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPnMgY2FuIGJlIHBlcnNpc3RlbnQuCi1BIHBlcnNpc3RlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4gaXMga2VwdCBpbiBlbGVtZW50cyB3aGVuIHRoZXkgcmVhY2gKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLU5VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9OVUxMPC9jb2RlPjwvYT4sIG5vbi1wZXJzaXN0ZW50IG9uZXMgd2lsbCBiZSByZW1vdmVkLgotQWxzbywgYSBub24tcGVyc2lzdGVudCBjb250ZXh0IHdvbid0IG92ZXJyaWRlIGEgcHJldmlvdXMgcGVyc2lzdGVudAotY29udGV4dCBzZXQgdG8gYW4gZWxlbWVudC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRleHQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LW5ldyI+PC9hPjxoMz5nc3RfY29udGV4dF9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT7CoCoKLWdzdF9jb250ZXh0X25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjb250ZXh0X3R5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBwZXJzaXN0ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBjb250ZXh0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Db250ZXh0IHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGVyc2lzdGVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlBlcnNpc3RlbnQgY29udGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRleHQtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyBjb250ZXh0LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1yZWYiPjwvYT48aDM+Z3N0X2NvbnRleHRfcmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+wqAqCi1nc3RfY29udGV4dF9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db252ZW5pZW5jZSBtYWNybyB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBjb250ZXh0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LXJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29udGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb250ZXh0IHRvIHJlZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LXJlZi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250ZXh0PC9jb2RlPjwvZW0+Ci0oZm9yIGNvbnZlbmllbmNlIHdoZW4gZG9pbmcgYXNzaWdubWVudHMpPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LXVucmVmIj48L2E+PGgzPmdzdF9jb250ZXh0X3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NvbnRleHRfdW5yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db252ZW5pZW5jZSBtYWNybyB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBjb250ZXh0LCBwb3NzaWJseQotZnJlZWluZyBpdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC11bnJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29udGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb250ZXh0IHRvIHVucmVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1jb3B5Ij48L2E+PGgzPmdzdF9jb250ZXh0X2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT7CoCoKLWdzdF9jb250ZXh0X2NvcHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgY29weSBvZiB0aGUgY29udGV4dC4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIGNvbnRleHQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRleHQtY29weS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29udGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb250ZXh0IHRvIGNvcHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1jb3B5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udGV4dDwvY29kZT48L2VtPgotLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LWdldC1jb250ZXh0LXR5cGUiPjwvYT48aDM+Z3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+ICpjb250ZXh0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdHlwZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udGV4dDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LWdldC1jb250ZXh0LXR5cGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRleHQtZ2V0LWNvbnRleHQtdHlwZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1oYXMtY29udGV4dC10eXBlIj48L2E+PGgzPmdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqY29udGV4dF90eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udGV4dDwvY29kZT48L2VtPgotIGhhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udGV4dF90eXBlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRleHQtaGFzLWNvbnRleHQtdHlwZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Db250ZXh0IHR5cGUgdG8gY2hlY2suPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1oYXMtY29udGV4dC10eXBlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250ZXh0PC9jb2RlPjwvZW0+Ci1oYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnRleHRfdHlwZTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1pcy1wZXJzaXN0ZW50Ij48L2E+PGgzPmdzdF9jb250ZXh0X2lzX3BlcnNpc3RlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jb250ZXh0X2lzX3BlcnNpc3RlbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udGV4dDwvY29kZT48L2VtPgotIGlzIHBlcnNpc3RlbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRleHQtaXMtcGVyc2lzdGVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29udGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1pcy1wZXJzaXN0ZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjb250ZXh0IGlzIHBlcnNpc3RlbnQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LWdldC1zdHJ1Y3R1cmUiPjwvYT48aDM+Z3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+ICpjb250ZXh0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFjY2VzcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb250ZXh0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LWdldC1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRleHQtZ2V0LXN0cnVjdHVyZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRleHQuIFRoZSBzdHJ1Y3R1cmUgaXMKLXN0aWxsIG93bmVkIGJ5IHRoZSBjb250ZXh0LCB3aGljaCBtZWFucyB0aGF0IHlvdSBzaG91bGQgbm90IG1vZGlmeSBpdCwKLWZyZWUgaXQgYW5kIHRoYXQgdGhlIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIHdoZW4geW91IGZyZWUgdGhlIGNvbnRleHQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LXdyaXRhYmxlLXN0cnVjdHVyZSI+PC9hPjxoMz5nc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+ICpjb250ZXh0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIHdyaXRhYmxlIHZlcnNpb24gb2YgdGhlIHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC13cml0YWJsZS1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRleHQtd3JpdGFibGUtc3RydWN0dXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgY29udGV4dC4gVGhlIHN0cnVjdHVyZSBpcyBzdGlsbAotb3duZWQgYnkgdGhlIGNvbnRleHQsIHdoaWNoIG1lYW5zIHRoYXQgeW91IHNob3VsZCBub3QgZnJlZSBpdCBhbmQKLXRoYXQgdGhlIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIHdoZW4geW91IGZyZWUgdGhlIGNvbnRleHQuCi1UaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udGV4dDwvY29kZT48L2VtPgotaXMgd3JpdGFibGUuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LW1ha2Utd3JpdGFibGUiPjwvYT48aDM+Z3N0X2NvbnRleHRfbWFrZV93cml0YWJsZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2NvbnRleHRfbWFrZV93cml0YWJsZShjb250ZXh0KSAgR1NUX0NPTlRFWFRfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChjb250ZXh0KSkpCi08L3ByZT4KLTxwPkNoZWNrcyBpZiBhIGNvbnRleHQgaXMgd3JpdGFibGUuIElmIG5vdCwgYSB3cml0YWJsZSBjb3B5IGlzIG1hZGUgYW5kCi1yZXR1cm5lZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1tYWtlLXdyaXRhYmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBjb250ZXh0IHRvIG1ha2Ugd3JpdGFibGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LW1ha2Utd3JpdGFibGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIGNvbnRleHQgKHBvc3NpYmx5IGEgZHVwbGljYXRlKSB0aGF0IGlzIHdyaXRhYmxlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LWlzLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9jb250ZXh0X2lzX3dyaXRhYmxlKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfY29udGV4dF9pc193cml0YWJsZShjb250ZXh0KSAgICAgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoY29udGV4dCkpCi08L3ByZT4KLTxwPlRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IHdyaXRlIGludG8gYSBjb250ZXh0J3Mgc3RydWN0dXJlIG9yIHZhbGlkbHkKLW1vZGlmeSB0aGUgc2VxbnVtIGFuZCB0aW1lc3RhbXAgZmllbGRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LWlzLXdyaXRhYmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbnRleHQtcmVwbGFjZSI+PC9hPjxoMz5nc3RfY29udGV4dF9yZXBsYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY29udGV4dF9yZXBsYWNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4gKipvbGRfY29udGV4dDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiAqbmV3X2NvbnRleHQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TW9kaWZpZXMgYSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4gdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4uIFRoZQotbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKLWluIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAotY29udGV4dCBpcyB1bnJlZmZlZCwgdGhlIG5ldyBvbmUgaXMgcmVmZmVkKS48L3A+Ci08cD5FaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19jb250ZXh0PC9jb2RlPjwvZW0+Ci0gb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9jb250ZXh0PC9jb2RlPjwvZW0+Ci0gbWF5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udGV4dC1yZXBsYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9sZF9jb250ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4KLXRvIGJlIHJlcGxhY2VkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5ld19jb250ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiB0aGF0IHdpbGwKLXJlcGxhY2UgdGhlIGNvbnRleHQgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX2NvbnRleHQ8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250ZXh0LXJlcGxhY2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19jb250ZXh0PC9jb2RlPjwvZW0+Ci13YXMgZGlmZmVyZW50IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9jb250ZXh0PC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb250ZXh0Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDb250ZXh0LXN0cnVjdCI+PC9hPjxoMz5Hc3RDb250ZXh0PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0Q29udGV4dCBHc3RDb250ZXh0OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRleHQuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RDb250cm9sQmluZGluZy5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RDb250cm9sQmluZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzdlMDVmLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0Q29udHJvbEJpbmRpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUyNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0Q29udHJvbEJpbmRpbmc6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDb250cm9sQmluZGluZy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q29udHJvbEJpbmRpbmcub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q29udHJvbEJpbmRpbmcucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdENvbnRleHQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RDb250cm9sQmluZGluZyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLnRvcF9vZl9wYWdlIj48L2E+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9oMj4KLTxwPkdzdENvbnRyb2xCaW5kaW5nIOKAlCBhdHRhY2htZW50IGZvciBjb250cm9sIHNvdXJjZSBzb3VyY2VzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNnc3QtY29udHJvbC1iaW5kaW5nLXN5bmMtdmFsdWVzIiB0aXRsZT0iZ3N0X2NvbnRyb2xfYmluZGluZ19zeW5jX3ZhbHVlc8KgKCkiPmdzdF9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNnc3QtY29udHJvbC1iaW5kaW5nLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlwqAoKSI+Z3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWNvbnRyb2wtYmluZGluZy1nZXQtdmFsdWUtYXJyYXkiIHRpdGxlPSJnc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZV9hcnJhecKgKCkiPmdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlX2FycmF5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctZ2V0LWctdmFsdWUtYXJyYXkiIHRpdGxlPSJnc3RfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5wqAoKSI+Z3N0X2NvbnRyb2xfYmluZGluZ19nZXRfZ192YWx1ZV9hcnJheTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWNvbnRyb2wtYmluZGluZy1zZXQtZGlzYWJsZWQiIHRpdGxlPSJnc3RfY29udHJvbF9iaW5kaW5nX3NldF9kaXNhYmxlZMKgKCkiPmdzdF9jb250cm9sX2JpbmRpbmdfc2V0X2Rpc2FibGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctaXMtZGlzYWJsZWQiIHRpdGxlPSJnc3RfY29udHJvbF9iaW5kaW5nX2lzX2Rpc2FibGVkwqAoKSI+Z3N0X2NvbnRyb2xfYmluZGluZ19pc19kaXNhYmxlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sI0dzdENvbnRyb2xCaW5kaW5nLS1uYW1lIiB0aXRsZT0iVGhlIOKAnG5hbWXigJ0gcHJvcGVydHkiPm5hbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZy0tb2JqZWN0IiB0aXRsZT0iVGhlIOKAnG9iamVjdOKAnSBwcm9wZXJ0eSI+b2JqZWN0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbEJpbmRpbmciPkdzdENvbnRyb2xCaW5kaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZ0NsYXNzIiB0aXRsZT0ic3RydWN0IEdzdENvbnRyb2xCaW5kaW5nQ2xhc3MiPkdzdENvbnRyb2xCaW5kaW5nQ2xhc3M8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q29udHJvbEJpbmRpbmcub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0Q29udHJvbEJpbmRpbmcKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb250cm9sQmluZGluZy5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb250cm9sQmluZGluZy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BIGJhc2UgY2xhc3MgZm9yIHZhbHVlIG1hcHBpbmcgb2JqZWN0cyB0aGF0IGF0dGFjaGVzIGNvbnRyb2wgc291cmNlcyB0byBnb2JqZWN0Ci1wcm9wZXJ0aWVzLiBTdWNoIGFuIG9iamVjdCBpcyB0YWtpbmcgb25lIG9yIG1vcmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gaW5zdGFuY2VzLAotY29tYmluZXMgdGhlbSBhbmQgbWFwcyB0aGUgcmVzdWx0aW5nIHZhbHVlIHRvIHRoZSB0eXBlIGFuZCB2YWx1ZSByYW5nZSBvZiB0aGUKLWJvdW5kIHByb3BlcnR5LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q29udHJvbEJpbmRpbmcuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250cm9sLWJpbmRpbmctc3luYy12YWx1ZXMiPjwvYT48aDM+Z3N0X2NvbnRyb2xfYmluZGluZ19zeW5jX3ZhbHVlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NvbnRyb2xfYmluZGluZ19zeW5jX3ZhbHVlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sQmluZGluZzwvc3Bhbj48L2E+ICpiaW5kaW5nPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGxhc3Rfc3luYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLCBhY2NvcmRpbmcgdG8gdGhlIDxhIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2VzPC9zcGFuPjwvYT4gdGhhdAotaGFuZGxlIHRoZW0gYW5kIGZvciB0aGUgZ2l2ZW4gdGltZXN0YW1wLjwvcD4KLTxwPklmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGl0IGlzIG1vc3QgbGlrZWx5IHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIGZhdWx0LgotTW9zdCBwcm9iYWJseSB0aGUgY29udHJvbCBzb3VyY2VzIGFyZSBub3Qgc2V0dXAgY29ycmVjdGx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250cm9sLWJpbmRpbmctc3luYy12YWx1ZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluZGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb250cm9sIGJpbmRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWUgdGhhdCBzaG91bGQgYmUgcHJvY2Vzc2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxhc3Rfc3luYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBsYXN0IHRpbWUgdGhpcyB3YXMgY2FsbGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udHJvbC1iaW5kaW5nLXN5bmMtdmFsdWVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjb250cm9sbGVyIHZhbHVlIGNvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG9iamVjdAotcHJvcGVydHksIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29udHJvbC1iaW5kaW5nLWdldC12YWx1ZSI+PC9hPjxoMz5nc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi1nc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sQmluZGluZzwvc3Bhbj48L2E+ICpiaW5kaW5nPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb250cm9sbGVkIHByb3BlcnR5IGF0IHRoZSByZXF1ZXN0ZWQgdGltZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udHJvbC1iaW5kaW5nLWdldC12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbnRyb2wgYmluZGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGltZSB0aGUgY29udHJvbC1jaGFuZ2Ugc2hvdWxkIGJlIHJlYWQgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRyb2wtYmluZGluZy1nZXQtdmFsdWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgR1ZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gdGltZSwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgcHJvcGVydHkgaXNuJ3QgY29udHJvbGxlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29udHJvbC1iaW5kaW5nLWdldC12YWx1ZS1hcnJheSI+PC9hPjxoMz5nc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZV9hcnJhecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPiAqYmluZGluZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbl92YWx1ZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHZhbHVlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIGEgbnVtYmVyIG9mIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGNvbnRyb2xsZWQgcHJvcGVydHkgc3RhcnRpbmcgYXQgdGhlCi1yZXF1ZXN0ZWQgdGltZS4gVGhlIGFycmF5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZXM8L2NvZGU+PC9lbT4KLSBuZWVkIHRvIGhvbGQgZW5vdWdoIHNwYWNlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bl92YWx1ZXM8L2NvZGU+PC9lbT4KLSBvZgotdGhlIHNhbWUgdHlwZSBhcyB0aGUgb2JqZWN0cyBwcm9wZXJ0eSdzIHR5cGUuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgaWYgb25lIHdhbnRzIHRvIGUuZy4gZHJhdyBhIGdyYXBoIG9mIHRoZSBjb250cm9sCi1jdXJ2ZSBvciBhcHBseSBhIGNvbnRyb2wgY3VydmUgc2FtcGxlIGJ5IHNhbXBsZS48L3A+Ci08cD5UaGUgdmFsdWVzIGFyZSB1bmJveGVkIGFuZCByZWFkeSB0byBiZSB1c2VkLiBUaGUgc2ltaWxhciBmdW5jdGlvbiAKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctZ2V0LWctdmFsdWUtYXJyYXkiIHRpdGxlPSJnc3RfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5KCk8L2NvZGU+PC9hPiByZXR1cm5zIHRoZSBhcnJheSBhcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZXM8L3NwYW4+PC9hPiBhbmQgaXMKLW1vcmUgc3VpdGFibGUgZm9yIGJpbmRpbmdzLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250cm9sLWJpbmRpbmctZ2V0LXZhbHVlLWFycmF5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbmRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29udHJvbCBiaW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1lIHNwYWNpbmcgYmV0d2VlbiBzdWJzZXF1ZW50IHZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uX3ZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgdmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9bl92YWx1ZXNdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250cm9sLWJpbmRpbmctZ2V0LXZhbHVlLWFycmF5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBnaXZlbiBhcnJheSBjb3VsZCBiZSBmaWxsZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29udHJvbC1iaW5kaW5nLWdldC1nLXZhbHVlLWFycmF5Ij48L2E+PGgzPmdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X2dfdmFsdWVfYXJyYXnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X2dfdmFsdWVfYXJyYXkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPiAqYmluZGluZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gaW50ZXJ2YWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbl92YWx1ZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgYSBudW1iZXIgb2YgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVzPC9zcGFuPjwvYT4gZm9yIHRoZSBnaXZlbiBjb250cm9sbGVkIHByb3BlcnR5IHN0YXJ0aW5nIGF0IHRoZQotcmVxdWVzdGVkIHRpbWUuIFRoZSBhcnJheSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWVzPC9jb2RlPjwvZW0+Ci0gbmVlZCB0byBob2xkIGVub3VnaCBzcGFjZSBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5fdmFsdWVzPC9jb2RlPjwvZW0+Ci0gb2YKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgaWYgb25lIHdhbnRzIHRvIGUuZy4gZHJhdyBhIGdyYXBoIG9mIHRoZSBjb250cm9sCi1jdXJ2ZSBvciBhcHBseSBhIGNvbnRyb2wgY3VydmUgc2FtcGxlIGJ5IHNhbXBsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udHJvbC1iaW5kaW5nLWdldC1nLXZhbHVlLWFycmF5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbmRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29udHJvbCBiaW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1lIHNwYWNpbmcgYmV0d2VlbiBzdWJzZXF1ZW50IHZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uX3ZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgdmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9bl92YWx1ZXNdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250cm9sLWJpbmRpbmctZ2V0LWctdmFsdWUtYXJyYXkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGdpdmVuIGFycmF5IGNvdWxkIGJlIGZpbGxlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250cm9sLWJpbmRpbmctc2V0LWRpc2FibGVkIj48L2E+PGgzPmdzdF9jb250cm9sX2JpbmRpbmdfc2V0X2Rpc2FibGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NvbnRyb2xfYmluZGluZ19zZXRfZGlzYWJsZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPiAqYmluZGluZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZGlzYWJsZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgYSBjb250cm9sIGJpbmRpbmcgZm9yIHNvbWUgdGltZSwgaS5lLgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc3luYy12YWx1ZXMiIHRpdGxlPSJnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCk8L2NvZGU+PC9hPiB3aWxsIGRvIG5vdGhpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRyb2wtYmluZGluZy1zZXQtZGlzYWJsZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluZGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb250cm9sIGJpbmRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGlzYWJsZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ib29sZWFuIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgY29udHJvbGxlcgotb3Igbm90LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29udHJvbC1iaW5kaW5nLWlzLWRpc2FibGVkIj48L2E+PGgzPmdzdF9jb250cm9sX2JpbmRpbmdfaXNfZGlzYWJsZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9jb250cm9sX2JpbmRpbmdfaXNfZGlzYWJsZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPiAqYmluZGluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiB0aGUgY29udHJvbCBiaW5kaW5nIGlzIGRpc2FibGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb250cm9sLWJpbmRpbmctaXMtZGlzYWJsZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbmRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29udHJvbCBiaW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRyb2wtYmluZGluZy1pcy1kaXNhYmxlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgYmluZGluZyBpcyBpbmFjdGl2ZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDb250cm9sQmluZGluZy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdENvbnRyb2xCaW5kaW5nPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q29udHJvbEJpbmRpbmcgewotICBnY2hhciAqbmFtZTsKLSAgR1BhcmFtU3BlYyAqcHNwZWM7Ci19OwotPC9wcmU+Ci08cD5UaGUgaW5zdGFuY2Ugc3RydWN0dXJlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sQmluZGluZzwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLXN0cnVjdC5uYW1lIj48L2E+bmFtZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiB0aGUgcHJvcGVydHkgb2YgdGhpcyBiaW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDb250cm9sQmluZGluZy1zdHJ1Y3QucHNwZWMiPjwvYT5wc3BlYzwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gZm9yIHRoaXMgcHJvcGVydHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdENvbnRyb2xCaW5kaW5nQ2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDb250cm9sQmluZGluZ0NsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIGdib29sZWFuICgqIHN5bmNfdmFsdWVzKSAoR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmcsIEdzdE9iamVjdCAqb2JqZWN0LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgbGFzdF9zeW5jKTsKLSAgR1ZhbHVlICogKCogZ2V0X3ZhbHVlKSAoR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmcsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApOwotICBnYm9vbGVhbiAoKiBnZXRfdmFsdWVfYXJyYXkpIChHc3RDb250cm9sQmluZGluZyAqYmluZGluZywgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCxHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLCBncG9pbnRlciB2YWx1ZXMpOwotICBnYm9vbGVhbiAoKiBnZXRfZ192YWx1ZV9hcnJheSkgKEdzdENvbnRyb2xCaW5kaW5nICpiaW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsIEdWYWx1ZSAqdmFsdWVzKTsKLX07Ci08L3ByZT4KLTxwPlRoZSBjbGFzcyBzdHJ1Y3R1cmUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sQmluZGluZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q29udHJvbEJpbmRpbmdDbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29udHJvbEJpbmRpbmdDbGFzcy5zeW5jLXZhbHVlcyI+PC9hPnN5bmNfdmFsdWVzPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5pbXBsZW1lbnRhdGlvbiBmb3IgdXBkYXRpbmcgdGhlIHRhcmdldCB2YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDb250cm9sQmluZGluZ0NsYXNzLmdldC12YWx1ZSI+PC9hPmdldF92YWx1ZTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+aW1wbGVtZW50YXRpb24gdG8gZmV0Y2ggYSBzaW5nbGUgY29udHJvbC12YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nQ2xhc3MuZ2V0LXZhbHVlLWFycmF5Ij48L2E+Z2V0X3ZhbHVlX2FycmF5PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5pbXBsZW1lbnRhdGlvbiB0byBmZXRjaCBhIHNlcmllcyBvZiBjb250cm9sLXZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nQ2xhc3MuZ2V0LWctdmFsdWUtYXJyYXkiPjwvYT5nZXRfZ192YWx1ZV9hcnJheTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+aW1wbGVtZW50YXRpb24gdG8gZmV0Y2ggYSBzZXJpZXMgb2YgY29udHJvbC12YWx1ZXMKLWFzIGdfdmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDb250cm9sQmluZGluZy0tbmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5hbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5hbWXigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLS1vYmplY3QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvYmplY3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG9iamVjdOKAnSAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIG9iamVjdCBvZiB0aGUgcHJvcGVydHkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZDMxMTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdENvbnRyb2xTb3VyY2U6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q29udHJvbFNvdXJjZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q29udHJvbFNvdXJjZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2UudG9wX29mX3BhZ2UiPjwvYT5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvaDI+Ci08cD5Hc3RDb250cm9sU291cmNlIOKAlCBiYXNlIGNsYXNzIGZvciBjb250cm9sIHNvdXJjZSBzb3VyY2VzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2UuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlwqAoKSI+KkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXnCoCgpIj4qR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXk8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZcKgKCkiPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlLWFycmF5IiB0aXRsZT0iZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJhecKgKCkiPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb250cm9sU291cmNlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9IkdzdFZhbHVlQXJyYXkiPkdzdFZhbHVlQXJyYXk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbFNvdXJjZUNsYXNzIj5Hc3RDb250cm9sU291cmNlQ2xhc3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VGltZWRWYWx1ZSIgdGl0bGU9InN0cnVjdCBHc3RUaW1lZFZhbHVlIj5Hc3RUaW1lZFZhbHVlPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2Uub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0Q29udHJvbFNvdXJjZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2UuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gaXMgYSBiYXNlIGNsYXNzIGZvciBjb250cm9sIHZhbHVlIHNvdXJjZXMgdGhhdCBjb3VsZAotYmUgdXNlZCB0byBnZXQgdGltZXN0YW1wLXZhbHVlIHBhaXJzLiBBIGNvbnRyb2wgc291cmNlIGVzc2VudGlhbGx5IGlzIGEKLWZ1bmN0aW9uIG92ZXIgdGltZS48L3A+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IGlzIHVzZWQgYnkgZmlyc3QgZ2V0dGluZyBhbiBpbnN0YW5jZSBvZiBhIHNwZWNpZmljCi1jb250cm9sLXNvdXJjZSwgY3JlYXRpbmcgYSBiaW5kaW5nIGZvciB0aGUgY29udHJvbC1zb3VyY2UgdG8gdGhlIHRhcmdldCBwcm9wZXJ0eQotb2YgdGhlIGVsZW1lbnQgYW5kIHRoZW4gYWRkaW5nIHRoZSBiaW5kaW5nIHRvIHRoZSBlbGVtZW50LiBUaGUgYmluZGluZyB3aWxsCi1jb252ZXJ0IHRoZSBkYXRhIHR5cGVzIGFuZCB2YWx1ZSByYW5nZSB0byBmaXQgdG8gdGhlIGJvdW5kIHByb3BlcnR5LjwvcD4KLTxwPkZvciBpbXBsZW1lbnRpbmcgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gb25lIGhhcyB0byBpbXBsZW1lbnQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZTwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXnCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXk8L3NwYW4+PC9hPiBmdW5jdGlvbnMuCi1UaGVzZSBhcmUgdGhlbiB1c2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUoKTwvY29kZT48L2E+IGFuZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlLWFycmF5IiB0aXRsZT0iZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJhecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSgpPC9jb2RlPjwvYT4gdG8gZ2V0IHZhbHVlcyBmb3Igc3BlY2lmaWMgdGltZXN0YW1wcy48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2UuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSI+PC9hPjxoMz5Hc3RDb250cm9sU291cmNlR2V0VmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RDb250cm9sU291cmNlR2V0VmFsdWU8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnVuY3Rpb24gZm9yIHJldHVybmluZyBhIHZhbHVlIGZvciBhIGdpdmVuIHRpbWVzdGFtcC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb250cm9sU291cmNlR2V0VmFsdWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aW1lc3RhbXAgZm9yIHdoaWNoIGEgdmFsdWUgc2hvdWxkIGJlIGNhbGN1bGF0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHZhbHVlIHdoaWNoIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb250cm9sU291cmNlR2V0VmFsdWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIHdhcyBzdWNjZXNzZnVsbHkgY2FsY3VsYXRlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkiPjwvYT48aDM+R3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGludGVydmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuX3ZhbHVlczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWx1ZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnVuY3Rpb24gZm9yIHJldHVybmluZyBhbiBhcnJheSBvZiB2YWx1ZXMgZm9yIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gdGltZXN0YW1wLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGltZXN0YW1wIGZvciB3aGljaCBhIHZhbHVlIHNob3VsZCBiZSBjYWxjdWxhdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmludGVydmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWUgc3BhY2luZyBiZXR3ZWVuIHN1YnNlcXVlbnQgdmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5fdmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciBvZiB2YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWVzIHdlcmUgc3VjY2Vzc2Z1bGx5IGNhbGN1bGF0ZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb250cm9sLXNvdXJjZS1nZXQtdmFsdWUiPjwvYT48aDM+Z3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHZhbHVlIGZvciB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IGF0IGEgZ2l2ZW4gdGltZXN0YW1wLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgaXMgYSBtZXRob2QiPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5tZXRob2Q8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGltZSBmb3Igd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgdmFsdWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZG4ndCBiZSByZXR1cm5lZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS1hcnJheSI+PC9hPjxoMz5nc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGludGVydmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5fdmFsdWVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsdWVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgYW4gYXJyYXkgb2YgdmFsdWVzIGZvciBmb3IgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi4gVmFsdWVzIHRoYXQgYXJlCi11bmRlZmluZWQgY29udGFpbiBOQU5zLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgaXMgYSBtZXRob2QiPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5tZXRob2Q8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS1hcnJheS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZmlyc3QgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmludGVydmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWUgc3RlcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bl92YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIHZhbHVlcyB0byBmZXRjaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPW5fdmFsdWVzXTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlLWFycmF5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBnaXZlbiBhcnJheSBjb3VsZCBiZSBmaWxsZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZhbHVlQXJyYXkiPjwvYT48aDM+R3N0VmFsdWVBcnJheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFZhbHVlQXJyYXkgR3N0VmFsdWVBcnJheTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdENvbnRyb2xTb3VyY2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDb250cm9sU291cmNlIHsKLSAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlIGdldF92YWx1ZTsgICAgICAgICAgICAgLyogUmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgYXQgYSBnaXZlbiB0aW1lc3RhbXAgKi8KLSAgR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkgZ2V0X3ZhbHVlX2FycmF5OyAgLyogUmV0dXJucyB2YWx1ZXMgZm9yIGEgcHJvcGVydHkgaW4gYSBnaXZlbiB0aW1lc3BhbiAqLwotfTsKLTwvcHJlPgotPHA+VGhlIGluc3RhbmNlIHN0cnVjdHVyZSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb250cm9sU291cmNlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZcKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlR2V0VmFsdWU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QuZ2V0LXZhbHVlIj48L2E+Z2V0X3ZhbHVlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5GdW5jdGlvbiBmb3IgcmV0dXJuaW5nIGEgdmFsdWUgZm9yIGEgZ2l2ZW4gdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5wqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2Utc3RydWN0LmdldC12YWx1ZS1hcnJheSI+PC9hPmdldF92YWx1ZV9hcnJheTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+RnVuY3Rpb24gZm9yIHJldHVybmluZyBhIHZhbHVlcyBhcnJheSBmb3IgYSBnaXZlbiB0aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xTb3VyY2VDbGFzcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q29udHJvbFNvdXJjZUNsYXNzPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q29udHJvbFNvdXJjZUNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLTwvcHJlPgotPHA+VGhlIGNsYXNzIHN0cnVjdHVyZSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb250cm9sU291cmNlQ2xhc3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRpbWVkVmFsdWUiPjwvYT48aDM+c3RydWN0IEdzdFRpbWVkVmFsdWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RUaW1lZFZhbHVlIHsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgZ2RvdWJsZSAgICAgIHZhbHVlOwotfTsKLTwvcHJlPgotPHA+U3RydWN0dXJlIGZvciBzYXZpbmcgYSB0aW1lc3RhbXAgYW5kIGEgdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VGltZWRWYWx1ZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFRpbWVkVmFsdWUudGltZXN0YW1wIj48L2E+dGltZXN0YW1wPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aW1lc3RhbXAgb2YgdGhlIHZhbHVlIGNoYW5nZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGltZWRWYWx1ZS52YWx1ZSI+PC9hPnZhbHVlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29ycmVzcG9uZGluZyB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdERhdGVUaW1lLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdERhdGVUaW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZTMxMzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3REYXRlVGltZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI3MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0RGF0ZVRpbWU6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3REYXRlVGltZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0RGF0ZVRpbWUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3REYXRlVGltZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdERhdGVUaW1lLnRvcF9vZl9wYWdlIj48L2E+R3N0RGF0ZVRpbWU8L3NwYW4+PC9oMj4KLTxwPkdzdERhdGVUaW1lIOKAlCBBIGRhdGUsIHRpbWUgYW5kIHRpbWV6b25lIHN0cnVjdHVyZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3REYXRlVGltZS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LWRheSIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X2RhecKgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X2RheTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbW9udGgiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9tb250aMKgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1ob3VyIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9nZXRfaG91csKgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X2hvdXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LW1pY3Jvc2Vjb25kIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmTCoCgpIj5nc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbWludXRlIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlwqAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfbWludXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Zsb2F0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtdGltZS16b25lLW9mZnNldCIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXTCoCgpIj5nc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1zZWNvbmQiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmTCoCgpIj5nc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LXllYXIiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF95ZWFywqAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfeWVhcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldyIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfbmV3wqAoKSI+Z3N0X2RhdGVfdGltZV9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXcteW1kIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfeW1kwqAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfeW1kPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LXltIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfeW3CoCgpIj5nc3RfZGF0ZV90aW1lX25ld195bTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy15IiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfecKgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X3k8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLWxvY2FsLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZcKgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWZyb20tdW5peC1lcG9jaC11dGMiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfdXRjwqAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1sb2NhbC10aW1lIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZcKgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X2xvY2FsX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctbm93LWxvY2FsLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19ub3dfbG9jYWxfdGltZcKgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LW5vdy11dGMiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjwqAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXJlZiIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfcmVmwqAoKSI+Z3N0X2RhdGVfdGltZV9yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmwqAoKSI+Z3N0X2RhdGVfdGltZV91bnJlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWhhcy1kYXkiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2hhc19kYXnCoCgpIj5nc3RfZGF0ZV90aW1lX2hhc19kYXk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1oYXMtbW9udGgiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2hhc19tb250aMKgKCkiPmdzdF9kYXRlX3RpbWVfaGFzX21vbnRoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtaGFzLXNlY29uZCIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZMKgKCkiPmdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWhhcy10aW1lIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9oYXNfdGltZcKgKCkiPmdzdF9kYXRlX3RpbWVfaGFzX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1oYXMteWVhciIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfaGFzX3llYXLCoCgpIj5nc3RfZGF0ZV90aW1lX2hhc195ZWFyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWZyb20taXNvODYwMS1zdHJpbmciIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nwqAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXRvLWlzbzg2MDEtc3RyaW5nIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV90b19pc284NjAxX3N0cmluZ8KgKCkiPmdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctZnJvbS1nLWRhdGUtdGltZSIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWXCoCgpIj5nc3RfZGF0ZV90aW1lX25ld19mcm9tX2dfZGF0ZV90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItR0RhdGVUaW1lLmh0bWwjR0RhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdEYXRlVGltZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdG8tZy1kYXRlLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3RvX2dfZGF0ZV90aW1lwqAoKSI+Z3N0X2RhdGVfdGltZV90b19nX2RhdGVfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERhdGVUaW1lLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lLXN0cnVjdCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNHU1QtVFlQRS1EQVRFLVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0RBVEVfVElNRSI+R1NUX1RZUEVfREFURV9USU1FPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERhdGVUaW1lLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUJveGVkLVR5cGVzLmh0bWwiPkdCb3hlZDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3REYXRlVGltZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERhdGVUaW1lLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERhdGVUaW1lLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlN0cnVjdCB0byBzdG9yZSBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZSBpbmZvcm1hdGlvbiBhbHRvZ2V0aGVyLgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gaXMgcmVmY291bnRlZCBhbmQgaW1tdXRhYmxlLjwvcD4KLTxwPkRhdGUgaW5mb3JtYXRpb24gaXMgaGFuZGxlZCB1c2luZyB0aGUgcHJvbGVwdGljIEdyZWdvcmlhbiBjYWxlbmRhci48L3A+Ci08cD5Qcm92aWRlcyBiYXNpYyBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIGFjY2Vzc29yIGZ1bmN0aW9ucyB0byBpdHMgZmllbGRzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RGF0ZVRpbWUuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LWRheSI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX2dldF9kYXnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2dldF9kYXkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgZGF5IG9mIHRoZSBtb250aCBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LgotQ2FsbCBnc3RfZGF0ZV90aW1lX2hhc19kYXkgYmVmb3JlLCB0byBhdm9pZCB3YXJuaW5ncy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC1kYXkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGV0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LWRheS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBkYXkgb2YgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC1tb250aCI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX2dldF9tb250aMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLWdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIG1vbnRoIG9mIHRoaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4uIEphbnVhcnkgaXMgMSwgRmVicnVhcnkgaXMgMiwgZXRjLi4KLUNhbGwgZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggYmVmb3JlLCB0byBhdm9pZCB3YXJuaW5ncy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC1tb250aC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0ZXRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtbW9udGgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbW9udGggb2YgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC1ob3VyIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfZ2V0X2hvdXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2dldF9ob3VyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyB0aGUgaG91ciBvZiB0aGUgZGF5IHJlcHJlc2VudGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgotIGluIHRoZSBncmVnb3JpYW4KLWNhbGVuZGFyLiBUaGUgcmV0dXJuIGlzIGluIHRoZSByYW5nZSBvZiAwIHRvIDIzLgotQ2FsbCBnc3RfZGF0ZV90aW1lX2hhc19oYXVyIGJlZm9yZSwgdG8gYXZvaWQgd2FybmluZ3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtaG91ci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0ZXRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtaG91ci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBob3VyIG9mIHRoZSBkYXk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtbWljcm9zZWNvbmQiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZXMgdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgc2Vjb25kcyBpbiBtaWNyb3NlY29uZHMgcmVwcmVzZW50ZWQgYnkKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgotIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtbWljcm9zZWNvbmQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGV0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LW1pY3Jvc2Vjb25kLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG1pY3Jvc2Vjb25kIG9mIHRoZSBzZWNvbmQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtbWludXRlIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLWdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZXMgdGhlIG1pbnV0ZSBvZiB0aGUgaG91ciByZXByZXNlbnRlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0ZXRpbWU8L2NvZGU+PC9lbT4KLSBpbiB0aGUgZ3JlZ29yaWFuCi1jYWxlbmRhci4KLUNhbGwgZ3N0X2RhdGVfdGltZV9oYXNfbWludXRlIGJlZm9yZSwgdG8gYXZvaWQgd2FybmluZ3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtbWludXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRldGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC1taW51dGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWludXRlIG9mIHRoZSBob3VyPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LXRpbWUtem9uZS1vZmZzZXQiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyB0aGUgb2Zmc2V0IGZyb20gVVRDIGluIGhvdXJzIHRoYXQgdGhlIHRpbWV6b25lIHNwZWNpZmllZAotYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+Ci0gcmVwcmVzZW50cy4gVGltZXpvbmVzIGFoZWFkICh0byB0aGUgZWFzdCkgb2YgVVRDIGhhdmUgcG9zaXRpdmUKLXZhbHVlcywgdGltZXpvbmVzIGJlZm9yZSAodG8gdGhlIHdlc3QpIG9mIFVUQyBoYXZlIG5lZ2F0aXZlIHZhbHVlcy4KLUlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgotIHJlcHJlc2VudHMgVVRDIHRpbWUsIHRoZW4gdGhlIG9mZnNldCBpcyB6ZXJvLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LXRpbWUtem9uZS1vZmZzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGV0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LXRpbWUtem9uZS1vZmZzZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgb2Zmc2V0IGZyb20gVVRDIGluIGhvdXJzPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LXNlY29uZCI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX2dldF9zZWNvbmTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmVzIHRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSByZXByZXNlbnRlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0ZXRpbWU8L2NvZGU+PC9lbT4KLSBpbiB0aGUgZ3JlZ29yaWFuCi1jYWxlbmRhci4KLUNhbGwgZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIGJlZm9yZSwgdG8gYXZvaWQgd2FybmluZ3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1nZXQtc2Vjb25kLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRldGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC1zZWNvbmQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgc2Vjb25kIHJlcHJlc2VudGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtZ2V0LXllYXIiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9nZXRfeWVhcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLWdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgeWVhciBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+Ci1DYWxsIGdzdF9kYXRlX3RpbWVfaGFzX3llYXIgYmVmb3JlLCB0byBhdm9pZCB3YXJuaW5ncy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC15ZWFyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRldGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWdldC15ZWFyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHllYXIgb2YgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldyI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotZ3N0X2RhdGVfdGltZV9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IHR6b2Zmc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4geWVhcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1vbnRoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gZGF5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaG91cjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbnV0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHNlY29uZHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB1c2luZyB0aGUgZGF0ZSBhbmQgdGltZXMgaW4gdGhlIGdyZWdvcmlhbiBjYWxlbmRhcgotaW4gdGhlIHN1cHBsaWVkIHRpbWV6b25lLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT55ZWFyPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIGZyb20gMSB0byA5OTk5LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT4KLSBzaG91bGQgYmUgZnJvbSAxIHRvIDEyLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF5PC9jb2RlPjwvZW0+Ci0gZnJvbQotMSB0byAzMSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhvdXI8L2NvZGU+PC9lbT4KLSBmcm9tIDAgdG8gMjMsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW51dGVzPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWNvbmRzPC9jb2RlPjwvZW0+Ci0gZnJvbSAwIHRvIDU5LjwvcD4KLTxwPk5vdGUgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHpvZmZzZXQ8L2NvZGU+PC9lbT4KLSBpcyBhIGZsb2F0IGFuZCB3YXMgY2hvc2VuIHNvIGZvciBiZWluZyBhYmxlIHRvIGhhbmRsZQotc29tZSBmcmFjdGlvbmFsIHRpbWV6b25lcywgd2hpbGUgaXQgc3RpbGwga2VlcHMgdGhlIHJlYWRhYmlsaXR5IG9mCi1yZXByZXNlbnRpbmcgaXQgaW4gaG91cnMgZm9yIG1vc3QgdGltZXpvbmVzLjwvcD4KLTxwPklmIHZhbHVlIGlzIC0xIHRoZW4gYWxsIG92ZXIgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLiBGb3IgZXhhbXBsZQotaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vbnRoPC9jb2RlPjwvZW0+Ci0gPT0gLTEsIHRoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gd2lsbCBjcmVhdGVkIG9ubHkgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT55ZWFyPC9jb2RlPjwvZW0+Ci0uIElmCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF5PC9jb2RlPjwvZW0+Ci0gPT0gLTEsIHRoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gd2lsbCBjcmVhdGVkIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eWVhcjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT4KLSBhbmQKLXNvIG9uLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50em9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk9mZnNldCBmcm9tIFVUQyBpbiBob3Vycy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+eWVhcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBncmVnb3JpYW4geWVhcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb250aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBncmVnb3JpYW4gbW9udGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRheSBvZiB0aGUgZ3JlZ29yaWFuIG1vbnRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmhvdXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaG91ciBvZiB0aGUgZGF5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbnV0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtaW51dGUgb2YgdGhlIGhvdXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vjb25kczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3bHkgY3JlYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXcteW1kIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfbmV3X3ltZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotZ3N0X2RhdGVfdGltZV9uZXdfeW1kICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHllYXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbW9udGg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gZGF5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdXNpbmcgdGhlIGRhdGUgYW5kIHRpbWVzIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIKLWluIHRoZSBsb2NhbCB0aW1lem9uZS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eWVhcjwvY29kZT48L2VtPgotIHNob3VsZCBiZSBmcm9tIDEgdG8gOTk5OSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vbnRoPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIGZyb20gMSB0byAxMiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRheTwvY29kZT48L2VtPgotIGZyb20KLTEgdG8gMzEuPC9wPgotPHA+SWYgdmFsdWUgaXMgLTEgdGhlbiBhbGwgb3ZlciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuIEZvciBleGFtcGxlCi1pZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT4KLSA9PSAtMSwgdGhlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB3aWxsIGNyZWF0ZWQgb25seSBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnllYXI8L2NvZGU+PC9lbT4KLS4gSWYKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXk8L2NvZGU+PC9lbT4KLSA9PSAtMSwgdGhlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB3aWxsIGNyZWF0ZWQgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT55ZWFyPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb250aDwvY29kZT48L2VtPgotIGFuZAotc28gb24uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LXltZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD55ZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyZWdvcmlhbiB5ZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vbnRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyZWdvcmlhbiBtb250aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGF5IG9mIHRoZSBncmVnb3JpYW4gbW9udGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LXltZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXdseSBjcmVhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy15bSI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX25ld195bcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotZ3N0X2RhdGVfdGltZV9uZXdfeW0gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4geWVhcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1vbnRoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdXNpbmcgdGhlIGRhdGUgYW5kIHRpbWVzIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIKLWluIHRoZSBsb2NhbCB0aW1lem9uZS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eWVhcjwvY29kZT48L2VtPgotIHNob3VsZCBiZSBmcm9tIDEgdG8gOTk5OSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vbnRoPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIGZyb20gMSB0byAxMi48L3A+Ci08cD5JZiB2YWx1ZSBpcyAtMSB0aGVuIGFsbCBvdmVyIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gRm9yIGV4YW1wbGUKLWlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb250aDwvY29kZT48L2VtPgotID09IC0xLCB0aGVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+IHdpbGwgY3JlYXRlZCBvbmx5IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eWVhcjwvY29kZT48L2VtPgotLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy15bS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD55ZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyZWdvcmlhbiB5ZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vbnRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyZWdvcmlhbiBtb250aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXcteW0ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3bHkgY3JlYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXcteSI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX25ld195wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+wqAqCi1nc3RfZGF0ZV90aW1lX25ld195ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHllYXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB1c2luZyB0aGUgZGF0ZSBhbmQgdGltZXMgaW4gdGhlIGdyZWdvcmlhbiBjYWxlbmRhcgotaW4gdGhlIGxvY2FsIHRpbWV6b25lLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT55ZWFyPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIGZyb20gMSB0byA5OTk5LjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy15LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD55ZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyZWdvcmlhbiB5ZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXcteS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXdseSBjcmVhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLXVuaXgtZXBvY2gtbG9jYWwtdGltZSI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2VjczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+IHVzaW5nIHRoZSB0aW1lIHNpbmNlIEphbiAxLCAxOTcwIHNwZWNpZmllZCBieQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlY3M8L2NvZGU+PC9lbT4KLS4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+IGlzIGluIHRoZSBsb2NhbCB0aW1lem9uZS48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfZGF0ZV90aW1lX3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLWxvY2FsLXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlY3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zZWNvbmRzIGZyb20gdGhlIFVuaXggZXBvY2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLXVuaXgtZXBvY2gtbG9jYWwtdGltZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXdseSBjcmVhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLXVuaXgtZXBvY2gtdXRjIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT7CoCoKLWdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHNlY3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB1c2luZyB0aGUgdGltZSBzaW5jZSBKYW4gMSwgMTk3MCBzcGVjaWZpZWQgYnkKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWNzPC9jb2RlPjwvZW0+Ci0uIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiBpcyBpbiB0aGUgVVRDIHRpbWV6b25lLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLXVuaXgtZXBvY2gtdXRjLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2Vjb25kcyBmcm9tIHRoZSBVbml4IGVwb2NoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLXV0Yy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXdseSBjcmVhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy1sb2NhbC10aW1lIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfbmV3X2xvY2FsX3RpbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT7CoCoKLWdzdF9kYXRlX3RpbWVfbmV3X2xvY2FsX3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4geWVhcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbW9udGg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRheTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaG91cjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWludXRlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBzZWNvbmRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdXNpbmcgdGhlIGRhdGUgYW5kIHRpbWVzIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIKLWluIHRoZSBsb2NhbCB0aW1lem9uZS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eWVhcjwvY29kZT48L2VtPgotIHNob3VsZCBiZSBmcm9tIDEgdG8gOTk5OSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vbnRoPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIGZyb20gMSB0byAxMiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRheTwvY29kZT48L2VtPgotIGZyb20KLTEgdG8gMzEsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ob3VyPC9jb2RlPjwvZW0+Ci0gZnJvbSAwIHRvIDIzLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludXRlczwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2Vjb25kczwvY29kZT48L2VtPgotIGZyb20gMCB0byA1OS48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT4KLSBpcyAtMSwgdGhlbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gY3JlYXRlZCB3aWxsIG9ubHkgY29udGFpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+eWVhcjwvY29kZT48L2VtPgotLAotYW5kIGFsbCBvdGhlciBmaWVsZHMgd2lsbCBiZSBjb25zaWRlcmVkIG5vdCBzZXQuPC9wPgotPHA+SWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRheTwvY29kZT48L2VtPgotIGlzIC0xLCB0aGVuIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiBjcmVhdGVkIHdpbGwgb25seSBjb250YWluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT55ZWFyPC9jb2RlPjwvZW0+Ci0gYW5kCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT4KLSBhbmQgYWxsIG90aGVyIGZpZWxkcyB3aWxsIGJlIGNvbnNpZGVyZWQgbm90IHNldC48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aG91cjwvY29kZT48L2VtPgotIGlzIC0xLCB0aGVuIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiBjcmVhdGVkIHdpbGwgb25seSBjb250YWluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT55ZWFyPC9jb2RlPjwvZW0+Ci0gYW5kCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9udGg8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRheTwvY29kZT48L2VtPgotLCBhbmQgdGhlIHRpbWUgZmllbGRzIHdpbGwgYmUgY29uc2lkZXJlZCBub3Qgc2V0LiBJbiB0aGlzCi1jYXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW51dGU8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlY29uZHM8L2NvZGU+PC9lbT4KLSBzaG91bGQgYWxzbyBiZSAtMS48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfZGF0ZV90aW1lX3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctbG9jYWwtdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD55ZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyZWdvcmlhbiB5ZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vbnRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyZWdvcmlhbiBtb250aCwgb3IgLTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRheSBvZiB0aGUgZ3JlZ29yaWFuIG1vbnRoLCBvciAtMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ob3VyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGhvdXIgb2YgdGhlIGRheSwgb3IgLTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWludXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1pbnV0ZSBvZiB0aGUgaG91ciwgb3IgLTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vjb25kczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgb3IgLTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LWxvY2FsLXRpbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3bHkgY3JlYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctbm93LWxvY2FsLXRpbWUiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT7CoCoKLWdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LW5vdy1sb2NhbC10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ld2x5IGNyZWF0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gd2hpY2ggc2hvdWxkCi1iZSBmcmVlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGF0ZV90aW1lX3VucmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctbm93LXV0YyI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+wqAqCi1nc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGluc3RhbnQgYXQgVW5pdmVyc2FsCi1jb29yZGluYXRlZCB0aW1lLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLW5ldy1ub3ctdXRjLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ld2x5IGNyZWF0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gd2hpY2ggc2hvdWxkCi1iZSBmcmVlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGF0ZV90aW1lX3VucmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1yZWYiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT7CoCoKLWdzdF9kYXRlX3RpbWVfcmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkF0b21pY2FsbHkgaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgotIGJ5IG9uZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLXJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0ZXRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1yZWYucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcmVmZXJlbmNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLXVucmVmIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfdW5yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGF0ZV90aW1lX3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkF0b21pY2FsbHkgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgotIGJ5IG9uZS4gIFdoZW4gdGhlCi1yZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLCB0aGUgc3RydWN0dXJlIGlzIGZyZWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtdW5yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGV0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1oYXMtZGF5Ij48L2E+PGgzPmdzdF9kYXRlX3RpbWVfaGFzX2RhecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RhdGVfdGltZV9oYXNfZGF5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtaGFzLWRheS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0ZXRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1oYXMtZGF5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRldGltZTwvY29kZT48L2VtPgotJ3MgZGF5IGZpZWxkIGlzIHNldCwgb3RoZXJ3aXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtaGFzLW1vbnRoIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfaGFzX21vbnRowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2hhc19tb250aCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICpkYXRldGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWhhcy1tb250aC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0ZXRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1oYXMtbW9udGgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+Ci0ncyBtb250aCBmaWVsZCBpcyBzZXQsIG90aGVyd2lzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWhhcy1zZWNvbmQiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1oYXMtc2Vjb25kLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRldGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLWhhcy1zZWNvbmQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+Ci0ncyBzZWNvbmQgZmllbGQgaXMgc2V0LCBvdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1oYXMtdGltZSI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX2hhc190aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2hhc190aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtaGFzLXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGV0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtaGFzLXRpbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+Ci0ncyBob3VyIGFuZCBtaW51dGUgZmllbGRzIGFyZSBzZXQsCi1vdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1oYXMteWVhciI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX2hhc195ZWFywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGF0ZV90aW1lX2hhc195ZWFyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtaGFzLXllYXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGV0aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtaGFzLXllYXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGV0aW1lPC9jb2RlPjwvZW0+Ci0ncyB5ZWFyIGZpZWxkIGlzIHNldCAod2hpY2ggc2hvdWxkIGFsd2F5cwotYmUgdGhlIGNhc2UpLCBvdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctZnJvbS1pc284NjAxLXN0cmluZyI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+wqAqCi1nc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnN0cmluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmllcyB0byBwYXJzZSBjb21tb24gdmFyaWFudHMgb2YgSVNPLTg2MDEgZGF0ZXRpbWUgc3RyaW5ncyBpbnRvIGEKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LiBQb3NzaWJsZSBpbnB1dCBmb3JtYXRzIGFyZSAoZm9yIGV4YW1wbGUpOgotMjAxMi0wNi0zMFQyMjo0Njo0M1osIDIwMTIsIDIwMTItMDYsIDIwMTItMDYtMzAsIDIwMTItMDYtMzBUMjI6NDY6NDMtMDQzMCwKLTIwMTItMDYtMzBUMjI6NDZaLCAyMDEyLTA2LTMwVDIyOjQ2LTA0MzAsIDIwMTItMDYtMzAgMjI6NDYsCi0yMDEyLTA2LTMwIDIyOjQ2OjQzLCAyMDEyLTA2LTAwLCAyMDEyLTAwLTAwLCAyMDEyLTAwLTMwLCAyMjo0Njo0M1osIDIyOjQ2WiwKLTIyOjQ2OjQzLTA0MzAsIDIyOjQ2LTA0MzAsIDIyOjQ2OjMwLCAyMjo0NgotSWYgbm8gZGF0ZSBpcyBwcm92aWRlZCwgaXQgaXMgYXNzdW1lZCB0byBiZSAidG9kYXkiIGluIHRoZSB0aW1lem9uZQotcHJvdmlkZWQgKGlmIGFueSksIG90aGVyd2lzZSBVVEMuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LWZyb20taXNvODYwMS1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPklTTyA4NjAxLWZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS1uZXctZnJvbS1pc284NjAxLXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3bHkgY3JlYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBvbiBlcnJvci4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLXRvLWlzbzg2MDEtc3RyaW5nIj48L2E+PGgzPmdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqZGF0ZXRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbWluaW1hbCBzdHJpbmcgY29tcGF0aWJsZSB3aXRoIElTTy04NjAxLiBQb3NzaWJsZSBvdXRwdXQgZm9ybWF0cwotYXJlIChmb3IgZXhhbXBsZSk6IDIwMTIsIDIwMTItMDYsIDIwMTItMDYtMjMsIDIwMTItMDYtMjNUMjM6MzBaLAotMjAxMi0wNi0yM1QyMzozMCswMTAwLCAyMDEyLTA2LTIzVDIzOjMwOjU5WiwgMjAxMi0wNi0yM1QyMzozMDo1OSswMTAwPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS10by1pc284NjAxLXN0cmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0ZXRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Hc3REYXRlVGltZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLXRvLWlzbzg2MDEtc3RyaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGZvcm1hdHRlZCBhY2NvcmRpbmcKLXRvIElTTyA4NjAxIGFuZCBvbmx5IGluY2x1ZGluZyB0aGUgZGF0ZXRpbWUgZmllbGRzIHRoYXQgYXJlCi12YWxpZCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGluIGNhc2UgdGhlcmUgd2FzIGFuIGVycm9yLiBUaGUgc3RyaW5nIHNob3VsZAotYmUgZnJlZWQgd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LWZyb20tZy1kYXRlLXRpbWUiPjwvYT48aDM+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nX2RhdGVfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPsKgKgotZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nX2RhdGVfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUdEYXRlVGltZS5odG1sI0dEYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEYXRlVGltZTwvc3Bhbj48L2E+ICpkdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+IGZyb20gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1HRGF0ZVRpbWUuaHRtbCNHRGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGF0ZVRpbWU8L3NwYW4+PC9hPiBvYmplY3QuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LWZyb20tZy1kYXRlLXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmR0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1HRGF0ZVRpbWUuaHRtbCNHRGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGF0ZVRpbWU8L3NwYW4+PC9hPi4gVGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB0YWtlcyBvd25lcnNoaXAuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRlLXRpbWUtbmV3LWZyb20tZy1kYXRlLXRpbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5IGNyZWF0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4sCi1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb24gZXJyb3IuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS10by1nLWRhdGUtdGltZSI+PC9hPjxoMz5nc3RfZGF0ZV90aW1lX3RvX2dfZGF0ZV90aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItR0RhdGVUaW1lLmh0bWwjR0RhdGVUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdEYXRlVGltZTwvc3Bhbj48L2E+wqAqCi1nc3RfZGF0ZV90aW1lX3RvX2dfZGF0ZV90aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKmRhdGV0aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItR0RhdGVUaW1lLmh0bWwjR0RhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R0RhdGVUaW1lPC9zcGFuPjwvYT4gZnJvbSBhIGZ1bGx5IGRlZmluZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gb2JqZWN0LjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdfZGF0ZV90aW1lX3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGUtdGltZS10by1nLWRhdGUtdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0ZXRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Hc3REYXRlVGltZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0ZS10aW1lLXRvLWctZGF0ZS10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXdseSBjcmVhdGVkIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUdEYXRlVGltZS5odG1sI0dEYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEYXRlVGltZTwvc3Bhbj48L2E+LCBvcgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IG9uIGVycm9yLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RGF0ZVRpbWUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERhdGVUaW1lLXN0cnVjdCI+PC9hPjxoMz5Hc3REYXRlVGltZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdERhdGVUaW1lIEdzdERhdGVUaW1lOzwvcHJlPgotPHA+T3BhcXVlLCBpbW11dGFibGUsIHJlZmNvdW50ZWQgc3RydWN0IHRoYXQgc3RvcmVzIGRhdGUsIHRpbWUgYW5kIHRpbWV6b25lCi1pbmZvcm1hdGlvbi4gSXQgY3VycmVudGx5IHN1cHBvcnRzIHJhbmdlcyBmcm9tIDAwMDEtMDEtMDEgdG8KLTk5OTktMTItMzEgaW4gdGhlIEdyZWdvcmlhbiBwcm9sZXB0aWMgY2FsZW5kYXIuPC9wPgotPHA+VXNlIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBzdG9yZWQgdmFsdWVzLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRZUEUtREFURS1USU1FOkNBUFMiPjwvYT48aDM+R1NUX1RZUEVfREFURV9USU1FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UWVBFX0RBVEVfVElNRSAoX2dzdF9kYXRlX3RpbWVfdHlwZSkKLTwvcHJlPgotPHA+YSBib3hlZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHR5cGUgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+IHRoYXQgcmVwcmVzZW50cyBhIGRhdGUgYW5kIHRpbWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVRZUEUtREFURS1USU1FLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0RGF0ZVRpbWU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRhMWQ2Ni4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItZGV2aWNlLXByb2JpbmcuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEZXZpY2UgRGlzY292ZXJ5IGFuZCBEZXZpY2UgUHJvYmluZyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgU3VwcG9ydCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdERldmljZVByb3ZpZGVyRmFjdG9yeS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItZGV2aWNlLXByb2JpbmcuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS50b3Bfb2ZfcGFnZSI+PC9hPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvc3Bhbj48L2gyPgotPHA+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5IOKAlCBDcmVhdGUgR3N0RGV2aWNlUHJvdmlkZXJzIGZyb20gYSBmYWN0b3J5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1maW5kIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2ZpbmTCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZmluZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZ2V0IiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldMKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdUeXBlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtZGV2aWNlLXByb3ZpZGVyLXR5cGUiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2RldmljZV9wcm92aWRlcl90eXBlwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9kZXZpY2VfcHJvdmlkZXJfdHlwZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9tZXRhZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKioKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtbWV0YWRhdGEta2V5cyIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5c8KgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWhhcy1jbGFzc2VzIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktaGFzLWNsYXNzZXN2IiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzdsKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3Nlc3Y8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWxpc3QtZ2V0LWRldmljZS1wcm92aWRlcnMiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfbGlzdF9nZXRfZGV2aWNlX3Byb3ZpZGVyc8KgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9saXN0X2dldF9kZXZpY2VfcHJvdmlkZXJzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNHc3REZXZpY2VQcm92aWRlckZhY3Rvcnktc3RydWN0IiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI0dzdERldmljZVByb3ZpZGVyRmFjdG9yeUNsYXNzIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3MiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeUNsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3REZXZpY2VQcm92aWRlckZhY3RvcnkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvc3Bhbj48L2E+IGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiBkZXZpY2UgcHJvdmlkZXJzLiBBCi1Hc3REZXZpY2VQcm92aWRlcmZhY3RvcnkgY2FuIGJlIGFkZGVkIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gYXMgaXQgaXMgYWxzbyBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPi48L3A+Ci08cD5Vc2UgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZmluZCIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZmluZCgpPC9jb2RlPjwvYT4gYW5kCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldCIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXQoKTwvY29kZT48L2E+IGZ1bmN0aW9ucyB0byBjcmVhdGUgZGV2aWNlCi1wcm92aWRlciBpbnN0YW5jZXMgb3IgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZ2V0LWJ5LW5hbWUiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2J5X25hbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfYnlfbmFtZSgpPC9jb2RlPjwvYT4gYXMgYQotY29udmVuaWVudCBzaG9ydGN1dC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWZpbmQiPjwvYT48aDM+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2ZpbmTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT7CoCoKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2VhcmNoIGZvciBhbiBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBvZiB0aGUgZ2l2ZW4gbmFtZS4gUmVmcyB0aGUgcmV0dXJuZWQKLWRldmljZSBwcm92aWRlciBmYWN0b3J5OyBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZmluZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgZmFjdG9yeSB0byBmaW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWZpbmQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L3NwYW4+PC9hPiBpZgotZm91bmQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBvdGhlcndpc2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldCI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT7CoCoKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBkZXZpY2UgcHJvdmlkZXIgb2YgdGhlIHR5cGUgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZGV2aWNlCi1wcm92aWRlcmZhY3RvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZhY3RvcnkgdG8gaW5zdGFudGlhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZ2V0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci1pZiB0aGUgZGV2aWNlIHByb3ZpZGVyIGNvdWxkbid0IGJlIGNyZWF0ZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1ieS1uYW1lIj48L2E+PGgzPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfYnlfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+wqAqCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2J5X25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmYWN0b3J5bmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBkZXZpY2UgcHJvdmlkZXIgb2YgdGhlIHR5cGUgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZGV2aWNlCi1wcm92aWRlciBmYWN0b3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtYnktbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeW5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIG5hbWVkIGZhY3RvcnkgdG8gaW5zdGFudGlhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZ2V0LWJ5LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci1pZiB1bmFibGUgdG8gY3JlYXRlIGRldmljZSBwcm92aWRlci4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZ2V0LWRldmljZS1wcm92aWRlci10eXBlIj48L2E+PGgzPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfZGV2aWNlX3Byb3ZpZGVyX3R5cGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9kZXZpY2VfcHJvdmlkZXJfdHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IGZvciBkZXZpY2UgcHJvdmlkZXJzIG1hbmFnZWQgYnkgdGhpcyBmYWN0b3J5LiBUaGUgdHlwZSBjYW4KLW9ubHkgYmUgcmV0cmlldmVkIGlmIHRoZSBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBpcyBsb2FkZWQsIHdoaWNoIGNhbiBiZQotYXNzdXJlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxvYWQiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtZGV2aWNlLXByb3ZpZGVyLXR5cGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mYWN0b3J5IHRvIGdldCBtYW5hZ2VkIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtZGV2aWNlLXByb3ZpZGVyLXR5cGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBmb3IgZGV2aWNlIHByb3ZpZGVycyBtYW5hZ2VkIGJ5IHRoaXMgZmFjdG9yeS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1tZXRhZGF0YSI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X21ldGFkYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X21ldGFkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICprZXk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBtZXRhZGF0YSBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPgotIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtleTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtbWV0YWRhdGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+a2V5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBrZXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtbWV0YWRhdGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWV0YWRhdGEgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+Ci1vbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci13aGVuIHRoZXJlIHdhcyBubyBtZXRhZGF0YSB3aXRoIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1tZXRhZGF0YS1rZXlzIj48L2E+PGgzPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKioKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBhdmFpbGFibGUga2V5cyBmb3IgdGhlIG1ldGFkYXRhIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1tZXRhZGF0YS1rZXlzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mYWN0b3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtbWV0YWRhdGEta2V5cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBhcnJheSBvZiBrZXkgc3RyaW5ncywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhlcmUgaXMgbm8KLW1ldGFkYXRhLiBGcmVlIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RyaW5nLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjZy1zdHJmcmVldiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3N0cmZyZWV2KCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gdXRmOF1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWhhcy1jbGFzc2VzIj48L2E+PGgzPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3Nlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjbGFzc2VzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+Ci0gbWF0Y2hlcyBhbGwgb2YgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbGFzc2VzPC9jb2RlPjwvZW0+Ci08L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktaGFzLWNsYXNzZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xhc3NlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhICIvIiBzZXBhcmF0ZSBsaXN0IG9mIGNsYXNzZXMgdG8gbWF0Y2gsIG9ubHkgbWF0Y2gKLWlmIGFsbCBjbGFzc2VzIGFyZSBtYXRjaGVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWhhcy1jbGFzc2VzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+Ci1tYXRjaGVzIG9yIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbGFzc2VzPC9jb2RlPjwvZW0+Ci1pcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1oYXMtY2xhc3Nlc3YiPjwvYT48aDM+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzdsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzdgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmNsYXNzZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT4KLSBtYXRjaGVzIGFsbCBvZiB0aGUgZ2l2ZW4gY2xhc3NlczwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1oYXMtY2xhc3Nlc3YucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xhc3NlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0ZXJtaW5hdGVkIGFycmF5Ci1vZiBjbGFzc2VzIHRvIG1hdGNoLCBvbmx5IG1hdGNoIGlmIGFsbCBjbGFzc2VzIGFyZSBtYXRjaGVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWhhcy1jbGFzc2Vzdi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPgotbWF0Y2hlcy48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWxpc3QtZ2V0LWRldmljZS1wcm92aWRlcnMiPjwvYT48aDM+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2xpc3RfZ2V0X2RldmljZV9wcm92aWRlcnPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2xpc3RfZ2V0X2RldmljZV9wcm92aWRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UmFuayIgdGl0bGU9ImVudW0gR3N0UmFuayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJhbms8L3NwYW4+PC9hPiBtaW5yYW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIGxpc3Qgb2YgZmFjdG9yaWVzIHdpdGggYSByYW5rIGdyZWF0ZXIgb3IgZXF1YWwgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbnJhbms8L2NvZGU+PC9lbT4KLS4KLVRoZSBsaXN0IG9mIGZhY3RvcmllcyBpcyByZXR1cm5lZCBieSBkZWNyZWFzaW5nIHJhbmsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWxpc3QtZ2V0LWRldmljZS1wcm92aWRlcnMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbnJhbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5NaW5pbXVtIHJhbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktbGlzdC1nZXQtZGV2aWNlLXByb3ZpZGVycy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvc3Bhbj48L2E+IGRldmljZSBwcm92aWRlcnMuIFVzZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LkRldmljZVByb3ZpZGVyRmFjdG9yeV08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZXZpY2VQcm92aWRlckZhY3Rvcnktc3RydWN0Ij48L2E+PGgzPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdERldmljZVByb3ZpZGVyRmFjdG9yeSBHc3REZXZpY2VQcm92aWRlckZhY3Rvcnk7PC9wcmU+Ci08cD5UaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3MiPjwvYT48aDM+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzcyBHc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzczs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI0dzdERldmljZVByb3ZpZGVyRmFjdG9yeUNsYXNzIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzczwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3REZXZpY2VQcm92aWRlckZhY3Rvcnkuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0RWxlbWVudC5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RFbGVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNDAyNjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RFbGVtZW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NTc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RFbGVtZW50OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEVsZW1lbnQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEVsZW1lbnQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2Rlcml2ZWRfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RFbGVtZW50LmRlcml2ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5Lbm93biBEZXJpdmVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RFbGVtZW50LnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3REYXRlVGltZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RFbGVtZW50Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0RWxlbWVudC50b3Bfb2ZfcGFnZSI+PC9hPkdzdEVsZW1lbnQ8L3NwYW4+PC9oMj4KLTxwPkdzdEVsZW1lbnQg4oCUIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBwaXBlbGluZSBlbGVtZW50czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RFbGVtZW50LmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEU6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURSgpIj5HU1RfU1RBVEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1HRVQtTkVYVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX0dFVF9ORVhUKCkiPkdTVF9TVEFURV9HRVRfTkVYVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLU5FWFQ6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9ORVhUKCkiPkdTVF9TVEFURV9ORVhUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUEVORElORzpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1BFTkRJTkcoKSI+R1NUX1NUQVRFX1BFTkRJTkc8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1SRVRVUk46Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9SRVRVUk4oKSI+R1NUX1NUQVRFX1JFVFVSTjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRBUkdFVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1RBUkdFVCgpIj5HU1RfU1RBVEVfVEFSR0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVFJBTlNJVElPTjpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1RSQU5TSVRJT04oKSI+R1NUX1NUQVRFX1RSQU5TSVRJT048L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1UUkFOU0lUSU9OLUNVUlJFTlQ6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQoKSI+R1NUX1NUQVRFX1RSQU5TSVRJT05fQ1VSUkVOVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT04tTkVYVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCgpIj5HU1RfU1RBVEVfVFJBTlNJVElPTl9ORVhUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtR0VULUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9HRVRfTE9DSygpIj5HU1RfU1RBVEVfR0VUX0xPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1HRVQtQ09ORDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX0dFVF9DT05EKCkiPkdTVF9TVEFURV9HRVRfQ09ORDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTkFNRSgpIj5HU1RfRUxFTUVOVF9OQU1FPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1QQVJFTlQ6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX1BBUkVOVCgpIj5HU1RfRUxFTUVOVF9QQVJFTlQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUJVUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfQlVTKCkiPkdTVF9FTEVNRU5UX0JVUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtQ0xPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0NMT0NLKCkiPkdTVF9FTEVNRU5UX0NMT0NLPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1QQURTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9QQURTKCkiPkdTVF9FTEVNRU5UX1BBRFM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVNUQVJULVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX1NUQVJUX1RJTUUoKSI+R1NUX0VMRU1FTlRfU1RBUlRfVElNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0VSUk9SKCkiPkdTVF9FTEVNRU5UX0VSUk9SPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1FUlJPUi1XSVRILURFVEFJTFM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0VSUk9SX1dJVEhfREVUQUlMUygpIj5HU1RfRUxFTUVOVF9FUlJPUl9XSVRIX0RFVEFJTFM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUZMT1ctRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZMT1dfRVJST1IoKSI+R1NUX0VMRU1FTlRfRkxPV19FUlJPUjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtV0FSTklORzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfV0FSTklORygpIj5HU1RfRUxFTUVOVF9XQVJOSU5HPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1XQVJOSU5HLVdJVEgtREVUQUlMUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfV0FSTklOR19XSVRIX0RFVEFJTFMoKSI+R1NUX0VMRU1FTlRfV0FSTklOR19XSVRIX0RFVEFJTFM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUlORk86Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0lORk8oKSI+R1NUX0VMRU1FTlRfSU5GTzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtSU5GTy1XSVRILURFVEFJTFM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0lORk9fV0lUSF9ERVRBSUxTKCkiPkdTVF9FTEVNRU5UX0lORk9fV0lUSF9ERVRBSUxTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1MT0NLRUQtU1RBVEU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURSgpIj5HU1RfRUxFTUVOVF9JU19MT0NLRURfU1RBVEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1wYWQtdGVtcGxhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlwqAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1hZGQtc3RhdGljLXBhZC10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlwqAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZcKgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWdldC1wYWQtdGVtcGxhdGUtbGlzdCIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdMKgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1zZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGHCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3Mtc2V0LXN0YXRpYy1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGHCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YcKgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1hZGQtc3RhdGljLW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YcKgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfbWV0YWRhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfYWRkX3BhZMKgKCkiPmdzdF9lbGVtZW50X2FkZF9wYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY3JlYXRlLWFsbC1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzwqAoKSI+Z3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXRpYy1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZMKgKCkiPmdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZMKgKCkiPmdzdF9lbGVtZW50X3JlcXVlc3RfcGFkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LW5vLW1vcmUtcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X25vX21vcmVfcGFkc8KgKCkiPmdzdF9lbGVtZW50X25vX21vcmVfcGFkczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZMKgKCkiPmdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZW1vdmUtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZMKgKCkiPmdzdF9lbGVtZW50X3JlbW92ZV9wYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkc8KgKCkiPmdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zaW5rLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkc8KgKCkiPmdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pdGVyYXRlLXNyYy1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkc8KgKCkiPmdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua8KgKCkiPmdzdF9lbGVtZW50X2xpbms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rIiB0aXRsZT0iZ3N0X2VsZW1lbnRfdW5saW5rwqAoKSI+Z3N0X2VsZW1lbnRfdW5saW5rPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1tYW55IiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19tYW55wqAoKSI+Z3N0X2VsZW1lbnRfbGlua19tYW55PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXVubGluay1tYW55IiB0aXRsZT0iZ3N0X2VsZW1lbnRfdW5saW5rX21hbnnCoCgpIj5nc3RfZWxlbWVudF91bmxpbmtfbWFueTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfcGFkc8KgKCkiPmdzdF9lbGVtZW50X2xpbmtfcGFkczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcy1mdWxsIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGzCoCgpIj5nc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC11bmxpbmstcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X3VubGlua19wYWRzwqAoKSI+Z3N0X2VsZW1lbnRfdW5saW5rX3BhZHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLXBhZHMtZmlsdGVyZWQiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWTCoCgpIj5nc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZMKgKCkiPmdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhwqAoKSI+Z3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1iYXNlLXRpbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lwqAoKSI+Z3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1iYXNlLXRpbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhcnQtdGltZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lwqAoKSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhcnQtdGltZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJ1cyIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9idXPCoCgpIj5nc3RfZWxlbWVudF9zZXRfYnVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJ1cyIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9idXPCoCgpIj5nc3RfZWxlbWVudF9nZXRfYnVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1jb250ZXh0IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHTCoCgpIj5nc3RfZWxlbWVudF9zZXRfY29udGV4dDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jb250ZXh0IiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHTCoCgpIj5nc3RfZWxlbWVudF9nZXRfY29udGV4dDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jb250ZXh0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRfdW5sb2NrZWTCoCgpIj5nc3RfZWxlbWVudF9nZXRfY29udGV4dF91bmxvY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbnRleHRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRzwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWZhY3RvcnkiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfZmFjdG9yecKgKCkiPmdzdF9lbGVtZW50X2dldF9mYWN0b3J5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X25hbWUoKSI+Z3N0X2VsZW1lbnRfc2V0X25hbWU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X25hbWUoKSI+Z3N0X2VsZW1lbnRfZ2V0X25hbWU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1wYXJlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfcGFyZW50KCkiPmdzdF9lbGVtZW50X3NldF9wYXJlbnQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1wYXJlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfcGFyZW50KCkiPmdzdF9lbGVtZW50X2dldF9wYXJlbnQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrwqAoKSI+Z3N0X2VsZW1lbnRfc2V0X2Nsb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2Nsb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcHJvdmlkZS1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2vCoCgpIj5nc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGF0ZcKgKCkiPmdzdF9lbGVtZW50X3NldF9zdGF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfc3RhdGXCoCgpIj5nc3RfZWxlbWVudF9nZXRfc3RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtbG9ja2VkLXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZcKgKCkiPmdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pcy1sb2NrZWQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGXCoCgpIj5nc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWJvcnQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZcKgKCkiPmdzdF9lbGVtZW50X2Fib3J0X3N0YXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNvbnRpbnVlLXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGXCoCgpIj5nc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1sb3N0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZcKgKCkiPmdzdF9lbGVtZW50X2xvc3Rfc3RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3RhdGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZcKgKCkiPmdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXN0YXRlLWNoYW5nZS1yZXR1cm4tZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lwqAoKSI+Z3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXN5bmMtc3RhdGUtd2l0aC1wYXJlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50wqAoKSI+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jaGFuZ2Utc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGXCoCgpIj5nc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbWVzc2FnZS1mdWxsIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxswqAoKSI+Z3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LW1lc3NhZ2UtZnVsbC13aXRoLWRldGFpbHMiIHRpdGxlPSJnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzwqAoKSI+Z3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsX3dpdGhfZGV0YWlsczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1tYWtlLWVsZW1lbnQtbWVzc2FnZS1kZXRhaWxzIiB0aXRsZT0iZ3N0X21ha2VfZWxlbWVudF9tZXNzYWdlX2RldGFpbHPCoCgpIj5nc3RfbWFrZV9lbGVtZW50X21lc3NhZ2VfZGV0YWlsczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXBvc3QtbWVzc2FnZSIgdGl0bGU9ImdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZcKgKCkiPmdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5IiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnnCoCgpIj5nc3RfZWxlbWVudF9xdWVyeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5LWNvbnZlcnQiIHRpdGxlPSJnc3RfZWxlbWVudF9xdWVyeV9jb252ZXJ0wqAoKSI+Z3N0X2VsZW1lbnRfcXVlcnlfY29udmVydDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5LXBvc2l0aW9uIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb27CoCgpIj5nc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5LWR1cmF0aW9uIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb27CoCgpIj5nc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlbmQtZXZlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9zZW5kX2V2ZW50wqAoKSI+Z3N0X2VsZW1lbnRfc2VuZF9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlZWstc2ltcGxlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2Vla19zaW1wbGXCoCgpIj5nc3RfZWxlbWVudF9zZWVrX3NpbXBsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlZWsiIHRpdGxlPSJnc3RfZWxlbWVudF9zZWVrwqAoKSI+Z3N0X2VsZW1lbnRfc2VlazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1bG9uZzwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWRkLXByb3BlcnR5LW5vdGlmeS13YXRjaCIgdGl0bGU9ImdzdF9lbGVtZW50X2FkZF9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2jCoCgpIj5nc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3Vsb25nPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcHJvcGVydHktZGVlcC1ub3RpZnktd2F0Y2giIHRpdGxlPSJnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2jCoCgpIj5nc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVtb3ZlLXByb3BlcnR5LW5vdGlmeS13YXRjaCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlbW92ZV9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2jCoCgpIj5nc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDYWxsQXN5bmNGdW5jIiB0aXRsZT0iR3N0RWxlbWVudENhbGxBc3luY0Z1bmPCoCgpIj4qR3N0RWxlbWVudENhbGxBc3luY0Z1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2FsbC1hc3luYyIgdGl0bGU9ImdzdF9lbGVtZW50X2NhbGxfYXN5bmPCoCgpIj5nc3RfZWxlbWVudF9jYWxsX2FzeW5jPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RWxlbWVudC5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LW5vLW1vcmUtcGFkcyIgdGl0bGU9IlRoZSDigJxuby1tb3JlLXBhZHPigJ0gc2lnbmFsIj5uby1tb3JlLXBhZHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1wYWQtYWRkZWQiIHRpdGxlPSJUaGUg4oCccGFkLWFkZGVk4oCdIHNpZ25hbCI+cGFkLWFkZGVkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtcGFkLXJlbW92ZWQiIHRpdGxlPSJUaGUg4oCccGFkLXJlbW92ZWTigJ0gc2lnbmFsIj5wYWQtcmVtb3ZlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RFbGVtZW50Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+R3N0RWxlbWVudENsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEVsZW1lbnRGbGFncyI+R3N0RWxlbWVudEZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPkdzdFN0YXRlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPkdzdFN0YXRlQ2hhbmdlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtQVVUSE9SOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1IiPkdTVF9FTEVNRU5UX01FVEFEQVRBX0FVVEhPUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLURFU0NSSVBUSU9OOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTiI+R1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT048L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1ET0MtVVJJOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtSUNPTi1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9JQ09OX05BTUUiPkdTVF9FTEVNRU5UX01FVEFEQVRBX0lDT05fTkFNRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUtMQVNTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyI+R1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1MT05HTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUiPkdTVF9FTEVNRU5UX01FVEFEQVRBX0xPTkdOQU1FPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0RWxlbWVudAotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnQuZGVyaXZlZC1pbnRlcmZhY2VzIj48L2E+PGgyPktub3duIERlcml2ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdEVsZW1lbnQgaXMgcmVxdWlyZWQgYnkKLSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RFbGVtZW50LmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+R3N0RWxlbWVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBuZWVkZWQgdG8gY29uc3RydWN0IGFuIGVsZW1lbnQgdGhhdAotY2FuIGJlIHVzZWQgaW4gYSBHU3RyZWFtZXIgcGlwZWxpbmUuIFBsZWFzZSByZWZlciB0byB0aGUgcGx1Z2luIHdyaXRlcnMKLWd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHN1YmNsYXNzZXMuPC9wPgotPHA+VGhlIG5hbWUgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjYW4gYmUgZ2V0IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtbmFtZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9uYW1lKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X25hbWUoKTwvY29kZT48L2E+IGFuZCBzZXQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtbmFtZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9uYW1lKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X25hbWUoKTwvY29kZT48L2E+LiAgRm9yIHNwZWVkLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX05BTUUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfRUxFTUVOVF9OQU1FKCk8L2NvZGU+PC9hPiBjYW4gYmUgdXNlZCBpbiB0aGUKLWNvcmUgd2hlbiB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbG9ja2luZy4gRG8gbm90IHVzZSB0aGlzIGluIHBsdWctaW5zIG9yCi1hcHBsaWNhdGlvbnMgaW4gb3JkZXIgdG8gcmV0YWluIEFCSSBjb21wYXRpYmlsaXR5LjwvcD4KLTxwPkVsZW1lbnRzIGNhbiBoYXZlIHBhZHMgKG9mIHRoZSB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+KS4gIFRoZXNlIHBhZHMgbGluayB0byBwYWRzIG9uCi1vdGhlciBlbGVtZW50cy4gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGZsb3cgYmV0d2VlbiB0aGVzZSBsaW5rZWQgcGFkcy4KLUEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaGFzIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmVzIGZvciBhbGwgdGhlaXIgaW5wdXQgKG9yIHNpbmspCi1hbmQgb3V0cHV0IChvciBzb3VyY2UpIHBhZHMuCi1Db3JlIGFuZCBwbHVnLWluIHdyaXRlcnMgY2FuIGFkZCBhbmQgcmVtb3ZlIHBhZHMgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFkZC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9hZGRfcGFkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9hZGRfcGFkKCk8L2NvZGU+PC9hPgotYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVtb3ZlLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlbW92ZV9wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3JlbW92ZV9wYWQoKTwvY29kZT48L2E+LjwvcD4KLTxwPkFuIGV4aXN0aW5nIHBhZCBvZiBhbiBlbGVtZW50IGNhbiBiZSByZXRyaWV2ZWQgYnkgbmFtZSB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0aWMtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKCk8L2NvZGU+PC9hPi4gQSBuZXcgZHluYW1pYyBwYWQgY2FuIGJlIGNyZWF0ZWQgdXNpbmcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQoKTwvY29kZT48L2E+IHdpdGggYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPi4KLUFuIGl0ZXJhdG9yIG9mIGFsbCBwYWRzIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5FbGVtZW50cyBjYW4gYmUgbGlua2VkIHRocm91Z2ggdGhlaXIgcGFkcy4KLUlmIHRoZSBsaW5rIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgdXNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmsiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rKCk8L2NvZGU+PC9hPgotY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbGluayB0d28gZWxlbWVudHMsIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1tYW55IiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19tYW55wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rX21hbnkoKTwvY29kZT48L2E+Ci1mb3IgbW9yZSBlbGVtZW50cyBpbiBhIHJvdy4KLVVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstZmlsdGVyZWQiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkKCk8L2NvZGU+PC9hPiB0byBsaW5rIHR3byBlbGVtZW50cyBjb25zdHJhaW5lZCBieQotYSBzcGVjaWZpZWQgc2V0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LgotRm9yIGZpbmVyIGNvbnRyb2wsIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfcGFkc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfbGlua19wYWRzKCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQoKTwvY29kZT48L2E+IHRvIHNwZWNpZnkgdGhlIHBhZHMgdG8gbGluayBvbgotZWFjaCBlbGVtZW50IGJ5IG5hbWUuPC9wPgotPHA+RWFjaCBlbGVtZW50IGhhcyBhIHN0YXRlIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+KS4gIFlvdSBjYW4gZ2V0IGFuZCBzZXQgdGhlIHN0YXRlCi1vZiBhbiBlbGVtZW50IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfc3RhdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9zdGF0ZSgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+LgotU2V0dGluZyBhIHN0YXRlIHRyaWdnZXJzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+LiBUbyBnZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24KLW9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+LCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zdGF0ZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+WW91IGNhbiBnZXQgYW5kIHNldCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IG9uIGFuIGVsZW1lbnQgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY2xvY2siIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfY2xvY2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9jbG9jaygpPC9jb2RlPjwvYT4KLWFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9jbG9ja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X2Nsb2NrKCk8L2NvZGU+PC9hPi4KLVNvbWUgZWxlbWVudHMgY2FuIHByb3ZpZGUgYSBjbG9jayBmb3IgdGhlIHBpcGVsaW5lIGlmCi10aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1GTEFHLVBST1ZJREUtQ0xPQ0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FTEVNRU5UX0ZMQUdfUFJPVklERV9DTE9DSzwvc3Bhbj48L2E+IGZsYWcgaXMgc2V0LiBXaXRoIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wcm92aWRlLWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9ja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jaygpPC9jb2RlPjwvYT4gbWV0aG9kIG9uZSBjYW4gcmV0cmlldmUgdGhlIGNsb2NrIHByb3ZpZGVkIGJ5Ci1zdWNoIGFuIGVsZW1lbnQuCi1Ob3QgYWxsIGVsZW1lbnRzIHJlcXVpcmUgYSBjbG9jayB0byBvcGVyYXRlIGNvcnJlY3RseS4gSWYgdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUZMQUctUkVRVUlSRS1DTE9DSzpDQVBTIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9FTEVNRU5UX0ZMQUdfUkVRVUlSRV9DTE9DSygpPC9jb2RlPjwvYT4gZmxhZyBpcyBzZXQsIGEgY2xvY2sgc2hvdWxkIGJlIHNldCBvbiB0aGUKLWVsZW1lbnQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9jbG9ja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X2Nsb2NrKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5Ob3RlIHRoYXQgY2xvY2sgc2VsZWN0aW9uIGFuZCBkaXN0cmlidXRpb24gaXMgbm9ybWFsbHkgaGFuZGxlZCBieSB0aGUKLXRvcGxldmVsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IHNvIHRoZSBjbG9jayBmdW5jdGlvbnMgYXJlIG9ubHkgdG8gYmUgdXNlZCBpbiB2ZXJ5Ci1zcGVjaWZpYyBzaXR1YXRpb25zLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RWxlbWVudC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVNUQVRFOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUQVRFKGVsZW0pICAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7Y3VycmVudF9zdGF0ZSkKLTwvcHJlPgotPHA+VGhpcyBtYWNybyByZXR1cm5zIHRoZSBjdXJyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBvZiB0aGUgZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtU1RBVEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHJldHVybiBzdGF0ZSBmb3IuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtR0VULU5FWFQ6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVEVfR0VUX05FWFQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfR0VUX05FWFQoY3VyLHBlbmRpbmcpICAgICAgICAgKChHc3RTdGF0ZSkoKGN1cikgKyBfX0dTVF9TSUdOICgoZ2ludCkocGVuZGluZykgLSAoZ2ludCkoY3VyKSkpKQotPC9wcmU+Ci08cD5HaXZlbiBhIGN1cnJlbnQgc3RhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmN1cjwvY29kZT48L2VtPgotIGFuZCBhIHRhcmdldCBzdGF0ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGVuZGluZzwvY29kZT48L2VtPgotLCBjYWxjdWxhdGUgdGhlIG5leHQgKGludGVybWVkaWF0ZSkKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtR0VULU5FWFQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y3VyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSBzdGFydGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGVuZGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdGFyZ2V0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtTkVYVDpDQVBTIj48L2E+PGgzPkdTVF9TVEFURV9ORVhUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUQVRFX05FWFQoZWxlbSkgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7bmV4dF9zdGF0ZSkKLTwvcHJlPgotPHA+VGhpcyBtYWNybyByZXR1cm5zIHRoZSBuZXh0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBvZiB0aGUgZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtTkVYVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcmV0dXJuIHRoZSBuZXh0IHN0YXRlIGZvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TVEFURS1QRU5ESU5HOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRFX1BFTkRJTkcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfUEVORElORyhlbGVtKSAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLSZndDtwZW5kaW5nX3N0YXRlKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIHJldHVybnMgdGhlIGN1cnJlbnRseSBwZW5kaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBvZiB0aGUgZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtUEVORElORy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcmV0dXJuIHRoZSBwZW5kaW5nIHN0YXRlIGZvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TVEFURS1SRVRVUk46Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVEVfUkVUVVJOKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUQVRFX1JFVFVSTihlbGVtKSAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7bGFzdF9yZXR1cm4pCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gcmV0dXJucyB0aGUgbGFzdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVNUQVRFLVJFVFVSTi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcmV0dXJuIHRoZSBsYXN0IHN0YXRlIHJlc3VsdCBmb3IuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtVEFSR0VUOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRFX1RBUkdFVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVEFURV9UQVJHRVQoZWxlbSkgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktJmd0O3RhcmdldF9zdGF0ZSkKLTwvcHJlPgotPHA+VGhpcyBtYWNybyByZXR1cm5zIHRoZSB0YXJnZXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IG9mIHRoZSBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1TVEFURS1UQVJHRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHJldHVybiB0aGUgdGFyZ2V0IHN0YXRlIGZvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TVEFURS1UUkFOU0lUSU9OOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRFX1RSQU5TSVRJT04oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RBVEVfVFJBTlNJVElPTihjdXIsbmV4dCkgICAgICAgICAgKChHc3RTdGF0ZUNoYW5nZSkoKChjdXIpJmx0OyZsdDszKXwobmV4dCkpKQotPC9wcmU+Ci08cD5HaXZlbiBhIGN1cnJlbnQgc3RhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmN1cjwvY29kZT48L2VtPgotIGFuZCBhIG5leHQgc3RhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5leHQ8L2NvZGU+PC9lbT4KLSwgY2FsY3VsYXRlIHRoZSBhc3NvY2lhdGVkCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlPC9zcGFuPjwvYT4gdHJhbnNpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtVFJBTlNJVElPTi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jdXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIGN1cnJlbnQgc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgbmV4dCBzdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtVFJBTlNJVElPTi1DVVJSRU5UOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRFX1RSQU5TSVRJT05fQ1VSUkVOVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQodHJhbnMpICAgICAoKEdzdFN0YXRlKSgodHJhbnMpJmd0OyZndDszKSkKLTwvcHJlPgotPHA+R2l2ZW4gYSBzdGF0ZSB0cmFuc2l0aW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPgotLCBleHRyYWN0IHRoZSBjdXJyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtVFJBTlNJVElPTi1DVVJSRU5ULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50cmFuczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtVFJBTlNJVElPTi1ORVhUOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVEFURV9UUkFOU0lUSU9OX05FWFQodHJhbnMpICAgICAgICAoKEdzdFN0YXRlKSgodHJhbnMpJmFtcDsweDcpKQotPC9wcmU+Ci08cD5HaXZlbiBhIHN0YXRlIHRyYW5zaXRpb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zPC9jb2RlPjwvZW0+Ci0sIGV4dHJhY3QgdGhlIG5leHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1TVEFURS1UUkFOU0lUSU9OLU5FWFQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRyYW5zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TVEFURS1HRVQtTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9TVEFURV9HRVRfTE9DSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVEFURV9HRVRfTE9DSyhlbGVtKSAgICAgICAgICAgICAgICgmYW1wOyhHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLSZndDtzdGF0ZV9sb2NrKSkKLTwvcHJlPgotPHA+R2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzdGF0ZSBsb2NrIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+Ci0uCi1UaGlzIGxvY2sgaXMgdXNlZCBieSB0aGUgY29yZS4gIEl0IGlzIHRha2VuIHdoaWxlIGdldHRpbmcgb3Igc2V0dGluZwotdGhlIHN0YXRlLCBkdXJpbmcgc3RhdGUgY2hhbmdlcywgYW5kIHdoaWxlIGZpbmFsaXppbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVNUQVRFLUdFVC1MT0NLLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVNUQVRFLUdFVC1DT05EOkNBUFMiPjwvYT48aDM+R1NUX1NUQVRFX0dFVF9DT05EKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1NUQVRFX0dFVF9DT05EKGVsZW0pICAgICAgICAgICAgICAgKCZhbXA7R1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7c3RhdGVfY29uZCkKLTwvcHJlPgotPHA+R2V0IHRoZSBjb25kaXRpb25hbCB1c2VkIHRvIHNpZ25hbCB0aGUgY29tcGxldGlvbiBvZiBhIHN0YXRlIGNoYW5nZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtU1RBVEUtR0VULUNPTkQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfTkFNRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX05BTUUoZWxlbSkgICAgICAgICAgICAgICAgICAoR1NUX09CSkVDVF9OQU1FKGVsZW0pKQotPC9wcmU+Ci08cD5HZXRzIHRoZSBuYW1lIG9mIHRoaXMgZWxlbWVudC4gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUgYnkgZGVmYXVsdAotKGkuZS4geW91IHdpbGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG9iamVjdCBsb2NrIGlzIHRha2VuIHlvdXJzZWxmKS4KLUlmIGluIGRvdWJ0IHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X25hbWUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfbmFtZSgpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1OQU1FLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtUEFSRU5UOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfUEFSRU5UKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfUEFSRU5UKGVsZW0pICAgICAgICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKEdTVF9PQkpFQ1RfUEFSRU5UKGVsZW0pKSkKLTwvcHJlPgotPHA+R2V0IHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoaXMgZWxlbWVudC4gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUgYnkgZGVmYXVsdAotKGkuZS4geW91IHdpbGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG9iamVjdCBsb2NrIGlzIHRha2VuIHlvdXJzZWxmKS4KLUlmIGluIGRvdWJ0IHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtcGFyZW50IiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfcGFyZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X2dldF9wYXJlbnQoKTwvY29kZT48L2E+IGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtUEFSRU5ULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtQlVTOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfQlVTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfQlVTKGVsZW0pICAgICAgICAgICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLSZndDtidXMpCi08L3ByZT4KLTxwPkdldCB0aGUgbWVzc2FnZSBidXMgb2YgdGhpcyBlbGVtZW50LiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSBieSBkZWZhdWx0Ci0oaS5lLiB5b3Ugd2lsbCBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgb2JqZWN0IGxvY2sgaXMgdGFrZW4geW91cnNlbGYpLgotSWYgaW4gZG91YnQgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJ1cyIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9idXPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9idXMoKTwvY29kZT48L2E+IGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtQlVTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtQ0xPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9DTE9DSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX0NMT0NLKGVsZW0pICAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7Y2xvY2spCi08L3ByZT4KLTxwPkdldCB0aGUgY2xvY2sgb2YgdGhpcyBlbGVtZW50LlRoaXMgaXMgbm90IHRocmVhZC1zYWZlIGJ5IGRlZmF1bHQKLShpLmUuIHlvdSB3aWxsIGhhdmUgdG8gbWFrZSBzdXJlIGl0IGlzIHNhZmUgeW91cnNlbGYpLgotSWYgaW4gZG91YnQgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfY2xvY2soKTwvY29kZT48L2E+IGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtQ0xPQ0sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1QQURTOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfUEFEUygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX1BBRFMoZWxlbSkgICAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0mZ3Q7cGFkcykKLTwvcHJlPgotPHA+R2V0IHRoZSBwYWRzIG9mIHRoaXMgZWxlbWVudHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtUEFEUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULVNUQVJULVRJTUU6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9TVEFSVF9USU1FKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfU1RBUlRfVElNRShlbGVtKSAgICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLSZndDtzdGFydF90aW1lKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIHJldHVybnMgdGhlIHN0YXJ0X3RpbWUgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+Ci0uIFRoZSBzdGFydF90aW1lIGlzIHRoZQotcnVubmluZ190aW1lIG9mIHRoZSBwaXBlbGluZSB3aGVuIHRoZSBlbGVtZW50IHdlbnQgdG8gUEFVU0VELjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULVNUQVJULVRJTUUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHJldHVybiB0aGUgc3RhcnQgdGltZSBmb3IuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0VSUk9SKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IoZWwsZG9tYWluLGNvZGUsdGV4dCxkZWJ1Zyk8L3ByZT4KLTxwPlV0aWxpdHkgZnVuY3Rpb24gdGhhdCBlbGVtZW50cyBjYW4gdXNlIGluIGNhc2UgdGhleSBlbmNvdW50ZXJlZCBhIGZhdGFsCi1kYXRhIHByb2Nlc3NpbmcgZXJyb3IuIFRoZSBwaXBlbGluZSB3aWxsIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSBhbmQgdGhlCi1hcHBsaWNhdGlvbiB3aWxsIGJlIHJlcXVlc3RlZCB0byBzdG9wIGZ1cnRoZXIgbWVkaWEgcHJvY2Vzc2luZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1FUlJPUi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSBlcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kb21haW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5saWtlIENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTSAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RyZWFtZXItR3N0R0Vycm9yPC9zcGFuPjwvYT4pPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5lcnJvciBjb2RlIGRlZmluZWQgZm9yIHRoYXQgZG9tYWluIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdHJlYW1lci1Hc3RHRXJyb3I8L3NwYW4+PC9hPik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MgZW5jbG9zZWQgaW4KLXBhcmVudGhlc2VzKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWJ1ZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MKLWVuY2xvc2VkIGluIHBhcmVudGhlc2VzKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1FUlJPUi1XSVRILURFVEFJTFM6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9FUlJPUl9XSVRIX0RFVEFJTFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUl9XSVRIX0RFVEFJTFMoZWwsZG9tYWluLGNvZGUsdGV4dCxkZWJ1ZyxhcmdzKTwvcHJlPgotPHA+VXRpbGl0eSBmdW5jdGlvbiB0aGF0IGVsZW1lbnRzIGNhbiB1c2UgaW4gY2FzZSB0aGV5IGVuY291bnRlcmVkIGEgZmF0YWwKLWRhdGEgcHJvY2Vzc2luZyBlcnJvci4gVGhlIHBpcGVsaW5lIHdpbGwgcG9zdCBhbiBlcnJvciBtZXNzYWdlIGFuZCB0aGUKLWFwcGxpY2F0aW9uIHdpbGwgYmUgcmVxdWVzdGVkIHRvIHN0b3AgZnVydGhlciBtZWRpYSBwcm9jZXNzaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUVSUk9SLVdJVEgtREVUQUlMUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSBlcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kb21haW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5saWtlIENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTSAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RyZWFtZXItR3N0R0Vycm9yPC9zcGFuPjwvYT4pPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5lcnJvciBjb2RlIGRlZmluZWQgZm9yIHRoYXQgZG9tYWluIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdHJlYW1lci1Hc3RHRXJyb3I8L3NwYW4+PC9hPik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MgZW5jbG9zZWQgaW4KLXBhcmVudGhlc2VzKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWJ1ZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MKLWVuY2xvc2VkIGluIHBhcmVudGhlc2VzKQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ3M8L2NvZGU+PC9lbT4KLW9wdGlvbmFsIG5hbWUsIHR5cGUsIHZhbHVlIHRyaXBsZXRzLCB3aGljaCB3aWxsIGJlIHN0b3JlZAotaW4gdGhlIGFzc29jaWF0ZWQgR3N0U3RydWN0dXJlLiBOVUxMIHRlcm1pbmF0b3IgcmVxdWlyZWQuCi1NdXN0IGJlIGVuY2xvc2VkIHdpdGhpbiBwYXJlbnRoZXNlcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GTE9XLUVSUk9SOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkxPV19FUlJPUigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IoZWwsZmxvd19yZXR1cm4pPC9wcmU+Ci08cD5VdGlsaXR5IGZ1bmN0aW9uIHRoYXQgZWxlbWVudHMgY2FuIHVzZSBpbiBjYXNlIHRoZXkgZW5jb3VudGVyZWQgYSBmYXRhbAotZGF0YSBwcm9jZXNzaW5nIGVycm9yIGR1ZSB0byB3cm9uZyBmbG93IHByb2Nlc3NpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtRkxPVy1FUlJPUi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSBlcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbG93X3JldHVybjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBHc3RGbG93UmV0dXJuIGxlYWRpbmcgdG8gdGhhdCBFUlJPUiBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtV0FSTklORzpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX1dBUk5JTkcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HKGVsLCBkb21haW4sIGNvZGUsIHRleHQsIGRlYnVnKTwvcHJlPgotPHA+VXRpbGl0eSBmdW5jdGlvbiB0aGF0IGVsZW1lbnRzIGNhbiB1c2UgaW4gY2FzZSB0aGV5IGVuY291bnRlcmVkIGEgbm9uLWZhdGFsCi1kYXRhIHByb2Nlc3NpbmcgcHJvYmxlbS4gVGhlIHBpcGVsaW5lIHdpbGwgcG9zdCBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgdGhlCi1hcHBsaWNhdGlvbiB3aWxsIGJlIGluZm9ybWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULVdBUk5JTkcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZWxlbWVudCB0aGF0IGdlbmVyYXRlcyB0aGUgd2FybmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kb21haW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5saWtlIENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTSAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RyZWFtZXItR3N0R0Vycm9yPC9zcGFuPjwvYT4pPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5lcnJvciBjb2RlIGRlZmluZWQgZm9yIHRoYXQgZG9tYWluIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdHJlYW1lci1Hc3RHRXJyb3I8L3NwYW4+PC9hPik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MgZW5jbG9zZWQgaW4KLXBhcmVudGhlc2VzKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWJ1ZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MKLWVuY2xvc2VkIGluIHBhcmVudGhlc2VzKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1XQVJOSU5HLVdJVEgtREVUQUlMUzpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX1dBUk5JTkdfV0lUSF9ERVRBSUxTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklOR19XSVRIX0RFVEFJTFMoZWwsIGRvbWFpbiwgY29kZSwgdGV4dCwgZGVidWcsIGFyZ3MpPC9wcmU+Ci08cD5VdGlsaXR5IGZ1bmN0aW9uIHRoYXQgZWxlbWVudHMgY2FuIHVzZSBpbiBjYXNlIHRoZXkgZW5jb3VudGVyZWQgYSBub24tZmF0YWwKLWRhdGEgcHJvY2Vzc2luZyBwcm9ibGVtLiBUaGUgcGlwZWxpbmUgd2lsbCBwb3N0IGEgd2FybmluZyBtZXNzYWdlIGFuZCB0aGUKLWFwcGxpY2F0aW9uIHdpbGwgYmUgaW5mb3JtZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtV0FSTklORy1XSVRILURFVEFJTFMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZWxlbWVudCB0aGF0IGdlbmVyYXRlcyB0aGUgd2FybmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kb21haW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5saWtlIENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTSAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RyZWFtZXItR3N0R0Vycm9yPC9zcGFuPjwvYT4pPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5lcnJvciBjb2RlIGRlZmluZWQgZm9yIHRoYXQgZG9tYWluIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdHJlYW1lci1Hc3RHRXJyb3I8L3NwYW4+PC9hPik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MgZW5jbG9zZWQgaW4KLXBhcmVudGhlc2VzKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWJ1ZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MKLWVuY2xvc2VkIGluIHBhcmVudGhlc2VzKQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ3M8L2NvZGU+PC9lbT4KLW9wdGlvbmFsIG5hbWUsIHR5cGUsIHZhbHVlIHRyaXBsZXRzLCB3aGljaCB3aWxsIGJlIHN0b3JlZAotaW4gdGhlIGFzc29jaWF0ZWQgR3N0U3RydWN0dXJlLiBOVUxMIHRlcm1pbmF0b3IgcmVxdWlyZWQuCi1NdXN0IGJlIGVuY2xvc2VkIHdpdGhpbiBwYXJlbnRoZXNlcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1JTkZPOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfSU5GTygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0lORk8oZWwsIGRvbWFpbiwgY29kZSwgdGV4dCwgZGVidWcpPC9wcmU+Ci08cD5VdGlsaXR5IGZ1bmN0aW9uIHRoYXQgZWxlbWVudHMgY2FuIHVzZSBpbiBjYXNlIHRoZXkgd2FudCB0byBpbmZvcm0KLXRoZSBhcHBsaWNhdGlvbiBvZiBzb21ldGhpbmcgbm90ZXdvcnRoeSB0aGF0IGlzIG5vdCBhbiBlcnJvci4KLVRoZSBwaXBlbGluZSB3aWxsIHBvc3QgYSBpbmZvIG1lc3NhZ2UgYW5kIHRoZQotYXBwbGljYXRpb24gd2lsbCBiZSBpbmZvcm1lZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1JTkZPLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVsZW1lbnQgdGhhdCBnZW5lcmF0ZXMgdGhlIGluZm9ybWF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRvbWFpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxpa2UgQ09SRSwgTElCUkFSWSwgUkVTT1VSQ0Ugb3IgU1RSRUFNIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdHJlYW1lci1Hc3RHRXJyb3I8L3NwYW4+PC9hPik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmVycm9yIGNvZGUgZGVmaW5lZCBmb3IgdGhhdCBkb21haW4gKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0cmVhbWVyLUdzdEdFcnJvcjwvc3Bhbj48L2E+KTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1lc3NhZ2UgdG8gZGlzcGxheSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncyBlbmNsb3NlZCBpbgotcGFyZW50aGVzZXMpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlYnVnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncwotZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUlORk8tV0lUSC1ERVRBSUxTOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfSU5GT19XSVRIX0RFVEFJTFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfRUxFTUVOVF9JTkZPX1dJVEhfREVUQUlMUyhlbCwgZG9tYWluLCBjb2RlLCB0ZXh0LCBkZWJ1ZywgYXJncyk8L3ByZT4KLTxwPlV0aWxpdHkgZnVuY3Rpb24gdGhhdCBlbGVtZW50cyBjYW4gdXNlIGluIGNhc2UgdGhleSB3YW50IHRvIGluZm9ybQotdGhlIGFwcGxpY2F0aW9uIG9mIHNvbWV0aGluZyBub3Rld29ydGh5IHRoYXQgaXMgbm90IGFuIGVycm9yLgotVGhlIHBpcGVsaW5lIHdpbGwgcG9zdCBhIGluZm8gbWVzc2FnZSBhbmQgdGhlCi1hcHBsaWNhdGlvbiB3aWxsIGJlIGluZm9ybWVkLgotT3B0aW9uYWwgbmFtZSwgdHlwZSwgdmFsdWUgdHJpcGxldHMgbWF5IGJlIHN1cHBsaWVkLCBhbmQgd2lsbCBiZSBzdG9yZWQKLWluIHRoZSBhc3NvY2lhdGVkIEdzdFN0cnVjdHVyZS4gTlVMTCB0ZXJtaW5hdG9yIHJlcXVpcmVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUlORk8tV0lUSC1ERVRBSUxTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVsZW1lbnQgdGhhdCBnZW5lcmF0ZXMgdGhlIGluZm9ybWF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRvbWFpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxpa2UgQ09SRSwgTElCUkFSWSwgUkVTT1VSQ0Ugb3IgU1RSRUFNIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdHJlYW1lci1Hc3RHRXJyb3I8L3NwYW4+PC9hPik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmVycm9yIGNvZGUgZGVmaW5lZCBmb3IgdGhhdCBkb21haW4gKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0cmVhbWVyLUdzdEdFcnJvcjwvc3Bhbj48L2E+KTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1lc3NhZ2UgdG8gZGlzcGxheSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncyBlbmNsb3NlZCBpbgotcGFyZW50aGVzZXMpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlYnVnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncwotZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMpCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJnczwvY29kZT48L2VtPgotb3B0aW9uYWwgbmFtZSwgdHlwZSwgdmFsdWUgdHJpcGxldHMsIHdoaWNoIHdpbGwgYmUgc3RvcmVkCi1pbiB0aGUgYXNzb2NpYXRlZCBHc3RTdHJ1Y3R1cmUuIE5VTEwgdGVybWluYXRvciByZXF1aXJlZC4KLU11c3QgYmUgZW5jbG9zZWQgd2l0aGluIHBhcmVudGhlc2VzLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUlTLUxPQ0tFRC1TVEFURTpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURShlbGVtKSAgICAgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQoZWxlbSxHU1RfRUxFTUVOVF9GTEFHX0xPQ0tFRF9TVEFURSkpCi08L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBsb2NrZWQgc3RhdGUgYW5kIHRoZXJlZm9yZSB3aWxsIGlnbm9yZSBzdGF0ZQotY2hhbmdlcyBmcm9tIGl0cyBwYXJlbnQgb2JqZWN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUlTLUxPQ0tFRC1TVEFURS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLWFkZC1wYWQtdGVtcGxhdGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiAqa2xhc3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZHMgYSBwYWR0ZW1wbGF0ZSB0byBhbiBlbGVtZW50IGNsYXNzLiBUaGlzIGlzIG1haW5seSB1c2VkIGluIHRoZSBfY2xhc3NfaW5pdAotZnVuY3Rpb25zIG9mIGNsYXNzZXMuIElmIGEgcGFkIHRlbXBsYXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBhbHJlYWR5Ci1leGlzdGluZyBvbmUgaXMgYWRkZWQgdGhlIG9sZCBvbmUgaXMgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXBhZC10ZW1wbGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5rbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiB0byBhZGQgdGhlIHBhZCB0ZW1wbGF0ZSB0by48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB0byBhZGQgdG8gdGhlIGVsZW1lbnQgY2xhc3MuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jbGFzcy1hZGQtc3RhdGljLXBhZC10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiAqa2xhc3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnN0YXRpY190ZW1wbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIGEgcGFkIHRlbXBsYXRlIHRvIGFuIGVsZW1lbnQgY2xhc3MgYmFzZWQgb24gdGhlIHN0YXRpYyBwYWQgdGVtcGxhdGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZW1wbDwvY29kZT48L2VtPgotLiBUaGlzIGlzIG1haW5seSB1c2VkIGluIHRoZSBfY2xhc3NfaW5pdCBmdW5jdGlvbnMgb2YgZWxlbWVudAotaW1wbGVtZW50YXRpb25zLiBJZiBhIHBhZCB0ZW1wbGF0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsCi10aGUgb2xkIG9uZSBpcyByZXBsYWNlZCBieSB0aGUgbmV3IG9uZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jbGFzcy1hZGQtc3RhdGljLXBhZC10ZW1wbGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5rbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiB0byBhZGQgdGhlIHBhZCB0ZW1wbGF0ZSB0by48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhdGljX3RlbXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IHRvIGFkZCBhcyBwYWQgdGVtcGxhdGUgdG8gdGhlIGVsZW1lbnQgY2xhc3MuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLWdldC1wYWQtdGVtcGxhdGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICplbGVtZW50X2NsYXNzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyBhIHBhZHRlbXBsYXRlIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnRfY2xhc3M8L2NvZGU+PC9lbT4KLSB3aXRoIHRoZSBnaXZlbiBuYW1lLjwvcD4KLTxkaXYgY2xhc3M9Im5vdGUiPklmIHlvdSB1c2UgdGhpcyBmdW5jdGlvbiBpbiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dJbnN0YW5jZUluaXRGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0luc3RhbmNlSW5pdEZ1bmM8L3NwYW4+PC9hPiBvZiBhbiBvYmplY3QgY2xhc3MKLXRoYXQgaGFzIHN1YmNsYXNzZXMsIG1ha2Ugc3VyZSB0byBwYXNzIHRoZSBnX2NsYXNzIHBhcmFtZXRlciBvZiB0aGUKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHSW5zdGFuY2VJbml0RnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdJbnN0YW5jZUluaXRGdW5jPC9zcGFuPjwvYT4gaGVyZS48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLWdldC1wYWQtdGVtcGxhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9jbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBwYWQgdGVtcGxhdGUgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gdG8gZ2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LXBhZC10ZW1wbGF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB3aXRoIHRoZQotZ2l2ZW4gbmFtZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vbmUgd2FzIGZvdW5kLiBObyB1bnJlZmVyZW5jaW5nIGlzCi1uZWNlc3NhcnkuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LXBhZC10ZW1wbGF0ZS1saXN0Ij48L2E+PGgzPmdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICplbGVtZW50X2NsYXNzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyBhIGxpc3Qgb2YgdGhlIHBhZCB0ZW1wbGF0ZXMgYXNzb2NpYXRlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50X2NsYXNzPC9jb2RlPjwvZW0+Ci0uIFRoZQotbGlzdCBtdXN0IG5vdCBiZSBtb2RpZmllZCBieSB0aGUgY2FsbGluZyBjb2RlLjwvcD4KLTxkaXYgY2xhc3M9Im5vdGUiPklmIHlvdSB1c2UgdGhpcyBmdW5jdGlvbiBpbiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dJbnN0YW5jZUluaXRGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0luc3RhbmNlSW5pdEZ1bmM8L3NwYW4+PC9hPiBvZiBhbiBvYmplY3QgY2xhc3MKLXRoYXQgaGFzIHN1YmNsYXNzZXMsIG1ha2Ugc3VyZSB0byBwYXNzIHRoZSBnX2NsYXNzIHBhcmFtZXRlciBvZiB0aGUKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHSW5zdGFuY2VJbml0RnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdJbnN0YW5jZUluaXRGdW5jPC9zcGFuPjwvYT4gaGVyZS48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLWdldC1wYWQtdGVtcGxhdGUtbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9jbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4gdG8gZ2V0IHBhZCB0ZW1wbGF0ZXMgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LXBhZC10ZW1wbGF0ZS1saXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YKLXBhZCB0ZW1wbGF0ZXMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlBhZFRlbXBsYXRlXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3Mtc2V0LW1ldGFkYXRhIj48L2E+PGgzPmdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICprbGFzczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpsb25nbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjbGFzc2lmaWNhdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICphdXRob3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0ibm90ZSI+VGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIGluIF9jbGFzc19pbml0IGZ1bmN0aW9ucyBvbmx5LjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3Mtc2V0LW1ldGFkYXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmtsYXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2xhc3MgdG8gc2V0IG1ldGFkYXRhIGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sb25nbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBsb25nIEVuZ2xpc2ggbmFtZSBvZiB0aGUgZWxlbWVudC4gRS5nLiAiRmlsZSBTaW5rIjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbGFzc2lmaWNhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGVsZW1lbnQsIGFzIGFuIHVub3JkZXJlZCBsaXN0Ci1zZXBhcmF0ZWQgd2l0aCBzbGFzaGVzICgnLycpLiBTZWUgZHJhZnQta2xhc3MudHh0IG9mIHRoZSBkZXNpZ24gZG9jcwotZm9yIG1vcmUgZGV0YWlscyBhbmQgY29tbW9uIHR5cGVzLiBFLmc6ICJTaW5rL0ZpbGUiPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc2NyaXB0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U2VudGVuY2UgZGVzY3JpYmluZyB0aGUgcHVycG9zZSBvZiB0aGUgZWxlbWVudC4KLUUuZzogIldyaXRlIHN0cmVhbSB0byBhIGZpbGUiPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmF1dGhvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgYXV0aG9yKHMpLiBVc2UgXG4gdG8gc2VwYXJhdGUKLW11bHRpcGxlIGF1dGhvciBtZXRhZGF0YS4gRS5nOiAiSm9lIEJsb2dncyAmbHQ7am9lLmJsb2dzIGF0IGZvby5jb20mZ3Q7IjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jbGFzcy1zZXQtc3RhdGljLW1ldGFkYXRhIj48L2E+PGgzPmdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4gKmtsYXNzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpsb25nbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqY2xhc3NpZmljYXRpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICphdXRob3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudENsYXNzPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0ibm90ZSI+VGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIGluIF9jbGFzc19pbml0IGZ1bmN0aW9ucyBvbmx5LjwvZGl2PgotPHA+U2FtZSBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLXNldC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhKCk8L2NvZGU+PC9hPiwgYnV0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sb25nbmFtZTwvY29kZT48L2VtPgotLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xhc3NpZmljYXRpb248L2NvZGU+PC9lbT4KLSwKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXNjcmlwdGlvbjwvY29kZT48L2VtPgotLCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF1dGhvcjwvY29kZT48L2VtPgotIG11c3QgYmUgc3RhdGljIHN0cmluZ3Mgb3IgaW5saW5lZCBzdHJpbmdzLCBhcwotdGhleSB3aWxsIG5vdCBiZSBjb3BpZWQuIChHU3RyZWFtZXIgcGx1Z2lucyB3aWxsIGJlIG1hZGUgcmVzaWRlbnQgb25jZQotbG9hZGVkLCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGV2ZW4gZnJvbSBkeW5hbWljYWxseSBsb2FkZWQgcGx1Z2lucy4pPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3Mtc2V0LXN0YXRpYy1tZXRhZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5rbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNsYXNzIHRvIHNldCBtZXRhZGF0YSBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bG9uZ25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbG9uZyBFbmdsaXNoIG5hbWUgb2YgdGhlIGVsZW1lbnQuIEUuZy4gIkZpbGUgU2luayI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xhc3NpZmljYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5TdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlbGVtZW50LCBhcyBhbiB1bm9yZGVyZWQgbGlzdAotc2VwYXJhdGVkIHdpdGggc2xhc2hlcyAoJy8nKS4gU2VlIGRyYWZ0LWtsYXNzLnR4dCBvZiB0aGUgZGVzaWduIGRvY3MKLWZvciBtb3JlIGRldGFpbHMgYW5kIGNvbW1vbiB0eXBlcy4gRS5nOiAiU2luay9GaWxlIjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXNjcmlwdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlNlbnRlbmNlIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGVsZW1lbnQuCi1FLmc6ICJXcml0ZSBzdHJlYW0gdG8gYSBmaWxlIjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hdXRob3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5OYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGF1dGhvcihzKS4gVXNlIFxuIHRvIHNlcGFyYXRlCi1tdWx0aXBsZSBhdXRob3IgbWV0YWRhdGEuIEUuZzogIkpvZSBCbG9nZ3MgJmx0O2pvZS5ibG9ncyBhdCBmb28uY29tJmd0OyI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLW1ldGFkYXRhIj48L2E+PGgzPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRDbGFzczwvc3Bhbj48L2E+ICprbGFzczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICprZXk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rZXk8L2NvZGU+PC9lbT4KLSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGFzIG1ldGFkYXRhIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rbGFzczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLWFkZC1tZXRhZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5rbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNsYXNzIHRvIHNldCBtZXRhZGF0YSBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+a2V5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGtleSB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdmFsdWUgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWNsYXNzLWFkZC1zdGF0aWMtbWV0YWRhdGEiPjwvYT48aDM+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfbWV0YWRhdGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiAqa2xhc3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmtleTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rZXk8L2NvZGU+PC9lbT4KLSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGFzIG1ldGFkYXRhIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rbGFzczwvY29kZT48L2VtPgotLjwvcD4KLTxwPlNhbWUgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1hZGQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19hZGRfbWV0YWRhdGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YSgpPC9jb2RlPjwvYT4sIGJ1dCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSBtdXN0IGJlIGEgc3RhdGljIHN0cmluZwotb3IgYW4gaW5saW5lZCBzdHJpbmcsIGFzIGl0IHdpbGwgbm90IGJlIGNvcGllZC4gKEdTdHJlYW1lciBwbHVnaW5zIHdpbGwKLWJlIG1hZGUgcmVzaWRlbnQgb25jZSBsb2FkZWQsIHNvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZXZlbiBmcm9tCi1keW5hbWljYWxseSBsb2FkZWQgcGx1Z2lucy4pPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXN0YXRpYy1tZXRhZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5rbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNsYXNzIHRvIHNldCBtZXRhZGF0YSBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+a2V5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGtleSB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdmFsdWUgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWFkZC1wYWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfYWRkX3BhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfYWRkX3BhZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkcyBhIHBhZCAobGluayBwb2ludCkgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotJ3MgcGFyZW50IHdpbGwgYmUgc2V0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+Ci07Ci1zZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2V0LXBhcmVudCIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X3BhcmVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9zZXRfcGFyZW50KCk8L2NvZGU+PC9hPiBmb3IgcmVmY291bnRpbmcgaW5mb3JtYXRpb24uPC9wPgotPHA+UGFkcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIHNvIGVsZW1lbnRzIHNob3VsZCBwZXJmb3JtIHRoZSBuZWVkZWQKLXN0ZXBzIHRvIGFjdGl2YXRlIHRoZSBwYWQgaW4gY2FzZSB0aGlzIHBhZCBpcyBhZGRlZCBpbiB0aGUgUEFVU0VEIG9yIFBMQVlJTkcKLXN0YXRlLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjdGl2ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfYWN0aXZlKCk8L2NvZGU+PC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhY3RpdmF0aW5nIHBhZHMuPC9wPgotPHA+VGhlIHBhZCBhbmQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHVubG9ja2VkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtcGFkLWFkZGVkIiB0aXRsZT0iVGhlIOKAnHBhZC1hZGRlZOKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwYWQtYWRkZWTigJ08L3NwYW4+PC9hPiBzaWduYWwgb24gdGhlIGVsZW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtYWRkLXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBhZGQgdGhlIHBhZCB0by48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBhZGQgdG8gdGhlIGVsZW1lbnQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtYWRkLXBhZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGNvdWxkIGJlIGFkZGVkLiBUaGlzIGZ1bmN0aW9uIGNhbiBmYWlsIHdoZW4KLWEgcGFkIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0ZWQgb3IgdGhlIHBhZCBhbHJlYWR5IGhhZCBhbm90aGVyCi1wYXJlbnQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY3JlYXRlLWFsbC1wYWRzIj48L2E+PGgzPmdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBwYWQgZm9yIGVhY2ggcGFkIHRlbXBsYXRlIHRoYXQgaXMgYWx3YXlzIGF2YWlsYWJsZS4KLVRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VmdWwgZHVyaW5nIG9iamVjdCBpbml0aWFsaXphdGlvbiBvZgotc3ViY2xhc3NlcyBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jcmVhdGUtYWxsLXBhZHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBjcmVhdGUgcGFkcyBmb3IuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkIj48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TG9va3MgZm9yIGFuIHVubGlua2VkIHBhZCB0byB3aGljaCB0aGUgZ2l2ZW4gcGFkIGNhbiBsaW5rLiBJdCBpcyBub3QKLWd1YXJhbnRlZWQgdGhhdCBsaW5raW5nIHRoZSBwYWRzIHdpbGwgd29yaywgdGhvdWdoIGl0IHNob3VsZCB3b3JrIGluIG1vc3QKLWNhc2VzLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gd2lsbCBmaXJzdCBhdHRlbXB0IHRvIGZpbmQgYSBjb21wYXRpYmxlIHVubGlua2VkIEFMV0FZUyBwYWQsCi1hbmQgaWYgbm9uZSBjYW4gYmUgZm91bmQsIGl0IHdpbGwgcmVxdWVzdCBhIGNvbXBhdGlibGUgUkVRVUVTVCBwYWQgYnkgbG9va2luZwotYXQgdGhlIHRlbXBsYXRlcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaW4gd2hpY2ggdGhlIHBhZCBzaG91bGQgYmUgZm91bmQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGZpbmQgYSBjb21wYXRpYmxlIG9uZSBmb3IuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byB1c2UgYXMgYSBmaWx0ZXIuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtY29tcGF0aWJsZS1wYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gd2hpY2ggYSBsaW5rCi1jYW4gYmUgbWFkZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4KLWFmdGVyIHVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZC10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT7CoCoKLWdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF90ZW1wbGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqY29tcGF0dGVtcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmVzIGEgcGFkIHRlbXBsYXRlIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29tcGF0dGVtcGw8L2NvZGU+PC9lbT4KLS4KLVBhZHMgZnJvbSBjb21wYXRpYmxlIHRlbXBsYXRlcyBjYW4gYmUgbGlua2VkIHRvZ2V0aGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZC10ZW1wbGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZ2V0IGEgY29tcGF0aWJsZSBwYWQgdGVtcGxhdGUgZm9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29tcGF0dGVtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IHRvIGZpbmQgYSBjb21wYXRpYmxlCi10ZW1wbGF0ZSBmb3IuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkLXRlbXBsYXRlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBjb21wYXRpYmxlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+LAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vbmUgd2FzIGZvdW5kLiBObyB1bnJlZmVyZW5jaW5nIGlzIG5lY2Vzc2FyeS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtcmVxdWVzdC1wYWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyBhIHBhZCBmcm9tIHRoZSBlbGVtZW50IGJ5IG5hbWUgKGUuZy4gInNyY18lZCIpLiBUaGlzIHZlcnNpb24gb25seQotcmV0cmlldmVzIHJlcXVlc3QgcGFkcy4gVGhlIHBhZCBzaG91bGQgYmUgcmVsZWFzZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhpcyBtZXRob2QgaXMgc2xvd2VyIHRoYW4gbWFudWFsbHkgZ2V0dGluZyB0aGUgcGFkIHRlbXBsYXRlIGFuZCBjYWxsaW5nCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPiBpZiB0aGUgcGFkcyBzaG91bGQgaGF2ZSBhIHNwZWNpZmljIG5hbWUgKGUuZy4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0gaXMgInNyY18xIiBpbnN0ZWFkIG9mICJzcmNfJXUiKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtcmVxdWVzdC1wYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZmluZCBhIHJlcXVlc3QgcGFkIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIHJlcXVlc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcmV0cmlldmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtcmVxdWVzdC1wYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiByZXF1ZXN0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaWYgZm91bmQsCi1vdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiAgUmVsZWFzZSBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtc3RhdGljLXBhZCI+PC9hPjxoMz5nc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmVzIGEgcGFkIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLSBieSBuYW1lLiBUaGlzIHZlcnNpb24gb25seSByZXRyaWV2ZXMKLWFscmVhZHktZXhpc3RpbmcgKGkuZS4gJ3N0YXRpYycpIHBhZHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LXN0YXRpYy1wYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZmluZCBhIHN0YXRpYyBwYWQgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgc3RhdGljIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHJldHJpZXZlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LXN0YXRpYy1wYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcmVxdWVzdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IGlmCi1mb3VuZCwgb3RoZXJ3aXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gIHVucmVmIGFmdGVyIHVzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcmVxdWVzdF9wYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLWdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICp0ZW1wbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyBhIHJlcXVlc3QgcGFkIGZyb20gdGhlIGVsZW1lbnQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCB0ZW1wbGF0ZS4KLVBhZCB0ZW1wbGF0ZXMgY2FuIGJlIGxvb2tlZCB1cCB1c2luZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtc3RhdGljLXBhZC10ZW1wbGF0ZXMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMoKTwvY29kZT48L2E+LjwvcD4KLTxwPlRoZSBwYWQgc2hvdWxkIGJlIHJlbGVhc2VkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBpcyB0aGUgaW52b2tlciBmb3IgYSB2aXJ0dWFsIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj52aXJ0dWFsPC9zcGFuPjwvYWNyb255bT4gcmVxdWVzdF9uZXdfcGFkXTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1yZXF1ZXN0LXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBmaW5kIGEgcmVxdWVzdCBwYWQgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlbXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiBvZiB3aGljaCB3ZSB3YW50IGEgcGFkIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+Ci10byByZXRyaWV2ZS4gQ2FuIGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgY2FwcyBvZiB0aGUgcGFkIHdlIHdhbnQgdG8KLXJlcXVlc3QuIENhbiBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1yZXF1ZXN0LXBhZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHJlcXVlc3RlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpZiBmb3VuZCwKLW90aGVyd2lzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uICBSZWxlYXNlIGFmdGVyIHVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LW5vLW1vcmUtcGFkcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9ub19tb3JlX3BhZHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Vc2UgdGhpcyBmdW5jdGlvbiB0byBzaWduYWwgdGhhdCB0aGUgZWxlbWVudCBkb2VzIG5vdCBleHBlY3QgYW55IG1vcmUgcGFkcwotdG8gc2hvdyB1cCBpbiB0aGUgY3VycmVudCBwaXBlbGluZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyCi1wYWRzIGhhdmUgYmVlbiBhZGRlZCBieSB0aGUgZWxlbWVudCBpdHNlbGYuIEVsZW1lbnRzIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1TT01FVElNRVM6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfU09NRVRJTUVTPC9zcGFuPjwvYT4KLXBhZCB0ZW1wbGF0ZXMgdXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBhdXRvcGx1Z2dlcnMgdG8gZmlndXJlIG91dCB0aGF0Ci10aGUgZWxlbWVudCBpcyBkb25lIGluaXRpYWxpemluZyBpdHMgcGFkcy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGVtaXRzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtbm8tbW9yZS1wYWRzIiB0aXRsZT0iVGhlIOKAnG5vLW1vcmUtcGFkc+KAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxuby1tb3JlLXBhZHPigJ08L3NwYW4+PC9hPiBzaWduYWwuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1uby1tb3JlLXBhZHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIj48L2E+PGgzPmdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5NYWtlcyB0aGUgZWxlbWVudCBmcmVlIHRoZSBwcmV2aW91c2x5IHJlcXVlc3RlZCBwYWQgYXMgb2J0YWluZWQKLXdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlcXVlc3RfcGFkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhpcyBkb2VzIG5vdCB1bnJlZiB0aGUgcGFkLiBJZiB0aGUgcGFkIHdhcyBjcmVhdGVkIGJ5IHVzaW5nCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4gbmVlZHMgdG8gYmUKLWZvbGxvd2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gdG8gZnJlZSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVsZWFzZS1yZXF1ZXN0LXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHBhZCBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHJlbGVhc2UuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXJlbW92ZS1wYWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcmVtb3ZlX3BhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPgotLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBkZXN0cm95ZWQgaWYgaXQgaGFzIG5vdCBiZWVuCi1yZWZlcmVuY2VkIGVsc2V3aGVyZSB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnBhcmVudCIgdGl0bGU9ImdzdF9vYmplY3RfdW5wYXJlbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5wYXJlbnQoKTwvY29kZT48L2E+LjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBwbHVnaW4gZGV2ZWxvcGVycyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCi1ieSBhcHBsaWNhdGlvbnMuIFBhZHMgdGhhdCB3ZXJlIGR5bmFtaWNhbGx5IHJlcXVlc3RlZCBmcm9tIGVsZW1lbnRzCi13aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQoKTwvY29kZT48L2E+IHNob3VsZCBiZSByZWxlYXNlZCB3aXRoIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZWxlYXNlLXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4gZnVuY3Rpb24gaW5zdGVhZC48L3A+Ci08cD5QYWRzIGFyZSBub3QgYXV0b21hdGljYWxseSBkZWFjdGl2YXRlZCBzbyBlbGVtZW50cyBzaG91bGQgcGVyZm9ybSB0aGUgbmVlZGVkCi1zdGVwcyB0byBkZWFjdGl2YXRlIHRoZSBwYWQgaW4gY2FzZSB0aGlzIHBhZCBpcyByZW1vdmVkIGluIHRoZSBQQVVTRUQgb3IKLVBMQVlJTkcgc3RhdGUuIFNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZlIiB0aXRsZT0iZ3N0X3BhZF9zZXRfYWN0aXZlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NldF9hY3RpdmUoKTwvY29kZT48L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0Ci1kZWFjdGl2YXRpbmcgcGFkcy48L3A+Ci08cD5UaGUgcGFkIGFuZCB0aGUgZWxlbWVudCBzaG91bGQgYmUgdW5sb2NrZWQgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGVtaXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1wYWQtcmVtb3ZlZCIgdGl0bGU9IlRoZSDigJxwYWQtcmVtb3ZlZOKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwYWQtcmVtb3ZlZOKAnTwvc3Bhbj48L2E+IHNpZ25hbCBvbiB0aGUgZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1yZW1vdmUtcGFkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHJlbW92ZSBwYWQgZnJvbS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byByZW1vdmUgZnJvbSB0aGUgZWxlbWVudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1yZW1vdmUtcGFkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgY291bGQgYmUgcmVtb3ZlZC4gQ2FuIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUKLXBhZCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHByb3ZpZGVkIGVsZW1lbnQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtaXRlcmF0ZS1wYWRzIj48L2E+PGgzPmdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZXMgYW4gaXRlcmF0b3Igb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLSdzIHBhZHMuIFRoZSBpdGVyYXRvciBzaG91bGQKLWJlIGZyZWVkIGFmdGVyIHVzYWdlLiBBbHNvIG1vcmUgc3BlY2lhbGl6ZWQgaXRlcmF0b3JzIGV4aXN0cyBzdWNoIGFzCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtc3JjLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtc2luay1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGUgb3JkZXIgb2YgcGFkcyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBiZSB0aGUgb3JkZXIgaW4gd2hpY2gKLXRoZSBwYWRzIHdlcmUgYWRkZWQgdG8gdGhlIGVsZW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtaXRlcmF0ZS1wYWRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBpdGVyYXRlIHBhZHMgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtaXRlcmF0ZS1wYWRzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zaW5rLXBhZHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZXMgYW4gaXRlcmF0b3Igb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLSdzIHNpbmsgcGFkcy48L3A+Ci08cD5UaGUgb3JkZXIgb2YgcGFkcyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBiZSB0aGUgb3JkZXIgaW4gd2hpY2gKLXRoZSBwYWRzIHdlcmUgYWRkZWQgdG8gdGhlIGVsZW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zaW5rLXBhZHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWl0ZXJhdGUtc2luay1wYWRzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zcmMtcGFkcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLWdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZXMgYW4gaXRlcmF0b3Igb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLSdzIHNvdXJjZSBwYWRzLjwvcD4KLTxwPlRoZSBvcmRlciBvZiBwYWRzIHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvciB3aWxsIGJlIHRoZSBvcmRlciBpbiB3aGljaAotdGhlIHBhZHMgd2VyZSBhZGRlZCB0byB0aGUgZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1pdGVyYXRlLXNyYy1wYWRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1pdGVyYXRlLXNyYy1wYWRzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbGluayI+PC9hPjxoMz5nc3RfZWxlbWVudF9saW5rwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9saW5rICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5MaW5rcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLS4gVGhlIGxpbmsgbXVzdCBiZSBmcm9tIHNvdXJjZSB0bwotZGVzdGluYXRpb247IHRoZSBvdGhlciBkaXJlY3Rpb24gd2lsbCBub3QgYmUgdHJpZWQuIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IKLWV4aXN0aW5nIHBhZHMgdGhhdCBhcmVuJ3QgbGlua2VkIHlldC4gSXQgd2lsbCByZXF1ZXN0IG5ldyBwYWRzIGlmIG5lY2Vzc2FyeS4KLVN1Y2ggcGFkcyBuZWVkIHRvIGJlIHJlbGVhc2VkIG1hbnVhbGx5IHdoZW4gdW5saW5raW5nLgotSWYgbXVsdGlwbGUgbGlua3MgYXJlIHBvc3NpYmxlLCBvbmx5IG9uZSBpcyBlc3RhYmxpc2hlZC48L3A+Ci08cD5NYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgeW91ciBlbGVtZW50cyB0byBhIGJpbiBvciBwaXBlbGluZSB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQiIHRpdGxlPSJnc3RfYmluX2FkZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jpbl9hZGQoKTwvY29kZT48L2E+IGJlZm9yZSB0cnlpbmcgdG8gbGluayB0aGVtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWxpbmsucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgc291cmNlIHBhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBlbGVtZW50cyBjb3VsZCBiZSBsaW5rZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtdW5saW5rIj48L2E+PGgzPmdzdF9lbGVtZW50X3VubGlua8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X3VubGluayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5VbmxpbmtzIGFsbCBzb3VyY2UgcGFkcyBvZiB0aGUgc291cmNlIGVsZW1lbnQgd2l0aCBhbGwgc2luayBwYWRzCi1vZiB0aGUgc2luayBlbGVtZW50IHRvIHdoaWNoIHRoZXkgYXJlIGxpbmtlZC48L3A+Ci08cD5JZiB0aGUgbGluayBoYXMgYmVlbiBtYWRlIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluayIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmvCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2xpbmsoKTwvY29kZT48L2E+LCBpdCBjb3VsZCBoYXZlIGNyZWF0ZWQgYW4KLXJlcXVlc3RwYWQsIHdoaWNoIGhhcyB0byBiZSByZWxlYXNlZCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbGVhc2UtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC11bmxpbmsucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gdW5saW5rLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byB1bmxpbmsuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLW1hbnkiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbGlua19tYW55wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9saW5rX21hbnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudF8xPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnRfMjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGFpbiB0b2dldGhlciBhIHNlcmllcyBvZiBlbGVtZW50cy4gVXNlcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmsiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rKCk8L2NvZGU+PC9hPi4KLU1ha2Ugc3VyZSB5b3UgaGF2ZSBhZGRlZCB5b3VyIGVsZW1lbnRzIHRvIGEgYmluIG9yIHBpcGVsaW5lIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2FkZCgpPC9jb2RlPjwvYT4gYmVmb3JlIHRyeWluZyB0byBsaW5rIHRoZW0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbGluay1tYW55LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZmlyc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaW4gdGhlIGxpbmsgY2hhaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50XzI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHNlY29uZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBpbiB0aGUgbGluayBjaGFpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBsaXN0IG9mIGVsZW1lbnRzIHRvIGxpbmsgaW4gb3JkZXIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLW1hbnkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb24gc3VjY2VzcywgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC11bmxpbmstbWFueSI+PC9hPjxoMz5nc3RfZWxlbWVudF91bmxpbmtfbWFuecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X3VubGlua19tYW55ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnRfMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnRfMjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVubGlua3MgYSBzZXJpZXMgb2YgZWxlbWVudHMuIFVzZXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC11bmxpbmsiIHRpdGxlPSJnc3RfZWxlbWVudF91bmxpbmvCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3VubGluaygpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtdW5saW5rLW1hbnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF8xPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBmaXJzdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBpbiB0aGUgbGluayBjaGFpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfMjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc2Vjb25kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGluIHRoZSBsaW5rIGNoYWluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi10ZXJtaW5hdGVkIGxpc3Qgb2YgZWxlbWVudHMgdG8gdW5saW5rIGluIG9yZGVyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLXBhZHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbGlua19wYWRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9saW5rX3BhZHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNyY3BhZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXN0cGFkbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5MaW5rcyB0aGUgdHdvIG5hbWVkIHBhZHMgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZWxlbWVudHMuCi1TaWRlIGVmZmVjdCBpcyB0aGF0IGlmIG9uZSBvZiB0aGUgcGFkcyBoYXMgbm8gcGFyZW50LCBpdCBiZWNvbWVzIGEKLWNoaWxkIG9mIHRoZSBwYXJlbnQgb2YgdGhlIG90aGVyIGVsZW1lbnQuICBJZiB0aGV5IGhhdmUgZGlmZmVyZW50Ci1wYXJlbnRzLCB0aGUgbGluayBmYWlscy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLXBhZHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNwYWRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuYW1lIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpbiBzb3VyY2UgZWxlbWVudAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciBhbnkgcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0cGFkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaW4gZGVzdGluYXRpb24gZWxlbWVudCwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3IgYW55IHBhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWxpbmstcGFkcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkcyBjb3VsZCBiZSBsaW5rZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZ1bGwiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNyY3BhZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzdHBhZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rQ2hlY2siIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtDaGVjayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZExpbmtDaGVjazwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxpbmtzIHRoZSB0d28gbmFtZWQgcGFkcyBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBlbGVtZW50cy4KLVNpZGUgZWZmZWN0IGlzIHRoYXQgaWYgb25lIG9mIHRoZSBwYWRzIGhhcyBubyBwYXJlbnQsIGl0IGJlY29tZXMgYQotY2hpbGQgb2YgdGhlIHBhcmVudCBvZiB0aGUgb3RoZXIgZWxlbWVudC4gIElmIHRoZXkgaGF2ZSBkaWZmZXJlbnQKLXBhcmVudHMsIHRoZSBsaW5rIGZhaWxzLjwvcD4KLTxwPkNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLXBhZHMtZnVsbCIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCgpPC9jb2RlPjwvYT4gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLSA9PSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLURFRkFVTFQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUPC9jb2RlPjwvYT4KLWlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX3BhZHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2xpbmtfcGFkcygpPC9jb2RlPjwvYT4gYW5kIHRoZSByZWNvbW1lbmRlZCB3YXkgb2YKLWxpbmtpbmcgcGFkcyB3aXRoIHNhZmV0eSBjaGVja3MgYXBwbGllZC48L3A+Ci08cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstZnVsbCIgdGl0bGU9ImdzdF9wYWRfbGlua19mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2xpbmtfZnVsbCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNwYWRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuYW1lIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpbiBzb3VyY2UgZWxlbWVudAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciBhbnkgcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0cGFkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaW4gZGVzdGluYXRpb24gZWxlbWVudCwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3IgYW55IHBhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtDaGVjayIgdGl0bGU9ImVudW0gR3N0UGFkTGlua0NoZWNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0NoZWNrPC9zcGFuPjwvYT4gdG8gYmUgcGVyZm9ybWVkIHdoZW4gbGlua2luZyBwYWRzLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBhZHMgY291bGQgYmUgbGlua2VkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXVubGluay1wYWRzIj48L2E+PGgzPmdzdF9lbGVtZW50X3VubGlua19wYWRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3JjcGFkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXN0cGFkbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5VbmxpbmtzIHRoZSB0d28gbmFtZWQgcGFkcyBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBlbGVtZW50cy48L3A+Ci08cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXVubGluayIgdGl0bGU9ImdzdF9wYWRfdW5saW5rwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3VubGluaygpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtdW5saW5rLXBhZHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSAodHJhbnNmZXIgbm9uZSk6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBwYWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY3BhZG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaW4gc291cmNlIGVsZW1lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0cGFkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpbiBkZXN0aW5hdGlvbiBlbGVtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLXBhZHMtZmlsdGVyZWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNyY3BhZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXN0cGFkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpmaWx0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TGlua3MgdGhlIHR3byBuYW1lZCBwYWRzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzLiBTaWRlIGVmZmVjdAotaXMgdGhhdCBpZiBvbmUgb2YgdGhlIHBhZHMgaGFzIG5vIHBhcmVudCwgaXQgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQgb2YKLXRoZSBvdGhlciBlbGVtZW50LiBJZiB0aGV5IGhhdmUgZGlmZmVyZW50IHBhcmVudHMsIHRoZSBsaW5rIGZhaWxzLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotCi1pcyBub3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBtYWtlcyBzdXJlIHRoYXQgdGhlIGNhcHMgb2YgdGhlIGxpbmsgaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLXBhZHMtZmlsdGVyZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNwYWRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuYW1lIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBpbiBzb3VyY2UgZWxlbWVudAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciBhbnkgcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0cGFkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaW4gZGVzdGluYXRpb24gZWxlbWVudAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciBhbnkgcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWx0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIGZpbHRlciB0aGUgbGluaywKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3Igbm8gZmlsdGVyLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkIj48L2E+PGgzPmdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpmaWx0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TGlua3MgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+Ci0gdXNpbmcgdGhlIGdpdmVuIGNhcHMgYXMgZmlsdGVyY2Fwcy4KLVRoZSBsaW5rIG11c3QgYmUgZnJvbSBzb3VyY2UgdG8KLWRlc3RpbmF0aW9uOyB0aGUgb3RoZXIgZGlyZWN0aW9uIHdpbGwgbm90IGJlIHRyaWVkLiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yCi1leGlzdGluZyBwYWRzIHRoYXQgYXJlbid0IGxpbmtlZCB5ZXQuIEl0IHdpbGwgcmVxdWVzdCBuZXcgcGFkcyBpZiBuZWNlc3NhcnkuCi1JZiBtdWx0aXBsZSBsaW5rcyBhcmUgcG9zc2libGUsIG9ubHkgb25lIGlzIGVzdGFibGlzaGVkLjwvcD4KLTxwPk1ha2Ugc3VyZSB5b3UgaGF2ZSBhZGRlZCB5b3VyIGVsZW1lbnRzIHRvIGEgYmluIG9yIHBpcGVsaW5lIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2FkZCgpPC9jb2RlPjwvYT4gYmVmb3JlIHRyeWluZyB0byBsaW5rIHRoZW0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbGluay1maWx0ZXJlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBwYWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpbHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gZmlsdGVyIHRoZSBsaW5rLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciBubyBmaWx0ZXIuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jbGFzcy1nZXQtbWV0YWRhdGEiPjwvYT48aDM+Z3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2xhc3M8L3NwYW4+PC9hPiAqa2xhc3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqa2V5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBtZXRhZGF0YSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rZXk8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2xhc3M8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jbGFzcy1nZXQtbWV0YWRhdGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+a2xhc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jbGFzcyB0byBnZXQgbWV0YWRhdGEgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmtleTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBrZXkgdG8gZ2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jbGFzcy1nZXQtbWV0YWRhdGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWV0YWRhdGEgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rZXk8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2V0LWJhc2UtdGltZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBiYXNlIHRpbWUgb2YgYW4gZWxlbWVudC4gU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJhc2UtdGltZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUoKTwvY29kZT48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2V0LWJhc2UtdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBiYXNlIHRpbWUgdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtYmFzZS10aW1lIj48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBiYXNlIHRpbWUgb2YgdGhlIGVsZW1lbnQuIFRoZSBiYXNlIHRpbWUgaXMgdGhlCi1hYnNvbHV0ZSB0aW1lIG9mIHRoZSBjbG9jayB3aGVuIHRoaXMgZWxlbWVudCB3YXMgbGFzdCBwdXQgdG8KLVBMQVlJTkcuIFN1YnRyYWN0aW5nIHRoZSBiYXNlIHRpbWUgZnJvbSB0aGUgY2xvY2sgdGltZSBnaXZlcwotdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtYmFzZS10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtYmFzZS10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGJhc2UgdGltZSBvZiB0aGUgZWxlbWVudC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zZXQtc3RhcnQtdGltZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBzdGFydCB0aW1lIG9mIGFuIGVsZW1lbnQuIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBlbGVtZW50IGlzIHRoZQotcnVubmluZyB0aW1lIG9mIHRoZSBlbGVtZW50IHdoZW4gaXQgbGFzdCB3ZW50IHRvIHRoZSBQQVVTRUQgc3RhdGUuIEluIFJFQURZCi1vciBhZnRlciBhIGZsdXNoaW5nIHNlZWssIGl0IGlzIHNldCB0byAwLjwvcD4KLTxwPlRvcGxldmVsIGVsZW1lbnRzIGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gd2lsbCBtYW5hZ2UgdGhlIHN0YXJ0X3RpbWUgYW5kCi1iYXNlX3RpbWUgb24gaXRzIGNoaWxkcmVuLiBTZXR0aW5nIHRoZSBzdGFydF90aW1lIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4KLW9uIHN1Y2ggYSB0b3BsZXZlbCBlbGVtZW50IHdpbGwgZGlzYWJsZSB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBiYXNlX3RpbWUgdG8KLXRoZSBjaGlsZHJlbiBhbmQgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgYXBwbGljYXRpb24gbWFuYWdlcyB0aGUgYmFzZV90aW1lCi1pdHNlbGYsIGZvciBleGFtcGxlIGlmIHlvdSB3YW50IHRvIHN5bmNocm9uaXplIGNhcHR1cmUgZnJvbSBtdWx0aXBsZQotcGlwZWxpbmVzLCBhbmQgeW91IGNhbiBhbHNvIGVuc3VyZSB0aGF0IHRoZSBwaXBlbGluZXMgaGF2ZSB0aGUgc2FtZSBjbG9jay48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1zdGFydC10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGJhc2UgdGltZSB0byBzZXQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1zdGFydC10aW1lIj48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIGVsZW1lbnQuIFRoZSBzdGFydCB0aW1lIGlzIHRoZQotcnVubmluZyB0aW1lIG9mIHRoZSBjbG9jayB3aGVuIHRoaXMgZWxlbWVudCB3YXMgbGFzdCBwdXQgdG8gUEFVU0VELjwvcD4KLTxwPlVzdWFsbHkgdGhlIHN0YXJ0X3RpbWUgaXMgbWFuYWdlZCBieSBhIHRvcGxldmVsIGVsZW1lbnQgc3VjaCBhcwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtc3RhcnQtdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LXN0YXJ0LXRpbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgc3RhcnQgdGltZSBvZiB0aGUgZWxlbWVudC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2V0LWJ1cyI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfYnVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2VsZW1lbnRfc2V0X2J1cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+ICpidXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgYnVzIG9mIHRoZSBlbGVtZW50LiBJbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9uIHRoZSBidXMuCi1Gb3IgaW50ZXJuYWwgdXNlIG9ubHksIHVubGVzcyB5b3UncmUgdGVzdGluZyBlbGVtZW50cy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1idXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2V0IHRoZSBidXMgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWJ1cyI+PC9hPjxoMz5nc3RfZWxlbWVudF9nZXRfYnVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqCi1nc3RfZWxlbWVudF9nZXRfYnVzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgYnVzIG9mIHRoZSBlbGVtZW50LiBOb3RlIHRoYXQgb25seSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IHdpbGwgcHJvdmlkZSBhCi1idXMgZm9yIHRoZSBhcHBsaWNhdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtYnVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIGJ1cyBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtYnVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGVsZW1lbnQncyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPi4gdW5yZWYgYWZ0ZXIgdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2V0LWNvbnRleHQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfc2V0X2NvbnRleHTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZWxlbWVudF9zZXRfY29udGV4dCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBjb250ZXh0IG9mIHRoZSBlbGVtZW50LiBJbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBjb250ZXh0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2V0LWNvbnRleHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2V0IHRoZSBjb250ZXh0IG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiB0byBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtY29udGV4dCI+PC9hPjxoMz5nc3RfZWxlbWVudF9nZXRfY29udGV4dMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmNvbnRleHRfdHlwZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBjb250ZXh0IHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnRleHRfdHlwZTwvY29kZT48L2VtPgotIHNldCBvbiB0aGUgZWxlbWVudCBvciBOVUxMLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWNvbnRleHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBjb250ZXh0IG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIG5hbWUgb2YgYSBjb250ZXh0IHRvIHJldHJpZXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtY29udGV4dC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4gb3IgTlVMTC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWNvbnRleHQtdW5sb2NrZWQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRfdW5sb2NrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT7CoCoKLWdzdF9lbGVtZW50X2dldF9jb250ZXh0X3VubG9ja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjb250ZXh0X3R5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgY29udGV4dCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250ZXh0X3R5cGU8L2NvZGU+PC9lbT4KLSBzZXQgb24gdGhlIGVsZW1lbnQgb3IgTlVMTC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtY29udGV4dC11bmxvY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIGNvbnRleHQgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHRfdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbmFtZSBvZiBhIGNvbnRleHQgdG8gcmV0cmlldmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1jb250ZXh0LXVubG9ja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiBvciBOVUxMLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDQuaHRtbCNhcGktaW5kZXgtMS44Ij4xLjg8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtY29udGV4dHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9lbGVtZW50X2dldF9jb250ZXh0cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGNvbnRleHRzIHNldCBvbiB0aGUgZWxlbWVudC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1jb250ZXh0cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2V0IHRoZSBjb250ZXh0IG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1jb250ZXh0cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IExpc3Qgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LkNvbnRleHRdWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDQuaHRtbCNhcGktaW5kZXgtMS44Ij4xLjg8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtZmFjdG9yeSI+PC9hPjxoMz5nc3RfZWxlbWVudF9nZXRfZmFjdG9yecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZXMgdGhlIGZhY3RvcnkgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhpcyBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1mYWN0b3J5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byByZXF1ZXN0IHRoZSBlbGVtZW50IGZhY3Rvcnkgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWZhY3RvcnkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gdXNlZCBmb3IgY3JlYXRpbmcgdGhpcwotZWxlbWVudC4gbm8gcmVmY291bnRpbmcgaXMgbmVlZGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zZXQtbmFtZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfbmFtZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfbmFtZShlbGVtLG5hbWUpIGdzdF9vYmplY3Rfc2V0X25hbWUoR1NUX09CSkVDVF9DQVNUKGVsZW0pLG5hbWUpCi08L3ByZT4KLTxwPlNldHMgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQsIGdldHRpbmcgcmlkIG9mIHRoZSBvbGQgbmFtZSBpZiB0aGVyZSB3YXMgb25lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIHNldCB0aGUgbmFtZSBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtbmFtZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9nZXRfbmFtZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfbmFtZShlbGVtKSAgICAgIGdzdF9vYmplY3RfZ2V0X25hbWUoR1NUX09CSkVDVF9DQVNUKGVsZW0pKQotPC9wcmU+Ci08cD5SZXR1cm5zIGEgY29weSBvZiB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPgotLgotQ2FsbGVyIHNob3VsZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHRoZSByZXR1cm4gdmFsdWUgYWZ0ZXIgdXNhZ2UuCi1Gb3IgYSBuYW1lbGVzcyBlbGVtZW50LCB0aGlzIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCB3aGljaCB5b3UgY2FuIHNhZmVseSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+Ci1hcyB3ZWxsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIG5hbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4KLS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuYW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtPC9jb2RlPjwvZW0+Ci0uIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4KLWFmdGVyIHVzYWdlLiBNVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1wYXJlbnQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfc2V0X3BhcmVudCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfcGFyZW50KGVsZW0scGFyZW50KSAgICAgZ3N0X29iamVjdF9zZXRfcGFyZW50KEdTVF9PQkpFQ1RfQ0FTVChlbGVtKSxwYXJlbnQpCi08L3ByZT4KLTxwPlNldHMgdGhlIHBhcmVudCBvZiBhbiBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1wYXJlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2V0IHRoZSBwYXJlbnQgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgcGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IG9mIHRoZSBlbGVtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtcGFyZW50Ij48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9wYXJlbnQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChlbGVtKSAgICBnc3Rfb2JqZWN0X2dldF9wYXJlbnQoR1NUX09CSkVDVF9DQVNUKGVsZW0pKQotPC9wcmU+Ci08cD5HZXQgdGhlIHBhcmVudCBvZiBhbiBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1wYXJlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgcGFyZW50IG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1wYXJlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcGFyZW50IG9mIGFuIGVsZW1lbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1jbG9jayI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfY2xvY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X3NldF9jbG9jayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGNsb2NrIGZvciB0aGUgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpbmNyZWFzZXMgdGhlCi1yZWZjb3VudCBvbiB0aGUgY2xvY2suIEFueSBwcmV2aW91c2x5IHNldCBjbG9jayBvbiB0aGUgb2JqZWN0Ci1pcyB1bnJlZmZlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zZXQtY2xvY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2V0IHRoZSBjbG9jayBmb3IuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRvIHNldCBmb3IgdGhlIGVsZW1lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zZXQtY2xvY2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGVsZW1lbnQgYWNjZXB0ZWQgdGhlIGNsb2NrLiBBbiBlbGVtZW50IGNhbiByZWZ1c2UgYQotY2xvY2sgd2hlbiBpdCwgZm9yIGV4YW1wbGUsIGlzIG5vdCBhYmxlIHRvIHNsYXZlIGl0cyBpbnRlcm5hbCBjbG9jayB0byB0aGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPgotb3Igd2hlbiBpdCByZXF1aXJlcyBhIHNwZWNpZmljIGNsb2NrIHRvIG9wZXJhdGUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIj48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9jbG9ja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgY2xvY2sgb2YgdGhlIGVsZW1lbnQuIFRoaXMgaXMgdGhlIGNsb2NrIGFzIHdhcwotbGFzdCBzZXQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9jbG9ja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X2Nsb2NrKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5FbGVtZW50cyBpbiBhIHBpcGVsaW5lIHdpbGwgb25seSBoYXZlIHRoZWlyIGNsb2NrIHNldCB3aGVuIHRoZQotcGlwZWxpbmUgaXMgaW4gdGhlIFBMQVlJTkcgc3RhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBnZXQgdGhlIGNsb2NrIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWdldC1jbG9jay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBvZiB0aGUgZWxlbWVudC4gdW5yZWYgYWZ0ZXIgdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcHJvdmlkZS1jbG9jayI+PC9hPjxoMz5nc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi1nc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBjbG9jayBwcm92aWRlZCBieSB0aGUgZ2l2ZW4gZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJub3RlIj5BbiBlbGVtZW50IGlzIG9ubHkgcmVxdWlyZWQgdG8gcHJvdmlkZSBhIGNsb2NrIGluIHRoZSBQQVVTRUQKLXN0YXRlLiBTb21lIGVsZW1lbnRzIGNhbiBwcm92aWRlIGEgY2xvY2sgaW4gb3RoZXIgc3RhdGVzLjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcHJvdmlkZS1jbG9jay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1wcm92aWRlLWNsb2NrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIEdzdENsb2NrIHByb3ZpZGVkIGJ5IHRoZQotZWxlbWVudCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm8gY2xvY2sgY291bGQgYmUgcHJvdmlkZWQuICBVbnJlZiBhZnRlciB1c2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1zdGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfc3RhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdGF0ZUNoYW5nZVJldHVybjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9zZXRfc3RhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBzdGF0ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBzZXQgdGhlCi1yZXF1ZXN0ZWQgc3RhdGUgYnkgZ29pbmcgdGhyb3VnaCBhbGwgdGhlIGludGVybWVkaWFyeSBzdGF0ZXMgYW5kIGNhbGxpbmcKLXRoZSBjbGFzcydzIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBmb3IgZWFjaC48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9zcGFuPjwvYT4sIGluIHdoaWNoIGNhc2UgdGhlCi1lbGVtZW50IHdpbGwgcGVyZm9ybSB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdGF0ZSBjaGFuZ2UgYXN5bmNocm9ub3VzbHkgaW4KLWFub3RoZXIgdGhyZWFkLgotQW4gYXBwbGljYXRpb24gY2FuIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlKCk8L2NvZGU+PC9hPiB0byB3YWl0IGZvciB0aGUgY29tcGxldGlvbgotb2YgdGhlIHN0YXRlIGNoYW5nZSBvciBpdCBjYW4gd2FpdCBmb3IgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUFTWU5DLURPTkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0FTWU5DX0RPTkU8L2NvZGU+PC9hPiBvcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVEFURS1DSEFOR0VEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEPC9jb2RlPjwvYT4gb24gdGhlIGJ1cy48L3A+Ci08cD5TdGF0ZSBjaGFuZ2VzIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVJFQURZOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfUkVBRFk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1OVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfTlVMTDwvY29kZT48L2E+IG5ldmVyIHJldHVybgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2V0LXN0YXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGNoYW5nZSBzdGF0ZSBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZWxlbWVudCdzIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zZXQtc3RhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBSZXN1bHQgb2YgdGhlIHN0YXRlIGNoYW5nZSB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LXN0YXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X2dldF9zdGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2dldF9zdGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+ICpzdGF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiAqcGVuZGluZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVvdXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnQuPC9wPgotPHA+Rm9yIGVsZW1lbnRzIHRoYXQgcGVyZm9ybWVkIGFuIEFTWU5DIHN0YXRlIGNoYW5nZSwgYXMgcmVwb3J0ZWQgYnkKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdXAgdG8gdGhlCi1zcGVjaWZpZWQgdGltZW91dCB2YWx1ZSBmb3IgdGhlIHN0YXRlIGNoYW5nZSB0byBjb21wbGV0ZS4KLUlmIHRoZSBlbGVtZW50IGNvbXBsZXRlcyB0aGUgc3RhdGUgY2hhbmdlIG9yIGdvZXMgaW50bwotYW4gZXJyb3IsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSB3aXRoIGEgcmV0dXJuIHZhbHVlIG9mCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtU1VDQ0VTUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTPC9jb2RlPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUZBSUxVUkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTwvY29kZT48L2E+IHJlc3BlY3RpdmVseS48L3A+Ci08cD5Gb3IgZWxlbWVudHMgdGhhdCBkaWQgbm90IHJldHVybiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtQVNZTkM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfQVNZTkM8L2NvZGU+PC9hPiwgdGhpcyBmdW5jdGlvbgotcmV0dXJucyB0aGUgY3VycmVudCBhbmQgcGVuZGluZyBzdGF0ZSBpbW1lZGlhdGVseS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLU5PLVBSRVJPTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDwvY29kZT48L2E+IGlmIHRoZSBlbGVtZW50Ci1zdWNjZXNzZnVsbHkgY2hhbmdlZCBpdHMgc3RhdGUgYnV0IGlzIG5vdCBhYmxlIHRvIHByb3ZpZGUgZGF0YSB5ZXQuCi1UaGlzIG1vc3RseSBoYXBwZW5zIGZvciBsaXZlIHNvdXJjZXMgdGhhdCBvbmx5IHByb2R1Y2UgZGF0YSBpbgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUExBWUlORzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BMQVlJTkc8L2NvZGU+PC9hPi4gV2hpbGUgdGhlIHN0YXRlIGNoYW5nZSByZXR1cm4gaXMgZXF1aXZhbGVudCB0bwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVNVQ0NFU1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzwvY29kZT48L2E+LCBpdCBpcyByZXR1cm5lZCB0byB0aGUgYXBwbGljYXRpb24gdG8gc2lnbmFsIHRoYXQKLXNvbWUgc2luayBlbGVtZW50cyBtaWdodCBub3QgYmUgYWJsZSB0byBjb21wbGV0ZSB0aGVpciBzdGF0ZSBjaGFuZ2UgYmVjYXVzZQotYW4gZWxlbWVudCBpcyBub3QgcHJvZHVjaW5nIGRhdGEgdG8gY29tcGxldGUgdGhlIHByZXJvbGwuIFdoZW4gc2V0dGluZyB0aGUKLWVsZW1lbnQgdG8gcGxheWluZywgdGhlIHByZXJvbGwgd2lsbCBjb21wbGV0ZSBhbmQgcGxheWJhY2sgd2lsbCBzdGFydC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1nZXQtc3RhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBzdGF0ZSBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiB0byBob2xkIHRoZSBzdGF0ZS4KLUNhbiBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBlbmRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiB0byBob2xkIHRoZSBwZW5kaW5nCi1zdGF0ZS4gQ2FuIGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZW91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gc3BlY2lmeSB0aGUgdGltZW91dCBmb3IgYW4gYXN5bmMKLXN0YXRlIGNoYW5nZSBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9OT05FIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvY29kZT48L2E+IGZvciBpbmZpbml0ZSB0aW1lb3V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZ2V0LXN0YXRlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVNVQ0NFU1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzwvY29kZT48L2E+IGlmIHRoZSBlbGVtZW50IGhhcyBubyBtb3JlIHBlbmRpbmcgc3RhdGUKLWFuZCB0aGUgbGFzdCBzdGF0ZSBjaGFuZ2Ugc3VjY2VlZGVkLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtQVNZTkM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfQVNZTkM8L2NvZGU+PC9hPiBpZiB0aGUKLWVsZW1lbnQgaXMgc3RpbGwgcGVyZm9ybWluZyBhIHN0YXRlIGNoYW5nZSBvcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUZBSUxVUkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTwvY29kZT48L2E+IGlmIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSBmYWlsZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2V0LWxvY2tlZC1zdGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gbG9ja2VkX3N0YXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxvY2tzIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50LCBzbyBzdGF0ZSBjaGFuZ2VzIG9mIHRoZSBwYXJlbnQgZG9uJ3QgYWZmZWN0Ci10aGlzIGVsZW1lbnQgYW55bW9yZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNldC1sb2NrZWQtc3RhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bG9ja2VkX3N0YXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHRvIGxvY2sgdGhlIGVsZW1lbnQncyBzdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2V0LWxvY2tlZC1zdGF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc3RhdGUgd2FzIGNoYW5nZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIGJhZCBwYXJhbWV0ZXJzIHdlcmUgZ2l2ZW4KLW9yIHRoZSBlbGVtZW50cyBzdGF0ZS1sb2NraW5nIG5lZWRlZCBubyBjaGFuZ2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWlzLWxvY2tlZC1zdGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2lzX2xvY2tlZF9zdGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBpcyBsb2NrZWQuCi1JZiB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBpcyBsb2NrZWQsIHN0YXRlIGNoYW5nZXMgb2YgdGhlIHBhcmVudCBkb24ndAotYWZmZWN0IHRoZSBlbGVtZW50LgotVGhpcyB3YXkgeW91IGNhbiBsZWF2ZSBjdXJyZW50bHkgdW51c2VkIGVsZW1lbnRzIGluc2lkZSBiaW5zLiBKdXN0IGxvY2sgdGhlaXIKLXN0YXRlIGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RhdGUgZnJvbSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1OVUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfTlVMTDwvc3Bhbj48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtaXMtbG9ja2VkLXN0YXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1pcy1sb2NrZWQtc3RhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIHRoZSBlbGVtZW50J3Mgc3RhdGUgaXMgbG9ja2VkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1hYm9ydC1zdGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9hYm9ydF9zdGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X2Fib3J0X3N0YXRlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWJvcnQgdGhlIHN0YXRlIGNoYW5nZSBvZiB0aGUgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkCi1ieSBlbGVtZW50cyB0aGF0IGRvIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzIGFuZCBmaW5kIG91dAotc29tZXRoaW5nIGlzIHdyb25nLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBTVEFURV9MT0NLIGhlbGQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1hYm9ydC1zdGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gYWJvcnQgdGhlIHN0YXRlIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY29udGludWUtc3RhdGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfY29udGludWVfc3RhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdGF0ZUNoYW5nZVJldHVybjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gcmV0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbW1pdCB0aGUgc3RhdGUgY2hhbmdlIG9mIHRoZSBlbGVtZW50IGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0Ci1wZW5kaW5nIHN0YXRlIGlmIGFueS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkCi1ieSBlbGVtZW50cyB0aGF0IGRvIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLgotVGhlIGNvcmUgd2lsbCBub3JtYWxseSBjYWxsIHRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgd2hlbiBhbgotZWxlbWVudCByZXR1cm5lZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtU1VDQ0VTUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTPC9jb2RlPjwvYT4gZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLjwvcD4KLTxwPklmIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgdGhlIGVsZW1lbnQgc3RpbGwgaGFzIG5vdCByZWFjaGVkCi10aGUgcGVuZGluZyBzdGF0ZSwgdGhlIG5leHQgc3RhdGUgY2hhbmdlIGlzIHBlcmZvcm1lZC48L3A+Ci08cD5UaGlzIG1ldGhvZCBpcyB1c2VkIGludGVybmFsbHkgYW5kIHNob3VsZCBub3JtYWxseSBub3QgYmUgY2FsbGVkIGJ5IHBsdWdpbnMKLW9yIGFwcGxpY2F0aW9ucy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jb250aW51ZS1zdGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBjb250aW51ZSB0aGUgc3RhdGUgY2hhbmdlIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcHJldmlvdXMgc3RhdGUgcmV0dXJuIHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1jb250aW51ZS1zdGF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSByZXN1bHQgb2YgdGhlIGNvbW1pdCBzdGF0ZSBjaGFuZ2UuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbG9zdC1zdGF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9sb3N0X3N0YXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2VsZW1lbnRfbG9zdF9zdGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkJyaW5ncyB0aGUgZWxlbWVudCB0byB0aGUgbG9zdCBzdGF0ZS4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCi1lbGVtZW50IGlzIGNvcGllZCB0byB0aGUgcGVuZGluZyBzdGF0ZSBzbyB0aGF0IGFueSBjYWxsIHRvCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlKCk8L2NvZGU+PC9hPiB3aWxsIHJldHVybiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtQVNZTkM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfQVNZTkM8L2NvZGU+PC9hPi48L3A+Ci08cD5BbiBBU1lOQ19TVEFSVCBtZXNzYWdlIGlzIHBvc3RlZC4gSWYgdGhlIGVsZW1lbnQgd2FzIFBMQVlJTkcsIGl0IHdpbGwKLWdvIHRvIFBBVVNFRC4gVGhlIGVsZW1lbnQgd2lsbCBiZSByZXN0b3JlZCB0byBpdHMgUExBWUlORyBzdGF0ZSBieQotdGhlIHBhcmVudCBwaXBlbGluZSB3aGVuIGl0IHByZXJvbGxzIGFnYWluLjwvcD4KLTxwPlRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yIGVsZW1lbnRzIHRoYXQgbG9zdCB0aGVpciBwcmVyb2xsIGJ1ZmZlcgotaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBBVVNFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BBVVNFRDwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBMQVlJTkc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QTEFZSU5HPC9jb2RlPjwvYT4gc3RhdGUgYWZ0ZXIgYSBmbHVzaCwKLXRoZXkgd2lsbCBnbyB0byB0aGVpciBwZW5kaW5nIHN0YXRlIGFnYWluIHdoZW4gYSBuZXcgcHJlcm9sbCBidWZmZXIgaXMKLXF1ZXVlZC4gVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjdXJyZW50bHkKLW5vdCBpbiBlcnJvciBvciBhbiBhc3luYyBzdGF0ZSBjaGFuZ2UuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYW5kIHNob3VsZCBub3JtYWxseSBub3QgYmUgY2FsbGVkIGZyb20KLXBsdWdpbnMgb3IgYXBwbGljYXRpb25zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWxvc3Qtc3RhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRoZSBzdGF0ZSBpcyBsb3N0IG9mPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zdGF0ZS1nZXQtbmFtZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gc3RhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHN0YXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXN0YXRlLWdldC1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IHRvIGdldCB0aGUgbmFtZSBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zdGF0ZS1nZXQtbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgc3RyaW5nIHdpdGggdGhlIG5hbWUgb2YgdGhlIHN0YXRlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zdGF0ZS1jaGFuZ2UtcmV0dXJuLWdldC1uYW1lIj48L2E+PGgzPmdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L3NwYW4+PC9hPiBzdGF0ZV9yZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIHN0YXRlIGNoYW5nZSByZXN1bHQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc3RhdGUtY2hhbmdlLXJldHVybi1nZXQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhdGVfcmV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBuYW1lIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXN0YXRlLWNoYW5nZS1yZXR1cm4tZ2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZQotcmVzdWx0LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zeW5jLXN0YXRlLXdpdGgtcGFyZW50Ij48L2E+PGgzPmdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmllcyB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50IHRvIHRoZSBzYW1lIGFzIGl0cyBwYXJlbnQuCi1JZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4sIHRoZSBzdGF0ZSBvZiBlbGVtZW50IGlzIHVuZGVmaW5lZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zeW5jLXN0YXRlLXdpdGgtcGFyZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zeW5jLXN0YXRlLXdpdGgtcGFyZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiB0aGUgZWxlbWVudCdzIHN0YXRlIGNvdWxkIGJlIHN5bmNlZCB0byB0aGUgcGFyZW50J3Mgc3RhdGUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2hhbmdlLXN0YXRlIj48L2E+PGgzPmdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+IHRyYW5zaXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGVyZm9ybSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnNpdGlvbjwvY29kZT48L2VtPgotIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIFNUQVRFX0xPQ0sgaGVsZCBhbmQgaXMgbWFpbmx5IHVzZWQKLWludGVybmFsbHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2hhbmdlLXN0YXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRyYW5zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVxdWVzdGVkIHRyYW5zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWNoYW5nZS1zdGF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT4gb2YgdGhlIHN0YXRlIHRyYW5zaXRpb24uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LW1lc3NhZ2UtZnVsbCI+PC9hPjxoMz5nc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZG9tYWluPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGNvZGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGV4dDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZWJ1ZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWxlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZ1bmN0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGxpbmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9zdCBhbiBlcnJvciwgd2FybmluZyBvciBpbmZvIG1lc3NhZ2Ugb24gdGhlIGJ1cyBmcm9tIGluc2lkZSBhbiBlbGVtZW50LjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+Ci0gbXVzdCBiZSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVSUk9SOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVTU0FHRV9FUlJPUjwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVdBUk5JTkc6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9NRVNTQUdFX1dBUk5JTkc8L3NwYW4+PC9hPiBvcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1JTkZPOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVTU0FHRV9JTkZPPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1tZXNzYWdlLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2VuZCBtZXNzYWdlIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZG9tYWluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIEdTdHJlYW1lciBHRXJyb3IgZG9tYWluIHRoaXMgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgR0Vycm9yIGNvZGUgYmVsb25naW5nIHRvIHRoZSBkb21haW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhbiBhbGxvY2F0ZWQgdGV4dCBzdHJpbmcgdG8gYmUgdXNlZAotYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgbWVzc2FnZSBjb25uZWN0ZWQgdG8gY29kZSwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVidWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYW4gYWxsb2NhdGVkIGRlYnVnIG1lc3NhZ2UgdG8gYmUKLXVzZWQgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgZGVidWdnaW5nIGluZm9ybWF0aW9uLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNvdXJjZSBjb2RlIGZpbGUgd2hlcmUgdGhlIGVycm9yIHdhcyBnZW5lcmF0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc291cmNlIGNvZGUgZnVuY3Rpb24gd2hlcmUgdGhlIGVycm9yIHdhcyBnZW5lcmF0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGluZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2UgY29kZSBsaW5lIHdoZXJlIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LW1lc3NhZ2UtZnVsbC13aXRoLWRldGFpbHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsX3dpdGhfZGV0YWlsc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbF93aXRoX2RldGFpbHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBkb21haW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGNvZGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRleHQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWxlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmdW5jdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbGluZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBvc3QgYW4gZXJyb3IsIHdhcm5pbmcgb3IgaW5mbyBtZXNzYWdlIG9uIHRoZSBidXMgZnJvbSBpbnNpZGUgYW4gZWxlbWVudC48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotIG11c3QgYmUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1FUlJPUjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfRVJST1I8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1XQVJOSU5HOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVTU0FHRV9XQVJOSU5HPC9zcGFuPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtSU5GTzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfSU5GTzwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LW1lc3NhZ2UtZnVsbC13aXRoLWRldGFpbHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2VuZCBtZXNzYWdlIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZG9tYWluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIEdTdHJlYW1lciBHRXJyb3IgZG9tYWluIHRoaXMgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgR0Vycm9yIGNvZGUgYmVsb25naW5nIHRvIHRoZSBkb21haW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhbiBhbGxvY2F0ZWQgdGV4dCBzdHJpbmcgdG8gYmUgdXNlZAotYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgbWVzc2FnZSBjb25uZWN0ZWQgdG8gY29kZSwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVidWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYW4gYWxsb2NhdGVkIGRlYnVnIG1lc3NhZ2UgdG8gYmUKLXVzZWQgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgZGVidWdnaW5nIGluZm9ybWF0aW9uLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNvdXJjZSBjb2RlIGZpbGUgd2hlcmUgdGhlIGVycm9yIHdhcyBnZW5lcmF0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc291cmNlIGNvZGUgZnVuY3Rpb24gd2hlcmUgdGhlIGVycm9yIHdhcyBnZW5lcmF0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGluZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2UgY29kZSBsaW5lIHdoZXJlIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBvcHRpb25hbCBkZXRhaWxzIHN0cnVjdHVyZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1ha2UtZWxlbWVudC1tZXNzYWdlLWRldGFpbHMiPjwvYT48aDM+Z3N0X21ha2VfZWxlbWVudF9tZXNzYWdlX2RldGFpbHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9tYWtlX2VsZW1lbnRfbWVzc2FnZV9kZXRhaWxzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1wb3N0LW1lc3NhZ2UiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBvc3QgYSBtZXNzYWdlIG9uIHRoZSBlbGVtZW50J3MgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4uIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHRoZQotbWVzc2FnZTsgaWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSBtZXNzYWdlIGFmdGVyIHRoaXMgY2FsbCwgeW91IHNob3VsZCBhZGQgYW4KLWFkZGl0aW9uYWwgcmVmZXJlbmNlIGJlZm9yZSBjYWxsaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXBvc3QtbWVzc2FnZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBwb3N0aW5nIHRoZSBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiB0byBwb3N0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXBvc3QtbWVzc2FnZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bGx5IHBvc3RlZC4gVGhlIGZ1bmN0aW9uIHJldHVybnMKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSBlbGVtZW50IGRpZCBub3QgaGF2ZSBhIGJ1cy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1xdWVyeSI+PC9hPjxoMz5nc3RfZWxlbWVudF9xdWVyecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfcXVlcnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBlcmZvcm1zIGEgcXVlcnkgb24gdGhlIGdpdmVuIGVsZW1lbnQuPC9wPgotPHA+Rm9yIGVsZW1lbnRzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IGEgcXVlcnkgaGFuZGxlciwgdGhpcyBmdW5jdGlvbgotZm9yd2FyZHMgdGhlIHF1ZXJ5IHRvIGEgcmFuZG9tIHNyY3BhZCBvciB0byB0aGUgcGVlciBvZiBhCi1yYW5kb20gbGlua2VkIHNpbmtwYWQgb2YgdGhpcyBlbGVtZW50LjwvcD4KLTxwPlBsZWFzZSBub3RlIHRoYXQgc29tZSBxdWVyaWVzIG1pZ2h0IG5lZWQgYSBydW5uaW5nIHBpcGVsaW5lIHRvIHdvcmsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcXVlcnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gcGVyZm9ybSB0aGUgcXVlcnkgb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1xdWVyeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXF1ZXJ5LWNvbnZlcnQiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcXVlcnlfY29udmVydMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfcXVlcnlfY29udmVydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3JjX3ZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZGVzdF92YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UXVlcmllcyBhbiBlbGVtZW50IHRvIGNvbnZlcnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY192YWw8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX2Zvcm1hdDwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X2Zvcm1hdDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXF1ZXJ5LWNvbnZlcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gaW52b2tlIHRoZSBjb252ZXJ0IHF1ZXJ5IG9uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNfZm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gdG8gY29udmVydCBmcm9tLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNfdmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB2YWx1ZSB0byBjb252ZXJ0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0X2Zvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gdG8gY29udmVydCB0by48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF92YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcXVlcnktY29udmVydC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1xdWVyeS1wb3NpdGlvbiI+PC9hPjxoMz5nc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqY3VyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJpZXMgYW4gZWxlbWVudCAodXN1YWxseSB0b3AtbGV2ZWwgcGlwZWxpbmUgb3IgcGxheWJpbiBlbGVtZW50KSBmb3IgdGhlCi1zdHJlYW0gcG9zaXRpb24gaW4gbmFub3NlY29uZHMuIFRoaXMgd2lsbCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgdGhlCi1zdHJlYW0gZHVyYXRpb24gKGlmIHRoZSBzdHJlYW0gZHVyYXRpb24gaXMga25vd24pLiBUaGlzIHF1ZXJ5IHdpbGwgdXN1YWxseQotb25seSB3b3JrIG9uY2UgdGhlIHBpcGVsaW5lIGlzIHByZXJvbGxlZCAoaS5lLiByZWFjaGVkIFBBVVNFRCBvciBQTEFZSU5HCi1zdGF0ZSkuIFRoZSBhcHBsaWNhdGlvbiB3aWxsIHJlY2VpdmUgYW4gQVNZTkNfRE9ORSBtZXNzYWdlIG9uIHRoZSBwaXBlbGluZQotYnVzIHdoZW4gdGhhdCBpcyB0aGUgY2FzZS48L3A+Ci08cD5JZiBvbmUgcmVwZWF0ZWRseSBjYWxscyB0aGlzIGZ1bmN0aW9uIG9uZSBjYW4gYWxzbyBjcmVhdGUgYSBxdWVyeSBhbmQgcmV1c2UKLWl0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcXVlcnkiIHRpdGxlPSJnc3RfZWxlbWVudF9xdWVyecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcXVlcnkoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXF1ZXJ5LXBvc2l0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgcG9zaXRpb24gcXVlcnkgb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gcmVxdWVzdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmN1cjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIGxvY2F0aW9uIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjdXJyZW50Ci1wb3NpdGlvbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcXVlcnktcG9zaXRpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcXVlcnktZHVyYXRpb24iPjwvYT48aDM+Z3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJpZXMgYW4gZWxlbWVudCAodXN1YWxseSB0b3AtbGV2ZWwgcGlwZWxpbmUgb3IgcGxheWJpbiBlbGVtZW50KSBmb3IgdGhlCi10b3RhbCBzdHJlYW0gZHVyYXRpb24gaW4gbmFub3NlY29uZHMuIFRoaXMgcXVlcnkgd2lsbCBvbmx5IHdvcmsgb25jZSB0aGUKLXBpcGVsaW5lIGlzIHByZXJvbGxlZCAoaS5lLiByZWFjaGVkIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlKS4gVGhlIGFwcGxpY2F0aW9uCi13aWxsIHJlY2VpdmUgYW4gQVNZTkNfRE9ORSBtZXNzYWdlIG9uIHRoZSBwaXBlbGluZSBidXMgd2hlbiB0aGF0IGlzIHRoZSBjYXNlLjwvcD4KLTxwPklmIHRoZSBkdXJhdGlvbiBjaGFuZ2VzIGZvciBzb21lIHJlYXNvbiwgeW91IHdpbGwgZ2V0IGEgRFVSQVRJT05fQ0hBTkdFRAotbWVzc2FnZSBvbiB0aGUgcGlwZWxpbmUgYnVzLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgcmUtcXVlcnkgdGhlIGR1cmF0aW9uCi11c2luZyB0aGlzIGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXF1ZXJ5LWR1cmF0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgZHVyYXRpb24gcXVlcnkgb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gcmVxdWVzdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmR1cmF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgbG9jYXRpb24gaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHRvdGFsIGR1cmF0aW9uLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1xdWVyeS1kdXJhdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zZW5kLWV2ZW50Ij48L2E+PGgzPmdzdF9lbGVtZW50X3NlbmRfZXZlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2VuZHMgYW4gZXZlbnQgdG8gYW4gZWxlbWVudC4gSWYgdGhlIGVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgYW4KLWV2ZW50IGhhbmRsZXIsIHRoZSBldmVudCB3aWxsIGJlIHB1c2hlZCBvbiBhIHJhbmRvbSBsaW5rZWQgc2luayBwYWQgZm9yCi1kb3duc3RyZWFtIGV2ZW50cyBvciBhIHJhbmRvbSBsaW5rZWQgc291cmNlIHBhZCBmb3IgdXBzdHJlYW0gZXZlbnRzLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBwcm92aWRlZCBldmVudCBzbyB5b3Ugc2hvdWxkCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcmVmIiB0aXRsZT0iZ3N0X2V2ZW50X3JlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X3JlZigpPC9jb2RlPjwvYT4gaXQgaWYgeW91IHdhbnQgdG8gcmV1c2UgdGhlIGV2ZW50IGFmdGVyIHRoaXMgY2FsbC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNlbmQtZXZlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2VuZCB0aGUgZXZlbnQgdG8uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0byBzZW5kIHRvIHRoZSBlbGVtZW50LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNlbmQtZXZlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLiBFdmVudHMgdGhhdCB0cmlnZ2VyIGEgcHJlcm9sbCAoc3VjaAotYXMgZmx1c2hpbmcgc2Vla3MgYW5kIHN0ZXBzKSB3aWxsIGVtaXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1BU1lOQy1ET05FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9BU1lOQ19ET05FPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNlZWstc2ltcGxlIj48L2E+PGgzPmdzdF9lbGVtZW50X3NlZWtfc2ltcGxlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9zZWVrX3NpbXBsZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtGbGFnczwvc3Bhbj48L2E+IHNlZWtfZmxhZ3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc2Vla19wb3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2ltcGxlIEFQSSB0byBwZXJmb3JtIGEgc2VlayBvbiB0aGUgZ2l2ZW4gZWxlbWVudCwgbWVhbmluZyBpdCBqdXN0IHNlZWtzCi10byB0aGUgZ2l2ZW4gcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW0uIEZvciBtb3JlIGNvbXBsZXgKLW9wZXJhdGlvbnMgbGlrZSBzZWdtZW50IHNlZWtzIChlLmcuIGZvciBsb29waW5nKSBvciBjaGFuZ2luZyB0aGUgcGxheWJhY2sKLXJhdGUgb3Igc2Vla2luZyByZWxhdGl2ZSB0byB0aGUgbGFzdCBjb25maWd1cmVkIHBsYXliYWNrIHNlZ21lbnQgeW91IHNob3VsZAotdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VlayIgdGl0bGU9ImdzdF9lbGVtZW50X3NlZWvCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NlZWsoKTwvY29kZT48L2E+LjwvcD4KLTxwPkluIGEgY29tcGxldGVseSBwcmVyb2xsZWQgUEFVU0VEIG9yIFBMQVlJTkcgcGlwZWxpbmUsIHNlZWtpbmcgaXMgYWx3YXlzCi1ndWFyYW50ZWVkIHRvIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb24gYSBzZWVrYWJsZSBtZWRpYSB0eXBlIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IHdoZW4gdGhlIG1lZGlhCi10eXBlIGlzIGNlcnRhaW5seSBub3Qgc2Vla2FibGUgKHN1Y2ggYXMgYSBsaXZlIHN0cmVhbSkuPC9wPgotPHA+U29tZSBlbGVtZW50cyBhbGxvdyBmb3Igc2Vla2luZyBpbiB0aGUgUkVBRFkgc3RhdGUsIGluIHRoaXMKLWNhc2UgdGhleSB3aWxsIHN0b3JlIHRoZSBzZWVrIGV2ZW50IGFuZCBleGVjdXRlIGl0IHdoZW4gdGhleSBhcmUgcHV0IHRvCi1QQVVTRUQuIElmIHRoZSBlbGVtZW50IHN1cHBvcnRzIHNlZWsgaW4gUkVBRFksIGl0IHdpbGwgYWx3YXlzIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbgotaXQgcmVjZWl2ZXMgdGhlIGV2ZW50IGluIHRoZSBSRUFEWSBzdGF0ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zZWVrLXNpbXBsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byBzZWVrIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHRvIGV4ZWN1dGUgdGhlIHNlZWsgaW4sIHN1Y2ggYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVRJTUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1JNQVRfVElNRTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZWtfZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zZWVrIG9wdGlvbnM7IHBsYXliYWNrIGFwcGxpY2F0aW9ucyB3aWxsIHVzdWFsbHkgd2FudCB0byB1c2UKLUdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0tFWV9VTklUIGhlcmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vla19wb3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb3NpdGlvbiB0byBzZWVrIHRvIChyZWxhdGl2ZSB0byB0aGUgc3RhcnQpOyBpZiB5b3UgYXJlIGRvaW5nCi1hIHNlZWsgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVRJTUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1JNQVRfVElNRTwvc3Bhbj48L2E+IHRoaXMgdmFsdWUgaXMgaW4gbmFub3NlY29uZHMgLQotbXVsdGlwbHkgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtU0VDT05EOkNBUFMiIHRpdGxlPSJHU1RfU0VDT05EIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NFQ09ORDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgc2Vjb25kcyB0byBuYW5vc2Vjb25kcyBvcgotd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtTVNFQ09ORDpDQVBTIiB0aXRsZT0iR1NUX01TRUNPTkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTVNFQ09ORDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgbWlsbGlzZWNvbmRzIHRvIG5hbm9zZWNvbmRzLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2Vlay1zaW1wbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHNlZWsgb3BlcmF0aW9uIHN1Y2NlZWRlZC4gRmx1c2hpbmcgc2Vla3Mgd2lsbCB0cmlnZ2VyIGEKLXByZXJvbGwsIHdoaWNoIHdpbGwgZW1pdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUFTWU5DLURPTkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0FTWU5DX0RPTkU8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtc2VlayI+PC9hPjxoMz5nc3RfZWxlbWVudF9zZWVrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9zZWVrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHJhdGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTZWVrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNlZWtGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RhcnRfdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RvcF90eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZW5kcyBhIHNlZWsgZXZlbnQgdG8gYW4gZWxlbWVudC4gU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2Vla8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X25ld19zZWVrKCk8L2NvZGU+PC9hPiBmb3IgdGhlIGRldGFpbHMgb2YKLXRoZSBwYXJhbWV0ZXJzLiBUaGUgc2VlayBldmVudCBpcyBzZW50IHRvIHRoZSBlbGVtZW50IHVzaW5nCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlbmQtZXZlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9zZW5kX2V2ZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZW5kX2V2ZW50KCk8L2NvZGU+PC9hPi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXNlZWsucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gc2VuZCB0aGUgZXZlbnQgdG8uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbmV3IHBsYXliYWNrIHJhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGZvcm1hdCBvZiB0aGUgc2VlayB2YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgb3B0aW9uYWwgc2VlayBmbGFncy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnRfdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSB0eXBlIGFuZCBmbGFncyBmb3IgdGhlIG5ldyBzdGFydCBwb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSB2YWx1ZSBvZiB0aGUgbmV3IHN0YXJ0IHBvc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0b3BfdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSB0eXBlIGFuZCBmbGFncyBmb3IgdGhlIG5ldyBzdG9wIHBvc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0b3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgdmFsdWUgb2YgdGhlIG5ldyBzdG9wIHBvc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1zZWVrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4gRmx1c2hpbmcgc2Vla3Mgd2lsbCB0cmlnZ2VyIGEKLXByZXJvbGwsIHdoaWNoIHdpbGwgZW1pdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUFTWU5DLURPTkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0FTWU5DX0RPTkU8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtYWRkLXByb3BlcnR5LW5vdGlmeS13YXRjaCI+PC9hPjxoMz5nc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3Vsb25nPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2FkZF9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2ggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbmNsdWRlX3ZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWFkZC1wcm9wZXJ0eS1ub3RpZnktd2F0Y2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gd2F0Y2ggZm9yIHByb3BlcnR5IGNoYW5nZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvcGVydHlfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBuYW1lIG9mIHByb3BlcnR5IHRvIHdhdGNoIGZvciBjaGFuZ2VzLCBvcgotTlVMTCB0byB3YXRjaCBhbGwgcHJvcGVydGllcy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5jbHVkZV92YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPndoZXRoZXIgdG8gaW5jbHVkZSB0aGUgbmV3IHByb3BlcnR5IHZhbHVlIGluIHRoZSBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1hZGQtcHJvcGVydHktbm90aWZ5LXdhdGNoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSB3YXRjaCBpZCwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbW92ZS1wcm9wZXJ0eS1ub3RpZnktd2F0Y2giIHRpdGxlPSJnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoKCk8L2NvZGU+PC9hPiB0byByZW1vdmUgdGhlIHdhdGNoIGFnYWluLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWFkZC1wcm9wZXJ0eS1kZWVwLW5vdGlmeS13YXRjaCI+PC9hPjxoMz5nc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2jCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWxvbmc8L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW5jbHVkZV92YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1hZGQtcHJvcGVydHktZGVlcC1ub3RpZnktd2F0Y2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gd2F0Y2ggKHJlY3Vyc2l2ZWx5KSBmb3IgcHJvcGVydHkgY2hhbmdlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9wZXJ0eV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IG5hbWUgb2YgcHJvcGVydHkgdG8gd2F0Y2ggZm9yIGNoYW5nZXMsIG9yCi1OVUxMIHRvIHdhdGNoIGFsbCBwcm9wZXJ0aWVzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmNsdWRlX3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+d2hldGhlciB0byBpbmNsdWRlIHRoZSBuZXcgcHJvcGVydHkgdmFsdWUgaW4gdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWFkZC1wcm9wZXJ0eS1kZWVwLW5vdGlmeS13YXRjaC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgd2F0Y2ggaWQsIHdoaWNoIGNhbiBiZSB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZW1vdmUtcHJvcGVydHktbm90aWZ5LXdhdGNoIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVtb3ZlX3Byb3BlcnR5X25vdGlmeV93YXRjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcmVtb3ZlX3Byb3BlcnR5X25vdGlmeV93YXRjaCgpPC9jb2RlPjwvYT4gdG8gcmVtb3ZlIHRoZSB3YXRjaCBhZ2Fpbi48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1yZW1vdmUtcHJvcGVydHktbm90aWZ5LXdhdGNoIj48L2E+PGgzPmdzdF9lbGVtZW50X3JlbW92ZV9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2jCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gd2F0Y2hfaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVtb3ZlLXByb3BlcnR5LW5vdGlmeS13YXRjaC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBiZWluZyB3YXRjaGVkIGZvciBwcm9wZXJ0eSBjaGFuZ2VzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndhdGNoX2lkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+d2F0Y2ggaWQgdG8gcmVtb3ZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RWxlbWVudENhbGxBc3luY0Z1bmMiPjwvYT48aDM+R3N0RWxlbWVudENhbGxBc3luY0Z1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0RWxlbWVudENhbGxBc3luY0Z1bmM8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtY2FsbC1hc3luYyI+PC9hPjxoMz5nc3RfZWxlbWVudF9jYWxsX2FzeW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2VsZW1lbnRfY2FsbF9hc3luYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENhbGxBc3luY0Z1bmMiIHRpdGxlPSJHc3RFbGVtZW50Q2FsbEFzeW5jRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50Q2FsbEFzeW5jRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IGRlc3Ryb3lfbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNhbGxzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gZnJvbSBhbm90aGVyIHRocmVhZCBhbmQgcGFzc2VzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KLSB0byBpdC4gVGhpcyBpcyB0byBiZQotdXNlZCBmb3IgY2FzZXMgd2hlbiBhIHN0YXRlIGNoYW5nZSBoYXMgdG8gYmUgcGVyZm9ybWVkIGZyb20gYSBzdHJlYW1pbmcKLXRocmVhZCwgZGlyZWN0bHkgdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+IG9yIGluZGlyZWN0bHkgZS5nLiB2aWEgU0VFSwotZXZlbnRzLjwvcD4KLTxwPkNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5IGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgd2lsbCBjYXVzZQotZGVhZGxvY2tzIGluIG1hbnkgc2l0dWF0aW9ucywgYXMgdGhleSBtaWdodCBpbnZvbHZlIHdhaXRpbmcgZm9yIHRoZQotc3RyZWFtaW5nIHRocmVhZCB0byBzaHV0IGRvd24gZnJvbSB0aGlzIHZlcnkgc3RyZWFtaW5nIHRocmVhZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWNhbGwtYXN5bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkZ1bmN0aW9uIHRvIGNhbGwgYXN5bmNocm9ub3VzbHkgZnJvbSBhbm90aGVyIHRocmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5EYXRhIHRvIHBhc3MgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0cm95X25vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkdEZXN0cm95Tm90aWZ5IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RFbGVtZW50PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RWxlbWVudCB7Ci0gIEdSZWNNdXRleCAgICAgICAgICAgICBzdGF0ZV9sb2NrOwotCi0gIC8qIGVsZW1lbnQgc3RhdGUgKi8KLSAgR0NvbmQgICAgICAgICAgICAgICAgIHN0YXRlX2NvbmQ7Ci0gIGd1aW50MzIgICAgICAgICAgICAgICBzdGF0ZV9jb29raWU7Ci0gIEdzdFN0YXRlICAgICAgICAgICAgICB0YXJnZXRfc3RhdGU7Ci0gIEdzdFN0YXRlICAgICAgICAgICAgICBjdXJyZW50X3N0YXRlOwotICBHc3RTdGF0ZSAgICAgICAgICAgICAgbmV4dF9zdGF0ZTsKLSAgR3N0U3RhdGUgICAgICAgICAgICAgIHBlbmRpbmdfc3RhdGU7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuICBsYXN0X3JldHVybjsKLQotICBHc3RCdXMgICAgICAgICAgICAgICAqYnVzOwotCi0gIC8qIGFsbG9jYXRlZCBjbG9jayAqLwotICBHc3RDbG9jayAgICAgICAgICAgICAqY2xvY2s7Ci0gIEdzdENsb2NrVGltZURpZmYgICAgICBiYXNlX3RpbWU7IC8qIE5VTEwvUkVBRFk6IDAgLSBQQVVTRUQ6IGN1cnJlbnQgdGltZSAtIFBMQVlJTkc6IGRpZmZlcmVuY2UgdG8gY2xvY2sgKi8KLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgIHN0YXJ0X3RpbWU7Ci0KLSAgLyogZWxlbWVudCBwYWRzLCB0aGVzZSBsaXN0cyBjYW4gb25seSBiZSBpdGVyYXRlZCB3aGlsZSBob2xkaW5nCi0gICAqIHRoZSBMT0NLIG9yIGNoZWNraW5nIHRoZSBjb29raWUgYWZ0ZXIgZWFjaCBMT0NLLiAqLwotICBndWludDE2ICAgICAgICAgICAgICAgbnVtcGFkczsKLSAgR0xpc3QgICAgICAgICAgICAgICAgKnBhZHM7Ci0gIGd1aW50MTYgICAgICAgICAgICAgICBudW1zcmNwYWRzOwotICBHTGlzdCAgICAgICAgICAgICAgICAqc3JjcGFkczsKLSAgZ3VpbnQxNiAgICAgICAgICAgICAgIG51bXNpbmtwYWRzOwotICBHTGlzdCAgICAgICAgICAgICAgICAqc2lua3BhZHM7Ci0gIGd1aW50MzIgICAgICAgICAgICAgICBwYWRzX2Nvb2tpZTsKLQotICAvKiB3aXRoIG9iamVjdCBMT0NLICovCi0gIEdMaXN0ICAgICAgICAgICAgICAgICpjb250ZXh0czsKLX07Ci08L3ByZT4KLTxwPkdTdHJlYW1lciBlbGVtZW50IGFic3RyYWN0IGJhc2UgY2xhc3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RWxlbWVudC5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhyZWFkcy5odG1sI0dSZWNNdXRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdSZWNNdXRleDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5zdGF0ZS1sb2NrIj48L2E+c3RhdGVfbG9jazwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VXNlZCB0byBzZXJpYWxpemUgZXhlY3V0aW9uIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhyZWFkcy5odG1sI0dDb25kIj48c3BhbiBjbGFzcz0idHlwZSI+R0NvbmQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3Quc3RhdGUtY29uZCI+PC9hPnN0YXRlX2NvbmQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlVzZWQgdG8gc2lnbmFsIGNvbXBsZXRpb24gb2YgYSBzdGF0ZSBjaGFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnN0YXRlLWNvb2tpZSI+PC9hPnN0YXRlX2Nvb2tpZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VXNlZCB0byBkZXRlY3QgY29uY3VycmVudCBleGVjdXRpb24gb2YKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QudGFyZ2V0LXN0YXRlIj48L2E+dGFyZ2V0X3N0YXRlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGFyZ2V0IHN0YXRlIG9mIGFuIGVsZW1lbnQgYXMgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QuY3VycmVudC1zdGF0ZSI+PC9hPmN1cnJlbnRfc3RhdGU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0Lm5leHQtc3RhdGUiPjwvYT5uZXh0X3N0YXRlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV4dCBzdGF0ZSBvZiBhbiBlbGVtZW50LCBjYW4gYmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVk9JRC1QRU5ESU5HOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfVk9JRF9QRU5ESU5HPC9zcGFuPjwvYT4gaWYKLXRoZSBlbGVtZW50IGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QucGVuZGluZy1zdGF0ZSI+PC9hPnBlbmRpbmdfc3RhdGU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmaW5hbCBzdGF0ZSB0aGUgZWxlbWVudCBzaG91bGQgZ28gdG8sIGNhbiBiZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVk9JRC1QRU5ESU5HOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU1RBVEVfVk9JRF9QRU5ESU5HPC9zcGFuPjwvYT4gaWYgdGhlIGVsZW1lbnQgaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlQ2hhbmdlUmV0dXJuPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0Lmxhc3QtcmV0dXJuIj48L2E+bGFzdF9yZXR1cm48L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBsYXN0IHJldHVybiB2YWx1ZSBvZiBhbiBlbGVtZW50IHN0YXRlIGNoYW5nZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QuYnVzIj48L2E+YnVzPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYnVzIG9mIHRoZSBlbGVtZW50LiBUaGlzIGJ1cyBpcyBwcm92aWRlZCB0byB0aGUgZWxlbWVudCBieSB0aGUKLXBhcmVudCBlbGVtZW50IG9yIHRoZSBhcHBsaWNhdGlvbi4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiBoYXMgYSBidXMgb2YgaXRzIG93bi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LmNsb2NrIj48L2E+Y2xvY2s8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjbG9jayBvZiB0aGUgZWxlbWVudC4gVGhpcyBjbG9jayBpcyB1c3VhbGx5IHByb3ZpZGVkIHRvIHRoZQotZWxlbWVudCBieSB0aGUgdG9wbGV2ZWwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIgdGl0bGU9IkdzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LmJhc2UtdGltZSI+PC9hPmJhc2VfdGltZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWUgb2YgdGhlIGNsb2NrIHJpZ2h0IGJlZm9yZSB0aGUgZWxlbWVudCBpcyBzZXQgdG8KLVBMQVlJTkcuIFN1YnRyYWN0aW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iYXNlX3RpbWU8L2NvZGU+PC9lbT4KLWZyb20gdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBpbiB0aGUgUExBWUlORwotc3RhdGUgd2lsbCB5aWVsZCB0aGUgcnVubmluZ190aW1lIGFnYWluc3QgdGhlIGNsb2NrLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5zdGFydC10aW1lIj48L2E+c3RhcnRfdGltZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJ1bm5pbmdfdGltZSBvZiB0aGUgbGFzdCBQQVVTRUQgc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0Lm51bXBhZHMiPjwvYT5udW1wYWRzPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgcGFkcyBvZiB0aGUgZWxlbWVudCwgaW5jbHVkZXMgYm90aCBzb3VyY2UgYW5kIHNpbmsgcGFkcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QucGFkcyI+PC9hPnBhZHM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPiBsaXN0IG9mIHBhZHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QYWRdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QubnVtc3JjcGFkcyI+PC9hPm51bXNyY3BhZHM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBzb3VyY2UgcGFkcyBvZiB0aGUgZWxlbWVudC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3Quc3JjcGFkcyI+PC9hPnNyY3BhZHM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPiBsaXN0IG9mIHNvdXJjZSBwYWRzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuUGFkXTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0Lm51bXNpbmtwYWRzIj48L2E+bnVtc2lua3BhZHM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBzaW5rIHBhZHMgb2YgdGhlIGVsZW1lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnNpbmtwYWRzIj48L2E+c2lua3BhZHM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPiBsaXN0IG9mIHNpbmsgcGFkcy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlBhZF08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5wYWRzLWNvb2tpZSI+PC9hPnBhZHNfY29va2llPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD51cGRhdGVkIHdoZW5ldmVyIHRoZSBhIHBhZCBpcyBhZGRlZCBvciByZW1vdmVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LmNvbnRleHRzIj48L2E+Y29udGV4dHM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdEVsZW1lbnRDbGFzczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEVsZW1lbnRDbGFzcyB7Ci0gIEdzdE9iamVjdENsYXNzICAgICAgICAgcGFyZW50X2NsYXNzOwotCi0gIC8qIHRoZSBlbGVtZW50IG1ldGFkYXRhICovCi0gIGdwb2ludGVyCQkgbWV0YWRhdGE7Ci0KLSAgLyogZmFjdG9yeSB0aGF0IHRoZSBlbGVtZW50IHdhcyBjcmVhdGVkIGZyb20gKi8KLSAgR3N0RWxlbWVudEZhY3RvcnkgICAgICplbGVtZW50ZmFjdG9yeTsKLQotICAvKiB0ZW1wbGF0ZXMgZm9yIG91ciBwYWRzICovCi0gIEdMaXN0ICAgICAgICAgICAgICAgICAqcGFkdGVtcGxhdGVzOwotICBnaW50ICAgICAgICAgICAgICAgICAgIG51bXBhZHRlbXBsYXRlczsKLSAgZ3VpbnQzMiAgICAgICAgICAgICAgICBwYWRfdGVtcGxfY29va2llOwotCi0gIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLwotCi0gIC8qIHJlcXVlc3QvcmVsZWFzZSBwYWRzICovCi0gIC8qIEZJWE1FIDIuMCBoYXJtb25pemUgbmFtaW5nIHdpdGggZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKi8KLSAgR3N0UGFkKiAgICAgICAgICAgICAgICgqcmVxdWVzdF9uZXdfcGFkKSAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IEdzdENhcHMgKmNhcHMpOwotCi0gIHZvaWQgICAgICAgICAgICAgICAgICAoKnJlbGVhc2VfcGFkKSAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkICpwYWQpOwotCi0gIC8qIHN0YXRlIGNoYW5nZXMgKi8KLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gKCpnZXRfc3RhdGUpICAgICAgICAgICAgIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGUgKiBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0ZSAqIHBlbmRpbmcsIEdzdENsb2NrVGltZSB0aW1lb3V0KTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gKCpzZXRfc3RhdGUpICAgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RTdGF0ZSBzdGF0ZSk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuICgqY2hhbmdlX3N0YXRlKSAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0gIHZvaWQgICAgICAgICAgICAgICAgICgqc3RhdGVfY2hhbmdlZCkgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0U3RhdGUgb2xkc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGUgbmV3c3RhdGUsIEdzdFN0YXRlIHBlbmRpbmcpOwotCi0gIC8qIGJ1cyAqLwotICB2b2lkICAgICAgICAgICAgICAgICAgKCpzZXRfYnVzKSAgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RCdXMgKiBidXMpOwotCi0gIC8qIHNldC9nZXQgY2xvY2tzICovCi0gIEdzdENsb2NrKiAgICAgICAgICAgICAoKnByb3ZpZGVfY2xvY2spICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7Ci0gIGdib29sZWFuICAgICAgICAgICAgICAoKnNldF9jbG9jaykgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0Q2xvY2sgKmNsb2NrKTsKLQotICAvKiBxdWVyeSBmdW5jdGlvbnMgKi8KLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICgqc2VuZF9ldmVudCkgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RFdmVudCAqZXZlbnQpOwotCi0gIGdib29sZWFuICAgICAgICAgICAgICAoKnF1ZXJ5KSAgICAgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UXVlcnkgKnF1ZXJ5KTsKLQotICBnYm9vbGVhbiAgICAgICAgICAgICAgKCpwb3N0X21lc3NhZ2UpICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdE1lc3NhZ2UgKm1lc3NhZ2UpOwotCi0gIHZvaWQgICAgICAgICAgICAgICAgICAoKnNldF9jb250ZXh0KSAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0Q29udGV4dCAqY29udGV4dCk7Ci19OwotPC9wcmU+Ci08cD5HU3RyZWFtZXIgZWxlbWVudCBjbGFzcy4gT3ZlcnJpZGUgdGhlIHZtZXRob2RzIHRvIGltcGxlbWVudCB0aGUgZWxlbWVudAotZnVuY3Rpb25hbGl0eS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MubWV0YWRhdGEiPjwvYT5tZXRhZGF0YTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+bWV0YWRhdGEgZm9yIGVsZW1lbnRzIG9mIHRoaXMgY2xhc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5lbGVtZW50ZmFjdG9yeSI+PC9hPmVsZW1lbnRmYWN0b3J5PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gdGhhdCBjcmVhdGVzIHRoZXNlIGVsZW1lbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5wYWR0ZW1wbGF0ZXMiPjwvYT5wYWR0ZW1wbGF0ZXM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLm51bXBhZHRlbXBsYXRlcyI+PC9hPm51bXBhZHRlbXBsYXRlczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciBvZiBwYWR0ZW1wbGF0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5wYWQtdGVtcGwtY29va2llIj48L2E+cGFkX3RlbXBsX2Nvb2tpZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+Y2hhbmdlZCB3aGVuZXZlciB0aGUgcGFkdGVtcGxhdGVzIGNoYW5nZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5yZXF1ZXN0LW5ldy1wYWQiPjwvYT5yZXF1ZXN0X25ld19wYWQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmNhbGxlZCB3aGVuIGEgbmV3IHBhZCBpcyByZXF1ZXN0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MucmVsZWFzZS1wYWQiPjwvYT5yZWxlYXNlX3BhZDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+Y2FsbGVkIHdoZW4gYSByZXF1ZXN0IHBhZCBpcyB0byBiZSByZWxlYXNlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5nZXQtc3RhdGUiPjwvYT5nZXRfc3RhdGU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmdldCB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3Muc2V0LXN0YXRlIj48L2E+c2V0X3N0YXRlPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5zZXQgYSBuZXcgc3RhdGUgb24gdGhlIGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MuY2hhbmdlLXN0YXRlIj48L2E+Y2hhbmdlX3N0YXRlPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5jYWxsZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldF9zdGF0ZTwvY29kZT48L2VtPgotdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnRhbCBzdGF0ZSBjaGFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3Muc3RhdGUtY2hhbmdlZCI+PC9hPnN0YXRlX2NoYW5nZWQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIG5ldyBzdGF0ZSB3YXMgc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5zZXQtYnVzIj48L2E+c2V0X2J1czwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+c2V0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gb24gdGhlIGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFbGVtZW50Q2xhc3MucHJvdmlkZS1jbG9jayI+PC9hPnByb3ZpZGVfY2xvY2s8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmdldHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHByb3ZpZGVkIGJ5IHRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLnNldC1jbG9jayI+PC9hPnNldF9jbG9jazwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+c2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiBvbiB0aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5zZW5kLWV2ZW50Ij48L2E+c2VuZF9ldmVudDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+c2VuZCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIHRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLnF1ZXJ5Ij48L2E+cXVlcnk8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnBlcmZvcm0gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvbiB0aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5wb3N0LW1lc3NhZ2UiPjwvYT5wb3N0X21lc3NhZ2U8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmNhbGxlZCB3aGVuIGEgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGVsZW1lbnQuIENoYWluIHVwIHRvCi10aGUgcGFyZW50IGNsYXNzJyBoYW5kbGVyIHRvIGhhdmUgaXQgcG9zdGVkIG9uIHRoZSBidXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RWxlbWVudENsYXNzLnNldC1jb250ZXh0Ij48L2E+c2V0X2NvbnRleHQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnNldCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+IG9uIHRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RFbGVtZW50RmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RFbGVtZW50RmxhZ3M8L2gzPgotPHA+VGhlIHN0YW5kYXJkIGZsYWdzIHRoYXQgYW4gZWxlbWVudCBtYXkgaGF2ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RFbGVtZW50RmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRUxFTUVOVC1GTEFHLUxPQ0tFRC1TVEFURTpDQVBTIj48L2E+R1NUX0VMRU1FTlRfRkxBR19MT0NLRURfU1RBVEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+aWdub3JlIHN0YXRlIGNoYW5nZXMgZnJvbSBwYXJlbnQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVMRU1FTlQtRkxBRy1TSU5LOkNBUFMiPjwvYT5HU1RfRUxFTUVOVF9GTEFHX1NJTks8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGVsZW1lbnQgaXMgYSBzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FTEVNRU5ULUZMQUctU09VUkNFOkNBUFMiPjwvYT5HU1RfRUxFTUVOVF9GTEFHX1NPVVJDRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgZWxlbWVudCBpcyBhIHNvdXJjZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVMRU1FTlQtRkxBRy1QUk9WSURFLUNMT0NLOkNBUFMiPjwvYT5HU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGVsZW1lbnQgY2FuIHByb3ZpZGUgYSBjbG9jazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRUxFTUVOVC1GTEFHLVJFUVVJUkUtQ0xPQ0s6Q0FQUyI+PC9hPkdTVF9FTEVNRU5UX0ZMQUdfUkVRVUlSRV9DTE9DSzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgZWxlbWVudCByZXF1aXJlcyBhIGNsb2NrPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FTEVNRU5ULUZMQUctSU5ERVhBQkxFOkNBUFMiPjwvYT5HU1RfRUxFTUVOVF9GTEFHX0lOREVYQUJMRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgZWxlbWVudCBjYW4gdXNlIGFuIGluZGV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FTEVNRU5ULUZMQUctTEFTVDpDQVBTIj48L2E+R1NUX0VMRU1FTlRfRkxBR19MQVNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPm9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFnczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3RhdGUiPjwvYT48aDM+ZW51bSBHc3RTdGF0ZTwvaDM+Ci08cD5UaGUgcG9zc2libGUgc3RhdGVzIGFuIGVsZW1lbnQgY2FuIGJlIGluLiBTdGF0ZXMgY2FuIGJlIGNoYW5nZWQgdXNpbmcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+IGFuZCBjaGVja2VkIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfc3RhdGUoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFN0YXRlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUQVRFLVZPSUQtUEVORElORzpDQVBTIj48L2E+R1NUX1NUQVRFX1ZPSURfUEVORElORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5ubyBwZW5kaW5nIHN0YXRlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RBVEUtTlVMTDpDQVBTIj48L2E+R1NUX1NUQVRFX05VTEw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIE5VTEwgc3RhdGUgb3IgaW5pdGlhbCBzdGF0ZSBvZiBhbiBlbGVtZW50LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RBVEUtUkVBRFk6Q0FQUyI+PC9hPkdTVF9TVEFURV9SRUFEWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgZWxlbWVudCBpcyByZWFkeSB0byBnbyB0byBQQVVTRUQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1QQVVTRUQ6Q0FQUyI+PC9hPkdTVF9TVEFURV9QQVVTRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGVsZW1lbnQgaXMgUEFVU0VELCBpdCBpcyByZWFkeSB0byBhY2NlcHQgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBkYXRhLiBTaW5rIGVsZW1lbnRzIGhvd2V2ZXIgb25seSBhY2NlcHQgb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGFuZCB0aGVuIGJsb2NrLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RBVEUtUExBWUlORzpDQVBTIj48L2E+R1NUX1NUQVRFX1BMQVlJTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGVsZW1lbnQgaXMgUExBWUlORywgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGlzIHJ1bm5pbmcgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGEgaXMgZmxvd2luZy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0YXRlQ2hhbmdlIj48L2E+PGgzPmVudW0gR3N0U3RhdGVDaGFuZ2U8L2gzPgotPHA+VGhlc2UgYXJlIHRoZSBkaWZmZXJlbnQgc3RhdGUgY2hhbmdlcyBhbiBlbGVtZW50IGdvZXMgdGhyb3VnaC4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLU5VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9OVUxMPC9jb2RlPjwvYT4g4oeSIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBMQVlJTkc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QTEFZSU5HPC9jb2RlPjwvYT4gaXMgY2FsbGVkIGFuIHVwd2FyZHMgc3RhdGUgY2hhbmdlCi1hbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUExBWUlORzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BMQVlJTkc8L2NvZGU+PC9hPiDih5IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX05VTEw8L2NvZGU+PC9hPiBhIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RhdGVDaGFuZ2UubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLU5VTEwtVE8tUkVBRFk6Q0FQUyI+PC9hPkdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zdGF0ZSBjaGFuZ2UgZnJvbSBOVUxMIHRvIFJFQURZLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBUaGUgZWxlbWVudCBtdXN0IGNoZWNrIGlmIHRoZSByZXNvdXJjZXMgaXQgbmVlZHMgYXJlIGF2YWlsYWJsZS4gRGV2aWNlCi0gICAgc2lua3MgYW5kIC1zb3VyY2VzIHR5cGljYWxseSB0cnkgdG8gcHJvYmUgdGhlIGRldmljZSB0byBjb25zdHJhaW4gdGhlaXIKLSAgICBjYXBzLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIFRoZSBlbGVtZW50IG9wZW5zIHRoZSBkZXZpY2UgKGluIGNhc2UgZmVhdHVyZSBuZWVkIHRvIGJlIHByb2JlZCkuCi0gIDwvcD48L2xpPgotPC91bD48L2Rpdj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLVJFQURZLVRPLVBBVVNFRDpDQVBTIj48L2E+R1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+c3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gUEFVU0VELjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBUaGUgZWxlbWVudCBwYWRzIGFyZSBhY3RpdmF0ZWQgaW4gb3JkZXIgdG8gcmVjZWl2ZSBkYXRhIGluIFBBVVNFRC4KLSAgICBTdHJlYW1pbmcgdGhyZWFkcyBhcmUgc3RhcnRlZC4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBTb21lIGVsZW1lbnRzIG1pZ2h0IG5lZWQgdG8gcmV0dXJuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1BU1lOQzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9BU1lOQzwvY29kZT48L2E+IGFuZCBjb21wbGV0ZQotICAgIHRoZSBzdGF0ZSBjaGFuZ2Ugd2hlbiB0aGV5IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uLiBJdCBpcyBhIHJlcXVpcmVtZW50Ci0gICAgZm9yIHNpbmtzIHRvIHJldHVybiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtQVNZTkM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfQVNZTkM8L2NvZGU+PC9hPiBhbmQgY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZQotICAgIHdoZW4gdGhleSByZWNlaXZlIHRoZSBmaXJzdCBidWZmZXIgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUVPUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX0VPUzwvY29kZT48L2E+IChwcmVyb2xsKS4KLSAgICBTaW5rcyBhbHNvIGJsb2NrIHRoZSBkYXRhZmxvdyB3aGVuIGluIFBBVVNFRC4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBBIHBpcGVsaW5lIHJlc2V0cyB0aGUgcnVubmluZ190aW1lIHRvIDAuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgTGl2ZSBzb3VyY2VzIHJldHVybiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtTk8tUFJFUk9MTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMPC9jb2RlPjwvYT4gYW5kIGRvbid0IGdlbmVyYXRlIGRhdGEuCi0gIDwvcD48L2xpPgotPC91bD48L2Rpdj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLVBBVVNFRC1UTy1QTEFZSU5HOkNBUFMiPjwvYT5HU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnN0YXRlIGNoYW5nZSBmcm9tIFBBVVNFRCB0byBQTEFZSU5HLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBNb3N0IGVsZW1lbnRzIGlnbm9yZSB0aGlzIHN0YXRlIGNoYW5nZS4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBUaGUgcGlwZWxpbmUgc2VsZWN0cyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGFuZCBkaXN0cmlidXRlcyB0aGlzIHRvIGFsbCB0aGUgY2hpbGRyZW4KLSAgICBiZWZvcmUgc2V0dGluZyB0aGVtIHRvIFBMQVlJTkcuIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBvbmx5IGFsbG93ZWQgdG8KLSAgICBzeW5jaHJvbml6ZSBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gaW4gdGhlIFBMQVlJTkcgc3RhdGUuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgVGhlIHBpcGVsaW5lIHVzZXMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGFuZCB0aGUgcnVubmluZ190aW1lIHRvIGNhbGN1bGF0ZSB0aGUKLSAgICBiYXNlX3RpbWUuIFRoZSBiYXNlX3RpbWUgaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIGNoaWxkcmVuIHdoZW4gcGVyZm9ybWluZwotICAgIHRoZSBzdGF0ZSBjaGFuZ2UuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgU2luayBlbGVtZW50cyBzdG9wIGJsb2NraW5nIG9uIHRoZSBwcmVyb2xsIGJ1ZmZlciBvciBldmVudCBhbmQgc3RhcnQKLSAgICByZW5kZXJpbmcgdGhlIGRhdGEuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgU2lua3MgY2FuIHBvc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1FT1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0VPUzwvY29kZT48L2E+IGluIHRoZSBQTEFZSU5HIHN0YXRlLiBJdCBpcyBub3QgYWxsb3dlZAotICAgIHRvIHBvc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1FT1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0VPUzwvY29kZT48L2E+IHdoZW4gbm90IGluIHRoZSBQTEFZSU5HIHN0YXRlLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIFdoaWxlIHN0cmVhbWluZyBpbiBQQVVTRUQgb3IgUExBWUlORyBlbGVtZW50cyBjYW4gY3JlYXRlIGFuZCByZW1vdmUKLSAgICBzb21ldGltZXMgcGFkcy4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBMaXZlIHNvdXJjZXMgc3RhcnQgZ2VuZXJhdGluZyBkYXRhIGFuZCByZXR1cm4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVNVQ0NFU1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzwvY29kZT48L2E+LgotICA8L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUQVRFLUNIQU5HRS1QTEFZSU5HLVRPLVBBVVNFRDpDQVBTIj48L2E+R1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zdGF0ZSBjaGFuZ2UgZnJvbSBQTEFZSU5HIHRvIFBBVVNFRC48L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgTW9zdCBlbGVtZW50cyBpZ25vcmUgdGhpcyBzdGF0ZSBjaGFuZ2UuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgVGhlIHBpcGVsaW5lIGNhbGN1bGF0ZXMgdGhlIHJ1bm5pbmdfdGltZSBiYXNlZCBvbiB0aGUgbGFzdCBzZWxlY3RlZAotICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGFuZCB0aGUgYmFzZV90aW1lLiBJdCBzdG9yZXMgdGhpcyBpbmZvcm1hdGlvbiB0byBjb250aW51ZQotICAgIHBsYXliYWNrIHdoZW4gZ29pbmcgYmFjayB0byB0aGUgUExBWUlORyBzdGF0ZS4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBTaW5rcyB1bmJsb2NrIGFueSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiB3YWl0IGNhbGxzLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIFdoZW4gYSBzaW5rIGRvZXMgbm90IGhhdmUgYSBwZW5kaW5nIGJ1ZmZlciB0byBwbGF5LCBpdCByZXR1cm5zCi0gICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLUFTWU5DOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX0FTWU5DPC9jb2RlPjwvYT4gZnJvbSB0aGlzIHN0YXRlIGNoYW5nZSBhbmQgY29tcGxldGVzIHRoZSBzdGF0ZQotICAgIGNoYW5nZSB3aGVuIGl0IHJlY2VpdmVzIGEgbmV3IGJ1ZmZlciBvciBhbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtRU9TOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRVZFTlRfRU9TPC9jb2RlPjwvYT4uCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgQW55IHF1ZXVlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVPUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfRU9TPC9jb2RlPjwvYT4gaXRlbXMgYXJlIHJlbW92ZWQgc2luY2UgdGhleSB3aWxsIGJlIHJlcG9zdGVkCi0gICAgd2hlbiBnb2luZyBiYWNrIHRvIHRoZSBQTEFZSU5HIHN0YXRlLiBUaGUgRU9TIG1lc3NhZ2VzIGFyZSBxdWV1ZWQgaW4KLSAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiBjb250YWluZXJzLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIExpdmUgc291cmNlcyBzdG9wIGdlbmVyYXRpbmcgZGF0YSBhbmQgcmV0dXJuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1OTy1QUkVST0xMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw8L2NvZGU+PC9hPi4KLSAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1DSEFOR0UtUEFVU0VELVRPLVJFQURZOkNBUFMiPjwvYT5HU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zdGF0ZSBjaGFuZ2UgZnJvbSBQQVVTRUQgdG8gUkVBRFkuPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIFNpbmtzIHVuYmxvY2sgYW55IHdhaXRzIGluIHRoZSBwcmVyb2xsLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIEVsZW1lbnRzIHVuYmxvY2sgYW55IHdhaXRzIG9uIGRldmljZXMKLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBDaGFpbiBvciBnZXRfcmFuZ2UgZnVuY3Rpb25zIHJldHVybiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctRkxVU0hJTkc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX0ZMVVNISU5HPC9jb2RlPjwvYT4uCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgVGhlIGVsZW1lbnQgcGFkcyBhcmUgZGVhY3RpdmF0ZWQgc28gdGhhdCBzdHJlYW1pbmcgYmVjb21lcyBpbXBvc3NpYmxlIGFuZAotICAgIGFsbCBzdHJlYW1pbmcgdGhyZWFkcyBhcmUgc3RvcHBlZC4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBUaGUgc2luayBmb3JnZXRzIGFsbCBuZWdvdGlhdGVkIGZvcm1hdHMKLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBFbGVtZW50cyByZW1vdmUgYWxsIHNvbWV0aW1lcyBwYWRzCi0gIDwvcD48L2xpPgotPC91bD48L2Rpdj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RBVEUtQ0hBTkdFLVJFQURZLVRPLU5VTEw6Q0FQUyI+PC9hPkdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zdGF0ZSBjaGFuZ2UgZnJvbSBSRUFEWSB0byBOVUxMLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBFbGVtZW50cyBjbG9zZSBkZXZpY2VzCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgRWxlbWVudHMgcmVzZXQgYW55IGludGVybmFsIHN0YXRlLgotICA8L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0YXRlQ2hhbmdlUmV0dXJuIj48L2E+PGgzPmVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm48L2gzPgotPHA+VGhlIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMgZnJvbSBhIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBzdWNoIGFzIAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfc3RhdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9zdGF0ZSgpPC9jb2RlPjwvYT4uIE9ubHkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTwvY29kZT48L2VtPgotIGlzIGEgcmVhbCBmYWlsdXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFN0YXRlQ2hhbmdlUmV0dXJuLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUQVRFLUNIQU5HRS1GQUlMVVJFOkNBUFMiPjwvYT5HU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHN0YXRlIGNoYW5nZSBmYWlsZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUQVRFLUNIQU5HRS1TVUNDRVNTOkNBUFMiPjwvYT5HU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHN0YXRlIGNoYW5nZSBzdWNjZWVkZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUQVRFLUNIQU5HRS1BU1lOQzpDQVBTIj48L2E+R1NUX1NUQVRFX0NIQU5HRV9BU1lOQzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgc3RhdGUgY2hhbmdlIHdpbGwgaGFwcGVuIGFzeW5jaHJvbm91c2x5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVEFURS1DSEFOR0UtTk8tUFJFUk9MTDpDQVBTIj48L2E+R1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBzdGF0ZSBjaGFuZ2Ugc3VjY2VlZGVkIGJ1dCB0aGUgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fubm90IHByb2R1Y2UgZGF0YSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QQVVTRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QQVVTRUQ8L2NvZGU+PC9hPi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2l0aCBsaXZlIHNvdXJjZXMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1NRVRBREFUQS1BVVRIT1I6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SICAgICAgICAiYXV0aG9yIgotPC9wcmU+Ci08cD5OYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGF1dGhvcihzKS4gVXNlIFxuIHRvIHNlcGFyYXRlCi1tdWx0aXBsZSBhdXRob3IgZGV0YWlscy4KLUUuZzogIkpvZSBCbG9nZ3MgJmx0O2pvZS5ibG9ncyBhdCBmb28uY29tJmd0OyI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULU1FVEFEQVRBLURFU0NSSVBUSU9OOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT048L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT04gICAiZGVzY3JpcHRpb24iCi08L3ByZT4KLTxwPlNlbnRlbmNlIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGVsZW1lbnQuCi1FLmc6ICJXcml0ZSBzdHJlYW0gdG8gYSBmaWxlIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtTUVUQURBVEEtRE9DLVVSSTpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX01FVEFEQVRBX0RPQ19VUkk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfRE9DX1VSSSAgICAgICAiZG9jLXVyaSIKLTwvcHJlPgotPHA+U2V0IHVyaSBwb2ludGluZyB0byB1c2VyIGRvY3VtZW50YXRpb24uIEFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoaXMgdG8gc2hvdwotaGVscCBmb3IgZS5nLiBlZmZlY3RzIHRvIHVzZXJzLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtTUVUQURBVEEtSUNPTi1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0lDT05fTkFNRSAgICAgImljb24tbmFtZSIKLTwvcHJlPgotPHA+RWxlbWVudHMgdGhhdCBicmlkZ2UgdG8gY2VydGFpbiBvdGhlciBwcm9kdWN0cyBjYW4gaW5jbHVkZSBhbiBpY29uIG9mIHRoYXQKLXVzZWQgcHJvZHVjdC4gQXBwbGljYXRpb24gY2FuIHNob3cgdGhlIGljb24gaW4gbWVudXMvc2VsZWN0b3JzIHRvIGhlbHAKLWlkZW50aWZ5aW5nIHNwZWNpZmljIGVsZW1lbnRzLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtTUVUQURBVEEtS0xBU1M6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyAgICAgICAgICJrbGFzcyIKLTwvcHJlPgotPHA+U3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZWxlbWVudCwgYXMgYW4gdW5vcmRlcmVkIGxpc3QKLXNlcGFyYXRlZCB3aXRoIHNsYXNoZXMgKCcvJykuIFNlZSBkcmFmdC1rbGFzcy50eHQgb2YgdGhlIGRlc2lnbiBkb2NzCi1mb3IgbW9yZSBkZXRhaWxzIGFuZCBjb21tb24gdHlwZXMuIEUuZzogIlNpbmsvRmlsZSI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULU1FVEFEQVRBLUxPTkdOQU1FOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUgICAgICAibG9uZy1uYW1lIgotPC9wcmU+Ci08cD5UaGUgbG9uZyBFbmdsaXNoIG5hbWUgb2YgdGhlIGVsZW1lbnQuIEUuZy4gIkZpbGUgU2luayI8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RWxlbWVudC5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RFbGVtZW50LW5vLW1vcmUtcGFkcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5vLW1vcmUtcGFkc+KAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZ3N0ZWxlbWVudCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlRoaXMgc2lnbmFscyB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbm90IGdlbmVyYXRlIG1vcmUgZHluYW1pYyBwYWRzLgotTm90ZSB0aGF0IHRoaXMgc2lnbmFsIHdpbGwgdXN1YWxseSBiZSBlbWl0dGVkIGZyb20gdGhlIGNvbnRleHQgb2YKLXRoZSBzdHJlYW1pbmcgdGhyZWFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnQtbm8tbW9yZS1wYWRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdzdGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnQtcGFkLWFkZGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGFkLWFkZGVk4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpnc3RlbGVtZW50LAotICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gICAgICpuZXdfcGFkLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+YSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGVsZW1lbnQuIE5vdGUgdGhhdCB0aGlzIHNpZ25hbCB3aWxsCi11c3VhbGx5IGJlIGVtaXR0ZWQgZnJvbSB0aGUgY29udGV4dCBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZC4gQWxzbyBrZWVwIGluCi1taW5kIHRoYXQgaWYgeW91IGFkZCBuZXcgZWxlbWVudHMgdG8gdGhlIHBpcGVsaW5lIGluIHRoZSBzaWduYWwgaGFuZGxlcgoteW91IHdpbGwgbmVlZCB0byBzZXQgdGhlbSB0byB0aGUgZGVzaXJlZCB0YXJnZXQgc3RhdGUgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZXRfc3RhdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9zdGF0ZSgpPC9jb2RlPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zeW5jLXN0YXRlLXdpdGgtcGFyZW50IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RWxlbWVudC1wYWQtYWRkZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Z3N0ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uZXdfcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB0aGF0IGhhcyBiZWVuIGFkZGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RFbGVtZW50LXBhZC1yZW1vdmVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGFkLXJlbW92ZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmdzdGVsZW1lbnQsCi0gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgICAgKm9sZF9wYWQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudDwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnQtcGFkLXJlbW92ZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Z3N0ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vbGRfcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB0aGF0IGhhcyBiZWVuIHJlbW92ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RWxlbWVudC5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0RWxlbWVudEZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYxMTlhOS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjI3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RFbGVtZW50RmFjdG9yeTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0RWxlbWVudEZhY3RvcnkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEVsZW1lbnRGYWN0b3J5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0RWxlbWVudEZhY3RvcnkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeS50b3Bfb2ZfcGFnZSI+PC9hPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvaDI+Ci08cD5Hc3RFbGVtZW50RmFjdG9yeSDigJQgQ3JlYXRlIEdzdEVsZW1lbnRzIGZyb20gYSBmYWN0b3J5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnRGYWN0b3J5LmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1yZWdpc3RlciIgdGl0bGU9ImdzdF9lbGVtZW50X3JlZ2lzdGVywqAoKSI+Z3N0X2VsZW1lbnRfcmVnaXN0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1maW5kIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdUeXBlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtZWxlbWVudC10eXBlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW1ldGFkYXRhLWtleXMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1udW0tcGFkLXRlbXBsYXRlcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X251bV9wYWRfdGVtcGxhdGVzwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklUeXBlIiB0aXRsZT0iZW51bSBHc3RVUklUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFVSSVR5cGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC11cmktdHlwZSIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqIGNvbnN0ICoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtdXJpLXByb3RvY29scyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHPCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktaGFzLWludGVyZmFjZSIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZcKgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNyZWF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYWxsLWNhcHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbGxfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYWxsLWNhcHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYWxsX2NhcHPCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYWxsX2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbnktY2FwcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHPCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbnktY2FwcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2Fwc8KgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1zdGF0aWMtcGFkLXRlbXBsYXRlcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtZmlsdGVyIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlcsKgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtZ2V0LWVsZW1lbnRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50c8KgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWlzLXR5cGUiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfaXNfdHlwZcKgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RWxlbWVudEZhY3Rvcnkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3Rvcnktc3RydWN0IiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJ0eXBlZGVmX2tleXdvcmQiPnR5cGVkZWY8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSI+R3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtQU5ZOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJT1ZJREVPLVNJTktTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPVklERU9fU0lOS1M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUFVRElPLUVOQ09ERVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT19FTkNPREVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVDT0RBQkxFOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RBQkxFIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RBQkxFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFQ1JZUFRPUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ1JZUFRPUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ1JZUFRPUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVNVVhFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERVBBWUxPQURFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUVOQ09ERVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNPREVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtRU5DUllQVE9SOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DUllQVE9SIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DUllQVE9SPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1GT1JNQVRURVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1BWC1FTEVNRU5UUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01BWF9FTEVNRU5UUyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01BWF9FTEVNRU5UUzwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQVVESU86Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1JTUFHRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0U8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1FRElBLU1FVEFEQVRBOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEEiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9NRVRBREFUQTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtU1VCVElUTEU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRSI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1NVQlRJVExFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1WSURFTzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU88L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1FRElBLUFOWTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FOWSI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FOWTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTVVYRVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NVVhFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVJTRVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVBBWUxPQURFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1BBWUxPQURFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1BBWUxPQURFUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtU0lOSzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTksiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TUkM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkMiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkM8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVZJREVPLUVOQ09ERVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9WSURFT19FTkNPREVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUjwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RFbGVtZW50RmFjdG9yeQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnRGYWN0b3J5LmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnRGYWN0b3J5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+IGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiBlbGVtZW50cy4gQQotR3N0RWxlbWVudEZhY3RvcnkgY2FuIGJlIGFkZGVkIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gYXMgaXQgaXMgYWxzbyBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPi48L3A+Ci08cD5Vc2UgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZmluZCIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jcmVhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUoKTwvY29kZT48L2E+Ci1mdW5jdGlvbnMgdG8gY3JlYXRlIGVsZW1lbnQgaW5zdGFuY2VzIG9yIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X21ha2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgpPC9jb2RlPjwvYT4gYXMgYQotY29udmVuaWVudCBzaG9ydGN1dC48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGNvZGUgZXhhbXBsZSBzaG93cyB5b3UgaG93IHRvIGNyZWF0ZSBhIEdzdEZpbGVTcmMgZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLTxhIG5hbWU9ImlkLTEuMy4yMi43LjUiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDQuwqBVc2luZyBhbiBlbGVtZW50IGZhY3Rvcnk8L2I+PC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7PC9zcGFuPgotCi1Hc3RFbGVtZW50IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnNyYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotR3N0RWxlbWVudEZhY3RvcnkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+c3JjZmFjdG9yeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCI+Z3N0X2luaXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCZhbXA7PC9zcGFuPmFyZ2M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5hcmd2PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi1zcmNmYWN0b3J5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1maW5kIj5nc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtmaWxlc3JjJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXJldHVybi1pZi1mYWlsIj5nX3JldHVybl9pZl9mYWlsPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+c3JjZmFjdG9yeSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+IT08L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci1zcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNyZWF0ZSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zcmNmYWN0b3J5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3NyYyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVdhcm5pbmdzLWFuZC1Bc3NlcnRpb25zLmh0bWwjZy1yZXR1cm4taWYtZmFpbCI+Z19yZXR1cm5faWZfZmFpbDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+IT08L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X2VsZW1lbnRfcmVnaXN0ZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X3JlZ2lzdGVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHJhbms8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgZWxlbWVudGZhY3RvcnkgY2FwYWJsZSBvZiBpbnN0YW50aWF0aW5nIG9iamVjdHMgb2YgdGhlCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotIGFuZCBhZGQgdGhlIGZhY3RvcnkgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LXJlZ2lzdGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiB0byByZWdpc3RlciB0aGUgZWxlbWVudCB3aXRoLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZm9yCi1hIHN0YXRpYyBlbGVtZW50LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiBlbGVtZW50cyBvZiB0aGlzIHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmFuazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnJhbmsgb2YgZWxlbWVudCAoaGlnaGVyIHJhbmsgbWVhbnMgbW9yZSBpbXBvcnRhbmNlIHdoZW4gYXV0b3BsdWdnaW5nKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+R1R5cGUgb2YgZWxlbWVudCB0byByZWdpc3RlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtcmVnaXN0ZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIHRoZSByZWdpc3RlcmluZyBzdWNjZWVkZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG9uIGVycm9yPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZmluZCI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT7CoCoKLWdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNlYXJjaCBmb3IgYW4gZWxlbWVudCBmYWN0b3J5IG9mIHRoZSBnaXZlbiBuYW1lLiBSZWZzIHRoZSByZXR1cm5lZAotZWxlbWVudCBmYWN0b3J5OyBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWZpbmQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIGZhY3RvcnkgdG8gZmluZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZmluZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+IGlmIGZvdW5kLAotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IG90aGVyd2lzZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1lbGVtZW50LXR5cGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdUeXBlPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBmb3IgZWxlbWVudHMgbWFuYWdlZCBieSB0aGlzIGZhY3RvcnkuIFRoZSB0eXBlIGNhbgotb25seSBiZSByZXRyaWV2ZWQgaWYgdGhlIGVsZW1lbnQgZmFjdG9yeSBpcyBsb2FkZWQsIHdoaWNoIGNhbiBiZQotYXNzdXJlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxvYWQiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LWVsZW1lbnQtdHlwZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZhY3RvcnkgdG8gZ2V0IG1hbmFnZWQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtZWxlbWVudC10eXBlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gZm9yIGVsZW1lbnRzIG1hbmFnZWQgYnkgdGhpcyBmYWN0b3J5IG9yIDAgaWYKLXRoZSBmYWN0b3J5IGlzIG5vdCBsb2FkZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW1ldGFkYXRhIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqa2V5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbWV0YWRhdGEgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT4KLSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rZXk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1tZXRhZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mYWN0b3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5rZXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGtleTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbWV0YWRhdGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWV0YWRhdGEgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+Ci1vbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci13aGVuIHRoZXJlIHdhcyBubyBtZXRhZGF0YSB3aXRoIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbWV0YWRhdGEta2V5cyI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgYXZhaWxhYmxlIGtleXMgZm9yIHRoZSBtZXRhZGF0YSBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW1ldGFkYXRhLWtleXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbWV0YWRhdGEta2V5cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBhcnJheSBvZiBrZXkgc3RyaW5ncywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhlcmUgaXMgbm8KLW1ldGFkYXRhLiBGcmVlIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RyaW5nLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjZy1zdHJmcmVldiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3N0cmZyZWV2KCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gdXRmOF1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbnVtLXBhZC10ZW1wbGF0ZXMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X251bV9wYWRfdGVtcGxhdGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBudW1iZXIgb2YgcGFkX3RlbXBsYXRlcyBpbiB0aGlzIGZhY3RvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbnVtLXBhZC10ZW1wbGF0ZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbnVtLXBhZC10ZW1wbGF0ZXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbnVtYmVyIG9mIHBhZF90ZW1wbGF0ZXM8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtdXJpLXR5cGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklUeXBlIiB0aXRsZT0iZW51bSBHc3RVUklUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFVSSVR5cGU8L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSB0eXBlIG9mIFVSSXMgdGhlIGVsZW1lbnQgc3VwcG9ydHMgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1VTktOT1dOOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVVJJX1VOS05PV048L3NwYW4+PC9hPiBpZiBub25lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS10eXBlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mYWN0b3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS10eXBlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdHlwZSBvZiBVUklzIHRoaXMgZWxlbWVudCBzdXBwb3J0czwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWdldC11cmktcHJvdG9jb2xzIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCogY29uc3QgKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3Byb3RvY29scyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBhcnJheSBvZiBwcm90b2NvbHMgdGhpcyBlbGVtZW50IHN1cHBvcnRzIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZgotbm8gcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQuIFlvdSBtYXkgbm90IGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIHJldHVybmVkCi1hcnJheSwgYXMgaXQgaXMgc3RpbGwgb3duZWQgYnkgdGhlIGVsZW1lbnQgZmFjdG9yeS4gVXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0cmluZy1VdGlsaXR5LUZ1bmN0aW9ucy5odG1sI2ctc3RyZHVwdiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3N0cmR1cHYoKTwvY29kZT48L2E+IHRvCi1tYWtlIGEgY29weSBvZiB0aGUgcHJvdG9jb2wgc3RyaW5nIGFycmF5IGlmIHlvdSBuZWVkIHRvLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS1wcm90b2NvbHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtdXJpLXByb3RvY29scy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBzdXBwb3J0ZWQgcHJvdG9jb2xzCi1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktaGFzLWludGVyZmFjZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmludGVyZmFjZW5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT4KLSBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2Ugd2l0aCBuYW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcmZhY2VuYW1lPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1oYXMtaW50ZXJmYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmludGVyZmFjZW5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbiBpbnRlcmZhY2UgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1oYXMtaW50ZXJmYWNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT4KLWltcGxlbWVudCB0aGUgaW50ZXJmYWNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWNyZWF0ZSI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGVsZW1lbnQgb2YgdGhlIHR5cGUgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZWxlbWVudGZhY3RvcnkuCi1JdCB3aWxsIGJlIGdpdmVuIHRoZSBuYW1lIHN1cHBsaWVkLCBzaW5jZSBhbGwgZWxlbWVudHMgcmVxdWlyZSBhIG5hbWUgYXMKLXRoZWlyIGZpcnN0IGFyZ3VtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktY3JlYXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mYWN0b3J5IHRvIGluc3RhbnRpYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbmFtZSBvZiBuZXcgZWxlbWVudCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlCi1hIHVuaXF1ZSBuYW1lLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1jcmVhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci1pZiB0aGUgZWxlbWVudCBjb3VsZG4ndCBiZSBjcmVhdGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJBbGlhcyBmb3IgdHJhbnNmZXIgbm9uZSwgdXNlZCBmb3Igb2JqZWN0cyB3aXRoIGZsb2F0aW5nIHJlZnMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZmxvYXRpbmc8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZhY3RvcnluYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGVsZW1lbnQgb2YgdGhlIHR5cGUgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZWxlbWVudCBmYWN0b3J5LgotSWYgbmFtZSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHRoZW4gdGhlIGVsZW1lbnQgd2lsbCByZWNlaXZlIGEgZ3VhcmFudGVlZCB1bmlxdWUgbmFtZSwKLWNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgZmFjdG9yeSBuYW1lIGFuZCBhIG51bWJlci4KLUlmIG5hbWUgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgZ2l2ZW4gdGhlIG5hbWUgc3VwcGxpZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3RvcnluYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBuYW1lZCBmYWN0b3J5IHRvIGluc3RhbnRpYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbmFtZSBvZiBuZXcgZWxlbWVudCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlCi1hIHVuaXF1ZSBuYW1lLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgotaWYgdW5hYmxlIHRvIGNyZWF0ZSBlbGVtZW50LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJBbGlhcyBmb3IgdHJhbnNmZXIgbm9uZSwgdXNlZCBmb3Igb2JqZWN0cyB3aXRoIGZsb2F0aW5nIHJlZnMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZmxvYXRpbmc8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbGwtY2FwcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBmYWN0b3J5IGNhbiBzaW5rIGFsbCBwb3NzaWJsZSBjYXBhYmlsaXRpZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbGwtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mYWN0b3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZmFjdG9yeSB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNhcHMgdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYWxsLWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNhcHMgYXJlIGZ1bGx5IGNvbXBhdGlibGUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbGwtY2FwcyI+PC9hPjxoMz5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYWxsX2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBmYWN0b3J5IGNhbiBzcmMgYWxsIHBvc3NpYmxlIGNhcGFiaWxpdGllcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYWxsLWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZhY3RvcnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjYXBzIHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYWxsLWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNhcHMgYXJlIGZ1bGx5IGNvbXBhdGlibGUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYW55LWNhcHMiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbnlfY2Fwc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbnlfY2FwcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgZmFjdG9yeSBjYW4gc2luayBhbnkgcG9zc2libGUgY2FwYWJpbGl0eS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zaW5rLWFueS1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mYWN0b3J5IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY2FwcyB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbnktY2Fwcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY2FwcyBoYXZlIGEgY29tbW9uIHN1YnNldC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc3JjLWFueS1jYXBzIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2Fwc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIGZhY3RvcnkgY2FuIHNyYyBhbnkgcG9zc2libGUgY2FwYWJpbGl0eS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYW55LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZhY3RvcnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjYXBzIHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYW55LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNhcHMgaGF2ZSBhIGNvbW1vbiBzdWJzZXQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXN0YXRpYy1wYWQtdGVtcGxhdGVzIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiAqZmFjdG9yeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiBmb3IgdGhpcyBmYWN0b3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXN0YXRpYy1wYWQtdGVtcGxhdGVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mYWN0b3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXN0YXRpYy1wYWQtdGVtcGxhdGVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlCi1zdGF0aWMgcGFkIHRlbXBsYXRlcy4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuU3RhdGljUGFkVGVtcGxhdGVdPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtZmlsdGVyIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gZGlyZWN0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHN1YnNldG9ubHk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RmlsdGVyIG91dCBhbGwgdGhlIGVsZW1lbnRmYWN0b3JpZXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLSB0aGF0IGNhbiBoYW5kbGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSBpbgotdGhlIGdpdmVuIGRpcmVjdGlvbi48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3Vic2V0b25seTwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdGhlbiBvbmx5IHRoZSBlbGVtZW50cyB3aG9zZSBwYWRzIHRlbXBsYXRlcwotYXJlIGEgY29tcGxldGUgc3VwZXJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIHJldHVybmVkLiBFbHNlIGFueSBlbGVtZW50Ci13aG9zZSBwYWQgdGVtcGxhdGVzIGNhcHMgY2FuIGludGVyc2VjdCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSByZXR1cm5lZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtZmlsdGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiB0byBmaWx0ZXIuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LkVsZW1lbnRGYWN0b3J5XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRpcmVjdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gdG8gZmlsdGVyIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN1YnNldG9ubHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIHRvIGZpbHRlciBvbiBjYXBzIHN1YnNldHMgb3Igbm90LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWZpbHRlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcmVxdWlzaXRlcy4KLVVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWU8L3NwYW4+PC9hPiBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuRWxlbWVudEZhY3RvcnldPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtZ2V0LWVsZW1lbnRzIj48L2E+PGgzPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RSYW5rIiB0aXRsZT0iZW51bSBHc3RSYW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmFuazwvc3Bhbj48L2E+IG1pbnJhbms8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgbGlzdCBvZiBmYWN0b3JpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLS4gT25seSBlbGVtZW50cwotd2l0aCBhIHJhbmsgZ3JlYXRlciBvciBlcXVhbCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWlucmFuazwvY29kZT48L2VtPgotIHdpbGwgYmUgcmV0dXJuZWQuCi1UaGUgbGlzdCBvZiBmYWN0b3JpZXMgaXMgcmV0dXJuZWQgYnkgZGVjcmVhc2luZyByYW5rLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1nZXQtZWxlbWVudHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWlucmFuazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk1pbmltdW0gcmFuazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWdldC1lbGVtZW50cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gZWxlbWVudHMuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKCk8L2NvZGU+PC9hPiBhZnRlcgotdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LkVsZW1lbnRGYWN0b3J5XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWlzLXR5cGUiPjwvYT48aDM+Z3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9lbT4KLSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWlzLXR5cGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1pcy10eXBlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mYWN0b3J5PC9jb2RlPjwvZW0+Ci1pcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEVsZW1lbnRGYWN0b3J5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeS1zdHJ1Y3QiPjwvYT48aDM+R3N0RWxlbWVudEZhY3Rvcnk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50RmFjdG9yeSBHc3RFbGVtZW50RmFjdG9yeTs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlIj48L2E+PGgzPkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgZ3VpbnQ2NCBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlOwotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BTlk6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZICgoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA0OSkgLSAxKQotPC9wcmU+Ci08cD5FbGVtZW50cyBvZiBhbnkgb2YgdGhlIGRlZmluZWQgR1NUX0VMRU1FTlRfRkFDVE9SWV9MSVNUIHR5cGVzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtQVVESU9WSURFTy1TSU5LUzpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT1ZJREVPX1NJTktTPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT1ZJREVPX1NJTktTIChHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSyB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTyB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTyB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRSkKLTwvcHJlPgotPHA+QWxsIHNpbmtzIGhhbmRsaW5nIGF1ZGlvLCB2aWRlbyBvciBpbWFnZSBtZWRpYSB0eXBlczwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUFVRElPLUVOQ09ERVI6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUiAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8pCi08L3ByZT4KLTxwPkFsbCBlbmNvZGVycyBoYW5kbGluZyBhdWRpbyBtZWRpYSB0eXBlczwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFQ09EQUJMRTpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09EQUJMRTwvcHJlPgotPHA+QWxsIGVsZW1lbnRzIHVzZWQgdG8gJ2RlY29kZScgc3RyZWFtcyAoZGVjb2RlcnMsIGRlbXV4ZXJzLCBwYXJzZXJzLCBkZXBheWxvYWRlcnMpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVDT0RFUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgJmx0OyZsdDsgMCkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVDUllQVE9SOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ1JZUFRPUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ1JZUFRPUiAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDEwKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERU1VWEVSOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSICAgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1KQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERVBBWUxPQURFUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERVBBWUxPQURFUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDgpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUVOQ09ERVI6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDEpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUVOQ1JZUFRPUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNSWVBUT1I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNSWVBUT1IgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyAxMSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtRk9STUFUVEVSOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0ZPUk1BVFRFUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0ZPUk1BVFRFUiAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDkpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1BWC1FTEVNRU5UUzpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA0OCkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQVVESU86Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU88L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTyAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1MCkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtSU1BR0U6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRSAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1MSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtTUVUQURBVEE6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEE8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9NRVRBREFUQSAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1MykKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtU1VCVElUTEU6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfU1VCVElUTEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRSAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA1MikKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtVklERU86Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU88L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTyAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA0OSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQU5ZOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FOWTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQU5ZICh+R19HVUlOVDY0X0NPTlNUQU5UICgwKSAmbHQ7Jmx0OyA0OCkKLTwvcHJlPgotPHA+RWxlbWVudHMgbWF0Y2hpbmcgYW55IG9mIHRoZSBkZWZpbmVkIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQSB0eXBlczwvcD4KLTxwPk5vdGU6IERvIG5vdCB1c2UgdGhpcyBpZiB5b3Ugd2lzaCB0byBub3QgZmlsdGVyIGFnYWluc3QgYW55IG9mIHRoZSBkZWZpbmVkCi1tZWRpYSB0eXBlcy4gSWYgeW91IHdpc2ggdG8gZG8gdGhpcywgc2ltcGx5IGRvbid0IHNwZWNpZnkgYW55Ci1HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUEgZmxhZy48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NVVhFUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSICAgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDQpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVBBUlNFUjpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIgICAgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSAmbHQ7Jmx0OyA2KQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVlMT0FERVI6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFZTE9BREVSPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFZTE9BREVSICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgJmx0OyZsdDsgNykKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtU0lOSzpDQVBTIj48L2E+PGgzPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSyAgICAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgJmx0OyZsdDsgMikKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtU1JDOkNBUFMiPjwvYT48aDM+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NSQzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NSQyAgICAgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpICZsdDsmbHQ7IDMpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVZJREVPLUVOQ09ERVI6Q0FQUyI+PC9hPjxoMz5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUiAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8gfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0UpCi08L3ByZT4KLTxwPkFsbCBlbmNvZGVycyBoYW5kbGluZyB2aWRlbyBvciBpbWFnZSBtZWRpYSB0eXBlczwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RFbGVtZW50RmFjdG9yeS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0RXZlbnQuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0RXZlbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEzNDY0OS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdEV2ZW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MjIzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RFdmVudDogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RFdmVudC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0RXZlbnQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RFdmVudCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdEV2ZW50LnRvcF9vZl9wYWdlIj48L2E+R3N0RXZlbnQ8L3NwYW4+PC9oMj4KLTxwPkdzdEV2ZW50IOKAlCBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBldmVudHMgdGhhdCBhcmUgcGFzc2VkIHVwIGFuZCBkb3duCi0gICAgICAgICAgICAgICAgICAgIGEgcGlwZWxpbmU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RXZlbnQuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtTUFLRS1UWVBFOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfTUFLRV9UWVBFKCkiPkdTVF9FVkVOVF9NQUtFX1RZUEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX1RZUEUoKSI+R1NUX0VWRU5UX1RZUEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfVFlQRV9OQU1FKCkiPkdTVF9FVkVOVF9UWVBFX05BTUU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVElNRVNUQU1QOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfVElNRVNUQU1QKCkiPkdTVF9FVkVOVF9USU1FU1RBTVA8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU0VRTlVNOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfU0VRTlVNKCkiPkdTVF9FVkVOVF9TRVFOVU08L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtVVBTVFJFQU06Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9JU19VUFNUUkVBTSgpIj5HU1RfRVZFTlRfSVNfVVBTVFJFQU08L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtRE9XTlNUUkVBTTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0oKSI+R1NUX0VWRU5UX0lTX0RPV05TVFJFQU08L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtU0VSSUFMSVpFRDpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1NFUklBTElaRUQoKSI+R1NUX0VWRU5UX0lTX1NFUklBTElaRUQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtU1RJQ0tZOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfSVNfU1RJQ0tZKCkiPkdTVF9FVkVOVF9JU19TVElDS1k8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZUZsYWdzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50VHlwZUZsYWdzPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtZ2V0LWZsYWdzIiB0aXRsZT0iZ3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzwqAoKSI+Z3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9uYW1lwqAoKSI+Z3N0X2V2ZW50X3R5cGVfZ2V0X25hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsiIHRpdGxlPSJnc3RfZXZlbnRfdHlwZV90b19xdWFya8KgKCkiPmdzdF9ldmVudF90eXBlX3RvX3F1YXJrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1yZWYiIHRpdGxlPSJnc3RfZXZlbnRfcmVmwqAoKSI+Z3N0X2V2ZW50X3JlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXVucmVmIiB0aXRsZT0iZ3N0X2V2ZW50X3VucmVmwqAoKSI+Z3N0X2V2ZW50X3VucmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1yZXBsYWNlIiB0aXRsZT0iZ3N0X2V2ZW50X3JlcGxhY2XCoCgpIj5nc3RfZXZlbnRfcmVwbGFjZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtY29weSIgdGl0bGU9ImdzdF9ldmVudF9jb3B5wqAoKSI+Z3N0X2V2ZW50X2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXN0ZWFsIiB0aXRsZT0iZ3N0X2V2ZW50X3N0ZWFswqAoKSI+Z3N0X2V2ZW50X3N0ZWFsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC10YWtlIiB0aXRsZT0iZ3N0X2V2ZW50X3Rha2XCoCgpIj5nc3RfZXZlbnRfdGFrZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2V2ZW50X2lzX3dyaXRhYmxlKCkiPmdzdF9ldmVudF9pc193cml0YWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2V2ZW50X21ha2Vfd3JpdGFibGUoKSI+Z3N0X2V2ZW50X21ha2Vfd3JpdGFibGU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC13cml0YWJsZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlwqAoKSI+Z3N0X2V2ZW50X3dyaXRhYmxlX3N0cnVjdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWN1c3RvbSIgdGl0bGU9ImdzdF9ldmVudF9uZXdfY3VzdG9twqAoKSI+Z3N0X2V2ZW50X25ld19jdXN0b208L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmXCoCgpIj5nc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtaGFzLW5hbWUiIHRpdGxlPSJnc3RfZXZlbnRfaGFzX25hbWXCoCgpIj5nc3RfZXZlbnRfaGFzX25hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X2V2ZW50X2dldF9zZXFudW3CoCgpIj5nc3RfZXZlbnRfZ2V0X3NlcW51bTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1zZXFudW0iIHRpdGxlPSJnc3RfZXZlbnRfc2V0X3NlcW51bcKgKCkiPmdzdF9ldmVudF9zZXRfc2VxbnVtPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWdldC1ydW5uaW5nLXRpbWUtb2Zmc2V0IiB0aXRsZT0iZ3N0X2V2ZW50X2dldF9ydW5uaW5nX3RpbWVfb2Zmc2V0wqAoKSI+Z3N0X2V2ZW50X2dldF9ydW5uaW5nX3RpbWVfb2Zmc2V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtc2V0LXJ1bm5pbmctdGltZS1vZmZzZXQiIHRpdGxlPSJnc3RfZXZlbnRfc2V0X3J1bm5pbmdfdGltZV9vZmZzZXTCoCgpIj5nc3RfZXZlbnRfc2V0X3J1bm5pbmdfdGltZV9vZmZzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1mbHVzaC1zdGFydCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnTCoCgpIj5nc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZmx1c2gtc3RvcCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcMKgKCkiPmdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWZsdXNoLXN0b3AiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfZmx1c2hfc3RvcMKgKCkiPmdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZW9zIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19lb3PCoCgpIj5nc3RfZXZlbnRfbmV3X2VvczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWdhcCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfZ2FwwqAoKSI+Z3N0X2V2ZW50X25ld19nYXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1nYXAiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfZ2FwwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX2dhcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0cmVhbS1zdGFydCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0wqAoKSI+Z3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tc3RhcnQiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0wqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1zdHJlYW0tZmxhZ3MiIHRpdGxlPSJnc3RfZXZlbnRfc2V0X3N0cmVhbV9mbGFnc8KgKCkiPmdzdF9ldmVudF9zZXRfc3RyZWFtX2ZsYWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc3RyZWFtLWZsYWdzIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9mbGFnc8KgKCkiPmdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZmxhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1zZXQtZ3JvdXAtaWQiIHRpdGxlPSJnc3RfZXZlbnRfc2V0X2dyb3VwX2lkwqAoKSI+Z3N0X2V2ZW50X3NldF9ncm91cF9pZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtZ3JvdXAtaWQiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWTCoCgpIj5nc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1zZXQtc3RyZWFtIiB0aXRsZT0iZ3N0X2V2ZW50X3NldF9zdHJlYW3CoCgpIj5nc3RfZXZlbnRfc2V0X3N0cmVhbTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW3CoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VnbWVudCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VnbWVudMKgKCkiPmdzdF9ldmVudF9uZXdfc2VnbWVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXNlZ21lbnQiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudMKgKCkiPmdzdF9ldmVudF9wYXJzZV9zZWdtZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtY29weS1zZWdtZW50IiB0aXRsZT0iZ3N0X2V2ZW50X2NvcHlfc2VnbWVudMKgKCkiPmdzdF9ldmVudF9jb3B5X3NlZ21lbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy10YWciIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3RhZ8KgKCkiPmdzdF9ldmVudF9uZXdfdGFnPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtdGFnIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3RhZ8KgKCkiPmdzdF9ldmVudF9wYXJzZV90YWc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1idWZmZXItc2l6ZSIgdGl0bGU9ImdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemXCoCgpIj5nc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtYnVmZmVyLXNpemUiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemXCoCgpIj5nc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1xb3MiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3Fvc8KgKCkiPmdzdF9ldmVudF9uZXdfcW9zPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtcW9zIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3Fvc8KgKCkiPmdzdF9ldmVudF9wYXJzZV9xb3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zZWVrIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zZWVrwqAoKSI+Z3N0X2V2ZW50X25ld19zZWVrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc2VlayIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zZWVrwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3NlZWs8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1uYXZpZ2F0aW9uIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uwqAoKSI+Z3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctbGF0ZW5jeSIgdGl0bGU9ImdzdF9ldmVudF9uZXdfbGF0ZW5jecKgKCkiPmdzdF9ldmVudF9uZXdfbGF0ZW5jeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWxhdGVuY3kiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jecKgKCkiPmdzdF9ldmVudF9wYXJzZV9sYXRlbmN5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RlcCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc3RlcMKgKCkiPmdzdF9ldmVudF9uZXdfc3RlcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0ZXAiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RlcMKgKCkiPmdzdF9ldmVudF9wYXJzZV9zdGVwPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2luay1tZXNzYWdlIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2XCoCgpIj5nc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXNpbmstbWVzc2FnZSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2XCoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlwqAoKSI+Z3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWNhcHMiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X2NhcHPCoCgpIj5nc3RfZXZlbnRfbmV3X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1jYXBzIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX2NhcHPCoCgpIj5nc3RfZXZlbnRfcGFyc2VfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXRvYyIgdGl0bGU9ImdzdF9ldmVudF9uZXdfdG9jwqAoKSI+Z3N0X2V2ZW50X25ld190b2M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS10b2MiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfdG9jwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3RvYzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXRvYy1zZWxlY3QiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3RvY19zZWxlY3TCoCgpIj5nc3RfZXZlbnRfbmV3X3RvY19zZWxlY3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS10b2Mtc2VsZWN0IiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3TCoCgpIj5nc3RfZXZlbnRfcGFyc2VfdG9jX3NlbGVjdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlZ21lbnQtZG9uZSIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lwqAoKSI+Z3N0X2V2ZW50X25ld19zZWdtZW50X2RvbmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWdtZW50LWRvbmUiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudF9kb25lwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3NlZ21lbnRfZG9uZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXByb3RlY3Rpb24iIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb27CoCgpIj5nc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1wcm90ZWN0aW9uIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb27CoCgpIj5nc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlbGVjdC1zdHJlYW1zIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtc8KgKCkiPmdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWxlY3Qtc3RyZWFtcyIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zZWxlY3Rfc3RyZWFtc8KgKCkiPmdzdF9ldmVudF9wYXJzZV9zZWxlY3Rfc3RyZWFtczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0cmVhbS1jb2xsZWN0aW9uIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zdHJlYW1fY29sbGVjdGlvbsKgKCkiPmdzdF9ldmVudF9uZXdfc3RyZWFtX2NvbGxlY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tY29sbGVjdGlvbiIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbsKgKCkiPmdzdF9ldmVudF9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0cmVhbS1ncm91cC1kb25lIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zdHJlYW1fZ3JvdXBfZG9uZcKgKCkiPmdzdF9ldmVudF9uZXdfc3RyZWFtX2dyb3VwX2RvbmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tZ3JvdXAtZG9uZSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZcKgKCkiPmdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEV2ZW50Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RXZlbnQiPkdzdEV2ZW50PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZUZsYWdzIj5Hc3RFdmVudFR5cGVGbGFnczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1CT1RIOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfVFlQRV9CT1RIIj5HU1RfRVZFTlRfVFlQRV9CT1RIPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPkdzdEV2ZW50VHlwZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFN0cmVhbUZsYWdzIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1GbGFncyI+R3N0U3RyZWFtRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RRT1NUeXBlIiB0aXRsZT0iZW51bSBHc3RRT1NUeXBlIj5Hc3RRT1NUeXBlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0U2Vla1R5cGUiIHRpdGxlPSJlbnVtIEdzdFNlZWtUeXBlIj5Hc3RTZWVrVHlwZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFNlZWtGbGFncyIgdGl0bGU9ImVudW0gR3N0U2Vla0ZsYWdzIj5Hc3RTZWVrRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RXZlbnQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtQm94ZWQtVHlwZXMuaHRtbCI+R0JveGVkPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEV2ZW50Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RXZlbnQuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RXZlbnQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIGV2ZW50IGNsYXNzIHByb3ZpZGVzIGZhY3RvcnkgbWV0aG9kcyB0byBjb25zdHJ1Y3QgZXZlbnRzIGZvciBzZW5kaW5nCi1hbmQgZnVuY3Rpb25zIHRvIHF1ZXJ5IChwYXJzZSkgcmVjZWl2ZWQgZXZlbnRzLjwvcD4KLTxwPkV2ZW50cyBhcmUgdXN1YWxseSBjcmVhdGVkIHdpdGggZ3N0X2V2ZW50X25ld18qKCkgd2hpY2ggdGFrZXMgZXZlbnQtdHlwZQotc3BlY2lmaWMgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMuCi1UbyBzZW5kIGFuIGV2ZW50IGFwcGxpY2F0aW9uIHdpbGwgdXN1YWxseSB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZW5kLWV2ZW50IiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2VuZF9ldmVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2VuZF9ldmVudCgpPC9jb2RlPjwvYT4gYW5kCi1lbGVtZW50cyB3aWxsIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZW5kLWV2ZW50IiB0aXRsZT0iZ3N0X3BhZF9zZW5kX2V2ZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NlbmRfZXZlbnQoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3B1c2hfZXZlbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVzaF9ldmVudCgpPC9jb2RlPjwvYT4uCi1UaGUgZXZlbnQgc2hvdWxkIGJlIHVucmVmZmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXVucmVmIiB0aXRsZT0iZ3N0X2V2ZW50X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfdW5yZWYoKTwvY29kZT48L2E+IGlmIGl0IGhhcyBub3QgYmVlbiBzZW50LjwvcD4KLTxwPkV2ZW50cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBjYW4gYmUgcGFyc2VkIHdpdGggdGhlaXIgcmVzcGVjdGl2ZQotZ3N0X2V2ZW50X3BhcnNlXyooKSBmdW5jdGlvbnMuIEl0IGlzIHZhbGlkIHRvIHBhc3MgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciB1bndhbnRlZCBkZXRhaWxzLjwvcD4KLTxwPkV2ZW50cyBhcmUgcGFzc2VkIGJldHdlZW4gZWxlbWVudHMgaW4gcGFyYWxsZWwgdG8gdGhlIGRhdGEgc3RyZWFtLiBTb21lIGV2ZW50cwotYXJlIHNlcmlhbGl6ZWQgd2l0aCBidWZmZXJzLCBvdGhlcnMgYXJlIG5vdC4gU29tZSBldmVudHMgb25seSB0cmF2ZWwgZG93bnN0cmVhbSwKLW90aGVycyBvbmx5IHVwc3RyZWFtLiBTb21lIGV2ZW50cyBjYW4gdHJhdmVsIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0uPC9wPgotPHA+VGhlIGV2ZW50cyBhcmUgdXNlZCB0byBzaWduYWwgc3BlY2lhbCBjb25kaXRpb25zIGluIHRoZSBkYXRhc3RyZWFtIHN1Y2ggYXMKLUVPUyAoZW5kIG9mIHN0cmVhbSkgb3IgdGhlIHN0YXJ0IG9mIGEgbmV3IHN0cmVhbS1zZWdtZW50LgotRXZlbnRzIGFyZSBhbHNvIHVzZWQgdG8gZmx1c2ggdGhlIHBpcGVsaW5lIG9mIGFueSBwZW5kaW5nIGRhdGEuPC9wPgotPHA+TW9zdCBvZiB0aGUgZXZlbnQgQVBJIGlzIHVzZWQgaW5zaWRlIHBsdWdpbnMuIEFwcGxpY2F0aW9ucyB1c3VhbGx5IG9ubHkKLWNvbnN0cnVjdCBhbmQgdXNlIHNlZWsgZXZlbnRzLgotVG8gZG8gdGhhdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlZWsiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3NlZWvCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9uZXdfc2VlaygpPC9jb2RlPjwvYT4gaXMgdXNlZCB0byBjcmVhdGUgYSBzZWVrIGV2ZW50LiBJdCB0YWtlcwotdGhlIG5lZWRlZCBwYXJhbWV0ZXJzIHRvIHNwZWNpZnkgc2Vla2luZyB0aW1lIGFuZCBtb2RlLjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+R3N0RXZlbnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+ZXZlbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLWdib29sZWFuIHJlc3VsdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLyBjb25zdHJ1Y3QgYSBzZWVrIGV2ZW50IHRvIHBsYXkgdGhlIG1lZGlhIGZyb20gc2Vjb25kIDIgdG8gNSwgZmx1c2g8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8gdGhlIHBpcGVsaW5lIHRvIGRlY3JlYXNlIGxhdGVuY3kuPC9zcGFuPgotZXZlbnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlZWsiPmdzdF9ldmVudF9uZXdfc2VlazwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gCi0gICBHU1RfRk9STUFUX1RJTUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gCi0gICBHU1RfU0VFS19GTEFHX0ZMVVNIPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICBHU1RfU0VFS19UWVBFX1NFVDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4yPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gR1NUX1NFQ09ORDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgR1NUX1NFRUtfVFlQRV9TRVQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+NTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IEdTVF9TRUNPTkQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPgotcmVzdWx0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZW5kLWV2ZW50Ij5nc3RfZWxlbWVudF9zZW5kX2V2ZW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cGlwZWxpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZXZlbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+aWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oITwvc3Bhbj5yZXN1bHQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZXNzYWdlLUxvZ2dpbmcuaHRtbCNnLXdhcm5pbmciPmdfd2FybmluZzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3NlZWsgZmFpbGVkJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEV2ZW50LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRVZFTlQtTUFLRS1UWVBFOkNBUFMiPjwvYT48aDM+R1NUX0VWRU5UX01BS0VfVFlQRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9FVkVOVF9NQUtFX1RZUEUobnVtLGZsYWdzKTwvcHJlPgotPHA+d2hlbiBtYWtpbmcgY3VzdG9tIGV2ZW50IHR5cGVzLCB1c2UgdGhpcyBtYWNybyB3aXRoIHRoZSBudW0gYW5kCi10aGUgZ2l2ZW4gZmxhZ3M8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRVZFTlQtTUFLRS1UWVBFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBldmVudCBudW1iZXIgdG8gY3JlYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGV2ZW50IGZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FVkVOVC1UWVBFOkNBUFMiPjwvYT48aDM+R1NUX0VWRU5UX1RZUEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVZFTlRfVFlQRShldmVudCkgICAgICAgICAgIChHU1RfRVZFTlRfQ0FTVChldmVudCktJmd0O3R5cGUpCi08L3ByZT4KLTxwPkdldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiBvZiB0aGUgZXZlbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVWRU5ULVRZUEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGV2ZW50IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRVZFTlQtVFlQRS1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0VWRU5UX1RZUEVfTkFNRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FVkVOVF9UWVBFX05BTUUoZXZlbnQpICAgICAgKGdzdF9ldmVudF90eXBlX2dldF9uYW1lKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkpCi08L3ByZT4KLTxwPkdldCBhIGNvbnN0YW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiBvZiB0aGUgZXZlbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVWRU5ULVRZUEUtTkFNRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXZlbnQgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FVkVOVC1USU1FU1RBTVA6Q0FQUyI+PC9hPjxoMz5HU1RfRVZFTlRfVElNRVNUQU1QKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VWRU5UX1RJTUVTVEFNUChldmVudCkgICAgICAoR1NUX0VWRU5UX0NBU1QoZXZlbnQpLSZndDt0aW1lc3RhbXApCi08L3ByZT4KLTxwPkdldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wIG9mIHRoZSBldmVudC4gVGhpcyBpcyB0aGUgdGltZSB3aGVuIHRoZSBldmVudAotd2FzIGNyZWF0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVWRU5ULVRJTUVTVEFNUC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXZlbnQgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FVkVOVC1TRVFOVU06Q0FQUyI+PC9hPjxoMz5HU1RfRVZFTlRfU0VRTlVNKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VWRU5UX1NFUU5VTShldmVudCkgICAgICAgICAoR1NUX0VWRU5UX0NBU1QoZXZlbnQpLSZndDtzZXFudW0pCi08L3ByZT4KLTxwPlRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVWRU5ULVNFUU5VTS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXZlbnQgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FVkVOVC1JUy1VUFNUUkVBTTpDQVBTIj48L2E+PGgzPkdTVF9FVkVOVF9JU19VUFNUUkVBTSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FVkVOVF9JU19VUFNUUkVBTShldikgICAgICAgISEoR1NUX0VWRU5UX1RZUEUgKGV2KSAmYW1wOyBHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgYW4gZXZlbnQgY2FuIHRyYXZlbCB1cHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRVZFTlQtSVMtVVBTVFJFQU0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGV2ZW50IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRVZFTlQtSVMtRE9XTlNUUkVBTTpDQVBTIj48L2E+PGgzPkdTVF9FVkVOVF9JU19ET1dOU1RSRUFNKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0oZXYpICAgICAhIShHU1RfRVZFTlRfVFlQRSAoZXYpICZhbXA7IEdTVF9FVkVOVF9UWVBFX0RPV05TVFJFQU0pCi08L3ByZT4KLTxwPkNoZWNrIGlmIGFuIGV2ZW50IGNhbiB0cmF2ZWwgZG93bnN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRVZFTlQtSVMtRE9XTlNUUkVBTS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXZlbnQgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FVkVOVC1JUy1TRVJJQUxJWkVEOkNBUFMiPjwvYT48aDM+R1NUX0VWRU5UX0lTX1NFUklBTElaRUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRChldikgICAgICEhKEdTVF9FVkVOVF9UWVBFIChldikgJmFtcDsgR1NUX0VWRU5UX1RZUEVfU0VSSUFMSVpFRCkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgYW4gZXZlbnQgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBkYXRhIHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRVZFTlQtSVMtU0VSSUFMSVpFRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXZlbnQgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FVkVOVC1JUy1TVElDS1k6Q0FQUyI+PC9hPjxoMz5HU1RfRVZFTlRfSVNfU1RJQ0tZKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0VWRU5UX0lTX1NUSUNLWShldikgICAgICEhKEdTVF9FVkVOVF9UWVBFIChldikgJmFtcDsgR1NUX0VWRU5UX1RZUEVfU1RJQ0tZKQotPC9wcmU+Ci08cD5DaGVjayBpZiBhbiBldmVudCBpcyBzdGlja3kgb24gdGhlIHBhZHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVWRU5ULUlTLVNUSUNLWS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXZlbnQgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC10eXBlLWdldC1mbGFncyI+PC9hPjxoMz5nc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnRUeXBlRmxhZ3M8L3NwYW4+PC9hPgotZ3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZUZsYWdzPC9zcGFuPjwvYT4gYXNzb2NpYXRlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXR5cGUtZ2V0LWZsYWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXR5cGUtZ2V0LWZsYWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGVGbGFnczwvc3Bhbj48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSI+PC9hPjxoMz5nc3RfZXZlbnRfdHlwZV9nZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgcHJpbnRhYmxlIG5hbWUgZm9yIHRoZSBnaXZlbiBldmVudCB0eXBlLiBEbyBub3QgbW9kaWZ5IG9yIGZyZWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXR5cGUtZ2V0LW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZXZlbnQgdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC10eXBlLWdldC1uYW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSByZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBuYW1lIG9mIHRoZSBldmVudC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsiPjwvYT48aDM+Z3N0X2V2ZW50X3R5cGVfdG9fcXVhcmvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4KLWdzdF9ldmVudF90eXBlX3RvX3F1YXJrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gZXZlbnQgdHlwZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtdHlwZS10by1xdWFyay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBldmVudCB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcXVhcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCB0eXBlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1yZWYiPjwvYT48aDM+Z3N0X2V2ZW50X3JlZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X3JlZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JbmNyZWFzZSB0aGUgcmVmY291bnQgb2YgdGhpcyBldmVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBldmVudCB0byByZWZjb3VudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1yZWYucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLShmb3IgY29udmVuaWVuY2Ugd2hlbiBkb2luZyBhc3NpZ25tZW50cykuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC11bnJlZiI+PC9hPjxoMz5nc3RfZXZlbnRfdW5yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfdW5yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RGVjcmVhc2UgdGhlIHJlZmNvdW50IG9mIGFuIGV2ZW50LCBmcmVlaW5nIGl0IGlmIHRoZSByZWZjb3VudCByZWFjaGVzIDAuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXVucmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZXZlbnQgdG8gcmVmY291bnQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXJlcGxhY2UiPjwvYT48aDM+Z3N0X2V2ZW50X3JlcGxhY2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ldmVudF9yZXBsYWNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKipvbGRfZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpuZXdfZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TW9kaWZpZXMgYSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uIFRoZQotbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKLWluIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAotZXZlbnQgaXMgdW5yZWZmZWQsIHRoZSBuZXcgb25lIGlzIHJlZmZlZCkuPC9wPgotPHA+RWl0aGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdfZXZlbnQ8L2NvZGU+PC9lbT4KLSBvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX2V2ZW50PC9jb2RlPjwvZW0+Ci0gbWF5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcmVwbGFjZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vbGRfZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhCi1wb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdG8gYmUgcmVwbGFjZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQgYW5kIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmlub3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uZXdfZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRoYXQgd2lsbAotcmVwbGFjZSB0aGUgZXZlbnQgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX2V2ZW50PC9jb2RlPjwvZW0+Ci0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcmVwbGFjZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X2V2ZW50PC9jb2RlPjwvZW0+Ci13YXMgZGlmZmVyZW50IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9ldmVudDwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1jb3B5Ij48L2E+PGgzPmdzdF9ldmVudF9jb3B5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi1nc3RfZXZlbnRfY29weSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3B5IHRoZSBldmVudCB1c2luZyB0aGUgZXZlbnQgc3BlY2lmaWMgY29weSBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtY29weS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgZXZlbnQgdG8gY29weTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1jb3B5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBldmVudC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXN0ZWFsIj48L2E+PGgzPmdzdF9ldmVudF9zdGVhbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X3N0ZWFsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKipvbGRfZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXRvbWljYWxseSByZXBsYWNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfZXZlbnQ8L2NvZGU+PC9lbT4KLSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBhbmQKLXJldHVybiB0aGUgb3JpZ2luYWwgZXZlbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXN0ZWFsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vbGRfZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhCi1wb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdG8gYmUgc3RvbGVuLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtc3RlYWwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9ldmVudDwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC10YWtlIj48L2E+PGgzPmdzdF9ldmVudF90YWtlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZXZlbnRfdGFrZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICoqb2xkX2V2ZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqbmV3X2V2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1vZGlmaWVzIGEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiBUaGlzCi1mdW5jdGlvbiBpcyBzaW1pbGFyIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1yZXBsYWNlIiB0aXRsZT0iZ3N0X2V2ZW50X3JlcGxhY2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9yZXBsYWNlKCk8L2NvZGU+PC9hPiBleGNlcHQgdGhhdCBpdCB0YWtlcyBvd25lcnNoaXAgb2YKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdfZXZlbnQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5FaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19ldmVudDwvY29kZT48L2VtPgotIG9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfZXZlbnQ8L2NvZGU+PC9lbT4KLSBtYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC10YWtlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9sZF9ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEKLXBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0byBiZSBzdG9sZW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQgYW5kIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmlub3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uZXdfZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRoYXQgd2lsbAotcmVwbGFjZSB0aGUgZXZlbnQgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX2V2ZW50PC9jb2RlPjwvZW0+Ci0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtdGFrZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X2V2ZW50PC9jb2RlPjwvZW0+Ci13YXMgZGlmZmVyZW50IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9ldmVudDwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfZXZlbnRfaXNfd3JpdGFibGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9ldmVudF9pc193cml0YWJsZShldikgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2KSkKLTwvcHJlPgotPHA+VGVzdHMgaWYgeW91IGNhbiBzYWZlbHkgd3JpdGUgZGF0YSBpbnRvIGEgZXZlbnQncyBzdHJ1Y3R1cmUgb3IgdmFsaWRseQotbW9kaWZ5IHRoZSBzZXFudW0gYW5kIHRpbWVzdGFtcCBmaWVsZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtaXMtd3JpdGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW1ha2Utd3JpdGFibGUiPjwvYT48aDM+Z3N0X2V2ZW50X21ha2Vfd3JpdGFibGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9ldmVudF9tYWtlX3dyaXRhYmxlKGV2KSAgIEdTVF9FVkVOVF9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2KSkpCi08L3ByZT4KLTxwPk1ha2VzIGEgd3JpdGFibGUgZXZlbnQgZnJvbSB0aGUgZ2l2ZW4gZXZlbnQuIElmIHRoZSBzb3VyY2UgZXZlbnQgaXMKLWFscmVhZHkgd3JpdGFibGUsIHRoaXMgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBzYW1lIGV2ZW50LiBBIGNvcHkgd2lsbAotb3RoZXJ3aXNlIGJlIG1hZGUgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWNvcHkiIHRpdGxlPSJnc3RfZXZlbnRfY29wecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X2NvcHkoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1tYWtlLXdyaXRhYmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbWFrZS13cml0YWJsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgd3JpdGFibGUgZXZlbnQgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlCi1zYW1lIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldjwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtd3JpdGFibGUtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgd3JpdGFibGUgdmVyc2lvbiBvZiB0aGUgc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC13cml0YWJsZS1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC13cml0YWJsZS1zdHJ1Y3R1cmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgc3RydWN0dXJlIG9mIHRoZSBldmVudC4gVGhlIHN0cnVjdHVyZQotaXMgc3RpbGwgb3duZWQgYnkgdGhlIGV2ZW50LCB3aGljaCBtZWFucyB0aGF0IHlvdSBzaG91bGQgbm90IGZyZWUKLWl0IGFuZCB0aGF0IHRoZSBwb2ludGVyIGJlY29tZXMgaW52YWxpZCB3aGVuIHlvdSBmcmVlIHRoZSBldmVudC4KLVRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotaXMgd3JpdGFibGUgYW5kIHdpbGwgbmV2ZXIgcmV0dXJuCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1jdXN0b20iPjwvYT48aDM+Z3N0X2V2ZW50X25ld19jdXN0b23CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfY3VzdG9tICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBjdXN0b20tdHlwZWQgZXZlbnQuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGFueXRoaW5nIG5vdAotaGFuZGxlZCBieSBvdGhlciBldmVudC1zcGVjaWZpYyBmdW5jdGlvbnMgdG8gcGFzcyBhbiBldmVudCB0byBhbm90aGVyCi1lbGVtZW50LjwvcD4KLTxwPk1ha2Ugc3VyZSB0byBhbGxvY2F0ZSBhbiBldmVudCB0eXBlIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1NQUtFLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9NQUtFX1RZUEUoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9NQUtFX1RZUEU8L3NwYW4+PC9hPiBtYWNybywKLWFzc2lnbmluZyBhIGZyZWUgbnVtYmVyIGFuZCBmaWxsaW5nIGluIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBhbmQKLXNlcmlhbGl6YXRpb24gZmxhZ3MuPC9wPgotPHA+TmV3IGN1c3RvbSBldmVudHMgY2FuIGFsc28gYmUgY3JlYXRlZCBieSBzdWJjbGFzc2luZyB0aGUgZXZlbnQgdHlwZSBpZgotbmVlZGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctY3VzdG9tLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgdHlwZSBvZiB0aGUgbmV3IGV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc3RydWN0dXJlIGZvciB0aGUgZXZlbnQuIFRoZSBldmVudCB3aWxsCi10YWtlIG93bmVyc2hpcCBvZiB0aGUgc3RydWN0dXJlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctY3VzdG9tLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBjdXN0b20gZXZlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1nZXQtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9ldmVudF9nZXRfc3RydWN0dXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BY2Nlc3MgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXZlbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LWdldC1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1nZXQtc3RydWN0dXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgZXZlbnQuIFRoZSBzdHJ1Y3R1cmUgaXMgc3RpbGwKLW93bmVkIGJ5IHRoZSBldmVudCwgd2hpY2ggbWVhbnMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBmcmVlIGl0IGFuZAotdGhhdCB0aGUgcG9pbnRlciBiZWNvbWVzIGludmFsaWQgd2hlbiB5b3UgZnJlZSB0aGUgZXZlbnQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LWhhcy1uYW1lIj48L2E+PGgzPmdzdF9ldmVudF9oYXNfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2V2ZW50X2hhc19uYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIGhhcyB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IHVzZWQgdG8KLWNoZWNrIHRoZSBuYW1lIG9mIGEgY3VzdG9tIGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1oYXMtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1oYXMtbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtZ2V0LXNlcW51bSI+PC9hPjxoMz5nc3RfZXZlbnRfZ2V0X3NlcW51bcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4KLWdzdF9ldmVudF9nZXRfc2VxbnVtICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgYSBldmVudC48L3A+Ci08cD5FdmVudHMgaGF2ZSBldmVyLWluY3JlbWVudGluZyBzZXF1ZW5jZSBudW1iZXJzLCB3aGljaCBtYXkgYWxzbyBiZSBzZXQKLWV4cGxpY2l0bHkgdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1zZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X2V2ZW50X3NldF9zZXFudW3CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9zZXRfc2VxbnVtKCk8L2NvZGU+PC9hPi4gU2VxdWVuY2UgbnVtYmVycyBhcmUgdHlwaWNhbGx5IHVzZWQgdG8KLWluZGljYXRlIHRoYXQgYSBldmVudCBjb3JyZXNwb25kcyB0byBzb21lIG90aGVyIHNldCBvZiBldmVudHMgb3IgbWVzc2FnZXMsCi1mb3IgZXhhbXBsZSBhbiBFT1MgZXZlbnQgY29ycmVzcG9uZGluZyB0byBhIFNFRUsgZXZlbnQuIEl0IGlzIGNvbnNpZGVyZWQgZ29vZAotcHJhY3RpY2UgdG8gbWFrZSB0aGlzIGNvcnJlc3BvbmRlbmNlIHdoZW4gcG9zc2libGUsIHRob3VnaCBpdCBpcyBub3QKLXJlcXVpcmVkLjwvcD4KLTxwPk5vdGUgdGhhdCBldmVudHMgYW5kIG1lc3NhZ2VzIHNoYXJlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRvcjsKLXR3byBldmVudHMgb3IgbWVzc2FnZXMgd2lsbCBuZXZlciBoYXZlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlciB1bmxlc3MKLXRoYXQgY29ycmVzcG9uZGVuY2Ugd2FzIG1hZGUgZXhwbGljaXRseS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtZ2V0LXNlcW51bS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1nZXQtc2VxbnVtLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGV2ZW50J3Mgc2VxdWVuY2UgbnVtYmVyLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1zZXQtc2VxbnVtIj48L2E+PGgzPmdzdF9ldmVudF9zZXRfc2VxbnVtwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3NldF9zZXFudW0gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBzZXFudW08L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgYSBldmVudC48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCBieSB0aGUgY3JlYXRvciBvZiBhIGV2ZW50IHRvIGluZGljYXRlIHRoYXQgdGhlCi1ldmVudCByZWxhdGVzIHRvIG90aGVyIGV2ZW50cyBvciBtZXNzYWdlcy4gU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X2V2ZW50X2dldF9zZXFudW3CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9nZXRfc2VxbnVtKCk8L2NvZGU+PC9hPiBmb3IKLW1vcmUgaW5mb3JtYXRpb24uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtc2V0LXNlcW51bS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlcW51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgc2VxdWVuY2UgbnVtYmVyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtZ2V0LXJ1bm5pbmctdGltZS1vZmZzZXQiPjwvYT48aDM+Z3N0X2V2ZW50X2dldF9ydW5uaW5nX3RpbWVfb2Zmc2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4KLWdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZSB0aGUgYWNjdW11bGF0ZWQgcnVubmluZyB0aW1lIG9mZnNldCBvZiB0aGUgZXZlbnQuPC9wPgotPHA+RXZlbnRzIHBhc3NpbmcgdGhyb3VnaCA8YSBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkczwvc3Bhbj48L2E+IHRoYXQgaGF2ZSBhIHJ1bm5pbmcgdGltZQotb2Zmc2V0IHNldCB2aWEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LW9mZnNldCIgdGl0bGU9ImdzdF9wYWRfc2V0X29mZnNldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfb2Zmc2V0KCk8L2NvZGU+PC9hPiB3aWxsIGdldCB0aGVpciBvZmZzZXQKLWFkanVzdGVkIGFjY29yZGluZyB0byB0aGUgcGFkJ3Mgb2Zmc2V0LjwvcD4KLTxwPklmIHRoZSBldmVudCBjb250YWlucyBhbnkgaW5mb3JtYXRpb24gdGhhdCByZWxhdGVkIHRvIHRoZQotcnVubmluZyB0aW1lLCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkCi1iZWZvcmUgdXNhZ2Ugd2l0aCB0aGlzIG9mZnNldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtZ2V0LXJ1bm5pbmctdGltZS1vZmZzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtZ2V0LXJ1bm5pbmctdGltZS1vZmZzZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgZXZlbnQncyBydW5uaW5nIHRpbWUgb2Zmc2V0PC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXNldC1ydW5uaW5nLXRpbWUtb2Zmc2V0Ij48L2E+PGgzPmdzdF9ldmVudF9zZXRfcnVubmluZ190aW1lX29mZnNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ldmVudF9zZXRfcnVubmluZ190aW1lX29mZnNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgcnVubmluZyB0aW1lIG9mZnNldCBvZiBhIGV2ZW50LiBTZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtcnVubmluZy10aW1lLW9mZnNldCIgdGl0bGU9ImdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X2dldF9ydW5uaW5nX3RpbWVfb2Zmc2V0KCk8L2NvZGU+PC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1zZXQtcnVubmluZy10aW1lLW9mZnNldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdGhlIG5ldyBydW5uaW5nIHRpbWUgb2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctZmx1c2gtc3RhcnQiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19mbHVzaF9zdGFydMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGxvY2F0ZSBhIG5ldyBmbHVzaCBzdGFydCBldmVudC4gVGhlIGZsdXNoIHN0YXJ0IGV2ZW50IGNhbiBiZSBzZW50Ci11cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBhbmQgdHJhdmVscyBvdXQtb2YtYm91bmRzIHdpdGggdGhlIGRhdGFmbG93LjwvcD4KLTxwPkl0IG1hcmtzIHBhZHMgYXMgYmVpbmcgZmx1c2hpbmcgYW5kIHdpbGwgbWFrZSB0aGVtIHJldHVybgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUZMVVNISU5HOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19GTFVTSElORzwvc3Bhbj48L2E+IHdoZW4gdXNlZCBmb3IgZGF0YSBmbG93IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIgdGl0bGU9ImdzdF9wYWRfcHVzaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoKCk8L2NvZGU+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoYWluIiB0aXRsZT0iZ3N0X3BhZF9jaGFpbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9jaGFpbigpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1yYW5nZSIgdGl0bGU9ImdzdF9wYWRfZ2V0X3JhbmdlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2dldF9yYW5nZSgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1bGwtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX3B1bGxfcmFuZ2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVsbF9yYW5nZSgpPC9jb2RlPjwvYT4uCi1BbnkgZXZlbnQgKGV4Y2VwdCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1GTFVTSC1TVE9QOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfRkxVU0hfU1RPUDwvc3Bhbj48L2E+KSByZWNlaXZlZAotb24gYSBmbHVzaGluZyBwYWQgd2lsbCByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaW1tZWRpYXRlbHkuPC9wPgotPHA+RWxlbWVudHMgc2hvdWxkIHVubG9jayBhbnkgYmxvY2tpbmcgZnVuY3Rpb25zIGFuZCBleGl0IHRoZWlyIHN0cmVhbWluZwotZnVuY3Rpb25zIGFzIGZhc3QgYXMgcG9zc2libGUgd2hlbiB0aGlzIGV2ZW50IGlzIHJlY2VpdmVkLjwvcD4KLTxwPlRoaXMgZXZlbnQgaXMgdHlwaWNhbGx5IGdlbmVyYXRlZCBhZnRlciBhIHNlZWsgdG8gZmx1c2ggb3V0IGFsbCBxdWV1ZWQgZGF0YQotaW4gdGhlIHBpcGVsaW5lIHNvIHRoYXQgdGhlIG5ldyBtZWRpYSBpcyBwbGF5ZWQgYXMgc29vbiBhcyBwb3NzaWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWZsdXNoLXN0YXJ0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgZmx1c2ggc3RhcnQgZXZlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctZmx1c2gtc3RvcCI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3DCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHJlc2V0X3RpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWxsb2NhdGUgYSBuZXcgZmx1c2ggc3RvcCBldmVudC4gVGhlIGZsdXNoIHN0b3AgZXZlbnQgY2FuIGJlIHNlbnQKLXVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGFuZCB0cmF2ZWxzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgZGF0YWZsb3cuCi1JdCBpcyB0eXBpY2FsbHkgc2VudCBhZnRlciBzZW5kaW5nIGEgRkxVU0hfU1RBUlQgZXZlbnQgdG8gbWFrZSB0aGUKLXBhZHMgYWNjZXB0IGRhdGEgYWdhaW4uPC9wPgotPHA+RWxlbWVudHMgY2FuIHByb2Nlc3MgdGhpcyBldmVudCBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGF0YWZsb3cgc2luY2UKLXRoZSBwcmVjZWRpbmcgRkxVU0hfU1RBUlQgZXZlbnQgc3RvcHBlZCB0aGUgZGF0YWZsb3cuPC9wPgotPHA+VGhpcyBldmVudCBpcyB0eXBpY2FsbHkgZ2VuZXJhdGVkIHRvIGNvbXBsZXRlIGEgc2VlayBhbmQgdG8gcmVzdW1lCi1kYXRhZmxvdy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWZsdXNoLXN0b3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlc2V0X3RpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pZiB0aW1lIHNob3VsZCBiZSByZXNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctZmx1c2gtc3RvcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IGZsdXNoIHN0b3AgZXZlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1mbHVzaC1zdG9wIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpyZXNldF90aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIHRoZSBGTFVTSF9TVE9QIGV2ZW50IGFuZCByZXRyaWV2ZSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc2V0X3RpbWU8L2NvZGU+PC9lbT4KLSBtZW1iZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLWZsdXNoLXN0b3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgZXZlbnQgdG8gcGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzZXRfdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBpZiB0aW1lIHNob3VsZCBiZSByZXNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctZW9zIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfZW9zwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi1nc3RfZXZlbnRfbmV3X2VvcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgRU9TIGV2ZW50LiBUaGUgZW9zIGV2ZW50IGNhbiBvbmx5IHRyYXZlbCBkb3duc3RyZWFtCi1zeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cuIEVsZW1lbnRzIHRoYXQgcmVjZWl2ZSB0aGUgRU9TCi1ldmVudCBvbiBhIHBhZCBjYW4gcmV0dXJuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1FT1M6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX0VPUzwvc3Bhbj48L2E+IGFzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLXdoZW4gZGF0YSBhZnRlciB0aGUgRU9TIGV2ZW50IGFycml2ZXMuPC9wPgotPHA+VGhlIEVPUyBldmVudCB3aWxsIHRyYXZlbCBkb3duIHRvIHRoZSBzaW5rIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZQotd2hpY2ggd2lsbCB0aGVuIHBvc3QgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRU9TOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVTU0FHRV9FT1M8L3NwYW4+PC9hPiBvbiB0aGUgYnVzIGFmdGVyIHRoZXkgaGF2ZQotZmluaXNoZWQgcGxheWluZyBhbnkgYnVmZmVyZWQgZGF0YS48L3A+Ci08cD5XaGVuIGFsbCBzaW5rcyBoYXZlIHBvc3RlZCBhbiBFT1MgbWVzc2FnZSwgYW4gRU9TIG1lc3NhZ2UgaXMKLWZvcndhcmRlZCB0byB0aGUgYXBwbGljYXRpb24uPC9wPgotPHA+VGhlIEVPUyBldmVudCBpdHNlbGYgd2lsbCBub3QgY2F1c2UgYW55IHN0YXRlIHRyYW5zaXRpb25zIG9mIHRoZSBwaXBlbGluZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWVvcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgRU9TIGV2ZW50LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWdhcCI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X2dhcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19nYXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBHQVAgZXZlbnQuIEEgZ2FwIGV2ZW50IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGNvbmNlcHR1YWxseQotZXF1aXZhbGVudCB0byBhIGJ1ZmZlciB0byBzaWduYWwgdGhhdCB0aGVyZSBpcyBubyBkYXRhIGZvciBhIGNlcnRhaW4KLWFtb3VudCBvZiB0aW1lLiBUaGlzIGlzIHVzZWZ1bCB0byBzaWduYWwgYSBnYXAgdG8gZG93bnN0cmVhbSBlbGVtZW50cwotd2hpY2ggbWF5IHdhaXQgZm9yIGRhdGEsIHN1Y2ggYXMgbXV4ZXJzIG9yIG1peGVycyBvciBvdmVybGF5cywgZXNwZWNpYWxseQotZm9yIHNwYXJzZSBzdHJlYW1zIHN1Y2ggYXMgc3VidGl0bGUgc3RyZWFtcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWdhcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RhcnQgdGltZSAocHRzKSBvZiB0aGUgZ2FwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmR1cmF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGR1cmF0aW9uIG9mIHRoZSBnYXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctZ2FwLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBHQVAgZXZlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1nYXAiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX2dhcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ldmVudF9wYXJzZV9nYXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKnRpbWVzdGFtcDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqZHVyYXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdCB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uIGZyb20gYSBuZXcgR0FQIGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1nYXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUdBUDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX0dBUDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUKLXN0YXJ0IHRpbWUgKHB0cykgb2YgdGhlIGdhcCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kdXJhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgZHVyYXRpb24gb2YKLXRoZSBnYXAsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zdHJlYW0tc3RhcnQiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnN0cmVhbV9pZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgU1RSRUFNX1NUQVJUIGV2ZW50LiBUaGUgc3RyZWFtIHN0YXJ0IGV2ZW50IGNhbiBvbmx5Ci10cmF2ZWwgZG93bnN0cmVhbSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cuIEl0IGlzIGV4cGVjdGVkCi10byBiZSB0aGUgZmlyc3QgZXZlbnQgdGhhdCBpcyBzZW50IGZvciBhIG5ldyBzdHJlYW0uPC9wPgotPHA+U291cmNlIGVsZW1lbnRzLCBkZW11eGVycyBhbmQgb3RoZXIgZWxlbWVudHMgdGhhdCBjcmVhdGUgbmV3IHN0cmVhbXMKLWFyZSBzdXBwb3NlZCB0byBzZW5kIHRoaXMgZXZlbnQgYXMgdGhlIGZpcnN0IGV2ZW50IG9mIGEgbmV3IHN0cmVhbS4gSXQKLXNob3VsZCBub3QgYmUgc2VudCBhZnRlciBhIGZsdXNoaW5nIHNlZWsgb3IgaW4gc2ltaWxhciBzaXR1YXRpb25zCi1hbmQgaXMgdXNlZCB0byBtYXJrIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgbG9naWNhbCBzdHJlYW0uIEVsZW1lbnRzCi1jb21iaW5pbmcgbXVsdGlwbGUgc3RyZWFtcyBtdXN0IGVuc3VyZSB0aGF0IHRoaXMgZXZlbnQgaXMgb25seSBmb3J3YXJkZWQKLWRvd25zdHJlYW0gb25jZSBhbmQgbm90IGZvciBldmVyeSBzaW5nbGUgaW5wdXQgc3RyZWFtLjwvcD4KLTxwPlRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX2lkPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIGEgdW5pcXVlIHN0cmluZyB0aGF0IGNvbnNpc3RzIG9mIHRoZSB1cHN0cmVhbQotc3RyZWFtLWlkLCAvIGFzIHNlcGFyYXRvciBhbmQgYSB1bmlxdWUgc3RyZWFtLWlkIGZvciB0aGlzIHNwZWNpZmljCi1zdHJlYW0uIEEgbmV3IHN0cmVhbS1pZCBzaG91bGQgb25seSBiZSBjcmVhdGVkIGZvciBhIHN0cmVhbSBpZiB0aGUgdXBzdHJlYW0KLXN0cmVhbSBpcyBzcGxpdCBpbnRvIChwb3RlbnRpYWxseSkgbXVsdGlwbGUgbmV3IHN0cmVhbXMsIGUuZy4gaW4gYSBkZW11eGVyLAotYnV0IG5vdCBmb3IgZXZlcnkgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIHBpcGVsaW5lLgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY3JlYXRlLXN0cmVhbS1pZCIgdGl0bGU9ImdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jcmVhdGUtc3RyZWFtLWlkLXByaW50ZiIgdGl0bGU9ImdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGYoKTwvY29kZT48L2E+IGNhbiBiZQotdXNlZCB0byBjcmVhdGUgYSBzdHJlYW0taWQuICBUaGVyZSBhcmUgbm8gcGFydGljdWxhciBzZW1hbnRpY3MgZm9yIHRoZQotc3RyZWFtLWlkLCB0aG91Z2ggaXQgc2hvdWxkIGJlIGRldGVybWluaXN0aWMgKHRvIHN1cHBvcnQgc3RyZWFtIG1hdGNoaW5nKQotYW5kIGl0IG1pZ2h0IGJlIHVzZWQgdG8gb3JkZXIgc3RyZWFtcyAoYmVzaWRlcyBhbnkgaW5mb3JtYXRpb24gY29udmV5ZWQgYnkKLXN0cmVhbSBmbGFncykuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zdHJlYW0tc3RhcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbV9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPklkZW50aWZpZXIgZm9yIHRoaXMgc3RyZWFtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zdHJlYW0tc3RhcnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IFNUUkVBTV9TVEFSVCBldmVudC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbS1zdGFydCI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnN0cmVhbV9pZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSBhIHN0cmVhbS1pZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV9pZDwvY29kZT48L2VtPgotCi1sb2NhdGlvbi4gVGhlIHN0cmluZyBzdG9yZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV9pZDwvY29kZT48L2VtPgotIG11c3Qgbm90IGJlIG1vZGlmaWVkIGFuZCB3aWxsCi1yZW1haW4gdmFsaWQgb25seSB1bnRpbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBnZXRzIGZyZWVkLiBNYWtlIGEgY29weSBpZiB5b3Ugd2FudCB0bwotbW9kaWZ5IGl0IG9yIHN0b3JlIGl0IGZvciBsYXRlciB1c2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbS1zdGFydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc3RyZWFtLXN0YXJ0IGV2ZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW1faWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBzdG9yZSB0aGUgc3RyZWFtLWlkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXNldC1zdHJlYW0tZmxhZ3MiPjwvYT48aDM+Z3N0X2V2ZW50X3NldF9zdHJlYW1fZmxhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfc2V0X3N0cmVhbV9mbGFncyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0U3RyZWFtRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtc2V0LXN0cmVhbS1mbGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc3RyZWFtLXN0YXJ0IGV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0cmVhbSBmbGFncyB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbS1mbGFncyI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2ZsYWdzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9mbGFncyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTdHJlYW1GbGFncyIgdGl0bGU9ImVudW0gR3N0U3RyZWFtRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1GbGFnczwvc3Bhbj48L2E+ICpmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2Utc3RyZWFtLWZsYWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJlYW0tc3RhcnQgZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRkcmVzcyBvZiB2YXJpYWJsZSB3aGVyZSB0byBzdG9yZSB0aGUgc3RyZWFtIGZsYWdzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXNldC1ncm91cC1pZCI+PC9hPjxoMz5nc3RfZXZlbnRfc2V0X2dyb3VwX2lkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3NldF9ncm91cF9pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBncm91cF9pZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGwgc3RyZWFtcyB0aGF0IGhhdmUgdGhlIHNhbWUgZ3JvdXAgaWQgYXJlIHN1cHBvc2VkIHRvIGJlIHBsYXllZAotdG9nZXRoZXIsIGkuZS4gYWxsIHN0cmVhbXMgaW5zaWRlIGEgY29udGFpbmVyIGZpbGUgc2hvdWxkIGhhdmUgdGhlCi1zYW1lIGdyb3VwIGlkIGJ1dCBkaWZmZXJlbnQgc3RyZWFtIGlkcy4gVGhlIGdyb3VwIGlkIHNob3VsZCBjaGFuZ2UKLWVhY2ggdGltZSB0aGUgc3RyZWFtIGlzIHN0YXJ0ZWQsIHJlc3VsdGluZyBpbiBkaWZmZXJlbnQgZ3JvdXAgaWRzCi1lYWNoIHRpbWUgYSBmaWxlIGlzIHBsYXllZCBmb3IgZXhhbXBsZS48L3A+Ci08cD5Vc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWdyb3VwLWlkLW5leHQiIHRpdGxlPSJnc3RfdXRpbF9ncm91cF9pZF9uZXh0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF9ncm91cF9pZF9uZXh0KCk8L2NvZGU+PC9hPiB0byBnZXQgYSBuZXcgZ3JvdXAgaWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXNldC1ncm91cC1pZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc3RyZWFtLXN0YXJ0IGV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdyb3VwX2lkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyb3VwIGlkIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2UtZ3JvdXAtaWQiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX2dyb3VwX2lkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqZ3JvdXBfaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLWdyb3VwLWlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJlYW0tc3RhcnQgZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Z3JvdXBfaWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRkcmVzcyBvZiB2YXJpYWJsZSB3aGVyZSB0byBzdG9yZSB0aGUgZ3JvdXAgaWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLWdyb3VwLWlkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGEgZ3JvdXAgaWQgd2FzIHNldCBvbiB0aGUgZXZlbnQgYW5kIGNvdWxkIGJlIHBhcnNlZCwKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXNldC1zdHJlYW0iPjwvYT48aDM+Z3N0X2V2ZW50X3NldF9zdHJlYW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfc2V0X3N0cmVhbSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gKnN0cmVhbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW08L2NvZGU+PC9lbT4KLSBvbiB0aGUgc3RyZWFtLXN0YXJ0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXNldC1zdHJlYW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHN0cmVhbS1zdGFydCBldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0cmVhbSBvYmplY3QgdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2Utc3RyZWFtIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9zdHJlYW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+ICoqc3RyZWFtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGEgc3RyZWFtLXN0YXJ0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIGFuZCBleHRyYWN0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiBmcm9tIGl0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1zdHJlYW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHN0cmVhbS1zdGFydCBldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRyZXNzIG9mIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBzdHJlYW0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc2VnbWVudCI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X3NlZ21lbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfc2VnbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBTRUdNRU5UIGV2ZW50IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPgotLiBUaGUgc2VnbWVudCBldmVudCBjYW4gb25seSB0cmF2ZWwKLWRvd25zdHJlYW0gc3luY2hyb25pemVkIHdpdGggdGhlIGJ1ZmZlciBmbG93IGFuZCBjb250YWlucyB0aW1pbmcgaW5mb3JtYXRpb24KLWFuZCBwbGF5YmFjayBwcm9wZXJ0aWVzIGZvciB0aGUgYnVmZmVycyB0aGF0IHdpbGwgZm9sbG93LjwvcD4KLTxwPlRoZSBzZWdtZW50IGV2ZW50IG1hcmtzIHRoZSByYW5nZSBvZiBidWZmZXJzIHRvIGJlIHByb2Nlc3NlZC4gQWxsCi1kYXRhIG5vdCB3aXRoaW4gdGhlIHNlZ21lbnQgcmFuZ2UgaXMgbm90IHRvIGJlIHByb2Nlc3NlZC4gVGhpcyBjYW4gYmUKLXVzZWQgaW50ZWxsaWdlbnRseSBieSBwbHVnaW5zIHRvIGFwcGx5IG1vcmUgZWZmaWNpZW50IG1ldGhvZHMgb2Ygc2tpcHBpbmcKLXVubmVlZGVkIGRhdGEuIFRoZSB2YWxpZCByYW5nZSBpcyBleHByZXNzZWQgd2l0aCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci0KLXZhbHVlcy48L3A+Ci08cD5UaGUgdGltZSB2YWx1ZSBvZiB0aGUgc2VnbWVudCBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHN0YXJ0Ci12YWx1ZSB0byBjb252ZXJ0IHRoZSBidWZmZXIgdGltZXN0YW1wcyBpbnRvIHRoZSBzdHJlYW0gdGltZS4gVGhpcyBpcwotdXN1YWxseSBkb25lIGluIHNpbmtzIHRvIHJlcG9ydCB0aGUgY3VycmVudCBzdHJlYW1fdGltZS4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+Ci0gcmVwcmVzZW50cyB0aGUgc3RyZWFtX3RpbWUgb2YgYSBidWZmZXIgY2FycnlpbmcgYSB0aW1lc3RhbXAgb2YKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPgotLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPgotIGNhbm5vdCBiZSAtMS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4KLSBjYW5ub3QgYmUgLTEsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIC0xLiBJZiB0aGVyZQotaXMgYSB2YWxpZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPgotIGdpdmVuLCBpdCBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPgotLCBpbmNsdWRpbmcKLXdoZW4gdGhlIGluZGljYXRlZCBwbGF5YmFjayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPgotIGlzICZsdDsgMC48L3A+Ci08cD5UaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFwcGxpZWRfcmF0ZTwvY29kZT48L2VtPgotIHZhbHVlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGFueSByYXRlIGFkanVzdG1lbnQgdGhhdAotaGFzIGFscmVhZHkgYmVlbiBtYWRlIHRvIHRoZSB0aW1lc3RhbXBzIGFuZCBjb250ZW50IG9uIHRoZSBidWZmZXJzIG9mIHRoZQotc3RyZWFtLiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT4KLSAqIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcHBsaWVkX3JhdGU8L2NvZGU+PC9lbT4KLSkgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgcmF0ZSB0aGF0IGhhcyBiZWVuCi1yZXF1ZXN0ZWQgZm9yIHBsYXliYWNrLiBGb3IgZXhhbXBsZSwgaWYgYW4gZWxlbWVudCBoYXMgYW4gaW5wdXQgc2VnbWVudAotd2l0aCBpbnRlbmRlZCBwbGF5YmFjayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPgotIG9mIDIuMCBhbmQgYXBwbGllZF9yYXRlIG9mIDEuMCwgaXQgY2FuIGFkanVzdAotaW5jb21pbmcgdGltZXN0YW1wcyBhbmQgYnVmZmVyIGNvbnRlbnQgYnkgaGFsZiBhbmQgb3V0cHV0IGEgc2VnbWVudCBldmVudAotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPgotIG9mIDEuMCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFwcGxpZWRfcmF0ZTwvY29kZT48L2VtPgotIG9mIDIuMDwvcD4KLTxwPkFmdGVyIGEgc2VnbWVudCBldmVudCwgdGhlIGJ1ZmZlciBzdHJlYW0gdGltZSBpcyBjYWxjdWxhdGVkIHdpdGg6PC9wPgotPHA+ICB0aW1lICsgKFRJTUVTVEFNUChidWYpIC0gc3RhcnQpICogQUJTIChyYXRlICogYXBwbGllZF9yYXRlKTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc2VnbWVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXNlZ21lbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IFNFR01FTlQgZXZlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1zZWdtZW50Ij48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9zZWdtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICoqc2VnbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZXMgYSBzZWdtZW50IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBsb2NhdGlvbi4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+Ci0gcmVtYWlucyB2YWxpZCBvbmx5IHVudGlsIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBpcyBmcmVlZC4gRG9uJ3QgbW9kaWZ5IHRoZSBzZWdtZW50Ci1hbmQgbWFrZSBhIGNvcHkgaWYgeW91IHdhbnQgdG8gbW9kaWZ5IGl0IG9yIHN0b3JlIGl0IGZvciBsYXRlciB1c2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXNlZ21lbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgZXZlbnQgdG8gcGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1jb3B5LXNlZ21lbnQiPjwvYT48aDM+Z3N0X2V2ZW50X2NvcHlfc2VnbWVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2VzIGEgc2VnbWVudCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBhbmQgY29waWVzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBpbnRvIHRoZSBsb2NhdGlvbgotZ2l2ZW4gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtY29weS1zZWdtZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGV2ZW50IHRvIHBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXRhZyI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X3RhZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld190YWcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqdGFnbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZW5lcmF0ZXMgYSBtZXRhZGF0YSB0YWcgZXZlbnQgZnJvbSB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZ2xpc3Q8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5UaGUgc2NvcGUgb2YgdGhlIHRhZ2xpc3Qgc3BlY2lmaWVzIGlmIHRoZSB0YWdsaXN0IGFwcGxpZXMgdG8gdGhlCi1jb21wbGV0ZSBtZWRpdW0gb3Igb25seSB0byB0aGlzIHNwZWNpZmljIHN0cmVhbS4gQXMgdGhlIHRhZyBldmVudAotaXMgYSBzdGlja3kgZXZlbnQsIGVsZW1lbnRzIHNob3VsZCBtZXJnZSB0YWdzIHJlY2VpdmVkIGZyb20KLXVwc3RyZWFtIHdpdGggYSBnaXZlbiBzY29wZSB3aXRoIHRoZWlyIG93biB0YWdzIHdpdGggdGhlIHNhbWUKLXNjb3BlIGFuZCBjcmVhdGUgYSBuZXcgdGFnIGV2ZW50IGZyb20gaXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy10YWcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ2xpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbWV0YWRhdGEgbGlzdC4gVGhlIGV2ZW50IHdpbGwgdGFrZSBvd25lcnNoaXAKLW9mIHRoZSB0YWdsaXN0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXRhZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2UtdGFnIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV90YWfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfcGFyc2VfdGFnICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICoqdGFnbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZXMgYSB0YWcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+Ci0gYW5kIHN0b3JlcyB0aGUgcmVzdWx0cyBpbiB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZ2xpc3Q8L2NvZGU+PC9lbT4KLSBsb2NhdGlvbi4KLU5vIHJlZmVyZW5jZSB0byB0aGUgdGFnbGlzdCB3aWxsIGJlIHJldHVybmVkLCBpdCByZW1haW5zIHZhbGlkIG9ubHkgdW50aWwKLXRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBpcyBmcmVlZC4gRG9uJ3QgbW9kaWZ5IG9yIGZyZWUgdGhlIHRhZ2xpc3QsIG1ha2UgYSBjb3B5IGlmIHlvdQotd2FudCB0byBtb2RpZnkgaXQgb3Igc3RvcmUgaXQgZm9yIGxhdGVyIHVzZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2UtdGFnLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB0YWcgZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIG1ldGFkYXRhIGxpc3QuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWJ1ZmZlci1zaXplIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gbWluc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IG1heHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYXN5bmM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGJ1ZmZlcnNpemUgZXZlbnQuIFRoZSBldmVudCBpcyBzZW50IGRvd25zdHJlYW0gYW5kIG5vdGlmaWVzCi1lbGVtZW50cyB0aGF0IHRoZXkgc2hvdWxkIHByb3ZpZGUgYSBidWZmZXIgb2YgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zLjwvcD4KLTxwPldoZW4gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hc3luYzwvY29kZT48L2VtPgotIGZsYWcgaXMgc2V0LCBhIHRocmVhZCBib3VuZGFyeSBpcyBwcmVmZXJyZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1idWZmZXItc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5idWZmZXIgZm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5taW5pbXVtIGJ1ZmZlciBzaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1heHNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tYXhpbXVtIGJ1ZmZlciBzaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFzeW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhyZWFkIGJlaGF2aW9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWJ1ZmZlci1zaXplLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1idWZmZXItc2l6ZSI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfcGFyc2VfYnVmZmVyX3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKm1pbnNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmFzeW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgZm9ybWF0LCBtaW5zaXplLCBtYXhzaXplIGFuZCBhc3luYy1mbGFnIGluIHRoZSBidWZmZXJzaXplIGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1idWZmZXItc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBldmVudCB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBmb3JtYXQgaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgbWluc2l6ZSBpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1heHNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBtYXhzaXplIGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXN5bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBhc3luYy1mbGFnIGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1xb3MiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19xb3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfcW9zICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0UU9TVHlwZSIgdGl0bGU9ImVudW0gR3N0UU9TVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFFPU1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcHJvcG9ydGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIgdGl0bGU9IkdzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gZGlmZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFsbG9jYXRlIGEgbmV3IHFvcyBldmVudCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXMuCi1UaGUgUU9TIGV2ZW50IGlzIGdlbmVyYXRlZCBpbiBhbiBlbGVtZW50IHRoYXQgd2FudHMgYW4gdXBzdHJlYW0KLWVsZW1lbnQgdG8gZWl0aGVyIHJlZHVjZSBvciBpbmNyZWFzZSBpdHMgcmF0ZSBiZWNhdXNlIG9mCi1oaWdoL2xvdyBDUFUgbG9hZCBvciBvdGhlciByZXNvdXJjZSB1c2FnZSBzdWNoIGFzIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3IKLXRocm90dGxpbmcuIFR5cGljYWxseSBzaW5rcyBnZW5lcmF0ZSB0aGVzZSBldmVudHMgZm9yIGVhY2ggYnVmZmVyCi10aGV5IHJlY2VpdmUuPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLSBpbmRpY2F0ZXMgdGhlIHJlYXNvbiBmb3IgdGhlIFFvUyBldmVudC4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLU9WRVJGTE9XOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUU9TX1RZUEVfT1ZFUkZMT1c8L3NwYW4+PC9hPiBpcwotdXNlZCB3aGVuIGEgYnVmZmVyIGFycml2ZWQgaW4gdGltZSBvciB3aGVuIHRoZSBzaW5rIGNhbm5vdCBrZWVwIHVwIHdpdGgKLXRoZSB1cHN0cmVhbSBkYXRhcmF0ZS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLVVOREVSRkxPVzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1FPU19UWVBFX1VOREVSRkxPVzwvc3Bhbj48L2E+IGlzIHdoZW4gdGhlIHNpbmsgaXMgbm90Ci1yZWNlaXZpbmcgYnVmZmVycyBmYXN0IGVub3VnaCBhbmQgdGh1cyBoYXMgdG8gZHJvcCBsYXRlIGJ1ZmZlcnMuIAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLVRIUk9UVExFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUU9TX1RZUEVfVEhST1RUTEU8L3NwYW4+PC9hPiBpcyB1c2VkIHdoZW4gdGhlIGRhdGFyYXRlIGlzIGFydGlmaWNpYWxseSBsaW1pdGVkCi1ieSB0aGUgYXBwbGljYXRpb24sIGZvciBleGFtcGxlIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvcG9ydGlvbjwvY29kZT48L2VtPgotIGluZGljYXRlcyB0aGUgcmVhbC10aW1lIHBlcmZvcm1hbmNlIG9mIHRoZSBzdHJlYW1pbmcgaW4gdGhlCi1lbGVtZW50IHRoYXQgZ2VuZXJhdGVkIHRoZSBRb1MgZXZlbnQgKHVzdWFsbHkgdGhlIHNpbmspLiBUaGUgdmFsdWUgaXMKLWdlbmVyYWxseSBjb21wdXRlZCBiYXNlZCBvbiBtb3JlIGxvbmcgdGVybSBzdGF0aXN0aWNzIGFib3V0IHRoZSBzdHJlYW1zCi10aW1lc3RhbXBzIGNvbXBhcmVkIHRvIHRoZSBjbG9jay4KLUEgdmFsdWUgJmx0OyAxLjAgaW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIGVsZW1lbnQgaXMgcHJvZHVjaW5nIGRhdGEgZmFzdGVyCi10aGFuIHJlYWwtdGltZS4gQSB2YWx1ZSAmZ3Q7IDEuMCBpbmRpY2F0ZXMgdGhhdCB0aGUgdXBzdHJlYW0gZWxlbWVudCBpcyBub3QKLXByb2R1Y2luZyBkYXRhIGZhc3QgZW5vdWdoLiAxLjAgaXMgdGhlIGlkZWFsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9wb3J0aW9uPC9jb2RlPjwvZW0+Ci0gdmFsdWUuIFRoZQotcHJvcG9ydGlvbiB2YWx1ZSBjYW4gc2FmZWx5IGJlIHVzZWQgdG8gbG93ZXIgb3IgaW5jcmVhc2UgdGhlIHF1YWxpdHkgb2YKLXRoZSBlbGVtZW50LjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaWZmPC9jb2RlPjwvZW0+Ci0gaXMgdGhlIGRpZmZlcmVuY2UgYWdhaW5zdCB0aGUgY2xvY2sgaW4gcnVubmluZyB0aW1lIG9mIHRoZSBsYXN0Ci1idWZmZXIgdGhhdCBjYXVzZWQgdGhlIGVsZW1lbnQgdG8gZ2VuZXJhdGUgdGhlIFFPUyBldmVudC4gQSBuZWdhdGl2ZSB2YWx1ZQotbWVhbnMgdGhhdCB0aGUgYnVmZmVyIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPgotIGFycml2ZWQgaW4gdGltZS4gQSBwb3NpdGl2ZSB2YWx1ZQotaW5kaWNhdGVzIGhvdyBsYXRlIHRoZSBidWZmZXIgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+Ci0gd2FzLiBXaGVuIHRocm90dGxpbmcgaXMKLWVuYWJsZWQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaWZmPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBzZXQgdG8gdGhlIHJlcXVlc3RlZCB0aHJvdHRsaW5nIGludGVydmFsLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lc3RhbXA8L2NvZGU+PC9lbT4KLSBpcyB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IGJ1ZmZlciB0aGF0IGNhdXNlIHRoZSBlbGVtZW50Ci10byBnZW5lcmF0ZSB0aGUgUU9TIGV2ZW50LiBJdCBpcyBleHByZXNzZWQgaW4gcnVubmluZyB0aW1lIGFuZCB0aHVzIGFuIGV2ZXIKLWluY3JlYXNpbmcgdmFsdWUuPC9wPgotPHA+VGhlIHVwc3RyZWFtIGVsZW1lbnQgY2FuIHVzZSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRpZmY8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPgotIHZhbHVlcyB0byBkZWNpZGUKLXdoZXRoZXIgdG8gcHJvY2VzcyBtb3JlIGJ1ZmZlcnMuIEZvciBwb3NpdGl2ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlmZjwvY29kZT48L2VtPgotLCBhbGwgYnVmZmVycyB3aXRoCi10aW1lc3RhbXAgJmx0Oz0gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPgotICsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRpZmY8L2NvZGU+PC9lbT4KLSB3aWxsIGNlcnRhaW5seSBhcnJpdmUgbGF0ZSBpbiB0aGUgc2luawotYXMgd2VsbC4gQSAobmVnYXRpdmUpIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaWZmPC9jb2RlPjwvZW0+Ci0gdmFsdWUgc28gdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+Ci0gKyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlmZjwvY29kZT48L2VtPgotIHdvdWxkIHlpZWxkIGEKLXJlc3VsdCBzbWFsbGVyIHRoYW4gMCBpcyBub3QgYWxsb3dlZC48L3A+Ci08cD5UaGUgYXBwbGljYXRpb24gY2FuIHVzZSBnZW5lcmFsIGV2ZW50IHByb2JlcyB0byBpbnRlcmNlcHQgdGhlIFFvUwotZXZlbnQgYW5kIGltcGxlbWVudCBjdXN0b20gYXBwbGljYXRpb24gc3BlY2lmaWMgUW9TIGhhbmRsaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctcW9zLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgUW9TIHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvcG9ydGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwcm9wb3J0aW9uIG9mIHRoZSBxb3MgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kaWZmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHRpbWUgZGlmZmVyZW5jZSBvZiB0aGUgbGFzdCBDbG9jayBzeW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1xb3MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBRT1MgZXZlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1xb3MiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX3Fvc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ldmVudF9wYXJzZV9xb3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0UU9TVHlwZSIgdGl0bGU9ImVudW0gR3N0UU9TVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFFPU1R5cGU8L3NwYW4+PC9hPiAqdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnByb3BvcnRpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIgdGl0bGU9IkdzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gKmRpZmY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKnRpbWVzdGFtcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIHR5cGUsIHByb3BvcnRpb24sIGRpZmYgYW5kIHRpbWVzdGFtcCBpbiB0aGUgcW9zIGV2ZW50LiBTZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctcW9zIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19xb3PCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9uZXdfcW9zKCk8L2NvZGU+PC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlmZmVyZW50IFFvUyB2YWx1ZXMuPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVzdGFtcDwvY29kZT48L2VtPgotIHdpbGwgYmUgYWRqdXN0ZWQgZm9yIGFueSBwYWQgb2Zmc2V0cyBvZiBwYWRzIGl0IHdhcyBwYXNzaW5nIHRocm91Z2guPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXFvcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBldmVudCB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgUW9TIHR5cGUgaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9wb3J0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgcHJvcG9ydGlvbiBpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRpZmY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBkaWZmIGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgdGltZXN0YW1wIGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zZWVrIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfc2Vla8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19zZWVrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHJhdGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0U2Vla0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTZWVrRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RhcnRfdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+IHN0b3BfdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGxvY2F0ZSBhIG5ldyBzZWVrIGV2ZW50IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuPC9wPgotPHA+VGhlIHNlZWsgZXZlbnQgY29uZmlndXJlcyBwbGF5YmFjayBvZiB0aGUgcGlwZWxpbmUgYmV0d2VlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPgotCi1hdCB0aGUgc3BlZWQgZ2l2ZW4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT4KLSwgYWxzbyBjYWxsZWQgYSBwbGF5YmFjayBzZWdtZW50LgotVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPgotIHZhbHVlcyBhcmUgZXhwcmVzc2VkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5BIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+Ci0gb2YgMS4wIG1lYW5zIG5vcm1hbCBwbGF5YmFjayByYXRlLCAyLjAgbWVhbnMgZG91YmxlIHNwZWVkLgotTmVnYXRpdmVzIHZhbHVlcyBtZWFucyBiYWNrd2FyZHMgcGxheWJhY2suIEEgdmFsdWUgb2YgMC4wIGZvciB0aGUKLXJhdGUgaXMgbm90IGFsbG93ZWQgYW5kIHNob3VsZCBiZSBhY2NvbXBsaXNoZWQgaW5zdGVhZCBieSBQQVVTSU5HIHRoZQotcGlwZWxpbmUuPC9wPgotPHA+QSBwaXBlbGluZSBoYXMgYSBkZWZhdWx0IHBsYXliYWNrIHNlZ21lbnQgY29uZmlndXJlZCB3aXRoIGEgc3RhcnQKLXBvc2l0aW9uIG9mIDAsIGEgc3RvcCBwb3NpdGlvbiBvZiAtMSBhbmQgYSByYXRlIG9mIDEuMC4gVGhlIGN1cnJlbnRseQotY29uZmlndXJlZCBwbGF5YmFjayBzZWdtZW50IGNhbiBiZSBxdWVyaWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVNFR01FTlQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9RVUVSWV9TRUdNRU5UPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF90eXBlPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wX3R5cGU8L2NvZGU+PC9lbT4KLSBzcGVjaWZ5IGhvdyB0byBhZGp1c3QgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIAotc3RhcnQgYW5kIHN0b3AgZmllbGRzIGluIHBsYXliYWNrIHNlZ21lbnQuIEFkanVzdG1lbnRzIGNhbiBiZSBtYWRlIHJlbGF0aXZlCi1vciBhYnNvbHV0ZSB0byB0aGUgbGFzdCBjb25maWd1cmVkIHZhbHVlcy4gQSB0eXBlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLVRZUEUtTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NFRUtfVFlQRV9OT05FPC9zcGFuPjwvYT4KLW1lYW5zIHRoYXQgdGhlIHBvc2l0aW9uIHNob3VsZCBub3QgYmUgdXBkYXRlZC48L3A+Ci08cD5XaGVuIHRoZSByYXRlIGlzIHBvc2l0aXZlIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4KLSBoYXMgYmVlbiB1cGRhdGVkLCBwbGF5YmFjayB3aWxsIHN0YXJ0Ci1mcm9tIHRoZSBuZXdseSBjb25maWd1cmVkIHN0YXJ0IHBvc2l0aW9uLiA8L3A+Ci08cD5Gb3IgbmVnYXRpdmUgcmF0ZXMsIHBsYXliYWNrIHdpbGwgc3RhcnQgZnJvbSB0aGUgbmV3bHkgY29uZmlndXJlZCBzdG9wCi1wb3NpdGlvbiAoaWYgYW55KS4gSWYgdGhlIHN0b3AgcG9zaXRpb24gaXMgdXBkYXRlZCwgaXQgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbQotLTEgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4pIGZvciBuZWdhdGl2ZSByYXRlcy48L3A+Ci08cD5JdCBpcyBub3QgcG9zc2libGUgdG8gc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiwgdG8gZG8KLXRoaXMsIFBBVVNFIHRoZSBwaXBlbGluZSwgcXVlcnkgdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVBPU0lUSU9OOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUVVFUllfUE9TSVRJT048L3NwYW4+PC9hPiBhbmQgdXBkYXRlIHRoZSBwbGF5YmFjayBzZWdtZW50IGN1cnJlbnQgcG9zaXRpb24gd2l0aCBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLVNFVDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NFRUtfVFlQRV9TRVQ8L3NwYW4+PC9hPiB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXNlZWsucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBuZXcgcGxheWJhY2sgcmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgZm9ybWF0IG9mIHRoZSBzZWVrIHZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBvcHRpb25hbCBzZWVrIGZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXJ0X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgdHlwZSBhbmQgZmxhZ3MgZm9yIHRoZSBuZXcgc3RhcnQgcG9zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgdmFsdWUgb2YgdGhlIG5ldyBzdGFydCBwb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdG9wX3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgdHlwZSBhbmQgZmxhZ3MgZm9yIHRoZSBuZXcgc3RvcCBwb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdG9wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHZhbHVlIG9mIHRoZSBuZXcgc3RvcCBwb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zZWVrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgc2VlayBldmVudC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXNlZWsiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX3NlZWvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfcGFyc2Vfc2VlayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0U2Vla0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTZWVrRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrRmxhZ3M8L3NwYW4+PC9hPiAqZmxhZ3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gKnN0YXJ0X3R5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+ICpzdG9wX3R5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0b3A8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2VzIGEgc2VlayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBhbmQgc3RvcmVzIHRoZSByZXN1bHRzIGluIHRoZSBnaXZlbiByZXN1bHQgbG9jYXRpb25zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1zZWVrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzZWVrIGV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcmF0ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBzdHJlYW0gZm9ybWF0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0U2Vla0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTZWVrRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrRmxhZ3M8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXJ0X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0U2Vla1R5cGUiIHRpdGxlPSJlbnVtIEdzdFNlZWtUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2Vla1R5cGU8L3NwYW4+PC9hPiBvZiB0aGUgc3RhcnQgcG9zaXRpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBzdGFydCBwb3NpdGlvbiBleHByZXNzZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RvcF90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIHN0b3AgcG9zaXRpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdG9wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHN0b3AgcG9zaXRpb24gZXhwcmVzc2VkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctbmF2aWdhdGlvbiI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X25hdmlnYXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IG5hdmlnYXRpb24gZXZlbnQgZnJvbSB0aGUgZ2l2ZW4gZGVzY3JpcHRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1uYXZpZ2F0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gZGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LiBUaGUgZXZlbnQgd2lsbCB0YWtlCi1vd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1uYXZpZ2F0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctbGF0ZW5jeSI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X2xhdGVuY3nCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfbGF0ZW5jeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGxhdGVuY3k8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGxhdGVuY3kgZXZlbnQuIFRoZSBldmVudCBpcyBzZW50IHVwc3RyZWFtIGZyb20gdGhlIHNpbmtzIGFuZAotbm90aWZpZXMgZWxlbWVudHMgdGhhdCB0aGV5IHNob3VsZCBhZGQgYW4gYWRkaXRpb25hbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGF0ZW5jeTwvY29kZT48L2VtPgotIHRvIHRoZQotcnVubmluZyB0aW1lIGJlZm9yZSBzeW5jaHJvbmlzaW5nIGFnYWluc3QgdGhlIGNsb2NrLjwvcD4KLTxwPlRoZSBsYXRlbmN5IGlzIG1vc3RseSB1c2VkIGluIGxpdmUgc2lua3MgYW5kIGlzIGFsd2F5cyBleHByZXNzZWQgaW4KLXRoZSB0aW1lIGZvcm1hdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWxhdGVuY3kucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxhdGVuY3k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IGxhdGVuY3kgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWxhdGVuY3kucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLWxhdGVuY3kiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX2xhdGVuY3nCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKmxhdGVuY3k8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBsYXRlbmN5IGluIHRoZSBsYXRlbmN5IGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1sYXRlbmN5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGV2ZW50IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxhdGVuY3k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBsYXRlbmN5IGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zdGVwIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfc3RlcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19zdGVwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBhbW91bnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcmF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZsdXNoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBzdGVwIGV2ZW50LiBUaGUgcHVycG9zZSBvZiB0aGUgc3RlcCBldmVudCBpcyB0byBpbnN0cnVjdCBhIHNpbmsKLXRvIHNraXAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFtb3VudDwvY29kZT48L2VtPgotIChleHByZXNzZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPgotKSBvZiBtZWRpYS4gSXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50Ci1zdGVwcGluZyB0aHJvdWdoIHRoZSB2aWRlbyBmcmFtZSBieSBmcmFtZSBvciBmb3IgZG9pbmcgZmFzdCB0cmljayBtb2Rlcy48L3A+Ci08cD5BIHJhdGUgb2YgJmx0Oz0gMC4wIGlzIG5vdCBhbGxvd2VkLiBQYXVzZSB0aGUgcGlwZWxpbmUsIGZvciB0aGUgZWZmZWN0IG9mIHJhdGUKLT0gMC4wIG9yIGZpcnN0IHJldmVyc2UgdGhlIGRpcmVjdGlvbiBvZiBwbGF5YmFjayB1c2luZyBhIHNlZWsgZXZlbnQgdG8gZ2V0Ci10aGUgc2FtZSBlZmZlY3QgYXMgcmF0ZSAmbHQ7IDAuMC48L3A+Ci08cD5UaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoPC9jb2RlPjwvZW0+Ci0gZmxhZyB3aWxsIGNsZWFyIGFueSBwZW5kaW5nIGRhdGEgaW4gdGhlIHBpcGVsaW5lIGJlZm9yZSBzdGFydGluZwotdGhlIHN0ZXAgb3BlcmF0aW9uLjwvcD4KLTxwPlRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+Ci0gZmxhZyBpbnN0cnVjdHMgdGhlIHBpcGVsaW5lIHRoYXQgdGhpcyBzdGVwIG9wZXJhdGlvbiBpcwotcGFydCBvZiBhIGxhcmdlciBzdGVwIG9wZXJhdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXN0ZXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZvcm1hdCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YW1vdW50PC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YW1vdW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGFtb3VudCBvZiBkYXRhIHRvIHN0ZXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGVwIHJhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmx1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mbHVzaGluZyBzdGVwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcm1lZGlhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbnRlcm1lZGlhdGUgc3RlcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc3RlcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2Utc3RlcCI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2Vfc3RlcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ldmVudF9wYXJzZV9zdGVwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICphbW91bnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcmF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmZsdXNoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqaW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIHRoZSBzdGVwIGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1zdGVwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGV2ZW50IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGZvcm1hdCBpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YW1vdW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgYW1vdW50IGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmF0ZSBpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmx1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBmbHVzaCBib29sZWFuIGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcm1lZGlhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBpbnRlcm1lZGlhdGUKLWJvb2xlYW4gaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc2luay1tZXNzYWdlIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfc2lua19tZXNzYWdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi1nc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbXNnPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBzaW5rLW1lc3NhZ2UgZXZlbnQuIFRoZSBwdXJwb3NlIG9mIHRoZSBzaW5rLW1lc3NhZ2UgZXZlbnQgaXMKLXRvIGluc3RydWN0IGEgc2luayB0byBwb3N0IHRoZSBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgZXZlbnQgc3luY2hyb25pemVkCi13aXRoIHRoZSBzdHJlYW0uPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLSBpcyB1c2VkIHRvIHN0b3JlIG11bHRpcGxlIHN0aWNreSBldmVudHMgb24gb25lIHBhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXNpbmstbWVzc2FnZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBuYW1lIGZvciB0aGUgZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bXNnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiB0byBiZSBwb3N0ZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zaW5rLW1lc3NhZ2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXNpbmstbWVzc2FnZSI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqKm1zZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSB0aGUgc2luay1tZXNzYWdlIGV2ZW50LiBVbnJlZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXNnPC9jb2RlPjwvZW0+Ci0gYWZ0ZXIgdXNhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXNpbmstbWVzc2FnZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBldmVudCB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tc2c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctcmVjb25maWd1cmUiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgcmVjb25maWd1cmUgZXZlbnQuIFRoZSBwdXJwb3NlIG9mIHRoZSByZWNvbmZpZ3VyZSBldmVudCBpcwotdG8gdHJhdmVsIHVwc3RyZWFtIGFuZCBtYWtlIGVsZW1lbnRzIHJlbmVnb3RpYXRlIHRoZWlyIGNhcHMgb3IgcmVjb25maWd1cmUKLXRoZWlyIGJ1ZmZlciBwb29scy4gVGhpcyBpcyB1c2VmdWwgd2hlbiBjaGFuZ2luZyBwcm9wZXJ0aWVzIG9uIGVsZW1lbnRzCi1vciBjaGFuZ2luZyB0aGUgdG9wb2xvZ3kgb2YgdGhlIHBpcGVsaW5lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctcmVjb25maWd1cmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1jYXBzIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfY2Fwc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IENBUFMgZXZlbnQgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0uIFRoZSBjYXBzIGV2ZW50IGNhbiBvbmx5IHRyYXZlbCBkb3duc3RyZWFtCi1zeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cgYW5kIGNvbnRhaW5zIHRoZSBmb3JtYXQgb2YgdGhlIGJ1ZmZlcnMKLXRoYXQgd2lsbCBmb2xsb3cgYWZ0ZXIgdGhlIGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IENBUFMgZXZlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1jYXBzIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICoqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIGNhcHMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLS4gVGhlIGNhcHMgcmVtYWlucyB2YWxpZCBhcyBsb25nIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIHJlbWFpbnMKLXZhbGlkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGV2ZW50IHRvIHBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHRvIHRoZSBjYXBzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy10b2MiPjwvYT48aDM+Z3N0X2V2ZW50X25ld190b2PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfdG9jICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gKnRvYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gdXBkYXRlZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZW5lcmF0ZSBhIFRPQyBldmVudCBmcm9tIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dG9jPC9jb2RlPjwvZW0+Ci0uIFRoZSBwdXJwb3NlIG9mIHRoZSBUT0MgZXZlbnQgaXMgdG8KLWluZm9ybSBlbGVtZW50cyB0aGF0IHNvbWUga2luZCBvZiB0aGUgVE9DIHdhcyBmb3VuZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXRvYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50b2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gc3RydWN0dXJlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXBkYXRlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPndoZXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRvYzwvY29kZT48L2VtPgotd2FzIHVwZGF0ZWQgb3Igbm90LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy10b2MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXRvYyI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2VfdG9jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX3RvYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiAqKnRvYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqdXBkYXRlZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSBhIFRPQyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50b2M8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVwZGF0ZWQ8L2NvZGU+PC9lbT4KLSBsb2NhdGlvbnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXRvYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgVE9DIGV2ZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50b2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cGRhdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gc3RvcmUgVE9DIHVwZGF0ZWQgZmxhZy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctdG9jLXNlbGVjdCI+PC9hPjxoMz5nc3RfZXZlbnRfbmV3X3RvY19zZWxlY3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9ldmVudF9uZXdfdG9jX3NlbGVjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1aWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2VuZXJhdGUgYSBUT0Mgc2VsZWN0IGV2ZW50IHdpdGggdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51aWQ8L2NvZGU+PC9lbT4KLS4gVGhlIHB1cnBvc2Ugb2YgdGhlCi1UT0Mgc2VsZWN0IGV2ZW50IGlzIHRvIHN0YXJ0IHBsYXliYWNrIGJhc2VkIG9uIHRoZSBUT0MncyBlbnRyeSB3aXRoIHRoZQotZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVpZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctdG9jLXNlbGVjdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dWlkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VUlEIGluIHRoZSBUT0MgdG8gc3RhcnQgcGxheWJhY2sgZnJvbS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXRvYy1zZWxlY3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXRvYy1zZWxlY3QiPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfcGFyc2VfdG9jX3NlbGVjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKip1aWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2UgYSBUT0Mgc2VsZWN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVpZDwvY29kZT48L2VtPgotIGxvY2F0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS10b2Mtc2VsZWN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBUT0Mgc2VsZWN0IGV2ZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gc3RvcmFnZSBmb3IgdGhlIHNlbGVjdGlvbiBVSUQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc2VnbWVudC1kb25lIj48L2E+PGgzPmdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi1nc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gcG9zaXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IHNlZ21lbnQtZG9uZSBldmVudC4gVGhpcyBldmVudCBpcyBzZW50IGJ5IGVsZW1lbnRzIHRoYXQKLWZpbmlzaCBwbGF5YmFjayBvZiBhIHNlZ21lbnQgYXMgYSByZXN1bHQgb2YgYSBzZWdtZW50IHNlZWsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zZWdtZW50LWRvbmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGZvcm1hdCBvZiB0aGUgcG9zaXRpb24gYmVpbmcgZG9uZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBwb3NpdGlvbiBvZiB0aGUgc2VnbWVudCBiZWluZyBkb25lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXNlZ21lbnQtZG9uZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2Utc2VnbWVudC1kb25lIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9zZWdtZW50X2RvbmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfcGFyc2Vfc2VnbWVudF9kb25lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnBvc2l0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3RzIHRoZSBwb3NpdGlvbiBhbmQgZm9ybWF0IGZyb20gdGhlIHNlZ21lbnQgZG9uZSBtZXNzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1zZWdtZW50LWRvbmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX0VWRU5UX1NFR01FTlRfRE9ORS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBwb3NpdGlvbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXByb3RlY3Rpb24iPjwvYT48aDM+Z3N0X2V2ZW50X25ld19wcm90ZWN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFdmVudDwvc3Bhbj48L2E+wqAqCi1nc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3lzdGVtX2lkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3JpZ2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgZXZlbnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKLXByb3RlY3Rpb24gc3lzdGVtICh1bmlxdWVseSBpZGVudGlmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zeXN0ZW1faWQ8L2NvZGU+PC9lbT4KLSksIGJ5IHdoaWNoIHRoYXQKLXByb3RlY3Rpb24gc3lzdGVtIGNhbiBhY3F1aXJlIGtleShzKSB0byBkZWNyeXB0IGEgcHJvdGVjdGVkIHN0cmVhbS48L3A+Ci08cD5JbiBvcmRlciBmb3IgYSBkZWNyeXB0aW9uIGVsZW1lbnQgdG8gZGVjcnlwdCBtZWRpYQotcHJvdGVjdGVkIHVzaW5nIGEgc3BlY2lmaWMgc3lzdGVtLCBpdCBmaXJzdCBuZWVkcyBhbGwgdGhlCi1wcm90ZWN0aW9uIHN5c3RlbSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gYWNxdWlyZSB0aGUgZGVjcnlwdGlvbgota2V5KHMpIGZvciB0aGF0IHN0cmVhbS4gVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUgZW5hYmxlIHRoaXMgaW5mb3JtYXRpb24KLXRvIGJlIHBhc3NlZCBpbiBldmVudHMgZnJvbSBlbGVtZW50cyB0aGF0IGV4dHJhY3QgaXQKLShlLmcuLCBJU09CTUZGIGRlbXV4ZXJzLCBNUEVHIERBU0ggZGVtdXhlcnMpIHRvIHByb3RlY3Rpb24gZGVjcnlwdGVyCi1lbGVtZW50cyB0aGF0IHVzZSBpdC48L3A+Ci08cD5FdmVudHMgY29udGFpbmluZyBwcm90ZWN0aW9uIHN5c3RlbSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhcmUgY3JlYXRlZCB1c2luZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1wcm90ZWN0aW9uIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19wcm90ZWN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9ldmVudF9uZXdfcHJvdGVjdGlvbjwvc3Bhbj48L2E+LCBhbmQgdGhleSBjYW4gYmUgcGFyc2VkIGJ5IGRvd25zdHJlYW0gZWxlbWVudHMKLXVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1wcm90ZWN0aW9uIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb248L3NwYW4+PC9hPi48L3A+Ci08cD5JbiBDb21tb24gRW5jcnlwdGlvbiwgcHJvdGVjdGlvbiBzeXN0ZW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gbWF5IGJlIGxvY2F0ZWQKLXdpdGhpbiBJU09CTUZGIGZpbGVzLCBib3RoIGluIG1vdmllIChtb292KSBib3hlcyBhbmQgbW92aWUgZnJhZ21lbnQgKG1vb2YpCi1ib3hlczsgaXQgbWF5IGFsc28gYmUgY29udGFpbmVkIGluIENvbnRlbnRQcm90ZWN0aW9uIGVsZW1lbnRzIHdpdGhpbiBNUEVHCi1EQVNIIE1QRHMuIFRoZSBldmVudHMgY3JlYXRlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXByb3RlY3Rpb24iIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X2V2ZW50X25ld19wcm90ZWN0aW9uPC9zcGFuPjwvYT4gY29udGFpbiBkYXRhCi1pZGVudGlmeWluZyBmcm9tIHdoaWNoIG9mIHRoZXNlIGxvY2F0aW9ucyB0aGUgZW5jYXBzdWxhdGVkIHByb3RlY3Rpb24gc3lzdGVtCi1zcGVjaWZpYyBpbmZvcm1hdGlvbiBvcmlnaW5hdGVkLiBUaGlzIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCBhcwotc29tZSBwcm90ZWN0aW9uIHN5c3RlbXMgdXNlIGRpZmZlcmVudCBlbmNvZGluZ3MgZGVwZW5kaW5nIHVwb24gd2hlcmUgdGhlCi1pbmZvcm1hdGlvbiBvcmlnaW5hdGVzLjwvcD4KLTxwPlRoZSBldmVudHMgcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1wcm90ZWN0aW9uIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19wcm90ZWN0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24oKTwvY29kZT48L2E+IGFyZSBpbXBsZW1lbnRlZAotaW4gc3VjaCBhIHdheSBhcyB0byBlbnN1cmUgdGhhdCB0aGUgbW9zdCByZWNlbnRseS1wdXNoZWQgcHJvdGVjdGlvbiBpbmZvCi1ldmVudCBvZiBhIHBhcnRpY3VsYXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9yaWdpbjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3lzdGVtX2lkPC9jb2RlPjwvZW0+Ci0gd2lsbAotYmUgc3R1Y2sgdG8gdGhlIG91dHB1dCBwYWQgb2YgdGhlIHNlbmRpbmcgZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXByb3RlY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3lzdGVtX2lkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgc3RyaW5nIGhvbGRpbmcgYSBVVUlEIHRoYXQgdW5pcXVlbHkKLWlkZW50aWZpZXMgYSBwcm90ZWN0aW9uIHN5c3RlbS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBob2xkaW5nIHByb3RlY3Rpb24gc3lzdGVtIHNwZWNpZmljCi1pbmZvcm1hdGlvbi4gVGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgYnVmZmVyIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgb25lLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b3JpZ2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJpbmcgaW5kaWNhdGluZyB3aGVyZSB0aGUgcHJvdGVjdGlvbgotaW5mb3JtYXRpb24gY2FycmllZCBpbiB0aGUgZXZlbnQgd2FzIGV4dHJhY3RlZCBmcm9tLiBUaGUgYWxsb3dlZCB2YWx1ZXMKLW9mIHRoaXMgc3RyaW5nIHdpbGwgZGVwZW5kIHVwb24gdGhlIHByb3RlY3Rpb24gc2NoZW1lLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1wcm90ZWN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtUFJPVEVDVElPTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX1BST1RFQ1RJT048L3NwYW4+PC9hPiBldmVudCwgaWYgc3VjY2Vzc2Z1bDsgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci1pZiB1bnN1Y2Nlc3NmdWwuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1wcm90ZWN0aW9uIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqc3lzdGVtX2lkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqb3JpZ2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlcyBhbiBldmVudCBjb250YWluaW5nIHByb3RlY3Rpb24gc3lzdGVtIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBzdG9yZXMKLXRoZSByZXN1bHRzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zeXN0ZW1faWQ8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9yaWdpbjwvY29kZT48L2VtPgotLiBUaGUgZGF0YSBzdG9yZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN5c3RlbV9pZDwvY29kZT48L2VtPgotLAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9yaWdpbjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotIGFyZSB2YWxpZCB1bnRpbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBpcyByZWxlYXNlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2UtcHJvdGVjdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVBST1RFQ1RJT046Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9QUk9URUNUSU9OPC9zcGFuPjwvYT4gZXZlbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN5c3RlbV9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIHN0b3JlIHRoZSBVVUlECi1zdHJpbmcgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYSBjb250ZW50IHByb3RlY3Rpb24gc3lzdGVtLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gc3RvcmUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPgotaG9sZGluZyBwcm90ZWN0aW9uIHN5c3RlbSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b3JpZ2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gc3RvcmUgYSB2YWx1ZSB0aGF0Ci1pbmRpY2F0ZXMgd2hlcmUgdGhlIHByb3RlY3Rpb24gaW5mb3JtYXRpb24gY2FycmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLXdhcyBleHRyYWN0ZWQKLWZyb20uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc2VsZWN0LXN0cmVhbXMiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKnN0cmVhbXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWxsb2NhdGUgYSBuZXcgc2VsZWN0LXN0cmVhbXMgZXZlbnQuPC9wPgotPHA+VGhlIHNlbGVjdC1zdHJlYW1zIGV2ZW50IHJlcXVlc3RzIHRoZSBzcGVjaWZpZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbXM8L2NvZGU+PC9lbT4KLSB0byBiZSBhY3RpdmF0ZWQuPC9wPgotPHA+VGhlIGxpc3Qgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbXM8L2NvZGU+PC9lbT4KLSBjb3JyZXNwb25kcyB0byB0aGUgIlN0cmVhbSBJRCIgb2YgZWFjaCBzdHJlYW0gdG8gYmUKLWFjdGl2YXRlZC4gVGhvc2UgSUQgY2FuIGJlIG9idGFpbmVkIHZpYSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gb2JqZWN0cyBwcmVzZW50Ci1pbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU1RSRUFNLVNUQVJUOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfU1RSRUFNX1NUQVJUPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TVFJFQU0tQ09MTEVDVElPTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX1NUUkVBTV9DT0xMRUNUSU9OPC9zcGFuPjwvYT4gb3IgCi08c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NTQUdFX1NUUkVBTV9DT0xMRUNUSU9OPC9zcGFuPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXNlbGVjdC1zdHJlYW1zLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW1zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBsaXN0IG9mIHN0cmVhbXMgdG8KLWFjdGl2YXRlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IGdjaGFyXVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zZWxlY3Qtc3RyZWFtcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IHNlbGVjdC1zdHJlYW1zIGV2ZW50LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1wYXJzZS1zZWxlY3Qtc3RyZWFtcyI+PC9hPjxoMz5nc3RfZXZlbnRfcGFyc2Vfc2VsZWN0X3N0cmVhbXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZXZlbnRfcGFyc2Vfc2VsZWN0X3N0cmVhbXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICoqc3RyZWFtczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSB0aGUgU0VMRUNUX1NUUkVBTVMgZXZlbnQgYW5kIHJldHJpZXZlIHRoZSBjb250YWluZWQgc3RyZWFtcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2Utc2VsZWN0LXN0cmVhbXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgZXZlbnQgdG8gcGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyZWFtczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc3RyZWFtcy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBnY2hhcl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc3RyZWFtLWNvbGxlY3Rpb24iPjwvYT48aDM+Z3N0X2V2ZW50X25ld19zdHJlYW1fY29sbGVjdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19zdHJlYW1fY29sbGVjdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPiAqY29sbGVjdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgU1RSRUFNX0NPTExFQ1RJT04gZXZlbnQuIFRoZSBzdHJlYW0gY29sbGVjdGlvbiBldmVudCBjYW4gb25seQotdHJhdmVsIGRvd25zdHJlYW0gc3luY2hyb25pemVkIHdpdGggdGhlIGJ1ZmZlciBmbG93LjwvcD4KLTxwPlNvdXJjZSBlbGVtZW50cywgZGVtdXhlcnMgYW5kIG90aGVyIGVsZW1lbnRzIHRoYXQgbWFuYWdlIGNvbGxlY3Rpb25zCi1vZiBzdHJlYW1zIGFuZCBwb3N0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPiBtZXNzYWdlcyBvbiB0aGUgYnVzIGFsc28gc2VuZAotdGhpcyBldmVudCBkb3duc3RyZWFtIG9uIGVhY2ggcGFkIGludm9sdmVkIGluIHRoZSBjb2xsZWN0aW9uLCBzbyB0aGF0Ci1hY3RpdmF0aW9uIG9mIGEgbmV3IGNvbGxlY3Rpb24gY2FuIGJlIHRyYWNrZWQgdGhyb3VnaCB0aGUgZG93bnN0cmVhbQotZGF0YSBmbG93LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc3RyZWFtLWNvbGxlY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbGxlY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BY3RpdmUgY29sbGVjdGlvbiBmb3IgdGhpcyBkYXRhIGZsb3c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtbmV3LXN0cmVhbS1jb2xsZWN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBTVFJFQU1fQ09MTEVDVElPTiBldmVudC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXZlbnQtcGFyc2Utc3RyZWFtLWNvbGxlY3Rpb24iPjwvYT48aDM+Z3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+ICoqY29sbGVjdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+IGZyb20gU1RSRUFNX0NPTExFQ1RJT04gZXZlbnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbS1jb2xsZWN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJlYW0tY29sbGVjdGlvbiBldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb2xsZWN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gc3RvcmUgdGhlIGNvbGxlY3Rpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc3RyZWFtLWdyb3VwLWRvbmUiPjwvYT48aDM+Z3N0X2V2ZW50X25ld19zdHJlYW1fZ3JvdXBfZG9uZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2V2ZW50X25ld19zdHJlYW1fZ3JvdXBfZG9uZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGdyb3VwX2lkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBTdHJlYW0gR3JvdXAgRG9uZSBldmVudC4gVGhlIHN0cmVhbS1ncm91cC1kb25lIGV2ZW50IGNhbgotb25seSB0cmF2ZWwgZG93bnN0cmVhbSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cuIEVsZW1lbnRzCi10aGF0IHJlY2VpdmUgdGhlIGV2ZW50IG9uIGEgcGFkIHNob3VsZCBoYW5kbGUgaXQgbW9zdGx5IGxpa2UgRU9TLAotYW5kIGVtaXQgYW55IGRhdGEgb3IgcGVuZGluZyBidWZmZXJzIHRoYXQgd291bGQgZGVwZW5kIG9uIG1vcmUgZGF0YQotYXJyaXZpbmcgYW5kIHVuYmxvY2ssIHNpbmNlIHRoZXJlIHdvbid0IGJlIGFueSBtb3JlIGRhdGEuPC9wPgotPHA+VGhpcyBldmVudCBpcyBmb2xsb3dlZCBieSBFT1MgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCBhbmQgaXMKLWdlbmVyYWxseSB1c2VkIHdoZW4gc3dpdGNoaW5nIHBhZHMgLSB0byB1bmJsb2NrIGRvd25zdHJlYW0gc28gdGhhdAotbmV3IHBhZHMgY2FuIGJlIGV4cG9zZWQgYmVmb3JlIHNlbmRpbmcgRU9TIG9uIHRoZSBleGlzdGluZyBwYWRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ldmVudC1uZXctc3RyZWFtLWdyb3VwLWRvbmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdyb3VwX2lkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdyb3VwIGlkIG9mIHRoZSBzdHJlYW0gZ3JvdXAgd2hpY2ggaXMgZW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LW5ldy1zdHJlYW0tZ3JvdXAtZG9uZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgc3RyZWFtLWdyb3VwLWRvbmUgZXZlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbS1ncm91cC1kb25lIj48L2E+PGgzPmdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICpncm91cF9pZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSBhIHN0cmVhbS1ncm91cC1kb25lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBnaXZlbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdyb3VwX2lkPC9jb2RlPjwvZW0+Ci0gbG9jYXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbS1ncm91cC1kb25lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJlYW0tZ3JvdXAtZG9uZSBldmVudC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Z3JvdXBfaWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRkcmVzcyBvZiB2YXJpYWJsZSB0byBzdG9yZSB0aGUgZ3JvdXAgaWQgaW50by4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RFdmVudC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RXZlbnQtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RFdmVudDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEV2ZW50IHsKLSAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKLQotICBHc3RFdmVudFR5cGUgIHR5cGU7Ci0gIGd1aW50NjQgICAgICAgdGltZXN0YW1wOwotICBndWludDMyICAgICAgIHNlcW51bTsKLX07Ci08L3ByZT4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RXZlbnQubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RXZlbnQtc3RydWN0Lm1pbmktb2JqZWN0Ij48L2E+bWluaV9vYmplY3Q8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXJlbnQgc3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RXZlbnQtc3RydWN0LnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPiBvZiB0aGUgZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEV2ZW50LXN0cnVjdC50aW1lc3RhbXAiPjwvYT50aW1lc3RhbXA8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1lc3RhbXAgb2YgdGhlIGV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RFdmVudC1zdHJ1Y3Quc2VxbnVtIj48L2E+c2VxbnVtPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RXZlbnRUeXBlRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RFdmVudFR5cGVGbGFnczwvaDM+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGVGbGFnczwvc3Bhbj48L2E+IGluZGljYXRlIHRoZSBhc3BlY3RzIG9mIHRoZSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudFR5cGU8L3NwYW4+PC9hPgotdmFsdWVzLiBZb3UgY2FuIGdldCB0aGUgdHlwZSBmbGFncyBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gd2l0aCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC10eXBlLWdldC1mbGFncyIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9mbGFnc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzKCk8L2NvZGU+PC9hPiBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RFdmVudFR5cGVGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1UWVBFLVVQU1RSRUFNOkNBUFMiPjwvYT5HU1RfRVZFTlRfVFlQRV9VUFNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5TZXQgaWYgdGhlIGV2ZW50IGNhbiB0cmF2ZWwgdXBzdHJlYW0uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1UWVBFLURPV05TVFJFQU06Q0FQUyI+PC9hPkdTVF9FVkVOVF9UWVBFX0RPV05TVFJFQU08L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2V0IGlmIHRoZSBldmVudCBjYW4gdHJhdmVsIGRvd25zdHJlYW0uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1UWVBFLVNFUklBTElaRUQ6Q0FQUyI+PC9hPkdTVF9FVkVOVF9UWVBFX1NFUklBTElaRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2V0IGlmIHRoZSBldmVudCBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3cuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1UWVBFLVNUSUNLWTpDQVBTIj48L2E+R1NUX0VWRU5UX1RZUEVfU1RJQ0tZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlNldCBpZiB0aGUgZXZlbnQgaXMgc3RpY2t5IG9uIHRoZSBwYWRzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtVFlQRS1TVElDS1ktTVVMVEk6Q0FQUyI+PC9hPkdTVF9FVkVOVF9UWVBFX1NUSUNLWV9NVUxUSTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5NdWx0aXBsZSBzdGlja3kgZXZlbnRzIGNhbiBiZSBvbiBhIHBhZCwgZWFjaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllZCBieSB0aGUgZXZlbnQgbmFtZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FVkVOVC1UWVBFLUJPVEg6Q0FQUyI+PC9hPjxoMz5HU1RfRVZFTlRfVFlQRV9CT1RIPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9FVkVOVF9UWVBFX0JPVEg8L3ByZT4KLTxwPlRoZSBzYW1lIHRoaW5nIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLVVQU1RSRUFNOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfVFlQRV9VUFNUUkVBTTwvc3Bhbj48L2E+IHwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtRE9XTlNUUkVBTTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX1RZUEVfRE9XTlNUUkVBTTwvc3Bhbj48L2E+LjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RXZlbnRUeXBlIj48L2E+PGgzPmVudW0gR3N0RXZlbnRUeXBlPC9oMz4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gbGlzdHMgdGhlIHN0YW5kYXJkIGV2ZW50IHR5cGVzIHRoYXQgY2FuIGJlIHNlbnQgaW4gYSBwaXBlbGluZS48L3A+Ci08cD5UaGUgY3VzdG9tIGV2ZW50IHR5cGVzIGNhbiBiZSB1c2VkIGZvciBwcml2YXRlIG1lc3NhZ2VzIGJldHdlZW4gZWxlbWVudHMKLXRoYXQgY2FuJ3QgYmUgZXhwcmVzc2VkIHVzaW5nIG5vcm1hbAotR1N0cmVhbWVyIGJ1ZmZlciBwYXNzaW5nIHNlbWFudGljcy4gQ3VzdG9tIGV2ZW50cyBjYXJyeSBhbiBhcmJpdHJhcnkKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LgotU3BlY2lmaWMgY3VzdG9tIGV2ZW50cyBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEV2ZW50VHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1VTktOT1dOOkNBUFMiPjwvYT5HU1RfRVZFTlRfVU5LTk9XTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51bmtub3duIGV2ZW50LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtRkxVU0gtU1RBUlQ6Q0FQUyI+PC9hPkdTVF9FVkVOVF9GTFVTSF9TVEFSVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5TdGFydCBhIGZsdXNoIG9wZXJhdGlvbi4gVGhpcyBldmVudCBjbGVhcnMgYWxsIGRhdGEKLSAgICAgICAgICAgICAgICBmcm9tIHRoZSBwaXBlbGluZSBhbmQgdW5ibG9jayBhbGwgc3RyZWFtaW5nIHRocmVhZHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1GTFVTSC1TVE9QOkNBUFMiPjwvYT5HU1RfRVZFTlRfRkxVU0hfU1RPUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5TdG9wIGEgZmx1c2ggb3BlcmF0aW9uLiBUaGlzIGV2ZW50IHJlc2V0cyB0aGUKLSAgICAgICAgICAgICAgICBydW5uaW5nLXRpbWUgb2YgdGhlIHBpcGVsaW5lLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtU1RSRUFNLVNUQVJUOkNBUFMiPjwvYT5HU1RfRVZFTlRfU1RSRUFNX1NUQVJUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkV2ZW50IHRvIG1hcmsgdGhlIHN0YXJ0IG9mIGEgbmV3IHN0cmVhbS4gU2VudCBiZWZvcmUgYW55Ci0gICAgICAgICAgICAgICAgb3RoZXIgc2VyaWFsaXplZCBldmVudCBhbmQgb25seSBzZW50IGF0IHRoZSBzdGFydCBvZiBhIG5ldyBzdHJlYW0sCi0gICAgICAgICAgICAgICAgbm90IGFmdGVyIGZsdXNoaW5nIHNlZWtzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtQ0FQUyI+PC9hPkdTVF9FVkVOVF9DQVBTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGV2ZW50LiBOb3RpZnkgdGhlIHBhZCBvZiBhIG5ldyBtZWRpYSB0eXBlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtU0VHTUVOVDpDQVBTIj48L2E+R1NUX0VWRU5UX1NFR01FTlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSBuZXcgbWVkaWEgc2VnbWVudCBmb2xsb3dzIGluIHRoZSBkYXRhZmxvdy4gVGhlCi0gICAgICAgICAgICAgICAgc2VnbWVudCBldmVudHMgY29udGFpbnMgaW5mb3JtYXRpb24gZm9yIGNsaXBwaW5nIGJ1ZmZlcnMgYW5kCi0gICAgICAgICAgICAgICAgY29udmVydGluZyBidWZmZXIgdGltZXN0YW1wcyB0byBydW5uaW5nLXRpbWUgYW5kCi0gICAgICAgICAgICAgICAgc3RyZWFtLXRpbWUuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1TVFJFQU0tQ09MTEVDVElPTjpDQVBTIj48L2E+R1NUX0VWRU5UX1NUUkVBTV9DT0xMRUNUSU9OPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPiBpcyBhdmFpbGFibGUgKFNpbmNlIDEuMTApPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1UQUc6Q0FQUyI+PC9hPkdTVF9FVkVOVF9UQUc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSBuZXcgc2V0IG9mIG1ldGFkYXRhIHRhZ3MgaGFzIGJlZW4gZm91bmQgaW4gdGhlIHN0cmVhbS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULUJVRkZFUlNJWkU6Q0FQUyI+PC9hPkdTVF9FVkVOVF9CVUZGRVJTSVpFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk5vdGlmaWNhdGlvbiBvZiBidWZmZXJpbmcgcmVxdWlyZW1lbnRzLiBDdXJyZW50bHkgbm90Ci0gICAgICAgICAgICAgICAgdXNlZCB5ZXQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1TSU5LLU1FU1NBR0U6Q0FQUyI+PC9hPkdTVF9FVkVOVF9TSU5LX01FU1NBR0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QW4gZXZlbnQgdGhhdCBzaW5rcyB0dXJuIGludG8gYSBtZXNzYWdlLiBVc2VkIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCBtZXNzYWdlcyB0aGF0IHNob3VsZCBiZSBlbWl0dGVkIGluIHN5bmMgd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmluZy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULVNUUkVBTS1HUk9VUC1ET05FOkNBUFMiPjwvYT5HU1RfRVZFTlRfU1RSRUFNX0dST1VQX0RPTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+SW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGZvcgotICAgICAgICAgICAgICAgIHRoZSBzdHJlYW0gZ3JvdXAgSUQgaW4gdGhlIG1lc3NhZ2UuIFNlbnQgYmVmb3JlIEVPUwotICAgICAgICAgICAgICAgIGluIHNvbWUgaW5zdGFuY2VzIGFuZCBzaG91bGQgYmUgaGFuZGxlZCBtb3N0bHkgdGhlIHNhbWUuIChTaW5jZSAxLjEwKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtRU9TOkNBUFMiPjwvYT5HU1RfRVZFTlRfRU9TPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkVuZC1PZi1TdHJlYW0uIE5vIG1vcmUgZGF0YSBpcyB0byBiZSBleHBlY3RlZCB0byBmb2xsb3cKLSAgICAgICAgICAgICAgICB3aXRob3V0IGVpdGhlciBhIFNUUkVBTV9TVEFSVCBldmVudCwgb3IgYSBGTFVTSF9TVE9QIGFuZCBhIFNFR01FTlQKLSAgICAgICAgICAgICAgICBldmVudC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULVRPQzpDQVBTIj48L2E+R1NUX0VWRU5UX1RPQzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BbiBldmVudCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBhIG5ldyB0YWJsZSBvZiBjb250ZW50cyAoVE9DKQotICAgICAgICAgICAgICAgIHdhcyBmb3VuZCBvciB1cGRhdGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtUFJPVEVDVElPTjpDQVBTIj48L2E+R1NUX0VWRU5UX1BST1RFQ1RJT048L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QW4gZXZlbnQgd2hpY2ggaW5kaWNhdGVzIHRoYXQgbmV3IG9yIHVwZGF0ZWQKLSAgICAgICAgICAgICAgICBlbmNyeXB0aW9uIGluZm9ybWF0aW9uIGhhcyBiZWVuIGZvdW5kIGluIHRoZSBzdHJlYW0uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1TRUdNRU5ULURPTkU6Q0FQUyI+PC9hPkdTVF9FVkVOVF9TRUdNRU5UX0RPTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TWFya3MgdGhlIGVuZCBvZiBhIHNlZ21lbnQgcGxheWJhY2suPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1HQVA6Q0FQUyI+PC9hPkdTVF9FVkVOVF9HQVA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TWFya3MgYSBnYXAgaW4gdGhlIGRhdGFzdHJlYW0uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1RT1M6Q0FQUyI+PC9hPkdTVF9FVkVOVF9RT1M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSBxdWFsaXR5IG1lc3NhZ2UuIFVzZWQgdG8gaW5kaWNhdGUgdG8gdXBzdHJlYW0gZWxlbWVudHMKLSAgICAgICAgICAgICAgICB0aGF0IHRoZSBkb3duc3RyZWFtIGVsZW1lbnRzIHNob3VsZCBhZGp1c3QgdGhlaXIgcHJvY2Vzc2luZwotICAgICAgICAgICAgICAgIHJhdGUuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1TRUVLOkNBUFMiPjwvYT5HU1RfRVZFTlRfU0VFSzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BIHJlcXVlc3QgZm9yIGEgbmV3IHBsYXliYWNrIHBvc2l0aW9uIGFuZCByYXRlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtTkFWSUdBVElPTjpDQVBTIj48L2E+R1NUX0VWRU5UX05BVklHQVRJT048L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TmF2aWdhdGlvbiBldmVudHMgYXJlIHVzdWFsbHkgdXNlZCBmb3IgY29tbXVuaWNhdGluZwotICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHJlcXVlc3RzLCBzdWNoIGFzIG1vdXNlIG9yIGtleWJvYXJkIG1vdmVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgdG8gdXBzdHJlYW0gZWxlbWVudHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1MQVRFTkNZOkNBUFMiPjwvYT5HU1RfRVZFTlRfTEFURU5DWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Ob3RpZmljYXRpb24gb2YgbmV3IGxhdGVuY3kgYWRqdXN0bWVudC4gU2lua3Mgd2lsbCB1c2UKLSAgICAgICAgICAgICAgICAgICAgdGhlIGxhdGVuY3kgaW5mb3JtYXRpb24gdG8gYWRqdXN0IHRoZWlyIHN5bmNocm9uaXNhdGlvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULVNURVA6Q0FQUyI+PC9hPkdTVF9FVkVOVF9TVEVQPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkEgcmVxdWVzdCBmb3Igc3RlcHBpbmcgdGhyb3VnaCB0aGUgbWVkaWEuIFNpbmtzIHdpbGwgdXN1YWxseQotICAgICAgICAgICAgICAgICBleGVjdXRlIHRoZSBzdGVwIG9wZXJhdGlvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULVJFQ09ORklHVVJFOkNBUFMiPjwvYT5HU1RfRVZFTlRfUkVDT05GSUdVUkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSByZXF1ZXN0IGZvciB1cHN0cmVhbSByZW5lZ290aWF0aW5nIGNhcHMgYW5kIHJlY29uZmlndXJpbmcuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1UT0MtU0VMRUNUOkNBUFMiPjwvYT5HU1RfRVZFTlRfVE9DX1NFTEVDVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BIHJlcXVlc3QgZm9yIGEgbmV3IHBsYXliYWNrIHBvc2l0aW9uIGJhc2VkIG9uIFRPQwotICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSdzIFVJRC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULVNFTEVDVC1TVFJFQU1TOkNBUFMiPjwvYT5HU1RfRVZFTlRfU0VMRUNUX1NUUkVBTVM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSByZXF1ZXN0IHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBzdHJlYW1zIChTaW5jZSAxLjEwKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtQ1VTVE9NLVVQU1RSRUFNOkNBUFMiPjwvYT5HU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlVwc3RyZWFtIGN1c3RvbSBldmVudDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRVZFTlQtQ1VTVE9NLURPV05TVFJFQU06Q0FQUyI+PC9hPkdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Eb3duc3RyZWFtIGN1c3RvbSBldmVudCB0aGF0IHRyYXZlbHMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGEgZmxvdy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULUNVU1RPTS1ET1dOU1RSRUFNLU9PQjpDQVBTIj48L2E+R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5DdXN0b20gb3V0LW9mLWJhbmQgZG93bnN0cmVhbSBldmVudC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULUNVU1RPTS1ET1dOU1RSRUFNLVNUSUNLWTpDQVBTIj48L2E+R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5DdXN0b20gc3RpY2t5IGRvd25zdHJlYW0gZXZlbnQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1FVkVOVC1DVVNUT00tQk9USDpDQVBTIj48L2E+R1NUX0VWRU5UX0NVU1RPTV9CT1RIPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkN1c3RvbSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIGV2ZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgSW4tYmFuZCB3aGVuIHRyYXZlbGxpbmcgZG93bnN0cmVhbS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUVWRU5ULUNVU1RPTS1CT1RILU9PQjpDQVBTIj48L2E+R1NUX0VWRU5UX0NVU1RPTV9CT1RIX09PQjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5DdXN0b20gdXBzdHJlYW0gb3IgZG93bnN0cmVhbSBvdXQtb2YtYmFuZCBldmVudC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0cmVhbUZsYWdzIj48L2E+PGgzPmVudW0gR3N0U3RyZWFtRmxhZ3M8L2gzPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RyZWFtRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUZMQUctTk9ORTpDQVBTIj48L2E+R1NUX1NUUkVBTV9GTEFHX05PTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhpcyBzdHJlYW0gaGFzIG5vIHNwZWNpYWwgYXR0cmlidXRlczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUZMQUctU1BBUlNFOkNBUFMiPjwvYT5HU1RfU1RSRUFNX0ZMQUdfU1BBUlNFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoaXMgc3RyZWFtIGlzIGEgc3BhcnNlIHN0cmVhbSAoZS5nLiBhIHN1YnRpdGxlCi0gICBzdHJlYW0pLCBkYXRhIG1heSBmbG93IG9ubHkgaW4gaXJyZWd1bGFyIGludGVydmFscyB3aXRoIGxhcmdlIGdhcHMgaW4KLSAgIGJldHdlZW4uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tRkxBRy1TRUxFQ1Q6Q0FQUyI+PC9hPkdTVF9TVFJFQU1fRkxBR19TRUxFQ1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhpcyBzdHJlYW0gc2hvdWxkIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQuIFRoaXMKLSAgIGZsYWcgbWF5IGJlIHVzZWQgYnkgZGVtdXhlcnMgdG8gc2lnbmFsIHRoYXQgYSBzdHJlYW0gc2hvdWxkIGJlIHNlbGVjdGVkCi0gICBieSBkZWZhdWx0IGluIGEgcGxheWJhY2sgc2NlbmFyaW8uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tRkxBRy1VTlNFTEVDVDpDQVBTIj48L2E+R1NUX1NUUkVBTV9GTEFHX1VOU0VMRUNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoaXMgc3RyZWFtIHNob3VsZCBub3QgYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC4KLSAgIFRoaXMgZmxhZyBtYXkgYmUgdXNlZCBieSBkZW11eGVycyB0byBzaWduYWwgdGhhdCBhIHN0cmVhbSBzaG91bGQgbm90Ci0gICBiZSBzZWxlY3RlZCBieSBkZWZhdWx0IGluIGEgcGxheWJhY2sgc2NlbmFyaW8sIGJ1dCBvbmx5IGlmIGV4cGxpY2l0bHkKLSAgIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIChlLmcuIGFuIGF1ZGlvIHRyYWNrIGZvciB0aGUgaGFyZCBvZiBoZWFyaW5nIG9yCi0gICBhIGRpcmVjdG9yJ3MgY29tbWVudGFyeSB0cmFjaykuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRT1NUeXBlIj48L2E+PGgzPmVudW0gR3N0UU9TVHlwZTwvaDM+Ci08cD5UaGUgZGlmZmVyZW50IHR5cGVzIG9mIFFvUyBldmVudHMgdGhhdCBjYW4gYmUgZ2l2ZW4gdG8gdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXFvcyIgdGl0bGU9ImdzdF9ldmVudF9uZXdfcW9zwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfbmV3X3FvcygpPC9jb2RlPjwvYT4gbWV0aG9kLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFFPU1R5cGUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUU9TLVRZUEUtT1ZFUkZMT1c6Q0FQUyI+PC9hPkdTVF9RT1NfVFlQRV9PVkVSRkxPVzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgUW9TIGV2ZW50IHR5cGUgdGhhdCBpcyBwcm9kdWNlZCB3aGVuIHVwc3RyZWFtCi0gICBlbGVtZW50cyBhcmUgcHJvZHVjaW5nIGRhdGEgdG9vIHF1aWNrbHkgYW5kIHRoZSBlbGVtZW50IGNhbid0IGtlZXAgdXAKLSAgIHByb2Nlc3NpbmcgdGhlIGRhdGEuIFVwc3RyZWFtIHNob3VsZCByZWR1Y2UgdGhlaXIgcHJvZHVjdGlvbiByYXRlLiBUaGlzCi0gICB0eXBlIGlzIGFsc28gdXNlZCB3aGVuIGJ1ZmZlcnMgYXJyaXZlIGVhcmx5IG9yIGluIHRpbWUuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RT1MtVFlQRS1VTkRFUkZMT1c6Q0FQUyI+PC9hPkdTVF9RT1NfVFlQRV9VTkRFUkZMT1c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIFFvUyBldmVudCB0eXBlIHRoYXQgaXMgcHJvZHVjZWQgd2hlbiB1cHN0cmVhbQotICAgZWxlbWVudHMgYXJlIHByb2R1Y2luZyBkYXRhIHRvbyBzbG93bHkgYW5kIG5lZWQgdG8gc3BlZWQgdXAgdGhlaXIKLSAgIHByb2R1Y3Rpb24gcmF0ZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVFPUy1UWVBFLVRIUk9UVExFOkNBUFMiPjwvYT5HU1RfUU9TX1RZUEVfVEhST1RUTEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIFFvUyBldmVudCB0eXBlIHRoYXQgaXMgcHJvZHVjZWQgd2hlbiB0aGUKLSAgIGFwcGxpY2F0aW9uIGVuYWJsZWQgdGhyb3R0bGluZyB0byBsaW1pdCB0aGUgZGF0YSByYXRlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2Vla1R5cGUiPjwvYT48aDM+ZW51bSBHc3RTZWVrVHlwZTwvaDM+Ci08cD5UaGUgZGlmZmVyZW50IHR5cGVzIG9mIHNlZWsgZXZlbnRzLiBXaGVuIGNvbnN0cnVjdGluZyBhIHNlZWsgZXZlbnQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zZWVrIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zZWVrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfbmV3X3NlZWsoKTwvY29kZT48L2E+IG9yIHdoZW4gZG9pbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1kby1zZWVrIiB0aXRsZT0iZ3N0X3NlZ21lbnRfZG9fc2Vla8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfZG9fc2VlaygpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U2Vla1R5cGUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VFSy1UWVBFLU5PTkU6Q0FQUyI+PC9hPkdTVF9TRUVLX1RZUEVfTk9ORTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5ubyBjaGFuZ2UgaW4gcG9zaXRpb24gaXMgcmVxdWlyZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNFRUstVFlQRS1TRVQ6Q0FQUyI+PC9hPkdTVF9TRUVLX1RZUEVfU0VUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmFic29sdXRlIHBvc2l0aW9uIGlzIHJlcXVlc3RlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VFSy1UWVBFLUVORDpDQVBTIj48L2E+R1NUX1NFRUtfVFlQRV9FTkQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cmVsYXRpdmUgcG9zaXRpb24gdG8gZHVyYXRpb24gaXMgcmVxdWVzdGVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTZWVrRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RTZWVrRmxhZ3M8L2gzPgotPHA+RmxhZ3MgdG8gYmUgdXNlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VlayIgdGl0bGU9ImdzdF9lbGVtZW50X3NlZWvCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NlZWsoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2Vla8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X25ld19zZWVrKCk8L2NvZGU+PC9hPi4gQWxsIGZsYWdzCi1jYW4gYmUgdXNlZCB0b2dldGhlci48L3A+Ci08cD5BIG5vbiBmbHVzaGluZyBzZWVrIG1pZ2h0IHRha2Ugc29tZSB0aW1lIHRvIHBlcmZvcm0gYXMgdGhlIGN1cnJlbnRseQotcGxheWluZyBkYXRhIGluIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBiZSBjbGVhcmVkLjwvcD4KLTxwPkFuIGFjY3VyYXRlIHNlZWsgbWlnaHQgYmUgc2xvd2VyIGZvciBmb3JtYXRzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgaW5kZXhlcwotb3IgdGltZXN0YW1wIG1hcmtlcnMgaW4gdGhlIHN0cmVhbS4gU3BlY2lmeWluZyB0aGlzIGZsYWcgbWlnaHQgcmVxdWlyZSBhCi1jb21wbGV0ZSBzY2FuIG9mIHRoZSBmaWxlIGluIHRob3NlIGNhc2VzLjwvcD4KLTxwPldoZW4gcGVyZm9ybWluZyBhIHNlZ21lbnQgc2VlazogYWZ0ZXIgdGhlIHBsYXliYWNrIG9mIHRoZSBzZWdtZW50IGNvbXBsZXRlcywKLW5vIEVPUyB3aWxsIGJlIGVtaXR0ZWQgYnkgdGhlIGVsZW1lbnQgdGhhdCBwZXJmb3JtZWQgdGhlIHNlZWssIGJ1dCBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNFR01FTlQtRE9ORTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfU0VHTUVOVF9ET05FPC9jb2RlPjwvYT4gbWVzc2FnZSB3aWxsIGJlIHBvc3RlZCBvbiB0aGUgYnVzIGJ5IHRoZSBlbGVtZW50LgotV2hlbiB0aGlzIG1lc3NhZ2UgaXMgcG9zdGVkLCBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGEgbmV3IHNlZWsgZXZlbnQgdG8KLWNvbnRpbnVlIHBsYXliYWNrLiBXaXRoIHRoaXMgc2VlayBtZXRob2QgaXQgaXMgcG9zc2libGUgdG8gcGVyZm9ybSBzZWFtbGVzcwotbG9vcGluZyBvciBzaW1wbGUgbGluZWFyIGVkaXRpbmcuPC9wPgotPHA+V2hlbiBkb2luZyBmYXN0IGZvcndhcmQgKHJhdGUgJmd0OyAxLjApIG9yIGZhc3QgcmV2ZXJzZSAocmF0ZSAmbHQ7IC0xLjApIHRyaWNrbW9kZQotcGxheWJhY2ssIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1GTEFHLVRSSUNLTU9ERTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NFRUtfRkxBR19UUklDS01PREU8L2NvZGU+PC9hPiBmbGFnIGNhbiBiZSB1c2VkIHRvIGluc3RydWN0IGRlY29kZXJzCi1hbmQgZGVtdXhlcnMgdG8gYWRqdXN0IHRoZSBwbGF5YmFjayByYXRlIGJ5IHNraXBwaW5nIGZyYW1lcy4gVGhpcyBjYW4gaW1wcm92ZQotcGVyZm9ybWFuY2UgYW5kIGRlY3JlYXNlIENQVSB1c2FnZSBiZWNhdXNlIG5vdCBhbGwgZnJhbWVzIG5lZWQgdG8gYmUgZGVjb2RlZC48L3A+Ci08cD5CZXlvbmQgdGhhdCwgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctVFJJQ0tNT0RFLUtFWS1VTklUUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NFRUtfRkxBR19UUklDS01PREVfS0VZX1VOSVRTPC9jb2RlPjwvYT4gZmxhZyBjYW4gYmUgdXNlZCB0bwotcmVxdWVzdCB0aGF0IGRlY29kZXJzIHNraXAgYWxsIGZyYW1lcyBleGNlcHQga2V5IHVuaXRzLCBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctVFJJQ0tNT0RFLU5PLUFVRElPOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9OT19BVURJTzwvY29kZT48L2E+IGZsYWdzIGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgdGhhdCBhdWRpbwotZGVjb2RlcnMgZG8gbm8gZGVjb2RpbmcgYXQgYWxsLCBhbmQgc2ltcGxlIG91dHB1dCBzaWxlbmNlLjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1GTEFHLVNOQVAtQkVGT1JFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VFS19GTEFHX1NOQVBfQkVGT1JFPC9jb2RlPjwvYT4gZmxhZyBjYW4gYmUgdXNlZCB0byBzbmFwIHRvIHRoZSBwcmV2aW91cwotcmVsZXZhbnQgbG9jYXRpb24sIGFuZCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1TTkFQLUFGVEVSOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VFS19GTEFHX1NOQVBfQUZURVI8L2NvZGU+PC9hPiBmbGFnIGNhbiBiZSB1c2VkIHRvCi1zZWxlY3QgdGhlIG5leHQgcmVsZXZhbnQgbG9jYXRpb24uIElmIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctS0VZLVVOSVQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQ8L2NvZGU+PC9hPiBpcyBzcGVjaWZpZWQsCi10aGUgcmVsZXZhbnQgbG9jYXRpb24gaXMgYSBrZXlmcmFtZS4gSWYgYm90aCBmbGFncyBhcmUgc3BlY2lmaWVkLCB0aGUgbmVhcmVzdAotb2YgdGhlc2UgbG9jYXRpb25zIHdpbGwgYmUgc2VsZWN0ZWQuIElmIG5vbmUgYXJlIHNwZWNpZmllZCwgdGhlIGltcGxlbWVudGF0aW9uIGlzCi1mcmVlIHRvIHNlbGVjdCB3aGljaGV2ZXIgaXQgd2FudHMuPC9wPgotPHA+VGhlIGJlZm9yZSBhbmQgYWZ0ZXIgaGVyZSBhcmUgaW4gcnVubmluZyB0aW1lLCBzbyB3aGVuIHBsYXlpbmcgYmFja3dhcmRzLAotdGhlIG5leHQgbG9jYXRpb24gcmVmZXJzIHRvIHRoZSBvbmUgdGhhdCB3aWxsIHBsYXllZCBpbiBuZXh0LCBhbmQgbm90IHRoZQotb25lIHRoYXQgaXMgbG9jYXRlZCBhZnRlciBpbiB0aGUgYWN0dWFsIHNvdXJjZSBzdHJlYW0uPC9wPgotPHA+QWxzbyBzZWUgcGFydC1zZWVraW5nLnR4dCBpbiB0aGUgR1N0cmVhbWVyIGRlc2lnbiBkb2N1bWVudGF0aW9uIGZvciBtb3JlCi1kZXRhaWxzIG9uIHRoZSBtZWFuaW5nIG9mIHRoZXNlIGZsYWdzIGFuZCB0aGUgYmVoYXZpb3VyIGV4cGVjdGVkIG9mCi1lbGVtZW50cyB0aGF0IGhhbmRsZSB0aGVtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFNlZWtGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TRUVLLUZMQUctTk9ORTpDQVBTIj48L2E+R1NUX1NFRUtfRkxBR19OT05FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPm5vIGZsYWc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNFRUstRkxBRy1GTFVTSDpDQVBTIj48L2E+R1NUX1NFRUtfRkxBR19GTFVTSDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5mbHVzaCBwaXBlbGluZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLUFDQ1VSQVRFOkNBUFMiPjwvYT5HU1RfU0VFS19GTEFHX0FDQ1VSQVRFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmFjY3VyYXRlIHBvc2l0aW9uIGlzIHJlcXVlc3RlZCwgdGhpcyBtaWdodAotICAgICAgICAgICAgICAgICAgICBiZSBjb25zaWRlcmFibHkgc2xvd2VyIGZvciBzb21lIGZvcm1hdHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TRUVLLUZMQUctS0VZLVVOSVQ6Q0FQUyI+PC9hPkdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+c2VlayB0byB0aGUgbmVhcmVzdCBrZXlmcmFtZS4gVGhpcyBtaWdodCBiZQotICAgICAgICAgICAgICAgICAgICBmYXN0ZXIgYnV0IGxlc3MgYWNjdXJhdGUuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TRUVLLUZMQUctU0VHTUVOVDpDQVBTIj48L2E+R1NUX1NFRUtfRkxBR19TRUdNRU5UPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnBlcmZvcm0gYSBzZWdtZW50IHNlZWsuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TRUVLLUZMQUctVFJJQ0tNT0RFOkNBUFMiPjwvYT5HU1RfU0VFS19GTEFHX1RSSUNLTU9ERTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD53aGVuIGRvaW5nIGZhc3QgZm9yd2FyZCBvciBmYXN0IHJldmVyc2UgcGxheWJhY2ssIGFsbG93Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIHRvIHNraXAgZnJhbWVzIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhbGwKLSAgICAgICAgICAgICAgICAgICAgZnJhbWVzLiAoU2luY2UgMS42KTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLVNLSVA6Q0FQUyI+PC9hPkdTVF9TRUVLX0ZMQUdfU0tJUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5EZXByZWNhdGVkIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZmxhZywgcmVwbGFjZWQKLSAgICAgICAgICAgICAgICAgICAgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1UUklDS01PREU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFPC9jb2RlPjwvYT48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNFRUstRkxBRy1TTkFQLUJFRk9SRTpDQVBTIj48L2E+R1NUX1NFRUtfRkxBR19TTkFQX0JFRk9SRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5nbyB0byBhIGxvY2F0aW9uIGJlZm9yZSB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICBpZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1GTEFHLUtFWS1VTklUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU0VFS19GTEFHX0tFWV9VTklUPC9jb2RlPjwvYT4gdGhpcyBtZWFucyB0aGUga2V5ZnJhbWUgYXQgb3IgYmVmb3JlCi0gICAgICAgICAgICAgICAgICAgIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gdGhlIG9uZSBhdCBvciBiZWZvcmUgdGhlIHNlZWsgdGFyZ2V0LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLVNOQVAtQUZURVI6Q0FQUyI+PC9hPkdTVF9TRUVLX0ZMQUdfU05BUF9BRlRFUjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5nbyB0byBhIGxvY2F0aW9uIGFmdGVyIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgIGlmIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctS0VZLVVOSVQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQ8L2NvZGU+PC9hPiB0aGlzIG1lYW5zIHRoZSBrZXlmcmFtZSBhdCBvZiBhZnRlciB0aGUKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkIHBvc2l0aW9uLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLVNOQVAtTkVBUkVTVDpDQVBTIj48L2E+R1NUX1NFRUtfRkxBR19TTkFQX05FQVJFU1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Z28gdG8gYSBwb3NpdGlvbiBuZWFyIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgIGlmIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctS0VZLVVOSVQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQ8L2NvZGU+PC9hPiB0aGlzIG1lYW5zIHRoZSBrZXlmcmFtZSBjbG9zZXN0Ci0gICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24sIGlmIGJvdGgga2V5ZnJhbWVzIGFyZSBhdCBhbiBlcXVhbAotICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSwgYmVoYXZlcyBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctU05BUC1CRUZPUkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TRUVLX0ZMQUdfU05BUF9CRUZPUkU8L2NvZGU+PC9hPi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNFRUstRkxBRy1UUklDS01PREUtS0VZLVVOSVRTOkNBUFMiPjwvYT5HU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+d2hlbiBkb2luZyBmYXN0IGZvcndhcmQgb3IgZmFzdCByZXZlcnNlCi0gICAgICAgICAgICAgICAgICAgIHBsYXliYWNrLCByZXF1ZXN0IHRoYXQgZWxlbWVudHMgb25seSBkZWNvZGUga2V5ZnJhbWVzCi0gICAgICAgICAgICAgICAgICAgIGFuZCBza2lwIGFsbCBvdGhlciBjb250ZW50LCBmb3IgZm9ybWF0cyB0aGF0IGhhdmUKLSAgICAgICAgICAgICAgICAgICAga2V5ZnJhbWVzLiAoU2luY2UgMS42KTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VFSy1GTEFHLVRSSUNLTU9ERS1OTy1BVURJTzpDQVBTIj48L2E+R1NUX1NFRUtfRkxBR19UUklDS01PREVfTk9fQVVESU88L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+d2hlbiBkb2luZyBmYXN0IGZvcndhcmQgb3IgZmFzdCByZXZlcnNlCi0gICAgICAgICAgICAgICAgICAgIHBsYXliYWNrLCByZXF1ZXN0IHRoYXQgYXVkaW8gZGVjb2RlciBlbGVtZW50cyBza2lwCi0gICAgICAgICAgICAgICAgICAgIGRlY29kaW5nIGFuZCBvdXRwdXQgb25seSBnYXAgZXZlbnRzIG9yIHNpbGVuY2UuIChTaW5jZSAxLjYpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEV2ZW50LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RHaG9zdFBhZC5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RHaG9zdFBhZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGZhYjI1Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0R2hvc3RQYWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0R2hvc3RQYWQ6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiIHRpdGxlPSJHc3RGb3JtYXQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEdob3N0UGFkLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RHaG9zdFBhZC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0R2hvc3RQYWQiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RHaG9zdFBhZC50b3Bfb2ZfcGFnZSI+PC9hPkdzdEdob3N0UGFkPC9zcGFuPjwvaDI+Ci08cD5Hc3RHaG9zdFBhZCDigJQgUHNldWRvIGxpbmsgcGFkczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RHaG9zdFBhZC5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXciIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ld8KgKCkiPmdzdF9naG9zdF9wYWRfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3LW5vLXRhcmdldCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldMKgKCkiPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0LWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtc2V0LXRhcmdldCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfc2V0X3RhcmdldMKgKCkiPmdzdF9naG9zdF9wYWRfc2V0X3RhcmdldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWdldC10YXJnZXQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXTCoCgpIj5nc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1jb25zdHJ1Y3QiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdMKgKCkiPmdzdF9naG9zdF9wYWRfY29uc3RydWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtYWN0aXZhdGUtbW9kZS1kZWZhdWx0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHTCoCgpIj5nc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX21vZGVfZGVmYXVsdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWludGVybmFsLWFjdGl2YXRlLW1vZGUtZGVmYXVsdCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfbW9kZV9kZWZhdWx0wqAoKSI+Z3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNHc3RQcm94eVBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQcm94eVBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0LWludGVybmFsIiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWzCoCgpIj5nc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0IiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHTCoCgpIj5nc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWNoYWluLWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHTCoCgpIj5nc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1jaGFpbi1saXN0LWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdMKgKCkiPmdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0cmFuZ2UtZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdMKgKCkiPmdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFByb3h5UGFkIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0R2hvc3RQYWQub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RQcm94eVBhZCI+R3N0UHJveHlQYWQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdEdob3N0UGFkLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0R2hvc3RQYWQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UHJveHlQYWQKLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0R2hvc3RQYWQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RHaG9zdFBhZC5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RHaG9zdFBhZC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5HaG9zdFBhZHMgYXJlIHVzZWZ1bCB3aGVuIG9yZ2FuaXppbmcgcGlwZWxpbmVzIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gbGlrZSBlbGVtZW50cy4KLVRoZSBpZGVhIGhlcmUgaXMgdG8gY3JlYXRlIGhpZXJhcmNoaWNhbCBlbGVtZW50IGdyYXBocy4gVGhlIGJpbiBlbGVtZW50Ci1jb250YWlucyBhIHN1Yi1ncmFwaC4gTm93IG9uZSB3b3VsZCBsaWtlIHRvIHRyZWF0IHRoZSBiaW4tZWxlbWVudCBsaWtlIGFueQotb3RoZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4uIFRoaXMgaXMgd2hlcmUgR2hvc3RQYWRzIGNvbWUgaW50byBwbGF5LiBBIEdob3N0UGFkIGFjdHMgYXMKLWEgcHJveHkgZm9yIGFub3RoZXIgcGFkLiBUaHVzIHRoZSBiaW4gY2FuIGhhdmUgc2luayBhbmQgc291cmNlIGdob3N0LXBhZHMKLXRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBzaW5rIGFuZCBzb3VyY2UgcGFkcyBvZiB0aGUgY2hpbGQgZWxlbWVudHMuPC9wPgotPHA+SWYgdGhlIHRhcmdldCBwYWQgaXMga25vd24gYXQgY3JlYXRpb24gdGltZSwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXciIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2dob3N0X3BhZF9uZXcoKTwvY29kZT48L2E+IGlzIHRoZQotZnVuY3Rpb24gdG8gdXNlIHRvIGdldCBhIGdob3N0LXBhZC4gT3RoZXJ3aXNlIG9uZSBjYW4gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3LW5vLXRhcmdldCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0KCk8L2NvZGU+PC9hPgotdG8gY3JlYXRlIHRoZSBnaG9zdC1wYWQgYW5kIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLXNldC10YXJnZXQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCgpPC9jb2RlPjwvYT4gdG8gZXN0YWJsaXNoIHRoZQotYXNzb2NpYXRpb24gbGF0ZXIgb24uPC9wPgotPHA+Tm90ZSB0aGF0IEdob3N0UGFkcyBhZGQgb3ZlcmhlYWQgdG8gdGhlIGRhdGEgcHJvY2Vzc2luZyBvZiBhIHBpcGVsaW5lLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0R2hvc3RQYWQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtbmV3Ij48L2E+PGgzPmdzdF9naG9zdF9wYWRfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfZ2hvc3RfcGFkX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqdGFyZ2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBnaG9zdHBhZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4KLSBhcyB0aGUgdGFyZ2V0LiBUaGUgZGlyZWN0aW9uIHdpbGwgYmUgdGFrZW4KLWZyb20gdGhlIHRhcmdldCBwYWQuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4KLSBtdXN0IGJlIHVubGlua2VkLjwvcD4KLTxwPldpbGwgcmVmIHRoZSB0YXJnZXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbmFtZSBvZiB0aGUgbmV3IHBhZCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIGFzc2lnbiBhIGRlZmF1bHQgbmFtZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFyZ2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBwYWQgdG8gZ2hvc3QuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGluCi1jYXNlIG9mIGFuIGVycm9yLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJBbGlhcyBmb3IgdHJhbnNmZXIgbm9uZSwgdXNlZCBmb3Igb2JqZWN0cyB3aXRoIGZsb2F0aW5nIHJlZnMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZmxvYXRpbmc8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0Ij48L2E+PGgzPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPiBkaXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGdob3N0cGFkIHdpdGhvdXQgYSB0YXJnZXQgd2l0aCB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgotQSB0YXJnZXQgY2FuIGJlIHNldCBvbiB0aGUgZ2hvc3RwYWQgbGF0ZXIgd2l0aCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtc2V0LXRhcmdldCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfc2V0X3RhcmdldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KCk8L2NvZGU+PC9hPiBmdW5jdGlvbi48L3A+Ci08cD5UaGUgY3JlYXRlZCBnaG9zdHBhZCB3aWxsIG5vdCBoYXZlIGEgcGFkdGVtcGxhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIG5hbWUgb2YgdGhlIG5ldyBwYWQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0byBhc3NpZ24gYSBkZWZhdWx0IG5hbWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRpcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkaXJlY3Rpb24gb2YgdGhlIGdob3N0cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLW5ldy1uby10YXJnZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGluCi1jYXNlIG9mIGFuIGVycm9yLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtbmV3LWZyb20tdGVtcGxhdGUiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICp0YXJnZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBnaG9zdHBhZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4KLSBhcyB0aGUgdGFyZ2V0LiBUaGUgZGlyZWN0aW9uIHdpbGwgYmUgdGFrZW4KLWZyb20gdGhlIHRhcmdldCBwYWQuIFRoZSB0ZW1wbGF0ZSB1c2VkIG9uIHRoZSBnaG9zdHBhZCB3aWxsIGJlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZW1wbGF0ZTwvY29kZT48L2VtPgotLjwvcD4KLTxwPldpbGwgcmVmIHRoZSB0YXJnZXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdG8gYXNzaWduIGEgZGVmYXVsdCBuYW1lLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YXJnZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhZCB0byBnaG9zdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlbXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB0byB1c2Ugb24gdGhlIGdob3N0cGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtbmV3LWZyb20tdGVtcGxhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGluCi1jYXNlIG9mIGFuIGVycm9yLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtbmV3LW5vLXRhcmdldC1mcm9tLXRlbXBsYXRlIj48L2E+PGgzPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdGVtcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGdob3N0cGFkIGJhc2VkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZW1wbDwvY29kZT48L2VtPgotLCB3aXRob3V0IHNldHRpbmcgYSB0YXJnZXQuIFRoZQotZGlyZWN0aW9uIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlbXBsPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0LWZyb20tdGVtcGxhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbmFtZSBvZiB0aGUgbmV3IHBhZCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIGFzc2lnbiBhIGRlZmF1bHQgbmFtZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IHRvIGNyZWF0ZSB0aGUgZ2hvc3RwYWQgZnJvbS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLW5ldy1uby10YXJnZXQtZnJvbS10ZW1wbGF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaW4KLWNhc2Ugb2YgYW4gZXJyb3IuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1zZXQtdGFyZ2V0Ij48L2E+PGgzPmdzdF9naG9zdF9wYWRfc2V0X3RhcmdldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT4gKmdwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqbmV3dGFyZ2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgbmV3IHRhcmdldCBvZiB0aGUgZ2hvc3RwYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdwYWQ8L2NvZGU+PC9lbT4KLS4gQW55IGV4aXN0aW5nIHRhcmdldAotaXMgdW5saW5rZWQgYW5kIGxpbmtzIHRvIHRoZSBuZXcgdGFyZ2V0IGFyZSBlc3RhYmxpc2hlZC4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld3RhcmdldDwvY29kZT48L2VtPgotIGlzCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGhlIHRhcmdldCB3aWxsIGJlIGNsZWFyZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1zZXQtdGFyZ2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmV3dGFyZ2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuZXcgcGFkIHRhcmdldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtc2V0LXRhcmdldC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbmV3IHRhcmdldCBjb3VsZCBiZSBzZXQuIFRoaXMgZnVuY3Rpb24KLWNhbiByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gd2hlbiB0aGUgaW50ZXJuYWwgcGFkcyBjb3VsZCBub3QgYmUgbGlua2VkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLWdldC10YXJnZXQiPjwvYT48aDM+Z3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0R2hvc3RQYWQ8L3NwYW4+PC9hPiAqZ3BhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIHRhcmdldCBwYWQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdwYWQ8L2NvZGU+PC9lbT4KLS4gVW5yZWYgdGFyZ2V0IHBhZCBhZnRlciB1c2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLWdldC10YXJnZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLWdldC10YXJnZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgdGFyZ2V0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCBjYW4gYmUKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgZ2hvc3RwYWQgaGFzIG5vIHRhcmdldCBzZXQuIFVucmVmIHRhcmdldCBwYWQgYWZ0ZXIKLXVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtY29uc3RydWN0Ij48L2E+PGgzPmdzdF9naG9zdF9wYWRfY29uc3RydWN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RHaG9zdFBhZDwvc3Bhbj48L2E+ICpncGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpbmlzaCBpbml0aWFsaXphdGlvbiBvZiBhIG5ld2x5IGFsbG9jYXRlZCBnaG9zdCBwYWQuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBsYW5ndWFnZSBiaW5kaW5ncyBhbmQgd2hlbiBzdWJjbGFzc2luZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT47IHBsdWdpbiBhbmQgYXBwbGljYXRpb24gZGV2ZWxvcGVycyBub3JtYWxseSB3aWxsIG5vdCBjYWxsIHRoaXMKLWZ1bmN0aW9uLiBDYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgYWZ0ZXIgYSBjYWxsIHRvIGdfb2JqZWN0X25ldwotKEdTVF9UWVBFX0dIT1NUX1BBRCwgImRpcmVjdGlvbiIsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaXI8L2NvZGU+PC9lbT4KLSwgLi4uLCBOVUxMKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLWNvbnN0cnVjdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Z3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXdseSBhbGxvY2F0ZWQgZ2hvc3QgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1jb25zdHJ1Y3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNvbnN0cnVjdGlvbiBzdWNjZWVkcywgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLWFjdGl2YXRlLW1vZGUtZGVmYXVsdCI+PC9hPjxoMz5nc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX21vZGVfZGVmYXVsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTW9kZSIgdGl0bGU9ImVudW0gR3N0UGFkTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZE1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhY3RpdmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW52b2tlIHRoZSBkZWZhdWx0IGFjdGl2YXRlIG1vZGUgZnVuY3Rpb24gb2YgYSBnaG9zdCBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdob3N0LXBhZC1hY3RpdmF0ZS1tb2RlLWRlZmF1bHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgYWN0aXZhdGlvbiBtb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFjdGl2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPndoZXRoZXIgdGhlIHBhZCBzaG91bGQgYmUgYWN0aXZlIG9yIG5vdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtYWN0aXZhdGUtbW9kZS1kZWZhdWx0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtaW50ZXJuYWwtYWN0aXZhdGUtbW9kZS1kZWZhdWx0Ij48L2E+PGgzPmdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfbW9kZV9kZWZhdWx0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX21vZGVfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTW9kZSIgdGl0bGU9ImVudW0gR3N0UGFkTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZE1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkludm9rZSB0aGUgZGVmYXVsdCBhY3RpdmF0ZSBtb2RlIGZ1bmN0aW9uIG9mIGEgcHJveHkgcGFkIHRoYXQgaXMKLW93bmVkIGJ5IGEgZ2hvc3QgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1naG9zdC1wYWQtaW50ZXJuYWwtYWN0aXZhdGUtbW9kZS1kZWZhdWx0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVxdWVzdGVkIGFjdGl2YXRpb24gbW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hY3RpdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIHRoZSBwYWQgc2hvdWxkIGJlIGFjdGl2ZSBvciBub3QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZ2hvc3QtcGFkLWludGVybmFsLWFjdGl2YXRlLW1vZGUtZGVmYXVsdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJveHktcGFkLWdldC1pbnRlcm5hbCI+PC9hPjxoMz5nc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFByb3h5UGFkPC9zcGFuPjwvYT7CoCoKLWdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjR3N0UHJveHlQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcm94eVBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBpbnRlcm5hbCBwYWQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiBVbnJlZiB0YXJnZXQgcGFkIGFmdGVyIHVzYWdlLjwvcD4KLTxwPlRoZSBpbnRlcm5hbCBwYWQgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0R2hvc3RQYWQ8L3NwYW4+PC9hPiBpcyB0aGUgaW50ZXJuYWxseSB1c2VkCi1wYWQgb2Ygb3Bwb3NpdGUgZGlyZWN0aW9uLCB3aGljaCBpcyB1c2VkIHRvIGxpbmsgdG8gdGhlIHRhcmdldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJveHktcGFkLWdldC1pbnRlcm5hbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJveHlQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wcm94eS1wYWQtZ2V0LWludGVybmFsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHRhcmdldCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNHc3RQcm94eVBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByb3h5UGFkPC9zcGFuPjwvYT4sIGNhbgotYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiAgVW5yZWYgdGFyZ2V0IHBhZCBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJveHktcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZGVmYXVsdCI+PC9hPjxoMz5nc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW52b2tlIHRoZSBkZWZhdWx0IGl0ZXJhdGUgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb24gb2YgdGhlIHByb3h5IHBhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJveHktcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZGVmYXVsdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBpbnRlcm5hbCBsaW5rcyBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWRlZmF1bHQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci1oYXMgbm8gcGFyZW50LiBVbnJlZiBlYWNoIHJldHVybmVkIHBhZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1jaGFpbi1kZWZhdWx0Ij48L2E+PGgzPmdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkludm9rZSB0aGUgZGVmYXVsdCBjaGFpbiBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wcm94eS1wYWQtY2hhaW4tZGVmYXVsdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHNpbmsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIHJldHVybnMgR1NUX0ZMT1dfRVJST1IgaWYgbm90LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gc2VuZCwgcmV0dXJuIEdTVF9GTE9XX0VSUk9SCi1pZiBub3QuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1jaGFpbi1kZWZhdWx0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwYWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wcm94eS1wYWQtY2hhaW4tbGlzdC1kZWZhdWx0Ij48L2E+PGgzPmdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkludm9rZSB0aGUgZGVmYXVsdCBjaGFpbiBsaXN0IGZ1bmN0aW9uIG9mIHRoZSBwcm94eSBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1jaGFpbi1saXN0LWRlZmF1bHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIGlmIG5vdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiB0byBzZW5kLCByZXR1cm4gR1NUX0ZMT1dfRVJST1IKLWlmIG5vdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJveHktcGFkLWNoYWluLWxpc3QtZGVmYXVsdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gZnJvbSB0aGUgcGFkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJveHktcGFkLWdldHJhbmdlLWRlZmF1bHQiPjwvYT48aDM+Z3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW52b2tlIHRoZSBkZWZhdWx0IGdldHJhbmdlIGZ1bmN0aW9uIG9mIHRoZSBwcm94eSBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1nZXRyYW5nZS1kZWZhdWx0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc3JjIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1FUlJPUjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfRVJST1I8L3NwYW4+PC9hPiBpZiBub3QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIGJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gaG9sZCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4sCi1yZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1FUlJPUjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfRVJST1I8L3NwYW4+PC9hPiBpZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlZS1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByb3h5LXBhZC1nZXRyYW5nZS1kZWZhdWx0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwYWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0R2hvc3RQYWQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFByb3h5UGFkLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UHJveHlQYWQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RQcm94eVBhZDs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2hvc3RQYWQtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RHaG9zdFBhZDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEdob3N0UGFkOzwvcHJlPgotPHA+T3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RHaG9zdFBhZDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0R2hvc3RQYWQuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0TWVtb3J5Lmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdE1lbW9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZThkMTU4Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0TWVtb3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RNZW1vcnk6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RNZW1vcnkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE1lbW9yeS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0TWVtb3J5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0TWVtb3J5LnRvcF9vZl9wYWdlIj48L2E+R3N0TWVtb3J5PC9zcGFuPjwvaDI+Ci08cD5Hc3RNZW1vcnkg4oCUIHJlZmNvdW50ZWQgd3JhcHBlciBmb3IgbWVtb3J5IGJsb2NrczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RNZW1vcnkuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9GTEFHUygpIj5HU1RfTUVNT1JZX0ZMQUdTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBRy1JUy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NRU1PUllfRkxBR19JU19TRVQoKSI+R1NUX01FTU9SWV9GTEFHX0lTX1NFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NRU1PUllfRkxBR19VTlNFVCgpIj5HU1RfTUVNT1JZX0ZMQUdfVU5TRVQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1JUy1SRUFET05MWTpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9JU19SRUFET05MWSgpIj5HU1RfTUVNT1JZX0lTX1JFQURPTkxZPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktSVMtTk8tU0hBUkU6Q0FQUyIgdGl0bGU9IkdTVF9NRU1PUllfSVNfTk9fU0hBUkUoKSI+R1NUX01FTU9SWV9JU19OT19TSEFSRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLVpFUk8tUEFEREVEOkNBUFMiIHRpdGxlPSJHU1RfTUVNT1JZX0lTX1pFUk9fUEFEREVEKCkiPkdTVF9NRU1PUllfSVNfWkVST19QQURERUQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1JUy1aRVJPLVBSRUZJWEVEOkNBUFMiIHRpdGxlPSJHU1RfTUVNT1JZX0lTX1pFUk9fUFJFRklYRUQoKSI+R1NUX01FTU9SWV9JU19aRVJPX1BSRUZJWEVEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktSVMtUEhZU0lDQUxMWS1DT05USUdVT1VTOkNBUFMiIHRpdGxlPSJHU1RfTUVNT1JZX0lTX1BIWVNJQ0FMTFlfQ09OVElHVU9VUygpIj5HU1RfTUVNT1JZX0lTX1BIWVNJQ0FMTFlfQ09OVElHVU9VUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLU5PVC1NQVBQQUJMRTpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEUoKSI+R1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlNYXBGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeU1hcEZ1bmN0aW9uwqAoKSI+KkdzdE1lbW9yeU1hcEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb27CoCgpIj4qR3N0TWVtb3J5TWFwRnVsbEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeVVubWFwRnVuY3Rpb27CoCgpIj4qR3N0TWVtb3J5VW5tYXBGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVVubWFwRnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb27CoCgpIj4qR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeUNvcHlGdW5jdGlvbsKgKCkiPipHc3RNZW1vcnlDb3B5RnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVNoYXJlRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uwqAoKSI+KkdzdE1lbW9yeVNoYXJlRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb27CoCgpIj4qR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWluaXQiIHRpdGxlPSJnc3RfbWVtb3J5X2luaXTCoCgpIj5nc3RfbWVtb3J5X2luaXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktaXMtdHlwZSIgdGl0bGU9ImdzdF9tZW1vcnlfaXNfdHlwZcKgKCkiPmdzdF9tZW1vcnlfaXNfdHlwZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1yZWYiIHRpdGxlPSJnc3RfbWVtb3J5X3JlZsKgKCkiPmdzdF9tZW1vcnlfcmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bnJlZiIgdGl0bGU9ImdzdF9tZW1vcnlfdW5yZWbCoCgpIj5nc3RfbWVtb3J5X3VucmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWdldC1zaXplcyIgdGl0bGU9ImdzdF9tZW1vcnlfZ2V0X3NpemVzwqAoKSI+Z3N0X21lbW9yeV9nZXRfc2l6ZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlc2l6ZSIgdGl0bGU9ImdzdF9tZW1vcnlfcmVzaXplwqAoKSI+Z3N0X21lbW9yeV9yZXNpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWxvY2siIHRpdGxlPSJnc3RfbWVtb3J5X2xvY2soKSI+Z3N0X21lbW9yeV9sb2NrPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5sb2NrIiB0aXRsZT0iZ3N0X21lbW9yeV91bmxvY2soKSI+Z3N0X21lbW9yeV91bmxvY2s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9tZW1vcnlfaXNfd3JpdGFibGUoKSI+Z3N0X21lbW9yeV9pc193cml0YWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfbWVtb3J5X21ha2Vfd3JpdGFibGUoKSI+Z3N0X21lbW9yeV9tYWtlX3dyaXRhYmxlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1tYWtlLW1hcHBlZCIgdGl0bGU9ImdzdF9tZW1vcnlfbWFrZV9tYXBwZWTCoCgpIj5nc3RfbWVtb3J5X21ha2VfbWFwcGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LW1hcCIgdGl0bGU9ImdzdF9tZW1vcnlfbWFwwqAoKSI+Z3N0X21lbW9yeV9tYXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXVubWFwIiB0aXRsZT0iZ3N0X21lbW9yeV91bm1hcMKgKCkiPmdzdF9tZW1vcnlfdW5tYXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktY29weSIgdGl0bGU9ImdzdF9tZW1vcnlfY29wecKgKCkiPmdzdF9tZW1vcnlfY29weTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1zaGFyZSIgdGl0bGU9ImdzdF9tZW1vcnlfc2hhcmXCoCgpIj5nc3RfbWVtb3J5X3NoYXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWlzLXNwYW4iIHRpdGxlPSJnc3RfbWVtb3J5X2lzX3NwYW7CoCgpIj5nc3RfbWVtb3J5X2lzX3NwYW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RNZW1vcnkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1lbW9yeUZsYWdzIj5Hc3RNZW1vcnlGbGFnczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1hcEZsYWdzIj5Hc3RNYXBGbGFnczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1BUC1SRUFEV1JJVEU6Q0FQUyIgdGl0bGU9IkdTVF9NQVBfUkVBRFdSSVRFIj5HU1RfTUFQX1JFQURXUklURTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwSW5mbyIgdGl0bGU9IkdzdE1hcEluZm8iPkdzdE1hcEluZm88L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NQVAtSU5GTy1JTklUOkNBUFMiIHRpdGxlPSJHU1RfTUFQX0lORk9fSU5JVCI+R1NUX01BUF9JTkZPX0lOSVQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TWVtb3J5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUJveGVkLVR5cGVzLmh0bWwiPkdCb3hlZDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RNZW1vcnkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RNZW1vcnkuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TWVtb3J5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkdzdE1lbW9yeSBpcyBhIGxpZ2h0d2VpZ2h0IHJlZmNvdW50ZWQgb2JqZWN0IHRoYXQgd3JhcHMgYSByZWdpb24gb2YgbWVtb3J5LgotVGhleSBhcmUgdHlwaWNhbGx5IHVzZWQgdG8gbWFuYWdlIHRoZSBkYXRhIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPgotPHA+QSBHc3RNZW1vcnkgb2JqZWN0IGhhcyBhbiBhbGxvY2F0ZWQgcmVnaW9uIG9mIG1lbW9yeSBvZiBtYXhzaXplLiBUaGUgbWF4aW11bQotc2l6ZSBkb2VzIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5IG9iamVjdC4gVGhlIG1lbW9yeQotYWxzbyBoYXMgYW4gb2Zmc2V0IGFuZCBzaXplIHByb3BlcnR5IHRoYXQgc3BlY2lmaWVzIHRoZSB2YWxpZCByYW5nZSBvZiBtZW1vcnkKLWluIHRoZSBhbGxvY2F0ZWQgcmVnaW9uLjwvcD4KLTxwPk1lbW9yeSBpcyB1c3VhbGx5IGNyZWF0ZWQgYnkgYWxsb2NhdG9ycyB3aXRoIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0b3ItYWxsb2MiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX2FsbG9jwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWxsb2NhdG9yX2FsbG9jKCk8L2NvZGU+PC9hPgotbWV0aG9kIGNhbGwuIFdoZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlzIHVzZWQgYXMgdGhlIGFsbG9jYXRvciwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHdpbGwKLWJlIHVzZWQuPC9wPgotPHA+TmV3IGFsbG9jYXRvcnMgY2FuIGJlIHJlZ2lzdGVyZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1yZWdpc3RlciIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfcmVnaXN0ZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hbGxvY2F0b3JfcmVnaXN0ZXIoKTwvY29kZT48L2E+LgotQWxsb2NhdG9ycyBhcmUgaWRlbnRpZmllZCBieSBuYW1lIGFuZCBjYW4gYmUgcmV0cmlldmVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtYWxsb2NhdG9yLWZpbmQiIHRpdGxlPSJnc3RfYWxsb2NhdG9yX2ZpbmTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hbGxvY2F0b3JfZmluZCgpPC9jb2RlPjwvYT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtYWxsb2NhdG9yLXNldC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdCgpPC9jb2RlPjwvYT4gY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZQotZGVmYXVsdCBhbGxvY2F0b3IuPC9wPgotPHA+TmV3IG1lbW9yeSBjYW4gYmUgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtbWVtb3J5LW5ldy13cmFwcGVkIiB0aXRsZT0iZ3N0X21lbW9yeV9uZXdfd3JhcHBlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9uZXdfd3JhcHBlZCgpPC9jb2RlPjwvYT4gdGhhdCB3cmFwcyB0aGUgbWVtb3J5Ci1hbGxvY2F0ZWQgZWxzZXdoZXJlLjwvcD4KLTxwPlJlZmNvdW50aW5nIG9mIHRoZSBtZW1vcnkgYmxvY2sgaXMgcGVyZm9ybWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktcmVmIiB0aXRsZT0iZ3N0X21lbW9yeV9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfcmVmKCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXVucmVmIiB0aXRsZT0iZ3N0X21lbW9yeV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV91bnJlZigpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhlIHNpemUgb2YgdGhlIG1lbW9yeSBjYW4gYmUgcmV0cmlldmVkIGFuZCBjaGFuZ2VkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWdldC1zaXplcyIgdGl0bGU9ImdzdF9tZW1vcnlfZ2V0X3NpemVzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X2dldF9zaXplcygpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlc2l6ZSIgdGl0bGU9ImdzdF9tZW1vcnlfcmVzaXplwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X3Jlc2l6ZSgpPC9jb2RlPjwvYT4gcmVzcGVjdGl2ZWx5LjwvcD4KLTxwPkdldHRpbmcgYWNjZXNzIHRvIHRoZSBkYXRhIG9mIHRoZSBtZW1vcnkgaXMgcGVyZm9ybWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIiB0aXRsZT0iZ3N0X21lbW9yeV9tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfbWFwKCk8L2NvZGU+PC9hPi4KLVRoZSBjYWxsIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byBvZmZzZXQgYnl0ZXMgaW50byB0aGUgcmVnaW9uIG9mIG1lbW9yeS4KLUFmdGVyIHRoZSBtZW1vcnkgYWNjZXNzIGlzIGNvbXBsZXRlZCwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X3VubWFwwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X3VubWFwKCk8L2NvZGU+PC9hPiBzaG91bGQgYmUgY2FsbGVkLjwvcD4KLTxwPk1lbW9yeSBjYW4gYmUgY29waWVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktY29weSIgdGl0bGU9ImdzdF9tZW1vcnlfY29wecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9jb3B5KCk8L2NvZGU+PC9hPiwgd2hpY2ggd2lsbCByZXR1cm4gYSB3cml0YWJsZQotY29weS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktc2hhcmUiIHRpdGxlPSJnc3RfbWVtb3J5X3NoYXJlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X3NoYXJlKCk8L2NvZGU+PC9hPiB3aWxsIGNyZWF0ZSBhIG5ldyBtZW1vcnkgYmxvY2sgdGhhdCBzaGFyZXMgdGhlCi1tZW1vcnkgd2l0aCBhbiBleGlzdGluZyBtZW1vcnkgYmxvY2sgYXQgYSBjdXN0b20gb2Zmc2V0IGFuZCB3aXRoIGEgY3VzdG9tCi1zaXplLjwvcD4KLTxwPk1lbW9yeSBjYW4gYmUgZWZmaWNpZW50bHkgbWVyZ2VkIHdoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktaXMtc3BhbiIgdGl0bGU9ImdzdF9tZW1vcnlfaXNfc3BhbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9pc19zcGFuKCk8L2NvZGU+PC9hPiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE1lbW9yeS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1GTEFHUzpDQVBTIj48L2E+PGgzPkdTVF9NRU1PUllfRkxBR1MoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVNT1JZX0ZMQUdTKG1lbSkgIEdTVF9NSU5JX09CSkVDVF9GTEFHUyAobWVtKQotPC9wcmU+Ci08cD5BIGZsYWdzIHdvcmQgY29udGFpbmluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1lbW9yeUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5RmxhZ3M8L3NwYW4+PC9hPiBmbGFncyBzZXQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1GTEFHUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRU1PUlktRkxBRy1JUy1TRVQ6Q0FQUyI+PC9hPjxoMz5HU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FTU9SWV9GTEFHX0lTX1NFVChtZW0sZmxhZykgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQgKG1lbSxmbGFnKQotPC9wcmU+Ci08cD5HaXZlcyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgZmxhZyBvbiBhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTUVNT1JZLUZMQUctSVMtU0VULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RNZW1vcnlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUZsYWdzPC9zcGFuPjwvYT4gdG8gY2hlY2suPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRU1PUlktRkxBRy1VTlNFVDpDQVBTIj48L2E+PGgzPkdTVF9NRU1PUllfRkxBR19VTlNFVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NRU1PUllfRkxBR19VTlNFVChtZW0sZmxhZykgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCAobWVtLCBmbGFnKQotPC9wcmU+Ci08cD5DbGVhciBhIHNwZWNpZmljIGZsYWcgb24gYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1GTEFHLVVOU0VULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RNZW1vcnlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUZsYWdzPC9zcGFuPjwvYT4gdG8gY2xlYXIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRU1PUlktSVMtUkVBRE9OTFk6Q0FQUyI+PC9hPjxoMz5HU1RfTUVNT1JZX0lTX1JFQURPTkxZKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FTU9SWV9JU19SRUFET05MWShtZW0pICAgICAgICBHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKG1lbSxHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpCi08L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSBpcyByZWFkb25seS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTUVNT1JZLUlTLVJFQURPTkxZLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1JUy1OTy1TSEFSRTpDQVBTIj48L2E+PGgzPkdTVF9NRU1PUllfSVNfTk9fU0hBUkUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVNT1JZX0lTX05PX1NIQVJFKG1lbSkgICAgICAgIEdTVF9NRU1PUllfRkxBR19JU19TRVQobWVtLEdTVF9NRU1PUllfRkxBR19OT19TSEFSRSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIGNhbm5vdCBiZSBzaGFyZWQgYmV0d2VlbiBidWZmZXJzPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1JUy1OTy1TSEFSRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRU1PUlktSVMtWkVSTy1QQURERUQ6Q0FQUyI+PC9hPjxoMz5HU1RfTUVNT1JZX0lTX1pFUk9fUEFEREVEKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FTU9SWV9JU19aRVJPX1BBRERFRChtZW0pICAgICBHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKG1lbSxHU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQpCi08L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBwYWRkaW5nIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSBpcyAwIGZpbGxlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTUVNT1JZLUlTLVpFUk8tUEFEREVELnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1JUy1aRVJPLVBSRUZJWEVEOkNBUFMiPjwvYT48aDM+R1NUX01FTU9SWV9JU19aRVJPX1BSRUZJWEVEKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FTU9SWV9JU19aRVJPX1BSRUZJWEVEKG1lbSkgICBHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKG1lbSxHU1RfTUVNT1JZX0ZMQUdfWkVST19QUkVGSVhFRCkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlIHByZWZpeCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0gaXMgMCBmaWxsZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1JUy1aRVJPLVBSRUZJWEVELnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1JUy1QSFlTSUNBTExZLUNPTlRJR1VPVVM6Q0FQUyI+PC9hPjxoMz5HU1RfTUVNT1JZX0lTX1BIWVNJQ0FMTFlfQ09OVElHVU9VUygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NRU1PUllfSVNfUEhZU0lDQUxMWV9DT05USUdVT1VTKG1lbSkgICAgIEdTVF9NRU1PUllfRkxBR19JU19TRVQobWVtLEdTVF9NRU1PUllfRkxBR19QSFlTSUNBTExZX0NPTlRJR1VPVVMpCi08L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSBpcyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1JUy1QSFlTSUNBTExZLUNPTlRJR1VPVVMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUVNT1JZLUlTLU5PVC1NQVBQQUJMRTpDQVBTIj48L2E+PGgzPkdTVF9NRU1PUllfSVNfTk9UX01BUFBBQkxFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEUobWVtKSAgICAgR1NUX01FTU9SWV9GTEFHX0lTX1NFVChtZW0sR1NUX01FTU9SWV9GTEFHX05PVF9NQVBQQUJMRSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIGNhbid0IGJlIG1hcHBlZCB2aWEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIiB0aXRsZT0iZ3N0X21lbW9yeV9tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfbWFwKCk8L2NvZGU+PC9hPiB3aXRob3V0IGFueSBwcmVjb25kaXRpb25zPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FTU9SWS1JUy1OT1QtTUFQUEFCTEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNZW1vcnlNYXBGdW5jdGlvbiI+PC9hPjxoMz5Hc3RNZW1vcnlNYXBGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdE1lbW9yeU1hcEZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gbWF4c2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNYXBGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBtZW1vcnkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFjY29yZGluZyB0byB0aGUgbW9kZSBzcGVjaWZpZWQKLWluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotLiBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIHBvaW50ZXIgdGhhdCBjb250YWlucyBhdCBsZWFzdAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT4KLSBieXRlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZW1vcnlNYXBGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1heHNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zaXplIHRvIG1hcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFjY2VzcyBtb2RlIGZvciB0aGUgbWVtb3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZW1vcnlNYXBGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgcG9pbnRlciB0byBtZW1vcnkgb2Ygd2hpY2ggYXQgbGVhc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1heHNpemU8L2NvZGU+PC9lbT4KLWJ5dGVzIGNhbiBiZQotYWNjZXNzZWQgYWNjb3JkaW5nIHRvIHRoZSBhY2Nlc3MgcGF0dGVybiBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWVtb3J5TWFwRnVsbEZ1bmN0aW9uIj48L2E+PGgzPkdzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwSW5mbyIgdGl0bGU9IkdzdE1hcEluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNYXBJbmZvPC9zcGFuPjwvYT4gKmluZm88L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBtYXhzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbWVtb3J5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIG1vZGUgc3BlY2lmaWVkCi1pbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPgotJ3MgZmxhZ3MuIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGF0IGxlYXN0Ci08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1hcEluZm8iIHRpdGxlPSJHc3RNYXBJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWFwSW5mbzwvc3Bhbj48L2E+IHRvIG1hcCB3aXRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1heHNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zaXplIHRvIG1hcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWVtb3J5TWFwRnVsbEZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBwb2ludGVyIHRvIG1lbW9yeSBvZiB3aGljaCBhdCBsZWFzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWF4c2l6ZTwvY29kZT48L2VtPgotYnl0ZXMgY2FuIGJlCi1hY2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIGFjY2VzcyBwYXR0ZXJuIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Ci0ncyBmbGFncy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiI+PC9hPjxoMz5Hc3RNZW1vcnlVbm1hcEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdE1lbW9yeVVubWFwRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybiB0aGUgcG9pbnRlciBwcmV2aW91c2x5IHJldHJpZXZlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LW1hcCIgdGl0bGU9ImdzdF9tZW1vcnlfbWFwwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X21hcCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWVtb3J5VW5tYXBGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb24iPjwvYT48aDM+R3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwSW5mbyIgdGl0bGU9IkdzdE1hcEluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNYXBJbmZvPC9zcGFuPjwvYT4gKmluZm88L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJuIHRoZSBwb2ludGVyIHByZXZpb3VzbHkgcmV0cmlldmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIiB0aXRsZT0iZ3N0X21lbW9yeV9tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfbWFwKCk8L2NvZGU+PC9hPiB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmZvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwSW5mbyIgdGl0bGU9IkdzdE1hcEluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNYXBJbmZvPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWVtb3J5Q29weUZ1bmN0aW9uIj48L2E+PGgzPkdzdE1lbW9yeUNvcHlGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdE1lbW9yeUNvcHlGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3B5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0gc3RhcnRpbmcgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIGFuZCByZXR1cm4gdGhlbSB3cmFwcGVkIGluIGEKLW5ldyBHc3RNZW1vcnkgb2JqZWN0LgotSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBpcyBzZXQgdG8gLTEsIGFsbCBieXRlcyBzdGFydGluZyBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYXJlIGNvcGllZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZW1vcnlDb3B5RnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbiBvZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc2l6ZSBvciAtMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWVtb3J5Q29weUZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gb2JqZWN0IHdyYXBwaW5nIGEgY29weSBvZiB0aGUgcmVxdWVzdGVkIHJlZ2lvbiBpbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uIj48L2E+PGgzPkdzdE1lbW9yeVNoYXJlRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT7CoCoKLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2hhcmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSBzdGFydGluZyBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYW5kIHJldHVybiB0aGVtIHdyYXBwZWQgaW4gYQotbmV3IEdzdE1lbW9yeSBvYmplY3QuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gaXMgc2V0IHRvIC0xLCBhbGwgYnl0ZXMgc3RhcnRpbmcgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIGFyZQotc2hhcmVkLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1ha2UgYSBjb3B5IG9mIHRoZSBieXRlcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWVtb3J5U2hhcmVGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIG9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzaXplIG9yIC0xPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gb2JqZWN0IHNoYXJpbmcgdGhlIHJlcXVlc3RlZCByZWdpb24gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbiI+PC9hPjxoMz5Hc3RNZW1vcnlJc1NwYW5GdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW0yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiAqb2Zmc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0xPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0yPC9jb2RlPjwvZW0+Ci0gb2NjdXB5IGNvbnRpZ3VvdXMgbWVtb3J5IGFuZCByZXR1cm4gdGhlIG9mZnNldCBvZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTE8L2NvZGU+PC9lbT4KLSBpbiB0aGUgcGFyZW50IGJ1ZmZlciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtMjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSByZXN1bHQgb2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtMTwvY29kZT48L2VtPgotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0yPC9jb2RlPjwvZW0+Ci1hcmUgaW4gY29udGlndW91cyBtZW1vcnkuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktaW5pdCI+PC9hPjxoMz5nc3RfbWVtb3J5X2luaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVtb3J5X2luaXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RNZW1vcnlGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeUZsYWdzPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiAqYWxsb2NhdG9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG1heHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBhbGlnbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5pdGlhbGl6ZXMgYSBuZXdseSBhbGxvY2F0ZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuIFRoaXMgZnVuY3Rpb24KLXdpbGwgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtaW5pdCIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfaW5pdCgpPC9jb2RlPjwvYT4gd2l0aCB0aGUgZGVmYXVsdCBtZW1vcnkgcGFyYW1ldGVycy48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LWluaXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlGbGFncyIgdGl0bGU9ImVudW0gR3N0TWVtb3J5RmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnlGbGFnczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFsbG9jYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhzaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRvdGFsIHNpemUgb2YgdGhlIG1lbW9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbGlnbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBhbGlnbm1lbnQgb2YgdGhlIG1lbW9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgb2Zmc2V0IGluIHRoZSBtZW1vcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaXplIG9mIHZhbGlkIGRhdGEgaW4gdGhlIG1lbW9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LWlzLXR5cGUiPjwvYT48aDM+Z3N0X21lbW9yeV9pc190eXBlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfbWVtb3J5X2lzX3R5cGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm1lbV90eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSBpZiBhbGxvY2F0ZWQgd2l0aCBhbiBhbGxvY2F0b3IgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW1fdHlwZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktaXMtdHlwZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbV90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBtZW1vcnkgdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1pcy10eXBlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLXdhcyBhbGxvY2F0ZWQgZnJvbSBhbiBhbGxvY2F0b3IgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW1fdHlwZTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LXJlZiI+PC9hPjxoMz5nc3RfbWVtb3J5X3JlZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKgotZ3N0X21lbW9yeV9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluY3JlYXNlIHRoZSByZWZjb3VudCBvZiB0aGlzIG1lbW9yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LXJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtb3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG1lbW9yeSB0byByZWZjb3VudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktcmVmLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbW9yeTwvY29kZT48L2VtPgotKGZvciBjb252ZW5pZW5jZSB3aGVuIGRvaW5nIGFzc2lnbm1lbnRzKS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS11bnJlZiI+PC9hPjxoMz5nc3RfbWVtb3J5X3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lbW9yeV91bnJlZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW1vcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RGVjcmVhc2UgdGhlIHJlZmNvdW50IG9mIGFuIG1lbW9yeSwgZnJlZWluZyBpdCBpZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktdW5yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbW9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWVtb3J5IHRvIHJlZmNvdW50LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktZ2V0LXNpemVzIj48L2E+PGgzPmdzdF9tZW1vcnlfZ2V0X3NpemVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci1nc3RfbWVtb3J5X2dldF9zaXplcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICpvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgY3VycmVudCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhzaXplPC9jb2RlPjwvZW0+Ci0gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktZ2V0LXNpemVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byBvZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWF4c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBvaW50ZXIgdG8gbWF4c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1nZXQtc2l6ZXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY3VycmVudCBzaXplcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1yZXNpemUiPjwvYT48aDM+Z3N0X21lbW9yeV9yZXNpemXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVtb3J5X3Jlc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+ICptZW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlc2l6ZSB0aGUgbWVtb3J5IHJlZ2lvbi4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIHNob3VsZCBiZSB3cml0YWJsZSBhbmQgb2Zmc2V0ICsgc2l6ZSBzaG91bGQgYmUKLWxlc3MgdGhhbiB0aGUgbWF4c2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBRy1aRVJPLVBSRUZJWEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVNT1JZX0ZMQUdfWkVST19QUkVGSVhFRDwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLVpFUk8tUEFEREVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQ8L3NwYW4+PC9hPiB3aWxsIGJlCi1jbGVhcmVkIHdoZW4gb2Zmc2V0IG9yIHBhZGRpbmcgaXMgaW5jcmVhc2VkIHJlc3BlY3RpdmVseS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LXJlc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbmV3IG9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBuZXcgc2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LWxvY2siPjwvYT48aDM+Z3N0X21lbW9yeV9sb2NrKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgIGdzdF9tZW1vcnlfbG9jayhtLGYpICAgICAgICBnc3RfbWluaV9vYmplY3RfbG9jayAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG0pLCAoZikpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS11bmxvY2siPjwvYT48aDM+Z3N0X21lbW9yeV91bmxvY2soKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgZ3N0X21lbW9yeV91bmxvY2sobSxmKSAgICAgIGdzdF9taW5pX29iamVjdF91bmxvY2sgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtKSwgKGYpKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktaXMtd3JpdGFibGUiPjwvYT48aDM+Z3N0X21lbW9yeV9pc193cml0YWJsZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICBnc3RfbWVtb3J5X2lzX3dyaXRhYmxlKG0pICAgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobSkpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9tZW1vcnlfbWFrZV93cml0YWJsZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICBnc3RfbWVtb3J5X21ha2Vfd3JpdGFibGUobSkgR1NUX01FTU9SWV9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG0pKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LW1ha2UtbWFwcGVkIj48L2E+PGgzPmdzdF9tZW1vcnlfbWFrZV9tYXBwZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT7CoCoKLWdzdF9tZW1vcnlfbWFrZV9tYXBwZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIiB0aXRsZT0iR3N0TWFwSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEluZm88L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1hcEZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWFwRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiBvYmplY3QgdGhhdCBpcyBtYXBwZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLS4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIGlzIG1hcHBhYmxlCi13aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1hcHBlZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0gZGlyZWN0bHkuIE90aGVyd2lzZSBhCi1tYXBwZWQgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0gaXMgcmV0dXJuZWQuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2Ygb2xkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBhIG5ldwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1tYWtlLW1hcHBlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciBmb3IgaW5mby4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWFwcGluZyBmbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1tYWtlLW1hcHBlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gb2JqZWN0IG1hcHBlZAotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuIGEgbWFwcGluZyBpcyBub3QgcG9zc2libGUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1tYXAiPjwvYT48aDM+Z3N0X21lbW9yeV9tYXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9tZW1vcnlfbWFwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1hcEluZm8iIHRpdGxlPSJHc3RNYXBJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWFwSW5mbzwvc3Bhbj48L2E+ICppbmZvPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1hcEZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWFwRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaWxsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Ci0gd2l0aCB0aGUgcG9pbnRlciBhbmQgc2l6ZXMgb2YgdGhlIG1lbW9yeSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVtPC9jb2RlPjwvZW0+Ci0gdGhhdCBjYW4gYmUKLWFjY2Vzc2VkIGFjY29yZGluZyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gZm9yIHZhcmlvdXMgcmVhc29uczo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+dGhlIG1lbW9yeSBiYWNrZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIGlzIG5vdCBhY2Nlc3NpYmxlIHdpdGggdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotLjwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+dGhlIG1lbW9yeSB3YXMgYWxyZWFkeSBtYXBwZWQgd2l0aCBhIGRpZmZlcmVudCBtYXBwaW5nLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Ci0gYW5kIGl0cyBjb250ZW50cyByZW1haW4gdmFsaWQgZm9yIGFzIGxvbmcgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIGlzIHZhbGlkIGFuZAotdW50aWwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X3VubWFwwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X3VubWFwKCk8L2NvZGU+PC9hPiBpcyBjYWxsZWQuPC9wPgotPHA+Rm9yIGVhY2ggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIiB0aXRsZT0iZ3N0X21lbW9yeV9tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfbWFwKCk8L2NvZGU+PC9hPiBjYWxsLCBhIGNvcnJlc3BvbmRpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktdW5tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X3VubWFwwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVtb3J5X3VubWFwKCk8L2NvZGU+PC9hPiBjYWxsCi1zaG91bGQgYmUgZG9uZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LW1hcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciBmb3IgaW5mby4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWFwcGluZyBmbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1tYXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG1hcCBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktdW5tYXAiPjwvYT48aDM+Z3N0X21lbW9yeV91bm1hcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZW1vcnlfdW5tYXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIiB0aXRsZT0iR3N0TWFwSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEluZm88L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWxlYXNlIHRoZSBtZW1vcnkgb2J0YWluZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X21hcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9tYXAoKTwvY29kZT48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS11bm1hcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIiB0aXRsZT0iR3N0TWFwSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1hcEluZm88L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LWNvcHkiPjwvYT48aDM+Z3N0X21lbW9yeV9jb3B5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVtb3J5X2NvcHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJuIGEgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTwvY29kZT48L2VtPgotIHN0YXJ0aW5nIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotLiBUaGlzIGNvcHkgaXMKLWd1YXJhbnRlZWQgdG8gYmUgd3JpdGFibGUuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIHNldCB0byAtMSB0byByZXR1cm4gYSBjb3B5Ci1mcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSB0byB0aGUgZW5kIG9mIHRoZSBtZW1vcnkgcmVnaW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktY29weS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9mZnNldCB0byBjb3B5IGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnNpemUgdG8gY29weSwgb3IgLTEgdG8gY29weSB0byB0aGUgZW5kIG9mIHRoZSBtZW1vcnkgcmVnaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LWNvcHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1zaGFyZSI+PC9hPjxoMz5nc3RfbWVtb3J5X3NoYXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVtb3J5X3NoYXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJuIGEgc2hhcmVkIGNvcHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW08L2NvZGU+PC9lbT4KLSBzdGFydGluZyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLS4gTm8KLW1lbW9yeSBjb3B5IGlzIHBlcmZvcm1lZCBhbmQgdGhlIG1lbW9yeSByZWdpb24gaXMgc2ltcGx5IHNoYXJlZC4gVGhlIHJlc3VsdAotaXMgZ3VhcmFudGVlZCB0byBiZSBub24td3JpdGFibGUuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIHNldCB0byAtMSB0byByZXR1cm4gYSBzaGFyZWQKLWNvcHkgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gdG8gdGhlIGVuZCBvZiB0aGUgbWVtb3J5IHJlZ2lvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVtb3J5LXNoYXJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b2Zmc2V0IHRvIHNoYXJlIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnNpemUgdG8gc2hhcmUsIG9yIC0xIHRvIHNoYXJlIHRvIHRoZSBlbmQgb2YgdGhlIG1lbW9yeSByZWdpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktc2hhcmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1pcy1zcGFuIj48L2E+PGgzPmdzdF9tZW1vcnlfaXNfc3BhbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X21lbW9yeV9pc19zcGFuICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gKm1lbTE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPiAqbWVtMjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+ICpvZmZzZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lbTE8L2NvZGU+PC9lbT4KLSBhbmQgbWVtMiBzaGFyZSB0aGUgbWVtb3J5IHdpdGggYSBjb21tb24gcGFyZW50IG1lbW9yeSBvYmplY3QKLWFuZCB0aGF0IHRoZSBtZW1vcnkgaXMgY29udGlndW91cy48L3A+Ci08cD5JZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGUgbWVtb3J5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0xPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZW0yPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIG1lcmdlZAotZWZmaWNpZW50bHkgYnkgcGVyZm9ybWluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1zaGFyZSIgdGl0bGU9ImdzdF9tZW1vcnlfc2hhcmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfc2hhcmUoKTwvY29kZT48L2E+IG9uIHRoZSBwYXJlbnQgb2JqZWN0IGZyb20KLXRoZSByZXR1cm5lZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lbW9yeS1pcy1zcGFuLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lbTI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcG9pbnRlciB0byBhIHJlc3VsdCBvZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZW1vcnktaXMtc3Bhbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbWVtb3J5IGlzIGNvbnRpZ3VvdXMgYW5kIG9mIGEgY29tbW9uIHBhcmVudC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RNZW1vcnkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1lbW9yeUZsYWdzIj48L2E+PGgzPmVudW0gR3N0TWVtb3J5RmxhZ3M8L2gzPgotPHA+RmxhZ3MgZm9yIHdyYXBwZWQgbWVtb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE1lbW9yeUZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FTU9SWS1GTEFHLVJFQURPTkxZOkNBUFMiPjwvYT5HU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bWVtb3J5IGlzIHJlYWRvbmx5LiBJdCBpcyBub3QgYWxsb3dlZCB0byBtYXAgdGhlCi1tZW1vcnkgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1BUC1XUklURTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01BUF9XUklURTwvc3Bhbj48L2E+LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVNT1JZLUZMQUctTk8tU0hBUkU6Q0FQUyI+PC9hPkdTVF9NRU1PUllfRkxBR19OT19TSEFSRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5tZW1vcnkgbXVzdCBub3QgYmUgc2hhcmVkLiBDb3BpZXMgd2lsbCBoYXZlIHRvIGJlCi1tYWRlIHdoZW4gdGhpcyBtZW1vcnkgbmVlZHMgdG8gYmUgc2hhcmVkIGJldHdlZW4gYnVmZmVycy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FTU9SWS1GTEFHLVpFUk8tUFJFRklYRUQ6Q0FQUyI+PC9hPkdTVF9NRU1PUllfRkxBR19aRVJPX1BSRUZJWEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBtZW1vcnkgcHJlZml4IGlzIGZpbGxlZCB3aXRoIDAgYnl0ZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FTU9SWS1GTEFHLVpFUk8tUEFEREVEOkNBUFMiPjwvYT5HU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIG1lbW9yeSBwYWRkaW5nIGlzIGZpbGxlZCB3aXRoIDAgYnl0ZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FTU9SWS1GTEFHLVBIWVNJQ0FMTFktQ09OVElHVU9VUzpDQVBTIj48L2E+R1NUX01FTU9SWV9GTEFHX1BIWVNJQ0FMTFlfQ09OVElHVU9VUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgbWVtb3J5IGlzIHBoeXNpY2FsbHkgY29udGlndW91cy4gKFNpbmNlIDEuMik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FTU9SWS1GTEFHLU5PVC1NQVBQQUJMRTpDQVBTIj48L2E+R1NUX01FTU9SWV9GTEFHX05PVF9NQVBQQUJMRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgbWVtb3J5IGNhbid0IGJlIG1hcHBlZCB2aWEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIiB0aXRsZT0iZ3N0X21lbW9yeV9tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZW1vcnlfbWFwKCk8L2NvZGU+PC9hPiB3aXRob3V0IGFueSBwcmVjb25kaXRpb25zLiAoU2luY2UgMS4yKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVNT1JZLUZMQUctTEFTVDpDQVBTIj48L2E+R1NUX01FTU9SWV9GTEFHX0xBU1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Zmlyc3QgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1lbW9yeS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdE1lbW9yeTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE1lbW9yeSB7Ci0gIEdzdE1pbmlPYmplY3QgICBtaW5pX29iamVjdDsKLQotICBHc3RBbGxvY2F0b3IgICAqYWxsb2NhdG9yOwotCi0gIEdzdE1lbW9yeSAgICAgICpwYXJlbnQ7Ci0gIGdzaXplICAgICAgICAgICBtYXhzaXplOwotICBnc2l6ZSAgICAgICAgICAgYWxpZ247Ci0gIGdzaXplICAgICAgICAgICBvZmZzZXQ7Ci0gIGdzaXplICAgICAgICAgICBzaXplOwotfTsKLTwvcHJlPgotPHA+QmFzZSBzdHJ1Y3R1cmUgZm9yIG1lbW9yeSBpbXBsZW1lbnRhdGlvbnMuIEN1c3RvbSBtZW1vcnkgd2lsbCBwdXQgdGhpcyBzdHJ1Y3R1cmUKLWFzIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlaXIgc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE1lbW9yeS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZW1vcnktc3RydWN0Lm1pbmktb2JqZWN0Ij48L2E+bWluaV9vYmplY3Q8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnBhcmVudCBzdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1lbW9yeS1zdHJ1Y3QuYWxsb2NhdG9yIj48L2E+YWxsb2NhdG9yPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5wb2ludGVyIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lbW9yeTwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LXN0cnVjdC5wYXJlbnQiPjwvYT5wYXJlbnQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnBhcmVudCBtZW1vcnkgYmxvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LXN0cnVjdC5tYXhzaXplIj48L2E+bWF4c2l6ZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1heGltdW0gc2l6ZSBhbGxvY2F0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LXN0cnVjdC5hbGlnbiI+PC9hPmFsaWduPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYWxpZ25tZW50IG9mIHRoZSBtZW1vcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LXN0cnVjdC5vZmZzZXQiPjwvYT5vZmZzZXQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvZmZzZXQgd2hlcmUgdmFsaWQgZGF0YSBzdGFydHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVtb3J5LXN0cnVjdC5zaXplIj48L2E+c2l6ZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpemUgb2YgdmFsaWQgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWFwRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RNYXBGbGFnczwvaDM+Ci08cD5GbGFncyB1c2VkIHdoZW4gbWFwcGluZyBtZW1vcnk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNYXBGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NQVAtUkVBRDpDQVBTIj48L2E+R1NUX01BUF9SRUFEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPm1hcCBmb3IgcmVhZCBhY2Nlc3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1BUC1XUklURTpDQVBTIj48L2E+R1NUX01BUF9XUklURTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5tYXAgZm9yIHdyaXRlIGFjY2VzczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUFQLUZMQUctTEFTVDpDQVBTIj48L2E+R1NUX01BUF9GTEFHX0xBU1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Zmlyc3QgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NQVAtUkVBRFdSSVRFOkNBUFMiPjwvYT48aDM+R1NUX01BUF9SRUFEV1JJVEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01BUF9SRUFEV1JJVEUgICAgICAoR1NUX01BUF9SRUFEIHwgR1NUX01BUF9XUklURSkKLTwvcHJlPgotPHA+R3N0TWFwRmxhZ3MgdmFsdWUgYWxpYXMgZm9yIEdTVF9NQVBfUkVBRCB8IEdTVF9NQVBfV1JJVEU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1hcEluZm8iPjwvYT48aDM+R3N0TWFwSW5mbzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgewotICBHc3RNZW1vcnkgKm1lbW9yeTsKLSAgR3N0TWFwRmxhZ3MgZmxhZ3M7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3NpemUgbWF4c2l6ZTsKLX0gR3N0TWFwSW5mbzsKLTwvcHJlPgotPHA+QSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGEgbWFwIG9wZXJhdGlvbiBzdWNoIGFzCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1tYXAiIHRpdGxlPSJnc3RfbWVtb3J5X21hcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lbW9yeV9tYXAoKTwvY29kZT48L2E+LiBJdCBjb250YWlucyB0aGUgZGF0YSBhbmQgc2l6ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNYXBJbmZvLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZW1vcnk8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1hcEluZm8ubWVtb3J5Ij48L2E+bWVtb3J5PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIHBvaW50ZXIgdG8gdGhlIG1hcHBlZCBtZW1vcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1hcEZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWFwRmxhZ3M8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWFwSW5mby5mbGFncyI+PC9hPmZsYWdzPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5mbGFncyB1c2VkIHdoZW4gbWFwcGluZyB0aGUgbWVtb3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1hcEluZm8uZGF0YSI+PC9hPmRhdGE8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gdGhlIG1hcHBlZCBkYXRhLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWFwSW5mby5zaXplIj48L2E+c2l6ZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHZhbGlkIHNpemUgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNYXBJbmZvLm1heHNpemUiPjwvYT5tYXhzaXplPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWF4aW11bSBieXRlcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUFQLUlORk8tSU5JVDpDQVBTIj48L2E+PGgzPkdTVF9NQVBfSU5GT19JTklUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NQVBfSU5GT19JTklUIHsgTlVMTCwgKEdzdE1hcEZsYWdzKSAwLCBOVUxMLCAwLCAwLCB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19Ci08L3ByZT4KLTxwPkluaXRpYWxpemVyIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwSW5mbyIgdGl0bGU9IkdzdE1hcEluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNYXBJbmZvPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TWVtb3J5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdE1lc3NhZ2UuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0TWVzc2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmUyOGZhLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0TWVzc2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTg0NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0TWVzc2FnZTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0TWVzc2FnZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0TWVzc2FnZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdE1lc3NhZ2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RNZXNzYWdlLnRvcF9vZl9wYWdlIj48L2E+R3N0TWVzc2FnZTwvc3Bhbj48L2gyPgotPHA+R3N0TWVzc2FnZSDigJQgTGlnaHR3ZWlnaHQgb2JqZWN0cyB0byBzaWduYWwgdGhlIGFwcGxpY2F0aW9uIG9mCi0gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lIGV2ZW50czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RNZXNzYWdlLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TUkM6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1NSQygpIj5HU1RfTUVTU0FHRV9TUkM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNSQy1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9TUkNfTkFNRSgpIj5HU1RfTUVTU0FHRV9TUkNfTkFNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVElNRVNUQU1QOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9USU1FU1RBTVAoKSI+R1NUX01FU1NBR0VfVElNRVNUQU1QPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TRVFOVU06Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1NFUU5VTSgpIj5HU1RfTUVTU0FHRV9TRVFOVU08L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1RZUEUoKSI+R1NUX01FU1NBR0VfVFlQRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVFlQRS1JUy1FWFRFTkRFRDpDQVBTIiB0aXRsZT0iR1NUX01FU1NBR0VfVFlQRV9JU19FWFRFTkRFRCgpIj5HU1RfTUVTU0FHRV9UWVBFX0lTX0VYVEVOREVEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1RZUEVfTkFNRSgpIj5HU1RfTUVTU0FHRV9UWVBFX05BTUU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdHlwZS10by1xdWFyayIgdGl0bGU9ImdzdF9tZXNzYWdlX3R5cGVfdG9fcXVhcmvCoCgpIj5nc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXR5cGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lwqAoKSI+Z3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3JlZsKgKCkiPmdzdF9tZXNzYWdlX3JlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS11bnJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3VucmVmwqAoKSI+Z3N0X21lc3NhZ2VfdW5yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1jb3B5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfY29wecKgKCkiPmdzdF9tZXNzYWdlX2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmXCoCgpIj5nc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9tYWtlX3dyaXRhYmxlKCkiPmdzdF9tZXNzYWdlX21ha2Vfd3JpdGFibGU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1zZXFudW0iIHRpdGxlPSJnc3RfbWVzc2FnZV9nZXRfc2VxbnVtwqAoKSI+Z3N0X21lc3NhZ2VfZ2V0X3NlcW51bTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bcKgKCkiPmdzdF9tZXNzYWdlX3NldF9zZXFudW08L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1oYXMtbmFtZSIgdGl0bGU9ImdzdF9tZXNzYWdlX2hhc19uYW1lwqAoKSI+Z3N0X21lc3NhZ2VfaGFzX25hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9pc193cml0YWJsZSgpIj5nc3RfbWVzc2FnZV9pc193cml0YWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1yZXBsYWNlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcmVwbGFjZcKgKCkiPmdzdF9tZXNzYWdlX3JlcGxhY2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZW9zIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2Vvc8KgKCkiPmdzdF9tZXNzYWdlX25ld19lb3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZXJyb3IiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfZXJyb3LCoCgpIj5nc3RfbWVzc2FnZV9uZXdfZXJyb3I8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZXJyb3Itd2l0aC1kZXRhaWxzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2Vycm9yX3dpdGhfZGV0YWlsc8KgKCkiPmdzdF9tZXNzYWdlX25ld19lcnJvcl93aXRoX2RldGFpbHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3IiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcsKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWVycm9yLWRldGFpbHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcl9kZXRhaWxzwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3JfZGV0YWlsczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy13YXJuaW5nIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmfCoCgpIj5nc3RfbWVzc2FnZV9uZXdfd2FybmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy13YXJuaW5nLXdpdGgtZGV0YWlscyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld193YXJuaW5nX3dpdGhfZGV0YWlsc8KgKCkiPmdzdF9tZXNzYWdlX25ld193YXJuaW5nX3dpdGhfZGV0YWlsczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZ8KgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utd2FybmluZy1kZXRhaWxzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZ19kZXRhaWxzwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZ19kZXRhaWxzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWluZm8iIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfaW5mb8KgKCkiPmdzdF9tZXNzYWdlX25ld19pbmZvPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWluZm8td2l0aC1kZXRhaWxzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2luZm9fd2l0aF9kZXRhaWxzwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2luZm9fd2l0aF9kZXRhaWxzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWluZm8iIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9pbmZvwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfaW5mbzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1pbmZvLWRldGFpbHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9pbmZvX2RldGFpbHPCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9pbmZvX2RldGFpbHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctdGFnIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3RhZ8KgKCkiPmdzdF9tZXNzYWdlX25ld190YWc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtdGFnIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfdGFnwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfdGFnPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWJ1ZmZlcmluZyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19idWZmZXJpbmfCoCgpIj5nc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ8KgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtYnVmZmVyaW5nLXN0YXRzIiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0c8KgKCkiPmdzdF9tZXNzYWdlX3NldF9idWZmZXJpbmdfc3RhdHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtYnVmZmVyaW5nLXN0YXRzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWNoYW5nZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZMKgKCkiPmdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0YXRlLWNoYW5nZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGF0ZS1kaXJ0eSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0ecKgKCkiPmdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGVwLWRvbmUiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0ZXBfZG9uZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdGVwLWRvbmUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY2xvY2stcHJvdmlkZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stcHJvdmlkZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX3Byb3ZpZGXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWNsb2NrLWxvc3QiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdMKgKCkiPmdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWNsb2NrLWxvc3QiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0wqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1uZXctY2xvY2siIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfbmV3X2Nsb2NrwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X25ld19jbG9jazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1uZXctY2xvY2siIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2vCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYXBwbGljYXRpb24iIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb27CoCgpIj5nc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZWxlbWVudCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19lbGVtZW50wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY3VzdG9tIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbcKgKCkiPmdzdF9tZXNzYWdlX25ld19jdXN0b208L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc2VnbWVudC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnTCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmXCoCgpIj5nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZcKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1kdXJhdGlvbi1jaGFuZ2VkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWTCoCgpIj5nc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1sYXRlbmN5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3nCoCgpIj5nc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1hc3luYy1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydMKgKCkiPmdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1hc3luYy1kb25lIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmXCoCgpIj5nc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1hc3luYy1kb25lIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfZG9uZcKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RlcC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0ZXBfc3RhcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfc3RhcnTCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXFvcyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19xb3PCoCgpIj5nc3RfbWVzc2FnZV9uZXdfcW9zPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1xb3MtdmFsdWVzIiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc2V0X3Fvc192YWx1ZXPCoCgpIj5nc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtcW9zLXN0YXRzIiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0c8KgKCkiPmdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcW9zwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcW9zPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXFvcy12YWx1ZXMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1xb3Mtc3RhdHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHPCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctdG9jIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3RvY8KgKCkiPmdzdF9tZXNzYWdlX25ld190b2M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtdG9jIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfdG9jwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfdG9jPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXJlc2V0LXRpbWUiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfcmVzZXRfdGltZcKgKCkiPmdzdF9tZXNzYWdlX25ld19yZXNldF90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXJlc2V0LXRpbWUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9yZXNldF90aW1lwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcmVzZXRfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdHJlYW0tc3RhcnQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXJ0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGFydDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtZ3JvdXAtaWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfZ3JvdXBfaWTCoCgpIj5nc3RfbWVzc2FnZV9zZXRfZ3JvdXBfaWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1ncm91cC1pZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2dyb3VwX2lkwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZ3JvdXBfaWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RyZWFtLWNvbGxlY3Rpb24iIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb27CoCgpIj5nc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RyZWFtLWNvbGxlY3Rpb24iIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbsKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cnVjdHVyZS1jaGFuZ2UiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZcKgKCkiPmdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0cnVjdHVyZS1jaGFuZ2UiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1yZXF1ZXN0LXN0YXRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGXCoCgpIj5nc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1yZXF1ZXN0LXN0YXRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZcKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RyZWFtLXN0YXR1cyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RyZWFtLXN0YXR1cyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXPCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1zdHJlYW0tc3RhdHVzLW9iamVjdCIgdGl0bGU9ImdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdMKgKCkiPmdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1zdHJlYW0tc3RhdHVzLW9iamVjdCIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdMKgKCkiPmdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1wcm9ncmVzcyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19wcm9ncmVzc8KgKCkiPmdzdF9tZXNzYWdlX25ld19wcm9ncmVzczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1wcm9ncmVzcyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3Byb2dyZXNzwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctbmVlZC1jb250ZXh0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dMKgKCkiPmdzdF9tZXNzYWdlX25ld19uZWVkX2NvbnRleHQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1jb250ZXh0LXR5cGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctaGF2ZS1jb250ZXh0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2hhdmVfY29udGV4dMKgKCkiPmdzdF9tZXNzYWdlX25ld19oYXZlX2NvbnRleHQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtaGF2ZS1jb250ZXh0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfaGF2ZV9jb250ZXh0wqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfaGF2ZV9jb250ZXh0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWRldmljZS1hZGRlZCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19kZXZpY2VfYWRkZWTCoCgpIj5nc3RfbWVzc2FnZV9uZXdfZGV2aWNlX2FkZGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWRldmljZS1yZW1vdmVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2RldmljZV9yZW1vdmVkwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2RldmljZV9yZW1vdmVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWRldmljZS1hZGRlZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9hZGRlZMKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9hZGRlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1kZXZpY2UtcmVtb3ZlZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9yZW1vdmVkwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX3JlbW92ZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcHJvcGVydHktbm90aWZ5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3Byb3BlcnR5X25vdGlmecKgKCkiPmdzdF9tZXNzYWdlX25ld19wcm9wZXJ0eV9ub3RpZnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvcGVydHktbm90aWZ5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5wqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbXMtc2VsZWN0ZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtc19zZWxlY3RlZMKgKCkiPmdzdF9tZXNzYWdlX25ld19zdHJlYW1zX3NlbGVjdGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbXMtc2VsZWN0ZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1zX3NlbGVjdGVkwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3RlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWFkZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfYWRkwqAoKSI+Z3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9hZGQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWdldC1zaXplIiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc2l6ZcKgKCkiPmdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWdldC1zdHJlYW0iIHRpdGxlPSJnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zdHJlYW3CoCgpIj5nc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zdHJlYW08L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcmVkaXJlY3QiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfcmVkaXJlY3TCoCgpIj5nc3RfbWVzc2FnZV9uZXdfcmVkaXJlY3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtYWRkLXJlZGlyZWN0LWVudHJ5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfYWRkX3JlZGlyZWN0X2VudHJ5wqAoKSI+Z3N0X21lc3NhZ2VfYWRkX3JlZGlyZWN0X2VudHJ5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXJlZGlyZWN0LWVudHJ5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcmVkaXJlY3RfZW50cnnCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9yZWRpcmVjdF9lbnRyeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1udW0tcmVkaXJlY3QtZW50cmllcyIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9udW1fcmVkaXJlY3RfZW50cmllc8KgKCkiPmdzdF9tZXNzYWdlX2dldF9udW1fcmVkaXJlY3RfZW50cmllczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE1lc3NhZ2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj5Hc3RNZXNzYWdlVHlwZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSI+R3N0U3RydWN0dXJlQ2hhbmdlVHlwZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0U3RyZWFtU3RhdHVzVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtU3RhdHVzVHlwZSI+R3N0U3RyZWFtU3RhdHVzVHlwZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0UHJvZ3Jlc3NUeXBlIiB0aXRsZT0iZW51bSBHc3RQcm9ncmVzc1R5cGUiPkdzdFByb2dyZXNzVHlwZTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RNZXNzYWdlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUJveGVkLVR5cGVzLmh0bWwiPkdCb3hlZDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RNZXNzYWdlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TWVzc2FnZS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RNZXNzYWdlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPk1lc3NhZ2VzIGFyZSBpbXBsZW1lbnRlZCBhcyBhIHN1YmNsYXNzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiB3aXRoIGEgZ2VuZXJpYwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYXMgdGhlIGNvbnRlbnQuIFRoaXMgYWxsb3dzIGZvciB3cml0aW5nIGN1c3RvbSBtZXNzYWdlcyB3aXRob3V0Ci1yZXF1aXJpbmcgYW4gQVBJIGNoYW5nZSB3aGlsZSBhbGxvd2luZyBhIHdpZGUgcmFuZ2Ugb2YgZGlmZmVyZW50IHR5cGVzCi1vZiBtZXNzYWdlcy48L3A+Ci08cD5NZXNzYWdlcyBhcmUgcG9zdGVkIGJ5IG9iamVjdHMgaW4gdGhlIHBpcGVsaW5lIGFuZCBhcmUgcGFzc2VkIHRvIHRoZQotYXBwbGljYXRpb24gdXNpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+LjwvcD4KLTxwPlRoZSBiYXNpYyB1c2UgcGF0dGVybiBvZiBwb3N0aW5nIGEgbWVzc2FnZSBvbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IGlzIGFzIGZvbGxvd3M6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9zdCI+Z3N0X2J1c19wb3N0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1lb3MiPmdzdF9tZXNzYWdlX25ld19lb3M8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oKSk7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB1c3VhbGx5IHBvc3RzIG1lc3NhZ2VzIG9uIHRoZSBidXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudAotY29udGFpbmVyIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcG9zdC1tZXNzYWdlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoKTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TWVzc2FnZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FU1NBR0UtU1JDOkNBUFMiPjwvYT48aDM+R1NUX01FU1NBR0VfU1JDKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpICAgICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0mZ3Q7c3JjKQotPC9wcmU+Ci08cD5HZXQgdGhlIG9iamVjdCB0aGF0IHBvc3RlZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1NRVNTQUdFLVNSQy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRVNTQUdFLVNSQy1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX01FU1NBR0VfU1JDX05BTUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKTwvcHJlPgotPHA+R2V0IHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdGhhdCBwb3N0ZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4KLS4gUmV0dXJucyAiKE5VTEwpIiBpZgotdGhlIG1lc3NhZ2UgaGFzIG5vIHNvdXJjZSBvYmplY3Qgc2V0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1NRVNTQUdFLVNSQy1OQU1FLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FU1NBR0UtVElNRVNUQU1QOkNBUFMiPjwvYT48aDM+R1NUX01FU1NBR0VfVElNRVNUQU1QKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FU1NBR0VfVElNRVNUQU1QKG1lc3NhZ2UpICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0mZ3Q7dGltZXN0YW1wKQotPC9wcmU+Ci08cD5HZXQgdGhlIHRpbWVzdGFtcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPgotLiBUaGlzIGlzIHRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgbWVzc2FnZQotd2FzIGNyZWF0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FU1NBR0UtVElNRVNUQU1QLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FU1NBR0UtU0VRTlVNOkNBUFMiPjwvYT48aDM+R1NUX01FU1NBR0VfU0VRTlVNKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FU1NBR0VfU0VRTlVNKG1lc3NhZ2UpICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0mZ3Q7c2VxbnVtKQotPC9wcmU+Ci08cD5HZXQgdGhlIHNlcXVlbmNlIG51bWJlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1NRVNTQUdFLVNFUU5VTS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRVNTQUdFLVRZUEU6Q0FQUyI+PC9hPjxoMz5HU1RfTUVTU0FHRV9UWVBFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAgICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0mZ3Q7dHlwZSkKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTUVTU0FHRS1UWVBFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FU1NBR0UtVFlQRS1JUy1FWFRFTkRFRDpDQVBTIj48L2E+PGgzPkdTVF9NRVNTQUdFX1RZUEVfSVNfRVhURU5ERUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVTU0FHRV9UWVBFX0lTX0VYVEVOREVEKG1lc3NhZ2UpICAgICAgICghIShHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLSZndDt0eXBlICZhbXA7IEdTVF9NRVNTQUdFX0VYVEVOREVEKSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlIG1lc3NhZ2UgaXMgaW4gdGhlIGV4dGVuZGVkIG1lc3NhZ2UgZ3JvdXA8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTUVTU0FHRS1UWVBFLUlTLUVYVEVOREVELnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FU1NBR0UtVFlQRS1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX01FU1NBR0VfVFlQRV9OQU1FKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpICBnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpCi08L3ByZT4KLTxwPkdldCBhIGNvbnN0YW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FU1NBR0UtVFlQRS1OQU1FLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtdHlwZS10by1xdWFyayI+PC9hPjxoMz5nc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+Ci1nc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIgdGl0bGU9ImVudW0gR3N0TWVzc2FnZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSB1bmlxdWUgcXVhcmsgZm9yIHRoZSBnaXZlbiBtZXNzYWdlIHR5cGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtdHlwZS10by1xdWFyay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXNzYWdlIHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS10eXBlLXRvLXF1YXJrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHF1YXJrIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZSB0eXBlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXR5cGUtZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIHByaW50YWJsZSBuYW1lIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSB0eXBlLiBEbyBub3QgbW9kaWZ5IG9yIGZyZWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtdHlwZS1nZXQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXNzYWdlIHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS10eXBlLWdldC1uYW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSByZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBuYW1lIG9mIHRoZSBtZXNzYWdlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1yZWYiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbXNnPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlbmllbmNlIG1hY3JvIHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG1lc3NhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tc2c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWVzc2FnZSB0byByZWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1yZWYucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bXNnPC9jb2RlPjwvZW0+Ci0oZm9yIGNvbnZlbmllbmNlIHdoZW4gZG9pbmcgYXNzaWdubWVudHMpPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXVucmVmIj48L2E+PGgzPmdzdF9tZXNzYWdlX3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfdW5yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbXNnPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlbmllbmNlIG1hY3JvIHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG1lc3NhZ2UsIHBvc3NpYmx5Ci1mcmVlaW5nIGl0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXVucmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tc2c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWVzc2FnZSB0byB1bnJlZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtY29weSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9jb3B5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9jb3B5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1zZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgY29weSBvZiB0aGUgbWVzc2FnZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1lc3NhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtY29weS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bXNnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1lc3NhZ2UgdG8gY29weTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWNvcHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tc2c8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1nZXQtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BY2Nlc3MgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbWVzc2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1nZXQtc3RydWN0dXJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1zdHJ1Y3R1cmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgc3RydWN0dXJlIG9mIHRoZSBtZXNzYWdlLiBUaGUgc3RydWN0dXJlIGlzCi1zdGlsbCBvd25lZCBieSB0aGUgbWVzc2FnZSwgd2hpY2ggbWVhbnMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBmcmVlIGl0IGFuZAotdGhhdCB0aGUgcG9pbnRlciBiZWNvbWVzIGludmFsaWQgd2hlbiB5b3UgZnJlZSB0aGUgbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9tZXNzYWdlX21ha2Vfd3JpdGFibGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9tZXNzYWdlX21ha2Vfd3JpdGFibGUobXNnKSAgR1NUX01FU1NBR0VfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtc2cpKSkKLTwvcHJlPgotPHA+Q2hlY2tzIGlmIGEgbWVzc2FnZSBpcyB3cml0YWJsZS4gSWYgbm90LCBhIHdyaXRhYmxlIGNvcHkgaXMgbWFkZSBhbmQKLXJldHVybmVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW1ha2Utd3JpdGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1zZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWVzc2FnZSB0byBtYWtlIHdyaXRhYmxlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1tYWtlLXdyaXRhYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBtZXNzYWdlIChwb3NzaWJseSBhIGR1cGxpY2F0ZSkgdGhhdCBpcyB3cml0YWJsZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1nZXQtc2VxbnVtIj48L2E+PGgzPmdzdF9tZXNzYWdlX2dldF9zZXFudW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfbWVzc2FnZV9nZXRfc2VxbnVtICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIG1lc3NhZ2UuPC9wPgotPHA+TWVzc2FnZXMgaGF2ZSBldmVyLWluY3JlbWVudGluZyBzZXF1ZW5jZSBudW1iZXJzLCB3aGljaCBtYXkgYWxzbyBiZSBzZXQKLWV4cGxpY2l0bHkgdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXNlcW51bSIgdGl0bGU9ImdzdF9tZXNzYWdlX3NldF9zZXFudW3CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX3NldF9zZXFudW0oKTwvY29kZT48L2E+LiBTZXF1ZW5jZSBudW1iZXJzIGFyZSB0eXBpY2FsbHkgdXNlZAotdG8gaW5kaWNhdGUgdGhhdCBhIG1lc3NhZ2UgY29ycmVzcG9uZHMgdG8gc29tZSBvdGhlciBzZXQgb2YgbWVzc2FnZXMgb3IKLWV2ZW50cywgZm9yIGV4YW1wbGUgYSBTRUdNRU5UX0RPTkUgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvIGEgU0VFSyBldmVudC4gSXQKLWlzIGNvbnNpZGVyZWQgZ29vZCBwcmFjdGljZSB0byBtYWtlIHRoaXMgY29ycmVzcG9uZGVuY2Ugd2hlbiBwb3NzaWJsZSwgdGhvdWdoCi1pdCBpcyBub3QgcmVxdWlyZWQuPC9wPgotPHA+Tm90ZSB0aGF0IGV2ZW50cyBhbmQgbWVzc2FnZXMgc2hhcmUgdGhlIHNhbWUgc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudG9yOwotdHdvIGV2ZW50cyBvciBtZXNzYWdlcyB3aWxsIG5ldmVyIGhhdmUgdGhlIHNhbWUgc2VxdWVuY2UgbnVtYmVyIHVubGVzcwotdGhhdCBjb3JyZXNwb25kZW5jZSB3YXMgbWFkZSBleHBsaWNpdGx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1zZXFudW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1zZXFudW0ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbWVzc2FnZSdzIHNlcXVlbmNlIG51bWJlci48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1zZXQtc2VxbnVtIj48L2E+PGgzPmdzdF9tZXNzYWdlX3NldF9zZXFudW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9zZXRfc2VxbnVtICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHNlcW51bTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIG1lc3NhZ2UuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBtaWdodCBiZSBjYWxsZWQgYnkgdGhlIGNyZWF0b3Igb2YgYSBtZXNzYWdlIHRvIGluZGljYXRlIHRoYXQKLXRoZSBtZXNzYWdlIHJlbGF0ZXMgdG8gb3RoZXIgbWVzc2FnZXMgb3IgZXZlbnRzLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1nZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lc3NhZ2VfZ2V0X3NlcW51bSgpPC9jb2RlPjwvYT4KLWZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LXNlcW51bS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VxbnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSBzZXF1ZW5jZSBudW1iZXIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWhhcy1uYW1lIj48L2E+PGgzPmdzdF9tZXNzYWdlX2hhc19uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfbWVzc2FnZV9oYXNfbmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4KLSBoYXMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSB1c2VkIHRvCi1jaGVjayB0aGUgbmFtZSBvZiBhIGN1c3RvbSBtZXNzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWhhcy1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1oYXMtbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWlzLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9tZXNzYWdlX2lzX3dyaXRhYmxlKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfbWVzc2FnZV9pc193cml0YWJsZShtc2cpICAgICBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtc2cpKQotPC9wcmU+Ci08cD5UZXN0cyBpZiB5b3UgY2FuIHNhZmVseSB3cml0ZSBpbnRvIGEgbWVzc2FnZSdzIHN0cnVjdHVyZSBvciB2YWxpZGx5Ci1tb2RpZnkgdGhlIHNlcW51bSBhbmQgdGltZXN0YW1wIGZpZWxkcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1pcy13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bXNnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcmVwbGFjZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9yZXBsYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfbWVzc2FnZV9yZXBsYWNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKipvbGRfbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbmV3X21lc3NhZ2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TW9kaWZpZXMgYSBwb2ludGVyIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4uIFRoZQotbW9kaWZpY2F0aW9uIGlzIGRvbmUgYXRvbWljYWxseSAoc28gdGhpcyBpcyB1c2VmdWwgZm9yIGVuc3VyaW5nIHRocmVhZCBzYWZldHkKLWluIHNvbWUgY2FzZXMpLCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSAodGhlIG9sZAotbWVzc2FnZSBpcyB1bnJlZmZlZCwgdGhlIG5ldyBvbmUgaXMgcmVmZmVkKS48L3A+Ci08cD5FaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19tZXNzYWdlPC9jb2RlPjwvZW0+Ci0gb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9tZXNzYWdlPC9jb2RlPjwvZW0+Ci0gbWF5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1yZXBsYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9sZF9tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYQotcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRvIGJlIHJlcGxhY2VkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmV3X21lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHRoYXQgd2lsbAotcmVwbGFjZSB0aGUgbWVzc2FnZSBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfbWVzc2FnZTwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcmVwbGFjZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X21lc3NhZ2U8L2NvZGU+PC9lbT4KLXdhcyBkaWZmZXJlbnQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX21lc3NhZ2U8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctZW9zIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19lb3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19lb3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBlb3MgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIGdlbmVyYXRlZCBhbmQgcG9zdGVkIGluCi10aGUgc2luayBlbGVtZW50cyBvZiBhIEdzdEJpbi4gVGhlIGJpbiB3aWxsIG9ubHkgZm9yd2FyZCB0aGUgRU9TCi1tZXNzYWdlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiBhbGwgc2lua3MgaGF2ZSBwb3N0ZWQgYW4gRU9TIG1lc3NhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVvcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVvcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBuZXcgZW9zIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVycm9yIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19lcnJvcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X2Vycm9yICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICplcnJvcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZWJ1ZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgZXJyb3IgbWVzc2FnZS4gVGhlIG1lc3NhZ2Ugd2lsbCBjb3B5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPgotIGFuZAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlYnVnPC9jb2RlPjwvZW0+Ci0uIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudCB3aGVuIGEgZmF0YWwgZXZlbnQKLW9jY3VycmVkLiBUaGUgcGlwZWxpbmUgd2lsbCBwcm9iYWJseSAocGFydGlhbGx5KSBzdG9wLiBUaGUgYXBwbGljYXRpb24KLXJlY2VpdmluZyB0aGlzIG1lc3NhZ2Ugc2hvdWxkIHN0b3AgdGhlIHBpcGVsaW5lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1lcnJvci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIEdFcnJvciBmb3IgdGhpcyBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVidWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIGRlYnVnZ2luZyBzdHJpbmcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctZXJyb3IucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IGVycm9yIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVycm9yLXdpdGgtZGV0YWlscyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfZXJyb3Jfd2l0aF9kZXRhaWxzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfZXJyb3Jfd2l0aF9kZXRhaWxzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqZXJyb3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpkZXRhaWxzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBlcnJvciBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIGNvcHkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+Ci0gYW5kCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT4KLS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50IHdoZW4gYSBmYXRhbCBldmVudAotb2NjdXJyZWQuIFRoZSBwaXBlbGluZSB3aWxsIHByb2JhYmx5IChwYXJ0aWFsbHkpIHN0b3AuIFRoZSBhcHBsaWNhdGlvbgotcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSBzaG91bGQgc3RvcCB0aGUgcGlwZWxpbmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVycm9yLXdpdGgtZGV0YWlscy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIEdFcnJvciBmb3IgdGhpcyBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVidWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIGRlYnVnZ2luZyBzdHJpbmcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRldGFpbHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gKGFsbG93LW5vbmUpOiBBIEdzdFN0cnVjdHVyZSB3aXRoIGRldGFpbHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVycm9yLXdpdGgtZGV0YWlscy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgZXJyb3IgbWVzc2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1lcnJvciI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9lcnJvcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZ2Vycm9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmRlYnVnPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3RzIHRoZSBHRXJyb3IgYW5kIGRlYnVnIHN0cmluZyBmcm9tIHRoZSBHc3RNZXNzYWdlLiBUaGUgdmFsdWVzIHJldHVybmVkCi1pbiB0aGUgb3V0cHV0IGFyZ3VtZW50cyBhcmUgY29waWVzOyB0aGUgY2FsbGVyIG11c3QgZnJlZSB0aGVtIHdoZW4gZG9uZS48L3A+Ci08cD5UeXBpY2FsIHVzYWdlIG9mIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmU6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLTEyCi0xMwotMTQKLTE1Ci0xNgotMTc8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+c3dpdGNoPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFOkNBUFMiPkdTVF9NRVNTQUdFX1RZUEU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tc2c8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSkgezwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNhc2U8L3NwYW4+IEdTVF9NRVNTQUdFX0VSUk9SPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjogezwvc3Bhbj4KLSAgICBHRXJyb3IgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+ZXJyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgZ2NoYXIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+ZGJnX2luZm8gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgICAKLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1lcnJvciI+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3I8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tc2c8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5lcnI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5kYmdfaW5mbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVdhcm5pbmdzLWFuZC1Bc3NlcnRpb25zLmh0bWwjZy1wcmludGVyciI+Z19wcmludGVycjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0VSUk9SIGZyb20gZWxlbWVudCAlczogJXM8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBlc2MiPlxuPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULU5BTUU6Q0FQUyI+R1NUX09CSkVDVF9OQU1FPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bXNnPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPnNyYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gZXJyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPm1lc3NhZ2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1XYXJuaW5ncy1hbmQtQXNzZXJ0aW9ucy5odG1sI2ctcHJpbnRlcnIiPmdfcHJpbnRlcnI8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtEZWJ1Z2dpbmcgaW5mbzogJXM8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBlc2MiPlxuPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAoPC9zcGFuPmRiZ19pbmZvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+ID8gZGJnX2luZm8gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O25vbmUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjZy1lcnJvci1mcmVlIj5nX2Vycm9yX2ZyZWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lcnI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+Z19mcmVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZGJnX2luZm88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxwPjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3IucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9FUlJPUi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Z2Vycm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIGZvciB0aGUgR0Vycm9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWJ1ZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIGRlYnVnIG1lc3NhZ2UsCi1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWVycm9yLWRldGFpbHMiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3JfZGV0YWlsc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yX2RldGFpbHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBvcHRpb25hbCBkZXRhaWxzIHN0cnVjdHVyZSwgbWF5IGJlIE5VTEwgaWYgbm9uZS4KLVRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgZnJlZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3ItZGV0YWlscy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG1lc3NhZ2Ugb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBIHBvaW50ZXIgdG8gdGhlIHJldHVybmVkIGRldGFpbHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy13YXJuaW5nIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld193YXJuaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfd2FybmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICplcnJvcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyB3YXJuaW5nIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgbWFrZSBjb3BpZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+Ci0gYW5kCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVidWc8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctd2FybmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIEdFcnJvciBmb3IgdGhpcyBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVidWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIGRlYnVnZ2luZyBzdHJpbmcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctd2FybmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgd2FybmluZyBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy13YXJuaW5nLXdpdGgtZGV0YWlscyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfd2FybmluZ193aXRoX2RldGFpbHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld193YXJuaW5nX3dpdGhfZGV0YWlscyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqZXJyb3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVidWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqZGV0YWlsczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgd2FybmluZyBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIG1ha2UgY29waWVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPgotIGFuZAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlYnVnPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXdhcm5pbmctd2l0aC1kZXRhaWxzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgR0Vycm9yIGZvciB0aGlzIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWJ1ZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgZGVidWdnaW5nIHN0cmluZy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV0YWlsczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiAoYWxsb3ctbm9uZSk6IEEgR3N0U3RydWN0dXJlIHdpdGggZGV0YWlscy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctd2FybmluZy13aXRoLWRldGFpbHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IHdhcm5pbmcgbWVzc2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKipnZXJyb3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipkZWJ1ZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0cyB0aGUgR0Vycm9yIGFuZCBkZWJ1ZyBzdHJpbmcgZnJvbSB0aGUgR3N0TWVzc2FnZS4gVGhlIHZhbHVlcyByZXR1cm5lZAotaW4gdGhlIG91dHB1dCBhcmd1bWVudHMgYXJlIGNvcGllczsgdGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlbSB3aGVuIGRvbmUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfV0FSTklORy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Z2Vycm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIGZvciB0aGUgR0Vycm9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWJ1ZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIGRlYnVnIG1lc3NhZ2UsCi1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXdhcm5pbmctZGV0YWlscyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nX2RldGFpbHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nX2RldGFpbHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICoqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIG9wdGlvbmFsIGRldGFpbHMgc3RydWN0dXJlLCBtYXkgYmUgTlVMTCBpZiBub25lCi1UaGUgcmV0dXJuZWQgc3RydWN0dXJlIG11c3Qgbm90IGJlIGZyZWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXdhcm5pbmctZGV0YWlscy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG1lc3NhZ2Ugb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBIHBvaW50ZXIgdG8gdGhlIHJldHVybmVkIGRldGFpbHMgc3RydWN0dXJlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctaW5mbyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfaW5mb8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X2luZm8gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqZXJyb3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZWJ1ZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgaW5mbyBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIG1ha2UgY29waWVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPgotIGFuZAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlYnVnPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWluZm8ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVycm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBHRXJyb3IgZm9yIHRoaXMgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlYnVnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSBkZWJ1Z2dpbmcgc3RyaW5nLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWluZm8ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IGluZm8gbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctaW5mby13aXRoLWRldGFpbHMiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2luZm9fd2l0aF9kZXRhaWxzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfaW5mb193aXRoX2RldGFpbHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKmVycm9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlYnVnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKmRldGFpbHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGluZm8gbWVzc2FnZS4gVGhlIG1lc3NhZ2Ugd2lsbCBtYWtlIGNvcGllcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT4KLSBhbmQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWJ1ZzwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1pbmZvLXdpdGgtZGV0YWlscy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIEdFcnJvciBmb3IgdGhpcyBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVidWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIGRlYnVnZ2luZyBzdHJpbmcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRldGFpbHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gKGFsbG93LW5vbmUpOiBBIEdzdFN0cnVjdHVyZSB3aXRoIGRldGFpbHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWluZm8td2l0aC1kZXRhaWxzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyB3YXJuaW5nIG1lc3NhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtaW5mbyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9pbmZvwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZ2Vycm9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqZGVidWc8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdHMgdGhlIEdFcnJvciBhbmQgZGVidWcgc3RyaW5nIGZyb20gdGhlIEdzdE1lc3NhZ2UuIFRoZSB2YWx1ZXMgcmV0dXJuZWQKLWluIHRoZSBvdXRwdXQgYXJndW1lbnRzIGFyZSBjb3BpZXM7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZW0gd2hlbiBkb25lLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtaW5mby5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX0lORk8uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdlcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIEdFcnJvci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVidWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSBkZWJ1ZyBtZXNzYWdlLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1pbmZvLWRldGFpbHMiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfaW5mb19kZXRhaWxzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2VfaW5mb19kZXRhaWxzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBvcHRpb25hbCBkZXRhaWxzIHN0cnVjdHVyZSwgbWF5IGJlIE5VTEwgaWYgbm9uZQotVGhlIHJldHVybmVkIHN0cnVjdHVyZSBtdXN0IG5vdCBiZSBmcmVlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1pbmZvLWRldGFpbHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBtZXNzYWdlIG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBkZXRhaWxzIHN0cnVjdHVyZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXRhZyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfdGFnwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfdGFnICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqdGFnX2xpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IHRhZyBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZSB0YWcgbGlzdC4KLVRoZSBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB0aGF0IGRpc2NvdmVyZWQgYSBuZXcgdGFnbGlzdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctdGFnLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWdfbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgdGFnIGxpc3QgZm9yIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy10YWcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IHRhZyBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXRhZyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV90YWfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV90YWcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICoqdGFnX2xpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdHMgdGhlIHRhZyBsaXN0IGZyb20gdGhlIEdzdE1lc3NhZ2UuIFRoZSB0YWcgbGlzdCByZXR1cm5lZCBpbiB0aGUKLW91dHB1dCBhcmd1bWVudCBpcyBhIGNvcHk7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIGl0IHdoZW4gZG9uZS48L3A+Ci08cD5UeXBpY2FsIHVzYWdlIG9mIHRoaXMgZnVuY3Rpb24gbWlnaHQgYmU6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLTEyCi0xMwotMTQ8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+Ci08c3BhbiBjbGFzcz0ia2V5d29yZCI+c3dpdGNoPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFOkNBUFMiPkdTVF9NRVNTQUdFX1RZUEU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tc2c8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSkgezwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNhc2U8L3NwYW4+IEdTVF9NRVNTQUdFX1RBRzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46IHs8L3NwYW4+Ci0gICAgR3N0VGFnTGlzdCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj50YWdzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgCi0gICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtdGFnIj5nc3RfbWVzc2FnZV9wYXJzZV90YWc8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tc2c8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj50YWdzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXByaW50Ij5nX3ByaW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7R290IHRhZ3MgZnJvbSBlbGVtZW50ICVzPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1OQU1FOkNBUFMiPkdTVF9PQkpFQ1RfTkFNRTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm1zZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tJmd0Ozwvc3Bhbj5zcmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSk7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+aGFuZGxlX3RhZ3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnRhZ3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXVucmVmIj5nc3RfdGFnX2xpc3RfdW5yZWY8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj50YWdzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5icmVhazwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXRhZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1RBRy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnX2xpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgdGFnLWxpc3QuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlZS1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctYnVmZmVyaW5nIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19idWZmZXJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBwZXJjZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBidWZmZXJpbmcgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGNhbiBiZSBwb3N0ZWQgYnkgYW4gZWxlbWVudCB0aGF0Ci1uZWVkcyB0byBidWZmZXIgZGF0YSBiZWZvcmUgaXQgY2FuIGNvbnRpbnVlIHByb2Nlc3NpbmcuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZXJjZW50PC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIGEKLXZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLiBBIHZhbHVlIG9mIDEwMCBtZWFucyB0aGF0IHRoZSBidWZmZXJpbmcgY29tcGxldGVkLjwvcD4KLTxwPldoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBlcmNlbnQ8L2NvZGU+PC9lbT4KLSBpcyAmbHQ7IDEwMCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIFBBVVNFIGEgUExBWUlORyBwaXBlbGluZS4gV2hlbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBlcmNlbnQ8L2NvZGU+PC9lbT4KLSBpcyAxMDAsIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2V0IHRoZSBwaXBlbGluZSAoYmFjaykgdG8gUExBWUlORy4KLVRoZSBhcHBsaWNhdGlvbiBtdXN0IGJlIHByZXBhcmVkIHRvIHJlY2VpdmUgQlVGRkVSSU5HIG1lc3NhZ2VzIGluIHRoZQotUFJFUk9MTElORyBzdGF0ZSBhbmQgbWF5IG9ubHkgc2V0IHRoZSBwaXBlbGluZSB0byBQTEFZSU5HIGFmdGVyIHJlY2VpdmluZyBhCi1tZXNzYWdlIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBlcmNlbnQ8L2NvZGU+PC9lbT4KLSBzZXQgdG8gMTAwLCB3aGljaCBjYW4gaGFwcGVuIGFmdGVyIHRoZSBwaXBlbGluZQotY29tcGxldGVkIHByZXJvbGxpbmcuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctYnVmZmVyaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wZXJjZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGJ1ZmZlcmluZyBwZXJjZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctYnVmZmVyaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyBidWZmZXJpbmcgbWVzc2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtYnVmZmVyaW5nIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpwZXJjZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3RzIHRoZSBidWZmZXJpbmcgcGVyY2VudCBmcm9tIHRoZSBHc3RNZXNzYWdlLiBzZWUgYWxzbwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYnVmZmVyaW5nIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZ8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZygpPC9jb2RlPjwvYT4uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1idWZmZXJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBlcmNlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgcGVyY2VudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LWJ1ZmZlcmluZy1zdGF0cyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dzdEJ1ZmZlcmluZ01vZGUiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlcmluZ01vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJpbmdNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYXZnX2luPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhdmdfb3V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gYnVmZmVyaW5nX2xlZnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uZmlndXJlcyB0aGUgYnVmZmVyaW5nIHN0YXRzIHZhbHVlcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXNldC1idWZmZXJpbmctc3RhdHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGJ1ZmZlcmluZyBtb2RlIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hdmdfaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYXZlcmFnZSBpbnB1dCByYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmF2Z19vdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYXZlcmFnZSBvdXRwdXQgcmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXJpbmdfbGVmdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFtb3VudCBvZiBidWZmZXJpbmcgdGltZSBsZWZ0IGluIG1pbGxpc2Vjb25kczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1idWZmZXJpbmctc3RhdHMiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RCdWZmZXJpbmdNb2RlIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJpbmdNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyaW5nTW9kZTwvc3Bhbj48L2E+ICptb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICphdmdfaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmF2Z19vdXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpidWZmZXJpbmdfbGVmdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0cyB0aGUgYnVmZmVyaW5nIHN0YXRzIHZhbHVlcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtYnVmZmVyaW5nLXN0YXRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfQlVGRkVSSU5HLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgYnVmZmVyaW5nIG1vZGUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXZnX2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBhdmVyYWdlIGlucHV0IHJhdGUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXZnX291dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgYXZlcmFnZSBvdXRwdXQgcmF0ZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXJpbmdfbGVmdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhbW91bnQgb2YgYnVmZmVyaW5nIHRpbWUgbGVmdCBpbgotbWlsbGlzZWNvbmRzLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdGF0ZS1jaGFuZ2VkIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBvbGRzdGF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+IG5ld3N0YXRlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gcGVuZGluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciBhbiBlbGVtZW50Ci1jaGFuZ2VkIGl0cyBzdGF0ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc3RhdGUtY2hhbmdlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2xkc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcHJldmlvdXMgc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmV3c3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IChjdXJyZW50KSBzdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wZW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBlbmRpbmcgKHRhcmdldCkgc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdGF0ZS1jaGFuZ2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBzdGF0ZSBjaGFuZ2UgbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1zdGF0ZS1jaGFuZ2VkIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZTwvc3Bhbj48L2E+ICpvbGRzdGF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlIiB0aXRsZT0iZW51bSBHc3RTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRlPC9zcGFuPjwvYT4gKm5ld3N0YXRlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiAqcGVuZGluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0cyB0aGUgb2xkIGFuZCBuZXcgc3RhdGVzIGZyb20gdGhlIEdzdE1lc3NhZ2UuPC9wPgotPHA+VHlwaWNhbCB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zd2l0Y2g8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRZUEU6Q0FQUyI+R1NUX01FU1NBR0VfVFlQRTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm1zZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKSB7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2FzZTwvc3Bhbj4gR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46IHs8L3NwYW4+Ci0gICAgR3N0U3RhdGUgb2xkX3N0YXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IG5ld19zdGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgIAotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0YXRlLWNoYW5nZWQiPmdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tc2c8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5vbGRfc3RhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5uZXdfc3RhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVdhcm5pbmdzLWFuZC1Bc3NlcnRpb25zLmh0bWwjZy1wcmludCI+Z19wcmludDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0VsZW1lbnQgJXMgY2hhbmdlZCBzdGF0ZSBmcm9tICVzIHRvICVzLjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtTkFNRTpDQVBTIj5HU1RfT0JKRUNUX05BTUU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tc2c8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LSZndDs8L3NwYW4+c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zdGF0ZS1nZXQtbmFtZSI+Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5vbGRfc3RhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXN0YXRlLWdldC1uYW1lIj5nc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm5ld19zdGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxwPjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RhdGUtY2hhbmdlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2xkc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHByZXZpb3VzIHN0YXRlLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5ld3N0YXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuZXcgKGN1cnJlbnQpIHN0YXRlLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBlbmRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBlbmRpbmcgKHRhcmdldCkgc3RhdGUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWRpcnR5Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0ecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBzdGF0ZSBkaXJ0eSBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW5ldmVyIGFuIGVsZW1lbnQKLWNoYW5nZWQgaXRzIHN0YXRlIGFzeW5jaHJvbm91c2x5IGFuZCBpcyB1c2VkIGludGVybmFsbHkgdG8gdXBkYXRlIHRoZQotc3RhdGVzIG9mIGNvbnRhaW5lciBvYmplY3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdGF0ZS1kaXJ0eS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWRpcnR5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBzdGF0ZSBkaXJ0eSBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdGVwLWRvbmUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3N0ZXBfZG9uZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X3N0ZXBfZG9uZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gYW1vdW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiByYXRlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZsdXNoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGludGVybWVkaWF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gZHVyYXRpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZW9zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IGNvbXBsZXRlIGEgcGFydCwgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+Ci0gc2V0Ci10byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIG9yIGEgY29tcGxldGUgc3RlcCBvcGVyYXRpb24uPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmR1cmF0aW9uPC9jb2RlPjwvZW0+Ci0gd2lsbCBjb250YWluIHRoZSBhbW91bnQgb2YgdGltZSAoaW4gR1NUX0ZPUk1BVF9USU1FKSBvZiB0aGUgc3RlcHBlZAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFtb3VudDwvY29kZT48L2VtPgotIG9mIG1lZGlhIGluIGZvcm1hdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0ZXAtZG9uZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZm9ybWF0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbW91bnQ8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbW91bnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYW1vdW50IG9mIHN0ZXBwZWQgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJhdGUgb2YgdGhlIHN0ZXBwZWQgYW1vdW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsdXNoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aXMgdGhpcyBhbiBmbHVzaGluZyBzdGVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmludGVybWVkaWF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmlzIHRoaXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZHVyYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZHVyYXRpb24gb2YgdGhlIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW9zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0ZXAgY2F1c2VkIEVPUzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0ZXAtZG9uZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgc3RlcF9kb25lIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1kb25lIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmFtb3VudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqcmF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpmbHVzaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICppbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmVvczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0IHRoZSB2YWx1ZXMgdGhlIHN0ZXBfZG9uZSBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1kb25lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfU1RFUF9ET05FLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZm9ybWF0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbW91bnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgYW1vdW50LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHJhdGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsdXNoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZsdXNoIGZsYWcuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmludGVybWVkaWF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBpbnRlcm1lZGlhdGUgZmxhZy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZHVyYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZHVyYXRpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVvczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBFT1MgZmxhZy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWNsb2NrLXByb3ZpZGUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZWFkeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBjbG9jayBwcm92aWRlIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbmV2ZXIgYW4KLWVsZW1lbnQgaXMgcmVhZHkgdG8gcHJvdmlkZSBhIGNsb2NrIG9yIGxvc3QgaXRzIGFiaWxpdHkgdG8gcHJvdmlkZQotYSBjbG9jayAobWF5YmUgYmVjYXVzZSBpdCBwYXVzZWQgb3IgYmVjYW1lIEVPUykuPC9wPgotPHA+VGhpcyBtZXNzYWdlIGlzIG1haW5seSB1c2VkIGludGVybmFsbHkgdG8gbWFuYWdlIHRoZSBjbG9jawotc2VsZWN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1jbG9jay1wcm92aWRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgY2xvY2sgaXQgcHJvdmlkZXMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc2VuZGVyIGNhbiBwcm92aWRlIGEgY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1jbG9jay1wcm92aWRlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBwcm92aWRlIGNsb2NrIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stcHJvdmlkZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICoqY2xvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKnJlYWR5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3RzIHRoZSBjbG9jayBhbmQgcmVhZHkgZmxhZyBmcm9tIHRoZSBHc3RNZXNzYWdlLgotVGhlIGNsb2NrIG9iamVjdCByZXR1cm5lZCByZW1haW5zIHZhbGlkIHVudGlsIHRoZSBtZXNzYWdlIGlzIGZyZWVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stcHJvdmlkZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byAgaG9sZCBhIGNsb2NrCi1vYmplY3QsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIGhvbGQgdGhlIHJlYWR5IGZsYWcsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWNsb2NrLWxvc3QiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIGNsb2NrIGxvc3QgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciB0aGUKLWNsb2NrIGlzIG5vdCB2YWxpZCBhbnltb3JlLjwvcD4KLTxwPklmIHRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgdGhlIHBpcGVsaW5lLCB0aGUgcGlwZWxpbmUgd2lsbAotc2VsZWN0IGEgbmV3IGNsb2NrIGFnYWluIHdoZW4gaXQgZ29lcyB0byBQTEFZSU5HLiBJdCBtaWdodCB0aGVyZWZvcmUKLWJlIG5lZWRlZCB0byBzZXQgdGhlIHBpcGVsaW5lIHRvIFBBVVNFRCBhbmQgUExBWUlORyBhZ2Fpbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctY2xvY2stbG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGNsb2NrIHRoYXQgd2FzIGxvc3QuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWNsb2NrLWxvc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmV3IGNsb2NrIGxvc3QgbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1jbG9jay1sb3N0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKipjbG9jazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0cyB0aGUgbG9zdCBjbG9jayBmcm9tIHRoZSBHc3RNZXNzYWdlLgotVGhlIGNsb2NrIG9iamVjdCByZXR1cm5lZCByZW1haW5zIHZhbGlkIHVudGlsIHRoZSBtZXNzYWdlIGlzIGZyZWVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stbG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX0NMT0NLX0xPU1QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byBob2xkIHRoZSBsb3N0IGNsb2NrLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctbmV3LWNsb2NrIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgY2xvY2sgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciB0aGUKLXBpcGVsaW5lIHNlbGVjdHMgYSBuZXcgY2xvY2sgZm9yIHRoZSBwaXBlbGluZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctbmV3LWNsb2NrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbmV3IHNlbGVjdGVkIGNsb2NrLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1uZXctY2xvY2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmV3IG5ldyBjbG9jayBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLW5ldy1jbG9jayI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICoqY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdHMgdGhlIG5ldyBjbG9jayBmcm9tIHRoZSBHc3RNZXNzYWdlLgotVGhlIGNsb2NrIG9iamVjdCByZXR1cm5lZCByZW1haW5zIHZhbGlkIHVudGlsIHRoZSBtZXNzYWdlIGlzIGZyZWVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtbmV3LWNsb2NrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfTkVXX0NMT0NLLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gaG9sZCB0aGUgc2VsZWN0ZWQKLW5ldyBjbG9jay4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWFwcGxpY2F0aW9uIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGFwcGxpY2F0aW9uLXR5cGVkIG1lc3NhZ2UuIEdTdHJlYW1lciB3aWxsIG5ldmVyIGNyZWF0ZSB0aGVzZQotbWVzc2FnZXM7IHRoZXkgYXJlIGEgZ2lmdCBmcm9tIHVzIHRvIHlvdS4gRW5qb3kuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWFwcGxpY2F0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0cnVjdHVyZSBmb3IgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlCi13aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBzdHJ1Y3R1cmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWFwcGxpY2F0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyBhcHBsaWNhdGlvbiBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1lbGVtZW50Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19lbGVtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGVsZW1lbnQtc3BlY2lmaWMgbWVzc2FnZS4gVGhpcyBpcyBtZWFudCBhcyBhIGdlbmVyaWMgd2F5IG9mCi1hbGxvd2luZyBvbmUtd2F5IGNvbW11bmljYXRpb24gZnJvbSBhbiBlbGVtZW50IHRvIGFuIGFwcGxpY2F0aW9uLCBmb3IgZXhhbXBsZQotInRoZSBmaXJld2lyZSBjYWJsZSB3YXMgdW5wbHVnZ2VkIi4gVGhlIGZvcm1hdCBvZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUKLWRvY3VtZW50ZWQgaW4gdGhlIGVsZW1lbnQncyBkb2N1bWVudGF0aW9uLiBUaGUgc3RydWN0dXJlIGZpZWxkIGNhbiBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWVsZW1lbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgc3RydWN0dXJlIGZvciB0aGUKLW1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctZWxlbWVudC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBuZXcgZWxlbWVudCBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1jdXN0b20iPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2N1c3RvbcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgY3VzdG9tLXR5cGVkIG1lc3NhZ2UuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGFueXRoaW5nIG5vdAotaGFuZGxlZCBieSBvdGhlciBtZXNzYWdlLXNwZWNpZmljIGZ1bmN0aW9ucyB0byBwYXNzIGEgbWVzc2FnZSB0byB0aGUKLWFwcC4gVGhlIHN0cnVjdHVyZSBmaWVsZCBjYW4gYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1jdXN0b20ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gdG8gZGlzdGluZ3Vpc2ggbWVzc2FnZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc3RydWN0dXJlIGZvciB0aGUKLW1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1jdXN0b20ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmV3IG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtc3RhcnQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgc2VnbWVudCBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHRoYXQKLXN0YXJ0IHBsYXliYWNrIG9mIGEgc2VnbWVudCBhcyBhIHJlc3VsdCBvZiBhIHNlZ21lbnQgc2Vlay4gVGhpcyBtZXNzYWdlCi1pcyBub3QgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJ1dCBpcyB1c2VkIGZvciBtYWludGVuYW5jZSByZWFzb25zIGluCi1jb250YWluZXIgZWxlbWVudHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtc3RhcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBmb3JtYXQgb2YgdGhlIHBvc2l0aW9uIGJlaW5nIHBsYXllZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBwb3NpdGlvbiBvZiB0aGUgc2VnbWVudCBiZWluZyBwbGF5ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zZWdtZW50LXN0YXJ0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBzZWdtZW50IHN0YXJ0IG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1zdGFydCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnBvc2l0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3RzIHRoZSBwb3NpdGlvbiBhbmQgZm9ybWF0IGZyb20gdGhlIHNlZ21lbnQgc3RhcnQgbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtc3RhcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJULjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZm9ybWF0LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0aW9uLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zZWdtZW50LWRvbmUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHBvc2l0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBzZWdtZW50IGRvbmUgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB0aGF0Ci1maW5pc2ggcGxheWJhY2sgb2YgYSBzZWdtZW50IGFzIGEgcmVzdWx0IG9mIGEgc2VnbWVudCBzZWVrLiBUaGlzIG1lc3NhZ2UKLWlzIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhZnRlciBhbGwgZWxlbWVudHMgdGhhdCBwb3N0ZWQgYSBzZWdtZW50X3N0YXJ0Ci1oYXZlIHBvc3RlZCB0aGUgc2VnbWVudF9kb25lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zZWdtZW50LWRvbmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBmb3JtYXQgb2YgdGhlIHBvc2l0aW9uIGJlaW5nIGRvbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcG9zaXRpb24gb2YgdGhlIHNlZ21lbnQgYmVpbmcgZG9uZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtZG9uZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgc2VnbWVudCBkb25lIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1kb25lIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0cyB0aGUgcG9zaXRpb24gYW5kIGZvcm1hdCBmcm9tIHRoZSBzZWdtZW50IGRvbmUgbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtZG9uZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBwb3NpdGlvbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctZHVyYXRpb24tY2hhbmdlZCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBkdXJhdGlvbiBjaGFuZ2VkIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudHMKLXRoYXQga25vdyB0aGUgZHVyYXRpb24gb2YgYSBzdHJlYW0gd2hlbiB0aGUgZHVyYXRpb24gY2hhbmdlcy4gVGhpcyBtZXNzYWdlCi1pcyByZWNlaXZlZCBieSBiaW5zIGFuZCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdG90YWwgZHVyYXRpb24gb2YgYQotcGlwZWxpbmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWR1cmF0aW9uLWNoYW5nZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1kdXJhdGlvbi1jaGFuZ2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyBkdXJhdGlvbi1jaGFuZ2VkIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWxhdGVuY3kiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2xhdGVuY3nCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19sYXRlbmN5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIG1lc3NhZ2UgY2FuIGJlIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZWlyIGxhdGVuY3kgcmVxdWlyZW1lbnRzIGhhdmUKLWNoYW5nZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWxhdGVuY3kucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1sYXRlbmN5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyBsYXRlbmN5IG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWFzeW5jLXN0YXJ0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSBzdGFydCBhbiBBU1lOQyBzdGF0ZSBjaGFuZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWFzeW5jLXN0YXJ0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctYXN5bmMtc3RhcnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmV3IGFzeW5jX3N0YXJ0IG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWFzeW5jLWRvbmUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19hc3luY19kb25lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gcnVubmluZ190aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoZSBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIGVsZW1lbnRzIGNvbXBsZXRlZCBhbiBBU1lOQyBzdGF0ZSBjaGFuZ2UuCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci0gY29udGFpbnMgdGhlIHRpbWUgb2YgdGhlIGRlc2lyZWQgcnVubmluZ190aW1lIHdoZW4gdGhpcwotZWxlbWVudHMgZ29lcyB0byBQTEFZSU5HLiBBIHZhbHVlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4KLQotbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBoYXMgbm8gY2xvY2sgaW50ZXJhY3Rpb24gYW5kIHRodXMgZG9lc24ndCBjYXJlIGFib3V0Ci10aGUgcnVubmluZ190aW1lIG9mIHRoZSBwaXBlbGluZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctYXN5bmMtZG9uZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnVubmluZ190aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRlc2lyZWQgcnVubmluZ190aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctYXN5bmMtZG9uZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBuZXcgYXN5bmNfZG9uZSBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWFzeW5jLWRvbmUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfZG9uZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqcnVubmluZ190aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3QgdGhlIHJ1bm5pbmdfdGltZSBmcm9tIHRoZSBhc3luY19kb25lIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1hc3luYy1kb25lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfQVNZTkNfRE9ORS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnVubmluZ190aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHJ1bm5pbmdfdGltZSBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdGVwLXN0YXJ0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfc3RlcF9zdGFydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IGFtb3VudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHJhdGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZsdXNoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbnRlcm1lZGlhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgYWNjZXB0IG9yIGFjdGl2YXRlIGEgbmV3IHN0ZXAKLWV2ZW50IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YW1vdW50PC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+Ci0gaXMgc2V0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IHdoZW4gdGhlIGVsZW1lbnQgYWNjZXB0ZWQgdGhlIG5ldyBzdGVwIGV2ZW50IGFuZCBoYXMKLXF1ZXVlZCBpdCBmb3IgZXhlY3V0aW9uIGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkcy48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+Ci0gaXMgc2V0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB3aGVuIHRoZSBlbGVtZW50IGhhcyBhY3RpdmF0ZWQgdGhlIHN0ZXAgb3BlcmF0aW9uIGFuZAotaXMgbm93IHJlYWR5IHRvIHN0YXJ0IGV4ZWN1dGluZyB0aGUgc3RlcCBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4gQWZ0ZXIgdGhpcwotbWVzc2FnZSBpcyBlbWl0dGVkLCB0aGUgYXBwbGljYXRpb24gY2FuIHF1ZXVlIGEgbmV3IHN0ZXAgb3BlcmF0aW9uIGluIHRoZQotZWxlbWVudC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc3RlcC1zdGFydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hY3RpdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pZiB0aGUgc3RlcCBpcyBhY3RpdmUgb3IgcXVldWVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFtb3VudDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFtb3VudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBhbW91bnQgb2Ygc3RlcHBlZCBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmF0ZSBvZiB0aGUgc3RlcHBlZCBhbW91bnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmx1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pcyB0aGlzIGFuIGZsdXNoaW5nIHN0ZXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW50ZXJtZWRpYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aXMgdGhpcyBhbiBpbnRlcm1lZGlhdGUgc3RlcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0ZXAtc3RhcnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmV3IHN0ZXBfc3RhcnQgbWVzc2FnZS4gPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1zdGFydCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9zdGFydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICphY3RpdmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICphbW91bnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpmbHVzaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqaW50ZXJtZWRpYXRlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3QgdGhlIHZhbHVlcyBmcm9tIHN0ZXBfc3RhcnQgbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXN0ZXAtc3RhcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9TVEVQX0RPTkUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFjdGl2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBhY3RpdmUgZmxhZy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YW1vdW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGFtb3VudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSByYXRlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBmbHVzaCBmbGFnLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcm1lZGlhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgaW50ZXJtZWRpYXRlIGZsYWcuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1xb3MiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3Fvc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X3FvcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gbGl2ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gcnVubmluZ190aW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBzdHJlYW1fdGltZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkdXJhdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIFFPUyBtZXNzYWdlIGlzIHBvc3RlZCBvbiB0aGUgYnVzIHdoZW5ldmVyIGFuIGVsZW1lbnQgZGVjaWRlcyB0byBkcm9wIGEKLWJ1ZmZlciBiZWNhdXNlIG9mIFFvUyByZWFzb25zIG9yIHdoZW5ldmVyIGl0IGNoYW5nZXMgaXRzIHByb2Nlc3Npbmcgc3RyYXRlZ3kKLWJlY2F1c2Ugb2YgUW9TIHJlYXNvbnMgKHF1YWxpdHkgYWRqdXN0bWVudHMgc3VjaCBhcyBwcm9jZXNzaW5nIGF0IGxvd2VyCi1hY2N1cmFjeSkuPC9wPgotPHA+VGhpcyBtZXNzYWdlIGNhbiBiZSBwb3N0ZWQgYnkgYW4gZWxlbWVudCB0aGF0IHBlcmZvcm1zIHN5bmNocm9uaXNhdGlvbiBhZ2FpbnN0IHRoZQotY2xvY2sgKGxpdmUpIG9yIGl0IGNvdWxkIGJlIGRyb3BwZWQgYnkgYW4gZWxlbWVudCB0aGF0IHBlcmZvcm1zIFFvUyBiZWNhdXNlIG9mIFFPUwotZXZlbnRzIHJlY2VpdmVkIGZyb20gYSBkb3duc3RyZWFtIGVsZW1lbnQgKCFsaXZlKS48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci0sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1fdGltZTwvY29kZT48L2VtPgotLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZXN0YW1wPC9jb2RlPjwvZW0+Ci0sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kdXJhdGlvbjwvY29kZT48L2VtPgotIHNob3VsZCBiZSBzZXQgdG8gdGhlCi1yZXNwZWN0aXZlIHJ1bm5pbmctdGltZSwgc3RyZWFtLXRpbWUsIHRpbWVzdGFtcCBhbmQgZHVyYXRpb24gb2YgdGhlIChkcm9wcGVkKQotYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBRb1MgZXZlbnQuIFZhbHVlcyBjYW4gYmUgbGVmdCB0bwotR1NUX0NMT0NLX1RJTUVfTk9ORSB3aGVuIHVua25vd24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXFvcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aWYgdGhlIG1lc3NhZ2Ugd2FzIGdlbmVyYXRlZCBieSBhIGxpdmUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydW5uaW5nX3RpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcnVubmluZyB0aW1lIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyZWFtX3RpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RyZWFtIHRpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0IGdlbmVyYXRlZCB0aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGltZXN0YW1wcyBvZiB0aGUgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIHRoZSBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmR1cmF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1xb3MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmV3IHFvcyBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXNldC1xb3MtdmFsdWVzIj48L2E+PGgzPmdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2Vfc2V0X3Fvc192YWx1ZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBqaXR0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBwcm9wb3J0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcXVhbGl0eTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIFFvUyB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gY2FsY3VsYXRlZC9hbmFseXNlZCBmcm9tIHRoZSBRb1MgZGF0YTwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LXFvcy12YWx1ZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9RT1MuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmppdHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBkaWZmZXJlbmNlIG9mIHRoZSBydW5uaW5nLXRpbWUgYWdhaW5zdCB0aGUgZGVhZGxpbmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3BvcnRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Mb25nIHRlcm0gcHJlZGljdGlvbiBvZiB0aGUgaWRlYWwgcmF0ZSByZWxhdGl2ZSB0byBub3JtYWwgcmF0ZQotdG8gZ2V0IG9wdGltYWwgcXVhbGl0eS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVhbGl0eTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkFuIGVsZW1lbnQgZGVwZW5kZW50IGludGVnZXIgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIGN1cnJlbnQKLXF1YWxpdHkgbGV2ZWwgb2YgdGhlIGVsZW1lbnQuIFRoZSBkZWZhdWx0IG1heGltdW0gcXVhbGl0eSBpcyAxMDAwMDAwLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1zZXQtcW9zLXN0YXRzIj48L2E+PGgzPmdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9zZXRfcW9zX3N0YXRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gcHJvY2Vzc2VkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkcm9wcGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgUW9TIHN0YXRzIHJlcHJlc2VudGluZyB0aGUgaGlzdG9yeSBvZiB0aGUgY3VycmVudCBjb250aW51b3VzIHBpcGVsaW5lCi1wbGF5YmFjayBwZXJpb2QuPC9wPgotPHA+V2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+Ci0gaXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9GT1JNQVRfVU5ERUZJTkVEPC9jb2RlPjwvZW0+Ci0gYm90aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHJvcHBlZDwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvY2Vzc2VkPC9jb2RlPjwvZW0+Ci0gYXJlCi1pbnZhbGlkLiBWYWx1ZXMgb2YgLTEgZm9yIGVpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvY2Vzc2VkPC9jb2RlPjwvZW0+Ci0gb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRyb3BwZWQ8L2NvZGU+PC9lbT4KLSBtZWFuIHVua25vd24gdmFsdWVzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LXFvcy1zdGF0cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1FPUy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VW5pdHMgb2YgdGhlICdwcm9jZXNzZWQnIGFuZCAnZHJvcHBlZCcgZmllbGRzLiBWaWRlbyBzaW5rcyBhbmQgdmlkZW8KLWZpbHRlcnMgd2lsbCB1c2UgR1NUX0ZPUk1BVF9CVUZGRVJTIChmcmFtZXMpLiBBdWRpbyBzaW5rcyBhbmQgYXVkaW8gZmlsdGVycwotd2lsbCBsaWtlbHkgdXNlIEdTVF9GT1JNQVRfREVGQVVMVCAoc2FtcGxlcykuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb2Nlc3NlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRvdGFsIG51bWJlciBvZiB1bml0cyBjb3JyZWN0bHkgcHJvY2Vzc2VkIHNpbmNlIHRoZSBsYXN0IHN0YXRlCi1jaGFuZ2UgdG8gUkVBRFkgb3IgYSBmbHVzaGluZyBvcGVyYXRpb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRyb3BwZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Ub3RhbCBudW1iZXIgb2YgdW5pdHMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdCBzdGF0ZSBjaGFuZ2UgdG8gUkVBRFkKLW9yIGEgZmx1c2hpbmcgb3BlcmF0aW9uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1xb3MiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfcW9zwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2VfcW9zICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqbGl2ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqcnVubmluZ190aW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpzdHJlYW1fdGltZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdGltZXN0YW1wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpkdXJhdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0IHRoZSB0aW1lc3RhbXBzIGFuZCBsaXZlIHN0YXR1cyBmcm9tIHRoZSBRb1MgbWVzc2FnZS48L3A+Ci08cD5UaGUgcmV0dXJuZWQgdmFsdWVzIGdpdmUgdGhlIHJ1bm5pbmdfdGltZSwgc3RyZWFtX3RpbWUsIHRpbWVzdGFtcCBhbmQKLWR1cmF0aW9uIG9mIHRoZSBkcm9wcGVkIGJ1ZmZlci4gVmFsdWVzIG9mIEdTVF9DTE9DS19USU1FX05PTkUgbWVhbiB1bmtub3duCi12YWx1ZXMuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1xb3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9RT1MuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gaWYgdGhlIG1lc3NhZ2Ugd2FzIGdlbmVyYXRlZCBieSBhIGxpdmUgZWxlbWVudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnVubmluZ190aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0Ci1nZW5lcmF0ZWQgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbV90aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgYnVmZmVyIHRoYXQKLWdlbmVyYXRlZCB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgdGhhdAotZ2VuZXJhdGVkIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kdXJhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZHVyYXRpb24gb2YgdGhlIGJ1ZmZlciB0aGF0Ci1nZW5lcmF0ZWQgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXFvcy12YWx1ZXMiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX3Fvc192YWx1ZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpqaXR0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpwcm9wb3J0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcXVhbGl0eTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0IHRoZSBRb1MgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQvYW5hbHlzZWQgZnJvbSB0aGUgUW9TIGRhdGE8L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXFvcy12YWx1ZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9RT1MuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmppdHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgcnVubmluZy10aW1lIGFnYWluc3QKLXRoZSBkZWFkbGluZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvcG9ydGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBMb25nIHRlcm0gcHJlZGljdGlvbiBvZiB0aGUgaWRlYWwgcmF0ZQotcmVsYXRpdmUgdG8gbm9ybWFsIHJhdGUgdG8gZ2V0IG9wdGltYWwgcXVhbGl0eS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVhbGl0eTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBbiBlbGVtZW50IGRlcGVuZGVudCBpbnRlZ2VyIHZhbHVlIHRoYXQKLXNwZWNpZmllcyB0aGUgY3VycmVudCBxdWFsaXR5IGxldmVsIG9mIHRoZSBlbGVtZW50LiBUaGUgZGVmYXVsdAotbWF4aW11bSBxdWFsaXR5IGlzIDEwMDAwMDAuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXFvcy1zdGF0cyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpwcm9jZXNzZWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmRyb3BwZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdCB0aGUgUW9TIHN0YXRzIHJlcHJlc2VudGluZyB0aGUgaGlzdG9yeSBvZiB0aGUgY3VycmVudCBjb250aW51b3VzCi1waXBlbGluZSBwbGF5YmFjayBwZXJpb2QuPC9wPgotPHA+V2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+Ci0gaXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9GT1JNQVRfVU5ERUZJTkVEPC9jb2RlPjwvZW0+Ci0gYm90aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHJvcHBlZDwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvY2Vzc2VkPC9jb2RlPjwvZW0+Ci0gYXJlCi1pbnZhbGlkLiBWYWx1ZXMgb2YgLTEgZm9yIGVpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvY2Vzc2VkPC9jb2RlPjwvZW0+Ci0gb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRyb3BwZWQ8L2NvZGU+PC9lbT4KLSBtZWFuIHVua25vd24gdmFsdWVzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zLXN0YXRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfUU9TLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVW5pdHMgb2YgdGhlICdwcm9jZXNzZWQnIGFuZCAnZHJvcHBlZCcgZmllbGRzLgotVmlkZW8gc2lua3MgYW5kIHZpZGVvIGZpbHRlcnMgd2lsbCB1c2UgR1NUX0ZPUk1BVF9CVUZGRVJTIChmcmFtZXMpLgotQXVkaW8gc2lua3MgYW5kIGF1ZGlvIGZpbHRlcnMgd2lsbCBsaWtlbHkgdXNlIEdTVF9GT1JNQVRfREVGQVVMVAotKHNhbXBsZXMpLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9jZXNzZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVG90YWwgbnVtYmVyIG9mIHVuaXRzIGNvcnJlY3RseSBwcm9jZXNzZWQKLXNpbmNlIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSB0byBSRUFEWSBvciBhIGZsdXNoaW5nIG9wZXJhdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZHJvcHBlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUb3RhbCBudW1iZXIgb2YgdW5pdHMgZHJvcHBlZCBzaW5jZSB0aGUgbGFzdAotc3RhdGUgY2hhbmdlIHRvIFJFQURZIG9yIGEgZmx1c2hpbmcgb3BlcmF0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctdG9jIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld190b2PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld190b2MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+ICp0b2M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gdXBkYXRlZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgVE9DIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cwotdGhhdCBkaXNjb3ZlcmVkIG9yIHVwZGF0ZWQgYSBUT0MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXRvYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50b2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gc3RydWN0dXJlIGZvciB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVwZGF0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIFRPQyB3YXMgdXBkYXRlZCBvciBub3QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctdG9jLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgVE9DIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtdG9jIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3RvY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX3RvYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gKip0b2M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqdXBkYXRlZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0IHRoZSBUT0MgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4uIFRoZSBUT0MgcmV0dXJuZWQgaW4gdGhlCi1vdXRwdXQgYXJndW1lbnQgaXMgYSBjb3B5OyB0aGUgY2FsbGVyIG11c3QgZnJlZSBpdCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy11bnJlZiIgdGl0bGU9ImdzdF90b2NfdW5yZWYoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdG9jX3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuIGRvbmUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS10b2MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9UT0MuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRvYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBUT0MuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cGRhdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHJldHVybiBsb2NhdGlvbiBmb3IgdGhlIHVwZGF0ZWQgZmxhZy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1yZXNldC10aW1lIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19yZXNldF90aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfcmVzZXRfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHJ1bm5pbmdfdGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW4gdGhlIHBpcGVsaW5lIHJ1bm5pbmctdGltZSBzaG91bGQgYmUgcmVzZXQgdG8KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4KLSwgbGlrZSBhZnRlciBhIGZsdXNoaW5nIHNlZWsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXJlc2V0LXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ1bm5pbmdfdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgcnVubmluZy10aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctcmVzZXQtdGltZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBuZXcgcmVzZXRfdGltZSBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXJlc2V0LXRpbWUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfcmVzZXRfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX3Jlc2V0X3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqcnVubmluZ190aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3QgdGhlIHJ1bm5pbmctdGltZSBmcm9tIHRoZSBSRVNFVF9USU1FIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1yZXNldC10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfUkVTRVRfVElNRS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnVubmluZ190aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHJ1bm5pbmdfdGltZSBvcgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc3RyZWFtLXN0YXJ0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhcnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhcnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBzdHJlYW1fc3RhcnQgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIGdlbmVyYXRlZCBhbmQgcG9zdGVkIGluCi10aGUgc2luayBlbGVtZW50cyBvZiBhIEdzdEJpbi4gVGhlIGJpbiB3aWxsIG9ubHkgZm9yd2FyZCB0aGUgU1RSRUFNX1NUQVJUCi1tZXNzYWdlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiBhbGwgc2lua3MgaGF2ZSBwb3N0ZWQgYW4gU1RSRUFNX1NUQVJUIG1lc3NhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1zdGFydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1zdGFydC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBuZXcgc3RyZWFtX3N0YXJ0IG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LWdyb3VwLWlkIj48L2E+PGgzPmdzdF9tZXNzYWdlX3NldF9ncm91cF9pZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3NldF9ncm91cF9pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gZ3JvdXBfaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgZ3JvdXAgaWQgb24gdGhlIHN0cmVhbS1zdGFydCBtZXNzYWdlLjwvcD4KLTxwPkFsbCBzdHJlYW1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBncm91cCBpZCBhcmUgc3VwcG9zZWQgdG8gYmUgcGxheWVkCi10b2dldGhlciwgaS5lLiBhbGwgc3RyZWFtcyBpbnNpZGUgYSBjb250YWluZXIgZmlsZSBzaG91bGQgaGF2ZSB0aGUKLXNhbWUgZ3JvdXAgaWQgYnV0IGRpZmZlcmVudCBzdHJlYW0gaWRzLiBUaGUgZ3JvdXAgaWQgc2hvdWxkIGNoYW5nZQotZWFjaCB0aW1lIHRoZSBzdHJlYW0gaXMgc3RhcnRlZCwgcmVzdWx0aW5nIGluIGRpZmZlcmVudCBncm91cCBpZHMKLWVhY2ggdGltZSBhIGZpbGUgaXMgcGxheWVkIGZvciBleGFtcGxlLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc2V0LWdyb3VwLWlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ncm91cF9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBncm91cCBpZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1ncm91cC1pZCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9ncm91cF9pZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X21lc3NhZ2VfcGFyc2VfZ3JvdXBfaWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKmdyb3VwX2lkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3QgdGhlIGdyb3VwIGZyb20gdGhlIFNUUkVBTV9TVEFSVCBtZXNzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWdyb3VwLWlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJULjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ncm91cF9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBncm91cCBpZCBvcgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtZ3JvdXAtaWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG1lc3NhZ2UgaGFkIGEgZ3JvdXAgaWQgc2V0LCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2U8L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc3RyZWFtLWNvbGxlY3Rpb24iPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9jb2xsZWN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+ICpjb2xsZWN0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgc3RyZWFtLWNvbGxlY3Rpb24gbWVzc2FnZS4gVGhlIG1lc3NhZ2UgaXMgdXNlZCB0byBhbm5vdW5jZSBuZXcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdHJlYW0tY29sbGVjdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdGhhdCBjcmVhdGVkIHRoZSBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbGxlY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc3RyZWFtLWNvbGxlY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5IGFsbG9jYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbS1jb2xsZWN0aW9uIj48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+ICoqY29sbGVjdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZXMgYSBzdHJlYW0tY29sbGVjdGlvbiBtZXNzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbS1jb2xsZWN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJFQU0tQ09MTEVDVElPTjpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT048L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb2xsZWN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgYQotcG9pbnRlciB0byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0cnVjdHVyZS1jaGFuZ2UiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlQ2hhbmdlVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpvd25lcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYnVzeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgc3RydWN0dXJlIGNoYW5nZSBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW4gdGhlCi1zdHJ1Y3R1cmUgb2YgYSBwaXBlbGluZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjaGFuZ2VkLCBmb3IgZXhhbXBsZQotd2hlbiBwYWRzIGFyZSBsaW5rZWQgb3IgdW5saW5rZWQuPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIHNob3VsZCBiZSB0aGUgc2lua3BhZCB0aGF0IHVubGlua2VkIG9yIGxpbmtlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc3RydWN0dXJlLWNoYW5nZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBjaGFuZ2UgdHlwZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b3duZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG93bmVyIGVsZW1lbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPldoZXRoZXIgdGhlIHN0cnVjdHVyZSBjaGFuZ2UgaXMgYnVzeS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdHJ1Y3R1cmUtY2hhbmdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBzdHJ1Y3R1cmUgY2hhbmdlIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2Utc3RydWN0dXJlLWNoYW5nZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZUNoYW5nZVR5cGU8L3NwYW4+PC9hPiAqdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqKm93bmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpidXN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3RzIHRoZSBjaGFuZ2UgdHlwZSBhbmQgY29tcGxldGlvbiBzdGF0dXMgZnJvbSB0aGUgR3N0TWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXN0cnVjdHVyZS1jaGFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgcG9pbnRlciB0byBob2xkIHRoZSBjaGFuZ2UgdHlwZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm93bmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvd25lciBlbGVtZW50IG9mIHRoZQotbWVzc2FnZSBzb3VyY2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1c3k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIGhvbGQgd2hldGhlciB0aGUgY2hhbmdlIGlzIGluCi1wcm9ncmVzcyBvciBoYXMgYmVlbiBjb21wbGV0ZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1yZXF1ZXN0LXN0YXRlIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiBzdGF0ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIG1lc3NhZ2UgY2FuIGJlIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgd2FudCB0byBoYXZlIHRoZWlyIHN0YXRlCi1jaGFuZ2VkLiBBIHR5cGljYWwgdXNlIGNhc2Ugd291bGQgYmUgYW4gYXVkaW8gc2VydmVyIHRoYXQgd2FudHMgdG8gcGF1c2UgdGhlCi1waXBlbGluZSBiZWNhdXNlIGEgaGlnaGVyIHByaW9yaXR5IHN0cmVhbSBpcyBiZWluZyBwbGF5ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXJlcXVlc3Qtc3RhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5ldyByZXF1ZXN0ZWQgc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1yZXF1ZXN0LXN0YXRlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyByZXF1ZXN0IHN0YXRlIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtcmVxdWVzdC1zdGF0ZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGUiIHRpdGxlPSJlbnVtIEdzdFN0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGU8L3NwYW4+PC9hPiAqc3RhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdCB0aGUgcmVxdWVzdGVkIHN0YXRlIGZyb20gdGhlIHJlcXVlc3Rfc3RhdGUgbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXJlcXVlc3Qtc3RhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSByZXF1ZXN0ZWQgc3RhdGUgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc3RyZWFtLXN0YXR1cyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXR1c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdFN0cmVhbVN0YXR1c1R5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbVN0YXR1c1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1TdGF0dXNUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKm93bmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBzdHJlYW0gc3RhdHVzIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbiBhIHN0cmVhbWluZwotdGhyZWFkIGlzIGNyZWF0ZWQvZGVzdHJveWVkIG9yIHdoZW4gdGhlIHN0YXRlIGNoYW5nZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1zdGF0dXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBzdHJlYW0gc3RhdHVzIHR5cGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm93bmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBvd25lciBlbGVtZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctc3RyZWFtLXN0YXR1cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgc3RyZWFtIHN0YXR1cyBtZXNzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbS1zdGF0dXMiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX3N0YXR1c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdFN0cmVhbVN0YXR1c1R5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbVN0YXR1c1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1TdGF0dXNUeXBlPC9zcGFuPjwvYT4gKnR5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKipvd25lcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0cyB0aGUgc3RyZWFtIHN0YXR1cyB0eXBlIGFuZCBvd25lciB0aGUgR3N0TWVzc2FnZS4gVGhlIHJldHVybmVkCi1vd25lciByZW1haW5zIHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSByZWZlcmVuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4KLSBpcyB2YWxpZCBhbmQKLXNob3VsZCB0aHVzIG5vdCBiZSB1bnJlZmZlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbS1zdGF0dXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgcG9pbnRlciB0byBob2xkIHRoZSBzdGF0dXMgdHlwZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm93bmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvd25lciBlbGVtZW50IG9mIHRoZSBtZXNzYWdlIHNvdXJjZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXNldC1zdHJlYW0tc3RhdHVzLW9iamVjdCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25maWd1cmVzIHRoZSBvYmplY3QgaGFuZGxpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQuIFRoaXMgaXMgdXN1YWxseSBhCi1Hc3RUYXNrIG9iamVjdCBidXQgb3RoZXIgb2JqZWN0cyBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXNldC1zdHJlYW0tc3RhdHVzLW9iamVjdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3QgY29udHJvbGxpbmcgdGhlIHN0cmVhbWluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1nZXQtc3RyZWFtLXN0YXR1cy1vYmplY3QiPjwvYT48aDM+Z3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3RzIHRoZSBvYmplY3QgbWFuYWdpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1zdHJlYW0tc3RhdHVzLW9iamVjdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1zdHJlYW0tc3RhdHVzLW9iamVjdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgR1ZhbHVlIGNvbnRhaW5pbmcgdGhlIG9iamVjdCB0aGF0IG1hbmFnZXMgdGhlIHN0cmVhbWluZyB0aHJlYWQuCi1UaGlzIG9iamVjdCBpcyB1c3VhbGx5IG9mIHR5cGUgR3N0VGFzayBidXQgb3RoZXIgdHlwZXMgY2FuIGJlIGFkZGVkIGluIHRoZQotZnV0dXJlLiBUaGUgb2JqZWN0IHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPgotaXMgdmFsaWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1wcm9ncmVzcyI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfcHJvZ3Jlc3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19wcm9ncmVzcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdFByb2dyZXNzVHlwZSIgdGl0bGU9ImVudW0gR3N0UHJvZ3Jlc3NUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJvZ3Jlc3NUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRleHQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJvZ3Jlc3MgbWVzc2FnZXMgYXJlIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgdXNlIGFuIGFzeW5jaHJvbm91cyB0YXNrCi10byBwZXJmb3JtIGFjdGlvbnMgdHJpZ2dlcmVkIGJ5IGEgc3RhdGUgY2hhbmdlLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2RlPC9jb2RlPjwvZW0+Ci0gY29udGFpbnMgYSB3ZWxsIGRlZmluZWQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGFjdGlvbi4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZXh0PC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGNvbnRhaW4gYSB1c2VyIHZpc2libGUgc3RyaW5nIGRldGFpbGluZyB0aGUgY3VycmVudCBhY3Rpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXByb2dyZXNzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0UHJvZ3Jlc3NUeXBlIiB0aXRsZT0iZW51bSBHc3RQcm9ncmVzc1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcm9ncmVzc1R5cGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwcm9ncmVzcyBjb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mcmVlLCB1c2VyIHZpc2libGUgdGV4dCBkZXNjcmliaW5nIHRoZSBwcm9ncmVzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXByb2dyZXNzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyBxb3MgbWVzc2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvZ3Jlc3MiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdFByb2dyZXNzVHlwZSIgdGl0bGU9ImVudW0gR3N0UHJvZ3Jlc3NUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJvZ3Jlc3NUeXBlPC9zcGFuPjwvYT4gKnR5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqY29kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKip0ZXh0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlcyB0aGUgcHJvZ3Jlc3MgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvZGU8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRleHQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1wcm9ncmVzcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9NRVNTQUdFX1BST0dSRVNTLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIGZvciB0aGUgdHlwZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIGNvZGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSB0ZXh0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctbmVlZC1jb250ZXh0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19uZWVkX2NvbnRleHTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19uZWVkX2NvbnRleHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjb250ZXh0X3R5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIGFuIGVsZW1lbnQgbmVlZHMgYSBzcGVjaWZpYyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctbmVlZC1jb250ZXh0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgY29udGV4dCB0eXBlIHRoYXQgaXMgbmVlZGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctbmVlZC1jb250ZXh0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyBuZWVkLWNvbnRleHQgbWVzc2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1jb250ZXh0LXR5cGUiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqY29udGV4dF90eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGEgY29udGV4dCB0eXBlIGZyb20gYW4gZXhpc3RpbmcgR1NUX01FU1NBR0VfTkVFRF9DT05URVhUIG1lc3NhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtY29udGV4dC10eXBlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCB0eXBlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29udGV4dF90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBjb250ZXh0IHR5cGUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWNvbnRleHQtdHlwZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW5kaWNhdGluZyBpZiB0aGUgcGFyc2luZyBzdWNjZWVkZWQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1oYXZlLWNvbnRleHQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfbmV3X2hhdmVfY29udGV4dMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2VfbmV3X2hhdmVfY29udGV4dCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4gKmNvbnRleHQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIGFuIGVsZW1lbnQgaGFzIGEgbmV3IGxvY2FsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1oYXZlLWNvbnRleHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGNvbnRleHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWhhdmUtY29udGV4dC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBuZXcgaGF2ZS1jb250ZXh0IG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtaGF2ZS1jb250ZXh0Ij48L2E+PGgzPmdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4gKipjb250ZXh0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkV4dHJhY3QgdGhlIGNvbnRleHQgZnJvbSB0aGUgSEFWRV9DT05URVhUIG1lc3NhZ2UuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1oYXZlLWNvbnRleHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfTUVTU0FHRV9IQVZFX0NPTlRFWFQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUKLWNvbnRleHQgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctZGV2aWNlLWFkZGVkIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19kZXZpY2VfYWRkZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19kZXZpY2VfYWRkZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+ICpkZXZpY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyBkZXZpY2UtYWRkZWQgbWVzc2FnZS4gVGhlIGRldmljZS1hZGRlZCBtZXNzYWdlIGlzIHByb2R1Y2VkIGJ5Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IG9yIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+LiBUaGV5IGFubm91bmNlIHRoZSBhcHBlYXJhbmNlCi1vZiBtb25pdG9yZWQgZGV2aWNlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctZGV2aWNlLWFkZGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGNyZWF0ZWQgdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV2aWNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LWRldmljZS1hZGRlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3bHkgYWxsb2NhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1kZXZpY2UtcmVtb3ZlZCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfZGV2aWNlX3JlbW92ZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19kZXZpY2VfcmVtb3ZlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiAqZGV2aWNlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgZGV2aWNlLXJlbW92ZWQgbWVzc2FnZS4gVGhlIGRldmljZS1yZW1vdmVkIG1lc3NhZ2UgaXMgcHJvZHVjZWQKLWJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT4gb3IgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT4uIFRoZXkgYW5ub3VuY2UgdGhlCi1kaXNhcHBlYXJhbmNlIG9mIG1vbml0b3JlZCBkZXZpY2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1kZXZpY2UtcmVtb3ZlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdGhhdCBjcmVhdGVkIHRoZSBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRldmljZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgcmVtb3ZlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctZGV2aWNlLXJlbW92ZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5IGFsbG9jYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1kZXZpY2UtYWRkZWQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiAqKmRldmljZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZXMgYSBkZXZpY2UtYWRkZWQgbWVzc2FnZS4gVGhlIGRldmljZS1hZGRlZCBtZXNzYWdlIGlzIHByb2R1Y2VkIGJ5Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IG9yIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+LiBJdCBhbm5vdW5jZXMgdGhlIGFwcGVhcmFuY2UKLW9mIG1vbml0b3JlZCBkZXZpY2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLWRldmljZS1hZGRlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtREVWSUNFLUFEREVEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9ERVZJQ0VfQURERUQ8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXZpY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSBhCi1wb2ludGVyIHRvIHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtZGV2aWNlLXJlbW92ZWQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX3JlbW92ZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV9kZXZpY2VfcmVtb3ZlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiAqKmRldmljZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZXMgYSBkZXZpY2UtcmVtb3ZlZCBtZXNzYWdlLiBUaGUgZGV2aWNlLXJlbW92ZWQgbWVzc2FnZSBpcyBwcm9kdWNlZCBieQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPiBvciBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZU1vbml0b3I8L3NwYW4+PC9hPi4gSXQgYW5ub3VuY2VzIHRoZQotZGlzYXBwZWFyYW5jZSBvZiBtb25pdG9yZWQgZGV2aWNlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1kZXZpY2UtcmVtb3ZlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtREVWSUNFLVJFTU9WRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0RFVklDRV9SRU1PVkVEPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV2aWNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgYQotcG9pbnRlciB0byB0aGUgcmVtb3ZlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctcHJvcGVydHktbm90aWZ5Ij48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19wcm9wZXJ0eV9ub3RpZnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19wcm9wZXJ0eV9ub3RpZnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctcHJvcGVydHktbm90aWZ5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB3aG9zZSBwcm9wZXJ0eSBjaGFuZ2VkIChtYXkgb3IgbWF5IG5vdCBiZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+KTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9wZXJ0eV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjaGFuZ2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBuZXcgcHJvcGVydHkgdmFsdWUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1wcm9wZXJ0eS1ub3RpZnkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5IGFsbG9jYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXByb3BlcnR5LW5vdGlmeSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9wYXJzZV9wcm9wZXJ0eV9ub3RpZnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV9wcm9wZXJ0eV9ub3RpZnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICoqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqKnByb3BlcnR5X3ZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlcyBhIHByb3BlcnR5LW5vdGlmeSBtZXNzYWdlLiBUaGVzZSB3aWxsIGJlIHBvc3RlZCBvbiB0aGUgYnVzIG9ubHkKLXdoZW4gc2V0IHVwIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcHJvcGVydHktbm90aWZ5LXdhdGNoIiB0aXRsZT0iZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaCgpPC9jb2RlPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWRkLXByb3BlcnR5LWRlZXAtbm90aWZ5LXdhdGNoIiB0aXRsZT0iZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2goKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXByb3BlcnR5LW5vdGlmeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtUFJPUEVSVFktTk9USUZZOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9QUk9QRVJUWV9OT1RJRlk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgYQotcG9pbnRlciB0byB0aGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGdvdCBjaGFuZ2VkLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3BlcnR5X25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgbmFtZSBvZiB0aGUKLXByb3BlcnR5IHRoYXQgZ290IGNoYW5nZWQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvcGVydHlfdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgbmV3IHZhbHVlIG9mCi10aGUgcHJvcGVydHkgdGhhdCBnb3QgY2hhbmdlZCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiBUaGlzIHdpbGwgb25seSBiZSBzZXQgaWYgdGhlCi1wcm9wZXJ0eSBub3RpZnkgd2F0Y2ggd2FzIHRvbGQgdG8gaW5jbHVkZSB0aGUgdmFsdWUgd2hlbiBpdCB3YXMgc2V0IHVwLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1zdHJlYW1zLXNlbGVjdGVkIj48L2E+PGgzPmdzdF9tZXNzYWdlX25ld19zdHJlYW1zX3NlbGVjdGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+wqAqCi1nc3RfbWVzc2FnZV9uZXdfc3RyZWFtc19zZWxlY3RlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPiAqY29sbGVjdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IHN0ZWFtcy1zZWxlY3RlZCBtZXNzYWdlLiBUaGUgbWVzc2FnZSBpcyB1c2VkIHRvIGFubm91bmNlCi10aGF0IGFuIGFycmF5IG9mIHN0cmVhbXMgaGFzIGJlZW4gc2VsZWN0ZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IGluIHJlc3BvbnNlCi10byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRUxFQ1QtU1RSRUFNUzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX1NFTEVDVF9TVFJFQU1TPC9zcGFuPjwvYT4gZXZlbnQsIG9yIHdoZW4gYW4gZWxlbWVudCAoc3VjaCBhcyBkZWNvZGViaW4zKQotbWFrZXMgYW4gaW5pdGlhbCBzZWxlY3Rpb24gb2Ygc3RyZWFtcy48L3A+Ci08cD5UaGUgbWVzc2FnZSBhbHNvIGNvbnRhaW5zIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT4gdG8gd2hpY2ggdGhlIHZhcmlvdXMgc3RyZWFtcwotYmVsb25nIHRvLjwvcD4KLTxwPlVzZXJzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbXMtc2VsZWN0ZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtc19zZWxlY3RlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lc3NhZ2VfbmV3X3N0cmVhbXNfc2VsZWN0ZWQoKTwvY29kZT48L2E+IGNhbiBhZGQgdGhlIHNlbGVjdGVkIHN0cmVhbXMgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWFkZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfYWRkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2FkZCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbXMtc2VsZWN0ZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRoYXQgY3JlYXRlZCB0aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb2xsZWN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbXMtc2VsZWN0ZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5IGFsbG9jYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbXMtc2VsZWN0ZWQiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3RlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbXNfc2VsZWN0ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT4gKipjb2xsZWN0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlcyBhIHN0cmVhbXMtc2VsZWN0ZWQgbWVzc2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1zdHJlYW1zLXNlbGVjdGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJFQU1TLVNFTEVDVEVEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29sbGVjdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIGEKLXBvaW50ZXIgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXN0cmVhbXMtc2VsZWN0ZWQtYWRkIj48L2E+PGgzPmdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfYWRkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9hZGQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gKnN0cmVhbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc3RyZWFtcy1zZWxlY3RlZC1hZGQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUUkVBTVMtU0VMRUNURUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQ8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiB0byBhZGQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc3RyZWFtcy1zZWxlY3RlZC1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgY29udGFpbmVkIGluIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWVzc2FnZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLXN0cmVhbXMtc2VsZWN0ZWQtZ2V0LXNpemUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJFQU1TLVNFTEVDVEVEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWdldC1zaXplLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG51bWJlciBvZiBzdHJlYW1zIGNvbnRhaW5lZCB3aXRoaW4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2Utc3RyZWFtcy1zZWxlY3RlZC1nZXQtc3RyZWFtIj48L2E+PGgzPmdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPsKgKgotZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc3RyZWFtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZXMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+IHdpdGggaW5kZXggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+Ci0gZnJvbSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWdldC1zdHJlYW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUUkVBTVMtU0VMRUNURUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQ8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5JbmRleCBvZiB0aGUgc3RyZWFtIHRvIHJldHJpZXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWdldC1zdHJlYW0ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLW5ldy1yZWRpcmVjdCI+PC9hPjxoMz5nc3RfbWVzc2FnZV9uZXdfcmVkaXJlY3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXNzYWdlX25ld19yZWRpcmVjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbG9jYXRpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqdGFnX2xpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqZW50cnlfc3RydWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgcmVkaXJlY3QgbWVzc2FnZSBhbmQgYWRkcyBhIG5ldyBlbnRyeSB0byBpdC4gUmVkaXJlY3QgbWVzc2FnZXMKLWFyZSBwb3N0ZWQgd2hlbiBhbiBlbGVtZW50IGRldGVjdHMgdGhhdCB0aGUgYWN0dWFsIGRhdGEgaGFzIHRvIGJlIHJldHJpZXZlZAotZnJvbSBhIGRpZmZlcmVudCBsb2NhdGlvbi4gVGhpcyBpcyB1c2VmdWwgaWYgc3VjaCBhIHJlZGlyZWN0aW9uIGNhbm5vdCBiZQotaGFuZGxlZCBpbnNpZGUgYSBzb3VyY2UgZWxlbWVudCwgZm9yIGV4YW1wbGUgd2hlbiBIVFRQIDMwMi8zMDMgcmVkaXJlY3RzCi1yZXR1cm4gYSBub24tSFRUUCBVUkwuPC9wPgotPHA+VGhlIHJlZGlyZWN0IG1lc3NhZ2UgY2FuIGhvbGQgbXVsdGlwbGUgZW50cmllcy4gVGhlIGZpcnN0IG9uZSBpcyBhZGRlZAotd2hlbiB0aGUgcmVkaXJlY3QgbWVzc2FnZSBpcyBjcmVhdGVkLCB3aXRoIHRoZSBnaXZlbiBsb2NhdGlvbiwgdGFnX2xpc3QsCi1lbnRyeV9zdHJ1Y3QgYXJndW1lbnRzLiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1hZGQtcmVkaXJlY3QtZW50cnkiIHRpdGxlPSJnc3RfbWVzc2FnZV9hZGRfcmVkaXJlY3RfZW50cnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX2FkZF9yZWRpcmVjdF9lbnRyeSgpPC9jb2RlPjwvYT4gdG8gYWRkIG1vcmUKLWVudHJpZXMuPC9wPgotPHA+RWFjaCBlbnRyeSBoYXMgYSBsb2NhdGlvbiwgYSB0YWcgbGlzdCwgYW5kIGEgc3RydWN0dXJlLiBBbGwgb2YgdGhlc2UgYXJlCi1vcHRpb25hbC4gVGhlIHRhZyBsaXN0IGFuZCBzdHJ1Y3R1cmUgYXJlIHVzZWZ1bCBmb3IgYWRkaXRpb25hbCBtZXRhZGF0YSwKLXN1Y2ggYXMgYml0cmF0ZSBzdGF0aXN0aWNzIGZvciB0aGUgZ2l2ZW4gbG9jYXRpb24uPC9wPgotPHA+QnkgZGVmYXVsdCwgbWVzc2FnZSByZWNpcGllbnRzIHNob3VsZCB0cmVhdCBlbnRyaWVzIGluIHRoZSBvcmRlciB0aGV5IGFyZQotc3RvcmVkLiBUaGUgcmVjaXBpZW50IHNob3VsZCB0aGVyZWZvcmUgdHJ5IGVudHJ5ICMwIGZpcnN0LCBhbmQgaWYgdGhpcwotZW50cnkgaXMgbm90IGFjY2VwdGFibGUgb3Igd29ya2luZywgdHJ5IGVudHJ5ICMxIGV0Yy4gU2VuZGVycyBtdXN0IG1ha2UKLXN1cmUgdGhhdCB0aGV5IGFkZCBlbnRyaWVzIGluIHRoaXMgb3JkZXIuIEhvd2V2ZXIsIHJlY2lwaWVudHMgYXJlIGZyZWUgdG8KLWlnbm9yZSB0aGUgb3JkZXIgYW5kIHBpY2sgYW4gZW50cnkgdGhhdCBpcyAiYmVzdCIgZm9yIHRoZW0uIE9uZSBleGFtcGxlCi13b3VsZCBiZSBhIHJlY2lwaWVudCB0aGF0IHNjYW5zIHRoZSBlbnRyaWVzIGZvciB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QKLWJpdHJhdGUgdGFnLjwvcD4KLTxwPlRoZSBzcGVjaWZpZWQgbG9jYXRpb24gc3RyaW5nIGlzIGNvcGllZC4gSG93ZXZlciwgb3duZXJzaGlwIG92ZXIgdGhlIHRhZwotbGlzdCBhbmQgc3RydWN0dXJlIGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgbWVzc2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1uZXctcmVkaXJlY3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHdob3NlIHByb3BlcnR5IGNoYW5nZWQgKG1heSBvciBtYXkgbm90IGJlIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4pPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIHN0cmluZyBmb3IgdGhlIG5ldyBlbnRyeS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ19saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRhZyBsaXN0IGZvciB0aGUgbmV3IGVudHJ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeV9zdHJ1Y3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gc3RydWN0dXJlIGZvciB0aGUgbmV3IGVudHJ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtbmV3LXJlZGlyZWN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXdseSBhbGxvY2F0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1hZGQtcmVkaXJlY3QtZW50cnkiPjwvYT48aDM+Z3N0X21lc3NhZ2VfYWRkX3JlZGlyZWN0X2VudHJ5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21lc3NhZ2VfYWRkX3JlZGlyZWN0X2VudHJ5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbG9jYXRpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqdGFnX2xpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqZW50cnlfc3RydWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYW5kIGFwcGVuZHMgYSBuZXcgZW50cnkuPC9wPgotPHA+VGhlIHNwZWNpZmllZCBsb2NhdGlvbiBzdHJpbmcgaXMgY29waWVkLiBIb3dldmVyLCBvd25lcnNoaXAgb3ZlciB0aGUgdGFnCi1saXN0IGFuZCBzdHJ1Y3R1cmUgYXJlIHRyYW5zZmVycmVkIHRvIHRoZSBtZXNzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWFkZC1yZWRpcmVjdC1lbnRyeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtUkVESVJFQ1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1JFRElSRUNUPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bG9jYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gc3RyaW5nIGZvciB0aGUgbmV3IGVudHJ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnX2xpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGFnIGxpc3QgZm9yIHRoZSBuZXcgZW50cnkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVudHJ5X3N0cnVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgZW50cnkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1lc3NhZ2UtcGFyc2UtcmVkaXJlY3QtZW50cnkiPjwvYT48aDM+Z3N0X21lc3NhZ2VfcGFyc2VfcmVkaXJlY3RfZW50cnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWVzc2FnZV9wYXJzZV9yZWRpcmVjdF9lbnRyeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBlbnRyeV9pbmRleDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipsb2NhdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKip0YWdfbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKiplbnRyeV9zdHJ1Y3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2VzIHRoZSBsb2NhdGlvbiBhbmQvb3Igc3RydWN0dXJlIGZyb20gdGhlIGVudHJ5IHdpdGggdGhlIGdpdmVuIGluZGV4LgotVGhlIGluZGV4IG11c3QgYmUgYmV0d2VlbiAwIGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1udW0tcmVkaXJlY3QtZW50cmllcyIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9udW1fcmVkaXJlY3RfZW50cmllc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21lc3NhZ2VfZ2V0X251bV9yZWRpcmVjdF9lbnRyaWVzKCk8L2NvZGU+PC9hPiAtIDEuCi1SZXR1cm5lZCBwb2ludGVycyBhcmUgdmFsaWQgZm9yIGFzIGxvbmcgYXMgdGhpcyBtZXNzYWdlIGV4aXN0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1wYXJzZS1yZWRpcmVjdC1lbnRyeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtUkVESVJFQ1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1JFRElSRUNUPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnlfaW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbmRleCBvZiB0aGUgZW50cnkgdG8gcGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bG9jYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcmV0dXJuIGxvY2F0aW9uIGZvcgotdGhlIHBvaW50ZXIgdG8gdGhlIGVudHJ5J3MgbG9jYXRpb24gc3RyaW5nLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ19saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHJldHVybiBsb2NhdGlvbiBmb3IKLXRoZSBwb2ludGVyIHRvIHRoZSBlbnRyeSdzIHRhZyBsaXN0LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVudHJ5X3N0cnVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiByZXR1cm4gbG9jYXRpb24KLWZvciB0aGUgcG9pbnRlciB0byB0aGUgZW50cnkncyBzdHJ1Y3R1cmUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1nZXQtbnVtLXJlZGlyZWN0LWVudHJpZXMiPjwvYT48aDM+Z3N0X21lc3NhZ2VfZ2V0X251bV9yZWRpcmVjdF9lbnRyaWVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci1nc3RfbWVzc2FnZV9nZXRfbnVtX3JlZGlyZWN0X2VudHJpZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiAqbWVzc2FnZTwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWVzc2FnZS1nZXQtbnVtLXJlZGlyZWN0LWVudHJpZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1SRURJUkVDVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfUkVESVJFQ1Q8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXNzYWdlLWdldC1udW0tcmVkaXJlY3QtZW50cmllcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBudW1iZXIgb2YgZW50cmllcyBzdG9yZWQgaW4gdGhlIG1lc3NhZ2U8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE1lc3NhZ2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1lc3NhZ2Utc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RNZXNzYWdlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TWVzc2FnZSB7Ci0gIEdzdE1pbmlPYmplY3QgICBtaW5pX29iamVjdDsKLQotICBHc3RNZXNzYWdlVHlwZSAgdHlwZTsKLSAgZ3VpbnQ2NCAgICAgICAgIHRpbWVzdGFtcDsKLSAgR3N0T2JqZWN0ICAgICAgKnNyYzsKLSAgZ3VpbnQzMiAgICAgICAgIHNlcW51bTsKLX07Ci08L3ByZT4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWVzc2FnZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXNzYWdlLXN0cnVjdC5taW5pLW9iamVjdCI+PC9hPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFyZW50IHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZVR5cGUiIHRpdGxlPSJlbnVtIEdzdE1lc3NhZ2VUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZVR5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVzc2FnZS1zdHJ1Y3QudHlwZSI+PC9hPnR5cGU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1lc3NhZ2Utc3RydWN0LnRpbWVzdGFtcCI+PC9hPnRpbWVzdGFtcDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWVzdGFtcCBvZiB0aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWVzc2FnZS1zdHJ1Y3Quc3JjIj48L2E+c3JjPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3JjIG9mIHRoZSBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXNzYWdlLXN0cnVjdC5zZXFudW0iPjwvYT5zZXFudW08L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1lc3NhZ2VUeXBlIj48L2E+PGgzPmVudW0gR3N0TWVzc2FnZVR5cGU8L2gzPgotPHA+VGhlIGRpZmZlcmVudCBtZXNzYWdlIHR5cGVzIHRoYXQgYXJlIGF2YWlsYWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZXNzYWdlVHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVVOS05PV046Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX1VOS05PV048L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YW4gdW5kZWZpbmVkIG1lc3NhZ2U8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtRU9TOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9FT1M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZW5kLW9mLXN0cmVhbSByZWFjaGVkIGluIGEgcGlwZWxpbmUuIFRoZSBhcHBsaWNhdGlvbiB3aWxsCi1vbmx5IHJlY2VpdmUgdGhpcyBtZXNzYWdlIGluIHRoZSBQTEFZSU5HIHN0YXRlIGFuZCBldmVyeSB0aW1lIGl0IHNldHMgYQotcGlwZWxpbmUgdG8gUExBWUlORyB0aGF0IGlzIGluIHRoZSBFT1Mgc3RhdGUuIFRoZSBhcHBsaWNhdGlvbiBjYW4gcGVyZm9ybSBhCi1mbHVzaGluZyBzZWVrIGluIHRoZSBwaXBlbGluZSwgd2hpY2ggd2lsbCB1bmRvIHRoZSBFT1Mgc3RhdGUgYWdhaW4uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLUVSUk9SOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9FUlJPUjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hbiBlcnJvciBvY2N1cnJlZC4gV2hlbiB0aGUgYXBwbGljYXRpb24gcmVjZWl2ZXMgYW4gZXJyb3IKLW1lc3NhZ2UgaXQgc2hvdWxkIHN0b3AgcGxheWJhY2sgb2YgdGhlIHBpcGVsaW5lIGFuZCBub3QgYXNzdW1lIHRoYXQgbW9yZQotZGF0YSB3aWxsIGJlIHBsYXllZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtV0FSTklORzpDQVBTIj48L2E+R1NUX01FU1NBR0VfV0FSTklORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIHdhcm5pbmcgb2NjdXJyZWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLUlORk86Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX0lORk88L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YW4gaW5mbyBtZXNzYWdlIG9jY3VycmVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVRBRzpDQVBTIj48L2E+R1NUX01FU1NBR0VfVEFHPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmEgdGFnIHdhcyBmb3VuZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtQlVGRkVSSU5HOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9CVUZGRVJJTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHBpcGVsaW5lIGlzIGJ1ZmZlcmluZy4gV2hlbiB0aGUgYXBwbGljYXRpb24KLXJlY2VpdmVzIGEgYnVmZmVyaW5nIG1lc3NhZ2UgaW4gdGhlIFBMQVlJTkcgc3RhdGUgZm9yIGEgbm9uLWxpdmUgcGlwZWxpbmUgaXQKLW11c3QgUEFVU0UgdGhlIHBpcGVsaW5lIHVudGlsIHRoZSBidWZmZXJpbmcgY29tcGxldGVzLCB3aGVuIHRoZSBwZXJjZW50YWdlCi1maWVsZCBpbiB0aGUgbWVzc2FnZSBpcyAxMDAlLiBGb3IgbGl2ZSBwaXBlbGluZXMsIG5vIGFjdGlvbiBtdXN0IGJlCi1wZXJmb3JtZWQgYW5kIHRoZSBidWZmZXJpbmcgcGVyY2VudGFnZSBjYW4gYmUgdXNlZCB0byBpbmZvcm0gdGhlIHVzZXIgYWJvdXQKLXRoZSBwcm9ncmVzcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtU1RBVEUtQ0hBTkdFRDpDQVBTIj48L2E+R1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIHN0YXRlIGNoYW5nZSBoYXBwZW5lZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1TVEFURS1ESVJUWTpDQVBTIj48L2E+R1NUX01FU1NBR0VfU1RBVEVfRElSVFk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YW4gZWxlbWVudCBjaGFuZ2VkIHN0YXRlIGluIGEgc3RyZWFtaW5nIHRocmVhZC4KLVRoaXMgbWVzc2FnZSBpcyBkZXByZWNhdGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1TVEVQLURPTkU6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX1NURVBfRE9ORTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIHN0ZXBwaW5nIG9wZXJhdGlvbiBmaW5pc2hlZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtQ0xPQ0stUFJPVklERTpDQVBTIj48L2E+R1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hbiBlbGVtZW50IG5vdGlmaWVzIGl0cyBjYXBhYmlsaXR5IG9mIHByb3ZpZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY2xvY2suIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGludGVybmFsbHkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV2ZXIgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtQ0xPQ0stTE9TVDpDQVBTIj48L2E+R1NUX01FU1NBR0VfQ0xPQ0tfTE9TVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgY3VycmVudCBjbG9jayBhcyBzZWxlY3RlZCBieSB0aGUgcGlwZWxpbmUgYmVjYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW51c2FibGUuIFRoZSBwaXBlbGluZSB3aWxsIHNlbGVjdCBhIG5ldyBjbG9jayBvbgotICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZXh0IFBMQVlJTkcgc3RhdGUgY2hhbmdlLiBUaGUgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgc2V0IHRoZSBwaXBlbGluZSB0byBQQVVTRUQgYW5kIGJhY2sgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICBQTEFZSU5HIHdoZW4gdGhpcyBtZXNzYWdlIGlzIHJlY2VpdmVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1ORVctQ0xPQ0s6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX05FV19DTE9DSzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIG5ldyBjbG9jayB3YXMgc2VsZWN0ZWQgaW4gdGhlIHBpcGVsaW5lLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1TVFJVQ1RVUkUtQ0hBTkdFOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHBpcGVsaW5lIGNoYW5nZWQuIFRoaXMKLW1lc3NhZ2UgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBuZXZlciBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1TVFJFQU0tU1RBVFVTOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnN0YXR1cyBhYm91dCBhIHN0cmVhbSwgZW1pdHRlZCB3aGVuIGl0IHN0YXJ0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcywgZXJyb3JzLCBldGMuLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1BUFBMSUNBVElPTjpDQVBTIj48L2E+R1NUX01FU1NBR0VfQVBQTElDQVRJT048L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bWVzc2FnZSBwb3N0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBwb3NzaWJseQotICAgICAgICAgICAgICAgICAgICAgICAgICB2aWEgYW4gYXBwbGljYXRpb24tc3BlY2lmaWMgZWxlbWVudC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtRUxFTUVOVDpDQVBTIj48L2E+R1NUX01FU1NBR0VfRUxFTUVOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5lbGVtZW50LXNwZWNpZmljIG1lc3NhZ2UsIHNlZSB0aGUgc3BlY2lmaWMgZWxlbWVudCdzCi0gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1TRUdNRU5ULVNUQVJUOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnBpcGVsaW5lIHN0YXJ0ZWQgcGxheWJhY2sgb2YgYSBzZWdtZW50LiBUaGlzCi1tZXNzYWdlIGlzIHVzZWQgaW50ZXJuYWxseSBhbmQgbmV2ZXIgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtU0VHTUVOVC1ET05FOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cGlwZWxpbmUgY29tcGxldGVkIHBsYXliYWNrIG9mIGEgc2VnbWVudC4gVGhpcwotbWVzc2FnZSBpcyBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGFmdGVyIGFsbCBlbGVtZW50cyB0aGF0IHBvc3RlZAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQ8L2NvZGU+PC9lbT4KLSBwb3N0ZWQgYSBHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUgbWVzc2FnZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtRFVSQVRJT04tQ0hBTkdFRDpDQVBTIj48L2E+R1NUX01FU1NBR0VfRFVSQVRJT05fQ0hBTkdFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgZHVyYXRpb24gb2YgYSBwaXBlbGluZSBjaGFuZ2VkLiBUaGUKLWFwcGxpY2F0aW9uIGNhbiBnZXQgdGhlIG5ldyBkdXJhdGlvbiB3aXRoIGEgZHVyYXRpb24gcXVlcnkuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLUxBVEVOQ1k6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX0xBVEVOQ1k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhlaXIgbGF0ZW5jeSBjaGFuZ2VzLiBUaGUKLWFwcGxpY2F0aW9uIHNob3VsZCByZWNhbGN1bGF0ZSBhbmQgZGlzdHJpYnV0ZSBhIG5ldyBsYXRlbmN5LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1BU1lOQy1TVEFSVDpDQVBTIj48L2E+R1NUX01FU1NBR0VfQVNZTkNfU1RBUlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSBzdGFydCBhbiBBU1lOQwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+LiBUaGlzIG1lc3NhZ2UgaXMgbm90IGZvcndhcmRlZCB0byB0aGUgYXBwbGljYXRpb24gYnV0IGlzIHVzZWQKLWludGVybmFsbHkuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLUFTWU5DLURPTkU6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX0FTWU5DX0RPTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSBjb21wbGV0ZSBhbiBBU1lOQwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+LiBUaGUgYXBwbGljYXRpb24gd2lsbCBvbmx5IHJlY2VpdmUgdGhpcyBtZXNzYWdlIGZyb20gdGhlIHRvcGxldmVsCi1waXBlbGluZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtUkVRVUVTVC1TVEFURTpDQVBTIj48L2E+R1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Qb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IHdhbnQgdGhlIHBpcGVsaW5lIHRvCi1jaGFuZ2Ugc3RhdGUuIFRoaXMgbWVzc2FnZSBpcyBhIHN1Z2dlc3Rpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHdoaWNoIGNhbgotZGVjaWRlIHRvIHBlcmZvcm0gdGhlIHN0YXRlIGNoYW5nZSBvbiAocGFydCBvZikgdGhlIHBpcGVsaW5lLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1TVEVQLVNUQVJUOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9TVEVQX1NUQVJUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkEgc3RlcHBpbmcgb3BlcmF0aW9uIHdhcyBzdGFydGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVTU0FHRS1RT1M6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX1FPUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BIGJ1ZmZlciB3YXMgZHJvcHBlZCBvciBhbiBlbGVtZW50IGNoYW5nZWQgaXRzIHByb2Nlc3NpbmcKLXN0cmF0ZWd5IGZvciBRdWFsaXR5IG9mIFNlcnZpY2UgcmVhc29ucy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtUFJPR1JFU1M6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX1BST0dSRVNTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkEgcHJvZ3Jlc3MgbWVzc2FnZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtVE9DOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9UT0M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSBuZXcgdGFibGUgb2YgY29udGVudHMgKFRPQykgd2FzIGZvdW5kIG9yIHByZXZpb3VzbHkgZm91bmQgVE9DCi13YXMgdXBkYXRlZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtUkVTRVQtVElNRTpDQVBTIj48L2E+R1NUX01FU1NBR0VfUkVTRVRfVElNRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5NZXNzYWdlIHRvIHJlcXVlc3QgcmVzZXR0aW5nIHRoZSBwaXBlbGluZSdzCi0gICAgcnVubmluZyB0aW1lIGZyb20gdGhlIHBpcGVsaW5lLiBUaGlzIGlzIGFuIGludGVybmFsIG1lc3NhZ2Ugd2hpY2gKLSAgICBhcHBsaWNhdGlvbnMgd2lsbCBsaWtlbHkgbmV2ZXIgcmVjZWl2ZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtU1RSRUFNLVNUQVJUOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9TVFJFQU1fU1RBUlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TWVzc2FnZSBpbmRpY2F0aW5nIHN0YXJ0IG9mIGEgbmV3IHN0cmVhbS4gVXNlZnVsCi0gICAgZS5nLiB3aGVuIHVzaW5nIHBsYXliaW4gaW4gZ2FwbGVzcyBwbGF5YmFjayBtb2RlLCB0byBnZXQgbm90aWZpZWQgd2hlbgotICAgIHRoZSBuZXh0IHRpdGxlIGFjdHVhbGx5IHN0YXJ0cyBwbGF5aW5nICh3aGljaCB3aWxsIGJlIHNvbWUgdGltZSBhZnRlcgotICAgIHRoZSBVUkkgZm9yIHRoZSBuZXh0IHRpdGxlIGhhcyBiZWVuIHNldCkuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLU5FRUQtQ09OVEVYVDpDQVBTIj48L2E+R1NUX01FU1NBR0VfTkVFRF9DT05URVhUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk1lc3NhZ2UgaW5kaWNhdGluZyB0aGF0IGFuIGVsZW1lbnQgd2FudHMgYSBzcGVjaWZpYyBjb250ZXh0IChTaW5jZSAxLjIpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLUhBVkUtQ09OVEVYVDpDQVBTIj48L2E+R1NUX01FU1NBR0VfSEFWRV9DT05URVhUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk1lc3NhZ2UgaW5kaWNhdGluZyB0aGF0IGFuIGVsZW1lbnQgY3JlYXRlZCBhIGNvbnRleHQgKFNpbmNlIDEuMik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtRVhURU5ERUQ6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX0VYVEVOREVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk1lc3NhZ2UgaXMgYW4gZXh0ZW5kZWQgbWVzc2FnZSB0eXBlIChzZWUgYmVsb3cpLgotICAgIFRoZXNlIGV4dGVuZGVkIG1lc3NhZ2UgSURzIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgd2l0aCBtYXNrLWJhc2VkIEFQSQotICAgIGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9sbCIgdGl0bGU9ImdzdF9idXNfcG9sbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c19wb2xsKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy10aW1lZC1wb3AtZmlsdGVyZWQiIHRpdGxlPSJnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQoKTwvY29kZT48L2E+LCBidXQgeW91IGNhbiBzdGlsbAotICAgIGZpbHRlciBmb3IgR1NUX01FU1NBR0VfRVhURU5ERUQgYW5kIHRoZW4gY2hlY2sgdGhlIHJlc3VsdCBmb3IgdGhlCi0gICAgc3BlY2lmaWMgdHlwZS4gKFNpbmNlIDEuNCk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtREVWSUNFLUFEREVEOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9ERVZJQ0VfQURERUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TWVzc2FnZSBpbmRpY2F0aW5nIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlPC9zcGFuPjwvYT4gd2FzIGFkZGVkIHRvCi0gICAgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IChTaW5jZSAxLjQpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLURFVklDRS1SRU1PVkVEOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5NZXNzYWdlIGluZGljYXRpbmcgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiB3YXMgcmVtb3ZlZAotICAgIGZyb20gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IChTaW5jZSAxLjQpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVBST1BFUlRZLU5PVElGWTpDQVBTIj48L2E+R1NUX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk1lc3NhZ2UgaW5kaWNhdGluZyBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gcHJvcGVydHkgaGFzCi0gICAgY2hhbmdlZCAoU2luY2UgMS4xMCk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtU1RSRUFNLUNPTExFQ1RJT046Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk1lc3NhZ2UgaW5kaWNhdGluZyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT4KLSAgICBpcyBhdmFpbGFibGUgKFNpbmNlIDEuMTApPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVNTQUdFLVNUUkVBTVMtU0VMRUNURUQ6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TWVzc2FnZSBpbmRpY2F0aW5nIHRoZSBhY3RpdmUgc2VsZWN0aW9uIG9mCi0gICAgPGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbXM8L3NwYW4+PC9hPiBoYXMgY2hhbmdlZCAoU2luY2UgMS4xMCk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtUkVESVJFQ1Q6Q0FQUyI+PC9hPkdTVF9NRVNTQUdFX1JFRElSRUNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk1lc3NhZ2UgaW5kaWNhdGluZyB0byByZXF1ZXN0IHRoZSBhcHBsaWNhdGlvbiB0bwotICAgIHRyeSB0byBwbGF5IHRoZSBnaXZlbiBVUkwocykuIFVzZWZ1bCBpZiBmb3IgZXhhbXBsZSBhIEhUVFAgMzAyLzMwMwotICAgIHJlc3BvbnNlIGlzIHJlY2VpdmVkIHdpdGggYSBub24tSFRUUCBVUkwgaW5zaWRlLiAoU2luY2UgMS4xMCk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FU1NBR0UtQU5ZOkNBUFMiPjwvYT5HU1RfTUVTU0FHRV9BTlk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bWFzayBmb3IgYWxsIG9mIHRoZSBhYm92ZSBtZXNzYWdlcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0cnVjdHVyZUNoYW5nZVR5cGUiPjwvYT48aDM+ZW51bSBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlPC9oMz4KLTxwPlRoZSB0eXBlIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJVQ1RVUkUtQ0hBTkdFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RydWN0dXJlQ2hhbmdlVHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJVQ1RVUkUtQ0hBTkdFLVRZUEUtUEFELUxJTks6Q0FQUyI+PC9hPkdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX0xJTks8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UGFkIGxpbmtpbmcgaXMgc3RhcnRpbmcgb3IgZG9uZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUlVDVFVSRS1DSEFOR0UtVFlQRS1QQUQtVU5MSU5LOkNBUFMiPjwvYT5HU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9VTkxJTks8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UGFkIHVubGlua2luZyBpcyBzdGFydGluZyBvciBkb25lLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3RyZWFtU3RhdHVzVHlwZSI+PC9hPjxoMz5lbnVtIEdzdFN0cmVhbVN0YXR1c1R5cGU8L2gzPgotPHA+VGhlIHR5cGUgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUUkVBTS1TVEFUVVM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVM8L2NvZGU+PC9hPi4gVGhlIHN0cmVhbSBzdGF0dXMgbWVzc2FnZXMgaW5mb3JtIHRoZQotYXBwbGljYXRpb24gb2YgbmV3IHN0cmVhbWluZyB0aHJlYWRzIGFuZCB0aGVpciBzdGF0dXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RyZWFtU3RhdHVzVHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tU1RBVFVTLVRZUEUtQ1JFQVRFOkNBUFMiPjwvYT5HU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BIG5ldyB0aHJlYWQgbmVlZCB0byBiZSBjcmVhdGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLUVOVEVSOkNBUFMiPjwvYT5HU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmEgdGhyZWFkIGVudGVyZWQgaXRzIGxvb3AgZnVuY3Rpb248L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1MRUFWRTpDQVBTIj48L2E+R1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9MRUFWRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIHRocmVhZCBsZWZ0IGl0cyBsb29wIGZ1bmN0aW9uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tU1RBVFVTLVRZUEUtREVTVFJPWTpDQVBTIj48L2E+R1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9ERVNUUk9ZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmEgdGhyZWFkIGlzIGRlc3Ryb3llZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLVNUQVJUOkNBUFMiPjwvYT5HU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUQVJUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmEgdGhyZWFkIGlzIHN0YXJ0ZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1QQVVTRTpDQVBTIj48L2E+R1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9QQVVTRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIHRocmVhZCBpcyBwYXVzZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1TVE9QOkNBUFMiPjwvYT5HU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUT1A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YSB0aHJlYWQgaXMgc3RvcHBlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHJvZ3Jlc3NUeXBlIj48L2E+PGgzPmVudW0gR3N0UHJvZ3Jlc3NUeXBlPC9oMz4KLTxwPlRoZSB0eXBlIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1QUk9HUkVTUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FU1NBR0VfUFJPR1JFU1M8L2NvZGU+PC9hPi4gVGhlIHByb2dyZXNzIG1lc3NhZ2VzIGluZm9ybSB0aGUKLWFwcGxpY2F0aW9uIG9mIHRoZSBzdGF0dXMgb2YgYXN5bmNocm9ub3VzIHRhc2tzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFByb2dyZXNzVHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QUk9HUkVTUy1UWVBFLVNUQVJUOkNBUFMiPjwvYT5HU1RfUFJPR1JFU1NfVFlQRV9TVEFSVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BIG5ldyB0YXNrIHN0YXJ0ZWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QUk9HUkVTUy1UWVBFLUNPTlRJTlVFOkNBUFMiPjwvYT5HU1RfUFJPR1JFU1NfVFlQRV9DT05USU5VRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BIHRhc2sgY29tcGxldGVkIGFuZCBhIG5ldyBvbmUgY29udGludWVzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUFJPR1JFU1MtVFlQRS1DT01QTEVURTpDQVBTIj48L2E+R1NUX1BST0dSRVNTX1RZUEVfQ09NUExFVEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSB0YXNrIGNvbXBsZXRlZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBST0dSRVNTLVRZUEUtQ0FOQ0VMRUQ6Q0FQUyI+PC9hPkdTVF9QUk9HUkVTU19UWVBFX0NBTkNFTEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkEgdGFzayB3YXMgY2FuY2VsZWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QUk9HUkVTUy1UWVBFLUVSUk9SOkNBUFMiPjwvYT5HU1RfUFJPR1JFU1NfVFlQRV9FUlJPUjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BIHRhc2sgY2F1c2VkIGFuIGVycm9yLiBBbiBlcnJvciBtZXNzYWdlIGlzIGFsc28KLSAgICAgICAgIHBvc3RlZCBvbiB0aGUgYnVzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RNZXNzYWdlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdE9iamVjdC5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RPYmplY3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjljMGU3Ni4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdE9iamVjdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEzNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0T2JqZWN0OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RPYmplY3QuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE9iamVjdC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RPYmplY3QucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0T2JqZWN0LnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UGFkLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0T2JqZWN0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0T2JqZWN0LnRvcF9vZl9wYWdlIj48L2E+R3N0T2JqZWN0PC9zcGFuPjwvaDI+Ci08cD5Hc3RPYmplY3Qg4oCUIEJhc2UgY2xhc3MgZm9yIHRoZSBHU3RyZWFtZXIgb2JqZWN0IGhpZXJhcmNoeTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RPYmplY3QuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9GTEFHUygpIj5HU1RfT0JKRUNUX0ZMQUdTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtRkxBRy1JUy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfRkxBR19JU19TRVQoKSI+R1NUX09CSkVDVF9GTEFHX0lTX1NFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfU0VUKCkiPkdTVF9PQkpFQ1RfRkxBR19TRVQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfVU5TRVQoKSI+R1NUX09CSkVDVF9GTEFHX1VOU0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9OQU1FKCkiPkdTVF9PQkpFQ1RfTkFNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9QQVJFTlQoKSI+R1NUX09CSkVDVF9QQVJFTlQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9SRUZDT1VOVCgpIj5HU1RfT0JKRUNUX1JFRkNPVU5UPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtUkVGQ09VTlQtVkFMVUU6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUoKSI+R1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfTE9DSygpIj5HU1RfT0JKRUNUX0xPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1UUllMT0NLOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX1RSWUxPQ0soKSI+R1NUX09CSkVDVF9UUllMT0NLPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtVU5MT0NLOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX1VOTE9DSygpIj5HU1RfT0JKRUNUX1VOTE9DSzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUdFVC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0dFVF9MT0NLKCkiPkdTVF9PQkpFQ1RfR0VUX0xPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1uYW1lIiB0aXRsZT0iZ3N0X29iamVjdF9zZXRfbmFtZcKgKCkiPmdzdF9vYmplY3Rfc2V0X25hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LW5hbWUiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9uYW1lwqAoKSI+Z3N0X29iamVjdF9nZXRfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtcGFyZW50IiB0aXRsZT0iZ3N0X29iamVjdF9zZXRfcGFyZW50wqAoKSI+Z3N0X29iamVjdF9zZXRfcGFyZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE9iamVjdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9wYXJlbnTCoCgpIj5nc3Rfb2JqZWN0X2dldF9wYXJlbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtaGFzLWFzLXBhcmVudCIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FzX3BhcmVudMKgKCkiPmdzdF9vYmplY3RfaGFzX2FzX3BhcmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucGFyZW50wqAoKSI+Z3N0X29iamVjdF91bnBhcmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZGVmYXVsdC1kZWVwLW5vdGlmeSIgdGl0bGU9ImdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmecKgKCkiPmdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZGVmYXVsdC1lcnJvciIgdGl0bGU9ImdzdF9vYmplY3RfZGVmYXVsdF9lcnJvcsKgKCkiPmdzdF9vYmplY3RfZGVmYXVsdF9lcnJvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1jaGVjay11bmlxdWVuZXNzIiB0aXRsZT0iZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzwqAoKSI+Z3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hcy1hbmNlc3RvciIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9ywqAoKSI+Z3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3I8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtaGFzLWFuY2VzdG9yIiB0aXRsZT0iZ3N0X29iamVjdF9oYXNfYW5jZXN0b3LCoCgpIj5nc3Rfb2JqZWN0X2hhc19hbmNlc3RvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3JlZsKgKCkiPmdzdF9vYmplY3RfcmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWbCoCgpIj5nc3Rfb2JqZWN0X3VucmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZi1zaW5rIiB0aXRsZT0iZ3N0X29iamVjdF9yZWZfc2lua8KgKCkiPmdzdF9vYmplY3RfcmVmX3Npbms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVwbGFjZSIgdGl0bGU9ImdzdF9vYmplY3RfcmVwbGFjZcKgKCkiPmdzdF9vYmplY3RfcmVwbGFjZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtcGF0aC1zdHJpbmciIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZ8KgKCkiPmdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN1Z2dlc3QtbmV4dC1zeW5jIiB0aXRsZT0iZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luY8KgKCkiPmdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc3luYy12YWx1ZXMiIHRpdGxlPSJnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzwqAoKSI+Z3N0X29iamVjdF9zeW5jX3ZhbHVlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1oYXMtYWN0aXZlLWNvbnRyb2wtYmluZGluZ3MiIHRpdGxlPSJnc3Rfb2JqZWN0X2hhc19hY3RpdmVfY29udHJvbF9iaW5kaW5nc8KgKCkiPmdzdF9vYmplY3RfaGFzX2FjdGl2ZV9jb250cm9sX2JpbmRpbmdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtY29udHJvbC1iaW5kaW5ncy1kaXNhYmxlZCIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfYmluZGluZ3NfZGlzYWJsZWTCoCgpIj5nc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdzX2Rpc2FibGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtY29udHJvbC1iaW5kaW5nLWRpc2FibGVkIiB0aXRsZT0iZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nX2Rpc2FibGVkwqAoKSI+Z3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nX2Rpc2FibGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWFkZC1jb250cm9sLWJpbmRpbmciIHRpdGxlPSJnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmfCoCgpIj5nc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LWNvbnRyb2wtYmluZGluZyIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfYmluZGluZ8KgKCkiPmdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfYmluZGluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1yZW1vdmUtY29udHJvbC1iaW5kaW5nIiB0aXRsZT0iZ3N0X29iamVjdF9yZW1vdmVfY29udHJvbF9iaW5kaW5nwqAoKSI+Z3N0X29iamVjdF9yZW1vdmVfY29udHJvbF9iaW5kaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfdmFsdWXCoCgpIj5nc3Rfb2JqZWN0X2dldF92YWx1ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtdmFsdWUtYXJyYXkiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJhecKgKCkiPmdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1nLXZhbHVlLWFycmF5IiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfZ192YWx1ZV9hcnJhecKgKCkiPmdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LWNvbnRyb2wtcmF0ZSIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZcKgKCkiPmdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2V0LWNvbnRyb2wtcmF0ZSIgdGl0bGU9ImdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZcKgKCkiPmdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE9iamVjdC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LS1uYW1lIiB0aXRsZT0iVGhlIOKAnG5hbWXigJ0gcHJvcGVydHkiPm5hbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC0tcGFyZW50IiB0aXRsZT0iVGhlIOKAnHBhcmVudOKAnSBwcm9wZXJ0eSI+cGFyZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RPYmplY3Quc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LWRlZXAtbm90aWZ5IiB0aXRsZT0iVGhlIOKAnGRlZXAtbm90aWZ54oCdIHNpZ25hbCI+ZGVlcC1ub3RpZnk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtTk8tSE9PS1M6Q0FQUyI+Tm8gSG9va3M8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE9iamVjdC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RPYmplY3RDbGFzcyI+R3N0T2JqZWN0Q2xhc3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE9iamVjdEZsYWdzIj5Hc3RPYmplY3RGbGFnczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RPYmplY3Qub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdE9iamVjdAotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPkdzdFBsdWdpbkZlYXR1cmU8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sQmluZGluZyI+R3N0Q29udHJvbEJpbmRpbmc8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sIiB0aXRsZT0iR3N0VHJhY2VyUmVjb3JkIj5Hc3RUcmFjZXJSZWNvcmQ8L2E+Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0T2JqZWN0LmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE9iamVjdC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiBwcm92aWRlcyBhIHJvb3QgZm9yIHRoZSBvYmplY3QgaGllcmFyY2h5IHRyZWUgZmlsZWQgaW4gYnkgdGhlCi1HU3RyZWFtZXIgbGlicmFyeS4gIEl0IGlzIGN1cnJlbnRseSBhIHRoaW4gd3JhcHBlciBvbiB0b3Agb2YKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HSW5pdGlhbGx5VW5vd25lZDwvc3Bhbj48L2E+LiBJdCBpcyBhbiBhYnN0cmFjdCBjbGFzcyB0aGF0IGlzIG5vdCB2ZXJ5IHVzYWJsZSBvbiBpdHMgb3duLjwvcD4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IGdpdmVzIHVzIGJhc2ljIHJlZmNvdW50aW5nLCBwYXJlbnRpbmcgZnVuY3Rpb25hbGl0eSBhbmQgbG9ja2luZy4KLU1vc3Qgb2YgdGhlIGZ1bmN0aW9ucyBhcmUganVzdCBleHRlbmRlZCBmb3Igc3BlY2lhbCBHU3RyZWFtZXIgbmVlZHMgYW5kIGNhbiBiZQotZm91bmQgdW5kZXIgdGhlIHNhbWUgbmFtZSBpbiB0aGUgYmFzZSBjbGFzcyBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB3aGljaCBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+Ci0oZS5nLiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LXJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX29iamVjdF9yZWYoKTwvY29kZT48L2E+IGJlY29tZXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVmIiB0aXRsZT0iZ3N0X29iamVjdF9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfcmVmKCk8L2NvZGU+PC9hPikuPC9wPgotPHA+U2luY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gZGVyaXZlcyBmcm9tIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HSW5pdGlhbGx5VW5vd25lZDwvc3Bhbj48L2E+LCBpdCBhbHNvIGluaGVyaXRzIHRoZQotZmxvYXRpbmcgcmVmZXJlbmNlLiBCZSBhd2FyZSB0aGF0IGZ1bmN0aW9ucyBzdWNoIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2FkZCgpPC9jb2RlPjwvYT4gYW5kCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFkZC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9hZGRfcGFkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9hZGRfcGFkKCk8L2NvZGU+PC9hPiB0YWtlIG93bmVyc2hpcCBvZiB0aGUgZmxvYXRpbmcgcmVmZXJlbmNlLjwvcD4KLTxwPkluIGNvbnRyYXN0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gaW5zdGFuY2VzLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiBhZGRzIGEgbmFtZSBwcm9wZXJ0eS4gVGhlIGZ1bmN0aW9ucwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2V0LW5hbWUiIHRpdGxlPSJnc3Rfb2JqZWN0X3NldF9uYW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3NldF9uYW1lKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LW5hbWUiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9uYW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X2dldF9uYW1lKCk8L2NvZGU+PC9hPiBhcmUgdXNlZCB0byBzZXQvZ2V0IHRoZSBuYW1lCi1vZiB0aGUgb2JqZWN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMy4zMi45LjYiPjwvYT48aDM+Y29udHJvbGxlZCBwcm9wZXJ0aWVzPC9oMz4KLTxwPgotQ29udHJvbGxlZCBwcm9wZXJ0aWVzIG9mZmVycyBhIGxpZ2h0d2VpZ2h0IHdheSB0byBhZGp1c3QgZ29iamVjdCBwcm9wZXJ0aWVzCi1vdmVyIHN0cmVhbS10aW1lLiBJdCB3b3JrcyBieSB1c2luZyB0aW1lLXN0YW1wZWQgdmFsdWUgcGFpcnMgdGhhdCBhcmUgcXVldWVkCi1mb3IgZWxlbWVudC1wcm9wZXJ0aWVzLiBBdCBydW4tdGltZSB0aGUgZWxlbWVudHMgY29udGludW91c2x5IHB1bGwgdmFsdWUKLWNoYW5nZXMgZm9yIHRoZSBjdXJyZW50IHN0cmVhbS10aW1lLgotCi1XaGF0IG5lZWRzIHRvIGJlIGNoYW5nZWQgaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPj8KLVZlcnkgbGl0dGxlIC0gaXQgaXMganVzdCB0d28gc3RlcHMgdG8gbWFrZSBhIHBsdWdpbiBjb250cm9sbGFibGUhCi08L3A+Ci08ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBtYXJrIGdvYmplY3QtcHJvcGVydGllcyBwYXJhbXNwZWNzIHRoYXQgbWFrZSBzZW5zZSB0byBiZSBjb250cm9sbGVkLAotICAgIGJ5IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgd2hlbiBwcm9jZXNzaW5nIGRhdGEgKGdldCwgY2hhaW4sIGxvb3AgZnVuY3Rpb24pIGF0IHRoZSBiZWdpbm5pbmcgY2FsbAotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMoZWxlbWVudCx0aW1lc3RhbXApLgotICAgIFRoaXMgd2lsbCBtYWtlIHRoZSBjb250cm9sbGVyIHVwZGF0ZSBhbGwgR09iamVjdCBwcm9wZXJ0aWVzIHRoYXQgYXJlCi0gICAgdW5kZXIgaXRzIGNvbnRyb2wgd2l0aCB0aGUgY3VycmVudCB2YWx1ZXMgYmFzZWQgb24gdGhlIHRpbWVzdGFtcC4KLSAgPC9wPjwvbGk+Ci08L29sPjwvZGl2PgotPHA+Ci0KLVdoYXQgbmVlZHMgdG8gYmUgZG9uZSBpbiBhcHBsaWNhdGlvbnM/Ci1BZ2FpbiBpdCdzIG5vdCBhIGxvdCB0byBjaGFuZ2UuCi08L3A+Ci08ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBjcmVhdGUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi4KLSAgICBjc291cmNlID0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtaW50ZXJwb2xhdGlvbi1jb250cm9sLXNvdXJjZS1uZXciPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3KCk8L2NvZGU+PC9hPjsKLSAgICBnX29iamVjdF9zZXQgKGNzb3VyY2UsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIE5VTEwpOwotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIEF0dGFjaCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gb24gdGhlIGNvbnRyb2xsZXIgdG8gYSBwcm9wZXJ0eS4KLSAgICBnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKG9iamVjdCwgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChvYmplY3QsICJwcm9wMSIsIGNzb3VyY2UpKTsKLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBTZXQgdGhlIGNvbnRyb2wgdmFsdWVzCi0gICAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAoKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopY3NvdXJjZSwwICogR1NUX1NFQ09ORCwgdmFsdWUxKTsKLSAgICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICgoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiljc291cmNlLDEgKiBHU1RfU0VDT05ELCB2YWx1ZTIpOwotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIHN0YXJ0IHlvdXIgcGlwZWxpbmUKLSAgPC9wPjwvbGk+Ci08L29sPjwvZGl2PgotPHA+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0T2JqZWN0LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtT0JKRUNULUZMQUdTOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9GTEFHUygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR1Mob2JqKSAgICAgICAgICAgICAgICAgIChHU1RfT0JKRUNUX0NBU1QgKG9iaiktJmd0O2ZsYWdzKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIHJldHVybnMgdGhlIGVudGlyZSBzZXQgb2YgZmxhZ3MgZm9yIHRoZSBvYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1GTEFHUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1GTEFHLUlTLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9PQkpFQ1RfRkxBR19JU19TRVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUKG9iaixmbGFnKSAgICAgICAoKEdTVF9PQkpFQ1RfRkxBR1MgKG9iaikgJmFtcDsgKGZsYWcpKSA9PSAoZmxhZykpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gY2hlY2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gZmxhZyBpcyBzZXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1GTEFHLUlTLVNFVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5GbGFnIHRvIGNoZWNrIGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtT0JKRUNULUZMQUctU0VUOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9GTEFHX1NFVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR19TRVQob2JqLGZsYWcpICAgICAgICAgIChHU1RfT0JKRUNUX0ZMQUdTIChvYmopIHw9IChmbGFnKSkKLTwvcHJlPgotPHA+VGhpcyBtYWNybyBzZXRzIHRoZSBnaXZlbiBiaXRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1PQkpFQ1QtRkxBRy1TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+RmxhZyB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9GTEFHX1VOU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX09CSkVDVF9GTEFHX1VOU0VUKG9iaixmbGFnKSAgICAgICAgKEdTVF9PQkpFQ1RfRkxBR1MgKG9iaikgJmFtcDs9IH4oZmxhZykpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gdW5zZXRzIHRoZSBnaXZlbiBiaXRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1PQkpFQ1QtRkxBRy1VTlNFVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5GbGFnIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtT0JKRUNULU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfT0JKRUNUX05BTUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX05BTUUob2JqKSAgICAgICAgICAgIChHU1RfT0JKRUNUX0NBU1Qob2JqKS0mZ3Q7bmFtZSkKLTwvcHJlPgotPHA+R2V0IHRoZSBuYW1lIG9mIHRoaXMgb2JqZWN0LiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSBieSBkZWZhdWx0Ci0oaS5lLiB5b3Ugd2lsbCBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgb2JqZWN0IGxvY2sgaXMgdGFrZW4geW91cnNlbGYpLgotSWYgaW4gZG91YnQgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1uYW1lIiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfbmFtZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9nZXRfbmFtZSgpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtT0JKRUNULU5BTUUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1PQkpFQ1QtUEFSRU5UOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9QQVJFTlQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX1BBUkVOVChvYmopICAgICAgICAgIChHU1RfT0JKRUNUX0NBU1Qob2JqKS0mZ3Q7cGFyZW50KQotPC9wcmU+Ci08cD5HZXQgdGhlIHBhcmVudCBvZiB0aGlzIG9iamVjdC4gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUgYnkgZGVmYXVsdAotKGkuZS4geW91IHdpbGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG9iamVjdCBsb2NrIGlzIHRha2VuIHlvdXJzZWxmKS4KLUlmIGluIGRvdWJ0IHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtcGFyZW50IiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfcGFyZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X2dldF9wYXJlbnQoKTwvY29kZT48L2E+IGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1QQVJFTlQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyI+PC9hPjxoMz5HU1RfT0JKRUNUX1JFRkNPVU5UKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX09CSkVDVF9SRUZDT1VOVChvYmopICAgICAgICAgICAgICAgICgoKEdPYmplY3QqKShvYmopKS0mZ3Q7cmVmX2NvdW50KQotPC9wcmU+Ci08cD5HZXQgYWNjZXNzIHRvIHRoZSByZWZlcmVuY2UgY291bnQgZmllbGQgb2YgdGhlIG9iamVjdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtT0JKRUNULVJFRkNPVU5ULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtT0JKRUNULVJFRkNPVU5ULVZBTFVFOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUob2JqKSAgICAgICAgICBnX2F0b21pY19pbnRfZ2V0ICgoZ2ludCAqKSAmYW1wO0dTVF9PQkpFQ1RfUkVGQ09VTlQob2JqKSkKLTwvcHJlPgotPHA+R2V0IHRoZSByZWZlcmVuY2UgY291bnQgdmFsdWUgb2YgdGhlIG9iamVjdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtT0JKRUNULVJFRkNPVU5ULVZBTFVFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtT0JKRUNULUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfT0JKRUNUX0xPQ0soKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX0xPQ0sob2JqKSAgICAgICAgICAgICAgICAgICBnX211dGV4X2xvY2soR1NUX09CSkVDVF9HRVRfTE9DSyhvYmopKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIHdpbGwgb2J0YWluIGEgbG9jayBvbiB0aGUgb2JqZWN0LCBtYWtpbmcgc2VyaWFsaXphdGlvbiBwb3NzaWJsZS4KLUl0IGJsb2NrcyB1bnRpbCB0aGUgbG9jayBjYW4gYmUgb2J0YWluZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1MT0NLLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvIGxvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1PQkpFQ1QtVFJZTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9PQkpFQ1RfVFJZTE9DSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9PQkpFQ1RfVFJZTE9DSyhvYmopICAgICAgICAgICAgICAgIGdfbXV0ZXhfdHJ5bG9jayhHU1RfT0JKRUNUX0dFVF9MT0NLKG9iaikpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gd2lsbCB0cnkgdG8gb2J0YWluIGEgbG9jayBvbiB0aGUgb2JqZWN0LCBidXQgd2lsbCByZXR1cm4gd2l0aAotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgaXQgY2FuJ3QgZ2V0IGl0IGltbWVkaWF0ZWx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1PQkpFQ1QtVFJZTE9DSy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1PQkpFQ1QtVU5MT0NLOkNBUFMiPjwvYT48aDM+R1NUX09CSkVDVF9VTkxPQ0soKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX1VOTE9DSyhvYmopICAgICAgICAgICAgICAgICBnX211dGV4X3VubG9jayhHU1RfT0JKRUNUX0dFVF9MT0NLKG9iaikpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gcmVsZWFzZXMgYSBsb2NrIG9uIHRoZSBvYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1VTkxPQ0sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gdW5sb2NrLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1HRVQtTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9PQkpFQ1RfR0VUX0xPQ0soKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfT0JKRUNUX0dFVF9MT0NLKG9iaikgICAgICAgICAgICAgICAoJmFtcDtHU1RfT0JKRUNUX0NBU1Qob2JqKS0mZ3Q7bG9jaykKLTwvcHJlPgotPHA+QWNxdWlyZSBhIHJlZmVyZW5jZSB0byB0aGUgbXV0ZXggb2YgdGhpcyBvYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU9CSkVDVC1HRVQtTE9DSy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1zZXQtbmFtZSI+PC9hPjxoMz5nc3Rfb2JqZWN0X3NldF9uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfb2JqZWN0X3NldF9uYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBuYW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSwgb3IgZ2l2ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotIGEgZ3VhcmFudGVlZCB1bmlxdWUKLW5hbWUgKGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+KS4KLVRoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIHRoZSBwcm92aWRlZCBuYW1lLCBzbyB0aGUgY2FsbGVyCi1yZXRhaW5zIG93bmVyc2hpcCBvZiB0aGUgbmFtZSBpdCBzZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IG5ldyBuYW1lIG9mIG9iamVjdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG5hbWUgY291bGQgYmUgc2V0LiBTaW5jZSBPYmplY3RzIHRoYXQgaGF2ZQotYSBwYXJlbnQgY2Fubm90IGJlIHJlbmFtZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpbiB0aG9zZQotY2FzZXMuPC9wPgotPHA+TVQgc2FmZS4gIFRoaXMgZnVuY3Rpb24gZ3JhYnMgYW5kIHJlbGVhc2VzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSdzIExPQ0suPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X29iamVjdF9nZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X29iamVjdF9nZXRfbmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIGNvcHkgb2YgdGhlIG5hbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLgotQ2FsbGVyIHNob3VsZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHRoZSByZXR1cm4gdmFsdWUgYWZ0ZXIgdXNhZ2UuCi1Gb3IgYSBuYW1lbGVzcyBvYmplY3QsIHRoaXMgcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHdoaWNoIHlvdSBjYW4gc2FmZWx5IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4KLWFzIHdlbGwuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1nZXQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0uIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4KLWFmdGVyIHVzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIFRoaXMgZnVuY3Rpb24gZ3JhYnMgYW5kIHJlbGVhc2VzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSdzIExPQ0suIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1zZXQtcGFyZW50Ij48L2E+PGgzPmdzdF9vYmplY3Rfc2V0X3BhcmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X29iamVjdF9zZXRfcGFyZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+Ci0uIFRoZSBvYmplY3QncyByZWZlcmVuY2UgY291bnQgd2lsbAotYmUgaW5jcmVtZW50ZWQsIGFuZCBhbnkgZmxvYXRpbmcgcmVmZXJlbmNlIHdpbGwgYmUgcmVtb3ZlZCAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZi1zaW5rIiB0aXRsZT0iZ3N0X29iamVjdF9yZWZfc2lua8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9yZWZfc2luaygpPC9jb2RlPjwvYT4pLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LXBhcmVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5ldyBwYXJlbnQgb2Ygb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXNldC1wYXJlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudDwvY29kZT48L2VtPgotY291bGQgYmUgc2V0IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotYWxyZWFkeSBoYWQgYSBwYXJlbnQgb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJlbnQ8L2NvZGU+PC9lbT4KLWFyZSB0aGUgc2FtZS48L3A+Ci08cD5NVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotJ3MgTE9DSy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1nZXQtcGFyZW50Ij48L2E+PGgzPmdzdF9vYmplY3RfZ2V0X3BhcmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPsKgKgotZ3N0X29iamVjdF9nZXRfcGFyZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLiBUaGlzIGZ1bmN0aW9uIGluY3JlYXNlcyB0aGUgcmVmY291bnQKLW9mIHRoZSBwYXJlbnQgb2JqZWN0IHNvIHlvdSBzaG91bGQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBpdCBhZnRlciB1c2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1wYXJlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1wYXJlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLCB0aGlzIGNhbiBiZQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLWhhcyBubyBwYXJlbnQuIHVucmVmIGFmdGVyIHVzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0ncyBMT0NLLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtaGFzLWFzLXBhcmVudCI+PC9hPjxoMz5nc3Rfb2JqZWN0X2hhc19hc19wYXJlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJlbnQ8L2NvZGU+PC9lbT4KLSBpcyB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLS4KLUUuZy4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjYW4gY2hlY2sgaWYgaXQgb3ducyBhIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtaGFzLWFzLXBhcmVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gY2hlY2sgYXMgcGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWhhcy1hcy1wYXJlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBlaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudDwvY29kZT48L2VtPgotaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudDwvY29kZT48L2VtPgotaXMKLXRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLiBPdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPHA+TVQgc2FmZS4gR3JhYnMgYW5kIHJlbGVhc2VzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSdzIGxvY2tzLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXVucGFyZW50Ij48L2E+PGgzPmdzdF9vYmplY3RfdW5wYXJlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfb2JqZWN0X3VucGFyZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DbGVhciB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSwgcmVtb3ZpbmcgdGhlIGFzc29jaWF0ZWQgcmVmZXJlbmNlLgotVGhpcyBmdW5jdGlvbiBkZWNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5NVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotJ3MgbG9jay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXVucGFyZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvIHVucGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWRlZmF1bHQtZGVlcC1ub3RpZnkiPjwvYT48aDM+Z3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X29iamVjdF9kZWZhdWx0X2RlZXBfbm90aWZ5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9yaWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdQYXJhbVNwZWM8L3NwYW4+PC9hPiAqcHNwZWM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmV4Y2x1ZGVkX3Byb3BzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZGVmYXVsdCBkZWVwX25vdGlmeSBzaWduYWwgY2FsbGJhY2sgZm9yIGFuIG9iamVjdC4gVGhlIHVzZXIgZGF0YQotc2hvdWxkIGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQKLWZyb20gdGhlIG5vdGlmeS4gVGhlIGRlZmF1bHQgaGFuZGxlciB3aWxsIHByaW50IHRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5Ci11c2luZyBnX3ByaW50LjwvcD4KLTxwPk1UIHNhZmUuIFRoaXMgZnVuY3Rpb24gZ3JhYnMgYW5kIHJlbGVhc2VzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSdzIExPQ0sgZm9yIGdldHRpbmcgaXRzCi0gICAgICAgICBwYXRoIHN0cmluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWRlZmF1bHQtZGVlcC1ub3RpZnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhhdCBzaWduYWxsZWQgdGhlIG5vdGlmeS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b3JpZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdGhhdCBpbml0aWF0ZWQgdGhlIG5vdGlmeS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHNwZWM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1TcGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+IG9mIHRoZSBwcm9wZXJ0eS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXhjbHVkZWRfcHJvcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gICAgYSBzZXQgb2YgdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyB0byBleGNsdWRlIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0byBzaG93Ci1hbGwgY2hhbmdlcy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBnY2hhcipdWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWRlZmF1bHQtZXJyb3IiPjwvYT48aDM+Z3N0X29iamVjdF9kZWZhdWx0X2Vycm9ywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnNvdXJjZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICplcnJvcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZWJ1ZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGRlZmF1bHQgZXJyb3IgZnVuY3Rpb24gdGhhdCB1c2VzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVdhcm5pbmdzLWFuZC1Bc3NlcnRpb25zLmh0bWwjZy1wcmludGVyciI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ByaW50ZXJyKCk8L2NvZGU+PC9hPiB0byBkaXNwbGF5IHRoZSBlcnJvciBtZXNzYWdlCi1hbmQgdGhlIG9wdGlvbmFsIGRlYnVnIHN0aW5nLi48L3A+Ci08cD5UaGUgZGVmYXVsdCBoYW5kbGVyIHdpbGwgc2ltcGx5IHByaW50IHRoZSBlcnJvciBzdHJpbmcgdXNpbmcgZ19wcmludC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWRlZmF1bHQtZXJyb3IucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c291cmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW5pdGlhdGVkIHRoZSBlcnJvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIEdFcnJvci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVidWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYW4gYWRkaXRpb25hbCBkZWJ1ZyBpbmZvcm1hdGlvbiBzdHJpbmcsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWNoZWNrLXVuaXF1ZW5lc3MiPjwvYT48aDM+Z3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgb2JqZWN0IG5hbWVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbgotZG9lcyBub3QgZG8gYW55IGxvY2tpbmcgb2YgYW55IGtpbmQuIFlvdSBtaWdodCB3YW50IHRvIHByb3RlY3QgdGhlCi1wcm92aWRlZCBsaXN0IHdpdGggdGhlIGxvY2sgb2YgdGhlIG93bmVyIG9mIHRoZSBsaXN0LiBUaGlzIGZ1bmN0aW9uCi13aWxsIGxvY2sgZWFjaCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiBpbiB0aGUgbGlzdCB0byBjb21wYXJlIHRoZSBuYW1lLCBzbyBiZQotY2FyZWZ1bCB3aGVuIHBhc3NpbmcgYSBsaXN0IHdpdGggYSBsb2NrZWQgb2JqZWN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtY2hlY2stdW5pcXVlbmVzcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbGlzdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB0bwotY2hlY2sgdGhyb3VnaC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuT2JqZWN0XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSB0byBzZWFyY2ggZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWNoZWNrLXVuaXF1ZW5lc3MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiBuYW1lZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotZG9lcyBub3QgYXBwZWFyIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0sCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBpdCBkb2VzLjwvcD4KLTxwPk1UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyB0aGUgTE9DSyBvZiBlYWNoIG9iamVjdCBpbiB0aGUgbGlzdC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1oYXMtYXMtYW5jZXN0b3IiPjwvYT48aDM+Z3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9yICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKmFuY2VzdG9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSBoYXMgYW4gYW5jZXN0b3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFuY2VzdG9yPC9jb2RlPjwvZW0+Ci0gc29tZXdoZXJlIHVwIGluCi10aGUgaGllcmFyY2h5LiBPbmUgY2FuIGUuZy4gY2hlY2sgaWYgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBpcyBpbnNpZGUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWhhcy1hcy1hbmNlc3Rvci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFuY2VzdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB0byBjaGVjayBhcyBhbmNlc3RvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1oYXMtYXMtYW5jZXN0b3IucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFuY2VzdG9yPC9jb2RlPjwvZW0+Ci1pcyBhbiBhbmNlc3RvciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+TVQgc2FmZS4gR3JhYnMgYW5kIHJlbGVhc2VzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSdzIGxvY2tzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWhhcy1hbmNlc3RvciI+PC9hPjxoMz5nc3Rfb2JqZWN0X2hhc19hbmNlc3RvcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqYW5jZXN0b3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0id2FybmluZyI+Ci08cD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z3N0X29iamVjdF9oYXNfYW5jZXN0b3I8L2NvZGU+IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBuZXdseS13cml0dGVuIGNvZGUuPC9wPgotPHA+VXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hcy1hbmNlc3RvciIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9ywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X2hhc19hc19hbmNlc3RvcigpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08cD5NVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotJ3MgbG9ja3MuPC9wPgotPC9kaXY+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0gaGFzIGFuIGFuY2VzdG9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbmNlc3RvcjwvY29kZT48L2VtPgotIHNvbWV3aGVyZSB1cCBpbgotdGhlIGhpZXJhcmNoeS4gT25lIGNhbiBlLmcuIGNoZWNrIGlmIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaXMgaW5zaWRlIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1oYXMtYW5jZXN0b3IucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbmNlc3RvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gY2hlY2sgYXMgYW5jZXN0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtaGFzLWFuY2VzdG9yLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbmNlc3RvcjwvY29kZT48L2VtPgotaXMgYW4gYW5jZXN0b3Igb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXJlZiI+PC9hPjxoMz5nc3Rfb2JqZWN0X3JlZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotZ3N0X29iamVjdF9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbgotZG9lcyBub3QgdGFrZSB0aGUgbG9jayBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0gYmVjYXVzZSBpdCByZWxpZXMgb24KLWF0b21pYyByZWZjb3VudGluZy48L3A+Ci08cD5UaGlzIG9iamVjdCByZXR1cm5zIHRoZSBpbnB1dCBwYXJhbWV0ZXIgdG8gZWFzZSB3cml0aW5nCi1jb25zdHJ1Y3RzIGxpa2UgOgotIHJlc3VsdCA9IGdzdF9vYmplY3RfcmVmIChvYmplY3QtJmd0O3BhcmVudCk7PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvIHJlZmVyZW5jZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3ZlcnJpZGUgdGhlIHBhcnNlZCBDIHR5cGUgd2l0aCBnaXZlbiB0eXBlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuT2JqZWN0XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1yZWYucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIHBvaW50ZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJPdmVycmlkZSB0aGUgcGFyc2VkIEMgdHlwZSB3aXRoIGdpdmVuIHR5cGUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5PYmplY3RdPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXVucmVmIj48L2E+PGgzPmdzdF9vYmplY3RfdW5yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfb2JqZWN0X3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0uICBJZiByZWZlcmVuY2UgY291bnQgaGl0cwotemVybywgZGVzdHJveSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSB0aGUgbG9jawotb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotIGFzIGl0IHJlbGllcyBvbiBhdG9taWMgcmVmY291bnRpbmcuPC9wPgotPHA+VGhlIHVucmVmIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGggdGhlIExPQ0sgaGVsZCBzaW5jZQotdGhpcyBtaWdodCBkZWFkbG9jayB0aGUgZGlzcG9zZSBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXVucmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiB0byB1bnJlZmVyZW5jZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3ZlcnJpZGUgdGhlIHBhcnNlZCBDIHR5cGUgd2l0aCBnaXZlbiB0eXBlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuT2JqZWN0XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXJlZi1zaW5rIj48L2E+PGgzPmdzdF9vYmplY3RfcmVmX3NpbmvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLWdzdF9vYmplY3RfcmVmX3NpbmsgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0sIGFuZCBwb3NzaWJseSByZW1vdmUgdGhlIGZsb2F0aW5nCi1yZWZlcmVuY2UsIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSBoYXMgYSBmbG9hdGluZyByZWZlcmVuY2UuPC9wPgotPHA+SW4gb3RoZXIgd29yZHMsIGlmIHRoZSBvYmplY3QgaXMgZmxvYXRpbmcsIHRoZW4gdGhpcyBjYWxsICJhc3N1bWVzIG93bmVyc2hpcCIKLW9mIHRoZSBmbG9hdGluZyByZWZlcmVuY2UsIGNvbnZlcnRpbmcgaXQgdG8gYSBub3JtYWwgcmVmZXJlbmNlIGJ5IGNsZWFyaW5nCi10aGUgZmxvYXRpbmcgZmxhZyB3aGlsZSBsZWF2aW5nIHRoZSByZWZlcmVuY2UgY291bnQgdW5jaGFuZ2VkLiBJZiB0aGUgb2JqZWN0Ci1pcyBub3QgZmxvYXRpbmcsIHRoZW4gdGhpcyBjYWxsIGFkZHMgYSBuZXcgbm9ybWFsIHJlZmVyZW5jZSBpbmNyZWFzaW5nIHRoZQotcmVmZXJlbmNlIGNvdW50IGJ5IG9uZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXJlZi1zaW5rLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRvIHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtcmVwbGFjZSI+PC9hPjxoMz5nc3Rfb2JqZWN0X3JlcGxhY2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9vYmplY3RfcmVwbGFjZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICoqb2xkb2JqPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm5ld29iajwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BdG9taWNhbGx5IG1vZGlmaWVzIGEgcG9pbnRlciB0byBwb2ludCB0byBhIG5ldyBvYmplY3QuCi1UaGUgcmVmZXJlbmNlIGNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRvYmo8L2NvZGU+PC9lbT4KLSBpcyBkZWNyZWFzZWQgYW5kIHRoZSByZWZlcmVuY2UgY291bnQgb2YKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdvYmo8L2NvZGU+PC9lbT4KLSBpcyBpbmNyZWFzZWQuPC9wPgotPHA+RWl0aGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdvYmo8L2NvZGU+PC9lbT4KLSBhbmQgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZG9iajwvY29kZT48L2VtPgotIG1heSBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1yZXBsYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9sZG9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgcGxhY2Ugb2YKLWEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdG8gcmVwbGFjZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5ld29iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtcmVwbGFjZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3b2JqPC9jb2RlPjwvZW0+Ci13YXMgZGlmZmVyZW50IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZG9iajwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LXBhdGgtc3RyaW5nIj48L2E+PGgzPmdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2VuZXJhdGVzIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHBhdGggb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotIGluCi10aGUgb2JqZWN0IGhpZXJhcmNoeS4gT25seSB1c2VmdWwgKG9yIHVzZWQpIGZvciBkZWJ1Z2dpbmcuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1nZXQtcGF0aC1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1wYXRoLXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHBhdGggb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLiBZb3UgbXVzdAotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB0aGUgc3RyaW5nIGFmdGVyIHVzYWdlLjwvcD4KLTxwPk1UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4ncyBMT0NLIGZvciBhbGwgb2JqZWN0cwotaW4gdGhlIGhpZXJhcmNoeS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1zdWdnZXN0LW5leHQtc3luYyI+PC9hPjxoMz5nc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIGEgc3VnZ2VzdGlvbiBmb3IgdGltZXN0YW1wcyB3aGVyZSBidWZmZXJzIHNob3VsZCBiZSBzcGxpdAotdG8gZ2V0IGJlc3QgY29udHJvbGxlciByZXN1bHRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc3VnZ2VzdC1uZXh0LXN5bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1zdWdnZXN0LW5leHQtc3luYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFJldHVybnMgdGhlIHN1Z2dlc3RlZCB0aW1lc3RhbXAgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19USU1FX05PTkU8L2NvZGU+PC9hPgotaWYgbm8gY29udHJvbC1yYXRlIHdhcyBzZXQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc3luYy12YWx1ZXMiPjwvYT48aDM+Z3N0X29iamVjdF9zeW5jX3ZhbHVlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCwgYWNjb3JkaW5nIHRvIHRoZSA8YSBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlczwvc3Bhbj48L2E+IHRoYXQKLShtYXliZSkgaGFuZGxlIHRoZW0gYW5kIGZvciB0aGUgZ2l2ZW4gdGltZXN0YW1wLjwvcD4KLTxwPklmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGl0IGlzIG1vc3QgbGlrZWx5IHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIGZhdWx0LgotTW9zdCBwcm9iYWJseSB0aGUgY29udHJvbCBzb3VyY2VzIGFyZSBub3Qgc2V0dXAgY29ycmVjdGx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc3luYy12YWx1ZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWUgdGhhdCBzaG91bGQgYmUgcHJvY2Vzc2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXN5bmMtdmFsdWVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjb250cm9sbGVyIHZhbHVlcyBjb3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBvYmplY3QKLXByb3BlcnRpZXMsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWhhcy1hY3RpdmUtY29udHJvbC1iaW5kaW5ncyI+PC9hPjxoMz5nc3Rfb2JqZWN0X2hhc19hY3RpdmVfY29udHJvbF9iaW5kaW5nc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X29iamVjdF9oYXNfYWN0aXZlX2NvbnRyb2xfYmluZGluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSBoYXMgYWN0aXZlIGNvbnRyb2xsZWQgcHJvcGVydGllcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWhhcy1hY3RpdmUtY29udHJvbC1iaW5kaW5ncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWhhcy1hY3RpdmUtY29udHJvbC1iaW5kaW5ncy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgb2JqZWN0IGhhcyBhY3RpdmUgY29udHJvbGxlZCBwcm9wZXJ0aWVzPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LWNvbnRyb2wtYmluZGluZ3MtZGlzYWJsZWQiPjwvYT48aDM+Z3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nc19kaXNhYmxlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfYmluZGluZ3NfZGlzYWJsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBkaXNhYmxlZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSBhbGwgY29udHJvbGxlZCBwcm9wZXJ0aWVzIG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0gZm9yCi1zb21lIHRpbWUsIGkuZS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc3luYy12YWx1ZXMiIHRpdGxlPSJnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCk8L2NvZGU+PC9hPiB3aWxsIGRvIG5vdGhpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1zZXQtY29udHJvbC1iaW5kaW5ncy1kaXNhYmxlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kaXNhYmxlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJvb2xlYW4gdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBjb250cm9sbGVyCi1vciBub3QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LWNvbnRyb2wtYmluZGluZy1kaXNhYmxlZCI+PC9hPjxoMz5nc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdfZGlzYWJsZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdfZGlzYWJsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGRpc2FibGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBjb250cm9sIGJpbmRpbmdzIG9uIGEgcHJvcGVydHkgZm9yCi1zb21lIHRpbWUsIGkuZS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc3luYy12YWx1ZXMiIHRpdGxlPSJnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCk8L2NvZGU+PC9hPiB3aWxsIGRvIG5vdGhpbmcgZm9yIHRoZQotcHJvcGVydHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1zZXQtY29udHJvbC1iaW5kaW5nLWRpc2FibGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3BlcnR5X25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcm9wZXJ0eSB0byBkaXNhYmxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRpc2FibGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Ym9vbGVhbiB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc2FibGUgdGhlIGNvbnRyb2xsZXIKLW9yIG5vdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1hZGQtY29udHJvbC1iaW5kaW5nIj48L2E+PGgzPmdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sQmluZGluZzwvc3Bhbj48L2E+ICpiaW5kaW5nPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkF0dGFjaCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sQmluZGluZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT4gdG8gdGhlIG9iamVjdC4gSWYgdGhlcmUgYWxyZWFkeSB3YXMgYQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sQmluZGluZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT4gZm9yIHRoaXMgcHJvcGVydHkgaXQgd2lsbCBiZSByZXBsYWNlZC48L3A+Ci08cD5UaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotIHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW5kaW5nPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1hZGQtY29udHJvbC1iaW5kaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb250cm9sbGVyIG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPiB0aGF0IHNob3VsZCBiZSB1c2VkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtYWRkLWNvbnRyb2wtYmluZGluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluZGluZzwvY29kZT48L2VtPgotaGFzIG5vdCBiZWVuIHNldHVwIGZvciB0aGlzIG9iamVjdCBvcgotaGFzIGJlZW4gc2V0dXAgZm9yIGEgbm9uIHN1aXRhYmxlIHByb3BlcnR5LCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1jb250cm9sLWJpbmRpbmciPjwvYT48aDM+Z3N0X29iamVjdF9nZXRfY29udHJvbF9iaW5kaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sQmluZGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250cm9sQmluZGluZzwvc3Bhbj48L2E+wqAqCi1nc3Rfb2JqZWN0X2dldF9jb250cm9sX2JpbmRpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3BlcnR5X25hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgY29ycmVzcG9uZGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPiBmb3IgdGhlIHByb3BlcnR5LiBUaGlzIHNob3VsZCBiZQotdW5yZWZlcmVuY2VkIGFnYWluIGFmdGVyIHVzZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1jb250cm9sLWJpbmRpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9wZXJ0eV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiB0aGUgcHJvcGVydHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LWNvbnRyb2wtYmluZGluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPiBmb3IKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBjb250cm9sbGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtcmVtb3ZlLWNvbnRyb2wtYmluZGluZyI+PC9hPjxoMz5nc3Rfb2JqZWN0X3JlbW92ZV9jb250cm9sX2JpbmRpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9vYmplY3RfcmVtb3ZlX2NvbnRyb2xfYmluZGluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPiAqYmluZGluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmVzIHRoZSBjb3JyZXNwb25kaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sQmluZGluZzwvc3Bhbj48L2E+LiBJZiBpdCB3YXMgdGhlCi1sYXN0IHJlZiBvZiB0aGUgYmluZGluZywgaXQgd2lsbCBiZSBkaXNwb3NlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LXJlbW92ZS1jb250cm9sLWJpbmRpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW5kaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGJpbmRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtcmVtb3ZlLWNvbnRyb2wtYmluZGluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgYmluZGluZyBjb3VsZCBiZSByZW1vdmVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC12YWx1ZSI+PC9hPjxoMz5nc3Rfb2JqZWN0X2dldF92YWx1ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi1nc3Rfb2JqZWN0X2dldF92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXA8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb250cm9sbGVkIHByb3BlcnR5IGF0IHRoZSByZXF1ZXN0ZWQgdGltZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9wZXJ0eV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGltZSB0aGUgY29udHJvbC1jaGFuZ2Ugc2hvdWxkIGJlIHJlYWQgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1nZXQtdmFsdWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgR1ZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gdGltZSwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgcHJvcGVydHkgaXNuJ3QgY29udHJvbGxlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheSI+PC9hPjxoMz5nc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJhecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbl92YWx1ZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHZhbHVlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIGEgbnVtYmVyIG9mIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGNvbnRyb2xsZWQgcHJvcGVydHkgc3RhcnRpbmcgYXQgdGhlCi1yZXF1ZXN0ZWQgdGltZS4gVGhlIGFycmF5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZXM8L2NvZGU+PC9lbT4KLSBuZWVkIHRvIGhvbGQgZW5vdWdoIHNwYWNlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bl92YWx1ZXM8L2NvZGU+PC9lbT4KLSBvZgotdGhlIHNhbWUgdHlwZSBhcyB0aGUgb2JqZWN0cyBwcm9wZXJ0eSdzIHR5cGUuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgaWYgb25lIHdhbnRzIHRvIGUuZy4gZHJhdyBhIGdyYXBoIG9mIHRoZSBjb250cm9sCi1jdXJ2ZSBvciBhcHBseSBhIGNvbnRyb2wgY3VydmUgc2FtcGxlIGJ5IHNhbXBsZS48L3A+Ci08cD5UaGUgdmFsdWVzIGFyZSB1bmJveGVkIGFuZCByZWFkeSB0byBiZSB1c2VkLiBUaGUgc2ltaWxhciBmdW5jdGlvbiAKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1nLXZhbHVlLWFycmF5IiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfZ192YWx1ZV9hcnJhecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9nZXRfZ192YWx1ZV9hcnJheSgpPC9jb2RlPjwvYT4gcmV0dXJucyB0aGUgYXJyYXkgYXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVzPC9zcGFuPjwvYT4gYW5kIGlzCi1iZXR0ZXIgc3VpdGVzIGZvciBiaW5kaW5ncy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9wZXJ0eV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW50ZXJ2YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGltZSBzcGFjaW5nIGJldHdlZW4gc3Vic2VxdWVudCB2YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bl92YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIHZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LXZhbHVlLWFycmF5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBnaXZlbiBhcnJheSBjb3VsZCBiZSBmaWxsZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1nLXZhbHVlLWFycmF5Ij48L2E+PGgzPmdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBpbnRlcnZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuX3ZhbHVlczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyBhIG51bWJlciBvZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZXM8L3NwYW4+PC9hPiBmb3IgdGhlIGdpdmVuIGNvbnRyb2xsZWQgcHJvcGVydHkgc3RhcnRpbmcgYXQgdGhlCi1yZXF1ZXN0ZWQgdGltZS4gVGhlIGFycmF5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZXM8L2NvZGU+PC9lbT4KLSBuZWVkIHRvIGhvbGQgZW5vdWdoIHNwYWNlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bl92YWx1ZXM8L2NvZGU+PC9lbT4KLSBvZgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPi48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpZiBvbmUgd2FudHMgdG8gZS5nLiBkcmF3IGEgZ3JhcGggb2YgdGhlIGNvbnRyb2wKLWN1cnZlIG9yIGFwcGx5IGEgY29udHJvbCBjdXJ2ZSBzYW1wbGUgYnkgc2FtcGxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LWctdmFsdWUtYXJyYXkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvcGVydHlfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWUgdGhhdCBzaG91bGQgYmUgcHJvY2Vzc2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmludGVydmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRpbWUgc3BhY2luZyBiZXR3ZWVuIHN1YnNlcXVlbnQgdmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5fdmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciBvZiB2YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1nLXZhbHVlLWFycmF5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBnaXZlbiBhcnJheSBjb3VsZCBiZSBmaWxsZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtb2JqZWN0LWdldC1jb250cm9sLXJhdGUiPjwvYT48aDM+Z3N0X29iamVjdF9nZXRfY29udHJvbF9yYXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk9idGFpbiB0aGUgY29udHJvbC1yYXRlIGZvciB0aGlzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLS4gQXVkaW8gcHJvY2Vzc2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPgotb2JqZWN0cyB3aWxsIHVzZSB0aGlzIHJhdGUgdG8gc3ViLWRpdmlkZSB0aGVpciBwcm9jZXNzaW5nIGxvb3AgYW5kIGNhbGwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN5bmMtdmFsdWVzIiB0aXRsZT0iZ3N0X29iamVjdF9zeW5jX3ZhbHVlc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF9zeW5jX3ZhbHVlcygpPC9jb2RlPjwvYT4gaW5iZXR3ZWVuLiBUaGUgbGVuZ3RoIG9mIHRoZSBwcm9jZXNzaW5nIHNlZ21lbnQKLXNob3VsZCBiZSB1cCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udHJvbDwvY29kZT48L2VtPgotLXJhdGUgbmFub3NlY29uZHMuPC9wPgotPHA+SWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSBpcyBub3QgdW5kZXIgcHJvcGVydHkgY29udHJvbCwgdGhpcyB3aWxsIHJldHVybgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19USU1FX05PTkU8L2NvZGU+PC9hPi4gVGhpcyBhbGxvd3MgdGhlIGVsZW1lbnQgdG8gYXZvaWQgdGhlIHN1Yi1kaXZpZGluZy48L3A+Ci08cD5UaGUgY29udHJvbC1yYXRlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UgaWYgdGhlIGVsZW1lbnQgaXMgaW4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBBVVNFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BBVVNFRDwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBMQVlJTkc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9QTEFZSU5HPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1nZXQtY29udHJvbC1yYXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3QtZ2V0LWNvbnRyb2wtcmF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBjb250cm9sIHJhdGUgaW4gbmFub3NlY29uZHM8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW9iamVjdC1zZXQtY29udHJvbC1yYXRlIj48L2E+PGgzPmdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBjb250cm9sX3JhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hhbmdlIHRoZSBjb250cm9sLXJhdGUgZm9yIHRoaXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLiBBdWRpbyBwcm9jZXNzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+Ci1vYmplY3RzIHdpbGwgdXNlIHRoaXMgcmF0ZSB0byBzdWItZGl2aWRlIHRoZWlyIHByb2Nlc3NpbmcgbG9vcCBhbmQgY2FsbAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc3luYy12YWx1ZXMiIHRpdGxlPSJnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCk8L2NvZGU+PC9hPiBpbmJldHdlZW4uIFRoZSBsZW5ndGggb2YgdGhlIHByb2Nlc3Npbmcgc2VnbWVudAotc2hvdWxkIGJlIHVwIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb250cm9sPC9jb2RlPjwvZW0+Ci0tcmF0ZSBuYW5vc2Vjb25kcy48L3A+Ci08cD5UaGUgY29udHJvbC1yYXRlIHNob3VsZCBub3QgY2hhbmdlIGlmIHRoZSBlbGVtZW50IGlzIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBBVVNFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BBVVNFRDwvY29kZT48L2E+IG9yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QTEFZSU5HOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfUExBWUlORzwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1vYmplY3Qtc2V0LWNvbnRyb2wtcmF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250cm9sX3JhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IGNvbnRyb2wtcmF0ZSBpbiBuYW5vc2Vjb25kcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RPYmplY3Qub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9iamVjdC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdE9iamVjdDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE9iamVjdCB7Ci0gIEdNdXRleCAgICAgICAgIGxvY2s7ICAgICAgICAvKiBvYmplY3QgTE9DSyAqLwotICBnY2hhciAgICAgICAgICpuYW1lOyAgICAgICAgLyogb2JqZWN0IG5hbWUgKi8KLSAgR3N0T2JqZWN0ICAgICAqcGFyZW50OyAgICAgIC8qIHRoaXMgb2JqZWN0J3MgcGFyZW50LCB3ZWFrIHJlZiAqLwotICBndWludDMyICAgICAgICBmbGFnczsKLX07Ci08L3ByZT4KLTxwPkdTdHJlYW1lciBiYXNlIG9iamVjdCBjbGFzcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RPYmplY3QubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRocmVhZHMuaHRtbCNHTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTXV0ZXg8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0T2JqZWN0LXN0cnVjdC5sb2NrIj48L2E+bG9jazwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+b2JqZWN0IExPQ0s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE9iamVjdC1zdHJ1Y3QubmFtZSI+PC9hPm5hbWU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBuYW1lIG9mIHRoZSBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE9iamVjdC1zdHJ1Y3QucGFyZW50Ij48L2E+cGFyZW50PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGlzIG9iamVjdCdzIHBhcmVudCwgd2VhayByZWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE9iamVjdC1zdHJ1Y3QuZmxhZ3MiPjwvYT5mbGFnczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZmxhZ3MgZm9yIHRoaXMgb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RPYmplY3RDbGFzcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0T2JqZWN0Q2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RPYmplY3RDbGFzcyB7Ci0gIEdJbml0aWFsbHlVbm93bmVkQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIGNvbnN0IGdjaGFywqAqcGF0aF9zdHJpbmdfc2VwYXJhdG9yOwotCi0gIC8qIHNpZ25hbHMgKi8KLSAgdm9pZCAgICAgICAgICAoKmRlZXBfbm90aWZ5KSAgICAgIChHc3RPYmplY3QgKiBvYmplY3QsIEdzdE9iamVjdCAqIG9yaWcsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLSAgLyogdmlydHVhbCBtZXRob2RzIGZvciBzdWJjbGFzc2VzICovCi19OwotPC9wcmU+Ci08cD5HU3RyZWFtZXIgYmFzZSBvYmplY3QgY2xhc3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0T2JqZWN0Q2xhc3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPmNvbnN0wqA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE9iamVjdENsYXNzLnBhdGgtc3RyaW5nLXNlcGFyYXRvciI+PC9hPnBhdGhfc3RyaW5nX3NlcGFyYXRvcjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+c2VwYXJhdG9yIHVzZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LXBhdGgtc3RyaW5nIiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE9iamVjdENsYXNzLmRlZXAtbm90aWZ5Ij48L2E+ZGVlcF9ub3RpZnk8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmRlZmF1bHQgc2lnbmFsIGhhbmRsZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9iamVjdEZsYWdzIj48L2E+PGgzPmVudW0gR3N0T2JqZWN0RmxhZ3M8L2gzPgotPHA+VGhlIHN0YW5kYXJkIGZsYWdzIHRoYXQgYW4gZ3N0b2JqZWN0IG1heSBoYXZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE9iamVjdEZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU9CSkVDVC1GTEFHLU1BWS1CRS1MRUFLRUQ6Q0FQUyI+PC9hPkdTVF9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBvYmplY3QgaXMgZXhwZWN0ZWQgdG8gc3RheSBhbGl2ZSBldmVuCi1hZnRlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1kZWluaXQiIHRpdGxlPSJnc3RfZGVpbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGVpbml0KCk8L2NvZGU+PC9hPiBoYXMgYmVlbiBjYWxsZWQgYW5kIHNvIHNob3VsZCBiZSBpZ25vcmVkIGJ5IGxlYWsKLWRldGVjdGlvbiB0b29scy4gKFNpbmNlIDEuMTApPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1PQkpFQ1QtRkxBRy1MQVNUOkNBUFMiPjwvYT5HU1RfT0JKRUNUX0ZMQUdfTEFTVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zdWJjbGFzc2VzIGNhbiBhZGQgYWRkaXRpb25hbCBmbGFncyBzdGFydGluZyBmcm9tIHRoaXMgZmxhZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RPYmplY3QucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9iamVjdC0tbmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5hbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5hbWXigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIG5hbWUgb2YgdGhlIG9iamVjdC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T2JqZWN0LS1wYXJlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwYXJlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBhcmVudOKAnSAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIHBhcmVudCBvZiB0aGUgb2JqZWN0LiBQbGVhc2Ugbm90ZSwgdGhhdCB3aGVuIGNoYW5naW5nIHRoZSAncGFyZW50JwotcHJvcGVydHksIHdlIGRvbid0IGVtaXQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LW5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnG5vdGlmeeKAnTwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LWRlZXAtbm90aWZ5IiB0aXRsZT0iVGhlIOKAnGRlZXAtbm90aWZ54oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGRlZXAtbm90aWZ54oCdPC9zcGFuPjwvYT4KLXNpZ25hbHMgZHVlIHRvIGxvY2tpbmcgaXNzdWVzLiBJbiBzb21lIGNhc2VzIG9uZSBjYW4gdXNlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLWVsZW1lbnQtYWRkZWQiIHRpdGxlPSJUaGUg4oCcZWxlbWVudC1hZGRlZOKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxlbGVtZW50LWFkZGVk4oCdPC9zcGFuPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbi1lbGVtZW50LXJlbW92ZWQiIHRpdGxlPSJUaGUg4oCcZWxlbWVudC1yZW1vdmVk4oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGVsZW1lbnQtcmVtb3ZlZOKAnTwvc3Bhbj48L2E+IHNpZ25hbHMgb24gdGhlIHBhcmVudCB0bwotYWNoaWV2ZSBhIHNpbWlsYXIgZWZmZWN0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0T2JqZWN0LnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9iamVjdC1kZWVwLW5vdGlmeSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRlZXAtbm90aWZ54oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICAqZ3N0b2JqZWN0LAotICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gICpwcm9wX29iamVjdCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1TcGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+ICpwcm9wLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+VGhlIGRlZXAgbm90aWZ5IHNpZ25hbCBpcyB1c2VkIHRvIGJlIG5vdGlmaWVkIG9mIHByb3BlcnR5IGNoYW5nZXMuIEl0IGlzCi10eXBpY2FsbHkgYXR0YWNoZWQgdG8gdGhlIHRvcGxldmVsIGJpbiB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgZnJvbSBhbGwKLXRoZSBlbGVtZW50cyBjb250YWluZWQgaW4gdGhhdCBiaW4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0T2JqZWN0LWRlZXAtbm90aWZ5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdzdG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvcF9vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHRoYXQgb3JpZ2luYXRlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcHJvcGVydHkgdGhhdCBjaGFuZ2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtTk8tSE9PS1M6Q0FQUyI+Tm8gSG9va3M8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0UGFkLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFBhZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYThiZTc5Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0UGFkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NTg5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RQYWQ6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQYWQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBhZC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQYWQucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGFkLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RPYmplY3QuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0UGFkIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UGFkLnRvcF9vZl9wYWdlIj48L2E+R3N0UGFkPC9zcGFuPjwvaDI+Ci08cD5Hc3RQYWQg4oCUIE9iamVjdCBjb250YWluZWQgYnkgZWxlbWVudHMgdGhhdCBhbGxvd3MgbGlua3MgdG8KLSAgICAgICAgICAgICAgICAgICAgb3RoZXIgZWxlbWVudHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluay1nZXQtbmFtZSIgdGl0bGU9ImdzdF9wYWRfbGlua19nZXRfbmFtZcKgKCkiPmdzdF9wYWRfbGlua19nZXRfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1GQUlMRUQ6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTElOS19GQUlMRUQoKSI+R1NUX1BBRF9MSU5LX0ZBSUxFRDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstU1VDQ0VTU0ZVTDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwoKSI+R1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUw8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LWZsb3ctZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZmxvd19nZXRfbmFtZcKgKCkiPmdzdF9mbG93X2dldF9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtZmxvdy10by1xdWFyayIgdGl0bGU9ImdzdF9mbG93X3RvX3F1YXJrwqAoKSI+Z3N0X2Zsb3dfdG9fcXVhcms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW1vZGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX21vZGVfZ2V0X25hbWXCoCgpIj5nc3RfcGFkX21vZGVfZ2V0X25hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RvcmUtc3RpY2t5LWV2ZW50IiB0aXRsZT0iZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnTCoCgpIj5nc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX2dldF9uYW1lKCkiPmdzdF9wYWRfZ2V0X25hbWU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1kaXJlY3Rpb24iIHRpdGxlPSJnc3RfcGFkX2dldF9kaXJlY3Rpb27CoCgpIj5nc3RfcGFkX2dldF9kaXJlY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYXJlbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9wYXJlbnQoKSI+Z3N0X3BhZF9nZXRfcGFyZW50PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFyZW50LWVsZW1lbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudMKgKCkiPmdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYWQtdGVtcGxhdGUiIHRpdGxlPSJnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGXCoCgpIj5nc3RfcGFkX2dldF9wYWRfdGVtcGxhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIgdGl0bGU9ImdzdF9wYWRfbGlua8KgKCkiPmdzdF9wYWRfbGluazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX2xpbmtfZnVsbMKgKCkiPmdzdF9wYWRfbGlua19mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstbWF5YmUtZ2hvc3RpbmciIHRpdGxlPSJnc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmfCoCgpIj5nc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3Rpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluay1tYXliZS1naG9zdGluZy1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGzCoCgpIj5nc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmdfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC11bmxpbmsiIHRpdGxlPSJnc3RfcGFkX3VubGlua8KgKCkiPmdzdF9wYWRfdW5saW5rPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWxpbmtlZCIgdGl0bGU9ImdzdF9wYWRfaXNfbGlua2VkwqAoKSI+Z3N0X3BhZF9pc19saW5rZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2FuLWxpbmsiIHRpdGxlPSJnc3RfcGFkX2Nhbl9saW5rwqAoKSI+Z3N0X3BhZF9jYW5fbGluazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtYWxsb3dlZC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzwqAoKSI+Z3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1jdXJyZW50LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2dldF9jdXJyZW50X2NhcHPCoCgpIj5nc3RfcGFkX2dldF9jdXJyZW50X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhZC10ZW1wbGF0ZS1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHPCoCgpIj5nc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGVlciIgdGl0bGU9ImdzdF9wYWRfZ2V0X3BlZXLCoCgpIj5nc3RfcGFkX2dldF9wZWVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC11c2UtZml4ZWQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfdXNlX2ZpeGVkX2NhcHPCoCgpIj5nc3RfcGFkX3VzZV9maXhlZF9jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWhhcy1jdXJyZW50LWNhcHMiIHRpdGxlPSJnc3RfcGFkX2hhc19jdXJyZW50X2NhcHPCoCgpIj5nc3RfcGFkX2hhc19jdXJyZW50X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0aWNreS1ldmVudCIgdGl0bGU9ImdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudMKgKCkiPmdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uwqAoKSI+KkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RpY2t5LWV2ZW50cy1mb3JlYWNoIiB0aXRsZT0iZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2jCoCgpIj5nc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1hY3RpdmUiIHRpdGxlPSJnc3RfcGFkX2lzX2FjdGl2ZcKgKCkiPmdzdF9wYWRfaXNfYWN0aXZlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1sYXN0LWZsb3ctcmV0dXJuIiB0aXRsZT0iZ3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybsKgKCkiPmdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tVFlQRTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QUk9CRV9JTkZPX1RZUEUoKSI+R1NUX1BBRF9QUk9CRV9JTkZPX1RZUEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1JTkZPLUlEOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BST0JFX0lORk9fSUQoKSI+R1NUX1BBRF9QUk9CRV9JTkZPX0lEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtSU5GTy1EQVRBOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BST0JFX0lORk9fREFUQSgpIj5HU1RfUEFEX1BST0JFX0lORk9fREFUQTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tQlVGRkVSOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSKCkiPkdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVI8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1JTkZPLUJVRkZFUi1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSX0xJU1QoKSI+R1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUl9MSVNUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtSU5GTy1FVkVOVDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UKCkiPkdTVF9QQURfUFJPQkVfSU5GT19FVkVOVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tUVVFUlk6Q0FQUyIgdGl0bGU9IkdTVF9QQURfUFJPQkVfSU5GT19RVUVSWSgpIj5HU1RfUEFEX1BST0JFX0lORk9fUVVFUlk8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb2JlLWluZm8tZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9wYWRfcHJvYmVfaW5mb19nZXRfYnVmZmVywqAoKSI+Z3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHJvYmUtaW5mby1nZXQtYnVmZmVyLWxpc3QiIHRpdGxlPSJnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2J1ZmZlcl9saXN0wqAoKSI+Z3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXJfbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wcm9iZS1pbmZvLWdldC1ldmVudCIgdGl0bGU9ImdzdF9wYWRfcHJvYmVfaW5mb19nZXRfZXZlbnTCoCgpIj5nc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2V2ZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb2JlLWluZm8tZ2V0LXF1ZXJ5IiB0aXRsZT0iZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9xdWVyecKgKCkiPmdzdF9wYWRfcHJvYmVfaW5mb19nZXRfcXVlcnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tT0ZGU0VUOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BST0JFX0lORk9fT0ZGU0VUKCkiPkdTVF9QQURfUFJPQkVfSU5GT19PRkZTRVQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1JTkZPLVNJWkU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfUFJPQkVfSU5GT19TSVpFKCkiPkdTVF9QQURfUFJPQkVfSU5GT19TSVpFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtSU5GTy1GTE9XLVJFVFVSTjpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QUk9CRV9JTkZPX0ZMT1dfUkVUVVJOKCkiPkdTVF9QQURfUFJPQkVfSU5GT19GTE9XX1JFVFVSTjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZFByb2JlUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZFByb2JlUmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlQ2FsbGJhY2siIHRpdGxlPSJHc3RQYWRQcm9iZUNhbGxiYWNrwqAoKSI+KkdzdFBhZFByb2JlQ2FsbGJhY2s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWxvbmc8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hZGQtcHJvYmUiIHRpdGxlPSJnc3RfcGFkX2FkZF9wcm9iZcKgKCkiPmdzdF9wYWRfYWRkX3Byb2JlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1yZW1vdmUtcHJvYmUiIHRpdGxlPSJnc3RfcGFkX3JlbW92ZV9wcm9iZcKgKCkiPmdzdF9wYWRfcmVtb3ZlX3Byb2JlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWJsb2NrZWQiIHRpdGxlPSJnc3RfcGFkX2lzX2Jsb2NrZWTCoCgpIj5nc3RfcGFkX2lzX2Jsb2NrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtYmxvY2tpbmciIHRpdGxlPSJnc3RfcGFkX2lzX2Jsb2NraW5nwqAoKSI+Z3N0X3BhZF9pc19ibG9ja2luZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1vZmZzZXQiIHRpdGxlPSJnc3RfcGFkX2dldF9vZmZzZXTCoCgpIj5nc3RfcGFkX2dldF9vZmZzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1vZmZzZXQiIHRpdGxlPSJnc3RfcGFkX3NldF9vZmZzZXTCoCgpIj5nc3RfcGFkX3NldF9vZmZzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmV3IiB0aXRsZT0iZ3N0X3BhZF9uZXfCoCgpIj5nc3RfcGFkX25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGXCoCgpIj5nc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXN0YXRpYy10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlwqAoKSI+Z3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uKCkiPmdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNoYWluLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb25fZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5GdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluRnVuY3Rpb27CoCgpIj4qR3N0UGFkQ2hhaW5GdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNoYWluLWxpc3QtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uKCkiPmdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2hhaW4tbGlzdC1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uwqAoKSI+KkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1yYW5nZSIgdGl0bGU9ImdzdF9wYWRfZ2V0X3JhbmdlwqAoKSI+Z3N0X3BhZF9nZXRfcmFuZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uKCkiPmdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWdldHJhbmdlLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb25fZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb27CoCgpIj4qR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWV2ZW50LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24oKSI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZXZlbnQtZnVuY3Rpb24tZnVsbCIgdGl0bGU9ImdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uX2Z1bGzCoCgpIj5nc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbl9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRFdmVudEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRXZlbnRGdW5jdGlvbsKgKCkiPipHc3RQYWRFdmVudEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZXZlbnQtZnVsbC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb24oKSI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1ldmVudC1mdWxsLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uX2Z1bGzCoCgpIj5nc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uX2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb27CoCgpIj4qR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1saW5rLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbigpIj5nc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWxpbmstZnVuY3Rpb24tZnVsbCIgdGl0bGU9ImdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb25fZnVsbMKgKCkiPmdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb25fZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkTGlua0Z1bmN0aW9uwqAoKSI+KkdzdFBhZExpbmtGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LXVubGluay1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbigpIj5nc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtdW5saW5rLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb25fZnVsbMKgKCkiPmdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbl9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRVbmxpbmtGdW5jdGlvbsKgKCkiPipHc3RQYWRVbmxpbmtGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wcm94eS1xdWVyeS1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9wcm94eV9xdWVyeV9jYXBzwqAoKSI+Z3N0X3BhZF9wcm94eV9xdWVyeV9jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb3h5LXF1ZXJ5LWFjY2VwdC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9wcm94eV9xdWVyeV9hY2NlcHRfY2Fwc8KgKCkiPmdzdF9wYWRfcHJveHlfcXVlcnlfYWNjZXB0X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY3RpdmF0ZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uKCkiPmdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2YXRlLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb25fZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQWN0aXZhdGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlRnVuY3Rpb27CoCgpIj4qR3N0UGFkQWN0aXZhdGVGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2YXRlbW9kZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbigpIj5nc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVtb2RlLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb25fZnVsbMKgKCkiPmdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbl9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uwqAoKSI+KkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5lZWRzLXJlY29uZmlndXJlIiB0aXRsZT0iZ3N0X3BhZF9uZWVkc19yZWNvbmZpZ3VyZcKgKCkiPmdzdF9wYWRfbmVlZHNfcmVjb25maWd1cmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hlY2stcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlwqAoKSI+Z3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbWFyay1yZWNvbmZpZ3VyZSIgdGl0bGU9ImdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZcKgKCkiPmdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoIiB0aXRsZT0iZ3N0X3BhZF9wdXNowqAoKSI+Z3N0X3BhZF9wdXNoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3B1c2hfZXZlbnTCoCgpIj5nc3RfcGFkX3B1c2hfZXZlbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaC1saXN0IiB0aXRsZT0iZ3N0X3BhZF9wdXNoX2xpc3TCoCgpIj5nc3RfcGFkX3B1c2hfbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdWxsLXJhbmdlIiB0aXRsZT0iZ3N0X3BhZF9wdWxsX3JhbmdlwqAoKSI+Z3N0X3BhZF9wdWxsX3JhbmdlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFjdGl2YXRlLW1vZGUiIHRpdGxlPSJnc3RfcGFkX2FjdGl2YXRlX21vZGXCoCgpIj5nc3RfcGFkX2FjdGl2YXRlX21vZGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2VuZC1ldmVudCIgdGl0bGU9ImdzdF9wYWRfc2VuZF9ldmVudMKgKCkiPmdzdF9wYWRfc2VuZF9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1ldmVudC1kZWZhdWx0IiB0aXRsZT0iZ3N0X3BhZF9ldmVudF9kZWZhdWx0wqAoKSI+Z3N0X3BhZF9ldmVudF9kZWZhdWx0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5IiB0aXRsZT0iZ3N0X3BhZF9xdWVyecKgKCkiPmdzdF9wYWRfcXVlcnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1xdWVyeSIgdGl0bGU9ImdzdF9wYWRfcGVlcl9xdWVyecKgKCkiPmdzdF9wYWRfcGVlcl9xdWVyeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1kZWZhdWx0IiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9kZWZhdWx0wqAoKSI+Z3N0X3BhZF9xdWVyeV9kZWZhdWx0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LXBvc2l0aW9uIiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbsKgKCkiPmdzdF9wYWRfcXVlcnlfcG9zaXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktZHVyYXRpb24iIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uwqAoKSI+Z3N0X3BhZF9xdWVyeV9kdXJhdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1jb252ZXJ0IiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9jb252ZXJ0wqAoKSI+Z3N0X3BhZF9xdWVyeV9jb252ZXJ0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWFjY2VwdC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9hY2NlcHRfY2Fwc8KgKCkiPmdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktY2FwcyIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfY2Fwc8KgKCkiPmdzdF9wYWRfcXVlcnlfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLXF1ZXJ5LXBvc2l0aW9uIiB0aXRsZT0iZ3N0X3BhZF9wZWVyX3F1ZXJ5X3Bvc2l0aW9uwqAoKSI+Z3N0X3BhZF9wZWVyX3F1ZXJ5X3Bvc2l0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktZHVyYXRpb24iIHRpdGxlPSJnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb27CoCgpIj5nc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1xdWVyeS1jb252ZXJ0IiB0aXRsZT0iZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NvbnZlcnTCoCgpIj5nc3RfcGFkX3BlZXJfcXVlcnlfY29udmVydDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLXF1ZXJ5LWFjY2VwdC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9wZWVyX3F1ZXJ5X2FjY2VwdF9jYXBzwqAoKSI+Z3N0X3BhZF9wZWVyX3F1ZXJ5X2FjY2VwdF9jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktY2FwcyIgdGl0bGU9ImdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzwqAoKSI+Z3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1xdWVyeS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uKCkiPmdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LXF1ZXJ5LWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb25fZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFF1ZXJ5RnVuY3Rpb27CoCgpIj4qR3N0UGFkUXVlcnlGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uKCkiPmdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbl9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uwqAoKSI+KkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzIiB0aXRsZT0iZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzwqAoKSI+Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0IiB0aXRsZT0iZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHTCoCgpIj5nc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWVsZW1lbnQtcHJpdmF0ZSIgdGl0bGU9ImdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZcKgKCkiPmdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtZWxlbWVudC1wcml2YXRlIiB0aXRsZT0iZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlwqAoKSI+Z3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNyZWF0ZS1zdHJlYW0taWQiIHRpdGxlPSJnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWTCoCgpIj5nc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY3JlYXRlLXN0cmVhbS1pZC1wcmludGYiIHRpdGxlPSJnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmwqAoKSI+Z3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jcmVhdGUtc3RyZWFtLWlkLXByaW50Zi12YWxpc3QiIHRpdGxlPSJnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmX3ZhbGlzdMKgKCkiPmdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGZfdmFsaXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1zdHJlYW0taWQiIHRpdGxlPSJnc3RfcGFkX2dldF9zdHJlYW1faWTCoCgpIj5nc3RfcGFkX2dldF9zdHJlYW1faWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0cmVhbSIgdGl0bGU9ImdzdF9wYWRfZ2V0X3N0cmVhbcKgKCkiPmdzdF9wYWRfZ2V0X3N0cmVhbTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRm9yd2FyZEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRm9yd2FyZEZ1bmN0aW9uwqAoKSI+KkdzdFBhZEZvcndhcmRGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1mb3J3YXJkIiB0aXRsZT0iZ3N0X3BhZF9mb3J3YXJkwqAoKSI+Z3N0X3BhZF9mb3J3YXJkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoYWluIiB0aXRsZT0iZ3N0X3BhZF9jaGFpbsKgKCkiPmdzdF9wYWRfY2hhaW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hhaW4tbGlzdCIgdGl0bGU9ImdzdF9wYWRfY2hhaW5fbGlzdMKgKCkiPmdzdF9wYWRfY2hhaW5fbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdGFydC10YXNrIiB0aXRsZT0iZ3N0X3BhZF9zdGFydF90YXNrwqAoKSI+Z3N0X3BhZF9zdGFydF90YXNrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBhdXNlLXRhc2siIHRpdGxlPSJnc3RfcGFkX3BhdXNlX3Rhc2vCoCgpIj5nc3RfcGFkX3BhdXNlX3Rhc2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RvcC10YXNrIiB0aXRsZT0iZ3N0X3BhZF9zdG9wX3Rhc2vCoCgpIj5nc3RfcGFkX3N0b3BfdGFzazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZlIiB0aXRsZT0iZ3N0X3BhZF9zZXRfYWN0aXZlwqAoKSI+Z3N0X3BhZF9zZXRfYWN0aXZlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1HRVQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKCkiPkdTVF9QQURfR0VUX1NUUkVBTV9MT0NLPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU1RSRUFNX0xPQ0soKSI+R1NUX1BBRF9TVFJFQU1fTE9DSzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1UUllMT0NLOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NUUkVBTV9UUllMT0NLKCkiPkdTVF9QQURfU1RSRUFNX1RSWUxPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tVU5MT0NLOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NUUkVBTV9VTkxPQ0soKSI+R1NUX1BBRF9TVFJFQU1fVU5MT0NLPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9OQU1FKCkiPkdTVF9QQURfTkFNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QQVJFTlQoKSI+R1NUX1BBRF9QQVJFTlQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1FTEVNRU5ULVBSSVZBVEU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfRUxFTUVOVF9QUklWQVRFKCkiPkdTVF9QQURfRUxFTUVOVF9QUklWQVRFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtUEFELVRFTVBMQVRFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BBRF9URU1QTEFURSgpIj5HU1RfUEFEX1BBRF9URU1QTEFURTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELURJUkVDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1BBRF9ESVJFQ1RJT04oKSI+R1NUX1BBRF9ESVJFQ1RJT048L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1MQVNULUZMT1ctUkVUVVJOOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0xBU1RfRkxPV19SRVRVUk4oKSI+R1NUX1BBRF9MQVNUX0ZMT1dfUkVUVVJOPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtVEFTSzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9UQVNLKCkiPkdTVF9QQURfVEFTSzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELU1PREU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTU9ERSgpIj5HU1RfUEFEX01PREU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1BQ1RJVkFURUZVTkM6Q0FQUyIgdGl0bGU9IkdTVF9QQURfQUNUSVZBVEVGVU5DKCkiPkdTVF9QQURfQUNUSVZBVEVGVU5DPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtQUNUSVZBVEVNT0RFRlVOQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9BQ1RJVkFURU1PREVGVU5DKCkiPkdTVF9QQURfQUNUSVZBVEVNT0RFRlVOQzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUNIQUlORlVOQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9DSEFJTkZVTkMoKSI+R1NUX1BBRF9DSEFJTkZVTkM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1DSEFJTkxJU1RGVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0NIQUlOTElTVEZVTkMoKSI+R1NUX1BBRF9DSEFJTkxJU1RGVU5DPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRVZFTlRGVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0VWRU5URlVOQygpIj5HU1RfUEFEX0VWRU5URlVOQzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUVWRU5URlVMTEZVTkM6Q0FQUyIgdGl0bGU9IkdTVF9QQURfRVZFTlRGVUxMRlVOQygpIj5HU1RfUEFEX0VWRU5URlVMTEZVTkM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1HRVRSQU5HRUZVTkM6Q0FQUyIgdGl0bGU9IkdTVF9QQURfR0VUUkFOR0VGVU5DKCkiPkdTVF9QQURfR0VUUkFOR0VGVU5DPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtUVVFUllGVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1FVRVJZRlVOQygpIj5HU1RfUEFEX1FVRVJZRlVOQzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlURVJJTlRMSU5LRlVOQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9JVEVSSU5UTElOS0ZVTkMoKSI+R1NUX1BBRF9JVEVSSU5UTElOS0ZVTkM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1QRUVSOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BFRVIoKSI+R1NUX1BBRF9QRUVSPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOS0ZVTkM6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTElOS0ZVTkMoKSI+R1NUX1BBRF9MSU5LRlVOQzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOTElOS0ZVTkM6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVU5MSU5LRlVOQygpIj5HU1RfUEFEX1VOTElOS0ZVTkM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1MSU5LRUQ6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfTElOS0VEKCkiPkdTVF9QQURfSVNfTElOS0VEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtU1JDOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0lTX1NSQygpIj5HU1RfUEFEX0lTX1NSQzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLVNJTks6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfU0lOSygpIj5HU1RfUEFEX0lTX1NJTks8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1BQ1RJVkU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfQUNUSVZFKCkiPkdTVF9QQURfSVNfQUNUSVZFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtQkxPQ0tFRDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19CTE9DS0VEKCkiPkdTVF9QQURfSVNfQkxPQ0tFRDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLUJMT0NLSU5HOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0lTX0JMT0NLSU5HKCkiPkdTVF9QQURfSVNfQkxPQ0tJTkc8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1GTFVTSElORzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19GTFVTSElORygpIj5HU1RfUEFEX0lTX0ZMVVNISU5HPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU0VULUZMVVNISU5HOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NFVF9GTFVTSElORygpIj5HU1RfUEFEX1NFVF9GTFVTSElORzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULUZMVVNISU5HOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1VOU0VUX0ZMVVNISU5HKCkiPkdTVF9QQURfVU5TRVRfRkxVU0hJTkc8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1FT1M6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfRU9TKCkiPkdTVF9QQURfSVNfRU9TPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtTkVFRFMtUkVDT05GSUdVUkU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTkVFRFNfUkVDT05GSUdVUkUoKSI+R1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUhBUy1QRU5ESU5HLUVWRU5UUzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9IQVNfUEVORElOR19FVkVOVFMoKSI+R1NUX1BBRF9IQVNfUEVORElOR19FVkVOVFM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1GSVhFRC1DQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19GSVhFRF9DQVBTKCkiPkdTVF9QQURfSVNfRklYRURfQ0FQUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELU5FRURTLVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9ORUVEU19QQVJFTlQoKSI+R1NUX1BBRF9ORUVEU19QQVJFTlQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1QUk9YWS1DQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19QUk9YWV9DQVBTKCkiPkdTVF9QQURfSVNfUFJPWFlfQ0FQUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNFVC1QUk9YWS1DQVBTIiB0aXRsZT0iR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUygpIj5HU1RfUEFEX1NFVF9QUk9YWV9DQVBTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtVU5TRVQtUFJPWFktQ0FQUyIgdGl0bGU9IkdTVF9QQURfVU5TRVRfUFJPWFlfQ0FQUygpIj5HU1RfUEFEX1VOU0VUX1BST1hZX0NBUFM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1QUk9YWS1BTExPQ0FUSU9OOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0lTX1BST1hZX0FMTE9DQVRJT04oKSI+R1NUX1BBRF9JU19QUk9YWV9BTExPQ0FUSU9OPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU0VULVBST1hZLUFMTE9DQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04oKSI+R1NUX1BBRF9TRVRfUFJPWFlfQUxMT0NBVElPTjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULVBST1hZLUFMTE9DQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9QQURfVU5TRVRfUFJPWFlfQUxMT0NBVElPTigpIj5HU1RfUEFEX1VOU0VUX1BST1hZX0FMTE9DQVRJT048L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1TRVQtUFJPWFktU0NIRURVTElORzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9TRVRfUFJPWFlfU0NIRURVTElORygpIj5HU1RfUEFEX1NFVF9QUk9YWV9TQ0hFRFVMSU5HPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtVU5TRVQtUFJPWFktU0NIRURVTElORzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9VTlNFVF9QUk9YWV9TQ0hFRFVMSU5HKCkiPkdTVF9QQURfVU5TRVRfUFJPWFlfU0NIRURVTElORzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLVBST1hZLVNDSEVEVUxJTkc6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfUFJPWFlfU0NIRURVTElORygpIj5HU1RfUEFEX0lTX1BST1hZX1NDSEVEVUxJTkc8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1BQ0NFUFQtSU5URVJTRUNUOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0lTX0FDQ0VQVF9JTlRFUlNFQ1QoKSI+R1NUX1BBRF9JU19BQ0NFUFRfSU5URVJTRUNUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU0VULUFDQ0VQVC1JTlRFUlNFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU0VUX0FDQ0VQVF9JTlRFUlNFQ1QoKSI+R1NUX1BBRF9TRVRfQUNDRVBUX0lOVEVSU0VDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULUFDQ0VQVC1JTlRFUlNFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVU5TRVRfQUNDRVBUX0lOVEVSU0VDVCgpIj5HU1RfUEFEX1VOU0VUX0FDQ0VQVF9JTlRFUlNFQ1Q8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1BQ0NFUFQtVEVNUExBVEU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfQUNDRVBUX1RFTVBMQVRFKCkiPkdTVF9QQURfSVNfQUNDRVBUX1RFTVBMQVRFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU0VULUFDQ0VQVC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFKCkiPkdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULUFDQ0VQVC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9VTlNFVF9BQ0NFUFRfVEVNUExBVEUoKSI+R1NUX1BBRF9VTlNFVF9BQ0NFUFRfVEVNUExBVEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtLWNhcHMiIHRpdGxlPSJUaGUg4oCcY2Fwc+KAnSBwcm9wZXJ0eSI+Y2FwczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtLWRpcmVjdGlvbiIgdGl0bGU9IlRoZSDigJxkaXJlY3Rpb27igJ0gcHJvcGVydHkiPmRpcmVjdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtLW9mZnNldCIgdGl0bGU9IlRoZSDigJxvZmZzZXTigJ0gcHJvcGVydHkiPm9mZnNldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLS10ZW1wbGF0ZSIgdGl0bGU9IlRoZSDigJx0ZW1wbGF0ZeKAnSBwcm9wZXJ0eSI+dGVtcGxhdGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBhZC5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC1saW5rZWQiIHRpdGxlPSJUaGUg4oCcbGlua2Vk4oCdIHNpZ25hbCI+bGlua2VkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLXVubGlua2VkIiB0aXRsZT0iVGhlIOKAnHVubGlua2Vk4oCdIHNpZ25hbCI+dW5saW5rZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RQYWQiPkdzdFBhZDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+R3N0UGFkRGlyZWN0aW9uPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYWRGbGFncyI+R3N0UGFkRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+R3N0UGFkTGlua1JldHVybjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rQ2hlY2siIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtDaGVjayI+R3N0UGFkTGlua0NoZWNrPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPkdzdEZsb3dSZXR1cm48L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTW9kZSIgdGl0bGU9ImVudW0gR3N0UGFkTW9kZSI+R3N0UGFkTW9kZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZVJldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkUHJvYmVSZXR1cm4iPkdzdFBhZFByb2JlUmV0dXJuPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlVHlwZSIgdGl0bGU9ImVudW0gR3N0UGFkUHJvYmVUeXBlIj5Hc3RQYWRQcm9iZVR5cGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0UGFkUHJvYmVJbmZvIj5Hc3RQYWRQcm9iZUluZm88L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFBhZAotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj5Hc3RQcm94eVBhZDwvYT4KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQYWQuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaXMgbGlua2VkIHRvIG90aGVyIGVsZW1lbnRzIHZpYSAicGFkcyIsIHdoaWNoIGFyZSBleHRyZW1lbHkKLWxpZ2h0LXdlaWdodCBnZW5lcmljIGxpbmsgcG9pbnRzLjwvcD4KLTxwPlBhZHMgaGF2ZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+LCBzb3VyY2UgcGFkcyBwcm9kdWNlIGRhdGEsIHNpbmsgcGFkcyBjb25zdW1lCi1kYXRhLjwvcD4KLTxwPlBhZHMgYXJlIHR5cGljYWxseSBjcmVhdGVkIGZyb20gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUoKTwvY29kZT48L2E+IGFuZCBhcmUgdGhlbiBhZGRlZCB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LiBUaGlzIHVzdWFsbHkKLWhhcHBlbnMgd2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGJ1dCBpdCBjYW4gYWxzbyBoYXBwZW4gZHluYW1pY2FsbHkgYmFzZWQKLW9uIHRoZSBkYXRhIHRoYXQgdGhlIGVsZW1lbnQgaXMgcHJvY2Vzc2luZyBvciBiYXNlZCBvbiB0aGUgcGFkcyB0aGF0IHRoZQotYXBwbGljYXRpb24gcmVxdWVzdHMuPC9wPgotPHA+UGFkcyB3aXRob3V0IHBhZCB0ZW1wbGF0ZXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1uZXciIHRpdGxlPSJnc3RfcGFkX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9uZXcoKTwvY29kZT48L2E+LAotd2hpY2ggdGFrZXMgYSBkaXJlY3Rpb24gYW5kIGEgbmFtZSBhcyBhbiBhcmd1bWVudC4gIElmIHRoZSBuYW1lIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwKLXRoZW4gYSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIHdpbGwgYmUgYXNzaWduZWQgdG8gaXQuPC9wPgotPHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBjcmVhdGluZyBhIHBhZCB3aWxsIHR5cGljYWxseSB1c2UgdGhlIHZhcmlvdXMKLWdzdF9wYWRfc2V0XypfZnVuY3Rpb24oKSBjYWxscyB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIGV2ZW50cywgcXVlcmllcyBvcgotZGF0YWZsb3cgb24gdGhlIHBhZHMuPC9wPgotPHA+Z3N0X3BhZF9nZXRfcGFyZW50KCkgd2lsbCByZXRyaWV2ZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdGhhdCBvd25zIHRoZSBwYWQuPC9wPgotPHA+QWZ0ZXIgdHdvIHBhZHMgYXJlIHJldHJpZXZlZCBmcm9tIGFuIGVsZW1lbnQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhdGljLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCgpPC9jb2RlPjwvYT4sCi10aGUgcGFkcyBjYW4gYmUgbGlua2VkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIgdGl0bGU9ImdzdF9wYWRfbGlua8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9saW5rKCk8L2NvZGU+PC9hPi4gKEZvciBxdWljayBsaW5rcywKLXlvdSBjYW4gYWxzbyB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfbGluaygpPC9jb2RlPjwvYT4sIHdoaWNoIHdpbGwgbWFrZSB0aGUgb2J2aW91cwotbGluayBmb3IgeW91IGlmIGl0J3Mgc3RyYWlnaHRmb3J3YXJkLikuIFBhZHMgY2FuIGJlIHVubGlua2VkIGFnYWluIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXVubGluayIgdGl0bGU9ImdzdF9wYWRfdW5saW5rwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3VubGluaygpPC9jb2RlPjwvYT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wZWVyIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcGVlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfcGVlcigpPC9jb2RlPjwvYT4gY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hhdCB0aGUgcGFkIGlzCi1saW5rZWQgdG8uPC9wPgotPHA+QmVmb3JlIGRhdGFmbG93IGlzIHBvc3NpYmxlIG9uIHRoZSBwYWRzLCB0aGV5IG5lZWQgdG8gYmUgYWN0aXZhdGVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY3RpdmUiIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc2V0X2FjdGl2ZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+Z3N0X3BhZF9xdWVyeSgpIGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLXF1ZXJ5IiB0aXRsZT0iZ3N0X3BhZF9wZWVyX3F1ZXJ5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3BlZXJfcXVlcnkoKTwvY29kZT48L2E+IGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IHZhcmlvdXMKLXByb3BlcnRpZXMgb2YgdGhlIHBhZCBhbmQgdGhlIHN0cmVhbS48L3A+Ci08cD5UbyBzZW5kIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gb24gYSBwYWQsIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZW5kLWV2ZW50IiB0aXRsZT0iZ3N0X3BhZF9zZW5kX2V2ZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NlbmRfZXZlbnQoKTwvY29kZT48L2E+IGFuZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaC1ldmVudCIgdGl0bGU9ImdzdF9wYWRfcHVzaF9ldmVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoX2V2ZW50KCk8L2NvZGU+PC9hPi4gU29tZSBldmVudHMgd2lsbCBiZSBzdGlja3kgb24gdGhlIHBhZCwgbWVhbmluZyB0aGF0Ci1hZnRlciB0aGV5IHBhc3Mgb24gdGhlIHBhZCB0aGV5IGNhbiBiZSBxdWVyaWVkIGxhdGVyIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1zdGlja3ktZXZlbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9zdGlja3lfZXZlbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0aWNreS1ldmVudHMtZm9yZWFjaCIgdGl0bGU9ImdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCgpPC9jb2RlPjwvYT4uCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY3VycmVudC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1oYXMtY3VycmVudC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2hhc19jdXJyZW50X2NhcHMoKTwvY29kZT48L2E+IGFyZSBjb252ZW5pZW5jZQotZnVuY3Rpb25zIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHN0aWNreSBDQVBTIGV2ZW50IG9uIGEgcGFkLjwvcD4KLTxwPkdzdEVsZW1lbnRzIHdpbGwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giIHRpdGxlPSJnc3RfcGFkX3B1c2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVzaCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1bGwtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX3B1bGxfcmFuZ2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVsbF9yYW5nZSgpPC9jb2RlPjwvYT4gdG8gcHVzaCBvdXQKLW9yIHB1bGwgaW4gYSBidWZmZXIuPC9wPgotPHA+VGhlIGRhdGFmbG93LCBldmVudHMgYW5kIHF1ZXJpZXMgdGhhdCBoYXBwZW4gb24gYSBwYWQgY2FuIGJlIG1vbml0b3JlZCB3aXRoCi1wcm9iZXMgdGhhdCBjYW4gYmUgaW5zdGFsbGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWRkLXByb2JlIiB0aXRsZT0iZ3N0X3BhZF9hZGRfcHJvYmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfYWRkX3Byb2JlKCk8L2NvZGU+PC9hPi4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtYmxvY2tlZCIgdGl0bGU9ImdzdF9wYWRfaXNfYmxvY2tlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9pc19ibG9ja2VkKCk8L2NvZGU+PC9hPgotY2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgYSBibG9jayBwcm9iZSBpcyBpbnN0YWxsZWQgb24gdGhlIHBhZC4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWJsb2NraW5nIiB0aXRsZT0iZ3N0X3BhZF9pc19ibG9ja2luZ8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9pc19ibG9ja2luZygpPC9jb2RlPjwvYT4gY2hlY2tzIGlmIHRoZSBibG9ja2luZyBwcm9iZSBpcyBjdXJyZW50bHkgYmxvY2tpbmcgdGhlCi1wYWQuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXJlbW92ZS1wcm9iZSIgdGl0bGU9ImdzdF9wYWRfcmVtb3ZlX3Byb2JlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3JlbW92ZV9wcm9iZSgpPC9jb2RlPjwvYT4gaXMgdXNlZCB0byByZW1vdmUgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBwcm9iZQotYW5kIHVuYmxvY2sgYmxvY2tpbmcgcHJvYmVzIGlmIGFueS48L3A+Ci08cD5QYWQgaGF2ZSBhbiBvZmZzZXQgdGhhdCBjYW4gYmUgcmV0cmlldmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LW9mZnNldCIgdGl0bGU9ImdzdF9wYWRfZ2V0X29mZnNldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfb2Zmc2V0KCk8L2NvZGU+PC9hPi4gVGhpcwotb2Zmc2V0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcnVubmluZ190aW1lIG9mIGFsbCBkYXRhIHBhc3Npbmcgb3ZlciB0aGUgcGFkLgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LW9mZnNldCIgdGl0bGU9ImdzdF9wYWRfc2V0X29mZnNldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfb2Zmc2V0KCk8L2NvZGU+PC9hPiBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIG9mZnNldC48L3A+Ci08cD5Db252ZW5pZW5jZSBmdW5jdGlvbnMgZXhpc3QgdG8gc3RhcnQsIHBhdXNlIGFuZCBzdG9wIHRoZSB0YXNrIG9uIGEgcGFkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0YXJ0LXRhc2siIHRpdGxlPSJnc3RfcGFkX3N0YXJ0X3Rhc2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc3RhcnRfdGFzaygpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBhdXNlLXRhc2siIHRpdGxlPSJnc3RfcGFkX3BhdXNlX3Rhc2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcGF1c2VfdGFzaygpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0b3AtdGFzayIgdGl0bGU9ImdzdF9wYWRfc3RvcF90YXNrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3N0b3BfdGFzaygpPC9jb2RlPjwvYT4KLXJlc3BlY3RpdmVseS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBhZC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1saW5rLWdldC1uYW1lIj48L2E+PGgzPmdzdF9wYWRfbGlua19nZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9saW5rX2dldF9uYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gcmV0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBwYWQtbGluayByZXR1cm4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1saW5rLWdldC1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua1JldHVybjwvc3Bhbj48L2E+IHRvIGdldCB0aGUgbmFtZSBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWxpbmstZ2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIHN0YXRpYyBzdHJpbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcGFkLWxpbmsgcmV0dXJuLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUxJTkstRkFJTEVEOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9MSU5LX0ZBSUxFRCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfTElOS19GQUlMRUQocmV0KSAoKHJldCkgJmx0OyBHU1RfUEFEX0xJTktfT0spCi08L3ByZT4KLTxwPk1hY3JvIHRvIHRlc3QgaWYgdGhlIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua1JldHVybjwvc3Bhbj48L2E+IHZhbHVlIGluZGljYXRlcyBhIGZhaWxlZAotbGluayBzdGVwLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtTElOSy1GQUlMRUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPiB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1MSU5LLVNVQ0NFU1NGVUw6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfTElOS19TVUNDRVNTRlVMKHJldCkgKChyZXQpICZndDs9IEdTVF9QQURfTElOS19PSykKLTwvcHJlPgotPHA+TWFjcm8gdG8gdGVzdCBpZiB0aGUgZ2l2ZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gdmFsdWUgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bAotbGluayBzdGVwLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtTElOSy1TVUNDRVNTRlVMLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1mbG93LWdldC1uYW1lIj48L2E+PGgzPmdzdF9mbG93X2dldF9uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZmxvd19nZXRfbmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHJldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gZmxvdyByZXR1cm4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZsb3ctZ2V0LW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBuYW1lIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1mbG93LWdldC1uYW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBzdGF0aWMgc3RyaW5nIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZsb3cgcmV0dXJuLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZmxvdy10by1xdWFyayI+PC9hPjxoMz5nc3RfZmxvd190b19xdWFya8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPgotZ3N0X2Zsb3dfdG9fcXVhcmsgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiByZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSB1bmlxdWUgcXVhcmsgZm9yIHRoZSBnaXZlbiBHc3RGbG93UmV0dXJuLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1mbG93LXRvLXF1YXJrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHRvIGdldCB0aGUgcXVhcmsgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZsb3ctdG8tcXVhcmsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcXVhcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSBmbG93IHJldHVybiBvciAwIGlmIGFuCi1pbnZhbGlkIHJldHVybiB3YXMgc3BlY2lmaWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLW1vZGUtZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X3BhZF9tb2RlX2dldF9uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX21vZGVfZ2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTW9kZSIgdGl0bGU9ImVudW0gR3N0UGFkTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZE1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybiB0aGUgbmFtZSBvZiBhIHBhZCBtb2RlLCBmb3IgdXNlIGluIGRlYnVnIG1lc3NhZ2VzIG1vc3RseS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLW1vZGUtZ2V0LW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkIG1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLW1vZGUtZ2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBzaG9ydCBtbmVtb25pYyBmb3IgcGFkIG1vZGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXN0b3JlLXN0aWNreS1ldmVudCI+PC9hPjxoMz5nc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U3RvcmUgdGhlIHN0aWNreSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci08L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXN0b3JlLXN0aWNreS1ldmVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zdG9yZS1zdGlja3ktZXZlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4gb24gc3VjY2VzcywgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUZMVVNISU5HOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19GTFVTSElORzwvc3Bhbj48L2E+IHdoZW4gdGhlIHBhZAotd2FzIGZsdXNoaW5nIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1FT1M6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX0VPUzwvc3Bhbj48L2E+IHdoZW4gdGhlIHBhZCB3YXMgRU9TLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1uYW1lIj48L2E+PGgzPmdzdF9wYWRfZ2V0X25hbWUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfcGFkX2dldF9uYW1lKHBhZCkgZ3N0X29iamVjdF9nZXRfbmFtZSAoR1NUX09CSkVDVF9DQVNUIChwYWQpKQotPC9wcmU+Ci08cD5HZXQgYSBjb3B5IG9mIHRoZSBuYW1lIG9mIHRoZSBwYWQuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkIHRvIGdldCB0aGUgbmFtZSBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1kaXJlY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9nZXRfZGlyZWN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX2dldF9kaXJlY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFkLiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQgaXMKLWRlY2lkZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgc28gdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlCi10aGUgTE9DSy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1kaXJlY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBkaXJlY3Rpb24gb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtZGlyZWN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IG9mIHRoZSBwYWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtcGFyZW50Ij48L2E+PGgzPmdzdF9wYWRfZ2V0X3BhcmVudCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF9wYWRfZ2V0X3BhcmVudChwYWQpIGdzdF9vYmplY3RfZ2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChwYWQpKQotPC9wcmU+Ci08cD5HZXQgdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24gaW5jcmVhc2VzIHRoZSByZWZjb3VudAotb2YgdGhlIHBhcmVudCBvYmplY3Qgc28geW91IHNob3VsZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+IGl0IGFmdGVyIHVzYWdlLgotQ2FuIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIHBhZCBkaWQgbm90IGhhdmUgYSBwYXJlbnQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1wYXJlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYWQgdG8gZ2V0IHRoZSBwYXJlbnQgb2Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1wYXJlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcGFyZW50LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBhcmVudC1lbGVtZW50Ij48L2E+PGgzPmdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSwgY2FzdCB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LiBJZiBhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBoYXMgbm8gcGFyZW50IG9yCi1pdHMgcGFyZW50IGlzIG5vdCBhbiBlbGVtZW50LCByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBhcmVudC1lbGVtZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBhcmVudC1lbGVtZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHBhcmVudCBvZiB0aGUgcGFkLiBUaGUKLWNhbGxlciBoYXMgYSByZWZlcmVuY2Ugb24gdGhlIHBhcmVudCwgc28gdW5yZWYgd2hlbiB5b3UncmUgZmluaXNoZWQKLXdpdGggaXQuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1wYWQtdGVtcGxhdGUiPjwvYT48aDM+Z3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHRlbXBsYXRlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtcGFkLXRlbXBsYXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBhZC10ZW1wbGF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiBmcm9tIHdoaWNoCi10aGlzIHBhZCB3YXMgaW5zdGFudGlhdGVkLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhpcyBwYWQgaGFzIG5vCi10ZW1wbGF0ZS4gVW5yZWYgYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1saW5rIj48L2E+PGgzPmdzdF9wYWRfbGlua8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPgotZ3N0X3BhZF9saW5rICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyY3BhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzaW5rcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxpbmtzIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1saW5rLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gbGluay48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2lua3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGxpbmsuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWxpbmsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIHJlc3VsdCBjb2RlIGluZGljYXRpbmcgaWYgdGhlIGNvbm5lY3Rpb24gd29ya2VkIG9yCi13aGF0IHdlbnQgd3JvbmcuPC9wPgotPHA+TVQgU2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1saW5rLWZ1bGwiPjwvYT48aDM+Z3N0X3BhZF9saW5rX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkTGlua1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9wYWRfbGlua19mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyY3BhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNpbmtwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rQ2hlY2siIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtDaGVjayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZExpbmtDaGVjazwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxpbmtzIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQuPC9wPgotPHA+VGhpcyB2YXJpYW50IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmsiIHRpdGxlPSJnc3RfcGFkX2xpbmvCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X3BhZF9saW5rPC9zcGFuPjwvYT4gcHJvdmlkZXMgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb24gdGhlCi1jaGVja3MgYmVpbmcgZG9uZSB3aGVuIGxpbmtpbmcuIFdoaWxlIHByb3ZpZGluZyBzb21lIGNvbnNpZGVyYWJsZSBzcGVlZHVwcwotdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtdXN0IGJlIGF3YXJlIHRoYXQgd3JvbmcgdXNhZ2Ugb2YgdGhvc2UgZmxhZ3MKLWNhbiBjYXVzZSBzZXZlcmUgaXNzdWVzLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua0NoZWNrIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rQ2hlY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rQ2hlY2s8L3NwYW4+PC9hPgotZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPHA+TVQgU2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWxpbmstZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGxpbmsuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbmtwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBsaW5rLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjaGVja3MgdG8gdmFsaWRhdGUgd2hlbiBsaW5raW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWxpbmstZnVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgcmVzdWx0IGNvZGUgaW5kaWNhdGluZyBpZiB0aGUgY29ubmVjdGlvbiB3b3JrZWQgb3IKLXdoYXQgd2VudCB3cm9uZy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1saW5rLW1heWJlLWdob3N0aW5nIj48L2E+PGgzPmdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxpbmtzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotLCBjcmVhdGluZyBhbnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEdob3N0UGFkPC9zcGFuPjwvYT4ncyBpbiBiZXR3ZWVuIGFzIG5lY2Vzc2FyeS48L3A+Ci08cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2F2ZSBoYXZpbmcgdG8gY3JlYXRlIGFuZCBhZGQgaW50ZXJtZWRpYXRlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0R2hvc3RQYWQ8L3NwYW4+PC9hPidzIGFzIHJlcXVpcmVkIGZvciBsaW5raW5nIGFjcm9zcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiBib3VuZGFyaWVzLjwvcD4KLTxwPklmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4KLSBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotIHBhZHMgZG9uJ3QgaGF2ZSBwYXJlbnQgZWxlbWVudHMgb3IgZG8gbm90IHNoYXJlIGEgY29tbW9uCi1hbmNlc3RvciwgdGhlIGxpbmsgd2lsbCBmYWlsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtbGluay1tYXliZS1naG9zdGluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWxpbmstbWF5YmUtZ2hvc3RpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB3aGV0aGVyIHRoZSBsaW5rIHN1Y2NlZWRlZC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWxpbmstbWF5YmUtZ2hvc3RpbmctZnVsbCI+PC9hPjxoMz5nc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmdfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtDaGVjayIgdGl0bGU9ImVudW0gR3N0UGFkTGlua0NoZWNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0NoZWNrPC9zcGFuPjwvYT4gZmxhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TGlua3MgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+Ci0sIGNyZWF0aW5nIGFueSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0R2hvc3RQYWQ8L3NwYW4+PC9hPidzIGluIGJldHdlZW4gYXMgbmVjZXNzYXJ5LjwvcD4KLTxwPlRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzYXZlIGhhdmluZyB0byBjcmVhdGUgYW5kIGFkZCBpbnRlcm1lZGlhdGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RHaG9zdFBhZDwvc3Bhbj48L2E+J3MgYXMgcmVxdWlyZWQgZm9yIGxpbmtpbmcgYWNyb3NzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+IGJvdW5kYXJpZXMuPC9wPgotPHA+SWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIG9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+Ci0gcGFkcyBkb24ndCBoYXZlIHBhcmVudCBlbGVtZW50cyBvciBkbyBub3Qgc2hhcmUgYSBjb21tb24KLWFuY2VzdG9yLCB0aGUgbGluayB3aWxsIGZhaWwuPC9wPgotPHA+Q2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rLW1heWJlLWdob3N0aW5nLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmdfZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGwoKTwvY29kZT48L2E+IHdpdGgKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotID09IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstQ0hFQ0stREVGQVVMVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQ8L2NvZGU+PC9hPiBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IG9mIGxpbmtpbmcKLXBhZHMgd2l0aCBzYWZldHkgY2hlY2tzIGFwcGxpZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1saW5rLW1heWJlLWdob3N0aW5nLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnNvbWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtDaGVjayIgdGl0bGU9ImVudW0gR3N0UGFkTGlua0NoZWNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0NoZWNrPC9zcGFuPjwvYT4gZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtbGluay1tYXliZS1naG9zdGluZy1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gd2hldGhlciB0aGUgbGluayBzdWNjZWVkZWQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC11bmxpbmsiPjwvYT48aDM+Z3N0X3BhZF91bmxpbmvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wYWRfdW5saW5rICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyY3BhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNpbmtwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VW5saW5rcyB0aGUgc291cmNlIHBhZCBmcm9tIHRoZSBzaW5rIHBhZC4gV2lsbCBlbWl0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLXVubGlua2VkIiB0aXRsZT0iVGhlIOKAnHVubGlua2Vk4oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHVubGlua2Vk4oCdPC9zcGFuPjwvYT4KLXNpZ25hbCBvbiBib3RoIHBhZHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC11bmxpbmsucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byB1bmxpbmsuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbmtwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byB1bmxpbmsuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXVubGluay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkcyB3ZXJlIHVubGlua2VkLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYKLXRoZSBwYWRzIHdlcmUgbm90IGxpbmtlZCB0b2dldGhlci48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWlzLWxpbmtlZCI+PC9hPjxoMz5nc3RfcGFkX2lzX2xpbmtlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9pc19saW5rZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiBhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBpcyBsaW5rZWQgdG8gYW5vdGhlciBwYWQgb3Igbm90LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtaXMtbGlua2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYWQgdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWlzLWxpbmtlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGlzIGxpbmtlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtY2FuLWxpbmsiPjwvYT48aDM+Z3N0X3BhZF9jYW5fbGlua8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9jYW5fbGluayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzcmNwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNpbmtwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQgYXJlIGNvbXBhdGlibGUgc28gdGhleSBjYW4gYmUKLWxpbmtlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWNhbi1saW5rLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbmtwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtY2FuLWxpbmsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBhZHMgY2FuIGJlIGxpbmtlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtYWxsb3dlZC1jYXBzIj48L2E+PGgzPmdzdF9wYWRfZ2V0X2FsbG93ZWRfY2Fwc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGFsbG93ZWQgbWVkaWEgdHlwZXMgdGhhdCBjYW4gZmxvdyB0aHJvdWdoCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gYW5kIGl0cyBwZWVyLjwvcD4KLTxwPlRoZSBhbGxvd2VkIGNhcGFiaWxpdGllcyBpcyBjYWxjdWxhdGVkIGFzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJlc3VsdHMgb2YKLWNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktY2FwcyIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfY2Fwc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9xdWVyeV9jYXBzKCk8L2NvZGU+PC9hPiBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gYW5kIGl0cyBwZWVyLiBUaGUgY2FsbGVyIG93bnMgYSByZWZlcmVuY2UKLW9uIHRoZSByZXN1bHRpbmcgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1hbGxvd2VkLWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtYWxsb3dlZC1jYXBzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGFsbG93ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gb2YgdGhlCi1wYWQgbGluay4gVW5yZWYgdGhlIGNhcHMgd2hlbiB5b3Ugbm8gbG9uZ2VyIG5lZWQgaXQuIFRoaXMKLWZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotaGFzIG5vIHBlZXIuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1jdXJyZW50LWNhcHMiPjwvYT48aDM+Z3N0X3BhZF9nZXRfY3VycmVudF9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGNhcGFiaWxpdGllcyBjdXJyZW50bHkgY29uZmlndXJlZCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gd2l0aCB0aGUgbGFzdAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfQ0FQUzwvc3Bhbj48L2E+IGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LWN1cnJlbnQtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBjdXJyZW50IGNhcGFiaWxpdGllcyBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1jdXJyZW50LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY3VycmVudCBjYXBzIG9mIHRoZSBwYWQgd2l0aAotaW5jcmVtZW50ZWQgcmVmLWNvdW50IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuIHBhZCBoYXMgbm8gY2Fwcy4gVW5yZWYgYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtcGFkLXRlbXBsYXRlLWNhcHMiPjwvYT48aDM+Z3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBjYXBhYmlsaXRpZXMgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSdzIHRlbXBsYXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBhZC10ZW1wbGF0ZS1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGVtcGxhdGUgY2FwYWJpbGl0aWVzIGZyb20uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtcGFkLXRlbXBsYXRlLWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gb2YgdGhpcyBwYWQgdGVtcGxhdGUuCi1VbnJlZiBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtcGVlciI+PC9hPjxoMz5nc3RfcGFkX2dldF9wZWVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX2dldF9wZWVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBwZWVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbiByZWZzIHRoZSBwZWVyIHBhZCBzbwoteW91IG5lZWQgdG8gdW5yZWYgaXQgYWZ0ZXIgdXNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBlZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBwZWVyIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXBlZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcGVlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi4gVW5yZWYgYWZ0ZXIgdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC11c2UtZml4ZWQtY2FwcyI+PC9hPjxoMz5nc3RfcGFkX3VzZV9maXhlZF9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBoZWxwZXIgZnVuY3Rpb24geW91IGNhbiB1c2UgdGhhdCBzZXRzIHRoZSBGSVhFRF9DQVBTIGZsYWcKLVRoaXMgd2F5IHRoZSBkZWZhdWx0IENBUFMgcXVlcnkgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBuZWdvdGlhdGVkIGNhcHMKLW9yIGluIGNhc2UgdGhlIHBhZCBpcyBub3QgbmVnb3RpYXRlZCwgdGhlIHBhZHRlbXBsYXRlIGNhcHMuPC9wPgotPHA+VGhlIG5lZ290aWF0ZWQgY2FwcyBhcmUgdGhlIGNhcHMgb2YgdGhlIGxhc3QgQ0FQUyBldmVudCB0aGF0IHBhc3NlZCBvbiB0aGUKLXBhZC4gVXNlIHRoaXMgZnVuY3Rpb24gb24gYSBwYWQgdGhhdCwgb25jZSBpdCBuZWdvdGlhdGVkIHRvIGEgQ0FQUywgY2Fubm90Ci1iZSByZW5lZ290aWF0ZWQgdG8gc29tZXRoaW5nIGVsc2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC11c2UtZml4ZWQtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtaGFzLWN1cnJlbnQtY2FwcyI+PC9hPjxoMz5nc3RfcGFkX2hhc19jdXJyZW50X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGhhcyBjYXBzIHNldCBvbiBpdCB3aXRoIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfQ0FQUzwvc3Bhbj48L2E+IGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtaGFzLWN1cnJlbnQtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWhhcy1jdXJyZW50LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci1oYXMgY2FwcyBhc3NvY2lhdGVkIHdpdGggaXQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXN0aWNreS1ldmVudCI+PC9hPjxoMz5nc3RfcGFkX2dldF9zdGlja3lfZXZlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZTwvc3Bhbj48L2E+IGV2ZW50X3R5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpZHg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIG5ldyByZWZlcmVuY2Ugb2YgdGhlIHN0aWNreSBldmVudCBvZiB0eXBlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudF90eXBlPC9jb2RlPjwvZW0+Ci0KLWZyb20gdGhlIGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXN0aWNreS1ldmVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBldmVudCBmcm9tLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudF90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZSIgdGl0bGU9ImVudW0gR3N0RXZlbnRUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRUeXBlPC9zcGFuPjwvYT4gdGhhdCBzaG91bGQgYmUgcmV0cmlldmVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW5kZXggb2YgdGhlIGV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1zdGlja3ktZXZlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IG9mIHR5cGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudF90eXBlPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2hlbiBubyBldmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnRfdHlwZTwvY29kZT48L2VtPgotd2FzIG9uCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIFVucmVmIGFmdGVyIHVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKipldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DYWxsYmFjayB1c2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0aWNreS1ldmVudHMtZm9yZWFjaCIgdGl0bGU9ImdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+V2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCB0aGUgbmV4dCBldmVudCB3aWxsIGJlCi1yZXR1cm5lZC4gV2hlbiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpcyByZXR1cm5lZCwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RpY2t5LWV2ZW50cy1mb3JlYWNoIiB0aXRsZT0iZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoKCk8L2NvZGU+PC9hPiB3aWxsIHJldHVybi48L3A+Ci08cD5XaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIGlzIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHRoZSBpdGVtIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mIHN0aWNreSBldmVudHMuCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBjYW4gYmUgcmVwbGFjZWQgYnkgYXNzaWduaW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4KLVRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZyB0aGUgb2xkIGV2ZW50IHdoZW4KLXJlbW92aW5nIG9yIG1vZGlmeWluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHN0aWNreSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHRvIG9wdGlvbmFsIHVzZXIgZGF0YS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgaXRlcmF0aW9uIHNob3VsZCBjb250aW51ZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXN0aWNreS1ldmVudHMtZm9yZWFjaCI+PC9hPjxoMz5nc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb248L3NwYW4+PC9hPiBmb3JlYWNoX2Z1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JdGVyYXRlcyBhbGwgc3RpY2t5IGV2ZW50cyBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gYW5kIGNhbGxzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JlYWNoX2Z1bmM8L2NvZGU+PC9lbT4KLSBmb3IgZXZlcnkKLWV2ZW50LiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9yZWFjaF9mdW5jPC9jb2RlPjwvZW0+Ci0gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiB0aGUgaXRlcmF0aW9uIGlzIGltbWVkaWF0ZWx5IHN0b3BwZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zdGlja3ktZXZlbnRzLWZvcmVhY2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9yZWFjaF9mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbjwvc3Bhbj48L2E+IHRoYXQKLXNob3VsZCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IGV2ZW50LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBvcHRpb25hbCB1c2VyIGRhdGEuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWlzLWFjdGl2ZSI+PC9hPjxoMz5nc3RfcGFkX2lzX2FjdGl2ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9pc19hY3RpdmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJ5IGlmIGEgcGFkIGlzIGFjdGl2ZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtaXMtYWN0aXZlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWlzLWFjdGl2ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGlzIGFjdGl2ZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1sYXN0LWZsb3ctcmV0dXJuIj48L2E+PGgzPmdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm7CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHJldHVybiBmcm9tIHRoZSBsYXN0IGRhdGEgcGFzc2VkIGJ5IHRoaXMgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LWxhc3QtZmxvdy1yZXR1cm4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1QUk9CRS1JTkZPLVRZUEU6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1BST0JFX0lORk9fVFlQRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfUFJPQkVfSU5GT19UWVBFKGQpICAgICAgICAgKChkKS0mZ3Q7dHlwZSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVBST0JFLUlORk8tSUQ6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1BST0JFX0lORk9fSUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fSUQoZCkgICAgICAgICAgICgoZCktJmd0O2lkKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtSU5GTy1EQVRBOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fREFUQShkKSAgICAgICAgICgoZCktJmd0O2RhdGEpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1QUk9CRS1JTkZPLUJVRkZFUjpDQVBTIj48L2E+PGgzPkdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSKGQpICAgICAgIEdTVF9CVUZGRVJfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShkKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVBST0JFLUlORk8tQlVGRkVSLUxJU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSX0xJU1QoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSX0xJU1QoZCkgIEdTVF9CVUZGRVJfTElTVF9DQVNUKEdTVF9QQURfUFJPQkVfSU5GT19EQVRBKGQpKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtSU5GTy1FVkVOVDpDQVBTIj48L2E+PGgzPkdTVF9QQURfUFJPQkVfSU5GT19FVkVOVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVChkKSAgICAgICAgR1NUX0VWRU5UX0NBU1QoR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoZCkpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1QUk9CRS1JTkZPLVFVRVJZOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9QUk9CRV9JTkZPX1FVRVJZKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9QUk9CRV9JTkZPX1FVRVJZKGQpICAgICAgICBHU1RfUVVFUllfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShkKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXByb2JlLWluZm8tZ2V0LWJ1ZmZlciI+PC9hPjxoMz5nc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2J1ZmZlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVJbmZvIiB0aXRsZT0ic3RydWN0IEdzdFBhZFByb2JlSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByb2JlSW5mbzwvc3Bhbj48L2E+ICppbmZvPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHJvYmUtaW5mby1nZXQtYnVmZmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmZvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVJbmZvIiB0aXRsZT0ic3RydWN0IEdzdFBhZFByb2JlSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByb2JlSW5mbzwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wcm9iZS1pbmZvLWdldC1idWZmZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gZnJvbSB0aGUgcHJvYmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHJvYmUtaW5mby1nZXQtYnVmZmVyLWxpc3QiPjwvYT48aDM+Z3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXJfbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXJfbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0UGFkUHJvYmVJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVJbmZvPC9zcGFuPjwvYT4gKmluZm88L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wcm9iZS1pbmZvLWdldC1idWZmZXItbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RQYWRQcm9iZUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZUluZm88L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHJvYmUtaW5mby1nZXQtYnVmZmVyLWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gZnJvbSB0aGUgcHJvYmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHJvYmUtaW5mby1nZXQtZXZlbnQiPjwvYT48aDM+Z3N0X3BhZF9wcm9iZV9pbmZvX2dldF9ldmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9ldmVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0UGFkUHJvYmVJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVJbmZvPC9zcGFuPjwvYT4gKmluZm88L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wcm9iZS1pbmZvLWdldC1ldmVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RQYWRQcm9iZUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZUluZm88L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHJvYmUtaW5mby1nZXQtZXZlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gZnJvbSB0aGUgcHJvYmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHJvYmUtaW5mby1nZXQtcXVlcnkiPjwvYT48aDM+Z3N0X3BhZF9wcm9iZV9pbmZvX2dldF9xdWVyecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9xdWVyeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0UGFkUHJvYmVJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVJbmZvPC9zcGFuPjwvYT4gKmluZm88L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wcm9iZS1pbmZvLWdldC1xdWVyeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RQYWRQcm9iZUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZUluZm88L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHJvYmUtaW5mby1nZXQtcXVlcnkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gZnJvbSB0aGUgcHJvYmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtSU5GTy1PRkZTRVQ6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1BST0JFX0lORk9fT0ZGU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9QUk9CRV9JTkZPX09GRlNFVChkKSAgICAgICAoKGQpLSZndDtvZmZzZXQpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1QUk9CRS1JTkZPLVNJWkU6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1BST0JFX0lORk9fU0laRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfUFJPQkVfSU5GT19TSVpFKGQpICAgICAgICAgKChkKS0mZ3Q7c2l6ZSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVBST0JFLUlORk8tRkxPVy1SRVRVUk46Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1BST0JFX0lORk9fRkxPV19SRVRVUk4oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fRkxPV19SRVRVUk4oZCkgICgoZCktJmd0O0FCSS5hYmkuZmxvd19yZXQpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFkUHJvYmVDYWxsYmFjayI+PC9hPjxoMz5Hc3RQYWRQcm9iZUNhbGxiYWNrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRQcm9iZVJldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRQcm9iZVJldHVybjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0UGFkUHJvYmVDYWxsYmFjazxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RQYWRQcm9iZUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZUluZm88L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsbGJhY2sgdXNlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hZGQtcHJvYmUiIHRpdGxlPSJnc3RfcGFkX2FkZF9wcm9iZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9hZGRfcHJvYmUoKTwvY29kZT48L2E+LiBHZXRzIGNhbGxlZCB0byBub3RpZnkgYWJvdXQgdGhlIGN1cnJlbnQKLWJsb2NraW5nIHR5cGUuPC9wPgotPHA+VGhlIGNhbGxiYWNrIGlzIGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBkYXRhIHBvaW50ZXIgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZm88L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRQcm9iZUNhbGxiYWNrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0aGF0IGlzIGJsb2NrZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0UGFkUHJvYmVJbmZvIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVJbmZvPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGdwb2ludGVyIHRvIG9wdGlvbmFsIHVzZXIgZGF0YS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZFByb2JlQ2FsbGJhY2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZVJldHVybiIgdGl0bGU9ImVudW0gR3N0UGFkUHJvYmVSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZVJldHVybjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtYWRkLXByb2JlIj48L2E+PGgzPmdzdF9wYWRfYWRkX3Byb2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3Vsb25nPC9zcGFuPjwvYT4KLWdzdF9wYWRfYWRkX3Byb2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlVHlwZSIgdGl0bGU9ImVudW0gR3N0UGFkUHJvYmVUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVUeXBlPC9zcGFuPjwvYT4gbWFzazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlQ2FsbGJhY2siIHRpdGxlPSJHc3RQYWRQcm9iZUNhbGxiYWNrwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByb2JlQ2FsbGJhY2s8L3NwYW4+PC9hPiBjYWxsYmFjazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBkZXN0cm95X2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QmUgbm90aWZpZWQgb2YgZGlmZmVyZW50IHN0YXRlcyBvZiBwYWRzLiBUaGUgcHJvdmlkZWQgY2FsbGJhY2sgaXMgY2FsbGVkIGZvcgotZXZlcnkgc3RhdGUgdGhhdCBtYXRjaGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXNrPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+UHJvYmVzIGFyZSBjYWxsZWQgaW4gZ3JvdXBzOiBGaXJzdCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0sgcHJvYmVzIGFyZQotY2FsbGVkLCB0aGVuIG90aGVycywgdGhlbiBmaW5hbGx5IEdTVF9QQURfUFJPQkVfVFlQRV9JRExFLiBUaGUgb25seQotZXhjZXB0aW9uIGhlcmUgYXJlIEdTVF9QQURfUFJPQkVfVFlQRV9JRExFIHByb2JlcyB0aGF0IGFyZSBjYWxsZWQKLWltbWVkaWF0ZWx5IGlmIHRoZSBwYWQgaXMgYWxyZWFkeSBpZGxlIHdoaWxlIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWRkLXByb2JlIiB0aXRsZT0iZ3N0X3BhZF9hZGRfcHJvYmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfYWRkX3Byb2JlKCk8L2NvZGU+PC9hPi4KLUluIGVhY2ggb2YgdGhlIGdyb3VwcywgcHJvYmVzIGFyZSBjYWxsZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZQotYWRkZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1hZGQtcHJvYmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGFkZCB0aGUgcHJvYmUgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwcm9iZSBtYXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhbGxiYWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlQ2FsbGJhY2siIHRpdGxlPSJHc3RQYWRQcm9iZUNhbGxiYWNrwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByb2JlQ2FsbGJhY2s8L3NwYW4+PC9hPiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggbm90aWZpY2F0aW9ucyBvZgotdGhlIHBhZCBzdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0cm95X2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBmb3IgdXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWFkZC1wcm9iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGFuIGlkIG9yIDAgaWYgbm8gcHJvYmUgaXMgcGVuZGluZy4gVGhlIGlkIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUKLXByb2JlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcmVtb3ZlLXByb2JlIiB0aXRsZT0iZ3N0X3BhZF9yZW1vdmVfcHJvYmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcmVtb3ZlX3Byb2JlKCk8L2NvZGU+PC9hPi4gV2hlbiB1c2luZyBHU1RfUEFEX1BST0JFX1RZUEVfSURMRSBpdCBjYW4KLWhhcHBlbiB0aGF0IHRoZSBwcm9iZSBjYW4gYmUgcnVuIGltbWVkaWF0ZWx5IGFuZCBpZiB0aGUgcHJvYmUgcmV0dXJucwotR1NUX1BBRF9QUk9CRV9SRU1PVkUgdGhpcyBmdW5jdGlvbnMgcmV0dXJucyAwLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcmVtb3ZlLXByb2JlIj48L2E+PGgzPmdzdF9wYWRfcmVtb3ZlX3Byb2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IGlkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZSB0aGUgcHJvYmUgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWQ8L2NvZGU+PC9lbT4KLSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcmVtb3ZlLXByb2JlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB3aXRoIHRoZSBwcm9iZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwcm9iZSBpZCB0byByZW1vdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1pcy1ibG9ja2VkIj48L2E+PGgzPmdzdF9wYWRfaXNfYmxvY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9pc19ibG9ja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIHBhZCBpcyBibG9ja2VkIG9yIG5vdC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZQotbGFzdCByZXF1ZXN0ZWQgc3RhdGUgb2YgdGhlIHBhZC4gSXQgaXMgbm90IGNlcnRhaW4gdGhhdCB0aGUgcGFkCi1pcyBhY3R1YWxseSBibG9ja2luZyBhdCB0aGlzIHBvaW50IChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtYmxvY2tpbmciIHRpdGxlPSJnc3RfcGFkX2lzX2Jsb2NraW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2lzX2Jsb2NraW5nKCk8L2NvZGU+PC9hPikuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1pcy1ibG9ja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWlzLWJsb2NrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBhZCBpcyBibG9ja2VkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtaXMtYmxvY2tpbmciPjwvYT48aDM+Z3N0X3BhZF9pc19ibG9ja2luZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9pc19ibG9ja2luZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBwYWQgaXMgYmxvY2tpbmcgb3Igbm90LiBUaGlzIGlzIGEgZ3VhcmFudGVlZCBzdGF0ZQotb2Ygd2hldGhlciB0aGUgcGFkIGlzIGFjdHVhbGx5IGJsb2NraW5nIG9uIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gb3IgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWlzLWJsb2NraW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWlzLWJsb2NraW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgaXMgYmxvY2tpbmcuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtb2Zmc2V0Ij48L2E+PGgzPmdzdF9wYWRfZ2V0X29mZnNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfcGFkX2dldF9vZmZzZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIHJ1bm5pbmcgdGltZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBoYXMgdG8gYmUgYSBzb3VyY2UKLXBhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1vZmZzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1vZmZzZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgb2Zmc2V0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1vZmZzZXQiPjwvYT48aDM+Z3N0X3BhZF9zZXRfb2Zmc2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF9zZXRfb2Zmc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgb2Zmc2V0IHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBydW5uaW5nIHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LW9mZnNldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1uZXciPjwvYT48aDM+Z3N0X3BhZF9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLWdzdF9wYWRfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IGRpcmVjdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IHBhZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCi1JZiBuYW1lIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgYSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIChhY3Jvc3MgYWxsIHBhZHMpCi13aWxsIGJlIGFzc2lnbmVkLgotVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIG5hbWUgc28geW91IGNhbiBzYWZlbHkgZnJlZSB0aGUgbmFtZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kaXJlY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gb2YgdGhlIHBhZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpbgotY2FzZSBvZiBhbiBlcnJvci48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJBbGlhcyBmb3IgdHJhbnNmZXIgbm9uZSwgdXNlZCBmb3Igb2JqZWN0cyB3aXRoIGZsb2F0aW5nIHJlZnMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZmxvYXRpbmc8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgcGFkIHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGUgZ2l2ZW4gdGVtcGxhdGUuCi1JZiBuYW1lIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgYSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIChhY3Jvc3MgYWxsIHBhZHMpCi13aWxsIGJlIGFzc2lnbmVkLgotVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIG5hbWUgc28geW91IGNhbiBzYWZlbHkgZnJlZSB0aGUgbmFtZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlbXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB0ZW1wbGF0ZSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbmFtZSBvZiB0aGUgcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaW4KLWNhc2Ugb2YgYW4gZXJyb3IuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkFsaWFzIGZvciB0cmFuc2ZlciBub25lLCB1c2VkIGZvciBvYmplY3RzIHdpdGggZmxvYXRpbmcgcmVmcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLW5ldy1mcm9tLXN0YXRpYy10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IHBhZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGdpdmVuIHN0YXRpYyB0ZW1wbGF0ZS4KLUlmIG5hbWUgaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBhIGd1YXJhbnRlZWQgdW5pcXVlIG5hbWUgKGFjcm9zcyBhbGwgcGFkcykKLXdpbGwgYmUgYXNzaWduZWQuCi1UaGlzIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZiB0aGUgbmFtZSBzbyB5b3UgY2FuIHNhZmVseSBmcmVlIHRoZSBuYW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtbmV3LWZyb20tc3RhdGljLXRlbXBsYXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlbXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtbmV3LWZyb20tc3RhdGljLXRlbXBsYXRlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpbgotY2FzZSBvZiBhbiBlcnJvci4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iQWxpYXMgZm9yIHRyYW5zZmVyIG5vbmUsIHVzZWQgZm9yIG9iamVjdHMgd2l0aCBmbG9hdGluZyByZWZzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZsb2F0aW5nPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWNoYWluLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24ocCxmKSAgICAgICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uX2Z1bGwoKHApLChmKSxOVUxMLE5VTEwpCi08L3ByZT4KLTxwPkNhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb25fZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb25fZnVsbCgpPC9jb2RlPjwvYT4gd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZm9yIHRoZSB1c2VyX2RhdGEgYW5kCi1ub3RpZnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtY2hhaW4tZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5GdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQ2hhaW5GdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtY2hhaW4tZnVuY3Rpb24tZnVsbCI+PC9hPjxoMz5nc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbl9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb25fZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZENoYWluRnVuY3Rpb248L3NwYW4+PC9hPiBjaGFpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGdpdmVuIGNoYWluIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBUaGUgY2hhaW4gZnVuY3Rpb24gaXMgY2FsbGVkIHRvCi1wcm9jZXNzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gaW5wdXQgYnVmZmVyLiBzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZENoYWluRnVuY3Rpb248L3NwYW4+PC9hPiBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWNoYWluLWZ1bmN0aW9uLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jaGFpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5GdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQ2hhaW5GdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlcl9kYXRhIHBhc3NlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bm90aWZ5PC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bm90aWZ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bm90aWZ5IGNhbGxlZCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGFpbjwvY29kZT48L2VtPgotd2lsbCBub3QgYmUgdXNlZCBhbnltb3JlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRDaGFpbkZ1bmN0aW9uIj48L2E+PGgzPkdzdFBhZENoYWluRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RQYWRDaGFpbkZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHNpbmtwYWRzIHdoZW4gY2hhaW5pbmcgYnVmZmVycy4KLVRoZSBmdW5jdGlvbiB0eXBpY2FsbHkgcHJvY2Vzc2VzIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgYnVmZmVyIGFuZAotZWl0aGVyIGNvbnN1bWVzIHRoZSBkYXRhIG9yIHBhc3NlcyBpdCBvbiB0byB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkKHMpLjwvcD4KLTxwPlRoZSBpbXBsZW1lbnRlciBvZiB0aGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGEgcmVmY291bnQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGFuZCBzaG91bGQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4gd2hlbiB0aGUgYnVmZmVyIGlzIG5vIGxvbmdlciBuZWVkZWQuPC9wPgotPHA+V2hlbiBhIGNoYWluIGZ1bmN0aW9uIGRldGVjdHMgYW4gZXJyb3IgaW4gdGhlIGRhdGEgc3RyZWFtLCBpdCBtdXN0IHBvc3QgYW4KLWVycm9yIG9uIHRoZSBidXMgYW5kIHJldHVybiBhbiBhcHByb3ByaWF0ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRDaGFpbkZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRoYXQgcGVyZm9ybWVkIHRoZSBjaGFpbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiBJZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1ORUVELVBBUkVOVDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBRF9GTEFHX05FRURfUEFSRU5UPC9zcGFuPjwvYT4KLWZsYWcgaXMgc2V0LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+Ci1pcyBndWFyYW50ZWVkIHRvIGJlIG5vdC08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gYW5kIHJlbWFpbiB2YWxpZAotZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0aGF0IGlzIGNoYWluZWQsIG5vdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkQ2hhaW5GdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfT0s8L3NwYW4+PC9hPiBmb3Igc3VjY2VzczwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1jaGFpbi1saXN0LWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uKHAsZikgICAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxsKChwKSwoZiksTlVMTCxOVUxMKQotPC9wcmU+Ci08cD5DYWxscyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2hhaW4tbGlzdC1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uX2Z1bGwoKTwvY29kZT48L2E+IHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciB0aGUgdXNlcl9kYXRhIGFuZAotbm90aWZ5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWNoYWluLWxpc3QtZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc2luayA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRDaGFpbkxpc3RGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtY2hhaW4tbGlzdC1mdW5jdGlvbi1mdWxsIj48L2E+PGgzPmdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb25fZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb25fZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRDaGFpbkxpc3RGdW5jdGlvbjwvc3Bhbj48L2E+IGNoYWlubGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IG5vdGlmeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBnaXZlbiBjaGFpbiBsaXN0IGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBUaGUgY2hhaW5saXN0IGZ1bmN0aW9uIGlzCi1jYWxsZWQgdG8gcHJvY2VzcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+IGlucHV0IGJ1ZmZlciBsaXN0LiBTZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uPC9zcGFuPjwvYT4gZm9yIG1vcmUgZGV0YWlscy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1jaGFpbi1saXN0LWZ1bmN0aW9uLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jaGFpbmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluTGlzdEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb248L3NwYW4+PC9hPiB0byBzZXQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXJfZGF0YSBwYXNzZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5vdGlmeTwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5vdGlmeSBjYWxsZWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2hhaW5saXN0PC9jb2RlPjwvZW0+Ci13aWxsIG5vdCBiZSB1c2VkIGFueW1vcmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uIj48L2E+PGgzPkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gc2lua3BhZHMgd2hlbiBjaGFpbmluZyBidWZmZXIgbGlzdHMuCi1UaGUgZnVuY3Rpb24gdHlwaWNhbGx5IHByb2Nlc3NlcyB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlIGJ1ZmZlciBsaXN0IGFuZAotZWl0aGVyIGNvbnN1bWVzIHRoZSBkYXRhIG9yIHBhc3NlcyBpdCBvbiB0byB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkKHMpLjwvcD4KLTxwPlRoZSBpbXBsZW1lbnRlciBvZiB0aGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGEgcmVmY291bnQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLSBhbmQKLXNob3VsZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC11bnJlZiIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuIHRoZSBsaXN0IGlzIG5vIGxvbmdlciBuZWVkZWQuPC9wPgotPHA+V2hlbiBhIGNoYWlubGlzdCBmdW5jdGlvbiBkZXRlY3RzIGFuIGVycm9yIGluIHRoZSBkYXRhIHN0cmVhbSwgaXQgbXVzdAotcG9zdCBhbiBlcnJvciBvbiB0aGUgYnVzIGFuZCByZXR1cm4gYW4gYXBwcm9wcmlhdGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpbmsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdGhhdCBwZXJmb3JtZWQgdGhlIGNoYWluLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIElmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLU5FRUQtUEFSRU5UOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQ8L3NwYW4+PC9hPgotZmxhZyBpcyBzZXQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJlbnQ8L2NvZGU+PC9lbT4KLWlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBhbmQgcmVtYWluIHZhbGlkCi1kdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiB0aGF0IGlzIGNoYWluZWQsIG5vdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4gZm9yIHN1Y2Nlc3M8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtcmFuZ2UiPjwvYT48aDM+Z3N0X3BhZF9nZXRfcmFuZ2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9wYWRfZ2V0X3JhbmdlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKipidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaXMgZmx1c2hpbmcgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1GTFVTSElORzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfRkxVU0hJTkc8L3NwYW4+PC9hPgotaW1tZWRpYXRlbHkgYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPHA+Q2FsbHMgdGhlIGdldHJhbmdlIGZ1bmN0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSwgc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRHZXRSYW5nZUZ1bmN0aW9uPC9zcGFuPjwvYT4gZm9yIGEKLWRlc2NyaXB0aW9uIG9mIGEgZ2V0cmFuZ2UgZnVuY3Rpb24uIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBoYXMgbm8gZ2V0cmFuZ2UgZnVuY3Rpb24KLWluc3RhbGxlZCAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24oKTwvY29kZT48L2E+KSB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1OT1QtU1VQUE9SVEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19OT1RfU1VQUE9SVEVEPC9zcGFuPjwvYT4uPC9wPgotPHA+SWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIHBvaW50cyB0byBhIHZhcmlhYmxlIGhvbGRpbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBhIHZhbGlkIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB3aWxsIGJlCi1wbGFjZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfT0s8L3NwYW4+PC9hPi4gVGhlIG5ldyBidWZmZXIKLW11c3QgYmUgZnJlZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiIgdGl0bGU9ImdzdF9idWZmZXJfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfdW5yZWYoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLjwvcD4KLTxwPldoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIHBvaW50cyB0byBhIHZhcmlhYmxlIHRoYXQgcG9pbnRzIHRvIGEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4sIHRoZQotYnVmZmVyIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIHJlc3VsdCBkYXRhIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4uIElmIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSwgb25seQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyB3aWxsIGJlIGZpbGxlZCBpbiB0aGUgcmVzdWx0IGJ1ZmZlciBhbmQgaXRzIHNpemUgd2lsbCBiZSB1cGRhdGVkCi1hY2NvcmRpbmdseS48L3A+Ci08cD5Ob3RlIHRoYXQgbGVzcyB0aGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgY2FuIGJlIHJldHVybmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSB3aGVuLCBmb3IgZXhhbXBsZSwKLWFuIEVPUyBjb25kaXRpb24gaXMgbmVhciBvciB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLQotYnl0ZXMuIFRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrIHRoZSByZXN1bHQgYnVmZmVyIHNpemUgdG8gZ2V0IHRoZSByZXN1bHQgc2l6ZS48L3A+Ci08cD5XaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbnkgb3RoZXIgcmVzdWx0IHZhbHVlIHRoYW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19PSzwvc3Bhbj48L2E+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0KLXdpbGwgYmUgdW5jaGFuZ2VkLjwvcD4KLTxwPlRoaXMgaXMgYSBsb3dsZXZlbCBmdW5jdGlvbi4gVXN1YWxseSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdWxsLXJhbmdlIiB0aXRsZT0iZ3N0X3BhZF9wdWxsX3JhbmdlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1bGxfcmFuZ2UoKTwvY29kZT48L2E+IGlzIHVzZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzcmMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVSUk9SOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19FUlJPUjwvc3Bhbj48L2E+IGlmIG5vdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgYnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byBob2xkIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiwKLXJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVSUk9SOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19FUlJPUjwvc3Bhbj48L2E+IGlmIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVlLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1yYW5nZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gZnJvbSB0aGUgcGFkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWdldHJhbmdlLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24ocCxmKSAgICAgIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uX2Z1bGwoKHApLChmKSxOVUxMLE5VTEwpCi08L3ByZT4KLTxwPkNhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb25fZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb25fZnVsbCgpPC9jb2RlPjwvYT4gd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZm9yIHRoZSB1c2VyX2RhdGEgYW5kCi1ub3RpZnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtZ2V0cmFuZ2UtZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRHZXRSYW5nZUZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbi1mdWxsIj48L2E+PGgzPmdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbl9mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IGdldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGdpdmVuIGdldHJhbmdlIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBUaGUgZ2V0cmFuZ2UgZnVuY3Rpb24gaXMKLWNhbGxlZCB0byBwcm9kdWNlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIHN0YXJ0IHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lLiBzZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRHZXRSYW5nZUZ1bmN0aW9uPC9zcGFuPjwvYT4gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGdldHJhbmdlIGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWdldHJhbmdlLWZ1bmN0aW9uLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlcl9kYXRhIHBhc3NlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bm90aWZ5PC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bm90aWZ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bm90aWZ5IGNhbGxlZCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nZXQ8L2NvZGU+PC9lbT4KLXdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRHZXRSYW5nZUZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqKmJ1ZmZlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIHNvdXJjZSBwYWRzIHdoZW4gYSBwZWVyIGVsZW1lbnQKLXJlcXVlc3QgYSBidWZmZXIgYXQgdGhlIHNwZWNpZmllZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLS4gSWYgdGhpcyBmdW5jdGlvbgotcmV0dXJucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4sIHRoZSByZXN1bHQgYnVmZmVyIHdpbGwgYmUgc3RvcmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS4gVGhlCi1jb250ZW50cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gaXMgaW52YWxpZCBmb3IgYW55IG90aGVyIHJldHVybiB2YWx1ZS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIGluc3RhbGxlZCBvbiBhIHNvdXJjZSBwYWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWdldHJhbmdlLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24oKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbigpPC9jb2RlPjwvYT4gYW5kIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBzb3VyY2UgcGFkcyBhZnRlcgotdGhleSBhcmUgc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWFjdGl2YXRlLW1vZGUiIHRpdGxlPSJnc3RfcGFkX2FjdGl2YXRlX21vZGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfYWN0aXZhdGVfbW9kZSgpPC9jb2RlPjwvYT4gd2l0aCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELU1PREUtUFVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBRF9NT0RFX1BVTEw8L3NwYW4+PC9hPi48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSBhcmUgYWx3YXlzIGdpdmVuIGluIGJ5dGUgdW5pdHMuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSBtdXN0IG5vcm1hbGx5IGJlIGEgdmFsdWUKLWJldHdlZW4gMCBhbmQgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSBhdmFpbGFibGUgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiBUaGUKLWxlbmd0aCAoZHVyYXRpb24gaW4gYnl0ZXMpIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1EVVJBVElPTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1FVRVJZX0RVUkFUSU9OPC9zcGFuPjwvYT4gb3Igd2l0aCBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktU0VFS0lORzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1FVRVJZX1NFRUtJTkc8L3NwYW4+PC9hPi48L3A+Ci08cD5BbnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIGxhcmdlciBvciBlcXVhbCB0aGFuIHRoZSBsZW5ndGggd2lsbCBtYWtlIHRoZSBmdW5jdGlvbiByZXR1cm4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1FT1M6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX0VPUzwvc3Bhbj48L2E+LCB3aGljaCBjb3JyZXNwb25kcyB0byBFT1MuIEluIHRoaXMgY2FzZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gZG9lcyBub3QKLWNvbnRhaW4gYSB2YWxpZCBidWZmZXIuPC9wPgotPHA+VGhlIGJ1ZmZlciBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSB3aWxsIG9ubHkgYmUgc21hbGxlciB0aGFuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSBpcwotbmVhciB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIEluIGFsbCBvdGhlciBjYXNlcywgdGhlIHNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIG11c3QgYmUKLWV4YWN0bHkgdGhlIHJlcXVlc3RlZCBzaXplLjwvcD4KLTxwPkl0IGlzIGFsbG93ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYSAwIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZW5ndGg8L2NvZGU+PC9lbT4KLSBhbmQgdmFsaWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotLCBpbgotd2hpY2ggY2FzZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gd2lsbCBjb250YWluIGEgMC1zaXplZCBidWZmZXIgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4uPC9wPgotPHA+V2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgLTEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotLCB0aGUgc2VxdWVudGlhbGx5IG5leHQgYnVmZmVyCi1vZiBsZW5ndGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPgotIGluIHRoZSBzdHJlYW0gaXMgcmV0dXJuZWQuPC9wPgotPHA+V2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgLTEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlbmd0aDwvY29kZT48L2VtPgotLCBhIGJ1ZmZlciB3aXRoIGEgZGVmYXVsdAotb3B0aW1hbCBsZW5ndGggaXMgcmV0dXJuZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLiBUaGUgbGVuZ3RoIG1pZ2h0IGRlcGVuZCBvbiB0aGUgdmFsdWUKLW9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzcmMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcGVyZm9ybSB0aGUgZ2V0cmFuZ2Ugb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4gSWYgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZMQUctTkVFRC1QQVJFTlQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfRkxBR19ORUVEX1BBUkVOVDwvc3Bhbj48L2E+Ci1mbGFnIGlzIHNldCwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudDwvY29kZT48L2VtPgotaXMgZ3VhcmFudGVlZCB0byBiZSBub3QtPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGFuZCByZW1haW4gdmFsaWQKLWR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvZmZzZXQgb2YgdGhlIHJhbmdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxlbmd0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBsZW5ndGggb2YgdGhlIHJhbmdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbWVtb3J5IGxvY2F0aW9uIHRvIGhvbGQgdGhlIHJlc3VsdCBidWZmZXIsIGNhbm5vdCBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19PSzwvc3Bhbj48L2E+IGZvciBzdWNjZXNzIGFuZCBhIHZhbGlkIGJ1ZmZlciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uIEFueSBvdGhlcgotcmV0dXJuIHZhbHVlIGxlYXZlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci11bmRlZmluZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWV2ZW50LWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24ocCxmKSAgICAgICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uX2Z1bGwoKHApLChmKSxOVUxMLE5VTEwpCi08L3ByZT4KLTxwPkNhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1ldmVudC1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb25fZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb25fZnVsbCgpPC9jb2RlPjwvYT4gd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZm9yIHRoZSB1c2VyX2RhdGEgYW5kCi1ub3RpZnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtZXZlbnQtZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2YgZWl0aGVyIGRpcmVjdGlvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEV2ZW50RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRXZlbnRGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtZXZlbnQtZnVuY3Rpb24tZnVsbCI+PC9hPjxoMz5nc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbl9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb25fZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRFdmVudEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEV2ZW50RnVuY3Rpb248L3NwYW4+PC9hPiBldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGdpdmVuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtZXZlbnQtZnVuY3Rpb24tZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9mIGVpdGhlciBkaXJlY3Rpb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRFdmVudEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRXZlbnRGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRFdmVudEZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyX2RhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ub3RpZnk8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ub3RpZnkgY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+Ci13aWxsIG5vdCBiZSB1c2VkIGFueW1vcmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZEV2ZW50RnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkRXZlbnRGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFBhZEV2ZW50RnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZ1bmN0aW9uIHNpZ25hdHVyZSB0byBoYW5kbGUgYW4gZXZlbnQgZm9yIHRoZSBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkRXZlbnRGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gaGFuZGxlIHRoZSBldmVudC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiBJZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1ORUVELVBBUkVOVDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBRF9GTEFHX05FRURfUEFSRU5UPC9zcGFuPjwvYT4KLWZsYWcgaXMgc2V0LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+Ci1pcyBndWFyYW50ZWVkIHRvIGJlIG5vdC08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gYW5kIHJlbWFpbiB2YWxpZAotZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIGhhbmRsZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRFdmVudEZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgY291bGQgaGFuZGxlIHRoZSBldmVudC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtZXZlbnQtZnVsbC1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbihwLGYpICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb25fZnVsbCgocCksKGYpLE5VTEwsTlVMTCkKLTwvcHJlPgotPHA+Q2FsbHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWV2ZW50LWZ1bGwtZnVuY3Rpb24tZnVsbCIgdGl0bGU9ImdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb25fZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbl9mdWxsKCk8L2NvZGU+PC9hPiB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3IgdGhlIHVzZXJfZGF0YSBhbmQKLW5vdGlmeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1ldmVudC1mdWxsLWZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9mIGVpdGhlciBkaXJlY3Rpb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRXZlbnRGdWxsRnVuY3Rpb248L3NwYW4+PC9hPiB0byBzZXQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWV2ZW50LWZ1bGwtZnVuY3Rpb24tZnVsbCI+PC9hPjxoMz5nc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uX2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRXZlbnRGdWxsRnVuY3Rpb248L3NwYW4+PC9hPiBldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IG5vdGlmeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBnaXZlbiBldmVudCBoYW5kbGVyIGZvciB0aGUgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWV2ZW50LWZ1bGwtZnVuY3Rpb24tZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9mIGVpdGhlciBkaXJlY3Rpb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRFdmVudEZ1bGxGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyX2RhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ub3RpZnk8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ub3RpZnkgY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+Ci13aWxsIG5vdCBiZSB1c2VkIGFueW1vcmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uIj48L2E+PGgzPkdzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnVuY3Rpb24gc2lnbmF0dXJlIHRvIGhhbmRsZSBhbiBldmVudCBmb3IgdGhlIHBhZC48L3A+Ci08cD5UaGlzIHZhcmlhbnQgaXMgZm9yIHNwZWNpZmljIGVsZW1lbnRzIHRoYXQgd2lsbCB0YWtlIGludG8gYWNjb3VudCB0aGUKLWxhc3QgZG93bnN0cmVhbSBmbG93IHJldHVybiAoZnJvbSBhIHBhZCBwdXNoKSwgaW4gd2hpY2ggY2FzZSB0aGV5IGNhbgotcmV0dXJuIGl0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBoYW5kbGUgdGhlIGV2ZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIElmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLU5FRUQtUEFSRU5UOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQ8L3NwYW4+PC9hPgotZmxhZyBpcyBzZXQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJlbnQ8L2NvZGU+PC9lbT4KLWlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBhbmQgcmVtYWluIHZhbGlkCi1kdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdG8gaGFuZGxlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19PSzwvY29kZT48L2E+IGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZCBwcm9wZXJseSwgb3IgYW55IG90aGVyCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBkZXBlbmRlbnQgb24gZG93bnN0cmVhbSBzdGF0ZS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtbGluay1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbihwLGYpICAgICAgICAgIGdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb25fZnVsbCgocCksKGYpLE5VTEwsTlVMTCkKLTwvcHJlPgotPHA+Q2FsbHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWxpbmstZnVuY3Rpb24tZnVsbCIgdGl0bGU9ImdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb25fZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbl9mdWxsKCk8L2NvZGU+PC9hPiB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgotZm9yIHRoZSB1c2VyX2RhdGEgYW5kIG5vdGlmeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1saW5rLWZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRMaW5rRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1saW5rLWZ1bmN0aW9uLWZ1bGwiPjwvYT48aDM+Z3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbl9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbl9mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRMaW5rRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gbGluazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IG5vdGlmeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBnaXZlbiBsaW5rIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBJdCB3aWxsIGJlIGNhbGxlZCB3aGVuCi10aGUgcGFkIGlzIGxpbmtlZCB3aXRoIGFub3RoZXIgcGFkLjwvcD4KLTxwPlRoZSByZXR1cm4gdmFsdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBRF9MSU5LX09LPC9zcGFuPjwvYT4gc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBjYW4gYmUKLW1hZGUuPC9wPgotPHA+VGhlIHJldHVybiB2YWx1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLVJFRlVTRUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfTElOS19SRUZVU0VEPC9zcGFuPjwvYT4gc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgY29ubmVjdGlvbgotY2Fubm90IGJlIG1hZGUgZm9yIHNvbWUgcmVhc29uLjwvcD4KLTxwPklmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saW5rPC9jb2RlPjwvZW0+Ci0gaXMgaW5zdGFsbGVkIG9uIGEgc291cmNlIHBhZCwgaXQgc2hvdWxkIGNhbGwgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRMaW5rRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4KLW9mIHRoZSBwZWVyIHNpbmsgcGFkLCBpZiBwcmVzZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWxpbmstZnVuY3Rpb24tZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRMaW5rRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyX2RhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ub3RpZnk8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ub3RpZnkgY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpbms8L2NvZGU+PC9lbT4KLXdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFkTGlua0Z1bmN0aW9uIj48L2E+PGgzPkdzdFBhZExpbmtGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RQYWRMaW5rUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZExpbmtSZXR1cm48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFBhZExpbmtGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBlZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnVuY3Rpb24gc2lnbmF0dXJlIHRvIGhhbmRsZSBhIG5ldyBsaW5rIG9uIHRoZSBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkTGlua0Z1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0aGF0IGlzIGxpbmtlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiBJZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1ORUVELVBBUkVOVDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBRF9GTEFHX05FRURfUEFSRU5UPC9zcGFuPjwvYT4KLWZsYWcgaXMgc2V0LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyZW50PC9jb2RlPjwvZW0+Ci1pcyBndWFyYW50ZWVkIHRvIGJlIG5vdC08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gYW5kIHJlbWFpbiB2YWxpZAotZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGVlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwZWVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9mIHRoZSBsaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRMaW5rRnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcmVzdWx0IG9mIHRoZSBsaW5rIHdpdGggdGhlIHNwZWNpZmllZCBwZWVyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC11bmxpbmstZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uKHAsZikgICAgICAgIGdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbl9mdWxsKChwKSwoZiksTlVMTCxOVUxMKQotPC9wcmU+Ci08cD5DYWxscyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtdW5saW5rLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb25fZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uX2Z1bGwoKTwvY29kZT48L2E+IHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci1mb3IgdGhlIHVzZXJfZGF0YSBhbmQgbm90aWZ5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LXVubGluay1mdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRVbmxpbmtGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRVbmxpbmtGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtdW5saW5rLWZ1bmN0aW9uLWZ1bGwiPjwvYT48aDM+Z3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb25fZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRVbmxpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFVubGlua0Z1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFVubGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gdW5saW5rPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IG5vdGlmeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBnaXZlbiB1bmxpbmsgZnVuY3Rpb24gZm9yIHRoZSBwYWQuIEl0IHdpbGwgYmUgY2FsbGVkCi13aGVuIHRoZSBwYWQgaXMgdW5saW5rZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtdW5saW5rLWZ1bmN0aW9uLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dW5saW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRVbmxpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFVubGlua0Z1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFVubGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyX2RhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ub3RpZnk8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ub3RpZnkgY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVubGluazwvY29kZT48L2VtPgotd2lsbCBub3QgYmUgdXNlZCBhbnltb3JlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRVbmxpbmtGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRVbmxpbmtGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RQYWRVbmxpbmtGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnVuY3Rpb24gc2lnbmF0dXJlIHRvIGhhbmRsZSBhIHVubGlua2luZyB0aGUgcGFkIHByb20gaXRzIHBlZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkVW5saW5rRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRoYXQgaXMgbGlua2VkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIElmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLU5FRUQtUEFSRU5UOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQ8L3NwYW4+PC9hPgotZmxhZyBpcyBzZXQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJlbnQ8L2NvZGU+PC9lbT4KLWlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBhbmQgcmVtYWluIHZhbGlkCi1kdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXByb3h5LXF1ZXJ5LWNhcHMiPjwvYT48aDM+Z3N0X3BhZF9wcm94eV9xdWVyeV9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3Byb3h5X3F1ZXJ5X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWNhcHMiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X2NhcHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcXVlcnlfY2FwcygpPC9jb2RlPjwvYT4gZm9yIGFsbCBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBhbmQgcmV0dXJucwotdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcmVzdWx0cy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBhcyBhIGRlZmF1bHQgY2FwcyBxdWVyeSBmdW5jdGlvbiBmb3IgYW4gZWxlbWVudAotdGhhdCBjYW4gaGFuZGxlIGFueSBzdHJlYW0gZm9ybWF0LCBidXQgcmVxdWlyZXMgYWxsIGl0cyBwYWRzIHRvIGhhdmUKLXRoZSBzYW1lIGNhcHMuICBUd28gc3VjaCBlbGVtZW50cyBhcmUgdGVlIGFuZCBhZGRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXByb3h5LXF1ZXJ5LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBwcm94eS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIENBUFMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXByb3h5LXF1ZXJ5LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci1jb3VsZCBiZSBleGVjdXRlZDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXByb3h5LXF1ZXJ5LWFjY2VwdC1jYXBzIj48L2E+PGgzPmdzdF9wYWRfcHJveHlfcXVlcnlfYWNjZXB0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wYWRfcHJveHlfcXVlcnlfYWNjZXB0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgYWxsIGludGVybmFsbHkgbGlua2VkIHBhZHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGFjY2VwdHMgdGhlIGNhcHMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0gYW5kCi1yZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJlc3VsdHMuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgYXMgYSBkZWZhdWx0IGFjY2VwdCBjYXBzIHF1ZXJ5IGZ1bmN0aW9uIGZvciBhbiBlbGVtZW50Ci10aGF0IGNhbiBoYW5kbGUgYW55IHN0cmVhbSBmb3JtYXQsIGJ1dCByZXF1aXJlcyBjYXBzIHRoYXQgYXJlIGFjY2VwdGFibGUgZm9yCi1hbGwgb3Bwb3NpdGUgcGFkcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXByb3h5LXF1ZXJ5LWFjY2VwdC1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcHJveHkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gQUNDRVBUX0NBUFMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXByb3h5LXF1ZXJ5LWFjY2VwdC1jYXBzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotY291bGQgYmUgZXhlY3V0ZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtYWN0aXZhdGUtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbihwLGYpICAgICAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb25fZnVsbCgocCksKGYpLE5VTEwsTlVMTCkKLTwvcHJlPgotPHA+Q2FsbHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2YXRlLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxsKCk8L2NvZGU+PC9hPiB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3IgdGhlIHVzZXJfZGF0YSBhbmQKLW5vdGlmeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1hY3RpdmF0ZS1mdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQWN0aXZhdGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQWN0aXZhdGVGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtYWN0aXZhdGUtZnVuY3Rpb24tZnVsbCI+PC9hPjxoMz5nc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb25fZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEFjdGl2YXRlRnVuY3Rpb248L3NwYW4+PC9hPiBhY3RpdmF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGdpdmVuIGFjdGl2YXRlIGZ1bmN0aW9uIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIFRoZSBhY3RpdmF0ZSBmdW5jdGlvbiB3aWxsCi1kaXNwYXRjaCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY3RpdmF0ZS1tb2RlIiB0aXRsZT0iZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2FjdGl2YXRlX21vZGUoKTwvY29kZT48L2E+IHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBhY3RpdmF0aW9uLgotT25seSBtYWtlcyBzZW5zZSB0byBzZXQgb24gc2luayBwYWRzLjwvcD4KLTxwPkNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3VyIHNpbmsgcGFkIGNhbiBzdGFydCBhIHB1bGwtYmFzZWQgdGFzay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1hY3RpdmF0ZS1mdW5jdGlvbi1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFjdGl2YXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyX2RhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ub3RpZnk8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ub3RpZnkgY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFjdGl2YXRlPC9jb2RlPjwvZW0+Ci13aWxsIG5vdCBiZSB1c2VkIGFueW1vcmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZEFjdGl2YXRlRnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkQWN0aXZhdGVGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFBhZEFjdGl2YXRlRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcGFkIGlzIGFjdGl2YXRlZCBkdXJpbmcgdGhlIGVsZW1lbnQKLVJFQURZIHRvIFBBVVNFRCBzdGF0ZSBjaGFuZ2UuIEJ5IGRlZmF1bHQgdGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlCi1hY3RpdmF0ZSBmdW5jdGlvbiB0aGF0IHB1dHMgdGhlIHBhZCBpbiBwdXNoIG1vZGUgYnV0IGVsZW1lbnRzIGNhbgotb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhY3RpdmF0ZSB0aGUgcGFkIGluIHB1bGwgbW9kZSBpZiB0aGV5IHdpc2guPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkQWN0aXZhdGVGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgY291bGQgYmUgYWN0aXZhdGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1hY3RpdmF0ZW1vZGUtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uKHAsZikgIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbl9mdWxsKChwKSwoZiksTlVMTCxOVUxMKQotPC9wcmU+Ci08cD5DYWxscyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVtb2RlLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb25fZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uX2Z1bGwoKTwvY29kZT48L2E+IHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciB0aGUgdXNlcl9kYXRhIGFuZAotbm90aWZ5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWFjdGl2YXRlbW9kZS1mdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtYWN0aXZhdGVtb2RlLWZ1bmN0aW9uLWZ1bGwiPjwvYT48aDM+Z3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb25fZnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uPC9zcGFuPjwvYT4gYWN0aXZhdGVtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGdpdmVuIGFjdGl2YXRlX21vZGUgZnVuY3Rpb24gZm9yIHRoZSBwYWQuIEFuIGFjdGl2YXRlX21vZGUgZnVuY3Rpb24KLXByZXBhcmVzIHRoZSBlbGVtZW50IGZvciBkYXRhIHBhc3NpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtYWN0aXZhdGVtb2RlLWZ1bmN0aW9uLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWN0aXZhdGVtb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyX2RhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ub3RpZnk8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ub3RpZnkgY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFjdGl2YXRlbW9kZTwvY29kZT48L2VtPgotd2lsbCBub3QgYmUgdXNlZCBhbnltb3JlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiI+PC9hPjxoMz5Hc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZE1vZGUiIHRpdGxlPSJlbnVtIEdzdFBhZE1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoZSBwcm90b3R5cGUgb2YgdGhlIHB1c2ggYW5kIHB1bGwgYWN0aXZhdGUgZnVuY3Rpb25zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgYWN0aXZhdGlvbiBtb2RlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hY3RpdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hY3RpdmF0ZSBvciBkZWFjdGl2YXRlIHRoZSBwYWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGNvdWxkIGJlIGFjdGl2YXRlZCBvciBkZWFjdGl2YXRlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1uZWVkcy1yZWNvbmZpZ3VyZSI+PC9hPjxoMz5nc3RfcGFkX25lZWRzX3JlY29uZmlndXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX25lZWRzX3JlY29uZmlndXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1ORUVELVJFQ09ORklHVVJFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFEX0ZMQUdfTkVFRF9SRUNPTkZJR1VSRTwvc3Bhbj48L2E+IGZsYWcgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGFuZCByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+Ci1pZiB0aGUgZmxhZyB3YXMgc2V0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtbmVlZHMtcmVjb25maWd1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtbmVlZHMtcmVjb25maWd1cmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaXMgdGhlIEdTVF9QQURfRkxBR19ORUVEX1JFQ09ORklHVVJFIGZsYWcgaXMgc2V0IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1jaGVjay1yZWNvbmZpZ3VyZSI+PC9hPjxoMz5nc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBhbmQgY2xlYXIgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZMQUctTkVFRC1SRUNPTkZJR1VSRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBRF9GTEFHX05FRURfUkVDT05GSUdVUkU8L3NwYW4+PC9hPiBmbGFnIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBhbmQgcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPgotaWYgdGhlIGZsYWcgd2FzIHNldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWNoZWNrLXJlY29uZmlndXJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWNoZWNrLXJlY29uZmlndXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlzIHRoZSBHU1RfUEFEX0ZMQUdfTkVFRF9SRUNPTkZJR1VSRSBmbGFnIHdhcyBzZXQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLW1hcmstcmVjb25maWd1cmUiPjwvYT48aDM+Z3N0X3BhZF9tYXJrX3JlY29uZmlndXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF9tYXJrX3JlY29uZmlndXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5NYXJrIGEgcGFkIGZvciBuZWVkaW5nIHJlY29uZmlndXJhdGlvbi4gVGhlIG5leHQgY2FsbCB0bwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hlY2stcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlKCk8L2NvZGU+PC9hPiB3aWxsIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gYWZ0ZXIgdGhpcyBjYWxsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtbWFyay1yZWNvbmZpZ3VyZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIG1hcms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHVzaCI+PC9hPjxoMz5nc3RfcGFkX3B1c2jCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9wYWRfcHVzaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1c2hlcyBhIGJ1ZmZlciB0byB0aGUgcGVlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgaW5zdGFsbGVkIGJsb2NrIHByb2JlcyBiZWZvcmUgdHJpZ2dlcmluZyBhbnkKLWluc3RhbGxlZCBkYXRhIHByb2Jlcy48L3A+Ci08cD5UaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jaGFpbiIgdGl0bGU9ImdzdF9wYWRfY2hhaW7CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfY2hhaW4oKTwvY29kZT48L2E+IG9uIHRoZSBwZWVyIHBhZCBhbmQgcmV0dXJucwotdGhlIHZhbHVlIGZyb20gdGhhdCBmdW5jdGlvbi4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGhhcyBubyBwZWVyLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctTk9ULUxJTktFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfTk9UX0xJTktFRDwvc3Bhbj48L2E+IHdpbGwKLWJlIHJldHVybmVkLjwvcD4KLTxwPkluIGFsbCBjYXNlcywgc3VjY2VzcyBvciBmYWlsdXJlLCB0aGUgY2FsbGVyIGxvc2VzIGl0cyByZWZlcmVuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotCi1hZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wdXNoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1FUlJPUjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfRVJST1I8L3NwYW4+PC9hPiBpZiBub3QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gcHVzaCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SCi1pZiBub3QuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wdXNoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwZWVyIHBhZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXB1c2gtZXZlbnQiPjwvYT48aDM+Z3N0X3BhZF9wdXNoX2V2ZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3B1c2hfZXZlbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNlbmRzIHRoZSBldmVudCB0byB0aGUgcGVlciBvZiB0aGUgZ2l2ZW4gcGFkLiBUaGlzIGZ1bmN0aW9uIGlzCi1tYWlubHkgdXNlZCBieSBlbGVtZW50cyB0byBzZW5kIGV2ZW50cyB0byB0aGVpciBwZWVyCi1lbGVtZW50cy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQgc28geW91IHNob3VsZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlZiIgdGl0bGU9ImdzdF9ldmVudF9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9yZWYoKTwvY29kZT48L2E+IGl0IGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBldmVudCBhZnRlciB0aGlzIGNhbGwuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wdXNoLWV2ZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcHVzaCB0aGUgZXZlbnQgdG8uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0byBzZW5kIHRvIHRoZSBwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wdXNoLWV2ZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXB1c2gtbGlzdCI+PC9hPjxoMz5nc3RfcGFkX3B1c2hfbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X3BhZF9wdXNoX2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QdXNoZXMgYSBidWZmZXIgbGlzdCB0byB0aGUgcGVlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgaW5zdGFsbGVkIGJsb2NrIHByb2JlcyBiZWZvcmUgdHJpZ2dlcmluZyBhbnkKLWluc3RhbGxlZCBkYXRhIHByb2Jlcy48L3A+Ci08cD5UaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyB0aGUgY2hhaW4gZnVuY3Rpb24gb24gdGhlIHBlZXIgcGFkIGFuZCByZXR1cm5zCi10aGUgdmFsdWUgZnJvbSB0aGF0IGZ1bmN0aW9uLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaGFzIG5vIHBlZXIsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1OT1QtTElOS0VEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19OT1RfTElOS0VEPC9zcGFuPjwvYT4gd2lsbAotYmUgcmV0dXJuZWQuIElmIHRoZSBwZWVyIHBhZCBkb2VzIG5vdCBoYXZlIGFueSBpbnN0YWxsZWQgY2hhaW5saXN0IGZ1bmN0aW9uCi1ldmVyeSBncm91cCBidWZmZXIgb2YgdGhlIGxpc3Qgd2lsbCBiZSBtZXJnZWQgaW50byBhIG5vcm1hbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBhbmQKLWNoYWluZWQgdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoYWluIiB0aXRsZT0iZ3N0X3BhZF9jaGFpbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9jaGFpbigpPC9jb2RlPjwvYT4uPC9wPgotPHA+SW4gYWxsIGNhc2VzLCBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZSBjYWxsZXIgbG9zZXMgaXRzIHJlZmVyZW5jZSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgotCi1hZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wdXNoLWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVSUk9SOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19FUlJPUjwvc3Bhbj48L2E+IGlmIG5vdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gdG8gcHVzaCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SCi1pZiBub3QuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wdXNoLWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IGZyb20gdGhlIHBlZXIgcGFkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHVsbC1yYW5nZSI+PC9hPjxoMz5nc3RfcGFkX3B1bGxfcmFuZ2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9wYWRfcHVsbF9yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICoqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1bGxzIGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGZyb20gdGhlIHBlZXIgcGFkIG9yIGZpbGxzIHVwIGEgcHJvdmlkZWQgYnVmZmVyLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gd2lsbCBmaXJzdCB0cmlnZ2VyIHRoZSBwYWQgYmxvY2sgc2lnbmFsIGlmIGl0IHdhcwotaW5zdGFsbGVkLjwvcD4KLTxwPldoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGlzIG5vdCBsaW5rZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1MSU5LRUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX05PVF9MSU5LRUQ8L3NwYW4+PC9hPiBpcyByZXR1cm5lZCBlbHNlIHRoaXMKLWZ1bmN0aW9uIHJldHVybnMgdGhlIHJlc3VsdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX2dldF9yYW5nZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfcmFuZ2UoKTwvY29kZT48L2E+IG9uIHRoZSBwZWVyIHBhZC4KLVNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX2dldF9yYW5nZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfcmFuZ2UoKTwvY29kZT48L2E+IGZvciBhIGxpc3Qgb2YgcmV0dXJuIHZhbHVlcyBhbmQgZm9yIHRoZQotc2VtYW50aWNzIG9mIHRoZSBhcmd1bWVudHMgb2YgdGhpcyBmdW5jdGlvbi48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gcG9pbnRzIHRvIGEgdmFyaWFibGUgaG9sZGluZyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIGEgdmFsaWQgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHdpbGwgYmUKLXBsYWNlZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19PSzwvc3Bhbj48L2E+LiBUaGUgbmV3IGJ1ZmZlcgotbXVzdCBiZSBmcmVlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuIFdoZW4gdGhpcyBmdW5jdGlvbgotcmV0dXJucyBhbnkgb3RoZXIgcmVzdWx0IHZhbHVlLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gd2lsbCBzdGlsbCBwb2ludCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPHA+V2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gcG9pbnRzIHRvIGEgdmFyaWFibGUgdGhhdCBwb2ludHMgdG8gYSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiwgdGhlCi1idWZmZXIgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgcmVzdWx0IGRhdGEgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfT0s8L3NwYW4+PC9hPi4gV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW55IG90aGVyIHJlc3VsdCB2YWx1ZSwKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIHVuY2hhbmdlZC4gSWYgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotLCBvbmx5Ci08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIHdpbGwgYmUgZmlsbGVkIGluIHRoZSByZXN1bHQgYnVmZmVyIGFuZCBpdHMgc2l6ZSB3aWxsIGJlIHVwZGF0ZWQKLWFjY29yZGluZ2x5LjwvcD4KLTxwPk5vdGUgdGhhdCBsZXNzIHRoYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBjYW4gYmUgcmV0dXJuZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIHdoZW4sIGZvciBleGFtcGxlLAotYW4gRU9TIGNvbmRpdGlvbiBpcyBuZWFyIG9yIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotCi1ieXRlcy4gVGhlIGNhbGxlciBzaG91bGQgY2hlY2sgdGhlIHJlc3VsdCBidWZmZXIgc2l6ZSB0byBnZXQgdGhlIHJlc3VsdCBzaXplLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcHVsbC1yYW5nZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHNpbmsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIHJldHVybnMgR1NUX0ZMT1dfRVJST1IgaWYgbm90LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBidWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIGhvbGQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LCByZXR1cm5zCi1HU1RfRkxPV19FUlJPUiBpZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlZS1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wdWxsLXJhbmdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwZWVyIHBhZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWFjdGl2YXRlLW1vZGUiPjwvYT48aDM+Z3N0X3BhZF9hY3RpdmF0ZV9tb2RlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX2FjdGl2YXRlX21vZGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZE1vZGUiIHRpdGxlPSJlbnVtIEdzdFBhZE1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFjdGl2ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BY3RpdmF0ZXMgb3IgZGVhY3RpdmF0ZXMgdGhlIGdpdmVuIHBhZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPgotIHZpYSBkaXNwYXRjaGluZyB0byB0aGUKLXBhZCdzIGFjdGl2YXRlbW9kZWZ1bmMuIEZvciB1c2UgZnJvbSB3aXRoaW4gcGFkIGFjdGl2YXRpb24gZnVuY3Rpb25zIG9ubHkuPC9wPgotPHA+SWYgeW91IGRvbid0IGtub3cgd2hhdCB0aGlzIGlzLCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIGl0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtYWN0aXZhdGUtbW9kZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgYWN0aXZhdGlvbiBtb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFjdGl2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPndoZXRoZXIgb3Igbm90IHRoZSBwYWQgc2hvdWxkIGJlIGFjdGl2ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtYWN0aXZhdGUtbW9kZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2VuZC1ldmVudCI+PC9hPjxoMz5nc3RfcGFkX3NlbmRfZXZlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wYWRfc2VuZF9ldmVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2VuZHMgdGhlIGV2ZW50IHRvIHRoZSBwYWQuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQKLWJ5IGFwcGxpY2F0aW9ucyB0byBzZW5kIGV2ZW50cyBpbiB0aGUgcGlwZWxpbmUuPC9wPgotPHA+SWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGlzIGEgc291cmNlIHBhZCwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIGFuIHVwc3RyZWFtIGV2ZW50LiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaXMgYQotc2luayBwYWQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIHNob3VsZCBiZSBhIGRvd25zdHJlYW0gZXZlbnQuIEZvciBleGFtcGxlLCB5b3Ugd291bGQgbm90Ci1zZW5kIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUVPUzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX0VPUzwvc3Bhbj48L2E+IG9uIGEgc3JjIHBhZDsgRU9TIGV2ZW50cyBvbmx5IHByb3BhZ2F0ZSBkb3duc3RyZWFtLgotRnVydGhlcm1vcmUsIHNvbWUgZG93bnN0cmVhbSBldmVudHMgaGF2ZSB0byBiZSBzZXJpYWxpemVkIHdpdGggZGF0YSBmbG93LAotbGlrZSBFT1MsIHdoaWxlIHNvbWUgY2FuIHRyYXZlbCBvdXQtb2YtYmFuZCwgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtRkxVU0gtU1RBUlQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9GTFVTSF9TVEFSVDwvc3Bhbj48L2E+LiBJZgotdGhlIGV2ZW50IG5lZWRzIHRvIGJlIHNlcmlhbGl6ZWQgd2l0aCBkYXRhIGZsb3csIHRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIHRoZQotcGFkJ3Mgc3RyZWFtIGxvY2sgd2hpbGUgY2FsbGluZyBpdHMgZXZlbnQgZnVuY3Rpb24uPC9wPgotPHA+VG8gZmluZCBvdXQgd2hldGhlciBhbiBldmVudCB0eXBlIGlzIHVwc3RyZWFtLCBkb3duc3RyZWFtLCBvciBkb3duc3RyZWFtIGFuZAotc2VyaWFsaXplZCwgc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50VHlwZUZsYWdzPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC10eXBlLWdldC1mbGFncyIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9mbGFnc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzKCk8L2NvZGU+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1VUFNUUkVBTTpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1VQU1RSRUFNKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfSVNfVVBTVFJFQU08L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLURPV05TVFJFQU06Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9JU19ET1dOU1RSRUFNKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRVZFTlRfSVNfRE9XTlNUUkVBTTwvc3Bhbj48L2E+LCBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1TRVJJQUxJWkVEOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VWRU5UX0lTX1NFUklBTElaRUQ8L3NwYW4+PC9hPi4gTm90ZSB0aGF0IGluIHByYWN0aWNlIHRoYXQgYW4gYXBwbGljYXRpb24gb3IKLXBsdWdpbiBkb2Vzbid0IG5lZWQgdG8gYm90aGVyIGl0c2VsZiB3aXRoIHRoaXMgaW5mb3JtYXRpb247IHRoZSBjb3JlIGhhbmRsZXMKLWFsbCBuZWNlc3NhcnkgbG9ja3MgYW5kIGNoZWNrcy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQgc28geW91IHNob3VsZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlZiIgdGl0bGU9ImdzdF9ldmVudF9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9yZWYoKTwvY29kZT48L2E+IGl0IGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBldmVudCBhZnRlciB0aGlzIGNhbGwuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZW5kLWV2ZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gc2VuZCB0aGUgZXZlbnQgdG8uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0byBzZW5kIHRvIHRoZSBwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZW5kLWV2ZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1ldmVudC1kZWZhdWx0Ij48L2E+PGgzPmdzdF9wYWRfZXZlbnRfZGVmYXVsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9ldmVudF9kZWZhdWx0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW52b2tlcyB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gcGFkLjwvcD4KLTxwPlRoZSBFT1MgZXZlbnQgd2lsbCBwYXVzZSB0aGUgdGFzayBhc3NvY2lhdGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGJlZm9yZSBpdCBpcyBmb3J3YXJkZWQKLXRvIGFsbCBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzLDwvcD4KLTxwPlRoZSBldmVudCBpcyBzZW50IHRvIGFsbCBwYWRzIGludGVybmFsbHkgbGlua2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbgotdGFrZXMgb3duZXJzaGlwIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZXZlbnQtZGVmYXVsdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGNhbGwgdGhlIGRlZmF1bHQgZXZlbnQgaGFuZGxlciBvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdG8gaGFuZGxlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZXZlbnQtZGVmYXVsdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZXZlbnQgd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXF1ZXJ5Ij48L2E+PGgzPmdzdF9wYWRfcXVlcnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wYWRfcXVlcnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EaXNwYXRjaGVzIGEgcXVlcnkgdG8gYSBwYWQuIFRoZSBxdWVyeSBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBieSB0aGUKLWNhbGxlciB2aWEgb25lIG9mIHRoZSB0eXBlLXNwZWNpZmljIGFsbG9jYXRpb24gZnVuY3Rpb25zLiBUaGUgZWxlbWVudCB0aGF0Ci10aGUgcGFkIGJlbG9uZ3MgdG8gaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlIHF1ZXJ5IHdpdGggYW4gYXBwcm9wcmlhdGUKLXJlc3BvbnNlLCB3aGljaCBzaG91bGQgdGhlbiBiZSBwYXJzZWQgd2l0aCBhIHR5cGUtc3BlY2lmaWMgcXVlcnkgcGFyc2luZwotZnVuY3Rpb24uPC9wPgotPHA+QWdhaW4sIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGJvdGggdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZgotdGhlIHF1ZXJ5IHN0cnVjdHVyZS48L3A+Ci08cD5QbGVhc2UgYWxzbyBub3RlIHRoYXQgc29tZSBxdWVyaWVzIG1pZ2h0IG5lZWQgYSBydW5uaW5nIHBpcGVsaW5lIHRvIHdvcmsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgZGVmYXVsdCBxdWVyeSBvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIHBlcmZvcm0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnkiPjwvYT48aDM+Z3N0X3BhZF9wZWVyX3F1ZXJ5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3BlZXJfcXVlcnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBlcmZvcm1zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5IiB0aXRsZT0iZ3N0X3BhZF9xdWVyecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9xdWVyeSgpPC9jb2RlPjwvYT4gb24gdGhlIHBlZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLjwvcD4KLTxwPlRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGJvdGggdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZgotdGhlIHF1ZXJ5IHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBpbnZva2UgdGhlIHBlZXIgcXVlcnkgb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB0byBwZXJmb3JtLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcGVlci1xdWVyeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4KLWlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLWhhcyBubyBwZWVyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXF1ZXJ5LWRlZmF1bHQiPjwvYT48aDM+Z3N0X3BhZF9xdWVyeV9kZWZhdWx0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JbnZva2VzIHRoZSBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiBwYWQuCi1UaGUgcXVlcnkgaXMgc2VudCB0byBhbGwgcGFkcyBpbnRlcm5hbGx5IGxpbmtlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIE5vdGUgdGhhdAotaWYgdGhlcmUgYXJlIG1hbnkgcG9zc2libGUgc2luayBwYWRzIHRoYXQgYXJlIGludGVybmFsbHkgbGlua2VkIHRvCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0sIG9ubHkgb25lIHdpbGwgYmUgc2VudCB0aGUgcXVlcnkuCi1NdWx0aS1zaW5rcGFkIGVsZW1lbnRzIHNob3VsZCBpbXBsZW1lbnQgY3VzdG9tIHF1ZXJ5IGhhbmRsZXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcXVlcnktZGVmYXVsdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGNhbGwgdGhlIGRlZmF1bHQgcXVlcnkgaGFuZGxlciBvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBwYXJlbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gdG8gaGFuZGxlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcXVlcnktZGVmYXVsdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgd2FzIHBlcmZvcm1lZCBzdWNjZXNzZnVsbHkuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcXVlcnktcG9zaXRpb24iPjwvYT48aDM+Z3N0X3BhZF9xdWVyeV9wb3NpdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpjdXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UXVlcmllcyBhIHBhZCBmb3IgdGhlIHN0cmVhbSBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXF1ZXJ5LXBvc2l0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gaW52b2tlIHRoZSBwb3NpdGlvbiBxdWVyeSBvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiByZXF1ZXN0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y3VyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgbG9jYXRpb24gaW4gd2hpY2ggdG8gc3RvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcXVlcnktcG9zaXRpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS1kdXJhdGlvbiI+PC9hPjxoMz5nc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJpZXMgYSBwYWQgZm9yIHRoZSB0b3RhbCBzdHJlYW0gZHVyYXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS1kdXJhdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgZHVyYXRpb24gcXVlcnkgb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gcmVxdWVzdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmR1cmF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbG9jYXRpb24gaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHRvdGFsCi1kdXJhdGlvbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS1kdXJhdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXF1ZXJ5LWNvbnZlcnQiPjwvYT48aDM+Z3N0X3BhZF9xdWVyeV9jb252ZXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHNyY19mb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHNyY192YWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpkZXN0X3ZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5RdWVyaWVzIGEgcGFkIHRvIGNvbnZlcnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY192YWw8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX2Zvcm1hdDwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0X2Zvcm1hdDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcXVlcnktY29udmVydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGludm9rZSB0aGUgY29udmVydCBxdWVyeSBvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjX2Zvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgZnJvbS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjX3ZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgdmFsdWUgdG8gY29udmVydC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF9mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgdG8uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3RfdmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcXVlcnktY29udmVydC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXF1ZXJ5LWFjY2VwdC1jYXBzIj48L2E+PGgzPmdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBnaXZlbiBwYWQgYWNjZXB0cyB0aGUgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXF1ZXJ5LWFjY2VwdC1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gY2hlY2sgb24gdGhlIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS1hY2NlcHQtY2Fwcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGNhbiBhY2NlcHQgdGhlIGNhcHMuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcXVlcnktY2FwcyI+PC9hPjxoMz5nc3RfcGFkX3F1ZXJ5X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9wYWRfcXVlcnlfY2FwcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqZmlsdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGNhcGFiaWxpdGllcyB0aGlzIHBhZCBjYW4gcHJvZHVjZSBvciBjb25zdW1lLgotTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXNuJ3QgbmVjZXNzYXJpbHkgcmV0dXJuIHRoZSBjYXBzIHNldCBieSBzZW5kaW5nIGEKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctY2FwcyIgdGl0bGU9ImdzdF9ldmVudF9uZXdfY2Fwc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X25ld19jYXBzKCk8L2NvZGU+PC9hPiAtIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY3VycmVudC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoKTwvY29kZT48L2E+IGZvciB0aGF0IGluc3RlYWQuCi1nc3RfcGFkX3F1ZXJ5X2NhcHMgcmV0dXJucyBhbGwgcG9zc2libGUgY2FwcyBhIHBhZCBjYW4gb3BlcmF0ZSB3aXRoLCB1c2luZwotdGhlIHBhZCdzIENBUFMgcXVlcnkgZnVuY3Rpb24sIElmIHRoZSBxdWVyeSBmYWlscywgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPgotLCBpZiBub3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBvdGhlcndpc2UgQU5ZLjwvcD4KLTxwPldoZW4gY2FsbGVkIG9uIHNpbmtwYWRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4KLSBjb250YWlucyB0aGUgY2FwcyB0aGF0Ci11cHN0cmVhbSBjb3VsZCBwcm9kdWNlIGluIHRoZSBvcmRlciBwcmVmZXJyZWQgYnkgdXBzdHJlYW0uIFdoZW4KLWNhbGxlZCBvbiBzcmNwYWRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4KLSBjb250YWlucyB0aGUgY2FwcyBhY2NlcHRlZCBieQotZG93bnN0cmVhbSBpbiB0aGUgcHJlZmVycmVkIG9yZGVyLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+Ci0gbWlnaHQgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGJ1dAotaWYgaXQgaXMgbm90IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0aGUgcmV0dXJuZWQgY2FwcyB3aWxsIGJlIGEgc3Vic2V0IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5Ob3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gd3JpdGFibGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4sIHVzZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+IGJlZm9yZSBtb2RpZnlpbmcgdGhlIGNhcHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1xdWVyeS1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgY2FwYWJpbGl0aWVzIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWx0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gc3VnZ2VzdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXF1ZXJ5LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY2FwcyBvZiB0aGUgcGFkIHdpdGggaW5jcmVtZW50ZWQgcmVmLWNvdW50LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnktcG9zaXRpb24iPjwvYT48aDM+Z3N0X3BhZF9wZWVyX3F1ZXJ5X3Bvc2l0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3BlZXJfcXVlcnlfcG9zaXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmN1cjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5RdWVyaWVzIHRoZSBwZWVyIG9mIGEgZ2l2ZW4gc2luayBwYWQgZm9yIHRoZSBzdHJlYW0gcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wZWVyLXF1ZXJ5LXBvc2l0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb24gd2hvc2UgcGVlciB0byBpbnZva2UgdGhlIHBvc2l0aW9uIHF1ZXJ5IG9uLgotTXVzdCBiZSBhIHNpbmsgcGFkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHJlcXVlc3RlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jdXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgY3VycmVudAotcG9zaXRpb24sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcGVlci1xdWVyeS1wb3NpdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnktZHVyYXRpb24iPjwvYT48aDM+Z3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJpZXMgdGhlIHBlZXIgcGFkIG9mIGEgZ2l2ZW4gc2luayBwYWQgZm9yIHRoZSB0b3RhbCBzdHJlYW0gZHVyYXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wZWVyLXF1ZXJ5LWR1cmF0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb24gd2hvc2UgcGVlciBwYWQgdG8gaW52b2tlIHRoZSBkdXJhdGlvbiBxdWVyeSBvbi4KLU11c3QgYmUgYSBzaW5rIHBhZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiByZXF1ZXN0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZHVyYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgdG90YWwKLWR1cmF0aW9uLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnktZHVyYXRpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1wZWVyLXF1ZXJ5LWNvbnZlcnQiPjwvYT48aDM+Z3N0X3BhZF9wZWVyX3F1ZXJ5X2NvbnZlcnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wYWRfcGVlcl9xdWVyeV9jb252ZXJ0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHNyY19mb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3JjX3ZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGRlc3RfZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpkZXN0X3ZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5RdWVyaWVzIHRoZSBwZWVyIHBhZCBvZiBhIGdpdmVuIHNpbmsgcGFkIHRvIGNvbnZlcnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyY192YWw8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX2Zvcm1hdDwvY29kZT48L2VtPgotCi10byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnktY29udmVydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCBvbiB3aG9zZSBwZWVyIHBhZCB0byBpbnZva2UgdGhlIGNvbnZlcnQgcXVlcnkgb24uCi1NdXN0IGJlIGEgc2luayBwYWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY19mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiB0byBjb252ZXJ0IGZyb20uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY192YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHZhbHVlIHRvIGNvbnZlcnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3RfZm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiB0byBjb252ZXJ0IHRvLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0X3ZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnktY29udmVydC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnktYWNjZXB0LWNhcHMiPjwvYT48aDM+Z3N0X3BhZF9wZWVyX3F1ZXJ5X2FjY2VwdF9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3BlZXJfcXVlcnlfYWNjZXB0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlIHBlZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGFjY2VwdHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLS4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGhhcyBubyBwZWVyLCB0aGlzIGZ1bmN0aW9uCi1yZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXBlZXItcXVlcnktYWNjZXB0LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gY2hlY2sgdGhlIHBlZXIgb2Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gY2hlY2sgb24gdGhlIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wZWVyLXF1ZXJ5LWFjY2VwdC1jYXBzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwZWVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLWNhbiBhY2NlcHQgdGhlIGNhcHMgb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotaGFzIG5vIHBlZXIuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtcGVlci1xdWVyeS1jYXBzIj48L2E+PGgzPmdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpmaWx0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwZWVyIGNvbm5lY3RlZCB0byB0aGlzIHBhZC4gU2ltaWxhciB0bwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktY2FwcyIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfY2Fwc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9xdWVyeV9jYXBzKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5XaGVuIGNhbGxlZCBvbiBzcmNwYWRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4KLSBjb250YWlucyB0aGUgY2FwcyB0aGF0Ci11cHN0cmVhbSBjb3VsZCBwcm9kdWNlIGluIHRoZSBvcmRlciBwcmVmZXJyZWQgYnkgdXBzdHJlYW0uIFdoZW4KLWNhbGxlZCBvbiBzaW5rcGFkcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+Ci0gY29udGFpbnMgdGhlIGNhcHMgYWNjZXB0ZWQgYnkKLWRvd25zdHJlYW0gaW4gdGhlIHByZWZlcnJlZCBvcmRlci4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPgotIG1pZ2h0IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBidXQKLWlmIGl0IGlzIG5vdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGhlIHJldHVybmVkIGNhcHMgd2lsbCBiZSBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wZWVyLXF1ZXJ5LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBjYXBhYmlsaXRpZXMgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpbHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGZpbHRlciwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1wZWVyLXF1ZXJ5LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY2FwcyBvZiB0aGUgcGVlciBwYWQgd2l0aCBpbmNyZW1lbnRlZAotcmVmLWNvdW50LiBXaGVuIHRoZXJlIGlzIG5vIHBlZXIgcGFkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPgotb3IsCi13aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4KLWlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgQU5ZIGNhcHMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LXF1ZXJ5LWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24ocCxmKSAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uX2Z1bGwoKHApLChmKSxOVUxMLE5VTEwpCi08L3ByZT4KLTxwPkNhbGxzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1xdWVyeS1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb25fZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb25fZnVsbCgpPC9jb2RlPjwvYT4gd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZm9yIHRoZSB1c2VyX2RhdGEgYW5kCi1ub3RpZnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtcXVlcnktZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2YgZWl0aGVyIGRpcmVjdGlvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFF1ZXJ5RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUXVlcnlGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtcXVlcnktZnVuY3Rpb24tZnVsbCI+PC9hPjxoMz5nc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbl9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb25fZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZFF1ZXJ5RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRRdWVyeUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFF1ZXJ5RnVuY3Rpb248L3NwYW4+PC9hPiBxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgZ2l2ZW4gcXVlcnkgZnVuY3Rpb24gZm9yIHRoZSBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtcXVlcnktZnVuY3Rpb24tZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9mIGVpdGhlciBkaXJlY3Rpb24uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRRdWVyeUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkUXVlcnlGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRRdWVyeUZ1bmN0aW9uPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyX2RhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ub3RpZnk8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ub3RpZnkgY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci13aWxsIG5vdCBiZSB1c2VkIGFueW1vcmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZFF1ZXJ5RnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkUXVlcnlGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFBhZFF1ZXJ5RnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoZSBzaWduYXR1cmUgb2YgdGhlIHF1ZXJ5IGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZFF1ZXJ5RnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHF1ZXJ5LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIElmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLU5FRUQtUEFSRU5UOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQ8L3NwYW4+PC9hPgotZmxhZyBpcyBzZXQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJlbnQ8L2NvZGU+PC9lbT4KLWlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBhbmQgcmVtYWluIHZhbGlkCi1kdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvYmplY3QgdG8gZXhlY3V0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkUXVlcnlGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uKHAsZikgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbl9mdWxsKChwKSwoZiksTlVMTCxOVUxMKQotPC9wcmU+Ci08cD5DYWxscyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbl9mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uX2Z1bGwoKTwvY29kZT48L2E+IHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci1mb3IgdGhlIHVzZXJfZGF0YSBhbmQgbm90aWZ5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2YgZWl0aGVyIGRpcmVjdGlvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkSXRlckludExpbmtGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1mdW5jdGlvbi1mdWxsIj48L2E+PGgzPmdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb25fZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb25fZnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkSXRlckludExpbmtGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gaXRlcmludGxpbms8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgZ2l2ZW4gaW50ZXJuYWwgbGluayBpdGVyYXRvciBmdW5jdGlvbiBmb3IgdGhlIHBhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWZ1bmN0aW9uLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvZiBlaXRoZXIgZGlyZWN0aW9uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdGVyaW50bGluazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkSXRlckludExpbmtGdW5jdGlvbjwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlcl9kYXRhIHBhc3NlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bm90aWZ5PC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bm90aWZ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bm90aWZ5IGNhbGxlZCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVyaW50bGluazwvY29kZT48L2VtPgotd2lsbCBub3QgYmUgdXNlZCBhbnltb3JlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIj48L2E+PGgzPkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPsKgKgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhlIHNpZ25hdHVyZSBvZiB0aGUgaW50ZXJuYWwgcGFkIGxpbmsgaXRlcmF0b3IgZnVuY3Rpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkSXRlckludExpbmtGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gcXVlcnkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4gSWYgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZMQUctTkVFRC1QQVJFTlQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfRkxBR19ORUVEX1BBUkVOVDwvc3Bhbj48L2E+Ci1mbGFnIGlzIHNldCwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmVudDwvY29kZT48L2VtPgotaXMgZ3VhcmFudGVlZCB0byBiZSBub3QtPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGFuZCByZW1haW4gdmFsaWQKLWR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0aGF0IHdpbGwgaXRlcmF0ZSBvdmVyIGFsbCBwYWRzIHRoYXQgYXJlCi1saW5rZWQgdG8gdGhlIGdpdmVuIHBhZCBvbiB0aGUgaW5zaWRlIG9mIHRoZSBwYXJlbnQgZWxlbWVudC48L3A+Ci08cD50aGUgY2FsbGVyIG11c3QgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZyZWUiIHRpdGxlPSJnc3RfaXRlcmF0b3JfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MiPjwvYT48aDM+Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLWdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyBhbiBpdGVyYXRvciBmb3IgdGhlIHBhZHMgdG8gd2hpY2ggdGhlIGdpdmVuIHBhZCBpcyBsaW5rZWQgdG8gaW5zaWRlCi1vZiB0aGUgcGFyZW50IGVsZW1lbnQuPC9wPgotPHA+RWFjaCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBlbGVtZW50IHlpZWxkZWQgYnkgdGhlIGl0ZXJhdG9yIHdpbGwgaGF2ZSBpdHMgcmVmY291bnQgaW5jcmVhc2VkLAotc28gdW5yZWYgYWZ0ZXIgdXNlLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9pdGVyYXRvcl9mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgR3N0UGFkIHRvIGdldCB0aGUgaW50ZXJuYWwgbGlua3Mgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhlIHBhZCBkb2VzIG5vdCBoYXZlIGFuIGl0ZXJhdG9yIGZ1bmN0aW9uCi1jb25maWd1cmVkLiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mcmVlIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pdGVyYXRvcl9mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZGVmYXVsdCI+PC9hPjxoMz5nc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SXRlcmF0ZSB0aGUgbGlzdCBvZiBwYWRzIHRvIHdoaWNoIHRoZSBnaXZlbiBwYWQgaXMgbGlua2VkIHRvIGluc2lkZSBvZgotdGhlIHBhcmVudCBlbGVtZW50LgotVGhpcyBpcyB0aGUgZGVmYXVsdCBoYW5kbGVyLCBhbmQgdGh1cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIGFsbCBvZiB0aGUKLXBhZHMgaW5zaWRlIHRoZSBwYXJlbnQgZWxlbWVudCB3aXRoIG9wcG9zaXRlIGRpcmVjdGlvbi48L3A+Ci08cD5UaGUgY2FsbGVyIG11c3QgZnJlZSB0aGlzIGl0ZXJhdG9yIGFmdGVyIHVzZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZnJlZSIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfZnJlZSgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWRlZmF1bHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgaW50ZXJuYWwgbGlua3Mgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgcGFyZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotaGFzIG5vIHBhcmVudC4gVW5yZWYgZWFjaCByZXR1cm5lZCBwYWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtc2V0LWVsZW1lbnQtcHJpdmF0ZSI+PC9hPjxoMz5nc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gcHJpdjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIGdpdmVuIHByaXZhdGUgZGF0YSBncG9pbnRlciBvbiB0aGUgcGFkLgotVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIGJ5IHRoZSBlbGVtZW50IHRoYXQgb3ducyB0aGUgcGFkLgotTm8gbG9ja2luZyBpcyBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1lbGVtZW50LXByaXZhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIHNldCB0aGUgcHJpdmF0ZSBkYXRhIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcml2PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHByaXZhdGUgZGF0YSB0byBhdHRhY2ggdG8gdGhlIHBhZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtZWxlbWVudC1wcml2YXRlIj48L2E+PGgzPmdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBwcml2YXRlIGRhdGEgb2YgYSBwYWQuCi1ObyBsb2NraW5nIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LWVsZW1lbnQtcHJpdmF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgcHJpdmF0ZSBkYXRhIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LWVsZW1lbnQtcHJpdmF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdG8gdGhlIHByaXZhdGUgZGF0YS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1jcmVhdGUtc3RyZWFtLWlkIj48L2E+PGgzPmdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3RyZWFtX2lkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBzdHJlYW0taWQgZm9yIHRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGJ5IGNvbWJpbmluZyB0aGUKLXVwc3RyZWFtIGluZm9ybWF0aW9uIHdpdGggdGhlIG9wdGlvbmFsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1faWQ8L2NvZGU+PC9lbT4KLSBvZiB0aGUgc3RyZWFtCi1vZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBtdXN0IGhhdmUgYSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gYW5kIHdoaWNoIG11c3QgaGF2ZSB6ZXJvCi1vciBvbmUgc2lua3BhZC4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV9pZDwvY29kZT48L2VtPgotIGNhbiBvbmx5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgcGFyZW50IGVsZW1lbnQKLW9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBoYXMgb25seSBhIHNpbmdsZSBzb3VyY2UgcGFkLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIHVuaXF1ZSBzdHJlYW0taWQgYnkgZ2V0dGluZyB0aGUgdXBzdHJlYW0KLXN0cmVhbS1zdGFydCBldmVudCBzdHJlYW0gSUQgYW5kIGFwcGVuZGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX2lkPC9jb2RlPjwvZW0+Ci0gdG8gaXQuIElmIHRoZQotZWxlbWVudCBoYXMgbm8gc2lua3BhZCBpdCB3aWxsIGdlbmVyYXRlIGFuIHVwc3RyZWFtIHN0cmVhbS1pZCBieQotZG9pbmcgYW4gVVJJIHF1ZXJ5IG9uIHRoZSBlbGVtZW50IGFuZCBpbiB0aGUgd29yc3QgY2FzZSBqdXN0IHVzZXMKLWEgcmFuZG9tIG51bWJlci4gU291cmNlIGVsZW1lbnRzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHRoZSBVUkkKLWhhbmRsZXIgaW50ZXJmYWNlIHNob3VsZCBpZGVhbGx5IGdlbmVyYXRlIGEgdW5pcXVlLCBkZXRlcm1pbmlzdGljCi1zdHJlYW0taWQgbWFudWFsbHkgaW5zdGVhZC48L3A+Ci08cD5TaW5jZSBzdHJlYW0gSURzIGFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHksIGFueSBudW1iZXJzIGluIHRoZQotc3RyZWFtIElEIHNob3VsZCBiZSBwcmludGVkIHdpdGggYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycywKLXByZWNlZGVkIGJ5IDAncywgc3VjaCBhcyBieSB1c2luZyB0aGUgZm9ybWF0ICUwM3UgaW5zdGVhZCBvZiAldS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWNyZWF0ZS1zdHJlYW0taWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+UGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW1faWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIHN0cmVhbS1pZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtY3JlYXRlLXN0cmVhbS1pZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgc3RyZWFtLWlkIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtY3JlYXRlLXN0cmVhbS1pZC1wcmludGYiPjwvYT48aDM+Z3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKnBhcmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3RyZWFtX2lkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgc3RyZWFtLWlkIGZvciB0aGUgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBieSBjb21iaW5pbmcgdGhlCi11cHN0cmVhbSBpbmZvcm1hdGlvbiB3aXRoIHRoZSBvcHRpb25hbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX2lkPC9jb2RlPjwvZW0+Ci0gb2YgdGhlIHN0cmVhbQotb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gbXVzdCBoYXZlIGEgcGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGFuZCB3aGljaCBtdXN0IGhhdmUgemVybwotb3Igb25lIHNpbmtwYWQuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1faWQ8L2NvZGU+PC9lbT4KLSBjYW4gb25seSBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIHBhcmVudCBlbGVtZW50Ci1vZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaGFzIG9ubHkgYSBzaW5nbGUgc291cmNlIHBhZC48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiB1bmlxdWUgc3RyZWFtLWlkIGJ5IGdldHRpbmcgdGhlIHVwc3RyZWFtCi1zdHJlYW0tc3RhcnQgZXZlbnQgc3RyZWFtIElEIGFuZCBhcHBlbmRpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV9pZDwvY29kZT48L2VtPgotIHRvIGl0LiBJZiB0aGUKLWVsZW1lbnQgaGFzIG5vIHNpbmtwYWQgaXQgd2lsbCBnZW5lcmF0ZSBhbiB1cHN0cmVhbSBzdHJlYW0taWQgYnkKLWRvaW5nIGFuIFVSSSBxdWVyeSBvbiB0aGUgZWxlbWVudCBhbmQgaW4gdGhlIHdvcnN0IGNhc2UganVzdCB1c2VzCi1hIHJhbmRvbSBudW1iZXIuIFNvdXJjZSBlbGVtZW50cyB0aGF0IGRvbid0IGltcGxlbWVudCB0aGUgVVJJCi1oYW5kbGVyIGludGVyZmFjZSBzaG91bGQgaWRlYWxseSBnZW5lcmF0ZSBhIHVuaXF1ZSwgZGV0ZXJtaW5pc3RpYwotc3RyZWFtLWlkIG1hbnVhbGx5IGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1jcmVhdGUtc3RyZWFtLWlkLXByaW50Zi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5QYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbV9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgc3RyZWFtLWlkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYXJhbWV0ZXJzIGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV9pZDwvY29kZT48L2VtPgotZm9ybWF0IHN0cmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1jcmVhdGUtc3RyZWFtLWlkLXByaW50Zi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgc3RyZWFtLWlkIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtY3JlYXRlLXN0cmVhbS1pZC1wcmludGYtdmFsaXN0Ij48L2E+PGgzPmdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGZfdmFsaXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmX3ZhbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpwYXJlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3RyZWFtX2lkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBzdHJlYW0taWQgZm9yIHRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGJ5IGNvbWJpbmluZyB0aGUKLXVwc3RyZWFtIGluZm9ybWF0aW9uIHdpdGggdGhlIG9wdGlvbmFsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1faWQ8L2NvZGU+PC9lbT4KLSBvZiB0aGUgc3RyZWFtCi1vZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBtdXN0IGhhdmUgYSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gYW5kIHdoaWNoIG11c3QgaGF2ZSB6ZXJvCi1vciBvbmUgc2lua3BhZC4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV9pZDwvY29kZT48L2VtPgotIGNhbiBvbmx5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgcGFyZW50IGVsZW1lbnQKLW9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBoYXMgb25seSBhIHNpbmdsZSBzb3VyY2UgcGFkLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIHVuaXF1ZSBzdHJlYW0taWQgYnkgZ2V0dGluZyB0aGUgdXBzdHJlYW0KLXN0cmVhbS1zdGFydCBldmVudCBzdHJlYW0gSUQgYW5kIGFwcGVuZGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX2lkPC9jb2RlPjwvZW0+Ci0gdG8gaXQuIElmIHRoZQotZWxlbWVudCBoYXMgbm8gc2lua3BhZCBpdCB3aWxsIGdlbmVyYXRlIGFuIHVwc3RyZWFtIHN0cmVhbS1pZCBieQotZG9pbmcgYW4gVVJJIHF1ZXJ5IG9uIHRoZSBlbGVtZW50IGFuZCBpbiB0aGUgd29yc3QgY2FzZSBqdXN0IHVzZXMKLWEgcmFuZG9tIG51bWJlci4gU291cmNlIGVsZW1lbnRzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHRoZSBVUkkKLWhhbmRsZXIgaW50ZXJmYWNlIHNob3VsZCBpZGVhbGx5IGdlbmVyYXRlIGEgdW5pcXVlLCBkZXRlcm1pbmlzdGljCi1zdHJlYW0taWQgbWFudWFsbHkgaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWNyZWF0ZS1zdHJlYW0taWQtcHJpbnRmLXZhbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHNvdXJjZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5QYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbV9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgc3RyZWFtLWlkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YXJfYXJnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBhcmFtZXRlcnMgZm9yIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX2lkPC9jb2RlPjwvZW0+Ci1mb3JtYXQgc3RyaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWNyZWF0ZS1zdHJlYW0taWQtcHJpbnRmLXZhbGlzdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgc3RyZWFtLWlkIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXN0cmVhbS1pZCI+PC9hPjxoMz5nc3RfcGFkX2dldF9zdHJlYW1faWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9wYWRfZ2V0X3N0cmVhbV9pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgY3VycmVudCBzdHJlYW0taWQgZm9yIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBub25lIGhhcyBiZWVuCi1zZXQgeWV0LCBpLmUuIHRoZSBwYWQgaGFzIG5vdCByZWNlaXZlZCBhIHN0cmVhbS1zdGFydCBldmVudCB5ZXQuPC9wPgotPHA+VGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1zdGlja3ktZXZlbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9zdGlja3lfZXZlbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCgpPC9jb2RlPjwvYT4gYW5kCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc3RyZWFtLXN0YXJ0IiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhlIHJldHVybmVkIHN0cmVhbS1pZCBzdHJpbmcgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gb3BhcXVlIHN0cmluZywgaXRzCi1jb250ZW50cyBzaG91bGQgbm90IGJlIGludGVycHJldGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXN0cmVhbS1pZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1zdHJlYW0taWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5LWFsbG9jYXRlZCBjb3B5IG9mIHRoZSBzdHJlYW0taWQgZm9yCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gdGhlIHJldHVybmVkIHN0cmluZyB3aGVuIG5vIGxvbmdlcgotbmVlZGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtZ2V0LXN0cmVhbSI+PC9hPjxoMz5nc3RfcGFkX2dldF9zdHJlYW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT7CoCoKLWdzdF9wYWRfZ2V0X3N0cmVhbSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgY3VycmVudCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiBmb3IgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vbmUgaGFzIGJlZW4KLXNldCB5ZXQsIGkuZS4gdGhlIHBhZCBoYXMgbm90IHJlY2VpdmVkIGEgc3RyZWFtLXN0YXJ0IGV2ZW50IHlldC48L3A+Ci08cD5UaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0aWNreS1ldmVudCIgdGl0bGU9ImdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50KCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0iIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWdldC1zdHJlYW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgc291cmNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1nZXQtc3RyZWFtLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGN1cnJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LgotdW5yZWYgdGhlIHJldHVybmVkIHN0cmVhbSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRGb3J3YXJkRnVuY3Rpb24iPjwvYT48aDM+R3N0UGFkRm9yd2FyZEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0UGFkRm9yd2FyZEZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZvcndhcmQgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbGwgaW50ZXJuYWxseSBsaW5rZWQgcGFkcywgc2VlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1mb3J3YXJkIiB0aXRsZT0iZ3N0X3BhZF9mb3J3YXJkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2ZvcndhcmQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZEZvcndhcmRGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdGhhdCBpcyBmb3J3YXJkZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBncG9pbnRlciB0byBvcHRpb25hbCB1c2VyIGRhdGEuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRGb3J3YXJkRnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGRpc3BhdGNoaW5nIHByb2NlZHVyZSBoYXMgdG8gYmUgc3RvcHBlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1mb3J3YXJkIj48L2E+PGgzPmdzdF9wYWRfZm9yd2FyZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9mb3J3YXJkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRGb3J3YXJkRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRGb3J3YXJkRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRm9yd2FyZEZ1bmN0aW9uPC9zcGFuPjwvYT4gZm9yd2FyZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DYWxscyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9yd2FyZDwvY29kZT48L2VtPgotIGZvciBhbGwgaW50ZXJuYWxseSBsaW5rZWQgcGFkcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aAotZHluYW1pY2FsbHkgY2hhbmdpbmcgaW50ZXJuYWwgcGFkcyBhbmQgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcndhcmQ8L2NvZGU+PC9lbT4KLQotZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb25jZSBmb3IgZWFjaCBwYWQuPC9wPgotPHA+V2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9yd2FyZDwvY29kZT48L2VtPgotIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBubyBmdXJ0aGVyIHBhZHMgd2lsbCBiZSBwcm9jZXNzZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1mb3J3YXJkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9yd2FyZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRGb3J3YXJkRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRGb3J3YXJkRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRm9yd2FyZEZ1bmN0aW9uPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3J3YXJkPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtZm9yd2FyZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBvbmUgb2YgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb25zIHJldHVybmVkIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1jaGFpbiI+PC9hPjxoMz5nc3RfcGFkX2NoYWluwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfcGFkX2NoYWluICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoYWluIGEgYnVmZmVyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5UaGUgZnVuY3Rpb24gcmV0dXJucyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctRkxVU0hJTkc6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX0ZMVVNISU5HPC9zcGFuPjwvYT4gaWYgdGhlIHBhZCB3YXMgZmx1c2hpbmcuPC9wPgotPHA+SWYgdGhlIGJ1ZmZlciB0eXBlIGlzIG5vdCBhY2NlcHRhYmxlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gKGFzIG5lZ290aWF0ZWQgd2l0aCBhCi1wcmVjZWRpbmcgR1NUX0VWRU5UX0NBUFMgZXZlbnQpLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1OT1QtTkVHT1RJQVRFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0ZMT1dfTk9UX05FR09USUFURUQ8L3NwYW4+PC9hPi48L3A+Ci08cD5UaGUgZnVuY3Rpb24gcHJvY2VlZHMgY2FsbGluZyB0aGUgY2hhaW4gZnVuY3Rpb24gaW5zdGFsbGVkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSAoc2VlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2hhaW4tZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbigpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uKCk8L2NvZGU+PC9hPikgYW5kIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbiBpcwotcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1TVVBQT1JURUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX05PVF9TVVBQT1JURUQ8L3NwYW4+PC9hPiBpcyByZXR1cm5lZCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaGFzIG5vCi1jaGFpbiBmdW5jdGlvbi48L3A+Ci08cD5JbiBhbGwgY2FzZXMsIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgdGhlIGNhbGxlciBsb3NlcyBpdHMgcmVmZXJlbmNlIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLQotYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtY2hhaW4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIGlmIG5vdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0byBzZW5kLCByZXR1cm4gR1NUX0ZMT1dfRVJST1IKLWlmIG5vdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWNoYWluLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwYWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhZC1jaGFpbi1saXN0Ij48L2E+PGgzPmdzdF9wYWRfY2hhaW5fbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X3BhZF9jaGFpbl9saXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoYWluIGEgYnVmZmVybGlzdCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhlIGZ1bmN0aW9uIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUZMVVNISU5HOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19GTFVTSElORzwvc3Bhbj48L2E+IGlmIHRoZSBwYWQgd2FzIGZsdXNoaW5nLjwvcD4KLTxwPklmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSB3YXMgbm90IG5lZ290aWF0ZWQgcHJvcGVybHkgd2l0aCBhIENBUFMgZXZlbnQsIHRoaXMgZnVuY3Rpb24KLXJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1ORUdPVElBVEVEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19OT1RfTkVHT1RJQVRFRDwvc3Bhbj48L2E+LjwvcD4KLTxwPlRoZSBmdW5jdGlvbiBwcm9jZWVkcyBjYWxsaW5nIHRoZSBjaGFpbmxpc3QgZnVuY3Rpb24gaW5zdGFsbGVkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSAoc2VlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2hhaW4tbGlzdC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24oKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uKCk8L2NvZGU+PC9hPikgYW5kIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbiBpcwotcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1TVVBQT1JURUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX05PVF9TVVBQT1JURUQ8L3NwYW4+PC9hPiBpcyByZXR1cm5lZCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaGFzIG5vCi1jaGFpbmxpc3QgZnVuY3Rpb24uPC9wPgotPHA+SW4gYWxsIGNhc2VzLCBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZSBjYWxsZXIgbG9zZXMgaXRzIHJlZmVyZW5jZSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgotCi1hZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLWNoYWluLWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzaW5rIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIGlmIG5vdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gdG8gc2VuZCwgcmV0dXJuIEdTVF9GTE9XX0VSUk9SCi1pZiBub3QuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1jaGFpbi1saXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmcm9tIHRoZSBwYWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYWQtc3RhcnQtdGFzayI+PC9hPjxoMz5nc3RfcGFkX3N0YXJ0X3Rhc2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wYWRfc3RhcnRfdGFzayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN0YXJ0cyBhIHRhc2sgdGhhdCByZXBlYXRlZGx5IGNhbGxzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24KLWlzIG1vc3RseSB1c2VkIGluIHBhZCBhY3RpdmF0aW9uIGZ1bmN0aW9ucyB0byBzdGFydCB0aGUgZGF0YWZsb3cuCi1UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU1RSRUFNX0xPQ0soKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfU1RSRUFNX0xPQ0s8L3NwYW4+PC9hPiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFjcXVpcmVkCi1iZWZvcmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLSBpcyBjYWxsZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zdGFydC10YXNrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBzdGFydCB0aGUgdGFzayBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRhc2sgZnVuY3Rpb24gdG8gY2FsbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSB0YXNrIGZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhbGxlZCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KLWlzIG5vIGxvbmdlciByZWZlcmVuY2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXN0YXJ0LXRhc2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdGFzayBjb3VsZCBiZSBzdGFydGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXBhdXNlLXRhc2siPjwvYT48aDM+Z3N0X3BhZF9wYXVzZV90YXNrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3BhdXNlX3Rhc2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhdXNlIHRoZSB0YXNrIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gd2FpdCB1bnRpbCB0aGUKLWZ1bmN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSB0YXNrIGlzIGZpbmlzaGVkIGlmIHRoaXMgZnVuY3Rpb24gaXMgbm90Ci1jYWxsZWQgZnJvbSB0aGUgdGFzayBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXBhdXNlLXRhc2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBwYXVzZSB0aGUgdGFzayBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtcGF1c2UtdGFzay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB0YXNrIGNvdWxkIGJlIHBhdXNlZCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiB3aGVuIHRoZSBwYWQKLWhhcyBubyB0YXNrLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXN0b3AtdGFzayI+PC9hPjxoMz5nc3RfcGFkX3N0b3BfdGFza8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BhZF9zdG9wX3Rhc2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN0b3AgdGhlIHRhc2sgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUKLWZ1bmN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSB0YXNrIHdpbGwgZWZmZWN0aXZlbHkgc3RvcCBpZiBub3QgY2FsbGVkCi1mcm9tIHRoZSBHc3RUYXNrRnVuY3Rpb24uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGRlYWRsb2NrIGlmIGNhbGxlZCBmcm9tIHRoZSBHc3RUYXNrRnVuY3Rpb24gb2YKLXRoZSB0YXNrLiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1wYXVzZSIgdGl0bGU9ImdzdF90YXNrX3BhdXNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19wYXVzZSgpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08cD5SZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHBhZCBoYXMgYSB0YXNrLCB0aGUgc3RyZWFtIGxvY2sgaXMgYWNxdWlyZWQgYW5kCi1yZWxlYXNlZCBzbyBhcyB0byBlbnN1cmUgdGhhdCBzdHJlYW1pbmcgdGhyb3VnaCB0aGlzIHBhZCBoYXMgZmluaXNoZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zdG9wLXRhc2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBzdG9wIHRoZSB0YXNrIG9mPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zdG9wLXRhc2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdGFzayBjb3VsZCBiZSBzdG9wcGVkIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG9uIGVycm9yLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1hY3RpdmUiPjwvYT48aDM+Z3N0X3BhZF9zZXRfYWN0aXZlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGFkX3NldF9hY3RpdmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyB0aGUgZ2l2ZW4gcGFkLgotTm9ybWFsbHkgY2FsbGVkIGZyb20gd2l0aGluIGNvcmUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9ucy48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWN0aXZlPC9jb2RlPjwvZW0+Ci0sIG1ha2VzIHN1cmUgdGhlIHBhZCBpcyBhY3RpdmUuIElmIGl0IGlzIGFscmVhZHkgYWN0aXZlLCBlaXRoZXIgaW4KLXB1c2ggb3IgcHVsbCBtb2RlLCBqdXN0IHJldHVybi4gT3RoZXJ3aXNlIGRpc3BhdGNoZXMgdG8gdGhlIHBhZCdzIGFjdGl2YXRlCi1mdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgYWN0aXZhdGlvbi48L3A+Ci08cD5JZiBub3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFjdGl2ZTwvY29kZT48L2VtPgotLCBjYWxscyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY3RpdmF0ZS1tb2RlIiB0aXRsZT0iZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2FjdGl2YXRlX21vZGUoKTwvY29kZT48L2E+IHdpdGggdGhlIHBhZCdzIGN1cnJlbnQgbW9kZQotYW5kIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gYXJndW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC1zZXQtYWN0aXZlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hY3RpdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIG9yIG5vdCB0aGUgcGFkIHNob3VsZCBiZSBhY3RpdmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFkLXNldC1hY3RpdmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUdFVC1TVFJFQU0tTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSAgICAoJmFtcDsoR1NUX1BBRF9DQVNUKHBhZCktJmd0O3N0cmVhbV9yZWNfbG9jaykpCi08L3ByZT4KLTxwPkdldCB0aGUgc3RyZWFtIGxvY2sgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiBUaGUgc3RyZWFtIGxvY2sgaXMgcHJvdGVjdGluZyB0aGUKLXJlc291cmNlcyB1c2VkIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb25zIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4gQWNjZXNzb3IKLW1hY3JvLCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU1RSRUFNX0xPQ0soKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfUEFEX1NUUkVBTV9MT0NLKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtU1RSRUFNLVVOTE9DSzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9TVFJFQU1fVU5MT0NLKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1BBRF9TVFJFQU1fVU5MT0NLKCk8L2NvZGU+PC9hPiBpbnN0ZWFkCi10byB0YWtlL3JlbGVhc2UgdGhlIHBhZCdzIHN0cmVhbSBsb2NrLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtR0VULVNUUkVBTS1MT0NLLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVNUUkVBTS1MT0NLOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9TVFJFQU1fTE9DSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfU1RSRUFNX0xPQ0socGFkKSAgICAgICAgZ19yZWNfbXV0ZXhfbG9jayhHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyhwYWQpKQotPC9wcmU+Ci08cD5UYWtlIHRoZSBwYWQncyBzdHJlYW0gbG9jay4gVGhlIHN0cmVhbSBsb2NrIGlzIHJlY3Vyc2l2ZSBhbmQgd2lsbCBiZSB0YWtlbgotd2hlbiBidWZmZXJzIG9yIHNlcmlhbGl6ZWQgZG93bnN0cmVhbSBldmVudHMgYXJlIHB1c2hlZCBvbiBhIHBhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELVNUUkVBTS1MT0NLLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVNUUkVBTS1UUllMT0NLOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9TVFJFQU1fVFJZTE9DSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfU1RSRUFNX1RSWUxPQ0socGFkKSAgICAgZ19yZWNfbXV0ZXhfdHJ5bG9jayhHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyhwYWQpKQotPC9wcmU+Ci08cD5UcnkgdG8gdGFrZSB0aGUgcGFkJ3Mgc3RyZWFtIGxvY2ssIGFuZCByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBsb2NrIGNvdWxkIGJlCi10YWtlbiwgYW5kIG90aGVyd2lzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELVNUUkVBTS1UUllMT0NLLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVNUUkVBTS1VTkxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1NUUkVBTV9VTkxPQ0soKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1NUUkVBTV9VTkxPQ0socGFkKSAgICAgIGdfcmVjX211dGV4X3VubG9jayhHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyhwYWQpKQotPC9wcmU+Ci08cD5SZWxlYXNlIHRoZSBwYWQncyBzdHJlYW0gbG9jay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELVNUUkVBTS1VTkxPQ0sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9QQURfTkFNRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfTkFNRShwYWQpCQkoR1NUX09CSkVDVF9OQU1FKHBhZCkpCi08L3ByZT4KLTxwPkdldCBuYW1lIG9mIHRoZSBnaXZlbiBwYWQuCi1ObyBsb2NraW5nIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGZ1bmN0aW9uLCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX2dldF9uYW1lKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfbmFtZSgpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELU5BTUUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtUEFSRU5UOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9QQVJFTlQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1BBUkVOVChwYWQpCQkoR1NUX0VMRU1FTlRfQ0FTVChHU1RfT0JKRUNUX1BBUkVOVChwYWQpKSkKLTwvcHJlPgotPHA+R2V0IHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gcGFyZW50LgotTm8gbG9ja2luZyBpcyBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbiwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYXJlbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9wYXJlbnQoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2dldF9wYXJlbnQoKTwvY29kZT48L2E+IGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1QQVJFTlQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtRUxFTUVOVC1QUklWQVRFOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9FTEVNRU5UX1BSSVZBVEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0VMRU1FTlRfUFJJVkFURShwYWQpICAgIChHU1RfUEFEX0NBU1QocGFkKS0mZ3Q7ZWxlbWVudF9wcml2YXRlKQotPC9wcmU+Ci08cD5HZXQgdGhlIHByaXZhdGUgZGF0YSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0sIHdoaWNoIGlzIHVzdWFsbHkgc29tZSBwYWQtIG9yIHN0cmVhbS1zcGVjaWZpYwotc3RydWN0dXJlIGNyZWF0ZWQgYnkgdGhlIGVsZW1lbnQgYW5kIHNldCBvbiB0aGUgcGFkIHdoZW4gY3JlYXRpbmcgaXQuCi1ObyBsb2NraW5nIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtRUxFTUVOVC1QUklWQVRFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVBBRC1URU1QTEFURTpDQVBTIj48L2E+PGgzPkdTVF9QQURfUEFEX1RFTVBMQVRFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9QQURfVEVNUExBVEUocGFkKcKgKEdTVF9QQURfQ0FTVChwYWQpLSZndDtwYWR0ZW1wbGF0ZSkKLTwvcHJlPgotPHA+R2V0IHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4uIEl0IGRlc2NyaWJlcyB0aGUgcG9zc2libGUgbWVkaWEgdHlwZXMKLWEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIG9yIGFuIGVsZW1lbnQgZmFjdG9yeSBjYW4gaGFuZGxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtUEFELVRFTVBMQVRFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELURJUkVDVElPTjpDQVBTIj48L2E+PGgzPkdTVF9QQURfRElSRUNUSU9OKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9ESVJFQ1RJT04ocGFkKQkJKEdTVF9QQURfQ0FTVChwYWQpLSZndDtkaXJlY3Rpb24pCi08L3ByZT4KLTxwPkdldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gb2YgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4gQWNjZXNzb3IgbWFjcm8sIHVzZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWRpcmVjdGlvbiIgdGl0bGU9ImdzdF9wYWRfZ2V0X2RpcmVjdGlvbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfZGlyZWN0aW9uKCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtRElSRUNUSU9OLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUxBU1QtRkxPVy1SRVRVUk46Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0xBU1RfRkxPV19SRVRVUk4oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0xBU1RfRkxPV19SRVRVUk4ocGFkKSAgIChHU1RfUEFEX0NBU1QocGFkKS0mZ3Q7QUJJLmFiaS5sYXN0X2Zsb3dyZXQpCi08L3ByZT4KLTxwPkdldHMgdGhlIGxhc3QgZmxvdyByZXR1cm4gb24gdGhpcyBwYWQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUxBU1QtRkxPVy1SRVRVUk4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtVEFTSzpDQVBTIj48L2E+PGgzPkdTVF9QQURfVEFTSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfVEFTSyhwYWQpCQkoR1NUX1BBRF9DQVNUKHBhZCktJmd0O3Rhc2spCi08L3ByZT4KLTxwPkdldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLiBBY2Nlc3NvciBtYWNybyB1c2VkIGJ5IEdTdHJlYW1lci4gVXNlIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RhcnQtdGFzayIgdGl0bGU9ImdzdF9wYWRfc3RhcnRfdGFza8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9zdGFydF90YXNrKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RvcC10YXNrIiB0aXRsZT0iZ3N0X3BhZF9zdG9wX3Rhc2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfc3RvcF90YXNrKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGF1c2UtdGFzayIgdGl0bGU9ImdzdF9wYWRfcGF1c2VfdGFza8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wYXVzZV90YXNrKCk8L2NvZGU+PC9hPgotZnVuY3Rpb25zIGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1UQVNLLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELU1PREU6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX01PREUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX01PREUocGFkKQkgICAgICAgIChHU1RfUEFEX0NBU1QocGFkKS0mZ3Q7bW9kZSkKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTW9kZSIgdGl0bGU9ImVudW0gR3N0UGFkTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZE1vZGU8L3NwYW4+PC9hPiBvZiBwYWQsIHdoaWNoIHdpbGwgYmUgR1NUX1BBRF9NT0RFX05PTkUgaWYgdGhlIHBhZAotaGFzIG5vdCBiZWVuIGFjdGl2YXRlZCB5ZXQsIGFuZCBvdGhlcndpc2UgZWl0aGVyIEdTVF9QQURfTU9ERV9QVVNIIG9yCi1HU1RfUEFEX01PREVfUFVMTCBkZXBlbmRpbmcgb24gd2hpY2ggbW9kZSB0aGUgcGFkIHdhcyBhY3RpdmF0ZWQgaW4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1NT0RFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUFDVElWQVRFRlVOQzpDQVBTIj48L2E+PGgzPkdTVF9QQURfQUNUSVZBVEVGVU5DKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9BQ1RJVkFURUZVTkMocGFkKcKgKEdTVF9QQURfQ0FTVChwYWQpLSZndDthY3RpdmF0ZWZ1bmMpCi08L3ByZT4KLTxwPkdldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEFjdGl2YXRlRnVuY3Rpb248L3NwYW4+PC9hPiBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUFDVElWQVRFRlVOQy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1BQ1RJVkFURU1PREVGVU5DOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9BQ1RJVkFURU1PREVGVU5DKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9BQ1RJVkFURU1PREVGVU5DKHBhZCnCoChHU1RfUEFEX0NBU1QocGFkKS0mZ3Q7YWN0aXZhdGVtb2RlZnVuYykKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjwvc3Bhbj48L2E+IGZyb20gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUFDVElWQVRFTU9ERUZVTkMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtQ0hBSU5GVU5DOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9DSEFJTkZVTkMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0NIQUlORlVOQyhwYWQpCQkoR1NUX1BBRF9DQVNUKHBhZCktJmd0O2NoYWluZnVuYykKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5GdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQ2hhaW5GdW5jdGlvbjwvc3Bhbj48L2E+IGZyb20gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUNIQUlORlVOQy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1DSEFJTkxJU1RGVU5DOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9DSEFJTkxJU1RGVU5DKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9DSEFJTkxJU1RGVU5DKHBhZCkgICAgICAoR1NUX1BBRF9DQVNUKHBhZCktJmd0O2NoYWlubGlzdGZ1bmMpCi08L3ByZT4KLTxwPkdldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZENoYWluTGlzdEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb248L3NwYW4+PC9hPiBmcm9tIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1DSEFJTkxJU1RGVU5DLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUVWRU5URlVOQzpDQVBTIj48L2E+PGgzPkdTVF9QQURfRVZFTlRGVU5DKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9FVkVOVEZVTkMocGFkKQkJKEdTVF9QQURfQ0FTVChwYWQpLSZndDtldmVudGZ1bmMpCi08L3ByZT4KLTxwPkdldCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRFdmVudEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZEV2ZW50RnVuY3Rpb248L3NwYW4+PC9hPiBmcm9tIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0sIHdoaWNoCi1pcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGV2ZW50cyBvbiB0aGUgcGFkLiBZb3UgY2FuCi11c2UgdGhpcyB0byBzZXQgeW91ciBvd24gZXZlbnQgaGFuZGxpbmcgZnVuY3Rpb24gb24gYSBwYWQKLWFmdGVyIHlvdSBjcmVhdGUgaXQuICBJZiB5b3VyIGVsZW1lbnQgZGVyaXZlcyBmcm9tIGEgYmFzZQotY2xhc3MsIHVzZSB0aGUgYmFzZSBjbGFzcydzIHZpcnR1YWwgZnVuY3Rpb25zIGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1FVkVOVEZVTkMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtRVZFTlRGVUxMRlVOQzpDQVBTIj48L2E+PGgzPkdTVF9QQURfRVZFTlRGVUxMRlVOQygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfRVZFTlRGVUxMRlVOQyhwYWQpwqAoR1NUX1BBRF9DQVNUKHBhZCktJmd0O0FCSS5hYmkuZXZlbnRmdWxsZnVuYykKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRFdmVudEZ1bGxGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRFdmVudEZ1bGxGdW5jdGlvbjwvc3Bhbj48L2E+IGZyb20gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSwgd2hpY2gKLWlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZXZlbnRzIG9uIHRoZSBwYWQuIFlvdSBjYW4KLXVzZSB0aGlzIHRvIHNldCB5b3VyIG93biBldmVudCBoYW5kbGluZyBmdW5jdGlvbiBvbiBhIHBhZAotYWZ0ZXIgeW91IGNyZWF0ZSBpdC4gIElmIHlvdXIgZWxlbWVudCBkZXJpdmVzIGZyb20gYSBiYXNlCi1jbGFzcywgdXNlIHRoZSBiYXNlIGNsYXNzJ3MgdmlydHVhbCBmdW5jdGlvbnMgaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUVWRU5URlVMTEZVTkMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtR0VUUkFOR0VGVU5DOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9HRVRSQU5HRUZVTkMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0dFVFJBTkdFRlVOQyhwYWQpwqAoR1NUX1BBRF9DQVNUKHBhZCktJmd0O2dldHJhbmdlZnVuYykKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IGZyb20gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUdFVFJBTkdFRlVOQy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1RVUVSWUZVTkM6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1FVRVJZRlVOQygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfUVVFUllGVU5DKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0mZ3Q7cXVlcnlmdW5jKQotPC9wcmU+Ci08cD5HZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRRdWVyeUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkUXVlcnlGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRRdWVyeUZ1bmN0aW9uPC9zcGFuPjwvYT4gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0sIHdoaWNoIGlzIHRoZSBmdW5jdGlvbgotdGhhdCBoYW5kbGVzIHF1ZXJpZXMgb24gdGhlIHBhZC4gWW91IGNhbiAgdXNlIHRoaXMgdG8gc2V0IHlvdXIKLW93biBxdWVyeSBoYW5kbGluZyBmdW5jdGlvbiBvbiBhIHBhZCBhZnRlciB5b3UgY3JlYXRlIGl0LiBJZiB5b3VyCi1lbGVtZW50IGRlcml2ZXMgZnJvbSBhIGJhc2UgY2xhc3MsIHVzZSB0aGUgYmFzZSBjbGFzcydzIHZpcnR1YWwKLWZ1bmN0aW9ucyBpbnN0ZWFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtUVVFUllGVU5DLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUlURVJJTlRMSU5LRlVOQzpDQVBTIj48L2E+PGgzPkdTVF9QQURfSVRFUklOVExJTktGVU5DKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9JVEVSSU5UTElOS0ZVTkMocGFkKSAgICAoR1NUX1BBRF9DQVNUKHBhZCktJmd0O2l0ZXJpbnRsaW5rZnVuYykKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkSXRlckludExpbmtGdW5jdGlvbjwvc3Bhbj48L2E+IGZyb20gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUlURVJJTlRMSU5LRlVOQy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1QRUVSOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9QRUVSKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9QRUVSKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0mZ3Q7cGVlcikKLTwvcHJlPgotPHA+UmV0dXJuIHRoZSBwYWQncyBwZWVyIG1lbWJlci4gVGhpcyBtZW1iZXIgaXMgYSBwb2ludGVyIHRvIHRoZSBsaW5rZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLgotTm8gbG9ja2luZyBpcyBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbiwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wZWVyIiB0aXRsZT0iZ3N0X3BhZF9nZXRfcGVlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9nZXRfcGVlcigpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELVBFRVIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtTElOS0ZVTkM6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0xJTktGVU5DKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9MSU5LRlVOQyhwYWQpCQkoR1NUX1BBRF9DQVNUKHBhZCktJmd0O2xpbmtmdW5jKQotPC9wcmU+Ci08cD5HZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRMaW5rRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4gZm9yIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1MSU5LRlVOQy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1VTkxJTktGVU5DOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9VTkxJTktGVU5DKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9VTkxJTktGVU5DKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0mZ3Q7dW5saW5rZnVuYykKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkVW5saW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRVbmxpbmtGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRVbmxpbmtGdW5jdGlvbjwvc3Bhbj48L2E+IGZyb20gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELVVOTElOS0ZVTkMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtTElOS0VEOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9JU19MSU5LRUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX0xJTktFRChwYWQpCQkoR1NUX1BBRF9QRUVSKHBhZCkgIT0gTlVMTCkKLTwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1MSU5LRUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLUxJTktFRC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGlzIGxpbmtlZCB0byBhbm90aGVyIHBhZC4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWxpbmtlZCIgdGl0bGU9ImdzdF9wYWRfaXNfbGlua2VkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2lzX2xpbmtlZCgpPC9jb2RlPjwvYT4KLWluc3RlYWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtU1JDOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9JU19TUkMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX1NSQyhwYWQpCQkoR1NUX1BBRF9ESVJFQ1RJT04ocGFkKSA9PSBHU1RfUEFEX1NSQykKLTwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1TUkMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLVNSQy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGlzIGEgc291cmNlIHBhZCAoaS5lLiBwcm9kdWNlcyBkYXRhKS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1TSU5LOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9JU19TSU5LKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9JU19TSU5LKHBhZCkJCShHU1RfUEFEX0RJUkVDVElPTihwYWQpID09IEdTVF9QQURfU0lOSykKLTwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1TSU5LLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1TSU5LLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgaXMgYSBzaW5rIHBhZCAoaS5lLiBjb25zdW1lcyBkYXRhKS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1BQ1RJVkU6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0lTX0FDVElWRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfSVNfQUNUSVZFKHBhZCkgICAgICAgICAgKEdTVF9QQURfTU9ERShwYWQpICE9IEdTVF9QQURfTU9ERV9OT05FKQotPC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLUFDVElWRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtQUNUSVZFLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgaGFzIGJlZW4gYWN0aXZhdGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLUJMT0NLRUQ6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0lTX0JMT0NLRUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX0JMT0NLRUQocGFkKQkJKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0JMT0NLRUQpKQotPC9wcmU+Ci08cD5DaGVjayBpZiB0aGUgZGF0YWZsb3cgb24gYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaXMgYmxvY2tlZC4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWJsb2NrZWQiIHRpdGxlPSJnc3RfcGFkX2lzX2Jsb2NrZWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfaXNfYmxvY2tlZCgpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLUJMT0NLRUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtQkxPQ0tJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0lTX0JMT0NLSU5HKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9JU19CTE9DS0lORyhwYWQpwqAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfQkxPQ0tJTkcpKQotPC9wcmU+Ci08cD5DaGVjayBpZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGlzIGN1cnJlbnRseSBibG9ja2luZyBvbiBhIGJ1ZmZlciBvciBldmVudC4gVXNlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1ibG9ja2luZyIgdGl0bGU9ImdzdF9wYWRfaXNfYmxvY2tpbmfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfaXNfYmxvY2tpbmcoKTwvY29kZT48L2E+IGluc3RlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1CTE9DS0lORy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1GTFVTSElORzpDQVBTIj48L2E+PGgzPkdTVF9QQURfSVNfRkxVU0hJTkcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX0ZMVVNISU5HKHBhZCnCoChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfRkxBR19GTFVTSElORykpCi08L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaXMgZmx1c2hpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1GTFVTSElORy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1TRVQtRkxVU0hJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1NFVF9GTFVTSElORygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfU0VUX0ZMVVNISU5HKHBhZCnCoChHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19GTFVTSElORykpCi08L3ByZT4KLTxwPlNldCB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIHRvIGZsdXNoaW5nIHN0YXRlLCB3aGljaCBtZWFucyBpdCB3aWxsIG5vdCBhY2NlcHQgYW55Ci1tb3JlIGV2ZW50cywgcXVlcmllcyBvciBidWZmZXJzLCBhbmQgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HIGlmIGFueSBidWZmZXJzCi1hcmUgcHVzaGVkIG9uIGl0LiBUaGlzIHVzdWFsbHkgaGFwcGVucyB3aGVuIHRoZSBwYWQgaXMgc2h1dCBkb3duIG9yIHdoZW4KLWEgZmx1c2hpbmcgc2VlayBoYXBwZW5zLiBUaGlzIGlzIHVzZWQgaW5zaWRlIEdTdHJlYW1lciB3aGVuIGZsdXNoIHN0YXJ0L3N0b3AKLWV2ZW50cyBwYXNzIHRocm91Z2ggcGFkcywgb3Igd2hlbiBhbiBlbGVtZW50IHN0YXRlIGlzIGNoYW5nZWQgYW5kIHBhZHMgYXJlCi1hY3RpdmF0ZWQgb3IgZGVhY3RpdmF0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1TRVQtRkxVU0hJTkcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtVU5TRVQtRkxVU0hJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1VOU0VUX0ZMVVNISU5HKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9VTlNFVF9GTFVTSElORyhwYWQpwqAoR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19GTFVTSElORykpCi08L3ByZT4KLTxwPlVuc2V0IHRoZSBmbHVzaGluZyBmbGFnLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtVU5TRVQtRkxVU0hJTkcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtRU9TOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9JU19FT1MoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX0VPUyhwYWQpCSAgICAgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0VPUykpCi08L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaXMgaW4gRU9TIHN0YXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtRU9TLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELU5FRURTLVJFQ09ORklHVVJFOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfTkVFRFNfUkVDT05GSUdVUkUocGFkKSAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX05FRURfUkVDT05GSUdVUkUpKQotPC9wcmU+Ci08cD5DaGVjayBpZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIHNob3VsZCBiZSByZWNvbmZpZ3VyZWQvcmVuZWdvdGlhdGVkLgotVGhlIGZsYWcgaGFzIHRvIGJlIHVuc2V0IG1hbnVhbGx5IGFmdGVyIHJlY29uZmlndXJhdGlvbiBoYXBwZW5lZC4KLVVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1uZWVkcy1yZWNvbmZpZ3VyZSIgdGl0bGU9ImdzdF9wYWRfbmVlZHNfcmVjb25maWd1cmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfbmVlZHNfcmVjb25maWd1cmUoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoZWNrLXJlY29uZmlndXJlIiB0aXRsZT0iZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSgpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELU5FRURTLVJFQ09ORklHVVJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUhBUy1QRU5ESU5HLUVWRU5UUzpDQVBTIj48L2E+PGgzPkdTVF9QQURfSEFTX1BFTkRJTkdfRVZFTlRTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9IQVNfUEVORElOR19FVkVOVFMocGFkKSAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUEVORElOR19FVkVOVFMpKQotPC9wcmU+Ci08cD5DaGVjayBpZiB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIGhhcyBwZW5kaW5nIGV2ZW50cy4gVGhpcyBpcyB1c2VkIGludGVybmFsbHkgYnkKLUdTdHJlYW1lci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUhBUy1QRU5ESU5HLUVWRU5UUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1GSVhFRC1DQVBTIj48L2E+PGgzPkdTVF9QQURfSVNfRklYRURfQ0FQUygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfSVNfRklYRURfQ0FQUyhwYWQpwqAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfRklYRURfQ0FQUykpCi08L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaXMgdXNpbmcgZml4ZWQgY2Fwcywgd2hpY2ggbWVhbnMgdGhhdAotb25jZSB0aGUgY2FwcyBhcmUgc2V0IG9uIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0sIHRoZSBjYXBzIHF1ZXJ5IGZ1bmN0aW9uIHdpbGwKLW9ubHkgcmV0dXJuIHRob3NlIGNhcHMuIFNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC11c2UtZml4ZWQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfdXNlX2ZpeGVkX2NhcHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtRklYRUQtQ0FQUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1ORUVEUy1QQVJFTlQ6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX05FRURTX1BBUkVOVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfTkVFRFNfUEFSRU5UKHBhZCkgICAgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX05FRURfUEFSRU5UKSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlcmUgaXMgYSBwYXJlbnQgb2JqZWN0IGJlZm9yZSBjYWxsaW5nIGludG8gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBjYWxsYmFja3MuCi1UaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBHU3RyZWFtZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1ORUVEUy1QQVJFTlQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtUFJPWFktQ0FQUyI+PC9hPjxoMz5HU1RfUEFEX0lTX1BST1hZX0NBUFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX1BST1hZX0NBUFMocGFkKSAgICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSBpcyBzZXQgdG8gcHJveHkgY2Fwcy4gVGhpcyBtZWFucyB0aGF0IHRoZSBkZWZhdWx0Ci1ldmVudCBhbmQgcXVlcnkgaGFuZGxlciB3aWxsIGZvcndhcmQgYWxsIGV2ZW50cyBhbmQgcXVlcmllcyB0byB0aGUKLWludGVybmFsbHkgbGlua2VkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+Ci0gaW5zdGVhZCBvZiBkaXNjYXJkaW5nIHRoZW0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1JUy1QUk9YWS1DQVBTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVNFVC1QUk9YWS1DQVBTIj48L2E+PGgzPkdTVF9QQURfU0VUX1BST1hZX0NBUFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTKHBhZCkgICAgIChHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKSkKLTwvcHJlPgotPHA+U2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSB0byBwcm94eSBjYXBzLCBzbyB0aGF0IGFsbCBjYXBzLXJlbGF0ZWQgZXZlbnRzIGFuZCBxdWVyaWVzIGFyZQotcHJveGllZCBkb3duLSBvciB1cHN0cmVhbSB0byB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgZWxlbWVudCBhdXRvbWF0aWNhbGx5LgotU2V0IHRoaXMgaWYgdGhlIGVsZW1lbnQgYWx3YXlzIG91dHB1dHMgZGF0YSBpbiB0aGUgZXhhY3Qgc2FtZSBmb3JtYXQgYXMgaXQKLXJlY2VpdmVzIGFzIGlucHV0LiBUaGlzIGlzIGp1c3QgZm9yIGNvbnZlbmllbmNlIHRvIGF2b2lkIGltcGxlbWVudGluZyBzb21lCi1zdGFuZGFyZCBldmVudCBhbmQgcXVlcnkgaGFuZGxpbmcgY29kZSBpbiBhbiBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtU0VULVBST1hZLUNBUFMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtVU5TRVQtUFJPWFktQ0FQUyI+PC9hPjxoMz5HU1RfUEFEX1VOU0VUX1BST1hZX0NBUFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1VOU0VUX1BST1hZX0NBUFMocGFkKSAgIChHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0NBUFMpKQotPC9wcmU+Ci08cD5VbnNldCBwcm94eSBjYXBzIGZsYWcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1VTlNFVC1QUk9YWS1DQVBTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLVBST1hZLUFMTE9DQVRJT046Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0lTX1BST1hZX0FMTE9DQVRJT04oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX1BST1hZX0FMTE9DQVRJT04ocGFkKSAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUFJPWFlfQUxMT0NBVElPTikpCi08L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaXMgc2V0IGFzIHByb3h5IGFsbG9jYXRpb24gd2hpY2ggbWVhbnMKLXRoYXQgdGhlIGRlZmF1bHQgcXVlcnkgaGFuZGxlciB3aWxsIGZvcndhcmQgYWxsb2NhdGlvbiBxdWVyaWVzIHRvIHRoZQotaW50ZXJuYWxseSBsaW5rZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLSBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgdGhlbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLVBST1hZLUFMTE9DQVRJT04ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtU0VULVBST1hZLUFMTE9DQVRJT046Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1NFVF9QUk9YWV9BTExPQ0FUSU9OKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9TRVRfUFJPWFlfQUxMT0NBVElPTihwYWQpICAgKEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0FMTE9DQVRJT04pKQotPC9wcmU+Ci08cD5TZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIHRvIHByb3h5IGFsbG9jYXRpb24gcXVlcmllcywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBxdWVyeQotaGFuZGxlciB3aWxsIGZvcndhcmQgYWxsb2NhdGlvbiBxdWVyaWVzIHRvIHRoZSBpbnRlcm5hbGx5IGxpbmtlZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPgotCi1pbnN0ZWFkIG9mIGRpc2NhcmRpbmcgdGhlbS4KLVNldCB0aGlzIGlmIHRoZSBlbGVtZW50IGFsd2F5cyBvdXRwdXRzIGRhdGEgaW4gdGhlIGV4YWN0IHNhbWUgZm9ybWF0IGFzIGl0Ci1yZWNlaXZlcyBhcyBpbnB1dC4gVGhpcyBpcyBqdXN0IGZvciBjb252ZW5pZW5jZSB0byBhdm9pZCBpbXBsZW1lbnRpbmcgc29tZQotc3RhbmRhcmQgcXVlcnkgaGFuZGxpbmcgY29kZSBpbiBhbiBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtU0VULVBST1hZLUFMTE9DQVRJT04ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtVU5TRVQtUFJPWFktQUxMT0NBVElPTjpDQVBTIj48L2E+PGgzPkdTVF9QQURfVU5TRVRfUFJPWFlfQUxMT0NBVElPTigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfVU5TRVRfUFJPWFlfQUxMT0NBVElPTihwYWQpIChHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0FMTE9DQVRJT04pKQotPC9wcmU+Ci08cD5VbnNldCBwcm94eSBhbGxvY2F0aW9uIGZsYWcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1VTlNFVC1QUk9YWS1BTExPQ0FUSU9OLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVNFVC1QUk9YWS1TQ0hFRFVMSU5HOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9TRVRfUFJPWFlfU0NIRURVTElORygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfU0VUX1BST1hZX1NDSEVEVUxJTkcocGFkKSAgIChHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9TQ0hFRFVMSU5HKSkKLTwvcHJlPgotPHA+U2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSB0byBwcm94eSBzY2hlZHVsaW5nIHF1ZXJpZXMsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQgcXVlcnkKLWhhbmRsZXIgd2lsbCBmb3J3YXJkIHNjaGVkdWxpbmcgcXVlcmllcyB0byB0aGUgaW50ZXJuYWxseSBsaW5rZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLQotaW5zdGVhZCBvZiBkaXNjYXJkaW5nIHRoZW0uIFlvdSB3aWxsIHVzdWFsbHkgd2FudCB0byBoYW5kbGUgc2NoZWR1bGluZwotcXVlcmllcyBleHBsaWNpdGx5IGlmIHlvdXIgZWxlbWVudCBzdXBwb3J0cyBtdWx0aXBsZSBzY2hlZHVsaW5nIG1vZGVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtU0VULVBST1hZLVNDSEVEVUxJTkcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtVU5TRVQtUFJPWFktU0NIRURVTElORzpDQVBTIj48L2E+PGgzPkdTVF9QQURfVU5TRVRfUFJPWFlfU0NIRURVTElORygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfVU5TRVRfUFJPWFlfU0NIRURVTElORyhwYWQpIChHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BST1hZX1NDSEVEVUxJTkcpKQotPC9wcmU+Ci08cD5VbnNldCBwcm94eSBzY2hlZHVsaW5nIGZsYWcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1VTlNFVC1QUk9YWS1TQ0hFRFVMSU5HLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLVBST1hZLVNDSEVEVUxJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX0lTX1BST1hZX1NDSEVEVUxJTkcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX1BST1hZX1NDSEVEVUxJTkcocGFkKSAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUFJPWFlfU0NIRURVTElORykpCi08L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0gaXMgc2V0IHRvIHByb3h5IHNjaGVkdWxpbmcgcXVlcmllcywgd2hpY2ggbWVhbnMgdGhhdAotdGhlIGRlZmF1bHQgcXVlcnkgaGFuZGxlciB3aWxsIGZvcndhcmQgc2NoZWR1bGluZyBxdWVyaWVzIHRvIHRoZSBpbnRlcm5hbGx5Ci1saW5rZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLSBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgdGhlbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLVBST1hZLVNDSEVEVUxJTkcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtQUNDRVBULUlOVEVSU0VDVDpDQVBTIj48L2E+PGgzPkdTVF9QQURfSVNfQUNDRVBUX0lOVEVSU0VDVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfSVNfQUNDRVBUX0lOVEVSU0VDVChwYWQpICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfRkxBR19BQ0NFUFRfSU5URVJTRUNUKSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlIHBhZCdzIGFjY2VwdCBpbnRlcnNlY3QgZmxhZyBpcyBzZXQuIFRoZSBkZWZhdWx0IGFjY2VwdC1jYXBzCi1oYW5kbGVyIHdpbGwgY2hlY2sgaWYgdGhlIGNhcHMgaW50ZXJzZWN0IHRoZSBxdWVyeS1jYXBzIHJlc3VsdCBpbnN0ZWFkIG9mCi1jaGVja2luZyBmb3IgYSBzdWJzZXQuIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIHBhcnNlciBlbGVtZW50cyB0aGF0IGNhbgotYWNjZXB0IGluY29tcGxldGVseSBzcGVjaWZpZWQgY2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELUlTLUFDQ0VQVC1JTlRFUlNFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtU0VULUFDQ0VQVC1JTlRFUlNFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1NFVF9BQ0NFUFRfSU5URVJTRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9TRVRfQUNDRVBUX0lOVEVSU0VDVChwYWQpICAgKEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0FDQ0VQVF9JTlRFUlNFQ1QpKQotPC9wcmU+Ci08cD5TZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIHRvIGJ5IGRlZmF1bHQgYWNjZXB0IGNhcHMgYnkgaW50ZXJzZWN0aW5nIHRoZSByZXN1bHQgaW5zdGVhZCBvZgotY2hlY2tpbmcgZm9yIGEgc3Vic2V0LiBUaGlzIGlzIGludGVyZXN0aW5nIGZvciBwYXJzZXIgZWxlbWVudHMgdGhhdCBjYW4KLWFjY2VwdCBpbmNvbXBsZXRlbHkgc3BlY2lmaWVkIGNhcHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1TRVQtQUNDRVBULUlOVEVSU0VDVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1VTlNFVC1BQ0NFUFQtSU5URVJTRUNUOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9VTlNFVF9BQ0NFUFRfSU5URVJTRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9VTlNFVF9BQ0NFUFRfSU5URVJTRUNUKHBhZCkgKEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX0ZMQUdfQUNDRVBUX0lOVEVSU0VDVCkpCi08L3ByZT4KLTxwPlVuc2V0IGFjY2VwdCBpbnRlcnNlY3QgZmxhZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELVVOU0VULUFDQ0VQVC1JTlRFUlNFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtQUNDRVBULVRFTVBMQVRFOkNBUFMiPjwvYT48aDM+R1NUX1BBRF9JU19BQ0NFUFRfVEVNUExBVEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX0lTX0FDQ0VQVF9URU1QTEFURShwYWQpICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEUpKQotPC9wcmU+Ci08cD5DaGVjayBpZiB0aGUgcGFkJ3MgYWNjZXB0IGNhcHMgb3BlcmF0aW9uIHdpbGwgdXNlIHRoZSBwYWQgdGVtcGxhdGUgY2Fwcy4KLVRoZSBkZWZhdWx0IGFjY2VwdC1jYXBzIHdpbGwgZG8gYSBxdWVyeSBjYXBzIHRvIGdldCB0aGUgY2Fwcywgd2hpY2ggbWlnaHQKLWJlIHF1ZXJ5aW5nIGRvd25zdHJlYW0gY2F1c2luZyB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8KLWltcGxlbWVudCBhIHByb3BlciBhY2NlcHQtY2FwcyBxdWVyeSBoYW5kbGVyIG9yIHRvIHVzZSB0aGlzIGZsYWcgdG8gcHJldmVudAotcmVjdXJzaXZlIGFjY2VwdC1jYXBzIGhhbmRsaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtSVMtQUNDRVBULVRFTVBMQVRFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVNFVC1BQ0NFUFQtVEVNUExBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUocGFkKSAgIChHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEUpKQotPC9wcmU+Ci08cD5TZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotIHRvIGJ5IGRlZmF1bHQgdXNlIHRoZSBwYWQgdGVtcGxhdGUgY2FwcyB0byBjb21wYXJlIHdpdGgKLXRoZSBhY2NlcHQgY2FwcyBpbnN0ZWFkIG9mIHVzaW5nIGEgY2FwcyBxdWVyeSByZXN1bHQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1TRVQtQUNDRVBULVRFTVBMQVRFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVVOU0VULUFDQ0VQVC1URU1QTEFURTpDQVBTIj48L2E+PGgzPkdTVF9QQURfVU5TRVRfQUNDRVBUX1RFTVBMQVRFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9VTlNFVF9BQ0NFUFRfVEVNUExBVEUocGFkKSAoR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEUpKQotPC9wcmU+Ci08cD5VbnNldCBhY2NlcHQgdGVtcGxhdGUgZmxhZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELVVOU0VULUFDQ0VQVC1URU1QTEFURS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQYWQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFBhZDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFBhZCB7Ci0gIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X3ByaXZhdGU7Ci0KLSAgR3N0UGFkVGVtcGxhdGUgICAgICAgICAgICAgICAgKnBhZHRlbXBsYXRlOwotCi0gIEdzdFBhZERpcmVjdGlvbiAgICAgICAgICAgICAgICBkaXJlY3Rpb247Ci19OwotPC9wcmU+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gc3RydWN0dXJlLiBVc2UgdGhlIGZ1bmN0aW9ucyB0byB1cGRhdGUgdGhlIHZhcmlhYmxlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWQubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYWQtc3RydWN0LmVsZW1lbnQtcHJpdmF0ZSI+PC9hPmVsZW1lbnRfcHJpdmF0ZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+cHJpdmF0ZSBkYXRhIG93bmVkIGJ5IHRoZSBwYXJlbnQgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkLXN0cnVjdC5wYWR0ZW1wbGF0ZSI+PC9hPnBhZHRlbXBsYXRlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5wYWR0ZW1wbGF0ZSBmb3IgdGhpcyBwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkLXN0cnVjdC5kaXJlY3Rpb24iPjwvYT5kaXJlY3Rpb248L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCwgY2Fubm90IGNoYW5nZSBhZnRlciBjcmVhdGluZwotdGhlIHBhZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZERpcmVjdGlvbiI+PC9hPjxoMz5lbnVtIEdzdFBhZERpcmVjdGlvbjwvaDM+Ci08cD5UaGUgZGlyZWN0aW9uIG9mIGEgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZERpcmVjdGlvbi5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtVU5LTk9XTjpDQVBTIj48L2E+R1NUX1BBRF9VTktOT1dOPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmRpcmVjdGlvbiBpcyB1bmtub3duLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELVNSQzpDQVBTIj48L2E+R1NUX1BBRF9TUkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHBhZCBpcyBhIHNvdXJjZSBwYWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtU0lOSzpDQVBTIj48L2E+R1NUX1BBRF9TSU5LPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBwYWQgaXMgYSBzaW5rIHBhZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZEZsYWdzIj48L2E+PGgzPmVudW0gR3N0UGFkRmxhZ3M8L2gzPgotPHA+UGFkIHN0YXRlIGZsYWdzPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUZMQUctQkxPQ0tFRDpDQVBTIj48L2E+R1NUX1BBRF9GTEFHX0JMT0NLRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+aXMgZGF0YWZsb3cgb24gYSBwYWQgYmxvY2tlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUZMQUctRkxVU0hJTkc6Q0FQUyI+PC9hPkdTVF9QQURfRkxBR19GTFVTSElORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5pcyBwYWQgZmx1c2hpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1GTEFHLUVPUzpDQVBTIj48L2E+R1NUX1BBRF9GTEFHX0VPUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5pcyBwYWQgaW4gRU9TIHN0YXRlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtRkxBRy1CTE9DS0lORzpDQVBTIj48L2E+R1NUX1BBRF9GTEFHX0JMT0NLSU5HPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmlzIHBhZCBjdXJyZW50bHkgYmxvY2tpbmcgb24gYSBidWZmZXIgb3IgZXZlbnQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1GTEFHLU5FRUQtUEFSRU5UOkNBUFMiPjwvYT5HU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBwYXJlbnQgb2JqZWN0IGJlZm9yZSBjYWxsaW5nCi0gICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgcGFkIGNhbGxiYWNrcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1GTEFHLU5FRUQtUkVDT05GSUdVUkU6Q0FQUyI+PC9hPkdTVF9QQURfRkxBR19ORUVEX1JFQ09ORklHVVJFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBwYWQgc2hvdWxkIGJlIHJlY29uZmlndXJlZC9yZW5lZ290aWF0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmxhZyBoYXMgdG8gYmUgdW5zZXQgbWFudWFsbHkgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29uZmlndXJhdGlvbiBoYXBwZW5lZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1GTEFHLVBFTkRJTkctRVZFTlRTOkNBUFMiPjwvYT5HU1RfUEFEX0ZMQUdfUEVORElOR19FVkVOVFM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHBhZCBoYXMgcGVuZGluZyBldmVudHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1GTEFHLUZJWEVELUNBUFMiPjwvYT5HU1RfUEFEX0ZMQUdfRklYRURfQ0FQUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgcGFkIGlzIHVzaW5nIGZpeGVkIGNhcHMuIFRoaXMgbWVhbnMgdGhhdAotICAgIG9uY2UgdGhlIGNhcHMgYXJlIHNldCBvbiB0aGUgcGFkLCB0aGUgZGVmYXVsdCBjYXBzIHF1ZXJ5IGZ1bmN0aW9uCi0gICAgd2lsbCBvbmx5IHJldHVybiB0aG9zZSBjYXBzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUZMQUctUFJPWFktQ0FQUyI+PC9hPkdTVF9QQURfRkxBR19QUk9YWV9DQVBTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBkZWZhdWx0IGV2ZW50IGFuZCBxdWVyeSBoYW5kbGVyIHdpbGwgZm9yd2FyZAotICAgICAgICAgICAgICAgICAgICAgYWxsIGV2ZW50cyBhbmQgcXVlcmllcyB0byB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkcwotICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBkaXNjYXJkaW5nIHRoZW0uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtRkxBRy1QUk9YWS1BTExPQ0FUSU9OOkNBUFMiPjwvYT5HU1RfUEFEX0ZMQUdfUFJPWFlfQUxMT0NBVElPTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIHdpbGwgZm9yd2FyZAotICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbiBxdWVyaWVzIHRvIHRoZSBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzCi0gICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgdGhlbS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1GTEFHLVBST1hZLVNDSEVEVUxJTkc6Q0FQUyI+PC9hPkdTVF9QQURfRkxBR19QUk9YWV9TQ0hFRFVMSU5HPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIgd2lsbCBmb3J3YXJkCi0gICAgICAgICAgICAgICAgICAgICBzY2hlZHVsaW5nIHF1ZXJpZXMgdG8gdGhlIGludGVybmFsbHkgbGlua2VkIHBhZHMKLSAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgZGlzY2FyZGluZyB0aGVtLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUZMQUctQUNDRVBULUlOVEVSU0VDVDpDQVBTIj48L2E+R1NUX1BBRF9GTEFHX0FDQ0VQVF9JTlRFUlNFQ1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGRlZmF1bHQgYWNjZXB0LWNhcHMgaGFuZGxlciB3aWxsIGNoZWNrCi0gICAgICAgICAgICAgICAgICAgICBpdCB0aGUgY2FwcyBpbnRlcnNlY3QgdGhlIHF1ZXJ5LWNhcHMgcmVzdWx0IGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICAgIG9mIGNoZWNraW5nIGZvciBhIHN1YnNldC4gVGhpcyBpcyBpbnRlcmVzdGluZyBmb3IKLSAgICAgICAgICAgICAgICAgICAgIHBhcnNlcnMgdGhhdCBjYW4gYWNjZXB0IGluY29tcGxldGVseSBzcGVjaWZpZWQgY2Fwcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1GTEFHLUFDQ0VQVC1URU1QTEFURTpDQVBTIj48L2E+R1NUX1BBRF9GTEFHX0FDQ0VQVF9URU1QTEFURTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgZGVmYXVsdCBhY2NlcHQtY2FwcyBoYW5kbGVyIHdpbGwgdXNlCi0gICAgICAgICAgICAgICAgICAgICB0aGUgdGVtcGxhdGUgcGFkIGNhcHMgaW5zdGVhZCBvZiBxdWVyeSBjYXBzIHRvCi0gICAgICAgICAgICAgICAgICAgICBjb21wYXJlIHdpdGggdGhlIGFjY2VwdCBjYXBzLiBVc2UgdGhpcyBpbiBjb21iaW5hdGlvbgotICAgICAgICAgICAgICAgICAgICAgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLUFDQ0VQVC1JTlRFUlNFQ1Q6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QQURfRkxBR19BQ0NFUFRfSU5URVJTRUNUPC9jb2RlPjwvYT4uIChTaW5jZSAxLjYpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtRkxBRy1MQVNUOkNBUFMiPjwvYT5HU1RfUEFEX0ZMQUdfTEFTVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5vZmZzZXQgdG8gZGVmaW5lIG1vcmUgZmxhZ3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZExpbmtSZXR1cm4iPjwvYT48aDM+ZW51bSBHc3RQYWRMaW5rUmV0dXJuPC9oMz4KLTxwPlJlc3VsdCB2YWx1ZXMgZnJvbSBnc3RfcGFkX2xpbmsgYW5kIGZyaWVuZHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkTGlua1JldHVybi5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtTElOSy1PSzpDQVBTIj48L2E+R1NUX1BBRF9MSU5LX09LPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmxpbmsgc3VjY2VlZGVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtTElOSy1XUk9ORy1ISUVSQVJDSFk6Q0FQUyI+PC9hPkdTVF9QQURfTElOS19XUk9OR19ISUVSQVJDSFk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cGFkcyBoYXZlIG5vIGNvbW1vbiBncmFuZHBhcmVudDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstV0FTLUxJTktFRDpDQVBTIj48L2E+R1NUX1BBRF9MSU5LX1dBU19MSU5LRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cGFkIHdhcyBhbHJlYWR5IGxpbmtlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstV1JPTkctRElSRUNUSU9OOkNBUFMiPjwvYT5HU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnBhZHMgaGF2ZSB3cm9uZyBkaXJlY3Rpb248L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1MSU5LLU5PRk9STUFUOkNBUFMiPjwvYT5HU1RfUEFEX0xJTktfTk9GT1JNQVQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cGFkcyBkbyBub3QgaGF2ZSBjb21tb24gZm9ybWF0PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtTElOSy1OT1NDSEVEOkNBUFMiPjwvYT5HU1RfUEFEX0xJTktfTk9TQ0hFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wYWRzIGNhbm5vdCBjb29wZXJhdGUgaW4gc2NoZWR1bGluZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstUkVGVVNFRDpDQVBTIj48L2E+R1NUX1BBRF9MSU5LX1JFRlVTRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cmVmdXNlZCBmb3Igc29tZSByZWFzb248L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZExpbmtDaGVjayI+PC9hPjxoMz5lbnVtIEdzdFBhZExpbmtDaGVjazwvaDM+Ci08cD5UaGUgYW1vdW50IG9mIGNoZWNraW5nIHRvIGJlIGRvbmUgd2hlbiBsaW5raW5nIHBhZHMuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5HU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUzwvY29kZT48L2VtPgotCi1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9QQURfTElOS19DSEVDS19URU1QTEFURV9DQVBTPC9jb2RlPjwvZW0+Ci0gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gSWYgYm90aCBhcmUKLXNwZWNpZmllZCwgZXhwZW5zaXZlIGJ1dCBzYWZlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5HU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUzwvY29kZT48L2VtPgotIGFyZSBwZXJmb3JtZWQuPC9wPgotPGRpdiBjbGFzcz0id2FybmluZyI+PHA+Ci1Pbmx5IGRpc2FibGUgc29tZSBvZiB0aGUgY2hlY2tzIGlmIHlvdSBhcmUgMTAwJSBjZXJ0YWluIHlvdSBrbm93IHRoZSBsaW5rCi13aWxsIG5vdCBmYWlsIGJlY2F1c2Ugb2YgaGllcmFyY2h5L2NhcHMgY29tcGF0aWJpbGl0eSBmYWlsdXJlcy4gSWYgdW5jZXJ0YWluLAotdXNlIHRoZSBkZWZhdWx0IGNoZWNrcyAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1DSEVDSy1ERUZBVUxUOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVDwvY29kZT48L2E+KSBvciB0aGUgcmVndWxhciBtZXRob2RzCi1mb3IgbGlua2luZyB0aGUgcGFkcy4KLTwvcD48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZExpbmtDaGVjay5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtTElOSy1DSEVDSy1OT1RISU5HOkNBUFMiPjwvYT5HU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Eb24ndCBjaGVjayBoaWVyYXJjaHkgb3IgY2FwcyBjb21wYXRpYmlsaXR5LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstQ0hFQ0stSElFUkFSQ0hZOkNBUFMiPjwvYT5HU1RfUEFEX0xJTktfQ0hFQ0tfSElFUkFSQ0hZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkNoZWNrIHRoZSBwYWRzIGhhdmUgc2FtZSBwYXJlbnRzL2dyYW5kcGFyZW50cy4KLSAgQ291bGQgYmUgb21pdHRlZCBpZiBpdCBpcyBhbHJlYWR5IGtub3duIHRoYXQgdGhlIHR3byBlbGVtZW50cyB0aGF0IG93biB0aGUKLSAgcGFkcyBhcmUgaW4gdGhlIHNhbWUgYmluLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELUxJTkstQ0hFQ0stVEVNUExBVEUtQ0FQUyI+PC9hPkdTVF9QQURfTElOS19DSEVDS19URU1QTEFURV9DQVBTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkNoZWNrIGlmIHRoZSBwYWRzIGFyZSBjb21wYXRpYmxlIGJ5IHVzaW5nCi0gIHRoZWlyIHRlbXBsYXRlIGNhcHMuIFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NUX1BBRF9MSU5LX0NIRUNLX0NBUFM8L2NvZGU+PC9lbT4KLSwgYnV0Ci0gIHdvdWxkIGJlIHVuc2FmZSBlLmcuIGlmIG9uZSBwYWQgaGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtQU5ZOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19BTlkiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0FQU19BTlk8L2NvZGU+PC9hPi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1MSU5LLUNIRUNLLUNBUFMiPjwvYT5HU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5DaGVjayBpZiB0aGUgcGFkcyBhcmUgY29tcGF0aWJsZSBieSBjb21wYXJpbmcgdGhlCi0gIGNhcHMgcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktY2FwcyIgdGl0bGU9ImdzdF9wYWRfcXVlcnlfY2Fwc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9xdWVyeV9jYXBzKCk8L2NvZGU+PC9hPi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1MSU5LLUNIRUNLLURFRkFVTFQ6Q0FQUyI+PC9hPkdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBkZWZhdWx0IGNoZWNrcyBkb25lIHdoZW4gbGlua2luZwotICBwYWRzIChpLmUuIHRoZSBvbmVzIHVzZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIgdGl0bGU9ImdzdF9wYWRfbGlua8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9saW5rKCk8L2NvZGU+PC9hPikuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbG93UmV0dXJuIj48L2E+PGgzPmVudW0gR3N0Rmxvd1JldHVybjwvaDM+Ci08cD5UaGUgcmVzdWx0IG9mIHBhc3NpbmcgZGF0YSB0byBhIHBhZC48L3A+Ci08cD5Ob3RlIHRoYXQgdGhlIGN1c3RvbSByZXR1cm4gdmFsdWVzIHNob3VsZCBub3QgYmUgZXhwb3NlZCBvdXRzaWRlIG9mIHRoZQotZWxlbWVudCBzY29wZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RGbG93UmV0dXJuLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUZMT1ctQ1VTVE9NLVNVQ0NFU1MtMjpDQVBTIj48L2E+R1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5QcmUtZGVmaW5lZCBjdXN0b20gc3VjY2VzcyBjb2RlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUy0xOkNBUFMiPjwvYT5HU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlByZS1kZWZpbmVkIGN1c3RvbSBzdWNjZXNzIGNvZGUgKGRlZmluZSB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gc3VjY2VzcyBjb2RlIHRvIHRoaXMgdG8gYXZvaWQgY29tcGlsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzKS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUZMT1ctQ1VTVE9NLVNVQ0NFU1M6Q0FQUyI+PC9hPkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkVsZW1lbnRzIGNhbiB1c2UgdmFsdWVzIHN0YXJ0aW5nIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgKGFuZCBoaWdoZXIpIHRvIGRlZmluZSBjdXN0b20gc3VjY2VzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1GTE9XLU9LOkNBUFMiPjwvYT5HU1RfRkxPV19PSzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5EYXRhIHBhc3Npbmcgd2FzIG9rLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRkxPVy1OT1QtTElOS0VEOkNBUFMiPjwvYT5HU1RfRkxPV19OT1RfTElOS0VEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlBhZCBpcyBub3QgbGlua2VkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRkxPVy1GTFVTSElORzpDQVBTIj48L2E+R1NUX0ZMT1dfRkxVU0hJTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UGFkIGlzIGZsdXNoaW5nLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRkxPVy1FT1M6Q0FQUyI+PC9hPkdTVF9GTE9XX0VPUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5QYWQgaXMgRU9TLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRkxPVy1OT1QtTkVHT1RJQVRFRDpDQVBTIj48L2E+R1NUX0ZMT1dfTk9UX05FR09USUFURUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UGFkIGlzIG5vdCBuZWdvdGlhdGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRkxPVy1FUlJPUjpDQVBTIj48L2E+R1NUX0ZMT1dfRVJST1I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U29tZSAoZmF0YWwpIGVycm9yIG9jY3VycmVkLiBFbGVtZW50IGdlbmVyYXRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZXJyb3Igc2hvdWxkIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSB3aXRoIG1vcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1GTE9XLU5PVC1TVVBQT1JURUQ6Q0FQUyI+PC9hPkdTVF9GTE9XX05PVF9TVVBQT1JURUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUZMT1ctQ1VTVE9NLUVSUk9SOkNBUFMiPjwvYT5HU1RfRkxPV19DVVNUT01fRVJST1I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RWxlbWVudHMgY2FuIHVzZSB2YWx1ZXMgc3RhcnRpbmcgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyAoYW5kIGxvd2VyKSB0byBkZWZpbmUgY3VzdG9tIGVycm9yIGNvZGVzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRkxPVy1DVVNUT00tRVJST1ItMTpDQVBTIj48L2E+R1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UHJlLWRlZmluZWQgY3VzdG9tIGVycm9yIGNvZGUgKGRlZmluZSB5b3VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gZXJyb3IgY29kZSB0byB0aGlzIHRvIGF2b2lkIGNvbXBpbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncykuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1GTE9XLUNVU1RPTS1FUlJPUi0yOkNBUFMiPjwvYT5HU1RfRkxPV19DVVNUT01fRVJST1JfMjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5QcmUtZGVmaW5lZCBjdXN0b20gZXJyb3IgY29kZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZE1vZGUiPjwvYT48aDM+ZW51bSBHc3RQYWRNb2RlPC9oMz4KLTxwPlRoZSBzdGF0dXMgb2YgYSBHc3RQYWQuIEFmdGVyIGFjdGl2YXRpbmcgYSBwYWQsIHdoaWNoIHVzdWFsbHkgaGFwcGVucyB3aGVuIHRoZQotcGFyZW50IGVsZW1lbnQgZ29lcyBmcm9tIFJFQURZIHRvIFBBVVNFRCwgdGhlIEdzdFBhZE1vZGUgZGVmaW5lcyBpZiB0aGUKLXBhZCBvcGVyYXRlcyBpbiBwdXNoIG9yIHB1bGwgbW9kZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRNb2RlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1NT0RFLU5PTkU6Q0FQUyI+PC9hPkdTVF9QQURfTU9ERV9OT05FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlBhZCB3aWxsIG5vdCBoYW5kbGUgZGF0YWZsb3c8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1NT0RFLVBVU0g6Q0FQUyI+PC9hPkdTVF9QQURfTU9ERV9QVVNIPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlBhZCBoYW5kbGVzIGRhdGFmbG93IGluIGRvd25zdHJlYW0gcHVzaCBtb2RlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtTU9ERS1QVUxMOkNBUFMiPjwvYT5HU1RfUEFEX01PREVfUFVMTDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5QYWQgaGFuZGxlcyBkYXRhZmxvdyBpbiB1cHN0cmVhbSBwdWxsIG1vZGU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZFByb2JlUmV0dXJuIj48L2E+PGgzPmVudW0gR3N0UGFkUHJvYmVSZXR1cm48L2gzPgotPHA+RGlmZmVyZW50IHJldHVybiB2YWx1ZXMgZm9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayIgdGl0bGU9IkdzdFBhZFByb2JlQ2FsbGJhY2vCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVDYWxsYmFjazwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZFByb2JlUmV0dXJuLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1EUk9QOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX0RST1A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZHJvcCBkYXRhIGluIGRhdGEgcHJvYmVzLiBGb3IgcHVzaCBtb2RlIHRoaXMgbWVhbnMgdGhhdAotICAgICAgIHRoZSBkYXRhIGl0ZW0gaXMgbm90IHNlbnQgZG93bnN0cmVhbS4gRm9yIHB1bGwgbW9kZSwgaXQgbWVhbnMgdGhhdAotICAgICAgIHRoZSBkYXRhIGl0ZW0gaXMgbm90IHBhc3NlZCB1cHN0cmVhbS4gSW4gYm90aCBjYXNlcywgbm8gbW9yZSBwcm9iZXMKLSAgICAgICBhcmUgY2FsbGVkIGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtT0s6Q0FQUyI+PC9hPkdTVF9QQURfUFJPQkVfT0s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bm9ybWFsIHByb2JlIHJldHVybiB2YWx1ZS4gVGhpcyBsZWF2ZXMgdGhlIHByb2JlIGluCi0gICAgICAgcGxhY2UsIGFuZCBkZWZlcnMgZGVjaXNpb25zIGFib3V0IGRyb3BwaW5nIG9yIHBhc3NpbmcgZGF0YSB0byBvdGhlcgotICAgICAgIHByb2JlcywgaWYgYW55LiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgcHJvYmVzLCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKLSAgICAgICBmb3IgdGhlIHByb2JlIHR5cGUgYXBwbGllcyAoYmxvY2sgZm9yIGJsb2NraW5nIHByb2JlcywgYW5kIHBhc3MgZm9yCi0gICAgICAgbm9uLWJsb2NraW5nIHByb2JlcykuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtUkVNT1ZFOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1JFTU9WRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5yZW1vdmUgdGhpcyBwcm9iZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1QQVNTOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1BBU1M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cGFzcyB0aGUgZGF0YSBpdGVtIGluIHRoZSBibG9jayBwcm9iZSBhbmQgYmxvY2sgb24gdGhlCi0gICAgICAgbmV4dCBpdGVtLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELVBST0JFLUhBTkRMRUQ6Q0FQUyI+PC9hPkdTVF9QQURfUFJPQkVfSEFORExFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5EYXRhIGhhcyBiZWVuIGhhbmRsZWQgaW4gdGhlIHByb2JlIGFuZCB3aWxsIG5vdCBiZQotICAgICAgIGZvcndhcmRlZCBmdXJ0aGVyLiBGb3IgZXZlbnRzIGFuZCBidWZmZXJzIHRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3VyIGFzCi0gICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9QQURfUFJPQkVfRFJPUDwvY29kZT48L2VtPgotIChleGNlcHQgdGhhdCBpbiB0aGlzIGNhc2UgeW91IG5lZWQgdG8gdW5yZWYgdGhlIGJ1ZmZlcgotICAgICAgIG9yIGV2ZW50IHlvdXJzZWxmKS4gRm9yIHF1ZXJpZXMgaXQgd2lsbCBhbHNvIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gdG8gdGhlIGNhbGxlci4KLSAgICAgICBUaGUgcHJvYmUgY2FuIGFsc28gbW9kaWZ5IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB2YWx1ZSBieSB1c2luZyB0aGUKLSAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1JTkZPLUZMT1ctUkVUVVJOOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BST0JFX0lORk9fRkxPV19SRVRVUk4oKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfUEFEX1BST0JFX0lORk9fRkxPV19SRVRVUk4oKTwvY29kZT48L2E+IGFjY2Vzc29yLgotICAgICAgIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIHF1ZXJ5IG11c3QgY29udGFpbiB2YWxpZCBlbnRyaWVzLgotICAgICAgIFNpbmNlOiAxLjY8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZFByb2JlVHlwZSI+PC9hPjxoMz5lbnVtIEdzdFBhZFByb2JlVHlwZTwvaDM+Ci08cD5UaGUgZGlmZmVyZW50IHByb2JpbmcgdHlwZXMgdGhhdCBjYW4gb2NjdXIuIFdoZW4gZWl0aGVyIG9uZSBvZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9QQURfUFJPQkVfVFlQRV9JRExFPC9jb2RlPjwvZW0+Ci0gb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSzwvY29kZT48L2VtPgotIGlzIHVzZWQsIHRoZSBwcm9iZSB3aWxsIGJlIGEKLWJsb2NraW5nIHByb2JlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZFByb2JlVHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtVFlQRS1JTlZBTElEOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfSU5WQUxJRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5pbnZhbGlkIHByb2JlIHR5cGU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLUlETEU6Q0FQUyI+PC9hPkdTVF9QQURfUFJPQkVfVFlQRV9JRExFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnByb2JlIGlkbGUgcGFkcyBhbmQgYmxvY2sgd2hpbGUgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELVBST0JFLVRZUEUtQkxPQ0s6Q0FQUyI+PC9hPkdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSBhbmQgYmxvY2sgcGFkczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELVBST0JFLVRZUEUtQlVGRkVSOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnByb2JlIGJ1ZmZlcnM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLUJVRkZFUi1MSVNUOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSX0xJU1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cHJvYmUgYnVmZmVyIGxpc3RzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtVFlQRS1FVkVOVC1ET1dOU1RSRUFNOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSBkb3duc3RyZWFtIGV2ZW50czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELVBST0JFLVRZUEUtRVZFTlQtVVBTVFJFQU06Q0FQUyI+PC9hPkdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9VUFNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSB1cHN0cmVhbSBldmVudHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLUVWRU5ULUZMVVNIOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cHJvYmUgZmx1c2ggZXZlbnRzLiBUaGlzIHByb2JlIGhhcyB0byBiZQotICAgIGV4cGxpY2l0bHkgZW5hYmxlZCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoZQotICAgIEA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU08L2NvZGU+PC9lbT4KLSBvcgotICAgIEA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX1VQU1RSRUFNPC9jb2RlPjwvZW0+Ci0gcHJvYmUgdHlwZXMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtVFlQRS1RVUVSWS1ET1dOU1RSRUFNOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSBkb3duc3RyZWFtIHF1ZXJpZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLVFVRVJZLVVQU1RSRUFNOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfVVBTVFJFQU08L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cHJvYmUgdXBzdHJlYW0gcXVlcmllczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELVBST0JFLVRZUEUtUFVTSDpDQVBTIj48L2E+R1NUX1BBRF9QUk9CRV9UWVBFX1BVU0g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cHJvYmUgcHVzaDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELVBST0JFLVRZUEUtUFVMTDpDQVBTIj48L2E+R1NUX1BBRF9QUk9CRV9UWVBFX1BVTEw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cHJvYmUgcHVsbDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFELVBST0JFLVRZUEUtQkxPQ0tJTkc6Q0FQUyI+PC9hPkdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS0lORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSBhbmQgYmxvY2sgYXQgdGhlIG5leHQgb3Bwb3J0dW5pdHksIGF0IGRhdGEgZmxvdyBvciB3aGVuIGlkbGU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLURBVEEtRE9XTlNUUkVBTTpDQVBTIj48L2E+R1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfRE9XTlNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSBkb3duc3RyZWFtIGRhdGEgKGJ1ZmZlcnMsIGJ1ZmZlciBsaXN0cywgYW5kIGV2ZW50cyk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLURBVEEtVVBTVFJFQU06Q0FQUyI+PC9hPkdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX1VQU1RSRUFNPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnByb2JlIHVwc3RyZWFtIGRhdGEgKGV2ZW50cyk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLURBVEEtQk9USDpDQVBTIj48L2E+R1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfQk9USDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBkYXRhIChidWZmZXJzLCBidWZmZXIgbGlzdHMsIGFuZCBldmVudHMpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtVFlQRS1CTE9DSy1ET1dOU1RSRUFNOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSBhbmQgYmxvY2sgZG93bnN0cmVhbSBkYXRhIChidWZmZXJzLCBidWZmZXIgbGlzdHMsIGFuZCBldmVudHMpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtVFlQRS1CTE9DSy1VUFNUUkVBTTpDQVBTIj48L2E+R1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLX1VQU1RSRUFNPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnByb2JlIGFuZCBibG9jayB1cHN0cmVhbSBkYXRhIChldmVudHMpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtVFlQRS1FVkVOVC1CT1RIOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfQk9USDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBldmVudHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLVFVRVJZLUJPVEg6Q0FQUyI+PC9hPkdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RIPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnByb2JlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIHF1ZXJpZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1QUk9CRS1UWVBFLUFMTC1CT1RIOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfQUxMX0JPVEg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cHJvYmUgdXBzdHJlYW0gZXZlbnRzIGFuZCBxdWVyaWVzIGFuZCBkb3duc3RyZWFtIGJ1ZmZlcnMsIGJ1ZmZlciBsaXN0cywgZXZlbnRzIGFuZCBxdWVyaWVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUFJPQkUtVFlQRS1TQ0hFRFVMSU5HOkNBUFMiPjwvYT5HU1RfUEFEX1BST0JFX1RZUEVfU0NIRURVTElORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wcm9iZSBwdXNoIGFuZCBwdWxsPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRQcm9iZUluZm8iPjwvYT48aDM+c3RydWN0IEdzdFBhZFByb2JlSW5mbzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFBhZFByb2JlSW5mbyB7Ci0gIEdzdFBhZFByb2JlVHlwZSB0eXBlOwotICBndWxvbmcgaWQ7Ci0gIGdwb2ludGVyIGRhdGE7Ci0gIGd1aW50NjQgb2Zmc2V0OwotICBndWludCBzaXplOwotfTsKLTwvcHJlPgotPHA+SW5mbyBwYXNzZWQgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUNhbGxiYWNrIiB0aXRsZT0iR3N0UGFkUHJvYmVDYWxsYmFja8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZUNhbGxiYWNrPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFkUHJvYmVJbmZvLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVUeXBlIiB0aXRsZT0iZW51bSBHc3RQYWRQcm9iZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZVR5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkUHJvYmVJbmZvLnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY3VycmVudCBwcm9iZSB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkUHJvYmVJbmZvLmlkIj48L2E+aWQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpZCBvZiB0aGUgcHJvYmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkUHJvYmVJbmZvLmRhdGEiPjwvYT5kYXRhPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD4gdHlwZSBzcGVjaWZpYyBkYXRhLCBjaGVjayB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLWZpZWxkIHRvIGtub3cgdGhlCi1kYXRhdHlwZS4gIFRoaXMgZmllbGQgY2FuIGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBhZFByb2JlSW5mby5vZmZzZXQiPjwvYT5vZmZzZXQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPm9mZnNldCBvZiBwdWxsIHByb2JlLCB0aGlzIGZpZWxkIGlzIHZhbGlkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLWNvbnRhaW5zCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLVBVTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQURfUFJPQkVfVFlQRV9QVUxMPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFkUHJvYmVJbmZvLnNpemUiPjwvYT5zaXplPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5zaXplIG9mIHB1bGwgcHJvYmUsIHRoaXMgZmllbGQgaXMgdmFsaWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotY29udGFpbnMKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVRZUEUtUFVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBRF9QUk9CRV9UWVBFX1BVTEw8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQYWQucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZC0tY2FwcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNhcHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNhcHPigJ0gICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGFkLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWQtLWRpcmVjdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRpcmVjdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGlyZWN0aW9u4oCdICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogR1NUX1BBRF9VTktOT1dOPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWQtLW9mZnNldCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9mZnNldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcb2Zmc2V04oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBvZmZzZXQgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgcGFkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZC0tdGVtcGxhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0ZW1wbGF0ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGVtcGxhdGXigJ0gICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgR3N0UGFkVGVtcGxhdGUgb2YgdGhpcyBwYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQYWQuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFkLWxpbmtlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxpbmtlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgKnBhZCwKLSAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICAqcGVlciwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YSk8L3ByZT4KLTxwPlNpZ25hbHMgdGhhdCBhIHBhZCBoYXMgYmVlbiBsaW5rZWQgdG8gdGhlIHBlZXIgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhZC1saW5rZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB0aGF0IGVtaXR0ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wZWVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBlZXIgcGFkIHRoYXQgaGFzIGJlZW4gY29ubmVjdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWQtdW5saW5rZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1bmxpbmtlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgKnBhZCwKLSAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICAqcGVlciwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YSk8L3ByZT4KLTxwPlNpZ25hbHMgdGhhdCBhIHBhZCBoYXMgYmVlbiB1bmxpbmtlZCBmcm9tIHRoZSBwZWVyIHBhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWQtdW5saW5rZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB0aGF0IGVtaXR0ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wZWVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBlZXIgcGFkIHRoYXQgaGFzIGJlZW4gZGlzY29ubmVjdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBhZC5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UyN2I4Ni4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NzggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFBhZFRlbXBsYXRlOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiIHRpdGxlPSJHc3RQYXJhbVNwZWMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGFkVGVtcGxhdGUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBhZFRlbXBsYXRlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBhZFRlbXBsYXRlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBhZFRlbXBsYXRlLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RQYWQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLnRvcF9vZl9wYWdlIj48L2E+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9oMj4KLTxwPkdzdFBhZFRlbXBsYXRlIOKAlCBEZXNjcmliZSB0aGUgbWVkaWEgdHlwZSBvZiBhIHBhZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtU1RBVElDLVBBRC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoKSI+R1NUX1NUQVRJQ19QQURfVEVNUExBVEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldCIgdGl0bGU9ImdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldMKgKCkiPmdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzwqAoKSI+Z3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtTkFNRS1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFKCkiPkdTVF9QQURfVEVNUExBVEVfTkFNRV9URU1QTEFURTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTigpIj5HU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtUFJFU0VOQ0U6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UoKSI+R1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtQ0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfQ0FQUygpIj5HU1RfUEFEX1RFTVBMQVRFX0NBUFM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLUlTLUZJWEVEOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVEKCkiPkdTVF9QQURfVEVNUExBVEVfSVNfRklYRUQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1wYWQtdGVtcGxhdGUtbmV3IiB0aXRsZT0iZ3N0X3BhZF90ZW1wbGF0ZV9uZXfCoCgpIj5nc3RfcGFkX3RlbXBsYXRlX25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3QtcGFkLXRlbXBsYXRlLWdldC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2Fwc8KgKCkiPmdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tY2FwcyIgdGl0bGU9IlRoZSDigJxjYXBz4oCdIHByb3BlcnR5Ij5jYXBzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1kaXJlY3Rpb24iIHRpdGxlPSJUaGUg4oCcZGlyZWN0aW9u4oCdIHByb3BlcnR5Ij5kaXJlY3Rpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tbmFtZS10ZW1wbGF0ZSIgdGl0bGU9IlRoZSDigJxuYW1lLXRlbXBsYXRl4oCdIHByb3BlcnR5Ij5uYW1lLXRlbXBsYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRQcmVzZW5jZSIgdGl0bGU9ImVudW0gR3N0UGFkUHJlc2VuY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcmVzZW5jZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLXByZXNlbmNlIiB0aXRsZT0iVGhlIOKAnHByZXNlbmNl4oCdIHByb3BlcnR5Ij5wcmVzZW5jZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLXBhZC1jcmVhdGVkIiB0aXRsZT0iVGhlIOKAnHBhZC1jcmVhdGVk4oCdIHNpZ25hbCI+cGFkLWNyZWF0ZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYWRUZW1wbGF0ZUZsYWdzIj5Hc3RQYWRUZW1wbGF0ZUZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkUHJlc2VuY2UiIHRpdGxlPSJlbnVtIEdzdFBhZFByZXNlbmNlIj5Hc3RQYWRQcmVzZW5jZTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RQYWRUZW1wbGF0ZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlBhZHRlbXBsYXRlcyBkZXNjcmliZSB0aGUgcG9zc2libGUgbWVkaWEgdHlwZXMgYSBwYWQgb3IgYW4gZWxlbWVudGZhY3RvcnkgY2FuCi1oYW5kbGUuIFRoaXMgYWxsb3dzIGZvciBib3RoIGluc3BlY3Rpb24gb2YgaGFuZGxlZCB0eXBlcyBiZWZvcmUgbG9hZGluZyB0aGUKLWVsZW1lbnQgcGx1Z2luIGFzIHdlbGwgYXMgaWRlbnRpZnlpbmcgcGFkcyBvbiBlbGVtZW50cyB0aGF0IGFyZSBub3QgeWV0Ci1jcmVhdGVkIChyZXF1ZXN0IG9yIHNvbWV0aW1lcyBwYWRzKS48L3A+Ci08cD5QYWQgYW5kIFBhZFRlbXBsYXRlcyBoYXZlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGF0dGFjaGVkIHRvIGl0IHRvIGRlc2NyaWJlIHRoZSBtZWRpYSB0eXBlCi10aGV5IGFyZSBjYXBhYmxlIG9mIGRlYWxpbmcgd2l0aC4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMoKTwvY29kZT48L2E+IG9yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLUNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX0NBUFMoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfUEFEX1RFTVBMQVRFX0NBUFMoKTwvY29kZT48L2E+IGFyZSB1c2VkIHRvIGdldCB0aGUgY2FwcyBvZiBhIHBhZHRlbXBsYXRlLiBJdCdzIG5vdAotcG9zc2libGUgdG8gbW9kaWZ5IHRoZSBjYXBzIG9mIGEgcGFkdGVtcGxhdGUgYWZ0ZXIgY3JlYXRpb24uPC9wPgotPHA+UGFkVGVtcGxhdGVzIGhhdmUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRQcmVzZW5jZSIgdGl0bGU9ImVudW0gR3N0UGFkUHJlc2VuY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcmVzZW5jZTwvc3Bhbj48L2E+IHByb3BlcnR5IHdoaWNoIGlkZW50aWZpZXMgdGhlIGxpZmV0aW1lCi1vZiB0aGUgcGFkIGFuZCB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLVBSRVNFTkNFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSgpPC9jb2RlPjwvYT4uIEFsc28KLXRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTigpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1OQU1FLVRFTVBMQVRFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUoKTwvY29kZT48L2E+IGlzIGltcG9ydGFudCBmb3IgR1NUX1BBRF9SRVFVRVNUIHBhZHMKLWJlY2F1c2UgaXQgaGFzIHRvIGJlIHVzZWQgYXMgdGhlIG5hbWUgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKTwvY29kZT48L2E+Ci1jYWxsIHRvIGluc3RhbnRpYXRlIGEgcGFkIGZyb20gdGhpcyB0ZW1wbGF0ZS48L3A+Ci08cD5QYWR0ZW1wbGF0ZXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3QtcGFkLXRlbXBsYXRlLW5ldyIgdGl0bGU9ImdzdF9wYWRfdGVtcGxhdGVfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3RlbXBsYXRlX25ldygpPC9jb2RlPjwvYT4gb3Igd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXN0YXRpYy1wYWQtdGVtcGxhdGUtZ2V0IiB0aXRsZT0iZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoKTwvY29kZT48L2E+LCB3aGljaCBjcmVhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gZnJvbSBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgZmlsbGVkIHdpdGggdGhlCi1jb252ZW5pZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1TVEFUSUMtUEFELVRFTVBMQVRFOkNBUFMiIHRpdGxlPSJHU1RfU1RBVElDX1BBRF9URU1QTEFURSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCk8L2NvZGU+PC9hPiBtYWNyby48L3A+Ci08cD5BIHBhZHRlbXBsYXRlIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHBhZCAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSgpPC9jb2RlPjwvYT4KLW9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXN0YXRpYy10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSgpPC9jb2RlPjwvYT4pIG9yIHRvIGFkZCB0byBhbiBlbGVtZW50IGNsYXNzCi0oc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXN0YXRpYy1wYWQtdGVtcGxhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUoKTwvY29kZT48L2E+KS48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGNvZGUgZXhhbXBsZSBzaG93cyB0aGUgY29kZSB0byBjcmVhdGUgYSBwYWQgZnJvbSBhIHBhZHRlbXBsYXRlLjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3PC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBteV90ZW1wbGF0ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtU1RBVElDLVBBRC1URU1QTEFURTpDQVBTIj5HU1RfU1RBVElDX1BBRF9URU1QTEFURTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPgotICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtzaW5rJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiAgICAgICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8gdGhlIG5hbWUgb2YgdGhlIHBhZDwvc3Bhbj4KLSAgR1NUX1BBRF9TSU5LPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+ICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQ8L3NwYW4+Ci0gIEdTVF9QQURfQUxXQVlTPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+ICA8c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8gd2hlbiB0aGlzIHBhZCB3aWxsIGJlIHByZXNlbnQ8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUyI+R1NUX1NUQVRJQ19DQVBTPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ICAgICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGFkdGVtcGxhdGU8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW8veC1yYXcsICZxdW90Ozwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2NoYW5uZWxzID0gKGludCkgWyAxLCA2IF0mcXVvdDs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm15X21ldGhvZDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnZvaWQ8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgR3N0UGFkIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnBhZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBwYWQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1uZXctZnJvbS1zdGF0aWMtdGVtcGxhdGUiPmdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPigmYW1wOzwvc3Bhbj5teV90ZW1wbGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtzaW5rJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHlvdSBob3cgdG8gYWRkIHRoZSBwYWR0ZW1wbGF0ZSB0byBhbgotZWxlbWVudCBjbGFzcywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgaW4gdGhlIGNsYXNzX2luaXQgb2YgdGhlIGNsYXNzOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnN0YXRpYyB2b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5teV9lbGVtZW50X2NsYXNzX2luaXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPkdzdE15RWxlbWVudENsYXNzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmtsYXNzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgR3N0RWxlbWVudENsYXNzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmdzdGVsZW1lbnRfY2xhc3MgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0VMRU1FTlRfQ0xBU1M8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmtsYXNzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1zdGF0aWMtcGFkLXRlbXBsYXRlIj5nc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmdzdGVsZW1lbnRfY2xhc3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5teV90ZW1wbGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVNUQVRJQy1QQUQtVEVNUExBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfU1RBVElDX1BBRF9URU1QTEFURSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKHBhZG5hbWUsIGRpciwgcHJlcywgY2Fwcyk8L3ByZT4KLTxwPkNvbnZlbmllbmNlIG1hY3JvIHRvIGZpbGwgdGhlIHZhbHVlcyBvZiBhIEdzdFN0YXRpY1BhZFRlbXBsYXRlCi1zdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVNUQVRJQy1QQUQtVEVNUExBVEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIHRlbXBsYXRlIG9mIHRoZSBwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGlyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIEdzdFBhZERpcmVjdGlvbiBvZiB0aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgR3N0UGFkUHJlc2VuY2Ugb2YgdGhlIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIEdzdFN0YXRpY0NhcHMgb2YgdGhlIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQiPjwvYT48aDM+Z3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnBhZF90ZW1wbGF0ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db252ZXJ0cyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiBpbnRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0YXRpYy1wYWQtdGVtcGxhdGUtZ2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRfdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RhdGljIHBhZCB0ZW1wbGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyI+PC9hPjxoMz5nc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2Fwc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgc3RhdGljIHBhZCB0ZW1wbGF0ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIiB0aXRsZT0ic3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiB0byBnZXQgY2FwYWJpbGl0aWVzIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldC1jYXBzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG9mIHRoZSBzdGF0aWMgcGFkIHRlbXBsYXRlLgotVW5yZWYgYWZ0ZXIgdXNhZ2UuIFNpbmNlIHRoZSBjb3JlIGhvbGRzIGFuIGFkZGl0aW9uYWwKLXJlZiB0byB0aGUgcmV0dXJuZWQgY2FwcywgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPgotb24gdGhlIHJldHVybmVkIGNhcHMgdG8gbW9kaWZ5IGl0LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVRFTVBMQVRFLU5BTUUtVEVNUExBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUodGVtcGwpwqAoKChHc3RQYWRUZW1wbGF0ZSAqKSh0ZW1wbCkpLSZndDtuYW1lX3RlbXBsYXRlKQotPC9wcmU+Ci08cD5HZXQgdGhlIG5hbWV0ZW1wbGF0ZSBvZiB0aGUgcGFkdGVtcGxhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBBRC1URU1QTEFURS1OQU1FLVRFTVBMQVRFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50ZW1wbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0ZW1wbGF0ZSB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBRC1URU1QTEFURS1ESVJFQ1RJT046Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OKHRlbXBsKcKgKCgoR3N0UGFkVGVtcGxhdGUgKikodGVtcGwpKS0mZ3Q7ZGlyZWN0aW9uKQotPC9wcmU+Ci08cD5HZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IG9mIHRoZSBwYWR0ZW1wbGF0ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUEFELVRFTVBMQVRFLURJUkVDVElPTi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGVtcGxhdGUgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtVEVNUExBVEUtUFJFU0VOQ0U6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSh0ZW1wbCnCoCgoKEdzdFBhZFRlbXBsYXRlICopKHRlbXBsKSktJmd0O3ByZXNlbmNlKQotPC9wcmU+Ci08cD5HZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIiB0aXRsZT0iZW51bSBHc3RQYWRQcmVzZW5jZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByZXNlbmNlPC9zcGFuPjwvYT4gb2YgdGhlIHBhZHRlbXBsYXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtVEVNUExBVEUtUFJFU0VOQ0UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlbXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRlbXBsYXRlIHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFELVRFTVBMQVRFLUNBUFMiPjwvYT48aDM+R1NUX1BBRF9URU1QTEFURV9DQVBTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9DQVBTKHRlbXBsKQkJKCgoR3N0UGFkVGVtcGxhdGUgKikodGVtcGwpKS0mZ3Q7Y2FwcykKLTwvcHJlPgotPHA+R2V0IGEgaGFuZGxlIHRvIHRoZSBwYWR0ZW1wbGF0ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtVEVNUExBVEUtQ0FQUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGVtcGxhdGUgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQUQtVEVNUExBVEUtSVMtRklYRUQ6Q0FQUyI+PC9hPjxoMz5HU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVEKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9JU19GSVhFRCh0ZW1wbCnCoChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUKHRlbXBsLCBHU1RfUEFEX1RFTVBMQVRFX0ZJWEVEKSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBhZHRlbXBsYXRlIGFyZSBmaXhlZDwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QQUQtVEVNUExBVEUtSVMtRklYRUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlbXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRlbXBsYXRlIHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXRlbXBsYXRlLW5ldyI+PC9hPjxoMz5nc3RfcGFkX3RlbXBsYXRlX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPsKgKgotZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZV90ZW1wbGF0ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkRGlyZWN0aW9uPC9zcGFuPjwvYT4gZGlyZWN0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRQcmVzZW5jZSIgdGl0bGU9ImVudW0gR3N0UGFkUHJlc2VuY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcmVzZW5jZTwvc3Bhbj48L2E+IHByZXNlbmNlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IHBhZCB0ZW1wbGF0ZSB3aXRoIGEgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHRlbXBsYXRlCi1hbmQgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYWQtdGVtcGxhdGUtbmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWVfdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSB0ZW1wbGF0ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGlyZWN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+IG9mIHRoZSB0ZW1wbGF0ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJlc2VuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkUHJlc2VuY2UiIHRpdGxlPSJlbnVtIEdzdFBhZFByZXNlbmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJlc2VuY2U8L3NwYW4+PC9hPiBvZiB0aGUgcGFkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc2V0IGZvciB0aGUgdGVtcGxhdGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC10ZW1wbGF0ZS1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iQWxpYXMgZm9yIHRyYW5zZmVyIG5vbmUsIHVzZWQgZm9yIG9iamVjdHMgd2l0aCBmbG9hdGluZyByZWZzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZsb2F0aW5nPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFkLXRlbXBsYXRlLWdldC1jYXBzIj48L2E+PGgzPmdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdGVtcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwYWQgdGVtcGxhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IHRvIGdldCBjYXBhYmlsaXRpZXMgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2Fwcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvZiB0aGUgcGFkIHRlbXBsYXRlLgotVW5yZWYgYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0YXRpY1BhZFRlbXBsYXRlIj48L2E+PGgzPnN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFN0YXRpY1BhZFRlbXBsYXRlIHsKLSAgY29uc3QgZ2NoYXIgICAgICpuYW1lX3RlbXBsYXRlOwotICBHc3RQYWREaXJlY3Rpb24gIGRpcmVjdGlvbjsKLSAgR3N0UGFkUHJlc2VuY2UgICBwcmVzZW5jZTsKLSAgR3N0U3RhdGljQ2FwcyAgICBzdGF0aWNfY2FwczsKLX07Ci08L3ByZT4KLTxwPlN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RhdGljUGFkVGVtcGxhdGUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPmNvbnN0wqA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFN0YXRpY1BhZFRlbXBsYXRlLm5hbWUtdGVtcGxhdGUiPjwvYT5uYW1lX3RlbXBsYXRlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRGlyZWN0aW9uIiB0aXRsZT0iZW51bSBHc3RQYWREaXJlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWREaXJlY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RhdGljUGFkVGVtcGxhdGUuZGlyZWN0aW9uIj48L2E+ZGlyZWN0aW9uPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGlyZWN0aW9uIG9mIHRoZSB0ZW1wbGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIiB0aXRsZT0iZW51bSBHc3RQYWRQcmVzZW5jZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByZXNlbmNlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFN0YXRpY1BhZFRlbXBsYXRlLnByZXNlbmNlIj48L2E+cHJlc2VuY2U8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwcmVzZW5jZSBvZiB0aGUgdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdFN0YXRpY0NhcHMiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljQ2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY0NhcHM8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RhdGljUGFkVGVtcGxhdGUuc3RhdGljLWNhcHMiPjwvYT5zdGF0aWNfY2FwczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNhcHMgb2YgdGhlIHRlbXBsYXRlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RQYWRUZW1wbGF0ZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFBhZFRlbXBsYXRlOzwvcHJlPgotPHA+VGhlIHBhZHRlbXBsYXRlIG9iamVjdC48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RQYWRUZW1wbGF0ZUZsYWdzPC9oMz4KLTxwPkZsYWdzIGZvciB0aGUgcGFkdGVtcGxhdGU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZUZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtVEVNUExBVEUtRkxBRy1MQVNUOkNBUFMiPjwvYT5HU1RfUEFEX1RFTVBMQVRFX0ZMQUdfTEFTVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5maXJzdCBmbGFnIHRoYXQgY2FuIGJlIHVzZWQgYnkgc3ViY2xhc3Nlcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRQcmVzZW5jZSI+PC9hPjxoMz5lbnVtIEdzdFBhZFByZXNlbmNlPC9oMz4KLTxwPkluZGljYXRlcyB3aGVuIHRoaXMgcGFkIHdpbGwgYmVjb21lIGF2YWlsYWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRQcmVzZW5jZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtQUxXQVlTOkNBUFMiPjwvYT5HU1RfUEFEX0FMV0FZUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgcGFkIGlzIGFsd2F5cyBhdmFpbGFibGU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBRC1TT01FVElNRVM6Q0FQUyI+PC9hPkdTVF9QQURfU09NRVRJTUVTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBwYWQgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGRlcGVuZGluZyBvbiB0aGUgbWVkaWEgc3RyZWFtPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQUQtUkVRVUVTVDpDQVBTIj48L2E+R1NUX1BBRF9SRVFVRVNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBwYWQgaXMgb25seSBhdmFpbGFibGUgb24gcmVxdWVzdCB3aXRoCi0gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZXF1ZXN0LXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlcXVlc3RfcGFkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCgpPC9jb2RlPjwvYT4uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBhZFRlbXBsYXRlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS0tY2FwcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNhcHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNhcHPigJ0gICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGFkIGRlc2NyaWJlZCBieSB0aGUgcGFkIHRlbXBsYXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUtLWRpcmVjdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRpcmVjdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGlyZWN0aW9u4oCdICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iIHRpdGxlPSJlbnVtIEdzdFBhZERpcmVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZERpcmVjdGlvbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQgZGVzY3JpYmVkIGJ5IHRoZSBwYWQgdGVtcGxhdGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogR1NUX1BBRF9VTktOT1dOPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS0tbmFtZS10ZW1wbGF0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5hbWUtdGVtcGxhdGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5hbWUtdGVtcGxhdGXigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIG5hbWUgdGVtcGxhdGUgb2YgdGhlIHBhZCB0ZW1wbGF0ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS0tcHJlc2VuY2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcmVzZW5jZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJlc2VuY2XigJ0gICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFByZXNlbmNlIiB0aXRsZT0iZW51bSBHc3RQYWRQcmVzZW5jZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByZXNlbmNlPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gdGhlIHBhZCBkZXNjcmliZWQgYnkgdGhlIHBhZCB0ZW1wbGF0ZSB3aWxsIGJlY29tZSBhdmFpbGFibGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogR1NUX1BBRF9BTFdBWVM8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUtcGFkLWNyZWF0ZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwYWQtY3JlYXRlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqcGFkX3RlbXBsYXRlLAotICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gICAgICAgICAqcGFkLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlRoaXMgc2lnbmFsIGlzIGZpcmVkIHdoZW4gYW4gZWxlbWVudCBjcmVhdGVzIGEgcGFkIGZyb20gdGhpcyB0ZW1wbGF0ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYWRUZW1wbGF0ZS1wYWQtY3JlYXRlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRfdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYWQgdGhhdCB3YXMgY3JlYXRlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGFkVGVtcGxhdGUuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFBpcGVsaW5lLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFBpcGVsaW5lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNmJmZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RQaXBlbGluZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODA3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RQaXBlbGluZTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQaXBlbGluZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGlwZWxpbmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGlwZWxpbmUuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGlwZWxpbmUucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0UGlwZWxpbmUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RQaXBlbGluZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFBpcGVsaW5lPC9zcGFuPjwvaDI+Ci08cD5Hc3RQaXBlbGluZSDigJQgVG9wLWxldmVsIGJpbiB3aXRoIGNsb2NraW5nIGFuZCBidXMgbWFuYWdlbWVudAotICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQaXBlbGluZS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLW5ldyIgdGl0bGU9ImdzdF9waXBlbGluZV9uZXfCoCgpIj5nc3RfcGlwZWxpbmVfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYnVzIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9idXPCoCgpIj5nc3RfcGlwZWxpbmVfZ2V0X2J1czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWNsb2NrIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9jbG9ja8KgKCkiPmdzdF9waXBlbGluZV9zZXRfY2xvY2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1waXBlbGluZS1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV9nZXRfcGlwZWxpbmVfY2xvY2vCoCgpIj5nc3RfcGlwZWxpbmVfZ2V0X3BpcGVsaW5lX2Nsb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtY2xvY2siIHRpdGxlPSJnc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrwqAoKSI+Z3N0X3BpcGVsaW5lX2dldF9jbG9jazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV91c2VfY2xvY2vCoCgpIj5nc3RfcGlwZWxpbmVfdXNlX2Nsb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtYXV0by1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV9hdXRvX2Nsb2NrwqAoKSI+Z3N0X3BpcGVsaW5lX2F1dG9fY2xvY2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMiIHRpdGxlPSJnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzwqAoKSI+Z3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWF1dG8tZmx1c2gtYnVzIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1c8KgKCkiPmdzdF9waXBlbGluZV9nZXRfYXV0b19mbHVzaF9idXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtZGVsYXkiIHRpdGxlPSJnc3RfcGlwZWxpbmVfc2V0X2RlbGF5wqAoKSI+Z3N0X3BpcGVsaW5lX3NldF9kZWxheTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWRlbGF5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9kZWxhecKgKCkiPmdzdF9waXBlbGluZV9nZXRfZGVsYXk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfbGF0ZW5jecKgKCkiPmdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWxhdGVuY3kiIHRpdGxlPSJnc3RfcGlwZWxpbmVfZ2V0X2xhdGVuY3nCoCgpIj5nc3RfcGlwZWxpbmVfZ2V0X2xhdGVuY3k8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQaXBlbGluZS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUtLWF1dG8tZmx1c2gtYnVzIiB0aXRsZT0iVGhlIOKAnGF1dG8tZmx1c2gtYnVz4oCdIHByb3BlcnR5Ij5hdXRvLWZsdXNoLWJ1czwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLS1kZWxheSIgdGl0bGU9IlRoZSDigJxkZWxheeKAnSBwcm9wZXJ0eSI+ZGVsYXk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS0tbGF0ZW5jeSIgdGl0bGU9IlRoZSDigJxsYXRlbmN54oCdIHByb3BlcnR5Ij5sYXRlbmN5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQaXBlbGluZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBpcGVsaW5lRmxhZ3MiPkdzdFBpcGVsaW5lRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGlwZWxpbmUub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFBpcGVsaW5lCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGlwZWxpbmUuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0UGlwZWxpbmUgaW1wbGVtZW50cwotIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBpcGVsaW5lLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBpcGVsaW5lLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gaXMgYSBzcGVjaWFsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+IHVzZWQgYXMgdGhlIHRvcGxldmVsIGNvbnRhaW5lciBmb3IKLXRoZSBmaWx0ZXIgZ3JhcGguIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiB3aWxsIG1hbmFnZSB0aGUgc2VsZWN0aW9uIGFuZAotZGlzdHJpYnV0aW9uIG9mIGEgZ2xvYmFsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGFzIHdlbGwgYXMgcHJvdmlkZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIHRoZQotYXBwbGljYXRpb24uPC9wPgotPHA+Z3N0X3BpcGVsaW5lX25ldygpIGlzIHVzZWQgdG8gY3JlYXRlIGEgcGlwZWxpbmUuIHdoZW4geW91IGFyZSBkb25lIHdpdGgKLXRoZSBwaXBlbGluZSwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gdG8gZnJlZSBpdHMgcmVzb3VyY2VzIGluY2x1ZGluZyBhbGwKLWFkZGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IG9iamVjdHMgKGlmIG5vdCBvdGhlcndpc2UgcmVmZXJlbmNlZCkuPC9wPgotPHA+RWxlbWVudHMgYXJlIGFkZGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5lIHVzaW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPgotbWV0aG9kcyBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2FkZCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX3JlbW92ZSgpPC9jb2RlPjwvYT4gKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPikuPC9wPgotPHA+QmVmb3JlIGNoYW5naW5nIHRoZSBzdGF0ZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPikgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPgotY2FuIGJlIHJldHJpZXZlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYnVzIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9idXPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9waXBlbGluZV9nZXRfYnVzKCk8L2NvZGU+PC9hPi4gVGhpcyBidXMgY2FuIHRoZW4gYmUKLXVzZWQgdG8gcmVjZWl2ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBmcm9tIHRoZSBlbGVtZW50cyBpbiB0aGUgcGlwZWxpbmUuPC9wPgotPHA+QnkgZGVmYXVsdCwgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiB3aWxsIGF1dG9tYXRpY2FsbHkgZmx1c2ggdGhlIHBlbmRpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4KLW1lc3NhZ2VzIHdoZW4gZ29pbmcgdG8gdGhlIE5VTEwgc3RhdGUgdG8gZW5zdXJlIHRoYXQgbm8gY2lyY3VsYXIKLXJlZmVyZW5jZXMgZXhpc3Qgd2hlbiBubyBtZXNzYWdlcyBhcmUgcmVhZCBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPi4gVGhpcwotYmVoYXZpb3VyIGNhbiBiZSBjaGFuZ2VkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1hdXRvLWZsdXNoLWJ1cyIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMoKTwvY29kZT48L2E+LjwvcD4KLTxwPldoZW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IHBlcmZvcm1zIHRoZSBQQVVTRUQgdG8gUExBWUlORyBzdGF0ZSBjaGFuZ2UgaXQgd2lsbAotc2VsZWN0IGEgY2xvY2sgZm9yIHRoZSBlbGVtZW50cy4gVGhlIGNsb2NrIHNlbGVjdGlvbiBhbGdvcml0aG0gd2lsbCBieQotZGVmYXVsdCBzZWxlY3QgYSBjbG9jayBwcm92aWRlZCBieSBhbiBlbGVtZW50IHRoYXQgaXMgbW9zdCB1cHN0cmVhbQotKGNsb3Nlc3QgdG8gdGhlIHNvdXJjZSkuIEZvciBsaXZlIHBpcGVsaW5lcyAob25lcyB0aGF0IHJldHVybgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLU5PLVBSRVJPTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDwvc3Bhbj48L2E+IGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZXRfc3RhdGUoKTwvY29kZT48L2E+IGNhbGwpIHRoaXMKLXdpbGwgc2VsZWN0IHRoZSBjbG9jayBwcm92aWRlZCBieSB0aGUgbGl2ZSBzb3VyY2UuIEZvciBub3JtYWwgcGlwZWxpbmVzCi10aGlzIHdpbGwgc2VsZWN0IGEgY2xvY2sgcHJvdmlkZWQgYnkgdGhlIHNpbmtzIChtb3N0IGxpa2VseSB0aGUgYXVkaW8KLXNpbmspLiBJZiBubyBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2ssIGEgZGVmYXVsdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3lzdGVtQ2xvY2s8L3NwYW4+PC9hPiBpcyB1c2VkLjwvcD4KLTxwPlRoZSBjbG9jayBzZWxlY3Rpb24gY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV91c2VfY2xvY2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9waXBlbGluZV91c2VfY2xvY2soKTwvY29kZT48L2E+Ci1tZXRob2QsIHdoaWNoIHdpbGwgZW5mb3JjZSBhIGdpdmVuIGNsb2NrIG9uIHRoZSBwaXBlbGluZS4gV2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWF1dG8tY2xvY2siIHRpdGxlPSJnc3RfcGlwZWxpbmVfYXV0b19jbG9ja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX2F1dG9fY2xvY2soKTwvY29kZT48L2E+IHRoZSBkZWZhdWx0IGNsb2NrIHNlbGVjdGlvbiBhbGdvcml0aG0gY2FuIGJlCi1yZXN0b3JlZC48L3A+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+IG1haW50YWlucyBhIHJ1bm5pbmcgdGltZSBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgcnVubmluZwotdGltZSBpcyBkZWZpbmVkIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBhbmQKLXRoZSBiYXNlIHRpbWUuIFdoZW4gdGhlIHBpcGVsaW5lIGdvZXMgdG8gUkVBRFkgb3IgYSBmbHVzaGluZyBzZWVrIGlzCi1wZXJmb3JtZWQgb24gaXQsIHRoZSBydW5uaW5nIHRpbWUgaXMgcmVzZXQgdG8gMC4gV2hlbiB0aGUgcGlwZWxpbmUgaXMKLXNldCBmcm9tIFBMQVlJTkcgdG8gUEFVU0VELCB0aGUgY3VycmVudCBjbG9jayB0aW1lIGlzIHNhbXBsZWQgYW5kIHVzZWQgdG8KLWNvbmZpZ3VyZSB0aGUgYmFzZSB0aW1lIGZvciB0aGUgZWxlbWVudHMgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0Ci10byBQTEFZSU5HIGFnYWluLiBUaGUgZWZmZWN0IGlzIHRoYXQgdGhlIHJ1bm5pbmcgdGltZSAoYXMgdGhlIGRpZmZlcmVuY2UKLWJldHdlZW4gdGhlIGNsb2NrIHRpbWUgYW5kIHRoZSBiYXNlIHRpbWUpIHdpbGwgY291bnQgaG93IG11Y2ggdGltZSB3YXMgc3BlbnQKLWluIHRoZSBQTEFZSU5HIHN0YXRlLiBUaGlzIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGFydC10aW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lKCk8L2NvZGU+PC9hPiBtZXRob2QuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQaXBlbGluZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLW5ldyI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi1nc3RfcGlwZWxpbmVfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IHBpcGVsaW5lIHdpdGggdGhlIGdpdmVuIG5hbWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBuYW1lIG9mIG5ldyBwaXBlbGluZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gbmV3bHkgY3JlYXRlZCBHc3RQaXBlbGluZTwvcD4KLTxwPk1UIHNhZmUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkFsaWFzIGZvciB0cmFuc2ZlciBub25lLCB1c2VkIGZvciBvYmplY3RzIHdpdGggZmxvYXRpbmcgcmVmcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1idXMiPjwvYT48aDM+Z3N0X3BpcGVsaW5lX2dldF9idXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVzPC9zcGFuPjwvYT7CoCoKLWdzdF9waXBlbGluZV9nZXRfYnVzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPgotLiBUaGUgYnVzIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcmVjZWl2ZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gcGFja2V0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtZ2V0LWJ1cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGlwZWxpbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1idXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+LCB1bnJlZiBhZnRlciB1c2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtc2V0LWNsb2NrIj48L2E+PGgzPmdzdF9waXBlbGluZV9zZXRfY2xvY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9waXBlbGluZV9zZXRfY2xvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiAqcGlwZWxpbmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgY2xvY2sgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPgotLiBUaGUgY2xvY2sgd2lsbCBiZSBkaXN0cmlidXRlZAotdG8gYWxsIHRoZSBlbGVtZW50cyBtYW5hZ2VkIGJ5IHRoZSBwaXBlbGluZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtc2V0LWNsb2NrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBpcGVsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgY2xvY2sgdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1zZXQtY2xvY2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNsb2NrIGNvdWxkIGJlIHNldCBvbiB0aGUgcGlwZWxpbmUuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmCi1zb21lIGVsZW1lbnQgZGlkIG5vdCBhY2NlcHQgdGhlIGNsb2NrLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1nZXQtcGlwZWxpbmUtY2xvY2siPjwvYT48aDM+Z3N0X3BpcGVsaW5lX2dldF9waXBlbGluZV9jbG9ja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKgotZ3N0X3BpcGVsaW5lX2dldF9waXBlbGluZV9jbG9jayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBjdXJyZW50IGNsb2NrIHVzZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBpcGVsaW5lPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VW5saWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfY2xvY2soKTwvY29kZT48L2E+LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiBhCi1jbG9jaywgZXZlbiBpZiB0aGUgcGlwZWxpbmUgaXMgbm90IGluIHRoZSBQTEFZSU5HIHN0YXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1nZXQtcGlwZWxpbmUtY2xvY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBpcGVsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1nZXQtcGlwZWxpbmUtY2xvY2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+LCB1bnJlZiBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1jbG9jayI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi1nc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGN1cnJlbnQgY2xvY2sgdXNlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4KLS4gVXNlcnMgb2Ygb2JqZWN0Ci1vcmllbnRlZCBsYW5ndWFnZXMgc2hvdWxkIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LXBpcGVsaW5lLWNsb2NrIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9waXBlbGluZV9jbG9ja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX2dldF9waXBlbGluZV9jbG9jaygpPC9jb2RlPjwvYT4KLXRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9nZXRfY2xvY2soKTwvY29kZT48L2E+IHdoaWNoIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvci48L3A+Ci08cD5Vbmxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY2xvY2siIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfY2xvY2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2dldF9jbG9jaygpPC9jb2RlPjwvYT4sIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIGEKLWNsb2NrLCBldmVuIGlmIHRoZSBwaXBlbGluZSBpcyBub3QgaW4gdGhlIFBMQVlJTkcgc3RhdGUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1jbG9jay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGlwZWxpbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1jbG9jay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4sIHVucmVmIGFmdGVyIHVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtdXNlLWNsb2NrIj48L2E+PGgzPmdzdF9waXBlbGluZV91c2VfY2xvY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGlwZWxpbmVfdXNlX2Nsb2NrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpjbG9jazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Gb3JjZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4KLSB0byB1c2UgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbG9jazwvY29kZT48L2VtPgotLiBUaGUgcGlwZWxpbmUgd2lsbAotYWx3YXlzIHVzZSB0aGUgZ2l2ZW4gY2xvY2sgZXZlbiBpZiBuZXcgY2xvY2sgcHJvdmlkZXJzIGFyZSBhZGRlZAotdG8gdGhpcyBwaXBlbGluZS48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9lbT4KLSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gYWxsIGNsb2NraW5nIHdpbGwgYmUgZGlzYWJsZWQgd2hpY2ggd2lsbCBtYWtlCi10aGUgcGlwZWxpbmUgcnVuIGFzIGZhc3QgYXMgcG9zc2libGUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtdXNlLWNsb2NrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBpcGVsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgY2xvY2sgdG8gdXNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtYXV0by1jbG9jayI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfYXV0b19jbG9ja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9waXBlbGluZV9hdXRvX2Nsb2NrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gKnBpcGVsaW5lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxldCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4KLSBzZWxlY3QgYSBjbG9jayBhdXRvbWF0aWNhbGx5LiBUaGlzIGlzIHRoZSBkZWZhdWx0Ci1iZWhhdmlvdXIuPC9wPgotPHA+VXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IHByZXZpb3VzIGZvcmNlZCBhIGZpeGVkIGNsb2NrIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS11c2UtY2xvY2siIHRpdGxlPSJnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGlwZWxpbmVfdXNlX2Nsb2NrKCk8L2NvZGU+PC9hPiBhbmQgd2FudCB0byByZXN0b3JlIHRoZSBkZWZhdWx0Ci1waXBlbGluZSBjbG9jayBzZWxlY3Rpb24gYWxnb3JpdGhtLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWF1dG8tY2xvY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBpcGVsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLXNldC1hdXRvLWZsdXNoLWJ1cyI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhdXRvX2ZsdXNoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVzdWFsbHksIHdoZW4gYSBwaXBlbGluZSBnb2VzIGZyb20gUkVBRFkgdG8gTlVMTCBzdGF0ZSwgaXQgYXV0b21hdGljYWxseQotZmx1c2hlcyBhbGwgcGVuZGluZyBtZXNzYWdlcyBvbiB0aGUgYnVzLCB3aGljaCBpcyBkb25lIGZvciByZWZjb3VudGluZwotcHVycG9zZXMsIHRvIGJyZWFrIGNpcmN1bGFyIHJlZmVyZW5jZXMuPC9wPgotPHA+VGhpcyBtZWFucyB0aGF0IGFwcGxpY2F0aW9ucyB0aGF0IHVwZGF0ZSBzdGF0ZSB1c2luZyAoYXN5bmMpIGJ1cyBtZXNzYWdlcwotKGUuZy4gZG8gY2VydGFpbiB0aGluZ3Mgd2hlbiBhIHBpcGVsaW5lIGdvZXMgZnJvbSBQQVVTRUQgdG8gUkVBRFkpIG1pZ2h0Ci1ub3QgZ2V0IHRvIHNlZSBtZXNzYWdlcyB3aGVuIHRoZSBwaXBlbGluZSBpcyBzaHV0IGRvd24sIGJlY2F1c2UgdGhleSBtaWdodAotYmUgZmx1c2hlZCBiZWZvcmUgdGhleSBjYW4gYmUgZGlzcGF0Y2hlZCBpbiB0aGUgbWFpbiB0aHJlYWQuIFRoaXMgYmVoYXZpb3VyCi1jYW4gYmUgZGlzYWJsZWQgdXNpbmcgdGhpcyBmdW5jdGlvbi48L3A+Ci08cD5JdCBpcyBpbXBvcnRhbnQgdGhhdCBhbGwgbWVzc2FnZXMgb24gdGhlIGJ1cyBhcmUgaGFuZGxlZCB3aGVuIHRoZQotYXV0b21hdGljIGZsdXNoaW5nIGlzIGRpc2FibGVkIGVsc2UgbWVtb3J5IGxlYWtzIHdpbGwgYmUgaW50cm9kdWNlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGlwZWxpbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmF1dG9fZmx1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIG9yIG5vdCB0byBhdXRvbWF0aWNhbGx5IGZsdXNoIHRoZSBidXMgd2hlbgotdGhlIHBpcGVsaW5lIGdvZXMgZnJvbSBSRUFEWSB0byBOVUxMIHN0YXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1nZXQtYXV0by1mbHVzaC1idXMiPjwvYT48aDM+Z3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4KLSB3aWxsIGF1dG9tYXRpY2FsbHkgZmx1c2ggbWVzc2FnZXMgd2hlbiBnb2luZyB0bwotdGhlIE5VTEwgc3RhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1hdXRvLWZsdXNoLWJ1cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGlwZWxpbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLWdldC1hdXRvLWZsdXNoLWJ1cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHdoZXRoZXIgdGhlIHBpcGVsaW5lIHdpbGwgYXV0b21hdGljYWxseSBmbHVzaCBpdHMgYnVzIHdoZW4KLWdvaW5nIGZyb20gUkVBRFkgdG8gTlVMTCBzdGF0ZSBvciBub3QuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLXNldC1kZWxheSI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfc2V0X2RlbGF5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BpcGVsaW5lX3NldF9kZWxheSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBkZWxheTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIGV4cGVjdGVkIGRlbGF5IG5lZWRlZCBmb3IgYWxsIGVsZW1lbnRzIHRvIHBlcmZvcm0gdGhlCi1QQVVTRUQgdG8gUExBWUlORyBzdGF0ZSBjaGFuZ2UuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWxheTwvY29kZT48L2VtPgotIHdpbGwgYmUgYWRkZWQgdG8gdGhlCi1iYXNlIHRpbWUgb2YgdGhlIGVsZW1lbnRzIHNvIHRoYXQgdGhleSB3YWl0IGFuIGFkZGl0aW9uYWwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbGF5PC9jb2RlPjwvZW0+Ci0KLWFtb3VudCBvZiB0aW1lIGJlZm9yZSBzdGFydGluZyB0byBwcm9jZXNzIGJ1ZmZlcnMgYW5kIGNhbm5vdCBiZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19USU1FX05PTkU8L3NwYW4+PC9hPi48L3A+Ci08cD5UaGlzIG9wdGlvbiBpcyB1c2VkIGZvciB0dW5pbmcgcHVycG9zZXMgYW5kIHNob3VsZCBub3JtYWxseSBub3QgYmUKLXVzZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtc2V0LWRlbGF5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBpcGVsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWxheTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZWxheTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtZ2V0LWRlbGF5Ij48L2E+PGgzPmdzdF9waXBlbGluZV9nZXRfZGVsYXnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9waXBlbGluZV9nZXRfZGVsYXkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiAqcGlwZWxpbmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBjb25maWd1cmVkIGRlbGF5IChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1kZWxheSIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfZGVsYXnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9waXBlbGluZV9zZXRfZGVsYXkoKTwvY29kZT48L2E+KS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtZ2V0LWRlbGF5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5waXBlbGluZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtZ2V0LWRlbGF5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGNvbmZpZ3VyZWQgZGVsYXkuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBpcGVsaW5lLXNldC1sYXRlbmN5Ij48L2E+PGgzPmdzdF9waXBlbGluZV9zZXRfbGF0ZW5jecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGxhdGVuY3k8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgbGF0ZW5jeSB0aGF0IHNob3VsZCBiZSBjb25maWd1cmVkIG9uIHRoZSBwaXBlbGluZS4gU2V0dGluZwotR1NUX0NMT0NLX1RJTUVfTk9ORSB3aWxsIHJlc3RvcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHVzaW5nIHRoZSBtaW5pbXVtCi1sYXRlbmN5IGZyb20gdGhlIExBVEVOQ1kgcXVlcnkuIFNldHRpbmcgdGhpcyBpcyB1c3VhbGx5IG5vdCByZXF1aXJlZCBhbmQKLXRoZSBwaXBlbGluZSB3aWxsIGZpZ3VyZSBvdXQgYW4gYXBwcm9wcmlhdGUgbGF0ZW5jeSBhdXRvbWF0aWNhbGx5LjwvcD4KLTxwPlNldHRpbmcgYSB0b28gbG93IGxhdGVuY3ksIGVzcGVjaWFsbHkgbG93ZXIgdGhhbiB0aGUgbWluaW11bSBsYXRlbmN5IGZyb20KLXRoZSBMQVRFTkNZIHF1ZXJ5LCB3aWxsIG1vc3QgbGlrZWx5IGNhdXNlIHRoZSBwaXBlbGluZSB0byBmYWlsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1zZXQtbGF0ZW5jeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5waXBlbGluZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxhdGVuY3kgdG8gY29uZmlndXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1nZXQtbGF0ZW5jeSI+PC9hPjxoMz5nc3RfcGlwZWxpbmVfZ2V0X2xhdGVuY3nCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9waXBlbGluZV9nZXRfbGF0ZW5jeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+ICpwaXBlbGluZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBsYXRlbmN5IHRoYXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgb24gdGhlIHBpcGVsaW5lLiBTZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfbGF0ZW5jecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX3NldF9sYXRlbmN5KCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGlwZWxpbmUtZ2V0LWxhdGVuY3kucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBpcGVsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1waXBlbGluZS1nZXQtbGF0ZW5jeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IExhdGVuY3kgdG8gY29uZmlndXJlIG9uIHRoZSBwaXBlbGluZSBvciBHU1RfQ0xPQ0tfVElNRV9OT05FPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGlwZWxpbmUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBpcGVsaW5lLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UGlwZWxpbmU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RQaXBlbGluZSB7Ci0gIEdzdENsb2NrICAgICAgKmZpeGVkX2Nsb2NrOwotCi0gIEdzdENsb2NrVGltZSAgIHN0cmVhbV90aW1lOwotICBHc3RDbG9ja1RpbWUgICBkZWxheTsKLX07Ci08L3ByZT4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGlwZWxpbmUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGlwZWxpbmUtc3RydWN0LmZpeGVkLWNsb2NrIj48L2E+Zml4ZWRfY2xvY2s8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBmaXhlZCBjbG9jayBvZiB0aGUgcGlwZWxpbmUsIHVzZWQgd2hlbgotR1NUX1BJUEVMSU5FX0ZMQUdfRklYRURfQ0xPQ0sgaXMgc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQaXBlbGluZS1zdHJ1Y3Quc3RyZWFtLXRpbWUiPjwvYT5zdHJlYW1fdGltZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBwaXBlbGluZS4gQSBiZXR0ZXIgbmFtZSBmb3IgdGhpcwotcHJvcGVydHkgd291bGQgYmUgdGhlIHJ1bm5pbmdfdGltZSwgdGhlIHRvdGFsIHRpbWUgc3BlbnQgaW4gdGhlCi1QTEFZSU5HIHN0YXRlIHdpdGhvdXQgYmVpbmcgZmx1c2hlZC4gKGRlcHJlY2F0ZWQsIHVzZSB0aGUgc3RhcnRfdGltZQotb24gR3N0RWxlbWVudCkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBpcGVsaW5lLXN0cnVjdC5kZWxheSI+PC9hPmRlbGF5PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5FeHRyYSBkZWxheSBhZGRlZCB0byBiYXNlX3RpbWUgdG8gY29tcGVuc2F0ZSBmb3IgY29tcHV0aW5nIGRlbGF5cwotd2hlbiBzZXR0aW5nIGVsZW1lbnRzIHRvIFBMQVlJTkcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQaXBlbGluZUZsYWdzIj48L2E+PGgzPmVudW0gR3N0UGlwZWxpbmVGbGFnczwvaDM+Ci08cD5QaXBlbGluZSBmbGFnczwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBpcGVsaW5lRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUElQRUxJTkUtRkxBRy1GSVhFRC1DTE9DSzpDQVBTIj48L2E+R1NUX1BJUEVMSU5FX0ZMQUdfRklYRURfQ0xPQ0s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhpcyBwaXBlbGluZSB3b3JrcyB3aXRoIGEgZml4ZWQgY2xvY2s8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBJUEVMSU5FLUZMQUctTEFTVDpDQVBTIj48L2E+R1NUX1BJUEVMSU5FX0ZMQUdfTEFTVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5vZmZzZXQgdG8gZGVmaW5lIG1vcmUgZmxhZ3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGlwZWxpbmUucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBpcGVsaW5lLS1hdXRvLWZsdXNoLWJ1cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGF1dG8tZmx1c2gtYnVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhdXRvLWZsdXNoLWJ1c+KAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZXRoZXIgb3Igbm90IHRvIGF1dG9tYXRpY2FsbHkgZmx1c2ggYWxsIG1lc3NhZ2VzIG9uIHRoZQotcGlwZWxpbmUncyBidXMgd2hlbiBnb2luZyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUuIFBsZWFzZSBzZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMiIHRpdGxlPSJnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzKCk8L2NvZGU+PC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIG9wdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGlwZWxpbmUtLWRlbGF5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGVsYXnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRlbGF54oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBleHBlY3RlZCBkZWxheSBuZWVkZWQgZm9yIGVsZW1lbnRzIHRvIHNwaW4gdXAgdG8gdGhlCi1QTEFZSU5HIHN0YXRlIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcy4KLXNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWRlbGF5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9kZWxhecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX3NldF9kZWxheSgpPC9jb2RlPjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBvcHRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBpcGVsaW5lLS1sYXRlbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbGF0ZW5jeeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbGF0ZW5jeeKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TGF0ZW5jeSB0byBjb25maWd1cmUgb24gdGhlIHBpcGVsaW5lLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1sYXRlbmN5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9sYXRlbmN5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGlwZWxpbmVfc2V0X2xhdGVuY3koKTwvY29kZT48L2E+LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxODQ0Njc0NDA3MzcwOTU1MTYxNTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQaXBlbGluZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RQbHVnaW4uaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0UGx1Z2luLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOGVlMWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RQbHVnaW4uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ODAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFBsdWdpbjogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UGx1Z2luLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQbHVnaW4ub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0UGx1Z2luIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UGx1Z2luLnRvcF9vZl9wYWdlIj48L2E+R3N0UGx1Z2luPC9zcGFuPjwvaDI+Ci08cD5Hc3RQbHVnaW4g4oCUIENvbnRhaW5lciBmb3IgZmVhdHVyZXMgbG9hZGVkIGZyb20gYSBzaGFyZWQgb2JqZWN0IG1vZHVsZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQbHVnaW4uZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWVycm9yLXF1YXJrIiB0aXRsZT0iZ3N0X3BsdWdpbl9lcnJvcl9xdWFya8KgKCkiPmdzdF9wbHVnaW5fZXJyb3JfcXVhcms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkluaXRGdW5jIiB0aXRsZT0iR3N0UGx1Z2luSW5pdEZ1bmPCoCgpIj4qR3N0UGx1Z2luSW5pdEZ1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkluaXRGdWxsRnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdWxsRnVuY8KgKCkiPipHc3RQbHVnaW5Jbml0RnVsbEZ1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFRklORTpDQVBTIiB0aXRsZT0iR1NUX1BMVUdJTl9ERUZJTkUoKSI+R1NUX1BMVUdJTl9ERUZJTkU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1TVEFUSUMtREVDTEFSRTpDQVBTIiB0aXRsZT0iR1NUX1BMVUdJTl9TVEFUSUNfREVDTEFSRSgpIj5HU1RfUExVR0lOX1NUQVRJQ19ERUNMQVJFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tU1RBVElDLVJFR0lTVEVSOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX1NUQVRJQ19SRUdJU1RFUigpIj5HU1RfUExVR0lOX1NUQVRJQ19SRUdJU1RFUjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkZpbHRlciIgdGl0bGU9IkdzdFBsdWdpbkZpbHRlcsKgKCkiPipHc3RQbHVnaW5GaWx0ZXI8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfbmFtZcKgKCkiPmdzdF9wbHVnaW5fZ2V0X25hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1kZXNjcmlwdGlvbiIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uwqAoKSI+Z3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1maWxlbmFtZSIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lwqAoKSI+Z3N0X3BsdWdpbl9nZXRfZmlsZW5hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1saWNlbnNlIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfbGljZW5zZcKgKCkiPmdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1wYWNrYWdlIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfcGFja2FnZcKgKCkiPmdzdF9wbHVnaW5fZ2V0X3BhY2thZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1vcmlnaW4iIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9vcmlnaW7CoCgpIj5nc3RfcGx1Z2luX2dldF9vcmlnaW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1zb3VyY2UiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9zb3VyY2XCoCgpIj5nc3RfcGx1Z2luX2dldF9zb3VyY2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC12ZXJzaW9uIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfdmVyc2lvbsKgKCkiPmdzdF9wbHVnaW5fZ2V0X3ZlcnNpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1yZWxlYXNlLWRhdGUtc3RyaW5nIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfcmVsZWFzZV9kYXRlX3N0cmluZ8KgKCkiPmdzdF9wbHVnaW5fZ2V0X3JlbGVhc2VfZGF0ZV9zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4taXMtbG9hZGVkIiB0aXRsZT0iZ3N0X3BsdWdpbl9pc19sb2FkZWTCoCgpIj5nc3RfcGx1Z2luX2lzX2xvYWRlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWNhY2hlLWRhdGEiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhwqAoKSI+Z3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tc2V0LWNhY2hlLWRhdGEiIHRpdGxlPSJnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhwqAoKSI+Z3N0X3BsdWdpbl9zZXRfY2FjaGVfZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1sb2FkLWZpbGUiIHRpdGxlPSJnc3RfcGx1Z2luX2xvYWRfZmlsZcKgKCkiPmdzdF9wbHVnaW5fbG9hZF9maWxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxvYWQiIHRpdGxlPSJnc3RfcGx1Z2luX2xvYWTCoCgpIj5nc3RfcGx1Z2luX2xvYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZC1ieS1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9sb2FkX2J5X25hbWXCoCgpIj5nc3RfcGx1Z2luX2xvYWRfYnlfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9saXN0X2ZyZWXCoCgpIj5nc3RfcGx1Z2luX2xpc3RfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1yZWdpc3Rlci1zdGF0aWMiIHRpdGxlPSJnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY8KgKCkiPmdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYy1mdWxsIiB0aXRsZT0iZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbMKgKCkiPmdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljX2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWFkZC1kZXBlbmRlbmN5IiB0aXRsZT0iZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jecKgKCkiPmdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3k8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWFkZC1kZXBlbmRlbmN5LXNpbXBsZSIgdGl0bGU9ImdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlwqAoKSI+Z3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQbHVnaW4ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9QTFVHSU5fRVJST1IiPkdTVF9QTFVHSU5fRVJST1I8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFBsdWdpbkVycm9yIj5Hc3RQbHVnaW5FcnJvcjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luLXN0cnVjdCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVzYyIgdGl0bGU9InN0cnVjdCBHc3RQbHVnaW5EZXNjIj5Hc3RQbHVnaW5EZXNjPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHU1QtTElDRU5TRS1VTktOT1dOOkNBUFMiIHRpdGxlPSJHU1RfTElDRU5TRV9VTktOT1dOIj5HU1RfTElDRU5TRV9VTktOT1dOPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkZsYWdzIiB0aXRsZT0iZW51bSBHc3RQbHVnaW5GbGFncyI+R3N0UGx1Z2luRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiPkdzdFBsdWdpbkRlcGVuZGVuY3lGbGFnczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQbHVnaW4ub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UGx1Z2luCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGx1Z2luLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBsdWdpbi5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5HU3RyZWFtZXIgaXMgZXh0ZW5zaWJsZSwgc28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gaW5zdGFuY2VzIGNhbiBiZSBsb2FkZWQgYXQgcnVudGltZS4KLUEgcGx1Z2luIHN5c3RlbSBjYW4gcHJvdmlkZSBvbmUgb3IgbW9yZSBvZiB0aGUgYmFzaWM8L3A+Ci08c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPkdTdHJlYW1lcjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiBzdWJjbGFzc2VzLgotPHA+QSBwbHVnaW4gc2hvdWxkIGV4cG9ydCBhIHN5bWJvbCA8c3BhbiBjbGFzcz0ic3ltYm9sIj5nc3RfcGx1Z2luX2Rlc2M8L3NwYW4+IHRoYXQgaXMgYQotc3RydWN0IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luRGVzYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkRlc2M8L3NwYW4+PC9hPi4KLXRoZSBwbHVnaW4gbG9hZGVyIHdpbGwgY2hlY2sgdGhlIHZlcnNpb24gb2YgdGhlIGNvcmUgbGlicmFyeSB0aGUgcGx1Z2luIHdhcwotbGlua2VkIGFnYWluc3QgYW5kIHdpbGwgY3JlYXRlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+LiBJdCB3aWxsIHRoZW4gY2FsbCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkluaXRGdW5jPC9zcGFuPjwvYT4gZnVuY3Rpb24gdGhhdCB3YXMgcHJvdmlkZWQgaW4gdGhlPC9wPgotPHNwYW4gY2xhc3M9InN5bWJvbCI+Z3N0X3BsdWdpbl9kZXNjPC9zcGFuPi4KLTxwPk9uY2UgeW91IGhhdmUgYSBoYW5kbGUgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAoZS5nLiBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiksIHlvdQotY2FuIGFkZCBhbnkgb2JqZWN0IHRoYXQgc3ViY2xhc3NlcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPi48L3A+Ci08cD5Vc3VhbGx5IHBsdWdpbnMgYXJlIGFsd2F5cyBhdXRvbWF0aWNhbGx5IGxvYWRlZCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBjYWxsCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1sb2FkIiB0aXRsZT0iZ3N0X3BsdWdpbl9sb2FkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2xvYWQoKTwvY29kZT48L2E+IGV4cGxpY2l0bHkgdG8gYnJpbmcgaXQgaW50byBtZW1vcnkuIFRoZXJlIGFyZSBvcHRpb25zIHRvCi1zdGF0aWNhbGx5IGxpbmsgcGx1Z2lucyB0byBhbiBhcHAgb3IgZXZlbiB1c2UgR1N0cmVhbWVyIHdpdGhvdXQgYSBwbHVnaW4KLXJlcG9zaXRvcnkgaW4gd2hpY2ggY2FzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1sb2FkIiB0aXRsZT0iZ3N0X3BsdWdpbl9sb2FkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2xvYWQoKTwvY29kZT48L2E+IGNhbiBiZSBuZWVkZWQgdG8gYnJpbmcgdGhlIHBsdWdpbgotaW50byBtZW1vcnkuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQbHVnaW4uZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZXJyb3ItcXVhcmsiPjwvYT48aDM+Z3N0X3BsdWdpbl9lcnJvcl9xdWFya8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPgotZ3N0X3BsdWdpbl9lcnJvcl9xdWFyayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIGVycm9yIHF1YXJrLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZXJyb3ItcXVhcmsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgZXJyb3IgcXVhcmsgdXNlZCBpbiBHRXJyb3IgbWVzc2FnZXM8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGx1Z2luSW5pdEZ1bmMiPjwvYT48aDM+R3N0UGx1Z2luSW5pdEZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RQbHVnaW5Jbml0RnVuYzxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBwbHVnaW4gc2hvdWxkIHByb3ZpZGUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gb2YgdGhpcyB0eXBlIGluIHRoZQotcGx1Z2luX2Rlc2Mgc3RydWN0LgotVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB0aGUgbG9hZGVyIGF0IHN0YXJ0dXAuIE9uZSB3b3VsZCB0aGVuCi1yZWdpc3RlciBlYWNoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkluaXRGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcGx1Z2luIG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkluaXRGdW5jLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHBsdWdpbiBpbml0aWFsaXNlZCBzdWNjZXNzZnVsbHk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGx1Z2luSW5pdEZ1bGxGdW5jIj48L2E+PGgzPkdzdFBsdWdpbkluaXRGdWxsRnVuY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFBsdWdpbkluaXRGdWxsRnVuYzxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBwbHVnaW4gc2hvdWxkIHByb3ZpZGUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gb2YgZWl0aGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkluaXRGdW5jPC9zcGFuPjwvYT4KLW9yIHRoaXMgdHlwZSBpbiB0aGUgcGx1Z2luX2Rlc2Mgc3RydWN0LgotVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBsb2FkZXIgYXQgc3RhcnR1cC4gT25lIHdvdWxkIHRoZW4KLXJlZ2lzdGVyIGVhY2ggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4uIFRoaXMgdmVyc2lvbiBhbGxvd3MKLXVzZXIgZGF0YSB0byBiZSBwYXNzZWQgdG8gaW5pdCBmdW5jdGlvbiAodXNlZnVsIGZvciBiaW5kaW5ncykuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGx1Z2luSW5pdEZ1bGxGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBwbHVnaW4gb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmV4dHJhIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkluaXRGdWxsRnVuYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBwbHVnaW4gaW5pdGlhbGlzZWQgc3VjY2Vzc2Z1bGx5PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QTFVHSU4tREVGSU5FOkNBUFMiPjwvYT48aDM+R1NUX1BMVUdJTl9ERUZJTkUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfUExVR0lOX0RFRklORShtYWpvcixtaW5vcixuYW1lLGRlc2NyaXB0aW9uLGluaXQsdmVyc2lvbixsaWNlbnNlLHBhY2thZ2Usb3JpZ2luKTwvcHJlPgotPHA+VGhpcyBtYWNybyBuZWVkcyB0byBiZSB1c2VkIHRvIGRlZmluZSB0aGUgZW50cnkgcG9pbnQgYW5kIG1ldGEgZGF0YSBvZiBhCi1wbHVnaW4uIE9uZSB3b3VsZCB1c2UgdGhpcyBtYWNybyB0byBleHBvcnQgYSBwbHVnaW4sIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQKLWJ5IG90aGVyIGFwcGxpY2F0aW9ucy48L3A+Ci08cD5UaGUgbWFjcm8gdXNlcyBhIGRlZmluZSBuYW1lZCBQQUNLQUdFIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luRGVzYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkRlc2M8L3NwYW4+PC9hPixzb3VyY2UgZmllbGQuCi1XaGVuIHVzaW5nIGF1dG9jb25mLCB0aGlzIGlzIHVzdWFsbHkgc2V0IGF1dG9tYXRpY2FsbHkgdmlhIHRoZSBBQ19JTklUCi1tYWNybywgYW5kIHNldCBpbiBjb25maWcuaC4gSWYgeW91IGFyZSBub3QgdXNpbmcgYXV0b2NvbmYsIHlvdSB3aWxsIG5lZWQgdG8KLWRlZmluZSBQQUNLQUdFIHlvdXJzZWxmIGFuZCBzZXQgaXQgdG8gYSBzaG9ydCBtbmVtb25pYyBzdHJpbmcgaWRlbnRpZnlpbmcKLXlvdXIgYXBwbGljYXRpb24vcGFja2FnZSwgZS5nLiAnc29tZWFwcCcgb3IgJ215LXBsdWdpbnMtZm9vLjwvcD4KLTxwPklmIGRlZmluZWQsIHRoZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHdpbGwgYWxzbyBiZSB1c2VkIGZvciB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXNjIiB0aXRsZT0ic3RydWN0IEdzdFBsdWdpbkRlc2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5EZXNjPC9zcGFuPjwvYT4scmVsZWFzZV9kYXRldGltZSBmaWVsZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUExVR0lOLURFRklORS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYWpvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBnc3RyZWFtZXItY29yZSB0aGF0IHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGdzdHJlYW1lci1jb3JlIHRoYXQgcGx1Z2luIHdhcyBjb21waWxlZCBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnNob3J0LCBidXQgdW5pcXVlIG5hbWUgb2YgdGhlIHBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXNjcmlwdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmluZm9ybWF0aW9uIGFib3V0IHRoZSBwdXJwb3NlIG9mIHRoZSBwbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5pdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIHBsdWdpbl9pbml0IG1ldGhvZCB3aXRoIHRoZSBzaWduYXR1cmUgb2YgPGNvZGUgY2xhc3M9ImNvZGUiPnN0YXRpYyBnYm9vbGVhbiBwbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTwvY29kZT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZlcnNpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mdWxsIHZlcnNpb24gc3RyaW5nIChlLmcuIFZFUlNJT04gZnJvbSBjb25maWcuaCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGljZW5zZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVuZGVyIHdoaWNoIGxpY2VuY2UgdGhlIHBhY2thZ2UgaGFzIGJlZW4gcmVsZWFzZWQsIGUuZy4gR1BMLCBMR1BMLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWNrYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhY2thZ2UtbmFtZSAoZS5nLiBQQUNLQUdFX05BTUUgZnJvbSBjb25maWcuaCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b3JpZ2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBkZXNjcmlwdGlvbiBmcm9tIHdoZXJlIHRoZSBwYWNrYWdlIGNvbWVzIGZyb20gKGUuZy4gdGhlIGhvbWVwYWdlIFVSTCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBMVUdJTi1TVEFUSUMtREVDTEFSRTpDQVBTIj48L2E+PGgzPkdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfUExVR0lOX1NUQVRJQ19ERUNMQVJFKG5hbWUpPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGluaXRpYWxpemUgc3RhdGljYWxseSBsaW5rZWQgcGx1Z2lucy4gSXQgaXMKLW5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgbWFjcm8gYmVmb3JlIHRoZSBwbHVnaW4gY2FuIGJlIHVzZWQuCi1JdCBoYXMgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIEdTVF9QTFVHSU5fU1RBVElDX1JFR0lTVEVSCi1hbmQgbXVzdCBiZSBwbGFjZWQgb3V0c2lkZSBhbnkgYmxvY2sgdG8gZGVjbGFyZSB0aGUgcGx1Z2luIGluaXRpYWxpemF0aW9uCi1mdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUExVR0lOLVNUQVRJQy1ERUNMQVJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2hvcnQsIGJ1dCB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUExVR0lOLVNUQVRJQy1SRUdJU1RFUjpDQVBTIj48L2E+PGgzPkdTVF9QTFVHSU5fU1RBVElDX1JFR0lTVEVSKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BMVUdJTl9TVEFUSUNfUkVHSVNURVIobmFtZSkgR19QQVNURShnc3RfcGx1Z2luXywgR19QQVNURShuYW1lLCBfcmVnaXN0ZXIpKSAoKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNhbiBiZSB1c2VkIHRvIGluaXRpYWxpemUgc3RhdGljYWxseSBsaW5rZWQgcGx1Z2lucy4gSXQgaXMKLW5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgbWFjcm8gYmVmb3JlIHRoZSBwbHVnaW4gY2FuIGJlIHVzZWQuCi1JdCBoYXMgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIEdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkUgYW5kCi1jYWxscyB0aGUgcGx1Z2luIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1QTFVHSU4tU1RBVElDLVJFR0lTVEVSLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2hvcnQsIGJ1dCB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GaWx0ZXIiPjwvYT48aDM+R3N0UGx1Z2luRmlsdGVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0UGx1Z2luRmlsdGVyPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBlLmcuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1wbHVnaW4tZmlsdGVyIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyKCk8L2NvZGU+PC9hPgotdG8gZ2V0IGEgbGlzdCBvZiBwbHVnaW5zIHRoYXQgbWF0Y2ggY2VydGFpbiBjcml0ZXJpYS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GaWx0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBsdWdpbiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdXNlcl9kYXRhIHRoYXQgaGFzIGJlZW4gcGFzc2VkIG9uIGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXBsdWdpbi1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXIoKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GaWx0ZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIGEgcG9zaXRpdmUgbWF0Y2gsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1uYW1lIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9wbHVnaW5fZ2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgc2hvcnQgbmFtZSBvZiB0aGUgcGx1Z2luPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cGx1Z2luIHRvIGdldCB0aGUgbmFtZSBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LWRlc2NyaXB0aW9uIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBsb25nIGRlc2NyaXB0aXZlIG5hbWUgb2YgdGhlIHBsdWdpbjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LWRlc2NyaXB0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wbHVnaW4gdG8gZ2V0IGxvbmcgbmFtZSBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LWRlc2NyaXB0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGxvbmcgbmFtZSBvZiB0aGUgcGx1Z2luPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LWZpbGVuYW1lIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2dldF9maWxlbmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Z2V0IHRoZSBmaWxlbmFtZSBvZiB0aGUgcGx1Z2luPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtZmlsZW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBsdWdpbiB0byBnZXQgdGhlIGZpbGVuYW1lIG9mPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtZmlsZW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgZmlsZW5hbWUgb2YgdGhlIHBsdWdpbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1saWNlbnNlIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPmdldCB0aGUgbGljZW5zZSBvZiB0aGUgcGx1Z2luPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtbGljZW5zZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cGx1Z2luIHRvIGdldCB0aGUgbGljZW5zZSBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LWxpY2Vuc2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbGljZW5zZSBvZiB0aGUgcGx1Z2luPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LXBhY2thZ2UiPjwvYT48aDM+Z3N0X3BsdWdpbl9nZXRfcGFja2FnZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3BsdWdpbl9nZXRfcGFja2FnZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Z2V0IHRoZSBwYWNrYWdlIHRoZSBwbHVnaW4gYmVsb25ncyB0by48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1wYWNrYWdlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wbHVnaW4gdG8gZ2V0IHRoZSBwYWNrYWdlIG9mPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtcGFja2FnZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBwYWNrYWdlIG9mIHRoZSBwbHVnaW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtb3JpZ2luIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X29yaWdpbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3BsdWdpbl9nZXRfb3JpZ2luICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5nZXQgdGhlIFVSTCB3aGVyZSB0aGUgcGx1Z2luIGNvbWVzIGZyb208L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1vcmlnaW4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBsdWdpbiB0byBnZXQgdGhlIG9yaWdpbiBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LW9yaWdpbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBvcmlnaW4gb2YgdGhlIHBsdWdpbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1zb3VyY2UiPjwvYT48aDM+Z3N0X3BsdWdpbl9nZXRfc291cmNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2dldF9zb3VyY2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPmdldCB0aGUgc291cmNlIG1vZHVsZSB0aGUgcGx1Z2luIGJlbG9uZ3MgdG8uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtc291cmNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wbHVnaW4gdG8gZ2V0IHRoZSBzb3VyY2Ugb2Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1zb3VyY2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgc291cmNlIG9mIHRoZSBwbHVnaW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtdmVyc2lvbiI+PC9hPjxoMz5nc3RfcGx1Z2luX2dldF92ZXJzaW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2dldF92ZXJzaW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5nZXQgdGhlIHZlcnNpb24gb2YgdGhlIHBsdWdpbjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LXZlcnNpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBsdWdpbiB0byBnZXQgdGhlIHZlcnNpb24gb2Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC12ZXJzaW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHZlcnNpb24gb2YgdGhlIHBsdWdpbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1yZWxlYXNlLWRhdGUtc3RyaW5nIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X3JlbGVhc2VfZGF0ZV9zdHJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9wbHVnaW5fZ2V0X3JlbGVhc2VfZGF0ZV9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgcmVsZWFzZSBkYXRlIChhbmQgcG9zc2libHkgdGltZSkgaW4gZm9ybSBvZiBhIHN0cmluZywgaWYgYXZhaWxhYmxlLjwvcD4KLTxwPkZvciBub3JtYWwgR1N0cmVhbWVyIHBsdWdpbiByZWxlYXNlcyB0aGlzIHdpbGwgdXN1YWxseSBqdXN0IGJlIGEgZGF0ZSBpbgotdGhlIGZvcm0gb2YgIllZWVktTU0tREQiLCB3aGlsZSBwcmUtcmVsZWFzZXMgYW5kIGJ1aWxkcyBmcm9tIGdpdCBtYXkgY29udGFpbgotYSB0aW1lIGNvbXBvbmVudCBhZnRlciB0aGUgZGF0ZSBhcyB3ZWxsLCBpbiB3aGljaCBjYXNlIHRoZSBzdHJpbmcgd2lsbCBiZQotZm9ybWF0dGVkIGxpa2UgIllZWVktTU0tRERUSEg6TU1aIiAoZS5nLiAiMjAxMi0wNC0zMFQwOTozMFoiKS48L3A+Ci08cD5UaGVyZSBtYXkgYmUgcGx1Z2lucyB0aGF0IGRvIG5vdCBoYXZlIGEgdmFsaWQgcmVsZWFzZSBkYXRlIHNldCBvbiB0aGVtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LXJlbGVhc2UtZGF0ZS1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBsdWdpbiB0byBnZXQgdGhlIHJlbGVhc2UgZGF0ZSBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZ2V0LXJlbGVhc2UtZGF0ZS1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgZGF0ZSBzdHJpbmcgb2YgdGhlIHBsdWdpbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vdAotYXZhaWxhYmxlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4taXMtbG9hZGVkIj48L2E+PGgzPmdzdF9wbHVnaW5faXNfbG9hZGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGx1Z2luX2lzX2xvYWRlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+cXVlcmllcyBpZiB0aGUgcGx1Z2luIGlzIGxvYWRlZCBpbnRvIG1lbW9yeTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4taXMtbG9hZGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wbHVnaW4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWlzLWxvYWRlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpcyBsb2FkZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1jYWNoZS1kYXRhIj48L2E+PGgzPmdzdF9wbHVnaW5fZ2V0X2NhY2hlX2RhdGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9wbHVnaW5fZ2V0X2NhY2hlX2RhdGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHBsdWdpbiBzcGVjaWZpYyBkYXRhIGNhY2hlLiBJZiBpdCBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEKLXN0b3JlZC4gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSByZWdpc3RyeSBpcyBnZXR0aW5nIHJlYnVpbHQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1nZXQtY2FjaGUtZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWdldC1jYWNoZS1kYXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGNhY2hlZCBkYXRhIGFzIGEKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLXNldC1jYWNoZS1kYXRhIj48L2E+PGgzPmdzdF9wbHVnaW5fc2V0X2NhY2hlX2RhdGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqY2FjaGVfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIHBsdWdpbiBzcGVjaWZpYyBkYXRhIHRvIGNhY2hlLiBQYXNzZXMgdGhlIG93bmVyc2hpcCBvZiB0aGUgc3RydWN0dXJlIHRvCi10aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPgotLjwvcD4KLTxwPlRoZSBjYWNoZSBpcyBmbHVzaGVkIGV2ZXJ5IHRpbWUgdGhlIHJlZ2lzdHJ5IGlzIHJlYnVpbHQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1zZXQtY2FjaGUtZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYWNoZV9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gY2FjaGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWxvYWQtZmlsZSI+PC9hPjxoMz5nc3RfcGx1Z2luX2xvYWRfZmlsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPsKgKgotZ3N0X3BsdWdpbl9sb2FkX2ZpbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZW5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TG9hZHMgdGhlIGdpdmVuIHBsdWdpbiBhbmQgcmVmcyBpdC4gIENhbGxlciBuZWVkcyB0byB1bnJlZiBhZnRlciB1c2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1sb2FkLWZpbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmlsZW5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGx1Z2luIGZpbGVuYW1lIHRvIGxvYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LXZhbHVlZCBHRXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tbG9hZC1maWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSByZWZlcmVuY2UgdG8gdGhlIGV4aXN0aW5nIGxvYWRlZCBHc3RQbHVnaW4sIGEKLXJlZmVyZW5jZSB0byB0aGUgbmV3bHktbG9hZGVkIEdzdFBsdWdpbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIGFuIGVycm9yIG9jY3VycmVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWxvYWQiPjwvYT48aDM+Z3N0X3BsdWdpbl9sb2FkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2xvYWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxvYWRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wbHVnaW48L2NvZGU+PC9lbT4KLS4gTm90ZSB0aGF0IHRoZSAqcmV0dXJuIHZhbHVlKiBpcyB0aGUgbG9hZGVkIHBsdWdpbjsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPgotIGlzCi11bnRvdWNoZWQuIFRoZSBub3JtYWwgdXNlIHBhdHRlcm4gb2YgdGhpcyBmdW5jdGlvbiBnb2VzIGxpa2UgdGhpczo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci1Hc3RQbHVnaW4gKmxvYWRlZF9wbHVnaW47Ci1sb2FkZWRfcGx1Z2luID0gZ3N0X3BsdWdpbl9sb2FkIChwbHVnaW4pOwotLy8gcHJlc3VtYWJseSwgd2UncmUgbm8gbG9uZ2VyIGludGVyZXN0ZWQgaW4gdGhlIHBvdGVudGlhbGx5LXVubG9hZGVkIHBsdWdpbgotZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKLXBsdWdpbiA9IGxvYWRlZF9wbHVnaW47Ci08L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tbG9hZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBsdWdpbiB0byBsb2FkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWxvYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIHJlZmVyZW5jZSB0byBhIGxvYWRlZCBwbHVnaW4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBvbiBlcnJvci4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1sb2FkLWJ5LW5hbWUiPjwvYT48aDM+Z3N0X3BsdWdpbl9sb2FkX2J5X25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT7CoCoKLWdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TG9hZCB0aGUgbmFtZWQgcGx1Z2luLiBSZWZzIHRoZSBwbHVnaW4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1sb2FkLWJ5LW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIHBsdWdpbiB0byBsb2FkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1sb2FkLWJ5LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIHJlZmVyZW5jZSB0byBhIGxvYWRlZCBwbHVnaW4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBvbiBlcnJvci4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1saXN0LWZyZWUiPjwvYT48aDM+Z3N0X3BsdWdpbl9saXN0X2ZyZWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGx1Z2luX2xpc3RfZnJlZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VW5yZWZzIGVhY2ggbWVtYmVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0sIHRoZW4gZnJlZXMgdGhlIGxpc3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1saXN0LWZyZWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbGlzdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuUGx1Z2luXTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYyI+PC9hPjxoMz5nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWFqb3JfdmVyc2lvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbm9yX3ZlcnNpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzY3JpcHRpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkluaXRGdW5jPC9zcGFuPjwvYT4gaW5pdF9mdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmVyc2lvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmxpY2Vuc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzb3VyY2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYWNrYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3JpZ2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlZ2lzdGVycyBhIHN0YXRpYyBwbHVnaW4sIGllLiBhIHBsdWdpbiB3aGljaCBpcyBwcml2YXRlIHRvIGFuIGFwcGxpY2F0aW9uCi1vciBsaWJyYXJ5IGFuZCBjb250YWluZWQgd2l0aGluIHRoZSBhcHBsaWNhdGlvbiBvciBsaWJyYXJ5IChhcyBvcHBvc2VkIHRvCi1iZWluZyBzaGlwcGVkIGFzIGEgc2VwYXJhdGUgbW9kdWxlIGZpbGUpLjwvcD4KLTxwPllvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IEdTdHJlYW1lciBoYXMgYmVlbiBpbml0aWFsaXNlZCAod2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0KCk8L2NvZGU+PC9hPiBvcgotdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtZ2V0LW9wdGlvbi1ncm91cCIgdGl0bGU9ImdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAoKTwvY29kZT48L2E+KSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tcmVnaXN0ZXItc3RhdGljLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1ham9yX3ZlcnNpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdTdHJlYW1lciBjb3JlIHRoYXQgdGhlCi1wbHVnaW4gd2FzIGNvbXBpbGVkIGZvciwgeW91IGNhbiBqdXN0IHVzZSBHU1RfVkVSU0lPTl9NQUpPUiBoZXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbm9yX3ZlcnNpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdTdHJlYW1lciBjb3JlIHRoYXQgdGhlCi1wbHVnaW4gd2FzIGNvbXBpbGVkIGZvciwgeW91IGNhbiBqdXN0IHVzZSBHU1RfVkVSU0lPTl9NSU5PUiBoZXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHVuaXF1ZSBuYW1lIG9mIHRoZSBwbHVnaW4gKGlkZWFsbHkgcHJlZml4ZWQgd2l0aCBhbiBhcHBsaWNhdGlvbi0gb3IKLWxpYnJhcnktc3BlY2lmaWMgbmFtZXNwYWNlIHByZWZpeCBpbiBvcmRlciB0byBhdm9pZCBuYW1lIGNvbmZsaWN0cyBpbgotY2FzZSBhIHNpbWlsYXIgcGx1Z2luIHdpdGggdGhlIHNhbWUgbmFtZSBldmVyIGdldHMgYWRkZWQgdG8gR1N0cmVhbWVyKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXNjcmlwdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRlc2NyaXB0aW9uIG9mIHRoZSBwbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5pdF9mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gdGhlIGluaXQgZnVuY3Rpb24gb2YgdGhpcyBwbHVnaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52ZXJzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmVyc2lvbiBzdHJpbmcgb2YgdGhlIHBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saWNlbnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZWZmZWN0aXZlIGxpY2Vuc2Ugb2YgcGx1Z2luLiBNdXN0IGJlIG9uZSBvZiB0aGUgYXBwcm92ZWQgbGljZW5zZXMKLShzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luRGVzYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkRlc2M8L3NwYW4+PC9hPiBhYm92ZSkgb3IgdGhlIHBsdWdpbiB3aWxsIG5vdCBiZSByZWdpc3RlcmVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zb3VyY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zb3VyY2UgbW9kdWxlIHBsdWdpbiBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhY2thZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zaGlwcGVkIHBhY2thZ2UgcGx1Z2luIGJlbG9uZ3MgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b3JpZ2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VVJMIHRvIHByb3ZpZGVyIG9mIHBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1yZWdpc3Rlci1zdGF0aWMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBsdWdpbiB3YXMgcmVnaXN0ZXJlZCBjb3JyZWN0bHksIG90aGVyd2lzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1yZWdpc3Rlci1zdGF0aWMtZnVsbCI+PC9hPjxoMz5nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY19mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY19mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1ham9yX3ZlcnNpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbm9yX3ZlcnNpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVsbEZ1bmMiIHRpdGxlPSJHc3RQbHVnaW5Jbml0RnVsbEZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luSW5pdEZ1bGxGdW5jPC9zcGFuPjwvYT4gaW5pdF9mdWxsX2Z1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnZlcnNpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmxpY2Vuc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNvdXJjZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcGFja2FnZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3JpZ2luPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWdpc3RlcnMgYSBzdGF0aWMgcGx1Z2luLCBpZS4gYSBwbHVnaW4gd2hpY2ggaXMgcHJpdmF0ZSB0byBhbiBhcHBsaWNhdGlvbgotb3IgbGlicmFyeSBhbmQgY29udGFpbmVkIHdpdGhpbiB0aGUgYXBwbGljYXRpb24gb3IgbGlicmFyeSAoYXMgb3Bwb3NlZCB0bwotYmVpbmcgc2hpcHBlZCBhcyBhIHNlcGFyYXRlIG1vZHVsZSBmaWxlKSB3aXRoIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkluaXRGdWxsRnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdWxsRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5Jbml0RnVsbEZ1bmM8L3NwYW4+PC9hPgotd2hpY2ggYWxsb3dzIHVzZXIgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uICh1c2VmdWwKLWZvciBiaW5kaW5ncykuPC9wPgotPHA+WW91IG11c3QgbWFrZSBzdXJlIHRoYXQgR1N0cmVhbWVyIGhhcyBiZWVuIGluaXRpYWxpc2VkICh3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQiIHRpdGxlPSJnc3RfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+IG9yCi12aWEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdC1nZXQtb3B0aW9uLWdyb3VwIiB0aXRsZT0iZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCgpPC9jb2RlPjwvYT4pIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1yZWdpc3Rlci1zdGF0aWMtZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYWpvcl92ZXJzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHU3RyZWFtZXIgY29yZSB0aGF0IHRoZQotcGx1Z2luIHdhcyBjb21waWxlZCBmb3IsIHlvdSBjYW4ganVzdCB1c2UgR1NUX1ZFUlNJT05fTUFKT1IgaGVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5vcl92ZXJzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHU3RyZWFtZXIgY29yZSB0aGF0IHRoZQotcGx1Z2luIHdhcyBjb21waWxlZCBmb3IsIHlvdSBjYW4ganVzdCB1c2UgR1NUX1ZFUlNJT05fTUlOT1IgaGVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luIChpZGVhbGx5IHByZWZpeGVkIHdpdGggYW4gYXBwbGljYXRpb24tIG9yCi1saWJyYXJ5LXNwZWNpZmljIG5hbWVzcGFjZSBwcmVmaXggaW4gb3JkZXIgdG8gYXZvaWQgbmFtZSBjb25mbGljdHMgaW4KLWNhc2UgYSBzaW1pbGFyIHBsdWdpbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXZlciBnZXRzIGFkZGVkIHRvIEdTdHJlYW1lcik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzY3JpcHRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5kZXNjcmlwdGlvbiBvZiB0aGUgcGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluaXRfZnVsbF9mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gdGhlIGluaXQgZnVuY3Rpb24gd2l0aCB1c2VyIGRhdGEKLW9mIHRoaXMgcGx1Z2luLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmVyc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZlcnNpb24gc3RyaW5nIG9mIHRoZSBwbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGljZW5zZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmVmZmVjdGl2ZSBsaWNlbnNlIG9mIHBsdWdpbi4gTXVzdCBiZSBvbmUgb2YgdGhlIGFwcHJvdmVkIGxpY2Vuc2VzCi0oc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXNjIiB0aXRsZT0ic3RydWN0IEdzdFBsdWdpbkRlc2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5EZXNjPC9zcGFuPjwvYT4gYWJvdmUpIG9yIHRoZSBwbHVnaW4gd2lsbCBub3QgYmUgcmVnaXN0ZXJlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c291cmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c291cmNlIG1vZHVsZSBwbHVnaW4gYmVsb25ncyB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWNrYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2hpcHBlZCBwYWNrYWdlIHBsdWdpbiBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9yaWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlVSTCB0byBwcm92aWRlciBvZiBwbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Z3BvaW50ZXIgdG8gdXNlciBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLXJlZ2lzdGVyLXN0YXRpYy1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwbHVnaW4gd2FzIHJlZ2lzdGVyZWQgY29ycmVjdGx5LCBvdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiPjwvYT48aDM+Z3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3kgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqZW52X3ZhcnM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipwYXRoczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKm5hbWVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkRlcGVuZGVuY3lGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1ha2UgR1N0cmVhbWVyIGF3YXJlIG9mIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aGljaCBhZmZlY3QgdGhlIGZlYXR1cmUKLXNldCBvZiB0aGlzIHBsdWdpbiAoaWUuIHRoZSBlbGVtZW50cyBvciB0eXBlZmluZGVycyBhc3NvY2lhdGVkIHdpdGggaXQpLjwvcD4KLTxwPkdTdHJlYW1lciB3aWxsIHJlLWluc3BlY3QgcGx1Z2lucyB3aXRoIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aGVuZXZlciBhbnkKLW9mIHRoZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgY2hhbmdlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGx1Z2lucyB3aGljaCB3cmFwCi1vdGhlciBwbHVnaW4gc3lzdGVtcywgZS5nLiBhIHBsdWdpbiB3aGljaCB3cmFwcyBhIHBsdWdpbi1iYXNlZCB2aXN1YWxpc2F0aW9uCi1saWJyYXJ5IGFuZCBtYWtlcyB2aXN1YWxpc2F0aW9ucyBhdmFpbGFibGUgYXMgR1N0cmVhbWVyIGVsZW1lbnRzLCBvciBhCi1jb2RlYyBsb2FkZXIgd2hpY2ggZXhwb3NlcyBlbGVtZW50cyBhbmQvb3IgY2FwcyBkZXBlbmRlbnQgb24gd2hhdCBleHRlcm5hbAotY29kZWMgbGlicmFyaWVzIGFyZSBjdXJyZW50bHkgaW5zdGFsbGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnZfdmFyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBhcnJheSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYWZmZWN0aW5nIHRoZQotZmVhdHVyZSBzZXQgb2YgdGhlIHBsdWdpbiAoZS5nLiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWluaW5nCi1wYXRocyB3aGVyZSB0byBsb29rIGZvciBhZGRpdGlvbmFsIG1vZHVsZXMvcGx1Z2lucyBvZiBhIGxpYnJhcnkpLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBtYXkgYmUgZm9sbG93ZWQgYnkgYSBwYXRoIGNvbXBvbmVudAotd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIGUuZy4KLSJIT01FLy5teXN0dWZmL3BsdWdpbnMiLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXRoczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBhcnJheSBvZiBkaXJlY3Rvcmllcy9wYXRocyB3aGVyZSBkZXBlbmRlbnQgZmlsZXMKLW1heSBiZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBhcnJheSBvZiBmaWxlIG5hbWVzIChvciBmaWxlIG5hbWUgc3VmZml4ZXMsCi1kZXBlbmRpbmcgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+Ci0pIHRvIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgcGF0aHMgZnJvbQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdGhzPC9jb2RlPjwvZW0+Ci1hbmQvb3IgdGhlIHBhdGhzIGV4dHJhY3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnZfdmFyczwvY29kZT48L2VtPgotLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b3B0aW9uYWwgZmxhZ3MsIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1hZGQtZGVwZW5kZW5jeS1zaW1wbGUiPjwvYT48aDM+Z3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5X3NpbXBsZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbnZfdmFyczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnBhdGhzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkRlcGVuZGVuY3lGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1ha2UgR1N0cmVhbWVyIGF3YXJlIG9mIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aGljaCBhZmZlY3QgdGhlIGZlYXR1cmUKLXNldCBvZiB0aGlzIHBsdWdpbiAoaWUuIHRoZSBlbGVtZW50cyBvciB0eXBlZmluZGVycyBhc3NvY2lhdGVkIHdpdGggaXQpLjwvcD4KLTxwPkdTdHJlYW1lciB3aWxsIHJlLWluc3BlY3QgcGx1Z2lucyB3aXRoIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aGVuZXZlciBhbnkKLW9mIHRoZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMgY2hhbmdlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGx1Z2lucyB3aGljaCB3cmFwCi1vdGhlciBwbHVnaW4gc3lzdGVtcywgZS5nLiBhIHBsdWdpbiB3aGljaCB3cmFwcyBhIHBsdWdpbi1iYXNlZCB2aXN1YWxpc2F0aW9uCi1saWJyYXJ5IGFuZCBtYWtlcyB2aXN1YWxpc2F0aW9ucyBhdmFpbGFibGUgYXMgR1N0cmVhbWVyIGVsZW1lbnRzLCBvciBhCi1jb2RlYyBsb2FkZXIgd2hpY2ggZXhwb3NlcyBlbGVtZW50cyBhbmQvb3IgY2FwcyBkZXBlbmRlbnQgb24gd2hhdCBleHRlcm5hbAotY29kZWMgbGlicmFyaWVzIGFyZSBjdXJyZW50bHkgaW5zdGFsbGVkLjwvcD4KLTxwPkNvbnZlbmllbmNlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWFkZC1kZXBlbmRlbmN5IiB0aXRsZT0iZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSgpPC9jb2RlPjwvYT4gd2hpY2gKLXRha2VzIHNpbXBsZSBzdHJpbmdzIGFzIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIHN0cmluZyBhcnJheXMsIHdpdGggbXVsdGlwbGUKLWFyZ3VtZW50cyBzZXBhcmF0ZWQgYnkgcHJlZGVmaW5lZCBkZWxpbWl0ZXJzIChzZWUgYWJvdmUpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3ktc2ltcGxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnZfdmFyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBvbmUgb3IgbW9yZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKHNlcGFyYXRlZCBieSAnOicsICc7JyBvciAnLCcpLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBtYXkgYmUgZm9sbG93ZWQgYnkgYSBwYXRoIGNvbXBvbmVudAotd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIGUuZy4KLSJIT01FLy5teXN0dWZmL3BsdWdpbnM6TVlTVFVGRl9QTFVHSU5TX1BBVEgiLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXRoczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBvbmUgb3JlIG1vcmUgZGlyZWN0b3J5IHBhdGhzIChzZXBhcmF0ZWQgYnkgJzonIG9yICc7JyBvciAnLCcpLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiBFeGFtcGxlOiAiL3Vzci9saWIvbXlzdHVmZi9wbHVnaW5zIi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gb25lIG9yIG1vcmUgZmlsZSBuYW1lcyBvciBmaWxlIG5hbWUgc3VmZml4ZXMgKHNlcGFyYXRlZCBieSBjb21tYXMpLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9wdGlvbmFsIGZsYWdzLCBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfTk9ORTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGx1Z2luLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUExVR0lOLUVSUk9SOkNBUFMiPjwvYT48aDM+R1NUX1BMVUdJTl9FUlJPUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUExVR0lOX0VSUk9SIGdzdF9wbHVnaW5fZXJyb3JfcXVhcmsgKCkKLTwvcHJlPgotPHA+VGhlIGVycm9yIG1lc3NhZ2UgY2F0ZWdvcnkgcXVhcms8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkVycm9yIj48L2E+PGgzPmVudW0gR3N0UGx1Z2luRXJyb3I8L2gzPgotPHA+VGhlIHBsdWdpbiBsb2FkaW5nIGVycm9yczwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkVycm9yLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBMVUdJTi1FUlJPUi1NT0RVTEU6Q0FQUyI+PC9hPkdTVF9QTFVHSU5fRVJST1JfTU9EVUxFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBwbHVnaW4gY291bGQgbm90IGJlIGxvYWRlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUExVR0lOLUVSUk9SLURFUEVOREVOQ0lFUzpDQVBTIj48L2E+R1NUX1BMVUdJTl9FUlJPUl9ERVBFTkRFTkNJRVM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIHBsdWdpbiBoYXMgdW5yZXNvbHZlZCBkZXBlbmRlbmNpZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBMVUdJTi1FUlJPUi1OQU1FLU1JU01BVENIOkNBUFMiPjwvYT5HU1RfUExVR0lOX0VSUk9SX05BTUVfTUlTTUFUQ0g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIHBsdWdpbiBoYXMgYWxyZWFkeSBiZSBsb2FkZWQgZnJvbSBhIGRpZmZlcmVudCBmaWxlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQbHVnaW4tc3RydWN0Ij48L2E+PGgzPkdzdFBsdWdpbjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFBsdWdpbiBHc3RQbHVnaW47PC9wcmU+Ci08cD5UaGUgb3BhcXVlIHBsdWdpbiBvYmplY3Q8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkRlc2MiPjwvYT48aDM+c3RydWN0IEdzdFBsdWdpbkRlc2M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RQbHVnaW5EZXNjIHsKLSAgZ2ludCBtYWpvcl92ZXJzaW9uOwotICBnaW50IG1pbm9yX3ZlcnNpb247Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotICBjb25zdCBnY2hhciAqZGVzY3JpcHRpb247Ci0gIEdzdFBsdWdpbkluaXRGdW5jIHBsdWdpbl9pbml0OwotICBjb25zdCBnY2hhciAqdmVyc2lvbjsKLSAgY29uc3QgZ2NoYXIgKmxpY2Vuc2U7Ci0gIGNvbnN0IGdjaGFyICpzb3VyY2U7Ci0gIGNvbnN0IGdjaGFyICpwYWNrYWdlOwotICBjb25zdCBnY2hhciAqb3JpZ2luOwotICBjb25zdCBnY2hhciAqcmVsZWFzZV9kYXRldGltZTsKLX07Ci08L3ByZT4KLTxwPkEgcGx1Z2luIHNob3VsZCBleHBvcnQgYSB2YXJpYWJsZSBvZiB0aGlzIHR5cGUgY2FsbGVkIHBsdWdpbl9kZXNjLiBUaGUgcGx1Z2luCi1sb2FkZXIgd2lsbCB1c2UgdGhlIGRhdGEgcHJvdmlkZWQgdGhlcmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Z2luLjwvcD4KLTxwPlRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGljZW5jZTwvY29kZT48L2VtPgotIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZjogTEdQTCwgR1BMLCBRUEwsIEdQTC9RUEwsIE1QTCwKLUJTRCwgTUlUL1gxMSwgUHJvcHJpZXRhcnksIHVua25vd24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLm1ham9yLXZlcnNpb24iPjwvYT5tYWpvcl92ZXJzaW9uPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgY29yZSB0aGF0IHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLm1pbm9yLXZlcnNpb24iPjwvYT5taW5vcl92ZXJzaW9uPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgY29yZSB0aGF0IHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+Y29uc3TCoDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5uYW1lIj48L2E+bmFtZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+YSB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+Y29uc3TCoDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5kZXNjcmlwdGlvbiI+PC9hPmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5kZXNjcmlwdGlvbiBvZiBwbHVnaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luSW5pdEZ1bmMiIHRpdGxlPSJHc3RQbHVnaW5Jbml0RnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5Jbml0RnVuYzwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLnBsdWdpbi1pbml0Ij48L2E+cGx1Z2luX2luaXQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnBvaW50ZXIgdG8gdGhlIGluaXQgZnVuY3Rpb24gb2YgdGhpcyBwbHVnaW4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+Y29uc3TCoDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy52ZXJzaW9uIj48L2E+dmVyc2lvbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dmVyc2lvbiBvZiB0aGUgcGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+Y29uc3TCoDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5saWNlbnNlIj48L2E+bGljZW5zZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZWZmZWN0aXZlIGxpY2Vuc2Ugb2YgcGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+Y29uc3TCoDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGx1Z2luRGVzYy5zb3VyY2UiPjwvYT5zb3VyY2U8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnNvdXJjZSBtb2R1bGUgcGx1Z2luIGJlbG9uZ3MgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD5jb25zdMKgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLnBhY2thZ2UiPjwvYT5wYWNrYWdlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5zaGlwcGVkIHBhY2thZ2UgcGx1Z2luIGJlbG9uZ3MgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD5jb25zdMKgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQbHVnaW5EZXNjLm9yaWdpbiI+PC9hPm9yaWdpbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VVJMIHRvIHByb3ZpZGVyIG9mIHBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPmNvbnN0wqA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBsdWdpbkRlc2MucmVsZWFzZS1kYXRldGltZSI+PC9hPnJlbGVhc2VfZGF0ZXRpbWU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPiBkYXRlIHRpbWUgc3RyaW5nIGluIElTTyA4NjAxCi1mb3JtYXQgKG9yIHJhdGhlciwgYSBzdWJzZXQgdGhlcmVvZiksIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gQWxsb3dlZCBhcmUgdGhlCi1mb2xsb3dpbmcgZm9ybWF0czogIllZWVktTU0tREQiIGFuZCAiWVlZLU1NLUREVEhIOk1NWiIgKHdpdGgKLSdUJyBhIHNlcGFyYXRvciBhbmQgJ1onIGluZGljYXRpbmcgVVRDL1p1bHUgdGltZSkuIFRoaXMgZmllbGQKLXNob3VsZCBiZSBzZXQgdmlhIHRoZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FCi1wcmVwcm9jZXNzb3IgbWFjcm8uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTElDRU5TRS1VTktOT1dOOkNBUFMiPjwvYT48aDM+R1NUX0xJQ0VOU0VfVU5LTk9XTjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTElDRU5TRV9VTktOT1dOICJ1bmtub3duIgotPC9wcmU+Ci08cD5UbyBiZSB1c2VkIGluIEdTVF9QTFVHSU5fREVGSU5FIGlmIHVuc3VyZSBhYm91dCB0aGUgbGljZW5jZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkZsYWdzIj48L2E+PGgzPmVudW0gR3N0UGx1Z2luRmxhZ3M8L2gzPgotPHA+VGhlIHBsdWdpbiBsb2FkaW5nIHN0YXRlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGx1Z2luRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUExVR0lOLUZMQUctQ0FDSEVEOkNBUFMiPjwvYT5HU1RfUExVR0lOX0ZMQUdfQ0FDSEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRlbXBvcmFyaWx5IGxvYWRlZCBwbHVnaW5zPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QTFVHSU4tRkxBRy1CTEFDS0xJU1RFRDpDQVBTIj48L2E+R1NUX1BMVUdJTl9GTEFHX0JMQUNLTElTVEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBwbHVnaW4gd29uJ3QgYmUgc2Nhbm5lZCAoYWdhaW4pPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3M8L2gzPgotPHA+RmxhZ3MgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiIHRpdGxlPSJnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5KCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1OT05FOkNBUFMiPjwvYT5HU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPm5vIHNwZWNpYWwgZmxhZ3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctUkVDVVJTRTpDQVBTIj48L2E+R1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUkVDVVJTRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5yZWN1cnNlIGludG8gc3ViZGlyZWN0b3JpZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctUEFUSFMtQVJFLURFRkFVTFQtT05MWTpDQVBTIj48L2E+R1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUEFUSFNfQVJFX0RFRkFVTFRfT05MWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2UgcGF0aHMKLSAgICAgICAgYXJndW1lbnQgb25seSBpZiBub25lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaXMgc2V0PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QTFVHSU4tREVQRU5ERU5DWS1GTEFHLUZJTEUtTkFNRS1JUy1TVUZGSVg6Q0FQUyI+PC9hPkdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19TVUZGSVg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+aW50ZXJwcmV0Ci0gICAgICAgIGZpbGVuYW1lIGFyZ3VtZW50IGFzIGZpbHRlciBzdWZmaXggYW5kIGNoZWNrIGFsbCBtYXRjaGluZyBmaWxlcyBpbgotICAgICAgICB0aGUgZGlyZWN0b3J5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QTFVHSU4tREVQRU5ERU5DWS1GTEFHLUZJTEUtTkFNRS1JUy1QUkVGSVg6Q0FQUyI+PC9hPkdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19QUkVGSVg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+aW50ZXJwcmV0Ci0gICAgICAgIGZpbGVuYW1lIGFyZ3VtZW50IGFzIGZpbHRlciBwcmVmaXggYW5kIGNoZWNrIGFsbCBtYXRjaGluZyBmaWxlcyBpbgotICAgICAgICB0aGUgZGlyZWN0b3J5LiBTaW5jZSAxLjguPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBsdWdpbi5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0UGx1Z2luRmVhdHVyZS5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZTdjY2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RQbHVnaW5GZWF0dXJlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ODQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFBsdWdpbkZlYXR1cmU6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBsdWdpbkZlYXR1cmUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFBsdWdpbkZlYXR1cmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFBsdWdpbi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UGx1Z2luRmVhdHVyZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9oMj4KLTxwPkdzdFBsdWdpbkZlYXR1cmUg4oCUIEJhc2UgY2xhc3MgZm9yIGNvbnRlbnRzIG9mIGEgR3N0UGx1Z2luPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkZlYXR1cmUuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UGx1Z2luRmVhdHVyZUZpbHRlciIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXLCoCgpIj4qR3N0UGx1Z2luRmVhdHVyZUZpbHRlcjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LXJhbmsiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmvCoCgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3Jhbms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXNldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LXJhbmsiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmvCoCgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3Jhbms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LXBsdWdpbiIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luwqAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1wbHVnaW4tbmFtZSIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luX25hbWXCoCgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxvYWQiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZMKgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1jb3B5IiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29wecKgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWXCoCgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dTVC1QTFVHSU4tRkVBVFVSRS1MSVNULURFQlVHOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX0ZFQVRVUkVfTElTVF9ERUJVRygpIj5HU1RfUExVR0lOX0ZFQVRVUkVfTElTVF9ERUJVRzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtY2hlY2stdmVyc2lvbiIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uwqAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX2NoZWNrX3ZlcnNpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXJhbmstY29tcGFyZS1mdW5jIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jwqAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGx1Z2luRmVhdHVyZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFBsdWdpbkZlYXR1cmUtc3RydWN0IiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UmFuayIgdGl0bGU9ImVudW0gR3N0UmFuayI+R3N0UmFuazwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFBsdWdpbkZlYXR1cmUKLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHJhY2VyRmFjdG9yeSI+R3N0VHJhY2VyRmFjdG9yeTwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPkdzdFR5cGVGaW5kRmFjdG9yeTwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvYT4KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkZlYXR1cmUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGFueXRoaW5nIHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlRmlsdGVyIj48L2E+PGgzPkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RQbHVnaW5GZWF0dXJlRmlsdGVyPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKmZlYXR1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIoKTwvY29kZT48L2E+Ci10byBnZXQgYSBsaXN0IG9mIHBsdWdpbmZlYXR1cmUgdGhhdCBtYXRjaCBjZXJ0YWluIGNyaXRlcmlhLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwbHVnaW5mZWF0dXJlIHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB1c2VyX2RhdGEgdGhhdCBoYXMgYmVlbiBwYXNzZWQgb24gZS5nLgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIoKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlRmlsdGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciBhIHBvc2l0aXZlIG1hdGNoLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLXNldC1yYW5rIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFua8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcmFuazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TcGVjaWZpZXMgYSByYW5rIGZvciBhIHBsdWdpbiBmZWF0dXJlLCBzbyB0aGF0IGF1dG9wbHVnZ2luZyB1c2VzCi10aGUgbW9zdCBhcHByb3ByaWF0ZSBmZWF0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1zZXQtcmFuay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZmVhdHVyZSB0byByYW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJhbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5yYW5rIHZhbHVlIC0gaGlnaGVyIG51bWJlciBtZWFucyBtb3JlIHByaW9yaXR5IHJhbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLXNldC1uYW1lIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X25hbWUoZmVhdHVyZSxuYW1lKSBnc3Rfb2JqZWN0X3NldF9uYW1lKEdTVF9PQkpFQ1RfQ0FTVChmZWF0dXJlKSxuYW1lKQotPC9wcmU+Ci08cD5TZXRzIHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gZmVhdHVyZSwgZ2V0dGluZyByaWQgb2YgdGhlIG9sZCBuYW1lIGlmIHRoZXJlIHdhcyBvbmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLXNldC1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IHRvIHNldCB0aGUgbmFtZSBvZi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LXJhbmsiPjwvYT48aDM+Z3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiAqZmVhdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSByYW5rIG9mIGEgcGx1Z2luIGZlYXR1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1yYW5rLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1yYW5rLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHJhbmsgb2YgdGhlIGZlYXR1cmU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUoZmVhdHVyZSkgICAgICBHU1RfT0JKRUNUX05BTUUoZmVhdHVyZSkKLTwvcHJlPgotPHA+UmV0dXJucyB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPgotLgotRm9yIGEgbmFtZWxlc3MgcGx1Z2luIGZlYXR1cmUsIHRoaXMgcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiB0byBnZXQgdGhlIG5hbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT4KLS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPgotLiBNVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1nZXQtcGx1Z2luIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgcGx1Z2luIHRoYXQgcHJvdmlkZXMgdGhpcyBmZWF0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1nZXQtcGx1Z2luLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmZWF0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1wbHVnaW4ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcGx1Z2luIHRoYXQgcHJvdmlkZXMgdGhpcwotZmVhdHVyZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiAgVW5yZWYgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gbm8KLWxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1wbHVnaW4tbmFtZSI+PC9hPjxoMz5nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKmZlYXR1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBwcm92aWRlcyB0aGlzIGZlYXR1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1wbHVnaW4tbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1nZXQtcGx1Z2luLW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgcHJvdmlkZXMgdGhpcwotZmVhdHVyZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBmZWF0dXJlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYQotcGx1Z2luLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1sb2FkIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxvYWRzIHRoZSBwbHVnaW4gY29udGFpbmluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPgotIGlmIGl0J3Mgbm90IGFscmVhZHkgbG9hZGVkLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmVhdHVyZTwvY29kZT48L2VtPgotIGlzCi11bmFmZmVjdGVkOyB1c2UgdGhlIHJldHVybiB2YWx1ZSBpbnN0ZWFkLjwvcD4KLTxwPk5vcm1hbGx5IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBsaWtlIHRoaXM6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02PC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5Hc3RQbHVnaW5GZWF0dXJlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmxvYWRlZF9mZWF0dXJlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLWxvYWRlZF9mZWF0dXJlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbG9hZCI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5mZWF0dXJlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIHByZXN1bWFibHksIHdlJ3JlIG5vIGxvbmdlciBpbnRlcmVzdGVkIGluIHRoZSBwb3RlbnRpYWxseS11bmxvYWRlZCBmZWF0dXJlPC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIj5nc3Rfb2JqZWN0X3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZmVhdHVyZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLWZlYXR1cmUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IGxvYWRlZF9mZWF0dXJlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtbG9hZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgcGx1Z2luIGZlYXR1cmUgdG8gY2hlY2suIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1sb2FkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSByZWZlcmVuY2UgdG8gdGhlIGxvYWRlZAotZmVhdHVyZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IG9uIGVycm9yLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWNvcHkiPjwvYT48aDM+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29wecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3BpZXMgdGhlIGxpc3Qgb2YgZmVhdHVyZXMuIENhbGxlciBzaG91bGQgY2FsbCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZTwvY29kZT48L2VtPgotCi13aGVuIGRvbmUgd2l0aCB0aGUgbGlzdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1jb3B5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxpc3QKLW9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5GZWF0dXJlXTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtY29weS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgotLAotd2l0aCBlYWNoIGZlYXR1cmUncyByZWZlcmVuY2UgY291bnQgaW5jcmVtZW50ZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlBsdWdpbkZlYXR1cmVdPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5VbnJlZnMgZWFjaCBtZW1iZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLSwgdGhlbiBmcmVlcyB0aGUgbGlzdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxpc3QKLW9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5GZWF0dXJlXTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUExVR0lOLUZFQVRVUkUtTElTVC1ERUJVRzpDQVBTIj48L2E+PGgzPkdTVF9QTFVHSU5fRkVBVFVSRV9MSVNUX0RFQlVHKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BMVUdJTl9GRUFUVVJFX0xJU1RfREVCVUcobGlzdCkgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZGVidWcobGlzdCkKLTwvcHJlPgotPHA+RGVidWcgdGhlIHBsdWdpbiBmZWF0dXJlIG5hbWVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVBMVUdJTi1GRUFUVVJFLUxJU1QtREVCVUcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCi1wbHVnaW4gZmVhdHVyZXMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlBsdWdpbkZlYXR1cmVdPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW4tZmVhdHVyZS1jaGVjay12ZXJzaW9uIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fbWFqb3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG1pbl9taW5vcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21pY3JvPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwbHVnaW4gZmVhdHVyZSBpcyBhdCBsZWFzdAotIHRoZSByZXF1aXJlZCB2ZXJzaW9uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWNoZWNrLXZlcnNpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fbWFqb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5taW5pbXVtIHJlcXVpcmVkIG1ham9yIHZlcnNpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWluX21pbm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWluaW11bSByZXF1aXJlZCBtaW5vciB2ZXJzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbl9taWNybzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1pbmltdW0gcmVxdWlyZWQgbWljcm8gdmVyc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLWNoZWNrLXZlcnNpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBsdWdpbiBmZWF0dXJlIGhhcyBhdCBsZWFzdAotdGhlIHJlcXVpcmVkIHZlcnNpb24sIG90aGVyd2lzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLXJhbmstY29tcGFyZS1mdW5jIj48L2E+PGgzPmdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLWdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBwMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBwMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db21wYXJlcyB0aGUgdHdvIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IGluc3RhbmNlcy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUKLXVzZWQgYXMgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0NvbXBhcmVGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0NvbXBhcmVGdW5jPC9zcGFuPjwvYT4gd2hlbiBzb3J0aW5nIGJ5IHJhbmsgYW5kIHRoZW4gYnkgbmFtZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGx1Z2luLWZlYXR1cmUtcmFuay1jb21wYXJlLWZ1bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cDE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnAyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbi1mZWF0dXJlLXJhbmstY29tcGFyZS1mdW5jLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gbmVnYXRpdmUgdmFsdWUgaWYgdGhlIHJhbmsgb2YgcDEgJmd0OyB0aGUgcmFuayBvZiBwMiBvciB0aGUgcmFua3MgYXJlCi1lcXVhbCBidXQgdGhlIG5hbWUgb2YgcDEgY29tZXMgYmVmb3JlIHRoZSBuYW1lIG9mIHAyOyB6ZXJvIGlmIHRoZSByYW5rCi1hbmQgbmFtZXMgYXJlIGVxdWFsOyBwb3NpdGl2ZSB2YWx1ZSBpZiB0aGUgcmFuayBvZiBwMSAmbHQ7IHRoZSByYW5rIG9mIHAyIG9yIHRoZQotcmFua3MgYXJlIGVxdWFsIGJ1dCB0aGUgbmFtZSBvZiBwMiBjb21lcyBiZWZvcmUgdGhlIG5hbWUgb2YgcDE8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlLXN0cnVjdCI+PC9hPjxoMz5Hc3RQbHVnaW5GZWF0dXJlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0UGx1Z2luRmVhdHVyZSBHc3RQbHVnaW5GZWF0dXJlOzwvcHJlPgotPHA+T3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJhbmsiPjwvYT48aDM+ZW51bSBHc3RSYW5rPC9oMz4KLTxwPkVsZW1lbnQgcHJpb3JpdHkgcmFua3MuIERlZmluZXMgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBhdXRvcGx1Z2dlciAob3IKLXNpbWlsYXIgcmFuay1waWNraW5nIG1lY2hhbmlzbXMsIHN1Y2ggYXMgZS5nLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtZWxlbWVudC1tYWtlLWZyb20tdXJpIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyacKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSgpPC9jb2RlPjwvYT4pCi13aWxsIGNob29zZSB0aGlzIGVsZW1lbnQgb3ZlciBhbiBhbHRlcm5hdGl2ZSBvbmUgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbi48L3A+Ci08cD5UaGVzZSBjb25zdGFudHMgc2VydmUgYXMgYSByb3VnaCBndWlkYW5jZSBmb3IgZGVmaW5pbmcgdGhlIHJhbmsgb2YgYQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4uIEFueSB2YWx1ZSBpcyB2YWxpZCwgaW5jbHVkaW5nIHZhbHVlcyBiaWdnZXIgdGhhbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9SQU5LX1BSSU1BUlk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSYW5rLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVJBTkstTk9ORTpDQVBTIj48L2E+R1NUX1JBTktfTk9ORTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD53aWxsIGJlIGNob3NlbiBsYXN0IG9yIG5vdCBhdCBhbGw8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVJBTkstTUFSR0lOQUw6Q0FQUyI+PC9hPkdTVF9SQU5LX01BUkdJTkFMPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVubGlrZWx5IHRvIGJlIGNob3NlbjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUkFOSy1TRUNPTkRBUlk6Q0FQUyI+PC9hPkdTVF9SQU5LX1NFQ09OREFSWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5saWtlbHkgdG8gYmUgY2hvc2VuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1SQU5LLVBSSU1BUlk6Q0FQUyI+PC9hPkdTVF9SQU5LX1BSSU1BUlk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+d2lsbCBiZSBjaG9zZW4gZmlyc3Q8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UGx1Z2luRmVhdHVyZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RQcmVzZXQuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0UHJlc2V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYjkxYjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RQcmVzZXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0UHJlc2V0OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCIgdGl0bGU9IkdzdFBvbGwiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCIgdGl0bGU9IkdzdFByb3RlY3Rpb25NZXRhIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFByZXNldC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UHJlc2V0Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0UHJlc2V0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UHJlc2V0LnRvcF9vZl9wYWdlIj48L2E+R3N0UHJlc2V0PC9zcGFuPjwvaDI+Ci08cD5Hc3RQcmVzZXQg4oCUIGhlbHBlciBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgcHJlc2V0czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQcmVzZXQuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1nZXQtcHJlc2V0LW5hbWVzIiB0aXRsZT0iZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzwqAoKSI+Z3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1nZXQtcHJvcGVydHktbmFtZXMiIHRpdGxlPSJnc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lc8KgKCkiPmdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWxvYWQtcHJlc2V0IiB0aXRsZT0iZ3N0X3ByZXNldF9sb2FkX3ByZXNldMKgKCkiPmdzdF9wcmVzZXRfbG9hZF9wcmVzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtc2F2ZS1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X3NhdmVfcHJlc2V0wqAoKSI+Z3N0X3ByZXNldF9zYXZlX3ByZXNldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1yZW5hbWUtcHJlc2V0IiB0aXRsZT0iZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0wqAoKSI+Z3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWRlbGV0ZS1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXTCoCgpIj5nc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtc2V0LW1ldGEiIHRpdGxlPSJnc3RfcHJlc2V0X3NldF9tZXRhwqAoKSI+Z3N0X3ByZXNldF9zZXRfbWV0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1nZXQtbWV0YSIgdGl0bGU9ImdzdF9wcmVzZXRfZ2V0X21ldGHCoCgpIj5nc3RfcHJlc2V0X2dldF9tZXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXNldC1hcHAtZGlyIiB0aXRsZT0iZ3N0X3ByZXNldF9zZXRfYXBwX2RpcsKgKCkiPmdzdF9wcmVzZXRfc2V0X2FwcF9kaXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1hcHAtZGlyIiB0aXRsZT0iZ3N0X3ByZXNldF9nZXRfYXBwX2RpcsKgKCkiPmdzdF9wcmVzZXRfZ2V0X2FwcF9kaXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtaXMtZWRpdGFibGUiIHRpdGxlPSJnc3RfcHJlc2V0X2lzX2VkaXRhYmxlwqAoKSI+Z3N0X3ByZXNldF9pc19lZGl0YWJsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFByZXNldC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0SW50ZXJmYWNlIiB0aXRsZT0ic3RydWN0IEdzdFByZXNldEludGVyZmFjZSI+R3N0UHJlc2V0SW50ZXJmYWNlPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFByZXNldC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3QvdW5zdGFibGUvR1R5cGVNb2R1bGUuaHRtbCI+R0ludGVyZmFjZTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RQcmVzZXQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQcmVzZXQuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHJlc2V0LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgaW50ZXJmYWNlIG9mZmVycyBtZXRob2RzIHRvIHF1ZXJ5IGFuZCBtYW5pcHVsYXRlIHBhcmFtZXRlciBwcmVzZXQgc2V0cy4KLUEgcHJlc2V0IGlzIGEgYnVuY2ggb2YgcHJvcGVydHkgc2V0dGluZ3MsIHRvZ2V0aGVyIHdpdGggbWV0YSBkYXRhIGFuZCBhIG5hbWUuCi1UaGUgbmFtZSBvZiBhIHByZXNldCBzZXJ2ZXMgYXMga2V5IGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscyB0byBtYW5pcHVsYXRlCi1zaW5nbGUgcHJlc2V0cy4KLUFsbCBpbnN0YW5jZXMgb2Ygb25lIHR5cGUgd2lsbCBzaGFyZSB0aGUgbGlzdCBvZiBwcmVzZXRzLiBUaGUgbGlzdCBpcyBjcmVhdGVkCi1vbiBkZW1hbmQsIGlmIHByZXNldHMgYXJlIG5vdCB1c2VkLCB0aGUgbGlzdCBpcyBub3QgY3JlYXRlZC48L3A+Ci08cD5UaGUgaW50ZXJmYWNlIGNvbWVzIHdpdGggYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRoYXQgc2VydmVzIG1vc3QgcGx1Z2lucy4KLVdyYXBwZXIgcGx1Z2lucyB3aWxsIG92ZXJyaWRlIG1vc3QgbWV0aG9kcyB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhlCi1uYXRpdmUgcHJlc2V0IGZvcm1hdCBvZiB0aG9zZSB3cmFwcGVkIHBsdWdpbnMuCi1PbmUgbWV0aG9kIHRoYXQgaXMgdXNlZnVsIHRvIGJlIG92ZXJyaWRkZW4gaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LXByb3BlcnR5LW5hbWVzIiB0aXRsZT0iZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzKCk8L2NvZGU+PC9hPi4KLVdpdGggdGhhdCBvbmUgY2FuIGNvbnRyb2wgd2hpY2ggcHJvcGVydGllcyBhcmUgc2F2ZWQgYW5kIGluIHdoaWNoIG9yZGVyLgotV2hlbiBpbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgcmVhZC1vbmx5IHByZXNldHMsIG9uZSBzaG91bGQgc2V0IHRoZSB2bWV0aG9kcwotZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXNhdmUtcHJlc2V0IiB0aXRsZT0iZ3N0X3ByZXNldF9zYXZlX3ByZXNldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ByZXNldF9zYXZlX3ByZXNldCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWRlbGV0ZS1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCgpPC9jb2RlPjwvYT4gdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LgotQXBwbGljYXRpb25zIGNhbiB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtaXMtZWRpdGFibGUiIHRpdGxlPSJnc3RfcHJlc2V0X2lzX2VkaXRhYmxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcHJlc2V0X2lzX2VkaXRhYmxlKCk8L2NvZGU+PC9hPiB0byBjaGVjayBmb3IgdGhhdC48L3A+Ci08cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBwcmVzZXRzIGxvY2F0ZWQgaW4gYSBzeXN0ZW0gZGlyZWN0b3J5LCAKLWFwcGxpY2F0aW9uIHNwZWNpZmljIGRpcmVjdG9yeSBhbmQgaW4gdGhlIHVzZXJzIGhvbWUgZGlyZWN0b3J5LiBXaGVuIGdldHRpbmcKLWEgbGlzdCBvZiBwcmVzZXRzIGluZGl2aWR1YWwgcHJlc2V0cyBhcmUgcmVhZCBhbmQgb3ZlcmxhaWQgaW4gMSkgc3lzdGVtLCAKLTIpIGFwcGxpY2F0aW9uIGFuZCAzKSB1c2VyIG9yZGVyLiBXaGVuZXZlciBhbiBlYXJsaWVyIGVudHJ5IGlzIG5ld2VyLCB0aGUKLWxhdGVyIGVudHJpZXMgd2lsbCBiZSB1cGRhdGVkLiBTaW5jZSAxLjggeW91IGNhbiBhbHNvIHByb3ZpZGUgZXh0cmEgcGF0aHMKLXdoZXJlIHRvIGZpbmQgcHJlc2V0cyB0aHJvdWdoIHRoZSBHU1RfUFJFU0VUX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuCi1QcmVzZXRzIGZvdW5kIGluIHRob3NlIHBhdGhzIHdpbGwgYmUgY29uY2lkZXJlZCBhcyAiYXBwIHByZXNldHMiLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHJlc2V0LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWdldC1wcmVzZXQtbmFtZXMiPjwvYT48aDM+Z3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqKgotZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT4gKnByZXNldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBjb3B5IG9mIHByZXNldCBuYW1lcyBhcyBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0ZXJtaW5hdGVkIHN0cmluZyBhcnJheS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWdldC1wcmVzZXQtbmFtZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByZXNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGltcGxlbWVudHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWdldC1wcmVzZXQtbmFtZXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiAgICBsaXN0IHdpdGggbmFtZXMsIHVzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdHJpbmctVXRpbGl0eS1GdW5jdGlvbnMuaHRtbCNnLXN0cmZyZWV2Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfc3RyZnJlZXYoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IGdjaGFyKl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtZ2V0LXByb3BlcnR5LW5hbWVzIj48L2E+PGgzPmdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqKgotZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIHRoZSBuYW1lcyBvZiB0aGUgR09iamVjdCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHByZXNldHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1nZXQtcHJvcGVydHktbmFtZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByZXNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGltcGxlbWVudHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWdldC1wcm9wZXJ0eS1uYW1lcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGFuCi1hcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB3aGljaCBzaG91bGQgYmUgZnJlZWQgd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdHJpbmctVXRpbGl0eS1GdW5jdGlvbnMuaHRtbCNnLXN0cmZyZWV2Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfc3RyZnJlZXYoKTwvY29kZT48L2E+IGFmdGVyIHVzZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBnY2hhcipdPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWxvYWQtcHJlc2V0Ij48L2E+PGgzPmdzdF9wcmVzZXRfbG9hZF9wcmVzZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wcmVzZXRfbG9hZF9wcmVzZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxvYWQgdGhlIGdpdmVuIHByZXNldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWxvYWQtcHJlc2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByZXNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGltcGxlbWVudHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByZXNldCBuYW1lIHRvIGxvYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtbG9hZC1wcmVzZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIHN1Y2Nlc3MsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIGUuZy4gdGhlcmUgaXMgbm8gcHJlc2V0IHdpdGggdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtc2F2ZS1wcmVzZXQiPjwvYT48aDM+Z3N0X3ByZXNldF9zYXZlX3ByZXNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ByZXNldF9zYXZlX3ByZXNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2F2ZSB0aGUgY3VycmVudCBvYmplY3Qgc2V0dGluZ3MgYXMgYSBwcmVzZXQgdW5kZXIgdGhlIGdpdmVuIG5hbWUuIElmIHRoZXJlCi1pcyBhbHJlYWR5IGEgcHJlc2V0IGJ5IHRoaXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLSBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtc2F2ZS1wcmVzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJlc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW1wbGVtZW50cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJlc2V0IG5hbWUgdG8gc2F2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1zYXZlLXByZXNldC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3Igc3VjY2VzcywgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1yZW5hbWUtcHJlc2V0Ij48L2E+PGgzPmdzdF9wcmVzZXRfcmVuYW1lX3ByZXNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT4gKnByZXNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpvbGRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuZXdfbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW5hbWVzIGEgcHJlc2V0LiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJlc2V0IGJ5IHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X25hbWU8L2NvZGU+PC9lbT4KLSBpdCB3aWxsIGJlCi1vdmVyd3JpdHRlbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LXJlbmFtZS1wcmVzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJlc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW1wbGVtZW50cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vbGRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmN1cnJlbnQgcHJlc2V0IG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmV3X25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uZXcgcHJlc2V0IG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtcmVuYW1lLXByZXNldC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3Igc3VjY2VzcywgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgZS5nLiB0aGVyZSBpcyBubyBwcmVzZXQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkX25hbWU8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWRlbGV0ZS1wcmVzZXQiPjwvYT48aDM+Z3N0X3ByZXNldF9kZWxldGVfcHJlc2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RGVsZXRlIHRoZSBnaXZlbiBwcmVzZXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1kZWxldGUtcHJlc2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByZXNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGltcGxlbWVudHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByZXNldCBuYW1lIHRvIHJlbW92ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1kZWxldGUtcHJlc2V0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciBzdWNjZXNzLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBlLmcuIHRoZXJlIGlzIG5vIHByZXNldCB3aXRoIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LXNldC1tZXRhIj48L2E+PGgzPmdzdF9wcmVzZXRfc2V0X21ldGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wcmVzZXRfc2V0X21ldGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgYSBuZXcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gZm9yIGFuIGV4aXN0aW5nIG1ldGEgZGF0YSBpdGVtIG9yIGFkZHMgYSBuZXcgaXRlbS4gTWV0YQotZGF0YSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnPC9jb2RlPjwvZW0+Ci0gbmFtZXMgY2FuIGJlIHNvbWV0aGluZyBsaWtlIGUuZy4gImNvbW1lbnQiLiBTdXBwbHlpbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciB0aGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIHdpbGwgdW5zZXQgYW4gZXhpc3RpbmcgdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1zZXQtbWV0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcmVzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhhdCBpbXBsZW1lbnRzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcmVzZXQgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tZXRhIGRhdGEgaXRlbSBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IG5ldyB2YWx1ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtc2V0LW1ldGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIHN1Y2Nlc3MsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIGUuZy4gdGhlcmUgaXMgbm8gcHJlc2V0IHdpdGggdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtZ2V0LW1ldGEiPjwvYT48aDM+Z3N0X3ByZXNldF9nZXRfbWV0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ByZXNldF9nZXRfbWV0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+ICpwcmVzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGZvciBhbiBleGlzdGluZyBtZXRhIGRhdGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPgotLiBNZXRhIGRhdGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPgotIG5hbWVzIGNhbiBiZQotc29tZXRoaW5nIGxpa2UgZS5nLiAiY29tbWVudCIuIFJldHVybmVkIHZhbHVlcyBuZWVkIHRvIGJlIHJlbGVhc2VkIHdoZW4gZG9uZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWdldC1tZXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByZXNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGF0IGltcGxlbWVudHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByZXNldCBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1ldGEgZGF0YSBpdGVtIG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdmFsdWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlZS1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1nZXQtbWV0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3Igc3VjY2VzcywgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgZS5nLiB0aGVyZSBpcyBubyBwcmVzZXQgd2l0aCB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci1vciBubyB2YWx1ZSBmb3IgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LXNldC1hcHAtZGlyIj48L2E+PGgzPmdzdF9wcmVzZXRfc2V0X2FwcF9kaXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wcmVzZXRfc2V0X2FwcF9kaXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYXBwX2RpcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIGFuIGV4dHJhIGRpcmVjdG9yeSBhcyBhbiBhYnNvbHV0ZSBwYXRoIHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbgotbG9va2luZyBmb3IgcHJlc2V0cy4gQW55IHByZXNldHMgaW4gdGhlIGFwcGxpY2F0aW9uIGRpciB3aWxsIHNoYWRvdyB0aGUgCi1zeXN0ZW0gcHJlc2V0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LXNldC1hcHAtZGlyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcHBfZGlyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGFwcGxpY2F0aW9uIHNwZWNpZmljIHByZXNldCBkaXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LXNldC1hcHAtZGlyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciBzdWNjZXNzLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgZGlyIGFscmVhZHkgaGFzIGJlZW4gc2V0PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtZ2V0LWFwcC1kaXIiPjwvYT48aDM+Z3N0X3ByZXNldF9nZXRfYXBwX2RpcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3ByZXNldF9nZXRfYXBwX2RpciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBkaXJlY3RvcnkgZm9yIGFwcGxpY2F0aW9uIHNwZWNpZmljIHByZXNldHMgaWYgc2V0IGJ5IHRoZQotYXBwbGljYXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1nZXQtYXBwLWRpci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBkaXJlY3Rvcnkgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBkb24ndCBmcmVlIG9yIG1vZGlmeQotdGhlIHN0cmluZy4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJlc2V0LWlzLWVkaXRhYmxlIj48L2E+PGgzPmdzdF9wcmVzZXRfaXNfZWRpdGFibGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wcmVzZXRfaXNfZWRpdGFibGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPiAqcHJlc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIG9uZSBjYW4gYWRkIG5ldyBwcmVzZXRzLCBjaGFuZ2UgZXhpc3Rpbmcgb25lcyBhbmQgcmVtb3ZlIHByZXNldHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByZXNldC1pcy1lZGl0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJlc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoYXQgaW1wbGVtZW50cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQcmVzZXQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wcmVzZXQtaXMtZWRpdGFibGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgcHJlc2V0cyBhcmUgZWRpdGFibGUgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgdGhleSBhcmUgc3RhdGljPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHJlc2V0Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQcmVzZXQtc3RydWN0Ij48L2E+PGgzPkdzdFByZXNldDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFByZXNldCBHc3RQcmVzZXQ7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJlc2V0PC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UiPjwvYT48aDM+c3RydWN0IEdzdFByZXNldEludGVyZmFjZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFByZXNldEludGVyZmFjZSB7Ci0gIEdUeXBlSW50ZXJmYWNlIHBhcmVudDsKLQotICAvKiBtZXRob2RzICovCi0gIGdjaGFyKiogICAgICAoKmdldF9wcmVzZXRfbmFtZXMpICAgIChHc3RQcmVzZXQgKnByZXNldCk7Ci0KLSAgZ2NoYXIqKiAgICAgICgqZ2V0X3Byb3BlcnR5X25hbWVzKSAgKEdzdFByZXNldCAqcHJlc2V0KTsKLQotICBnYm9vbGVhbiAgICAgKCpsb2FkX3ByZXNldCkgICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lKTsKLSAgZ2Jvb2xlYW4gICAgICgqc2F2ZV9wcmVzZXQpICAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSk7Ci0gIGdib29sZWFuICAgICAoKnJlbmFtZV9wcmVzZXQpICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm9sZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5ld19uYW1lKTsKLSAgZ2Jvb2xlYW4gICAgICgqZGVsZXRlX3ByZXNldCkgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSk7Ci0KLSAgZ2Jvb2xlYW4gICAgICgqc2V0X21ldGEpICAgICAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0YWcsIGNvbnN0IGdjaGFyICp2YWx1ZSk7Ci0gIGdib29sZWFuICAgICAoKmdldF9tZXRhKSAgICAgICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdGFnLCBnY2hhciAqKnZhbHVlKTsKLX07Ci08L3ByZT4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFByZXNldDwvc3Bhbj48L2E+IGludGVyZmFjZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZUludGVyZmFjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlSW50ZXJmYWNlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFByZXNldEludGVyZmFjZS5wYXJlbnQiPjwvYT5wYXJlbnQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnBhcmVudCBpbnRlcmZhY2UgdHlwZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UuZ2V0LXByZXNldC1uYW1lcyI+PC9hPmdldF9wcmVzZXRfbmFtZXM8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnZpcnR1YWwgbWV0aG9kIHRvIGdldCBsaXN0IG9mIHByZXNldHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UuZ2V0LXByb3BlcnR5LW5hbWVzIj48L2E+Z2V0X3Byb3BlcnR5X25hbWVzPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD52aXJ0dWFsIG1ldGhvZHMgdG8gZ2V0IHByb3BlcnRpZXMgdGhhdCBhcmUgcGVyc2lzdGVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFByZXNldEludGVyZmFjZS5sb2FkLXByZXNldCI+PC9hPmxvYWRfcHJlc2V0PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD52aXJ0dWFsIG1ldGhvZHMgdG8gbG9hZCBhIHByZXNldCBpbnRvIHByb3BlcnRpZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2Uuc2F2ZS1wcmVzZXQiPjwvYT5zYXZlX3ByZXNldDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dmlydHVhbCBtZXRob2RzIHRvIHNhdmUgcHJvcGVydGllcyBpbnRvIGEgcHJlc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLnJlbmFtZS1wcmVzZXQiPjwvYT5yZW5hbWVfcHJlc2V0PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD52aXJ0dWFsIG1ldGhvZHMgdG8gcmVuYW1lIGEgcHJlc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLmRlbGV0ZS1wcmVzZXQiPjwvYT5kZWxldGVfcHJlc2V0PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD52aXJ0dWFsIG1ldGhvZHMgdG8gcmVtb3ZlIGEgcHJlc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLnNldC1tZXRhIj48L2E+c2V0X21ldGE8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnZpcnR1YWwgbWV0aG9kcyB0byBzZXQgdGV4dHVhbCBtZXRhIGRhdGEgdG8gYSBwcmVzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UuZ2V0LW1ldGEiPjwvYT5nZXRfbWV0YTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dmlydHVhbCBtZXRob2RzIHRvIGdldCB0ZXh0dWFsIG1ldGEgZGF0YSBmcm9tIGEgcHJlc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0UXVlcnkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0UXVlcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA3YzFlZS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdFF1ZXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NjM4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RRdWVyeTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sIiB0aXRsZT0iR3N0UHJvdGVjdGlvbk1ldGEiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UXVlcnkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFF1ZXJ5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0UXVlcnkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RRdWVyeS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFF1ZXJ5PC9zcGFuPjwvaDI+Ci08cD5Hc3RRdWVyeSDigJQgUHJvdmlkZSBmdW5jdGlvbnMgdG8gY3JlYXRlIHF1ZXJpZXMsIGFuZCB0byBzZXQgYW5kIHBhcnNlCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlcyBpbiB0aGVtLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RRdWVyeS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1NQUtFLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9RVUVSWV9NQUtFX1RZUEUoKSI+R1NUX1FVRVJZX01BS0VfVFlQRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1UWVBFOkNBUFMiIHRpdGxlPSJHU1RfUVVFUllfVFlQRSgpIj5HU1RfUVVFUllfVFlQRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1UWVBFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9RVUVSWV9UWVBFX05BTUUoKSI+R1NUX1FVRVJZX1RZUEVfTkFNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1JUy1VUFNUUkVBTTpDQVBTIiB0aXRsZT0iR1NUX1FVRVJZX0lTX1VQU1RSRUFNKCkiPkdTVF9RVUVSWV9JU19VUFNUUkVBTTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1JUy1ET1dOU1RSRUFNOkNBUFMiIHRpdGxlPSJHU1RfUVVFUllfSVNfRE9XTlNUUkVBTSgpIj5HU1RfUVVFUllfSVNfRE9XTlNUUkVBTTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1JUy1TRVJJQUxJWkVEOkNBUFMiIHRpdGxlPSJHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCgpIj5HU1RfUVVFUllfSVNfU0VSSUFMSVpFRDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnlUeXBlRmxhZ3M8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS1nZXQtZmxhZ3MiIHRpdGxlPSJnc3RfcXVlcnlfdHlwZV9nZXRfZmxhZ3PCoCgpIj5nc3RfcXVlcnlfdHlwZV9nZXRfZmxhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLWdldC1uYW1lIiB0aXRsZT0iZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWXCoCgpIj5nc3RfcXVlcnlfdHlwZV9nZXRfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS10by1xdWFyayIgdGl0bGU9ImdzdF9xdWVyeV90eXBlX3RvX3F1YXJrwqAoKSI+Z3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXJlZiIgdGl0bGU9ImdzdF9xdWVyeV9yZWbCoCgpIj5nc3RfcXVlcnlfcmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj5nc3RfcXVlcnlfdW5yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWNvcHkiIHRpdGxlPSJnc3RfcXVlcnlfY29wecKgKCkiPmdzdF9xdWVyeV9jb3B5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9xdWVyeV9tYWtlX3dyaXRhYmxlKCkiPmdzdF9xdWVyeV9tYWtlX3dyaXRhYmxlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlKCkiPmdzdF9xdWVyeV9pc193cml0YWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXJlcGxhY2UiIHRpdGxlPSJnc3RfcXVlcnlfcmVwbGFjZcKgKCkiPmdzdF9xdWVyeV9yZXBsYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS13cml0YWJsZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfcXVlcnlfd3JpdGFibGVfc3RydWN0dXJlwqAoKSI+Z3N0X3F1ZXJ5X3dyaXRhYmxlX3N0cnVjdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWN1c3RvbSIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfY3VzdG9twqAoKSI+Z3N0X3F1ZXJ5X25ld19jdXN0b208L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmXCoCgpIj5nc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWNvbnZlcnQiIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2NvbnZlcnTCoCgpIj5nc3RfcXVlcnlfbmV3X2NvbnZlcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtY29udmVydCIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfY29udmVydMKgKCkiPmdzdF9xdWVyeV9zZXRfY29udmVydDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWNvbnZlcnQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfY29udmVydMKgKCkiPmdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctcG9zaXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uwqAoKSI+Z3N0X3F1ZXJ5X25ld19wb3NpdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1wb3NpdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfcG9zaXRpb27CoCgpIj5nc3RfcXVlcnlfc2V0X3Bvc2l0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtcG9zaXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb27CoCgpIj5nc3RfcXVlcnlfcGFyc2VfcG9zaXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1kdXJhdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfZHVyYXRpb27CoCgpIj5nc3RfcXVlcnlfbmV3X2R1cmF0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWR1cmF0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbsKgKCkiPmdzdF9xdWVyeV9zZXRfZHVyYXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1kdXJhdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbsKgKCkiPmdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWxhdGVuY3kiIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2xhdGVuY3nCoCgpIj5nc3RfcXVlcnlfbmV3X2xhdGVuY3k8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1sYXRlbmN5IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3nCoCgpIj5nc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1sYXRlbmN5IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5wqAoKSI+Z3N0X3F1ZXJ5X3NldF9sYXRlbmN5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctc2Vla2luZyIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfc2Vla2luZ8KgKCkiPmdzdF9xdWVyeV9uZXdfc2Vla2luZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zZWVraW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9zZWVraW5nwqAoKSI+Z3N0X3F1ZXJ5X3NldF9zZWVraW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utc2Vla2luZyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9zZWVraW5nwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1mb3JtYXRzIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19mb3JtYXRzwqAoKSI+Z3N0X3F1ZXJ5X25ld19mb3JtYXRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWZvcm1hdHMiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2Zvcm1hdHPCoCgpIj5nc3RfcXVlcnlfc2V0X2Zvcm1hdHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtZm9ybWF0c3YiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2wqAoKSI+Z3N0X3F1ZXJ5X3NldF9mb3JtYXRzdjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW4tZm9ybWF0cyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHPCoCgpIj5nc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWZvcm1hdCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0wqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1zZWdtZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19zZWdtZW50wqAoKSI+Z3N0X3F1ZXJ5X25ld19zZWdtZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXNlZ21lbnQiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3NlZ21lbnTCoCgpIj5nc3RfcXVlcnlfc2V0X3NlZ21lbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zZWdtZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnTCoCgpIj5nc3RfcXVlcnlfcGFyc2Vfc2VnbWVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWNhcHMiIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2NhcHPCoCgpIj5nc3RfcXVlcnlfbmV3X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jYXBzIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NhcHPCoCgpIj5nc3RfcXVlcnlfcGFyc2VfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1jYXBzLXJlc3VsdCIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHTCoCgpIj5nc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtY2Fwcy1yZXN1bHQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfY2Fwc19yZXN1bHTCoCgpIj5nc3RfcXVlcnlfcGFyc2VfY2Fwc19yZXN1bHQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1hY2NlcHQtY2FwcyIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfYWNjZXB0X2NhcHPCoCgpIj5nc3RfcXVlcnlfbmV3X2FjY2VwdF9jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYWNjZXB0LWNhcHMiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHPCoCgpIj5nc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYWNjZXB0LWNhcHMtcmVzdWx0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9hY2NlcHRfY2Fwc19yZXN1bHTCoCgpIj5nc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWFjY2VwdC1jYXBzLXJlc3VsdCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2Fwc19yZXN1bHTCoCgpIj5nc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHNfcmVzdWx0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctYnVmZmVyaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmfCoCgpIj5nc3RfcXVlcnlfbmV3X2J1ZmZlcmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcGVyY2VudCIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnTCoCgpIj5nc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXBlcmNlbnQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnTCoCgpIj5nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXN0YXRzIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHPCoCgpIj5nc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1zdGF0cyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHPCoCgpIj5nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3N0YXRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWJ1ZmZlcmluZy1yYW5nZSIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlwqAoKSI+Z3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcmFuZ2UiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktYWRkLWJ1ZmZlcmluZy1yYW5nZSIgdGl0bGU9ImdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlwqAoKSI+Z3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLWJ1ZmZlcmluZy1yYW5nZXMiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3Jhbmdlc8KgKCkiPmdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYnVmZmVyaW5nLXJhbmdlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2XCoCgpIj5nc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LXVyaSIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfdXJpwqAoKSI+Z3N0X3F1ZXJ5X25ld191cmk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS11cmkiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfdXJpwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3VyaTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC11cmkiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3VyacKgKCkiPmdzdF9xdWVyeV9zZXRfdXJpPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtdXJpLXJlZGlyZWN0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbsKgKCkiPmdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtdXJpLXJlZGlyZWN0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb27CoCgpIj5nc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXVyaS1yZWRpcmVjdGlvbi1wZXJtYW5lbnQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfdXJpX3JlZGlyZWN0aW9uX3Blcm1hbmVudMKgKCkiPmdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXVyaS1yZWRpcmVjdGlvbi1wZXJtYW5lbnQiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnTCoCgpIj5nc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1hbGxvY2F0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uwqAoKSI+Z3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYWxsb2NhdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1wb29sIiB0aXRsZT0iZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3Bvb2zCoCgpIj5nc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcG9vbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1wb29scyIgdGl0bGU9ImdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzwqAoKSI+Z3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1wb29sIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2zCoCgpIj5nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcG9vbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1udGgtYWxsb2NhdGlvbi1wb29sIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wb29swqAoKSI+Z3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wb29sPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVtb3ZlLW50aC1hbGxvY2F0aW9uLXBvb2wiIHRpdGxlPSJnc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3Bvb2zCoCgpIj5nc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3Bvb2w8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1wYXJhbSIgdGl0bGU9ImdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wYXJhbcKgKCkiPmdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wYXJhbTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1wYXJhbXMiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wYXJhbXPCoCgpIj5nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wYXJhbXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1wYXJhbSIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wYXJhbcKgKCkiPmdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wYXJhbTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1udGgtYWxsb2NhdGlvbi1wYXJhbSIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcGFyYW3CoCgpIj5nc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3BhcmFtPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVtb3ZlLW50aC1hbGxvY2F0aW9uLXBhcmFtIiB0aXRsZT0iZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9wYXJhbcKgKCkiPmdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcGFyYW08L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGHCoCgpIj5nc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZXRhcyIgdGl0bGU9ImdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzwqAoKSI+Z3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWV0YXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tbWV0YSIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZW1vdmUtbnRoLWFsbG9jYXRpb24tbWV0YSIgdGl0bGU9ImdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fbWV0YcKgKCkiPmdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fbWV0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZmluZC1hbGxvY2F0aW9uLW1ldGEiIHRpdGxlPSJnc3RfcXVlcnlfZmluZF9hbGxvY2F0aW9uX21ldGHCoCgpIj5nc3RfcXVlcnlfZmluZF9hbGxvY2F0aW9uX21ldGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1zY2hlZHVsaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nwqAoKSI+Z3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utc2NoZWR1bGluZyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtc2NoZWR1bGluZyIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZ8KgKCkiPmdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1zY2hlZHVsaW5nLW1vZGUiIHRpdGxlPSJnc3RfcXVlcnlfYWRkX3NjaGVkdWxpbmdfbW9kZcKgKCkiPmdzdF9xdWVyeV9hZGRfc2NoZWR1bGluZ19tb2RlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtbi1zY2hlZHVsaW5nLW1vZGVzIiB0aXRsZT0iZ3N0X3F1ZXJ5X2dldF9uX3NjaGVkdWxpbmdfbW9kZXPCoCgpIj5nc3RfcXVlcnlfZ2V0X25fc2NoZWR1bGluZ19tb2RlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRNb2RlIiB0aXRsZT0iZW51bSBHc3RQYWRNb2RlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZE1vZGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLXNjaGVkdWxpbmctbW9kZSIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9udGhfc2NoZWR1bGluZ19tb2RlwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX250aF9zY2hlZHVsaW5nX21vZGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWhhcy1zY2hlZHVsaW5nLW1vZGUiIHRpdGxlPSJnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZcKgKCkiPmdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1oYXMtc2NoZWR1bGluZy1tb2RlLXdpdGgtZmxhZ3MiIHRpdGxlPSJnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzwqAoKSI+Z3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGVfd2l0aF9mbGFnczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWRyYWluIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19kcmFpbsKgKCkiPmdzdF9xdWVyeV9uZXdfZHJhaW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1jb250ZXh0IiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19jb250ZXh0wqAoKSI+Z3N0X3F1ZXJ5X25ld19jb250ZXh0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWNvbnRleHQiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2NvbnRleHTCoCgpIj5nc3RfcXVlcnlfc2V0X2NvbnRleHQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jb250ZXh0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHTCoCgpIj5nc3RfcXVlcnlfcGFyc2VfY29udGV4dDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtY29udGV4dC10eXBlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHRfdHlwZcKgKCkiPmdzdF9xdWVyeV9wYXJzZV9jb250ZXh0X3R5cGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RRdWVyeS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGVGbGFncyI+R3N0UXVlcnlUeXBlRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVRZUEUtQk9USDpDQVBTIiB0aXRsZT0iR1NUX1FVRVJZX1RZUEVfQk9USCI+R1NUX1FVRVJZX1RZUEVfQk9USDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj5Hc3RRdWVyeVR5cGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RCdWZmZXJpbmdNb2RlIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJpbmdNb2RlIj5Hc3RCdWZmZXJpbmdNb2RlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0U2NoZWR1bGluZ0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTY2hlZHVsaW5nRmxhZ3MiPkdzdFNjaGVkdWxpbmdGbGFnczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RRdWVyeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1Cb3hlZC1UeXBlcy5odG1sIj5HQm94ZWQ8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UXVlcnkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RRdWVyeS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RRdWVyeS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5RdWVyaWVzIGNhbiBiZSBwZXJmb3JtZWQgb24gcGFkcyAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnkiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3F1ZXJ5KCk8L2NvZGU+PC9hPikgYW5kIGVsZW1lbnRzCi0oPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeSIgdGl0bGU9ImdzdF9lbGVtZW50X3F1ZXJ5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9xdWVyeSgpPC9jb2RlPjwvYT4pLiBQbGVhc2Ugbm90ZSB0aGF0IHNvbWUgcXVlcmllcyBtaWdodCBuZWVkIGEgcnVubmluZwotcGlwZWxpbmUgdG8gd29yay48L3A+Ci08cD5RdWVyaWVzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBnc3RfcXVlcnlfbmV3XyooKSBmdW5jdGlvbnMuCi1RdWVyeSB2YWx1ZXMgY2FuIGJlIHNldCB1c2luZyBnc3RfcXVlcnlfc2V0XyooKSwgYW5kIHBhcnNlZCB1c2luZwotZ3N0X3F1ZXJ5X3BhcnNlXyooKSBoZWxwZXJzLjwvcD4KLTxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gcXVlcnkgdGhlIGR1cmF0aW9uIG9mIGEgcGlwZWxpbmU6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLTEyPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5Hc3RRdWVyeSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5xdWVyeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotZ2Jvb2xlYW4gcmVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci1xdWVyeSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctZHVyYXRpb24iPmdzdF9xdWVyeV9uZXdfZHVyYXRpb248L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5HU1RfRk9STUFUX1RJTUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci1yZXMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5Ij5nc3RfZWxlbWVudF9xdWVyeTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnBpcGVsaW5lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHF1ZXJ5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5yZXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSB7PC9zcGFuPgotICBnaW50NjQgZHVyYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1kdXJhdGlvbiI+Z3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cXVlcnk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPmR1cmF0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVdhcm5pbmdzLWFuZC1Bc3NlcnRpb25zLmh0bWwjZy1wcmludCI+Z19wcmludDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2R1cmF0aW9uID0gJSZxdW90Ozwvc3Bhbj5HU1RfVElNRV9GT1JNQVQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1USU1FLUFSR1M6Q0FQUyI+R1NUX1RJTUVfQVJHUzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmR1cmF0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZWxzZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXByaW50Ij5nX3ByaW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7ZHVyYXRpb24gcXVlcnkgZmFpbGVkLi4uJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiI+Z3N0X3F1ZXJ5X3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cXVlcnk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFF1ZXJ5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUVVFUlktTUFLRS1UWVBFOkNBUFMiPjwvYT48aDM+R1NUX1FVRVJZX01BS0VfVFlQRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9RVUVSWV9NQUtFX1RZUEUobnVtLGZsYWdzKTwvcHJlPgotPHA+d2hlbiBtYWtpbmcgY3VzdG9tIHF1ZXJ5IHR5cGVzLCB1c2UgdGhpcyBtYWNybyB3aXRoIHRoZSBudW0gYW5kCi10aGUgZ2l2ZW4gZmxhZ3M8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUVVFUlktTUFLRS1UWVBFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBxdWVyeSBudW1iZXIgdG8gY3JlYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHF1ZXJ5IGZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1RVUVSWS1UWVBFOkNBUFMiPjwvYT48aDM+R1NUX1FVRVJZX1RZUEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUVVFUllfVFlQRShxdWVyeSkgICgoKEdzdFF1ZXJ5KikocXVlcnkpKS0mZ3Q7dHlwZSkKLTwvcHJlPgotPHA+R2V0IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IG9mIHRoZSBxdWVyeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUVVFUlktVFlQRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcXVlcnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1RVUVSWS1UWVBFLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfUVVFUllfVFlQRV9OQU1FKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1FVRVJZX1RZUEVfTkFNRShxdWVyeSkgKGdzdF9xdWVyeV90eXBlX2dldF9uYW1lKEdTVF9RVUVSWV9UWVBFKHF1ZXJ5KSkpCi08L3ByZT4KLTxwPkdldCBhIGNvbnN0YW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiBvZiB0aGUgcXVlcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVFVRVJZLVRZUEUtTkFNRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcXVlcnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1RVUVSWS1JUy1VUFNUUkVBTTpDQVBTIj48L2E+PGgzPkdTVF9RVUVSWV9JU19VUFNUUkVBTSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9RVUVSWV9JU19VUFNUUkVBTShldikgICAgICAgISEoR1NUX1FVRVJZX1RZUEUgKGV2KSAmYW1wOyBHU1RfUVVFUllfVFlQRV9VUFNUUkVBTSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgYW4gcXVlcnkgY2FuIHRyYXZlbCB1cHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUVVFUlktSVMtVVBTVFJFQU0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHF1ZXJ5IHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUVVFUlktSVMtRE9XTlNUUkVBTTpDQVBTIj48L2E+PGgzPkdTVF9RVUVSWV9JU19ET1dOU1RSRUFNKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1FVRVJZX0lTX0RPV05TVFJFQU0oZXYpICAgICAhIShHU1RfUVVFUllfVFlQRSAoZXYpICZhbXA7IEdTVF9RVUVSWV9UWVBFX0RPV05TVFJFQU0pCi08L3ByZT4KLTxwPkNoZWNrIGlmIGFuIHF1ZXJ5IGNhbiB0cmF2ZWwgZG93bnN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUVVFUlktSVMtRE9XTlNUUkVBTS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcXVlcnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1RVUVSWS1JUy1TRVJJQUxJWkVEOkNBUFMiPjwvYT48aDM+R1NUX1FVRVJZX0lTX1NFUklBTElaRUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUVVFUllfSVNfU0VSSUFMSVpFRChldikgICAgICEhKEdTVF9RVUVSWV9UWVBFIChldikgJmFtcDsgR1NUX1FVRVJZX1RZUEVfU0VSSUFMSVpFRCkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgYW4gcXVlcnkgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBkYXRhIHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUVVFUlktSVMtU0VSSUFMSVpFRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcXVlcnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS10eXBlLWdldC1mbGFncyI+PC9hPjxoMz5nc3RfcXVlcnlfdHlwZV9nZXRfZmxhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnlUeXBlRmxhZ3M8L3NwYW4+PC9hPgotZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2ZsYWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZUZsYWdzPC9zcGFuPjwvYT4gYXNzb2NpYXRlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWZsYWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWZsYWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGVGbGFnczwvc3Bhbj48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktdHlwZS1nZXQtbmFtZSI+PC9hPjxoMz5nc3RfcXVlcnlfdHlwZV9nZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFF1ZXJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5VHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgcHJpbnRhYmxlIG5hbWUgZm9yIHRoZSBnaXZlbiBxdWVyeSB0eXBlLiBEbyBub3QgbW9kaWZ5IG9yIGZyZWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXR5cGUtZ2V0LW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcXVlcnkgdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS10eXBlLWdldC1uYW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSByZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBuYW1lIG9mIHRoZSBxdWVyeS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXR5cGUtdG8tcXVhcmsiPjwvYT48aDM+Z3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4KLWdzdF9xdWVyeV90eXBlX3RvX3F1YXJrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gcXVlcnkgdHlwZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktdHlwZS10by1xdWFyay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBxdWVyeSB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXR5cGUtdG8tcXVhcmsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcXVhcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWVyeSB0eXBlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1yZWYiPjwvYT48aDM+Z3N0X3F1ZXJ5X3JlZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X3JlZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIGdpdmVuIHF1ZXJ5IGJ5IG9uZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB0byBpbmNyZWFzZSB0aGUgcmVmY291bnQgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXJlZi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xPC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXVucmVmIj48L2E+PGgzPmdzdF9xdWVyeV91bnJlZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV91bnJlZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkRlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIHF1ZXJ5LiBJZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUgcXVlcnkKLXdpbGwgYmUgZnJlZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXVucmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB0byBkZWNyZWFzZSB0aGUgcmVmY291bnQgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktY29weSI+PC9hPjxoMz5nc3RfcXVlcnlfY29wecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X2NvcHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3BpZXMgdGhlIGdpdmVuIHF1ZXJ5IHVzaW5nIHRoZSBjb3B5IGZ1bmN0aW9uIG9mIHRoZSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIGNvcHkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWNvcHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xPC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9xdWVyeV9tYWtlX3dyaXRhYmxlKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfcXVlcnlfbWFrZV93cml0YWJsZShxKSAgICAgIEdTVF9RVUVSWV9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHEpKSkKLTwvcHJlPgotPHA+TWFrZXMgYSB3cml0YWJsZSBxdWVyeSBmcm9tIHRoZSBnaXZlbiBxdWVyeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbWFrZS13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIG1ha2Ugd3JpdGFibGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1tYWtlLXdyaXRhYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgd3JpdGFibGUgcXVlcnkgKHBvc3NpYmx5IHNhbWUgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnE8L2NvZGU+PC9lbT4KLSkuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfcXVlcnlfaXNfd3JpdGFibGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF9xdWVyeV9pc193cml0YWJsZShxKSAgICAgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocSkpCi08L3ByZT4KLTxwPlRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IHdyaXRlIGRhdGEgaW50byBhIHF1ZXJ5J3Mgc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1pcy13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1yZXBsYWNlIj48L2E+PGgzPmdzdF9xdWVyeV9yZXBsYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcXVlcnlfcmVwbGFjZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICoqb2xkX3F1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqbmV3X3F1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1vZGlmaWVzIGEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiBUaGUKLW1vZGlmaWNhdGlvbiBpcyBkb25lIGF0b21pY2FsbHkgKHNvIHRoaXMgaXMgdXNlZnVsIGZvciBlbnN1cmluZyB0aHJlYWQgc2FmZXR5Ci1pbiBzb21lIGNhc2VzKSwgYW5kIHRoZSByZWZlcmVuY2UgY291bnRzIGFyZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgKHRoZSBvbGQKLXF1ZXJ5IGlzIHVucmVmZmVkLCB0aGUgbmV3IG9uZSBpcyByZWZmZWQpLjwvcD4KLTxwPkVpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X3F1ZXJ5PC9jb2RlPjwvZW0+Ci0gb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9xdWVyeTwvY29kZT48L2VtPgotIG1heSBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXJlcGxhY2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2xkX3F1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHRvIGJlIHJlcGxhY2VkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmV3X3F1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB0aGF0IHdpbGwKLXJlcGxhY2UgdGhlIHF1ZXJ5IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZF9xdWVyeTwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXJlcGxhY2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld19xdWVyeTwvY29kZT48L2VtPgotd2FzIGRpZmZlcmVudCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRfcXVlcnk8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktd3JpdGFibGUtc3RydWN0dXJlIj48L2E+PGgzPmdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBzdHJ1Y3R1cmUgb2YgYSBxdWVyeS4gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgd3JpdGFibGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotIHNvIHRoYXQgdGhlIHJldHVybmVkIHN0cnVjdHVyZSBpcyBndWFyYW50ZWVkIHRvIGJlIHdyaXRhYmxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS13cml0YWJsZS1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS13cml0YWJsZS1zdHJ1Y3R1cmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gb2YgdGhlIHF1ZXJ5LiBUaGUgc3RydWN0dXJlIGlzCi1zdGlsbCBvd25lZCBieSB0aGUgcXVlcnkgYW5kIHdpbGwgdGhlcmVmb3JlIGJlIGZyZWVkIHdoZW4gdGhlIHF1ZXJ5Ci1pcyB1bnJlZmZlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1jdXN0b20iPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19jdXN0b23CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLWdzdF9xdWVyeV9uZXdfY3VzdG9tICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnN0cnVjdHMgYSBuZXcgY3VzdG9tIHF1ZXJ5IG9iamVjdC4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3VucmVmKCk8L2NvZGU+PC9hPgotd2hlbiBkb25lIHdpdGggaXQuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1jdXN0b20ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBxdWVyeSB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHN0cnVjdHVyZSBmb3IgdGhlIHF1ZXJ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1jdXN0b20ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWdldC1zdHJ1Y3R1cmUiPjwvYT48aDM+Z3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9xdWVyeV9nZXRfc3RydWN0dXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgc3RydWN0dXJlIG9mIGEgcXVlcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWdldC1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1nZXQtc3RydWN0dXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IG9mIHRoZSBxdWVyeS4gVGhlIHN0cnVjdHVyZSBpcwotc3RpbGwgb3duZWQgYnkgdGhlIHF1ZXJ5IGFuZCB3aWxsIHRoZXJlZm9yZSBiZSBmcmVlZCB3aGVuIHRoZSBxdWVyeQotaXMgdW5yZWZmZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctY29udmVydCI+PC9hPjxoMz5nc3RfcXVlcnlfbmV3X2NvbnZlcnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLWdzdF9xdWVyeV9uZXdfY29udmVydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZXN0X2Zvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25zdHJ1Y3RzIGEgbmV3IGNvbnZlcnQgcXVlcnkgb2JqZWN0LiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+Ci13aGVuIGRvbmUgd2l0aCBpdC4gQSBjb252ZXJ0IHF1ZXJ5IGlzIHVzZWQgdG8gYXNrIGZvciBhIGNvbnZlcnNpb24gYmV0d2Vlbgotb25lIGZvcm1hdCBhbmQgYW5vdGhlci48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWNvbnZlcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjX2Zvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvciB0aGUgbmV3IHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHZhbHVlIHRvIGNvbnZlcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF9mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGFyZ2V0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1jb252ZXJ0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1jb252ZXJ0Ij48L2E+PGgzPmdzdF9xdWVyeV9zZXRfY29udmVydMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9zZXRfY29udmVydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzcmNfdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IGRlc3RfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QW5zd2VyIGEgY29udmVydCBxdWVyeSBieSBzZXR0aW5nIHRoZSByZXF1ZXN0ZWQgdmFsdWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtY29udmVydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjX2Zvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY192YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2UgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF9mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGVzdGluYXRpb24gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3RfdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGVzdGluYXRpb24gdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWNvbnZlcnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcGFyc2VfY29udmVydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpzcmNfZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzcmNfdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZGVzdF9mb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmRlc3RfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2UgYSBjb252ZXJ0IHF1ZXJ5IGFuc3dlci4gQW55IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZm9ybWF0PC9jb2RlPjwvZW0+Ci0sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfdmFsdWU8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3RfZm9ybWF0PC9jb2RlPjwvZW0+Ci0sCi1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3RfdmFsdWU8L2NvZGU+PC9lbT4KLSBtYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBpbiB3aGljaCBjYXNlIHRoYXQgdmFsdWUgaXMgb21pdHRlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtY29udmVydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjX2Zvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc3RvcmFnZSBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBvZiB0aGUKLXNvdXJjZSB2YWx1ZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNfdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0b3JhZ2UgZm9yIHRoZSBzb3VyY2UgdmFsdWUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF9mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0b3JhZ2UgZm9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gb2YgdGhlCi1kZXN0aW5hdGlvbiB2YWx1ZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0X3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgZGVzdGluYXRpb24gdmFsdWUsCi1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctcG9zaXRpb24iPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19wb3NpdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uc3RydWN0cyBhIG5ldyBxdWVyeSBzdHJlYW0gcG9zaXRpb24gcXVlcnkgb2JqZWN0LiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+Ci13aGVuIGRvbmUgd2l0aCBpdC4gQSBwb3NpdGlvbiBxdWVyeSBpcyB1c2VkIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHBvc2l0aW9uCi1vZiBwbGF5YmFjayBpbiB0aGUgc3RyZWFtcywgaW4gc29tZSBmb3JtYXQuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1wb3NpdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRlZmF1bHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvciB0aGUgbmV3IHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1wb3NpdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LXBvc2l0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfcG9zaXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfc2V0X3Bvc2l0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBjdXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QW5zd2VyIGEgcG9zaXRpb24gcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIHZhbHVlIGluIHRoZSBnaXZlbiBmb3JtYXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1wb3NpdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gd2l0aCBxdWVyeSB0eXBlIEdTVF9RVUVSWV9QT1NJVElPTjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVxdWVzdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jdXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcG9zaXRpb24gdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1wb3NpdGlvbiI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfcG9zaXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmN1cjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSBhIHBvc2l0aW9uIHF1ZXJ5LCB3cml0aW5nIHRoZSBmb3JtYXQgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+Ci0sIGFuZCB0aGUgcG9zaXRpb24KLWludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmN1cjwvY29kZT48L2VtPgotLCBpZiB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzIGFyZSBub24tPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1wb3NpdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IG9mIHRoZQotcG9zaXRpb24gdmFsdWVzIChtYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+KS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y3VyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiAobWF5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPikuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctZHVyYXRpb24iPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19kdXJhdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uc3RydWN0cyBhIG5ldyBzdHJlYW0gZHVyYXRpb24gcXVlcnkgb2JqZWN0IHRvIHF1ZXJ5IGluIHRoZSBnaXZlbiBmb3JtYXQuCi1Vc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gZG9uZSB3aXRoIGl0LiBBIGR1cmF0aW9uIHF1ZXJ5IHdpbGwgZ2l2ZSB0aGUKLXRvdGFsIGxlbmd0aCBvZiB0aGUgc3RyZWFtLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3VucmVmKCk8L2NvZGU+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctZHVyYXRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9yIHRoaXMgZHVyYXRpb24gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWR1cmF0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtZHVyYXRpb24iPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9kdXJhdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IGR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFuc3dlciBhIGR1cmF0aW9uIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZSBpbiB0aGUgZ2l2ZW4gZm9ybWF0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtZHVyYXRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9yIHRoZSBkdXJhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kdXJhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1kdXJhdGlvbiI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfZHVyYXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmR1cmF0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGEgZHVyYXRpb24gcXVlcnkgYW5zd2VyLiBXcml0ZSB0aGUgZm9ybWF0IG9mIHRoZSBkdXJhdGlvbiBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLSwKLWFuZCB0aGUgdmFsdWUgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHVyYXRpb248L2NvZGU+PC9lbT4KLSwgaWYgdGhlIHJlc3BlY3RpdmUgdmFyaWFibGVzIGFyZSBub24tPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1kdXJhdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IG9mIHRoZSBkdXJhdGlvbgotdmFsdWUsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZHVyYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0b3JhZ2UgZm9yIHRoZSB0b3RhbCBkdXJhdGlvbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWxhdGVuY3kiPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19sYXRlbmN5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+wqAqCi1nc3RfcXVlcnlfbmV3X2xhdGVuY3kgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uc3RydWN0cyBhIG5ldyBsYXRlbmN5IHF1ZXJ5IG9iamVjdC4KLVVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT4gd2hlbiBkb25lIHdpdGggaXQuIEEgbGF0ZW5jeSBxdWVyeSBpcyB1c3VhbGx5IHBlcmZvcm1lZAotYnkgc2lua3MgdG8gY29tcGVuc2F0ZSBmb3IgYWRkaXRpb25hbCBsYXRlbmN5IGludHJvZHVjZWQgYnkgZWxlbWVudHMgaW4gdGhlCi1waXBlbGluZS48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWxhdGVuY3kucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbGF0ZW5jeSI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfbGF0ZW5jecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqbGl2ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqbWF4X2xhdGVuY3k8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2UgYSBsYXRlbmN5IHF1ZXJ5IGFuc3dlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbGF0ZW5jeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGl2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBzdG9yYWdlIGZvciBsaXZlIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWluX2xhdGVuY3k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0b3JhZ2UgZm9yIHRoZSBtaW4gbGF0ZW5jeSBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1heF9sYXRlbmN5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgbWF4IGxhdGVuY3kgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LWxhdGVuY3kiPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9sYXRlbmN5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gbGl2ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IG1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gbWF4X2xhdGVuY3k8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QW5zd2VyIGEgbGF0ZW5jeSBxdWVyeSBieSBzZXR0aW5nIHRoZSByZXF1ZXN0ZWQgdmFsdWVzIGluIHRoZSBnaXZlbiBmb3JtYXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1sYXRlbmN5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aWYgdGhlcmUgaXMgYSBsaXZlIGVsZW1lbnQgdXBzdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWluX2xhdGVuY3k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWluaW1hbCBsYXRlbmN5IG9mIHRoZSB1cHN0cmVhbSBlbGVtZW50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfbGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtYXhpbWFsIGxhdGVuY3kgb2YgdGhlIHVwc3RyZWFtIGVsZW1lbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctc2Vla2luZyI+PC9hPjxoMz5nc3RfcXVlcnlfbmV3X3NlZWtpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLWdzdF9xdWVyeV9uZXdfc2Vla2luZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uc3RydWN0cyBhIG5ldyBxdWVyeSBvYmplY3QgZm9yIHF1ZXJ5aW5nIHNlZWtpbmcgcHJvcGVydGllcyBvZgotdGhlIHN0cmVhbS48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LXNlZWtpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZWZhdWx0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3IgdGhlIG5ldyBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctc2Vla2luZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LXNlZWtpbmciPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9zZWVraW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3NldF9zZWVraW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHNlZWthYmxlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzZWdtZW50X3N0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzZWdtZW50X2VuZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHNlZWtpbmcgcXVlcnkgcmVzdWx0IGZpZWxkcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LXNlZWtpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgdG8gc2V0IGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnRfc3RhcnQ8L2NvZGU+PC9lbT4KLWFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudF9lbmQ8L2NvZGU+PC9lbT4KLXZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWVrYWJsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZWVrYWJsZSBmbGFnIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWdtZW50X3N0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlZ21lbnRfc3RhcnQgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnRfZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlZ21lbnRfZW5kIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2Utc2Vla2luZyI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2Vfc2Vla2luZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9zZWVraW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKnNlZWthYmxlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzZWdtZW50X3N0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzZWdtZW50X2VuZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSBhIHNlZWtpbmcgcXVlcnksIHdyaXRpbmcgdGhlIGZvcm1hdCBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLSwgYW5kCi1vdGhlciByZXN1bHRzIGludG8gdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLCBpZiB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzCi1hcmUgbm9uLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1zZWVraW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfU0VFS0lORyB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZm9ybWF0IHRvIHNldCBmb3IgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50X3N0YXJ0PC9jb2RlPjwvZW0+Ci1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnRfZW5kPC9jb2RlPjwvZW0+Ci12YWx1ZXMsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vla2FibGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHNlZWthYmxlIGZsYWcgdG8gc2V0LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnRfc3RhcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHNlZ21lbnRfc3RhcnQgdG8gc2V0LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnRfZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzZWdtZW50X2VuZCB0byBzZXQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1mb3JtYXRzIj48L2E+PGgzPmdzdF9xdWVyeV9uZXdfZm9ybWF0c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X25ld19mb3JtYXRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnN0cnVjdHMgYSBuZXcgcXVlcnkgb2JqZWN0IGZvciBxdWVyeWluZyBmb3JtYXRzIG9mCi10aGUgc3RyZWFtLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3VucmVmKCk8L2NvZGU+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctZm9ybWF0cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LWZvcm1hdHMiPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9mb3JtYXRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG5fZm9ybWF0czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIGZvcm1hdHMgcXVlcnkgcmVzdWx0IGZpZWxkcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4KLS4gVGhlIG51bWJlciBvZiBmb3JtYXRzIHBhc3NlZAotbXVzdCBiZSBlcXVhbCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bl9mb3JtYXRzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1mb3JtYXRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uX2Zvcm1hdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGZvcm1hdHMgdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIG51bWJlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R3N0Rm9ybWF0czwvY29kZT48L2VtPgotZXF1YWwgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5fZm9ybWF0czwvY29kZT48L2VtPgotLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LWZvcm1hdHN2Ij48L2E+PGgzPmdzdF9xdWVyeV9zZXRfZm9ybWF0c3bCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfc2V0X2Zvcm1hdHN2ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBuX2Zvcm1hdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+ICpmb3JtYXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgZm9ybWF0cyBxdWVyeSByZXN1bHQgZmllbGRzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotLiBUaGUgbnVtYmVyIG9mIGZvcm1hdHMgcGFzc2VkCi1pbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdHM8L2NvZGU+PC9lbT4KLSBhcnJheSBtdXN0IGJlIGVxdWFsIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uX2Zvcm1hdHM8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LWZvcm1hdHN2LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uX2Zvcm1hdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGZvcm1hdHMgdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGFuIGFycmF5IGNvbnRhaW5pbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5fZm9ybWF0czwvY29kZT48L2VtPgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdzdEZvcm1hdDwvY29kZT48L2VtPgotdmFsdWVzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9bl9mb3JtYXRzXTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1uLWZvcm1hdHMiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX25fZm9ybWF0c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm5fZm9ybWF0czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSB0aGUgbnVtYmVyIG9mIGZvcm1hdHMgaW4gdGhlIGZvcm1hdHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLW4tZm9ybWF0cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bl9mb3JtYXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBudW1iZXIgb2YgZm9ybWF0cyBpbiB0aGlzIHF1ZXJ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbnRoLWZvcm1hdCI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBudGg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIHRoZSBmb3JtYXQgcXVlcnkgYW5kIHJldHJpZXZlIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnRoPC9jb2RlPjwvZW0+Ci0gZm9ybWF0IGZyb20gaXQgaW50bwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPgotLiBJZiB0aGUgbGlzdCBjb250YWlucyBsZXNzIGVsZW1lbnRzIHRoYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm50aDwvY29kZT48L2VtPgotLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+Ci0gd2lsbCBiZQotc2V0IHRvIEdTVF9GT1JNQVRfVU5ERUZJTkVELjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1udGgtZm9ybWF0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIG50aCBmb3JtYXQgdG8gcmV0cmlldmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBudGggZm9ybWF0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LXNlZ21lbnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19zZWdtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+wqAqCi1nc3RfcXVlcnlfbmV3X3NlZ21lbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnN0cnVjdHMgYSBuZXcgc2VnbWVudCBxdWVyeSBvYmplY3QuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT4KLXdoZW4gZG9uZSB3aXRoIGl0LiBBIHNlZ21lbnQgcXVlcnkgaXMgdXNlZCB0byBkaXNjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLWN1cnJlbnRseSBjb25maWd1cmVkIHNlZ21lbnQgZm9yIHBsYXliYWNrLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3VucmVmKCk8L2NvZGU+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctc2VnbWVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3IgdGhlIG5ldyBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctc2VnbWVudC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LXNlZ21lbnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9zZWdtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3NldF9zZWdtZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHJhdGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdGFydF92YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcF92YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbnN3ZXIgYSBzZWdtZW50IHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZXMuIFRoZSBub3JtYWwKLXBsYXliYWNrIHNlZ21lbnQgb2YgYSBwaXBlbGluZSBpcyAwIHRvIGR1cmF0aW9uIGF0IHRoZSBkZWZhdWx0IHJhdGUgb2YKLTEuMC4gSWYgYSBzZWVrIHdhcyBwZXJmb3JtZWQgb24gdGhlIHBpcGVsaW5lIHRvIHBsYXkgYSBkaWZmZXJlbnQKLXNlZ21lbnQsIHRoaXMgcXVlcnkgd2lsbCByZXR1cm4gdGhlIHJhbmdlIHNwZWNpZmllZCBpbiB0aGUgbGFzdCBzZWVrLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF92YWx1ZTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcF92YWx1ZTwvY29kZT48L2VtPgotIHdpbGwgcmVzcGVjdGl2ZWx5IGNvbnRhaW4gdGhlIGNvbmZpZ3VyZWQKLXBsYXliYWNrIHJhbmdlIHN0YXJ0IGFuZCBzdG9wIHZhbHVlcyBleHByZXNzZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPgotLgotVGhlIHZhbHVlcyBhcmUgYWx3YXlzIGJldHdlZW4gMCBhbmQgdGhlIGR1cmF0aW9uIG9mIHRoZSBtZWRpYSBhbmQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF92YWx1ZTwvY29kZT48L2VtPgotICZsdDs9IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wX3ZhbHVlPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+Ci0gd2lsbCBjb250YWluIHRoZSBwbGF5YmFjayByYXRlLiBGb3IKLW5lZ2F0aXZlIHJhdGVzLCBwbGF5YmFjayB3aWxsIGFjdHVhbGx5IGhhcHBlbiBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wX3ZhbHVlPC9jb2RlPjwvZW0+Ci0gdG8KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydF92YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtc2VnbWVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByYXRlIG9mIHRoZSBzZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gb2YgdGhlIHNlZ21lbnQgdmFsdWVzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdmFsdWU8L2NvZGU+PC9lbT4KLWFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcF92YWx1ZTwvY29kZT48L2VtPgotKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydF92YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGFydCB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdG9wX3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0b3AgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLXNlZ21lbnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcGFyc2Vfc2VnbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICpyYXRlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3RhcnRfdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0b3BfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2UgYSBzZWdtZW50IHF1ZXJ5IGFuc3dlci4gQW55IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yYXRlPC9jb2RlPjwvZW0+Ci0sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0X3ZhbHVlPC9jb2RlPjwvZW0+Ci0sIGFuZAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3BfdmFsdWU8L2NvZGU+PC9lbT4KLSBtYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCB3aGljaCB3aWxsIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgb21pdHRlZC48L3A+Ci08cD5TZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zZWdtZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9zZWdtZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfc2V0X3NlZ21lbnQoKTwvY29kZT48L2E+IGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1zZWdtZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgcmF0ZSBvZiB0aGUgc2VnbWVudCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0b3JhZ2UgZm9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gb2YgdGhlIHZhbHVlcywKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnRfdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0b3JhZ2UgZm9yIHRoZSBzdGFydCB2YWx1ZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdG9wX3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgc3RvcCB2YWx1ZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWNhcHMiPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+wqAqCi1nc3RfcXVlcnlfbmV3X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqZmlsdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnN0cnVjdHMgYSBuZXcgcXVlcnkgb2JqZWN0IGZvciBxdWVyeWluZyB0aGUgY2Fwcy48L3A+Ci08cD5UaGUgQ0FQUyBxdWVyeSBzaG91bGQgcmV0dXJuIHRoZSBhbGxvd2FibGUgY2FwcyBmb3IgYSBwYWQgaW4gdGhlIGNvbnRleHQKLW9mIHRoZSBlbGVtZW50J3Mgc3RhdGUsIGl0cyBsaW5rIHRvIG90aGVyIGVsZW1lbnRzLCBhbmQgdGhlIGRldmljZXMgb3IgZmlsZXMKLWl0IGhhcyBvcGVuZWQuIFRoZXNlIGNhcHMgbXVzdCBiZSBhIHN1YnNldCBvZiB0aGUgcGFkIHRlbXBsYXRlIGNhcHMuIEluIHRoZQotTlVMTCBzdGF0ZSB3aXRoIG5vIGxpbmtzLCB0aGUgQ0FQUyBxdWVyeSBzaG91bGQgaWRlYWxseSByZXR1cm4gdGhlIHNhbWUgY2FwcwotYXMgdGhlIHBhZCB0ZW1wbGF0ZS4gSW4gcmFyZSBjaXJjdW1zdGFuY2VzLCBhbiBvYmplY3QgcHJvcGVydHkgY2FuIGFmZmVjdAotdGhlIGNhcHMgcmV0dXJuZWQgYnkgdGhlIENBUFMgcXVlcnksIGJ1dCB0aGlzIGlzIGRpc2NvdXJhZ2VkLjwvcD4KLTxwPkZvciBtb3N0IGZpbHRlcnMsIHRoZSBjYXBzIHJldHVybmVkIGJ5IENBUFMgcXVlcnkgaXMgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlCi1hbGxvd2VkIGNhcHMgb24gb3RoZXIgcGFkcy4gRm9yIGRlbXV4ZXJzIGFuZCBkZWNvZGVycywgdGhlIGNhcHMgcmV0dXJuZWQgYnkKLXRoZSBzcmNwYWQncyBnZXRjYXBzIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHN0cmVhbSBkYXRhLiBBZ2FpbiwKLXRoZSBDQVBTIHF1ZXJ5IHNob3VsZCByZXR1cm4gdGhlIG1vc3Qgc3BlY2lmaWMgY2FwcyBpdCByZWFzb25hYmx5IGNhbiwgc2luY2UgdGhpcwotaGVscHMgd2l0aCBhdXRvcGx1Z2dpbmcuPC9wPgotPHA+VGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWx0ZXI8L2NvZGU+PC9lbT4KLSBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSByZXN1bHQgY2Fwcywgb25seSB0aGUgY2FwcyBtYXRjaGluZwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbHRlcjwvY29kZT48L2VtPgotIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSBDQVBTIHF1ZXJ5LiBTcGVjaWZ5aW5nIGEgZmlsdGVyIG1pZ2h0Ci1ncmVhdGx5IHJlZHVjZSB0aGUgYW1vdW50IG9mIHByb2Nlc3NpbmcgYW4gZWxlbWVudCBuZWVkcyB0byBkby48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpbHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1jYXBzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1jYXBzIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICoqZmlsdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgZmlsdGVyIGZyb20gdGhlIGNhcHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0uIFRoZSBjYXBzIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0gcmVtYWlucyB2YWxpZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBxdWVyeSB0byBwYXJzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWx0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBwb2ludGVyIHRvIHRoZSBjYXBzIGZpbHRlci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtY2Fwcy1yZXN1bHQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2FwczwvY29kZT48L2VtPgotIHJlc3VsdCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LWNhcHMtcmVzdWx0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHF1ZXJ5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgcG9pbnRlciB0byB0aGUgY2Fwcy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWNhcHMtcmVzdWx0Ij48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9jYXBzX3Jlc3VsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9jYXBzX3Jlc3VsdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICoqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIGNhcHMgcmVzdWx0IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0uIFRoZSBjYXBzIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0gcmVtYWlucyB2YWxpZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtY2Fwcy1yZXN1bHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcXVlcnkgdG8gcGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBIHBvaW50ZXIgdG8gdGhlIGNhcHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWFjY2VwdC1jYXBzIj48L2E+PGgzPmdzdF9xdWVyeV9uZXdfYWNjZXB0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLWdzdF9xdWVyeV9uZXdfYWNjZXB0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSBhcmUgYWNjZXB0ZWQuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1hY2NlcHQtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZml4ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWFjY2VwdC1jYXBzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1hY2NlcHQtY2FwcyI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBjYXBzIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0uIFRoZSBjYXBzIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4KLSByZW1haW5zCi12YWxpZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYWNjZXB0LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcXVlcnkgdG8gcGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBIHBvaW50ZXIgdG8gdGhlIGNhcHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LWFjY2VwdC1jYXBzLXJlc3VsdCI+PC9hPjxoMz5nc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9zZXRfYWNjZXB0X2NhcHNfcmVzdWx0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZXN1bHQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXN1bHQ8L2NvZGU+PC9lbT4KLSBhcyB0aGUgcmVzdWx0IGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1hY2NlcHQtY2Fwcy1yZXN1bHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUyB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlc3VsdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXN1bHQgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1hY2NlcHQtY2Fwcy1yZXN1bHQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2Fwc19yZXN1bHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKnJlc3VsdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSB0aGUgcmVzdWx0IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0gYW5kIHN0b3JlIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXN1bHQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYWNjZXB0LWNhcHMtcmVzdWx0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfQUNDRVBUX0NBUFMgdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXN1bHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5sb2NhdGlvbiBmb3IgdGhlIHJlc3VsdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWJ1ZmZlcmluZyI+PC9hPjxoMz5nc3RfcXVlcnlfbmV3X2J1ZmZlcmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnN0cnVjdHMgYSBuZXcgcXVlcnkgb2JqZWN0IGZvciBxdWVyeWluZyB0aGUgYnVmZmVyaW5nIHN0YXR1cyBvZgotYSBzdHJlYW0uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1idWZmZXJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZWZhdWx0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3IgdGhlIG5ldyBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctYnVmZmVyaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXBlcmNlbnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYnVzeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcGVyY2VudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYnVmZmVyZWQgZGF0YS4gVGhpcyBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLgotVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idXN5PC9jb2RlPjwvZW0+Ci0gaW5kaWNhdG9yIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB3aGVuIHRoZSBidWZmZXJpbmcgaXMgaW4gcHJvZ3Jlc3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcGVyY2VudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgdmFsaWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gb2YgdHlwZSBHU1RfUVVFUllfQlVGRkVSSU5HLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idXN5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aWYgYnVmZmVyaW5nIGlzIGJ1c3k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGVyY2VudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgYnVmZmVyaW5nIHBlcmNlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1wZXJjZW50Ij48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpidXN5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpwZXJjZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgcGVyY2VudGFnZSBvZiBidWZmZXJlZCBkYXRhLiBUaGlzIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuCi1UaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1c3k8L2NvZGU+PC9lbT4KLSBpbmRpY2F0b3IgaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gdGhlIGJ1ZmZlcmluZyBpcyBpbiBwcm9ncmVzcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXBlcmNlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX1FVRVJZX0JVRkZFUklORy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVzeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBpZiBidWZmZXJpbmcgaXMgYnVzeSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wZXJjZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgYnVmZmVyaW5nIHBlcmNlbnQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctc3RhdHMiPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0QnVmZmVyaW5nTW9kZSIgdGl0bGU9ImVudW0gR3N0QnVmZmVyaW5nTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcmluZ01vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYXZnX2luPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYXZnX291dDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBidWZmZXJpbmdfbGVmdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25maWd1cmVzIHRoZSBidWZmZXJpbmcgc3RhdHMgdmFsdWVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXN0YXRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9RVUVSWV9CVUZGRVJJTkcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGJ1ZmZlcmluZyBtb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmF2Z19pbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBhdmVyYWdlIGlucHV0IHJhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXZnX291dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBhdmVyYWdlIG91dHB1dCByYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcmluZ19sZWZ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW1vdW50IG9mIGJ1ZmZlcmluZyB0aW1lIGxlZnQgaW4gbWlsbGlzZWNvbmRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctc3RhdHMiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0QnVmZmVyaW5nTW9kZSIgdGl0bGU9ImVudW0gR3N0QnVmZmVyaW5nTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcmluZ01vZGU8L3NwYW4+PC9hPiAqbW9kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmF2Z19pbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmF2Z19vdXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqYnVmZmVyaW5nX2xlZnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdHMgdGhlIGJ1ZmZlcmluZyBzdGF0cyB2YWx1ZXMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXN0YXRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9RVUVSWV9CVUZGRVJJTkcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBidWZmZXJpbmcgbW9kZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hdmdfaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGF2ZXJhZ2UgaW5wdXQgcmF0ZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hdmdfb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBhdmVyYWdlIG91dHB1dCByYXQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyaW5nX2xlZnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYW1vdW50IG9mIGJ1ZmZlcmluZyB0aW1lIGxlZnQgaW4KLW1pbGxpc2Vjb25kcywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LWJ1ZmZlcmluZy1yYW5nZSI+PC9hPjxoMz5nc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0b3A8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gZXN0aW1hdGVkX3RvdGFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgYXZhaWxhYmxlIHF1ZXJ5IHJlc3VsdCBmaWVsZHMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgdG8gc2V0IGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4KLXZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGFydCB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RvcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdG9wIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lc3RpbWF0ZWRfdG90YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5lc3RpbWF0ZWQgdG90YWwgYW1vdW50IG9mIGRvd25sb2FkIHRpbWUgcmVtYWluaW5nIGluCi1taWxsaXNlY29uZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1yYW5nZSI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdGFydDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdG9wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKmVzdGltYXRlZF90b3RhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSBhbiBhdmFpbGFibGUgcXVlcnksIHdyaXRpbmcgdGhlIGZvcm1hdCBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLSwgYW5kCi1vdGhlciByZXN1bHRzIGludG8gdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLCBpZiB0aGUgcmVzcGVjdGl2ZSBwYXJhbWV0ZXJzCi1hcmUgbm9uLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9CVUZGRVJJTkcgdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGZvcm1hdCB0byBzZXQgZm9yIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudF9zdGFydDwvY29kZT48L2VtPgotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50X2VuZDwvY29kZT48L2VtPgotdmFsdWVzLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdGFydCB0byBzZXQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RvcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc3RvcCB0byBzZXQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXN0aW1hdGVkX3RvdGFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGVzdGltYXRlZCB0b3RhbCBhbW91bnQgb2YgZG93bmxvYWQKLXRpbWUgcmVtYWluaW5nIGluIG1pbGxpc2Vjb25kcywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktYWRkLWJ1ZmZlcmluZy1yYW5nZSI+PC9hPjxoMz5nc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIGJ1ZmZlcmluZy1yYW5nZXMgYXJyYXkgZmllbGQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0uIFRoZSBjdXJyZW50IGxhc3QKLXN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBhcnJheSBzaG91bGQgYmUgaW5mZXJpb3IgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWFkZC1idWZmZXJpbmctcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9CVUZGRVJJTkcgdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByYW5nZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdG9wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c3RvcCBwb3NpdGlvbiBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1hZGQtYnVmZmVyaW5nLXJhbmdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbmRpY2F0aW5nIGlmIHRoZSByYW5nZSB3YXMgYWRkZWQgb3Igbm90LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tYnVmZmVyaW5nLXJhbmdlcyI+PC9hPjxoMz5nc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3Jhbmdlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUKLWJ1ZmZlcmVkLXJhbmdlcyBhcnJheSBvZiB0aGUgcXVlcnkncyBzdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWdldC1uLWJ1ZmZlcmluZy1yYW5nZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfQlVGRkVSSU5HIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tYnVmZmVyaW5nLXJhbmdlcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSByYW5nZSBhcnJheSBzaXplIGFzIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1udGgtYnVmZmVyaW5nLXJhbmdlIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICpzdG9wPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSBhbmQgZ2V0IHRoZSBzdGFydCBhbmQgc3RvcCB2YWx1ZXMgc3RvcmVkCi1hdCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+Ci0gb2YgdGhlIGJ1ZmZlcmVkIHJhbmdlcyBhcnJheS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbnRoLWJ1ZmZlcmluZy1yYW5nZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1NUX1FVRVJZX0JVRkZFUklORyB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9zaXRpb24gaW4gdGhlIGJ1ZmZlcmVkLXJhbmdlcyBhcnJheSB0byByZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdGFydCBwb3NpdGlvbiB0byBzZXQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RvcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc3RvcCBwb3NpdGlvbiB0byBzZXQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1udGgtYnVmZmVyaW5nLXJhbmdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbmRpY2F0aW5nIGlmIHRoZSBwYXJzaW5nIHN1Y2NlZWRlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy11cmkiPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld191cmnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLWdzdF9xdWVyeV9uZXdfdXJpICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnN0cnVjdHMgYSBuZXcgcXVlcnkgVVJJIHF1ZXJ5IG9iamVjdC4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3VucmVmKCk8L2NvZGU+PC9hPgotd2hlbiBkb25lIHdpdGggaXQuIEFuIFVSSSBxdWVyeSBpcyB1c2VkIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IFVSSQotdGhhdCBpcyB1c2VkIGJ5IHRoZSBzb3VyY2Ugb3Igc2luay48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LXVyaS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtdXJpIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV91cmnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcGFyc2VfdXJpICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGFuIFVSSSBxdWVyeSwgd3JpdGluZyB0aGUgVVJJIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPgotIGFzIGEgbmV3bHkKLWFsbG9jYXRlZCBzdHJpbmcsIGlmIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlcnMgYXJlIG5vbi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uCi1GcmVlIHRoZSBzdHJpbmcgd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyIHVzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS11cmkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc3RvcmFnZSBmb3IgdGhlIGN1cnJlbnQgVVJJCi0obWF5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPikuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtdXJpIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfdXJpwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3NldF91cmkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QW5zd2VyIGEgVVJJIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC11cmkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHdpdGggcXVlcnkgdHlwZSBHU1RfUVVFUllfVVJJPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBVUkkgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS11cmktcmVkaXJlY3Rpb24iPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKip1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2UgYW4gVVJJIHF1ZXJ5LCB3cml0aW5nIHRoZSBVUkkgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXJpPC9jb2RlPjwvZW0+Ci0gYXMgYSBuZXdseQotYWxsb2NhdGVkIHN0cmluZywgaWYgdGhlIHJlc3BlY3RpdmUgcGFyYW1ldGVycyBhcmUgbm9uLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4KLUZyZWUgdGhlIHN0cmluZyB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLXVyaS1yZWRpcmVjdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgcmVkaXJlY3QgVVJJCi0obWF5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPikuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtdXJpLXJlZGlyZWN0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QW5zd2VyIGEgVVJJIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCBVUkkgcmVkaXJlY3Rpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC11cmktcmVkaXJlY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IHdpdGggcXVlcnkgdHlwZSBHU1RfUVVFUllfVVJJPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBVUkkgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS11cmktcmVkaXJlY3Rpb24tcGVybWFuZW50Ij48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpwZXJtYW5lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2UgYW4gVVJJIHF1ZXJ5LCBhbmQgc2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZXJtYW5lbnQ8L2NvZGU+PC9lbT4KLSB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlcmUgaXMgYSByZWRpcmVjdGlvbgotYW5kIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIHBlcm1hbmVudC4gSWYgYSByZWRpcmVjdGlvbiBpcyBwZXJtYW5lbnQsCi1hcHBsaWNhdGlvbnMgc2hvdWxkIHVwZGF0ZSB0aGVpciBpbnRlcm5hbCBzdG9yYWdlIG9mIHRoZSBVUkksIG90aGVyd2lzZQotdGhleSBzaG91bGQgbWFrZSBhbGwgZnV0dXJlIHJlcXVlc3RzIHRvIHRoZSBvcmlnaW5hbCBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLXVyaS1yZWRpcmVjdGlvbi1wZXJtYW5lbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBlcm1hbmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBpZiB0aGUgVVJJIHJlZGlyZWN0aW9uIGlzIHBlcm1hbmVudAotKG1heSBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4pLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LXVyaS1yZWRpcmVjdGlvbi1wZXJtYW5lbnQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBwZXJtYW5lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QW5zd2VyIGEgVVJJIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCBVUkkgcmVkaXJlY3Rpb24KLXRvIHBlcm1hbmVudCBvciBub3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC11cmktcmVkaXJlY3Rpb24tcGVybWFuZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB3aXRoIHF1ZXJ5IHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVVSSTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVJZX1VSSTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBlcm1hbmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPndoZXRoZXIgdGhlIHJlZGlyZWN0IGlzIHBlcm1hbmVudCBvciBub3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1hbGxvY2F0aW9uIj48L2E+PGgzPmdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBuZWVkX3Bvb2w8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uc3RydWN0cyBhIG5ldyBxdWVyeSBvYmplY3QgZm9yIHF1ZXJ5aW5nIHRoZSBhbGxvY2F0aW9uIHByb3BlcnRpZXMuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1hbGxvY2F0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmVnb3RpYXRlZCBjYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5lZWRfcG9vbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnJldHVybiBhIHBvb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctYWxsb2NhdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYWxsb2NhdGlvbiI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpuZWVkX3Bvb2w8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2UgYW4gYWxsb2NhdGlvbiBxdWVyeSwgd3JpdGluZyB0aGUgcmVxdWVzdGVkIGNhcHMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSBhbmQKLXdoZXRoZXIgYSBwb29sIGlzIG5lZWRlZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmVlZF9wb29sPC9jb2RlPjwvZW0+Ci0sIGlmIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlcnMKLWFyZSBub24tPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxwPlBvb2wgZGV0YWlscyBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLXBvb2xzIiB0aXRsZT0iZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzKCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1wb29sIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2zCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtYWxsb2NhdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5lZWRfcG9vbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBXaGV0aGVyIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gaXMgbmVlZGVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktYWRkLWFsbG9jYXRpb24tcG9vbCI+PC9hPjxoMz5nc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcG9vbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wb29sICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX2J1ZmZlcnM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG1heF9idWZmZXJzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgcG9vbCBwYXJhbWV0ZXJzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1wb29sLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9RVUVSWV9BTExPQ0FUSU9OLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBidWZmZXIgc2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtaW4gYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtYXggYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1wb29scyI+PC9hPjxoMz5nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29sc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUKLXBvb2wgYXJyYXkgb2YgdGhlIHF1ZXJ5J3Mgc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLXBvb2xzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLXBvb2xzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHBvb2wgYXJyYXkgc2l6ZSBhcyBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tcG9vbCI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcG9vbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKipwb29sPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1pbl9idWZmZXJzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqbWF4X2J1ZmZlcnM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBwb29sIHBhcmFtZXRlcnMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VW5yZWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvb2w8L2NvZGU+PC9lbT4KLSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gd2hlbiBpdCdzIG5vdCBuZWVkZWQgYW55IG1vcmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLW50aC1hbGxvY2F0aW9uLXBvb2wucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX1FVRVJZX0FMTE9DQVRJT04uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aW5kZXggdG8gcGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9vbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGJ1ZmZlciBzaXplLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWluIGJ1ZmZlcnMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1heF9idWZmZXJzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBtYXggYnVmZmVycy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1udGgtYWxsb2NhdGlvbi1wb29sIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcG9vbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcG9vbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gKnBvb2w8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX2J1ZmZlcnM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtYXhfYnVmZmVyczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHBvb2wgcGFyYW1ldGVycyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LW50aC1hbGxvY2F0aW9uLXBvb2wucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbmRleCB0byBtb2RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX1FVRVJZX0FMTE9DQVRJT04uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWluX2J1ZmZlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWluIGJ1ZmZlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWF4X2J1ZmZlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWF4IGJ1ZmZlcnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXJlbW92ZS1udGgtYWxsb2NhdGlvbi1wb29sIj48L2E+PGgzPmdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcG9vbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcG9vbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZSB0aGUgYWxsb2NhdGlvbiBwb29sIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotIG9mIHRoZSBhbGxvY2F0aW9uIHBvb2wgYXJyYXkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXJlbW92ZS1udGgtYWxsb2NhdGlvbi1wb29sLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9zaXRpb24gaW4gdGhlIGFsbG9jYXRpb24gcG9vbCBhcnJheSB0byByZW1vdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLXBhcmFtIj48L2E+PGgzPmdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wYXJhbcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wYXJhbSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gYW5kIGl0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyYW1zPC9jb2RlPjwvZW0+Ci0gYXMgYSBzdXBwb3J0ZWQgbWVtb3J5IGFsbG9jYXRvci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktYWRkLWFsbG9jYXRpb24tcGFyYW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWxsb2NhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBtZW1vcnkgYWxsb2NhdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJhbXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWdldC1uLWFsbG9jYXRpb24tcGFyYW1zIj48L2E+PGgzPmdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3BhcmFtc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcGFyYW1zICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlIHRoZSBudW1iZXIgb2YgdmFsdWVzIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlCi1hbGxvY2F0b3IgcGFyYW1zIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS48L3A+Ci08cD5JZiBubyBtZW1vcnkgYWxsb2NhdG9yIGlzIHNwZWNpZmllZCwgdGhlIGRvd25zdHJlYW0gZWxlbWVudCBjYW4gaGFuZGxlCi10aGUgZGVmYXVsdCBtZW1vcnkgYWxsb2NhdG9yLiBUaGUgZmlyc3QgbWVtb3J5IGFsbG9jYXRvciBpbiB0aGUgcXVlcnkKLXNob3VsZCBiZSBnZW5lcmljIGFuZCBhbGxvdyBtYXBwaW5nIHRvIHN5c3RlbSBtZW1vcnksIGFsbCBmb2xsb3dpbmcKLWFsbG9jYXRvcnMgc2hvdWxkIGJlIG9yZGVyZWQgYnkgcHJlZmVyZW5jZSB3aXRoIHRoZSBwcmVmZXJyZWQgb25lIGZpcnN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLXBhcmFtcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1wYXJhbXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgYWxsb2NhdG9yIGFycmF5IHNpemUgYXMgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLW50aC1hbGxvY2F0aW9uLXBhcmFtIj48L2E+PGgzPmdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wYXJhbcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wYXJhbSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdG9yPC9zcGFuPjwvYT4gKiphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSBhbmQgZ2V0IHRoZSBhbGxvY2F0b3IgYW5kIGl0cyBwYXJhbXMKLWF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotIG9mIHRoZSBhbGxvY2F0b3IgYXJyYXkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLW50aC1hbGxvY2F0aW9uLXBhcmFtLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9zaXRpb24gaW4gdGhlIGFsbG9jYXRvciBhcnJheSB0byByZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFsbG9jYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB2YXJpYWJsZSB0byBob2xkIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmFtczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwYXJhbWV0ZXJzIGZvciB0aGUgYWxsb2NhdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LW50aC1hbGxvY2F0aW9uLXBhcmFtIj48L2E+PGgzPmdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcGFyYW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3BhcmFtICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0aW9uUGFyYW1zPC9zcGFuPjwvYT4gKnBhcmFtczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZSBhbiBhdmFpbGFibGUgcXVlcnkgYW5kIGdldCB0aGUgYWxsb2NhdG9yIGFuZCBpdHMgcGFyYW1zCi1hdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT4KLSBvZiB0aGUgYWxsb2NhdG9yIGFycmF5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtbnRoLWFsbG9jYXRpb24tcGFyYW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb3NpdGlvbiBpbiB0aGUgYWxsb2NhdG9yIGFycmF5IHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbGxvY2F0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbmV3IGFsbG9jYXRvciB0byBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcmFtczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwYXJhbWV0ZXJzIGZvciB0aGUgYWxsb2NhdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcmVtb3ZlLW50aC1hbGxvY2F0aW9uLXBhcmFtIj48L2E+PGgzPmdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcGFyYW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3BhcmFtICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZSB0aGUgYWxsb2NhdGlvbiBwYXJhbSBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT4KLSBvZiB0aGUgYWxsb2NhdGlvbiBwYXJhbSBhcnJheS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcmVtb3ZlLW50aC1hbGxvY2F0aW9uLXBhcmFtLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9zaXRpb24gaW4gdGhlIGFsbG9jYXRpb24gcGFyYW0gYXJyYXkgdG8gcmVtb3ZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZXRhIj48L2E+PGgzPmdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gYXBpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXBpPC9jb2RlPjwvZW0+Ci0gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyYW1zPC9jb2RlPjwvZW0+Ci0gYXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgbWV0YWRhdGEgQVBJIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFwaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXRhZGF0YSBBUEk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyYW1zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEFQSSBzcGVjaWZpYyBwYXJhbWV0ZXJzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZXRhcyI+PC9hPjxoMz5nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWV0YXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUKLW1ldGEgQVBJIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZXRhcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZXRhcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBtZXRhZGF0YSBBUEkgYXJyYXkgc2l6ZSBhcyBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tbWV0YSI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWV0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVHlwZTwvc3Bhbj48L2E+Ci1nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWV0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICoqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSBhbmQgZ2V0IHRoZSBtZXRhZGF0YSBBUEkKLWF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotIG9mIHRoZSBtZXRhZGF0YSBBUEkgYXJyYXkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLW50aC1hbGxvY2F0aW9uLW1ldGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb3NpdGlvbiBpbiB0aGUgbWV0YWRhdGEgQVBJIGFycmF5IHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyYW1zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEFQSSBzcGVjaWZpYyBwYXJhbWV0ZXJzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLW50aC1hbGxvY2F0aW9uLW1ldGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIG1ldGFkYXRhIEFQSSBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXJlbW92ZS1udGgtYWxsb2NhdGlvbi1tZXRhIj48L2E+PGgzPmdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fbWV0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fbWV0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZSB0aGUgbWV0YWRhdGEgQVBJIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotIG9mIHRoZSBtZXRhZGF0YSBBUEkgYXJyYXkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXJlbW92ZS1udGgtYWxsb2NhdGlvbi1tZXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9zaXRpb24gaW4gdGhlIG1ldGFkYXRhIEFQSSBhcnJheSB0byByZW1vdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWZpbmQtYWxsb2NhdGlvbi1tZXRhIj48L2E+PGgzPmdzdF9xdWVyeV9maW5kX2FsbG9jYXRpb25fbWV0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3F1ZXJ5X2ZpbmRfYWxsb2NhdGlvbl9tZXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBhcGk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5PC9jb2RlPjwvZW0+Ci0gaGFzIG1ldGFkYXRhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcGk8L2NvZGU+PC9lbT4KLSBzZXQuIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotIHdpbGwgY29udGFpbiB0aGUgaW5kZXggd2hlcmUgdGhlIHJlcXVlc3RlZCBBUEkgYW5kIHRoZSBwYXJhbWV0ZXJzCi1jYW4gYmUgZm91bmQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWZpbmQtYWxsb2NhdGlvbi1tZXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFwaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXRhZGF0YSBBUEk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGluZGV4LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWZpbmQtYWxsb2NhdGlvbi1tZXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFwaTwvY29kZT48L2VtPgotaXMgaW4gdGhlIGxpc3Qgb2YgbWV0YWRhdGEuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctc2NoZWR1bGluZyI+PC9hPjxoMz5nc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT7CoCoKLWdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIHNjaGVkdWxpbmcgcHJvcGVydGllcy48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV91bnJlZigpPC9jb2RlPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LXNjaGVkdWxpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLXNjaGVkdWxpbmciPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0U2NoZWR1bGluZ0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTY2hlZHVsaW5nRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTY2hlZHVsaW5nRmxhZ3M8L3NwYW4+PC9hPiAqZmxhZ3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqbWluc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICptYXhzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmFsaWduPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgc2NoZWR1bGluZyBwcm9wZXJ0aWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1zY2hlZHVsaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSB2YWxpZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiBvZiB0eXBlIEdTVF9RVUVSWV9TQ0hFRFVMSU5HLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RTY2hlZHVsaW5nRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNjaGVkdWxpbmdGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNjaGVkdWxpbmdGbGFnczwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdWdnZXN0ZWQgbWluaW11bSBzaXplIG9mIHB1bGwgcmVxdWVzdHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1heHNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN1Z2dlc3RlZCBtYXhpbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0czouIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFsaWduPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdWdnZXN0ZWQgYWxpZ25tZW50IG9mIHB1bGwgcmVxdWVzdHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1zZXQtc2NoZWR1bGluZyI+PC9hPjxoMz5nc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RTY2hlZHVsaW5nRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNjaGVkdWxpbmdGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNjaGVkdWxpbmdGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1pbnNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWF4c2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBhbGlnbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHNjaGVkdWxpbmcgcHJvcGVydGllcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktc2V0LXNjaGVkdWxpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHZhbGlkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+IG9mIHR5cGUgR1NUX1FVRVJZX1NDSEVEVUxJTkcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0U2NoZWR1bGluZ0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTY2hlZHVsaW5nRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTY2hlZHVsaW5nRmxhZ3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN1Z2dlc3RlZCBtaW5pbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhzaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN1Z2dlc3RlZCBtYXhpbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbGlnbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdWdnZXN0ZWQgYWxpZ25tZW50IG9mIHB1bGwgcmVxdWVzdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWFkZC1zY2hlZHVsaW5nLW1vZGUiPjwvYT48aDM+Z3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfYWRkX3NjaGVkdWxpbmdfbW9kZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZE1vZGUiIHRpdGxlPSJlbnVtIEdzdFBhZE1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT4KLSBhcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCBzY2hlZHVsaW5nIG1vZGVzIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1hZGQtc2NoZWR1bGluZy1tb2RlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfU0NIRURVTElORyB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRNb2RlIiB0aXRsZT0iZW51bSBHc3RQYWRNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTW9kZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1nZXQtbi1zY2hlZHVsaW5nLW1vZGVzIj48L2E+PGgzPmdzdF9xdWVyeV9nZXRfbl9zY2hlZHVsaW5nX21vZGVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfcXVlcnlfZ2V0X25fc2NoZWR1bGluZ19tb2RlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIGluIHRoZQotc2NoZWR1bGluZyBtb2RlIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tc2NoZWR1bGluZy1tb2Rlcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9TQ0hFRFVMSU5HIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktZ2V0LW4tc2NoZWR1bGluZy1tb2Rlcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBzY2hlZHVsaW5nIG1vZGUgYXJyYXkgc2l6ZSBhcyBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVlcnktcGFyc2UtbnRoLXNjaGVkdWxpbmctbW9kZSI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfbnRoX3NjaGVkdWxpbmdfbW9kZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRNb2RlIiB0aXRsZT0iZW51bSBHc3RQYWRNb2RlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZE1vZGU8L3NwYW4+PC9hPgotZ3N0X3F1ZXJ5X3BhcnNlX250aF9zY2hlZHVsaW5nX21vZGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSBhbmQgZ2V0IHRoZSBzY2hlZHVsaW5nIG1vZGUKLWF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotIG9mIHRoZSBzY2hlZHVsaW5nIG1vZGVzIGFycmF5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1wYXJzZS1udGgtc2NoZWR1bGluZy1tb2RlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHU1RfUVVFUllfU0NIRURVTElORyB0eXBlIHF1ZXJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9zaXRpb24gaW4gdGhlIHNjaGVkdWxpbmcgbW9kZXMgYXJyYXkgdG8gcmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLW50aC1zY2hlZHVsaW5nLW1vZGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRNb2RlIiB0aXRsZT0iZW51bSBHc3RQYWRNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkTW9kZTwvc3Bhbj48L2E+IG9mIHRoZSBzY2hlZHVsaW5nIG1vZGUgYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1oYXMtc2NoZWR1bGluZy1tb2RlIj48L2E+PGgzPmdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZE1vZGUiIHRpdGxlPSJlbnVtIEdzdFBhZE1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4KLSBoYXMgc2NoZWR1bGluZyBtb2RlIHNldC48L3A+Ci08ZGl2IGNsYXNzPSJub3RlIj48cD4KLSAgICBXaGVuIGNoZWNraW5nIGlmIHVwc3RyZWFtIHN1cHBvcnRzIHB1bGwgbW9kZSwgaXQgaXMgdXN1YWxseSBub3QKLSAgICBlbm91Z2ggdG8ganVzdCBjaGVjayBmb3IgR1NUX1BBRF9NT0RFX1BVTEwgd2l0aCB0aGlzIGZ1bmN0aW9uLCB5b3UKLSAgICBhbHNvIHdhbnQgdG8gY2hlY2sgd2hldGhlciB0aGUgc2NoZWR1bGluZyBmbGFncyByZXR1cm5lZCBieQotICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zY2hlZHVsaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nKCk8L2NvZGU+PC9hPiBoYXZlIHRoZSBzZWVraW5nIGZsYWcgc2V0IChtZWFuaW5nCi0gICAgcmFuZG9tIGFjY2VzcyBpcyBzdXBwb3J0ZWQsIG5vdCBvbmx5IHNlcXVlbnRpYWwgcHVsbHMpLgotICA8L3A+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktaGFzLXNjaGVkdWxpbmctbW9kZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1NUX1FVRVJZX1NDSEVEVUxJTkcgdHlwZSBxdWVyeSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNjaGVkdWxpbmcgbW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWhhcy1zY2hlZHVsaW5nLW1vZGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPgotaXMgaW4gdGhlIGxpc3Qgb2Ygc2NoZWR1bGluZyBtb2Rlcy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LWhhcy1zY2hlZHVsaW5nLW1vZGUtd2l0aC1mbGFncyI+PC9hPjxoMz5nc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkTW9kZSIgdGl0bGU9ImVudW0gR3N0UGFkTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZE1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0U2NoZWR1bGluZ0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTY2hlZHVsaW5nRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTY2hlZHVsaW5nRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnk8L2NvZGU+PC9lbT4KLSBoYXMgc2NoZWR1bGluZyBtb2RlIHNldCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+Ci0gaXMgc2V0IGluCi1xdWVyeSBzY2hlZHVsaW5nIGZsYWdzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1oYXMtc2NoZWR1bGluZy1tb2RlLXdpdGgtZmxhZ3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdTVF9RVUVSWV9TQ0hFRFVMSU5HIHR5cGUgcXVlcnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzY2hlZHVsaW5nIG1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RTY2hlZHVsaW5nRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFNjaGVkdWxpbmdGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNjaGVkdWxpbmdGbGFnczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktaGFzLXNjaGVkdWxpbmctbW9kZS13aXRoLWZsYWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1vZGU8L2NvZGU+PC9lbT4KLWlzIGluIHRoZSBsaXN0IG9mIHNjaGVkdWxpbmcgbW9kZXMKLWFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmxhZ3M8L2NvZGU+PC9lbT4KLWFyZSBjb21wYXRpYmxlIHdpdGggcXVlcnkgZmxhZ3MuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctZHJhaW4iPjwvYT48aDM+Z3N0X3F1ZXJ5X25ld19kcmFpbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X25ld19kcmFpbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIGRyYWluIHN0YXRlLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS11bnJlZiIgdGl0bGU9ImdzdF9xdWVyeV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3VucmVmKCk8L2NvZGU+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWVyeS1uZXctZHJhaW4ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1jb250ZXh0Ij48L2E+PGgzPmdzdF9xdWVyeV9uZXdfY29udGV4dMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVlcnk8L3NwYW4+PC9hPsKgKgotZ3N0X3F1ZXJ5X25ld19jb250ZXh0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmNvbnRleHRfdHlwZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIHBpcGVsaW5lLWxvY2FsIGNvbnRleHQuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcXVlcnlfdW5yZWYoKTwvY29kZT48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LW5ldy1jb250ZXh0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Db250ZXh0IHR5cGUgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVlcnktbmV3LWNvbnRleHQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1jb250ZXh0Ij48L2E+PGgzPmdzdF9xdWVyeV9zZXRfY29udGV4dMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9xdWVyeV9zZXRfY29udGV4dCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+ICpjb250ZXh0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFuc3dlciBhIGNvbnRleHQgcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIGNvbnRleHQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXNldC1jb250ZXh0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiB3aXRoIHF1ZXJ5IHR5cGUgR1NUX1FVRVJZX0NPTlRFWFQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29udGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWNvbnRleHQiPjwvYT48aDM+Z3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcXVlcnlfcGFyc2VfY29udGV4dCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250ZXh0PC9zcGFuPjwvYT4gKipjb250ZXh0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgY29udGV4dCBmcm9tIHRoZSBjb250ZXh0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotLiBUaGUgY29udGV4dCByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeTwvY29kZT48L2VtPgotIHJlbWFpbnMgdmFsaWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWNvbnRleHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcXVlcnkgdG8gcGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29udGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBIHBvaW50ZXIgdG8gc3RvcmUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udGV4dDwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWNvbnRleHQtdHlwZSI+PC9hPjxoMz5nc3RfcXVlcnlfcGFyc2VfY29udGV4dF90eXBlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcXVlcnlfcGFyc2VfY29udGV4dF90eXBlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqY29udGV4dF90eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlIGEgY29udGV4dCB0eXBlIGZyb20gYW4gZXhpc3RpbmcgR1NUX1FVRVJZX0NPTlRFWFQgcXVlcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWNvbnRleHQtdHlwZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1NUX1FVRVJZX0NPTlRFWFQgdHlwZSBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGNvbnRleHQgdHlwZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXJ5LXBhcnNlLWNvbnRleHQtdHlwZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW5kaWNhdGluZyBpZiB0aGUgcGFyc2luZyBzdWNjZWVkZWQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UXVlcnkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXJ5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UXVlcnk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RRdWVyeSB7Ci0gIEdzdE1pbmlPYmplY3QgbWluaV9vYmplY3Q7Ci0KLSAgR3N0UXVlcnlUeXBlIHR5cGU7Ci19OwotPC9wcmU+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFF1ZXJ5Lm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFF1ZXJ5LXN0cnVjdC5taW5pLW9iamVjdCI+PC9hPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UXVlcnktc3RydWN0LnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVlcnlUeXBlRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RRdWVyeVR5cGVGbGFnczwvaDM+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGVGbGFnczwvc3Bhbj48L2E+IGluZGljYXRlIHRoZSBhc3BlY3RzIG9mIHRoZSBkaWZmZXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeVR5cGU8L3NwYW4+PC9hPgotdmFsdWVzLiBZb3UgY2FuIGdldCB0aGUgdHlwZSBmbGFncyBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnlUeXBlPC9zcGFuPjwvYT4gd2l0aCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLWdldC1mbGFncyIgdGl0bGU9ImdzdF9xdWVyeV90eXBlX2dldF9mbGFnc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXJ5X3R5cGVfZ2V0X2ZsYWdzKCk8L2NvZGU+PC9hPiBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RRdWVyeVR5cGVGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1UWVBFLVVQU1RSRUFNOkNBUFMiPjwvYT5HU1RfUVVFUllfVFlQRV9VUFNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5TZXQgaWYgdGhlIHF1ZXJ5IGNhbiB0cmF2ZWwgdXBzdHJlYW0uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1UWVBFLURPV05TVFJFQU06Q0FQUyI+PC9hPkdTVF9RVUVSWV9UWVBFX0RPV05TVFJFQU08L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2V0IGlmIHRoZSBxdWVyeSBjYW4gdHJhdmVsIGRvd25zdHJlYW0uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1UWVBFLVNFUklBTElaRUQ6Q0FQUyI+PC9hPkdTVF9RVUVSWV9UWVBFX1NFUklBTElaRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2V0IGlmIHRoZSBxdWVyeSBzaG91bGQgYmUgc2VyaWFsaXplZCB3aXRoIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb3cuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUVVFUlktVFlQRS1CT1RIOkNBUFMiPjwvYT48aDM+R1NUX1FVRVJZX1RZUEVfQk9USDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfUVVFUllfVFlQRV9CT1RIPC9wcmU+Ci08cD5UaGUgc2FtZSB0aGluZyBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktVFlQRS1VUFNUUkVBTTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1FVRVJZX1RZUEVfVVBTVFJFQU08L3NwYW4+PC9hPiB8IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1UWVBFLURPV05TVFJFQU06Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9RVUVSWV9UWVBFX0RPV05TVFJFQU08L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXJ5VHlwZSI+PC9hPjxoMz5lbnVtIEdzdFF1ZXJ5VHlwZTwvaDM+Ci08cD5TdGFuZGFyZCBwcmVkZWZpbmVkIFF1ZXJ5IHR5cGVzPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UXVlcnlUeXBlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVFVRVJZLVVOS05PV046Q0FQUyI+PC9hPkdTVF9RVUVSWV9VTktOT1dOPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVua25vd24gcXVlcnkgdHlwZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUVVFUlktUE9TSVRJT046Q0FQUyI+PC9hPkdTVF9RVUVSWV9QT1NJVElPTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5jdXJyZW50IHBvc2l0aW9uIGluIHN0cmVhbTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUVVFUlktRFVSQVRJT046Q0FQUyI+PC9hPkdTVF9RVUVSWV9EVVJBVElPTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50b3RhbCBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1MQVRFTkNZOkNBUFMiPjwvYT5HU1RfUVVFUllfTEFURU5DWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5sYXRlbmN5IG9mIHN0cmVhbTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUVVFUlktSklUVEVSOkNBUFMiPjwvYT5HU1RfUVVFUllfSklUVEVSPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmN1cnJlbnQgaml0dGVyIG9mIHN0cmVhbTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUVVFUlktUkFURTpDQVBTIj48L2E+R1NUX1FVRVJZX1JBVEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Y3VycmVudCByYXRlIG9mIHRoZSBzdHJlYW08L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVFVRVJZLVNFRUtJTkc6Q0FQUyI+PC9hPkdTVF9RVUVSWV9TRUVLSU5HPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNlZWtpbmcgY2FwYWJpbGl0aWVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1TRUdNRU5UOkNBUFMiPjwvYT5HU1RfUVVFUllfU0VHTUVOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zZWdtZW50IHN0YXJ0L3N0b3AgcG9zaXRpb25zPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1DT05WRVJUOkNBUFMiPjwvYT5HU1RfUVVFUllfQ09OVkVSVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5jb252ZXJ0IHZhbHVlcyBiZXR3ZWVuIGZvcm1hdHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVFVRVJZLUZPUk1BVFM6Q0FQUyI+PC9hPkdTVF9RVUVSWV9GT1JNQVRTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnF1ZXJ5IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjb252ZXJ0PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1CVUZGRVJJTkc6Q0FQUyI+PC9hPkdTVF9RVUVSWV9CVUZGRVJJTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cXVlcnkgYXZhaWxhYmxlIG1lZGlhIGZvciBlZmZpY2llbnQgc2Vla2luZy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVFVRVJZLUNVU1RPTTpDQVBTIj48L2E+R1NUX1FVRVJZX0NVU1RPTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIGN1c3RvbSBhcHBsaWNhdGlvbiBvciBlbGVtZW50IGRlZmluZWQgcXVlcnkuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1VUkk6Q0FQUyI+PC9hPkdTVF9RVUVSWV9VUkk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cXVlcnkgdGhlIFVSSSBvZiB0aGUgc291cmNlIG9yIHNpbmsuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1BTExPQ0FUSU9OOkNBUFMiPjwvYT5HU1RfUVVFUllfQUxMT0NBVElPTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgYnVmZmVyIGFsbG9jYXRpb24gcHJvcGVydGllczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUVVFUlktU0NIRURVTElORzpDQVBTIj48L2E+R1NUX1FVRVJZX1NDSEVEVUxJTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHNjaGVkdWxpbmcgcHJvcGVydGllczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUVVFUlktQUNDRVBULUNBUFMiPjwvYT5HU1RfUVVFUllfQUNDRVBUX0NBUFM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGFjY2VwdCBjYXBzIHF1ZXJ5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVSWS1DQVBTIj48L2E+R1NUX1FVRVJZX0NBUFM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIGNhcHMgcXVlcnk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVFVRVJZLURSQUlOOkNBUFMiPjwvYT5HU1RfUVVFUllfRFJBSU48L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+d2FpdCB0aWxsIGFsbCBzZXJpYWxpemVkIGRhdGEgaXMgY29uc3VtZWQgZG93bnN0cmVhbTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUVVFUlktQ09OVEVYVDpDQVBTIj48L2E+R1NUX1FVRVJZX0NPTlRFWFQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cXVlcnkgdGhlIHBpcGVsaW5lLWxvY2FsIGNvbnRleHQgZnJvbQotICAgIGRvd25zdHJlYW0gb3IgdXBzdHJlYW0gKHNpbmNlIDEuMik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJ1ZmZlcmluZ01vZGUiPjwvYT48aDM+ZW51bSBHc3RCdWZmZXJpbmdNb2RlPC9oMz4KLTxwPlRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgYnVmZmVyaW5nIG1ldGhvZHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QnVmZmVyaW5nTW9kZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVJJTkctU1RSRUFNOkNBUFMiPjwvYT5HU1RfQlVGRkVSSU5HX1NUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIHNtYWxsIGFtb3VudCBvZiBkYXRhIGlzIGJ1ZmZlcmVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVJJTkctRE9XTkxPQUQ6Q0FQUyI+PC9hPkdTVF9CVUZGRVJJTkdfRE9XTkxPQUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHN0cmVhbSBpcyBiZWluZyBkb3dubG9hZGVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVJJTkctVElNRVNISUZUOkNBUFMiPjwvYT5HU1RfQlVGRkVSSU5HX1RJTUVTSElGVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgc3RyZWFtIGlzIGJlaW5nIGRvd25sb2FkZWQgaW4gYSByaW5nYnVmZmVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1CVUZGRVJJTkctTElWRTpDQVBTIj48L2E+R1NUX0JVRkZFUklOR19MSVZFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBzdHJlYW0gaXMgYSBsaXZlIHN0cmVhbTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2NoZWR1bGluZ0ZsYWdzIj48L2E+PGgzPmVudW0gR3N0U2NoZWR1bGluZ0ZsYWdzPC9oMz4KLTxwPlRoZSBkaWZmZXJlbnQgc2NoZWR1bGluZyBmbGFncy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RTY2hlZHVsaW5nRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0NIRURVTElORy1GTEFHLVNFRUtBQkxFOkNBUFMiPjwvYT5HU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmlmIHNlZWtpbmcgaXMgcG9zc2libGU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNDSEVEVUxJTkctRkxBRy1TRVFVRU5USUFMOkNBUFMiPjwvYT5HU1RfU0NIRURVTElOR19GTEFHX1NFUVVFTlRJQUw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+aWYgc2VxdWVudGlhbCBhY2Nlc3MgaXMgcmVjb21tZW5kZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNDSEVEVUxJTkctRkxBRy1CQU5EV0lEVEgtTElNSVRFRDpDQVBTIj48L2E+R1NUX1NDSEVEVUxJTkdfRkxBR19CQU5EV0lEVEhfTElNSVRFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5pZiBiYW5kd2lkdGggaXMgbGltaXRlZCBhbmQgYnVmZmVyaW5nIHBvc3NpYmxlIChzaW5jZSAxLjIpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFF1ZXJ5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RSZWdpc3RyeS5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RSZWdpc3RyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDJhYzAzLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0UmVnaXN0cnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExMDEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFJlZ2lzdHJ5OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RSZWdpc3RyeS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UmVnaXN0cnkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UmVnaXN0cnkuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0UmVnaXN0cnkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RSZWdpc3RyeS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvaDI+Ci08cD5Hc3RSZWdpc3RyeSDigJQgQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbWFuYWdlbWVudCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiBvYmplY3RzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFJlZ2lzdHJ5LmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0IiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2dldMKgKCkiPmdzdF9yZWdpc3RyeV9nZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0wqAoKSI+Z3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWNvb2tpZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZcKgKCkiPmdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWJ5LXBsdWdpbiIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbsKgKCkiPmdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtcGx1Z2luLWxpc3QiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0wqAoKSI+Z3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLXBsdWdpbiIgdGl0bGU9ImdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luwqAoKSI+Z3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1yZW1vdmUtcGx1Z2luIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW7CoCgpIj5nc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1wbHVnaW4tZmlsdGVyIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXLCoCgpIj5nc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1mZWF0dXJlLWZpbHRlciIgdGl0bGU9ImdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcsKgKCkiPmdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmluZC1wbHVnaW4iIHRpdGxlPSJnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW7CoCgpIj5nc3RfcmVnaXN0cnlfZmluZF9wbHVnaW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmXCoCgpIj5nc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1sb29rdXAtZmVhdHVyZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZcKgKCkiPmdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWFkZC1wYXRoIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRowqAoKSI+Z3N0X3JlZ2lzdHJ5X2FkZF9wYXRoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1wYXRoLWxpc3QiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdMKgKCkiPmdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1zY2FuLXBhdGgiIHRpdGxlPSJnc3RfcmVnaXN0cnlfc2Nhbl9wYXRowqAoKSI+Z3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktbG9va3VwIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2xvb2t1cMKgKCkiPmdzdF9yZWdpc3RyeV9sb29rdXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1yZW1vdmUtZmVhdHVyZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZcKgKCkiPmdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLWZlYXR1cmUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmXCoCgpIj5nc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWNoZWNrLWZlYXR1cmUtdmVyc2lvbiIgdGl0bGU9ImdzdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb27CoCgpIj5nc3RfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UmVnaXN0cnkuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LWZlYXR1cmUtYWRkZWQiIHRpdGxlPSJUaGUg4oCcZmVhdHVyZS1hZGRlZOKAnSBzaWduYWwiPmZlYXR1cmUtYWRkZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LXBsdWdpbi1hZGRlZCIgdGl0bGU9IlRoZSDigJxwbHVnaW4tYWRkZWTigJ0gc2lnbmFsIj5wbHVnaW4tYWRkZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UmVnaXN0cnkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNHc3RSZWdpc3RyeS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RSZWdpc3RyeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSZWdpc3RyeQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFJlZ2lzdHJ5LmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFJlZ2lzdHJ5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPk9uZSByZWdpc3RyeSBob2xkcyB0aGUgbWV0YWRhdGEgb2YgYSBzZXQgb2YgcGx1Z2lucy48L3A+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5EZXNpZ246PC9zdHJvbmc+PC9zcGFuPjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiBvYmplY3QgaXMgYSBsaXN0IG9mIHBsdWdpbnMgYW5kIHNvbWUgZnVuY3Rpb25zIGZvciBkZWFsaW5nCi13aXRoIHRoZW0uIEVhY2ggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gaXMgbWF0Y2hlZCAxLTEgd2l0aCBhIGZpbGUgb24gZGlzaywgYW5kIG1heSBvciBtYXkKLW5vdCBiZSBsb2FkZWQgYXQgYSBnaXZlbiB0aW1lLjwvcD4KLTxwPlRoZSBwcmltYXJ5IHNvdXJjZSwgYXQgYWxsIHRpbWVzLCBvZiBwbHVnaW4gaW5mb3JtYXRpb24gaXMgZWFjaCBwbHVnaW4gZmlsZQotaXRzZWxmLiBUaHVzLCBpZiBhbiBhcHBsaWNhdGlvbiB3YW50cyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgcGx1Z2luLAotb3Igd2FudHMgdG8gc2VhcmNoIGZvciBhIGZlYXR1cmUgdGhhdCBzYXRpc2ZpZXMgZ2l2ZW4gY3JpdGVyaWEsIHRoZSBwcmltYXJ5Ci1tZWFucyBvZiBkb2luZyBzbyBpcyB0byBsb2FkIGV2ZXJ5IHBsdWdpbiBhbmQgbG9vayBhdCB0aGUgcmVzdWx0aW5nCi1pbmZvcm1hdGlvbiB0aGF0IGlzIGdhdGhlcmVkIGluIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5LiBDbGVhcmx5LCB0aGlzIGlzIGEgdGltZQotY29uc3VtaW5nIHByb2Nlc3MsIHNvIHdlIGNhY2hlIGluZm9ybWF0aW9uIGluIHRoZSByZWdpc3RyeSBmaWxlLiBUaGUgZm9ybWF0Ci1hbmQgbG9jYXRpb24gb2YgdGhlIGNhY2hlIGZpbGUgaXMgaW50ZXJuYWwgdG8gZ3N0cmVhbWVyLjwvcD4KLTxwPk9uIHN0YXJ0dXAsIHBsdWdpbnMgYXJlIHNlYXJjaGVkIGZvciBpbiB0aGUgcGx1Z2luIHNlYXJjaCBwYXRoLiBUaGUgZm9sbG93aW5nCi1sb2NhdGlvbnMgYXJlIGNoZWNrZWQgaW4gdGhpcyBvcmRlcjo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+bG9jYXRpb24gZnJvbSAtLWdzdC1wbHVnaW4tcGF0aCBjb21tYW5kbGluZSBvcHRpb24uPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD50aGUgR1NUX1BMVUdJTl9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLjwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+dGhlIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5kZWZhdWx0IGxvY2F0aW9ucyAoaWYgR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBpcyBub3Qgc2V0KS4gVGhvc2UKLSAgICAgIGRlZmF1bHQgbG9jYXRpb25zIGFyZToKLSAgICAgIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+JFhER19EQVRBX0hPTUUvZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT04vcGx1Z2lucy88L2NvZGU+Ci0gICAgICBhbmQgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4kcHJlZml4L2xpYnMvZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT04vPC9jb2RlPi4KLSAgICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvYmFzZWRpci1zcGVjL2Jhc2VkaXItc3BlYy1sYXRlc3QuaHRtbCIgdGFyZ2V0PSJfdG9wIj4KLSAgICAgIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+JFhER19EQVRBX0hPTUU8L2NvZGU+PC9hPiBkZWZhdWx0cyB0bwotICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4kSE9NRS8ubG9jYWwvc2hhcmU8L2NvZGU+LgotICAgIDwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPlRoZSByZWdpc3RyeSBjYWNoZSBmaWxlIGlzIGxvYWRlZCBmcm9tCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiRYREdfQ0FDSEVfSE9NRS9nc3RyZWFtZXItJEdTVF9BUElfVkVSU0lPTi9yZWdpc3RyeS0kQVJDSC5iaW48L2NvZGU+Ci0od2hlcmU8L3A+Ci08YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9zdGFuZGFyZHMuZnJlZWRlc2t0b3Aub3JnL2Jhc2VkaXItc3BlYy9iYXNlZGlyLXNwZWMtbGF0ZXN0Lmh0bWwiIHRhcmdldD0iX3RvcCI+Ci08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiRYREdfQ0FDSEVfSE9NRTwvY29kZT48L2E+IGRlZmF1bHRzIHRvCi08cD48Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiRIT01FLy5jYWNoZTwvY29kZT4pIG9yIHRoZSBmaWxlIGxpc3RlZCBpbiB0aGUgR1NUX1JFR0lTVFJZCi1lbnYgdmFyLiBPbmUgcmVhc29uIHRvIGNoYW5nZSB0aGUgcmVnaXN0cnkgbG9jYXRpb24gaXMgZm9yIHRlc3RpbmcuPC9wPgotPHA+Rm9yIGVhY2ggcGx1Z2luIHRoYXQgaXMgZm91bmQgaW4gdGhlIHBsdWdpbiBzZWFyY2ggcGF0aCwgdGhlcmUgY291bGQgYmUgMwotcG9zc2liaWxpdGllcyBmb3IgY2FjaGVkIGluZm9ybWF0aW9uOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD50aGUgY2FjaGUgbWF5IG5vdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGEgZ2l2ZW4gZmlsZS48L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBjYWNoZSBtYXkgaGF2ZSBzdGFsZSBpbmZvcm1hdGlvbi48L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnRoZSBjYWNoZSBtYXkgaGF2ZSBjdXJyZW50IGluZm9ybWF0aW9uLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPkluIHRoZSBmaXJzdCB0d28gY2FzZXMsIHRoZSBwbHVnaW4gaXMgbG9hZGVkIGFuZCB0aGUgY2FjaGUgdXBkYXRlZC4gSW4KLWFkZGl0aW9uIHRvIHRoZXNlIGNhc2VzLCB0aGUgY2FjaGUgbWF5IGhhdmUgZW50cmllcyBmb3IgcGx1Z2lucyB0aGF0IGFyZSBub3QKLXJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuIFRoZXNlIGFyZSBtYXJrZWQgYXMgbm90IGF2YWlsYWJsZSB0byB0aGUKLWN1cnJlbnQgcHJvY2Vzcy4gSWYgdGhlIGNhY2hlIGlzIHVwZGF0ZWQgZm9yIHdoYXRldmVyIHJlYXNvbiwgaXQgaXMgbWFya2VkCi1kaXJ0eS48L3A+Ci08cD5BIGRpcnR5IGNhY2hlIGlzIHdyaXR0ZW4gb3V0IGF0IHRoZSBlbmQgb2YgaW5pdGlhbGl6YXRpb24uIEVhY2ggZW50cnkgaXMKLWNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoZSBpbmZvcm1hdGlvbiBpcyBtaW5pbWFsbHkgdmFsaWQuIElmIG5vdCwgdGhlIGVudHJ5IGlzCi1zaW1wbHkgZHJvcHBlZC48L3A+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5JbXBsZW1lbnRhdGlvbiBub3Rlczo8L3N0cm9uZz48L3NwYW4+PC9wPgotPHA+VGhlICJjYWNoZSIgYW5kICJyZWdpc3RyeSIgYXJlIGRpZmZlcmVudCBjb25jZXB0cyBhbmQgY2FuIHJlcHJlc2VudAotZGlmZmVyZW50IHNldHMgb2YgcGx1Z2lucy4gRm9yIHZhcmlvdXMgcmVhc29ucywgYXQgaW5pdCB0aW1lLCB0aGUgY2FjaGUgaXMKLXN0b3JlZCBpbiB0aGUgZGVmYXVsdCByZWdpc3RyeSwgYW5kIHBsdWdpbnMgbm90IHJlbGV2YW50IHRvIHRoZSBjdXJyZW50Ci1wcm9jZXNzIGFyZSBtYXJrZWQgd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRkxBRy1DQUNIRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QTFVHSU5fRkxBR19DQUNIRUQ8L2NvZGU+PC9hPiBiaXQuIFRoZXNlIHBsdWdpbnMgYXJlCi1yZW1vdmVkIGF0IHRoZSBlbmQgb2YgaW5pdGlhbGl6YXRpb24uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RSZWdpc3RyeS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWdldCI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZ2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+wqAqCi1nc3RfcmVnaXN0cnlfZ2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyB0aGUgc2luZ2xldG9uIHBsdWdpbiByZWdpc3RyeS4gVGhlIGNhbGxlciBkb2VzIG5vdCBvd24gYQotcmVmZXJlbmNlIG9uIHRoZSByZWdpc3RyeSwgYXMgaXQgaXMgYWxpdmUgYXMgbG9uZyBhcyBHU3RyZWFtZXIgaXMKLWluaXRpYWxpemVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0Ij48L2E+PGgzPmdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmVzIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmU8L3NwYW4+PC9hPiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+Ci0uIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2U8L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5GZWF0dXJlXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtY29va2llIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4KLWdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSByZWdpc3RyeSdzIGZlYXR1cmUgbGlzdCBjb29raWUuIFRoaXMgY2hhbmdlcwotZXZlcnkgdGltZSBhIGZlYXR1cmUgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSByZWdpc3RyeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1jb29raWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtY29va2llLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGZlYXR1cmUgbGlzdCBjb29raWUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0LWJ5LXBsdWdpbiI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW7CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZXMgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIGZlYXR1cmVzIG9mIHRoZSBwbHVnaW4gd2l0aCBuYW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtYnktcGx1Z2luLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcGx1Z2luIG5hbWUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1ieS1wbHVnaW4ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+LiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlBsdWdpbkZlYXR1cmVdPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktZ2V0LXBsdWdpbi1saXN0Ij48L2E+PGgzPmdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+ICpyZWdpc3RyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBjb3B5IG9mIGFsbCBwbHVnaW5zIHJlZ2lzdGVyZWQgaW4gdGhlIGdpdmVuIHJlZ2lzdHJ5LiBUaGUgcmVmY291bnQKLW9mIGVhY2ggZWxlbWVudCBpbiB0aGUgbGlzdCBpbiBpbmNyZW1lbnRlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktZ2V0LXBsdWdpbi1saXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWdpc3RyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZWdpc3RyeSB0byBzZWFyY2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktZ2V0LXBsdWdpbi1saXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+LgotVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fbGlzdF9mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuUGx1Z2luXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWFkZC1wbHVnaW4iPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW7CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAqcGx1Z2luPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZCB0aGUgcGx1Z2luIHRvIHRoZSByZWdpc3RyeS4gVGhlIHBsdWdpbi1hZGRlZCBzaWduYWwgd2lsbCBiZSBlbWl0dGVkLgotVGhpcyBmdW5jdGlvbiB3aWxsIHNpbmsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1hZGQtcGx1Z2luLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlZ2lzdHJ5IHRvIGFkZCB0aGUgcGx1Z2luIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgcGx1Z2luIHRvIGFkZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktYWRkLXBsdWdpbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBvbiBzdWNjZXNzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1yZW1vdmUtcGx1Z2luIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9yZW1vdmVfcGx1Z2luwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlIHRoZSBwbHVnaW4gZnJvbSB0aGUgcmVnaXN0cnkuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktcmVtb3ZlLXBsdWdpbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWdpc3RyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZWdpc3RyeSB0byByZW1vdmUgdGhlIHBsdWdpbiBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgcGx1Z2luIHRvIHJlbW92ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1wbHVnaW4tZmlsdGVyIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRmlsdGVyIiB0aXRsZT0iR3N0UGx1Z2luRmlsdGVywqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZpbHRlcjwvc3Bhbj48L2E+IGZpbHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmlyc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SdW5zIGEgZmlsdGVyIGFnYWluc3QgYWxsIHBsdWdpbnMgaW4gdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm5zIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiB3aXRoCi10aGUgcmVzdWx0cy4gSWYgdGhlIGZpcnN0IGZsYWcgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdCBtYXRjaCBpcwotcmV0dXJuZWQgKGFzIGEgbGlzdCB3aXRoIGEgc2luZ2xlIG9iamVjdCkuCi1FdmVyeSBwbHVnaW4gaXMgcmVmZmVkOyB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9saXN0X2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wbHVnaW5fbGlzdF9mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2UsIHdoaWNoCi13aWxsIHVucmVmIGFnYWluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1wbHVnaW4tZmlsdGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cmVnaXN0cnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmlsdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBmaWx0ZXIgdG8gdXNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5vbmx5IHJldHVybiBmaXJzdCBtYXRjaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1wbHVnaW4tZmlsdGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+LgotVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF9wbHVnaW5fbGlzdF9mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuUGx1Z2luXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dzdFBsdWdpbkZlYXR1cmVGaWx0ZXIiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlRmlsdGVywqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXI8L3NwYW4+PC9hPiBmaWx0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmaXJzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SdW5zIGEgZmlsdGVyIGFnYWluc3QgYWxsIGZlYXR1cmVzIG9mIHRoZSBwbHVnaW5zIGluIHRoZSByZWdpc3RyeQotYW5kIHJldHVybnMgYSBHTGlzdCB3aXRoIHRoZSByZXN1bHRzLgotSWYgdGhlIGZpcnN0IGZsYWcgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdCBtYXRjaCBpcwotcmV0dXJuZWQgKGFzIGEgbGlzdCB3aXRoIGEgc2luZ2xlIG9iamVjdCkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZlYXR1cmUtZmlsdGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cmVnaXN0cnkgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmlsdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBmaWx0ZXIgdG8gdXNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5vbmx5IHJldHVybiBmaXJzdCBtYXRjaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1mZWF0dXJlLWZpbHRlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4uIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5QbHVnaW5GZWF0dXJlXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZpbmQtcGx1Z2luIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPsKgKgotZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RmluZCB0aGUgcGx1Z2luIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIHJlZ2lzdHJ5LgotVGhlIHBsdWdpbiB3aWxsIGJlIHJlZmZlZDsgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZpbmQtcGx1Z2luLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlZ2lzdHJ5IHRvIHNlYXJjaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBsdWdpbiBuYW1lIHRvIGZpbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1maW5kLXBsdWdpbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBwbHVnaW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZQotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBwbHVnaW4gd2FzIG5vdCBmb3VuZC4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlcgotdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktZmluZC1mZWF0dXJlIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpbmQgdGhlIHBsdWdpbmZlYXR1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZSBpbiB0aGUgcmVnaXN0cnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWdpc3RyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZWdpc3RyeSB0byBzZWFyY2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwbHVnaW5mZWF0dXJlIG5hbWUgdG8gZmluZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBsdWdpbmZlYXR1cmUgdHlwZSB0byBmaW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktZmluZC1mZWF0dXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHBsdWdpbmZlYXR1cmUgd2l0aCB0aGUKLWdpdmVuIG5hbWUgYW5kIHR5cGUgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBwbHVnaW4gd2FzIG5vdAotZm91bmQuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktbG9va3VwLWZlYXR1cmUiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RmluZCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVnaXN0cnk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktbG9va3VwLWZlYXR1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVnaXN0cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZWdpc3RyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+IG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1sb29rdXAtZmVhdHVyZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gd2l0aCBpdHMgcmVmY291bnQgaW5jcmVtZW50ZWQsCi11c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktYWRkLXBhdGgiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X2FkZF9wYXRowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnBhdGg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkIHRoZSBnaXZlbiBwYXRoIHRvIHRoZSByZWdpc3RyeS4gVGhlIHN5bnRheCBvZiB0aGUKLXBhdGggaXMgc3BlY2lmaWMgdG8gdGhlIHJlZ2lzdHJ5LiBJZiB0aGUgcGF0aCBoYXMgYWxyZWFkeSBiZWVuCi1hZGRlZCwgZG8gbm90aGluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktYWRkLXBhdGgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVnaXN0cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVnaXN0cnkgdG8gYWRkIHRoZSBwYXRoIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGF0aCB0byBhZGQgdG8gdGhlIHJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtcGF0aC1saXN0Ij48L2E+PGgzPmdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbGlzdCBvZiBwYXRocyBmb3IgdGhlIGdpdmVuIHJlZ2lzdHJ5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1nZXQtcGF0aC1saXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWdpc3RyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZWdpc3RyeSB0byBnZXQgdGhlIHBhdGhsaXN0IG9mPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWdldC1wYXRoLWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgcGF0aHMgYXMKLXN0cmluZ3MuIGdfbGlzdF9mcmVlIGFmdGVyIHVzZS48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgY29udGFpbmVyIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgY29udGFpbmVyPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IGNoYXIqXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LXNjYW4tcGF0aCI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfc2Nhbl9wYXRowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcmVnaXN0cnlfc2Nhbl9wYXRoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNjYW4gdGhlIGdpdmVuIHBhdGggZm9yIHBsdWdpbnMgdG8gYWRkIHRvIHRoZSByZWdpc3RyeS4gVGhlIHN5bnRheCBvZiB0aGUKLXBhdGggaXMgc3BlY2lmaWMgdG8gdGhlIHJlZ2lzdHJ5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1zY2FuLXBhdGgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVnaXN0cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVnaXN0cnkgdG8gYWRkIGZvdW5kIHBsdWdpbnMgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGF0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXRoIHRvIHNjYW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1zY2FuLXBhdGgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgcmVnaXN0cnkgY2hhbmdlZDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktbG9va3VwIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9sb29rdXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT7CoCoKLWdzdF9yZWdpc3RyeV9sb29rdXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWxlbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Mb29rIHVwIGEgcGx1Z2luIGluIHRoZSBnaXZlbiByZWdpc3RyeSB3aXRoIHRoZSBnaXZlbiBmaWxlbmFtZS4KLUlmIGZvdW5kLCBwbHVnaW4gaXMgcmVmZmVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1sb29rdXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVnaXN0cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVnaXN0cnkgdG8gbG9vayB1cCBpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWxlbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGxvb2sgdXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1sb29rdXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gaWYgZm91bmQsIG9yCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm90LiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktcmVtb3ZlLWZlYXR1cmUiPjwvYT48aDM+Z3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKmZlYXR1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlIHRoZSBmZWF0dXJlIGZyb20gdGhlIHJlZ2lzdHJ5LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LXJlbW92ZS1mZWF0dXJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlZ2lzdHJ5IHRvIHJlbW92ZSB0aGUgZmVhdHVyZSBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZlYXR1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGZlYXR1cmUgdG8gcmVtb3ZlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWFkZC1mZWF0dXJlIj48L2E+PGgzPmdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT4gKmZlYXR1cmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkIHRoZSBmZWF0dXJlIHRvIHRoZSByZWdpc3RyeS4gVGhlIGZlYXR1cmUtYWRkZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZC4KLVRoaXMgZnVuY3Rpb24gc2lua3MgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktYWRkLWZlYXR1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVnaXN0cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVnaXN0cnkgdG8gYWRkIHRoZSBwbHVnaW4gdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZmVhdHVyZSB0byBhZGQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWFkZC1mZWF0dXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG9uIHN1Y2Nlc3MuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWNoZWNrLWZlYXR1cmUtdmVyc2lvbiI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gKnJlZ2lzdHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmZWF0dXJlX25hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX21ham9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG1pbl9taW5vcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBtaW5fbWljcm88L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIHdoZXRoZXIgYSBwbHVnaW4gZmVhdHVyZSBieSB0aGUgZ2l2ZW4gbmFtZSBleGlzdHMgaW4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWdpc3RyeTwvY29kZT48L2VtPgotIGFuZCB3aGV0aGVyIGl0cyB2ZXJzaW9uIGlzIGF0IGxlYXN0IHRoZQotdmVyc2lvbiByZXF1aXJlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktY2hlY2stZmVhdHVyZS12ZXJzaW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSAoZS5nLiAib2dnZGVtdXgiKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fbWFqb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWluaW11bSBtYWpvciB2ZXJzaW9uIG51bWJlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fbWlub3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWluaW11bSBtaW5vciB2ZXJzaW9uIG51bWJlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fbWljcm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWluaW11bSBtaWNybyB2ZXJzaW9uIG51bWJlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWNoZWNrLWZlYXR1cmUtdmVyc2lvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZmVhdHVyZSBjb3VsZCBiZSBmb3VuZCBhbmQgdGhlIHZlcnNpb24gaXMKLXRoZSBzYW1lIGFzIHRoZSByZXF1aXJlZCB2ZXJzaW9uIG9yIG5ld2VyLCBhbmQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFJlZ2lzdHJ5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSZWdpc3RyeS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJlZ2lzdHJ5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UmVnaXN0cnk7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJlZ2lzdHJ5PC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RSZWdpc3RyeS5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSZWdpc3RyeS1mZWF0dXJlLWFkZGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmVhdHVyZS1hZGRlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAgICAgICpyZWdpc3RyeSwKLSAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luRmVhdHVyZTwvc3Bhbj48L2E+ICpmZWF0dXJlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+U2lnbmFscyB0aGF0IGEgZmVhdHVyZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcmVnaXN0cnkgKHBvc3NpYmx5Ci1yZXBsYWNpbmcgYSBwcmV2aW91c2x5LWFkZGVkIG9uZSBieSB0aGUgc2FtZSBuYW1lKTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJlZ2lzdHJ5LWZlYXR1cmUtYWRkZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVnaXN0cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVnaXN0cnkgdGhhdCBlbWl0dGVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmVhdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmZWF0dXJlIHRoYXQgaGFzIGJlZW4gYWRkZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJlZ2lzdHJ5LXBsdWdpbi1hZGRlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBsdWdpbi1hZGRlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmVnaXN0cnk8L3NwYW4+PC9hPiAqcmVnaXN0cnksCi0gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiAgICpwbHVnaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+U2lnbmFscyB0aGF0IGEgcGx1Z2luIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSByZWdpc3RyeSAocG9zc2libHkKLXJlcGxhY2luZyBhIHByZXZpb3VzbHktYWRkZWQgb25lIGJ5IHRoZSBzYW1lIG5hbWUpPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UmVnaXN0cnktcGx1Z2luLWFkZGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZ2lzdHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlZ2lzdHJ5IHRoYXQgZW1pdHRlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBsdWdpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwbHVnaW4gdGhhdCBoYXMgYmVlbiBhZGRlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RSZWdpc3RyeS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW48L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQbHVnaW5GZWF0dXJlPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0U2FtcGxlLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFNhbXBsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmU4OTk4Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0U2FtcGxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFNhbXBsZTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RTYW1wbGUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFNhbXBsZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0U2FtcGxlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0U2FtcGxlLnRvcF9vZl9wYWdlIj48L2E+R3N0U2FtcGxlPC9zcGFuPjwvaDI+Ci08cD5Hc3RTYW1wbGUg4oCUIEEgbWVkaWEgc2FtcGxlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFNhbXBsZS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9zYW1wbGVfZ2V0X2J1ZmZlcsKgKCkiPmdzdF9zYW1wbGVfZ2V0X2J1ZmZlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwjZ3N0LXNhbXBsZS1nZXQtYnVmZmVyLWxpc3QiIHRpdGxlPSJnc3Rfc2FtcGxlX2dldF9idWZmZXJfbGlzdMKgKCkiPmdzdF9zYW1wbGVfZ2V0X2J1ZmZlcl9saXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLWdldC1jYXBzIiB0aXRsZT0iZ3N0X3NhbXBsZV9nZXRfY2Fwc8KgKCkiPmdzdF9zYW1wbGVfZ2V0X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLWdldC1pbmZvIiB0aXRsZT0iZ3N0X3NhbXBsZV9nZXRfaW5mb8KgKCkiPmdzdF9zYW1wbGVfZ2V0X2luZm88L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LXNlZ21lbnQiIHRpdGxlPSJnc3Rfc2FtcGxlX2dldF9zZWdtZW50wqAoKSI+Z3N0X3NhbXBsZV9nZXRfc2VnbWVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtc2V0LWJ1ZmZlci1saXN0IiB0aXRsZT0iZ3N0X3NhbXBsZV9zZXRfYnVmZmVyX2xpc3TCoCgpIj5nc3Rfc2FtcGxlX3NldF9idWZmZXJfbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwjZ3N0LXNhbXBsZS1uZXciIHRpdGxlPSJnc3Rfc2FtcGxlX25ld8KgKCkiPmdzdF9zYW1wbGVfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLXJlZiIgdGl0bGU9ImdzdF9zYW1wbGVfcmVmwqAoKSI+Z3N0X3NhbXBsZV9yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLXVucmVmIiB0aXRsZT0iZ3N0X3NhbXBsZV91bnJlZsKgKCkiPmdzdF9zYW1wbGVfdW5yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtY29weSIgdGl0bGU9ImdzdF9zYW1wbGVfY29wecKgKCkiPmdzdF9zYW1wbGVfY29weTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFNhbXBsZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI0dzdFNhbXBsZS1zdHJ1Y3QiIHRpdGxlPSJHc3RTYW1wbGUiPkdzdFNhbXBsZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U2FtcGxlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUJveGVkLVR5cGVzLmh0bWwiPkdCb3hlZDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RTYW1wbGUKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTYW1wbGUuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U2FtcGxlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4gaXMgYSBzbWFsbCBvYmplY3QgY29udGFpbmluZyBkYXRhLCBhIHR5cGUsIHRpbWluZyBhbmQKLWV4dHJhIGFyYml0cmFyeSBpbmZvcm1hdGlvbi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFNhbXBsZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1nZXQtYnVmZmVyIj48L2E+PGgzPmdzdF9zYW1wbGVfZ2V0X2J1ZmZlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X3NhbXBsZV9nZXRfYnVmZmVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4gKnNhbXBsZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1nZXQtYnVmZmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zYW1wbGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1nZXQtYnVmZmVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGJ1ZmZlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2FtcGxlPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4KLXdoZW4gdGhlcmUgaXMgbm8gYnVmZmVyLiBUaGUgYnVmZmVyIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotaXMgdmFsaWQuICBJZiB5b3UgbmVlZCB0byBob2xkIG9uIHRvIGl0IGZvciBsb25nZXIgdGhhbgotdGhhdCwgdGFrZSBhIHJlZiB0byB0aGUgYnVmZmVyIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVmIiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfcmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2FtcGxlLWdldC1idWZmZXItbGlzdCI+PC9hPjxoMz5nc3Rfc2FtcGxlX2dldF9idWZmZXJfbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3NhbXBsZV9nZXRfYnVmZmVyX2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPiAqc2FtcGxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgYnVmZmVyIGxpc3QgYXNzb2NpYXRlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zYW1wbGU8L2NvZGU+PC9lbT4KLTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtZ2V0LWJ1ZmZlci1saXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zYW1wbGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1nZXQtYnVmZmVyLWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgYnVmZmVyIGxpc3Qgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci13aGVuIHRoZXJlIGlzIG5vIGJ1ZmZlciBsaXN0LiBUaGUgYnVmZmVyIGxpc3QgcmVtYWlucyB2YWxpZCBhcyBsb25nIGFzCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2FtcGxlPC9jb2RlPjwvZW0+Ci1pcyB2YWxpZC4gIElmIHlvdSBuZWVkIHRvIGhvbGQgb24gdG8gaXQgZm9yIGxvbmdlciB0aGFuCi10aGF0LCB0YWtlIGEgcmVmIHRvIHRoZSBidWZmZXIgbGlzdCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfcmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfcmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2FtcGxlLWdldC1jYXBzIj48L2E+PGgzPmdzdF9zYW1wbGVfZ2V0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9zYW1wbGVfZ2V0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPiAqc2FtcGxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgY2FwcyBhc3NvY2lhdGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1nZXQtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2FtcGxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtZ2V0LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY2FwcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2FtcGxlPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4KLXdoZW4gdGhlcmUgaXMgbm8gY2Fwcy4gVGhlIGNhcHMgcmVtYWluIHZhbGlkIGFzIGxvbmcgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotaXMKLXZhbGlkLiAgSWYgeW91IG5lZWQgdG8gaG9sZCBvbiB0byB0aGUgY2FwcyBmb3IgbG9uZ2VyIHRoYW4gdGhhdCwKLXRha2UgYSByZWYgdG8gdGhlIGNhcHMgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlZiIgdGl0bGU9ImdzdF9jYXBzX3JlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfcmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2FtcGxlLWdldC1pbmZvIj48L2E+PGgzPmdzdF9zYW1wbGVfZ2V0X2luZm/CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9zYW1wbGVfZ2V0X2luZm8gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPiAqc2FtcGxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBleHRyYSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtZ2V0LWluZm8ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNhbXBsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2FtcGxlLWdldC1pbmZvLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGV4dHJhIGluZm8gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotLgotVGhlIGluZm8gcmVtYWlucyB2YWxpZCBhcyBsb25nIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zYW1wbGU8L2NvZGU+PC9lbT4KLWlzIHZhbGlkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2FtcGxlLWdldC1zZWdtZW50Ij48L2E+PGgzPmdzdF9zYW1wbGVfZ2V0X3NlZ21lbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9zYW1wbGVfZ2V0X3NlZ21lbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPiAqc2FtcGxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgc2VnbWVudCBhc3NvY2lhdGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1nZXQtc2VnbWVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2FtcGxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtZ2V0LXNlZ21lbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgc2VnbWVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2FtcGxlPC9jb2RlPjwvZW0+Ci0uCi1UaGUgc2VnbWVudCByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotaXMgdmFsaWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtc2V0LWJ1ZmZlci1saXN0Ij48L2E+PGgzPmdzdF9zYW1wbGVfc2V0X2J1ZmZlcl9saXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3NhbXBsZV9zZXRfYnVmZmVyX2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPiAqc2FtcGxlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqYnVmZmVyX2xpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBidWZmZXIgbGlzdCBhc3NvY2lhdGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1zZXQtYnVmZmVyLWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2FtcGxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXJfbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1uZXciPjwvYT48aDM+Z3N0X3NhbXBsZV9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT7CoCoKLWdzdF9zYW1wbGVfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4gd2l0aCB0aGUgcHJvdmlkZWQgZGV0YWlscy48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3Rfc2FtcGxlX3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmZvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPi4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtdW5yZWYiIHRpdGxlPSJnc3Rfc2FtcGxlX3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2FtcGxlX3VucmVmKCk8L2NvZGU+PC9hPgotYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtcmVmIj48L2E+PGgzPmdzdF9zYW1wbGVfcmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+wqAqCi1nc3Rfc2FtcGxlX3JlZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+ICpzYW1wbGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZ2l2ZW4gc2FtcGxlIGJ5IG9uZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2FtcGxlLXJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2FtcGxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtcmVmLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2FtcGxlLXVucmVmIj48L2E+PGgzPmdzdF9zYW1wbGVfdW5yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfc2FtcGxlX3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4gKnNhbXBsZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZWNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBzYW1wbGUuIElmIHRoZSByZWZjb3VudCByZWFjaGVzIDAsIHRoZQotc2FtcGxlIHdpbGwgYmUgZnJlZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS11bnJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2FtcGxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1jb3B5Ij48L2E+PGgzPmdzdF9zYW1wbGVfY29wecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPsKgKgotZ3N0X3NhbXBsZV9jb3B5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBzYW1wbGUuIFRoaXMgd2lsbCBhbHNvIG1ha2UgYSBuZXdseSBhbGxvY2F0ZWQKLWNvcHkgb2YgdGhlIGRhdGEgdGhlIHNvdXJjZSBzYW1wbGUgY29udGFpbnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNhbXBsZS1jb3B5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zYW1wbGUtY29weS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IGNvcHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFNhbXBsZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2FtcGxlLXN0cnVjdCI+PC9hPjxoMz5Hc3RTYW1wbGU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RTYW1wbGUgR3N0U2FtcGxlOzwvcHJlPgotPHA+VGhlIG9wYXF1ZSBzdHJ1Y3R1cmUgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPi4gQSBzYW1wbGUgY29udGFpbnMgYSB0eXBlZCBtZW1vcnkKLWJsb2NrIGFuZCB0aGUgYXNzb2NpYXRlZCB0aW1pbmcgaW5mb3JtYXRpb24uIEl0IGlzIG1haW5seSB1c2VkIHRvCi1leGNoYW5nZSBidWZmZXJzIHdpdGggYW4gYXBwbGljYXRpb24uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFNhbXBsZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFNlZ21lbnQuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0U2VnbWVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjkwY2ZlLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0U2VnbWVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQxMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0U2VnbWVudDogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RTZWdtZW50LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RTZWdtZW50Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdFNlZ21lbnQiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RTZWdtZW50LnRvcF9vZl9wYWdlIj48L2E+R3N0U2VnbWVudDwvc3Bhbj48L2gyPgotPHA+R3N0U2VnbWVudCDigJQgU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyZWQgcmVnaW9uIG9mIGludGVyZXN0Ci0gICAgICAgICAgICAgICAgICAgIGluIGEgbWVkaWEgZmlsZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U2VnbWVudC5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jbGlwIiB0aXRsZT0iZ3N0X3NlZ21lbnRfY2xpcMKgKCkiPmdzdF9zZWdtZW50X2NsaXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtaW5pdCIgdGl0bGU9ImdzdF9zZWdtZW50X2luaXTCoCgpIj5nc3Rfc2VnbWVudF9pbml0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtbmV3IiB0aXRsZT0iZ3N0X3NlZ21lbnRfbmV3wqAoKSI+Z3N0X3NlZ21lbnRfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtY29weSIgdGl0bGU9ImdzdF9zZWdtZW50X2NvcHnCoCgpIj5nc3Rfc2VnbWVudF9jb3B5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWZyZWUiIHRpdGxlPSJnc3Rfc2VnbWVudF9mcmVlwqAoKSI+Z3N0X3NlZ21lbnRfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWRvLXNlZWsiIHRpdGxlPSJnc3Rfc2VnbWVudF9kb19zZWVrwqAoKSI+Z3N0X3NlZ21lbnRfZG9fc2VlazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXN0cmVhbS10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZcKgKCkiPmdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtcG9zaXRpb24tZnJvbS1zdHJlYW0tdGltZS1mdWxsIiB0aXRsZT0iZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZV9mdWxswqAoKSI+Z3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZV9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZcKgKCkiPmdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUtZnVsbCIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxswqAoKSI+Z3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lX2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tc3RyZWFtLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZcKgKCkiPmdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXN0cmVhbS10aW1lLWZ1bGwiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxswqAoKSI+Z3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lwqAoKSI+Z3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtcG9zaXRpb24tZnJvbS1ydW5uaW5nLXRpbWUtZnVsbCIgdGl0bGU9ImdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lX2Z1bGzCoCgpIj5nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZV9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXBvc2l0aW9uIiB0aXRsZT0iZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb27CoCgpIj5nc3Rfc2VnbWVudF90b19wb3NpdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXNldC1ydW5uaW5nLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lwqAoKSI+Z3N0X3NlZ21lbnRfc2V0X3J1bm5pbmdfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jb3B5LWludG8iIHRpdGxlPSJnc3Rfc2VnbWVudF9jb3B5X2ludG/CoCgpIj5nc3Rfc2VnbWVudF9jb3B5X2ludG88L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1vZmZzZXQtcnVubmluZy10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZcKgKCkiPmdzdF9zZWdtZW50X29mZnNldF9ydW5uaW5nX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1pcy1lcXVhbCIgdGl0bGU9ImdzdF9zZWdtZW50X2lzX2VxdWFswqAoKSI+Z3N0X3NlZ21lbnRfaXNfZXF1YWw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTZWdtZW50Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnRGbGFncyIgdGl0bGU9ImVudW0gR3N0U2VnbWVudEZsYWdzIj5Hc3RTZWdtZW50RmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U2VnbWVudC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1Cb3hlZC1UeXBlcy5odG1sIj5HQm94ZWQ8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0U2VnbWVudAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFNlZ21lbnQuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U2VnbWVudC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGhlbHBlciBzdHJ1Y3R1cmUgaG9sZHMgdGhlIHJlbGV2YW50IHZhbHVlcyBmb3IgdHJhY2tpbmcgdGhlIHJlZ2lvbiBvZgotaW50ZXJlc3QgaW4gYSBtZWRpYSBmaWxlLCBjYWxsZWQgYSBzZWdtZW50LjwvcD4KLTxwPlRoZSBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgZm9yIHR3byBwdXJwb3Nlczo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+cGVyZm9ybWluZyBzZWVrcyAoaGFuZGxpbmcgc2VlayBldmVudHMpPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD50cmFja2luZyBwbGF5YmFjayByZWdpb25zIChoYW5kbGluZyBuZXdzZWdtZW50IGV2ZW50cyk8L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5UaGUgc2VnbWVudCBpcyB1c3VhbGx5IGNvbmZpZ3VyZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHdpdGggYSBzZWVrIGV2ZW50IHdoaWNoCi1pcyBwcm9wYWdhdGVkIHVwc3RyZWFtIGFuZCBldmVudHVhbGx5IGhhbmRsZWQgYnkgYW4gZWxlbWVudCB0aGF0IHBlcmZvcm1zIHRoZSBzZWVrLjwvcD4KLTxwPlRoZSBjb25maWd1cmVkIHNlZ21lbnQgaXMgdGhlbiBwcm9wYWdhdGVkIGJhY2sgZG93bnN0cmVhbSB3aXRoIGEgbmV3c2VnbWVudCBldmVudC4KLVRoaXMgaW5mb3JtYXRpb24gaXMgdGhlbiB1c2VkIHRvIGNsaXAgbWVkaWEgdG8gdGhlIHNlZ21lbnQgYm91bmRhcmllcy48L3A+Ci08cD5BIHNlZ21lbnQgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1pbml0IiB0aXRsZT0iZ3N0X3NlZ21lbnRfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfaW5pdCgpPC9jb2RlPjwvYT4sIHdoaWNoIHRha2VzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+Ci10aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50IHZhbHVlcy4gVGhlIHNlZ21lbnQgd2lsbCBiZSBjb25maWd1cmVkCi13aXRoIGEgc3RhcnQgdmFsdWUgb2YgMCBhbmQgYSBzdG9wL2R1cmF0aW9uIG9mIC0xLCB3aGljaCBpcyB1bmRlZmluZWQuIFRoZSBkZWZhdWx0Ci1yYXRlIGFuZCBhcHBsaWVkX3JhdGUgaXMgMS4wLjwvcD4KLTxwPlRoZSBwdWJsaWMgZHVyYXRpb24gZmllbGQgY29udGFpbnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBzZWdtZW50LiBXaGVuIHVzaW5nCi10aGUgc2VnbWVudCBmb3Igc2Vla2luZywgdGhlIHN0YXJ0IGFuZCB0aW1lIG1lbWJlcnMgc2hvdWxkIG5vcm1hbGx5IGJlIGxlZnQKLXRvIHRoZWlyIGRlZmF1bHQgMCB2YWx1ZS4gVGhlIHN0b3AgcG9zaXRpb24gaXMgbGVmdCB0byAtMSB1bmxlc3MgZXhwbGljaXRseQotY29uZmlndXJlZCB0byBhIGRpZmZlcmVudCB2YWx1ZSBhZnRlciBhIHNlZWsgZXZlbnQuPC9wPgotPHA+VGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgc2hvdWxkIGJlIHNldCBieSBjaGFuZ2luZyB0aGUgcG9zaXRpb24KLW1lbWJlciBpbiB0aGUgc3RydWN0dXJlLjwvcD4KLTxwPkZvciBlbGVtZW50cyB0aGF0IHBlcmZvcm0gc2Vla3MsIHRoZSBjdXJyZW50IHNlZ21lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZG8tc2VlayIgdGl0bGU9ImdzdF9zZWdtZW50X2RvX3NlZWvCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X2RvX3NlZWsoKTwvY29kZT48L2E+IGFuZCB0aGUgdmFsdWVzIGZyb20gdGhlIHNlZWsgZXZlbnQuIFRoaXMgbWV0aG9kIHdpbGwgdXBkYXRlCi1hbGwgdGhlIHNlZ21lbnQgZmllbGRzLiBUaGUgcG9zaXRpb24gZmllbGQgd2lsbCBjb250YWluIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24uCi1JZiB0aGUgc3RhcnRfdHlwZSB3YXMgZGlmZmVyZW50IGZyb20gR1NUX1NFRUtfVFlQRV9OT05FLCBwbGF5YmFjayBjb250aW51ZXMgZnJvbQotdGhlIHBvc2l0aW9uIHBvc2l0aW9uLCBwb3NzaWJseSB3aXRoIHVwZGF0ZWQgZmxhZ3Mgb3IgcmF0ZS48L3A+Ci08cD5Gb3IgZWxlbWVudHMgdGhhdCB3YW50IHRvIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiB0byB0cmFjayB0aGUgcGxheWJhY2sgcmVnaW9uLAotdXBkYXRlIHRoZSBzZWdtZW50IGZpZWxkcyB3aXRoIHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBuZXdzZWdtZW50IGV2ZW50LgotVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtY2xpcCIgdGl0bGU9ImdzdF9zZWdtZW50X2NsaXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X2NsaXAoKTwvY29kZT48L2E+IG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjaGVjayBhbmQgY2xpcAotdGhlIG1lZGlhIGRhdGEgdG8gdGhlIHNlZ21lbnQgYm91bmRhcmllcy48L3A+Ci08cD5Gb3IgZWxlbWVudHMgdGhhdCB3YW50IHRvIHN5bmNocm9uaXplIHRvIHRoZSBwaXBlbGluZSBjbG9jaywgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpPC9jb2RlPjwvYT4KLWNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSB0aW1lc3RhbXAgdG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHN5bmNocm9uaXplCi10byB0aGUgY2xvY2suIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSBiYXNlIGFzIHdlbGwgYXMKLWFueSByYXRlIG9yIGFwcGxpZWRfcmF0ZSBjb252ZXJzaW9ucy48L3A+Ci08cD5Gb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBtZWRpYSBkYXRhIGluIHN0cmVhbV90aW1lLAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSgpPC9jb2RlPjwvYT4gY2FuIGJlIHVzZWQgdG8gY29udmVydCBhIHRpbWVzdGFtcCBhbmQgdGhlIHNlZ21lbnQKLWluZm8gdG8gc3RyZWFtIHRpbWUgKHdoaWNoIGlzIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIHRoZSBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtKS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFNlZ21lbnQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LWNsaXAiPjwvYT48aDM+Z3N0X3NlZ21lbnRfY2xpcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3NlZ21lbnRfY2xpcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBzdG9wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqY2xpcF9zdGFydDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmNsaXBfc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DbGlwIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4KLSB2YWx1ZXMgdG8gdGhlIHNlZ21lbnQgYm91bmRhcmllcyBnaXZlbgotaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci0gYXJlIGNvbXBhcmVkIGFuZCBjbGlwcGVkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+Ci0KLXN0YXJ0IGFuZCBzdG9wIHZhbHVlcy48L3A+Ci08cD5JZiB0aGUgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci0gYXJlIGtub3duIHRvIGZhbGwKLW91dHNpZGUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RhcnQ8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RvcDwvY29kZT48L2VtPgotIGFyZSBub3QgdXBkYXRlZC48L3A+Ci08cD5XaGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RhcnQ8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RvcDwvY29kZT48L2VtPgotIHdpbGwgYmUKLXVwZGF0ZWQuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbGlwX3N0YXJ0PC9jb2RlPjwvZW0+Ci0gb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RvcDwvY29kZT48L2VtPgotIGFyZSBkaWZmZXJlbnQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4KLSBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPgotCi1yZXNwZWN0aXZlbHksIHRoZSByZWdpb24gZmVsbCBwYXJ0aWFsbHkgaW4gdGhlIHNlZ21lbnQuPC9wPgotPHA+Tm90ZSB0aGF0IHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4KLSBpcyAtMSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsaXBfc3RvcDwvY29kZT48L2VtPgotIHdpbGwgYmUgc2V0IHRvIHRoZSBlbmQgb2YgdGhlCi1zZWdtZW50LiBEZXBlbmRpbmcgb24gdGhlIHVzZSBjYXNlLCB0aGlzIG1heSBvciBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtY2xpcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0YXJ0IHBvc2l0aW9uIGluIHRoZSBzZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0b3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RvcCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbGlwX3N0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBjbGlwcGVkIHN0YXJ0IHBvc2l0aW9uIGluIHRoZSBzZWdtZW50LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbGlwX3N0b3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGNsaXBwZWQgc3RvcCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LWNsaXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPgotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci10aW1lcyBmYWxsIHBhcnRpYWxseSBvcgotY29tcGxldGVseSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPgotLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWVzIGFyZSBjb21wbGV0ZWx5IG91dHNpZGUKLW9mIHRoZSBzZWdtZW50LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1pbml0Ij48L2E+PGgzPmdzdF9zZWdtZW50X2luaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfc2VnbWVudF9pbml0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGUgc3RhcnQvcG9zaXRpb24gZmllbGRzIGFyZSBzZXQgdG8gMCBhbmQgdGhlIHN0b3AvZHVyYXRpb24KLWZpZWxkcyBhcmUgc2V0IHRvIC0xICh1bmtub3duKS4gVGhlIGRlZmF1bHQgcmF0ZSBvZiAxLjAgYW5kIG5vCi1mbGFncyBhcmUgc2V0LjwvcD4KLTxwPkluaXRpYWxpemUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSB0byBpdHMgZGVmYXVsdCB2YWx1ZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtaW5pdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LW5ldyI+PC9hPjxoMz5nc3Rfc2VnbWVudF9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9zZWdtZW50X25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGxvY2F0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemUgaXQgdXNpbmcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtaW5pdCIgdGl0bGU9ImdzdF9zZWdtZW50X2luaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X2luaXQoKTwvY29kZT48L2E+LjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9zZWdtZW50X2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiwgZnJlZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZnJlZSIgdGl0bGU9ImdzdF9zZWdtZW50X2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X2ZyZWUoKTwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1jb3B5Ij48L2E+PGgzPmdzdF9zZWdtZW50X2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9zZWdtZW50X2NvcHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBjb3B5IG9mIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3NlZ21lbnRfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtY29weS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+LCBmcmVlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1mcmVlIiB0aXRsZT0iZ3N0X3NlZ21lbnRfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfZnJlZSgpPC9jb2RlPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LWZyZWUiPjwvYT48aDM+Z3N0X3NlZ21lbnRfZnJlZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zZWdtZW50X2ZyZWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GcmVlIHRoZSBhbGxvY2F0ZWQgc2VnbWVudCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LWZyZWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LWRvLXNlZWsiPjwvYT48aDM+Z3N0X3NlZ21lbnRfZG9fc2Vla8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3NlZ21lbnRfZG9fc2VlayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiByYXRlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0U2Vla0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTZWVrRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWVrVHlwZTwvc3Bhbj48L2E+IHN0YXJ0X3R5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIiB0aXRsZT0iZW51bSBHc3RTZWVrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZWtUeXBlPC9zcGFuPjwvYT4gc3RvcF90eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBzdG9wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp1cGRhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VXBkYXRlIHRoZSBzZWdtZW50IHN0cnVjdHVyZSB3aXRoIHRoZSBmaWVsZCB2YWx1ZXMgb2YgYSBzZWVrIGV2ZW50IChzZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2Vla8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X25ld19zZWVrKCk8L2NvZGU+PC9hPikuPC9wPgotPHA+QWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgdGhlIHNlZ21lbnQgZmllbGQgcG9zaXRpb24gYW5kIHRpbWUgd2lsbAotY29udGFpbiB0aGUgcmVxdWVzdGVkIG5ldyBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudC4gVGhlIG5ldyByZXF1ZXN0ZWQKLXBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGRlcGVuZHMgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0X3R5cGU8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3BfdHlwZTwvY29kZT48L2VtPgotLjwvcD4KLTxwPkZvciBwb3NpdGl2ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPgotLCB0aGUgbmV3IHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGlzIHRoZSBuZXcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLQotc3RhcnQgZmllbGQgd2hlbiBpdCB3YXMgdXBkYXRlZCB3aXRoIGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0X3R5cGU8L2NvZGU+PC9lbT4KLSBkaWZmZXJlbnQgZnJvbQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU0VFS19UWVBFX05PTkU8L3NwYW4+PC9hPi4gSWYgbm8gdXBkYXRlIHdhcyBwZXJmb3JtZWQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBzdGFydCBwb3NpdGlvbgotKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLVRZUEUtTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NFRUtfVFlQRV9OT05FPC9zcGFuPjwvYT4pLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4KLSBpcyBpZ25vcmVkIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VnbWVudDwvY29kZT48L2VtPgotIHBvc2l0aW9uIGlzCi11bm1vZGlmaWVkLjwvcD4KLTxwPkZvciBuZWdhdGl2ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmF0ZTwvY29kZT48L2VtPgotLCB0aGUgbmV3IHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGlzIHRoZSBuZXcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLQotc3RvcCBmaWVsZCB3aGVuIGl0IHdhcyB1cGRhdGVkIHdpdGggYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcF90eXBlPC9jb2RlPjwvZW0+Ci0gZGlmZmVyZW50IGZyb20KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLVRZUEUtTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1NFRUtfVFlQRV9OT05FPC9zcGFuPjwvYT4uIElmIG5vIHN0b3Agd2FzIHByZXZpb3VzbHkgY29uZmlndXJlZCBpbiB0aGUgc2VnbWVudCwgdGhlCi1kdXJhdGlvbiBvZiB0aGUgc2VnbWVudCB3aWxsIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBzdG9wIHBvc2l0aW9uLgotSWYgbm8gdXBkYXRlIHdhcyBwZXJmb3JtZWQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBzdG9wIHBvc2l0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLU5PTkU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TRUVLX1RZUEVfTk9ORTwvc3Bhbj48L2E+KSwKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci0gaXMgaWdub3JlZCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBwb3NpdGlvbiBpcyB1bm1vZGlmaWVkLjwvcD4KLTxwPlRoZSBhcHBsaWVkIHJhdGUgb2YgdGhlIHNlZ21lbnQgd2lsbCBiZSBzZXQgdG8gMS4wIGJ5IGRlZmF1bHQuCi1JZiB0aGUgY2FsbGVyIGNhbiBhcHBseSBhIHJhdGUgY2hhbmdlLCBpdCBzaG91bGQgdXBkYXRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+Ci0KLXJhdGUgYW5kIGFwcGxpZWRfcmF0ZSBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVwZGF0ZTwvY29kZT48L2VtPgotIHdpbGwgYmUgc2V0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhIHNlZWsgc2hvdWxkIGJlIHBlcmZvcm1lZCB0byB0aGUgc2VnbWVudAotcG9zaXRpb24gZmllbGQuIFRoaXMgZmllbGQgY2FuIGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmLCBmb3IgZXhhbXBsZSwgb25seSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJhdGU8L2NvZGU+PC9lbT4KLQotaGFzIGJlZW4gY2hhbmdlZCBidXQgbm90IHRoZSBwbGF5YmFjayBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1kby1zZWVrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByYXRlIG9mIHRoZSBzZWdtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZWdtZW50IGZsYWdzIGZvciB0aGUgc2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydF90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlZWsgbWV0aG9kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlZWsgc3RhcnQgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RvcF90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlZWsgbWV0aG9kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0b3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2VlayBzdG9wIHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVwZGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJvb2xlYW4gaG9sZGluZyB3aGV0aGVyIHBvc2l0aW9uIHdhcyB1cGRhdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtZG8tc2Vlay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc2VlayBjb3VsZCBiZSBwZXJmb3JtZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tc3RyZWFtLXRpbWUiPjwvYT48aDM+Z3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLWdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBzdHJlYW1fdGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db252ZXJ0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1fdGltZTwvY29kZT48L2VtPgotIGludG8gYSBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBzbyB0aGF0Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXN0cmVhbS10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lKCk8L2NvZGU+PC9hPiB3aXRoIHRoYXQgcG9zaXRpb24gcmV0dXJucyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX3RpbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXN0cmVhbS10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyZWFtX3RpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RyZWFtX3RpbWUgaW4gdGhlIHNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tc3RyZWFtLXRpbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1fdGltZTwvY29kZT48L2VtPgotLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKLS0xIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV90aW1lPC9jb2RlPjwvZW0+Ci1pcyAtMSBvciB3aGVuIGl0IGlzIG5vdCBpbnNpZGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtcG9zaXRpb24tZnJvbS1zdHJlYW0tdGltZS1mdWxsIj48L2E+PGgzPmdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLWdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHN0cmVhbV90aW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICpwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmFuc2xhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV90aW1lPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIHNlZ21lbnQgcG9zaXRpb24gdXNpbmcgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkCi1zZWdtZW50LiBDb21wYXJlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tc3RyZWFtLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lKCk8L2NvZGU+PC9hPiB0aGlzIGZ1bmN0aW9uIGNhbgotcmV0dXJuIG5lZ2F0aXZlIHNlZ21lbnQgcG9zaXRpb24uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCBieSBlbGVtZW50cyB0aGF0IG5lZWQgdG8gc3luY2hyb25pemUgYnVmZmVycwotYWdhaW5zdCB0aGUgY2xvY2sgb3IgZWFjaCBvdGhlci48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX3RpbWU8L2NvZGU+PC9lbT4KLSBjYW4gYmUgYW55IHZhbHVlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZm9yIHZhbHVlcyBvdXRzaWRlCi1vZiB0aGUgc2VnbWVudCBpcyBleHRyYXBvbGF0ZWQuPC9wPgotPHA+V2hlbiAxIGlzIHJldHVybmVkLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtX3RpbWU8L2NvZGU+PC9lbT4KLSByZXN1bHRlZCBpbiBhIHBvc2l0aXZlIHBvc2l0aW9uIHJldHVybmVkCi1pbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5XaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSwgdGhlIHJldHVybmVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3NpdGlvbjwvY29kZT48L2VtPgotIHNob3VsZCBiZSBuZWdhdGVkCi10byBnZXQgdGhlIHJlYWwgbmVnYXRpdmUgc2VnbWVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXN0cmVhbS10aW1lLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW1fdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdHJlYW0tdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXN1bHRpbmcgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tc3RyZWFtLXRpbWUtZnVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgMSBvciAtMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZSI+PC9hPjxoMz5nc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gcG9zaXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VHJhbnNsYXRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3NpdGlvbjwvY29kZT48L2VtPgotIHRvIHRoZSB0b3RhbCBydW5uaW5nIHRpbWUgdXNpbmcgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkCi1zZWdtZW50LiBQb3NpdGlvbiBpcyBhIHZhbHVlIGJldHdlZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBzdGFydCBhbmQgc3RvcCB0aW1lLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgYnkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIHN5bmNocm9uaXplIHRvIHRoZQotZ2xvYmFsIGNsb2NrIGluIGEgcGlwZWxpbmUuIFRoZSBydW5uaW5nIHRpbWUgaXMgYSBjb25zdGFudGx5IGluY3JlYXNpbmcgdmFsdWUKLXN0YXJ0aW5nIGZyb20gMC4gV2hlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWluaXQiIHRpdGxlPSJnc3Rfc2VnbWVudF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF9pbml0KCk8L2NvZGU+PC9hPiBpcyBjYWxsZWQsIHRoaXMgdmFsdWUgd2lsbCByZXNldCB0bwotMC48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgLTEgaWYgdGhlIHBvc2l0aW9uIGlzIG91dHNpZGUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBzdGFydCBhbmQgc3RvcC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtdG8tcnVubmluZy10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHBvc2l0aW9uIGFzIHRoZSB0b3RhbCBydW5uaW5nIHRpbWUgb3IgLTEgd2hlbiBhbiBpbnZhbGlkIHBvc2l0aW9uCi13YXMgZ2l2ZW4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZS1mdWxsIj48L2E+PGgzPmdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lX2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHBvc2l0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmFuc2xhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvc2l0aW9uPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIHRvdGFsIHJ1bm5pbmcgdGltZSB1c2luZyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKLXNlZ21lbnQuIENvbXBhcmVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tcnVubmluZy10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUoKTwvY29kZT48L2E+IHRoaXMgZnVuY3Rpb24gY2FuIHJldHVybgotbmVnYXRpdmUgcnVubmluZy10aW1lLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgYnkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIHN5bmNocm9uaXplIGJ1ZmZlcnMKLWFnYWluc3QgdGhlIGNsb2NrIG9yIGVhY2hvdGhlci48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT4KLSBjYW4gYmUgYW55IHZhbHVlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZm9yIHZhbHVlcyBvdXRzaWRlCi1vZiB0aGUgc2VnbWVudCBpcyBleHRyYXBvbGF0ZWQuPC9wPgotPHA+V2hlbiAxIGlzIHJldHVybmVkLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9lbT4KLSByZXN1bHRlZCBpbiBhIHBvc2l0aXZlIHJ1bm5pbmctdGltZSByZXR1cm5lZAotaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPgotLjwvcD4KLTxwPldoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xLCB0aGUgcmV0dXJuZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPgotIHNob3VsZCBiZSBuZWdhdGVkCi10byBnZXQgdGhlIHJlYWwgbmVnYXRpdmUgcnVubmluZyB0aW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZS1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnVubmluZ190aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cmVzdWx0IHJ1bm5pbmctdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtdG8tcnVubmluZy10aW1lLWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDEgb3IgLTEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZSI+PC9hPjxoMz5nc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLWdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBwb3NpdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmFuc2xhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvc2l0aW9uPC9jb2RlPjwvZW0+Ci0gdG8gc3RyZWFtIHRpbWUgdXNpbmcgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkCi1zZWdtZW50LiBUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvc2l0aW9uPC9jb2RlPjwvZW0+Ci0gdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+Ci0gc3RhcnQgYW5kCi1zdG9wIHZhbHVlLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgYnkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIG9wZXJhdGUgb24KLXRoZSBzdHJlYW0gdGltZSBvZiB0aGUgYnVmZmVycyBpdCByZWNlaXZlcywgc3VjaCBhcyBlZmZlY3QgcGx1Z2lucy4KLUluIHRob3NlIHVzZSBjYXNlcywgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvc2l0aW9uPC9jb2RlPjwvZW0+Ci0gaXMgdHlwaWNhbGx5IHRoZSBidWZmZXIgdGltZXN0YW1wIG9yCi1jbG9jayB0aW1lIHRoYXQgb25lIHdhbnRzIHRvIGNvbnZlcnQgdG8gdGhlIHN0cmVhbSB0aW1lLgotVGhlIHN0cmVhbSB0aW1lIGlzIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUKLW1lZGlhIHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBwb3NpdGlvbiBpbiBzdHJlYW1fdGltZSBvciAtMSB3aGVuIGFuIGludmFsaWQgcG9zaXRpb24KLXdhcyBnaXZlbi48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtdG8tc3RyZWFtLXRpbWUtZnVsbCI+PC9hPjxoMz5nc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHBvc2l0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqc3RyZWFtX3RpbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VHJhbnNsYXRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3NpdGlvbjwvY29kZT48L2VtPgotIHRvIHRoZSB0b3RhbCBzdHJlYW0gdGltZSB1c2luZyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKLXNlZ21lbnQuIENvbXBhcmVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tc3RyZWFtLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUoKTwvY29kZT48L2E+IHRoaXMgZnVuY3Rpb24gY2FuIHJldHVybgotbmVnYXRpdmUgc3RyZWFtLXRpbWUuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCBieSBlbGVtZW50cyB0aGF0IG5lZWQgdG8gc3luY2hyb25pemUgYnVmZmVycwotYWdhaW5zdCB0aGUgY2xvY2sgb3IgZWFjaG90aGVyLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3NpdGlvbjwvY29kZT48L2VtPgotIGNhbiBiZSBhbnkgdmFsdWUgYW5kIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBmb3IgdmFsdWVzIG91dHNpZGUKLW9mIHRoZSBzZWdtZW50IGlzIGV4dHJhcG9sYXRlZC48L3A+Ci08cD5XaGVuIDEgaXMgcmV0dXJuZWQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3NpdGlvbjwvY29kZT48L2VtPgotIHJlc3VsdGVkIGluIGEgcG9zaXRpdmUgc3RyZWFtLXRpbWUgcmV0dXJuZWQKLWluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1fdGltZTwvY29kZT48L2VtPgotLjwvcD4KLTxwPldoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xLCB0aGUgcmV0dXJuZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbV90aW1lPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIG5lZ2F0ZWQKLXRvIGdldCB0aGUgcmVhbCBuZWdhdGl2ZSBzdHJlYW0gdGltZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZS1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyZWFtX3RpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5yZXN1bHQgc3RyZWFtLXRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXRvLXN0cmVhbS10aW1lLWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDEgb3IgLTEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDQuaHRtbCNhcGktaW5kZXgtMS44Ij4xLjg8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXJ1bm5pbmctdGltZSI+PC9hPjxoMz5nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLWdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gcnVubmluZ190aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPgotIGludG8gYSBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBzbyB0aGF0Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKCk8L2NvZGU+PC9hPiB3aXRoIHRoYXQgcG9zaXRpb24gcmV0dXJucyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtcG9zaXRpb24tZnJvbS1ydW5uaW5nLXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydW5uaW5nX3RpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcnVubmluZ190aW1lIGluIHRoZSBzZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXJ1bm5pbmctdGltZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPgotLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKLS0xIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPgotaXMgLTEgb3Igd2hlbiBpdCBpcyBub3QgaW5zaWRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tcnVubmluZy10aW1lLWZ1bGwiPjwvYT48aDM+Z3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWVfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLWdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lX2Z1bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnBvc2l0aW9uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRyYW5zbGF0ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIHNlZ21lbnQgcG9zaXRpb24gdXNpbmcgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkCi1zZWdtZW50LiBDb21wYXJlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tcnVubmluZy10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lKCk8L2NvZGU+PC9hPiB0aGlzIGZ1bmN0aW9uIGNhbgotcmV0dXJuIG5lZ2F0aXZlIHNlZ21lbnQgcG9zaXRpb24uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCBieSBlbGVtZW50cyB0aGF0IG5lZWQgdG8gc3luY2hyb25pemUgYnVmZmVycwotYWdhaW5zdCB0aGUgY2xvY2sgb3IgZWFjaCBvdGhlci48L3A+Ci08cD48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIGFueSB2YWx1ZSBhbmQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGZvciB2YWx1ZXMKLW91dHNpZGUgb2YgdGhlIHNlZ21lbnQgaXMgZXh0cmFwb2xhdGVkLjwvcD4KLTxwPldoZW4gMSBpcyByZXR1cm5lZCwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ1bm5pbmdfdGltZTwvY29kZT48L2VtPgotIHJlc3VsdGVkIGluIGEgcG9zaXRpdmUgcG9zaXRpb24gcmV0dXJuZWQKLWluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3NpdGlvbjwvY29kZT48L2VtPgotLjwvcD4KLTxwPldoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xLCB0aGUgcmV0dXJuZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvc2l0aW9uPC9jb2RlPjwvZW0+Ci0gc2hvdWxkIGJlIG5lZ2F0ZWQKLXRvIGdldCB0aGUgcmVhbCBuZWdhdGl2ZSBzZWdtZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tcnVubmluZy10aW1lLWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydW5uaW5nX3RpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcnVubmluZy10aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlc3VsdGluZyBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtcG9zaXRpb24tZnJvbS1ydW5uaW5nLXRpbWUtZnVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgMSBvciAtMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXRvLXBvc2l0aW9uIj48L2E+PGgzPmdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHJ1bm5pbmdfdGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJ3YXJuaW5nIj48cD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z3N0X3NlZ21lbnRfdG9fcG9zaXRpb248L2NvZGU+IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBuZXdseS13cml0dGVuIGNvZGUuPC9wPjwvZGl2PgotPHA+Q29udmVydCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci0gaW50byBhIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IHNvIHRoYXQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tcnVubmluZy10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUoKTwvY29kZT48L2E+IHdpdGggdGhhdCBwb3NpdGlvbiByZXR1cm5zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC10by1wb3NpdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ1bm5pbmdfdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBydW5uaW5nX3RpbWUgaW4gdGhlIHNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LXRvLXBvc2l0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24gcmV0dXJucwotLTEgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci1pcyAtMSBvciB3aGVuIGl0IGlzIG5vdCBpbnNpZGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5EZXByZWNhdGVkLiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZSgpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtc2V0LXJ1bm5pbmctdGltZSI+PC9hPjxoMz5nc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gcnVubmluZ190aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkanVzdCB0aGUgc3RhcnQvc3RvcCBhbmQgYmFzZSB2YWx1ZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBzdWNoIHRoYXQgdGhlIG5leHQgdmFsaWQKLWJ1ZmZlciB3aWxsIGJlIG9uZSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ydW5uaW5nX3RpbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1zZXQtcnVubmluZy10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnVubmluZ190aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJ1bm5pbmdfdGltZSBpbiB0aGUgc2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtc2V0LXJ1bm5pbmctdGltZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc2VnbWVudCBjb3VsZCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4gSWYgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaXMKLXJldHVybmVkLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnVubmluZ190aW1lPC9jb2RlPjwvZW0+Ci1pcyAtMSBvciBub3QgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtY29weS1pbnRvIj48L2E+PGgzPmdzdF9zZWdtZW50X2NvcHlfaW50b8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zZWdtZW50X2NvcHlfaW50byAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3B5IHRoZSBjb250ZW50cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+Ci0gaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVzdDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LWNvcHktaW50by5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LW9mZnNldC1ydW5uaW5nLXRpbWUiPjwvYT48aDM+Z3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzZWdtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRqdXN0IHRoZSB2YWx1ZXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZ21lbnQ8L2NvZGU+PC9lbT4KLSBzbyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSBpcyBhcHBsaWVkIHRvIGFsbAotZnV0dXJlIHJ1bm5pbmctdGltZSBjYWxjdWxhdGlvbnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ21lbnQtb2Zmc2V0LXJ1bm5pbmctdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvZmZzZXQgdG8gYXBwbHkgaW4gdGhlIHNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LW9mZnNldC1ydW5uaW5nLXRpbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHNlZ21lbnQgY291bGQgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkuIElmIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlzCi1yZXR1cm5lZCwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotaXMgbm90IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWdtZW50PC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIuMyI+MS4yLjM8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1pcy1lcXVhbCI+PC9hPjxoMz5nc3Rfc2VnbWVudF9pc19lcXVhbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3NlZ21lbnRfaXNfZXF1YWwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqczA8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+ICpzMTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgZm9yIHR3byBzZWdtZW50cyBiZWluZyBlcXVhbC4gRXF1YWxpdHkgaGVyZSBpcyBkZWZpbmVkCi1hcyBwZXJmZWN0IGVxdWFsaXR5LCBpbmNsdWRpbmcgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zZWdtZW50LWlzLWVxdWFsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnMwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnMxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VnbWVudC1pcy1lcXVhbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc2VnbWVudHMgYXJlIGVxdWFsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U2VnbWVudC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFNlZ21lbnQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RTZWdtZW50IHsKLSAgR3N0U2VnbWVudEZsYWdzIGZsYWdzOwotCi0gIGdkb3VibGUgICAgICAgICByYXRlOwotICBnZG91YmxlICAgICAgICAgYXBwbGllZF9yYXRlOwotCi0gIEdzdEZvcm1hdCAgICAgICBmb3JtYXQ7Ci0gIGd1aW50NjQgICAgICAgICBiYXNlOwotICBndWludDY0ICAgICAgICAgb2Zmc2V0OwotICBndWludDY0ICAgICAgICAgc3RhcnQ7Ci0gIGd1aW50NjQgICAgICAgICBzdG9wOwotICBndWludDY0ICAgICAgICAgdGltZTsKLQotICBndWludDY0ICAgICAgICAgcG9zaXRpb247Ci0gIGd1aW50NjQgICAgICAgICBkdXJhdGlvbjsKLX07Ci08L3ByZT4KLTxwPkEgaGVscGVyIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBjb25maWd1cmVkIHJlZ2lvbiBvZgotaW50ZXJlc3QgaW4gYSBtZWRpYSBmaWxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFNlZ21lbnQubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudEZsYWdzIiB0aXRsZT0iZW51bSBHc3RTZWdtZW50RmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50RmxhZ3M8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3QuZmxhZ3MiPjwvYT5mbGFnczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZmxhZ3MgZm9yIHRoaXMgc2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3QucmF0ZSI+PC9hPnJhdGU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBzZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5hcHBsaWVkLXJhdGUiPjwvYT5hcHBsaWVkX3JhdGU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBhbHJlYWR5IGFwcGxpZWQgcmF0ZSB0byB0aGUgc2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3QuZm9ybWF0Ij48L2E+Zm9ybWF0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50IHZhbHVlczwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3QuYmFzZSI+PC9hPmJhc2U8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBydW5uaW5nIHRpbWUgKHBsdXMgZWxhcHNlZCB0aW1lLCBzZWUgb2Zmc2V0KSBvZiB0aGUgc2VnbWVudCBzdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3Qub2Zmc2V0Ij48L2E+b2Zmc2V0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYW1vdW50IChpbiBidWZmZXIgdGltZXN0YW1wcykgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGVsYXBzZWQgaW4KLXRoZSBzZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5zdGFydCI+PC9hPnN0YXJ0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RhcnQgb2YgdGhlIHNlZ21lbnQgaW4gYnVmZmVyIHRpbWVzdGFtcCB0aW1lIChQVFMpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0b3Agb2YgdGhlIHNlZ21lbnQgaW4gYnVmZmVyIHRpbWVzdGFtcCB0aW1lIChQVFMpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC50aW1lIj48L2E+dGltZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBzZWdtZW50IHN0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5wb3NpdGlvbiI+PC9hPnBvc2l0aW9uPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYnVmZmVyIHRpbWVzdGFtcCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCAodXNlZCBpbnRlcm5hbGx5IGJ5Ci1lbGVtZW50cyBzdWNoIGFzIHNvdXJjZXMsIGRlbXV4ZXJzIG9yIHBhcnNlcnMgdG8gdHJhY2sgcHJvZ3Jlc3MpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5kdXJhdGlvbiI+PC9hPmR1cmF0aW9uPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZHVyYXRpb24gb2YgdGhlIHNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNlZ21lbnRGbGFncyI+PC9hPjxoMz5lbnVtIEdzdFNlZ21lbnRGbGFnczwvaDM+Ci08cD5GbGFncyBmb3IgdGhlIEdzdFNlZ21lbnQgc3RydWN0dXJlLiBDdXJyZW50bHkgbWFwcGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nCi12YWx1ZXMgb2YgdGhlIHNlZWsgZmxhZ3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U2VnbWVudEZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNFR01FTlQtRkxBRy1OT05FOkNBUFMiPjwvYT5HU1RfU0VHTUVOVF9GTEFHX05PTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bm8gZmxhZ3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNFR01FTlQtRkxBRy1SRVNFVDpDQVBTIj48L2E+R1NUX1NFR01FTlRfRkxBR19SRVNFVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5yZXNldCB0aGUgcGlwZWxpbmUgcnVubmluZ190aW1lIHRvIHRoZSBzZWdtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZ190aW1lPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TRUdNRU5ULUZMQUctVFJJQ0tNT0RFOkNBUFMiPjwvYT5HU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wZXJmb3JtIHNraXAgcGxheWJhY2sgKFNpbmNlIDEuNik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNFR01FTlQtRkxBRy1TS0lQOkNBUFMiPjwvYT5HU1RfU0VHTUVOVF9GTEFHX1NLSVA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RGVwcmVjYXRlZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZsYWcsIHJlcGxhY2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NUX1NFR01FTlRfRkxBR19UUklDS01PREU8L2NvZGU+PC9lbT4KLTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VHTUVOVC1GTEFHLVNFR01FTlQ6Q0FQUyI+PC9hPkdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zZW5kIFNFR01FTlRfRE9ORSBpbnN0ZWFkIG9mIEVPUzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VHTUVOVC1GTEFHLVRSSUNLTU9ERS1LRVktVU5JVFM6Q0FQUyI+PC9hPkdTVF9TRUdNRU5UX0ZMQUdfVFJJQ0tNT0RFX0tFWV9VTklUUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5EZWNvZGUgb25seSBrZXlmcmFtZXMsIHdoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSAoU2luY2UgMS42KTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VHTUVOVC1GTEFHLVRSSUNLTU9ERS1OTy1BVURJTzpDQVBTIj48L2E+R1NUX1NFR01FTlRfRkxBR19UUklDS01PREVfTk9fQVVESU88L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RG8gbm90IGRlY29kZSBhbnkgYXVkaW8sIHdoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSAoU2luY2UgMS42KTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTZWdtZW50LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFN0cnVjdHVyZS5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RTdHJ1Y3R1cmUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkYTdlNC4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdFN0cnVjdHVyZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQzMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0U3RydWN0dXJlOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbUNvbGxlY3Rpb24iPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0U3RydWN0dXJlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RTdHJ1Y3R1cmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdFN0cnVjdHVyZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFN0cnVjdHVyZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2gyPgotPHA+R3N0U3RydWN0dXJlIOKAlCBHZW5lcmljIHN0cnVjdHVyZSBjb250YWluaW5nIGZpZWxkcyBvZiBuYW1lcyBhbmQgdmFsdWVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFN0cnVjdHVyZS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZUZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmPCoCgpIj4qR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZU1hcEZ1bmMiIHRpdGxlPSJHc3RTdHJ1Y3R1cmVNYXBGdW5jwqAoKSI+KkdzdFN0cnVjdHVyZU1hcEZ1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZUZpbHRlck1hcEZ1bmMiIHRpdGxlPSJHc3RTdHJ1Y3R1cmVGaWx0ZXJNYXBGdW5jwqAoKSI+KkdzdFN0cnVjdHVyZUZpbHRlck1hcEZ1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3LWVtcHR5IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHnCoCgpIj5nc3Rfc3RydWN0dXJlX25ld19lbXB0eTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctaWQtZW1wdHkiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0ecKgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3wqAoKSI+Z3N0X3N0cnVjdHVyZV9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3LXZhbGlzdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdMKgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctaWQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld19pZMKgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3X2lkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldy1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3X2Zyb21fc3RyaW5nwqAoKSI+Z3N0X3N0cnVjdHVyZV9uZXdfZnJvbV9zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtY29weSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfY29wecKgKCkiPmdzdF9zdHJ1Y3R1cmVfY29weTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJlZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZnJlZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LW5hbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9uYW1lwqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaGFzX25hbWXCoCgpIj5nc3Rfc3RydWN0dXJlX2hhc19uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X25hbWXCoCgpIj5nc3Rfc3RydWN0dXJlX3NldF9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1uYW1lLWlkIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZMKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtZ2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXTCoCgpIj5nc3Rfc3RydWN0dXJlX2lkX2dldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0wqAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlwqAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlwqAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXRha2UtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWXCoCgpIj5nc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXTCoCgpIj5nc3Rfc3RydWN0dXJlX2dldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0wqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlwqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlwqAoKSI+Z3N0X3N0cnVjdHVyZV9zZXRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXRha2UtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWXCoCgpIj5nc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0wqAoKSI+Z3N0X3N0cnVjdHVyZV9zZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC12YWxpc3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldF92YWxpc3TCoCgpIj5nc3Rfc3RydWN0dXJlX3NldF92YWxpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0wqAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9zZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldC12YWxpc3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3TCoCgpIj5nc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkwqAoKSI+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHPCoCgpIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdMKgKCkiPmdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkc192YWxpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXJlbW92ZS1hbGwtZmllbGRzIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkc8KgKCkiPmdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZmllbGQtdHlwZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGXCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9maWVsZF90eXBlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uLWZpZWxkcyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbl9maWVsZHPCoCgpIj5nc3Rfc3RydWN0dXJlX25fZmllbGRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWhhcy1maWVsZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkwqAoKSI+Z3N0X3N0cnVjdHVyZV9oYXNfZmllbGQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkLXR5cGVkIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWTCoCgpIj5nc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pcy1lcXVhbCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWzCoCgpIj5nc3Rfc3RydWN0dXJlX2lzX2VxdWFsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlzLXN1YnNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0wqAoKSI+Z3N0X3N0cnVjdHVyZV9pc19zdWJzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtY2FuLWludGVyc2VjdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdMKgKCkiPmdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pbnRlcnNlY3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ludGVyc2VjdMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWhhcy1maWVsZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkwqAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkLXR5cGVkIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGRfdHlwZWTCoCgpIj5nc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtYm9vbGVhbiIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW7CoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1pbnQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9pbnTCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9pbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXVpbnQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF91aW50wqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfdWludDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtaW50NjQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9pbnQ2NMKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDY0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC11aW50NjQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF91aW50NjTCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF91aW50NjQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWRvdWJsZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXN0cmluZyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZ8KgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGXCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9kYXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1kYXRlLXRpbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWXCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWNsb2NrLXRpbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lwqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZW51bSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW3CoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9lbnVtPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1mcmFjdGlvbiIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uwqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZm9yZWFjaCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZm9yZWFjaMKgKCkiPmdzdF9zdHJ1Y3R1cmVfZm9yZWFjaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maWx0ZXItYW5kLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2XCoCgpIj5nc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1udGgtZmllbGQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWXCoCgpIj5nc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC1wYXJlbnQtcmVmY291bnQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnTCoCgpIj5nc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtdG8tc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV90b19zdHJpbmfCoCgpIj5nc3Rfc3RydWN0dXJlX3RvX3N0cmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmfCoCgpIj5nc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkwqAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtaW50IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnTCoCgpIj5nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1kb3VibGUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2RvdWJsZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZG91YmxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbsKgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLWJvb2xlYW4iIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuwqAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfYm9vbGVhbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nwqAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U3RydWN0dXJlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFN0cnVjdHVyZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1Cb3hlZC1UeXBlcy5odG1sIj5HQm94ZWQ8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0U3RydWN0dXJlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U3RydWN0dXJlLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFN0cnVjdHVyZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGlzIGEgY29sbGVjdGlvbiBvZiBrZXkvdmFsdWUgcGFpcnMuIFRoZSBrZXlzIGFyZSBleHByZXNzZWQKLWFzIEdRdWFya3MgYW5kIHRoZSB2YWx1ZXMgY2FuIGJlIG9mIGFueSBHVHlwZS48L3A+Ci08cD5JbiBhZGRpdGlvbiB0byB0aGUga2V5L3ZhbHVlIHBhaXJzLCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGFsc28gaGFzIGEgbmFtZS4gVGhlIG5hbWUKLXN0YXJ0cyB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgZmlsbGVkIGJ5IGxldHRlcnMsIG51bWJlcnMgYW5kIGFueSBvZiAiLy1fLjoiLjwvcD4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGlzIHVzZWQgYnkgdmFyaW91cyBHU3RyZWFtZXIgc3Vic3lzdGVtcyB0byBzdG9yZSBpbmZvcm1hdGlvbgotaW4gYSBmbGV4aWJsZSBhbmQgZXh0ZW5zaWJsZSB3YXkuIEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gZG9lcyBub3QgaGF2ZSBhIHJlZmNvdW50Ci1iZWNhdXNlIGl0IHVzdWFsbHkgaXMgcGFydCBvZiBhIGhpZ2hlciBsZXZlbCBvYmplY3Qgc3VjaCBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4uIEl0IHByb3ZpZGVzIGEgbWVhbnMgdG8gZW5mb3JjZSBtdXRhYmlsaXR5Ci11c2luZyB0aGUgcmVmY291bnQgb2YgdGhlIHBhcmVudCB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtcGFyZW50LXJlZmNvdW50IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQoKTwvY29kZT48L2E+Ci1tZXRob2QuPC9wPgotPHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBjYW4gYmUgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldy1lbXB0eSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX25ld19lbXB0eSgpPC9jb2RlPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX25ldygpPC9jb2RlPjwvYT4sIHdoaWNoIGJvdGggdGFrZSBhIG5hbWUgYW5kIGFuIG9wdGlvbmFsIHNldCBvZgota2V5L3ZhbHVlIHBhaXJzIGFsb25nIHdpdGggdGhlIHR5cGVzIG9mIHRoZSB2YWx1ZXMuPC9wPgotPHA+RmllbGQgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LXZhbHVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlKCk8L2NvZGU+PC9hPiBvcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0KCk8L2NvZGU+PC9hPi48L3A+Ci08cD5GaWVsZCB2YWx1ZXMgY2FuIGJlIHJldHJpZXZlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2dldF92YWx1ZSgpPC9jb2RlPjwvYT4gb3IgdGhlIG1vcmUKLWNvbnZlbmllbnQgZ3N0X3N0cnVjdHVyZV9nZXRfKigpIGZ1bmN0aW9ucy48L3A+Ci08cD5GaWVsZHMgY2FuIGJlIHJlbW92ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQoKTwvY29kZT48L2E+IG9yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMoKTwvY29kZT48L2E+LjwvcD4KLTxwPlN0cmluZ3MgaW4gc3RydWN0dXJlcyBtdXN0IGJlIEFTQ0lJIG9yIFVURi04IGVuY29kZWQuIE90aGVyIGVuY29kaW5ncyBhcmUKLW5vdCBhbGxvd2VkLiBTdHJpbmdzIG1heSBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaG93ZXZlci48L3A+Ci08cD5CZSBhd2FyZSB0aGF0IHRoZSBjdXJyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IC8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gc2VyaWFsaXphdGlvbiBpbnRvIHN0cmluZwotaGFzIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbmVzdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IC8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gZmllbGRzLiBJdCBjYW4gb25seQotc3VwcG9ydCBvbmUgbGV2ZWwgb2YgbmVzdGluZy4gVXNpbmcgbW9yZSBsZXZlbHMgd2lsbCBsZWFkIHRvIHVuZXhwZWN0ZWQKLWJlaGF2aW9yIHdoZW4gdXNpbmcgc2VyaWFsaXphdGlvbiBmZWF0dXJlcywgc3VjaCBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXRvLXN0cmluZyIgdGl0bGU9ImdzdF9jYXBzX3RvX3N0cmluZ8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NhcHNfdG9fc3RyaW5nKCk8L2NvZGU+PC9hPiBvcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXJpYWxpemUiIHRpdGxlPSJnc3RfdmFsdWVfc2VyaWFsaXplwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfc2VyaWFsaXplKCk8L2NvZGU+PC9hPiBhbmQgdGhlaXIgY291bnRlcnBhcnRzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U3RydWN0dXJlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYyI+PC9hPjxoMz5Hc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGRfaWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZvcmVhY2giIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZvcmVhY2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCgpPC9jb2RlPjwvYT4uIFRoZSBmdW5jdGlvbiBtYXkKLW5vdCBtb2RpZnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRfaWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkIG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvZiB0aGUgZmllbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZm9yZWFjaCBvcGVyYXRpb24gc2hvdWxkIGNvbnRpbnVlLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZgotdGhlIGZvcmVhY2ggb3BlcmF0aW9uIHNob3VsZCBzdG9wIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0cnVjdHVyZU1hcEZ1bmMiPjwvYT48aDM+R3N0U3RydWN0dXJlTWFwRnVuY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFN0cnVjdHVyZU1hcEZ1bmM8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBmaWVsZF9pZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSgpPC9jb2RlPjwvYT4uIFRoZSBmdW5jdGlvbgotbWF5IG1vZGlmeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RTdHJ1Y3R1cmVNYXBGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkX2lkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IG9mIHRoZSBmaWVsZCBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RydWN0dXJlTWFwRnVuYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbWFwIG9wZXJhdGlvbiBzaG91bGQgY29udGludWUsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmCi10aGUgbWFwIG9wZXJhdGlvbiBzaG91bGQgc3RvcCB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTdHJ1Y3R1cmVGaWx0ZXJNYXBGdW5jIj48L2E+PGgzPkdzdFN0cnVjdHVyZUZpbHRlck1hcEZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RTdHJ1Y3R1cmVGaWx0ZXJNYXBGdW5jPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGRfaWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maWx0ZXItYW5kLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UoKTwvY29kZT48L2E+LgotVGhlIGZ1bmN0aW9uIG1heSBtb2RpZnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0sIGFuZCB0aGUgdmFsdWUgd2lsbCBiZSByZW1vdmVkIGZyb20KLXRoZSBzdHJ1Y3R1cmUgaWYgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RydWN0dXJlRmlsdGVyTWFwRnVuYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZF9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBvZiB0aGUgZmllbGQgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9mIHRoZSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFN0cnVjdHVyZUZpbHRlck1hcEZ1bmMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGZpZWxkIHNob3VsZCBiZSBwcmVzZXJ2ZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIGl0Ci1zaG91bGQgYmUgcmVtb3ZlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctZW1wdHkiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9uZXdfZW1wdHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldywgZW1wdHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5TZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LW5hbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldF9uYW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX3NldF9uYW1lKCk8L2NvZGU+PC9hPiBmb3IgY29uc3RyYWludHMgb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0gcGFyYW1ldGVyLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9zdHJ1Y3R1cmVfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtbmV3LWVtcHR5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiBuZXcgc3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctZW1wdHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldywgZW1wdHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtbmV3LWlkLWVtcHR5Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IHF1YXJrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcsIGVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHdpdGggdGhlIGdpdmVuIG5hbWUgYXMgYSBHUXVhcmsuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctaWQtZW1wdHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1YXJrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiBuZXcgc3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctaWQtZW1wdHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldywgZW1wdHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtbmV3Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RydWN0dXJlX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlyc3RmaWVsZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gIFBhcnNlcyB0aGUKLWxpc3Qgb2YgdmFyaWFibGUgYXJndW1lbnRzIGFuZCBzZXRzIGZpZWxkcyB0byB0aGUgdmFsdWVzIGxpc3RlZC4KLVZhcmlhYmxlIGFyZ3VtZW50cyBzaG91bGQgYmUgcGFzc2VkIGFzIGZpZWxkIG5hbWUsIGZpZWxkIHR5cGUsCi1hbmQgdmFsdWUuICBMYXN0IHZhcmlhYmxlIGFyZ3VtZW50IHNob3VsZCBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgbmV3IHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maXJzdGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiBmaXJzdCBmaWVsZCB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWRkaXRpb25hbCBhcmd1bWVudHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtbmV3LXZhbGlzdCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX25ld192YWxpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpcnN0ZmllbGQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHdpdGggdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0uICBTdHJ1Y3R1cmUgZmllbGRzCi1hcmUgc2V0IGFjY29yZGluZyB0byB0aGUgdmFyYXJncyBpbiBhIG1hbm5lciBzaW1pbGFyIHRvCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9uZXcoKTwvY29kZT48L2E+LjwvcD4KLTxwPlNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X25hbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUoKTwvY29kZT48L2E+IGZvciBjb25zdHJhaW50cyBvbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLSBwYXJhbWV0ZXIuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctdmFsaXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIG5ldyBzdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3RmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgZmlyc3QgZmllbGQgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhcmFyZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD52YXJpYWJsZSBhcmd1bWVudCBsaXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLW5ldy12YWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctaWQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9uZXdfaWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJ1Y3R1cmVfbmV3X2lkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gbmFtZV9xdWFyazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGRfcXVhcms8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHdpdGggdGhlIGdpdmVuIG5hbWUgYXMgYSBHUXVhcmssIGZvbGxvd2VkIGJ5Ci1maWVsZG5hbWUgcXVhcmssIEdUeXBlLCBhcmd1bWVudChzKSAidHJpcGxldHMiIGluIHRoZSBzYW1lIGZvcm1hdCBhcwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtc2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9zZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfaWRfc2V0KCk8L2NvZGU+PC9hPi4gQmFzaWNhbGx5IGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldy1pZC1lbXB0eSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eSgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2lkX3NldCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhlIGxhc3QgdmFyaWFibGUgYXJndW1lbnQgbXVzdCBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gKG9yIDApLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9zdHJ1Y3R1cmVfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtbmV3LWlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWVfcXVhcms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIG5ldyBzdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRfcXVhcms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgR1F1YXJrIGZvciB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhcmlhYmxlIGFyZ3VtZW50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctaWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctZnJvbS1zdHJpbmciPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9uZXdfZnJvbV9zdHJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJ1Y3R1cmVfbmV3X2Zyb21fc3RyaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnN0cmluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gZnJvbSBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLUlmIGVuZCBpcyBub3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBhIHBvaW50ZXIgdG8gdGhlIHBsYWNlIGluc2lkZSB0aGUgZ2l2ZW4gc3RyaW5nCi13aGVyZSBwYXJzaW5nIGVuZGVkIHdpbGwgYmUgcmV0dXJuZWQuPC9wPgotPHA+VGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2Ygc2VyaWFsaXphdGlvbiB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzCi13aGVuIHRoZXJlIGFyZSBuZXN0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gLyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBkZWVwZXIgdGhhbiBvbmUgbGV2ZWwuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1uZXctZnJvbS1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLW5ldy1mcm9tLXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgotd2hlbiB0aGUgc3RyaW5nIGNvdWxkIG5vdCBiZSBwYXJzZWQuIEZyZWUgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJlZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1jb3B5Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfY29wecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotZ3N0X3N0cnVjdHVyZV9jb3B5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EdXBsaWNhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYW5kIGFsbCBpdHMgZmllbGRzIGFuZCB2YWx1ZXMuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1jb3B5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHRvIGR1cGxpY2F0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtY29weS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZyZWUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N0cnVjdHVyZV9mcmVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GcmVlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGFuZCBhbGwgaXRzIGZpZWxkcyBhbmQgdmFsdWVzLiBUaGUgc3RydWN0dXJlIG11c3Qgbm90Ci1oYXZlIGEgcGFyZW50IHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1mcmVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IHRvIGZyZWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1uYW1lIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0gYXMgYSBzdHJpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWhhcy1uYW1lIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaGFzX25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgc3RydWN0dXJlIGhhcyB0aGUgZ2l2ZW4gbmFtZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaGFzLW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c3RydWN0dXJlIG5hbWUgdG8gY2hlY2sgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWhhcy1uYW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci1tYXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtc2V0LW5hbWUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9zZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIG5hbWUgb2YgdGhlIHN0cnVjdHVyZSB0byB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLS4gIFRoZSBzdHJpbmcKLXByb3ZpZGVkIGlzIGNvcGllZCBiZWZvcmUgYmVpbmcgdXNlZC4gSXQgbXVzdCBub3QgYmUgZW1wdHksIHN0YXJ0IHdpdGggYQotbGV0dGVyIGFuZCBjYW4gYmUgZm9sbG93ZWQgYnkgbGV0dGVycywgbnVtYmVycyBhbmQgYW55IG9mICIvLV8uOiIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1zZXQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IG5hbWUgb2YgdGhlIHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1uYW1lLWlkIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbmFtZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0gYXMgYSBHUXVhcmsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZS1pZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LW5hbWUtaWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcXVhcmsgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtZ2V0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2lkX2dldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpcnN0X2ZpZWxkX2lkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2VzIHRoZSB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHJlYWRzIGZpZWxkcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLSBhY2NvcmRpbmdseS4KLVZhcmlhYmxlIGFyZ3VtZW50cyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gZmllbGQgaWQgcXVhcmssIGZpZWxkIHR5cGUKLShhcyBhIEdUeXBlKSwgcG9pbnRlcihzKSB0byBhIHZhcmlhYmxlKHMpIHRvIGhvbGQgdGhlIHJldHVybiB2YWx1ZShzKS4KLVRoZSBsYXN0IHZhcmlhYmxlIGFyZ3VtZW50IHNob3VsZCBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gKHRlY2huaWNhbGx5IGl0IHNob3VsZCBiZSBhCi0wIHF1YXJrLCBidXQgd2UgcmVxdWlyZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gc28gY29tcGlsZXJzIHRoYXQgc3VwcG9ydCBpdCBjYW4gY2hlY2sgZm9yCi10aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRlcm1pbmF0b3IgYW5kIHdhcm4gaWYgaXQncyBub3QgdGhlcmUpLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMganVzdCBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2dldCgpPC9jb2RlPjwvYT4gb25seSB0aGF0IGl0IGlzIHNsaWdodGx5Ci1tb3JlIGVmZmljaWVudCBzaW5jZSBpdCBzYXZlcyB0aGUgc3RyaW5nLXRvLXF1YXJrIGxvb2t1cCBpbiB0aGUgZ2xvYmFsCi1xdWFyayBoYXNodGFibGUuPC9wPgotPHA+Rm9yIHJlZmNvdW50ZWQgKG1pbmkpb2JqZWN0cyB5b3Ugd2lsbCByZWNlaXZlIGEgbmV3IHJlZmVyZW5jZSB3aGljaAoteW91IG11c3QgcmVsZWFzZSB3aXRoIGEgc3VpdGFibGUgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5fdW5yZWYoKTwvY29kZT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLiBGb3IKLXN0cmluZ3MgYW5kIGJveGVkIHR5cGVzIHlvdSB3aWxsIHJlY2VpdmUgYSBjb3B5IHdoaWNoIHlvdSB3aWxsIG5lZWQgdG8KLXJlbGVhc2Ugd2l0aCBlaXRoZXIgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiBvciB0aGUgc3VpdGFibGUgZnVuY3Rpb24gZm9yIHRoZSBib3hlZCB0eXBlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtZ2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3RfZmllbGRfaWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcXVhcmsgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFyaWFibGUgYXJndW1lbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLWdldC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBhbnkgb2YgdGhlIGZpZWxkcyAoZS5nLgotYmVjYXVzZSB0aGUgZmllbGQgcmVxdWVzdGVkIGRpZCBub3QgZXhpc3QsIG9yIHdhcyBvZiBhIHR5cGUgb3RoZXIKLXRoYW4gdGhlIHR5cGUgc3BlY2lmaWVkKSwgb3RoZXJ3aXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsaXN0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpcnN0X2ZpZWxkX2lkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IGFyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGFyc2VzIHRoZSB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHJlYWRzIGZpZWxkcyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLSBhY2NvcmRpbmdseS4KLXZhbGlzdC12YXJpYW50IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWdldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfZ2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2lkX2dldCgpPC9jb2RlPjwvYT4uIExvb2sgYXQgdGhlIGRvY3VtZW50YXRpb24gb2YKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLWdldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfZ2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2lkX2dldCgpPC9jb2RlPjwvYT4gZm9yIG1vcmUgZGV0YWlscy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLWdldC12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maXJzdF9maWVsZF9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBxdWFyayBvZiB0aGUgZmlyc3QgZmllbGQgdG8gcmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFyaWFibGUgYXJndW1lbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLWdldC12YWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBhbnkgb2YgdGhlIGZpZWxkczwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLWdldC12YWx1ZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggR1F1YXJrIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtZ2V0LXZhbHVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkIHRvIGdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsdWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lCi1pZGVudGlmaWVyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLXNldC12YWx1ZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIEdRdWFyayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGQ8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS4gIElmIHRoZSBmaWVsZAotZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQuICBJZiB0aGUgZmllbGQgZXhpc3RzLCB0aGUgcHJldmlvdXMKLXZhbHVlIGlzIHJlcGxhY2VkIGFuZCBmcmVlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLXNldC12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiByZXByZXNlbnRpbmcgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtdGFrZS12YWx1ZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBHUXVhcmsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uICBJZiB0aGUgZmllbGQKLWRvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLiAgSWYgdGhlIGZpZWxkIGV4aXN0cywgdGhlIHByZXZpb3VzCi12YWx1ZSBpcyByZXBsYWNlZCBhbmQgZnJlZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC10YWtlLXZhbHVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IHJlcHJlc2VudGluZyBhIGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZ2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaXJzdF9maWVsZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZXMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgcmVhZHMgZmllbGRzIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotIGFjY29yZGluZ2x5LgotVmFyaWFibGUgYXJndW1lbnRzIHNob3VsZCBiZSBpbiB0aGUgZm9ybSBmaWVsZCBuYW1lLCBmaWVsZCB0eXBlCi0oYXMgYSBHVHlwZSksIHBvaW50ZXIocykgdG8gYSB2YXJpYWJsZShzKSB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUocykuCi1UaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBzaG91bGQgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxwPkZvciByZWZjb3VudGVkIChtaW5pKW9iamVjdHMgeW91IHdpbGwgcmVjZWl2ZSBhIG5ldyByZWZlcmVuY2Ugd2hpY2gKLXlvdSBtdXN0IHJlbGVhc2Ugd2l0aCBhIHN1aXRhYmxlIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+X3VucmVmKCk8L2NvZGU+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gRm9yCi1zdHJpbmdzIGFuZCBib3hlZCB0eXBlcyB5b3Ugd2lsbCByZWNlaXZlIGEgY29weSB3aGljaCB5b3Ugd2lsbCBuZWVkIHRvCi1yZWxlYXNlIHdpdGggZWl0aGVyIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gb3IgdGhlIHN1aXRhYmxlIGZ1bmN0aW9uIGZvciB0aGUgYm94ZWQgdHlwZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpcnN0X2ZpZWxkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBmaXJzdCBmaWVsZCB0byByZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhcmlhYmxlIGFyZ3VtZW50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgYW55IG9mIHRoZSBmaWVsZHMgKGUuZy4KLWJlY2F1c2UgdGhlIGZpZWxkIHJlcXVlc3RlZCBkaWQgbm90IGV4aXN0LCBvciB3YXMgb2YgYSB0eXBlIG90aGVyCi10aGFuIHRoZSB0eXBlIHNwZWNpZmllZCksIG90aGVyd2lzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LXZhbGlzdCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF92YWxpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpcnN0X2ZpZWxkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiBhcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlcyB0aGUgdmFyaWFibGUgYXJndW1lbnRzIGFuZCByZWFkcyBmaWVsZHMgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0gYWNjb3JkaW5nbHkuCi12YWxpc3QtdmFyaWFudCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9nZXQoKTwvY29kZT48L2E+LiBMb29rIGF0IHRoZSBkb2N1bWVudGF0aW9uIG9mCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9nZXQoKTwvY29kZT48L2E+IGZvciBtb3JlIGRldGFpbHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdmFsaXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3RfZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhcmlhYmxlIGFyZ3VtZW50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdmFsaXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgYW55IG9mIHRoZSBmaWVsZHM8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPsKgKgotZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggbmFtZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gZ2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC12YWx1ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtc2V0LXZhbHVlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLiAgSWYgdGhlIGZpZWxkCi1kb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gIElmIHRoZSBmaWVsZCBleGlzdHMsIHRoZSBwcmV2aW91cwotdmFsdWUgaXMgcmVwbGFjZWQgYW5kIGZyZWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtc2V0LXZhbHVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtdGFrZS12YWx1ZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uICBJZiB0aGUgZmllbGQKLWRvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLiAgSWYgdGhlIGZpZWxkIGV4aXN0cywgdGhlIHByZXZpb3VzCi12YWx1ZSBpcyByZXBsYWNlZCBhbmQgZnJlZWQuIFRoZSBmdW5jdGlvbiB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtdGFrZS12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgZmllbGQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXNldCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX3NldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zdHJ1Y3R1cmVfc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlcyB0aGUgdmFyaWFibGUgYXJndW1lbnRzIGFuZCBzZXRzIGZpZWxkcyBhY2NvcmRpbmdseS4gRmllbGRzIHRoYXQKLXdlcmVuJ3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUgYXJlIGFkZGVkIGFzIG5lZWRlZC4KLVZhcmlhYmxlIGFyZ3VtZW50cyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gZmllbGQgbmFtZSwgZmllbGQgdHlwZQotKGFzIGEgR1R5cGUpLCB2YWx1ZShzKS4gIFRoZSBsYXN0IHZhcmlhYmxlIGFyZ3VtZW50IHNob3VsZCBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1zZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhcmlhYmxlIGFyZ3VtZW50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXNldC12YWxpc3QiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD52YV9saXN0IGZvcm0gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfc2V0KCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXNldC12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhcmFyZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD52YXJpYWJsZSBhcmd1bWVudHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1zZXQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pZF9zZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfc3RydWN0dXJlX2lkX3NldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPklkZW50aWNhbCB0byBnc3Rfc3RydWN0dXJlX3NldCwgZXhjZXB0IHRoYXQgZmllbGQgbmFtZXMgYXJlCi1wYXNzZWQgdXNpbmcgdGhlIEdRdWFyayBmb3IgdGhlIGZpZWxkIG5hbWUuIFRoaXMgYWxsb3dzIG1vcmUgZWZmaWNpZW50Ci1zZXR0aW5nIG9mIHRoZSBzdHJ1Y3R1cmUgaWYgdGhlIGNhbGxlciBhbHJlYWR5IGtub3dzIHRoZSBhc3NvY2lhdGVkCi1xdWFyayB2YWx1ZXMuCi1UaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBtdXN0IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWlkLXNldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBHUXVhcmsgZm9yIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFyaWFibGUgYXJndW1lbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtc2V0LXZhbGlzdCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcmFyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+dmFfbGlzdCBmb3JtIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2lkX3NldCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1zZXQtdmFsaXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YXJhcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFyaWFibGUgYXJndW1lbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZXMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuICBJZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4KLW5hbWUgZG9lcyBub3QgZXhpc3QsIHRoZSBzdHJ1Y3R1cmUgaXMgdW5jaGFuZ2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHJlbW92ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlcyB0aGUgZmllbGRzIHdpdGggdGhlIGdpdmVuIG5hbWVzLiBJZiBhIGZpZWxkIGRvZXMgbm90IGV4aXN0LCB0aGUKLWFyZ3VtZW50IGlzIGlnbm9yZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHJlbW92ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBsaXN0IG9mIG1vcmUgZmllbGRuYW1lcyB0byByZW1vdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzLXZhbGlzdCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyYXJnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD52YV9saXN0IGZvcm0gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkcyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXJlbW92ZS1maWVsZHMtdmFsaXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHJlbW92ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YXJhcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LXRlcm1pbmF0ZWQgbGlzdCBvZiBtb3JlIGZpZWxkbmFtZXMgdG8gcmVtb3ZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWFsbC1maWVsZHMiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZXMgYWxsIGZpZWxkcyBpbiBhIEdzdFN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLXJlbW92ZS1hbGwtZmllbGRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1maWVsZC10eXBlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGRfdHlwZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaW5kcyB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIHJldHVybnMgdGhlIHR5cGUgb2YgdGhlCi12YWx1ZSBpdCBjb250YWlucy4gIElmIHRoZSBmaWVsZCBpcyBub3QgZm91bmQsIEdfVFlQRV9JTlZBTElEIGlzCi1yZXR1cm5lZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1maWVsZC10eXBlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1maWVsZC10eXBlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdGhlIGZpZWxkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtbi1maWVsZHMiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9uX2ZpZWxkc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiB0aGUgc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtbi1maWVsZHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLW4tZmllbGRzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWhhcy1maWVsZCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2hhc19maWVsZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLSBjb250YWlucyBhIGZpZWxkIG5hbWVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWhhcy1maWVsZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIGEgZmllbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkLXR5cGVkIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0gY29udGFpbnMgYSBmaWVsZCBuYW1lZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+Ci0gYW5kIHdpdGggR1R5cGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWhhcy1maWVsZC10eXBlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIGEgZmllbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0eXBlIG9mIGEgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkLXR5cGVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB0eXBlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaXMtZXF1YWwiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pc19lcXVhbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9pc19lcXVhbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmUxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmUyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRlc3RzIGlmIHRoZSB0d28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYXJlIGVxdWFsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaXMtZXF1YWwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pcy1lcXVhbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdHdvIHN0cnVjdHVyZXMgaGF2ZSB0aGUgc2FtZSBuYW1lIGFuZCBmaWVsZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pcy1zdWJzZXQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pc19zdWJzZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN1YnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN1cGVyc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3Vic2V0PC9jb2RlPjwvZW0+Ci0gaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1cGVyc2V0PC9jb2RlPjwvZW0+Ci0sIGkuZS4gaGFzIHRoZSBzYW1lCi1zdHJ1Y3R1cmUgbmFtZSBhbmQgZm9yIGFsbCBmaWVsZHMgdGhhdCBhcmUgZXhpc3RpbmcgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1cGVyc2V0PC9jb2RlPjwvZW0+Ci0sCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3Vic2V0PC9jb2RlPjwvZW0+Ci0gaGFzIGEgdmFsdWUgdGhhdCBpcyBhIHN1YnNldCBvZiB0aGUgdmFsdWUgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1cGVyc2V0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pcy1zdWJzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3Vic2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdXBlcnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcG90ZW50aWFsbHkgZ3JlYXRlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pcy1zdWJzZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1YnNldDwvY29kZT48L2VtPgotaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1cGVyc2V0PC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1jYW4taW50ZXJzZWN0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9jYW5faW50ZXJzZWN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdDE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0MjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmllcyBpbnRlcnNlY3RpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdDE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdDI8L2NvZGU+PC9lbT4KLSBhbmQgcmVwb3J0cyB3aGV0aGVyIHRoZSByZXN1bHQKLXdvdWxkIG5vdCBiZSBlbXB0eS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWNhbi1pbnRlcnNlY3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0MTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0MjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtY2FuLWludGVyc2VjdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBpbnRlcnNlY3Rpb24gd291bGQgbm90IGJlIGVtcHR5PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaW50ZXJzZWN0Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RydWN0dXJlX2ludGVyc2VjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3QxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0MjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JbnRlcnNlY3RzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3QxPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3QyPC9jb2RlPjwvZW0+Ci0gYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWludGVyc2VjdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3QxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3QyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pbnRlcnNlY3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBJbnRlcnNlY3Rpb24gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdDE8L2NvZGU+PC9lbT4KLWFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0MjwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IGZpZWxkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLSBjb250YWlucyBhIGZpZWxkIG5hbWVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBvZiB0aGUgZmllbGQgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQtdHlwZWQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGRfdHlwZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZmllbGQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0gY29udGFpbnMgYSBmaWVsZCBuYW1lZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGQ8L2NvZGU+PC9lbT4KLSBhbmQgd2l0aCBHVHlwZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkLXR5cGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBvZiB0aGUgZmllbGQgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHR5cGUgb2YgYSB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQtdHlwZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHR5cGU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtYm9vbGVhbiI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBib29sZWFuIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCi1naXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cwotYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWJvb2xlYW4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiBhIGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHRvIHNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1ib29sZWFuLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKLXdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPgotb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIGJvb2xlYW4sIHRoaXMKLWZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWludCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9pbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBpbnQgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUKLWdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCi1hbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtaW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYW4gaW50IHRvIHNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1pbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+Ci1vciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGFuIGludCwgdGhpcyBmdW5jdGlvbgotcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdWludCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF91aW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2dldF91aW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSB1aW50IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCi1naXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cwotYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LXVpbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiBhIGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byBhIHVpbnQgdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LXVpbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+Ci1vciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgdWludCwgdGhpcyBmdW5jdGlvbgotcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtaW50NjQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfaW50NjTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDY0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQotZ2l2ZW4gZmllbGQuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cwotYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWludDY0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHRvIHNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1pbnQ2NC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgc2V0IGNvcnJlY3RseS4gSWYgdGhlcmUgd2FzIG5vIGZpZWxkCi13aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT4KLW9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+LCB0aGlzIGZ1bmN0aW9uCi1yZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC11aW50NjQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfdWludDY0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2dldF91aW50NjQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCi1naXZlbiBmaWVsZC4gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCi1hbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtdWludDY0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LXVpbnQ2NC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgc2V0IGNvcnJlY3RseS4gSWYgdGhlcmUgd2FzIG5vIGZpZWxkCi13aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZG5hbWU8L2NvZGU+PC9lbT4KLW9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4sIHRoaXMgZnVuY3Rpb24KLXJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWRvdWJsZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9kb3VibGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBkb3VibGUgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUKLWdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCi1hbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtZG91YmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYSBnZG91YmxlIHRvIHNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1kb3VibGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+Ci1vciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgZG91YmxlLCB0aGlzCi1mdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1zdHJpbmciPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaW5kcyB0aGUgZmllbGQgY29ycmVzcG9uZGluZyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+Ci0sIGFuZCByZXR1cm5zIHRoZSBzdHJpbmcKLWNvbnRhaW5lZCBpbiB0aGUgZmllbGQncyB2YWx1ZS4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nCi1zdXJlIHRoZSBmaWVsZCBleGlzdHMgYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLjwvcD4KLTxwPlRoZSBzdHJpbmcgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgYW5kIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIG5leHQKLWNhbGwgdG8gYSBnc3Rfc3RydWN0dXJlXyooKSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtc3RyaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtc3RyaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhlCi1maWVsZCBkaWQgbm90IGV4aXN0IG9yIGRpZCBub3QgY29udGFpbiBhIHN0cmluZy4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1kYXRlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHRGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEYXRlPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBkYXRlIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gY29ycmVzcG9uZGluZyB0byB0aGUgZGF0ZSBvZiB0aGUKLWdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCi1hbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuPC9wPgotPHA+T24gc3VjY2VzcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB3aWxsIHBvaW50IHRvIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGRhdGUgd2hpY2gKLXNob3VsZCBiZSBmcmVlZCB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjZy1kYXRlLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19kYXRlX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZCAobm90ZTogdGhpcyBpcwotaW5jb25zaXN0ZW50IHdpdGggZS5nLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoKTwvY29kZT48L2E+IHdoaWNoIGRvZXNuJ3QgcmV0dXJuIGEKLWNvcHkgb2YgdGhlIHN0cmluZykuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIGEgZmllbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHRGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEYXRlPC9zcGFuPjwvYT4gdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJPdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dCBjYWxsZWUtYWxsb2NhdGVzPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWRhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+Ci1vciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgZGF0YSwgdGhpcyBmdW5jdGlvbgotcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZS10aW1lIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiAqKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGRhdGV0aW1lIHBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gY29ycmVzcG9uZGluZyB0byB0aGUgZGF0ZXRpbWUgb2YgdGhlCi1naXZlbiBmaWVsZC4gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCi1hbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuPC9wPgotPHA+T24gc3VjY2VzcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB3aWxsIHBvaW50IHRvIGEgcmVmZXJlbmNlIG9mIHRoZSBkYXRldGltZSB3aGljaAotc2hvdWxkIGJlIHVucmVmZmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS11bnJlZiIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kYXRlX3RpbWVfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZAotKG5vdGU6IHRoaXMgaXMgaW5jb25zaXN0ZW50IHdpdGggZS5nLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoKTwvY29kZT48L2E+Ci13aGljaCBkb2Vzbid0IHJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZykuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZS10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiB0byBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlZS1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZS10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKLXdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPgotb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIGRhdGEsIHRoaXMgZnVuY3Rpb24KLXJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWNsb2NrLXRpbWUiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpZWxkbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgY2xvY2sgdGltZSBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNsb2NrIHRpbWUKLW9mIHRoZSBnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cwotYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWNsb2NrLXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiBhIGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRvIHNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1jbG9jay10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKLXdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPgotb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+LCB0aGlzCi1mdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1lbnVtIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW0gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBlbnVtdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGludCBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQotZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMsCi1oYXMgdGhlIGNvcnJlY3QgdHlwZSBhbmQgdGhhdCB0aGUgZW51bXR5cGUgaXMgY29ycmVjdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1lbnVtLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnVtdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbnVtIHR5cGUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYW4gaW50IHRvIHNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1lbnVtLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKLXdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPgotb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhbiBlbnVtIG9mIHRoZSBnaXZlbgotdHlwZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1mcmFjdGlvbiI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnZhbHVlX251bWVyYXRvcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICp2YWx1ZV9kZW5vbWluYXRvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBpbnRlZ2VycyBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZV9udW1lcmF0b3I8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlX2Rlbm9taW5hdG9yPC9jb2RlPjwvZW0+Ci0KLWNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZQotZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMgYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWZyYWN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZV9udW1lcmF0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIGFuIGludCB0byBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZV9kZW5vbWluYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYW4gaW50IHRvIHNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1mcmFjdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWVzIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmllbGRuYW1lPC9jb2RlPjwvZW0+Ci1vciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgR3N0RnJhY3Rpb24sIHRoaXMKLWZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZm9yZWFjaCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2ZvcmVhY2jCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+ICpzdHJ1Y3R1cmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMiIHRpdGxlPSJHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggZmllbGQgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiBUaGUKLWZ1bmN0aW9uIG11c3Qgbm90IG1vZGlmeSB0aGUgZmllbGRzLiBBbHNvIHNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2UoKTwvY29kZT48L2E+Ci1hbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZmlsdGVyLWFuZC1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZvcmVhY2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBmaWVsZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwcml2YXRlIGRhdGEuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1mb3JlYWNoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdXBwbGllZCBmdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBGb3IgZWFjaCBvZiB0aGUgZmllbGRzLAotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLW1hcC1pbi1wbGFjZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlTWFwRnVuYyIgdGl0bGU9IkdzdFN0cnVjdHVyZU1hcEZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlTWFwRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBmaWVsZCBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4uIEluCi1jb250cmFzdCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mb3JlYWNoIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9mb3JlYWNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX2ZvcmVhY2goKTwvY29kZT48L2E+LCB0aGUgZnVuY3Rpb24gbWF5IG1vZGlmeSBidXQgbm90IGRlbGV0ZSB0aGUKLWZpZWxkcy4gVGhlIHN0cnVjdHVyZSBtdXN0IGJlIG11dGFibGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBmaWVsZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwcml2YXRlIGRhdGEuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IEZvciBlYWNoIG9mIHRoZSBmaWVsZHMsCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZmlsdGVyLWFuZC1tYXAtaW4tcGxhY2UiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9maWx0ZXJfYW5kX21hcF9pbl9wbGFjZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zdHJ1Y3R1cmVfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmVGaWx0ZXJNYXBGdW5jIiB0aXRsZT0iR3N0U3RydWN0dXJlRmlsdGVyTWFwRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmVGaWx0ZXJNYXBGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggZmllbGQgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiBJbgotY29udHJhc3QgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZm9yZWFjaCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZm9yZWFjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N0cnVjdHVyZV9mb3JlYWNoKCk8L2NvZGU+PC9hPiwgdGhlIGZ1bmN0aW9uIG1heSBtb2RpZnkgdGhlIGZpZWxkcy4KLUluIGNvbnRyYXN0IHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSgpPC9jb2RlPjwvYT4sIHRoZSBmaWVsZCBpcyByZW1vdmVkIGZyb20KLXRoZSBzdHJ1Y3R1cmUgaWYgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24uCi1UaGUgc3RydWN0dXJlIG11c3QgYmUgbXV0YWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpbHRlci1hbmQtbWFwLWluLXBsYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZmllbGQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcHJpdmF0ZSBkYXRhLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1udGgtZmllbGQtbmFtZSI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIG5hbWUgb2YgdGhlIGdpdmVuIGZpZWxkIG51bWJlciwgY291bnRpbmcgZnJvbSAwIG9ud2FyZHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1udGgtZmllbGQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGluZGV4IHRvIGdldCB0aGUgbmFtZSBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1udGgtZmllbGQtbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuYW1lIG9mIHRoZSBnaXZlbiBmaWVsZCBudW1iZXI8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1zZXQtcGFyZW50LXJlZmNvdW50Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcmVmY291bnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgcGFyZW50X3JlZmNvdW50IGZpZWxkIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+LiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8KLWRldGVybWluZSB3aGV0aGVyIGEgc3RydWN0dXJlIGlzIG11dGFibGUgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlCi1jYWxsZWQgYnkgY29kZSBpbXBsZW1lbnRpbmcgcGFyZW50IG9iamVjdHMgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4sIGFzIGRlc2NyaWJlZCBpbgotdGhlIE1UIFJlZmNvdW50aW5nIHNlY3Rpb24gb2YgdGhlIGRlc2lnbiBkb2N1bWVudHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1zZXQtcGFyZW50LXJlZmNvdW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVmY291bnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwb2ludGVyIHRvIHRoZSBwYXJlbnQncyByZWZjb3VudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtc2V0LXBhcmVudC1yZWZjb3VudC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFyZW50IHJlZmNvdW50IGNvdWxkIGJlIHNldC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS10by1zdHJpbmciPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV90b19zdHJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db252ZXJ0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0gdG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uPC9wPgotPHA+Rm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpdHMgZWFzaWVyIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxPRzpDQVBTIj5HU1RfTE9HPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7c3RydWN0dXJlIGlzICUmcXVvdDs8L3NwYW4+IEdTVF9QVFJfRk9STUFUPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHN0cnVjdHVyZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxwPgotVGhpcyBwcmludHMgdGhlIHN0cnVjdHVyZSBpbiBodW1hbiByZWFkYWJsZSBmb3JtLjwvcD4KLTxwPlRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHNlcmlhbGl6YXRpb24gd2lsbCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cwotd2hlbiB0aGVyZSBhcmUgbmVzdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IC8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gZGVlcGVyIHRoYW4gb25lIGxldmVsLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtdG8tc3RyaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS10by1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIHBvaW50ZXIgdG8gc3RyaW5nIGFsbG9jYXRlZCBieSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctbWFsbG9jIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfbWFsbG9jKCk8L2NvZGU+PC9hPi4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZnJvbS1zdHJpbmciPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzdHJpbmc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKiplbmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGZyb20gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi1JZiBlbmQgaXMgbm90IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgYSBwb2ludGVyIHRvIHRoZSBwbGFjZSBpbnNpZGUgdGhlIGdpdmVuIHN0cmluZwotd2hlcmUgcGFyc2luZyBlbmRlZCB3aWxsIGJlIHJldHVybmVkLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9zdHJ1Y3R1cmVfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZnJvbS1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gc3RvcmUgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGluLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZnJvbS1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4KLXdoZW4gdGhlIHN0cmluZyBjb3VsZCBub3QgYmUgcGFyc2VkLiBGcmVlIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZyZWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZml4YXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N0cnVjdHVyZV9maXhhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpeGF0ZSBhbGwgdmFsdWVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLSB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWZpeGF0ZSIgdGl0bGU9ImdzdF92YWx1ZV9maXhhdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9maXhhdGUoKTwvY29kZT48L2E+LgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotIHdpbGwgYmUgbW9kaWZpZWQgaW4tcGxhY2UgYW5kIHNob3VsZCBiZSB3cml0YWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQiPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZF9uYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpeGF0ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBieSBjaGFuZ2luZyB0aGUgZ2l2ZW4gZmllbGQgd2l0aCBpdHMgZml4YXRlZCB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpZWxkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN0cnVjdHVyZSBmaWVsZCBjb3VsZCBiZSBmaXhhdGVkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtaW50Ij48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5pbnQ8L3NwYW4+IHRhcmdldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaXhhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYnkgY2hhbmdpbmcgdGhlIGdpdmVuIGZpZWxkIHRvIHRoZSBuZWFyZXN0Ci1pbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4KLSB0aGF0IGlzIGEgc3Vic2V0IG9mIHRoZSBleGlzdGluZyBmaWVsZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWludC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpZWxkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YXJnZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGFyZ2V0IHZhbHVlIG9mIHRoZSBmaXhhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1pbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN0cnVjdHVyZSBjb3VsZCBiZSBmaXhhdGVkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtZG91YmxlIj48L2E+PGgzPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZG91YmxlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2RvdWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqZmllbGRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5kb3VibGU8L3NwYW4+IHRhcmdldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaXhhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYnkgY2hhbmdpbmcgdGhlIGdpdmVuIGZpZWxkIHRvIHRoZSBuZWFyZXN0Ci1kb3VibGUgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldDwvY29kZT48L2VtPgotIHRoYXQgaXMgYSBzdWJzZXQgb2YgdGhlIGV4aXN0aW5nIGZpZWxkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLW5lYXJlc3QtZG91YmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmllbGQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhcmdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWRvdWJsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc3RydWN0dXJlIGNvdWxkIGJlIGZpeGF0ZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1mcmFjdGlvbiI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZF9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHRhcmdldF9udW1lcmF0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdGFyZ2V0X2Rlbm9taW5hdG9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpeGF0ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBieSBjaGFuZ2luZyB0aGUgZ2l2ZW4gZmllbGQgdG8gdGhlIG5lYXJlc3QKLWZyYWN0aW9uIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXRfbnVtZXJhdG9yPC9jb2RlPjwvZW0+Ci0vPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhcmdldF9kZW5vbWluYXRvcjwvY29kZT48L2VtPgotIHRoYXQgaXMgYSBzdWJzZXQKLW9mIHRoZSBleGlzdGluZyBmaWVsZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWZyYWN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmllbGQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhcmdldF9udW1lcmF0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbnVtZXJhdG9yIG9mIHRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhcmdldF9kZW5vbWluYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBkZW5vbWluYXRvciBvZiB0aGUgdGFyZ2V0IHZhbHVlIG9mIHRoZSBmaXhhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1mcmFjdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc3RydWN0dXJlIGNvdWxkIGJlIGZpeGF0ZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtYm9vbGVhbiI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKmZpZWxkX25hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gdGFyZ2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpeGF0ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiBieSBjaGFuZ2luZyB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkX25hbWU8L2NvZGU+PC9lbT4KLSBmaWVsZCB0byB0aGUgZ2l2ZW4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXJnZXQ8L2NvZGU+PC9lbT4KLSBib29sZWFuIGlmIHRoYXQgZmllbGQgaXMgbm90IGZpeGVkIHlldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1ib29sZWFuLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmllbGQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cnVjdHVyZTwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhcmdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1ib29sZWFuLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1zdHJpbmciPjwvYT48aDM+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RydWN0dXJlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZF9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhcmdldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaXhhdGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYnkgY2hhbmdpbmcgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWVsZF9uYW1lPC9jb2RlPjwvZW0+Ci0gZmllbGQgdG8gdGhlIGdpdmVuCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFyZ2V0PC9jb2RlPjwvZW0+Ci0gc3RyaW5nIGlmIHRoYXQgZmllbGQgaXMgbm90IGZpeGVkIHlldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWVsZF9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmaWVsZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFyZ2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkLXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc3RydWN0dXJlIGNvdWxkIGJlIGZpeGF0ZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTdHJ1Y3R1cmUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0cnVjdHVyZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFN0cnVjdHVyZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFN0cnVjdHVyZSB7Ci0gIEdUeXBlIHR5cGU7Ci19OwotPC9wcmU+Ci08cD5UaGUgR3N0U3RydWN0dXJlIG9iamVjdC4gTW9zdCBmaWVsZHMgYXJlIHByaXZhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RydWN0dXJlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RydWN0dXJlLXN0cnVjdC50eXBlIj48L2E+dHlwZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIEdUeXBlIG9mIGEgc3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTdHJ1Y3R1cmUuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0U3lzdGVtQ2xvY2suaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0U3lzdGVtQ2xvY2suaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAzMzFkNS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdFN5c3RlbUNsb2NrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFN5c3RlbUNsb2NrOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFN5c3RlbUNsb2NrLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RTeXN0ZW1DbG9jay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RTeXN0ZW1DbG9jay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0U3lzdGVtQ2xvY2siPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay50b3Bfb2ZfcGFnZSI+PC9hPkdzdFN5c3RlbUNsb2NrPC9zcGFuPjwvaDI+Ci08cD5Hc3RTeXN0ZW1DbG9jayDigJQgRGVmYXVsdCBjbG9jayB0aGF0IHVzZXMgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U3lzdGVtQ2xvY2suZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI2dzdC1zeXN0ZW0tY2xvY2stb2J0YWluIiB0aXRsZT0iZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW7CoCgpIj5nc3Rfc3lzdGVtX2Nsb2NrX29idGFpbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwjZ3N0LXN5c3RlbS1jbG9jay1zZXQtZGVmYXVsdCIgdGl0bGU9ImdzdF9zeXN0ZW1fY2xvY2tfc2V0X2RlZmF1bHTCoCgpIj5nc3Rfc3lzdGVtX2Nsb2NrX3NldF9kZWZhdWx0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U3lzdGVtQ2xvY2sucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwjR3N0Q2xvY2tUeXBlIiB0aXRsZT0iZW51bSBHc3RDbG9ja1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1R5cGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLS1jbG9jay10eXBlIiB0aXRsZT0iVGhlIOKAnGNsb2NrLXR5cGXigJ0gcHJvcGVydHkiPmNsb2NrLXR5cGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI0dzdENsb2NrVHlwZSIgdGl0bGU9ImVudW0gR3N0Q2xvY2tUeXBlIj5Hc3RDbG9ja1R5cGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTeXN0ZW1DbG9jayI+R3N0U3lzdGVtQ2xvY2s8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U3lzdGVtQ2xvY2sub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0U3lzdGVtQ2xvY2sKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGUgR1N0cmVhbWVyIGNvcmUgcHJvdmlkZXMgYSBHc3RTeXN0ZW1DbG9jayBiYXNlZCBvbiB0aGUgc3lzdGVtIHRpbWUuCi1Bc3luY2hyb25vdXMgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgZnJvbSBhbiBpbnRlcm5hbCB0aHJlYWQuPC9wPgotPHA+Q2xvY2sgaW1wbGVtZW50b3JzIGFyZSBlbmNvdXJhZ2VkIHRvIHN1YmNsYXNzIHRoaXMgc3lzdGVtY2xvY2sgYXMgaXQKLWltcGxlbWVudHMgdGhlIGFzeW5jIG5vdGlmaWNhdGlvbi48L3A+Ci08cD5TdWJjbGFzc2VzIGNhbiBob3dldmVyIG92ZXJyaWRlIGFsbCBvZiB0aGUgaW1wb3J0YW50IG1ldGhvZHMgZm9yIHN5bmMgYW5kCi1hc3luYyBub3RpZmljYXRpb25zIHRvIGltcGxlbWVudCB0aGVpciBvd24gY2FsbGJhY2sgbWV0aG9kcyBvciBibG9ja2luZwotd2FpdCBvcGVyYXRpb25zLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0U3lzdGVtQ2xvY2suZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zeXN0ZW0tY2xvY2stb2J0YWluIj48L2E+PGgzPmdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi1nc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBoYW5kbGUgdG8gdGhlIGRlZmF1bHQgc3lzdGVtIGNsb2NrLiBUaGUgcmVmY291bnQgb2YgdGhlCi1jbG9jayB3aWxsIGJlIGluY3JlYXNlZCBzbyB5b3UgbmVlZCB0byB1bnJlZiB0aGUgY2xvY2sgYWZ0ZXIKLXVzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zeXN0ZW0tY2xvY2stb2J0YWluLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGRlZmF1bHQgY2xvY2suPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN5c3RlbS1jbG9jay1zZXQtZGVmYXVsdCI+PC9hPjxoMz5nc3Rfc3lzdGVtX2Nsb2NrX3NldF9kZWZhdWx0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N5c3RlbV9jbG9ja19zZXRfZGVmYXVsdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+ICpuZXdfY2xvY2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgZGVmYXVsdCBzeXN0ZW0gY2xvY2sgdGhhdCBjYW4gYmUgb2J0YWluZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwjZ3N0LXN5c3RlbS1jbG9jay1vYnRhaW4iIHRpdGxlPSJnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3N5c3RlbV9jbG9ja19vYnRhaW4oKTwvY29kZT48L2E+LjwvcD4KLTxwPlRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcyB3aGVuIHlvdQotd2FudCB0byBoYXZlIGNvbnRyb2wgb3ZlciB0aGUgdGltZSByZXBvcnRlZCBieSB0aGUgZGVmYXVsdCBzeXN0ZW0KLWNsb2NrLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN5c3RlbS1jbG9jay1zZXQtZGVmYXVsdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmV3X2Nsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2xvY2tUeXBlIj48L2E+PGgzPmVudW0gR3N0Q2xvY2tUeXBlPC9oMz4KLTxwPlRoZSBkaWZmZXJlbnQga2luZCBvZiBjbG9ja3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q2xvY2tUeXBlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLVRZUEUtUkVBTFRJTUU6Q0FQUyI+PC9hPkdTVF9DTE9DS19UWVBFX1JFQUxUSU1FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRpbWUgc2luY2UgRXBvY2g8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLVRZUEUtTU9OT1RPTklDOkNBUFMiPjwvYT5HU1RfQ0xPQ0tfVFlQRV9NT05PVE9OSUM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bW9ub3RvbmljIHRpbWUgc2luY2Ugc29tZSB1bnNwZWNpZmllZCBzdGFydGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNMT0NLLVRZUEUtT1RIRVI6Q0FQUyI+PC9hPkdTVF9DTE9DS19UWVBFX09USEVSPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNvbWUgb3RoZXIgdGltZSBzb3VyY2UgaXMgdXNlZCAoU2luY2UgMS4wLjUpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFN5c3RlbUNsb2NrPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U3lzdGVtQ2xvY2s7PC9wcmU+Ci08cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRoYXQgdXNlcyB0aGUgc3lzdGVtIHRpbWUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFN5c3RlbUNsb2NrLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay0tY2xvY2stdHlwZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNsb2NrLXR5cGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNsb2NrLXR5cGXigJ0gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RDbG9ja1R5cGUiIHRpdGxlPSJlbnVtIEdzdENsb2NrVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVHlwZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgdHlwZSBvZiB1bmRlcmx5aW5nIGNsb2NrIGltcGxlbWVudGF0aW9uIHVzZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEdTVF9DTE9DS19UWVBFX01PTk9UT05JQzwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RTeXN0ZW1DbG9jay5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RUYWdMaXN0Lmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFRhZ0xpc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwYzI5Ny4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdFRhZ0xpc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0MDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFRhZ0xpc3Q6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUYWdMaXN0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUYWdMaXN0Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0VGFnTGlzdCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdFRhZ0xpc3QudG9wX29mX3BhZ2UiPjwvYT5Hc3RUYWdMaXN0PC9zcGFuPjwvaDI+Ci08cD5Hc3RUYWdMaXN0IOKAlCBMaXN0IG9mIHRhZ3MgYW5kIHZhbHVlcyB1c2VkIHRvIGRlc2NyaWJlIG1lZGlhIG1ldGFkYXRhPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhZ0xpc3QuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0VGFnRm9yZWFjaEZ1bmPCoCgpIj4qR3N0VGFnRm9yZWFjaEZ1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VGdW5jIiB0aXRsZT0iR3N0VGFnTWVyZ2VGdW5jwqAoKSI+KkdzdFRhZ01lcmdlRnVuYzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X3RhZ19yZWdpc3RlcsKgKCkiPmdzdF90YWdfcmVnaXN0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1yZWdpc3Rlci1zdGF0aWMiIHRpdGxlPSJnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpY8KgKCkiPmdzdF90YWdfcmVnaXN0ZXJfc3RhdGljPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbWVyZ2UtdXNlLWZpcnN0IiB0aXRsZT0iZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3TCoCgpIj5nc3RfdGFnX21lcmdlX3VzZV9maXJzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLW1lcmdlLXN0cmluZ3Mtd2l0aC1jb21tYSIgdGl0bGU9ImdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hwqAoKSI+Z3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWV4aXN0cyIgdGl0bGU9ImdzdF90YWdfZXhpc3RzwqAoKSI+Z3N0X3RhZ19leGlzdHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LXR5cGUiIHRpdGxlPSJnc3RfdGFnX2dldF90eXBlwqAoKSI+Z3N0X3RhZ19nZXRfdHlwZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWdldC1uaWNrIiB0aXRsZT0iZ3N0X3RhZ19nZXRfbmlja8KgKCkiPmdzdF90YWdfZ2V0X25pY2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtZGVzY3JpcHRpb24iIHRpdGxlPSJnc3RfdGFnX2dldF9kZXNjcmlwdGlvbsKgKCkiPmdzdF90YWdfZ2V0X2Rlc2NyaXB0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdGbGFnIiB0aXRsZT0iZW51bSBHc3RUYWdGbGFnIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0ZsYWc8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LWZsYWciIHRpdGxlPSJnc3RfdGFnX2dldF9mbGFnwqAoKSI+Z3N0X3RhZ19nZXRfZmxhZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctaXMtZml4ZWQiIHRpdGxlPSJnc3RfdGFnX2lzX2ZpeGVkwqAoKSI+Z3N0X3RhZ19pc19maXhlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXciIHRpdGxlPSJnc3RfdGFnX2xpc3RfbmV3wqAoKSI+Z3N0X3RhZ19saXN0X25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctZW1wdHkiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbmV3X2VtcHR5wqAoKSI+Z3N0X3RhZ19saXN0X25ld19lbXB0eTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctdmFsaXN0IiB0aXRsZT0iZ3N0X3RhZ19saXN0X25ld192YWxpc3TCoCgpIj5nc3RfdGFnX2xpc3RfbmV3X3ZhbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfdGFnX2xpc3RfbmV3X2Zyb21fc3RyaW5nwqAoKSI+Z3N0X3RhZ19saXN0X25ld19mcm9tX3N0cmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZnJlZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9mcmVlKCkiPmdzdF90YWdfbGlzdF9mcmVlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnU2NvcGUiIHRpdGxlPSJlbnVtIEdzdFRhZ1Njb3BlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ1Njb3BlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXNjb3BlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9zY29wZcKgKCkiPmdzdF90YWdfbGlzdF9nZXRfc2NvcGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXNldC1zY29wZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9zZXRfc2NvcGXCoCgpIj5nc3RfdGFnX2xpc3Rfc2V0X3Njb3BlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXRvLXN0cmluZyIgdGl0bGU9ImdzdF90YWdfbGlzdF90b19zdHJpbmfCoCgpIj5nc3RfdGFnX2xpc3RfdG9fc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWlzLWVtcHR5IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2lzX2VtcHR5wqAoKSI+Z3N0X3RhZ19saXN0X2lzX2VtcHR5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWlzLWVxdWFsIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2lzX2VxdWFswqAoKSI+Z3N0X3RhZ19saXN0X2lzX2VxdWFsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWNvcHkiIHRpdGxlPSJnc3RfdGFnX2xpc3RfY29wecKgKCkiPmdzdF90YWdfbGlzdF9jb3B5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXJlZiIgdGl0bGU9ImdzdF90YWdfbGlzdF9yZWbCoCgpIj5nc3RfdGFnX2xpc3RfcmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC11bnJlZiIgdGl0bGU9ImdzdF90YWdfbGlzdF91bnJlZsKgKCkiPmdzdF90YWdfbGlzdF91bnJlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfaXNfd3JpdGFibGUoKSI+Z3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9tYWtlX3dyaXRhYmxlKCkiPmdzdF90YWdfbGlzdF9tYWtlX3dyaXRhYmxlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaW5zZXJ0IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2luc2VydMKgKCkiPmdzdF90YWdfbGlzdF9pbnNlcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbWVyZ2UiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbWVyZ2XCoCgpIj5nc3RfdGFnX2xpc3RfbWVyZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXRhZy1zaXplIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZcKgKCkiPmdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW4tdGFncyIgdGl0bGU9ImdzdF90YWdfbGlzdF9uX3RhZ3PCoCgpIj5nc3RfdGFnX2xpc3Rfbl90YWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1udGgtdGFnLW5hbWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbnRoX3RhZ19uYW1lwqAoKSI+Z3N0X3RhZ19saXN0X250aF90YWdfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2FkZMKgKCkiPmdzdF90YWdfbGlzdF9hZGQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWx1ZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9hZGRfdmFsdWXCoCgpIj5nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1hZGQtdmFsdWVzIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2FkZF92YWx1ZXPCoCgpIj5nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdCIgdGl0bGU9ImdzdF90YWdfbGlzdF9hZGRfdmFsaXN0wqAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWxpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWxpc3QtdmFsdWVzIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzwqAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1yZW1vdmUtdGFnIiB0aXRsZT0iZ3N0X3RhZ19saXN0X3JlbW92ZV90YWfCoCgpIj5nc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZm9yZWFjaCIgdGl0bGU9ImdzdF90YWdfbGlzdF9mb3JlYWNowqAoKSI+Z3N0X3RhZ19saXN0X2ZvcmVhY2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXZhbHVlLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtY29weS12YWx1ZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlwqAoKSI+Z3N0X3RhZ19saXN0X2NvcHlfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4iIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW7CoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4taW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW5faW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW5faW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWludCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfaW50wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9pbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWludC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfaW50X2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9pbnRfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVpbnQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3VpbnTCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X3VpbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVpbnQtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWludDY0IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9pbnQ2NMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfaW50NjQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWludDY0LWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9pbnQ2NF9pbmRleMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVpbnQ2NCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWludDY0wqAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50NjQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVpbnQ2NC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWludDY0X2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9mbG9hdMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfZmxvYXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0LWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9mbG9hdF9pbmRleMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfZmxvYXRfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZG91YmxlwqAoKSI+Z3N0X3RhZ19saXN0X2dldF9kb3VibGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZS1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZG91YmxlX2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9kb3VibGVfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZyIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfc3RyaW5nwqAoKSI+Z3N0X3RhZ19saXN0X2dldF9zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtcGVlay1zdHJpbmctaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXIiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXLCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXItaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXJfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXJfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RhdGXCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X2RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtdGltZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lwqAoKSI+Z3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtdGltZS1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXNhbXBsZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfc2FtcGxlwqAoKSI+Z3N0X3RhZ19saXN0X2dldF9zYW1wbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXNhbXBsZS1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfc2FtcGxlX2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYWdMaXN0Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0xpc3Qtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj5Hc3RUYWdNZXJnZU1vZGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZsYWciIHRpdGxlPSJlbnVtIEdzdFRhZ0ZsYWciPkdzdFRhZ0ZsYWc8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ1Njb3BlIiB0aXRsZT0iZW51bSBHc3RUYWdTY29wZSI+R3N0VGFnU2NvcGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRJVExFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1RJVExFIj5HU1RfVEFHX1RJVExFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1USVRMRS1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19USVRMRV9TT1JUTkFNRSI+R1NUX1RBR19USVRMRV9TT1JUTkFNRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVJUSVNUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FSVElTVCI+R1NUX1RBR19BUlRJU1Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFSVElTVC1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BUlRJU1RfU09SVE5BTUUiPkdTVF9UQUdfQVJUSVNUX1NPUlROQU1FPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTSI+R1NUX1RBR19BTEJVTTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tU09SVE5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU1fU09SVE5BTUUiPkdTVF9UQUdfQUxCVU1fU09SVE5BTUU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLUFSVElTVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9BUlRJU1QiPkdTVF9UQUdfQUxCVU1fQVJUSVNUPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1BUlRJU1QtU09SVE5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU1fQVJUSVNUX1NPUlROQU1FIj5HU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19EQVRFIj5HU1RfVEFHX0RBVEU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLURBVEUtVElNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19EQVRFX1RJTUUiPkdTVF9UQUdfREFURV9USU1FPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU5SRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU5SRSI+R1NUX1RBR19HRU5SRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NTUVOVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT01NRU5UIj5HU1RfVEFHX0NPTU1FTlQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUVYVEVOREVELUNPTU1FTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCI+R1NUX1RBR19FWFRFTkRFRF9DT01NRU5UPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1UUkFDSy1OVU1CRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVFJBQ0tfTlVNQkVSIj5HU1RfVEFHX1RSQUNLX05VTUJFUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stQ09VTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVFJBQ0tfQ09VTlQiPkdTVF9UQUdfVFJBQ0tfQ09VTlQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLVZPTFVNRS1OVU1CRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUiI+R1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1WT0xVTUUtQ09VTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5UIj5HU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTE9DQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTE9DQVRJT04iPkdTVF9UQUdfTE9DQVRJT048L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUhPTUVQQUdFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0hPTUVQQUdFIj5HU1RfVEFHX0hPTUVQQUdFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVNDUklQVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19ERVNDUklQVElPTiI+R1NUX1RBR19ERVNDUklQVElPTjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVkVSU0lPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19WRVJTSU9OIj5HU1RfVEFHX1ZFUlNJT048L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUlTUkM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfSVNSQyI+R1NUX1RBR19JU1JDPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1PUkdBTklaQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfT1JHQU5JWkFUSU9OIj5HU1RfVEFHX09SR0FOSVpBVElPTjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09QWVJJR0hUOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0NPUFlSSUdIVCI+R1NUX1RBR19DT1BZUklHSFQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPUFlSSUdIVC1VUkk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09QWVJJR0hUX1VSSSI+R1NUX1RBR19DT1BZUklHSFRfVVJJPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVELUJZOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0VOQ09ERURfQlkiPkdTVF9UQUdfRU5DT0RFRF9CWTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09NUE9TRVIiPkdTVF9UQUdfQ09NUE9TRVI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTlRBQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09OVEFDVCI+R1NUX1RBR19DT05UQUNUPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MSUNFTlNFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0xJQ0VOU0UiPkdTVF9UQUdfTElDRU5TRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTElDRU5TRS1VUkk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTElDRU5TRV9VUkkiPkdTVF9UQUdfTElDRU5TRV9VUkk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVBFUkZPUk1FUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19QRVJGT1JNRVIiPkdTVF9UQUdfUEVSRk9STUVSPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1EVVJBVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19EVVJBVElPTiI+R1NUX1RBR19EVVJBVElPTjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09ERUM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09ERUMiPkdTVF9UQUdfQ09ERUM8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVZJREVPLUNPREVDOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1ZJREVPX0NPREVDIj5HU1RfVEFHX1ZJREVPX0NPREVDPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BVURJTy1DT0RFQzpDQVBTIiB0aXRsZT0iR1NUX1RBR19BVURJT19DT0RFQyI+R1NUX1RBR19BVURJT19DT0RFQzwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU1VCVElUTEUtQ09ERUM6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfU1VCVElUTEVfQ09ERUMiPkdTVF9UQUdfU1VCVElUTEVfQ09ERUM8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTlRBSU5FUi1GT1JNQVQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVCI+R1NUX1RBR19DT05UQUlORVJfRk9STUFUPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1CSVRSQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0JJVFJBVEUiPkdTVF9UQUdfQklUUkFURTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTk9NSU5BTC1CSVRSQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX05PTUlOQUxfQklUUkFURSI+R1NUX1RBR19OT01JTkFMX0JJVFJBVEU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1JTklNVU0tQklUUkFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUiPkdTVF9UQUdfTUlOSU1VTV9CSVRSQVRFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NQVhJTVVNLUJJVFJBVEU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFIj5HU1RfVEFHX01BWElNVU1fQklUUkFURTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0VSSUFMOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1NFUklBTCI+R1NUX1RBR19TRVJJQUw8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUVOQ09ERVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfRU5DT0RFUiI+R1NUX1RBR19FTkNPREVSPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVSLVZFUlNJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OIj5HU1RfVEFHX0VOQ09ERVJfVkVSU0lPTjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stR0FJTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19UUkFDS19HQUlOIj5HU1RfVEFHX1RSQUNLX0dBSU48L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLVBFQUs6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVFJBQ0tfUEVBSyI+R1NUX1RBR19UUkFDS19QRUFLPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1HQUlOOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX0dBSU4iPkdTVF9UQUdfQUxCVU1fR0FJTjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tUEVBSzpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9QRUFLIj5HU1RfVEFHX0FMQlVNX1BFQUs8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVJFRkVSRU5DRS1MRVZFTDpDQVBTIiB0aXRsZT0iR1NUX1RBR19SRUZFUkVOQ0VfTEVWRUwiPkdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MQU5HVUFHRS1DT0RFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0xBTkdVQUdFX0NPREUiPkdTVF9UQUdfTEFOR1VBR0VfQ09ERTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTEFOR1VBR0UtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19MQU5HVUFHRV9OQU1FIj5HU1RfVEFHX0xBTkdVQUdFX05BTUU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUlNQUdFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0lNQUdFIj5HU1RfVEFHX0lNQUdFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1QUkVWSUVXLUlNQUdFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1BSRVZJRVdfSU1BR0UiPkdTVF9UQUdfUFJFVklFV19JTUFHRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVRUQUNITUVOVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19BVFRBQ0hNRU5UIj5HU1RfVEFHX0FUVEFDSE1FTlQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUJFQVRTLVBFUi1NSU5VVEU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQkVBVFNfUEVSX01JTlVURSI+R1NUX1RBR19CRUFUU19QRVJfTUlOVVRFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1LRVlXT1JEUzpDQVBTIiB0aXRsZT0iR1NUX1RBR19LRVlXT1JEUyI+R1NUX1RBR19LRVlXT1JEUzwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1MQVRJVFVERTpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xBVElUVURFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tTE9OR0lUVURFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xPTkdJVFVERTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUVMRVZBVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OIj5HU1RfVEFHX0dFT19MT0NBVElPTl9FTEVWQVRJT048L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DSVRZOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZIj5HU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tQ09VTlRSWTpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fQ09VTlRSWSI+R1NUX1RBR19HRU9fTE9DQVRJT05fQ09VTlRSWTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLVNVQkxPQ0FUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9TVUJMT0NBVElPTiI+R1NUX1RBR19HRU9fTE9DQVRJT05fU1VCTE9DQVRJT048L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1IT1JJWk9OVEFMLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SIj5HU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tTU9WRU1FTlQtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9ESVJFQ1RJT04iPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU1PVkVNRU5ULVNQRUVEOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRCI+R1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfU1BFRUQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DQVBUVVJFLURJUkVDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04iPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NBUFRVUkVfRElSRUNUSU9OPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1TSE9XLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfU0hPV19OQU1FIj5HU1RfVEFHX1NIT1dfTkFNRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX1NPUlROQU1FIj5HU1RfVEFHX1NIT1dfU09SVE5BTUU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctRVBJU09ERS1OVU1CRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUiI+R1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1TSE9XLVNFQVNPTi1OVU1CRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSIj5HU1RfVEFHX1NIT1dfU0VBU09OX05VTUJFUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTFlSSUNTOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0xZUklDUyI+R1NUX1RBR19MWVJJQ1M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTVBPU0VSLVNPUlROQU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FIj5HU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HUk9VUElORzpDQVBTIiB0aXRsZT0iR1NUX1RBR19HUk9VUElORyI+R1NUX1RBR19HUk9VUElORzwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVVNFUi1SQVRJTkc6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVVNFUl9SQVRJTkciPkdTVF9UQUdfVVNFUl9SQVRJTkc8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLURFVklDRS1NQU5VRkFDVFVSRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUiI+R1NUX1RBR19ERVZJQ0VfTUFOVUZBQ1RVUkVSPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVZJQ0UtTU9ERUw6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfREVWSUNFX01PREVMIj5HU1RfVEFHX0RFVklDRV9NT0RFTDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVBQTElDQVRJT04tTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FIj5HU1RfVEFHX0FQUExJQ0FUSU9OX05BTUU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLURBVEE6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQVBQTElDQVRJT05fREFUQSI+R1NUX1RBR19BUFBMSUNBVElPTl9EQVRBPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JTUFHRS1PUklFTlRBVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19JTUFHRV9PUklFTlRBVElPTiI+R1NUX1RBR19JTUFHRV9PUklFTlRBVElPTjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUFVCTElTSEVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1BVQkxJU0hFUiI+R1NUX1RBR19QVUJMSVNIRVI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUlOVEVSUFJFVEVELUJZOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0lOVEVSUFJFVEVEX0JZIj5HU1RfVEFHX0lOVEVSUFJFVEVEX0JZPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NSURJLUJBU0UtTk9URTpDQVBTIiB0aXRsZT0iR1NUX1RBR19NSURJX0JBU0VfTk9URSI+R1NUX1RBR19NSURJX0JBU0VfTk9URTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUFJJVkFURS1EQVRBOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1BSSVZBVEVfREFUQSI+R1NUX1RBR19QUklWQVRFX0RBVEE8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFnTGlzdC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3QvdW5zdGFibGUvZ29iamVjdC1Cb3hlZC1UeXBlcy5odG1sIj5HQm94ZWQ8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0VGFnTGlzdAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhZ0xpc3QuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFnTGlzdC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5MaXN0IG9mIHRhZ3MgYW5kIHZhbHVlcyB1c2VkIHRvIGRlc2NyaWJlIG1lZGlhIG1ldGFkYXRhLjwvcD4KLTxwPlN0cmluZ3MgaW4gc3RydWN0dXJlcyBtdXN0IGJlIEFTQ0lJIG9yIFVURi04IGVuY29kZWQuIE90aGVyIGVuY29kaW5ncyBhcmUKLW5vdCBhbGxvd2VkLiBTdHJpbmdzIG11c3Qgbm90IGJlIGVtcHR5IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhZ0xpc3QuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRhZ0ZvcmVhY2hGdW5jIj48L2E+PGgzPkdzdFRhZ0ZvcmVhY2hGdW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRhZ0ZvcmVhY2hGdW5jPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZm9yZWFjaCIgdGl0bGU9ImdzdF90YWdfbGlzdF9mb3JlYWNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfZm9yZWFjaCgpPC9jb2RlPjwvYT4uIFRoZSBmdW5jdGlvbiBtYXkKLW5vdCBtb2RpZnkgdGhlIHRhZyBsaXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRhZ0ZvcmVhY2hGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBuYW1lIG9mIGEgdGFnIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRhZ01lcmdlRnVuYyI+PC9hPjxoMz5Hc3RUYWdNZXJnZUZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VGFnTWVyZ2VGdW5jPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIGZvciBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcyBvZiBhIHRhZyB1c2VkIHdoZW4gcmVnaXN0ZXJpbmcKLXRhZ3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VGFnTWVyZ2VGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGVzdGluYXRpb24gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc291cmNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1yZWdpc3RlciI+PC9hPjxoMz5nc3RfdGFnX3JlZ2lzdGVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RhZ19yZWdpc3RlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRmxhZyIgdGl0bGU9ImVudW0gR3N0VGFnRmxhZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0ZsYWc8L3NwYW4+PC9hPiBmbGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmljazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYmx1cmI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZUZ1bmMiIHRpdGxlPSJHc3RUYWdNZXJnZUZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWdpc3RlcnMgYSBuZXcgdGFnIHR5cGUgZm9yIHRoZSB1c2Ugd2l0aCBHU3RyZWFtZXIncyB0eXBlIHN5c3RlbS4gSWYgYSB0eXBlCi13aXRoIHRoYXQgbmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIHRoYXQgb25lIGlzIHVzZWQuCi1UaGUgb2xkIHJlZ2lzdHJhdGlvbiBtYXkgaGF2ZSB1c2VkIGEgZGlmZmVyZW50IHR5cGUgaG93ZXZlci4gU28gZG9uJ3QgcmVseQotb24geW91ciBzdXBwbGllZCB2YWx1ZXMuPC9wPgotPHA+SW1wb3J0YW50OiBpZiB5b3UgZG8gbm90IHN1cHBseSBhIG1lcmdlIGZ1bmN0aW9uIHRoZSBpbXBsaWNhdGlvbiB3aWxsIGJlCi10aGF0IHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBzaW5nbGUgdmFsdWUgZm9yIHRoaXMgdGFnIGluIGEgdGFnIGxpc3QgYW5kCi1hbnkgYWRkaXRpb25hbCB2YWx1ZXMgd2lsbCBzaWxlbnRseSBiZSBkaXNjYXJkZWQgd2hlbiBiZWluZyBhZGRlZCAodW5sZXNzCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtUkVQTEFDRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19NRVJHRV9SRVBMQUNFPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1SRVBMQUNFLUFMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTDwvc3Bhbj48L2E+LCBvcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLVBSRVBFTkQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UQUdfTUVSR0VfUFJFUEVORDwvc3Bhbj48L2E+IGlzIHVzZWQgYXMgbWVyZ2UgbW9kZSwgaW4gd2hpY2ggY2FzZSB0aGUgbmV3Ci12YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIG9sZCBvbmUgaW4gdGhlIGxpc3QpLjwvcD4KLTxwPlRoZSBtZXJnZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBmcm9tIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWNvcHktdmFsdWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfY29weV92YWx1ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RhZ19saXN0X2NvcHlfdmFsdWUoKTwvY29kZT48L2E+IHdoZW4KLWl0IGlzIHJlcXVpcmVkIHRoYXQgb25lIG9yIG1vcmUgdmFsdWVzIGZvciBhIHRhZyBiZSBjb25kZW5zZWQgaW50bwotb25lIHNpbmdsZSB2YWx1ZS4gVGhpcyBtYXkgaGFwcGVuIGZyb20gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZyIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfc3RyaW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfZ2V0X3N0cmluZygpPC9jb2RlPjwvYT4sCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9pbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9nZXRfaW50KCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZG91YmxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSgpPC9jb2RlPjwvYT4gZXRjLiBXaGF0IHdpbGwgaGFwcGVuCi1leGFjdGx5IGluIHRoYXQgY2FzZSBkZXBlbmRzIG9uIGhvdyB0aGUgdGFnIHdhcyByZWdpc3RlcmVkIGFuZCBpZiBhCi1tZXJnZSBmdW5jdGlvbiB3YXMgc3VwcGxpZWQgYW5kIGlmIHNvIHdoaWNoIG9uZS48L3A+Ci08cD5Ud28gZGVmYXVsdCBtZXJnZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbWVyZ2UtdXNlLWZpcnN0IiB0aXRsZT0iZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3TCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1tZXJnZS1zdHJpbmdzLXdpdGgtY29tbWEiIHRpdGxlPSJnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctcmVnaXN0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9yIGlkZW50aWZpZXIgc3RyaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZsYWcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiB0YWcgaW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHR5cGUgdGhpcyBkYXRhIGlzIGluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5pY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5odW1hbi1yZWFkYWJsZSBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJsdXJiPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBhYm91dCB0aGlzIHRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGZ1bmN0aW9uIGZvciBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcyBvZiB0aGlzIHRhZywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLXJlZ2lzdGVyLXN0YXRpYyI+PC9hPjxoMz5nc3RfdGFnX3JlZ2lzdGVyX3N0YXRpY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YWdfcmVnaXN0ZXJfc3RhdGljICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRmxhZyIgdGl0bGU9ImVudW0gR3N0VGFnRmxhZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0ZsYWc8L3NwYW4+PC9hPiBmbGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuaWNrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYmx1cmI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VGdW5jIiB0aXRsZT0iR3N0VGFnTWVyZ2VGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVnaXN0ZXJzIGEgbmV3IHRhZyB0eXBlIGZvciB0aGUgdXNlIHdpdGggR1N0cmVhbWVyJ3MgdHlwZSBzeXN0ZW0uPC9wPgotPHA+U2FtZSBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctcmVnaXN0ZXIiIHRpdGxlPSJnc3RfdGFnX3JlZ2lzdGVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX3JlZ2lzdGVyKCk8L2NvZGU+PC9hPiwgYnV0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uaWNrPC9jb2RlPjwvZW0+Ci0sIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Ymx1cmI8L2NvZGU+PC9lbT4KLSBtdXN0IGJlCi1zdGF0aWMgc3RyaW5ncyBvciBpbmxpbmVkIHN0cmluZ3MsIGFzIHRoZXkgd2lsbCBub3QgYmUgY29waWVkLiAoR1N0cmVhbWVyCi1wbHVnaW5zIHdpbGwgYmUgbWFkZSByZXNpZGVudCBvbmNlIGxvYWRlZCwgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZAotZXZlbiBmcm9tIGR5bmFtaWNhbGx5IGxvYWRlZCBwbHVnaW5zLik8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLXJlZ2lzdGVyLXN0YXRpYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb3IgaWRlbnRpZmllciBzdHJpbmcgKHN0cmluZyBjb25zdGFudCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmxhZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIHRhZyBpbmZvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHlwZSB0aGlzIGRhdGEgaXMgaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmljazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmh1bWFuLXJlYWRhYmxlIG5hbWUgb3Igc2hvcnQgZGVzY3JpcHRpb24gKHN0cmluZyBjb25zdGFudCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Ymx1cmI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIGZvciB0aGlzIHRhZyAoc3RyaW5nIGNvbnN0YW50KTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGZ1bmN0aW9uIGZvciBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcyBvZiB0aGlzIHRhZywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLW1lcmdlLXVzZS1maXJzdCI+PC9hPjxoMz5nc3RfdGFnX21lcmdlX3VzZV9maXJzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgdGhlIGZ1bmMgYXJndW1lbnQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X3RhZ19yZWdpc3RlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RhZ19yZWdpc3RlcigpPC9jb2RlPjwvYT4uCi1JdCBjcmVhdGVzIGEgY29weSBvZiB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgbGlzdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLW1lcmdlLXVzZS1maXJzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHVuaW5pdGlhbGl6ZWQgR1ZhbHVlIHRvIHN0b3JlIHJlc3VsdCBpbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVyLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkdWYWx1ZSB0byBjb3B5IGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1tZXJnZS1zdHJpbmdzLXdpdGgtY29tbWEiPjwvYT48aDM+Z3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHRoZSBmdW5jIGFyZ3VtZW50IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1yZWdpc3RlciIgdGl0bGU9ImdzdF90YWdfcmVnaXN0ZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfcmVnaXN0ZXIoKTwvY29kZT48L2E+LgotSXQgY29uY2F0ZW5hdGVzIGFsbCBnaXZlbiBzdHJpbmdzIHVzaW5nIGEgY29tbWEuIFRoZSB0YWcgbXVzdCBiZSByZWdpc3RlcmVkCi1hcyBhIEdfVFlQRV9TVFJJTkcgb3IgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1tZXJnZS1zdHJpbmdzLXdpdGgtY29tbWEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB1bmluaXRpYWxpemVkIEdWYWx1ZSB0byBzdG9yZSByZXN1bHQgaW4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlci1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5HVmFsdWUgdG8gY29weSBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctZXhpc3RzIj48L2E+PGgzPmdzdF90YWdfZXhpc3RzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2V4aXN0cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBnaXZlbiB0eXBlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWV4aXN0cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiB0aGUgdGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1leGlzdHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHR5cGUgaXMgYWxyZWFkeSByZWdpc3RlcmVkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctZ2V0LXR5cGUiPjwvYT48aDM+Z3N0X3RhZ19nZXRfdHlwZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVHlwZTwvc3Bhbj48L2E+Ci1nc3RfdGFnX2dldF90eXBlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHVzZWQgZm9yIHRoaXMgdGFnLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctZ2V0LXR5cGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWdldC10eXBlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgdGhpcyB0YWc8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1nZXQtbmljayI+PC9hPjxoMz5nc3RfdGFnX2dldF9uaWNrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfdGFnX2dldF9uaWNrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgdGFnLCBZb3UgbXVzdCBub3QgY2hhbmdlIG9yIGZyZWUKLXRoaXMgc3RyaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctZ2V0LW5pY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWdldC1uaWNrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhpcyB0YWc8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1nZXQtZGVzY3JpcHRpb24iPjwvYT48aDM+Z3N0X3RhZ19nZXRfZGVzY3JpcHRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF90YWdfZ2V0X2Rlc2NyaXB0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGlzIHRhZywgWW91IG11c3Qgbm90IGNoYW5nZSBvcgotZnJlZSB0aGlzIHN0cmluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWdldC1kZXNjcmlwdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctZ2V0LWRlc2NyaXB0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoaXMgdGFnPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctZ2V0LWZsYWciPjwvYT48aDM+Z3N0X3RhZ19nZXRfZmxhZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRmxhZyIgdGl0bGU9ImVudW0gR3N0VGFnRmxhZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdGbGFnPC9zcGFuPjwvYT4KLWdzdF90YWdfZ2V0X2ZsYWcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGZsYWcgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctZ2V0LWZsYWcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWdldC1mbGFnLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGZsYWcgb2YgdGhpcyB0YWcuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctaXMtZml4ZWQiPjwvYT48aDM+Z3N0X3RhZ19pc19maXhlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19pc19maXhlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBnaXZlbiB0YWcgaXMgZml4ZWQuIEEgZml4ZWQgdGFnIGNhbiBvbmx5IGNvbnRhaW4gb25lIHZhbHVlLgotVW5maXhlZCB0YWdzIGNhbiBjb250YWluIGxpc3RzIG9mIHZhbHVlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWlzLWZpeGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWlzLWZpeGVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiB0aGUgZ2l2ZW4gdGFnIGlzIGZpeGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtbmV3Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF90YWdfbGlzdF9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IHRhZ2xpc3QgYW5kIGFwcGVuZHMgdGhlIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHRhZ3MuIEl0IGV4cGVjdHMKLXRhZy12YWx1ZSBwYWlycyBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZCIgdGl0bGU9ImdzdF90YWdfbGlzdF9hZGTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9hZGQoKTwvY29kZT48L2E+LCBhbmQgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGVybWluYXRvciBhZnRlciB0aGUKLWxhc3QgcGFpci4gVGhlIHR5cGUgb2YgdGhlIHZhbHVlcyBpcyBpbXBsaWNpdCBhbmQgaXMgZG9jdW1lbnRlZCBpbiB0aGUgQVBJCi1yZWZlcmVuY2UsIGJ1dCBjYW4gYWxzbyBiZSBxdWVyaWVkIGF0IHJ1bnRpbWUgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LXR5cGUiIHRpdGxlPSJnc3RfdGFnX2dldF90eXBlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2dldF90eXBlKCk8L2NvZGU+PC9hPi4gSXQKLWlzIGFuIGVycm9yIHRvIHBhc3MgYSB2YWx1ZSBvZiBhIHR5cGUgbm90IG1hdGNoaW5nIHRoZSB0YWcgdHlwZSBpbnRvIHRoaXMKLWZ1bmN0aW9uLiBUaGUgdGFnIGxpc3Qgd2lsbCBtYWtlIGNvcGllcyBvZiBhbnkgYXJndW1lbnRzIHBhc3NlZAotKGUuZy4gc3RyaW5ncywgYnVmZmVycykuPC9wPgotPHA+QWZ0ZXIgY3JlYXRpb24geW91IG1pZ2h0IGFsc28gd2FudCB0byBzZXQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ1Njb3BlIiB0aXRsZT0iZW51bSBHc3RUYWdTY29wZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1Njb3BlPC9zcGFuPjwvYT4gb24gdGhlIHJldHVybmVkCi10YWdsaXN0IHRvIHNpZ25hbCBpZiB0aGUgY29udGFpbmVkIHRhZ3MgYXJlIGdsb2JhbCBvciBzdHJlYW0gdGFncy4gQnkKLWRlZmF1bHQgc3RyZWFtIHNjb3BlIGlzIGFzc3VtZXMuIFNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1zZXQtc2NvcGUiIHRpdGxlPSJnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3Rfc2V0X3Njb3BlKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfdGFnX2xpc3RfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtbmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBsaXN0IG9mIHZhbHVlcyB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPi4gRnJlZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXVucmVmIiB0aXRsZT0iZ3N0X3RhZ19saXN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfdW5yZWYoKTwvY29kZT48L2E+Ci13aGVuIG5vIGxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1uZXctZW1wdHkiPjwvYT48aDM+Z3N0X3RhZ19saXN0X25ld19lbXB0ecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IGVtcHR5IEdzdFRhZ0xpc3QuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3RhZ19saXN0X3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW5ldy1lbXB0eS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEFuIGVtcHR5IHRhZyBsaXN0LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtbmV3LXZhbGlzdCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfbmV3X3ZhbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3RhZ19saXN0X25ld192YWxpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SnVzdCBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW5ldyIgdGl0bGU9ImdzdF90YWdfbGlzdF9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9uZXcoKTwvY29kZT48L2E+LCBvbmx5IHRoYXQgaXQgdGFrZXMgYSB2YV9saXN0IGFyZ3VtZW50LgotVXNlZnVsIG1vc3RseSBmb3IgbGFuZ3VhZ2UgYmluZGluZ3MuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3RhZ19saXN0X3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW5ldy12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhcl9hcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIC8gdmFsdWUgcGFpcnMgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW5ldy12YWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPi4gRnJlZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXVucmVmIiB0aXRsZT0iZ3N0X3RhZ19saXN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfdW5yZWYoKTwvY29kZT48L2E+Ci13aGVuIG5vIGxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1uZXctZnJvbS1zdHJpbmciPjwvYT48aDM+Z3N0X3RhZ19saXN0X25ld19mcm9tX3N0cmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3RhZ19saXN0X25ld19mcm9tX3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzdHI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RGVzZXJpYWxpemVzIGEgdGFnIGxpc3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW5ldy1mcm9tLXN0cmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJpbmcgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXRvLXN0cmluZyIgdGl0bGU9ImdzdF90YWdfbGlzdF90b19zdHJpbmfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF90b19zdHJpbmcoKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW5ldy1mcm9tLXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaW4gY2FzZSBvZiBhbgotZXJyb3IuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWZyZWUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2ZyZWUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfdGFnX2xpc3RfZnJlZSh0YWdsaXN0KSAgICBnc3RfdGFnX2xpc3RfdW5yZWYodGFnbGlzdCkKLTwvcHJlPgotPGRpdiBjbGFzcz0id2FybmluZyI+PHA+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmdzdF90YWdfbGlzdF9mcmVlPC9jb2RlPiBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbmV3bHktd3JpdHRlbiBjb2RlLjwvcD48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1zY29wZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3Njb3BlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdTY29wZSIgdGl0bGU9ImVudW0gR3N0VGFnU2NvcGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnU2NvcGU8L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9zY29wZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHNjb3BlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1zY29wZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXNjb3BlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHNjb3BlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LXNldC1zY29wZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3Rfc2V0X3Njb3BlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RhZ19saXN0X3NldF9zY29wZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnU2NvcGUiIHRpdGxlPSJlbnVtIEdzdFRhZ1Njb3BlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2NvcGU8L3NwYW4+PC9hPiBzY29wZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBzY29wZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zY29wZTwvY29kZT48L2VtPgotLiBCeSBkZWZhdWx0IHRoZSBzY29wZQotb2YgYSB0YWdsaXN0IGlzIHN0cmVhbSBzY29wZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3Qtc2V0LXNjb3BlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNjb3BlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmV3IHNjb3BlIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC10by1zdHJpbmciPjwvYT48aDM+Z3N0X3RhZ19saXN0X3RvX3N0cmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3RhZ19saXN0X3RvX3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNlcmlhbGl6ZXMgYSB0YWcgbGlzdCB0byBhIHN0cmluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtdG8tc3RyaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC10by1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5LWFsbG9jYXRlZCBzdHJpbmcsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpbiBjYXNlIG9mCi1hbiBlcnJvci4gVGhlIHN0cmluZyBtdXN0IGJlIGZyZWVkIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlcgotbmVlZGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1pcy1lbXB0eSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfaXNfZW1wdHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90YWdfbGlzdF9pc19lbXB0eSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgZ2l2ZW4gdGFnbGlzdCBpcyBlbXB0eS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtaXMtZW1wdHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1pcy1lbXB0eS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdGFnbGlzdCBpcyBlbXB0eSwgb3RoZXJ3aXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtaXMtZXF1YWwiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2lzX2VxdWFswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfaXNfZXF1YWwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSB0d28gZ2l2ZW4gdGFnbGlzdHMgYXJlIGVxdWFsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1pcy1lcXVhbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0MTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3QyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1pcy1lcXVhbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdGFnbGlzdHMgYXJlIGVxdWFsLCBvdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWNvcHkiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF90YWdfbGlzdF9jb3B5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKnRhZ2xpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiBhcyBhIGNvcHkgb2YgdGhlIG9sZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnbGlzdDwvY29kZT48L2VtPgotLiBUaGUgbmV3IHRhZ2xpc3QKLXdpbGwgaGF2ZSBhIHJlZmNvdW50IG9mIDEsIG93bmVkIGJ5IHRoZSBjYWxsZXIsIGFuZCB3aWxsIGJlIHdyaXRhYmxlIGFzCi1hIHJlc3VsdC48L3A+Ci08cD5Ob3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc2VtYW50aWMgZXF1aXZhbGVudCBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXJlZiIgdGl0bGU9ImdzdF90YWdfbGlzdF9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9yZWYoKTwvY29kZT48L2E+Ci1mb2xsb3dlZCBieSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPi4gSWYgeW91IG9ubHkgd2FudCB0byBob2xkIG9uIHRvIGEKLXJlZmVyZW5jZSB0byB0aGUgZGF0YSwgeW91IHNob3VsZCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtcmVmIiB0aXRsZT0iZ3N0X3RhZ19saXN0X3JlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RhZ19saXN0X3JlZigpPC9jb2RlPjwvYT4uPC9wPgotPHA+V2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIHRhZ2xpc3QsIGNhbGwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtdW5yZWYiIHRpdGxlPSJnc3RfdGFnX2xpc3RfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF91bnJlZigpPC9jb2RlPjwvYT4gb24gaXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ2xpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1jb3B5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtcmVmIj48L2E+PGgzPmdzdF90YWdfbGlzdF9yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF90YWdfbGlzdF9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqdGFnbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGQgYSByZWZlcmVuY2UgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiBtaW5pIG9iamVjdC48L3A+Ci08cD5Gcm9tIHRoaXMgcG9pbnQgb24sIHVudGlsIHRoZSBjYWxsZXIgY2FsbHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtdW5yZWYiIHRpdGxlPSJnc3RfdGFnX2xpc3RfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF91bnJlZigpPC9jb2RlPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfbWFrZV93cml0YWJsZSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9tYWtlX3dyaXRhYmxlKCk8L2NvZGU+PC9hPiwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZSB0YWdsaXN0IG9iamVjdCB3aWxsCi1ub3QgY2hhbmdlLiBUbyB1c2UgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiBvYmplY3QsIHlvdSBtdXN0IGFsd2F5cyBoYXZlIGEgcmVmY291bnQgb24KLWl0IC0tIGVpdGhlciB0aGUgb25lIG1hZGUgaW1wbGljaXRseSBieSBlLmcuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW5ldyIgdGl0bGU9ImdzdF90YWdfbGlzdF9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfbGlzdF9uZXcoKTwvY29kZT48L2E+LCBvciB2aWEKLXRha2luZyBvbmUgZXhwbGljaXRseSB3aXRoIHRoaXMgZnVuY3Rpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LXJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byByZWZlcmVuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtcmVmLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHNhbWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gbWluaSBvYmplY3QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC11bnJlZiI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfdW5yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFnX2xpc3RfdW5yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqdGFnbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5VbnJlZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+LCBhbmQgYW5kIGZyZWUgYWxsIGl0cyBtZW1vcnkgd2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC11bnJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtaXMtd3JpdGFibGUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlKHRhZ2xpc3QpICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHRhZ2xpc3QpKQotPC9wcmU+Ci08cD5UZXN0cyBpZiB5b3UgY2FuIHNhZmVseSBtb2RpZnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZ2xpc3Q8L2NvZGU+PC9lbT4KLS4gSXQgaXMgb25seSBzYWZlIHRvIG1vZGlmeSB0YWdsaXN0Ci13aGVuIHRoZXJlIGlzIG9ubHkgb25lIG93bmVyIG9mIHRoZSB0YWdsaXN0IC0gaWUsIHRoZSByZWZjb3VudCBpcyAxLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1pcy13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF90YWdfbGlzdF9tYWtlX3dyaXRhYmxlKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3RhZ19saXN0X21ha2Vfd3JpdGFibGUodGFnbGlzdCkgICBHU1RfVEFHX0xJU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAodGFnbGlzdCkpKQotPC9wcmU+Ci08cD5SZXR1cm5zIGEgd3JpdGFibGUgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnbGlzdDwvY29kZT48L2VtPgotLjwvcD4KLTxwPklmIHRoZXJlIGlzIG9ubHkgb25lIHJlZmVyZW5jZSBjb3VudCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnbGlzdDwvY29kZT48L2VtPgotLCB0aGUgY2FsbGVyIG11c3QgYmUgdGhlCi1vd25lciwgYW5kIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHRhZ2xpc3Qgb2JqZWN0IHVuY2hhbmdlZC4gSWYgb24KLXRoZSBvdGhlciBoYW5kIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QsIGEgbmV3IHRhZ2xpc3QKLW9iamVjdCB3aWxsIGJlIHJldHVybmVkICh3aGljaCB3aWxsIGJlIGEgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFnbGlzdDwvY29kZT48L2VtPgotKS4gVGhlIGNhbGxlcidzCi1yZWZlcmVuY2Ugb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZ2xpc3Q8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIHJlbW92ZWQsIGFuZCBpbnN0ZWFkIHRoZSBjYWxsZXIgd2lsbCBvd24gYQotcmVmZXJlbmNlIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuPC9wPgotPHA+SW4gc2hvcnQsIHRoaXMgZnVuY3Rpb24gdW5yZWZzIHRoZSB0YWdsaXN0IGluIHRoZSBhcmd1bWVudCBhbmQgcmVmcyB0aGUKLXRhZ2xpc3QgdGhhdCBpdCByZXR1cm5zLiBEb24ndCBhY2Nlc3MgdGhlIGFyZ3VtZW50IGFmdGVyIGNhbGxpbmcgdGhpcwotZnVuY3Rpb24uIFNlZSBhbHNvOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1yZWYiIHRpdGxlPSJnc3RfdGFnX2xpc3RfcmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2xpc3RfcmVmKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtbWFrZS13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtbWFrZS13cml0YWJsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgd3JpdGFibGUgdGFnbGlzdCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUKLXNhbWUgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZ2xpc3Q8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWluc2VydCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfaW5zZXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RhZ19saXN0X2luc2VydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICppbnRvPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpmcm9tPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluc2VydHMgdGhlIHRhZ3Mgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mcm9tPC9jb2RlPjwvZW0+Ci0gbGlzdCBpbnRvIHRoZSBmaXJzdCBsaXN0IHVzaW5nIHRoZSBnaXZlbiBtb2RlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1pbnNlcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW50bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxpc3QgdG8gbWVyZ2UgaW50bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGlzdCB0byBtZXJnZSBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbW9kZSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW1lcmdlIj48L2E+PGgzPmdzdF90YWdfbGlzdF9tZXJnZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3RhZ19saXN0X21lcmdlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3QxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3QyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TWVyZ2VzIHRoZSB0d28gZ2l2ZW4gbGlzdHMgaW50byBhIG5ldyBsaXN0LiBJZiBvbmUgb2YgdGhlIGxpc3RzIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgYQotY29weSBvZiB0aGUgb3RoZXIgaXMgcmV0dXJuZWQuIElmIGJvdGggbGlzdHMgYXJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlzIHJldHVybmVkLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF90YWdfbGlzdF91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1tZXJnZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0MTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBmaXJzdCBsaXN0IHRvIG1lcmdlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0MjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBzZWNvbmQgbGlzdCB0byBtZXJnZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtb2RlIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW1lcmdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBsaXN0LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdGFnLXNpemUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGhvdyBtYW55IHZhbHVlIGFyZSBzdG9yZWQgaW4gdGhpcyB0YWcgbGlzdCBmb3IgdGhlIGdpdmVuIHRhZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXRhZy1zaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHRhZ2xpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRhZyB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC10YWctc2l6ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBudW1iZXIgb2YgdGFncyBzdG9yZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW4tdGFncyI+PC9hPjxoMz5nc3RfdGFnX2xpc3Rfbl90YWdzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X25fdGFncyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbnVtYmVyIG9mIHRhZ3MgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpc3Q8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3Qtbi10YWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3Qtbi10YWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG51bWJlciBvZiB0YWdzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1udGgtdGFnLW5hbWUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X250aF90YWdfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3RhZ19saXN0X250aF90YWdfbmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbmFtZSBvZiB0aGUgdGFnIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0gYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LW50aC10YWctbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1udGgtdGFnLW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmFtZSBvZiB0aGUgdGFnIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtYWRkIj48L2E+PGgzPmdzdF90YWdfbGlzdF9hZGTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFnX2xpc3RfYWRkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdGFncyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWFkZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGlzdCB0byBzZXQgdGFncyBpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1vZGUgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBsaXN0IG9mIHZhbHVlcyB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWFkZC12YWx1ZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgR1ZhbHVlIGZvciBhIGdpdmVuIHRhZyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWFkZC12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGlzdCB0byBzZXQgdGFncyBpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1vZGUgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkdWYWx1ZSBmb3IgdGhpcyB0YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWFkZC12YWx1ZXMiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2FkZF92YWx1ZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIEdWYWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtYWRkLXZhbHVlcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGlzdCB0byBzZXQgdGFncyBpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1vZGUgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5HVmFsdWVzIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YWdfbGlzdF9hZGRfdmFsaXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdGFncyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWFkZC12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxpc3QgdG8gc2V0IHRhZ3MgaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtb2RlIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFyX2FyZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgLyB2YWx1ZSBwYWlycyB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWFkZC12YWxpc3QtdmFsdWVzIj48L2E+PGgzPmdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIEdWYWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdC12YWx1ZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxpc3QgdG8gc2V0IHRhZ3MgaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtb2RlIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFyX2FyZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgLyBHVmFsdWUgcGFpcnMgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1yZW1vdmUtdGFnIj48L2E+PGgzPmdzdF90YWdfbGlzdF9yZW1vdmVfdGFnwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RhZ19saXN0X3JlbW92ZV90YWcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmVzIHRoZSBnaXZlbiB0YWcgZnJvbSB0aGUgdGFnbGlzdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtcmVtb3ZlLXRhZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGlzdCB0byByZW1vdmUgdGFnIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlbW92ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZm9yZWFjaCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZm9yZWFjaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YWdfbGlzdF9mb3JlYWNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRm9yZWFjaEZ1bmMiIHRpdGxlPSJHc3RUYWdGb3JlYWNoRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdGb3JlYWNoRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gZm9yIGVhY2ggdGFnIGluc2lkZSB0aGUgdGFnIGxpc3QuIE5vdGUgdGhhdCBpZiB0aGVyZQotaXMgbm8gdGFnLCB0aGUgZnVuY3Rpb24gd29uJ3QgYmUgY2FsbGVkIGF0IGFsbC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZm9yZWFjaC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGlzdCB0byBpdGVyYXRlIG92ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGVhY2ggdGFnLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHVzZXIgc3BlY2lmaWVkIGRhdGEuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXZhbHVlLWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPsKgKgotZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi1saXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdmFsdWUtaW5kZXgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXZhbHVlLWluZGV4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIEdWYWx1ZSBmb3IgdGhlIHNwZWNpZmllZAotZW50cnkgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSB0YWcgd2Fzbid0IGF2YWlsYWJsZSBvciB0aGUgdGFnCi1kb2Vzbid0IGhhdmUgYXMgbWFueSBlbnRyaWVzLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1jb3B5LXZhbHVlIj48L2E+PGgzPmdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfY29weV92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsCi1tZXJnaW5nIG11bHRpcGxlIHZhbHVlcyBpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQKLXdpdGggdGhlIHRhZy4KLVlvdSBtdXN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS11bnNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Vuc2V0KCk8L2NvZGU+PC9hPiB0aGUgdmFsdWUgYWZ0ZXIgdXNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1jb3B5LXZhbHVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdW5pbml0aWFsaXplZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGNvcHkgaW50by4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVyLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5saXN0IHRvIGdldCB0aGUgdGFnIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtY29weS12YWx1ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLWdpdmVuIGxpc3QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtYm9vbGVhbiI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW7CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcwotaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1ib29sZWFuLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1ib29sZWFuLWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbl9pbmRleMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi1saXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtYm9vbGVhbi1pbmRleC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4taW5kZXgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi1naXZlbiBsaXN0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWludCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2ludMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9pbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcwotaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWludC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWludC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLWdpdmVuIGxpc3QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtaW50LWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfaW50X2luZGV4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KLWxpc3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1pbnQtaW5kZXgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1pbnQtaW5kZXgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi1naXZlbiBsaXN0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXVpbnQiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF91aW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKLWludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC11aW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdWludC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLWdpdmVuIGxpc3QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdWludC1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotbGlzdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXVpbnQtaW5kZXgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC11aW50LWluZGV4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1pbnQ2NCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2ludDY0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfZ2V0X2ludDY0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtaW50NjQtaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9pbnQ2NF9pbmRleMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9pbnQ2NF9pbmRleCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi1saXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtaW50NjQtaW5kZXgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1pbnQ2NC1pbmRleC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLWdpdmVuIGxpc3QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdWludDY0Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfdWludDY0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzCi1pbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdWludDY0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtdWludDY0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC11aW50NjQtaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90YWdfbGlzdF9nZXRfdWludDY0X2luZGV4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluZGV4PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotbGlzdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXVpbnQ2NC1pbmRleC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXVpbnQ2NC1pbmRleC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLWdpdmVuIGxpc3QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtZmxvYXQiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9mbG9hdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9mbG9hdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKLWludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1mbG9hdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1mbG9hdC1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KLWxpc3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1mbG9hdC1pbmRleC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0LWluZGV4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1kb3VibGUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9kb3VibGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90YWdfbGlzdF9nZXRfZG91YmxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKLWludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1kb3VibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1kb3VibGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi1naXZlbiBsaXN0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZS1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9kb3VibGVfaW5kZXggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi1saXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtZG91YmxlLWluZGV4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtZG91YmxlLWluZGV4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1zdHJpbmciPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9zdHJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgcG9zc2libHkgbWVyZ2luZwotbXVsdGlwbGUgdmFsdWVzIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuPC9wPgotPHA+VXNlIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4IChsaXN0LCB0YWcsIDAsIHZhbHVlKSBpZiB5b3Ugd2FudAotdG8gcmV0cmlldmUgdGhlIGZpcnN0IHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0YWcgdW5tb2RpZmllZC48L3A+Ci08cD5UaGUgcmVzdWx0aW5nIHN0cmluZyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIGluIFVURi04IGVuY29kaW5nIGFuZCBzaG91bGQgYmUKLWZyZWVkIGJ5IHRoZSBjYWxsZXIgdXNpbmcgZ19mcmVlIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gVGhlCi1yZXR1cm5lZCBzdHJpbmcgaXMgYWxzbyBndWFyYW50ZWVkIHRvIGJlIG5vbi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gYW5kIG5vbi1lbXB0eS48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnX2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVlLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLWdpdmVuIGxpc3QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtc3RyaW5nLWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KLWxpc3QuPC9wPgotPHA+VGhlIHJlc3VsdGluZyBzdHJpbmcgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBpbiBVVEYtOCBlbmNvZGluZyBhbmQgc2hvdWxkIGJlCi1mcmVlZCBieSB0aGUgY2FsbGVyIHVzaW5nIGdfZnJlZSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIFRoZQotcmV0dXJuZWQgc3RyaW5nIGlzIGFsc28gZ3VhcmFudGVlZCB0byBiZSBub24tPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGFuZCBub24tZW1wdHkuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1zdHJpbmctaW5kZXgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlZS1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1zdHJpbmctaW5kZXgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi1naXZlbiBsaXN0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtcGVlay1zdHJpbmctaW5kZXgiPjwvYT48aDM+Z3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBpbmRleDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UGVla3MgYXQgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotbGlzdC48L3A+Ci08cD5UaGUgcmVzdWx0aW5nIHN0cmluZyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIGluIFVURi04IGVuY29kaW5nIGFuZCBkb2Vzbid0IG5lZWQKLXRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgYWxzbyBndWFyYW50ZWVkIHRvCi1iZSBub24tPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGFuZCBub24tZW1wdHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LXBlZWstc3RyaW5nLWluZGV4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1wZWVrLXN0cmluZy1pbmRleC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgYSB2YWx1ZSB3YXMgc2V0LCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLWdpdmVuIGxpc3QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtcG9pbnRlciI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90YWdfbGlzdF9nZXRfcG9pbnRlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICpsaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcwotaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1wb2ludGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1wb2ludGVyLWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcl9pbmRleMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi1saXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtcG9pbnRlci1pbmRleC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXItaW5kZXgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi1naXZlbiBsaXN0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUiPjwvYT48aDM+Z3N0X3RhZ19saXN0X2dldF9kYXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFnX2xpc3RfZ2V0X2RhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dEYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R0RhdGU8L3NwYW4+PC9hPiAqKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvcGllcyB0aGUgZmlyc3QgZGF0ZSBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgdGFnbGlzdCBpbnRvIHRoZSB2YXJpYWJsZQotcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS4gRnJlZSB0aGUgZGF0ZSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjZy1kYXRlLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19kYXRlX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gaXQgaXMgbm8gbG9uZ2VyCi1uZWVkZWQuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19kYXRlX2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRkcmVzcyBvZiBhIEdEYXRlIHBvaW50ZXIKLXZhcmlhYmxlIHRvIHN0b3JlIHRoZSByZXN1bHQgaW50by4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVlLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIGEgZGF0ZSB3YXMgY29waWVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLWdpdmVuIGxpc3Qgb3IgaWYgaXQgd2FzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1kYXRlLWluZGV4Ij48L2E+PGgzPmdzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI0dEYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R0RhdGU8L3NwYW4+PC9hPiAqKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGRhdGUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi1saXN0IGFuZCBjb3BpZXMgaXQgaW50byB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS4gRnJlZSB0aGUgZGF0ZQotd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRlLWFuZC1UaW1lLUZ1bmN0aW9ucy5odG1sI2ctZGF0ZS1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZGF0ZV9mcmVlKCk8L2NvZGU+PC9hPiB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19kYXRlX2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtaW5kZXgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gZm9yIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlZS1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1kYXRlLWluZGV4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtdGltZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4gKip2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3BpZXMgdGhlIGZpcnN0IGRhdGV0aW1lIGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSB0YWdsaXN0IGludG8gdGhlIHZhcmlhYmxlCi1wb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLiBVbnJlZiB0aGUgZGF0ZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGF0ZV90aW1lX3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuCi1pdCBpcyBubyBsb25nZXIgbmVlZGVkLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHRhZyBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byByZWFkIG91dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhZGRyZXNzIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGVUaW1lPC9zcGFuPjwvYT4KLXBvaW50ZXIgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJPdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dCBjYWxsZWUtYWxsb2NhdGVzPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtZGF0ZS10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIGRhdGV0aW1lIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluCi10aGUgZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtdGltZS1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZV9pbmRleMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+ICoqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgZGF0ZXRpbWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi1saXN0IGFuZCBjb3BpZXMgaXQgaW50byB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS4gVW5yZWYgdGhlIGRhdGV0aW1lCi13aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGF0ZV90aW1lX3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtZGF0ZS10aW1lLWluZGV4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJPdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dCBjYWxsZWUtYWxsb2NhdGVzPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtZGF0ZS10aW1lLWluZGV4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXNhbXBsZSI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9zYW1wbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4gKipzYW1wbGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29waWVzIHRoZSBmaXJzdCBzYW1wbGUgZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIHRhZ2xpc3QgaW50byB0aGUgdmFyaWFibGUKLXBvaW50ZWQgdG8gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNhbXBsZTwvY29kZT48L2VtPgotLiBGcmVlIHRoZSBzYW1wbGUgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwjZ3N0LXNhbXBsZS11bnJlZiIgdGl0bGU9ImdzdF9zYW1wbGVfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zYW1wbGVfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gaXQgaXMKLW5vIGxvbmdlciBuZWVkZWQuIFlvdSBjYW4gcmV0cmlldmUgdGhlIGJ1ZmZlciBmcm9tIHRoZSBzYW1wbGUgdXNpbmcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLWdldC1idWZmZXIiIHRpdGxlPSJnc3Rfc2FtcGxlX2dldF9idWZmZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zYW1wbGVfZ2V0X2J1ZmZlcigpPC9jb2RlPjwvYT4gYW5kIHRoZSBhc3NvY2lhdGVkIGNhcHMgKGlmIGFueSkgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LWNhcHMiIHRpdGxlPSJnc3Rfc2FtcGxlX2dldF9jYXBzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2FtcGxlX2dldF9jYXBzKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3Rfc2FtcGxlX3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1saXN0LWdldC1zYW1wbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSB0YWcgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gcmVhZCBvdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2FtcGxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGFkZHJlc3Mgb2YgYSBHc3RTYW1wbGUKLXBvaW50ZXIgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJPdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dCBjYWxsZWUtYWxsb2NhdGVzPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtc2FtcGxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpZiBhIHNhbXBsZSB3YXMgcmV0dXJuZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluCi10aGUgZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXNhbXBsZS1pbmRleCI+PC9hPjxoMz5nc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZV9pbmRleMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+ICoqc2FtcGxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHNhbXBsZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KLWxpc3QgYW5kIGNvcGllcyBpdCBpbnRvIHRoZSB2YXJpYWJsZSBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zYW1wbGU8L2NvZGU+PC9lbT4KLS4gRnJlZSB0aGUgc2FtcGxlCi13aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLXVucmVmIiB0aXRsZT0iZ3N0X3NhbXBsZV91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NhbXBsZV91bnJlZigpPC9jb2RlPjwvYT4gd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBZb3UgY2FuIHJldHJpZXZlIHRoZQotYnVmZmVyIGZyb20gdGhlIHNhbXBsZSB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwjZ3N0LXNhbXBsZS1nZXQtYnVmZmVyIiB0aXRsZT0iZ3N0X3NhbXBsZV9nZXRfYnVmZmVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2FtcGxlX2dldF9idWZmZXIoKTwvY29kZT48L2E+IGFuZCB0aGUgYXNzb2NpYXRlZAotY2FwcyAoaWYgYW55KSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLWdldC1jYXBzIiB0aXRsZT0iZ3N0X3NhbXBsZV9nZXRfY2Fwc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NhbXBsZV9nZXRfY2FwcygpPC9jb2RlPjwvYT4uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3NhbXBsZV91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctbGlzdC1nZXQtc2FtcGxlLWluZGV4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IHRvIGdldCB0aGUgdGFnIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNhbXBsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhZGRyZXNzIG9mIGEgR3N0U2FtcGxlCi1wb2ludGVyIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSByZXN1bHQgaW50by4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVlLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLWxpc3QtZ2V0LXNhbXBsZS1pbmRleC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgYSBzYW1wbGUgd2FzIGNvcGllZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi1naXZlbiBsaXN0IG9yIGlmIGl0IHdhcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFnTGlzdC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGFnTGlzdC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFRhZ0xpc3Q8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RUYWdMaXN0IHsKLSAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKLX07Ci08L3ByZT4KLTxwPk9iamVjdCBkZXNjcmliaW5nIHRhZ3MgLyBtZXRhZGF0YS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUYWdMaXN0Lm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYWdMaXN0LXN0cnVjdC5taW5pLW9iamVjdCI+PC9hPm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFyZW50IHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUYWdNZXJnZU1vZGUiPjwvYT48aDM+ZW51bSBHc3RUYWdNZXJnZU1vZGU8L2gzPgotPHA+VGhlIGRpZmZlcmVudCB0YWcgbWVyZ2luZyBtb2RlcyBhcmUgYmFzaWNhbGx5IHJlcGxhY2UsIG92ZXJ3cml0ZSBhbmQgYXBwZW5kLAotYnV0IHRoZXkgY2FuIGJlIHNlZW4gZnJvbSB0d28gZGlyZWN0aW9ucy4gR2l2ZW4gdHdvIHRhZ2xpc3RzOiAoQSkgdGhlIHRhZ3MKLWFscmVhZHkgaW4gdGhlIGVsZW1lbnQgYW5kIChCKSB0aGUgb25lcyB0aGF0IGFyZSBzdXBwbGllZCB0byB0aGUgZWxlbWVudCAoCi1lLmcuIHZpYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItbWVyZ2UtdGFncyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3PCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MoKTwvY29kZT48L2E+IC8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWdzIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3PCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfc2V0dGVyX2FkZF90YWdzKCk8L2NvZGU+PC9hPiBvciBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVEFHOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRVZFTlRfVEFHPC9jb2RlPjwvYT4pLCBob3cgYXJlIHRoZXNlIHRhZ3MgbWVyZ2VkPwotSW4gdGhlIHRhYmxlIGJlbG93IHRoaXMgaXMgc2hvd24gZm9yIHRoZSBjYXNlcyB0aGF0IGEgdGFnIGV4aXN0cyBpbiB0aGUgbGlzdAotKEEpIG9yIGRvZXMgbm90IGV4aXN0cyAoIUEpIGFuZCBjb21iaW5hdGlvbnMgdGhlcmVvZi48L3A+Ci08ZGl2IGNsYXNzPSJ0YWJsZSI+Ci08YSBuYW1lPSJpZC0xLjMuNTAuOS4zLjQiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPlRhYmxlwqAxLsKgbWVyZ2UgbW9kZTwvYj48L3A+Ci08ZGl2IGNsYXNzPSJ0YWJsZS1jb250ZW50cyI+PHRhYmxlIGNsYXNzPSJ0YWJsZSIgc3VtbWFyeT0ibWVyZ2UgbW9kZSIgYm9yZGVyPSIxIj4KLTxjb2xncm91cD4KLTxjb2w+Ci08Y29sPgotPGNvbD4KLTxjb2w+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0aGVhZD48dHI+Ci08dGggYWxpZ249ImxlZnQiPm1lcmdlIG1vZGU8L3RoPgotPHRoIGFsaWduPSJsZWZ0Ij5BICsgQjwvdGg+Ci08dGggYWxpZ249ImxlZnQiPkEgKyAhQjwvdGg+Ci08dGggYWxpZ249ImxlZnQiPiFBICsgQjwvdGg+Ci08dGggYWxpZ249ImxlZnQiPiFBICsgIUI8L3RoPgotPC90cj48L3RoZWFkPgotPHRib2R5PgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij5SRVBMQUNFX0FMTDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPkI8L3RkPgotPHRkIGFsaWduPSJsZWZ0Ij4tPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+QjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPi08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+UkVQTEFDRTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPkI8L3RkPgotPHRkIGFsaWduPSJsZWZ0Ij5BPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+QjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPi08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+QVBQRU5EPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+QSwgQjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPkE8L3RkPgotPHRkIGFsaWduPSJsZWZ0Ij5CPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+LTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij5QUkVQRU5EPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+QiwgQTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPkE8L3RkPgotPHRkIGFsaWduPSJsZWZ0Ij5CPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+LTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij5LRUVQPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+QTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPkE8L3RkPgotPHRkIGFsaWduPSJsZWZ0Ij5CPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+LTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij5LRUVQX0FMTDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPkE8L3RkPgotPHRkIGFsaWduPSJsZWZ0Ij5BPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCI+LTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiPi08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YnIgY2xhc3M9InRhYmxlLWJyZWFrIj48ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUYWdNZXJnZU1vZGUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVEFHLU1FUkdFLVVOREVGSU5FRDpDQVBTIj48L2E+R1NUX1RBR19NRVJHRV9VTkRFRklORUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dW5kZWZpbmVkIG1lcmdlIG1vZGU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRBRy1NRVJHRS1SRVBMQUNFLUFMTDpDQVBTIj48L2E+R1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5yZXBsYWNlIGFsbCB0YWdzIChjbGVhciBsaXN0IGFuZCBhcHBlbmQpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UQUctTUVSR0UtUkVQTEFDRTpDQVBTIj48L2E+R1NUX1RBR19NRVJHRV9SRVBMQUNFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnJlcGxhY2UgdGFnczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVEFHLU1FUkdFLUFQUEVORDpDQVBTIj48L2E+R1NUX1RBR19NRVJHRV9BUFBFTkQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YXBwZW5kIHRhZ3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRBRy1NRVJHRS1QUkVQRU5EOkNBUFMiPjwvYT5HU1RfVEFHX01FUkdFX1BSRVBFTkQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cHJlcGVuZCB0YWdzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UQUctTUVSR0UtS0VFUDpDQVBTIj48L2E+R1NUX1RBR19NRVJHRV9LRUVQPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmtlZXAgZXhpc3RpbmcgdGFnczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVEFHLU1FUkdFLUtFRVAtQUxMOkNBUFMiPjwvYT5HU1RfVEFHX01FUkdFX0tFRVBfQUxMPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmtlZXAgYWxsIGV4aXN0aW5nIHRhZ3M8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRBRy1NRVJHRS1DT1VOVDpDQVBTIj48L2E+R1NUX1RBR19NRVJHRV9DT1VOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgbnVtYmVyIG9mIG1lcmdlIG1vZGVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUYWdGbGFnIj48L2E+PGgzPmVudW0gR3N0VGFnRmxhZzwvaDM+Ci08cD5FeHRyYSB0YWcgZmxhZ3MgdXNlZCB3aGVuIHJlZ2lzdGVyaW5nIHRhZ3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VGFnRmxhZy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UQUctRkxBRy1VTkRFRklORUQ6Q0FQUyI+PC9hPkdTVF9UQUdfRkxBR19VTkRFRklORUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dW5kZWZpbmVkIGZsYWc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRBRy1GTEFHLU1FVEE6Q0FQUyI+PC9hPkdTVF9UQUdfRkxBR19NRVRBPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRhZyBpcyBtZXRhIGRhdGE8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRBRy1GTEFHLUVOQ09ERUQ6Q0FQUyI+PC9hPkdTVF9UQUdfRkxBR19FTkNPREVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRhZyBpcyBlbmNvZGVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UQUctRkxBRy1ERUNPREVEOkNBUFMiPjwvYT5HU1RfVEFHX0ZMQUdfREVDT0RFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50YWcgaXMgZGVjb2RlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVEFHLUZMQUctQ09VTlQ6Q0FQUyI+PC9hPkdTVF9UQUdfRkxBR19DT1VOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5udW1iZXIgb2YgdGFnIGZsYWdzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUYWdTY29wZSI+PC9hPjxoMz5lbnVtIEdzdFRhZ1Njb3BlPC9oMz4KLTxwPkdzdFRhZ1Njb3BlIHNwZWNpZmllcyBpZiBhIHRhZ2xpc3QgYXBwbGllcyB0byB0aGUgY29tcGxldGUKLW1lZGl1bSBvciBvbmx5IHRvIG9uZSBzaW5nbGUgc3RyZWFtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRhZ1Njb3BlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRBRy1TQ09QRS1TVFJFQU06Q0FQUyI+PC9hPkdTVF9UQUdfU0NPUEVfU1RSRUFNPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRhZ3Mgc3BlY2lmaWMgdG8gdGhpcyBzaW5nbGUgc3RyZWFtPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UQUctU0NPUEUtR0xPQkFMOkNBUFMiPjwvYT5HU1RfVEFHX1NDT1BFX0dMT0JBTDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5nbG9iYWwgdGFncyBmb3IgdGhlIGNvbXBsZXRlIG1lZGl1bTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1USVRMRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfVElUTEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19USVRMRSAgICAgICAgICAgICAgICAgICJ0aXRsZSIKLTwvcHJlPgotPHA+Y29tbW9ubHkgdXNlZCB0aXRsZSAoc3RyaW5nKTwvcD4KLTxwPlRoZSB0aXRsZSBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkLCBlLmcuICdUaGUgRG9sbCBIb3VzZSc8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctVElUTEUtU09SVE5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1RJVExFX1NPUlROQU1FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfVElUTEVfU09SVE5BTUUgICAgICAgICAidGl0bGUtc29ydG5hbWUiCi08L3ByZT4KLTxwPmNvbW1vbmx5IHVzZWQgdGl0bGUsIGFzIHVzZWQgZm9yIHNvcnRpbmcgKHN0cmluZyk8L3A+Ci08cD5UaGUgdGl0bGUgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCwgZS5nLiAnRG9sbCBIb3VzZSwgVGhlJzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1BUlRJU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FSVElTVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FSVElTVCAgICAgICAgICAgICAgICAgImFydGlzdCIKLTwvcHJlPgotPHA+cGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIChzdHJpbmcpPC9wPgotPHA+VGhlIGFydGlzdCBuYW1lIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGUuZy4gJ0ppbWkgSGVuZHJpeCcgb3IKLSdUaGUgR3VpdGFyIEhlcm9lcyc8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctQVJUSVNULVNPUlROQU1FOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BUlRJU1RfU09SVE5BTUU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19BUlRJU1RfU09SVE5BTUUgICAgICAgICJhcnRpc3Qtc29ydG5hbWUiCi08L3ByZT4KLTxwPnBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZywgYXMgdXNlZCBmb3Igc29ydGluZyAoc3RyaW5nKTwvcD4KLTxwPlRoZSBhcnRpc3QgbmFtZSBhcyBpdCBzaG91bGQgYmUgc29ydGVkLCBlLmcuICdIZW5kcml4LCBKaW1pJyBvcgotJ0d1aXRhciBIZXJvZXMsIFRoZSc8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctQUxCVU06Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FMQlVNPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQUxCVU0gICAgICAgICAgICAgICAgICAiYWxidW0iCi08L3ByZT4KLTxwPmFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIChzdHJpbmcpPC9wPgotPHA+VGhlIGFsYnVtIG5hbWUgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCwgZS5nLiAnVGhlIEphenogR3VpdGFyJzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1BTEJVTS1TT1JUTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQUxCVU1fU09SVE5BTUU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19BTEJVTV9TT1JUTkFNRSAgICAgICAgICJhbGJ1bS1zb3J0bmFtZSIKLTwvcHJlPgotPHA+YWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEsIGFzIHVzZWQgZm9yIHNvcnRpbmcgKHN0cmluZyk8L3A+Ci08cD5UaGUgYWxidW0gbmFtZSBhcyBpdCBzaG91bGQgYmUgc29ydGVkLCBlLmcuICdKYXp6IEd1aXRhciwgVGhlJzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1BTEJVTS1BUlRJU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FMQlVNX0FSVElTVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FMQlVNX0FSVElTVCAgICAgICAgICAgImFsYnVtLWFydGlzdCIKLTwvcHJlPgotPHA+VGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1BTEJVTS1BUlRJU1QtU09SVE5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRSAgImFsYnVtLWFydGlzdC1zb3J0bmFtZSIKLTwvcHJlPgotPHA+VGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1EQVRFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19EQVRFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfREFURSAgICAgICAgICAgICAgICAgICAiZGF0ZSIKLTwvcHJlPgotPHA+ZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0ZS1hbmQtVGltZS1GdW5jdGlvbnMuaHRtbCNHRGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEYXRlPC9zcGFuPjwvYT4gc3RydWN0dXJlKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1EQVRFLVRJTUU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0RBVEVfVElNRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0RBVEVfVElNRSAgICAgICAgICAgICAgImRhdGV0aW1lIgotPC9wcmU+Ci08cD5kYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkICg8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0ZVRpbWU8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUdFTlJFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19HRU5SRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0dFTlJFICAgICAgICAgICAgICAgICAgImdlbnJlIgotPC9wcmU+Ci08cD5nZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1DT01NRU5UOkNBUFMiPjwvYT48aDM+R1NUX1RBR19DT01NRU5UPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQ09NTUVOVCAgICAgICAgICAgICAgICAiY29tbWVudCIKLTwvcHJlPgotPHA+ZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctRVhURU5ERUQtQ09NTUVOVDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfRVhURU5ERURfQ09NTUVOVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQgICAgICAgImV4dGVuZGVkLWNvbW1lbnQiCi08L3ByZT4KLTxwPmtleS92YWx1ZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgKHN0cmluZyk8L3A+Ci08cD5NdXN0IGJlIGluIHRoZSBmb3JtIG9mICdrZXk9Y29tbWVudCcgb3IKLSdrZXlbbGNdPWNvbW1lbnQnIHdoZXJlICdsYycgaXMgYW4gSVNPLTYzOQotbGFuZ3VhZ2UgY29kZS48L3A+Ci08cD5UaGlzIHRhZyBpcyB1c2VkIGZvciB1bmtub3duIFZvcmJpcyBjb21tZW50IHRhZ3MsCi11bmtub3duIEFQRSB0YWdzIGFuZCBjZXJ0YWluIElEM3YyIGNvbW1lbnQgZmllbGRzLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1UUkFDSy1OVU1CRVI6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1RSQUNLX05VTUJFUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1RSQUNLX05VTUJFUiAgICAgICAgICAgInRyYWNrLW51bWJlciIKLTwvcHJlPgotPHA+dHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24gKHVuc2lnbmVkIGludGVnZXIpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLVRSQUNLLUNPVU5UOkNBUFMiPjwvYT48aDM+R1NUX1RBR19UUkFDS19DT1VOVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1RSQUNLX0NPVU5UICAgICAgICAgICAgInRyYWNrLWNvdW50IgotPC9wcmU+Ci08cD5jb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvICh1bnNpZ25lZCBpbnRlZ2VyKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1BTEJVTS1WT0xVTUUtTlVNQkVSOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUiAgICAiYWxidW0tZGlzYy1udW1iZXIiCi08L3ByZT4KLTxwPmRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24gKHVuc2lnbmVkIGludGVnZXIpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUFMQlVNLVZPTFVNRS1DT1VOVDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5UPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5UICAgICJhbGJ1bS1kaXNjLWNvdW50IgotPC9wcmU+Ci08cD5jb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byAodW5zaWduZWQgaW50ZWdlcik8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctTE9DQVRJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0xPQ0FUSU9OPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTE9DQVRJT04gICAgICAgICAgICAgICAibG9jYXRpb24iCi08L3ByZT4KLTxwPk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0KLWlzIGhvc3RlZCkgKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctSE9NRVBBR0U6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0hPTUVQQUdFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfSE9NRVBBR0UgICAgICAgICAgICAgICAiaG9tZXBhZ2UiCi08L3ByZT4KLTxwPkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkgKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctREVTQ1JJUFRJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0RFU0NSSVBUSU9OPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfREVTQ1JJUFRJT04gICAgICAgICAgICAiZGVzY3JpcHRpb24iCi08L3ByZT4KLTxwPnNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1WRVJTSU9OOkNBUFMiPjwvYT48aDM+R1NUX1RBR19WRVJTSU9OPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfVkVSU0lPTiAgICAgICAgICAgICAgICAidmVyc2lvbiIKLTwvcHJlPgotPHA+dmVyc2lvbiBvZiB0aGlzIGRhdGEgKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctSVNSQzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfSVNSQzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0lTUkMgICAgICAgICAgICAgICAgICAgImlzcmMiCi08L3ByZT4KLTxwPkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1PUkdBTklaQVRJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX09SR0FOSVpBVElPTjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX09SR0FOSVpBVElPTiAgICAgICAgICAgIm9yZ2FuaXphdGlvbiIKLTwvcHJlPgotPHA+b3JnYW5pemF0aW9uIChzdHJpbmcpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUNPUFlSSUdIVDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQ09QWVJJR0hUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQ09QWVJJR0hUICAgICAgICAgICAgICAiY29weXJpZ2h0IgotPC9wcmU+Ci08cD5jb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIChzdHJpbmcpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUNPUFlSSUdIVC1VUkk6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0NPUFlSSUdIVF9VUkk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19DT1BZUklHSFRfVVJJICAgICAgICAgICJjb3B5cmlnaHQtdXJpIgotPC9wcmU+Ci08cD5VUkkgdG8gbG9jYXRpb24gd2hlcmUgY29weXJpZ2h0IGRldGFpbHMgY2FuIGJlIGZvdW5kIChzdHJpbmcpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUVOQ09ERUQtQlk6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0VOQ09ERURfQlk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19FTkNPREVEX0JZICAgICAgICAgICAgICJlbmNvZGVkLWJ5IgotPC9wcmU+Ci08cD5uYW1lIG9mIHRoZSBwZXJzb24gb3Igb3JnYW5pc2F0aW9uIHRoYXQgZW5jb2RlZCB0aGUgZmlsZS4gTWF5IGNvbnRhaW4gYQotY29weXJpZ2h0IG1lc3NhZ2UgaWYgdGhlIHBlcnNvbiBvciBvcmdhbmlzYXRpb24gYWxzbyBob2xkcyB0aGUgY29weXJpZ2h0Ci0oc3RyaW5nKTwvcD4KLTxwPk5vdGU6IGRvIG5vdCB1c2UgdGhpcyBmaWVsZCB0byBkZXNjcmliZSB0aGUgZW5jb2RpbmcgYXBwbGljYXRpb24uIFVzZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQVBQTElDQVRJT05fTkFNRSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UQUdfQVBQTElDQVRJT05fTkFNRTwvc3Bhbj48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT01NRU5UOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0NPTU1FTlQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVEFHX0NPTU1FTlQ8L3NwYW4+PC9hPiBmb3IgdGhhdC48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctQ09NUE9TRVI6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0NPTVBPU0VSPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQ09NUE9TRVIgICAgICAgICAgICAgICAiY29tcG9zZXIiCi08L3ByZT4KLTxwPnBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1DT05UQUNUOkNBUFMiPjwvYT48aDM+R1NUX1RBR19DT05UQUNUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQ09OVEFDVCAgICAgICAgICAgICAgICAiY29udGFjdCIKLTwvcHJlPgotPHA+Y29udGFjdCBpbmZvcm1hdGlvbiAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1MSUNFTlNFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19MSUNFTlNFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTElDRU5TRSAgICAgICAgICAgICAgICAibGljZW5zZSIKLTwvcHJlPgotPHA+bGljZW5zZSBvZiBkYXRhIChzdHJpbmcpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUxJQ0VOU0UtVVJJOkNBUFMiPjwvYT48aDM+R1NUX1RBR19MSUNFTlNFX1VSSTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0xJQ0VOU0VfVVJJICAgICAgICAgICAgImxpY2Vuc2UtdXJpIgotPC9wcmU+Ci08cD5VUkkgdG8gbG9jYXRpb24gd2hlcmUgbGljZW5zZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1QRVJGT1JNRVI6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1BFUkZPUk1FUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1BFUkZPUk1FUiAgICAgICAgICAgICAgInBlcmZvcm1lciIKLTwvcHJlPgotPHA+cGVyc29uKHMpIHBlcmZvcm1pbmcgKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctRFVSQVRJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0RVUkFUSU9OPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfRFVSQVRJT04gICAgICAgICAgICAgICAiZHVyYXRpb24iCi08L3ByZT4KLTxwPmxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpICh1bnNpZ25lZCA2NC1iaXQgaW50ZWdlcik8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctQ09ERUM6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0NPREVDPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQ09ERUMgICAgICAgICAgICAgICAgICAiY29kZWMiCi08L3ByZT4KLTxwPmNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1WSURFTy1DT0RFQzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfVklERU9fQ09ERUM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19WSURFT19DT0RFQyAgICAgICAgICAgICJ2aWRlby1jb2RlYyIKLTwvcHJlPgotPHA+Y29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIChzdHJpbmcpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUFVRElPLUNPREVDOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BVURJT19DT0RFQzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FVRElPX0NPREVDICAgICAgICAgICAgImF1ZGlvLWNvZGVjIgotPC9wcmU+Ci08cD5jb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctU1VCVElUTEUtQ09ERUM6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1NVQlRJVExFX0NPREVDPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfU1VCVElUTEVfQ09ERUMgICAgICAgICAic3VidGl0bGUtY29kZWMiCi08L3ByZT4KLTxwPmNvZGVjL2Zvcm1hdCB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctQ09OVEFJTkVSLUZPUk1BVDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQgICAgICAgImNvbnRhaW5lci1mb3JtYXQiCi08L3ByZT4KLTxwPmNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIChzdHJpbmcpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUJJVFJBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0JJVFJBVEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19CSVRSQVRFICAgICAgICAgICAgICAgICJiaXRyYXRlIgotPC9wcmU+Ci08cD5leGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zICh1bnNpZ25lZCBpbnRlZ2VyKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1OT01JTkFMLUJJVFJBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX05PTUlOQUxfQklUUkFURTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX05PTUlOQUxfQklUUkFURSAgICAgICAgIm5vbWluYWwtYml0cmF0ZSIKLTwvcHJlPgotPHA+bm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyAodW5zaWduZWQgaW50ZWdlcikuIFRoZSBhY3R1YWwgYml0cmF0ZSBtaWdodCBiZQotZGlmZmVyZW50IGZyb20gdGhpcyB0YXJnZXQgYml0cmF0ZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctTUlOSU1VTS1CSVRSQVRFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19NSU5JTVVNX0JJVFJBVEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUgICAgICAgICJtaW5pbXVtLWJpdHJhdGUiCi08L3ByZT4KLTxwPm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MgKHVuc2lnbmVkIGludGVnZXIpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLU1BWElNVU0tQklUUkFURTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFICAgICAgICAibWF4aW11bS1iaXRyYXRlIgotPC9wcmU+Ci08cD5tYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zICh1bnNpZ25lZCBpbnRlZ2VyKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1TRVJJQUw6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1NFUklBTDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1NFUklBTCAgICAgICAgICAgICAgICAgInNlcmlhbCIKLTwvcHJlPgotPHA+c2VyaWFsIG51bWJlciBvZiB0cmFjayAodW5zaWduZWQgaW50ZWdlcik8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctRU5DT0RFUjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfRU5DT0RFUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0VOQ09ERVIgICAgICAgICAgICAgICAgImVuY29kZXIiCi08L3ByZT4KLTxwPmVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0gKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctRU5DT0RFUi1WRVJTSU9OOkNBUFMiPjwvYT48aDM+R1NUX1RBR19FTkNPREVSX1ZFUlNJT048L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19FTkNPREVSX1ZFUlNJT04gICAgICAgICJlbmNvZGVyLXZlcnNpb24iCi08L3ByZT4KLTxwPnZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0gKHVuc2lnbmVkIGludGVnZXIpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLVRSQUNLLUdBSU46Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1RSQUNLX0dBSU48L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19UUkFDS19HQUlOICAgICAgICAgICAgICJyZXBsYXlnYWluLXRyYWNrLWdhaW4iCi08L3ByZT4KLTxwPnRyYWNrIGdhaW4gaW4gZGIgKGRvdWJsZSk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctVFJBQ0stUEVBSzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfVFJBQ0tfUEVBSzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1RSQUNLX1BFQUsgICAgICAgICAgICAgInJlcGxheWdhaW4tdHJhY2stcGVhayIKLTwvcHJlPgotPHA+cGVhayBvZiB0aGUgdHJhY2sgKGRvdWJsZSk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctQUxCVU0tR0FJTjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQUxCVU1fR0FJTjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FMQlVNX0dBSU4gICAgICAgICAgICAgInJlcGxheWdhaW4tYWxidW0tZ2FpbiIKLTwvcHJlPgotPHA+YWxidW0gZ2FpbiBpbiBkYiAoZG91YmxlKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1BTEJVTS1QRUFLOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BTEJVTV9QRUFLPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQUxCVU1fUEVBSyAgICAgICAgICAgICAicmVwbGF5Z2Fpbi1hbGJ1bS1wZWFrIgotPC9wcmU+Ci08cD5wZWFrIG9mIHRoZSBhbGJ1bSAoZG91YmxlKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1SRUZFUkVOQ0UtTEVWRUw6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX1JFRkVSRU5DRV9MRVZFTDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCAgICAgICAgInJlcGxheWdhaW4tcmVmZXJlbmNlLWxldmVsIgotPC9wcmU+Ci08cD5yZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIChkb3VibGUpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUxBTkdVQUdFLUNPREU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0xBTkdVQUdFX0NPREU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19MQU5HVUFHRV9DT0RFICAgICAgICAgICJsYW5ndWFnZS1jb2RlIgotPC9wcmU+Ci08cD5JU08tNjM5LTIgb3IgSVNPLTYzOS0xIGNvZGUgZm9yIHRoZSBsYW5ndWFnZSB0aGUgY29udGVudCBpcyBpbiAoc3RyaW5nKTwvcD4KLTxwPlRoZXJlIGlzIHV0aWxpdHkgQVBJIGluIGxpYmdzdHRhZyBpbiBnc3QtcGx1Z2lucy1iYXNlIHRvIG9idGFpbiBhIHRyYW5zbGF0ZWQKLWxhbmd1YWdlIG5hbWUgZnJvbSB0aGUgbGFuZ3VhZ2UgY29kZTogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R0YWdsYW5ndWFnZWNvZGVzLmh0bWwjZ3N0LXRhZy1nZXQtbGFuZ3VhZ2UtbmFtZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX2dldF9sYW5ndWFnZV9uYW1lKCk8L2NvZGU+PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1MQU5HVUFHRS1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX1RBR19MQU5HVUFHRV9OQU1FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTEFOR1VBR0VfTkFNRSAgICAgICAgICAibGFuZ3VhZ2UtbmFtZSIKLTwvcHJlPgotPHA+TmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhlIGNvbnRlbnQgaXMgaW4gKHN0cmluZyk8L3A+Ci08cD5GcmVlLWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhlIGNvbnRlbnQgaXMgaW4sIGlmIGEgbGFuZ3VhZ2UgY29kZQotaXMgbm90IGF2YWlsYWJsZS4gVGhpcyB0YWcgc2hvdWxkIG5vdCBiZSBzZXQgaW4gYWRkaXRpb24gdG8gYSBsYW5ndWFnZQotY29kZS4gSXQgaXMgdW5kZWZpbmVkIHdoYXQgbGFuZ3VhZ2Ugb3IgbG9jYWxlIHRoZSBsYW5ndWFnZSBuYW1lIGlzIGluLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1JTUFHRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfSU1BR0U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19JTUFHRSAgICAgICAgICAgICAgICAgICJpbWFnZSIKLTwvcHJlPgotPHA+aW1hZ2UgKHNhbXBsZSkgKHNhbXBsZSB0YWdsaXN0IHNob3VsZCBzcGVjaWZ5IHRoZSBjb250ZW50IHR5cGUgYW5kIHByZWZlcmFibHkKLWFsc28gc2V0ICJpbWFnZS10eXBlIiBmaWVsZCBhcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHRhZy5odG1sI0dzdFRhZ0ltYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0ltYWdlVHlwZTwvc3Bhbj48L2E+KTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1QUkVWSUVXLUlNQUdFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19QUkVWSUVXX0lNQUdFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfUFJFVklFV19JTUFHRSAgICAgICAgICAicHJldmlldy1pbWFnZSIKLTwvcHJlPgotPHA+aW1hZ2UgdGhhdCBpcyBtZWFudCBmb3IgcHJldmlldyBwdXJwb3NlcywgZS5nLiBzbWFsbCBpY29uLXNpemVkIHZlcnNpb24KLShzYW1wbGUpIChzYW1wbGUgdGFnbGlzdCBzaG91bGQgc3BlY2lmeSB0aGUgY29udGVudCB0eXBlKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1BVFRBQ0hNRU5UOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BVFRBQ0hNRU5UPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQVRUQUNITUVOVCAgICAgICAgICAgICAiYXR0YWNobWVudCIKLTwvcHJlPgotPHA+Z2VuZXJpYyBmaWxlIGF0dGFjaG1lbnQgKHNhbXBsZSkgKHNhbXBsZSB0YWdsaXN0IHNob3VsZCBzcGVjaWZ5IHRoZSBjb250ZW50Ci10eXBlIGFuZCBpZiBwb3NzaWJsZSBzZXQgImZpbGVuYW1lIiB0byB0aGUgZmlsZSBuYW1lIG9mIHRoZQotYXR0YWNobWVudCk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctQkVBVFMtUEVSLU1JTlVURTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQkVBVFNfUEVSX01JTlVURTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEUgICAgICAgImJlYXRzLXBlci1taW51dGUiCi08L3ByZT4KLTxwPm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIChkb3VibGUpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUtFWVdPUkRTOkNBUFMiPjwvYT48aDM+R1NUX1RBR19LRVlXT1JEUzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0tFWVdPUkRTICAgICAgICAgICAgICAgImtleXdvcmRzIgotPC9wcmU+Ci08cD5jb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCAoc3RyaW5nKS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9OQU1FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUUgICAgICAgICAgICAgICAiZ2VvLWxvY2F0aW9uLW5hbWUiCi08L3ByZT4KLTxwPmh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvcgotcHJvZHVjZWQuIChzdHJpbmcpLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1HRU8tTE9DQVRJT04tTEFUSVRVREU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERSAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tbGF0aXR1ZGUiCi08L3ByZT4KLTxwPmdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4KLWRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHNvdXRoZXJuCi1sYXRpdHVkZXMpIChkb3VibGUpLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1HRU8tTE9DQVRJT04tTE9OR0lUVURFOkNBUFMiPjwvYT48aDM+R1NUX1RBR19HRU9fTE9DQVRJT05fTE9OR0lUVURFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xPTkdJVFVERSAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tbG9uZ2l0dWRlIgotPC9wcmU+Ci08cD5nZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbgotZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywKLW5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKS4gKGRvdWJsZSkuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1FTEVWQVRJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9FTEVWQVRJT048L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OICAgICAgICAgICAgICAgImdlby1sb2NhdGlvbi1lbGV2YXRpb24iCi08L3ByZT4KLTxwPmdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycwotYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSAoZG91YmxlKS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLUNJVFk6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NJVFkgICAgICAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tY2l0eSIKLTwvcHJlPgotPHA+VGhlIGNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIChzdHJpbmcpLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1HRU8tTE9DQVRJT04tQ09VTlRSWTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fQ09VTlRSWSAgICAgICAgICAgICAgICAgImdlby1sb2NhdGlvbi1jb3VudHJ5IgotPC9wcmU+Ci08cD5UaGUgY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgKHN0cmluZykuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1TVUJMT0NBVElPTjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tc3VibG9jYXRpb24iCi08L3ByZT4KLTxwPkEgbG9jYXRpb24gJ3NtYWxsZXInIHRoYW4gR1NUX1RBR19HRU9fTE9DQVRJT05fQ0lUWSB0aGF0IHNwZWNpZmllcyBiZXR0ZXIKLXdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZC4gKGUuZy4gdGhlIG5laWdoYm9yaG9vZCkgKHN0cmluZykuPC9wPgotPHA+VGhpcyB0YWcgaGFzIGJlZW4gYWRkZWQgYXMgdGhpcyBpcyBob3cgaXQgaXMgaGFuZGxlZC9uYW1lZCBpbiBYTVAncwotSXB0YzR4bXBjb3JlIHNjaGVtYS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLUhPUklaT05UQUwtRVJST1I6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1IgICAiZ2VvLWxvY2F0aW9uLWhvcml6b250YWwtZXJyb3IiCi08L3ByZT4KLTxwPlJlcHJlc2VudHMgdGhlIGV4cGVjdGVkIGVycm9yIG9uIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIGluCi1tZXRlcnMgKGRvdWJsZSkuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9ESVJFQ1RJT048L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OICJnZW8tbG9jYXRpb24tbW92ZW1lbnQtZGlyZWN0aW9uIgotPC9wcmU+Ci08cD5JbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUKLW9mIGEgbWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sCi0wIG1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSAoZG91YmxlIGZyb20gMCB0byAzNjApPC9wPgotPHA+U2VlIGFsc28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DQVBUVVJFLURJUkVDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVEFHX0dFT19MT0NBVElPTl9DQVBUVVJFX0RJUkVDVElPTjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1TUEVFRDpDQVBTIj48L2E+PGgzPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVEPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVEICAgICAgICJnZW8tbG9jYXRpb24tbW92ZW1lbnQtc3BlZWQiCi08L3ByZT4KLTxwPlNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoZW4gcGVyZm9ybWluZyB0aGUgY2FwdHVyZS4KLVJlcHJlc2VudGVkIGluIG0vcy4gKGRvdWJsZSk8L3A+Ci08cD5TZWUgYWxzbyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU1PVkVNRU5ULURJUkVDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctR0VPLUxPQ0FUSU9OLUNBUFRVUkUtRElSRUNUSU9OOkNBUFMiPjwvYT48aDM+R1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT048L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04gICJnZW8tbG9jYXRpb24tY2FwdHVyZS1kaXJlY3Rpb24iCi08L3ByZT4KLTxwPkluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcKLWEgbWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sCi0wIG1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSAoZG91YmxlIGZyb20gMCB0byAzNjApPC9wPgotPHA+U2VlIGFsc28gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLVNIT1ctTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfU0hPV19OQU1FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfU0hPV19OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICJzaG93LW5hbWUiCi08L3ByZT4KLTxwPk5hbWUgb2YgdGhlIHNob3csIHVzZWQgZm9yIGRpc3BsYXlpbmcgKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctU0hPVy1TT1JUTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfU0hPV19TT1JUTkFNRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX1NIT1dfU09SVE5BTUUgICAgICAgICAgICAgICAgICAgICAic2hvdy1zb3J0bmFtZSIKLTwvcHJlPgotPHA+TmFtZSBvZiB0aGUgc2hvdywgdXNlZCBmb3Igc29ydGluZyAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1TSE9XLUVQSVNPREUtTlVNQkVSOkNBUFMiPjwvYT48aDM+R1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUiAgICAgICAgICAgICAgICJzaG93LWVwaXNvZGUtbnVtYmVyIgotPC9wcmU+Ci08cD5OdW1iZXIgb2YgdGhlIGVwaXNvZGUgd2l0aGluIGEgc2Vhc29uL3Nob3cgKHVuc2lnbmVkIGludGVnZXIpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLVNIT1ctU0VBU09OLU5VTUJFUjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSICAgICAgICAgICAgICAgICJzaG93LXNlYXNvbi1udW1iZXIiCi08L3ByZT4KLTxwPk51bWJlciBvZiB0aGUgc2Vhc29uIG9mIGEgc2hvdy9zZXJpZXMgKHVuc2lnbmVkIGludGVnZXIpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUxZUklDUzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfTFlSSUNTPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfTFlSSUNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICJseXJpY3MiCi08L3ByZT4KLTxwPlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhIChzdHJpbmcpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLUNPTVBPU0VSLVNPUlROQU1FOkNBUFMiPjwvYT48aDM+R1NUX1RBR19DT01QT1NFUl9TT1JUTkFNRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FICAgICAgICAgICAgICAgICAiY29tcG9zZXItc29ydG5hbWUiCi08L3ByZT4KLTxwPlRoZSBjb21wb3NlcidzIG5hbWUsIHVzZWQgZm9yIHNvcnRpbmcgKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctR1JPVVBJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0dST1VQSU5HPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfR1JPVVBJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICJncm91cGluZyIKLTwvcHJlPgotPHA+R3JvdXBzIHRvZ2V0aGVyIG1lZGlhIHRoYXQgYXJlIHJlbGF0ZWQgYW5kIHNwYW5zIG11bHRpcGxlIHRyYWNrcy4gQW4KLWV4YW1wbGUgYXJlIG11bHRpcGxlIHBpZWNlcyBvZiBhIGNvbmNlcnRvLiAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1VU0VSLVJBVElORzpDQVBTIj48L2E+PGgzPkdTVF9UQUdfVVNFUl9SQVRJTkc8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19VU0VSX1JBVElORyAgICAgICAgICAgICAgICAgICAgICAgInVzZXItcmF0aW5nIgotPC9wcmU+Ci08cD5SYXRpbmcgYXR0cmlidXRlZCBieSBhIHBlcnNvbiAobGlrZWx5IHRoZSBhcHBsaWNhdGlvbiB1c2VyKS4KLVRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyB0aGlzIG1lZGlhCi0odW5zaWduZWQgaW50IGZyb20gMCB0byAxMDApPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLURFVklDRS1NQU5VRkFDVFVSRVI6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19ERVZJQ0VfTUFOVUZBQ1RVUkVSICAgICAgICAgICAgICAgImRldmljZS1tYW51ZmFjdHVyZXIiCi08L3ByZT4KLTxwPk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1ERVZJQ0UtTU9ERUw6Q0FQUyI+PC9hPjxoMz5HU1RfVEFHX0RFVklDRV9NT0RFTDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0RFVklDRV9NT0RFTCAgICAgICAgICAgICAgICAgICAgICAiZGV2aWNlLW1vZGVsIgotPC9wcmU+Ci08cD5Nb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSAoc3RyaW5nKTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1BUFBMSUNBVElPTi1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX1RBR19BUFBMSUNBVElPTl9OQU1FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfQVBQTElDQVRJT05fTkFNRSAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi1uYW1lIgotPC9wcmU+Ci08cD5OYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEgKHN0cmluZyk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQUctQVBQTElDQVRJT04tREFUQTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfQVBQTElDQVRJT05fREFUQTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEEgICAgICAgICAgImFwcGxpY2F0aW9uLWRhdGEiCi08L3ByZT4KLTxwPkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIChzYW1wbGUpPC9wPgotPHA+U29tZSBmb3JtYXRzIGFsbG93IGFwcGxpY2F0aW9ucyB0byBhZGQgdGhlaXIgb3duIGFyYml0cmFyeSBkYXRhCi1pbnRvIGZpbGVzLiBUaGlzIGRhdGEgaXMgYXBwbGljYXRpb24gZGVwZW5kZW50LjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1JTUFHRS1PUklFTlRBVElPTjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfSU1BR0VfT1JJRU5UQVRJT048L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19JTUFHRV9PUklFTlRBVElPTiAgICAgICAgICAgICJpbWFnZS1vcmllbnRhdGlvbiIKLTwvcHJlPgotPHA+UmVwcmVzZW50cyB0aGUgJ09yaWVudGF0aW9uJyB0YWcgZnJvbSBFWElGLiBEZWZpbmVzIGhvdyB0aGUgaW1hZ2UKLXNob3VsZCBiZSByb3RhdGVkIGFuZCBtaXJyb3JlZCBmb3IgZGlzcGxheS4gKHN0cmluZyk8L3A+Ci08cD5UaGlzIHRhZyBoYXMgYSBwcmVkZWZpbmVkIHNldCBvZiBhbGxvd2VkIHZhbHVlczoKLSAgInJvdGF0ZS0wIgotICAicm90YXRlLTkwIgotICAicm90YXRlLTE4MCIKLSAgInJvdGF0ZS0yNzAiCi0gICJmbGlwLXJvdGF0ZS0wIgotICAiZmxpcC1yb3RhdGUtOTAiCi0gICJmbGlwLXJvdGF0ZS0xODAiCi0gICJmbGlwLXJvdGF0ZS0yNzAiPC9wPgotPHA+VGhlIG5hbWluZyBpcyBhZG9wdGVkIGFjY29yZGluZyB0byBhIHBvc3NpYmxlIHRyYW5zZm9ybWF0aW9uIHRvIHBlcmZvcm0KLW9uIHRoZSBpbWFnZSB0byBmaXggaXRzIG9yaWVudGF0aW9uLCBvYnZpb3VzbHkgZXF1aXZhbGVudCBvcGVyYXRpb25zIHdpbGwKLXlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3A+Ci08cD5Sb3RhdGlvbnMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZXMgYXJlIGluIGNsb2Nrd2lzZSBkaXJlY3Rpb24gYW5kCi0nZmxpcCcgbWVhbnMgYW4gaG9yaXpvbnRhbCBtaXJyb3JpbmcuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLVBVQkxJU0hFUjpDQVBTIj48L2E+PGgzPkdTVF9UQUdfUFVCTElTSEVSPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfUFVCTElTSEVSICAgICAgICAgICAgICAgICAgICAgICAgICJwdWJsaXNoZXIiCi08L3ByZT4KLTxwPk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciAoc3RyaW5nKTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1JTlRFUlBSRVRFRC1CWTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfSU5URVJQUkVURURfQlk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19JTlRFUlBSRVRFRF9CWSAgICAgICAgICAgICAgICAgICAgImludGVycHJldGVkLWJ5IgotPC9wcmU+Ci08cD5JbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyCi1pbnRlcnByZXRhdGlvbnMgb2YgYW5vdGhlciBleGlzdGluZyBwaWVjZSAoc3RyaW5nKTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBRy1NSURJLUJBU0UtTk9URTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfTUlESV9CQVNFX05PVEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBR19NSURJX0JBU0VfTk9URSAgICAgICAgICAgICAgICAgICAgIm1pZGktYmFzZS1ub3RlIgotPC9wcmU+Ci08YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm90ZSNOb3RlX2Rlc2lnbmF0aW9uX2luX2FjY29yZGFuY2Vfd2l0aF9vY3RhdmVfbmFtZSIgdGFyZ2V0PSJfdG9wIj5NaWRpIG5vdGUgbnVtYmVyPC9hPjxwPm9mIHRoZSBhdWRpbyB0cmFjay4gVGhpcyBpcyB1c2VmdWwgZm9yIHNhbXBsZSBpbnN0cnVtZW50cyBhbmQgaW4gcGFydGljdWxhcgotZm9yIG11bHRpLXNhbXBsZXMuPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFHLVBSSVZBVEUtREFUQTpDQVBTIj48L2E+PGgzPkdTVF9UQUdfUFJJVkFURV9EQVRBPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQUdfUFJJVkFURV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICJwcml2YXRlLWRhdGEiCi08L3ByZT4KLTxwPkFueSBwcml2YXRlIGRhdGEgdGhhdCBtYXkgYmUgY29udGFpbmVkIGluIHRhZ3MgKHNhbXBsZSkuPC9wPgotPHA+SXQgaXMgcmVwcmVzZW50ZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4gaW4gd2hpY2ggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gY29udGFpbnMgdGhlCi1iaW5hcnkgZGF0YSBhbmQgdGhlIHNhbXBsZSdzIGluZm8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gbWF5IGNvbnRhaW4gYW55Ci1leHRyYSBpbmZvcm1hdGlvbiB0aGF0IGlkZW50aWZpZXMgdGhlIG9yaWdpbiBvciBtZWFuaW5nIG9mIHRoZSBkYXRhLjwvcD4KLTxwPlByaXZhdGUgZnJhbWVzIGluIElEM3YyIHRhZ3MgKCdQUklWJyBmcmFtZXMpIHdpbGwgYmUgcmVwcmVzZW50ZWQKLXVzaW5nIHRoaXMgdGFnLCBpbiB3aGljaCBjYXNlIHRoZSBHc3RTdHJ1Y3R1cmUgd2lsbCBiZSBuYW1lZAotIklEM1ByaXZhdGVGcmFtZSIgYW5kIGNvbnRhaW4gYSBmaWVsZCBuYW1lZCAib3duZXIiIG9mIHR5cGUgc3RyaW5nCi13aGljaCBjb250YWlucyB0aGUgb3duZXItaWRlbnRpZmljYXRpb24gc3RyaW5nIGZyb20gdGhlIHRhZy48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RUYWdTZXR0ZXIuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0VGFnU2V0dGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMDk4ZWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RUYWdTZXR0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0VGFnU2V0dGVyOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGFnU2V0dGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUYWdTZXR0ZXIub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3ByZXJlcXVpc2l0ZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGFnU2V0dGVyLnByZXJlcXVpc2l0ZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJlcmVxdWlzaXRlczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RUYXNrLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0VGFnU2V0dGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VGFnU2V0dGVyLnRvcF9vZl9wYWdlIj48L2E+R3N0VGFnU2V0dGVyPC9zcGFuPjwvaDI+Ci08cD5Hc3RUYWdTZXR0ZXIg4oCUIEVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgYW5kIHJldHJpZXZhbAotICAgICAgICAgICAgICAgICAgICBvZiBtZWRpYSBtZXRhZGF0YTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYWdTZXR0ZXIuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItcmVzZXQtdGFncyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3PCoCgpIj5nc3RfdGFnX3NldHRlcl9yZXNldF90YWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItbWVyZ2UtdGFncyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3PCoCgpIj5nc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnc8KgKCkiPmdzdF90YWdfc2V0dGVyX2FkZF90YWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZSIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWXCoCgpIj5nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZXMiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlc8KgKCkiPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWxpc3QiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdMKgKCkiPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWxpc3QtdmFsdWVzIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzwqAoKSI+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItZ2V0LXRhZy1saXN0IiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0wqAoKSI+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItc2V0LXRhZy1tZXJnZS1tb2RlIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlwqAoKSI+Z3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItZ2V0LXRhZy1tZXJnZS1tb2RlIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlwqAoKSI+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFnU2V0dGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0IiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXJJbnRlcmZhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFnU2V0dGVySW50ZXJmYWNlIj5Hc3RUYWdTZXR0ZXJJbnRlcmZhY2U8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFnU2V0dGVyLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC91bnN0YWJsZS9HVHlwZU1vZHVsZS5odG1sIj5HSW50ZXJmYWNlPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFRhZ1NldHRlcgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhZ1NldHRlci5wcmVyZXF1aXNpdGVzIj48L2E+PGgyPlByZXJlcXVpc2l0ZXM8L2gyPgotPHA+Ci1Hc3RUYWdTZXR0ZXIgcmVxdWlyZXMKLSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYWdTZXR0ZXIuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFnU2V0dGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgb2YgbWVkaWEgbWV0YWRhdGEuPC9wPgotPHA+RWxlbWVudHMgdGhhdCBzdXBwb3J0IGNoYW5naW5nIGEgc3RyZWFtJ3MgbWV0YWRhdGEgd2lsbCBpbXBsZW1lbnQgdGhpcwotaW50ZXJmYWNlLiBFeGFtcGxlcyBvZiBzdWNoIGVsZW1lbnRzIGFyZSAndm9yYmlzZW5jJywgJ3RoZW9yYWVuYycgYW5kCi0naWQzdjJtdXgnLjwvcD4KLTxwPklmIHlvdSBqdXN0IHdhbnQgdG8gcmV0cmlldmUgbWV0YWRhdGEgaW4geW91ciBhcHBsaWNhdGlvbiB0aGVuIGFsbCB5b3UKLW5lZWQgdG8gZG8gaXMgd2F0Y2ggZm9yIHRhZyBtZXNzYWdlcyBvbiB5b3VyIHBpcGVsaW5lJ3MgYnVzLiBUaGlzCi1pbnRlcmZhY2UgaXMgb25seSBmb3Igc2V0dGluZyBtZXRhZGF0YSwgbm90IGZvciBleHRyYWN0aW5nIGl0LiBUbyBzZXQgdGFncwotZnJvbSB0aGUgYXBwbGljYXRpb24sIGZpbmQgdGFnc2V0dGVyIGVsZW1lbnRzIGFuZCBzZXQgdGFncyB1c2luZyBlLmcuCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItbWVyZ2UtdGFncyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3PCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MoKTwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFncyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFnX3NldHRlcl9hZGRfdGFncygpPC9jb2RlPjwvYT4uIEFsc28gY29uc2lkZXIKLXNldHRpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiB0aGF0IGlzIHVzZWQgZm9yIHRhZyBldmVudHMgdGhhdCBhcnJpdmUgYXQgdGhlCi10YWdzZXR0ZXIgZWxlbWVudCAoZGVmYXVsdCBtb2RlIGlzIHRvIGtlZXAgZXhpc3RpbmcgdGFncykuCi1UaGUgYXBwbGljYXRpb24gc2hvdWxkIGRvIHRoYXQgYmVmb3JlIHRoZSBlbGVtZW50IGdvZXMgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUEFVU0VEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfUEFVU0VEPC9jb2RlPjwvYT4uPC9wPgotPHA+RWxlbWVudHMgaW1wbGVtZW50aW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiBpbnRlcmZhY2Ugb2Z0ZW4gaGF2ZSB0byBtZXJnZQotYW55IHRhZ3MgcmVjZWl2ZWQgZnJvbSB1cHN0cmVhbSBhbmQgdGhlIHRhZ3Mgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiB2aWEKLXRoZSBpbnRlcmZhY2UuIFRoaXMgY2FuIGJlIGRvbmUgbGlrZSB0aGlzOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTk8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkdzdFRhZ01lcmdlTW9kZSBtZXJnZV9tb2RlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+Y29uc3Q8L3NwYW4+IEdzdFRhZ0xpc3QgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+YXBwbGljYXRpb25fdGFnczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmNvbnN0PC9zcGFuPiBHc3RUYWdMaXN0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmV2ZW50X3RhZ3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLUdzdFRhZ1NldHRlciA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj50YWdzZXR0ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLUdzdFRhZ0xpc3QgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+cmVzdWx0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gCi10YWdzZXR0ZXIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1RBR19TRVRURVI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmVsZW1lbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gCi1tZXJnZV9tb2RlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWdldC10YWctbWVyZ2UtbW9kZSI+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dGFnc2V0dGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotYXBwbGljYXRpb25fdGFncyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1nZXQtdGFnLWxpc3QiPmdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnRhZ3NldHRlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLWV2ZW50X3RhZ3MgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gKDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+Y29uc3Q8L3NwYW4+IEdzdFRhZ0xpc3QgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiopPC9zcGFuPiBlbGVtZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPmV2ZW50X3RhZ3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAKLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTE9HLU9CSkVDVDpDQVBTIj5HU1RfTE9HX09CSkVDVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnRhZ3NldHRlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDttZXJnaW5nIHRhZ3MsIG1lcmdlIG1vZGUgPSAlZCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gbWVyZ2VfbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTE9HLU9CSkVDVDpDQVBTIj5HU1RfTE9HX09CSkVDVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnRhZ3NldHRlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtldmVudCB0YWdzOiAlJnF1b3Q7PC9zcGFuPiBHU1RfUFRSX0ZPUk1BVDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBldmVudF90YWdzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MT0ctT0JKRUNUOkNBUFMiPkdTVF9MT0dfT0JKRUNUPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dGFnc2V0dGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3NldCAgIHRhZ3M6ICUmcXVvdDs8L3NwYW4+IEdTVF9QVFJfRk9STUFUPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGFwcGxpY2F0aW9uX3RhZ3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gCi1yZXN1bHQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1tZXJnZSI+Z3N0X3RhZ19saXN0X21lcmdlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YXBwbGljYXRpb25fdGFnczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBldmVudF90YWdzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IG1lcmdlX21vZGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxPRy1PQkpFQ1Q6Q0FQUyI+R1NUX0xPR19PQkpFQ1Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj50YWdzZXR0ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7ZmluYWwgdGFnczogJSZxdW90Ozwvc3Bhbj4gR1NUX1BUUl9GT1JNQVQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gcmVzdWx0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYWdTZXR0ZXIuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctc2V0dGVyLXJlc2V0LXRhZ3MiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFnc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlc2V0IHRoZSBpbnRlcm5hbCB0YWdsaXN0LiBFbGVtZW50cyBzaG91bGQgY2FsbCB0aGlzIGZyb20gd2l0aGluIHRoZQotc3RhdGUtY2hhbmdlIGhhbmRsZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItcmVzZXQtdGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0dGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItbWVyZ2UtdGFncyI+PC9hPjxoMz5nc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TWVyZ2VzIHRoZSBnaXZlbiBsaXN0IGludG8gdGhlIHNldHRlcidzIGxpc3QgdXNpbmcgdGhlIGdpdmVuIG1vZGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItbWVyZ2UtdGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXR0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHRhZyBsaXN0IHRvIG1lcmdlIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtb2RlIHRvIG1lcmdlIHdpdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkcyB0aGUgZ2l2ZW4gdGFnIC8gdmFsdWUgcGFpcnMgb24gdGhlIHNldHRlciB1c2luZyB0aGUgZ2l2ZW4gbWVyZ2UgbW9kZS4KLVRoZSBsaXN0IG11c3QgYmUgdGVybWluYXRlZCB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLXNldHRlci1hZGQtdGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXR0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbW9kZSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tb3JlIHRhZyAvIHZhbHVlIHBhaXJzIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbHVlIj48L2E+PGgzPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZHMgdGhlIGdpdmVuIHRhZyAvIEdWYWx1ZSBwYWlyIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXR0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbW9kZSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkdWYWx1ZSB0byBzZXQgZm9yIHRoZSB0YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZXMiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdGFnPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkcyB0aGUgZ2l2ZW4gdGFnIC8gR1ZhbHVlIHBhaXJzIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuCi1UaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0dGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1vZGUgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bW9yZSB0YWcgLyBHVmFsdWUgcGFpcnMgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0Ij48L2E+PGgzPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnRhZzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZhX2xpc3Q8L3NwYW4+IHZhcl9hcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZHMgdGhlIGdpdmVuIHRhZyAvIHZhbHVlIHBhaXJzIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuCi1UaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0dGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1vZGUgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRhZyB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFyX2FyZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgLyB2YWx1ZSBwYWlycyB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWxpc3QtdmFsdWVzIj48L2E+PGgzPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp0YWc8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gdmFyX2FyZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkcyB0aGUgZ2l2ZW4gdGFnIC8gR1ZhbHVlIHBhaXJzIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuCi1UaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWxpc3QtdmFsdWVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtb2RlIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWcgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhcl9hcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGFnIC8gR1ZhbHVlIHBhaXJzIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLXNldHRlci1nZXQtdGFnLWxpc3QiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIGN1cnJlbnQgbGlzdCBvZiB0YWdzIHRoZSBzZXR0ZXIgdXNlcy4gIFRoZSBsaXN0IHNob3VsZCBub3QgYmUKLW1vZGlmaWVkIG9yIGZyZWVkLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgbm90IHRocmVhZC1zYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctc2V0dGVyLWdldC10YWctbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0dGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YWctc2V0dGVyLWdldC10YWctbGlzdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgY3VycmVudCBzbmFwc2hvdCBvZiB0aGUKLXRhZ2xpc3QgdXNlZCBpbiB0aGUgc2V0dGVyIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBub25lIGlzIHVzZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItc2V0LXRhZy1tZXJnZS1tb2RlIj48L2E+PGgzPmdzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+ICpzZXR0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBnaXZlbiBtZXJnZSBtb2RlIHRoYXQgaXMgdXNlZCBmb3IgYWRkaW5nIHRhZ3MgZnJvbSBldmVudHMgdG8gdGFncwotc3BlY2lmaWVkIGJ5IHRoaXMgaW50ZXJmYWNlLiBUaGUgZGVmYXVsdCBpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtS0VFUDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19NRVJHRV9LRUVQPC9zcGFuPjwvYT4sIHdoaWNoIGtlZXBzCi10aGUgdGFncyBzZXQgd2l0aCB0aGlzIGludGVyZmFjZSBhbmQgZGlzY2FyZHMgdGFncyBmcm9tIGV2ZW50cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFnLXNldHRlci1zZXQtdGFnLW1lcmdlLW1vZGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0dGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG1vZGUgd2l0aCB3aGljaCB0YWdzIGFyZSBhZGRlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFnLXNldHRlci1nZXQtdGFnLW1lcmdlLW1vZGUiPjwvYT48aDM+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPgotZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5RdWVyaWVzIHRoZSBtb2RlIGJ5IHdoaWNoIHRhZ3MgaW5zaWRlIHRoZSBzZXR0ZXIgYXJlIG92ZXJ3cml0dGVuIGJ5IHRhZ3MKLWZyb20gZXZlbnRzPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItZ2V0LXRhZy1tZXJnZS1tb2RlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXR0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRhZ1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhZy1zZXR0ZXItZ2V0LXRhZy1tZXJnZS1tb2RlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG1lcmdlIG1vZGUgdXNlZCBpbnNpZGUgdGhlIGVsZW1lbnQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFnU2V0dGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUYWdTZXR0ZXItc3RydWN0Ij48L2E+PGgzPkdzdFRhZ1NldHRlcjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFRhZ1NldHRlciBHc3RUYWdTZXR0ZXI7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUYWdTZXR0ZXJJbnRlcmZhY2UiPjwvYT48aDM+c3RydWN0IEdzdFRhZ1NldHRlckludGVyZmFjZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRhZ1NldHRlckludGVyZmFjZSB7Ci0gIEdUeXBlSW50ZXJmYWNlIGdfaWZhY2U7Ci0KLSAgLyogc2lnbmFscyAqLwotCi0gIC8qIHZpcnR1YWwgdGFibGUgKi8KLX07Ci08L3ByZT4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXJJbnRlcmZhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFnU2V0dGVySW50ZXJmYWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVySW50ZXJmYWNlPC9zcGFuPjwvYT4gaW50ZXJmYWNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRhZ1NldHRlckludGVyZmFjZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFRhc2suaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0VGFzay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGQxZGJhLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0VGFzay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAzNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0VGFzazogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFRhc2suZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFRhc2sub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RUYXNrIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VGFzay50b3Bfb2ZfcGFnZSI+PC9hPkdzdFRhc2s8L3NwYW4+PC9oMj4KLTxwPkdzdFRhc2sg4oCUIEFic3RyYWN0aW9uIG9mIEdTdHJlYW1lciBzdHJlYW1pbmcgdGhyZWFkcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFzay5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza0Z1bmN0aW9uIiB0aXRsZT0iR3N0VGFza0Z1bmN0aW9uwqAoKSI+KkdzdFRhc2tGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1CUk9BRENBU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UQVNLX0JST0FEQ0FTVCgpIj5HU1RfVEFTS19CUk9BRENBU1Q8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLUdFVC1DT05EOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19HRVRfQ09ORCgpIj5HU1RfVEFTS19HRVRfQ09ORDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stR0VULUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9UQVNLX0dFVF9MT0NLKCkiPkdTVF9UQVNLX0dFVF9MT0NLPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1TSUdOQUw6Q0FQUyIgdGl0bGU9IkdTVF9UQVNLX1NJR05BTCgpIj5HU1RfVEFTS19TSUdOQUw8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19TVEFURSgpIj5HU1RfVEFTS19TVEFURTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stV0FJVDpDQVBTIiB0aXRsZT0iR1NUX1RBU0tfV0FJVCgpIj5HU1RfVEFTS19XQUlUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhc2s8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLW5ldyIgdGl0bGU9ImdzdF90YXNrX25ld8KgKCkiPmdzdF90YXNrX25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtbG9jayIgdGl0bGU9ImdzdF90YXNrX3NldF9sb2NrwqAoKSI+Z3N0X3Rhc2tfc2V0X2xvY2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXBvb2wiIHRpdGxlPSJnc3RfdGFza19zZXRfcG9vbMKgKCkiPmdzdF90YXNrX3NldF9wb29sPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stZ2V0LXBvb2wiIHRpdGxlPSJnc3RfdGFza19nZXRfcG9vbMKgKCkiPmdzdF90YXNrX2dldF9wb29sPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tUaHJlYWRGdW5jIiB0aXRsZT0iR3N0VGFza1RocmVhZEZ1bmPCoCgpIj4qR3N0VGFza1RocmVhZEZ1bmM8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LWVudGVyLWNhbGxiYWNrIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrwqAoKSI+Z3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1sZWF2ZS1jYWxsYmFjayIgdGl0bGU9ImdzdF90YXNrX3NldF9sZWF2ZV9jYWxsYmFja8KgKCkiPmdzdF90YXNrX3NldF9sZWF2ZV9jYWxsYmFjazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza1N0YXRlIiB0aXRsZT0iZW51bSBHc3RUYXNrU3RhdGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFza1N0YXRlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1nZXQtc3RhdGUiIHRpdGxlPSJnc3RfdGFza19nZXRfc3RhdGXCoCgpIj5nc3RfdGFza19nZXRfc3RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtc3RhdGUiIHRpdGxlPSJnc3RfdGFza19zZXRfc3RhdGXCoCgpIj5nc3RfdGFza19zZXRfc3RhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1wYXVzZSIgdGl0bGU9ImdzdF90YXNrX3BhdXNlwqAoKSI+Z3N0X3Rhc2tfcGF1c2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdGFydCIgdGl0bGU9ImdzdF90YXNrX3N0YXJ0wqAoKSI+Z3N0X3Rhc2tfc3RhcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdG9wIiB0aXRsZT0iZ3N0X3Rhc2tfc3RvcMKgKCkiPmdzdF90YXNrX3N0b3A8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1qb2luIiB0aXRsZT0iZ3N0X3Rhc2tfam9pbsKgKCkiPmdzdF90YXNrX2pvaW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stY2xlYW51cC1hbGwiIHRpdGxlPSJnc3RfdGFza19jbGVhbnVwX2FsbMKgKCkiPmdzdF90YXNrX2NsZWFudXBfYWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFzay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RUYXNrIj5Hc3RUYXNrPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrU3RhdGUiIHRpdGxlPSJlbnVtIEdzdFRhc2tTdGF0ZSI+R3N0VGFza1N0YXRlPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhc2sub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0VGFzawotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhc2suaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFzay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiBpcyB1c2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBwcm92aWRlIHRoZSBkYXRhIHBhc3NpbmcKLXRocmVhZHMgaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi48L3A+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHdpbGwgdHlwaWNhbGx5IHN0YXJ0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gdG8gcHVzaCBvciBwdWxsIGRhdGEgdG8vZnJvbSB0aGUKLXBlZXIgcGFkcy4gTW9zdCBzb3VyY2UgZWxlbWVudHMgc3RhcnQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiB0byBwdXNoIGRhdGEuIEluIHNvbWUgY2FzZXMKLWEgZGVtdXhlciBlbGVtZW50IGNhbiBzdGFydCBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIHB1bGwgZGF0YSBmcm9tIGEgcGVlciBlbGVtZW50LiBUaGlzCi1pcyB0eXBpY2FsbHkgZG9uZSB3aGVuIHRoZSBkZW11eGVyIGNhbiBwZXJmb3JtIHJhbmRvbSBhY2Nlc3Mgb24gdGhlIHVwc3RyZWFtCi1wZWVyIGVsZW1lbnQgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLjwvcD4KLTxwPkFsdGhvdWdoIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBleGlzdCBvbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBzdGFydC9wYXVzZS9zdG9wIHRhc2tzLCBpdAotbWlnaHQgc29tZXRpbWVzIGJlIG5lZWRlZCB0byBjcmVhdGUgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiBtYW51YWxseSBpZiBpdCBpcyBub3QgcmVsYXRlZCB0bwotYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+Ci08cD5CZWZvcmUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IGNhbiBiZSBydW4sIGl0IG5lZWRzIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhyZWFkcy5odG1sI0dSZWNNdXRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdSZWNNdXRleDwvc3Bhbj48L2E+IHRoYXQgY2FuIGJlIHNldCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1sb2NrIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X2xvY2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3NldF9sb2NrKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGUgdGFzayBjYW4gYmUgc3RhcnRlZCwgcGF1c2VkIGFuZCBzdG9wcGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdGFydCIgdGl0bGU9ImdzdF90YXNrX3N0YXJ0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zdGFydCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stcGF1c2UiIHRpdGxlPSJnc3RfdGFza19wYXVzZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfcGF1c2UoKTwvY29kZT48L2E+Ci1hbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdG9wIiB0aXRsZT0iZ3N0X3Rhc2tfc3RvcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfc3RvcCgpPC9jb2RlPjwvYT4gcmVzcGVjdGl2ZWx5IG9yIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zZXRfc3RhdGUoKTwvY29kZT48L2E+IGZ1bmN0aW9uLjwvcD4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gd2lsbCByZXBlYXRlZGx5IGNhbGwgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza0Z1bmN0aW9uIiB0aXRsZT0iR3N0VGFza0Z1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tGdW5jdGlvbjwvc3Bhbj48L2E+IHdpdGggdGhlIHVzZXIgZGF0YQotdGhhdCB3YXMgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyB0aGUgdGFzayB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stbmV3IiB0aXRsZT0iZ3N0X3Rhc2tfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19uZXcoKTwvY29kZT48L2E+LiBXaGlsZSBjYWxsaW5nCi10aGUgZnVuY3Rpb24gaXQgd2lsbCBhY3F1aXJlIHRoZSBwcm92aWRlZCBsb2NrLiBUaGUgcHJvdmlkZWQgbG9jayBpcyByZWxlYXNlZAotd2hlbiB0aGUgdGFzayBwYXVzZXMgb3Igc3RvcHMuPC9wPgotPHA+U3RvcHBpbmcgYSB0YXNrIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdG9wIiB0aXRsZT0iZ3N0X3Rhc2tfc3RvcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfc3RvcCgpPC9jb2RlPjwvYT4gd2lsbCBub3QgaW1tZWRpYXRlbHkgbWFrZSBzdXJlIHRoZSB0YXNrIGlzCi1ub3QgcnVubmluZyBhbnltb3JlLiBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1qb2luIiB0aXRsZT0iZ3N0X3Rhc2tfam9pbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfam9pbigpPC9jb2RlPjwvYT4gdG8gbWFrZSBzdXJlIHRoZSB0YXNrIGlzIGNvbXBsZXRlbHkKLXN0b3BwZWQgYW5kIHRoZSB0aHJlYWQgaXMgc3RvcHBlZC48L3A+Ci08cD5BZnRlciBjcmVhdGluZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+LCB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3Rfb2JqZWN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPiB0byBmcmVlIGl0cyByZXNvdXJjZXMuIFRoaXMgY2FuCi1vbmx5IGJlIGRvbmUgd2hlbiB0aGUgdGFzayBpcyBub3QgcnVubmluZyBhbnltb3JlLjwvcD4KLTxwPlRhc2sgZnVuY3Rpb25zIGNhbiBzZW5kIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gdG8gc2VuZCBvdXQtb2YtYmFuZCBkYXRhIHRvIHRoZQotYXBwbGljYXRpb24uIFRoZSBhcHBsaWNhdGlvbiBjYW4gcmVjZWl2ZSBtZXNzYWdlcyBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBpbiBpdHMKLW1haW5sb29wLjwvcD4KLTxwPkZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHRoZSB0YXNrIHdpbGwgY29uZmlndXJlIGl0cyBvYmplY3QgbmFtZSBhcyB0aGUgdGhyZWFkCi1uYW1lIG9uIExpbnV4LiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBvYmplY3QgbmFtZSBzaG91bGQgYmUgY29uZmlndXJlZCBiZWZvcmUgdGhlCi10YXNrIGlzIHN0YXJ0ZWQ7IGNoYW5naW5nIHRoZSBvYmplY3QgbmFtZSBhZnRlciB0aGUgdGFzayBoYXMgYmVlbiBzdGFydGVkLCBoYXMKLW5vIGVmZmVjdCBvbiB0aGUgdGhyZWFkIG5hbWUuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYXNrLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUYXNrRnVuY3Rpb24iPjwvYT48aDM+R3N0VGFza0Z1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRhc2tGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXBlYXRlZGx5IGJlIGNhbGxlZCBpbiB0aGUgdGhyZWFkIGNyZWF0ZWQgYnkKLWEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VGFza0Z1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBU0stQlJPQURDQVNUOkNBUFMiPjwvYT48aDM+R1NUX1RBU0tfQlJPQURDQVNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBU0tfQlJPQURDQVNUKHRhc2spICAgICAgICBnX2NvbmRfYnJvYWRjYXN0KEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSkKLTwvcHJlPgotPHA+U2VuZCBhIGJyb2FkY2FzdCBzaWduYWwgdG8gYWxsIHdhaXRpbmcgdGFzayBjb25kczwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1UQVNLLUJST0FEQ0FTVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRhc2sgdG8gYnJvYWRjYXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVEFTSy1HRVQtQ09ORDpDQVBTIj48L2E+PGgzPkdTVF9UQVNLX0dFVF9DT05EKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBU0tfR0VUX0NPTkQodGFzaykgICAgICAgICAoJmFtcDtHU1RfVEFTS19DQVNUKHRhc2spLSZndDtjb25kKQotPC9wcmU+Ci08cD5HZXQgYWNjZXNzIHRvIHRoZSBjb25kIG9mIHRoZSB0YXNrLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1UQVNLLUdFVC1DT05ELnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGFzayB0byBnZXQgdGhlIGNvbmQgb2Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UQVNLLUdFVC1MT0NLOkNBUFMiPjwvYT48aDM+R1NUX1RBU0tfR0VUX0xPQ0soKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFTS19HRVRfTE9DSyh0YXNrKSAgICAgICAgIChHU1RfVEFTS19DQVNUKHRhc2spLSZndDtsb2NrKQotPC9wcmU+Ci08cD5HZXQgYWNjZXNzIHRvIHRoZSB0YXNrIGxvY2suPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVRBU0stR0VULUxPQ0sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UYXNrIHRvIGdldCB0aGUgbG9jayBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBU0stU0lHTkFMOkNBUFMiPjwvYT48aDM+R1NUX1RBU0tfU0lHTkFMKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RBU0tfU0lHTkFMKHRhc2spICAgICAgICAgICBnX2NvbmRfc2lnbmFsKEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSkKLTwvcHJlPgotPHA+U2lnbmFsIHRoZSB0YXNrIGNvbmQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVEFTSy1TSUdOQUwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UYXNrIHRvIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBU0stU1RBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfVEFTS19TVEFURSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UQVNLX1NUQVRFKHRhc2spICAgICAgICAgICAgKEdTVF9UQVNLX0NBU1QodGFzayktJmd0O3N0YXRlKQotPC9wcmU+Ci08cD5HZXQgYWNjZXNzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgdGFzay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVEFTSy1TVEFURS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRhc2sgdG8gZ2V0IHRoZSBzdGF0ZSBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRBU0stV0FJVDpDQVBTIj48L2E+PGgzPkdTVF9UQVNLX1dBSVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVEFTS19XQUlUKHRhc2spICAgICAgICAgICAgIGdfY29uZF93YWl0KEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSwgR1NUX09CSkVDVF9HRVRfTE9DSyAodGFzaykpCi08L3ByZT4KLTxwPldhaXQgZm9yIHRoZSB0YXNrIGNvbmQgdG8gYmUgc2lnbmFsbGVkPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVRBU0stV0FJVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRhc2sgdG8gd2FpdCBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YXNrLW5ldyI+PC9hPjxoMz5nc3RfdGFza19uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYXNrPC9zcGFuPjwvYT7CoCoKLWdzdF90YXNrX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza0Z1bmN0aW9uIiB0aXRsZT0iR3N0VGFza0Z1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IFRhc2sgdGhhdCB3aWxsIHJlcGVhdGVkbHkgY2FsbCB0aGUgcHJvdmlkZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLQotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci0gYXMgYSBwYXJhbWV0ZXIuIFR5cGljYWxseSB0aGUgdGFzayB3aWxsIHJ1biBpbgotYSBuZXcgdGhyZWFkLjwvcD4KLTxwPlRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgY2hhbmdlZCBhZnRlciB0aGUgdGFzayBoYXMgYmVlbiBjcmVhdGVkLiBZb3UKLW11c3QgY3JlYXRlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIGNoYW5nZSB0aGUgZnVuY3Rpb24uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB5ZXQgY3JlYXRlIGFuZCBzdGFydCBhIHRocmVhZC4gVXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc3RhcnQiIHRpdGxlPSJnc3RfdGFza19zdGFydMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfc3RhcnQoKTwvY29kZT48L2E+IG9yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXBhdXNlIiB0aXRsZT0iZ3N0X3Rhc2tfcGF1c2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3BhdXNlKCk8L2NvZGU+PC9hPiB0byBjcmVhdGUgYW5kIHN0YXJ0IHRoZSBHVGhyZWFkLjwvcD4KLTxwPkJlZm9yZSB0aGUgdGFzayBjYW4gYmUgdXNlZCwgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaHJlYWRzLmh0bWwjR1JlY011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R1JlY011dGV4PC9zcGFuPjwvYT4gbXVzdCBiZSBjb25maWd1cmVkIHVzaW5nIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtbG9jayIgdGl0bGU9ImdzdF90YXNrX3NldF9sb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zZXRfbG9jaygpPC9jb2RlPjwvYT4gZnVuY3Rpb24uIFRoaXMgbG9jayB3aWxsIGFsd2F5cyBiZSBhY3F1aXJlZCB3aGlsZQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLSBpcyBjYWxsZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stbmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrRnVuY3Rpb24iIHRpdGxlPSJHc3RUYXNrRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza0Z1bmN0aW9uPC9zcGFuPjwvYT4gdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlVzZXIgZGF0YSB0byBwYXNzIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bm90aWZ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci1pcyBubyBsb25nZXIgbmVlZGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhc2stc2V0LWxvY2siPjwvYT48aDM+Z3N0X3Rhc2tfc2V0X2xvY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFza19zZXRfbG9jayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+ICp0YXNrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaHJlYWRzLmh0bWwjR1JlY011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R1JlY011dGV4PC9zcGFuPjwvYT4gKm11dGV4PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgbXV0ZXggdXNlZCBieSB0aGUgdGFzay4gVGhlIG11dGV4IHdpbGwgYmUgYWNxdWlyZWQgYmVmb3JlCi1jYWxsaW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrRnVuY3Rpb248L3NwYW4+PC9hPi48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1wYXVzZSIgdGl0bGU9ImdzdF90YXNrX3BhdXNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19wYXVzZSgpPC9jb2RlPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc3RhcnQiIHRpdGxlPSJnc3RfdGFza19zdGFydMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfc3RhcnQoKTwvY29kZT48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stc2V0LWxvY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bXV0ZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhyZWFkcy5odG1sI0dSZWNNdXRleCI+PHNwYW4gY2xhc3M9InR5cGUiPkdSZWNNdXRleDwvc3Bhbj48L2E+IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFzay1zZXQtcG9vbCI+PC9hPjxoMz5nc3RfdGFza19zZXRfcG9vbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YXNrX3NldF9wb29sICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9vbDwvY29kZT48L2VtPgotIGFzIHRoZSBuZXcgR3N0VGFza1Bvb2wgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+Ci0uIEFueSBuZXcgc3RyZWFtaW5nIHRocmVhZHMgdGhhdAotd2lsbCBiZSBjcmVhdGVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+Ci0gd2lsbCBub3cgdXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFzay1zZXQtcG9vbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFzay1nZXQtcG9vbCI+PC9hPjxoMz5nc3RfdGFza19nZXRfcG9vbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPsKgKgotZ3N0X3Rhc2tfZ2V0X3Bvb2wgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+IHRoYXQgdGhpcyB0YXNrIHdpbGwgdXNlIGZvciBpdHMgc3RyZWFtaW5nCi10aHJlYWRzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stZ2V0LXBvb2wucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stZ2V0LXBvb2wucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4gdXNlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPgotLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiIgdGl0bGU9ImdzdF9vYmplY3RfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+Ci1hZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGFza1RocmVhZEZ1bmMiPjwvYT48aDM+R3N0VGFza1RocmVhZEZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VGFza1RocmVhZEZ1bmM8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhyZWFkcy5odG1sI0dUaHJlYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVGhyZWFkPC9zcGFuPjwvYT4gKnRocmVhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkN1c3RvbSBHc3RUYXNrIHRocmVhZCBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgaW5zdGFsbGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRhc2tUaHJlYWRGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGhyZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRocmVhZHMuaHRtbCNHVGhyZWFkIj48c3BhbiBjbGFzcz0idHlwZSI+R1RocmVhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFzay1zZXQtZW50ZXItY2FsbGJhY2siPjwvYT48aDM+Z3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tUaHJlYWRGdW5jIiB0aXRsZT0iR3N0VGFza1RocmVhZEZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1RocmVhZEZ1bmM8L3NwYW4+PC9hPiBlbnRlcl9mdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNhbGwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudGVyX2Z1bmM8L2NvZGU+PC9lbT4KLSB3aGVuIHRoZSB0YXNrIGZ1bmN0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+Ci0gaXMgZW50ZXJlZC4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPgotIHdpbGwKLWJlIHBhc3NlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50ZXJfZnVuYzwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bm90aWZ5PC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBjYWxsZWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci0gaXMgbm8KLWxvbmdlciByZWZlcmVuY2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLXNldC1lbnRlci1jYWxsYmFjay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRlcl9mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrVGhyZWFkRnVuYyIgdGl0bGU9IkdzdFRhc2tUaHJlYWRGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tUaHJlYWRGdW5jPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBwYXNzZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudGVyX2Z1bmM8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYWxsZWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci1pcyBubyBsb25nZXIgcmVmZXJlbmNlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFzay1zZXQtbGVhdmUtY2FsbGJhY2siPjwvYT48aDM+Z3N0X3Rhc2tfc2V0X2xlYXZlX2NhbGxiYWNrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3Rhc2tfc2V0X2xlYXZlX2NhbGxiYWNrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tUaHJlYWRGdW5jIiB0aXRsZT0iR3N0VGFza1RocmVhZEZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1RocmVhZEZ1bmM8L3NwYW4+PC9hPiBsZWF2ZV9mdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNhbGwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlYXZlX2Z1bmM8L2NvZGU+PC9lbT4KLSB3aGVuIHRoZSB0YXNrIGZ1bmN0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YXNrPC9jb2RlPjwvZW0+Ci0gaXMgbGVmdC4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPgotIHdpbGwKLWJlIHBhc3NlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGVhdmVfZnVuYzwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bm90aWZ5PC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBjYWxsZWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci0gaXMgbm8KLWxvbmdlciByZWZlcmVuY2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLXNldC1sZWF2ZS1jYWxsYmFjay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sZWF2ZV9mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrVGhyZWFkRnVuYyIgdGl0bGU9IkdzdFRhc2tUaHJlYWRGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tUaHJlYWRGdW5jPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBwYXNzZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlYXZlX2Z1bmM8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYWxsZWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci1pcyBubyBsb25nZXIgcmVmZXJlbmNlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFzay1nZXQtc3RhdGUiPjwvYT48aDM+Z3N0X3Rhc2tfZ2V0X3N0YXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrU3RhdGUiIHRpdGxlPSJlbnVtIEdzdFRhc2tTdGF0ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYXNrU3RhdGU8L3NwYW4+PC9hPgotZ3N0X3Rhc2tfZ2V0X3N0YXRlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0YXNrLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLWdldC1zdGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLWdldC1zdGF0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tTdGF0ZSIgdGl0bGU9ImVudW0gR3N0VGFza1N0YXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1N0YXRlPC9zcGFuPjwvYT4gb2YgdGhlIHRhc2s8L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFzay1zZXQtc3RhdGUiPjwvYT48aDM+Z3N0X3Rhc2tfc2V0X3N0YXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFza19zZXRfc3RhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiAqdGFzazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR3N0VGFza1N0YXRlIiB0aXRsZT0iZW51bSBHc3RUYXNrU3RhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrU3RhdGU8L3NwYW4+PC9hPiBzdGF0ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBzdGF0ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGF0ZTwvY29kZT48L2VtPgotLjwvcD4KLTxwPlRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPgotIG11c3QgaGF2ZSBhIGxvY2sgYXNzb2NpYXRlZCB3aXRoIGl0IHVzaW5nCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1sb2NrIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X2xvY2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3NldF9sb2NrKCk8L2NvZGU+PC9hPiB3aGVuIGdvaW5nIHRvIEdTVF9UQVNLX1NUQVJURUQgb3IgR1NUX1RBU0tfUEFVU0VEIG9yCi10aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stc2V0LXN0YXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5ldyB0YXNrIHN0YXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFzay1zZXQtc3RhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN0YXRlIGNvdWxkIGJlIGNoYW5nZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YXNrLXBhdXNlIj48L2E+PGgzPmdzdF90YXNrX3BhdXNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFza19wYXVzZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+ICp0YXNrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhdXNlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPgotLiBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSBjYWxsZWQgb24gYSB0YXNrIGluIHRoZQotc3RvcHBlZCBzdGF0ZSwgaW4gd2hpY2ggY2FzZSBhIHRocmVhZCB3aWxsIGJlIHN0YXJ0ZWQgYW5kIHdpbGwgcmVtYWluCi1pbiB0aGUgcGF1c2VkIHN0YXRlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdhaXQgZm9yIHRoZSB0YXNrIHRvIGNvbXBsZXRlCi10aGUgcGF1c2VkIHN0YXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLXBhdXNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIHBhdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stcGF1c2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHRhc2sgY291bGQgYmUgcGF1c2VkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YXNrLXN0YXJ0Ij48L2E+PGgzPmdzdF90YXNrX3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFza19zdGFydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+ICp0YXNrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN0YXJ0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGFzazwvY29kZT48L2VtPgotLiBUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT4KLSBtdXN0IGhhdmUgYSBsb2NrIGFzc29jaWF0ZWQgd2l0aCBpdCB1c2luZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtbG9jayIgdGl0bGU9ImdzdF90YXNrX3NldF9sb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zZXRfbG9jaygpPC9jb2RlPjwvYT4gb3IgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFzay1zdGFydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiB0byBzdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLXN0YXJ0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB0YXNrIGNvdWxkIGJlIHN0YXJ0ZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhc2stc3RvcCI+PC9hPjxoMz5nc3RfdGFza19zdG9wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFza19zdG9wICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U3RvcHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT4KLS4gVGhpcyBtZXRob2QgbWVyZWx5IHNjaGVkdWxlcyB0aGUgdGFzayB0byBzdG9wIGFuZAotd2lsbCBub3Qgd2FpdCBmb3IgdGhlIHRhc2sgdG8gaGF2ZSBjb21wbGV0ZWx5IHN0b3BwZWQuIFVzZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1qb2luIiB0aXRsZT0iZ3N0X3Rhc2tfam9pbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rhc2tfam9pbigpPC9jb2RlPjwvYT4gdG8gc3RvcCBhbmQgd2FpdCBmb3IgY29tcGxldGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFzay1zdG9wLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFzazwvc3Bhbj48L2E+IHRvIHN0b3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGFzay1zdG9wLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB0YXNrIGNvdWxkIGJlIHN0b3BwZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhc2stam9pbiI+PC9hPjxoMz5nc3RfdGFza19qb2luwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGFza19qb2luICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gKnRhc2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Sm9pbnMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhc2s8L2NvZGU+PC9lbT4KLS4gQWZ0ZXIgdGhpcyBjYWxsLCBpdCBpcyBzYWZlIHRvIHVucmVmIHRoZSB0YXNrCi1hbmQgY2xlYW4gdXAgdGhlIGxvY2sgc2V0IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtbG9jayIgdGl0bGU9ImdzdF90YXNrX3NldF9sb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19zZXRfbG9jaygpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhlIHRhc2sgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN0b3BwZWQgd2l0aCB0aGlzIGNhbGwuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgdGFzayBmdW5jdGlvbiBhcyB0aGlzCi13b3VsZCBjYXVzZSBhIGRlYWRsb2NrLiBUaGUgZnVuY3Rpb24gd2lsbCBkZXRlY3QgdGhpcyBhbmQgcHJpbnQgYQotZ193YXJuaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLWpvaW4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrPC9zcGFuPjwvYT4gdG8gam9pbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLWpvaW4ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHRhc2sgY291bGQgYmUgam9pbmVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YXNrLWNsZWFudXAtYWxsIj48L2E+PGgzPmdzdF90YXNrX2NsZWFudXBfYWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3Rhc2tfY2xlYW51cF9hbGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V2FpdCBmb3IgYWxsIHRhc2tzIHRvIGJlIHN0b3BwZWQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW50ZXJuYWxseQotdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwIG9mIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBpbiB0ZXN0IHN1aXRlcy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYXNrLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUYXNrLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VGFzazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRhc2sgewotICBHc3RUYXNrU3RhdGUgICAgIHN0YXRlOwotICBHQ29uZCAgICAgICAgICAgIGNvbmQ7Ci0KLSAgR1JlY011dGV4ICAgICAgICpsb2NrOwotCi0gIEdzdFRhc2tGdW5jdGlvbiAgZnVuYzsKLSAgZ3BvaW50ZXIgICAgICAgICB1c2VyX2RhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5ICAgbm90aWZ5OwotCi0gIGdib29sZWFuICAgICAgICAgcnVubmluZzsKLX07Ci08L3ByZT4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiBvYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VGFzay5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrU3RhdGUiIHRpdGxlPSJlbnVtIEdzdFRhc2tTdGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tTdGF0ZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrLXN0cnVjdC5zdGF0ZSI+PC9hPnN0YXRlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RhdGUgb2YgdGhlIHRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaHJlYWRzLmh0bWwjR0NvbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQ29uZDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrLXN0cnVjdC5jb25kIj48L2E+Y29uZDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dXNlZCB0byBwYXVzZS9yZXN1bWUgdGhlIHRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaHJlYWRzLmh0bWwjR1JlY011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R1JlY011dGV4PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrLXN0cnVjdC5sb2NrIj48L2E+bG9jazwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGxvY2sgdGFrZW4gd2hlbiBpdGVyYXRpbmcgdGhlIHRhc2sgZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFzay1zdHJ1Y3QuZnVuYyI+PC9hPmZ1bmM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmdW5jdGlvbiBleGVjdXRlZCBieSB0aGlzIHRhc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFzay1zdHJ1Y3QudXNlci1kYXRhIj48L2E+dXNlcl9kYXRhPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD51c2VyX2RhdGEgcGFzc2VkIHRvIHRoZSB0YXNrIGZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFRhc2stc3RydWN0Lm5vdGlmeSI+PC9hPm5vdGlmeTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+R0Rlc3Ryb3lOb3RpZnkgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrLXN0cnVjdC5ydW5uaW5nIj48L2E+cnVubmluZzwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+YSBmbGFnIGluZGljYXRpbmcgdGhhdCB0aGUgdGFzayBpcyBydW5uaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUYXNrU3RhdGUiPjwvYT48aDM+ZW51bSBHc3RUYXNrU3RhdGU8L2gzPgotPHA+VGhlIGRpZmZlcmVudCBzdGF0ZXMgYSB0YXNrIGNhbiBiZSBpbjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRhc2tTdGF0ZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UQVNLLVNUQVJURUQ6Q0FQUyI+PC9hPkdTVF9UQVNLX1NUQVJURUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHRhc2sgaXMgc3RhcnRlZCBhbmQgcnVubmluZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVEFTSy1TVE9QUEVEOkNBUFMiPjwvYT5HU1RfVEFTS19TVE9QUEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSB0YXNrIGlzIHN0b3BwZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRBU0stUEFVU0VEOkNBUFMiPjwvYT5HU1RfVEFTS19QQVVTRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHRhc2sgaXMgcGF1c2VkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhc2suc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFRhc2tQb29sLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFRhc2tQb29sLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZTQxYzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RUYXNrUG9vbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RUYXNrUG9vbDogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUYXNrUG9vbC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGFza1Bvb2wub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFRhc2suaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFRvYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdFRhc2tQb29sIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VGFza1Bvb2wudG9wX29mX3BhZ2UiPjwvYT5Hc3RUYXNrUG9vbDwvc3Bhbj48L2gyPgotPHA+R3N0VGFza1Bvb2wg4oCUIFBvb2wgb2YgR1N0cmVhbWVyIHN0cmVhbWluZyB0aHJlYWRzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhc2tQb29sLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xGdW5jdGlvbiIgdGl0bGU9IkdzdFRhc2tQb29sRnVuY3Rpb27CoCgpIj4qR3N0VGFza1Bvb2xGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLW5ldyIgdGl0bGU9ImdzdF90YXNrX3Bvb2xfbmV3wqAoKSI+Z3N0X3Rhc2tfcG9vbF9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtcHJlcGFyZSIgdGl0bGU9ImdzdF90YXNrX3Bvb2xfcHJlcGFyZcKgKCkiPmdzdF90YXNrX3Bvb2xfcHJlcGFyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXB1c2giIHRpdGxlPSJnc3RfdGFza19wb29sX3B1c2jCoCgpIj5nc3RfdGFza19wb29sX3B1c2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtam9pbiIgdGl0bGU9ImdzdF90YXNrX3Bvb2xfam9pbsKgKCkiPmdzdF90YXNrX3Bvb2xfam9pbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1jbGVhbnVwIiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9jbGVhbnVwwqAoKSI+Z3N0X3Rhc2tfcG9vbF9jbGVhbnVwPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGFza1Bvb2wub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RUYXNrUG9vbCI+R3N0VGFza1Bvb2w8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFza1Bvb2xDbGFzcyI+R3N0VGFza1Bvb2xDbGFzczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYXNrUG9vbC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RUYXNrUG9vbAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhc2tQb29sLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRhc2tQb29sLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgb2JqZWN0IHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIGZvciBjcmVhdGluZyB0aHJlYWRzLiBUaGUgZGVmYXVsdAotaW1wbGVtZW50YXRpb24gdXNlcyBhIHJlZ3VsYXIgR1RocmVhZFBvb2wgdG8gc3RhcnQgdGFza3MuPC9wPgotPHA+U3ViY2xhc3NlcyBjYW4gYmUgbWFkZSB0byBjcmVhdGUgY3VzdG9tIHRocmVhZHMuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYXNrUG9vbC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGFza1Bvb2xGdW5jdGlvbiI+PC9hPjxoMz5Hc3RUYXNrUG9vbEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRhc2tQb29sRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj4gKnVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UYXNrIGZ1bmN0aW9uLCBzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1wdXNoIiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9wdXNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGFza19wb29sX3B1c2goKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRhc2tQb29sRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBmb3IgdGhlIHRhc2sgZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YXNrLXBvb2wtbmV3Ij48L2E+PGgzPmdzdF90YXNrX3Bvb2xfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+wqAqCi1nc3RfdGFza19wb29sX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgZGVmYXVsdCB0YXNrIHBvb2wuIFRoZSBkZWZhdWx0IHRhc2sgcG9vbCB3aWxsIHVzZSBhIHJlZ3VsYXIKLUdUaHJlYWRQb29sIGZvciB0aHJlYWRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLXBvb2wtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sPC9zcGFuPjwvYT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YXNrLXBvb2wtcHJlcGFyZSI+PC9hPjxoMz5nc3RfdGFza19wb29sX3ByZXBhcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFza19wb29sX3ByZXBhcmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlcGFyZSB0aGUgdGFza3Bvb2wgZm9yIGFjY2VwdGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXB1c2giIHRpdGxlPSJnc3RfdGFza19wb29sX3B1c2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3Bvb2xfcHVzaCgpPC9jb2RlPjwvYT4gb3BlcmF0aW9ucy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLXBvb2wtcHJlcGFyZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIGVycm9yIHJldHVybiBsb2NhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGFzay1wb29sLXB1c2giPjwvYT48aDM+Z3N0X3Rhc2tfcG9vbF9wdXNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci1nc3RfdGFza19wb29sX3B1c2ggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sRnVuY3Rpb24iIHRpdGxlPSJHc3RUYXNrUG9vbEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2tQb29sRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TdGFydCB0aGUgZXhlY3V0aW9uIG9mIGEgbmV3IHRocmVhZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb29sPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stcG9vbC1wdXNoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGZ1bmN0aW9uIHRvIGNhbGwuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCB1bnRpbCBmaXJzdCBjYWxsZWQuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgYXN5bmM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gZGF0YSB0byBwYXNzIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnJldHVybiBsb2NhdGlvbiBmb3IgYW4gZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10YXNrLXBvb2wtcHVzaC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgcG9pbnRlciB0aGF0IHNob3VsZCBiZSB1c2VkCi1mb3IgdGhlIGdzdF90YXNrX3Bvb2xfam9pbiBmdW5jdGlvbi4gVGhpcyBwb2ludGVyIGNhbiBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHlvdQotbXVzdCBjaGVjayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT4KLXRvIGRldGVjdCBlcnJvcnMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRhc2stcG9vbC1qb2luIj48L2E+PGgzPmdzdF90YXNrX3Bvb2xfam9pbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90YXNrX3Bvb2xfam9pbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+ICpwb29sPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Sm9pbiBhIHRhc2sgYW5kL29yIHJldHVybiBpdCB0byB0aGUgcG9vbC4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+Ci0gaXMgdGhlIGlkIG9idGFpbmVkIGZyb20gCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXB1c2giIHRpdGxlPSJnc3RfdGFza19wb29sX3B1c2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90YXNrX3Bvb2xfcHVzaCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stcG9vbC1qb2luLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGlkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10YXNrLXBvb2wtY2xlYW51cCI+PC9hPjxoMz5nc3RfdGFza19wb29sX2NsZWFudXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGFza19wb29sX2NsZWFudXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPiAqcG9vbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5XYWl0IGZvciBhbGwgdGFza3MgdG8gYmUgc3RvcHBlZC4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbnRlcm5hbGx5Ci10byBlbnN1cmUgcHJvcGVyIGNsZWFudXAgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGluIHRlc3Qgc3VpdGVzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRhc2stcG9vbC1jbGVhbnVwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2w8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYXNrUG9vbC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGFza1Bvb2wtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RUYXNrUG9vbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRhc2tQb29sOzwvcHJlPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYXNrUG9vbDwvc3Bhbj48L2E+IG9iamVjdC48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRhc2tQb29sQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdFRhc2tQb29sQ2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RUYXNrUG9vbENsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIHZvaWQgICAgICAoKnByZXBhcmUpICAoR3N0VGFza1Bvb2wgKnBvb2wsIEdFcnJvciAqKmVycm9yKTsKLSAgdm9pZCAgICAgICgqY2xlYW51cCkgIChHc3RUYXNrUG9vbCAqcG9vbCk7Ci0KLSAgZ3BvaW50ZXIgICgqcHVzaCkgICAgIChHc3RUYXNrUG9vbCAqcG9vbCwgR3N0VGFza1Bvb2xGdW5jdGlvbiBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Vycm9yICoqZXJyb3IpOwotICB2b2lkICAgICAgKCpqb2luKSAgICAgKEdzdFRhc2tQb29sICpwb29sLCBncG9pbnRlciBpZCk7Ci19OwotPC9wcmU+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RUYXNrUG9vbENsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFza1Bvb2xDbGFzczwvc3Bhbj48L2E+IG9iamVjdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUYXNrUG9vbENsYXNzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUYXNrUG9vbENsYXNzLnByZXBhcmUiPjwvYT5wcmVwYXJlPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5wcmVwYXJlIHRoZSB0aHJlYWRwb29sPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFza1Bvb2xDbGFzcy5jbGVhbnVwIj48L2E+Y2xlYW51cDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+bWFrZSBzdXJlIGFsbCB0aHJlYWRzIGFyZSBzdG9wcGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFza1Bvb2xDbGFzcy5wdXNoIj48L2E+cHVzaDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+c3RhcnQgYSBuZXcgdGhyZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VGFza1Bvb2xDbGFzcy5qb2luIj48L2E+am9pbjwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+am9pbiBhIHRocmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUYXNrUG9vbC5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhc2s8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0VG9jLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFRvYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjcyNTg1Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0VG9jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQ3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RUb2M6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUb2NTZXR0ZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VG9jLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUb2Mub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0VG9jIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VG9jLnRvcF9vZl9wYWdlIj48L2E+R3N0VG9jPC9zcGFuPjwvaDI+Ci08cD5Hc3RUb2Mg4oCUIEdlbmVyaWMgdGFibGUgb2YgY29udGVudHMgc3VwcG9ydDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUb2MuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRvYzwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLW5ldyIgdGl0bGU9ImdzdF90b2NfbmV3wqAoKSI+Z3N0X3RvY19uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLXJlZiIgdGl0bGU9ImdzdF90b2NfcmVmKCkiPmdzdF90b2NfcmVmPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtdW5yZWYiIHRpdGxlPSJnc3RfdG9jX3VucmVmKCkiPmdzdF90b2NfdW5yZWY8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1jb3B5IiB0aXRsZT0iZ3N0X3RvY19jb3B5KCkiPmdzdF90b2NfY29weTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfdG9jX21ha2Vfd3JpdGFibGUoKSI+Z3N0X3RvY19tYWtlX3dyaXRhYmxlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NTY29wZSIgdGl0bGU9ImVudW0gR3N0VG9jU2NvcGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VG9jU2NvcGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1nZXQtc2NvcGUiIHRpdGxlPSJnc3RfdG9jX2dldF9zY29wZcKgKCkiPmdzdF90b2NfZ2V0X3Njb3BlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZ2V0LWVudHJpZXMiIHRpdGxlPSJnc3RfdG9jX2dldF9lbnRyaWVzwqAoKSI+Z3N0X3RvY19nZXRfZW50cmllczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtYXBwZW5kLWVudHJ5IiB0aXRsZT0iZ3N0X3RvY19hcHBlbmRfZW50cnnCoCgpIj5nc3RfdG9jX2FwcGVuZF9lbnRyeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1nZXQtdGFncyIgdGl0bGU9ImdzdF90b2NfZ2V0X3RhZ3PCoCgpIj5nc3RfdG9jX2dldF90YWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1tZXJnZS10YWdzIiB0aXRsZT0iZ3N0X3RvY19tZXJnZV90YWdzwqAoKSI+Z3N0X3RvY19tZXJnZV90YWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1zZXQtdGFncyIgdGl0bGU9ImdzdF90b2Nfc2V0X3RhZ3PCoCgpIj5nc3RfdG9jX3NldF90YWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1kdW1wIiB0aXRsZT0iZ3N0X3RvY19kdW1wwqAoKSI+Z3N0X3RvY19kdW1wPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktbmV3IiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9uZXfCoCgpIj5nc3RfdG9jX2VudHJ5X25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktcmVmIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9yZWYoKSI+Z3N0X3RvY19lbnRyeV9yZWY8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS11bnJlZiIgdGl0bGU9ImdzdF90b2NfZW50cnlfdW5yZWYoKSI+Z3N0X3RvY19lbnRyeV91bnJlZjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWNvcHkiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2NvcHkoKSI+Z3N0X3RvY19lbnRyeV9jb3B5PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF90b2NfZW50cnlfbWFrZV93cml0YWJsZSgpIj5nc3RfdG9jX2VudHJ5X21ha2Vfd3JpdGFibGU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZmluZC1lbnRyeSIgdGl0bGU9ImdzdF90b2NfZmluZF9lbnRyecKgKCkiPmdzdF90b2NfZmluZF9lbnRyeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUb2M8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1nZXQtdG9jIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9nZXRfdG9jwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfdG9jPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1nZXQtdWlkIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9nZXRfdWlkwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfdWlkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXBhcmVudCIgdGl0bGU9ImdzdF90b2NfZW50cnlfZ2V0X3BhcmVudMKgKCkiPmdzdF90b2NfZW50cnlfZ2V0X3BhcmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWdldC1zdWItZW50cmllcyIgdGl0bGU9ImdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVzwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWFwcGVuZC1zdWItZW50cnkiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnnCoCgpIj5nc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LWxvb3AiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2dldF9sb29wwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfbG9vcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktc2V0LWxvb3AiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X3NldF9sb29wwqAoKSI+Z3N0X3RvY19lbnRyeV9zZXRfbG9vcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1nZXQtc3RhcnQtc3RvcC10aW1lcyIgdGl0bGU9ImdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXPCoCgpIj5nc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1zZXQtc3RhcnQtc3RvcC10aW1lcyIgdGl0bGU9ImdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXPCoCgpIj5nc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wX3RpbWVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWdldC10YWdzIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9nZXRfdGFnc8KgKCkiPmdzdF90b2NfZW50cnlfZ2V0X3RhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LW1lcmdlLXRhZ3MiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X21lcmdlX3RhZ3PCoCgpIj5nc3RfdG9jX2VudHJ5X21lcmdlX3RhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LXNldC10YWdzIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9zZXRfdGFnc8KgKCkiPmdzdF90b2NfZW50cnlfc2V0X3RhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LXR5cGUtZ2V0LW5pY2siIHRpdGxlPSJnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X25pY2vCoCgpIj5nc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X25pY2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnlUeXBlIiB0aXRsZT0iZW51bSBHc3RUb2NFbnRyeVR5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VG9jRW50cnlUeXBlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LWVudHJ5LXR5cGUiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2dldF9lbnRyeV90eXBlwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfZW50cnlfdHlwZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1pcy1hbHRlcm5hdGl2ZSIgdGl0bGU9ImdzdF90b2NfZW50cnlfaXNfYWx0ZXJuYXRpdmXCoCgpIj5nc3RfdG9jX2VudHJ5X2lzX2FsdGVybmF0aXZlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWlzLXNlcXVlbmNlIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZcKgKCkiPmdzdF90b2NfZW50cnlfaXNfc2VxdWVuY2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHU1QtVE9DLUVOVFJZLVRZUEUtSVMtQUxURVJOQVRJVkU6Q0FQUyIgdGl0bGU9IkdTVF9UT0NfRU5UUllfVFlQRV9JU19BTFRFUk5BVElWRSgpIj5HU1RfVE9DX0VOVFJZX1RZUEVfSVNfQUxURVJOQVRJVkU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR1NULVRPQy1FTlRSWS1UWVBFLUlTLVNFUVVFTkNFOkNBUFMiIHRpdGxlPSJHU1RfVE9DX0VOVFJZX1RZUEVfSVNfU0VRVUVOQ0UoKSI+R1NUX1RPQ19FTlRSWV9UWVBFX0lTX1NFUVVFTkNFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFRvY0VudHJ5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VG9jLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2Mtc3RydWN0IiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jU2NvcGUiIHRpdGxlPSJlbnVtIEdzdFRvY1Njb3BlIj5Hc3RUb2NTY29wZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnktc3RydWN0IiB0aXRsZT0iR3N0VG9jRW50cnkiPkdzdFRvY0VudHJ5PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0VG9jRW50cnlUeXBlIj5Hc3RUb2NFbnRyeVR5cGU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jTG9vcFR5cGUiIHRpdGxlPSJlbnVtIEdzdFRvY0xvb3BUeXBlIj5Hc3RUb2NMb29wVHlwZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR1NULVRPQy1SRVBFQVQtQ09VTlQtSU5GSU5JVEU6Q0FQUyIgdGl0bGU9IkdTVF9UT0NfUkVQRUFUX0NPVU5UX0lORklOSVRFIj5HU1RfVE9DX1JFUEVBVF9DT1VOVF9JTkZJTklURTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUb2Mub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtQm94ZWQtVHlwZXMuaHRtbCI+R0JveGVkPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IEdzdFRvYwotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFRvY0VudHJ5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VG9jLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRvYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gY3JlYXRlL2ZyZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gc3RydWN0dXJlcy4KLUFsc28gdGhleSBhcmUgdXNlZCB0byBjb252ZXJ0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IGludG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gYW5kIHZpY2UgdmVyc2EuPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gbGV0cyB5b3UgdG8gaW5mb3JtIG90aGVyIGVsZW1lbnRzIGluIHBpcGVsaW5lIG9yIGFwcGxpY2F0aW9uIHRoYXQgcGxheWluZwotc291cmNlIGhhcyBzb21lIGtpbmQgb2YgdGFibGUgb2YgY29udGVudHMgKFRPQykuIFRoZXNlIG1heSBiZSBjaGFwdGVycywgZWRpdGlvbnMsCi1hbmdsZXMgb3Igb3RoZXIgdHlwZXMuIEZvciBleGFtcGxlOiBEVkQgY2hhcHRlcnMsIE1hdHJvc2thIGNoYXB0ZXJzIG9yIGN1ZSBzaGVldAotVE9DLiBTdWNoIFRPQyB3aWxsIGJlIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHRvIGRpc3BsYXkgaW5zdGVhZCBvZiBqdXN0IGEKLXBsYXlsaXN0LjwvcD4KLTxwPlVzaW5nIFRPQyBpcyB2ZXJ5IGVhc3kuIEZpcnN0bHksIGNyZWF0ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUgd2hpY2ggcmVwcmVzZW50cyByb290Ci1jb250ZW50cyBvZiB0aGUgc291cmNlLiBZb3UgY2FuIGFsc28gYXR0YWNoIFRPQy1zcGVjaWZpYyB0YWdzIHRvIGl0LiBUaGVuIGZpbGwKLWl0IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiBlbnRyaWVzIGJ5IGFwcGVuZGluZyB0aGVtIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiB1c2luZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtYXBwZW5kLWVudHJ5IiB0aXRsZT0iZ3N0X3RvY19hcHBlbmRfZW50cnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90b2NfYXBwZW5kX2VudHJ5KCk8L2NvZGU+PC9hPiwgYW5kIGFwcGVuZGluZyBzdWJlbnRyaWVzIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiB1c2luZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktYXBwZW5kLXN1Yi1lbnRyeSIgdGl0bGU9ImdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RvY19lbnRyeV9hcHBlbmRfc3ViX2VudHJ5KCk8L2NvZGU+PC9hPi48L3A+Ci08cD5Ob3RlIHRoYXQgcm9vdCBsZXZlbCBvZiB0aGUgVE9DIGNhbiBjb250YWluIG9ubHkgZWl0aGVyIGVkaXRpb25zIG9yIGNoYXB0ZXJzLiBZb3UKLXNob3VsZCBub3QgbWl4IHRoZW0gdG9nZXRoZXIgYXQgdGhlIHNhbWUgbGV2ZWwuIE90aGVyd2lzZSB5b3Ugd2lsbCBnZXQgc2VyaWFsaXphdGlvbgotL2Rlc2VyaWFsaXphdGlvbiBlcnJvcnMuIE1ha2Ugc3VyZSB0aGF0IG5vIG9uZSBvZiB0aGUgZW50cmllcyBoYXMgbmVnYXRpdmUgc3RhcnQgYW5kCi0gc3RvcCB2YWx1ZXMuPC9wPgotPHA+VXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctdG9jIiB0aXRsZT0iZ3N0X2V2ZW50X25ld190b2PCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9uZXdfdG9jKCk8L2NvZGU+PC9hPiB0byBjcmVhdGUgYSBuZXcgVE9DIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LCBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXRvYyIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV90b2PCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9wYXJzZV90b2MoKTwvY29kZT48L2E+IHRvCi1wYXJzZSByZWNlaXZlZCBUT0MgZXZlbnQuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXRvYy1zZWxlY3QiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3RvY19zZWxlY3TCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ldmVudF9uZXdfdG9jX3NlbGVjdCgpPC9jb2RlPjwvYT4gdG8gY3JlYXRlIGEgbmV3IFRPQyBzZWxlY3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4sCi1hbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXRvYy1zZWxlY3QiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfdG9jX3NlbGVjdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3QoKTwvY29kZT48L2E+IHRvIHBhcnNlIHJlY2VpdmVkIFRPQyBzZWxlY3QgZXZlbnQuIFRoZSBzYW1lIHJ1bGUgZm9yCi10aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT46IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXRvYyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld190b2PCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXNzYWdlX25ld190b2MoKTwvY29kZT48L2E+IHRvIGNyZWF0ZSBuZXcgVE9DIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LCBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtdG9jIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfdG9jwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWVzc2FnZV9wYXJzZV90b2MoKTwvY29kZT48L2E+IHRvIHBhcnNlIHJlY2VpdmVkIFRPQyBtZXNzYWdlLjwvcD4KLTxwPlRPQ3MgY2FuIGhhdmUgZ2xvYmFsIHNjb3BlIG9yIGN1cnJlbnQgc2NvcGUuIEdsb2JhbCBzY29wZSBUT0NzIGNvbnRhaW4KLWFsbCBlbnRyaWVzIHRoYXQgY2FuIHBvc3NpYmx5IGJlIHNlbGVjdGVkIHVzaW5nIGEgdG9jIHNlbGVjdCBldmVudCwgYW5kCi1hcmUgd2hhdCBhbiBhcHBsaWNhdGlvbiBpcyB1c3VhbGx5IGludGVyZXN0ZWQgaW4uIFRPQ3Mgd2l0aCBjdXJyZW50IHNjb3BlCi1vbmx5IGNvbnRhaW4gdGhlIHBhcnRzIG9mIHRoZSBUT0MgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZC9wbGF5aW5nCi1zdHJlYW07IHRoZSBjdXJyZW50IHNjb3BlIFRPQyBpcyB1c2VkIGJ5IGRvd25zdHJlYW0gZWxlbWVudHMgc3VjaCBhcyBtdXhlcnMKLXRvIHdyaXRlIGNvcnJlY3QgVE9DIGVudHJpZXMgd2hlbiB0cmFuc2NvZGluZyBmaWxlcywgZm9yIGV4YW1wbGUuIFdoZW4KLXBsYXlpbmcgYSBEVkQsIHRoZSBnbG9iYWwgVE9DIHdvdWxkIGNvbnRhaW4gYSBoaWVyYXJjaHkgb2YgYWxsIHRpdGxlcywKLWNoYXB0ZXJzIGFuZCBhbmdsZXMsIGZvciBleGFtcGxlLCB3aGlsZSB0aGUgY3VycmVudCBUT0Mgd291bGQgb25seSBjb250YWluCi10aGUgY2hhcHRlcnMgZm9yIHRoZSBjdXJyZW50bHkgcGxheWluZyB0aXRsZSBpZiBwbGF5YmFjayBvZiBhIHNwZWNpZmljCi10aXRsZSB3YXMgcmVxdWVzdGVkLjwvcD4KLTxwPkFwcGxpY2F0aW9ucyBhbmQgcGx1Z2lucyBzaG91bGQgbm90IHJlbHkgb24gVE9DcyBoYXZpbmcgYSBjZXJ0YWluIGtpbmQgb2YKLXN0cnVjdHVyZSwgYnV0IHNob3VsZCBhbGxvdyBmb3IgZGlmZmVyZW50IGFsdGVybmF0aXZlcy4gRm9yIGV4YW1wbGUsIGEKLXNpbXBsZSBDVUUgc2hlZXQgZW1iZWRkZWQgaW4gYSBmaWxlIG1heSBiZSBwcmVzZW50ZWQgYXMgYSBmbGF0IGxpc3Qgb2YKLXRyYWNrIGVudHJpZXMsIG9yIGNvdWxkIGhhdmUgYSB0b3AtbGV2ZWwgZWRpdGlvbiBub2RlIChvciBzb21lIG90aGVyCi1hbHRlcm5hdGl2ZSB0eXBlIGVudHJ5KSB3aXRoIHRyYWNrIGVudHJpZXMgdW5kZXJuZWF0aCB0aGF0IG5vZGU7IG9yIGV2ZW4KLW11bHRpcGxlIHRvcC1sZXZlbCBlZGl0aW9uIG5vZGVzIChvciBzb21lIG90aGVyIGFsdGVybmF0aXZlIHR5cGUgZW50cmllcykKLWVhY2ggd2l0aCB0cmFjayBlbnRyaWVzIHVuZGVybmVhdGgsIGluIGNhc2UgdGhlIHNvdXJjZSBmaWxlIGhhcyBleHRyYWN0ZWQKLWEgdHJhY2sgbGlzdGluZyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzKS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRvYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1uZXciPjwvYT48aDM+Z3N0X3RvY19uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VG9jPC9zcGFuPjwvYT7CoCoKLWdzdF90b2NfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY1Njb3BlIiB0aXRsZT0iZW51bSBHc3RUb2NTY29wZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY1Njb3BlPC9zcGFuPjwvYT4gc2NvcGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2NvcGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zY29wZSBvZiB0aGlzIFRPQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gbmV3bHkgYWxsb2NhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IHN0cnVjdHVyZSwgZnJlZSBpdAotd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy11bnJlZiIgdGl0bGU9ImdzdF90b2NfdW5yZWYoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdG9jX3VucmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1yZWYiPjwvYT48aDM+Z3N0X3RvY19yZWYoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfdG9jX3JlZih0b2MpICAgICAgICAgICAgKEdzdFRvYyopZ3N0X21pbmlfb2JqZWN0X3JlZihHU1RfTUlOSV9PQkpFQ1RfQ0FTVCh0b2MpKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtdW5yZWYiPjwvYT48aDM+Z3N0X3RvY191bnJlZigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF90b2NfdW5yZWYodG9jKSAgICAgICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYoR1NUX01JTklfT0JKRUNUX0NBU1QodG9jKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWNvcHkiPjwvYT48aDM+Z3N0X3RvY19jb3B5KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgZ3N0X3RvY19jb3B5KHRvYykgICAgICAgICAgIChHc3RUb2MqKWdzdF9taW5pX29iamVjdF9jb3B5KEdTVF9NSU5JX09CSkVDVF9DQVNUKHRvYykpCi08L3ByZT4KLTxwPkNvcHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gd2l0aCBhbGwgc3ViZW50cmllcyAoZGVlcCBjb3B5KS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRvYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IHRvIGNvcHkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1jb3B5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gbmV3bHkgYWxsb2NhdGVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IGluIGNhc2Ugb2Ygc3VjY2VzcywKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBvdGhlcndpc2U7IGZyZWUgaXQgd2hlbiBkb25lIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtdW5yZWYiIHRpdGxlPSJnc3RfdG9jX3VucmVmKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RvY191bnJlZigpPC9jb2RlPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF90b2NfbWFrZV93cml0YWJsZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF90b2NfbWFrZV93cml0YWJsZSh0b2MpICAoR3N0VG9jKilnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZShHU1RfTUlOSV9PQkpFQ1RfQ0FTVCh0b2MpKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtZ2V0LXNjb3BlIj48L2E+PGgzPmdzdF90b2NfZ2V0X3Njb3BlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY1Njb3BlIiB0aXRsZT0iZW51bSBHc3RUb2NTY29wZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUb2NTY29wZTwvc3Bhbj48L2E+Ci1nc3RfdG9jX2dldF9zY29wZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+ICp0b2M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1nZXQtc2NvcGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRvYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWdldC1zY29wZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNjb3BlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50b2M8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWdldC1lbnRyaWVzIj48L2E+PGgzPmdzdF90b2NfZ2V0X2VudHJpZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3RvY19nZXRfZW50cmllcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+ICp0b2M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgbGlzdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50b2M8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWdldC1lbnRyaWVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50b2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1nZXQtZW50cmllcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuVG9jRW50cnldPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWFwcGVuZC1lbnRyeSI+PC9hPjxoMz5nc3RfdG9jX2FwcGVuZF9lbnRyecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90b2NfYXBwZW5kX2VudHJ5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gKnRvYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXBwZW5kcyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dG9jPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1hcHBlbmQtZW50cnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dG9jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWdldC10YWdzIj48L2E+PGgzPmdzdF90b2NfZ2V0X3RhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF90b2NfZ2V0X3RhZ3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiAqdG9jPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHRhZ3MgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50b2M8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWdldC10YWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50b2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1nZXQtdGFncy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLW1lcmdlLXRhZ3MiPjwvYT48aDM+Z3N0X3RvY19tZXJnZV90YWdzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RvY19tZXJnZV90YWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gKnRvYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICp0YWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TWVyZ2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZ3M8L2NvZGU+PC9lbT4KLSBpbnRvIHRoZSBleGlzdGluZyB0YWdzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50b2M8L2NvZGU+PC9lbT4KLSB1c2luZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9kZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtbWVyZ2UtdGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50b2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLXNldC10YWdzIj48L2E+PGgzPmdzdF90b2Nfc2V0X3RhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdG9jX3NldF90YWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gKnRvYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiAqdGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiB3aXRoIHRhZ3MgZm9yIHRoZSBjb21wbGV0ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dG9jPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1zZXQtdGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50b2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtZHVtcCI+PC9hPjxoMz5nc3RfdG9jX2R1bXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdG9jX2R1bXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiAqdG9jPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1uZXciPjwvYT48aDM+Z3N0X3RvY19lbnRyeV9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPsKgKgotZ3N0X3RvY19lbnRyeV9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnlUeXBlIiB0aXRsZT0iZW51bSBHc3RUb2NFbnRyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdWlkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmVudHJ5IHR5cGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVpZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVuaXF1ZSBJRCAoVUlEKSBpbiB0aGUgd2hvbGUgVE9DLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBuZXdseSBhbGxvY2F0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUsIGZyZWUgaXQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS11bnJlZiIgdGl0bGU9ImdzdF90b2NfZW50cnlfdW5yZWYoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdG9jX2VudHJ5X3VucmVmKCk8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1yZWYiPjwvYT48aDM+Z3N0X3RvY19lbnRyeV9yZWYoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfdG9jX2VudHJ5X3JlZihlbnRyeSkgICAgICAgICAgICAoR3N0VG9jRW50cnkqKWdzdF9taW5pX29iamVjdF9yZWYoR1NUX01JTklfT0JKRUNUX0NBU1QoZW50cnkpKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktdW5yZWYiPjwvYT48aDM+Z3N0X3RvY19lbnRyeV91bnJlZigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF90b2NfZW50cnlfdW5yZWYoZW50cnkpICAgICAgICAgIGdzdF9taW5pX29iamVjdF91bnJlZihHU1RfTUlOSV9PQkpFQ1RfQ0FTVChlbnRyeSkpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1jb3B5Ij48L2E+PGgzPmdzdF90b2NfZW50cnlfY29weSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIGdzdF90b2NfZW50cnlfY29weShlbnRyeSkgICAgICAgICAgIChHc3RUb2NFbnRyeSopZ3N0X21pbmlfb2JqZWN0X2NvcHkoR1NUX01JTklfT0JKRUNUX0NBU1QoZW50cnkpKQotPC9wcmU+Ci08cD5Db3B5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gd2l0aCBhbGwgc3ViZW50cmllcyAoZGVlcCBjb3B5KS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVudHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiB0byBjb3B5LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktY29weS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IG5ld2x5IGFsbG9jYXRlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IGluIGNhc2Ugb2YKLXN1Y2Nlc3MsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBvdGhlcndpc2U7IGZyZWUgaXQgd2hlbiBkb25lIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LXVucmVmIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV91bnJlZigpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90b2NfZW50cnlfdW5yZWYoKTwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktbWFrZS13cml0YWJsZSI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X21ha2Vfd3JpdGFibGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBnc3RfdG9jX2VudHJ5X21ha2Vfd3JpdGFibGUoZW50cnkpICAoR3N0VG9jRW50cnkqKWdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlKEdTVF9NSU5JX09CSkVDVF9DQVNUKGVudHJ5KSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWZpbmQtZW50cnkiPjwvYT48aDM+Z3N0X3RvY19maW5kX2VudHJ5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT7CoCoKLWdzdF90b2NfZmluZF9lbnRyeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+ICp0b2M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdWlkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiB3aXRoIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51aWQ8L2NvZGU+PC9lbT4KLSBpbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRvYzwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZmluZC1lbnRyeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50b2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiB0byBzZWFyY2ggaW4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVpZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlVJRCB0byBmaW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gd2l0aC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZmluZC1lbnRyeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gd2l0aCBzcGVjaWZpZWQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51aWQ8L2NvZGU+PC9lbT4KLWZyb20gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50b2M8L2NvZGU+PC9lbT4KLSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vdCBmb3VuZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC10b2MiPjwvYT48aDM+Z3N0X3RvY19lbnRyeV9nZXRfdG9jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRvYzwvc3Bhbj48L2E+wqAqCi1nc3RfdG9jX2VudHJ5X2dldF90b2MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+ICplbnRyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1nZXQtdG9jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktZ2V0LXRvYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jPC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktZ2V0LXVpZCI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X2dldF91aWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF90b2NfZW50cnlfZ2V0X3VpZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gKmVudHJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIFVJRCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC11aWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVudHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1nZXQtdWlkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIFVJRCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1nZXQtcGFyZW50Ij48L2E+PGgzPmdzdF90b2NfZW50cnlfZ2V0X3BhcmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+wqAqCi1nc3RfdG9jX2VudHJ5X2dldF9wYXJlbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+ICplbnRyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC1wYXJlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVudHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1nZXQtcGFyZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHBhcmVudCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC1zdWItZW50cmllcyI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gKmVudHJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHN1Yi1lbnRyaWVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktZ2V0LXN1Yi1lbnRyaWVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktZ2V0LXN1Yi1lbnRyaWVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlRvY0VudHJ5XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1hcHBlbmQtc3ViLWVudHJ5Ij48L2E+PGgzPmdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gKmVudHJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiAqc3ViZW50cnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXBwZW5kcyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3ViZW50cnk8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWFwcGVuZC1zdWItZW50cnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3ViZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1nZXQtbG9vcCI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X2dldF9sb29wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdG9jX2VudHJ5X2dldF9sb29wICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0xvb3BUeXBlIiB0aXRsZT0iZW51bSBHc3RUb2NMb29wVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0xvb3BUeXBlPC9zcGFuPjwvYT4gKmxvb3BfdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKnJlcGVhdF9jb3VudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxvb3BfdHlwZTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVwZWF0X2NvdW50PC9jb2RlPjwvZW0+Ci0gdmFsdWVzIGZyb20gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPgotIGFuZCB3cml0ZSB0aGVtIGludG8KLWFwcHJvcHJpYXRlIHN0b3JhZ2VzLiBMb29wcyBhcmUgZS5nLiB1c2VkIGJ5IHNhbXBsZWQgaW5zdHJ1bWVudHMuIEdTdHJlYW1lcgotaXMgbm90IGF1dG9tYXRpY2FsbHkgYXBwbHlpbmcgdGhlIGxvb3AuIFRoZSBhcHBsaWNhdGlvbiBjYW4gcHJvY2VzcyB0aGlzCi1tZXRhIGRhdGEgYW5kIHVzZSBpdCBlLmcuIHRvIHNlbmQgYSBzZWVrLWV2ZW50IHRvIGxvb3AgYSBzZWN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktZ2V0LWxvb3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IHRvIGdldCB2YWx1ZXMgZnJvbS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bG9vcF90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzdG9yYWdlIGZvciB0aGUgbG9vcF90eXBlCi12YWx1ZSwgbGVhdmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vdCBuZWVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXBlYXRfY291bnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0b3JhZ2UgZm9yIHRoZSByZXBlYXRfY291bnQKLXZhbHVlLCBsZWF2ZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm90IG5lZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC1sb29wLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGFsbCBub24tPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHN0b3JhZ2UgcG9pbnRlcnMgd2VyZSBmaWxsZWQgd2l0aCBhcHByb3ByaWF0ZQotdmFsdWVzLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktc2V0LWxvb3AiPjwvYT48aDM+Z3N0X3RvY19lbnRyeV9zZXRfbG9vcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90b2NfZW50cnlfc2V0X2xvb3AgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+ICplbnRyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jTG9vcFR5cGUiIHRpdGxlPSJlbnVtIEdzdFRvY0xvb3BUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jTG9vcFR5cGU8L3NwYW4+PC9hPiBsb29wX3R5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHJlcGVhdF9jb3VudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxvb3BfdHlwZTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVwZWF0X2NvdW50PC9jb2RlPjwvZW0+Ci0gdmFsdWVzIGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1zZXQtbG9vcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gdG8gc2V0IHZhbHVlcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bG9vcF90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bG9vcF90eXBlIHZhbHVlIHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVwZWF0X2NvdW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cmVwZWF0X2NvdW50IHZhbHVlIHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1nZXQtc3RhcnQtc3RvcC10aW1lcyI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3RhcnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci0gdmFsdWVzIGZyb20gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPgotIGFuZCB3cml0ZSB0aGVtIGludG8gYXBwcm9wcmlhdGUKLXN0b3JhZ2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktZ2V0LXN0YXJ0LXN0b3AtdGltZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IHRvIGdldCB2YWx1ZXMgZnJvbS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHN0b3JhZ2UgZm9yIHRoZSBzdGFydCB2YWx1ZSwgbGVhdmUKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBub3QgbmVlZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RvcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgc3RvcmFnZSBmb3IgdGhlIHN0b3AgdmFsdWUsIGxlYXZlCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm90IG5lZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC1zdGFydC1zdG9wLXRpbWVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGFsbCBub24tPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHN0b3JhZ2UgcG9pbnRlcnMgd2VyZSBmaWxsZWQgd2l0aCBhcHByb3ByaWF0ZQotdmFsdWVzLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktc2V0LXN0YXJ0LXN0b3AtdGltZXMiPjwvYT48aDM+Z3N0X3RvY19lbnRyeV9zZXRfc3RhcnRfc3RvcF90aW1lc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+ICplbnRyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdG9wPC9jb2RlPjwvZW0+Ci0gdmFsdWVzIGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1zZXQtc3RhcnQtc3RvcC10aW1lcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gdG8gc2V0IHZhbHVlcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zdGFydCB2YWx1ZSB0byBzZXQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0b3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zdG9wIHZhbHVlIHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1nZXQtdGFncyI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X2dldF90YWdzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfdG9jX2VudHJ5X2dldF90YWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdGFncyBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1nZXQtdGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC10YWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktbWVyZ2UtdGFncyI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X21lcmdlX3RhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdG9jX2VudHJ5X21lcmdlX3RhZ3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+ICplbnRyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICp0YWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdNZXJnZU1vZGUiIHRpdGxlPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ01lcmdlTW9kZTwvc3Bhbj48L2E+IG1vZGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TWVyZ2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZ3M8L2NvZGU+PC9lbT4KLSBpbnRvIHRoZSBleGlzdGluZyB0YWdzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPgotIHVzaW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb2RlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1tZXJnZS10YWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVudHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdNZXJnZU1vZGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LXNldC10YWdzIj48L2E+PGgzPmdzdF90b2NfZW50cnlfc2V0X3RhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdG9jX2VudHJ5X3NldF90YWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKnRhZ3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gd2l0aCB0YWdzIGZvciB0aGUgY29tcGxldGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVudHJ5PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1zZXQtdGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LXR5cGUtZ2V0LW5pY2siPjwvYT48aDM+Z3N0X3RvY19lbnRyeV90eXBlX2dldF9uaWNrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X25pY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnlUeXBlIiB0aXRsZT0iZW51bSBHc3RUb2NFbnRyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+Ci0gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS10eXBlLWdldC1uaWNrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnlUeXBlIiB0aXRsZT0iZW51bSBHc3RUb2NFbnRyeVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeVR5cGU8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LXR5cGUtZ2V0LW5pY2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotLiBUaGlzIHN0cmluZyBpcwotb25seSBmb3IgZGVidWdnaW5nIHB1cnBvc2UgYW5kIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIGluIGEgdXNlcgotaW50ZXJmYWNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC1lbnRyeS10eXBlIj48L2E+PGgzPmdzdF90b2NfZW50cnlfZ2V0X2VudHJ5X3R5cGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnlUeXBlIiB0aXRsZT0iZW51bSBHc3RUb2NFbnRyeVR5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VG9jRW50cnlUeXBlPC9zcGFuPjwvYT4KLWdzdF90b2NfZW50cnlfZ2V0X2VudHJ5X3R5cGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+ICplbnRyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWdldC1lbnRyeS10eXBlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2MtZW50cnktZ2V0LWVudHJ5LXR5cGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW50cnk8L2NvZGU+PC9lbT4KLSdzIGVudHJ5IHR5cGU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1pcy1hbHRlcm5hdGl2ZSI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X2lzX2FsdGVybmF0aXZlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdG9jX2VudHJ5X2lzX2FsdGVybmF0aXZlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1pcy1hbHRlcm5hdGl2ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWlzLWFsdGVybmF0aXZlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPgotJ3MgdHlwZSBpcyBhbiBhbHRlcm5hdGl2ZSB0eXBlLCBvdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1pcy1zZXF1ZW5jZSI+PC9hPjxoMz5nc3RfdG9jX2VudHJ5X2lzX3NlcXVlbmNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdG9jX2VudHJ5X2lzX3NlcXVlbmNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnk8L3NwYW4+PC9hPiAqZW50cnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1lbnRyeS1pcy1zZXF1ZW5jZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW50cnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLWVudHJ5LWlzLXNlcXVlbmNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeTwvY29kZT48L2VtPgotJ3MgdHlwZSBpcyBhIHNlcXVlbmNlIHR5cGUsIG90aGVyd2lzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVE9DLUVOVFJZLVRZUEUtSVMtQUxURVJOQVRJVkU6Q0FQUyI+PC9hPjxoMz5HU1RfVE9DX0VOVFJZX1RZUEVfSVNfQUxURVJOQVRJVkUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVE9DX0VOVFJZX1RZUEVfSVNfQUxURVJOQVRJVkUoZW50cnlfdHlwZSkgIChlbnRyeV90eXBlICZsdDsgMCkKLTwvcHJlPgotPHA+Q2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeV90eXBlPC9jb2RlPjwvZW0+Ci0gaW5kaWNhdGVzIHRoYXQgaXRzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gaXMgYW4gYWx0ZXJuYXRpdmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVRPQy1FTlRSWS1UWVBFLUlTLUFMVEVSTkFUSVZFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbnRyeV90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeVR5cGUiIHRpdGxlPSJlbnVtIEdzdFRvY0VudHJ5VHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5VHlwZTwvc3Bhbj48L2E+IGZyb20gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVE9DLUVOVFJZLVRZUEUtSVMtU0VRVUVOQ0U6Q0FQUyI+PC9hPjxoMz5HU1RfVE9DX0VOVFJZX1RZUEVfSVNfU0VRVUVOQ0UoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVE9DX0VOVFJZX1RZUEVfSVNfU0VRVUVOQ0UoZW50cnlfdHlwZSkgICAgIChlbnRyeV90eXBlICZndDsgMCkKLTwvcHJlPgotPHA+Q2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbnRyeV90eXBlPC9jb2RlPjwvZW0+Ci0gaW5kaWNhdGVzIHRoYXQgaXRzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4gaXMgYSBzZXF1ZW5jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVE9DLUVOVFJZLVRZUEUtSVMtU0VRVUVOQ0UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVudHJ5X3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0VG9jRW50cnlUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jRW50cnlUeXBlPC9zcGFuPjwvYT4gZnJvbSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VG9jLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUb2Mtc3RydWN0Ij48L2E+PGgzPkdzdFRvYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFRvYyBHc3RUb2M7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRvY1Njb3BlIj48L2E+PGgzPmVudW0gR3N0VG9jU2NvcGU8L2gzPgotPHA+VGhlIHNjb3BlIG9mIGEgVE9DLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRvY1Njb3BlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRPQy1TQ09QRS1HTE9CQUw6Q0FQUyI+PC9hPkdTVF9UT0NfU0NPUEVfR0xPQkFMPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmdsb2JhbCBUT0MgcmVwcmVzZW50aW5nIGFsbCBzZWxlY3RhYmxlIG9wdGlvbnMKLSAgICAodGhpcyBpcyB3aGF0IGFwcGxpY2F0aW9ucyBhcmUgdXN1YWxseSBpbnRlcmVzdGVkIGluKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVE9DLVNDT1BFLUNVUlJFTlQ6Q0FQUyI+PC9hPkdTVF9UT0NfU0NPUEVfQ1VSUkVOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UT0MgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlL3NlbGVjdGVkIHN0cmVhbQotICAgICh0aGlzIGlzIGEgVE9DIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBzdHJlYW0gZnJvbSBzdGFydCB0byBFT1MsCi0gICAgYW5kIGlzIHdoYXQgYSBUT0Mgd3JpdGVyIC8gbXV4ZXIgaXMgdXN1YWxseSBpbnRlcmVzdGVkIGluOyBpdCB3aWxsCi0gICAgdXN1YWxseSBiZSBhIHN1YnNldCBvZiB0aGUgZ2xvYmFsIFRPQywgZS5nLiBqdXN0IHRoZSBjaGFwdGVycyBvZgotICAgIHRoZSBjdXJyZW50IHRpdGxlLCBvciB0aGUgY2hhcHRlcnMgc2VsZWN0ZWQgZm9yIHBsYXliYWNrIGZyb20gdGhlCi0gICAgY3VycmVudCB0aXRsZSk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRvY0VudHJ5LXN0cnVjdCI+PC9hPjxoMz5Hc3RUb2NFbnRyeTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFRvY0VudHJ5IEdzdFRvY0VudHJ5OzwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUb2NFbnRyeVR5cGUiPjwvYT48aDM+ZW51bSBHc3RUb2NFbnRyeVR5cGU8L2gzPgotPHA+VGhlIGRpZmZlcmVudCB0eXBlcyBvZiBUT0MgZW50cmllcyAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY0VudHJ5PC9zcGFuPjwvYT4pLjwvcD4KLTxwPlRoZXJlIGFyZSB0d28gdHlwZXMgb2YgVE9DIGVudHJpZXM6IGFsdGVybmF0aXZlcyBvciBwYXJ0cyBpbiBhIHNlcXVlbmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRvY0VudHJ5VHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UT0MtRU5UUlktVFlQRS1BTkdMRTpDQVBTIj48L2E+R1NUX1RPQ19FTlRSWV9UWVBFX0FOR0xFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmVudHJ5IGlzIGFuIGFuZ2xlIChpLmUuIGFuIGFsdGVybmF0aXZlKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVE9DLUVOVFJZLVRZUEUtVkVSU0lPTjpDQVBTIj48L2E+R1NUX1RPQ19FTlRSWV9UWVBFX1ZFUlNJT048L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZW50cnkgaXMgYSB2ZXJzaW9uIChpLmUuIGFsdGVybmF0aXZlKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVE9DLUVOVFJZLVRZUEUtRURJVElPTjpDQVBTIj48L2E+R1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT048L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZW50cnkgaXMgYW4gZWRpdGlvbiAoaS5lLiBhbHRlcm5hdGl2ZSk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRPQy1FTlRSWS1UWVBFLUlOVkFMSUQ6Q0FQUyI+PC9hPkdTVF9UT0NfRU5UUllfVFlQRV9JTlZBTElEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmludmFsaWQgZW50cnkgdHlwZSB2YWx1ZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVE9DLUVOVFJZLVRZUEUtVElUTEU6Q0FQUyI+PC9hPkdTVF9UT0NfRU5UUllfVFlQRV9USVRMRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5lbnRyeSBpcyBhIHRpdGxlIChpLmUuIGEgcGFydCBvZiBhIHNlcXVlbmNlKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVE9DLUVOVFJZLVRZUEUtVFJBQ0s6Q0FQUyI+PC9hPkdTVF9UT0NfRU5UUllfVFlQRV9UUkFDSzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5lbnRyeSBpcyBhIHRyYWNrIChpLmUuIGEgcGFydCBvZiBhIHNlcXVlbmNlKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVE9DLUVOVFJZLVRZUEUtQ0hBUFRFUjpDQVBTIj48L2E+R1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZW50cnkgaXMgYSBjaGFwdGVyIChpLmUuIGEgcGFydCBvZiBhIHNlcXVlbmNlKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VG9jTG9vcFR5cGUiPjwvYT48aDM+ZW51bSBHc3RUb2NMb29wVHlwZTwvaDM+Ci08cD5Ib3cgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NFbnRyeTwvc3Bhbj48L2E+IHNob3VsZCBiZSByZXBlYXRlZC4gQnkgZGVmYXVsdCwgZW50cmllcyBhcmUgcGxheWVkIGEKLXNpbmdsZSB0aW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRvY0xvb3BUeXBlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRPQy1MT09QLU5PTkU6Q0FQUyI+PC9hPkdTVF9UT0NfTE9PUF9OT05FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNpbmdsZSBmb3J3YXJkIHBsYXliYWNrPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UT0MtTE9PUC1GT1JXQVJEOkNBUFMiPjwvYT5HU1RfVE9DX0xPT1BfRk9SV0FSRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5yZXBlYXQgZm9yd2FyZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVE9DLUxPT1AtUkVWRVJTRTpDQVBTIj48L2E+R1NUX1RPQ19MT09QX1JFVkVSU0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cmVwZWF0IGJhY2t3YXJkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UT0MtTE9PUC1QSU5HLVBPTkc6Q0FQUyI+PC9hPkdTVF9UT0NfTE9PUF9QSU5HX1BPTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cmVwZWF0IGZvcndhcmQgYW5kIGJhY2t3YXJkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVE9DLVJFUEVBVC1DT1VOVC1JTkZJTklURTpDQVBTIj48L2E+PGgzPkdTVF9UT0NfUkVQRUFUX0NPVU5UX0lORklOSVRFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UT0NfUkVQRUFUX0NPVU5UX0lORklOSVRFICgtMSkKLTwvcHJlPgotPHA+U3BlY2lhbCB2YWx1ZSBmb3IgdGhlIHJlcGVhdF9jb3VudCBzZXQgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktc2V0LWxvb3AiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X3NldF9sb29wwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdG9jX2VudHJ5X3NldF9sb29wKCk8L2NvZGU+PC9hPiBvcgotcmV0dXJuZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktc2V0LWxvb3AiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X3NldF9sb29wwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdG9jX2VudHJ5X3NldF9sb29wKCk8L2NvZGU+PC9hPiB0byBpbmRpY2F0ZSBpbmZpbml0ZSBsb29waW5nLjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUb2Muc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvR3N0VHJhY2VyLmh0bWwgYi9kb2NzL2dzdC9odG1sL0dzdFRyYWNlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWIzZDcwLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0VHJhY2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RUcmFjZXI6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgU3VwcG9ydCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0VHJhY2VyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHJhY2VyRmFjdG9yeSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUcmFjZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFRyYWNlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUcmFjZXIucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFRyYWNlckZhY3RvcnkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RUcmFjZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RUcmFjZXIudG9wX29mX3BhZ2UiPjwvYT5Hc3RUcmFjZXI8L3NwYW4+PC9oMj4KLTxwPkdzdFRyYWNlciDigJQgVHJhY2luZyBiYXNlIGNsYXNzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyYWNlci5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI2dzdC10cmFjZXItcmVnaXN0ZXIiIHRpdGxlPSJnc3RfdHJhY2VyX3JlZ2lzdGVywqAoKSI+Z3N0X3RyYWNlcl9yZWdpc3RlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI2dzdC10cmFjaW5nLXJlZ2lzdGVyLWhvb2siIHRpdGxlPSJnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rwqAoKSI+Z3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tCaW5BZGRQb3N0IiB0aXRsZT0iR3N0VHJhY2VySG9va0JpbkFkZFBvc3TCoCgpIj4qR3N0VHJhY2VySG9va0JpbkFkZFBvc3Q8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rQmluQWRkUHJlIiB0aXRsZT0iR3N0VHJhY2VySG9va0JpbkFkZFByZcKgKCkiPipHc3RUcmFjZXJIb29rQmluQWRkUHJlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0JpblJlbW92ZVBvc3QiIHRpdGxlPSJHc3RUcmFjZXJIb29rQmluUmVtb3ZlUG9zdMKgKCkiPipHc3RUcmFjZXJIb29rQmluUmVtb3ZlUG9zdDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tCaW5SZW1vdmVQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rQmluUmVtb3ZlUHJlwqAoKSI+KkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQcmU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudEFkZFBhZCIgdGl0bGU9IkdzdFRyYWNlckhvb2tFbGVtZW50QWRkUGFkwqAoKSI+KkdzdFRyYWNlckhvb2tFbGVtZW50QWRkUGFkPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnRDaGFuZ2VTdGF0ZVBvc3QiIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUG9zdMKgKCkiPipHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUG9zdDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUHJlwqAoKSI+KkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQcmU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudE5ldyIgdGl0bGU9IkdzdFRyYWNlckhvb2tFbGVtZW50TmV3wqAoKSI+KkdzdFRyYWNlckhvb2tFbGVtZW50TmV3PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVBvc3QiIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUG9zdMKgKCkiPipHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUG9zdDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUHJlwqAoKSI+KkdzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQcmU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQb3N0wqAoKSI+KkdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQb3N0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnRRdWVyeVByZSIgdGl0bGU9IkdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQcmXCoCgpIj4qR3N0VHJhY2VySG9va0VsZW1lbnRRdWVyeVByZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkIiB0aXRsZT0iR3N0VHJhY2VySG9va0VsZW1lbnRSZW1vdmVQYWTCoCgpIj4qR3N0VHJhY2VySG9va0VsZW1lbnRSZW1vdmVQYWQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkTGlua1Bvc3QiIHRpdGxlPSJHc3RUcmFjZXJIb29rUGFkTGlua1Bvc3TCoCgpIj4qR3N0VHJhY2VySG9va1BhZExpbmtQb3N0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZExpbmtQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rUGFkTGlua1ByZcKgKCkiPipHc3RUcmFjZXJIb29rUGFkTGlua1ByZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRQdWxsUmFuZ2VQb3N0IiB0aXRsZT0iR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVBvc3TCoCgpIj4qR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVBvc3Q8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUHJlIiB0aXRsZT0iR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVByZcKgKCkiPipHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUHJlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFB1c2hFdmVudFBvc3QiIHRpdGxlPSJHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdMKgKCkiPipHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UHJlwqAoKSI+KkdzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQcmU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQb3N0IiB0aXRsZT0iR3N0VHJhY2VySG9va1BhZFB1c2hMaXN0UG9zdMKgKCkiPipHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQb3N0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFB1c2hMaXN0UHJlIiB0aXRsZT0iR3N0VHJhY2VySG9va1BhZFB1c2hMaXN0UHJlwqAoKSI+KkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFByZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRQdXNoUG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRQdXNoUG9zdMKgKCkiPipHc3RUcmFjZXJIb29rUGFkUHVzaFBvc3Q8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVzaFByZSIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRQdXNoUHJlwqAoKSI+KkdzdFRyYWNlckhvb2tQYWRQdXNoUHJlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFF1ZXJ5UG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRRdWVyeVBvc3TCoCgpIj4qR3N0VHJhY2VySG9va1BhZFF1ZXJ5UG9zdDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRRdWVyeVByZSIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRRdWVyeVByZcKgKCkiPipHc3RUcmFjZXJIb29rUGFkUXVlcnlQcmU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkVW5saW5rUG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0wqAoKSI+KkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFVubGlua1ByZSIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQcmXCoCgpIj4qR3N0VHJhY2VySG9va1BhZFVubGlua1ByZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyYWNlci5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlci0tcGFyYW1zIiB0aXRsZT0iVGhlIOKAnHBhcmFtc+KAnSBwcm9wZXJ0eSI+cGFyYW1zPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJhY2VyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyYWNlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RUcmFjZXIKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXIuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJhY2VyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRyYWNpbmcgbW9kdWxlcyB3aWxsIHN1YmNsYXNzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlcjwvc3Bhbj48L2E+IGFuZCByZWdpc3RlciB0aHJvdWdoCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90cmFjaW5nX3JlZ2lzdGVyKCk8L2NvZGU+LiBNb2R1bGVzIGNhbiBhdHRhY2ggdG8gdmFyaW91cyBob29rLXR5cGVzIC0gc2VlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjZ3N0LXRyYWNpbmctcmVnaXN0ZXItaG9vayIgdGl0bGU9ImdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2vCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2soKTwvY29kZT48L2E+LiBXaGVuIGludm9rZWQgdGhleSByZWNlaXZlIGhvb2sgc3BlY2lmaWMKLWNvbnRleHR1YWwgZGF0YSwgd2hpY2ggdGhleSBtdXN0IG5vdCBtb2RpZnkuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXIuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10cmFjZXItcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X3RyYWNlcl9yZWdpc3RlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RyYWNlcl9yZWdpc3RlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyB0cmFjZXItZmFjdG9yeSAgY2FwYWJsZSBvZiBpbnN0YW50aWF0aW5nIG9iamVjdHMgb2YgdGhlCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotIGFuZCBhZGQgdGhlIGZhY3RvcnkgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10cmFjZXItcmVnaXN0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3IgYSBzdGF0aWMgdHlwZWZpbmQgZnVuY3Rpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbmFtZSBmb3IgcmVnaXN0ZXJpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkdUeXBlIG9mIHRyYWNlciB0byByZWdpc3RlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRyYWNlci1yZWdpc3Rlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgdGhlIHJlZ2lzdGVyaW5nIHN1Y2NlZWRlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb24gZXJyb3I8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRyYWNpbmctcmVnaXN0ZXItaG9vayI+PC9hPjxoMz5nc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlcjwvc3Bhbj48L2E+ICp0cmFjZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRldGFpbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1DbG9zdXJlcy5odG1sI0dDYWxsYmFjayI+PHNwYW4gY2xhc3M9InR5cGUiPkdDYWxsYmFjazwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVnaXN0ZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLSB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhY2UgaG9vayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGV0YWlsPC9jb2RlPjwvZW0+Ci0gaXMgZ2V0dGluZyBpbnZva2VkLgotVXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRldGFpbDwvY29kZT48L2VtPgotIHRvIHJlZ2lzdGVyIHRvIGFsbCBob29rcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHJhY2luZy1yZWdpc3Rlci1ob29rLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRyYWNlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFjZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV0YWlsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRldGFpbGVkIGhvb2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgY2FsbGJhY2suIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCB1bnRpbCBmaXJzdCBjYWxsZWQuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgYXN5bmM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rQmluQWRkUG9zdCI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rQmluQWRkUG9zdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rQmluQWRkUG9zdDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gcmVzdWx0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBvc3QtaG9vayBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkIiB0aXRsZT0iZ3N0X2Jpbl9hZGTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaW5fYWRkKCk8L2NvZGU+PC9hPiBuYW1lZCAiYmluLWFkZC1wb3N0Ii48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rQmluQWRkUG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXN1bHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVzdWx0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2FkZCgpPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va0JpbkFkZFByZSI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rQmluQWRkUHJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tCaW5BZGRQcmU8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlLWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX2FkZCgpPC9jb2RlPjwvYT4gbmFtZWQgImJpbi1hZGQtcHJlIi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rQmluQWRkUHJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQb3N0Ij48L2E+PGgzPkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQb3N0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQb3N0PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHJlc3VsdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Qb3N0LWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX3JlbW92ZSgpPC9jb2RlPjwvYT4gbmFtZWQgImJpbi1yZW1vdmUtcG9zdCIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va0JpblJlbW92ZVBvc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFjZXIgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY3VycmVudCB0aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXN1bHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVzdWx0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX3JlbW92ZSgpPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va0JpblJlbW92ZVByZSI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rQmluUmVtb3ZlUHJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQcmU8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlLWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmluX3JlbW92ZSgpPC9jb2RlPjwvYT4gbmFtZWQgImJpbi1yZW1vdmUtcHJlIi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rQmluUmVtb3ZlUHJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50QWRkUGFkIj48L2E+PGgzPkdzdFRyYWNlckhvb2tFbGVtZW50QWRkUGFkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tFbGVtZW50QWRkUGFkPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWRkLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2FkZF9wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X2FkZF9wYWQoKTwvY29kZT48L2E+IG5hbWVkICJlbGVtZW50LWFkZC1wYWQiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50QWRkUGFkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQb3N0Ij48L2E+PGgzPkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQb3N0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQb3N0PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2UiIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGVDaGFuZ2U8L3NwYW4+PC9hPiB0cmFuc2l0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZVJldHVybjwvc3Bhbj48L2E+IHJlc3VsdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Qb3N0LWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2hhbmdlLXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUoKTwvY29kZT48L2E+IG5hbWVkICJlbGVtZW50LWNoYW5nZS1zdGF0ZS1wb3N0Ii48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnNpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFuc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlc3VsdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXN1bHQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIgdGl0bGU9ImdzdF9wYWRfcHVzaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUHJlIj48L2E+PGgzPkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VHJhY2VySG9va0VsZW1lbnRDaGFuZ2VTdGF0ZVByZTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIgdGl0bGU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0ZUNoYW5nZTwvc3Bhbj48L2E+IHRyYW5zaXRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlLWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2hhbmdlLXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUoKTwvY29kZT48L2E+IG5hbWVkICJlbGVtZW50LWNoYW5nZS1zdGF0ZS1wcmUiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQcmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFjZXIgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY3VycmVudCB0aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRyYW5zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhbnNpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudE5ldyI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rRWxlbWVudE5ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rRWxlbWVudE5ldzxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Ib29rIGZvciA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X25ldygpPC9jb2RlPiBuYW1lZCAiZWxlbWVudC1uZXciLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50TmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUG9zdCI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUG9zdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUG9zdDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlLWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcG9zdC1tZXNzYWdlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoKTwvY29kZT48L2E+IG5hbWVkICJlbGVtZW50LXBvc3QtbWVzc2FnZS1wb3N0Ii48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlc3VsdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXBvc3QtbWVzc2FnZSIgdGl0bGU9ImdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUHJlIj48L2E+PGgzPkdzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVByZTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gKm1lc3NhZ2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlLWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcG9zdC1tZXNzYWdlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoKTwvY29kZT48L2E+IG5hbWVkICJlbGVtZW50LXBvc3QtbWVzc2FnZS1wcmUiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQcmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFjZXIgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY3VycmVudCB0aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdCI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9zdC1ob29rIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5IiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3F1ZXJ5KCk8L2NvZGU+PC9hPiBuYW1lZCAiZWxlbWVudC1xdWVyeS1wb3N0Ii48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlc3VsdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5IiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3F1ZXJ5KCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UHJlIj48L2E+PGgzPkdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VHJhY2VySG9va0VsZW1lbnRRdWVyeVByZTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlByZS1ob29rIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5IiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3F1ZXJ5KCk8L2NvZGU+PC9hPiBuYW1lZCAiZWxlbWVudC1xdWVyeS1wcmUiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQcmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFjZXIgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY3VycmVudCB0aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkIj48L2E+PGgzPkdzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVtb3ZlLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlbW92ZV9wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3JlbW92ZV9wYWQoKTwvY29kZT48L2E+IG5hbWVkICJlbGVtZW50LXJlbW92ZS1wYWQiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRMaW5rUG9zdCI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rUGFkTGlua1Bvc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VHJhY2VySG9va1BhZExpbmtQb3N0PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyY3BhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzaW5rcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRMaW5rUmV0dXJuPC9zcGFuPjwvYT4gcmVzdWx0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBvc3QtaG9vayBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIgdGl0bGU9ImdzdF9wYWRfbGlua8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9saW5rKCk8L2NvZGU+PC9hPiBuYW1lZCAicGFkLWxpbmstcG9zdCIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va1BhZExpbmtQb3N0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzcmNwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2lua3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlc3VsdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXN1bHQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIgdGl0bGU9ImdzdF9wYWRfbGlua8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9saW5rKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkTGlua1ByZSI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rUGFkTGlua1ByZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rUGFkTGlua1ByZTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc3JjcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc2lua3BhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QcmUtaG9vayBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluayIgdGl0bGU9ImdzdF9wYWRfbGlua8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9saW5rKCk8L2NvZGU+PC9hPiBuYW1lZCAicGFkLWxpbmstcHJlIi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkTGlua1ByZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3JjcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbmtwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2lua3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUG9zdCI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUG9zdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUG9zdDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiIgdGl0bGU9ImVudW0gR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiByZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9zdC1ob29rIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdWxsLXJhbmdlIiB0aXRsZT0iZ3N0X3BhZF9wdWxsX3JhbmdlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1bGxfcmFuZ2UoKTwvY29kZT48L2E+IG5hbWVkICJwYWQtcHVsbC1yYW5nZS1wb3N0Ii48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBidWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlc3VsdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdWxsLXJhbmdlIiB0aXRsZT0iZ3N0X3BhZF9wdWxsX3JhbmdlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1bGxfcmFuZ2UoKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRQdWxsUmFuZ2VQcmUiPjwvYT48aDM+R3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVByZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUHJlPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QcmUtaG9vayBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVsbC1yYW5nZSIgdGl0bGU9ImdzdF9wYWRfcHVsbF9yYW5nZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdWxsX3JhbmdlKCk8L2NvZGU+PC9hPiBuYW1lZCAicGFkLXB1bGwtcmFuZ2UtcHJlIi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUHJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0cmVhbSBvZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXF1ZXN0ZWQgc2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdCI+PC9hPjxoMz5Hc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9zdC1ob29rIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoLWV2ZW50IiB0aXRsZT0iZ3N0X3BhZF9wdXNoX2V2ZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2hfZXZlbnQoKTwvY29kZT48L2E+IG5hbWVkICJwYWQtcHVzaC1ldmVudC1wb3N0Ii48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXN1bHQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaC1ldmVudCIgdGl0bGU9ImdzdF9wYWRfcHVzaF9ldmVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoX2V2ZW50KCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UHJlIj48L2E+PGgzPkdzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VHJhY2VySG9va1BhZFB1c2hFdmVudFByZTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlLWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3B1c2hfZXZlbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVzaF9ldmVudCgpPC9jb2RlPjwvYT4gbmFtZWQgInBhZC1wdXNoLWV2ZW50LXByZSIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va1BhZFB1c2hFdmVudFByZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFBvc3QiPjwvYT48aDM+R3N0VHJhY2VySG9va1BhZFB1c2hMaXN0UG9zdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQb3N0PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIiB0aXRsZT0iZW51bSBHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHJlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Qb3N0LWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtbGlzdCIgdGl0bGU9ImdzdF9wYWRfcHVzaF9saXN0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2hfbGlzdCgpPC9jb2RlPjwvYT4gbmFtZWQgInBhZC1wdXNoLWxpc3QtcG9zdCIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va1BhZFB1c2hMaXN0UG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXN1bHQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaC1saXN0IiB0aXRsZT0iZ3N0X3BhZF9wdXNoX2xpc3TCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVzaF9saXN0KCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQcmUiPjwvYT48aDM+R3N0VHJhY2VySG9va1BhZFB1c2hMaXN0UHJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFByZTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiAqbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QcmUtaG9vayBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaC1saXN0IiB0aXRsZT0iZ3N0X3BhZF9wdXNoX2xpc3TCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVzaF9saXN0KCk8L2NvZGU+PC9hPiBuYW1lZCAicGFkLXB1c2gtbGlzdC1wcmUiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFByZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYnVmZmVyLWxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va1BhZFB1c2hQb3N0Ij48L2E+PGgzPkdzdFRyYWNlckhvb2tQYWRQdXNoUG9zdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rUGFkUHVzaFBvc3Q8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gcmVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBvc3QtaG9vayBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIgdGl0bGU9ImdzdF9wYWRfcHVzaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoKCk8L2NvZGU+PC9hPiBuYW1lZCAicGFkLXB1c2gtcG9zdCIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va1BhZFB1c2hQb3N0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJlc3VsdCBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoIiB0aXRsZT0iZ3N0X3BhZF9wdXNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2goKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRQdXNoUHJlIj48L2E+PGgzPkdzdFRyYWNlckhvb2tQYWRQdXNoUHJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tQYWRQdXNoUHJlPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlLWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giIHRpdGxlPSJnc3RfcGFkX3B1c2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVzaCgpPC9jb2RlPjwvYT4gbmFtZWQgInBhZC1wdXNoLXByZSIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va1BhZFB1c2hQcmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFjZXIgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY3VycmVudCB0aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRRdWVyeVBvc3QiPjwvYT48aDM+R3N0VHJhY2VySG9va1BhZFF1ZXJ5UG9zdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUcmFjZXJIb29rUGFkUXVlcnlQb3N0PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9zdC1ob29rIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeSIgdGl0bGU9ImdzdF9wYWRfcXVlcnnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcXVlcnkoKTwvY29kZT48L2E+IG5hbWVkICJwYWQtcXVlcnktcG9zdCIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHJhY2VySG9va1BhZFF1ZXJ5UG9zdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXN1bHQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnkiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3F1ZXJ5KCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUXVlcnlQcmUiPjwvYT48aDM+R3N0VHJhY2VySG9va1BhZFF1ZXJ5UHJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tQYWRRdWVyeVByZTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlLWhvb2sgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5IiB0aXRsZT0iZ3N0X3BhZF9xdWVyecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9xdWVyeSgpPC9jb2RlPjwvYT4gbmFtZWQgInBhZC1xdWVyeS1wcmUiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRRdWVyeVByZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRyYWNlciBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjdXJyZW50IHRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0Ij48L2E+PGgzPkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzcmNwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzaW5rcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiByZXN1bHQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9zdC1ob29rIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC11bmxpbmsiIHRpdGxlPSJnc3RfcGFkX3VubGlua8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF91bmxpbmsoKTwvY29kZT48L2E+IG5hbWVkICJwYWQtdW5saW5rLXBvc3QiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhY2VyIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGN1cnJlbnQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzcmNwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2lua3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlc3VsdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZXN1bHQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIgdGl0bGU9ImdzdF9wYWRfcHVzaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJIb29rUGFkVW5saW5rUHJlIj48L2E+PGgzPkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VHJhY2VySG9va1BhZFVubGlua1ByZTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyY3BhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqc2lua3BhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QcmUtaG9vayBmb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtdW5saW5rIiB0aXRsZT0iZ3N0X3BhZF91bmxpbmvCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfdW5saW5rKCk8L2NvZGU+PC9hPiBuYW1lZCAicGFkLXVubGluay1wcmUiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQcmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFjZXIgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY3VycmVudCB0aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNyY3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaW5rcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpbmtwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXIub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlci1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFRyYWNlcjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRyYWNlcjs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXIucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlci0tcGFyYW1zIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGFyYW1z4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwYXJhbXPigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkV4dHJhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFRyYWNlckZhY3RvcnkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0VHJhY2VyRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmQzZDI3Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvR3N0VHJhY2VyRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RUcmFjZXJGYWN0b3J5OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFN1cHBvcnQiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sIiB0aXRsZT0iR3N0VHJhY2VyUmVjb3JkIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFRyYWNlckZhY3RvcnkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFRyYWNlckZhY3Rvcnkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJGYWN0b3J5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VHJhY2VyRmFjdG9yeS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFRyYWNlckZhY3Rvcnk8L3NwYW4+PC9oMj4KLTxwPkdzdFRyYWNlckZhY3Rvcnkg4oCUIEluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyZWQgdHJhY2VyIGZ1bmN0aW9uczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJGYWN0b3J5LmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyRmFjdG9yeS5odG1sI2dzdC10cmFjZXItZmFjdG9yeS1nZXQtbGlzdCIgdGl0bGU9ImdzdF90cmFjZXJfZmFjdG9yeV9nZXRfbGlzdMKgKCkiPmdzdF90cmFjZXJfZmFjdG9yeV9nZXRfbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJGYWN0b3J5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyRmFjdG9yeS5odG1sI0dzdFRyYWNlckZhY3Rvcnktc3RydWN0IiB0aXRsZT0iR3N0VHJhY2VyRmFjdG9yeSI+R3N0VHJhY2VyRmFjdG9yeTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJhY2VyRmFjdG9yeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RUcmFjZXJGYWN0b3J5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJhY2VyRmFjdG9yeS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJGYWN0b3J5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyRmFjdG9yeS5odG1sI2dzdC10cmFjZXItZmFjdG9yeS1nZXQtbGlzdCIgdGl0bGU9ImdzdF90cmFjZXJfZmFjdG9yeV9nZXRfbGlzdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RyYWNlcl9mYWN0b3J5X2dldF9saXN0KCk8L2NvZGU+PC9hPiB0byBnZXQgYSBsaXN0IG9mIHRyYWNlciBmYWN0b3JpZXMga25vd24gdG8KLUdTdHJlYW1lci48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyYWNlckZhY3RvcnkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10cmFjZXItZmFjdG9yeS1nZXQtbGlzdCI+PC9hPjxoMz5nc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X2xpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3RyYWNlcl9mYWN0b3J5X2dldF9saXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdHJhY2VyIGZhY3Rvcmllcy4gWW91IG11c3QgZnJlZSB0aGUKLWxpc3QgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhlIHJldHVybmVkIGZhY3RvcmllcyBhcmUgc29ydGVkIGJ5IGZhY3RvcnkgbmFtZS48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRyYWNlci1mYWN0b3J5LWdldC1saXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGxpc3Qgb2YgYWxsCi1yZWdpc3RlcmVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHJhY2VyRmFjdG9yeTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5UcmFjZXJGYWN0b3J5XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJGYWN0b3J5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJGYWN0b3J5LXN0cnVjdCI+PC9hPjxoMz5Hc3RUcmFjZXJGYWN0b3J5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0VHJhY2VyRmFjdG9yeSBHc3RUcmFjZXJGYWN0b3J5OzwvcHJlPgotPHA+T3BhcXVlIG9iamVjdCB0aGF0IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHRyYWNlciBmdW5jdGlvbi48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9Hc3RUcmFjZXJSZWNvcmQuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvR3N0VHJhY2VyUmVjb3JkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZmU0MDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9Hc3RUcmFjZXJSZWNvcmQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwMCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0VHJhY2VyUmVjb3JkOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFN1cHBvcnQiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJGYWN0b3J5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIiB0aXRsZT0iT2JqZWN0IEhpZXJhcmNoeSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUcmFjZXJSZWNvcmQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFRyYWNlclJlY29yZC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0VHJhY2VyUmVjb3JkIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VHJhY2VyUmVjb3JkLnRvcF9vZl9wYWdlIj48L2E+R3N0VHJhY2VyUmVjb3JkPC9zcGFuPjwvaDI+Ci08cD5Hc3RUcmFjZXJSZWNvcmQg4oCUIFRyYWNlIGxvZyBlbnRyeSBjbGFzczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJSZWNvcmQuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sIiB0aXRsZT0iR3N0VHJhY2VyUmVjb3JkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRyYWNlclJlY29yZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNnc3QtdHJhY2VyLXJlY29yZC1uZXciIHRpdGxlPSJnc3RfdHJhY2VyX3JlY29yZF9uZXfCoCgpIj5nc3RfdHJhY2VyX3JlY29yZF9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNnc3QtdHJhY2VyLXJlY29yZC1sb2ciIHRpdGxlPSJnc3RfdHJhY2VyX3JlY29yZF9sb2fCoCgpIj5nc3RfdHJhY2VyX3JlY29yZF9sb2c8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJSZWNvcmQub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sI0dzdFRyYWNlclJlY29yZC1zdHJ1Y3QiIHRpdGxlPSJHc3RUcmFjZXJSZWNvcmQiPkdzdFRyYWNlclJlY29yZDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNHc3RUcmFjZXJWYWx1ZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RUcmFjZXJWYWx1ZUZsYWdzIj5Hc3RUcmFjZXJWYWx1ZUZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sI0dzdFRyYWNlclZhbHVlU2NvcGUiIHRpdGxlPSJlbnVtIEdzdFRyYWNlclZhbHVlU2NvcGUiPkdzdFRyYWNlclZhbHVlU2NvcGU8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJhY2VyUmVjb3JkLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFRyYWNlclJlY29yZAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyYWNlclJlY29yZC5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJSZWNvcmQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VHJhY2luZyBtb2R1bGVzIHdpbGwgY3JlYXRlIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHRvIGFubm91bmNlIHRoZSBkYXRhIHRoZXkKLXdpbGwgbG9nIGFuZCBjcmVhdGUgYSBsb2cgZm9ybWF0dGVyLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJhY2VyUmVjb3JkLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHJhY2VyLXJlY29yZC1uZXciPjwvYT48aDM+Z3N0X3RyYWNlcl9yZWNvcmRfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sIiB0aXRsZT0iR3N0VHJhY2VyUmVjb3JkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRyYWNlclJlY29yZDwvc3Bhbj48L2E+wqAqCi1nc3RfdHJhY2VyX3JlY29yZF9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdGZpZWxkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyB0cmFjZXIgcmVjb3JkLiBUaGUgcmVjb3JkIGluc3RhbmNlIGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5Ci1sb2cgZW50cmllcyB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyUmVjb3JkLmh0bWwjZ3N0LXRyYWNlci1yZWNvcmQtbG9nIiB0aXRsZT0iZ3N0X3RyYWNlcl9yZWNvcmRfbG9nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdHJhY2VyX3JlY29yZF9sb2coKTwvY29kZT48L2E+LjwvcD4KLTxwPlRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotIHdpdGhvdXQgdGhlICIuY2xhc3MiIHN1ZmZpeCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBsb2cgcmVjb3Jkcy4KLVRoZXJlIG11c3QgYmUgZmllbGRzIGZvciBlYWNoIHZhbHVlIHRoYXQgZ2V0cyBsb2dnZWQgd2hlcmUgdGhlIGZpZWxkIG5hbWUgaXMKLXRoZSB2YWx1ZSBuYW1lLiBUaGUgZmllbGQgbXVzdCBiZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IGRlc2NyaWJpbmcgdGhlIHZhbHVlLiBUaGUKLXN1YiBzdHJ1Y3R1cmUgbXVzdCBjb250YWluIGEgZmllbGQgY2FsbGVkICd0eXBlJyBvZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjRy1UWVBFLUdUWVBFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HX1RZUEVfR1RZUEU8L2NvZGU+PC9hPiB0aGF0Ci1jb250YWlucyB0aGUgR1R5cGUgb2YgdGhlIHZhbHVlLiBUaGUgcmVzdWx0aW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCIgdGl0bGU9IkdzdFRyYWNlclJlY29yZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlclJlY29yZDwvc3Bhbj48L2E+IHdpbGwgdGFrZQotb3duZXJzaGlwIG9mIHRoZSBmaWVsZCBzdHJ1Y3R1cmVzLjwvcD4KLTxwPlRoZSB3YXkgdG8gZGVhbCB3aXRoIG9wdGlvbmFsIHZhbHVlcyBpcyB0byBsb2cgYW4gYWRkaXRpb25hbCBib29sZWFuIGJlZm9yZQotdGhlIG9wdGlvbmFsIGZpZWxkLCB0aGF0IGlmIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBzaWduYWxzIHRoYXQgdGhlIG9wdGlvbmFsIGZpZWxkIGlzIHZhbGlkCi1hbmQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gc2lnbmFscyB0aGF0IHRoZSBvcHRpb25hbCBmaWVsZCBzaG91bGQgYmUgaWdub3JlZC4gT25lIG11c3Qgc3RpbGwKLWxvZyBhIHBsYWNlaG9sZGVyIHZhbHVlIGZvciB0aGUgb3B0aW9uYWwgZmllbGQgdGhvdWdoLiBQbGVhc2UgYWxzbyBub3RlLCB0aGF0Ci1wb2ludGVyIHR5cGUgdmFsdWVzIG11c3Qgbm90IGJlIE5VTEwgLSB0aGUgdW5kZXJseWluZyBzZXJpYWxpc2F0aW9uIGNhbiBub3QKLWhhbmRsZSB0aGF0IHJpZ2h0IG5vdy48L3A+Ci08ZGl2IGNsYXNzPSJub3RlIj48cD4KLSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIHN0aWxsIHVuZGVyIGRpc2N1c3Npb24gYW5kIHN1YmplY3QgdG8gY2hhbmdlLgotPC9wPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRyYWNlci1yZWNvcmQtbmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIG5ldyByZWNvcmQsIG11c3QgZW5kIG9uICIuY2xhc3MiLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maXJzdGZpZWxkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiBmaXJzdCBmaWVsZCB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWRkaXRpb25hbCBhcmd1bWVudHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10cmFjZXItcmVjb3JkLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCIgdGl0bGU9IkdzdFRyYWNlclJlY29yZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyYWNlclJlY29yZDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10cmFjZXItcmVjb3JkLWxvZyI+PC9hPjxoMz5nc3RfdHJhY2VyX3JlY29yZF9sb2fCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdHJhY2VyX3JlY29yZF9sb2cgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyUmVjb3JkLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJSZWNvcmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmFjZXJSZWNvcmQ8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXJpYWx6ZXMgdGhlIHRyYWNlIGV2ZW50IGludG8gdGhlIGxvZy48L3A+Ci08cD5SaWdodCBub3cgdGhpcyBpcyB1c2luZyB0aGUgZ3N0cmVhbWVyIGRlYnVnIGxvZyB3aXRoIHRoZSBsZXZlbCBUUkFDRSAoNykgYW5kCi10aGUgY2F0ZWdvcnkgIkdTVF9UUkFDRVIiLjwvcD4KLTxkaXYgY2xhc3M9Im5vdGUiPjxwPgotICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgc3RpbGwgdW5kZXIgZGlzY3Vzc2lvbiBhbmQgc3ViamVjdCB0byBjaGFuZ2UuCi08L3A+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHJhY2VyLXJlY29yZC1sb2cucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0cmFjZXItcmVjb3JkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBhcmdzIGFzIGRlc2NyaWJlZCBpbiB0aGUgc3BlYy08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmFjZXJSZWNvcmQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRyYWNlclJlY29yZC1zdHJ1Y3QiPjwvYT48aDM+R3N0VHJhY2VyUmVjb3JkPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0VHJhY2VyUmVjb3JkIEdzdFRyYWNlclJlY29yZDs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VHJhY2VyVmFsdWVGbGFncyI+PC9hPjxoMz5lbnVtIEdzdFRyYWNlclZhbHVlRmxhZ3M8L2gzPgotPHA+RmxhZyB0aGF0IGRlc2NyaWJlIHRoZSB2YWx1ZS4gVGhlc2UgZmxhZ3MgaGVscCBhcHBsaWNhdGlvbnMgcHJvY2Vzc2luZyB0aGUKLWxvZ3MgdG8gdW5kZXJzdGFuZCB0aGUgdmFsdWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRyYWNlclZhbHVlRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVFJBQ0VSLVZBTFVFLUZMQUdTLU5PTkU6Q0FQUyI+PC9hPkdTVF9UUkFDRVJfVkFMVUVfRkxBR1NfTk9ORTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5ubyBmbGFnczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVFJBQ0VSLVZBTFVFLUZMQUdTLU9QVElPTkFMOkNBUFMiPjwvYT5HU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX09QVElPTkFMPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSB2YWx1ZSBpcyBvcHRpb25hbC4gV2hlbiB1c2luZyB0aGlzIGZsYWcKLSAgb25lIG5lZWQgdG8gaGF2ZSBhbiBhZGRpdGlvbmFsIGJvb2xlYW4gYXJnIGJlZm9yZSB0aGlzIHZhbHVlIGluIHRoZQotICB2YXItYXJncyBsaXN0IHBhc3NlZCB0byAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sI2dzdC10cmFjZXItcmVjb3JkLWxvZyIgdGl0bGU9ImdzdF90cmFjZXJfcmVjb3JkX2xvZ8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RyYWNlcl9yZWNvcmRfbG9nKCk8L2NvZGU+PC9hPi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRSQUNFUi1WQUxVRS1GTEFHUy1BR0dSRUdBVEVEOkNBUFMiPjwvYT5HU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX0FHR1JFR0FURUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHZhbHVlIGlzIGNvbWJpbmVkIHNpbmNlIHRoZSBzdGFydCBvZgotICB0cmFjaW5nPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmFjZXJWYWx1ZVNjb3BlIj48L2E+PGgzPmVudW0gR3N0VHJhY2VyVmFsdWVTY29wZTwvaDM+Ci08cD5UcmFjaW5nIHJlY29yZCB3aWxsIGNvbnRhaW4gZmllbGRzIHRoYXQgY29udGFpbiBhIG1lYXNzdXJlZCB2YWx1ZSBvciBleHRyYQotbWV0YS1kYXRhLiBPbmUgc3VjaCBtZXRhIGRhdGEgYXJlIHZhbHVlcyB0aGF0IHRlbGwgd2hlcmUgYSBtZWFzdXJlbWVudCB3YXMKLXRha2VuLiBUaGlzIGVudW1lcmF0aW5nIGRlY2xhcmVzIHRvIHdoaWNoIHNjb3BlIHN1Y2ggYSBtZXRhIGRhdGEgZmllbGQKLXJlbGF0ZXMgdG8uIElmIGl0IGlzIGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sI0dTVC1UUkFDRVItVkFMVUUtU0NPUEUtUEFEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRDwvY29kZT48L2E+LCB0aGVuIGVhY2ggb2YgdGhlIGxvZwotZXZlbnRzIG1heSBjb250YWluIHZhbHVlcyBmb3IgZGlmZmVyZW50IDxhIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRzPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHJhY2VyVmFsdWVTY29wZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UUkFDRVItVkFMVUUtU0NPUEUtUFJPQ0VTUzpDQVBTIj48L2E+R1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QUk9DRVNTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSB2YWx1ZSBpcyByZWxhdGVkIHRvIHRoZSBwcm9jZXNzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UUkFDRVItVkFMVUUtU0NPUEUtVEhSRUFEOkNBUFMiPjwvYT5HU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgdmFsdWUgaXMgcmVsYXRlZCB0byBhIHRocmVhZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVFJBQ0VSLVZBTFVFLVNDT1BFLUVMRU1FTlQ6Q0FQUyI+PC9hPkdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfRUxFTUVOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgdmFsdWUgaXMgcmVsYXRlZCB0byBhbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVFJBQ0VSLVZBTFVFLVNDT1BFLVBBRDpDQVBTIj48L2E+R1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QQUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIHZhbHVlIGlzIHJlbGF0ZWQgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL0dzdFR5cGVGaW5kRmFjdG9yeS5odG1sIGIvZG9jcy9nc3QvaHRtbC9Hc3RUeXBlRmluZEZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlMzdlYi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL0dzdFR5cGVGaW5kRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RUeXBlRmluZEZhY3Rvcnk6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFR5cGVGaW5kRmFjdG9yeS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VHlwZUZpbmRGYWN0b3J5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RUeXBlRmluZEZhY3RvcnkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RUeXBlRmluZEZhY3RvcnkudG9wX29mX3BhZ2UiPjwvYT5Hc3RUeXBlRmluZEZhY3Rvcnk8L3NwYW4+PC9oMj4KLTxwPkdzdFR5cGVGaW5kRmFjdG9yeSDigJQgSW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJlZCB0eXBlZmluZCBmdW5jdGlvbnM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHlwZUZpbmRGYWN0b3J5LmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWxpc3QiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3TCoCgpIj5nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqIGNvbnN0ICoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtZXh0ZW5zaW9ucyIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9uc8KgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9uczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1jYXBzIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzwqAoKSI+Z3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktaGFzLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2hhc19mdW5jdGlvbsKgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9oYXNfZnVuY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktY2FsbC1mdW5jdGlvbiIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uwqAoKSI+Z3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUeXBlRmluZEZhY3Rvcnkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNHc3RUeXBlRmluZEZhY3Rvcnktc3RydWN0IiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij5Hc3RUeXBlRmluZEZhY3Rvcnk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kRmFjdG9yeS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RUeXBlRmluZEZhY3RvcnkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUeXBlRmluZEZhY3RvcnkuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHlwZUZpbmRGYWN0b3J5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZXNlIGZ1bmN0aW9ucyBhbGxvdyBxdWVyeWluZyBpbmZvcm1hdGlvbnMgYWJvdXQgcmVnaXN0ZXJlZCB0eXBlZmluZAotZnVuY3Rpb25zLiBIb3cgdG8gY3JlYXRlIGFuZCByZWdpc3RlciB0aGVzZSBmdW5jdGlvbnMgaXMgZGVzY3JpYmVkIGluCi10aGUgc2VjdGlvbiA8R1RLRE9DTElOSyBIUkVGPSJnc3RyZWFtZXItV3JpdGluZy10eXBlZmluZC1mdW5jdGlvbnMiPgotIldyaXRpbmcgdHlwZWZpbmQgZnVuY3Rpb25zIjwvR1RLRE9DTElOSz4uPC9wPgotPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byB3cml0ZSBhIHZlcnkgc2ltcGxlIHR5cGVmaW5kZXIgdGhhdAotaWRlbnRpZmllcyB0aGUgZ2l2ZW4gZGF0YS4gWW91IGNhbiBnZXQgcXVpdGUgYSBiaXQgbW9yZSBjb21wbGljYXRlZCB0aGFuCi10aGF0IHRob3VnaC48L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTcKLTgKLTkKLTEwCi0xMQotMTIKLTEzCi0xNAotMTUKLTE2Ci0xNwotMTgKLTE5Ci0yMAotMjEKLTIyCi0yMwotMjQKLTI1Ci0yNgotMjcKLTI4Ci0yOQotMzAKLTMxCi0zMgotMzMKLTM0Ci0zNQotMzYKLTM3Ci0zOAotMzk8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJndGtkb2Mga3djIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+c3RydWN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgZ3VpbnQ4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmRhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgZ3VpbnQgc2l6ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBndWludCBwcm9iYWJpbGl0eTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBHc3RDYXBzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmRhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPiBNeVR5cGVGaW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+c3RhdGljIHZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm15X3BlZWs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmdwb2ludGVyIGRhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ2ludDY0IG9mZnNldDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBndWludCBzaXplPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgTXlUeXBlRmluZCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5maW5kIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49ICg8L3NwYW4+TXlUeXBlRmluZCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kik8L3NwYW4+IGRhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5vZmZzZXQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiZndDs9PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+JmFtcDsmYW1wOzwvc3Bhbj4gb2Zmc2V0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4rPC9zcGFuPiBzaXplIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4mbHQ7PTwvc3Bhbj4gZmluZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tJmd0Ozwvc3Bhbj5zaXplPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikgezwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiBmaW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPmRhdGEgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPis8L3NwYW4+IG9mZnNldDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+c3RhdGljIHZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm15X3N1Z2dlc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmdwb2ludGVyIGRhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ3VpbnQgcHJvYmFiaWxpdHk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR3N0Q2FwcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5jYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgTXlUeXBlRmluZCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5maW5kIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49ICg8L3NwYW4+TXlUeXBlRmluZCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kik8L3NwYW4+IGRhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5wcm9iYWJpbGl0eSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Jmd0Ozwvc3Bhbj4gZmluZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tJmd0Ozwvc3Bhbj5wcm9iYWJpbGl0eTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHs8L3NwYW4+Ci0gICAgZmluZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tJmd0Ozwvc3Bhbj5wcm9iYWJpbGl0eSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gcHJvYmFiaWxpdHk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZXBsYWNlIj5nc3RfY2Fwc19yZXBsYWNlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPigmYW1wOzwvc3Bhbj5maW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPmNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5zdGF0aWM8L3NwYW4+IEdzdENhcHMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmZpbmRfdHlwZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Z3VpbnQ4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmRhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ3VpbnQgc2l6ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIEdMaXN0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPndhbGs8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAqPC9zcGFuPnR5cGVfbGlzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBNeVR5cGVGaW5kIGZpbmQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gezwvc3Bhbj5kYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHNpemU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59Ozwvc3Bhbj4KLSAgR3N0VHlwZUZpbmQgZ3N0X2ZpbmQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gezwvc3Bhbj5teV9wZWVrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IG15X3N1Z2dlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5maW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgfTs8L3NwYW4+Ci0gIHdhbGsgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IHR5cGVfbGlzdCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWxpc3QiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oKTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj53aGlsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+d2FsazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHs8L3NwYW4+Ci0gICAgR3N0VHlwZUZpbmRGYWN0b3J5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmZhY3RvcnkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1RZUEVfRklORF9GQUNUT1JZPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj53YWxrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPmRhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgd2FsayA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjZy1saXN0LW5leHQiPmdfbGlzdF9uZXh0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+d2FsazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWNhbGwtZnVuY3Rpb24iPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZmFjdG9yeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPmdzdF9maW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjZy1saXN0LWZyZWUiPmdfbGlzdF9mcmVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dHlwZV9saXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiBmaW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+Y2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn07PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUeXBlRmluZEZhY3RvcnkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtbGlzdCI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdHlwZWZpbmQgZmFjdG9yaWVzLiBZb3UgbXVzdCBmcmVlIHRoZQotbGlzdCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1saXN0LWZyZWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGUgcmV0dXJuZWQgZmFjdG9yaWVzIGFyZSBzb3J0ZWQgYnkgaGlnaGVzdCByYW5rIGZpcnN0LCBhbmQgdGhlbiBieQotZmFjdG9yeSBuYW1lLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbGlzdCBvZiBhbGwKLXJlZ2lzdGVyZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LlR5cGVGaW5kRmFjdG9yeV08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtZXh0ZW5zaW9ucyI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2V4dGVuc2lvbnPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCogY29uc3QgKgotZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgZXh0ZW5zaW9ucyBhc3NvY2lhdGVkIHdpdGggYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZhY3Rvcnk8L3NwYW4+PC9hPi4gVGhlIHJldHVybmVkCi1hcnJheSBzaG91bGQgbm90IGJlIGNoYW5nZWQuIElmIHlvdSBuZWVkIHRvIGNoYW5nZSBzdHVmZiBpbiBpdCwgeW91IHNob3VsZAotY29weSBpdCB1c2luZyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdHJpbmctVXRpbGl0eS1GdW5jdGlvbnMuaHRtbCNnLXN0cmR1cHYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19zdHJkdXB2KCk8L2NvZGU+PC9hPi4gIFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdG8gaW5kaWNhdGUKLWEgMC1sZW5ndGggbGlzdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWV4dGVuc2lvbnMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1leHRlbnNpb25zLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gICAgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4tdGVybWluYXRlZCBhcnJheSBvZiBleHRlbnNpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhY3RvcnkuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gdXRmOF1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1jYXBzIj48L2E+PGgzPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2Fwc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gYXNzb2NpYXRlZCB3aXRoIGEgdHlwZWZpbmQgZmFjdG9yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1jYXBzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhY3RvcnkuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtZmFjdG9yeS1oYXMtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9mYWN0b3J5X2hhc19mdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2hhc19mdW5jdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIHdoZXRoZXIgdGhlIGZhY3RvcnkgaGFzIGEgdHlwZWZpbmQgZnVuY3Rpb24uIFR5cGVmaW5kIGZhY3Rvcmllcwotd2l0aG91dCB0eXBlZmluZCBmdW5jdGlvbnMgYXJlIGEgbGFzdC1lZmZvcnQgZmFsbGJhY2sgbWVjaGFuaXNtIHRvCi1lLmcuIGFzc3VtZSBhIGNlcnRhaW4gbWVkaWEgdHlwZSBiYXNlZCBvbiB0aGUgZmlsZSBleHRlbnNpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWhhcy1mdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWZhY3RvcnktaGFzLWZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBmYWN0b3J5IGhhcyBhIHR5cGVmaW5kIGZ1bmN0aW9ucyBzZXQsIG90aGVyd2lzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWZhY3RvcnktY2FsbC1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4gKmZhY3Rvcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gKmZpbmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsbHMgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZEZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZ1bmN0aW9uPC9zcGFuPjwvYT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmFjdG9yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWZhY3RvcnktY2FsbC1mdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mYWN0b3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZhY3Rvcnk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcHJvcGVybHkgc2V0dXAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiBlbnRyeS4gVGhlIGdldF9kYXRhCi1hbmQgc3VnZ2VzdF90eXBlIG1lbWJlcnMgbXVzdCBiZSBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kRmFjdG9yeS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VHlwZUZpbmRGYWN0b3J5LXN0cnVjdCI+PC9hPjxoMz5Hc3RUeXBlRmluZEZhY3Rvcnk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RUeXBlRmluZEZhY3RvcnkgR3N0VHlwZUZpbmRGYWN0b3J5OzwvcHJlPgotPHA+T3BhcXVlIG9iamVjdCB0aGF0IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHR5cGVmaW5kIGZ1bmN0aW9uLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2Fubm90YXRpb24tZ2xvc3NhcnkuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjRjMmU0Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Bbm5vdGF0aW9uIEdsb3NzYXJ5OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXgxMC5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjAuNSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfZ2xvc3NhcnkiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2dsc0EiPkE8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzQyI+QzwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNnbHNFIj5FPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2dsc0kiPkk8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzTSI+TTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNnbHNOIj5OPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2dsc08iPk88L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzUiI+UjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNnbHNTIj5TPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2dsc1QiPlQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzViI+VjwvYT48L3NwYW4+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJpeDEwLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InJpZ2h0LWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJnbG9zc2FyeSI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDEgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3NhcnkiPjwvYT5Bbm5vdGF0aW9uIEdsb3NzYXJ5PC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxhIG5hbWU9Imdsc0EiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5BPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1hbGxvdy1ub25lIj48L2E+YWxsb3ctbm9uZTwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+TlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1hcnJheSI+PC9hPmFycmF5PC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5QYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLjwvcD48L2RkPgotPGEgbmFtZT0iZ2xzQyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkM8L2gzPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWNsb3N1cmUiPjwvYT5jbG9zdXJlPC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5UaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS48L3A+PC9kZD4KLTxhIG5hbWU9Imdsc0UiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5FPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1lbGVtZW50LXR5cGUiPjwvYT5lbGVtZW50LXR5cGU8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuPC9wPjwvZGQ+Ci08YSBuYW1lPSJnbHNJIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+STwvaDM+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0taW4iPjwvYT5pbjwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+UGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyA8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+LjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWlub3V0Ij48L2E+aW5vdXQ8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPlBhcmFtZXRlciBmb3IgaW5wdXQgYW5kIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyA8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+LjwvcD48L2RkPgotPGEgbmFtZT0iZ2xzTSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPk08L2gzPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLW1ldGhvZCI+PC9hPm1ldGhvZDwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+VGhpcyBpcyBhIG1ldGhvZDwvcD48L2RkPgotPGEgbmFtZT0iZ2xzTiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPk48L2gzPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLW51bGxhYmxlIj48L2E+bnVsbGFibGU8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPk5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS48L3A+PC9kZD4KLTxhIG5hbWU9Imdsc08iPjwvYT48aDMgY2xhc3M9InRpdGxlIj5PPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1vdXQiPjwvYT5vdXQ8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPi48L3A+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1vdXQlMjBjYWxsZWUtYWxsb2NhdGVzIj48L2E+b3V0IGNhbGxlZS1hbGxvY2F0ZXM8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPk91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tb3V0JTIwY2FsbGVyLWFsbG9jYXRlcyI+PC9hPm91dCBjYWxsZXItYWxsb2NhdGVzPC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5PdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLjwvcD48L2RkPgotPGEgbmFtZT0iZ2xzUiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlI8L2gzPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXJlbmFtZS10byI+PC9hPnJlbmFtZS10bzwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+UmVuYW1lIHRoZSBvcmlnaW5hbCBzeW1ib2wncyBuYW1lIHRvIFNZTUJPTC48L3A+PC9kZD4KLTxhIG5hbWU9Imdsc1MiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5TPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1zY29wZSUyMGFzeW5jIj48L2E+c2NvcGUgYXN5bmM8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPlRoZSBjYWxsYmFjayBpcyB2YWxpZCB1bnRpbCBmaXJzdCBjYWxsZWQuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tc2NvcGUlMjBjYWxsIj48L2E+c2NvcGUgY2FsbDwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+VGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tc2tpcCI+PC9hPnNraXA8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy48L3A+PC9kZD4KLTxhIG5hbWU9Imdsc1QiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS10cmFuc2ZlciUyMGNvbnRhaW5lciI+PC9hPnRyYW5zZmVyIGNvbnRhaW5lcjwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+RnJlZSBkYXRhIGNvbnRhaW5lciBhZnRlciB0aGUgY29kZSBpcyBkb25lLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwZmxvYXRpbmciPjwvYT50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+QWxpYXMgZm9yIDxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT4sIHVzZWQgZm9yIG9iamVjdHMgd2l0aCBmbG9hdGluZyByZWZzLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwZnVsbCI+PC9hPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwbm9uZSI+PC9hPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXR5cGUiPjwvYT50eXBlPC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5PdmVycmlkZSB0aGUgcGFyc2VkIEMgdHlwZSB3aXRoIGdpdmVuIHR5cGUuPC9wPjwvZGQ+Ci08YSBuYW1lPSJnbHNWIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VjwvaDM+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tdmlydHVhbCI+PC9hPnZpcnR1YWw8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPlRoaXMgaXMgdGhlIGludm9rZXIgZm9yIGEgdmlydHVhbCBtZXRob2QuPC9wPjwvZGQ+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdC1idWlsZGluZy5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3QtYnVpbGRpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5YmVlMS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdC1idWlsZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5CdWlsZGluZyBHU3RyZWFtZXIgYW5kIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBPdmVydmlldyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIE92ZXJ2aWV3Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXJ1bm5pbmcuaHRtbCIgdGl0bGU9IlJ1bm5pbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXJ1bm5pbmcuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtYnVpbGRpbmciPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5CdWlsZGluZyBHU3RyZWFtZXIgYW5kIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L3NwYW4+PC9oMj4KLTxwPkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyDigJQgCi1Ib3cgdG8gYnVpbGQgdGhlIEdTdHJlYW1lciBmcmFtZXdvcmsgYW5kIGFwcGxpY2F0aW9ucyB1c2luZyBpdC4KLTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjIuNS4zIj48L2E+PGgyPkJ1aWxkaW5nIEdTdHJlYW1lciBvbiBVTklYPC9oMj4KLTxwPgotICAgIE9uIFVOSVgsIEdTdHJlYW1lciB1c2VzIHRoZSBzdGFuZGFyZCBHTlUgYnVpbGQgc3lzdGVtLAotICAgIHVzaW5nIDxzcGFuIGNsYXNzPSJhcHBsaWNhdGlvbiI+YXV0b2NvbmY8L3NwYW4+IGZvciBwYWNrYWdlCi0gICAgY29uZmlndXJhdGlvbiBhbmQgcmVzb2x2aW5nIHBvcnRhYmlsaXR5IGlzc3VlcywKLSAgICA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPmF1dG9tYWtlPC9zcGFuPiBmb3IgYnVpbGRpbmcgbWFrZWZpbGVzCi0gICAgdGhhdCBjb21wbHkgd2l0aCB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMsIGFuZAotICAgIDxzcGFuIGNsYXNzPSJhcHBsaWNhdGlvbiI+bGlidG9vbDwvc3Bhbj4gZm9yIGJ1aWxkaW5nIHNoYXJlZAotICAgIGxpYnJhcmllcyBvbiBtdWx0aXBsZSBwbGF0Zm9ybXMuICBUaGUgbm9ybWFsIHNlcXVlbmNlIGZvcgotICAgIGNvbXBpbGluZyBhbmQgaW5zdGFsbGluZyB0aGUgR1N0cmVhbWVyIGxpYnJhcnkgaXMgdGh1czoKLQotICAgIDwvcD4KLTxkaXYgY2xhc3M9ImxpdGVyYWxsYXlvdXQiPjxwPjxicj4KLcKgwqDCoMKgwqDCoDxzdHJvbmcgY2xhc3M9InVzZXJpbnB1dCI+PGNvZGU+Li9jb25maWd1cmU8L2NvZGU+PC9zdHJvbmc+PGJyPgotwqDCoMKgwqDCoMKgPHN0cm9uZyBjbGFzcz0idXNlcmlucHV0Ij48Y29kZT5tYWtlPC9jb2RlPjwvc3Ryb25nPjxicj4KLcKgwqDCoMKgwqDCoDxzdHJvbmcgY2xhc3M9InVzZXJpbnB1dCI+PGNvZGU+bWFrZcKgaW5zdGFsbDwvY29kZT48L3N0cm9uZz48YnI+Ci3CoMKgwqDCoDwvcD48L2Rpdj4KLTxwPgotICA8L3A+Ci08cD4KLSAgICBUaGUgc3RhbmRhcmQgb3B0aW9ucyBwcm92aWRlZCBieSA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPkdOVQotICAgIGF1dG9jb25mPC9zcGFuPiBtYXkgYmUgcGFzc2VkIHRvIHRoZQotICAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmNvbmZpZ3VyZTwvc3Ryb25nPjwvc3Bhbj4gc2NyaXB0LiAgUGxlYXNlIHNlZSB0aGUKLSAgICA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPmF1dG9jb25mPC9zcGFuPiBkb2N1bWVudGF0aW9uIG9yIHJ1bgotICAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPi4vY29uZmlndXJlIC0taGVscDwvc3Ryb25nPjwvc3Bhbj4gZm9yIGluZm9ybWF0aW9uIGFib3V0Ci0gICAgdGhlIHN0YW5kYXJkIG9wdGlvbnMuCi0gIDwvcD4KLTxwPgotICAgIEluIGFkZGl0aW9uIHRoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMgdG8gYWN0aXZhdGUgb3IgZGVhY3RpdmF0ZSBmZWF0dXJlcy4KLSAgICBFLmcuIHBhc3NpbmcgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kaXNhYmxlLWdzdC1kZWJ1ZzwvY29kZT4gdG8gPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+Y29uZmlndXJlPC9zdHJvbmc+PC9zcGFuPgotICAgIHdpbGwgdHVybiB0aGUgZGVidWdnaW5nIHN1YnN5c3RlbSBpbnRvIGEgbm9uLWZ1bmN0aW9uYWwgc3R1YiBhbmQgcmVtb3ZlIGFsbAotICAgIG1hY3JvIGJhc2VkIGludm9jYXRpb25zIGZyb20gd2l0aGluIHRoZSBsaWJyYXJ5IChhbmQgYW55dGhpbmcgY29tcGlsZWQKLSAgICBhZ2FpbnN0IHRoZSBsaWJyYXJ5IGFmdGVyd2FyZHMuKQotICA8L3A+Ci08cD4KLSAgICBJZiBsaWJyYXJ5IHNpemUgbWF0dGVycyBhbmQgb25lIGJ1aWxkcyBpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQsIGl0IGlzCi0gICAgYWxzbyBwb3NzaWJsZSB0byB0b3RhbGx5IHJlbW92ZSBzdWJzeXN0ZW0gY29kZS4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IG5vdAotICAgIG9mZmVyZWQgYXMgYSBjb25maWd1cmUgb3B0aW9uIGFzIGl0IGNhdXNlcyBhbiBBQkkgYnJlYWsuIENvZGUgYnVpbHQgYWdhaW5zdAotICAgIGEgdmVyc2lvbiBvZiBHU3RyZWFtZXIgd2l0aG91dCB0aGVzZSBtb2RpZmljYXRpb25zIG5lZWRzIHRvIGJlIHJlY29tcGlsZWQuCi0KLSAgICA8L3A+Ci08ZGl2IGNsYXNzPSJsaXRlcmFsbGF5b3V0Ij48cD48YnI+Ci3CoMKgwqDCoMKgwqA8c3Ryb25nIGNsYXNzPSJ1c2VyaW5wdXQiPjxjb2RlPm1ha2XCoENGTEFHUz0iLURHU1RfUkVNT1ZFX0RFUFJFQ0FURUTCoC1ER1NUX1JFTU9WRV9ESVNBQkxFRCI8L2NvZGU+PC9zdHJvbmc+PGJyPgotwqDCoMKgwqA8L3A+PC9kaXY+Ci08cD4KLQotICAgIDwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj5HU1RfUkVNT1ZFX0RFUFJFQ0FURUQ8L3NwYW4+IC0gT21pdCBkZXByZWNhdGVkIGZ1bmN0aW9ucwotICAgICAgICAgIGZyb20gdGhlIGxpYnJhcnkuCi0gICAgICAgIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+R1NUX1JFTU9WRV9ESVNBQkxFRDwvc3Bhbj4gLSBPbWl0IHN0dWJzIGZvciBkaXNhYmxlZAotICAgICAgICAgIHN1YnN5c3RlbXMgZnJvbSB0aGUgbGlicmFyeS4KLSAgICAgICAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+Ci0gIDwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4yLjUuNCI+PC9hPjxoMj5CdWlsZGluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC9oMj4KLTxwPgotQXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgY2FuIHVzZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5wa2ctY29uZmlnPC9zdHJvbmc+PC9zcGFuPiB0byBnZXQgYWxsIHRoZQotbmVlZGVkIGNvbXBpbGVyIGFuZCBsaW5rZXIgZmxhZ3MgdG8gYnVpbGQgYWdhaW5zdCBHU3RyZWFtZXIuIFBsZWFzZSBub3RlIHRoYXQKLUdTdHJlYW1lciBpcyBzcGxpdCBpbnRvIHNldmVyYWwgbGlicmFyaWVzIGl0c2VsZi4KLTxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnBrZy1jb25maWcgLS1saXN0LWFsbCB8IGdyZXAgZ3N0cmVhbWVyPC9zdHJvbmc+PC9zcGFuPiB3aWxsIGxpc3QgdGhlCi1hdmFpbGFibGUgbGlicmFyaWVzLgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdC1ydW5uaW5nLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdC1ydW5uaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNWM4ZDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3QtcnVubmluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDA5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5SdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBPdmVydmlldyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1idWlsZGluZy5odG1sIiB0aXRsZT0iQnVpbGRpbmcgR1N0cmVhbWVyIGFuZCBHU3RyZWFtZXIgQXBwbGljYXRpb25zIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LWJ1aWxkaW5nLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcnVubmluZyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPlJ1bm5pbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvc3Bhbj48L2gyPgotPHA+UnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zIOKAlCAKLUhvdyB0byBydW4gYW5kIGRlYnVnIHlvdXIgR1N0cmVhbWVyIGFwcGxpY2F0aW9uCi08L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4yLjYuMyI+PC9hPjxoMj5SdW5uaW5nIGFuZCBkZWJ1Z2dpbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNi4zLjIiPjwvYT48aDM+RW52aXJvbm1lbnQgdmFyaWFibGVzPC9oMz4KLTxwPiAKLUdTdHJlYW1lciBpbnNwZWN0cyBhIGZldyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQKLXZhcmlhYmxlcyBsaWtlIDxjb2RlIGNsYXNzPSJlbnZhciI+TEFORzwvY29kZT4sIDxjb2RlIGNsYXNzPSJlbnZhciI+UEFUSDwvY29kZT4gb3IgPGNvZGUgY2xhc3M9ImVudmFyIj5IT01FPC9jb2RlPi4gCi08L3A+Ci08cD48YSBuYW1lPSJHU1RfUExVR0lOX1NZU1RFTV9QQVRIIj48L2E+PGI+PGNvZGUgY2xhc3M9ImVudmFyIj5HU1RfUExVR0lOX1NZU1RFTV9QQVRIPC9jb2RlPiwKLSAgICAgICAgIDxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA8L2NvZGU+LsKgPC9iPgotCi1UaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyAob3IKLXNlbWljb2xvbi1zZXBhcmF0ZWQgbGlzdCBvbiBXaW5kb3dzKS4KLUlmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCwgR1N0cmVhbWVyIHdpbGwgZmlsbCBpbiB0aGlzIGxpc3QgZm9yIHlvdQotd2l0aAotPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotcGx1Zy1pbnMgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgb3IgcmF0aGVyIHRoZSB1c2VyJ3MgImRhdGEgaG9tZSIKLWRpcmVjdG9yeSBhY2NvcmRpbmcgdG8gdGhlIHhkZyBiYXNlIGRpciBzcGVjaWZpY2F0aW9uLiBVc3VhbGx5IHRoaXMgd2lsbCBiZQotYSBkaXJlY3RvcnkgY2FsbGVkCi08Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnBsdWdpbnM8L2NvZGU+IGluc2lkZSB0aGUKLTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+LmxvY2FsL3NoYXJlL2dzdHJlYW1lci0xLjA8L2NvZGU+IGRpcmVjdG9yeSBpbgotdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBieSBkZWZhdWx0LCB0aG91Z2ggdGhpcyBzZWFyY2ggcGF0aCBtYXkgY2hhbmdlIGlmCi10aGUgWERHX0RBVEFfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuCi0gICAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLXBsdWctaW5zIGluc3RhbGxlZCBzeXN0ZW0td2lkZS4gIE9uIHRoaXMgc3lzdGVtLCB0aGV5IGFyZSBzdG9yZWQgaW4KLTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Vzci9sb2NhbC9saWIvZ3N0cmVhbWVyLTEuMDwvY29kZT4uCi0gICAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+Ci0gICAKLUdTdHJlYW1lciB3aWxsIHNjYW4gdGhlc2UgcGF0aHMgZm9yIEdTdHJlYW1lciBwbHVnLWlucy4gIFRoZXNlIHBsdWctaW5zIHdpbGwKLWJlIGxvYWRlZCBhZnRlciB0aGUgcGx1Zy1pbnMgaW4gdGhlIEdTVF9QTFVHSU5fUEFUSCB2YXJpYWJsZSBiZWxvdy4KLQotVGhlIHBhdGhzIGFyZSBzY2FubmVkIGluIHRoZSBnaXZlbiBvcmRlci4gIFRoaXMgYWxsb3dzIGEgdXNlciB0byBvdmVycmlkZQotc3lzdGVtLWluc3RhbGxlZCBwbHVnLWlucyB3aXRoIGhpcyBvd24gdmVyc2lvbnMuCi0gICAKLVRoZSBHU1RfUExVR0lOX1NZU1RFTV9QQVRIXzFfMCB2YXJpYW50IGlzIHVzZWZ1bCBpZiBib3RoIHRoZSBvbGQgR1N0cmVhbWVyIDAuMTAKLXZlcnNpb24gYW5kIHRoZSBuZXcgR1N0cmVhbWVyIDEuMCB2ZXJzaW9uIG5lZWQgdG8gYmUgcG9pbnRlZCB0byBuZXcgcGx1Z2luCi1wYXRocy4gVGhlIGxhdHRlciB3aWxsIHVzZSB0aGUgXzFfMCB2YXJpYW50IG92ZXIgdGhlIG5vbi12ZXJzaW9uZWQgb25lIGlmCi1pdCBpcyBzZXQuCi0gIAotU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGFuIGVtcHR5IHN0cmluZyB3aWxsIGNhdXNlIEdTdHJlYW1lciBub3QgdG8gc2NhbiBhbnkKLXN5c3RlbSBwYXRocyBhdCBhbGwgZm9yIHBsdWctaW5zLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSdyZSBydW5uaW5nCi11bmluc3RhbGxlZCAoZm9yIGRldmVsb3BtZW50IHB1cnBvc2VzKSBvciB3aGlsZSBydW5uaW5nIHRlc3RzdWl0ZXMuCi0gICA8L3A+Ci08cD48YSBuYW1lPSJHU1RfUExVR0lOX1BBVEgiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9QTFVHSU5fUEFUSDwvY29kZT4sIDxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX1BMVUdJTl9QQVRIXzFfMDwvY29kZT4uwqA8L2I+Ci1UaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyAob3IgYQotc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IG9uIFdpbmRvd3MpLgotR1N0cmVhbWVyIHdpbGwgc2NhbiB0aGVzZSBwYXRocyBmb3IgR1N0cmVhbWVyIHBsdWctaW5zLiAgVGhlc2UgcGx1Zy1pbnMgd2lsbAotYmUgbG9hZGVkIGluIGFkZGl0aW9uIHRvLCBhbmQgYmVmb3JlLCB0aGUgcGx1Zy1pbnMgaW4gdGhlIHN5c3RlbSBwYXRocy4KLSAgCi1UaGUgR1NUX1BMVUdJTl9QQVRIXzFfMCB2YXJpYW50IGlzIHVzZWZ1bCBpZiBib3RoIHRoZSBvbGQgR1N0cmVhbWVyIDAuMTAKLXZlcnNpb24gYW5kIHRoZSBuZXcgR1N0cmVhbWVyIDEuMCB2ZXJzaW9uIG5lZWQgdG8gYmUgcG9pbnRlZCB0byBuZXcgcGx1Z2luCi1wYXRocy4gVGhlIGxhdHRlciB3aWxsIHVzZSB0aGUgXzFfMCB2YXJpYW50IG92ZXIgdGhlIG5vbi12ZXJzaW9uZWQgb25lIGlmCi1pdCBpcyBzZXQuCi0gIDwvcD4KLTxwPjxhIG5hbWU9IkdTVF9ERUJVRyI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0RFQlVHPC9jb2RlPi7CoDwvYj4KLUlmIEdTdHJlYW1lciBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1lbmFibGUtZ3N0LWRlYnVnPXllczwvY29kZT4sCi10aGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBsaXN0IG9mIGRlYnVnIG9wdGlvbnMsIHdoaWNoIGNhdXNlIEdTdHJlYW1lcgotdG8gcHJpbnQgb3V0IGRpZmZlcmVudCB0eXBlcyBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gc3RkZXJyLgotICAKLVRoZSB2YXJpYWJsZSB0YWtlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mICJjYXRlZ29yeV9uYW1lOmxldmVsIiBwYWlycwotdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgdGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4KLVRoZSBsZXZlbCB2YWx1ZSByYW5nZXMgZnJvbSAwIChub3RoaW5nKSB0byA5IChNRU1EVU1QKS4KLSAgICA8L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjEgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5FUlJPUjwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+PHA+Ci1Mb2dzIGFsbCBmYXRhbCBlcnJvcnMuICBUaGVzZSBhcmUgZXJyb3JzIHRoYXQgZG8gbm90IGFsbG93IHRoZSBjb3JlIG9yIGVsZW1lbnRzCi10byBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgYWN0aW9uLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBzdGlsbCByZWNvdmVyIGlmCi1wcm9ncmFtbWVkIHRvIGhhbmRsZSB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXJlZCB0aGUgZXJyb3IuCi08L3A+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjIgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5XQVJOSU5HPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD4KLUxvZ3MgYWxsIHdhcm5pbmdzLiAgVHlwaWNhbGx5IHRoZXNlIGFyZSBub24tZmF0YWwsIGJ1dCB1c2VyLXZpc2libGUgcHJvYmxlbXMKLWFyZSBleHBlY3RlZCB0byBoYXBwZW4uCi08L3A+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjMgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5GSVhNRTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+PHA+Ci1Mb2dzIGFsbCBmaXhtZSBtZXNzYWdlcy4gRml4bWUgbWVzc2FnZXMgYXJlIG1lc3NhZ2VzIHRoYXQgaW5kaWNhdGUgdGhhdCBzb21ldGhpbmcKLWluIHRoZSBleGVjdXRlZCBjb2RlIHBhdGggaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIG9yIGhhbmRsZWQgeWV0LiAgVGhlIHB1cnBvc2UKLW9mIHRoaXMgbWVzc2FnZSBpcyB0byBtYWtlIGl0IGVhc2llciB0byBzcG90IGluY29tcGxldGUvdW5maW5pc2hlZCBwaWVjZXMgb2YKLWNvZGUgd2hlbiByZWFkaW5nIHRoZSBkZWJ1ZyBsb2cuCi08L3A+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjQgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5JTkZPPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD4KLUxvZ3MgYWxsIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMuICBUaGVzZSBhcmUgdHlwaWNhbGx5IHVzZWQgZm9yIGV2ZW50cyBpbgotdGhlIHN5c3RlbSB0aGF0IG9ubHkgaGFwcGVuIG9uY2UsIG9yIGFyZSBpbXBvcnRhbnQgYW5kIHJhcmUgZW5vdWdoIHRvIGJlCi1sb2dnZWQgYXQgdGhpcyBsZXZlbC4KLTwvcD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+NSAtIDxjb2RlIGNsYXNzPSJvcHRpb24iPkRFQlVHPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD4KLUxvZ3MgYWxsIGRlYnVnIG1lc3NhZ2VzLiAgVGhlc2UgYXJlIGdlbmVyYWwgZGVidWcgbWVzc2FnZXMgZm9yIGV2ZW50cwotdGhhdCBoYXBwZW4gb25seSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHRpbWVzIGR1cmluZyBhbiBvYmplY3QncyBsaWZldGltZTsKLXRoZXNlIGluY2x1ZGUgc2V0dXAsIHRlYXJkb3duLCBjaGFuZ2Ugb2YgcGFyYW1ldGVycywgLi4uCi08L3A+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjYgLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5MT0c8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgotPHRkPjxwPgotTG9ncyBhbGwgbG9nIG1lc3NhZ2VzLiAgVGhlc2UgYXJlIG1lc3NhZ2VzIGZvciBldmVudHMKLXRoYXQgaGFwcGVuIHJlcGVhdGVkbHkgZHVyaW5nIGFuIG9iamVjdCdzIGxpZmV0aW1lOwotdGhlc2UgaW5jbHVkZSBzdHJlYW1pbmcgYW5kIHN0ZWFkeS1zdGF0ZSBjb25kaXRpb25zLgotPC9wPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj43IC0gPGNvZGUgY2xhc3M9Im9wdGlvbiI+VFJBQ0U8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgotPHRkPjxwPgotTG9ncyBhbGwgdHJhY2UgbWVzc2FnZXMuICBUaGVzZSBtZXNzYWdlcyBmb3IgZXZlbnRzCi10aGF0IGhhcHBlbiByZXBlYXRlZGx5IGR1cmluZyBhbiBvYmplY3QncyBsaWZldGltZSBzdWNoIGFzIHRoZQotcmVmL3VucmVmIGN5Y2xlcy4KLTwvcD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+OSAtIDxjb2RlIGNsYXNzPSJvcHRpb24iPk1FTURVTVA8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgotPHRkPjxwPgotTG9nIGFsbCBtZW1vcnkgZHVtcCBtZXNzYWdlcy4gTWVtb3J5IGR1bXAgbWVzc2FnZXMgYXJlIHVzZWQgdG8gbG9nCi0oc21hbGwpIGNodW5rcyBvZiBkYXRhIGFzIG1lbW9yeSBkdW1wcyBpbiB0aGUgbG9nLiBUaGV5IHdpbGwgYmUgZGlzcGxheWVkCi1hcyBoZXhkdW1wIHdpdGggQVNDSUkgY2hhcmFjdGVycy4KLTwvcD48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPHA+Ci0KLSBUaGUgY2F0ZWdvcnlfbmFtZSBjYW4gY29udGFpbiAiPGNvZGUgY2xhc3M9Im9wdGlvbiI+KiI8L2NvZGU+IGFzIGEgd2lsZGNhcmQuCi0gIAotRm9yIGV4YW1wbGUsIHNldHRpbmcgPGNvZGUgY2xhc3M9ImVudmFyIj5HU1RfREVCVUc8L2NvZGU+IHRvCi08Y29kZSBjbGFzcz0ib3B0aW9uIj5HU1RfQVVUT1BMVUc6NixHU1RfRUxFTUVOVF8qOjQ8L2NvZGU+LCB3aWxsIGNhdXNlIHRoZQotPGNvZGUgY2xhc3M9Im9wdGlvbiI+R1NUX0FVVE9QTFVHPC9jb2RlPiBjYXRlZ29yeSB0byBiZSBsb2dnZWQgYXQgZnVsbAotPGNvZGUgY2xhc3M9Im9wdGlvbiI+TE9HPC9jb2RlPiBsZXZlbCwgd2hpbGUgYWxsIGNhdGVnb3JpZXMgc3RhcnRpbmcgd2l0aAotPGNvZGUgY2xhc3M9Im9wdGlvbiI+R1NUX0VMRU1FTlRfPC9jb2RlPiB3aWxsIGJlIGxvZ2dlZCBhdCA8Y29kZSBjbGFzcz0ib3B0aW9uIj5JTkZPPC9jb2RlPiBsZXZlbC4KLSAgCi1UbyBnZXQgYWxsIHBvc3NpYmxlIGRlYnVnIG91dHB1dCwgc2V0Ci08Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9ERUJVRzwvY29kZT4KLXRvIDxjb2RlIGNsYXNzPSJvcHRpb24iPio6OTwvY29kZT4uIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4qOjY8L2NvZGU+IGRlYnVnCi1sb2cgaXMgdXN1YWxseSB0aGUgbW9zdCB1c2VmdWwsIGFzIGl0IGNvbnRhaW5zIGFsbCBpbXBvcnRhbnQgaW5mb3JtYXRpb24sIGJ1dAotaGlkZXMgYSBsb3Qgb2Ygbm9pc2Ugc3VjaCBhcyByZWZzL3VucmVmcy4gRm9yIGJ1ZyByZXBvcnRpbmcgcHVycG9zZXMsIGEKLTxjb2RlIGNsYXNzPSJvcHRpb24iPio6NjwvY29kZT4gbG9nIGlzIGFsc28gd2hhdCB3aWxsIGJlIHJlcXVlc3RlZCB1c3VhbGx5LiBJdCdzIG9mdGVuCi1hbHNvIHdvcnRoIHJ1bm5pbmcgd2l0aCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4qOjM8L2NvZGU+IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55Ci1ub24tZmF0YWwgZXJyb3JzIG9yIHdhcm5pbmdzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgcHJvYmxlbSBhdCBoYW5kLgotICAKLVNpbmNlIEdTdHJlYW1lciAxLjIgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGRlYnVnIGxldmVscyBieSBuYW1lLAotZS5nLiBHU1RfREVCVUc9KjpXQVJOSU5HLCphdWRpbyo6TE9HCi0gIDwvcD4KLTxwPjxhIG5hbWU9IkdTVF9ERUJVR19OT19DT0xPUiI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0RFQlVHX05PX0NPTE9SPC9jb2RlPi7CoDwvYj4KLVNldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGFueSB2YWx1ZSAoIjEiIHR5cGljYWxseSkgdG8gc3dpdGNoIG9mZgotY29sb3VyaW5nIGluIEdTVF9ERUJVRyBvdXRwdXQuIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzcGVjaWZ5aW5nIHRoZQotPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1nc3QtZGVidWctbm8tY29sb3I8L2NvZGU+IG9yCi08Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWdzdC1kZWJ1Zy1jb2xvci1tb2RlPC9jb2RlPj1vZmYgY29tbWFuZCBsaW5lIG9wdGlvbiB0bwotd2VsbC1iZWhhdmVkIEdTdHJlYW1lciBhcHBsaWNhdGlvbnMgKGllLiB0aG9zZSB0aGF0IHBhc3MgY29tbWFuZC1saW5lCi1vcHRpb25zIGNvcnJlY3RseSB0byBHU3RyZWFtZXIpLgotVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiBkZWJ1ZyBvdXRwdXQgYW5kIGFsc28gYWxsb3dzCi1mb3IgdGhlIG91dHB1dCB0byBiZSBjb21wcmVzc2VkIG11Y2ggYmV0dGVyIHRoYW4gd2l0aCBjb2xvdXJzIHR1cm5lZCBvbi4KLSAgCi1IYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcgR1NUX0RFQlVHX0NPTE9SX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KLSJvZmYiLgotICA8L3A+Ci08cD48YSBuYW1lPSJHU1RfREVCVUdfQ09MT1JfTU9ERSI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0RFQlVHX0NPTE9SX01PREU8L2NvZGU+LsKgPC9iPgotU2V0IHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY2hhbmdlIGxvZyBjb2xvdXJpbmcgaW4gR1NUX0RFQlVHIG91dHB1dC4KLVBvc3NpYmxlIHZhbHVlczoKLSAgICA8L3A+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPm9uPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD4KLUVuYWJsZXMgZGVidWcgbG9nIG91dHB1dCBjb2xvcmluZy4gVXNlcyBkZWZhdWx0IGNvbG9yaW5nIG1ldGhvZCBmb3IgY3VycmVudAotcGxhdGZvcm0uIFRoaXMgaXMgdGhlIGRlZmF1bHQuCi0gICAgICAgICAgPC9wPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj5vZmY8L2NvZGU+PC9zcGFuPjwvcD48L3RkPgotPHRkPgotPHA+Ci1EaXNhYmxlcyBkZWJ1ZyBsb2cgb3V0cHV0IGNvbG9yaW5nLiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc3BlY2lmeWluZyB0aGUKLTxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZ3N0LWRlYnVnLWNvbG9yLW1vZGU8L2NvZGU+PW9mZiBjb21tYW5kIGxpbmUgb3B0aW9uIHRvCi13ZWxsLWJlaGF2ZWQgR1N0cmVhbWVyIGFwcGxpY2F0aW9ucyAoaWUuIHRob3NlIHRoYXQgcGFzcyBjb21tYW5kLWxpbmUKLW9wdGlvbnMgY29ycmVjdGx5IHRvIEdTdHJlYW1lcikuCi1UaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgdG8gcmVkdWNlIHRoZSBzaXplIG9mIGRlYnVnIG91dHB1dCBhbmQgYWxzbyBhbGxvd3MKLWZvciB0aGUgb3V0cHV0IHRvIGJlIGNvbXByZXNzZWQgbXVjaCBiZXR0ZXIgdGhhbiB3aXRoIGNvbG91cnMgdHVybmVkIG9uLgotICAgICAgICAgIDwvcD4KLTxwPgotSGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzZXR0aW5nIEdTVF9ERUJVR19OT19DT0xPUiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bwotYW55IHZhbHVlLgotICAgICAgICAgIDwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj5hdXRvPC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD4KLVNhbWUgYXMgPGNvZGUgY2xhc3M9Im9wdGlvbiI+b248L2NvZGU+LgotICAgICAgICAgIDwvcD48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+ZGlzYWJsZTwvY29kZT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+PHA+Ci1TYW1lIGFzIDxjb2RlIGNsYXNzPSJvcHRpb24iPm9mZjwvY29kZT4uCi0gICAgICAgICAgPC9wPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj51bml4PC9jb2RlPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD4KLUVuYWJsZXMgZGVidWcgbG9nIG91dHB1dCBjb2xvcmluZyBhbmQgZm9yY2VzIHRoZSB1c2Ugb2YgVU5JWCB0ZXJtaWFsIGNvZGVzCi1mb3IgY29sb3JpbmcsIGV2ZW4gaWYgdGhpcyBtZXRob2QgaXMgbm90IG5vcm1hbGx5IHVzZWQgb24gY3VycmVudCBwbGF0Zm9ybS4KLVRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzcGVjaWZ5aW5nIHRoZQotPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1nc3QtZGVidWctY29sb3ItbW9kZTwvY29kZT49dW5peCBjb21tYW5kIGxpbmUgb3B0aW9uIHRvCi13ZWxsLWJlaGF2ZWQgR1N0cmVhbWVyIGFwcGxpY2F0aW9ucyAoaWUuIHRob3NlIHRoYXQgcGFzcyBjb21tYW5kLWxpbmUgb3B0aW9ucwotY29ycmVjdGx5IHRvIEdTdHJlYW1lcikuCi1UaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgdG8gZHVtcCBkZWJ1ZyBvdXRwdXQgaW50byBhIGZpbGUgb24gbm9uLVVOSVgKLXBsYXRmb3JtcyB0byBiZSBzZW50IHRvIGRldmVsb3BlcnMgd2hvIGhhdmUgdmlld2VycyB0aGF0IHN1cHBvcnQgVU5JWCB0ZXJtaW5hbAotY29kZXMuCi0gICAgICAgICAgPC9wPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08cD4KLSAgPC9wPgotPHA+PGEgbmFtZT0iR1NUX0RFQlVHX09QVElPTlMiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9ERUJVR19PUFRJT05TPC9jb2RlPi7CoDwvYj4KLVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhlIGJlaGF2aW91ciBvZiB0aGUgZGVidWdnaW5nCi1zeXN0ZW0uIEN1cnJlbnRseSB0aGUgb25seSBvcHRpb25zIHN1cHBvcnRlZCBhcmUgInByZXR0eS10YWdzIiBhbmQgImZ1bGwtdGFncyIuCi1JbiAicHJldHR5LXRhZ3MiIG1vZGUgKHRoZSBkZWZhdWx0KSwgdGFnbGlzdHMgaW4gdGhlIGRlYnVnIGxvZyB3aWxsIGJlCi1zZXJpYWxpemVkIHNvIHRoYXQgb25seSB0aGUgZmlyc3QgZmV3IGFuZCBsYXN0IGZldyBieXRlcyBvZiBhIGJ1ZmZlci10eXBlIHRhZwotd2lsbCBiZSBzZXJpYWxpemVkIGludG8gdGhlIGxvZywgdG8gYXZvaWQgZHVtcGluZyBodW5kcmVkcyBvZiBsaW5lcyBvZiB1c2VsZXNzCi1vdXRwdXQgaW50byB0aGUgbG9nIGluIGNhc2Ugb2YgbGFyZ2UgaW1hZ2UgdGFncyBhbmQgdGhlIGxpa2UuCi0gIDwvcD4KLTxwPjxhIG5hbWU9IkdTVF9ERUJVR19EVU1QX0RPVF9ESVIiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9ERUJVR19EVU1QX0RPVF9ESVI8L2NvZGU+LsKgPC9iPgotU2V0IHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBwYXRoIHRvIHR1cm4gb24gYWxsCi0jR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRSBvciAjR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTIGNhbGxzCi1hbmQgaGF2ZSB0aGUgZG90IGZpbGVzIGluIHRoYXQgbG9jYXRpb24uCi0gIAotVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgYXBwbGljYXRpb24gaW4gcXVlc3Rpb24gbWFrZXMgdGhlc2UgY2FsbHMgaW4KLXN0cmF0ZWdpYyBwbGFjZXMgKGxpa2Ugd2hlbiB0aGUgcGlwZWxpbmUgc3RhdGUgY2hhbmdlcyBvciBhbiBlcnJvciBvY2N1cnMpLgotZ3N0LWxhdW5jaC0xLjAgaXMgb25lIHN1Y2ggYXBwbGljYXRpb24uCi0gIAotVGhlc2UgLmRvdCBmaWxlcyBjYW4gdGhlbiBiZSB0dXJuZWQgaW50byBpbWFnZXMgdXNpbmcgdGhlICdkb3QnIHV0aWxpdHkKLWZyb20gdGhlIGdyYXBodml6IHNldCBvZiB0b29scywgbGlrZSB0aGlzOgotICA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5kb3QgZm9vLmRvdCAtVHN2ZyAtbyBmb28uc3ZnPC9zdHJvbmc+PC9zcGFuPiBvcgotICA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5kb3QgZm9vLmRvdCAtVHBuZyAtbyBmb28ucG5nPC9zdHJvbmc+PC9zcGFuPiBvcgotICA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5kb3QgZm9vLmRvdCAtVGpwZyAtbyBmb28uanBnPC9zdHJvbmc+PC9zcGFuPi4KLSAgCi1UaGVyZSBpcyBhbHNvIGEgdXRpbGl0eSBjYWxsZWQgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+eGRvdDwvc3Ryb25nPjwvc3Bhbj4gd2hpY2ggYWxsb3dzIHlvdSB0bwotdmlldyB0aGUgZG90IGZpbGUgZGlyZWN0bHkgd2l0aG91dCBjb252ZXJ0aW5nIGl0IGZpcnN0LgotICA8L3A+Ci08cD48YSBuYW1lPSJHU1RfUkVHSVNUUlkiPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9SRUdJU1RSWTwvY29kZT4sIDxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX1JFR0lTVFJZXzFfMDwvY29kZT4uwqA8L2I+Ci1TZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBtYWtlIEdTdHJlYW1lciB1c2UgYSBkaWZmZXJlbnQgZmlsZSBmb3IgdGhlCi1wbHVnaW4gY2FjaGUgLyByZWdpc3RyeSB0aGFuIHRoZSBkZWZhdWx0IG9uZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBvcGVyYXRpbmcKLWluIGEgc2VwYXJhdGUgZW52aXJvbm1lbnQgd2hpY2ggc2hvdWxkIG5vdCBhZmZlY3QgdGhlIGRlZmF1bHQgY2FjaGUgaW4gdGhlCi11c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCi0gIDwvcD4KLTxwPjxhIG5hbWU9IkdTVF9SRUdJU1RSWV9GT1JLIj48L2E+PGI+PGNvZGUgY2xhc3M9ImVudmFyIj5HU1RfUkVHSVNUUllfRk9SSzwvY29kZT4uwqA8L2I+Ci1TZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAibm8iIHRvIHByZXZlbnQgR1N0cmVhbWVyIGZyb20gZm9ya2luZyBvbgotc3RhcnR1cCBpbiBvcmRlciB0byB1cGRhdGUgdGhlIHBsdWdpbiByZWdpc3RyeS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZwotcHVycG9zZXMsIGJ1dCBzaG91bGQgbm90IGJlIHVzZWQgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIHNpbmNlIGl0IG1lYW5zCi10aGF0IHBsdWdpbnMgbWF5IGJlIGxvYWRlZCBpbnRvIG1lbW9yeSBldmVuIGlmIHRoZXkgYXJlIG5vdCBuZWVkZWQgYnkgdGhlCi1hcHBsaWNhdGlvbi4KLSAgPC9wPgotPHA+PGEgbmFtZT0iR1NUX1JFR0lTVFJZX1VQREFURSI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX1JFR0lTVFJZX1VQREFURTwvY29kZT4uwqA8L2I+Ci1TZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAibm8iIHRvIHByZXZlbnQgR1N0cmVhbWVyIGZyb20gdXBkYXRpbmcgdGhlCi1wbHVnaW4gcmVnaXN0cnkuIFRoaXMgaXMgdXNlZnVsIGZvciBlbWJlZGRlZCBkZXZpY2Ugd2hpY2ggaXMgbm90IHVwZGF0aW5nIHRoZQotcGx1Z2lucyBmcmVxdWVudGx5LCBpdCB3aWxsIHNhdmUgdGltZSB3aGVuIGRvaW5nIGdzdF9pbml0KCkuCi0gIDwvcD4KLTxwPjxhIG5hbWU9IkdTVF9UUkFDRSI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX1RSQUNFPC9jb2RlPi7CoDwvYj4KLSAgICBFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gdHJhY2luZy4gTW9zdCBHU3RyZWFtZXIgb2JqZWN0cyBoYXZlIHN1cHBvcnQgZm9yCi0gICAgdHJhY2luZyB0aGUgbnVtYmVyIG9mIHVuZnJlZWQgb2JqZWN0cyBhbmQgdGhlaXIgbWVtb3J5IHBvaW50ZXJzLgotICAKLVRoZSB2YXJpYWJsZSB0YWtlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRyYWNpbmcgb3B0aW9ucyB0byBlbmFibGUuCi0gICAgPC9wPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5saXZlPC9zcGFuPjwvcD48L3RkPgotPHRkPjxwPgotICBDb3VudHMgYWxsIGxpdmUgb2JqZWN0cyBhbmQgZHVtcHMgYW4gb3ZlcnZpZXcgb2YgdGhlIG51bWJlciBvZiB1bmZyZWVkCi0gIG9iamVjdHMgYXQgcHJvZ3JhbSBleGl0LgotPC9wPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5tZW0tbGl2ZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD48cD4KLSAgS2VlcCB0cmFjayBvZiB0aGUgdW5mcmVlZCBtZW1vcnkgcG9pbnRlcnMgYW5kIGR1bXAgYW4gb3ZlcnZpZXcgb2YgYWxsIHVuZnJlZWQKLSAgbWVtb3J5IGF0IHByb2dyYW0gZXhpdC4gVG9nZXRoZXIgd2l0aCBhIGxldmVsIDkgZGVidWcgbG9nIHRoaXMgY2FuIGJlIHVzZWQgdG8KLSAgZm9sbG93IHRoZSBsaWZlY3ljbGUgb2YgbGVha2VkIG9iamVjdHMgaW4gb3JkZXIgdG8gdHJhY2sgZG93biB3aGVyZSB0aGV5IGFyZQotICBsZWFrZWQuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIG1lbW9yeSBsZWFrcyBpbiBzaXR1YXRpb25zIHdoZXJlCi0gIHRvb2xzIHN1Y2ggYXMgdmFsZ3JpbmQgYXJlIG5vdCBhdmFpbGFibGUsIG9yIG5vdCBhbiBvcHRpb24uCi08L3A+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxwPgotCi0gVXNlIDxjb2RlIGNsYXNzPSJvcHRpb24iPmFsbDwvY29kZT4gdG8gZW5hYmxlIGFsbCB0cmFjaW5nIGZsYWdzLgotICA8L3A+Ci08cD48YSBuYW1lPSJHU1RfREVCVUdfRklMRSI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0RFQlVHX0ZJTEU8L2NvZGU+LsKgPC9iPgotICBTZXQgdGhpcyB2YXJpYWJsZSB0byBhIGZpbGUgcGF0aCB0byByZWRpcmVjdCBhbGwgR1N0cmVhbWVyIGRlYnVnCi0gIG1lc3NhZ2VzIHRvIHRoaXMgZmlsZS4gSWYgbGVmdCB1bnNldCwgZGVidWcgbWVzc2FnZXMgd2l0aCBiZSBvdXRwdXQKLSAgdW50byB0aGUgc3RhbmRhcmQgZXJyb3IuCi0gIDwvcD4KLTxwPjxhIG5hbWU9Ik9SQ19DT0RFIj48L2E+PGI+PGNvZGUgY2xhc3M9ImVudmFyIj5PUkNfQ09ERTwvY29kZT4uwqA8L2I+Ci1Vc2VmdWwgT3JjIGVudmlyb25tZW50IHZhcmlhYmxlLiBTZXQgT1JDX0NPREU9ZGVidWcgdG8gZW5hYmxlIGRlYnVnZ2Vycwotc3VjaCBhcyBnZGIgdG8gY3JlYXRlIHVzZWZ1bCBiYWNrdHJhY2VzIGZyb20gT3JjLWdlbmVyYXRlZCBjb2RlLiAgU2V0Ci1PUkNfQ09ERT1iYWNrdXAgb3IgT1JDX0NPREU9ZW11bGF0ZSBpZiB5b3Ugc3VzcGVjdCBPcmMncyBTSU1EIGNvZGUKLWdlbmVyYXRvciBpcyBwcm9kdWNpbmcgaW5jb3JyZWN0IGNvZGUgKFF1aXRlIGEgZmV3IGltcG9ydGFudAotR1N0cmVhbWVyIHBsdWdpbnMgbGlrZSB2aWRlb3Rlc3RzcmMsIGF1ZGlvY29udmVydCBvciBhdWRpb3Jlc2FtcGxlIHVzZSBPcmMpLgotT25lIGNhbiBhbHNvIGNvbWJpbmUgZmxhZ3MgbGlrZSBPUkNfQ09ERT1iYWNrdXAsZGVidWcuCi0gIDwvcD4KLTxwPjxhIG5hbWU9IkdfREVCVUciPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdfREVCVUc8L2NvZGU+LsKgPC9iPgotVXNlZnVsIEdMaWIgZW52aXJvbm1lbnQgdmFyaWFibGUuIFNldCBHX0RFQlVHPWZhdGFsX3dhcm5pbmdzIHRvIG1ha2UKLUdTdHJlYW1lciBwcm9ncmFtcyBhYm9ydCB3aGVuIGEgY3JpdGljYWwgd2FybmluZyBzdWNoIGFzIGFuIGFzc2VydGlvbiBmYWlsdXJlCi1vY2N1cnMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbmQgb3V0IHdoaWNoIHBhcnQgb2YgdGhlIGNvZGUgY2F1c2VkCi10aGF0IHdhcm5pbmcgdG8gYmUgdHJpZ2dlcmVkIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIFNpbXBseSBzZXQgR19ERUJVRwotYXMgbWVudGlvbmVkIGFib3ZlIGFuZCBydW4gdGhlIHByb2dyYW0gaW4gZ2RiIChvciBsZXQgaXQgY29yZSBkdW1wKS4gVGhlbiBnZXQKLWEgc3RhY2sgdHJhY2UgaW4gdGhlIHVzdWFsIHdheS4KLSAgPC9wPgotPHA+PGEgbmFtZT0iR19TTElDRSI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R19TTElDRTwvY29kZT4uwqA8L2I+Ci1Vc2VmdWwgR0xpYiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gU2V0IEdfU0xJQ0U9YWx3YXlzLW1hbGxvYyB3aGVuIHJ1bm5pbmcKLUdTdHJlYW1lciBwcm9ncmFtcyBpbiB2YWxncmluZCwgb3IgZGVidWdnaW5nIG1lbW9yeSBsZWFrcyB3aXRoIG90aGVyIHRvb2xzLgotU2VlIHRoZSBHTGliIEFQSSByZWZlcmVuY2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgPC9wPgotPHA+PGEgbmFtZT0iR1NUX1RBR19FTkNPRElORyI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX1RBR19FTkNPRElORzwvY29kZT4uwqA8L2I+Ci1UcnkgdGhpcyBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlyc3QgZm9yIHRhZy1yZWxhdGVkIHN0cmluZ3Mgd2hlcmUgdGhlIGVuY29kaW5nCi1pcyBub3QgZGVmaW5lZCBhbmQgd2hpY2ggYXJlIG5vdCBVVEYtOCBhbHJlYWR5LiBCeSBkZWZhdWx0IHRoZSBjdXJyZW50IGxvY2FsZQotd2lsbCBiZSB0cmllZCAoaWYgbm90IFVURi04KS4KLSAgPC9wPgotPHA+PGEgbmFtZT0iR1NUX1RBR19JRDNfRU5DT0RJTkciPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9UQUdfSUQzX0VOQ09ESU5HPC9jb2RlPi7CoDwvYj4KLVRyeSB0aGlzIGNoYXJhY3RlciBlbmNvZGluZyBmaXJzdCBmb3IgSUQzIHRhZy1yZWxhdGVkIHN0cmluZ3Mgd2hlcmUgdGhlCi1lbmNvZGluZyBpcyBub3QgZGVmaW5lZCBhbmQgd2hpY2ggYXJlIG5vdCBVVEYtOCBhbHJlYWR5LiBCeSBkZWZhdWx0IHRoZSBjdXJyZW50Ci1sb2NhbGUgd2lsbCBiZSB0cmllZCAoaWYgbm90IFVURi04KS4KLSAgPC9wPgotPHA+PGEgbmFtZT0iR1NUX1RBR19JRDNWMV9FTkNPRElORyI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX1RBR19JRDNWMV9FTkNPRElORzwvY29kZT4uwqA8L2I+Ci1UcnkgdGhpcyBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlyc3QgZm9yIElEM3YxIHRhZy1yZWxhdGVkIHN0cmluZ3Mgd2hlcmUgdGhlCi1lbmNvZGluZyBkb2VzIG5vdCBsb29rIGxpa2UgVVRGLTguCi0gIDwvcD4KLTxwPjxhIG5hbWU9IkdTVF9HTF9XSU5ET1ciPjwvYT48Yj48Y29kZSBjbGFzcz0iZW52YXIiPkdTVF9HTF9XSU5ET1c8L2NvZGU+LsKgPC9iPgotSW5mbHVlbmNlcyB0aGUgd2luZG93IHN5c3RlbSB0byB1c2UgYnkgdGhlIEdTdHJlYW1lciBPcGVuR0wgbGlicmFyeS4KLUNvbW1vbiB2YWx1ZXMgYXJlICd4MTEnLCAnd2F5bGFuZCcsICd3aW4zMicgb3IgJ2NvY29hJy4KLSAgPC9wPgotPHA+PGEgbmFtZT0iR1NUX0dMX1BMQVRGT1JNIj48L2E+PGI+PGNvZGUgY2xhc3M9ImVudmFyIj5HU1RfR0xfUExBVEZPUk08L2NvZGU+LsKgPC9iPgotSW5mbHVlbmNlcyB0aGUgT3BlbkdMIHBsYXRmb3JtIHRvIHVzZSBieSB0aGUgR1N0cmVhbWVyIE9wZW5HTCBsaWJyYXJ5LgotQ29tbW9uIHZhbHVlcyBhcmUgJ2VnbCcsICdnbHgnLCAnd2dsJyBvciAnY2dsJy4KLSAgPC9wPgotPHA+PGEgbmFtZT0iR1NUX0dMX0FQSSI+PC9hPjxiPjxjb2RlIGNsYXNzPSJlbnZhciI+R1NUX0dMX0FQSTwvY29kZT4uwqA8L2I+Ci1JbmZsdWVuY2VzIHRoZSBPcGVuR0wgQVBJIHJlcXVlc3RlZCBieSB0aGUgT3BlbkdMIHBsYXRmb3JtLgotQ29tbW9uIHZhbHVlcyBhcmUgJ29wZW5nbCcgb3IgJ2dsZXMyJy4KLSAgPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLTEuMC5kZXZoZWxwMiBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLTEuMC5kZXZoZWxwMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmZDNkMi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci0xLjAuZGV2aGVscDIKKysrIC9kZXYvbnVsbApAQCAtMSwzMTk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PgotPGJvb2sgeG1sbnM9Imh0dHA6Ly93d3cuZGV2aGVscC5uZXQvYm9vayIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIiBsaW5rPSJpbmRleC5odG1sIiBhdXRob3I9IiIgbmFtZT0iZ3N0cmVhbWVyLTEuMCIgdmVyc2lvbj0iMiIgbGFuZ3VhZ2U9ImMiIG9ubGluZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvIj4KLSAgPGNoYXB0ZXJzPgotICAgIDxzdWIgbmFtZT0iR1N0cmVhbWVyIE92ZXJ2aWV3IiBsaW5rPSJnc3RyZWFtZXIuaHRtbCI+Ci0gICAgICA8c3ViIG5hbWU9IkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyIgbGluaz0iZ3N0LWJ1aWxkaW5nLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iUnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zIiBsaW5rPSJnc3QtcnVubmluZy5odG1sIi8+Ci0gICAgPC9zdWI+Ci0gICAgPHN1YiBuYW1lPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5IiBsaW5rPSJsaWJnc3RyZWFtZXIuaHRtbCI+Ci0gICAgICA8c3ViIG5hbWU9IkdzdCIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdEFsbG9jYXRvciIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0QXRvbWljUXVldWUiIGxpbms9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdEJpbiIgbGluaz0iR3N0QmluLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0QnVmZmVyIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RCdWZmZXJMaXN0IiBsaW5rPSJHc3RCdWZmZXJMaXN0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0QnVmZmVyUG9vbCIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdEJ1cyIgbGluaz0iR3N0QnVzLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0Q2FwcyIgbGluaz0iR3N0Q2Fwcy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdENhcHNGZWF0dXJlcyIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0U2FtcGxlIiBsaW5rPSJHc3RTYW1wbGUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RDaGlsZFByb3h5IiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0Q2xvY2siIGxpbms9IkdzdENsb2NrLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0Q29uZmlnIiBsaW5rPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0Q29udGV4dCIgbGluaz0iR3N0Q29udGV4dC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdENvbnRyb2xTb3VyY2UiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3REYXRlVGltZSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RFbGVtZW50IiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0RWxlbWVudEZhY3RvcnkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0R0Vycm9yIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0RXZlbnQiIGxpbms9IkdzdEV2ZW50Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0Rm9ybWF0IiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0R2hvc3RQYWQiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0SXRlcmF0b3IiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdE1lbW9yeSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0TWVzc2FnZSIgbGluaz0iR3N0TWVzc2FnZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdE1ldGEiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0TWluaU9iamVjdCIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RPYmplY3QiIGxpbms9IkdzdE9iamVjdC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFBhZCIgbGluaz0iR3N0UGFkLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0UGFkVGVtcGxhdGUiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0UGFyYW1TcGVjIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0UGFyc2UiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFBpcGVsaW5lIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFBsdWdpbiIgbGluaz0iR3N0UGx1Z2luLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0UGx1Z2luRmVhdHVyZSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFBvbGwiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0UHJlc2V0IiBsaW5rPSJHc3RQcmVzZXQuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RQcm90ZWN0aW9uTWV0YSIgbGluaz0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0UXVlcnkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0UmVnaXN0cnkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0U2VnbWVudCIgbGluaz0iR3N0U2VnbWVudC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFN0cmVhbSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFN0cmVhbUNvbGxlY3Rpb24iIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0U3RydWN0dXJlIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RTeXN0ZW1DbG9jayIgbGluaz0iR3N0U3lzdGVtQ2xvY2suaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RUYWdMaXN0IiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0VGFnU2V0dGVyIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RUYXNrIiBsaW5rPSJHc3RUYXNrLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0VGFza1Bvb2wiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0VG9jIiBsaW5rPSJHc3RUb2MuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RUb2NTZXR0ZXIiIGxpbms9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RUeXBlRmluZCIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0VHlwZUZpbmRGYWN0b3J5IiBsaW5rPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RVcmkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RVcmlIYW5kbGVyIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFV0aWxzIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJHc3RWYWx1ZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0VmVyc2lvbiIgbGluaz0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCIvPgotICAgIDwvc3ViPgotICAgIDxzdWIgbmFtZT0iR1N0cmVhbWVyIERldmljZSBEaXNjb3ZlcnkgYW5kIERldmljZSBQcm9iaW5nIiBsaW5rPSJnc3RyZWFtZXItZGV2aWNlLXByb2JpbmcuaHRtbCI+Ci0gICAgICA8c3ViIG5hbWU9IkdzdERldmljZU1vbml0b3IiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0RGV2aWNlIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXIiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeSIgbGluaz0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiLz4KLSAgICA8L3N1Yj4KLSAgICA8c3ViIG5hbWU9IkdTdHJlYW1lciBDb3JlIFN1cHBvcnQiIGxpbms9ImdzdHJlYW1lci1zdXBwb3J0Lmh0bWwiPgotICAgICAgPHN1YiBuYW1lPSJHc3RJbmZvIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFRyYWNlciIgbGluaz0iR3N0VHJhY2VyLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iR3N0VHJhY2VyRmFjdG9yeSIgbGluaz0iR3N0VHJhY2VyRmFjdG9yeS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IkdzdFRyYWNlclJlY29yZCIgbGluaz0iR3N0VHJhY2VyUmVjb3JkLmh0bWwiLz4KLSAgICA8L3N1Yj4KLSAgICA8c3ViIG5hbWU9Ik9iamVjdCBIaWVyYXJjaHkiIGxpbms9ImdzdHJlYW1lci1oaWVyYXJjaHkuaHRtbCIvPgotICAgIDxzdWIgbmFtZT0iQVBJIEluZGV4IiBsaW5rPSJpeDAxLmh0bWwiLz4KLSAgICA8c3ViIG5hbWU9IkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJIiBsaW5rPSJpeDAyLmh0bWwiLz4KLSAgICA8c3ViIG5hbWU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4xMCIgbGluaz0iaXgwMy5odG1sIi8+Ci0gICAgPHN1YiBuYW1lPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuOCIgbGluaz0iaXgwNC5odG1sIi8+Ci0gICAgPHN1YiBuYW1lPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuNiIgbGluaz0iaXgwNS5odG1sIi8+Ci0gICAgPHN1YiBuYW1lPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuNCIgbGluaz0iaXgwNi5odG1sIi8+Ci0gICAgPHN1YiBuYW1lPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuMi4zIiBsaW5rPSJpeDA3Lmh0bWwiLz4KLSAgICA8c3ViIG5hbWU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4yIiBsaW5rPSJpeDA4Lmh0bWwiLz4KLSAgICA8c3ViIG5hbWU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjEwIiBsaW5rPSJpeDA5Lmh0bWwiLz4KLSAgICA8c3ViIG5hbWU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjUiIGxpbms9Iml4MTAuaHRtbCIvPgotICAgIDxzdWIgbmFtZT0iQW5ub3RhdGlvbiBHbG9zc2FyeSIgbGluaz0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIi8+Ci0gIDwvY2hhcHRlcnM+Ci0gIDxmdW5jdGlvbnM+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbml0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbml0X2NoZWNrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0LWNoZWNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXDCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtZ2V0LW9wdGlvbi1ncm91cCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXNfaW5pdGlhbGl6ZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWlzLWluaXRpYWxpemVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWluaXTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWRlaW5pdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmVyc2lvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdmVyc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmVyc2lvbl9zdHJpbmfCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXZlcnNpb24tc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zZWd0cmFwX2lzX2VuYWJsZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtaXMtZW5hYmxlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VndHJhcF9zZXRfZW5hYmxlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3Qtc2VndHJhcC1zZXQtZW5hYmxlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1yZWdpc3RyeS1mb3JrLWlzLWVuYWJsZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZvcmstc2V0LWVuYWJsZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VwZGF0ZV9yZWdpc3RyecKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdXBkYXRlLXJlZ2lzdHJ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hbGxvY2F0b3JfZmluZMKgKCkiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0b3ItZmluZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NhdG9yX3JlZ2lzdGVywqAoKSIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1yZWdpc3RlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0wqAoKSIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1zZXQtZGVmYXVsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdMKgKCkiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0aW9uLXBhcmFtcy1pbml0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hbGxvY2F0aW9uX3BhcmFtc19jb3B5wqAoKSIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRpb24tcGFyYW1zLWNvcHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2ZyZWXCoCgpIiBsaW5rPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtYWxsb2NhdGlvbi1wYXJhbXMtZnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NhdG9yX2FsbG9jwqAoKSIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1hbGxvYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWxsb2NhdG9yX2ZyZWXCoCgpIiBsaW5rPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtYWxsb2NhdG9yLWZyZWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lbW9yeV9uZXdfd3JhcHBlZMKgKCkiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1tZW1vcnktbmV3LXdyYXBwZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJ2YXJpYWJsZSIgbmFtZT0iZ3N0X21lbW9yeV9hbGlnbm1lbnQiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1tZW1vcnktYWxpZ25tZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RBbGxvY2F0b3IiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvci1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBbGxvY2F0b3JDbGFzcyIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yQ2xhc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEFsbG9jYXRvckZsYWdzIiBsaW5rPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0b3JGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEFsbG9jYXRpb25QYXJhbXMiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9BTExPQ0FUT1JfU1lTTUVNIiBsaW5rPSJHc3RBbGxvY2F0b3IuaHRtbCNHU1QtQUxMT0NBVE9SLVNZU01FTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hdG9taWNfcXVldWVfbmV3wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2F0b21pY19xdWV1ZV9yZWbCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLXJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYXRvbWljX3F1ZXVlX3VucmVmwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS11bnJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYXRvbWljX3F1ZXVlX3B1c2jCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLXB1c2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2F0b21pY19xdWV1ZV9wZWVrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1wZWVrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hdG9taWNfcXVldWVfcG9wwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1wb3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGjCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLWxlbmd0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0QXRvbWljUXVldWUiIGxpbms9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5fbmV3wqAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9hZGTCoCgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX3JlbW92ZcKgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5fZ2V0X2J5X25hbWXCoCgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cMKgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4tZ2V0LWJ5LW5hbWUtcmVjdXJzZS11cCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX2dldF9ieV9pbnRlcmZhY2XCoCgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1pbnRlcmZhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzwqAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLWVsZW1lbnRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlwqAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLXJlY3Vyc2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzwqAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLXNpbmtzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5faXRlcmF0ZV9zb3J0ZWTCoCgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc29ydGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzwqAoKSIgbGluaz0iR3N0QmluLmh0bWwjZ3N0LWJpbi1pdGVyYXRlLXNvdXJjZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2XCoCgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtYWxsLWJ5LWludGVyZmFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3nCoCgpIiBsaW5rPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlY2FsY3VsYXRlLWxhdGVuY3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9hZGRfbWFuecKgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4tYWRkLW1hbnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9yZW1vdmVfbWFuecKgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4tcmVtb3ZlLW1hbnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZMKgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4tZmluZC11bmxpbmtlZC1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jpbl9zeW5jX2NoaWxkcmVuX3N0YXRlc8KgKCkiIGxpbms9IkdzdEJpbi5odG1sI2dzdC1iaW4tc3luYy1jaGlsZHJlbi1zdGF0ZXMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JJTl9JU19OT19SRVNZTkMoKSIgbGluaz0iR3N0QmluLmh0bWwjR1NULUJJTi1JUy1OTy1SRVNZTkM6Q0FQUyIgc2luY2U9IjEuMC41Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CSU5fQ0hJTERSRU4oKSIgbGluaz0iR3N0QmluLmh0bWwjR1NULUJJTi1DSElMRFJFTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CSU5fQ0hJTERSRU5fQ09PS0lFKCkiIGxpbms9IkdzdEJpbi5odG1sI0dTVC1CSU4tQ0hJTERSRU4tQ09PS0lFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JJTl9OVU1DSElMRFJFTigpIiBsaW5rPSJHc3RCaW4uaHRtbCNHU1QtQklOLU5VTUNISUxEUkVOOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RCaW4iIGxpbms9IkdzdEJpbi5odG1sI0dzdEJpbi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RCaW5DbGFzcyIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluQ2xhc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEJpbkZsYWdzIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW5GbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYXN5bmMtaGFuZGxpbmfigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJpbi5odG1sI0dzdEJpbi0tYXN5bmMtaGFuZGxpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1lc3NhZ2UtZm9yd2FyZOKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLS1tZXNzYWdlLWZvcndhcmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxkZWVwLWVsZW1lbnQtYWRkZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tZGVlcC1lbGVtZW50LWFkZGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcZGVlcC1lbGVtZW50LXJlbW92ZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tZGVlcC1lbGVtZW50LXJlbW92ZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxkby1sYXRlbmN54oCdIHNpZ25hbCIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLWRvLWxhdGVuY3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxlbGVtZW50LWFkZGVk4oCdIHNpZ25hbCIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLWVsZW1lbnQtYWRkZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxlbGVtZW50LXJlbW92ZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1yZW1vdmVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRkxBR1MoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19JU19TRVQoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUlTLVNFVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19TRVQoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVNFVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19VTlNFVCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctVU5TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX1BUUygpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLVBUUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRFRTKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRFRTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9EVFNfT1JfUFRTKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRFRTLU9SLVBUUzpDQVBTIiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRFVSQVRJT04oKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1EVVJBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfT0ZGU0VUKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULUVORDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1EVVJBVElPTi1JUy1WQUxJRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItUFRTLUlTLVZBTElEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1EVFMtSVMtVkFMSUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX09GRlNFVF9JU19WQUxJRCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1JUy1WQUxJRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLU9GRlNFVC1FTkQtSVMtVkFMSUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX0lTX0RJU0NPTlQoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1JUy1ESVNDT05UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9uZXfCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX25ld19hbGxvY2F0ZcKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LWFsbG9jYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbmV3X3dyYXBwZWTCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW5ldy13cmFwcGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbMKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbmV3LXdyYXBwZWQtZnVsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3JlZsKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfdW5yZWbCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfZ2V0X3NpemVzwqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtc2l6ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9nZXRfc2l6ZcKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9nZXRfc2l6ZXNfcmFuZ2XCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1zaXplcy1yYW5nZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Jlc2l6ZV9yYW5nZcKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVzaXplLXJhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcmVzaXplwqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9zZXRfc2l6ZcKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItc2V0LXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9nZXRfbWF4X21lbW9yecKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LW1heC1tZW1vcnkiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wZWVrX21lbW9yecKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcGVlay1tZW1vcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9uX21lbW9yecKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbi1tZW1vcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5wqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pbnNlcnQtbWVtb3J5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnlfcmFuZ2XCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlcGxhY2UtbWVtb3J5LXJhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfZ2V0X21lbW9yeV9yYW5nZcKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LW1lbW9yeS1yYW5nZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2XCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlbW92ZS1tZW1vcnktcmFuZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9maW5kX21lbW9yecKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZmluZC1tZW1vcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wcmVwZW5kX21lbW9yecKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcHJlcGVuZC1tZW1vcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5wqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1hcHBlbmQtbWVtb3J5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnnCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlcGxhY2UtbWVtb3J5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcmVwbGFjZV9hbGxfbWVtb3J5wqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXBsYWNlLWFsbC1tZW1vcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5wqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbWVtb3J5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfZ2V0X2FsbF9tZW1vcnnCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1hbGwtbWVtb3J5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcmVtb3ZlX21lbW9yecKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVtb3ZlLW1lbW9yeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3JlbW92ZV9hbGxfbWVtb3J5wqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtYWxsLW1lbW9yeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2lzX2FsbF9tZW1vcnlfd3JpdGFibGXCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLWFsbC1tZW1vcnktd3JpdGFibGUiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9pc19tZW1vcnlfcmFuZ2Vfd3JpdGFibGXCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLW1lbW9yeS1yYW5nZS13cml0YWJsZSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX21hcMKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWFwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbWFwX3JhbmdlwqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tYXAtcmFuZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl91bm1hcMKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5tYXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9tZW1jbXDCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1lbWNtcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2V4dHJhY3TCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWV4dHJhY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9leHRyYWN0X2R1cMKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZXh0cmFjdC1kdXAiIHNpbmNlPSIxLjAuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9maWxswqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1maWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbWVtc2V0wqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZW1zZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9jb3B5wqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfY29weV9pbnRvwqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5LWludG8iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbsKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1yZWdpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9jb3B5X2RlZXDCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHktZGVlcCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItaXMtd3JpdGFibGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItbWFrZS13cml0YWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3JlcGxhY2XCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXJlcGxhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9hcHBlbmTCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFwcGVuZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2FwcGVuZF9yZWdpb27CoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFwcGVuZC1yZWdpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9nZXRfbWV0YcKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9hZGRfbWV0YcKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItYWRkLW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YcKgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcmVtb3ZlLW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9pdGVyYXRlX21ldGHCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWl0ZXJhdGUtbWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmPCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGHCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZvcmVhY2gtbWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2FkZF9wYXJlbnRfYnVmZmVyX21ldGHCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFkZC1wYXJlbnQtYnVmZmVyLW1ldGEiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J1ZmZlcl9nZXRfcGFyZW50X2J1ZmZlcl9tZXRhKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LXBhcmVudC1idWZmZXItbWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2dldF9mbGFnc8KgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LWZsYWdzIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3NldF9mbGFnc8KgKCkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItc2V0LWZsYWdzIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Vuc2V0X2ZsYWdzwqAoKSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnNldC1mbGFncyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9oYXNfZmxhZ3PCoCgpIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWhhcy1mbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJ1ZmZlciIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0QnVmZmVyRmxhZ3MiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfT0ZGU0VUX05PTkUiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItT0ZGU0VULU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0QnVmZmVyQ29weUZsYWdzIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJDb3B5RmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktTUVUQURBVEE6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQlVGRkVSX0NPUFlfQUxMIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktQUxMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQYXJlbnRCdWZmZXJNZXRhIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHc3RQYXJlbnRCdWZmZXJNZXRhIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9uZXfCoCgpIiBsaW5rPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2xpc3RfbmV3X3NpemVkwqAoKSIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1uZXctc2l6ZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aMKgKCkiIGxpbms9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbGVuZ3RoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9hZGQoKSIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1hZGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9saXN0X2luc2VydMKgKCkiIGxpbms9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtaW5zZXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9yZW1vdmXCoCgpIiBsaW5rPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXJlbW92ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2xpc3RfcmVmwqAoKSIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9saXN0X3VucmVmwqAoKSIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC11bnJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2xpc3RfY29wecKgKCkiIGxpbms9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2xpc3RfY29weV9kZWVwwqAoKSIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1jb3B5LWRlZXAiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J1ZmZlcl9saXN0X2lzX3dyaXRhYmxlKCkiIGxpbms9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtaXMtd3JpdGFibGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J1ZmZlcl9saXN0X21ha2Vfd3JpdGFibGUoKSIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1tYWtlLXdyaXRhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEJ1ZmZlckxpc3RGdW5jwqAoKSIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3RGdW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9mb3JlYWNowqAoKSIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1mb3JlYWNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfbGlzdF9nZXTCoCgpIiBsaW5rPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWdldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0QnVmZmVyTGlzdCIgbGluaz0iR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3Qtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORygpIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR1NULUJVRkZFUi1QT09MLUlTLUZMVVNISU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX25ld8KgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X3BhcmFtc8KgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWdldC1wYXJhbXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zwqAoKSIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctc2V0LXBhcmFtcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3ZhbGlkYXRlX3BhcmFtc8KgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLXZhbGlkYXRlLXBhcmFtcyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9hbGxvY2F0b3LCoCgpIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtYWxsb2NhdG9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvcsKgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLXNldC1hbGxvY2F0b3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnPCoCgpIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1uLW9wdGlvbnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uwqAoKSIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctYWRkLW9wdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb27CoCgpIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtb3B0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbsKgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWhhcy1vcHRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zwqAoKSIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1nZXQtb3B0aW9ucyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfaGFzX29wdGlvbsKgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtaGFzLW9wdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZ8KgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtZ2V0LWNvbmZpZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZ8KgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWNvbmZpZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZcKgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWFjdGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3Bvb2xfaXNfYWN0aXZlwqAoKSIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1pcy1hY3RpdmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZ8KgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWZsdXNoaW5nIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcsKgKCkiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtYWNxdWlyZS1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVywqAoKSIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1yZWxlYXNlLWJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0QnVmZmVyUG9vbCIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QnVmZmVyUG9vbENsYXNzIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbENsYXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbEFjcXVpcmVGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0QnVzRnVuY8KgKCkiIGxpbms9IkdzdEJ1cy5odG1sI0dzdEJ1c0Z1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0QnVzU3luY0hhbmRsZXLCoCgpIiBsaW5rPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jSGFuZGxlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX25ld8KgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfcG9zdMKgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9zdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX2hhdmVfcGVuZGluZ8KgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtaGF2ZS1wZW5kaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfcGVla8KgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtcGVlayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX3BvcMKgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfcG9wX2ZpbHRlcmVkwqAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1wb3AtZmlsdGVyZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c190aW1lZF9wb3DCoCgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXRpbWVkLXBvcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZMKgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtdGltZWQtcG9wLWZpbHRlcmVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfc2V0X2ZsdXNoaW5nwqAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zZXQtZmx1c2hpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19zZXRfc3luY19oYW5kbGVywqAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1zZXQtc3luYy1oYW5kbGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlcsKgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtc3luYy1zaWduYWwtaGFuZGxlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX2NyZWF0ZV93YXRjaMKgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtY3JlYXRlLXdhdGNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfYWRkX3dhdGNoX2Z1bGzCoCgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC13YXRjaC1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfYWRkX3dhdGNowqAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19yZW1vdmVfd2F0Y2jCoCgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXJlbW92ZS13YXRjaCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uwqAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1kaXNhYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb27CoCgpIiBsaW5rPSJHc3RCdXMuaHRtbCNnc3QtYnVzLWVuYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19hc3luY19zaWduYWxfZnVuY8KgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtYXN5bmMtc2lnbmFsLWZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNowqAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxswqAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNowqAoKSIgbGluaz0iR3N0QnVzLmh0bWwjZ3N0LWJ1cy1yZW1vdmUtc2lnbmFsLXdhdGNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idXNfcG9sbMKgKCkiIGxpbms9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9sbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJ1cyIgbGluaz0iR3N0QnVzLmh0bWwjR3N0QnVzLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0QnVzRmxhZ3MiIGxpbms9IkdzdEJ1cy5odG1sI0dzdEJ1c0ZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RCdXNTeW5jUmVwbHkiIGxpbms9IkdzdEJ1cy5odG1sI0dzdEJ1c1N5bmNSZXBseSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZW5hYmxlLWFzeW5j4oCdIHByb3BlcnR5IiBsaW5rPSJHc3RCdXMuaHRtbCNHc3RCdXMtLWVuYWJsZS1hc3luYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG1lc3NhZ2XigJ0gc2lnbmFsIiBsaW5rPSJHc3RCdXMuaHRtbCNHc3RCdXMtbWVzc2FnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHN5bmMtbWVzc2FnZeKAnSBzaWduYWwiIGxpbms9IkdzdEJ1cy5odG1sI0dzdEJ1cy1zeW5jLW1lc3NhZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBUFNfUkVGQ09VTlQoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLVJFRkNPVU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBUFNfUkVGQ09VTlRfVkFMVUUoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLVJFRkNPVU5ULVZBTFVFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBUFNfSVNfU0lNUExFKCkiIGxpbms9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1JUy1TSU1QTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVElDX0NBUFMoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19GTEFHUygpIiBsaW5rPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBR1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19GTEFHX0lTX1NFVCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBRy1JUy1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19GTEFHX1NFVCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBRy1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19GTEFHX1VOU0VUKCkiIGxpbms9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHLVVOU0VUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0Q2Fwc0ZvcmVhY2hGdW5jwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI0dzdENhcHNGb3JlYWNoRnVuYyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDYXBzTWFwRnVuY8KgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNHc3RDYXBzTWFwRnVuYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDYXBzRmlsdGVyTWFwRnVuY8KgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNHc3RDYXBzRmlsdGVyTWFwRnVuYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19uZXdfZW1wdHnCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWVtcHR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGXCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWVtcHR5LXNpbXBsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19uZXdfYW55wqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1hbnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfbmV3X3NpbXBsZcKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctc2ltcGxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX25ld19mdWxswqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX25ld19mdWxsX3ZhbGlzdMKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZnVsbC12YWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2NhcHNfaXNfd3JpdGFibGUoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLXdyaXRhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2NvcHnCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19jb3B5X250aMKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jb3B5LW50aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RhdGljX2NhcHNfZ2V0wqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1zdGF0aWMtY2Fwcy1nZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0YXRpY19jYXBzX2NsZWFudXDCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LXN0YXRpYy1jYXBzLWNsZWFudXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfYXBwZW5kwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWFwcGVuZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19tZXJnZcKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tZXJnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWFwcGVuZC1zdHJ1Y3R1cmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV9mdWxswqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWFwcGVuZC1zdHJ1Y3R1cmUtZnVsbCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXJlbW92ZS1zdHJ1Y3R1cmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXN0ZWFsLXN0cnVjdHVyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmXCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWVyZ2Utc3RydWN0dXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZV9mdWxswqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZS1mdWxsIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2dldF9zaXplwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWdldC1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2dldF9zdHJ1Y3R1cmXCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LXN0cnVjdHVyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19nZXRfZmVhdHVyZXPCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LWZlYXR1cmVzIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX3NldF9mZWF0dXJlc8KgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zZXQtZmVhdHVyZXMiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfc2V0X3ZhbHVlwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19zZXRfc2ltcGxlwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC1zaW1wbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3TCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LXNpbXBsZS12YWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZm9yZWFjaMKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1mb3JlYWNoIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX21hcF9pbl9wbGFjZcKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYXAtaW4tcGxhY2UiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2XCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZmlsdGVyLWFuZC1tYXAtaW4tcGxhY2UiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfaXNfYW55wqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLWFueSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19lbXB0ecKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lbXB0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19maXhlZMKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1maXhlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19lcXVhbMKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lcXVhbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19lcXVhbF9maXhlZMKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lcXVhbC1maXhlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19zdHJpY3RseV9lcXVhbMKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1zdHJpY3RseS1lcXVhbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZcKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1hbHdheXMtY29tcGF0aWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19zdWJzZXTCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmXCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0LXN0cnVjdHVyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlX2Z1bGzCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0LXN0cnVjdHVyZS1mdWxsIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2Nhbl9pbnRlcnNlY3TCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtY2FuLWludGVyc2VjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19pbnRlcnNlY3TCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaW50ZXJzZWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ludGVyc2VjdF9mdWxswqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWludGVyc2VjdC1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX25vcm1hbGl6ZcKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1ub3JtYWxpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfc2ltcGxpZnnCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2ltcGxpZnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfcmVwbGFjZcKgKCkiIGxpbms9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZXBsYWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX3Rha2XCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdGFrZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc190b19zdHJpbmfCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdG8tc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2Zyb21fc3RyaW5nwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZyb20tc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX3N1YnRyYWN0wqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXN1YnRyYWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1ha2Utd3JpdGFibGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfdHJ1bmNhdGXCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdHJ1bmNhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZml4YXRlwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZpeGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19yZWbCoCgpIiBsaW5rPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX3VucmVmwqAoKSIgbGluaz0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Q2FwcyIgbGluaz0iR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3RhdGljQ2FwcyIgbGluaz0iR3N0Q2Fwcy5odG1sI0dzdFN0YXRpY0NhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdENhcHNJbnRlcnNlY3RNb2RlIiBsaW5rPSJHc3RDYXBzLmh0bWwjR3N0Q2Fwc0ludGVyc2VjdE1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdENhcHNGbGFncyIgbGluaz0iR3N0Q2Fwcy5odG1sI0dzdENhcHNGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19BTlkiIGxpbms9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1BTlk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FQU19OT05FIiBsaW5rPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TVEFUSUNfQ0FQU19BTlkiIGxpbms9IkdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMtQU5ZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRJQ19DQVBTX05PTkUiIGxpbms9IkdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX25ld8KgKCkiIGxpbms9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHnCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctZW1wdHkiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2FuecKgKCkiIGxpbms9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldy1hbnkiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkwqAoKSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtbmV3LWlkIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZF92YWxpc3TCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctaWQtdmFsaXN0IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX25ld192YWxpc3TCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctdmFsaXN0IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX2NvcHnCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1jb3B5IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWXCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1mcmVlIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX2Zyb21fc3RyaW5nwqAoKSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtZnJvbS1zdHJpbmciIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZmVhdHVyZXNfdG9fc3RyaW5nwqAoKSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtdG8tc3RyaW5nIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX3NldF9wYXJlbnRfcmVmY291bnTCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1zZXQtcGFyZW50LXJlZmNvdW50IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFswqAoKSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtaXMtZXF1YWwiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55wqAoKSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtaXMtYW55IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zwqAoKSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtY29udGFpbnMiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnNfaWTCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1jb250YWlucy1pZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19mZWF0dXJlc19nZXRfc2l6ZcKgKCkiIGxpbms9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLWdldC1zaXplIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGjCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtbnRoIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGhfaWTCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtbnRoLWlkIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX2FkZMKgKCkiIGxpbms9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLWFkZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2Fwc19mZWF0dXJlc19hZGRfaWTCoCgpIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1hZGQtaWQiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlwqAoKSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtcmVtb3ZlIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZV9pZMKgKCkiIGxpbms9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLXJlbW92ZS1pZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0Q2Fwc0ZlYXR1cmVzIiBsaW5rPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNHc3RDYXBzRmVhdHVyZXMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVBTX0ZFQVRVUkVTX0FOWSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjR1NULUNBUFMtRkVBVFVSRVMtQU5ZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlkiIGxpbms9IkdzdENhcHNGZWF0dXJlcy5odG1sI0dTVC1DQVBTLUZFQVRVUkVTLU1FTU9SWS1TWVNURU0tTUVNT1JZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBUFNfRkVBVFVSRV9NRU1PUllfU1lTVEVNX01FTU9SWSIgbGluaz0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjR1NULUNBUFMtRkVBVFVSRS1NRU1PUlktU1lTVEVNLU1FTU9SWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zYW1wbGVfZ2V0X2J1ZmZlcsKgKCkiIGxpbms9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LWJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2FtcGxlX2dldF9idWZmZXJfbGlzdMKgKCkiIGxpbms9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LWJ1ZmZlci1saXN0IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zYW1wbGVfZ2V0X2NhcHPCoCgpIiBsaW5rPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLWdldC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zYW1wbGVfZ2V0X2luZm/CoCgpIiBsaW5rPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLWdldC1pbmZvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zYW1wbGVfZ2V0X3NlZ21lbnTCoCgpIiBsaW5rPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLWdldC1zZWdtZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zYW1wbGVfc2V0X2J1ZmZlcl9saXN0wqAoKSIgbGluaz0iR3N0U2FtcGxlLmh0bWwjZ3N0LXNhbXBsZS1zZXQtYnVmZmVyLWxpc3QiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NhbXBsZV9uZXfCoCgpIiBsaW5rPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2FtcGxlX3JlZsKgKCkiIGxpbms9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtcmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zYW1wbGVfdW5yZWbCoCgpIiBsaW5rPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLXVucmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zYW1wbGVfY29wecKgKCkiIGxpbms9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtY29weSIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0U2FtcGxlIiBsaW5rPSJHc3RTYW1wbGUuaHRtbCNHc3RTYW1wbGUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnTCoCgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZHJlbi1jb3VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWXCoCgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZC1ieS1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXjCoCgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZC1ieS1pbmRleCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfbG9va3VwwqAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1sb29rdXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0ecKgKCkiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LXByb3BlcnR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGlsZF9wcm94eV9nZXRfdmFsaXN0wqAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtdmFsaXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGlsZF9wcm94eV9nZXTCoCgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5wqAoKSIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1zZXQtcHJvcGVydHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3TCoCgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LXNldC12YWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoaWxkX3Byb3h5X3NldMKgKCkiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGlsZF9wcm94eV9jaGlsZF9hZGRlZMKgKCkiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktY2hpbGQtYWRkZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWTCoCgpIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWNoaWxkLXJlbW92ZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdENoaWxkUHJveHkiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENoaWxkUHJveHlJbnRlcmZhY2UiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5SW50ZXJmYWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcY2hpbGQtYWRkZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1hZGRlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGNoaWxkLXJlbW92ZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1yZW1vdmVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19USU1FX0lTX1ZBTElEKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtSVMtVkFMSUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stU1RJTUUtSVMtVkFMSUQ6Q0FQUyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVElNRV9BU19TRUNPTkRTKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtU0VDT05EUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9USU1FX0FTX01TRUNPTkRTKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtTVNFQ09ORFM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVElNRV9BU19VU0VDT05EUygpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLVVTRUNPTkRTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RJTUVfQVNfTlNFQ09ORFMoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1BUy1OU0VDT05EUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19ESUZGKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLURJRkY6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVElNRVZBTF9UT19USU1FKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULVRJTUVWQUwtVE8tVElNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9USU1FX1RPX1RJTUVWQUwoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1UTy1USU1FVkFMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RJTUVTUEVDX1RPX1RJTUUoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRVNQRUMtVE8tVElNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9USU1FX1RPX1RJTUVTUEVDKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtVE8tVElNRVNQRUM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDbG9ja0NhbGxiYWNrwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NhbGxiYWNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19FTlRSWSgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19FTlRSWV9DTE9DSygpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1DTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19FTlRSWV9UWVBFKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVRZUEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfRU5UUllfVElNRSgpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1USU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLUlOVEVSVkFMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NMT0NLX0VOVFJZX1NUQVRVUygpIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1TVEFUVVM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0xPQ0tfRkxBR1MoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBR1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stYWRkLW9ic2VydmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb25fdW5hcHBsaWVkwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stYWRkLW9ic2VydmF0aW9uLXVuYXBwbGllZCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfc2V0X21hc3RlcsKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1tYXN0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2dldF9tYXN0ZXLCoCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtbWFzdGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbsKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1yZXNvbHV0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbsKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1yZXNvbHV0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19nZXRfdGltZcKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWTCoCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1uZXctc2luZ2xlLXNob3QtaWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZMKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLW5ldy1wZXJpb2RpYy1pZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0wqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2luZ2xlLXNob3QtaWQtcmVpbml0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19wZXJpb2RpY19pZF9yZWluaXTCoCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1wZXJpb2RpYy1pZC1yZWluaXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LWludGVybmFsLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZMKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkanVzdC11bmxvY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfdW5hZGp1c3RfdW5sb2NrZWTCoCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay11bmFkanVzdC11bmxvY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb27CoCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGp1c3Qtd2l0aC1jYWxpYnJhdGlvbiIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfdW5hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbsKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXVuYWRqdXN0LXdpdGgtY2FsaWJyYXRpb24iIHNpbmNlPSIxLjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbsKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1jYWxpYnJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19nZXRfdGltZW91dMKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lb3V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19zZXRfdGltZW91dMKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC10aW1lb3V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja193YWl0X2Zvcl9zeW5jwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2std2FpdC1mb3Itc3luYyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfaXNfc3luY2VkwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staXMtc3luY2VkIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19zZXRfc3luY2VkwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LXN5bmNlZCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfaWRfZ2V0X3RpbWXCoCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC1nZXQtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfaWRfd2FpdMKgKCkiIGxpbms9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmPCoCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0LWFzeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19pZF91bnNjaGVkdWxlwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5zY2hlZHVsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtY29tcGFyZS1mdW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jbG9ja19pZF9yZWbCoCgpIiBsaW5rPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC1yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Nsb2NrX2lkX3VucmVmwqAoKSIgbGluaz0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDbG9jayIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDbG9ja0NsYXNzIiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrQ2xhc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJ0eXBlZGVmIiBuYW1lPSJHc3RDbG9ja1RpbWUiIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0iR3N0Q2xvY2tUaW1lRGlmZiIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0iR3N0Q2xvY2tJRCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19USU1FX05PTkUiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DTE9DS19TVElNRV9OT05FIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1TVElNRS1OT05FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NFQ09ORCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtU0VDT05EOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01TRUNPTkQiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULU1TRUNPTkQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVVNFQ09ORCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtVVNFQ09ORDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9OU0VDT05EIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1OU0VDT05EOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDbG9ja0VudHJ5IiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdENsb2NrRW50cnlUeXBlIiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnlUeXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RDbG9ja1JldHVybiIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1JldHVybiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0Q2xvY2tGbGFncyIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0ZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aW1lb3V04oCdIHByb3BlcnR5IiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS10aW1lb3V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx3aW5kb3ctc2l6ZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0td2luZG93LXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHdpbmRvdy10aHJlc2hvbGTigJ0gcHJvcGVydHkiIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXdpbmRvdy10aHJlc2hvbGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxzeW5jZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLXN5bmNlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRElTQUJMRV9HU1RfREVCVUciIGxpbms9ImdzdHJlYW1lci1Hc3RDb25maWcuaHRtbCNHU1QtRElTQUJMRS1HU1QtREVCVUc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRElTQUJMRV9QQVJTRSIgbGluaz0iZ3N0cmVhbWVyLUdzdENvbmZpZy5odG1sI0dTVC1ESVNBQkxFLVBBUlNFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RJU0FCTEVfUkVHSVNUUlkiIGxpbms9ImdzdHJlYW1lci1Hc3RDb25maWcuaHRtbCNHU1QtRElTQUJMRS1SRUdJU1RSWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ESVNBQkxFX1BMVUdJTiIgbGluaz0iZ3N0cmVhbWVyLUdzdENvbmZpZy5odG1sI0dTVC1ESVNBQkxFLVBMVUdJTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250ZXh0X25ld8KgKCkiIGxpbms9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1uZXciIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRleHRfcmVmwqAoKSIgbGluaz0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LXJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udGV4dF91bnJlZsKgKCkiIGxpbms9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC11bnJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udGV4dF9jb3B5wqAoKSIgbGluaz0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LWNvcHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZcKgKCkiIGxpbms9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1nZXQtY29udGV4dC10eXBlIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGXCoCgpIiBsaW5rPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtaGFzLWNvbnRleHQtdHlwZSIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udGV4dF9pc19wZXJzaXN0ZW50wqAoKSIgbGluaz0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LWlzLXBlcnNpc3RlbnQiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZcKgKCkiIGxpbms9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1nZXQtc3RydWN0dXJlIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZcKgKCkiIGxpbms9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC13cml0YWJsZS1zdHJ1Y3R1cmUiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2NvbnRleHRfbWFrZV93cml0YWJsZSgpIiBsaW5rPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtbWFrZS13cml0YWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfY29udGV4dF9pc193cml0YWJsZSgpIiBsaW5rPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtaXMtd3JpdGFibGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRleHRfcmVwbGFjZcKgKCkiIGxpbms9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1yZXBsYWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RDb250ZXh0IiBsaW5rPSJHc3RDb250ZXh0Lmh0bWwjR3N0Q29udGV4dC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xfYmluZGluZ19zeW5jX3ZhbHVlc8KgKCkiIGxpbms9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWNvbnRyb2wtYmluZGluZy1zeW5jLXZhbHVlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZcKgKCkiIGxpbms9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWNvbnRyb2wtYmluZGluZy1nZXQtdmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXnCoCgpIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctZ2V0LXZhbHVlLWFycmF5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X2dfdmFsdWVfYXJyYXnCoCgpIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctZ2V0LWctdmFsdWUtYXJyYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xfYmluZGluZ19zZXRfZGlzYWJsZWTCoCgpIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctc2V0LWRpc2FibGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sX2JpbmRpbmdfaXNfZGlzYWJsZWTCoCgpIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctaXMtZGlzYWJsZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDb250cm9sQmluZGluZyIgbGluaz0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDb250cm9sQmluZGluZ0NsYXNzIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sI0dzdENvbnRyb2xCaW5kaW5nQ2xhc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG5hbWXigJ0gcHJvcGVydHkiIGxpbms9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG9iamVjdOKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZy0tb2JqZWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZcKgKCkiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXnCoCgpIiBsaW5rPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZcKgKCkiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXnCoCgpIiBsaW5rPSJHc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS1hcnJheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0VmFsdWVBcnJheSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFZhbHVlQXJyYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDb250cm9sU291cmNlIiBsaW5rPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDb250cm9sU291cmNlQ2xhc3MiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlQ2xhc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUaW1lZFZhbHVlIiBsaW5rPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VGltZWRWYWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF9kYXnCoCgpIiBsaW5rPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LWRheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF9tb250aMKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbW9udGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9nZXRfaG91csKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtaG91ciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZMKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbWljcm9zZWNvbmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlwqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1taW51dGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldMKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtdGltZS16b25lLW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmTCoCgpIiBsaW5rPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LXNlY29uZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2dldF95ZWFywqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC15ZWFyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfbmV3wqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX25ld195bWTCoCgpIiBsaW5rPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LXltZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX25ld195bcKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXcteW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9uZXdfecKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXcteSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZcKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLWxvY2FsLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0Y8KgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLXV0YyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lwqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1sb2NhbC10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lwqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1ub3ctbG9jYWwtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjwqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1ub3ctdXRjIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfcmVmwqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX3VucmVmwqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXVucmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfaGFzX2RhecKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1oYXMtZGF5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfaGFzX21vbnRowqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWhhcy1tb250aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmTCoCgpIiBsaW5rPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtaGFzLXNlY29uZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX2hhc190aW1lwqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWhhcy10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfaGFzX3llYXLCoCgpIiBsaW5rPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtaGFzLXllYXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZ8KgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctZnJvbS1pc284NjAxLXN0cmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0ZV90aW1lX3RvX2lzbzg2MDFfc3RyaW5nwqAoKSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXRvLWlzbzg2MDEtc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWXCoCgpIiBsaW5rPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWZyb20tZy1kYXRlLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGVfdGltZV90b19nX2RhdGVfdGltZcKgKCkiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS10by1nLWRhdGUtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0RGF0ZVRpbWUiIGxpbms9IkdzdERhdGVUaW1lLmh0bWwjR3N0RGF0ZVRpbWUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0RBVEVfVElNRSIgbGluaz0iR3N0RGF0ZVRpbWUuaHRtbCNHU1QtVFlQRS1EQVRFLVRJTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVEUoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TVEFURV9HRVRfTkVYVCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUdFVC1ORVhUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX05FWFQoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1ORVhUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX1BFTkRJTkcoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QRU5ESU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX1JFVFVSTigpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVJFVFVSTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TVEFURV9UQVJHRVQoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1UQVJHRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVEVfVFJBTlNJVElPTigpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVFJBTlNJVElPTi1DVVJSRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT04tTkVYVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TVEFURV9HRVRfTE9DSygpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUdFVC1MT0NLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUQVRFX0dFVF9DT05EKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtR0VULUNPTkQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9OQU1FKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1OQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfUEFSRU5UKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1QQVJFTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9CVVMoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUJVUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0NMT0NLKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1DTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX1BBRFMoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVBBRFM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9TVEFSVF9USU1FKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1TVEFSVC1USU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRVJST1IoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUVSUk9SOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRVJST1JfV0lUSF9ERVRBSUxTKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1FUlJPUi1XSVRILURFVEFJTFM6Q0FQUyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkxPV19FUlJPUigpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRkxPVy1FUlJPUjpDQVBTIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9XQVJOSU5HKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1XQVJOSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfV0FSTklOR19XSVRIX0RFVEFJTFMoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVdBUk5JTkctV0lUSC1ERVRBSUxTOkNBUFMiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0lORk8oKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUlORk86Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9JTkZPX1dJVEhfREVUQUlMUygpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtSU5GTy1XSVRILURFVEFJTFM6Q0FQUyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfSVNfTE9DS0VEX1NUQVRFKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1MT0NLRUQtU1RBVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1wYWQtdGVtcGxhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXN0YXRpYy1wYWQtdGVtcGxhdGUiIHNpbmNlPSIxLjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZcKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtcGFkLXRlbXBsYXRlLWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLXNldC1tZXRhZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLXNldC1zdGF0aWMtbWV0YWRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX21ldGFkYXRhwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1tZXRhZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1zdGF0aWMtbWV0YWRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfYWRkX3BhZMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcGFkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkc8KgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jcmVhdGUtYWxsLXBhZHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbXBhdGlibGUtcGFkLXRlbXBsYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtcmVxdWVzdC1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWTCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXRpYy1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWTCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVxdWVzdC1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LW5vLW1vcmUtcGFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbGVhc2UtcmVxdWVzdC1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZW1vdmUtcGFkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkc8KgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pdGVyYXRlLXBhZHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHPCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zaW5rLXBhZHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkc8KgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pdGVyYXRlLXNyYy1wYWRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2xpbmvCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF91bmxpbmvCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2xpbmtfbWFuecKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLW1hbnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfdW5saW5rX21hbnnCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rLW1hbnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfbGlua19wYWRzwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLXBhZHMtZnVsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF91bmxpbmtfcGFkc8KgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC11bmxpbmstcGFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWTCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZpbHRlcmVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWTCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1maWx0ZXJlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGHCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LW1ldGFkYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJhc2UtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1iYXNlLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXJ0LXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXJ0LXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfc2V0X2J1c8KgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtYnVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2dldF9idXPCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJ1cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zZXRfY29udGV4dMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtY29udGV4dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfY29udGV4dMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY29udGV4dCIgc2luY2U9IjEuOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfY29udGV4dF91bmxvY2tlZMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY29udGV4dC11bmxvY2tlZCIgc2luY2U9IjEuOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfY29udGV4dHPCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbnRleHRzIiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2dldF9mYWN0b3J5wqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1mYWN0b3J5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9lbGVtZW50X3NldF9uYW1lKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfbmFtZSgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2VsZW1lbnRfc2V0X3BhcmVudCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXBhcmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfcGFyZW50KCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtcGFyZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3NldF9jbG9ja8KgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXByb3ZpZGUtY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9nZXRfc3RhdGXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWxvY2tlZC1zdGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXMtbG9ja2VkLXN0YXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2Fib3J0X3N0YXRlwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFib3J0LXN0YXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNvbnRpbnVlLXN0YXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2xvc3Rfc3RhdGXCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbG9zdC1zdGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZcKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zdGF0ZS1nZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXN0YXRlLWNoYW5nZS1yZXR1cm4tZ2V0LW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zeW5jLXN0YXRlLXdpdGgtcGFyZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZcKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jaGFuZ2Utc3RhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxswqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LW1lc3NhZ2UtZnVsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LW1lc3NhZ2UtZnVsbC13aXRoLWRldGFpbHMiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tYWtlX2VsZW1lbnRfbWVzc2FnZV9kZXRhaWxzwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1tYWtlLWVsZW1lbnQtbWVzc2FnZS1kZXRhaWxzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZcKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wb3N0LW1lc3NhZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfcXVlcnnCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcXVlcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfcXVlcnlfY29udmVydMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1jb252ZXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5LXBvc2l0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5LWR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X3NlbmRfZXZlbnTCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VuZC1ldmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zZWVrX3NpbXBsZcKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZWVrLXNpbXBsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9zZWVrwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlZWsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaMKgKCkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcHJvcGVydHktbm90aWZ5LXdhdGNoIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2jCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWRkLXByb3BlcnR5LWRlZXAtbm90aWZ5LXdhdGNoIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNowqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbW92ZS1wcm9wZXJ0eS1ub3RpZnktd2F0Y2giIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEVsZW1lbnRDYWxsQXN5bmNGdW5jwqAoKSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDYWxsQXN5bmNGdW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2NhbGxfYXN5bmPCoCgpIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2FsbC1hc3luYyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RFbGVtZW50IiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RFbGVtZW50Q2xhc3MiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEVsZW1lbnRGbGFncyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0U3RhdGUiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0U3RhdGVDaGFuZ2UiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0U3RhdGVDaGFuZ2VSZXR1cm4iIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZUNoYW5nZVJldHVybiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1IiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1BVVRIT1I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTiIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLURFU0NSSVBUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfRE9DX1VSSSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLURPQy1VUkk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9JQ09OX05BTUUiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1JQ09OLU5BTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUtMQVNTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1MT05HTkFNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcbm8tbW9yZS1wYWRz4oCdIHNpZ25hbCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtbm8tbW9yZS1wYWRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccGFkLWFkZGVk4oCdIHNpZ25hbCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtcGFkLWFkZGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccGFkLXJlbW92ZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1wYWQtcmVtb3ZlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9yZWdpc3RlcsKgKCkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtcmVnaXN0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kwqAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWZpbmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlwqAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1lbGVtZW50LXR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGHCoCgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW1ldGFkYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhX2tleXPCoCgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW1ldGFkYXRhLWtleXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXPCoCgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW51bS1wYWQtdGVtcGxhdGVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlwqAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC11cmktdHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzwqAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC11cmktcHJvdG9jb2xzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZcKgKCkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1oYXMtaW50ZXJmYWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlwqAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNyZWF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X21ha2XCoCgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzwqAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zaW5rLWFsbC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2Fwc8KgKCkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc3JjLWFsbC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHPCoCgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYW55LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzwqAoKSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYW55LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXPCoCgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXN0YXRpYy1wYWQtdGVtcGxhdGVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXLCoCgpIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1maWx0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50c8KgKCkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWdldC1lbGVtZW50cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfaXNfdHlwZcKgKCkiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWlzLXR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEVsZW1lbnRGYWN0b3J5IiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InR5cGVkZWYiIG5hbWU9IkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQU5ZIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BTlk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUyIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtQVVESU9WSURFTy1TSU5LUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT19FTkNPREVSIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJTy1FTkNPREVSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09EQUJMRSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVDT0RBQkxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLURFQ09ERVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDUllQVE9SIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNSWVBUT1I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVNVVhFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERVBBWUxPQURFUiIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtREVQQVlMT0FERVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtRU5DT0RFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNSWVBUT1IiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUVOQ1JZUFRPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLUZPUk1BVFRFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1BWC1FTEVNRU5UUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTyIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQVVESU86Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0UiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1FRElBLUlNQUdFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX01FVEFEQVRBIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1NRVRBREFUQTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtU1VCVElUTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8iIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLU1FRElBLVZJREVPOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FOWSIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtTUVESUEtQU5ZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVBBUlNFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVBBWUxPQURFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LIiBsaW5rPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TSU5LOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NSQyIgbGluaz0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHU1QtRUxFTUVOVC1GQUNUT1JZLVRZUEUtU1JDOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1ZJREVPX0VOQ09ERVIiIGxpbms9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR1NULUVMRU1FTlQtRkFDVE9SWS1UWVBFLVZJREVPLUVOQ09ERVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXJyb3JfZ2V0X21lc3NhZ2XCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjZ3N0LWVycm9yLWdldC1tZXNzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RDb3JlRXJyb3IiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RDb3JlRXJyb3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdExpYnJhcnlFcnJvciIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdExpYnJhcnlFcnJvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UmVzb3VyY2VFcnJvciIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdFJlc291cmNlRXJyb3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFN0cmVhbUVycm9yIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0U3RyZWFtRXJyb3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NPUkVfRVJST1IiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9MSUJSQVJZX0VSUk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1IiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FUlJPUl9TWVNURU0iIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtRVJST1ItU1lTVEVNOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VWRU5UX01BS0VfVFlQRSgpIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1NQUtFLVRZUEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfVFlQRSgpIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VWRU5UX1RZUEVfTkFNRSgpIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLU5BTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfVElNRVNUQU1QKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRJTUVTVEFNUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FVkVOVF9TRVFOVU0oKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU0VRTlVNOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VWRU5UX0lTX1VQU1RSRUFNKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVVQU1RSRUFNOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0oKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtRE9XTlNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9FVkVOVF9JU19TRVJJQUxJWkVEKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVNFUklBTElaRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVZFTlRfSVNfU1RJQ0tZKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVNUSUNLWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF90eXBlX2dldF9mbGFnc8KgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtZ2V0LWZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF90eXBlX2dldF9uYW1lwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfdHlwZV90b19xdWFya8KgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3JlZsKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfdW5yZWbCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC11bnJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcmVwbGFjZcKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlcGxhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X2NvcHnCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1jb3B5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9zdGVhbMKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXN0ZWFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF90YWtlwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdGFrZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfZXZlbnRfaXNfd3JpdGFibGUoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtaXMtd3JpdGFibGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2V2ZW50X21ha2Vfd3JpdGFibGUoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbWFrZS13cml0YWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtd3JpdGFibGUtc3RydWN0dXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfY3VzdG9twqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWN1c3RvbSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZcKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWdldC1zdHJ1Y3R1cmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X2hhc19uYW1lwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtaGFzLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X2dldF9zZXFudW3CoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtc2VxbnVtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9zZXRfc2VxbnVtwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtc2V0LXNlcW51bSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfZ2V0X3J1bm5pbmdfdGltZV9vZmZzZXTCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtcnVubmluZy10aW1lLW9mZnNldCIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfc2V0X3J1bm5pbmdfdGltZV9vZmZzZXTCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1zZXQtcnVubmluZy10aW1lLW9mZnNldCIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0wqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWZsdXNoLXN0YXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcMKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1mbHVzaC1zdG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtZmx1c2gtc3RvcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X2Vvc8KgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1lb3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19nYXDCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZ2FwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9nYXDCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1nYXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnTCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RyZWFtLXN0YXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnTCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3NldF9zdHJlYW1fZmxhZ3PCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1zZXQtc3RyZWFtLWZsYWdzIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZmxhZ3PCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tZmxhZ3MiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3NldF9ncm91cF9pZMKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1ncm91cC1pZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWTCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1ncm91cC1pZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfc2V0X3N0cmVhbcKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1zdHJlYW0iIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW3CoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0iIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfc2VnbWVudMKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zZWdtZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9zZWdtZW50wqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc2VnbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfY29weV9zZWdtZW50wqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtY29weS1zZWdtZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfdGFnwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXRhZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2VfdGFnwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtdGFnIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemXCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctYnVmZmVyLXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3BhcnNlX2J1ZmZlcl9zaXplwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtYnVmZmVyLXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19xb3PCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctcW9zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9xb3PCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1xb3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19zZWVrwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlZWsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3BhcnNlX3NlZWvCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWVrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbsKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1uYXZpZ2F0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfbGF0ZW5jecKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1sYXRlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9sYXRlbmN5wqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X3N0ZXDCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RlcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2Vfc3RlcMKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0ZXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2XCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2luay1tZXNzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2XCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zaW5rLW1lc3NhZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZcKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1yZWNvbmZpZ3VyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X2NhcHPCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2VfY2Fwc8KgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld190b2PCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctdG9jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV90b2PCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS10b2MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld190b2Nfc2VsZWN0wqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXRvYy1zZWxlY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3TCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS10b2Mtc2VsZWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlZ21lbnQtZG9uZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudF9kb25lwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc2VnbWVudC1kb25lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfcHJvdGVjdGlvbsKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1wcm90ZWN0aW9uIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtcHJvdGVjdGlvbiIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlbGVjdC1zdHJlYW1zIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZXZlbnRfcGFyc2Vfc2VsZWN0X3N0cmVhbXPCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWxlY3Qtc3RyZWFtcyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X25ld19zdHJlYW1fY29sbGVjdGlvbsKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zdHJlYW0tY29sbGVjdGlvbiIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uwqAoKSIgbGluaz0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc3RyZWFtLWNvbGxlY3Rpb24iIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9uZXdfc3RyZWFtX2dyb3VwX2RvbmXCoCgpIiBsaW5rPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RyZWFtLWdyb3VwLWRvbmUiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZcKgKCkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbS1ncm91cC1kb25lIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEV2ZW50IiBsaW5rPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RXZlbnRUeXBlRmxhZ3MiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnRUeXBlRmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0VWRU5UX1RZUEVfQk9USCIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1CT1RIOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEV2ZW50VHlwZSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFN0cmVhbUZsYWdzIiBsaW5rPSJHc3RFdmVudC5odG1sI0dzdFN0cmVhbUZsYWdzIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RRT1NUeXBlIiBsaW5rPSJHc3RFdmVudC5odG1sI0dzdFFPU1R5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFNlZWtUeXBlIiBsaW5rPSJHc3RFdmVudC5odG1sI0dzdFNlZWtUeXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RTZWVrRmxhZ3MiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR3N0U2Vla0ZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mb3JtYXRfZ2V0X25hbWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1nZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZm9ybWF0X3RvX3F1YXJrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtdG8tcXVhcmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Zvcm1hdF9yZWdpc3RlcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LXJlZ2lzdGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mb3JtYXRfZ2V0X2J5X25pY2vCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1nZXQtYnktbmljayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZm9ybWF0c19jb250YWluc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0cy1jb250YWlucyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZm9ybWF0X2dldF9kZXRhaWxzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtZ2V0LWRldGFpbHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtaXRlcmF0ZS1kZWZpbml0aW9ucyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0Rm9ybWF0IiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVBFUkNFTlQtTUFYOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0ZPUk1BVF9QRVJDRU5UX1NDQUxFIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1QRVJDRU5ULVNDQUxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RGb3JtYXREZWZpbml0aW9uIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0RGVmaW5pdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZ2hvc3RfcGFkX25ld8KgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0wqAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1uby10YXJnZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZcKgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZcKgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0LWZyb20tdGVtcGxhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0wqAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLXNldC10YXJnZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0wqAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWdldC10YXJnZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3TCoCgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtY29uc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9naG9zdF9wYWRfYWN0aXZhdGVfbW9kZV9kZWZhdWx0wqAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWFjdGl2YXRlLW1vZGUtZGVmYXVsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX21vZGVfZGVmYXVsdMKgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1pbnRlcm5hbC1hY3RpdmF0ZS1tb2RlLWRlZmF1bHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWzCoCgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0LWludGVybmFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0wqAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZGVmYXVsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHTCoCgpIiBsaW5rPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtY2hhaW4tZGVmYXVsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdMKgKCkiIGxpbms9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1jaGFpbi1saXN0LWRlZmF1bHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0wqAoKSIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWdldHJhbmdlLWRlZmF1bHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQcm94eVBhZCIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNHc3RQcm94eVBhZC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RHaG9zdFBhZCIgbGluaz0iR3N0R2hvc3RQYWQuaHRtbCNHc3RHaG9zdFBhZC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RJdGVyYXRvck5leHRGdW5jdGlvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZyZWVGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lURVJBVE9SKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9JVEVSQVRPUl9MT0NLKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1MT0NLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lURVJBVE9SX0NPT0tJRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItQ09PS0lFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lURVJBVE9SX09SSUdfQ09PS0lFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1PUklHLUNPT0tJRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9uZXfCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9uZXdfbGlzdMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXctbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXctc2luZ2xlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9jb3B5wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWNvcHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2l0ZXJhdG9yX2ZyZWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXRlcmF0b3JfbmV4dMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXh0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9yZXN5bmPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItcmVzeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9wdXNowqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLXB1c2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2l0ZXJhdG9yX2ZpbHRlcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1maWx0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2l0ZXJhdG9yX2ZvbGTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9sZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaXRlcmF0b3JfZm9yZWFjaMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mb3JlYWNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1maW5kLWN1c3RvbSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEl0ZXJhdG9yIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0SXRlcmF0b3JJdGVtIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckl0ZW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEl0ZXJhdG9yUmVzdWx0IiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVNT1JZX0ZMQUdTKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBR1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBRy1JUy1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVNT1JZX0ZMQUdfVU5TRVQoKSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLVVOU0VUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FTU9SWV9JU19SRUFET05MWSgpIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLVJFQURPTkxZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FTU9SWV9JU19OT19TSEFSRSgpIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLU5PLVNIQVJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FTU9SWV9JU19aRVJPX1BBRERFRCgpIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLVpFUk8tUEFEREVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FTU9SWV9JU19aRVJPX1BSRUZJWEVEKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktSVMtWkVSTy1QUkVGSVhFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRU1PUllfSVNfUEhZU0lDQUxMWV9DT05USUdVT1VTKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktSVMtUEhZU0lDQUxMWS1DT05USUdVT1VTOkNBUFMiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEUoKSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1JUy1OT1QtTUFQUEFCTEU6Q0FQUyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlNYXBGdW5jdGlvbsKgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeU1hcEZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbsKgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uwqAoKSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5VW5tYXBGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlVbm1hcEZ1bGxGdW5jdGlvbsKgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVVubWFwRnVsbEZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdE1lbW9yeUNvcHlGdW5jdGlvbsKgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUNvcHlGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uwqAoKSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbsKgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZW1vcnlfaW5pdMKgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktaW5pdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X2lzX3R5cGXCoCgpIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWlzLXR5cGUiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lbW9yeV9yZWbCoCgpIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X3VucmVmwqAoKSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bnJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X2dldF9zaXplc8KgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktZ2V0LXNpemVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZW1vcnlfcmVzaXplwqAoKSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1yZXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X21lbW9yeV9sb2NrKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfbWVtb3J5X3VubG9jaygpIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXVubG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfbWVtb3J5X2lzX3dyaXRhYmxlKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktaXMtd3JpdGFibGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X21lbW9yeV9tYWtlX3dyaXRhYmxlKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFrZS13cml0YWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X21ha2VfbWFwcGVkwqAoKSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1tYWtlLW1hcHBlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X21hcMKgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZW1vcnlfdW5tYXDCoCgpIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXVubWFwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZW1vcnlfY29wecKgKCkiIGxpbms9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X3NoYXJlwqAoKSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1zaGFyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVtb3J5X2lzX3NwYW7CoCgpIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWlzLXNwYW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdE1lbW9yeUZsYWdzIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE1lbW9yeSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0TWFwRmxhZ3MiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dzdE1hcEZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NQVBfUkVBRFdSSVRFIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUFQLVJFQURXUklURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RNYXBJbmZvIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NQVBfSU5GT19JTklUIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUFQLUlORk8tSU5JVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRVNTQUdFX1NSQygpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1JDOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FU1NBR0VfU1JDX05BTUUoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNSQy1OQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FU1NBR0VfVElNRVNUQU1QKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1USU1FU1RBTVA6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVTU0FHRV9TRVFOVU0oKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNFUU5VTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRVNTQUdFX1RZUEUoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRZUEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVTU0FHRV9UWVBFX0lTX0VYVEVOREVEKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFLUlTLUVYVEVOREVEOkNBUFMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FU1NBR0VfVFlQRV9OQU1FKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFLU5BTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXR5cGUtdG8tcXVhcmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZcKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS10eXBlLWdldC1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3JlZsKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfdW5yZWbCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtdW5yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfY29wecKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1jb3B5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmXCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cnVjdHVyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfbWVzc2FnZV9tYWtlX3dyaXRhYmxlKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1tYWtlLXdyaXRhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX2dldF9zZXFudW3CoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXNlcW51bSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9zZXRfc2VxbnVtwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1zZXFudW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfaGFzX25hbWXCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtaGFzLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X21lc3NhZ2VfaXNfd3JpdGFibGUoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWlzLXdyaXRhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3JlcGxhY2XCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcmVwbGFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfZW9zwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1lb3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2Vycm9ywqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1lcnJvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfZXJyb3Jfd2l0aF9kZXRhaWxzwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1lcnJvci13aXRoLWRldGFpbHMiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX2Vycm9ywqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWVycm9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yX2RldGFpbHPCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3ItZGV0YWlscyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmfCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXdhcm5pbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmdfd2l0aF9kZXRhaWxzwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy13YXJuaW5nLXdpdGgtZGV0YWlscyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZ8KgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmdfZGV0YWlsc8KgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nLWRldGFpbHMiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19pbmZvwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1pbmZvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19pbmZvX3dpdGhfZGV0YWlsc8KgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctaW5mby13aXRoLWRldGFpbHMiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX2luZm/CoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtaW5mbyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9pbmZvX2RldGFpbHPCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtaW5mby1kZXRhaWxzIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfdGFnwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy10YWciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfdGFnwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXRhZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1idWZmZXJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1idWZmZXJpbmctc3RhdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZy1zdGF0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RhdGUtY2hhbmdlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0YXRlLWNoYW5nZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5wqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGF0ZS1kaXJ0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGVwLWRvbmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9kb25lwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0ZXAtZG9uZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfY2xvY2tfcHJvdmlkZcKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY2xvY2stcHJvdmlkZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWNsb2NrLXByb3ZpZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3TCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWNsb2NrLWxvc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1jbG9jay1sb3N0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2vCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LW5ldy1jbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2vCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtbmV3LWNsb2NrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbsKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYXBwbGljYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnTCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWVsZW1lbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbcKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY3VzdG9tIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0wqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zZWdtZW50LXN0YXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnTCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zZWdtZW50LWRvbmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXNlZ21lbnQtZG9uZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZHVyYXRpb24tY2hhbmdlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jecKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfYXN5bmNfc3RhcnTCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWFzeW5jLXN0YXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19hc3luY19kb25lwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1hc3luYy1kb25lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmXCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtYXN5bmMtZG9uZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RlcF9zdGFydMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RlcC1zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0wqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0ZXAtc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3Fvc8KgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcW9zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1xb3MtdmFsdWVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHPCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXFvcy1zdGF0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3PCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3Fvc192YWx1ZXPCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zLXZhbHVlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHPCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zLXN0YXRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld190b2PCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXRvYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV90b2PCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtdG9jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19yZXNldF90aW1lwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1yZXNldC10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3Jlc2V0X3RpbWXCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcmVzZXQtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXJ0wqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdHJlYW0tc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2Vfc2V0X2dyb3VwX2lkwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1ncm91cC1pZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9ncm91cF9pZMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1ncm91cC1pZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb27CoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1jb2xsZWN0aW9uIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbsKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdHJlYW0tY29sbGVjdGlvbiIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2XCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cnVjdHVyZS1jaGFuZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZcKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdHJ1Y3R1cmUtY2hhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1yZXF1ZXN0LXN0YXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGXCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcmVxdWVzdC1zdGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXR1c8KgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RyZWFtLXN0YXR1cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbS1zdGF0dXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2Vfc2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0wqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1zdHJlYW0tc3RhdHVzLW9iamVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3TCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cmVhbS1zdGF0dXMtb2JqZWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19wcm9ncmVzc8KgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcHJvZ3Jlc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3PCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvZ3Jlc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctbmVlZC1jb250ZXh0IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZcKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1jb250ZXh0LXR5cGUiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2hhdmVfY29udGV4dMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctaGF2ZS1jb250ZXh0IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1oYXZlLWNvbnRleHQiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfbmV3X2RldmljZV9hZGRlZMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZGV2aWNlLWFkZGVkIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19kZXZpY2VfcmVtb3ZlZMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZGV2aWNlLXJlbW92ZWQiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWRldmljZS1hZGRlZCIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9kZXZpY2VfcmVtb3ZlZMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1kZXZpY2UtcmVtb3ZlZCIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9uZXdfcHJvcGVydHlfbm90aWZ5wqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1wcm9wZXJ0eS1ub3RpZnkiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3Byb3BlcnR5X25vdGlmecKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1wcm9wZXJ0eS1ub3RpZnkiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19zdHJlYW1zX3NlbGVjdGVkwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdHJlYW1zLXNlbGVjdGVkIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1zX3NlbGVjdGVkwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbXMtc2VsZWN0ZWQiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfYWRkwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXN0cmVhbXMtc2VsZWN0ZWQtYWRkIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplwqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXN0cmVhbXMtc2VsZWN0ZWQtZ2V0LXNpemUiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbcKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWdldC1zdHJlYW0iIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX25ld19yZWRpcmVjdMKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcmVkaXJlY3QiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX2FkZF9yZWRpcmVjdF9lbnRyecKgKCkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1hZGQtcmVkaXJlY3QtZW50cnkiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXNzYWdlX3BhcnNlX3JlZGlyZWN0X2VudHJ5wqAoKSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXJlZGlyZWN0LWVudHJ5IiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWVzc2FnZV9nZXRfbnVtX3JlZGlyZWN0X2VudHJpZXPCoCgpIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LW51bS1yZWRpcmVjdC1lbnRyaWVzIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE1lc3NhZ2UiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0TWVzc2FnZVR5cGUiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dzdFN0cnVjdHVyZUNoYW5nZVR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFN0cmVhbVN0YXR1c1R5cGUiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJlYW1TdGF0dXNUeXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RQcm9ncmVzc1R5cGUiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHc3RQcm9ncmVzc1R5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FVEFfRkxBR1MoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1GTEFHUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRVRBX0ZMQUdfSVNfU0VUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtRkxBRy1JUy1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVUQV9GTEFHX1NFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctU0VUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FVEFfRkxBR19VTlNFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctVU5TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNZXRhSW5pdEZ1bmN0aW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5pdEZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdE1ldGFGcmVlRnVuY3Rpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFGcmVlRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FVEFfVFJBTlNGT1JNX0lTX0NPUFkoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1UUkFOU0ZPUk0tSVMtQ09QWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1hcGktdHlwZS1yZWdpc3RlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWV0YV9hcGlfdHlwZV9oYXNfdGFnwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1hcGktdHlwZS1oYXMtdGFnIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1hcGktdHlwZS1nZXQtdGFncyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWV0YV9yZWdpc3RlcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtcmVnaXN0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21ldGFfZ2V0X2luZm/CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLWdldC1pbmZvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TWV0YSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RNZXRhRmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TWV0YUluZm8iIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdE1ldGFUcmFuc2Zvcm1Db3B5IiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1Db3B5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NRVRBX1RBR19NRU1PUlkiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtVEFHLU1FTU9SWTpDQVBTIiBkZXByZWNhdGVkPSIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FVEFfVEFHX01FTU9SWV9TVFIiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtVEFHLU1FTU9SWS1TVFI6Q0FQUyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RNaW5pT2JqZWN0Tm90aWZ5wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Tm90aWZ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NSU5JX09CSkVDVF9UWVBFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVRZUEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR1MoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBR1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1JUy1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01JTklfT0JKRUNUX0lTX0xPQ0tBQkxFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULUlTLUxPQ0tBQkxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVJFRkNPVU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULU1JTkktT0JKRUNULVJFRkNPVU5ULVZBTFVFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULURFRklORS1NSU5JLU9CSkVDVC1UWVBFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X2luaXTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1pbml0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9taW5pX29iamVjdF9yZWbCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X3VucmVmwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X3dlYWtfcmVmwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtd2Vhay1yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWbCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC13ZWFrLXVucmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9taW5pX29iamVjdF9sb2NrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3RfdW5sb2NrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5sb2NrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9taW5pX29iamVjdF9pc193cml0YWJsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWlzLXdyaXRhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbWFrZS13cml0YWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3RfY29wecKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWNvcHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXNldC1xZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3RfZ2V0X3FkYXRhwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtZ2V0LXFkYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9taW5pX29iamVjdF9zdGVhbF9xZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXN0ZWFsLXFkYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9taW5pX29iamVjdF9yZXBsYWNlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtcmVwbGFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbWluaV9vYmplY3RfdGFrZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXRha2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X21pbmlfb2JqZWN0X3N0ZWFswqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtc3RlYWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RNaW5pT2JqZWN0IiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdE1pbmlPYmplY3RGbGFncyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0RmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdExvY2tGbGFncyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RMb2NrRmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0xPQ0tfRkxBR19SRUFEV1JJVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULUxPQ0stRkxBRy1SRUFEV1JJVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX0ZMQUdTKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtRkxBR1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtRkxBRy1JUy1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX0ZMQUdfU0VUKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtRkxBRy1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX0ZMQUdfVU5TRVQoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX09CSkVDVF9OQU1FKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtTkFNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9PQkpFQ1RfUEFSRU5UKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtUEFSRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX09CSkVDVF9SRUZDT1VOVCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVJFRkNPVU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVJFRkNPVU5ULVZBTFVFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX09CSkVDVF9MT0NLKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dTVC1PQkpFQ1QtTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9PQkpFQ1RfVFJZTE9DSygpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVRSWUxPQ0s6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfT0JKRUNUX1VOTE9DSygpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVVOTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9PQkpFQ1RfR0VUX0xPQ0soKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR1NULU9CSkVDVC1HRVQtTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3Rfc2V0X25hbWXCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfZ2V0X25hbWXCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3Rfc2V0X3BhcmVudMKgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc2V0LXBhcmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X2dldF9wYXJlbnTCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1wYXJlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9oYXNfYXNfcGFyZW50wqAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1oYXMtYXMtcGFyZW50IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfdW5wYXJlbnTCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucGFyZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmecKgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZGVmYXVsdC1kZWVwLW5vdGlmeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3LCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZXJyb3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzwqAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1jaGVjay11bmlxdWVuZXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9ywqAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1oYXMtYXMtYW5jZXN0b3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9oYXNfYW5jZXN0b3LCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hbmNlc3RvciIgZGVwcmVjYXRlZD0iIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfcmVmwqAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9yZWZfc2lua8KgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtcmVmLXNpbmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9yZXBsYWNlwqAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1yZXBsYWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nwqAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1nZXQtcGF0aC1zdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luY8KgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc3VnZ2VzdC1uZXh0LXN5bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9zeW5jX3ZhbHVlc8KgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3Qtc3luYy12YWx1ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9oYXNfYWN0aXZlX2NvbnRyb2xfYmluZGluZ3PCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hY3RpdmUtY29udHJvbC1iaW5kaW5ncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdzX2Rpc2FibGVkwqAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1zZXQtY29udHJvbC1iaW5kaW5ncy1kaXNhYmxlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdfZGlzYWJsZWTCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sLWJpbmRpbmctZGlzYWJsZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nwqAoKSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC1hZGQtY29udHJvbC1iaW5kaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfYmluZGluZ8KgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LWNvbnRyb2wtYmluZGluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X3JlbW92ZV9jb250cm9sX2JpbmRpbmfCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlbW92ZS1jb250cm9sLWJpbmRpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X29iamVjdF9nZXRfdmFsdWXCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X2dldF92YWx1ZV9hcnJhecKgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LXZhbHVlLWFycmF5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXnCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1nLXZhbHVlLWFycmF5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfcmF0ZcKgKCkiIGxpbms9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtZ2V0LWNvbnRyb2wtcmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGXCoCgpIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sLXJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RPYmplY3QiIGxpbms9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RPYmplY3RDbGFzcyIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0Q2xhc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdE9iamVjdEZsYWdzIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbmFtZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LS1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwYXJlbnTigJ0gcHJvcGVydHkiIGxpbms9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC0tcGFyZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcZGVlcC1ub3RpZnnigJ0gc2lnbmFsIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3QtZGVlcC1ub3RpZnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9saW5rX2dldF9uYW1lwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rLWdldC1uYW1lIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfTElOS19GQUlMRUQoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUZBSUxFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfTElOS19TVUNDRVNTRlVMKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1TVUNDRVNTRlVMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Zsb3dfZ2V0X25hbWXCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtZmxvdy1nZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZmxvd190b19xdWFya8KgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1mbG93LXRvLXF1YXJrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfbW9kZV9nZXRfbmFtZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtbW9kZS1nZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RvcmUtc3RpY2t5LWV2ZW50IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wYWRfZ2V0X25hbWUoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9kaXJlY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1kaXJlY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3BhZF9nZXRfcGFyZW50KCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhcmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhcmVudC1lbGVtZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBhZC10ZW1wbGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2xpbmvCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9saW5rX2Z1bGzCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstZnVsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmfCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstbWF5YmUtZ2hvc3RpbmciIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZ19mdWxswqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rLW1heWJlLWdob3N0aW5nLWZ1bGwiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfdW5saW5rwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC11bmxpbmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9pc19saW5rZWTCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWxpbmtlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2Nhbl9saW5rwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jYW4tbGluayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHPCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1hbGxvd2VkLWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtY3VycmVudC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFkLXRlbXBsYXRlLWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9nZXRfcGVlcsKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXBlZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF91c2VfZml4ZWRfY2Fwc8KgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtdXNlLWZpeGVkLWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1oYXMtY3VycmVudC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0aWNreS1ldmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2jCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0aWNreS1ldmVudHMtZm9yZWFjaCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2lzX2FjdGl2ZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtYWN0aXZlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm7CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1sYXN0LWZsb3ctcmV0dXJuIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfUFJPQkVfSU5GT19UWVBFKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtSU5GTy1UWVBFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9QUk9CRV9JTkZPX0lEKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtSU5GTy1JRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfUFJPQkVfSU5GT19EQVRBKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtSU5GTy1EQVRBOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUigpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tQlVGRkVSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUl9MSVNUKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtSU5GTy1CVUZGRVItTElTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfUFJPQkVfSU5GT19FVkVOVCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tRVZFTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1BST0JFX0lORk9fUVVFUlkoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1JTkZPLVFVRVJZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXLCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb2JlLWluZm8tZ2V0LWJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2J1ZmZlcl9saXN0wqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wcm9iZS1pbmZvLWdldC1idWZmZXItbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2V2ZW50wqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wcm9iZS1pbmZvLWdldC1ldmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X3F1ZXJ5wqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wcm9iZS1pbmZvLWdldC1xdWVyeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1BST0JFX0lORk9fT0ZGU0VUKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtSU5GTy1PRkZTRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1BST0JFX0lORk9fU0laRSgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tU0laRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfUFJPQkVfSU5GT19GTE9XX1JFVFVSTigpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tRkxPVy1SRVRVUk46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRQcm9iZUNhbGxiYWNrwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2FkZF9wcm9iZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWRkLXByb2JlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcmVtb3ZlX3Byb2JlwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1yZW1vdmUtcHJvYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9pc19ibG9ja2VkwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1ibG9ja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfaXNfYmxvY2tpbmfCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWlzLWJsb2NraW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X29mZnNldMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9vZmZzZXTCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1vZmZzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9uZXfCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1uZXctZnJvbS10ZW1wbGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmV3LWZyb20tc3RhdGljLXRlbXBsYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNoYWluLWZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uX2Z1bGzCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1mdW5jdGlvbi1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZENoYWluRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24oKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2hhaW4tbGlzdC1mdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uX2Z1bGzCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1saXN0LWZ1bmN0aW9uLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9yYW5nZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXJhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWdldHJhbmdlLWZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uX2Z1bGzCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbi1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEdldFJhbmdlRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWV2ZW50LWZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uX2Z1bGzCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1ldmVudC1mdW5jdGlvbi1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEV2ZW50RnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRFdmVudEZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb24oKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZXZlbnQtZnVsbC1mdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uX2Z1bGzCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1ldmVudC1mdWxsLWZ1bmN0aW9uLWZ1bGwiIHNpbmNlPSIxLjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRFdmVudEZ1bGxGdW5jdGlvbiIgc2luY2U9IjEuOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWxpbmstZnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbl9mdWxswqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtbGluay1mdW5jdGlvbi1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZExpbmtGdW5jdGlvbsKgKCkiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb24oKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtdW5saW5rLWZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbl9mdWxswqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtdW5saW5rLWZ1bmN0aW9uLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGFkVW5saW5rRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRVbmxpbmtGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3Byb3h5X3F1ZXJ5X2NhcHPCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb3h5LXF1ZXJ5LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wcm94eV9xdWVyeV9hY2NlcHRfY2Fwc8KgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHJveHktcXVlcnktYWNjZXB0LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24oKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGUtZnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb25fZnVsbMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2YXRlLWZ1bmN0aW9uLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGFkQWN0aXZhdGVGdW5jdGlvbsKgKCkiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2YXRlbW9kZS1mdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb25fZnVsbMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2YXRlbW9kZS1mdW5jdGlvbi1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9uZWVkc19yZWNvbmZpZ3VyZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtbmVlZHMtcmVjb25maWd1cmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hlY2stcmVjb25maWd1cmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9tYXJrX3JlY29uZmlndXJlwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1tYXJrLXJlY29uZmlndXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcHVzaMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3B1c2hfZXZlbnTCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wdXNoX2xpc3TCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3B1bGxfcmFuZ2XCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1bGwtcmFuZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1hY3RpdmF0ZS1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2VuZF9ldmVudMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2VuZC1ldmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2V2ZW50X2RlZmF1bHTCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWV2ZW50LWRlZmF1bHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9xdWVyecKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wZWVyX3F1ZXJ5wqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1wZWVyLXF1ZXJ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcXVlcnlfZGVmYXVsdMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktZGVmYXVsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3F1ZXJ5X3Bvc2l0aW9uwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1wb3NpdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3F1ZXJ5X2NvbnZlcnTCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWNvbnZlcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9xdWVyeV9hY2NlcHRfY2Fwc8KgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtcXVlcnktYWNjZXB0LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9xdWVyeV9jYXBzwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1xdWVyeS1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcGVlcl9xdWVyeV9wb3NpdGlvbsKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGVlci1xdWVyeS1wb3NpdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktZHVyYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NvbnZlcnTCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktY29udmVydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3BlZXJfcXVlcnlfYWNjZXB0X2NhcHPCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktYWNjZXB0LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHPCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbigpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1xdWVyeS1mdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbl9mdWxswqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtcXVlcnktZnVuY3Rpb24tZnVsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQYWRRdWVyeUZ1bmN0aW9uwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbl9mdWxswqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1mdW5jdGlvbi1mdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc8KgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1kZWZhdWx0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWVsZW1lbnQtcHJpdmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGXCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1lbGVtZW50LXByaXZhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jcmVhdGUtc3RyZWFtLWlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGbCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNyZWF0ZS1zdHJlYW0taWQtcHJpbnRmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGZfdmFsaXN0wqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jcmVhdGUtc3RyZWFtLWlkLXByaW50Zi12YWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9nZXRfc3RyZWFtX2lkwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtc3RyZWFtLWlkIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZ2V0X3N0cmVhbcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0cmVhbSIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGFkRm9yd2FyZEZ1bmN0aW9uwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkRm9yd2FyZEZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfZm9yd2FyZMKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtZm9yd2FyZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2NoYWluwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1jaGFpbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX2NoYWluX2xpc3TCoCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWNoYWluLWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhZF9zdGFydF90YXNrwqAoKSIgbGluaz0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdGFydC10YXNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfcGF1c2VfdGFza8KgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtcGF1c2UtdGFzayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3N0b3BfdGFza8KgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc3RvcC10YXNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfc2V0X2FjdGl2ZcKgKCkiIGxpbms9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUdFVC1TVFJFQU0tTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfU1RSRUFNX0xPQ0soKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfU1RSRUFNX1RSWUxPQ0soKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TVFJFQU0tVFJZTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfU1RSRUFNX1VOTE9DSygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1VTkxPQ0s6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX05BTUUoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1OQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9QQVJFTlQoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QQVJFTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0VMRU1FTlRfUFJJVkFURSgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUVMRU1FTlQtUFJJVkFURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfUEFEX1RFTVBMQVRFKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUEFELVRFTVBMQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9ESVJFQ1RJT04oKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1ESVJFQ1RJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0xBU1RfRkxPV19SRVRVUk4oKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MQVNULUZMT1ctUkVUVVJOOkNBUFMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9UQVNLKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtVEFTSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfTU9ERSgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELU1PREU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0FDVElWQVRFRlVOQygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUFDVElWQVRFRlVOQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfQUNUSVZBVEVNT0RFRlVOQygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUFDVElWQVRFTU9ERUZVTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0NIQUlORlVOQygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUNIQUlORlVOQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfQ0hBSU5MSVNURlVOQygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUNIQUlOTElTVEZVTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0VWRU5URlVOQygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUVWRU5URlVOQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfRVZFTlRGVUxMRlVOQygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUVWRU5URlVMTEZVTkM6Q0FQUyIgc2luY2U9IjEuOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0dFVFJBTkdFRlVOQygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUdFVFJBTkdFRlVOQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfUVVFUllGVU5DKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUVVFUllGVU5DOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JVEVSSU5UTElOS0ZVTkMoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1JVEVSSU5UTElOS0ZVTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1BFRVIoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QRUVSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9MSU5LRlVOQygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTktGVU5DOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9VTkxJTktGVU5DKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtVU5MSU5LRlVOQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfSVNfTElOS0VEKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtTElOS0VEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JU19TUkMoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1TUkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0lTX1NJTksoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1TSU5LOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JU19BQ1RJVkUoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1BQ1RJVkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0lTX0JMT0NLRUQoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1CTE9DS0VEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JU19CTE9DS0lORygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLUJMT0NLSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JU19GTFVTSElORygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLUZMVVNISU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9TRVRfRkxVU0hJTkcoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TRVQtRkxVU0hJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1VOU0VUX0ZMVVNISU5HKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtVU5TRVQtRkxVU0hJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX0lTX0VPUygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLUVPUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfTkVFRFNfUkVDT05GSUdVUkUoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1ORUVEUy1SRUNPTkZJR1VSRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfSEFTX1BFTkRJTkdfRVZFTlRTKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtSEFTLVBFTkRJTkctRVZFTlRTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JU19GSVhFRF9DQVBTKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtRklYRUQtQ0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX05FRURTX1BBUkVOVCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELU5FRURTLVBBUkVOVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfSVNfUFJPWFlfQ0FQUygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLVBST1hZLUNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNFVC1QUk9YWS1DQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfVU5TRVRfUFJPWFlfQ0FQUygpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULVBST1hZLUNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JU19QUk9YWV9BTExPQ0FUSU9OKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtUFJPWFktQUxMT0NBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04oKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TRVQtUFJPWFktQUxMT0NBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfVU5TRVRfUFJPWFlfQUxMT0NBVElPTigpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULVBST1hZLUFMTE9DQVRJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1NFVF9QUk9YWV9TQ0hFRFVMSU5HKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtU0VULVBST1hZLVNDSEVEVUxJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1VOU0VUX1BST1hZX1NDSEVEVUxJTkcoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1VTlNFVC1QUk9YWS1TQ0hFRFVMSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JU19QUk9YWV9TQ0hFRFVMSU5HKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtUFJPWFktU0NIRURVTElORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfSVNfQUNDRVBUX0lOVEVSU0VDVCgpIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLUFDQ0VQVC1JTlRFUlNFQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1NFVF9BQ0NFUFRfSU5URVJTRUNUKCkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtU0VULUFDQ0VQVC1JTlRFUlNFQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1VOU0VUX0FDQ0VQVF9JTlRFUlNFQ1QoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1VTlNFVC1BQ0NFUFQtSU5URVJTRUNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9JU19BQ0NFUFRfVEVNUExBVEUoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1BQ0NFUFQtVEVNUExBVEU6Q0FQUyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1TRVQtQUNDRVBULVRFTVBMQVRFOkNBUFMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBRF9VTlNFVF9BQ0NFUFRfVEVNUExBVEUoKSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1VTlNFVC1BQ0NFUFQtVEVNUExBVEU6Q0FQUyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFBhZCIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWREaXJlY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBhZEZsYWdzIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGFkTGlua1JldHVybiIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkTGlua1JldHVybiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGFkTGlua0NoZWNrIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rQ2hlY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEZsb3dSZXR1cm4iIGxpbms9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBhZE1vZGUiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZE1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBhZFByb2JlUmV0dXJuIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZVJldHVybiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGFkUHJvYmVUeXBlIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZVR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQYWRQcm9iZUluZm8iIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlSW5mbyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2Fwc+KAnSBwcm9wZXJ0eSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkLS1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkaXJlY3Rpb27igJ0gcHJvcGVydHkiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZC0tZGlyZWN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxvZmZzZXTigJ0gcHJvcGVydHkiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZC0tb2Zmc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0ZW1wbGF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkLS10ZW1wbGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGxpbmtlZOKAnSBzaWduYWwiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZC1saW5rZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJx1bmxpbmtlZOKAnSBzaWduYWwiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZC11bmxpbmtlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBVElDX1BBRF9URU1QTEFURSgpIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1TVEFUSUMtUEFELVRFTVBMQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0wqAoKSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3Qtc3RhdGljLXBhZC10ZW1wbGF0ZS1nZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHPCoCgpIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfVEVNUExBVEVfTkFNRV9URU1QTEFURSgpIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtTkFNRS1URU1QTEFURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1ESVJFQ1RJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1QUkVTRU5DRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QQURfVEVNUExBVEVfQ0FQUygpIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtQ0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVEKCkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1JUy1GSVhFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYWRfdGVtcGxhdGVfbmV3wqAoKSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3QtcGFkLXRlbXBsYXRlLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzwqAoKSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNnc3QtcGFkLXRlbXBsYXRlLWdldC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3RhdGljUGFkVGVtcGxhdGUiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQYWRUZW1wbGF0ZSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBhZFRlbXBsYXRlRmxhZ3MiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGVGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGFkUHJlc2VuY2UiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkUHJlc2VuY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNhcHPigJ0gcHJvcGVydHkiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRpcmVjdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tZGlyZWN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxuYW1lLXRlbXBsYXRl4oCdIHByb3BlcnR5IiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1uYW1lLXRlbXBsYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwcmVzZW5jZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tcHJlc2VuY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxwYWQtY3JlYXRlZOKAnSBzaWduYWwiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtcGFkLWNyZWF0ZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjZ3N0LXBhcmFtLXNwZWMtZnJhY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBUkFNX0NPTlRST0xMQUJMRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1DT05UUk9MTEFCTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFSQU1fVVNFUl9TSElGVCIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1VU0VSLVNISUZUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBUkFNX01VVEFCTEVfUEFVU0VEIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR1NULVBBUkFNLU1VVEFCTEUtUEFVU0VEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVBMQVlJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVJFQURZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQYXJhbVNwZWNGcmFjdGlvbiIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dzdFBhcmFtU3BlY0ZyYWN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wYXJzZV9lcnJvcl9xdWFya8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1lcnJvci1xdWFyayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFyc2VfbGF1bmNowqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFyc2VfbGF1bmNoX2Z1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNoLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2xhdW5jaHbCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNodiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFyc2VfbGF1bmNodl9mdWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaHYtZnVsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24tZnVsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGFyc2VfY29udGV4dF9uZXfCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2NvbnRleHRfZnJlZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LWZyZWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1nZXQtbWlzc2luZy1lbGVtZW50cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUEFSU0VfRVJST1IiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RQYXJzZUVycm9yIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUVycm9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RQYXJzZUNvbnRleHQiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlQ29udGV4dC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBhcnNlRmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlRmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BpcGVsaW5lX25ld8KgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfZ2V0X2J1c8KgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1idXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BpcGVsaW5lX3NldF9jbG9ja8KgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1jbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfZ2V0X3BpcGVsaW5lX2Nsb2NrwqAoKSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LXBpcGVsaW5lLWNsb2NrIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9waXBlbGluZV9nZXRfY2xvY2vCoCgpIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BpcGVsaW5lX3VzZV9jbG9ja8KgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfYXV0b19jbG9ja8KgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWF1dG8tY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1c8KgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1hdXRvLWZsdXNoLWJ1cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzwqAoKSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWF1dG8tZmx1c2gtYnVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9waXBlbGluZV9zZXRfZGVsYXnCoCgpIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtZGVsYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BpcGVsaW5lX2dldF9kZWxhecKgKCkiIGxpbms9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1kZWxheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfc2V0X2xhdGVuY3nCoCgpIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtbGF0ZW5jeSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGlwZWxpbmVfZ2V0X2xhdGVuY3nCoCgpIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtbGF0ZW5jeSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFBpcGVsaW5lIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGlwZWxpbmVGbGFncyIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZUZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhdXRvLWZsdXNoLWJ1c+KAnSBwcm9wZXJ0eSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS0tYXV0by1mbHVzaC1idXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRlbGF54oCdIHByb3BlcnR5IiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLS1kZWxheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGF0ZW5jeeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS0tbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2Vycm9yX3F1YXJrwqAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1lcnJvci1xdWFyayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RQbHVnaW5Jbml0RnVuY8KgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkluaXRGdW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFBsdWdpbkluaXRGdWxsRnVuY8KgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkluaXRGdWxsRnVuYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUExVR0lOX0RFRklORSgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFRklORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkUoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1TVEFUSUMtREVDTEFSRTpDQVBTIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QTFVHSU5fU1RBVElDX1JFR0lTVEVSKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tU1RBVElDLVJFR0lTVEVSOkNBUFMiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGx1Z2luRmlsdGVywqAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRmlsdGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZ2V0X25hbWXCoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uwqAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtZGVzY3JpcHRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWXCoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1maWxlbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2dldF9saWNlbnNlwqAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtbGljZW5zZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2dldF9wYWNrYWdlwqAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtcGFja2FnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2dldF9vcmlnaW7CoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1vcmlnaW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9nZXRfc291cmNlwqAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1nZXQtc291cmNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZ2V0X3ZlcnNpb27CoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC12ZXJzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZ2V0X3JlbGVhc2VfZGF0ZV9zdHJpbmfCoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWdldC1yZWxlYXNlLWRhdGUtc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5faXNfbG9hZGVkwqAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1pcy1sb2FkZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YcKgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWNhY2hlLWRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9zZXRfY2FjaGVfZGF0YcKgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tc2V0LWNhY2hlLWRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9sb2FkX2ZpbGXCoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxvYWQtZmlsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2xvYWTCoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxvYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9sb2FkX2J5X25hbWXCoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWxvYWQtYnktbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2xpc3RfZnJlZcKgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbGlzdC1mcmVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljwqAoKSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjZ3N0LXBsdWdpbi1yZWdpc3Rlci1zdGF0aWMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbMKgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tcmVnaXN0ZXItc3RhdGljLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jecKgKCkiIGxpbms9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGXCoCgpIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWFkZC1kZXBlbmRlbmN5LXNpbXBsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUExVR0lOX0VSUk9SIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLUVSUk9SOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBsdWdpbkVycm9yIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5FcnJvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0UGx1Z2luIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW4tc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UGx1Z2luRGVzYyIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVzYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTElDRU5TRV9VTktOT1dOIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtTElDRU5TRS1VTktOT1dOOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFBsdWdpbkZsYWdzIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5GbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0UGx1Z2luRmVhdHVyZUZpbHRlcsKgKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RQbHVnaW5GZWF0dXJlRmlsdGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFua8KgKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LXJhbmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rwqAoKSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1nZXQtcmFuayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUoKSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1nZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbsKgKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LXBsdWdpbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lwqAoKSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1nZXQtcGx1Z2luLW5hbWUiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWTCoCgpIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxvYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29wecKgKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1jb3B5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWXCoCgpIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtZnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUExVR0lOX0ZFQVRVUkVfTElTVF9ERUJVRygpIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR1NULVBMVUdJTi1GRUFUVVJFLUxJU1QtREVCVUc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbsKgKCkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtY2hlY2stdmVyc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcGx1Z2luX2ZlYXR1cmVfcmFua19jb21wYXJlX2Z1bmPCoCgpIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLXJhbmstY29tcGFyZS1mdW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RQbHVnaW5GZWF0dXJlIiBsaW5rPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UGx1Z2luRmVhdHVyZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFJhbmsiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RSYW5rIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX2FkZF9mZMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtYWRkLWZkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX2ZkX2Nhbl9yZWFkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jYW4tcmVhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9mZF9jYW5fd3JpdGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWNhbi13cml0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9mZF9jdGxfcmVhZMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY3RsLXJlYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfZmRfY3RsX3dyaXRlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jdGwtd3JpdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaGFzLWNsb3NlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9mZF9oYXNfZXJyb3LCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWhhcy1lcnJvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9mZF9pZ25vcmVkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1pZ25vcmVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX2ZkX2luaXTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWluaXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfZnJlZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9uZXfCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9uZXdfdGltZXLCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldy10aW1lciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1nZXQtcmVhZC1ncG9sbGZkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX3JlbW92ZV9mZMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVtb3ZlLWZkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX3Jlc3RhcnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtc2V0LWNvbnRyb2xsYWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF9zZXRfZmx1c2hpbmfCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1mbHVzaGluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcG9sbF93YWl0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX3JlYWRfY29udHJvbMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVhZC1jb250cm9sIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wb2xsX3dyaXRlX2NvbnRyb2zCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdyaXRlLWNvbnRyb2wiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdFBvbGwiIGxpbms9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0UG9sbEZEIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUE9MTF9GRF9JTklUIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dTVC1QT0xMLUZELUlOSVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJlc2V0X2dldF9wcmVzZXRfbmFtZXPCoCgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1wcmVzZXQtbmFtZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXPCoCgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1wcm9wZXJ0eS1uYW1lcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJlc2V0X2xvYWRfcHJlc2V0wqAoKSIgbGluaz0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1sb2FkLXByZXNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJlc2V0X3NhdmVfcHJlc2V0wqAoKSIgbGluaz0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1zYXZlLXByZXNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXTCoCgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXJlbmFtZS1wcmVzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ByZXNldF9kZWxldGVfcHJlc2V0wqAoKSIgbGluaz0iR3N0UHJlc2V0Lmh0bWwjZ3N0LXByZXNldC1kZWxldGUtcHJlc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcmVzZXRfc2V0X21ldGHCoCgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXNldC1tZXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcmVzZXRfZ2V0X21ldGHCoCgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1tZXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcmVzZXRfc2V0X2FwcF9kaXLCoCgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LXNldC1hcHAtZGlyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcmVzZXRfZ2V0X2FwcF9kaXLCoCgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWdldC1hcHAtZGlyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wcmVzZXRfaXNfZWRpdGFibGXCoCgpIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNnc3QtcHJlc2V0LWlzLWVkaXRhYmxlIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RQcmVzZXQiIGxpbms9IkdzdFByZXNldC5odG1sI0dzdFByZXNldC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQcmVzZXRJbnRlcmZhY2UiIGxpbms9IkdzdFByZXNldC5odG1sI0dzdFByZXNldEludGVyZmFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2FkZF9wcm90ZWN0aW9uX21ldGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCNnc3QtYnVmZmVyLWFkZC1wcm90ZWN0aW9uLW1ldGEiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI2dzdC1idWZmZXItZ2V0LXByb3RlY3Rpb24tbWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHJvdGVjdGlvbl9zZWxlY3Rfc3lzdGVtwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwjZ3N0LXByb3RlY3Rpb24tc2VsZWN0LXN5c3RlbSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFByb3RlY3Rpb25NZXRhIiBsaW5rPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCNHc3RQcm90ZWN0aW9uTWV0YSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUFJPVEVDVElPTl9TWVNURU1fSURfQ0FQU19GSUVMRCIgbGluaz0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwjR1NULVBST1RFQ1RJT04tU1lTVEVNLUlELUNBUFMtRklFTEQ6Q0FQUyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUVVFUllfTUFLRV9UWVBFKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLU1BS0UtVFlQRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9RVUVSWV9UWVBFKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVRZUEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUVVFUllfVFlQRV9OQU1FKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVRZUEUtTkFNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9RVUVSWV9JU19VUFNUUkVBTSgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1JUy1VUFNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9RVUVSWV9JU19ET1dOU1RSRUFNKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUlTLURPV05TVFJFQU06Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1JUy1TRVJJQUxJWkVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2ZsYWdzwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS1nZXQtZmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWXCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS10eXBlLWdldC1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV90eXBlX3RvX3F1YXJrwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS10by1xdWFyayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcmVmwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV91bnJlZsKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXVucmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9jb3B5wqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfcXVlcnlfbWFrZV93cml0YWJsZSgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1tYWtlLXdyaXRhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9xdWVyeV9pc193cml0YWJsZSgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1pcy13cml0YWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcmVwbGFjZcKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXJlcGxhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3dyaXRhYmxlX3N0cnVjdHVyZcKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXdyaXRhYmxlLXN0cnVjdHVyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X2N1c3RvbcKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1jdXN0b20iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmXCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtc3RydWN0dXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9uZXdfY29udmVydMKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1jb252ZXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfY29udmVydMKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1jb252ZXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0wqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtY29udmVydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LXBvc2l0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfcG9zaXRpb27CoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtcG9zaXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtcG9zaXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbsKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X2R1cmF0aW9uwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbsKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9uZXdfbGF0ZW5jecKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1sYXRlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5wqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X2xhdGVuY3nCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X3NlZWtpbmfCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctc2Vla2luZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X3NlZWtpbmfCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtc2Vla2luZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZ8KgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXNlZWtpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19mb3JtYXRzwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWZvcm1hdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWZvcm1hdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzdsKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1mb3JtYXRzdiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utbi1mb3JtYXRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0wqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWZvcm1hdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X3NlZ21lbnTCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctc2VnbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X3NlZ21lbnTCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtc2VnbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudMKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXNlZ21lbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19jYXBzwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NhcHPCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHTCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtY2Fwcy1yZXN1bHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NhcHNfcmVzdWx0wqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtY2Fwcy1yZXN1bHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19hY2NlcHRfY2Fwc8KgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1hY2NlcHQtY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHPCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1hY2NlcHQtY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdMKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1hY2NlcHQtY2Fwcy1yZXN1bHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdMKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWFjY2VwdC1jYXBzLXJlc3VsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZ8KgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1idWZmZXJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudMKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcGVyY2VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnTCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcGVyY2VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0c8KgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctc3RhdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0c8KgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1zdGF0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZcKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctcmFuZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZcKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1yYW5nZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZcKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1idWZmZXJpbmctcmFuZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXPCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtbi1idWZmZXJpbmctcmFuZ2VzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWJ1ZmZlcmluZy1yYW5nZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfbmV3X3VyacKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy11cmkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX3VyacKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXVyaSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X3VyacKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC11cmkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbsKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXVyaS1yZWRpcmVjdGlvbiIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbsKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC11cmktcmVkaXJlY3Rpb24iIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnTCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS11cmktcmVkaXJlY3Rpb24tcGVybWFuZW50IiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uX3Blcm1hbmVudMKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC11cmktcmVkaXJlY3Rpb24tcGVybWFuZW50IiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbsKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1hbGxvY2F0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYWxsb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcG9vbMKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLXBvb2wiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHPCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLXBvb2xzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29swqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tcG9vbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3Bvb2zCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtbnRoLWFsbG9jYXRpb24tcG9vbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3Bvb2zCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZW1vdmUtbnRoLWFsbG9jYXRpb24tcG9vbCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcGFyYW3CoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1wYXJhbSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wYXJhbXPCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLXBhcmFtcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW3CoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1wYXJhbSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3BhcmFtwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LW50aC1hbGxvY2F0aW9uLXBhcmFtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcGFyYW3CoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZW1vdmUtbnRoLWFsbG9jYXRpb24tcGFyYW0iIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGHCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1tZXRhcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWV0YcKgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW50aC1hbGxvY2F0aW9uLW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9tZXRhwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVtb3ZlLW50aC1hbGxvY2F0aW9uLW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X2ZpbmRfYWxsb2NhdGlvbl9tZXRhwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZmluZC1hbGxvY2F0aW9uLW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LXNjaGVkdWxpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmfCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zY2hlZHVsaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZ8KgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zY2hlZHVsaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9hZGRfc2NoZWR1bGluZ19tb2RlwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktYWRkLXNjaGVkdWxpbmctbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfZ2V0X25fc2NoZWR1bGluZ19tb2Rlc8KgKCkiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLXNjaGVkdWxpbmctbW9kZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9zY2hlZHVsaW5nX21vZGXCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtc2NoZWR1bGluZy1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktaGFzLXNjaGVkdWxpbmctbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzwqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktaGFzLXNjaGVkdWxpbmctbW9kZS13aXRoLWZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9uZXdfZHJhaW7CoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctZHJhaW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X25ld19jb250ZXh0wqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWNvbnRleHQiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3NldF9jb250ZXh0wqAoKSIgbGluaz0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWNvbnRleHQiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHTCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jb250ZXh0IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWVyeV9wYXJzZV9jb250ZXh0X3R5cGXCoCgpIiBsaW5rPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jb250ZXh0LXR5cGUiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RRdWVyeSIgbGluaz0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFF1ZXJ5VHlwZUZsYWdzIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dzdFF1ZXJ5VHlwZUZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9RVUVSWV9UWVBFX0JPVEgiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVRZUEUtQk9USDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RRdWVyeVR5cGUiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RCdWZmZXJpbmdNb2RlIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dzdEJ1ZmZlcmluZ01vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFNjaGVkdWxpbmdGbGFncyIgbGluaz0iR3N0UXVlcnkuaHRtbCNHc3RTY2hlZHVsaW5nRmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2dldMKgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdMKgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfY29va2llwqAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1jb29raWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luwqAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1ieS1wbHVnaW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdMKgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1wbHVnaW4tbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbsKgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWFkZC1wbHVnaW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW7CoCgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1yZW1vdmUtcGx1Z2luIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVywqAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktcGx1Z2luLWZpbHRlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXLCoCgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1mZWF0dXJlLWZpbHRlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW7CoCgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1maW5kLXBsdWdpbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlwqAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmluZC1mZWF0dXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZcKgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWxvb2t1cC1mZWF0dXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9hZGRfcGF0aMKgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWFkZC1wYXRoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9nZXRfcGF0aF9saXN0wqAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LXBhdGgtbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcmVnaXN0cnlfc2Nhbl9wYXRowqAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktc2Nhbi1wYXRoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9yZWdpc3RyeV9sb29rdXDCoCgpIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1sb29rdXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlwqAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktcmVtb3ZlLWZlYXR1cmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlwqAoKSIgbGluaz0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLWZlYXR1cmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbsKgKCkiIGxpbms9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWNoZWNrLWZlYXR1cmUtdmVyc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJlZ2lzdHJ5IiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGZlYXR1cmUtYWRkZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LWZlYXR1cmUtYWRkZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxwbHVnaW4tYWRkZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LXBsdWdpbi1hZGRlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF9jbGlwwqAoKSIgbGluaz0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWNsaXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfaW5pdMKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1pbml0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zZWdtZW50X25ld8KgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfY29wecKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jb3B5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zZWdtZW50X2ZyZWXCoCgpIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF9kb19zZWVrwqAoKSIgbGluaz0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWRvLXNlZWsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZcKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXN0cmVhbS10aW1lIiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbMKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXN0cmVhbS10aW1lLWZ1bGwiIHNpbmNlPSIxLjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lwqAoKSIgbGluaz0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXJ1bm5pbmctdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbMKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUtZnVsbCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZcKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZSIgc2luY2U9IjEuOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxswqAoKSIgbGluaz0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXN0cmVhbS10aW1lLWZ1bGwiIHNpbmNlPSIxLjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWXCoCgpIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtcG9zaXRpb24tZnJvbS1ydW5uaW5nLXRpbWUiIHNpbmNlPSIxLjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWVfZnVsbMKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXJ1bm5pbmctdGltZS1mdWxsIiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uwqAoKSIgbGluaz0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXBvc2l0aW9uIiBkZXByZWNhdGVkPSIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfc2V0X3J1bm5pbmdfdGltZcKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1zZXQtcnVubmluZy10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zZWdtZW50X2NvcHlfaW50b8KgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jb3B5LWludG8iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZcKgKCkiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1vZmZzZXQtcnVubmluZy10aW1lIiBzaW5jZT0iMS4yLjMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3NlZ21lbnRfaXNfZXF1YWzCoCgpIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtaXMtZXF1YWwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RTZWdtZW50IiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFNlZ21lbnRGbGFncyIgbGluaz0iR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnRGbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RyZWFtX25ld8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLW5ldyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cmVhbV9nZXRfY2Fwc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC1jYXBzIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3PCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLWZsYWdzIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLWlkIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC1zdHJlYW0tdHlwZSIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cmVhbV9nZXRfdGFnc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC10YWdzIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RyZWFtX3NldF9jYXBzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tc2V0LWNhcHMiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFnc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLXNldC1zdHJlYW0tZmxhZ3MiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJlYW1fc2V0X3N0cmVhbV90eXBlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tc2V0LXN0cmVhbS10eXBlIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RyZWFtX3NldF90YWdzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tc2V0LXRhZ3MiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLXR5cGUtZ2V0LW5hbWUiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3RyZWFtIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3RyZWFtQ2xhc3MiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW1DbGFzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0U3RyZWFtVHlwZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbVR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ld8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLW5ldyIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW3CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1hZGQtc3RyZWFtIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Vwc3RyZWFtX2lkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNnc3Qtc3RyZWFtLWNvbGxlY3Rpb24tZ2V0LXVwc3RyZWFtLWlkIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc2l6ZSIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW3CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc3RyZWFtIiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3MiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbkNsYXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0U3RydWN0dXJlTWFwRnVuY8KgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZU1hcEZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0U3RydWN0dXJlRmlsdGVyTWFwRnVuY8KgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZUZpbHRlck1hcEZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHnCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldy1lbXB0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0ecKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3LWlkLWVtcHR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfbmV3wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctdmFsaXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfbmV3X2lkwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctaWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9uZXdfZnJvbV9zdHJpbmfCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLW5ldy1mcm9tLXN0cmluZyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2NvcHnCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWNvcHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9mcmVlwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mcmVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaGFzX25hbWXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWhhcy1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfc2V0X25hbWXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLXNldC1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWTCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1uYW1lLWlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaWRfZ2V0wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsaXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXNldC12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlkLXRha2UtdmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXTCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF92YWxpc3TCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC12YWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX3NldF92YWx1ZcKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LXZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZcKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtdGFrZS12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX3NldMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtc2V0LXZhbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2lkX3NldMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtc2V0LXZhbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkc8KgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtcmVtb3ZlLWZpZWxkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzLXZhbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtYWxsLWZpZWxkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9maWVsZF90eXBlwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZmllbGQtdHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX25fZmllbGRzwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uLWZpZWxkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2hhc19maWVsZMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaGFzLWZpZWxkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtZmllbGQtdHlwZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pc19lcXVhbMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaXMtZXF1YWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXTCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWlzLXN1YnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3TCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWNhbi1pbnRlcnNlY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3TCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWludGVyc2VjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtaWQtaGFzLWZpZWxkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQtdHlwZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbsKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWJvb2xlYW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfaW50wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtaW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnTCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC11aW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDY0wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtaW50NjQiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdWludDY0IiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZcKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWRvdWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmfCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1zdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZcKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LWRhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZGF0ZS10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1jbG9jay10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW3CoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1lbnVtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZnJhY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9mb3JlYWNowqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mb3JlYWNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9maWx0ZXJfYW5kX21hcF9pbl9wbGFjZcKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZmlsdGVyLWFuZC1tYXAtaW4tcGxhY2UiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZcKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbnRoLWZpZWxkLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtcGFyZW50LXJlZmNvdW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS10by1zdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZ8KgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJvbS1zdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZMKgKCkiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZml4YXRlLWZpZWxkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50wqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1pbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGXCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWRvdWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtbmVhcmVzdC1mcmFjdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuwqAoKSIgbGluaz0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maXhhdGUtZmllbGQtYm9vbGVhbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmfCoCgpIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1zdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RTdHJ1Y3R1cmUiIGxpbms9IkdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW7CoCgpIiBsaW5rPSJHc3RTeXN0ZW1DbG9jay5odG1sI2dzdC1zeXN0ZW0tY2xvY2stb2J0YWluIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9zeXN0ZW1fY2xvY2tfc2V0X2RlZmF1bHTCoCgpIiBsaW5rPSJHc3RTeXN0ZW1DbG9jay5odG1sI2dzdC1zeXN0ZW0tY2xvY2stc2V0LWRlZmF1bHQiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdENsb2NrVHlwZSIgbGluaz0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RDbG9ja1R5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RTeXN0ZW1DbG9jayIgbGluaz0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RTeXN0ZW1DbG9jay1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNsb2NrLXR5cGXigJ0gcHJvcGVydHkiIGxpbms9IkdzdFN5c3RlbUNsb2NrLmh0bWwjR3N0U3lzdGVtQ2xvY2stLWNsb2NrLXR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VGFnRm9yZWFjaEZ1bmPCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRm9yZWFjaEZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VGFnTWVyZ2VGdW5jwqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlRnVuYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX3JlZ2lzdGVywqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctcmVnaXN0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWPCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1yZWdpc3Rlci1zdGF0aWMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3TCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1tZXJnZS11c2UtZmlyc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWHCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1tZXJnZS1zdHJpbmdzLXdpdGgtY29tbWEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19leGlzdHPCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1leGlzdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19nZXRfdHlwZcKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWdldC10eXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfZ2V0X25pY2vCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtbmljayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2dldF9kZXNjcmlwdGlvbsKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWdldC1kZXNjcmlwdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2dldF9mbGFnwqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LWZsYWciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19pc19maXhlZMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWlzLWZpeGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9uZXfCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfbmV3X2VtcHR5wqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctZW1wdHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X25ld192YWxpc3TCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW5ldy12YWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X25ld19mcm9tX3N0cmluZ8KgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3LWZyb20tc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF90YWdfbGlzdF9mcmVlKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZnJlZSIgZGVwcmVjYXRlZD0iIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfc2NvcGXCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1zY29wZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlwqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1zZXQtc2NvcGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X3RvX3N0cmluZ8KgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtdG8tc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9pc19lbXB0ecKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaXMtZW1wdHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2lzX2VxdWFswqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1pcy1lcXVhbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfY29wecKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfcmVmwqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X3VucmVmwqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC11bnJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdGFnX2xpc3RfaXNfd3JpdGFibGUoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1pcy13cml0YWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdGFnX2xpc3RfbWFrZV93cml0YWJsZSgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW1ha2Utd3JpdGFibGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2luc2VydMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaW5zZXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9tZXJnZcKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbWVyZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZcKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXRhZy1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9uX3RhZ3PCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW4tdGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfbnRoX3RhZ19uYW1lwqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1udGgtdGFnLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2FkZMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9hZGRfdmFsdWXCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlc8KgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbHVlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdF92YWx1ZXPCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWxpc3QtdmFsdWVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9yZW1vdmVfdGFnwqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1yZW1vdmUtdGFnIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9mb3JlYWNowqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1mb3JlYWNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXjCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC12YWx1ZS1pbmRleCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfY29weV92YWx1ZcKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtY29weS12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW7CoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1ib29sZWFuIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbl9pbmRleMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4taW5kZXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9pbnTCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9pbnRfaW5kZXjCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQtaW5kZXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF91aW50wqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWludCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXjCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50LWluZGV4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfaW50NjTCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQ2NCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2ludDY0X2luZGV4wqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50NjQtaW5kZXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF91aW50NjTCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50NjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXjCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50NjQtaW5kZXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9mbG9hdMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfZmxvYXRfaW5kZXjCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1mbG9hdC1pbmRleCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZcKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZS1pbmRleCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ8KgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXN0cmluZy1pbmRleCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXjCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXBlZWstc3RyaW5nLWluZGV4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcsKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4wqAoKSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtcG9pbnRlci1pbmRleCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX2xpc3RfZ2V0X2RhdGXCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleMKgKCkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtaW5kZXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWXCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXjCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUtaW5kZXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9zYW1wbGXCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1zYW1wbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXjCoCgpIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1zYW1wbGUtaW5kZXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUYWdMaXN0IiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFRhZ01lcmdlTW9kZSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ01lcmdlTW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0VGFnRmxhZyIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ0ZsYWciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFRhZ1Njb3BlIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnU2NvcGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19USVRMRSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVElUTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1RJVExFX1NPUlROQU1FIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1USVRMRS1TT1JUTkFNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQVJUSVNUIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BUlRJU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FSVElTVF9TT1JUTkFNRSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVJUSVNULVNPUlROQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19BTEJVTSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU06Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FMQlVNX1NPUlROQU1FIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1TT1JUTkFNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQUxCVU1fQVJUSVNUIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1BUlRJU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tQVJUSVNULVNPUlROQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19EQVRFIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1EQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19EQVRFX1RJTUUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLURBVEUtVElNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VOUkUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTlJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19DT01NRU5UIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT01NRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19FWFRFTkRFRF9DT01NRU5UIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FWFRFTkRFRC1DT01NRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19UUkFDS19OVU1CRVIiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLU5VTUJFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfVFJBQ0tfQ09VTlQiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLUNPVU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1WT0xVTUUtTlVNQkVSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLVZPTFVNRS1DT1VOVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfTE9DQVRJT04iIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxPQ0FUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19IT01FUEFHRSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSE9NRVBBR0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0RFU0NSSVBUSU9OIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVNDUklQVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfVkVSU0lPTiIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVkVSU0lPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfSVNSQyIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSVNSQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfT1JHQU5JWkFUSU9OIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1PUkdBTklaQVRJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0NPUFlSSUdIVCIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09QWVJJR0hUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19DT1BZUklHSFRfVVJJIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT1BZUklHSFQtVVJJOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19FTkNPREVEX0JZIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVELUJZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19DT01QT1NFUiIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0NPTlRBQ1QiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTlRBQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0xJQ0VOU0UiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxJQ0VOU0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0xJQ0VOU0VfVVJJIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MSUNFTlNFLVVSSTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfUEVSRk9STUVSIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1QRVJGT1JNRVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0RVUkFUSU9OIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1EVVJBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQ09ERUMiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPREVDOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19WSURFT19DT0RFQyIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVklERU8tQ09ERUM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FVRElPX0NPREVDIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BVURJTy1DT0RFQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfU1VCVElUTEVfQ09ERUMiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNVQlRJVExFLUNPREVDOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19DT05UQUlORVJfRk9STUFUIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT05UQUlORVItRk9STUFUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19CSVRSQVRFIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1CSVRSQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19OT01JTkFMX0JJVFJBVEUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU5PTUlOQUwtQklUUkFURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfTUlOSU1VTV9CSVRSQVRFIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NSU5JTVVNLUJJVFJBVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX01BWElNVU1fQklUUkFURSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUFYSU1VTS1CSVRSQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19TRVJJQUwiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNFUklBTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfRU5DT0RFUiIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRU5DT0RFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVSLVZFUlNJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1RSQUNLX0dBSU4iIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLUdBSU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1RSQUNLX1BFQUsiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLVBFQUs6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FMQlVNX0dBSU4iIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLUdBSU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FMQlVNX1BFQUsiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLVBFQUs6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUkVGRVJFTkNFLUxFVkVMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19MQU5HVUFHRV9DT0RFIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MQU5HVUFHRS1DT0RFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19MQU5HVUFHRV9OQU1FIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MQU5HVUFHRS1OQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19JTUFHRSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSU1BR0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1BSRVZJRVdfSU1BR0UiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVBSRVZJRVctSU1BR0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FUVEFDSE1FTlQiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFUVEFDSE1FTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUJFQVRTLVBFUi1NSU5VVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0tFWVdPUkRTIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1LRVlXT1JEUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1OQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1MQVRJVFVERTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xPTkdJVFVERSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUxPTkdJVFVERTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0VMRVZBVElPTiIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUVMRVZBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NJVFkiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DSVRZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fQ09VTlRSWSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUNPVU5UUlk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0dFT19MT0NBVElPTl9TVUJMT0NBVElPTiIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLVNVQkxPQ0FUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fSE9SSVpPTlRBTF9FUlJPUiIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUhPUklaT05UQUwtRVJST1I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9ESVJFQ1RJT04iIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRCIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU1PVkVNRU5ULVNQRUVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04iIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DQVBUVVJFLURJUkVDVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfU0hPV19OQU1FIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1TSE9XLU5BTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1NIT1dfU09SVE5BTUUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctU09SVE5BTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1NIT1dfRVBJU09ERV9OVU1CRVIiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctRVBJU09ERS1OVU1CRVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1NIT1dfU0VBU09OX05VTUJFUiIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1TRUFTT04tTlVNQkVSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19MWVJJQ1MiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxZUklDUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTVBPU0VSLVNPUlROQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19HUk9VUElORyIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR1JPVVBJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX1VTRVJfUkFUSU5HIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1VU0VSLVJBVElORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfREVWSUNFX01BTlVGQUNUVVJFUiIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREVWSUNFLU1BTlVGQUNUVVJFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfREVWSUNFX01PREVMIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVZJQ0UtTU9ERUw6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FQUExJQ0FUSU9OX05BTUUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLU5BTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEEiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLURBVEE6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JTUFHRS1PUklFTlRBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfUFVCTElTSEVSIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1QVUJMSVNIRVI6Q0FQUyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFHX0lOVEVSUFJFVEVEX0JZIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JTlRFUlBSRVRFRC1CWTpDQVBTIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQUdfTUlESV9CQVNFX05PVEUiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1JREktQkFTRS1OT1RFOkNBUFMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBR19QUklWQVRFX0RBVEEiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVBSSVZBVEUtREFUQTpDQVBTIiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3PCoCgpIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1yZXNldC10YWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3PCoCgpIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1tZXJnZS10YWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdzwqAoKSIgbGluaz0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZcKgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXPCoCgpIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1hZGQtdGFnLXZhbHVlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdMKgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlc8KgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWFkZC10YWctdmFsaXN0LXZhbHVlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3TCoCgpIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCNnc3QtdGFnLXNldHRlci1nZXQtdGFnLWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlwqAoKSIgbGluaz0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItc2V0LXRhZy1tZXJnZS1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZcKgKCkiIGxpbms9IkdzdFRhZ1NldHRlci5odG1sI2dzdC10YWctc2V0dGVyLWdldC10YWctbWVyZ2UtbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0VGFnU2V0dGVyIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VGFnU2V0dGVySW50ZXJmYWNlIiBsaW5rPSJHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXJJbnRlcmZhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VGFza0Z1bmN0aW9uwqAoKSIgbGluaz0iR3N0VGFzay5odG1sI0dzdFRhc2tGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVEFTS19CUk9BRENBU1QoKSIgbGluaz0iR3N0VGFzay5odG1sI0dTVC1UQVNLLUJST0FEQ0FTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQVNLX0dFVF9DT05EKCkiIGxpbms9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1HRVQtQ09ORDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQVNLX0dFVF9MT0NLKCkiIGxpbms9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1HRVQtTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UQVNLX1NJR05BTCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stU0lHTkFMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBU0tfU1RBVEUoKSIgbGluaz0iR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RBU0tfV0FJVCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stV0FJVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YXNrX25ld8KgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfc2V0X2xvY2vCoCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LWxvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfc2V0X3Bvb2zCoCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXBvb2wiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfZ2V0X3Bvb2zCoCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stZ2V0LXBvb2wiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VGFza1RocmVhZEZ1bmPCoCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjR3N0VGFza1RocmVhZEZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrwqAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1lbnRlci1jYWxsYmFjayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19zZXRfbGVhdmVfY2FsbGJhY2vCoCgpIiBsaW5rPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LWxlYXZlLWNhbGxiYWNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YXNrX2dldF9zdGF0ZcKgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1nZXQtc3RhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfc2V0X3N0YXRlwqAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1zdGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19wYXVzZcKgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1wYXVzZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19zdGFydMKgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19zdG9wwqAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLXN0b3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfam9pbsKgKCkiIGxpbms9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1qb2luIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90YXNrX2NsZWFudXBfYWxswqAoKSIgbGluaz0iR3N0VGFzay5odG1sI2dzdC10YXNrLWNsZWFudXAtYWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VGFzayIgbGluaz0iR3N0VGFzay5odG1sI0dzdFRhc2stc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RUYXNrU3RhdGUiIGxpbms9IkdzdFRhc2suaHRtbCNHc3RUYXNrU3RhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VGFza1Bvb2xGdW5jdGlvbsKgKCkiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2xGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGFza19wb29sX25ld8KgKCkiIGxpbms9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfcG9vbF9wcmVwYXJlwqAoKSIgbGluaz0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXByZXBhcmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfcG9vbF9wdXNowqAoKSIgbGluaz0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXB1c2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfcG9vbF9qb2luwqAoKSIgbGluaz0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLWpvaW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rhc2tfcG9vbF9jbGVhbnVwwqAoKSIgbGluaz0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLWNsZWFudXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUYXNrUG9vbCIgbGluaz0iR3N0VGFza1Bvb2wuaHRtbCNHc3RUYXNrUG9vbC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUYXNrUG9vbENsYXNzIiBsaW5rPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sQ2xhc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19uZXfCoCgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdG9jX3JlZigpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLXJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdG9jX3VucmVmKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtdW5yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3RvY19jb3B5KCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfdG9jX21ha2Vfd3JpdGFibGUoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1tYWtlLXdyaXRhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90b2NfZ2V0X3Njb3BlwqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1nZXQtc2NvcGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19nZXRfZW50cmllc8KgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZ2V0LWVudHJpZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19hcHBlbmRfZW50cnnCoCgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWFwcGVuZC1lbnRyeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX2dldF90YWdzwqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1nZXQtdGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX21lcmdlX3RhZ3PCoCgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLW1lcmdlLXRhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19zZXRfdGFnc8KgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2Mtc2V0LXRhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19kdW1wwqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1kdW1wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90b2NfZW50cnlfbmV3wqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3RvY19lbnRyeV9yZWYoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1yZWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3RvY19lbnRyeV91bnJlZigpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LXVucmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF90b2NfZW50cnlfY29weSgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWNvcHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3RvY19lbnRyeV9tYWtlX3dyaXRhYmxlKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktbWFrZS13cml0YWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX2ZpbmRfZW50cnnCoCgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWZpbmQtZW50cnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19lbnRyeV9nZXRfdG9jwqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1nZXQtdG9jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90b2NfZW50cnlfZ2V0X3VpZMKgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXVpZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX2VudHJ5X2dldF9wYXJlbnTCoCgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWdldC1wYXJlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXPCoCgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWdldC1zdWItZW50cmllcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnnCoCgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LWFwcGVuZC1zdWItZW50cnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19lbnRyeV9nZXRfbG9vcMKgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LWxvb3AiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19lbnRyeV9zZXRfbG9vcMKgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktc2V0LWxvb3AiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lc8KgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXN0YXJ0LXN0b3AtdGltZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19lbnRyeV9zZXRfc3RhcnRfc3RvcF90aW1lc8KgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktc2V0LXN0YXJ0LXN0b3AtdGltZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19lbnRyeV9nZXRfdGFnc8KgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXRhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19lbnRyeV9tZXJnZV90YWdzwqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1tZXJnZS10YWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90b2NfZW50cnlfc2V0X3RhZ3PCoCgpIiBsaW5rPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LXNldC10YWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90b2NfZW50cnlfdHlwZV9nZXRfbmlja8KgKCkiIGxpbms9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktdHlwZS1nZXQtbmljayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX2VudHJ5X2dldF9lbnRyeV90eXBlwqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1nZXQtZW50cnktdHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX2VudHJ5X2lzX2FsdGVybmF0aXZlwqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1pcy1hbHRlcm5hdGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX2VudHJ5X2lzX3NlcXVlbmNlwqAoKSIgbGluaz0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1pcy1zZXF1ZW5jZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVE9DX0VOVFJZX1RZUEVfSVNfQUxURVJOQVRJVkUoKSIgbGluaz0iR3N0VG9jLmh0bWwjR1NULVRPQy1FTlRSWS1UWVBFLUlTLUFMVEVSTkFUSVZFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RPQ19FTlRSWV9UWVBFX0lTX1NFUVVFTkNFKCkiIGxpbms9IkdzdFRvYy5odG1sI0dTVC1UT0MtRU5UUlktVFlQRS1JUy1TRVFVRU5DRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RUb2MiIGxpbms9IkdzdFRvYy5odG1sI0dzdFRvYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFRvY1Njb3BlIiBsaW5rPSJHc3RUb2MuaHRtbCNHc3RUb2NTY29wZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0VG9jRW50cnkiIGxpbms9IkdzdFRvYy5odG1sI0dzdFRvY0VudHJ5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0VG9jRW50cnlUeXBlIiBsaW5rPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeVR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFRvY0xvb3BUeXBlIiBsaW5rPSJHc3RUb2MuaHRtbCNHc3RUb2NMb29wVHlwZSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVE9DX1JFUEVBVF9DT1VOVF9JTkZJTklURSIgbGluaz0iR3N0VG9jLmh0bWwjR1NULVRPQy1SRVBFQVQtQ09VTlQtSU5GSU5JVEU6Q0FQUyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdG9jX3NldHRlcl9zZXRfdG9jwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI2dzdC10b2Mtc2V0dGVyLXNldC10b2MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvY8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCNnc3QtdG9jLXNldHRlci1nZXQtdG9jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90b2Nfc2V0dGVyX3Jlc2V0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI2dzdC10b2Mtc2V0dGVyLXJlc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RUb2NTZXR0ZXIiIGxpbms9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCNHc3RUb2NTZXR0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUb2NTZXR0ZXJJbnRlcmZhY2UiIGxpbms9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCNHc3RUb2NTZXR0ZXJJbnRlcmZhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VHlwZUZpbmRGdW5jdGlvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9wZWVrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0LXR5cGUtZmluZC1wZWVrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfc3VnZ2VzdMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtc3VnZ2VzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0LXR5cGUtZmluZC1zdWdnZXN0LXNpbXBsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHlwZV9maW5kX2dldF9sZW5ndGjCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLWdldC1sZW5ndGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9yZWdpc3RlcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtcmVnaXN0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUeXBlRmluZCIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kUHJvYmFiaWxpdHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0wqAoKSIgbGluaz0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwjZ3N0LXR5cGUtZmluZC1mYWN0b3J5LWdldC1saXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9uc8KgKCkiIGxpbms9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtZXh0ZW5zaW9ucyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHPCoCgpIiBsaW5rPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktZ2V0LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2hhc19mdW5jdGlvbsKgKCkiIGxpbms9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1oYXMtZnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNnc3QtdHlwZS1maW5kLWZhY3RvcnktY2FsbC1mdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0VHlwZUZpbmRGYWN0b3J5IiBsaW5rPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNHc3RUeXBlRmluZEZhY3Rvcnktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9VUklfQ0FTVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR1NULVVSSS1DQVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1VSSV9DT05TVF9DQVNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHU1QtVVJJLUNPTlNULUNBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX25ld8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLW5ldyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX25ld193aXRoX2Jhc2XCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1uZXctd2l0aC1iYXNlIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfZnJvbV9zdHJpbmfCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1mcm9tLXN0cmluZyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2Zyb21fc3RyaW5nX3dpdGhfYmFzZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWZyb20tc3RyaW5nLXdpdGgtYmFzZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2NvcHnCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1jb3B5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfZXF1YWzCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1lcXVhbCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2pvaW7CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1qb2luIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfam9pbl9zdHJpbmdzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktam9pbi1zdHJpbmdzIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfaXNfd3JpdGFibGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1pcy13cml0YWJsZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX21ha2Vfd3JpdGFibGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1tYWtlLXdyaXRhYmxlIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfdG9fc3RyaW5nwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktdG8tc3RyaW5nIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfcmVmwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktcmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfdW5yZWbCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS11bnJlZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2lzX25vcm1hbGl6ZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1pcy1ub3JtYWxpemVkIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfbm9ybWFsaXplwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktbm9ybWFsaXplIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfZ2V0X3NjaGVtZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1zY2hlbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9zZXRfc2NoZW1lwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXNjaGVtZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2dldF91c2VyaW5mb8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC11c2VyaW5mbyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX3NldF91c2VyaW5mb8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC11c2VyaW5mbyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2dldF9ob3N0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LWhvc3QiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9zZXRfaG9zdMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1ob3N0IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfZ2V0X3BvcnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtcG9ydCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX3NldF9wb3J0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXBvcnQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9nZXRfcGF0aMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1wYXRoIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfc2V0X3BhdGjCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtcGF0aCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2dldF9wYXRoX3N0cmluZ8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1wYXRoLXN0cmluZyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX3NldF9wYXRoX3N0cmluZ8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1wYXRoLXN0cmluZyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2dldF9wYXRoX3NlZ21lbnRzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXBhdGgtc2VnbWVudHMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9zZXRfcGF0aF9zZWdtZW50c8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1wYXRoLXNlZ21lbnRzIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfYXBwZW5kX3BhdGjCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1hcHBlbmQtcGF0aCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2FwcGVuZF9wYXRoX3NlZ21lbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1hcHBlbmQtcGF0aC1zZWdtZW50IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZ8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS1zdHJpbmciIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9zZXRfcXVlcnlfc3RyaW5nwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXF1ZXJ5LXN0cmluZyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2dldF9xdWVyeV90YWJsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS10YWJsZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX3NldF9xdWVyeV90YWJsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1xdWVyeS10YWJsZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2dldF9xdWVyeV92YWx1ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS12YWx1ZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX3NldF9xdWVyeV92YWx1ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1xdWVyeS12YWx1ZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX3JlbW92ZV9xdWVyeV9rZXnCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1yZW1vdmUtcXVlcnkta2V5IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfcXVlcnlfaGFzX2tlecKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXF1ZXJ5LWhhcy1rZXkiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9nZXRfcXVlcnlfa2V5c8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS1rZXlzIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfZ2V0X2ZyYWdtZW50wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LWZyYWdtZW50IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfc2V0X2ZyYWdtZW50wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LWZyYWdtZW50IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RVcmkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9lcnJvcl9xdWFya8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1lcnJvci1xdWFyayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVVJJX1RZUEVfSVNfVkFMSUQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVRZUEUtSVMtVkFMSUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLXByb3RvY29sLWlzLXZhbGlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLXByb3RvY29sLWlzLXN1cHBvcnRlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2lzX3ZhbGlkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWlzLXZhbGlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfaGFzX3Byb3RvY29swqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhcy1wcm90b2NvbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2dldF9wcm90b2NvbMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1nZXQtcHJvdG9jb2wiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9nZXRfbG9jYXRpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktZ2V0LWxvY2F0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfY29uc3RydWN0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWNvbnN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZmlsZW5hbWVfdG9fdXJpwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtZmlsZW5hbWUtdG8tdXJpIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9lbGVtZW50X21ha2VfZnJvbV91cmnCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC1lbGVtZW50LW1ha2UtZnJvbS11cmkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLWdldC11cmktdHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29sc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLWdldC1wcm90b2NvbHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3VyaV9oYW5kbGVyX2dldF91cmnCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFuZGxlci1nZXQtdXJpIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91cmlfaGFuZGxlcl9zZXRfdXJpwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItc2V0LXVyaSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0VVJJSGFuZGxlciIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlckludGVyZmFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0VVJJVHlwZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklUeXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RVUklFcnJvciIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklFcnJvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVVJJX05PX1BPUlQiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1OTy1QT1JUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBTExfUEFSRU5UKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1DQUxMLVBBUkVOVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULUNBTEwtUEFSRU5ULVdJVEgtREVGQVVMVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9SRUFEX1VJTlQ4KCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQ4OkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JFQURfVUlOVDE2X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQxNi1MRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9SRUFEX1VJTlQxNl9CRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMTYtQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUkVBRF9VSU5UMjRfTEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDI0LUxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JFQURfVUlOVDI0X0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQyNC1CRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9SRUFEX1VJTlQzMl9MRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMzItTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUkVBRF9VSU5UMzJfQkUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDMyLUJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JFQURfVUlOVDY0X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQ2NC1MRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9SRUFEX1VJTlQ2NF9CRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UNjQtQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHU1RfUkVBRF9GTE9BVF9MRcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELUZMT0FULUxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR1NUX1JFQURfRkxPQVRfQkXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1GTE9BVC1CRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdTVF9SRUFEX0RPVUJMRV9MRcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELURPVUJMRS1MRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdTVF9SRUFEX0RPVUJMRV9CRcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELURPVUJMRS1CRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9XUklURV9VSU5UOCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDg6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDE2X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMTYtTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDE2X0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMTYtQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDI0X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMjQtTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDI0X0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMjQtQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDMyX0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMzItTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDMyX0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMzItQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDY0X0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UNjQtTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV1JJVEVfVUlOVDY0X0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UNjQtQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHU1RfV1JJVEVfRkxPQVRfTEXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRkxPQVQtTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHU1RfV1JJVEVfRkxPQVRfQkXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRkxPQVQtQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHU1RfV1JJVEVfRE9VQkxFX0xFwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLURPVUJMRS1MRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdTVF9XUklURV9ET1VCTEVfQkXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRE9VQkxFLUJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX1VQXzIoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfVVBfNCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtNDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ST1VORF9VUF84KCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC04OkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX1VQXzE2KCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0xNjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ST1VORF9VUF8zMigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtMzI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfVVBfNjQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTY0OkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX1VQXzEyOCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtMTI4OkNBUFMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX1VQX04oKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl8yKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl80KCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl84KCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTg6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl8xNigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi0xNjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ST1VORF9ET1dOXzMyKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTMyOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX0RPV05fNjQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tNjQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUk9VTkRfRE9XTl8xMjgoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMTI4OkNBUFMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1JPVU5EX0RPV05fTigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi1OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR0RPVUJMRV9GUk9NX0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtRlJPTS1CRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdET1VCTEVfRlJPTV9MRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLUZST00tTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHRE9VQkxFX1NXQVBfTEVfQkXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVNXQVAtTEUtQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHRE9VQkxFX1RPX0JFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtVE8tQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHRE9VQkxFX1RPX0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtVE8tTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHRkxPQVRfRlJPTV9CRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtRlJPTS1CRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdGTE9BVF9GUk9NX0xFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1GUk9NLUxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR0ZMT0FUX1NXQVBfTEVfQkXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtU1dBUC1MRS1CRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdGTE9BVF9UT19CRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtVE8tQkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHRkxPQVRfVE9fTEUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULVRPLUxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZ3VpbnQ2NC10by1nZG91YmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9nZG91YmxlX3RvX2d1aW50NjQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWdkb3VibGUtdG8tZ3VpbnQ2NCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF9kdW1wX21lbcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWR1bXAtbWVtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtcm91bmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWzCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtY2VpbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWzCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3LCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1ncmVhdGVzdC1jb21tb24tZGl2aXNvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvcl9pbnQ2NMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWdyZWF0ZXN0LWNvbW1vbi1kaXZpc29yLWludDY0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLXRvLWRvdWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1kb3VibGUtdG8tZnJhY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHnCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi1tdWx0aXBseSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF9mcmFjdGlvbl9hZGTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi1hZGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLWNvbXBhcmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfc2VxbnVtX25leHTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1zZXFudW0tbmV4dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdXRpbF9zZXFudW1fY29tcGFyZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNlcW51bS1jb21wYXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX2dyb3VwX2lkX25leHTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1ncm91cC1pZC1uZXh0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX3NldF9vYmplY3RfYXJnwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2V0LW9iamVjdC1hcmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2V0LXZhbHVlLWZyb20tc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX2dldF90aW1lc3RhbXDCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1nZXQtdGltZXN0YW1wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2jCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1hcnJheS1iaW5hcnktc2VhcmNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RTZWFyY2hNb2RlIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHc3RTZWFyY2hNb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9NQUtFX0ZPVVJDQygpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtTUFLRS1GT1VSQ0M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RSX0ZPVVJDQygpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtU1RSLUZPVVJDQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GT1VSQ0NfQVJHUygpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUFSR1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1JTlQtUkFOR0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2ludF9yYW5nZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtaW50LXJhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1pbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXjCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1tYXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtaW50LXJhbmdlLXN0ZXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2Vfc3RlcMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50LXJhbmdlLXN0ZXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0JJVE1BU0soKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUJJVE1BU0s6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2JpdG1hc2vCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWJpdG1hc2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9iaXRtYXNrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1iaXRtYXNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9IT0xEU19GTEFHX1NFVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRkxBRy1TRVQ6Q0FQUyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3Rfc3RydWN0dXJlX2dldF9mbGFnc2V0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZmxhZ3NldCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3PCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZsYWdzZXQtZmxhZ3MiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2vCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZsYWdzZXQtbWFzayIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2ZsYWdzZXTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWZsYWdzZXQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1JTlQ2NC1SQU5HRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2XCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludDY0LXJhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1taW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXjCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLW1heCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlX3N0ZXDCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludDY0LXJhbmdlLXN0ZXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9zdGVwwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1zdGVwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLURPVUJMRS1SQU5HRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1kb3VibGUtcmFuZ2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWluIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1heCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfSE9MRFNfTElTVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtTElTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9IT0xEU19BUlJBWSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQVJSQVk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1hcHBlbmQtdmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX2FuZF90YWtlX3ZhbHVlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtYXBwZW5kLWFuZC10YWtlLXZhbHVlIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1wcmVwZW5kLXZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9saXN0X2NvbmNhdMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWNvbmNhdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfbGlzdF9tZXJnZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LW1lcmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9saXN0X2dldF9zaXplwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtZ2V0LXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtZ2V0LXZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9IT0xEU19GUkFDVElPTigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRlJBQ1RJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1mcmFjdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tbnVtZXJhdG9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3LCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLWRlbm9taW5hdG9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBsecKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1mcmFjdGlvbi1tdWx0aXBseSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3TCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tc3VidHJhY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1GUkFDVElPTi1SQU5HRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2XCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWZyYWN0aW9uLXJhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1yYW5nZS1taW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXjCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLXJhbmdlLW1heCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWZyYWN0aW9uLXJhbmdlLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0RBVEVfVElNRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtREFURS1USU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX0NBUFMoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3NldF9jYXBzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9nZXRfY2Fwc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfSE9MRFNfQ0FQU19GRUFUVVJFUygpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQ0FQUy1GRUFUVVJFUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9zZXRfY2Fwc19mZWF0dXJlc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtY2Fwcy1mZWF0dXJlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X2NhcHNfZmVhdHVyZXPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWNhcHMtZmVhdHVyZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtU1RSVUNUVVJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LXN0cnVjdHVyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtc3RydWN0dXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9IT0xEU19CVUZGRVIoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUJVRkZFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF92YWx1ZV9nZXRfYnVmZmVyKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtYnVmZmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF92YWx1ZV9zZXRfYnVmZmVyKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtYnVmZmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF92YWx1ZV90YWtlX2J1ZmZlcigpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtdGFrZS1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZBTFVFX0hPTERTX1NBTVBMRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtU0FNUExFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3ZhbHVlX2dldF9zYW1wbGUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1zYW1wbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3ZhbHVlX3NldF9zYW1wbGUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1zYW1wbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X3ZhbHVlX3Rha2Vfc2FtcGxlKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS10YWtlLXNhbXBsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RWYWx1ZUNvbXBhcmVGdW5jwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVDb21wYXJlRnVuYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfaXNfZml4ZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtaXMtZml4ZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3JlZ2lzdGVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXJlZ2lzdGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9pbml0X2FuZF9jb3B5wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWluaXQtYW5kLWNvcHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX3NlcmlhbGl6ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXJpYWxpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWRlc2VyaWFsaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV9jb21wYXJlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNvbXBhcmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi1jb21wYXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF92YWx1ZV91bmlvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS11bmlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfY2FuX3VuaW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi11bmlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfc3VidHJhY3TCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc3VidHJhY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2Nhbl9zdWJ0cmFjdMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4tc3VidHJhY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2ludGVyc2VjdMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pbnRlcnNlY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3TCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLWludGVyc2VjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfaXNfc3Vic2V0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWlzLXN1YnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWFwcGVuZC12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2FuZF90YWtlX3ZhbHVlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWFwcGVuZC1hbmQtdGFrZS12YWx1ZSIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktZ2V0LXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1hcnJheS1nZXQtdmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3ZhbHVlX2FycmF5X3ByZXBlbmRfdmFsdWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktcHJlcGVuZC12YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdmFsdWVfZml4YXRlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWZpeGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZmxhZ3NldF9yZWdpc3RlcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC1mbGFnc2V0LXJlZ2lzdGVyIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GT1VSQ0NfRk9STUFUIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUZPUk1BVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0lOVF9SQU5HRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtSU5ULVJBTkdFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RZUEVfQklUTUFTSyIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtQklUTUFTSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0ZMQUdfU0VUIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GTEFHLVNFVDpDQVBTIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRkxBRy1TRVQtTUFTSy1FWEFDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0lOVDY0X1JBTkdFIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1JTlQ2NC1SQU5HRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0RPVUJMRV9SQU5HRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRE9VQkxFLVJBTkdFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RZUEVfTElTVCIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0FSUkFZIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1BUlJBWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0ZSQUNUSU9OIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTi1SQU5HRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9MRVNTX1RIQU4iIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1MRVNTLVRIQU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfRVFVQUwiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1FUVVBTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WQUxVRV9HUkVBVEVSX1RIQU4iIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1HUkVBVEVSLVRIQU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkFMVUVfVU5PUkRFUkVEIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtVU5PUkRFUkVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RWYWx1ZVRhYmxlIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVRhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DSEVDS19WRVJTSU9OKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULUNIRUNLLVZFUlNJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkVSU0lPTl9NQUpPUiIgbGluaz0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtVkVSU0lPTi1NQUpPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9WRVJTSU9OX01JTk9SIiBsaW5rPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1JTk9SOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1ZFUlNJT05fTUlDUk8iIGxpbms9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTUlDUk86Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfVkVSU0lPTl9OQU5PIiBsaW5rPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU5BTk86Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX21vbml0b3JfbmV3wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3ItbmV3IiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfYnVzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3ItZ2V0LWJ1cyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWFkZC1maWx0ZXIiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9tb25pdG9yX3JlbW92ZV9maWx0ZXLCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1yZW1vdmUtZmlsdGVyIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfbW9uaXRvcl9zdGFydMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLXN0YXJ0IiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3Itc3RvcCIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1nZXQtZGV2aWNlcyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Byb3ZpZGVyc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWdldC1wcm92aWRlcnMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3ItZ2V0LXNob3ctYWxsLWRldmljZXMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9tb25pdG9yX3NldF9zaG93X2FsbF9kZXZpY2VzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3Itc2V0LXNob3ctYWxsLWRldmljZXMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfaGlkZGVuX3Byb3ZpZGVyc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1nZXQtaGlkZGVuLXByb3ZpZGVycyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXLCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItaGlkZS1wcm92aWRlciIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3VuaGlkZV9wcm92aWRlcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci11bmhpZGUtcHJvdmlkZXIiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3IiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yQ2xhc3MiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvckNsYXNzIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1jcmVhdGUtZWxlbWVudCIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX2dldF9jYXBzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWNhcHMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9nZXRfZGV2aWNlX2NsYXNzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWRldmljZS1jbGFzcyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX2dldF9kaXNwbGF5X25hbWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1nZXQtZGlzcGxheS1uYW1lIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfaGFzX2NsYXNzZXPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1oYXMtY2xhc3NlcyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX2hhc19jbGFzc2VzdsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNnc3QtZGV2aWNlLWhhcy1jbGFzc2VzdiIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1yZWNvbmZpZ3VyZS1lbGVtZW50IiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfZ2V0X3Byb3BlcnRpZXPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1nZXQtcHJvcGVydGllcyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdERldmljZSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdERldmljZUNsYXNzIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlQ2xhc3MiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jYW5fbW9uaXRvcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItY2FuLW1vbml0b3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfbWV0YWRhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWFkZC1tZXRhZGF0YSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2FkZF9zdGF0aWNfbWV0YWRhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWFkZC1zdGF0aWMtbWV0YWRhdGEiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWdldC1tZXRhZGF0YSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9tZXRhZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItY2xhc3Mtc2V0LW1ldGFkYXRhIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItY2xhc3Mtc2V0LXN0YXRpYy1tZXRhZGF0YSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9hZGTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWRldmljZS1hZGQiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9kZXZpY2VfcmVtb3ZlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1kZXZpY2UtcmVtb3ZlIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2J1c8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZ2V0LWJ1cyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1nZXQtZGV2aWNlcyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9mYWN0b3J5wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1nZXQtZmFjdG9yeSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3JlZ2lzdGVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1yZWdpc3RlciIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1zdGFydCIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3DCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLXN0b3AiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlckNsYXNzIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlckNsYXNzIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kwqAoKSIgbGluaz0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWZpbmQiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldMKgKCkiIGxpbms9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lwqAoKSIgbGluaz0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1ieS1uYW1lIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfZGV2aWNlX3Byb3ZpZGVyX3R5cGXCoCgpIiBsaW5rPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZ2V0LWRldmljZS1wcm92aWRlci10eXBlIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGHCoCgpIiBsaW5rPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktZ2V0LW1ldGFkYXRhIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5c8KgKCkiIGxpbms9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1nZXQtbWV0YWRhdGEta2V5cyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaGFzX2NsYXNzZXPCoCgpIiBsaW5rPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktaGFzLWNsYXNzZXMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzdsKgKCkiIGxpbms9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZmFjdG9yeS1oYXMtY2xhc3Nlc3YiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2xpc3RfZ2V0X2RldmljZV9wcm92aWRlcnPCoCgpIiBsaW5rPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWZhY3RvcnktbGlzdC1nZXQtZGV2aWNlLXByb3ZpZGVycyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5IiBsaW5rPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNHc3REZXZpY2VQcm92aWRlckZhY3Rvcnktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzcyIgbGluaz0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3MiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUUl9OVUxMKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVNUUi1OVUxMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFQlVHX1BBRF9OQU1FKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLVBBRC1OQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0TG9nRnVuY3Rpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdExvZ0Z1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19sb2fCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2xvZ192YWxpc3TCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ctdmFsaXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19tZXNzYWdlX2dldMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLW1lc3NhZ2UtZ2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19sb2dfZGVmYXVsdMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZy1kZWZhdWx0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxldmVsLWdldC1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctYWRkLWxvZy1mdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24tYnktZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfc2V0X2FjdGl2ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1hY3RpdmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2lzX2FjdGl2ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWlzLWFjdGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfc2V0X2NvbG9yZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtY29sb3JlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfc2V0X2NvbG9yX21vZGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtY29sb3ItbW9kZSIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfc2V0X2NvbG9yX21vZGVfZnJvbV9zdHJpbmfCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtY29sb3ItbW9kZS1mcm9tLXN0cmluZyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfaXNfY29sb3JlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWlzLWNvbG9yZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2dldF9jb2xvcl9tb2RlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctZ2V0LWNvbG9yLW1vZGUiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1kZWZhdWx0LXRocmVzaG9sZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZ8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC10aHJlc2hvbGQtZnJvbS1zdHJpbmciIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZMKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWdldC1kZWZhdWx0LXRocmVzaG9sZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC10aHJlc2hvbGQtZm9yLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXVuc2V0LXRocmVzaG9sZC1mb3ItbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfREVCVUdfQ0FURUdPUlkoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUVYVEVSTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktU1RBVElDOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktSU5JVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19DQVRFR09SWV9HRVQoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktR0VUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1mcmVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktc2V0LXRocmVzaG9sZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfY2F0ZWdvcnlfcmVzZXRfdGhyZXNob2xkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktcmVzZXQtdGhyZXNob2xkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZ2V0LXRocmVzaG9sZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9ywqAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWNvbG9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtZGVzY3JpcHRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllc8KgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWdldC1hbGwtY2F0ZWdvcmllcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3LCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jb25zdHJ1Y3QtdGVybS1jb2xvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvcsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNvbnN0cnVjdC13aW4tY29sb3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9MRVZFTF9MT0coKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxFVkVMLUxPRzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfRVJST1JfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1FUlJPUi1PQkpFQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1XQVJOSU5HLU9CSkVDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfSU5GT19PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUlORk8tT0JKRUNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9ERUJVR19PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULURFQlVHLU9CSkVDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfTE9HX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTE9HLU9CSkVDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfRklYTUVfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1GSVhNRS1PQkpFQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FUX1RSQUNFX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtVFJBQ0UtT0JKRUNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9NRU1EVU1QX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTUVNRFVNUC1PQkpFQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FUX0VSUk9SKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUNBVC1FUlJPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfV0FSTklORygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtV0FSTklORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfSU5GTygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtSU5GTzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfREVCVUcoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULURFQlVHOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9MT0coKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxPRzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DQVRfRklYTUUoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUZJWE1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NBVF9UUkFDRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtVFJBQ0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ0FUX01FTURVTVAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULU1FTURVTVA6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVJST1JfT0JKRUNUKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUVSUk9SLU9CSkVDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9XQVJOSU5HX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1XQVJOSU5HLU9CSkVDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9JTkZPX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPLU9CSkVDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctT0JKRUNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0xPR19PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTE9HLU9CSkVDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9GSVhNRV9PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRklYTUUtT0JKRUNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RSQUNFX09CSkVDVCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRS1PQkpFQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfTUVNRFVNUF9PQkpFQ1QoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTUVNRFVNUC1PQkpFQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRVJST1IoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRVJST1I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfV0FSTklORygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1XQVJOSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0lORk8oKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVRygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9MT0coKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTE9HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0ZJWE1FKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUZJWE1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1RSQUNFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVRSQUNFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX01FTURVTVAoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTUVNRFVNUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLVJFR0lTVEVSLUZVTkNQVFI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfREVCVUdfRlVOQ1BUUigpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSLU5BTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUygpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEUtV0lUSC1UUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXByaW50LXN0YWNrLXRyYWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9USU1FX0FSR1MoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1NUSU1FX0FSR1MoKSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtU1RJTUUtQVJHUzpDQVBTIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kZWJ1Z19iaW5fdG9fZG90X2RhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1iaW4tdG8tZG90LWRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWJpbi10by1kb3QtZmlsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGVidWdfYmluX3RvX2RvdF9maWxlX3dpdGhfdHPCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1iaW4tdG8tZG90LWZpbGUtd2l0aC10cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5mb192YXNwcmludGbCoCgpIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1pbmZvLXZhc3ByaW50ZiIgc2luY2U9IjEuOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaW5mb19zdHJkdXBfdnByaW50ZsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXZwcmludGYiIHNpbmNlPSIxLjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2luZm9fc3RyZHVwX3ByaW50ZsKgKCkiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXByaW50ZiIgc2luY2U9IjEuOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RGVidWdMZXZlbCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9MRVZFTF9ERUZBVUxUIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1ERUZBVUxUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0xFVkVMX01BWCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtTUFYOkNBUFMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdERlYnVnQ29sb3JGbGFncyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NvbG9yRmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdERlYnVnQ29sb3JNb2RlIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ29sb3JNb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3REZWJ1Z0dyYXBoRGV0YWlscyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0dyYXBoRGV0YWlscyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRlVOQ1RJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUZVTkNUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJ2YXJpYWJsZSIgbmFtZT0iR1NUX0NBVF9ERUZBVUxUIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVGQVVMVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9USU1FX0ZPUk1BVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1GT1JNQVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RJTUVfRk9STUFUIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1TVElNRS1GT1JNQVQ6Q0FQUyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUFRSX0ZPUk1BVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtUFRSLUZPUk1BVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9TRUdNRU5UX0ZPUk1BVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtU0VHTUVOVC1GT1JNQVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHJhY2VyX3JlZ2lzdGVywqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjZ3N0LXRyYWNlci1yZWdpc3RlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rwqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjZ3N0LXRyYWNpbmctcmVnaXN0ZXItaG9vayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rQmluQWRkUG9zdMKgKCkiIGxpbms9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tCaW5BZGRQb3N0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tCaW5BZGRQcmXCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rQmluQWRkUHJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQb3N0wqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0JpblJlbW92ZVBvc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VHJhY2VySG9va0JpblJlbW92ZVByZcKgKCkiIGxpbms9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tCaW5SZW1vdmVQcmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VHJhY2VySG9va0VsZW1lbnRBZGRQYWTCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudEFkZFBhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUG9zdMKgKCkiIGxpbms9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQb3N0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQcmXCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUHJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50TmV3wqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnROZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVBvc3TCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUG9zdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUHJlwqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVByZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdMKgKCkiIGxpbms9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQb3N0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQcmXCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UHJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkwqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnRSZW1vdmVQYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VHJhY2VySG9va1BhZExpbmtQb3N0wqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZExpbmtQb3N0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRMaW5rUHJlwqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZExpbmtQcmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVBvc3TCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUG9zdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUHJlwqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVByZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdMKgKCkiIGxpbms9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQb3N0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQcmXCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UHJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFBvc3TCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQb3N0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFByZcKgKCkiIGxpbms9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFByZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUHVzaFBvc3TCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVzaFBvc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VHJhY2VySG9va1BhZFB1c2hQcmXCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVzaFByZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUXVlcnlQb3N0wqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFF1ZXJ5UG9zdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rUGFkUXVlcnlQcmXCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUXVlcnlQcmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0VHJhY2VySG9va1BhZFVubGlua1Bvc3TCoCgpIiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkVW5saW5rUG9zdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RUcmFjZXJIb29rUGFkVW5saW5rUHJlwqAoKSIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFVubGlua1ByZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFRyYWNlciIgbGluaz0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VyLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGFyYW1z4oCdIHByb3BlcnR5IiBsaW5rPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXItLXBhcmFtcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X2xpc3TCoCgpIiBsaW5rPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwjZ3N0LXRyYWNlci1mYWN0b3J5LWdldC1saXN0IiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RUcmFjZXJGYWN0b3J5IiBsaW5rPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwjR3N0VHJhY2VyRmFjdG9yeS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RyYWNlcl9yZWNvcmRfbmV3wqAoKSIgbGluaz0iR3N0VHJhY2VyUmVjb3JkLmh0bWwjZ3N0LXRyYWNlci1yZWNvcmQtbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90cmFjZXJfcmVjb3JkX2xvZ8KgKCkiIGxpbms9IkdzdFRyYWNlclJlY29yZC5odG1sI2dzdC10cmFjZXItcmVjb3JkLWxvZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0VHJhY2VyUmVjb3JkIiBsaW5rPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNHc3RUcmFjZXJSZWNvcmQtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RUcmFjZXJWYWx1ZUZsYWdzIiBsaW5rPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNHc3RUcmFjZXJWYWx1ZUZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RUcmFjZXJWYWx1ZVNjb3BlIiBsaW5rPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNHc3RUcmFjZXJWYWx1ZVNjb3BlIiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9BTExPQ0FUT1JfRkxBR19DVVNUT01fQUxMT0MiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI0dTVC1BTExPQ0FUT1ItRkxBRy1DVVNUT00tQUxMT0M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQUxMT0NBVE9SX0ZMQUdfTEFTVCIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjR1NULUFMTE9DQVRPUi1GTEFHLUxBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQklOX0ZMQUdfTk9fUkVTWU5DIiBsaW5rPSJHc3RCaW4uaHRtbCNHU1QtQklOLUZMQUctTk8tUkVTWU5DOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JJTl9GTEFHX1NUUkVBTVNfQVdBUkUiIGxpbms9IkdzdEJpbi5odG1sI0dTVC1CSU4tRkxBRy1TVFJFQU1TLUFXQVJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JJTl9GTEFHX0xBU1QiIGxpbms9IkdzdEJpbi5odG1sI0dTVC1CSU4tRkxBRy1MQVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0xJVkUiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1MSVZFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctREVDT0RFLU9OTFk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLURJU0NPTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfUkVTWU5DIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctUkVTWU5DOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0NPUlJVUFRFRCIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUNPUlJVUFRFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19NQVJLRVIiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1NQVJLRVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfSEVBREVSIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctSEVBREVSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9GTEFHX0dBUCIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUdBUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfRkxBR19EUk9QUEFCTEUiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRkxBRy1EUk9QUEFCTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLURFTFRBLVVOSVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVRBRy1NRU1PUlk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfU1lOQ19BRlRFUiIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLVNZTkMtQUZURVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0ZMQUdfTEFTVCIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1GTEFHLUxBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0NPUFlfTk9ORSIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0NPUFlfRkxBR1MiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1GTEFHUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktVElNRVNUQU1QUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfQ09QWV9NRVRBIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktTUVUQTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfQ09QWV9NRU1PUlkiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1NRU1PUlk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX0NPUFlfTUVSR0UiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1NRVJHRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfQ09QWV9ERUVQIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUNPUFktREVFUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfTk9ORSIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1BQ1FVSVJFLUZMQUctTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfS0VZX1VOSVQiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtQUNRVUlSRS1GTEFHLUtFWS1VTklUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19ET05UV0FJVCIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1BQ1FVSVJFLUZMQUctRE9OVFdBSVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0RJU0NPTlQiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtQUNRVUlSRS1GTEFHLURJU0NPTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0xBU1QiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHU1QtQlVGRkVSLVBPT0wtQUNRVUlSRS1GTEFHLUxBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVTX0ZMVVNISU5HIiBsaW5rPSJHc3RCdXMuaHRtbCNHU1QtQlVTLUZMVVNISU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVU19GTEFHX0xBU1QiIGxpbms9IkdzdEJ1cy5odG1sI0dTVC1CVVMtRkxBRy1MQVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVU19EUk9QIiBsaW5rPSJHc3RCdXMuaHRtbCNHU1QtQlVTLURST1A6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVTX1BBU1MiIGxpbms9IkdzdEJ1cy5odG1sI0dTVC1CVVMtUEFTUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVVNfQVNZTkMiIGxpbms9IkdzdEJ1cy5odG1sI0dTVC1CVVMtQVNZTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRyIgbGluaz0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUlOVEVSU0VDVC1aSUctWkFHOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUIiBsaW5rPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtSU5URVJTRUNULUZJUlNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NBUFNfRkxBR19BTlkiIGxpbms9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHLUFOWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19FTlRSWV9TSU5HTEUiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVNJTkdMRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQyIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktUEVSSU9ESUM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfT0siIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLU9LOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0VBUkxZIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FQVJMWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19VTlNDSEVEVUxFRCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVU5TQ0hFRFVMRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfQlVTWSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stQlVTWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19CQURUSU1FIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1CQURUSU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0VSUk9SIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FUlJPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19VTlNVUFBPUlRFRCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVU5TVVBQT1JURUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRE9ORSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRE9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfU1lOQyIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tU0lOR0xFLVNZTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX0FTWU5DIiBsaW5rPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1GTEFHLUNBTi1ETy1TSU5HTEUtQVNZTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfU1lOQyIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tUEVSSU9ESUMtU1lOQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19GTEFHX0NBTl9ET19QRVJJT0RJQ19BU1lOQyIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1DQU4tRE8tUEVSSU9ESUMtQVNZTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX1JFU09MVVRJT04iIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctQ0FOLVNFVC1SRVNPTFVUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctQ0FOLVNFVC1NQVNURVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMiIGxpbms9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUZMQUctTkVFRFMtU1RBUlRVUC1TWU5DOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NMT0NLX0ZMQUdfTEFTVCIgbGluaz0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBRy1MQVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VMRU1FTlRfRkxBR19MT0NLRURfU1RBVEUiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1GTEFHLUxPQ0tFRC1TVEFURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FTEVNRU5UX0ZMQUdfU0lOSyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUZMQUctU0lOSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FTEVNRU5UX0ZMQUdfU09VUkNFIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRkxBRy1TT1VSQ0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0siIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1GTEFHLVBST1ZJREUtQ0xPQ0s6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0siIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1GTEFHLVJFUVVJUkUtQ0xPQ0s6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRUxFTUVOVF9GTEFHX0lOREVYQUJMRSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUZMQUctSU5ERVhBQkxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VMRU1FTlRfRkxBR19MQVNUIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRkxBRy1MQVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX1ZPSURfUEVORElORyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1WT0lELVBFTkRJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RBVEVfTlVMTCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1OVUxMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX1JFQURZIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVJFQURZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX1BBVVNFRCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QQVVTRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RBVEVfUExBWUlORyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1QTEFZSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1OVUxMLVRPLVJFQURZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVJFQURZLVRPLVBBVVNFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkciIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLVBBVVNFRC1UTy1QTEFZSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtUExBWUlORy1UTy1QQVVTRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtUEFVU0VELVRPLVJFQURZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1SRUFEWS1UTy1OVUxMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1GQUlMVVJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1TVUNDRVNTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtQVNZTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtQ0hBTkdFLU5PLVBSRVJPTEw6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ09SRV9FUlJPUl9GQUlMRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1GQUlMRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ09SRV9FUlJPUl9UT09fTEFaWSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLVRPTy1MQVpZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfTk9UX0lNUExFTUVOVEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItTk9ULUlNUExFTUVOVEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfU1RBVEVfQ0hBTkdFIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItU1RBVEUtQ0hBTkdFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfUEFEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItUEFEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfVEhSRUFEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItVEhSRUFEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfTkVHT1RJQVRJT04iIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1ORUdPVElBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX0VWRU5UIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItRVZFTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ09SRV9FUlJPUl9TRUVLIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItU0VFSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX0NBUFMiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1DQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX1RBRyIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLVRBRzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX01JU1NJTkdfUExVR0lOIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1ItTUlTU0lORy1QTFVHSU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ09SRV9FUlJPUl9DTE9DSyIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SLUNMT0NLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPUkVfRVJST1JfRElTQUJMRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1ESVNBQkxFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT1JFX0VSUk9SX05VTV9FUlJPUlMiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtQ09SRS1FUlJPUi1OVU0tRVJST1JTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xJQlJBUllfRVJST1JfRkFJTEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1ItRkFJTEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xJQlJBUllfRVJST1JfVE9PX0xBWlkiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1UT08tTEFaWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MSUJSQVJZX0VSUk9SX0lOSVQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1JTklUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xJQlJBUllfRVJST1JfU0hVVERPV04iIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1TSFVURE9XTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1ItU0VUVElOR1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTElCUkFSWV9FUlJPUl9FTkNPREUiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUi1FTkNPREU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTElCUkFSWV9FUlJPUl9OVU1fRVJST1JTIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUxJQlJBUlktRVJST1ItTlVNLUVSUk9SUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9SRVNPVVJDRV9FUlJPUl9GQUlMRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItRkFJTEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX1RPT19MQVpZIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLVRPTy1MQVpZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1OT1QtRk9VTkQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfQlVTWSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1CVVNZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVJFQUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9XUklURSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVdSSVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRF9XUklURSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVJFQUQtV1JJVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfQ0xPU0UiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItQ0xPU0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfUkVBRCIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1SRUFEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX1dSSVRFIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLVdSSVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX1NFRUsiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItU0VFSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9SRVNPVVJDRV9FUlJPUl9TWU5DIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLVNZTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfU0VUVElOR1MiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItU0VUVElOR1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1SRVNPVVJDRS1FUlJPUi1OTy1TUEFDRS1MRUZUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX05PVF9BVVRIT1JJWkVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SLU5PVC1BVVRIT1JJWkVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JFU09VUkNFX0VSUk9SX05VTV9FUlJPUlMiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtUkVTT1VSQ0UtRVJST1ItTlVNLUVSUk9SUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfRkFJTEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1GQUlMRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX1RPT19MQVpZIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1UT08tTEFaWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVEIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1OT1QtSU1QTEVNRU5URUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX1RZUEVfTk9UX0ZPVU5EIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1UWVBFLU5PVC1GT1VORDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfV1JPTkdfVFlQRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1ItV1JPTkctVFlQRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5EIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1DT0RFQy1OT1QtRk9VTkQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX0RFQ09ERSIgbGluaz0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1ItREVDT0RFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9FUlJPUl9FTkNPREUiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLUVOQ09ERTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfREVNVVgiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLURFTVVYOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9FUlJPUl9NVVgiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLU1VWDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fRVJST1JfRk9STUFUIiBsaW5rPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVNUUkVBTS1FUlJPUi1GT1JNQVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLURFQ1JZUFQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFRfTk9LRVkiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLURFQ1JZUFQtTk9LRVk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0VSUk9SX05VTV9FUlJPUlMiIGxpbms9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1VUFNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9UWVBFX0RPV05TVFJFQU0iIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtRE9XTlNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9UWVBFX1NFUklBTElaRUQiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtU0VSSUFMSVpFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9UWVBFX1NUSUNLWSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVFlQRS1TVElDS1k6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfVFlQRV9TVElDS1lfTVVMVEkiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtU1RJQ0tZLU1VTFRJOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX1VOS05PV04iIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVVOS05PV046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfRkxVU0hfU1RBUlQiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUZMVVNILVNUQVJUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX0ZMVVNIX1NUT1AiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUZMVVNILVNUT1A6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfU1RSRUFNX1NUQVJUIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TVFJFQU0tU1RBUlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfQ0FQUyIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQ0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfU0VHTUVOVCIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU0VHTUVOVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TVFJFQU1fQ09MTEVDVElPTiIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU1RSRUFNLUNPTExFQ1RJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfVEFHIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UQUc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfQlVGRkVSU0laRSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQlVGRkVSU0laRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TSU5LX01FU1NBR0UiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVNJTkstTUVTU0FHRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TVFJFQU1fR1JPVVBfRE9ORSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU1RSRUFNLUdST1VQLURPTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfRU9TIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1FT1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfVE9DIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UT0M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfUFJPVEVDVElPTiIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtUFJPVEVDVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TRUdNRU5UX0RPTkUiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVNFR01FTlQtRE9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9HQVAiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUdBUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9RT1MiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVFPUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TRUVLIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRUVLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX05BVklHQVRJT04iIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULU5BVklHQVRJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfTEFURU5DWSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtTEFURU5DWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9TVEVQIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TVEVQOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX1JFQ09ORklHVVJFIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1SRUNPTkZJR1VSRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9UT0NfU0VMRUNUIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UT0MtU0VMRUNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX1NFTEVDVF9TVFJFQU1TIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRUxFQ1QtU1RSRUFNUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0iIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1VUFNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQ1VTVE9NLURPV05TVFJFQU06Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09CIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1DVVNUT00tRE9XTlNUUkVBTS1PT0I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fU1RJQ0tZIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1DVVNUT00tRE9XTlNUUkVBTS1TVElDS1k6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRVZFTlRfQ1VTVE9NX0JPVEgiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUNVU1RPTS1CT1RIOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0VWRU5UX0NVU1RPTV9CT1RIX09PQiIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQ1VTVE9NLUJPVEgtT09COkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9GTEFHX05PTkUiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULVNUUkVBTS1GTEFHLU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0ZMQUdfU1BBUlNFIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TVFJFQU0tRkxBRy1TUEFSU0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TVFJFQU0tRkxBRy1TRUxFQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX0ZMQUdfVU5TRUxFQ1QiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULVNUUkVBTS1GTEFHLVVOU0VMRUNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FPU19UWVBFX09WRVJGTE9XIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1RT1MtVFlQRS1PVkVSRkxPVzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RT1NfVFlQRV9VTkRFUkZMT1ciIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULVFPUy1UWVBFLVVOREVSRkxPVzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RT1NfVFlQRV9USFJPVFRMRSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtUU9TLVRZUEUtVEhST1RUTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19UWVBFX05PTkUiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1OT05FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFRUtfVFlQRV9TRVQiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULVNFRUstVFlQRS1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19UWVBFX0VORCIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1UWVBFLUVORDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TRUVLX0ZMQUdfTk9ORSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1GTEFHLU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19GTEFHX0ZMVVNIIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctRkxVU0g6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctQUNDVVJBVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19GTEFHX0tFWV9VTklUIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctS0VZLVVOSVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19GTEFHX1NFR01FTlQiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1TRUdNRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFRUtfRkxBR19UUklDS01PREUiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1UUklDS01PREU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VFS19GTEFHX1NLSVAiIGxpbms9IkdzdEV2ZW50Lmh0bWwjR1NULVNFRUstRkxBRy1TS0lQOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFRUtfRkxBR19TTkFQX0JFRk9SRSIgbGluaz0iR3N0RXZlbnQuaHRtbCNHU1QtU0VFSy1GTEFHLVNOQVAtQkVGT1JFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFRUtfRkxBR19TTkFQX0FGVEVSIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctU05BUC1BRlRFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TRUVLX0ZMQUdfU05BUF9ORUFSRVNUIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctU05BUC1ORUFSRVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFRUtfRkxBR19UUklDS01PREVfS0VZX1VOSVRTIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctVFJJQ0tNT0RFLUtFWS1VTklUUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFX05PX0FVRElPIiBsaW5rPSJHc3RFdmVudC5odG1sI0dTVC1TRUVLLUZMQUctVFJJQ0tNT0RFLU5PLUFVRElPOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZPUk1BVF9VTkRFRklORUQiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVVOREVGSU5FRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GT1JNQVRfREVGQVVMVCIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtREVGQVVMVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GT1JNQVRfQllURVMiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULUJZVEVTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZPUk1BVF9USU1FIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1USU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZPUk1BVF9CVUZGRVJTIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1CVUZGRVJTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZPUk1BVF9QRVJDRU5UIiBsaW5rPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1QRVJDRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lURVJBVE9SX0lURU1fU0tJUCIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUlURU0tU0tJUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JVEVSQVRPUl9JVEVNX1BBU1MiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1JVEVNLVBBU1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfSVRFUkFUT1JfSVRFTV9FTkQiIGxpbms9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1JVEVNLUVORDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JVEVSQVRPUl9ET05FIiBsaW5rPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItRE9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JVEVSQVRPUl9PSyIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLU9LOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lURVJBVE9SX1JFU1lOQyIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLVJFU1lOQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JVEVSQVRPUl9FUlJPUiIgbGluaz0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUVSUk9SOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctUkVBRE9OTFk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBRy1OTy1TSEFSRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRU1PUllfRkxBR19aRVJPX1BSRUZJWEVEIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctWkVSTy1QUkVGSVhFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRU1PUllfRkxBR19aRVJPX1BBRERFRCIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLVpFUk8tUEFEREVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FTU9SWV9GTEFHX1BIWVNJQ0FMTFlfQ09OVElHVU9VUyIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLVBIWVNJQ0FMTFktQ09OVElHVU9VUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRU1PUllfRkxBR19OT1RfTUFQUEFCTEUiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dTVC1NRU1PUlktRkxBRy1OT1QtTUFQUEFCTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVNT1JZX0ZMQUdfTEFTVCIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1GTEFHLUxBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUFQX1JFQUQiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dTVC1NQVAtUkVBRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NQVBfV1JJVEUiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dTVC1NQVAtV1JJVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUFQX0ZMQUdfTEFTVCIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR1NULU1BUC1GTEFHLUxBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9VTktOT1dOIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVU5LTk9XTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0VPUyIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVPUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0VSUk9SIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRVJST1I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9XQVJOSU5HIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtV0FSTklORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0lORk8iIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1JTkZPOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfVEFHIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVEFHOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfQlVGRkVSSU5HIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQlVGRkVSSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUQVRFLUNIQU5HRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9TVEFURV9ESVJUWSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUQVRFLURJUlRZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfU1RFUF9ET05FIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1RFUC1ET05FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUNMT0NLLVBST1ZJREU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9DTE9DS19MT1NUIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQ0xPQ0stTE9TVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX05FV19DTE9DSyIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLU5FVy1DTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVFJVQ1RVUkUtQ0hBTkdFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUUkVBTS1TVEFUVVM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9BUFBMSUNBVElPTiIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUFQUExJQ0FUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfRUxFTUVOVCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUVMRU1FTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU0VHTUVOVC1TVEFSVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNFR01FTlQtRE9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1EVVJBVElPTi1DSEFOR0VEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfTEFURU5DWSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUxBVEVOQ1k6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUFTWU5DLVNUQVJUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfQVNZTkNfRE9ORSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLUFTWU5DLURPTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtUkVRVUVTVC1TVEFURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1NURVBfU1RBUlQiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TVEVQLVNUQVJUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfUU9TIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtUU9TOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfUFJPR1JFU1MiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1QUk9HUkVTUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1RPQyIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRPQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX1JFU0VUX1RJTUUiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1SRVNFVC1USU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJUIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1RSRUFNLVNUQVJUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfTkVFRF9DT05URVhUIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtTkVFRC1DT05URVhUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfSEFWRV9DT05URVhUIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtSEFWRS1DT05URVhUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfRVhURU5ERUQiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1FWFRFTkRFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0RFVklDRV9BRERFRCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLURFVklDRS1BRERFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVNTQUdFX0RFVklDRV9SRU1PVkVEIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtREVWSUNFLVJFTU9WRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9QUk9QRVJUWV9OT1RJRlkiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1QUk9QRVJUWS1OT1RJRlk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUUkVBTS1DT0xMRUNUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfU1RSRUFNU19TRUxFQ1RFRCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNUUkVBTVMtU0VMRUNURUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVTU0FHRV9SRURJUkVDVCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVJFRElSRUNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FU1NBR0VfQU5ZIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtQU5ZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfTElOSyIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJVQ1RVUkUtQ0hBTkdFLVRZUEUtUEFELUxJTks6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9VTkxJTksiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSVUNUVVJFLUNIQU5HRS1UWVBFLVBBRC1VTkxJTks6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJFQU0tU1RBVFVTLVRZUEUtQ1JFQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUiIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJFQU0tU1RBVFVTLVRZUEUtRU5URVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0xFQVZFIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULVNUUkVBTS1TVEFUVVMtVFlQRS1MRUFWRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfREVTVFJPWSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJFQU0tU1RBVFVTLVRZUEUtREVTVFJPWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RBUlQiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLVNUQVJUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9QQVVTRSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1TVFJFQU0tU1RBVFVTLVRZUEUtUEFVU0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUT1AiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtU1RSRUFNLVNUQVRVUy1UWVBFLVNUT1A6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1QUk9HUkVTUy1UWVBFLVNUQVJUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BST0dSRVNTX1RZUEVfQ09OVElOVUUiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtUFJPR1JFU1MtVFlQRS1DT05USU5VRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QUk9HUkVTU19UWVBFX0NPTVBMRVRFIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR1NULVBST0dSRVNTLVRZUEUtQ09NUExFVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dTVC1QUk9HUkVTUy1UWVBFLUNBTkNFTEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BST0dSRVNTX1RZUEVfRVJST1IiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtUFJPR1JFU1MtVFlQRS1FUlJPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVRBX0ZMQUdfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1GTEFHLU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVUQV9GTEFHX1JFQURPTkxZIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctUkVBRE9OTFk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTUVUQV9GTEFHX1BPT0xFRCIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1GTEFHLVBPT0xFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NRVRBX0ZMQUdfTE9DS0VEIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctTE9DS0VEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01FVEFfRkxBR19MQVNUIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctTEFTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NSU5JX09CSkVDVF9GTEFHX0xPQ0tBQkxFIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLUxPQ0tBQkxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdfTE9DS19SRUFET05MWSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1MT0NLLVJFQURPTkxZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1NQVktQkUtTEVBS0VEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1MQVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xPQ0tfRkxBR19SRUFEIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1MT0NLLUZMQUctUkVBRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MT0NLX0ZMQUdfV1JJVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULUxPQ0stRkxBRy1XUklURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1MT0NLLUZMQUctRVhDTFVTSVZFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xPQ0tfRkxBR19MQVNUIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1MT0NLLUZMQUctTEFTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctTUFZLUJFLUxFQUtFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9PQkpFQ1RfRkxBR19MQVNUIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctTEFTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfVU5LTk9XTiIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1VTktOT1dOOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9TUkMiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtU1JDOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9TSU5LIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNJTks6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0ZMQUdfQkxPQ0tFRCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLUJMT0NLRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0ZMQUdfRkxVU0hJTkciIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1GTFVTSElORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfRkxBR19FT1MiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1FT1M6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0ZMQUdfQkxPQ0tJTkciIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1CTE9DS0lORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfRkxBR19ORUVEX1BBUkVOVCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLU5FRUQtUEFSRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9GTEFHX05FRURfUkVDT05GSUdVUkUiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1ORUVELVJFQ09ORklHVVJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9GTEFHX1BFTkRJTkdfRVZFTlRTIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZMQUctUEVORElORy1FVkVOVFM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0ZMQUdfRklYRURfQ0FQUyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLUZJWEVELUNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9GTEFHX1BST1hZX0NBUFMiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1QUk9YWS1DQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfRkxBR19QUk9YWV9BTExPQ0FUSU9OIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZMQUctUFJPWFktQUxMT0NBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfRkxBR19QUk9YWV9TQ0hFRFVMSU5HIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZMQUctUFJPWFktU0NIRURVTElORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfRkxBR19BQ0NFUFRfSU5URVJTRUNUIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUZMQUctQUNDRVBULUlOVEVSU0VDVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEUiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtRkxBRy1BQ0NFUFQtVEVNUExBVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0ZMQUdfTEFTVCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1GTEFHLUxBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfT0siIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1PSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfTElOS19XUk9OR19ISUVSQVJDSFkiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1XUk9ORy1ISUVSQVJDSFk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfV0FTX0xJTktFRCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLVdBUy1MSU5LRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstV1JPTkctRElSRUNUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX05PRk9STUFUIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstTk9GT1JNQVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfTk9TQ0hFRCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLU5PU0NIRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfUkVGVVNFRCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLVJFRlVTRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLU5PVEhJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfQ0hFQ0tfSElFUkFSQ0hZIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstQ0hFQ0stSElFUkFSQ0hZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9MSU5LX0NIRUNLX1RFTVBMQVRFX0NBUFMiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtTElOSy1DSEVDSy1URU1QTEFURS1DQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfTElOS19DSEVDS19DQVBTIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstQ0hFQ0stQ0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1MSU5LLUNIRUNLLURFRkFVTFQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18yIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUy0yOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULUZMT1ctQ1VTVE9NLVNVQ0NFU1MtMTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1DVVNUT00tU1VDQ0VTUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX09LIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX05PVF9MSU5LRUQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1MSU5LRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRkxPV19GTFVTSElORyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULUZMT1ctRkxVU0hJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRkxPV19FT1MiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUVPUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX05PVF9ORUdPVElBVEVEIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1OT1QtTkVHT1RJQVRFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX0VSUk9SIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1FUlJPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX05PVF9TVVBQT1JURUQiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1TVVBQT1JURUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRkxPV19DVVNUT01fRVJST1IiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1GTE9XLUNVU1RPTS1FUlJPUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX0NVU1RPTV9FUlJPUl8xIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1DVVNUT00tRVJST1ItMTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GTE9XX0NVU1RPTV9FUlJPUl8yIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtRkxPVy1DVVNUT00tRVJST1ItMjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfTU9ERV9OT05FIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELU1PREUtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfTU9ERV9QVVNIIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELU1PREUtUFVTSDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfTU9ERV9QVUxMIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELU1PREUtUFVMTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfRFJPUCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1EUk9QOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9QUk9CRV9PSyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1PSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfUkVNT1ZFIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVJFTU9WRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfUEFTUyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1QQVNTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9QUk9CRV9IQU5ETEVEIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUhBTkRMRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1BST0JFX1RZUEVfSU5WQUxJRCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLUlOVkFMSUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1BST0JFX1RZUEVfSURMRSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLUlETEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0siIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtVFlQRS1CTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtVFlQRS1CVUZGRVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSX0xJU1QiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtVFlQRS1CVUZGRVItTElTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVRZUEUtRVZFTlQtRE9XTlNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9VUFNUUkVBTSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLUVWRU5ULVVQU1RSRUFNOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVRZUEUtRVZFTlQtRkxVU0g6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLVFVRVJZLURPV05TVFJFQU06Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfVVBTVFJFQU0iIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtVFlQRS1RVUVSWS1VUFNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9QVVNIIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVRZUEUtUFVTSDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9QVUxMIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVRZUEUtUFVMTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS0lORyIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLUJMT0NLSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfRE9XTlNUUkVBTSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLURBVEEtRE9XTlNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX1VQU1RSRUFNIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVRZUEUtREFUQS1VUFNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0JPVEgiIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtVFlQRS1EQVRBLUJPVEg6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLUJMT0NLLURPV05TVFJFQU06Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfVVBTVFJFQU0iIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtVFlQRS1CTE9DSy1VUFNUUkVBTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9CT1RIIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVRZUEUtRVZFTlQtQk9USDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RIIiBsaW5rPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLVRZUEUtUVVFUlktQk9USDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfUFJPQkVfVFlQRV9BTExfQk9USCIgbGluaz0iR3N0UGFkLmh0bWwjR1NULVBBRC1QUk9CRS1UWVBFLUFMTC1CT1RIOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9QUk9CRV9UWVBFX1NDSEVEVUxJTkciIGxpbms9IkdzdFBhZC5odG1sI0dTVC1QQUQtUFJPQkUtVFlQRS1TQ0hFRFVMSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9URU1QTEFURV9GTEFHX0xBU1QiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR1NULVBBRC1URU1QTEFURS1GTEFHLUxBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFEX0FMV0FZUyIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELUFMV0FZUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQURfU09NRVRJTUVTIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtU09NRVRJTUVTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBRF9SRVFVRVNUIiBsaW5rPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtUkVRVUVTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQVJTRV9FUlJPUl9TWU5UQVgiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1TWU5UQVg6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5UIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRVJST1ItTk8tU1VDSC1FTEVNRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfUFJPUEVSVFkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1OTy1TVUNILVBST1BFUlRZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX0xJTksiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1MSU5LOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX0NPVUxEX05PVF9TRVRfUFJPUEVSVFkiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1DT1VMRC1OT1QtU0VULVBST1BFUlRZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX0VNUFRZX0JJTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLUVNUFRZLUJJTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQVJTRV9FUlJPUl9FTVBUWSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLUVNUFRZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BBUlNFX0VSUk9SX0RFTEFZRURfTElOSyIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SLURFTEFZRUQtTElOSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQVJTRV9GTEFHX05PTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1GTEFHLU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1GTEFHLUZBVEFMLUVSUk9SUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QQVJTRV9GTEFHX05PX1NJTkdMRV9FTEVNRU5UX0JJTlMiIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1GTEFHLU5PLVNJTkdMRS1FTEVNRU5ULUJJTlM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUEFSU0VfRkxBR19QTEFDRV9JTl9CSU4iIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1GTEFHLVBMQUNFLUlOLUJJTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLIiBsaW5rPSJHc3RQaXBlbGluZS5odG1sI0dTVC1QSVBFTElORS1GTEFHLUZJWEVELUNMT0NLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BJUEVMSU5FX0ZMQUdfTEFTVCIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNHU1QtUElQRUxJTkUtRkxBRy1MQVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEUiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRVJST1ItTU9EVUxFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BMVUdJTl9FUlJPUl9ERVBFTkRFTkNJRVMiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRVJST1ItREVQRU5ERU5DSUVTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BMVUdJTl9FUlJPUl9OQU1FX01JU01BVENIIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLUVSUk9SLU5BTUUtTUlTTUFUQ0g6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUExVR0lOX0ZMQUdfQ0FDSEVEIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLUZMQUctQ0FDSEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BMVUdJTl9GTEFHX0JMQUNLTElTVEVEIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLUZMQUctQkxBQ0tMSVNURUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1OT05FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUkVDVVJTRSIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctUkVDVVJTRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1BBVEhTX0FSRV9ERUZBVUxUX09OTFkiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tREVQRU5ERU5DWS1GTEFHLVBBVEhTLUFSRS1ERUZBVUxULU9OTFk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19GSUxFX05BTUVfSVNfU1VGRklYIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHU1QtUExVR0lOLURFUEVOREVOQ1ktRkxBRy1GSUxFLU5BTUUtSVMtU1VGRklYOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1BSRUZJWCIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR1NULVBMVUdJTi1ERVBFTkRFTkNZLUZMQUctRklMRS1OQU1FLUlTLVBSRUZJWDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9SQU5LX05PTkUiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHU1QtUkFOSy1OT05FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1JBTktfTUFSR0lOQUwiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHU1QtUkFOSy1NQVJHSU5BTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9SQU5LX1NFQ09OREFSWSIgbGluaz0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dTVC1SQU5LLVNFQ09OREFSWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9SQU5LX1BSSU1BUlkiIGxpbms9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHU1QtUkFOSy1QUklNQVJZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX1RZUEVfVVBTVFJFQU0iIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVRZUEUtVVBTVFJFQU06Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfVFlQRV9ET1dOU1RSRUFNIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1UWVBFLURPV05TVFJFQU06Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfVFlQRV9TRVJJQUxJWkVEIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1UWVBFLVNFUklBTElaRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfVU5LTk9XTiIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktVU5LTk9XTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVSWV9QT1NJVElPTiIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktUE9TSVRJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfRFVSQVRJT04iIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLURVUkFUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0xBVEVOQ1kiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUxBVEVOQ1k6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfSklUVEVSIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1KSVRURVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfUkFURSIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktUkFURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVSWV9TRUVLSU5HIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1TRUVLSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX1NFR01FTlQiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVNFR01FTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfQ09OVkVSVCIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktQ09OVkVSVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVSWV9GT1JNQVRTIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1GT1JNQVRTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0JVRkZFUklORyIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktQlVGRkVSSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0NVU1RPTSIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktQ1VTVE9NOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX1VSSSIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktVVJJOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0FMTE9DQVRJT04iIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUFMTE9DQVRJT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFUllfU0NIRURVTElORyIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktU0NIRURVTElORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVSWV9BQ0NFUFRfQ0FQUyIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktQUNDRVBULUNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0NBUFMiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVJZX0RSQUlOIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1EUkFJTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVSWV9DT05URVhUIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1DT05URVhUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JVRkZFUklOR19TVFJFQU0iIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULUJVRkZFUklORy1TVFJFQU06Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSSU5HX0RPV05MT0FEIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1CVUZGRVJJTkctRE9XTkxPQUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQlVGRkVSSU5HX1RJTUVTSElGVCIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtQlVGRkVSSU5HLVRJTUVTSElGVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CVUZGRVJJTkdfTElWRSIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtQlVGRkVSSU5HLUxJVkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dTVC1TQ0hFRFVMSU5HLUZMQUctU0VFS0FCTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0NIRURVTElOR19GTEFHX1NFUVVFTlRJQUwiIGxpbms9IkdzdFF1ZXJ5Lmh0bWwjR1NULVNDSEVEVUxJTkctRkxBRy1TRVFVRU5USUFMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NDSEVEVUxJTkdfRkxBR19CQU5EV0lEVEhfTElNSVRFRCIgbGluaz0iR3N0UXVlcnkuaHRtbCNHU1QtU0NIRURVTElORy1GTEFHLUJBTkRXSURUSC1MSU1JVEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFR01FTlRfRkxBR19OT05FIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR1NULVNFR01FTlQtRkxBRy1OT05FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFR01FTlRfRkxBR19SRVNFVCIgbGluaz0iR3N0U2VnbWVudC5odG1sI0dTVC1TRUdNRU5ULUZMQUctUkVTRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERSIgbGluaz0iR3N0U2VnbWVudC5odG1sI0dTVC1TRUdNRU5ULUZMQUctVFJJQ0tNT0RFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFR01FTlRfRkxBR19TS0lQIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR1NULVNFR01FTlQtRkxBRy1TS0lQOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFR01FTlRfRkxBR19TRUdNRU5UIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR1NULVNFR01FTlQtRkxBRy1TRUdNRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFR01FTlRfRkxBR19UUklDS01PREVfS0VZX1VOSVRTIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR1NULVNFR01FTlQtRkxBRy1UUklDS01PREUtS0VZLVVOSVRTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFR01FTlRfRkxBR19UUklDS01PREVfTk9fQVVESU8iIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNHU1QtU0VHTUVOVC1GTEFHLVRSSUNLTU9ERS1OTy1BVURJTzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fVFlQRV9VTktOT1dOIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR1NULVNUUkVBTS1UWVBFLVVOS05PV046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1RZUEVfQVVESU8iIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHU1QtU1RSRUFNLVRZUEUtQVVESU86Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1RZUEVfVklERU8iIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHU1QtU1RSRUFNLVRZUEUtVklERU86Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU1RSRUFNX1RZUEVfQ09OVEFJTkVSIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR1NULVNUUkVBTS1UWVBFLUNPTlRBSU5FUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9TVFJFQU1fVFlQRV9URVhUIiBsaW5rPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR1NULVNUUkVBTS1UWVBFLVRFWFQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfVFlQRV9SRUFMVElNRSIgbGluaz0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHU1QtQ0xPQ0stVFlQRS1SRUFMVElNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DTE9DS19UWVBFX01PTk9UT05JQyIgbGluaz0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHU1QtQ0xPQ0stVFlQRS1NT05PVE9OSUM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQ0xPQ0tfVFlQRV9PVEhFUiIgbGluaz0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHU1QtQ0xPQ0stVFlQRS1PVEhFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfTUVSR0VfVU5ERUZJTkVEIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1VTkRFRklORUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1SRVBMQUNFLUFMTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfTUVSR0VfUkVQTEFDRSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtUkVQTEFDRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfTUVSR0VfQVBQRU5EIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1BUFBFTkQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX01FUkdFX1BSRVBFTkQiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLVBSRVBFTkQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX01FUkdFX0tFRVAiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLUtFRVA6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX01FUkdFX0tFRVBfQUxMIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NRVJHRS1LRUVQLUFMTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfTUVSR0VfQ09VTlQiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1FUkdFLUNPVU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBR19GTEFHX1VOREVGSU5FRCIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRkxBRy1VTkRFRklORUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX0ZMQUdfTUVUQSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRkxBRy1NRVRBOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBR19GTEFHX0VOQ09ERUQiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUZMQUctRU5DT0RFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQUdfRkxBR19ERUNPREVEIiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1GTEFHLURFQ09ERUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX0ZMQUdfQ09VTlQiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUZMQUctQ09VTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFHX1NDT1BFX1NUUkVBTSIgbGluaz0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0NPUEUtU1RSRUFNOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBR19TQ09QRV9HTE9CQUwiIGxpbms9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNDT1BFLUdMT0JBTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UQVNLX1NUQVJURUQiIGxpbms9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1TVEFSVEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RBU0tfU1RPUFBFRCIgbGluaz0iR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUT1BQRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVEFTS19QQVVTRUQiIGxpbms9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1QQVVTRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVE9DX1NDT1BFX0dMT0JBTCIgbGluaz0iR3N0VG9jLmh0bWwjR1NULVRPQy1TQ09QRS1HTE9CQUw6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVE9DX1NDT1BFX0NVUlJFTlQiIGxpbms9IkdzdFRvYy5odG1sI0dTVC1UT0MtU0NPUEUtQ1VSUkVOVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UT0NfRU5UUllfVFlQRV9BTkdMRSIgbGluaz0iR3N0VG9jLmh0bWwjR1NULVRPQy1FTlRSWS1UWVBFLUFOR0xFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RPQ19FTlRSWV9UWVBFX1ZFUlNJT04iIGxpbms9IkdzdFRvYy5odG1sI0dTVC1UT0MtRU5UUlktVFlQRS1WRVJTSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT04iIGxpbms9IkdzdFRvYy5odG1sI0dTVC1UT0MtRU5UUlktVFlQRS1FRElUSU9OOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RPQ19FTlRSWV9UWVBFX0lOVkFMSUQiIGxpbms9IkdzdFRvYy5odG1sI0dTVC1UT0MtRU5UUlktVFlQRS1JTlZBTElEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RPQ19FTlRSWV9UWVBFX1RJVExFIiBsaW5rPSJHc3RUb2MuaHRtbCNHU1QtVE9DLUVOVFJZLVRZUEUtVElUTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVE9DX0VOVFJZX1RZUEVfVFJBQ0siIGxpbms9IkdzdFRvYy5odG1sI0dTVC1UT0MtRU5UUlktVFlQRS1UUkFDSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSIiBsaW5rPSJHc3RUb2MuaHRtbCNHU1QtVE9DLUVOVFJZLVRZUEUtQ0hBUFRFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UT0NfTE9PUF9OT05FIiBsaW5rPSJHc3RUb2MuaHRtbCNHU1QtVE9DLUxPT1AtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UT0NfTE9PUF9GT1JXQVJEIiBsaW5rPSJHc3RUb2MuaHRtbCNHU1QtVE9DLUxPT1AtRk9SV0FSRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UT0NfTE9PUF9SRVZFUlNFIiBsaW5rPSJHc3RUb2MuaHRtbCNHU1QtVE9DLUxPT1AtUkVWRVJTRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UT0NfTE9PUF9QSU5HX1BPTkciIGxpbms9IkdzdFRvYy5odG1sI0dTVC1UT0MtTE9PUC1QSU5HLVBPTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVFlQRV9GSU5EX05PTkUiIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dTVC1UWVBFLUZJTkQtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UWVBFX0ZJTkRfTUlOSU1VTSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1NSU5JTVVNOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RZUEVfRklORF9QT1NTSUJMRSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1QT1NTSUJMRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UWVBFX0ZJTkRfTElLRUxZIiBsaW5rPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHU1QtVFlQRS1GSU5ELUxJS0VMWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UWVBFX0ZJTkRfTkVBUkxZX0NFUlRBSU4iIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dTVC1UWVBFLUZJTkQtTkVBUkxZLUNFUlRBSU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVFlQRV9GSU5EX01BWElNVU0iIGxpbms9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dTVC1UWVBFLUZJTkQtTUFYSU1VTTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9VUklfVU5LTk9XTiIgbGluaz0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVVOS05PV046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVVJJX1NJTksiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1TSU5LOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1VSSV9TUkMiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1TUkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVVJJX0VSUk9SX1VOU1VQUE9SVEVEX1BST1RPQ09MIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dTVC1VUkktRVJST1ItVU5TVVBQT1JURUQtUFJPVE9DT0w6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVVJJX0VSUk9SX0JBRF9VUkkiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1FUlJPUi1CQUQtVVJJOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1VSSV9FUlJPUl9CQURfU1RBVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1FUlJPUi1CQUQtU1RBVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVVJJX0VSUk9SX0JBRF9SRUZFUkVOQ0UiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1FUlJPUi1CQUQtUkVGRVJFTkNFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFQVJDSF9NT0RFX0VYQUNUIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtU0VBUkNILU1PREUtRVhBQ1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfU0VBUkNIX01PREVfQkVGT1JFIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtU0VBUkNILU1PREUtQkVGT1JFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1NFQVJDSF9NT0RFX0FGVEVSIiBsaW5rPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtU0VBUkNILU1PREUtQUZURVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEVWRUxfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRVZFTF9FUlJPUiIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtRVJST1I6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEVWRUxfV0FSTklORyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtV0FSTklORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRVZFTF9GSVhNRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtRklYTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEVWRUxfSU5GTyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtSU5GTzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRVZFTF9ERUJVRyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtREVCVUc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEVWRUxfTE9HIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1MT0c6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEVWRUxfVFJBQ0UiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLVRSQUNFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xFVkVMX01FTURVTVAiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLU1FTURVTVA6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEVWRUxfQ09VTlQiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxFVkVMLUNPVU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0ZHX0JMQUNLIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GRy1CTEFDSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19GR19SRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLVJFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19GR19HUkVFTiIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRkctR1JFRU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfRkdfWUVMTE9XIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GRy1ZRUxMT1c6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfRkdfQkxVRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRkctQkxVRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19GR19NQUdFTlRBIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GRy1NQUdFTlRBOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0ZHX0NZQU4iIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLUNZQU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfRkdfV0hJVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZHLVdISVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0JHX0JMQUNLIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CRy1CTEFDSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19CR19SRUQiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJHLVJFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19CR19HUkVFTiIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQkctR1JFRU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfQkdfWUVMTE9XIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CRy1ZRUxMT1c6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfQkdfQkxVRSIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQkctQkxVRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19CR19NQUdFTlRBIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CRy1NQUdFTlRBOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0JHX0NZQU4iIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJHLUNZQU46Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfQkdfV0hJVEUiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJHLVdISVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0JPTEQiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJPTEQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfVU5ERVJMSU5FIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1VTkRFUkxJTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfQ09MT1JfTU9ERV9PRkYiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNPTE9SLU1PREUtT0ZGOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0NPTE9SX01PREVfT04iIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNPTE9SLU1PREUtT046Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfQ09MT1JfTU9ERV9VTklYIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DT0xPUi1NT0RFLVVOSVg6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfR1JBUEhfU0hPV19NRURJQV9UWVBFIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1HUkFQSC1TSE9XLU1FRElBLVRZUEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfR1JBUEhfU0hPV19DQVBTX0RFVEFJTFMiIGxpbms9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUdSQVBILVNIT1ctQ0FQUy1ERVRBSUxTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFQlVHX0dSQVBIX1NIT1dfTk9OX0RFRkFVTFRfUEFSQU1TIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1HUkFQSC1TSE9XLU5PTi1ERUZBVUxULVBBUkFNUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19HUkFQSF9TSE9XX1NUQVRFUyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1TVEFURVM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfR1JBUEhfU0hPV19GVUxMX1BBUkFNUyIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1GVUxMLVBBUkFNUzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCIgbGluaz0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1BTEw6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVCVUdfR1JBUEhfU0hPV19WRVJCT1NFIiBsaW5rPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1HUkFQSC1TSE9XLVZFUkJPU0U6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX05PTkUiIGxpbms9IkdzdFRyYWNlclJlY29yZC5odG1sI0dTVC1UUkFDRVItVkFMVUUtRkxBR1MtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UUkFDRVJfVkFMVUVfRkxBR1NfT1BUSU9OQUwiIGxpbms9IkdzdFRyYWNlclJlY29yZC5odG1sI0dTVC1UUkFDRVItVkFMVUUtRkxBR1MtT1BUSU9OQUw6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX0FHR1JFR0FURUQiIGxpbms9IkdzdFRyYWNlclJlY29yZC5odG1sI0dTVC1UUkFDRVItVkFMVUUtRkxBR1MtQUdHUkVHQVRFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfUFJPQ0VTUyIgbGluaz0iR3N0VHJhY2VyUmVjb3JkLmh0bWwjR1NULVRSQUNFUi1WQUxVRS1TQ09QRS1QUk9DRVNTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9USFJFQUQiIGxpbms9IkdzdFRyYWNlclJlY29yZC5odG1sI0dTVC1UUkFDRVItVkFMVUUtU0NPUEUtVEhSRUFEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9FTEVNRU5UIiBsaW5rPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNHU1QtVFJBQ0VSLVZBTFVFLVNDT1BFLUVMRU1FTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCIgbGluaz0iR3N0VHJhY2VyUmVjb3JkLmh0bWwjR1NULVRSQUNFUi1WQUxVRS1TQ09QRS1QQUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0tbWFwIiBsaW5rPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0b3Itc3RydWN0Lm1lbS1tYXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEFsbG9jYXRvci1zdHJ1Y3QubWVtLXVubWFwIiBsaW5rPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0b3Itc3RydWN0Lm1lbS11bm1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0tY29weSIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0tY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0tc2hhcmUiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvci1zdHJ1Y3QubWVtLXNoYXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RBbGxvY2F0b3Itc3RydWN0Lm1lbS1pcy1zcGFuIiBsaW5rPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0b3Itc3RydWN0Lm1lbS1pcy1zcGFuIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RBbGxvY2F0b3Itc3RydWN0Lm1lbS1tYXAtZnVsbCIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yLXN0cnVjdC5tZW0tbWFwLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEFsbG9jYXRvci1zdHJ1Y3QubWVtLXVubWFwLWZ1bGwiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvci1zdHJ1Y3QubWVtLXVubWFwLWZ1bGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEFsbG9jYXRvckNsYXNzLm9iamVjdC1jbGFzcyIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yQ2xhc3Mub2JqZWN0LWNsYXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RBbGxvY2F0b3JDbGFzcy5hbGxvYyIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yQ2xhc3MuYWxsb2MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEFsbG9jYXRvckNsYXNzLmZyZWUiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvckNsYXNzLmZyZWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0LmZsYWdzIiBsaW5rPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zLXN0cnVjdC5mbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QWxsb2NhdGlvblBhcmFtcy1zdHJ1Y3QuYWxpZ24iIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0LmFsaWduIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RBbGxvY2F0aW9uUGFyYW1zLXN0cnVjdC5wcmVmaXgiIGxpbms9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0LnByZWZpeCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QWxsb2NhdGlvblBhcmFtcy1zdHJ1Y3QucGFkZGluZyIgbGluaz0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcy1zdHJ1Y3QucGFkZGluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmluLXN0cnVjdC5udW1jaGlsZHJlbiIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdC5udW1jaGlsZHJlbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmluLXN0cnVjdC5jaGlsZHJlbiIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdC5jaGlsZHJlbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmluLXN0cnVjdC5jaGlsZHJlbi1jb29raWUiIGxpbms9IkdzdEJpbi5odG1sI0dzdEJpbi1zdHJ1Y3QuY2hpbGRyZW4tY29va2llIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCaW4tc3RydWN0LmNoaWxkLWJ1cyIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdC5jaGlsZC1idXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJpbi1zdHJ1Y3QubWVzc2FnZXMiIGxpbms9IkdzdEJpbi5odG1sI0dzdEJpbi1zdHJ1Y3QubWVzc2FnZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJpbi1zdHJ1Y3QucG9sbGluZyIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdC5wb2xsaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCaW4tc3RydWN0LnN0YXRlLWRpcnR5IiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0LnN0YXRlLWRpcnR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCaW4tc3RydWN0LmNsb2NrLWRpcnR5IiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0LmNsb2NrLWRpcnR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCaW4tc3RydWN0LnByb3ZpZGVkLWNsb2NrIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0LnByb3ZpZGVkLWNsb2NrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCaW4tc3RydWN0LmNsb2NrLXByb3ZpZGVyIiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0LmNsb2NrLXByb3ZpZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCaW5DbGFzcy5hZGQtZWxlbWVudCIgbGluaz0iR3N0QmluLmh0bWwjR3N0QmluQ2xhc3MuYWRkLWVsZW1lbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJpbkNsYXNzLnJlbW92ZS1lbGVtZW50IiBsaW5rPSJHc3RCaW4uaHRtbCNHc3RCaW5DbGFzcy5yZW1vdmUtZWxlbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmluQ2xhc3MuaGFuZGxlLW1lc3NhZ2UiIGxpbms9IkdzdEJpbi5odG1sI0dzdEJpbkNsYXNzLmhhbmRsZS1tZXNzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCaW5DbGFzcy5kZWVwLWVsZW1lbnQtYWRkZWQiIGxpbms9IkdzdEJpbi5odG1sI0dzdEJpbkNsYXNzLmRlZXAtZWxlbWVudC1hZGRlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmluQ2xhc3MuZGVlcC1lbGVtZW50LXJlbW92ZWQiIGxpbms9IkdzdEJpbi5odG1sI0dzdEJpbkNsYXNzLmRlZXAtZWxlbWVudC1yZW1vdmVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXItc3RydWN0Lm1pbmktb2JqZWN0IiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Lm1pbmktb2JqZWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXItc3RydWN0LnBvb2wiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QucG9vbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QnVmZmVyLXN0cnVjdC5wdHMiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QucHRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXItc3RydWN0LmR0cyIgbGluaz0iR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdC5kdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ1ZmZlci1zdHJ1Y3QuZHVyYXRpb24iIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QuZHVyYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ1ZmZlci1zdHJ1Y3Qub2Zmc2V0IiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Lm9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QnVmZmVyLXN0cnVjdC5vZmZzZXQtZW5kIiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Lm9mZnNldC1lbmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBhcmVudEJ1ZmZlck1ldGEucGFyZW50IiBsaW5rPSJHc3RCdWZmZXIuaHRtbCNHc3RQYXJlbnRCdWZmZXJNZXRhLnBhcmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UGFyZW50QnVmZmVyTWV0YS5idWZmZXIiIGxpbms9IkdzdEJ1ZmZlci5odG1sI0dzdFBhcmVudEJ1ZmZlck1ldGEuYnVmZmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3Mub2JqZWN0LWNsYXNzIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbENsYXNzLm9iamVjdC1jbGFzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLmdldC1vcHRpb25zIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbENsYXNzLmdldC1vcHRpb25zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3Muc2V0LWNvbmZpZyIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xDbGFzcy5zZXQtY29uZmlnIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3Muc3RhcnQiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sQ2xhc3Muc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5zdG9wIiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbENsYXNzLnN0b3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5hY3F1aXJlLWJ1ZmZlciIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xDbGFzcy5hY3F1aXJlLWJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLmFsbG9jLWJ1ZmZlciIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xDbGFzcy5hbGxvYy1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5yZXNldC1idWZmZXIiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sQ2xhc3MucmVzZXQtYnVmZmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3MucmVsZWFzZS1idWZmZXIiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sQ2xhc3MucmVsZWFzZS1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ1ZmZlclBvb2xDbGFzcy5mcmVlLWJ1ZmZlciIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xDbGFzcy5mcmVlLWJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QnVmZmVyUG9vbENsYXNzLmZsdXNoLXN0YXJ0IiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbENsYXNzLmZsdXNoLXN0YXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXJQb29sQ2xhc3MuZmx1c2gtc3RvcCIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xDbGFzcy5mbHVzaC1zdG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcy5mb3JtYXQiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcy5mb3JtYXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zLnN0YXJ0IiBsaW5rPSJHc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMuc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zLnN0b3AiIGxpbms9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcy5zdG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcy5mbGFncyIgbGluaz0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zLmZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDYXBzLXN0cnVjdC5taW5pLW9iamVjdCIgbGluaz0iR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Lm1pbmktb2JqZWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTdGF0aWNDYXBzLmNhcHMiIGxpbms9IkdzdENhcHMuaHRtbCNHc3RTdGF0aWNDYXBzLmNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFN0YXRpY0NhcHMuc3RyaW5nIiBsaW5rPSJHc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2Fwcy5zdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENoaWxkUHJveHlJbnRlcmZhY2UucGFyZW50IiBsaW5rPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eUludGVyZmFjZS5wYXJlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENoaWxkUHJveHlJbnRlcmZhY2UuZ2V0LWNoaWxkLWJ5LW5hbWUiIGxpbms9IkdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5SW50ZXJmYWNlLmdldC1jaGlsZC1ieS1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDaGlsZFByb3h5SW50ZXJmYWNlLmdldC1jaGlsZC1ieS1pbmRleCIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHlJbnRlcmZhY2UuZ2V0LWNoaWxkLWJ5LWluZGV4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDaGlsZFByb3h5SW50ZXJmYWNlLmdldC1jaGlsZHJlbi1jb3VudCIgbGluaz0iR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHlJbnRlcmZhY2UuZ2V0LWNoaWxkcmVuLWNvdW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDbG9ja0NsYXNzLmNoYW5nZS1yZXNvbHV0aW9uIiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrQ2xhc3MuY2hhbmdlLXJlc29sdXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENsb2NrQ2xhc3MuZ2V0LXJlc29sdXRpb24iIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tDbGFzcy5nZXQtcmVzb2x1dGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Q2xvY2tDbGFzcy5nZXQtaW50ZXJuYWwtdGltZSIgbGluaz0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NsYXNzLmdldC1pbnRlcm5hbC10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDbG9ja0NsYXNzLndhaXQiIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tDbGFzcy53YWl0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDbG9ja0NsYXNzLndhaXQtYXN5bmMiIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tDbGFzcy53YWl0LWFzeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDbG9ja0NsYXNzLnVuc2NoZWR1bGUiIGxpbms9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tDbGFzcy51bnNjaGVkdWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDbG9ja0VudHJ5LnJlZmNvdW50IiBsaW5rPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRW50cnkucmVmY291bnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nLXN0cnVjdC5uYW1lIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sI0dzdENvbnRyb2xCaW5kaW5nLXN0cnVjdC5uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDb250cm9sQmluZGluZy1zdHJ1Y3QucHNwZWMiIGxpbms9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctc3RydWN0LnBzcGVjIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDb250cm9sQmluZGluZ0NsYXNzLnN5bmMtdmFsdWVzIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sI0dzdENvbnRyb2xCaW5kaW5nQ2xhc3Muc3luYy12YWx1ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbnRyb2xCaW5kaW5nQ2xhc3MuZ2V0LXZhbHVlIiBsaW5rPSJHc3RDb250cm9sQmluZGluZy5odG1sI0dzdENvbnRyb2xCaW5kaW5nQ2xhc3MuZ2V0LXZhbHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDb250cm9sQmluZGluZ0NsYXNzLmdldC12YWx1ZS1hcnJheSIgbGluaz0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZ0NsYXNzLmdldC12YWx1ZS1hcnJheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Q29udHJvbEJpbmRpbmdDbGFzcy5nZXQtZy12YWx1ZS1hcnJheSIgbGluaz0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZ0NsYXNzLmdldC1nLXZhbHVlLWFycmF5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDb250cm9sU291cmNlLXN0cnVjdC5nZXQtdmFsdWUiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdC5nZXQtdmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbnRyb2xTb3VyY2Utc3RydWN0LmdldC12YWx1ZS1hcnJheSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0LmdldC12YWx1ZS1hcnJheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VGltZWRWYWx1ZS50aW1lc3RhbXAiIGxpbms9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlLnRpbWVzdGFtcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VGltZWRWYWx1ZS52YWx1ZSIgbGluaz0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUudmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnN0YXRlLWxvY2siIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdC5zdGF0ZS1sb2NrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5zdGF0ZS1jb25kIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3Quc3RhdGUtY29uZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3Quc3RhdGUtY29va2llIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3Quc3RhdGUtY29va2llIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC50YXJnZXQtc3RhdGUiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdC50YXJnZXQtc3RhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LmN1cnJlbnQtc3RhdGUiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdC5jdXJyZW50LXN0YXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5uZXh0LXN0YXRlIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QubmV4dC1zdGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QucGVuZGluZy1zdGF0ZSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0LnBlbmRpbmctc3RhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0Lmxhc3QtcmV0dXJuIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QubGFzdC1yZXR1cm4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LmJ1cyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0LmJ1cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QuY2xvY2siIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdC5jbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QuYmFzZS10aW1lIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QuYmFzZS10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5zdGFydC10aW1lIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3Quc3RhcnQtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3QubnVtcGFkcyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Lm51bXBhZHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnBhZHMiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdC5wYWRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50LXN0cnVjdC5udW1zcmNwYWRzIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QubnVtc3JjcGFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudC1zdHJ1Y3Quc3JjcGFkcyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0LnNyY3BhZHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0Lm51bXNpbmtwYWRzIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QubnVtc2lua3BhZHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnNpbmtwYWRzIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3Quc2lua3BhZHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LnBhZHMtY29va2llIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QucGFkcy1jb29raWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnQtc3RydWN0LmNvbnRleHRzIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QuY29udGV4dHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5tZXRhZGF0YSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcy5tZXRhZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudENsYXNzLmVsZW1lbnRmYWN0b3J5IiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzLmVsZW1lbnRmYWN0b3J5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50Q2xhc3MucGFkdGVtcGxhdGVzIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzLnBhZHRlbXBsYXRlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudENsYXNzLm51bXBhZHRlbXBsYXRlcyIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcy5udW1wYWR0ZW1wbGF0ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5wYWQtdGVtcGwtY29va2llIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzLnBhZC10ZW1wbC1jb29raWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5yZXF1ZXN0LW5ldy1wYWQiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MucmVxdWVzdC1uZXctcGFkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50Q2xhc3MucmVsZWFzZS1wYWQiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MucmVsZWFzZS1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5nZXQtc3RhdGUiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MuZ2V0LXN0YXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50Q2xhc3Muc2V0LXN0YXRlIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzLnNldC1zdGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RWxlbWVudENsYXNzLmNoYW5nZS1zdGF0ZSIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcy5jaGFuZ2Utc3RhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5zdGF0ZS1jaGFuZ2VkIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzLnN0YXRlLWNoYW5nZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5zZXQtYnVzIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzLnNldC1idXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5wcm92aWRlLWNsb2NrIiBsaW5rPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzLnByb3ZpZGUtY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5zZXQtY2xvY2siIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3Muc2V0LWNsb2NrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50Q2xhc3Muc2VuZC1ldmVudCIgbGluaz0iR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnRDbGFzcy5zZW5kLWV2ZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50Q2xhc3MucXVlcnkiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MucXVlcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEVsZW1lbnRDbGFzcy5wb3N0LW1lc3NhZ2UiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3MucG9zdC1tZXNzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFbGVtZW50Q2xhc3Muc2V0LWNvbnRleHQiIGxpbms9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50Q2xhc3Muc2V0LWNvbnRleHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEV2ZW50LXN0cnVjdC5taW5pLW9iamVjdCIgbGluaz0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QubWluaS1vYmplY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEV2ZW50LXN0cnVjdC50eXBlIiBsaW5rPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdC50eXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RFdmVudC1zdHJ1Y3QudGltZXN0YW1wIiBsaW5rPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdC50aW1lc3RhbXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEV2ZW50LXN0cnVjdC5zZXFudW0iIGxpbms9IkdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0LnNlcW51bSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Rm9ybWF0RGVmaW5pdGlvbi52YWx1ZSIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdERlZmluaXRpb24udmFsdWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEZvcm1hdERlZmluaXRpb24ubmljayIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdERlZmluaXRpb24ubmljayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Rm9ybWF0RGVmaW5pdGlvbi5kZXNjcmlwdGlvbiIgbGluaz0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdERlZmluaXRpb24uZGVzY3JpcHRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEZvcm1hdERlZmluaXRpb24ucXVhcmsiIGxpbms9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXREZWZpbml0aW9uLnF1YXJrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RNZW1vcnktc3RydWN0Lm1pbmktb2JqZWN0IiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnktc3RydWN0Lm1pbmktb2JqZWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RNZW1vcnktc3RydWN0LmFsbG9jYXRvciIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5LXN0cnVjdC5hbGxvY2F0b3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1lbW9yeS1zdHJ1Y3QucGFyZW50IiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnktc3RydWN0LnBhcmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWVtb3J5LXN0cnVjdC5tYXhzaXplIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnktc3RydWN0Lm1heHNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1lbW9yeS1zdHJ1Y3QuYWxpZ24iIGxpbms9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeS1zdHJ1Y3QuYWxpZ24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1lbW9yeS1zdHJ1Y3Qub2Zmc2V0IiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnktc3RydWN0Lm9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWVtb3J5LXN0cnVjdC5zaXplIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnktc3RydWN0LnNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1hcEluZm8ubWVtb3J5IiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvLm1lbW9yeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWFwSW5mby5mbGFncyIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwSW5mby5mbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWFwSW5mby5kYXRhIiBsaW5rPSJHc3RNZW1vcnkuaHRtbCNHc3RNYXBJbmZvLmRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1hcEluZm8uc2l6ZSIgbGluaz0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwSW5mby5zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RNYXBJbmZvLm1heHNpemUiIGxpbms9IkdzdE1lbW9yeS5odG1sI0dzdE1hcEluZm8ubWF4c2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWVzc2FnZS1zdHJ1Y3QubWluaS1vYmplY3QiIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlLXN0cnVjdC5taW5pLW9iamVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWVzc2FnZS1zdHJ1Y3QudHlwZSIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2Utc3RydWN0LnR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1lc3NhZ2Utc3RydWN0LnRpbWVzdGFtcCIgbGluaz0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2Utc3RydWN0LnRpbWVzdGFtcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWVzc2FnZS1zdHJ1Y3Quc3JjIiBsaW5rPSJHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZS1zdHJ1Y3Quc3JjIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RNZXNzYWdlLXN0cnVjdC5zZXFudW0iIGxpbms9IkdzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlLXN0cnVjdC5zZXFudW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1ldGEuZmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YS5mbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWV0YS5pbmZvIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEuaW5mbyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWV0YUluZm8uYXBpIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvLmFwaSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWV0YUluZm8udHlwZSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mby50eXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RNZXRhSW5mby5zaXplIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvLnNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1ldGFJbmZvLmluaXQtZnVuYyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mby5pbml0LWZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1ldGFJbmZvLmZyZWUtZnVuYyIgbGluaz0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mby5mcmVlLWZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1ldGFJbmZvLnRyYW5zZm9ybS1mdW5jIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvLnRyYW5zZm9ybS1mdW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RNZXRhVHJhbnNmb3JtQ29weS5yZWdpb24iIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YVRyYW5zZm9ybUNvcHkucmVnaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RNZXRhVHJhbnNmb3JtQ29weS5vZmZzZXQiIGxpbms9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YVRyYW5zZm9ybUNvcHkub2Zmc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RNZXRhVHJhbnNmb3JtQ29weS5zaXplIiBsaW5rPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1Db3B5LnNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1pbmlPYmplY3QudHlwZSIgbGluaz0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0LnR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1pbmlPYmplY3QucmVmY291bnQiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdC5yZWZjb3VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWluaU9iamVjdC5sb2Nrc3RhdGUiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdC5sb2Nrc3RhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE1pbmlPYmplY3QuZmxhZ3MiIGxpbms9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdC5mbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWluaU9iamVjdC5jb3B5IiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QuY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWluaU9iamVjdC5kaXNwb3NlIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QuZGlzcG9zZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TWluaU9iamVjdC5mcmVlIiBsaW5rPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QuZnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0T2JqZWN0LXN0cnVjdC5sb2NrIiBsaW5rPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0LmxvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE9iamVjdC1zdHJ1Y3QubmFtZSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdC5uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RPYmplY3Qtc3RydWN0LnBhcmVudCIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdC5wYXJlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE9iamVjdC1zdHJ1Y3QuZmxhZ3MiIGxpbms9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QuZmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE9iamVjdENsYXNzLnBhdGgtc3RyaW5nLXNlcGFyYXRvciIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0Q2xhc3MucGF0aC1zdHJpbmctc2VwYXJhdG9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RPYmplY3RDbGFzcy5kZWVwLW5vdGlmeSIgbGluaz0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0Q2xhc3MuZGVlcC1ub3RpZnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBhZC1zdHJ1Y3QuZWxlbWVudC1wcml2YXRlIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0LmVsZW1lbnQtcHJpdmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UGFkLXN0cnVjdC5wYWR0ZW1wbGF0ZSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdC5wYWR0ZW1wbGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UGFkLXN0cnVjdC5kaXJlY3Rpb24iIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QuZGlyZWN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQYWRQcm9iZUluZm8udHlwZSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVJbmZvLnR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBhZFByb2JlSW5mby5pZCIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVJbmZvLmlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQYWRQcm9iZUluZm8uZGF0YSIgbGluaz0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVJbmZvLmRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBhZFByb2JlSW5mby5vZmZzZXQiIGxpbms9IkdzdFBhZC5odG1sI0dzdFBhZFByb2JlSW5mby5vZmZzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBhZFByb2JlSW5mby5zaXplIiBsaW5rPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUluZm8uc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0U3RhdGljUGFkVGVtcGxhdGUubmFtZS10ZW1wbGF0ZSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZS5uYW1lLXRlbXBsYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTdGF0aWNQYWRUZW1wbGF0ZS5kaXJlY3Rpb24iIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUuZGlyZWN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTdGF0aWNQYWRUZW1wbGF0ZS5wcmVzZW5jZSIgbGluaz0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZS5wcmVzZW5jZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0U3RhdGljUGFkVGVtcGxhdGUuc3RhdGljLWNhcHMiIGxpbms9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUuc3RhdGljLWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBhcmFtU3BlY0ZyYWN0aW9uLm1pbi1udW0iIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHc3RQYXJhbVNwZWNGcmFjdGlvbi5taW4tbnVtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5taW4tZGVuIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR3N0UGFyYW1TcGVjRnJhY3Rpb24ubWluLWRlbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UGFyYW1TcGVjRnJhY3Rpb24ubWF4LW51bSIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dzdFBhcmFtU3BlY0ZyYWN0aW9uLm1heC1udW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBhcmFtU3BlY0ZyYWN0aW9uLm1heC1kZW4iIGxpbms9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHc3RQYXJhbVNwZWNGcmFjdGlvbi5tYXgtZGVuIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5kZWYtbnVtIiBsaW5rPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR3N0UGFyYW1TcGVjRnJhY3Rpb24uZGVmLW51bSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UGFyYW1TcGVjRnJhY3Rpb24uZGVmLWRlbiIgbGluaz0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dzdFBhcmFtU3BlY0ZyYWN0aW9uLmRlZi1kZW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBpcGVsaW5lLXN0cnVjdC5maXhlZC1jbG9jayIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS1zdHJ1Y3QuZml4ZWQtY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBpcGVsaW5lLXN0cnVjdC5zdHJlYW0tdGltZSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS1zdHJ1Y3Quc3RyZWFtLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBpcGVsaW5lLXN0cnVjdC5kZWxheSIgbGluaz0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS1zdHJ1Y3QuZGVsYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBsdWdpbkRlc2MubWFqb3ItdmVyc2lvbiIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVzYy5tYWpvci12ZXJzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQbHVnaW5EZXNjLm1pbm9yLXZlcnNpb24iIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MubWlub3ItdmVyc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UGx1Z2luRGVzYy5uYW1lIiBsaW5rPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5EZXNjLm5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBsdWdpbkRlc2MuZGVzY3JpcHRpb24iIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MuZGVzY3JpcHRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBsdWdpbkRlc2MucGx1Z2luLWluaXQiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MucGx1Z2luLWluaXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFBsdWdpbkRlc2MudmVyc2lvbiIgbGluaz0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRGVzYy52ZXJzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQbHVnaW5EZXNjLmxpY2Vuc2UiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MubGljZW5zZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UGx1Z2luRGVzYy5zb3VyY2UiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2Muc291cmNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQbHVnaW5EZXNjLnBhY2thZ2UiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MucGFja2FnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UGx1Z2luRGVzYy5vcmlnaW4iIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2Mub3JpZ2luIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQbHVnaW5EZXNjLnJlbGVhc2UtZGF0ZXRpbWUiIGxpbms9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MucmVsZWFzZS1kYXRldGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UG9sbEZELmZkIiBsaW5rPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRC5mZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLnBhcmVudCIgbGluaz0iR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0SW50ZXJmYWNlLnBhcmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLmdldC1wcmVzZXQtbmFtZXMiIGxpbms9IkdzdFByZXNldC5odG1sI0dzdFByZXNldEludGVyZmFjZS5nZXQtcHJlc2V0LW5hbWVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UuZ2V0LXByb3BlcnR5LW5hbWVzIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXRJbnRlcmZhY2UuZ2V0LXByb3BlcnR5LW5hbWVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2UubG9hZC1wcmVzZXQiIGxpbms9IkdzdFByZXNldC5odG1sI0dzdFByZXNldEludGVyZmFjZS5sb2FkLXByZXNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLnNhdmUtcHJlc2V0IiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXRJbnRlcmZhY2Uuc2F2ZS1wcmVzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFByZXNldEludGVyZmFjZS5yZW5hbWUtcHJlc2V0IiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXRJbnRlcmZhY2UucmVuYW1lLXByZXNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLmRlbGV0ZS1wcmVzZXQiIGxpbms9IkdzdFByZXNldC5odG1sI0dzdFByZXNldEludGVyZmFjZS5kZWxldGUtcHJlc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RQcmVzZXRJbnRlcmZhY2Uuc2V0LW1ldGEiIGxpbms9IkdzdFByZXNldC5odG1sI0dzdFByZXNldEludGVyZmFjZS5zZXQtbWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UHJlc2V0SW50ZXJmYWNlLmdldC1tZXRhIiBsaW5rPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXRJbnRlcmZhY2UuZ2V0LW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFByb3RlY3Rpb25NZXRhLm1ldGEiIGxpbms9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI0dzdFByb3RlY3Rpb25NZXRhLm1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFByb3RlY3Rpb25NZXRhLmluZm8iIGxpbms9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI0dzdFByb3RlY3Rpb25NZXRhLmluZm8iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFF1ZXJ5LXN0cnVjdC5taW5pLW9iamVjdCIgbGluaz0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeS1zdHJ1Y3QubWluaS1vYmplY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFF1ZXJ5LXN0cnVjdC50eXBlIiBsaW5rPSJHc3RRdWVyeS5odG1sI0dzdFF1ZXJ5LXN0cnVjdC50eXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5mbGFncyIgbGluaz0iR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQtc3RydWN0LmZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5yYXRlIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QucmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3QuYXBwbGllZC1yYXRlIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QuYXBwbGllZC1yYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5mb3JtYXQiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50LXN0cnVjdC5mb3JtYXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFNlZ21lbnQtc3RydWN0LmJhc2UiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50LXN0cnVjdC5iYXNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC5vZmZzZXQiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50LXN0cnVjdC5vZmZzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFNlZ21lbnQtc3RydWN0LnN0YXJ0IiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3Quc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFNlZ21lbnQtc3RydWN0LnN0b3AiIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50LXN0cnVjdC5zdG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTZWdtZW50LXN0cnVjdC50aW1lIiBsaW5rPSJHc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QudGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3QucG9zaXRpb24iIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50LXN0cnVjdC5wb3NpdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0U2VnbWVudC1zdHJ1Y3QuZHVyYXRpb24iIGxpbms9IkdzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50LXN0cnVjdC5kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0U3RyZWFtLm9iamVjdCIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbS5vYmplY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFN0cmVhbS5zdHJlYW0taWQiIGxpbms9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0uc3RyZWFtLWlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3Muc3RyZWFtLW5vdGlmeSIgbGluaz0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3Muc3RyZWFtLW5vdGlmeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0U3RydWN0dXJlLXN0cnVjdC50eXBlIiBsaW5rPSJHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0LnR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFRhZ0xpc3Qtc3RydWN0Lm1pbmktb2JqZWN0IiBsaW5rPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdC1zdHJ1Y3QubWluaS1vYmplY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFRhc2stc3RydWN0LnN0YXRlIiBsaW5rPSJHc3RUYXNrLmh0bWwjR3N0VGFzay1zdHJ1Y3Quc3RhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFRhc2stc3RydWN0LmNvbmQiIGxpbms9IkdzdFRhc2suaHRtbCNHc3RUYXNrLXN0cnVjdC5jb25kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RUYXNrLXN0cnVjdC5sb2NrIiBsaW5rPSJHc3RUYXNrLmh0bWwjR3N0VGFzay1zdHJ1Y3QubG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VGFzay1zdHJ1Y3QuZnVuYyIgbGluaz0iR3N0VGFzay5odG1sI0dzdFRhc2stc3RydWN0LmZ1bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFRhc2stc3RydWN0LnVzZXItZGF0YSIgbGluaz0iR3N0VGFzay5odG1sI0dzdFRhc2stc3RydWN0LnVzZXItZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VGFzay1zdHJ1Y3Qubm90aWZ5IiBsaW5rPSJHc3RUYXNrLmh0bWwjR3N0VGFzay1zdHJ1Y3Qubm90aWZ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RUYXNrLXN0cnVjdC5ydW5uaW5nIiBsaW5rPSJHc3RUYXNrLmh0bWwjR3N0VGFzay1zdHJ1Y3QucnVubmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VGFza1Bvb2xDbGFzcy5wcmVwYXJlIiBsaW5rPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sQ2xhc3MucHJlcGFyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VGFza1Bvb2xDbGFzcy5jbGVhbnVwIiBsaW5rPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sQ2xhc3MuY2xlYW51cCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VGFza1Bvb2xDbGFzcy5wdXNoIiBsaW5rPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sQ2xhc3MucHVzaCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VGFza1Bvb2xDbGFzcy5qb2luIiBsaW5rPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sQ2xhc3Muam9pbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VHlwZUZpbmQucGVlayIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQucGVlayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VHlwZUZpbmQuc3VnZ2VzdCIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQuc3VnZ2VzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VHlwZUZpbmQuZGF0YSIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQuZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VHlwZUZpbmQuZ2V0LWxlbmd0aCIgbGluaz0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQuZ2V0LWxlbmd0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VVJJSGFuZGxlckludGVyZmFjZS5wYXJlbnQiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlckludGVyZmFjZS5wYXJlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFVSSUhhbmRsZXJJbnRlcmZhY2UuZ2V0LXR5cGUiIGxpbms9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlckludGVyZmFjZS5nZXQtdHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VVJJSGFuZGxlckludGVyZmFjZS5nZXQtcHJvdG9jb2xzIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXJJbnRlcmZhY2UuZ2V0LXByb3RvY29scyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VVJJSGFuZGxlckludGVyZmFjZS5nZXQtdXJpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXJJbnRlcmZhY2UuZ2V0LXVyaSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VVJJSGFuZGxlckludGVyZmFjZS5zZXQtdXJpIiBsaW5rPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXJJbnRlcmZhY2Uuc2V0LXVyaSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0VmFsdWVUYWJsZS50eXBlIiBsaW5rPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVRhYmxlLnR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFZhbHVlVGFibGUuY29tcGFyZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVUYWJsZS5jb21wYXJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RWYWx1ZVRhYmxlLnNlcmlhbGl6ZSIgbGluaz0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVUYWJsZS5zZXJpYWxpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFZhbHVlVGFibGUuZGVzZXJpYWxpemUiIGxpbms9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlVGFibGUuZGVzZXJpYWxpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdERldmljZU1vbml0b3IucGFyZW50IiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3IucGFyZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3REZXZpY2UucGFyZW50IiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlLnBhcmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RGV2aWNlQ2xhc3MuY3JlYXRlLWVsZW1lbnQiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2VDbGFzcy5jcmVhdGUtZWxlbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RGV2aWNlQ2xhc3MucmVjb25maWd1cmUtZWxlbWVudCIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZUNsYXNzLnJlY29uZmlndXJlLWVsZW1lbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdERldmljZVByb3ZpZGVyLnBhcmVudCIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIucGFyZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3REZXZpY2VQcm92aWRlci5kZXZpY2VzIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlci5kZXZpY2VzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3REZXZpY2VQcm92aWRlckNsYXNzLmZhY3RvcnkiIGxpbms9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyQ2xhc3MuZmFjdG9yeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJDbGFzcy5wcm9iZSIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXJDbGFzcy5wcm9iZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJDbGFzcy5zdGFydCIgbGluaz0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXJDbGFzcy5zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJDbGFzcy5zdG9wIiBsaW5rPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlckNsYXNzLnN0b3AiLz4KLSAgPC9mdW5jdGlvbnM+Ci08L2Jvb2s+CmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3QuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGZmYmZhLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3Q6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3QudG9wX29mX3BhZ2UiPjwvYT5Hc3Q8L3NwYW4+PC9oMj4KLTxwPkdzdCDigJQgTWVkaWEgbGlicmFyeSBzdXBwb3J0aW5nIGFyYml0cmFyeSBmb3JtYXRzIGFuZCBmaWx0ZXIKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0LmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0wqAoKSI+Z3N0X2luaXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdC1jaGVjayIgdGl0bGU9ImdzdF9pbml0X2NoZWNrwqAoKSI+Z3N0X2luaXRfY2hlY2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Db21tYW5kbGluZS1vcHRpb24tcGFyc2VyLmh0bWwjR09wdGlvbkdyb3VwIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdPcHRpb25Hcm91cDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtZ2V0LW9wdGlvbi1ncm91cCIgdGl0bGU9ImdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXDCoCgpIj5nc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWlzLWluaXRpYWxpemVkIiB0aXRsZT0iZ3N0X2lzX2luaXRpYWxpemVkwqAoKSI+Z3N0X2lzX2luaXRpYWxpemVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1kZWluaXQiIHRpdGxlPSJnc3RfZGVpbml0wqAoKSI+Z3N0X2RlaW5pdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdmVyc2lvbiIgdGl0bGU9ImdzdF92ZXJzaW9uwqAoKSI+Z3N0X3ZlcnNpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdmVyc2lvbi1zdHJpbmciIHRpdGxlPSJnc3RfdmVyc2lvbl9zdHJpbmfCoCgpIj5nc3RfdmVyc2lvbl9zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3Qtc2VndHJhcC1pcy1lbmFibGVkIiB0aXRsZT0iZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZMKgKCkiPmdzdF9zZWd0cmFwX2lzX2VuYWJsZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtc2V0LWVuYWJsZWQiIHRpdGxlPSJnc3Rfc2VndHJhcF9zZXRfZW5hYmxlZMKgKCkiPmdzdF9zZWd0cmFwX3NldF9lbmFibGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZvcmstaXMtZW5hYmxlZCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9mb3JrX2lzX2VuYWJsZWTCoCgpIj5nc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1yZWdpc3RyeS1mb3JrLXNldC1lbmFibGVkIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWTCoCgpIj5nc3RfcmVnaXN0cnlfZm9ya19zZXRfZW5hYmxlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC11cGRhdGUtcmVnaXN0cnkiIHRpdGxlPSJnc3RfdXBkYXRlX3JlZ2lzdHJ5wqAoKSI+Z3N0X3VwZGF0ZV9yZWdpc3RyeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3QuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5HU3RyZWFtZXIgaXMgYSBmcmFtZXdvcmsgZm9yIGNvbnN0cnVjdGluZyBncmFwaHMgb2YgdmFyaW91cyBmaWx0ZXJzCi0odGVybWVkIGVsZW1lbnRzIGhlcmUpIHRoYXQgd2lsbCBoYW5kbGUgc3RyZWFtaW5nIG1lZGlhLiAgQW55IGRpc2NyZXRlCi0ocGFja2V0aXphYmxlKSBtZWRpYSB0eXBlIGlzIHN1cHBvcnRlZCwgd2l0aCBwcm92aXNpb25zIGZvciBhdXRvbWF0aWNhbGx5Ci1kZXRlcm1pbmluZyBzb3VyY2UgdHlwZS4gIEZvcm1hdHRpbmcvZnJhbWluZyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB3aXRoCi1hIHBvd2VyZnVsIG5lZ290aWF0aW9uIGZyYW1ld29yay4gIFBsdWdpbnMgYXJlIGhlYXZpbHkgdXNlZCB0byBwcm92aWRlIGZvcgotYWxsIGVsZW1lbnRzLCBhbGxvd2luZyBvbmUgdG8gY29uc3RydWN0IHBsdWdpbnMgb3V0c2lkZSBvZiB0aGUgR1NUCi1saWJyYXJ5LCBldmVuIHJlbGVhc2VkIGJpbmFyeS1vbmx5IGlmIGxpY2Vuc2UgcmVxdWlyZSAocGxlYXNlIGRvbid0KS4KLUdTdHJlYW1lciBjb3ZlcnMgYSB3aWRlIHJhbmdlIG9mIHVzZSBjYXNlcyBpbmNsdWRpbmc6IHBsYXliYWNrLCByZWNvcmRpbmcsCi1lZGl0aW5nLCBzZXJ2aW5nIHN0cmVhbXMsIHZvaWNlIG92ZXIgaXAgYW5kIHZpZGVvIGNhbGxzLjwvcD4KLTxwPlRoZSA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPkdTdHJlYW1lcjwvc3Bhbj4gbGlicmFyeSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdCgpPC9jb2RlPjwvYT4gYmVmb3JlIGl0IGNhbiBiZSB1c2VkLiBZb3Ugc2hvdWxkIHBhc3MgcG9pbnRlcnMgdG8gdGhlIG1haW4gYXJnYwotYW5kIGFyZ3YgdmFyaWFibGVzIHNvIHRoYXQgR1N0cmVhbWVyIGNhbiBwcm9jZXNzIGl0cyBvd24gY29tbWFuZCBsaW5lCi1vcHRpb25zLCBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUuPC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08YSBuYW1lPSJpZC0xLjMuMy41LjQiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDEuwqBJbml0aWFsaXppbmcgdGhlIGdzdHJlYW1lciBsaWJyYXJ5PC9iPjwvcD4KLTxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTc8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm1haW48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+IGFyZ2M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmNoYXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmFyZ3Y8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+W10pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLyBpbml0aWFsaXplIHRoZSBHU3RyZWFtZXIgbGlicmFyeTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQiPmdzdF9pbml0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPigmYW1wOzwvc3Bhbj5hcmdjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgJmFtcDs8L3NwYW4+YXJndjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxwPkl0J3MgYWxsb3dlZCB0byBwYXNzIHR3byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gcG9pbnRlcnMgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdCgpPC9jb2RlPjwvYT4gaW4gY2FzZSB5b3UgZG9uJ3Qgd2FudAotdG8gcGFzcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3MgdG8gR1N0cmVhbWVyLjwvcD4KLTxwPllvdSBjYW4gYWxzbyB1c2UgR09wdGlvbiB0byBpbml0aWFsaXplIHlvdXIgb3duIHBhcmFtZXRlcnMgYXMgc2hvd24gaW4KLXRoZSBuZXh0IGNvZGUgZnJhZ21lbnQ6PC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08YSBuYW1lPSJpZC0xLjMuMy41LjciPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDIuwqBJbml0aWFsaXppbmcgb3duIHBhcmFtZXRlcnMgd2hlbiBpbml0aWFsaXppbmcgZ3N0cmVhbWVyPC9iPjwvcD4KLTxkaXYgY2xhc3M9ImV4YW1wbGUtY29udGVudHMiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTcKLTgKLTkKLTEwCi0xMQotMTIKLTEzCi0xNAotMTUKLTE2Ci0xNwotMTgKLTE5Ci0yMDwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnN0YXRpYzwvc3Bhbj4gZ2Jvb2xlYW4gc3RhdHMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IEZBTFNFPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmludDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+bWFpbjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmludDwvc3Bhbj4gYXJnYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+Y2hhcjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+YXJndjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bXSk8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSBHT3B0aW9uRW50cnkgb3B0aW9uczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bXSA9IHs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij57PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3RhZ3MmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPid0Jzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR19PUFRJT05fQVJHX05PTkU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj50YWdzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUkxOE4uaHRtbCNOLTpDQVBTIj5OXzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7T3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59LDwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+TlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59Ozwvc3Bhbj4KLSBjdHggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQ29tbWFuZGxpbmUtb3B0aW9uLXBhcnNlci5odG1sI2ctb3B0aW9uLWNvbnRleHQtbmV3Ij5nX29wdGlvbl9jb250ZXh0X25ldzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1tBRERJVElPTkFMIEFSR1VNRU5UU10mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQ29tbWFuZGxpbmUtb3B0aW9uLXBhcnNlci5odG1sI2ctb3B0aW9uLWNvbnRleHQtYWRkLW1haW4tZW50cmllcyI+Z19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y3R4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IG9wdGlvbnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR0VUVEVYVF9QQUNLQUdFPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQ29tbWFuZGxpbmUtb3B0aW9uLXBhcnNlci5odG1sI2ctb3B0aW9uLWNvbnRleHQtYWRkLWdyb3VwIj5nX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmN0eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdC1nZXQtb3B0aW9uLWdyb3VwIj5nc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPigpKTs8L3NwYW4+Ci0gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCE8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Db21tYW5kbGluZS1vcHRpb24tcGFyc2VyLmh0bWwjZy1vcHRpb24tY29udGV4dC1wYXJzZSI+Z19vcHRpb25fY29udGV4dF9wYXJzZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmN0eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPmFyZ2M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5hcmd2PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgJmFtcDs8L3NwYW4+ZXJyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpIHs8L3NwYW4+Ci0gICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVdhcm5pbmdzLWFuZC1Bc3NlcnRpb25zLmh0bWwjZy1wcmludCI+Z19wcmludDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0Vycm9yIGluaXRpYWxpemluZzogJXM8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBlc2MiPlxuPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1TVFItTlVMTDpDQVBTIj5HU1RfU1RSX05VTEw8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lcnI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LSZndDs8L3NwYW4+bWVzc2FnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTs8L3NwYW4+Ci0gICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmV4aXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQ29tbWFuZGxpbmUtb3B0aW9uLXBhcnNlci5odG1sI2ctb3B0aW9uLWNvbnRleHQtZnJlZSI+Z19vcHRpb25fY29udGV4dF9mcmVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y3R4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxwPlVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC12ZXJzaW9uIiB0aXRsZT0iZ3N0X3ZlcnNpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92ZXJzaW9uKCk8L2NvZGU+PC9hPiB0byBxdWVyeSB0aGUgbGlicmFyeSB2ZXJzaW9uIGF0IHJ1bnRpbWUgb3IgdXNlIHRoZQotR1NUX1ZFUlNJT05fKiBtYWNyb3MgdG8gZmluZCB0aGUgdmVyc2lvbiBhdCBjb21waWxlIHRpbWUuIE9wdGlvbmFsbHkKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXZlcnNpb24tc3RyaW5nIiB0aXRsZT0iZ3N0X3ZlcnNpb25fc3RyaW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmVyc2lvbl9zdHJpbmcoKTwvY29kZT48L2E+IHJldHVybnMgYSBwcmludGFibGUgc3RyaW5nLjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1kZWluaXQiIHRpdGxlPSJnc3RfZGVpbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGVpbml0KCk8L2NvZGU+PC9hPiBjYWxsIGlzIHVzZWQgdG8gY2xlYW4gdXAgYWxsIGludGVybmFsIHJlc291cmNlcyB1c2VkCi1ieSA8c3BhbiBjbGFzcz0iYXBwbGljYXRpb24iPkdTdHJlYW1lcjwvc3Bhbj4uIEl0IGlzIG1vc3RseSB1c2VkIGluIHVuaXQgdGVzdHMgCi10byBjaGVjayBmb3IgbGVha3MuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaW5pdCI+PC9hPjxoMz5nc3RfaW5pdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9pbml0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmludDwvc3Bhbj4gKmFyZ2M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqKmFyZ3ZbXTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Jbml0aWFsaXplcyB0aGUgR1N0cmVhbWVyIGxpYnJhcnksIHNldHRpbmcgdXAgaW50ZXJuYWwgcGF0aCBsaXN0cywKLXJlZ2lzdGVyaW5nIGJ1aWx0LWluIGVsZW1lbnRzLCBhbmQgbG9hZGluZyBzdGFuZGFyZCBwbHVnaW5zLjwvcD4KLTxwPlVubGVzcyB0aGUgcGx1Z2luIHJlZ2lzdHJ5IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZSwgdGhlIHJlZ2lzdHJ5IHdpbGwgYmUKLWxvYWRlZC4gQnkgZGVmYXVsdCB0aGlzIHdpbGwgYWxzbyBjaGVjayBpZiB0aGUgcmVnaXN0cnkgY2FjaGUgbmVlZHMgdG8gYmUKLXVwZGF0ZWQgYW5kIHJlc2NhbiBhbGwgcGx1Z2lucyBpZiBuZWVkZWQuIFNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC11cGRhdGUtcmVnaXN0cnkiIHRpdGxlPSJnc3RfdXBkYXRlX3JlZ2lzdHJ5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXBkYXRlX3JlZ2lzdHJ5KCk8L2NvZGU+PC9hPiBmb3IKLWRldGFpbHMgYW5kIHNlY3Rpb248L3A+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXJ1bm5pbmcuaHRtbCIgdGl0bGU9IlJ1bm5pbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyI+UnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC9hPjxwPmZvciBob3cgdG8gZGlzYWJsZSBhdXRvbWF0aWMgcmVnaXN0cnkgdXBkYXRlcy48L3A+Ci08ZGl2IGNsYXNzPSJub3RlIj48cD4KLVRoaXMgZnVuY3Rpb24gd2lsbCB0ZXJtaW5hdGUgeW91ciBwcm9ncmFtIGlmIGl0IHdhcyB1bmFibGUgdG8gaW5pdGlhbGl6ZQotR1N0cmVhbWVyIGZvciBzb21lIHJlYXNvbi4gIElmIHlvdSB3YW50IHlvdXIgcHJvZ3JhbSB0byBmYWxsIGJhY2ssCi11c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdC1jaGVjayIgdGl0bGU9ImdzdF9pbml0X2NoZWNrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdF9jaGVjaygpPC9jb2RlPjwvYT4gaW5zdGVhZC4KLTwvcD48L2Rpdj4KLTxwPldBUk5JTkc6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgY29ycmVzcG9uZGluZwotZnVuY3Rpb25zIGluIG90aGVyIGdsaWItc3R5bGUgbGlicmFyaWVzLCBzdWNoIGFzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2d0azNndGszLUdlbmVyYWwuaHRtbCNndGstaW5pdCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5ndGtfaW5pdCgpPC9jb2RlPjwvYT4uIEluCi1wYXJ0aWN1bGFyLCB1bmtub3duIGNvbW1hbmQgbGluZSBvcHRpb25zIGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8KLWFib3J0IHByb2dyYW0gZXhlY3V0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pbml0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFyZ2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhcHBsaWNhdGlvbidzIGFyZ2MuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQgYW5kIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmlub3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcmd2PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYXBwbGljYXRpb24ncyBhcmd2LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1hcmdjXVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWluaXQtY2hlY2siPjwvYT48aDM+Z3N0X2luaXRfY2hlY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9pbml0X2NoZWNrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmludDwvc3Bhbj4gKmFyZ2M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5jaGFyPC9zcGFuPiAqKmFyZ3ZbXTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5pdGlhbGl6ZXMgdGhlIEdTdHJlYW1lciBsaWJyYXJ5LCBzZXR0aW5nIHVwIGludGVybmFsIHBhdGggbGlzdHMsCi1yZWdpc3RlcmluZyBidWlsdC1pbiBlbGVtZW50cywgYW5kIGxvYWRpbmcgc3RhbmRhcmQgcGx1Z2lucy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIEdTdHJlYW1lciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQKLWZvciBzb21lIHJlYXNvbi4gIElmIHlvdSB3YW50IHlvdXIgcHJvZ3JhbSB0byBmYWlsIGZhdGFsbHksCi11c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdCgpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaW5pdC1jaGVjay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcmdjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYXBwbGljYXRpb24ncyBhcmdjLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJndjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGFwcGxpY2F0aW9uJ3MgYXJndi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9YXJnY11bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVycjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiB0byB3aGljaCBhIG1lc3NhZ2Ugd2lsbCBiZSBwb3N0ZWQgb24gZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pbml0LWNoZWNrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIEdTdHJlYW1lciBjb3VsZCBiZSBpbml0aWFsaXplZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWluaXQtZ2V0LW9wdGlvbi1ncm91cCI+PC9hPjxoMz5nc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQ29tbWFuZGxpbmUtb3B0aW9uLXBhcnNlci5odG1sI0dPcHRpb25Hcm91cCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HT3B0aW9uR3JvdXA8L3NwYW4+PC9hPsKgKgotZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQ29tbWFuZGxpbmUtb3B0aW9uLXBhcnNlci5odG1sI0dPcHRpb25Hcm91cCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPcHRpb25Hcm91cDwvc3Bhbj48L2E+IHdpdGggR1N0cmVhbWVyJ3MgYXJndW1lbnQgc3BlY2lmaWNhdGlvbnMuIFRoZQotZ3JvdXAgaXMgc2V0IHVwIHRvIHVzZSBzdGFuZGFyZCBHT3B0aW9uIGNhbGxiYWNrcywgc28gd2hlbiB1c2luZyB0aGlzCi1ncm91cCBpbiBjb21iaW5hdGlvbiB3aXRoIEdPcHRpb24gcGFyc2luZyBtZXRob2RzLCBhbGwgYXJndW1lbnQgcGFyc2luZwotYW5kIGluaXRpYWxpemF0aW9uIGlzIGF1dG9tYXRlZC48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgR1N0cmVhbWVyIHdpdGggb3RoZXIKLWxpYnJhcmllcyB0aGF0IHVzZSBHT3B0aW9uIChzZWUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQ29tbWFuZGxpbmUtb3B0aW9uLXBhcnNlci5odG1sI2ctb3B0aW9uLWNvbnRleHQtYWRkLWdyb3VwIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwKCk8L2NvZGU+PC9hPiApLjwvcD4KLTxwPklmIHlvdSB1c2UgdGhpcyBmdW5jdGlvbiwgeW91IHNob3VsZCBtYWtlIHN1cmUgeW91IGluaXRpYWxpc2UgdGhlIEdMaWIKLXRocmVhZGluZyBzeXN0ZW0gYXMgb25lIG9mIHRoZSB2ZXJ5IGZpcnN0IHRoaW5ncyBpbiB5b3VyIHByb2dyYW0KLShzZWUgdGhlIGV4YW1wbGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24pLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pbml0LWdldC1vcHRpb24tZ3JvdXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIHBvaW50ZXIgdG8gR1N0cmVhbWVyJ3Mgb3B0aW9uIGdyb3VwLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaXMtaW5pdGlhbGl6ZWQiPjwvYT48aDM+Z3N0X2lzX2luaXRpYWxpemVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfaXNfaW5pdGlhbGl6ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VXNlIHRoaXMgZnVuY3Rpb24gdG8gY2hlY2sgaWYgR1N0cmVhbWVyIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdCgpPC9jb2RlPjwvYT4KLW9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtY2hlY2siIHRpdGxlPSJnc3RfaW5pdF9jaGVja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXRfY2hlY2soKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pcy1pbml0aWFsaXplZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBkb25lLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWluaXQiPjwvYT48aDM+Z3N0X2RlaW5pdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZWluaXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2xlYW4gdXAgYW55IHJlc291cmNlcyBjcmVhdGVkIGJ5IEdTdHJlYW1lciBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0KCk8L2NvZGU+PC9hPi48L3A+Ci08cD5JdCBpcyBub3JtYWxseSBub3QgbmVlZGVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBhIG5vcm1hbCBhcHBsaWNhdGlvbgotYXMgdGhlIHJlc291cmNlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZnJlZWQgd2hlbiB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVzLgotVGhpcyBmdW5jdGlvbiBpcyB0aGVyZWZvcmUgbW9zdGx5IHVzZWQgYnkgdGVzdHN1aXRlcyBhbmQgb3RoZXIgbWVtb3J5Ci1wcm9maWxpbmcgdG9vbHMuPC9wPgotPHA+QWZ0ZXIgdGhpcyBjYWxsIEdTdHJlYW1lciAoaW5jbHVkaW5nIHRoaXMgbWV0aG9kKSBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12ZXJzaW9uIj48L2E+PGgzPmdzdF92ZXJzaW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZlcnNpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqbWFqb3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICptaW5vcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gKm1pY3JvPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqbmFubzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIGxpYnJhcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZlcnNpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWFqb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhIGd1aW50IHRvIHN0b3JlIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYSBndWludCB0byBzdG9yZSB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taWNybzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG1pY3JvIHZlcnNpb24gbnVtYmVyLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFubzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG5hbm8gdmVyc2lvbiBudW1iZXIuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmVyc2lvbi1zdHJpbmciPjwvYT48aDM+Z3N0X3ZlcnNpb25fc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfdmVyc2lvbl9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdXNlZnVsIGZvciBkZXNjcmliaW5nIHRoaXMgdmVyc2lvbgotb2YgR1N0cmVhbWVyIHRvIHRoZSBvdXRzaWRlIHdvcmxkOiB1c2VyIGFnZW50IHN0cmluZ3MsIGxvZ2dpbmcsIC4uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12ZXJzaW9uLXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyBkZXNjcmliaW5nIHRoaXMgdmVyc2lvbgotb2YgR1N0cmVhbWVyLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2VndHJhcC1pcy1lbmFibGVkIj48L2E+PGgzPmdzdF9zZWd0cmFwX2lzX2VuYWJsZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9zZWd0cmFwX2lzX2VuYWJsZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U29tZSBmdW5jdGlvbnMgaW4gdGhlIEdTdHJlYW1lciBjb3JlIG1pZ2h0IGluc3RhbGwgYSBjdXN0b20gU0lHU0VHViBoYW5kbGVyCi10byBiZXR0ZXIgY2F0Y2ggYW5kIHJlcG9ydCBlcnJvcnMgdG8gdGhlIGFwcGxpY2F0aW9uLiBDdXJyZW50bHkgdGhpcyBmZWF0dXJlCi1pcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBsb2FkaW5nIHBsdWdpbnMuPC9wPgotPHA+QXBwbGljYXRpb25zIG1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW91ciB3aXRoIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3Qtc2VndHJhcC1zZXQtZW5hYmxlZCIgdGl0bGU9ImdzdF9zZWd0cmFwX3NldF9lbmFibGVkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3Rfc2VndHJhcF9zZXRfZW5hYmxlZCgpPC9jb2RlPjwvYT4gZnVuY3Rpb24uIFRoaXMgaXMgdHlwaWNhbGx5IGRvbmUgaWYgdGhlIGFwcGxpY2F0aW9uCi13YW50cyB0byBpbnN0YWxsIGl0cyBvd24gaGFuZGxlciB3aXRob3V0IEdTdHJlYW1lciBpbnRlcmZlcmluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc2VndHJhcC1pcy1lbmFibGVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIEdTdHJlYW1lciBpcyBhbGxvd2VkIHRvIGluc3RhbGwgYSBjdXN0b20gU0lHU0VHViBoYW5kbGVyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc2VndHJhcC1zZXQtZW5hYmxlZCI+PC9hPjxoMz5nc3Rfc2VndHJhcF9zZXRfZW5hYmxlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zZWd0cmFwX3NldF9lbmFibGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZW5hYmxlZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlL2VuYWJsZSB0aGUgU0lHU0VHViBoYW5kbGluZyBvZgotdGhlIEdTdHJlYW1lciBjb3JlLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3Qtc2VndHJhcC1pcy1lbmFibGVkIiB0aXRsZT0iZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3NlZ3RyYXBfaXNfZW5hYmxlZCgpPC9jb2RlPjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXNlZ3RyYXAtc2V0LWVuYWJsZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVuYWJsZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIGEgY3VzdG9tIFNJR1NFR1YgaGFuZGxlciBzaG91bGQgYmUgaW5zdGFsbGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZvcmstaXMtZW5hYmxlZCI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkJ5IGRlZmF1bHQgR1N0cmVhbWVyIHdpbGwgcGVyZm9ybSBzY2FubmluZyBhbmQgcmVidWlsZGluZyBvZiB0aGUKLXJlZ2lzdHJ5IGZpbGUgdXNpbmcgYSBoZWxwZXIgY2hpbGQgcHJvY2Vzcy48L3A+Ci08cD5BcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3VyIHdpdGggdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1yZWdpc3RyeS1mb3JrLXNldC1lbmFibGVkIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkKCk8L2NvZGU+PC9hPiBmdW5jdGlvbiwgaW4gd2hpY2ggY2FzZSBuZXcgcGx1Z2lucwotYXJlIHNjYW5uZWQgKGFuZCBsb2FkZWQpIGludG8gdGhlIGFwcGxpY2F0aW9uIHByb2Nlc3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXJlZ2lzdHJ5LWZvcmstaXMtZW5hYmxlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBHU3RyZWFtZXIgd2lsbCB1c2UgdGhlIGNoaWxkIGhlbHBlciBwcm9jZXNzIHdoZW4KLXJlYnVpbGRpbmcgdGhlIHJlZ2lzdHJ5LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcmVnaXN0cnktZm9yay1zZXQtZW5hYmxlZCI+PC9hPjxoMz5nc3RfcmVnaXN0cnlfZm9ya19zZXRfZW5hYmxlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZW5hYmxlZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlL2VuYWJsZSBzcGF3bmluZyBvZiBhIGNoaWxkIGhlbHBlciBwcm9jZXNzCi13aGVuIHJlYnVpbGRpbmcgdGhlIHJlZ2lzdHJ5LiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtcmVnaXN0cnktZm9yay1pcy1lbmFibGVkIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCgpPC9jb2RlPjwvYT4gZm9yIG1vcmUKLWluZm9ybWF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1yZWdpc3RyeS1mb3JrLXNldC1lbmFibGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbmFibGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+d2hldGhlciByZWJ1aWxkaW5nIHRoZSByZWdpc3RyeSBjYW4gdXNlIGEgdGVtcG9yYXJ5IGNoaWxkIGhlbHBlciBwcm9jZXNzLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVwZGF0ZS1yZWdpc3RyeSI+PC9hPjxoMz5nc3RfdXBkYXRlX3JlZ2lzdHJ5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXBkYXRlX3JlZ2lzdHJ5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZvcmNlcyBHU3RyZWFtZXIgdG8gcmUtc2NhbiBpdHMgcGx1Z2luIHBhdGhzIGFuZCB1cGRhdGUgdGhlIGRlZmF1bHQKLXBsdWdpbiByZWdpc3RyeS48L3A+Ci08cD5BcHBsaWNhdGlvbnMgd2lsbCBhbG1vc3QgbmV2ZXIgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIGl0IGlzIG9ubHkKLXVzZWZ1bCBpZiB0aGUgYXBwbGljYXRpb24ga25vd3MgbmV3IHBsdWdpbnMgaGF2ZSBiZWVuIGluc3RhbGxlZCAob3Igb2xkCi1vbmVzIHJlbW92ZWQpIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgYXBwbGljYXRpb24gKG9yLCB0byBiZSBwcmVjaXNlLCB0aGUKLWZpcnN0IGNhbGwgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdCgpPC9jb2RlPjwvYT4pIGFuZCB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gbWFrZSB1c2Ugb2YgYW55Ci1uZXdseS1pbnN0YWxsZWQgcGx1Z2lucyB3aXRob3V0IHJlc3RhcnRpbmcgdGhlIGFwcGxpY2F0aW9uLjwvcD4KLTxwPkFwcGxpY2F0aW9ucyBzaG91bGQgYXNzdW1lIHRoYXQgdGhlIHJlZ2lzdHJ5IHVwZGF0ZSBpcyBuZWl0aGVyIGF0b21pYyBub3IKLXRocmVhZC1zYWZlIGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBoYXZlIGFueSBkeW5hbWljIHBpcGVsaW5lcyBydW5uaW5nCi0oaW5jbHVkaW5nIHRoZSBwbGF5YmluIGFuZCBkZWNvZGViaW4gZWxlbWVudHMpIGFuZCBzaG91bGQgYWxzbyBub3QgY3JlYXRlCi1hbnkgZWxlbWVudHMgb3IgYWNjZXNzIHRoZSBHU3RyZWFtZXIgcmVnaXN0cnkgd2hpbGUgdGhlIHVwZGF0ZSBpcyBpbgotcHJvZ3Jlc3MuPC9wPgotPHA+Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IGJsb2NrIGZvciBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cGRhdGUtcmVnaXN0cnkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHJlZ2lzdHJ5IGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChkb2VzIG5vdAotaW1wbHkgdGhhdCB0aGVyZSB3ZXJlIGNoYW5nZXMpLCBvdGhlcndpc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxZmZkNi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RBdG9taWNRdWV1ZTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QmluLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLnRvcF9vZl9wYWdlIj48L2E+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9oMj4KLTxwPkdzdEF0b21pY1F1ZXVlIOKAlCBBbiBhdG9taWMgcXVldWUgaW1wbGVtZW50YXRpb248L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtbmV3IiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9uZXfCoCgpIj5nc3RfYXRvbWljX3F1ZXVlX25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcmVmIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9yZWbCoCgpIj5nc3RfYXRvbWljX3F1ZXVlX3JlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtdW5yZWYiIHRpdGxlPSJnc3RfYXRvbWljX3F1ZXVlX3VucmVmwqAoKSI+Z3N0X2F0b21pY19xdWV1ZV91bnJlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcHVzaCIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfcHVzaMKgKCkiPmdzdF9hdG9taWNfcXVldWVfcHVzaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1wZWVrIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9wZWVrwqAoKSI+Z3N0X2F0b21pY19xdWV1ZV9wZWVrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLXBvcCIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfcG9wwqAoKSI+Z3N0X2F0b21pY19xdWV1ZV9wb3A8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtbGVuZ3RoIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGjCoCgpIj5nc3RfYXRvbWljX3F1ZXVlX2xlbmd0aDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gb2JqZWN0IGltcGxlbWVudHMgYSBxdWV1ZSB0aGF0IGNhbiBiZSB1c2VkIGZyb20gbXVsdGlwbGUKLXRocmVhZHMgd2l0aG91dCBwZXJmb3JtaW5nIGFueSBibG9ja2luZyBvcGVyYXRpb25zLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYXRvbWljLXF1ZXVlLW5ldyI+PC9hPjxoMz5nc3RfYXRvbWljX3F1ZXVlX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT7CoCoKLWdzdF9hdG9taWNfcXVldWVfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5pdGlhbF9zaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBhdG9taWMgcXVldWUgaW5zdGFuY2UuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbml0aWFsX3NpemU8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlCi1uZWFyZXN0IHBvd2VyIG9mIDIgYW5kIHVzZWQgYXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgcXVldWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluaXRpYWxfc2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmluaXRpYWwgcXVldWUgc2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hdG9taWMtcXVldWUtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdG9taWNRdWV1ZTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hdG9taWMtcXVldWUtcmVmIj48L2E+PGgzPmdzdF9hdG9taWNfcXVldWVfcmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2F0b21pY19xdWV1ZV9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluY3JlYXNlIHRoZSByZWZjb3VudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYXRvbWljLXF1ZXVlLXJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS11bnJlZiI+PC9hPjxoMz5nc3RfYXRvbWljX3F1ZXVlX3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2F0b21pY19xdWV1ZV91bnJlZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VW5yZWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+Ci0gYW5kIGZyZWUgdGhlIG1lbW9yeSB3aGVuIHRoZSByZWZjb3VudCByZWFjaGVzIDAuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS11bnJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1wdXNoIj48L2E+PGgzPmdzdF9hdG9taWNfcXVldWVfcHVzaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9hdG9taWNfcXVldWVfcHVzaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFwcGVuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotIHRvIHRoZSB0YWlsIG9mIHRoZSBxdWV1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYXRvbWljLXF1ZXVlLXB1c2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1wZWVrIj48L2E+PGgzPmdzdF9hdG9taWNfcXVldWVfcGVla8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotZ3N0X2F0b21pY19xdWV1ZV9wZWVrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdG9taWNRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QZWVrIHRoZSBoZWFkIGVsZW1lbnQgb2YgdGhlIHF1ZXVlIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgcXVldWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1wZWVrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWV1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdG9taWNRdWV1ZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1wZWVrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGhlYWQgZWxlbWVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLW9yCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2hlbiB0aGUgcXVldWUgaXMgZW1wdHkuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1wb3AiPjwvYT48aDM+Z3N0X2F0b21pY19xdWV1ZV9wb3DCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLWdzdF9hdG9taWNfcXVldWVfcG9wICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdG9taWNRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIGhlYWQgZWxlbWVudCBvZiB0aGUgcXVldWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWF0b21pYy1xdWV1ZS1wb3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYXRvbWljLXF1ZXVlLXBvcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBoZWFkIGVsZW1lbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2hlbgotdGhlIHF1ZXVlIGlzIGVtcHR5LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYXRvbWljLXF1ZXVlLWxlbmd0aCI+PC9hPjxoMz5nc3RfYXRvbWljX3F1ZXVlX2xlbmd0aMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjR3N0QXRvbWljUXVldWUiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF0b21pY1F1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgYW1vdW50IG9mIGl0ZW1zIGluIHRoZSBxdWV1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYXRvbWljLXF1ZXVlLWxlbmd0aC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNHc3RBdG9taWNRdWV1ZSIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXRvbWljUXVldWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hdG9taWMtcXVldWUtbGVuZ3RoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdG9taWNRdWV1ZSI+PC9hPjxoMz5Hc3RBdG9taWNRdWV1ZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdEF0b21pY1F1ZXVlIEdzdEF0b21pY1F1ZXVlOzwvcHJlPgotPHA+T3BhcXVlIGF0b21pYyBkYXRhIHF1ZXVlLjwvcD4KLTxwPlVzZSB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIHRvIGdldCB0aGUgc3RvcmVkIHZhbHVlcy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RDb25maWcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZkODExOC4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RDb25maWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0Q29uZmlnOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0Q29uZmlnLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdENsb2NrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdENvbmZpZyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RDb25maWcudG9wX29mX3BhZ2UiPjwvYT5Hc3RDb25maWc8L3NwYW4+PC9oMj4KLTxwPkdzdENvbmZpZyDigJQgQnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RDb25maWcub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDb25maWcuaHRtbCNHU1QtRElTQUJMRS1HU1QtREVCVUc6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX0dTVF9ERUJVRyI+R1NUX0RJU0FCTEVfR1NUX0RFQlVHPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwjR1NULURJU0FCTEUtUEFSU0U6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX1BBUlNFIj5HU1RfRElTQUJMRV9QQVJTRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdENvbmZpZy5odG1sI0dTVC1ESVNBQkxFLVJFR0lTVFJZOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9SRUdJU1RSWSI+R1NUX0RJU0FCTEVfUkVHSVNUUlk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RDb25maWcuaHRtbCNHU1QtRElTQUJMRS1QTFVHSU46Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX1BMVUdJTiI+R1NUX0RJU0FCTEVfUExVR0lOPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RDb25maWcuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdENvbmZpZy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGRlc2NyaWJlcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBHU3RyZWFtZXIuIFdoZW4gYnVpbGRpbmcKLUdTdHJlYW1lciB0aGVyZSBhcmUgYSBsb3Qgb2YgcGFydHMgKGtub3duIGludGVybmFsbHkgYXMgInN1YnN5c3RlbXMiICkgdGhhdAotY2FuIGJlIGRpc2FibGVkIGZvciB2YXJpb3VzIHJlYXNvbnMuIFRoZSBtb3N0IGNvbW1vbiByZWFzb25zIGFyZSBzcGVlZCBhbmQKLXNpemUsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlIEdTdHJlYW1lciBpcyBkZXNpZ25lZCB0byBydW4gb24gZW1iZWRkZWQKLXN5c3RlbXMuPC9wPgotPHA+SWYgYSBzdWJzeXN0ZW0gaXMgZGlzYWJsZWQsIG1vc3Qgb2YgdGhpcyBjaGFuZ2VzIGFyZSBkb25lIGluIGFuIEFQSQotY29tcGF0aWJsZSB3YXksIHNvIHlvdSBkb24ndCBuZWVkIHRvIGFkYXB0IHlvdXIgY29kZSBpbiBtb3N0IGNhc2VzLiBJdCBpcwotbmV2ZXIgZG9uZSBpbiBhbiBBQkkgY29tcGF0aWJsZSB3YXkgdGhvdWdoLiBTbyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGEKLXN1YnN5c3RlbSwgeW91IGhhdmUgdG8gcmVidWlsZCBhbGwgcHJvZ3JhbXMgZGVwZW5kaW5nIG9uIEdTdHJlYW1lciwgdG9vLjwvcD4KLTxwPklmIGEgc3Vic3lzdGVtIGlzIGRpc2FibGVkIGluIEdTdHJlYW1lciwgYSB2YWx1ZSBpcyBkZWZpbmVkIGluCi0mbHQ7Z3N0L2dzdC5oJmd0Oy4gWW91IGNhbiBjaGVjayB0aGlzIGlmIHlvdSBkbyBzdWJzeXN0ZW0tc3BlY2lmaWMgc3R1ZmYuPC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08YSBuYW1lPSJleGFtcGxlLWdzdGNvbmZpZyI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZcKgMy7CoERvaW5nIHN1YnN5c3RlbSBzcGVjaWZpYyB0aGluZ3M8L2I+PC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIGRvIHN0dWZmIHNwZWNpZmljIHRvIHRoZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNlbmRpZjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIEdTVF9ESVNBQkxFX0dTVF9ERUJVRzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIHBwYyI+PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0Q29uZmlnLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RDb25maWcub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1ESVNBQkxFLUdTVC1ERUJVRzpDQVBTIj48L2E+PGgzPkdTVF9ESVNBQkxFX0dTVF9ERUJVRzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRElTQUJMRV9HU1RfREVCVUcgMQotPC9wcmU+Ci08cD5Db25maWd1cmVzIHRoZSBpbmNsdXNpb24gb2YgdGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW08L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1ESVNBQkxFLVBBUlNFOkNBUFMiPjwvYT48aDM+R1NUX0RJU0FCTEVfUEFSU0U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RJU0FCTEVfUEFSU0UgMQotPC9wcmU+Ci08cD5Db25maWd1cmVzIHRoZSBpbmNsdXNpb24gb2YgdGhlIGdzdC1sYXVuY2ggcGFyc2VyPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRElTQUJMRS1SRUdJU1RSWTpDQVBTIj48L2E+PGgzPkdTVF9ESVNBQkxFX1JFR0lTVFJZPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ESVNBQkxFX1JFR0lTVFJZIDEKLTwvcHJlPgotPHA+Q29uZmlndXJlcyB0aGUgdXNlIG9mIHRoZSBwbHVnaW4gcmVnaXN0cnkuCi1JZiBvbmUgZGlzYWJsZXMgdGhpcywgcmVxdWlyZWQgcGx1Z2lucyBuZWVkIHRvIGJlIGxvYWRlZCBhbmQgcmVnaXN0ZXJlZAotbWFudWFsbHk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1ESVNBQkxFLVBMVUdJTjpDQVBTIj48L2E+PGgzPkdTVF9ESVNBQkxFX1BMVUdJTjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRElTQUJMRV9QTFVHSU4gMQotPC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3REZXZpY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVmZWZlMi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3REZXZpY2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0RGV2aWNlOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWRldmljZS1wcm9iaW5nLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgRGV2aWNlIERpc2NvdmVyeSBhbmQgRGV2aWNlIFByb2JpbmciPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdERldmljZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1kZXZpY2UtcHJvYmluZy5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdERldmljZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2UudG9wX29mX3BhZ2UiPjwvYT5Hc3REZXZpY2U8L3NwYW4+PC9oMj4KLTxwPkdzdERldmljZSDigJQgT2JqZWN0IHJlcHJlc2VudGluZyBhIGRldmljZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0RGV2aWNlLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtY3JlYXRlLWVsZW1lbnQiIHRpdGxlPSJnc3RfZGV2aWNlX2NyZWF0ZV9lbGVtZW50wqAoKSI+Z3N0X2RldmljZV9jcmVhdGVfZWxlbWVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWNhcHMiIHRpdGxlPSJnc3RfZGV2aWNlX2dldF9jYXBzwqAoKSI+Z3N0X2RldmljZV9nZXRfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWRldmljZS1jbGFzcyIgdGl0bGU9ImdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzc8KgKCkiPmdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWRpc3BsYXktbmFtZSIgdGl0bGU9ImdzdF9kZXZpY2VfZ2V0X2Rpc3BsYXlfbmFtZcKgKCkiPmdzdF9kZXZpY2VfZ2V0X2Rpc3BsYXlfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtaGFzLWNsYXNzZXMiIHRpdGxlPSJnc3RfZGV2aWNlX2hhc19jbGFzc2VzwqAoKSI+Z3N0X2RldmljZV9oYXNfY2xhc3NlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtaGFzLWNsYXNzZXN2IiB0aXRsZT0iZ3N0X2RldmljZV9oYXNfY2xhc3Nlc3bCoCgpIj5nc3RfZGV2aWNlX2hhc19jbGFzc2VzdjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtcmVjb25maWd1cmUtZWxlbWVudCIgdGl0bGU9ImdzdF9kZXZpY2VfcmVjb25maWd1cmVfZWxlbWVudMKgKCkiPmdzdF9kZXZpY2VfcmVjb25maWd1cmVfZWxlbWVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LXByb3BlcnRpZXMiIHRpdGxlPSJnc3RfZGV2aWNlX2dldF9wcm9wZXJ0aWVzwqAoKSI+Z3N0X2RldmljZV9nZXRfcHJvcGVydGllczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+R3N0RGV2aWNlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZUNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdERldmljZUNsYXNzIj5Hc3REZXZpY2VDbGFzczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0RGV2aWNlLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlPC9zcGFuPjwvYT4gYXJlIG9iamVjdHMgcmVwcmVzZW50aW5nIGEgZGV2aWNlLCB0aGV5IGNvbnRhaW4KLXJlbGV2YW50IG1ldGFkYXRhIGFib3V0IHRoZSBkZXZpY2UsIHN1Y2ggYXMgaXRzIGNsYXNzIGFuZCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4KLXJlcHJlc2VudGluZyB0aGUgbWVkaWEgdHlwZXMgaXQgY2FuIHByb2R1Y2Ugb3IgaGFuZGxlLjwvcD4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+IGFyZSBjcmVhdGVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT4gb2JqZWN0cyB3aGljaCBjYW4gYmUKLWFnZ3JlZ2F0ZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+IG9iamVjdHMuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0RGV2aWNlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLWNyZWF0ZS1lbGVtZW50Ij48L2E+PGgzPmdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiAqZGV2aWNlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgdGhlIGVsZW1lbnQgd2l0aCBhbGwgb2YgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgc2V0IHRvIHVzZQotdGhpcyBkZXZpY2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1jcmVhdGUtZWxlbWVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXZpY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbmFtZSBvZiBuZXcgZWxlbWVudCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIGF1dG9tYXRpY2FsbHkKLWNyZWF0ZSBhIHVuaXF1ZSBuYW1lLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1jcmVhdGUtZWxlbWVudC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGNvbmZpZ3VyZWQgdG8gdXNlIHRoaXMgZGV2aWNlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLWdldC1jYXBzIj48L2E+PGgzPmdzdF9kZXZpY2VfZ2V0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF9kZXZpY2VfZ2V0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiAqZGV2aWNlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHRlciBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRoYXQgdGhpcyBkZXZpY2Ugc3VwcG9ydHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1nZXQtY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV2aWNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtZ2V0LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLiBVbnJlZiB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIiB0aXRsZT0iZ3N0X2NhcHNfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuIGRvbmUuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtZ2V0LWRldmljZS1jbGFzcyI+PC9hPjxoMz5nc3RfZGV2aWNlX2dldF9kZXZpY2VfY2xhc3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+ICpkZXZpY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgImNsYXNzIiBvZiBhIGRldmljZS4gVGhpcyBpcyBhICIvIiBzZXBhcmF0ZWQgbGlzdCBvZgotY2xhc3NlcyB0aGF0IHJlcHJlc2VudCB0aGlzIGRldmljZS4gVGhleSBhcmUgYSBzdWJzZXQgb2YgdGhlCi1jbGFzc2VzIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IHRoYXQgcHJvZHVjZWQgdGhpcyBkZXZpY2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1nZXQtZGV2aWNlLWNsYXNzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXZpY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1nZXQtZGV2aWNlLWNsYXNzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGRldmljZSBjbGFzcy4gRnJlZSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLWdldC1kaXNwbGF5LW5hbWUiPjwvYT48aDM+Z3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZGV2aWNlX2dldF9kaXNwbGF5X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiAqZGV2aWNlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHVzZXItZnJpZW5kbHkgbmFtZSBvZiB0aGUgZGV2aWNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtZ2V0LWRpc3BsYXktbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV2aWNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtZ2V0LWRpc3BsYXktbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBkZXZpY2UgbmFtZS4gRnJlZSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLWhhcy1jbGFzc2VzIj48L2E+PGgzPmdzdF9kZXZpY2VfaGFzX2NsYXNzZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9kZXZpY2VfaGFzX2NsYXNzZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiAqZGV2aWNlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjbGFzc2VzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXZpY2U8L2NvZGU+PC9lbT4KLSBtYXRjaGVzIGFsbCBvZiB0aGUgZ2l2ZW4gY2xhc3NlczwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtaGFzLWNsYXNzZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV2aWNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbGFzc2VzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSAiLyItc2VwYXJhdGVkIGxpc3Qgb2YgZGV2aWNlIGNsYXNzZXMgdG8gbWF0Y2gsIG9ubHkgbWF0Y2ggaWYKLWFsbCBjbGFzc2VzIGFyZSBtYXRjaGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLWhhcy1jbGFzc2VzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXZpY2U8L2NvZGU+PC9lbT4KLW1hdGNoZXMuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtaGFzLWNsYXNzZXN2Ij48L2E+PGgzPmdzdF9kZXZpY2VfaGFzX2NsYXNzZXN2wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGV2aWNlX2hhc19jbGFzc2VzdiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+ICpkZXZpY2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqY2xhc3NlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmFjdG9yeTwvY29kZT48L2VtPgotIG1hdGNoZXMgYWxsIG9mIHRoZSBnaXZlbiBjbGFzc2VzPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1oYXMtY2xhc3Nlc3YucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV2aWNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbGFzc2VzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRlcm1pbmF0ZWQgYXJyYXkgb2YgY2xhc3NlcwotdG8gbWF0Y2gsIG9ubHkgbWF0Y2ggaWYgYWxsIGNsYXNzZXMgYXJlIG1hdGNoZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1oYXMtY2xhc3Nlc3YucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRldmljZTwvY29kZT48L2VtPgotbWF0Y2hlcy48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1yZWNvbmZpZ3VyZS1lbGVtZW50Ij48L2E+PGgzPmdzdF9kZXZpY2VfcmVjb25maWd1cmVfZWxlbWVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RldmljZV9yZWNvbmZpZ3VyZV9lbGVtZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlPC9zcGFuPjwvYT4gKmRldmljZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRyaWVzIHRvIHJlY29uZmlndXJlIGFuIGV4aXN0aW5nIGVsZW1lbnQgdG8gdXNlIHRoZSBkZXZpY2UuIElmIHRoaXMKLWZ1bmN0aW9uIGZhaWxzLCB0aGVuIG9uZSBtdXN0IGRlc3Ryb3kgdGhlIGVsZW1lbnQgYW5kIGNyZWF0ZSBhIG5ldyBvbmUKLXVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1jcmVhdGUtZWxlbWVudCIgdGl0bGU9ImdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnQoKTwvY29kZT48L2E+LjwvcD4KLTxwPk5vdGU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIGVsZW1lbnRzIGNhbiBjaGFuZ2UgdGhlaXIKLWRldmljZSBpbiB0aGUgUExBWUlORyBzdGF0ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXJlY29uZmlndXJlLWVsZW1lbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV2aWNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1yZWNvbmZpZ3VyZS1lbGVtZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBlbGVtZW50IGNvdWxkIGJlIHJlY29uZmlndXJlZCB0byB1c2UgdGhpcyBkZXZpY2UsCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtZ2V0LXByb3BlcnRpZXMiPjwvYT48aDM+Z3N0X2RldmljZV9nZXRfcHJvcGVydGllc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotZ3N0X2RldmljZV9nZXRfcHJvcGVydGllcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+ICpkZXZpY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgZXh0cmEgcHJvcGVydGllcyBvZiBhIGRldmljZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLWdldC1wcm9wZXJ0aWVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXZpY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1nZXQtcHJvcGVydGllcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBleHRyYSBwcm9wZXJ0aWVzIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuIHRoZXJlIGFyZSBub25lLgotRnJlZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZyZWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfZnJlZSgpPC9jb2RlPjwvYT4gYWZ0ZXIgdXNlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERldmljZSI+PC9hPjxoMz5zdHJ1Y3QgR3N0RGV2aWNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RGV2aWNlIHsKLSAgR3N0T2JqZWN0ICAgICAgICAgcGFyZW50OwotfTsKLTwvcHJlPgotPHA+QSBkZXZpY2Ugb2JqZWN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdERldmljZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REZXZpY2UucGFyZW50Ij48L2E+cGFyZW50PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHN0cnVjdXR1cmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGV2aWNlQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdERldmljZUNsYXNzPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RGV2aWNlQ2xhc3MgewotICBHc3RPYmplY3RDbGFzcyAgICBwYXJlbnRfY2xhc3M7Ci0KLSAgR3N0RWxlbWVudCAqICgqY3JlYXRlX2VsZW1lbnQpICAgICAgKEdzdERldmljZSAqIGRldmljZSwgY29uc3QgZ2NoYXIgKiBuYW1lKTsKLSAgZ2Jvb2xlYW4gICAgICgqcmVjb25maWd1cmVfZWxlbWVudCkgKEdzdERldmljZSAqIGRldmljZSwgR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotfTsKLTwvcHJlPgotPHA+VGhlIGNsYXNzIHN0cnVjdHVyZSBmb3IgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiBvYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RGV2aWNlQ2xhc3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERldmljZUNsYXNzLmNyZWF0ZS1lbGVtZW50Ij48L2E+Y3JlYXRlX2VsZW1lbnQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkNyZWF0ZXMgdGhlIGZ1bGx5IGNvbmZpZ3VyZWQgZWxlbWVudCB0byBhY2Nlc3MgdGhpcyBkZXZpY2UuCi1TdWJjbGFzc2VzIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBhbmQgcmV0dXJuIGEgbmV3IGVsZW1lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RGV2aWNlQ2xhc3MucmVjb25maWd1cmUtZWxlbWVudCI+PC9hPnJlY29uZmlndXJlX2VsZW1lbnQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlRoaXMgb25seSBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIGlmIHRoZQotZWxlbWVudCBjYW4gYmUgcmVjb25maWd1cmVkIHRvIHVzZSBhIGRpZmZlcmVudCBkZXZpY2UuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbgotZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1yZWNvbmZpZ3VyZS1lbGVtZW50IiB0aXRsZT0iZ3N0X2RldmljZV9yZWNvbmZpZ3VyZV9lbGVtZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQoKTwvY29kZT48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0RGV2aWNlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcyNmE4YS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NjQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdERldmljZU1vbml0b3I6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItZGV2aWNlLXByb2JpbmcuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEZXZpY2UgRGlzY292ZXJ5IGFuZCBEZXZpY2UgUHJvYmluZyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1kZXZpY2UtcHJvYmluZy5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIERldmljZSBEaXNjb3ZlcnkgYW5kIERldmljZSBQcm9iaW5nIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWRldmljZS1wcm9iaW5nLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1kZXZpY2UtcHJvYmluZy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IudG9wX29mX3BhZ2UiPjwvYT5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvaDI+Ci08cD5Hc3REZXZpY2VNb25pdG9yIOKAlCBBIGRldmljZSBtb25pdG9yIGFuZCBwcm9iZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERldmljZU1vbml0b3I8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3ItbmV3IiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX25ld8KgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWdldC1idXMiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2J1c8KgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfYnVzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1hZGQtZmlsdGVyIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXLCoCgpIj5nc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3ItcmVtb3ZlLWZpbHRlciIgdGl0bGU9ImdzdF9kZXZpY2VfbW9uaXRvcl9yZW1vdmVfZmlsdGVywqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX3JlbW92ZV9maWx0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLXN0YXJ0IiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX3N0YXJ0wqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX3N0YXJ0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3Itc3RvcCIgdGl0bGU9ImdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wwqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX3N0b3A8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3ItZ2V0LWRldmljZXMiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXPCoCgpIj5nc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1nZXQtcHJvdmlkZXJzIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX2dldF9wcm92aWRlcnPCoCgpIj5nc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Byb3ZpZGVyczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLW1vbml0b3ItZ2V0LXNob3ctYWxsLWRldmljZXMiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Nob3dfYWxsX2RldmljZXPCoCgpIj5nc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Nob3dfYWxsX2RldmljZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1zZXQtc2hvdy1hbGwtZGV2aWNlcyIgdGl0bGU9ImdzdF9kZXZpY2VfbW9uaXRvcl9zZXRfc2hvd19hbGxfZGV2aWNlc8KgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9zZXRfc2hvd19hbGxfZGV2aWNlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKioKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1nZXQtaGlkZGVuLXByb3ZpZGVycyIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2hpZGRlbl9wcm92aWRlcnPCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9oaWRkZW5fcHJvdmlkZXJzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWhpZGUtcHJvdmlkZXIiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXLCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItdW5oaWRlLXByb3ZpZGVyIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl91bmhpZGVfcHJvdmlkZXLCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX3VuaGlkZV9wcm92aWRlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPkdzdERldmljZU1vbml0b3I8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3JDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yQ2xhc3MiPkdzdERldmljZU1vbml0b3JDbGFzczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BcHBsaWNhdGlvbnMgc2hvdWxkIGNyZWF0ZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZU1vbml0b3I8L3NwYW4+PC9hPiB3aGVuIHRoZXkgd2FudAotdG8gcHJvYmUsIGxpc3QgYW5kIG1vbml0b3IgZGV2aWNlcyBvZiBhIHNwZWNpZmljIHR5cGUuIFRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+IHdpbGwgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPiBvYmplY3RzIGFuZCBtYW5hZ2UgdGhlbS4gSXQgd2lsbCB0aGVuIHBvc3QKLW1lc3NhZ2VzIG9uIGl0cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBmb3IgZGV2aWNlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhbmQKLXJlbW92ZWQuPC9wPgotPHA+VGhlIGRldmljZSBtb25pdG9yIHdpbGwgbW9uaXRvciBhbGwgZGV2aWNlcyBtYXRjaGluZyB0aGUgZmlsdGVycyB0aGF0Ci10aGUgYXBwbGljYXRpb24gaGFzIHNldC48L3A+Ci08cD5UaGUgYmFzaWMgdXNlIHBhdHRlcm4gb2YgYSBkZXZpY2UgbW9uaXRvciBpcyBhcyBmb2xsb3dzOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTkKLTIwCi0yMQotMjIKLTIzCi0yNAotMjUKLTI2Ci0yNwotMjgKLTI5Ci0zMAotMzEKLTMyCi0zMwotMzQKLTM1Ci0zNgotMzcKLTM4Ci0zOQotNDAKLTQxCi00MgotNDMKLTQ0Ci00NQotNDYKLTQ3Ci00ODwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnN0YXRpYzwvc3Bhbj4gZ2Jvb2xlYW4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+bXlfYnVzX2Z1bmM8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPkdzdEJ1cyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gYnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEdzdE1lc3NhZ2UgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IG1lc3NhZ2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ3BvaW50ZXIgdXNlcl9kYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgIEdzdERldmljZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5kZXZpY2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgIGdjaGFyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPm5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN3aXRjaDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVFlQRTpDQVBTIj5HU1RfTUVTU0FHRV9UWVBFPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bWVzc2FnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKSB7PC9zcGFuPgotICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2FzZTwvc3Bhbj4gR1NUX01FU1NBR0VfREVWSUNFX0FEREVEPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+Ci0gICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZGV2aWNlLWFkZGVkIj5nc3RfbWVzc2FnZV9wYXJzZV9kZXZpY2VfYWRkZWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tZXNzYWdlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgJmFtcDs8L3NwYW4+ZGV2aWNlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgIG5hbWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWRpc3BsYXktbmFtZSI+Z3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZGV2aWNlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXByaW50Ij5nX3ByaW50PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtEZXZpY2UgYWRkZWQ6ICVzPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+Z19mcmVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiPmdzdF9vYmplY3RfdW5yZWY8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5kZXZpY2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2FzZTwvc3Bhbj4gR1NUX01FU1NBR0VfREVWSUNFX1JFTU9WRUQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojwvc3Bhbj4KLSAgICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1kZXZpY2UtcmVtb3ZlZCI+Z3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX3JlbW92ZWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tZXNzYWdlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgJmFtcDs8L3NwYW4+ZGV2aWNlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgIG5hbWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWRpc3BsYXktbmFtZSI+Z3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZGV2aWNlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXByaW50Ij5nX3ByaW50PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtEZXZpY2UgcmVtb3ZlZDogJXM8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBlc2MiPlxuPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj5nX2ZyZWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5uYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiI+Z3N0X29iamVjdF91bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmRldmljZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+YnJlYWs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kZWZhdWx0PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPgotICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5icmVhazwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotCi0gICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiBHX1NPVVJDRV9DT05USU5VRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0KLUdzdERldmljZU1vbml0b3IgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPnNldHVwX3Jhd192aWRlb19zb3VyY2VfZGV2aWNlX21vbml0b3I8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj52b2lkPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHs8L3NwYW4+Ci0gICBHc3REZXZpY2VNb25pdG9yIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPm1vbml0b3I8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgIEdzdEJ1cyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5idXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgIEdzdENhcHMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+Y2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi0gICBtb25pdG9yIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLW5ldyI+Z3N0X2RldmljZV9tb25pdG9yX25ldzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oKTs8L3NwYW4+Ci0KLSAgIGJ1cyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1nZXQtYnVzIj5nc3RfZGV2aWNlX21vbml0b3JfZ2V0X2J1czwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm1vbml0b3I8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXdhdGNoIj5nc3RfYnVzX2FkZF93YXRjaDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmJ1czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBteV9idXNfZnVuYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIj5nc3Rfb2JqZWN0X3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gICBjYXBzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZW1wdHktc2ltcGxlIj5nc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7dmlkZW8veC1yYXcmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1hZGQtZmlsdGVyIj5nc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm1vbml0b3I8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7VmlkZW8vU291cmNlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdW5yZWYiPmdzdF9jYXBzX3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1zdGFydCI+Z3N0X2RldmljZV9tb25pdG9yX3N0YXJ0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bW9uaXRvcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gbW9uaXRvcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItbmV3Ij48L2E+PGgzPmdzdF9kZXZpY2VfbW9uaXRvcl9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfZGV2aWNlX21vbml0b3JfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgZGV2aWNlIG1vbml0b3IuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtbW9uaXRvci1nZXQtYnVzIj48L2E+PGgzPmdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfYnVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqCi1nc3RfZGV2aWNlX21vbml0b3JfZ2V0X2J1cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZU1vbml0b3I8L3NwYW4+PC9hPiAqbW9uaXRvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZU1vbml0b3I8L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtbW9uaXRvci1nZXQtYnVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb25pdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1tb25pdG9yLWdldC1idXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItYWRkLWZpbHRlciI+PC9hPjxoMz5nc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT4gKm1vbml0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjbGFzc2VzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIGEgZmlsdGVyIGZvciB3aGljaCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiB3aWxsIGJlIG1vbml0b3JlZCwgYW55IGRldmljZSB0aGF0IG1hdGNoZXMKLWFsbCB0aGVzZSBjbGFzc2VzIGFuZCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gd2lsbCBiZSByZXR1cm5lZC48L3A+Ci08cD5JZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBhZGQgbW9yZSBmaWx0ZXJzLCBlYWNoIHdpbGwgYmUKLW1hdGNoZWQgaW5kZXBlbmRlbnRseS4gVGhhdCBpcywgYWRkaW5nIG1vcmUgZmlsdGVycyB3aWxsIG5vdCBmdXJ0aGVyIHJlc3RyaWN0Ci13aGF0IGRldmljZXMgYXJlIG1hdGNoZWQuPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGFzIHJldHVybmVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9kZXZpY2VfZ2V0X2NhcHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZXZpY2VfZ2V0X2NhcHMoKTwvY29kZT48L2E+IGFyZQotbm90IGludGVyc2VjdGVkIHdpdGggY2FwcyBmaWx0ZXJzIGFkZGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24uPC9wPgotPHA+RmlsdGVycyBtdXN0IGJlIGFkZGVkIGJlZm9yZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+IGlzIHN0YXJ0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1tb25pdG9yLWFkZC1maWx0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9uaXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZGV2aWNlIG1vbml0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xhc3NlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBkZXZpY2UgY2xhc3NlcyB0byB1c2UgYXMgZmlsdGVyIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3IgYW55IGNsYXNzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBmaWx0ZXIgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciBBTlkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItYWRkLWZpbHRlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBpZCBvZiB0aGUgbmV3IGZpbHRlciBvciAwIGlmIG5vIHByb3ZpZGVyIG1hdGNoZWQgdGhlIGZpbHRlcidzCi1jbGFzc2VzLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItcmVtb3ZlLWZpbHRlciI+PC9hPjxoMz5nc3RfZGV2aWNlX21vbml0b3JfcmVtb3ZlX2ZpbHRlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RldmljZV9tb25pdG9yX3JlbW92ZV9maWx0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT4gKm1vbml0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGZpbHRlcl9pZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmVzIGEgZmlsdGVyIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZU1vbml0b3I8L3NwYW4+PC9hPiB1c2luZyB0aGUgaWQgdGhhdCB3YXMgcmV0dXJuZWQKLWJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1hZGQtZmlsdGVyIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItcmVtb3ZlLWZpbHRlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb25pdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBkZXZpY2UgbW9uaXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWx0ZXJfaWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaWQgb2YgdGhlIGZpbHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1tb25pdG9yLXJlbW92ZS1maWx0ZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb2YgdGhlIGZpbHRlciBpZCB3YXMgdmFsaWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZTwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3Itc3RhcnQiPjwvYT48aDM+Z3N0X2RldmljZV9tb25pdG9yX3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGV2aWNlX21vbml0b3Jfc3RhcnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT4gKm1vbml0b3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U3RhcnRzIG1vbml0b3JpbmcgdGhlIGRldmljZXMsIG9uZSB0aGlzIGhhcyBzdWNjZWVkZWQsIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1ERVZJQ0UtQURERUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0RFVklDRV9BRERFRDwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLURFVklDRS1SRU1PVkVEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRDwvY29kZT48L2E+IG1lc3NhZ2VzCi13aWxsIGJlIGVtaXR0ZWQgb24gdGhlIGJ1cyB3aGVuIHRoZSBsaXN0IG9mIGRldmljZXMgY2hhbmdlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3Itc3RhcnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vbml0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZU1vbml0b3I8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtbW9uaXRvci1zdGFydC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZGV2aWNlIG1vbml0b3JpbmcgY291bGQgYmUgc3RhcnRlZDwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3Itc3RvcCI+PC9hPjxoMz5nc3RfZGV2aWNlX21vbml0b3Jfc3RvcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+ICptb25pdG9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN0b3BzIG1vbml0b3JpbmcgdGhlIGRldmljZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1tb25pdG9yLXN0b3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vbml0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtbW9uaXRvci1nZXQtZGV2aWNlcyI+PC9hPjxoMz5nc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZpY2VzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+ICptb25pdG9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgYSBsaXN0IG9mIGRldmljZXMgZnJvbSBhbGwgb2YgdGhlIHJlbGV2YW50IG1vbml0b3JzLiBUaGlzIG1heSBhY3R1YWxseQotcHJvYmUgdGhlIGhhcmR3YXJlIGlmIHRoZSBtb25pdG9yIGlzIG5vdCBjdXJyZW50bHkgc3RhcnRlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItZ2V0LWRldmljZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vbml0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItZ2V0LWRldmljZXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdERldmljZV08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtbW9uaXRvci1nZXQtcHJvdmlkZXJzIj48L2E+PGgzPmdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfcHJvdmlkZXJzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqKgotZ3N0X2RldmljZV9tb25pdG9yX2dldF9wcm92aWRlcnMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT4gKm1vbml0b3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgbGlzdCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRldmljZSBwcm92aWRlciBmYWN0b3JpZXMuPC9wPgotPHA+VGhpczwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtbW9uaXRvci1nZXQtcHJvdmlkZXJzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb25pdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLW1vbml0b3ItZ2V0LXByb3ZpZGVycy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+ICAgIEEgbGlzdCBvZiBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBuYW1lcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcKLW1vbml0b3JlZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bW9uaXRvcjwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gbm90aGluZyBpcyBiZWluZyBtb25pdG9yZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ2NoYXIqXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1tb25pdG9yLWdldC1zaG93LWFsbC1kZXZpY2VzIj48L2E+PGgzPmdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfc2hvd19hbGxfZGV2aWNlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT4gKm1vbml0b3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tb25pdG9yPC9jb2RlPjwvZW0+Ci0gaXMgY3VycmV0bHkgc2hvd2luZyBhbGwgZGV2aWNlcywgZXZlbiB0aG9zZSBmcm9tIGhpZGRlbgotcHJvdmlkZXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtbW9uaXRvci1nZXQtc2hvdy1hbGwtZGV2aWNlcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bW9uaXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1tb25pdG9yLWdldC1zaG93LWFsbC1kZXZpY2VzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHdoZW4gYWxsIGRldmljZXMgd2lsbCBiZSBzaG93bi48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1tb25pdG9yLXNldC1zaG93LWFsbC1kZXZpY2VzIj48L2E+PGgzPmdzdF9kZXZpY2VfbW9uaXRvcl9zZXRfc2hvd19hbGxfZGV2aWNlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZXZpY2VfbW9uaXRvcl9zZXRfc2hvd19hbGxfZGV2aWNlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+ICptb25pdG9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gc2hvd19hbGw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IGlmIGFsbCBkZXZpY2VzIHNob3VsZCBiZSB2aXNpYmxlLCBldmVuIHRob3NlIGRldmljZXMgZnJvbSBoaWRkZW4KLXByb3ZpZGVycy4gU2V0dGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2hvd19hbGw8L2NvZGU+PC9lbT4KLSB0byB0cnVlIG1pZ2h0IHNob3cgc29tZSBkZXZpY2VzIG11bHRpcGxlIHRpbWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtbW9uaXRvci1zZXQtc2hvdy1hbGwtZGV2aWNlcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb25pdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNHc3REZXZpY2VNb25pdG9yIiB0aXRsZT0ic3RydWN0IEdzdERldmljZU1vbml0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VNb25pdG9yPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2hvd19hbGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zaG93IGFsbCBkZXZpY2VzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZ2V0LWhpZGRlbi1wcm92aWRlcnMiPjwvYT48aDM+Z3N0X2RldmljZV9wcm92aWRlcl9nZXRfaGlkZGVuX3Byb3ZpZGVyc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKioKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2hpZGRlbl9wcm92aWRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT4gKnByb3ZpZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgcHJvdmlkZXIgZmFjdG9yeSBuYW1lcyBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZXMgdGhhdAotYXJlIGhpZGRlbiBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvdmlkZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWdldC1oaWRkZW4tcHJvdmlkZXJzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm92aWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZ2V0LWhpZGRlbi1wcm92aWRlcnMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiAgYSBsaXN0IG9mIGhpZGRlbiBwcm92aWRlcnMgZmFjdG9yeSBuYW1lcyBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2hlbgotbm90aGluZyBpcyBoaWRkZW4gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3ZpZGVyPC9jb2RlPjwvZW0+Ci0uIEZyZWUgd2l0aCBnX3N0cmZyZWV2LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IGdjaGFyKl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItaGlkZS1wcm92aWRlciI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+ICpwcm92aWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1ha2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3ZpZGVyPC9jb2RlPjwvZW0+Ci0gaGlkZSB0aGUgZGV2aWNlcyBmcm9tIHRoZSBmYWN0b3J5IHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvdmlkZXI8L2NvZGU+PC9lbT4KLSB3aWxsIGFsc28gcHJvdmlkZSB0aGUgZGV2aWNlcyByZXBvcnRlZAotYnkgcHJvdmlkZXIgZmFjdG9yeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotLiBBIG1vbml0b3Igc2hvdWxkIHN0b3AgbW9uaXRvcmluZyB0aGUKLWRldmljZSBwcm92aWRlciB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0gdG8gYXZvaWQgZHVwbGljYXRlIGRldmljZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1oaWRlLXByb3ZpZGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3ZpZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHByb3ZpZGVyIGZhY3RvcnkgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLXVuaGlkZS1wcm92aWRlciI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX3VuaGlkZV9wcm92aWRlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZXZpY2VfcHJvdmlkZXJfdW5oaWRlX3Byb3ZpZGVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPiAqcHJvdmlkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1ha2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByb3ZpZGVyPC9jb2RlPjwvZW0+Ci0gdW5oaWRlIHRoZSBkZXZpY2VzIGZyb20gZmFjdG9yeSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wcm92aWRlcjwvY29kZT48L2VtPgotIHdpbGwgbm8gbG9uZ2VyIHByb3ZpZGUgdGhlIGRldmljZXMKLXJlcG9ydGVkIGJ5IHByb3ZpZGVyIGZhY3RvcnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLS4gQSBtb25pdG9yIHNob3VsZCBzdGFydAotbW9uaXRvcmluZyB0aGUgZGV2aWNlcyBmcm9tIHByb3ZpZGVyIGZhY3RvcnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5hbWU8L2NvZGU+PC9lbT4KLSBpbiBvcmRlciB0byBzZWUKLWFsbCBkZXZpY2VzIGFnYWluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItdW5oaWRlLXByb3ZpZGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3ZpZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHByb3ZpZGVyIGZhY3RvcnkgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZXZpY2VNb25pdG9yIj48L2E+PGgzPnN0cnVjdCBHc3REZXZpY2VNb25pdG9yPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvciB7Ci0gIEdzdE9iamVjdCAgICAgICAgICAgICAgICBwYXJlbnQ7Ci19OwotPC9wcmU+Ci08cD5PcGFxdWUgZGV2aWNlIG1vbml0b3Igb2JqZWN0IHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3REZXZpY2VNb25pdG9yLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERldmljZU1vbml0b3IucGFyZW50Ij48L2E+cGFyZW50PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERldmljZU1vbml0b3JDbGFzcyI+PC9hPjxoMz5zdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvckNsYXNzPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RGV2aWNlTW9uaXRvckNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICAgICAgICAgIHBhcmVudF9jbGFzczsKLX07Ci08L3ByZT4KLTxwPk9wYXF1ZSBkZXZpY2UgbW9uaXRvciBjbGFzcyBzdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RGV2aWNlTW9uaXRvckNsYXNzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzY2IzNS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODA0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3REZXZpY2VQcm92aWRlcjogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1kZXZpY2UtcHJvYmluZy5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIERldmljZSBEaXNjb3ZlcnkgYW5kIERldmljZSBQcm9iaW5nIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWRldmljZS1wcm9iaW5nLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvaDI+Ci08cD5Hc3REZXZpY2VQcm92aWRlciDigJQgQSBkZXZpY2UgcHJvdmlkZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jYW4tbW9uaXRvciIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfY2FuX21vbml0b3LCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2Nhbl9tb25pdG9yPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1hZGQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2FkZF9tZXRhZGF0YcKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1hZGQtc3RhdGljLW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1nZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2dldF9tZXRhZGF0YcKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfZ2V0X21ldGFkYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1zZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9tZXRhZGF0YcKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X21ldGFkYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1zZXQtc3RhdGljLW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1kZXZpY2UtYWRkIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9kZXZpY2VfYWRkwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9kZXZpY2VfYWRkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1kZXZpY2UtcmVtb3ZlIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9kZXZpY2VfcmVtb3ZlwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9kZXZpY2VfcmVtb3ZlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWdldC1idXMiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9idXPCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9idXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1nZXQtZGV2aWNlcyIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2RldmljZXPCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWdldC1mYWN0b3J5IiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfZmFjdG9yecKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2ZhY3Rvcnk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItcmVnaXN0ZXIiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3JlZ2lzdGVywqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9yZWdpc3RlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1zdGFydCIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfc3RhcnTCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1zdG9wIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9zdG9wwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9zdG9wPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlckNsYXNzIj5Hc3REZXZpY2VQcm92aWRlckNsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IHN1YmNsYXNzIGlzIHByb3ZpZGVkIGJ5IGEgcGx1Z2luIHRoYXQgaGFuZGxlcyBkZXZpY2VzCi1pZiB0aGVyZSBpcyBhIHdheSB0byBwcm9ncmFtYXRpY2FsbHkgbGlzdCBjb25uZWN0ZWQgZGV2aWNlcy4gSXQgY2FuIGFsc28KLW9wdGlvbmFsbHkgcHJvdmlkZSB1cGRhdGVzIHRvIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzLjwvcD4KLTxwPkVhY2ggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPiBzdWJjbGFzcyBpcyBhIHNpbmdsZXRvbiwgYSBwbHVnaW4gc2hvdWxkCi1ub3JtYWxseSBwcm92aWRlIGEgc2luZ2xlIHN1YmNsYXNzIGZvciBhbGwgZGV2aWNlcy48L3A+Ci08cD5BcHBsaWNhdGlvbnMgd291bGQgbm9ybWFsbHkgdXNlIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+IHRvIG1vbml0b3IgZGV2aWNlcwotZnJvbSBhbGwgcmVsZXZhbnQgcHJvdmlkZXJzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWNhbi1tb25pdG9yIj48L2E+PGgzPmdzdF9kZXZpY2VfcHJvdmlkZXJfY2FuX21vbml0b3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2FuX21vbml0b3IgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+ICpwcm92aWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItY2xhc3MtYWRkLW1ldGFkYXRhIj48L2E+PGgzPmdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfbWV0YWRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlckNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyQ2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckNsYXNzPC9zcGFuPjwvYT4gKmtsYXNzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmtleTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtleTwvY29kZT48L2VtPgotIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gYXMgbWV0YWRhdGEgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtsYXNzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1hZGQtbWV0YWRhdGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+a2xhc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jbGFzcyB0byBzZXQgbWV0YWRhdGEgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmtleTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBrZXkgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHZhbHVlIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWFkZC1zdGF0aWMtbWV0YWRhdGEiPjwvYT48aDM+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlckNsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJDbGFzczwvc3Bhbj48L2E+ICprbGFzczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICprZXk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rZXk8L2NvZGU+PC9lbT4KLSB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGFzIG1ldGFkYXRhIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5rbGFzczwvY29kZT48L2VtPgotLjwvcD4KLTxwPlNhbWUgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItY2xhc3MtYWRkLW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfbWV0YWRhdGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhKCk8L2NvZGU+PC9hPiwgYnV0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIG11c3QgYmUgYSBzdGF0aWMgc3RyaW5nCi1vciBhbiBpbmxpbmVkIHN0cmluZywgYXMgaXQgd2lsbCBub3QgYmUgY29waWVkLiAoR1N0cmVhbWVyIHBsdWdpbnMgd2lsbAotYmUgbWFkZSByZXNpZGVudCBvbmNlIGxvYWRlZCwgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBldmVuIGZyb20KLWR5bmFtaWNhbGx5IGxvYWRlZCBwbHVnaW5zLik8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWFkZC1zdGF0aWMtbWV0YWRhdGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+a2xhc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jbGFzcyB0byBzZXQgbWV0YWRhdGEgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmtleTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBrZXkgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSB2YWx1ZSB0byBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWdldC1tZXRhZGF0YSI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2dldF9tZXRhZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlckNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyQ2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckNsYXNzPC9zcGFuPjwvYT4gKmtsYXNzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmtleTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgbWV0YWRhdGEgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+a2V5PC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtsYXNzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1nZXQtbWV0YWRhdGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+a2xhc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jbGFzcyB0byBnZXQgbWV0YWRhdGEgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmtleTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBrZXkgdG8gZ2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWdldC1tZXRhZGF0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBtZXRhZGF0YSBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmtleTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLXNldC1tZXRhZGF0YSI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9tZXRhZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X21ldGFkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlckNsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJDbGFzczwvc3Bhbj48L2E+ICprbGFzczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpsb25nbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpjbGFzc2lmaWNhdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpkZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICphdXRob3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyQ2xhc3M8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJub3RlIj5UaGlzIGZ1bmN0aW9uIGlzIGZvciB1c2UgaW4gX2NsYXNzX2luaXQgZnVuY3Rpb25zIG9ubHkuPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLXNldC1tZXRhZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5rbGFzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNsYXNzIHRvIHNldCBtZXRhZGF0YSBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bG9uZ25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbG9uZyBFbmdsaXNoIG5hbWUgb2YgdGhlIGRldmljZSBwcm92aWRlci4gRS5nLiAiRmlsZSBTaW5rIjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbGFzc2lmaWNhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGRldmljZSBwcm92aWRlciwgYXMgYW4KLXVub3JkZXJlZCBsaXN0IHNlcGFyYXRlZCB3aXRoIHNsYXNoZXMgKCcvJykuIFNlZSBkcmFmdC1rbGFzcy50eHQgb2YgdGhlCi1kZXNpZ24gZG9jcwotZm9yIG1vcmUgZGV0YWlscyBhbmQgY29tbW9uIHR5cGVzLiBFLmc6ICJTaW5rL0ZpbGUiPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc2NyaXB0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U2VudGVuY2UgZGVzY3JpYmluZyB0aGUgcHVycG9zZSBvZiB0aGUgZGV2aWNlIHByb3ZpZGVyLgotRS5nOiAiV3JpdGUgc3RyZWFtIHRvIGEgZmlsZSI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXV0aG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBhdXRob3IocykuIFVzZSBcbiB0byBzZXBhcmF0ZQotbXVsdGlwbGUgYXV0aG9yIG1ldGFkYXRhLiBFLmc6ICJKb2UgQmxvZ2dzICZsdDtqb2UuYmxvZ3MgYXQgZm9vLmNvbSZndDsiPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItY2xhc3Mtc2V0LXN0YXRpYy1tZXRhZGF0YSI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlckNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyQ2xhc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlckNsYXNzPC9zcGFuPjwvYT4gKmtsYXNzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmxvbmduYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmNsYXNzaWZpY2F0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmF1dGhvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlckNsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJDbGFzczwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9Im5vdGUiPlRoaXMgZnVuY3Rpb24gaXMgZm9yIHVzZSBpbiBfY2xhc3NfaW5pdCBmdW5jdGlvbnMgb25seS48L2Rpdj4KLTxwPlNhbWUgYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItY2xhc3Mtc2V0LW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfbWV0YWRhdGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X21ldGFkYXRhKCk8L2NvZGU+PC9hPiwgYnV0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sb25nbmFtZTwvY29kZT48L2VtPgotLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y2xhc3NpZmljYXRpb248L2NvZGU+PC9lbT4KLSwKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXNjcmlwdGlvbjwvY29kZT48L2VtPgotLCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmF1dGhvcjwvY29kZT48L2VtPgotIG11c3QgYmUgc3RhdGljIHN0cmluZ3Mgb3IgaW5saW5lZCBzdHJpbmdzLCBhcwotdGhleSB3aWxsIG5vdCBiZSBjb3BpZWQuIChHU3RyZWFtZXIgcGx1Z2lucyB3aWxsIGJlIG1hZGUgcmVzaWRlbnQgb25jZQotbG9hZGVkLCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGV2ZW4gZnJvbSBkeW5hbWljYWxseSBsb2FkZWQgcGx1Z2lucy4pPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1zZXQtc3RhdGljLW1ldGFkYXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmtsYXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2xhc3MgdG8gc2V0IG1ldGFkYXRhIGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sb25nbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgbG9uZyBFbmdsaXNoIG5hbWUgb2YgdGhlIGVsZW1lbnQuIEUuZy4gIkZpbGUgU2luayIuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbGFzc2lmaWNhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBTdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlbGVtZW50LCBhcwotYW4gdW5vcmRlcmVkIGxpc3Qgc2VwYXJhdGVkIHdpdGggc2xhc2hlcyAoJy8nKS4gU2VlIGRyYWZ0LWtsYXNzLnR4dCBvZiB0aGUKLWRlc2lnbiBkb2NzIGZvciBtb3JlIGRldGFpbHMgYW5kIGNvbW1vbiB0eXBlcy4gRS5nOiAiU2luay9GaWxlIi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc2NyaXB0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFNlbnRlbmNlIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlCi1lbGVtZW50LiAgRS5nOiAiV3JpdGUgc3RyZWFtIHRvIGEgZmlsZSIuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hdXRob3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gTmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBhdXRob3IocykuIFVzZSBcbgotdG8gc2VwYXJhdGUgbXVsdGlwbGUgYXV0aG9yIG1ldGFkYXRhLiBFLmc6ICJKb2UgQmxvZ2dzICZsdDtqb2UuYmxvZ3MgYXQKLWZvby5jb20mZ3Q7Ii4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZGV2aWNlLWFkZCI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9hZGTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9hZGQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+ICpwcm92aWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+ICpkZXZpY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UG9zdHMgYSBtZXNzYWdlIG9uIHRoZSBwcm92aWRlcidzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IHRvIGluZm9ybSBhcHBsaWNhdGlvbnMgdGhhdAotYSBuZXcgZGV2aWNlIGhhcyBiZWVuIGFkZGVkLjwvcD4KLTxwPlRoaXMgaXMgZm9yIHVzZSBieSBzdWJjbGFzc2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZGV2aWNlLWFkZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm92aWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXZpY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiB0aGF0IGhhcyBiZWVuIGFkZGVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1kZXZpY2UtcmVtb3ZlIj48L2E+PGgzPmdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX3JlbW92ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX3JlbW92ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT4gKnByb3ZpZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlPC9zcGFuPjwvYT4gKmRldmljZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Qb3N0cyBhIG1lc3NhZ2Ugb24gdGhlIHByb3ZpZGVyJ3MgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT4gdG8gaW5mb3JtIGFwcGxpY2F0aW9ucyB0aGF0Ci1hIGRldmljZSBoYXMgYmVlbiByZW1vdmVkLjwvcD4KLTxwPlRoaXMgaXMgZm9yIHVzZSBieSBzdWJjbGFzc2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZGV2aWNlLXJlbW92ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm92aWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXZpY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+IHRoYXQgaGFzIGJlZW4gcmVtb3ZlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWdldC1idXMiPjwvYT48aDM+Z3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1czwvc3Bhbj48L2E+wqAqCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9idXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+ICpwcm92aWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBvZiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyPC9zcGFuPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLWdldC1idXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3ZpZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1nZXQtYnVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1nZXQtZGV2aWNlcyI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2RldmljZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+ICpwcm92aWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIGEgbGlzdCBvZiBkZXZpY2VzIHRoYXQgdGhpcyBwcm92aWRlciB1bmRlcnN0YW5kcy4gVGhpcyBtYXkgYWN0dWFsbHkKLXByb2JlIHRoZSBoYXJkd2FyZSBpZiB0aGUgcHJvdmlkZXIgaXMgbm90IGN1cnJlbnRseSBzdGFydGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZ2V0LWRldmljZXMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3ZpZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1nZXQtZGV2aWNlcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0RGV2aWNlXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1nZXQtZmFjdG9yeSI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9mYWN0b3J5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvc3Bhbj48L2E+wqAqCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9mYWN0b3J5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPiAqcHJvdmlkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmVzIHRoZSBmYWN0b3J5IHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoaXMgZGV2aWNlIHByb3ZpZGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZ2V0LWZhY3RvcnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3ZpZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IHRvIHJlcXVlc3QgdGhlIGRldmljZSBwcm92aWRlciBmYWN0b3J5IG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItZ2V0LWZhY3RvcnkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT4gdXNlZCBmb3IKLWNyZWF0aW5nIHRoaXMgZGV2aWNlIHByb3ZpZGVyLiBubyByZWZjb3VudGluZyBpcyBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X2RldmljZV9wcm92aWRlcl9yZWdpc3RlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RldmljZV9wcm92aWRlcl9yZWdpc3RlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+ICpwbHVnaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcmFuazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGRldmljZSBwcm92aWRlcmZhY3RvcnkgY2FwYWJsZSBvZiBpbnN0YW50aWF0aW5nIG9iamVjdHMgb2YgdGhlCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotIGFuZCBhZGQgdGhlIGZhY3RvcnkgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBsdWdpbjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItcmVnaXN0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBsdWdpbjwvc3Bhbj48L2E+IHRvIHJlZ2lzdGVyIHRoZSBkZXZpY2UgcHJvdmlkZXIgd2l0aCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvcgotYSBzdGF0aWMgZGV2aWNlIHByb3ZpZGVyLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiBkZXZpY2UgcHJvdmlkZXJzIG9mIHRoaXMgdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yYW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cmFuayBvZiBkZXZpY2UgcHJvdmlkZXIgKGhpZ2hlciByYW5rIG1lYW5zIG1vcmUgaW1wb3J0YW5jZSB3aGVuIGF1dG9wbHVnZ2luZyk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkdUeXBlIG9mIGRldmljZSBwcm92aWRlciB0byByZWdpc3RlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1yZWdpc3Rlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgaWYgdGhlIHJlZ2lzdGVyaW5nIHN1Y2NlZWRlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb24gZXJyb3I8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRldmljZS1wcm92aWRlci1zdGFydCI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPiAqcHJvdmlkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U3RhcnRzIHByb3ZpZGVyaW5nIHRoZSBkZXZpY2VzLiBUaGlzIHdpbGwgY2F1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1ERVZJQ0UtQURERUQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9NRVNTQUdFX0RFVklDRV9BRERFRDwvc3Bhbj48L2E+Ci1hbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1ERVZJQ0UtUkVNT1ZFRDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfREVWSUNFX1JFTU9WRUQ8L3NwYW4+PC9hPiBtZXNzYWdlcyB0byBiZSBwb3N0ZWQgb24gdGhlIHByb3ZpZGVyJ3MgYnVzCi13aGVuIGRldmljZXMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLjwvcD4KLTxwPlNpbmNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IGlzIGEgc2luZ2xldG9uLAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItc3RhcnQiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0KCk8L2NvZGU+PC9hPiBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gY2FsbGVkIGJ5IGFub3RoZXIKLXVzZXIgb2YgdGhlIG9iamVjdCwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItc3RvcCIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfc3RvcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2RldmljZV9wcm92aWRlcl9zdG9wKCk8L2NvZGU+PC9hPiBuZWVkcyB0byBiZSBjYWxsZWQgdGhlIHNhbWUKLW51bWJlciBvZiB0aW1lcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLXN0YXJ0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm92aWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItc3RhcnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGRldmljZSBwcm92aWRlcmluZyBjb3VsZCBiZSBzdGFydGVkPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZXZpY2UtcHJvdmlkZXItc3RvcCI+PC9hPjxoMz5nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3DCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3AgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+ICpwcm92aWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZWNyZWFzZXMgdGhlIHVzZS1jb3VudCBieSBvbmUuIElmIHRoZSB1c2UgY291bnQgcmVhY2hlcyB6ZXJvLCB0aGlzCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+IHdpbGwgc3RvcCBwcm92aWRlcmluZyB0aGUgZGV2aWNlcy4gVGhpcyBuZWVkcyB0byBiZQotY2FsbGVkIHRoZSBzYW1lIG51bWJlciBvZiB0aW1lcyB0aGF0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLXN0YXJ0IiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9zdGFydMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2RldmljZV9wcm92aWRlcl9zdGFydCgpPC9jb2RlPjwvYT4gd2FzIGNhbGxlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGV2aWNlLXByb3ZpZGVyLXN0b3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3ZpZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2VQcm92aWRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXIiPjwvYT48aDM+c3RydWN0IEdzdERldmljZVByb3ZpZGVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIgewotICBHc3RPYmplY3QgICAgICAgICBwYXJlbnQ7Ci0KLSAgLyogUHJvdGVjdGVkIGJ5IHRoZSBPYmplY3QgbG9jayAqLwotICBHTGlzdCAqZGV2aWNlczsKLX07Ci08L3ByZT4KLTxwPlRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI0dzdERldmljZVByb3ZpZGVyIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXI8L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXIucGFyZW50Ij48L2E+cGFyZW50PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcGFyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyLmRldmljZXMiPjwvYT5kZXZpY2VzPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjR3N0RGV2aWNlIiB0aXRsZT0ic3RydWN0IEdzdERldmljZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZTwvc3Bhbj48L2E+IG9iamVjdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdERldmljZVByb3ZpZGVyQ2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REZXZpY2VQcm92aWRlckNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICAgcGFyZW50X2NsYXNzOwotCi0gIEdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAgICAgKmZhY3Rvcnk7Ci0KLSAgR0xpc3QqICAgICAgKCpwcm9iZSkgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpOwotCi0gIGdib29sZWFuICAgICgqc3RhcnQpIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKTsKLSAgdm9pZCAgICAgICAgKCpzdG9wKSAgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpOwotfTsKLTwvcHJlPgotPHA+VGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VQcm92aWRlckNsYXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJDbGFzczwvc3Bhbj48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJDbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REZXZpY2VQcm92aWRlckNsYXNzLmZhY3RvcnkiPjwvYT5mYWN0b3J5PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIHBvaW50ZXIgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvc3Bhbj48L2E+IHRoYXQgY3JlYXRlcyB0aGlzCi1wcm92aWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERldmljZVByb3ZpZGVyQ2xhc3MucHJvYmUiPjwvYT5wcm9iZTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+UmV0dXJucyBhIGxpc3Qgb2YgZGV2aWNlcyB0aGF0IGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlLgotVGhpcyBzaG91bGQgbmV2ZXIgYmxvY2suPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RGV2aWNlUHJvdmlkZXJDbGFzcy5zdGFydCI+PC9hPnN0YXJ0PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5TdGFydHMgbW9uaXRvcmluZyBmb3IgbmV3IGRldmljZXMuIE9ubHkgc3ViY2xhc3NlcyB0aGF0IGNhbiBrbm93Ci10aGF0IGRldmljZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REZXZpY2VQcm92aWRlckNsYXNzLnN0b3AiPjwvYT5zdG9wPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5TdG9wcyBtb25pdG9yaW5nIGZvciBuZXcgZGV2aWNlcy4gT25seSBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50Ci10aGUgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5zdGFydCgpPC9jb2RlPiBtZXRob2QgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI0dzdERldmljZSIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZXZpY2U8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGV2aWNlTW9uaXRvcjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmYwZmU4Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RGb3JtYXQ6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEZvcm1hdC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RFdmVudC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0Rm9ybWF0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEZvcm1hdC50b3Bfb2ZfcGFnZSI+PC9hPkdzdEZvcm1hdDwvc3Bhbj48L2gyPgotPHA+R3N0Rm9ybWF0IOKAlCBEeW5hbWljYWxseSByZWdpc3RlciBuZXcgZGF0YSBmb3JtYXRzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RGb3JtYXQuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZm9ybWF0X2dldF9uYW1lwqAoKSI+Z3N0X2Zvcm1hdF9nZXRfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUXVhcms8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtdG8tcXVhcmsiIHRpdGxlPSJnc3RfZm9ybWF0X3RvX3F1YXJrwqAoKSI+Z3N0X2Zvcm1hdF90b19xdWFyazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X2Zvcm1hdF9yZWdpc3RlcsKgKCkiPmdzdF9mb3JtYXRfcmVnaXN0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1nZXQtYnktbmljayIgdGl0bGU9ImdzdF9mb3JtYXRfZ2V0X2J5X25pY2vCoCgpIj5nc3RfZm9ybWF0X2dldF9ieV9uaWNrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdHMtY29udGFpbnMiIHRpdGxlPSJnc3RfZm9ybWF0c19jb250YWluc8KgKCkiPmdzdF9mb3JtYXRzX2NvbnRhaW5zPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0RGVmaW5pdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RGb3JtYXREZWZpbml0aW9uIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZvcm1hdERlZmluaXRpb248L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtZ2V0LWRldGFpbHMiIHRpdGxlPSJnc3RfZm9ybWF0X2dldF9kZXRhaWxzwqAoKSI+Z3N0X2Zvcm1hdF9nZXRfZGV0YWlsczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1pdGVyYXRlLWRlZmluaXRpb25zIiB0aXRsZT0iZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zwqAoKSI+Z3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPkdzdEZvcm1hdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtUEVSQ0VOVC1NQVg6Q0FQUyIgdGl0bGU9IkdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgiPkdTVF9GT1JNQVRfUEVSQ0VOVF9NQVg8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVBFUkNFTlQtU0NBTEU6Q0FQUyIgdGl0bGU9IkdTVF9GT1JNQVRfUEVSQ0VOVF9TQ0FMRSI+R1NUX0ZPUk1BVF9QRVJDRU5UX1NDQUxFPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdERlZmluaXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiI+R3N0Rm9ybWF0RGVmaW5pdGlvbjwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0Rm9ybWF0LmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RGb3JtYXQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+R3N0Rm9ybWF0cyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcmVnaXN0ZXIgYSBuZXcgZm9ybWF0IHRvIHRoZSBnc3RyZWFtZXIKLWNvcmUuICBGb3JtYXRzIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gc2Vla2luZyBvciBjb252ZXJzaW9ucy9xdWVyeQotb3BlcmF0aW9ucy48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RGb3JtYXQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1mb3JtYXQtZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X2Zvcm1hdF9nZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgcHJpbnRhYmxlIG5hbWUgZm9yIHRoZSBnaXZlbiBmb3JtYXQuIERvIG5vdCBtb2RpZnkgb3IgZnJlZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZm9ybWF0LWdldC1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1mb3JtYXQtZ2V0LW5hbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIHJlZmVyZW5jZSB0byB0aGUgc3RhdGljIG5hbWUgb2YgdGhlIGZvcm1hdAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBmb3JtYXQgaXMgdW5rbm93bi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZm9ybWF0LXRvLXF1YXJrIj48L2E+PGgzPmdzdF9mb3JtYXRfdG9fcXVhcmvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4KLWdzdF9mb3JtYXRfdG9fcXVhcmsgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCIgdGl0bGU9ImVudW0gR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gZm9ybWF0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1mb3JtYXQtdG8tcXVhcmsucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZvcm1hdC10by1xdWFyay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBxdWFyayBhc3NvY2lhdGVkIHdpdGggdGhlIGZvcm1hdCBvciAwIGlmIHRoZSBmb3JtYXQKLWlzIHVua25vd24uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1mb3JtYXQtcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X2Zvcm1hdF9yZWdpc3RlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4KLWdzdF9mb3JtYXRfcmVnaXN0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmljazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZGVzY3JpcHRpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IEdzdEZvcm1hdCBiYXNlZCBvbiB0aGUgbmljayBvciByZXR1cm4gYW4KLWFscmVhZHkgcmVnaXN0ZXJlZCBmb3JtYXQgd2l0aCB0aGF0IG5pY2suPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZvcm1hdC1yZWdpc3Rlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uaWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5pY2sgb2YgdGhlIG5ldyBmb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzY3JpcHRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgZGVzY3JpcHRpb24gb2YgdGhlIG5ldyBmb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1mb3JtYXQtcmVnaXN0ZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIG5ldyBHc3RGb3JtYXQgb3IgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGZvcm1hdAotd2l0aCB0aGUgc2FtZSBuaWNrLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1mb3JtYXQtZ2V0LWJ5LW5pY2siPjwvYT48aDM+Z3N0X2Zvcm1hdF9nZXRfYnlfbmlja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4KLWdzdF9mb3JtYXRfZ2V0X2J5X25pY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmljazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm4gdGhlIGZvcm1hdCByZWdpc3RlcmVkIHdpdGggdGhlIGdpdmVuIG5pY2suPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZvcm1hdC1nZXQtYnktbmljay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmljazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBuaWNrIG9mIHRoZSBmb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZm9ybWF0LWdldC1ieS1uaWNrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGZvcm1hdCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uaWNrPC9jb2RlPjwvZW0+Ci1vciBHU1RfRk9STUFUX1VOREVGSU5FRAotaWYgdGhlIGZvcm1hdCB3YXMgbm90IHJlZ2lzdGVyZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1mb3JtYXRzLWNvbnRhaW5zIj48L2E+PGgzPmdzdF9mb3JtYXRzX2NvbnRhaW5zwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZm9ybWF0c19jb250YWlucyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0IiB0aXRsZT0iZW51bSBHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiAqZm9ybWF0czwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZWUgaWYgdGhlIGdpdmVuIGZvcm1hdCBpcyBpbnNpZGUgdGhlIGZvcm1hdCBhcnJheS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZm9ybWF0cy1jb250YWlucy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3JtYXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBmb3JtYXQgYXJyYXkgdG8gc2VhcmNoLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZvcm1hdCB0byBmaW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZm9ybWF0cy1jb250YWlucy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZm9ybWF0IGlzIGZvdW5kIGluc2lkZSB0aGUgYXJyYXk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWZvcm1hdC1nZXQtZGV0YWlscyI+PC9hPjxoMz5nc3RfZm9ybWF0X2dldF9kZXRhaWxzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXREZWZpbml0aW9uIiB0aXRsZT0ic3RydWN0IEdzdEZvcm1hdERlZmluaXRpb24iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rm9ybWF0RGVmaW5pdGlvbjwvc3Bhbj48L2E+wqAqCi1nc3RfZm9ybWF0X2dldF9kZXRhaWxzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZvcm1hdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgZGV0YWlscyBhYm91dCB0aGUgZ2l2ZW4gZm9ybWF0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1mb3JtYXQtZ2V0LWRldGFpbHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBmb3JtYXQgdG8gZ2V0IGRldGFpbHMgb2Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZm9ybWF0LWdldC1kZXRhaWxzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0RGVmaW5pdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RGb3JtYXREZWZpbml0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0RGVmaW5pdGlvbjwvc3Bhbj48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zm9ybWF0PC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4KLW9uIGZhaWx1cmUuPC9wPgotPHA+TVQgc2FmZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZm9ybWF0LWl0ZXJhdGUtZGVmaW5pdGlvbnMiPjwvYT48aDM+Z3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLWdzdF9mb3JtYXRfaXRlcmF0ZV9kZWZpbml0aW9ucyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JdGVyYXRlIGFsbCB0aGUgcmVnaXN0ZXJlZCBmb3JtYXRzLiBUaGUgZm9ybWF0IGRlZmluaXRpb24gaXMgcmVhZAotb25seS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZm9ybWF0LWl0ZXJhdGUtZGVmaW5pdGlvbnMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIEdzdEl0ZXJhdG9yIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0RGVmaW5pdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RGb3JtYXREZWZpbml0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0RGVmaW5pdGlvbjwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RGb3JtYXQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZvcm1hdCI+PC9hPjxoMz5lbnVtIEdzdEZvcm1hdDwvaDM+Ci08cD5TdGFuZGFyZCBwcmVkZWZpbmVkIGZvcm1hdHM8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RGb3JtYXQubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRk9STUFULVVOREVGSU5FRDpDQVBTIj48L2E+R1NUX0ZPUk1BVF9VTkRFRklORUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dW5kZWZpbmVkIGZvcm1hdDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRk9STUFULURFRkFVTFQ6Q0FQUyI+PC9hPkdTVF9GT1JNQVRfREVGQVVMVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgZGVmYXVsdCBmb3JtYXQgb2YgdGhlIHBhZC9lbGVtZW50LiBUaGlzIGNhbiBiZQotICAgc2FtcGxlcyBmb3IgcmF3IGF1ZGlvLCBmcmFtZXMvZmllbGRzIGZvciByYXcgdmlkZW8gKHNvbWUsIGJ1dCBub3QgYWxsLAotICAgZWxlbWVudHMgc3VwcG9ydCB0aGlzOyB1c2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTVF9GT1JNQVRfVElNRTwvY29kZT48L2VtPgotIGlmIHlvdSBkb24ndCBoYXZlIGEgZ29vZAotICAgcmVhc29uIHRvIHF1ZXJ5IGZvciBzYW1wbGVzL2ZyYW1lcyk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUZPUk1BVC1CWVRFUzpDQVBTIj48L2E+R1NUX0ZPUk1BVF9CWVRFUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5ieXRlczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRk9STUFULVRJTUU6Q0FQUyI+PC9hPkdTVF9GT1JNQVRfVElNRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aW1lIGluIG5hbm9zZWNvbmRzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1GT1JNQVQtQlVGRkVSUzpDQVBTIj48L2E+R1NUX0ZPUk1BVF9CVUZGRVJTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmJ1ZmZlcnMgKGZldywgaWYgYW55LCBlbGVtZW50cyBpbXBsZW1lbnQgdGhpcyBhcyBvZgotICAgIE1heSAyMDA5KTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRk9STUFULVBFUkNFTlQ6Q0FQUyI+PC9hPkdTVF9GT1JNQVRfUEVSQ0VOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wZXJjZW50YWdlIG9mIHN0cmVhbSAoZmV3LCBpZiBhbnksIGVsZW1lbnRzIGltcGxlbWVudAotICAgIHRoaXMgYXMgb2YgTWF5IDIwMDkpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRk9STUFULVBFUkNFTlQtTUFYOkNBUFMiPjwvYT48aDM+R1NUX0ZPUk1BVF9QRVJDRU5UX01BWDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRk9STUFUX1BFUkNFTlRfTUFYICAgICAgICAgIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwMDAwKQotPC9wcmU+Ci08cD5UaGUgUEVSQ0VOVCBmb3JtYXQgaXMgYmV0d2VlbiAwIGFuZCB0aGlzIHZhbHVlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRk9STUFULVBFUkNFTlQtU0NBTEU6Q0FQUyI+PC9hPjxoMz5HU1RfRk9STUFUX1BFUkNFTlRfU0NBTEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0ZPUk1BVF9QRVJDRU5UX1NDQUxFICAgICAgICBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMDApCi08L3ByZT4KLTxwPlRoZSB2YWx1ZSB1c2VkIHRvIHNjYWxlIGRvd24gdGhlIHJlcG9ydGVkIFBFUkNFTlQgZm9ybWF0IHZhbHVlIHRvCi1pdHMgcmVhbCB2YWx1ZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZvcm1hdERlZmluaXRpb24iPjwvYT48aDM+c3RydWN0IEdzdEZvcm1hdERlZmluaXRpb248L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RGb3JtYXREZWZpbml0aW9uIHsKLSAgR3N0Rm9ybWF0ICAgIHZhbHVlOwotICBjb25zdCBnY2hhciAqbmljazsKLSAgY29uc3QgZ2NoYXIgKmRlc2NyaXB0aW9uOwotICBHUXVhcmsgICAgICAgcXVhcms7Ci19OwotPC9wcmU+Ci08cD5BIGZvcm1hdCBkZWZpbml0aW9uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Rm9ybWF0RGVmaW5pdGlvbi5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RGb3JtYXREZWZpbml0aW9uLnZhbHVlIj48L2E+dmFsdWU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlRoZSB1bmlxdWUgaWQgb2YgdGhpcyBmb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD5jb25zdMKgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RGb3JtYXREZWZpbml0aW9uLm5pY2siPjwvYT5uaWNrPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5BIHNob3J0IG5pY2sgb2YgdGhlIGZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPmNvbnN0wqA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEZvcm1hdERlZmluaXRpb24uZGVzY3JpcHRpb24iPjwvYT5kZXNjcmlwdGlvbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+QSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RGb3JtYXREZWZpbml0aW9uLnF1YXJrIj48L2E+cXVhcms8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkEgcXVhcmsgZm9yIHRoZSBuaWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RGb3JtYXQuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWExNmI2Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzI4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RHRXJyb3I6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdEdFcnJvci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0RXZlbnQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0R0Vycm9yIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEdFcnJvci50b3Bfb2ZfcGFnZSI+PC9hPkdzdEdFcnJvcjwvc3Bhbj48L2gyPgotPHA+R3N0R0Vycm9yIOKAlCBDYXRlZ29yaXplZCBlcnJvciBtZXNzYWdlczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0R0Vycm9yLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNnc3QtZXJyb3ItZ2V0LW1lc3NhZ2UiIHRpdGxlPSJnc3RfZXJyb3JfZ2V0X21lc3NhZ2XCoCgpIj5nc3RfZXJyb3JfZ2V0X21lc3NhZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEdFcnJvci5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0Q29yZUVycm9yIiB0aXRsZT0iZW51bSBHc3RDb3JlRXJyb3IiPkdzdENvcmVFcnJvcjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0TGlicmFyeUVycm9yIiB0aXRsZT0iZW51bSBHc3RMaWJyYXJ5RXJyb3IiPkdzdExpYnJhcnlFcnJvcjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0UmVzb3VyY2VFcnJvciIgdGl0bGU9ImVudW0gR3N0UmVzb3VyY2VFcnJvciI+R3N0UmVzb3VyY2VFcnJvcjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0U3RyZWFtRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbUVycm9yIj5Hc3RTdHJlYW1FcnJvcjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1DT1JFLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfQ09SRV9FUlJPUiI+R1NUX0NPUkVfRVJST1I8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtTElCUkFSWS1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0xJQlJBUllfRVJST1IiPkdTVF9MSUJSQVJZX0VSUk9SPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfUkVTT1VSQ0VfRVJST1IiPkdTVF9SRVNPVVJDRV9FUlJPUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1TVFJFQU0tRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9TVFJFQU1fRVJST1IiPkdTVF9TVFJFQU1fRVJST1I8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtRVJST1ItU1lTVEVNOkNBUFMiIHRpdGxlPSJHU1RfRVJST1JfU1lTVEVNIj5HU1RfRVJST1JfU1lTVEVNPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEdFcnJvci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5HU3RyZWFtZXIgZWxlbWVudHMgY2FuIHRocm93IG5vbi1mYXRhbCB3YXJuaW5ncyBhbmQgZmF0YWwgZXJyb3JzLgotSGlnaGVyLWxldmVsIGVsZW1lbnRzIGFuZCBhcHBsaWNhdGlvbnMgY2FuIHByb2dyYW1tYXRpY2FsbHkgZmlsdGVyCi10aGUgb25lcyB0aGV5IGFyZSBpbnRlcmVzdGVkIGluIG9yIGNhbiByZWNvdmVyIGZyb20sCi1hbmQgaGF2ZSBhIGRlZmF1bHQgaGFuZGxlciBoYW5kbGUgdGhlIHJlc3Qgb2YgdGhlbS48L3A+Ci08cD5UaGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24gd2lsbCB1c2UgdGhlIHRlcm0gPHNwYW4gY2xhc3M9InF1b3RlIj7igJw8c3BhbiBjbGFzcz0icXVvdGUiPmVycm9yPC9zcGFuPuKAnTwvc3Bhbj4KLXRvIG1lYW4gYm90aCAobm9uLWZhdGFsKSB3YXJuaW5ncyBhbmQgKGZhdGFsKSBlcnJvcnM7IHRoZXkgYXJlIHRyZWF0ZWQKLXNpbWlsYXJseS48L3A+Ci08cD5FcnJvcnMgZnJvbSBlbGVtZW50cyBhcmUgdGhlIGNvbWJpbmF0aW9uIG9mIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gYW5kIGEgZGVidWcgc3RyaW5nLgotVGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+IGNvbnRhaW5zOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5hIGRvbWFpbiB0eXBlOiBDT1JFLCBMSUJSQVJZLCBSRVNPVVJDRSBvciBTVFJFQU08L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmEgY29kZTogYW4gZW51bSB2YWx1ZSBzcGVjaWZpYyB0byB0aGUgZG9tYWluPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5hIHRyYW5zbGF0ZWQsIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2U8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmEgbm9uLXRyYW5zbGF0ZWQgYWRkaXRpb25hbCBkZWJ1ZyBzdHJpbmcsIHdoaWNoIGFsc28gY29udGFpbnM8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmZpbGUgYW5kIGxpbmUgaW5mb3JtYXRpb248L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5FbGVtZW50cyBkbyBub3QgaGF2ZSB0aGUgY29udGV4dCByZXF1aXJlZCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoCi1lcnJvcnMuICBBcyBzdWNoLCB0aGV5IHNob3VsZCBvbmx5IGluZm9ybSBhYm91dCBlcnJvcnMsIGFuZCBzdG9wIHRoZWlyCi1wcm9jZXNzaW5nLiAgSW4gc2hvcnQsIGFuIGVsZW1lbnQgZG9lc24ndCBrbm93IHdoYXQgaXQgaXMgYmVpbmcgdXNlZCBmb3IuPC9wPgotPHA+SXQgaXMgdGhlIGFwcGxpY2F0aW9uIG9yIGNvbXBvdW5kIGVsZW1lbnQgdXNpbmcgdGhlIGdpdmVuIGVsZW1lbnQgdGhhdAotaGFzIG1vcmUgY29udGV4dCBhYm91dCB0aGUgdXNlIG9mIHRoZSBlbGVtZW50LiBFcnJvcnMgY2FuIGJlIHJlY2VpdmVkIGJ5Ci1saXN0ZW5pbmcgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9mIHRoZSBlbGVtZW50L3BpcGVsaW5lIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiBvYmplY3RzIHdpdGgKLXRoZSB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtRVJST1I6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX0VSUk9SPC9jb2RlPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1XQVJOSU5HOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVTU0FHRV9XQVJOSU5HPC9jb2RlPjwvYT4uIFRoZSB0aHJvd24gZXJyb3JzIHNob3VsZAotYmUgaW5zcGVjdGVkLCBhbmQgZmlsdGVyZWQgaWYgYXBwcm9wcmlhdGUuPC9wPgotPHA+QW4gYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8sIGJ5IGRlZmF1bHQsIHByZXNlbnQgdGhlIHVzZXIgd2l0aCBhCi1kaWFsb2cgYm94IChvciBhbiBlcXVpdmFsZW50KSBzaG93aW5nIHRoZSBlcnJvciBtZXNzYWdlLiAgVGhlIGRpYWxvZwotc2hvdWxkIGFsc28gYWxsb3cgYSB3YXkgdG8gZ2V0IGF0IHRoZSBhZGRpdGlvbmFsIGRlYnVnIGluZm9ybWF0aW9uLAotc28gdGhlIHVzZXIgY2FuIHByb3ZpZGUgYnVnIHJlcG9ydGluZyBpbmZvcm1hdGlvbi48L3A+Ci08cD5BIGNvbXBvdW5kIGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8gZm9yd2FyZCBlcnJvcnMgYnkgZGVmYXVsdCBoaWdoZXIgdXAKLXRoZSBoaWVyYXJjaHk7IHRoaXMgaXMgZG9uZSBieSBkZWZhdWx0IGluIHRoZSBzYW1lIHdheSBhcyBmb3Igb3RoZXIgdHlwZXMKLW9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+LjwvcD4KLTxwPldoZW4gYXBwbGljYXRpb25zIG9yIGNvbXBvdW5kIGVsZW1lbnRzIHRyaWdnZXIgZXJyb3JzIHRoYXQgdGhleSBjYW4KLXJlY292ZXIgZnJvbSwgdGhleSBjYW4gZmlsdGVyIG91dCB0aGVzZSBlcnJvcnMgYW5kIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uLgotRm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIHRoYXQgZ2V0cyBhbiBlcnJvciBmcm9tIHh2aW1hZ2VzaW5rCi10aGF0IGluZGljYXRlcyBhbGwgWFZpZGVvIHBvcnRzIGFyZSB0YWtlbiwgdGhlIGFwcGxpY2F0aW9uIGNhbiBhdHRlbXB0Ci10byB1c2UgYW5vdGhlciBzaW5rIGluc3RlYWQuPC9wPgotPHA+RWxlbWVudHMgdGhyb3cgZXJyb3JzIHVzaW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9FUlJPUigpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VMRU1FTlRfRVJST1I8L3NwYW4+PC9hPiBjb252ZW5pZW5jZSBtYWNybzo8L3A+Ci08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLTxhIG5hbWU9ImlkLTEuMy4yMy42LjEyIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlwqA1LsKgVGhyb3dpbmcgYW4gZXJyb3I8L2I+PC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRVJST1I6Q0FQUyI+R1NUX0VMRU1FTlRfRVJST1I8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zcmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gUkVTT1VSQ0U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTk9UX0ZPVU5EPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItSTE4Ti5odG1sI2dldHRleHQtbWFjcm8iPl88L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O05vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKSwgKDwvc3Bhbj5OVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpOzwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48cD5UaGluZ3MgdG8ga2VlcCBpbiBtaW5kOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5Eb24ndCBnbyBvZmYgaW52ZW50aW5nIG5ldyBlcnJvciBjb2Rlcy4gIFRoZSBvbmVzCi0gICAgY3VycmVudGx5IHByb3ZpZGVkIHNob3VsZCBiZSBlbm91Z2guICBJZiB5b3UgZmluZCB5b3VyIHR5cGUgb2YgZXJyb3IKLSAgICBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgY29kZXMsIHlvdSBzaG91bGQgdXNlIEZBSUxFRC48L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkRvbid0IHByb3ZpZGUgYSBtZXNzYWdlIGlmIHRoZSBkZWZhdWx0IG9uZSBzdWZmaWNlcy4KLSAgICB0aGlzIGtlZXBzIG1lc3NhZ2VzIG1vcmUgdW5pZm9ybS4gIFVzZSAoPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+KSAtIG5vdCBmb3JnZXR0aW5nIHRoZQotICAgIHBhcmVudGhlc2VzLjwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+SWYgeW91IGRvIHN1cHBseSBhIGN1c3RvbSBtZXNzYWdlLCBpdCBzaG91bGQgYmUKLSAgICBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uLiAgVGhlIG1lc3NhZ2Ugc2hvdWxkIHN0YXJ0IHdpdGggYSBjYXBpdGFsCi0gICAgYW5kIGVuZCB3aXRoIGEgcGVyaW9kLiAgVGhlIG1lc3NhZ2Ugc2hvdWxkIGRlc2NyaWJlIHRoZSBlcnJvciBpbiBzaG9ydCwKLSAgICBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm0sIGFuZCB3aXRob3V0IGFueSBjb21wbGV4IHRlY2huaWNhbCB0ZXJtcy4KLSAgICBBIHVzZXIgaW50ZXJmYWNlIHdpbGwgcHJlc2VudCB0aGlzIG1lc3NhZ2UgYXMgdGhlIGZpcnN0IHRoaW5nIGEgdXNlcgotICAgIHNlZXMuICBEZXRhaWxzLCB0ZWNobmljYWwgaW5mbywgLi4uIHNob3VsZCBnbyBpbiB0aGUgZGVidWcgc3RyaW5nLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPlRoZSBkZWJ1ZyBzdHJpbmcgY2FuIGJlIGFzIHlvdSBsaWtlLiAgQWdhaW4sIHVzZSAoPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+KQotICAgIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBhZGQgLSBmaWxlIGFuZCBsaW5lIG51bWJlciB3aWxsIHN0aWxsIGJlCi0gICAgcGFzc2VkLiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtRVJST1ItU1lTVEVNOkNBUFMiIHRpdGxlPSJHU1RfRVJST1JfU1lTVEVNIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0VSUk9SX1NZU1RFTTwvc3Bhbj48L2E+IGNhbiBiZSB1c2VkIGFzIGEgc2hvcnRjdXQgdG8gZ2l2ZQotICAgIGRlYnVnIGluZm9ybWF0aW9uIG9uIGEgc3lzdGVtIGNhbGwgZXJyb3IuPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0R0Vycm9yLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZXJyb3ItZ2V0LW1lc3NhZ2UiPjwvYT48aDM+Z3N0X2Vycm9yX2dldF9tZXNzYWdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZXJyb3JfZ2V0X21lc3NhZ2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBkb21haW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gY29kZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgY3VycmVudCBsb2NhbGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVycm9yLWdldC1tZXNzYWdlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRvbWFpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBHU3RyZWFtZXIgZXJyb3IgZG9tYWluIHRoaXMgZXJyb3IgYmVsb25ncyB0by48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlcnJvciBjb2RlIGJlbG9uZ2luZyB0byB0aGUgZG9tYWluLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVycm9yLWdldC1tZXNzYWdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGRlc2NyaWJpbmcKLXRoZSBlcnJvciBtZXNzYWdlIChpbiBVVEYtOCBlbmNvZGluZykuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEdFcnJvci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q29yZUVycm9yIj48L2E+PGgzPmVudW0gR3N0Q29yZUVycm9yPC9oMz4KLTxwPkNvcmUgZXJyb3JzIGFyZSBlcnJvcnMgaW5zaWRlIHRoZSBjb3JlIEdTdHJlYW1lciBsaWJyYXJ5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvcmVFcnJvci5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLUZBSUxFRDpDQVBTIj48L2E+R1NUX0NPUkVfRVJST1JfRkFJTEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmEgZ2VuZXJhbCBlcnJvciB3aGljaCBkb2Vzbid0IGZpdCBpbiBhbnkgb3RoZXIKLWNhdGVnb3J5LiAgTWFrZSBzdXJlIHlvdSBhZGQgYSBjdXN0b20gbWVzc2FnZSB0byB0aGUgZXJyb3IgY2FsbC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItVE9PLUxBWlk6Q0FQUyI+PC9hPkdTVF9DT1JFX0VSUk9SX1RPT19MQVpZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmRvIG5vdCB1c2UgdGhpcyBleGNlcHQgYXMgYSBwbGFjZWhvbGRlciBmb3IKLWRlY2lkaW5nIHdoZXJlIHRvIGdvIHdoaWxlIGRldmVsb3BpbmcgY29kZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItTk9ULUlNUExFTUVOVEVEOkNBUFMiPjwvYT5HU1RfQ09SRV9FUlJPUl9OT1RfSU1QTEVNRU5URUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlIHRoaXMgd2hlbiB5b3UgZG8gbm90IHdhbnQgdG8gaW1wbGVtZW50Ci10aGlzIGZ1bmN0aW9uYWxpdHkgeWV0LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1TVEFURS1DSEFOR0U6Q0FQUyI+PC9hPkdTVF9DT1JFX0VSUk9SX1NUQVRFX0NIQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIGZvciBzdGF0ZSBjaGFuZ2UgZXJyb3JzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1QQUQ6Q0FQUyI+PC9hPkdTVF9DT1JFX0VSUk9SX1BBRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIGZvciBwYWQtcmVsYXRlZCBlcnJvcnMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLVRIUkVBRDpDQVBTIj48L2E+R1NUX0NPUkVfRVJST1JfVEhSRUFEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgZm9yIHRocmVhZC1yZWxhdGVkIGVycm9ycy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItTkVHT1RJQVRJT046Q0FQUyI+PC9hPkdTVF9DT1JFX0VSUk9SX05FR09USUFUSU9OPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgZm9yIG5lZ290aWF0aW9uLXJlbGF0ZWQgZXJyb3JzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ09SRS1FUlJPUi1FVkVOVDpDQVBTIj48L2E+R1NUX0NPUkVfRVJST1JfRVZFTlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCBmb3IgZXZlbnQtcmVsYXRlZCBlcnJvcnMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLVNFRUs6Q0FQUyI+PC9hPkdTVF9DT1JFX0VSUk9SX1NFRUs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCBmb3Igc2Vlay1yZWxhdGVkIGVycm9ycy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItQ0FQUyI+PC9hPkdTVF9DT1JFX0VSUk9SX0NBUFM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCBmb3IgY2Fwcy1yZWxhdGVkIGVycm9ycy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItVEFHOkNBUFMiPjwvYT5HU1RfQ09SRV9FUlJPUl9UQUc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCBmb3IgbmVnb3RpYXRpb24tcmVsYXRlZCBlcnJvcnMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLU1JU1NJTkctUExVR0lOOkNBUFMiPjwvYT5HU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIGlmIGEgcGx1Z2luIGlzIG1pc3NpbmcuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLUNMT0NLOkNBUFMiPjwvYT5HU1RfQ09SRV9FUlJPUl9DTE9DSzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIGZvciBjbG9jayByZWxhdGVkIGVycm9ycy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPUkUtRVJST1ItRElTQUJMRUQ6Q0FQUyI+PC9hPkdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgaWYgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBkaXNhYmxlZCBhdAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlIHRpbWUuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyI+PC9hPkdTVF9DT1JFX0VSUk9SX05VTV9FUlJPUlM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIG51bWJlciBvZiBjb3JlIGVycm9yIHR5cGVzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TGlicmFyeUVycm9yIj48L2E+PGgzPmVudW0gR3N0TGlicmFyeUVycm9yPC9oMz4KLTxwPkxpYnJhcnkgZXJyb3JzIGFyZSBmb3IgZXJyb3JzIGZyb20gdGhlIGxpYnJhcnkgYmVpbmcgdXNlZCBieSBlbGVtZW50cwotKGluaXRpYWxpemluZywgZmluYWxpemluZywgc2V0dGluZ3MsIC4uLik8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RMaWJyYXJ5RXJyb3IubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTElCUkFSWS1FUlJPUi1GQUlMRUQ6Q0FQUyI+PC9hPkdTVF9MSUJSQVJZX0VSUk9SX0ZBSUxFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIGdlbmVyYWwgZXJyb3Igd2hpY2ggZG9lc24ndCBmaXQgaW4gYW55IG90aGVyCi1jYXRlZ29yeS4gIE1ha2Ugc3VyZSB5b3UgYWRkIGEgY3VzdG9tIG1lc3NhZ2UgdG8gdGhlIGVycm9yIGNhbGwuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MSUJSQVJZLUVSUk9SLVRPTy1MQVpZOkNBUFMiPjwvYT5HU1RfTElCUkFSWV9FUlJPUl9UT09fTEFaWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5kbyBub3QgdXNlIHRoaXMgZXhjZXB0IGFzIGEgcGxhY2Vob2xkZXIgZm9yCi1kZWNpZGluZyB3aGVyZSB0byBnbyB3aGlsZSBkZXZlbG9waW5nIGNvZGUuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MSUJSQVJZLUVSUk9SLUlOSVQ6Q0FQUyI+PC9hPkdTVF9MSUJSQVJZX0VSUk9SX0lOSVQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBvcGVuZWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MSUJSQVJZLUVSUk9SLVNIVVRET1dOOkNBUFMiPjwvYT5HU1RfTElCUkFSWV9FUlJPUl9TSFVURE9XTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIHdoZW4gdGhlIGxpYnJhcnkgY291bGQgbm90IGJlIGNsb3NlZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxJQlJBUlktRVJST1ItU0VUVElOR1M6Q0FQUyI+PC9hPkdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgd2hlbiB0aGUgbGlicmFyeSBkb2Vzbid0IGFjY2VwdCBzZXR0aW5ncy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxJQlJBUlktRVJST1ItRU5DT0RFOkNBUFMiPjwvYT5HU1RfTElCUkFSWV9FUlJPUl9FTkNPREU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGdlbmVyYXRlZCBhbiBlbmNvZGluZyBlcnJvci48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxJQlJBUlktRVJST1ItTlVNLUVSUk9SUzpDQVBTIj48L2E+R1NUX0xJQlJBUllfRVJST1JfTlVNX0VSUk9SUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgbnVtYmVyIG9mIGxpYnJhcnkgZXJyb3IgdHlwZXMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSZXNvdXJjZUVycm9yIj48L2E+PGgzPmVudW0gR3N0UmVzb3VyY2VFcnJvcjwvaDM+Ci08cD5SZXNvdXJjZSBlcnJvcnMgYXJlIGZvciBhbnkgcmVzb3VyY2UgdXNlZCBieSBhbiBlbGVtZW50OgotbWVtb3J5LCBmaWxlcywgbmV0d29yayBjb25uZWN0aW9ucywgcHJvY2VzcyBzcGFjZSwgLi4uCi1UaGV5J3JlIHR5cGljYWxseSB1c2VkIGJ5IHNvdXJjZSBhbmQgc2luayBlbGVtZW50cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSZXNvdXJjZUVycm9yLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SLUZBSUxFRDpDQVBTIj48L2E+R1NUX1JFU09VUkNFX0VSUk9SX0ZBSUxFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIGdlbmVyYWwgZXJyb3Igd2hpY2ggZG9lc24ndCBmaXQgaW4gYW55IG90aGVyCi1jYXRlZ29yeS4gIE1ha2Ugc3VyZSB5b3UgYWRkIGEgY3VzdG9tIG1lc3NhZ2UgdG8gdGhlIGVycm9yIGNhbGwuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1UT08tTEFaWTpDQVBTIj48L2E+R1NUX1JFU09VUkNFX0VSUk9SX1RPT19MQVpZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmRvIG5vdCB1c2UgdGhpcyBleGNlcHQgYXMgYSBwbGFjZWhvbGRlciBmb3IKLWRlY2lkaW5nIHdoZXJlIHRvIGdvIHdoaWxlIGRldmVsb3BpbmcgY29kZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SLU5PVC1GT1VORDpDQVBTIj48L2E+R1NUX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIHdoZW4gdGhlIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SLUJVU1k6Q0FQUyI+PC9hPkdTVF9SRVNPVVJDRV9FUlJPUl9CVVNZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgd2hlbiByZXNvdXJjZSBpcyBidXN5LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItT1BFTi1SRUFEOkNBUFMiPjwvYT5HU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9SRUFEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgd2hlbiByZXNvdXJjZSBmYWlscyB0byBvcGVuIGZvciByZWFkaW5nLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItT1BFTi1XUklURTpDQVBTIj48L2E+R1NUX1JFU09VUkNFX0VSUk9SX09QRU5fV1JJVEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHJlc291cmNlIGZhaWxzIHRvIG9wZW4gZm9yIHdyaXRpbmcuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1PUEVOLVJFQUQtV1JJVEU6Q0FQUyI+PC9hPkdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQURfV1JJVEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHJlc291cmNlIGNhbm5vdCBiZSBvcGVuZWQgZm9yCi1ib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcsIG9yIGVpdGhlciAoYnV0IHVuc3BlY2lmaWVkIHdoaWNoKS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SLUNMT1NFOkNBUFMiPjwvYT5HU1RfUkVTT1VSQ0VfRVJST1JfQ0xPU0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHRoZSByZXNvdXJjZSBjYW4ndCBiZSBjbG9zZWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1SRUFEOkNBUFMiPjwvYT5HU1RfUkVTT1VSQ0VfRVJST1JfUkVBRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIHdoZW4gdGhlIHJlc291cmNlIGNhbid0IGJlIHJlYWQgZnJvbS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SLVdSSVRFOkNBUFMiPjwvYT5HU1RfUkVTT1VSQ0VfRVJST1JfV1JJVEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHRoZSByZXNvdXJjZSBjYW4ndCBiZSB3cml0dGVuIHRvLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItU0VFSzpDQVBTIj48L2E+R1NUX1JFU09VUkNFX0VSUk9SX1NFRUs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIGEgc2VlayBvbiB0aGUgcmVzb3VyY2UgZmFpbHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1TWU5DOkNBUFMiPjwvYT5HU1RfUkVTT1VSQ0VfRVJST1JfU1lOQzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIHdoZW4gYSBzeW5jaHJvbml6ZSBvbiB0aGUgcmVzb3VyY2UgZmFpbHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1TRVRUSU5HUzpDQVBTIj48L2E+R1NUX1JFU09VUkNFX0VSUk9SX1NFVFRJTkdTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgd2hlbiBzZXR0aW5ncyBjYW4ndCBiZSBtYW5pcHVsYXRlZCBvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SLU5PLVNQQUNFLUxFRlQ6Q0FQUyI+PC9hPkdTVF9SRVNPVVJDRV9FUlJPUl9OT19TUEFDRV9MRUZUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgaGFzIG5vIHNwYWNlIGxlZnQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1SRVNPVVJDRS1FUlJPUi1OT1QtQVVUSE9SSVpFRDpDQVBTIj48L2E+R1NUX1JFU09VUkNFX0VSUk9SX05PVF9BVVRIT1JJWkVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgY2FuJ3QgYmUgb3BlbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gbWlzc2luZyBhdXRob3JpemF0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNpbmNlIDEuMi40KTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUkVTT1VSQ0UtRVJST1ItTlVNLUVSUk9SUzpDQVBTIj48L2E+R1NUX1JFU09VUkNFX0VSUk9SX05VTV9FUlJPUlM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIG51bWJlciBvZiByZXNvdXJjZSBlcnJvciB0eXBlcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0cmVhbUVycm9yIj48L2E+PGgzPmVudW0gR3N0U3RyZWFtRXJyb3I8L2gzPgotPHA+U3RyZWFtIGVycm9ycyBhcmUgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHN0cmVhbSBiZWluZyBwcm9jZXNzZWQ6Ci1mb3JtYXQgZXJyb3JzLCBtZWRpYSB0eXBlIGVycm9ycywgLi4uCi1UaGV5J3JlIHR5cGljYWxseSB1c2VkIGJ5IGRlY29kZXJzLCBkZW11eGVycywgY29udmVydGVycywgLi4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RyZWFtRXJyb3IubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLUZBSUxFRDpDQVBTIj48L2E+R1NUX1NUUkVBTV9FUlJPUl9GQUlMRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YSBnZW5lcmFsIGVycm9yIHdoaWNoIGRvZXNuJ3QgZml0IGluIGFueSBvdGhlcgotY2F0ZWdvcnkuICBNYWtlIHN1cmUgeW91IGFkZCBhIGN1c3RvbSBtZXNzYWdlIHRvIHRoZSBlcnJvciBjYWxsLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLVRPTy1MQVpZOkNBUFMiPjwvYT5HU1RfU1RSRUFNX0VSUk9SX1RPT19MQVpZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmRvIG5vdCB1c2UgdGhpcyBleGNlcHQgYXMgYSBwbGFjZWhvbGRlciBmb3IKLWRlY2lkaW5nIHdoZXJlIHRvIGdvIHdoaWxlIGRldmVsb3BpbmcgY29kZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1OT1QtSU1QTEVNRU5URUQ6Q0FQUyI+PC9hPkdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZSB0aGlzIHdoZW4geW91IGRvIG5vdCB3YW50IHRvIGltcGxlbWVudAotdGhpcyBmdW5jdGlvbmFsaXR5IHlldC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1UWVBFLU5PVC1GT1VORDpDQVBTIj48L2E+R1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIHdoZW4gdGhlIGVsZW1lbnQgZG9lc24ndCBrbm93IHRoZQotc3RyZWFtJ3MgdHlwZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1XUk9ORy1UWVBFOkNBUFMiPjwvYT5HU1RfU1RSRUFNX0VSUk9SX1dST05HX1RZUEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGFuZGxlIHRoaXMgdHlwZQotb2Ygc3RyZWFtLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLUNPREVDLU5PVC1GT1VORDpDQVBTIj48L2E+R1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHRoZXJlJ3Mgbm8gY29kZWMgdG8gaGFuZGxlIHRoZQotc3RyZWFtJ3MgdHlwZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1ERUNPREU6Q0FQUyI+PC9hPkdTVF9TVFJFQU1fRVJST1JfREVDT0RFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgd2hlbiBkZWNvZGluZyBmYWlscy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1FTkNPREU6Q0FQUyI+PC9hPkdTVF9TVFJFQU1fRVJST1JfRU5DT0RFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnVzZWQgd2hlbiBlbmNvZGluZyBmYWlscy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1ERU1VWDpDQVBTIj48L2E+R1NUX1NUUkVBTV9FUlJPUl9ERU1VWDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIHdoZW4gZGVtdXhpbmcgZmFpbHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tRVJST1ItTVVYOkNBUFMiPjwvYT5HU1RfU1RSRUFNX0VSUk9SX01VWDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIHdoZW4gbXV4aW5nIGZhaWxzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLUZPUk1BVDpDQVBTIj48L2E+R1NUX1NUUkVBTV9FUlJPUl9GT1JNQVQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHRoZSBzdHJlYW0gaXMgb2YgdGhlIHdyb25nIGZvcm1hdAotKGZvciBleGFtcGxlLCB3cm9uZyBjYXBzKS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1FUlJPUi1ERUNSWVBUOkNBUFMiPjwvYT5HU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dXNlZCB3aGVuIHRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZQotZGVjcnlwdGVkIGJlY2F1c2UgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbGVtZW50LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLURFQ1JZUFQtTk9LRVk6Q0FQUyI+PC9hPkdTVF9TVFJFQU1fRVJST1JfREVDUllQVF9OT0tFWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51c2VkIHdoZW4gdGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kCi1jYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaXMgYXZhaWxhYmxlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SLU5VTS1FUlJPUlM6Q0FQUyI+PC9hPkdTVF9TVFJFQU1fRVJST1JfTlVNX0VSUk9SUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50aGUgbnVtYmVyIG9mIHN0cmVhbSBlcnJvciB0eXBlcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DT1JFLUVSUk9SOkNBUFMiPjwvYT48aDM+R1NUX0NPUkVfRVJST1I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NPUkVfRVJST1IgICAgICBnc3RfY29yZV9lcnJvcl9xdWFyayAoKQotPC9wcmU+Ci08cD5FcnJvciBkb21haW4gZm9yIGNvcmUgc3lzdGVtLiBFcnJvcnMgaW4gdGhpcyBkb21haW4gd2lsbAotYmUgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RDb3JlRXJyb3IiIHRpdGxlPSJlbnVtIEdzdENvcmVFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvcmVFcnJvcjwvc3Bhbj48L2E+IGVudW1lcmF0aW9uLgotU2VlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+IGZvciBpbmZvcm1hdGlvbiBvbiBlcnJvciBkb21haW5zLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUxJQlJBUlktRVJST1I6Q0FQUyI+PC9hPjxoMz5HU1RfTElCUkFSWV9FUlJPUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTElCUkFSWV9FUlJPUiAgIGdzdF9saWJyYXJ5X2Vycm9yX3F1YXJrICgpCi08L3ByZT4KLTxwPkVycm9yIGRvbWFpbiBmb3IgbGlicmFyeSBsb2FkaW5nLiBFcnJvcnMgaW4gdGhpcyBkb21haW4gd2lsbAotYmUgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RMaWJyYXJ5RXJyb3IiIHRpdGxlPSJlbnVtIEdzdExpYnJhcnlFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExpYnJhcnlFcnJvcjwvc3Bhbj48L2E+IGVudW1lcmF0aW9uLgotU2VlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+IGZvciBpbmZvcm1hdGlvbiBvbiBlcnJvciBkb21haW5zLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJFU09VUkNFLUVSUk9SOkNBUFMiPjwvYT48aDM+R1NUX1JFU09VUkNFX0VSUk9SPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9SRVNPVVJDRV9FUlJPUiAgZ3N0X3Jlc291cmNlX2Vycm9yX3F1YXJrICgpCi08L3ByZT4KLTxwPkVycm9yIGRvbWFpbiBmb3IgcmVzb3VyY2UgaGFuZGxpbmcuIEVycm9ycyBpbiB0aGlzIGRvbWFpbiB3aWxsCi1iZSBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdFJlc291cmNlRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFJlc291cmNlRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZXNvdXJjZUVycm9yPC9zcGFuPjwvYT4gZW51bWVyYXRpb24uCi1TZWUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIGVycm9yIGRvbWFpbnMuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtU1RSRUFNLUVSUk9SOkNBUFMiPjwvYT48aDM+R1NUX1NUUkVBTV9FUlJPUjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RSRUFNX0VSUk9SICAgIGdzdF9zdHJlYW1fZXJyb3JfcXVhcmsgKCkKLTwvcHJlPgotPHA+RXJyb3IgZG9tYWluIGZvciBtZWRpYSBzdHJlYW0gcHJvY2Vzc2luZy4gRXJyb3JzIGluIHRoaXMgZG9tYWluIHdpbGwKLWJlIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR3N0U3RyZWFtRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbUVycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtRXJyb3I8L3NwYW4+PC9hPiBlbnVtZXJhdGlvbi4KLVNlZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiBmb3IgaW5mb3JtYXRpb24gb24gZXJyb3IgZG9tYWlucy48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1FUlJPUi1TWVNURU06Q0FQUyI+PC9hPjxoMz5HU1RfRVJST1JfU1lTVEVNPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9FUlJPUl9TWVNURU0gICAgKCJzeXN0ZW0gZXJyb3I6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKQotPC9wcmU+Ci08cD5CdWlsZHMgYSBzdHJpbmcgdXNpbmcgZXJybm8gZGVzY3JpYmluZyB0aGUgcHJldmlvdXNseSBmYWlsZWQgc3lzdGVtCi1jYWxsLiAgVG8gYmUgdXNlZCBhcyB0aGUgZGVidWcgYXJndW1lbnQgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRVJST1IoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FTEVNRU5UX0VSUk9SPC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RHRXJyb3Iuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjMzZlMi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzODI3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RJbmZvOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFN1cHBvcnQiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItc3VwcG9ydC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgU3VwcG9ydCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RJbmZvLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFRyYWNlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJbmZvIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEluZm8udG9wX29mX3BhZ2UiPjwvYT5Hc3RJbmZvPC9zcGFuPjwvaDI+Ci08cD5Hc3RJbmZvIOKAlCBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgZmFjaWxpdGllczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0SW5mby5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1TVFItTlVMTDpDQVBTIiB0aXRsZT0iR1NUX1NUUl9OVUxMKCkiPkdTVF9TVFJfTlVMTDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1QQUQtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX1BBRF9OQU1FKCkiPkdTVF9ERUJVR19QQURfTkFNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdExvZ0Z1bmN0aW9uIiB0aXRsZT0iR3N0TG9nRnVuY3Rpb27CoCgpIj4qR3N0TG9nRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ciIHRpdGxlPSJnc3RfZGVidWdfbG9nwqAoKSI+Z3N0X2RlYnVnX2xvZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZy12YWxpc3QiIHRpdGxlPSJnc3RfZGVidWdfbG9nX3ZhbGlzdMKgKCkiPmdzdF9kZWJ1Z19sb2dfdmFsaXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctbWVzc2FnZS1nZXQiIHRpdGxlPSJnc3RfZGVidWdfbWVzc2FnZV9nZXTCoCgpIj5nc3RfZGVidWdfbWVzc2FnZV9nZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ctZGVmYXVsdCIgdGl0bGU9ImdzdF9kZWJ1Z19sb2dfZGVmYXVsdMKgKCkiPmdzdF9kZWJ1Z19sb2dfZGVmYXVsdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxldmVsLWdldC1uYW1lIiB0aXRsZT0iZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lwqAoKSI+Z3N0X2RlYnVnX2xldmVsX2dldF9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctYWRkLWxvZy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uwqAoKSI+Z3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24iIHRpdGxlPSJnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbsKgKCkiPmdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1yZW1vdmUtbG9nLWZ1bmN0aW9uLWJ5LWRhdGEiIHRpdGxlPSJnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhwqAoKSI+Z3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1hY3RpdmUiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2FjdGl2ZcKgKCkiPmdzdF9kZWJ1Z19zZXRfYWN0aXZlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1pcy1hY3RpdmUiIHRpdGxlPSJnc3RfZGVidWdfaXNfYWN0aXZlwqAoKSI+Z3N0X2RlYnVnX2lzX2FjdGl2ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1jb2xvcmVkIiB0aXRsZT0iZ3N0X2RlYnVnX3NldF9jb2xvcmVkwqAoKSI+Z3N0X2RlYnVnX3NldF9jb2xvcmVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LWNvbG9yLW1vZGUiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2NvbG9yX21vZGXCoCgpIj5nc3RfZGVidWdfc2V0X2NvbG9yX21vZGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtY29sb3ItbW9kZS1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZ8KgKCkiPmdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctaXMtY29sb3JlZCIgdGl0bGU9ImdzdF9kZWJ1Z19pc19jb2xvcmVkwqAoKSI+Z3N0X2RlYnVnX2lzX2NvbG9yZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NvbG9yTW9kZSIgdGl0bGU9ImVudW0gR3N0RGVidWdDb2xvck1vZGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGVidWdDb2xvck1vZGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctZ2V0LWNvbG9yLW1vZGUiIHRpdGxlPSJnc3RfZGVidWdfZ2V0X2NvbG9yX21vZGXCoCgpIj5nc3RfZGVidWdfZ2V0X2NvbG9yX21vZGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtZGVmYXVsdC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkwqAoKSI+Z3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC10aHJlc2hvbGQtZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZ8KgKCkiPmdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zyb21fc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWdldC1kZWZhdWx0LXRocmVzaG9sZCIgdGl0bGU9ImdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGTCoCgpIj5nc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LXRocmVzaG9sZC1mb3ItbmFtZSIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zvcl9uYW1lwqAoKSI+Z3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy11bnNldC10aHJlc2hvbGQtZm9yLW5hbWUiIHRpdGxlPSJnc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lwqAoKSI+Z3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfQ0FURUdPUlkoKSI+R1NUX0RFQlVHX0NBVEVHT1JZPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUVYVEVSTjpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTigpIj5HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLVNUQVRJQzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQygpIj5HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUlOSVQ6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19DQVRFR09SWV9JTklUKCkiPkdTVF9ERUJVR19DQVRFR09SWV9JTklUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUdFVDpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCgpIj5HU1RfREVCVUdfQ0FURUdPUllfR0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWZyZWUiIHRpdGxlPSJnc3RfZGVidWdfY2F0ZWdvcnlfZnJlZcKgKCkiPmdzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktc2V0LXRocmVzaG9sZCIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkwqAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1yZXNldC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfY2F0ZWdvcnlfcmVzZXRfdGhyZXNob2xkwqAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtdGhyZXNob2xkIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGTCoCgpIj5nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1uYW1lIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lwqAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtY29sb3IiIHRpdGxlPSJnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9ywqAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9jb2xvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1kZXNjcmlwdGlvbiIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb27CoCgpIj5nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU2luZ2x5LUxpbmtlZC1MaXN0cy5odG1sI0dTTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HU0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctZ2V0LWFsbC1jYXRlZ29yaWVzIiB0aXRsZT0iZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllc8KgKCkiPmdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWNvbnN0cnVjdC10ZXJtLWNvbG9yIiB0aXRsZT0iZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9ywqAoKSI+Z3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY29uc3RydWN0LXdpbi1jb2xvciIgdGl0bGU9ImdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9ywqAoKSI+Z3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3I8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTEVWRUwtTE9HOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0xFVkVMX0xPRygpIj5HU1RfQ0FUX0xFVkVMX0xPRzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRVJST1ItT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0VSUk9SX09CSkVDVCgpIj5HU1RfQ0FUX0VSUk9SX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtV0FSTklORy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfV0FSTklOR19PQkpFQ1QoKSI+R1NUX0NBVF9XQVJOSU5HX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtSU5GTy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfSU5GT19PQkpFQ1QoKSI+R1NUX0NBVF9JTkZPX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVCVUctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0RFQlVHX09CSkVDVCgpIj5HU1RfQ0FUX0RFQlVHX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTE9HLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9MT0dfT0JKRUNUKCkiPkdTVF9DQVRfTE9HX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRklYTUUtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0ZJWE1FX09CSkVDVCgpIj5HU1RfQ0FUX0ZJWE1FX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtVFJBQ0UtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX1RSQUNFX09CSkVDVCgpIj5HU1RfQ0FUX1RSQUNFX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTUVNRFVNUC1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfTUVNRFVNUF9PQkpFQ1QoKSI+R1NUX0NBVF9NRU1EVU1QX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfRVJST1IoKSI+R1NUX0NBVF9FUlJPUjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtV0FSTklORzpDQVBTIiB0aXRsZT0iR1NUX0NBVF9XQVJOSU5HKCkiPkdTVF9DQVRfV0FSTklORzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtSU5GTzpDQVBTIiB0aXRsZT0iR1NUX0NBVF9JTkZPKCkiPkdTVF9DQVRfSU5GTzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVCVUc6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfREVCVUcoKSI+R1NUX0NBVF9ERUJVRzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTE9HOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0xPRygpIj5HU1RfQ0FUX0xPRzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRklYTUU6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfRklYTUUoKSI+R1NUX0NBVF9GSVhNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtVFJBQ0U6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfVFJBQ0UoKSI+R1NUX0NBVF9UUkFDRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtTUVNRFVNUDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9NRU1EVU1QKCkiPkdTVF9DQVRfTUVNRFVNUDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1FUlJPUi1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9FUlJPUl9PQkpFQ1QoKSI+R1NUX0VSUk9SX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1XQVJOSU5HLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX1dBUk5JTkdfT0JKRUNUKCkiPkdTVF9XQVJOSU5HX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0lORk9fT0JKRUNUKCkiPkdTVF9JTkZPX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19PQkpFQ1QoKSI+R1NUX0RFQlVHX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MT0ctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfTE9HX09CSkVDVCgpIj5HU1RfTE9HX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1GSVhNRS1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9GSVhNRV9PQkpFQ1QoKSI+R1NUX0ZJWE1FX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRS1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9UUkFDRV9PQkpFQ1QoKSI+R1NUX1RSQUNFX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1NRU1EVU1QLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX01FTURVTVBfT0JKRUNUKCkiPkdTVF9NRU1EVU1QX09CSkVDVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0VSUk9SKCkiPkdTVF9FUlJPUjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1XQVJOSU5HOkNBUFMiIHRpdGxlPSJHU1RfV0FSTklORygpIj5HU1RfV0FSTklORzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPOkNBUFMiIHRpdGxlPSJHU1RfSU5GTygpIj5HU1RfSU5GTzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHKCkiPkdTVF9ERUJVRzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MT0c6Q0FQUyIgdGl0bGU9IkdTVF9MT0coKSI+R1NUX0xPRzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1GSVhNRTpDQVBTIiB0aXRsZT0iR1NUX0ZJWE1FKCkiPkdTVF9GSVhNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRTpDQVBTIiB0aXRsZT0iR1NUX1RSQUNFKCkiPkdTVF9UUkFDRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1NRU1EVU1QOkNBUFMiIHRpdGxlPSJHU1RfTUVNRFVNUCgpIj5HU1RfTUVNRFVNUDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1SRUdJU1RFUi1GVU5DUFRSOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUigpIj5HU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfRlVOQ1BUUigpIj5HU1RfREVCVUdfRlVOQ1BUUjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19GVU5DUFRSX05BTUUoKSI+R1NUX0RFQlVHX0ZVTkNQVFJfTkFNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKSI+R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEUtV0lUSC1UUzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCkiPkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1wcmludC1zdGFjay10cmFjZSIgdGl0bGU9ImdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZcKgKCkiPmdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVRJTUUtQVJHUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVJHUygpIj5HU1RfVElNRV9BUkdTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVNUSU1FLUFSR1M6Q0FQUyIgdGl0bGU9IkdTVF9TVElNRV9BUkdTKCkiPkdTVF9TVElNRV9BUkdTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctYmluLXRvLWRvdC1kYXRhIiB0aXRsZT0iZ3N0X2RlYnVnX2Jpbl90b19kb3RfZGF0YcKgKCkiPmdzdF9kZWJ1Z19iaW5fdG9fZG90X2RhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1iaW4tdG8tZG90LWZpbGUiIHRpdGxlPSJnc3RfZGVidWdfYmluX3RvX2RvdF9maWxlwqAoKSI+Z3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWJpbi10by1kb3QtZmlsZS13aXRoLXRzIiB0aXRsZT0iZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzwqAoKSI+Z3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtaW5mby12YXNwcmludGYiIHRpdGxlPSJnc3RfaW5mb192YXNwcmludGbCoCgpIj5nc3RfaW5mb192YXNwcmludGY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXZwcmludGYiIHRpdGxlPSJnc3RfaW5mb19zdHJkdXBfdnByaW50ZsKgKCkiPmdzdF9pbmZvX3N0cmR1cF92cHJpbnRmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1pbmZvLXN0cmR1cC1wcmludGYiIHRpdGxlPSJnc3RfaW5mb19zdHJkdXBfcHJpbnRmwqAoKSI+Z3N0X2luZm9fc3RyZHVwX3ByaW50ZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJbmZvLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+R3N0RGVidWdMZXZlbDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtREVGQVVMVDpDQVBTIiB0aXRsZT0iR1NUX0xFVkVMX0RFRkFVTFQiPkdTVF9MRVZFTF9ERUZBVUxUPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1NQVg6Q0FQUyIgdGl0bGU9IkdTVF9MRVZFTF9NQVgiPkdTVF9MRVZFTF9NQVg8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NvbG9yRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdERlYnVnQ29sb3JGbGFncyI+R3N0RGVidWdDb2xvckZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDb2xvck1vZGUiIHRpdGxlPSJlbnVtIEdzdERlYnVnQ29sb3JNb2RlIj5Hc3REZWJ1Z0NvbG9yTW9kZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij5Hc3REZWJ1Z0NhdGVnb3J5PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdHcmFwaERldGFpbHMiIHRpdGxlPSJlbnVtIEdzdERlYnVnR3JhcGhEZXRhaWxzIj5Hc3REZWJ1Z0dyYXBoRGV0YWlsczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRlVOQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9GVU5DVElPTiI+R1NUX0ZVTkNUSU9OPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJ2YXJpYWJsZV90eXBlIj5leHRlcm48L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULURFRkFVTFQ6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfREVGQVVMVCI+R1NUX0NBVF9ERUZBVUxUPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1USU1FLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfRk9STUFUIj5HU1RfVElNRV9GT1JNQVQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVNUSU1FLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1NUSU1FX0ZPUk1BVCI+R1NUX1NUSU1FX0ZPUk1BVDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtUFRSLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1BUUl9GT1JNQVQiPkdTVF9QVFJfRk9STUFUPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1TRUdNRU5ULUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1NFR01FTlRfRk9STUFUIj5HU1RfU0VHTUVOVF9GT1JNQVQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEluZm8uaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEluZm8uZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+R1N0cmVhbWVyJ3MgZGVidWdnaW5nIHN1YnN5c3RlbSBpcyBhbiBlYXN5IHdheSB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdAotdGhlIGFwcGxpY2F0aW9uIGlzIGRvaW5nLiAgSXQgaXMgbm90IG1lYW50IGZvciBwcm9ncmFtbWluZyBlcnJvcnMuIFVzZSBHTGliCi1tZXRob2RzIChnX3dhcm5pbmcgYW5kIGZyaWVuZHMpIGZvciB0aGF0LjwvcD4KLTxwPlRoZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtIHdvcmtzIG9ubHkgYWZ0ZXIgR1N0cmVhbWVyIGhhcyBiZWVuIGluaXRpYWxpemVkPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5mb3IgZXhhbXBsZSBieSBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQiIHRpdGxlPSJnc3RfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+LjwvcD48L2xpPjwvdWw+PC9kaXY+Ci08cD5UaGUgZGVidWdnaW5nIHN1YnN5c3RlbSBpcyB1c2VkIHRvIGxvZyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHdoaWxlIHRoZQotYXBwbGljYXRpb24gcnVucy4gIEVhY2ggbWVzc2FnZXMgaGFzIHNvbWUgcHJvcGVydGllcyBhdHRhY2hlZCB0byBpdC4gQW1vbmcKLXRoZXNlIHByb3BlcnRpZXMgYXJlIHRoZSBkZWJ1Z2dpbmcgY2F0ZWdvcnksIHRoZSBzZXZlcml0eSAoY2FsbGVkICJsZXZlbCIKLWhlcmUpIGFuZCBhbiBvcHRpb25hbCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IGl0IGJlbG9uZ3MgdG8uIEVhY2ggb2YgdGhlc2UgbWVzc2FnZXMgaXMgc2VudAotdG8gYWxsIHJlZ2lzdGVyZWQgZGVidWdnaW5nIGhhbmRsZXJzLCB3aGljaCB0aGVuIGhhbmRsZSB0aGUgbWVzc2FnZXMuCi1HU3RyZWFtZXIgYXR0YWNoZXMgYSBkZWZhdWx0IGhhbmRsZXIgb24gc3RhcnR1cCwgd2hpY2ggb3V0cHV0cyByZXF1ZXN0ZWQKLW1lc3NhZ2VzIHRvIHN0ZGVyci48L3A+Ci08cD5NZXNzYWdlcyBhcmUgb3V0cHV0IGJ5IHVzaW5nIHNob3J0Y3V0IG1hY3JvcyBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfREVCVUc8L3NwYW4+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtRVJST1ItT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0VSUk9SX09CSkVDVCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX0NBVF9FUlJPUl9PQkpFQ1Q8L3NwYW4+PC9hPiBvciBzaW1pbGFyLiBUaGVzZSBhbGwgZXhwYW5kIHRvIGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLWxvZyIgdGl0bGU9ImdzdF9kZWJ1Z19sb2fCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZWJ1Z19sb2coKTwvY29kZT48L2E+Ci13aXRoIHRoZSByaWdodCBwYXJhbWV0ZXJzLgotVGhlIG9ubHkgdGhpbmcgYSBkZXZlbG9wZXIgd2lsbCBwcm9iYWJseSB3YW50IHRvIGRvIGlzIGRlZmluZSBoaXMgb3duCi1jYXRlZ29yaWVzLiBUaGlzIGlzIGVhc2lseSBkb25lIHdpdGggMyBsaW5lcy4gQXQgdGhlIHRvcCBvZiB5b3VyIGNvZGUsCi1kZWNsYXJlCi10aGUgdmFyaWFibGVzIGFuZCBzZXQgdGhlIGRlZmF1bHQgY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLVNUQVRJQzpDQVBTIj5HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bXlfY2F0ZWdvcnk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+ICA8c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8gZGVmaW5lIGNhdGVnb3J5IChzdGF0aWNhbGx5KTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBteV9jYXRlZ29yeTwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIHNldCBhcyBkZWZhdWx0PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD4KLUFmdGVyIHRoYXQgeW91IG9ubHkgbmVlZCB0byBpbml0aWFsaXplIHRoZSBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTI8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktSU5JVDpDQVBTIj5HU1RfREVCVUdfQ0FURUdPUllfSU5JVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm15X2NhdGVnb3J5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O215IGNhdGVnb3J5JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1RoaXMgaXMgbXkgdmVyeSBvd24mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+Ci1Jbml0aWFsaXphdGlvbiBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBjYXRlZ29yeSBpcyB1c2VkIGZpcnN0LgotUGx1Z2lucyBkbyB0aGlzCi1pbiB0aGVpciBwbHVnaW5faW5pdCBmdW5jdGlvbiwgbGlicmFyaWVzIGFuZCBhcHBsaWNhdGlvbnMgc2hvdWxkIGRvIHRoYXQKLWR1cmluZyB0aGVpciBpbml0aWFsaXphdGlvbi48L3A+Ci08cD5UaGUgd2hvbGUgZGVidWdnaW5nIHN1YnN5c3RlbSBjYW4gYmUgZGlzYWJsZWQgYXQgYnVpbGQgdGltZSB3aXRoIHBhc3NpbmcgdGhlCi0tLWRpc2FibGUtZ3N0LWRlYnVnIHN3aXRjaCB0byBjb25maWd1cmUuIElmIHRoaXMgaXMgZG9uZSwgZXZlcnkgZnVuY3Rpb24sCi1tYWNybyBhbmQgZXZlbiBzdHJ1Y3RzIGRlc2NyaWJlZCBpbiB0aGlzIGZpbGUgZXZhbHVhdGUgdG8gZGVmYXVsdCB2YWx1ZXMgb3IKLW5vdGhpbmcgYXQgYWxsLgotU28gZG9uJ3QgdGFrZSBhZGRyZXNzZXMgb2YgdGhlc2UgZnVuY3Rpb25zIG9yIHVzZSBvdGhlciB0cmlja3MuCi1JZiB5b3UgbXVzdCBkbyB0aGF0IGZvciBzb21lIHJlYXNvbiwgdGhlcmUgaXMgc3RpbGwgYW4gb3B0aW9uLgotSWYgdGhlIGRlYnVnZ2luZwotc3Vic3lzdGVtIHdhcyBjb21waWxlZCBvdXQsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwjR1NULURJU0FCTEUtR1NULURFQlVHOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9HU1RfREVCVUciPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRElTQUJMRV9HU1RfREVCVUc8L3NwYW4+PC9hPiBpcyBkZWZpbmVkIGluCi0mbHQ7Z3N0L2dzdC5oJmd0OywKLXNvIHlvdSBjYW4gY2hlY2sgdGhhdCBiZWZvcmUgZG9pbmcgeW91ciB0cmljay4KLURpc2FibGluZyB0aGUgZGVidWdnaW5nIHN1YnN5c3RlbSB3aWxsIGdpdmUgeW91IGEgc2xpZ2h0IChyZWFkOiB1bm5vdGljZWFibGUpCi1zcGVlZCBpbmNyZWFzZSBhbmQgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgeW91ciBjb21waWxlZCBjb2RlLiBUaGUgR1N0cmVhbWVyCi1saWJyYXJ5IGl0c2VsZiBiZWNvbWVzIGFyb3VuZCAxMCUgc21hbGxlci48L3A+Ci08cD5QbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGFyZSBuYW1pbmcgY29udmVudGlvbnMgZm9yIHRoZSBuYW1lcyBvZiBkZWJ1Z2dpbmcKLWNhdGVnb3JpZXMuIFRoZXNlIGFyZSBleHBsYWluZWQgYXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUlOSVQ6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19DQVRFR09SWV9JTklUKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQoKTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEluZm8uZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TVFItTlVMTDpDQVBTIj48L2E+PGgzPkdTVF9TVFJfTlVMTCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVFJfTlVMTChzdHIpICgoc3RyKSA/IChzdHIpIDogIihOVUxMKSIpCi08L3ByZT4KLTxwPk1hY3JvIHRvIHVzZSB3aGVuIGEgc3RyaW5nIG11c3Qgbm90IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgYnV0IG1heSBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIElmIHRoZSBzdHJpbmcKLWlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwgIihOVUxMKSIgaXMgcHJpbnRlZCBpbnN0ZWFkLgotSW4gR1N0cmVhbWVyIHByaW50ZiBzdHJpbmcgYXJndW1lbnRzIG1heSBub3QgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LCBiZWNhdXNlIG9uIHNvbWUKLXBsYXRmb3JtcyAoaWUgU29sYXJpcykgdGhlIGxpYmMgY3Jhc2hlcyBpbiB0aGF0IGNhc2UuIFRoaXMgaW5jbHVkZXMgZGVidWdnaW5nCi1zdHJpbmdzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1TVFItTlVMTC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBzdHJpbmcgdG8gY2hlY2suIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtREVCVUctUEFELU5BTUU6Q0FQUyI+PC9hPjxoMz5HU1RfREVCVUdfUEFEX05BTUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUocGFkKTwvcHJlPgotPHA+RXZhbHVhdGVzIHRvIDIgc3RyaW5ncywgdGhhdCBkZXNjcmliZSB0aGUgcGFkLiBPZnRlbiB1c2VkIGluIGRlYnVnZ2luZwotc3RhdGVtZW50cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtREVCVUctUEFELU5BTUUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBwYWQgdG8gZGVidWcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RMb2dGdW5jdGlvbiI+PC9hPjxoMz5Hc3RMb2dGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RMb2dGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWxlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZnVuY3Rpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBsaW5lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z01lc3NhZ2U8L3NwYW4+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnVuY3Rpb24gcHJvdG90eXBlIGZvciBhIGxvZ2dpbmcgZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctYWRkLWxvZy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbigpPC9jb2RlPjwvYT4uCi1Vc2UgR19HTlVDX05PX0lOU1RSVU1FTlQgb24gdGhhdCBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RMb2dGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXRlZ29yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxldmVsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpbGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5maWxlIG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mdW5jdGlvbiBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxpbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5saW5lIG51bWJlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBmb3IgdGhlIGxvZyBmdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctbG9nIj48L2E+PGgzPmdzdF9kZWJ1Z19sb2fCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGVidWdfbG9nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+ICpjYXRlZ29yeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+IGxldmVsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWxlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmdW5jdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbGluZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZvcm1hdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT4uLi48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TG9ncyB0aGUgZ2l2ZW4gbWVzc2FnZSB1c2luZyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgZGVidWdnaW5nIGhhbmRsZXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1sb2cucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0ZWdvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYXRlZ29yeSB0byBsb2c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGV2ZWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5sZXZlbCBvZiB0aGUgbWVzc2FnZSBpcyBpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZpbGUgdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlLCB1c3VhbGx5IHRoZSBfX0ZJTEVfXyBpZGVudGlmaWVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZ1bmN0aW9uIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGxpbmUgZnJvbSB0aGF0IHRoZSBtZXNzYWdlIHdhcyBlbWl0dGVkLCB1c3VhbGx5IF9fTElORV9fPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgb2JqZWN0IHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vbmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcHJpbnRmIHN0eWxlIGZvcm1hdCBzdHJpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1sb2ctdmFsaXN0Ij48L2E+PGgzPmdzdF9kZWJ1Z19sb2dfdmFsaXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2RlYnVnX2xvZ192YWxpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+IGxldmVsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlsZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZ1bmN0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbGluZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gYXJnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Mb2dzIHRoZSBnaXZlbiBtZXNzYWdlIHVzaW5nIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBkZWJ1Z2dpbmcgaGFuZGxlcnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWxvZy12YWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0ZWdvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYXRlZ29yeSB0byBsb2c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGV2ZWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5sZXZlbCBvZiB0aGUgbWVzc2FnZSBpcyBpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZpbGUgdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlLCB1c3VhbGx5IHRoZSBfX0ZJTEVfXyBpZGVudGlmaWVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZ1bmN0aW9uIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGxpbmUgZnJvbSB0aGF0IHRoZSBtZXNzYWdlIHdhcyBlbWl0dGVkLCB1c3VhbGx5IF9fTElORV9fPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgb2JqZWN0IHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vbmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcHJpbnRmIHN0eWxlIGZvcm1hdCBzdHJpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctbWVzc2FnZS1nZXQiPjwvYT48aDM+Z3N0X2RlYnVnX21lc3NhZ2VfZ2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZGVidWdfbWVzc2FnZV9nZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdNZXNzYWdlPC9zcGFuPiAqbWVzc2FnZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSA8c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdNZXNzYWdlPC9zcGFuPi4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkCi1pbiBkZWJ1ZyBoYW5kbGVycyB0byBleHRyYWN0IHRoZSBtZXNzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1tZXNzYWdlLWdldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZGVidWcgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1tZXNzYWdlLWdldC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSA8c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdNZXNzYWdlPC9zcGFuPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWxvZy1kZWZhdWx0Ij48L2E+PGgzPmdzdF9kZWJ1Z19sb2dfZGVmYXVsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZWJ1Z19sb2dfZGVmYXVsdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+IGxldmVsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZnVuY3Rpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbGluZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z01lc3NhZ2U8L3NwYW4+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoZSBkZWZhdWx0IGxvZ2dpbmcgaGFuZGxlciB1c2VkIGJ5IEdTdHJlYW1lci4gTG9nZ2luZyBmdW5jdGlvbnMgZ2V0IGNhbGxlZAotd2hlbmV2ZXIgYSBtYWNybyBsaWtlIEdTVF9ERUJVRyBvciBzaW1pbGFyIGlzIHVzZWQuIEJ5IGRlZmF1bHQgdGhpcyBmdW5jdGlvbgotaXMgc2V0dXAgdG8gb3V0cHV0IHRoZSBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGluZm8gdG8gc3RkZXJyIChvciB0aGUgbG9nIGZpbGUKLXNwZWNpZmllZCB2aWEgdGhlIEdTVF9ERUJVR19GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlKSBhcyByZWNlaXZlZCB2aWEKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5Zb3UgY2FuIGFkZCBvdGhlciBoYW5kbGVycyBieSB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctYWRkLWxvZy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbigpPC9jb2RlPjwvYT4uCi1BbmQgeW91IGNhbiByZW1vdmUgdGhpcyBoYW5kbGVyIGJ5IGNhbGxpbmcKLWdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk7PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWxvZy1kZWZhdWx0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdGVnb3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2F0ZWdvcnkgdG8gbG9nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxldmVsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGV2ZWwgb2YgdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmlsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmaWxlIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZSwgdXN1YWxseSB0aGUgX19GSUxFX18gaWRlbnRpZmllcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmdW5jdGlvbiB0aGF0IGVtaXR0ZWQgdGhlIG1lc3NhZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGluZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBsaW5lIGZyb20gdGhhdCB0aGUgbWVzc2FnZSB3YXMgZW1pdHRlZCwgdXN1YWxseSBfX0xJTkVfXzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGFjdHVhbCBtZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgb2JqZWN0IHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLAotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vbmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBGSUxFKiB0byBsb2cgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWxldmVsLWdldC1uYW1lIj48L2E+PGgzPmdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiBsZXZlbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRlYnVnZ2luZyBsZXZlbDwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1sZXZlbC1nZXQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGV2ZWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbGV2ZWwgdG8gZ2V0IHRoZSBuYW1lIGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1sZXZlbC1nZXQtbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuYW1lPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1hZGQtbG9nLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3RMb2dGdW5jdGlvbiIgdGl0bGU9IkdzdExvZ0Z1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExvZ0Z1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkcyB0aGUgbG9nZ2luZyBmdW5jdGlvbiB0byB0aGUgbGlzdCBvZiBsb2dnaW5nIGZ1bmN0aW9ucy4KLUJlIHN1cmUgdG8gdXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1pc2NlbGxhbmVvdXMtTWFjcm9zLmh0bWwjRy1HTlVDLU5PLUlOU1RSVU1FTlQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdfR05VQ19OT19JTlNUUlVNRU5UPC9zcGFuPjwvYT4gb24gdGhhdCBmdW5jdGlvbiwgaXQgaXMgbmVlZGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1hZGQtbG9nLWZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZnVuY3Rpb24gdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYWxsZWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci1pcyBub3QgdXNlZCBhbnltb3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1yZW1vdmUtbG9nLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdExvZ0Z1bmN0aW9uIiB0aXRsZT0iR3N0TG9nRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TG9nRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZXMgYWxsIHJlZ2lzdGVyZWQgaW5zdGFuY2VzIG9mIHRoZSBnaXZlbiBsb2dnaW5nIGZ1bmN0aW9ucy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctcmVtb3ZlLWxvZy1mdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbG9nIGZ1bmN0aW9uIHRvIHJlbW92ZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvCi1yZW1vdmUgdGhlIGRlZmF1bHQgbG9nIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1yZW1vdmUtbG9nLWZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gSG93IG1hbnkgaW5zdGFuY2VzIG9mIHRoZSBmdW5jdGlvbiB3ZXJlIHJlbW92ZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24tYnktZGF0YSI+PC9hPjxoMz5nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmVzIGFsbCByZWdpc3RlcmVkIGluc3RhbmNlcyBvZiBsb2cgZnVuY3Rpb25zIHdpdGggdGhlIGdpdmVuIHVzZXIgZGF0YS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctcmVtb3ZlLWxvZy1mdW5jdGlvbi1ieS1kYXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIG9mIHRoZSBsb2cgZnVuY3Rpb24gdG8gcmVtb3ZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLXJlbW92ZS1sb2ctZnVuY3Rpb24tYnktZGF0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEhvdyBtYW55IGluc3RhbmNlcyBvZiB0aGUgZnVuY3Rpb24gd2VyZSByZW1vdmVkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1zZXQtYWN0aXZlIj48L2E+PGgzPmdzdF9kZWJ1Z19zZXRfYWN0aXZlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2RlYnVnX3NldF9hY3RpdmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhY3RpdmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SWYgYWN0aXZhdGVkLCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlIHNlbnQgdG8gdGhlIGRlYnVnZ2luZwotaGFuZGxlcnMuCi1JdCBtYWtlcyBzZW5zZSB0byBkZWFjdGl2YXRlIGl0IGZvciBzcGVlZCBpc3N1ZXMuPC9wPgotPGRpdiBjbGFzcz0ibm90ZSI+PHA+VGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkc2FmZS4gSXQgbWFrZXMgc2Vuc2UgdG8gb25seSBjYWxsIGl0Ci1kdXJpbmcgaW5pdGlhbGl6YXRpb24uPC9wPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLXNldC1hY3RpdmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFjdGl2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPldoZXRoZXIgdG8gdXNlIGRlYnVnZ2luZyBvdXRwdXQgb3Igbm90PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctaXMtYWN0aXZlIj48L2E+PGgzPmdzdF9kZWJ1Z19pc19hY3RpdmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9kZWJ1Z19pc19hY3RpdmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIGRlYnVnZ2luZyBvdXRwdXQgaXMgYWN0aXZhdGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1pcy1hY3RpdmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIGRlYnVnZ2luZyBpcyBhY3RpdmF0ZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLXNldC1jb2xvcmVkIj48L2E+PGgzPmdzdF9kZWJ1Z19zZXRfY29sb3JlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZWJ1Z19zZXRfY29sb3JlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGNvbG9yZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyBvciB1bnNldHMgdGhlIHVzZSBvZiBjb2xvdXJlZCBkZWJ1Z2dpbmcgb3V0cHV0LgotU2FtZSBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LWNvbG9yLW1vZGUiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2NvbG9yX21vZGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZSgpPC9jb2RlPjwvYT4gd2l0aCB0aGUgYXJndW1lbnQgYmVpbmcKLWJlaW5nIEdTVF9ERUJVR19DT0xPUl9NT0RFX09OIG9yIEdTVF9ERUJVR19DT0xPUl9NT0RFX09GRi48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYmVmb3JlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQiIHRpdGxlPSJnc3RfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1zZXQtY29sb3JlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29sb3JlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPldoZXRoZXIgdG8gdXNlIGNvbG9yZWQgb3V0cHV0IG9yIG5vdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLXNldC1jb2xvci1tb2RlIj48L2E+PGgzPmdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ29sb3JNb2RlIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0NvbG9yTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ29sb3JNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGFuZ2VzIHRoZSBjb2xvcmluZyBtb2RlIGZvciBkZWJ1ZyBvdXRwdXQuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJlZm9yZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0IiB0aXRsZT0iZ3N0X2luaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbml0KCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctc2V0LWNvbG9yLW1vZGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgY29sb3JpbmcgbW9kZSBmb3IgZGVidWcgb3V0cHV0LiBTZWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdzdERlYnVnQ29sb3JNb2RlPC9jb2RlPjwvZW0+Ci0uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctc2V0LWNvbG9yLW1vZGUtZnJvbS1zdHJpbmciPjwvYT48aDM+Z3N0X2RlYnVnX3NldF9jb2xvcl9tb2RlX2Zyb21fc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2RlYnVnX3NldF9jb2xvcl9tb2RlX2Zyb21fc3RyaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm1vZGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hhbmdlcyB0aGUgY29sb3JpbmcgbW9kZSBmb3IgZGVidWcgb3V0cHV0LjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBiZWZvcmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5pdCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLXNldC1jb2xvci1tb2RlLWZyb20tc3RyaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGNvbG9yaW5nIG1vZGUgZm9yIGRlYnVnIG91dHB1dC4gT25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0ib24iLCAiYXV0byIsICJvZmYiLCAiZGlzYWJsZSIsICJ1bml4Ii48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1pcy1jb2xvcmVkIj48L2E+PGgzPmdzdF9kZWJ1Z19pc19jb2xvcmVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGVidWdfaXNfY29sb3JlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIGRlYnVnZ2luZyBvdXRwdXQgc2hvdWxkIGJlIGNvbG9yZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWlzLWNvbG9yZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGlmIHRoZSBkZWJ1ZyBvdXRwdXQgc2hvdWxkIGJlIGNvbG9yZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1nZXQtY29sb3ItbW9kZSI+PC9hPjxoMz5nc3RfZGVidWdfZ2V0X2NvbG9yX21vZGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NvbG9yTW9kZSIgdGl0bGU9ImVudW0gR3N0RGVidWdDb2xvck1vZGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGVidWdDb2xvck1vZGU8L3NwYW4+PC9hPgotZ3N0X2RlYnVnX2dldF9jb2xvcl9tb2RlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoYW5nZXMgdGhlIGNvbG9yaW5nIG1vZGUgZm9yIGRlYnVnIG91dHB1dC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctZ2V0LWNvbG9yLW1vZGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBzZWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdzdERlYnVnQ29sb3JNb2RlPC9jb2RlPjwvZW0+Ci1mb3IgcG9zc2libGUgdmFsdWVzLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctc2V0LWRlZmF1bHQtdGhyZXNob2xkIj48L2E+PGgzPmdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiBsZXZlbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBkZWZhdWx0IHRocmVzaG9sZCB0byB0aGUgZ2l2ZW4gbGV2ZWwgYW5kIHVwZGF0ZXMgYWxsIGNhdGVnb3JpZXMgdG8KLXVzZSB0aGlzIHRocmVzaG9sZC48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYmVmb3JlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQiIHRpdGxlPSJnc3RfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luaXQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1zZXQtZGVmYXVsdC10aHJlc2hvbGQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxldmVsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGV2ZWwgdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctc2V0LXRocmVzaG9sZC1mcm9tLXN0cmluZyI+PC9hPjxoMz5nc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zyb21fc3RyaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmxpc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHJlc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGRlYnVnIGxvZ2dpbmcgd2FudGVkIGluIHRoZSBzYW1lIGZvcm0gYXMgd2l0aCB0aGUgR1NUX0RFQlVHCi1lbnZpcm9ubWVudCB2YXJpYWJsZS4gWW91IGNhbiB1c2Ugd2lsZGNhcmRzIHN1Y2ggYXMgJyonLCBidXQgbm90ZSB0aGF0Ci10aGUgb3JkZXIgbWF0dGVycyB3aGVuIHlvdSB1c2Ugd2lsZCBjYXJkcywgZS5nLiAiZm9vc3JjOjYsKnNyYzozLCo6MiIgc2V0cwotZXZlcnl0aGluZyB0byBsb2cgbGV2ZWwgMi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctc2V0LXRocmVzaG9sZC1mcm9tLXN0cmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgImNhdGVnb3J5OmxldmVsIiBwYWlycyB0byBiZSB1c2VkCi1hcyBkZWJ1ZyBsb2dnaW5nIGxldmVsczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB0byBjbGVhciBhbGwgcHJldmlvdXNseS1zZXQgZGVidWcgbGV2ZWxzIGJlZm9yZSBzZXR0aW5nCi1uZXcgdGhyZXNob2xkcwotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgYWRkaW5nIHRoZSB0aHJlc2hvbGQgZGVzY3JpYmVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci10byB0aGUgb25lIGFscmVhZHkgc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctZ2V0LWRlZmF1bHQtdGhyZXNob2xkIj48L2E+PGgzPmdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPgotZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBkZWZhdWx0IHRocmVzaG9sZCB0aGF0IGlzIHVzZWQgZm9yIG5ldyBjYXRlZ29yaWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1nZXQtZGVmYXVsdC10aHJlc2hvbGQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgbGV2ZWw8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLXNldC10aHJlc2hvbGQtZm9yLW5hbWUiPjwvYT48aDM+Z3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+IGxldmVsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgYWxsIGNhdGVnb3JpZXMgd2hpY2ggbWF0Y2ggdGhlIGdpdmVuIGdsb2Igc3R5bGUgcGF0dGVybiB0byB0aGUgZ2l2ZW4KLWxldmVsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1zZXQtdGhyZXNob2xkLWZvci1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIHRoZSBjYXRlZ29yaWVzIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sZXZlbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxldmVsIHRvIHNldCB0aGVtIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy11bnNldC10aHJlc2hvbGQtZm9yLW5hbWUiPjwvYT48aDM+Z3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXNldHMgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBiYWNrIHRvIHRoZSBkZWZhdWx0IGxldmVsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy11bnNldC10aHJlc2hvbGQtZm9yLW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIHRoZSBjYXRlZ29yaWVzIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUNBVEVHT1JZOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX0NBVEVHT1JZKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RFQlVHX0NBVEVHT1JZKGNhdCkgR3N0RGVidWdDYXRlZ29yeSAqY2F0ID0gTlVMTAotPC9wcmU+Ci08cD5EZWZpbmVzIGEgR3N0RGVidWdDYXRlZ29yeSB2YXJpYWJsZS4KLVRoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtREVCVUctQ0FURUdPUlkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjYXRlZ29yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUNBVEVHT1JZLUVYVEVSTjpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKGNhdCkgZXh0ZXJuIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdAotPC9wcmU+Ci08cD5EZWNsYXJlcyBhIEdzdERlYnVnQ2F0ZWdvcnkgdmFyaWFibGUgYXMgZXh0ZXJuLiBVc2UgaW4gaGVhZGVyIGZpbGVzLgotVGhpcyBtYWNybyBleHBhbmRzIHRvIG5vdGhpbmcgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ERUJVRy1DQVRFR09SWS1FWFRFUk4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjYXRlZ29yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUNBVEVHT1JZLVNUQVRJQzpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKGNhdCkgc3RhdGljIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IE5VTEwKLTwvcHJlPgotPHA+RGVmaW5lcyBhIHN0YXRpYyBHc3REZWJ1Z0NhdGVnb3J5IHZhcmlhYmxlLgotVGhpcyBtYWNybyBleHBhbmRzIHRvIG5vdGhpbmcgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ERUJVRy1DQVRFR09SWS1TVEFUSUMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjYXRlZ29yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUNBVEVHT1JZLUlOSVQ6Q0FQUyI+PC9hPjxoMz5HU1RfREVCVUdfQ0FURUdPUllfSU5JVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKGNhdCxuYW1lLGNvbG9yLGRlc2NyaXB0aW9uKTwvcHJlPgotPHA+SW5pdGlhbGl6ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+IHdpdGggdGhlIGdpdmVuIHByb3BlcnRpZXMgYW5kIHNldCB0bwotdGhlIGRlZmF1bHQgdGhyZXNob2xkLjwvcD4KLTxkaXYgY2xhc3M9Im5vdGUiPgotPHA+Ci1UaGlzIG1hY3JvIGV4cGFuZHMgdG8gbm90aGluZyBpZiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuCi08L3A+Ci08cD4KLVdoZW4gbmFtaW5nIHlvdXIgY2F0ZWdvcnksIHBsZWFzZSBmb2xsb3cgdGhlIGZvbGxvd2luZyBjb252ZW50aW9ucyB0byBlbnN1cmUKLXRoYXQgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgZm9yIGNhdGVnb3JpZXMgd29ya3MgYXMgZXhwZWN0ZWQuIEl0IGlzIG5vdAotZWFydGgtc2hhdHRlcmluZyBpZiB5b3UgZG9uJ3QgZm9sbG93IHRoZXNlIGNvbnZlbnRpb25zLCBidXQgaXQgd291bGQgYmUgbmljZQotZm9yIGV2ZXJ5b25lLgotPC9wPgotPHA+Ci1JZiB5b3UgZGVmaW5lIGEgY2F0ZWdvcnkgZm9yIGEgcGx1Z2luIG9yIGEgZmVhdHVyZSBvZiBpdCwgbmFtZSB0aGUgY2F0ZWdvcnkKLWxpa2UgdGhlIGZlYXR1cmUuIFNvIGlmIHlvdSB3YW50ZWQgdG8gd3JpdGUgYSAiZmlsZXNyYyIgZWxlbWVudCwgeW91IHdvdWxkCi1uYW1lIHRoZSBjYXRlZ29yeSAiZmlsZXNyYyIuIFVzZSBsb3dlcmNhc2UgbGV0dGVycyBvbmx5LgotSWYgeW91IGRlZmluZSBtb3JlIHRoYW4gb25lIGNhdGVnb3J5IGZvciB0aGUgc2FtZSBlbGVtZW50LCBhcHBlbmQgYW4KLXVuZGVyc2NvcmUgYW5kIGFuIGlkZW50aWZpZXIgdG8geW91ciBjYXRlZ29yaWVzLCBsaWtlIHRoaXM6ICJmaWxlc3JjX2NhY2hlIgotPC9wPgotPHA+Ci1JZiB5b3UgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBhcHBsaWNhdGlvbiB1c2luZyBkZWJ1Z2dpbmcgY2F0ZWdvcmllcywgdXNlIGEKLWNvbW1vbiBwcmVmaXggZm9sbG93ZWQgYnkgYW4gdW5kZXJzY29yZSBmb3IgYWxsIHlvdXIgY2F0ZWdvcmllcy4gR1N0cmVhbWVyCi11c2VzIHRoZSBHU1QgcHJlZml4IHNvIEdTdHJlYW1lciBjYXRlZ29yaWVzIGxvb2sgbGlrZSAiR1NUX1NUQVRFUyIuIEJlIHN1cmUKLXRvIGluY2x1ZGUgdXBwZXJjYXNlIGxldHRlcnMuCi08L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ERUJVRy1DQVRFR09SWS1JTklULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjYXRlZ29yeSB0byBpbml0aWFsaXplLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb2xvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xvcnMgdG8gdXNlIGZvciBhIGNvbG9yIHJlcHJlc2VudGF0aW9uIG9yIDAgZm9yIG5vIGNvbG9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXNjcmlwdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUNBVEVHT1JZLUdFVDpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19DQVRFR09SWV9HRVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfR0VUKGNhdCxuYW1lKTwvcHJlPgotPHA+TG9va3MgdXAgYW4gZXhpc3RpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+IGJ5IGl0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotIGFuZCBzZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXQ8L2NvZGU+PC9lbT4KLS4gSWYgdGhlCi1jYXRlZ29yeSBpcyBub3QgZm91bmQsIGJ1dCBHU1RfQ0FUX0RFRkFVTFQgaXMgZGVmaW5lZCwgdGhhdCBpcyBhc3NpZ25lZCB0bwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPgotLiBPdGhlcndpc2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhdDwvY29kZT48L2VtPgotIHdpbGwgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1TVEFUSUM6Q0FQUyI+R1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmdzdF9teXBsdWdpbl9kZWJ1ZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfbXlwbHVnaW5fZGVidWc8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLVNUQVRJQzpDQVBTIj5HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+R1NUX0NBVF9QRVJGT1JNQU5DRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUlOSVQ6Q0FQUyI+R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5nc3RfbXlwbHVnaW5fZGVidWc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7bXlwbHVnaW4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O25pY2UgZWxlbWVudCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUNBVEVHT1JZLUdFVDpDQVBTIj5HU1RfREVCVUdfQ0FURUdPUllfR0VUPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+R1NUX0NBVF9QRVJGT1JNQU5DRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtHU1RfUEVSRk9STUFOQ0UmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULURFQlVHLUNBVEVHT1JZLUdFVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY2F0ZWdvcnkgdG8gaW5pdGlhbGl6ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxvZyBjYXRlZ29yeSBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1jYXRlZ29yeS1mcmVlIj48L2E+PGgzPmdzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZXMgYW5kIGZyZWVzIHRoZSBjYXRlZ29yeSBhbmQgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1jYXRlZ29yeS1mcmVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXRlZ29yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiB0byBmcmVlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNhdGVnb3J5LXNldC10aHJlc2hvbGQiPjwvYT48aDM+Z3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0xldmVsPC9zcGFuPjwvYT4gbGV2ZWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgdGhyZXNob2xkIG9mIHRoZSBjYXRlZ29yeSB0byB0aGUgZ2l2ZW4gbGV2ZWwuIERlYnVnIGluZm9ybWF0aW9uIHdpbGwKLW9ubHkgYmUgb3V0cHV0IGlmIHRoZSB0aHJlc2hvbGQgaXMgbG93ZXIgb3IgZXF1YWwgdG8gdGhlIGxldmVsIG9mIHRoZQotZGVidWdnaW5nIG1lc3NhZ2UuPC9wPgotPGRpdiBjbGFzcz0ibm90ZSI+PHA+Ci1EbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW4gcHJvZHVjdGlvbiBjb2RlLCBiZWNhdXNlIG90aGVyIGZ1bmN0aW9ucyBtYXkKLWNoYW5nZSB0aGUgdGhyZXNob2xkIG9mIGNhdGVnb3JpZXMgYXMgc2lkZSBlZmZlY3QuIEl0IGlzIGhvd2V2ZXIgYSBuaWNlCi1mdW5jdGlvbiB0byB1c2Ugd2hlbiBkZWJ1Z2dpbmcgKGV2ZW4gZnJvbSBnZGIpLgotPC9wPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNhdGVnb3J5LXNldC10aHJlc2hvbGQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0ZWdvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiB0byBzZXQgdGhyZXNob2xkIG9mLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sZXZlbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0xldmVsIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0xldmVsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+IHRocmVzaG9sZCB0byBzZXQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1jYXRlZ29yeS1yZXNldC10aHJlc2hvbGQiPjwvYT48aDM+Z3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kZWJ1Z19jYXRlZ29yeV9yZXNldF90aHJlc2hvbGQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlc2V0cyB0aGUgdGhyZXNob2xkIG9mIHRoZSBjYXRlZ29yeSB0byB0aGUgZGVmYXVsdCBsZXZlbC4gRGVidWcgaW5mb3JtYXRpb24KLXdpbGwgb25seSBiZSBvdXRwdXQgaWYgdGhlIHRocmVzaG9sZCBpcyBsb3dlciBvciBlcXVhbCB0byB0aGUgbGV2ZWwgb2YgdGhlCi1kZWJ1Z2dpbmcgbWVzc2FnZS4KLVVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgdGhyZXNob2xkIGJhY2sgdG8gd2hlcmUgaXQgd2FzIGFmdGVyIHVzaW5nCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctY2F0ZWdvcnktc2V0LXRocmVzaG9sZCIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNhdGVnb3J5LXJlc2V0LXRocmVzaG9sZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0ZWdvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiB0byByZXNldCB0aHJlc2hvbGQgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LXRocmVzaG9sZCI+PC9hPjxoMz5nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RGVidWdMZXZlbDwvc3Bhbj48L2E+Ci1nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgdGhyZXNob2xkIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtdGhyZXNob2xkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXRlZ29yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+IHRvIGdldCB0aHJlc2hvbGQgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC10aHJlc2hvbGQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdMZXZlbCIgdGl0bGU9ImVudW0gR3N0RGVidWdMZXZlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnTGV2ZWw8L3NwYW4+PC9hPiB0aGF0IGlzIHVzZWQgYXMgdGhyZXNob2xkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIG5hbWUgb2YgYSBkZWJ1ZyBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LW5hbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdGVnb3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gdG8gZ2V0IG5hbWUgb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1uYW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWNvbG9yIj48L2E+PGgzPmdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3IgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0NhdGVnb3J5IiB0aXRsZT0ic3RydWN0IEdzdERlYnVnQ2F0ZWdvcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0NhdGVnb3J5PC9zcGFuPjwvYT4gKmNhdGVnb3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIGNvbG9yIG9mIGEgZGVidWcgY2F0ZWdvcnkgdXNlZCB3aGVuIHByaW50aW5nIG91dHB1dCBpbiB0aGlzCi1jYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWNvbG9yLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXRlZ29yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+IHRvIGdldCB0aGUgY29sb3Igb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1jb2xvci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBjb2xvciBvZiB0aGUgY2F0ZWdvcnkuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtZGVzY3JpcHRpb24iPjwvYT48aDM+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ2F0ZWdvcnkiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVidWdDYXRlZ29yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlYnVnQ2F0ZWdvcnk8L3NwYW4+PC9hPiAqY2F0ZWdvcnk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgZGVzY3JpcHRpb24gb2YgYSBkZWJ1ZyBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctY2F0ZWdvcnktZ2V0LWRlc2NyaXB0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXRlZ29yeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdDYXRlZ29yeTwvc3Bhbj48L2E+IHRvIGdldCB0aGUgZGVzY3JpcHRpb24gb2YuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNhdGVnb3J5LWdldC1kZXNjcmlwdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY2F0ZWdvcnkuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1nZXQtYWxsLWNhdGVnb3JpZXMiPjwvYT48aDM+Z3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVNpbmdseS1MaW5rZWQtTGlzdHMuaHRtbCNHU0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1NMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIHNuYXBzaG90IG9mIGEgYWxsIGNhdGVnb3JpZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIHVzZSAuIFRoaXMgbGlzdAotbWF5IGNoYW5nZSBhbnl0aW1lLgotVGhlIGNhbGxlciBoYXMgdG8gZnJlZSB0aGUgbGlzdCBhZnRlciB1c2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWdldC1hbGwtY2F0ZWdvcmllcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBsaXN0IG9mCi1kZWJ1ZyBjYXRlZ29yaWVzLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgY29udGFpbmVyIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgY29udGFpbmVyPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdC5EZWJ1Z0NhdGVnb3J5XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNvbnN0cnVjdC10ZXJtLWNvbG9yIj48L2E+PGgzPmdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gY29sb3JpbmZvPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnN0cnVjdHMgYSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZ2V0dGluZyB0aGUgZGVzaXJlZCBjb2xvciBpbiBjb2xvcgotdGVybWluYWxzLgotWW91IG5lZWQgdG8gZnJlZSB0aGUgc3RyaW5nIGFmdGVyIHVzZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGVidWctY29uc3RydWN0LXRlcm0tY29sb3IucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbG9yaW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xvciBpbmZvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNvbnN0cnVjdC10ZXJtLWNvbG9yLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29sb3IKLWRlZmluaXRpb24uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik92ZXJyaWRlIHRoZSBwYXJzZWQgQyB0eXBlIHdpdGggZ2l2ZW4gdHlwZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50eXBlPC9zcGFuPjwvYWNyb255bT4gZ2NoYXIqXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWNvbnN0cnVjdC13aW4tY29sb3IiPjwvYT48aDM+Z3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGNvbG9yaW5mbzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25zdHJ1Y3RzIGFuIGludGVnZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZ2V0dGluZyB0aGUgZGVzaXJlZCBjb2xvciBpbgotd2luZG93cycgdGVybWluYWxzIChjbWQuZXhlKS4gQXMgdGhlcmUgaXMgbm8gbWVhbiB0byB1bmRlcmxpbmUsIHdlIHNpbXBseQotaWdub3JlIHRoaXMgYXR0cmlidXRlLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uIG5vbi13aW5kb3dzIG1hY2hpbmVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1jb25zdHJ1Y3Qtd2luLWNvbG9yLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb2xvcmluZm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29sb3IgaW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1jb25zdHJ1Y3Qtd2luLWNvbG9yLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb2xvciBkZWZpbml0aW9uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVQtTEVWRUwtTE9HOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9MRVZFTF9MT0coKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfQ0FUX0xFVkVMX0xPRyhjYXQsbGV2ZWwsb2JqZWN0LC4uLik8L3ByZT4KLTxwPk91dHB1dHMgYSBkZWJ1Z2dpbmcgbWVzc2FnZS4gVGhpcyBpcyB0aGUgbW9zdCBnZW5lcmFsIG1hY3JvIGZvciBvdXRwdXR0aW5nCi1kZWJ1Z2dpbmcgbWVzc2FnZXMuIFlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgb25lcyBkZXNjcmliZWQKLWJlbG93LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVQtTEVWRUwtTE9HLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhdGVnb3J5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sZXZlbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0byBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm9uZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBVC1FUlJPUi1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX0VSUk9SX09CSkVDVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfRVJST1JfT0JKRUNUKGNhdCxvYmosLi4uKcKgR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0VSUk9SLCAgIG9iaiwgIF9fVkFfQVJHU19fKQotPC9wcmU+Ci08cD5PdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNBVC1FUlJPUi1PQkpFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2F0ZWdvcnkgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVQtV0FSTklORy1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9XQVJOSU5HX09CSkVDVChjYXQsb2JqLC4uLinCoEdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9XQVJOSU5HLCBvYmosICBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGEgd2FybmluZyBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBnaXZlbiBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FULVdBUk5JTkctT0JKRUNULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhdGVnb3J5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FULUlORk8tT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9JTkZPX09CSkVDVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfSU5GT19PQkpFQ1QoY2F0LG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfSU5GTywgICAgb2JqLCAgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGdpdmVuCi1jYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FULUlORk8tT0JKRUNULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhdGVnb3J5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FULURFQlVHLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9DQVRfREVCVUdfT0JKRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9ERUJVR19PQkpFQ1QoY2F0LG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfREVCVUcsICAgb2JqLCAgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhbiBkZWJ1Z2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNBVC1ERUJVRy1PQkpFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2F0ZWdvcnkgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVQtTE9HLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9DQVRfTE9HX09CSkVDVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfTE9HX09CSkVDVChjYXQsb2JqLC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9MT0csICAgICBvYmosICBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGFuIGxvZ2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNBVC1MT0ctT0JKRUNULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhdGVnb3J5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FULUZJWE1FLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9DQVRfRklYTUVfT0JKRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9GSVhNRV9PQkpFQ1QoY2F0LG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfRklYTUUsICAgb2JqLCAgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhIGZpeG1lIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVQtRklYTUUtT0JKRUNULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhdGVnb3J5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FULVRSQUNFLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9DQVRfVFJBQ0VfT0JKRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9UUkFDRV9PQkpFQ1QoY2F0LG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfVFJBQ0UsICAgb2JqLCAgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhIHRyYWNpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4KLWNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVQtVFJBQ0UtT0JKRUNULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhdGVnb3J5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FULU1FTURVTVAtT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9NRU1EVU1QX09CSkVDVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9DQVRfTUVNRFVNUF9PQkpFQ1QoY2F0LG9iaixtc2csZGF0YSxsZW5ndGgpPC9wcmU+Ci08cD5PdXRwdXQgYSBoZXhkdW1wIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0gcmVsYXRpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4KLWNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVQtTUVNRFVNUC1PQkpFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2F0ZWdvcnkgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bXNnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVzc2FnZSBzdHJpbmcgdG8gbG9nIHdpdGggdGhlIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxlbmd0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxlbmd0aCBvZiB0aGUgZGF0YSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBVC1FUlJPUjpDQVBTIj48L2E+PGgzPkdTVF9DQVRfRVJST1IoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0FUX0VSUk9SKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0VSUk9SLCAgIE5VTEwsIF9fVkFfQVJHU19fKQotPC9wcmU+Ci08cD5PdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNBVC1FUlJPUi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYXRlZ29yeSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVQtV0FSTklORzpDQVBTIj48L2E+PGgzPkdTVF9DQVRfV0FSTklORygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfV0FSTklORyhjYXQsLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1dBUk5JTkcsIE5VTEwsIF9fVkFfQVJHU19fKQotPC9wcmU+Ci08cD5PdXRwdXQgYW4gd2FybmluZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FULVdBUk5JTkcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2F0ZWdvcnkgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FULUlORk86Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX0lORk8oKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ0FUX0lORk8oY2F0LC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfSU5GTywgICAgTlVMTCwgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVQtSU5GTy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYXRlZ29yeSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVQtREVCVUc6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX0RFQlVHKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9ERUJVRyhjYXQsLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9ERUJVRywgICBOVUxMLCBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGFuIGRlYnVnZ2luZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FULURFQlVHLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhdGVnb3J5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBVC1MT0c6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX0xPRygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfTE9HKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0xPRywgICAgIE5VTEwsIF9fVkFfQVJHU19fKQotPC9wcmU+Ci08cD5PdXRwdXQgYW4gbG9nZ2luZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FULUxPRy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYXRlZ29yeSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DQVQtRklYTUU6Q0FQUyI+PC9hPjxoMz5HU1RfQ0FUX0ZJWE1FKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NBVF9GSVhNRShjYXQsLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgICBOVUxMLCBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGFuIGZpeG1lIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVQtRklYTUUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2F0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y2F0ZWdvcnkgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FULVRSQUNFOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9UUkFDRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DQVRfVFJBQ0UoY2F0LC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9UUkFDRSwgICBOVUxMLCBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGEgdHJhY2luZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ0FULVRSQUNFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhdGVnb3J5IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBVC1NRU1EVU1QOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9NRU1EVU1QKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0NBVF9NRU1EVU1QKGNhdCxtc2csZGF0YSxsZW5ndGgpPC9wcmU+Ci08cD5PdXRwdXQgYSBoZXhkdW1wIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0gaW4gdGhlIGdpdmVuIGNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQVQtTUVNRFVNUC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYXRlZ29yeSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bXNnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVzc2FnZSBzdHJpbmcgdG8gbG9nIHdpdGggdGhlIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxlbmd0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmxlbmd0aCBvZiB0aGUgZGF0YSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUVSUk9SLU9CSkVDVDpDQVBTIj48L2E+PGgzPkdTVF9FUlJPUl9PQkpFQ1QoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVJST1JfT0JKRUNUKG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfRVJST1IsICAgb2JqLCAgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhbiBlcnJvciBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1FUlJPUi1PQkpFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVdBUk5JTkctT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX1dBUk5JTkdfT0JKRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1dBUk5JTkdfT0JKRUNUKG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfV0FSTklORywgb2JqLCAgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtV0FSTklORy1PQkpFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUlORk8tT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX0lORk9fT0JKRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lORk9fT0JKRUNUKG9iaiwuLi4pwqBHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfSU5GTywgICAgb2JqLCAgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGRlZmF1bHQKLWNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1JTkZPLU9CSkVDVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtREVCVUctT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX09CSkVDVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ERUJVR19PQkpFQ1Qob2JqLC4uLinCoEdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9ERUJVRywgICBvYmosICBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGEgZGVidWdnaW5nIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGRlZmF1bHQKLWNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ERUJVRy1PQkpFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUxPRy1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfTE9HX09CSkVDVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9MT0dfT0JKRUNUKG9iaiwuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfTE9HLCAgICAgb2JqLCAgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhIGxvZ2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTE9HLU9CSkVDVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRklYTUUtT0JKRUNUOkNBUFMiPjwvYT48aDM+R1NUX0ZJWE1FX09CSkVDVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9GSVhNRV9PQkpFQ1Qob2JqLC4uLinCoEdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9GSVhNRSwgICBvYmosICBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGEgZml4bWUgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRklYTUUtT0JKRUNULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UUkFDRS1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfVFJBQ0VfT0JKRUNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RSQUNFX09CSkVDVChvYmosLi4uKcKgR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1RSQUNFLCAgIG9iaiwgIF9fVkFfQVJHU19fKQotPC9wcmU+Ci08cD5PdXRwdXQgYSB0cmFjaW5nIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVRSQUNFLU9CSkVDVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUVNRFVNUC1PQkpFQ1Q6Q0FQUyI+PC9hPjxoMz5HU1RfTUVNRFVNUF9PQkpFQ1QoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfTUVNRFVNUF9PQkpFQ1Qob2JqLG1zZyxkYXRhLGxlbmd0aCk8L3ByZT4KLTxwPk91dHB1dCBhIGxvZ2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTUVNRFVNUC1PQkpFQ1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdGhlIG1lc3NhZ2UgYmVsb25ncyB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tc2c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tZXNzYWdlIHN0cmluZyB0byBsb2cgd2l0aCB0aGUgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byB0aGUgZGF0YSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGVuZ3RoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bGVuZ3RoIG9mIHRoZSBkYXRhIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRVJST1I6Q0FQUyI+PC9hPjxoMz5HU1RfRVJST1IoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRVJST1IoLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9FUlJPUiwgICBOVUxMLCBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUVSUk9SLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XQVJOSU5HOkNBUFMiPjwvYT48aDM+R1NUX1dBUk5JTkcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfV0FSTklORyguLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfV0FSTklORywgTlVMTCwgX19WQV9BUkdTX18pCi08L3ByZT4KLTxwPk91dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtV0FSTklORy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtSU5GTzpDQVBTIj48L2E+PGgzPkdTVF9JTkZPKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lORk8oLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9JTkZPLCAgICBOVUxMLCBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtSU5GTy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtREVCVUc6Q0FQUyI+PC9hPjxoMz5HU1RfREVCVUcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfREVCVUcoLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9ERUJVRywgICBOVUxMLCBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGEgZGVidWdnaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULURFQlVHLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1MT0c6Q0FQUyI+PC9hPjxoMz5HU1RfTE9HKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0xPRyguLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0xPRywgICAgIE5VTEwsIF9fVkFfQVJHU19fKQotPC9wcmU+Ci08cD5PdXRwdXQgYSBsb2dnaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUxPRy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRklYTUU6Q0FQUyI+PC9hPjxoMz5HU1RfRklYTUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRklYTUUoLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9GSVhNRSwgICBOVUxMLCBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGEgZml4bWUgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtRklYTUUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRSQUNFOkNBUFMiPjwvYT48aDM+R1NUX1RSQUNFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RSQUNFKC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9UUkFDRSwgICBOVUxMLCBfX1ZBX0FSR1NfXykKLTwvcHJlPgotPHA+T3V0cHV0IGEgdHJhY2luZyBtZXNzYWdlIGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1UUkFDRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUVNRFVNUDpDQVBTIj48L2E+PGgzPkdTVF9NRU1EVU1QKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX01FTURVTVAobXNnLGRhdGEsbGVuZ3RoKTwvcHJlPgotPHA+T3V0cHV0IGEgaGV4ZHVtcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1NRU1EVU1QLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1zZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1lc3NhZ2Ugc3RyaW5nIHRvIGxvZyB3aXRoIHRoZSBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb2ludGVyIHRvIHRoZSBkYXRhIHRvIG91dHB1dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sZW5ndGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5sZW5ndGggb2YgdGhlIGRhdGEgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1ERUJVRy1SRUdJU1RFUi1GVU5DUFRSOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUihwdHIpPC9wcmU+Ci08cD5SZWdpc3RlciBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aXRoIGl0cyBuYW1lLCBzbyBpdCBjYW4gbGF0ZXIgYmUgdXNlZCBieQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZVTkNQVFItTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9ERUJVR19GVU5DUFRSX05BTUUoKTwvY29kZT48L2E+LjwvcD4KLTxwPlVzZSB0aGlzIHZhcmlhbnQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZVTkNQVFI6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19GVU5DUFRSKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfREVCVUdfRlVOQ1BUUjwvc3Bhbj48L2E+IGlmIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB0cjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ERUJVRy1SRUdJU1RFUi1GVU5DUFRSLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wdHI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byByZWdpc3RlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUZVTkNQVFI6Q0FQUyI+PC9hPjxoMz5HU1RfREVCVUdfRlVOQ1BUUigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9ERUJVR19GVU5DUFRSKHB0cik8L3ByZT4KLTxwPlJlZ2lzdGVyIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHdpdGggaXRzIG5hbWUsIHNvIGl0IGNhbiBsYXRlciBiZSB1c2VkIGJ5Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctRlVOQ1BUUi1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfRlVOQ1BUUl9OQU1FKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULURFQlVHLUZVTkNQVFIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnB0cjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULURFQlVHLUZVTkNQVFIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgdmFsdWUgcGFzc2VkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wdHI8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUZVTkNQVFItTkFNRTpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19GVU5DUFRSX05BTUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FKHB0cik8L3ByZT4KLTxwPlJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24sIGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUZVTkNQVFI6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19GVU5DUFRSKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0RFQlVHX0ZVTkNQVFIoKTwvY29kZT48L2E+LiBJZiBub3QsIGl0IHJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcG9pbnRlci48L3A+Ci08cD5UaGlzIG1hY3JvIHJldHVybnMgYSBjb25zdGFudCBzdHJpbmcgd2hpY2ggbXVzdCBub3QgYmUgbW9kaWZpZWQgb3IKLWZyZWVkIGJ5IHRoZSBjYWxsZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULURFQlVHLUZVTkNQVFItTkFNRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHRyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gb2Ygd2hpY2ggdG8gbG9vayB1cCB0aGUgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRTpDQVBTIj48L2E+PGgzPkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKGJpbiwgZGV0YWlscywgZmlsZV9uYW1lKSBnc3RfZGVidWdfYmluX3RvX2RvdF9maWxlIChiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkKLTwvcHJlPgotPHA+VG8gYWlkIGRlYnVnZ2luZyBhcHBsaWNhdGlvbnMgb25lIGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gd3JpdGUgb3V0IHRoZSB3aG9sZQotbmV0d29yayBvZiBnc3RyZWFtZXIgZWxlbWVudHMgdGhhdCBmb3JtIHRoZSBwaXBlbGluZSBpbnRvIGFuIGRvdCBmaWxlLgotVGhpcyBmaWxlIGNhbiBiZSBwcm9jZXNzZWQgd2l0aCBncmFwaHZpeiB0byBnZXQgYW4gaW1hZ2UsIGxpa2UgdGhpczo8L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmRvdCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5UcG5nIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm9pbWFnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnBuZyBncmFwaF9sb3dsZXZlbDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmRvdDwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+VGhlcmUgaXMgYWxzbyBhIHV0aWxpdHkgY2FsbGVkIHhkb3Qgd2hpY2ggYWxsb3dzIHlvdSB0byB2aWV3IHRoZSBkb3QgZmlsZQotZGlyZWN0bHkgd2l0aG91dCBjb252ZXJ0aW5nIGl0IGZpcnN0LjwvcD4KLTxwPlRoZSBtYWNybyBpcyBvbmx5IGFjdGl2ZSBpZiBnc3RyZWFtZXIgaXMgY29uZmlndXJlZCB3aXRoCi0iLS1nc3QtZW5hYmxlLWdzdC1kZWJ1ZyIgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotR1NUX0RFQlVHX0RVTVBfRE9UX0RJUiBpcyBzZXQgdG8gYSBiYXNlcGF0aCAoZS5nLiAvdG1wKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtREVCVUctQklOLVRPLURPVC1GSUxFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUgdGhhdCBzaG91bGQgYmUgYW5hbHl6ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGV0YWlsczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRldGFpbHMgdG8gc2hvdyBpbiB0aGUgZ3JhcGgsIGUuZy4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUdSQVBILVNIT1ctQUxMOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfREVCVUdfR1JBUEhfU0hPV19BTEw8L3NwYW4+PC9hPiBvcgotb25lIG9yIG1vcmUgb3RoZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdHcmFwaERldGFpbHMiIHRpdGxlPSJlbnVtIEdzdERlYnVnR3JhcGhEZXRhaWxzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdHcmFwaERldGFpbHM8L3NwYW4+PC9hPiBmbGFncy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmlsZV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b3V0cHV0IGJhc2UgZmlsZW5hbWUgKGUuZy4gIm15cGxheWVyIik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRS1XSVRILVRTOkNBUFMiPjwvYT48aDM+R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKGJpbiwgZGV0YWlscywgZmlsZV9uYW1lKSBnc3RfZGVidWdfYmluX3RvX2RvdF9maWxlX3dpdGhfdHMgKGJpbiwgZGV0YWlscywgZmlsZV9uYW1lKQotPC9wcmU+Ci08cD5UaGlzIHdvcmtzIGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHLUJJTi1UTy1ET1QtRklMRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRSgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKTwvY29kZT48L2E+LCBidXQgYWRkcyB0aGUgY3VycmVudCB0aW1lc3RhbXAKLXRvIHRoZSBmaWxlbmFtZSwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byB0YWtlIG11bHRpcGxlIHNuYXBzaG90cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtREVCVUctQklOLVRPLURPVC1GSUxFLVdJVEgtVFMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRvcC1sZXZlbCBwaXBlbGluZSB0aGF0IHNob3VsZCBiZSBhbmFseXplZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXRhaWxzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZGV0YWlscyB0byBzaG93IGluIHRoZSBncmFwaCwgZS5nLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctR1JBUEgtU0hPVy1BTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTDwvc3Bhbj48L2E+IG9yCi1vbmUgb3IgbW9yZSBvdGhlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0dyYXBoRGV0YWlscyIgdGl0bGU9ImVudW0gR3N0RGVidWdHcmFwaERldGFpbHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0dyYXBoRGV0YWlsczwvc3Bhbj48L2E+IGZsYWdzLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maWxlX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5vdXRwdXQgYmFzZSBmaWxlbmFtZSAoZS5nLiAibXlwbGF5ZXIiKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctcHJpbnQtc3RhY2stdHJhY2UiPjwvYT48aDM+Z3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPklmIEdTVF9FTkFCTEVfRlVOQ19JTlNUUlVNRU5UQVRJT04gaXMgZGVmaW5lZCBhIHN0YWNrdHJhY2UgaXMgYXZhaWxhYmxlIGZvcgotZ3N0cmVhbWVyIGNvZGUsIHdoaWNoIGNhbiBiZSBwcmludGVkIHdpdGggdGhpcyBmdW5jdGlvbi48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1USU1FLUFSR1M6Q0FQUyI+PC9hPjxoMz5HU1RfVElNRV9BUkdTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyh0KTwvcHJlPgotPHA+Rm9ybWF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50PC9jb2RlPjwvZW0+Ci0gZm9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1GT1JNQVQ6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX0ZPUk1BVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9USU1FX0ZPUk1BVDwvc3Bhbj48L2E+IGZvcm1hdCBzdHJpbmcuIE5vdGU6IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50PC9jb2RlPjwvZW0+Ci0gd2lsbCBiZQotZXZhbHVhdGVkIG1vcmUgdGhhbiBvbmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1USU1FLUFSR1MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSIgdGl0bGU9IkdzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtU1RJTUUtQVJHUzpDQVBTIj48L2E+PGgzPkdTVF9TVElNRV9BUkdTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1NUSU1FX0FSR1ModCk8L3ByZT4KLTxwPkZvcm1hdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dDwvY29kZT48L2VtPgotIGZvciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVNUSU1FLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1NUSU1FX0ZPUk1BVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TVElNRV9GT1JNQVQ8L3NwYW4+PC9hPiBmb3JtYXQgc3RyaW5nLiBOb3RlOiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dDwvY29kZT48L2VtPgotIHdpbGwgYmUKLWV2YWx1YXRlZCBtb3JlIHRoYW4gb25jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtU1RJTUUtQVJHUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiIgdGl0bGU9IkdzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRlYnVnLWJpbi10by1kb3QtZGF0YSI+PC9hPjxoMz5nc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0dyYXBoRGV0YWlscyIgdGl0bGU9ImVudW0gR3N0RGVidWdHcmFwaERldGFpbHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0dyYXBoRGV0YWlsczwvc3Bhbj48L2E+IGRldGFpbHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGVidWctYmluLXRvLWRvdC1maWxlIj48L2E+PGgzPmdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gKmJpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHc3REZWJ1Z0dyYXBoRGV0YWlscyIgdGl0bGU9ImVudW0gR3N0RGVidWdHcmFwaERldGFpbHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWJ1Z0dyYXBoRGV0YWlsczwvc3Bhbj48L2E+IGRldGFpbHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGVfbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kZWJ1Zy1iaW4tdG8tZG90LWZpbGUtd2l0aC10cyI+PC9hPjxoMz5nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlX3dpdGhfdHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGVidWdfYmluX3RvX2RvdF9maWxlX3dpdGhfdHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdHcmFwaERldGFpbHMiIHRpdGxlPSJlbnVtIEdzdERlYnVnR3JhcGhEZXRhaWxzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVidWdHcmFwaERldGFpbHM8L3NwYW4+PC9hPiBkZXRhaWxzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGVfbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1pbmZvLXZhc3ByaW50ZiI+PC9hPjxoMz5nc3RfaW5mb192YXNwcmludGbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfaW5mb192YXNwcmludGYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnJlc3VsdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dmFfbGlzdDwvc3Bhbj4gYXJnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGxvY2F0ZXMgYW5kIGZpbGxzIGEgc3RyaW5nIGxhcmdlIGVub3VnaCAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsCi1ieXRlKSB0byBob2xkIHRoZSBzcGVjaWZpZWQgcHJpbnRmIHN0eWxlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ3M8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggdGhlIEdTdHJlYW1lciBzcGVjaWZpYyBwcmludGYgc3BlY2lmaWVycwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVBUUi1GT1JNQVQ6Q0FQUyIgdGl0bGU9IkdTVF9QVFJfRk9STUFUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BUUl9GT1JNQVQ8L3NwYW4+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVNFR01FTlQtRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfU0VHTUVOVF9GT1JNQVQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfU0VHTUVOVF9GT1JNQVQ8L3NwYW4+PC9hPi4gIElmIHlvdSBkbyBub3QgaGF2ZSB0aGVzZSBzcGVjaWZpZXJzCi1pbiB5b3VyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLSBzdHJpbmcsIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBhbmQgY2FuIHVzZQotYWx0ZXJuYXRpdmVzIHN1Y2ggYXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RyaW5nLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjZy12YXNwcmludGYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z192YXNwcmludGYoKTwvY29kZT48L2E+LjwvcD4KLTxwPkZyZWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc3VsdDwvY29kZT48L2VtPgotIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaW5mby12YXNwcmludGYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzdWx0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSByZXN1bHRpbmcgc3RyaW5nLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwcmludGYgc3R5bGUgZm9ybWF0IHN0cmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHZhX2xpc3Qgb2YgcHJpbnRmIGFyZ3VtZW50cyBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaW5mby12YXNwcmludGYucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYWxsb2NhdGVkIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc3VsdDwvY29kZT48L2VtPgotb3IgLTEgb24gYW55IGVycm9yPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1pbmZvLXN0cmR1cC12cHJpbnRmIj48L2E+PGgzPmdzdF9pbmZvX3N0cmR1cF92cHJpbnRmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfaW5mb19zdHJkdXBfdnByaW50ZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52YV9saXN0PC9zcGFuPiBhcmdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFsbG9jYXRlcywgZmlsbHMgYW5kIHJldHVybnMgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdGhlIHByaW50ZiBzdHlsZQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPgotIHN0cmluZyBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFyZ3M8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5TZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tdmFzcHJpbnRmIiB0aXRsZT0iZ3N0X2luZm9fdmFzcHJpbnRmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW5mb192YXNwcmludGYoKTwvY29kZT48L2E+IGZvciB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQuPC9wPgotPHA+RnJlZSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWluZm8tc3RyZHVwLXZwcmludGYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwcmludGYgc3R5bGUgZm9ybWF0IHN0cmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcmdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHZhX2xpc3Qgb2YgcHJpbnRmIGFyZ3VtZW50cyBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZvcm1hdDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaW5mby1zdHJkdXAtdnByaW50Zi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3bHkgYWxsb2NhdGVkIG51bGwgdGVybWluYXRlZCBzdHJpbmcgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IG9uIGFueSBlcnJvcjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDQuaHRtbCNhcGktaW5kZXgtMS44Ij4xLjg8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaW5mby1zdHJkdXAtcHJpbnRmIj48L2E+PGgzPmdzdF9pbmZvX3N0cmR1cF9wcmludGbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9pbmZvX3N0cmR1cF9wcmludGYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGxvY2F0ZXMsIGZpbGxzIGFuZCByZXR1cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSBwcmludGYgc3R5bGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLSBzdHJpbmcgYW5kIGNvcnJlc3BvbmRpbmcgYXJndW1lbnRzLjwvcD4KLTxwPlNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtaW5mby12YXNwcmludGYiIHRpdGxlPSJnc3RfaW5mb192YXNwcmludGbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pbmZvX3Zhc3ByaW50ZigpPC9jb2RlPjwvYT4gZm9yIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZC48L3A+Ci08cD5GcmVlIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaW5mby1zdHJkdXAtcHJpbnRmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcHJpbnRmIHN0eWxlIGZvcm1hdCBzdHJpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHByaW50ZiBhcmd1bWVudHMgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JtYXQ8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWluZm8tc3RyZHVwLXByaW50Zi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3bHkgYWxsb2NhdGVkIG51bGwgdGVybWluYXRlZCBzdHJpbmcgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IG9uIGFueSBlcnJvcjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDQuaHRtbCNhcGktaW5kZXgtMS44Ij4xLjg8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJbmZvLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWJ1Z0xldmVsIj48L2E+PGgzPmVudW0gR3N0RGVidWdMZXZlbDwvaDM+Ci08cD5UaGUgbGV2ZWwgZGVmaW5lcyB0aGUgaW1wb3J0YW5jZSBvZiBhIGRlYnVnZ2luZyBtZXNzYWdlLiBUaGUgbW9yZSBpbXBvcnRhbnQgYQotbWVzc2FnZSBpcywgdGhlIGdyZWF0ZXIgdGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlIGRlYnVnZ2luZyBzeXN0ZW0gb3V0cHV0cyBpdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3REZWJ1Z0xldmVsLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxFVkVMLU5PTkU6Q0FQUyI+PC9hPkdTVF9MRVZFTF9OT05FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk5vIGRlYnVnZ2luZyBsZXZlbCBzcGVjaWZpZWQgb3IgZGVzaXJlZC4gVXNlZCB0byBkZWFjdGl2YXRlCi0gZGVidWdnaW5nIG91dHB1dC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxFVkVMLUVSUk9SOkNBUFMiPjwvYT5HU1RfTEVWRUxfRVJST1I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RXJyb3IgbWVzc2FnZXMgYXJlIHRvIGJlIHVzZWQgb25seSB3aGVuIGFuIGVycm9yIG9jY3VycmVkCi0gdGhhdCBzdG9wcyB0aGUgYXBwbGljYXRpb24gZnJvbSBrZWVwaW5nIHdvcmtpbmcgY29ycmVjdGx5LgotIEFuIGV4YW1wbGVzIGlzIGdzdF9lbGVtZW50X2Vycm9yLCB3aGljaCBvdXRwdXRzIGEgbWVzc2FnZSB3aXRoIHRoaXMgcHJpb3JpdHkuCi0gSXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSBhcHBsaWNhdGlvbiBpcyB0ZXJtaW5hdGluZyBhcyB3aXRoIGdfZXJyb3IuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MRVZFTC1XQVJOSU5HOkNBUFMiPjwvYT5HU1RfTEVWRUxfV0FSTklORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5XYXJuaW5nIG1lc3NhZ2VzIGFyZSB0byBpbmZvcm0gYWJvdXQgYWJub3JtYWwgYmVoYXZpb3VyCi0gdGhhdCBjb3VsZCBsZWFkIHRvIHByb2JsZW1zIG9yIHdlaXJkIGJlaGF2aW91ciBsYXRlciBvbi4gQW4gZXhhbXBsZSBvZiB0aGlzCi0gd291bGQgYmUgY2xvY2tpbmcgaXNzdWVzICgieW91ciBjb21wdXRlciBpcyBwcmV0dHkgc2xvdyIpIG9yIGJyb2tlbiBpbnB1dAotIGRhdGEgKCJDYW4ndCBzeW5jaHJvbml6ZSB0byBzdHJlYW0uIik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxFVkVMLUZJWE1FOkNBUFMiPjwvYT5HU1RfTEVWRUxfRklYTUU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Rml4bWUgbWVzc2FnZXMgYXJlIG1lc3NhZ2VzIHRoYXQgaW5kaWNhdGUgdGhhdCBzb21ldGhpbmcKLSBpbiB0aGUgZXhlY3V0ZWQgY29kZSBwYXRoIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBvciBoYW5kbGVkIHlldC4gTm90ZQotIHRoYXQgdGhpcyBkb2VzIG5vdCByZXBsYWNlIHByb3BlciBlcnJvciBoYW5kbGluZyBpbiBhbnkgd2F5LCB0aGUgcHVycG9zZQotIG9mIHRoaXMgbWVzc2FnZSBpcyB0byBtYWtlIGl0IGVhc2llciB0byBzcG90IGluY29tcGxldGUvdW5maW5pc2hlZCBwaWVjZXMKLSBvZiBjb2RlIHdoZW4gcmVhZGluZyB0aGUgZGVidWcgbG9nLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTEVWRUwtSU5GTzpDQVBTIj48L2E+R1NUX0xFVkVMX0lORk88L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+SW5mb3JtYXRpb25hbCBtZXNzYWdlcyBzaG91bGQgYmUgdXNlZCB0byBrZWVwIHRoZSBkZXZlbG9wZXIKLSB1cGRhdGVkIGFib3V0IHdoYXQgaXMgaGFwcGVuaW5nLgotIEV4YW1wbGVzIHdoZXJlIHRoaXMgc2hvdWxkIGJlIHVzZWQgYXJlIHdoZW4gYSB0eXBlZmluZCBmdW5jdGlvbiBoYXMKLSBzdWNjZXNzZnVsbHkgZGV0ZXJtaW5lZCB0aGUgdHlwZSBvZiB0aGUgc3RyZWFtIG9yIHdoZW4gYW4gbXAzIHBsdWdpbiBkZXRlY3RzCi0gdGhlIGZvcm1hdCB0byBiZSB1c2VkLiAoIlRoaXMgZmlsZSBoYXMgbW9ubyBzb3VuZC4iKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTEVWRUwtREVCVUc6Q0FQUyI+PC9hPkdTVF9MRVZFTF9ERUJVRzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5EZWJ1Z2dpbmcgbWVzc2FnZXMgc2hvdWxkIGJlIHVzZWQgd2hlbiBzb21ldGhpbmcgY29tbW9uCi0gaGFwcGVucyB0aGF0IGlzIG5vdCB0aGUgZXhwZWN0ZWQgZGVmYXVsdCBiZWhhdmlvciwgb3Igc29tZXRoaW5nIHRoYXQncwotIHVzZWZ1bCB0byBrbm93IGJ1dCBkb2Vzbid0IGhhcHBlbiBhbGwgdGhlIHRpbWUgKGllLiBwZXIgbG9vcCBpdGVyYXRpb24gb3IKLSBidWZmZXIgcHJvY2Vzc2VkIG9yIGV2ZW50IGhhbmRsZWQpLgotIEFuIGV4YW1wbGUgd291bGQgYmUgbm90aWZpY2F0aW9ucyBhYm91dCBzdGF0ZSBjaGFuZ2VzIG9yIHJlY2VpdmluZy9zZW5kaW5nCi0gb2YgZXZlbnRzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTEVWRUwtTE9HOkNBUFMiPjwvYT5HU1RfTEVWRUxfTE9HPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkxvZyBtZXNzYWdlcyBhcmUgbWVzc2FnZXMgdGhhdCBhcmUgdmVyeSBjb21tb24gYnV0IG1pZ2h0IGJlCi0gdXNlZnVsIHRvIGtub3cuIEFzIGEgcnVsZSBvZiB0aHVtYiBhIHBpcGVsaW5lIHRoYXQgaXMgcnVubmluZyBhcyBleHBlY3RlZAotIHNob3VsZCBuZXZlciBvdXRwdXQgYW55dGhpbmcgZWxzZSBidXQgTE9HIG1lc3NhZ2VzIHdoaWxzdCBwcm9jZXNzaW5nIGRhdGEuCi0gVXNlIHRoaXMgbG9nIGxldmVsIHRvIGxvZyByZWN1cnJpbmcgaW5mb3JtYXRpb24gaW4gY2hhaW4gZnVuY3Rpb25zIGFuZAotIGxvb3AgZnVuY3Rpb25zLCBmb3IgZXhhbXBsZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxFVkVMLVRSQUNFOkNBUFMiPjwvYT5HU1RfTEVWRUxfVFJBQ0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VHJhY2luZy1yZWxhdGVkIG1lc3NhZ2VzLgotIEV4YW1wbGVzIGZvciB0aGlzIGFyZSByZWZlcmVuY2luZy9kZXJlZmVyZW5jaW5nIG9mIG9iamVjdHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MRVZFTC1NRU1EVU1QOkNBUFMiPjwvYT5HU1RfTEVWRUxfTUVNRFVNUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5tZW1vcnkgZHVtcCBtZXNzYWdlcyBhcmUgdXNlZCB0byBsb2cgKHNtYWxsKSBjaHVua3Mgb2YKLSBkYXRhIGFzIG1lbW9yeSBkdW1wcyBpbiB0aGUgbG9nLiBUaGV5IHdpbGwgYmUgZGlzcGxheWVkIGFzIGhleGR1bXAgd2l0aAotIEFTQ0lJIGNoYXJhY3RlcnMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MRVZFTC1DT1VOVDpDQVBTIj48L2E+R1NUX0xFVkVMX0NPVU5UPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBudW1iZXIgb2YgZGVmaW5lZCBkZWJ1Z2dpbmcgbGV2ZWxzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUxFVkVMLURFRkFVTFQ6Q0FQUyI+PC9hPjxoMz5HU1RfTEVWRUxfREVGQVVMVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTEVWRUxfREVGQVVMVCBHU1RfTEVWRUxfTk9ORQotPC9wcmU+Ci08cD5EZWZpbmVzIHRoZSBkZWZhdWx0IGRlYnVnZ2luZyBsZXZlbCB0byBiZSB1c2VkIHdpdGggR1N0cmVhbWVyLiBJdCBpcyBub3JtYWxseQotc2V0IHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTEVWRUxfTk9ORTwvc3Bhbj48L2E+IHNvIG5vdGhpbmcgZ2V0IHByaW50ZWQuCi1BcyBpdCBjYW4gYmUgY29uZmlndXJlZCBhdCBjb21waWxlIHRpbWUsIGRldmVsb3BlciBidWlsZHMgbWF5IGNob3NlIHRvCi1vdmVycmlkZSB0aGF0IHRob3VnaC4KLVlvdSBjYW4gdXNlIHRoaXMgYXMgYW4gYXJndW1lbnQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWRlYnVnLXNldC1kZWZhdWx0LXRocmVzaG9sZCIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQoKTwvY29kZT48L2E+IHRvCi1yZXNldCB0aGUgZGVidWdnaW5nIG91dHB1dCB0byBkZWZhdWx0IGJlaGF2aW91ci48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1MRVZFTC1NQVg6Q0FQUyI+PC9hPjxoMz5HU1RfTEVWRUxfTUFYPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9MRVZFTF9NQVggR1NUX0xFVkVMX0NPVU5UCi08L3ByZT4KLTxwPkRlZmluZXMgdGhlIG1heGltdW0gZGVidWdnaW5nIGxldmVsIHRvIGJlIGVuYWJsZWQgYXQgY29tcGlsYXRpb24gdGltZS4gQnkgZGVmYXVsdAotaXQgaXMgc2V0IHN1Y2ggdGhhdCBhbGwgZGVidWdnaW5nIHN0YXRlbWVudHMgd2lsbCBiZSBlbmFibGVkLjwvcD4KLTxwPklmIHlvdSB3aXNoIHRvIGNvbXBpbGUgR1N0cmVhbWVyIGFuZCBwbHVnaW5zIHdpdGggb25seSBzb21lIGRlYnVnZ2luZyBzdGF0ZW1lbnRzCi0oU3VjaCBhcyBqdXN0IHdhcm5pbmdzIGFuZCBlcnJvcnMpLCB5b3UgY2FuIGRlZmluZSBpdCBhdCBjb21waWxlIHRpbWUgdG8gdGhlCi1tYXhpbXVtIGRlYnVnIGxldmVsLiBBbnkgZGVidWcgc3RhdGVtZW50cyBhYm92ZSB0aGF0IGxldmVsIHdpbGwgYmUgY29tcGlsZWQgb3V0LjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGVidWdDb2xvckZsYWdzIj48L2E+PGgzPmVudW0gR3N0RGVidWdDb2xvckZsYWdzPC9oMz4KLTxwPlRoZXNlIGFyZSBzb21lIHRlcm1pbmFsIHN0eWxlIGZsYWdzIHlvdSBjYW4gdXNlIHdoZW4gY3JlYXRpbmcgeW91cgotZGVidWdnaW5nIGNhdGVnb3JpZXMgdG8gbWFrZSB0aGVtIHN0YW5kIG91dCBpbiBkZWJ1Z2dpbmcgb3V0cHV0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdERlYnVnQ29sb3JGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1GRy1CTEFDSzpDQVBTIj48L2E+R1NUX0RFQlVHX0ZHX0JMQUNLPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlVzZSBibGFjayBhcyBmb3JlZ3JvdW5kIGNvbG9yLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVCVUctRkctUkVEOkNBUFMiPjwvYT5HU1RfREVCVUdfRkdfUkVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlVzZSByZWQgYXMgZm9yZWdyb3VuZCBjb2xvci48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUZHLUdSRUVOOkNBUFMiPjwvYT5HU1RfREVCVUdfRkdfR1JFRU48L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VXNlIGdyZWVuIGFzIGZvcmVncm91bmQgY29sb3IuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1GRy1ZRUxMT1c6Q0FQUyI+PC9hPkdTVF9ERUJVR19GR19ZRUxMT1c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VXNlIHllbGxvdyBhcyBmb3JlZ3JvdW5kIGNvbG9yLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVCVUctRkctQkxVRTpDQVBTIj48L2E+R1NUX0RFQlVHX0ZHX0JMVUU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VXNlIGJsdWUgYXMgZm9yZWdyb3VuZCBjb2xvci48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUZHLU1BR0VOVEE6Q0FQUyI+PC9hPkdTVF9ERUJVR19GR19NQUdFTlRBPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlVzZSBtYWdlbnRhIGFzIGZvcmVncm91bmQgY29sb3IuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1GRy1DWUFOOkNBUFMiPjwvYT5HU1RfREVCVUdfRkdfQ1lBTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Vc2UgY3lhbiBhcyBmb3JlZ3JvdW5kIGNvbG9yLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVCVUctRkctV0hJVEU6Q0FQUyI+PC9hPkdTVF9ERUJVR19GR19XSElURTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Vc2Ugd2hpdGUgYXMgZm9yZWdyb3VuZCBjb2xvci48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUJHLUJMQUNLOkNBUFMiPjwvYT5HU1RfREVCVUdfQkdfQkxBQ0s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VXNlIGJsYWNrIGFzIGJhY2tncm91bmQgY29sb3IuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1CRy1SRUQ6Q0FQUyI+PC9hPkdTVF9ERUJVR19CR19SRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VXNlIHJlZCBhcyBiYWNrZ3JvdW5kIGNvbG9yLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVCVUctQkctR1JFRU46Q0FQUyI+PC9hPkdTVF9ERUJVR19CR19HUkVFTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Vc2UgZ3JlZW4gYXMgYmFja2dyb3VuZCBjb2xvci48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUJHLVlFTExPVzpDQVBTIj48L2E+R1NUX0RFQlVHX0JHX1lFTExPVzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Vc2UgeWVsbG93IGFzIGJhY2tncm91bmQgY29sb3IuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1CRy1CTFVFOkNBUFMiPjwvYT5HU1RfREVCVUdfQkdfQkxVRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Vc2UgYmx1ZSBhcyBiYWNrZ3JvdW5kIGNvbG9yLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVCVUctQkctTUFHRU5UQTpDQVBTIj48L2E+R1NUX0RFQlVHX0JHX01BR0VOVEE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VXNlIG1hZ2VudGEgYXMgYmFja2dyb3VuZCBjb2xvci48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUJHLUNZQU46Q0FQUyI+PC9hPkdTVF9ERUJVR19CR19DWUFOPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlVzZSBjeWFuIGFzIGJhY2tncm91bmQgY29sb3IuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1CRy1XSElURTpDQVBTIj48L2E+R1NUX0RFQlVHX0JHX1dISVRFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlVzZSB3aGl0ZSBhcyBiYWNrZ3JvdW5kIGNvbG9yLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVCVUctQk9MRDpDQVBTIj48L2E+R1NUX0RFQlVHX0JPTEQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TWFrZSB0aGUgb3V0cHV0IGJvbGQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1VTkRFUkxJTkU6Q0FQUyI+PC9hPkdTVF9ERUJVR19VTkRFUkxJTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VW5kZXJsaW5lIHRoZSBvdXRwdXQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWJ1Z0NvbG9yTW9kZSI+PC9hPjxoMz5lbnVtIEdzdERlYnVnQ29sb3JNb2RlPC9oMz4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdERlYnVnQ29sb3JNb2RlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUNPTE9SLU1PREUtT0ZGOkNBUFMiPjwvYT5HU1RfREVCVUdfQ09MT1JfTU9ERV9PRkY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RG8gbm90IHVzZSBjb2xvcnMgaW4gbG9ncy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUNPTE9SLU1PREUtT046Q0FQUyI+PC9hPkdTVF9ERUJVR19DT0xPUl9NT0RFX09OPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlBhaW50IGxvZ3MgaW4gYSBwbGF0Zm9ybS1zcGVjaWZpYyB3YXkuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1DT0xPUi1NT0RFLVVOSVg6Q0FQUyI+PC9hPkdTVF9ERUJVR19DT0xPUl9NT0RFX1VOSVg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+UGFpbnQgbG9ncyB3aXRoIFVOSVggdGVybWluYWwgY29sb3IgY29kZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBubyBtYXR0ZXIgd2hhdCBwbGF0Zm9ybSBHU3RyZWFtZXIgaXMgcnVubmluZyBvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERlYnVnQ2F0ZWdvcnkiPjwvYT48aDM+c3RydWN0IEdzdERlYnVnQ2F0ZWdvcnk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5IHsKLX07Ci08L3ByZT4KLTxwPlRoaXMgaXMgdGhlIHN0cnVjdCB0aGF0IGRlc2NyaWJlcyB0aGUgY2F0ZWdvcmllcy4gT25jZSBpbml0aWFsaXplZCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtREVCVUctQ0FURUdPUlktSU5JVDpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9ERUJVR19DQVRFR09SWV9JTklUPC9zcGFuPjwvYT4sIGl0cyB2YWx1ZXMgY2FuJ3QgYmUgY2hhbmdlZCBhbnltb3JlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGVidWdHcmFwaERldGFpbHMiPjwvYT48aDM+ZW51bSBHc3REZWJ1Z0dyYXBoRGV0YWlsczwvaDM+Ci08cD5BdmFpbGFibGUgZGV0YWlscyBmb3IgcGlwZWxpbmUgZ3JhcGhzIHByb2R1Y2VkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5HU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKCk8L2NvZGU+PC9hPgotYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEUtV0lUSC1UUzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3REZWJ1Z0dyYXBoRGV0YWlscy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1HUkFQSC1TSE9XLU1FRElBLVRZUEU6Q0FQUyI+PC9hPkdTVF9ERUJVR19HUkFQSF9TSE9XX01FRElBX1RZUEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+c2hvdyBjYXBzLW5hbWUgb24gZWRnZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUdSQVBILVNIT1ctQ0FQUy1ERVRBSUxTOkNBUFMiPjwvYT5HU1RfREVCVUdfR1JBUEhfU0hPV19DQVBTX0RFVEFJTFM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+c2hvdyBjYXBzLWRldGFpbHMgb24gZWRnZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFQlVHLUdSQVBILVNIT1ctTk9OLURFRkFVTFQtUEFSQU1TOkNBUFMiPjwvYT5HU1RfREVCVUdfR1JBUEhfU0hPV19OT05fREVGQVVMVF9QQVJBTVM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+c2hvdyBtb2RpZmllZCBwYXJhbWV0ZXJzIG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVCVUctR1JBUEgtU0hPVy1TVEFURVM6Q0FQUyI+PC9hPkdTVF9ERUJVR19HUkFQSF9TSE9XX1NUQVRFUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zaG93IGVsZW1lbnQgc3RhdGVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1HUkFQSC1TSE9XLUZVTEwtUEFSQU1TOkNBUFMiPjwvYT5HU1RfREVCVUdfR1JBUEhfU0hPV19GVUxMX1BBUkFNUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zaG93IGZ1bGwgZWxlbWVudCBwYXJhbWV0ZXIgdmFsdWVzIGV2ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhleSBhcmUgdmVyeSBsb25nPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUJVRy1HUkFQSC1TSE9XLUFMTDpDQVBTIj48L2E+R1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNob3cgYWxsIHRoZSB0eXBpY2FsIGRldGFpbHMgdGhhdCBvbmUgbWlnaHQgd2FudDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVCVUctR1JBUEgtU0hPVy1WRVJCT1NFOkNBUFMiPjwvYT5HU1RfREVCVUdfR1JBUEhfU0hPV19WRVJCT1NFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNob3cgYWxsIGRldGFpbHMgcmVnYXJkbGVzcyBvZiBob3cgbGFyZ2Ugb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlIHRoZXkgbWFrZSB0aGUgcmVzdWx0aW5nIG91dHB1dDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUZVTkNUSU9OOkNBUFMiPjwvYT48aDM+R1NUX0ZVTkNUSU9OPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jICBkZWZpbmUgR1NUX0ZVTkNUSU9OICAgICAoKGNvbnN0IGNoYXIqKSAoX19mdW5jX18pKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIHNob3VsZCBldmFsdWF0ZSB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBhbmQgYmUgc2hvdWxkCi1iZSBkZWZpbmVkIHdoZW4gY29uZmlndXJpbmcgeW91ciBwcm9qZWN0LCBhcyBpdCBpcyBjb21waWxlciBkZXBlbmRhbnQuIElmIGl0Ci1pcyBub3QgZGVmaW5lZCwgc29tZSBkZWZhdWx0IHZhbHVlIGlzIHVzZWQuIEl0IGlzIHVzZWQgdG8gcHJvdmlkZSBkZWJ1Z2dpbmcKLW91dHB1dCB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIG9mIHRoZSBtZXNzYWdlLjwvcD4KLTxwPk5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIEdfU1RSRlVOQyBhcyB3ZSBkbyBub3Qgd2FudCB0aGUgZnVsbAotZnVuY3Rpb24gc2lnbmF0dXJlIGluIEMrKyBjb2RlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBVC1ERUZBVUxUOkNBUFMiPjwvYT48aDM+R1NUX0NBVF9ERUZBVUxUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKsKgR1NUX0NBVF9ERUZBVUxUOwotPC9wcmU+Ci08cD5EZWZhdWx0IGdzdHJlYW1lciBjb3JlIGRlYnVnIGxvZyBjYXRlZ29yeS4gUGxlYXNlIGRlZmluZSB5b3VyIG93bi48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1USU1FLUZPUk1BVDpDQVBTIj48L2E+PGgzPkdTVF9USU1FX0ZPUk1BVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVElNRV9GT1JNQVQgInU6JTAydTolMDJ1LiUwOXUiCi08L3ByZT4KLTxwPkEgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gcHJpbnRmLWxpa2UgZm9ybWF0IHN0cmluZ3MgdG8gZGlzcGxheSBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB2YWx1ZSBpbiBoOm06cyBmb3JtYXQuICBVc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVRJTUUtQVJHUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVJHUygpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9USU1FX0FSR1MoKTwvY29kZT48L2E+IHRvIGNvbnN0cnVjdAotdGhlIG1hdGNoaW5nIGFyZ3VtZW50cy48L3A+Ci08cD5FeGFtcGxlOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5wcmludGY8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7JSZxdW90Ozwvc3Bhbj4gR1NUX1RJTUVfRk9STUFUIDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVRJTUUtQVJHUzpDQVBTIj5HU1RfVElNRV9BUkdTPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj50czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TVElNRS1GT1JNQVQ6Q0FQUyI+PC9hPjxoMz5HU1RfU1RJTUVfRk9STUFUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9TVElNRV9GT1JNQVQgImMlIiBHU1RfVElNRV9GT1JNQVQKLTwvcHJlPgotPHA+QSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBwcmludGYtbGlrZSBmb3JtYXQgc3RyaW5ncyB0byBkaXNwbGF5IGEgc2lnbmVkCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIGluIGg6bTpzIGZvcm1hdC4gIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BUkdTKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1RJTUVfQVJHUygpPC9jb2RlPjwvYT4gdG8KLWNvbnN0cnVjdCB0aGUgbWF0Y2hpbmcgYXJndW1lbnRzLjwvcD4KLTxwPkV4YW1wbGU6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPnByaW50Zjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDslJnF1b3Q7PC9zcGFuPiBHU1RfU1RJTUVfRk9STUFUIDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVNUSU1FLUFSR1M6Q0FQUyI+R1NUX1NUSU1FX0FSR1M8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnRzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpOzwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxwPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBUUi1GT1JNQVQ6Q0FQUyI+PC9hPjxoMz5HU1RfUFRSX0ZPUk1BVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUFRSX0ZPUk1BVCAgICAgInBcYUEiCi08L3ByZT4KLTxwPnByaW50ZiBmb3JtYXQgdHlwZSB1c2VkIHRvIGRlYnVnIEdTdHJlYW1lciB0eXBlcy4gWW91IGNhbiB1c2UgdGhpcyBpbgotY29tYmluYXRpb24gd2l0aCBHU3RyZWFtZXIncyBkZWJ1ZyBsb2dnaW5nIHN5c3RlbSBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvbnMKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1pbmZvLXZhc3ByaW50ZiIgdGl0bGU9ImdzdF9pbmZvX3Zhc3ByaW50ZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luZm9fdmFzcHJpbnRmKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXZwcmludGYiIHRpdGxlPSJnc3RfaW5mb19zdHJkdXBfdnByaW50ZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luZm9fc3RyZHVwX3ZwcmludGYoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtaW5mby1zdHJkdXAtcHJpbnRmIiB0aXRsZT0iZ3N0X2luZm9fc3RyZHVwX3ByaW50ZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luZm9fc3RyZHVwX3ByaW50ZigpPC9jb2RlPjwvYT4KLXRvIHByZXR0eS1wcmludCB0aGUgZm9sbG93aW5nIHR5cGVzOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4sCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRlVGltZTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4sCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2U8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWVyeTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRleHQ8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+LiBBbGwKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gdHlwZXMgd2lsbCBiZSBwcmludGVkIGFzIHR5cGVuYW1lIHBsdXMgcG9pbnRlciwgYW5kIGV2ZXJ5dGhpbmcKLWVsc2Ugd2lsbCBzaW1wbHkgYmUgcHJpbnRlZCBhcyBwb2ludGVyIGFkZHJlc3MuPC9wPgotPHA+VGhpcyBjYW4gb25seSBiZSB1c2VkIG9uIHR5cGVzIHdob3NlIHNpemUgaXMgJmd0Oz0gc2l6ZW9mKGdwb2ludGVyKS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TRUdNRU5ULUZPUk1BVDpDQVBTIj48L2E+PGgzPkdTVF9TRUdNRU5UX0ZPUk1BVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU0VHTUVOVF9GT1JNQVQgInBcYUIiCi08L3ByZT4KLTxwPnByaW50ZiBmb3JtYXQgdHlwZSB1c2VkIHRvIGRlYnVnIEdTdHJlYW1lciBzZWdtZW50cy4gWW91IGNhbiB1c2UgdGhpcyBpbgotY29tYmluYXRpb24gd2l0aCBHU3RyZWFtZXIncyBkZWJ1ZyBsb2dnaW5nIHN5c3RlbSBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvbnMKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1pbmZvLXZhc3ByaW50ZiIgdGl0bGU9ImdzdF9pbmZvX3Zhc3ByaW50ZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luZm9fdmFzcHJpbnRmKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXZwcmludGYiIHRpdGxlPSJnc3RfaW5mb19zdHJkdXBfdnByaW50ZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luZm9fc3RyZHVwX3ZwcmludGYoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtaW5mby1zdHJkdXAtcHJpbnRmIiB0aXRsZT0iZ3N0X2luZm9fc3RyZHVwX3ByaW50ZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2luZm9fc3RyZHVwX3ByaW50ZigpPC9jb2RlPjwvYT4KLXRvIHByZXR0eS1wcmludCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmVzLgotVGhpcyBjYW4gb25seSBiZSB1c2VkIG9uIHBvaW50ZXJzIHRvIEdzdFNlZ21lbnQgc3RydWN0dXJlcy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEluZm8uc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1ydW5uaW5nLmh0bWwiIHRpdGxlPSJSdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3QtcnVubmluZzwvc3Bhbj48L2E+IGZvciBjb21tYW5kIGxpbmUgcGFyYW1ldGVycwotYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFmZmVjdCB0aGUgZGVidWdnaW5nIG91dHB1dC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDY0OWY2Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RJdGVyYXRvcjogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RJdGVyYXRvci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLnRvcF9vZl9wYWdlIj48L2E+R3N0SXRlcmF0b3I8L3NwYW4+PC9oMj4KLTxwPkdzdEl0ZXJhdG9yIOKAlCBPYmplY3QgdG8gcmV0cmlldmUgbXVsdGlwbGUgZWxlbWVudHMgaW4gYSB0aHJlYWRzYWZlCi13YXkuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uwqAoKSI+KkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvclJlc3VsdDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvck5leHRGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uwqAoKSI+KkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9ySXRlbSIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JJdGVtIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9ySXRlbTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uwqAoKSI+KkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb27CoCgpIj4qR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb27CoCgpIj4qR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uwqAoKSI+KkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZvbGRGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uwqAoKSI+KkdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SOkNBUFMiIHRpdGxlPSJHU1RfSVRFUkFUT1IoKSI+R1NUX0lURVJBVE9SPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfSVRFUkFUT1JfTE9DSygpIj5HU1RfSVRFUkFUT1JfTE9DSzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItQ09PS0lFOkNBUFMiIHRpdGxlPSJHU1RfSVRFUkFUT1JfQ09PS0lFKCkiPkdTVF9JVEVSQVRPUl9DT09LSUU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLU9SSUctQ09PS0lFOkNBUFMiIHRpdGxlPSJHU1RfSVRFUkFUT1JfT1JJR19DT09LSUUoKSI+R1NUX0lURVJBVE9SX09SSUdfQ09PS0lFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItbmV3IiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX25ld8KgKCkiPmdzdF9pdGVyYXRvcl9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldy1saXN0IiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX25ld19saXN0wqAoKSI+Z3N0X2l0ZXJhdG9yX25ld19saXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXctc2luZ2xlIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGXCoCgpIj5nc3RfaXRlcmF0b3JfbmV3X3NpbmdsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItY29weSIgdGl0bGU9ImdzdF9pdGVyYXRvcl9jb3B5wqAoKSI+Z3N0X2l0ZXJhdG9yX2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZnJlZSIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mcmVlwqAoKSI+Z3N0X2l0ZXJhdG9yX2ZyZWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN1bHQiIHRpdGxlPSJlbnVtIEdzdEl0ZXJhdG9yUmVzdWx0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yUmVzdWx0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXh0IiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX25leHTCoCgpIj5nc3RfaXRlcmF0b3JfbmV4dDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1yZXN5bmMiIHRpdGxlPSJnc3RfaXRlcmF0b3JfcmVzeW5jwqAoKSI+Z3N0X2l0ZXJhdG9yX3Jlc3luYzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1wdXNoIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX3B1c2jCoCgpIj5nc3RfaXRlcmF0b3JfcHVzaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZmlsdGVyIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZpbHRlcsKgKCkiPmdzdF9pdGVyYXRvcl9maWx0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN1bHQiIHRpdGxlPSJlbnVtIEdzdEl0ZXJhdG9yUmVzdWx0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yUmVzdWx0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mb2xkIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZvbGTCoCgpIj5nc3RfaXRlcmF0b3JfZm9sZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JSZXN1bHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3JSZXN1bHQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZvcmVhY2giIHRpdGxlPSJnc3RfaXRlcmF0b3JfZm9yZWFjaMKgKCkiPmdzdF9pdGVyYXRvcl9mb3JlYWNoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZmluZC1jdXN0b20iIHRpdGxlPSJnc3RfaXRlcmF0b3JfZmluZF9jdXN0b23CoCgpIj5nc3RfaXRlcmF0b3JfZmluZF9jdXN0b208L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0SXRlcmF0b3Iub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtIiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvckl0ZW0iPkdzdEl0ZXJhdG9ySXRlbTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JSZXN1bHQiPkdzdEl0ZXJhdG9yUmVzdWx0PC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+QSBHc3RJdGVyYXRvciBpcyB1c2VkIHRvIHJldHJpZXZlIG11bHRpcGxlIG9iamVjdHMgZnJvbSBhbm90aGVyIG9iamVjdCBpbgotYSB0aHJlYWRzYWZlIHdheS48L3A+Ci08cD5WYXJpb3VzIEdTdHJlYW1lciBvYmplY3RzIHByb3ZpZGUgYWNjZXNzIHRvIHRoZWlyIGludGVybmFsIHN0cnVjdHVyZXMgdXNpbmcKLWFuIGl0ZXJhdG9yLjwvcD4KLTxwPk5vdGUgdGhhdCBpZiBjYWxsaW5nIGEgR3N0SXRlcmF0b3IgZnVuY3Rpb24gcmVzdWx0cyBpbiB5b3VyIGNvZGUgcmVjZWl2aW5nCi1hIHJlZmNvdW50ZWQgb2JqZWN0ICh3aXRoLCBzYXksIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVN0YW5kYXJkLVBhcmFtZXRlci1hbmQtVmFsdWUtVHlwZXMuaHRtbCNnLXZhbHVlLWdldC1vYmplY3QiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z192YWx1ZV9nZXRfb2JqZWN0KCk8L2NvZGU+PC9hPiksIHRoZSByZWZjb3VudCBmb3IgdGhhdAotb2JqZWN0IHdpbGwgbm90IGJlIGluY3JlYXNlZC4gWW91ciBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgYSByZWZlcmVuY2UKLWlmIGl0IHdhbnRzIHRvIGNvbnRpbnVlIHVzaW5nIGl0IGxhdGVyLjwvcD4KLTxwPlRoZSBiYXNpYyB1c2UgcGF0dGVybiBvZiBhbiBpdGVyYXRvciBpcyBhcyBmb2xsb3dzOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTkKLTIwCi0yMQotMjIKLTIzCi0yNDwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+R3N0SXRlcmF0b3IgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+aXQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+X2dldF9pdGVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5vYmplY3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci1HVmFsdWUgaXRlbSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gR19WQUxVRV9JTklUPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci1kb25lIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiBGQUxTRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9ImtleXdvcmQiPndoaWxlPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCE8L3NwYW4+ZG9uZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5zd2l0Y2g8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5leHQiPmdzdF9pdGVyYXRvcl9uZXh0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+aXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5pdGVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpIHs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNhc2U8L3NwYW4+IEdTVF9JVEVSQVRPUl9PSzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj5nZXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj51c2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj5jaGFuZ2UgaXRlbSBoZXJlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNnLXZhbHVlLXJlc2V0Ij5nX3ZhbHVlX3Jlc2V0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPigmYW1wOzwvc3Bhbj5pdGVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jYXNlPC9zcGFuPiBHU1RfSVRFUkFUT1JfUkVTWU5DPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPnJvbGxiYWNrIGNoYW5nZXMgdG8gaXRlbXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItcmVzeW5jIj5nc3RfaXRlcmF0b3JfcmVzeW5jPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+aXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+YnJlYWs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNhc2U8L3NwYW4+IEdTVF9JVEVSQVRPUl9FUlJPUjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj53cm9uZyBwYXJhbWV0ZXJzIHdlcmUgZ2l2ZW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPgotICAgICAgZG9uZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gVFJVRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jYXNlPC9zcGFuPiBHU1RfSVRFUkFUT1JfRE9ORTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPgotICAgICAgZG9uZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gVFJVRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI2ctdmFsdWUtdW5zZXQiPmdfdmFsdWVfdW5zZXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCZhbXA7PC9zcGFuPml0ZW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mcmVlIj5nc3RfaXRlcmF0b3JfZnJlZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPml0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uIj48L2E+PGgzPkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKmNvcHk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT4KLSBhbmQgc2hvdWxkCi1jcmVhdGUgYSBjb3B5IG9mIGFsbCBjdXN0b20gaXRlcmF0b3IgZmllbGRzIG9yIGluY3JlYXNlIHRoZWlyCi1yZWZlcmVuY2UgY291bnRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPml0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG9yaWdpbmFsIGl0ZXJhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvcHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgY29waWVkIGl0ZXJhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uIj48L2E+PGgzPkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvclJlc3VsdDwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqcmVzdWx0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgaXRlcmF0b3IKLXNob3VsZCBiZSByZXRyaWV2ZWQuPC9wPgotPHA+SW1wbGVtZW50b3JzIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBzaG91bGQgaW1wbGVtZW50IHRoaXMKLWZ1bmN0aW9uIGFuZCBwYXNzIGl0IHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY3VzdG9tIGl0ZXJhdG9yLgotVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RJdGVyYXRvck5leHRGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpdGVyYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXN1bHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBvaW50ZXIgdG8gaG9sZCB0aGUgbmV4dCBpdGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RJdGVyYXRvck5leHRGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24iPjwvYT48aDM+R3N0SXRlcmF0b3JJdGVtRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtIiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvckl0ZW0iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3JJdGVtPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICppdGVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBuZXh0IGl0ZW0gb2YgdGhlIGl0ZXJhdG9yCi1oYXMgYmVlbiByZXRyaWV2ZWQuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2tpcCBpdGVtcyBvciBzdG9wCi10aGUgaXRlcmF0b3IuPC9wPgotPHA+VGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpdGVyYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGl0ZW0gYmVpbmcgcmV0cmlldmVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24iPjwvYT48aDM+R3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIGNvbmN1cnJlbnQgdXBkYXRlIGhhcHBlbmVkCi10byB0aGUgaXRlcmF0ZWQgZGF0YXN0cnVjdHVyZS4gVGhlIGltcGxlbWVudG9yIG9mIHRoZSBpdGVyYXRvciBzaG91bGQKLXJlc3RhcnQgdGhlIGl0ZXJhdG9yIGZyb20gdGhlIGJlZ2lubmluZyBhbmQgY2xlYW4gdXAgYW55IHN0YXRlIGl0IG1pZ2h0Ci1oYXZlLjwvcD4KLTxwPkltcGxlbWVudG9ycyBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gc2hvdWxkIGltcGxlbWVudCB0aGlzCi1mdW5jdGlvbiBhbmQgcGFzcyBpdCB0byB0aGUgY29uc3RydWN0b3Igb2YgdGhlIGN1c3RvbSBpdGVyYXRvci4KLVRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpdGVyYXRvciBsb2NrIGhlbGQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaXRlcmF0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIj48L2E+PGgzPkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBpdGVyYXRvciBpcyBmcmVlZC48L3A+Ci08cD5JbXBsZW1lbnRvcnMgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHNob3VsZCBpbXBsZW1lbnQgdGhpcwotZnVuY3Rpb24gYW5kIHBhc3MgaXQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjdXN0b20gaXRlcmF0b3IuCi1UaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgaXRlcmF0b3IgbG9jayBoZWxkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpdGVyYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24iPjwvYT48aDM+R3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICppdGVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZvcmVhY2giIHRpdGxlPSJnc3RfaXRlcmF0b3JfZm9yZWFjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZvcmVhY2goKTwvY29kZT48L2E+IGZvciBldmVyeSBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPml0ZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgaXRlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Vc2VyIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24iPjwvYT48aDM+R3N0SXRlcmF0b3JGb2xkRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RJdGVyYXRvckZvbGRGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKml0ZW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnJldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZnVuY3Rpb24gdG8gYmUgcGFzc2VkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZm9sZCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mb2xkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfZm9sZCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXRlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpdGVtIHRvIGZvbGQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvbGxlY3RpbmcgdGhlIHJlc3VsdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5kYXRhIHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZvbGQiIHRpdGxlPSJnc3RfaXRlcmF0b3JfZm9sZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZvbGQoKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RJdGVyYXRvckZvbGRGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZm9sZCBzaG91bGQgY29udGludWUsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIGl0IHNob3VsZCBzdG9wLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtSVRFUkFUT1I6Q0FQUyI+PC9hPjxoMz5HU1RfSVRFUkFUT1IoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfSVRFUkFUT1IoaXQpICAgICAgICAgICAgICAgICgoR3N0SXRlcmF0b3IqKShpdCkpCi08L3ByZT4KLTxwPk1hY3JvIHRvIGNhc3QgdG8gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUlURVJBVE9SLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtSVRFUkFUT1ItTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9JVEVSQVRPUl9MT0NLKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lURVJBVE9SX0xPQ0soaXQpICAgICAgICAgICAoR1NUX0lURVJBVE9SKGl0KS0mZ3Q7bG9jaykKLTwvcHJlPgotPHA+TWFjcm8gdG8gZ2V0IHRoZSBsb2NrIHByb3RlY3RpbmcgdGhlIGRhdGFzdHJ1Y3R1cmUgYmVpbmcgaXRlcmF0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUlURVJBVE9SLUxPQ0sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPml0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBsb2NrIG9mPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtSVRFUkFUT1ItQ09PS0lFOkNBUFMiPjwvYT48aDM+R1NUX0lURVJBVE9SX0NPT0tJRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9JVEVSQVRPUl9DT09LSUUoaXQpICAgICAgICAgKEdTVF9JVEVSQVRPUihpdCktJmd0O2Nvb2tpZSkKLTwvcHJlPgotPHA+TWFjcm8gdG8gZ2V0IHRoZSBjb29raWUgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+LiBUaGUgY29va2llIG9mIHRoZQotaXRlcmF0b3IgaXMgdGhlIHZhbHVlIG9mIHRoZSBtYXN0ZXIgY29va2llIHdoZW4gdGhlIGl0ZXJhdG9yCi13YXMgY3JlYXRlZC4KLVdoZW5ldmVyIHRoZSBpdGVyYXRvciBpcyBpdGVyYXRlZCwgdGhlIHZhbHVlIGlzIGNvbXBhcmVkIHRvIHRoZQotdmFsdWUgb2YgdGhlIG1hc3RlciBjb29raWUuIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgYSBjb25jdXJyZW50Ci1tb2RpZmljYXRpb24gaGFwcGVuZWQgdG8gdGhlIGl0ZXJhdG9yIGFuZCBhIHJlc3luYyBpcyBuZWVkZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUlURVJBVE9SLUNPT0tJRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBnZXQgdGhlIGNvb2tpZSBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUlURVJBVE9SLU9SSUctQ09PS0lFOkNBUFMiPjwvYT48aDM+R1NUX0lURVJBVE9SX09SSUdfQ09PS0lFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0lURVJBVE9SX09SSUdfQ09PS0lFKGl0KSAgICAoR1NUX0lURVJBVE9SKGl0KS0mZ3Q7bWFzdGVyX2Nvb2tpZSkKLTwvcHJlPgotPHA+TWFjcm8gdG8gZ2V0IGEgcG9pbnRlciB0byB3aGVyZSB0aGUgbWFzdGVyIGNvb2tpZSBpcyBzdG9yZWQuIFRoZQotbWFzdGVyIGNvb2tpZSBwcm90ZWN0cyB0aGUgc3RydWN0dXJlIGJlaW5nIGl0ZXJhdGVkIGFuZCBnZXRzIHVwZGF0ZWQKLXdoZW5ldmVyIHRoZSBkYXRhc3RydWN0dXJlIGNoYW5nZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUlURVJBVE9SLU9SSUctQ09PS0lFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHRvIGdldCB0aGUgbWFzdGVyIGNvb2tpZSBvZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLW5ldyI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLWdzdF9pdGVyYXRvcl9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaHJlYWRzLmh0bWwjR011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R011dGV4PC9zcGFuPjwvYT4gKmxvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICptYXN0ZXJfY29va2llPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uPC9zcGFuPjwvYT4gY29weTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvck5leHRGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvck5leHRGdW5jdGlvbjwvc3Bhbj48L2E+IG5leHQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JJdGVtRnVuY3Rpb248L3NwYW4+PC9hPiBpdGVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uPC9zcGFuPjwvYT4gcmVzeW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uPC9zcGFuPjwvYT4gZnJlZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgaXRlcmF0b3IuIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IHVzZWQgZm9yIG9iamVjdHMKLWltcGxlbWVudGluZyB0aGUgbmV4dC9yZXN5bmMvZnJlZSBmdW5jdGlvbiB0byBpdGVyYXRlIGEgZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPHA+Rm9yIGVhY2ggaXRlbSByZXRyaWV2ZWQsIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPgotIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBsb2NrCi1oZWxkLiBUaGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyZWU8L2NvZGU+PC9lbT4KLSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgaXRlcmF0b3IgaXMgZnJlZWQuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpemUgb2YgdGhlIGl0ZXJhdG9yIHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBjaGlsZHJlbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRocmVhZHMuaHRtbCNHTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTXV0ZXg8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWFzdGVyX2Nvb2tpZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBvaW50ZXIgdG8gYSBndWludDMyIHRoYXQgaXMgY2hhbmdlZCB3aGVuIHRoZSBpdGVtcyBpbiB0aGUKLWl0ZXJhdG9yIGNoYW5nZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvcHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jb3B5IGZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5leHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mdW5jdGlvbiB0byBnZXQgbmV4dCBpdGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPml0ZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mdW5jdGlvbiB0byBjYWxsIG9uIGVhY2ggaXRlbSByZXRyaWV2ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzeW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZnVuY3Rpb24gdG8gcmVzeW5jIHRoZSBpdGVyYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mcmVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZnVuY3Rpb24gdG8gZnJlZSB0aGUgaXRlcmF0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLW5ldy1saXN0Ij48L2E+PGgzPmdzdF9pdGVyYXRvcl9uZXdfbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfaXRlcmF0b3JfbmV3X2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaHJlYWRzLmh0bWwjR011dGV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R011dGV4PC9zcGFuPjwvYT4gKmxvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKm1hc3Rlcl9jb29raWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICoqbGlzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm93bmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JJdGVtRnVuY3Rpb248L3NwYW4+PC9hPiBpdGVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBpdGVyYXRvciBkZXNpZ25lZCBmb3IgaXRlcmF0aW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXN0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhlIGxpc3QgeW91IGl0ZXJhdGUgaXMgdXN1YWxseSBwYXJ0IG9mIGEgZGF0YSBzdHJ1Y3R1cmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm93bmVyPC9jb2RlPjwvZW0+Ci0gYW5kIGlzCi1wcm90ZWN0ZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9jazwvY29kZT48L2VtPgotLiA8L3A+Ci08cD5UaGUgaXRlcmF0b3Igd2lsbCB1c2UgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxvY2s8L2NvZGU+PC9lbT4KLSB0byByZXRyaWV2ZSB0aGUgbmV4dCBpdGVtIG9mIHRoZSBsaXN0IGFuZCBpdAotd2lsbCB0aGVuIGNhbGwgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+Ci0gZnVuY3Rpb24gYmVmb3JlIHJlbGVhc2luZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9jazwvY29kZT48L2VtPgotIGFnYWluLjwvcD4KLTxwPldoZW4gYSBjb25jdXJyZW50IHVwZGF0ZSB0byB0aGUgbGlzdCBpcyBwZXJmb3JtZWQsIHVzdWFsbHkgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm93bmVyPC9jb2RlPjwvZW0+Ci0gd2hpbGUKLWhvbGRpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxvY2s8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc3Rlcl9jb29raWU8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIHVwZGF0ZWQuIFRoZSBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbgotd2lsbCBub3RpY2UgdGhlIHVwZGF0ZSBvZiB0aGUgY29va2llIGFuZCB3aWxsIHJldHVybiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLVJFU1lOQzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX1JFU1lOQzwvY29kZT48L2E+IHRvCi10aGUgdXNlciBvZiB0aGUgaXRlcmF0b3IgaW4gdGhlIG5leHQgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5leHQiIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV4dMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX25leHQoKTwvY29kZT48L2E+LjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1uZXctbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBlbGVtZW50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRocmVhZHMuaHRtbCNHTXV0ZXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTXV0ZXg8L3NwYW4+PC9hPiBwcm90ZWN0aW5nIHRoZSBsaXN0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXN0ZXJfY29va2llPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byBhIGd1aW50MzIgdGhhdCBpcyBpbmNyZW1lbnRlZCB3aGVuIHRoZSBsaXN0Ci1pcyBjaGFuZ2VkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byB0aGUgbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vd25lcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9iamVjdCBvd25pbmcgdGhlIGxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXRlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZ1bmN0aW9uIHRvIGNhbGwgb24gZWFjaCBpdGVtIHJldHJpZXZlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLW5ldy1saXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGlzdDwvY29kZT48L2VtPgotLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1uZXctc2luZ2xlIj48L2E+PGgzPmdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLWdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IGlzIGEgY29udmVuaWVudCBpdGVyYXRvciBmb3IgdGhlIGNvbW1vbgotY2FzZSB3aGVyZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gbmVlZHMgdG8gYmUgcmV0dXJuZWQgYnV0IG9ubHkKLWEgc2luZ2xlIG9iamVjdCBoYXMgdG8gYmUgY29uc2lkZXJlZC4gVGhpcyBoYXBwZW5zIG9mdGVuCi1mb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIiB0aXRsZT0iR3N0UGFkSXRlckludExpbmtGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLW5ldy1zaW5nbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIHBhc3NlZCBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b2JqZWN0IHRoYXQgdGhpcyBpdGVyYXRvciBzaG91bGQgcmV0dXJuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItbmV3LXNpbmdsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItY29weSI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfY29wecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+wqAqCi1nc3RfaXRlcmF0b3JfY29weSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvcHkgdGhlIGl0ZXJhdG9yIGFuZCBpdHMgc3RhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPml0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLWNvcHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBjb3B5IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItZnJlZSI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfZnJlZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9pdGVyYXRvcl9mcmVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnJlZSB0aGUgaXRlcmF0b3IuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItZnJlZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBmcmVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItbmV4dCI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfbmV4dMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JSZXN1bHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3JSZXN1bHQ8L3NwYW4+PC9hPgotZ3N0X2l0ZXJhdG9yX25leHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZWxlbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPgotLiA8L3A+Ci08cD5Pbmx5IHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItT0s6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9PSzwvY29kZT48L2E+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbTwvY29kZT48L2VtPgotIHdpbGwgY29udGFpbiBhIHZhbGlkCi12YWx1ZS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4KLSBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byB0aGUgdHlwZSBvZiB0aGUgaXRlcmF0b3Igb3IKLWluaXRpYWxpemVkIHRvIHplcm9lcyB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS11bnNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Vuc2V0KCk8L2NvZGU+PC9hPi4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKLXVuc2V0dGluZyBvciByZXNldHRpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4KLSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS11bnNldCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX3ZhbHVlX3Vuc2V0KCk8L2NvZGU+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI2ctdmFsdWUtcmVzZXQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z192YWx1ZV9yZXNldCgpPC9jb2RlPjwvYT4KLWFmdGVyIHVzYWdlLjwvcD4KLTxwPldoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItRE9ORTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0RPTkU8L2NvZGU+PC9hPiwgbm8gbW9yZSBlbGVtZW50cyBjYW4gYmUKLXJldHJpZXZlZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPgotLjwvcD4KLTxwPkEgcmV0dXJuIHZhbHVlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItUkVTWU5DOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSVRFUkFUT1JfUkVTWU5DPC9jb2RlPjwvYT4gaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbGlzdCB3YXMKLWNvbmN1cnJlbnRseSB1cGRhdGVkLiBUaGUgdXNlciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT4KLSBzaG91bGQgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLXJlc3luYyIgdGl0bGU9ImdzdF9pdGVyYXRvcl9yZXN5bmPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pdGVyYXRvcl9yZXN5bmMoKTwvY29kZT48L2E+IHRvCi1nZXQgdGhlIG5ld2x5IHVwZGF0ZWQgbGlzdC4gPC9wPgotPHA+QSByZXR1cm4gdmFsdWUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1FUlJPUjpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0VSUk9SPC9jb2RlPjwvYT4gaW5kaWNhdGVzIGFuIHVucmVjb3ZlcmFibGUgZmF0YWwgZXJyb3IuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLW5leHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBpdGVyYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBob2xkIG5leHQgZWxlbWVudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVyLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItbmV4dC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSByZXN1bHQgb2YgdGhlIGl0ZXJhdGlvbi4gVW5zZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4KLWFmdGVyIHVzYWdlLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1yZXN5bmMiPjwvYT48aDM+Z3N0X2l0ZXJhdG9yX3Jlc3luY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9pdGVyYXRvcl9yZXN5bmMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXN5bmMgdGhlIGl0ZXJhdG9yLiB0aGlzIGZ1bmN0aW9uIGlzIG1vc3RseSBjYWxsZWQKLWFmdGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItbmV4dCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9uZXh0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfbmV4dCgpPC9jb2RlPjwvYT4gcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1SRVNZTkM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9SRVNZTkM8L2NvZGU+PC9hPi48L3A+Ci08cD5XaGVuIGFuIGl0ZXJhdG9yIHdhcyBwdXNoZWQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+Ci0sIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBwb3BwZWQgYWdhaW4KLXdpdGggdGhpcyBmdW5jdGlvbi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1yZXN5bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPml0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gdG8gcmVzeW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItcHVzaCI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfcHVzaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9pdGVyYXRvcl9wdXNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiAqaXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKm90aGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1c2hlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b3RoZXI8L2NvZGU+PC9lbT4KLSBpdGVyYXRvciBvbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPgotLiBBbGwgY2FsbHMgcGVyZm9ybWVkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdDwvY29kZT48L2VtPgotIGFyZQotZm9yd2FyZGVkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vdGhlcjwvY29kZT48L2VtPgotLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b3RoZXI8L2NvZGU+PC9lbT4KLSByZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItRE9ORTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0lURVJBVE9SX0RPTkU8L2NvZGU+PC9hPiwgaXQgaXMKLXBvcHBlZCBhZ2FpbiBhbmQgY2FsbHMgYXJlIGhhbmRsZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+Ci0gYWdhaW4uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgdXNlZCBieSBvYmplY3RzIGltcGxlbWVudGluZyB0aGUgaXRlcmF0b3IKLW5leHQgZnVuY3Rpb24gdG8gcmVjdXJzZSBpbnRvIHN1YnN0cnVjdHVyZXMuPC9wPgotPHA+V2hlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLXJlc3luYyIgdGl0bGU9ImdzdF9pdGVyYXRvcl9yZXN5bmPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9pdGVyYXRvcl9yZXN5bmMoKTwvY29kZT48L2E+IGlzIGNhbGxlZCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXQ8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm90aGVyPC9jb2RlPjwvZW0+Ci0gd2lsbCBhdXRvbWF0aWNhbGx5IGJlCi1wb3BwZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItcHVzaC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vdGhlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHRvIHB1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLWZpbHRlciI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfZmlsdGVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT7CoCoKLWdzdF9pdGVyYXRvcl9maWx0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0NvbXBhcmVGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0NvbXBhcmVGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGl0ZXJhdG9yIGZyb20gYW4gZXhpc3RpbmcgaXRlcmF0b3IuIFRoZSBuZXcgaXRlcmF0b3IKLXdpbGwgb25seSByZXR1cm4gdGhvc2UgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY29tcGFyZSBmdW5jdGlvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotLgotVGhlIGZpcnN0IHBhcmFtZXRlciB0aGF0IGlzIHBhc3NlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIGlzIHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9mIHRoZSBjdXJyZW50Ci1pdGVyYXRvciBlbGVtZW50IGFuZCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXNlcl9kYXRhPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gc2hvdWxkCi1yZXR1cm4gMCBmb3IgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbHRlcmVkIGl0ZXJhdG9yLjwvcD4KLTxwPldoZW4gdGhpcyBpdGVyYXRvciBpcyBmcmVlZCwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+Ci0gd2lsbCBhbHNvIGJlIGZyZWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1maWx0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBmaWx0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgY29tcGFyZSBmdW5jdGlvbiB0byBzZWxlY3QgZWxlbWVudHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY29tcGFyZSBmdW5jdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItZmlsdGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPi48L3A+Ci08cD5NVCBzYWZlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItZm9sZCI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfZm9sZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3VsdCIgdGl0bGU9ImVudW0gR3N0SXRlcmF0b3JSZXN1bHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SXRlcmF0b3JSZXN1bHQ8L3NwYW4+PC9hPgotZ3N0X2l0ZXJhdG9yX2ZvbGQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+ICppdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JGb2xkRnVuY3Rpb248L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpyZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Gb2xkcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIG92ZXIgdGhlIGVsZW1lbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVyPC9jb2RlPjwvZW0+Ci0uIFRoYXQgaXMgdG8gc2F5LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIHdpbGwgYmUgY2FsbGVkCi1hcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIChvYmplY3QsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXQ8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVzZXJfZGF0YTwvY29kZT48L2VtPgotKSBmb3IgZWFjaCBvYmplY3QgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+Ci0uIFRoZSBub3JtYWwgdXNlCi1vZiB0aGlzIHByb2NlZHVyZSBpcyB0byBhY2N1bXVsYXRlIHRoZSByZXN1bHRzIG9mIG9wZXJhdGluZyBvbiB0aGUgb2JqZWN0cyBpbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJldDwvY29kZT48L2VtPgotLjwvcD4KLTxwPlRoaXMgcHJvY2VkdXJlIGNhbiBiZSB1c2VkIChhbmQgaXMgdXNlZCBpbnRlcm5hbGx5KSB0byBpbXBsZW1lbnQgdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZvcmVhY2giIHRpdGxlPSJnc3RfaXRlcmF0b3JfZm9yZWFjaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZvcmVhY2goKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZpbmQtY3VzdG9tIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZpbmRfY3VzdG9twqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfZmluZF9jdXN0b20oKTwvY29kZT48L2E+IG9wZXJhdGlvbnMuPC9wPgotPHA+VGhlIGZvbGQgd2lsbCBwcm9jZWVkIGFzIGxvbmcgYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLSByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi4gV2hlbiB0aGUgaXRlcmF0b3IgaGFzIG5vCi1tb3JlIGFyZ3VtZW50cywgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dTVC1JVEVSQVRPUi1ET05FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSVRFUkFUT1JfRE9ORTwvY29kZT48L2E+IHdpbGwgYmUgcmV0dXJuZWQuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiwKLXRoZSBmb2xkIHdpbGwgc3RvcCwgYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItT0s6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9PSzwvY29kZT48L2E+IHdpbGwgYmUgcmV0dXJuZWQuIEVycm9ycyBvciByZXN5bmNzCi13aWxsIGNhdXNlIGZvbGQgdG8gcmV0dXJuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItRVJST1I6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9JVEVSQVRPUl9FUlJPUjwvY29kZT48L2E+IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItUkVTWU5DOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfSVRFUkFUT1JfUkVTWU5DPC9jb2RlPjwvYT4gYXMKLWFwcHJvcHJpYXRlLjwvcD4KLTxwPlRoZSBpdGVyYXRvciB3aWxsIG5vdCBiZSBmcmVlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItZm9sZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IHRvIGZvbGQgb3ZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBmb2xkIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlZWQgdmFsdWUgcGFzc2VkIHRvIHRoZSBmb2xkIGZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmb2xkIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1mb2xkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JSZXN1bHQiIHRpdGxlPSJlbnVtIEdzdEl0ZXJhdG9yUmVzdWx0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3JSZXN1bHQ8L3NwYW4+PC9hPiwgYXMgZGVzY3JpYmVkIGFib3ZlLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1mb3JlYWNoIj48L2E+PGgzPmdzdF9pdGVyYXRvcl9mb3JlYWNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RJdGVyYXRvclJlc3VsdDwvc3Bhbj48L2E+Ci1nc3RfaXRlcmF0b3JfZm9yZWFjaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+Ci0gYW5kIGNhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gZm9yCi1lYWNoIGVsZW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLWZvcmVhY2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBpdGVyYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZWxlbWVudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItZm9yZWFjaC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSByZXN1bHQgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZvbGQiIHRpdGxlPSJnc3RfaXRlcmF0b3JfZm9sZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2l0ZXJhdG9yX2ZvbGQoKTwvY29kZT48L2E+LiBUaGUgaXRlcmF0b3Igd2lsbCBub3QgYmUKLWZyZWVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1pdGVyYXRvci1maW5kLWN1c3RvbSI+PC9hPjxoMz5nc3RfaXRlcmF0b3JfZmluZF9jdXN0b23CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvciIgdGl0bGU9InN0cnVjdCBHc3RJdGVyYXRvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9yPC9zcGFuPjwvYT4gKml0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dDb21wYXJlRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICplbGVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0PC9jb2RlPjwvZW0+Ci0gdGhhdCBtYXRjaGVzIHRoZSBjb21wYXJlIGZ1bmN0aW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0uCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIHNob3VsZCByZXR1cm4gMCB3aGVuIHRoZSBlbGVtZW50IGlzIGZvdW5kLiBUaGUgZmlyc3QgcGFyYW1ldGVyCi10byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIHdpbGwgYmUgdGhlIGN1cnJlbnQgZWxlbWVudCBvZiB0aGUgaXRlcmF0b3IgYW5kIHRoZQotc2Vjb25kIHBhcmFtZXRlciB3aWxsIGJlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51c2VyX2RhdGE8L2NvZGU+PC9lbT4KLS4KLVRoZSByZXN1bHQgd2lsbCBiZSBzdG9yZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW08L2NvZGU+PC9lbT4KLSBpZiBhIHJlc3VsdCBpcyBmb3VuZC48L3A+Ci08cD5UaGUgaXRlcmF0b3Igd2lsbCBub3QgYmUgZnJlZWQuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBhbiBlcnJvciBoYXBwZW5lZCB0byB0aGUgaXRlcmF0b3IKLW9yIGlmIHRoZSBlbGVtZW50IHdhc24ndCBmb3VuZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaXRlcmF0b3ItZmluZC1jdXN0b20ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SXRlcmF0b3I8L3NwYW4+PC9hPiB0byBpdGVyYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gdG8gdXNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGNvbXBhcmUgZnVuY3Rpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoaXMgcGFyYW1ldGVyIGlzIGEgJ3VzZXJfZGF0YScsIGZvciBjYWxsYmFja3M7IG1hbnkgYmluZGluZ3MgY2FuIHBhc3MgTlVMTCBoZXJlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmNsb3N1cmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWl0ZXJhdG9yLWZpbmQtY3VzdG9tLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gUmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGVsZW1lbnQgd2FzIGZvdW5kLCBlbHNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJdGVyYXRvciI+PC9hPjxoMz5zdHJ1Y3QgR3N0SXRlcmF0b3I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RJdGVyYXRvciB7Ci19OwotPC9wcmU+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+IGJhc2Ugc3RydWN0dXJlLiBUaGUgdmFsdWVzIG9mIHRoaXMgc3RydWN0dXJlIGFyZQotcHJvdGVjdGVkIGZvciBzdWJjbGFzc2VzLCB1c2UgdGhlIG1ldGhvZHMgdG8gdXNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3IiIHRpdGxlPSJzdHJ1Y3QgR3N0SXRlcmF0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJdGVyYXRvcjwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEl0ZXJhdG9yLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJdGVyYXRvckl0ZW0iPjwvYT48aDM+ZW51bSBHc3RJdGVyYXRvckl0ZW08L2gzPgotPHA+VGhlIHJlc3VsdCBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiIgdGl0bGU9IkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JJdGVtLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUlURVJBVE9SLUlURU0tU0tJUDpDQVBTIj48L2E+R1NUX0lURVJBVE9SX0lURU1fU0tJUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Ta2lwIHRoaXMgaXRlbTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtSVRFUkFUT1ItSVRFTS1QQVNTOkNBUFMiPjwvYT5HU1RfSVRFUkFUT1JfSVRFTV9QQVNTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlJldHVybiBpdGVtPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1JVEVSQVRPUi1JVEVNLUVORDpDQVBTIj48L2E+R1NUX0lURVJBVE9SX0lURU1fRU5EPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlN0b3AgYWZ0ZXIgdGhpcyBpdGVtLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JSZXN1bHQiPjwvYT48aDM+ZW51bSBHc3RJdGVyYXRvclJlc3VsdDwvaDM+Ci08cD5UaGUgcmVzdWx0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItbmV4dCIgdGl0bGU9ImdzdF9pdGVyYXRvcl9uZXh0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaXRlcmF0b3JfbmV4dCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0SXRlcmF0b3JSZXN1bHQubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtSVRFUkFUT1ItRE9ORTpDQVBTIj48L2E+R1NUX0lURVJBVE9SX0RPTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Tm8gbW9yZSBpdGVtcyBpbiB0aGUgaXRlcmF0b3I8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUlURVJBVE9SLU9LOkNBUFMiPjwvYT5HU1RfSVRFUkFUT1JfT0s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QW4gaXRlbSB3YXMgcmV0cmlldmVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1JVEVSQVRPUi1SRVNZTkM6Q0FQUyI+PC9hPkdTVF9JVEVSQVRPUl9SRVNZTkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RGF0YXN0cnVjdHVyZSBjaGFuZ2VkIHdoaWxlIGl0ZXJhdGluZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtSVRFUkFUT1ItRVJST1I6Q0FQUyI+PC9hPkdTVF9JVEVSQVRPUl9FUlJPUjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BbiBlcnJvciBoYXBwZW5lZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0SXRlcmF0b3Iuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNZXRhLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNZXRhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTQ1OGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0TWV0YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODcxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RNZXRhOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RNZXRhLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1ldGEiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0TWV0YS50b3Bfb2ZfcGFnZSI+PC9hPkdzdE1ldGE8L3NwYW4+PC9oMj4KLTxwPkdzdE1ldGEg4oCUIEJ1ZmZlciBtZXRhZGF0YTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0TWV0YS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUdTOkNBUFMiIHRpdGxlPSJHU1RfTUVUQV9GTEFHUygpIj5HU1RfTUVUQV9GTEFHUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfTUVUQV9GTEFHX0lTX1NFVCgpIj5HU1RfTUVUQV9GTEFHX0lTX1NFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfTUVUQV9GTEFHX1NFVCgpIj5HU1RfTUVUQV9GTEFHX1NFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NRVRBX0ZMQUdfVU5TRVQoKSI+R1NUX01FVEFfRkxBR19VTlNFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluaXRGdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFJbml0RnVuY3Rpb27CoCgpIj4qR3N0TWV0YUluaXRGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFGcmVlRnVuY3Rpb27CoCgpIj4qR3N0TWV0YUZyZWVGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb27CoCgpIj4qR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1UUkFOU0ZPUk0tSVMtQ09QWTpDQVBTIiB0aXRsZT0iR1NUX01FVEFfVFJBTlNGT1JNX0lTX0NPUFkoKSI+R1NUX01FVEFfVFJBTlNGT1JNX0lTX0NPUFk8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdUeXBlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtYXBpLXR5cGUtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlcsKgKCkiPmdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLWFwaS10eXBlLWhhcy10YWciIHRpdGxlPSJnc3RfbWV0YV9hcGlfdHlwZV9oYXNfdGFnwqAoKSI+Z3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCogY29uc3QqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLWFwaS10eXBlLWdldC10YWdzIiB0aXRsZT0iZ3N0X21ldGFfYXBpX3R5cGVfZ2V0X3RhZ3PCoCgpIj5nc3RfbWV0YV9hcGlfdHlwZV9nZXRfdGFnczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X21ldGFfcmVnaXN0ZXLCoCgpIj5nc3RfbWV0YV9yZWdpc3RlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLWdldC1pbmZvIiB0aXRsZT0iZ3N0X21ldGFfZ2V0X2luZm/CoCgpIj5nc3RfbWV0YV9nZXRfaW5mbzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZXRhLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPkdzdE1ldGE8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1ldGFGbGFncyI+R3N0TWV0YUZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+R3N0TWV0YUluZm88L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YVRyYW5zZm9ybUNvcHkiIHRpdGxlPSJHc3RNZXRhVHJhbnNmb3JtQ29weSI+R3N0TWV0YVRyYW5zZm9ybUNvcHk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtVEFHLU1FTU9SWTpDQVBTIiB0aXRsZT0iR1NUX01FVEFfVEFHX01FTU9SWSI+R1NUX01FVEFfVEFHX01FTU9SWTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1UQUctTUVNT1JZLVNUUjpDQVBTIiB0aXRsZT0iR1NUX01FVEFfVEFHX01FTU9SWV9TVFIiPkdTVF9NRVRBX1RBR19NRU1PUllfU1RSPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZXRhLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNZXRhLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gc3RydWN0dXJlIHNob3VsZCBiZSBpbmNsdWRlZCBhcyB0aGUgZmlyc3QgbWVtYmVyIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4KLW1ldGFkYXRhIHN0cnVjdHVyZS4gVGhlIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBBUEkgb2YgdGhlIG1ldGFkYXRhIGFuZCBzaG91bGQKLWJlIGFjY2Vzc2libGUgdG8gYWxsIGVsZW1lbnRzIHVzaW5nIHRoZSBtZXRhZGF0YS48L3A+Ci08cD5BIG1ldGFkYXRhIEFQSSBpcyByZWdpc3RlcmVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtYXBpLXR5cGUtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21ldGFfYXBpX3R5cGVfcmVnaXN0ZXIoKTwvY29kZT48L2E+IHdoaWNoIHRha2VzIGEKLW5hbWUgZm9yIHRoZSBtZXRhZGF0YSBBUEkgYW5kIHNvbWUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIG1ldGFkYXRhLgotV2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1hcGktdHlwZS1oYXMtdGFnIiB0aXRsZT0iZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZ8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZygpPC9jb2RlPjwvYT4gb25lIGNhbiBjaGVjayBpZiBhIGNlcnRhaW4gbWV0YWRhdGEgQVBJCi1jb250YWlucyBhIGdpdmVuIHRhZy48L3A+Ci08cD5NdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMgb2YgYSBtZXRhZGF0YSBBUEkgY2FuIGJlIHJlZ2lzdGVyZWQuCi1UbyBpbXBsZW1lbnQgYSBtZXRhZGF0YSBBUEksIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X21ldGFfcmVnaXN0ZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXRhX3JlZ2lzdGVyKCk8L2NvZGU+PC9hPiBzaG91bGQgYmUgdXNlZC4gVGhpcwotZnVuY3Rpb24gdGFrZXMgYWxsIHBhcmFtZXRlcnMgbmVlZGVkIHRvIGNyZWF0ZSwgZnJlZSBhbmQgdHJhbnNmb3JtIG1ldGFkYXRhCi1hbG9uZyB3aXRoIHRoZSBzaXplIG9mIHRoZSBtZXRhZGF0YS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT4KLXN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkuPC9wPgotPHA+QSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgcmV0cmlldmVkIGJ5IG5hbWUgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNnc3QtbWV0YS1nZXQtaW5mbyIgdGl0bGU9ImdzdF9tZXRhX2dldF9pbmZvwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWV0YV9nZXRfaW5mbygpPC9jb2RlPjwvYT4uPC9wPgotPHA+U2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGZvciBob3cgdGhlIG1ldGFkYXRhIGNhbiBiZSBhZGRlZCwgcmV0cmlldmVkIGFuZCByZW1vdmVkIGZyb20KLWJ1ZmZlcnMuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0TWV0YS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1FVEEtRkxBR1M6Q0FQUyI+PC9hPjxoMz5HU1RfTUVUQV9GTEFHUygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NRVRBX0ZMQUdTKG1ldGEpICAoR1NUX01FVEFfQ0FTVCAobWV0YSktJmd0O2ZsYWdzKQotPC9wcmU+Ci08cD5BIGZsYWdzIHdvcmQgY29udGFpbmluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1ldGFGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFGbGFnczwvc3Bhbj48L2E+IGZsYWdzIHNldCBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWV0YTwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FVEEtRkxBR1MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1ldGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRVRBLUZMQUctSVMtU0VUOkNBUFMiPjwvYT48aDM+R1NUX01FVEFfRkxBR19JU19TRVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVUQV9GTEFHX0lTX1NFVChtZXRhLGZsYWcpICAgICAgICAhIShHU1RfTUVUQV9GTEFHUyAobWV0YSkgJmFtcDsgKGZsYWcpKQotPC9wcmU+Ci08cD5HaXZlcyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgZmxhZyBvbiBhIG1ldGFkYXRhLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1NRVRBLUZMQUctSVMtU0VULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1ldGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1ldGFGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFGbGFnczwvc3Bhbj48L2E+IHRvIGNoZWNrLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUVUQS1GTEFHLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9NRVRBX0ZMQUdfU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FVEFfRkxBR19TRVQobWV0YSxmbGFnKSAgICAgICAgICAgKEdTVF9NRVRBX0ZMQUdTIChtZXRhKSB8PSAoZmxhZykpCi08L3ByZT4KLTxwPlNldHMgYSBtZXRhZGF0YSBmbGFnIG9uIGEgbWV0YWRhdGEuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FVEEtRkxBRy1TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWV0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFGbGFncyIgdGl0bGU9ImVudW0gR3N0TWV0YUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUZsYWdzPC9zcGFuPjwvYT4gdG8gc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUVUQS1GTEFHLVVOU0VUOkNBUFMiPjwvYT48aDM+R1NUX01FVEFfRkxBR19VTlNFVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NRVRBX0ZMQUdfVU5TRVQobWV0YSxmbGFnKSAgICAgICAgIChHU1RfTUVUQV9GTEFHUyAobWV0YSkgJmFtcDs9IH4oZmxhZykpCi08L3ByZT4KLTxwPkNsZWFycyBhIG1ldGFkYXRhIGZsYWcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1FVEEtRkxBRy1VTlNFVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUZsYWdzIiB0aXRsZT0iZW51bSBHc3RNZXRhRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhRmxhZ3M8L3NwYW4+PC9hPiB0byBjbGVhci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWV0YUluaXRGdW5jdGlvbiI+PC9hPjxoMz5Hc3RNZXRhSW5pdEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0TWV0YUluaXRGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPiAqbWV0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBwYXJhbXM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GdW5jdGlvbiBjYWxsZWQgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWV0YTwvY29kZT48L2VtPgotIGlzIGluaXRpYWxpemVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZXRhSW5pdEZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1ldGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJhbXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgaW5pdCBmdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1ldGFGcmVlRnVuY3Rpb24iPjwvYT48aDM+R3N0TWV0YUZyZWVGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RNZXRhRnJlZUZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+ICptZXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnVuY3Rpb24gY2FsbGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1ldGE8L2NvZGU+PC9lbT4KLSBpcyBmcmVlZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWV0YUZyZWVGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24iPjwvYT48aDM+R3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKnRyYW5zYnVmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+ICptZXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWV0YTwvY29kZT48L2VtPgotIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBhcyBhIHJlc3VsdCBvZiBwZXJmb3JtaW5nIGEKLXRyYW5zZm9ybWF0aW9uIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuc2J1ZjwvY29kZT48L2VtPgotLiBBZGRpdGlvbmFsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50eXBlPC9jb2RlPjwvZW0+Ci0gc3BlY2lmaWMgdHJhbnNmb3JtIGRhdGEKLWlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5JbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGNoZWNrIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHlwZTwvY29kZT48L2VtPgotIG9mIHRoZSB0cmFuc2Zvcm0gYW5kIHBhcnNlCi1hZGRpdGlvbmFsIHR5cGUgc3BlY2lmaWMgZmllbGRzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0gdGhhdCBzaG91bGQgYmUgdXNlZCB0byB1cGRhdGUKLXRoZSBtZXRhZGF0YSBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnNidWY8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnNidWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1ldGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHJhbnNmb3JtIHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRyYW5zZm9ybSBzcGVjaWZpYyBkYXRhLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB0cmFuc2Zvcm0gY291bGQgYmUgcGVyZm9ybWVkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRVRBLVRSQU5TRk9STS1JUy1DT1BZOkNBUFMiPjwvYT48aDM+R1NUX01FVEFfVFJBTlNGT1JNX0lTX0NPUFkoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVUQV9UUkFOU0ZPUk1fSVNfQ09QWSh0eXBlKSAoKHR5cGUpID09IF9nc3RfbWV0YV90cmFuc2Zvcm1fY29weSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgdGhlIHRyYW5zZm9ybSB0eXBlIGlzIGEgY29weSB0cmFuc2Zvcm08L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTUVUQS1UUkFOU0ZPUk0tSVMtQ09QWS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgdHJhbnNmb3JtIHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1tZXRhLWFwaS10eXBlLXJlZ2lzdGVyIj48L2E+PGgzPmdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdUeXBlPC9zcGFuPjwvYT4KLWdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmFwaTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKip0YWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlZ2lzdGVyIGFuZCByZXR1cm4gYSBHVHlwZSBmb3IgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcGk8L2NvZGU+PC9lbT4KLSBhbmQgYXNzb2NpYXRlIGl0IHdpdGgKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWdzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1ldGEtYXBpLXR5cGUtcmVnaXN0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXBpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gQVBJIHRvIHJlZ2lzdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50YWdzIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXBpPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXRhLWFwaS10eXBlLXJlZ2lzdGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSB1bmlxdWUgR1R5cGUgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcGk8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1ldGEtYXBpLXR5cGUtaGFzLXRhZyI+PC9hPjxoMz5nc3RfbWV0YV9hcGlfdHlwZV9oYXNfdGFnwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfbWV0YV9hcGlfdHlwZV9oYXNfdGFnICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBhcGk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gdGFnPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcGk8L2NvZGU+PC9lbT4KLSB3YXMgcmVnaXN0ZXJlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50YWc8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWV0YS1hcGktdHlwZS1oYXMtdGFnLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFwaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIEFQSTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGFnIHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWV0YS1hcGktdHlwZS1oYXMtdGFnLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcGk8L2NvZGU+PC9lbT4KLXdhcyByZWdpc3RlcmVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRhZzwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWV0YS1hcGktdHlwZS1nZXQtdGFncyI+PC9hPjxoMz5nc3RfbWV0YV9hcGlfdHlwZV9nZXRfdGFnc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKiBjb25zdCoKLWdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBhcGk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1ldGEtYXBpLXR5cGUtZ2V0LXRhZ3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFwaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIEFQSTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXRhLWFwaS10eXBlLWdldC10YWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYW4gYXJyYXkgb2YgdGFncyBhcyBzdHJpbmdzLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IHV0ZjhdPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWV0YS1yZWdpc3RlciI+PC9hPjxoMz5nc3RfbWV0YV9yZWdpc3RlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXRhX3JlZ2lzdGVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBhcGk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICppbXBsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5pdEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUluaXRGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5pdEZ1bmN0aW9uPC9zcGFuPjwvYT4gaW5pdF9mdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUZyZWVGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhRnJlZUZ1bmN0aW9uPC9zcGFuPjwvYT4gZnJlZV9mdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uPC9zcGFuPjwvYT4gdHJhbnNmb3JtX2Z1bmM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVnaXN0ZXIgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+IGltcGxlbWVudGF0aW9uLjwvcD4KLTxwPlRoZSBzYW1lIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIHJldHJpZXZlZCBsYXRlciB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLWdldC1pbmZvIiB0aXRsZT0iZ3N0X21ldGFfZ2V0X2luZm/CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9tZXRhX2dldF9pbmZvKCk8L2NvZGU+PC9hPiBieSB1c2luZwotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmltcGw8L2NvZGU+PC9lbT4KLSBhcyB0aGUga2V5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXRhLXJlZ2lzdGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFwaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0eXBlIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT4gQVBJPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmltcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+IGltcGxlbWVudGF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2l6ZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+IHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbml0X2Z1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5pdEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUluaXRGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5pdEZ1bmN0aW9uPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCB1bnRpbCBmaXJzdCBjYWxsZWQuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgYXN5bmM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mcmVlX2Z1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUZyZWVGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhRnJlZUZ1bmN0aW9uPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCB1bnRpbCBmaXJzdCBjYWxsZWQuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgYXN5bmM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50cmFuc2Zvcm1fZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb248L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIHVudGlsIGZpcnN0IGNhbGxlZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBhc3luYzwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWV0YS1yZWdpc3Rlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+IHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIG1ldGFkYXRhLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWV0YS1nZXQtaW5mbyI+PC9hPjxoMz5nc3RfbWV0YV9nZXRfaW5mb8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT7CoCoKLWdzdF9tZXRhX2dldF9pbmZvICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmltcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TG9va3VwIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG1ldGEgaW5mbyBzdHJ1Y3R1cmUgYnkgaXRzIGltcGxlbWVudGF0aW9uIG5hbWUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbXBsPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1ldGEtZ2V0LWluZm8ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmltcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1tZXRhLWdldC1pbmZvLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT4gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW1wbDwvY29kZT48L2VtPgotLCBvcgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gbm8gc3VjaCBtZXRhaW5mbyBleGlzdHMuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0TWV0YS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWV0YSI+PC9hPjxoMz5zdHJ1Y3QgR3N0TWV0YTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE1ldGEgewotICBHc3RNZXRhRmxhZ3MgICAgICAgZmxhZ3M7Ci0gIGNvbnN0IEdzdE1ldGFJbmZvICppbmZvOwotfTsKLTwvcHJlPgotPHA+QmFzZSBzdHJ1Y3R1cmUgZm9yIG1ldGFkYXRhLiBDdXN0b20gbWV0YWRhdGEgd2lsbCBwdXQgdGhpcyBzdHJ1Y3R1cmUKLWFzIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlaXIgc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE1ldGEubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFGbGFncyIgdGl0bGU9ImVudW0gR3N0TWV0YUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUZsYWdzPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1ldGEuZmxhZ3MiPjwvYT5mbGFnczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZXh0cmEgZmxhZ3MgZm9yIHRoZSBtZXRhZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPmNvbnN0wqA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXRhLmluZm8iPjwvYT5pbmZvPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5wb2ludGVyIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyIgdGl0bGU9InN0cnVjdCBHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGFJbmZvPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1ldGFGbGFncyI+PC9hPjxoMz5lbnVtIEdzdE1ldGFGbGFnczwvaDM+Ci08cD5FeHRyYSBtZXRhZGF0YSBmbGFncy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZXRhRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVUQS1GTEFHLU5PTkU6Q0FQUyI+PC9hPkdTVF9NRVRBX0ZMQUdfTk9ORTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5ubyBmbGFnczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTUVUQS1GTEFHLVJFQURPTkxZOkNBUFMiPjwvYT5HU1RfTUVUQV9GTEFHX1JFQURPTkxZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPm1ldGFkYXRhIHNob3VsZCBub3QgYmUgbW9kaWZpZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FVEEtRkxBRy1QT09MRUQ6Q0FQUyI+PC9hPkdTVF9NRVRBX0ZMQUdfUE9PTEVEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPm1ldGFkYXRhIGlzIG1hbmFnZWQgYnkgYSBidWZmZXJwb29sPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NRVRBLUZMQUctTE9DS0VEOkNBUFMiPjwvYT5HU1RfTUVUQV9GTEFHX0xPQ0tFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5tZXRhZGF0YSBzaG91bGQgbm90IGJlIHJlbW92ZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1FVEEtRkxBRy1MQVNUOkNBUFMiPjwvYT5HU1RfTUVUQV9GTEFHX0xBU1Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+YWRkaXRpb25hbCBmbGFncyBjYW4gYmUgYWRkZWQgc3RhcnRpbmcgZnJvbSB0aGlzIGZsYWcuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNZXRhSW5mbyI+PC9hPjxoMz5zdHJ1Y3QgR3N0TWV0YUluZm88L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RNZXRhSW5mbyB7Ci0gIEdUeXBlICAgICAgICAgICAgICAgICAgICAgIGFwaTsKLSAgR1R5cGUgICAgICAgICAgICAgICAgICAgICAgdHlwZTsKLSAgZ3NpemUgICAgICAgICAgICAgICAgICAgICAgc2l6ZTsKLQotICBHc3RNZXRhSW5pdEZ1bmN0aW9uICAgICAgICBpbml0X2Z1bmM7Ci0gIEdzdE1ldGFGcmVlRnVuY3Rpb24gICAgICAgIGZyZWVfZnVuYzsKLSAgR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uICAgdHJhbnNmb3JtX2Z1bmM7Ci19OwotPC9wcmU+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgbWV0YWRhdGEKLXN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNZXRhSW5mby5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YUluZm8uYXBpIj48L2E+YXBpPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50YWcgaWRlbnRpZnlpbmcgdGhlIG1ldGFkYXRhIHN0cnVjdHVyZSBhbmQgYXBpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YUluZm8udHlwZSI+PC9hPnR5cGU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnR5cGUgaWRlbnRpZnlpbmcgdGhlIGltcGxlbWVudG9yIG9mIHRoZSBhcGk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YUluZm8uc2l6ZSI+PC9hPnNpemU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnNpemUgb2YgdGhlIG1ldGFkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluaXRGdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFJbml0RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUluaXRGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXRhSW5mby5pbml0LWZ1bmMiPjwvYT5pbml0X2Z1bmM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIG1ldGFkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUZyZWVGdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFGcmVlRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YUZyZWVGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXRhSW5mby5mcmVlLWZ1bmMiPjwvYT5mcmVlX2Z1bmM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmZ1bmN0aW9uIGZvciBmcmVlaW5nIHRoZSBtZXRhZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YUluZm8udHJhbnNmb3JtLWZ1bmMiPjwvYT50cmFuc2Zvcm1fZnVuYzwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZnVuY3Rpb24gZm9yIHRyYW5zZm9ybWluZyB0aGUgbWV0YWRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1ldGFUcmFuc2Zvcm1Db3B5Ij48L2E+PGgzPkdzdE1ldGFUcmFuc2Zvcm1Db3B5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7Ci0gIGdib29sZWFuIHJlZ2lvbjsKLSAgZ3NpemUgb2Zmc2V0OwotICBnc2l6ZSBzaXplOwotfSBHc3RNZXRhVHJhbnNmb3JtQ29weTsKLTwvcHJlPgotPHA+RXh0cmEgZGF0YSBwYXNzZWQgdG8gYSAiZ3N0LWNvcHkiIHRyYW5zZm9ybSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24iIHRpdGxlPSJHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWV0YVRyYW5zZm9ybUNvcHkubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNZXRhVHJhbnNmb3JtQ29weS5yZWdpb24iPjwvYT5yZWdpb248L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBvbmx5IHJlZ2lvbiBpcyBjb3BpZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YVRyYW5zZm9ybUNvcHkub2Zmc2V0Ij48L2E+b2Zmc2V0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2Zmc2V0IHRvIGNvcHksIDAgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlZ2lvbjwvY29kZT48L2VtPgotaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4sIG90aGVyd2lzZSAmZ3Q7IDA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWV0YVRyYW5zZm9ybUNvcHkuc2l6ZSI+PC9hPnNpemU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaXplIHRvIGNvcHksIC0xIG9yIHRoZSBidWZmZXIgc2l6ZSB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWdpb248L2NvZGU+PC9lbT4KLWlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUVUQS1UQUctTUVNT1JZOkNBUFMiPjwvYT48aDM+R1NUX01FVEFfVEFHX01FTU9SWTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUVUQV9UQUdfTUVNT1JZIChfZ3N0X21ldGFfdGFnX21lbW9yeSkKLTwvcHJlPgotPGRpdiBjbGFzcz0id2FybmluZyI+Ci08cD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FVEFfVEFHX01FTU9SWTwvY29kZT4gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ld2x5LXdyaXR0ZW4gY29kZS48L3A+Ci08cD5UaGUgR1F1YXJrcyBhcmUgbm90IGV4cG9ydGVkIGJ5IGFueSBwdWJsaWMgQVBJLCB1c2UKLSAgR1NUX01FVEFfVEFHX01FTU9SWV9TVFIgaW5zdGVhZC48L3A+Ci08L2Rpdj4KLTxwPk1ldGFkYXRhIHRhZ2dlZCB3aXRoIHRoaXMgdGFnIGRlcGVuZHMgb24gdGhlIHBhcnRpY3VsYXIgbWVtb3J5Ci1vciBidWZmZXIgdGhhdCBpdCBpcyBvbi48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NRVRBLVRBRy1NRU1PUlktU1RSOkNBUFMiPjwvYT48aDM+R1NUX01FVEFfVEFHX01FTU9SWV9TVFI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01FVEFfVEFHX01FTU9SWV9TVFIgIm1lbW9yeSIKLTwvcHJlPgotPHA+VGhpcyBtZXRhZGF0YSBzdGF5cyByZWxldmFudCBhcyBsb25nIGFzIG1lbW9yeSBsYXlvdXQgaXMgdW5jaGFuZ2VkLjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OTk5YmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQzOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0TWluaU9iamVjdDogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdE9iamVjdC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QudG9wX29mX3BhZ2UiPjwvYT5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvaDI+Ci08cD5Hc3RNaW5pT2JqZWN0IOKAlCBMaWdodHdlaWdodCBiYXNlIGNsYXNzIGZvciB0aGUgR1N0cmVhbWVyIG9iamVjdCBoaWVyYXJjaHk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbsKgKCkiPipHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uwqAoKSI+KkdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uwqAoKSI+KkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3ROb3RpZnkiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Tm90aWZ5wqAoKSI+KkdzdE1pbmlPYmplY3ROb3RpZnk8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1UWVBFOkNBUFMiIHRpdGxlPSJHU1RfTUlOSV9PQkpFQ1RfVFlQRSgpIj5HU1RfTUlOSV9PQkpFQ1RfVFlQRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdTKCkiPkdTVF9NSU5JX09CSkVDVF9GTEFHUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLUlTLVNFVDpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUKCkiPkdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdfU0VUKCkiPkdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCgpIj5HU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1JUy1MT0NLQUJMRTpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX0lTX0xPQ0tBQkxFKCkiPkdTVF9NSU5JX09CSkVDVF9JU19MT0NLQUJMRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UKCkiPkdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1NSU5JLU9CSkVDVC1SRUZDT1VOVC1WQUxVRTpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKCkiPkdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1ERUZJTkUtTUlOSS1PQkpFQ1QtVFlQRTpDQVBTIiB0aXRsZT0iR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKCkiPkdTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1pbml0IiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2luaXTCoCgpIj5nc3RfbWluaV9vYmplY3RfaW5pdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9yZWbCoCgpIj5nc3RfbWluaV9vYmplY3RfcmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfdW5yZWbCoCgpIj5nc3RfbWluaV9vYmplY3RfdW5yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC13ZWFrLXJlZiIgdGl0bGU9ImdzdF9taW5pX29iamVjdF93ZWFrX3JlZsKgKCkiPmdzdF9taW5pX29iamVjdF93ZWFrX3JlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXdlYWstdW5yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfd2Vha191bnJlZsKgKCkiPmdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1sb2NrIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2xvY2vCoCgpIj5nc3RfbWluaV9vYmplY3RfbG9jazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXVubG9jayIgdGl0bGU9ImdzdF9taW5pX29iamVjdF91bmxvY2vCoCgpIj5nc3RfbWluaV9vYmplY3RfdW5sb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9pc193cml0YWJsZcKgKCkiPmdzdF9taW5pX29iamVjdF9pc193cml0YWJsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZcKgKCkiPmdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtY29weSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9jb3B5wqAoKSI+Z3N0X21pbmlfb2JqZWN0X2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1zZXQtcWRhdGEiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhwqAoKSI+Z3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtZ2V0LXFkYXRhIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2dldF9xZGF0YcKgKCkiPmdzdF9taW5pX29iamVjdF9nZXRfcWRhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXN0ZWFsLXFkYXRhIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3N0ZWFsX3FkYXRhwqAoKSI+Z3N0X21pbmlfb2JqZWN0X3N0ZWFsX3FkYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1yZXBsYWNlIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2XCoCgpIj5nc3RfbWluaV9vYmplY3RfcmVwbGFjZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdGFrZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF90YWtlwqAoKSI+Z3N0X21pbmlfb2JqZWN0X3Rha2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1zdGVhbCIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9zdGVhbMKgKCkiPmdzdF9taW5pX29iamVjdF9zdGVhbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1pbmlPYmplY3RGbGFncyI+R3N0TWluaU9iamVjdEZsYWdzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TG9ja0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RMb2NrRmxhZ3MiPkdzdExvY2tGbGFnczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTE9DSy1GTEFHLVJFQURXUklURTpDQVBTIiB0aXRsZT0iR1NUX0xPQ0tfRkxBR19SRUFEV1JJVEUiPkdTVF9MT0NLX0ZMQUdfUkVBRFdSSVRFPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0LmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiBpcyBhIHNpbXBsZSBzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgcmVmY291bnRlZAotdHlwZXMuPC9wPgotPHA+U3ViY2xhc3NlcyB3aWxsIGluY2x1ZGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IGFzIHRoZSBmaXJzdCBtZW1iZXIgaW4gdGhlaXIgc3RydWN0dXJlCi1hbmQgdGhlbiBjYWxsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1pbml0IiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2luaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9pbml0KCk8L2NvZGU+PC9hPiB0byBpbml0aWFsaXplIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gZmllbGRzLjwvcD4KLTxwPmdzdF9taW5pX29iamVjdF9yZWYoKSBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3VucmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+IGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoZQotcmVmY291bnQgcmVzcGVjdGl2ZWx5LiBXaGVuIHRoZSByZWZjb3VudCBvZiBhIG1pbmktb2JqZWN0IHJlYWNoZXMgMCwgdGhlCi1kaXNwb3NlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmaXJzdCBhbmQgd2hlbiB0aGlzIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCB0aGUgZnJlZQotZnVuY3Rpb24gb2YgdGhlIG1pbmlvYmplY3QgaXMgY2FsbGVkLjwvcD4KLTxwPkEgY29weSBjYW4gYmUgbWFkZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1jb3B5IiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2NvcHnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9jb3B5KCk8L2NvZGU+PC9hPi48L3A+Ci08cD5nc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUoKSB3aWxsIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbiB0aGUgcmVmY291bnQgb2YgdGhlCi1vYmplY3QgaXMgZXhhY3RseSAxLCBtZWFuaW5nIHRoZSBjdXJyZW50IGNhbGxlciBoYXMgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIHRoZQotb2JqZWN0LiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSgpPC9jb2RlPjwvYT4gd2lsbCByZXR1cm4gYSB3cml0YWJsZSB2ZXJzaW9uIG9mIHRoZQotb2JqZWN0LCB3aGljaCBtaWdodCBiZSBhIG5ldyBjb3B5IHdoZW4gdGhlIHJlZmNvdW50IHdhcyBub3QgMS48L3A+Ci08cD5PcGFxdWUgZGF0YSBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1zZXQtcWRhdGEiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWdldC1xZGF0YSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9nZXRfcWRhdGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9nZXRfcWRhdGEoKTwvY29kZT48L2E+LiBUaGUgZGF0YSBpcwotbWVhbnQgdG8gYmUgc3BlY2lmaWMgdG8gdGhlIHBhcnRpY3VsYXIgb2JqZWN0IGFuZCBpcyBub3QgYXV0b21hdGljYWxseSBjb3BpZWQKLXdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWNvcHkiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfY29wecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21pbmlfb2JqZWN0X2NvcHkoKTwvY29kZT48L2E+IG9yIHNpbWlsYXIgbWV0aG9kcy48L3A+Ci08cD5BIHdlYWsgcmVmZXJlbmNlIGNhbiBiZSBhZGRlZCBhbmQgcmVtb3ZlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXdlYWstcmVmIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3dlYWtfcmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3Rfd2Vha19yZWYoKTwvY29kZT48L2E+Ci1hbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXdlYWstdW5yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfd2Vha191bnJlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWYoKTwvY29kZT48L2E+IHJlc3BlY3RpdmVseS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uIj48L2E+PGgzPkdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+wqAqCi08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgbWV0aG9kcyB0byBjcmVhdGUgY29waWVzIG9mIGluc3RhbmNlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5NaW5pT2JqZWN0IHRvIGNvcHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gcmVmZXJlbmNlIHRvIGNsb25lZCBpbnN0YW5jZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbiI+PC9hPjxoMz5Hc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZ1bmN0aW9uIHByb3RvdHlwZSBmb3Igd2hlbiBhIG1pbmlvYmplY3QgaGFzIGxvc3QgaXRzIGxhc3QgcmVmY291bnQuCi1JbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWluaSBvYmplY3QgYXJlIGFsbG93ZWQgdG8gcmV2aXZlIHRoZQotcGFzc2VkIG9iamVjdCBieSBkb2luZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfcmVmwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfcmVmKCk8L2NvZGU+PC9hPi4gSWYgdGhlIG9iamVjdCBpcyBub3QKLXJldml2ZWQgYWZ0ZXIgdGhlIGRpc3Bvc2UgZnVuY3Rpb24sIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPgotYW5kIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgaXMgZnJlZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TWluaU9iamVjdCB0byBkaXNwb3NlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSBjbGVhbmVkIHVwLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uIj48L2E+PGgzPkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlZpcnR1YWwgZnVuY3Rpb24gcHJvdG90eXBlIGZvciBtZXRob2RzIHRvIGZyZWUgcmVzb3VyY2VzIHVzZWQgYnkKLW1pbmktb2JqZWN0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5NaW5pT2JqZWN0IHRvIGZyZWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1pbmlPYmplY3ROb3RpZnkiPjwvYT48aDM+R3N0TWluaU9iamVjdE5vdGlmecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RNaW5pT2JqZWN0Tm90aWZ5PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdE5vdGlmeSIgdGl0bGU9IkdzdE1pbmlPYmplY3ROb3RpZnnCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdE5vdGlmeTwvc3Bhbj48L2E+IGZ1bmN0aW9uIGNhbiBiZSBhZGRlZCB0byBhIG1pbmkgb2JqZWN0IGFzIGEKLWNhbGxiYWNrIHRoYXQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gZHJvcHMgdGhlCi1sYXN0IHJlZiBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPgotIGlzIGFib3V0IHRvIGJlIGZyZWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE1pbmlPYmplY3ROb3RpZnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZGF0YSB0aGF0IHdhcyBwcm92aWRlZCB3aGVuIHRoZSBub3RpZnkgd2FzIGFkZGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtaW5pIG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUlOSS1PQkpFQ1QtVFlQRTpDQVBTIj48L2E+PGgzPkdTVF9NSU5JX09CSkVDVF9UWVBFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01JTklfT0JKRUNUX1RZUEUob2JqKSAgKEdTVF9NSU5JX09CSkVDVF9DQVNUKG9iaiktJmd0O3R5cGUpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgbWluaS1vYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULVRZUEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk1pbmlPYmplY3QgdG8gcmV0dXJuIHR5cGUgZm9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULUZMQUdTOkNBUFMiPjwvYT48aDM+R1NUX01JTklfT0JKRUNUX0ZMQUdTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01JTklfT0JKRUNUX0ZMQUdTKG9iaikgIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopLSZndDtmbGFncykKLTwvcHJlPgotPHA+VGhpcyBtYWNybyByZXR1cm5zIHRoZSBlbnRpcmUgc2V0IG9mIGZsYWdzIGZvciB0aGUgbWluaS1vYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULUZMQUdTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5NaW5pT2JqZWN0IHRvIHJldHVybiBmbGFncyBmb3IuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUlOSS1PQkpFQ1QtRkxBRy1JUy1TRVQ6Q0FQUyI+PC9hPjxoMz5HU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQob2JqLGZsYWcpICAgICAgICAhIShHU1RfTUlOSV9PQkpFQ1RfRkxBR1MgKG9iaikgJmFtcDsgKGZsYWcpKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIGZsYWcgaXMgc2V0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1GTEFHLUlTLVNFVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5NaW5pT2JqZWN0IHRvIGNoZWNrIGZvciBmbGFncy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkZsYWcgdG8gY2hlY2sgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1GTEFHLVNFVDpDQVBTIj48L2E+PGgzPkdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVChvYmosZmxhZykgICAgICAgICAgIChHU1RfTUlOSV9PQkpFQ1RfRkxBR1MgKG9iaikgfD0gKGZsYWcpKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIHNldHMgdGhlIGdpdmVuIGJpdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULUZMQUctU0VULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk1pbmlPYmplY3QgdG8gc2V0IGZsYWcgaW4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5GbGFnIHRvIHNldCwgY2FuIGJ5IGFueSBudW1iZXIgb2YgYml0cyBpbiBndWludDMyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUlOSS1PQkpFQ1QtRkxBRy1VTlNFVDpDQVBTIj48L2E+PGgzPkdTVF9NSU5JX09CSkVDVF9GTEFHX1VOU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01JTklfT0JKRUNUX0ZMQUdfVU5TRVQob2JqLGZsYWcpICAgICAgICAgKEdTVF9NSU5JX09CSkVDVF9GTEFHUyAob2JqKSAmYW1wOz0gfihmbGFnKSkKLTwvcHJlPgotPHA+VGhpcyBtYWNybyB1bnNldHMgdGhlIGdpdmVuIGJpdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULUZMQUctVU5TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TWluaU9iamVjdCB0byB1bnNldCBmbGFnIGluLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+RmxhZyB0byBzZXQsIG11c3QgYmUgYSBzaW5nbGUgYml0IGluIGd1aW50MzIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1JUy1MT0NLQUJMRTpDQVBTIj48L2E+PGgzPkdTVF9NSU5JX09CSkVDVF9JU19MT0NLQUJMRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9JU19MT0NLQUJMRShvYmopICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQob2JqLCBHU1RfTUlOSV9PQkpFQ1RfRkxBR19MT0NLQUJMRSkKLTwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iajwvY29kZT48L2VtPgotIGlzIGxvY2thYmxlLiBBIGxvY2thYmxlIG9iamVjdCBjYW4gYmUgbG9ja2VkIGFuZCB1bmxvY2tlZCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbG9jayIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9sb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfbG9jaygpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC11bmxvY2siIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfdW5sb2NrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfdW5sb2NrKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtTUlOSS1PQkpFQ1QtSVMtTE9DS0FCTEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTUlOSS1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyI+PC9hPjxoMz5HU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQob2JqKSAgICAgICAgICAgKChHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopKS0mZ3Q7cmVmY291bnQpCi08L3ByZT4KLTxwPkdldCBhY2Nlc3MgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmaWVsZCBvZiB0aGUgbWluaS1vYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULVJFRkNPVU5ULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULVJFRkNPVU5ULVZBTFVFOkNBUFMiPjwvYT48aDM+R1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKG9iaikgICAgIChnX2F0b21pY19pbnRfZ2V0ICgmYW1wOyhHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopKS0mZ3Q7cmVmY291bnQpKQotPC9wcmU+Ci08cD5HZXQgdGhlIHJlZmVyZW5jZSBjb3VudCB2YWx1ZSBvZiB0aGUgbWluaS1vYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULU1JTkktT0JKRUNULVJFRkNPVU5ULVZBTFVFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULURFRklORS1NSU5JLU9CSkVDVC1UWVBFOkNBUFMiPjwvYT48aDM+R1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKFR5cGVOYW1lLHR5cGVfbmFtZSk8L3ByZT4KLTxwPkRlZmluZSBhIG5ldyBtaW5pLW9iamVjdCB0eXBlIHdpdGggdGhlIGdpdmVuIG5hbWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtREVGSU5FLU1JTkktT0JKRUNULVRZUEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+VHlwZU5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uYW1lIG9mIHRoZSBuZXcgdHlwZSBpbiBDYW1lbENhc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiB0aGUgbmV3IHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWluaXQiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X2luaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbWluaV9vYmplY3RfaW5pdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbWluaV9vYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IHR5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb248L3NwYW4+PC9hPiBjb3B5X2Z1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb248L3NwYW4+PC9hPiBkaXNwb3NlX2Z1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb248L3NwYW4+PC9hPiBmcmVlX2Z1bmM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5pdGlhbGl6ZXMgYSBtaW5pLW9iamVjdCB3aXRoIHRoZSBkZXNpcmVkIHR5cGUgYW5kIGNvcHkvZGlzcG9zZS9mcmVlCi1mdW5jdGlvbnMuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWluaXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWluaV9vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmluaXRpYWwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdEZsYWdzIiB0aXRsZT0iZW51bSBHc3RNaW5pT2JqZWN0RmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0RmxhZ3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgdGhlIG1pbmktb2JqZWN0IHRvIGNyZWF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb3B5X2Z1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGNvcHkgZnVuY3Rpb24sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGlzcG9zZV9mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBkaXNwb3NlIGZ1bmN0aW9uLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZyZWVfZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZnJlZSBmdW5jdGlvbiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1yZWYiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3JlZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoCoKLWdzdF9taW5pX29iamVjdF9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG1pbmktb2JqZWN0LjwvcD4KLTxwPk5vdGUgdGhhdCB0aGUgcmVmY291bnQgYWZmZWN0cyB0aGUgd3JpdGFiaWxpdHkKLW9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW5pPC9jb2RlPjwvZW0+Ci0tb2JqZWN0LCBzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUoKTwvY29kZT48L2E+LiBJdCBpcwotaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBrZWVwaW5nIGFkZGl0aW9uYWwgcmVmZXJlbmNlcyB0bwotR3N0TWluaU9iamVjdCBpbnN0YW5jZXMgY2FuIHBvdGVudGlhbGx5IGluY3JlYXNlIHRoZSBudW1iZXIKLW9mIG1lbWNweSBvcGVyYXRpb25zIGluIGEgcGlwZWxpbmUsIGVzcGVjaWFsbHkgaWYgdGhlIG1pbmlvYmplY3QKLWlzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWluaV9vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWluaS1vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtcmVmLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG1pbmktb2JqZWN0LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtdW5yZWYiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21pbmlfb2JqZWN0X3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICptaW5pX29iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbWluaS1vYmplY3QsIHBvc3NpYmx5IGZyZWVpbmcKLXRoZSBtaW5pLW9iamVjdC48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtdW5yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbmlfb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1pbmktb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3Qtd2Vhay1yZWYiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3dlYWtfcmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21pbmlfb2JqZWN0X3dlYWtfcmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Tm90aWZ5IiB0aXRsZT0iR3N0TWluaU9iamVjdE5vdGlmecKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIGEgd2VhayByZWZlcmVuY2UgY2FsbGJhY2sgdG8gYSBtaW5pIG9iamVjdC4gV2VhayByZWZlcmVuY2VzIGFyZQotdXNlZCBmb3Igbm90aWZpY2F0aW9uIHdoZW4gYSBtaW5pIG9iamVjdCBpcyBmaW5hbGl6ZWQuIFRoZXkgYXJlIGNhbGxlZAotIndlYWsgcmVmZXJlbmNlcyIgYmVjYXVzZSB0aGV5IGFsbG93IHlvdSB0byBzYWZlbHkgaG9sZCBhIHBvaW50ZXIKLXRvIHRoZSBtaW5pIG9iamVjdCB3aXRob3V0IGNhbGxpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9yZWYoKTwvY29kZT48L2E+Ci0oPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9yZWYoKTwvY29kZT48L2E+IGFkZHMgYSBzdHJvbmcgcmVmZXJlbmNlLCB0aGF0IGlzLCBmb3JjZXMgdGhlIG9iamVjdAotdG8gc3RheSBhbGl2ZSkuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXdlYWstcmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiB0byByZWZlcmVuY2Ugd2Vha2x5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhbGxiYWNrIHRvIGludm9rZSBiZWZvcmUgdGhlIG1pbmkgb2JqZWN0IGlzIGZyZWVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5leHRyYSBkYXRhIHRvIHBhc3MgdG8gbm90aWZ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC13ZWFrLXVucmVmIj48L2E+PGgzPmdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdE5vdGlmeSIgdGl0bGU9IkdzdE1pbmlPYmplY3ROb3RpZnnCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdE5vdGlmeTwvc3Bhbj48L2E+IG5vdGlmeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmVzIGEgd2VhayByZWZlcmVuY2UgY2FsbGJhY2sgZnJvbSBhIG1pbmkgb2JqZWN0LjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC13ZWFrLXVucmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiB0byByZW1vdmUgYSB3ZWFrIHJlZmVyZW5jZSBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNhbGxiYWNrIHRvIHNlYXJjaCBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRhdGEgdG8gc2VhcmNoIGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtbG9jayI+PC9hPjxoMz5nc3RfbWluaV9vYmplY3RfbG9ja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X21pbmlfb2JqZWN0X2xvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TG9ja0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RMb2NrRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RMb2NrRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Mb2NrIHRoZSBtaW5pLW9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgYWNjZXNzIG1vZGUgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWxvY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1pbmktb2JqZWN0IHRvIGxvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RMb2NrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdExvY2tGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExvY2tGbGFnczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtbG9jay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci1jb3VsZCBiZSBsb2NrZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC11bmxvY2siPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3VubG9ja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9taW5pX29iamVjdF91bmxvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RMb2NrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdExvY2tGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExvY2tGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVubG9jayB0aGUgbWluaS1vYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGFjY2VzcyBtb2RlIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC11bmxvY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1pbmktb2JqZWN0IHRvIHVubG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdExvY2tGbGFncyIgdGl0bGU9ImVudW0gR3N0TG9ja0ZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TG9ja0ZsYWdzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWlzLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9taW5pX29iamVjdF9pc193cml0YWJsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICptaW5pX29iamVjdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluaV9vYmplY3Q8L2NvZGU+PC9lbT4KLSBoYXMgdGhlIExPQ0tBQkxFIGZsYWcgc2V0LCBjaGVjayBpZiB0aGUgY3VycmVudCBFWENMVVNJVkUKLWxvY2sgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotIGlzIHRoZSBvbmx5IG9uZSwgdGhpcyBtZWFucyB0aGF0IGNoYW5nZXMgdG8gdGhlIG9iamVjdCB3aWxsCi1ub3QgYmUgdmlzaWJsZSB0byBhbnkgb3RoZXIgb2JqZWN0LjwvcD4KLTxwPklmIHRoZSBMT0NLQUJMRSBmbGFnIGlzIG5vdCBzZXQsIGNoZWNrIGlmIHRoZSByZWZjb3VudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWluaV9vYmplY3Q8L2NvZGU+PC9lbT4KLSBpcwotZXhhY3RseSAxLCBtZWFuaW5nIHRoYXQgbm8gb3RoZXIgcmVmZXJlbmNlIGV4aXN0cyB0byB0aGUgb2JqZWN0IGFuZCB0aGF0IHRoZQotb2JqZWN0IGlzIHRoZXJlZm9yZSB3cml0YWJsZS48L3A+Ci08cD5Nb2RpZmljYXRpb24gb2YgYSBtaW5pLW9iamVjdCBzaG91bGQgb25seSBiZSBkb25lIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0Ci1pcyB3cml0YWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtaXMtd3JpdGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbmlfb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1pbmktb2JqZWN0IHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWlzLXdyaXRhYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBvYmplY3QgaXMgd3JpdGFibGUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1tYWtlLXdyaXRhYmxlIj48L2E+PGgzPmdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgKgotZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm1pbmlfb2JqZWN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiBhIG1pbmktb2JqZWN0IGlzIHdyaXRhYmxlLiAgSWYgbm90LCBhIHdyaXRhYmxlIGNvcHkgaXMgbWFkZSBhbmQKLXJldHVybmVkLiAgVGhpcyBnaXZlcyBhd2F5IHRoZSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIG1pbmkgb2JqZWN0LAotYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIG5ldyBvYmplY3QuPC9wPgotPHA+TVQgc2FmZTwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1tYWtlLXdyaXRhYmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5pX29iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWluaS1vYmplY3QgdG8gbWFrZSB3cml0YWJsZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LW1ha2Utd3JpdGFibGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG1pbmktb2JqZWN0IChwb3NzaWJseSB0aGUgc2FtZSBwb2ludGVyKSB0aGF0Ci1pcyB3cml0YWJsZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LWNvcHkiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+wqAqCi1nc3RfbWluaV9vYmplY3RfY29weSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqbWluaV9vYmplY3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIGNvcHkgb2YgdGhlIG1pbmktb2JqZWN0LjwvcD4KLTxwPk1UIHNhZmU8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtY29weS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWluaV9vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbWluaS1vYmplY3QgdG8gY29weTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1jb3B5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG5ldyBtaW5pLW9iamVjdC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXNldC1xZGF0YSI+PC9hPjxoMz5nc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IHF1YXJrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gZGVzdHJveTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIHNldHMgYW4gb3BhcXVlLCBuYW1lZCBwb2ludGVyIG9uIGEgbWluaW9iamVjdC4KLVRoZSBuYW1lIGlzIHNwZWNpZmllZCB0aHJvdWdoIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gKHJldHJpZXZlZCBlLmcuIHZpYQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjZy1xdWFyay1mcm9tLXN0YXRpYy1zdHJpbmciPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoKTwvY29kZT48L2E+KSwgYW5kIHRoZSBwb2ludGVyCi1jYW4gYmUgZ290dGVuIGJhY2sgZnJvbSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWdldC1xZGF0YSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9nZXRfcWRhdGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9nZXRfcWRhdGEoKTwvY29kZT48L2E+Ci11bnRpbCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdDwvY29kZT48L2VtPgotIGlzIGRpc3Bvc2VkLgotU2V0dGluZyBhIHByZXZpb3VzbHkgc2V0IHVzZXIgZGF0YSBwb2ludGVyLCBvdmVycmlkZXMgKGZyZWVzKQotdGhlIG9sZCBwb2ludGVyIHNldCwgdXNpbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGFzIHBvaW50ZXIgZXNzZW50aWFsbHkKLXJlbW92ZXMgdGhlIGRhdGEgc3RvcmVkLjwvcD4KLTxwPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0cm95PC9jb2RlPjwvZW0+Ci0gbWF5IGJlIHNwZWNpZmllZCB3aGljaCBpcyBjYWxsZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotIGFzIGFyZ3VtZW50Ci13aGVuIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0gaXMgZGlzcG9zZWQsIG9yIHRoZSBkYXRhIGlzIGJlaW5nIG92ZXJ3cml0dGVuIGJ5Ci1hIGNhbGwgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXNldC1xZGF0YSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9zZXRfcWRhdGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEoKTwvY29kZT48L2E+IHdpdGggdGhlIHNhbWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1YXJrPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXNldC1xZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWFyazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4sIG5hbWluZyB0aGUgdXNlciBkYXRhIHBvaW50ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkFuIG9wYXF1ZSB1c2VyIGRhdGEgcG9pbnRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0cm95PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+RnVuY3Rpb24gdG8gaW52b2tlIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLWFzIGFyZ3VtZW50LCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci1uZWVkcyB0byBiZSBmcmVlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtZ2V0LXFkYXRhIj48L2E+PGgzPmdzdF9taW5pX29iamVjdF9nZXRfcWRhdGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLWdzdF9taW5pX29iamVjdF9nZXRfcWRhdGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUXVhcms8L3NwYW4+PC9hPiBxdWFyazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGZ1bmN0aW9uIGdldHMgYmFjayB1c2VyIGRhdGEgcG9pbnRlcnMgc3RvcmVkIHZpYQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LXNldC1xZGF0YSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9zZXRfcWRhdGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1nZXQtcWRhdGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIEdzdE1pbmlPYmplY3QgdG8gZ2V0IGEgc3RvcmVkIHVzZXIgZGF0YSBwb2ludGVyIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVhcms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+LCBuYW1pbmcgdGhlIHVzZXIgZGF0YSBwb2ludGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtZ2V0LXFkYXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHVzZXIgZGF0YSBwb2ludGVyIHNldCwgb3IKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3Qtc3RlYWwtcWRhdGEiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3N0ZWFsX3FkYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci1nc3RfbWluaV9vYmplY3Rfc3RlYWxfcWRhdGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVF1YXJrcy5odG1sI0dRdWFyayI+PHNwYW4gY2xhc3M9InR5cGUiPkdRdWFyazwvc3Bhbj48L2E+IHF1YXJrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoaXMgZnVuY3Rpb24gZ2V0cyBiYWNrIHVzZXIgZGF0YSBwb2ludGVycyBzdG9yZWQgdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1zZXQtcWRhdGEiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhKCk8L2NvZGU+PC9hPgotYW5kIHJlbW92ZXMgdGhlIGRhdGEgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0PC9jb2RlPjwvZW0+Ci0gd2l0aG91dCBpbnZva2luZyBpdHMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5kZXN0cm95KCk8L2NvZGU+IGZ1bmN0aW9uIChpZgotYW55IHdhcyBzZXQpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1zdGVhbC1xZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgR3N0TWluaU9iamVjdCB0byBnZXQgYSBzdG9yZWQgdXNlciBkYXRhIHBvaW50ZXIgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWFyazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4sIG5hbWluZyB0aGUgdXNlciBkYXRhIHBvaW50ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1zdGVhbC1xZGF0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSB1c2VyIGRhdGEgcG9pbnRlciBzZXQsIG9yCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXJlcGxhY2UiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3JlcGxhY2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9taW5pX29iamVjdF9yZXBsYWNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICoqb2xkZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpuZXdkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkF0b21pY2FsbHkgbW9kaWZpZXMgYSBwb2ludGVyIHRvIHBvaW50IHRvIGEgbmV3IG1pbmktb2JqZWN0LgotVGhlIHJlZmVyZW5jZSBjb3VudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkZGF0YTwvY29kZT48L2VtPgotIGlzIGRlY3JlYXNlZCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld2RhdGE8L2NvZGU+PC9lbT4KLSBpcyBpbmNyZWFzZWQuPC9wPgotPHA+RWl0aGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdkYXRhPC9jb2RlPjwvZW0+Ci0gYW5kIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRkYXRhPC9jb2RlPjwvZW0+Ci0gbWF5IGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtcmVwbGFjZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vbGRkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEKLW1pbmktb2JqZWN0IHRvIGJlIHJlcGxhY2VkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmV3ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIG5ldyBtaW5pLW9iamVjdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC1yZXBsYWNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdkYXRhPC9jb2RlPjwvZW0+Ci13YXMgZGlmZmVyZW50IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZGRhdGE8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3QtdGFrZSI+PC9hPjxoMz5nc3RfbWluaV9vYmplY3RfdGFrZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X21pbmlfb2JqZWN0X3Rha2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKipvbGRkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gKm5ld2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TW9kaWZpZXMgYSBwb2ludGVyIHRvIHBvaW50IHRvIGEgbmV3IG1pbmktb2JqZWN0LiBUaGUgbW9kaWZpY2F0aW9uCi1pcyBkb25lIGF0b21pY2FsbHkuIFRoaXMgdmVyc2lvbiBpcyBzaW1pbGFyIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI2dzdC1taW5pLW9iamVjdC1yZXBsYWNlIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2XCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF9yZXBsYWNlKCk8L2NvZGU+PC9hPgotZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdkYXRhPC9jb2RlPjwvZW0+Ci0gYW5kIHRodXMKLXRha2VzIG93bmVyc2hpcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3ZGF0YTwvY29kZT48L2VtPgotLjwvcD4KLTxwPkVpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3ZGF0YTwvY29kZT48L2VtPgotIGFuZCB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkZGF0YTwvY29kZT48L2VtPgotIG1heSBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXRha2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2xkZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgcG9pbnRlciB0byBhIG1pbmktb2JqZWN0IHRvCi1iZSByZXBsYWNlZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dCBhbmQgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uZXdkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byBuZXcgbWluaS1vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1taW5pLW9iamVjdC10YWtlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uZXdkYXRhPC9jb2RlPjwvZW0+Ci13YXMgZGlmZmVyZW50IGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9sZGRhdGE8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3Qtc3RlYWwiPjwvYT48aDM+Z3N0X21pbmlfb2JqZWN0X3N0ZWFswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPsKgKgotZ3N0X21pbmlfb2JqZWN0X3N0ZWFsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCIgdGl0bGU9InN0cnVjdCBHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICoqb2xkZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXBsYWNlIHRoZSBjdXJyZW50IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiBwb2ludGVyIHRvIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vbGRkYXRhPC9jb2RlPjwvZW0+Ci0gd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gYW5kCi1yZXR1cm4gdGhlIG9sZCB2YWx1ZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbWluaS1vYmplY3Qtc3RlYWwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9sZGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSBtaW5pLW9iamVjdCB0bwotYmUgc3RvbGVuLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0IGFuZCBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW1pbmktb2JqZWN0LXN0ZWFsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2xkYXRhPC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWluaU9iamVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TWluaU9iamVjdDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE1pbmlPYmplY3QgewotICBHVHlwZSAgIHR5cGU7Ci0KLSAgZ2ludCAgICByZWZjb3VudDsKLSAgZ2ludCAgICBsb2Nrc3RhdGU7Ci0gIGd1aW50ICAgZmxhZ3M7Ci0KLSAgR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiBjb3B5OwotICBHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIGRpc3Bvc2U7Ci0gIEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24gZnJlZTsKLX07Ci08L3ByZT4KLTxwPkJhc2UgY2xhc3MgZm9yIHJlZmNvdW50ZWQgbGlnaHR3ZWlnaHQgb2JqZWN0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNaW5pT2JqZWN0Lm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNaW5pT2JqZWN0LnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgR1R5cGUgb2YgdGhlIG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWluaU9iamVjdC5yZWZjb3VudCI+PC9hPnJlZmNvdW50PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hdG9taWMgcmVmY291bnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1pbmlPYmplY3QubG9ja3N0YXRlIj48L2E+bG9ja3N0YXRlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hdG9taWMgc3RhdGUgb2YgdGhlIGxvY2tzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1pbmlPYmplY3QuZmxhZ3MiPjwvYT5mbGFnczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZXh0cmEgZmxhZ3MuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdENvcHlGdW5jdGlvbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RNaW5pT2JqZWN0LmNvcHkiPjwvYT5jb3B5PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIGNvcHkgZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE1pbmlPYmplY3QuZGlzcG9zZSI+PC9hPmRpc3Bvc2U8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmEgZGlzcG9zZSBmdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb248L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TWluaU9iamVjdC5mcmVlIj48L2E+ZnJlZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZyZWUgZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1pbmlPYmplY3RGbGFncyI+PC9hPjxoMz5lbnVtIEdzdE1pbmlPYmplY3RGbGFnczwvaDM+Ci08cD5GbGFncyBmb3IgdGhlIG1pbmkgb2JqZWN0PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TWluaU9iamVjdEZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1JTkktT0JKRUNULUZMQUctTE9DS0FCTEU6Q0FQUyI+PC9hPkdTVF9NSU5JX09CSkVDVF9GTEFHX0xPQ0tBQkxFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnRoZSBvYmplY3QgY2FuIGJlIGxvY2tlZCBhbmQgdW5sb2NrZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjZ3N0LW1pbmktb2JqZWN0LWxvY2siIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfbG9ja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21pbmlfb2JqZWN0X2xvY2soKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5sb2NrIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3VubG9ja8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21pbmlfb2JqZWN0X3VubG9jaygpPC9jb2RlPjwvYT4uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1GTEFHLUxPQ0stUkVBRE9OTFk6Q0FQUyI+PC9hPkdTVF9NSU5JX09CSkVDVF9GTEFHX0xPQ0tfUkVBRE9OTFk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIG9iamVjdCBpcyBwZXJtYW5lbnRseSBsb2NrZWQgaW4KLVJFQURPTkxZIG1vZGUuIE9ubHkgcmVhZCBsb2NrcyBjYW4gYmUgcGVyZm9ybWVkIG9uIHRoZSBvYmplY3QuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NSU5JLU9CSkVDVC1GTEFHLU1BWS1CRS1MRUFLRUQ6Q0FQUyI+PC9hPkdTVF9NSU5JX09CSkVDVF9GTEFHX01BWV9CRV9MRUFLRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dGhlIG9iamVjdCBpcyBleHBlY3RlZCB0byBzdGF5IGFsaXZlCi1ldmVuIGFmdGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWRlaW5pdCIgdGl0bGU9ImdzdF9kZWluaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kZWluaXQoKTwvY29kZT48L2E+IGhhcyBiZWVuIGNhbGxlZCBhbmQgc28gc2hvdWxkIGJlIGlnbm9yZWQgYnkgbGVhawotZGV0ZWN0aW9uIHRvb2xzLiAoU2luY2UgMS4xMCk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1JTkktT0JKRUNULUZMQUctTEFTVDpDQVBTIj48L2E+R1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5maXJzdCBmbGFnIHRoYXQgY2FuIGJlIHVzZWQgYnkgc3ViY2xhc3Nlcy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdExvY2tGbGFncyI+PC9hPjxoMz5lbnVtIEdzdExvY2tGbGFnczwvaDM+Ci08cD5GbGFncyB1c2VkIHdoZW4gbG9ja2luZyBtaW5pb2JqZWN0czwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdExvY2tGbGFncy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MT0NLLUZMQUctUkVBRDpDQVBTIj48L2E+R1NUX0xPQ0tfRkxBR19SRUFEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmxvY2sgZm9yIHJlYWQgYWNjZXNzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MT0NLLUZMQUctV1JJVEU6Q0FQUyI+PC9hPkdTVF9MT0NLX0ZMQUdfV1JJVEU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bG9jayBmb3Igd3JpdGUgYWNjZXNzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MT0NLLUZMQUctRVhDTFVTSVZFOkNBUFMiPjwvYT5HU1RfTE9DS19GTEFHX0VYQ0xVU0lWRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5sb2NrIGZvciBleGNsdXNpdmUgYWNjZXNzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MT0NLLUZMQUctTEFTVDpDQVBTIj48L2E+R1NUX0xPQ0tfRkxBR19MQVNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmZpcnN0IGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3VzdG9tIHB1cnBvc2VzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtTE9DSy1GTEFHLVJFQURXUklURTpDQVBTIj48L2E+PGgzPkdTVF9MT0NLX0ZMQUdfUkVBRFdSSVRFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9MT0NLX0ZMQUdfUkVBRFdSSVRFICAoR1NUX0xPQ0tfRkxBR19SRUFEIHwgR1NUX0xPQ0tfRkxBR19XUklURSkKLTwvcHJlPgotPHA+R3N0TG9ja0ZsYWdzIHZhbHVlIGFsaWFzIGZvciBHU1RfTE9DS19GTEFHX1JFQUQgfCBHU1RfTE9DS19GTEFHX1dSSVRFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MjE2MjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFBhcmFtU3BlYzogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMudG9wX29mX3BhZ2UiPjwvYT5Hc3RQYXJhbVNwZWM8L3NwYW4+PC9oMj4KLTxwPkdzdFBhcmFtU3BlYyDigJQgR1BhcmFtU3BlYyBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWMKLXRvIEdTdHJlYW1lcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNnc3QtcGFyYW0tc3BlYy1mcmFjdGlvbiIgdGl0bGU9ImdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uwqAoKSI+Z3N0X3BhcmFtX3NwZWNfZnJhY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1DT05UUk9MTEFCTEU6Q0FQUyIgdGl0bGU9IkdTVF9QQVJBTV9DT05UUk9MTEFCTEUiPkdTVF9QQVJBTV9DT05UUk9MTEFCTEU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tVVNFUi1TSElGVDpDQVBTIiB0aXRsZT0iR1NUX1BBUkFNX1VTRVJfU0hJRlQiPkdTVF9QQVJBTV9VU0VSX1NISUZUPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR1NULVBBUkFNLU1VVEFCTEUtUEFVU0VEOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQiPkdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVBMQVlJTkc6Q0FQUyIgdGl0bGU9IkdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkciPkdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkc8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCNHU1QtUEFSQU0tTVVUQUJMRS1SRUFEWTpDQVBTIiB0aXRsZT0iR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkiPkdTVF9QQVJBTV9NVVRBQkxFX1JFQURZPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dzdFBhcmFtU3BlY0ZyYWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFBhcmFtU3BlY0ZyYWN0aW9uIj5Hc3RQYXJhbVNwZWNGcmFjdGlvbjwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+R1BhcmFtU3BlYyBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWMgdG8gR1N0cmVhbWVyLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhcmFtLXNwZWMtZnJhY3Rpb24iPjwvYT48aDM+Z3N0X3BhcmFtX3NwZWNfZnJhY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT7CoCoKLWdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuaWNrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYmx1cmI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBtaW5fbnVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWluX2Rlbm9tPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbWF4X251bTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG1heF9kZW5vbTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlZmF1bHRfbnVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gZGVmYXVsdF9kZW5vbTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBmcmFjdGlvbiBHUGFyYW1TcGVjIGZvciB1c2UgYnkgb2JqZWN0cy9lbGVtZW50cwotdGhhdCB3YW50IHRvIGV4cG9zZSBwcm9wZXJ0aWVzIG9mIGZyYWN0aW9uIHR5cGUuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5Ci11c2VkIGluIGNvbm5lY3Rpb24gd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LWNsYXNzLWluc3RhbGwtcHJvcGVydHkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgpPC9jb2RlPjwvYT4gaW4gYSBHT2JqZWN0cydzCi1pbnN0YW5jZV9pbml0IGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYXJhbS1zcGVjLWZyYWN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jYW5vbmljYWwgbmFtZSBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5pY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uaWNrIG5hbWUgZm9yIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Ymx1cmI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5kZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbl9udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5taW5pbXVtIHZhbHVlIChmcmFjdGlvbiBudW1lcmF0b3IpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbl9kZW5vbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1pbmltdW0gdmFsdWUgKGZyYWN0aW9uIGRlbm9taW5hdG9yKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfbnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWF4aW11bSB2YWx1ZSAoZnJhY3Rpb24gbnVtZXJhdG9yKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfZGVub208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tYXhpbXVtIHZhbHVlIChmcmFjdGlvbiBkZW5vbWluYXRvcik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVmYXVsdF9udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5kZWZhdWx0IHZhbHVlIChmcmFjdGlvbiBudW1lcmF0b3IpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlZmF1bHRfZGVub208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5kZWZhdWx0IHZhbHVlIChmcmFjdGlvbiBkZW5vbWluYXRvcik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mbGFncyBmb3IgdGhlIHByb3BlcnR5IHNwZWNpZmllZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhcmFtLXNwZWMtZnJhY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5IGNyZWF0ZWQgcGFyYW1ldGVyIHNwZWNpZmljYXRpb24uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBBUkFNLUNPTlRST0xMQUJMRTpDQVBTIj48L2E+PGgzPkdTVF9QQVJBTV9DT05UUk9MTEFCTEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmXCoEdTVF9QQVJBTV9DT05UUk9MTEFCTEXCoCgxICZsdDsmbHQ7IChHX1BBUkFNX1VTRVJfU0hJRlQgKyAxKSkKLTwvcHJlPgotPHA+VXNlIHRoaXMgZmxhZyBvbiBHT2JqZWN0IHByb3BlcnRpZXMgdG8gc2lnbmFsIHRoZXkgY2FuIG1ha2Ugc2Vuc2UgdG8gYmUuCi1jb250cm9sbGVkIG92ZXIgdGltZS4gVGhpcyBoaW50IGlzIHVzZWQgYnkgdGhlIEdzdENvbnRyb2xsZXIuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFSQU0tVVNFUi1TSElGVDpDQVBTIj48L2E+PGgzPkdTVF9QQVJBTV9VU0VSX1NISUZUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lwqBHU1RfUEFSQU1fVVNFUl9TSElGVMKgKDEgJmx0OyZsdDsgKEdfUEFSQU1fVVNFUl9TSElGVCArIDgpKQotPC9wcmU+Ci08cD5CaXRzIGJhc2VkIG9uIEdTVF9QQVJBTV9VU0VSX1NISUZUIGNhbiBiZSB1c2VkIGJ5IDNyZCBwYXJ0eSBhcHBsaWNhdGlvbnMuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFSQU0tTVVUQUJMRS1QQVVTRUQ6Q0FQUyI+PC9hPjxoMz5HU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBUkFNX01VVEFCTEVfUEFVU0VEICAoMSAmbHQ7Jmx0OyAoR19QQVJBTV9VU0VSX1NISUZUICsgMykpCi08L3ByZT4KLTxwPlVzZSB0aGlzIGZsYWcgb24gR09iamVjdCBwcm9wZXJ0aWVzIG9mIEdzdEVsZW1lbnRzIHRvIGluZGljYXRlIHRoYXQKLXRoZXkgY2FuIGJlIGNoYW5nZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgUEFVU0VEIG9yIGxvd2VyIHN0YXRlLgotVGhpcyBmbGFnIGltcGxpZXMgR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFSQU0tTVVUQUJMRS1QTEFZSU5HOkNBUFMiPjwvYT48aDM+R1NUX1BBUkFNX01VVEFCTEVfUExBWUlORzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HICAoMSAmbHQ7Jmx0OyAoR19QQVJBTV9VU0VSX1NISUZUICsgNCkpCi08L3ByZT4KLTxwPlVzZSB0aGlzIGZsYWcgb24gR09iamVjdCBwcm9wZXJ0aWVzIG9mIEdzdEVsZW1lbnRzIHRvIGluZGljYXRlIHRoYXQKLXRoZXkgY2FuIGJlIGNoYW5nZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgUExBWUlORyBvciBsb3dlciBzdGF0ZS4KLVRoaXMgZmxhZyBpbXBsaWVzIEdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRC48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QQVJBTS1NVVRBQkxFLVJFQURZOkNBUFMiPjwvYT48aDM+R1NUX1BBUkFNX01VVEFCTEVfUkVBRFk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkgICgxICZsdDsmbHQ7IChHX1BBUkFNX1VTRVJfU0hJRlQgKyAyKSkKLTwvcHJlPgotPHA+VXNlIHRoaXMgZmxhZyBvbiBHT2JqZWN0IHByb3BlcnRpZXMgb2YgR3N0RWxlbWVudHMgdG8gaW5kaWNhdGUgdGhhdAotdGhleSBjYW4gYmUgY2hhbmdlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluIHRoZSBSRUFEWSBvciBsb3dlciBzdGF0ZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBhcmFtU3BlY0ZyYWN0aW9uIj48L2E+PGgzPnN0cnVjdCBHc3RQYXJhbVNwZWNGcmFjdGlvbjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFBhcmFtU3BlY0ZyYWN0aW9uIHsKLSAgR1BhcmFtU3BlYyAgICBwYXJlbnRfaW5zdGFuY2U7Ci0KLSAgZ2ludCAgICAgICAgICBtaW5fbnVtLCBtaW5fZGVuOwotICBnaW50ICAgICAgICAgIG1heF9udW0sIG1heF9kZW47Ci0gIGdpbnQgICAgICAgICAgZGVmX251bSwgZGVmX2RlbjsKLX07Ci08L3ByZT4KLTxwPkEgR1BhcmFtU3BlYyBkZXJpdmVkIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBtZXRhIGRhdGEgZm9yIGZyYWN0aW9uYWwKLXByb3BlcnRpZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UGFyYW1TcGVjRnJhY3Rpb24ubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFyYW1TcGVjRnJhY3Rpb24ubWluLW51bSI+PC9hPm1pbl9udW08L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPm1pbmltYWwgbnVtZXJhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5taW4tZGVuIj48L2E+bWluX2RlbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+bWluaW1hbCBkZW5vbWluYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFyYW1TcGVjRnJhY3Rpb24ubWF4LW51bSI+PC9hPm1heF9udW08L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPm1heGltYWwgbnVtZXJhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5tYXgtZGVuIj48L2E+bWF4X2RlbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+bWF4aW1hbCBkZW5vbWluYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UGFyYW1TcGVjRnJhY3Rpb24uZGVmLW51bSI+PC9hPmRlZl9udW08L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmRlZmF1bHQgbnVtZXJhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RQYXJhbVNwZWNGcmFjdGlvbi5kZWYtZGVuIj48L2E+ZGVmX2RlbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZGVmYXVsdCBkZW5vbWluYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0UGFyc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRkNzA4MC4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzA2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RQYXJzZTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJhbVNwZWMuaHRtbCIgdGl0bGU9IkdzdFBhcmFtU3BlYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0UGFyc2UuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RQYXJzZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0UGFyc2UudG9wX29mX3BhZ2UiPjwvYT5Hc3RQYXJzZTwvc3Bhbj48L2gyPgotPHA+R3N0UGFyc2Ug4oCUIEdldCBhIHBpcGVsaW5lIGZyb20gYSB0ZXh0IHBpcGVsaW5lIGRlc2NyaXB0aW9uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJzZS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1lcnJvci1xdWFyayIgdGl0bGU9ImdzdF9wYXJzZV9lcnJvcl9xdWFya8KgKCkiPmdzdF9wYXJzZV9lcnJvcl9xdWFyazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2jCoCgpIj5nc3RfcGFyc2VfbGF1bmNoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNoLWZ1bGwiIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNoX2Z1bGzCoCgpIj5nc3RfcGFyc2VfbGF1bmNoX2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2h2IiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaHbCoCgpIj5nc3RfcGFyc2VfbGF1bmNodjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaHYtZnVsbCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2h2X2Z1bGzCoCgpIj5nc3RfcGFyc2VfbGF1bmNodl9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24iIHRpdGxlPSJnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb27CoCgpIj5nc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1iaW4tZnJvbS1kZXNjcmlwdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGzCoCgpIj5nc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFyc2VDb250ZXh0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LW5ldyIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X25ld8KgKCkiPmdzdF9wYXJzZV9jb250ZXh0X25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LWZyZWUiIHRpdGxlPSJnc3RfcGFyc2VfY29udGV4dF9mcmVlwqAoKSI+Z3N0X3BhcnNlX2NvbnRleHRfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKioKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LWdldC1taXNzaW5nLWVsZW1lbnRzIiB0aXRsZT0iZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHPCoCgpIj5nc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFBhcnNlQ29udGV4dCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJzZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfUEFSU0VfRVJST1IiPkdTVF9QQVJTRV9FUlJPUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUVycm9yIiB0aXRsZT0iZW51bSBHc3RQYXJzZUVycm9yIj5Hc3RQYXJzZUVycm9yPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQtc3RydWN0IiB0aXRsZT0iR3N0UGFyc2VDb250ZXh0Ij5Hc3RQYXJzZUNvbnRleHQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VGbGFncyIgdGl0bGU9ImVudW0gR3N0UGFyc2VGbGFncyI+R3N0UGFyc2VGbGFnczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UGFyc2Uub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3Vuc3RhYmxlL2dvYmplY3QtQm94ZWQtVHlwZXMuaHRtbCI+R0JveGVkPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFBhcnNlQ29udGV4dAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQYXJzZS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UGFyc2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlc2UgZnVuY3Rpb24gYWxsb3cgdG8gY3JlYXRlIGEgcGlwZWxpbmUgYmFzZWQgb24gdGhlIHN5bnRheCB1c2VkIGluIHRoZQotZ3N0LWxhdW5jaC0xLjAgdXRpbGl0eSAoc2VlIG1hbi1wYWdlIGZvciBzeW50YXggZG9jdW1lbnRhdGlvbikuPC9wPgotPHA+UGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgdGFrZSBzZXZlcmFsIG1lYXN1cmVzIHRvIGNyZWF0ZQotc29tZXdoYXQgZHluYW1pYyBwaXBlbGluZXMuIER1ZSB0byB0aGF0IHN1Y2ggcGlwZWxpbmVzIGFyZSBub3QgYWx3YXlzCi1yZXVzYWJsZSAoc2V0IHRoZSBzdGF0ZSB0byBOVUxMIGFuZCBiYWNrIHRvIFBMQVlJTkcpLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcnNlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFyc2UtZXJyb3ItcXVhcmsiPjwvYT48aDM+Z3N0X3BhcnNlX2Vycm9yX3F1YXJrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+Ci1nc3RfcGFyc2VfZXJyb3JfcXVhcmsgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBlcnJvciBxdWFyayB1c2VkIGJ5IHRoZSBwYXJzaW5nIHN1YnN5c3RlbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFyc2UtZXJyb3ItcXVhcmsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcXVhcmsgb2YgdGhlIHBhcnNlIGVycm9ycy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWxhdW5jaCI+PC9hPjxoMz5nc3RfcGFyc2VfbGF1bmNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi1nc3RfcGFyc2VfbGF1bmNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnBpcGVsaW5lX2Rlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IHBpcGVsaW5lIGJhc2VkIG9uIGNvbW1hbmQgbGluZSBzeW50YXguCi1QbGVhc2Ugbm90ZSB0aGF0IHlvdSBtaWdodCBnZXQgYSByZXR1cm4gdmFsdWUgdGhhdCBpcyBub3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGV2ZW4gdGhvdWdoCi10aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+Ci0gaXMgc2V0LiBJbiB0aGlzIGNhc2UgdGhlcmUgd2FzIGEgcmVjb3ZlcmFibGUgcGFyc2luZyBlcnJvciBhbmQgeW91Ci1jYW4gdHJ5IHRvIHBsYXkgdGhlIHBpcGVsaW5lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGlwZWxpbmVfZGVzY3JpcHRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29tbWFuZCBsaW5lIGRlc2NyaWJpbmcgdGhlIHBpcGVsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVycm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiBhbiBlcnJvbmVvdXMgcGlwZWxpbmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFyc2UtbGF1bmNoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgZWxlbWVudCBvbiBzdWNjZXNzLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb24gZmFpbHVyZS4gSWYKLW1vcmUgdGhhbiBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQgYnkgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZV9kZXNjcmlwdGlvbjwvY29kZT48L2VtPgotLAotYWxsIGVsZW1lbnRzIGFyZSBwdXQgaW50byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+LCB3aGljaCB0aGFuIGlzIHJldHVybmVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJBbGlhcyBmb3IgdHJhbnNmZXIgbm9uZSwgdXNlZCBmb3Igb2JqZWN0cyB3aXRoIGZsb2F0aW5nIHJlZnMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZmxvYXRpbmc8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2gtZnVsbCI+PC9hPjxoMz5nc3RfcGFyc2VfbGF1bmNoX2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwaXBlbGluZV9kZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYXJzZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgcGlwZWxpbmUgYmFzZWQgb24gY29tbWFuZCBsaW5lIHN5bnRheC4KLVBsZWFzZSBub3RlIHRoYXQgeW91IG1pZ2h0IGdldCBhIHJldHVybiB2YWx1ZSB0aGF0IGlzIG5vdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZXZlbiB0aG91Z2gKLXRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXJyb3I8L2NvZGU+PC9lbT4KLSBpcyBzZXQuIEluIHRoaXMgY2FzZSB0aGVyZSB3YXMgYSByZWNvdmVyYWJsZSBwYXJzaW5nIGVycm9yIGFuZCB5b3UKLWNhbiB0cnkgdG8gcGxheSB0aGUgcGlwZWxpbmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWxhdW5jaC1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBpcGVsaW5lX2Rlc2NyaXB0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbW1hbmQgbGluZSBkZXNjcmliaW5nIHRoZSBwaXBlbGluZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb250ZXh0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcGFyc2UgY29udGV4dCBhbGxvY2F0ZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LW5ldyIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhcnNlX2NvbnRleHRfbmV3KCk8L2NvZGU+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBhcnNpbmcgb3B0aW9ucywgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1GTEFHLU5PTkU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQVJTRV9GTEFHX05PTkU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb25lb3VzIHBpcGVsaW5lLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWxhdW5jaC1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgZWxlbWVudCBvbiBzdWNjZXNzLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb24gZmFpbHVyZS4gSWYKLW1vcmUgdGhhbiBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQgYnkgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZV9kZXNjcmlwdGlvbjwvY29kZT48L2VtPgotLAotYWxsIGVsZW1lbnRzIGFyZSBwdXQgaW50byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+LCB3aGljaCB0aGVuIGlzIHJldHVybmVkICh1bmxlc3MKLXRoZSBHU1RfUEFSU0VfRkxBR19QTEFDRV9JTl9CSU4gZmxhZyBpcyBzZXQsIGluIHdoaWNoIGNhc2UgdGhleSBhcmUgcHV0Ci1pbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+IGluc3RlYWQpLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJBbGlhcyBmb3IgdHJhbnNmZXIgbm9uZSwgdXNlZCBmb3Igb2JqZWN0cyB3aXRoIGZsb2F0aW5nIHJlZnMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZmxvYXRpbmc8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2h2Ij48L2E+PGgzPmdzdF9wYXJzZV9sYXVuY2h2wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi1nc3RfcGFyc2VfbGF1bmNodiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqYXJndjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgZWxlbWVudCBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3ludGF4LgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+Ci0gd2lsbCBjb250YWluIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb25lb3VzIHBpcGVsaW5lIGlzIHNwZWNpZmllZC4KLUFuIGVycm9yIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2h2LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFyZ3Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIGFyZ3VtZW50cy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1sYXVuY2h2LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgZWxlbWVudCBvbiBzdWNjZXNzIGFuZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb24gZmFpbHVyZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iQWxpYXMgZm9yIHRyYW5zZmVyIG5vbmUsIHVzZWQgZm9yIG9iamVjdHMgd2l0aCBmbG9hdGluZyByZWZzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZsb2F0aW5nPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFyc2UtbGF1bmNodi1mdWxsIj48L2E+PGgzPmdzdF9wYXJzZV9sYXVuY2h2X2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9wYXJzZV9sYXVuY2h2X2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmFyZ3Y8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlQ29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhcnNlQ29udGV4dDwvc3Bhbj48L2E+ICpjb250ZXh0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYXJzZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGVsZW1lbnQgYmFzZWQgb24gY29tbWFuZCBsaW5lIHN5bnRheC4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lcnJvcjwvY29kZT48L2VtPgotIHdpbGwgY29udGFpbiBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGVycm9uZW91cyBwaXBlbGluZSBpcyBzcGVjaWZpZWQuCi1BbiBlcnJvciBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFyc2UtbGF1bmNodi1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFyZ3Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIGFyZ3VtZW50cy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29udGV4dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBhcnNlIGNvbnRleHQgYWxsb2NhdGVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1uZXciIHRpdGxlPSJnc3RfcGFyc2VfY29udGV4dF9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYXJzZV9jb250ZXh0X25ldygpPC9jb2RlPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYXJzaW5nIG9wdGlvbnMsIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRkxBRy1OT05FOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfUEFSU0VfRkxBR19OT05FPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKHdoaWNoIG11c3QgYmUgaW5pdGlhbGlzZWQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+KTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWxhdW5jaHYtZnVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IGVsZW1lbnQgb24gc3VjY2Vzczsgb24gZmFpbHVyZSwgZWl0aGVyIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgotb3IgYSBwYXJ0aWFsbHktY29uc3RydWN0ZWQgYmluIG9yIGVsZW1lbnQgd2lsbCBiZSByZXR1cm5lZCBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVycm9yPC9jb2RlPjwvZW0+Ci13aWxsCi1iZSBzZXQgKHVubGVzcyB5b3UgcGFzc2VkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHU1QtUEFSU0UtRkxBRy1GQVRBTC1FUlJPUlM6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUzwvc3Bhbj48L2E+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotLCB0aGVuCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2lsbCBhbHdheXMgYmUgcmV0dXJuZWQgb24gZmFpbHVyZSkuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkFsaWFzIGZvciB0cmFuc2ZlciBub25lLCB1c2VkIGZvciBvYmplY3RzIHdpdGggZmxvYXRpbmcgcmVmcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWJpbi1mcm9tLWRlc2NyaXB0aW9uIj48L2E+PGgzPmdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmJpbl9kZXNjcmlwdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGdob3N0X3VubGlua2VkX3BhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2giIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNoKCk8L2NvZGU+PC9hPiB0byBjcmVhdGUgYQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gZnJvbSBhIGdzdC1sYXVuY2gtc3R5bGUgcGlwZWxpbmUgZGVzY3JpcHRpb24uIFNlZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2giIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNoKCk8L2NvZGU+PC9hPiBhbmQgdGhlIGdzdC1sYXVuY2ggbWFuIHBhZ2UgZm9yIGRldGFpbHMgYWJvdXQgdGhlCi1zeW50YXguIEdob3N0IHBhZHMgb24gdGhlIGJpbiBmb3IgdW5saW5rZWQgc291cmNlIG9yIHNpbmsgcGFkcwotd2l0aGluIHRoZSBiaW4gY2FuIGF1dG9tYXRpY2FsbHkgYmUgY3JlYXRlZCAoYnV0IG9ubHkgYSBtYXhpbXVtIG9mCi1vbmUgZ2hvc3QgcGFkIGZvciBlYWNoIGRpcmVjdGlvbiB3aWxsIGJlIGNyZWF0ZWQ7IGlmIHlvdSBleHBlY3QKLW11bHRpcGxlIHVubGlua2VkIHNvdXJjZSBwYWRzIG9yIG11bHRpcGxlIHVubGlua2VkIHNpbmsgcGFkcwotYW5kIHdhbnQgdGhlbSBhbGwgZ2hvc3RlZCwgeW91IHdpbGwgaGF2ZSB0byBjcmVhdGUgdGhlIGdob3N0IHBhZHMKLXlvdXJzZWxmKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluX2Rlc2NyaXB0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y29tbWFuZCBsaW5lIGRlc2NyaWJpbmcgdGhlIGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5naG9zdF91bmxpbmtlZF9wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+d2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBnaG9zdCBwYWRzCi1mb3IgdW5saW5rZWQgc291cmNlIG9yIHNpbmsgcGFkcyB3aXRoaW4gdGhlIGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lcnI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGVyZSB0byBzdG9yZSB0aGUgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIGFuIGVycm9yLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1iaW4tZnJvbS1kZXNjcmlwdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEKLW5ld2x5LWNyZWF0ZWQgYmluLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgYW4gZXJyb3Igb2NjdXJyZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkFsaWFzIGZvciB0cmFuc2ZlciBub25lLCB1c2VkIGZvciBvYmplY3RzIHdpdGggZmxvYXRpbmcgcmVmcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iT3ZlcnJpZGUgdGhlIHBhcnNlZCBDIHR5cGUgd2l0aCBnaXZlbiB0eXBlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuQmluXVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24tZnVsbCI+PC9hPjxoMz5nc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqYmluX2Rlc2NyaXB0aW9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBnaG9zdF91bmxpbmtlZF9wYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VDb250ZXh0PC9zcGFuPjwvYT4gKmNvbnRleHQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYXJzZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VGbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2giIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNoKCk8L2NvZGU+PC9hPiB0byBjcmVhdGUgYQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4gZnJvbSBhIGdzdC1sYXVuY2gtc3R5bGUgcGlwZWxpbmUgZGVzY3JpcHRpb24uIFNlZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2giIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNoKCk8L2NvZGU+PC9hPiBhbmQgdGhlIGdzdC1sYXVuY2ggbWFuIHBhZ2UgZm9yIGRldGFpbHMgYWJvdXQgdGhlCi1zeW50YXguIEdob3N0IHBhZHMgb24gdGhlIGJpbiBmb3IgdW5saW5rZWQgc291cmNlIG9yIHNpbmsgcGFkcwotd2l0aGluIHRoZSBiaW4gY2FuIGF1dG9tYXRpY2FsbHkgYmUgY3JlYXRlZCAoYnV0IG9ubHkgYSBtYXhpbXVtIG9mCi1vbmUgZ2hvc3QgcGFkIGZvciBlYWNoIGRpcmVjdGlvbiB3aWxsIGJlIGNyZWF0ZWQ7IGlmIHlvdSBleHBlY3QKLW11bHRpcGxlIHVubGlua2VkIHNvdXJjZSBwYWRzIG9yIG11bHRpcGxlIHVubGlua2VkIHNpbmsgcGFkcwotYW5kIHdhbnQgdGhlbSBhbGwgZ2hvc3RlZCwgeW91IHdpbGwgaGF2ZSB0byBjcmVhdGUgdGhlIGdob3N0IHBhZHMKLXlvdXJzZWxmKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24tZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW5fZGVzY3JpcHRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5jb21tYW5kIGxpbmUgZGVzY3JpYmluZyB0aGUgYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdob3N0X3VubGlua2VkX3BhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD53aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGdob3N0IHBhZHMKLWZvciB1bmxpbmtlZCBzb3VyY2Ugb3Igc2luayBwYWRzIHdpdGhpbiB0aGUgYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBwYXJzZSBjb250ZXh0IGFsbG9jYXRlZCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWNvbnRleHQtbmV3IiB0aXRsZT0iZ3N0X3BhcnNlX2NvbnRleHRfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfY29udGV4dF9uZXcoKTwvY29kZT48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cGFyc2luZyBvcHRpb25zLCBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUZMQUctTk9ORTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1BBUlNFX0ZMQUdfTk9ORTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVycjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPndoZXJlIHRvIHN0b3JlIHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb3IsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWJpbi1mcm9tLWRlc2NyaXB0aW9uLWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ld2x5LWNyZWF0ZWQKLWVsZW1lbnQsIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBiaW4gdW5sZXNzCi1HU1RfRkxBR19OT19TSU5HTEVfRUxFTUVOVF9CSU5TIHdhcyBwYXNzZWQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBhbiBlcnJvcgotb2NjdXJyZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkFsaWFzIGZvciB0cmFuc2ZlciBub25lLCB1c2VkIGZvciBvYmplY3RzIHdpdGggZmxvYXRpbmcgcmVmcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iT3ZlcnJpZGUgdGhlIHBhcnNlZCBDIHR5cGUgd2l0aCBnaXZlbiB0eXBlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuRWxlbWVudF08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1jb250ZXh0LW5ldyI+PC9hPjxoMz5nc3RfcGFyc2VfY29udGV4dF9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhcnNlQ29udGV4dDwvc3Bhbj48L2E+wqAqCi1nc3RfcGFyc2VfY29udGV4dF9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWxsb2NhdGVzIGEgcGFyc2UgY29udGV4dCBmb3IgdXNlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2gtZnVsbCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2hfZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhcnNlX2xhdW5jaF9mdWxsKCk8L2NvZGU+PC9hPiBvcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2h2LWZ1bGwiIHRpdGxlPSJnc3RfcGFyc2VfbGF1bmNodl9mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNodl9mdWxsKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfcGFyc2VfY29udGV4dF9mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWNvbnRleHQtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXdseS1hbGxvY2F0ZWQgcGFyc2UgY29udGV4dC4gRnJlZSB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWNvbnRleHQtZnJlZSIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYXJzZV9jb250ZXh0X2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWNvbnRleHQtZnJlZSI+PC9hPjxoMz5nc3RfcGFyc2VfY29udGV4dF9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPiAqY29udGV4dDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GcmVlcyBhIHBhcnNlIGNvbnRleHQgcHJldmlvdXNseSBhbGxvY2F0ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWNvbnRleHQtbmV3IiB0aXRsZT0iZ3N0X3BhcnNlX2NvbnRleHRfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfY29udGV4dF9uZXcoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1jb250ZXh0LWZyZWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFyc2VDb250ZXh0PC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWNvbnRleHQtZ2V0LW1pc3NpbmctZWxlbWVudHMiPjwvYT48aDM+Z3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoqCi1nc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dzdFBhcnNlQ29udGV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhcnNlQ29udGV4dDwvc3Bhbj48L2E+ICpjb250ZXh0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlIG1pc3NpbmcgZWxlbWVudHMgZnJvbSBhIHByZXZpb3VzIHJ1biBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaC1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaF9mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFyc2VfbGF1bmNoX2Z1bGwoKTwvY29kZT48L2E+Ci1vciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaHYtZnVsbCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2h2X2Z1bGzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYXJzZV9sYXVuY2h2X2Z1bGwoKTwvY29kZT48L2E+LiBXaWxsIG9ubHkgcmV0dXJuIHJlc3VsdHMgaWYgYW4gZXJyb3IgY29kZQotb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI0dTVC1QQVJTRS1FUlJPUi1OTy1TVUNILUVMRU1FTlQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQ8L2NvZGU+PC9hPiB3YXMgcmV0dXJuZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBhcnNlLWNvbnRleHQtZ2V0LW1pc3NpbmctZWxlbWVudHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRleHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYXJzZUNvbnRleHQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wYXJzZS1jb250ZXh0LWdldC1taXNzaW5nLWVsZW1lbnRzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LXRlcm1pbmF0ZWQgYXJyYXkgb2YgZWxlbWVudCBmYWN0b3J5IG5hbWUgc3RyaW5ncyBvZiBtaXNzaW5nCi1lbGVtZW50cy4gRnJlZSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0cmluZy1VdGlsaXR5LUZ1bmN0aW9ucy5odG1sI2ctc3RyZnJlZXYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19zdHJmcmVldigpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IGdjaGFyKl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBhcnNlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUEFSU0UtRVJST1I6Q0FQUyI+PC9hPjxoMz5HU1RfUEFSU0VfRVJST1I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BBUlNFX0VSUk9SIGdzdF9wYXJzZV9lcnJvcl9xdWFyayAoKQotPC9wcmU+Ci08cD5HZXQgYWNjZXNzIHRvIHRoZSBlcnJvciBxdWFyayBvZiB0aGUgcGFyc2Ugc3Vic3lzdGVtLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFyc2VFcnJvciI+PC9hPjxoMz5lbnVtIEdzdFBhcnNlRXJyb3I8L2gzPgotPHA+VGhlIGRpZmZlcmVudCBwYXJzaW5nIGVycm9ycyB0aGF0IGNhbiBvY2N1ci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQYXJzZUVycm9yLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBUlNFLUVSUk9SLVNZTlRBWDpDQVBTIj48L2E+R1NUX1BBUlNFX0VSUk9SX1NZTlRBWDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BIHN5bnRheCBlcnJvciBvY2N1cnJlZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBUlNFLUVSUk9SLU5PLVNVQ0gtRUxFTUVOVDpDQVBTIj48L2E+R1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgZGVzY3JpcHRpb24gY29udGFpbmVkIGFuIHVua25vd24gZWxlbWVudDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFSU0UtRVJST1ItTk8tU1VDSC1QUk9QRVJUWTpDQVBTIj48L2E+R1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfUFJPUEVSVFk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QW4gZWxlbWVudCBkaWQgbm90IGhhdmUgYSBzcGVjaWZpZWQgcHJvcGVydHk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBUlNFLUVSUk9SLUxJTks6Q0FQUyI+PC9hPkdTVF9QQVJTRV9FUlJPUl9MSU5LPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZXJlIHdhcyBhbiBlcnJvciBsaW5raW5nIHR3byBwYWRzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFSU0UtRVJST1ItQ09VTEQtTk9ULVNFVC1QUk9QRVJUWTpDQVBTIj48L2E+R1NUX1BBUlNFX0VSUk9SX0NPVUxEX05PVF9TRVRfUFJPUEVSVFk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlcmUgd2FzIGFuIGVycm9yIHNldHRpbmcgYSBwcm9wZXJ0eTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFSU0UtRVJST1ItRU1QVFktQklOOkNBUFMiPjwvYT5HU1RfUEFSU0VfRVJST1JfRU1QVFlfQklOPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkFuIGVtcHR5IGJpbiB3YXMgc3BlY2lmaWVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFSU0UtRVJST1ItRU1QVFk6Q0FQUyI+PC9hPkdTVF9QQVJTRV9FUlJPUl9FTVBUWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BbiBlbXB0eSBkZXNjcmlwdGlvbiB3YXMgc3BlY2lmaWVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1QQVJTRS1FUlJPUi1ERUxBWUVELUxJTks6Q0FQUyI+PC9hPkdTVF9QQVJTRV9FUlJPUl9ERUxBWUVEX0xJTks8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+QSBkZWxheWVkIGxpbmsgZGlkIG5vdCBnZXQgcmVzb2x2ZWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQYXJzZUNvbnRleHQtc3RydWN0Ij48L2E+PGgzPkdzdFBhcnNlQ29udGV4dDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFBhcnNlQ29udGV4dCBHc3RQYXJzZUNvbnRleHQ7PC9wcmU+Ci08cD5PcGFxdWUgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UGFyc2VGbGFncyI+PC9hPjxoMz5lbnVtIEdzdFBhcnNlRmxhZ3M8L2gzPgotPHA+UGFyc2luZyBvcHRpb25zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFBhcnNlRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFSU0UtRkxBRy1OT05FOkNBUFMiPjwvYT5HU1RfUEFSU0VfRkxBR19OT05FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkRvIG5vdCB1c2UgYW55IHNwZWNpYWwgcGFyc2luZyBvcHRpb25zLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFSU0UtRkxBRy1GQVRBTC1FUlJPUlM6Q0FQUyI+PC9hPkdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5BbHdheXMgcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuIGFuIGVycm9yIG9jY3VycwotICAgIChkZWZhdWx0IGJlaGF2aW91ciBpcyB0byByZXR1cm4gcGFydGlhbGx5IGNvbnN0cnVjdGVkIGJpbnMgb3IgZWxlbWVudHMKLSAgICAgaW4gc29tZSBjYXNlcyk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVBBUlNFLUZMQUctTk8tU0lOR0xFLUVMRU1FTlQtQklOUzpDQVBTIj48L2E+R1NUX1BBUlNFX0ZMQUdfTk9fU0lOR0xFX0VMRU1FTlRfQklOUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5JZiBhIGJpbiBvbmx5IGhhcyBhIHNpbmdsZSBlbGVtZW50LAotICAgIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUEFSU0UtRkxBRy1QTEFDRS1JTi1CSU46Q0FQUyI+PC9hPkdTVF9QQVJTRV9GTEFHX1BMQUNFX0lOX0JJTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5JZiBtb3JlIHRoYW4gb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgZGVzY3JpYmVkCi0gICAgYnkgdGhlIHBpcGVsaW5lIGRlc2NyaXB0aW9uIHN0cmluZywgcHV0IHRoZW0gaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaW48L3NwYW4+PC9hPiBpbnN0ZWFkIG9mIGEKLSAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi4gKFNpbmNlIDEuMTApPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJhMDhkYi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RQb2xsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OTEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFBvbGw6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFBvbGwuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBvbGwiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0UG9sbC50b3Bfb2ZfcGFnZSI+PC9hPkdzdFBvbGw8L3NwYW4+PC9oMj4KLTxwPkdzdFBvbGwg4oCUIEtlZXAgdHJhY2sgb2YgZmlsZSBkZXNjcmlwdG9ycyBhbmQgbWFrZSBpdCBwb3NzaWJsZQotICAgICAgICAgICAgICAgICAgICB0byB3YWl0IG9uIHRoZW0gaW4gYSBjYW5jZWxsYWJsZSB3YXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBvbGwuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWFkZC1mZCIgdGl0bGU9ImdzdF9wb2xsX2FkZF9mZMKgKCkiPmdzdF9wb2xsX2FkZF9mZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jYW4tcmVhZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2Nhbl9yZWFkwqAoKSI+Z3N0X3BvbGxfZmRfY2FuX3JlYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXdyaXRlIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY2FuX3dyaXRlwqAoKSI+Z3N0X3BvbGxfZmRfY2FuX3dyaXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWN0bC1yZWFkIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY3RsX3JlYWTCoCgpIj5nc3RfcG9sbF9mZF9jdGxfcmVhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jdGwtd3JpdGUiIHRpdGxlPSJnc3RfcG9sbF9mZF9jdGxfd3JpdGXCoCgpIj5nc3RfcG9sbF9mZF9jdGxfd3JpdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaGFzLWNsb3NlZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2hhc19jbG9zZWTCoCgpIj5nc3RfcG9sbF9mZF9oYXNfY2xvc2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWhhcy1lcnJvciIgdGl0bGU9ImdzdF9wb2xsX2ZkX2hhc19lcnJvcsKgKCkiPmdzdF9wb2xsX2ZkX2hhc19lcnJvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaWdub3JlZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2lnbm9yZWTCoCgpIj5nc3RfcG9sbF9mZF9pZ25vcmVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1pbml0IiB0aXRsZT0iZ3N0X3BvbGxfZmRfaW5pdMKgKCkiPmdzdF9wb2xsX2ZkX2luaXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZyZWUiIHRpdGxlPSJnc3RfcG9sbF9mcmVlwqAoKSI+Z3N0X3BvbGxfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBvbGw8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1uZXciIHRpdGxlPSJnc3RfcG9sbF9uZXfCoCgpIj5nc3RfcG9sbF9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQb2xsPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtbmV3LXRpbWVyIiB0aXRsZT0iZ3N0X3BvbGxfbmV3X3RpbWVywqAoKSI+Z3N0X3BvbGxfbmV3X3RpbWVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1nZXQtcmVhZC1ncG9sbGZkIiB0aXRsZT0iZ3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZMKgKCkiPmdzdF9wb2xsX2dldF9yZWFkX2dwb2xsZmQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVtb3ZlLWZkIiB0aXRsZT0iZ3N0X3BvbGxfcmVtb3ZlX2ZkwqAoKSI+Z3N0X3BvbGxfcmVtb3ZlX2ZkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZXN0YXJ0IiB0aXRsZT0iZ3N0X3BvbGxfcmVzdGFydMKgKCkiPmdzdF9wb2xsX3Jlc3RhcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtc2V0LWNvbnRyb2xsYWJsZSIgdGl0bGU9ImdzdF9wb2xsX3NldF9jb250cm9sbGFibGXCoCgpIj5nc3RfcG9sbF9zZXRfY29udHJvbGxhYmxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfcG9sbF9zZXRfZmx1c2hpbmfCoCgpIj5nc3RfcG9sbF9zZXRfZmx1c2hpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0wqAoKSI+Z3N0X3BvbGxfd2FpdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZWFkLWNvbnRyb2wiIHRpdGxlPSJnc3RfcG9sbF9yZWFkX2NvbnRyb2zCoCgpIj5nc3RfcG9sbF9yZWFkX2NvbnRyb2w8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtd3JpdGUtY29udHJvbCIgdGl0bGU9ImdzdF9wb2xsX3dyaXRlX2NvbnRyb2zCoCgpIj5nc3RfcG9sbF93cml0ZV9jb250cm9sPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFBvbGwub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj5Hc3RQb2xsRkQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR1NULVBPTEwtRkQtSU5JVDpDQVBTIiB0aXRsZT0iR1NUX1BPTExfRkRfSU5JVCI+R1NUX1BPTExfRkRfSU5JVDwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UG9sbC5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UG9sbC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+IGtlZXBzIHRyYWNrIG9mIGZpbGUgZGVzY3JpcHRvcnMgbXVjaCBsaWtlIGZkX3NldCAodXNlZCB3aXRoCi08Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnNlbGVjdCgpPC9jb2RlPikgb3IgYSBzdHJ1Y3QgcG9sbGZkIGFycmF5ICh1c2VkIHdpdGggPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wb2xsKCk8L2NvZGU+KS4gT25jZSBjcmVhdGVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldyIgdGl0bGU9ImdzdF9wb2xsX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfbmV3KCk8L2NvZGU+PC9hPiwgdGhlIHNldCBjYW4gYmUgdXNlZCB0byB3YWl0IGZvciBmaWxlIGRlc2NyaXB0b3JzIHRvIGJlCi1yZWFkYWJsZSBhbmQvb3Igd3JpdGFibGUuIEl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgdGhpcyB3YWl0IGJlIGNvbnRyb2xsZWQKLWJ5IHNwZWNpZnlpbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnRyb2xsYWJsZTwvY29kZT48L2VtPgotIGZsYWcgd2hlbiBjcmVhdGluZyB0aGUgc2V0IChvcgotbGF0ZXIgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtY29udHJvbGxhYmxlIiB0aXRsZT0iZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSgpPC9jb2RlPjwvYT4pLjwvcD4KLTxwPk5ldyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBhZGRlZCB0byB0aGUgc2V0IHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWFkZC1mZCIgdGl0bGU9ImdzdF9wb2xsX2FkZF9mZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfYWRkX2ZkKCk8L2NvZGU+PC9hPiwgYW5kCi1yZW1vdmVkIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlbW92ZS1mZCIgdGl0bGU9ImdzdF9wb2xsX3JlbW92ZV9mZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfcmVtb3ZlX2ZkKCk8L2NvZGU+PC9hPi4gQ29udHJvbGxpbmcgd2hpY2ggZmlsZSBkZXNjcmlwdG9ycwotc2hvdWxkIGJlIHdhaXRlZCBmb3IgdG8gYmVjb21lIHJlYWRhYmxlIGFuZC9vciB3cml0YWJsZSBhcmUgZG9uZSB1c2luZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY3RsLXJlYWQiIHRpdGxlPSJnc3RfcG9sbF9mZF9jdGxfcmVhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfZmRfY3RsX3JlYWQoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jdGwtd3JpdGUiIHRpdGxlPSJnc3RfcG9sbF9mZF9jdGxfd3JpdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX2ZkX2N0bF93cml0ZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+VXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF93YWl0KCk8L2NvZGU+PC9hPiB0byB3YWl0IGZvciB0aGUgZmlsZSBkZXNjcmlwdG9ycyB0byBhY3R1YWxseSBiZWNvbWUKLXJlYWRhYmxlIGFuZC9vciB3cml0YWJsZSwgb3IgdG8gdGltZW91dCBpZiBubyBmaWxlIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlCi1pbiB0aW1lLiBUaGUgd2FpdCBjYW4gYmUgY29udHJvbGxlZCBieSBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlc3RhcnQiIHRpdGxlPSJnc3RfcG9sbF9yZXN0YXJ0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9yZXN0YXJ0KCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9wb2xsX3NldF9mbHVzaGluZ8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfc2V0X2ZsdXNoaW5nKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5PbmNlIHRoZSBmaWxlIGRlc2NyaXB0b3Igc2V0IGhhcyBiZWVuIHdhaXRlZCBmb3IsIG9uZSBjYW4gdXNlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1oYXMtY2xvc2VkIiB0aXRsZT0iZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCgpPC9jb2RlPjwvYT4gdG8gc2VlIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaGFzIGJlZW4gY2xvc2VkLAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaGFzLWVycm9yIiB0aXRsZT0iZ3N0X3BvbGxfZmRfaGFzX2Vycm9ywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9mZF9oYXNfZXJyb3IoKTwvY29kZT48L2E+IHRvIHNlZSBpZiBpdCBoYXMgZ2VuZXJhdGVkIGFuIGVycm9yLAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXJlYWQiIHRpdGxlPSJnc3RfcG9sbF9mZF9jYW5fcmVhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfZmRfY2FuX3JlYWQoKTwvY29kZT48L2E+IHRvIHNlZSBpZiBpdCBpcyBwb3NzaWJsZSB0byByZWFkIGZyb20gdGhlIGZpbGUKLWRlc2NyaXB0b3IsIGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1mZC1jYW4td3JpdGUiIHRpdGxlPSJnc3RfcG9sbF9mZF9jYW5fd3JpdGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX2ZkX2Nhbl93cml0ZSgpPC9jb2RlPjwvYT4gdG8gc2VlIGlmIGl0IGlzIHBvc3NpYmxlIHRvCi13cml0ZSB0byBpdC48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQb2xsLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcG9sbC1hZGQtZmQiPjwvYT48aDM+Z3N0X3BvbGxfYWRkX2ZkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcG9sbF9hZGRfZmQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZCBhIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1hZGQtZmQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsZSBkZXNjcmlwdG9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtYWRkLWZkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBmaWxlIGRlc2NyaXB0b3Igd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgc2V0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1jYW4tcmVhZCI+PC9hPjxoMz5nc3RfcG9sbF9mZF9jYW5fcmVhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZkPC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPgotIGhhcyBkYXRhIHRvIGJlIHJlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtZmQtY2FuLXJlYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsZSBkZXNjcmlwdG9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtZmQtY2FuLXJlYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGRlc2NyaXB0b3IgaGFzIGRhdGEgdG8gYmUgcmVhZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBvbGwtZmQtY2FuLXdyaXRlIj48L2E+PGgzPmdzdF9wb2xsX2ZkX2Nhbl93cml0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BvbGxfZmRfY2FuX3dyaXRlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+Ci0gY2FuIGJlIHVzZWQgZm9yIHdyaXRpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtZmQtY2FuLXdyaXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsZSBkZXNjcmlwdG9yIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpbGUgZGVzY3JpcHRvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLWZkLWNhbi13cml0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZGVzY3JpcHRvciBjYW4gYmUgdXNlZCBmb3Igd3JpdGluZy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBvbGwtZmQtY3RsLXJlYWQiPjwvYT48aDM+Z3N0X3BvbGxfZmRfY3RsX3JlYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wb2xsX2ZkX2N0bF9yZWFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBhY3RpdmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29udHJvbCB3aGV0aGVyIHRoZSBkZXNjcmlwdG9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mZDwvY29kZT48L2VtPgotIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIG1vbml0b3JlZCBmb3IKLXJlYWRhYmlsaXR5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLWZkLWN0bC1yZWFkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsZSBkZXNjcmlwdG9yIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpbGUgZGVzY3JpcHRvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWN0aXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBuZXcgc3RhdHVzLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtZmQtY3RsLXJlYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGRlc2NyaXB0b3Igd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1jdGwtd3JpdGUiPjwvYT48aDM+Z3N0X3BvbGxfZmRfY3RsX3dyaXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcG9sbF9mZF9jdGxfd3JpdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gKmZkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYWN0aXZlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnRyb2wgd2hldGhlciB0aGUgZGVzY3JpcHRvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBtb25pdG9yZWQgZm9yCi13cml0YWJpbGl0eS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1jdGwtd3JpdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsZSBkZXNjcmlwdG9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hY3RpdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIG5ldyBzdGF0dXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1jdGwtd3JpdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGRlc2NyaXB0b3Igd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1oYXMtY2xvc2VkIj48L2E+PGgzPmdzdF9wb2xsX2ZkX2hhc19jbG9zZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wb2xsX2ZkX2hhc19jbG9zZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+Ci0gaGFzIGNsb3NlZCB0aGUgY29ubmVjdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1oYXMtY2xvc2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsZSBkZXNjcmlwdG9yIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpbGUgZGVzY3JpcHRvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLWZkLWhhcy1jbG9zZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBvbGwtZmQtaGFzLWVycm9yIj48L2E+PGgzPmdzdF9wb2xsX2ZkX2hhc19lcnJvcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BvbGxfZmRfaGFzX2Vycm9yICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4KLSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+Ci0gaGFzIGFuIGVycm9yLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLWZkLWhhcy1lcnJvci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpbGUgZGVzY3JpcHRvciBzZXQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBmaWxlIGRlc2NyaXB0b3IuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1oYXMtZXJyb3IucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGRlc2NyaXB0b3IgaGFzIGFuIGVycm9yLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1pZ25vcmVkIj48L2E+PGgzPmdzdF9wb2xsX2ZkX2lnbm9yZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfcG9sbF9mZF9pZ25vcmVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TWFyayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4KLSBhcyBpZ25vcmVkIHNvIHRoYXQgdGhlIG5leHQgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0IiB0aXRsZT0iZ3N0X3BvbGxfd2FpdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfd2FpdCgpPC9jb2RlPjwvYT4gd2lsbCB5aWVsZAotdGhlIHNhbWUgcmVzdWx0IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4KLSBhcyBsYXN0IHRpbWUuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaWYgbm8KLW9wZXJhdGlvbiAocmVhZC93cml0ZS9yZWN2L3NlbmQvZXRjLikgd2lsbCBiZSBwZXJmb3JtZWQgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZkPC9jb2RlPjwvZW0+Ci0gYmVmb3JlCi10aGUgbmV4dCBjYWxsIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF93YWl0KCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGUgcmVhc29uIHdoeSB0aGlzIGlzIG5lZWRlZCBpcyBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uCi1taWdodCBub3QgYWxsb3cgcXVlcnlpbmcgdGhlIGZkIG1vcmUgdGhhbiBvbmNlIGJldHdlZW4gY2FsbHMgdG8gb25lIG9mCi10aGUgcmUtZW5hYmxpbmcgb3BlcmF0aW9ucy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1pZ25vcmVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsZSBkZXNjcmlwdG9yIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpbGUgZGVzY3JpcHRvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBvbGwtZmQtaW5pdCI+PC9hPjxoMz5nc3RfcG9sbF9mZF9pbml0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3BvbGxfZmRfaW5pdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGxGRCIgdGl0bGU9IkdzdFBvbGxGRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Jbml0aWFsaXplcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmQ8L2NvZGU+PC9lbT4KLS4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGluaXRpYWxpemUgaXQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR1NULVBPTEwtRkQtSU5JVDpDQVBTIiB0aXRsZT0iR1NUX1BPTExfRkRfSU5JVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9QT0xMX0ZEX0lOSVQ8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1mZC1pbml0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wb2xsLWZyZWUiPjwvYT48aDM+Z3N0X3BvbGxfZnJlZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wb2xsX2ZyZWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZyZWUgYSBmaWxlIGRlc2NyaXB0b3Igc2V0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLWZyZWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBvbGwtbmV3Ij48L2E+PGgzPmdzdF9wb2xsX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBvbGw8L3NwYW4+PC9hPsKgKgotZ3N0X3BvbGxfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gY29udHJvbGxhYmxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBmaWxlIGRlc2NyaXB0b3Igc2V0LiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udHJvbGxhYmxlPC9jb2RlPjwvZW0+Ci0sIGl0Ci1pcyBwb3NzaWJsZSB0byByZXN0YXJ0IG9yIGZsdXNoIGEgY2FsbCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0IiB0aXRsZT0iZ3N0X3BvbGxfd2FpdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfd2FpdCgpPC9jb2RlPjwvYT4gd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtcmVzdGFydCIgdGl0bGU9ImdzdF9wb2xsX3Jlc3RhcnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3Jlc3RhcnQoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfcG9sbF9zZXRfZmx1c2hpbmfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3NldF9mbHVzaGluZygpPC9jb2RlPjwvYT4gcmVzcGVjdGl2ZWx5LjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9wb2xsX2ZyZWU8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRyb2xsYWJsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPndoZXRoZXIgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNvbnRyb2wgYSB3YWl0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaW4KLWNhc2Ugb2YgYW4gZXJyb3IuICBGcmVlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZnJlZSIgdGl0bGU9ImdzdF9wb2xsX2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX2ZyZWUoKTwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wb2xsLW5ldy10aW1lciI+PC9hPjxoMz5nc3RfcG9sbF9uZXdfdGltZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQb2xsPC9zcGFuPjwvYT7CoCoKLWdzdF9wb2xsX25ld190aW1lciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgcG9sbCBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBmb3Igc2NoZWR1bGluZyBjYW5jZWxsYWJsZQotdGltZW91dHMuPC9wPgotPHA+QSB0aW1lb3V0IGlzIHBlcmZvcm1lZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF93YWl0KCk8L2NvZGU+PC9hPi4gTXVsdGlwbGUgdGltZW91dHMgY2FuIGJlCi1wZXJmb3JtZWQgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcy4gPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X3BvbGxfZnJlZTwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLW5ldy10aW1lci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaW4KLWNhc2Ugb2YgYW4gZXJyb3IuICBGcmVlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZnJlZSIgdGl0bGU9ImdzdF9wb2xsX2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX2ZyZWUoKTwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wb2xsLWdldC1yZWFkLWdwb2xsZmQiPjwvYT48aDM+Z3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wb2xsX2dldF9yZWFkX2dwb2xsZmQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNHUG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R1BvbGxGRDwvc3Bhbj48L2E+ICpmZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBHUG9sbEZEIGZvciB0aGUgcmVhZGluZyBwYXJ0IG9mIHRoZSBjb250cm9sIHNvY2tldC4gVGhpcyBpcyB1c2VmdWwgd2hlbgotaW50ZWdyYXRpbmcgd2l0aCBhIEdTb3VyY2UgYW5kIEdNYWluTG9vcC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1nZXQtcmVhZC1ncG9sbGZkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNHUG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R1BvbGxGRDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wb2xsLXJlbW92ZS1mZCI+PC9hPjxoMz5nc3RfcG9sbF9yZW1vdmVfZmTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wb2xsX3JlbW92ZV9mZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiAqZmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlIGEgZmlsZSBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtcmVtb3ZlLWZkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgZmlsZSBkZXNjcmlwdG9yIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpbGUgZGVzY3JpcHRvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLXJlbW92ZS1mZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBmcm9tIHRoZSBzZXQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wb2xsLXJlc3RhcnQiPjwvYT48aDM+Z3N0X3BvbGxfcmVzdGFydMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wb2xsX3Jlc3RhcnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiAqc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlc3RhcnQgYW55IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF93YWl0KCk8L2NvZGU+PC9hPiB0aGF0IGlzIGluIHByb2dyZXNzLiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseQotdXNlZCBhZnRlciBhZGRpbmcgb3IgcmVtb3ZpbmcgZGVzY3JpcHRvcnMgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPgotLjwvcD4KLTxwPklmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT4KLSBpcyBub3QgY29udHJvbGxhYmxlLCB0aGVuIHRoaXMgY2FsbCB3aWxsIGhhdmUgbm8gZWZmZWN0LjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBmb3Igbm9uLXRpbWVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+IG9iamVjdHMgY3JlYXRlZCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1uZXciIHRpdGxlPSJnc3RfcG9sbF9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX25ldygpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtcmVzdGFydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wb2xsLXNldC1jb250cm9sbGFibGUiPjwvYT48aDM+Z3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gY29udHJvbGxhYmxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnRyb2xsYWJsZTwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgZnV0dXJlIGNhbGxzIHRvCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0IiB0aXRsZT0iZ3N0X3BvbGxfd2FpdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfd2FpdCgpPC9jb2RlPjwvYT4gd2lsbCBiZSBhZmZlY3RlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZXN0YXJ0IiB0aXRsZT0iZ3N0X3BvbGxfcmVzdGFydMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfcmVzdGFydCgpPC9jb2RlPjwvYT4gYW5kCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfcG9sbF9zZXRfZmx1c2hpbmfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3NldF9mbHVzaGluZygpPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGZvciBub24tdGltZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gb2JqZWN0cyBjcmVhdGVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldyIgdGl0bGU9ImdzdF9wb2xsX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfbmV3KCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1zZXQtY29udHJvbGxhYmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnRyb2xsYWJsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5ldyBjb250cm9sbGFibGUgc3RhdGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1zZXQtY29udHJvbGxhYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjb250cm9sbGFiaWxpdHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPgotY291bGQgYmUgdXBkYXRlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBvbGwtc2V0LWZsdXNoaW5nIj48L2E+PGgzPmdzdF9wb2xsX3NldF9mbHVzaGluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wb2xsX3NldF9mbHVzaGluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmbHVzaGluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5XaGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaGluZzwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgY3VycmVudCBhbmQgZnV0dXJlIGNhbGxzCi10byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0IiB0aXRsZT0iZ3N0X3BvbGxfd2FpdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfd2FpdCgpPC9jb2RlPjwvYT4gd2lsbCByZXR1cm4gLTEsIHdpdGggZXJybm8gc2V0IHRvIEVCVVNZLjwvcD4KLTxwPlVuc2V0dGluZyB0aGUgZmx1c2hpbmcgc3RhdGUgd2lsbCByZXN0b3JlIG5vcm1hbCBvcGVyYXRpb24gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPgotLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBmb3Igbm9uLXRpbWVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+IG9iamVjdHMgY3JlYXRlZCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1uZXciIHRpdGxlPSJnc3RfcG9sbF9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX25ldygpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtc2V0LWZsdXNoaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsdXNoaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmV3IGZsdXNoaW5nIHN0YXRlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcG9sbC13YWl0Ij48L2E+PGgzPmdzdF9wb2xsX3dhaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfcG9sbF93YWl0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lb3V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldhaXQgZm9yIGFjdGl2aXR5IG9uIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXQ8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbiB3YWl0cyB1cCB0bwotdGhlIHNwZWNpZmllZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPgotLiAgQSB0aW1lb3V0IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19USU1FX05PTkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9zcGFuPjwvYT4gd2FpdHMgZm9yZXZlci48L3A+Ci08cD5Gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gb2JqZWN0cyBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtbmV3IiB0aXRsZT0iZ3N0X3BvbGxfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9uZXcoKTwvY29kZT48L2E+LCB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlCi1jYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQgYXQgYSB0aW1lLiAgSWYgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcywKLS0xIHdpbGwgYmUgcmV0dXJuZWQgd2l0aCBlcnJubyBzZXQgdG8gRVBFUk0uPC9wPgotPHA+VGhpcyBpcyBub3QgdHJ1ZSBmb3IgdGltZXIgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gb2JqZWN0cyBjcmVhdGVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldy10aW1lciIgdGl0bGU9ImdzdF9wb2xsX25ld190aW1lcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfbmV3X3RpbWVyKCk8L2NvZGU+PC9hPiwgd2hlcmUgaXQgaXMgYWxsb3dlZCB0byBoYXZlIG11bHRpcGxlIHRocmVhZHMgd2FpdGluZwotc2ltdWx0YW5lb3VzbHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtd2FpdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtd2FpdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBudW1iZXIgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbEZEPC9zcGFuPjwvYT4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPgotdGhhdCBoYXZlIGFjdGl2aXR5IG9yIDAgd2hlbiBubwotYWN0aXZpdHkgd2FzIGRldGVjdGVkIGFmdGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lb3V0PC9jb2RlPjwvZW0+Ci0uIElmIGFuIGVycm9yIG9jY3VycywgLTEgaXMgcmV0dXJuZWQKLWFuZCBlcnJubyBpcyBzZXQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wb2xsLXJlYWQtY29udHJvbCI+PC9hPjxoMz5nc3RfcG9sbF9yZWFkX2NvbnRyb2zCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9wb2xsX3JlYWRfY29udHJvbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+ICpzZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIGJ5dGUgZnJvbSB0aGUgY29udHJvbCBzb2NrZXQgb2YgdGhlIGNvbnRyb2xsYWJsZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2V0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIGZvciB0aW1lciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiBvYmplY3RzIGNyZWF0ZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtbmV3LXRpbWVyIiB0aXRsZT0iZ3N0X3BvbGxfbmV3X3RpbWVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9uZXdfdGltZXIoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wb2xsLXJlYWQtY29udHJvbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC1yZWFkLWNvbnRyb2wucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb24gc3VjY2Vzcy4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gd2hlbiB3aGVuIHRoZXJlIHdhcyBubyBieXRlIHRvIHJlYWQgb3IKLXJlYWRpbmcgdGhlIGJ5dGUgZmFpbGVkLiBJZiB0aGVyZSB3YXMgbm8gYnl0ZSB0byByZWFkLCBhbmQgb25seSB0aGVuLCBlcnJubwotd2lsbCBjb250YWluIEVXT1VMREJMT0NLIG9yIEVBR0FJTi4gRm9yIGFsbCBvdGhlciB2YWx1ZXMgb2YgZXJybm8gdGhpcyBhbHdheXMgc2lnbmFscyBhCi1jcml0aWNhbCBlcnJvci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXBvbGwtd3JpdGUtY29udHJvbCI+PC9hPjxoMz5nc3RfcG9sbF93cml0ZV9jb250cm9swqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcG9sbF93cml0ZV9jb250cm9sICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsPC9zcGFuPjwvYT4gKnNldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZSBhIGJ5dGUgdG8gdGhlIGNvbnRyb2wgc29ja2V0IG9mIHRoZSBjb250cm9sbGFibGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNldDwvY29kZT48L2VtPgotLgotVGhpcyBmdW5jdGlvbiBpcyBtb3N0bHkgdXNlZnVsIGZvciB0aW1lciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPiBvYmplY3RzIGNyZWF0ZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtbmV3LXRpbWVyIiB0aXRsZT0iZ3N0X3BvbGxfbmV3X3RpbWVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9uZXdfdGltZXIoKTwvY29kZT48L2E+LiA8L3A+Ci08cD5JdCB3aWxsIG1ha2UgYW55IGN1cnJlbnQgYW5kIGZ1dHVyZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC13YWl0IiB0aXRsZT0iZ3N0X3BvbGxfd2FpdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BvbGxfd2FpdCgpPC9jb2RlPjwvYT4gZnVuY3Rpb24gcmV0dXJuIHdpdGgKLTEsIG1lYW5pbmcgdGhlIGNvbnRyb2wgc29ja2V0IGlzIHNldC4gQWZ0ZXIgYW4gZXF1YWwgYW1vdW50IG9mIGNhbGxzIHRvCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1yZWFkLWNvbnRyb2wiIHRpdGxlPSJnc3RfcG9sbF9yZWFkX2NvbnRyb2zCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3JlYWRfY29udHJvbCgpPC9jb2RlPjwvYT4gaGF2ZSBiZWVuIHBlcmZvcm1lZCwgY2FsbHMgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtd2FpdCIgdGl0bGU9ImdzdF9wb2xsX3dhaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX3dhaXQoKTwvY29kZT48L2E+IHdpbGwKLWJsb2NrIGFnYWluIHVudGlsIHRoZWlyIHRpbWVvdXQgZXhwaXJlZC48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgZm9yIHRpbWVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI0dzdFBvbGwiIHRpdGxlPSJHc3RQb2xsIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UG9sbDwvc3Bhbj48L2E+IG9iamVjdHMgY3JlYXRlZCB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNnc3QtcG9sbC1uZXctdGltZXIiIHRpdGxlPSJnc3RfcG9sbF9uZXdfdGltZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wb2xsX25ld190aW1lcigpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXBvbGwtd3JpdGUtY29udHJvbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsIiB0aXRsZT0iR3N0UG9sbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBvbGw8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcG9sbC13cml0ZS1jb250cm9sLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG9uIHN1Y2Nlc3MuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IHdoZW4gd2hlbiB0aGUgYnl0ZSBjb3VsZCBub3QgYmUgd3JpdHRlbi4KLWVycm5vIGNvbnRhaW5zIHRoZSBkZXRhaWxlZCBlcnJvciBjb2RlIGJ1dCB3aWxsIG5ldmVyIGJlIEVBR0FJTiwgRUlOVFIgb3IKLUVXT1VMREJMT0NLLiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBhbHdheXMgc2lnbmFscyBhIGNyaXRpY2FsIGVycm9yLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQb2xsLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQb2xsIj48L2E+PGgzPkdzdFBvbGw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RQb2xsIEdzdFBvbGw7PC9wcmU+Ci08cD5BIHNldCBvZiBmaWxlL25ldHdvcmsgZGVzY3JpcHRvcnMuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQb2xsRkQiPjwvYT48aDM+R3N0UG9sbEZEPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7Ci0gIGludCBmZDsKLX0gR3N0UG9sbEZEOwotPC9wcmU+Ci08cD5BIGZpbGUgZGVzY3JpcHRvciBvYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UG9sbEZELm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PHNwYW4gY2xhc3M9InR5cGUiPmludDwvc3Bhbj7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFBvbGxGRC5mZCI+PC9hPmZkPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIGZpbGUgZGVzY3JpcHRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QT0xMLUZELUlOSVQ6Q0FQUyI+PC9hPjxoMz5HU1RfUE9MTF9GRF9JTklUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QT0xMX0ZEX0lOSVQgIHsgLTEsIC0xIH0KLTwvcHJlPgotPHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBvbGwuaHRtbCNHc3RQb2xsRkQiIHRpdGxlPSJHc3RQb2xsRkQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQb2xsRkQ8L3NwYW4+PC9hPiBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggdGhpcyBtYWNybywgYmVmb3JlIGl0IGNhbiBiZQotdXNlZC4gVGhpcyBtYWNybyBjYW4gdXNlZCBiZSB0byBpbml0aWFsaXplIGEgdmFyaWFibGUsIGJ1dCBpdCBjYW5ub3QKLWJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUuIEluIHRoYXQgY2FzZSB5b3UgaGF2ZSB0byB1c2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWluaXQiIHRpdGxlPSJnc3RfcG9sbF9mZF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcG9sbF9mZF9pbml0KCk8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyY2M0OGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0UHJvdGVjdGlvbk1ldGE6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RRdWVyeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFByb3RlY3Rpb25NZXRhPC9zcGFuPjwvaDI+Ci08cD5Hc3RQcm90ZWN0aW9uTWV0YSDigJQgRnVuY3Rpb25zIGFuZCBjbGFzc2VzIHRvIHN1cHBvcnQgZW5jcnlwdGVkIHN0cmVhbXMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwjR3N0UHJvdGVjdGlvbk1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0UHJvdGVjdGlvbk1ldGEiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UHJvdGVjdGlvbk1ldGE8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwjZ3N0LWJ1ZmZlci1hZGQtcHJvdGVjdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtcHJvdGVjdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKCkiPmdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCNnc3QtcHJvdGVjdGlvbi1zZWxlY3Qtc3lzdGVtIiB0aXRsZT0iZ3N0X3Byb3RlY3Rpb25fc2VsZWN0X3N5c3RlbcKgKCkiPmdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW08L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCNHc3RQcm90ZWN0aW9uTWV0YSIgdGl0bGU9InN0cnVjdCBHc3RQcm90ZWN0aW9uTWV0YSI+R3N0UHJvdGVjdGlvbk1ldGE8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI0dTVC1QUk9URUNUSU9OLVNZU1RFTS1JRC1DQVBTLUZJRUxEOkNBUFMiIHRpdGxlPSJHU1RfUFJPVEVDVElPTl9TWVNURU1fSURfQ0FQU19GSUVMRCI+R1NUX1BST1RFQ1RJT05fU1lTVEVNX0lEX0NBUFNfRklFTEQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdHByb3RlY3Rpb24uaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIEdzdFByb3RlY3Rpb25NZXRhIGNsYXNzIGVuYWJsZXMgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZWNyeXB0IGEKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIGJlIGF0dGFjaGVkIHRvIHRoYXQgYnVmZmVyLjwvcD4KLTxwPlR5cGljYWxseSwgYSBkZW11eGVyIGVsZW1lbnQgd291bGQgYXR0YWNoIEdzdFByb3RlY3Rpb25NZXRhIG9iamVjdHMKLXRvIHRoZSBidWZmZXJzIHRoYXQgaXQgcHVzaGVzIGRvd25zdHJlYW0uIFRoZSBkZW11eGVyIHdvdWxkIHBhcnNlIHRoZQotcHJvdGVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSB2aWRlby9hdWRpbyBmcmFtZSBmcm9tIGl0cyBpbnB1dCBkYXRhIGFuZCB1c2UKLXRoaXMgaW5mb3JtYXRpb24gdG8gcG9wdWxhdGUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmZvPC9jb2RlPjwvZW0+Ci0gZmllbGQsCi13aGljaCBpcyB0aGVuIGVuY2Fwc3VsYXRlZCBpbiBhIEdzdFByb3RlY3Rpb25NZXRhIG9iamVjdCBhbmQgYXR0YWNoZWQgdG8KLXRoZSBjb3JyZXNwb25kaW5nIG91dHB1dCBidWZmZXIgdXNpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCNnc3QtYnVmZmVyLWFkZC1wcm90ZWN0aW9uLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9wcm90ZWN0aW9uX21ldGHCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfYWRkX3Byb3RlY3Rpb25fbWV0YSgpPC9jb2RlPjwvYT4KLWZ1bmN0aW9uLiBUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBhdHRhY2hlZCBHc3RQcm90ZWN0aW9uTWV0YSB3b3VsZCBiZQotdXNlZCBieSBhIGRvd25zdHJlYW0gZGVjcnlwdGVyIGVsZW1lbnQgdG8gcmVjb3ZlciB0aGUgb3JpZ2luYWwgdW5lbmNyeXB0ZWQKLWZyYW1lLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWFkZC1wcm90ZWN0aW9uLW1ldGEiPjwvYT48aDM+Z3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI0dzdFByb3RlY3Rpb25NZXRhIiB0aXRsZT0ic3RydWN0IEdzdFByb3RlY3Rpb25NZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFByb3RlY3Rpb25NZXRhPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfYWRkX3Byb3RlY3Rpb25fbWV0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqaW5mbzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BdHRhY2hlcyBwcm90ZWN0aW9uIG1ldGFkYXRhIHRvIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hZGQtcHJvdGVjdGlvbi1tZXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGhvbGRpbmcgYW4gZW5jcnlwdGVkIHNhbXBsZSwgdG8gd2hpY2ggcHJvdGVjdGlvbgotbWV0YWRhdGEgc2hvdWxkIGJlIGFkZGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmZvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gaG9sZGluZyBjcnlwdG9ncmFwaGljCi1pbmZvcm1hdGlvbiByZWxhdGluZyB0byB0aGUgc2FtcGxlIGNvbnRhaW5lZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uIFRoaXMKLWZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5mbzwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYWRkLXByb3RlY3Rpb24tbWV0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgcG9pbnRlciB0byB0aGUgYWRkZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI0dzdFByb3RlY3Rpb25NZXRhIiB0aXRsZT0ic3RydWN0IEdzdFByb3RlY3Rpb25NZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHJvdGVjdGlvbk1ldGE8L3NwYW4+PC9hPiBpZiBzdWNjZXNzZnVsOyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYKLXVuc3VjY2Vzc2Z1bC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtcHJvdGVjdGlvbi1tZXRhIj48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShiKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHJvdGVjdGlvbi1zZWxlY3Qtc3lzdGVtIj48L2E+PGgzPmdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW3CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW0gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnN5c3RlbV9pZGVudGlmaWVyczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JdGVyYXRlcyB0aGUgc3VwcGxpZWQgbGlzdCBvZiBVVUlEcyBhbmQgY2hlY2tzIHRoZSBHc3RSZWdpc3RyeSBmb3IKLWFuIGVsZW1lbnQgdGhhdCBzdXBwb3J0cyBvbmUgb2YgdGhlIHN1cHBsaWVkIFVVSURzLiBJZiBtb3JlIHRoYW4gb25lCi1lbGVtZW50IG1hdGNoZXMsIHRoZSBzeXN0ZW0gSUQgb2YgdGhlIGhpZ2hlc3QgcmFua2VkIGVsZW1lbnQgaXMgc2VsZWN0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByb3RlY3Rpb24tc2VsZWN0LXN5c3RlbS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3lzdGVtX2lkZW50aWZpZXJzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgbnVsbCB0ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MKLXRoYXQgY29udGFpbnMgdGhlIFVVSUQgdmFsdWVzIG9mIGVhY2ggcHJvdGVjdGlvbiBzeXN0ZW0gdGhhdCBpcyB0byBiZQotY2hlY2tlZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXByb3RlY3Rpb24tc2VsZWN0LXN5c3RlbS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IE9uZSBvZiB0aGUgc3RyaW5ncyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zeXN0ZW1faWRlbnRpZmllcnM8L2NvZGU+PC9lbT4KLXRoYXQKLWluZGljYXRlcyB0aGUgaGlnaGVzdCByYW5rZWQgZWxlbWVudCB0aGF0IGltcGxlbWVudHMgdGhlIHByb3RlY3Rpb24gc3lzdGVtCi1pbmRpY2F0ZWQgYnkgdGhhdCBzeXN0ZW0gSUQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBubyBlbGVtZW50IGhhcyBiZWVuIGZvdW5kLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHJvdGVjdGlvbk1ldGEiPjwvYT48aDM+c3RydWN0IEdzdFByb3RlY3Rpb25NZXRhPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UHJvdGVjdGlvbk1ldGEgewotICBHc3RNZXRhIG1ldGE7Ci0KLSAgR3N0U3RydWN0dXJlICppbmZvOwotfTsKLTwvcHJlPgotPHA+TWV0YWRhdGEgdHlwZSB0aGF0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGEgc2FtcGxlIGZyb20gYSBwcm90ZWN0aW9uLXByb3RlY3RlZAotdHJhY2ssIGluY2x1ZGluZyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlY3J5cHQgaXQgKGlmIGl0IGlzIGVuY3J5cHRlZCkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UHJvdGVjdGlvbk1ldGEubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1ldGE8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UHJvdGVjdGlvbk1ldGEubWV0YSI+PC9hPm1ldGE8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXJlbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YSIgdGl0bGU9InN0cnVjdCBHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UHJvdGVjdGlvbk1ldGEuaW5mbyI+PC9hPmluZm88L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjcnlwdG9ncmFwaGljIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZWNyeXB0IHRoZSBzYW1wbGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUFJPVEVDVElPTi1TWVNURU0tSUQtQ0FQUy1GSUVMRDpDQVBTIj48L2E+PGgzPkdTVF9QUk9URUNUSU9OX1NZU1RFTV9JRF9DQVBTX0ZJRUxEPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QUk9URUNUSU9OX1NZU1RFTV9JRF9DQVBTX0ZJRUxEICJwcm90ZWN0aW9uLXN5c3RlbSIKLTwvcHJlPgotPHA+VGhlIGZpZWxkIG5hbWUgaW4gYSBHc3RDYXBzIHRoYXQgaXMgdXNlZCB0byBzaWduYWwgdGhlIFVVSUQgb2YgdGhlIHByb3RlY3Rpb24KLXN5c3RlbS48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRjNzkzNi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0U3RyZWFtOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db2xsZWN0aW9uIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RTdHJlYW0uZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0U2VnbWVudC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0U3RyZWFtIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFN0cmVhbS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFN0cmVhbTwvc3Bhbj48L2gyPgotPHA+R3N0U3RyZWFtIOKAlCBCYXNlIGNsYXNzIGZvciBzdHJlYW0gb2JqZWN0czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0U3RyZWFtLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tbmV3IiB0aXRsZT0iZ3N0X3N0cmVhbV9uZXfCoCgpIj5nc3Rfc3RyZWFtX25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tZ2V0LWNhcHMiIHRpdGxlPSJnc3Rfc3RyZWFtX2dldF9jYXBzwqAoKSI+Z3N0X3N0cmVhbV9nZXRfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFN0cmVhbUZsYWdzIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1GbGFncyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW1GbGFnczwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLWZsYWdzIiB0aXRsZT0iZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2ZsYWdzwqAoKSI+Z3N0X3N0cmVhbV9nZXRfc3RyZWFtX2ZsYWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tZ2V0LXN0cmVhbS1pZCIgdGl0bGU9ImdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZMKgKCkiPmdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtVHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW1UeXBlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC1zdHJlYW0tdHlwZSIgdGl0bGU9ImdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlwqAoKSI+Z3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC10YWdzIiB0aXRsZT0iZ3N0X3N0cmVhbV9nZXRfdGFnc8KgKCkiPmdzdF9zdHJlYW1fZ2V0X3RhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1zZXQtY2FwcyIgdGl0bGU9ImdzdF9zdHJlYW1fc2V0X2NhcHPCoCgpIj5nc3Rfc3RyZWFtX3NldF9jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tc2V0LXN0cmVhbS1mbGFncyIgdGl0bGU9ImdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFnc8KgKCkiPmdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFnczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLXNldC1zdHJlYW0tdHlwZSIgdGl0bGU9ImdzdF9zdHJlYW1fc2V0X3N0cmVhbV90eXBlwqAoKSI+Z3N0X3N0cmVhbV9zZXRfc3RyZWFtX3R5cGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1zZXQtdGFncyIgdGl0bGU9ImdzdF9zdHJlYW1fc2V0X3RhZ3PCoCgpIj5nc3Rfc3RyZWFtX3NldF90YWdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZcKgKCkiPmdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTdHJlYW0ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbUNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNsYXNzIj5Hc3RTdHJlYW1DbGFzczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtVHlwZSI+R3N0U3RyZWFtVHlwZTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0U3RyZWFtLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTdHJlYW0uZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiBpcyBhIGhpZ2gtbGV2ZWwgb2JqZWN0IGRlZmluaW5nIGEgc3RyZWFtIG9mIGRhdGEgd2hpY2ggaXMsIG9yCi1jYW4gYmUsIHByZXNlbnQgaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi48L3A+Ci08cD5JdCBpcyBkZWZpbmVkIGJ5IGEgdW5pcXVlIGlkZW50aWZpZXIsIGEgIlN0cmVhbSBJRCIuIEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gZG9lcyBub3QKLWF1dG9tYXRpY2FsbHkgaW1wbHkgdGhlIHN0cmVhbSBpcyBwcmVzZW50IHdpdGhpbiBhIHBpcGVsaW5lIG9yIGVsZW1lbnQuPC9wPgotPHA+QW55IGVsZW1lbnQgdGhhdCBjYW4gaW50cm9kdWNlIG5ldyBzdHJlYW1zIGluIGEgcGlwZWxpbmUgc2hvdWxkIGNyZWF0ZSB0aGUKLWFwcHJvcHJpYXRlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+IG9iamVjdCwgYW5kIGNhbiBjb252ZXkgdGhhdCBvYmplY3QgdmlhIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVNUUkVBTS1TVEFSVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX1NUUkVBTV9TVEFSVDwvY29kZT48L2E+IGV2ZW50IGFuZC9vciB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+LjwvcD4KLTxwPkVsZW1lbnRzIHRoYXQgZG8gbm90IG1vZGlmeSB0aGUgbmF0dXJlIG9mIHRoZSBzdHJlYW0gY2FuIGFkZCBleHRyYSBpbmZvcm1hdGlvbgotb24gaXQgKHN1Y2ggYXMgZW5yaWNoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiwgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4pLiBUaGlzIGlzIHR5cGljYWxseSBkb25lCi1ieSBwYXJzaW5nIGVsZW1lbnRzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1uZXciPjwvYT48aDM+Z3N0X3N0cmVhbV9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJlYW1fbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnN0cmVhbV9pZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTdHJlYW1GbGFncyIgdGl0bGU9ImVudW0gR3N0U3RyZWFtRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1GbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiBmb3IgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW1faWQ8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLQotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyZWFtX2lkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBpZCBmb3IgdGhlIG5ldyBzdHJlYW0uIElmIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiwKLWEgbmV3IG9uZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvZiB0aGUgc3RyZWFtLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbVR5cGU8L3NwYW4+PC9hPiBvZiB0aGUgc3RyZWFtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZsYWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFN0cmVhbUZsYWdzIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1GbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUZsYWdzPC9zcGFuPjwvYT4gb2YgdGhlIHN0cmVhbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1nZXQtY2FwcyI+PC9hPjxoMz5nc3Rfc3RyZWFtX2dldF9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RyZWFtX2dldF9jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gKnN0cmVhbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZSB0aGUgY2FwcyBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbTwvY29kZT48L2VtPgotLCBpZiBhbnk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWdldC1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1nZXQtY2Fwcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbTwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLWZsYWdzIj48L2E+PGgzPmdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFnc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFN0cmVhbUZsYWdzIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1GbGFncyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW1GbGFnczwvc3Bhbj48L2E+Ci1nc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiAqc3RyZWFtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlIHRoZSBjdXJyZW50IHN0cmVhbSBmbGFncyBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0cmVhbTwvY29kZT48L2VtPgotPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLWZsYWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLWZsYWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFN0cmVhbUZsYWdzIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1GbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUZsYWdzPC9zcGFuPjwvYT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW08L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tZ2V0LXN0cmVhbS1pZCI+PC9hPjxoMz5nc3Rfc3RyZWFtX2dldF9zdHJlYW1faWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+ICpzdHJlYW08L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgc3RyZWFtIElEIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW08L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWdldC1zdHJlYW0taWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWdldC1zdHJlYW0taWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgc3RyZWFtIElEIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW08L2NvZGU+PC9lbT4KLS4gT25seSB2YWxpZAotZHVyaW5nIHRoZSBsaWZldGltZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWdldC1zdHJlYW0tdHlwZSI+PC9hPjxoMz5nc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtVHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW1UeXBlPC9zcGFuPjwvYT4KLWdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gKnN0cmVhbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZSB0aGUgc3RyZWFtIHR5cGUgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW08L2NvZGU+PC9lbT4KLTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tZ2V0LXN0cmVhbS10eXBlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLXR5cGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW1UeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1UeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtVHlwZTwvc3Bhbj48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWdldC10YWdzIj48L2E+PGgzPmdzdF9zdHJlYW1fZ2V0X3RhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJlYW1fZ2V0X3RhZ3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiAqc3RyZWFtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlIHRoZSB0YWdzIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci0sIGlmIGFueTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tZ2V0LXRhZ3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWdldC10YWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLXNldC1jYXBzIj48L2E+PGgzPmdzdF9zdHJlYW1fc2V0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3Rfc3RyZWFtX3NldF9jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gKnN0cmVhbTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIGNhcHMgZm9yIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tc2V0LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyZWFtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1zZXQtc3RyZWFtLWZsYWdzIj48L2E+PGgzPmdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFnc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFncyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+ICpzdHJlYW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTdHJlYW1GbGFncyIgdGl0bGU9ImVudW0gR3N0U3RyZWFtRmxhZ3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1GbGFnczwvc3Bhbj48L2E+IGZsYWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsYWdzPC9jb2RlPjwvZW0+Ci0gZm9yIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1zZXQtc3RyZWFtLWZsYWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZmxhZ3MgdG8gc2V0IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW08L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tc2V0LXN0cmVhbS10eXBlIj48L2E+PGgzPmdzdF9zdHJlYW1fc2V0X3N0cmVhbV90eXBlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3N0cmVhbV9zZXRfc3RyZWFtX3R5cGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiAqc3RyZWFtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbVR5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1UeXBlPC9zcGFuPjwvYT4gc3RyZWFtX3R5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBzdHJlYW0gdHlwZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci08L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLXNldC1zdHJlYW0tdHlwZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbV90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHR5cGUgdG8gc2V0IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJlYW08L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tc2V0LXRhZ3MiPjwvYT48aDM+Z3N0X3N0cmVhbV9zZXRfdGFnc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9zdHJlYW1fc2V0X3RhZ3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPiAqc3RyZWFtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTGlzdDwvc3Bhbj48L2E+ICp0YWdzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgdGFncyBmb3IgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1zZXQtdGFncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLXR5cGUtZ2V0LW5hbWUiPjwvYT48aDM+Z3N0X3N0cmVhbV90eXBlX2dldF9uYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbVR5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1UeXBlPC9zcGFuPjwvYT4gc3R5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgZGVzY3JpcHRpdmUgc3RyaW5nIGZvciBhIGdpdmVuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbVR5cGU8L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tdHlwZS1nZXQtbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3R5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbVR5cGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tdHlwZS1nZXQtbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHN0cmVhbSB0eXBlPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0U3RyZWFtLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTdHJlYW0iPjwvYT48aDM+c3RydWN0IEdzdFN0cmVhbTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFN0cmVhbSB7Ci0gIEdzdE9iamVjdCBvYmplY3Q7Ci0KLSAgY29uc3QgZ2NoYXIgKnN0cmVhbV9pZDsKLX07Ci08L3ByZT4KLTxwPkEgaGlnaC1sZXZlbCBvYmplY3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHN0cmVhbS4gSXQgbWlnaHQgYmUgYmFja2VkLCBvcgotbm90LCBieSBhbiBhY3R1YWwgZmxvdyBvZiBkYXRhIGluIGEgcGlwZWxpbmUgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+KS48L3A+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+IGRvZXMgbm90IGNhcmUgYWJvdXQgZGF0YSBjaGFuZ2VzIChzdWNoIGFzIGRlY29kaW5nLCBlbmNvZGluZywKLXBhcnNpbmcsLi4uKSBhcyBsb25nIGFzIHRoZSB1bmRlcmx5aW5nIGRhdGEgZmxvdyBjb3JyZXNwb25kcyB0byB0aGUgc2FtZQotaGlnaC1sZXZlbCBmbG93IChleDogYSBjZXJ0YWluIGF1ZGlvIHRyYWNrKS48L3A+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gcGVydGluZW50IHRvIGEgc3RyZWFtLCBzdWNoIGFzCi1zdHJlYW0taWQsIHRhZ3MsIGNhcHMsIHR5cGUsIC4uLjwvcD4KLTxwPkVsZW1lbnRzIGNhbiBzdWJjbGFzcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+IGZvciBpbnRlcm5hbCB1c2FnZSAodG8gY29udGFpbiBpbmZvcm1hdGlvbgotcGVydGluZW50IHRvIHN0cmVhbXMgb2YgZGF0YSkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RyZWFtLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0U3RyZWFtLm9iamVjdCI+PC9hPm9iamVjdDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD5jb25zdMKgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RTdHJlYW0uc3RyZWFtLWlkIj48L2E+c3RyZWFtX2lkPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgU3RyZWFtIElkZW50aWZpZXIgZm9yIHRoaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0cmVhbUNsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RTdHJlYW1DbGFzczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFN0cmVhbUNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLTwvcHJlPgotPHA+R3N0U3RyZWFtIGNsYXNzIHN0cnVjdHVyZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFN0cmVhbUNsYXNzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTdHJlYW1UeXBlIj48L2E+PGgzPmVudW0gR3N0U3RyZWFtVHlwZTwvaDM+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbVR5cGUiIHRpdGxlPSJlbnVtIEdzdFN0cmVhbVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1UeXBlPC9zcGFuPjwvYT4gZGVzY3JpYmVzIGEgaGlnaCBsZXZlbCBjbGFzc2lmaWNhdGlvbiBzZXQgZm9yCi1mbG93cyBvZiBkYXRhIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+IG9iamVjdHMuPC9wPgotPHA+Tm90ZSB0aGF0IHRoaXMgaXMgYSBmbGFnLCBhbmQgdGhlcmVmb3JlIHVzZXJzIHNob3VsZCBub3QgYXNzdW1lIGl0Ci13aWxsIGJlIGEgc2luZ2xlIHZhbHVlLiBEbyBub3QgdXNlIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBmb3IgY2hlY2tpbmcKLXdoZXRoZXIgYSBzdHJlYW0gaXMgb2YgYSBjZXJ0YWluIHR5cGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3RyZWFtVHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tVFlQRS1VTktOT1dOOkNBUFMiPjwvYT5HU1RfU1RSRUFNX1RZUEVfVU5LTk9XTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgc3RyZWFtIGlzIG9mIHVua25vd24gKHVuY2xhc3NpZmllZCkgdHlwZS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVNUUkVBTS1UWVBFLUFVRElPOkNBUFMiPjwvYT5HU1RfU1RSRUFNX1RZUEVfQVVESU88L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIHN0cmVhbSBpcyBvZiBhdWRpbyBkYXRhPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tVFlQRS1WSURFTzpDQVBTIj48L2E+R1NUX1NUUkVBTV9UWVBFX1ZJREVPPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBzdHJlYW0gY2FycmllcyB2aWRlbyBkYXRhPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tVFlQRS1DT05UQUlORVI6Q0FQUyI+PC9hPkdTVF9TVFJFQU1fVFlQRV9DT05UQUlORVI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIHN0cmVhbSBpcyBhIG11eGVkIGNvbnRhaW5lciB0eXBlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TVFJFQU0tVFlQRS1URVhUOkNBUFMiPjwvYT5HU1RfU1RSRUFNX1RZUEVfVEVYVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgc3RyZWFtIGNvbnRhaW5zIHN1YnRpdGxlIC8gc3VicGljdHVyZSBkYXRhLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWM4M2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RTdHJlYW1Db2xsZWN0aW9uOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi50b3Bfb2ZfcGFnZSI+PC9hPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9oMj4KLTxwPkdzdFN0cmVhbUNvbGxlY3Rpb24g4oCUIEJhc2UgY2xhc3MgZm9yIGNvbGxlY3Rpb24gb2Ygc3RyZWFtczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1uZXciIHRpdGxlPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3wqAoKSI+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNnc3Qtc3RyZWFtLWNvbGxlY3Rpb24tYWRkLXN0cmVhbSIgdGl0bGU9ImdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtwqAoKSI+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW08L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtdXBzdHJlYW0taWQiIHRpdGxlPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Vwc3RyZWFtX2lkwqAoKSI+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF91cHN0cmVhbV9pZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNnc3Qtc3RyZWFtLWNvbGxlY3Rpb24tZ2V0LXNpemUiIHRpdGxlPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemXCoCgpIj5nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLWdldC1zdHJlYW0iIHRpdGxlPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbcKgKCkiPmdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbkNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzcyI+R3N0U3RyZWFtQ29sbGVjdGlvbkNsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tY29sbGVjdGlvbi1uZXciPjwvYT48aDM+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJlYW1fY29sbGVjdGlvbl9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdXBzdHJlYW1faWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWNvbGxlY3Rpb24tbmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cHN0cmVhbV9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgc3RyZWFtIGlkIG9mIHRoZSBwYXJlbnQgc3RyZWFtLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tY29sbGVjdGlvbi1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWNvbGxlY3Rpb24tYWRkLXN0cmVhbSI+PC9hPjxoMz5nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT4gKmNvbGxlY3Rpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+ICpzdHJlYW08L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2xsZWN0aW9uPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLWFkZC1zdHJlYW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29sbGVjdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cmVhbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gdG8gYWRkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tY29sbGVjdGlvbi1hZGQtc3RyZWFtLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyZWFtPC9jb2RlPjwvZW0+Ci13YXMgcHJvcGVybHkgYWRkZWQsIGVsc2UgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWNvbGxlY3Rpb24tZ2V0LXVwc3RyZWFtLWlkIj48L2E+PGgzPmdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfdXBzdHJlYW1faWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfdXBzdHJlYW1faWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT4gKmNvbGxlY3Rpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgdXBzdHJlYW0gaWQgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2xsZWN0aW9uPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLWdldC11cHN0cmVhbS1pZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29sbGVjdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLWdldC11cHN0cmVhbS1pZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSB1cHN0cmVhbSBpZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWNvbGxlY3Rpb24tZ2V0LXNpemUiPjwvYT48aDM+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT4gKmNvbGxlY3Rpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBudW1iZXIgb2Ygc3RyZWFtcyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbnM8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RyZWFtLWNvbGxlY3Rpb24tZ2V0LXNpemUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbGxlY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc2l6ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBudW1iZXIgb2Ygc3RyZWFtcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2xsZWN0aW9uPC9jb2RlPjwvZW0+Ci1jb250YWluczwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc3RyZWFtIj48L2E+PGgzPmdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+wqAqCi1nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPiAqY29sbGVjdGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0cmlldmUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+IHdpdGggaW5kZXggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluZGV4PC9jb2RlPjwvZW0+Ci0gZnJvbSB0aGUgY29sbGVjdGlvbi48L3A+Ci08cD5UaGUgY2FsbGVyIHNob3VsZCBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc3RyZWFtLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbGxlY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmRleDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkluZGV4IG9mIHRoZSBzdHJlYW0gdG8gcmV0cmlldmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc3RyZWFtLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI0dzdFN0cmVhbSIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW08L3NwYW4+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTdHJlYW1Db2xsZWN0aW9uIj48L2E+PGgzPnN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiB7Ci0gIEdzdE9iamVjdCBvYmplY3Q7Ci19OwotPC9wcmU+Ci08cD5BIGNvbGxlY3Rpb24gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtPC9zcGFuPjwvYT4gdGhhdCBhcmUgYXZhaWxhYmxlLjwvcD4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+IHdpbGwgYmUgcHJvdmlkZWQgYnkgZWxlbWVudHMgdGhhdCBjYW4gbWFrZSB0aG9zZQotc3RyZWFtcyBhdmFpbGFibGUuIEFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoZSBjb2xsZWN0aW9uIHRvIHNob3cgdGhlIHVzZXIKLXdoYXQgc3RyZWFtcyBhcmUgYXZhaWxhYmxlIGJ5IHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc3RyZWFtIiB0aXRsZT0iZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW3CoCgpIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW08L2NvZGU+PC9hPigpPC9wPgotPHA+T25jZSBwb3N0ZWQsIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvc3Bhbj48L2E+IGlzIGltbXV0YWJsZS4gVXBkYXRlcyBhcmUgbWFkZSBieSBzZW5kaW5nCi1hIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCNHc3RTdHJlYW1Db2xsZWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9zcGFuPjwvYT4gbWVzc2FnZSwgd2hpY2ggbWF5IG9yIG1heSBub3Qgc2hhcmUgc29tZSBvZgotdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtIiB0aXRsZT0ic3RydWN0IEdzdFN0cmVhbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbTwvc3Bhbj48L2E+IG9iamVjdHMgZnJvbSB0aGUgY29sbGVjdGlvbiBpdCByZXBsYWNlcy4gVGhlIHJlY2VpdmVyIGNhbiBjaGVjawotdGhlIHNlbmRlciBvZiBhIHN0cmVhbSBjb2xsZWN0aW9uIG1lc3NhZ2UgdG8ga25vdyB3aGljaCBjb2xsZWN0aW9uIGlzCi1vYnNvbGV0ZWQuPC9wPgotPHA+U2V2ZXJhbCBlbGVtZW50cyBpbiBhIHBpcGVsaW5lIGNhbiBwcm92aWRlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtQ29sbGVjdGlvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbGxlY3Rpb248L3NwYW4+PC9hPi48L3A+Ci08cD5BcHBsaWNhdGlvbnMgY2FuIGFjdGl2YXRlIHN0cmVhbXMgZnJvbSBhIGNvbGxlY3Rpb24gYnkgdXNpbmcgdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU0VMRUNULVNUUkVBTVM6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9FVkVOVF9TRUxFQ1RfU1RSRUFNUzwvc3Bhbj48L2E+IGV2ZW50IG9uIGEgcGlwZWxpbmUsIGJpbiBvciBlbGVtZW50LjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzcyB7Ci0gIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWxzICovCi0gIHZvaWQgICgqc3RyZWFtX25vdGlmeSkgICAgICAoR3N0U3RyZWFtQ29sbGVjdGlvbiAqY29sbGVjdGlvbiwgR3N0U3RyZWFtICpzdHJlYW0sIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci19OwotPC9wcmU+Ci08cD5Hc3RTdHJlYW1Db2xsZWN0aW9uIGNsYXNzIHN0cnVjdHVyZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzcy5zdHJlYW0tbm90aWZ5Ij48L2E+c3RyZWFtX25vdGlmeTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+ZGVmYXVsdCBzaWduYWwgaGFuZGxlciBmb3IgdGhlIHN0cmVhbS1ub3RpZnkgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzIzOTM1Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RUb2NTZXR0ZXI6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RUb2MuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLnRvcF9vZl9wYWdlIj48L2E+R3N0VG9jU2V0dGVyPC9zcGFuPjwvaDI+Ci08cD5Hc3RUb2NTZXR0ZXIg4oCUIEVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgYW5kIHJldHJpZXZhbAotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgVE9DPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI2dzdC10b2Mtc2V0dGVyLXNldC10b2MiIHRpdGxlPSJnc3RfdG9jX3NldHRlcl9zZXRfdG9jwqAoKSI+Z3N0X3RvY19zZXR0ZXJfc2V0X3RvYzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RUb2M8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI2dzdC10b2Mtc2V0dGVyLWdldC10b2MiIHRpdGxlPSJnc3RfdG9jX3NldHRlcl9nZXRfdG9jwqAoKSI+Z3N0X3RvY19zZXR0ZXJfZ2V0X3RvYzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCNnc3QtdG9jLXNldHRlci1yZXNldCIgdGl0bGU9ImdzdF90b2Nfc2V0dGVyX3Jlc2V0wqAoKSI+Z3N0X3RvY19zZXR0ZXJfcmVzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwjR3N0VG9jU2V0dGVyIiB0aXRsZT0iR3N0VG9jU2V0dGVyIj5Hc3RUb2NTZXR0ZXI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwjR3N0VG9jU2V0dGVySW50ZXJmYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRvY1NldHRlckludGVyZmFjZSI+R3N0VG9jU2V0dGVySW50ZXJmYWNlPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5FbGVtZW50IGludGVyZmFjZSB0aGF0IGFsbG93cyBzZXR0aW5nIG9mIHRoZSBUT0MuPC9wPgotPHA+RWxlbWVudHMgdGhhdCBzdXBwb3J0IHNvbWUga2luZCBvZiBjaGFwdGVycyBvciBlZGl0aW9ucyAob3IgdHJhY2tzIGxpa2UgaW4KLXRoZSBGTEFDIGN1ZSBzaGVldCkgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuPC9wPgotPHA+SWYgeW91IGp1c3Qgd2FudCB0byByZXRyaWV2ZSB0aGUgVE9DIGluIHlvdXIgYXBwbGljYXRpb24gdGhlbiBhbGwgeW91Ci1uZWVkIHRvIGRvIGlzIHdhdGNoIGZvciBUT0MgbWVzc2FnZXMgb24geW91ciBwaXBlbGluZSdzIGJ1cyAob3IgeW91IGNhbgotcGVyZm9ybSBUT0MgcXVlcnkpLiBUaGlzIGludGVyZmFjZSBpcyBvbmx5IGZvciBzZXR0aW5nIFRPQyBkYXRhLCBub3QgZm9yCi1leHRyYWN0aW5nIGl0LiBUbyBzZXQgVE9DIGZyb20gdGhlIGFwcGxpY2F0aW9uLCBmaW5kIHByb3BlciB0b2NzZXR0ZXIgZWxlbWVudAotYW5kIHNldCBUT0MgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCNnc3QtdG9jLXNldHRlci1zZXQtdG9jIiB0aXRsZT0iZ3N0X3RvY19zZXR0ZXJfc2V0X3RvY8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RvY19zZXR0ZXJfc2V0X3RvYygpPC9jb2RlPjwvYT4uPC9wPgotPHA+RWxlbWVudHMgaW1wbGVtZW50aW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI0dzdFRvY1NldHRlciIgdGl0bGU9IkdzdFRvY1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY1NldHRlcjwvc3Bhbj48L2E+IGludGVyZmFjZSBjYW4gZXh0ZW5kIGV4aXN0aW5nIFRPQwotYnkgZ2V0dGluZyBleHRlbmQgVUlEIGZvciB0aGF0ICh5b3UgY2FuIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1maW5kLWVudHJ5IiB0aXRsZT0iZ3N0X3RvY19maW5kX2VudHJ5wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdG9jX2ZpbmRfZW50cnkoKTwvY29kZT48L2E+IHRvIHJldHJpZXZlIGl0KQotd2l0aCBhbnkgVE9DIGVudHJpZXMgcmVjZWl2ZWQgZnJvbSBkb3duc3RyZWFtLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1zZXR0ZXItc2V0LXRvYyI+PC9hPjxoMz5nc3RfdG9jX3NldHRlcl9zZXRfdG9jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RvY19zZXR0ZXJfc2V0X3RvYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwjR3N0VG9jU2V0dGVyIiB0aXRsZT0iR3N0VG9jU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jU2V0dGVyPC9zcGFuPjwvYT4gKnNldHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2M8L3NwYW4+PC9hPiAqdG9jPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgZ2l2ZW4gVE9DIG9uIHRoZSBzZXR0ZXIuIFByZXZpb3VzbHkgc2V0IFRPQyB3aWxsIGJlCi11bnJlZmZlZCBiZWZvcmUgc2V0dGluZyBhIG5ldyBvbmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1zZXR0ZXItc2V0LXRvYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXR0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwjR3N0VG9jU2V0dGVyIiB0aXRsZT0iR3N0VG9jU2V0dGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VG9jU2V0dGVyPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRvYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvYzwvc3Bhbj48L2E+IHRvIHNldC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRvYy1zZXR0ZXItZ2V0LXRvYyI+PC9hPjxoMz5nc3RfdG9jX3NldHRlcl9nZXRfdG9jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRvYzwvc3Bhbj48L2E+wqAqCi1nc3RfdG9jX3NldHRlcl9nZXRfdG9jICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCNHc3RUb2NTZXR0ZXIiIHRpdGxlPSJHc3RUb2NTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybiBjdXJyZW50IFRPQyB0aGUgc2V0dGVyIHVzZXMuIFRoZSBUT0Mgc2hvdWxkIG5vdCBiZQotbW9kaWZpZWQgd2l0aG91dCBtYWtpbmcgaXQgd3JpdGFibGUgZmlyc3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRvYy1zZXR0ZXItZ2V0LXRvYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0dGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI0dzdFRvY1NldHRlciIgdGl0bGU9IkdzdFRvY1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY1NldHRlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10b2Mtc2V0dGVyLWdldC10b2MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUT0Mgc2V0LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIFVucmVmIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLXVucmVmIiB0aXRsZT0iZ3N0X3RvY191bnJlZigpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90b2NfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdG9jLXNldHRlci1yZXNldCI+PC9hPjxoMz5nc3RfdG9jX3NldHRlcl9yZXNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90b2Nfc2V0dGVyX3Jlc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCNHc3RUb2NTZXR0ZXIiIHRpdGxlPSJHc3RUb2NTZXR0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NTZXR0ZXI8L3NwYW4+PC9hPiAqc2V0dGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlc2V0IHRoZSBpbnRlcm5hbCBUT0MuIEVsZW1lbnRzIHNob3VsZCBjYWxsIHRoaXMgZnJvbSB3aXRoaW4gdGhlCi1zdGF0ZS1jaGFuZ2UgaGFuZGxlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdG9jLXNldHRlci1yZXNldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2V0dGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI0dzdFRvY1NldHRlciIgdGl0bGU9IkdzdFRvY1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY1NldHRlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUb2NTZXR0ZXIiPjwvYT48aDM+R3N0VG9jU2V0dGVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0VG9jU2V0dGVyIEdzdFRvY1NldHRlcjs8L3ByZT4KLTxwPk9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI0dzdFRvY1NldHRlciIgdGl0bGU9IkdzdFRvY1NldHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRvY1NldHRlcjwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VG9jU2V0dGVySW50ZXJmYWNlIj48L2E+PGgzPnN0cnVjdCBHc3RUb2NTZXR0ZXJJbnRlcmZhY2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RUb2NTZXR0ZXJJbnRlcmZhY2UgewotICBHVHlwZUludGVyZmFjZSBnX2lmYWNlOwotCi0gIC8qIHNpZ25hbHMgKi8KLQotICAvKiB2aXJ0dWFsIHRhYmxlICovCi19OwotPC9wcmU+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI0dzdFRvY1NldHRlckludGVyZmFjZSIgdGl0bGU9InN0cnVjdCBHc3RUb2NTZXR0ZXJJbnRlcmZhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUb2NTZXR0ZXJJbnRlcmZhY2U8L3NwYW4+PC9hPiBpbnRlcmZhY2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VG9jU2V0dGVySW50ZXJmYWNlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTUxNTkxLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MjEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFR5cGVGaW5kOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sIiB0aXRsZT0iR3N0VG9jU2V0dGVyIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUeXBlRmluZCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC50b3Bfb2ZfcGFnZSI+PC9hPkdzdFR5cGVGaW5kPC9zcGFuPjwvaDI+Ci08cD5Hc3RUeXBlRmluZCDigJQgU3RyZWFtIHR5cGUgZGV0ZWN0aW9uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZEZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRGdW5jdGlvbsKgKCkiPipHc3RUeXBlRmluZEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXBlZWsiIHRpdGxlPSJnc3RfdHlwZV9maW5kX3BlZWvCoCgpIj5nc3RfdHlwZV9maW5kX3BlZWs8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXN1Z2dlc3QiIHRpdGxlPSJnc3RfdHlwZV9maW5kX3N1Z2dlc3TCoCgpIj5nc3RfdHlwZV9maW5kX3N1Z2dlc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXN1Z2dlc3Qtc2ltcGxlIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZcKgKCkiPmdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLWdldC1sZW5ndGgiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2dldF9sZW5ndGjCoCgpIj5nc3RfdHlwZV9maW5kX2dldF9sZW5ndGg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfdHlwZV9maW5kX3JlZ2lzdGVywqAoKSI+Z3N0X3R5cGVfZmluZF9yZWdpc3RlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5IiB0aXRsZT0iZW51bSBHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij5Hc3RUeXBlRmluZFByb2JhYmlsaXR5PC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYWxsb3cgeW91IHRvIGRldGVjdCB0aGUgbWVkaWEgdHlwZSBvZiBhbiB1bmtub3duCi1zdHJlYW0uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kRnVuY3Rpb24iPjwvYT48aDM+R3N0VHlwZUZpbmRGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RUeXBlRmluZEZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiAqZmluZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJ5IHR5cGVmaW5kaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmluZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiBzdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b3B0aW9uYWwgZGF0YSB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLXBlZWsiPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9wZWVrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT7CoCoKLWdzdF90eXBlX2ZpbmRfcGVlayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gKmZpbmQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBvZiB0aGUgc3RyZWFtIHRvIGlkZW50aWZ5IGJlZ2lubmluZyBhdCBvZmZzZXQuIElmCi1vZmZzZXQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKLXN0cmVhbSwgaWYgb2Zmc2V0IGlzIGEgbmVnYXRpdmUgbnVtYmVyIHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZgotdGhlIHN0cmVhbS4gVGhlIHJldHVybmVkIG1lbW9yeSBpcyB2YWxpZCB1bnRpbCB0aGUgdHlwZWZpbmRpbmcgZnVuY3Rpb24KLXJldHVybnMgYW5kIG11c3Qgbm90IGJlIGZyZWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtcGVlay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gb2JqZWN0IHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG51bWJlciBvZiBieXRlcyB0byByZXR1cm48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtcGVlay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZQotcmVxdWVzdGVkIGRhdGEsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGF0IGRhdGEgaXMgbm90IGF2YWlsYWJsZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLXN1Z2dlc3QiPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9zdWdnZXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3R5cGVfZmluZF9zdWdnZXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiAqZmluZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHByb2JhYmlsaXR5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SWYgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGdW5jdGlvbjwvc3Bhbj48L2E+IGNhbGxzIHRoaXMgZnVuY3Rpb24gaXQgc3VnZ2VzdHMgdGhlIGNhcHMgd2l0aCB0aGUKLWdpdmVuIHByb2JhYmlsaXR5LiBBIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZEZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZ1bmN0aW9uPC9zcGFuPjwvYT4gbWF5IHN1cHBseSBkaWZmZXJlbnQgc3VnZ2VzdGlvbnMKLWluIG9uZSBjYWxsLgotSXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRnVuY3Rpb248L3NwYW4+PC9hPiB0byBpbnRlcnByZXQgdGhlc2UgdmFsdWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtc3VnZ2VzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZCIgdGl0bGU9InN0cnVjdCBHc3RUeXBlRmluZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kPC9zcGFuPjwvYT4gb2JqZWN0IHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvYmFiaWxpdHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcHJvYmFiaWxpdHkgaW4gcGVyY2VudCB0aGF0IHRoZSBzdWdnZXN0aW9uIGlzIHJpZ2h0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgZml4ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc3VnZ2VzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLXN1Z2dlc3Qtc2ltcGxlIj48L2E+PGgzPmdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiAqZmluZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBwcm9iYWJpbGl0eTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8c3BhbiBjbGFzcz0idHlwZSI+Y2hhcjwvc3Bhbj4gKm1lZGlhX3R5cGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICpmaWVsZG5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPklmIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRnVuY3Rpb248L3NwYW4+PC9hPiBjYWxscyB0aGlzIGZ1bmN0aW9uIGl0IHN1Z2dlc3RzIHRoZSBjYXBzIHdpdGggdGhlCi1naXZlbiBwcm9iYWJpbGl0eS4gQSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGdW5jdGlvbjwvc3Bhbj48L2E+IG1heSBzdXBwbHkgZGlmZmVyZW50IHN1Z2dlc3Rpb25zCi1pbiBvbmUgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRnVuY3Rpb248L3NwYW4+PC9hPiB0byBpbnRlcnByZXQKLXRoZXNlIHZhbHVlcy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtc3VnZ2VzdCIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfc3VnZ2VzdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3R5cGVfZmluZF9zdWdnZXN0KCk8L2NvZGU+PC9hPiwgb25seSB0aGF0IGluc3RlYWQgb2YKLXBhc3NpbmcgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBhcmd1bWVudCB5b3UgY2FuIGNyZWF0ZSB0aGUgY2FwcyBvbiB0aGUgZmx5IGluIHRoZSBzYW1lCi13YXkgYXMgeW91IGNhbiB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LXNpbXBsZSIgdGl0bGU9ImdzdF9jYXBzX25ld19zaW1wbGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX25ld19zaW1wbGUoKTwvY29kZT48L2E+LjwvcD4KLTxwPk1ha2Ugc3VyZSB5b3UgdGVybWluYXRlIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyB3aXRoIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGFyZ3VtZW50IGFuZCB0aGF0Ci10aGUgdmFsdWVzIHBhc3NlZCBoYXZlIHRoZSBjb3JyZWN0IHR5cGUgKGluIHRlcm1zIG9mIHdpZHRoIGluIGJ5dGVzIHdoZW4KLXBhc3NlZCB0byB0aGUgdmFyYXJnIGZ1bmN0aW9uIC0gdGhpcyBhcHBsaWVzIHBhcnRpY3VsYXJseSB0byBnZG91YmxlIGFuZAotZ3VpbnQ2NCBhcmd1bWVudHMpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtc3VnZ2VzdC1zaW1wbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmluZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+IG9iamVjdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb2JhYmlsaXR5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHByb2JhYmlsaXR5IGluIHBlcmNlbnQgdGhhdCB0aGUgc3VnZ2VzdGlvbiBpcyByaWdodDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZWRpYV90eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG1lZGlhIHR5cGUgb2YgdGhlIHN1Z2dlc3RlZCBjYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpZWxkbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBmaXJzdCBmaWVsZCBvZiB0aGUgc3VnZ2VzdGVkIGNhcHMsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Li4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIHN1Z2dlc3RlZCBjYXBzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKLWFyZ3VtZW50cyBwYXNzZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zdHJ1Y3R1cmVfbmV3KCk8L2NvZGU+PC9hPiAoaWUuIHRyaXBsZXRzIG9mIGZpZWxkIG5hbWUsCi1maWVsZCBHVHlwZSBhbmQgZmllbGQgdmFsdWUpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtZ2V0LWxlbmd0aCI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2dldF9sZW5ndGjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfdHlwZV9maW5kX2dldF9sZW5ndGggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZDwvc3Bhbj48L2E+ICpmaW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWdldC1sZW5ndGgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kIiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmQ8L3NwYW4+PC9hPiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1nZXQtbGVuZ3RoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBzdHJlYW0sIG9yIDAgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1yZWdpc3RlciI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX3JlZ2lzdGVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdHlwZV9maW5kX3JlZ2lzdGVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4gKnBsdWdpbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiByYW5rPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZEZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZXh0ZW5zaW9uczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqcG9zc2libGVfY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IGRhdGFfbm90aWZ5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlZ2lzdGVycyBhIG5ldyB0eXBlZmluZCBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciB0eXBlZmluZGluZy4gQWZ0ZXIKLXJlZ2lzdGVyaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhdmFpbGFibGUgZm9yIHR5cGVmaW5kaW5nLgotVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGR1cmluZyBhbiBlbGVtZW50J3MgcGx1Z2luIGluaXRpYWxpemF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtcmVnaXN0ZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGx1Z2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBmb3IgYSBzdGF0aWMgdHlwZWZpbmQgZnVuY3Rpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbmFtZSBmb3IgcmVnaXN0ZXJpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmFuazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSByYW5rIChvciBpbXBvcnRhbmNlKSBvZiB0aGlzIHR5cGVmaW5kIGZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kRnVuY3Rpb24iIHRpdGxlPSJHc3RUeXBlRmluZEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRnVuY3Rpb248L3NwYW4+PC9hPiB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXh0ZW5zaW9uczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBPcHRpb25hbCBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHRlbnNpb25zCi10aGF0IGNvdWxkIGJlbG9uZyB0byB0aGlzIHR5cGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvc3NpYmxlX2NhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbGx5IHRoZSBjYXBzIHRoYXQgY291bGQgYmUgcmV0dXJuZWQgd2hlbiB0eXBlZmluZGluZwotc3VjY2VlZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk9wdGlvbmFsIHVzZXIgZGF0YS4gVGhpcyB1c2VyIGRhdGEgbXVzdCBiZSBhdmFpbGFibGUgdW50aWwgdGhlIHBsdWdpbgotaXMgdW5sb2FkZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGFfbm90aWZ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci13aGVuIHRoZSBwbHVnaW4KLWlzIHVubG9hZGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1yZWdpc3Rlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBvbiBzdWNjZXNzLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kIj48L2E+PGgzPnN0cnVjdCBHc3RUeXBlRmluZDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFR5cGVGaW5kIHsKLSAgLyogcHJpdmF0ZSB0byB0aGUgY2FsbGVyIG9mIHRoZSB0eXBlZmluZCBmdW5jdGlvbiAqLwotICBjb25zdCBndWludDggKiAgKCogcGVlaykgICAgICAgKGdwb2ludGVyICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgICAgIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgIHNpemUpOwotCi0gIHZvaWQgICAgICAgICAgICAoKiBzdWdnZXN0KSAgICAoZ3BvaW50ZXIgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgcHJvYmFiaWxpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAgICAgICAgICpjYXBzKTsKLQotICBncG9pbnRlciAgICAgICAgIGRhdGE7Ci0KLSAgLyogb3B0aW9uYWwgKi8KLSAgZ3VpbnQ2NCAgICAgICAgICgqIGdldF9sZW5ndGgpIChncG9pbnRlciBkYXRhKTsKLX07Ci08L3ByZT4KLTxwPk9iamVjdCB0aGF0IHN0b3JlcyB0eXBlZmluZCBjYWxsYmFja3MuIFRvIHVzZSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kRmFjdG9yeTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUeXBlRmluZC5wZWVrIj48L2E+cGVlazwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+TWV0aG9kIHRvIHBlZWsgZGF0YS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUeXBlRmluZC5zdWdnZXN0Ij48L2E+c3VnZ2VzdDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+TWV0aG9kIHRvIHN1Z2dlc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gd2l0aCBhIGdpdmVuIHByb2JhYmlsaXR5LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUeXBlRmluZC5kYXRhIj48L2E+ZGF0YTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGRhdGEgdXNlZCBieSB0aGUgY2FsbGVyIG9mIHRoZSB0eXBlZmluZGluZyBmdW5jdGlvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RUeXBlRmluZC5nZXQtbGVuZ3RoIj48L2E+Z2V0X2xlbmd0aDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+UmV0dXJucyB0aGUgbGVuZ3RoIG9mIGN1cnJlbnQgZGF0YS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kUHJvYmFiaWxpdHkiPjwvYT48aDM+ZW51bSBHc3RUeXBlRmluZFByb2JhYmlsaXR5PC9oMz4KLTxwPlRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgdHlwZWZpbmQgZnVuY3Rpb24uIEhpZ2hlciB2YWx1ZXMgaGF2ZSBtb3JlIGNlcnRhaW50eQotaW4gZG9pbmcgYSByZWxpYWJsZSB0eXBlZmluZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUeXBlRmluZFByb2JhYmlsaXR5Lm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRZUEUtRklORC1OT05FOkNBUFMiPjwvYT5HU1RfVFlQRV9GSU5EX05PTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+dHlwZSB1bmRldGVjdGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVFlQRS1GSU5ELU1JTklNVU06Q0FQUyI+PC9hPkdTVF9UWVBFX0ZJTkRfTUlOSU1VTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD51bmxpa2VseSB0eXBlZmluZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVRZUEUtRklORC1QT1NTSUJMRTpDQVBTIj48L2E+R1NUX1RZUEVfRklORF9QT1NTSUJMRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5wb3NzaWJsZSB0eXBlIGRldGVjdGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVFlQRS1GSU5ELUxJS0VMWTpDQVBTIj48L2E+R1NUX1RZUEVfRklORF9MSUtFTFk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bGlrZWx5IGEgdHlwZSB3YXMgZGV0ZWN0ZWQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1UWVBFLUZJTkQtTkVBUkxZLUNFUlRBSU46Q0FQUyI+PC9hPkdTVF9UWVBFX0ZJTkRfTkVBUkxZX0NFUlRBSU48L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bmVhcmx5IGNlcnRhaW4gdGhhdCBhIHR5cGUgd2FzIGRldGVjdGVkLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVFlQRS1GSU5ELU1BWElNVU06Q0FQUyI+PC9hPkdTVF9UWVBFX0ZJTkRfTUFYSU1VTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD52ZXJ5IGNlcnRhaW4gYSB0eXBlIHdhcyBkZXRlY3RlZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VXJpLmh0bWwgYi9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RVcmkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY5OGI5MC4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RVcmkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5MTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFVyaTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLUdzdFVyaS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVcmkudG9wX29mX3BhZ2UiPjwvYT5Hc3RVcmk8L3NwYW4+PC9oMj4KLTxwPkdzdFVyaSDigJQgVVJJIHBhcnNpbmcgYW5kIG1hbmlwdWxhdGlvbi48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR1NULVVSSS1DQVNUOkNBUFMiIHRpdGxlPSJHU1RfVVJJX0NBU1QoKSI+R1NUX1VSSV9DQVNUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHU1QtVVJJLUNPTlNULUNBU1Q6Q0FQUyIgdGl0bGU9IkdTVF9VUklfQ09OU1RfQ0FTVCgpIj5HU1RfVVJJX0NPTlNUX0NBU1Q8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VXJpPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLW5ldyIgdGl0bGU9ImdzdF91cmlfbmV3wqAoKSI+Z3N0X3VyaV9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RVcmk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktbmV3LXdpdGgtYmFzZSIgdGl0bGU9ImdzdF91cmlfbmV3X3dpdGhfYmFzZcKgKCkiPmdzdF91cmlfbmV3X3dpdGhfYmFzZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFVyaTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF91cmlfZnJvbV9zdHJpbmfCoCgpIj5nc3RfdXJpX2Zyb21fc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VXJpPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWZyb20tc3RyaW5nLXdpdGgtYmFzZSIgdGl0bGU9ImdzdF91cmlfZnJvbV9zdHJpbmdfd2l0aF9iYXNlwqAoKSI+Z3N0X3VyaV9mcm9tX3N0cmluZ193aXRoX2Jhc2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RVcmk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktY29weSIgdGl0bGU9ImdzdF91cmlfY29wecKgKCkiPmdzdF91cmlfY29weTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZXF1YWwiIHRpdGxlPSJnc3RfdXJpX2VxdWFswqAoKSI+Z3N0X3VyaV9lcXVhbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFVyaTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1qb2luIiB0aXRsZT0iZ3N0X3VyaV9qb2luwqAoKSI+Z3N0X3VyaV9qb2luPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1qb2luLXN0cmluZ3MiIHRpdGxlPSJnc3RfdXJpX2pvaW5fc3RyaW5nc8KgKCkiPmdzdF91cmlfam9pbl9zdHJpbmdzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF91cmlfaXNfd3JpdGFibGXCoCgpIj5nc3RfdXJpX2lzX3dyaXRhYmxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VXJpPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfdXJpX21ha2Vfd3JpdGFibGXCoCgpIj5nc3RfdXJpX21ha2Vfd3JpdGFibGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXRvLXN0cmluZyIgdGl0bGU9ImdzdF91cmlfdG9fc3RyaW5nwqAoKSI+Z3N0X3VyaV90b19zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RVcmk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktcmVmIiB0aXRsZT0iZ3N0X3VyaV9yZWbCoCgpIj5nc3RfdXJpX3JlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXVucmVmIiB0aXRsZT0iZ3N0X3VyaV91bnJlZsKgKCkiPmdzdF91cmlfdW5yZWY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWlzLW5vcm1hbGl6ZWQiIHRpdGxlPSJnc3RfdXJpX2lzX25vcm1hbGl6ZWTCoCgpIj5nc3RfdXJpX2lzX25vcm1hbGl6ZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLW5vcm1hbGl6ZSIgdGl0bGU9ImdzdF91cmlfbm9ybWFsaXplwqAoKSI+Z3N0X3VyaV9ub3JtYWxpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtc2NoZW1lIiB0aXRsZT0iZ3N0X3VyaV9nZXRfc2NoZW1lwqAoKSI+Z3N0X3VyaV9nZXRfc2NoZW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtc2NoZW1lIiB0aXRsZT0iZ3N0X3VyaV9zZXRfc2NoZW1lwqAoKSI+Z3N0X3VyaV9zZXRfc2NoZW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXVzZXJpbmZvIiB0aXRsZT0iZ3N0X3VyaV9nZXRfdXNlcmluZm/CoCgpIj5nc3RfdXJpX2dldF91c2VyaW5mbzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXVzZXJpbmZvIiB0aXRsZT0iZ3N0X3VyaV9zZXRfdXNlcmluZm/CoCgpIj5nc3RfdXJpX3NldF91c2VyaW5mbzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1ob3N0IiB0aXRsZT0iZ3N0X3VyaV9nZXRfaG9zdMKgKCkiPmdzdF91cmlfZ2V0X2hvc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1ob3N0IiB0aXRsZT0iZ3N0X3VyaV9zZXRfaG9zdMKgKCkiPmdzdF91cmlfc2V0X2hvc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1wb3J0IiB0aXRsZT0iZ3N0X3VyaV9nZXRfcG9ydMKgKCkiPmdzdF91cmlfZ2V0X3BvcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1wb3J0IiB0aXRsZT0iZ3N0X3VyaV9zZXRfcG9ydMKgKCkiPmdzdF91cmlfc2V0X3BvcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1wYXRoIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcGF0aMKgKCkiPmdzdF91cmlfZ2V0X3BhdGg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1wYXRoIiB0aXRsZT0iZ3N0X3VyaV9zZXRfcGF0aMKgKCkiPmdzdF91cmlfc2V0X3BhdGg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1wYXRoLXN0cmluZyIgdGl0bGU9ImdzdF91cmlfZ2V0X3BhdGhfc3RyaW5nwqAoKSI+Z3N0X3VyaV9nZXRfcGF0aF9zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1wYXRoLXN0cmluZyIgdGl0bGU9ImdzdF91cmlfc2V0X3BhdGhfc3RyaW5nwqAoKSI+Z3N0X3VyaV9zZXRfcGF0aF9zdHJpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXBhdGgtc2VnbWVudHMiIHRpdGxlPSJnc3RfdXJpX2dldF9wYXRoX3NlZ21lbnRzwqAoKSI+Z3N0X3VyaV9nZXRfcGF0aF9zZWdtZW50czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXBhdGgtc2VnbWVudHMiIHRpdGxlPSJnc3RfdXJpX3NldF9wYXRoX3NlZ21lbnRzwqAoKSI+Z3N0X3VyaV9zZXRfcGF0aF9zZWdtZW50czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktYXBwZW5kLXBhdGgiIHRpdGxlPSJnc3RfdXJpX2FwcGVuZF9wYXRowqAoKSI+Z3N0X3VyaV9hcHBlbmRfcGF0aDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktYXBwZW5kLXBhdGgtc2VnbWVudCIgdGl0bGU9ImdzdF91cmlfYXBwZW5kX3BhdGhfc2VnbWVudMKgKCkiPmdzdF91cmlfYXBwZW5kX3BhdGhfc2VnbWVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXF1ZXJ5LXN0cmluZyIgdGl0bGU9ImdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZ8KgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXF1ZXJ5LXN0cmluZyIgdGl0bGU9ImdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZ8KgKCkiPmdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUhhc2gtVGFibGVzLmh0bWwjR0hhc2hUYWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HSGFzaFRhYmxlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS10YWJsZSIgdGl0bGU9ImdzdF91cmlfZ2V0X3F1ZXJ5X3RhYmxlwqAoKSI+Z3N0X3VyaV9nZXRfcXVlcnlfdGFibGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1xdWVyeS10YWJsZSIgdGl0bGU9ImdzdF91cmlfc2V0X3F1ZXJ5X3RhYmxlwqAoKSI+Z3N0X3VyaV9zZXRfcXVlcnlfdGFibGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtcXVlcnktdmFsdWUiIHRpdGxlPSJnc3RfdXJpX2dldF9xdWVyeV92YWx1ZcKgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X3ZhbHVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtcXVlcnktdmFsdWUiIHRpdGxlPSJnc3RfdXJpX3NldF9xdWVyeV92YWx1ZcKgKCkiPmdzdF91cmlfc2V0X3F1ZXJ5X3ZhbHVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1yZW1vdmUtcXVlcnkta2V5IiB0aXRsZT0iZ3N0X3VyaV9yZW1vdmVfcXVlcnlfa2V5wqAoKSI+Z3N0X3VyaV9yZW1vdmVfcXVlcnlfa2V5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1xdWVyeS1oYXMta2V5IiB0aXRsZT0iZ3N0X3VyaV9xdWVyeV9oYXNfa2V5wqAoKSI+Z3N0X3VyaV9xdWVyeV9oYXNfa2V5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS1rZXlzIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcXVlcnlfa2V5c8KgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X2tleXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtZnJhZ21lbnQiIHRpdGxlPSJnc3RfdXJpX2dldF9mcmFnbWVudMKgKCkiPmdzdF91cmlfZ2V0X2ZyYWdtZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtZnJhZ21lbnQiIHRpdGxlPSJnc3RfdXJpX3NldF9mcmFnbWVudMKgKCkiPmdzdF91cmlfc2V0X2ZyYWdtZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VXJpLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiBvYmplY3QgY2FuIGJlIHVzZWQgdG8gcGFyc2UgYW5kIHNwbGl0IGEgVVJJIHN0cmluZyBpbnRvIGl0cwotY29uc3RpdHVhbnQgcGFydHMuIFR3byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdHMgY2FuIGJlIGpvaW5lZCB0byBtYWtlIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4KLXVzaW5nIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIFJGQzM5ODYuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VXJpLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVVJJLUNBU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfVVJJX0NBU1QoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVVJJX0NBU1Qob2JqKSAgICgoR3N0VXJpICopKG9iaikpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVVSSS1DT05TVC1DQVNUOkNBUFMiPjwvYT48aDM+R1NUX1VSSV9DT05TVF9DQVNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1VSSV9DT05TVF9DQVNUKG9iaikgKChjb25zdCBHc3RVcmkgKikob2JqKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLW5ldyI+PC9hPjxoMz5nc3RfdXJpX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFVyaTwvc3Bhbj48L2E+wqAqCi1nc3RfdXJpX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzY2hlbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1c2VyaW5mbzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmhvc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHBvcnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmcmFnbWVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0IHdpdGggdGhlIGdpdmVuIFVSSSBwYXJ0cy4gVGhlIHBhdGggYW5kIHF1ZXJ5Ci1zdHJpbmdzIHdpbGwgYmUgYnJva2VuIGRvd24gaW50byB0aGVpciBlbGVtZW50cy4gQWxsIHN0cmluZ3Mgc2hvdWxkIG5vdCBiZQotZXNjYXBlZCBleGNlcHQgd2hlcmUgaW5kaWNhdGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktbmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNjaGVtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgc2NoZW1lIGZvciB0aGUgbmV3IFVSSS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcmluZm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIHVzZXItaW5mbyBmb3IgdGhlIG5ldyBVUkkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmhvc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIGhvc3QgbmFtZSBmb3IgdGhlIG5ldyBVUkkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcG9ydCBudW1iZXIgZm9yIHRoZSBuZXcgVVJJIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dTVC1VUkktTk8tUE9SVDpDQVBTIiB0aXRsZT0iR1NUX1VSSV9OT19QT1JUIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1VSSV9OT19QT1JUPC9jb2RlPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIHBhdGggZm9yIHRoZSBuZXcgVVJJIHdpdGggJy8nIHNlcGFyYXRpbmcgcGF0aAotZWxlbWVudHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBxdWVyeSBzdHJpbmcgZm9yIHRoZSBuZXcgVVJJIHdpdGggJyZhbXA7JyBzZXBhcmF0aW5nCi1xdWVyeSBlbGVtZW50cy4gRWxlbWVudHMgY29udGFpbmluZyAnJmFtcDsnIGNoYXJhY3RlcnMKLXNob3VsZCBlbmNvZGUgdGhlbSBhcyAiJTI2Ii4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnJhZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIGZyYWdtZW50IG5hbWUgZm9yIHRoZSBuZXcgVVJJLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1uZXctd2l0aC1iYXNlIj48L2E+PGgzPmdzdF91cmlfbmV3X3dpdGhfYmFzZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFVyaTwvc3Bhbj48L2E+wqAqCi1nc3RfdXJpX25ld193aXRoX2Jhc2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICpiYXNlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNjaGVtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1c2VyaW5mbzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpob3N0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gcG9ydDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZyYWdtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLW5ldyIgdGl0bGU9ImdzdF91cmlfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXJpX25ldygpPC9jb2RlPjwvYT4sIGJ1dCBqb2lucyB0aGUgbmV3IFVSSSBvbnRvIGEgYmFzZSBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1uZXctd2l0aC1iYXNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJhc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIGJhc2UgVVJJIHRvIGpvaW4gdGhlIG5ldyBVUkkgdG8uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNjaGVtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgc2NoZW1lIGZvciB0aGUgbmV3IFVSSS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcmluZm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIHVzZXItaW5mbyBmb3IgdGhlIG5ldyBVUkkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmhvc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIGhvc3QgbmFtZSBmb3IgdGhlIG5ldyBVUkkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcG9ydCBudW1iZXIgZm9yIHRoZSBuZXcgVVJJIG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dTVC1VUkktTk8tUE9SVDpDQVBTIiB0aXRsZT0iR1NUX1VSSV9OT19QT1JUIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1VSSV9OT19QT1JUPC9jb2RlPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIHBhdGggZm9yIHRoZSBuZXcgVVJJIHdpdGggJy8nIHNlcGFyYXRpbmcgcGF0aAotZWxlbWVudHMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBxdWVyeSBzdHJpbmcgZm9yIHRoZSBuZXcgVVJJIHdpdGggJyZhbXA7JyBzZXBhcmF0aW5nCi1xdWVyeSBlbGVtZW50cy4gRWxlbWVudHMgY29udGFpbmluZyAnJmFtcDsnIGNoYXJhY3RlcnMKLXNob3VsZCBlbmNvZGUgdGhlbSBhcyAiJTI2Ii4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnJhZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIGZyYWdtZW50IG5hbWUgZm9yIHRoZSBuZXcgVVJJLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1uZXctd2l0aC1iYXNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyBVUkkgam9pbmVkIG9udG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJhc2U8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1mcm9tLXN0cmluZyI+PC9hPjxoMz5nc3RfdXJpX2Zyb21fc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VXJpPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZnJvbV9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBhcnNlcyBhIFVSSSBzdHJpbmcgaW50byBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdC4gV2lsbCByZXR1cm4gTlVMTCBpZiB0aGUgVVJJCi1jYW5ub3QgYmUgcGFyc2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZnJvbS1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBVUkkgc3RyaW5nIHRvIHBhcnNlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZnJvbS1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdCwgb3IgTlVMTC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWZyb20tc3RyaW5nLXdpdGgtYmFzZSI+PC9hPjxoMz5nc3RfdXJpX2Zyb21fc3RyaW5nX3dpdGhfYmFzZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFVyaTwvc3Bhbj48L2E+wqAqCi1nc3RfdXJpX2Zyb21fc3RyaW5nX3dpdGhfYmFzZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKmJhc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfdXJpX2Zyb21fc3RyaW5nwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXJpX2Zyb21fc3RyaW5nKCk8L2NvZGU+PC9hPiBidXQgYWxzbyBqb2lucyB3aXRoIGEgYmFzZSBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1mcm9tLXN0cmluZy13aXRoLWJhc2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmFzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgYmFzZSBVUkkgdG8gam9pbiB0aGUgbmV3IFVSSSB3aXRoLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgVVJJIHN0cmluZyB0byBwYXJzZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZnJvbS1zdHJpbmctd2l0aC1iYXNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiBvYmplY3QuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktY29weSI+PC9hPjxoMz5nc3RfdXJpX2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RVcmk8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9jb3B5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdCB3aXRoIHRoZSBzYW1lIGRhdGEgYXMgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdC4KLUlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT4KLSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGhlbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiBvYmplY3QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1jb3B5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiBvYmplY3Qgd2hpY2ggaXMgYSBjb3B5IG9mIHRoaXMKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWVxdWFsIj48L2E+PGgzPmdzdF91cmlfZXF1YWzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfZXF1YWwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICpmaXJzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICpzZWNvbmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29tcGFyZXMgdHdvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0cyB0byBzZWUgaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgbm9ybWFsaXplZAotVVJJLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZXF1YWwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5GaXJzdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIGNvbXBhcmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlY29uZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlNlY29uZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIGNvbXBhcmUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWVxdWFsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBub3JtYWxpemVkIHZlcnNpb25zIG9mIHRoZSB0d28gVVJJJ3Mgd291bGQgYmUgZXF1YWwuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktam9pbiI+PC9hPjxoMz5nc3RfdXJpX2pvaW7CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RVcmk8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9qb2luICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqYmFzZV91cmk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICpyZWZfdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkpvaW4gYSByZWZlcmVuY2UgVVJJIG9udG8gYSBiYXNlIFVSSSB1c2luZyB0aGUgbWV0aG9kIGZyb20gUkZDIDM5ODYuCi1JZiBlaXRoZXIgVVJJIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0aGVuIHRoZSBvdGhlciBVUkkgd2lsbCBiZSByZXR1cm5lZCB3aXRoIHRoZSByZWYgY291bnQKLWluY3JlYXNlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWpvaW4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmFzZV91cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIGJhc2UgVVJJIHRvIGpvaW4gYW5vdGhlciB0by4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVmX3VyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgcmVmZXJlbmNlIFVSSSB0byBqb2luIG9udG8gdGhlCi1iYXNlIFVSSS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktam9pbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiB3aGljaCByZXByZXNlbnRzIHRoZSBiYXNlIHdpdGggdGhlCi1yZWZlcmVuY2UgVVJJIGpvaW5lZCBvbi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1qb2luLXN0cmluZ3MiPjwvYT48aDM+Z3N0X3VyaV9qb2luX3N0cmluZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfam9pbl9zdHJpbmdzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmJhc2VfdXJpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcmVmX3VyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gam9pbiB0d28gVVJJIHN0cmluZ3MgYW5kIHJldHVybiB0aGUgcmVzdWx0LgotVGhlIHJldHVybmVkIHN0cmluZyBzaG91bGQgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPidkIGFmdGVyIHVzZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWpvaW4tc3RyaW5ncy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iYXNlX3VyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBwZXJjZW50LWVuY29kZWQgYmFzZSBVUkkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlZl91cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcGVyY2VudC1lbmNvZGVkIHJlZmVyZW5jZSBVUkkgdG8gam9pbiB0byB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJhc2VfdXJpPC9jb2RlPjwvZW0+Ci0uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWpvaW4tc3RyaW5ncy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGVyY2VudC1lbmNvZGVkIGpvaW4gb2YKLXRoZSB0d28gVVJJcy4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1pcy13cml0YWJsZSI+PC9hPjxoMz5nc3RfdXJpX2lzX3dyaXRhYmxlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX2lzX3dyaXRhYmxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+LjwvcD4KLTxwPkNoZWNrIGlmIHRoZSByZWZjb3VudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXJpPC9jb2RlPjwvZW0+Ci0gaXMgZXhhY3RseSAxLCBtZWFuaW5nIHRoYXQgbm8gb3RoZXIKLXJlZmVyZW5jZSBleGlzdHMgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gYW5kIHRoYXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gaXMgdGhlcmVmb3JlIHdyaXRhYmxlLjwvcD4KLTxwPk1vZGlmaWNhdGlvbiBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gc2hvdWxkIG9ubHkgYmUgZG9uZSBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcwotd3JpdGFibGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1pcy13cml0YWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0IHRvIHRlc3QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1pcy13cml0YWJsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSBvYmplY3QuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktbWFrZS13cml0YWJsZSI+PC9hPjxoMz5nc3RfdXJpX21ha2Vfd3JpdGFibGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RVcmk8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9tYWtlX3dyaXRhYmxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk1ha2UgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gd3JpdGFibGUuPC9wPgotPHA+Q2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT4KLSBpcyB3cml0YWJsZSwgYW5kIGlmIHNvIHRoZSBvcmlnaW5hbCBvYmplY3QgaXMgcmV0dXJuZWQuIElmCi1ub3QsIHRoZW4gYSB3cml0YWJsZSBjb3B5IGlzIG1hZGUgYW5kIHJldHVybmVkLiBUaGlzIGdpdmVzIGF3YXkgdGhlCi1yZWZlcmVuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPgotIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPi4KLUlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT4KLSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGhlbiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1tYWtlLXdyaXRhYmxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0IHRvIG1ha2Ugd3JpdGFibGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktbWFrZS13cml0YWJsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgd3JpdGFibGUgdmVyc2lvbiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXJpPC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktdG8tc3RyaW5nIj48L2E+PGgzPmdzdF91cmlfdG9fc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfdXJpX3RvX3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db252ZXJ0IHRoZSBVUkkgdG8gYSBzdHJpbmcuPC9wPgotPHA+UmV0dXJucyB0aGUgVVJJIGFzIGhlbGQgaW4gdGhpcyBvYmplY3QgYXMgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiogbnVsLXRlcm1pbmF0ZWQgc3RyaW5nLgotVGhlIGNhbGxlciBzaG91bGQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB0aGUgc3RyaW5nIG9uY2UgdGhleSBhcmUgZmluaXNoZWQgd2l0aCBpdC4KLVRoZSBzdHJpbmcgaXMgcHV0IHRvZ2V0aGVyIGFzIGRlc2NyaWJlZCBpbiBSRkMgMzk4Ni48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXRvLXN0cmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS10by1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgc3RyaW5nIHZlcnNpb24gb2YgdGhlIFVSSS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1yZWYiPjwvYT48aDM+Z3N0X3VyaV9yZWbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RVcmk8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9yZWYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkIGEgcmVmZXJlbmNlIHRvIHRoaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiBvYmplY3QuIFNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtcmVmIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3JlZsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X21pbmlfb2JqZWN0X3JlZigpPC9jb2RlPjwvYT4gZm9yIGZ1cnRoZXIKLWluZm8uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXJlZi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoaXMgb2JqZWN0IHdpdGggdGhlIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnRlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS11bnJlZiI+PC9hPjxoMz5nc3RfdXJpX3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3VyaV91bnJlZiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCB0byB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0LjwvcD4KLTxwPklmIHRoZSByZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gMCB0aGVuIGZpbmFsaXplIHRoaXMgb2JqZWN0LjwvcD4KLTxwPlNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfdW5yZWbCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9taW5pX29iamVjdF91bnJlZigpPC9jb2RlPjwvYT4gZm9yIGZ1cnRoZXIgaW5mby48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXVucmVmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWlzLW5vcm1hbGl6ZWQiPjwvYT48aDM+Z3N0X3VyaV9pc19ub3JtYWxpemVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX2lzX25vcm1hbGl6ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGVzdHMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT4KLSB0byBzZWUgaWYgaXQgaXMgbm9ybWFsaXplZC4gQSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPgotIGlzIGNvbnNpZGVyZWQgdG8gYmUKLW5vcm1hbGl6ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1pcy1ub3JtYWxpemVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiB0byB0ZXN0IHRvIHNlZSBpZiBpdCBpcyBub3JtYWxpemVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktaXMtbm9ybWFsaXplZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRSVUUgaWYgdGhlIFVSSSBpcyBub3JtYWxpemVkIG9yIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1ub3JtYWxpemUiPjwvYT48aDM+Z3N0X3VyaV9ub3JtYWxpemXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfbm9ybWFsaXplICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPk5vcm1hbGl6YXRpb24gd2lsbCByZW1vdmUgZXh0cmEgcGF0aCBzZWdtZW50cyAoIi4iIGFuZCAiLi4iKSBmcm9tIHRoZSBVUkkuIEl0Ci13aWxsIGFsc28gY29udmVydCB0aGUgc2NoZW1lIGFuZCBob3N0IG5hbWUgdG8gbG93ZXIgY2FzZSBhbmQgYW55Ci1wZXJjZW50LWVuY29kZWQgdmFsdWVzIHRvIHVwcGVyY2FzZS48L3A+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiBvYmplY3QgbXVzdCBiZSB3cml0YWJsZS4gQ2hlY2sgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfdXJpX2lzX3dyaXRhYmxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXJpX2lzX3dyaXRhYmxlKCk8L2NvZGU+PC9hPiBvciB1c2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X3VyaV9tYWtlX3dyaXRhYmxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXJpX21ha2Vfd3JpdGFibGUoKTwvY29kZT48L2E+IGZpcnN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktbm9ybWFsaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gbm9ybWFsaXplLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLW5vcm1hbGl6ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRSVUUgaWYgdGhlIFVSSSB3YXMgbW9kaWZpZWQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LXNjaGVtZSI+PC9hPjxoMz5nc3RfdXJpX2dldF9zY2hlbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZ2V0X3NjaGVtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIHNjaGVtZSBuYW1lIGZyb20gdGhlIFVSSSBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgaXQgZG9lc24ndCBleGlzdC4KLUlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cmk8L2NvZGU+PC9lbT4KLSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdGhlbiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1zY2hlbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LXNjaGVtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBzY2hlbWUgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiBvYmplY3Qgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1zY2hlbWUiPjwvYT48aDM+Z3N0X3VyaV9zZXRfc2NoZW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX3NldF9zY2hlbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc2NoZW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCBvciB1bnNldCB0aGUgc2NoZW1lIGZvciB0aGUgVVJJLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXNjaGVtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gbW9kaWZ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zY2hlbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbmV3IHNjaGVtZSB0byBzZXQgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIHVuc2V0IHRoZSBzY2hlbWUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1zY2hlbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHNjaGVtZSB3YXMgc2V0L3Vuc2V0IHN1Y2Nlc3NmdWxseS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtdXNlcmluZm8iPjwvYT48aDM+Z3N0X3VyaV9nZXRfdXNlcmluZm/CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZ2V0X3VzZXJpbmZvICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdXNlcmluZm8gKHVzdWFsbHkgaW4gdGhlIGZvcm0gInVzZXJuYW1lOnBhc3N3b3JkIikgZnJvbSB0aGUgVVJJCi1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgaXQgZG9lc24ndCBleGlzdC4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0aGVuIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LXVzZXJpbmZvLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC11c2VyaW5mby5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSB1c2VyaW5mbyBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXVzZXJpbmZvIj48L2E+PGgzPmdzdF91cmlfc2V0X3VzZXJpbmZvwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX3NldF91c2VyaW5mbyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVzZXJpbmZvPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCBvciB1bnNldCB0aGUgdXNlciBpbmZvcm1hdGlvbiBmb3IgdGhlIFVSSS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC11c2VyaW5mby5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gbW9kaWZ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyaW5mbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBuZXcgdXNlci1pbmZvcm1hdGlvbiBzdHJpbmcgdG8gc2V0IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0byB1bnNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXVzZXJpbmZvLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB1c2VyIGluZm9ybWF0aW9uIHdhcyBzZXQvdW5zZXQgc3VjY2Vzc2Z1bGx5LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1ob3N0Ij48L2E+PGgzPmdzdF91cmlfZ2V0X2hvc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZ2V0X2hvc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBob3N0IG5hbWUgZnJvbSB0aGUgVVJJIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBpdCBkb2Vzbid0IGV4aXN0LgotSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0aGVuIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LWhvc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LWhvc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgaG9zdCBuYW1lIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtaG9zdCI+PC9hPjxoMz5nc3RfdXJpX3NldF9ob3N0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX3NldF9ob3N0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpob3N0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCBvciB1bnNldCB0aGUgaG9zdCBmb3IgdGhlIFVSSS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1ob3N0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiB0byBtb2RpZnkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmhvc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbmV3IGhvc3Qgc3RyaW5nIHRvIHNldCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdG8gdW5zZXQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1ob3N0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBob3N0IHdhcyBzZXQvdW5zZXQgc3VjY2Vzc2Z1bGx5LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wb3J0Ij48L2E+PGgzPmdzdF91cmlfZ2V0X3BvcnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF91cmlfZ2V0X3BvcnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBwb3J0IG51bWJlciBmcm9tIHRoZSBVUkkgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1OTy1QT1JUOkNBUFMiIHRpdGxlPSJHU1RfVVJJX05PX1BPUlQiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVVJJX05PX1BPUlQ8L2NvZGU+PC9hPiBpZiBpdCBkb2Vzbid0IGV4aXN0LgotSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnVyaTwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0aGVuIHJldHVybnMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1OTy1QT1JUOkNBUFMiIHRpdGxlPSJHU1RfVVJJX05PX1BPUlQiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVVJJX05PX1BPUlQ8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wb3J0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wb3J0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHBvcnQgbnVtYmVyIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0IG9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dTVC1VUkktTk8tUE9SVDpDQVBTIiB0aXRsZT0iR1NUX1VSSV9OT19QT1JUIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1VSSV9OT19QT1JUPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXBvcnQiPjwvYT48aDM+Z3N0X3VyaV9zZXRfcG9ydMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3VyaV9zZXRfcG9ydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBwb3J0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCBvciB1bnNldCB0aGUgcG9ydCBudW1iZXIgZm9yIHRoZSBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcG9ydC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gbW9kaWZ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3J0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5ldyBwb3J0IG51bWJlciB0byBzZXQgb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1OTy1QT1JUOkNBUFMiIHRpdGxlPSJHU1RfVVJJX05PX1BPUlQiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVVJJX05PX1BPUlQ8L2NvZGU+PC9hPiB0byB1bnNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXBvcnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBvcnQgbnVtYmVyIHdhcyBzZXQvdW5zZXQgc3VjY2Vzc2Z1bGx5LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wYXRoIj48L2E+PGgzPmdzdF91cmlfZ2V0X3BhdGjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZ2V0X3BhdGggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdCB0aGUgcGF0aCBzdHJpbmcgZnJvbSB0aGUgVVJJIG9iamVjdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wYXRoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHBhdGggZnJvbS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wYXRoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHBhdGggZnJvbSB0aGUgVVJJLiBPbmNlIGZpbmlzaGVkIHdpdGggdGhlCi1zdHJpbmcgc2hvdWxkIGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4nZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcGF0aCI+PC9hPjxoMz5nc3RfdXJpX3NldF9wYXRowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX3NldF9wYXRoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgb3IgdW5zZXRzIHRoZSBwYXRoIGluIHRoZSBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcGF0aC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gbW9kaWZ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXRoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5ldyBwYXRoIHRvIHNldCB3aXRoIHBhdGggc2VnbWVudHMgc2VwYXJhdGVkIGJ5ICcvJywgb3IgdXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgotdG8gdW5zZXQgdGhlIHBhdGguPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1wYXRoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYXRoIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wYXRoLXN0cmluZyI+PC9hPjxoMz5nc3RfdXJpX2dldF9wYXRoX3N0cmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9nZXRfcGF0aF9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RXh0cmFjdCB0aGUgcGF0aCBzdHJpbmcgZnJvbSB0aGUgVVJJIG9iamVjdCBhcyBhIHBlcmNlbnQgZW5jb2RlZCBVUkkgcGF0aC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wYXRoLXN0cmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBwYXRoIGZyb20uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtcGF0aC1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgcGF0aCBmcm9tIHRoZSBVUkkuIE9uY2UgZmluaXNoZWQgd2l0aCB0aGUKLXN0cmluZyBzaG91bGQgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPidkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1wYXRoLXN0cmluZyI+PC9hPjxoMz5nc3RfdXJpX3NldF9wYXRoX3N0cmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3VyaV9zZXRfcGF0aF9zdHJpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgb3IgdW5zZXRzIHRoZSBwYXRoIGluIHRoZSBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcGF0aC1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIG1vZGlmeS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGF0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBuZXcgcGVyY2VudCBlbmNvZGVkIHBhdGggdG8gc2V0IHdpdGggcGF0aCBzZWdtZW50cyBzZXBhcmF0ZWQgYnkKLScvJywgb3IgdXNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB0byB1bnNldCB0aGUgcGF0aC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXBhdGgtc3RyaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYXRoIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wYXRoLXNlZ21lbnRzIj48L2E+PGgzPmdzdF91cmlfZ2V0X3BhdGhfc2VnbWVudHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9nZXRfcGF0aF9zZWdtZW50cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBsaXN0IG9mIHBhdGggc2VnbWVudHMgZnJvbSB0aGUgVVJJLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LXBhdGgtc2VnbWVudHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHBhdGggZnJvbS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1wYXRoLXNlZ21lbnRzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIHBhdGggc2VnbWVudAotc3RyaW5ncyBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm8gcGF0aCBzZWdtZW50cyBhcmUgYXZhaWxhYmxlLiBGcmVlIHRoZSBsaXN0Ci13aGVuIG5vIGxvbmdlciBuZWVkZWQgd2l0aCBnX2xpc3RfZnJlZV9mdWxsKGxpc3QsIGdfZnJlZSkuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ2NoYXIqXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcGF0aC1zZWdtZW50cyI+PC9hPjxoMz5nc3RfdXJpX3NldF9wYXRoX3NlZ21lbnRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX3NldF9wYXRoX3NlZ21lbnRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKnBhdGhfc2VnbWVudHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVwbGFjZSB0aGUgcGF0aCBzZWdtZW50cyBsaXN0IGluIHRoZSBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcGF0aC1zZWdtZW50cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gbW9kaWZ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXRoX3NlZ21lbnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBuZXcKLXBhdGggbGlzdCB0byBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBnY2hhcipdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXBhdGgtc2VnbWVudHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBhdGggc2VnbWVudHMgd2VyZSBzZXQgc3VjY2Vzc2Z1bGx5LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWFwcGVuZC1wYXRoIj48L2E+PGgzPmdzdF91cmlfYXBwZW5kX3BhdGjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfYXBwZW5kX3BhdGggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnJlbGF0aXZlX3BhdGg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXBwZW5kIGEgcGF0aCBvbnRvIHRoZSBlbmQgb2YgdGhlIHBhdGggaW4gdGhlIFVSSS4gVGhlIHBhdGggaXMgbm90Ci1ub3JtYWxpemVkLCBjYWxsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1ub3JtYWxpemUiIHRpdGxlPSJnc3RfdXJpX25vcm1hbGl6ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3VyaV9ub3JtYWxpemUoKTwvY29kZT48L2E+IHRvIG5vcm1hbGl6ZSB0aGUgcGF0aC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWFwcGVuZC1wYXRoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiB0byBtb2RpZnkuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlbGF0aXZlX3BhdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5SZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHBhdGguPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWFwcGVuZC1wYXRoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYXRoIHdhcyBhcHBlbmRlZCBzdWNjZXNzZnVsbHkuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktYXBwZW5kLXBhdGgtc2VnbWVudCI+PC9hPjxoMz5nc3RfdXJpX2FwcGVuZF9wYXRoX3NlZ21lbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfYXBwZW5kX3BhdGhfc2VnbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwYXRoX3NlZ21lbnQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXBwZW5kIGEgc2luZ2xlIHBhdGggc2VnbWVudCBvbnRvIHRoZSBlbmQgb2YgdGhlIFVSSSBwYXRoLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktYXBwZW5kLXBhdGgtc2VnbWVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gbW9kaWZ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXRoX3NlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcGF0aCBzZWdtZW50IHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIFVSSSBwYXRoLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1hcHBlbmQtcGF0aC1zZWdtZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYXRoIHdhcyBhcHBlbmRlZCBzdWNjZXNzZnVsbHkuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LXF1ZXJ5LXN0cmluZyI+PC9hPjxoMz5nc3RfdXJpX2dldF9xdWVyeV9zdHJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBwZXJjZW50IGVuY29kZWQgVVJJIHF1ZXJ5IHN0cmluZyBmcm9tIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXJpPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtcXVlcnktc3RyaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBxdWVyeSBzdHJpbmcgZnJvbS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1xdWVyeS1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIHBlcmNlbnQgZW5jb2RlZCBxdWVyeSBzdHJpbmcuIFVzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4KLW5vIGxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXF1ZXJ5LXN0cmluZyI+PC9hPjxoMz5nc3RfdXJpX3NldF9xdWVyeV9zdHJpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpxdWVyeTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIG9yIHVuc2V0cyB0aGUgcXVlcnkgdGFibGUgaW4gdGhlIFVSSS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1xdWVyeS1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIG1vZGlmeS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbmV3IHBlcmNlbnQgZW5jb2RlZCBxdWVyeSBzdHJpbmcgdG8gdXNlIHRvIHBvcHVsYXRlIHRoZSBxdWVyeQotdGFibGUsIG9yIHVzZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gdG8gdW5zZXQgdGhlIHF1ZXJ5IHRhYmxlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcXVlcnktc3RyaW5nLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBxdWVyeSB0YWJsZSB3YXMgc2V0IHN1Y2Nlc3NmdWxseS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtcXVlcnktdGFibGUiPjwvYT48aDM+Z3N0X3VyaV9nZXRfcXVlcnlfdGFibGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1IYXNoLVRhYmxlcy5odG1sI0dIYXNoVGFibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0hhc2hUYWJsZTwvc3Bhbj48L2E+wqAqCi1nc3RfdXJpX2dldF9xdWVyeV90YWJsZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIHF1ZXJ5IHRhYmxlIGZyb20gdGhlIFVSSS4gS2V5cyBhbmQgdmFsdWVzIGluIHRoZSB0YWJsZSBhcmUgZnJlZWQKLXdpdGggZ19mcmVlIHdoZW4gdGhleSBhcmUgZGVsZXRlZC4gQSB2YWx1ZSBtYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIGluZGljYXRlIHRoYXQKLXRoZSBrZXkgc2hvdWxkIGFwcGVhciBpbiB0aGUgcXVlcnkgc3RyaW5nIGluIHRoZSBVUkksIGJ1dCBkb2VzIG5vdCBoYXZlIGEKLXZhbHVlLiBGcmVlIHRoZSByZXR1cm5lZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1IYXNoLVRhYmxlcy5odG1sI0dIYXNoVGFibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HSGFzaFRhYmxlPC9zcGFuPjwvYT4gd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1IYXNoLVRhYmxlcy5odG1sI2ctaGFzaC10YWJsZS11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj48R1RLRE9DTElOSyBIUkVGPSJnLWhhc2gtdGFibGUtdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19oYXNoX3RhYmxlX3VucmVmKCk8L2NvZGU+PC9hPjwvY29kZT48L0dUS0RPQ0xJTks+IHdoZW4gaXQgaXMKLW5vIGxvbmdlciByZXF1aXJlZC4gTW9kaWZ5aW5nIHRoaXMgaGFzaCB0YWJsZSB3aWxsIG1vZGlmeSB0aGUgcXVlcnkgaW4gdGhlCi1VUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtcXVlcnktdGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiB0byBnZXQgdGhlIHF1ZXJ5IHRhYmxlIGZyb20uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtcXVlcnktdGFibGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgcXVlcnkgaGFzaCB0YWJsZQotZnJvbSB0aGUgVVJJLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IGdjaGFyKiBnY2hhcipdPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1xdWVyeS10YWJsZSI+PC9hPjxoMz5nc3RfdXJpX3NldF9xdWVyeV90YWJsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3VyaV9zZXRfcXVlcnlfdGFibGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUhhc2gtVGFibGVzLmh0bWwjR0hhc2hUYWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdIYXNoVGFibGU8L3NwYW4+PC9hPiAqcXVlcnlfdGFibGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBxdWVyeSB0YWJsZSB0byB1c2UgaW4gdGhlIFVSSS4gVGhlIG9sZCB0YWJsZSBpcyB1bnJlZmVyZW5jZWQgYW5kIGEKLXJlZmVyZW5jZSB0byB0aGUgbmV3IG9uZSBpcyB1c2VkIGluc3RlYWQuIEEgdmFsdWUgaWYgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnlfdGFibGU8L2NvZGU+PC9lbT4KLQotd2lsbCByZW1vdmUgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHRoZSBVUkkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcXVlcnktdGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIG1vZGlmeS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnlfdGFibGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIG5ldwotcXVlcnkgdGFibGUgdG8gdXNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ2NoYXIqIGdjaGFyKl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcXVlcnktdGFibGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIG5ldyB0YWJsZSB3YXMgc3VjZXNzZnVsbHkgdXNlZCBmb3IgdGhlIHF1ZXJ5IHRhYmxlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1xdWVyeS12YWx1ZSI+PC9hPjxoMz5nc3RfdXJpX2dldF9xdWVyeV92YWx1ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9nZXRfcXVlcnlfdmFsdWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+ICp1cmk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpxdWVyeV9rZXk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeV9rZXk8L2NvZGU+PC9lbT4KLSBrZXkuIFdpbGwgcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUKLWtleSBoYXMgbm8gdmFsdWUgb3IgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgVVJJIHF1ZXJ5IHRhYmxlLiBCZWNhdXNlCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQgZm9yIGJvdGggbWlzc2luZyBrZXlzIGFuZCBrZXlzIHdpdGggbm8gdmFsdWUsIHlvdSBzaG91bGQKLXVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktcXVlcnktaGFzLWtleSIgdGl0bGU9ImdzdF91cmlfcXVlcnlfaGFzX2tlecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3VyaV9xdWVyeV9oYXNfa2V5KCk8L2NvZGU+PC9hPiB0byBkZXRlcm1pbmUgaWYgYSBrZXkgaXMgcHJlc2VudCBpbiB0aGUgVVJJCi1xdWVyeS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1xdWVyeS12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gZXhhbWluZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnlfa2V5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGtleSB0byBsb29rdXAuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1xdWVyeS12YWx1ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vdCBmb3VuZC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcXVlcnktdmFsdWUiPjwvYT48aDM+Z3N0X3VyaV9zZXRfcXVlcnlfdmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfc2V0X3F1ZXJ5X3ZhbHVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcXVlcnlfa2V5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcXVlcnlfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyBpbnNlcnRzIG9yIHJlcGxhY2VzIGEga2V5IGluIHRoZSBxdWVyeSB0YWJsZS4gQSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVlcnlfdmFsdWU8L2NvZGU+PC9lbT4KLSBvZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4KLWluZGljYXRlcyB0aGF0IHRoZSBrZXkgaGFzIG5vIGFzc29jaWF0ZWQgdmFsdWUsIGJ1dCB3aWxsIHN0aWxsIGJlIHByZXNlbnQgaW4KLXRoZSBxdWVyeSBzdHJpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtcXVlcnktdmFsdWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIG1vZGlmeS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnlfa2V5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSBrZXkgZm9yIHRoZSBxdWVyeSBlbnRyeS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5X3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSB2YWx1ZSBmb3IgdGhlIGtleS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LXF1ZXJ5LXZhbHVlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBxdWVyeSB0YWJsZSB3YXMgc3VjZXNzZnVsbHkgdXBkYXRlZC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1yZW1vdmUtcXVlcnkta2V5Ij48L2E+PGgzPmdzdF91cmlfcmVtb3ZlX3F1ZXJ5X2tlecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3VyaV9yZW1vdmVfcXVlcnlfa2V5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnF1ZXJ5X2tleTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgcXVlcnkgdGFibGUgYnkga2V5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktcmVtb3ZlLXF1ZXJ5LWtleS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gbW9kaWZ5LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeV9rZXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUga2V5IHRvIHJlbW92ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktcmVtb3ZlLXF1ZXJ5LWtleS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUga2V5IGV4aXN0ZWQgaW4gdGhlIHRhYmxlIGFuZCB3YXMgcmVtb3ZlZC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1xdWVyeS1oYXMta2V5Ij48L2E+PGgzPmdzdF91cmlfcXVlcnlfaGFzX2tlecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3VyaV9xdWVyeV9oYXNfa2V5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnF1ZXJ5X2tleTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVjayBpZiB0aGVyZSBpcyBhIHF1ZXJ5IHRhYmxlIGVudHJ5IGZvciB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXJ5X2tleTwvY29kZT48L2VtPgotIGtleS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXF1ZXJ5LWhhcy1rZXkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIGV4YW1pbmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXJ5X2tleTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSBrZXkgdG8gbG9va3VwLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1xdWVyeS1oYXMta2V5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWVyeV9rZXk8L2NvZGU+PC9lbT4KLWV4aXN0cyBpbiB0aGUgVVJJIHF1ZXJ5IHRhYmxlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1xdWVyeS1rZXlzIj48L2E+PGgzPmdzdF91cmlfZ2V0X3F1ZXJ5X2tleXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9nZXRfcXVlcnlfa2V5cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBsaXN0IG9mIHRoZSBxdWVyeSBrZXlzIGZyb20gdGhlIFVSSS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1xdWVyeS1rZXlzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gdG8gZXhhbWluZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWdldC1xdWVyeS1rZXlzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSBsaXN0IG9mIGtleXMgZnJvbQotdGhlIFVSSSBxdWVyeS4gRnJlZSB0aGUgbGlzdCB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNnLWxpc3QtZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2xpc3RfZnJlZSgpPC9jb2RlPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBjb250YWluZXIgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBjb250YWluZXI8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ2NoYXIqXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtZnJhZ21lbnQiPjwvYT48aDM+Z3N0X3VyaV9nZXRfZnJhZ21lbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZ2V0X2ZyYWdtZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHc3RVcmkiIHRpdGxlPSJHc3RVcmkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVcmk8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgZnJhZ21lbnQgbmFtZSBmcm9tIHRoZSBVUkkgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIGl0IGRvZXNuJ3QgZXhpc3QuCi1JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dXJpPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRoZW4gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtZnJhZ21lbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBUaGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gb2JqZWN0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LWZyYWdtZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGhvc3QgbmFtZSBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IG9iamVjdCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktc2V0LWZyYWdtZW50Ij48L2E+PGgzPmdzdF91cmlfc2V0X2ZyYWdtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX3NldF9mcmFnbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZyYWdtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGZyYWdtZW50IHN0cmluZyBpbiB0aGUgVVJJLiBVc2UgYSB2YWx1ZSBvZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyYWdtZW50PC9jb2RlPjwvZW0+Ci0gdG8KLXVuc2V0IHRoZSBmcmFnbWVudCBzdHJpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1zZXQtZnJhZ21lbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dzdFVyaSIgdGl0bGU9IkdzdFVyaSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVyaTwvc3Bhbj48L2E+IHRvIG1vZGlmeS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnJhZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIGZyYWdtZW50IHN0cmluZyB0byBzZXQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXNldC1mcmFnbWVudC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZnJhZ21lbnQgd2FzIHNldC91bnNldCBzdWNjZXNzZnVsbHkuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VXJpIj48L2E+PGgzPkdzdFVyaTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFVyaSBHc3RVcmk7PC9wcmU+Ci08cD5UaGlzIGlzIGEgcHJpdmF0ZSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgdmFyaW91cyBwYXJ0cyBvZiBhIHBhcnNlZCBVUkkuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZlMDMwOC4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NDkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFVyaUhhbmRsZXI6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIExpYnJhcnkiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJsaWJnc3RyZWFtZXIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdFVyaUhhbmRsZXI8L3NwYW4+PC9oMj4KLTxwPkdzdFVyaUhhbmRsZXIg4oCUIEludGVyZmFjZSB0byBlYXNlIFVSSSBoYW5kbGluZyBpbiBwbHVnaW5zLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1RdWFya3MuaHRtbCNHUXVhcmsiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1F1YXJrPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1lcnJvci1xdWFyayIgdGl0bGU9ImdzdF91cmlfZXJyb3JfcXVhcmvCoCgpIj5nc3RfdXJpX2Vycm9yX3F1YXJrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVRZUEUtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9VUklfVFlQRV9JU19WQUxJRCgpIj5HU1RfVVJJX1RZUEVfSVNfVkFMSUQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktcHJvdG9jb2wtaXMtdmFsaWQiIHRpdGxlPSJnc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkwqAoKSI+Z3N0X3VyaV9wcm90b2NvbF9pc192YWxpZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLXByb3RvY29sLWlzLXN1cHBvcnRlZCIgdGl0bGU9ImdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkwqAoKSI+Z3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1pcy12YWxpZCIgdGl0bGU9ImdzdF91cmlfaXNfdmFsaWTCoCgpIj5nc3RfdXJpX2lzX3ZhbGlkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFzLXByb3RvY29sIiB0aXRsZT0iZ3N0X3VyaV9oYXNfcHJvdG9jb2zCoCgpIj5nc3RfdXJpX2hhc19wcm90b2NvbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWdldC1wcm90b2NvbCIgdGl0bGU9ImdzdF91cmlfZ2V0X3Byb3RvY29swqAoKSI+Z3N0X3VyaV9nZXRfcHJvdG9jb2w8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1nZXQtbG9jYXRpb24iIHRpdGxlPSJnc3RfdXJpX2dldF9sb2NhdGlvbsKgKCkiPmdzdF91cmlfZ2V0X2xvY2F0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktY29uc3RydWN0IiB0aXRsZT0iZ3N0X3VyaV9jb25zdHJ1Y3TCoCgpIj5nc3RfdXJpX2NvbnN0cnVjdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtZmlsZW5hbWUtdG8tdXJpIiB0aXRsZT0iZ3N0X2ZpbGVuYW1lX3RvX3VyacKgKCkiPmdzdF9maWxlbmFtZV90b191cmk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaSIgdGl0bGU9ImdzdF9lbGVtZW50X21ha2VfZnJvbV91cmnCoCgpIj5nc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RVUklUeXBlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLWdldC11cmktdHlwZSIgdGl0bGU9ImdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGXCoCgpIj5nc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKiBjb25zdCAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktaGFuZGxlci1nZXQtcHJvdG9jb2xzIiB0aXRsZT0iZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHPCoCgpIj5nc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29sczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaSIgdGl0bGU9ImdzdF91cmlfaGFuZGxlcl9nZXRfdXJpwqAoKSI+Z3N0X3VyaV9oYW5kbGVyX2dldF91cmk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLXNldC11cmkiIHRpdGxlPSJnc3RfdXJpX2hhbmRsZXJfc2V0X3VyacKgKCkiPmdzdF91cmlfaGFuZGxlcl9zZXRfdXJpPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0VVJJSGFuZGxlciI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXItc3RydWN0IiB0aXRsZT0iR3N0VVJJSGFuZGxlciI+R3N0VVJJSGFuZGxlcjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlckludGVyZmFjZSIgdGl0bGU9InN0cnVjdCBHc3RVUklIYW5kbGVySW50ZXJmYWNlIj5Hc3RVUklIYW5kbGVySW50ZXJmYWNlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+R3N0VVJJVHlwZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUVycm9yIiB0aXRsZT0iZW51bSBHc3RVUklFcnJvciI+R3N0VVJJRXJyb3I8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR1NULVVSSS1OTy1QT1JUOkNBUFMiIHRpdGxlPSJHU1RfVVJJX05PX1BPUlQiPkdTVF9VUklfTk9fUE9SVDwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3QvdW5zdGFibGUvR1R5cGVNb2R1bGUuaHRtbCI+R0ludGVyZmFjZTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RVUklIYW5kbGVyCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4gaXMgYW4gaW50ZXJmYWNlIHRoYXQgaXMgaW1wbGVtZW50ZWQgYnkgU291cmNlIGFuZCBTaW5rCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byB1bmlmeSBoYW5kbGluZyBvZiBVUkkuPC9wPgotPHA+QW4gYXBwbGljYXRpb24gY2FuIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBxdWlja2x5IGdldCBhbiBlbGVtZW50Ci10aGF0IGhhbmRsZXMgdGhlIGdpdmVuIFVSSSBmb3IgcmVhZGluZyBvciB3cml0aW5nCi0oPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaSIgdGl0bGU9ImdzdF9lbGVtZW50X21ha2VfZnJvbV91cmnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkoKTwvY29kZT48L2E+KS48L3A+Ci08cD5Tb3VyY2UgYW5kIFNpbmsgcGx1Z2lucyBzaG91bGQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIHdoZW4gcG9zc2libGUuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1lcnJvci1xdWFyayI+PC9hPjxoMz5nc3RfdXJpX2Vycm9yX3F1YXJrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdRdWFyazwvc3Bhbj48L2E+Ci1nc3RfdXJpX2Vycm9yX3F1YXJrICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVVSSS1UWVBFLUlTLVZBTElEOkNBUFMiPjwvYT48aDM+R1NUX1VSSV9UWVBFX0lTX1ZBTElEKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1VSSV9UWVBFX0lTX1ZBTElEKHR5cGUpICgodHlwZSkgPT0gR1NUX1VSSV9TUkMgfHwgKHR5cGUpID09IEdTVF9VUklfU0lOSykKLTwvcHJlPgotPHA+VGVzdHMgaWYgdGhlIHR5cGUgZGlyZWN0aW9uIGlzIHZhbGlkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1VUkktVFlQRS1JUy1WQUxJRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSVR5cGU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1wcm90b2NvbC1pcy12YWxpZCI+PC9hPjxoMz5nc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXJpX3Byb3RvY29sX2lzX3ZhbGlkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3RvY29sPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRlc3RzIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCBpZGVudGlmaWVyLiBQcm90b2NvbHMKLW11c3QgY29uc2lzdCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgJysnLCAnLScgYW5kICcuJyBhbmQgbXVzdAotc3RhcnQgd2l0aCBhIGFscGhhYmV0aWMgY2hhcmFjdGVyLiBTZWUgUkZDIDM5ODYgU2VjdGlvbiAzLjEuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1wcm90b2NvbC1pcy12YWxpZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvdG9jb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHN0cmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktcHJvdG9jb2wtaXMtdmFsaWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIGlkZW50aWZpZXIsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1wcm90b2NvbC1pcy1zdXBwb3J0ZWQiPjwvYT48aDM+Z3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSVR5cGU8L3NwYW4+PC9hPiB0eXBlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvdG9jb2w8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIGFuIGVsZW1lbnQgZXhpc3RzIHRoYXQgc3VwcG9ydHMgdGhlIGdpdmVuIFVSSSBwcm90b2NvbC4gTm90ZQotdGhhdCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBpbXBseSB0aGF0IGEgc3Vic2VxdWVudCBjYWxsIHRvCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtZWxlbWVudC1tYWtlLWZyb20tdXJpIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyacKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSgpPC9jb2RlPjwvYT4gaXMgZ3VhcmFudGVlZCB0byB3b3JrLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktcHJvdG9jb2wtaXMtc3VwcG9ydGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5XaGV0aGVyIHRvIGNoZWNrIGZvciBhIHNvdXJjZSBvciBhIHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvdG9jb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5Qcm90b2NvbCB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciAoZS5nLiAiaHR0cCIgb3IgInNtYiIpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLXByb3RvY29sLWlzLXN1cHBvcnRlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWlzLXZhbGlkIj48L2E+PGgzPmdzdF91cmlfaXNfdmFsaWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfaXNfdmFsaWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRlc3RzIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBVUkkgaWRlbnRpZmllci4gVVJJcyBzdGFydCB3aXRoIGEgdmFsaWQKLXNjaGVtZSBmb2xsb3dlZCBieSAiOiIgYW5kIG1heWJlIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBsb2NhdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWlzLXZhbGlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIFVSSSBzdHJpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWlzLXZhbGlkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBVUkk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1oYXMtcHJvdG9jb2wiPjwvYT48aDM+Z3N0X3VyaV9oYXNfcHJvdG9jb2zCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfaGFzX3Byb3RvY29sICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnByb3RvY29sPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgcHJvdG9jb2wgb2YgYSBnaXZlbiB2YWxpZCBVUkkgbWF0Y2hlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvdG9jb2w8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWhhcy1wcm90b2NvbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51cmk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIFVSSSBzdHJpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvdG9jb2w8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHByb3RvY29sIHN0cmluZyAoZS5nLiAiaHR0cCIpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWhhcy1wcm90b2NvbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcHJvdG9jb2wgbWF0Y2hlcy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtcHJvdG9jb2wiPjwvYT48aDM+Z3N0X3VyaV9nZXRfcHJvdG9jb2zCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZ2V0X3Byb3RvY29sICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0cyB0aGUgcHJvdG9jb2wgb3V0IG9mIGEgZ2l2ZW4gdmFsaWQgVVJJLiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUKLWZyZWVkIHVzaW5nIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtcHJvdG9jb2wucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgVVJJIHN0cmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LXByb3RvY29sLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHByb3RvY29sIGZvciB0aGlzIFVSSS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtbG9jYXRpb24iPjwvYT48aDM+Z3N0X3VyaV9nZXRfbG9jYXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLWdzdF91cmlfZ2V0X2xvY2F0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5FeHRyYWN0cyB0aGUgbG9jYXRpb24gb3V0IG9mIGEgZ2l2ZW4gdmFsaWQgVVJJLCBpZS4gdGhlIHByb3RvY29sIGFuZCAiOi8vIgotYXJlIHN0cmlwcGVkIGZyb20gdGhlIFVSSSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbG9jYXRpb24gcmV0dXJuZWQgaW5jbHVkZXMKLXRoZSBob3N0bmFtZSBpZiBvbmUgaXMgc3BlY2lmaWVkLiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgdXNpbmcKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1nZXQtbG9jYXRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgVVJJIHN0cmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktZ2V0LWxvY2F0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGxvY2F0aW9uIGZvciB0aGlzIFVSSS4gUmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlCi1VUkkgaXNuJ3QgdmFsaWQuIElmIHRoZSBVUkkgZG9lcyBub3QgY29udGFpbiBhIGxvY2F0aW9uLCBhbiBlbXB0eQotc3RyaW5nIGlzIHJldHVybmVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWNvbnN0cnVjdCI+PC9hPjxoMz5nc3RfdXJpX2NvbnN0cnVjdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3VyaV9jb25zdHJ1Y3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvdG9jb2w8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpsb2NhdGlvbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db25zdHJ1Y3RzIGEgVVJJIGZvciBhIGdpdmVuIHZhbGlkIHByb3RvY29sIGFuZCBsb2NhdGlvbi48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnX2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWNvbnN0cnVjdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm90b2NvbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlByb3RvY29sIGZvciBVUkk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bG9jYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gTG9jYXRpb24gZm9yIFVSSS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWNvbnN0cnVjdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IHN0cmluZyBmb3IgdGhpcyBVUkkuIFJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZQotZ2l2ZW4gVVJJIHByb3RvY29sIGlzIG5vdCB2YWxpZCwgb3IgdGhlIGdpdmVuIGxvY2F0aW9uIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWZpbGVuYW1lLXRvLXVyaSI+PC9hPjxoMz5nc3RfZmlsZW5hbWVfdG9fdXJpwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfZmlsZW5hbWVfdG9fdXJpICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZpbGVuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+ICoqZXJyb3I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2ltaWxhciB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1VUkktRnVuY3Rpb25zLmh0bWwjZy1maWxlbmFtZS10by11cmkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19maWxlbmFtZV90b191cmkoKTwvY29kZT48L2E+LCBidXQgYXR0ZW1wdHMgdG8gaGFuZGxlIHJlbGF0aXZlIGZpbGUgcGF0aHMKLWFzIHdlbGwuIEJlZm9yZSBjb252ZXJ0aW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maWxlbmFtZTwvY29kZT48L2VtPgotIGludG8gYW4gVVJJLCBpdCB3aWxsIGJlIHByZWZpeGVkIGJ5Ci10aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpZiBpdCBpcyBhIHJlbGF0aXZlIHBhdGgsIGFuZCB0aGVuIHRoZSBwYXRoCi13aWxsIGJlIGNhbm9uaWNhbGlzZWQgc28gdGhhdCBpdCBkb2Vzbid0IGNvbnRhaW4gYW55ICcuLycgb3IgJy4uLycgc2VnbWVudHMuPC9wPgotPHA+T24gV2luZG93cyA8c3BhbiBjbGFzcz0idHlwZSI+ZmlsZW5hbWU8L3NwYW4+IHNob3VsZCBiZSBpbiBVVEYtOCBlbmNvZGluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZmlsZW5hbWUtdG8tdXJpLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpbGVuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWJzb2x1dGUgb3IgcmVsYXRpdmUgZmlsZSBuYW1lIHBhdGg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wb2ludGVyIHRvIGVycm9yLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1maWxlbmFtZS10by11cmkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBuZXdseS1hbGxvY2F0ZWQgVVJJIHN0cmluZywgb3IgTlVMTCBvbiBlcnJvci4gVGhlIGNhbGxlciBtdXN0Ci1mcmVlIHRoZSBVUkkgc3RyaW5nIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1lbGVtZW50LW1ha2UtZnJvbS11cmkiPjwvYT48aDM+Z3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyacKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSVR5cGUiIHRpdGxlPSJlbnVtIEdzdFVSSVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdXJpPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50bmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycm9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYW4gZWxlbWVudCBmb3IgaGFuZGxpbmcgdGhlIGdpdmVuIFVSSS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZWxlbWVudC1tYWtlLWZyb20tdXJpLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5XaGV0aGVyIHRvIGNyZWF0ZSBhIHNvdXJjZSBvciBhIHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXJpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VVJJIHRvIGNyZWF0ZSBhbiBlbGVtZW50IGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBOYW1lIG9mIGNyZWF0ZWQgZWxlbWVudCwgY2FuIGJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRkcmVzcyB3aGVyZSB0byBzdG9yZSBlcnJvciBpbmZvcm1hdGlvbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IGVsZW1lbnQgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vbmUgY291bGQgYmUgY3JlYXRlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iQWxpYXMgZm9yIHRyYW5zZmVyIG5vbmUsIHVzZWQgZm9yIG9iamVjdHMgd2l0aCBmbG9hdGluZyByZWZzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZsb2F0aW5nPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaS10eXBlIj48L2E+PGgzPmdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklUeXBlIiB0aXRsZT0iZW51bSBHc3RVUklUeXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFVSSVR5cGU8L3NwYW4+PC9hPgotZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4gKmhhbmRsZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdHlwZSBvZiB0aGUgZ2l2ZW4gVVJJIGhhbmRsZXI8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWhhbmRsZXItZ2V0LXVyaS10eXBlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oYW5kbGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktaGFuZGxlci1nZXQtdXJpLXR5cGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJVHlwZSIgdGl0bGU9ImVudW0gR3N0VVJJVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSVR5cGU8L3NwYW4+PC9hPiBvZiB0aGUgVVJJIGhhbmRsZXIuCi1SZXR1cm5zIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dTVC1VUkktVU5LTk9XTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1VSSV9VTktOT1dOPC9zcGFuPjwvYT4gaWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVyPC9jb2RlPjwvZW0+Ci1pc24ndCBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktaGFuZGxlci1nZXQtcHJvdG9jb2xzIj48L2E+PGgzPmdzdF91cmlfaGFuZGxlcl9nZXRfcHJvdG9jb2xzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqIGNvbnN0ICoKLWdzdF91cmlfaGFuZGxlcl9nZXRfcHJvdG9jb2xzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPiAqaGFuZGxlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBsaXN0IG9mIHByb3RvY29scyBzdXBwb3J0ZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhhbmRsZXI8L2NvZGU+PC9lbT4KLS4gVGhpcyBsaXN0IG1heSBub3QgYmUKLW1vZGlmaWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktaGFuZGxlci1nZXQtcHJvdG9jb2xzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oYW5kbGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktaGFuZGxlci1nZXQtcHJvdG9jb2xzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlCi1zdXBwb3J0ZWQgcHJvdG9jb2xzLiAgUmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVyPC9jb2RlPjwvZW0+Ci1pc24ndAotaW1wbGVtZW50ZWQgcHJvcGVybHksIG9yIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlcjwvY29kZT48L2VtPgotZG9lc24ndCBzdXBwb3J0IGFueQotcHJvdG9jb2xzLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IHV0ZjhdWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11cmktaGFuZGxlci1nZXQtdXJpIj48L2E+PGgzPmdzdF91cmlfaGFuZGxlcl9nZXRfdXJpwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi1nc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4gKmhhbmRsZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgY3VycmVudGx5IGhhbmRsZWQgVVJJLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11cmktaGFuZGxlci1nZXQtdXJpLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oYW5kbGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXVyaS1oYW5kbGVyLWdldC11cmkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgVVJJIGN1cnJlbnRseSBoYW5kbGVkIGJ5Ci10aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhhbmRsZXI8L2NvZGU+PC9lbT4KLS4gIFJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZXJlIGFyZSBubyBVUkkgY3VycmVudGx5Ci1oYW5kbGVkLiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gbm8KLWxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXVyaS1oYW5kbGVyLXNldC11cmkiPjwvYT48aDM+Z3N0X3VyaV9oYW5kbGVyX3NldF91cmnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91cmlfaGFuZGxlcl9zZXRfdXJpICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFVSSUhhbmRsZXI8L3NwYW4+PC9hPiAqaGFuZGxlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnVyaTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmllcyB0byBzZXQgdGhlIFVSSSBvZiB0aGUgZ2l2ZW4gaGFuZGxlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWhhbmRsZXItc2V0LXVyaS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oYW5kbGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VVJJSGFuZGxlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVyaTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlVSSSB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXJyb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRkcmVzcyB3aGVyZSB0byBzdG9yZSBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+IGluIGNhc2Ugb2YKLWFuIGVycm9yLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXJpLWhhbmRsZXItc2V0LXVyaS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgVVJJIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LCBlbHNlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RVUklIYW5kbGVyLXN0cnVjdCI+PC9hPjxoMz5Hc3RVUklIYW5kbGVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0VVJJSGFuZGxlciBHc3RVUklIYW5kbGVyOzwvcHJlPgotPHA+T3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VVJJSGFuZGxlckludGVyZmFjZSI+PC9hPjxoMz5zdHJ1Y3QgR3N0VVJJSGFuZGxlckludGVyZmFjZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgewotICBHVHlwZUludGVyZmFjZSBwYXJlbnQ7Ci0KLSAgLyogdnRhYmxlICovCi0gIC8qIHF1ZXJ5aW5nIGNhcGFiaWxpdGllcyAqLwotICBHc3RVUklUeXBlICAgICAgICAgICAgICgqIGdldF90eXBlKSAgICAgICAgICAgKEdUeXBlIHR5cGUpOwotICBjb25zdCBnY2hhciAqIGNvbnN0ICogICgqIGdldF9wcm90b2NvbHMpICAgICAgKEdUeXBlIHR5cGUpOwotCi0gIC8qIHVzaW5nIHRoZSBpbnRlcmZhY2UgKi8KLSAgZ2NoYXIgKiAgICAgICAgICAgICAgICAoKiBnZXRfdXJpKSAgICAgICAgICAgIChHc3RVUklIYW5kbGVyICogaGFuZGxlcik7Ci0gIGdib29sZWFuICAgICAgICAgICAgICAgKCogc2V0X3VyaSkgICAgICAgICAgICAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAqIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgKiogZXJyb3IpOwotfTsKLTwvcHJlPgotPHA+QW55IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHVzaW5nIHRoaXMgaW50ZXJmYWNlIHNob3VsZCBpbXBsZW1lbnQgdGhlc2UgbWV0aG9kcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RVUklIYW5kbGVySW50ZXJmYWNlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGVJbnRlcmZhY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZUludGVyZmFjZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RVUklIYW5kbGVySW50ZXJmYWNlLnBhcmVudCI+PC9hPnBhcmVudDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHBhcmVudCBpbnRlcmZhY2UgdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFVSSUhhbmRsZXJJbnRlcmZhY2UuZ2V0LXR5cGUiPjwvYT5nZXRfdHlwZTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+TWV0aG9kIHRvIHRlbGwgd2hldGhlciB0aGUgZWxlbWVudCBoYW5kbGVzIHNvdXJjZSBvciBzaW5rIFVSSS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RVUklIYW5kbGVySW50ZXJmYWNlLmdldC1wcm90b2NvbHMiPjwvYT5nZXRfcHJvdG9jb2xzPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5NZXRob2QgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIHByb3RvY29scyBoYW5kbGVkIGJ5IHRoZSBlbGVtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFVSSUhhbmRsZXJJbnRlcmZhY2UuZ2V0LXVyaSI+PC9hPmdldF91cmk8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk1ldGhvZCB0byByZXR1cm4gdGhlIFVSSSBjdXJyZW50bHkgaGFuZGxlZCBieSB0aGUgZWxlbWVudC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RVUklIYW5kbGVySW50ZXJmYWNlLnNldC11cmkiPjwvYT5zZXRfdXJpPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5NZXRob2QgdG8gc2V0IGEgbmV3IFVSSS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVSSVR5cGUiPjwvYT48aDM+ZW51bSBHc3RVUklUeXBlPC9oMz4KLTxwPlRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgVVJJIGRpcmVjdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RVUklUeXBlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVVSSS1VTktOT1dOOkNBUFMiPjwvYT5HU1RfVVJJX1VOS05PV048L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGhlIFVSSSBkaXJlY3Rpb24gaXMgdW5rbm93bjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVVJJLVNJTks6Q0FQUyI+PC9hPkdTVF9VUklfU0lOSzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgVVJJIGlzIGEgY29uc3VtZXIuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1VUkktU1JDOkNBUFMiPjwvYT5HU1RfVVJJX1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGUgVVJJIGlzIGEgcHJvZHVjZXIuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RVUklFcnJvciI+PC9hPjxoMz5lbnVtIEdzdFVSSUVycm9yPC9oMz4KLTxwPkRpZmZlcmVudCBVUkktcmVsYXRlZCBlcnJvcnMgdGhhdCBjYW4gb2NjdXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VVJJRXJyb3IubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVVJJLUVSUk9SLVVOU1VQUE9SVEVELVBST1RPQ09MOkNBUFMiPjwvYT5HU1RfVVJJX0VSUk9SX1VOU1VQUE9SVEVEX1BST1RPQ09MPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZSBwcm90b2NvbCBpcyBub3Qgc3VwcG9ydGVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1VUkktRVJST1ItQkFELVVSSTpDQVBTIj48L2E+R1NUX1VSSV9FUlJPUl9CQURfVVJJPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgVVJJPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1VUkktRVJST1ItQkFELVNUQVRFOkNBUFMiPjwvYT5HU1RfVVJJX0VSUk9SX0JBRF9TVEFURTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Db3VsZCBub3Qgc2V0IG9yIGNoYW5nZSB0aGUgVVJJIGJlY2F1c2UgdGhlCi0gICAgVVJJIGhhbmRsZXIgd2FzIGluIGEgc3RhdGUgd2hlcmUgdGhhdCBpcyBub3QgcG9zc2libGUgb3Igbm90IHBlcm1pdHRlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVVJJLUVSUk9SLUJBRC1SRUZFUkVOQ0U6Q0FQUyI+PC9hPkdTVF9VUklfRVJST1JfQkFEX1JFRkVSRU5DRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5UaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIGVudGl0eSB0aGF0Ci0gICAgdGhlIFVSSSByZWZlcmVuY2VzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVVJJLU5PLVBPUlQ6Q0FQUyI+PC9hPjxoMz5HU1RfVVJJX05PX1BPUlQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1VSSV9OT19QT1JUIDAKLTwvcHJlPgotPHA+VmFsdWUgZm9yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VXJpPC9zcGFuPjwvYT4ucG9ydCB0byBpbmRpY2F0ZSBubyBwb3J0IG51bWJlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMmY0ZDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VXRpbHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ODcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFV0aWxzOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RVdGlscy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFV0aWxzIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFV0aWxzLnRvcF9vZl9wYWdlIj48L2E+R3N0VXRpbHM8L3NwYW4+PC9oMj4KLTxwPkdzdFV0aWxzIOKAlCBWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVdGlscy5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtQ0FMTC1QQVJFTlQ6Q0FQUyIgdGl0bGU9IkdTVF9DQUxMX1BBUkVOVCgpIj5HU1RfQ0FMTF9QQVJFTlQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULUNBTEwtUEFSRU5ULVdJVEgtREVGQVVMVDpDQVBTIiB0aXRsZT0iR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVCgpIj5HU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQ4OkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UOCgpIj5HU1RfUkVBRF9VSU5UODwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMTYtTEU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQxNl9MRSgpIj5HU1RfUkVBRF9VSU5UMTZfTEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDE2LUJFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UMTZfQkUoKSI+R1NUX1JFQURfVUlOVDE2X0JFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQyNC1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDI0X0xFKCkiPkdTVF9SRUFEX1VJTlQyNF9MRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMjQtQkU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQyNF9CRSgpIj5HU1RfUkVBRF9VSU5UMjRfQkU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDMyLUxFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UMzJfTEUoKSI+R1NUX1JFQURfVUlOVDMyX0xFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQzMi1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDMyX0JFKCkiPkdTVF9SRUFEX1VJTlQzMl9CRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UNjQtTEU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQ2NF9MRSgpIj5HU1RfUkVBRF9VSU5UNjRfTEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDY0LUJFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UNjRfQkUoKSI+R1NUX1JFQURfVUlOVDY0X0JFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1GTE9BVC1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfRkxPQVRfTEXCoCgpIj5HU1RfUkVBRF9GTE9BVF9MRTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1GTE9BVC1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfRkxPQVRfQkXCoCgpIj5HU1RfUkVBRF9GTE9BVF9CRTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELURPVUJMRS1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfRE9VQkxFX0xFwqAoKSI+R1NUX1JFQURfRE9VQkxFX0xFPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtRE9VQkxFLUJFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9ET1VCTEVfQkXCoCgpIj5HU1RfUkVBRF9ET1VCTEVfQkU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDg6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UOCgpIj5HU1RfV1JJVEVfVUlOVDg8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQxNi1MRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQxNl9MRSgpIj5HU1RfV1JJVEVfVUlOVDE2X0xFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMTYtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UMTZfQkUoKSI+R1NUX1dSSVRFX1VJTlQxNl9CRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDI0LUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDI0X0xFKCkiPkdTVF9XUklURV9VSU5UMjRfTEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQyNC1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQyNF9CRSgpIj5HU1RfV1JJVEVfVUlOVDI0X0JFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMzItTEU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UMzJfTEUoKSI+R1NUX1dSSVRFX1VJTlQzMl9MRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDMyLUJFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDMyX0JFKCkiPkdTVF9XUklURV9VSU5UMzJfQkU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQ2NC1MRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQ2NF9MRSgpIj5HU1RfV1JJVEVfVUlOVDY0X0xFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UNjQtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UNjRfQkUoKSI+R1NUX1dSSVRFX1VJTlQ2NF9CRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRkxPQVQtTEU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9GTE9BVF9MRcKgKCkiPkdTVF9XUklURV9GTE9BVF9MRTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1GTE9BVC1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX0ZMT0FUX0JFwqAoKSI+R1NUX1dSSVRFX0ZMT0FUX0JFPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLURPVUJMRS1MRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX0RPVUJMRV9MRcKgKCkiPkdTVF9XUklURV9ET1VCTEVfTEU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtRE9VQkxFLUJFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfRE9VQkxFX0JFwqAoKSI+R1NUX1dSSVRFX0RPVUJMRV9CRTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0yOkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfVVBfMigpIj5HU1RfUk9VTkRfVVBfMjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtNDpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQXzQoKSI+R1NUX1JPVU5EX1VQXzQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTg6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF84KCkiPkdTVF9ST1VORF9VUF84PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0xNjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQXzE2KCkiPkdTVF9ST1VORF9VUF8xNjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtMzI6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF8zMigpIj5HU1RfUk9VTkRfVVBfMzI8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTY0OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfVVBfNjQoKSI+R1NUX1JPVU5EX1VQXzY0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0xMjg6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF8xMjgoKSI+R1NUX1JPVU5EX1VQXzEyODwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtTjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQX04oKSI+R1NUX1JPVU5EX1VQX048L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX0RPV05fMigpIj5HU1RfUk9VTkRfRE9XTl8yPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTQ6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzQoKSI+R1NUX1JPVU5EX0RPV05fNDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi04OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl84KCkiPkdTVF9ST1VORF9ET1dOXzg8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMTY6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzE2KCkiPkdTVF9ST1VORF9ET1dOXzE2PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTMyOkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl8zMigpIj5HU1RfUk9VTkRfRE9XTl8zMjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi02NDpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX0RPV05fNjQoKSI+R1NUX1JPVU5EX0RPV05fNjQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMTI4OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl8xMjgoKSI+R1NUX1JPVU5EX0RPV05fMTI4PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLU46Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOX04oKSI+R1NUX1JPVU5EX0RPV05fTjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLUZST00tQkU6Q0FQUyIgdGl0bGU9IkdET1VCTEVfRlJPTV9CRSgpIj5HRE9VQkxFX0ZST01fQkU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1GUk9NLUxFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX0ZST01fTEUoKSI+R0RPVUJMRV9GUk9NX0xFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtU1dBUC1MRS1CRTpDQVBTIiB0aXRsZT0iR0RPVUJMRV9TV0FQX0xFX0JFwqAoKSI+R0RPVUJMRV9TV0FQX0xFX0JFPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1UTy1CRTpDQVBTIiB0aXRsZT0iR0RPVUJMRV9UT19CRSgpIj5HRE9VQkxFX1RPX0JFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtVE8tTEU6Q0FQUyIgdGl0bGU9IkdET1VCTEVfVE9fTEUoKSI+R0RPVUJMRV9UT19MRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtRlJPTS1CRTpDQVBTIiB0aXRsZT0iR0ZMT0FUX0ZST01fQkUoKSI+R0ZMT0FUX0ZST01fQkU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULUZST00tTEU6Q0FQUyIgdGl0bGU9IkdGTE9BVF9GUk9NX0xFKCkiPkdGTE9BVF9GUk9NX0xFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtU1dBUC1MRS1CRTpDQVBTIiB0aXRsZT0iR0ZMT0FUX1NXQVBfTEVfQkXCoCgpIj5HRkxPQVRfU1dBUF9MRV9CRTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1UTy1CRTpDQVBTIiB0aXRsZT0iR0ZMT0FUX1RPX0JFKCkiPkdGTE9BVF9UT19CRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtVE8tTEU6Q0FQUyIgdGl0bGU9IkdGTE9BVF9UT19MRSgpIj5HRkxPQVRfVE9fTEU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWd1aW50NjQtdG8tZ2RvdWJsZSIgdGl0bGU9ImdzdF9ndWludDY0X3RvX2dkb3VibGUoKSI+Z3N0X2d1aW50NjRfdG9fZ2RvdWJsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZ2RvdWJsZS10by1ndWludDY0IiB0aXRsZT0iZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCgpIj5nc3RfZ2RvdWJsZV90b19ndWludDY0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWR1bXAtbWVtIiB0aXRsZT0iZ3N0X3V0aWxfZHVtcF9tZW3CoCgpIj5nc3RfdXRpbF9kdW1wX21lbTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZcKgKCkiPmdzdF91dGlsX3VpbnQ2NF9zY2FsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZMKgKCkiPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWzCoCgpIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50wqAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtcm91bmQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kwqAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbMKgKCkiPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWdyZWF0ZXN0LWNvbW1vbi1kaXZpc29yIiB0aXRsZT0iZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3LCoCgpIj5nc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1ncmVhdGVzdC1jb21tb24tZGl2aXNvci1pbnQ2NCIgdGl0bGU9ImdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yX2ludDY0wqAoKSI+Z3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3JfaW50NjQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi10by1kb3VibGUiIHRpdGxlPSJnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGXCoCgpIj5nc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1kb3VibGUtdG8tZnJhY3Rpb24iIHRpdGxlPSJnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb27CoCgpIj5nc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLW11bHRpcGx5IiB0aXRsZT0iZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHnCoCgpIj5nc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZnJhY3Rpb24tYWRkIiB0aXRsZT0iZ3N0X3V0aWxfZnJhY3Rpb25fYWRkwqAoKSI+Z3N0X3V0aWxfZnJhY3Rpb25fYWRkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZnJhY3Rpb24tY29tcGFyZSIgdGl0bGU9ImdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmXCoCgpIj5nc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2VxbnVtLW5leHQiIHRpdGxlPSJnc3RfdXRpbF9zZXFudW1fbmV4dMKgKCkiPmdzdF91dGlsX3NlcW51bV9uZXh0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNlcW51bS1jb21wYXJlIiB0aXRsZT0iZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmXCoCgpIj5nc3RfdXRpbF9zZXFudW1fY29tcGFyZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZ3JvdXAtaWQtbmV4dCIgdGl0bGU9ImdzdF91dGlsX2dyb3VwX2lkX25leHTCoCgpIj5nc3RfdXRpbF9ncm91cF9pZF9uZXh0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2V0LW9iamVjdC1hcmciIHRpdGxlPSJnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZ8KgKCkiPmdzdF91dGlsX3NldF9vYmplY3RfYXJnPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2V0LXZhbHVlLWZyb20tc3RyaW5nIiB0aXRsZT0iZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nwqAoKSI+Z3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1nZXQtdGltZXN0YW1wIiB0aXRsZT0iZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcMKgKCkiPmdzdF91dGlsX2dldF90aW1lc3RhbXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWFycmF5LWJpbmFyeS1zZWFyY2giIHRpdGxlPSJnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNowqAoKSI+Z3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVdGlscy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR3N0U2VhcmNoTW9kZSIgdGl0bGU9ImVudW0gR3N0U2VhcmNoTW9kZSI+R3N0U2VhcmNoTW9kZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFV0aWxzLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVdGlscy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVdGlscy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNBTEwtUEFSRU5UOkNBUFMiPjwvYT48aDM+R1NUX0NBTExfUEFSRU5UKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0NBTExfUEFSRU5UKHBhcmVudF9jbGFzc19jYXN0LCBuYW1lLCBhcmdzKTwvcHJlPgotPHA+SnVzdCBjYWxsIHRoZSBwYXJlbnQgaGFuZGxlci4gIFRoaXMgYXNzdW1lcyB0aGF0IHRoZXJlIGlzIGEgdmFyaWFibGUKLW5hbWVkIHBhcmVudF9jbGFzcyB0aGF0IHBvaW50cyB0byB0aGUgKGR1aCEpIHBhcmVudCBjbGFzcy4gIE5vdGUgdGhhdAotdGhpcyBtYWNybyBpcyBub3QgdG8gYmUgdXNlZCB3aXRoIHRoaW5ncyB0aGF0IHJldHVybiBzb21ldGhpbmcsIHVzZQotdGhlIF9XSVRIX0RFRkFVTFQgdmVyc2lvbiBmb3IgdGhhdDwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DQUxMLVBBUkVOVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnRfY2xhc3NfY2FzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBjbGFzcyBjYXN0IG1hY3JvIGZvciB0aGUgcGFyZW50IHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFyZ3VtZW50cyBlbmNsb3NlZCBpbiAnKCApJzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0FMTC1QQVJFTlQtV0lUSC1ERUZBVUxUOkNBUFMiPjwvYT48aDM+R1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQocGFyZW50X2NsYXNzX2Nhc3QsIG5hbWUsIGFyZ3MsIGRlZl9yZXR1cm4pPC9wcmU+Ci08cD5TYW1lIGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtQ0FMTC1QQVJFTlQ6Q0FQUyIgdGl0bGU9IkdTVF9DQUxMX1BBUkVOVCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdTVF9DQUxMX1BBUkVOVCgpPC9jb2RlPjwvYT4sIGJ1dCBpbiBjYXNlIHRoZXJlIGlzIG5vIGltcGxlbWVudGF0aW9uLCBpdAotZXZhbHVhdGVzIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWZfcmV0dXJuPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNBTEwtUEFSRU5ULVdJVEgtREVGQVVMVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnRfY2xhc3NfY2FzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBjbGFzcyBjYXN0IG1hY3JvIGZvciB0aGUgcGFyZW50IHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFyZ3VtZW50cyBlbmNsb3NlZCBpbiAnKCApJzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZWZfcmV0dXJuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZGVmYXVsdCByZXN1bHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJFQUQtVUlOVDg6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9VSU5UOCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9SRUFEX1VJTlQ4KGRhdGEpICAgICAgICAgICAgKF9HU1RfR0VUIChkYXRhLCAwLCAgOCwgIDApKQotPC9wcmU+Ci08cD5SZWFkIGFuIDggYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUkVBRC1VSU5UOC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1lbW9yeSBsb2NhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJFQUQtVUlOVDE2LUxFOkNBUFMiPjwvYT48aDM+R1NUX1JFQURfVUlOVDE2X0xFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiMgIGRlZmluZSBHU1RfUkVBRF9VSU5UMTZfTEUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRF9TV0FQICgxNiwgZGF0YSkKLTwvcHJlPgotPHA+UmVhZCBhIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJFQUQtVUlOVDE2LUxFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUkVBRC1VSU5UMTYtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9VSU5UMTZfQkUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+IyAgZGVmaW5lIEdTVF9SRUFEX1VJTlQxNl9CRShkYXRhKSAgICAgIF9HU1RfRkFTVF9SRUFEICgxNiwgZGF0YSkKLTwvcHJlPgotPHA+UmVhZCBhIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJFQUQtVUlOVDE2LUJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUkVBRC1VSU5UMjQtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9VSU5UMjRfTEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUkVBRF9VSU5UMjRfTEUoZGF0YSkgX19nc3Rfc2xvd19yZWFkMjRfbGUoKGNvbnN0IGd1aW50OCAqKShkYXRhKSkKLTwvcHJlPgotPHA+UmVhZCBhIDI0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJFQUQtVUlOVDI0LUxFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUkVBRC1VSU5UMjQtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9VSU5UMjRfQkUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUkVBRF9VSU5UMjRfQkUoZGF0YSkgX19nc3Rfc2xvd19yZWFkMjRfYmUoKGNvbnN0IGd1aW50OCAqKShkYXRhKSkKLTwvcHJlPgotPHA+UmVhZCBhIDI0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJFQUQtVUlOVDI0LUJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUkVBRC1VSU5UMzItTEU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9VSU5UMzJfTEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+IyAgZGVmaW5lIEdTVF9SRUFEX1VJTlQzMl9MRShkYXRhKSAgICAgIF9HU1RfRkFTVF9SRUFEX1NXQVAgKDMyLCBkYXRhKQotPC9wcmU+Ci08cD5SZWFkIGEgMzIgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUkVBRC1VSU5UMzItTEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tZW1vcnkgbG9jYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1SRUFELVVJTlQzMi1CRTpDQVBTIj48L2E+PGgzPkdTVF9SRUFEX1VJTlQzMl9CRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jICBkZWZpbmUgR1NUX1JFQURfVUlOVDMyX0JFKGRhdGEpICAgICAgX0dTVF9GQVNUX1JFQUQgKDMyLCBkYXRhKQotPC9wcmU+Ci08cD5SZWFkIGEgMzIgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUkVBRC1VSU5UMzItQkUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tZW1vcnkgbG9jYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1SRUFELVVJTlQ2NC1MRTpDQVBTIj48L2E+PGgzPkdTVF9SRUFEX1VJTlQ2NF9MRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jICBkZWZpbmUgR1NUX1JFQURfVUlOVDY0X0xFKGRhdGEpICAgICAgX0dTVF9GQVNUX1JFQURfU1dBUCAoNjQsIGRhdGEpCi08L3ByZT4KLTxwPlJlYWQgYSA2NCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1SRUFELVVJTlQ2NC1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1lbW9yeSBsb2NhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJFQUQtVUlOVDY0LUJFOkNBUFMiPjwvYT48aDM+R1NUX1JFQURfVUlOVDY0X0JFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiMgIGRlZmluZSBHU1RfUkVBRF9VSU5UNjRfQkUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRCAoNjQsIGRhdGEpCi08L3ByZT4KLTxwPlJlYWQgYSA2NCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1SRUFELVVJTlQ2NC1CRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1lbW9yeSBsb2NhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJFQUQtRkxPQVQtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9GTE9BVF9MRcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci1HU1RfUkVBRF9GTE9BVF9MRSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDMyIGJpdCBmbG9hdCB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1SRUFELUZMT0FULUxFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJFQUQtRkxPQVQtTEUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJFQUQtRkxPQVQtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfUkVBRF9GTE9BVF9CRcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci1HU1RfUkVBRF9GTE9BVF9CRSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDMyIGJpdCBmbG9hdCB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1SRUFELUZMT0FULUJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJFQUQtRkxPQVQtQkUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJFQUQtRE9VQkxFLUxFOkNBUFMiPjwvYT48aDM+R1NUX1JFQURfRE9VQkxFX0xFwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPgotR1NUX1JFQURfRE9VQkxFX0xFICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgNjQgYml0IGRvdWJsZSB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1SRUFELURPVUJMRS1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1lbW9yeSBsb2NhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1SRUFELURPVUJMRS1MRS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1SRUFELURPVUJMRS1CRTpDQVBTIj48L2E+PGgzPkdTVF9SRUFEX0RPVUJMRV9CRcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4KLUdTVF9SRUFEX0RPVUJMRV9CRSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDY0IGJpdCBkb3VibGUgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUkVBRC1ET1VCTEUtQkUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tZW1vcnkgbG9jYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUkVBRC1ET1VCTEUtQkUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtV1JJVEUtVUlOVDg6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDgoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBHU1RfV1JJVEVfVUlOVDgoZGF0YSwgbnVtKTwvcHJlPgotPHA+U3RvcmUgYW4gOCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UOC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UMTYtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDE2X0xFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQxNl9MRShkYXRhLCBudW0pPC9wcmU+Ci08cD5TdG9yZSBhIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQxNi1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UMTYtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDE2X0JFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQxNl9CRShkYXRhLCBudW0pPC9wcmU+Ci08cD5TdG9yZSBhIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQxNi1CRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UMjQtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDI0X0xFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQyNF9MRShkYXRhLCBudW0pPC9wcmU+Ci08cD5TdG9yZSBhIDI0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQyNC1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UMjQtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDI0X0JFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQyNF9CRShkYXRhLCBudW0pPC9wcmU+Ci08cD5TdG9yZSBhIDI0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQyNC1CRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UMzItTEU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDMyX0xFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQzMl9MRShkYXRhLCBudW0pPC9wcmU+Ci08cD5TdG9yZSBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQzMi1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UMzItQkU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDMyX0JFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQzMl9CRShkYXRhLCBudW0pPC9wcmU+Ci08cD5TdG9yZSBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQzMi1CRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UNjQtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDY0X0xFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQ2NF9MRShkYXRhLCBudW0pPC9wcmU+Ci08cD5TdG9yZSBhIDY0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQ2NC1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1VSU5UNjQtQkU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfVUlOVDY0X0JFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1dSSVRFX1VJTlQ2NF9CRShkYXRhLCBudW0pPC9wcmU+Ci08cD5TdG9yZSBhIDY0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVdSSVRFLVVJTlQ2NC1CRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1GTE9BVC1MRTpDQVBTIj48L2E+PGgzPkdTVF9XUklURV9GTE9BVF9MRcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLUdTVF9XUklURV9GTE9BVF9MRSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TdG9yZSBhIDMyIGJpdCBmbG9hdCB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1XUklURS1GTE9BVC1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1GTE9BVC1CRTpDQVBTIj48L2E+PGgzPkdTVF9XUklURV9GTE9BVF9CRcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLUdTVF9XUklURV9GTE9BVF9CRSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TdG9yZSBhIDMyIGJpdCBmbG9hdCB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1XUklURS1GTE9BVC1CRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWVtb3J5IGxvY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIHRvIHN0b3JlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1XUklURS1ET1VCTEUtTEU6Q0FQUyI+PC9hPjxoMz5HU1RfV1JJVEVfRE9VQkxFX0xFwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotR1NUX1dSSVRFX0RPVUJMRV9MRSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TdG9yZSBhIDY0IGJpdCBkb3VibGUgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtV1JJVEUtRE9VQkxFLUxFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5tZW1vcnkgbG9jYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFsdWUgdG8gc3RvcmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVdSSVRFLURPVUJMRS1CRTpDQVBTIj48L2E+PGgzPkdTVF9XUklURV9ET1VCTEVfQkXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1HU1RfV1JJVEVfRE9VQkxFX0JFICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN0b3JlIGEgNjQgYml0IGRvdWJsZSB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1XUklURS1ET1VCTEUtQkUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1lbW9yeSBsb2NhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD52YWx1ZSB0byBzdG9yZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtVVAtMjpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9VUF8yKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1JPVU5EX1VQXzIobnVtKSAgKCgobnVtKSsxKSZhbXA7fjEpCi08L3ByZT4KLTxwPlJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJPVU5ELVVQLTIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmludGVnZXIgdmFsdWUgdG8gcm91bmQgdXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1VUC00OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX1VQXzQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfVVBfNChudW0pICAoKChudW0pKzMpJmFtcDt+MykKLTwvcHJlPgotPHA+Um91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtVVAtNC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aW50ZWdlciB2YWx1ZSB0byByb3VuZCB1cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJPVU5ELVVQLTg6Q0FQUyI+PC9hPjxoMz5HU1RfUk9VTkRfVVBfOCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9VUF84KG51bSkgICgoKG51bSkrNykmYW1wO343KQotPC9wcmU+Ci08cD5Sb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA4LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1VUC04LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtVVAtMTY6Q0FQUyI+PC9hPjxoMz5HU1RfUk9VTkRfVVBfMTYoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfVVBfMTYobnVtKSAoKChudW0pKzE1KSZhbXA7fjE1KQotPC9wcmU+Ci08cD5Sb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAxNi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtVVAtMTYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmludGVnZXIgdmFsdWUgdG8gcm91bmQgdXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1VUC0zMjpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9VUF8zMigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9VUF8zMihudW0pICgoKG51bSkrMzEpJmFtcDt+MzEpCi08L3ByZT4KLTxwPlJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDMyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1VUC0zMi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aW50ZWdlciB2YWx1ZSB0byByb3VuZCB1cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJPVU5ELVVQLTY0OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX1VQXzY0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1JPVU5EX1VQXzY0KG51bSkgKCgobnVtKSs2MykmYW1wO342MykKLTwvcHJlPgotPHA+Um91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNjQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJPVU5ELVVQLTY0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtVVAtMTI4OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX1VQXzEyOCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9VUF8xMjgobnVtKSAoKChudW0pKzEyNykmYW1wO34xMjcpCi08L3ByZT4KLTxwPlJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDEyOC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtVVAtMTI4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtVVAtTjpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9VUF9OKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1JPVU5EX1VQX04obnVtLGFsaWduKSAoKCgobnVtKSArICgoYWxpZ24pIC0gMSkpICZhbXA7IH4oKGFsaWduKSAtIDEpKSkKLTwvcHJlPgotPHA+Um91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGlnbjwvY29kZT48L2VtPgotIE1VU1QgYmUgYQotcG93ZXIgb2YgdHdvLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1VUC1OLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmludGVncmVyIHZhbHVlIHRvIHJvdW5kIHVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFsaWduPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwb3dlciBvZiB0d28gdG8gcm91bmQgdXAgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJPVU5ELURPV04tMjpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9ET1dOXzIoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfRE9XTl8yKG51bSkgICgobnVtKSZhbXA7KH4xKSkKLTwvcHJlPgotPHA+Um91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1ET1dOLTIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJPVU5ELURPV04tNDpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9ET1dOXzQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfRE9XTl80KG51bSkgICgobnVtKSZhbXA7KH4zKSkKLTwvcHJlPgotPHA+Um91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1ET1dOLTQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJPVU5ELURPV04tODpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9ET1dOXzgoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfRE9XTl84KG51bSkgICgobnVtKSZhbXA7KH43KSkKLTwvcHJlPgotPHA+Um91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA4LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1ET1dOLTgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJPVU5ELURPV04tMTY6Q0FQUyI+PC9hPjxoMz5HU1RfUk9VTkRfRE9XTl8xNigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9ET1dOXzE2KG51bSkgKChudW0pJmFtcDsofjE1KSkKLTwvcHJlPgotPHA+Um91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAxNi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtRE9XTi0xNi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aW50ZWdlciB2YWx1ZSB0byByb3VuZCBkb3duPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtRE9XTi0zMjpDQVBTIj48L2E+PGgzPkdTVF9ST1VORF9ET1dOXzMyKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1JPVU5EX0RPV05fMzIobnVtKSAoKG51bSkmYW1wOyh+MzEpKQotPC9wcmU+Ci08cD5Sb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSBkb3duIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDMyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1ET1dOLTMyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIGRvd248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1ET1dOLTY0OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX0RPV05fNjQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUk9VTkRfRE9XTl82NChudW0pICgobnVtKSZhbXA7KH42MykpCi08L3ByZT4KLTxwPlJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNjQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJPVU5ELURPV04tNjQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVJPVU5ELURPV04tMTI4OkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX0RPV05fMTI4KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1JPVU5EX0RPV05fMTI4KG51bSkgKChudW0pJmFtcDsofjEyNykpCi08L3ByZT4KLTxwPlJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMTI4LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1ST1VORC1ET1dOLTEyOC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aW50ZWdlciB2YWx1ZSB0byByb3VuZCBkb3duPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUk9VTkQtRE9XTi1OOkNBUFMiPjwvYT48aDM+R1NUX1JPVU5EX0RPV05fTigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ST1VORF9ET1dOX04obnVtLGFsaWduKSAoKChudW0pICZhbXA7IH4oKGFsaWduKSAtIDEpKSkKLTwvcHJlPgotPHA+Um91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxpZ248L2NvZGU+PC9lbT4KLS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsaWduPC9jb2RlPjwvZW0+Ci0gTVVTVCBiZSBhCi1wb3dlciBvZiB0d28uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVJPVU5ELURPV04tTi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbnRlZ3JlciB2YWx1ZSB0byByb3VuZCBkb3duPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFsaWduPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwb3dlciBvZiB0d28gdG8gcm91bmQgZG93biB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHRE9VQkxFLUZST00tQkU6Q0FQUyI+PC9hPjxoMz5HRE9VQkxFX0ZST01fQkUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHRE9VQkxFX0ZST01fQkUodmFsKSAoR0RPVUJMRV9UT19CRSAodmFsKSkKLTwvcHJlPgotPHA+Q29udmVydCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkgZnJvbSBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIKLWludG8gbmF0aXZlIGJ5dGUgb3JkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR0RPVUJMRS1GUk9NLUJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR0RPVUJMRS1GUk9NLUxFOkNBUFMiPjwvYT48aDM+R0RPVUJMRV9GUk9NX0xFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR0RPVUJMRV9GUk9NX0xFKHZhbCkgKEdET1VCTEVfVE9fTEUgKHZhbCkpCi08L3ByZT4KLTxwPkNvbnZlcnQgNjQtYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChkb3VibGUpIGZyb20gbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyCi1pbnRvIG5hdGl2ZSBieXRlIG9yZGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdET1VCTEUtRlJPTS1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdET1VCTEUtU1dBUC1MRS1CRTpDQVBTIj48L2E+PGgzPkdET1VCTEVfU1dBUF9MRV9CRcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4KLUdET1VCTEVfU1dBUF9MRV9CRSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBpbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Td2FwIGJ5dGUgb3JkZXIgb2YgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR0RPVUJMRS1TV0FQLUxFLUJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmlucHV0IHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR0RPVUJMRS1TV0FQLUxFLUJFLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluPC9jb2RlPjwvZW0+Ci1ieXRlLXN3YXBwZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdET1VCTEUtVE8tQkU6Q0FQUyI+PC9hPjxoMz5HRE9VQkxFX1RPX0JFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR0RPVUJMRV9UT19CRSh2YWwpICAgKEdET1VCTEVfU1dBUF9MRV9CRSAodmFsKSkKLTwvcHJlPgotPHA+Q29udmVydCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCi1iaWcgZW5kaWFuIGJ5dGUgb3JkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR0RPVUJMRS1UTy1CRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdET1VCTEUtVE8tTEU6Q0FQUyI+PC9hPjxoMz5HRE9VQkxFX1RPX0xFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR0RPVUJMRV9UT19MRSh2YWwpICAgKChnZG91YmxlKSAodmFsKSkKLTwvcHJlPgotPHA+Q29udmVydCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCi1saXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR0RPVUJMRS1UTy1MRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdGTE9BVC1GUk9NLUJFOkNBUFMiPjwvYT48aDM+R0ZMT0FUX0ZST01fQkUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHRkxPQVRfRlJPTV9CRSh2YWwpICAoR0ZMT0FUX1RPX0JFICh2YWwpKQotPC9wcmU+Ci08cD5Db252ZXJ0IDMyLWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSAoZmxvYXQpIGZyb20gYmlnIGVuZGlhbiBieXRlIG9yZGVyCi1pbnRvIG5hdGl2ZSBieXRlIG9yZGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdGTE9BVC1GUk9NLUJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR0ZMT0FULUZST00tTEU6Q0FQUyI+PC9hPjxoMz5HRkxPQVRfRlJPTV9MRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdGTE9BVF9GUk9NX0xFKHZhbCkgIChHRkxPQVRfVE9fTEUgKHZhbCkpCi08L3ByZT4KLTxwPkNvbnZlcnQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChmbG9hdCkgZnJvbSBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIKLWludG8gbmF0aXZlIGJ5dGUgb3JkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR0ZMT0FULUZST00tTEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHRkxPQVQtU1dBUC1MRS1CRTpDQVBTIj48L2E+PGgzPkdGTE9BVF9TV0FQX0xFX0JFwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Zsb2F0PC9zcGFuPjwvYT4KLUdGTE9BVF9TV0FQX0xFX0JFICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiBpbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Td2FwIGJ5dGUgb3JkZXIgb2YgYSAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHRkxPQVQtU1dBUC1MRS1CRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbnB1dCB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdGTE9BVC1TV0FQLUxFLUJFLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluPC9jb2RlPjwvZW0+Ci1ieXRlLXN3YXBwZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdGTE9BVC1UTy1CRTpDQVBTIj48L2E+PGgzPkdGTE9BVF9UT19CRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdGTE9BVF9UT19CRSh2YWwpICAgIChHRkxPQVRfU1dBUF9MRV9CRSAodmFsKSkKLTwvcHJlPgotPHA+Q29udmVydCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KSBmcm9tIG5hdGl2ZSBieXRlIG9yZGVyIGludG8KLWJpZyBlbmRpYW4gYnl0ZSBvcmRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHRkxPQVQtVE8tQkUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHRkxPQVQtVE8tTEU6Q0FQUyI+PC9hPjxoMz5HRkxPQVRfVE9fTEUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHRkxPQVRfVE9fTEUodmFsKSAgICAoKGdmbG9hdCkgKHZhbCkpCi08L3ByZT4KLTxwPkNvbnZlcnQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChmbG9hdCkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCi1saXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR0ZMT0FULVRPLUxFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWd1aW50NjQtdG8tZ2RvdWJsZSI+PC9hPjxoMz5nc3RfZ3VpbnQ2NF90b19nZG91YmxlKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlKHZhbHVlKSAgIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSh2YWx1ZSkKLTwvcHJlPgotPHA+Q29udmVydCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB0byBhIGdkb3VibGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWd1aW50NjQtdG8tZ2RvdWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIHRvIGNvbnZlcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZ3VpbnQ2NC10by1nZG91YmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci1jb252ZXJ0ZWQgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1nZG91YmxlLXRvLWd1aW50NjQiPjwvYT48aDM+Z3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCh2YWx1ZSkgICBnc3RfdXRpbF9nZG91YmxlX3RvX2d1aW50NjQodmFsdWUpCi08L3ByZT4KLTxwPkNvbnZlcnQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gdG8gYSBndWludDY0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1nZG91YmxlLXRvLWd1aW50NjQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB2YWx1ZSB0byBjb252ZXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWdkb3VibGUtdG8tZ3VpbnQ2NC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotY29udmVydGVkIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXRpbC1kdW1wLW1lbSI+PC9hPjxoMz5nc3RfdXRpbF9kdW1wX21lbcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF91dGlsX2R1bXBfbWVtICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWNoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWNoYXI8L3NwYW4+PC9hPiAqbWVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkR1bXBzIHRoZSBtZW1vcnkgYmxvY2sgaW50byBhIGhleCByZXByZXNlbnRhdGlvbi4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZHVtcC1tZW0ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgdG8gZHVtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpemUgb2YgdGhlIG1lbW9yeSBibG9jayB0byBkdW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZSI+PC9hPjxoMz5nc3RfdXRpbF91aW50NjRfc2NhbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfdXRpbF91aW50NjRfc2NhbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TY2FsZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYnkgdGhlIHJhdGlvbmFsIG51bWJlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+Ci0gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAotdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGNhbiBwb3RlbnRpYWxseSBiZSB2ZXJ5IHNsb3cgaWYgdmFsIGFuZCBudW0gYXJlIGJvdGgKLWdyZWF0ZXIgdGhhbiBHX01BWFVJTlQzMi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC11aW50NjQtc2NhbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciB0byBzY2FsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtZXJhdG9yIG9mIHRoZSBzY2FsZSByYXRpbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW5vbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgcmF0aW88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSogPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPgotLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLS4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCi1mdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQotcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyIGl0IGlzIHRydW5jYXRlZC4gIFNlZSBhbHNvCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLXJvdW5kIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWNlaWwiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKTwvY29kZT48L2E+LAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtcm91bmQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCk8L2NvZGU+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCgpPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCI+PC9hPjxoMz5nc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TY2FsZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYnkgdGhlIHJhdGlvbmFsIG51bWJlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+Ci0gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAotdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGNhbiBwb3RlbnRpYWxseSBiZSB2ZXJ5IHNsb3cgaWYgdmFsIGFuZCBudW0gYXJlIGJvdGgKLWdyZWF0ZXIgdGhhbiBHX01BWFVJTlQzMi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC11aW50NjQtc2NhbGUtcm91bmQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciB0byBzY2FsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtZXJhdG9yIG9mIHRoZSBzY2FsZSByYXRpbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW5vbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgcmF0aW88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSogPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPgotLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLS4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCi1mdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQotcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyLCBpdCBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIKLShoYWxmLXdheSBjYXNlcyBhcmUgcm91bmRlZCB1cCkuICBTZWUgYWxzbyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGUoKTwvY29kZT48L2E+LAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KCk8L2NvZGU+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LXJvdW5kIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCgpPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsIj48L2E+PGgzPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gZGVub208L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2NhbGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotIGJ5IHRoZSByYXRpb25hbCBudW1iZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPgotIC8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9tPC9jb2RlPjwvZW0+Ci0sIGF2b2lkaW5nIG92ZXJmbG93cyBhbmQKLXVuZGVyZmxvd3MgYW5kIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBjYW4gcG90ZW50aWFsbHkgYmUgdmVyeSBzbG93IGlmIHZhbCBhbmQgbnVtIGFyZSBib3RoCi1ncmVhdGVyIHRoYW4gR19NQVhVSU5UMzIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWNlaWwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciB0byBzY2FsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtZXJhdG9yIG9mIHRoZSBzY2FsZSByYXRpbzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW5vbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgcmF0aW88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZS1jZWlsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotKiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+Ci0vIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPgotLiAgSW4gdGhlIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRoaXMKLWZ1bmN0aW9uIHJldHVybnMgR19NQVhVSU5UNjQuICBJZiB0aGUgcmVzdWx0IGlzIG5vdCBleGFjdGx5Ci1yZXByZXNlbnRhYmxlIGFzIGFuIGludGVnZXIsIGl0IGlzIHJvdW5kZWQgdXAuICBTZWUgYWxzbwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kKCk8L2NvZGU+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50IiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LXJvdW5kIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCgpPC9jb2RlPjwvYT4sCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1jZWlsIiB0aXRsZT0iZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50Ij48L2E+PGgzPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TY2FsZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYnkgdGhlIHJhdGlvbmFsIG51bWJlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+Ci0gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAotdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4KLSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPgotIG11c3QgYmUgcG9zaXRpdmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ndWludDY0IChzdWNoIGFzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4pIHRvIHNjYWxlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1lcmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVub208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5kZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSogPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPgotLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLS4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCi1mdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQotcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyLCBpdCBpcyB0cnVuY2F0ZWQuICBTZWUgYWxzbwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtcm91bmQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsKCk8L2NvZGU+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtcm91bmQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCgpPC9jb2RlPjwvYT4sCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWNlaWwiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKTwvY29kZT48L2E+LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LXJvdW5kIj48L2E+PGgzPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TY2FsZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYnkgdGhlIHJhdGlvbmFsIG51bWJlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+Ci0gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAotdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4KLSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPgotIG11c3QgYmUgcG9zaXRpdmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ndWludDY0IChzdWNoIGFzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4pIHRvIHNjYWxlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1lcmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVub208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5kZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSogPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPgotLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLS4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCi1mdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQotcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyLCBpdCBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIKLShoYWxmLXdheSBjYXNlcyBhcmUgcm91bmRlZCB1cCkuICBTZWUgYWxzbyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQoKTwvY29kZT48L2E+LAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlKCk8L2NvZGU+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtcm91bmQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCgpPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQtY2VpbCI+PC9hPjxoMz5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG51bTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TY2FsZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYnkgdGhlIHJhdGlvbmFsIG51bWJlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnVtPC9jb2RlPjwvZW0+Ci0gLyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub208L2NvZGU+PC9lbT4KLSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAotdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4KLSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbTwvY29kZT48L2VtPgotIG11c3QgYmUgcG9zaXRpdmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1jZWlsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmd1aW50NjQgKHN1Y2ggYXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPikgdG8gc2NhbGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWVyYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW5vbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRlbm9taW5hdG9yIG9mIHRoZSBzY2FsZSBmYWN0b3IuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0qIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5udW08L2NvZGU+PC9lbT4KLS8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9tPC9jb2RlPjwvZW0+Ci0uICBJbiB0aGUgY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhpcwotZnVuY3Rpb24gcmV0dXJucyBHX01BWFVJTlQ2NC4gIElmIHRoZSByZXN1bHQgaXMgbm90IGV4YWN0bHkKLXJlcHJlc2VudGFibGUgYXMgYW4gaW50ZWdlciwgaXQgaXMgcm91bmRlZCB1cC4gIFNlZSBhbHNvCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQoKTwvY29kZT48L2E+LAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZSIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kKCk8L2NvZGU+PC9hPiwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtY2VpbCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCgpPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11dGlsLWdyZWF0ZXN0LWNvbW1vbi1kaXZpc29yIj48L2E+PGgzPmdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29ywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsY3VsYXRlcyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4KLQotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZ3JlYXRlc3QtY29tbW9uLWRpdmlzb3IucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkZpcnN0IHZhbHVlIGFzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U2Vjb25kIHZhbHVlIGFzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZ3JlYXRlc3QtY29tbW9uLWRpdmlzb3IucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBHcmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZ3JlYXRlc3QtY29tbW9uLWRpdmlzb3ItaW50NjQiPjwvYT48aDM+Z3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3JfaW50NjTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPgotZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3JfaW50NjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gYTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gYjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DYWxjdWxhdGVzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotCi1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC1ncmVhdGVzdC1jb21tb24tZGl2aXNvci1pbnQ2NC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Rmlyc3QgdmFsdWUgYXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U2Vjb25kIHZhbHVlIGFzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLWdyZWF0ZXN0LWNvbW1vbi1kaXZpc29yLWludDY0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gR3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4KLWFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11dGlsLWZyYWN0aW9uLXRvLWRvdWJsZSI+PC9hPjxoMz5nc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gc3JjX248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gc3JjX2Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VHJhbnNmb3JtcyBhIGZyYWN0aW9uIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLWZyYWN0aW9uLXRvLWRvdWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNfbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkZyYWN0aW9uIG51bWVyYXRvciBhcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjX2Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5GcmFjdGlvbiBkZW5vbWluYXRvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBwb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IGZvciB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZG91YmxlLXRvLWZyYWN0aW9uIj48L2E+PGgzPmdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gKmRlc3RfbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqZGVzdF9kPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRyYW5zZm9ybXMgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gdG8gYSBmcmFjdGlvbiBhbmQgc2ltcGxpZmllcwotdGhlIHJlc3VsdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC1kb3VibGUtdG8tZnJhY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHRvIHRyYW5zZm9ybTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0X248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB0byBob2xkIHRoZSByZXN1bHQgbnVtZXJhdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF9kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdG8gaG9sZCB0aGUgcmVzdWx0IGRlbm9taW5hdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZnJhY3Rpb24tbXVsdGlwbHkiPjwvYT48aDM+Z3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGJfbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGJfZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpyZXNfbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpyZXNfZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5NdWx0aXBsaWVzIHRoZSBmcmFjdGlvbnMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFfbjwvY29kZT48L2VtPgotLzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hX2Q8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJfbjwvY29kZT48L2VtPgotLzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iX2Q8L2NvZGU+PC9lbT4KLSBhbmQgc3RvcmVzCi10aGUgcmVzdWx0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXNfbjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVzX2Q8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC1mcmFjdGlvbi1tdWx0aXBseS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hX248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5OdW1lcmF0b3Igb2YgZmlyc3QgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YV9kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+RGVub21pbmF0b3Igb2YgZmlyc3QgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Yl9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TnVtZXJhdG9yIG9mIHNlY29uZCB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iX2Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5EZW5vbWluYXRvciBvZiBzZWNvbmQgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzX248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdG8gaG9sZCB0aGUgcmVzdWx0IG51bWVyYXRvci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlc19kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHRvIGhvbGQgdGhlIHJlc3VsdCBkZW5vbWluYXRvci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC1mcmFjdGlvbi1tdWx0aXBseS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG9uIG92ZXJmbG93LCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXRpbC1mcmFjdGlvbi1hZGQiPjwvYT48aDM+Z3N0X3V0aWxfZnJhY3Rpb25fYWRkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdXRpbF9mcmFjdGlvbl9hZGQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYV9uPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBiX248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYl9kPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICpyZXNfbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAqcmVzX2Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWRkcyB0aGUgZnJhY3Rpb25zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hX248L2NvZGU+PC9lbT4KLS88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YV9kPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iX248L2NvZGU+PC9lbT4KLS88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Yl9kPC9jb2RlPjwvZW0+Ci0gYW5kIHN0b3JlcwotdGhlIHJlc3VsdCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVzX248L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc19kPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZnJhY3Rpb24tYWRkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFfbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk51bWVyYXRvciBvZiBmaXJzdCB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hX2Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5EZW5vbWluYXRvciBvZiBmaXJzdCB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iX248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5OdW1lcmF0b3Igb2Ygc2Vjb25kIHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJfZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkRlbm9taW5hdG9yIG9mIHNlY29uZCB2YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXNfbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB0byBob2xkIHRoZSByZXN1bHQgbnVtZXJhdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVzX2Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdG8gaG9sZCB0aGUgcmVzdWx0IGRlbm9taW5hdG9yLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLWZyYWN0aW9uLWFkZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG9uIG92ZXJmbG93LCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXRpbC1mcmFjdGlvbi1jb21wYXJlIj48L2E+PGgzPmdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGFfbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gYV9kPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBiX248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGJfZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db21wYXJlcyB0aGUgZnJhY3Rpb25zIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hX248L2NvZGU+PC9lbT4KLS88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YV9kPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iX248L2NvZGU+PC9lbT4KLS88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Yl9kPC9jb2RlPjwvZW0+Ci0gYW5kIHJldHVybnMKLS0xIGlmIGEgJmx0OyBiLCAwIGlmIGEgPSBiIGFuZCAxIGlmIGEgJmd0OyBiLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLWZyYWN0aW9uLWNvbXBhcmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YV9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TnVtZXJhdG9yIG9mIGZpcnN0IHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFfZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkRlbm9taW5hdG9yIG9mIGZpcnN0IHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJfbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk51bWVyYXRvciBvZiBzZWNvbmQgdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Yl9kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+RGVub21pbmF0b3Igb2Ygc2Vjb25kIHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC1mcmFjdGlvbi1jb21wYXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gLTEgaWYgYSAmbHQ7IGI7IDAgaWYgYSA9IGI7IDEgaWYgYSAmZ3Q7IGIuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11dGlsLXNlcW51bS1uZXh0Ij48L2E+PGgzPmdzdF91dGlsX3NlcW51bV9uZXh0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPgotZ3N0X3V0aWxfc2VxbnVtX25leHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJuIGEgY29uc3RhbnRseSBpbmNyZW1lbnRpbmcgc2VxdWVuY2UgbnVtYmVyLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IHRvIEdTdHJlYW1lciB0byBiZSBhYmxlIHRvIGRldGVybWluZSB3aGljaAotZXZlbnRzIGFuZCBtZXNzYWdlcyBhcmUgInRoZSBzYW1lIi4gRm9yIGV4YW1wbGUsIGVsZW1lbnRzIG1heSBzZXQgdGhlIHNlcW51bQotb24gYSBzZWdtZW50LWRvbmUgbWVzc2FnZSB0byBiZSB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBsYXN0IHNlZWsgZXZlbnQsIHRvCi1pbmRpY2F0ZSB0aGF0IGV2ZW50IGFuZCB0aGUgbWVzc2FnZSBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHNlZ21lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtc2VxbnVtLW5leHQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIGNvbnN0YW50bHkgaW5jcmVtZW50aW5nIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLCB3aGljaCBtaWdodAotb3ZlcmZsb3cgYmFjayB0byAwIGF0IHNvbWUgcG9pbnQuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2VxbnVtLWNvbXBhcmUiIHRpdGxlPSJnc3RfdXRpbF9zZXFudW1fY29tcGFyZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUoKTwvY29kZT48L2E+IHRvIG1ha2Ugc3VyZQoteW91IGhhbmRsZSB3cmFwYXJvdW5kIGNvcnJlY3RseS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXV0aWwtc2VxbnVtLWNvbXBhcmUiPjwvYT48aDM+Z3N0X3V0aWxfc2VxbnVtX2NvbXBhcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPgotZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gczE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBzMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db21wYXJlIHR3byBzZXF1ZW5jZSBudW1iZXJzLCBoYW5kbGluZyB3cmFwYXJvdW5kLjwvcD4KLTxwPlRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyAoZ2ludDMyKSg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+czE8L2NvZGU+PC9lbT4KLSAtIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zMjwvY29kZT48L2VtPgotKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC1zZXFudW0tY29tcGFyZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgc2VxdWVuY2UgbnVtYmVyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zMjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkFub3RoZXIgc2VxdWVuY2UgbnVtYmVyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtc2VxbnVtLWNvbXBhcmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIG5lZ2F0aXZlIG51bWJlciBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+czE8L2NvZGU+PC9lbT4KLWlzIGJlZm9yZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+czI8L2NvZGU+PC9lbT4KLSwgMCBpZiB0aGV5IGFyZSBlcXVhbCwgb3IgYQotcG9zaXRpdmUgbnVtYmVyIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zMTwvY29kZT48L2VtPgotaXMgYWZ0ZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnMyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC11dGlsLWdyb3VwLWlkLW5leHQiPjwvYT48aDM+Z3N0X3V0aWxfZ3JvdXBfaWRfbmV4dMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X3V0aWxfZ3JvdXBfaWRfbmV4dCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm4gYSBjb25zdGFudGx5IGluY3JlbWVudGluZyBncm91cCBpZC48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBuZXcgZ3JvdXAtaWQgZm9yIHRoZQotc3RyZWFtLXN0YXJ0IGV2ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLWdyb3VwLWlkLW5leHQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIGNvbnN0YW50bHkgaW5jcmVtZW50aW5nIHVuc2lnbmVkIGludGVnZXIsIHdoaWNoIG1pZ2h0Ci1vdmVyZmxvdyBiYWNrIHRvIDAgYXQgc29tZSBwb2ludC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXV0aWwtc2V0LW9iamVjdC1hcmciPjwvYT48aDM+Z3N0X3V0aWxfc2V0X29iamVjdF9hcmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HT2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db252ZXJ0cyB0aGUgc3RyaW5nIHZhbHVlIHRvIHRoZSB0eXBlIG9mIHRoZSBvYmplY3RzIGFyZ3VtZW50IGFuZAotc2V0cyB0aGUgYXJndW1lbnQgd2l0aCBpdC48L3A+Ci08cD5Ob3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaWxlbnRseSByZXR1cm5zIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLSBoYXMgbm8gcHJvcGVydHkgbmFtZWQKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0gb3Igd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSBjYW5ub3QgYmUgY29udmVydGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC1zZXQtb2JqZWN0LWFyZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHRvIHNldCB0aGUgYXJndW1lbnQgb2Y8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuYW1lIG9mIHRoZSBhcmd1bWVudCB0byBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RyaW5nIHZhbHVlIHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdXRpbC1zZXQtdmFsdWUtZnJvbS1zdHJpbmciPjwvYT48aDM+Z3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqdmFsdWVfc3RyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlcnRzIHRoZSBzdHJpbmcgdG8gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGFuZAotc2V0cyB0aGUgdmFsdWUgd2l0aCBpdC48L3A+Ci08cD5Ob3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBkYW5nZXJvdXMgYXMgaXQgZG9lcyBub3QgcmV0dXJuIGFueSBpbmRpY2F0aW9uCi1pZiB0aGUgY29udmVyc2lvbiB3b3JrZWQgb3Igbm90LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLXNldC12YWx1ZS1mcm9tLXN0cmluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgdmFsdWUgdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJPdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dCBjYWxsZXItYWxsb2NhdGVzPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWVfc3RyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0cmluZyB0byBnZXQgdGhlIHZhbHVlIGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZ2V0LXRpbWVzdGFtcCI+PC9hPjxoMz5nc3RfdXRpbF9nZXRfdGltZXN0YW1wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIiB0aXRsZT0iR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3RfdXRpbF9nZXRfdGltZXN0YW1wICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCBhIHRpbWVzdGFtcCBhcyBHc3RDbG9ja1RpbWUgdG8gYmUgdXNlZCBmb3IgaW50ZXJ2YWwgbWVhc3VyZW1lbnRzLgotVGhlIHRpbWVzdGFtcCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGluIGFueSBvdGhlciB3YXkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXV0aWwtZ2V0LXRpbWVzdGFtcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSB0aW1lc3RhbXA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXV0aWwtYXJyYXktYmluYXJ5LXNlYXJjaCI+PC9hPjxoMz5nc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci1nc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gYXJyYXk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbnVtX2VsZW1lbnRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IGVsZW1lbnRfc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0NvbXBhcmVEYXRhRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRGF0YUZ1bmM8L3NwYW4+PC9hPiBzZWFyY2hfZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR3N0U2VhcmNoTW9kZSIgdGl0bGU9ImVudW0gR3N0U2VhcmNoTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlYXJjaE1vZGU8L3NwYW4+PC9hPiBtb2RlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjb25zdHBvaW50ZXI8L3NwYW4+PC9hPiBzZWFyY2hfZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2VhcmNoZXMgaW5zaWRlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcnJheTwvY29kZT48L2VtPgotIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VhcmNoX2RhdGE8L2NvZGU+PC9lbT4KLSBieSB1c2luZyB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlYXJjaF9mdW5jPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcnJheTwvY29kZT48L2VtPgotIG11c3QgYmUgc29ydGVkIGFzY2VuZGluZy48L3A+Ci08cD5BcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VhcmNoX2RhdGE8L2NvZGU+PC9lbT4KLSBpcyBhbHdheXMgcGFzc2VkIGFzIHNlY29uZCBhcmd1bWVudCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VhcmNoX2Z1bmM8L2NvZGU+PC9lbT4KLSBpdCdzCi1ub3QgcmVxdWlyZWQgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VhcmNoX2RhdGE8L2NvZGU+PC9lbT4KLSBoYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgYXJyYXkgZWxlbWVudHMuPC9wPgotPHA+VGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBzZWFyY2ggZnVuY3Rpb24gaXMgTyhsb2cgKG51bV9lbGVtZW50cykpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC11dGlsLWFycmF5LWJpbmFyeS1zZWFyY2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc29ydGVkIGlucHV0IGFycmF5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bV9lbGVtZW50czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2l6ZSBvZiBldmVyeSBlbGVtZW50IGluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlYXJjaF9mdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIGVsZW1lbnRzLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VhcmNoX2RhdGE8L2NvZGU+PC9lbT4KLXdpbGwgYWx3YXlzIGJlIHBhc3NlZCBhcyBzZWNvbmQgYXJndW1lbnQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2VhcmNoIG1vZGUgdGhhdCBzaG91bGQgYmUgdXNlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWFyY2hfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmVsZW1lbnQgdGhhdCBzaG91bGQgYmUgZm91bmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGRhdGEgdG8gcGFzcyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2VhcmNoX2Z1bmM8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+Y2xvc3VyZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdXRpbC1hcnJheS1iaW5hcnktc2VhcmNoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGFkZHJlc3Mgb2YgdGhlIGZvdW5kCi1lbGVtZW50IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBub3RoaW5nIHdhcyBmb3VuZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RVdGlscy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2VhcmNoTW9kZSI+PC9hPjxoMz5lbnVtIEdzdFNlYXJjaE1vZGU8L2gzPgotPHA+VGhlIGRpZmZlcmVudCBzZWFyY2ggbW9kZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U2VhcmNoTW9kZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TRUFSQ0gtTU9ERS1FWEFDVDpDQVBTIj48L2E+R1NUX1NFQVJDSF9NT0RFX0VYQUNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk9ubHkgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtU0VBUkNILU1PREUtQkVGT1JFOkNBUFMiPjwvYT5HU1RfU0VBUkNIX01PREVfQkVGT1JFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlNlYXJjaCBmb3IgYW4gZXhhY3QgbWF0Y2ggb3IgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1TRUFSQ0gtTU9ERS1BRlRFUjpDQVBTIj48L2E+R1NUX1NFQVJDSF9NT0RFX0FGVEVSPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlNlYXJjaCBmb3IgYW4gZXhhY3QgbWF0Y2ggb3IgdGhlIGVsZW1lbnQganVzdCBhZnRlci48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZjVlMzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VmFsdWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ODAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFZhbHVlOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGliZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBMaWJyYXJ5Ij4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiIHRpdGxlPSJHc3RWZXJzaW9uIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1Hc3RWYWx1ZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZhbHVlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZhbHVlLnRvcF9vZl9wYWdlIj48L2E+R3N0VmFsdWU8L3NwYW4+PC9oMj4KLTxwPkdzdFZhbHVlIOKAlCBHVmFsdWUgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljCi10byBHU3RyZWFtZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZhbHVlLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1NQUtFLUZPVVJDQzpDQVBTIiB0aXRsZT0iR1NUX01BS0VfRk9VUkNDKCkiPkdTVF9NQUtFX0ZPVVJDQzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtU1RSLUZPVVJDQzpDQVBTIiB0aXRsZT0iR1NUX1NUUl9GT1VSQ0MoKSI+R1NUX1NUUl9GT1VSQ0M8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULUZPVVJDQy1BUkdTOkNBUFMiIHRpdGxlPSJHU1RfRk9VUkNDX0FSR1MoKSI+R1NUX0ZPVVJDQ19BUkdTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1JTlQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UoKSI+R1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludC1yYW5nZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfaW50X3JhbmdlwqAoKSI+Z3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1taW4iIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW7CoCgpIj5nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1tYXgiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXjCoCgpIj5nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludC1yYW5nZS1zdGVwIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcMKgKCkiPmdzdF92YWx1ZV9zZXRfaW50X3JhbmdlX3N0ZXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1zdGVwIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2Vfc3RlcMKgKCkiPmdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX3N0ZXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQklUTUFTSzpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0JJVE1BU0soKSI+R1NUX1ZBTFVFX0hPTERTX0JJVE1BU0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1iaXRtYXNrIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9iaXRtYXNrwqAoKSI+Z3N0X3ZhbHVlX3NldF9iaXRtYXNrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1iaXRtYXNrIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9iaXRtYXNrwqAoKSI+Z3N0X3ZhbHVlX2dldF9iaXRtYXNrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQoKSI+R1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZmxhZ3NldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ZsYWdzZXTCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9mbGFnc2V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZsYWdzZXQtZmxhZ3MiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3PCoCgpIj5nc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZmxhZ3NldC1tYXNrIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2vCoCgpIj5nc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfbWFzazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZmxhZ3NldCIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZmxhZ3NldMKgKCkiPmdzdF92YWx1ZV9zZXRfZmxhZ3NldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1JTlQ2NC1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFKCkiPkdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludDY0LXJhbmdlIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZcKgKCkiPmdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1taW4iIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbsKgKCkiPmdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWF4IiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXjCoCgpIj5nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtaW50NjQtcmFuZ2Utc3RlcCIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2Vfc3RlcMKgKCkiPmdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2Vfc3RlcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLXN0ZXAiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXDCoCgpIj5nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRE9VQkxFLVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFKCkiPkdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0U8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1kb3VibGUtcmFuZ2UiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZcKgKCkiPmdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWluIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluwqAoKSI+Z3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWF4IiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4wqAoKSI+Z3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUxJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19MSVNUKCkiPkdTVF9WQUxVRV9IT0xEU19MSVNUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1BUlJBWTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0FSUkFZKCkiPkdTVF9WQUxVRV9IT0xEU19BUlJBWTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1hcHBlbmQtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWXCoCgpIj5nc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1hcHBlbmQtYW5kLXRha2UtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWXCoCgpIj5nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1wcmVwZW5kLXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZcKgKCkiPmdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1jb25jYXQiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9jb25jYXTCoCgpIj5nc3RfdmFsdWVfbGlzdF9jb25jYXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1tZXJnZSIgdGl0bGU9ImdzdF92YWx1ZV9saXN0X21lcmdlwqAoKSI+Z3N0X3ZhbHVlX2xpc3RfbWVyZ2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWdldC1zaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemXCoCgpIj5nc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVmFsdWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlwqAoKSI+Z3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04oKSI+R1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZnJhY3Rpb24iIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uwqAoKSI+Z3N0X3ZhbHVlX3NldF9mcmFjdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tbnVtZXJhdG9yIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3LCoCgpIj5nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tZGVub21pbmF0b3IiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9ywqAoKSI+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWZyYWN0aW9uLW11bHRpcGx5IiB0aXRsZT0iZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5wqAoKSI+Z3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tc3VidHJhY3QiIHRpdGxlPSJnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3TCoCgpIj5nc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRlJBQ1RJT04tUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRSgpIj5HU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0U8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2XCoCgpIj5nc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLXJhbmdlLW1pbiIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluwqAoKSI+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW48L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tcmFuZ2UtbWF4IiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXjCoCgpIj5nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZnJhY3Rpb24tcmFuZ2UtZnVsbCIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbMKgKCkiPmdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1EQVRFLVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUUoKSI+R1NUX1ZBTFVFX0hPTERTX0RBVEVfVElNRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQ0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19DQVBTKCkiPkdTVF9WQUxVRV9IT0xEU19DQVBTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtY2FwcyIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfY2Fwc8KgKCkiPmdzdF92YWx1ZV9zZXRfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfY2Fwc8KgKCkiPmdzdF92YWx1ZV9nZXRfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1DQVBTLUZFQVRVUkVTOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQ0FQU19GRUFUVVJFUygpIj5HU1RfVkFMVUVfSE9MRFNfQ0FQU19GRUFUVVJFUzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWNhcHMtZmVhdHVyZXMiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2NhcHNfZmVhdHVyZXPCoCgpIj5nc3RfdmFsdWVfc2V0X2NhcHNfZmVhdHVyZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHNGZWF0dXJlczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWNhcHMtZmVhdHVyZXMiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2NhcHNfZmVhdHVyZXPCoCgpIj5nc3RfdmFsdWVfZ2V0X2NhcHNfZmVhdHVyZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtU1RSVUNUVVJFOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFKCkiPkdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZcKgKCkiPmdzdF92YWx1ZV9zZXRfc3RydWN0dXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZcKgKCkiPmdzdF92YWx1ZV9nZXRfc3RydWN0dXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUJVRkZFUjpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0JVRkZFUigpIj5HU1RfVkFMVUVfSE9MRFNfQlVGRkVSPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtYnVmZmVyIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9idWZmZXIoKSI+Z3N0X3ZhbHVlX2dldF9idWZmZXI8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1idWZmZXIiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2J1ZmZlcigpIj5nc3RfdmFsdWVfc2V0X2J1ZmZlcjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtdGFrZS1idWZmZXIiIHRpdGxlPSJnc3RfdmFsdWVfdGFrZV9idWZmZXIoKSI+Z3N0X3ZhbHVlX3Rha2VfYnVmZmVyPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1TQU1QTEU6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19TQU1QTEUoKSI+R1NUX1ZBTFVFX0hPTERTX1NBTVBMRTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LXNhbXBsZSIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfc2FtcGxlKCkiPmdzdF92YWx1ZV9nZXRfc2FtcGxlPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtc2FtcGxlIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9zYW1wbGUoKSI+Z3N0X3ZhbHVlX3NldF9zYW1wbGU8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXRha2Utc2FtcGxlIiB0aXRsZT0iZ3N0X3ZhbHVlX3Rha2Vfc2FtcGxlKCkiPmdzdF92YWx1ZV90YWtlX3NhbXBsZTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZUNvbXBhcmVGdW5jIiB0aXRsZT0iR3N0VmFsdWVDb21wYXJlRnVuY8KgKCkiPipHc3RWYWx1ZUNvbXBhcmVGdW5jPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMiIHRpdGxlPSJHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmPCoCgpIj4qR3N0VmFsdWVTZXJpYWxpemVGdW5jPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyIgdGl0bGU9IkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jwqAoKSI+KkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtaXMtZml4ZWQiIHRpdGxlPSJnc3RfdmFsdWVfaXNfZml4ZWTCoCgpIj5nc3RfdmFsdWVfaXNfZml4ZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfdmFsdWVfcmVnaXN0ZXLCoCgpIj5nc3RfdmFsdWVfcmVnaXN0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtaW5pdC1hbmQtY29weSIgdGl0bGU9ImdzdF92YWx1ZV9pbml0X2FuZF9jb3B5wqAoKSI+Z3N0X3ZhbHVlX2luaXRfYW5kX2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXJpYWxpemUiIHRpdGxlPSJnc3RfdmFsdWVfc2VyaWFsaXplwqAoKSI+Z3N0X3ZhbHVlX3NlcmlhbGl6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWRlc2VyaWFsaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplwqAoKSI+Z3N0X3ZhbHVlX2Rlc2VyaWFsaXplPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNvbXBhcmUiIHRpdGxlPSJnc3RfdmFsdWVfY29tcGFyZcKgKCkiPmdzdF92YWx1ZV9jb21wYXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLWNvbXBhcmUiIHRpdGxlPSJnc3RfdmFsdWVfY2FuX2NvbXBhcmXCoCgpIj5nc3RfdmFsdWVfY2FuX2NvbXBhcmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS11bmlvbiIgdGl0bGU9ImdzdF92YWx1ZV91bmlvbsKgKCkiPmdzdF92YWx1ZV91bmlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi11bmlvbiIgdGl0bGU9ImdzdF92YWx1ZV9jYW5fdW5pb27CoCgpIj5nc3RfdmFsdWVfY2FuX3VuaW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc3VidHJhY3QiIHRpdGxlPSJnc3RfdmFsdWVfc3VidHJhY3TCoCgpIj5nc3RfdmFsdWVfc3VidHJhY3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4tc3VidHJhY3QiIHRpdGxlPSJnc3RfdmFsdWVfY2FuX3N1YnRyYWN0wqAoKSI+Z3N0X3ZhbHVlX2Nhbl9zdWJ0cmFjdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWludGVyc2VjdCIgdGl0bGU9ImdzdF92YWx1ZV9pbnRlcnNlY3TCoCgpIj5nc3RfdmFsdWVfaW50ZXJzZWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLWludGVyc2VjdCIgdGl0bGU9ImdzdF92YWx1ZV9jYW5faW50ZXJzZWN0wqAoKSI+Z3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pcy1zdWJzZXQiIHRpdGxlPSJnc3RfdmFsdWVfaXNfc3Vic2V0wqAoKSI+Z3N0X3ZhbHVlX2lzX3N1YnNldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1hcnJheS1hcHBlbmQtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlwqAoKSI+Z3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1hcnJheS1hcHBlbmQtYW5kLXRha2UtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2FuZF90YWtlX3ZhbHVlwqAoKSI+Z3N0X3ZhbHVlX2FycmF5X2FwcGVuZF9hbmRfdGFrZV92YWx1ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWdldC1zaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplwqAoKSI+Z3N0X3ZhbHVlX2FycmF5X2dldF9zaXplPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZcKgKCkiPmdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktcHJlcGVuZC12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlwqAoKSI+Z3N0X3ZhbHVlX2FycmF5X3ByZXBlbmRfdmFsdWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1maXhhdGUiIHRpdGxlPSJnc3RfdmFsdWVfZml4YXRlwqAoKSI+Z3N0X3ZhbHVlX2ZpeGF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HVHlwZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtZmxhZ3NldC1yZWdpc3RlciIgdGl0bGU9ImdzdF9mbGFnc2V0X3JlZ2lzdGVywqAoKSI+Z3N0X2ZsYWdzZXRfcmVnaXN0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VmFsdWUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1GT1VSQ0MtRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfRk9VUkNDX0ZPUk1BVCI+R1NUX0ZPVVJDQ19GT1JNQVQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUlOVC1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfSU5UX1JBTkdFIj5HU1RfVFlQRV9JTlRfUkFOR0U8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUJJVE1BU0s6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0JJVE1BU0siPkdTVF9UWVBFX0JJVE1BU0s8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GTEFHX1NFVCI+R1NUX1RZUEVfRkxBR19TRVQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1GTEFHLVNFVC1NQVNLLUVYQUNUOkNBUFMiIHRpdGxlPSJHU1RfRkxBR19TRVRfTUFTS19FWEFDVCI+R1NUX0ZMQUdfU0VUX01BU0tfRVhBQ1Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUlOVDY0LVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9JTlQ2NF9SQU5HRSI+R1NUX1RZUEVfSU5UNjRfUkFOR0U8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLURPVUJMRS1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRE9VQkxFX1JBTkdFIj5HU1RfVFlQRV9ET1VCTEVfUkFOR0U8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUxJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0xJU1QiPkdTVF9UWVBFX0xJU1Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9BUlJBWSI+R1NUX1RZUEVfQVJSQVk8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTiI+R1NUX1RZUEVfRlJBQ1RJT048L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OLVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSI+R1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1MRVNTLVRIQU46Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9MRVNTX1RIQU4iPkdTVF9WQUxVRV9MRVNTX1RIQU48L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1FUVVBTDpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0VRVUFMIj5HU1RfVkFMVUVfRVFVQUw8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1HUkVBVEVSLVRIQU46Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9HUkVBVEVSX1RIQU4iPkdTVF9WQUxVRV9HUkVBVEVSX1RIQU48L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1VTk9SREVSRUQ6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9VTk9SREVSRUQiPkdTVF9WQUxVRV9VTk9SREVSRUQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZVRhYmxlIiB0aXRsZT0ic3RydWN0IEdzdFZhbHVlVGFibGUiPkdzdFZhbHVlVGFibGU8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZhbHVlLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RWYWx1ZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5HVmFsdWUgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljIHRvIEdTdHJlYW1lci48L3A+Ci08cD5Ob3RlIHRoYXQgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGZyb20gbXVsdGlwbGUgdGhyZWFkcyBtYXkgbGVhZCB0bwotdW5kZWZpbmVkIGJlaGF2aW91ci48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RWYWx1ZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU1BS0UtRk9VUkNDOkNBUFMiPjwvYT48aDM+R1NUX01BS0VfRk9VUkNDKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX01BS0VfRk9VUkNDKGEsYixjLGQpICAgICAgICAoKGd1aW50MzIpKChhKXwoYikmbHQ7Jmx0Ozh8KGMpJmx0OyZsdDsxNnwoZCkmbHQ7Jmx0OzI0KSkKLTwvcHJlPgotPHA+VHJhbnNmb3JtIGZvdXIgY2hhcmFjdGVycyBpbnRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IGZvdXJjYyB2YWx1ZSB3aXRoIGhvc3QKLWVuZGlhbm5lc3MuPC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ndWludDMyIGZvdXJjYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtTUFLRS1GT1VSQ0M6Q0FQUyI+R1NUX01BS0VfRk9VUkNDPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+J00nPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4nSic8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPidQJzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+J0cnPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1NQUtFLUZPVVJDQy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZpcnN0IGNoYXJhY3RlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlY29uZCBjaGFyYWN0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aGlyZCBjaGFyYWN0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3VydGggY2hhcmFjdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1TVFItRk9VUkNDOkNBUFMiPjwvYT48aDM+R1NUX1NUUl9GT1VSQ0MoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfU1RSX0ZPVVJDQyhmKSAgICAgICAgICAgICAgICgoZ3VpbnQzMikoKChmKVswXSl8KChmKVsxXSZsdDsmbHQ7OCl8KChmKVsyXSZsdDsmbHQ7MTYpfCgoZilbM10mbHQ7Jmx0OzI0KSkpCi08L3ByZT4KLTxwPlRyYW5zZm9ybSBhbiBpbnB1dCBzdHJpbmcgaW50byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBmb3VyY2MgdmFsdWUgd2l0aCBob3N0Ci1lbmRpYW5uZXNzLgotQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGUgaW5wdXQgc3RyaW5nIGNvbnNpc3RzIG9mIGF0IGxlYXN0Ci1mb3VyIGNoYXJhY3RlcnMuPC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5ndWludDMyIGZvdXJjYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtU1RSLUZPVVJDQzpDQVBTIj5HU1RfU1RSX0ZPVVJDQzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O01KUEcmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVNUUi1GT1VSQ0MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHN0cmluZyB3aXRoIGF0IGxlYXN0IGZvdXIgY2hhcmFjdGVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUZPVVJDQy1BUkdTOkNBUFMiPjwvYT48aDM+R1NUX0ZPVVJDQ19BUkdTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTKGZvdXJjYyk8L3ByZT4KLTxwPkNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1GT1VSQ0MtRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfRk9VUkNDX0ZPUk1BVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1VSQ0NfRk9STUFUPC9zcGFuPjwvYT4gdG8gcHJvcGVybHkgb3V0cHV0IGEKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBmb3VyY2MgdmFsdWUgaW4gYSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnByaW50ZigpPC9jb2RlPi1zdHlsZSB0ZXh0IG1lc3NhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUZPVVJDQy1BUkdTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mb3VyY2M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBmb3VyY2MgdmFsdWUgdG8gb3V0cHV0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtSU5ULVJBTkdFOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UoeCkgICAgICAoKHgpICE9IE5VTEwgJmFtcDsmYW1wOyBHX1ZBTFVFX1RZUEUoeCkgPT0gX2dzdF9pbnRfcmFuZ2VfdHlwZSkKLTwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBnaXZlbiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvbnRhaW5zIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUlOVC1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfSU5UX1JBTkdFIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfSU5UX1JBTkdFPC9zcGFuPjwvYT4gdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUlOVC1SQU5HRS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWludC1yYW5nZSI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X2ludF9yYW5nZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBzdGFydDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGVuZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbmQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWludC1yYW5nZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVF9SQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGFydCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVuZCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2UtbWluIj48L2E+PGgzPmdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLWdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1taW4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UX1JBTkdFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2UtbWluLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1heCI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBtYXhpbXVtIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2UtbWF4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVF9SQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1heC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBtYXhpbXVtIG9mIHRoZSByYW5nZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWludC1yYW5nZS1zdGVwIj48L2E+PGgzPmdzdF92YWx1ZV9zZXRfaW50X3JhbmdlX3N0ZXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfc2V0X2ludF9yYW5nZV9zdGVwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBlbmQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHN0ZXA8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPgotLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5kPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGVwPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1pbnQtcmFuZ2Utc3RlcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVF9SQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGFydCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVuZCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RlcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGVwIG9mIHRoZSByYW5nZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1zdGVwIj48L2E+PGgzPmdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX3N0ZXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9zdGVwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgc3RlcCBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtaW50LXJhbmdlLXN0ZXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UX1JBTkdFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2Utc3RlcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBzdGVwIG9mIHRoZSByYW5nZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtQklUTUFTSzpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19CSVRNQVNLKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0JJVE1BU0soeCkgICAgICAoKHgpICE9IE5VTEwgJmFtcDsmYW1wOyBHX1ZBTFVFX1RZUEUoeCkgPT0gX2dzdF9iaXRtYXNrX3R5cGUpCi08L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1CSVRNQVNLOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9CSVRNQVNLIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfQklUTUFTSzwvc3Bhbj48L2E+IHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1CSVRNQVNLLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD54PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtYml0bWFzayI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X2JpdG1hc2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfc2V0X2JpdG1hc2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBiaXRtYXNrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIGJpdG1hc2sgc3BlY2lmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaXRtYXNrPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1iaXRtYXNrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUJJVE1BU0s6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0JJVE1BU0siPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9CSVRNQVNLPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Yml0bWFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBiaXRtYXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtYml0bWFzayI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2JpdG1hc2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfZ2V0X2JpdG1hc2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBiaXRtYXNrIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWJpdG1hc2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUJJVE1BU0s6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0JJVE1BU0siPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9CSVRNQVNLPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWJpdG1hc2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgYml0bWFzay48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUZMQUctU0VUOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUKHgpICAgICAoR19UWVBFX0NIRUNLX1ZBTFVFX1RZUEUgKCh4KSwgR1NUX1RZUEVfRkxBR19TRVQpKQotPC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29udGFpbnMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZMQUdfU0VUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRkxBR19TRVQ8L3NwYW4+PC9hPiB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtRkxBRy1TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPng8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXN0cnVjdHVyZS1nZXQtZmxhZ3NldCI+PC9hPjxoMz5nc3Rfc3RydWN0dXJlX2dldF9mbGFnc2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3Rfc3RydWN0dXJlX2dldF9mbGFnc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmllbGRuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICp2YWx1ZV9mbGFnczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAqdmFsdWVfbWFzazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIHRoZSBHc3RGbGFnU2V0IGZsYWdzIGFuZCBtYXNrIG91dCBvZiB0aGUgc3RydWN0dXJlIGludG8gdGhlCi1wcm92aWRlZCBwb2ludGVycy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3Qtc3RydWN0dXJlLWdldC1mbGFnc2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmllbGRuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5hbWUgb2YgYSBmaWVsZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZV9mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgdG8gYSBndWludCBmb3IgdGhlIGZsYWdzIGZpZWxkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZV9tYXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgcG9pbnRlciB0byBhIGd1aW50IGZvciB0aGUgbWFzayBmaWVsZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1zdHJ1Y3R1cmUtZ2V0LWZsYWdzZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlcyBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKLXdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpZWxkbmFtZTwvY29kZT48L2VtPgotb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIEdzdEZsYWdTZXQsIHRoaXMKLWZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZmxhZ3NldC1mbGFncyI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFncyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlIHRoZSBmbGFncyBmaWVsZCBvZiBhIEdzdEZsYWdTZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mbGFnc2V0LWZsYWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GTEFHLVNFVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRkxBR19TRVQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GTEFHX1NFVDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mbGFnc2V0LWZsYWdzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGZsYWdzIGZpZWxkIG9mIHRoZSBmbGFnc2V0IGluc3RhbmNlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWZsYWdzZXQtbWFzayI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfbWFza8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZSB0aGUgbWFzayBmaWVsZCBvZiBhIEdzdEZsYWdTZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mbGFnc2V0LW1hc2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GTEFHX1NFVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZMQUdfU0VUPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWZsYWdzZXQtbWFzay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBtYXNrIGZpZWxkIG9mIHRoZSBmbGFnc2V0IGluc3RhbmNlLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWZsYWdzZXQiPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9mbGFnc2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZhbHVlX3NldF9mbGFnc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG1hc2s8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB0byB0aGUgZmxhZ3MgYW5kIG1hc2sgdmFsdWVzIHByb3ZpZGVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPgotLgotVGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbGFnczwvY29kZT48L2VtPgotIHZhbHVlIGluZGljYXRlcyB0aGUgdmFsdWVzIG9mIGZsYWdzLCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT4KLSByZXByZXNlbnRzCi13aGljaCBiaXRzIGluIHRoZSBmbGFnIHZhbHVlIGhhdmUgYmVlbiBzZXQsIGFuZCB3aGljaCBhcmUgImRvbid0IGNhcmUiPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1mbGFnc2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GTEFHX1NFVCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9UWVBFX0ZMQUdfU0VUPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgdmFsdWUgb2YgdGhlIGZsYWdzIHNldCBvciB1bnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG1hc2sgaW5kaWNhdGUgd2hpY2ggZmxhZ3MgYml0cyBtdXN0IG1hdGNoIGZvciBjb21wYXJpc29uczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtSU5UNjQtUkFOR0U6Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UoeCkgICAgKCh4KSAhPSBOVUxMICZhbXA7JmFtcDsgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfaW50NjRfcmFuZ2VfdHlwZSkKLTwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBnaXZlbiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvbnRhaW5zIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUlOVDY0LVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9JTlQ2NF9SQU5HRSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0lOVDY0X1JBTkdFPC9zcGFuPjwvYT4gdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUlOVDY0LVJBTkdFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD54PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtaW50NjQtcmFuZ2UiPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gZW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVuZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtaW50NjQtcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlQ2NF9SQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGFydCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVuZCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1taW4iPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW7CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBtaW5pbXVtIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1taW4ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UNjRfUkFOR0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLW1pbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBtaW5pbXVtIG9mIHRoZSByYW5nZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLW1heCI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLW1heC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlQ2NF9SQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWF4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtaW50NjQtcmFuZ2Utc3RlcCI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlX3N0ZXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlX3N0ZXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IGVuZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RlcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0sIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbmQ8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0ZXA8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWludDY0LXJhbmdlLXN0ZXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlQ2NF9SQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGFydCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVuZCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RlcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdGVwIG9mIHRoZSByYW5nZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLXN0ZXAiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9zdGVwwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4KLWdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2Vfc3RlcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIHN0ZXAgb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLXN0ZXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UNjRfUkFOR0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLXN0ZXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgc3RlcCBvZiB0aGUgcmFuZ2U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLURPVUJMRS1SQU5HRTpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFKHgpICAgKCh4KSAhPSBOVUxMICZhbXA7JmFtcDsgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfZG91YmxlX3JhbmdlX3R5cGUpCi08L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1ET1VCTEUtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0RPVUJMRV9SQU5HRSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0RPVUJMRV9SQU5HRTwvc3Bhbj48L2E+IHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1ET1VCTEUtUkFOR0UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPng8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1kb3VibGUtcmFuZ2UiPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gc3RhcnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBlbmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW5kPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1kb3VibGUtcmFuZ2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9ET1VCTEVfUkFOR0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RhcnQgb2YgdGhlIHJhbmdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVuZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbmQgb2YgdGhlIHJhbmdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1pbiI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW7CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBtaW5pbXVtIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWluLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0RPVUJMRV9SQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1pbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBtaW5pbXVtIG9mIHRoZSByYW5nZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWRvdWJsZS1yYW5nZS1tYXgiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZG91YmxlLXJhbmdlLW1heC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9ET1VCTEVfUkFOR0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWRvdWJsZS1yYW5nZS1tYXgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUxJU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfSE9MRFNfTElTVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19MSVNUKHgpICAgICAgICAgKCh4KSAhPSBOVUxMICZhbXA7JmFtcDsgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfdmFsdWVfbGlzdF90eXBlKQotPC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29udGFpbnMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfTElTVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0xJU1Q8L3NwYW4+PC9hPiB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtTElTVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtQVJSQVk6Q0FQUyI+PC9hPjxoMz5HU1RfVkFMVUVfSE9MRFNfQVJSQVkoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfQVJSQVkoeCkgICAgICAgICgoeCkgIT0gTlVMTCAmYW1wOyZhbXA7IEdfVkFMVUVfVFlQRSh4KSA9PSBfZ3N0X3ZhbHVlX2FycmF5X3R5cGUpCi08L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1BUlJBWTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfQVJSQVkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9BUlJBWTwvc3Bhbj48L2E+IHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1BUlJBWS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtbGlzdC1hcHBlbmQtdmFsdWUiPjwvYT48aDM+Z3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICphcHBlbmRfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXBwZW5kcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXBwZW5kX3ZhbHVlPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIEdzdFZhbHVlTGlzdCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtbGlzdC1hcHBlbmQtdmFsdWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfTElTVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0xJU1Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcHBlbmRfdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHZhbHVlIHRvIGFwcGVuZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWFwcGVuZC1hbmQtdGFrZS12YWx1ZSI+PC9hPjxoMz5nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmFwcGVuZF92YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BcHBlbmRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcHBlbmRfdmFsdWU8L2NvZGU+PC9lbT4KLSB0byB0aGUgR3N0VmFsdWVMaXN0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWFwcGVuZC1hbmQtdGFrZS12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9MSVNUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfTElTVDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFwcGVuZF92YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgdmFsdWUgdG8gYXBwZW5kLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA4Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWxpc3QtcHJlcGVuZC12YWx1ZSI+PC9hPjxoMz5nc3RfdmFsdWVfbGlzdF9wcmVwZW5kX3ZhbHVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnByZXBlbmRfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlcGVuZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZXBlbmRfdmFsdWU8L2NvZGU+PC9lbT4KLSB0byB0aGUgR3N0VmFsdWVMaXN0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LXByZXBlbmQtdmFsdWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfTElTVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0xJU1Q8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcmVwZW5kX3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHZhbHVlIHRvIHByZXBlbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWxpc3QtY29uY2F0Ij48L2E+PGgzPmdzdF92YWx1ZV9saXN0X2NvbmNhdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF92YWx1ZV9saXN0X2NvbmNhdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uY2F0ZW5hdGVzIGNvcGllcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTI8L2NvZGU+PC9lbT4KLSBpbnRvIGEgbGlzdC4gIFZhbHVlcyB0aGF0IGFyZSBub3QKLW9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUxJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0xJU1QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9MSVNUPC9zcGFuPjwvYT4gYXJlIHRyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlIGxpc3RzIG9mIGxlbmd0aCAxLgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIGluaXRpYWxpemVkIHRvIHRoZSB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9MSVNUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfTElTVDwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWNvbmNhdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGFuIHVuaW5pdGlhbGl6ZWQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byB0YWtlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlci1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWUyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LW1lcmdlIj48L2E+PGgzPmdzdF92YWx1ZV9saXN0X21lcmdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5NZXJnZXMgY29waWVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPgotLiAgVmFsdWVzIHRoYXQgYXJlIG5vdAotb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtTElTVDpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfTElTVCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0xJU1Q8L3NwYW4+PC9hPiBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgbGlzdHMgb2YgbGVuZ3RoIDEuPC9wPgotPHA+VGhlIHJlc3VsdCB3aWxsIGJlIHB1dCBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+Ci0gYW5kIHdpbGwgZWl0aGVyIGJlIGEgbGlzdCB0aGF0IHdpbGwgbm90Ci1jb250YWluIGFueSBkdXBsaWNhdGVzLCBvciBhIG5vbi1saXN0IHR5cGUgKGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPgotCi13ZXJlIGVxdWFsKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtbGlzdC1tZXJnZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGFuIHVuaW5pdGlhbGl6ZWQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byB0YWtlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlci1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWUyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWdldC1zaXplIj48L2E+PGgzPmdzdF92YWx1ZV9saXN0X2dldF9zaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIG51bWJlciBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWdldC1zaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9MSVNUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfTElTVDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWxpc3QtZ2V0LXNpemUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbnVtYmVyIG9mIHZhbHVlczwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtbGlzdC1nZXQtdmFsdWUiPjwvYT48aDM+Z3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT7CoCoKLWdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhIG1lbWJlciBvZiB0aGUgbGlzdCBjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gYW5kCi1oYXMgdGhlIGluZGV4IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmRleDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWdldC12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9MSVNUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfTElTVDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluZGV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aW5kZXggb2YgdmFsdWUgdG8gZ2V0IGZyb20gdGhlIGxpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1saXN0LWdldC12YWx1ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gaW5kZXguIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1GUkFDVElPTjpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19GUkFDVElPTigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTih4KSAgICAgKCh4KSAhPSBOVUxMICZhbXA7JmFtcDsgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfZnJhY3Rpb25fdHlwZSkKLTwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBnaXZlbiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvbnRhaW5zIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZSQUNUSU9OPC9zcGFuPjwvYT4gdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUZSQUNUSU9OLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD54PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtZnJhY3Rpb24iPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9mcmFjdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gbnVtZXJhdG9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbWluYXRvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIHRvIHRoZSBmcmFjdGlvbiBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bWVyYXRvcjwvY29kZT48L2VtPgotIG92ZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlbm9taW5hdG9yPC9jb2RlPjwvZW0+Ci0uCi1UaGUgZnJhY3Rpb24gZ2V0cyByZWR1Y2VkIHRvIHRoZSBzbWFsbGVzdCBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yLAotYW5kIGlmIG5lY2Vzc2FyeSB0aGUgc2lnbiBpcyBtb3ZlZCB0byB0aGUgbnVtZXJhdG9yLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtZnJhY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRlJBQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZSQUNUSU9OIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRlJBQ1RJT048L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW1lcmF0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtZXJhdG9yIG9mIHRoZSBmcmFjdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW5vbWluYXRvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkZW5vbWluYXRvciBvZiB0aGUgZnJhY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1udW1lcmF0b3IiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIG51bWVyYXRvciBvZiB0aGUgZnJhY3Rpb24gc3BlY2lmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZnJhY3Rpb24tbnVtZXJhdG9yLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1udW1lcmF0b3IucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbnVtZXJhdG9yIG9mIHRoZSBmcmFjdGlvbi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1kZW5vbWluYXRvciI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9ywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBmcmFjdGlvbiBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1kZW5vbWluYXRvci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRlJBQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZSQUNUSU9OIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRlJBQ1RJT048L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZnJhY3Rpb24tZGVub21pbmF0b3IucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgZGVub21pbmF0b3Igb2YgdGhlIGZyYWN0aW9uLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZnJhY3Rpb24tbXVsdGlwbHkiPjwvYT48aDM+Z3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfZnJhY3Rpb25fbXVsdGlwbHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpwcm9kdWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZmFjdG9yMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmZhY3RvcjI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TXVsdGlwbGllcyB0aGUgdHdvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gaXRlbXMgY29udGFpbmluZyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+IGFuZCBzZXRzCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJvZHVjdDwvY29kZT48L2VtPgotIHRvIHRoZSBwcm9kdWN0IG9mIHRoZSB0d28gZnJhY3Rpb25zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1mcmFjdGlvbi1tdWx0aXBseS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9kdWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZSQUNUSU9OPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFjdG9yMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3RvcjI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRlJBQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZSQUNUSU9OIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRlJBQ1RJT048L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWZyYWN0aW9uLW11bHRpcGx5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaW4gY2FzZSBvZiBhbiBlcnJvciAobGlrZSBpbnRlZ2VyIG92ZXJmbG93KSwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWZyYWN0aW9uLXN1YnRyYWN0Ij48L2E+PGgzPmdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKm1pbnVlbmQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzdWJ0cmFoZW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN1YnRyYWN0cyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1YnRyYWhlbmQ8L2NvZGU+PC9lbT4KLSBmcm9tIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludWVuZDwvY29kZT48L2VtPgotIGFuZCBzZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+Ci0gdG8gdGhlIHJlc3VsdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZnJhY3Rpb24tc3VidHJhY3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9GUkFDVElPTjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbnVlbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRlJBQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZSQUNUSU9OIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRlJBQ1RJT048L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdWJ0cmFoZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTiI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0ZSQUNUSU9OPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1mcmFjdGlvbi1zdWJ0cmFjdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGluIGNhc2Ugb2YgYW4gZXJyb3IgKGxpa2UgaW50ZWdlciBvdmVyZmxvdyksIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1GUkFDVElPTi1SQU5HRTpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRSh4KSAoKHgpICE9IE5VTEwgJmFtcDsmYW1wOyBHX1ZBTFVFX1RZUEUoeCkgPT0gX2dzdF9mcmFjdGlvbl9yYW5nZV90eXBlKQotPC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29udGFpbnMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRlJBQ1RJT04tUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U8L3NwYW4+PC9hPiB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtRlJBQ1RJT04tUkFOR0UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPng8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZSI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnN0YXJ0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmVuZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0YXJ0PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbmQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWZyYWN0aW9uLXJhbmdlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RhcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RhcnQgb2YgdGhlIHJhbmdlIChhIEdTVF9UWVBFX0ZSQUNUSU9OIEdWYWx1ZSk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGVuZCBvZiB0aGUgcmFuZ2UgKGEgR1NUX1RZUEVfRlJBQ1RJT04gR1ZhbHVlKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLXJhbmdlLW1pbiI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi1nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLXJhbmdlLW1pbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZnJhY3Rpb24tcmFuZ2UtbWluLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZnJhY3Rpb24tcmFuZ2UtbWF4Ij48L2E+PGgzPmdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1ZhbHVlPC9zcGFuPjwvYT7CoCoKLWdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtZnJhY3Rpb24tcmFuZ2UtbWF4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1yYW5nZS1tYXgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZS1mdWxsIj48L2E+PGgzPmdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IG51bWVyYXRvcl9zdGFydDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBkZW5vbWluYXRvcl9zdGFydDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBudW1lcmF0b3JfZW5kPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGRlbm9taW5hdG9yX2VuZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bWVyYXRvcl9zdGFydDwvY29kZT48L2VtPgotLzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW5vbWluYXRvcl9zdGFydDwvY29kZT48L2VtPgotCi1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bWVyYXRvcl9lbmQ8L2NvZGU+PC9lbT4KLS88ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVub21pbmF0b3JfZW5kPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZS1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bnVtZXJhdG9yX3N0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWVyYXRvciBzdGFydCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVub21pbmF0b3Jfc3RhcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGVub21pbmF0b3Igc3RhcnQgb2YgdGhlIHJhbmdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm51bWVyYXRvcl9lbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtZXJhdG9yIGVuZCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVub21pbmF0b3JfZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRlbm9taW5hdG9yIGVuZCBvZiB0aGUgcmFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLURBVEUtVElNRTpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FKHgpICAgICgoeCkgIT0gTlVMTCAmYW1wOyZhbXA7IEdfVkFMVUVfVFlQRSh4KSA9PSBfZ3N0X2RhdGVfdGltZV90eXBlKQotPC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29udGFpbnMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNHU1QtVFlQRS1EQVRFLVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0RBVEVfVElNRSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0RBVEVfVElNRTwvc3Bhbj48L2E+IHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1EQVRFLVRJTUUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPng8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVZBTFVFLUhPTERTLUNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX0NBUFMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfQ0FQUyh4KSAgICAgICAgICgoeCkgIT0gTlVMTCAmYW1wOyZhbXA7IEdfVkFMVUVfVFlQRSh4KSA9PSBfZ3N0X2NhcHNfdHlwZSkKLTwvcHJlPgotPHA+Q2hlY2tzIGlmIHRoZSBnaXZlbiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGNvbnRhaW5zIGEgPHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0NBUFM8L3NwYW4+IHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1DQVBTLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD54PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtY2FwcyI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfc2V0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0uIEEgcmVmZXJlbmNlIHRvIHRoZQotcHJvdmlkZWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhcHM8L2NvZGU+PC9lbT4KLSB3aWxsIGJlIHRha2VuIGJ5IHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9DQVBTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGNhcHMgdG8gc2V0IHRoZSB2YWx1ZSB0by4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtY2FwcyI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF92YWx1ZV9nZXRfY2FwcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSByZXR1cm5lZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gd2lsbCBub3QgYmUgbW9kaWZpZWQsIHRoZXJlZm9yZSB0aGUgY2FsbGVyIG11c3QgdGFrZSBvbmUKLWJlZm9yZSBnZXR0aW5nIHJpZCBvZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0NBUFM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWNhcHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY29udGVudHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1DQVBTLUZFQVRVUkVTOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX0NBUFNfRkVBVFVSRVMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfQ0FQU19GRUFUVVJFUyh4KSAgICAgICAgKEdfVkFMVUVfSE9MRFMoKHgpLCBfZ3N0X2NhcHNfZmVhdHVyZXNfdHlwZSkpCi08L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9DQVBTX0ZFQVRVUkVTPC9zcGFuPiB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtQ0FQUy1GRUFUVVJFUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIGNoZWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWNhcHMtZmVhdHVyZXMiPjwvYT48aDM+Z3N0X3ZhbHVlX3NldF9jYXBzX2ZlYXR1cmVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZhbHVlX3NldF9jYXBzX2ZlYXR1cmVzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmVhdHVyZXM8L3NwYW4+PC9hPiAqZmVhdHVyZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgY29udGVudHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZlYXR1cmVzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1jYXBzLWZlYXR1cmVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfQ0FQU19GRUFUVVJFUzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mZWF0dXJlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmZWF0dXJlcyB0byBzZXQgdGhlIHZhbHVlIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtY2Fwcy1mZWF0dXJlcyI+PC9hPjxoMz5nc3RfdmFsdWVfZ2V0X2NhcHNfZmVhdHVyZXPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwc0ZlYXR1cmVzPC9zcGFuPjwvYT7CoCoKLWdzdF92YWx1ZV9nZXRfY2Fwc19mZWF0dXJlcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtY2Fwcy1mZWF0dXJlcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9DQVBTX0ZFQVRVUkVTPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1jYXBzLWZlYXR1cmVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtU1RSVUNUVVJFOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUoeCkgICAgICAgICAgICAoR19WQUxVRV9IT0xEUygoeCksIF9nc3Rfc3RydWN0dXJlX3R5cGUpKQotPC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIGdpdmVuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gY29udGFpbnMgYSA8c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfU1RSVUNUVVJFPC9zcGFuPiB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtU1RSVUNUVVJFLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD54PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gY2hlY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtc3RydWN0dXJlIj48L2E+PGgzPmdzdF92YWx1ZV9zZXRfc3RydWN0dXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gKnN0cnVjdHVyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBjb250ZW50cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RydWN0dXJlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNldC1zdHJ1Y3R1cmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9TVFJVQ1RVUkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0dXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0cnVjdHVyZSB0byBzZXQgdGhlIHZhbHVlIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtc3RydWN0dXJlIj48L2E+PGgzPmdzdF92YWx1ZV9nZXRfc3RydWN0dXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqCi1nc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtc3RydWN0dXJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX1NUUlVDVFVSRTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtc3RydWN0dXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtQlVGRkVSOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX0JVRkZFUigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19CVUZGRVIoeCkgICAgICAgKCh4KSAhPSBOVUxMICZhbXA7JmFtcDsgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfYnVmZmVyX3R5cGUpCi08L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9CVUZGRVI8L3NwYW4+IHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1CVUZGRVIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPng8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1idWZmZXIiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9idWZmZXIoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV9nZXRfYnVmZmVyKHYpICAgICAgICAgR1NUX0JVRkZFUl9DQVNUIChnX3ZhbHVlX2dldF9ib3hlZCh2KSkKLTwvcHJlPgotPHA+UmVjZWl2ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBhcyB0aGUgdmFsdWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnY8L2NvZGU+PC9lbT4KLS4gRG9lcyBub3QgcmV0dXJuIGEgcmVmZXJlbmNlIHRvCi10aGUgYnVmZmVyLCBzbyB0aGUgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSBjYWxsZXIgb3ducwotYSByZWZlcmVuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnY8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+djwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtYnVmZmVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYnVmZmVyLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LWJ1ZmZlciI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X2J1ZmZlcigpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X3ZhbHVlX3NldF9idWZmZXIodixiKSAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCgodiksKGIpKQotPC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXMgdGhlIHZhbHVlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52PC9jb2RlPjwvZW0+Ci0uICBDYWxsZXIgcmV0YWlucyByZWZlcmVuY2UgdG8gYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtYnVmZmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gcmVjZWl2ZSB0aGUgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gYXNzaWduIHRvIHRoZSBHc3RWYWx1ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS10YWtlLWJ1ZmZlciI+PC9hPjxoMz5nc3RfdmFsdWVfdGFrZV9idWZmZXIoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV90YWtlX2J1ZmZlcih2LGIpICAgICAgZ192YWx1ZV90YWtlX2JveGVkKHYsKGIpKQotPC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXMgdGhlIHZhbHVlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52PC9jb2RlPjwvZW0+Ci0uICBDYWxsZXIgZ2l2ZXMgYXdheSByZWZlcmVuY2UgdG8gYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS10YWtlLWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIHJlY2VpdmUgdGhlIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHRvIGFzc2lnbiB0byB0aGUgR3N0VmFsdWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtSE9MRFMtU0FNUExFOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0hPTERTX1NBTVBMRSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19TQU1QTEUoeCkgICAgICAgKCh4KSAhPSBOVUxMICZhbXA7JmFtcDsgR19WQUxVRV9UWVBFKHgpID09IF9nc3Rfc2FtcGxlX3R5cGUpCi08L3ByZT4KLTxwPkNoZWNrcyBpZiB0aGUgZ2l2ZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBjb250YWlucyBhIDxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9TQU1QTEU8L3NwYW4+IHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1IT0xEUy1TQU1QTEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPng8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWdldC1zYW1wbGUiPjwvYT48aDM+Z3N0X3ZhbHVlX2dldF9zYW1wbGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV9nZXRfc2FtcGxlKHYpICAgICAgICAgR1NUX1NBTVBMRV9DQVNUIChnX3ZhbHVlX2dldF9ib3hlZCh2KSkKLTwvcHJlPgotPHA+UmVjZWl2ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPiBhcyB0aGUgdmFsdWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnY8L2NvZGU+PC9lbT4KLS4gRG9lcyBub3QgcmV0dXJuIGEgcmVmZXJlbmNlIHRvCi10aGUgc2FtcGxlLCBzbyB0aGUgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSBjYWxsZXIgb3ducwotYSByZWZlcmVuY2UgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnY8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZ2V0LXNhbXBsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+djwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1nZXQtc2FtcGxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gc2FtcGxlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtc2V0LXNhbXBsZSI+PC9hPjxoMz5nc3RfdmFsdWVfc2V0X3NhbXBsZSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgZ3N0X3ZhbHVlX3NldF9zYW1wbGUodixiKSAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCgodiksKGIpKQotPC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXMgdGhlIHZhbHVlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52PC9jb2RlPjwvZW0+Ci0uICBDYWxsZXIgcmV0YWlucyByZWZlcmVuY2UgdG8gc2FtcGxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXQtc2FtcGxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gcmVjZWl2ZSB0aGUgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2FtcGxlPC9zcGFuPjwvYT4gdG8gYXNzaWduIHRvIHRoZSBHc3RWYWx1ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS10YWtlLXNhbXBsZSI+PC9hPjxoMz5nc3RfdmFsdWVfdGFrZV9zYW1wbGUoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV90YWtlX3NhbXBsZSh2LGIpICAgICAgZ192YWx1ZV90YWtlX2JveGVkKHYsKGIpKQotPC9wcmU+Ci08cD5TZXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXMgdGhlIHZhbHVlIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52PC9jb2RlPjwvZW0+Ci0uICBDYWxsZXIgZ2l2ZXMgYXdheSByZWZlcmVuY2UgdG8gc2FtcGxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS10YWtlLXNhbXBsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHRvIHJlY2VpdmUgdGhlIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+IHRvIGFzc2lnbiB0byB0aGUgR3N0VmFsdWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWYWx1ZUNvbXBhcmVGdW5jIj48L2E+PGgzPkdzdFZhbHVlQ29tcGFyZUZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VmFsdWVDb21wYXJlRnVuYzxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VXNlZCB0b2dldGhlciB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY29tcGFyZSIgdGl0bGU9ImdzdF92YWx1ZV9jb21wYXJlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfY29tcGFyZSgpPC9jb2RlPjwvYT4gdG8gY29tcGFyZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IGl0ZW1zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFZhbHVlQ29tcGFyZUZ1bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWUxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Zmlyc3QgdmFsdWUgZm9yIGNvbXBhcmlzb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWUyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2Vjb25kIHZhbHVlIGZvciBjb21wYXJpc29uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RWYWx1ZUNvbXBhcmVGdW5jLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gb25lIG9mIEdTVF9WQUxVRV9MRVNTX1RIQU4sIEdTVF9WQUxVRV9FUVVBTCwgR1NUX1ZBTFVFX0dSRUFURVJfVEhBTgotb3IgR1NUX1ZBTFVFX1VOT1JERVJFRDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMiPjwvYT48aDM+R3N0VmFsdWVTZXJpYWxpemVGdW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY2hhcjwvc3Bhbj48L2E+wqAqCi08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0VmFsdWVTZXJpYWxpemVGdW5jPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUxPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVzZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXJpYWxpemUiIHRpdGxlPSJnc3RfdmFsdWVfc2VyaWFsaXplwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfc2VyaWFsaXplKCk8L2NvZGU+PC9hPiB0byBvYnRhaW4gYSBub24tYmluYXJ5IGZvcm0gb2YgdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VmFsdWVTZXJpYWxpemVGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMiPjwvYT48aDM+R3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RWYWx1ZURlc2VyaWFsaXplRnVuYzxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVzZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1kZXNlcmlhbGl6ZSIgdGl0bGU9ImdzdF92YWx1ZV9kZXNlcmlhbGl6ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX2Rlc2VyaWFsaXplKCk8L2NvZGU+PC9hPiB0byBwYXJzZSBhIG5vbi1iaW5hcnkgZm9ybSBpbnRvIHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc3RyaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RWYWx1ZURlc2VyaWFsaXplRnVuYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3Igc3VjY2VzczwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtaXMtZml4ZWQiPjwvYT48aDM+Z3N0X3ZhbHVlX2lzX2ZpeGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfaXNfZml4ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UZXN0cyBpZiB0aGUgZ2l2ZW4gR1ZhbHVlLCBpZiBhdmFpbGFibGUgaW4gYSBHc3RTdHJ1Y3R1cmUgKG9yIGFueSBvdGhlcgotY29udGFpbmVyKSBjb250YWlucyBhICJmaXhlZCIgKHdoaWNoIG1lYW5zOiBvbmUgdmFsdWUpIG9yIGFuICJ1bmZpeGVkIgotKHdoaWNoIG1lYW5zOiBtdWx0aXBsZSBwb3NzaWJsZSB2YWx1ZXMsIHN1Y2ggYXMgZGF0YSBsaXN0cyBvciBkYXRhCi1yYW5nZXMpIHZhbHVlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1pcy1maXhlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBjaGVjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1pcy1maXhlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRydWUgaWYgdGhlIHZhbHVlIGlzICJmaXhlZCIuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1yZWdpc3RlciI+PC9hPjxoMz5nc3RfdmFsdWVfcmVnaXN0ZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfcmVnaXN0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVUYWJsZSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZVRhYmxlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVUYWJsZTwvc3Bhbj48L2E+ICp0YWJsZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWdpc3RlcnMgZnVuY3Rpb25zIHRvIHBlcmZvcm0gY2FsY3VsYXRpb25zIG9uIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gaXRlbXMgb2YgYSBnaXZlbgotdHlwZS4gRWFjaCB0eXBlIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXJlZ2lzdGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWJsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnN0cnVjdHVyZSBjb250YWluaW5nIGZ1bmN0aW9ucyB0byByZWdpc3RlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWluaXQtYW5kLWNvcHkiPjwvYT48aDM+Z3N0X3ZhbHVlX2luaXRfYW5kX2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Jbml0aWFsaXNlcyB0aGUgdGFyZ2V0IHZhbHVlIHRvIGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgc291cmNlIGFuZCB0aGVuIGNvcGllcwotdGhlIGNvbnRlbnRzIGZyb20gc291cmNlIHRvIHRhcmdldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtaW5pdC1hbmQtY29weS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSB0YXJnZXQgdmFsdWUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik91dCBwYXJhbWV0ZXIsIHdoZXJlIGNhbGxlciBtdXN0IGFsbG9jYXRlIHN0b3JhZ2UuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0IGNhbGxlci1hbGxvY2F0ZXM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc291cmNlIHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zZXJpYWxpemUiPjwvYT48aDM+Z3N0X3ZhbHVlX3NlcmlhbGl6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKgotZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPnRyaWVzIHRvIHRyYW5zZm9ybSB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci0gaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB0aGF0IGFsbG93cwotZ2V0dGluZyBiYWNrIHRoaXMgc3RyaW5nIGxhdGVyIG9uIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZGVzZXJpYWxpemUiIHRpdGxlPSJnc3RfdmFsdWVfZGVzZXJpYWxpemXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9kZXNlcmlhbGl6ZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNlcmlhbGl6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdG8gc2VyaWFsaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXNlcmlhbGl6ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBzZXJpYWxpemF0aW9uIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBub25lIGV4aXN0cy4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZGVzZXJpYWxpemUiPjwvYT48aDM+Z3N0X3ZhbHVlX2Rlc2VyaWFsaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfZGVzZXJpYWxpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmllcyB0byBkZXNlcmlhbGl6ZSBhIHN0cmluZyBpbnRvIHRoZSB0eXBlIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gR1ZhbHVlLgotSWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcywgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlzIHJldHVybmVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWRlc2VyaWFsaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBmaWxsIHdpdGggY29udGVudHMgb2YKLWRlc2VyaWFsaXphdGlvbi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVyLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnN0cmluZyB0byBkZXNlcmlhbGl6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWRlc2VyaWFsaXplLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IG9uIHN1Y2Nlc3M8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWNvbXBhcmUiPjwvYT48aDM+Z3N0X3ZhbHVlX2NvbXBhcmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfY29tcGFyZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbXBhcmVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPgotLiAgSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+Ci0gY2Fubm90IGJlCi1jb21wYXJlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgR1NUX1ZBTFVFX1VOT1JERVJFRC4gIE90aGVyd2lzZSwKLWlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT4KLSBpcyBncmVhdGVyIHRoYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPgotLCBHU1RfVkFMVUVfR1JFQVRFUl9USEFOIGlzIHJldHVybmVkLgotSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPgotIGlzIGxlc3MgdGhhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+Ci0sIEdTVF9WQUxVRV9MRVNTX1RIQU4gaXMgcmV0dXJuZWQuCi1JZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgR1NUX1ZBTFVFX0VRVUFMIGlzIHJldHVybmVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1jb21wYXJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgdmFsdWUgdG8gY29tcGFyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbm90aGVyIHZhbHVlIHRvIGNvbXBhcmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1jb21wYXJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gY29tcGFyaXNvbiByZXN1bHQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWNhbi1jb21wYXJlIj48L2E+PGgzPmdzdF92YWx1ZV9jYW5fY29tcGFyZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWUyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkRldGVybWluZXMgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+Ci0gY2FuIGJlIGNvbXBhcmVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1jYW4tY29tcGFyZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHZhbHVlIHRvIGNvbXBhcmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWUyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW5vdGhlciB2YWx1ZSB0byBjb21wYXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtY2FuLWNvbXBhcmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlcyBjYW4gYmUgY29tcGFyZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXVuaW9uIj48L2E+PGgzPmdzdF92YWx1ZV91bmlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX3VuaW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgR1ZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVuaW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS11bmlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBkZXN0aW5hdGlvbiB2YWx1ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVyLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgdmFsdWUgdG8gdW5pb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWUyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW5vdGhlciB2YWx1ZSB0byB1bmlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXVuaW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB1bmlvbiBzdWNjZWVkZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1jYW4tdW5pb24iPjwvYT48aDM+Z3N0X3ZhbHVlX2Nhbl91bmlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2Nhbl91bmlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RGV0ZXJtaW5lcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTI8L2NvZGU+PC9lbT4KLSBjYW4gYmUgbm9uLXRyaXZpYWxseSB1bmlvbmVkLgotQW55IHR3byB2YWx1ZXMgY2FuIGJlIHRyaXZpYWxseSB1bmlvbmVkIGJ5IGFkZGluZyBib3RoIG9mIHRoZW0KLXRvIGEgR3N0VmFsdWVMaXN0LiAgSG93ZXZlciwgY2VydGFpbiB0eXBlcyBoYXZlIHRoZSBwb3NzaWJpbGl0eQotdG8gYmUgdW5pb25lZCBpbiBhIHNpbXBsZXIgd2F5LiAgRm9yIGV4YW1wbGUsIGFuIGludGVnZXIgcmFuZ2UKLWFuZCBhbiBpbnRlZ2VyIGNhbiBiZSB1bmlvbmVkIGlmIHRoZSBpbnRlZ2VyIGlzIGEgc3Vic2V0IG9mIHRoZQotaW50ZWdlciByYW5nZS4gIElmIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHR3byB2YWx1ZXMgY2FuCi1iZSB1bmlvbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1jYW4tdW5pb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWUxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSB2YWx1ZSB0byB1bmlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbm90aGVyIHZhbHVlIHRvIHVuaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtY2FuLXVuaW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZXJlIGlzIGEgZnVuY3Rpb24gYWxsb3dpbmcgdGhlIHR3byB2YWx1ZXMgdG8KLWJlIHVuaW9uZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1zdWJ0cmFjdCI+PC9hPjxoMz5nc3RfdmFsdWVfc3VidHJhY3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF92YWx1ZV9zdWJ0cmFjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmRlc3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICptaW51ZW5kPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqc3VidHJhaGVuZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TdWJ0cmFjdHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1YnRyYWhlbmQ8L2NvZGU+PC9lbT4KLSBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5taW51ZW5kPC9jb2RlPjwvZW0+Ci0gYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+Ci0uCi1Ob3RlIHRoYXQgdGhpcyBtZWFucyBzdWJ0cmFjdGlvbiBhcyBpbiBzZXRzLCBub3QgYXMgaW4gbWF0aGVtYXRpY3MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXN1YnRyYWN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIGRlc3RpbmF0aW9uIHZhbHVlCi1mb3IgdGhlIHJlc3VsdCBpZiB0aGUgc3VidHJhY3Rpb24gaXMgbm90IGVtcHR5LiBNYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LAotaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0aW5nIHNldCB3aWxsIG5vdCBiZSBjb21wdXRlZCwgd2hpY2ggY2FuCi1naXZlIGEgZmFpciBzcGVlZHVwLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJPdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dCBjYWxsZXItYWxsb2NhdGVzPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW51ZW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHZhbHVlIHRvIHN1YnRyYWN0IGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3VidHJhaGVuZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB2YWx1ZSB0byBzdWJ0cmFjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLXN1YnRyYWN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzdWJ0cmFjdGlvbiBpcyBub3QgZW1wdHk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWNhbi1zdWJ0cmFjdCI+PC9hPjxoMz5nc3RfdmFsdWVfY2FuX3N1YnRyYWN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdmFsdWVfY2FuX3N1YnRyYWN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqbWludWVuZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpzdWJ0cmFoZW5kPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiBpdCdzIHBvc3NpYmxlIHRvIHN1YnRyYWN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJ0cmFoZW5kPC9jb2RlPjwvZW0+Ci0gZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWludWVuZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1jYW4tc3VidHJhY3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWludWVuZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN1YnRyYWhlbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdmFsdWUgdG8gc3VidHJhY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1jYW4tc3VidHJhY3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdWJ0cmFjdGlvbiBpcyBwb3NzaWJsZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtaW50ZXJzZWN0Ij48L2E+PGgzPmdzdF92YWx1ZV9pbnRlcnNlY3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF92YWx1ZV9pbnRlcnNlY3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byB2YWx1ZXMuICBJZiB0aGUgdmFsdWVzIGhhdmUKLWEgbm9uLWVtcHR5IGludGVyc2VjdGlvbiwgdGhlIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgaW50ZXJzZWN0aW9uCi1pcyBwbGFjZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLSwgdW5sZXNzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gIElmIHRoZSBpbnRlcnNlY3Rpb24gaXMgbm9uLWVtcHR5LAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLSBpcyBub3QgbW9kaWZpZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWludGVyc2VjdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ICBhIHVuaW5pdGlhbGl6ZWQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0aGF0IHdpbGwgaG9sZCB0aGUgY2FsY3VsYXRlZAotaW50ZXJzZWN0aW9uIHZhbHVlLiBNYXkgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSByZXN1bHRpbmcgc2V0IGlmIG5vdAotbmVlZGVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJPdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dCBjYWxsZXItYWxsb2NhdGVzPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHZhbHVlIHRvIGludGVyc2VjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbm90aGVyIHZhbHVlIHRvIGludGVyc2VjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWludGVyc2VjdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgaW50ZXJzZWN0aW9uIGlzIG5vbi1lbXB0eTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtY2FuLWludGVyc2VjdCI+PC9hPjxoMz5nc3RfdmFsdWVfY2FuX2ludGVyc2VjdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZXRlcm1pbmVzIGlmIGludGVyc2VjdGluZyB0d28gdmFsdWVzIHdpbGwgcHJvZHVjZSBhIHZhbGlkIHJlc3VsdC4KLVR3byB2YWx1ZXMgd2lsbCBwcm9kdWNlIGEgdmFsaWQgaW50ZXJzZWN0aW9uIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZQotdHlwZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtY2FuLWludGVyc2VjdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHZhbHVlIHRvIGludGVyc2VjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hbm90aGVyIHZhbHVlIHRvIGludGVyc2VjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWNhbi1pbnRlcnNlY3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlcyBjYW4gaW50ZXJzZWN0PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1pcy1zdWJzZXQiPjwvYT48aDM+Z3N0X3ZhbHVlX2lzX3N1YnNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3ZhbHVlX2lzX3N1YnNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUxPC9jb2RlPjwvZW0+Ci0gaXMgYSBzdWJzZXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlMjwvY29kZT48L2VtPgotLjwvcD4KLTxwPlJldHVybjogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTE8L2NvZGU+PC9lbT4KLSBpcyBhIHN1YnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWUyPC9jb2RlPjwvZW0+Ci08L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtaXMtc3Vic2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlMTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXZhbHVlLWFycmF5LWFwcGVuZC12YWx1ZSI+PC9hPjxoMz5nc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKmFwcGVuZF92YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BcHBlbmRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcHBlbmRfdmFsdWU8L2NvZGU+PC9lbT4KLSB0byB0aGUgR3N0VmFsdWVBcnJheSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtYXJyYXktYXBwZW5kLXZhbHVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9BUlJBWSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0FSUkFZPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXBwZW5kX3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHZhbHVlIHRvIGFwcGVuZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtYXJyYXktYXBwZW5kLWFuZC10YWtlLXZhbHVlIj48L2E+PGgzPmdzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2FuZF90YWtlX3ZhbHVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqYXBwZW5kX3ZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFwcGVuZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFwcGVuZF92YWx1ZTwvY29kZT48L2VtPgotIHRvIHRoZSBHc3RWYWx1ZUFycmF5IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1hcnJheS1hcHBlbmQtYW5kLXRha2UtdmFsdWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtQVJSQVk6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0FSUkFZIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfQVJSQVk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcHBlbmRfdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHZhbHVlIHRvIGFwcGVuZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwOC5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1hcnJheS1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIG51bWJlciBvZiB2YWx1ZXMgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1hcnJheS1nZXQtc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gb2YgdHlwZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtQVJSQVk6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0FSUkFZIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfQVJSQVk8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1hcnJheS1nZXQtc2l6ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBudW1iZXIgb2YgdmFsdWVzPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1hcnJheS1nZXQtdmFsdWUiPjwvYT48aDM+Z3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdWYWx1ZTwvc3Bhbj48L2E+wqAqCi1nc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5kZXg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhIG1lbWJlciBvZiB0aGUgYXJyYXkgY29udGFpbmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGFuZAotaGFzIHRoZSBpbmRleCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5kZXg8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtYXJyYXktZ2V0LXZhbHVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IG9mIHR5cGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9BUlJBWSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UWVBFX0FSUkFZPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5kZXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbmRleCBvZiB2YWx1ZSB0byBnZXQgZnJvbSB0aGUgYXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1hcnJheS1nZXQtdmFsdWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGluZGV4LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtYXJyYXktcHJlcGVuZC12YWx1ZSI+PC9hPjxoMz5nc3RfdmFsdWVfYXJyYXlfcHJlcGVuZF92YWx1ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiAqdmFsdWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnByZXBlbmRfdmFsdWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHJlcGVuZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZXBlbmRfdmFsdWU8L2NvZGU+PC9lbT4KLSB0byB0aGUgR3N0VmFsdWVBcnJheSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtYXJyYXktcHJlcGVuZC12YWx1ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBvZiB0eXBlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1BUlJBWTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfQVJSQVkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVFlQRV9BUlJBWTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByZXBlbmRfdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdmFsdWUgdG8gcHJlcGVuZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZml4YXRlIj48L2E+PGgzPmdzdF92YWx1ZV9maXhhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF92YWx1ZV9maXhhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICpkZXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaXhhdGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIGludG8gYSBuZXcgdmFsdWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLS4KLUZvciByYW5nZXMsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHRha2VuLiBGb3IgbGlzdHMgYW5kIGFycmF5cywgdGhlCi1maXJzdCBpdGVtIGlzIGZpeGF0ZWQgYW5kIHJldHVybmVkLgotSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIGlzIGFscmVhZHkgZml4ZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdmFsdWUtZml4YXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiBkZXN0aW5hdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBmaXhhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC12YWx1ZS1maXhhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLWNvbnRhaW5zIGEgZml4YXRlZCB2ZXJzaW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWZsYWdzZXQtcmVnaXN0ZXIiPjwvYT48aDM+Z3N0X2ZsYWdzZXRfcmVnaXN0ZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1R5cGU8L3NwYW4+PC9hPgotZ3N0X2ZsYWdzZXRfcmVnaXN0ZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IGZsYWdzX3R5cGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IHN1Yi1jbGFzcyBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZMQUdfU0VUIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RZUEVfRkxBR19TRVQ8L3NwYW4+PC9hPgotd2hpY2ggd2lsbCBwcmV0dHktcHJpbnQgdGhlIGh1bWFuLXJlYWRhYmxlIGZsYWdzCi13aGVuIHNlcmlhbGl6aW5nLCBmb3IgZWFzaWVyIGRlYnVnZ2luZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZmxhZ3NldC1yZWdpc3Rlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZ3NfdHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHLVRZUEUtRkxBR1M6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdfVFlQRV9GTEFHUzwvc3Bhbj48L2E+IHR5cGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RWYWx1ZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUZPVVJDQy1GT1JNQVQ6Q0FQUyI+PC9hPjxoMz5HU1RfRk9VUkNDX0ZPUk1BVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfRk9VUkNDX0ZPUk1BVCAiYyVjJWMlYyIKLTwvcHJlPgotPHA+Q2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULUZPVVJDQy1BUkdTOkNBUFMiIHRpdGxlPSJHU1RfRk9VUkNDX0FSR1MoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GT1VSQ0NfQVJHUzwvc3Bhbj48L2E+IHRvIHByb3Blcmx5IG91dHB1dCBhCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gZm91cmNjIHZhbHVlIGluIGEgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcmludGYoKTwvY29kZT4tc3R5bGUgdGV4dCBtZXNzYWdlLjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5wcmludGY8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2ZvdXJjYzogJSZxdW90Ozwvc3Bhbj4gR1NUX0ZPVVJDQ19GT1JNQVQgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULUZPVVJDQy1BUkdTOkNBUFMiPkdTVF9GT1VSQ0NfQVJHUzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmZjYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UWVBFLUlOVC1SQU5HRTpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0lOVF9SQU5HRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVFlQRV9JTlRfUkFOR0UgICAgICAgICAgICAgICAoX2dzdF9pbnRfcmFuZ2VfdHlwZSkKLTwvcHJlPgotPHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHR5cGUgdGhhdCByZXByZXNlbnRzIGFuIGludGVnZXIgcmFuZ2U8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVFlQRS1JTlQtUkFOR0UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBHc3RJbnRSYW5nZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVFlQRS1CSVRNQVNLOkNBUFMiPjwvYT48aDM+R1NUX1RZUEVfQklUTUFTSzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVFlQRV9CSVRNQVNLICAgICAgICAgICAgICAgICAoX2dzdF9iaXRtYXNrX3R5cGUpCi08L3ByZT4KLTxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIDY0LWJpdCBiaXRtYXNrLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1UWVBFLUJJVE1BU0sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBHc3RCaXRtYXNrICh3aGljaCBpcyBub3QgZXhwbGljaXRseSB0eXBlZCk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRZUEUtRkxBRy1TRVQ6Q0FQUyI+PC9hPjxoMz5HU1RfVFlQRV9GTEFHX1NFVDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVFlQRV9GTEFHX1NFVCAgICAgICAgICAgICAgICAgICAoX2dzdF9mbGFnc2V0X3R5cGUpCi08L3ByZT4KLTxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIDMyLWJpdCBmbGFnIGJpdGZpZWxkLCB3aXRoIDMyLWJpdAotbWFzayBpbmRpY2F0aW5nIHdoaWNoIG9mIHRoZSBiaXRzIGluIHRoZSBmaWVsZCBhcmUgZXhwbGljaXRseSBzZXQuCi1Vc2VmdWwgZm9yIG5lZ290aWF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1UWVBFLUZMQUctU0VULnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0RmxhZ3MgKHdoaWNoIGlzIG5vdCBleHBsaWNpdGx5IHR5cGVkKTwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRkxBRy1TRVQtTUFTSy1FWEFDVDpDQVBTIj48L2E+PGgzPkdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUICgoZ3VpbnQpKC0xKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVFlQRS1JTlQ2NC1SQU5HRTpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0lOVDY0X1JBTkdFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UWVBFX0lOVDY0X1JBTkdFICAgICAgICAgICAgIChfZ3N0X2ludDY0X3JhbmdlX3R5cGUpCi08L3ByZT4KLTxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhbiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHJhbmdlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVRZUEUtSU5UNjQtUkFOR0UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBHc3RJbnQ2NFJhbmdlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UWVBFLURPVUJMRS1SQU5HRTpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0RPVUJMRV9SQU5HRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVFlQRV9ET1VCTEVfUkFOR0UgICAgICAgICAgICAoX2dzdF9kb3VibGVfcmFuZ2VfdHlwZSkKLTwvcHJlPgotPHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHR5cGUgdGhhdCByZXByZXNlbnRzIGEgZmxvYXRpbmcgcG9pbnQgcmFuZ2Ugd2l0aCBkb3VibGUgcHJlY2lzaW9uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVRZUEUtRE9VQkxFLVJBTkdFLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0SW50UmFuZ2U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRZUEUtTElTVDpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0xJU1Q8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RZUEVfTElTVCAgICAgICAgICAgICAgICAgICAgKF9nc3RfdmFsdWVfbGlzdF90eXBlKQotPC9wcmU+Ci08cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdHlwZSB0aGF0IHJlcHJlc2VudHMgYW4gdW5vcmRlcmVkIGxpc3Qgb2YgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB2YWx1ZXMuIFRoaXMKLWlzIHVzZWQgZm9yIGV4YW1wbGUgdG8gZXhwcmVzcyBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGZvciBhIGZpZWxkIGluCi1hIGNhcHMgc3RydWN0dXJlLCBsaWtlIGEgbGlzdCBvZiBwb3NzaWJsZSBzYW1wbGUgcmF0ZXMsIG9mIHdoaWNoIG9ubHkgb25lCi13aWxsIGJlIGNob3NlbiBpbiB0aGUgZW5kLiBUaGlzIG1lYW5zIHRoYXQgYWxsIHZhbHVlcyBpbiB0aGUgbGlzdCBhcmUKLW1lYW5pbmdmdWwgb24gdGhlaXIgb3duLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1UWVBFLUxJU1QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPiBvZiBHc3RWYWx1ZUxpc3QgKHdoaWNoIGlzIG5vdCBleHBsaWNpdGx5IHR5cGVkKTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVFlQRS1BUlJBWTpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0FSUkFZPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UWVBFX0FSUkFZICAgICAgICAgICAgICAgICAgIChfZ3N0X3ZhbHVlX2FycmF5X3R5cGUpCi08L3ByZT4KLTxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0eXBlIHRoYXQgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGxpc3Qgb2YgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB2YWx1ZXMuIFRoaXMgaXMKLXVzZWQgdG8gZXhwcmVzcyBhIHNldCBvZiB2YWx1ZXMgdGhhdCBpcyBtZWFuaW5nZnVsIG9ubHkgaW4gdGhlaXIgc3BlY2lmaWMKLWNvbWJpbmF0aW9uIGFuZCBvcmRlciBvZiB2YWx1ZXMuIEVhY2ggdmFsdWUgb24gaXRzIG93biBpcyBub3QgcGFydGljdWxhcmx5Ci1tZWFuaW5nZnVsLCBvbmx5IHRoZSBvcmRlcmVkIGFycmF5IGluIGl0cyBlbnRpcmV0eSBpcyBtZWFuaW5nZnVsLiBUaGlzIGlzCi11c2VkIGZvciBleGFtcGxlIHRvIGV4cHJlc3MgY2hhbm5lbCBsYXlvdXRzIGZvciBtdWx0aWNoYW5uZWwgYXVkaW8gd2hlcmUKLWVhY2ggY2hhbm5lbCBuZWVkcyB0byBiZSBtYXBwZWQgdG8gYSBwb3NpdGlvbiBpbiB0aGUgcm9vbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtVFlQRS1BUlJBWS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IG9mIEdzdEFycmF5TGlzdCAod2hpY2ggaXMgbm90IGV4cGxpY2l0bHkgdHlwZWQpPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1UWVBFLUZSQUNUSU9OOkNBUFMiPjwvYT48aDM+R1NUX1RZUEVfRlJBQ1RJT048L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RZUEVfRlJBQ1RJT04gICAgICAgICAgICAgICAgKF9nc3RfZnJhY3Rpb25fdHlwZSkKLTwvcHJlPgotPHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+IHR5cGUgdGhhdCByZXByZXNlbnRzIGEgZnJhY3Rpb24gb2YgYW4gaW50ZWdlciBudW1lcmF0b3Igb3ZlcgotYW4gaW50ZWdlciBkZW5vbWluYXRvcjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1UWVBFLUZSQUNUSU9OLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0RnJhY3Rpb24gKHdoaWNoIGlzIG5vdCBleHBsaWNpdGx5IHR5cGVkKTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVFlQRS1GUkFDVElPTi1SQU5HRTpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFICAgICAgICAgICAoX2dzdF9mcmFjdGlvbl9yYW5nZV90eXBlKQotPC9wcmU+Ci08cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gdHlwZSB0aGF0IHJlcHJlc2VudHMgYSBHc3RGcmFjdGlvbiByYW5nZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1UWVBFLUZSQUNUSU9OLVJBTkdFLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gb2YgR3N0RnJhY3Rpb25SYW5nZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtTEVTUy1USEFOOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0xFU1NfVEhBTjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfTEVTU19USEFOICAgICAgICAgICAgICAoLTEpCi08L3ByZT4KLTxwPkluZGljYXRlcyB0aGF0IHRoZSBmaXJzdCB2YWx1ZSBwcm92aWRlZCB0byBhIGNvbXBhcmlzb24gZnVuY3Rpb24KLSg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNvbXBhcmUiIHRpdGxlPSJnc3RfdmFsdWVfY29tcGFyZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3ZhbHVlX2NvbXBhcmUoKTwvY29kZT48L2E+KSBpcyBsZXNzZXIgdGhhbiB0aGUgc2Vjb25kIG9uZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1WQUxVRS1FUVVBTDpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9FUVVBTDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfRVFVQUwgICAgICAgICAgICAgICAgICAgMAotPC9wcmU+Ci08cD5JbmRpY2F0ZXMgdGhhdCB0aGUgZmlyc3QgdmFsdWUgcHJvdmlkZWQgdG8gYSBjb21wYXJpc29uIGZ1bmN0aW9uCi0oPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jb21wYXJlIiB0aXRsZT0iZ3N0X3ZhbHVlX2NvbXBhcmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9jb21wYXJlKCk8L2NvZGU+PC9hPikgaXMgZXF1YWwgdG8gdGhlIHNlY29uZCBvbmUuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkFMVUUtR1JFQVRFUi1USEFOOkNBUFMiPjwvYT48aDM+R1NUX1ZBTFVFX0dSRUFURVJfVEhBTjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOICAgICAgICAgICAgMQotPC9wcmU+Ci08cD5JbmRpY2F0ZXMgdGhhdCB0aGUgZmlyc3QgdmFsdWUgcHJvdmlkZWQgdG8gYSBjb21wYXJpc29uIGZ1bmN0aW9uCi0oPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jb21wYXJlIiB0aXRsZT0iZ3N0X3ZhbHVlX2NvbXBhcmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF92YWx1ZV9jb21wYXJlKCk8L2NvZGU+PC9hPikgaXMgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQgb25lLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVZBTFVFLVVOT1JERVJFRDpDQVBTIj48L2E+PGgzPkdTVF9WQUxVRV9VTk9SREVSRUQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZBTFVFX1VOT1JERVJFRCAgICAgICAgICAgICAgIDIKLTwvcHJlPgotPHA+SW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY29tcGFyZSIgdGl0bGU9ImdzdF92YWx1ZV9jb21wYXJlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmFsdWVfY29tcGFyZSgpPC9jb2RlPjwvYT4pIGNhbiBub3QKLWRldGVybWluZSBhIG9yZGVyIGZvciB0aGUgdHdvIHByb3ZpZGVkIHZhbHVlcy48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZhbHVlVGFibGUiPjwvYT48aDM+c3RydWN0IEdzdFZhbHVlVGFibGU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWYWx1ZVRhYmxlIHsKLSAgR1R5cGUgdHlwZTsKLSAgR3N0VmFsdWVDb21wYXJlRnVuYyBjb21wYXJlOwotICBHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmMgc2VyaWFsaXplOwotICBHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyBkZXNlcmlhbGl6ZTsKLX07Ci08L3ByZT4KLTxwPlZUYWJsZSBmb3IgdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjR1ZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlPC9zcGFuPjwvYT4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnR5cGU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RWYWx1ZVRhYmxlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RWYWx1ZVRhYmxlLnR5cGUiPjwvYT50eXBlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVDb21wYXJlRnVuYyIgdGl0bGU9IkdzdFZhbHVlQ29tcGFyZUZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVDb21wYXJlRnVuYzwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RWYWx1ZVRhYmxlLmNvbXBhcmUiPjwvYT5jb21wYXJlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZUNvbXBhcmVGdW5jIiB0aXRsZT0iR3N0VmFsdWVDb21wYXJlRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWYWx1ZUNvbXBhcmVGdW5jPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVTZXJpYWxpemVGdW5jIiB0aXRsZT0iR3N0VmFsdWVTZXJpYWxpemVGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlU2VyaWFsaXplRnVuYzwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RWYWx1ZVRhYmxlLnNlcmlhbGl6ZSI+PC9hPnNlcmlhbGl6ZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVTZXJpYWxpemVGdW5jIiB0aXRsZT0iR3N0VmFsdWVTZXJpYWxpemVGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlU2VyaWFsaXplRnVuYzwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dzdFZhbHVlRGVzZXJpYWxpemVGdW5jIiB0aXRsZT0iR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmM8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0VmFsdWVUYWJsZS5kZXNlcmlhbGl6ZSI+PC9hPmRlc2VyaWFsaXplPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHc3RWYWx1ZURlc2VyaWFsaXplRnVuYyIgdGl0bGU9IkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmQ2MjNmLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0VmVyc2lvbjogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgTGlicmFyeSI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItZGV2aWNlLXByb2JpbmcuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEZXZpY2UgRGlzY292ZXJ5IGFuZCBEZXZpY2UgUHJvYmluZyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItR3N0VmVyc2lvbi5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1kZXZpY2UtcHJvYmluZy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RWZXJzaW9uIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZlcnNpb24udG9wX29mX3BhZ2UiPjwvYT5Hc3RWZXJzaW9uPC9zcGFuPjwvaDI+Ci08cD5Hc3RWZXJzaW9uIOKAlCBHU3RyZWFtZXIgdmVyc2lvbiBtYWNyb3MuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1DSEVDSy1WRVJTSU9OOkNBUFMiIHRpdGxlPSJHU1RfQ0hFQ0tfVkVSU0lPTigpIj5HU1RfQ0hFQ0tfVkVSU0lPTjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZlcnNpb24ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTUFKT1I6Q0FQUyIgdGl0bGU9IkdTVF9WRVJTSU9OX01BSk9SIj5HU1RfVkVSU0lPTl9NQUpPUjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtVkVSU0lPTi1NSU5PUjpDQVBTIiB0aXRsZT0iR1NUX1ZFUlNJT05fTUlOT1IiPkdTVF9WRVJTSU9OX01JTk9SPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1JQ1JPOkNBUFMiIHRpdGxlPSJHU1RfVkVSU0lPTl9NSUNSTyI+R1NUX1ZFUlNJT05fTUlDUk88L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTkFOTzpDQVBTIiB0aXRsZT0iR1NUX1ZFUlNJT05fTkFOTyI+R1NUX1ZFUlNJT05fTkFOTzwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5Vc2UgdGhlIEdTVF9WRVJTSU9OXyogbWFjcm9zIGUuZy4gd2hlbiBkZWZpbmluZyBvd24gcGx1Z2lucy4gVGhlIEdTdHJlYW1lcgotcnVudGltZSBjaGVja3MgaWYgdGhlc2UgcGx1Z2luIGFuZCBjb3JlIHZlcnNpb24gbWF0Y2ggYW5kIHJlZnVzZXMgdG8gdXNlIGEKLXBsdWdpbiBjb21waWxlZCBhZ2FpbnN0IGEgZGlmZmVyZW50IHZlcnNpb24gb2YgR1N0cmVhbWVyLgotWW91IGNhbiBhbHNvIHVzZSB0aGUgbWFjcm9zIHRvIGtlZXAgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIGluZm9ybWF0aW9uIGluCi15b3VyIGFwcGxpY2F0aW9uLjwvcD4KLTxwPlVzZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtdmVyc2lvbiIgdGl0bGU9ImdzdF92ZXJzaW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmVyc2lvbigpPC9jb2RlPjwvYT4gZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8ga25vdyB3aGljaCB2ZXJzaW9uIG9mCi1HU3RyZWFtZXIgeW91IGFyZSBjdXJyZW50bHkgbGlua2VkIGFnYWluc3QuPC9wPgotPHA+VGhlIHZlcnNpb24gbWFjcm9zIGdldCBkZWZpbmVkIGJ5IGluY2x1ZGluZyAiZ3N0L2dzdC5oIi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ0hFQ0stVkVSU0lPTjpDQVBTIj48L2E+PGgzPkdTVF9DSEVDS19WRVJTSU9OKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0NIRUNLX1ZFUlNJT04obWFqb3IsbWlub3IsbWljcm8pPC9wcmU+Ci08cD5DaGVjayB3aGV0aGVyIGEgR1N0cmVhbWVyIHZlcnNpb24gZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuCi1tYWpvci5taW5vci5taWNybyBpcyBwcmVzZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DSEVDSy1WRVJTSU9OLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1ham9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWFqb3IgdmVyc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5vcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1pbm9yIHZlcnNpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWljcm88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtaWNybyB2ZXJzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLUdzdFZlcnNpb24ub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1WRVJTSU9OLU1BSk9SOkNBUFMiPjwvYT48aDM+R1NUX1ZFUlNJT05fTUFKT1I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZFUlNJT05fTUFKT1IgKDEpCi08L3ByZT4KLTxwPlRoZSBtYWpvciB2ZXJzaW9uIG9mIEdTdHJlYW1lciBhdCBjb21waWxlIHRpbWU6PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkVSU0lPTi1NSU5PUjpDQVBTIj48L2E+PGgzPkdTVF9WRVJTSU9OX01JTk9SPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9WRVJTSU9OX01JTk9SICgxMCkKLTwvcHJlPgotPHA+VGhlIG1pbm9yIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZTo8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1WRVJTSU9OLU1JQ1JPOkNBUFMiPjwvYT48aDM+R1NUX1ZFUlNJT05fTUlDUk88L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1ZFUlNJT05fTUlDUk8gKDQpCi08L3ByZT4KLTxwPlRoZSBtaWNybyB2ZXJzaW9uIG9mIEdTdHJlYW1lciBhdCBjb21waWxlIHRpbWU6PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtVkVSU0lPTi1OQU5POkNBUFMiPjwvYT48aDM+R1NUX1ZFUlNJT05fTkFOTzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfVkVSU0lPTl9OQU5PICgwKQotPC9wcmU+Ci08cD5UaGUgbmFubyB2ZXJzaW9uIG9mIEdTdHJlYW1lciBhdCBjb21waWxlIHRpbWU6Ci1BY3R1YWwgcmVsZWFzZXMgaGF2ZSAwLCBHSVQgdmVyc2lvbnMgaGF2ZSAxLCBwcmVyZWxlYXNlIHZlcnNpb25zIGhhdmUgMi0uLi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItZGV2aWNlLXByb2JpbmcuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLWRldmljZS1wcm9iaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDcxNWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItZGV2aWNlLXByb2JpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5HU3RyZWFtZXIgRGV2aWNlIERpc2NvdmVyeSBhbmQgRGV2aWNlIFByb2Jpbmc6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIiB0aXRsZT0iR3N0VmVyc2lvbiI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWRldmljZS1wcm9iaW5nIj48L2E+R1N0cmVhbWVyIERldmljZSBEaXNjb3ZlcnkgYW5kIERldmljZSBQcm9iaW5nPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsIGNsYXNzPSJ0b2MiPgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiPkdzdERldmljZU1vbml0b3I8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEEgZGV2aWNlIG1vbml0b3IgYW5kIHByb2Jlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sIj5Hc3REZXZpY2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE9iamVjdCByZXByZXNlbnRpbmcgYSBkZXZpY2U8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIj5Hc3REZXZpY2VQcm92aWRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSBkZXZpY2UgcHJvdmlkZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIj5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIENyZWF0ZSBHc3REZXZpY2VQcm92aWRlcnMgZnJvbSBhIGZhY3Rvcnk8L3NwYW4+Ci08L2R0PgotPC9kbD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NzAxYTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+T2JqZWN0IEhpZXJhcmNoeTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sIiB0aXRsZT0iR3N0VHJhY2VyUmVjb3JkIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXgwMS5odG1sIiB0aXRsZT0iQVBJIEluZGV4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Iml4MDEuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWhpZXJhcmNoeSI+PC9hPk9iamVjdCBIaWVyYXJjaHk8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPHByZSBjbGFzcz0ic2NyZWVuIj4KLSAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+R3N0QWxsb2NhdG9yPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI0dzdFByb3h5UGFkIj5Hc3RQcm94eVBhZDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJGYWN0b3J5Ij5Hc3RUcmFjZXJGYWN0b3J5PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEZhY3RvcnkiPkdzdFR5cGVGaW5kRmFjdG9yeTwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj5Hc3RTeXN0ZW1DbG9jazwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPkdzdENvbnRyb2xCaW5kaW5nPC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPkdzdENvbnRyb2xTb3VyY2U8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCIgdGl0bGU9IkdzdFRyYWNlclJlY29yZCI+R3N0VHJhY2VyUmVjb3JkPC9hPgotICAgIDxhIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3Vuc3RhYmxlL0dUeXBlTW9kdWxlLmh0bWwiPkdJbnRlcmZhY2U8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPkdzdENoaWxkUHJveHk8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlciI+R3N0VVJJSGFuZGxlcjwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwiIHRpdGxlPSJHc3RQcmVzZXQiPkdzdFByZXNldDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4KLSAgICA8YSBocmVmPSJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC91bnN0YWJsZS9nb2JqZWN0LUJveGVkLVR5cGVzLmh0bWwiPkdCb3hlZDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPkdzdFNhbXBsZTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+R3N0Q29udGV4dDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcyI+R3N0QWxsb2NhdGlvblBhcmFtczwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnkiPkdzdFRvY0VudHJ5PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUNvbnRleHQiPkdzdFBhcnNlQ29udGV4dDwvYT4KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItc3VwcG9ydC5odG1sIGIvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXItc3VwcG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTkxODc0Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLXN1cHBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5HU3RyZWFtZXIgQ29yZSBTdXBwb3J0OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItc3VwcG9ydCI+PC9hPkdTdHJlYW1lciBDb3JlIFN1cHBvcnQ8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCI+R3N0SW5mbzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGVidWdnaW5nIGFuZCBsb2dnaW5nIGZhY2lsaXRpZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRyYWNlci5odG1sIj5Hc3RUcmFjZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFRyYWNpbmcgYmFzZSBjbGFzczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0VHJhY2VyRmFjdG9yeS5odG1sIj5Hc3RUcmFjZXJGYWN0b3J5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBJbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmVkIHRyYWNlciBmdW5jdGlvbnM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sIj5Hc3RUcmFjZXJSZWNvcmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFRyYWNlIGxvZyBlbnRyeSBjbGFzczwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGl2PgotPHA+Ci0gICAgICBUaGVzZXMgbW9kdWxlcyBzdXBwb3J0IHRoZSBnc3RyZWFtZXIgY29yZSBhbmQgcGx1Z2luIGRldmVsb3BtZW50LgotICAgICAgQXBwbGljYXRpb24gZGV2ZWxvcGVycyB3aWxsIHJhcmVseSBuZWVkIHRvIGtub3cgYWJvdXQgaXQuCi0gICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXIuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvZ3N0cmVhbWVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMjZkMjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9nc3RyZWFtZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5HU3RyZWFtZXIgT3ZlcnZpZXc6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtYnVpbGRpbmcuaHRtbCIgdGl0bGU9IkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1idWlsZGluZy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJnc3RyZWFtZXIiPjwvYT5HU3RyZWFtZXIgT3ZlcnZpZXc8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LWJ1aWxkaW5nLmh0bWwiPkJ1aWxkaW5nIEdTdHJlYW1lciBhbmQgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgCi1Ib3cgdG8gYnVpbGQgdGhlIEdTdHJlYW1lciBmcmFtZXdvcmsgYW5kIGFwcGxpY2F0aW9ucyB1c2luZyBpdC4KLTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXJ1bm5pbmcuaHRtbCI+UnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCAKLUhvdyB0byBydW4gYW5kIGRlYnVnIHlvdXIgR1N0cmVhbWVyIGFwcGxpY2F0aW9uCi08L3NwYW4+Ci08L2R0PgotPC9kbD48L2Rpdj4KLTxwPgotR1N0cmVhbWVyIGlzIGEgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yay4KLUl0IHVzZXMgZ3JhcGhzIG9mIGVsZW1lbnRzIHdoaWNoIG9wZXJhdGUgb24gZGF0YS4KLVRoZSBmdW5jdGlvbmFsaXR5IHRvIHByb2Nlc3MgbWVkaWEgaXMgcHJvdmlkZWQgYnkgcGx1Zy1pbnMgd2hpY2ggcHJvdmlkZQotZmVhdHVyZXMgbGlrZSBlbGVtZW50cywgdHlwZWZpbmRpbmcsIGFuZCBzbyBvbi4KLVRoaXMgYWxsb3dzIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGJlIGFkZGVkIHNpbXBseSBieSBpbnN0YWxsaW5nIG5ldyBwbHVnLWlucy4KLSAgICA8L3A+Ci08cD4KLUdTdHJlYW1lciBpcyBjcm9zcy1wbGF0Zm9ybSBhbmQgd29ya3Mgb24gbW9zdCBVTklYLWxpa2UgcGxhdGZvcm1zIGFzIHdlbGwgYXMKLVdpbmRvd3MuICBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKEdOVSBMR1BMKS4KLSAgICA8L3A+Ci08ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCI+Ci08b2JqZWN0IHR5cGU9ImltYWdlL3N2Zyt4bWwiIGRhdGE9ImdzdC11bml2ZXJzZS5zdmciPjwvb2JqZWN0PjxkaXYgY2xhc3M9ImNhcHRpb24iPjxwPlJlbGF0aW9uIGJldHdlZW4gZ3N0cmVhbWVyIGNvcmUgb2JqZWN0cy48L3A+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvaG9tZS5wbmcgYi9kb2NzL2dzdC9odG1sL2hvbWUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTg5ZDQ2Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvaG9tZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2luZGV4Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmN2Q0OWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjgyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5HU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgT3ZlcnZpZXciPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTxkaXYgY2xhc3M9ImJvb2siPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLTxkaXY+Ci08ZGl2Pjx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0aCB2YWxpZ249Im1pZGRsZSI+PHAgY2xhc3M9InRpdGxlIj5HU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvcD48L3RoPjwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXY+PHAgY2xhc3M9InJlbGVhc2VpbmZvIj4KLSAgICAgIGZvciBHU3RyZWFtZXIgQ29yZSAxLjAgKDEuMTAuNCkKLSAgICAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIG9uLWxpbmUgYXQKLSAgICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sLzwvYT4uCi0gICAgPC9wPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsIGNsYXNzPSJ0b2MiPgotPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJnc3RyZWFtZXIuaHRtbCI+R1N0cmVhbWVyIE92ZXJ2aWV3PC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtYnVpbGRpbmcuaHRtbCI+QnVpbGRpbmcgR1N0cmVhbWVyIGFuZCBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCAKLUhvdyB0byBidWlsZCB0aGUgR1N0cmVhbWVyIGZyYW1ld29yayBhbmQgYXBwbGljYXRpb25zIHVzaW5nIGl0LgotPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcnVubmluZy5odG1sIj5SdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIAotSG93IHRvIHJ1biBhbmQgZGVidWcgeW91ciBHU3RyZWFtZXIgYXBwbGljYXRpb24KLTwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImxpYmdzdHJlYW1lci5odG1sIj5HU3RyZWFtZXIgQ29yZSBMaWJyYXJ5PC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiPkdzdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTWVkaWEgbGlicmFyeSBzdXBwb3J0aW5nIGFyYml0cmFyeSBmb3JtYXRzIGFuZCBmaWx0ZXIKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhzLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiPkdzdEFsbG9jYXRvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgYWxsb2NhdGUgbWVtb3J5IGJsb2Nrczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwiPkdzdEF0b21pY1F1ZXVlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBbiBhdG9taWMgcXVldWUgaW1wbGVtZW50YXRpb248L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJpbi5odG1sIj5Hc3RCaW48L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgYW5kIGVsZW1lbnQgdGhhdCBjYW4gY29udGFpbiBvdGhlciBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QnVmZmVyLmh0bWwiPkdzdEJ1ZmZlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGF0YS1wYXNzaW5nIGJ1ZmZlciB0eXBlPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiPkdzdEJ1ZmZlckxpc3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIExpc3RzIG9mIGJ1ZmZlcnMgZm9yIGRhdGEtcGFzc2luZzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIj5Hc3RCdWZmZXJQb29sPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQb29sIGZvciBidWZmZXJzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCdXMuaHRtbCI+R3N0QnVzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBc3luY2hyb25vdXMgbWVzc2FnZSBidXMgc3Vic3lzdGVtPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RDYXBzLmh0bWwiPkdzdENhcHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0cnVjdHVyZSBkZXNjcmliaW5nIHNldHMgb2YgbWVkaWEgZm9ybWF0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiPkdzdENhcHNGZWF0dXJlczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSBzZXQgb2YgZmVhdHVyZXMgaW4gY2Fwczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0U2FtcGxlLmh0bWwiPkdzdFNhbXBsZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSBtZWRpYSBzYW1wbGU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCI+R3N0Q2hpbGRQcm94eTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW50ZXJmYWNlIGZvciBtdWx0aSBjaGlsZCBlbGVtZW50cy48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENsb2NrLmh0bWwiPkdzdENsb2NrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBYnN0cmFjdCBjbGFzcyBmb3IgZ2xvYmFsIGNsb2Nrczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdENvbmZpZy5odG1sIj5Hc3RDb25maWc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udGV4dC5odG1sIj5Hc3RDb250ZXh0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMaWdodHdlaWdodCBvYmplY3RzIHRvIHJlcHJlc2VudCBlbGVtZW50IGNvbnRleHRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIj5Hc3RDb250cm9sQmluZGluZzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2Ugc291cmNlczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIj5Hc3RDb250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBiYXNlIGNsYXNzIGZvciBjb250cm9sIHNvdXJjZSBzb3VyY2VzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3REYXRlVGltZS5odG1sIj5Hc3REYXRlVGltZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZSBzdHJ1Y3R1cmU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCI+R3N0RWxlbWVudDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYWxsIHBpcGVsaW5lIGVsZW1lbnRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIj5Hc3RFbGVtZW50RmFjdG9yeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ3JlYXRlIEdzdEVsZW1lbnRzIGZyb20gYSBmYWN0b3J5PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiPkdzdEdFcnJvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ2F0ZWdvcml6ZWQgZXJyb3IgbWVzc2FnZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEV2ZW50Lmh0bWwiPkdzdEV2ZW50PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBldmVudHMgdGhhdCBhcmUgcGFzc2VkIHVwIGFuZCBkb3duCi0gICAgICAgICAgICAgICAgICAgIGEgcGlwZWxpbmU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCI+R3N0Rm9ybWF0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEeW5hbWljYWxseSByZWdpc3RlciBuZXcgZGF0YSBmb3JtYXRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RHaG9zdFBhZC5odG1sIj5Hc3RHaG9zdFBhZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUHNldWRvIGxpbmsgcGFkczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiPkdzdEl0ZXJhdG9yPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBPYmplY3QgdG8gcmV0cmlldmUgbXVsdGlwbGUgZWxlbWVudHMgaW4gYSB0aHJlYWRzYWZlCi13YXkuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RNZW1vcnkuaHRtbCI+R3N0TWVtb3J5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCByZWZjb3VudGVkIHdyYXBwZXIgZm9yIG1lbW9yeSBibG9ja3M8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCI+R3N0TWVzc2FnZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTGlnaHR3ZWlnaHQgb2JqZWN0cyB0byBzaWduYWwgdGhlIGFwcGxpY2F0aW9uIG9mCi0gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lIGV2ZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCI+R3N0TWV0YTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQnVmZmVyIG1ldGFkYXRhPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIj5Hc3RNaW5pT2JqZWN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMaWdodHdlaWdodCBiYXNlIGNsYXNzIGZvciB0aGUgR1N0cmVhbWVyIG9iamVjdCBoaWVyYXJjaHk8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIHRoZSBHU3RyZWFtZXIgb2JqZWN0IGhpZXJhcmNoeTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UGFkLmh0bWwiPkdzdFBhZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgT2JqZWN0IGNvbnRhaW5lZCBieSBlbGVtZW50cyB0aGF0IGFsbG93cyBsaW5rcyB0bwotICAgICAgICAgICAgICAgICAgICBvdGhlciBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCI+R3N0UGFkVGVtcGxhdGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlc2NyaWJlIHRoZSBtZWRpYSB0eXBlIG9mIGEgcGFkLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIj5Hc3RQYXJhbVNwZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdQYXJhbVNwZWMgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljCi10byBHU3RyZWFtZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIj5Hc3RQYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR2V0IGEgcGlwZWxpbmUgZnJvbSBhIHRleHQgcGlwZWxpbmUgZGVzY3JpcHRpb248L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiPkdzdFBpcGVsaW5lPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBUb3AtbGV2ZWwgYmluIHdpdGggY2xvY2tpbmcgYW5kIGJ1cyBtYW5hZ2VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RQbHVnaW4uaHRtbCI+R3N0UGx1Z2luPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDb250YWluZXIgZm9yIGZlYXR1cmVzIGxvYWRlZCBmcm9tIGEgc2hhcmVkIG9iamVjdCBtb2R1bGU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCI+R3N0UGx1Z2luRmVhdHVyZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3IgY29udGVudHMgb2YgYSBHc3RQbHVnaW48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiPkdzdFBvbGw8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEtlZXAgdHJhY2sgb2YgZmlsZSBkZXNjcmlwdG9ycyBhbmQgbWFrZSBpdCBwb3NzaWJsZQotICAgICAgICAgICAgICAgICAgICB0byB3YWl0IG9uIHRoZW0gaW4gYSBjYW5jZWxsYWJsZSB3YXk8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFByZXNldC5odG1sIj5Hc3RQcmVzZXQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGhlbHBlciBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgcHJlc2V0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwiPkdzdFByb3RlY3Rpb25NZXRhPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBGdW5jdGlvbnMgYW5kIGNsYXNzZXMgdG8gc3VwcG9ydCBlbmNyeXB0ZWQgc3RyZWFtcy48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiPkdzdFF1ZXJ5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQcm92aWRlIGZ1bmN0aW9ucyB0byBjcmVhdGUgcXVlcmllcywgYW5kIHRvIHNldCBhbmQgcGFyc2UKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGluIHRoZW0uPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RSZWdpc3RyeS5odG1sIj5Hc3RSZWdpc3RyeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbWFuYWdlbWVudCBvZiA8c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPiBvYmplY3RzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RTZWdtZW50Lmh0bWwiPkdzdFNlZ21lbnQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBjb25maWd1cmVkIHJlZ2lvbiBvZiBpbnRlcmVzdAotICAgICAgICAgICAgICAgICAgICBpbiBhIG1lZGlhIGZpbGUuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiPkdzdFN0cmVhbTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3Igc3RyZWFtIG9iamVjdHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiPkdzdFN0cmVhbUNvbGxlY3Rpb248L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIGNvbGxlY3Rpb24gb2Ygc3RyZWFtczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiPkdzdFN0cnVjdHVyZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR2VuZXJpYyBzdHJ1Y3R1cmUgY29udGFpbmluZyBmaWVsZHMgb2YgbmFtZXMgYW5kIHZhbHVlczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCI+R3N0U3lzdGVtQ2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlZmF1bHQgY2xvY2sgdGhhdCB1c2VzIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiPkdzdFRhZ0xpc3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIExpc3Qgb2YgdGFncyBhbmQgdmFsdWVzIHVzZWQgdG8gZGVzY3JpYmUgbWVkaWEgbWV0YWRhdGE8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIj5Hc3RUYWdTZXR0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgYW5kIHJldHJpZXZhbAotICAgICAgICAgICAgICAgICAgICBvZiBtZWRpYSBtZXRhZGF0YTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0VGFzay5odG1sIj5Hc3RUYXNrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBYnN0cmFjdGlvbiBvZiBHU3RyZWFtZXIgc3RyZWFtaW5nIHRocmVhZHMuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUYXNrUG9vbC5odG1sIj5Hc3RUYXNrUG9vbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUG9vbCBvZiBHU3RyZWFtZXIgc3RyZWFtaW5nIHRocmVhZHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRvYy5odG1sIj5Hc3RUb2M8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdlbmVyaWMgdGFibGUgb2YgY29udGVudHMgc3VwcG9ydDwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sIj5Hc3RUb2NTZXR0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgYW5kIHJldHJpZXZhbAotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgVE9DPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCI+R3N0VHlwZUZpbmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0cmVhbSB0eXBlIGRldGVjdGlvbjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiPkdzdFR5cGVGaW5kRmFjdG9yeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJlZCB0eXBlZmluZCBmdW5jdGlvbnM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCI+R3N0VXJpPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBVUkkgcGFyc2luZyBhbmQgbWFuaXB1bGF0aW9uLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCI+R3N0VXJpSGFuZGxlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW50ZXJmYWNlIHRvIGVhc2UgVVJJIGhhbmRsaW5nIGluIHBsdWdpbnMuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCI+R3N0VXRpbHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIj5Hc3RWYWx1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR1ZhbHVlIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYwotdG8gR1N0cmVhbWVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIj5Hc3RWZXJzaW9uPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHU3RyZWFtZXIgdmVyc2lvbiBtYWNyb3MuPC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZ3N0cmVhbWVyLWRldmljZS1wcm9iaW5nLmh0bWwiPkdTdHJlYW1lciBEZXZpY2UgRGlzY292ZXJ5IGFuZCBEZXZpY2UgUHJvYmluZzwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCI+R3N0RGV2aWNlTW9uaXRvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSBkZXZpY2UgbW9uaXRvciBhbmQgcHJvYmVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwiPkdzdERldmljZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgT2JqZWN0IHJlcHJlc2VudGluZyBhIGRldmljZTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiPkdzdERldmljZVByb3ZpZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBIGRldmljZSBwcm92aWRlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ3JlYXRlIEdzdERldmljZVByb3ZpZGVycyBmcm9tIGEgZmFjdG9yeTwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1zdXBwb3J0Lmh0bWwiPkdTdHJlYW1lciBDb3JlIFN1cHBvcnQ8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiPkdzdEluZm88L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBmYWNpbGl0aWVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUcmFjZXIuaHRtbCI+R3N0VHJhY2VyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBUcmFjaW5nIGJhc2UgY2xhc3M8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRyYWNlckZhY3RvcnkuaHRtbCI+R3N0VHJhY2VyRmFjdG9yeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJlZCB0cmFjZXIgZnVuY3Rpb25zPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCI+R3N0VHJhY2VyUmVjb3JkPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBUcmFjZSBsb2cgZW50cnkgY2xhc3M8L3NwYW4+Ci08L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImluZGV4Ij48YSBocmVmPSJpeDAxLmh0bWwiPkFQSSBJbmRleDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9Iml4MDIuaHRtbCI+SW5kZXggb2YgZGVwcmVjYXRlZCBBUEk8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImluZGV4Ij48YSBocmVmPSJpeDAzLmh0bWwiPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4xMDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9Iml4MDQuaHRtbCI+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjg8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImluZGV4Ij48YSBocmVmPSJpeDA1Lmh0bWwiPkluZGV4IG9mIG5ldyBBUEkgaW4gMS42PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJpbmRleCI+PGEgaHJlZj0iaXgwNi5odG1sIj5JbmRleCBvZiBuZXcgQVBJIGluIDEuNDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9Iml4MDcuaHRtbCI+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjIuMzwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9Iml4MDguaHRtbCI+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjI8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImluZGV4Ij48YSBocmVmPSJpeDA5Lmh0bWwiPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjEwPC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJpbmRleCI+PGEgaHJlZj0iaXgxMC5odG1sIj5JbmRleCBvZiBuZXcgQVBJIGluIDEuMC41PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc2FyeSI+PGEgaHJlZj0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIj5Bbm5vdGF0aW9uIEdsb3NzYXJ5PC9hPjwvc3Bhbj48L2R0PgotPC9kbD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvaXgwMS5odG1sIGIvZG9jcy9nc3QvaHRtbC9peDAxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMDYzNzguLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9peDAxLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5Mzc1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5BUEkgSW5kZXg6IEdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiIHRpdGxlPSJPYmplY3QgSGllcmFyY2h5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXgwMi5odG1sIiB0aXRsZT0iSW5kZXggb2YgZGVwcmVjYXRlZCBBUEkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48c3BhbiBpZD0ibmF2X2luZGV4Ij48YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhBIj5BPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEIiPkI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QyI+QzwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhEIj5EPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEUiPkU8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4RiI+RjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhHIj5HPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEkiPkk8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4TCI+TDwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhNIj5NPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeE4iPk48L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4TyI+TzwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhQIj5QPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFEiPlE8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4UiI+UjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhTIj5TPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFQiPlQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4VSI+VTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhWIj5WPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFciPlc8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXgwMi5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS43Ij48L2E+QVBJIEluZGV4PC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxhIG5hbWU9ImlkeCI+PC9hPjxhIG5hbWU9ImlkeEEiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5BPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBbGxvY2F0aW9uUGFyYW1zIj5Hc3RBbGxvY2F0aW9uUGFyYW1zPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+R3N0QWxsb2NhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0aW9uLXBhcmFtcy1jb3B5IiB0aXRsZT0iZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2NvcHnCoCgpIj5nc3RfYWxsb2NhdGlvbl9wYXJhbXNfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+R3N0QWxsb2NhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0aW9uLXBhcmFtcy1mcmVlIiB0aXRsZT0iZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2ZyZWXCoCgpIj5nc3RfYWxsb2NhdGlvbl9wYXJhbXNfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+R3N0QWxsb2NhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI2dzdC1hbGxvY2F0aW9uLXBhcmFtcy1pbml0IiB0aXRsZT0iZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXTCoCgpIj5nc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+R3N0QWxsb2NhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvci1zdHJ1Y3QiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPkdzdEFsbG9jYXRvcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPkdzdEFsbG9jYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0b3JDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RBbGxvY2F0b3JDbGFzcyI+R3N0QWxsb2NhdG9yQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEFsbG9jYXRvckZsYWdzIj5Hc3RBbGxvY2F0b3JGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1hbGxvYyIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfYWxsb2PCoCgpIj5nc3RfYWxsb2NhdG9yX2FsbG9jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1maW5kIiB0aXRsZT0iZ3N0X2FsbG9jYXRvcl9maW5kwqAoKSI+Z3N0X2FsbG9jYXRvcl9maW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1mcmVlIiB0aXRsZT0iZ3N0X2FsbG9jYXRvcl9mcmVlwqAoKSI+Z3N0X2FsbG9jYXRvcl9mcmVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1yZWdpc3RlciIgdGl0bGU9ImdzdF9hbGxvY2F0b3JfcmVnaXN0ZXLCoCgpIj5nc3RfYWxsb2NhdG9yX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LWFsbG9jYXRvci1zZXQtZGVmYXVsdCIgdGl0bGU9ImdzdF9hbGxvY2F0b3Jfc2V0X2RlZmF1bHTCoCgpIj5nc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFsbG9jYXRvci5odG1sIiB0aXRsZT0iR3N0QWxsb2NhdG9yIj5Hc3RBbGxvY2F0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjR1NULUFMTE9DQVRPUi1TWVNNRU06Q0FQUyIgdGl0bGU9IkdTVF9BTExPQ0FUT1JfU1lTTUVNIj5HU1RfQUxMT0NBVE9SX1NZU01FTTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCIgdGl0bGU9IkdzdEFsbG9jYXRvciI+R3N0QWxsb2NhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI0dzdEF0b21pY1F1ZXVlIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj5Hc3RBdG9taWNRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLWxlbmd0aCIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfbGVuZ3RowqAoKSI+Z3N0X2F0b21pY19xdWV1ZV9sZW5ndGg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+R3N0QXRvbWljUXVldWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1uZXciIHRpdGxlPSJnc3RfYXRvbWljX3F1ZXVlX25ld8KgKCkiPmdzdF9hdG9taWNfcXVldWVfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcGVlayIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfcGVla8KgKCkiPmdzdF9hdG9taWNfcXVldWVfcGVlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj5Hc3RBdG9taWNRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLXBvcCIgdGl0bGU9ImdzdF9hdG9taWNfcXVldWVfcG9wwqAoKSI+Z3N0X2F0b21pY19xdWV1ZV9wb3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+R3N0QXRvbWljUXVldWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwjZ3N0LWF0b21pYy1xdWV1ZS1wdXNoIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9wdXNowqAoKSI+Z3N0X2F0b21pY19xdWV1ZV9wdXNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sIiB0aXRsZT0iR3N0QXRvbWljUXVldWUiPkdzdEF0b21pY1F1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RBdG9taWNRdWV1ZS5odG1sI2dzdC1hdG9taWMtcXVldWUtcmVmIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV9yZWbCoCgpIj5nc3RfYXRvbWljX3F1ZXVlX3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCIgdGl0bGU9IkdzdEF0b21pY1F1ZXVlIj5Hc3RBdG9taWNRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0QXRvbWljUXVldWUuaHRtbCNnc3QtYXRvbWljLXF1ZXVlLXVucmVmIiB0aXRsZT0iZ3N0X2F0b21pY19xdWV1ZV91bnJlZsKgKCkiPmdzdF9hdG9taWNfcXVldWVfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwiIHRpdGxlPSJHc3RBdG9taWNRdWV1ZSI+R3N0QXRvbWljUXVldWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhCIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QjwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RCaW4iPkdzdEJpbjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZGVlcC1lbGVtZW50LWFkZGVkIiB0aXRsZT0iVGhlIOKAnGRlZXAtZWxlbWVudC1hZGRlZOKAnSBzaWduYWwiPkdzdEJpbjo6ZGVlcC1lbGVtZW50LWFkZGVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZGVlcC1lbGVtZW50LXJlbW92ZWQiIHRpdGxlPSJUaGUg4oCcZGVlcC1lbGVtZW50LXJlbW92ZWTigJ0gc2lnbmFsIj5Hc3RCaW46OmRlZXAtZWxlbWVudC1yZW1vdmVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZG8tbGF0ZW5jeSIgdGl0bGU9IlRoZSDigJxkby1sYXRlbmN54oCdIHNpZ25hbCI+R3N0QmluOjpkby1sYXRlbmN5PC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1hZGRlZCIgdGl0bGU9IlRoZSDigJxlbGVtZW50LWFkZGVk4oCdIHNpZ25hbCI+R3N0QmluOjplbGVtZW50LWFkZGVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZWxlbWVudC1yZW1vdmVkIiB0aXRsZT0iVGhlIOKAnGVsZW1lbnQtcmVtb3ZlZOKAnSBzaWduYWwiPkdzdEJpbjo6ZWxlbWVudC1yZW1vdmVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tLWFzeW5jLWhhbmRsaW5nIiB0aXRsZT0iVGhlIOKAnGFzeW5jLWhhbmRsaW5n4oCdIHByb3BlcnR5Ij5Hc3RCaW46YXN5bmMtaGFuZGxpbmc8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjR3N0QmluLS1tZXNzYWdlLWZvcndhcmQiIHRpdGxlPSJUaGUg4oCcbWVzc2FnZS1mb3J3YXJk4oCdIHByb3BlcnR5Ij5Hc3RCaW46bWVzc2FnZS1mb3J3YXJkPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dzdEJpbkNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEJpbkNsYXNzIj5Hc3RCaW5DbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW5GbGFncyIgdGl0bGU9ImVudW0gR3N0QmluRmxhZ3MiPkdzdEJpbkZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZCIgdGl0bGU9ImdzdF9iaW5fYWRkwqAoKSI+Z3N0X2Jpbl9hZGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWFkZC1tYW55IiB0aXRsZT0iZ3N0X2Jpbl9hZGRfbWFuecKgKCkiPmdzdF9iaW5fYWRkX21hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHU1QtQklOLUNISUxEUkVOOkNBUFMiIHRpdGxlPSJHU1RfQklOX0NISUxEUkVOKCkiPkdTVF9CSU5fQ0hJTERSRU48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHU1QtQklOLUNISUxEUkVOLUNPT0tJRTpDQVBTIiB0aXRsZT0iR1NUX0JJTl9DSElMRFJFTl9DT09LSUUoKSI+R1NUX0JJTl9DSElMRFJFTl9DT09LSUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWZpbmQtdW5saW5rZWQtcGFkIiB0aXRsZT0iZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZMKgKCkiPmdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1pbnRlcmZhY2UiIHRpdGxlPSJnc3RfYmluX2dldF9ieV9pbnRlcmZhY2XCoCgpIj5nc3RfYmluX2dldF9ieV9pbnRlcmZhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2Jpbl9nZXRfYnlfbmFtZcKgKCkiPmdzdF9iaW5fZ2V0X2J5X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWdldC1ieS1uYW1lLXJlY3Vyc2UtdXAiIHRpdGxlPSJnc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXDCoCgpIj5nc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHU1QtQklOLUlTLU5PLVJFU1lOQzpDQVBTIiB0aXRsZT0iR1NUX0JJTl9JU19OT19SRVNZTkMoKSI+R1NUX0JJTl9JU19OT19SRVNZTkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtYWxsLWJ5LWludGVyZmFjZSIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlwqAoKSI+Z3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtZWxlbWVudHMiIHRpdGxlPSJnc3RfYmluX2l0ZXJhdGVfZWxlbWVudHPCoCgpIj5nc3RfYmluX2l0ZXJhdGVfZWxlbWVudHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtcmVjdXJzZSIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlwqAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc2lua3MiIHRpdGxlPSJnc3RfYmluX2l0ZXJhdGVfc2lua3PCoCgpIj5nc3RfYmluX2l0ZXJhdGVfc2lua3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc29ydGVkIiB0aXRsZT0iZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZMKgKCkiPmdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLWl0ZXJhdGUtc291cmNlcyIgdGl0bGU9ImdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzwqAoKSI+Z3N0X2Jpbl9pdGVyYXRlX3NvdXJjZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLW5ldyIgdGl0bGU9ImdzdF9iaW5fbmV3wqAoKSI+Z3N0X2Jpbl9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHU1QtQklOLU5VTUNISUxEUkVOOkNBUFMiIHRpdGxlPSJHU1RfQklOX05VTUNISUxEUkVOKCkiPkdTVF9CSU5fTlVNQ0hJTERSRU48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlY2FsY3VsYXRlLWxhdGVuY3kiIHRpdGxlPSJnc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3nCoCgpIj5nc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZSIgdGl0bGU9ImdzdF9iaW5fcmVtb3ZlwqAoKSI+Z3N0X2Jpbl9yZW1vdmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXJlbW92ZS1tYW55IiB0aXRsZT0iZ3N0X2Jpbl9yZW1vdmVfbWFuecKgKCkiPmdzdF9iaW5fcmVtb3ZlX21hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNnc3QtYmluLXN5bmMtY2hpbGRyZW4tc3RhdGVzIiB0aXRsZT0iZ3N0X2Jpbl9zeW5jX2NoaWxkcmVuX3N0YXRlc8KgKCkiPmdzdF9iaW5fc3luY19jaGlsZHJlbl9zdGF0ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckNvcHlGbGFncyIgdGl0bGU9ImVudW0gR3N0QnVmZmVyQ29weUZsYWdzIj5Hc3RCdWZmZXJDb3B5RmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWdzIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJGbGFncyI+R3N0QnVmZmVyRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZvcmVhY2hNZXRhRnVuYyIgdGl0bGU9IkdzdEJ1ZmZlckZvcmVhY2hNZXRhRnVuY8KgKCkiPkdzdEJ1ZmZlckZvcmVhY2hNZXRhRnVuYzwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RCdWZmZXJpbmdNb2RlIiB0aXRsZT0iZW51bSBHc3RCdWZmZXJpbmdNb2RlIj5Hc3RCdWZmZXJpbmdNb2RlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdC1zdHJ1Y3QiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0RnVuYyIgdGl0bGU9IkdzdEJ1ZmZlckxpc3RGdW5jwqAoKSI+R3N0QnVmZmVyTGlzdEZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sLXN0cnVjdCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xBY3F1aXJlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1ZmZlclBvb2xBY3F1aXJlRmxhZ3MiPkdzdEJ1ZmZlclBvb2xBY3F1aXJlRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyI+R3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXM8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2xDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCdWZmZXJQb29sQ2xhc3MiPkdzdEJ1ZmZlclBvb2xDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFkZC1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9hZGRfbWV0YcKgKCkiPmdzdF9idWZmZXJfYWRkX21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWFkZC1wYXJlbnQtYnVmZmVyLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9wYXJlbnRfYnVmZmVyX21ldGHCoCgpIj5nc3RfYnVmZmVyX2FkZF9wYXJlbnRfYnVmZmVyX21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCNnc3QtYnVmZmVyLWFkZC1wcm90ZWN0aW9uLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9wcm90ZWN0aW9uX21ldGHCoCgpIj5nc3RfYnVmZmVyX2FkZF9wcm90ZWN0aW9uX21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwiIHRpdGxlPSJHc3RQcm90ZWN0aW9uTWV0YSI+R3N0UHJvdGVjdGlvbk1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1hcHBlbmQiIHRpdGxlPSJnc3RfYnVmZmVyX2FwcGVuZMKgKCkiPmdzdF9idWZmZXJfYXBwZW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1hcHBlbmQtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1hcHBlbmQtcmVnaW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9hcHBlbmRfcmVnaW9uwqAoKSI+Z3N0X2J1ZmZlcl9hcHBlbmRfcmVnaW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1jb3B5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5wqAoKSI+Z3N0X2J1ZmZlcl9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1DT1BZLUFMTDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9DT1BZX0FMTCI+R1NUX0JVRkZFUl9DT1BZX0FMTDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1kZWVwIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X2RlZXDCoCgpIj5nc3RfYnVmZmVyX2NvcHlfZGVlcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1pbnRvIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X2ludG/CoCgpIj5nc3RfYnVmZmVyX2NvcHlfaW50bzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItQ09QWS1NRVRBREFUQTpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBIj5HU1RfQlVGRkVSX0NPUFlfTUVUQURBVEE8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWNvcHktcmVnaW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbsKgKCkiPmdzdF9idWZmZXJfY29weV9yZWdpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURUUzpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9EVFMoKSI+R1NUX0JVRkZFUl9EVFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURUUy1JUy1WQUxJRDpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQoKSI+R1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURUUy1PUi1QVFM6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRFRTX09SX1BUUygpIj5HU1RfQlVGRkVSX0RUU19PUl9QVFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURVUkFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0RVUkFUSU9OKCkiPkdTVF9CVUZGRVJfRFVSQVRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLURVUkFUSU9OLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEKCkiPkdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWV4dHJhY3QiIHRpdGxlPSJnc3RfYnVmZmVyX2V4dHJhY3TCoCgpIj5nc3RfYnVmZmVyX2V4dHJhY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWV4dHJhY3QtZHVwIiB0aXRsZT0iZ3N0X2J1ZmZlcl9leHRyYWN0X2R1cMKgKCkiPmdzdF9idWZmZXJfZXh0cmFjdF9kdXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZpbGwiIHRpdGxlPSJnc3RfYnVmZmVyX2ZpbGzCoCgpIj5nc3RfYnVmZmVyX2ZpbGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZpbmQtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9maW5kX21lbW9yecKgKCkiPmdzdF9idWZmZXJfZmluZF9tZW1vcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUdTOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdTKCkiPkdTVF9CVUZGRVJfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKCkiPkdTVF9CVUZGRVJfRkxBR19JU19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX0ZMQUdfU0VUKCkiPkdTVF9CVUZGRVJfRkxBR19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfRkxBR19VTlNFVCgpIj5HU1RfQlVGRkVSX0ZMQUdfVU5TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWZvcmVhY2gtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfZm9yZWFjaF9tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9mb3JlYWNoX21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1hbGwtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfYWxsX21lbW9yecKgKCkiPmdzdF9idWZmZXJfZ2V0X2FsbF9tZW1vcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1mbGFncyIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X2ZsYWdzwqAoKSI+Z3N0X2J1ZmZlcl9nZXRfZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tYXgtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfbWF4X21lbW9yecKgKCkiPmdzdF9idWZmZXJfZ2V0X21heF9tZW1vcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX2dldF9tZW1vcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tZW1vcnktcmFuZ2UiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tZW1vcnlfcmFuZ2XCoCgpIj5nc3RfYnVmZmVyX2dldF9tZW1vcnlfcmFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfbWV0YcKgKCkiPmdzdF9idWZmZXJfZ2V0X21ldGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1wYXJlbnQtYnVmZmVyLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9wYXJlbnRfYnVmZmVyX21ldGEoKSI+Z3N0X2J1ZmZlcl9nZXRfcGFyZW50X2J1ZmZlcl9tZXRhPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtcHJvdGVjdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfcHJvdGVjdGlvbl9tZXRhKCkiPmdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCIgdGl0bGU9IkdzdFByb3RlY3Rpb25NZXRhIj5Hc3RQcm90ZWN0aW9uTWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1zaXplIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfc2l6ZcKgKCkiPmdzdF9idWZmZXJfZ2V0X3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1zaXplcyIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X3NpemVzwqAoKSI+Z3N0X2J1ZmZlcl9nZXRfc2l6ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1zaXplcy1yYW5nZSIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X3NpemVzX3JhbmdlwqAoKSI+Z3N0X2J1ZmZlcl9nZXRfc2l6ZXNfcmFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWhhcy1mbGFncyIgdGl0bGU9ImdzdF9idWZmZXJfaGFzX2ZsYWdzwqAoKSI+Z3N0X2J1ZmZlcl9oYXNfZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWluc2VydC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2luc2VydF9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX2luc2VydF9tZW1vcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLWFsbC1tZW1vcnktd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX2FsbF9tZW1vcnlfd3JpdGFibGXCoCgpIj5nc3RfYnVmZmVyX2lzX2FsbF9tZW1vcnlfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUlTLURJU0NPTlQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfSVNfRElTQ09OVCgpIj5HU1RfQlVGRkVSX0lTX0RJU0NPTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLW1lbW9yeS1yYW5nZS13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlwqAoKSI+Z3N0X2J1ZmZlcl9pc19tZW1vcnlfcmFuZ2Vfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9pc193cml0YWJsZSgpIj5nc3RfYnVmZmVyX2lzX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1pdGVyYXRlLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YcKgKCkiPmdzdF9idWZmZXJfaXRlcmF0ZV9tZXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1hZGQiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfYWRkKCkiPmdzdF9idWZmZXJfbGlzdF9hZGQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWNvcHkiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfY29wecKgKCkiPmdzdF9idWZmZXJfbGlzdF9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1jb3B5LWRlZXAiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfY29weV9kZWVwwqAoKSI+Z3N0X2J1ZmZlcl9saXN0X2NvcHlfZGVlcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtZm9yZWFjaCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9mb3JlYWNowqAoKSI+Z3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LWdldCIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9nZXTCoCgpIj5nc3RfYnVmZmVyX2xpc3RfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1pbnNlcnQiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0wqAoKSI+Z3N0X2J1ZmZlcl9saXN0X2luc2VydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGUoKSI+Z3N0X2J1ZmZlcl9saXN0X2lzX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1sZW5ndGgiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfbGVuZ3RowqAoKSI+Z3N0X2J1ZmZlcl9saXN0X2xlbmd0aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlKCkiPmdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1uZXciIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfbmV3wqAoKSI+Z3N0X2J1ZmZlcl9saXN0X25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtbmV3LXNpemVkIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZMKgKCkiPmdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwjZ3N0LWJ1ZmZlci1saXN0LXJlZiIgdGl0bGU9ImdzdF9idWZmZXJfbGlzdF9yZWbCoCgpIj5nc3RfYnVmZmVyX2xpc3RfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlckxpc3QiPkdzdEJ1ZmZlckxpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC1yZW1vdmUiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlwqAoKSI+Z3N0X2J1ZmZlcl9saXN0X3JlbW92ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJMaXN0Ij5Hc3RCdWZmZXJMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtdW5yZWYiIHRpdGxlPSJnc3RfYnVmZmVyX2xpc3RfdW5yZWbCoCgpIj5nc3RfYnVmZmVyX2xpc3RfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSI+Z3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tYXAiIHRpdGxlPSJnc3RfYnVmZmVyX21hcMKgKCkiPmdzdF9idWZmZXJfbWFwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tYXAtcmFuZ2UiIHRpdGxlPSJnc3RfYnVmZmVyX21hcF9yYW5nZcKgKCkiPmdzdF9idWZmZXJfbWFwX3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZW1jbXAiIHRpdGxlPSJnc3RfYnVmZmVyX21lbWNtcMKgKCkiPmdzdF9idWZmZXJfbWVtY21wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1tZW1zZXQiIHRpdGxlPSJnc3RfYnVmZmVyX21lbXNldMKgKCkiPmdzdF9idWZmZXJfbWVtc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXciIHRpdGxlPSJnc3RfYnVmZmVyX25ld8KgKCkiPmdzdF9idWZmZXJfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctYWxsb2NhdGUiIHRpdGxlPSJnc3RfYnVmZmVyX25ld19hbGxvY2F0ZcKgKCkiPmdzdF9idWZmZXJfbmV3X2FsbG9jYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctd3JhcHBlZCIgdGl0bGU9ImdzdF9idWZmZXJfbmV3X3dyYXBwZWTCoCgpIj5nc3RfYnVmZmVyX25ld193cmFwcGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uZXctd3JhcHBlZC1mdWxsIiB0aXRsZT0iZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxswqAoKSI+Z3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1uLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfbl9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX25fbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfT0ZGU0VUKCkiPkdTVF9CVUZGRVJfT0ZGU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtRU5EOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9FTkQoKSI+R1NUX0JVRkZFUl9PRkZTRVRfRU5EPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtRU5ELUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQlVGRkVSX09GRlNFVF9FTkRfSVNfVkFMSUQoKSI+R1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEKCkiPkdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSI+R1NUX0JVRkZFUl9PRkZTRVRfTk9ORTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItcGVlay1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3BlZWtfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9wZWVrX21lbW9yeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtYWNxdWlyZS1idWZmZXIiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXLCoCgpIj5nc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1hZGQtb3B0aW9uIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctZ2V0LWFsbG9jYXRvciIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X2FsbG9jYXRvcsKgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X2FsbG9jYXRvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLWdldC1vcHRpb24iIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb27CoCgpIj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1nZXQtcGFyYW1zIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfcGFyYW1zwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfcGFyYW1zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctaGFzLW9wdGlvbiIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbsKgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLW4tb3B0aW9ucyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19uX29wdGlvbnM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy1zZXQtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9ywqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1jb25maWctc2V0LXBhcmFtcyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtc8KgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtY29uZmlnLXZhbGlkYXRlLXBhcmFtcyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9jb25maWdfdmFsaWRhdGVfcGFyYW1zwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ192YWxpZGF0ZV9wYXJhbXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWdldC1jb25maWciIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZ8KgKCkiPmdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1nZXQtb3B0aW9ucyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9uc8KgKCkiPmdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9uczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtaGFzLW9wdGlvbiIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX2hhc19vcHRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWlzLWFjdGl2ZSIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9pc19hY3RpdmXCoCgpIj5nc3RfYnVmZmVyX3Bvb2xfaXNfYWN0aXZlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI0dTVC1CVUZGRVItUE9PTC1JUy1GTFVTSElORzpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9QT09MX0lTX0ZMVVNISU5HKCkiPkdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtbmV3IiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX25ld8KgKCkiPmdzdF9idWZmZXJfcG9vbF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXJlbGVhc2UtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVywqAoKSI+Z3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1zZXQtYWN0aXZlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmXCoCgpIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCNnc3QtYnVmZmVyLXBvb2wtc2V0LWNvbmZpZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyUG9vbCI+R3N0QnVmZmVyUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9idWZmZXJfcG9vbF9zZXRfZmx1c2hpbmfCoCgpIj5nc3RfYnVmZmVyX3Bvb2xfc2V0X2ZsdXNoaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1wcmVwZW5kLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfcHJlcGVuZF9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX3ByZXBlbmRfbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1QVFM6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfUFRTKCkiPkdTVF9CVUZGRVJfUFRTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1QVFMtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEKCkiPkdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZWYiIHRpdGxlPSJnc3RfYnVmZmVyX3JlZsKgKCkiPmdzdF9idWZmZXJfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtYWxsLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfcmVtb3ZlX2FsbF9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX3JlbW92ZV9hbGxfbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5IiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtbWVtb3J5LXJhbmdlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlwqAoKSI+Z3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZW1vdmUtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfcmVtb3ZlX21ldGHCoCgpIj5nc3RfYnVmZmVyX3JlbW92ZV9tZXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXBsYWNlIiB0aXRsZT0iZ3N0X2J1ZmZlcl9yZXBsYWNlwqAoKSI+Z3N0X2J1ZmZlcl9yZXBsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXBsYWNlLWFsbC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX3JlcGxhY2VfYWxsX21lbW9yecKgKCkiPmdzdF9idWZmZXJfcmVwbGFjZV9hbGxfbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXBsYWNlLW1lbW9yeSIgdGl0bGU9ImdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnnCoCgpIj5nc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXBsYWNlLW1lbW9yeS1yYW5nZSIgdGl0bGU9ImdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnlfcmFuZ2XCoCgpIj5nc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5X3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXNpemUiIHRpdGxlPSJnc3RfYnVmZmVyX3Jlc2l6ZcKgKCkiPmdzdF9idWZmZXJfcmVzaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZXNpemUtcmFuZ2UiIHRpdGxlPSJnc3RfYnVmZmVyX3Jlc2l6ZV9yYW5nZcKgKCkiPmdzdF9idWZmZXJfcmVzaXplX3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zZXQtZmxhZ3MiIHRpdGxlPSJnc3RfYnVmZmVyX3NldF9mbGFnc8KgKCkiPmdzdF9idWZmZXJfc2V0X2ZsYWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1zZXQtc2l6ZSIgdGl0bGU9ImdzdF9idWZmZXJfc2V0X3NpemXCoCgpIj5nc3RfYnVmZmVyX3NldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bm1hcCIgdGl0bGU9ImdzdF9idWZmZXJfdW5tYXDCoCgpIj5nc3RfYnVmZmVyX3VubWFwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiIgdGl0bGU9ImdzdF9idWZmZXJfdW5yZWbCoCgpIj5nc3RfYnVmZmVyX3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnNldC1mbGFncyIgdGl0bGU9ImdzdF9idWZmZXJfdW5zZXRfZmxhZ3PCoCgpIj5nc3RfYnVmZmVyX3Vuc2V0X2ZsYWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RCdXMiPkdzdEJ1czwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXMtbWVzc2FnZSIgdGl0bGU9IlRoZSDigJxtZXNzYWdl4oCdIHNpZ25hbCI+R3N0QnVzOjptZXNzYWdlPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXMtc3luYy1tZXNzYWdlIiB0aXRsZT0iVGhlIOKAnHN5bmMtbWVzc2FnZeKAnSBzaWduYWwiPkdzdEJ1czo6c3luYy1tZXNzYWdlPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXMtLWVuYWJsZS1hc3luYyIgdGl0bGU9IlRoZSDigJxlbmFibGUtYXN5bmPigJ0gcHJvcGVydHkiPkdzdEJ1czplbmFibGUtYXN5bmM8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJ1c0ZsYWdzIj5Hc3RCdXNGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sIiB0aXRsZT0iR3N0QnVzIj5Hc3RCdXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwjR3N0QnVzRnVuYyIgdGl0bGU9IkdzdEJ1c0Z1bmPCoCgpIj5Hc3RCdXNGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNHc3RCdXNTeW5jSGFuZGxlciIgdGl0bGU9IkdzdEJ1c1N5bmNIYW5kbGVywqAoKSI+R3N0QnVzU3luY0hhbmRsZXI8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI0dzdEJ1c1N5bmNSZXBseSIgdGl0bGU9ImVudW0gR3N0QnVzU3luY1JlcGx5Ij5Hc3RCdXNTeW5jUmVwbHk8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfYWRkX3NpZ25hbF93YXRjaMKgKCkiPmdzdF9idXNfYWRkX3NpZ25hbF93YXRjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaC1mdWxsIiB0aXRsZT0iZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGzCoCgpIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19hZGRfd2F0Y2jCoCgpIj5nc3RfYnVzX2FkZF93YXRjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXdhdGNoLWZ1bGwiIHRpdGxlPSJnc3RfYnVzX2FkZF93YXRjaF9mdWxswqAoKSI+Z3N0X2J1c19hZGRfd2F0Y2hfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtYXN5bmMtc2lnbmFsLWZ1bmMiIHRpdGxlPSJnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jwqAoKSI+Z3N0X2J1c19hc3luY19zaWduYWxfZnVuYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtY3JlYXRlLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19jcmVhdGVfd2F0Y2jCoCgpIj5nc3RfYnVzX2NyZWF0ZV93YXRjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtZGlzYWJsZS1zeW5jLW1lc3NhZ2UtZW1pc3Npb24iIHRpdGxlPSJnc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uwqAoKSI+Z3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtZW5hYmxlLXN5bmMtbWVzc2FnZS1lbWlzc2lvbiIgdGl0bGU9ImdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbsKgKCkiPmdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtaGF2ZS1wZW5kaW5nIiB0aXRsZT0iZ3N0X2J1c19oYXZlX3BlbmRpbmfCoCgpIj5nc3RfYnVzX2hhdmVfcGVuZGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtbmV3IiB0aXRsZT0iZ3N0X2J1c19uZXfCoCgpIj5nc3RfYnVzX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcGVlayIgdGl0bGU9ImdzdF9idXNfcGVla8KgKCkiPmdzdF9idXNfcGVlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9sbCIgdGl0bGU9ImdzdF9idXNfcG9sbMKgKCkiPmdzdF9idXNfcG9sbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wIiB0aXRsZT0iZ3N0X2J1c19wb3DCoCgpIj5nc3RfYnVzX3BvcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9wLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2J1c19wb3BfZmlsdGVyZWTCoCgpIj5nc3RfYnVzX3BvcF9maWx0ZXJlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcG9zdCIgdGl0bGU9ImdzdF9idXNfcG9zdMKgKCkiPmdzdF9idXNfcG9zdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcmVtb3ZlLXNpZ25hbC13YXRjaCIgdGl0bGU9ImdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaMKgKCkiPmdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtcmVtb3ZlLXdhdGNoIiB0aXRsZT0iZ3N0X2J1c19yZW1vdmVfd2F0Y2jCoCgpIj5nc3RfYnVzX3JlbW92ZV93YXRjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtc2V0LWZsdXNoaW5nIiB0aXRsZT0iZ3N0X2J1c19zZXRfZmx1c2hpbmfCoCgpIj5nc3RfYnVzX3NldF9mbHVzaGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtc2V0LXN5bmMtaGFuZGxlciIgdGl0bGU9ImdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcsKgKCkiPmdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtc3luYy1zaWduYWwtaGFuZGxlciIgdGl0bGU9ImdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlcsKgKCkiPmdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtdGltZWQtcG9wIiB0aXRsZT0iZ3N0X2J1c190aW1lZF9wb3DCoCgpIj5nc3RfYnVzX3RpbWVkX3BvcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1cy5odG1sI2dzdC1idXMtdGltZWQtcG9wLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWTCoCgpIj5nc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCIgdGl0bGU9IkdzdEJ1cyI+R3N0QnVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4QyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkM8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1DQUxMLVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX0NBTExfUEFSRU5UKCkiPkdTVF9DQUxMX1BBUkVOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtQ0FMTC1QQVJFTlQtV0lUSC1ERUZBVUxUOkNBUFMiIHRpdGxlPSJHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKCkiPkdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENhcHMiPkdzdENhcHM8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjR3N0Q2Fwc0ZlYXR1cmVzLXN0cnVjdCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHc3RDYXBzRmlsdGVyTWFwRnVuYyIgdGl0bGU9IkdzdENhcHNGaWx0ZXJNYXBGdW5jwqAoKSI+R3N0Q2Fwc0ZpbHRlck1hcEZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHc3RDYXBzRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENhcHNGbGFncyI+R3N0Q2Fwc0ZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0Q2Fwc0ZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0Q2Fwc0ZvcmVhY2hGdW5jwqAoKSI+R3N0Q2Fwc0ZvcmVhY2hGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0Q2Fwc0ludGVyc2VjdE1vZGUiIHRpdGxlPSJlbnVtIEdzdENhcHNJbnRlcnNlY3RNb2RlIj5Hc3RDYXBzSW50ZXJzZWN0TW9kZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dzdENhcHNNYXBGdW5jIiB0aXRsZT0iR3N0Q2Fwc01hcEZ1bmPCoCgpIj5Hc3RDYXBzTWFwRnVuYzwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUFOWTpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfQU5ZIj5HU1RfQ0FQU19BTlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtYXBwZW5kIiB0aXRsZT0iZ3N0X2NhcHNfYXBwZW5kwqAoKSI+Z3N0X2NhcHNfYXBwZW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWFwcGVuZC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlwqAoKSI+Z3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1hcHBlbmQtc3RydWN0dXJlLWZ1bGwiIHRpdGxlPSJnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX2Z1bGzCoCgpIj5nc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtY2FuLWludGVyc2VjdCIgdGl0bGU9ImdzdF9jYXBzX2Nhbl9pbnRlcnNlY3TCoCgpIj5nc3RfY2Fwc19jYW5faW50ZXJzZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWNvcHkiIHRpdGxlPSJnc3RfY2Fwc19jb3B5wqAoKSI+Z3N0X2NhcHNfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1jb3B5LW50aCIgdGl0bGU9ImdzdF9jYXBzX2NvcHlfbnRowqAoKSI+Z3N0X2NhcHNfY29weV9udGg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1hZGQiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19hZGTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19hZGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1hZGQtaWQiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19hZGRfaWTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19hZGRfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNHU1QtQ0FQUy1GRUFUVVJFUy1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZFQVRVUkVTX0FOWSI+R1NUX0NBUFNfRkVBVFVSRVNfQU5ZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtY29udGFpbnMiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19jb250YWluc8KgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtY29udGFpbnMtaWQiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19jb250YWluc19pZMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtY29weSIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2NvcHnCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtZnJlZSIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWXCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19mcmVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19mcm9tX3N0cmluZ8KgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2Zyb21fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtZ2V0LW50aCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGjCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtZ2V0LW50aC1pZCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGhfaWTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtZ2V0LXNpemUiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19nZXRfc2l6ZcKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2dldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtaXMtYW55IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55wqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjZ3N0LWNhcHMtZmVhdHVyZXMtaXMtZXF1YWwiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sIiB0aXRsZT0iR3N0Q2Fwc0ZlYXR1cmVzIj5Hc3RDYXBzRmVhdHVyZXM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwjR1NULUNBUFMtRkVBVFVSRVMtTUVNT1JZLVNZU1RFTS1NRU1PUlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZIj5HU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldyIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX25ld8KgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldy1hbnkiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfYW55wqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfbmV3X2FueTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldy1lbXB0eSIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX25ld19lbXB0ecKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX25ld19lbXB0eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldy1pZCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldy1pZC12YWxpc3QiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfaWRfdmFsaXN0wqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkX3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLW5ldy12YWxpc3QiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfdmFsaXN0wqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfbmV3X3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLXJlbW92ZSIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZcKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLXJlbW92ZS1pZCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZV9pZMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZV9pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLXNldC1wYXJlbnQtcmVmY291bnQiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50wqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfc2V0X3BhcmVudF9yZWZjb3VudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI2dzdC1jYXBzLWZlYXR1cmVzLXRvLXN0cmluZyIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX3RvX3N0cmluZ8KgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX3RvX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCIgdGl0bGU9IkdzdENhcHNGZWF0dXJlcyI+R3N0Q2Fwc0ZlYXR1cmVzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHNGZWF0dXJlcy5odG1sI0dTVC1DQVBTLUZFQVRVUkUtTUVNT1JZLVNZU1RFTS1NRU1PUlk6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX1NZU1RFTV9NRU1PUlkiPkdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX1NZU1RFTV9NRU1PUlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZmlsdGVyLWFuZC1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZcKgKCkiPmdzdF9jYXBzX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZpeGF0ZSIgdGl0bGU9ImdzdF9jYXBzX2ZpeGF0ZcKgKCkiPmdzdF9jYXBzX2ZpeGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHUzpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfRkxBR1MoKSI+R1NUX0NBUFNfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtRkxBRy1JUy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX0ZMQUdfSVNfU0VUKCkiPkdTVF9DQVBTX0ZMQUdfSVNfU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19GTEFHX1NFVCgpIj5HU1RfQ0FQU19GTEFHX1NFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1GTEFHLVVOU0VUOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19GTEFHX1VOU0VUKCkiPkdTVF9DQVBTX0ZMQUdfVU5TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZm9yZWFjaCIgdGl0bGU9ImdzdF9jYXBzX2ZvcmVhY2jCoCgpIj5nc3RfY2Fwc19mb3JlYWNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZyb20tc3RyaW5nIiB0aXRsZT0iZ3N0X2NhcHNfZnJvbV9zdHJpbmfCoCgpIj5nc3RfY2Fwc19mcm9tX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1nZXQtZmVhdHVyZXMiIHRpdGxlPSJnc3RfY2Fwc19nZXRfZmVhdHVyZXPCoCgpIj5nc3RfY2Fwc19nZXRfZmVhdHVyZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LXNpemUiIHRpdGxlPSJnc3RfY2Fwc19nZXRfc2l6ZcKgKCkiPmdzdF9jYXBzX2dldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWdldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY2Fwc19nZXRfc3RydWN0dXJlwqAoKSI+Z3N0X2NhcHNfZ2V0X3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pbnRlcnNlY3QiIHRpdGxlPSJnc3RfY2Fwc19pbnRlcnNlY3TCoCgpIj5nc3RfY2Fwc19pbnRlcnNlY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaW50ZXJzZWN0LWZ1bGwiIHRpdGxlPSJnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbMKgKCkiPmdzdF9jYXBzX2ludGVyc2VjdF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLWFsd2F5cy1jb21wYXRpYmxlIiB0aXRsZT0iZ3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGXCoCgpIj5nc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1hbnkiIHRpdGxlPSJnc3RfY2Fwc19pc19hbnnCoCgpIj5nc3RfY2Fwc19pc19hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZW1wdHkiIHRpdGxlPSJnc3RfY2Fwc19pc19lbXB0ecKgKCkiPmdzdF9jYXBzX2lzX2VtcHR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLWVxdWFsIiB0aXRsZT0iZ3N0X2NhcHNfaXNfZXF1YWzCoCgpIj5nc3RfY2Fwc19pc19lcXVhbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1lcXVhbC1maXhlZCIgdGl0bGU9ImdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkwqAoKSI+Z3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtZml4ZWQiIHRpdGxlPSJnc3RfY2Fwc19pc19maXhlZMKgKCkiPmdzdF9jYXBzX2lzX2ZpeGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLUlTLVNJTVBMRTpDQVBTIiB0aXRsZT0iR1NUX0NBUFNfSVNfU0lNUExFKCkiPkdTVF9DQVBTX0lTX1NJTVBMRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1zdHJpY3RseS1lcXVhbCIgdGl0bGU9ImdzdF9jYXBzX2lzX3N0cmljdGx5X2VxdWFswqAoKSI+Z3N0X2NhcHNfaXNfc3RyaWN0bHlfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtc3Vic2V0IiB0aXRsZT0iZ3N0X2NhcHNfaXNfc3Vic2V0wqAoKSI+Z3N0X2NhcHNfaXNfc3Vic2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLXN1YnNldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlwqAoKSI+Z3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1pcy1zdWJzZXQtc3RydWN0dXJlLWZ1bGwiIHRpdGxlPSJnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlX2Z1bGzCoCgpIj5nc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfY2Fwc19pc193cml0YWJsZSgpIj5nc3RfY2Fwc19pc193cml0YWJsZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIj5nc3RfY2Fwc19tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9jYXBzX21hcF9pbl9wbGFjZcKgKCkiPmdzdF9jYXBzX21hcF9pbl9wbGFjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tZXJnZSIgdGl0bGU9ImdzdF9jYXBzX21lcmdlwqAoKSI+Z3N0X2NhcHNfbWVyZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbWVyZ2Utc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlwqAoKSI+Z3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW1lcmdlLXN0cnVjdHVyZS1mdWxsIiB0aXRsZT0iZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlX2Z1bGzCoCgpIj5nc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctYW55IiB0aXRsZT0iZ3N0X2NhcHNfbmV3X2FuecKgKCkiPmdzdF9jYXBzX25ld19hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWVtcHR5IiB0aXRsZT0iZ3N0X2NhcHNfbmV3X2VtcHR5wqAoKSI+Z3N0X2NhcHNfbmV3X2VtcHR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1lbXB0eS1zaW1wbGUiIHRpdGxlPSJnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlwqAoKSI+Z3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctZnVsbCIgdGl0bGU9ImdzdF9jYXBzX25ld19mdWxswqAoKSI+Z3N0X2NhcHNfbmV3X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtbmV3LWZ1bGwtdmFsaXN0IiB0aXRsZT0iZ3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0wqAoKSI+Z3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5ldy1zaW1wbGUiIHRpdGxlPSJnc3RfY2Fwc19uZXdfc2ltcGxlwqAoKSI+Z3N0X2NhcHNfbmV3X3NpbXBsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtQ0FQUy1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19OT05FIj5HU1RfQ0FQU19OT05FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLW5vcm1hbGl6ZSIgdGl0bGU9ImdzdF9jYXBzX25vcm1hbGl6ZcKgKCkiPmdzdF9jYXBzX25vcm1hbGl6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZWYiIHRpdGxlPSJnc3RfY2Fwc19yZWbCoCgpIj5nc3RfY2Fwc19yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR1NULUNBUFMtUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkdTVF9DQVBTX1JFRkNPVU5UKCkiPkdTVF9DQVBTX1JFRkNPVU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1DQVBTLVJFRkNPVU5ULVZBTFVFOkNBUFMiIHRpdGxlPSJHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRSgpIj5HU1RfQ0FQU19SRUZDT1VOVF9WQUxVRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1yZW1vdmUtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZcKgKCkiPmdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtcmVwbGFjZSIgdGl0bGU9ImdzdF9jYXBzX3JlcGxhY2XCoCgpIj5nc3RfY2Fwc19yZXBsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC1mZWF0dXJlcyIgdGl0bGU9ImdzdF9jYXBzX3NldF9mZWF0dXJlc8KgKCkiPmdzdF9jYXBzX3NldF9mZWF0dXJlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zZXQtc2ltcGxlIiB0aXRsZT0iZ3N0X2NhcHNfc2V0X3NpbXBsZcKgKCkiPmdzdF9jYXBzX3NldF9zaW1wbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LXNpbXBsZS12YWxpc3QiIHRpdGxlPSJnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdMKgKCkiPmdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXNldC12YWx1ZSIgdGl0bGU9ImdzdF9jYXBzX3NldF92YWx1ZcKgKCkiPmdzdF9jYXBzX3NldF92YWx1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1zaW1wbGlmeSIgdGl0bGU9ImdzdF9jYXBzX3NpbXBsaWZ5wqAoKSI+Z3N0X2NhcHNfc2ltcGxpZnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc3RlYWwtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlwqAoKSI+Z3N0X2NhcHNfc3RlYWxfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXN1YnRyYWN0IiB0aXRsZT0iZ3N0X2NhcHNfc3VidHJhY3TCoCgpIj5nc3RfY2Fwc19zdWJ0cmFjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy10YWtlIiB0aXRsZT0iZ3N0X2NhcHNfdGFrZcKgKCkiPmdzdF9jYXBzX3Rha2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtdG8tc3RyaW5nIiB0aXRsZT0iZ3N0X2NhcHNfdG9fc3RyaW5nwqAoKSI+Z3N0X2NhcHNfdG9fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXRydW5jYXRlIiB0aXRsZT0iZ3N0X2NhcHNfdHJ1bmNhdGXCoCgpIj5nc3RfY2Fwc190cnVuY2F0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy11bnJlZiIgdGl0bGU9ImdzdF9jYXBzX3VucmVmwqAoKSI+Z3N0X2NhcHNfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVCVUc6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfREVCVUcoKSI+R1NUX0NBVF9ERUJVRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVCVUctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0RFQlVHX09CSkVDVCgpIj5HU1RfQ0FUX0RFQlVHX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1DQVQtREVGQVVMVDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9ERUZBVUxUIj5HU1RfQ0FUX0RFRkFVTFQ8L2E+LCB2YXJpYWJsZSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0VSUk9SKCkiPkdTVF9DQVRfRVJST1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUVSUk9SLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9FUlJPUl9PQkpFQ1QoKSI+R1NUX0NBVF9FUlJPUl9PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUZJWE1FOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0ZJWE1FKCkiPkdTVF9DQVRfRklYTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUZJWE1FLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9GSVhNRV9PQkpFQ1QoKSI+R1NUX0NBVF9GSVhNRV9PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUlORk86Q0FQUyIgdGl0bGU9IkdTVF9DQVRfSU5GTygpIj5HU1RfQ0FUX0lORk88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUlORk8tT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX0lORk9fT0JKRUNUKCkiPkdTVF9DQVRfSU5GT19PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxFVkVMLUxPRzpDQVBTIiB0aXRsZT0iR1NUX0NBVF9MRVZFTF9MT0coKSI+R1NUX0NBVF9MRVZFTF9MT0c8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxPRzpDQVBTIiB0aXRsZT0iR1NUX0NBVF9MT0coKSI+R1NUX0NBVF9MT0c8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULUxPRy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfTE9HX09CSkVDVCgpIj5HU1RfQ0FUX0xPR19PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULU1FTURVTVA6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfTUVNRFVNUCgpIj5HU1RfQ0FUX01FTURVTVA8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULU1FTURVTVAtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX01FTURVTVBfT0JKRUNUKCkiPkdTVF9DQVRfTUVNRFVNUF9PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVRSQUNFOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX1RSQUNFKCkiPkdTVF9DQVRfVFJBQ0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVRSQUNFLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0NBVF9UUkFDRV9PQkpFQ1QoKSI+R1NUX0NBVF9UUkFDRV9PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVdBUk5JTkc6Q0FQUyIgdGl0bGU9IkdTVF9DQVRfV0FSTklORygpIj5HU1RfQ0FUX1dBUk5JTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtQ0FULVdBUk5JTkctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKCkiPkdTVF9DQVRfV0FSTklOR19PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtQ0hFQ0stVkVSU0lPTjpDQVBTIiB0aXRsZT0iR1NUX0NIRUNLX1ZFUlNJT04oKSI+R1NUX0NIRUNLX1ZFUlNJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCIgdGl0bGU9IkdzdFZlcnNpb24iPkdzdFZlcnNpb248L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktc3RydWN0IiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1hZGRlZCIgdGl0bGU9IlRoZSDigJxjaGlsZC1hZGRlZOKAnSBzaWduYWwiPkdzdENoaWxkUHJveHk6OmNoaWxkLWFkZGVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1jaGlsZC1yZW1vdmVkIiB0aXRsZT0iVGhlIOKAnGNoaWxkLXJlbW92ZWTigJ0gc2lnbmFsIj5Hc3RDaGlsZFByb3h5OjpjaGlsZC1yZW1vdmVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eUludGVyZmFjZSIgdGl0bGU9InN0cnVjdCBHc3RDaGlsZFByb3h5SW50ZXJmYWNlIj5Hc3RDaGlsZFByb3h5SW50ZXJmYWNlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktY2hpbGQtYWRkZWQiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWTCoCgpIj5nc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWNoaWxkLXJlbW92ZWQiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZMKgKCkiPmdzdF9jaGlsZF9wcm94eV9jaGlsZF9yZW1vdmVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPkdzdENoaWxkUHJveHk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfZ2V0wqAoKSI+Z3N0X2NoaWxkX3Byb3h5X2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkcmVuLWNvdW50IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudMKgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC1jaGlsZC1ieS1pbmRleCIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXjCoCgpIj5nc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPkdzdENoaWxkUHJveHk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1nZXQtY2hpbGQtYnktbmFtZSIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZcKgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LXByb3BlcnR5IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0ecKgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LWdldC12YWxpc3QiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdMKgKCkiPmdzdF9jaGlsZF9wcm94eV9nZXRfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPkdzdENoaWxkUHJveHk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1sb29rdXAiIHRpdGxlPSJnc3RfY2hpbGRfcHJveHlfbG9va3VwwqAoKSI+Z3N0X2NoaWxkX3Byb3h5X2xvb2t1cDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktc2V0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X3NldMKgKCkiPmdzdF9jaGlsZF9wcm94eV9zZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sIiB0aXRsZT0iR3N0Q2hpbGRQcm94eSI+R3N0Q2hpbGRQcm94eTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwjZ3N0LWNoaWxkLXByb3h5LXNldC1wcm9wZXJ0eSIgdGl0bGU9ImdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHnCoCgpIj5nc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCIgdGl0bGU9IkdzdENoaWxkUHJveHkiPkdzdENoaWxkUHJveHk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2hpbGRQcm94eS5odG1sI2dzdC1jaGlsZC1wcm94eS1zZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3TCoCgpIj5nc3RfY2hpbGRfcHJveHlfc2V0X3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDaGlsZFByb3h5Lmh0bWwiIHRpdGxlPSJHc3RDaGlsZFByb3h5Ij5Hc3RDaGlsZFByb3h5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENsb2NrIj5Hc3RDbG9jazwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLXN5bmNlZCIgdGl0bGU9IlRoZSDigJxzeW5jZWTigJ0gc2lnbmFsIj5Hc3RDbG9jazo6c3luY2VkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLS10aW1lb3V0IiB0aXRsZT0iVGhlIOKAnHRpbWVvdXTigJ0gcHJvcGVydHkiPkdzdENsb2NrOnRpbWVvdXQ8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9jay0td2luZG93LXNpemUiIHRpdGxlPSJUaGUg4oCcd2luZG93LXNpemXigJ0gcHJvcGVydHkiPkdzdENsb2NrOndpbmRvdy1zaXplPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2stLXdpbmRvdy10aHJlc2hvbGQiIHRpdGxlPSJUaGUg4oCcd2luZG93LXRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+R3N0Q2xvY2s6d2luZG93LXRocmVzaG9sZDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrQ2FsbGJhY2siIHRpdGxlPSJHc3RDbG9ja0NhbGxiYWNrwqAoKSI+R3N0Q2xvY2tDYWxsYmFjazwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0NsYXNzIiB0aXRsZT0ic3RydWN0IEdzdENsb2NrQ2xhc3MiPkdzdENsb2NrQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0VudHJ5IiB0aXRsZT0ic3RydWN0IEdzdENsb2NrRW50cnkiPkdzdENsb2NrRW50cnk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0VudHJ5VHlwZSIgdGl0bGU9ImVudW0gR3N0Q2xvY2tFbnRyeVR5cGUiPkdzdENsb2NrRW50cnlUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENsb2NrRmxhZ3MiPkdzdENsb2NrRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCIgdGl0bGU9IkdzdENsb2NrSUQiPkdzdENsb2NrSUQ8L2E+LCB0eXBlZGVmIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdENsb2NrUmV0dXJuIj5Hc3RDbG9ja1JldHVybjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiIHRpdGxlPSJHc3RDbG9ja1RpbWUiPkdzdENsb2NrVGltZTwvYT4sIHR5cGVkZWYgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIiB0aXRsZT0iR3N0Q2xvY2tUaW1lRGlmZiI+R3N0Q2xvY2tUaW1lRGlmZjwvYT4sIHR5cGVkZWYgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RDbG9ja1R5cGUiIHRpdGxlPSJlbnVtIEdzdENsb2NrVHlwZSI+R3N0Q2xvY2tUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj5Hc3RTeXN0ZW1DbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGQtb2JzZXJ2YXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uwqAoKSI+Z3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkZC1vYnNlcnZhdGlvbi11bmFwcGxpZWQiIHRpdGxlPSJnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZMKgKCkiPmdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb25fdW5hcHBsaWVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stYWRqdXN0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZMKgKCkiPmdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGp1c3Qtd2l0aC1jYWxpYnJhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbsKgKCkiPmdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLURJRkY6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19ESUZGKCkiPkdTVF9DTE9DS19ESUZGPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlk6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWSgpIj5HU1RfQ0xPQ0tfRU5UUlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1DTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX0VOVFJZX0NMT0NLKCkiPkdTVF9DTE9DS19FTlRSWV9DTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLUlOVEVSVkFMOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRU5UUllfSU5URVJWQUwoKSI+R1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktU1RBVFVTOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTKCkiPkdTVF9DTE9DS19FTlRSWV9TVEFUVVM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1USU1FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfRU5UUllfVElNRSgpIj5HU1RfQ0xPQ0tfRU5UUllfVElNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLUVOVFJZLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19FTlRSWV9UWVBFKCkiPkdTVF9DTE9DS19FTlRSWV9UWVBFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19GTEFHUygpIj5HU1RfQ0xPQ0tfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uwqAoKSI+Z3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC1pbnRlcm5hbC10aW1lIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lwqAoKSI+Z3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LW1hc3RlciIgdGl0bGU9ImdzdF9jbG9ja19nZXRfbWFzdGVywqAoKSI+Z3N0X2Nsb2NrX2dldF9tYXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtcmVzb2x1dGlvbiIgdGl0bGU9ImdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbsKgKCkiPmdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lIiB0aXRsZT0iZ3N0X2Nsb2NrX2dldF90aW1lwqAoKSI+Z3N0X2Nsb2NrX2dldF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWVvdXQiIHRpdGxlPSJnc3RfY2xvY2tfZ2V0X3RpbWVvdXTCoCgpIj5nc3RfY2xvY2tfZ2V0X3RpbWVvdXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC1jb21wYXJlLWZ1bmMiIHRpdGxlPSJnc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jwqAoKSI+Z3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLWdldC10aW1lIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX2dldF90aW1lwqAoKSI+Z3N0X2Nsb2NrX2lkX2dldF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtcmVmIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3JlZsKgKCkiPmdzdF9jbG9ja19pZF9yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC11bnJlZiIgdGl0bGU9ImdzdF9jbG9ja19pZF91bnJlZsKgKCkiPmdzdF9jbG9ja19pZF91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXVuc2NoZWR1bGUiIHRpdGxlPSJnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZcKgKCkiPmdzdF9jbG9ja19pZF91bnNjaGVkdWxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtd2FpdCIgdGl0bGU9ImdzdF9jbG9ja19pZF93YWl0wqAoKSI+Z3N0X2Nsb2NrX2lkX3dhaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0LWFzeW5jIiB0aXRsZT0iZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmPCoCgpIj5nc3RfY2xvY2tfaWRfd2FpdF9hc3luYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlzLXN5bmNlZCIgdGl0bGU9ImdzdF9jbG9ja19pc19zeW5jZWTCoCgpIj5nc3RfY2xvY2tfaXNfc3luY2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stbmV3LXBlcmlvZGljLWlkIiB0aXRsZT0iZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZMKgKCkiPmdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1uZXctc2luZ2xlLXNob3QtaWQiIHRpdGxlPSJnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkwqAoKSI+Z3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXBlcmlvZGljLWlkLXJlaW5pdCIgdGl0bGU9ImdzdF9jbG9ja19wZXJpb2RpY19pZF9yZWluaXTCoCgpIj5nc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbsKgKCkiPmdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtbWFzdGVyIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9tYXN0ZXLCoCgpIj5nc3RfY2xvY2tfc2V0X21hc3RlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNldC1yZXNvbHV0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uwqAoKSI+Z3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stc2V0LXN5bmNlZCIgdGl0bGU9ImdzdF9jbG9ja19zZXRfc3luY2VkwqAoKSI+Z3N0X2Nsb2NrX3NldF9zeW5jZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtdGltZW91dCIgdGl0bGU9ImdzdF9jbG9ja19zZXRfdGltZW91dMKgKCkiPmdzdF9jbG9ja19zZXRfdGltZW91dDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXNpbmdsZS1zaG90LWlkLXJlaW5pdCIgdGl0bGU9ImdzdF9jbG9ja19zaW5nbGVfc2hvdF9pZF9yZWluaXTCoCgpIj5nc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stU1RJTUUtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9DTE9DS19TVElNRV9JU19WQUxJRCgpIj5HU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1TVElNRS1OT05FOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfU1RJTUVfTk9ORSI+R1NUX0NMT0NLX1NUSU1FX05PTkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCgpIj5HU1RfQ0xPQ0tfVElNRV9JU19WQUxJRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVRJTUUtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX0NMT0NLX1RJTUVfTk9ORSI+R1NUX0NMT0NLX1RJTUVfTk9ORTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXVuYWRqdXN0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkwqAoKSI+Z3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stdW5hZGp1c3Qtd2l0aC1jYWxpYnJhdGlvbiIgdGl0bGU9ImdzdF9jbG9ja191bmFkanVzdF93aXRoX2NhbGlicmF0aW9uwqAoKSI+Z3N0X2Nsb2NrX3VuYWRqdXN0X3dpdGhfY2FsaWJyYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay13YWl0LWZvci1zeW5jIiB0aXRsZT0iZ3N0X2Nsb2NrX3dhaXRfZm9yX3N5bmPCoCgpIj5nc3RfY2xvY2tfd2FpdF9mb3Jfc3luYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNHc3RDb250ZXh0LXN0cnVjdCIgdGl0bGU9IkdzdENvbnRleHQiPkdzdENvbnRleHQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPkdzdENvbnRleHQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LWNvcHkiIHRpdGxlPSJnc3RfY29udGV4dF9jb3B5wqAoKSI+Z3N0X2NvbnRleHRfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij5Hc3RDb250ZXh0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1nZXQtY29udGV4dC10eXBlIiB0aXRsZT0iZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZcKgKCkiPmdzdF9jb250ZXh0X2dldF9jb250ZXh0X3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+R3N0Q29udGV4dDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmXCoCgpIj5nc3RfY29udGV4dF9nZXRfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPkdzdENvbnRleHQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LWhhcy1jb250ZXh0LXR5cGUiIHRpdGxlPSJnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlwqAoKSI+Z3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij5Hc3RDb250ZXh0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1pcy1wZXJzaXN0ZW50IiB0aXRsZT0iZ3N0X2NvbnRleHRfaXNfcGVyc2lzdGVudMKgKCkiPmdzdF9jb250ZXh0X2lzX3BlcnNpc3RlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+R3N0Q29udGV4dDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfY29udGV4dF9pc193cml0YWJsZSgpIj5nc3RfY29udGV4dF9pc193cml0YWJsZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij5Hc3RDb250ZXh0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2NvbnRleHRfbWFrZV93cml0YWJsZSgpIj5nc3RfY29udGV4dF9tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPkdzdENvbnRleHQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LW5ldyIgdGl0bGU9ImdzdF9jb250ZXh0X25ld8KgKCkiPmdzdF9jb250ZXh0X25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij5Hc3RDb250ZXh0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1yZWYiIHRpdGxlPSJnc3RfY29udGV4dF9yZWbCoCgpIj5nc3RfY29udGV4dF9yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+R3N0Q29udGV4dDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtcmVwbGFjZSIgdGl0bGU9ImdzdF9jb250ZXh0X3JlcGxhY2XCoCgpIj5nc3RfY29udGV4dF9yZXBsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPkdzdENvbnRleHQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LXVucmVmIiB0aXRsZT0iZ3N0X2NvbnRleHRfdW5yZWbCoCgpIj5nc3RfY29udGV4dF91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij5Hc3RDb250ZXh0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC13cml0YWJsZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmXCoCgpIj5nc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+R3N0Q29udGV4dDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sI0dzdENvbnRyb2xCaW5kaW5nLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RDb250cm9sQmluZGluZyI+R3N0Q29udHJvbEJpbmRpbmc8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sQmluZGluZyI+R3N0Q29udHJvbEJpbmRpbmc8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZy0tbmFtZSIgdGl0bGU9IlRoZSDigJxuYW1l4oCdIHByb3BlcnR5Ij5Hc3RDb250cm9sQmluZGluZzpuYW1lPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPkdzdENvbnRyb2xCaW5kaW5nPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctLW9iamVjdCIgdGl0bGU9IlRoZSDigJxvYmplY3TigJ0gcHJvcGVydHkiPkdzdENvbnRyb2xCaW5kaW5nOm9iamVjdDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj5Hc3RDb250cm9sQmluZGluZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sI0dzdENvbnRyb2xCaW5kaW5nQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbEJpbmRpbmdDbGFzcyI+R3N0Q29udHJvbEJpbmRpbmdDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj5Hc3RDb250cm9sQmluZGluZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZUNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdENvbnRyb2xTb3VyY2VDbGFzcyI+R3N0Q29udHJvbFNvdXJjZUNsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj5Hc3RDb250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWUiIHRpdGxlPSJHc3RDb250cm9sU291cmNlR2V0VmFsdWXCoCgpIj5Hc3RDb250cm9sU291cmNlR2V0VmFsdWU8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj5Hc3RDb250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5wqAoKSI+R3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXk8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sU291cmNlIj5Hc3RDb250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWNvbnRyb2wtYmluZGluZy1nZXQtZy12YWx1ZS1hcnJheSIgdGl0bGU9ImdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X2dfdmFsdWVfYXJyYXnCoCgpIj5nc3RfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sQmluZGluZyI+R3N0Q29udHJvbEJpbmRpbmc8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNnc3QtY29udHJvbC1iaW5kaW5nLWdldC12YWx1ZSIgdGl0bGU9ImdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlwqAoKSI+Z3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj5Hc3RDb250cm9sQmluZGluZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctZ2V0LXZhbHVlLWFycmF5IiB0aXRsZT0iZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXnCoCgpIj5nc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZV9hcnJheTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPkdzdENvbnRyb2xCaW5kaW5nPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWNvbnRyb2wtYmluZGluZy1pcy1kaXNhYmxlZCIgdGl0bGU9ImdzdF9jb250cm9sX2JpbmRpbmdfaXNfZGlzYWJsZWTCoCgpIj5nc3RfY29udHJvbF9iaW5kaW5nX2lzX2Rpc2FibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RDb250cm9sQmluZGluZyI+R3N0Q29udHJvbEJpbmRpbmc8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNnc3QtY29udHJvbC1iaW5kaW5nLXNldC1kaXNhYmxlZCIgdGl0bGU9ImdzdF9jb250cm9sX2JpbmRpbmdfc2V0X2Rpc2FibGVkwqAoKSI+Z3N0X2NvbnRyb2xfYmluZGluZ19zZXRfZGlzYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xCaW5kaW5nIj5Hc3RDb250cm9sQmluZGluZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sI2dzdC1jb250cm9sLWJpbmRpbmctc3luYy12YWx1ZXMiIHRpdGxlPSJnc3RfY29udHJvbF9iaW5kaW5nX3N5bmNfdmFsdWVzwqAoKSI+Z3N0X2NvbnRyb2xfYmluZGluZ19zeW5jX3ZhbHVlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0Q29udHJvbEJpbmRpbmciPkdzdENvbnRyb2xCaW5kaW5nPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCNnc3QtY29udHJvbC1zb3VyY2UtZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZcKgKCkiPmdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjZ3N0LWNvbnRyb2wtc291cmNlLWdldC12YWx1ZS1hcnJheSIgdGl0bGU9ImdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXnCoCgpIj5nc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPkdzdENvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdENvcmVFcnJvciIgdGl0bGU9ImVudW0gR3N0Q29yZUVycm9yIj5Hc3RDb3JlRXJyb3I8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPkdzdEdFcnJvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUNPUkUtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9DT1JFX0VSUk9SIj5HU1RfQ09SRV9FUlJPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPkdzdEdFcnJvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEQiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5EPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI0dzdERhdGVUaW1lLXN0cnVjdCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LWRheSIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X2RhecKgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X2RheTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtaG91ciIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X2hvdXLCoCgpIj5nc3RfZGF0ZV90aW1lX2dldF9ob3VyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1taWNyb3NlY29uZCIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kwqAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LW1pbnV0ZSIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZcKgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQtbW9udGgiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9tb250aMKgKCkiPmdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWdldC1zZWNvbmQiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmTCoCgpIj5nc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtZ2V0LXRpbWUtem9uZS1vZmZzZXQiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0wqAoKSI+Z3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1nZXQteWVhciIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfZ2V0X3llYXLCoCgpIj5nc3RfZGF0ZV90aW1lX2dldF95ZWFyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWhhcy1kYXkiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2hhc19kYXnCoCgpIj5nc3RfZGF0ZV90aW1lX2hhc19kYXk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtaGFzLW1vbnRoIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9oYXNfbW9udGjCoCgpIj5nc3RfZGF0ZV90aW1lX2hhc19tb250aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1oYXMtc2Vjb25kIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kwqAoKSI+Z3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLWhhcy10aW1lIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9oYXNfdGltZcKgKCkiPmdzdF9kYXRlX3RpbWVfaGFzX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtaGFzLXllYXIiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX2hhc195ZWFywqAoKSI+Z3N0X2RhdGVfdGltZV9oYXNfeWVhcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXciIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld8KgKCkiPmdzdF9kYXRlX3RpbWVfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLWctZGF0ZS10aW1lIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nX2RhdGVfdGltZcKgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWZyb20taXNvODYwMS1zdHJpbmciIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nwqAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctZnJvbS11bml4LWVwb2NoLWxvY2FsLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZcKgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1mcm9tLXVuaXgtZXBvY2gtdXRjIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0Y8KgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LWxvY2FsLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lwqAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXctbm93LWxvY2FsLXRpbWUiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld19ub3dfbG9jYWxfdGltZcKgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy1ub3ctdXRjIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9uZXdfbm93X3V0Y8KgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X25vd191dGM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtbmV3LXkiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld195wqAoKSI+Z3N0X2RhdGVfdGltZV9uZXdfeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS1uZXcteW0iIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld195bcKgKCkiPmdzdF9kYXRlX3RpbWVfbmV3X3ltPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLW5ldy15bWQiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX25ld195bWTCoCgpIj5nc3RfZGF0ZV90aW1lX25ld195bWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtcmVmIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV9yZWbCoCgpIj5nc3RfZGF0ZV90aW1lX3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwjZ3N0LWRhdGUtdGltZS10by1nLWRhdGUtdGltZSIgdGl0bGU9ImdzdF9kYXRlX3RpbWVfdG9fZ19kYXRlX3RpbWXCoCgpIj5nc3RfZGF0ZV90aW1lX3RvX2dfZGF0ZV90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERhdGVUaW1lLmh0bWwiIHRpdGxlPSJHc3REYXRlVGltZSI+R3N0RGF0ZVRpbWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCNnc3QtZGF0ZS10aW1lLXRvLWlzbzg2MDEtc3RyaW5nIiB0aXRsZT0iZ3N0X2RhdGVfdGltZV90b19pc284NjAxX3N0cmluZ8KgKCkiPmdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI2dzdC1kYXRlLXRpbWUtdW5yZWYiIHRpdGxlPSJnc3RfZGF0ZV90aW1lX3VucmVmwqAoKSI+Z3N0X2RhdGVfdGltZV91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sIiB0aXRsZT0iR3N0RGF0ZVRpbWUiPkdzdERhdGVUaW1lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULURFQlVHOkNBUFMiIHRpdGxlPSJHU1RfREVCVUcoKSI+R1NUX0RFQlVHPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR3N0RGVidWdDYXRlZ29yeSIgdGl0bGU9InN0cnVjdCBHc3REZWJ1Z0NhdGVnb3J5Ij5Hc3REZWJ1Z0NhdGVnb3J5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ29sb3JGbGFncyIgdGl0bGU9ImVudW0gR3N0RGVidWdDb2xvckZsYWdzIj5Hc3REZWJ1Z0NvbG9yRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnQ29sb3JNb2RlIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0NvbG9yTW9kZSI+R3N0RGVidWdDb2xvck1vZGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnR3JhcGhEZXRhaWxzIiB0aXRsZT0iZW51bSBHc3REZWJ1Z0dyYXBoRGV0YWlscyI+R3N0RGVidWdHcmFwaERldGFpbHM8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdERlYnVnTGV2ZWwiIHRpdGxlPSJlbnVtIEdzdERlYnVnTGV2ZWwiPkdzdERlYnVnTGV2ZWw8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1hZGQtbG9nLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb27CoCgpIj5nc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1iaW4tdG8tZG90LWRhdGEiIHRpdGxlPSJnc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhwqAoKSI+Z3N0X2RlYnVnX2Jpbl90b19kb3RfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKSI+R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1iaW4tdG8tZG90LWZpbGUiIHRpdGxlPSJnc3RfZGVidWdfYmluX3RvX2RvdF9maWxlwqAoKSI+Z3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1CSU4tVE8tRE9ULUZJTEUtV0lUSC1UUzpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKCkiPkdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1iaW4tdG8tZG90LWZpbGUtd2l0aC10cyIgdGl0bGU9ImdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGVfd2l0aF90c8KgKCkiPmdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGVfd2l0aF90czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX0NBVEVHT1JZKCkiPkdTVF9ERUJVR19DQVRFR09SWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1FWFRFUk46Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4oKSI+R1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1mcmVlIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWXCoCgpIj5nc3RfZGVidWdfY2F0ZWdvcnlfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1HRVQ6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19DQVRFR09SWV9HRVQoKSI+R1NUX0RFQlVHX0NBVEVHT1JZX0dFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtY29sb3IiIHRpdGxlPSJnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9ywqAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9jb2xvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtZGVzY3JpcHRpb24iIHRpdGxlPSJnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uwqAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZcKgKCkiPmdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1nZXQtdGhyZXNob2xkIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGTCoCgpIj5nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1JTklUOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfQ0FURUdPUllfSU5JVCgpIj5HU1RfREVCVUdfQ0FURUdPUllfSU5JVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1yZXNldC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfY2F0ZWdvcnlfcmVzZXRfdGhyZXNob2xkwqAoKSI+Z3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jYXRlZ29yeS1zZXQtdGhyZXNob2xkIiB0aXRsZT0iZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGTCoCgpIj5nc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1DQVRFR09SWS1TVEFUSUM6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMoKSI+R1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jb25zdHJ1Y3QtdGVybS1jb2xvciIgdGl0bGU9ImdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcsKgKCkiPmdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1jb25zdHJ1Y3Qtd2luLWNvbG9yIiB0aXRsZT0iZ3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3LCoCgpIj5nc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfRlVOQ1BUUigpIj5HU1RfREVCVUdfRlVOQ1BUUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1GVU5DUFRSLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19GVU5DUFRSX05BTUUoKSI+R1NUX0RFQlVHX0ZVTkNQVFJfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtYWxsLWNhdGVnb3JpZXMiIHRpdGxlPSJnc3RfZGVidWdfZ2V0X2FsbF9jYXRlZ29yaWVzwqAoKSI+Z3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtY29sb3ItbW9kZSIgdGl0bGU9ImdzdF9kZWJ1Z19nZXRfY29sb3JfbW9kZcKgKCkiPmdzdF9kZWJ1Z19nZXRfY29sb3JfbW9kZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1nZXQtZGVmYXVsdC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkwqAoKSI+Z3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1pcy1hY3RpdmUiIHRpdGxlPSJnc3RfZGVidWdfaXNfYWN0aXZlwqAoKSI+Z3N0X2RlYnVnX2lzX2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1pcy1jb2xvcmVkIiB0aXRsZT0iZ3N0X2RlYnVnX2lzX2NvbG9yZWTCoCgpIj5nc3RfZGVidWdfaXNfY29sb3JlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sZXZlbC1nZXQtbmFtZSIgdGl0bGU9ImdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZcKgKCkiPmdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ciIHRpdGxlPSJnc3RfZGVidWdfbG9nwqAoKSI+Z3N0X2RlYnVnX2xvZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ctZGVmYXVsdCIgdGl0bGU9ImdzdF9kZWJ1Z19sb2dfZGVmYXVsdMKgKCkiPmdzdF9kZWJ1Z19sb2dfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1sb2ctdmFsaXN0IiB0aXRsZT0iZ3N0X2RlYnVnX2xvZ192YWxpc3TCoCgpIj5nc3RfZGVidWdfbG9nX3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1tZXNzYWdlLWdldCIgdGl0bGU9ImdzdF9kZWJ1Z19tZXNzYWdlX2dldMKgKCkiPmdzdF9kZWJ1Z19tZXNzYWdlX2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9ERUJVR19PQkpFQ1QoKSI+R1NUX0RFQlVHX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1QQUQtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0RFQlVHX1BBRF9OQU1FKCkiPkdTVF9ERUJVR19QQURfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1wcmludC1zdGFjay10cmFjZSIgdGl0bGU9ImdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZcKgKCkiPmdzdF9kZWJ1Z19wcmludF9zdGFja190cmFjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1ERUJVRy1SRUdJU1RFUi1GVU5DUFRSOkNBUFMiIHRpdGxlPSJHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUigpIj5HU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1yZW1vdmUtbG9nLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb27CoCgpIj5nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1yZW1vdmUtbG9nLWZ1bmN0aW9uLWJ5LWRhdGEiIHRpdGxlPSJnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhwqAoKSI+Z3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtYWN0aXZlIiB0aXRsZT0iZ3N0X2RlYnVnX3NldF9hY3RpdmXCoCgpIj5nc3RfZGVidWdfc2V0X2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtY29sb3JlZCIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfY29sb3JlZMKgKCkiPmdzdF9kZWJ1Z19zZXRfY29sb3JlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtY29sb3ItbW9kZSIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZcKgKCkiPmdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtY29sb3ItbW9kZS1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZ8KgKCkiPmdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtZGVmYXVsdC10aHJlc2hvbGQiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkwqAoKSI+Z3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtdGhyZXNob2xkLWZvci1uYW1lIiB0aXRsZT0iZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWXCoCgpIj5nc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy1zZXQtdGhyZXNob2xkLWZyb20tc3RyaW5nIiB0aXRsZT0iZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZnJvbV9zdHJpbmfCoCgpIj5nc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI2dzdC1kZWJ1Zy11bnNldC10aHJlc2hvbGQtZm9yLW5hbWUiIHRpdGxlPSJnc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lwqAoKSI+Z3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dTVC1ERUZJTkUtTUlOSS1PQkpFQ1QtVFlQRTpDQVBTIiB0aXRsZT0iR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKCkiPkdTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWRlaW5pdCIgdGl0bGU9ImdzdF9kZWluaXTCoCgpIj5nc3RfZGVpbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj5Hc3REZXZpY2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2VDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VDbGFzcyI+R3N0RGV2aWNlQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3JDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yQ2xhc3MiPkdzdERldmljZU1vbml0b3JDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCIgdGl0bGU9IkdzdERldmljZU1vbml0b3IiPkdzdERldmljZU1vbml0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlckNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyQ2xhc3MiPkdzdERldmljZVByb3ZpZGVyQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI0dzdERldmljZVByb3ZpZGVyRmFjdG9yeS1zdHJ1Y3QiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNHc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzcyIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeUNsYXNzIj5Hc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1jcmVhdGUtZWxlbWVudCIgdGl0bGU9ImdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnTCoCgpIj5nc3RfZGV2aWNlX2NyZWF0ZV9lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNnc3QtZGV2aWNlLWdldC1jYXBzIiB0aXRsZT0iZ3N0X2RldmljZV9nZXRfY2Fwc8KgKCkiPmdzdF9kZXZpY2VfZ2V0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlIj5Hc3REZXZpY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWRldmljZS1jbGFzcyIgdGl0bGU9ImdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzc8KgKCkiPmdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwiIHRpdGxlPSJHc3REZXZpY2UiPkdzdERldmljZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1nZXQtZGlzcGxheS1uYW1lIiB0aXRsZT0iZ3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lwqAoKSI+Z3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNnc3QtZGV2aWNlLWdldC1wcm9wZXJ0aWVzIiB0aXRsZT0iZ3N0X2RldmljZV9nZXRfcHJvcGVydGllc8KgKCkiPmdzdF9kZXZpY2VfZ2V0X3Byb3BlcnRpZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlIj5Hc3REZXZpY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtaGFzLWNsYXNzZXMiIHRpdGxlPSJnc3RfZGV2aWNlX2hhc19jbGFzc2VzwqAoKSI+Z3N0X2RldmljZV9oYXNfY2xhc3NlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwiIHRpdGxlPSJHc3REZXZpY2UiPkdzdERldmljZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1oYXMtY2xhc3Nlc3YiIHRpdGxlPSJnc3RfZGV2aWNlX2hhc19jbGFzc2VzdsKgKCkiPmdzdF9kZXZpY2VfaGFzX2NsYXNzZXN2PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWFkZC1maWx0ZXIiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcsKgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWdldC1idXMiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2J1c8KgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfYnVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWdldC1kZXZpY2VzIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZpY2VzwqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZpY2VzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWdldC1wcm92aWRlcnMiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Byb3ZpZGVyc8KgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfcHJvdmlkZXJzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWdldC1zaG93LWFsbC1kZXZpY2VzIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzwqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLW5ldyIgdGl0bGU9ImdzdF9kZXZpY2VfbW9uaXRvcl9uZXfCoCgpIj5nc3RfZGV2aWNlX21vbml0b3JfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLXJlbW92ZS1maWx0ZXIiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfcmVtb3ZlX2ZpbHRlcsKgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9yZW1vdmVfZmlsdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLXNldC1zaG93LWFsbC1kZXZpY2VzIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX3NldF9zaG93X2FsbF9kZXZpY2VzwqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX3NldF9zaG93X2FsbF9kZXZpY2VzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLXN0YXJ0IiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX3N0YXJ0wqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLXN0b3AiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3Jfc3RvcMKgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItY2FuLW1vbml0b3IiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2Nhbl9tb25pdG9ywqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jYW5fbW9uaXRvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWFkZC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfbWV0YWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1hZGQtc3RhdGljLW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItY2xhc3MtZ2V0LW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGHCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2dldF9tZXRhZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLXNldC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfbWV0YWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1zZXQtc3RhdGljLW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZGV2aWNlLWFkZCIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZMKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWRldmljZS1yZW1vdmUiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9yZW1vdmXCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9yZW1vdmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWZpbmQiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZmluZMKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldCIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXTCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1kZXZpY2UtcHJvdmlkZXItdHlwZSIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfZGV2aWNlX3Byb3ZpZGVyX3R5cGXCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2RldmljZV9wcm92aWRlcl90eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGHCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1tZXRhZGF0YS1rZXlzIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWhhcy1jbGFzc2VzIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWhhcy1jbGFzc2VzdiIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3Nlc3bCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaGFzX2NsYXNzZXN2PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWxpc3QtZ2V0LWRldmljZS1wcm92aWRlcnMiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfbGlzdF9nZXRfZGV2aWNlX3Byb3ZpZGVyc8KgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9saXN0X2dldF9kZXZpY2VfcHJvdmlkZXJzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1nZXQtYnVzIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZ2V0LWRldmljZXMiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9nZXRfZGV2aWNlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWdldC1mYWN0b3J5IiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfZmFjdG9yecKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2ZhY3Rvcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWdldC1oaWRkZW4tcHJvdmlkZXJzIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfaGlkZGVuX3Byb3ZpZGVyc8KgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2hpZGRlbl9wcm92aWRlcnM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCIgdGl0bGU9IkdzdERldmljZU1vbml0b3IiPkdzdERldmljZU1vbml0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWhpZGUtcHJvdmlkZXIiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXLCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCIgdGl0bGU9IkdzdERldmljZU1vbml0b3IiPkdzdERldmljZU1vbml0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1yZWdpc3RlciIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfcmVnaXN0ZXLCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItc3RhcnQiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0wqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLXN0b3AiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3DCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLXVuaGlkZS1wcm92aWRlciIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfdW5oaWRlX3Byb3ZpZGVywqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl91bmhpZGVfcHJvdmlkZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCIgdGl0bGU9IkdzdERldmljZU1vbml0b3IiPkdzdERldmljZU1vbml0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtcmVjb25maWd1cmUtZWxlbWVudCIgdGl0bGU9ImdzdF9kZXZpY2VfcmVjb25maWd1cmVfZWxlbWVudMKgKCkiPmdzdF9kZXZpY2VfcmVjb25maWd1cmVfZWxlbWVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwiIHRpdGxlPSJHc3REZXZpY2UiPkdzdERldmljZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwjR1NULURJU0FCTEUtR1NULURFQlVHOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9HU1RfREVCVUciPkdTVF9ESVNBQkxFX0dTVF9ERUJVRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwiIHRpdGxlPSJHc3RDb25maWciPkdzdENvbmZpZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwjR1NULURJU0FCTEUtUEFSU0U6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX1BBUlNFIj5HU1RfRElTQUJMRV9QQVJTRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwiIHRpdGxlPSJHc3RDb25maWciPkdzdENvbmZpZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwjR1NULURJU0FCTEUtUExVR0lOOkNBUFMiIHRpdGxlPSJHU1RfRElTQUJMRV9QTFVHSU4iPkdTVF9ESVNBQkxFX1BMVUdJTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwiIHRpdGxlPSJHc3RDb25maWciPkdzdENvbmZpZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwjR1NULURJU0FCTEUtUkVHSVNUUlk6Q0FQUyIgdGl0bGU9IkdTVF9ESVNBQkxFX1JFR0lTVFJZIj5HU1RfRElTQUJMRV9SRUdJU1RSWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Q29uZmlnLmh0bWwiIHRpdGxlPSJHc3RDb25maWciPkdzdENvbmZpZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEUiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5FPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1uby1tb3JlLXBhZHMiIHRpdGxlPSJUaGUg4oCcbm8tbW9yZS1wYWRz4oCdIHNpZ25hbCI+R3N0RWxlbWVudDo6bm8tbW9yZS1wYWRzPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1wYWQtYWRkZWQiIHRpdGxlPSJUaGUg4oCccGFkLWFkZGVk4oCdIHNpZ25hbCI+R3N0RWxlbWVudDo6cGFkLWFkZGVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1wYWQtcmVtb3ZlZCIgdGl0bGU9IlRoZSDigJxwYWQtcmVtb3ZlZOKAnSBzaWduYWwiPkdzdEVsZW1lbnQ6OnBhZC1yZW1vdmVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENhbGxBc3luY0Z1bmMiIHRpdGxlPSJHc3RFbGVtZW50Q2FsbEFzeW5jRnVuY8KgKCkiPkdzdEVsZW1lbnRDYWxsQXN5bmNGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEVsZW1lbnRDbGFzcyI+R3N0RWxlbWVudENsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3Rvcnktc3RydWN0IiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGU8L2E+LCB0eXBlZGVmIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEVsZW1lbnRGbGFncyI+R3N0RWxlbWVudEZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWJvcnQtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9hYm9ydF9zdGF0ZcKgKCkiPmdzdF9lbGVtZW50X2Fib3J0X3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFkZC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9hZGRfcGFkwqAoKSI+Z3N0X2VsZW1lbnRfYWRkX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcHJvcGVydHktZGVlcC1ub3RpZnktd2F0Y2giIHRpdGxlPSJnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2jCoCgpIj5nc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWRkLXByb3BlcnR5LW5vdGlmeS13YXRjaCIgdGl0bGU9ImdzdF9lbGVtZW50X2FkZF9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2jCoCgpIj5nc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUJVUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfQlVTKCkiPkdTVF9FTEVNRU5UX0JVUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jYWxsLWFzeW5jIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2FsbF9hc3luY8KgKCkiPmdzdF9lbGVtZW50X2NhbGxfYXN5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2hhbmdlLXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlwqAoKSI+Z3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YcKgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1hZGQtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZcKgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXN0YXRpYy1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfbWV0YWRhdGHCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1zdGF0aWMtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGXCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1nZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGHCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtZ2V0LXBhZC10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGXCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWdldC1wYWQtdGVtcGxhdGUtbGlzdCIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdMKgKCkiPmdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jbGFzcy1zZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGHCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3Mtc2V0LXN0YXRpYy1tZXRhZGF0YSIgdGl0bGU9ImdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGHCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUNMT0NLOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9DTE9DSygpIj5HU1RfRUxFTUVOVF9DTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jb250aW51ZS1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlwqAoKSI+Z3N0X2VsZW1lbnRfY29udGludWVfc3RhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY3JlYXRlLWFsbC1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzwqAoKSI+Z3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9FUlJPUigpIj5HU1RfRUxFTUVOVF9FUlJPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1FUlJPUi1XSVRILURFVEFJTFM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0VSUk9SX1dJVEhfREVUQUlMUygpIj5HU1RfRUxFTUVOVF9FUlJPUl9XSVRIX0RFVEFJTFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNpbmstYWxsLWNhcHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbGxfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jYW4tc2luay1hbnktY2FwcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHPCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWNhbi1zcmMtYWxsLWNhcHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYWxsX2NhcHPCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYWxsX2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY2FuLXNyYy1hbnktY2FwcyIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2Fwc8KgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1jcmVhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZcKgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWZpbmQiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmTCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LWVsZW1lbnQtdHlwZSIgdGl0bGU9ImdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZcKgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtbWV0YWRhdGEiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YcKgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC1tZXRhZGF0YS1rZXlzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5c8KgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhX2tleXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LW51bS1wYWQtdGVtcGxhdGVzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXPCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9udW1fcGFkX3RlbXBsYXRlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1nZXQtc3RhdGljLXBhZC10ZW1wbGF0ZXMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlc8KgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWdldC11cmktcHJvdG9jb2xzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3Byb3RvY29sc8KgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZ2V0LXVyaS10eXBlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGXCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1oYXMtaW50ZXJmYWNlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9oYXNfaW50ZXJmYWNlwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9oYXNfaW50ZXJmYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LWxpc3QtZmlsdGVyIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlcsKgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbGlzdC1nZXQtZWxlbWVudHMiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzwqAoKSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RWxlbWVudEZhY3RvcnkiPkdzdEVsZW1lbnRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1saXN0LWlzLXR5cGUiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfaXNfdHlwZcKgKCkiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9pc190eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiIHRpdGxlPSJnc3RfZWxlbWVudF9mYWN0b3J5X21ha2XCoCgpIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BTlkiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BTlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJT1ZJREVPLVNJTktTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9WSURFT19TSU5LUyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPVklERU9fU0lOS1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1BVURJTy1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPX0VOQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNPREFCTEU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEUiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERUNSWVBUT1I6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNSWVBUT1IiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNSWVBUT1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERU1VWEVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1ERVBBWUxPQURFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1FTkNSWVBUT1I6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNSWVBUT1IiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNSWVBUT1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1GT1JNQVRURVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NQVgtRUxFTUVOVFM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFMiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NQVhfRUxFTUVOVFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BTlkiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BTlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1BVURJTzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1JTUFHRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1NRVRBREFUQTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX01FVEFEQVRBIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEE8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1TVUJUSVRMRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1NVQlRJVExFIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfU1VCVElUTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NRURJQS1WSURFTzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1NVVhFUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSIj5HU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTVVYRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVJTRVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVJTRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1QQVlMT0FERVI6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TSU5LOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSyI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTks8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1TUkM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkMiPkdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TUkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sI0dTVC1FTEVNRU5ULUZBQ1RPUlktVFlQRS1WSURFTy1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfVklERU9fRU5DT0RFUiI+R1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1ZJREVPX0VOQ09ERVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnRGYWN0b3J5Ij5Hc3RFbGVtZW50RmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRkxPVy1FUlJPUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfRkxPV19FUlJPUigpIj5HU1RfRUxFTUVOVF9GTE9XX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1iYXNlLXRpbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtYnVzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2J1c8KgKCkiPmdzdF9lbGVtZW50X2dldF9idXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNsb2NrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jb21wYXRpYmxlLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZMKgKCkiPmdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY29tcGF0aWJsZS1wYWQtdGVtcGxhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGXCoCgpIj5nc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbnRleHQiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfY29udGV4dMKgKCkiPmdzdF9lbGVtZW50X2dldF9jb250ZXh0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jb250ZXh0cyIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9jb250ZXh0c8KgKCkiPmdzdF9lbGVtZW50X2dldF9jb250ZXh0czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY29udGV4dC11bmxvY2tlZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9jb250ZXh0X3VubG9ja2VkwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRfdW5sb2NrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWZhY3RvcnkiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfZmFjdG9yecKgKCkiPmdzdF9lbGVtZW50X2dldF9mYWN0b3J5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X25hbWUoKSI+Z3N0X2VsZW1lbnRfZ2V0X25hbWU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXBhcmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9wYXJlbnQoKSI+Z3N0X2VsZW1lbnRfZ2V0X3BhcmVudDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWTCoCgpIj5nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LXN0YXJ0LXRpbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZcKgKCkiPmdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0ZcKgKCkiPmdzdF9lbGVtZW50X2dldF9zdGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtc3RhdGljLXBhZCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtSU5GTzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfSU5GTygpIj5HU1RfRUxFTUVOVF9JTkZPPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUlORk8tV0lUSC1ERVRBSUxTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9JTkZPX1dJVEhfREVUQUlMUygpIj5HU1RfRUxFTUVOVF9JTkZPX1dJVEhfREVUQUlMUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JUy1MT0NLRUQtU1RBVEU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURSgpIj5HU1RfRUxFTUVOVF9JU19MT0NLRURfU1RBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXMtbG9ja2VkLXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlwqAoKSI+Z3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWl0ZXJhdGUtcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkc8KgKCkiPmdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1pdGVyYXRlLXNpbmstcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzwqAoKSI+Z3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtaXRlcmF0ZS1zcmMtcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHPCoCgpIj5nc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmsiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rwqAoKSI+Z3N0X2VsZW1lbnRfbGluazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZMKgKCkiPmdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1tYW55IiB0aXRsZT0iZ3N0X2VsZW1lbnRfbGlua19tYW55wqAoKSI+Z3N0X2VsZW1lbnRfbGlua19tYW55PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstcGFkcyIgdGl0bGU9ImdzdF9lbGVtZW50X2xpbmtfcGFkc8KgKCkiPmdzdF9lbGVtZW50X2xpbmtfcGFkczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLXBhZHMtZmlsdGVyZWQiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWTCoCgpIj5nc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1wYWRzLWZ1bGwiIHRpdGxlPSJnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbMKgKCkiPmdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxvc3Qtc3RhdGUiIHRpdGxlPSJnc3RfZWxlbWVudF9sb3N0X3N0YXRlwqAoKSI+Z3N0X2VsZW1lbnRfbG9zdF9zdGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LWVsZW1lbnQtbWFrZS1mcm9tLXVyaSIgdGl0bGU9ImdzdF9lbGVtZW50X21ha2VfZnJvbV91cmnCoCgpIj5nc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1tZXNzYWdlLWZ1bGwiIHRpdGxlPSJnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGzCoCgpIj5nc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbWVzc2FnZS1mdWxsLXdpdGgtZGV0YWlscyIgdGl0bGU9ImdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbF93aXRoX2RldGFpbHPCoCgpIj5nc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUFVVEhPUjpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtREVTQ1JJUFRJT046Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1ET0MtVVJJOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU1FVEFEQVRBLUlDT04tTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9JQ09OX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtTUVUQURBVEEtS0xBU1M6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTIj5HU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1NRVRBREFUQS1MT05HTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUiPkdTVF9FTEVNRU5UX01FVEFEQVRBX0xPTkdOQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX05BTUUoKSI+R1NUX0VMRU1FTlRfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1uby1tb3JlLXBhZHMiIHRpdGxlPSJnc3RfZWxlbWVudF9ub19tb3JlX3BhZHPCoCgpIj5nc3RfZWxlbWVudF9ub19tb3JlX3BhZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtUEFEUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfUEFEUygpIj5HU1RfRUxFTUVOVF9QQURTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfUEFSRU5UKCkiPkdTVF9FTEVNRU5UX1BBUkVOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1wb3N0LW1lc3NhZ2UiIHRpdGxlPSJnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2XCoCgpIj5nc3RfZWxlbWVudF9wb3N0X21lc3NhZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcHJvdmlkZS1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2vCoCgpIj5nc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5IiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnnCoCgpIj5nc3RfZWxlbWVudF9xdWVyeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1xdWVyeS1jb252ZXJ0IiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnlfY29udmVydMKgKCkiPmdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcXVlcnktZHVyYXRpb24iIHRpdGxlPSJnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbsKgKCkiPmdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXF1ZXJ5LXBvc2l0aW9uIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb27CoCgpIj5nc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfZWxlbWVudF9yZWdpc3RlcsKgKCkiPmdzdF9lbGVtZW50X3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50RmFjdG9yeSI+R3N0RWxlbWVudEZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbGVhc2UtcmVxdWVzdC1wYWQiIHRpdGxlPSJnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkwqAoKSI+Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1yZW1vdmUtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZMKgKCkiPmdzdF9lbGVtZW50X3JlbW92ZV9wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtcmVtb3ZlLXByb3BlcnR5LW5vdGlmeS13YXRjaCIgdGl0bGU9ImdzdF9lbGVtZW50X3JlbW92ZV9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2jCoCgpIj5nc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlcXVlc3QtcGFkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWTCoCgpIj5nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZWVrIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2Vla8KgKCkiPmdzdF9lbGVtZW50X3NlZWs8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2Vlay1zaW1wbGUiIHRpdGxlPSJnc3RfZWxlbWVudF9zZWVrX3NpbXBsZcKgKCkiPmdzdF9lbGVtZW50X3NlZWtfc2ltcGxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNlbmQtZXZlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9zZW5kX2V2ZW50wqAoKSI+Z3N0X2VsZW1lbnRfc2VuZF9ldmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtYmFzZS10aW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZcKgKCkiPmdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWJ1cyIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9idXPCoCgpIj5nc3RfZWxlbWVudF9zZXRfYnVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1jbG9jayIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9jbG9ja8KgKCkiPmdzdF9lbGVtZW50X3NldF9jbG9jazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtY29udGV4dCIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9jb250ZXh0wqAoKSI+Z3N0X2VsZW1lbnRfc2V0X2NvbnRleHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWxvY2tlZC1zdGF0ZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGXCoCgpIj5nc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X25hbWUoKSI+Z3N0X2VsZW1lbnRfc2V0X25hbWU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXBhcmVudCIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9wYXJlbnQoKSI+Z3N0X2VsZW1lbnRfc2V0X3BhcmVudDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhcnQtdGltZSIgdGl0bGU9ImdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lwqAoKSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc2V0X3N0YXRlwqAoKSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULVNUQVJULVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX1NUQVJUX1RJTUUoKSI+R1NUX0VMRU1FTlRfU1RBUlRfVElNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zdGF0ZS1jaGFuZ2UtcmV0dXJuLWdldC1uYW1lIiB0aXRsZT0iZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZcKgKCkiPmdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc3RhdGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZcKgKCkiPmdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXN5bmMtc3RhdGUtd2l0aC1wYXJlbnQiIHRpdGxlPSJnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50wqAoKSI+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC11bmxpbmsiIHRpdGxlPSJnc3RfZWxlbWVudF91bmxpbmvCoCgpIj5nc3RfZWxlbWVudF91bmxpbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtdW5saW5rLW1hbnkiIHRpdGxlPSJnc3RfZWxlbWVudF91bmxpbmtfbWFuecKgKCkiPmdzdF9lbGVtZW50X3VubGlua19tYW55PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXVubGluay1wYWRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHPCoCgpIj5nc3RfZWxlbWVudF91bmxpbmtfcGFkczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1XQVJOSU5HOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9XQVJOSU5HKCkiPkdTVF9FTEVNRU5UX1dBUk5JTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtV0FSTklORy1XSVRILURFVEFJTFM6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX1dBUk5JTkdfV0lUSF9ERVRBSUxTKCkiPkdTVF9FTEVNRU5UX1dBUk5JTkdfV0lUSF9ERVRBSUxTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9FUlJPUigpIj5HU1RfRVJST1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI2dzdC1lcnJvci1nZXQtbWVzc2FnZSIgdGl0bGU9ImdzdF9lcnJvcl9nZXRfbWVzc2FnZcKgKCkiPmdzdF9lcnJvcl9nZXRfbWVzc2FnZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPkdzdEdFcnJvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1FUlJPUi1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9FUlJPUl9PQkpFQ1QoKSI+R1NUX0VSUk9SX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULUVSUk9SLVNZU1RFTTpDQVBTIiB0aXRsZT0iR1NUX0VSUk9SX1NZU1RFTSI+R1NUX0VSUk9SX1NZU1RFTTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPkdzdEdFcnJvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RFdmVudCI+R3N0RXZlbnQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RFdmVudFR5cGUiIHRpdGxlPSJlbnVtIEdzdEV2ZW50VHlwZSI+R3N0RXZlbnRUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdEV2ZW50VHlwZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RFdmVudFR5cGVGbGFncyI+R3N0RXZlbnRUeXBlRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWNvcHkiIHRpdGxlPSJnc3RfZXZlbnRfY29wecKgKCkiPmdzdF9ldmVudF9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtY29weS1zZWdtZW50IiB0aXRsZT0iZ3N0X2V2ZW50X2NvcHlfc2VnbWVudMKgKCkiPmdzdF9ldmVudF9jb3B5X3NlZ21lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtcnVubmluZy10aW1lLW9mZnNldCIgdGl0bGU9ImdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldMKgKCkiPmdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LWdldC1zZXFudW0iIHRpdGxlPSJnc3RfZXZlbnRfZ2V0X3NlcW51bcKgKCkiPmdzdF9ldmVudF9nZXRfc2VxbnVtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtZ2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF9ldmVudF9nZXRfc3RydWN0dXJlwqAoKSI+Z3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1oYXMtbmFtZSIgdGl0bGU9ImdzdF9ldmVudF9oYXNfbmFtZcKgKCkiPmdzdF9ldmVudF9oYXNfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLURPV05TVFJFQU06Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9JU19ET1dOU1RSRUFNKCkiPkdTVF9FVkVOVF9JU19ET1dOU1RSRUFNPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtSVMtU0VSSUFMSVpFRDpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX0lTX1NFUklBTElaRUQoKSI+R1NUX0VWRU5UX0lTX1NFUklBTElaRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1JUy1TVElDS1k6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9JU19TVElDS1koKSI+R1NUX0VWRU5UX0lTX1NUSUNLWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUlTLVVQU1RSRUFNOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfSVNfVVBTVFJFQU0oKSI+R1NUX0VWRU5UX0lTX1VQU1RSRUFNPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfZXZlbnRfaXNfd3JpdGFibGUoKSI+Z3N0X2V2ZW50X2lzX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtTUFLRS1UWVBFOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfTUFLRV9UWVBFKCkiPkdTVF9FVkVOVF9NQUtFX1RZUEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X2V2ZW50X21ha2Vfd3JpdGFibGUoKSI+Z3N0X2V2ZW50X21ha2Vfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctYnVmZmVyLXNpemUiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplwqAoKSI+Z3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1jYXBzIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19jYXBzwqAoKSI+Z3N0X2V2ZW50X25ld19jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWN1c3RvbSIgdGl0bGU9ImdzdF9ldmVudF9uZXdfY3VzdG9twqAoKSI+Z3N0X2V2ZW50X25ld19jdXN0b208L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZW9zIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19lb3PCoCgpIj5nc3RfZXZlbnRfbmV3X2VvczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1mbHVzaC1zdGFydCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnTCoCgpIj5nc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LWZsdXNoLXN0b3AiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3DCoCgpIj5nc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctZ2FwIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19nYXDCoCgpIj5nc3RfZXZlbnRfbmV3X2dhcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1sYXRlbmN5IiB0aXRsZT0iZ3N0X2V2ZW50X25ld19sYXRlbmN5wqAoKSI+Z3N0X2V2ZW50X25ld19sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LW5hdmlnYXRpb24iIHRpdGxlPSJnc3RfZXZlbnRfbmV3X25hdmlnYXRpb27CoCgpIj5nc3RfZXZlbnRfbmV3X25hdmlnYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctcHJvdGVjdGlvbiIgdGl0bGU9ImdzdF9ldmVudF9uZXdfcHJvdGVjdGlvbsKgKCkiPmdzdF9ldmVudF9uZXdfcHJvdGVjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1xb3MiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3Fvc8KgKCkiPmdzdF9ldmVudF9uZXdfcW9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXJlY29uZmlndXJlIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZcKgKCkiPmdzdF9ldmVudF9uZXdfcmVjb25maWd1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VlayIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2Vla8KgKCkiPmdzdF9ldmVudF9uZXdfc2VlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zZWdtZW50IiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zZWdtZW50wqAoKSI+Z3N0X2V2ZW50X25ld19zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXNlZ21lbnQtZG9uZSIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lwqAoKSI+Z3N0X2V2ZW50X25ld19zZWdtZW50X2RvbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VsZWN0LXN0cmVhbXMiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zwqAoKSI+Z3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zaW5rLW1lc3NhZ2UiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZcKgKCkiPmdzdF9ldmVudF9uZXdfc2lua19tZXNzYWdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0ZXAiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3N0ZXDCoCgpIj5nc3RfZXZlbnRfbmV3X3N0ZXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RyZWFtLWNvbGxlY3Rpb24iIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3N0cmVhbV9jb2xsZWN0aW9uwqAoKSI+Z3N0X2V2ZW50X25ld19zdHJlYW1fY29sbGVjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zdHJlYW0tZ3JvdXAtZG9uZSIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc3RyZWFtX2dyb3VwX2RvbmXCoCgpIj5nc3RfZXZlbnRfbmV3X3N0cmVhbV9ncm91cF9kb25lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0cmVhbS1zdGFydCIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0wqAoKSI+Z3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctdGFnIiB0aXRsZT0iZ3N0X2V2ZW50X25ld190YWfCoCgpIj5nc3RfZXZlbnRfbmV3X3RhZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy10b2MiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3RvY8KgKCkiPmdzdF9ldmVudF9uZXdfdG9jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXRvYy1zZWxlY3QiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3RvY19zZWxlY3TCoCgpIj5nc3RfZXZlbnRfbmV3X3RvY19zZWxlY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1idWZmZXItc2l6ZSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZcKgKCkiPmdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWNhcHMiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfY2Fwc8KgKCkiPmdzdF9ldmVudF9wYXJzZV9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtZmx1c2gtc3RvcCIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1nYXAiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfZ2FwwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX2dhcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLWdyb3VwLWlkIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX2dyb3VwX2lkwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX2dyb3VwX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtbGF0ZW5jeSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9sYXRlbmN5wqAoKSI+Z3N0X2V2ZW50X3BhcnNlX2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1wcm90ZWN0aW9uIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb27CoCgpIj5nc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXFvcyIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9xb3PCoCgpIj5nc3RfZXZlbnRfcGFyc2VfcW9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc2VlayIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zZWVrwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3NlZWs8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWdtZW50IiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnTCoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc2VnbWVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXNlZ21lbnQtZG9uZSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zZWdtZW50X2RvbmXCoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc2VnbWVudF9kb25lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc2VsZWN0LXN0cmVhbXMiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc2VsZWN0X3N0cmVhbXPCoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc2VsZWN0X3N0cmVhbXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zaW5rLW1lc3NhZ2UiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc2lua19tZXNzYWdlwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0ZXAiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RlcMKgKCkiPmdzdF9ldmVudF9wYXJzZV9zdGVwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc3RyZWFtIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbcKgKCkiPmdzdF9ldmVudF9wYXJzZV9zdHJlYW08L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tY29sbGVjdGlvbiIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbsKgKCkiPmdzdF9ldmVudF9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbS1mbGFncyIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZmxhZ3PCoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2ZsYWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc3RyZWFtLWdyb3VwLWRvbmUiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2dyb3VwX2RvbmXCoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2dyb3VwX2RvbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tc3RhcnQiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0wqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXRhZyIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV90YWfCoCgpIj5nc3RfZXZlbnRfcGFyc2VfdGFnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtdG9jIiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3RvY8KgKCkiPmdzdF9ldmVudF9wYXJzZV90b2M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS10b2Mtc2VsZWN0IiB0aXRsZT0iZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3TCoCgpIj5nc3RfZXZlbnRfcGFyc2VfdG9jX3NlbGVjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXJlZiIgdGl0bGU9ImdzdF9ldmVudF9yZWbCoCgpIj5nc3RfZXZlbnRfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcmVwbGFjZSIgdGl0bGU9ImdzdF9ldmVudF9yZXBsYWNlwqAoKSI+Z3N0X2V2ZW50X3JlcGxhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TRVFOVU06Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9TRVFOVU0oKSI+R1NUX0VWRU5UX1NFUU5VTTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1ncm91cC1pZCIgdGl0bGU9ImdzdF9ldmVudF9zZXRfZ3JvdXBfaWTCoCgpIj5nc3RfZXZlbnRfc2V0X2dyb3VwX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtc2V0LXJ1bm5pbmctdGltZS1vZmZzZXQiIHRpdGxlPSJnc3RfZXZlbnRfc2V0X3J1bm5pbmdfdGltZV9vZmZzZXTCoCgpIj5nc3RfZXZlbnRfc2V0X3J1bm5pbmdfdGltZV9vZmZzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1zZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X2V2ZW50X3NldF9zZXFudW3CoCgpIj5nc3RfZXZlbnRfc2V0X3NlcW51bTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1zdHJlYW0iIHRpdGxlPSJnc3RfZXZlbnRfc2V0X3N0cmVhbcKgKCkiPmdzdF9ldmVudF9zZXRfc3RyZWFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtc2V0LXN0cmVhbS1mbGFncyIgdGl0bGU9ImdzdF9ldmVudF9zZXRfc3RyZWFtX2ZsYWdzwqAoKSI+Z3N0X2V2ZW50X3NldF9zdHJlYW1fZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1zdGVhbCIgdGl0bGU9ImdzdF9ldmVudF9zdGVhbMKgKCkiPmdzdF9ldmVudF9zdGVhbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXRha2UiIHRpdGxlPSJnc3RfZXZlbnRfdGFrZcKgKCkiPmdzdF9ldmVudF90YWtlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtVElNRVNUQU1QOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfVElNRVNUQU1QKCkiPkdTVF9FVkVOVF9USU1FU1RBTVA8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFOkNBUFMiIHRpdGxlPSJHU1RfRVZFTlRfVFlQRSgpIj5HU1RfRVZFTlRfVFlQRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVRZUEUtQk9USDpDQVBTIiB0aXRsZT0iR1NUX0VWRU5UX1RZUEVfQk9USCI+R1NUX0VWRU5UX1RZUEVfQk9USDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtZ2V0LWZsYWdzIiB0aXRsZT0iZ3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzwqAoKSI+Z3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9ldmVudF90eXBlX2dldF9uYW1lwqAoKSI+Z3N0X2V2ZW50X3R5cGVfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dTVC1FVkVOVC1UWVBFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9FVkVOVF9UWVBFX05BTUUoKSI+R1NUX0VWRU5UX1RZUEVfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXR5cGUtdG8tcXVhcmsiIHRpdGxlPSJnc3RfZXZlbnRfdHlwZV90b19xdWFya8KgKCkiPmdzdF9ldmVudF90eXBlX3RvX3F1YXJrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtdW5yZWYiIHRpdGxlPSJnc3RfZXZlbnRfdW5yZWbCoCgpIj5nc3RfZXZlbnRfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC13cml0YWJsZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlwqAoKSI+Z3N0X2V2ZW50X3dyaXRhYmxlX3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4RiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkY8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LWZpbGVuYW1lLXRvLXVyaSIgdGl0bGU9ImdzdF9maWxlbmFtZV90b191cmnCoCgpIj5nc3RfZmlsZW5hbWVfdG9fdXJpPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUZJWE1FOkNBUFMiIHRpdGxlPSJHU1RfRklYTUUoKSI+R1NUX0ZJWE1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUZJWE1FLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX0ZJWE1FX09CSkVDVCgpIj5HU1RfRklYTUVfT0JKRUNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC1mbGFnc2V0LXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X2ZsYWdzZXRfcmVnaXN0ZXLCoCgpIj5nc3RfZmxhZ3NldF9yZWdpc3RlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRkxBRy1TRVQtTUFTSy1FWEFDVDpDQVBTIiB0aXRsZT0iR1NUX0ZMQUdfU0VUX01BU0tfRVhBQ1QiPkdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdEZsb3dSZXR1cm4iPkdzdEZsb3dSZXR1cm48L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1mbG93LWdldC1uYW1lIiB0aXRsZT0iZ3N0X2Zsb3dfZ2V0X25hbWXCoCgpIj5nc3RfZmxvd19nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1mbG93LXRvLXF1YXJrIiB0aXRsZT0iZ3N0X2Zsb3dfdG9fcXVhcmvCoCgpIj5nc3RfZmxvd190b19xdWFyazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiIHRpdGxlPSJlbnVtIEdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIiB0aXRsZT0iR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdERlZmluaXRpb24iIHRpdGxlPSJzdHJ1Y3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiI+R3N0Rm9ybWF0RGVmaW5pdGlvbjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIiB0aXRsZT0iR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXRzLWNvbnRhaW5zIiB0aXRsZT0iZ3N0X2Zvcm1hdHNfY29udGFpbnPCoCgpIj5nc3RfZm9ybWF0c19jb250YWluczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiIHRpdGxlPSJHc3RGb3JtYXQiPkdzdEZvcm1hdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1nZXQtYnktbmljayIgdGl0bGU9ImdzdF9mb3JtYXRfZ2V0X2J5X25pY2vCoCgpIj5nc3RfZm9ybWF0X2dldF9ieV9uaWNrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LWdldC1kZXRhaWxzIiB0aXRsZT0iZ3N0X2Zvcm1hdF9nZXRfZGV0YWlsc8KgKCkiPmdzdF9mb3JtYXRfZ2V0X2RldGFpbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIiB0aXRsZT0iR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfZm9ybWF0X2dldF9uYW1lwqAoKSI+Z3N0X2Zvcm1hdF9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiIHRpdGxlPSJHc3RGb3JtYXQiPkdzdEZvcm1hdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjZ3N0LWZvcm1hdC1pdGVyYXRlLWRlZmluaXRpb25zIiB0aXRsZT0iZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zwqAoKSI+Z3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVBFUkNFTlQtTUFYOkNBUFMiIHRpdGxlPSJHU1RfRk9STUFUX1BFUkNFTlRfTUFYIj5HU1RfRk9STUFUX1BFUkNFTlRfTUFYPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVBFUkNFTlQtU0NBTEU6Q0FQUyIgdGl0bGU9IkdTVF9GT1JNQVRfUEVSQ0VOVF9TQ0FMRSI+R1NUX0ZPUk1BVF9QRVJDRU5UX1NDQUxFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCIgdGl0bGU9IkdzdEZvcm1hdCI+R3N0Rm9ybWF0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNnc3QtZm9ybWF0LXJlZ2lzdGVyIiB0aXRsZT0iZ3N0X2Zvcm1hdF9yZWdpc3RlcsKgKCkiPmdzdF9mb3JtYXRfcmVnaXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sIiB0aXRsZT0iR3N0Rm9ybWF0Ij5Hc3RGb3JtYXQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI2dzdC1mb3JtYXQtdG8tcXVhcmsiIHRpdGxlPSJnc3RfZm9ybWF0X3RvX3F1YXJrwqAoKSI+Z3N0X2Zvcm1hdF90b19xdWFyazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwiIHRpdGxlPSJHc3RGb3JtYXQiPkdzdEZvcm1hdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtRk9VUkNDLUFSR1M6Q0FQUyIgdGl0bGU9IkdTVF9GT1VSQ0NfQVJHUygpIj5HU1RfRk9VUkNDX0FSR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULUZPVVJDQy1GT1JNQVQ6Q0FQUyIgdGl0bGU9IkdTVF9GT1VSQ0NfRk9STUFUIj5HU1RfRk9VUkNDX0ZPUk1BVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1GVU5DVElPTjpDQVBTIiB0aXRsZT0iR1NUX0ZVTkNUSU9OIj5HU1RfRlVOQ1RJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhHIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RzwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0RPVUJMRS1GUk9NLUJFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX0ZST01fQkUoKSI+R0RPVUJMRV9GUk9NX0JFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dET1VCTEUtRlJPTS1MRTpDQVBTIiB0aXRsZT0iR0RPVUJMRV9GUk9NX0xFKCkiPkdET1VCTEVfRlJPTV9MRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVNXQVAtTEUtQkU6Q0FQUyIgdGl0bGU9IkdET1VCTEVfU1dBUF9MRV9CRcKgKCkiPkdET1VCTEVfU1dBUF9MRV9CRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVRPLUJFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX1RPX0JFKCkiPkdET1VCTEVfVE9fQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LWdkb3VibGUtdG8tZ3VpbnQ2NCIgdGl0bGU9ImdzdF9nZG91YmxlX3RvX2d1aW50NjQoKSI+Z3N0X2dkb3VibGVfdG9fZ3VpbnQ2NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRE9VQkxFLVRPLUxFOkNBUFMiIHRpdGxlPSJHRE9VQkxFX1RPX0xFKCkiPkdET1VCTEVfVE9fTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULUZST00tQkU6Q0FQUyIgdGl0bGU9IkdGTE9BVF9GUk9NX0JFKCkiPkdGTE9BVF9GUk9NX0JFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dGTE9BVC1GUk9NLUxFOkNBUFMiIHRpdGxlPSJHRkxPQVRfRlJPTV9MRSgpIj5HRkxPQVRfRlJPTV9MRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtU1dBUC1MRS1CRTpDQVBTIiB0aXRsZT0iR0ZMT0FUX1NXQVBfTEVfQkXCoCgpIj5HRkxPQVRfU1dBUF9MRV9CRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHRkxPQVQtVE8tQkU6Q0FQUyIgdGl0bGU9IkdGTE9BVF9UT19CRSgpIj5HRkxPQVRfVE9fQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR0ZMT0FULVRPLUxFOkNBUFMiIHRpdGxlPSJHRkxPQVRfVE9fTEUoKSI+R0ZMT0FUX1RPX0xFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjR3N0R2hvc3RQYWQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtYWN0aXZhdGUtbW9kZS1kZWZhdWx0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHTCoCgpIj5nc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX21vZGVfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1jb25zdHJ1Y3QiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdMKgKCkiPmdzdF9naG9zdF9wYWRfY29uc3RydWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLWdldC10YXJnZXQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXTCoCgpIj5nc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtaW50ZXJuYWwtYWN0aXZhdGUtbW9kZS1kZWZhdWx0IiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHTCoCgpIj5nc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX21vZGVfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXciIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ld8KgKCkiPmdzdF9naG9zdF9wYWRfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1naG9zdC1wYWQtbmV3LW5vLXRhcmdldCIgdGl0bGU9ImdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldMKgKCkiPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LWdob3N0LXBhZC1uZXctbm8tdGFyZ2V0LWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtZ2hvc3QtcGFkLXNldC10YXJnZXQiIHRpdGxlPSJnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXTCoCgpIj5nc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtZ3VpbnQ2NC10by1nZG91YmxlIiB0aXRsZT0iZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSgpIj5nc3RfZ3VpbnQ2NF90b19nZG91YmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4SSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkk8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUlORk86Q0FQUyIgdGl0bGU9IkdTVF9JTkZPKCkiPkdTVF9JTkZPPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUlORk8tT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfSU5GT19PQkpFQ1QoKSI+R1NUX0lORk9fT0JKRUNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXByaW50ZiIgdGl0bGU9ImdzdF9pbmZvX3N0cmR1cF9wcmludGbCoCgpIj5nc3RfaW5mb19zdHJkdXBfcHJpbnRmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXZwcmludGYiIHRpdGxlPSJnc3RfaW5mb19zdHJkdXBfdnByaW50ZsKgKCkiPmdzdF9pbmZvX3N0cmR1cF92cHJpbnRmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tdmFzcHJpbnRmIiB0aXRsZT0iZ3N0X2luZm9fdmFzcHJpbnRmwqAoKSI+Z3N0X2luZm9fdmFzcHJpbnRmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCIgdGl0bGU9ImdzdF9pbml0wqAoKSI+Z3N0X2luaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIiB0aXRsZT0iR3N0Ij5Hc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0LWNoZWNrIiB0aXRsZT0iZ3N0X2luaXRfY2hlY2vCoCgpIj5nc3RfaW5pdF9jaGVjazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPkdzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQtZ2V0LW9wdGlvbi1ncm91cCIgdGl0bGU9ImdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXDCoCgpIj5nc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaXMtaW5pdGlhbGl6ZWQiIHRpdGxlPSJnc3RfaXNfaW5pdGlhbGl6ZWTCoCgpIj5nc3RfaXNfaW5pdGlhbGl6ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIiB0aXRsZT0iR3N0Ij5Hc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SOkNBUFMiIHRpdGxlPSJHU1RfSVRFUkFUT1IoKSI+R1NUX0lURVJBVE9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yIiB0aXRsZT0ic3RydWN0IEdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckNvcHlGdW5jdGlvbsKgKCkiPkdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckZvbGRGdW5jdGlvbsKgKCkiPkdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbsKgKCkiPkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24iIHRpdGxlPSJHc3RJdGVyYXRvckZyZWVGdW5jdGlvbsKgKCkiPkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR3N0SXRlcmF0b3JJdGVtIiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvckl0ZW0iPkdzdEl0ZXJhdG9ySXRlbTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb27CoCgpIj5Hc3RJdGVyYXRvckl0ZW1GdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb27CoCgpIj5Hc3RJdGVyYXRvck5leHRGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI0dzdEl0ZXJhdG9yUmVzdWx0IiB0aXRsZT0iZW51bSBHc3RJdGVyYXRvclJlc3VsdCI+R3N0SXRlcmF0b3JSZXN1bHQ8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uIiB0aXRsZT0iR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbsKgKCkiPkdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItQ09PS0lFOkNBUFMiIHRpdGxlPSJHU1RfSVRFUkFUT1JfQ09PS0lFKCkiPkdTVF9JVEVSQVRPUl9DT09LSUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWNvcHkiIHRpdGxlPSJnc3RfaXRlcmF0b3JfY29wecKgKCkiPmdzdF9pdGVyYXRvcl9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1maWx0ZXIiIHRpdGxlPSJnc3RfaXRlcmF0b3JfZmlsdGVywqAoKSI+Z3N0X2l0ZXJhdG9yX2ZpbHRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZmluZC1jdXN0b20iIHRpdGxlPSJnc3RfaXRlcmF0b3JfZmluZF9jdXN0b23CoCgpIj5nc3RfaXRlcmF0b3JfZmluZF9jdXN0b208L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLWZvbGQiIHRpdGxlPSJnc3RfaXRlcmF0b3JfZm9sZMKgKCkiPmdzdF9pdGVyYXRvcl9mb2xkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1mb3JlYWNoIiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX2ZvcmVhY2jCoCgpIj5nc3RfaXRlcmF0b3JfZm9yZWFjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItZnJlZSIgdGl0bGU9ImdzdF9pdGVyYXRvcl9mcmVlwqAoKSI+Z3N0X2l0ZXJhdG9yX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjR1NULUlURVJBVE9SLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9JVEVSQVRPUl9MT0NLKCkiPkdTVF9JVEVSQVRPUl9MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXciIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV3wqAoKSI+Z3N0X2l0ZXJhdG9yX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNnc3QtaXRlcmF0b3ItbmV3LWxpc3QiIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV3X2xpc3TCoCgpIj5nc3RfaXRlcmF0b3JfbmV3X2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLW5ldy1zaW5nbGUiIHRpdGxlPSJnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZcKgKCkiPmdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1uZXh0IiB0aXRsZT0iZ3N0X2l0ZXJhdG9yX25leHTCoCgpIj5nc3RfaXRlcmF0b3JfbmV4dDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCNHU1QtSVRFUkFUT1ItT1JJRy1DT09LSUU6Q0FQUyIgdGl0bGU9IkdTVF9JVEVSQVRPUl9PUklHX0NPT0tJRSgpIj5HU1RfSVRFUkFUT1JfT1JJR19DT09LSUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiIHRpdGxlPSJHc3RJdGVyYXRvciI+R3N0SXRlcmF0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwjZ3N0LWl0ZXJhdG9yLXB1c2giIHRpdGxlPSJnc3RfaXRlcmF0b3JfcHVzaMKgKCkiPmdzdF9pdGVyYXRvcl9wdXNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sIiB0aXRsZT0iR3N0SXRlcmF0b3IiPkdzdEl0ZXJhdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJdGVyYXRvci5odG1sI2dzdC1pdGVyYXRvci1yZXN5bmMiIHRpdGxlPSJnc3RfaXRlcmF0b3JfcmVzeW5jwqAoKSI+Z3N0X2l0ZXJhdG9yX3Jlc3luYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SXRlcmF0b3IuaHRtbCIgdGl0bGU9IkdzdEl0ZXJhdG9yIj5Hc3RJdGVyYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEwiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5MPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MRVZFTC1ERUZBVUxUOkNBUFMiIHRpdGxlPSJHU1RfTEVWRUxfREVGQVVMVCI+R1NUX0xFVkVMX0RFRkFVTFQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtTUFYOkNBUFMiIHRpdGxlPSJHU1RfTEVWRUxfTUFYIj5HU1RfTEVWRUxfTUFYPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHc3RMaWJyYXJ5RXJyb3IiIHRpdGxlPSJlbnVtIEdzdExpYnJhcnlFcnJvciI+R3N0TGlicmFyeUVycm9yPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj5Hc3RHRXJyb3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dTVC1MSUJSQVJZLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfTElCUkFSWV9FUlJPUiI+R1NUX0xJQlJBUllfRVJST1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sIiB0aXRsZT0iR3N0R0Vycm9yIj5Hc3RHRXJyb3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR1NULUxJQ0VOU0UtVU5LTk9XTjpDQVBTIiB0aXRsZT0iR1NUX0xJQ0VOU0VfVU5LTk9XTiI+R1NUX0xJQ0VOU0VfVU5LTk9XTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TG9ja0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RMb2NrRmxhZ3MiPkdzdExvY2tGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR1NULUxPQ0stRkxBRy1SRUFEV1JJVEU6Q0FQUyIgdGl0bGU9IkdTVF9MT0NLX0ZMQUdfUkVBRFdSSVRFIj5HU1RfTE9DS19GTEFHX1JFQURXUklURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1MT0c6Q0FQUyIgdGl0bGU9IkdTVF9MT0coKSI+R1NUX0xPRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dzdExvZ0Z1bmN0aW9uIiB0aXRsZT0iR3N0TG9nRnVuY3Rpb27CoCgpIj5Hc3RMb2dGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUxPRy1PQkpFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9MT0dfT0JKRUNUKCkiPkdTVF9MT0dfT0JKRUNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4TSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPk08L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtbWFrZS1lbGVtZW50LW1lc3NhZ2UtZGV0YWlscyIgdGl0bGU9ImdzdF9tYWtlX2VsZW1lbnRfbWVzc2FnZV9kZXRhaWxzwqAoKSI+Z3N0X21ha2VfZWxlbWVudF9tZXNzYWdlX2RldGFpbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtTUFLRS1GT1VSQ0M6Q0FQUyIgdGl0bGU9IkdTVF9NQUtFX0ZPVVJDQygpIj5HU1RfTUFLRV9GT1VSQ0M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1hcEZsYWdzIj5Hc3RNYXBGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWFwSW5mbyIgdGl0bGU9IkdzdE1hcEluZm8iPkdzdE1hcEluZm88L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1BUC1JTkZPLUlOSVQ6Q0FQUyIgdGl0bGU9IkdTVF9NQVBfSU5GT19JTklUIj5HU1RfTUFQX0lORk9fSU5JVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dTVC1NQVAtUkVBRFdSSVRFOkNBUFMiIHRpdGxlPSJHU1RfTUFQX1JFQURXUklURSI+R1NUX01BUF9SRUFEV1JJVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1NRU1EVU1QOkNBUFMiIHRpdGxlPSJHU1RfTUVNRFVNUCgpIj5HU1RfTUVNRFVNUDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1NRU1EVU1QLU9CSkVDVDpDQVBTIiB0aXRsZT0iR1NUX01FTURVTVBfT0JKRUNUKCkiPkdTVF9NRU1EVU1QX09CSkVDVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeUNvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeUNvcHlGdW5jdGlvbsKgKCkiPkdzdE1lbW9yeUNvcHlGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5RmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1lbW9yeUZsYWdzIj5Hc3RNZW1vcnlGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5SXNTcGFuRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbsKgKCkiPkdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb27CoCgpIj5Hc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeU1hcEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWVtb3J5TWFwRnVuY3Rpb27CoCgpIj5Hc3RNZW1vcnlNYXBGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeVNoYXJlRnVuY3Rpb27CoCgpIj5Hc3RNZW1vcnlTaGFyZUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnlVbm1hcEZ1bGxGdW5jdGlvbiIgdGl0bGU9IkdzdE1lbW9yeVVubWFwRnVsbEZ1bmN0aW9uwqAoKSI+R3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI0dzdE1lbW9yeVVubWFwRnVuY3Rpb24iIHRpdGxlPSJHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uwqAoKSI+R3N0TWVtb3J5VW5tYXBGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwjZ3N0LW1lbW9yeS1hbGlnbm1lbnQiIHRpdGxlPSJnc3RfbWVtb3J5X2FsaWdubWVudCI+Z3N0X21lbW9yeV9hbGlnbm1lbnQ8L2E+LCB2YXJpYWJsZSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPkdzdEFsbG9jYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWNvcHkiIHRpdGxlPSJnc3RfbWVtb3J5X2NvcHnCoCgpIj5nc3RfbWVtb3J5X2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUdTOkNBUFMiIHRpdGxlPSJHU1RfTUVNT1JZX0ZMQUdTKCkiPkdTVF9NRU1PUllfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKCkiPkdTVF9NRU1PUllfRkxBR19JU19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NRU1PUllfRkxBR19VTlNFVCgpIj5HU1RfTUVNT1JZX0ZMQUdfVU5TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWdldC1zaXplcyIgdGl0bGU9ImdzdF9tZW1vcnlfZ2V0X3NpemVzwqAoKSI+Z3N0X21lbW9yeV9nZXRfc2l6ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWluaXQiIHRpdGxlPSJnc3RfbWVtb3J5X2luaXTCoCgpIj5nc3RfbWVtb3J5X2luaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLU5PVC1NQVBQQUJMRTpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEUoKSI+R1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLU5PLVNIQVJFOkNBUFMiIHRpdGxlPSJHU1RfTUVNT1JZX0lTX05PX1NIQVJFKCkiPkdTVF9NRU1PUllfSVNfTk9fU0hBUkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLVBIWVNJQ0FMTFktQ09OVElHVU9VUzpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9JU19QSFlTSUNBTExZX0NPTlRJR1VPVVMoKSI+R1NUX01FTU9SWV9JU19QSFlTSUNBTExZX0NPTlRJR1VPVVM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLVJFQURPTkxZOkNBUFMiIHRpdGxlPSJHU1RfTUVNT1JZX0lTX1JFQURPTkxZKCkiPkdTVF9NRU1PUllfSVNfUkVBRE9OTFk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWlzLXNwYW4iIHRpdGxlPSJnc3RfbWVtb3J5X2lzX3NwYW7CoCgpIj5nc3RfbWVtb3J5X2lzX3NwYW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWlzLXR5cGUiIHRpdGxlPSJnc3RfbWVtb3J5X2lzX3R5cGXCoCgpIj5nc3RfbWVtb3J5X2lzX3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X21lbW9yeV9pc193cml0YWJsZSgpIj5nc3RfbWVtb3J5X2lzX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1JUy1aRVJPLVBBRERFRDpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9JU19aRVJPX1BBRERFRCgpIj5HU1RfTUVNT1JZX0lTX1pFUk9fUEFEREVEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjR1NULU1FTU9SWS1JUy1aRVJPLVBSRUZJWEVEOkNBUFMiIHRpdGxlPSJHU1RfTUVNT1JZX0lTX1pFUk9fUFJFRklYRUQoKSI+R1NUX01FTU9SWV9JU19aRVJPX1BSRUZJWEVEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS1sb2NrIiB0aXRsZT0iZ3N0X21lbW9yeV9sb2NrKCkiPmdzdF9tZW1vcnlfbG9jazwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFrZS1tYXBwZWQiIHRpdGxlPSJnc3RfbWVtb3J5X21ha2VfbWFwcGVkwqAoKSI+Z3N0X21lbW9yeV9tYWtlX21hcHBlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCIgdGl0bGU9IkdzdE1lbW9yeSI+R3N0TWVtb3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sI2dzdC1tZW1vcnktbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9tZW1vcnlfbWFrZV93cml0YWJsZSgpIj5nc3RfbWVtb3J5X21ha2Vfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LW1hcCIgdGl0bGU9ImdzdF9tZW1vcnlfbWFwwqAoKSI+Z3N0X21lbW9yeV9tYXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBbGxvY2F0b3IuaHRtbCNnc3QtbWVtb3J5LW5ldy13cmFwcGVkIiB0aXRsZT0iZ3N0X21lbW9yeV9uZXdfd3JhcHBlZMKgKCkiPmdzdF9tZW1vcnlfbmV3X3dyYXBwZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiIHRpdGxlPSJHc3RBbGxvY2F0b3IiPkdzdEFsbG9jYXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlZiIgdGl0bGU9ImdzdF9tZW1vcnlfcmVmwqAoKSI+Z3N0X21lbW9yeV9yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXJlc2l6ZSIgdGl0bGU9ImdzdF9tZW1vcnlfcmVzaXplwqAoKSI+Z3N0X21lbW9yeV9yZXNpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXNoYXJlIiB0aXRsZT0iZ3N0X21lbW9yeV9zaGFyZcKgKCkiPmdzdF9tZW1vcnlfc2hhcmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LXVubG9jayIgdGl0bGU9ImdzdF9tZW1vcnlfdW5sb2NrKCkiPmdzdF9tZW1vcnlfdW5sb2NrPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bm1hcCIgdGl0bGU9ImdzdF9tZW1vcnlfdW5tYXDCoCgpIj5nc3RfbWVtb3J5X3VubWFwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwjZ3N0LW1lbW9yeS11bnJlZiIgdGl0bGU9ImdzdF9tZW1vcnlfdW5yZWbCoCgpIj5nc3RfbWVtb3J5X3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lbW9yeS5odG1sIiB0aXRsZT0iR3N0TWVtb3J5Ij5Hc3RNZW1vcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RNZXNzYWdlVHlwZSI+R3N0TWVzc2FnZVR5cGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1hZGQtcmVkaXJlY3QtZW50cnkiIHRpdGxlPSJnc3RfbWVzc2FnZV9hZGRfcmVkaXJlY3RfZW50cnnCoCgpIj5nc3RfbWVzc2FnZV9hZGRfcmVkaXJlY3RfZW50cnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtY29weSIgdGl0bGU9ImdzdF9tZXNzYWdlX2NvcHnCoCgpIj5nc3RfbWVzc2FnZV9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1udW0tcmVkaXJlY3QtZW50cmllcyIgdGl0bGU9ImdzdF9tZXNzYWdlX2dldF9udW1fcmVkaXJlY3RfZW50cmllc8KgKCkiPmdzdF9tZXNzYWdlX2dldF9udW1fcmVkaXJlY3RfZW50cmllczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1nZXQtc2VxbnVtIiB0aXRsZT0iZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bcKgKCkiPmdzdF9tZXNzYWdlX2dldF9zZXFudW08L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cmVhbS1zdGF0dXMtb2JqZWN0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0wqAoKSI+Z3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWdldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlwqAoKSI+Z3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1oYXMtbmFtZSIgdGl0bGU9ImdzdF9tZXNzYWdlX2hhc19uYW1lwqAoKSI+Z3N0X21lc3NhZ2VfaGFzX25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9pc193cml0YWJsZSgpIj5nc3RfbWVzc2FnZV9pc193cml0YWJsZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbWFrZV93cml0YWJsZSgpIj5nc3RfbWVzc2FnZV9tYWtlX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1hcHBsaWNhdGlvbiIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbsKgKCkiPmdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctYXN5bmMtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19hc3luY19kb25lwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWFzeW5jLXN0YXJ0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1idWZmZXJpbmciIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctY2xvY2stbG9zdCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWNsb2NrLXByb3ZpZGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfY2xvY2tfcHJvdmlkZcKgKCkiPmdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1jdXN0b20iIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfY3VzdG9twqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2N1c3RvbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZGV2aWNlLWFkZGVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2RldmljZV9hZGRlZMKgKCkiPmdzdF9tZXNzYWdlX25ld19kZXZpY2VfYWRkZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWRldmljZS1yZW1vdmVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2RldmljZV9yZW1vdmVkwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2RldmljZV9yZW1vdmVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1kdXJhdGlvbi1jaGFuZ2VkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWTCoCgpIj5nc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZWxlbWVudCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19lbGVtZW50wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWVvcyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19lb3PCoCgpIj5nc3RfbWVzc2FnZV9uZXdfZW9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1lcnJvciIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19lcnJvcsKgKCkiPmdzdF9tZXNzYWdlX25ld19lcnJvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZXJyb3Itd2l0aC1kZXRhaWxzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2Vycm9yX3dpdGhfZGV0YWlsc8KgKCkiPmdzdF9tZXNzYWdlX25ld19lcnJvcl93aXRoX2RldGFpbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWhhdmUtY29udGV4dCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19oYXZlX2NvbnRleHTCoCgpIj5nc3RfbWVzc2FnZV9uZXdfaGF2ZV9jb250ZXh0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1pbmZvIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X2luZm/CoCgpIj5nc3RfbWVzc2FnZV9uZXdfaW5mbzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctaW5mby13aXRoLWRldGFpbHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfaW5mb193aXRoX2RldGFpbHPCoCgpIj5nc3RfbWVzc2FnZV9uZXdfaW5mb193aXRoX2RldGFpbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWxhdGVuY3kiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jecKgKCkiPmdzdF9tZXNzYWdlX25ld19sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1uZWVkLWNvbnRleHQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfbmVlZF9jb250ZXh0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctbmV3LWNsb2NrIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9ja8KgKCkiPmdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXByb2dyZXNzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3Byb2dyZXNzwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3Byb2dyZXNzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1wcm9wZXJ0eS1ub3RpZnkiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfcHJvcGVydHlfbm90aWZ5wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3Byb3BlcnR5X25vdGlmeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcW9zIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3Fvc8KgKCkiPmdzdF9tZXNzYWdlX25ld19xb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXJlZGlyZWN0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3JlZGlyZWN0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3JlZGlyZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1yZXF1ZXN0LXN0YXRlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGXCoCgpIj5nc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcmVzZXQtdGltZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19yZXNldF90aW1lwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3Jlc2V0X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXNlZ21lbnQtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmXCoCgpIj5nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zZWdtZW50LXN0YXJ0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnTCoCgpIj5nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RhdGUtY2hhbmdlZCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0YXRlLWRpcnR5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdGVwLWRvbmUiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0ZXBfZG9uZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RlcC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3N0ZXBfc3RhcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbXMtc2VsZWN0ZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtc19zZWxlY3RlZMKgKCkiPmdzdF9tZXNzYWdlX25ld19zdHJlYW1zX3NlbGVjdGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdHJlYW0tY29sbGVjdGlvbiIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19zdHJlYW1fY29sbGVjdGlvbsKgKCkiPmdzdF9tZXNzYWdlX25ld19zdHJlYW1fY29sbGVjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RyZWFtLXN0YXJ0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGFydMKgKCkiPmdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXN0cmVhbS1zdGF0dXMiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXR1c8KgKCkiPmdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdHJ1Y3R1cmUtY2hhbmdlIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2XCoCgpIj5nc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctdGFnIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3RhZ8KgKCkiPmdzdF9tZXNzYWdlX25ld190YWc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXRvYyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld190b2PCoCgpIj5nc3RfbWVzc2FnZV9uZXdfdG9jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy13YXJuaW5nIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmfCoCgpIj5nc3RfbWVzc2FnZV9uZXdfd2FybmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctd2FybmluZy13aXRoLWRldGFpbHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfd2FybmluZ193aXRoX2RldGFpbHPCoCgpIj5nc3RfbWVzc2FnZV9uZXdfd2FybmluZ193aXRoX2RldGFpbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtYXN5bmMtZG9uZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9hc3luY19kb25lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWJ1ZmZlcmluZyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ8KgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1idWZmZXJpbmctc3RhdHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHPCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtY2xvY2stbG9zdCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3TCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWNsb2NrLXByb3ZpZGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1jb250ZXh0LXR5cGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZGV2aWNlLWFkZGVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWRldmljZS1yZW1vdmVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX3JlbW92ZWTCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9kZXZpY2VfcmVtb3ZlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1lcnJvciIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2Vycm9ywqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZXJyb3ItZGV0YWlscyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yX2RldGFpbHPCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9lcnJvcl9kZXRhaWxzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWdyb3VwLWlkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZ3JvdXBfaWTCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9ncm91cF9pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1oYXZlLWNvbnRleHQiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9oYXZlX2NvbnRleHTCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9oYXZlX2NvbnRleHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtaW5mbyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2luZm/CoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9pbmZvPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWluZm8tZGV0YWlscyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2luZm9fZGV0YWlsc8KgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2luZm9fZGV0YWlsczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1uZXctY2xvY2siIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2vCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvZ3Jlc3MiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzc8KgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3Byb2dyZXNzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXByb3BlcnR5LW5vdGlmeSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3Byb3BlcnR5X25vdGlmecKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3Byb3BlcnR5X25vdGlmeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1xb3MiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3PCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9xb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcW9zLXN0YXRzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3N0YXRzwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcW9zX3N0YXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXFvcy12YWx1ZXMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1yZWRpcmVjdC1lbnRyeSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3JlZGlyZWN0X2VudHJ5wqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcmVkaXJlY3RfZW50cnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcmVxdWVzdC1zdGF0ZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXJlc2V0LXRpbWUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9yZXNldF90aW1lwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcmVzZXRfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zZWdtZW50LWRvbmUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X2RvbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc2VnbWVudC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnTCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0YXRlLWNoYW5nZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdGVwLWRvbmUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RlcC1zdGFydCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfc3RhcnTCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0cmVhbXMtc2VsZWN0ZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1zX3NlbGVjdGVkwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3RlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdHJlYW0tY29sbGVjdGlvbiIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RyZWFtLXN0YXR1cyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXPCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXN0cnVjdHVyZS1jaGFuZ2UiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS10YWciIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV90YWfCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV90YWc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtdG9jIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfdG9jwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfdG9jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXdhcm5pbmciIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS13YXJuaW5nLWRldGFpbHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nX2RldGFpbHPCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nX2RldGFpbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcmVmIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcmVmwqAoKSI+Z3N0X21lc3NhZ2VfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXJlcGxhY2UiIHRpdGxlPSJnc3RfbWVzc2FnZV9yZXBsYWNlwqAoKSI+Z3N0X21lc3NhZ2VfcmVwbGFjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TRVFOVU06Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1NFUU5VTSgpIj5HU1RfTUVTU0FHRV9TRVFOVU08L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LWJ1ZmZlcmluZy1zdGF0cyIgdGl0bGU9ImdzdF9tZXNzYWdlX3NldF9idWZmZXJpbmdfc3RhdHPCoCgpIj5nc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1ncm91cC1pZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3NldF9ncm91cF9pZMKgKCkiPmdzdF9tZXNzYWdlX3NldF9ncm91cF9pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtcW9zLXN0YXRzIiB0aXRsZT0iZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0c8KgKCkiPmdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc2V0LXFvcy12YWx1ZXMiIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlc8KgKCkiPmdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXNldC1zZXFudW0iIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfc2VxbnVtwqAoKSI+Z3N0X21lc3NhZ2Vfc2V0X3NlcW51bTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtc3RyZWFtLXN0YXR1cy1vYmplY3QiIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3TCoCgpIj5nc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtU1JDOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9TUkMoKSI+R1NUX01FU1NBR0VfU1JDPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVNSQy1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9TUkNfTkFNRSgpIj5HU1RfTUVTU0FHRV9TUkNfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWFkZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfYWRkwqAoKSI+Z3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9hZGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc3RyZWFtcy1zZWxlY3RlZC1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemXCoCgpIj5nc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXN0cmVhbXMtc2VsZWN0ZWQtZ2V0LXN0cmVhbSIgdGl0bGU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbcKgKCkiPmdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1USU1FU1RBTVA6Q0FQUyIgdGl0bGU9IkdTVF9NRVNTQUdFX1RJTUVTVEFNUCgpIj5HU1RfTUVTU0FHRV9USU1FU1RBTVA8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVFlQRTpDQVBTIiB0aXRsZT0iR1NUX01FU1NBR0VfVFlQRSgpIj5HU1RfTUVTU0FHRV9UWVBFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXR5cGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lwqAoKSI+Z3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFLUlTLUVYVEVOREVEOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9UWVBFX0lTX0VYVEVOREVEKCkiPkdTVF9NRVNTQUdFX1RZUEVfSVNfRVhURU5ERUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVFlQRS1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9UWVBFX05BTUUoKSI+R1NUX01FU1NBR0VfVFlQRV9OQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXR5cGUtdG8tcXVhcmsiIHRpdGxlPSJnc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrwqAoKSI+Z3N0X21lc3NhZ2VfdHlwZV90b19xdWFyazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS11bnJlZiIgdGl0bGU9ImdzdF9tZXNzYWdlX3VucmVmwqAoKSI+Z3N0X21lc3NhZ2VfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TWV0YSI+R3N0TWV0YTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdE1ldGFGbGFncyI+R3N0TWV0YUZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhRnJlZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUZyZWVGdW5jdGlvbsKgKCkiPkdzdE1ldGFGcmVlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFJbmZvIiB0aXRsZT0ic3RydWN0IEdzdE1ldGFJbmZvIj5Hc3RNZXRhSW5mbzwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5pdEZ1bmN0aW9uIiB0aXRsZT0iR3N0TWV0YUluaXRGdW5jdGlvbsKgKCkiPkdzdE1ldGFJbml0RnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1Db3B5IiB0aXRsZT0iR3N0TWV0YVRyYW5zZm9ybUNvcHkiPkdzdE1ldGFUcmFuc2Zvcm1Db3B5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiIgdGl0bGU9IkdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbsKgKCkiPkdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtYXBpLXR5cGUtZ2V0LXRhZ3MiIHRpdGxlPSJnc3RfbWV0YV9hcGlfdHlwZV9nZXRfdGFnc8KgKCkiPmdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtYXBpLXR5cGUtaGFzLXRhZyIgdGl0bGU9ImdzdF9tZXRhX2FwaV90eXBlX2hhc190YWfCoCgpIj5nc3RfbWV0YV9hcGlfdHlwZV9oYXNfdGFnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtYXBpLXR5cGUtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlcsKgKCkiPmdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9NRVRBX0ZMQUdTKCkiPkdTVF9NRVRBX0ZMQUdTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtRkxBRy1JUy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NRVRBX0ZMQUdfSVNfU0VUKCkiPkdTVF9NRVRBX0ZMQUdfSVNfU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NRVRBX0ZMQUdfU0VUKCkiPkdTVF9NRVRBX0ZMQUdfU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtRkxBRy1VTlNFVDpDQVBTIiB0aXRsZT0iR1NUX01FVEFfRkxBR19VTlNFVCgpIj5HU1RfTUVUQV9GTEFHX1VOU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtZ2V0LWluZm8iIHRpdGxlPSJnc3RfbWV0YV9nZXRfaW5mb8KgKCkiPmdzdF9tZXRhX2dldF9pbmZvPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjZ3N0LW1ldGEtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfbWV0YV9yZWdpc3RlcsKgKCkiPmdzdF9tZXRhX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwiIHRpdGxlPSJHc3RNZXRhIj5Hc3RNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtVEFHLU1FTU9SWTpDQVBTIiB0aXRsZT0iR1NUX01FVEFfVEFHX01FTU9SWSI+R1NUX01FVEFfVEFHX01FTU9SWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLVRBRy1NRU1PUlktU1RSOkNBUFMiIHRpdGxlPSJHU1RfTUVUQV9UQUdfTUVNT1JZX1NUUiI+R1NUX01FVEFfVEFHX01FTU9SWV9TVFI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1UUkFOU0ZPUk0tSVMtQ09QWTpDQVBTIiB0aXRsZT0iR1NUX01FVEFfVFJBTlNGT1JNX0lTX0NPUFkoKSI+R1NUX01FVEFfVFJBTlNGT1JNX0lTX0NPUFk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0IiB0aXRsZT0ic3RydWN0IEdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiIgdGl0bGU9IkdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb27CoCgpIj5Hc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIiB0aXRsZT0iR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbsKgKCkiPkdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RGbGFncyIgdGl0bGU9ImVudW0gR3N0TWluaU9iamVjdEZsYWdzIj5Hc3RNaW5pT2JqZWN0RmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIiB0aXRsZT0iR3N0TWluaU9iamVjdCI+R3N0TWluaU9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24iIHRpdGxlPSJHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uwqAoKSI+R3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RNaW5pT2JqZWN0Ij5Hc3RNaW5pT2JqZWN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdE5vdGlmeSIgdGl0bGU9IkdzdE1pbmlPYmplY3ROb3RpZnnCoCgpIj5Hc3RNaW5pT2JqZWN0Tm90aWZ5PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtY29weSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9jb3B5wqAoKSI+Z3N0X21pbmlfb2JqZWN0X2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBR1M6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9GTEFHUygpIj5HU1RfTUlOSV9PQkpFQ1RfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1JUy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVCgpIj5HU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCgpIj5HU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtRkxBRy1VTlNFVDpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX0ZMQUdfVU5TRVQoKSI+R1NUX01JTklfT0JKRUNUX0ZMQUdfVU5TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtZ2V0LXFkYXRhIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X2dldF9xZGF0YcKgKCkiPmdzdF9taW5pX29iamVjdF9nZXRfcWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtaW5pdCIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9pbml0wqAoKSI+Z3N0X21pbmlfb2JqZWN0X2luaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtSVMtTE9DS0FCTEU6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9JU19MT0NLQUJMRSgpIj5HU1RfTUlOSV9PQkpFQ1RfSVNfTE9DS0FCTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGXCoCgpIj5nc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbG9jayIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9sb2NrwqAoKSI+Z3N0X21pbmlfb2JqZWN0X2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlwqAoKSI+Z3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtcmVmIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3JlZsKgKCkiPmdzdF9taW5pX29iamVjdF9yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVCgpIj5HU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtUkVGQ09VTlQtVkFMVUU6Q0FQUyIgdGl0bGU9IkdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSgpIj5HU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtcmVwbGFjZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF9yZXBsYWNlwqAoKSI+Z3N0X21pbmlfb2JqZWN0X3JlcGxhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtc2V0LXFkYXRhIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YcKgKCkiPmdzdF9taW5pX29iamVjdF9zZXRfcWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtc3RlYWwiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfc3RlYWzCoCgpIj5nc3RfbWluaV9vYmplY3Rfc3RlYWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtc3RlYWwtcWRhdGEiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfc3RlYWxfcWRhdGHCoCgpIj5nc3RfbWluaV9vYmplY3Rfc3RlYWxfcWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdGFrZSIgdGl0bGU9ImdzdF9taW5pX29iamVjdF90YWtlwqAoKSI+Z3N0X21pbmlfb2JqZWN0X3Rha2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHU1QtTUlOSS1PQkpFQ1QtVFlQRTpDQVBTIiB0aXRsZT0iR1NUX01JTklfT0JKRUNUX1RZUEUoKSI+R1NUX01JTklfT0JKRUNUX1RZUEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5sb2NrIiB0aXRsZT0iZ3N0X21pbmlfb2JqZWN0X3VubG9ja8KgKCkiPmdzdF9taW5pX29iamVjdF91bmxvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3QtdW5yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3RfdW5yZWbCoCgpIj5nc3RfbWluaV9vYmplY3RfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtd2Vhay1yZWYiIHRpdGxlPSJnc3RfbWluaV9vYmplY3Rfd2Vha19yZWbCoCgpIj5nc3RfbWluaV9vYmplY3Rfd2Vha19yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNnc3QtbWluaS1vYmplY3Qtd2Vhay11bnJlZiIgdGl0bGU9ImdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmwqAoKSI+Z3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE1pbmlPYmplY3QiPkdzdE1pbmlPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtTVNFQ09ORDpDQVBTIiB0aXRsZT0iR1NUX01TRUNPTkQiPkdTVF9NU0VDT05EPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhOIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TjwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtTlNFQ09ORDpDQVBTIiB0aXRsZT0iR1NUX05TRUNPTkQiPkdTVF9OU0VDT05EPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhPIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TzwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3QtZGVlcC1ub3RpZnkiIHRpdGxlPSJUaGUg4oCcZGVlcC1ub3RpZnnigJ0gc2lnbmFsIj5Hc3RPYmplY3Q6OmRlZXAtbm90aWZ5PC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3QtLW5hbWUiIHRpdGxlPSJUaGUg4oCcbmFtZeKAnSBwcm9wZXJ0eSI+R3N0T2JqZWN0Om5hbWU8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sIiB0aXRsZT0iR3N0T2JqZWN0Ij5Hc3RPYmplY3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LS1wYXJlbnQiIHRpdGxlPSJUaGUg4oCccGFyZW504oCdIHByb3BlcnR5Ij5Hc3RPYmplY3Q6cGFyZW50PC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI0dzdE9iamVjdENsYXNzIiB0aXRsZT0ic3RydWN0IEdzdE9iamVjdENsYXNzIj5Hc3RPYmplY3RDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHc3RPYmplY3RGbGFncyIgdGl0bGU9ImVudW0gR3N0T2JqZWN0RmxhZ3MiPkdzdE9iamVjdEZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWFkZC1jb250cm9sLWJpbmRpbmciIHRpdGxlPSJnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmfCoCgpIj5nc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWNoZWNrLXVuaXF1ZW5lc3MiIHRpdGxlPSJnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3PCoCgpIj5nc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZGVlcC1ub3RpZnkiIHRpdGxlPSJnc3Rfb2JqZWN0X2RlZmF1bHRfZGVlcF9ub3RpZnnCoCgpIj5nc3Rfb2JqZWN0X2RlZmF1bHRfZGVlcF9ub3RpZnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWRlZmF1bHQtZXJyb3IiIHRpdGxlPSJnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3LCoCgpIj5nc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUdTOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdTKCkiPkdTVF9PQkpFQ1RfRkxBR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctSVMtU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUKCkiPkdTVF9PQkpFQ1RfRkxBR19JU19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0ZMQUdfU0VUKCkiPkdTVF9PQkpFQ1RfRkxBR19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUZMQUctVU5TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfRkxBR19VTlNFVCgpIj5HU1RfT0JKRUNUX0ZMQUdfVU5TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1jb250cm9sLWJpbmRpbmciIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9jb250cm9sX2JpbmRpbmfCoCgpIj5nc3Rfb2JqZWN0X2dldF9jb250cm9sX2JpbmRpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1jb250cm9sLXJhdGUiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGXCoCgpIj5nc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1nLXZhbHVlLWFycmF5IiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfZ192YWx1ZV9hcnJhecKgKCkiPmdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUdFVC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX0dFVF9MT0NLKCkiPkdTVF9PQkpFQ1RfR0VUX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1uYW1lIiB0aXRsZT0iZ3N0X29iamVjdF9nZXRfbmFtZcKgKCkiPmdzdF9vYmplY3RfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X2dldF9wYXJlbnTCoCgpIj5nc3Rfb2JqZWN0X2dldF9wYXJlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC1wYXRoLXN0cmluZyIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nwqAoKSI+Z3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC12YWx1ZSIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X3ZhbHVlwqAoKSI+Z3N0X29iamVjdF9nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWdldC12YWx1ZS1hcnJheSIgdGl0bGU9ImdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5wqAoKSI+Z3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hY3RpdmUtY29udHJvbC1iaW5kaW5ncyIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FjdGl2ZV9jb250cm9sX2JpbmRpbmdzwqAoKSI+Z3N0X29iamVjdF9oYXNfYWN0aXZlX2NvbnRyb2xfYmluZGluZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hbmNlc3RvciIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FuY2VzdG9ywqAoKSI+Z3N0X29iamVjdF9oYXNfYW5jZXN0b3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hcy1hbmNlc3RvciIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9ywqAoKSI+Z3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hcy1wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnTCoCgpIj5nc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfTE9DSygpIj5HU1RfT0JKRUNUX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfTkFNRSgpIj5HU1RfT0JKRUNUX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9QQVJFTlQoKSI+R1NUX09CSkVDVF9QQVJFTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZiIgdGl0bGU9ImdzdF9vYmplY3RfcmVmwqAoKSI+Z3N0X29iamVjdF9yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX1JFRkNPVU5UKCkiPkdTVF9PQkpFQ1RfUkVGQ09VTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVJFRkNPVU5ULVZBTFVFOkNBUFMiIHRpdGxlPSJHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKCkiPkdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlZi1zaW5rIiB0aXRsZT0iZ3N0X29iamVjdF9yZWZfc2lua8KgKCkiPmdzdF9vYmplY3RfcmVmX3Npbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlbW92ZS1jb250cm9sLWJpbmRpbmciIHRpdGxlPSJnc3Rfb2JqZWN0X3JlbW92ZV9jb250cm9sX2JpbmRpbmfCoCgpIj5nc3Rfb2JqZWN0X3JlbW92ZV9jb250cm9sX2JpbmRpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXJlcGxhY2UiIHRpdGxlPSJnc3Rfb2JqZWN0X3JlcGxhY2XCoCgpIj5nc3Rfb2JqZWN0X3JlcGxhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sLWJpbmRpbmdzLWRpc2FibGVkIiB0aXRsZT0iZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nc19kaXNhYmxlZMKgKCkiPmdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfYmluZGluZ3NfZGlzYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sLWJpbmRpbmctZGlzYWJsZWQiIHRpdGxlPSJnc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdfZGlzYWJsZWTCoCgpIj5nc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdfZGlzYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1jb250cm9sLXJhdGUiIHRpdGxlPSJnc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGXCoCgpIj5nc3Rfb2JqZWN0X3NldF9jb250cm9sX3JhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1uYW1lIiB0aXRsZT0iZ3N0X29iamVjdF9zZXRfbmFtZcKgKCkiPmdzdF9vYmplY3Rfc2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXNldC1wYXJlbnQiIHRpdGxlPSJnc3Rfb2JqZWN0X3NldF9wYXJlbnTCoCgpIj5nc3Rfb2JqZWN0X3NldF9wYXJlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN1Z2dlc3QtbmV4dC1zeW5jIiB0aXRsZT0iZ3N0X29iamVjdF9zdWdnZXN0X25leHRfc3luY8KgKCkiPmdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXN5bmMtdmFsdWVzIiB0aXRsZT0iZ3N0X29iamVjdF9zeW5jX3ZhbHVlc8KgKCkiPmdzdF9vYmplY3Rfc3luY192YWx1ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVRSWUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9PQkpFQ1RfVFJZTE9DSygpIj5HU1RfT0JKRUNUX1RSWUxPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNHU1QtT0JKRUNULVVOTE9DSzpDQVBTIiB0aXRsZT0iR1NUX09CSkVDVF9VTkxPQ0soKSI+R1NUX09CSkVDVF9VTkxPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucGFyZW50IiB0aXRsZT0iZ3N0X29iamVjdF91bnBhcmVudMKgKCkiPmdzdF9vYmplY3RfdW5wYXJlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIiB0aXRsZT0iZ3N0X29iamVjdF91bnJlZsKgKCkiPmdzdF9vYmplY3RfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFAiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5QPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFBhZCI+R3N0UGFkPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC1saW5rZWQiIHRpdGxlPSJUaGUg4oCcbGlua2Vk4oCdIHNpZ25hbCI+R3N0UGFkOjpsaW5rZWQ8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC11bmxpbmtlZCIgdGl0bGU9IlRoZSDigJx1bmxpbmtlZOKAnSBzaWduYWwiPkdzdFBhZDo6dW5saW5rZWQ8L2E+LCBvYmplY3Qgc2lnbmFsIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC0tY2FwcyIgdGl0bGU9IlRoZSDigJxjYXBz4oCdIHByb3BlcnR5Ij5Hc3RQYWQ6Y2FwczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWQtLWRpcmVjdGlvbiIgdGl0bGU9IlRoZSDigJxkaXJlY3Rpb27igJ0gcHJvcGVydHkiPkdzdFBhZDpkaXJlY3Rpb248L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkLS1vZmZzZXQiIHRpdGxlPSJUaGUg4oCcb2Zmc2V04oCdIHByb3BlcnR5Ij5Hc3RQYWQ6b2Zmc2V0PC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC0tdGVtcGxhdGUiIHRpdGxlPSJUaGUg4oCcdGVtcGxhdGXigJ0gcHJvcGVydHkiPkdzdFBhZDp0ZW1wbGF0ZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVGdW5jdGlvbsKgKCkiPkdzdFBhZEFjdGl2YXRlRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEFjdGl2YXRlTW9kZUZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb27CoCgpIj5Hc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkQ2hhaW5GdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluRnVuY3Rpb27CoCgpIj5Hc3RQYWRDaGFpbkZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uwqAoKSI+R3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZERpcmVjdGlvbiIgdGl0bGU9ImVudW0gR3N0UGFkRGlyZWN0aW9uIj5Hc3RQYWREaXJlY3Rpb248L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb27CoCgpIj5Hc3RQYWRFdmVudEZ1bGxGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEV2ZW50RnVuY3Rpb27CoCgpIj5Hc3RQYWRFdmVudEZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRGbGFncyIgdGl0bGU9ImVudW0gR3N0UGFkRmxhZ3MiPkdzdFBhZEZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRGb3J3YXJkRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRGb3J3YXJkRnVuY3Rpb27CoCgpIj5Hc3RQYWRGb3J3YXJkRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uwqAoKSI+R3N0UGFkR2V0UmFuZ2VGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkSXRlckludExpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb27CoCgpIj5Hc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rQ2hlY2siIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtDaGVjayI+R3N0UGFkTGlua0NoZWNrPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRMaW5rRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRMaW5rRnVuY3Rpb27CoCgpIj5Hc3RQYWRMaW5rRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZExpbmtSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZExpbmtSZXR1cm4iPkdzdFBhZExpbmtSZXR1cm48L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZE1vZGUiIHRpdGxlPSJlbnVtIEdzdFBhZE1vZGUiPkdzdFBhZE1vZGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkUHJlc2VuY2UiIHRpdGxlPSJlbnVtIEdzdFBhZFByZXNlbmNlIj5Hc3RQYWRQcmVzZW5jZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayIgdGl0bGU9IkdzdFBhZFByb2JlQ2FsbGJhY2vCoCgpIj5Hc3RQYWRQcm9iZUNhbGxiYWNrPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRQcm9iZUluZm8iIHRpdGxlPSJzdHJ1Y3QgR3N0UGFkUHJvYmVJbmZvIj5Hc3RQYWRQcm9iZUluZm88L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVSZXR1cm4iIHRpdGxlPSJlbnVtIEdzdFBhZFByb2JlUmV0dXJuIj5Hc3RQYWRQcm9iZVJldHVybjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVUeXBlIiB0aXRsZT0iZW51bSBHc3RQYWRQcm9iZVR5cGUiPkdzdFBhZFByb2JlVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR3N0UGFkUXVlcnlGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFF1ZXJ5RnVuY3Rpb27CoCgpIj5Hc3RQYWRRdWVyeUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24iIHRpdGxlPSJHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb27CoCgpIj5Hc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLXBhZC1jcmVhdGVkIiB0aXRsZT0iVGhlIOKAnHBhZC1jcmVhdGVk4oCdIHNpZ25hbCI+R3N0UGFkVGVtcGxhdGU6OnBhZC1jcmVhdGVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1jYXBzIiB0aXRsZT0iVGhlIOKAnGNhcHPigJ0gcHJvcGVydHkiPkdzdFBhZFRlbXBsYXRlOmNhcHM8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZS0tZGlyZWN0aW9uIiB0aXRsZT0iVGhlIOKAnGRpcmVjdGlvbuKAnSBwcm9wZXJ0eSI+R3N0UGFkVGVtcGxhdGU6ZGlyZWN0aW9uPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtLW5hbWUtdGVtcGxhdGUiIHRpdGxlPSJUaGUg4oCcbmFtZS10ZW1wbGF0ZeKAnSBwcm9wZXJ0eSI+R3N0UGFkVGVtcGxhdGU6bmFtZS10ZW1wbGF0ZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLS1wcmVzZW5jZSIgdGl0bGU9IlRoZSDigJxwcmVzZW5jZeKAnSBwcm9wZXJ0eSI+R3N0UGFkVGVtcGxhdGU6cHJlc2VuY2U8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RQYWRUZW1wbGF0ZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RQYWRUZW1wbGF0ZUZsYWdzIj5Hc3RQYWRUZW1wbGF0ZUZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHc3RQYWRVbmxpbmtGdW5jdGlvbiIgdGl0bGU9IkdzdFBhZFVubGlua0Z1bmN0aW9uwqAoKSI+R3N0UGFkVW5saW5rRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtQUNUSVZBVEVGVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0FDVElWQVRFRlVOQygpIj5HU1RfUEFEX0FDVElWQVRFRlVOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtQUNUSVZBVEVNT0RFRlVOQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9BQ1RJVkFURU1PREVGVU5DKCkiPkdTVF9QQURfQUNUSVZBVEVNT0RFRlVOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWN0aXZhdGUtbW9kZSIgdGl0bGU9ImdzdF9wYWRfYWN0aXZhdGVfbW9kZcKgKCkiPmdzdF9wYWRfYWN0aXZhdGVfbW9kZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtYWRkLXByb2JlIiB0aXRsZT0iZ3N0X3BhZF9hZGRfcHJvYmXCoCgpIj5nc3RfcGFkX2FkZF9wcm9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2FuLWxpbmsiIHRpdGxlPSJnc3RfcGFkX2Nhbl9saW5rwqAoKSI+Z3N0X3BhZF9jYW5fbGluazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hhaW4iIHRpdGxlPSJnc3RfcGFkX2NoYWluwqAoKSI+Z3N0X3BhZF9jaGFpbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtQ0hBSU5GVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0NIQUlORlVOQygpIj5HU1RfUEFEX0NIQUlORlVOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtQ0hBSU5MSVNURlVOQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9DSEFJTkxJU1RGVU5DKCkiPkdTVF9QQURfQ0hBSU5MSVNURlVOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hhaW4tbGlzdCIgdGl0bGU9ImdzdF9wYWRfY2hhaW5fbGlzdMKgKCkiPmdzdF9wYWRfY2hhaW5fbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY2hlY2stcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlwqAoKSI+Z3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY3JlYXRlLXN0cmVhbS1pZCIgdGl0bGU9ImdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZMKgKCkiPmdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY3JlYXRlLXN0cmVhbS1pZC1wcmludGYiIHRpdGxlPSJnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmwqAoKSI+Z3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtY3JlYXRlLXN0cmVhbS1pZC1wcmludGYtdmFsaXN0IiB0aXRsZT0iZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50Zl92YWxpc3TCoCgpIj5nc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmX3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0RJUkVDVElPTigpIj5HU1RfUEFEX0RJUkVDVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRUxFTUVOVC1QUklWQVRFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0VMRU1FTlRfUFJJVkFURSgpIj5HU1RfUEFEX0VMRU1FTlRfUFJJVkFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRVZFTlRGVUxMRlVOQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9FVkVOVEZVTExGVU5DKCkiPkdTVF9QQURfRVZFTlRGVUxMRlVOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtRVZFTlRGVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0VWRU5URlVOQygpIj5HU1RfUEFEX0VWRU5URlVOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZXZlbnQtZGVmYXVsdCIgdGl0bGU9ImdzdF9wYWRfZXZlbnRfZGVmYXVsdMKgKCkiPmdzdF9wYWRfZXZlbnRfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZm9yd2FyZCIgdGl0bGU9ImdzdF9wYWRfZm9yd2FyZMKgKCkiPmdzdF9wYWRfZm9yd2FyZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtR0VUUkFOR0VGVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0dFVFJBTkdFRlVOQygpIj5HU1RfUEFEX0dFVFJBTkdFRlVOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWFsbG93ZWQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfZ2V0X2FsbG93ZWRfY2Fwc8KgKCkiPmdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWN1cnJlbnQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfZ2V0X2N1cnJlbnRfY2Fwc8KgKCkiPmdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWRpcmVjdGlvbiIgdGl0bGU9ImdzdF9wYWRfZ2V0X2RpcmVjdGlvbsKgKCkiPmdzdF9wYWRfZ2V0X2RpcmVjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWVsZW1lbnQtcHJpdmF0ZSIgdGl0bGU9ImdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZcKgKCkiPmdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LWxhc3QtZmxvdy1yZXR1cm4iIHRpdGxlPSJnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuwqAoKSI+Z3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX2dldF9uYW1lKCkiPmdzdF9wYWRfZ2V0X25hbWU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1vZmZzZXQiIHRpdGxlPSJnc3RfcGFkX2dldF9vZmZzZXTCoCgpIj5nc3RfcGFkX2dldF9vZmZzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYWQtdGVtcGxhdGUiIHRpdGxlPSJnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGXCoCgpIj5nc3RfcGFkX2dldF9wYWRfdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYWQtdGVtcGxhdGUtY2FwcyIgdGl0bGU9ImdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzwqAoKSI+Z3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1wYXJlbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9wYXJlbnQoKSI+Z3N0X3BhZF9nZXRfcGFyZW50PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGFyZW50LWVsZW1lbnQiIHRpdGxlPSJnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudMKgKCkiPmdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcGVlciIgdGl0bGU9ImdzdF9wYWRfZ2V0X3BlZXLCoCgpIj5nc3RfcGFkX2dldF9wZWVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX2dldF9yYW5nZcKgKCkiPmdzdF9wYWRfZ2V0X3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtc3RpY2t5LWV2ZW50IiB0aXRsZT0iZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50wqAoKSI+Z3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtc3RyZWFtIiB0aXRsZT0iZ3N0X3BhZF9nZXRfc3RyZWFtwqAoKSI+Z3N0X3BhZF9nZXRfc3RyZWFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtc3RyZWFtLWlkIiB0aXRsZT0iZ3N0X3BhZF9nZXRfc3RyZWFtX2lkwqAoKSI+Z3N0X3BhZF9nZXRfc3RyZWFtX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1HRVQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKCkiPkdTVF9QQURfR0VUX1NUUkVBTV9MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1oYXMtY3VycmVudC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzwqAoKSI+Z3N0X3BhZF9oYXNfY3VycmVudF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1IQVMtUEVORElORy1FVkVOVFM6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSEFTX1BFTkRJTkdfRVZFTlRTKCkiPkdTVF9QQURfSEFTX1BFTkRJTkdfRVZFTlRTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1BQ0NFUFQtSU5URVJTRUNUOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0lTX0FDQ0VQVF9JTlRFUlNFQ1QoKSI+R1NUX1BBRF9JU19BQ0NFUFRfSU5URVJTRUNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1BQ0NFUFQtVEVNUExBVEU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfQUNDRVBUX1RFTVBMQVRFKCkiPkdTVF9QQURfSVNfQUNDRVBUX1RFTVBMQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1BQ1RJVkU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfQUNUSVZFKCkiPkdTVF9QQURfSVNfQUNUSVZFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1hY3RpdmUiIHRpdGxlPSJnc3RfcGFkX2lzX2FjdGl2ZcKgKCkiPmdzdF9wYWRfaXNfYWN0aXZlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1CTE9DS0VEOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0lTX0JMT0NLRUQoKSI+R1NUX1BBRF9JU19CTE9DS0VEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1ibG9ja2VkIiB0aXRsZT0iZ3N0X3BhZF9pc19ibG9ja2VkwqAoKSI+Z3N0X3BhZF9pc19ibG9ja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1CTE9DS0lORzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19CTE9DS0lORygpIj5HU1RfUEFEX0lTX0JMT0NLSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1pcy1ibG9ja2luZyIgdGl0bGU9ImdzdF9wYWRfaXNfYmxvY2tpbmfCoCgpIj5nc3RfcGFkX2lzX2Jsb2NraW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1FT1M6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfRU9TKCkiPkdTVF9QQURfSVNfRU9TPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1JUy1GSVhFRC1DQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19GSVhFRF9DQVBTKCkiPkdTVF9QQURfSVNfRklYRURfQ0FQUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtRkxVU0hJTkc6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfRkxVU0hJTkcoKSI+R1NUX1BBRF9JU19GTFVTSElORzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtTElOS0VEOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0lTX0xJTktFRCgpIj5HU1RfUEFEX0lTX0xJTktFRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtaXMtbGlua2VkIiB0aXRsZT0iZ3N0X3BhZF9pc19saW5rZWTCoCgpIj5nc3RfcGFkX2lzX2xpbmtlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtUFJPWFktQUxMT0NBVElPTjpDQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19QUk9YWV9BTExPQ0FUSU9OKCkiPkdTVF9QQURfSVNfUFJPWFlfQUxMT0NBVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dTVC1QQUQtSVMtUFJPWFktQ0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfUFJPWFlfQ0FQUygpIj5HU1RfUEFEX0lTX1BST1hZX0NBUFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLVBST1hZLVNDSEVEVUxJTkc6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfUFJPWFlfU0NIRURVTElORygpIj5HU1RfUEFEX0lTX1BST1hZX1NDSEVEVUxJTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLVNJTks6Q0FQUyIgdGl0bGU9IkdTVF9QQURfSVNfU0lOSygpIj5HU1RfUEFEX0lTX1NJTks8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLVNSQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19TUkMoKSI+R1NUX1BBRF9JU19TUkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MiIHRpdGxlPSJnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3PCoCgpIj5nc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZGVmYXVsdCIgdGl0bGU9ImdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0wqAoKSI+Z3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlURVJJTlRMSU5LRlVOQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9JVEVSSU5UTElOS0ZVTkMoKSI+R1NUX1BBRF9JVEVSSU5UTElOS0ZVTkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxBU1QtRkxPVy1SRVRVUk46Q0FQUyIgdGl0bGU9IkdTVF9QQURfTEFTVF9GTE9XX1JFVFVSTigpIj5HU1RfUEFEX0xBU1RfRkxPV19SRVRVUk48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmsiIHRpdGxlPSJnc3RfcGFkX2xpbmvCoCgpIj5nc3RfcGFkX2xpbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTktGVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0xJTktGVU5DKCkiPkdTVF9QQURfTElOS0ZVTkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstRkFJTEVEOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0xJTktfRkFJTEVEKCkiPkdTVF9QQURfTElOS19GQUlMRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstZnVsbCIgdGl0bGU9ImdzdF9wYWRfbGlua19mdWxswqAoKSI+Z3N0X3BhZF9saW5rX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX2xpbmtfZ2V0X25hbWXCoCgpIj5nc3RfcGFkX2xpbmtfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstbWF5YmUtZ2hvc3RpbmciIHRpdGxlPSJnc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmfCoCgpIj5nc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3Rpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstbWF5YmUtZ2hvc3RpbmctZnVsbCIgdGl0bGU9ImdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZ19mdWxswqAoKSI+Z3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxJTkstU1VDQ0VTU0ZVTDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwoKSI+R1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW1hcmstcmVjb25maWd1cmUiIHRpdGxlPSJnc3RfcGFkX21hcmtfcmVjb25maWd1cmXCoCgpIj5nc3RfcGFkX21hcmtfcmVjb25maWd1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELU1PREU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTU9ERSgpIj5HU1RfUEFEX01PREU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW1vZGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX21vZGVfZ2V0X25hbWXCoCgpIj5nc3RfcGFkX21vZGVfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfTkFNRSgpIj5HU1RfUEFEX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELU5FRURTLVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9ORUVEU19QQVJFTlQoKSI+R1NUX1BBRF9ORUVEU19QQVJFTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELU5FRURTLVJFQ09ORklHVVJFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX05FRURTX1JFQ09ORklHVVJFKCkiPkdTVF9QQURfTkVFRFNfUkVDT05GSUdVUkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5lZWRzLXJlY29uZmlndXJlIiB0aXRsZT0iZ3N0X3BhZF9uZWVkc19yZWNvbmZpZ3VyZcKgKCkiPmdzdF9wYWRfbmVlZHNfcmVjb25maWd1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldyIgdGl0bGU9ImdzdF9wYWRfbmV3wqAoKSI+Z3N0X3BhZF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXN0YXRpYy10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlwqAoKSI+Z3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLW5ldy1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBBRC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QQURfVEVNUExBVEUoKSI+R1NUX1BBRF9QQURfVEVNUExBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBBUkVOVDpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QQVJFTlQoKSI+R1NUX1BBRF9QQVJFTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBhdXNlLXRhc2siIHRpdGxlPSJnc3RfcGFkX3BhdXNlX3Rhc2vCoCgpIj5nc3RfcGFkX3BhdXNlX3Rhc2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBFRVI6Q0FQUyIgdGl0bGU9IkdTVF9QQURfUEVFUigpIj5HU1RfUEFEX1BFRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnkiIHRpdGxlPSJnc3RfcGFkX3BlZXJfcXVlcnnCoCgpIj5nc3RfcGFkX3BlZXJfcXVlcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktYWNjZXB0LWNhcHMiIHRpdGxlPSJnc3RfcGFkX3BlZXJfcXVlcnlfYWNjZXB0X2NhcHPCoCgpIj5nc3RfcGFkX3BlZXJfcXVlcnlfYWNjZXB0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktY2FwcyIgdGl0bGU9ImdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzwqAoKSI+Z3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktY29udmVydCIgdGl0bGU9ImdzdF9wYWRfcGVlcl9xdWVyeV9jb252ZXJ0wqAoKSI+Z3N0X3BhZF9wZWVyX3F1ZXJ5X2NvbnZlcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktZHVyYXRpb24iIHRpdGxlPSJnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb27CoCgpIj5nc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXBlZXItcXVlcnktcG9zaXRpb24iIHRpdGxlPSJnc3RfcGFkX3BlZXJfcXVlcnlfcG9zaXRpb27CoCgpIj5nc3RfcGFkX3BlZXJfcXVlcnlfcG9zaXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tQlVGRkVSOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSKCkiPkdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tQlVGRkVSLUxJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVJfTElTVCgpIj5HU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSX0xJU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tREFUQTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoKSI+R1NUX1BBRF9QUk9CRV9JTkZPX0RBVEE8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tRVZFTlQ6Q0FQUyIgdGl0bGU9IkdTVF9QQURfUFJPQkVfSU5GT19FVkVOVCgpIj5HU1RfUEFEX1BST0JFX0lORk9fRVZFTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tRkxPVy1SRVRVUk46Q0FQUyIgdGl0bGU9IkdTVF9QQURfUFJPQkVfSU5GT19GTE9XX1JFVFVSTigpIj5HU1RfUEFEX1BST0JFX0lORk9fRkxPV19SRVRVUk48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb2JlLWluZm8tZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9wYWRfcHJvYmVfaW5mb19nZXRfYnVmZmVywqAoKSI+Z3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb2JlLWluZm8tZ2V0LWJ1ZmZlci1saXN0IiB0aXRsZT0iZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXJfbGlzdMKgKCkiPmdzdF9wYWRfcHJvYmVfaW5mb19nZXRfYnVmZmVyX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb2JlLWluZm8tZ2V0LWV2ZW50IiB0aXRsZT0iZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9ldmVudMKgKCkiPmdzdF9wYWRfcHJvYmVfaW5mb19nZXRfZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb2JlLWluZm8tZ2V0LXF1ZXJ5IiB0aXRsZT0iZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9xdWVyecKgKCkiPmdzdF9wYWRfcHJvYmVfaW5mb19nZXRfcXVlcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tSUQ6Q0FQUyIgdGl0bGU9IkdTVF9QQURfUFJPQkVfSU5GT19JRCgpIj5HU1RfUEFEX1BST0JFX0lORk9fSUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tT0ZGU0VUOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1BST0JFX0lORk9fT0ZGU0VUKCkiPkdTVF9QQURfUFJPQkVfSU5GT19PRkZTRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tUVVFUlk6Q0FQUyIgdGl0bGU9IkdTVF9QQURfUFJPQkVfSU5GT19RVUVSWSgpIj5HU1RfUEFEX1BST0JFX0lORk9fUVVFUlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tU0laRTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QUk9CRV9JTkZPX1NJWkUoKSI+R1NUX1BBRF9QUk9CRV9JTkZPX1NJWkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVBST0JFLUlORk8tVFlQRTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9QUk9CRV9JTkZPX1RZUEUoKSI+R1NUX1BBRF9QUk9CRV9JTkZPX1RZUEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb3h5LXF1ZXJ5LWFjY2VwdC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9wcm94eV9xdWVyeV9hY2NlcHRfY2Fwc8KgKCkiPmdzdF9wYWRfcHJveHlfcXVlcnlfYWNjZXB0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXByb3h5LXF1ZXJ5LWNhcHMiIHRpdGxlPSJnc3RfcGFkX3Byb3h5X3F1ZXJ5X2NhcHPCoCgpIj5nc3RfcGFkX3Byb3h5X3F1ZXJ5X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1bGwtcmFuZ2UiIHRpdGxlPSJnc3RfcGFkX3B1bGxfcmFuZ2XCoCgpIj5nc3RfcGFkX3B1bGxfcmFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giIHRpdGxlPSJnc3RfcGFkX3B1c2jCoCgpIj5nc3RfcGFkX3B1c2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3B1c2hfZXZlbnTCoCgpIj5nc3RfcGFkX3B1c2hfZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtbGlzdCIgdGl0bGU9ImdzdF9wYWRfcHVzaF9saXN0wqAoKSI+Z3N0X3BhZF9wdXNoX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5IiB0aXRsZT0iZ3N0X3BhZF9xdWVyecKgKCkiPmdzdF9wYWRfcXVlcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVFVRVJZRlVOQzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9RVUVSWUZVTkMoKSI+R1NUX1BBRF9RVUVSWUZVTkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWFjY2VwdC1jYXBzIiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9hY2NlcHRfY2Fwc8KgKCkiPmdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWNhcHMiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X2NhcHPCoCgpIj5nc3RfcGFkX3F1ZXJ5X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWNvbnZlcnQiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X2NvbnZlcnTCoCgpIj5nc3RfcGFkX3F1ZXJ5X2NvbnZlcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWRlZmF1bHQiIHRpdGxlPSJnc3RfcGFkX3F1ZXJ5X2RlZmF1bHTCoCgpIj5nc3RfcGFkX3F1ZXJ5X2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LWR1cmF0aW9uIiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbsKgKCkiPmdzdF9wYWRfcXVlcnlfZHVyYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXF1ZXJ5LXBvc2l0aW9uIiB0aXRsZT0iZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbsKgKCkiPmdzdF9wYWRfcXVlcnlfcG9zaXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXJlbW92ZS1wcm9iZSIgdGl0bGU9ImdzdF9wYWRfcmVtb3ZlX3Byb2JlwqAoKSI+Z3N0X3BhZF9yZW1vdmVfcHJvYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNlbmQtZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3NlbmRfZXZlbnTCoCgpIj5nc3RfcGFkX3NlbmRfZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNFVC1BQ0NFUFQtSU5URVJTRUNUOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NFVF9BQ0NFUFRfSU5URVJTRUNUKCkiPkdTVF9QQURfU0VUX0FDQ0VQVF9JTlRFUlNFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNFVC1BQ0NFUFQtVEVNUExBVEU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSgpIj5HU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY3RpdmF0ZW1vZGUtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24oKSI+Z3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGVtb2RlLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb25fZnVsbMKgKCkiPmdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbl9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZhdGUtZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbigpIj5nc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2YXRlLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb25fZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWFjdGl2ZSIgdGl0bGU9ImdzdF9wYWRfc2V0X2FjdGl2ZcKgKCkiPmdzdF9wYWRfc2V0X2FjdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWNoYWluLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24oKSI+Z3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb248L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb25fZnVsbMKgKCkiPmdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1jaGFpbi1saXN0LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbigpIj5nc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtY2hhaW4tbGlzdC1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZWxlbWVudC1wcml2YXRlIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlwqAoKSI+Z3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZXZlbnQtZnVsbC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb24oKSI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWV2ZW50LWZ1bGwtZnVuY3Rpb24tZnVsbCIgdGl0bGU9ImdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb25fZnVsbMKgKCkiPmdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb25fZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWV2ZW50LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24oKSI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb248L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1ldmVudC1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb25fZnVsbMKgKCkiPmdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNFVC1GTFVTSElORzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9TRVRfRkxVU0hJTkcoKSI+R1NUX1BBRF9TRVRfRkxVU0hJTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1nZXRyYW5nZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uKCkiPmdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZ2V0cmFuZ2UtZnVuY3Rpb24tZnVsbCIgdGl0bGU9ImdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uX2Z1bGzCoCgpIj5nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbl9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtaXRlcmF0ZS1pbnRlcm5hbC1saW5rcy1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24oKSI+Z3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWl0ZXJhdGUtaW50ZXJuYWwtbGlua3MtZnVuY3Rpb24tZnVsbCIgdGl0bGU9ImdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb25fZnVsbMKgKCkiPmdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb25fZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LWxpbmstZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uKCkiPmdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb248L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1saW5rLWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uX2Z1bGzCoCgpIj5nc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1vZmZzZXQiIHRpdGxlPSJnc3RfcGFkX3NldF9vZmZzZXTCoCgpIj5nc3RfcGFkX3NldF9vZmZzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNFVC1QUk9YWS1BTExPQ0FUSU9OOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NFVF9QUk9YWV9BTExPQ0FUSU9OKCkiPkdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNFVC1QUk9YWS1DQVBTIiB0aXRsZT0iR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUygpIj5HU1RfUEFEX1NFVF9QUk9YWV9DQVBTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1TRVQtUFJPWFktU0NIRURVTElORzpDQVBTIiB0aXRsZT0iR1NUX1BBRF9TRVRfUFJPWFlfU0NIRURVTElORygpIj5HU1RfUEFEX1NFVF9QUk9YWV9TQ0hFRFVMSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtcXVlcnktZnVuY3Rpb24iIHRpdGxlPSJnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbigpIj5nc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LXF1ZXJ5LWZ1bmN0aW9uLWZ1bGwiIHRpdGxlPSJnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb25fZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtc2V0LXVubGluay1mdW5jdGlvbiIgdGl0bGU9ImdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbigpIj5nc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb248L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXNldC11bmxpbmstZnVuY3Rpb24tZnVsbCIgdGl0bGU9ImdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0YXJ0LXRhc2siIHRpdGxlPSJnc3RfcGFkX3N0YXJ0X3Rhc2vCoCgpIj5nc3RfcGFkX3N0YXJ0X3Rhc2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0aWNreS1ldmVudHMtZm9yZWFjaCIgdGl0bGU9ImdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNowqAoKSI+Z3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0b3AtdGFzayIgdGl0bGU9ImdzdF9wYWRfc3RvcF90YXNrwqAoKSI+Z3N0X3BhZF9zdG9wX3Rhc2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXN0b3JlLXN0aWNreS1ldmVudCIgdGl0bGU9ImdzdF9wYWRfc3RvcmVfc3RpY2t5X2V2ZW50wqAoKSI+Z3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NUUkVBTV9MT0NLKCkiPkdTVF9QQURfU1RSRUFNX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1UUllMT0NLOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1NUUkVBTV9UUllMT0NLKCkiPkdTVF9QQURfU1RSRUFNX1RSWUxPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNUUkVBTS1VTkxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU1RSRUFNX1VOTE9DSygpIj5HU1RfUEFEX1NUUkVBTV9VTkxPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVRBU0s6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVEFTSygpIj5HU1RfUEFEX1RBU0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtQ0FQUyIgdGl0bGU9IkdTVF9QQURfVEVNUExBVEVfQ0FQUygpIj5HU1RfUEFEX1RFTVBMQVRFX0NBUFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtRElSRUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTigpIj5HU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHPCoCgpIj5nc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLUlTLUZJWEVEOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX0lTX0ZJWEVEKCkiPkdTVF9QQURfVEVNUExBVEVfSVNfRklYRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1QQUQtVEVNUExBVEUtTkFNRS1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFKCkiPkdTVF9QQURfVEVNUExBVEVfTkFNRV9URU1QTEFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXBhZC10ZW1wbGF0ZS1uZXciIHRpdGxlPSJnc3RfcGFkX3RlbXBsYXRlX25ld8KgKCkiPmdzdF9wYWRfdGVtcGxhdGVfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtUEFELVRFTVBMQVRFLVBSRVNFTkNFOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFKCkiPkdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLXVubGluayIgdGl0bGU9ImdzdF9wYWRfdW5saW5rwqAoKSI+Z3N0X3BhZF91bmxpbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOTElOS0ZVTkM6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVU5MSU5LRlVOQygpIj5HU1RfUEFEX1VOTElOS0ZVTkM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULUFDQ0VQVC1JTlRFUlNFQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9QQURfVU5TRVRfQUNDRVBUX0lOVEVSU0VDVCgpIj5HU1RfUEFEX1VOU0VUX0FDQ0VQVF9JTlRFUlNFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULUFDQ0VQVC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9VTlNFVF9BQ0NFUFRfVEVNUExBVEUoKSI+R1NUX1BBRF9VTlNFVF9BQ0NFUFRfVEVNUExBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULUZMVVNISU5HOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1VOU0VUX0ZMVVNISU5HKCkiPkdTVF9QQURfVU5TRVRfRkxVU0hJTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULVBST1hZLUFMTE9DQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9QQURfVU5TRVRfUFJPWFlfQUxMT0NBVElPTigpIj5HU1RfUEFEX1VOU0VUX1BST1hZX0FMTE9DQVRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULVBST1hZLUNBUFMiIHRpdGxlPSJHU1RfUEFEX1VOU0VUX1BST1hZX0NBUFMoKSI+R1NUX1BBRF9VTlNFVF9QUk9YWV9DQVBTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1VTlNFVC1QUk9YWS1TQ0hFRFVMSU5HOkNBUFMiIHRpdGxlPSJHU1RfUEFEX1VOU0VUX1BST1hZX1NDSEVEVUxJTkcoKSI+R1NUX1BBRF9VTlNFVF9QUk9YWV9TQ0hFRFVMSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC11c2UtZml4ZWQtY2FwcyIgdGl0bGU9ImdzdF9wYWRfdXNlX2ZpeGVkX2NhcHPCoCgpIj5nc3RfcGFkX3VzZV9maXhlZF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dzdFBhcmFtU3BlY0ZyYWN0aW9uIiB0aXRsZT0ic3RydWN0IEdzdFBhcmFtU3BlY0ZyYWN0aW9uIj5Hc3RQYXJhbVNwZWNGcmFjdGlvbjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIiB0aXRsZT0iR3N0UGFyYW1TcGVjIj5Hc3RQYXJhbVNwZWM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1DT05UUk9MTEFCTEU6Q0FQUyIgdGl0bGU9IkdTVF9QQVJBTV9DT05UUk9MTEFCTEUiPkdTVF9QQVJBTV9DT05UUk9MTEFCTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIiB0aXRsZT0iR3N0UGFyYW1TcGVjIj5Hc3RQYXJhbVNwZWM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVBBVVNFRDpDQVBTIiB0aXRsZT0iR1NUX1BBUkFNX01VVEFCTEVfUEFVU0VEIj5HU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIiB0aXRsZT0iR3N0UGFyYW1TcGVjIj5Hc3RQYXJhbVNwZWM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVBMQVlJTkc6Q0FQUyIgdGl0bGU9IkdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkciPkdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIiB0aXRsZT0iR3N0UGFyYW1TcGVjIj5Hc3RQYXJhbVNwZWM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI0dTVC1QQVJBTS1NVVRBQkxFLVJFQURZOkNBUFMiIHRpdGxlPSJHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSI+R1NUX1BBUkFNX01VVEFCTEVfUkVBRFk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIiB0aXRsZT0iR3N0UGFyYW1TcGVjIj5Hc3RQYXJhbVNwZWM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sI2dzdC1wYXJhbS1zcGVjLWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb27CoCgpIj5nc3RfcGFyYW1fc3BlY19mcmFjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiIHRpdGxlPSJHc3RQYXJhbVNwZWMiPkdzdFBhcmFtU3BlYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwjR1NULVBBUkFNLVVTRVItU0hJRlQ6Q0FQUyIgdGl0bGU9IkdTVF9QQVJBTV9VU0VSX1NISUZUIj5HU1RfUEFSQU1fVVNFUl9TSElGVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyYW1TcGVjLmh0bWwiIHRpdGxlPSJHc3RQYXJhbVNwZWMiPkdzdFBhcmFtU3BlYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RQYXJlbnRCdWZmZXJNZXRhIiB0aXRsZT0ic3RydWN0IEdzdFBhcmVudEJ1ZmZlck1ldGEiPkdzdFBhcmVudEJ1ZmZlck1ldGE8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VDb250ZXh0LXN0cnVjdCIgdGl0bGU9IkdzdFBhcnNlQ29udGV4dCI+R3N0UGFyc2VDb250ZXh0PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNHc3RQYXJzZUVycm9yIiB0aXRsZT0iZW51bSBHc3RQYXJzZUVycm9yIj5Hc3RQYXJzZUVycm9yPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiIHRpdGxlPSJHc3RQYXJzZSI+R3N0UGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR3N0UGFyc2VGbGFncyIgdGl0bGU9ImVudW0gR3N0UGFyc2VGbGFncyI+R3N0UGFyc2VGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1iaW4tZnJvbS1kZXNjcmlwdGlvbiIgdGl0bGU9ImdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbsKgKCkiPmdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtYmluLWZyb20tZGVzY3JpcHRpb24tZnVsbCIgdGl0bGU9ImdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxswqAoKSI+Z3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiIHRpdGxlPSJHc3RQYXJzZSI+R3N0UGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWNvbnRleHQtZnJlZSIgdGl0bGU9ImdzdF9wYXJzZV9jb250ZXh0X2ZyZWXCoCgpIj5nc3RfcGFyc2VfY29udGV4dF9mcmVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1jb250ZXh0LWdldC1taXNzaW5nLWVsZW1lbnRzIiB0aXRsZT0iZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHPCoCgpIj5nc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtY29udGV4dC1uZXciIHRpdGxlPSJnc3RfcGFyc2VfY29udGV4dF9uZXfCoCgpIj5nc3RfcGFyc2VfY29udGV4dF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiIHRpdGxlPSJHc3RQYXJzZSI+R3N0UGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjR1NULVBBUlNFLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfUEFSU0VfRVJST1IiPkdTVF9QQVJTRV9FUlJPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtZXJyb3ItcXVhcmsiIHRpdGxlPSJnc3RfcGFyc2VfZXJyb3JfcXVhcmvCoCgpIj5nc3RfcGFyc2VfZXJyb3JfcXVhcms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiIHRpdGxlPSJHc3RQYXJzZSI+R3N0UGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaCIgdGl0bGU9ImdzdF9wYXJzZV9sYXVuY2jCoCgpIj5nc3RfcGFyc2VfbGF1bmNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2h2IiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaHbCoCgpIj5nc3RfcGFyc2VfbGF1bmNodjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCIgdGl0bGU9IkdzdFBhcnNlIj5Hc3RQYXJzZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UGFyc2UuaHRtbCNnc3QtcGFyc2UtbGF1bmNodi1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbMKgKCkiPmdzdF9wYXJzZV9sYXVuY2h2X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwiIHRpdGxlPSJHc3RQYXJzZSI+R3N0UGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcnNlLmh0bWwjZ3N0LXBhcnNlLWxhdW5jaC1mdWxsIiB0aXRsZT0iZ3N0X3BhcnNlX2xhdW5jaF9mdWxswqAoKSI+Z3N0X3BhcnNlX2xhdW5jaF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIiB0aXRsZT0iR3N0UGFyc2UiPkdzdFBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLS1hdXRvLWZsdXNoLWJ1cyIgdGl0bGU9IlRoZSDigJxhdXRvLWZsdXNoLWJ1c+KAnSBwcm9wZXJ0eSI+R3N0UGlwZWxpbmU6YXV0by1mbHVzaC1idXM8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS0tZGVsYXkiIHRpdGxlPSJUaGUg4oCcZGVsYXnigJ0gcHJvcGVydHkiPkdzdFBpcGVsaW5lOmRlbGF5PC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUtLWxhdGVuY3kiIHRpdGxlPSJUaGUg4oCcbGF0ZW5jeeKAnSBwcm9wZXJ0eSI+R3N0UGlwZWxpbmU6bGF0ZW5jeTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBpcGVsaW5lRmxhZ3MiPkdzdFBpcGVsaW5lRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWF1dG8tY2xvY2siIHRpdGxlPSJnc3RfcGlwZWxpbmVfYXV0b19jbG9ja8KgKCkiPmdzdF9waXBlbGluZV9hdXRvX2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWF1dG8tZmx1c2gtYnVzIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1c8KgKCkiPmdzdF9waXBlbGluZV9nZXRfYXV0b19mbHVzaF9idXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYnVzIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9idXPCoCgpIj5nc3RfcGlwZWxpbmVfZ2V0X2J1czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV9nZXRfY2xvY2vCoCgpIj5nc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LWRlbGF5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9kZWxhecKgKCkiPmdzdF9waXBlbGluZV9nZXRfZGVsYXk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9waXBlbGluZV9nZXRfbGF0ZW5jecKgKCkiPmdzdF9waXBlbGluZV9nZXRfbGF0ZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1waXBlbGluZS1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV9nZXRfcGlwZWxpbmVfY2xvY2vCoCgpIj5nc3RfcGlwZWxpbmVfZ2V0X3BpcGVsaW5lX2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtbmV3IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX25ld8KgKCkiPmdzdF9waXBlbGluZV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtYXV0by1mbHVzaC1idXMiIHRpdGxlPSJnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzwqAoKSI+Z3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXNldC1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfY2xvY2vCoCgpIj5nc3RfcGlwZWxpbmVfc2V0X2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtc2V0LWRlbGF5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX3NldF9kZWxhecKgKCkiPmdzdF9waXBlbGluZV9zZXRfZGVsYXk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfbGF0ZW5jecKgKCkiPmdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLXVzZS1jbG9jayIgdGl0bGU9ImdzdF9waXBlbGluZV91c2VfY2xvY2vCoCgpIj5nc3RfcGlwZWxpbmVfdXNlX2Nsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luLXN0cnVjdCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyIgdGl0bGU9ImVudW0gR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIj5Hc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkRlc2MiIHRpdGxlPSJzdHJ1Y3QgR3N0UGx1Z2luRGVzYyI+R3N0UGx1Z2luRGVzYzwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5FcnJvciIgdGl0bGU9ImVudW0gR3N0UGx1Z2luRXJyb3IiPkdzdFBsdWdpbkVycm9yPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjR3N0UGx1Z2luRmVhdHVyZS1zdHJ1Y3QiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RQbHVnaW5GZWF0dXJlRmlsdGVyIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZUZpbHRlcsKgKCkiPkdzdFBsdWdpbkZlYXR1cmVGaWx0ZXI8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dzdFBsdWdpbkZpbHRlciIgdGl0bGU9IkdzdFBsdWdpbkZpbHRlcsKgKCkiPkdzdFBsdWdpbkZpbHRlcjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdFBsdWdpbkZsYWdzIj5Hc3RQbHVnaW5GbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sIiB0aXRsZT0iR3N0UGx1Z2luIj5Hc3RQbHVnaW48L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwjR3N0UGx1Z2luSW5pdEZ1bGxGdW5jIiB0aXRsZT0iR3N0UGx1Z2luSW5pdEZ1bGxGdW5jwqAoKSI+R3N0UGx1Z2luSW5pdEZ1bGxGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNHc3RQbHVnaW5Jbml0RnVuYyIgdGl0bGU9IkdzdFBsdWdpbkluaXRGdW5jwqAoKSI+R3N0UGx1Z2luSW5pdEZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3kiIHRpdGxlPSJnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5wqAoKSI+Z3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tYWRkLWRlcGVuZGVuY3ktc2ltcGxlIiB0aXRsZT0iZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGXCoCgpIj5nc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5X3NpbXBsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tREVGSU5FOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX0RFRklORSgpIj5HU1RfUExVR0lOX0RFRklORTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9QTFVHSU5fRVJST1IiPkdTVF9QTFVHSU5fRVJST1I8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCNnc3QtcGx1Z2luLWVycm9yLXF1YXJrIiB0aXRsZT0iZ3N0X3BsdWdpbl9lcnJvcl9xdWFya8KgKCkiPmdzdF9wbHVnaW5fZXJyb3JfcXVhcms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW4iPkdzdFBsdWdpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWNoZWNrLXZlcnNpb24iIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbsKgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPkdzdFBsdWdpbkZlYXR1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWdldC1wbHVnaW4iIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbsKgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPkdzdFBsdWdpbkZlYXR1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1nZXQtcGx1Z2luLW5hbWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lwqAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW5fbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtZ2V0LXJhbmsiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmvCoCgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3Jhbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxpc3QtY29weSIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2NvcHnCoCgpIj5nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPkdzdFBsdWdpbkZlYXR1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI0dTVC1QTFVHSU4tRkVBVFVSRS1MSVNULURFQlVHOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX0ZFQVRVUkVfTElTVF9ERUJVRygpIj5HU1RfUExVR0lOX0ZFQVRVUkVfTElTVF9ERUJVRzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZcKgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwjZ3N0LXBsdWdpbi1mZWF0dXJlLWxvYWQiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZMKgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPkdzdFBsdWdpbkZlYXR1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1yYW5rLWNvbXBhcmUtZnVuYyIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuY8KgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNnc3QtcGx1Z2luLWZlYXR1cmUtc2V0LW5hbWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X25hbWUoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCIgdGl0bGU9IkdzdFBsdWdpbkZlYXR1cmUiPkdzdFBsdWdpbkZlYXR1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1zZXQtcmFuayIgdGl0bGU9ImdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFua8KgKCkiPmdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWNhY2hlLWRhdGEiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9jYWNoZV9kYXRhwqAoKSI+Z3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWRlc2NyaXB0aW9uIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb27CoCgpIj5nc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWZpbGVuYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWXCoCgpIj5nc3RfcGx1Z2luX2dldF9maWxlbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LWxpY2Vuc2UiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9saWNlbnNlwqAoKSI+Z3N0X3BsdWdpbl9nZXRfbGljZW5zZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9uYW1lwqAoKSI+Z3N0X3BsdWdpbl9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LW9yaWdpbiIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X29yaWdpbsKgKCkiPmdzdF9wbHVnaW5fZ2V0X29yaWdpbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LXBhY2thZ2UiIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9wYWNrYWdlwqAoKSI+Z3N0X3BsdWdpbl9nZXRfcGFja2FnZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LXJlbGVhc2UtZGF0ZS1zdHJpbmciIHRpdGxlPSJnc3RfcGx1Z2luX2dldF9yZWxlYXNlX2RhdGVfc3RyaW5nwqAoKSI+Z3N0X3BsdWdpbl9nZXRfcmVsZWFzZV9kYXRlX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LXNvdXJjZSIgdGl0bGU9ImdzdF9wbHVnaW5fZ2V0X3NvdXJjZcKgKCkiPmdzdF9wbHVnaW5fZ2V0X3NvdXJjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tZ2V0LXZlcnNpb24iIHRpdGxlPSJnc3RfcGx1Z2luX2dldF92ZXJzaW9uwqAoKSI+Z3N0X3BsdWdpbl9nZXRfdmVyc2lvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4taXMtbG9hZGVkIiB0aXRsZT0iZ3N0X3BsdWdpbl9pc19sb2FkZWTCoCgpIj5nc3RfcGx1Z2luX2lzX2xvYWRlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3BsdWdpbl9saXN0X2ZyZWXCoCgpIj5nc3RfcGx1Z2luX2xpc3RfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZCIgdGl0bGU9ImdzdF9wbHVnaW5fbG9hZMKgKCkiPmdzdF9wbHVnaW5fbG9hZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZC1ieS1uYW1lIiB0aXRsZT0iZ3N0X3BsdWdpbl9sb2FkX2J5X25hbWXCoCgpIj5nc3RfcGx1Z2luX2xvYWRfYnlfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tbG9hZC1maWxlIiB0aXRsZT0iZ3N0X3BsdWdpbl9sb2FkX2ZpbGXCoCgpIj5nc3RfcGx1Z2luX2xvYWRfZmlsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tcmVnaXN0ZXItc3RhdGljIiB0aXRsZT0iZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWPCoCgpIj5nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tcmVnaXN0ZXItc3RhdGljLWZ1bGwiIHRpdGxlPSJnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY19mdWxswqAoKSI+Z3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI2dzdC1wbHVnaW4tc2V0LWNhY2hlLWRhdGEiIHRpdGxlPSJnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhwqAoKSI+Z3N0X3BsdWdpbl9zZXRfY2FjaGVfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tU1RBVElDLURFQ0xBUkU6Q0FQUyIgdGl0bGU9IkdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkUoKSI+R1NUX1BMVUdJTl9TVEFUSUNfREVDTEFSRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tU1RBVElDLVJFR0lTVEVSOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX1NUQVRJQ19SRUdJU1RFUigpIj5HU1RfUExVR0lOX1NUQVRJQ19SRUdJU1RFUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbCIgdGl0bGU9IkdzdFBvbGwiPkdzdFBvbGw8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR3N0UG9sbEZEIiB0aXRsZT0iR3N0UG9sbEZEIj5Hc3RQb2xsRkQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtYWRkLWZkIiB0aXRsZT0iZ3N0X3BvbGxfYWRkX2ZkwqAoKSI+Z3N0X3BvbGxfYWRkX2ZkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXJlYWQiIHRpdGxlPSJnc3RfcG9sbF9mZF9jYW5fcmVhZMKgKCkiPmdzdF9wb2xsX2ZkX2Nhbl9yZWFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY2FuLXdyaXRlIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY2FuX3dyaXRlwqAoKSI+Z3N0X3BvbGxfZmRfY2FuX3dyaXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY3RsLXJlYWQiIHRpdGxlPSJnc3RfcG9sbF9mZF9jdGxfcmVhZMKgKCkiPmdzdF9wb2xsX2ZkX2N0bF9yZWFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtY3RsLXdyaXRlIiB0aXRsZT0iZ3N0X3BvbGxfZmRfY3RsX3dyaXRlwqAoKSI+Z3N0X3BvbGxfZmRfY3RsX3dyaXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaGFzLWNsb3NlZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2hhc19jbG9zZWTCoCgpIj5nc3RfcG9sbF9mZF9oYXNfY2xvc2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaGFzLWVycm9yIiB0aXRsZT0iZ3N0X3BvbGxfZmRfaGFzX2Vycm9ywqAoKSI+Z3N0X3BvbGxfZmRfaGFzX2Vycm9yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjZ3N0LXBvbGwtZmQtaWdub3JlZCIgdGl0bGU9ImdzdF9wb2xsX2ZkX2lnbm9yZWTCoCgpIj5nc3RfcG9sbF9mZF9pZ25vcmVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiIHRpdGxlPSJHc3RQb2xsIj5Hc3RQb2xsPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwjR1NULVBPTEwtRkQtSU5JVDpDQVBTIiB0aXRsZT0iR1NUX1BPTExfRkRfSU5JVCI+R1NUX1BPTExfRkRfSU5JVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZkLWluaXQiIHRpdGxlPSJnc3RfcG9sbF9mZF9pbml0wqAoKSI+Z3N0X3BvbGxfZmRfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWZyZWUiIHRpdGxlPSJnc3RfcG9sbF9mcmVlwqAoKSI+Z3N0X3BvbGxfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLWdldC1yZWFkLWdwb2xsZmQiIHRpdGxlPSJnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkwqAoKSI+Z3N0X3BvbGxfZ2V0X3JlYWRfZ3BvbGxmZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldyIgdGl0bGU9ImdzdF9wb2xsX25ld8KgKCkiPmdzdF9wb2xsX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLW5ldy10aW1lciIgdGl0bGU9ImdzdF9wb2xsX25ld190aW1lcsKgKCkiPmdzdF9wb2xsX25ld190aW1lcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlYWQtY29udHJvbCIgdGl0bGU9ImdzdF9wb2xsX3JlYWRfY29udHJvbMKgKCkiPmdzdF9wb2xsX3JlYWRfY29udHJvbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlbW92ZS1mZCIgdGl0bGU9ImdzdF9wb2xsX3JlbW92ZV9mZMKgKCkiPmdzdF9wb2xsX3JlbW92ZV9mZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXJlc3RhcnQiIHRpdGxlPSJnc3RfcG9sbF9yZXN0YXJ0wqAoKSI+Z3N0X3BvbGxfcmVzdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1jb250cm9sbGFibGUiIHRpdGxlPSJnc3RfcG9sbF9zZXRfY29udHJvbGxhYmxlwqAoKSI+Z3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9wb2xsX3NldF9mbHVzaGluZ8KgKCkiPmdzdF9wb2xsX3NldF9mbHVzaGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdhaXQiIHRpdGxlPSJnc3RfcG9sbF93YWl0wqAoKSI+Z3N0X3BvbGxfd2FpdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sI2dzdC1wb2xsLXdyaXRlLWNvbnRyb2wiIHRpdGxlPSJnc3RfcG9sbF93cml0ZV9jb250cm9swqAoKSI+Z3N0X3BvbGxfd3JpdGVfY29udHJvbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UG9sbC5odG1sIiB0aXRsZT0iR3N0UG9sbCI+R3N0UG9sbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0IiB0aXRsZT0iR3N0UHJlc2V0Ij5Hc3RQcmVzZXQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sIiB0aXRsZT0iR3N0UHJlc2V0Ij5Hc3RQcmVzZXQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0SW50ZXJmYWNlIiB0aXRsZT0ic3RydWN0IEdzdFByZXNldEludGVyZmFjZSI+R3N0UHJlc2V0SW50ZXJmYWNlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZGVsZXRlLXByZXNldCIgdGl0bGU9ImdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldMKgKCkiPmdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LWFwcC1kaXIiIHRpdGxlPSJnc3RfcHJlc2V0X2dldF9hcHBfZGlywqAoKSI+Z3N0X3ByZXNldF9nZXRfYXBwX2RpcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LW1ldGEiIHRpdGxlPSJnc3RfcHJlc2V0X2dldF9tZXRhwqAoKSI+Z3N0X3ByZXNldF9nZXRfbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LXByZXNldC1uYW1lcyIgdGl0bGU9ImdzdF9wcmVzZXRfZ2V0X3ByZXNldF9uYW1lc8KgKCkiPmdzdF9wcmVzZXRfZ2V0X3ByZXNldF9uYW1lczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtZ2V0LXByb3BlcnR5LW5hbWVzIiB0aXRsZT0iZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXPCoCgpIj5nc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtaXMtZWRpdGFibGUiIHRpdGxlPSJnc3RfcHJlc2V0X2lzX2VkaXRhYmxlwqAoKSI+Z3N0X3ByZXNldF9pc19lZGl0YWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtbG9hZC1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X2xvYWRfcHJlc2V0wqAoKSI+Z3N0X3ByZXNldF9sb2FkX3ByZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtcmVuYW1lLXByZXNldCIgdGl0bGU9ImdzdF9wcmVzZXRfcmVuYW1lX3ByZXNldMKgKCkiPmdzdF9wcmVzZXRfcmVuYW1lX3ByZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtc2F2ZS1wcmVzZXQiIHRpdGxlPSJnc3RfcHJlc2V0X3NhdmVfcHJlc2V0wqAoKSI+Z3N0X3ByZXNldF9zYXZlX3ByZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtc2V0LWFwcC1kaXIiIHRpdGxlPSJnc3RfcHJlc2V0X3NldF9hcHBfZGlywqAoKSI+Z3N0X3ByZXNldF9zZXRfYXBwX2RpcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtc2V0LW1ldGEiIHRpdGxlPSJnc3RfcHJlc2V0X3NldF9tZXRhwqAoKSI+Z3N0X3ByZXNldF9zZXRfbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RQcm9ncmVzc1R5cGUiIHRpdGxlPSJlbnVtIEdzdFByb2dyZXNzVHlwZSI+R3N0UHJvZ3Jlc3NUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCNHc3RQcm90ZWN0aW9uTWV0YSIgdGl0bGU9InN0cnVjdCBHc3RQcm90ZWN0aW9uTWV0YSI+R3N0UHJvdGVjdGlvbk1ldGE8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sIiB0aXRsZT0iR3N0UHJvdGVjdGlvbk1ldGEiPkdzdFByb3RlY3Rpb25NZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI2dzdC1wcm90ZWN0aW9uLXNlbGVjdC1zeXN0ZW0iIHRpdGxlPSJnc3RfcHJvdGVjdGlvbl9zZWxlY3Rfc3lzdGVtwqAoKSI+Z3N0X3Byb3RlY3Rpb25fc2VsZWN0X3N5c3RlbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCIgdGl0bGU9IkdzdFByb3RlY3Rpb25NZXRhIj5Hc3RQcm90ZWN0aW9uTWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0UHJvdGVjdGlvbk1ldGEuaHRtbCNHU1QtUFJPVEVDVElPTi1TWVNURU0tSUQtQ0FQUy1GSUVMRDpDQVBTIiB0aXRsZT0iR1NUX1BST1RFQ1RJT05fU1lTVEVNX0lEX0NBUFNfRklFTEQiPkdTVF9QUk9URUNUSU9OX1NZU1RFTV9JRF9DQVBTX0ZJRUxEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sIiB0aXRsZT0iR3N0UHJvdGVjdGlvbk1ldGEiPkdzdFByb3RlY3Rpb25NZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjR3N0UHJveHlQYWQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFByb3h5UGFkIj5Hc3RQcm94eVBhZDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtY2hhaW4tZGVmYXVsdCIgdGl0bGU9ImdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdMKgKCkiPmdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1jaGFpbi1saXN0LWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdMKgKCkiPmdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCNnc3QtcHJveHktcGFkLWdldHJhbmdlLWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHTCoCgpIj5nc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0R2hvc3RQYWQuaHRtbCIgdGl0bGU9IkdzdEdob3N0UGFkIj5Hc3RHaG9zdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sI2dzdC1wcm94eS1wYWQtZ2V0LWludGVybmFsIiB0aXRsZT0iZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWzCoCgpIj5nc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RHaG9zdFBhZC5odG1sIiB0aXRsZT0iR3N0R2hvc3RQYWQiPkdzdEdob3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwjZ3N0LXByb3h5LXBhZC1pdGVyYXRlLWludGVybmFsLWxpbmtzLWRlZmF1bHQiIHRpdGxlPSJnc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdMKgKCkiPmdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEdob3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RHaG9zdFBhZCI+R3N0R2hvc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtUFRSLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1BUUl9GT1JNQVQiPkdTVF9QVFJfRk9STUFUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4USI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlE8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0UU9TVHlwZSIgdGl0bGU9ImVudW0gR3N0UU9TVHlwZSI+R3N0UU9TVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnlUeXBlIiB0aXRsZT0iZW51bSBHc3RRdWVyeVR5cGUiPkdzdFF1ZXJ5VHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHc3RRdWVyeVR5cGVGbGFncyIgdGl0bGU9ImVudW0gR3N0UXVlcnlUeXBlRmxhZ3MiPkdzdFF1ZXJ5VHlwZUZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYWxsb2NhdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGHCoCgpIj5nc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1hbGxvY2F0aW9uLXBhcmFtIiB0aXRsZT0iZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3BhcmFtwqAoKSI+Z3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3BhcmFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktYWRkLWFsbG9jYXRpb24tcG9vbCIgdGl0bGU9ImdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wb29swqAoKSI+Z3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3Bvb2w8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1hZGQtYnVmZmVyaW5nLXJhbmdlIiB0aXRsZT0iZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2XCoCgpIj5nc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWFkZC1zY2hlZHVsaW5nLW1vZGUiIHRpdGxlPSJnc3RfcXVlcnlfYWRkX3NjaGVkdWxpbmdfbW9kZcKgKCkiPmdzdF9xdWVyeV9hZGRfc2NoZWR1bGluZ19tb2RlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktY29weSIgdGl0bGU9ImdzdF9xdWVyeV9jb3B5wqAoKSI+Z3N0X3F1ZXJ5X2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1maW5kLWFsbG9jYXRpb24tbWV0YSIgdGl0bGU9ImdzdF9xdWVyeV9maW5kX2FsbG9jYXRpb25fbWV0YcKgKCkiPmdzdF9xdWVyeV9maW5kX2FsbG9jYXRpb25fbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLWFsbG9jYXRpb24tbWV0YXMiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhc8KgKCkiPmdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tYWxsb2NhdGlvbi1wYXJhbXMiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wYXJhbXPCoCgpIj5nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wYXJhbXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtbi1hbGxvY2F0aW9uLXBvb2xzIiB0aXRsZT0iZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHPCoCgpIj5nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29sczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWdldC1uLWJ1ZmZlcmluZy1yYW5nZXMiIHRpdGxlPSJnc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3Jhbmdlc8KgKCkiPmdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktZ2V0LW4tc2NoZWR1bGluZy1tb2RlcyIgdGl0bGU9ImdzdF9xdWVyeV9nZXRfbl9zY2hlZHVsaW5nX21vZGVzwqAoKSI+Z3N0X3F1ZXJ5X2dldF9uX3NjaGVkdWxpbmdfbW9kZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1nZXQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmXCoCgpIj5nc3RfcXVlcnlfZ2V0X3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LWhhcy1zY2hlZHVsaW5nLW1vZGUiIHRpdGxlPSJnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZcKgKCkiPmdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktaGFzLXNjaGVkdWxpbmctbW9kZS13aXRoLWZsYWdzIiB0aXRsZT0iZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGVfd2l0aF9mbGFnc8KgKCkiPmdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlX3dpdGhfZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1JUy1ET1dOU1RSRUFNOkNBUFMiIHRpdGxlPSJHU1RfUVVFUllfSVNfRE9XTlNUUkVBTSgpIj5HU1RfUVVFUllfSVNfRE9XTlNUUkVBTTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLUlTLVNFUklBTElaRUQ6Q0FQUyIgdGl0bGU9IkdTVF9RVUVSWV9JU19TRVJJQUxJWkVEKCkiPkdTVF9RVUVSWV9JU19TRVJJQUxJWkVEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktSVMtVVBTVFJFQU06Q0FQUyIgdGl0bGU9IkdTVF9RVUVSWV9JU19VUFNUUkVBTSgpIj5HU1RfUVVFUllfSVNfVVBTVFJFQU08L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1pcy13cml0YWJsZSIgdGl0bGU9ImdzdF9xdWVyeV9pc193cml0YWJsZSgpIj5nc3RfcXVlcnlfaXNfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1NQUtFLVRZUEU6Q0FQUyIgdGl0bGU9IkdTVF9RVUVSWV9NQUtFX1RZUEUoKSI+R1NUX1FVRVJZX01BS0VfVFlQRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfcXVlcnlfbWFrZV93cml0YWJsZSgpIj5nc3RfcXVlcnlfbWFrZV93cml0YWJsZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1hY2NlcHQtY2FwcyIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfYWNjZXB0X2NhcHPCoCgpIj5nc3RfcXVlcnlfbmV3X2FjY2VwdF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWFsbG9jYXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2FsbG9jYXRpb27CoCgpIj5nc3RfcXVlcnlfbmV3X2FsbG9jYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctYnVmZmVyaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmfCoCgpIj5nc3RfcXVlcnlfbmV3X2J1ZmZlcmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1jYXBzIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19jYXBzwqAoKSI+Z3N0X3F1ZXJ5X25ld19jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWNvbnRleHQiIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2NvbnRleHTCoCgpIj5nc3RfcXVlcnlfbmV3X2NvbnRleHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctY29udmVydCIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfY29udmVydMKgKCkiPmdzdF9xdWVyeV9uZXdfY29udmVydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1jdXN0b20iIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2N1c3RvbcKgKCkiPmdzdF9xdWVyeV9uZXdfY3VzdG9tPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWRyYWluIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19kcmFpbsKgKCkiPmdzdF9xdWVyeV9uZXdfZHJhaW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctZHVyYXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2R1cmF0aW9uwqAoKSI+Z3N0X3F1ZXJ5X25ld19kdXJhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1mb3JtYXRzIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19mb3JtYXRzwqAoKSI+Z3N0X3F1ZXJ5X25ld19mb3JtYXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LWxhdGVuY3kiIHRpdGxlPSJnc3RfcXVlcnlfbmV3X2xhdGVuY3nCoCgpIj5nc3RfcXVlcnlfbmV3X2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctcG9zaXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uwqAoKSI+Z3N0X3F1ZXJ5X25ld19wb3NpdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1zY2hlZHVsaW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nwqAoKSI+Z3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktbmV3LXNlZWtpbmciIHRpdGxlPSJnc3RfcXVlcnlfbmV3X3NlZWtpbmfCoCgpIj5nc3RfcXVlcnlfbmV3X3NlZWtpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1uZXctc2VnbWVudCIgdGl0bGU9ImdzdF9xdWVyeV9uZXdfc2VnbWVudMKgKCkiPmdzdF9xdWVyeV9uZXdfc2VnbWVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy11cmkiIHRpdGxlPSJnc3RfcXVlcnlfbmV3X3VyacKgKCkiPmdzdF9xdWVyeV9uZXdfdXJpPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYWNjZXB0LWNhcHMiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHPCoCgpIj5nc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1hY2NlcHQtY2Fwcy1yZXN1bHQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHNfcmVzdWx0wqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWFsbG9jYXRpb24iIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbsKgKCkiPmdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtYnVmZmVyaW5nLXBlcmNlbnQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnTCoCgpIj5nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1idWZmZXJpbmctcmFuZ2UiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWJ1ZmZlcmluZy1zdGF0cyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHPCoCgpIj5nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3N0YXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtY2FwcyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9jYXBzwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jYXBzLXJlc3VsdCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9jYXBzX3Jlc3VsdMKgKCkiPmdzdF9xdWVyeV9wYXJzZV9jYXBzX3Jlc3VsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWNvbnRleHQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfY29udGV4dMKgKCkiPmdzdF9xdWVyeV9wYXJzZV9jb250ZXh0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtY29udGV4dC10eXBlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHRfdHlwZcKgKCkiPmdzdF9xdWVyeV9wYXJzZV9jb250ZXh0X3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jb252ZXJ0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnTCoCgpIj5nc3RfcXVlcnlfcGFyc2VfY29udmVydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLWR1cmF0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbGF0ZW5jeSIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5wqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYWxsb2NhdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGHCoCgpIj5nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW50aC1hbGxvY2F0aW9uLXBhcmFtIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3BhcmFtwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3BhcmFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLWFsbG9jYXRpb24tcG9vbCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29swqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2w8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1udGgtYnVmZmVyaW5nLXJhbmdlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2XCoCgpIj5nc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLW50aC1mb3JtYXQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdMKgKCkiPmdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtbnRoLXNjaGVkdWxpbmctbW9kZSIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9udGhfc2NoZWR1bGluZ19tb2RlwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX250aF9zY2hlZHVsaW5nX21vZGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1uLWZvcm1hdHMiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX25fZm9ybWF0czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXBvc2l0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2Utc2NoZWR1bGluZyIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1zZWVraW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmfCoCgpIj5nc3RfcXVlcnlfcGFyc2Vfc2Vla2luZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXNlZ21lbnQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudMKgKCkiPmdzdF9xdWVyeV9wYXJzZV9zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtdXJpIiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3VyacKgKCkiPmdzdF9xdWVyeV9wYXJzZV91cmk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS11cmktcmVkaXJlY3Rpb24iIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfdXJpX3JlZGlyZWN0aW9uwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXVyaS1yZWRpcmVjdGlvbi1wZXJtYW5lbnQiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfdXJpX3JlZGlyZWN0aW9uX3Blcm1hbmVudMKgKCkiPmdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVmIiB0aXRsZT0iZ3N0X3F1ZXJ5X3JlZsKgKCkiPmdzdF9xdWVyeV9yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZW1vdmUtbnRoLWFsbG9jYXRpb24tbWV0YSIgdGl0bGU9ImdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fbWV0YcKgKCkiPmdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXJlbW92ZS1udGgtYWxsb2NhdGlvbi1wYXJhbSIgdGl0bGU9ImdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcGFyYW3CoCgpIj5nc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3BhcmFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVtb3ZlLW50aC1hbGxvY2F0aW9uLXBvb2wiIHRpdGxlPSJnc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3Bvb2zCoCgpIj5nc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3Bvb2w8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZXBsYWNlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3JlcGxhY2XCoCgpIj5nc3RfcXVlcnlfcmVwbGFjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1hY2NlcHQtY2Fwcy1yZXN1bHQiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdMKgKCkiPmdzdF9xdWVyeV9zZXRfYWNjZXB0X2NhcHNfcmVzdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWJ1ZmZlcmluZy1wZXJjZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudMKgKCkiPmdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtYnVmZmVyaW5nLXJhbmdlIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2XCoCgpIj5nc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1idWZmZXJpbmctc3RhdHMiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0c8KgKCkiPmdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3N0YXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWNhcHMtcmVzdWx0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdMKgKCkiPmdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtY29udGV4dCIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfY29udGV4dMKgKCkiPmdzdF9xdWVyeV9zZXRfY29udGV4dDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1jb252ZXJ0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0wqAoKSI+Z3N0X3F1ZXJ5X3NldF9jb252ZXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWR1cmF0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbsKgKCkiPmdzdF9xdWVyeV9zZXRfZHVyYXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtZm9ybWF0cyIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfZm9ybWF0c8KgKCkiPmdzdF9xdWVyeV9zZXRfZm9ybWF0czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1mb3JtYXRzdiIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfZm9ybWF0c3bCoCgpIj5nc3RfcXVlcnlfc2V0X2Zvcm1hdHN2PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LWxhdGVuY3kiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X2xhdGVuY3nCoCgpIj5nc3RfcXVlcnlfc2V0X2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtbnRoLWFsbG9jYXRpb24tcGFyYW0iIHRpdGxlPSJnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3BhcmFtwqAoKSI+Z3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wYXJhbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1udGgtYWxsb2NhdGlvbi1wb29sIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wb29swqAoKSI+Z3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wb29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXBvc2l0aW9uIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbsKgKCkiPmdzdF9xdWVyeV9zZXRfcG9zaXRpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtc2NoZWR1bGluZyIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZ8KgKCkiPmdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1zZWVraW5nIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9zZWVraW5nwqAoKSI+Z3N0X3F1ZXJ5X3NldF9zZWVraW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXNlZ21lbnQiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3NlZ21lbnTCoCgpIj5nc3RfcXVlcnlfc2V0X3NlZ21lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1zZXQtdXJpIiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF91cmnCoCgpIj5nc3RfcXVlcnlfc2V0X3VyaTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC11cmktcmVkaXJlY3Rpb24iIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbsKgKCkiPmdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXVyaS1yZWRpcmVjdGlvbi1wZXJtYW5lbnQiIHRpdGxlPSJnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnTCoCgpIj5nc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1UWVBFOkNBUFMiIHRpdGxlPSJHU1RfUVVFUllfVFlQRSgpIj5HU1RfUVVFUllfVFlQRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR1NULVFVRVJZLVRZUEUtQk9USDpDQVBTIiB0aXRsZT0iR1NUX1FVRVJZX1RZUEVfQk9USCI+R1NUX1FVRVJZX1RZUEVfQk9USDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtZ2V0LWZsYWdzIiB0aXRsZT0iZ3N0X3F1ZXJ5X3R5cGVfZ2V0X2ZsYWdzwqAoKSI+Z3N0X3F1ZXJ5X3R5cGVfZ2V0X2ZsYWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9xdWVyeV90eXBlX2dldF9uYW1lwqAoKSI+Z3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI0dTVC1RVUVSWS1UWVBFLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9RVUVSWV9UWVBFX05BTUUoKSI+R1NUX1FVRVJZX1RZUEVfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXR5cGUtdG8tcXVhcmsiIHRpdGxlPSJnc3RfcXVlcnlfdHlwZV90b19xdWFya8KgKCkiPmdzdF9xdWVyeV90eXBlX3RvX3F1YXJrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktdW5yZWYiIHRpdGxlPSJnc3RfcXVlcnlfdW5yZWbCoCgpIj5nc3RfcXVlcnlfdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS13cml0YWJsZS1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfcXVlcnlfd3JpdGFibGVfc3RydWN0dXJlwqAoKSI+Z3N0X3F1ZXJ5X3dyaXRhYmxlX3N0cnVjdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4UiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlI8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCNHc3RSYW5rIiB0aXRsZT0iZW51bSBHc3RSYW5rIj5Hc3RSYW5rPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sIiB0aXRsZT0iR3N0UGx1Z2luRmVhdHVyZSI+R3N0UGx1Z2luRmVhdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1ET1VCTEUtQkU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX0RPVUJMRV9CRcKgKCkiPkdTVF9SRUFEX0RPVUJMRV9CRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1ET1VCTEUtTEU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX0RPVUJMRV9MRcKgKCkiPkdTVF9SRUFEX0RPVUJMRV9MRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1GTE9BVC1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfRkxPQVRfQkXCoCgpIj5HU1RfUkVBRF9GTE9BVF9CRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1GTE9BVC1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfRkxPQVRfTEXCoCgpIj5HU1RfUkVBRF9GTE9BVF9MRTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMTYtQkU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQxNl9CRSgpIj5HU1RfUkVBRF9VSU5UMTZfQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDE2LUxFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UMTZfTEUoKSI+R1NUX1JFQURfVUlOVDE2X0xFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQyNC1CRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDI0X0JFKCkiPkdTVF9SRUFEX1VJTlQyNF9CRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UMjQtTEU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQyNF9MRSgpIj5HU1RfUkVBRF9VSU5UMjRfTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDMyLUJFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UMzJfQkUoKSI+R1NUX1JFQURfVUlOVDMyX0JFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQzMi1MRTpDQVBTIiB0aXRsZT0iR1NUX1JFQURfVUlOVDMyX0xFKCkiPkdTVF9SRUFEX1VJTlQzMl9MRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUkVBRC1VSU5UNjQtQkU6Q0FQUyIgdGl0bGU9IkdTVF9SRUFEX1VJTlQ2NF9CRSgpIj5HU1RfUkVBRF9VSU5UNjRfQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJFQUQtVUlOVDY0LUxFOkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UNjRfTEUoKSI+R1NUX1JFQURfVUlOVDY0X0xFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1SRUFELVVJTlQ4OkNBUFMiIHRpdGxlPSJHU1RfUkVBRF9VSU5UOCgpIj5HU1RfUkVBRF9VSU5UODwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI0dzdFJlZ2lzdHJ5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNHc3RSZWdpc3RyeS1mZWF0dXJlLWFkZGVkIiB0aXRsZT0iVGhlIOKAnGZlYXR1cmUtYWRkZWTigJ0gc2lnbmFsIj5Hc3RSZWdpc3RyeTo6ZmVhdHVyZS1hZGRlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNHc3RSZWdpc3RyeS1wbHVnaW4tYWRkZWQiIHRpdGxlPSJUaGUg4oCccGx1Z2luLWFkZGVk4oCdIHNpZ25hbCI+R3N0UmVnaXN0cnk6OnBsdWdpbi1hZGRlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktYWRkLWZlYXR1cmUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmXCoCgpIj5nc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1hZGQtcGF0aCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9hZGRfcGF0aMKgKCkiPmdzdF9yZWdpc3RyeV9hZGRfcGF0aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWFkZC1wbHVnaW4iIHRpdGxlPSJnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbsKgKCkiPmdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktY2hlY2stZmVhdHVyZS12ZXJzaW9uIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbsKgKCkiPmdzdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1mZWF0dXJlLWZpbHRlciIgdGl0bGU9ImdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcsKgKCkiPmdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZpbmQtZmVhdHVyZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmXCoCgpIj5nc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZmluZC1wbHVnaW4iIHRpdGxlPSJnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW7CoCgpIj5nc3RfcmVnaXN0cnlfZmluZF9wbHVnaW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWZvcmstaXMtZW5hYmxlZCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9mb3JrX2lzX2VuYWJsZWTCoCgpIj5nc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtcmVnaXN0cnktZm9yay1zZXQtZW5hYmxlZCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkwqAoKSI+Z3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIiB0aXRsZT0iR3N0Ij5Hc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0IiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2dldMKgKCkiPmdzdF9yZWdpc3RyeV9nZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtZmVhdHVyZS1saXN0IiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3TCoCgpIj5nc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1mZWF0dXJlLWxpc3QtYnktcGx1Z2luIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luwqAoKSI+Z3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktZ2V0LWZlYXR1cmUtbGlzdC1jb29raWUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWXCoCgpIj5nc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1nZXQtcGF0aC1saXN0IiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3TCoCgpIj5nc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LWdldC1wbHVnaW4tbGlzdCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3TCoCgpIj5nc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktbG9va3VwIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X2xvb2t1cMKgKCkiPmdzdF9yZWdpc3RyeV9sb29rdXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1sb29rdXAtZmVhdHVyZSIgdGl0bGU9ImdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZcKgKCkiPmdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXBsdWdpbi1maWx0ZXIiIHRpdGxlPSJnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlcsKgKCkiPmdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCNnc3QtcmVnaXN0cnktcmVtb3ZlLWZlYXR1cmUiIHRpdGxlPSJnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmXCoCgpIj5nc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UmVnaXN0cnkuaHRtbCIgdGl0bGU9IkdzdFJlZ2lzdHJ5Ij5Hc3RSZWdpc3RyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sI2dzdC1yZWdpc3RyeS1yZW1vdmUtcGx1Z2luIiB0aXRsZT0iZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW7CoCgpIj5nc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RSZWdpc3RyeS5odG1sIiB0aXRsZT0iR3N0UmVnaXN0cnkiPkdzdFJlZ2lzdHJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwjZ3N0LXJlZ2lzdHJ5LXNjYW4tcGF0aCIgdGl0bGU9ImdzdF9yZWdpc3RyeV9zY2FuX3BhdGjCoCgpIj5nc3RfcmVnaXN0cnlfc2Nhbl9wYXRoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFJlZ2lzdHJ5Lmh0bWwiIHRpdGxlPSJHc3RSZWdpc3RyeSI+R3N0UmVnaXN0cnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdFJlc291cmNlRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFJlc291cmNlRXJyb3IiPkdzdFJlc291cmNlRXJyb3I8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPkdzdEdFcnJvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwjR1NULVJFU09VUkNFLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfUkVTT1VSQ0VfRVJST1IiPkdTVF9SRVNPVVJDRV9FUlJPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPkdzdEdFcnJvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi0xMjg6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzEyOCgpIj5HU1RfUk9VTkRfRE9XTl8xMjg8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMTY6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzE2KCkiPkdTVF9ST1VORF9ET1dOXzE2PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTI6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9ET1dOXzIoKSI+R1NUX1JPVU5EX0RPV05fMjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi0zMjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX0RPV05fMzIoKSI+R1NUX1JPVU5EX0RPV05fMzI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tNDpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX0RPV05fNCgpIj5HU1RfUk9VTkRfRE9XTl80PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1ET1dOLTY0OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl82NCgpIj5HU1RfUk9VTkRfRE9XTl82NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtRE9XTi04OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl84KCkiPkdTVF9ST1VORF9ET1dOXzg8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tTjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX0RPV05fTigpIj5HU1RfUk9VTkRfRE9XTl9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0xMjg6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF8xMjgoKSI+R1NUX1JPVU5EX1VQXzEyODwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtMTY6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF8xNigpIj5HU1RfUk9VTkRfVVBfMTY8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTI6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF8yKCkiPkdTVF9ST1VORF9VUF8yPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0zMjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQXzMyKCkiPkdTVF9ST1VORF9VUF8zMjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtNDpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQXzQoKSI+R1NUX1JPVU5EX1VQXzQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELVVQLTY0OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfVVBfNjQoKSI+R1NUX1JPVU5EX1VQXzY0PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC04OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfVVBfOCgpIj5HU1RfUk9VTkRfVVBfODwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtUk9VTkQtVVAtTjpDQVBTIiB0aXRsZT0iR1NUX1JPVU5EX1VQX04oKSI+R1NUX1JPVU5EX1VQX048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhTIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+UzwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwjR3N0U2FtcGxlLXN0cnVjdCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtY29weSIgdGl0bGU9ImdzdF9zYW1wbGVfY29wecKgKCkiPmdzdF9zYW1wbGVfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9zYW1wbGVfZ2V0X2J1ZmZlcsKgKCkiPmdzdF9zYW1wbGVfZ2V0X2J1ZmZlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LWJ1ZmZlci1saXN0IiB0aXRsZT0iZ3N0X3NhbXBsZV9nZXRfYnVmZmVyX2xpc3TCoCgpIj5nc3Rfc2FtcGxlX2dldF9idWZmZXJfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LWNhcHMiIHRpdGxlPSJnc3Rfc2FtcGxlX2dldF9jYXBzwqAoKSI+Z3N0X3NhbXBsZV9nZXRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LWluZm8iIHRpdGxlPSJnc3Rfc2FtcGxlX2dldF9pbmZvwqAoKSI+Z3N0X3NhbXBsZV9nZXRfaW5mbzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtZ2V0LXNlZ21lbnQiIHRpdGxlPSJnc3Rfc2FtcGxlX2dldF9zZWdtZW50wqAoKSI+Z3N0X3NhbXBsZV9nZXRfc2VnbWVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtbmV3IiB0aXRsZT0iZ3N0X3NhbXBsZV9uZXfCoCgpIj5nc3Rfc2FtcGxlX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtcmVmIiB0aXRsZT0iZ3N0X3NhbXBsZV9yZWbCoCgpIj5nc3Rfc2FtcGxlX3JlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtc2V0LWJ1ZmZlci1saXN0IiB0aXRsZT0iZ3N0X3NhbXBsZV9zZXRfYnVmZmVyX2xpc3TCoCgpIj5nc3Rfc2FtcGxlX3NldF9idWZmZXJfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sI2dzdC1zYW1wbGUtdW5yZWYiIHRpdGxlPSJnc3Rfc2FtcGxlX3VucmVmwqAoKSI+Z3N0X3NhbXBsZV91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCIgdGl0bGU9IkdzdFNhbXBsZSI+R3N0U2FtcGxlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjR3N0U2NoZWR1bGluZ0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTY2hlZHVsaW5nRmxhZ3MiPkdzdFNjaGVkdWxpbmdGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR3N0U2VhcmNoTW9kZSIgdGl0bGU9ImVudW0gR3N0U2VhcmNoTW9kZSI+R3N0U2VhcmNoTW9kZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVNFQ09ORDpDQVBTIiB0aXRsZT0iR1NUX1NFQ09ORCI+R1NUX1NFQ09ORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjR3N0U2Vla0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RTZWVrRmxhZ3MiPkdzdFNlZWtGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNHc3RTZWVrVHlwZSIgdGl0bGU9ImVudW0gR3N0U2Vla1R5cGUiPkdzdFNlZWtUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudEZsYWdzIiB0aXRsZT0iZW51bSBHc3RTZWdtZW50RmxhZ3MiPkdzdFNlZ21lbnRGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWNsaXAiIHRpdGxlPSJnc3Rfc2VnbWVudF9jbGlwwqAoKSI+Z3N0X3NlZ21lbnRfY2xpcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1jb3B5IiB0aXRsZT0iZ3N0X3NlZ21lbnRfY29wecKgKCkiPmdzdF9zZWdtZW50X2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtY29weS1pbnRvIiB0aXRsZT0iZ3N0X3NlZ21lbnRfY29weV9pbnRvwqAoKSI+Z3N0X3NlZ21lbnRfY29weV9pbnRvPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWRvLXNlZWsiIHRpdGxlPSJnc3Rfc2VnbWVudF9kb19zZWVrwqAoKSI+Z3N0X3NlZ21lbnRfZG9fc2VlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVNFR01FTlQtRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfU0VHTUVOVF9GT1JNQVQiPkdTVF9TRUdNRU5UX0ZPUk1BVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtZnJlZSIgdGl0bGU9ImdzdF9zZWdtZW50X2ZyZWXCoCgpIj5nc3Rfc2VnbWVudF9mcmVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWluaXQiIHRpdGxlPSJnc3Rfc2VnbWVudF9pbml0wqAoKSI+Z3N0X3NlZ21lbnRfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1pcy1lcXVhbCIgdGl0bGU9ImdzdF9zZWdtZW50X2lzX2VxdWFswqAoKSI+Z3N0X3NlZ21lbnRfaXNfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtbmV3IiB0aXRsZT0iZ3N0X3NlZ21lbnRfbmV3wqAoKSI+Z3N0X3NlZ21lbnRfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LW9mZnNldC1ydW5uaW5nLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF9vZmZzZXRfcnVubmluZ190aW1lwqAoKSI+Z3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lwqAoKSI+Z3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtcG9zaXRpb24tZnJvbS1ydW5uaW5nLXRpbWUtZnVsbCIgdGl0bGU9ImdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lX2Z1bGzCoCgpIj5nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZV9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tc3RyZWFtLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lwqAoKSI+Z3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXN0cmVhbS10aW1lLWZ1bGwiIHRpdGxlPSJnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lX2Z1bGzCoCgpIj5nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtc2V0LXJ1bm5pbmctdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWXCoCgpIj5nc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXBvc2l0aW9uIiB0aXRsZT0iZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb27CoCgpIj5nc3Rfc2VnbWVudF90b19wb3NpdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWXCoCgpIj5nc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tcnVubmluZy10aW1lLWZ1bGwiIHRpdGxlPSJnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbMKgKCkiPmdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXRvLXN0cmVhbS10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWXCoCgpIj5nc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZS1mdWxsIiB0aXRsZT0iZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbMKgKCkiPmdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXNlZ3RyYXAtaXMtZW5hYmxlZCIgdGl0bGU9ImdzdF9zZWd0cmFwX2lzX2VuYWJsZWTCoCgpIj5nc3Rfc2VndHJhcF9pc19lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCNnc3Qtc2VndHJhcC1zZXQtZW5hYmxlZCIgdGl0bGU9ImdzdF9zZWd0cmFwX3NldF9lbmFibGVkwqAoKSI+Z3N0X3NlZ3RyYXBfc2V0X2VuYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sIiB0aXRsZT0iR3N0Ij5Hc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURTpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFKCkiPkdTVF9TVEFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHc3RTdGF0ZSIgdGl0bGU9ImVudW0gR3N0U3RhdGUiPkdzdFN0YXRlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR3N0U3RhdGVDaGFuZ2UiIHRpdGxlPSJlbnVtIEdzdFN0YXRlQ2hhbmdlIj5Hc3RTdGF0ZUNoYW5nZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIiB0aXRsZT0iZW51bSBHc3RTdGF0ZUNoYW5nZVJldHVybiI+R3N0U3RhdGVDaGFuZ2VSZXR1cm48L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtR0VULUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9HRVRfQ09ORCgpIj5HU1RfU1RBVEVfR0VUX0NPTkQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUdFVC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEVfR0VUX0xPQ0soKSI+R1NUX1NUQVRFX0dFVF9MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1HRVQtTkVYVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX0dFVF9ORVhUKCkiPkdTVF9TVEFURV9HRVRfTkVYVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtTkVYVDpDQVBTIiB0aXRsZT0iR1NUX1NUQVRFX05FWFQoKSI+R1NUX1NUQVRFX05FWFQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBFTkRJTkc6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9QRU5ESU5HKCkiPkdTVF9TVEFURV9QRU5ESU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1SRVRVUk46Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9SRVRVUk4oKSI+R1NUX1NUQVRFX1JFVFVSTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVEFSR0VUOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEVfVEFSR0VUKCkiPkdTVF9TVEFURV9UQVJHRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVRSQU5TSVRJT046Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9UUkFOU0lUSU9OKCkiPkdTVF9TVEFURV9UUkFOU0lUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1UUkFOU0lUSU9OLUNVUlJFTlQ6Q0FQUyIgdGl0bGU9IkdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQoKSI+R1NUX1NUQVRFX1RSQU5TSVRJT05fQ1VSUkVOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtVFJBTlNJVElPTi1ORVhUOkNBUFMiIHRpdGxlPSJHU1RfU1RBVEVfVFJBTlNJVElPTl9ORVhUKCkiPkdTVF9TVEFURV9UUkFOU0lUSU9OX05FWFQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0U3RhdGljQ2FwcyIgdGl0bGU9InN0cnVjdCBHc3RTdGF0aWNDYXBzIj5Hc3RTdGF0aWNDYXBzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RhdGljUGFkVGVtcGxhdGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMiIHRpdGxlPSJHU1RfU1RBVElDX0NBUFMoKSI+R1NUX1NUQVRJQ19DQVBTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUy1BTlk6Q0FQUyIgdGl0bGU9IkdTVF9TVEFUSUNfQ0FQU19BTlkiPkdTVF9TVEFUSUNfQ0FQU19BTlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LXN0YXRpYy1jYXBzLWNsZWFudXAiIHRpdGxlPSJnc3Rfc3RhdGljX2NhcHNfY2xlYW51cMKgKCkiPmdzdF9zdGF0aWNfY2Fwc19jbGVhbnVwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1zdGF0aWMtY2Fwcy1nZXQiIHRpdGxlPSJnc3Rfc3RhdGljX2NhcHNfZ2V0wqAoKSI+Z3N0X3N0YXRpY19jYXBzX2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNHU1QtU1RBVElDLUNBUFMtTk9ORTpDQVBTIiB0aXRsZT0iR1NUX1NUQVRJQ19DQVBTX05PTkUiPkdTVF9TVEFUSUNfQ0FQU19OT05FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtU1RBVElDLVBBRC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoKSI+R1NUX1NUQVRJQ19QQURfVEVNUExBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCIgdGl0bGU9IkdzdFBhZFRlbXBsYXRlIj5Hc3RQYWRUZW1wbGF0ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sI2dzdC1zdGF0aWMtcGFkLXRlbXBsYXRlLWdldCIgdGl0bGU9ImdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldMKgKCkiPmdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWRUZW1wbGF0ZS5odG1sIiB0aXRsZT0iR3N0UGFkVGVtcGxhdGUiPkdzdFBhZFRlbXBsYXRlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwjZ3N0LXN0YXRpYy1wYWQtdGVtcGxhdGUtZ2V0LWNhcHMiIHRpdGxlPSJnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2Fwc8KgKCkiPmdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZFRlbXBsYXRlLmh0bWwiIHRpdGxlPSJHc3RQYWRUZW1wbGF0ZSI+R3N0UGFkVGVtcGxhdGU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtU1RJTUUtQVJHUzpDQVBTIiB0aXRsZT0iR1NUX1NUSU1FX0FSR1MoKSI+R1NUX1NUSU1FX0FSR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtU1RJTUUtRk9STUFUOkNBUFMiIHRpdGxlPSJHU1RfU1RJTUVfRk9STUFUIj5HU1RfU1RJTUVfRk9STUFUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW0iIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNHc3RTdHJlYW1DbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1DbGFzcyI+R3N0U3RyZWFtQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29sbGVjdGlvbiI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI0dzdFN0cmVhbUNvbGxlY3Rpb25DbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3MiPkdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbUNvbGxlY3Rpb24uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbUNvbGxlY3Rpb24iPkdzdFN0cmVhbUNvbGxlY3Rpb248L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEdFcnJvci5odG1sI0dzdFN0cmVhbUVycm9yIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1FcnJvciI+R3N0U3RyZWFtRXJyb3I8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiIHRpdGxlPSJHc3RHRXJyb3IiPkdzdEdFcnJvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFN0cmVhbUZsYWdzIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1GbGFncyI+R3N0U3RyZWFtRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJlYW1TdGF0dXNUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1TdGF0dXNUeXBlIj5Hc3RTdHJlYW1TdGF0dXNUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjR3N0U3RyZWFtVHlwZSIgdGl0bGU9ImVudW0gR3N0U3RyZWFtVHlwZSI+R3N0U3RyZWFtVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLWFkZC1zdHJlYW0iIHRpdGxlPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbcKgKCkiPmdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db2xsZWN0aW9uIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLWdldC1zaXplIiB0aXRsZT0iZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplwqAoKSI+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db2xsZWN0aW9uIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLWdldC1zdHJlYW0iIHRpdGxlPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbcKgKCkiPmdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db2xsZWN0aW9uIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLWdldC11cHN0cmVhbS1pZCIgdGl0bGU9ImdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfdXBzdHJlYW1faWTCoCgpIj5nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Vwc3RyZWFtX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db2xsZWN0aW9uIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjZ3N0LXN0cmVhbS1jb2xsZWN0aW9uLW5ldyIgdGl0bGU9ImdzdF9zdHJlYW1fY29sbGVjdGlvbl9uZXfCoCgpIj5nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db2xsZWN0aW9uIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCNHU1QtU1RSRUFNLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfU1RSRUFNX0VSUk9SIj5HU1RfU1RSRUFNX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RHRXJyb3IuaHRtbCIgdGl0bGU9IkdzdEdFcnJvciI+R3N0R0Vycm9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC1jYXBzIiB0aXRsZT0iZ3N0X3N0cmVhbV9nZXRfY2Fwc8KgKCkiPmdzdF9zdHJlYW1fZ2V0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tZ2V0LXN0cmVhbS1mbGFncyIgdGl0bGU9ImdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFnc8KgKCkiPmdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW0iPkdzdFN0cmVhbTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLWlkIiB0aXRsZT0iZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkwqAoKSI+Z3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC1zdHJlYW0tdHlwZSIgdGl0bGU9ImdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlwqAoKSI+Z3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tZ2V0LXRhZ3MiIHRpdGxlPSJnc3Rfc3RyZWFtX2dldF90YWdzwqAoKSI+Z3N0X3N0cmVhbV9nZXRfdGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW0iPkdzdFN0cmVhbTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1uZXciIHRpdGxlPSJnc3Rfc3RyZWFtX25ld8KgKCkiPmdzdF9zdHJlYW1fbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLXNldC1jYXBzIiB0aXRsZT0iZ3N0X3N0cmVhbV9zZXRfY2Fwc8KgKCkiPmdzdF9zdHJlYW1fc2V0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tc2V0LXN0cmVhbS1mbGFncyIgdGl0bGU9ImdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFnc8KgKCkiPmdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW0iPkdzdFN0cmVhbTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1zZXQtc3RyZWFtLXR5cGUiIHRpdGxlPSJnc3Rfc3RyZWFtX3NldF9zdHJlYW1fdHlwZcKgKCkiPmdzdF9zdHJlYW1fc2V0X3N0cmVhbV90eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLXNldC10YWdzIiB0aXRsZT0iZ3N0X3N0cmVhbV9zZXRfdGFnc8KgKCkiPmdzdF9zdHJlYW1fc2V0X3RhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tdHlwZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZcKgKCkiPmdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW0iPkdzdFN0cmVhbTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlIiB0aXRsZT0iZW51bSBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlIj5Hc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmVGaWx0ZXJNYXBGdW5jIiB0aXRsZT0iR3N0U3RydWN0dXJlRmlsdGVyTWFwRnVuY8KgKCkiPkdzdFN0cnVjdHVyZUZpbHRlck1hcEZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZUZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmPCoCgpIj5Hc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYzwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlTWFwRnVuYyIgdGl0bGU9IkdzdFN0cnVjdHVyZU1hcEZ1bmPCoCgpIj5Hc3RTdHJ1Y3R1cmVNYXBGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWNhbi1pbnRlcnNlY3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3TCoCgpIj5nc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWNvcHkiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2NvcHnCoCgpIj5nc3Rfc3RydWN0dXJlX2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpbHRlci1hbmQtbWFwLWluLXBsYWNlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maWx0ZXJfYW5kX21hcF9pbl9wbGFjZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlwqAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkwqAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1ib29sZWFuIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfYm9vbGVhbsKgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWRvdWJsZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZG91YmxlwqAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbsKgKCkiPmdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1uZWFyZXN0LWludCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50wqAoKSI+Z3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZpeGF0ZS1maWVsZC1zdHJpbmciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmfCoCgpIj5nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZvcmVhY2giIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZvcmVhY2jCoCgpIj5nc3Rfc3RydWN0dXJlX2ZvcmVhY2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZyZWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ZyZWXCoCgpIj5nc3Rfc3RydWN0dXJlX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWZyb20tc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZ8KgKCkiPmdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0wqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1ib29sZWFuIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbsKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1jbG9jay10aW1lIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1kYXRlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1kYXRlLXRpbWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWXCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1kb3VibGUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9kb3VibGXCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9kb3VibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1lbnVtIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZW51bcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW08L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1maWVsZC10eXBlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGRfdHlwZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1mbGFnc2V0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfZmxhZ3NldMKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ZsYWdzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZnJhY3Rpb24iIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbsKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtaW50IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfaW50wqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfaW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtaW50NjQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF9pbnQ2NMKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDY0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWXCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtbmFtZS1pZCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWTCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9uYW1lX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nwqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdWludCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnTCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF91aW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdWludDY0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0wqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfdWludDY0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0wqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF92YWx1ZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2hhc19maWVsZMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtZmllbGQtdHlwZWQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1oYXMtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaGFzX25hbWXCoCgpIj5nc3Rfc3RydWN0dXJlX2hhc19uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2dldMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0wqAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1nZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1oYXMtZmllbGQtdHlwZWQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX3NldMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0wqAoKSI+Z3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC1zZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pZC10YWtlLXZhbHVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlwqAoKSI+Z3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pbnRlcnNlY3QiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2ludGVyc2VjdMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pcy1lcXVhbCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWzCoCgpIj5nc3Rfc3RydWN0dXJlX2lzX2VxdWFsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1pcy1zdWJzZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2lzX3N1YnNldMKgKCkiPmdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld8KgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctZW1wdHkiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld19lbXB0ecKgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctZnJvbS1zdHJpbmciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld19mcm9tX3N0cmluZ8KgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3X2Zyb21fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctaWQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld19pZMKgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3X2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctaWQtZW1wdHkiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0ecKgKCkiPmdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uZXctdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0wqAoKSI+Z3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1udGgtZmllbGQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWXCoCgpIj5nc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1uLWZpZWxkcyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfbl9maWVsZHPCoCgpIj5nc3Rfc3RydWN0dXJlX25fZmllbGRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtYWxsLWZpZWxkcyIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHPCoCgpIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZMKgKCkiPmdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzwqAoKSI+Z3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1yZW1vdmUtZmllbGRzLXZhbGlzdCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkc192YWxpc3TCoCgpIj5nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldMKgKCkiPmdzdF9zdHJ1Y3R1cmVfc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtbmFtZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfc2V0X25hbWXCoCgpIj5nc3Rfc3RydWN0dXJlX3NldF9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtcGFyZW50LXJlZmNvdW50IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50wqAoKSI+Z3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtdmFsaXN0IiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0wqAoKSI+Z3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1zZXQtdmFsdWUiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3NldF92YWx1ZcKgKCkiPmdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS10YWtlLXZhbHVlIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlwqAoKSI+Z3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS10by1zdHJpbmciIHRpdGxlPSJnc3Rfc3RydWN0dXJlX3RvX3N0cmluZ8KgKCkiPmdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVNUUi1GT1VSQ0M6Q0FQUyIgdGl0bGU9IkdTVF9TVFJfRk9VUkNDKCkiPkdTVF9TVFJfRk9VUkNDPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVNUUi1OVUxMOkNBUFMiIHRpdGxlPSJHU1RfU1RSX05VTEwoKSI+R1NUX1NUUl9OVUxMPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwjR3N0U3lzdGVtQ2xvY2stc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFN5c3RlbUNsb2NrIj5Hc3RTeXN0ZW1DbG9jazwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj5Hc3RTeXN0ZW1DbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLS1jbG9jay10eXBlIiB0aXRsZT0iVGhlIOKAnGNsb2NrLXR5cGXigJ0gcHJvcGVydHkiPkdzdFN5c3RlbUNsb2NrOmNsb2NrLXR5cGU8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN5c3RlbUNsb2NrLmh0bWwiIHRpdGxlPSJHc3RTeXN0ZW1DbG9jayI+R3N0U3lzdGVtQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCNnc3Qtc3lzdGVtLWNsb2NrLW9idGFpbiIgdGl0bGU9ImdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluwqAoKSI+Z3N0X3N5c3RlbV9jbG9ja19vYnRhaW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFN5c3RlbUNsb2NrIj5Hc3RTeXN0ZW1DbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI2dzdC1zeXN0ZW0tY2xvY2stc2V0LWRlZmF1bHQiIHRpdGxlPSJnc3Rfc3lzdGVtX2Nsb2NrX3NldF9kZWZhdWx0wqAoKSI+Z3N0X3N5c3RlbV9jbG9ja19zZXRfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPkdzdFN5c3RlbUNsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4VCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlQ8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHc3RUYWdGbGFnIiB0aXRsZT0iZW51bSBHc3RUYWdGbGFnIj5Hc3RUYWdGbGFnPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnRm9yZWFjaEZ1bmMiIHRpdGxlPSJHc3RUYWdGb3JlYWNoRnVuY8KgKCkiPkdzdFRhZ0ZvcmVhY2hGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VGdW5jIiB0aXRsZT0iR3N0VGFnTWVyZ2VGdW5jwqAoKSI+R3N0VGFnTWVyZ2VGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIiB0aXRsZT0iZW51bSBHc3RUYWdNZXJnZU1vZGUiPkdzdFRhZ01lcmdlTW9kZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dzdFRhZ1Njb3BlIiB0aXRsZT0iZW51bSBHc3RUYWdTY29wZSI+R3N0VGFnU2NvcGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUYWdTZXR0ZXIiPkdzdFRhZ1NldHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXJJbnRlcmZhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFnU2V0dGVySW50ZXJmYWNlIj5Hc3RUYWdTZXR0ZXJJbnRlcmZhY2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU06Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU0iPkdTVF9UQUdfQUxCVU08L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1BUlRJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQUxCVU1fQVJUSVNUIj5HU1RfVEFHX0FMQlVNX0FSVElTVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLUFSVElTVC1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUUiPkdTVF9UQUdfQUxCVU1fQVJUSVNUX1NPUlROQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tR0FJTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19BTEJVTV9HQUlOIj5HU1RfVEFHX0FMQlVNX0dBSU48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1QRUFLOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX1BFQUsiPkdTVF9UQUdfQUxCVU1fUEVBSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFMQlVNLVNPUlROQU1FOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX1NPUlROQU1FIj5HU1RfVEFHX0FMQlVNX1NPUlROQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tVk9MVU1FLUNPVU5UOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCI+R1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1WT0xVTUUtTlVNQkVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVIiPkdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFQUExJQ0FUSU9OLURBVEE6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQVBQTElDQVRJT05fREFUQSI+R1NUX1RBR19BUFBMSUNBVElPTl9EQVRBPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVBQTElDQVRJT04tTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FIj5HU1RfVEFHX0FQUExJQ0FUSU9OX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BUlRJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQVJUSVNUIj5HU1RfVEFHX0FSVElTVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUFSVElTVC1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19BUlRJU1RfU09SVE5BTUUiPkdTVF9UQUdfQVJUSVNUX1NPUlROQU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQVRUQUNITUVOVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19BVFRBQ0hNRU5UIj5HU1RfVEFHX0FUVEFDSE1FTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BVURJTy1DT0RFQzpDQVBTIiB0aXRsZT0iR1NUX1RBR19BVURJT19DT0RFQyI+R1NUX1RBR19BVURJT19DT0RFQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUJFQVRTLVBFUi1NSU5VVEU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQkVBVFNfUEVSX01JTlVURSI+R1NUX1RBR19CRUFUU19QRVJfTUlOVVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQklUUkFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19CSVRSQVRFIj5HU1RfVEFHX0JJVFJBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT0RFQzpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT0RFQyI+R1NUX1RBR19DT0RFQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTU1FTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09NTUVOVCI+R1NUX1RBR19DT01NRU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09NUE9TRVI6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09NUE9TRVIiPkdTVF9UQUdfQ09NUE9TRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT01QT1NFUi1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT01QT1NFUl9TT1JUTkFNRSI+R1NUX1RBR19DT01QT1NFUl9TT1JUTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPTlRBQ1Q6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09OVEFDVCI+R1NUX1RBR19DT05UQUNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQ09OVEFJTkVSLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19DT05UQUlORVJfRk9STUFUIj5HU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1DT1BZUklHSFQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09QWVJJR0hUIj5HU1RfVEFHX0NPUFlSSUdIVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUNPUFlSSUdIVC1VUkk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfQ09QWVJJR0hUX1VSSSI+R1NUX1RBR19DT1BZUklHSFRfVVJJPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19EQVRFIj5HU1RfVEFHX0RBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1EQVRFLVRJTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfREFURV9USU1FIj5HU1RfVEFHX0RBVEVfVElNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLURFU0NSSVBUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RFU0NSSVBUSU9OIj5HU1RfVEFHX0RFU0NSSVBUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctREVWSUNFLU1BTlVGQUNUVVJFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19ERVZJQ0VfTUFOVUZBQ1RVUkVSIj5HU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1ERVZJQ0UtTU9ERUw6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfREVWSUNFX01PREVMIj5HU1RfVEFHX0RFVklDRV9NT0RFTDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLURVUkFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0RVUkFUSU9OIj5HU1RfVEFHX0RVUkFUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctRU5DT0RFRC1CWTpDQVBTIiB0aXRsZT0iR1NUX1RBR19FTkNPREVEX0JZIj5HU1RfVEFHX0VOQ09ERURfQlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1FTkNPREVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0VOQ09ERVIiPkdTVF9UQUdfRU5DT0RFUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUVOQ09ERVItVkVSU0lPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19FTkNPREVSX1ZFUlNJT04iPkdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZXhpc3RzIiB0aXRsZT0iZ3N0X3RhZ19leGlzdHPCoCgpIj5nc3RfdGFnX2V4aXN0czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUVYVEVOREVELUNPTU1FTlQ6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCI+R1NUX1RBR19FWFRFTkRFRF9DT01NRU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VOUkU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VOUkUiPkdTVF9UQUdfR0VOUkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tQ0FQVFVSRS1ESVJFQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NBUFRVUkVfRElSRUNUSU9OIj5HU1RfVEFHX0dFT19MT0NBVElPTl9DQVBUVVJFX0RJUkVDVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1DSVRZOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZIj5HU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUNPVU5UUlk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlkiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NPVU5UUlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tRUxFVkFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9FTEVWQVRJT04iPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0VMRVZBVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1IT1JJWk9OVEFMLUVSUk9SOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SIj5HU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLUxBVElUVURFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERSI+R1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tTE9OR0lUVURFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREUiPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX0xPTkdJVFVERTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1NT1ZFTUVOVC1ESVJFQ1RJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTiI+R1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctR0VPLUxPQ0FUSU9OLU1PVkVNRU5ULVNQRUVEOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRCI+R1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfU1BFRUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1HRU8tTE9DQVRJT04tTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRSI+R1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdFTy1MT0NBVElPTi1TVUJMT0NBVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19HRU9fTE9DQVRJT05fU1VCTE9DQVRJT04iPkdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LWRlc2NyaXB0aW9uIiB0aXRsZT0iZ3N0X3RhZ19nZXRfZGVzY3JpcHRpb27CoCgpIj5nc3RfdGFnX2dldF9kZXNjcmlwdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWdldC1mbGFnIiB0aXRsZT0iZ3N0X3RhZ19nZXRfZmxhZ8KgKCkiPmdzdF90YWdfZ2V0X2ZsYWc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1nZXQtbmljayIgdGl0bGU9ImdzdF90YWdfZ2V0X25pY2vCoCgpIj5nc3RfdGFnX2dldF9uaWNrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctZ2V0LXR5cGUiIHRpdGxlPSJnc3RfdGFnX2dldF90eXBlwqAoKSI+Z3N0X3RhZ19nZXRfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUdST1VQSU5HOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0dST1VQSU5HIj5HU1RfVEFHX0dST1VQSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSE9NRVBBR0U6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfSE9NRVBBR0UiPkdTVF9UQUdfSE9NRVBBR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JTUFHRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19JTUFHRSI+R1NUX1RBR19JTUFHRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUlNQUdFLU9SSUVOVEFUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OIj5HU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctSU5URVJQUkVURUQtQlk6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfSU5URVJQUkVURURfQlkiPkdTVF9UQUdfSU5URVJQUkVURURfQlk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1JU1JDOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0lTUkMiPkdTVF9UQUdfSVNSQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWlzLWZpeGVkIiB0aXRsZT0iZ3N0X3RhZ19pc19maXhlZMKgKCkiPmdzdF90YWdfaXNfZml4ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1LRVlXT1JEUzpDQVBTIiB0aXRsZT0iR1NUX1RBR19LRVlXT1JEUyI+R1NUX1RBR19LRVlXT1JEUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxBTkdVQUdFLUNPREU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTEFOR1VBR0VfQ09ERSI+R1NUX1RBR19MQU5HVUFHRV9DT0RFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTEFOR1VBR0UtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19MQU5HVUFHRV9OQU1FIj5HU1RfVEFHX0xBTkdVQUdFX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MSUNFTlNFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0xJQ0VOU0UiPkdTVF9UQUdfTElDRU5TRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUxJQ0VOU0UtVVJJOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0xJQ0VOU0VfVVJJIj5HU1RfVEFHX0xJQ0VOU0VfVVJJPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1hZGQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfYWRkwqAoKSI+Z3N0X3RhZ19saXN0X2FkZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbGlzdCIgdGl0bGU9ImdzdF90YWdfbGlzdF9hZGRfdmFsaXN0wqAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWxpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWFkZC12YWxpc3QtdmFsdWVzIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzwqAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1hZGQtdmFsdWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlwqAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWx1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtYWRkLXZhbHVlcyIgdGl0bGU9ImdzdF90YWdfbGlzdF9hZGRfdmFsdWVzwqAoKSI+Z3N0X3RhZ19saXN0X2FkZF92YWx1ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWNvcHkiIHRpdGxlPSJnc3RfdGFnX2xpc3RfY29wecKgKCkiPmdzdF90YWdfbGlzdF9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1jb3B5LXZhbHVlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWXCoCgpIj5nc3RfdGFnX2xpc3RfY29weV92YWx1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZm9yZWFjaCIgdGl0bGU9ImdzdF90YWdfbGlzdF9mb3JlYWNowqAoKSI+Z3N0X3RhZ19saXN0X2ZvcmVhY2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWZyZWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZnJlZSgpIj5nc3RfdGFnX2xpc3RfZnJlZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWJvb2xlYW4iIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW7CoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1ib29sZWFuLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZGF0ZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZGF0ZcKgKCkiPmdzdF90YWdfbGlzdF9nZXRfZGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRhdGUtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kYXRlLXRpbWUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZcKgKCkiPmdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZGF0ZS10aW1lLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZV9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWRvdWJsZSIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfZG91YmxlwqAoKSI+Z3N0X3RhZ19saXN0X2dldF9kb3VibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1kb3VibGUtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfZG91YmxlX2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtZmxvYXQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9mbG9hdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWZsb2F0LWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9mbG9hdF9pbmRleMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfZmxvYXRfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2ludMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfaW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtaW50NjQiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2ludDY0wqAoKSI+Z3N0X3RhZ19saXN0X2dldF9pbnQ2NDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LWludDY0LWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9pbnQ2NF9pbmRleMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1pbnQtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleMKgKCkiPmdzdF90YWdfbGlzdF9nZXRfaW50X2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtcG9pbnRlciIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcsKgKCkiPmdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXBvaW50ZXItaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXJfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXJfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1zYW1wbGUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZcKgKCkiPmdzdF90YWdfbGlzdF9nZXRfc2FtcGxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtc2FtcGxlLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZV9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXNjb3BlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9zY29wZcKgKCkiPmdzdF90YWdfbGlzdF9nZXRfc2NvcGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC1zdHJpbmciIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ8KgKCkiPmdzdF90YWdfbGlzdF9nZXRfc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtc3RyaW5nLWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXjCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXRhZy1zaXplIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZcKgKCkiPmdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91aW50wqAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdWludDY0IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91aW50NjTCoCgpIj5nc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtZ2V0LXVpbnQ2NC1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9nZXRfdWludDY0X2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWdldC11aW50LWluZGV4IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1nZXQtdmFsdWUtaW5kZXgiIHRpdGxlPSJnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4wqAoKSI+Z3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaW5zZXJ0IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2luc2VydMKgKCkiPmdzdF90YWdfbGlzdF9pbnNlcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LWlzLWVtcHR5IiB0aXRsZT0iZ3N0X3RhZ19saXN0X2lzX2VtcHR5wqAoKSI+Z3N0X3RhZ19saXN0X2lzX2VtcHR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1pcy1lcXVhbCIgdGl0bGU9ImdzdF90YWdfbGlzdF9pc19lcXVhbMKgKCkiPmdzdF90YWdfbGlzdF9pc19lcXVhbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfdGFnX2xpc3RfaXNfd3JpdGFibGUoKSI+Z3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1tYWtlLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X21ha2Vfd3JpdGFibGUoKSI+Z3N0X3RhZ19saXN0X21ha2Vfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW1lcmdlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X21lcmdlwqAoKSI+Z3N0X3RhZ19saXN0X21lcmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXciIHRpdGxlPSJnc3RfdGFnX2xpc3RfbmV3wqAoKSI+Z3N0X3RhZ19saXN0X25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbmV3LWVtcHR5IiB0aXRsZT0iZ3N0X3RhZ19saXN0X25ld19lbXB0ecKgKCkiPmdzdF90YWdfbGlzdF9uZXdfZW1wdHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW5ldy1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF90YWdfbGlzdF9uZXdfZnJvbV9zdHJpbmfCoCgpIj5nc3RfdGFnX2xpc3RfbmV3X2Zyb21fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1uZXctdmFsaXN0IiB0aXRsZT0iZ3N0X3RhZ19saXN0X25ld192YWxpc3TCoCgpIj5nc3RfdGFnX2xpc3RfbmV3X3ZhbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtbnRoLXRhZy1uYW1lIiB0aXRsZT0iZ3N0X3RhZ19saXN0X250aF90YWdfbmFtZcKgKCkiPmdzdF90YWdfbGlzdF9udGhfdGFnX25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LW4tdGFncyIgdGl0bGU9ImdzdF90YWdfbGlzdF9uX3RhZ3PCoCgpIj5nc3RfdGFnX2xpc3Rfbl90YWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1wZWVrLXN0cmluZy1pbmRleCIgdGl0bGU9ImdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleMKgKCkiPmdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtcmVmIiB0aXRsZT0iZ3N0X3RhZ19saXN0X3JlZsKgKCkiPmdzdF90YWdfbGlzdF9yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXJlbW92ZS10YWciIHRpdGxlPSJnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZ8KgKCkiPmdzdF90YWdfbGlzdF9yZW1vdmVfdGFnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1zZXQtc2NvcGUiIHRpdGxlPSJnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlwqAoKSI+Z3N0X3RhZ19saXN0X3NldF9zY29wZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLWxpc3QtdG8tc3RyaW5nIiB0aXRsZT0iZ3N0X3RhZ19saXN0X3RvX3N0cmluZ8KgKCkiPmdzdF90YWdfbGlzdF90b19zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1saXN0LXVucmVmIiB0aXRsZT0iZ3N0X3RhZ19saXN0X3VucmVmwqAoKSI+Z3N0X3RhZ19saXN0X3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTE9DQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTE9DQVRJT04iPkdTVF9UQUdfTE9DQVRJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1MWVJJQ1M6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfTFlSSUNTIj5HU1RfVEFHX0xZUklDUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1BWElNVU0tQklUUkFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19NQVhJTVVNX0JJVFJBVEUiPkdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbWVyZ2Utc3RyaW5ncy13aXRoLWNvbW1hIiB0aXRsZT0iZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWHCoCgpIj5nc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNnc3QtdGFnLW1lcmdlLXVzZS1maXJzdCIgdGl0bGU9ImdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0wqAoKSI+Z3N0X3RhZ19tZXJnZV91c2VfZmlyc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1NSURJLUJBU0UtTk9URTpDQVBTIiB0aXRsZT0iR1NUX1RBR19NSURJX0JBU0VfTk9URSI+R1NUX1RBR19NSURJX0JBU0VfTk9URTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1JTklNVU0tQklUUkFURTpDQVBTIiB0aXRsZT0iR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUiPkdTVF9UQUdfTUlOSU1VTV9CSVRSQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTk9NSU5BTC1CSVRSQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX05PTUlOQUxfQklUUkFURSI+R1NUX1RBR19OT01JTkFMX0JJVFJBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1PUkdBTklaQVRJT046Q0FQUyIgdGl0bGU9IkdTVF9UQUdfT1JHQU5JWkFUSU9OIj5HU1RfVEFHX09SR0FOSVpBVElPTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVBFUkZPUk1FUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19QRVJGT1JNRVIiPkdTVF9UQUdfUEVSRk9STUVSPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUFJFVklFVy1JTUFHRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19QUkVWSUVXX0lNQUdFIj5HU1RfVEFHX1BSRVZJRVdfSU1BR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1QUklWQVRFLURBVEE6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfUFJJVkFURV9EQVRBIj5HU1RfVEFHX1BSSVZBVEVfREFUQTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVBVQkxJU0hFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19QVUJMSVNIRVIiPkdTVF9UQUdfUFVCTElTSEVSPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUkVGRVJFTkNFLUxFVkVMOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCI+R1NUX1RBR19SRUZFUkVOQ0VfTEVWRUw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjZ3N0LXRhZy1yZWdpc3RlciIgdGl0bGU9ImdzdF90YWdfcmVnaXN0ZXLCoCgpIj5nc3RfdGFnX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctcmVnaXN0ZXItc3RhdGljIiB0aXRsZT0iZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWPCoCgpIj5nc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNFUklBTDpDQVBTIiB0aXRsZT0iR1NUX1RBR19TRVJJQUwiPkdTVF9UQUdfU0VSSUFMPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZ3MiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnc8KgKCkiPmdzdF90YWdfc2V0dGVyX2FkZF90YWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWxpc3QiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdMKgKCkiPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWxpc3QtdmFsdWVzIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzwqAoKSI+Z3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZSIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWXCoCgpIj5nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItYWRkLXRhZy12YWx1ZXMiIHRpdGxlPSJnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlc8KgKCkiPmdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItZ2V0LXRhZy1saXN0IiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0wqAoKSI+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItZ2V0LXRhZy1tZXJnZS1tb2RlIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlwqAoKSI+Z3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItbWVyZ2UtdGFncyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3PCoCgpIj5nc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItcmVzZXQtdGFncyIgdGl0bGU9ImdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3PCoCgpIj5nc3RfdGFnX3NldHRlcl9yZXNldF90YWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnU2V0dGVyLmh0bWwjZ3N0LXRhZy1zZXR0ZXItc2V0LXRhZy1tZXJnZS1tb2RlIiB0aXRsZT0iZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlwqAoKSI+Z3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIiB0aXRsZT0iR3N0VGFnU2V0dGVyIj5Hc3RUYWdTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1FUElTT0RFLU5VTUJFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSIj5HU1RfVEFHX1NIT1dfRVBJU09ERV9OVU1CRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1TSE9XLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfU0hPV19OQU1FIj5HU1RfVEFHX1NIT1dfTkFNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVNIT1ctU0VBU09OLU5VTUJFUjpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVIiPkdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctU0hPVy1TT1JUTkFNRTpDQVBTIiB0aXRsZT0iR1NUX1RBR19TSE9XX1NPUlROQU1FIj5HU1RfVEFHX1NIT1dfU09SVE5BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1TVUJUSVRMRS1DT0RFQzpDQVBTIiB0aXRsZT0iR1NUX1RBR19TVUJUSVRMRV9DT0RFQyI+R1NUX1RBR19TVUJUSVRMRV9DT0RFQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRJVExFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1RJVExFIj5HU1RfVEFHX1RJVExFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVElUTEUtU09SVE5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVElUTEVfU09SVE5BTUUiPkdTVF9UQUdfVElUTEVfU09SVE5BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1UUkFDSy1DT1VOVDpDQVBTIiB0aXRsZT0iR1NUX1RBR19UUkFDS19DT1VOVCI+R1NUX1RBR19UUkFDS19DT1VOVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLUdBSU46Q0FQUyIgdGl0bGU9IkdTVF9UQUdfVFJBQ0tfR0FJTiI+R1NUX1RBR19UUkFDS19HQUlOPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stTlVNQkVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1RSQUNLX05VTUJFUiI+R1NUX1RBR19UUkFDS19OVU1CRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1UUkFDSy1QRUFLOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1RSQUNLX1BFQUsiPkdTVF9UQUdfVFJBQ0tfUEVBSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVVTRVItUkFUSU5HOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1VTRVJfUkFUSU5HIj5HU1RfVEFHX1VTRVJfUkFUSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVkVSU0lPTjpDQVBTIiB0aXRsZT0iR1NUX1RBR19WRVJTSU9OIj5HU1RfVEFHX1ZFUlNJT048L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1WSURFTy1DT0RFQzpDQVBTIiB0aXRsZT0iR1NUX1RBR19WSURFT19DT0RFQyI+R1NUX1RBR19WSURFT19DT0RFQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiIHRpdGxlPSJHc3RUYWdMaXN0Ij5Hc3RUYWdMaXN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RUYXNrIj5Hc3RUYXNrPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrRnVuY3Rpb24iIHRpdGxlPSJHc3RUYXNrRnVuY3Rpb27CoCgpIj5Hc3RUYXNrRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjR3N0VGFza1Bvb2wtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFza1Bvb2xDbGFzcyI+R3N0VGFza1Bvb2xDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI0dzdFRhc2tQb29sRnVuY3Rpb24iIHRpdGxlPSJHc3RUYXNrUG9vbEZ1bmN0aW9uwqAoKSI+R3N0VGFza1Bvb2xGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+R3N0VGFza1Bvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dzdFRhc2tTdGF0ZSIgdGl0bGU9ImVudW0gR3N0VGFza1N0YXRlIj5Hc3RUYXNrU3RhdGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHc3RUYXNrVGhyZWFkRnVuYyIgdGl0bGU9IkdzdFRhc2tUaHJlYWRGdW5jwqAoKSI+R3N0VGFza1RocmVhZEZ1bmM8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1CUk9BRENBU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UQVNLX0JST0FEQ0FTVCgpIj5HU1RfVEFTS19CUk9BRENBU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stY2xlYW51cC1hbGwiIHRpdGxlPSJnc3RfdGFza19jbGVhbnVwX2FsbMKgKCkiPmdzdF90YXNrX2NsZWFudXBfYWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLUdFVC1DT05EOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19HRVRfQ09ORCgpIj5HU1RfVEFTS19HRVRfQ09ORDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1HRVQtTE9DSzpDQVBTIiB0aXRsZT0iR1NUX1RBU0tfR0VUX0xPQ0soKSI+R1NUX1RBU0tfR0VUX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stZ2V0LXBvb2wiIHRpdGxlPSJnc3RfdGFza19nZXRfcG9vbMKgKCkiPmdzdF90YXNrX2dldF9wb29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLWdldC1zdGF0ZSIgdGl0bGU9ImdzdF90YXNrX2dldF9zdGF0ZcKgKCkiPmdzdF90YXNrX2dldF9zdGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1qb2luIiB0aXRsZT0iZ3N0X3Rhc2tfam9pbsKgKCkiPmdzdF90YXNrX2pvaW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stbmV3IiB0aXRsZT0iZ3N0X3Rhc2tfbmV3wqAoKSI+Z3N0X3Rhc2tfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXBhdXNlIiB0aXRsZT0iZ3N0X3Rhc2tfcGF1c2XCoCgpIj5nc3RfdGFza19wYXVzZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1jbGVhbnVwIiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9jbGVhbnVwwqAoKSI+Z3N0X3Rhc2tfcG9vbF9jbGVhbnVwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+R3N0VGFza1Bvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLWpvaW4iIHRpdGxlPSJnc3RfdGFza19wb29sX2pvaW7CoCgpIj5nc3RfdGFza19wb29sX2pvaW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sI2dzdC10YXNrLXBvb2wtbmV3IiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9uZXfCoCgpIj5nc3RfdGFza19wb29sX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrUG9vbC5odG1sIiB0aXRsZT0iR3N0VGFza1Bvb2wiPkdzdFRhc2tQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwjZ3N0LXRhc2stcG9vbC1wcmVwYXJlIiB0aXRsZT0iZ3N0X3Rhc2tfcG9vbF9wcmVwYXJlwqAoKSI+Z3N0X3Rhc2tfcG9vbF9wcmVwYXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2tQb29sLmh0bWwiIHRpdGxlPSJHc3RUYXNrUG9vbCI+R3N0VGFza1Bvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCNnc3QtdGFzay1wb29sLXB1c2giIHRpdGxlPSJnc3RfdGFza19wb29sX3B1c2jCoCgpIj5nc3RfdGFza19wb29sX3B1c2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFza1Bvb2wuaHRtbCIgdGl0bGU9IkdzdFRhc2tQb29sIj5Hc3RUYXNrUG9vbDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LWVudGVyLWNhbGxiYWNrIiB0aXRsZT0iZ3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrwqAoKSI+Z3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1sZWF2ZS1jYWxsYmFjayIgdGl0bGU9ImdzdF90YXNrX3NldF9sZWF2ZV9jYWxsYmFja8KgKCkiPmdzdF90YXNrX3NldF9sZWF2ZV9jYWxsYmFjazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zZXQtbG9jayIgdGl0bGU9ImdzdF90YXNrX3NldF9sb2NrwqAoKSI+Z3N0X3Rhc2tfc2V0X2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc2V0LXBvb2wiIHRpdGxlPSJnc3RfdGFza19zZXRfcG9vbMKgKCkiPmdzdF90YXNrX3NldF9wb29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI2dzdC10YXNrLXNldC1zdGF0ZSIgdGl0bGU9ImdzdF90YXNrX3NldF9zdGF0ZcKgKCkiPmdzdF90YXNrX3NldF9zdGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNHU1QtVEFTSy1TSUdOQUw6Q0FQUyIgdGl0bGU9IkdTVF9UQVNLX1NJR05BTCgpIj5HU1RfVEFTS19TSUdOQUw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjZ3N0LXRhc2stc3RhcnQiIHRpdGxlPSJnc3RfdGFza19zdGFydMKgKCkiPmdzdF90YXNrX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sI0dTVC1UQVNLLVNUQVRFOkNBUFMiIHRpdGxlPSJHU1RfVEFTS19TVEFURSgpIj5HU1RfVEFTS19TVEFURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwiIHRpdGxlPSJHc3RUYXNrIj5Hc3RUYXNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCNnc3QtdGFzay1zdG9wIiB0aXRsZT0iZ3N0X3Rhc2tfc3RvcMKgKCkiPmdzdF90YXNrX3N0b3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFzay5odG1sIiB0aXRsZT0iR3N0VGFzayI+R3N0VGFzazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUYXNrLmh0bWwjR1NULVRBU0stV0FJVDpDQVBTIiB0aXRsZT0iR1NUX1RBU0tfV0FJVCgpIj5HU1RfVEFTS19XQUlUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhc2suaHRtbCIgdGl0bGU9IkdzdFRhc2siPkdzdFRhc2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiIHRpdGxlPSJzdHJ1Y3QgR3N0VGltZWRWYWx1ZSI+R3N0VGltZWRWYWx1ZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0Q29udHJvbFNvdXJjZSI+R3N0Q29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FU1BFQy1UTy1USU1FOkNBUFMiIHRpdGxlPSJHU1RfVElNRVNQRUNfVE9fVElNRSgpIj5HU1RfVElNRVNQRUNfVE9fVElNRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUVWQUwtVE8tVElNRTpDQVBTIiB0aXRsZT0iR1NUX1RJTUVWQUxfVE9fVElNRSgpIj5HU1RfVElNRVZBTF9UT19USU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BUkdTKCkiPkdTVF9USU1FX0FSR1M8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1BUy1NU0VDT05EUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVNfTVNFQ09ORFMoKSI+R1NUX1RJTUVfQVNfTVNFQ09ORFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLUFTLU5TRUNPTkRTOkNBUFMiIHRpdGxlPSJHU1RfVElNRV9BU19OU0VDT05EUygpIj5HU1RfVElNRV9BU19OU0VDT05EUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULVRJTUUtQVMtU0VDT05EUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVNfU0VDT05EUygpIj5HU1RfVElNRV9BU19TRUNPTkRTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1BUy1VU0VDT05EUzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfQVNfVVNFQ09ORFMoKSI+R1NUX1RJTUVfQVNfVVNFQ09ORFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1USU1FLUZPUk1BVDpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfRk9STUFUIj5HU1RfVElNRV9GT1JNQVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNHU1QtVElNRS1UTy1USU1FU1BFQzpDQVBTIiB0aXRsZT0iR1NUX1RJTUVfVE9fVElNRVNQRUMoKSI+R1NUX1RJTUVfVE9fVElNRVNQRUM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1USU1FLVRPLVRJTUVWQUw6Q0FQUyIgdGl0bGU9IkdTVF9USU1FX1RPX1RJTUVWQUwoKSI+R1NUX1RJTUVfVE9fVElNRVZBTDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI0dzdFRvYy1zdHJ1Y3QiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNHc3RUb2NFbnRyeS1zdHJ1Y3QiIHRpdGxlPSJHc3RUb2NFbnRyeSI+R3N0VG9jRW50cnk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jRW50cnlUeXBlIiB0aXRsZT0iZW51bSBHc3RUb2NFbnRyeVR5cGUiPkdzdFRvY0VudHJ5VHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jTG9vcFR5cGUiIHRpdGxlPSJlbnVtIEdzdFRvY0xvb3BUeXBlIj5Hc3RUb2NMb29wVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jU2NvcGUiIHRpdGxlPSJlbnVtIEdzdFRvY1Njb3BlIj5Hc3RUb2NTY29wZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI0dzdFRvY1NldHRlciIgdGl0bGU9IkdzdFRvY1NldHRlciI+R3N0VG9jU2V0dGVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUb2NTZXR0ZXIiPkdzdFRvY1NldHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwjR3N0VG9jU2V0dGVySW50ZXJmYWNlIiB0aXRsZT0ic3RydWN0IEdzdFRvY1NldHRlckludGVyZmFjZSI+R3N0VG9jU2V0dGVySW50ZXJmYWNlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUb2NTZXR0ZXIiPkdzdFRvY1NldHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWFwcGVuZC1lbnRyeSIgdGl0bGU9ImdzdF90b2NfYXBwZW5kX2VudHJ5wqAoKSI+Z3N0X3RvY19hcHBlbmRfZW50cnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWNvcHkiIHRpdGxlPSJnc3RfdG9jX2NvcHkoKSI+Z3N0X3RvY19jb3B5PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1kdW1wIiB0aXRsZT0iZ3N0X3RvY19kdW1wwqAoKSI+Z3N0X3RvY19kdW1wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1hcHBlbmQtc3ViLWVudHJ5IiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9hcHBlbmRfc3ViX2VudHJ5wqAoKSI+Z3N0X3RvY19lbnRyeV9hcHBlbmRfc3ViX2VudHJ5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1jb3B5IiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9jb3B5KCkiPmdzdF90b2NfZW50cnlfY29weTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LWVudHJ5LXR5cGUiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2dldF9lbnRyeV90eXBlwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfZW50cnlfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LWxvb3AiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2dldF9sb29wwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfbG9vcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXBhcmVudCIgdGl0bGU9ImdzdF90b2NfZW50cnlfZ2V0X3BhcmVudMKgKCkiPmdzdF90b2NfZW50cnlfZ2V0X3BhcmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXN0YXJ0LXN0b3AtdGltZXMiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXN1Yi1lbnRyaWVzIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXPCoCgpIj5nc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXRhZ3MiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2dldF90YWdzwqAoKSI+Z3N0X3RvY19lbnRyeV9nZXRfdGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXRvYyIgdGl0bGU9ImdzdF90b2NfZW50cnlfZ2V0X3RvY8KgKCkiPmdzdF90b2NfZW50cnlfZ2V0X3RvYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktZ2V0LXVpZCIgdGl0bGU9ImdzdF90b2NfZW50cnlfZ2V0X3VpZMKgKCkiPmdzdF90b2NfZW50cnlfZ2V0X3VpZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktaXMtYWx0ZXJuYXRpdmUiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2lzX2FsdGVybmF0aXZlwqAoKSI+Z3N0X3RvY19lbnRyeV9pc19hbHRlcm5hdGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktaXMtc2VxdWVuY2UiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X2lzX3NlcXVlbmNlwqAoKSI+Z3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZW50cnktbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF90b2NfZW50cnlfbWFrZV93cml0YWJsZSgpIj5nc3RfdG9jX2VudHJ5X21ha2Vfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LW1lcmdlLXRhZ3MiIHRpdGxlPSJnc3RfdG9jX2VudHJ5X21lcmdlX3RhZ3PCoCgpIj5nc3RfdG9jX2VudHJ5X21lcmdlX3RhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LW5ldyIgdGl0bGU9ImdzdF90b2NfZW50cnlfbmV3wqAoKSI+Z3N0X3RvY19lbnRyeV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLWVudHJ5LXJlZiIgdGl0bGU9ImdzdF90b2NfZW50cnlfcmVmKCkiPmdzdF90b2NfZW50cnlfcmVmPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1zZXQtbG9vcCIgdGl0bGU9ImdzdF90b2NfZW50cnlfc2V0X2xvb3DCoCgpIj5nc3RfdG9jX2VudHJ5X3NldF9sb29wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1zZXQtc3RhcnQtc3RvcC10aW1lcyIgdGl0bGU9ImdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXPCoCgpIj5nc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wX3RpbWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1zZXQtdGFncyIgdGl0bGU9ImdzdF90b2NfZW50cnlfc2V0X3RhZ3PCoCgpIj5nc3RfdG9jX2VudHJ5X3NldF90YWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS10eXBlLWdldC1uaWNrIiB0aXRsZT0iZ3N0X3RvY19lbnRyeV90eXBlX2dldF9uaWNrwqAoKSI+Z3N0X3RvY19lbnRyeV90eXBlX2dldF9uaWNrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR1NULVRPQy1FTlRSWS1UWVBFLUlTLUFMVEVSTkFUSVZFOkNBUFMiIHRpdGxlPSJHU1RfVE9DX0VOVFJZX1RZUEVfSVNfQUxURVJOQVRJVkUoKSI+R1NUX1RPQ19FTlRSWV9UWVBFX0lTX0FMVEVSTkFUSVZFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR1NULVRPQy1FTlRSWS1UWVBFLUlTLVNFUVVFTkNFOkNBUFMiIHRpdGxlPSJHU1RfVE9DX0VOVFJZX1RZUEVfSVNfU0VRVUVOQ0UoKSI+R1NUX1RPQ19FTlRSWV9UWVBFX0lTX1NFUVVFTkNFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS11bnJlZiIgdGl0bGU9ImdzdF90b2NfZW50cnlfdW5yZWYoKSI+Z3N0X3RvY19lbnRyeV91bnJlZjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZmluZC1lbnRyeSIgdGl0bGU9ImdzdF90b2NfZmluZF9lbnRyecKgKCkiPmdzdF90b2NfZmluZF9lbnRyeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZ2V0LWVudHJpZXMiIHRpdGxlPSJnc3RfdG9jX2dldF9lbnRyaWVzwqAoKSI+Z3N0X3RvY19nZXRfZW50cmllczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZ2V0LXNjb3BlIiB0aXRsZT0iZ3N0X3RvY19nZXRfc2NvcGXCoCgpIj5nc3RfdG9jX2dldF9zY29wZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtZ2V0LXRhZ3MiIHRpdGxlPSJnc3RfdG9jX2dldF90YWdzwqAoKSI+Z3N0X3RvY19nZXRfdGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF90b2NfbWFrZV93cml0YWJsZSgpIj5nc3RfdG9jX21ha2Vfd3JpdGFibGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLW1lcmdlLXRhZ3MiIHRpdGxlPSJnc3RfdG9jX21lcmdlX3RhZ3PCoCgpIj5nc3RfdG9jX21lcmdlX3RhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLW5ldyIgdGl0bGU9ImdzdF90b2NfbmV3wqAoKSI+Z3N0X3RvY19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCNnc3QtdG9jLXJlZiIgdGl0bGU9ImdzdF90b2NfcmVmKCkiPmdzdF90b2NfcmVmPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR1NULVRPQy1SRVBFQVQtQ09VTlQtSU5GSU5JVEU6Q0FQUyIgdGl0bGU9IkdTVF9UT0NfUkVQRUFUX0NPVU5UX0lORklOSVRFIj5HU1RfVE9DX1JFUEVBVF9DT1VOVF9JTkZJTklURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCNnc3QtdG9jLXNldHRlci1nZXQtdG9jIiB0aXRsZT0iZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvY8KgKCkiPmdzdF90b2Nfc2V0dGVyX2dldF90b2M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sIiB0aXRsZT0iR3N0VG9jU2V0dGVyIj5Hc3RUb2NTZXR0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI2dzdC10b2Mtc2V0dGVyLXJlc2V0IiB0aXRsZT0iZ3N0X3RvY19zZXR0ZXJfcmVzZXTCoCgpIj5nc3RfdG9jX3NldHRlcl9yZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwiIHRpdGxlPSJHc3RUb2NTZXR0ZXIiPkdzdFRvY1NldHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwjZ3N0LXRvYy1zZXR0ZXItc2V0LXRvYyIgdGl0bGU9ImdzdF90b2Nfc2V0dGVyX3NldF90b2PCoCgpIj5nc3RfdG9jX3NldHRlcl9zZXRfdG9jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUb2NTZXR0ZXIuaHRtbCIgdGl0bGU9IkdzdFRvY1NldHRlciI+R3N0VG9jU2V0dGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2Mtc2V0LXRhZ3MiIHRpdGxlPSJnc3RfdG9jX3NldF90YWdzwqAoKSI+Z3N0X3RvY19zZXRfdGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sI2dzdC10b2MtdW5yZWYiIHRpdGxlPSJnc3RfdG9jX3VucmVmKCkiPmdzdF90b2NfdW5yZWY8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwiIHRpdGxlPSJHc3RUb2MiPkdzdFRvYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1UUkFDRTpDQVBTIiB0aXRsZT0iR1NUX1RSQUNFKCkiPkdTVF9UUkFDRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlci0tcGFyYW1zIiB0aXRsZT0iVGhlIOKAnHBhcmFtc+KAnSBwcm9wZXJ0eSI+R3N0VHJhY2VyOnBhcmFtczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwjR3N0VHJhY2VyRmFjdG9yeS1zdHJ1Y3QiIHRpdGxlPSJHc3RUcmFjZXJGYWN0b3J5Ij5Hc3RUcmFjZXJGYWN0b3J5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJGYWN0b3J5Ij5Hc3RUcmFjZXJGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tCaW5BZGRQb3N0IiB0aXRsZT0iR3N0VHJhY2VySG9va0JpbkFkZFBvc3TCoCgpIj5Hc3RUcmFjZXJIb29rQmluQWRkUG9zdDwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0JpbkFkZFByZSIgdGl0bGU9IkdzdFRyYWNlckhvb2tCaW5BZGRQcmXCoCgpIj5Hc3RUcmFjZXJIb29rQmluQWRkUHJlPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rQmluUmVtb3ZlUG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQb3N0wqAoKSI+R3N0VHJhY2VySG9va0JpblJlbW92ZVBvc3Q8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tCaW5SZW1vdmVQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rQmluUmVtb3ZlUHJlwqAoKSI+R3N0VHJhY2VySG9va0JpblJlbW92ZVByZTwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnRBZGRQYWQiIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudEFkZFBhZMKgKCkiPkdzdFRyYWNlckhvb2tFbGVtZW50QWRkUGFkPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQb3N0wqAoKSI+R3N0VHJhY2VySG9va0VsZW1lbnRDaGFuZ2VTdGF0ZVBvc3Q8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUHJlwqAoKSI+R3N0VHJhY2VySG9va0VsZW1lbnRDaGFuZ2VTdGF0ZVByZTwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnROZXciIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudE5ld8KgKCkiPkdzdFRyYWNlckhvb2tFbGVtZW50TmV3PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQb3N0wqAoKSI+R3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVBvc3Q8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUHJlwqAoKSI+R3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVByZTwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va0VsZW1lbnRRdWVyeVBvc3QiIHRpdGxlPSJHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdMKgKCkiPkdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQb3N0PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UHJlIiB0aXRsZT0iR3N0VHJhY2VySG9va0VsZW1lbnRRdWVyeVByZcKgKCkiPkdzdFRyYWNlckhvb2tFbGVtZW50UXVlcnlQcmU8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkIiB0aXRsZT0iR3N0VHJhY2VySG9va0VsZW1lbnRSZW1vdmVQYWTCoCgpIj5Hc3RUcmFjZXJIb29rRWxlbWVudFJlbW92ZVBhZDwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZExpbmtQb3N0IiB0aXRsZT0iR3N0VHJhY2VySG9va1BhZExpbmtQb3N0wqAoKSI+R3N0VHJhY2VySG9va1BhZExpbmtQb3N0PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkTGlua1ByZSIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRMaW5rUHJlwqAoKSI+R3N0VHJhY2VySG9va1BhZExpbmtQcmU8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRQdWxsUmFuZ2VQb3N0IiB0aXRsZT0iR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVBvc3TCoCgpIj5Hc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUG9zdDwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVByZSIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRQdWxsUmFuZ2VQcmXCoCgpIj5Hc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUHJlPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQb3N0wqAoKSI+R3N0VHJhY2VySG9va1BhZFB1c2hFdmVudFBvc3Q8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UHJlwqAoKSI+R3N0VHJhY2VySG9va1BhZFB1c2hFdmVudFByZTwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFB1c2hMaXN0UG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFBvc3TCoCgpIj5Hc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQb3N0PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQcmXCoCgpIj5Hc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQcmU8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRQdXNoUG9zdCIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRQdXNoUG9zdMKgKCkiPkdzdFRyYWNlckhvb2tQYWRQdXNoUG9zdDwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFB1c2hQcmUiIHRpdGxlPSJHc3RUcmFjZXJIb29rUGFkUHVzaFByZcKgKCkiPkdzdFRyYWNlckhvb2tQYWRQdXNoUHJlPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkUXVlcnlQb3N0IiB0aXRsZT0iR3N0VHJhY2VySG9va1BhZFF1ZXJ5UG9zdMKgKCkiPkdzdFRyYWNlckhvb2tQYWRRdWVyeVBvc3Q8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sI0dzdFRyYWNlckhvb2tQYWRRdWVyeVByZSIgdGl0bGU9IkdzdFRyYWNlckhvb2tQYWRRdWVyeVByZcKgKCkiPkdzdFRyYWNlckhvb2tQYWRRdWVyeVByZTwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjR3N0VHJhY2VySG9va1BhZFVubGlua1Bvc3QiIHRpdGxlPSJHc3RUcmFjZXJIb29rUGFkVW5saW5rUG9zdMKgKCkiPkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0PC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXIiPkdzdFRyYWNlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCNHc3RUcmFjZXJIb29rUGFkVW5saW5rUHJlIiB0aXRsZT0iR3N0VHJhY2VySG9va1BhZFVubGlua1ByZcKgKCkiPkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQcmU8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXIuaHRtbCIgdGl0bGU9IkdzdFRyYWNlciI+R3N0VHJhY2VyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sI0dzdFRyYWNlclJlY29yZC1zdHJ1Y3QiIHRpdGxlPSJHc3RUcmFjZXJSZWNvcmQiPkdzdFRyYWNlclJlY29yZDwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyUmVjb3JkLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJSZWNvcmQiPkdzdFRyYWNlclJlY29yZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNHc3RUcmFjZXJWYWx1ZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RUcmFjZXJWYWx1ZUZsYWdzIj5Hc3RUcmFjZXJWYWx1ZUZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyUmVjb3JkLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJSZWNvcmQiPkdzdFRyYWNlclJlY29yZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCNHc3RUcmFjZXJWYWx1ZVNjb3BlIiB0aXRsZT0iZW51bSBHc3RUcmFjZXJWYWx1ZVNjb3BlIj5Hc3RUcmFjZXJWYWx1ZVNjb3BlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyUmVjb3JkLmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJSZWNvcmQiPkdzdFRyYWNlclJlY29yZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwjZ3N0LXRyYWNlci1mYWN0b3J5LWdldC1saXN0IiB0aXRsZT0iZ3N0X3RyYWNlcl9mYWN0b3J5X2dldF9saXN0wqAoKSI+Z3N0X3RyYWNlcl9mYWN0b3J5X2dldF9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlckZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFRyYWNlckZhY3RvcnkiPkdzdFRyYWNlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyUmVjb3JkLmh0bWwjZ3N0LXRyYWNlci1yZWNvcmQtbG9nIiB0aXRsZT0iZ3N0X3RyYWNlcl9yZWNvcmRfbG9nwqAoKSI+Z3N0X3RyYWNlcl9yZWNvcmRfbG9nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sIiB0aXRsZT0iR3N0VHJhY2VyUmVjb3JkIj5Hc3RUcmFjZXJSZWNvcmQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyUmVjb3JkLmh0bWwjZ3N0LXRyYWNlci1yZWNvcmQtbmV3IiB0aXRsZT0iZ3N0X3RyYWNlcl9yZWNvcmRfbmV3wqAoKSI+Z3N0X3RyYWNlcl9yZWNvcmRfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sIiB0aXRsZT0iR3N0VHJhY2VyUmVjb3JkIj5Hc3RUcmFjZXJSZWNvcmQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjZ3N0LXRyYWNlci1yZWdpc3RlciIgdGl0bGU9ImdzdF90cmFjZXJfcmVnaXN0ZXLCoCgpIj5nc3RfdHJhY2VyX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVFJBQ0UtT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfVFJBQ0VfT0JKRUNUKCkiPkdTVF9UUkFDRV9PQkpFQ1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyLmh0bWwjZ3N0LXRyYWNpbmctcmVnaXN0ZXItaG9vayIgdGl0bGU9ImdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2vCoCgpIj5nc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlci5odG1sIiB0aXRsZT0iR3N0VHJhY2VyIj5Hc3RUcmFjZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmQiIHRpdGxlPSJzdHJ1Y3QgR3N0VHlwZUZpbmQiPkdzdFR5cGVGaW5kPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNHc3RUeXBlRmluZEZhY3Rvcnktc3RydWN0IiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij5Hc3RUeXBlRmluZEZhY3Rvcnk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRGYWN0b3J5Ij5Hc3RUeXBlRmluZEZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kRnVuY3Rpb27CoCgpIj5Hc3RUeXBlRmluZEZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZCI+R3N0VHlwZUZpbmQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSIgdGl0bGU9ImVudW0gR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSI+R3N0VHlwZUZpbmRQcm9iYWJpbGl0eTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmQiPkdzdFR5cGVGaW5kPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9BUlJBWSI+R1NUX1RZUEVfQVJSQVk8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtQklUTUFTSzpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfQklUTUFTSyI+R1NUX1RZUEVfQklUTUFTSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REYXRlVGltZS5odG1sI0dTVC1UWVBFLURBVEUtVElNRTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfREFURV9USU1FIj5HU1RfVFlQRV9EQVRFX1RJTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGF0ZVRpbWUuaHRtbCIgdGl0bGU9IkdzdERhdGVUaW1lIj5Hc3REYXRlVGltZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1ET1VCTEUtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0RPVUJMRV9SQU5HRSI+R1NUX1RZUEVfRE9VQkxFX1JBTkdFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1jYWxsLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb27CoCgpIj5nc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtY2FwcyIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2Fwc8KgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtZXh0ZW5zaW9ucyIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9uc8KgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9uczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1nZXQtbGlzdCIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdMKgKCkiPmdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFR5cGVGaW5kRmFjdG9yeS5odG1sI2dzdC10eXBlLWZpbmQtZmFjdG9yeS1oYXMtZnVuY3Rpb24iIHRpdGxlPSJnc3RfdHlwZV9maW5kX2ZhY3RvcnlfaGFzX2Z1bmN0aW9uwqAoKSI+Z3N0X3R5cGVfZmluZF9mYWN0b3J5X2hhc19mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUeXBlRmluZEZhY3RvcnkuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kRmFjdG9yeSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtZ2V0LWxlbmd0aCIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfZ2V0X2xlbmd0aMKgKCkiPmdzdF90eXBlX2ZpbmRfZ2V0X2xlbmd0aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXBlZWsiIHRpdGxlPSJnc3RfdHlwZV9maW5kX3BlZWvCoCgpIj5nc3RfdHlwZV9maW5kX3BlZWs8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZCI+R3N0VHlwZUZpbmQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjZ3N0LXR5cGUtZmluZC1yZWdpc3RlciIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfcmVnaXN0ZXLCoCgpIj5nc3RfdHlwZV9maW5kX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmQiPkdzdFR5cGVGaW5kPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI2dzdC10eXBlLWZpbmQtc3VnZ2VzdCIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfc3VnZ2VzdMKgKCkiPmdzdF90eXBlX2ZpbmRfc3VnZ2VzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kIj5Hc3RUeXBlRmluZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNnc3QtdHlwZS1maW5kLXN1Z2dlc3Qtc2ltcGxlIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZcKgKCkiPmdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZCI+R3N0VHlwZUZpbmQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0ZMQUdfU0VUIj5HU1RfVFlQRV9GTEFHX1NFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1GUkFDVElPTjpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfRlJBQ1RJT04iPkdTVF9UWVBFX0ZSQUNUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZSQUNUSU9OLVJBTkdFOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSI+R1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVRZUEUtSU5UNjQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0lOVDY0X1JBTkdFIj5HU1RfVFlQRV9JTlQ2NF9SQU5HRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVFlQRS1JTlQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0lOVF9SQU5HRSI+R1NUX1RZUEVfSU5UX1JBTkdFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUxJU1Q6Q0FQUyIgdGl0bGU9IkdTVF9UWVBFX0xJU1QiPkdTVF9UWVBFX0xJU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhVIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VTwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC11cGRhdGUtcmVnaXN0cnkiIHRpdGxlPSJnc3RfdXBkYXRlX3JlZ2lzdHJ5wqAoKSI+Z3N0X3VwZGF0ZV9yZWdpc3RyeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiIHRpdGxlPSJHc3QiPkdzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjR3N0VXJpIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJRXJyb3IiIHRpdGxlPSJlbnVtIEdzdFVSSUVycm9yIj5Hc3RVUklFcnJvcjwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1zdHJ1Y3QiIHRpdGxlPSJHc3RVUklIYW5kbGVyIj5Hc3RVUklIYW5kbGVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+R3N0VXJpSGFuZGxlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXJJbnRlcmZhY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0VVJJSGFuZGxlckludGVyZmFjZSI+R3N0VVJJSGFuZGxlckludGVyZmFjZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklUeXBlIiB0aXRsZT0iZW51bSBHc3RVUklUeXBlIj5Hc3RVUklUeXBlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktYXBwZW5kLXBhdGgiIHRpdGxlPSJnc3RfdXJpX2FwcGVuZF9wYXRowqAoKSI+Z3N0X3VyaV9hcHBlbmRfcGF0aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1hcHBlbmQtcGF0aC1zZWdtZW50IiB0aXRsZT0iZ3N0X3VyaV9hcHBlbmRfcGF0aF9zZWdtZW50wqAoKSI+Z3N0X3VyaV9hcHBlbmRfcGF0aF9zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNHU1QtVVJJLUNBU1Q6Q0FQUyIgdGl0bGU9IkdTVF9VUklfQ0FTVCgpIj5HU1RfVVJJX0NBU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWNvbnN0cnVjdCIgdGl0bGU9ImdzdF91cmlfY29uc3RydWN0wqAoKSI+Z3N0X3VyaV9jb25zdHJ1Y3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI0dTVC1VUkktQ09OU1QtQ0FTVDpDQVBTIiB0aXRsZT0iR1NUX1VSSV9DT05TVF9DQVNUKCkiPkdTVF9VUklfQ09OU1RfQ0FTVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1jb3B5IiB0aXRsZT0iZ3N0X3VyaV9jb3B5wqAoKSI+Z3N0X3VyaV9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWVxdWFsIiB0aXRsZT0iZ3N0X3VyaV9lcXVhbMKgKCkiPmdzdF91cmlfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWVycm9yLXF1YXJrIiB0aXRsZT0iZ3N0X3VyaV9lcnJvcl9xdWFya8KgKCkiPmdzdF91cmlfZXJyb3JfcXVhcms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfdXJpX2Zyb21fc3RyaW5nwqAoKSI+Z3N0X3VyaV9mcm9tX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1mcm9tLXN0cmluZy13aXRoLWJhc2UiIHRpdGxlPSJnc3RfdXJpX2Zyb21fc3RyaW5nX3dpdGhfYmFzZcKgKCkiPmdzdF91cmlfZnJvbV9zdHJpbmdfd2l0aF9iYXNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1mcmFnbWVudCIgdGl0bGU9ImdzdF91cmlfZ2V0X2ZyYWdtZW50wqAoKSI+Z3N0X3VyaV9nZXRfZnJhZ21lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LWhvc3QiIHRpdGxlPSJnc3RfdXJpX2dldF9ob3N0wqAoKSI+Z3N0X3VyaV9nZXRfaG9zdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI2dzdC11cmktZ2V0LWxvY2F0aW9uIiB0aXRsZT0iZ3N0X3VyaV9nZXRfbG9jYXRpb27CoCgpIj5nc3RfdXJpX2dldF9sb2NhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sIiB0aXRsZT0iR3N0VXJpSGFuZGxlciI+R3N0VXJpSGFuZGxlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtcGF0aCIgdGl0bGU9ImdzdF91cmlfZ2V0X3BhdGjCoCgpIj5nc3RfdXJpX2dldF9wYXRoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1wYXRoLXNlZ21lbnRzIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcGF0aF9zZWdtZW50c8KgKCkiPmdzdF91cmlfZ2V0X3BhdGhfc2VnbWVudHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXBhdGgtc3RyaW5nIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcGF0aF9zdHJpbmfCoCgpIj5nc3RfdXJpX2dldF9wYXRoX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtcG9ydCIgdGl0bGU9ImdzdF91cmlfZ2V0X3BvcnTCoCgpIj5nc3RfdXJpX2dldF9wb3J0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1nZXQtcHJvdG9jb2wiIHRpdGxlPSJnc3RfdXJpX2dldF9wcm90b2NvbMKgKCkiPmdzdF91cmlfZ2V0X3Byb3RvY29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS1rZXlzIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcXVlcnlfa2V5c8KgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X2tleXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXF1ZXJ5LXN0cmluZyIgdGl0bGU9ImdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZ8KgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtcXVlcnktdGFibGUiIHRpdGxlPSJnc3RfdXJpX2dldF9xdWVyeV90YWJsZcKgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X3RhYmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS12YWx1ZSIgdGl0bGU9ImdzdF91cmlfZ2V0X3F1ZXJ5X3ZhbHVlwqAoKSI+Z3N0X3VyaV9nZXRfcXVlcnlfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXNjaGVtZSIgdGl0bGU9ImdzdF91cmlfZ2V0X3NjaGVtZcKgKCkiPmdzdF91cmlfZ2V0X3NjaGVtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtdXNlcmluZm8iIHRpdGxlPSJnc3RfdXJpX2dldF91c2VyaW5mb8KgKCkiPmdzdF91cmlfZ2V0X3VzZXJpbmZvPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLWdldC1wcm90b2NvbHMiIHRpdGxlPSJnc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29sc8KgKCkiPmdzdF91cmlfaGFuZGxlcl9nZXRfcHJvdG9jb2xzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLWdldC11cmkiIHRpdGxlPSJnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyacKgKCkiPmdzdF91cmlfaGFuZGxlcl9nZXRfdXJpPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLWdldC11cmktdHlwZSIgdGl0bGU9ImdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGXCoCgpIj5nc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYW5kbGVyLXNldC11cmkiIHRpdGxlPSJnc3RfdXJpX2hhbmRsZXJfc2V0X3VyacKgKCkiPmdzdF91cmlfaGFuZGxlcl9zZXRfdXJpPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjZ3N0LXVyaS1oYXMtcHJvdG9jb2wiIHRpdGxlPSJnc3RfdXJpX2hhc19wcm90b2NvbMKgKCkiPmdzdF91cmlfaGFzX3Byb3RvY29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwiIHRpdGxlPSJHc3RVcmlIYW5kbGVyIj5Hc3RVcmlIYW5kbGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWlzLW5vcm1hbGl6ZWQiIHRpdGxlPSJnc3RfdXJpX2lzX25vcm1hbGl6ZWTCoCgpIj5nc3RfdXJpX2lzX25vcm1hbGl6ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLWlzLXZhbGlkIiB0aXRsZT0iZ3N0X3VyaV9pc192YWxpZMKgKCkiPmdzdF91cmlfaXNfdmFsaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktaXMtd3JpdGFibGUiIHRpdGxlPSJnc3RfdXJpX2lzX3dyaXRhYmxlwqAoKSI+Z3N0X3VyaV9pc193cml0YWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1qb2luIiB0aXRsZT0iZ3N0X3VyaV9qb2luwqAoKSI+Z3N0X3VyaV9qb2luPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWpvaW4tc3RyaW5ncyIgdGl0bGU9ImdzdF91cmlfam9pbl9zdHJpbmdzwqAoKSI+Z3N0X3VyaV9qb2luX3N0cmluZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktbWFrZS13cml0YWJsZSIgdGl0bGU9ImdzdF91cmlfbWFrZV93cml0YWJsZcKgKCkiPmdzdF91cmlfbWFrZV93cml0YWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1uZXciIHRpdGxlPSJnc3RfdXJpX25ld8KgKCkiPmdzdF91cmlfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLW5ldy13aXRoLWJhc2UiIHRpdGxlPSJnc3RfdXJpX25ld193aXRoX2Jhc2XCoCgpIj5nc3RfdXJpX25ld193aXRoX2Jhc2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktbm9ybWFsaXplIiB0aXRsZT0iZ3N0X3VyaV9ub3JtYWxpemXCoCgpIj5nc3RfdXJpX25vcm1hbGl6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dTVC1VUkktTk8tUE9SVDpDQVBTIiB0aXRsZT0iR1NUX1VSSV9OT19QT1JUIj5HU1RfVVJJX05PX1BPUlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLXByb3RvY29sLWlzLXN1cHBvcnRlZCIgdGl0bGU9ImdzdF91cmlfcHJvdG9jb2xfaXNfc3VwcG9ydGVkwqAoKSI+Z3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNnc3QtdXJpLXByb3RvY29sLWlzLXZhbGlkIiB0aXRsZT0iZ3N0X3VyaV9wcm90b2NvbF9pc192YWxpZMKgKCkiPmdzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktcXVlcnktaGFzLWtleSIgdGl0bGU9ImdzdF91cmlfcXVlcnlfaGFzX2tlecKgKCkiPmdzdF91cmlfcXVlcnlfaGFzX2tleTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1yZWYiIHRpdGxlPSJnc3RfdXJpX3JlZsKgKCkiPmdzdF91cmlfcmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXJlbW92ZS1xdWVyeS1rZXkiIHRpdGxlPSJnc3RfdXJpX3JlbW92ZV9xdWVyeV9rZXnCoCgpIj5nc3RfdXJpX3JlbW92ZV9xdWVyeV9rZXk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LWZyYWdtZW50IiB0aXRsZT0iZ3N0X3VyaV9zZXRfZnJhZ21lbnTCoCgpIj5nc3RfdXJpX3NldF9mcmFnbWVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtaG9zdCIgdGl0bGU9ImdzdF91cmlfc2V0X2hvc3TCoCgpIj5nc3RfdXJpX3NldF9ob3N0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1wYXRoIiB0aXRsZT0iZ3N0X3VyaV9zZXRfcGF0aMKgKCkiPmdzdF91cmlfc2V0X3BhdGg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXBhdGgtc2VnbWVudHMiIHRpdGxlPSJnc3RfdXJpX3NldF9wYXRoX3NlZ21lbnRzwqAoKSI+Z3N0X3VyaV9zZXRfcGF0aF9zZWdtZW50czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtcGF0aC1zdHJpbmciIHRpdGxlPSJnc3RfdXJpX3NldF9wYXRoX3N0cmluZ8KgKCkiPmdzdF91cmlfc2V0X3BhdGhfc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1wb3J0IiB0aXRsZT0iZ3N0X3VyaV9zZXRfcG9ydMKgKCkiPmdzdF91cmlfc2V0X3BvcnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXF1ZXJ5LXN0cmluZyIgdGl0bGU9ImdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZ8KgKCkiPmdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtcXVlcnktdGFibGUiIHRpdGxlPSJnc3RfdXJpX3NldF9xdWVyeV90YWJsZcKgKCkiPmdzdF91cmlfc2V0X3F1ZXJ5X3RhYmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1xdWVyeS12YWx1ZSIgdGl0bGU9ImdzdF91cmlfc2V0X3F1ZXJ5X3ZhbHVlwqAoKSI+Z3N0X3VyaV9zZXRfcXVlcnlfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXNjaGVtZSIgdGl0bGU9ImdzdF91cmlfc2V0X3NjaGVtZcKgKCkiPmdzdF91cmlfc2V0X3NjaGVtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtdXNlcmluZm8iIHRpdGxlPSJnc3RfdXJpX3NldF91c2VyaW5mb8KgKCkiPmdzdF91cmlfc2V0X3VzZXJpbmZvPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXRvLXN0cmluZyIgdGl0bGU9ImdzdF91cmlfdG9fc3RyaW5nwqAoKSI+Z3N0X3VyaV90b19zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHU1QtVVJJLVRZUEUtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9VUklfVFlQRV9JU19WQUxJRCgpIj5HU1RfVVJJX1RZUEVfSVNfVkFMSUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCIgdGl0bGU9IkdzdFVyaUhhbmRsZXIiPkdzdFVyaUhhbmRsZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktdW5yZWYiIHRpdGxlPSJnc3RfdXJpX3VucmVmwqAoKSI+Z3N0X3VyaV91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dTVC1VU0VDT05EOkNBUFMiIHRpdGxlPSJHU1RfVVNFQ09ORCI+R1NUX1VTRUNPTkQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1hcnJheS1iaW5hcnktc2VhcmNoIiB0aXRsZT0iZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaMKgKCkiPmdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZG91YmxlLXRvLWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uwqAoKSI+Z3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWR1bXAtbWVtIiB0aXRsZT0iZ3N0X3V0aWxfZHVtcF9tZW3CoCgpIj5nc3RfdXRpbF9kdW1wX21lbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi1hZGQiIHRpdGxlPSJnc3RfdXRpbF9mcmFjdGlvbl9hZGTCoCgpIj5nc3RfdXRpbF9mcmFjdGlvbl9hZGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZnJhY3Rpb24tY29tcGFyZSIgdGl0bGU9ImdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmXCoCgpIj5nc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWZyYWN0aW9uLW11bHRpcGx5IiB0aXRsZT0iZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHnCoCgpIj5nc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1mcmFjdGlvbi10by1kb3VibGUiIHRpdGxlPSJnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGXCoCgpIj5nc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZ2V0LXRpbWVzdGFtcCIgdGl0bGU9ImdzdF91dGlsX2dldF90aW1lc3RhbXDCoCgpIj5nc3RfdXRpbF9nZXRfdGltZXN0YW1wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLWdyZWF0ZXN0LWNvbW1vbi1kaXZpc29yIiB0aXRsZT0iZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3LCoCgpIj5nc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1ncmVhdGVzdC1jb21tb24tZGl2aXNvci1pbnQ2NCIgdGl0bGU9ImdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yX2ludDY0wqAoKSI+Z3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3JfaW50NjQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtZ3JvdXAtaWQtbmV4dCIgdGl0bGU9ImdzdF91dGlsX2dyb3VwX2lkX25leHTCoCgpIj5nc3RfdXRpbF9ncm91cF9pZF9uZXh0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNlcW51bS1jb21wYXJlIiB0aXRsZT0iZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmXCoCgpIj5nc3RfdXRpbF9zZXFudW1fY29tcGFyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC1zZXFudW0tbmV4dCIgdGl0bGU9ImdzdF91dGlsX3NlcW51bV9uZXh0wqAoKSI+Z3N0X3V0aWxfc2VxbnVtX25leHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtc2V0LW9iamVjdC1hcmciIHRpdGxlPSJnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZ8KgKCkiPmdzdF91dGlsX3NldF9vYmplY3RfYXJnPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXNldC12YWx1ZS1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZ8KgKCkiPmdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGXCoCgpIj5nc3RfdXRpbF91aW50NjRfc2NhbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWNlaWwiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbMKgKCkiPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1pbnQiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50wqAoKSI+Z3N0X3V0aWxfdWludDY0X3NjYWxlX2ludDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNnc3QtdXRpbC11aW50NjQtc2NhbGUtaW50LWNlaWwiIHRpdGxlPSJnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWzCoCgpIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjZ3N0LXV0aWwtdWludDY0LXNjYWxlLWludC1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmTCoCgpIj5nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI2dzdC11dGlsLXVpbnQ2NC1zY2FsZS1yb3VuZCIgdGl0bGU9ImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZMKgKCkiPmdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFYiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5WPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250cm9sU291cmNlLmh0bWwjR3N0VmFsdWVBcnJheSIgdGl0bGU9IkdzdFZhbHVlQXJyYXkiPkdzdFZhbHVlQXJyYXk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdENvbnRyb2xTb3VyY2UiPkdzdENvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVDb21wYXJlRnVuYyIgdGl0bGU9IkdzdFZhbHVlQ29tcGFyZUZ1bmPCoCgpIj5Hc3RWYWx1ZUNvbXBhcmVGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMiIHRpdGxlPSJHc3RWYWx1ZURlc2VyaWFsaXplRnVuY8KgKCkiPkdzdFZhbHVlRGVzZXJpYWxpemVGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVTZXJpYWxpemVGdW5jIiB0aXRsZT0iR3N0VmFsdWVTZXJpYWxpemVGdW5jwqAoKSI+R3N0VmFsdWVTZXJpYWxpemVGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR3N0VmFsdWVUYWJsZSIgdGl0bGU9InN0cnVjdCBHc3RWYWx1ZVRhYmxlIj5Hc3RWYWx1ZVRhYmxlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktYXBwZW5kLWFuZC10YWtlLXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF9hbmRfdGFrZV92YWx1ZcKgKCkiPmdzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LWFwcGVuZC12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWXCoCgpIj5nc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1hcnJheS1nZXQtc2l6ZSIgdGl0bGU9ImdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZcKgKCkiPmdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktZ2V0LXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZcKgKCkiPmdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWFycmF5LXByZXBlbmQtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfYXJyYXlfcHJlcGVuZF92YWx1ZcKgKCkiPmdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4tY29tcGFyZSIgdGl0bGU9ImdzdF92YWx1ZV9jYW5fY29tcGFyZcKgKCkiPmdzdF92YWx1ZV9jYW5fY29tcGFyZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY2FuLWludGVyc2VjdCIgdGl0bGU9ImdzdF92YWx1ZV9jYW5faW50ZXJzZWN0wqAoKSI+Z3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWNhbi1zdWJ0cmFjdCIgdGl0bGU9ImdzdF92YWx1ZV9jYW5fc3VidHJhY3TCoCgpIj5nc3RfdmFsdWVfY2FuX3N1YnRyYWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1jYW4tdW5pb24iIHRpdGxlPSJnc3RfdmFsdWVfY2FuX3VuaW9uwqAoKSI+Z3N0X3ZhbHVlX2Nhbl91bmlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtY29tcGFyZSIgdGl0bGU9ImdzdF92YWx1ZV9jb21wYXJlwqAoKSI+Z3N0X3ZhbHVlX2NvbXBhcmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWRlc2VyaWFsaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplwqAoKSI+Z3N0X3ZhbHVlX2Rlc2VyaWFsaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1FUVVBTDpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0VRVUFMIj5HU1RfVkFMVUVfRVFVQUw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWZpeGF0ZSIgdGl0bGU9ImdzdF92YWx1ZV9maXhhdGXCoCgpIj5nc3RfdmFsdWVfZml4YXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1mcmFjdGlvbi1tdWx0aXBseSIgdGl0bGU9ImdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBsecKgKCkiPmdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBseTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZnJhY3Rpb24tc3VidHJhY3QiIHRpdGxlPSJnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3TCoCgpIj5nc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1iaXRtYXNrIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9iaXRtYXNrwqAoKSI+Z3N0X3ZhbHVlX2dldF9iaXRtYXNrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtYnVmZmVyIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9idWZmZXIoKSI+Z3N0X3ZhbHVlX2dldF9idWZmZXI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1jYXBzIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9jYXBzwqAoKSI+Z3N0X3ZhbHVlX2dldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtY2Fwcy1mZWF0dXJlcyIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfY2Fwc19mZWF0dXJlc8KgKCkiPmdzdF92YWx1ZV9nZXRfY2Fwc19mZWF0dXJlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWRvdWJsZS1yYW5nZS1tYXgiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXjCoCgpIj5nc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1kb3VibGUtcmFuZ2UtbWluIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluwqAoKSI+Z3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZmxhZ3NldC1mbGFncyIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFnc8KgKCkiPmdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZsYWdzZXQtbWFzayIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrwqAoKSI+Z3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1kZW5vbWluYXRvciIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3LCoCgpIj5nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZnJhY3Rpb24tbnVtZXJhdG9yIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3LCoCgpIj5nc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZyYWN0aW9uLXJhbmdlLW1heCIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4wqAoKSI+Z3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1mcmFjdGlvbi1yYW5nZS1taW4iIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbsKgKCkiPmdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50NjQtcmFuZ2UtbWF4IiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXjCoCgpIj5nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludDY0LXJhbmdlLW1pbiIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluwqAoKSI+Z3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1pbnQ2NC1yYW5nZS1zdGVwIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9zdGVwwqAoKSI+Z3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9zdGVwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtaW50LXJhbmdlLW1heCIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heMKgKCkiPmdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWludC1yYW5nZS1taW4iIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW7CoCgpIj5nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1pbnQtcmFuZ2Utc3RlcCIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX3N0ZXDCoCgpIj5nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9zdGVwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtc2FtcGxlIiB0aXRsZT0iZ3N0X3ZhbHVlX2dldF9zYW1wbGUoKSI+Z3N0X3ZhbHVlX2dldF9zYW1wbGU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWdldC1zdHJ1Y3R1cmUiIHRpdGxlPSJnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZcKgKCkiPmdzdF92YWx1ZV9nZXRfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1HUkVBVEVSLVRIQU46Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9HUkVBVEVSX1RIQU4iPkdTVF9WQUxVRV9HUkVBVEVSX1RIQU48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUFSUkFZOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQVJSQVkoKSI+R1NUX1ZBTFVFX0hPTERTX0FSUkFZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1CSVRNQVNLOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQklUTUFTSygpIj5HU1RfVkFMVUVfSE9MRFNfQklUTUFTSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQlVGRkVSOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQlVGRkVSKCkiPkdTVF9WQUxVRV9IT0xEU19CVUZGRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfQ0FQUygpIj5HU1RfVkFMVUVfSE9MRFNfQ0FQUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtQ0FQUy1GRUFUVVJFUzpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0NBUFNfRkVBVFVSRVMoKSI+R1NUX1ZBTFVFX0hPTERTX0NBUFNfRkVBVFVSRVM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLURBVEUtVElNRTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0RBVEVfVElNRSgpIj5HU1RfVkFMVUVfSE9MRFNfREFURV9USU1FPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1ET1VCTEUtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UoKSI+R1NUX1ZBTFVFX0hPTERTX0RPVUJMRV9SQU5HRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtRkxBRy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19GTEFHX1NFVCgpIj5HU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUZSQUNUSU9OOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04oKSI+R1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1GUkFDVElPTi1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFKCkiPkdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtSU5UNjQtUkFOR0U6Q0FQUyIgdGl0bGU9IkdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSgpIj5HU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0U8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUlOVC1SQU5HRTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSgpIj5HU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1WQUxVRS1IT0xEUy1MSVNUOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfTElTVCgpIj5HU1RfVkFMVUVfSE9MRFNfTElTVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtSE9MRFMtU0FNUExFOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfU0FNUExFKCkiPkdTVF9WQUxVRV9IT0xEU19TQU1QTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLVNUUlVDVFVSRTpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSgpIj5HU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pbml0LWFuZC1jb3B5IiB0aXRsZT0iZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHnCoCgpIj5nc3RfdmFsdWVfaW5pdF9hbmRfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtaW50ZXJzZWN0IiB0aXRsZT0iZ3N0X3ZhbHVlX2ludGVyc2VjdMKgKCkiPmdzdF92YWx1ZV9pbnRlcnNlY3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWlzLWZpeGVkIiB0aXRsZT0iZ3N0X3ZhbHVlX2lzX2ZpeGVkwqAoKSI+Z3N0X3ZhbHVlX2lzX2ZpeGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1pcy1zdWJzZXQiIHRpdGxlPSJnc3RfdmFsdWVfaXNfc3Vic2V0wqAoKSI+Z3N0X3ZhbHVlX2lzX3N1YnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNHU1QtVkFMVUUtTEVTUy1USEFOOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfTEVTU19USEFOIj5HU1RfVkFMVUVfTEVTU19USEFOPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWFwcGVuZC1hbmQtdGFrZS12YWx1ZSIgdGl0bGU9ImdzdF92YWx1ZV9saXN0X2FwcGVuZF9hbmRfdGFrZV92YWx1ZcKgKCkiPmdzdF92YWx1ZV9saXN0X2FwcGVuZF9hbmRfdGFrZV92YWx1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1hcHBlbmQtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWXCoCgpIj5nc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtY29uY2F0IiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfY29uY2F0wqAoKSI+Z3N0X3ZhbHVlX2xpc3RfY29uY2F0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWdldC1zaXplIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemXCoCgpIj5nc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtbGlzdC1nZXQtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWXCoCgpIj5nc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtbWVyZ2UiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9tZXJnZcKgKCkiPmdzdF92YWx1ZV9saXN0X21lcmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LXByZXBlbmQtdmFsdWUiIHRpdGxlPSJnc3RfdmFsdWVfbGlzdF9wcmVwZW5kX3ZhbHVlwqAoKSI+Z3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtcmVnaXN0ZXIiIHRpdGxlPSJnc3RfdmFsdWVfcmVnaXN0ZXLCoCgpIj5nc3RfdmFsdWVfcmVnaXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNlcmlhbGl6ZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXJpYWxpemXCoCgpIj5nc3RfdmFsdWVfc2VyaWFsaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtYml0bWFzayIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfYml0bWFza8KgKCkiPmdzdF92YWx1ZV9zZXRfYml0bWFzazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfYnVmZmVyKCkiPmdzdF92YWx1ZV9zZXRfYnVmZmVyPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtY2FwcyIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfY2Fwc8KgKCkiPmdzdF92YWx1ZV9zZXRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWNhcHMtZmVhdHVyZXMiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2NhcHNfZmVhdHVyZXPCoCgpIj5nc3RfdmFsdWVfc2V0X2NhcHNfZmVhdHVyZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1kb3VibGUtcmFuZ2UiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZcKgKCkiPmdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZmxhZ3NldCIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZmxhZ3NldMKgKCkiPmdzdF92YWx1ZV9zZXRfZmxhZ3NldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWZyYWN0aW9uIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbsKgKCkiPmdzdF92YWx1ZV9zZXRfZnJhY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1mcmFjdGlvbi1yYW5nZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2XCoCgpIj5nc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZnJhY3Rpb24tcmFuZ2UtZnVsbCIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbMKgKCkiPmdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludDY0LXJhbmdlIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZcKgKCkiPmdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1pbnQ2NC1yYW5nZS1zdGVwIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZV9zdGVwwqAoKSI+Z3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZV9zdGVwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtaW50LXJhbmdlIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2XCoCgpIj5nc3RfdmFsdWVfc2V0X2ludF9yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LWludC1yYW5nZS1zdGVwIiB0aXRsZT0iZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcMKgKCkiPmdzdF92YWx1ZV9zZXRfaW50X3JhbmdlX3N0ZXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXNldC1zYW1wbGUiIHRpdGxlPSJnc3RfdmFsdWVfc2V0X3NhbXBsZSgpIj5nc3RfdmFsdWVfc2V0X3NhbXBsZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtc2V0LXN0cnVjdHVyZSIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfc3RydWN0dXJlwqAoKSI+Z3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXN1YnRyYWN0IiB0aXRsZT0iZ3N0X3ZhbHVlX3N1YnRyYWN0wqAoKSI+Z3N0X3ZhbHVlX3N1YnRyYWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS10YWtlLWJ1ZmZlciIgdGl0bGU9ImdzdF92YWx1ZV90YWtlX2J1ZmZlcigpIj5nc3RfdmFsdWVfdGFrZV9idWZmZXI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLXRha2Utc2FtcGxlIiB0aXRsZT0iZ3N0X3ZhbHVlX3Rha2Vfc2FtcGxlKCkiPmdzdF92YWx1ZV90YWtlX3NhbXBsZTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtdW5pb24iIHRpdGxlPSJnc3RfdmFsdWVfdW5pb27CoCgpIj5nc3RfdmFsdWVfdW5pb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLVVOT1JERVJFRDpDQVBTIiB0aXRsZT0iR1NUX1ZBTFVFX1VOT1JERVJFRCI+R1NUX1ZBTFVFX1VOT1JERVJFRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXZlcnNpb24iIHRpdGxlPSJnc3RfdmVyc2lvbsKgKCkiPmdzdF92ZXJzaW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTUFKT1I6Q0FQUyIgdGl0bGU9IkdTVF9WRVJTSU9OX01BSk9SIj5HU1RfVkVSU0lPTl9NQUpPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIiB0aXRsZT0iR3N0VmVyc2lvbiI+R3N0VmVyc2lvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sI0dTVC1WRVJTSU9OLU1JQ1JPOkNBUFMiIHRpdGxlPSJHU1RfVkVSU0lPTl9NSUNSTyI+R1NUX1ZFUlNJT05fTUlDUk88L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCIgdGl0bGU9IkdzdFZlcnNpb24iPkdzdFZlcnNpb248L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZlcnNpb24uaHRtbCNHU1QtVkVSU0lPTi1NSU5PUjpDQVBTIiB0aXRsZT0iR1NUX1ZFUlNJT05fTUlOT1IiPkdTVF9WRVJTSU9OX01JTk9SPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwiIHRpdGxlPSJHc3RWZXJzaW9uIj5Hc3RWZXJzaW9uPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWZXJzaW9uLmh0bWwjR1NULVZFUlNJT04tTkFOTzpDQVBTIiB0aXRsZT0iR1NUX1ZFUlNJT05fTkFOTyI+R1NUX1ZFUlNJT05fTkFOTzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIiB0aXRsZT0iR3N0VmVyc2lvbiI+R3N0VmVyc2lvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LXZlcnNpb24tc3RyaW5nIiB0aXRsZT0iZ3N0X3ZlcnNpb25fc3RyaW5nwqAoKSI+Z3N0X3ZlcnNpb25fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+R3N0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4VyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlc8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVdBUk5JTkc6Q0FQUyIgdGl0bGU9IkdTVF9XQVJOSU5HKCkiPkdTVF9XQVJOSU5HPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVdBUk5JTkctT0JKRUNUOkNBUFMiIHRpdGxlPSJHU1RfV0FSTklOR19PQkpFQ1QoKSI+R1NUX1dBUk5JTkdfT0JKRUNUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1ET1VCTEUtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9ET1VCTEVfQkXCoCgpIj5HU1RfV1JJVEVfRE9VQkxFX0JFPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1ET1VCTEUtTEU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9ET1VCTEVfTEXCoCgpIj5HU1RfV1JJVEVfRE9VQkxFX0xFPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1GTE9BVC1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX0ZMT0FUX0JFwqAoKSI+R1NUX1dSSVRFX0ZMT0FUX0JFPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1GTE9BVC1MRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX0ZMT0FUX0xFwqAoKSI+R1NUX1dSSVRFX0ZMT0FUX0xFPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMTYtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UMTZfQkUoKSI+R1NUX1dSSVRFX1VJTlQxNl9CRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDE2LUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDE2X0xFKCkiPkdTVF9XUklURV9VSU5UMTZfTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQyNC1CRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQyNF9CRSgpIj5HU1RfV1JJVEVfVUlOVDI0X0JFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UMjQtTEU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UMjRfTEUoKSI+R1NUX1dSSVRFX1VJTlQyNF9MRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDMyLUJFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDMyX0JFKCkiPkdTVF9XUklURV9VSU5UMzJfQkU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQzMi1MRTpDQVBTIiB0aXRsZT0iR1NUX1dSSVRFX1VJTlQzMl9MRSgpIj5HU1RfV1JJVEVfVUlOVDMyX0xFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1XUklURS1VSU5UNjQtQkU6Q0FQUyIgdGl0bGU9IkdTVF9XUklURV9VSU5UNjRfQkUoKSI+R1NUX1dSSVRFX1VJTlQ2NF9CRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCNHU1QtV1JJVEUtVUlOVDY0LUxFOkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDY0X0xFKCkiPkdTVF9XUklURV9VSU5UNjRfTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwiIHRpdGxlPSJHc3RVdGlscyI+R3N0VXRpbHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVdSSVRFLVVJTlQ4OkNBUFMiIHRpdGxlPSJHU1RfV1JJVEVfVUlOVDgoKSI+R1NUX1dSSVRFX1VJTlQ4PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9peDAyLmh0bWwgYi9kb2NzL2dzdC9odG1sL2l4MDIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM4Y2NmNS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2l4MDIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbmRleCBvZiBkZXByZWNhdGVkIEFQSTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDEuaHRtbCIgdGl0bGU9IkFQSSBJbmRleCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9Iml4MDMuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4xMCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeE0iPk08L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4TyI+TzwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhTIj5TPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFQiPlQ8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwMS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXgwMy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS44Ij48L2E+SW5kZXggb2YgZGVwcmVjYXRlZCBBUEk8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4TSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPk08L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR1NULU1FVEEtVEFHLU1FTU9SWTpDQVBTIiB0aXRsZT0iR1NUX01FVEFfVEFHX01FTU9SWSI+R1NUX01FVEFfVEFHX01FTU9SWTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeE8iPjwvYT48aDMgY2xhc3M9InRpdGxlIj5PPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LWhhcy1hbmNlc3RvciIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FuY2VzdG9ywqAoKSI+Z3N0X29iamVjdF9oYXNfYW5jZXN0b3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0T2JqZWN0Lmh0bWwiIHRpdGxlPSJHc3RPYmplY3QiPkdzdE9iamVjdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFMiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5TPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tcG9zaXRpb24iIHRpdGxlPSJnc3Rfc2VnbWVudF90b19wb3NpdGlvbsKgKCkiPmdzdF9zZWdtZW50X3RvX3Bvc2l0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhUIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI2dzdC10YWctbGlzdC1mcmVlIiB0aXRsZT0iZ3N0X3RhZ19saXN0X2ZyZWUoKSI+Z3N0X3RhZ19saXN0X2ZyZWU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvaXgwMy5odG1sIGIvZG9jcy9nc3QvaHRtbC9peDAzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzN2JiNDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9peDAzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4xMDogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDIuaHRtbCIgdGl0bGU9IkluZGV4IG9mIGRlcHJlY2F0ZWQgQVBJIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXgwNC5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48c3BhbiBpZD0ibmF2X2luZGV4Ij48YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhCIj5CPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEUiPkU8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4TSI+TTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhQIj5QPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFMiPlM8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwMi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXgwNC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS45Ij48L2E+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjEwPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxhIG5hbWU9ImlkeCI+PC9hPjxhIG5hbWU9ImlkeEIiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5CPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZGVlcC1lbGVtZW50LWFkZGVkIiB0aXRsZT0iVGhlIOKAnGRlZXAtZWxlbWVudC1hZGRlZOKAnSBzaWduYWwiPkdzdEJpbjo6ZGVlcC1lbGVtZW50LWFkZGVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCNHc3RCaW4tZGVlcC1lbGVtZW50LXJlbW92ZWQiIHRpdGxlPSJUaGUg4oCcZGVlcC1lbGVtZW50LXJlbW92ZWTigJ0gc2lnbmFsIj5Hc3RCaW46OmRlZXAtZWxlbWVudC1yZW1vdmVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwiIHRpdGxlPSJHc3RCaW4iPkdzdEJpbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWdldC1mbGFncyIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X2ZsYWdzwqAoKSI+Z3N0X2J1ZmZlcl9nZXRfZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXNldC1mbGFncyIgdGl0bGU9ImdzdF9idWZmZXJfc2V0X2ZsYWdzwqAoKSI+Z3N0X2J1ZmZlcl9zZXRfZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVuc2V0LWZsYWdzIiB0aXRsZT0iZ3N0X2J1ZmZlcl91bnNldF9mbGFnc8KgKCkiPmdzdF9idWZmZXJfdW5zZXRfZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEUiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5FPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtYWRkLXByb3BlcnR5LWRlZXAtbm90aWZ5LXdhdGNoIiB0aXRsZT0iZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNowqAoKSI+Z3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFkZC1wcm9wZXJ0eS1ub3RpZnktd2F0Y2giIHRpdGxlPSJnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNowqAoKSI+Z3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1jYWxsLWFzeW5jIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2FsbF9hc3luY8KgKCkiPmdzdF9lbGVtZW50X2NhbGxfYXN5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRVJST1ItV0lUSC1ERVRBSUxTOkNBUFMiIHRpdGxlPSJHU1RfRUxFTUVOVF9FUlJPUl9XSVRIX0RFVEFJTFMoKSI+R1NUX0VMRU1FTlRfRVJST1JfV0lUSF9ERVRBSUxTPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUZMT1ctRVJST1I6Q0FQUyIgdGl0bGU9IkdTVF9FTEVNRU5UX0ZMT1dfRVJST1IoKSI+R1NUX0VMRU1FTlRfRkxPV19FUlJPUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1JTkZPLVdJVEgtREVUQUlMUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfSU5GT19XSVRIX0RFVEFJTFMoKSI+R1NUX0VMRU1FTlRfSU5GT19XSVRIX0RFVEFJTFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbWVzc2FnZS1mdWxsLXdpdGgtZGV0YWlscyIgdGl0bGU9ImdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbF93aXRoX2RldGFpbHPCoCgpIj5nc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlbW92ZS1wcm9wZXJ0eS1ub3RpZnktd2F0Y2giIHRpdGxlPSJnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNowqAoKSI+Z3N0X2VsZW1lbnRfcmVtb3ZlX3Byb3BlcnR5X25vdGlmeV93YXRjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1XQVJOSU5HLVdJVEgtREVUQUlMUzpDQVBTIiB0aXRsZT0iR1NUX0VMRU1FTlRfV0FSTklOR19XSVRIX0RFVEFJTFMoKSI+R1NUX0VMRU1FTlRfV0FSTklOR19XSVRIX0RFVEFJTFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VsZWN0LXN0cmVhbXMiIHRpdGxlPSJnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zwqAoKSI+Z3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1zdHJlYW0tY29sbGVjdGlvbiIgdGl0bGU9ImdzdF9ldmVudF9uZXdfc3RyZWFtX2NvbGxlY3Rpb27CoCgpIj5nc3RfZXZlbnRfbmV3X3N0cmVhbV9jb2xsZWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtbmV3LXN0cmVhbS1ncm91cC1kb25lIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19zdHJlYW1fZ3JvdXBfZG9uZcKgKCkiPmdzdF9ldmVudF9uZXdfc3RyZWFtX2dyb3VwX2RvbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zZWxlY3Qtc3RyZWFtcyIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zZWxlY3Rfc3RyZWFtc8KgKCkiPmdzdF9ldmVudF9wYXJzZV9zZWxlY3Rfc3RyZWFtczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXBhcnNlLXN0cmVhbSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW3CoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc3RyZWFtLWNvbGxlY3Rpb24iIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb27CoCgpIj5nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tZ3JvdXAtZG9uZSIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZcKgKCkiPmdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1zdHJlYW0iIHRpdGxlPSJnc3RfZXZlbnRfc2V0X3N0cmVhbcKgKCkiPmdzdF9ldmVudF9zZXRfc3RyZWFtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhNIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TTwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWFkZC1yZWRpcmVjdC1lbnRyeSIgdGl0bGU9ImdzdF9tZXNzYWdlX2FkZF9yZWRpcmVjdF9lbnRyecKgKCkiPmdzdF9tZXNzYWdlX2FkZF9yZWRpcmVjdF9lbnRyeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1nZXQtbnVtLXJlZGlyZWN0LWVudHJpZXMiIHRpdGxlPSJnc3RfbWVzc2FnZV9nZXRfbnVtX3JlZGlyZWN0X2VudHJpZXPCoCgpIj5nc3RfbWVzc2FnZV9nZXRfbnVtX3JlZGlyZWN0X2VudHJpZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWVycm9yLXdpdGgtZGV0YWlscyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19lcnJvcl93aXRoX2RldGFpbHPCoCgpIj5nc3RfbWVzc2FnZV9uZXdfZXJyb3Jfd2l0aF9kZXRhaWxzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1pbmZvLXdpdGgtZGV0YWlscyIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19pbmZvX3dpdGhfZGV0YWlsc8KgKCkiPmdzdF9tZXNzYWdlX25ld19pbmZvX3dpdGhfZGV0YWlsczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcHJvcGVydHktbm90aWZ5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3Byb3BlcnR5X25vdGlmecKgKCkiPmdzdF9tZXNzYWdlX25ld19wcm9wZXJ0eV9ub3RpZnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXJlZGlyZWN0IiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3JlZGlyZWN0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3JlZGlyZWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1zdHJlYW1zLXNlbGVjdGVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbXNfc2VsZWN0ZWTCoCgpIj5nc3RfbWVzc2FnZV9uZXdfc3RyZWFtc19zZWxlY3RlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RyZWFtLWNvbGxlY3Rpb24iIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb27CoCgpIj5nc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LXdhcm5pbmctd2l0aC1kZXRhaWxzIiB0aXRsZT0iZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmdfd2l0aF9kZXRhaWxzwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X3dhcm5pbmdfd2l0aF9kZXRhaWxzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWVycm9yLWRldGFpbHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcl9kZXRhaWxzwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3JfZGV0YWlsczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1pbmZvLWRldGFpbHMiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9pbmZvX2RldGFpbHPCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9pbmZvX2RldGFpbHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvcGVydHktbm90aWZ5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5wqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXJlZGlyZWN0LWVudHJ5IiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfcmVkaXJlY3RfZW50cnnCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9yZWRpcmVjdF9lbnRyeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1zdHJlYW1zLXNlbGVjdGVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3RlZMKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbXNfc2VsZWN0ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2Utc3RyZWFtLWNvbGxlY3Rpb24iIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbsKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLXdhcm5pbmctZGV0YWlscyIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmdfZGV0YWlsc8KgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmdfZGV0YWlsczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zdHJlYW1zLXNlbGVjdGVkLWFkZCIgdGl0bGU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfYWRkwqAoKSI+Z3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9hZGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2Utc3RyZWFtcy1zZWxlY3RlZC1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemXCoCgpIj5nc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXN0cmVhbXMtc2VsZWN0ZWQtZ2V0LXN0cmVhbSIgdGl0bGU9ImdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbcKgKCkiPmdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4UCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlA8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtZ2V0LXN0cmVhbSIgdGl0bGU9ImdzdF9wYWRfZ2V0X3N0cmVhbcKgKCkiPmdzdF9wYWRfZ2V0X3N0cmVhbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluay1tYXliZS1naG9zdGluZyIgdGl0bGU9ImdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZ8KgKCkiPmdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI2dzdC1wYWQtbGluay1tYXliZS1naG9zdGluZy1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGzCoCgpIj5nc3RfcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmdfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCIgdGl0bGU9IkdzdFBhZCI+R3N0UGFkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4UyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlM8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwjR3N0U3RyZWFtQ29sbGVjdGlvbiIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1Db2xsZWN0aW9uIj5Hc3RTdHJlYW1Db2xsZWN0aW9uPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29sbGVjdGlvbiI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1hZGQtc3RyZWFtIiB0aXRsZT0iZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW3CoCgpIj5nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29sbGVjdGlvbiI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZcKgKCkiPmdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29sbGVjdGlvbiI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtc3RyZWFtIiB0aXRsZT0iZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW3CoCgpIj5nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29sbGVjdGlvbiI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1nZXQtdXBzdHJlYW0taWQiIHRpdGxlPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Vwc3RyZWFtX2lkwqAoKSI+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF91cHN0cmVhbV9pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29sbGVjdGlvbiI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sI2dzdC1zdHJlYW0tY29sbGVjdGlvbi1uZXciIHRpdGxlPSJnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3wqAoKSI+Z3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29sbGVjdGlvbiI+R3N0U3RyZWFtQ29sbGVjdGlvbjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1nZXQtY2FwcyIgdGl0bGU9ImdzdF9zdHJlYW1fZ2V0X2NhcHPCoCgpIj5nc3Rfc3RyZWFtX2dldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC1zdHJlYW0tZmxhZ3MiIHRpdGxlPSJnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3PCoCgpIj5nc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tZ2V0LXN0cmVhbS1pZCIgdGl0bGU9ImdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZMKgKCkiPmdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW0iPkdzdFN0cmVhbTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1nZXQtc3RyZWFtLXR5cGUiIHRpdGxlPSJnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZcKgKCkiPmdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLWdldC10YWdzIiB0aXRsZT0iZ3N0X3N0cmVhbV9nZXRfdGFnc8KgKCkiPmdzdF9zdHJlYW1fZ2V0X3RhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tbmV3IiB0aXRsZT0iZ3N0X3N0cmVhbV9uZXfCoCgpIj5nc3Rfc3RyZWFtX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW0iPkdzdFN0cmVhbTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1zZXQtY2FwcyIgdGl0bGU9ImdzdF9zdHJlYW1fc2V0X2NhcHPCoCgpIj5nc3Rfc3RyZWFtX3NldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLXNldC1zdHJlYW0tZmxhZ3MiIHRpdGxlPSJnc3Rfc3RyZWFtX3NldF9zdHJlYW1fZmxhZ3PCoCgpIj5nc3Rfc3RyZWFtX3NldF9zdHJlYW1fZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sI2dzdC1zdHJlYW0tc2V0LXN0cmVhbS10eXBlIiB0aXRsZT0iZ3N0X3N0cmVhbV9zZXRfc3RyZWFtX3R5cGXCoCgpIj5nc3Rfc3RyZWFtX3NldF9zdHJlYW1fdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiIHRpdGxlPSJHc3RTdHJlYW0iPkdzdFN0cmVhbTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwjZ3N0LXN0cmVhbS1zZXQtdGFncyIgdGl0bGU9ImdzdF9zdHJlYW1fc2V0X3RhZ3PCoCgpIj5nc3Rfc3RyZWFtX3NldF90YWdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCIgdGl0bGU9IkdzdFN0cmVhbSI+R3N0U3RyZWFtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbCNnc3Qtc3RyZWFtLXR5cGUtZ2V0LW5hbWUiIHRpdGxlPSJnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWXCoCgpIj5nc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFN0cmVhbS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtIj5Hc3RTdHJlYW08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2l4MDQuaHRtbCBiL2RvY3MvZ3N0L2h0bWwvaXgwNC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTM0MWZlLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvaXgwNC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuODogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDMuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4xMCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9Iml4MDUuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS42Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PHNwYW4gaWQ9Im5hdl9pbmRleCI+PGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QiI+QjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhDIj5DPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEUiPkU8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4SSI+STwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhQIj5QPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFMiPlM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4VCI+VDwvYT48L3NwYW4+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJpeDAzLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJpeDA1Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iaW5kZXgiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpZC0xLjEwIj48L2E+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjg8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4QiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkI8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI0dTVC1CVUZGRVItRFRTLU9SLVBUUzpDQVBTIiB0aXRsZT0iR1NUX0JVRkZFUl9EVFNfT1JfUFRTKCkiPkdTVF9CVUZGRVJfRFRTX09SX1BUUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4QyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkM8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXVuYWRqdXN0LXdpdGgtY2FsaWJyYXRpb24iIHRpdGxlPSJnc3RfY2xvY2tfdW5hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbsKgKCkiPmdzdF9jbG9ja191bmFkanVzdF93aXRoX2NhbGlicmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhFIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RTwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLWFkZC1zdGF0aWMtcGFkLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGXCoCgpIj5nc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtY29udGV4dCIgdGl0bGU9ImdzdF9lbGVtZW50X2dldF9jb250ZXh0wqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2NvbnRleHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sIiB0aXRsZT0iR3N0RWxlbWVudCI+R3N0RWxlbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWNvbnRleHRzIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRzwqAoKSI+Z3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCIgdGl0bGU9IkdzdEVsZW1lbnQiPkdzdEVsZW1lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWdldC1jb250ZXh0LXVubG9ja2VkIiB0aXRsZT0iZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRfdW5sb2NrZWTCoCgpIj5nc3RfZWxlbWVudF9nZXRfY29udGV4dF91bmxvY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFbGVtZW50Lmh0bWwiIHRpdGxlPSJHc3RFbGVtZW50Ij5Hc3RFbGVtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4SSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkk8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXByaW50ZiIgdGl0bGU9ImdzdF9pbmZvX3N0cmR1cF9wcmludGbCoCgpIj5nc3RfaW5mb19zdHJkdXBfcHJpbnRmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tc3RyZHVwLXZwcmludGYiIHRpdGxlPSJnc3RfaW5mb19zdHJkdXBfdnByaW50ZsKgKCkiPmdzdF9pbmZvX3N0cmR1cF92cHJpbnRmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjZ3N0LWluZm8tdmFzcHJpbnRmIiB0aXRsZT0iZ3N0X2luZm9fdmFzcHJpbnRmwqAoKSI+Z3N0X2luZm9fdmFzcHJpbnRmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4UCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlA8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb27CoCgpIj5Hc3RQYWRFdmVudEZ1bGxGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjR1NULVBBRC1FVkVOVEZVTExGVU5DOkNBUFMiIHRpdGxlPSJHU1RfUEFEX0VWRU5URlVMTEZVTkMoKSI+R1NUX1BBRF9FVkVOVEZVTExGVU5DPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtZXZlbnQtZnVsbC1mdW5jdGlvbi1mdWxsIiB0aXRsZT0iZ3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbl9mdWxswqAoKSI+Z3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbl9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhTIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+UzwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tcnVubmluZy10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWXCoCgpIj5nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1wb3NpdGlvbi1mcm9tLXJ1bm5pbmctdGltZS1mdWxsIiB0aXRsZT0iZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWVfZnVsbMKgKCkiPmdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtcG9zaXRpb24tZnJvbS1zdHJlYW0tdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWXCoCgpIj5nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LXBvc2l0aW9uLWZyb20tc3RyZWFtLXRpbWUtZnVsbCIgdGl0bGU9ImdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbMKgKCkiPmdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1zdHJlYW0tdGltZSIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lwqAoKSI+Z3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwjZ3N0LXNlZ21lbnQtdG8tc3RyZWFtLXRpbWUtZnVsbCIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lX2Z1bGzCoCgpIj5nc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCIgdGl0bGU9IkdzdFNlZ21lbnQiPkdzdFNlZ21lbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhUIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUFJJVkFURS1EQVRBOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1BSSVZBVEVfREFUQSI+R1NUX1RBR19QUklWQVRFX0RBVEE8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwjR3N0VHJhY2VyRmFjdG9yeS1zdHJ1Y3QiIHRpdGxlPSJHc3RUcmFjZXJGYWN0b3J5Ij5Hc3RUcmFjZXJGYWN0b3J5PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3RUcmFjZXJGYWN0b3J5Ij5Hc3RUcmFjZXJGYWN0b3J5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlclJlY29yZC5odG1sI0dzdFRyYWNlclZhbHVlU2NvcGUiIHRpdGxlPSJlbnVtIEdzdFRyYWNlclZhbHVlU2NvcGUiPkdzdFRyYWNlclZhbHVlU2NvcGU8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmFjZXJSZWNvcmQuaHRtbCIgdGl0bGU9IkdzdFRyYWNlclJlY29yZCI+R3N0VHJhY2VyUmVjb3JkPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyYWNlckZhY3RvcnkuaHRtbCNnc3QtdHJhY2VyLWZhY3RvcnktZ2V0LWxpc3QiIHRpdGxlPSJnc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X2xpc3TCoCgpIj5nc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJhY2VyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0VHJhY2VyRmFjdG9yeSI+R3N0VHJhY2VyRmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvaXgwNS5odG1sIGIvZG9jcy9nc3QvaHRtbC9peDA1Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjODcwZDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9peDA1Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MzUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS42OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXgwNC5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpeDA2Lmh0bWwiIHRpdGxlPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuNCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEIiPkI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QyI+QzwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhEIj5EPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEUiPkU8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4RiI+RjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhMIj5MPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeE8iPk88L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4UCI+UDwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhTIj5TPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFQiPlQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4VSI+VTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhWIj5WPC9hPjwvc3Bhbj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48aW1nIHNyYz0idXAtaW5zZW5zaXRpdmUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9Iml4MDQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Iml4MDYuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJpbmRleCI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDEgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImlkLTEuMTEiPjwvYT5JbmRleCBvZiBuZXcgQVBJIGluIDEuNjwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+Ci08YSBuYW1lPSJpZHgiPjwvYT48YSBuYW1lPSJpZHhCIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QjwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmluLmh0bWwjZ3N0LWJpbi1zeW5jLWNoaWxkcmVuLXN0YXRlcyIgdGl0bGU9ImdzdF9iaW5fc3luY19jaGlsZHJlbl9zdGF0ZXPCoCgpIj5nc3RfYmluX3N5bmNfY2hpbGRyZW5fc3RhdGVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sIiB0aXRsZT0iR3N0QmluIj5Hc3RCaW48L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1hZGQtcGFyZW50LWJ1ZmZlci1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9hZGRfcGFyZW50X2J1ZmZlcl9tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9hZGRfcGFyZW50X2J1ZmZlcl9tZXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwjZ3N0LWJ1ZmZlci1hZGQtcHJvdGVjdGlvbi1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sIiB0aXRsZT0iR3N0UHJvdGVjdGlvbk1ldGEiPkdzdFByb3RlY3Rpb25NZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItY29weS1kZWVwIiB0aXRsZT0iZ3N0X2J1ZmZlcl9jb3B5X2RlZXDCoCgpIj5nc3RfYnVmZmVyX2NvcHlfZGVlcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtY29weS1kZWVwIiB0aXRsZT0iZ3N0X2J1ZmZlcl9saXN0X2NvcHlfZGVlcMKgKCkiPmdzdF9idWZmZXJfbGlzdF9jb3B5X2RlZXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyTGlzdC5odG1sIiB0aXRsZT0iR3N0QnVmZmVyTGlzdCI+R3N0QnVmZmVyTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdXMuaHRtbCNnc3QtYnVzLXJlbW92ZS13YXRjaCIgdGl0bGU9ImdzdF9idXNfcmVtb3ZlX3dhdGNowqAoKSI+Z3N0X2J1c19yZW1vdmVfd2F0Y2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVzLmh0bWwiIHRpdGxlPSJHc3RCdXMiPkdzdEJ1czwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEMiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5DPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjR3N0Q2Fwc0ZvcmVhY2hGdW5jIiB0aXRsZT0iR3N0Q2Fwc0ZvcmVhY2hGdW5jwqAoKSI+R3N0Q2Fwc0ZvcmVhY2hGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZmlsdGVyLWFuZC1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZcKgKCkiPmdzdF9jYXBzX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZvcmVhY2giIHRpdGxlPSJnc3RfY2Fwc19mb3JlYWNowqAoKSI+Z3N0X2NhcHNfZm9yZWFjaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tYXAtaW4tcGxhY2UiIHRpdGxlPSJnc3RfY2Fwc19tYXBfaW5fcGxhY2XCoCgpIj5nc3RfY2Fwc19tYXBfaW5fcGxhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI0dzdENsb2NrLXN5bmNlZCIgdGl0bGU9IlRoZSDigJxzeW5jZWTigJ0gc2lnbmFsIj5Hc3RDbG9jazo6c3luY2VkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1hZGQtb2JzZXJ2YXRpb24tdW5hcHBsaWVkIiB0aXRsZT0iZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbl91bmFwcGxpZWTCoCgpIj5nc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWFkanVzdC13aXRoLWNhbGlicmF0aW9uIiB0aXRsZT0iZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uwqAoKSI+Z3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staXMtc3luY2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX2lzX3N5bmNlZMKgKCkiPmdzdF9jbG9ja19pc19zeW5jZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sI2dzdC1jbG9jay1zZXQtc3luY2VkIiB0aXRsZT0iZ3N0X2Nsb2NrX3NldF9zeW5jZWTCoCgpIj5nc3RfY2xvY2tfc2V0X3N5bmNlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0Q2xvY2siPkdzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwjR1NULUNMT0NLLVNUSU1FLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQoKSI+R1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RDbG9jayI+R3N0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2std2FpdC1mb3Itc3luYyIgdGl0bGU9ImdzdF9jbG9ja193YWl0X2Zvcl9zeW5jwqAoKSI+Z3N0X2Nsb2NrX3dhaXRfZm9yX3N5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdENsb2NrIj5Hc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEQiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5EPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1nZXQtcHJvcGVydGllcyIgdGl0bGU9ImdzdF9kZXZpY2VfZ2V0X3Byb3BlcnRpZXPCoCgpIj5nc3RfZGV2aWNlX2dldF9wcm9wZXJ0aWVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWdldC1wcm92aWRlcnMiIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Byb3ZpZGVyc8KgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfcHJvdmlkZXJzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLWdldC1zaG93LWFsbC1kZXZpY2VzIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzwqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1tb25pdG9yLXNldC1zaG93LWFsbC1kZXZpY2VzIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX3NldF9zaG93X2FsbF9kZXZpY2VzwqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX3NldF9zaG93X2FsbF9kZXZpY2VzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1nZXQtaGlkZGVuLXByb3ZpZGVycyIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2hpZGRlbl9wcm92aWRlcnPCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9oaWRkZW5fcHJvdmlkZXJzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1oaWRlLXByb3ZpZGVyIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9oaWRlX3Byb3ZpZGVywqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9oaWRlX3Byb3ZpZGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci11bmhpZGUtcHJvdmlkZXIiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3VuaGlkZV9wcm92aWRlcsKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfdW5oaWRlX3Byb3ZpZGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4RSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkU8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LW5ldy1wcm90ZWN0aW9uIiB0aXRsZT0iZ3N0X2V2ZW50X25ld19wcm90ZWN0aW9uwqAoKSI+Z3N0X2V2ZW50X25ld19wcm90ZWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtcHJvdGVjdGlvbiIgdGl0bGU9ImdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEYiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5GPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtZmxhZ3NldC1yZWdpc3RlciIgdGl0bGU9ImdzdF9mbGFnc2V0X3JlZ2lzdGVywqAoKSI+Z3N0X2ZsYWdzZXRfcmVnaXN0ZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhMIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtTEVWRUwtTUFYOkNBUFMiIHRpdGxlPSJHU1RfTEVWRUxfTUFYIj5HU1RfTEVWRUxfTUFYPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RJbmZvLmh0bWwiIHRpdGxlPSJHc3RJbmZvIj5Hc3RJbmZvPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4TyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPk88L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtaGFzLWFzLXBhcmVudCIgdGl0bGU9ImdzdF9vYmplY3RfaGFzX2FzX3BhcmVudMKgKCkiPmdzdF9vYmplY3RfaGFzX2FzX3BhcmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RPYmplY3QuaHRtbCIgdGl0bGU9IkdzdE9iamVjdCI+R3N0T2JqZWN0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4UCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlA8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sI0dzdFBhZC0tb2Zmc2V0IiB0aXRsZT0iVGhlIOKAnG9mZnNldOKAnSBwcm9wZXJ0eSI+R3N0UGFkOm9mZnNldDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUlTLUFDQ0VQVC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9JU19BQ0NFUFRfVEVNUExBVEUoKSI+R1NUX1BBRF9JU19BQ0NFUFRfVEVNUExBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVNFVC1BQ0NFUFQtVEVNUExBVEU6Q0FQUyIgdGl0bGU9IkdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSgpIj5HU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELVVOU0VULUFDQ0VQVC1URU1QTEFURTpDQVBTIiB0aXRsZT0iR1NUX1BBRF9VTlNFVF9BQ0NFUFRfVEVNUExBVEUoKSI+R1NUX1BBRF9VTlNFVF9BQ0NFUFRfVEVNUExBVEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNHc3RQYXJlbnRCdWZmZXJNZXRhIiB0aXRsZT0ic3RydWN0IEdzdFBhcmVudEJ1ZmZlck1ldGEiPkdzdFBhcmVudEJ1ZmZlck1ldGE8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sIiB0aXRsZT0iR3N0QnVmZmVyIj5Hc3RCdWZmZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS0tbGF0ZW5jeSIgdGl0bGU9IlRoZSDigJxsYXRlbmN54oCdIHByb3BlcnR5Ij5Hc3RQaXBlbGluZTpsYXRlbmN5PC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1sYXRlbmN5IiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9sYXRlbmN5wqAoKSI+Z3N0X3BpcGVsaW5lX2dldF9sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiIHRpdGxlPSJHc3RQaXBlbGluZSI+R3N0UGlwZWxpbmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCNnc3QtcGlwZWxpbmUtZ2V0LXBpcGVsaW5lLWNsb2NrIiB0aXRsZT0iZ3N0X3BpcGVsaW5lX2dldF9waXBlbGluZV9jbG9ja8KgKCkiPmdzdF9waXBlbGluZV9nZXRfcGlwZWxpbmVfY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGlwZWxpbmUuaHRtbCIgdGl0bGU9IkdzdFBpcGVsaW5lIj5Hc3RQaXBlbGluZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1zZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9waXBlbGluZV9zZXRfbGF0ZW5jecKgKCkiPmdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQaXBlbGluZS5odG1sIiB0aXRsZT0iR3N0UGlwZWxpbmUiPkdzdFBpcGVsaW5lPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFByZXNldC5odG1sI2dzdC1wcmVzZXQtaXMtZWRpdGFibGUiIHRpdGxlPSJnc3RfcHJlc2V0X2lzX2VkaXRhYmxlwqAoKSI+Z3N0X3ByZXNldF9pc19lZGl0YWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQcmVzZXQuaHRtbCIgdGl0bGU9IkdzdFByZXNldCI+R3N0UHJlc2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI0dzdFByb3RlY3Rpb25NZXRhIiB0aXRsZT0ic3RydWN0IEdzdFByb3RlY3Rpb25NZXRhIj5Hc3RQcm90ZWN0aW9uTWV0YTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwiIHRpdGxlPSJHc3RQcm90ZWN0aW9uTWV0YSI+R3N0UHJvdGVjdGlvbk1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwjZ3N0LXByb3RlY3Rpb24tc2VsZWN0LXN5c3RlbSIgdGl0bGU9ImdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW3CoCgpIj5nc3RfcHJvdGVjdGlvbl9zZWxlY3Rfc3lzdGVtPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sIiB0aXRsZT0iR3N0UHJvdGVjdGlvbk1ldGEiPkdzdFByb3RlY3Rpb25NZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RQcm90ZWN0aW9uTWV0YS5odG1sI0dTVC1QUk9URUNUSU9OLVNZU1RFTS1JRC1DQVBTLUZJRUxEOkNBUFMiIHRpdGxlPSJHU1RfUFJPVEVDVElPTl9TWVNURU1fSURfQ0FQU19GSUVMRCI+R1NUX1BST1RFQ1RJT05fU1lTVEVNX0lEX0NBUFNfRklFTEQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwiIHRpdGxlPSJHc3RQcm90ZWN0aW9uTWV0YSI+R3N0UHJvdGVjdGlvbk1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhTIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+UzwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwjZ3N0LXNhbXBsZS1nZXQtYnVmZmVyLWxpc3QiIHRpdGxlPSJnc3Rfc2FtcGxlX2dldF9idWZmZXJfbGlzdMKgKCkiPmdzdF9zYW1wbGVfZ2V0X2J1ZmZlcl9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj5Hc3RTYW1wbGU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwjZ3N0LXNhbXBsZS1zZXQtYnVmZmVyLWxpc3QiIHRpdGxlPSJnc3Rfc2FtcGxlX3NldF9idWZmZXJfbGlzdMKgKCkiPmdzdF9zYW1wbGVfc2V0X2J1ZmZlcl9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNhbXBsZS5odG1sIiB0aXRsZT0iR3N0U2FtcGxlIj5Hc3RTYW1wbGU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sI2dzdC1zZWdtZW50LWlzLWVxdWFsIiB0aXRsZT0iZ3N0X3NlZ21lbnRfaXNfZXF1YWzCoCgpIj5nc3Rfc2VnbWVudF9pc19lcXVhbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTZWdtZW50Lmh0bWwiIHRpdGxlPSJHc3RTZWdtZW50Ij5Hc3RTZWdtZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC10by1ydW5uaW5nLXRpbWUtZnVsbCIgdGl0bGU9ImdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxswqAoKSI+Z3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1TVElNRS1BUkdTOkNBUFMiIHRpdGxlPSJHU1RfU1RJTUVfQVJHUygpIj5HU1RfU1RJTUVfQVJHUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sIiB0aXRsZT0iR3N0SW5mbyI+R3N0SW5mbzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1TVElNRS1GT1JNQVQ6Q0FQUyIgdGl0bGU9IkdTVF9TVElNRV9GT1JNQVQiPkdTVF9TVElNRV9GT1JNQVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1maWx0ZXItYW5kLW1hcC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2XCoCgpIj5nc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sIiB0aXRsZT0iR3N0U3RydWN0dXJlIj5Hc3RTdHJ1Y3R1cmU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtZmxhZ3NldCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ZsYWdzZXTCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF9mbGFnc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4VCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlQ8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI0dTVC1UWVBFLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9GTEFHX1NFVCI+R1NUX1RZUEVfRkxBR19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhVIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VTwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktYXBwZW5kLXBhdGgiIHRpdGxlPSJnc3RfdXJpX2FwcGVuZF9wYXRowqAoKSI+Z3N0X3VyaV9hcHBlbmRfcGF0aDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1hcHBlbmQtcGF0aC1zZWdtZW50IiB0aXRsZT0iZ3N0X3VyaV9hcHBlbmRfcGF0aF9zZWdtZW50wqAoKSI+Z3N0X3VyaV9hcHBlbmRfcGF0aF9zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWVxdWFsIiB0aXRsZT0iZ3N0X3VyaV9lcXVhbMKgKCkiPmdzdF91cmlfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfdXJpX2Zyb21fc3RyaW5nwqAoKSI+Z3N0X3VyaV9mcm9tX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1mcm9tLXN0cmluZy13aXRoLWJhc2UiIHRpdGxlPSJnc3RfdXJpX2Zyb21fc3RyaW5nX3dpdGhfYmFzZcKgKCkiPmdzdF91cmlfZnJvbV9zdHJpbmdfd2l0aF9iYXNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1mcmFnbWVudCIgdGl0bGU9ImdzdF91cmlfZ2V0X2ZyYWdtZW50wqAoKSI+Z3N0X3VyaV9nZXRfZnJhZ21lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LWhvc3QiIHRpdGxlPSJnc3RfdXJpX2dldF9ob3N0wqAoKSI+Z3N0X3VyaV9nZXRfaG9zdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtcGF0aCIgdGl0bGU9ImdzdF91cmlfZ2V0X3BhdGjCoCgpIj5nc3RfdXJpX2dldF9wYXRoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1wYXRoLXNlZ21lbnRzIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcGF0aF9zZWdtZW50c8KgKCkiPmdzdF91cmlfZ2V0X3BhdGhfc2VnbWVudHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXBhdGgtc3RyaW5nIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcGF0aF9zdHJpbmfCoCgpIj5nc3RfdXJpX2dldF9wYXRoX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtcG9ydCIgdGl0bGU9ImdzdF91cmlfZ2V0X3BvcnTCoCgpIj5nc3RfdXJpX2dldF9wb3J0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS1rZXlzIiB0aXRsZT0iZ3N0X3VyaV9nZXRfcXVlcnlfa2V5c8KgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X2tleXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXF1ZXJ5LXN0cmluZyIgdGl0bGU9ImdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZ8KgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1nZXQtcXVlcnktdGFibGUiIHRpdGxlPSJnc3RfdXJpX2dldF9xdWVyeV90YWJsZcKgKCkiPmdzdF91cmlfZ2V0X3F1ZXJ5X3RhYmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWdldC1xdWVyeS12YWx1ZSIgdGl0bGU9ImdzdF91cmlfZ2V0X3F1ZXJ5X3ZhbHVlwqAoKSI+Z3N0X3VyaV9nZXRfcXVlcnlfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktZ2V0LXVzZXJpbmZvIiB0aXRsZT0iZ3N0X3VyaV9nZXRfdXNlcmluZm/CoCgpIj5nc3RfdXJpX2dldF91c2VyaW5mbzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1pcy1ub3JtYWxpemVkIiB0aXRsZT0iZ3N0X3VyaV9pc19ub3JtYWxpemVkwqAoKSI+Z3N0X3VyaV9pc19ub3JtYWxpemVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLWlzLXdyaXRhYmxlIiB0aXRsZT0iZ3N0X3VyaV9pc193cml0YWJsZcKgKCkiPmdzdF91cmlfaXNfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktam9pbiIgdGl0bGU9ImdzdF91cmlfam9pbsKgKCkiPmdzdF91cmlfam9pbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1qb2luLXN0cmluZ3MiIHRpdGxlPSJnc3RfdXJpX2pvaW5fc3RyaW5nc8KgKCkiPmdzdF91cmlfam9pbl9zdHJpbmdzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLW1ha2Utd3JpdGFibGUiIHRpdGxlPSJnc3RfdXJpX21ha2Vfd3JpdGFibGXCoCgpIj5nc3RfdXJpX21ha2Vfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktbmV3IiB0aXRsZT0iZ3N0X3VyaV9uZXfCoCgpIj5nc3RfdXJpX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1uZXctd2l0aC1iYXNlIiB0aXRsZT0iZ3N0X3VyaV9uZXdfd2l0aF9iYXNlwqAoKSI+Z3N0X3VyaV9uZXdfd2l0aF9iYXNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLW5vcm1hbGl6ZSIgdGl0bGU9ImdzdF91cmlfbm9ybWFsaXplwqAoKSI+Z3N0X3VyaV9ub3JtYWxpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktcXVlcnktaGFzLWtleSIgdGl0bGU9ImdzdF91cmlfcXVlcnlfaGFzX2tlecKgKCkiPmdzdF91cmlfcXVlcnlfaGFzX2tleTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1yZW1vdmUtcXVlcnkta2V5IiB0aXRsZT0iZ3N0X3VyaV9yZW1vdmVfcXVlcnlfa2V5wqAoKSI+Z3N0X3VyaV9yZW1vdmVfcXVlcnlfa2V5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1mcmFnbWVudCIgdGl0bGU9ImdzdF91cmlfc2V0X2ZyYWdtZW50wqAoKSI+Z3N0X3VyaV9zZXRfZnJhZ21lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LWhvc3QiIHRpdGxlPSJnc3RfdXJpX3NldF9ob3N0wqAoKSI+Z3N0X3VyaV9zZXRfaG9zdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtcGF0aCIgdGl0bGU9ImdzdF91cmlfc2V0X3BhdGjCoCgpIj5nc3RfdXJpX3NldF9wYXRoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1wYXRoLXNlZ21lbnRzIiB0aXRsZT0iZ3N0X3VyaV9zZXRfcGF0aF9zZWdtZW50c8KgKCkiPmdzdF91cmlfc2V0X3BhdGhfc2VnbWVudHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXBhdGgtc3RyaW5nIiB0aXRsZT0iZ3N0X3VyaV9zZXRfcGF0aF9zdHJpbmfCoCgpIj5nc3RfdXJpX3NldF9wYXRoX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtcG9ydCIgdGl0bGU9ImdzdF91cmlfc2V0X3BvcnTCoCgpIj5nc3RfdXJpX3NldF9wb3J0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1xdWVyeS1zdHJpbmciIHRpdGxlPSJnc3RfdXJpX3NldF9xdWVyeV9zdHJpbmfCoCgpIj5nc3RfdXJpX3NldF9xdWVyeV9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXF1ZXJ5LXRhYmxlIiB0aXRsZT0iZ3N0X3VyaV9zZXRfcXVlcnlfdGFibGXCoCgpIj5nc3RfdXJpX3NldF9xdWVyeV90YWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS1zZXQtcXVlcnktdmFsdWUiIHRpdGxlPSJnc3RfdXJpX3NldF9xdWVyeV92YWx1ZcKgKCkiPmdzdF91cmlfc2V0X3F1ZXJ5X3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCNnc3QtdXJpLXNldC1zY2hlbWUiIHRpdGxlPSJnc3RfdXJpX3NldF9zY2hlbWXCoCgpIj5nc3RfdXJpX3NldF9zY2hlbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sIiB0aXRsZT0iR3N0VXJpIj5Hc3RVcmk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaS5odG1sI2dzdC11cmktc2V0LXVzZXJpbmZvIiB0aXRsZT0iZ3N0X3VyaV9zZXRfdXNlcmluZm/CoCgpIj5nc3RfdXJpX3NldF91c2VyaW5mbzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwiIHRpdGxlPSJHc3RVcmkiPkdzdFVyaTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXJpLmh0bWwjZ3N0LXVyaS10by1zdHJpbmciIHRpdGxlPSJnc3RfdXJpX3RvX3N0cmluZ8KgKCkiPmdzdF91cmlfdG9fc3RyaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCIgdGl0bGU9IkdzdFVyaSI+R3N0VXJpPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4ViI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlY8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1nZXQtZmxhZ3NldC1mbGFncyIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFnc8KgKCkiPmdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtZ2V0LWZsYWdzZXQtbWFzayIgdGl0bGU9ImdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrwqAoKSI+Z3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjR1NULVZBTFVFLUhPTERTLUZMQUctU0VUOkNBUFMiIHRpdGxlPSJHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQoKSI+R1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1zZXQtZmxhZ3NldCIgdGl0bGU9ImdzdF92YWx1ZV9zZXRfZmxhZ3NldMKgKCkiPmdzdF92YWx1ZV9zZXRfZmxhZ3NldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCIgdGl0bGU9IkdzdFZhbHVlIj5Hc3RWYWx1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvaXgwNi5odG1sIGIvZG9jcy9nc3QvaHRtbC9peDA2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExY2U3NjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9peDA2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS40OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXgwNS5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjYiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpeDA3Lmh0bWwiIHRpdGxlPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuMi4zIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PHNwYW4gaWQ9Im5hdl9pbmRleCI+PGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QiI+QjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhEIj5EPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEUiPkU8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4TSI+TTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhQIj5QPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFEiPlE8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4UiI+UjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhTIj5TPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFQiPlQ8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwNS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXgwNy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS4xMiI+PC9hPkluZGV4IG9mIG5ldyBBUEkgaW4gMS40PC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxhIG5hbWU9ImlkeCI+PC9hPjxhIG5hbWU9ImlkeEIiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5CPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLWFsbC1tZW1vcnktd3JpdGFibGUiIHRpdGxlPSJnc3RfYnVmZmVyX2lzX2FsbF9tZW1vcnlfd3JpdGFibGXCoCgpIj5nc3RfYnVmZmVyX2lzX2FsbF9tZW1vcnlfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWlzLW1lbW9yeS1yYW5nZS13cml0YWJsZSIgdGl0bGU9ImdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlwqAoKSI+Z3N0X2J1ZmZlcl9pc19tZW1vcnlfcmFuZ2Vfd3JpdGFibGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwjZ3N0LWJ1ZmZlci1wb29sLWNvbmZpZy12YWxpZGF0ZS1wYXJhbXMiIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3ZhbGlkYXRlX3BhcmFtc8KgKCkiPmdzdF9idWZmZXJfcG9vbF9jb25maWdfdmFsaWRhdGVfcGFyYW1zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlclBvb2wuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclBvb2wiPkdzdEJ1ZmZlclBvb2w8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sI2dzdC1idWZmZXItcG9vbC1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfYnVmZmVyX3Bvb2xfc2V0X2ZsdXNoaW5nwqAoKSI+Z3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXJQb29sLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJQb29sIj5Hc3RCdWZmZXJQb29sPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4RCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkQ8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2UiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlIj5Hc3REZXZpY2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNHc3REZXZpY2VDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VDbGFzcyI+R3N0RGV2aWNlQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VNb25pdG9yLmh0bWwjR3N0RGV2aWNlTW9uaXRvciIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yIj5Hc3REZXZpY2VNb25pdG9yPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI0dzdERldmljZU1vbml0b3JDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3REZXZpY2VNb25pdG9yQ2xhc3MiPkdzdERldmljZU1vbml0b3JDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZU1vbml0b3IuaHRtbCIgdGl0bGU9IkdzdERldmljZU1vbml0b3IiPkdzdERldmljZU1vbml0b3I8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjR3N0RGV2aWNlUHJvdmlkZXIiIHRpdGxlPSJzdHJ1Y3QgR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNHc3REZXZpY2VQcm92aWRlckNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdERldmljZVByb3ZpZGVyQ2xhc3MiPkdzdERldmljZVByb3ZpZGVyQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sI0dzdERldmljZVByb3ZpZGVyRmFjdG9yeS1zdHJ1Y3QiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkuaHRtbCNHc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzcyIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeUNsYXNzIj5Hc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlckZhY3RvcnkiPkdzdERldmljZVByb3ZpZGVyRmFjdG9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1jcmVhdGUtZWxlbWVudCIgdGl0bGU9ImdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnTCoCgpIj5nc3RfZGV2aWNlX2NyZWF0ZV9lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNnc3QtZGV2aWNlLWdldC1jYXBzIiB0aXRsZT0iZ3N0X2RldmljZV9nZXRfY2Fwc8KgKCkiPmdzdF9kZXZpY2VfZ2V0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlIj5Hc3REZXZpY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtZ2V0LWRldmljZS1jbGFzcyIgdGl0bGU9ImdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzc8KgKCkiPmdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwiIHRpdGxlPSJHc3REZXZpY2UiPkdzdERldmljZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwjZ3N0LWRldmljZS1nZXQtZGlzcGxheS1uYW1lIiB0aXRsZT0iZ3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lwqAoKSI+Z3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCIgdGl0bGU9IkdzdERldmljZSI+R3N0RGV2aWNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2UuaHRtbCNnc3QtZGV2aWNlLWhhcy1jbGFzc2VzIiB0aXRsZT0iZ3N0X2RldmljZV9oYXNfY2xhc3Nlc8KgKCkiPmdzdF9kZXZpY2VfaGFzX2NsYXNzZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlIj5Hc3REZXZpY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtaGFzLWNsYXNzZXN2IiB0aXRsZT0iZ3N0X2RldmljZV9oYXNfY2xhc3Nlc3bCoCgpIj5nc3RfZGV2aWNlX2hhc19jbGFzc2VzdjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwiIHRpdGxlPSJHc3REZXZpY2UiPkdzdERldmljZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1hZGQtZmlsdGVyIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXLCoCgpIj5nc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1nZXQtYnVzIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX2dldF9idXPCoCgpIj5nc3RfZGV2aWNlX21vbml0b3JfZ2V0X2J1czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1nZXQtZGV2aWNlcyIgdGl0bGU9ImdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlc8KgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1uZXciIHRpdGxlPSJnc3RfZGV2aWNlX21vbml0b3JfbmV3wqAoKSI+Z3N0X2RldmljZV9tb25pdG9yX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1yZW1vdmUtZmlsdGVyIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX3JlbW92ZV9maWx0ZXLCoCgpIj5nc3RfZGV2aWNlX21vbml0b3JfcmVtb3ZlX2ZpbHRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1zdGFydCIgdGl0bGU9ImdzdF9kZXZpY2VfbW9uaXRvcl9zdGFydMKgKCkiPmdzdF9kZXZpY2VfbW9uaXRvcl9zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sI2dzdC1kZXZpY2UtbW9uaXRvci1zdG9wIiB0aXRsZT0iZ3N0X2RldmljZV9tb25pdG9yX3N0b3DCoCgpIj5nc3RfZGV2aWNlX21vbml0b3Jfc3RvcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlTW9uaXRvci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlTW9uaXRvciI+R3N0RGV2aWNlTW9uaXRvcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLWFkZC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfbWV0YWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1hZGQtc3RhdGljLW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItY2xhc3MtZ2V0LW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGHCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2dldF9tZXRhZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWNsYXNzLXNldC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfbWV0YWRhdGE8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1jbGFzcy1zZXQtc3RhdGljLW1ldGFkYXRhIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZGV2aWNlLWFkZCIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZMKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWRldmljZS1yZW1vdmUiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9yZW1vdmXCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9yZW1vdmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWZpbmQiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZmluZMKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldCIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXTCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1kZXZpY2UtcHJvdmlkZXItdHlwZSIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfZGV2aWNlX3Byb3ZpZGVyX3R5cGXCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2RldmljZV9wcm92aWRlcl90eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1tZXRhZGF0YSIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGHCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X21ldGFkYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWdldC1tZXRhZGF0YS1rZXlzIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWhhcy1jbGFzc2VzIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWhhcy1jbGFzc2VzdiIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3Nlc3bCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaGFzX2NsYXNzZXN2PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Lmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1mYWN0b3J5LWxpc3QtZ2V0LWRldmljZS1wcm92aWRlcnMiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfbGlzdF9nZXRfZGV2aWNlX3Byb3ZpZGVyc8KgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9saXN0X2dldF9kZXZpY2VfcHJvdmlkZXJzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERldmljZVByb3ZpZGVyRmFjdG9yeS5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ij5Hc3REZXZpY2VQcm92aWRlckZhY3Rvcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1nZXQtYnVzIiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItZ2V0LWRldmljZXMiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzwqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9nZXRfZGV2aWNlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLWdldC1mYWN0b3J5IiB0aXRsZT0iZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfZmFjdG9yecKgKCkiPmdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2ZhY3Rvcnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwjZ3N0LWRldmljZS1wcm92aWRlci1yZWdpc3RlciIgdGl0bGU9ImdzdF9kZXZpY2VfcHJvdmlkZXJfcmVnaXN0ZXLCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX3JlZ2lzdGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0RGV2aWNlUHJvdmlkZXIiPkdzdERldmljZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3REZXZpY2VQcm92aWRlci5odG1sI2dzdC1kZXZpY2UtcHJvdmlkZXItc3RhcnQiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0wqAoKSI+Z3N0X2RldmljZV9wcm92aWRlcl9zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdERldmljZVByb3ZpZGVyIj5Hc3REZXZpY2VQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlUHJvdmlkZXIuaHRtbCNnc3QtZGV2aWNlLXByb3ZpZGVyLXN0b3AiIHRpdGxlPSJnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3DCoCgpIj5nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3REZXZpY2VQcm92aWRlciI+R3N0RGV2aWNlUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdERldmljZS5odG1sI2dzdC1kZXZpY2UtcmVjb25maWd1cmUtZWxlbWVudCIgdGl0bGU9ImdzdF9kZXZpY2VfcmVjb25maWd1cmVfZWxlbWVudMKgKCkiPmdzdF9kZXZpY2VfcmVjb25maWd1cmVfZWxlbWVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0RGV2aWNlLmh0bWwiIHRpdGxlPSJHc3REZXZpY2UiPkdzdERldmljZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEUiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5FPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1nZXQtcnVubmluZy10aW1lLW9mZnNldCIgdGl0bGU9ImdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldMKgKCkiPmdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1ydW5uaW5nLXRpbWUtb2Zmc2V0IiB0aXRsZT0iZ3N0X2V2ZW50X3NldF9ydW5uaW5nX3RpbWVfb2Zmc2V0wqAoKSI+Z3N0X2V2ZW50X3NldF9ydW5uaW5nX3RpbWVfb2Zmc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhNIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TTwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1kZXZpY2UtYWRkZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfZGV2aWNlX2FkZGVkwqAoKSI+Z3N0X21lc3NhZ2VfbmV3X2RldmljZV9hZGRlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctZGV2aWNlLXJlbW92ZWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfZGV2aWNlX3JlbW92ZWTCoCgpIj5nc3RfbWVzc2FnZV9uZXdfZGV2aWNlX3JlbW92ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZGV2aWNlLWFkZGVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkwqAoKSI+Z3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWRldmljZS1yZW1vdmVkIiB0aXRsZT0iZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX3JlbW92ZWTCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9kZXZpY2VfcmVtb3ZlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1UWVBFLUlTLUVYVEVOREVEOkNBUFMiIHRpdGxlPSJHU1RfTUVTU0FHRV9UWVBFX0lTX0VYVEVOREVEKCkiPkdTVF9NRVNTQUdFX1RZUEVfSVNfRVhURU5ERUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFAiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5QPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWdldC1sYXN0LWZsb3ctcmV0dXJuIiB0aXRsZT0iZ3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybsKgKCkiPmdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm48L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNHU1QtUEFELUxBU1QtRkxPVy1SRVRVUk46Q0FQUyIgdGl0bGU9IkdTVF9QQURfTEFTVF9GTE9XX1JFVFVSTigpIj5HU1RfUEFEX0xBU1RfRkxPV19SRVRVUk48L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQYWQuaHRtbCNnc3QtcGFkLWxpbmstZ2V0LW5hbWUiIHRpdGxlPSJnc3RfcGFkX2xpbmtfZ2V0X25hbWXCoCgpIj5nc3RfcGFkX2xpbmtfZ2V0X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwiIHRpdGxlPSJHc3RQYWQiPkdzdFBhZDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFEiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5RPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS11cmktcmVkaXJlY3Rpb24tcGVybWFuZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnTCoCgpIj5nc3RfcXVlcnlfcGFyc2VfdXJpX3JlZGlyZWN0aW9uX3Blcm1hbmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC11cmktcmVkaXJlY3Rpb24tcGVybWFuZW50IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50wqAoKSI+Z3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhSIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+UjwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFV0aWxzLmh0bWwjR1NULVJPVU5ELURPV04tMTI4OkNBUFMiIHRpdGxlPSJHU1RfUk9VTkRfRE9XTl8xMjgoKSI+R1NUX1JPVU5EX0RPV05fMTI4PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sIiB0aXRsZT0iR3N0VXRpbHMiPkdzdFV0aWxzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RVdGlscy5odG1sI0dTVC1ST1VORC1VUC0xMjg6Q0FQUyIgdGl0bGU9IkdTVF9ST1VORF9VUF8xMjgoKSI+R1NUX1JPVU5EX1VQXzEyODwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCIgdGl0bGU9IkdzdFV0aWxzIj5Hc3RVdGlsczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFMiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5TPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1pbnQ2NCIgdGl0bGU9ImdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDY0wqAoKSI+Z3N0X3N0cnVjdHVyZV9nZXRfaW50NjQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC11aW50NjQiIHRpdGxlPSJnc3Rfc3RydWN0dXJlX2dldF91aW50NjTCoCgpIj5nc3Rfc3RydWN0dXJlX2dldF91aW50NjQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiIHRpdGxlPSJHc3RTdHJ1Y3R1cmUiPkdzdFN0cnVjdHVyZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sI2dzdC1zeXN0ZW0tY2xvY2stc2V0LWRlZmF1bHQiIHRpdGxlPSJnc3Rfc3lzdGVtX2Nsb2NrX3NldF9kZWZhdWx0wqAoKSI+Z3N0X3N5c3RlbV9jbG9ja19zZXRfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTeXN0ZW1DbG9jay5odG1sIiB0aXRsZT0iR3N0U3lzdGVtQ2xvY2siPkdzdFN5c3RlbUNsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4VCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlQ8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLU1JREktQkFTRS1OT1RFOkNBUFMiIHRpdGxlPSJHU1RfVEFHX01JRElfQkFTRV9OT1RFIj5HU1RfVEFHX01JRElfQkFTRV9OT1RFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR3N0VG9jTG9vcFR5cGUiIHRpdGxlPSJlbnVtIEdzdFRvY0xvb3BUeXBlIj5Hc3RUb2NMb29wVHlwZTwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1nZXQtbG9vcCIgdGl0bGU9ImdzdF90b2NfZW50cnlfZ2V0X2xvb3DCoCgpIj5nc3RfdG9jX2VudHJ5X2dldF9sb29wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjZ3N0LXRvYy1lbnRyeS1zZXQtbG9vcCIgdGl0bGU9ImdzdF90b2NfZW50cnlfc2V0X2xvb3DCoCgpIj5nc3RfdG9jX2VudHJ5X3NldF9sb29wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRvYy5odG1sIiB0aXRsZT0iR3N0VG9jIj5Hc3RUb2M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VG9jLmh0bWwjR1NULVRPQy1SRVBFQVQtQ09VTlQtSU5GSU5JVEU6Q0FQUyIgdGl0bGU9IkdTVF9UT0NfUkVQRUFUX0NPVU5UX0lORklOSVRFIj5HU1RfVE9DX1JFUEVBVF9DT1VOVF9JTkZJTklURTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUb2MuaHRtbCIgdGl0bGU9IkdzdFRvYyI+R3N0VG9jPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9peDA3Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2l4MDcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2YWJmNC4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2l4MDcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMi4zOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXgwNi5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpeDA4Lmh0bWwiIHRpdGxlPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuMiI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFMiPlM8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwNi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXgwOC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS4xMyI+PC9hPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4yLjM8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4UyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlM8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFNlZ21lbnQuaHRtbCNnc3Qtc2VnbWVudC1vZmZzZXQtcnVubmluZy10aW1lIiB0aXRsZT0iZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZcKgKCkiPmdzdF9zZWdtZW50X29mZnNldF9ydW5uaW5nX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2VnbWVudC5odG1sIiB0aXRsZT0iR3N0U2VnbWVudCI+R3N0U2VnbWVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvaXgwOC5odG1sIGIvZG9jcy9nc3QvaHRtbC9peDA4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMmE1ZmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9peDA4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNDkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4yOiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXgwNy5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjIuMyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9Iml4MDkuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjEwIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PHNwYW4gaWQ9Im5hdl9pbmRleCI+PGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QiI+QjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhDIj5DPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEQiPkQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4RSI+RTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhNIj5NPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFAiPlA8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4USI+UTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhTIj5TPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFQiPlQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4ViI+VjwvYT48L3NwYW4+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJpeDA3Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJpeDA5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iaW5kZXgiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpZC0xLjE0Ij48L2E+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjI8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4QiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkI8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItZ2V0LW1heC1tZW1vcnkiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9tYXhfbWVtb3J5wqAoKSI+Z3N0X2J1ZmZlcl9nZXRfbWF4X21lbW9yeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlciI+R3N0QnVmZmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4QyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkM8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1hcHBlbmQtc3RydWN0dXJlLWZ1bGwiIHRpdGxlPSJnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX2Z1bGzCoCgpIj5nc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1hZGQiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19hZGTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19hZGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1hZGQtaWQiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19hZGRfaWTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19hZGRfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1jb250YWlucyIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1jb250YWlucy1pZCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zX2lkwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnNfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1jb3B5IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfY29wecKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1mcmVlIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZcKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2Zyb21fc3RyaW5nwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfZnJvbV9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtbnRoIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtbnRoLWlkIiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGhfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2dldF9zaXplwqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1pcy1hbnkiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19pc19hbnnCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19pc19hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1pcy1lcXVhbCIgdGl0bGU9ImdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFswqAoKSI+Z3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXciIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXfCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctYW55IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2FuecKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX25ld19hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctZW1wdHkiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHnCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctaWQiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19uZXdfaWTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19uZXdfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctaWQtdmFsaXN0IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkX3ZhbGlzdMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZF92YWxpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1uZXctdmFsaXN0IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X3ZhbGlzdMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX25ld192YWxpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1yZW1vdmUiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19yZW1vdmXCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19yZW1vdmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1yZW1vdmUtaWQiIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc19yZW1vdmVfaWTCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc19yZW1vdmVfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy1zZXQtcGFyZW50LXJlZmNvdW50IiB0aXRsZT0iZ3N0X2NhcHNfZmVhdHVyZXNfc2V0X3BhcmVudF9yZWZjb3VudMKgKCkiPmdzdF9jYXBzX2ZlYXR1cmVzX3NldF9wYXJlbnRfcmVmY291bnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzRmVhdHVyZXMuaHRtbCNnc3QtY2Fwcy1mZWF0dXJlcy10by1zdHJpbmciIHRpdGxlPSJnc3RfY2Fwc19mZWF0dXJlc190b19zdHJpbmfCoCgpIj5nc3RfY2Fwc19mZWF0dXJlc190b19zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiIHRpdGxlPSJHc3RDYXBzRmVhdHVyZXMiPkdzdENhcHNGZWF0dXJlczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtZ2V0LWZlYXR1cmVzIiB0aXRsZT0iZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzwqAoKSI+Z3N0X2NhcHNfZ2V0X2ZlYXR1cmVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWlzLXN1YnNldC1zdHJ1Y3R1cmUtZnVsbCIgdGl0bGU9ImdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmVfZnVsbMKgKCkiPmdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmVfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwiIHRpdGxlPSJHc3RDYXBzIj5Hc3RDYXBzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCNnc3QtY2Fwcy1tZXJnZS1zdHJ1Y3R1cmUtZnVsbCIgdGl0bGU9ImdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZV9mdWxswqAoKSI+Z3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q2Fwcy5odG1sIiB0aXRsZT0iR3N0Q2FwcyI+R3N0Q2FwczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDYXBzLmh0bWwjZ3N0LWNhcHMtc2V0LWZlYXR1cmVzIiB0aXRsZT0iZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzwqAoKSI+Z3N0X2NhcHNfc2V0X2ZlYXR1cmVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENhcHMuaHRtbCIgdGl0bGU9IkdzdENhcHMiPkdzdENhcHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LWdldC1jb250ZXh0LXR5cGUiIHRpdGxlPSJnc3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlwqAoKSI+Z3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij5Hc3RDb250ZXh0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1nZXQtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZcKgKCkiPmdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+R3N0Q29udGV4dDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtaGFzLWNvbnRleHQtdHlwZSIgdGl0bGU9ImdzdF9jb250ZXh0X2hhc19jb250ZXh0X3R5cGXCoCgpIj5nc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPkdzdENvbnRleHQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sI2dzdC1jb250ZXh0LWlzLXBlcnNpc3RlbnQiIHRpdGxlPSJnc3RfY29udGV4dF9pc19wZXJzaXN0ZW50wqAoKSI+Z3N0X2NvbnRleHRfaXNfcGVyc2lzdGVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwiIHRpdGxlPSJHc3RDb250ZXh0Ij5Hc3RDb250ZXh0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCNnc3QtY29udGV4dC1uZXciIHRpdGxlPSJnc3RfY29udGV4dF9uZXfCoCgpIj5nc3RfY29udGV4dF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29udGV4dC5odG1sIiB0aXRsZT0iR3N0Q29udGV4dCI+R3N0Q29udGV4dDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb250ZXh0Lmh0bWwjZ3N0LWNvbnRleHQtd3JpdGFibGUtc3RydWN0dXJlIiB0aXRsZT0iZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlwqAoKSI+Z3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbnRleHQuaHRtbCIgdGl0bGU9IkdzdENvbnRleHQiPkdzdENvbnRleHQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhEIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctZ2V0LWNvbG9yLW1vZGUiIHRpdGxlPSJnc3RfZGVidWdfZ2V0X2NvbG9yX21vZGXCoCgpIj5nc3RfZGVidWdfZ2V0X2NvbG9yX21vZGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LWNvbG9yLW1vZGUiIHRpdGxlPSJnc3RfZGVidWdfc2V0X2NvbG9yX21vZGXCoCgpIj5nc3RfZGVidWdfc2V0X2NvbG9yX21vZGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LWNvbG9yLW1vZGUtZnJvbS1zdHJpbmciIHRpdGxlPSJnc3RfZGVidWdfc2V0X2NvbG9yX21vZGVfZnJvbV9zdHJpbmfCoCgpIj5nc3RfZGVidWdfc2V0X2NvbG9yX21vZGVfZnJvbV9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNnc3QtZGVidWctc2V0LXRocmVzaG9sZC1mcm9tLXN0cmluZyIgdGl0bGU9ImdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zyb21fc3RyaW5nwqAoKSI+Z3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZnJvbV9zdHJpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCIgdGl0bGU9IkdzdEluZm8iPkdzdEluZm88L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhFIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RTwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2UtZ3JvdXAtaWQiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWTCoCgpIj5nc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI2dzdC1ldmVudC1wYXJzZS1zdHJlYW0tZmxhZ3MiIHRpdGxlPSJnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2ZsYWdzwqAoKSI+Z3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9mbGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1ncm91cC1pZCIgdGl0bGU9ImdzdF9ldmVudF9zZXRfZ3JvdXBfaWTCoCgpIj5nc3RfZXZlbnRfc2V0X2dyb3VwX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEV2ZW50Lmh0bWwiIHRpdGxlPSJHc3RFdmVudCI+R3N0RXZlbnQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtc2V0LXN0cmVhbS1mbGFncyIgdGl0bGU9ImdzdF9ldmVudF9zZXRfc3RyZWFtX2ZsYWdzwqAoKSI+Z3N0X2V2ZW50X3NldF9zdHJlYW1fZmxhZ3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RXZlbnQuaHRtbCIgdGl0bGU9IkdzdEV2ZW50Ij5Hc3RFdmVudDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeE0iPjwvYT48aDMgY2xhc3M9InRpdGxlIj5NPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLU5PVC1NQVBQQUJMRTpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEUoKSI+R1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNHU1QtTUVNT1JZLUlTLVBIWVNJQ0FMTFktQ09OVElHVU9VUzpDQVBTIiB0aXRsZT0iR1NUX01FTU9SWV9JU19QSFlTSUNBTExZX0NPTlRJR1VPVVMoKSI+R1NUX01FTU9SWV9JU19QSFlTSUNBTExZX0NPTlRJR1VPVVM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZW1vcnkuaHRtbCNnc3QtbWVtb3J5LWlzLXR5cGUiIHRpdGxlPSJnc3RfbWVtb3J5X2lzX3R5cGXCoCgpIj5nc3RfbWVtb3J5X2lzX3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVtb3J5Lmh0bWwiIHRpdGxlPSJHc3RNZW1vcnkiPkdzdE1lbW9yeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtbmV3LWhhdmUtY29udGV4dCIgdGl0bGU9ImdzdF9tZXNzYWdlX25ld19oYXZlX2NvbnRleHTCoCgpIj5nc3RfbWVzc2FnZV9uZXdfaGF2ZV9jb250ZXh0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLW5ldy1uZWVkLWNvbnRleHQiIHRpdGxlPSJnc3RfbWVzc2FnZV9uZXdfbmVlZF9jb250ZXh0wqAoKSI+Z3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1wYXJzZS1jb250ZXh0LXR5cGUiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGXCoCgpIj5nc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtZ3JvdXAtaWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9wYXJzZV9ncm91cF9pZMKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2dyb3VwX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCIgdGl0bGU9IkdzdE1lc3NhZ2UiPkdzdE1lc3NhZ2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLXBhcnNlLWhhdmUtY29udGV4dCIgdGl0bGU9ImdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dMKgKCkiPmdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RNZXNzYWdlLmh0bWwiIHRpdGxlPSJHc3RNZXNzYWdlIj5Hc3RNZXNzYWdlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1zZXQtZ3JvdXAtaWQiIHRpdGxlPSJnc3RfbWVzc2FnZV9zZXRfZ3JvdXBfaWTCoCgpIj5nc3RfbWVzc2FnZV9zZXRfZ3JvdXBfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TWVzc2FnZS5odG1sIiB0aXRsZT0iR3N0TWVzc2FnZSI+R3N0TWVzc2FnZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI2dzdC1tZXRhLWFwaS10eXBlLWdldC10YWdzIiB0aXRsZT0iZ3N0X21ldGFfYXBpX3R5cGVfZ2V0X3RhZ3PCoCgpIj5nc3RfbWV0YV9hcGlfdHlwZV9nZXRfdGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sIiB0aXRsZT0iR3N0TWV0YSI+R3N0TWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLVRBRy1NRU1PUlktU1RSOkNBUFMiIHRpdGxlPSJHU1RfTUVUQV9UQUdfTUVNT1JZX1NUUiI+R1NUX01FVEFfVEFHX01FTU9SWV9TVFI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCIgdGl0bGU9IkdzdE1ldGEiPkdzdE1ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhQIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+UDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtc3RyZWFtLWlkIiB0aXRsZT0iZ3N0X3BhZF9nZXRfc3RyZWFtX2lkwqAoKSI+Z3N0X3BhZF9nZXRfc3RyZWFtX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGFkLmh0bWwjZ3N0LXBhZC1zdG9yZS1zdGlja3ktZXZlbnQiIHRpdGxlPSJnc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudMKgKCkiPmdzdF9wYWRfc3RvcmVfc3RpY2t5X2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBhZC5odG1sIiB0aXRsZT0iR3N0UGFkIj5Hc3RQYWQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UGx1Z2luRmVhdHVyZS5odG1sI2dzdC1wbHVnaW4tZmVhdHVyZS1nZXQtcGx1Z2luLW5hbWUiIHRpdGxlPSJnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lwqAoKSI+Z3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW5fbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW5GZWF0dXJlLmh0bWwiIHRpdGxlPSJHc3RQbHVnaW5GZWF0dXJlIj5Hc3RQbHVnaW5GZWF0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tU1RBVElDLURFQ0xBUkU6Q0FQUyIgdGl0bGU9IkdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkUoKSI+R1NUX1BMVUdJTl9TVEFUSUNfREVDTEFSRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFBsdWdpbi5odG1sI0dTVC1QTFVHSU4tU1RBVElDLVJFR0lTVEVSOkNBUFMiIHRpdGxlPSJHU1RfUExVR0lOX1NUQVRJQ19SRUdJU1RFUigpIj5HU1RfUExVR0lOX1NUQVRJQ19SRUdJU1RFUjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQbHVnaW4uaHRtbCIgdGl0bGU9IkdzdFBsdWdpbiI+R3N0UGx1Z2luPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4USI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlE8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LW5ldy1jb250ZXh0IiB0aXRsZT0iZ3N0X3F1ZXJ5X25ld19jb250ZXh0wqAoKSI+Z3N0X3F1ZXJ5X25ld19jb250ZXh0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcGFyc2UtY29udGV4dCIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV9jb250ZXh0wqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1wYXJzZS1jb250ZXh0LXR5cGUiIHRpdGxlPSJnc3RfcXVlcnlfcGFyc2VfY29udGV4dF90eXBlwqAoKSI+Z3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHRfdHlwZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXBhcnNlLXVyaS1yZWRpcmVjdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb27CoCgpIj5nc3RfcXVlcnlfcGFyc2VfdXJpX3JlZGlyZWN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktcmVtb3ZlLW50aC1hbGxvY2F0aW9uLXBhcmFtIiB0aXRsZT0iZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9wYXJhbcKgKCkiPmdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcGFyYW08L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sI2dzdC1xdWVyeS1yZW1vdmUtbnRoLWFsbG9jYXRpb24tcG9vbCIgdGl0bGU9ImdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcG9vbMKgKCkiPmdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcG9vbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RRdWVyeS5odG1sIiB0aXRsZT0iR3N0UXVlcnkiPkdzdFF1ZXJ5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwjZ3N0LXF1ZXJ5LXNldC1jb250ZXh0IiB0aXRsZT0iZ3N0X3F1ZXJ5X3NldF9jb250ZXh0wqAoKSI+Z3N0X3F1ZXJ5X3NldF9jb250ZXh0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiIHRpdGxlPSJHc3RRdWVyeSI+R3N0UXVlcnk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCNnc3QtcXVlcnktc2V0LXVyaS1yZWRpcmVjdGlvbiIgdGl0bGU9ImdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uwqAoKSI+Z3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UXVlcnkuaHRtbCIgdGl0bGU9IkdzdFF1ZXJ5Ij5Hc3RRdWVyeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFMiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5TPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLWNvcHkiIHRpdGxlPSJnc3Rfc2FtcGxlX2NvcHnCoCgpIj5nc3Rfc2FtcGxlX2NvcHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0U2FtcGxlLmh0bWwiIHRpdGxlPSJHc3RTYW1wbGUiPkdzdFNhbXBsZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sI0dzdFN0cmVhbUZsYWdzIiB0aXRsZT0iZW51bSBHc3RTdHJlYW1GbGFncyI+R3N0U3RyZWFtRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RFdmVudC5odG1sIiB0aXRsZT0iR3N0RXZlbnQiPkdzdEV2ZW50PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtbmV3LWZyb20tc3RyaW5nIiB0aXRsZT0iZ3N0X3N0cnVjdHVyZV9uZXdfZnJvbV9zdHJpbmfCoCgpIj5nc3Rfc3RydWN0dXJlX25ld19mcm9tX3N0cmluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RTdHJ1Y3R1cmUuaHRtbCIgdGl0bGU9IkdzdFN0cnVjdHVyZSI+R3N0U3RydWN0dXJlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4VCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlQ8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLUlOVEVSUFJFVEVELUJZOkNBUFMiIHRpdGxlPSJHU1RfVEFHX0lOVEVSUFJFVEVEX0JZIj5HU1RfVEFHX0lOVEVSUFJFVEVEX0JZPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRhZ0xpc3QuaHRtbCIgdGl0bGU9IkdzdFRhZ0xpc3QiPkdzdFRhZ0xpc3Q8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctUFVCTElTSEVSOkNBUFMiIHRpdGxlPSJHU1RfVEFHX1BVQkxJU0hFUiI+R1NUX1RBR19QVUJMSVNIRVI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGFnTGlzdC5odG1sIiB0aXRsZT0iR3N0VGFnTGlzdCI+R3N0VGFnTGlzdDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFYiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5WPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItR3N0VmFsdWUuaHRtbCNnc3QtdmFsdWUtYXJyYXktYXBwZW5kLWFuZC10YWtlLXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF9hbmRfdGFrZV92YWx1ZcKgKCkiPmdzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwiIHRpdGxlPSJHc3RWYWx1ZSI+R3N0VmFsdWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtYXBwZW5kLWFuZC10YWtlLXZhbHVlIiB0aXRsZT0iZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX2FuZF90YWtlX3ZhbHVlwqAoKSI+Z3N0X3ZhbHVlX2xpc3RfYXBwZW5kX2FuZF90YWtlX3ZhbHVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIiB0aXRsZT0iR3N0VmFsdWUiPkdzdFZhbHVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9peDA5Lmh0bWwgYi9kb2NzL2dzdC9odG1sL2l4MDkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxMmU1MS4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2l4MDkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMC4xMDogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDguaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4yIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXgxMC5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjAuNSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEIiPkI8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwOC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXgxMC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS4xNSI+PC9hPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjEwPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxhIG5hbWU9ImlkeCI+PC9hPjxhIG5hbWU9ImlkeEIiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5CPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLWV4dHJhY3QtZHVwIiB0aXRsZT0iZ3N0X2J1ZmZlcl9leHRyYWN0X2R1cMKgKCkiPmdzdF9idWZmZXJfZXh0cmFjdF9kdXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QnVmZmVyLmh0bWwiIHRpdGxlPSJHc3RCdWZmZXIiPkdzdEJ1ZmZlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvaXgxMC5odG1sIGIvZG9jcy9nc3QvaHRtbC9peDEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwOWNjMDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9peDEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjAuNTogR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDkuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjEwIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIiB0aXRsZT0iQW5ub3RhdGlvbiBHbG9zc2FyeSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEIiPkI8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwOS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS4xNiI+PC9hPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjU8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4QiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkI8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJpbi5odG1sI0dTVC1CSU4tSVMtTk8tUkVTWU5DOkNBUFMiIHRpdGxlPSJHU1RfQklOX0lTX05PX1JFU1lOQygpIj5HU1RfQklOX0lTX05PX1JFU1lOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCaW4uaHRtbCIgdGl0bGU9IkdzdEJpbiI+R3N0QmluPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9sZWZ0LWluc2Vuc2l0aXZlLnBuZyBiL2RvY3MvZ3N0L2h0bWwvbGVmdC1pbnNlbnNpdGl2ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTQ4ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9sZWZ0LWluc2Vuc2l0aXZlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvbGVmdC5wbmcgYi9kb2NzL2dzdC9odG1sL2xlZnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTY0OTEzLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvbGVmdC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL2xpYmdzdHJlYW1lci5odG1sIGIvZG9jcy9nc3QvaHRtbC9saWJnc3RyZWFtZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgyNGY3Zi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL2xpYmdzdHJlYW1lci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5HU3RyZWFtZXIgQ29yZSBMaWJyYXJ5OiBHU3RyZWFtZXIgMS4wIENvcmUgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBDb3JlIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgQ29yZSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXJ1bm5pbmcuaHRtbCIgdGl0bGU9IlJ1bm5pbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9ucyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCIgdGl0bGU9IkdzdCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXJ1bm5pbmcuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1Hc3QuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0ibGliZ3N0cmVhbWVyIj48L2E+R1N0cmVhbWVyIENvcmUgTGlicmFyeTwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPjxkbCBjbGFzcz0idG9jIj4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0Lmh0bWwiPkdzdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTWVkaWEgbGlicmFyeSBzdXBwb3J0aW5nIGFyYml0cmFyeSBmb3JtYXRzIGFuZCBmaWx0ZXIKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhzLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QWxsb2NhdG9yLmh0bWwiPkdzdEFsbG9jYXRvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgYWxsb2NhdGUgbWVtb3J5IGJsb2Nrczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEF0b21pY1F1ZXVlLmh0bWwiPkdzdEF0b21pY1F1ZXVlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBbiBhdG9taWMgcXVldWUgaW1wbGVtZW50YXRpb248L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJpbi5odG1sIj5Hc3RCaW48L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgYW5kIGVsZW1lbnQgdGhhdCBjYW4gY29udGFpbiBvdGhlciBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QnVmZmVyLmh0bWwiPkdzdEJ1ZmZlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGF0YS1wYXNzaW5nIGJ1ZmZlciB0eXBlPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCdWZmZXJMaXN0Lmh0bWwiPkdzdEJ1ZmZlckxpc3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIExpc3RzIG9mIGJ1ZmZlcnMgZm9yIGRhdGEtcGFzc2luZzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QnVmZmVyUG9vbC5odG1sIj5Hc3RCdWZmZXJQb29sPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQb29sIGZvciBidWZmZXJzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCdXMuaHRtbCI+R3N0QnVzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBc3luY2hyb25vdXMgbWVzc2FnZSBidXMgc3Vic3lzdGVtPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RDYXBzLmh0bWwiPkdzdENhcHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0cnVjdHVyZSBkZXNjcmliaW5nIHNldHMgb2YgbWVkaWEgZm9ybWF0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q2Fwc0ZlYXR1cmVzLmh0bWwiPkdzdENhcHNGZWF0dXJlczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSBzZXQgb2YgZmVhdHVyZXMgaW4gY2Fwczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0U2FtcGxlLmh0bWwiPkdzdFNhbXBsZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSBtZWRpYSBzYW1wbGU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENoaWxkUHJveHkuaHRtbCI+R3N0Q2hpbGRQcm94eTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW50ZXJmYWNlIGZvciBtdWx0aSBjaGlsZCBlbGVtZW50cy48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENsb2NrLmh0bWwiPkdzdENsb2NrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBYnN0cmFjdCBjbGFzcyBmb3IgZ2xvYmFsIGNsb2Nrczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdENvbmZpZy5odG1sIj5Hc3RDb25maWc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udGV4dC5odG1sIj5Hc3RDb250ZXh0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMaWdodHdlaWdodCBvYmplY3RzIHRvIHJlcHJlc2VudCBlbGVtZW50IGNvbnRleHRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RDb250cm9sQmluZGluZy5odG1sIj5Hc3RDb250cm9sQmluZGluZzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2Ugc291cmNlczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0Q29udHJvbFNvdXJjZS5odG1sIj5Hc3RDb250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBiYXNlIGNsYXNzIGZvciBjb250cm9sIHNvdXJjZSBzb3VyY2VzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3REYXRlVGltZS5odG1sIj5Hc3REYXRlVGltZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSBkYXRlLCB0aW1lIGFuZCB0aW1lem9uZSBzdHJ1Y3R1cmU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEVsZW1lbnQuaHRtbCI+R3N0RWxlbWVudDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYWxsIHBpcGVsaW5lIGVsZW1lbnRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RFbGVtZW50RmFjdG9yeS5odG1sIj5Hc3RFbGVtZW50RmFjdG9yeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ3JlYXRlIEdzdEVsZW1lbnRzIGZyb20gYSBmYWN0b3J5PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0R0Vycm9yLmh0bWwiPkdzdEdFcnJvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ2F0ZWdvcml6ZWQgZXJyb3IgbWVzc2FnZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEV2ZW50Lmh0bWwiPkdzdEV2ZW50PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBldmVudHMgdGhhdCBhcmUgcGFzc2VkIHVwIGFuZCBkb3duCi0gICAgICAgICAgICAgICAgICAgIGEgcGlwZWxpbmU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCI+R3N0Rm9ybWF0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEeW5hbWljYWxseSByZWdpc3RlciBuZXcgZGF0YSBmb3JtYXRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RHaG9zdFBhZC5odG1sIj5Hc3RHaG9zdFBhZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUHNldWRvIGxpbmsgcGFkczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdEl0ZXJhdG9yLmh0bWwiPkdzdEl0ZXJhdG9yPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBPYmplY3QgdG8gcmV0cmlldmUgbXVsdGlwbGUgZWxlbWVudHMgaW4gYSB0aHJlYWRzYWZlCi13YXkuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RNZW1vcnkuaHRtbCI+R3N0TWVtb3J5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCByZWZjb3VudGVkIHdyYXBwZXIgZm9yIG1lbW9yeSBibG9ja3M8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdE1lc3NhZ2UuaHRtbCI+R3N0TWVzc2FnZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTGlnaHR3ZWlnaHQgb2JqZWN0cyB0byBzaWduYWwgdGhlIGFwcGxpY2F0aW9uIG9mCi0gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lIGV2ZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCI+R3N0TWV0YTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQnVmZmVyIG1ldGFkYXRhPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sIj5Hc3RNaW5pT2JqZWN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMaWdodHdlaWdodCBiYXNlIGNsYXNzIGZvciB0aGUgR1N0cmVhbWVyIG9iamVjdCBoaWVyYXJjaHk8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdE9iamVjdC5odG1sIj5Hc3RPYmplY3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIHRoZSBHU3RyZWFtZXIgb2JqZWN0IGhpZXJhcmNoeTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UGFkLmh0bWwiPkdzdFBhZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgT2JqZWN0IGNvbnRhaW5lZCBieSBlbGVtZW50cyB0aGF0IGFsbG93cyBsaW5rcyB0bwotICAgICAgICAgICAgICAgICAgICBvdGhlciBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UGFkVGVtcGxhdGUuaHRtbCI+R3N0UGFkVGVtcGxhdGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlc2NyaWJlIHRoZSBtZWRpYSB0eXBlIG9mIGEgcGFkLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFBhcmFtU3BlYy5odG1sIj5Hc3RQYXJhbVNwZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdQYXJhbVNwZWMgaW1wbGVtZW50YXRpb25zIHNwZWNpZmljCi10byBHU3RyZWFtZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RQYXJzZS5odG1sIj5Hc3RQYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR2V0IGEgcGlwZWxpbmUgZnJvbSBhIHRleHQgcGlwZWxpbmUgZGVzY3JpcHRpb248L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFBpcGVsaW5lLmh0bWwiPkdzdFBpcGVsaW5lPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBUb3AtbGV2ZWwgYmluIHdpdGggY2xvY2tpbmcgYW5kIGJ1cyBtYW5hZ2VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RQbHVnaW4uaHRtbCI+R3N0UGx1Z2luPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDb250YWluZXIgZm9yIGZlYXR1cmVzIGxvYWRlZCBmcm9tIGEgc2hhcmVkIG9iamVjdCBtb2R1bGU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFBsdWdpbkZlYXR1cmUuaHRtbCI+R3N0UGx1Z2luRmVhdHVyZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3IgY29udGVudHMgb2YgYSBHc3RQbHVnaW48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RQb2xsLmh0bWwiPkdzdFBvbGw8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEtlZXAgdHJhY2sgb2YgZmlsZSBkZXNjcmlwdG9ycyBhbmQgbWFrZSBpdCBwb3NzaWJsZQotICAgICAgICAgICAgICAgICAgICB0byB3YWl0IG9uIHRoZW0gaW4gYSBjYW5jZWxsYWJsZSB3YXk8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFByZXNldC5odG1sIj5Hc3RQcmVzZXQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGhlbHBlciBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgcHJlc2V0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFByb3RlY3Rpb25NZXRhLmh0bWwiPkdzdFByb3RlY3Rpb25NZXRhPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBGdW5jdGlvbnMgYW5kIGNsYXNzZXMgdG8gc3VwcG9ydCBlbmNyeXB0ZWQgc3RyZWFtcy48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFF1ZXJ5Lmh0bWwiPkdzdFF1ZXJ5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQcm92aWRlIGZ1bmN0aW9ucyB0byBjcmVhdGUgcXVlcmllcywgYW5kIHRvIHNldCBhbmQgcGFyc2UKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGluIHRoZW0uPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RSZWdpc3RyeS5odG1sIj5Hc3RSZWdpc3RyeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbWFuYWdlbWVudCBvZiA8c3BhbiBjbGFzcz0idHlwZSI+R3N0UGx1Z2luPC9zcGFuPiBvYmplY3RzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RTZWdtZW50Lmh0bWwiPkdzdFNlZ21lbnQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBjb25maWd1cmVkIHJlZ2lvbiBvZiBpbnRlcmVzdAotICAgICAgICAgICAgICAgICAgICBpbiBhIG1lZGlhIGZpbGUuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0U3RyZWFtLmh0bWwiPkdzdFN0cmVhbTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3Igc3RyZWFtIG9iamVjdHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RTdHJlYW1Db2xsZWN0aW9uLmh0bWwiPkdzdFN0cmVhbUNvbGxlY3Rpb248L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIGNvbGxlY3Rpb24gb2Ygc3RyZWFtczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0U3RydWN0dXJlLmh0bWwiPkdzdFN0cnVjdHVyZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR2VuZXJpYyBzdHJ1Y3R1cmUgY29udGFpbmluZyBmaWVsZHMgb2YgbmFtZXMgYW5kIHZhbHVlczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0U3lzdGVtQ2xvY2suaHRtbCI+R3N0U3lzdGVtQ2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlZmF1bHQgY2xvY2sgdGhhdCB1c2VzIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUYWdMaXN0Lmh0bWwiPkdzdFRhZ0xpc3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIExpc3Qgb2YgdGFncyBhbmQgdmFsdWVzIHVzZWQgdG8gZGVzY3JpYmUgbWVkaWEgbWV0YWRhdGE8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRhZ1NldHRlci5odG1sIj5Hc3RUYWdTZXR0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgYW5kIHJldHJpZXZhbAotICAgICAgICAgICAgICAgICAgICBvZiBtZWRpYSBtZXRhZGF0YTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0VGFzay5odG1sIj5Hc3RUYXNrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBYnN0cmFjdGlvbiBvZiBHU3RyZWFtZXIgc3RyZWFtaW5nIHRocmVhZHMuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUYXNrUG9vbC5odG1sIj5Hc3RUYXNrUG9vbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUG9vbCBvZiBHU3RyZWFtZXIgc3RyZWFtaW5nIHRocmVhZHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRvYy5odG1sIj5Hc3RUb2M8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdlbmVyaWMgdGFibGUgb2YgY29udGVudHMgc3VwcG9ydDwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sIj5Hc3RUb2NTZXR0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgYW5kIHJldHJpZXZhbAotICAgICAgICAgICAgICAgICAgICBvZiB0aGUgVE9DPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCI+R3N0VHlwZUZpbmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0cmVhbSB0eXBlIGRldGVjdGlvbjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0VHlwZUZpbmRGYWN0b3J5Lmh0bWwiPkdzdFR5cGVGaW5kRmFjdG9yeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJlZCB0eXBlZmluZCBmdW5jdGlvbnM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RVcmkuaHRtbCI+R3N0VXJpPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBVUkkgcGFyc2luZyBhbmQgbWFuaXB1bGF0aW9uLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCI+R3N0VXJpSGFuZGxlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSW50ZXJmYWNlIHRvIGVhc2UgVVJJIGhhbmRsaW5nIGluIHBsdWdpbnMuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VXRpbHMuaHRtbCI+R3N0VXRpbHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sIj5Hc3RWYWx1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR1ZhbHVlIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYwotdG8gR1N0cmVhbWVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItR3N0VmVyc2lvbi5odG1sIj5Hc3RWZXJzaW9uPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHU3RyZWFtZXIgdmVyc2lvbiBtYWNyb3MuPC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kaXY+Ci08cD4KLSAgICAgIGxpYmdzdHJlYW1lci0xLjAuc28gcHJvdmlkZXMgYWxsIHRoZSBjb3JlIEdTdHJlYW1lciBzZXJ2aWNlcywKLSAgICAgIGluY2x1ZGluZyBpbml0aWFsaXphdGlvbiwgcGx1Z2luIG1hbmFnZW1lbnQgYW5kIHR5cGVzLAotICAgICAgYXMgd2VsbCBhcyB0aGUgb2JqZWN0IGhpZXJhcmNoeSB0aGF0IGRlZmluZXMgZWxlbWVudHMgYW5kIGJpbnMsCi0gICAgICBhbG9uZyB3aXRoIHNvbWUgbW9yZSBzcGVjaWFsaXplZCBlbGVtZW50cy4KLSAgICA8L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9odG1sL3JpZ2h0LWluc2Vuc2l0aXZlLnBuZyBiL2RvY3MvZ3N0L2h0bWwvcmlnaHQtaW5zZW5zaXRpdmUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWVmYTI3Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L2h0bWwvcmlnaHQtaW5zZW5zaXRpdmUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC9yaWdodC5wbmcgYi9kb2NzL2dzdC9odG1sL3JpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzNjFhNi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL3JpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvc3R5bGUuY3NzIGIvZG9jcy9nc3QvaHRtbC9zdHlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NzU0MjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC9zdHlsZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotYm9keQotewotICBmb250LWZhbWlseTogY2FudGFyZWxsLCBzYW5zLXNlcmlmOwotfQotLnN5bm9wc2lzLCAuY2xhc3NzeW5vcHNpcwotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMS8yICovCi0gIGJhY2tncm91bmQ6ICNlZWVlZWM7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMjM4LCAyMzgsIDIzNiwgMC41KTsKLSAgYm9yZGVyOiBzb2xpZCAxcHggcmdiKDIzOCwgMjM4LCAyMzYpOwotICBwYWRkaW5nOiAwLjVlbTsKLX0KLS5wcm9ncmFtbGlzdGluZwotewotICAvKiB0YW5nbzpza3kgYmx1ZSAwLzEgKi8KLSAgLyogZmFsbGJhY2sgZm9yIG5vIHJnYmEgc3VwcG9ydCAqLwotICBiYWNrZ3JvdW5kOiAjZTZmM2ZmOwotICBib3JkZXI6IHNvbGlkIDFweCAjNzI5ZmNmOwotICBiYWNrZ3JvdW5kOiByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMSk7Ci0gIGJvcmRlcjogc29saWQgMXB4IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgcGFkZGluZzogMC41ZW07Ci19Ci0udmFyaWFibGVsaXN0Ci17Ci0gIHBhZGRpbmc6IDRweDsKLSAgbWFyZ2luLWxlZnQ6IDNlbTsKLX0KLS52YXJpYWJsZWxpc3QgdGQ6Zmlyc3QtY2hpbGQKLXsKLSAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLQotZGl2LmdhbGxlcnktZmxvYXQKLXsKLSAgZmxvYXQ6IGxlZnQ7Ci0gIHBhZGRpbmc6IDEwcHg7Ci19Ci1kaXYuZ2FsbGVyeS1mbG9hdCBpbWcKLXsKLSAgYm9yZGVyLXN0eWxlOiBub25lOwotfQotZGl2LmdhbGxlcnktc3BhY2VyCi17Ci0gIGNsZWFyOiBib3RoOwotfQotCi1hLCBhOnZpc2l0ZWQKLXsKLSAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAvKiB0YW5nbzpza3kgYmx1ZSAyICovCi0gIGNvbG9yOiAjMzQ2NWE0OwotfQotYTpob3ZlcgotewotICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLSAgLyogdGFuZ286c2t5IGJsdWUgMSAqLwotICBjb2xvcjogIzcyOWZjZjsKLX0KLQotZGl2LmluZm9ybWFsdGFibGUgdGFibGUKLXsKLSAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKLSAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNlbTsKLSAgYm9yZGVyOiBub25lOwotfQotCi1kaXYuaW5mb3JtYWx0YWJsZSB0YWJsZSB0ZCwgZGl2LmluZm9ybWFsdGFibGUgdGFibGUgdGgKLXsKLSAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLQotLmZ1bmN0aW9uX3R5cGUsCi0udmFyaWFibGVfdHlwZSwKLS5wcm9wZXJ0eV90eXBlLAotLnNpZ25hbF90eXBlLAotLnBhcmFtZXRlcl9uYW1lLAotLnN0cnVjdF9tZW1iZXJfbmFtZSwKLS51bmlvbl9tZW1iZXJfbmFtZSwKLS5kZWZpbmVfa2V5d29yZCwKLS5kYXRhdHlwZV9rZXl3b3JkLAotLnR5cGVkZWZfa2V5d29yZAotewotICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLyogZGltIG5vbi1wcmltYXJ5IGNvbHVtbnMgKi8KLS5jX3B1bmN0dWF0aW9uLAotLmZ1bmN0aW9uX3R5cGUsCi0udmFyaWFibGVfdHlwZSwKLS5wcm9wZXJ0eV90eXBlLAotLnNpZ25hbF90eXBlLAotLmRlZmluZV9rZXl3b3JkLAotLmRhdGF0eXBlX2tleXdvcmQsCi0udHlwZWRlZl9rZXl3b3JkLAotLnByb3BlcnR5X2ZsYWdzLAotLnNpZ25hbF9mbGFncywKLS5wYXJhbWV0ZXJfYW5ub3RhdGlvbnMsCi0uZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMsCi0uc3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucywKLS51bmlvbl9tZW1iZXJfYW5ub3RhdGlvbnMKLXsKLSAgY29sb3I6ICM4ODhhODU7Ci19Ci0KLS5mdW5jdGlvbl90eXBlIGEsCi0uZnVuY3Rpb25fdHlwZSBhOnZpc2l0ZWQsCi0uZnVuY3Rpb25fdHlwZSBhOmhvdmVyLAotLnByb3BlcnR5X3R5cGUgYSwKLS5wcm9wZXJ0eV90eXBlIGE6dmlzaXRlZCwKLS5wcm9wZXJ0eV90eXBlIGE6aG92ZXIsCi0uc2lnbmFsX3R5cGUgYSwKLS5zaWduYWxfdHlwZSBhOnZpc2l0ZWQsCi0uc2lnbmFsX3R5cGUgYTpob3ZlciwKLS5zaWduYWxfZmxhZ3MgYSwKLS5zaWduYWxfZmxhZ3MgYTp2aXNpdGVkLAotLnNpZ25hbF9mbGFncyBhOmhvdmVyCi17Ci0gY29sb3I6ICM3MjlmY2Y7Ci19Ci0KLXRkIHAKLXsKLSAgbWFyZ2luOiAwLjI1ZW07Ci19Ci0KLWRpdi50YWJsZSB0YWJsZQotewotICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICBib3JkZXItc3BhY2luZzogMHB4OwotICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLwotICBib3JkZXI6IHNvbGlkIDFweCAjYmFiZGI2OwotfQotCi1kaXYudGFibGUgdGFibGUgdGQsIGRpdi50YWJsZSB0YWJsZSB0aAotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLwotICBib3JkZXI6IHNvbGlkIDFweCAjYmFiZGI2OwotICBwYWRkaW5nOiAzcHg7Ci0gIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLWRpdi50YWJsZSB0YWJsZSB0aAotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMiAqLwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDNkN2NmOwotfQotCi1oNAotewotICBjb2xvcjogIzU1NTc1MzsKLSAgbWFyZ2luLXRvcDogMWVtOwotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLWhyCi17Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSAxICovCi0gIGNvbG9yOiAjZDNkN2NmOwotICBiYWNrZ3JvdW5kOiAjZDNkN2NmOwotICBib3JkZXI6IG5vbmUgMHB4OwotICBoZWlnaHQ6IDFweDsKLSAgY2xlYXI6IGJvdGg7Ci0gIG1hcmdpbjogMi4wZW0gMGVtIDIuMGVtIDBlbTsKLX0KLQotZGwudG9jIGR0Ci17Ci0gIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07Ci19Ci0KLWRsLnRvYyA+IGR0Ci17Ci0gIHBhZGRpbmctdG9wOiAwLjI1ZW07Ci0gIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi1kbC50b2MgPiBkbAotewotICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Ci19Ci0KLS5wYXJhbWV0ZXIKLXsKLSAgZm9udC1zdHlsZTogbm9ybWFsOwotfQotCi0uZm9vdGVyCi17Ci0gIHBhZGRpbmctdG9wOiAzLjVlbTsKLSAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KLSAgY29sb3I6ICNiYWJkYjY7Ci0gIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgZm9udC1zaXplOiA4MCU7Ci19Ci0KLS5pbmZvcm1hbGZpZ3VyZSwKLS5maWd1cmUKLXsKLSAgbWFyZ2luOiAxZW07Ci19Ci0KLS5pbmZvcm1hbGV4YW1wbGUsCi0uZXhhbXBsZQotewotICBtYXJnaW4tdG9wOiAxZW07Ci0gIG1hcmdpbi1ib3R0b206IDFlbTsKLX0KLQotLndhcm5pbmcKLXsKLSAgLyogdGFuZ286b3JhbmdlIDAvMSAqLwotICBiYWNrZ3JvdW5kOiAjZmZlZWQ5OwotICBiYWNrZ3JvdW5kOiByZ2JhKDI1MiwgMTc1LCA2MiwgMC4xKTsKLSAgYm9yZGVyLWNvbG9yOiAjZmZiMDRmOwotICBib3JkZXItY29sb3I6IHJnYmEoMjUyLCAxNzUsIDYyLCAwLjIpOwotfQotLm5vdGUKLXsKLSAgLyogdGFuZ286Y2hhbWVsZW9uIDAvMC41ICovCi0gIGJhY2tncm91bmQ6ICNkOGZmYjI7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMTM4LCAyMjYsIDUyLCAwLjEpOwotICBib3JkZXItY29sb3I6ICNhYmY1NjI7Ci0gIGJvcmRlci1jb2xvcjogcmdiYSgxMzgsIDIyNiwgNTIsIDAuMik7Ci19Ci1kaXYuYmxvY2txdW90ZQotewotICBib3JkZXItY29sb3I6ICNlZWVlZWM7Ci19Ci0ubm90ZSwgLndhcm5pbmcsIGRpdi5ibG9ja3F1b3RlCi17Ci0gIHBhZGRpbmc6IDAuNWVtOwotICBib3JkZXItd2lkdGg6IDFweDsKLSAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKLSAgbWFyZ2luOiAyZW07Ci19Ci0ubm90ZSBwLCAud2FybmluZyBwCi17Ci0gIG1hcmdpbjogMDsKLX0KLQotZGl2Lndhcm5pbmcgaDMudGl0bGUsCi1kaXYubm90ZSBoMy50aXRsZQotewotICBkaXNwbGF5OiBub25lOwotfQotCi1wICsgZGl2LnNlY3Rpb24KLXsKLSAgbWFyZ2luLXRvcDogMWVtOwotfQotCi1kaXYucmVmbmFtZWRpdiwKLWRpdi5yZWZzeW5vcHNpc2RpdiwKLWRpdi5yZWZzZWN0MSwKLWRpdi5yZWZzZWN0MiwKLWRpdi50b2MsCi1kaXYuc2VjdGlvbgotewotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLS8qIGJsb2IgbGlua3MgKi8KLWgyIC5leHRyYWxpbmtzLCBoMyAuZXh0cmFsaW5rcwotewotICBmbG9hdDogcmlnaHQ7Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCi0gIGNvbG9yOiAjYmFiZGI2OwotICBmb250LXNpemU6IDgwJTsKLSAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotLmxpbmVhcnQKLXsKLSAgY29sb3I6ICNkM2Q3Y2Y7Ci0gIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci19Ci0KLS5hbm5vdGF0aW9uCi17Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSA1ICovCi0gIGNvbG9yOiAjNTU1NzUzOwotICBmb250LXdlaWdodDogbm9ybWFsOwotfQotCi0uc3RydWN0ZmllbGQKLXsKLSAgZm9udC1zdHlsZTogbm9ybWFsOwotICBmb250LXdlaWdodDogbm9ybWFsOwotfQotCi1hY3JvbnltLGFiYnIgCi17Ci0gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgZ3JheTsKLX0KLQotLyogY29kZSBsaXN0aW5ncyAqLwotCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAubm9ybWFsLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLm5vcm1hbCBhLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLm51bWJlciwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jYnJhY2tldCwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5zeW1ib2wgICAgIHsgY29sb3I6ICM1NTU3NTM7IH0KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jb21tZW50LAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLmxpbmVudW0gICAgeyBjb2xvcjogI2JhYmRiNjsgfSAvKiB0YW5nbzogYWx1bWluaXVtIDMgKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5mdW5jdGlvbiwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5mdW5jdGlvbiBhLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnByZXByb2MgICAgeyBjb2xvcjogIzIwNGE4NzsgfSAvKiB0YW5nbzogc2t5IGJsdWUgMyAgKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5zdHJpbmcgICAgIHsgY29sb3I6ICNhZDdmYTg7IH0gLyogdGFuZ286IHBsdW0gKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5rZXl3b3JkLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnVzZXJ0eXBlLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnR5cGUsCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAudHlwZSBhICAgICB7IGNvbG9yOiAjNGU5YTA2OyB9IC8qIHRhbmdvOiBjaGFtZWxlb24gMyAgKi8KLQotLmxpc3RpbmdfZnJhbWUgewotICAvKiB0YW5nbzpza3kgYmx1ZSAxICovCi0gIGJvcmRlcjogc29saWQgMXB4ICM3MjlmY2Y7Ci0gIGJvcmRlcjogc29saWQgMXB4IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgcGFkZGluZzogMHB4OwotfQotCi0ubGlzdGluZ19saW5lcywgLmxpc3RpbmdfY29kZSB7Ci0gIG1hcmdpbi10b3A6IDBweDsKLSAgbWFyZ2luLWJvdHRvbTogMHB4OwotICBwYWRkaW5nOiAwLjVlbTsKLX0KLS5saXN0aW5nX2xpbmVzIHsKLSAgLyogdGFuZ286c2t5IGJsdWUgMC41ICovCi0gIGJhY2tncm91bmQ6ICNhNmM1ZTM7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgLyogdGFuZ286YWx1bWluaXVtIDYgKi8KLSAgY29sb3I6ICMyZTM0MzY7Ci19Ci0ubGlzdGluZ19jb2RlIHsKLSAgLyogdGFuZ286c2t5IGJsdWUgMCAqLwotICBiYWNrZ3JvdW5kOiAjZTZmM2ZmOwotICBiYWNrZ3JvdW5kOiByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMSk7Ci19Ci0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyB7Ci0gIC8qIG92ZXJyaWRlIGZyb20gcHJldmlvdXMgKi8KLSAgYm9yZGVyOiBub25lIDBweDsKLSAgcGFkZGluZzogMHB4OwotICBiYWNrZ3JvdW5kOiBub25lOwotfQotLmxpc3RpbmdfbGluZXMgcHJlLCAubGlzdGluZ19jb2RlIHByZSB7Ci0gIG1hcmdpbjogMHB4OwotfQotCi1AbWVkaWEgc2NyZWVuIHsKLSAgLyogdGhlc2UgaGF2ZSBhIDxzdXA+IGFzIGEgZmlyc3QgY2hpbGQsIGJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gcGFyZW50IHNlbGVjdG9ycwotICAgKiB3ZSBjYW4ndCB1c2UgdGhhdC4gKi8KLSAgYS5mb290bm90ZQotICB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDogMGVtICEgaW1wb3J0YW50OwotICB9Ci0gIC8qIHRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgdGhlIGxvY2FsIGFuY2hvcnMgYXJlIGRpc3BsYXllZCBiZWxvdyB0aGUgbmF2aWFndGlvbiAqLwotICBkaXYuZm9vdG5vdGUgYVtuYW1lXSwgZGl2LnJlZm5hbWVkaXYgYVtuYW1lXSwgZGl2LnJlZnNlY3QxIGFbbmFtZV0sIGRpdi5yZWZzZWN0MiBhW25hbWVdLCBkaXYuaW5kZXggYVtuYW1lXSwgZGl2Lmdsb3NzYXJ5IGFbbmFtZV0sIGRpdi5zZWN0MSBhW25hbWVdCi0gIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDotNWVtOwotICB9Ci0gIC8qIHRoaXMgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhlIHhzbCBzdHlsZSBzaGVldHMgd2hlbiBnZW5lcmF0aW5nIGluZGV4ZXMgKi8KLSAgZGl2LmluZGV4IGRpdi5pbmRleAotICB7Ci0gICAgdG9wOiAwZW07Ci0gIH0KLSAgLyogbWFrZSBzcGFjZSBmb3IgdGhlIGZpeGVkIG5hdmlnYXRpb24gYmFyIGFuZCBhZGQgc3BhY2UgYXQgdGhlIGJvdHRvbSBzbyB0aGF0Ci0gICAqIGxpbmsgdGFyZ2V0cyBhcHBlYXIgc29tZXdoYXQgY2xvc2UgdG8gdG9wCi0gICAqLwotICBib2R5Ci0gIHsKLSAgICBwYWRkaW5nLXRvcDogMi41ZW07Ci0gICAgcGFkZGluZy1ib3R0b206IDUwMHB4OwotICAgIG1heC13aWR0aDogNjBlbTsKLSAgfQotICBwCi0gIHsKLSAgICBtYXgtd2lkdGg6IDYwZW07Ci0gIH0KLSAgLyogc3R5bGUgYW5kIHNpemUgdGhlIG5hdmlnYXRpb24gYmFyICovCi0gIHRhYmxlLm5hdmlnYXRpb24jdG9wCi0gIHsKLSAgICBwb3NpdGlvbjogZml4ZWQ7Ci0gICAgYmFja2dyb3VuZDogI2UyZTJlMjsKLSAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2JhYmRiNjsKLSAgICBib3JkZXItc3BhY2luZzogNXB4OwotICAgIG1hcmdpbi10b3A6IDA7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICB6LWluZGV4OiAxMDsKLSAgfQotICB0YWJsZS5uYXZpZ2F0aW9uI3RvcCB0ZAotICB7Ci0gICAgcGFkZGluZy1sZWZ0OiA2cHg7Ci0gICAgcGFkZGluZy1yaWdodDogNnB4OwotICB9Ci0gIC5uYXZpZ2F0aW9uIGEsIC5uYXZpZ2F0aW9uIGE6dmlzaXRlZAotICB7Ci0gICAgLyogdGFuZ286c2t5IGJsdWUgMyAqLwotICAgIGNvbG9yOiAjMjA0YTg3OwotICB9Ci0gIC5uYXZpZ2F0aW9uIGE6aG92ZXIKLSAgewotICAgIC8qIHRhbmdvOnNreSBibHVlIDIgKi8KLSAgICBjb2xvcjogIzM0NjVhNDsKLSAgfQotICB0ZC5zaG9ydGN1dHMKLSAgewotICAgIC8qIHRhbmdvOnNreSBibHVlIDIgKi8KLSAgICBjb2xvcjogIzM0NjVhNDsKLSAgICBmb250LXNpemU6IDgwJTsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICB9Ci0gIHRkLnNob3J0Y3V0cyAuZGltCi0gIHsKLSAgICBjb2xvcjogI2JhYmRiNjsKLSAgfQotICAubmF2aWdhdGlvbiAudGl0bGUKLSAgewotICAgIGZvbnQtc2l6ZTogODAlOwotICAgIG1heC13aWR0aDogbm9uZTsKLSAgICBtYXJnaW46IDBweDsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICB9Ci19Ci1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7Ci0gIC8qIHNjcmVlbiBsYXJnZXIgdGhhbiA2MGVtICovCi0gIGJvZHkgeyBtYXJnaW46IGF1dG87IH0KLX0KLUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDYwZW0pIHsKLSAgLyogc2NyZWVuIGxlc3MgdGhhbiA2MGVtICovCi0gICNuYXZfaGllcmFyY2h5IHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X2ludGVyZmFjZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfcHJlcmVxdWlzaXRlcyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9kZXJpdmVkX2ludGVyZmFjZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfaW1wbGVtZW50YXRpb25zIHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X2NoaWxkX3Byb3BlcnRpZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfc3R5bGVfcHJvcGVydGllcyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9pbmRleCB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9nbG9zc2FyeSB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLmdhbGxlcnlfaW1hZ2UgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC5wcm9wZXJ0eV9mbGFncyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnNpZ25hbF9mbGFncyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnBhcmFtZXRlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLmVudW1fbWVtYmVyX2Fubm90YXRpb25zIHsgZGlzcGxheTogbm9uZTsgfQotICAuc3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnVuaW9uX21lbWJlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLyogbm93IHRoYXQgYSBjb2x1bW4gaXMgaGlkZGVuLCBvcHRpbWl6ZSBzcGFjZSAqLwotICBjb2wucGFyYW1ldGVyc19uYW1lIHsgd2lkdGg6IGF1dG87IH0KLSAgY29sLnBhcmFtZXRlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICBjb2wuc3RydWN0X21lbWJlcnNfbmFtZSB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5zdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5lbnVtX21lbWJlcnNfbmFtZSB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5lbnVtX21lbWJlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICBjb2wudW5pb25fbWVtYmVyc19uYW1lIHsgd2lkdGg6IGF1dG87IH0KLSAgY29sLnVuaW9uX21lbWJlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICAubGlzdGluZ19saW5lcyB7IGRpc3BsYXk6IG5vbmU7IH0KLX0KLUBtZWRpYSBwcmludCB7Ci0gIHRhYmxlLm5hdmlnYXRpb24gewotICAgIHZpc2liaWxpdHk6IGNvbGxhcHNlOwotICAgIGRpc3BsYXk6IG5vbmU7Ci0gIH0KLSAgZGl2LnRpdGxlcGFnZSB0YWJsZS5uYXZpZ2F0aW9uIHsKLSAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwotICAgIGRpc3BsYXk6IHRhYmxlOwotICAgIGJhY2tncm91bmQ6ICNlMmUyZTI7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKLSAgICBtYXJnaW4tdG9wOiAwOwotICAgIG1hcmdpbi1ib3R0b206IDA7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiAzZW07Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9nc3QvaHRtbC91cC1pbnNlbnNpdGl2ZS5wbmcgYi9kb2NzL2dzdC9odG1sL3VwLWluc2Vuc2l0aXZlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNlMWE0Zi4uMDAwMDAwMAotLS0gYS9kb2NzL2dzdC9odG1sL3VwLWluc2Vuc2l0aXZlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvZ3N0L2h0bWwvdXAucG5nIGIvZG9jcy9nc3QvaHRtbC91cC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTkwNTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9nc3QvaHRtbC91cC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2dzdC9ydW5uaW5nLnhtbCBiL2RvY3MvZ3N0L3J1bm5pbmcueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjZiMTE3Li4wMDAwMDAwCi0tLSBhL2RvY3MvZ3N0L3J1bm5pbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIHJlZmVudHJ5IFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4zLy9FTiIKLSAgICAgICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMy9kb2Nib29reC5kdGQiIFsKLTwhRU5USVRZICUgdmVyc2lvbi1lbnRpdGllcyBTWVNURU0gInZlcnNpb24uZW50aXRpZXMiPgotJXZlcnNpb24tZW50aXRpZXM7Ci08IUVOVElUWSAlIGxvY2FsLmNvbW1vbi5hdHRyaWIgInhtbG5zOnhpICBDREFUQSAgI0ZJWEVEICdodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlJyI+Ci1dPgotPHJlZmVudHJ5IGlkPSJnc3QtcnVubmluZyIgcmV2aXNpb249IjA4IE9jdCAyMDA1Ij4KLTxyZWZtZXRhPgotPHJlZmVudHJ5dGl0bGU+UnVubmluZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC9yZWZlbnRyeXRpdGxlPgotPG1hbnZvbG51bT4zPC9tYW52b2xudW0+Ci08cmVmbWlzY2luZm8+R1N0cmVhbWVyIENvcmU8L3JlZm1pc2NpbmZvPgotPC9yZWZtZXRhPgotCi08cmVmbmFtZWRpdj4KLTxyZWZuYW1lPlJ1bm5pbmcgR1N0cmVhbWVyIEFwcGxpY2F0aW9uczwvcmVmbmFtZT4KLTxyZWZwdXJwb3NlPgotSG93IHRvIHJ1biBhbmQgZGVidWcgeW91ciBHU3RyZWFtZXIgYXBwbGljYXRpb24KLTwvcmVmcHVycG9zZT4KLTwvcmVmbmFtZWRpdj4KLQotPHJlZnNlY3QxPgotPHRpdGxlPlJ1bm5pbmcgYW5kIGRlYnVnZ2luZyBHU3RyZWFtZXIgQXBwbGljYXRpb25zPC90aXRsZT4KLQotPHJlZnNlY3QyPgotPHRpdGxlPkVudmlyb25tZW50IHZhcmlhYmxlczwvdGl0bGU+Ci0KLTxwYXJhPiAKLUdTdHJlYW1lciBpbnNwZWN0cyBhIGZldyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQKLXZhcmlhYmxlcyBsaWtlIDxlbnZhcj5MQU5HPC9lbnZhcj4sIDxlbnZhcj5QQVRIPC9lbnZhcj4gb3IgPGVudmFyPkhPTUU8L2VudmFyPi4gCi08L3BhcmE+Ci0KLTxmb3JtYWxwYXJhIGlkPSJHU1RfUExVR0lOX1NZU1RFTV9QQVRIIj4KLSAgPHRpdGxlPjxlbnZhcj5HU1RfUExVR0lOX1NZU1RFTV9QQVRIPC9lbnZhcj4sCi0gICAgICAgICA8ZW52YXI+R1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA8L2VudmFyPjwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci0KLVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGhzIChvcgotc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IG9uIFdpbmRvd3MpLgotSWYgdGhpcyB2YXJpYWJsZSBpcyBub3Qgc2V0LCBHU3RyZWFtZXIgd2lsbCBmaWxsIGluIHRoaXMgbGlzdCBmb3IgeW91Ci13aXRoCi08aXRlbWl6ZWRsaXN0PgotICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci1wbHVnLWlucyBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCBvciByYXRoZXIgdGhlIHVzZXIncyAiZGF0YSBob21lIgotZGlyZWN0b3J5IGFjY29yZGluZyB0byB0aGUgeGRnIGJhc2UgZGlyIHNwZWNpZmljYXRpb24uIFVzdWFsbHkgdGhpcyB3aWxsIGJlCi1hIGRpcmVjdG9yeSBjYWxsZWQKLTxmaWxlbmFtZT5wbHVnaW5zPC9maWxlbmFtZT4gaW5zaWRlIHRoZQotPGZpbGVuYW1lPi5sb2NhbC9zaGFyZS9nc3RyZWFtZXItJkdTVF9BUElfVkVSU0lPTjs8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4KLXRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYnkgZGVmYXVsdCwgdGhvdWdoIHRoaXMgc2VhcmNoIHBhdGggbWF5IGNoYW5nZSBpZgotdGhlIFhER19EQVRBX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LgotICAgIDwvcGFyYT4KLSAgPC9saXN0aXRlbT4KLSAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotcGx1Zy1pbnMgaW5zdGFsbGVkIHN5c3RlbS13aWRlLiAgT24gdGhpcyBzeXN0ZW0sIHRoZXkgYXJlIHN0b3JlZCBpbgotPGZpbGVuYW1lPiZHU1RfUExVR0lOU19ESVI7PC9maWxlbmFtZT4uCi0gICAgPC9wYXJhPgotCi08L2xpc3RpdGVtPgotPC9pdGVtaXplZGxpc3Q+Ci0gICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLUdTdHJlYW1lciB3aWxsIHNjYW4gdGhlc2UgcGF0aHMgZm9yIEdTdHJlYW1lciBwbHVnLWlucy4gIFRoZXNlIHBsdWctaW5zIHdpbGwKLWJlIGxvYWRlZCBhZnRlciB0aGUgcGx1Zy1pbnMgaW4gdGhlIEdTVF9QTFVHSU5fUEFUSCB2YXJpYWJsZSBiZWxvdy4KLQotVGhlIHBhdGhzIGFyZSBzY2FubmVkIGluIHRoZSBnaXZlbiBvcmRlci4gIFRoaXMgYWxsb3dzIGEgdXNlciB0byBvdmVycmlkZQotc3lzdGVtLWluc3RhbGxlZCBwbHVnLWlucyB3aXRoIGhpcyBvd24gdmVyc2lvbnMuCi0gICA8L3BhcmE+Ci0gIDxwYXJhPgotVGhlIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wIHZhcmlhbnQgaXMgdXNlZnVsIGlmIGJvdGggdGhlIG9sZCBHU3RyZWFtZXIgMC4xMAotdmVyc2lvbiBhbmQgdGhlIG5ldyBHU3RyZWFtZXIgMS4wIHZlcnNpb24gbmVlZCB0byBiZSBwb2ludGVkIHRvIG5ldyBwbHVnaW4KLXBhdGhzLiBUaGUgbGF0dGVyIHdpbGwgdXNlIHRoZSBfMV8wIHZhcmlhbnQgb3ZlciB0aGUgbm9uLXZlcnNpb25lZCBvbmUgaWYKLWl0IGlzIHNldC4KLSAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci1TZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYW4gZW1wdHkgc3RyaW5nIHdpbGwgY2F1c2UgR1N0cmVhbWVyIG5vdCB0byBzY2FuIGFueQotc3lzdGVtIHBhdGhzIGF0IGFsbCBmb3IgcGx1Zy1pbnMuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91J3JlIHJ1bm5pbmcKLXVuaW5zdGFsbGVkIChmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMpIG9yIHdoaWxlIHJ1bm5pbmcgdGVzdHN1aXRlcy4KLSAgIDwvcGFyYT4KLQotPC9mb3JtYWxwYXJhPgotCi08Zm9ybWFscGFyYSBpZD0iR1NUX1BMVUdJTl9QQVRIIj4KLSAgPHRpdGxlPjxlbnZhcj5HU1RfUExVR0lOX1BBVEg8L2VudmFyPiwgPGVudmFyPkdTVF9QTFVHSU5fUEFUSF8xXzA8L2VudmFyPjwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci1UaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyAob3IgYQotc2VtaWNvbG9uLXNlcGFyYXRlZCBsaXN0IG9uIFdpbmRvd3MpLgotR1N0cmVhbWVyIHdpbGwgc2NhbiB0aGVzZSBwYXRocyBmb3IgR1N0cmVhbWVyIHBsdWctaW5zLiAgVGhlc2UgcGx1Zy1pbnMgd2lsbAotYmUgbG9hZGVkIGluIGFkZGl0aW9uIHRvLCBhbmQgYmVmb3JlLCB0aGUgcGx1Zy1pbnMgaW4gdGhlIHN5c3RlbSBwYXRocy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLVRoZSBHU1RfUExVR0lOX1BBVEhfMV8wIHZhcmlhbnQgaXMgdXNlZnVsIGlmIGJvdGggdGhlIG9sZCBHU3RyZWFtZXIgMC4xMAotdmVyc2lvbiBhbmQgdGhlIG5ldyBHU3RyZWFtZXIgMS4wIHZlcnNpb24gbmVlZCB0byBiZSBwb2ludGVkIHRvIG5ldyBwbHVnaW4KLXBhdGhzLiBUaGUgbGF0dGVyIHdpbGwgdXNlIHRoZSBfMV8wIHZhcmlhbnQgb3ZlciB0aGUgbm9uLXZlcnNpb25lZCBvbmUgaWYKLWl0IGlzIHNldC4KLSAgPC9wYXJhPgotPC9mb3JtYWxwYXJhPgotCi08Zm9ybWFscGFyYSBpZD0iR1NUX0RFQlVHIj4KLSAgPHRpdGxlPjxlbnZhcj5HU1RfREVCVUc8L2VudmFyPjwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci1JZiBHU3RyZWFtZXIgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoIDxvcHRpb24+LS1lbmFibGUtZ3N0LWRlYnVnPXllczwvb3B0aW9uPiwKLXRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIGxpc3Qgb2YgZGVidWcgb3B0aW9ucywgd2hpY2ggY2F1c2UgR1N0cmVhbWVyCi10byBwcmludCBvdXQgZGlmZmVyZW50IHR5cGVzIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBzdGRlcnIuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci1UaGUgdmFyaWFibGUgdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiAiY2F0ZWdvcnlfbmFtZTpsZXZlbCIgcGFpcnMKLXRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yIHRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuCi1UaGUgbGV2ZWwgdmFsdWUgcmFuZ2VzIGZyb20gMCAobm90aGluZykgdG8gOSAoTUVNRFVNUCkuCi0gICAgPHZhcmlhYmxlbGlzdD4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+MSAtIDxvcHRpb24+RVJST1I8L29wdGlvbj48L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLTxwYXJhPgotTG9ncyBhbGwgZmF0YWwgZXJyb3JzLiAgVGhlc2UgYXJlIGVycm9ycyB0aGF0IGRvIG5vdCBhbGxvdyB0aGUgY29yZSBvciBlbGVtZW50cwotdG8gcGVyZm9ybSB0aGUgcmVxdWVzdGVkIGFjdGlvbi4gIFRoZSBhcHBsaWNhdGlvbiBjYW4gc3RpbGwgcmVjb3ZlciBpZgotcHJvZ3JhbW1lZCB0byBoYW5kbGUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyZWQgdGhlIGVycm9yLgotPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgIDx0ZXJtPjIgLSA8b3B0aW9uPldBUk5JTkc8L29wdGlvbj48L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLTxwYXJhPgotTG9ncyBhbGwgd2FybmluZ3MuICBUeXBpY2FsbHkgdGhlc2UgYXJlIG5vbi1mYXRhbCwgYnV0IHVzZXItdmlzaWJsZSBwcm9ibGVtcwotYXJlIGV4cGVjdGVkIHRvIGhhcHBlbi4KLTwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICA8dGVybT4zIC0gPG9wdGlvbj5GSVhNRTwvb3B0aW9uPjwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPgotPHBhcmE+Ci1Mb2dzIGFsbCBmaXhtZSBtZXNzYWdlcy4gRml4bWUgbWVzc2FnZXMgYXJlIG1lc3NhZ2VzIHRoYXQgaW5kaWNhdGUgdGhhdCBzb21ldGhpbmcKLWluIHRoZSBleGVjdXRlZCBjb2RlIHBhdGggaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIG9yIGhhbmRsZWQgeWV0LiAgVGhlIHB1cnBvc2UKLW9mIHRoaXMgbWVzc2FnZSBpcyB0byBtYWtlIGl0IGVhc2llciB0byBzcG90IGluY29tcGxldGUvdW5maW5pc2hlZCBwaWVjZXMgb2YKLWNvZGUgd2hlbiByZWFkaW5nIHRoZSBkZWJ1ZyBsb2cuCi08L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+NCAtIDxvcHRpb24+SU5GTzwvb3B0aW9uPjwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPgotPHBhcmE+Ci1Mb2dzIGFsbCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzLiAgVGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIGZvciBldmVudHMgaW4KLXRoZSBzeXN0ZW0gdGhhdCBvbmx5IGhhcHBlbiBvbmNlLCBvciBhcmUgaW1wb3J0YW50IGFuZCByYXJlIGVub3VnaCB0byBiZQotbG9nZ2VkIGF0IHRoaXMgbGV2ZWwuCi08L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+NSAtIDxvcHRpb24+REVCVUc8L29wdGlvbj48L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLTxwYXJhPgotTG9ncyBhbGwgZGVidWcgbWVzc2FnZXMuICBUaGVzZSBhcmUgZ2VuZXJhbCBkZWJ1ZyBtZXNzYWdlcyBmb3IgZXZlbnRzCi10aGF0IGhhcHBlbiBvbmx5IGEgbGltaXRlZCBudW1iZXIgb2YgdGltZXMgZHVyaW5nIGFuIG9iamVjdCdzIGxpZmV0aW1lOwotdGhlc2UgaW5jbHVkZSBzZXR1cCwgdGVhcmRvd24sIGNoYW5nZSBvZiBwYXJhbWV0ZXJzLCAuLi4KLTwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICA8dGVybT42IC0gPG9wdGlvbj5MT0c8L29wdGlvbj48L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLTxwYXJhPgotTG9ncyBhbGwgbG9nIG1lc3NhZ2VzLiAgVGhlc2UgYXJlIG1lc3NhZ2VzIGZvciBldmVudHMKLXRoYXQgaGFwcGVuIHJlcGVhdGVkbHkgZHVyaW5nIGFuIG9iamVjdCdzIGxpZmV0aW1lOwotdGhlc2UgaW5jbHVkZSBzdHJlYW1pbmcgYW5kIHN0ZWFkeS1zdGF0ZSBjb25kaXRpb25zLgotPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgIDx0ZXJtPjcgLSA8b3B0aW9uPlRSQUNFPC9vcHRpb24+PC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+Ci08cGFyYT4KLUxvZ3MgYWxsIHRyYWNlIG1lc3NhZ2VzLiAgVGhlc2UgbWVzc2FnZXMgZm9yIGV2ZW50cwotdGhhdCBoYXBwZW4gcmVwZWF0ZWRseSBkdXJpbmcgYW4gb2JqZWN0J3MgbGlmZXRpbWUgc3VjaCBhcyB0aGUKLXJlZi91bnJlZiBjeWNsZXMuCi08L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+OSAtIDxvcHRpb24+TUVNRFVNUDwvb3B0aW9uPjwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPgotPHBhcmE+Ci1Mb2cgYWxsIG1lbW9yeSBkdW1wIG1lc3NhZ2VzLiBNZW1vcnkgZHVtcCBtZXNzYWdlcyBhcmUgdXNlZCB0byBsb2cKLShzbWFsbCkgY2h1bmtzIG9mIGRhdGEgYXMgbWVtb3J5IGR1bXBzIGluIHRoZSBsb2cuIFRoZXkgd2lsbCBiZSBkaXNwbGF5ZWQKLWFzIGhleGR1bXAgd2l0aCBBU0NJSSBjaGFyYWN0ZXJzLgotPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPC92YXJpYWJsZWxpc3Q+Ci0KLSBUaGUgY2F0ZWdvcnlfbmFtZSBjYW4gY29udGFpbiAiPG9wdGlvbj4qIjwvb3B0aW9uPiBhcyBhIHdpbGRjYXJkLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci1Gb3IgZXhhbXBsZSwgc2V0dGluZyA8ZW52YXI+R1NUX0RFQlVHPC9lbnZhcj4gdG8KLTxvcHRpb24+R1NUX0FVVE9QTFVHOjYsR1NUX0VMRU1FTlRfKjo0PC9vcHRpb24+LCB3aWxsIGNhdXNlIHRoZQotPG9wdGlvbj5HU1RfQVVUT1BMVUc8L29wdGlvbj4gY2F0ZWdvcnkgdG8gYmUgbG9nZ2VkIGF0IGZ1bGwKLTxvcHRpb24+TE9HPC9vcHRpb24+IGxldmVsLCB3aGlsZSBhbGwgY2F0ZWdvcmllcyBzdGFydGluZyB3aXRoCi08b3B0aW9uPkdTVF9FTEVNRU5UXzwvb3B0aW9uPiB3aWxsIGJlIGxvZ2dlZCBhdCA8b3B0aW9uPklORk88L29wdGlvbj4gbGV2ZWwuCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLVRvIGdldCBhbGwgcG9zc2libGUgZGVidWcgb3V0cHV0LCBzZXQKLTxlbnZhcj5HU1RfREVCVUc8L2VudmFyPgotdG8gPG9wdGlvbj4qOjk8L29wdGlvbj4uIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYSA8b3B0aW9uPio6Njwvb3B0aW9uPiBkZWJ1ZwotbG9nIGlzIHVzdWFsbHkgdGhlIG1vc3QgdXNlZnVsLCBhcyBpdCBjb250YWlucyBhbGwgaW1wb3J0YW50IGluZm9ybWF0aW9uLCBidXQKLWhpZGVzIGEgbG90IG9mIG5vaXNlIHN1Y2ggYXMgcmVmcy91bnJlZnMuIEZvciBidWcgcmVwb3J0aW5nIHB1cnBvc2VzLCBhCi08b3B0aW9uPio6Njwvb3B0aW9uPiBsb2cgaXMgYWxzbyB3aGF0IHdpbGwgYmUgcmVxdWVzdGVkIHVzdWFsbHkuIEl0J3Mgb2Z0ZW4KLWFsc28gd29ydGggcnVubmluZyB3aXRoIDxvcHRpb24+KjozPC9vcHRpb24+IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55Ci1ub24tZmF0YWwgZXJyb3JzIG9yIHdhcm5pbmdzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgcHJvYmxlbSBhdCBoYW5kLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci1TaW5jZSBHU3RyZWFtZXIgMS4yIGl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBkZWJ1ZyBsZXZlbHMgYnkgbmFtZSwKLWUuZy4gR1NUX0RFQlVHPSo6V0FSTklORywqYXVkaW8qOkxPRwotICA8L3BhcmE+Ci0KLTwvZm9ybWFscGFyYT4KLQotPGZvcm1hbHBhcmEgaWQ9IkdTVF9ERUJVR19OT19DT0xPUiI+Ci0gIDx0aXRsZT48ZW52YXI+R1NUX0RFQlVHX05PX0NPTE9SPC9lbnZhcj48L3RpdGxlPgotCi0gIDxwYXJhPgotU2V0IHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYW55IHZhbHVlICgiMSIgdHlwaWNhbGx5KSB0byBzd2l0Y2ggb2ZmCi1jb2xvdXJpbmcgaW4gR1NUX0RFQlVHIG91dHB1dC4gVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNwZWNpZnlpbmcgdGhlCi08b3B0aW9uPi0tZ3N0LWRlYnVnLW5vLWNvbG9yPC9vcHRpb24+IG9yCi08b3B0aW9uPi0tZ3N0LWRlYnVnLWNvbG9yLW1vZGU8L29wdGlvbj49b2ZmIGNvbW1hbmQgbGluZSBvcHRpb24gdG8KLXdlbGwtYmVoYXZlZCBHU3RyZWFtZXIgYXBwbGljYXRpb25zIChpZS4gdGhvc2UgdGhhdCBwYXNzIGNvbW1hbmQtbGluZQotb3B0aW9ucyBjb3JyZWN0bHkgdG8gR1N0cmVhbWVyKS4KLVRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB0byByZWR1Y2UgdGhlIHNpemUgb2YgZGVidWcgb3V0cHV0IGFuZCBhbHNvIGFsbG93cwotZm9yIHRoZSBvdXRwdXQgdG8gYmUgY29tcHJlc3NlZCBtdWNoIGJldHRlciB0aGFuIHdpdGggY29sb3VycyB0dXJuZWQgb24uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci1IYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcgR1NUX0RFQlVHX0NPTE9SX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KLSJvZmYiLgotICA8L3BhcmE+Ci0KLTwvZm9ybWFscGFyYT4KLQotPGZvcm1hbHBhcmEgaWQ9IkdTVF9ERUJVR19DT0xPUl9NT0RFIj4KLSAgPHRpdGxlPjxlbnZhcj5HU1RfREVCVUdfQ09MT1JfTU9ERTwvZW52YXI+PC90aXRsZT4KLQotICA8cGFyYT4KLVNldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNoYW5nZSBsb2cgY29sb3VyaW5nIGluIEdTVF9ERUJVRyBvdXRwdXQuCi1Qb3NzaWJsZSB2YWx1ZXM6Ci0gICAgPHZhcmlhYmxlbGlzdD4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+PG9wdGlvbj5vbjwvb3B0aW9uPjwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotRW5hYmxlcyBkZWJ1ZyBsb2cgb3V0cHV0IGNvbG9yaW5nLiBVc2VzIGRlZmF1bHQgY29sb3JpbmcgbWV0aG9kIGZvciBjdXJyZW50Ci1wbGF0Zm9ybS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+PG9wdGlvbj5vZmY8L29wdGlvbj48L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLURpc2FibGVzIGRlYnVnIGxvZyBvdXRwdXQgY29sb3JpbmcuIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzcGVjaWZ5aW5nIHRoZQotPG9wdGlvbj4tLWdzdC1kZWJ1Zy1jb2xvci1tb2RlPC9vcHRpb24+PW9mZiBjb21tYW5kIGxpbmUgb3B0aW9uIHRvCi13ZWxsLWJlaGF2ZWQgR1N0cmVhbWVyIGFwcGxpY2F0aW9ucyAoaWUuIHRob3NlIHRoYXQgcGFzcyBjb21tYW5kLWxpbmUKLW9wdGlvbnMgY29ycmVjdGx5IHRvIEdTdHJlYW1lcikuCi1UaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgdG8gcmVkdWNlIHRoZSBzaXplIG9mIGRlYnVnIG91dHB1dCBhbmQgYWxzbyBhbGxvd3MKLWZvciB0aGUgb3V0cHV0IHRvIGJlIGNvbXByZXNzZWQgbXVjaCBiZXR0ZXIgdGhhbiB3aXRoIGNvbG91cnMgdHVybmVkIG9uLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICA8cGFyYT4KLUhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc2V0dGluZyBHU1RfREVCVUdfTk9fQ09MT1IgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KLWFueSB2YWx1ZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+PG9wdGlvbj5hdXRvPC9vcHRpb24+PC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci1TYW1lIGFzIDxvcHRpb24+b248L29wdGlvbj4uCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgIDx0ZXJtPjxvcHRpb24+ZGlzYWJsZTwvb3B0aW9uPjwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotU2FtZSBhcyA8b3B0aW9uPm9mZjwvb3B0aW9uPi4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgPHRlcm0+PG9wdGlvbj51bml4PC9vcHRpb24+PC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci1FbmFibGVzIGRlYnVnIGxvZyBvdXRwdXQgY29sb3JpbmcgYW5kIGZvcmNlcyB0aGUgdXNlIG9mIFVOSVggdGVybWlhbCBjb2RlcwotZm9yIGNvbG9yaW5nLCBldmVuIGlmIHRoaXMgbWV0aG9kIGlzIG5vdCBub3JtYWxseSB1c2VkIG9uIGN1cnJlbnQgcGxhdGZvcm0uCi1UaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc3BlY2lmeWluZyB0aGUKLTxvcHRpb24+LS1nc3QtZGVidWctY29sb3ItbW9kZTwvb3B0aW9uPj11bml4IGNvbW1hbmQgbGluZSBvcHRpb24gdG8KLXdlbGwtYmVoYXZlZCBHU3RyZWFtZXIgYXBwbGljYXRpb25zIChpZS4gdGhvc2UgdGhhdCBwYXNzIGNvbW1hbmQtbGluZSBvcHRpb25zCi1jb3JyZWN0bHkgdG8gR1N0cmVhbWVyKS4KLVRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB0byBkdW1wIGRlYnVnIG91dHB1dCBpbnRvIGEgZmlsZSBvbiBub24tVU5JWAotcGxhdGZvcm1zIHRvIGJlIHNlbnQgdG8gZGV2ZWxvcGVycyB3aG8gaGF2ZSB2aWV3ZXJzIHRoYXQgc3VwcG9ydCBVTklYIHRlcm1pbmFsCi1jb2Rlcy4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgIDwvdmFyaWFibGVsaXN0PgotICA8L3BhcmE+Ci0KLTwvZm9ybWFscGFyYT4KLQotPGZvcm1hbHBhcmEgaWQ9IkdTVF9ERUJVR19PUFRJT05TIj4KLSAgPHRpdGxlPjxlbnZhcj5HU1RfREVCVUdfT1BUSU9OUzwvZW52YXI+PC90aXRsZT4KLQotICA8cGFyYT4KLVRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhlIGJlaGF2aW91ciBvZiB0aGUgZGVidWdnaW5nCi1zeXN0ZW0uIEN1cnJlbnRseSB0aGUgb25seSBvcHRpb25zIHN1cHBvcnRlZCBhcmUgInByZXR0eS10YWdzIiBhbmQgImZ1bGwtdGFncyIuCi1JbiAicHJldHR5LXRhZ3MiIG1vZGUgKHRoZSBkZWZhdWx0KSwgdGFnbGlzdHMgaW4gdGhlIGRlYnVnIGxvZyB3aWxsIGJlCi1zZXJpYWxpemVkIHNvIHRoYXQgb25seSB0aGUgZmlyc3QgZmV3IGFuZCBsYXN0IGZldyBieXRlcyBvZiBhIGJ1ZmZlci10eXBlIHRhZwotd2lsbCBiZSBzZXJpYWxpemVkIGludG8gdGhlIGxvZywgdG8gYXZvaWQgZHVtcGluZyBodW5kcmVkcyBvZiBsaW5lcyBvZiB1c2VsZXNzCi1vdXRwdXQgaW50byB0aGUgbG9nIGluIGNhc2Ugb2YgbGFyZ2UgaW1hZ2UgdGFncyBhbmQgdGhlIGxpa2UuCi0gIDwvcGFyYT4KLQotPC9mb3JtYWxwYXJhPgotCi08Zm9ybWFscGFyYSBpZD0iR1NUX0RFQlVHX0RVTVBfRE9UX0RJUiI+Ci0gIDx0aXRsZT48ZW52YXI+R1NUX0RFQlVHX0RVTVBfRE9UX0RJUjwvZW52YXI+PC90aXRsZT4KLQotICA8cGFyYT4KLVNldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGEgcGF0aCB0byB0dXJuIG9uIGFsbAotI0dTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUgb3IgI0dTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyBjYWxscwotYW5kIGhhdmUgdGhlIGRvdCBmaWxlcyBpbiB0aGF0IGxvY2F0aW9uLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgYXBwbGljYXRpb24gaW4gcXVlc3Rpb24gbWFrZXMgdGhlc2UgY2FsbHMgaW4KLXN0cmF0ZWdpYyBwbGFjZXMgKGxpa2Ugd2hlbiB0aGUgcGlwZWxpbmUgc3RhdGUgY2hhbmdlcyBvciBhbiBlcnJvciBvY2N1cnMpLgotZ3N0LWxhdW5jaC0mR1NUX0FQSV9WRVJTSU9OOyBpcyBvbmUgc3VjaCBhcHBsaWNhdGlvbi4KLSAgPC9wYXJhPgotICA8cGFyYT4KLVRoZXNlIC5kb3QgZmlsZXMgY2FuIHRoZW4gYmUgdHVybmVkIGludG8gaW1hZ2VzIHVzaW5nIHRoZSAnZG90JyB1dGlsaXR5Ci1mcm9tIHRoZSBncmFwaHZpeiBzZXQgb2YgdG9vbHMsIGxpa2UgdGhpczoKLSAgPGNvbW1hbmQ+ZG90IGZvby5kb3QgLVRzdmcgLW8gZm9vLnN2ZzwvY29tbWFuZD4gb3IKLSAgPGNvbW1hbmQ+ZG90IGZvby5kb3QgLVRwbmcgLW8gZm9vLnBuZzwvY29tbWFuZD4gb3IKLSAgPGNvbW1hbmQ+ZG90IGZvby5kb3QgLVRqcGcgLW8gZm9vLmpwZzwvY29tbWFuZD4uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci1UaGVyZSBpcyBhbHNvIGEgdXRpbGl0eSBjYWxsZWQgPGNvbW1hbmQ+eGRvdDwvY29tbWFuZD4gd2hpY2ggYWxsb3dzIHlvdSB0bwotdmlldyB0aGUgZG90IGZpbGUgZGlyZWN0bHkgd2l0aG91dCBjb252ZXJ0aW5nIGl0IGZpcnN0LgotICA8L3BhcmE+Ci0KLQotPC9mb3JtYWxwYXJhPgotCi08Zm9ybWFscGFyYSBpZD0iR1NUX1JFR0lTVFJZIj4KLSAgPHRpdGxlPjxlbnZhcj5HU1RfUkVHSVNUUlk8L2VudmFyPiwgPGVudmFyPkdTVF9SRUdJU1RSWV8xXzA8L2VudmFyPjwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci1TZXQgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBtYWtlIEdTdHJlYW1lciB1c2UgYSBkaWZmZXJlbnQgZmlsZSBmb3IgdGhlCi1wbHVnaW4gY2FjaGUgLyByZWdpc3RyeSB0aGFuIHRoZSBkZWZhdWx0IG9uZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBvcGVyYXRpbmcKLWluIGEgc2VwYXJhdGUgZW52aXJvbm1lbnQgd2hpY2ggc2hvdWxkIG5vdCBhZmZlY3QgdGhlIGRlZmF1bHQgY2FjaGUgaW4gdGhlCi11c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCi0gIDwvcGFyYT4KLQotPC9mb3JtYWxwYXJhPgotCi08Zm9ybWFscGFyYSBpZD0iR1NUX1JFR0lTVFJZX0ZPUksiPgotICA8dGl0bGU+PGVudmFyPkdTVF9SRUdJU1RSWV9GT1JLPC9lbnZhcj48L3RpdGxlPgotCi0gIDxwYXJhPgotU2V0IHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gIm5vIiB0byBwcmV2ZW50IEdTdHJlYW1lciBmcm9tIGZvcmtpbmcgb24KLXN0YXJ0dXAgaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBwbHVnaW4gcmVnaXN0cnkuIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKLXB1cnBvc2VzLCBidXQgc2hvdWxkIG5vdCBiZSB1c2VkIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCBzaW5jZSBpdCBtZWFucwotdGhhdCBwbHVnaW5zIG1heSBiZSBsb2FkZWQgaW50byBtZW1vcnkgZXZlbiBpZiB0aGV5IGFyZSBub3QgbmVlZGVkIGJ5IHRoZQotYXBwbGljYXRpb24uCi0gIDwvcGFyYT4KLQotPC9mb3JtYWxwYXJhPgotCi08Zm9ybWFscGFyYSBpZD0iR1NUX1JFR0lTVFJZX1VQREFURSI+Ci0gIDx0aXRsZT48ZW52YXI+R1NUX1JFR0lTVFJZX1VQREFURTwvZW52YXI+PC90aXRsZT4KLQotICA8cGFyYT4KLVNldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHRvICJubyIgdG8gcHJldmVudCBHU3RyZWFtZXIgZnJvbSB1cGRhdGluZyB0aGUKLXBsdWdpbiByZWdpc3RyeS4gVGhpcyBpcyB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZSB3aGljaCBpcyBub3QgdXBkYXRpbmcgdGhlCi1wbHVnaW5zIGZyZXF1ZW50bHksIGl0IHdpbGwgc2F2ZSB0aW1lIHdoZW4gZG9pbmcgZ3N0X2luaXQoKS4KLSAgPC9wYXJhPgotCi08L2Zvcm1hbHBhcmE+Ci0KLTxmb3JtYWxwYXJhIGlkPSJHU1RfVFJBQ0UiPgotICA8dGl0bGU+PGVudmFyPkdTVF9UUkFDRTwvZW52YXI+PC90aXRsZT4KLQotICA8cGFyYT4KLSAgICBFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gdHJhY2luZy4gTW9zdCBHU3RyZWFtZXIgb2JqZWN0cyBoYXZlIHN1cHBvcnQgZm9yCi0gICAgdHJhY2luZyB0aGUgbnVtYmVyIG9mIHVuZnJlZWQgb2JqZWN0cyBhbmQgdGhlaXIgbWVtb3J5IHBvaW50ZXJzLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotVGhlIHZhcmlhYmxlIHRha2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdHJhY2luZyBvcHRpb25zIHRvIGVuYWJsZS4KLSAgICA8dmFyaWFibGVsaXN0PgotCi0gICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICA8dGVybT5saXZlPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+Ci08cGFyYT4KLSAgQ291bnRzIGFsbCBsaXZlIG9iamVjdHMgYW5kIGR1bXBzIGFuIG92ZXJ2aWV3IG9mIHRoZSBudW1iZXIgb2YgdW5mcmVlZAotICBvYmplY3RzIGF0IHByb2dyYW0gZXhpdC4KLTwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICA8dGVybT5tZW0tbGl2ZTwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPgotPHBhcmE+Ci0gIEtlZXAgdHJhY2sgb2YgdGhlIHVuZnJlZWQgbWVtb3J5IHBvaW50ZXJzIGFuZCBkdW1wIGFuIG92ZXJ2aWV3IG9mIGFsbCB1bmZyZWVkCi0gIG1lbW9yeSBhdCBwcm9ncmFtIGV4aXQuIFRvZ2V0aGVyIHdpdGggYSBsZXZlbCA5IGRlYnVnIGxvZyB0aGlzIGNhbiBiZSB1c2VkIHRvCi0gIGZvbGxvdyB0aGUgbGlmZWN5Y2xlIG9mIGxlYWtlZCBvYmplY3RzIGluIG9yZGVyIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhleSBhcmUKLSAgbGVha2VkLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBtZW1vcnkgbGVha3MgaW4gc2l0dWF0aW9ucyB3aGVyZQotICB0b29scyBzdWNoIGFzIHZhbGdyaW5kIGFyZSBub3QgYXZhaWxhYmxlLCBvciBub3QgYW4gb3B0aW9uLgotPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPC92YXJpYWJsZWxpc3Q+Ci0KLSBVc2UgPG9wdGlvbj5hbGw8L29wdGlvbj4gdG8gZW5hYmxlIGFsbCB0cmFjaW5nIGZsYWdzLgotICA8L3BhcmE+Ci08L2Zvcm1hbHBhcmE+Ci0KLTxmb3JtYWxwYXJhIGlkPSJHU1RfREVCVUdfRklMRSI+Ci0gIDx0aXRsZT48ZW52YXI+R1NUX0RFQlVHX0ZJTEU8L2VudmFyPjwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci0gIFNldCB0aGlzIHZhcmlhYmxlIHRvIGEgZmlsZSBwYXRoIHRvIHJlZGlyZWN0IGFsbCBHU3RyZWFtZXIgZGVidWcKLSAgbWVzc2FnZXMgdG8gdGhpcyBmaWxlLiBJZiBsZWZ0IHVuc2V0LCBkZWJ1ZyBtZXNzYWdlcyB3aXRoIGJlIG91dHB1dAotICB1bnRvIHRoZSBzdGFuZGFyZCBlcnJvci4KLSAgPC9wYXJhPgotCi08L2Zvcm1hbHBhcmE+Ci0KLTxmb3JtYWxwYXJhIGlkPSJPUkNfQ09ERSI+Ci0gIDx0aXRsZT48ZW52YXI+T1JDX0NPREU8L2VudmFyPjwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci1Vc2VmdWwgT3JjIGVudmlyb25tZW50IHZhcmlhYmxlLiBTZXQgT1JDX0NPREU9ZGVidWcgdG8gZW5hYmxlIGRlYnVnZ2Vycwotc3VjaCBhcyBnZGIgdG8gY3JlYXRlIHVzZWZ1bCBiYWNrdHJhY2VzIGZyb20gT3JjLWdlbmVyYXRlZCBjb2RlLiAgU2V0Ci1PUkNfQ09ERT1iYWNrdXAgb3IgT1JDX0NPREU9ZW11bGF0ZSBpZiB5b3Ugc3VzcGVjdCBPcmMncyBTSU1EIGNvZGUKLWdlbmVyYXRvciBpcyBwcm9kdWNpbmcgaW5jb3JyZWN0IGNvZGUgKFF1aXRlIGEgZmV3IGltcG9ydGFudAotR1N0cmVhbWVyIHBsdWdpbnMgbGlrZSB2aWRlb3Rlc3RzcmMsIGF1ZGlvY29udmVydCBvciBhdWRpb3Jlc2FtcGxlIHVzZSBPcmMpLgotT25lIGNhbiBhbHNvIGNvbWJpbmUgZmxhZ3MgbGlrZSBPUkNfQ09ERT1iYWNrdXAsZGVidWcuCi0gIDwvcGFyYT4KLQotPC9mb3JtYWxwYXJhPgotCi08Zm9ybWFscGFyYSBpZD0iR19ERUJVRyI+Ci0gIDx0aXRsZT48ZW52YXI+R19ERUJVRzwvZW52YXI+PC90aXRsZT4KLQotICA8cGFyYT4KLVVzZWZ1bCBHTGliIGVudmlyb25tZW50IHZhcmlhYmxlLiBTZXQgR19ERUJVRz1mYXRhbF93YXJuaW5ncyB0byBtYWtlCi1HU3RyZWFtZXIgcHJvZ3JhbXMgYWJvcnQgd2hlbiBhIGNyaXRpY2FsIHdhcm5pbmcgc3VjaCBhcyBhbiBhc3NlcnRpb24gZmFpbHVyZQotb2NjdXJzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaW5kIG91dCB3aGljaCBwYXJ0IG9mIHRoZSBjb2RlIGNhdXNlZAotdGhhdCB3YXJuaW5nIHRvIGJlIHRyaWdnZXJlZCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLiBTaW1wbHkgc2V0IEdfREVCVUcKLWFzIG1lbnRpb25lZCBhYm92ZSBhbmQgcnVuIHRoZSBwcm9ncmFtIGluIGdkYiAob3IgbGV0IGl0IGNvcmUgZHVtcCkuIFRoZW4gZ2V0Ci1hIHN0YWNrIHRyYWNlIGluIHRoZSB1c3VhbCB3YXkuCi0gIDwvcGFyYT4KLQotPC9mb3JtYWxwYXJhPgotCi08Zm9ybWFscGFyYSBpZD0iR19TTElDRSI+Ci0gIDx0aXRsZT48ZW52YXI+R19TTElDRTwvZW52YXI+PC90aXRsZT4KLQotICA8cGFyYT4KLVVzZWZ1bCBHTGliIGVudmlyb25tZW50IHZhcmlhYmxlLiBTZXQgR19TTElDRT1hbHdheXMtbWFsbG9jIHdoZW4gcnVubmluZwotR1N0cmVhbWVyIHByb2dyYW1zIGluIHZhbGdyaW5kLCBvciBkZWJ1Z2dpbmcgbWVtb3J5IGxlYWtzIHdpdGggb3RoZXIgdG9vbHMuCi1TZWUgdGhlIEdMaWIgQVBJIHJlZmVyZW5jZSBmb3IgbW9yZSBkZXRhaWxzLgotICA8L3BhcmE+Ci0KLTwvZm9ybWFscGFyYT4KLQotPGZvcm1hbHBhcmEgaWQ9IkdTVF9UQUdfRU5DT0RJTkciPgotICA8dGl0bGU+PGVudmFyPkdTVF9UQUdfRU5DT0RJTkc8L2VudmFyPjwvdGl0bGU+Ci0gIDxwYXJhPgotVHJ5IHRoaXMgY2hhcmFjdGVyIGVuY29kaW5nIGZpcnN0IGZvciB0YWctcmVsYXRlZCBzdHJpbmdzIHdoZXJlIHRoZSBlbmNvZGluZwotaXMgbm90IGRlZmluZWQgYW5kIHdoaWNoIGFyZSBub3QgVVRGLTggYWxyZWFkeS4gQnkgZGVmYXVsdCB0aGUgY3VycmVudCBsb2NhbGUKLXdpbGwgYmUgdHJpZWQgKGlmIG5vdCBVVEYtOCkuCi0gIDwvcGFyYT4KLTwvZm9ybWFscGFyYT4KLQotPGZvcm1hbHBhcmEgaWQ9IkdTVF9UQUdfSUQzX0VOQ09ESU5HIj4KLSAgPHRpdGxlPjxlbnZhcj5HU1RfVEFHX0lEM19FTkNPRElORzwvZW52YXI+PC90aXRsZT4KLSAgPHBhcmE+Ci1UcnkgdGhpcyBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlyc3QgZm9yIElEMyB0YWctcmVsYXRlZCBzdHJpbmdzIHdoZXJlIHRoZQotZW5jb2RpbmcgaXMgbm90IGRlZmluZWQgYW5kIHdoaWNoIGFyZSBub3QgVVRGLTggYWxyZWFkeS4gQnkgZGVmYXVsdCB0aGUgY3VycmVudAotbG9jYWxlIHdpbGwgYmUgdHJpZWQgKGlmIG5vdCBVVEYtOCkuCi0gIDwvcGFyYT4KLTwvZm9ybWFscGFyYT4KLQotPGZvcm1hbHBhcmEgaWQ9IkdTVF9UQUdfSUQzVjFfRU5DT0RJTkciPgotICA8dGl0bGU+PGVudmFyPkdTVF9UQUdfSUQzVjFfRU5DT0RJTkc8L2VudmFyPjwvdGl0bGU+Ci0gIDxwYXJhPgotVHJ5IHRoaXMgY2hhcmFjdGVyIGVuY29kaW5nIGZpcnN0IGZvciBJRDN2MSB0YWctcmVsYXRlZCBzdHJpbmdzIHdoZXJlIHRoZQotZW5jb2RpbmcgZG9lcyBub3QgbG9vayBsaWtlIFVURi04LgotICA8L3BhcmE+Ci08L2Zvcm1hbHBhcmE+Ci0KLTxmb3JtYWxwYXJhIGlkPSJHU1RfR0xfV0lORE9XIj4KLSAgPHRpdGxlPjxlbnZhcj5HU1RfR0xfV0lORE9XPC9lbnZhcj48L3RpdGxlPgotICA8cGFyYT4KLUluZmx1ZW5jZXMgdGhlIHdpbmRvdyBzeXN0ZW0gdG8gdXNlIGJ5IHRoZSBHU3RyZWFtZXIgT3BlbkdMIGxpYnJhcnkuCi1Db21tb24gdmFsdWVzIGFyZSAneDExJywgJ3dheWxhbmQnLCAnd2luMzInIG9yICdjb2NvYScuCi0gIDwvcGFyYT4KLTwvZm9ybWFscGFyYT4KLQotPGZvcm1hbHBhcmEgaWQ9IkdTVF9HTF9QTEFURk9STSI+Ci0gIDx0aXRsZT48ZW52YXI+R1NUX0dMX1BMQVRGT1JNPC9lbnZhcj48L3RpdGxlPgotICA8cGFyYT4KLUluZmx1ZW5jZXMgdGhlIE9wZW5HTCBwbGF0Zm9ybSB0byB1c2UgYnkgdGhlIEdTdHJlYW1lciBPcGVuR0wgbGlicmFyeS4KLUNvbW1vbiB2YWx1ZXMgYXJlICdlZ2wnLCAnZ2x4JywgJ3dnbCcgb3IgJ2NnbCcuCi0gIDwvcGFyYT4KLTwvZm9ybWFscGFyYT4KLQotPGZvcm1hbHBhcmEgaWQ9IkdTVF9HTF9BUEkiPgotICA8dGl0bGU+PGVudmFyPkdTVF9HTF9BUEk8L2VudmFyPjwvdGl0bGU+Ci0gIDxwYXJhPgotSW5mbHVlbmNlcyB0aGUgT3BlbkdMIEFQSSByZXF1ZXN0ZWQgYnkgdGhlIE9wZW5HTCBwbGF0Zm9ybS4KLUNvbW1vbiB2YWx1ZXMgYXJlICdvcGVuZ2wnIG9yICdnbGVzMicuCi0gIDwvcGFyYT4KLTwvZm9ybWFscGFyYT4KLQotPC9yZWZzZWN0Mj4KLQotPC9yZWZzZWN0MT4KLQotPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbGluc3RhbGwubWFrIGIvZG9jcy9odG1saW5zdGFsbC5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMDYyMzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9odG1saW5zdGFsbC5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIHRoaXMgZmlsZSBhZGRzIHJ1bGVzIGZvciBpbnN0YWxsaW5nIGh0bWwgc3VidHJlZXMKLSMgSSByZWFsbHkgZG9uJ3QgbGlrZSB0aGlzIGhhY2ssIGJ1dCBhdXRvbWFrZSBkb2Vzbid0IHNlZW0gdG8gd2FudCB0bwotIyBpbnN0YWxsIGRpcmVjdG9yeSB0cmVlcyA6KAotCi1pZiBET0NfSFRNTAotaW5zdGFsbC1kYXRhLWxvY2FsOiBodG1sCi0JJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKQotCWNwIC1wciAkKEhUTUxfREFUKSAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKQotCi11bmluc3RhbGwtbG9jYWw6Ci0JZm9yIHBhcnQgaW4gJChIVE1MX0RBVCk7IGRvIHJtIC1yZiAkKERFU1RESVIpJChkb2NkaXIpLyQoRE9DKS8kJHBhcnQ7IGRvbmUKLWVsc2UKLWluc3RhbGwtZGF0YS1sb2NhbDoKLXVuaW5zdGFsbC1sb2NhbDoKLWVuZGlmCmRpZmYgLS1naXQgYS9kb2NzL2ltYWdlLWVwcyBiL2RvY3MvaW1hZ2UtZXBzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmM4ZTA0Li4wMDAwMDAwCi0tLSBhL2RvY3MvaW1hZ2UtZXBzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08IUVOVElUWSBpbWFnZSAicHMiPgotPCFFTlRJVFkgSU1BR0UgIkVQUyI+CmRpZmYgLS1naXQgYS9kb2NzL2ltYWdlLXBkZiBiL2RvY3MvaW1hZ2UtcGRmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTJkYTRkLi4wMDAwMDAwCi0tLSBhL2RvY3MvaW1hZ2UtcGRmCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08IUVOVElUWSBpbWFnZSAicGRmIj4KLTwhRU5USVRZIElNQUdFICJFUFMiPgpkaWZmIC0tZ2l0IGEvZG9jcy9pbWFnZS1wbmcgYi9kb2NzL2ltYWdlLXBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI4OTQzZS4uMDAwMDAwMAotLS0gYS9kb2NzL2ltYWdlLXBuZworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPCFFTlRJVFkgaW1hZ2UgInBuZyI+Ci08IUVOVElUWSBJTUFHRSAiUE5HIj4KZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9NYWtlZmlsZS5hbSBiL2RvY3MvbGlicy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkMmFhMC4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KLQotIyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLCBlLmcuICdnbGliJy4KLSNET0NfTU9EVUxFPWdzdHJlYW1lci1saWJzLUBHU1RfQVBJX1ZFUlNJT05ACi1ET0NfTU9EVUxFPWdzdHJlYW1lci1saWJzCi0KLSMgZG9uJ3Qgd2FudCAkKERPQ19NT0RVTEUpLXNjYW4uYyB0byBiZSBidWlsdCB3aXRoIC1XZXJyb3IKLUVSUk9SX0NGTEFHUz0KLQotIyBmb3IgdXBsb2FkLWRvYy5tYWsKLURPQz1nc3RyZWFtZXItbGlicwotRk9STUFUUz1odG1sCi1odG1sOiBodG1sLWJ1aWxkLnN0YW1wCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrCi0KLSMgVGhlIHRvcC1sZXZlbCBTR01MIGZpbGUuIENoYW5nZSBpdCBpZiB5b3Ugd2FudC4KLURPQ19NQUlOX1NHTUxfRklMRT0kKERPQ19NT0RVTEUpLWRvY3Muc2dtbAotCi0jIFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc291cmNlIGNvZGUuCi0jIGd0ay1kb2Mgd2lsbCBzZWFyY2ggYWxsIC5jICYgLmggZmlsZXMgYmVuZWF0aCBoZXJlIGZvciBpbmxpbmUgY29tbWVudHMKLSMgZG9jdW1lbnRpbmcgZnVuY3Rpb25zIGFuZCBtYWNyb3MuCi1ET0NfU09VUkNFX0RJUj0kKHRvcF9zcmNkaXIpL2xpYnMvZ3N0Ci0KLSMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLXNjYW4uCi1TQ0FOX09QVElPTlM9LS1kZXByZWNhdGVkLWd1YXJkcz0iR1NUX0RJU0FCTEVfREVQUkVDQVRFRCIKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtbWtkYi4KLU1LREJfT1BUSU9OUz0tLXNnbWwtbW9kZSAtLW91dHB1dC1mb3JtYXQ9eG1sIC0taWdub3JlLWZpbGVzPSIkKElHTk9SRV9IRklMRVMpIgotCi0jIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1maXhyZWYuCi1GSVhYUkVGX09QVElPTlM9LS1leHRyYS1kaXI9JCh0b3BfYnVpbGRkaXIpL2RvY3MvZ3N0L2h0bWwgXAotCS0tZXh0cmEtZGlyPSQoR0xJQl9QUkVGSVgpL3NoYXJlL2d0ay1kb2MvaHRtbCBcCi0JLS1leHRyYS1kaXI9JChkYXRhZGlyKS9ndGstZG9jL2h0bWwKLQotIyBVc2VkIGZvciBkZXBlbmRlbmNpZXMuCi1IRklMRV9HTE9CPSQodG9wX3NyY2RpcikvbGlicy9nc3QvKi8qLmgKLUNGSUxFX0dMT0I9JCh0b3Bfc3JjZGlyKS9saWJzL2dzdC8qLyouYwotCi0jIEV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byBndGtkb2Mtc2Nhbm9iaiBvciBndGtkb2Mtc2NhbmdvYmouCi1TQ0FOT0JKX09QVElPTlM9LS10eXBlLWluaXQtZnVuYz0iZ3N0X2luaXQoJmFyZ2MsJmFyZ3YpIgotCi0jIEhlYWRlciBmaWxlcyB0byBpZ25vcmUgd2hlbiBzY2FubmluZy4KLUlHTk9SRV9IRklMRVMgPSBcCi0JbGliY2hlY2sgaW50ZXJuYWwtY2hlY2suaCBcCi0JZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2Vwcml2YXRlLmggXAotCWdzdGxmb2NvbnRyb2xzb3VyY2Vwcml2YXRlLmggXAotCWdzdGdldGJpdHNfaW5sLmggXAotCWdzdGluZGV4LmggXAotCWRwLXByaXZhdGUuaCBcCi0JZ3N0bnRwcGFja2V0LmgKLQotIyBJbWFnZXMgdG8gY29weSBpbnRvIEhUTUwgZGlyZWN0b3J5LgotSFRNTF9JTUFHRVMgPSBnZHAtaGVhZGVyLnBuZwotCi0jIEV4dHJhIFNHTUwgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgYnkgJChET0NfTUFJTl9TR01MX0ZJTEUpLgotY29udGVudF9maWxlcyA9Ci0KLSMgT3RoZXIgZmlsZXMgdG8gZGlzdHJpYnV0ZS4KLWV4dHJhX2ZpbGVzID0KLQotIyBDRkxBR1MgYW5kIExERkxBR1MgZm9yIGNvbXBpbGluZyBzY2FuIHByb2dyYW0uIE9ubHkgbmVlZGVkIGlmIHlvdXIgYXBwL2xpYgotIyBjb250YWlucyBHdGtPYmplY3RzL0dPYmplY3RzIGFuZCB5b3Ugd2FudCB0byBkb2N1bWVudCBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzLgotR1RLRE9DX0NGTEFHUyA9IC1JJCh0b3BfYnVpbGRkaXIpIC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMgJChHU1RfT0JKX0NGTEFHUykKLUdUS0RPQ19MSUJTID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR1NUX09CSl9MSUJTKQotCi1HVEtET0NfRVhUUkFfRU5WSVJPTk1FTlQ9IFwKLSAgICBHU1RfUExVR0lOX1NDQU5ORVJfMV8wPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lcgotCi0jIElmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucywgcGxhY2UgdGhlbSBpbiB0aGlzIGZpbGUKLSMgYW5kIHVuY29tbWVudCB0aGlzIGxpbmUuCi1ET0NfT1ZFUlJJREVTID0gJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0Ci0KLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3RrLWRvYy5tYWsKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9NYWtlZmlsZS5pbiBiL2RvY3MvbGlicy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkwM2FjYS4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMDMwICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIHRoaXMgc25pcHBldCBpcyB0byBiZSBpbmNsdWRlZCBieSBib3RoIG91ciBkb2Nib29rIG1hbnVhbHMKLSMgYW5kIGd0ay1kb2MgQVBJIHJlZmVyZW5jZXMKLQotIyBpdCBhZGRzIGFuIHVwbG9hZCB0YXJnZXQgdG8gZWFjaCBvZiB0aGVzZSBkaXIncyBNYWtlZmlsZXMKLQotIyBlYWNoIE1ha2VmaWxlLmFtIHNob3VsZCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6Ci0jIC0gRE9DOiB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkb2N1bWVudGF0aW9uCi0jICAgICAgICAoZmFxLCBtYW51YWwsIHB3ZywgZ3N0cmVhbWVyLCBnc3RyZWFtZXItbGlicykKLSMgLSBGT1JNQVRTOiB0aGUgZm9ybWF0cyBpbiB3aGljaCBET0MgaXMgb3V0cHV0Ci0jICAgICAgICAgICAgKGh0bWwgcHMgcGRmKQotCi0jIGlmIHlvdSB3YW50IHRvIHVzZSBpdCwgbWFrZSBzdXJlIHlvdXIgJEhPTUUvLnNzaC9jb25maWcgZmlsZSBjb250YWlucyB0aGUKLSMgY29ycmVjdCBVc2VyIGVudHJ5IGZvciB0aGUgSG9zdCBlbnRyeSBmb3IgdGhlIERPQ19TRVJWRVIKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBnZW5lcmljIGFuZCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHRob21hczogZXhjZXB0IG9mIGNvdXJzZSB0aGF0IHdlIGRpZAotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZG9jcy9saWJzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ndGstZG9jLm1hayBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLQotIyBkb24ndCB3YW50ICQoRE9DX01PRFVMRSktc2Nhbi5jIHRvIGJlIGJ1aWx0IHdpdGggLVdlcnJvcgotRVJST1JfQ0ZMQUdTID0gCi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotCi0jIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUsIGUuZy4gJ2dsaWInLgotI0RPQ19NT0RVTEU9Z3N0cmVhbWVyLWxpYnMtQEdTVF9BUElfVkVSU0lPTkAKLURPQ19NT0RVTEUgPSBnc3RyZWFtZXItbGlicwotCi0jIGZvciB1cGxvYWQtZG9jLm1hawotRE9DID0gZ3N0cmVhbWVyLWxpYnMKLUZPUk1BVFMgPSBodG1sCi0KLSMgdGhlc2UgdmFyaWFibGVzIGRlZmluZSB0aGUgbG9jYXRpb24gb2YgdGhlIG9ubGluZSBkb2NzCi1ET0NfU0VSVkVSID0gZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZwotRE9DX0JBU0UgPSAvc3J2L2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvd3d3L2RhdGEvZG9jCi1ET0NfVVJMID0gJChET0NfU0VSVkVSKTokKERPQ19CQVNFKQotCi0jIFRoZSB0b3AtbGV2ZWwgU0dNTCBmaWxlLiBDaGFuZ2UgaXQgaWYgeW91IHdhbnQuCi1ET0NfTUFJTl9TR01MX0ZJTEUgPSAkKERPQ19NT0RVTEUpLWRvY3Muc2dtbAotCi0jIFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc291cmNlIGNvZGUuCi0jIGd0ay1kb2Mgd2lsbCBzZWFyY2ggYWxsIC5jICYgLmggZmlsZXMgYmVuZWF0aCBoZXJlIGZvciBpbmxpbmUgY29tbWVudHMKLSMgZG9jdW1lbnRpbmcgZnVuY3Rpb25zIGFuZCBtYWNyb3MuCi1ET0NfU09VUkNFX0RJUiA9ICQodG9wX3NyY2RpcikvbGlicy9nc3QKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2Mtc2Nhbi4KLVNDQU5fT1BUSU9OUyA9IC0tZGVwcmVjYXRlZC1ndWFyZHM9IkdTVF9ESVNBQkxFX0RFUFJFQ0FURUQiCi0KLSMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLW1rZGIuCi1NS0RCX09QVElPTlMgPSAtLXNnbWwtbW9kZSAtLW91dHB1dC1mb3JtYXQ9eG1sIC0taWdub3JlLWZpbGVzPSIkKElHTk9SRV9IRklMRVMpIgotCi0jIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1maXhyZWYuCi1GSVhYUkVGX09QVElPTlMgPSAtLWV4dHJhLWRpcj0kKHRvcF9idWlsZGRpcikvZG9jcy9nc3QvaHRtbCBcCi0JLS1leHRyYS1kaXI9JChHTElCX1BSRUZJWCkvc2hhcmUvZ3RrLWRvYy9odG1sIFwKLQktLWV4dHJhLWRpcj0kKGRhdGFkaXIpL2d0ay1kb2MvaHRtbAotCi0KLSMgVXNlZCBmb3IgZGVwZW5kZW5jaWVzLgotSEZJTEVfR0xPQiA9ICQodG9wX3NyY2RpcikvbGlicy9nc3QvKi8qLmgKLUNGSUxFX0dMT0IgPSAkKHRvcF9zcmNkaXIpL2xpYnMvZ3N0LyovKi5jCi0KLSMgRXh0cmEgb3B0aW9ucyB0byBwYXNzIHRvIGd0a2RvYy1zY2Fub2JqIG9yIGd0a2RvYy1zY2FuZ29iai4KLVNDQU5PQkpfT1BUSU9OUyA9IC0tdHlwZS1pbml0LWZ1bmM9ImdzdF9pbml0KCZhcmdjLCZhcmd2KSIKLQotIyBIZWFkZXIgZmlsZXMgdG8gaWdub3JlIHdoZW4gc2Nhbm5pbmcuCi1JR05PUkVfSEZJTEVTID0gXAotCWxpYmNoZWNrIGludGVybmFsLWNoZWNrLmggXAotCWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlcHJpdmF0ZS5oIFwKLQlnc3RsZm9jb250cm9sc291cmNlcHJpdmF0ZS5oIFwKLQlnc3RnZXRiaXRzX2lubC5oIFwKLQlnc3RpbmRleC5oIFwKLQlkcC1wcml2YXRlLmggXAotCWdzdG50cHBhY2tldC5oCi0KLQotIyBJbWFnZXMgdG8gY29weSBpbnRvIEhUTUwgZGlyZWN0b3J5LgotSFRNTF9JTUFHRVMgPSBnZHAtaGVhZGVyLnBuZwotCi0jIEV4dHJhIFNHTUwgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgYnkgJChET0NfTUFJTl9TR01MX0ZJTEUpLgotY29udGVudF9maWxlcyA9IAotCi0jIE90aGVyIGZpbGVzIHRvIGRpc3RyaWJ1dGUuCi1leHRyYV9maWxlcyA9IAotCi0jIENGTEFHUyBhbmQgTERGTEFHUyBmb3IgY29tcGlsaW5nIHNjYW4gcHJvZ3JhbS4gT25seSBuZWVkZWQgaWYgeW91ciBhcHAvbGliCi0jIGNvbnRhaW5zIEd0a09iamVjdHMvR09iamVjdHMgYW5kIHlvdSB3YW50IHRvIGRvY3VtZW50IHNpZ25hbHMgYW5kIHByb3BlcnRpZXMuCi1HVEtET0NfQ0ZMQUdTID0gLUkkKHRvcF9idWlsZGRpcikgLUkkKHRvcF9idWlsZGRpcikvbGlicyAkKEdTVF9PQkpfQ0ZMQUdTKQotR1RLRE9DX0xJQlMgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NvbnRyb2xsZXIvbGliZ3N0Y29udHJvbGxlci1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L25ldC9saWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChHU1RfT0JKX0xJQlMpCi0KLUdUS0RPQ19FWFRSQV9FTlZJUk9OTUVOVCA9IFwKLSAgICBHU1RfUExVR0lOX1NDQU5ORVJfMV8wPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lcgotCi0KLSMgSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zLCBwbGFjZSB0aGVtIGluIHRoaXMgZmlsZQotIyBhbmQgdW5jb21tZW50IHRoaXMgbGluZS4KLURPQ19PVkVSUklERVMgPSAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQKLUBHVEtfRE9DX1VTRV9MSUJUT09MX0ZBTFNFQEdUS0RPQ19DQyA9ICQoQ0MpICQoSU5DTFVERVMpICQoR1RLRE9DX0RFUFNfQ0ZMQUdTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1AR1RLX0RPQ19VU0VfTElCVE9PTF9UUlVFQEdUS0RPQ19DQyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChJTkNMVURFUykgJChHVEtET0NfREVQU19DRkxBR1MpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUBHVEtfRE9DX1VTRV9MSUJUT09MX0ZBTFNFQEdUS0RPQ19MRCA9ICQoQ0MpICQoR1RLRE9DX0RFUFNfTElCUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykKLUBHVEtfRE9DX1VTRV9MSUJUT09MX1RSVUVAR1RLRE9DX0xEID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9bGluayAkKENDKSAkKEdUS0RPQ19ERVBTX0xJQlMpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpCi1AR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRUBHVEtET0NfUlVOID0gCi1AR1RLX0RPQ19VU0VfTElCVE9PTF9UUlVFQEdUS0RPQ19SVU4gPSAkKExJQlRPT0wpIC0tbW9kZT1leGVjdXRlCi0KLSMgV2Ugc2V0IEdQQVRIIGhlcmU7IHRoaXMgZ2l2ZXMgdXMgc2VtYW50aWNzIGZvciBHTlUgbWFrZQotIyB3aGljaCBhcmUgbW9yZSBsaWtlIG90aGVyIG1ha2UncyBWUEFUSCwgd2hlbiBpdCBjb21lcyB0bwotIyB3aGV0aGVyIGEgc291cmNlIHRoYXQgaXMgYSB0YXJnZXQgb2Ygb25lIHJ1bGUgaXMgdGhlbgotIyBzZWFyY2hlZCBmb3IgaW4gVlBBVEgvR1BBVEguCi0jCi1HUEFUSCA9ICQoc3JjZGlyKQotCi0jIHRob21hczogbWFrZSBkb2NzIHBhcmFsbGVsIGluc3RhbGxhYmxlCi1UQVJHRVRfRElSID0gJChIVE1MX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQAotRVhUUkFfRElTVCA9IFwKLQkkKGNvbnRlbnRfZmlsZXMpCQlcCi0JJChleHRyYV9maWxlcykJCQlcCi0JJChIVE1MX0lNQUdFUykJCQlcCi0JJChET0NfTUFJTl9TR01MX0ZJTEUpCQlcCi0JJChET0NfTU9EVUxFKS50eXBlcwkJXAotCSQoRE9DX09WRVJSSURFUykJCVwKLQkkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dAotCi1ET0NfU1RBTVBTID0gXAotCXNldHVwLWJ1aWxkLnN0YW1wCQlcCi0Jc2Nhbi1idWlsZC5zdGFtcAkJXAotCXNnbWwtYnVpbGQuc3RhbXAJCVwKLQlodG1sLWJ1aWxkLnN0YW1wCQlcCi0Jc2dtbC5zdGFtcAkJXAotCWh0bWwuc3RhbXAKLQotU0NBTk9CSl9GSUxFUyA9IFwKLQkkKERPQ19NT0RVTEUpLmFyZ3MJCVwKLQkkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQkJXAotCSQoRE9DX01PRFVMRSkuaW50ZXJmYWNlcwkJXAotCSQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcwlcCi0JJChET0NfTU9EVUxFKS5zaWduYWxzCQlcCi0JLmxpYnMvJChET0NfTU9EVUxFKS1zY2FuLm8KLQotUkVQT1JUX0ZJTEVTID0gXAotCSQoRE9DX01PRFVMRSktdW5kb2N1bWVudGVkLnR4dCBcCi0JJChET0NfTU9EVUxFKS11bmRlY2xhcmVkLnR4dCBcCi0JJChET0NfTU9EVUxFKS11bnVzZWQudHh0Ci0KLUNMRUFORklMRVMgPSAkKFNDQU5PQkpfRklMRVMpICQoUkVQT1JUX0ZJTEVTKSAkKERPQ19TVEFNUFMpIGRvYy1yZWdpc3RyeS54bWwKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3RrLWRvYy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9saWJzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvbGlicy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9ndGstZG9jLm1hayAkKGFtX19lbXB0eSk6Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLXRhZ3MgVEFHUzoKLQotY3RhZ3MgQ1RBR1M6Ci0KLWNzY29wZSBjc2NvcGVsaXN0OgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAotCSAgZGlzdC1ob29rCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgYWxsLWxvY2FsCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1sb2NhbAotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbWFpbnRhaW5lci1jbGVhbi1sb2NhbAotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtbG9jYWwKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBkaXN0LWhvb2sgXAotCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tbG9jYWwgXAotCWRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgXAotCWluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgXAotCWluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCi0JaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBcCi0JaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAotCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltYWludGFpbmVyLWNsZWFuLWxvY2FsIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzLWFtIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1sb2NhbAotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLWh0bWw6IGh0bWwtYnVpbGQuc3RhbXAKLQotdXBsb2FkOiAkKEZPUk1BVFMpCi0JQGlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICBlY2hvICJQcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAotCSAgaWYgdGVzdCB4JChidWlsZGRpcikgIT0geCQoc3JjZGlyKTsgdGhlbiBcCi0JICAgIGVjaG8gIm1ha2UgdXBsb2FkIGNhbiBvbmx5IGJlIHVzZWQgaWYgc3JjZGlyID09IGJ1aWxkZGlyIjsgXAotCSAgICBleGl0IDE7IFwKLQkgIGZpOyBcCi0JICAjIGd0a2RvYy1yZWJhc2Ugc29tZXRpbWVzIGdldHMgY29uZnVzZWQsIHNvIHJlc2V0IGV2ZXJ5dGhpbmcgdG8gXAotCSAgIyBsb2NhbCBsaW5rcyBiZWZvcmUgcmViYXNpbmcgdG8gb25saW5lIGxpbmtzICAgICAgICAgICAgICAgICAgIFwKLQkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDI+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgXAotCSAgcmViYXNlPWBndGtkb2MtcmViYXNlIC0tdmVyYm9zZSAtLW9ubGluZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWxgIDsgXAotCSAgZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtZSAiT24tKmxpbmUiOyBcCi0JICBmb3IgcmVxIGluIGdsaWIgZ29iamVjdCBnc3RyZWFtZXIgZ3N0cmVhbWVyLWxpYnMgZ3N0LXBsdWdpbnMtYmFzZS1saWJzOyBkbyBcCi0JICAgIGlmICEgKCBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1pIC1lICJPbi0qbGluZS4qLyQkcmVxLyIgKTsgdGhlbiBcCi0JICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCi0JICAgICAgZWNobyAiIENvdWxkIG5vdCBkZXRlcm1pbmUgb25saW5lIGxvY2F0aW9uIGZvciAkJHJlcSBkb2NzLiBDcm9zcy1yZWZlcmVuY2luZyB3aWxsIGJlICIgOyBcCi0JICAgICAgZWNobyAiIGJyb2tlbiwgc28gbm90IHVwbG9hZGluZy4gTWFrZSBzdXJlIHRoZSBsaWJyYXJ5J3MgZ3RrLWRvYyBkb2N1bWVudGF0aW9uIGlzICAgICIgOyBcCi0JICAgICAgZWNobyAiIGluc3RhbGxlZCBzb21ld2hlcmUgaW4gL3Vzci9zaGFyZS9ndGstZG9jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgOyBcCi0JICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCi0JICAgICAgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICBkb25lOyBcCi0JICBleHBvcnQgU1JDPSIkJFNSQyBodG1sIjsgXAotCWZpOyBcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwcyA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucHMiOyBmaTsgXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcGRmID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wZGYiOyBmaTsgXAotCVwKLQkjIHVwbG9hZCByZWxlYXNlcyB0byBib3RoIFguWS8gYW5kIGhlYWQvIHN1YmRpcmVjdG9yaWVzIFwKLQlleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci8kKFBBQ0tBR0VfVkVSU0lPTl9NQUpPUikuJChQQUNLQUdFX1ZFUlNJT05fTUlOT1IpLyQoRE9DKTsgXAotCWVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBta2RpciAtcCAkJERJUjsgXAotCXJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAotCVwKLQlleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci9oZWFkLyQoRE9DKTsgXAotCWVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBta2RpciAtcCAkJERJUjsgXAotCXJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAotCVwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIGh0bWwgPiAvZGV2L251bGw7IHRoZW4gXAotCSAgZWNobyAiVW4tcHJlcGFyaW5nIGRvY3MgZm9yIHVwbG9hZCAocmViYXNpbmcgY3Jvc3MtcmVmZXJlbmNlcykgLi4uIiA7IFwKLQkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDsgXAotCWZpOyBcCi0JZWNobyBEb25lCi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQGFsbC1sb2NhbDogaHRtbC1idWlsZC5zdGFtcAotCi0jIyMjIHNldHVwICMjIyMKLQotQEVOQUJMRV9HVEtfRE9DX1RSVUVAc2V0dXAtYnVpbGQuc3RhbXA6ICQoY29udGVudF9maWxlcykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAktQGlmIHRlc3QgIiQoYWJzX3NyY2RpcikiICE9ICIkKGFic19idWlsZGRpcikiIDsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGVjaG8gJyAgRE9DICAgUHJlcGFyaW5nIGJ1aWxkJzsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBmaWxlcz1gZWNobyAkKERPQ19NQUlOX1NHTUxfRklMRSkgJChET0NfT1ZFUlJJREVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKERPQ19NT0RVTEUpLnR5cGVzICQoY29udGVudF9maWxlcylgOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGlmIHRlc3QgIngkJGZpbGVzIiAhPSAieCIgOyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGZvciBmaWxlIGluICQkZmlsZXMgOyBkbyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAgICAgdGVzdCAtZiAkKGFic19zcmNkaXIpLyQkZmlsZSAmJiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAgICAgICAgIGNwIC1wdSAkKGFic19zcmNkaXIpLyQkZmlsZSAkKGFic19idWlsZGRpcikvIHx8IHRydWU7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGRvbmU7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZmk7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBzZXR1cC1idWlsZC5zdGFtcAotCi0jIyMjIHNjYW4gIyMjIwotCi0jIGluIHRoZSBjYXNlIG9mIG5vbi1zcmNkaXIgYnVpbGRzLCB0aGUgYnVpbHQgZ3N0IGRpcmVjdG9yeSBnZXRzIGFkZGVkCi0jIHRvIGd0ay1kb2Mgc2Nhbm5pbmc7IGJ1dCBvbmx5IHRoZW4sIHRvIGF2b2lkIGR1cGxpY2F0ZXMKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQHNjYW4tYnVpbGQuc3RhbXA6ICQoSEZJTEVfR0xPQikgJChDRklMRV9HTE9CKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIFNjYW5uaW5nIGhlYWRlciBmaWxlcycKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAX3NvdXJjZV9kaXI9JycgOwkJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmb3IgaSBpbiAkKERPQ19TT1VSQ0VfRElSKSA7IGRvCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIF9zb3VyY2VfZGlyPSIkJHtfc291cmNlX2Rpcn0gLS1zb3VyY2UtZGlyPSQkaSIgOwkgICAgICAgIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlkb25lIDsJCQkJCQkJICAgICAgICBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZ3RrZG9jLXNjYW4JCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkKFNDQU5fT1BUSU9OUykgJChFWFRSQV9IRklMRVMpCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkJLS1tb2R1bGU9JChET0NfTU9EVUxFKQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkJHtfc291cmNlX2Rpcn0gICAgICAgICAJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLWlnbm9yZS1oZWFkZXJzPSIkKElHTk9SRV9IRklMRVMpIgotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBpZiBncmVwIC1sICdeLi4qJCQnICQoRE9DX01PRFVMRSkudHlwZXMgPiAvZGV2L251bGw7IHRoZW4JXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBlY2hvICIgIERPQyAgIEludHJvc3BlY3RpbmcgZ29iamVjdHMiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIHNjYW5vYmpfb3B0aW9ucz0iIjsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBndGtkb2Mtc2NhbmdvYmogMj4mMSAtLWhlbHAgfCBncmVwICA+L2Rldi9udWxsICJcLVwtdmVyYm9zZSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgaWYgdGVzdCAiJCQ/IiA9ICIwIjsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBpZiB0ZXN0ICJ4JChWKSIgPSAieDEiOyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgICAgICBzY2Fub2JqX29wdGlvbnM9Ii0tdmVyYm9zZSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPWBjZCAkKHRvcF9idWlsZGRpcikgJiYgcHdkYAlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9QTFVHSU5fUEFUSF8xXzA9CQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIEdTVF9SRUdJU1RSWV8xXzA9ZG9jLXJlZ2lzdHJ5LnhtbAkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICQoR1RLRE9DX0VYVFJBX0VOVklST05NRU5UKQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBDQz0iJChHVEtET0NfQ0MpIiBMRD0iJChHVEtET0NfTEQpIiBSVU49IiQoR1RLRE9DX1JVTikiCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgQ0ZMQUdTPSIkKEdUS0RPQ19DRkxBR1MpICQoQ0ZMQUdTKSIJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBMREZMQUdTPSIkKEdUS0RPQ19MSUJTKSAkKExERkxBR1MpIgkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGd0a2RvYy1zY2FuZ29iaiAtLXR5cGUtaW5pdC1mdW5jPSJnc3RfaW5pdChOVUxMLE5VTEwpIglcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAkJHNjYW5vYmpfb3B0aW9ucyAtLW1vZHVsZT0kKERPQ19NT0RVTEUpIDsJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAllbHNlCQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZvciBpIGluICQoU0NBTk9CSl9GSUxFUykgOyBkbwkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICQoTUtESVJfUCkgJChkaXJuYW1lICQkaSkgOwkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgIHRlc3QgLWYgJCRpIHx8IHRvdWNoICQkaSA7CQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG9uZQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmkKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggc2Nhbi1idWlsZC5zdGFtcAotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAkKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0OiBzY2FuLWJ1aWxkLnN0YW1wCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKLQotIyMjIyB4bWwgIyMjIwotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLWJ1aWxkLnN0YW1wOiBzZXR1cC1idWlsZC5zdGFtcCAkKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChleHBhbmRfY29udGVudF9maWxlcykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBCdWlsZGluZyBYTUwnCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQF9zb3VyY2VfZGlyPScnIDsJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZm9yIGkgaW4gJChET0NfU09VUkNFX0RJUikgOyBkbwkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBfc291cmNlX2Rpcj0iJCR7X3NvdXJjZV9kaXJ9IC0tc291cmNlLWRpcj0kJGkiIDsJICAgICAgICBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZG9uZSA7CQkJCQkJCSAgICAgICAgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWd0a2RvYy1ta2RiIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkgJCR7X3NvdXJjZV9kaXJ9ICAtLWV4cGFuZC1jb250ZW50LWZpbGVzPSIkKGV4cGFuZF9jb250ZW50X2ZpbGVzKSIgLS1tYWluLXNnbWwtZmlsZT0kKERPQ19NQUlOX1NHTUxfRklMRSkgLS1vdXRwdXQtZm9ybWF0PXhtbCAkKE1LREJfT1BUSU9OUykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyB4bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggc2dtbC1idWlsZC5zdGFtcAotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLnN0YW1wOiBzZ21sLWJ1aWxkLnN0YW1wCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKLQotIyMjIyBodG1sICMjIyMKLQotQEVOQUJMRV9HVEtfRE9DX1RSVUVAaHRtbC1idWlsZC5zdGFtcDogc2dtbC5zdGFtcCAkKERPQ19NQUlOX1NHTUxfRklMRSkgJChjb250ZW50X2ZpbGVzKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIEhUTUwnCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1yZiBodG1sCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQG1rZGlyIGh0bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLXByIHhtbCBodG1sCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGNwIC4uL3ZlcnNpb24uZW50aXRpZXMgLi8KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbWtodG1sX29wdGlvbnM9IiI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIGZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmk7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLW1raHRtbCAyPiYxIC0taGVscCB8IGdyZXAgID4vZGV2L251bGwgIlwtXC1wYXRoIjsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWlmIHRlc3QgIiQoPykiID0gIjAiOyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIG1raHRtbF9vcHRpb25zPS0tcGF0aD0iJChhYnNfc3JjZGlyKSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaTsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWNkIGh0bWwgJiYgZ3RrZG9jLW1raHRtbCAkJG1raHRtbF9vcHRpb25zICQoTUtIVE1MX09QVElPTlMpICQoRE9DX01PRFVMRSktQEdTVF9BUElfVkVSU0lPTkAgLi4vJChET0NfTUFJTl9TR01MX0ZJTEUpCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1yZiBodG1sL3htbAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtZiB2ZXJzaW9uLmVudGl0aWVzCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgICggY2QgJChzcmNkaXIpICYmIGNwICQoSFRNTF9JTUFHRVMpICQoYWJzX2J1aWxkZGlyKS9odG1sICkKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQGNsZWFuLWxvY2FsLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKLSMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBybSAtcmYgJChET0NfTU9EVUxFKS50eXBlczsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpCi1ARU5BQkxFX0dUS19ET0NfRkFMU0VAYWxsLWxvY2FsOgotQEVOQUJMRV9HVEtfRE9DX0ZBTFNFQGNsZWFuLWxvY2FsLWd0a2RvYzoKLQotY2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsLWd0a2RvYwotCUBybSAtZiAqfiAqLmJhawotCUBybSAtcmYgLmxpYnMKLQotZGlzdGNsZWFuLWxvY2FsOgotCUBybSAtZiAkKFJFUE9SVF9GSUxFUykgXAotCSAgICAgICAgJChET0NfTU9EVUxFKS1kZWNsLWxpc3QudHh0ICQoRE9DX01PRFVMRSktZGVjbC50eHQKLQlAcm0gLXJmIHRtcGwvKi5zZ21sLmJhawotCUBybSAtZiAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQotCUBybSAtZiAqLnN0YW1wIHx8IHRydWUKLQlAaWYgdGVzdCAiJChhYnNfc3JjZGlyKSIgIT0gIiQoYWJzX2J1aWxkZGlyKSIgOyB0aGVuIFwKLQkgICAgcm0gLWYgJChET0NfTUFJTl9TR01MX0ZJTEUpIDsgXAotCSAgICBybSAtZiAkKERPQ19PVkVSUklERVMpIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLnR5cGVzIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLmludGVyZmFjZXMgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgOyBcCi0JICAgIHJtIC1mICQoY29udGVudF9maWxlcykgOyBcCi0JICAgIHJtIC1yZiB0bXBsLyouc2dtbCA7IFwKLQlmaQotCUBybSAtcmYgKi5vCi0KLW1haW50YWluZXItY2xlYW4tbG9jYWw6IGNsZWFuCi0JQGNkICQoc3JjZGlyKSAmJiBybSAtcmYgaHRtbCBcCi0JCXhtbCAkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQgJChET0NfTU9EVUxFKS1kZWNsLnR4dAotCi0jIHRob21hczogbWFrZSBkb2NzIHBhcmFsbGVsIGluc3RhbGxhYmxlOyBkZXZoZWxwIHJlcXVpcmVzIG1ham9ybWlub3IgdG9vCi1pbnN0YWxsLWRhdGEtbG9jYWw6Ci0JKGluc3RhbGxmaWxlcz1gZWNobyAkKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3NgOyBcCi0JaWYgdGVzdCAiJCRpbnN0YWxsZmlsZXMiID0gJyQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzcyc7IFwKLQl0aGVuIGVjaG8gJy0tIE5vdGhpbmcgdG8gaW5zdGFsbCcgOyBcCi0JZWxzZSBcCi0JICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICBmb3IgaSBpbiAkJGluc3RhbGxmaWxlczsgZG8gXAotCSAgICBlY2hvICctLSBJbnN0YWxsaW5nICckJGkgOyBcCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKLQkgIGRvbmU7IFwKLQkgIGVjaG8gJy0tIEluc3RhbGxpbmcgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyJyA7IFwKLQkgIGlmIHRlc3QgLWUgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyOyB0aGVuIFwKLQkgICAgICAgICAgICAkKElOU1RBTExfREFUQSkgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyIFwKLQkgICAgICAgICAgICAkKERFU1RESVIpJChUQVJHRVRfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyOyBcCi0JICBmaTsgXAotCSAgJChHVEtET0NfUkVCQVNFKSAtLXJlbGF0aXZlIC0tZGVzdC1kaXI9JChERVNURElSKSAtLWh0bWwtZGlyPSQoREVTVERJUikkKFRBUkdFVF9ESVIpIHx8IHRydWUgOyBcCi0JZmkpCi11bmluc3RhbGwtbG9jYWw6Ci0JaWYgdGVzdCAtZCAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgdGhlbiBcCi0JICBybSAtcmYgJChERVNURElSKSQoVEFSR0VUX0RJUikvKjsgXAotCSAgcm1kaXIgLXAgJChERVNURElSKSQoVEFSR0VUX0RJUikgMj4vZGV2L251bGwgfHwgdHJ1ZTsgXAotCWVsc2UgXAotCSAgZWNobyAnLS0gTm90aGluZyB0byB1bmluc3RhbGwnIDsgXAotCWZpOwotCi0jCi0jIFJlcXVpcmUgZ3RrLWRvYyB3aGVuIG1ha2luZyBkaXN0Ci0jCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBkaXN0LWNoZWNrLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUBkaXN0LWNoZWNrLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUAJQGVjaG8gIioqKiBndGstZG9jIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBlbmFibGVkIGluIG9yZGVyIHRvIG1ha2UgZGlzdCIKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUAJQGZhbHNlCi0KLWRpc3QtaG9vazogZGlzdC1jaGVjay1ndGtkb2MgZGlzdC1ob29rLWxvY2FsCi0JbWtkaXIgJChkaXN0ZGlyKS9odG1sCi0JY3AgaHRtbC8qICQoZGlzdGRpcikvaHRtbAotCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS50eXBlcyAkKGRpc3RkaXIpLwotCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChkaXN0ZGlyKS8KLQljZCAkKGRpc3RkaXIpICYmIHJtIC1mICQoRElTVENMRUFORklMRVMpCi0JLWd0a2RvYy1yZWJhc2UgLS1vbmxpbmUgLS1yZWxhdGl2ZSAtLWh0bWwtZGlyPSQoZGlzdGRpcikvaHRtbAotCi0uUEhPTlkgOiBkaXN0LWhvb2stbG9jYWwgZG9jcwotCi0jIGF2b2lkIHNwdXJpb3VzIGJ1aWxkIGVycm9ycyB3aGVuIGRpc3RjaGVja2luZyB3aXRoIC1qTgotLk5PVFBBUkFMTEVMOgotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvZ2RwLWhlYWRlci5wbmcgYi9kb2NzL2xpYnMvZ2RwLWhlYWRlci5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZDA4ZjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2dkcC1oZWFkZXIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbCBiL2RvY3MvbGlicy9nc3RyZWFtZXItbGlicy1kb2NzLnNnbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMWRhNjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLWRvY3Muc2dtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgotICAgICAgICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbCi08IUVOVElUWSAlIHZlcnNpb24tZW50aXRpZXMgU1lTVEVNICJ2ZXJzaW9uLmVudGl0aWVzIj4KLSV2ZXJzaW9uLWVudGl0aWVzOwotPCFFTlRJVFkgJSBsb2NhbC5jb21tb24uYXR0cmliICJ4bWxuczp4aSAgQ0RBVEEgICNGSVhFRCAnaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSciPgotPCFFTlRJVFkgaGFzaCAiIyI+Ci1dPgotPGJvb2sgaWQ9ImluZGV4IiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSI+Ci0gIDxib29raW5mbz4KLSAgICA8dGl0bGU+R1N0cmVhbWVyICZHU1RfQVBJX1ZFUlNJT047IExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci0gICAgPHJlbGVhc2VpbmZvPgotICAgICAgZm9yIEdTdHJlYW1lciBMaWJyYXJ5ICZHU1RfQVBJX1ZFUlNJT047ICgmR1NUX1ZFUlNJT047KQotICAgICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgb24tbGluZSBhdAotICAgICAgPHVsaW5rIHJvbGU9Im9ubGluZS1sb2NhdGlvbiIgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItbGlicy9odG1sLyI+aHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLWxpYnMvaHRtbC88L3VsaW5rPi4KLSAgICA8L3JlbGVhc2VpbmZvPgotICA8L2Jvb2tpbmZvPgotICA8cGFydCBpZD0iZ3N0cmVhbWVyLWxpYnMiPgotICAgIDx0aXRsZT5HU3RyZWFtZXIgTGlicmFyaWVzPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgVG8gZWFzZSB0aGUgY3JlYXRpb24gb2YgcGx1Z2lucywgYSBsaWJyYXJ5IHN5c3RlbSB3YXMgY3JlYXRlZC4gVGhlIG1vc3QgY29tbW9uCi0gICAgICBmdW5jdGlvbnMgZm9yIGEgcGx1Z2luIGNhbiBiZSBmb3VuZCBpbiBhIGxpYnJhcnkuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgR1N0cmVhbWVyIHByb3ZpZGVzIHNvbWUgc3RhbmRhcmQgbGlicmFyaWVzIHlvdSBjYW4gdXNlIHRvIGNyZWF0ZSBwbHVnaW5zLgotICAgIDwvcGFyYT4KLQotICAgIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItYmFzZSI+Ci0gICAgICA8dGl0bGU+R1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIGxpYmdzdGJhc2UtJkdTVF9BUElfVkVSU0lPTjsuc28gcHJvdmlkZXMgc29tZSBiYXNlIGNsYXNzZXMgdG8gYmUgZXh0ZW5kZWQKLSAgICAgICAgYnkgZWxlbWVudHMgYW5kIHV0aWxsaXR5IGNsYXNzZXMgdGhhdCBhcmUgbW9zdCB1c2VmdWwgZm9yIHBsdWdpbiBkZXZlbG9wZXJzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0YmFzZXBhcnNlLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RiYXNlc3JjLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RiYXNlc2luay54bWwiIC8+Ci0gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0YmFzZXRyYW5zZm9ybS54bWwiIC8+Ci0gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0cHVzaHNyYy54bWwiIC8+Ci0KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RhZGFwdGVyLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RiaXRyZWFkZXIueG1sIiAvPgotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJ5dGVyZWFkZXIueG1sIiAvPgotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGJ5dGV3cml0ZXIueG1sIiAvPgotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNvbGxlY3RwYWRzLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RmbG93Y29tYmluZXIueG1sIiAvPgotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHR5cGVmaW5kaGVscGVyLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RkYXRhcXVldWUueG1sIiAvPgotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHF1ZXVlYXJyYXkueG1sIiAvPgotICAgIDwvY2hhcHRlcj4KLQotICAgIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItY29udHJvbCI+Ci0gICAgICA8dGl0bGU+R1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2w8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIGxpYmdzdGNvbnRyb2xsZXItJkdTVF9BUElfVkVSU0lPTjsuc28gcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBhbmltYXRlCi0gICAgICAgIGVsZW1lbnQgcHJvcGVydGllcyBvdmVyIHRpbWUuCi0gICAgICA8L3BhcmE+Ci0KLQkJCTx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RhcmdiY29udHJvbGJpbmRpbmcueG1sIiAvPgotCQkJPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLnhtbCIgLz4KLQotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS54bWwiIC8+Ci0gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0bGZvY29udHJvbHNvdXJjZS54bWwiIC8+Ci0gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UueG1sIiAvPgotICAgIDwvY2hhcHRlcj4KLQotICAgIDxjaGFwdGVyIGlkPSJnc3RyZWFtZXItbmV0Ij4KLSAgICAgIDx0aXRsZT5HU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBsaWJnc3RuZXQtJkdTVF9BUElfVkVSU0lPTjsuc28gcHJvdmlkZXMgbmV0d29yayBlbGVtZW50cyBhbmQgb2JqZWN0cy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdG5ldGFkZHJlc3NtZXRhLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RuZXRjbGllbnRjbG9jay54bWwiIC8+Ci0gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RuZXR0aW1lcGFja2V0LnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RuZXR0aW1lcHJvdmlkZXIueG1sIiAvPgotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdHB0cGNsb2NrLnhtbCIgLz4KLSAgICA8L2NoYXB0ZXI+Ci0KLSAgICA8Y2hhcHRlciBpZD0iZ3N0cmVhbWVyLWNoZWNrIj4KLSAgICAgIDx0aXRsZT5HU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBsaWJnc3RjaGVjay0mR1NUX0FQSV9WRVJTSU9OOy5zbyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciB3cml0aW5nCi0gICAgICAgIHVuaXQgdGVzdHMgdGhhdCB1c2UgdGhlIGNoZWNrIGZyYW1ld29yay4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2dzdGNoZWNrLnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RjaGVja2J1ZmZlcnN0cmF3LnhtbCIgLz4KLSAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9nc3RjaGVja2NvbnNpc3RlbmN5Y2hlY2tlci54bWwiIC8+Ci0gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0aGFybmVzcy54bWwiIC8+Ci0gICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZ3N0dGVzdGNsb2NrLnhtbCIgLz4KLSAgICA8L2NoYXB0ZXI+Ci0gIDwvcGFydD4KLQotICA8Y2hhcHRlciBpZD0iZ3N0cmVhbWVyLWhpZXJhcmNoeSI+Ci0gICAgPHRpdGxlPk9iamVjdCBIaWVyYXJjaHk8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC90cmVlX2luZGV4LnNnbWwiLz4KLSAgPC9jaGFwdGVyPgotCi0gIDxpbmRleD4KLSAgICA8dGl0bGU+QVBJIEluZGV4PC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LWZ1bGwueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+Ci0gIDwvaW5kZXg+Ci0gIDxpbmRleCByb2xlPSJkZXByZWNhdGVkIj4KLSAgICA8dGl0bGU+SW5kZXggb2YgZGVwcmVjYXRlZCBBUEk8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtZGVwcmVjYXRlZC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLSAgPC9pbmRleD4KLSAgPGluZGV4PgotICAgIDx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMTA8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtMS4xMC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLSAgPC9pbmRleD4KLSAgPGluZGV4PgotICAgIDx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuODwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC0xLjgueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+Ci0gIDwvaW5kZXg+Ci0gIDxpbmRleD4KLSAgICA8dGl0bGU+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjY8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtMS42LnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgotICA8L2luZGV4PgotICA8aW5kZXg+Ci0gICAgPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS40PC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LTEuNC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLSAgPC9pbmRleD4KLSAgPGluZGV4PgotICAgIDx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMjwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC0xLjIueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+Ci0gIDwvaW5kZXg+Ci0gIDxpbmRleD4KLSAgICA8dGl0bGU+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjAuMTwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC0xLjAuMS54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLSAgPC9pbmRleD4KLQotICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYW5ub3RhdGlvbi1nbG9zc2FyeS54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLW92ZXJyaWRlcy50eHQgYi9kb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtb3ZlcnJpZGVzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtb3ZlcnJpZGVzLnR4dAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0IGIvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLXNlY3Rpb25zLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3YjkxOC4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvZ3N0cmVhbWVyLWxpYnMtc2VjdGlvbnMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTM3MiArMCwwIEBACi0jIEdTdHJlYW1lciBMaWJyYXJpZXMgQVBJIHJlZmVyZW5jZSBzZWN0aW9ucwotCi0jIyBwbGVhc2UgYWRkIHNlY3Rpb25zIGluIGFscGhhYmV0aWNhbCBvcmRlciB1c2luZyB0aGUgZm9sbG93aW5nIHRlbXBsYXRlCi0jIGxlYXZlIHR3byBlbXB0eSBsaW5lcyBiZXR3ZWVuIHNlY3Rpb25zCi0jIDxTRUNUSU9OPgotIyA8RklMRT5nc3R4eHg8L0ZJTEU+Ci0jIDxUSVRMRT5Hc3RYeHg8L1RJVExFPgotIyB0eXBlZGVmcwotIyBtYWNyb3MKLSMgY29uc3RydWN0b3IKLSMgbWV0aG9kcwotIyA8U1VCU0VDVElPTiBTdGFuZGFyZD4KLSMgPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLSMgPC9TRUNUSU9OPgotCi0jIGNvbnRyb2wgYmluZGluZyBjbGFzc2VzCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0YXJnYmNvbnRyb2xiaW5kaW5nPC9GSUxFPgotPFRJVExFPkdzdEFSR0JDb250cm9sQmluZGluZzwvVElUTEU+Ci08SU5DTFVERT5saWJzL2NvbnRyb2xsZXIvZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmg8L0lOQ0xVREU+Ci1nc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfbmV3Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEFSR0JDb250cm9sQmluZGluZwotR3N0QVJHQkNvbnRyb2xCaW5kaW5nQ2xhc3MKLUdTVF9BUkdCX0NPTlRST0xfQklORElORwotR1NUX0FSR0JfQ09OVFJPTF9CSU5ESU5HX0NMQVNTCi1HU1RfQVJHQl9DT05UUk9MX0JJTkRJTkdfR0VUX0NMQVNTCi1HU1RfSVNfQVJHQl9DT05UUk9MX0JJTkRJTkcKLUdTVF9JU19BUkdCX0NPTlRST0xfQklORElOR19DTEFTUwotR1NUX1RZUEVfQVJHQl9DT05UUk9MX0JJTkRJTkcKLWdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGRpcmVjdGNvbnRyb2xiaW5kaW5nPC9GSUxFPgotPFRJVExFPkdzdERpcmVjdENvbnRyb2xCaW5kaW5nPC9USVRMRT4KLTxJTkNMVURFPmxpYnMvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oPC9JTkNMVURFPgotZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3Ci1nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXdfYWJzb2x1dGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDb252ZXJ0VmFsdWUKLUdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ29udmVydEdWYWx1ZQotR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcKLUdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ2xhc3MKLUdTVF9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HCi1HU1RfRElSRUNUX0NPTlRST0xfQklORElOR19DTEFTUwotR1NUX0RJUkVDVF9DT05UUk9MX0JJTkRJTkdfR0VUX0NMQVNTCi1HU1RfSVNfRElSRUNUX0NPTlRST0xfQklORElORwotR1NUX0lTX0RJUkVDVF9DT05UUk9MX0JJTkRJTkdfQ0xBU1MKLUdTVF9UWVBFX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcKLWdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLSMgY29udHJvbCBzb3VyY2UgY2xhc3NlcwotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlPC9GSUxFPgotPFRJVExFPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9USVRMRT4KLTxJTkNMVURFPmxpYnMvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oPC9JTkNMVURFPgotR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UKLUdzdENvbnRyb2xQb2ludAotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyCi1nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0Ci1nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdAotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9hbGwKLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldAotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbAotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9jb3VudAotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfaW52YWxpZGF0ZV9jYWNoZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzCi1Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZVByaXZhdGUKLUdTVF9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRQotR1NUX0lTX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFCi1HU1RfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0VfQ0xBU1MKLUdTVF9JU19USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRV9DTEFTUwotR1NUX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFX0dFVF9DTEFTUwotR1NUX1RZUEVfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0UKLUdTVF9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRV9MT0NLCi1HU1RfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0VfVU5MT0NLCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF90eXBlCi1nc3RfY29udHJvbF9wb2ludF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlPC9GSUxFPgotPFRJVExFPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9USVRMRT4KLTxJTkNMVURFPmxpYnMvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oPC9JTkNMVURFPgotR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UKLUdzdEludGVycG9sYXRpb25Nb2RlCi1nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzcwotR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VQcml2YXRlCi1HU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRQotR1NUX0lTX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UKLUdTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX0NMQVNTCi1HU1RfSVNfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRV9DTEFTUwotR1NUX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0VfR0VUX0NMQVNTCi1HU1RfVFlQRV9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFCi1HU1RfVFlQRV9JTlRFUlBPTEFUSU9OX01PREUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfdHlwZQotZ3N0X2ludGVycG9sYXRpb25fbW9kZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGxmb2NvbnRyb2xzb3VyY2U8L0ZJTEU+Ci08VElUTEU+R3N0TEZPQ29udHJvbFNvdXJjZTwvVElUTEU+Ci08SU5DTFVERT5saWJzL2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oPC9JTkNMVURFPgotR3N0TEZPQ29udHJvbFNvdXJjZQotR3N0TEZPV2F2ZWZvcm0KLWdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdExGT0NvbnRyb2xTb3VyY2VDbGFzcwotR3N0TEZPQ29udHJvbFNvdXJjZVByaXZhdGUKLUdTVF9JU19MRk9fQ09OVFJPTF9TT1VSQ0UKLUdTVF9JU19MRk9fQ09OVFJPTF9TT1VSQ0VfQ0xBU1MKLUdTVF9MRk9fQ09OVFJPTF9TT1VSQ0UKLUdTVF9MRk9fQ09OVFJPTF9TT1VSQ0VfQ0xBU1MKLUdTVF9MRk9fQ09OVFJPTF9TT1VSQ0VfR0VUX0NMQVNTCi1HU1RfVFlQRV9MRk9fQ09OVFJPTF9TT1VSQ0UKLUdTVF9UWVBFX0xGT19XQVZFRk9STQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKLWdzdF9sZm9fd2F2ZWZvcm1fZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3R0cmlnZ2VyY29udHJvbHNvdXJjZTwvRklMRT4KLTxUSVRMRT5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvVElUTEU+Ci08SU5DTFVERT5saWJzL2NvbnRyb2xsZXIvZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuaDwvSU5DTFVERT4KLUdzdFRyaWdnZXJDb250cm9sU291cmNlCi1nc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9uZXcKLUdTVF9UWVBFX1RSSUdHRVJfV0FWRUZPUk0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2VDbGFzcwotR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2VQcml2YXRlCi1HU1RfVFJJR0dFUl9DT05UUk9MX1NPVVJDRQotR1NUX0lTX1RSSUdHRVJfQ09OVFJPTF9TT1VSQ0UKLUdTVF9UUklHR0VSX0NPTlRST0xfU09VUkNFX0NMQVNTCi1HU1RfSVNfVFJJR0dFUl9DT05UUk9MX1NPVVJDRV9DTEFTUwotR1NUX1RSSUdHRVJfQ09OVFJPTF9TT1VSQ0VfR0VUX0NMQVNTCi1HU1RfVFlQRV9UUklHR0VSX0NPTlRST0xfU09VUkNFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotIyBiYXNlIGNsYXNzZXMKLQotPFNFQ1RJT04+Ci08RklMRT5nc3RhZGFwdGVyPC9GSUxFPgotPFRJVExFPkdzdEFkYXB0ZXI8L1RJVExFPgotPElOQ0xVREU+Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPC9JTkNMVURFPgotR3N0QWRhcHRlcgotZ3N0X2FkYXB0ZXJfbmV3Ci1nc3RfYWRhcHRlcl9jbGVhcgotZ3N0X2FkYXB0ZXJfcHVzaAotZ3N0X2FkYXB0ZXJfbWFwCi1nc3RfYWRhcHRlcl91bm1hcAotZ3N0X2FkYXB0ZXJfY29weQotZ3N0X2FkYXB0ZXJfY29weV9ieXRlcwotZ3N0X2FkYXB0ZXJfZmx1c2gKLWdzdF9hZGFwdGVyX2F2YWlsYWJsZQotZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QKLWdzdF9hZGFwdGVyX3Rha2UKLWdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyCi1nc3RfYWRhcHRlcl9nZXRfYnVmZmVyCi1nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0Ci1nc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2Zhc3QKLWdzdF9hZGFwdGVyX3Rha2VfbGlzdAotZ3N0X2FkYXB0ZXJfZ2V0X2xpc3QKLWdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3QKLWdzdF9hZGFwdGVyX2dldF9idWZmZXJfbGlzdAotZ3N0X2FkYXB0ZXJfcHJldl9wdHMKLWdzdF9hZGFwdGVyX3ByZXZfZHRzCi1nc3RfYWRhcHRlcl9wcmV2X3B0c19hdF9vZmZzZXQKLWdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldAotZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQKLWdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250Ci1nc3RfYWRhcHRlcl9kdHNfYXRfZGlzY29udAotZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQKLWdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udAotZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyCi1nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlawotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBZGFwdGVyQ2xhc3MKLUdzdEFkYXB0ZXJQcml2YXRlCi1HU1RfQURBUFRFUgotR1NUX0lTX0FEQVBURVIKLUdTVF9UWVBFX0FEQVBURVIKLUdTVF9BREFQVEVSX0NMQVNTCi1HU1RfSVNfQURBUFRFUl9DTEFTUwotR1NUX0FEQVBURVJfR0VUX0NMQVNTCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RiYXNlcGFyc2U8L0ZJTEU+Ci08VElUTEU+R3N0QmFzZVBhcnNlPC9USVRMRT4KLTxJTkNMVURFPmdzdC9iYXNlL2dzdGJhc2VwYXJzZS5oPC9JTkNMVURFPgotR3N0QmFzZVBhcnNlCi1Hc3RCYXNlUGFyc2VDbGFzcwotCi1nc3RfYmFzZV9wYXJzZV9tZXJnZV90YWdzCi1nc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb24KLWdzdF9iYXNlX3BhcnNlX3NldF9hdmVyYWdlX2JpdHJhdGUKLWdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZQotZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoCi1nc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUKLWdzdF9iYXNlX3BhcnNlX3NldF9oYXNfdGltaW5nX2luZm8KLWdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlCi1nc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeQotZ3N0X2Jhc2VfcGFyc2Vfc2V0X2luZmVyX3RzCi1nc3RfYmFzZV9wYXJzZV9zZXRfcHRzX2ludGVycG9sYXRpb24KLWdzdF9iYXNlX3BhcnNlX3NldF90c19hdF9vZmZzZXQKLWdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdAotZ3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5Ci0KLUdzdEJhc2VQYXJzZUZyYW1lCi1Hc3RCYXNlUGFyc2VGcmFtZUZsYWdzCi1nc3RfYmFzZV9wYXJzZV9mcmFtZV9uZXcKLWdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQKLWdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUKLQotZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZQotZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lCi0KLUdTVF9CQVNFX1BBUlNFX0RSQUlOSU5HCi1HU1RfQkFTRV9QQVJTRV9GTEFHX0RSQUlOSU5HCi1HU1RfQkFTRV9QQVJTRV9GTEFHX0xPU1RfU1lOQwotR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVECi1HU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkMKLUdTVF9CQVNFX1BBUlNFX1NJTktfUEFECi1HU1RfQkFTRV9QQVJTRV9TUkNfUEFECi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEJhc2VQYXJzZVByaXZhdGUKLUdTVF9CQVNFX1BBUlNFCi1HU1RfQkFTRV9QQVJTRV9DQVNUCi1HU1RfSVNfQkFTRV9QQVJTRQotR1NUX1RZUEVfQkFTRV9QQVJTRQotR1NUX0JBU0VfUEFSU0VfQ0xBU1MKLUdTVF9JU19CQVNFX1BBUlNFX0NMQVNTCi1HU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYmFzZV9wYXJzZV9nZXRfdHlwZQotZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RiYXNlc3JjPC9GSUxFPgotPFRJVExFPkdzdEJhc2VTcmM8L1RJVExFPgotPElOQ0xVREU+Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPC9JTkNMVURFPgotR3N0QmFzZVNyYwotR3N0QmFzZVNyY0NsYXNzCi1Hc3RCYXNlU3JjRmxhZ3MKLQotZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZwotZ3N0X2Jhc2Vfc3JjX3N0YXJ0X3dhaXQKLWdzdF9iYXNlX3NyY19zdGFydF9jb21wbGV0ZQotZ3N0X2Jhc2Vfc3JjX2lzX2xpdmUKLWdzdF9iYXNlX3NyY19zZXRfbGl2ZQotZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQKLWdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5Ci1nc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZQotZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUKLWdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wCi1nc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcAotZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemUKLWdzdF9iYXNlX3NyY19zZXRfYXV0b21hdGljX2VvcwotZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50Ci1nc3RfYmFzZV9zcmNfc2V0X2NhcHMKLWdzdF9iYXNlX3NyY19nZXRfYWxsb2NhdG9yCi1nc3RfYmFzZV9zcmNfZ2V0X2J1ZmZlcl9wb29sCi1nc3RfYmFzZV9zcmNfaXNfYXN5bmMKLWdzdF9iYXNlX3NyY19zZXRfYXN5bmMKLQotR1NUX0JBU0VfU1JDX1BBRAotR1NUX0JBU0VfU1JDX0lTX1NUQVJURUQKLUdTVF9CQVNFX1NSQ19JU19TVEFSVElORwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RCYXNlU3JjUHJpdmF0ZQotR1NUX0JBU0VfU1JDCi1HU1RfQkFTRV9TUkNfQ0FTVAotR1NUX0lTX0JBU0VfU1JDCi1HU1RfVFlQRV9CQVNFX1NSQwotR1NUX0JBU0VfU1JDX0NMQVNTCi1HU1RfSVNfQkFTRV9TUkNfQ0xBU1MKLUdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYmFzZV9zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RiYXNlc2luazwvRklMRT4KLTxUSVRMRT5Hc3RCYXNlU2luazwvVElUTEU+Ci08SU5DTFVERT5nc3QvYmFzZS9nc3RiYXNlc2luay5oPC9JTkNMVURFPgotR3N0QmFzZVNpbmsKLUdzdEJhc2VTaW5rQ2xhc3MKLQotZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5Ci1nc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5Ci1nc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwKLWdzdF9iYXNlX3Npbmtfd2FpdAotZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwKLWdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jawotZ3N0X2Jhc2Vfc2lua19zZXRfc3luYwotZ3N0X2Jhc2Vfc2lua19nZXRfc3luYwotZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzCi1nc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3MKLWdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkCi1nc3RfYmFzZV9zaW5rX2lzX3Fvc19lbmFibGVkCi1nc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkCi1nc3RfYmFzZV9zaW5rX2lzX2FzeW5jX2VuYWJsZWQKLWdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldAotZ3N0X2Jhc2Vfc2lua19nZXRfdHNfb2Zmc2V0Ci1nc3RfYmFzZV9zaW5rX3NldF9yZW5kZXJfZGVsYXkKLWdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheQotZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9zYW1wbGUKLWdzdF9iYXNlX3Npbmtfc2V0X2Jsb2Nrc2l6ZQotZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplCi1nc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lCi1nc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lCi1nc3RfYmFzZV9zaW5rX3NldF9tYXhfYml0cmF0ZQotZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2JpdHJhdGUKLWdzdF9iYXNlX3Npbmtfc2V0X2xhc3Rfc2FtcGxlX2VuYWJsZWQKLWdzdF9iYXNlX3NpbmtfaXNfbGFzdF9zYW1wbGVfZW5hYmxlZAotCi1HU1RfQkFTRV9TSU5LX1BBRAotR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05ECi1HU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0sKLUdTVF9CQVNFX1NJTktfUFJFUk9MTF9CUk9BRENBU1QKLUdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLCi1HU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMCi1HU1RfQkFTRV9TSU5LX1BSRVJPTExfVFJZTE9DSwotR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSwotR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQKLUdTVF9CQVNFX1NJTktfUFJFUk9MTF9XQUlUX1VOVElMCi0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX0JBU0VfU0lOSwotR1NUX0JBU0VfU0lOS19DQVNUCi1HU1RfSVNfQkFTRV9TSU5LCi1HU1RfVFlQRV9CQVNFX1NJTksKLUdTVF9CQVNFX1NJTktfQ0xBU1MKLUdTVF9JU19CQVNFX1NJTktfQ0xBU1MKLUdTVF9CQVNFX1NJTktfR0VUX0NMQVNTCi08U1VCU0VDVElPTiBQcml2YXRlPgotR3N0QmFzZVNpbmtQcml2YXRlCi1nc3RfYmFzZV9zaW5rX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RiYXNldHJhbnNmb3JtPC9GSUxFPgotPFRJVExFPkdzdEJhc2VUcmFuc2Zvcm08L1RJVExFPgotPElOQ0xVREU+Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPC9JTkNMVURFPgotR3N0QmFzZVRyYW5zZm9ybQotR3N0QmFzZVRyYW5zZm9ybUNsYXNzCi0KLWdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaAotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaAotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcmVmZXJfcGFzc3Rocm91Z2gKLWdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZQotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZQotZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkCi1nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkCi1nc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvcwotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUKLWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYWxsb2NhdG9yCi1nc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X2J1ZmZlcl9wb29sCi1nc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc2luawotZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3NyYwotZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9zcmNfY2FwcwotCi1HU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FCi1HU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX05BTUUKLUdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX1BBRAotR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQKLQotR1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRAotCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9CQVNFX1RSQU5TRk9STQotR1NUX0lTX0JBU0VfVFJBTlNGT1JNCi1HU1RfVFlQRV9CQVNFX1RSQU5TRk9STQotR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTCi1HU1RfSVNfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MKLUdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MKLUdTVF9CQVNFX1RSQU5TRk9STV9DQVNUCi08U1VCU0VDVElPTiBQcml2YXRlPgotR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUKLWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Yml0cmVhZGVyPC9GSUxFPgotPFRJVExFPkdzdEJpdFJlYWRlcjwvVElUTEU+Ci08SU5DTFVERT5nc3QvYmFzZS9nc3RiaXRyZWFkZXIuaDwvSU5DTFVERT4KLUdzdEJpdFJlYWRlcgotCi1HU1RfQklUX1JFQURFUl9JTklUCi0KLWdzdF9iaXRfcmVhZGVyX25ldwotZ3N0X2JpdF9yZWFkZXJfZnJlZQotCi1nc3RfYml0X3JlYWRlcl9pbml0Ci0KLWdzdF9iaXRfcmVhZGVyX2dldF9wb3MKLWdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcKLWdzdF9iaXRfcmVhZGVyX3NldF9wb3MKLWdzdF9iaXRfcmVhZGVyX2dldF9zaXplCi1nc3RfYml0X3JlYWRlcl9za2lwCi1nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUKLQotZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2Ci1nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIKLWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NAotZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDgKLQotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNgotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMgotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NAotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4Ci0KLWdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkCi1nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkCi0KLWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWQKLWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMl91bmNoZWNrZWQKLWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NF91bmNoZWNrZWQKLWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZAotCi1nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZAotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMl91bmNoZWNrZWQKLWdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkCi1nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDhfdW5jaGVja2VkCi0KLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1HU1RfQklUX1JFQURFUgotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdGJ5dGVyZWFkZXI8L0ZJTEU+Ci08VElUTEU+R3N0Qnl0ZVJlYWRlcjwvVElUTEU+Ci08SU5DTFVERT5nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg8L0lOQ0xVREU+Ci1Hc3RCeXRlUmVhZGVyCi0KLUdTVF9CWVRFX1JFQURFUl9JTklUCi0KLWdzdF9ieXRlX3JlYWRlcl9uZXcKLWdzdF9ieXRlX3JlYWRlcl9mcmVlCi0KLWdzdF9ieXRlX3JlYWRlcl9pbml0Ci0KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXIKLWdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlcgotCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvcwotZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcKLWdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemUKLWdzdF9ieXRlX3JlYWRlcl9za2lwCi0KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OAotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZQotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZQotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZQotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZQotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZQotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZQotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZQotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZQotCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZQotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUKLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZQotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUKLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZQotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGUKLQotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmUKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZQotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZQotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmUKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlCi0KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmUKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZQotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlCi1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGUKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZQotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlCi1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmUKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZQotCi0KLWdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZQotZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGUKLWdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZQotCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlCi0KLWdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YQotZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhCi0KLWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIKLWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlawotCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZwotZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmOAotCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmcKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4Ci0KLWdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nCi1nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4Ci1nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNgotZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMzIKLQotZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nCi1nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOAotZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2Ci1nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIKLQotZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkCi0KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OF91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlX3VuY2hlY2tlZAotCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWQKLQotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OF91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGVfdW5jaGVja2VkCi0KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4X3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlX3VuY2hlY2tlZAotCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkCi0KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmVfdW5jaGVja2VkCi0KLWdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YV91bmNoZWNrZWQKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkCi0KLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1HU1RfQllURV9SRUFERVIKLSMgc2VlbXMgdG8gYmUgYSBoZWFkZXIgcGFyc2luZyBidWcKLWdfbWVtZHVwCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Ynl0ZXdyaXRlcjwvRklMRT4KLTxUSVRMRT5Hc3RCeXRlV3JpdGVyPC9USVRMRT4KLTxJTkNMVURFPmdzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaDwvSU5DTFVERT4KLUdzdEJ5dGVXcml0ZXIKLQotZ3N0X2J5dGVfd3JpdGVyX25ldwotZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX2RhdGEKLWdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9zaXplCi0KLWdzdF9ieXRlX3dyaXRlcl9pbml0Ci1nc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX2RhdGEKLWdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZQotCi1nc3RfYnl0ZV93cml0ZXJfZnJlZQotZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXIKLWdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YQotCi1nc3RfYnl0ZV93cml0ZXJfcmVzZXQKLWdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEKLWdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlcgotCi1nc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcwotZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MKLWdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nCi1nc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemUKLWdzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZQotCi1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDgKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGUKLQotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OAotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlCi1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZQotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlCi1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZQotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlCi0KLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZQotZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlCi1nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmUKLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZQotCi1nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZwotZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTYKLWdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjMyCi1nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4Ci0KLWdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YQotZ3N0X2J5dGVfd3JpdGVyX2ZpbGwKLQotZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXIKLWdzdF9ieXRlX3dyaXRlcl9wdXRfYnVmZmVyX3VuY2hlY2tlZAotCi1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDhfdW5jaGVja2VkCi1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZV91bmNoZWNrZWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmVfdW5jaGVja2VkCi1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZAotZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV91bmNoZWNrZWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfdW5jaGVja2VkCi1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZV91bmNoZWNrZWQKLQotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkCi1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZV91bmNoZWNrZWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX3VuY2hlY2tlZAotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkCi1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZV91bmNoZWNrZWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZAotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkCi0KLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZV91bmNoZWNrZWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV91bmNoZWNrZWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQKLQotZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZAotZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfdW5jaGVja2VkCi08U1VCU0VDVElPTiBQcml2YXRlPgotR1NUX0JZVEVfV1JJVEVSCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Y29sbGVjdHBhZHM8L0ZJTEU+Ci08VElUTEU+R3N0Q29sbGVjdFBhZHM8L1RJVExFPgotPElOQ0xVREU+Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaDwvSU5DTFVERT4KLUdzdENvbGxlY3RQYWRzCi1Hc3RDb2xsZWN0RGF0YQotCi1Hc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkKLUdzdENvbGxlY3RQYWRzQnVmZmVyRnVuY3Rpb24KLUdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uCi1Hc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbgotR3N0Q29sbGVjdFBhZHNFdmVudEZ1bmN0aW9uCi1Hc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb24KLUdzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbgotR3N0Q29sbGVjdFBhZHNGdW5jdGlvbgotR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzCi0KLUdTVF9DT0xMRUNUX1BBRFNfU1RBVEUKLUdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUCi1HU1RfQ09MTEVDVF9QQURTX1NUQVRFX1NFVAotR1NUX0NPTExFQ1RfUEFEU19TVEFURV9VTlNFVAotCi1HU1RfQ09MTEVDVF9QQURTX0dFVF9TVFJFQU1fTE9DSwotR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSwotR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLCi0KLUdTVF9DT0xMRUNUX1BBRFNfRFRTCi1HU1RfQ09MTEVDVF9QQURTX0RUU19JU19WQUxJRAotCi1nc3RfY29sbGVjdF9wYWRzX25ldwotCi1nc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQKLWdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZAotCi1nc3RfY29sbGVjdF9wYWRzX3N0YXJ0Ci1nc3RfY29sbGVjdF9wYWRzX3N0b3AKLQotZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUKLQotZ3N0X2NvbGxlY3RfcGFkc19mbHVzaAotZ3N0X2NvbGxlY3RfcGFkc19wZWVrCi1nc3RfY29sbGVjdF9wYWRzX3BvcAotCi1nc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVyCi1nc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyCi0KLWdzdF9jb2xsZWN0X3BhZHNfY2xpcF9ydW5uaW5nX3RpbWUKLQotZ3N0X2NvbGxlY3RfcGFkc19xdWVyeV9kZWZhdWx0Ci0KLWdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdAotZ3N0X2NvbGxlY3RfcGFkc19zcmNfZXZlbnRfZGVmYXVsdAotCi1nc3RfY29sbGVjdF9wYWRzX3NldF9idWZmZXJfZnVuY3Rpb24KLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24KLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2NvbXBhcmVfZnVuY3Rpb24KLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2V2ZW50X2Z1bmN0aW9uCi1nc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaF9mdW5jdGlvbgotZ3N0X2NvbGxlY3RfcGFkc19zZXRfcXVlcnlfZnVuY3Rpb24KLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nCi1nc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbgotZ3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RDb2xsZWN0UGFkc0NsYXNzCi1Hc3RDb2xsZWN0UGFkc1ByaXZhdGUKLUdzdENvbGxlY3REYXRhUHJpdmF0ZQotR1NUX0NPTExFQ1RfUEFEUwotR1NUX0NPTExFQ1RfUEFEU19DTEFTUwotR1NUX1RZUEVfQ09MTEVDVF9QQURTCi1HU1RfSVNfQ09MTEVDVF9QQURTCi1HU1RfSVNfQ09MTEVDVF9QQURTX0NMQVNTCi1HU1RfQ09MTEVDVF9QQURTX0dFVF9DTEFTUwotZ3N0X2NvbGxlY3RfcGFkc19nZXRfdHlwZQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RmbG93Y29tYmluZXI8L0ZJTEU+Ci08VElUTEU+R3N0Rmxvd0NvbWJpbmVyPC9USVRMRT4KLTxJTkNMVURFPmdzdC9iYXNlL2dzdGZsb3djb21iaW5lci5oPC9JTkNMVURFPgotR3N0Rmxvd0NvbWJpbmVyCi1nc3RfZmxvd19jb21iaW5lcl9uZXcKLWdzdF9mbG93X2NvbWJpbmVyX2ZyZWUKLWdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93Ci1nc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkCi1nc3RfZmxvd19jb21iaW5lcl9yZW1vdmVfcGFkCi1nc3RfZmxvd19jb21iaW5lcl9jbGVhcgotZ3N0X2Zsb3dfY29tYmluZXJfcmVzZXQKLWdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfVFlQRV9GTE9XX0NPTUJJTkVSCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2Zsb3dfY29tYmluZXJfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RwdXNoc3JjPC9GSUxFPgotPFRJVExFPkdzdFB1c2hTcmM8L1RJVExFPgotPElOQ0xVREU+Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oPC9JTkNMVURFPgotR3N0UHVzaFNyYwotR3N0UHVzaFNyY0NsYXNzCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9QVVNIX1NSQwotR1NUX0lTX1BVU0hfU1JDCi1HU1RfVFlQRV9QVVNIX1NSQwotR1NUX1BVU0hfU1JDX0NMQVNTCi1HU1RfSVNfUFVTSF9TUkNfQ0xBU1MKLUdTVF9QVVNIX1NSQ19HRVRfQ0xBU1MKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcHVzaF9zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3R0eXBlZmluZGhlbHBlcjwvRklMRT4KLTxUSVRMRT5Hc3RUeXBlRmluZEhlbHBlcjwvVElUTEU+Ci08SU5DTFVERT5nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oPC9JTkNMVURFPgotZ3N0X3R5cGVfZmluZF9oZWxwZXIKLWdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIKLWdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb24KLWdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhCi1Hc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24KLWdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RkYXRhcXVldWU8L0ZJTEU+Ci08VElUTEU+R3N0RGF0YVF1ZXVlPC9USVRMRT4KLTxJTkNMVURFPmdzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oPC9JTkNMVURFPgotR3N0RGF0YVF1ZXVlCi1Hc3REYXRhUXVldWVTaXplCi1Hc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbgotR3N0RGF0YVF1ZXVlSXRlbQotR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjawotR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrCi1nc3RfZGF0YV9xdWV1ZV9uZXcKLWdzdF9kYXRhX3F1ZXVlX3B1c2gKLWdzdF9kYXRhX3F1ZXVlX3B1c2hfZm9yY2UKLWdzdF9kYXRhX3F1ZXVlX3BvcAotZ3N0X2RhdGFfcXVldWVfcGVlawotZ3N0X2RhdGFfcXVldWVfZmx1c2gKLWdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZwotZ3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkCi1nc3RfZGF0YV9xdWV1ZV9pc19mdWxsCi1nc3RfZGF0YV9xdWV1ZV9pc19lbXB0eQotZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsCi1nc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3REYXRhUXVldWVDbGFzcwotR3N0RGF0YVF1ZXVlUHJpdmF0ZQotR1NUX0RBVEFfUVVFVUUKLUdTVF9JU19EQVRBX1FVRVVFCi1HU1RfVFlQRV9EQVRBX1FVRVVFCi1HU1RfREFUQV9RVUVVRV9DTEFTUwotR1NUX0lTX0RBVEFfUVVFVUVfQ0xBU1MKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZGF0YV9xdWV1ZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHF1ZXVlYXJyYXk8L0ZJTEU+Ci08VElUTEU+R3N0UXVldWVBcnJheTwvVElUTEU+Ci08SU5DTFVERT5nc3QvYmFzZS9nc3RxdWV1ZWFycmF5Lmg8L0lOQ0xVREU+Ci1Hc3RRdWV1ZUFycmF5Ci1nc3RfcXVldWVfYXJyYXlfbmV3Ci1nc3RfcXVldWVfYXJyYXlfZnJlZQotZ3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGgKLWdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZAotZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZAotZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbAotZ3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5Ci1nc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50Ci1nc3RfcXVldWVfYXJyYXlfZmluZAotZ3N0X3F1ZXVlX2FycmF5X25ld19mb3Jfc3RydWN0Ci1nc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsX3N0cnVjdAotZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZF9zdHJ1Y3QKLWdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZF9zdHJ1Y3QKLWdzdF9xdWV1ZV9hcnJheV9kcm9wX3N0cnVjdAotPC9TRUNUSU9OPgotCi0jIG5ldAotCi08U0VDVElPTj4KLTxGSUxFPmdzdG5ldGFkZHJlc3NtZXRhPC9GSUxFPgotPFRJVExFPkdzdE5ldEFkZHJlc3NNZXRhPC9USVRMRT4KLTxJTkNMVURFPmdzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaDwvSU5DTFVERT4KLUdzdE5ldEFkZHJlc3NNZXRhCi1nc3RfYnVmZmVyX2FkZF9uZXRfYWRkcmVzc19tZXRhCi1nc3RfYnVmZmVyX2dldF9uZXRfYWRkcmVzc19tZXRhCi1nc3RfbmV0X2FkZHJlc3NfbWV0YV9nZXRfaW5mbwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1HU1RfTkVUX0FERFJFU1NfTUVUQV9BUElfVFlQRQotR1NUX05FVF9BRERSRVNTX01FVEFfSU5GTwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9uZXRfYWRkcmVzc19tZXRhX2FwaV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdG5ldGNvbnRyb2xtZXNzYWdlbWV0YTwvRklMRT4KLTxUSVRMRT5Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGE8L1RJVExFPgotPElOQ0xVREU+Z3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuaDwvSU5DTFVERT4KLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YQotZ3N0X2J1ZmZlcl9hZGRfbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhCi1nc3RfYnVmZmVyX2dldF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGEKLWdzdF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfZ2V0X2luZm8KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR1NUX05FVF9DT05UUk9MX01FU1NBR0VfTUVUQV9BUElfVFlQRQotR1NUX05FVF9DT05UUk9MX01FU1NBR0VfTUVUQV9JTkZPCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9hcGlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RuZXRjbGllbnRjbG9jazwvRklMRT4KLTxUSVRMRT5Hc3ROZXRDbGllbnRDbG9jazwvVElUTEU+Ci08SU5DTFVERT5nc3QvbmV0L2dzdG5ldC5oPC9JTkNMVURFPgotR3N0TmV0Q2xpZW50Q2xvY2sKLUdzdE50cENsb2NrCi1nc3RfbmV0X2NsaWVudF9jbG9ja19uZXcKLWdzdF9udHBfY2xvY2tfbmV3Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE5ldENsaWVudENsb2NrQ2xhc3MKLUdzdE5ldENsaWVudENsb2NrUHJpdmF0ZQotR1NUX05FVF9DTElFTlRfQ0xPQ0sKLUdTVF9JU19ORVRfQ0xJRU5UX0NMT0NLCi1HU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLCi1HU1RfTkVUX0NMSUVOVF9DTE9DS19DTEFTUwotR1NUX0lTX05FVF9DTElFTlRfQ0xPQ0tfQ0xBU1MKLUdzdE50cENsb2NrQ2xhc3MKLUdTVF9OVFBfQ0xPQ0sKLUdTVF9JU19OVFBfQ0xPQ0sKLUdTVF9UWVBFX05UUF9DTE9DSwotR1NUX05UUF9DTE9DS19DTEFTUwotR1NUX0lTX05UUF9DTE9DS19DTEFTUwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF90eXBlCi1nc3RfbnRwX2Nsb2NrX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RuZXR0aW1lcGFja2V0PC9GSUxFPgotPFRJVExFPkdzdE5ldFRpbWVQYWNrZXQ8L1RJVExFPgotPElOQ0xVREU+Z3N0L25ldC9nc3RuZXQuaDwvSU5DTFVERT4KLUdzdE5ldFRpbWVQYWNrZXQKLUdTVF9ORVRfVElNRV9QQUNLRVRfU0laRQotZ3N0X25ldF90aW1lX3BhY2tldF9uZXcKLWdzdF9uZXRfdGltZV9wYWNrZXRfY29weQotZ3N0X25ldF90aW1lX3BhY2tldF9mcmVlCi1nc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmUKLWdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZAotZ3N0X25ldF90aW1lX3BhY2tldF9zZXJpYWxpemUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9uZXRfdGltZV9wYWNrZXRfZ2V0X3R5cGUKLXNvY2tsZW5fdAotPC9TRUNUSU9OPgotCi0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0bmV0dGltZXByb3ZpZGVyPC9GSUxFPgotPFRJVExFPkdzdE5ldFRpbWVQcm92aWRlcjwvVElUTEU+Ci08SU5DTFVERT5nc3QvbmV0L2dzdG5ldC5oPC9JTkNMVURFPgotR3N0TmV0VGltZVByb3ZpZGVyCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE5ldFRpbWVQcm92aWRlckNsYXNzCi1Hc3ROZXRUaW1lUHJvdmlkZXJQcml2YXRlCi1HU1RfTkVUX1RJTUVfUFJPVklERVIKLUdTVF9JU19ORVRfVElNRV9QUk9WSURFUgotR1NUX1RZUEVfTkVUX1RJTUVfUFJPVklERVIKLUdTVF9ORVRfVElNRV9QUk9WSURFUl9DTEFTUwotR1NUX0lTX05FVF9USU1FX1BST1ZJREVSX0NMQVNTCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RwdHBjbG9jazwvRklMRT4KLTxUSVRMRT5Hc3RQdHBDbG9jazwvVElUTEU+Ci08SU5DTFVERT5nc3QvbmV0L25ldC5oPC9JTkNMVURFPgotR1NUX1BUUF9DTE9DS19JRF9OT05FCi0KLWdzdF9wdHBfaW5pdAotZ3N0X3B0cF9kZWluaXQKLWdzdF9wdHBfaXNfaW5pdGlhbGl6ZWQKLWdzdF9wdHBfaXNfc3VwcG9ydGVkCi0KLUdzdFB0cENsb2NrCi1nc3RfcHRwX2Nsb2NrX25ldwotCi1Hc3RQdHBTdGF0aXN0aWNzQ2FsbGJhY2sKLWdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQKLWdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19yZW1vdmUKLQotR1NUX1BUUF9TVEFUSVNUSUNTX0JFU1RfTUFTVEVSX0NMT0NLX1NFTEVDVEVECi1HU1RfUFRQX1NUQVRJU1RJQ1NfTkVXX0RPTUFJTl9GT1VORAotR1NUX1BUUF9TVEFUSVNUSUNTX1BBVEhfREVMQVlfTUVBU1VSRUQKLUdTVF9QVFBfU1RBVElTVElDU19USU1FX1VQREFURUQKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UHRwQ2xvY2tDbGFzcwotR3N0UHRwQ2xvY2tQcml2YXRlCi1HU1RfUFRQX0NMT0NLCi1HU1RfSVNfUFRQX0NMT0NLCi1HU1RfVFlQRV9QVFBfQ0xPQ0sKLUdTVF9QVFBfQ0xPQ0tfQ0xBU1MKLUdTVF9JU19QVFBfQ0xPQ0tfQ0xBU1MKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcHRwX2Nsb2NrX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Y2hlY2s8L0ZJTEU+Ci08VElUTEU+R3N0Q2hlY2s8L1RJVExFPgotPElOQ0xVREU+Z3N0L2NoZWNrL2dzdGNoZWNrLmg8L0lOQ0xVREU+Ci1HU1RfU1RBUlRfVEVTVAotR1NUX0VORF9URVNUCi0KLUFTU0VSVF9CVUZGRVJfUkVGQ09VTlQKLUFTU0VSVF9DQVBTX1JFRkNPVU5UCi1BU1NFUlRfQ1JJVElDQUwKLUFTU0VSVF9XQVJOSU5HCi1BU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQKLUFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQKLUFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTgotQVNTRVJUX1NFVF9TVEFURQotCi1mYWlsX3VubGVzc19lcXVhbHNfaW50Ci1mYWlsX3VubGVzc19lcXVhbHNfZmxvYXQKLWZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcKLWZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQKLWZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NAotZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXgKLWZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXgKLWZhaWxfdW5sZXNzX2VxdWFsc191aW50NjRfaGV4Ci1mYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlcgotCi1mYWlsX3VubGVzc19tZXNzYWdlX2Vycm9yCi0KLWFzc2VydF9lcXVhbHNfaW50Ci1hc3NlcnRfZXF1YWxzX2Zsb2F0Ci1hc3NlcnRfZXF1YWxzX3N0cmluZwotYXNzZXJ0X2VxdWFsc191aW50NjQKLWFzc2VydF9lcXVhbHNfaW50NjQKLWFzc2VydF9lcXVhbHNfaW50X2hleAotYXNzZXJ0X2VxdWFsc19pbnQ2NF9oZXgKLWFzc2VydF9lcXVhbHNfdWludDY0X2hleAotYXNzZXJ0X2VxdWFsc19wb2ludGVyCi1hc3NlcnRfbWVzc2FnZV9lcnJvcgotCi1nc3RfY2hlY2tfaW5pdAotZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3IKLWdzdF9jaGVja19zZXR1cF9lbGVtZW50Ci1nc3RfY2hlY2tfc2V0dXBfc2lua19wYWQKLWdzdF9jaGVja19zZXR1cF9zcmNfcGFkCi1nc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZQotZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZQotZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lCi1nc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudAotZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkCi1nc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZAotZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycwotZ3N0X2NoZWNrX2J1ZmZlcl9kYXRhCi1nc3RfY2hlY2tfY2Fwc19lcXVhbAotZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdAotZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIKLWdzdF9jaGVja19ydW5fc3VpdGUKLWdzdF9jaGVja19zZXR1cF9ldmVudHMKLWdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWQKLWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGUKLWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9mcm9tX3RlbXBsYXRlCi1nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGUKLWdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2Zyb21fdGVtcGxhdGUKLWdzdF9jaGVja19vYmplY3RzX2Rlc3Ryb3llZF9vbl91bnJlZgotZ3N0X2NoZWNrX29iamVjdF9kZXN0cm95ZWRfb25fdW5yZWYKLQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLU1BSU5fSU5JVAotTUFJTl9TVEFSVF9USFJFQURTCi1NQUlOX1NUQVJUX1RIUkVBRF9GVU5DVElPTgotTUFJTl9TVEFSVF9USFJFQURfRlVOQ1RJT05TCi1NQUlOX1NUT1BfVEhSRUFEUwotTUFJTl9TWU5DSFJPTklaRQotVEhSRUFEX1NUQVJUCi1USFJFQURfU1RBUlRFRAotVEhSRUFEX1NXSVRDSAotVEhSRUFEX1NZTkNIUk9OSVpFCi1USFJFQURfVEVTVF9SVU5OSU5HCi0KLXN5bmNfY29uZAotbXV0ZXgKLUdTVF9DQVRfREVGQVVMVAotdGhyZWFkX2xpc3QKLXN0YXJ0X2NvbmQKLUdTVF9DSEVDS19NQUlOCi0KLWdzdF9jaGVja19jaGFpbl9mdW5jCi1nc3RfY2hlY2tfYWJpX2xpc3QKLQotYnVmZmVycwotY2hlY2tfY29uZAotY2hlY2tfbXV0ZXgKLQotQ0hFQ0tfTUFKT1JfVkVSU0lPTgotQ0hFQ0tfTUlDUk9fVkVSU0lPTgotQ0hFQ0tfTUlOT1JfVkVSU0lPTgotQ0tfQVRUUklCVVRFX1VOVVNFRAotQ0tfQ1BQRU5ECi1DS19DUFBTVEFSVAotQ0tfRVhQT1JUCi1FTkRfVEVTVAotR0NDX1ZFUlNJT05fQVRfTEVBU1QKLUxGdW4KLUxpc3QKLUxvZwotTlVMTAotU0Z1bgotU1J1bm5lcgotU1RBUlRfVEVTVAotU3VpdGUKLVRDYXNlCi1URgotVEZ1bgotVGVzdFJlc3VsdAotVGVzdFN0YXRzCi1jaGVja19saXN0X2NyZWF0ZQotY2tfYWJvcnQKLWNrX2Fib3J0X21zZwotY2tfYXNzZXJ0Ci1ja19hc3NlcnRfaW50X2VxCi1ja19hc3NlcnRfaW50X25lCi1ja19hc3NlcnRfbXNnCi1ja19hc3NlcnRfc3RyX2VxCi1ja19hc3NlcnRfc3RyX25lCi1ja19zdHJkdXBfcHJpbnRmCi1jdXJfZm9ya19zdGF0dXMKLWVtYWxsb2MKLWVwcmludGYKLWVyZWFsbG9jCi1mYWlsCi1mYWlsX2lmCi1mYWlsX3VubGVzcwotZ2V0X2Vudl9wcmludG1vZGUKLWxmaWxlX2xmdW4KLWxpc3RfYWRkX2VuZAotbGlzdF9hZGRfZnJvbnQKLWxpc3RfYWR2YW5jZQotbGlzdF9hcHBseQotbGlzdF9hdF9lbmQKLWxpc3RfZnJlZQotbGlzdF9mcm9udAotbGlzdF92YWwKLWxvZ19zcnVubmVyX2VuZAotbG9nX3NydW5uZXJfc3RhcnQKLWxvZ19zdWl0ZV9lbmQKLWxvZ19zdWl0ZV9zdGFydAotbG9nX3Rlc3Rfc3RhcnQKLWxvZ190ZXN0X2VuZAotbWFya19wb2ludAotcGFjawotcHBhY2sKLXB1bnBhY2sKLXJjdm1zZ19mcmVlCi1yZWNlaXZlX3Rlc3RfcmVzdWx0Ci1zZW5kX2N0eF9pbmZvCi1zZW5kX2ZhaWx1cmVfaW5mbwotc2VuZF9sb2NfaW5mbwotc2V0X2Zvcmtfc3RhdHVzCi1zZXR1cF9tZXNzYWdpbmcKLXNyX3N0YXRfc3RyCi1zcnVubmVyX2VuZF9sb2dnaW5nCi1zcnVubmVyX2ZwcmludAotc3J1bm5lcl9pbml0X2xvZ2dpbmcKLXNydW5uZXJfb3Blbl9sZmlsZQotc3J1bm5lcl9vcGVuX3htbGZpbGUKLXNydW5uZXJfcmVnaXN0ZXJfbGZ1bgotc3Rkb3V0X2xmdW4KLXN1YnVuaXRfbGZ1bgotdGNhc2VfYWRkX2V4aXRfdGVzdAotdGNhc2VfYWRkX2xvb3BfZXhpdF90ZXN0Ci10Y2FzZV9hZGRfbG9vcF90ZXN0Ci10Y2FzZV9hZGRfbG9vcF90ZXN0X3JhaXNlX3NpZ25hbAotdGNhc2VfYWRkX3Rlc3QKLXRjYXNlX2FkZF90ZXN0X3JhaXNlX3NpZ25hbAotdGNhc2Vfc2tpcF9icm9rZW5fdGVzdAotdGVhcmRvd25fbWVzc2FnaW5nCi10cl9jcmVhdGUKLXRyX2ZwcmludAotdHJfcmVzZXQKLXRyX3Nob3J0X3N0cgotdHJfc3RyCi10cl94bWxwcmludAotdXBhY2sKLXhtbF9sZnVuCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Y2hlY2tidWZmZXJzdHJhdzwvRklMRT4KLTxUSVRMRT5Hc3RCdWZmZXJTdHJhdzwvVElUTEU+Ci08SU5DTFVERT5nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuaDwvSU5DTFVERT4KLWdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUKLWdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlcgotZ3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+Z3N0Y2hlY2tjb25zaXN0ZW5jeWNoZWNrZXI8L0ZJTEU+Ci08VElUTEU+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L1RJVExFPgotPElOQ0xVREU+Z3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oPC9JTkNMVURFPgotR3N0U3RyZWFtQ29uc2lzdGVuY3kKLWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX25ldwotZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXQKLWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUKLWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2FkZF9wYWQKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5nc3RoYXJuZXNzPC9GSUxFPgotPFRJVExFPkdzdEhhcm5lc3M8L1RJVExFPgotPElOQ0xVREU+Z3N0L2NoZWNrL2NoZWNrLmg8L0lOQ0xVREU+Ci1Hc3RIYXJuZXNzCi0KLWdzdF9oYXJuZXNzX25ld19lbXB0eQotZ3N0X2hhcm5lc3NfbmV3X2Z1bGwKLWdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQKLWdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzCi1nc3RfaGFybmVzc19uZXdfd2l0aF90ZW1wbGF0ZXMKLWdzdF9oYXJuZXNzX25ldwotZ3N0X2hhcm5lc3NfbmV3X3BhcnNlCi1nc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxsCi1nc3RfaGFybmVzc19hZGRfcGFyc2UKLWdzdF9oYXJuZXNzX3RlYXJkb3duCi0KLWdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NyY19wYWQKLWdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NpbmtfcGFkCi0KLWdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcwotZ3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2FwcwotZ3N0X2hhcm5lc3Nfc2V0X2NhcHMKLWdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIKLWdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHNfc3RyCi1nc3RfaGFybmVzc19zZXRfY2Fwc19zdHIKLQotZ3N0X2hhcm5lc3NfdXNlX3N5c3RlbWNsb2NrCi1nc3RfaGFybmVzc191c2VfdGVzdGNsb2NrCi1nc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrCi1nc3RfaGFybmVzc19zZXRfdGltZQotZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMKLWdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0Ci1nc3RfaGFybmVzc19jcmFua19tdWx0aXBsZV9jbG9ja193YWl0cwotCi1nc3RfaGFybmVzc19wbGF5Ci1nc3RfaGFybmVzc19zZXRfYmxvY2tpbmdfcHVzaF9tb2RlCi1nc3RfaGFybmVzc19zZXRfZm9yd2FyZGluZwotCi1nc3RfaGFybmVzc19jcmVhdGVfYnVmZmVyCi1nc3RfaGFybmVzc19wdXNoCi1nc3RfaGFybmVzc19wdWxsCi1nc3RfaGFybmVzc190cnlfcHVsbAotZ3N0X2hhcm5lc3NfcHVzaF9hbmRfcHVsbAotZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZAotZ3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZQotZ3N0X2hhcm5lc3Nfc2V0X2Ryb3BfYnVmZmVycwotZ3N0X2hhcm5lc3NfZHVtcF90b19maWxlCi1nc3RfaGFybmVzc19nZXRfbGFzdF9wdXNoZWRfdGltZXN0YW1wCi0KLWdzdF9oYXJuZXNzX3B1c2hfZXZlbnQKLWdzdF9oYXJuZXNzX3B1bGxfZXZlbnQKLWdzdF9oYXJuZXNzX3RyeV9wdWxsX2V2ZW50Ci1nc3RfaGFybmVzc19ldmVudHNfcmVjZWl2ZWQKLWdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZQotCi1nc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50Ci1nc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50Ci1nc3RfaGFybmVzc190cnlfcHVsbF91cHN0cmVhbV9ldmVudAotZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX3JlY2VpdmVkCi1nc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUKLQotZ3N0X2hhcm5lc3NfcXVlcnlfbGF0ZW5jeQotZ3N0X2hhcm5lc3Nfc2V0X3Vwc3RyZWFtX2xhdGVuY3kKLQotZ3N0X2hhcm5lc3Nfc2V0X3Byb3Bvc2VfYWxsb2NhdG9yCi1nc3RfaGFybmVzc19nZXRfYWxsb2NhdG9yCi0KLWdzdF9oYXJuZXNzX2FkZF9zcmMKLWdzdF9oYXJuZXNzX2FkZF9zcmNfaGFybmVzcwotZ3N0X2hhcm5lc3NfYWRkX3NyY19wYXJzZQotZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYwotZ3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnkKLWdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50Ci0KLWdzdF9oYXJuZXNzX2FkZF9zaW5rCi1nc3RfaGFybmVzc19hZGRfc2lua19oYXJuZXNzCi1nc3RfaGFybmVzc19hZGRfc2lua19wYXJzZQotZ3N0X2hhcm5lc3NfcHVzaF90b19zaW5rCi1nc3RfaGFybmVzc19zaW5rX3B1c2hfbWFueQotCi1nc3RfaGFybmVzc19maW5kX2VsZW1lbnQKLWdzdF9oYXJuZXNzX3NldAotZ3N0X2hhcm5lc3NfZ2V0Ci1nc3RfaGFybmVzc19hZGRfcHJvYmUKLQotR3N0SGFybmVzc1RocmVhZAotCi1nc3RfaGFybmVzc19zdHJlc3NfdGhyZWFkX3N0b3AKLWdzdF9oYXJuZXNzX3N0cmVzc19jdXN0b21fc3RhcnQKLQotZ3N0X2hhcm5lc3Nfc3RyZXNzX3N0YXRlY2hhbmdlX3N0YXJ0Ci1nc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2Vfc3RhcnRfZnVsbAotCi1nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnQKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl9zdGFydF9mdWxsCi0KLUdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYwotZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3dpdGhfY2Jfc3RhcnQKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGwKLQotZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnQKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0X2Z1bGwKLQotR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnQKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnRfZnVsbAotCi1nc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF9zdGFydAotZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfc3RhcnRfZnVsbAotCi1nc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0Ci1nc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGwKLQotZ3N0X2hhcm5lc3Nfc3RyZXNzX3Byb3BlcnR5X3N0YXJ0Ci1nc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnRfZnVsbAotCi1nc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydAotZ3N0X2hhcm5lc3Nfc3RyZXNzX3JlcXVlc3RwYWRfc3RhcnRfZnVsbAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RIYXJuZXNzUHJpdmF0ZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmdzdHRlc3RjbG9jazwvRklMRT4KLTxUSVRMRT5Hc3RUZXN0Q2xvY2s8L1RJVExFPgotPElOQ0xVREU+Z3N0L2NoZWNrL2dzdHRlc3RjbG9jay5oPC9JTkNMVURFPgotR3N0VGVzdENsb2NrCi1Hc3RUZXN0Q2xvY2tDbGFzcwotZ3N0X3Rlc3RfY2xvY2tfbmV3Ci1nc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lCi1nc3RfdGVzdF9jbG9ja19zZXRfdGltZQotZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lCi1nc3RfdGVzdF9jbG9ja19wZWVrX2lkX2NvdW50Ci1nc3RfdGVzdF9jbG9ja19oYXNfaWQKLWdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkCi1nc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQKLWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX3BlbmRpbmdfaWRfY291bnQKLWdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZAotZ3N0X3Rlc3RfY2xvY2tfZ2V0X25leHRfZW50cnlfdGltZQotZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHMKLWdzdF90ZXN0X2Nsb2NrX2lkX2xpc3RfZ2V0X2xhdGVzdF90aW1lCi1nc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3QKLWdzdF90ZXN0X2Nsb2NrX2NyYW5rCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdTVF9URVNUX0NMT0NLCi1HU1RfSVNfVEVTVF9DTE9DSwotR1NUX1RZUEVfVEVTVF9DTE9DSwotR1NUX1RFU1RfQ0xPQ0tfQ0xBU1MKLUdTVF9JU19URVNUX0NMT0NLX0NMQVNTCi1HU1RfVEVTVF9DTE9DS19HRVRfQ0xBU1MKLUdTVF9URVNUX0NMT0NLX0NBU1QKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1Hc3RUZXN0Q2xvY2tQcml2YXRlCi1nc3RfdGVzdF9jbG9ja19nZXRfdHlwZQotPC9TRUNUSU9OPgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzIGIvZG9jcy9saWJzL2dzdHJlYW1lci1saWJzLnR5cGVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDRiNWEzLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9nc3RyZWFtZXItbGlicy50eXBlcworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSUgYmFzZSBjbGFzc2VzCi0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oPgotCi1nc3RfYWRhcHRlcl9nZXRfdHlwZQotZ3N0X2Jhc2VfcGFyc2VfZ2V0X3R5cGUKLWdzdF9iYXNlX3NyY19nZXRfdHlwZQotZ3N0X2Jhc2Vfc2lua19nZXRfdHlwZQotZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF90eXBlCi1nc3RfY29sbGVjdF9wYWRzX2dldF90eXBlCi1nc3RfcHVzaF9zcmNfZ2V0X3R5cGUKLQotJSBjb250cm9sbGVyCi0KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuaD4KLQotZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX2dldF90eXBlCi1nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19nZXRfdHlwZQotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF90eXBlCi1nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfdHlwZQotZ3N0X2xmb19jb250cm9sX3NvdXJjZV9nZXRfdHlwZQotZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKLQotJSBuZXQKLQotI2luY2x1ZGUgPGdzdC9uZXQvbmV0Lmg+Ci0KLWdzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF90eXBlCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfZ2V0X3R5cGUKLWdzdF9udHBfY2xvY2tfZ2V0X3R5cGUKLWdzdF9wdHBfY2xvY2tfZ2V0X3R5cGUKLQotJSBjaGVjawotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdHRlc3RjbG9jay5oPgotCi1nc3RfdGVzdF9jbG9ja19nZXRfdHlwZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3YWZmZS4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9Hc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0QVJHQkNvbnRyb2xCaW5kaW5nOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEFSR0JDb250cm9sQmluZGluZy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QVJHQkNvbnRyb2xCaW5kaW5nLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEFSR0JDb250cm9sQmluZGluZy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RBUkdCQ29udHJvbEJpbmRpbmciPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcudG9wX29mX3BhZ2UiPjwvYT5Hc3RBUkdCQ29udHJvbEJpbmRpbmc8L3NwYW4+PC9oMj4KLTxwPkdzdEFSR0JDb250cm9sQmluZGluZyDigJQgYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2VzIHRvIGFyZ2IgcHJvcGVydGllczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWFyZ2ItY29udHJvbC1iaW5kaW5nLW5ldyIgdGl0bGU9ImdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19uZXfCoCgpIj5nc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEFSR0JDb250cm9sQmluZGluZy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwjR3N0QVJHQkNvbnRyb2xCaW5kaW5nLS1jb250cm9sLXNvdXJjZS1hIiB0aXRsZT0iVGhlIOKAnGNvbnRyb2wtc291cmNlLWHigJ0gcHJvcGVydHkiPmNvbnRyb2wtc291cmNlLWE8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sI0dzdEFSR0JDb250cm9sQmluZGluZy0tY29udHJvbC1zb3VyY2UtYiIgdGl0bGU9IlRoZSDigJxjb250cm9sLXNvdXJjZS1i4oCdIHByb3BlcnR5Ij5jb250cm9sLXNvdXJjZS1iPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCNHc3RBUkdCQ29udHJvbEJpbmRpbmctLWNvbnRyb2wtc291cmNlLWciIHRpdGxlPSJUaGUg4oCcY29udHJvbC1zb3VyY2UtZ+KAnSBwcm9wZXJ0eSI+Y29udHJvbC1zb3VyY2UtZzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwjR3N0QVJHQkNvbnRyb2xCaW5kaW5nLS1jb250cm9sLXNvdXJjZS1yIiB0aXRsZT0iVGhlIOKAnGNvbnRyb2wtc291cmNlLXLigJ0gcHJvcGVydHkiPmNvbnRyb2wtc291cmNlLXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEFSR0JDb250cm9sQmluZGluZy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctc3RydWN0Ij5Hc3RDb250cm9sQmluZGluZzwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBUkdCQ29udHJvbEJpbmRpbmcKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtsaWJzL2NvbnRyb2xsZXIvZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkEgdmFsdWUgbWFwcGluZyBvYmplY3QgdGhhdCBhdHRhY2hlcyBtdWx0aXBsZSBjb250cm9sIHNvdXJjZXMgdG8gYSBndWludAotZ29iamVjdCBwcm9wZXJ0aWVzIHJlcHJlc2VudGluZyBhIGNvbG9yLiBBIGNvbnRyb2wgdmFsdWUgb2YgMC4wIHdpbGwgdHVybiB0aGUKLWNvbG9yIGNvbXBvbmVudCBvZmYgYW5kIGEgdmFsdWUgb2YgMS4wIHdpbGwgYmUgdGhlIGNvbG9yIGxldmVsLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYXJnYi1jb250cm9sLWJpbmRpbmctbmV3Ij48L2E+PGgzPmdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT7CoCoKLWdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpjc19hPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpjc19yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpjc19nPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpjc19iPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBjb250cm9sLWJpbmRpbmcgdGhhdCBhdHRhY2hlcyB0aGUgZ2l2ZW4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gdG8gdGhlCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHByb3BlcnR5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hcmdiLWNvbnRyb2wtYmluZGluZy1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCBvZiB0aGUgcHJvcGVydHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvcGVydHlfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwcm9wZXJ0eS1uYW1lIHRvIGF0dGFjaCB0aGUgY29udHJvbCBzb3VyY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y3NfYTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb250cm9sIHNvdXJjZSBmb3IgdGhlIGFscGhhIGNoYW5uZWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y3NfcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb250cm9sIHNvdXJjZSBmb3IgdGhlIHJlZCBjaGFubmVsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNzX2c8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29udHJvbCBzb3VyY2UgZm9yIHRoZSBncmVlbiBjaGFubmVsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNzX2I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29udHJvbCBzb3VyY2UgZm9yIHRoZSBibHVlIGNoYW5uZWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hcmdiLWNvbnRyb2wtYmluZGluZy1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdEFSR0JDb250cm9sQmluZGluZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFSR0JDb250cm9sQmluZGluZzwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJBbGlhcyBmb3IgdHJhbnNmZXIgbm9uZSwgdXNlZCBmb3Igb2JqZWN0cyB3aXRoIGZsb2F0aW5nIHJlZnMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZmxvYXRpbmc8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEFSR0JDb250cm9sQmluZGluZy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLS1jb250cm9sLXNvdXJjZS1hIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29udHJvbC1zb3VyY2UtYeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29udHJvbC1zb3VyY2UtYeKAnSAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgY29udHJvbCBzb3VyY2UgZm9yIHRoZSBhbHBoYSBjb2xvciBjb21wb25lbnQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLS1jb250cm9sLXNvdXJjZS1iIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29udHJvbC1zb3VyY2UtYuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29udHJvbC1zb3VyY2UtYuKAnSAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgY29udHJvbCBzb3VyY2UgZm9yIHRoZSBibHVlIGNvbG9yIGNvbXBvbmVudC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBUkdCQ29udHJvbEJpbmRpbmctLWNvbnRyb2wtc291cmNlLWciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjb250cm9sLXNvdXJjZS1n4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjb250cm9sLXNvdXJjZS1n4oCdICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBjb250cm9sIHNvdXJjZSBmb3IgdGhlIGdyZWVuIGNvbG9yIGNvbXBvbmVudC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBUkdCQ29udHJvbEJpbmRpbmctLWNvbnRyb2wtc291cmNlLXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjb250cm9sLXNvdXJjZS1y4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjb250cm9sLXNvdXJjZS1y4oCdICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBjb250cm9sIHNvdXJjZSBmb3IgdGhlIHJlZCBjb2xvciBjb21wb25lbnQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3RBZGFwdGVyLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RBZGFwdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTUxNmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvR3N0QWRhcHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY4NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0QWRhcHRlcjogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCIgdGl0bGU9IkdzdFB1c2hTcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJpdFJlYWRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RBZGFwdGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RBZGFwdGVyLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdEFkYXB0ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RBZGFwdGVyLnRvcF9vZl9wYWdlIj48L2E+R3N0QWRhcHRlcjwvc3Bhbj48L2gyPgotPHA+R3N0QWRhcHRlciDigJQgYWRhcHRzIGluY29taW5nIGRhdGEgb24gYSBzaW5rIHBhZCBpbnRvIGNodW5rcyBvZiBOIGJ5dGVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEFkYXB0ZXIuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbmV3IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbmV3wqAoKSI+Z3N0X2FkYXB0ZXJfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNsZWFyIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfY2xlYXLCoCgpIj5nc3RfYWRhcHRlcl9jbGVhcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHVzaMKgKCkiPmdzdF9hZGFwdGVyX3B1c2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2NvbnN0cG9pbnRlcjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbWFwwqAoKSI+Z3N0X2FkYXB0ZXJfbWFwPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXVubWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdW5tYXDCoCgpIj5nc3RfYWRhcHRlcl91bm1hcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1jb3B5IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfY29wecKgKCkiPmdzdF9hZGFwdGVyX2NvcHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CeXRlLUFycmF5cy5odG1sI0dCeXRlcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HQnl0ZXM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNvcHktYnl0ZXMiIHRpdGxlPSJnc3RfYWRhcHRlcl9jb3B5X2J5dGVzwqAoKSI+Z3N0X2FkYXB0ZXJfY29weV9ieXRlczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1mbHVzaCIgdGl0bGU9ImdzdF9hZGFwdGVyX2ZsdXNowqAoKSI+Z3N0X2FkYXB0ZXJfZmx1c2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1hdmFpbGFibGUiIHRpdGxlPSJnc3RfYWRhcHRlcl9hdmFpbGFibGXCoCgpIj5nc3RfYWRhcHRlcl9hdmFpbGFibGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzaXplPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0wqAoKSI+Z3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZcKgKCkiPmdzdF9hZGFwdGVyX3Rha2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWJ1ZmZlciIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVywqAoKSI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1nZXQtYnVmZmVyIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcsKgKCkiPmdzdF9hZGFwdGVyX2dldF9idWZmZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWJ1ZmZlci1mYXN0IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdMKgKCkiPmdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1nZXQtYnVmZmVyLWZhc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2Zhc3TCoCgpIj5nc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2Zhc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UtbGlzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfbGlzdMKgKCkiPmdzdF9hZGFwdGVyX3Rha2VfbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZ2V0LWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl9nZXRfbGlzdMKgKCkiPmdzdF9hZGFwdGVyX2dldF9saXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXItbGlzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3TCoCgpIj5nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9saXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlci1saXN0IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcl9saXN0wqAoKSI+Z3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcl9saXN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtcHRzIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHJldl9wdHPCoCgpIj5nc3RfYWRhcHRlcl9wcmV2X3B0czwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wcmV2LWR0cyIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfZHRzwqAoKSI+Z3N0X2FkYXB0ZXJfcHJldl9kdHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHJldi1wdHMtYXQtb2Zmc2V0IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0wqAoKSI+Z3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtZHRzLWF0LW9mZnNldCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldMKgKCkiPmdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wcmV2LW9mZnNldCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0wqAoKSI+Z3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHRzLWF0LWRpc2NvbnQiIHRpdGxlPSJnc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udMKgKCkiPmdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWR0cy1hdC1kaXNjb250IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZHRzX2F0X2Rpc2NvbnTCoCgpIj5nc3RfYWRhcHRlcl9kdHNfYXRfZGlzY29udDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1vZmZzZXQtYXQtZGlzY29udCIgdGl0bGU9ImdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250wqAoKSI+Z3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZGlzdGFuY2UtZnJvbS1kaXNjb250IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250wqAoKSI+Z3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NzaXplPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzIiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzLCoCgpIj5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc3NpemU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW1hc2tlZC1zY2FuLXVpbnQzMi1wZWVrIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWvCoCgpIj5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEFkYXB0ZXIub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjR3N0QWRhcHRlci1zdHJ1Y3QiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBZGFwdGVyLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFkYXB0ZXIKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBZGFwdGVyLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEFkYXB0ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBjbGFzcyBpcyBmb3IgZWxlbWVudHMgdGhhdCByZWNlaXZlIGJ1ZmZlcnMgaW4gYW4gdW5kZXNpcmVkIHNpemUuCi1XaGlsZSBmb3IgZXhhbXBsZSByYXcgdmlkZW8gY29udGFpbnMgb25lIGltYWdlIHBlciBidWZmZXIsIHRoZSBzYW1lIGlzIG5vdAotdHJ1ZSBmb3IgYSBsb3Qgb2Ygb3RoZXIgZm9ybWF0cywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGNvbWUgZGlyZWN0bHkgZnJvbQotYSBmaWxlLiBTbyBpZiB5b3UgaGF2ZSB1bmRlZmluZWQgYnVmZmVyIHNpemVzIGFuZCByZXF1aXJlIGEgc3BlY2lmaWMgc2l6ZSwKLXRoaXMgb2JqZWN0IGlzIGZvciB5b3UuPC9wPgotPHA+QW4gYWRhcHRlciBpcyBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1uZXciIHRpdGxlPSJnc3RfYWRhcHRlcl9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX25ldygpPC9jb2RlPjwvYT4uIEl0IGNhbiBiZSBmcmVlZCBhZ2FpbiB3aXRoCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfb2JqZWN0X3VucmVmKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGUgdGhlb3J5IG9mIG9wZXJhdGlvbiBpcyBsaWtlIHRoaXM6IEFsbCBidWZmZXJzIHJlY2VpdmVkIGFyZSBwdXQKLWludG8gdGhlIGFkYXB0ZXIgdXNpbmcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHVzaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfcHVzaCgpPC9jb2RlPjwvYT4gYW5kIHRoZSBkYXRhIGlzIHRoZW4gcmVhZCBiYWNrCi1pbiBjaHVua3Mgb2YgdGhlIGRlc2lyZWQgc2l6ZSB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW1hcCIgdGl0bGU9ImdzdF9hZGFwdGVyX21hcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfbWFwKCk8L2NvZGU+PC9hPi88YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXVubWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdW5tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3VubWFwKCk8L2NvZGU+PC9hPgotYW5kL29yIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItY29weSIgdGl0bGU9ImdzdF9hZGFwdGVyX2NvcHnCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX2NvcHkoKTwvY29kZT48L2E+LiBBZnRlciB0aGUgZGF0YSBoYXMgYmVlbiBwcm9jZXNzZWQsIGl0IGlzIGZyZWVkCi11c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXVubWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdW5tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3VubWFwKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5PdGhlciBtZXRob2RzIHN1Y2ggYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfdGFrZSgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXIiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKTwvY29kZT48L2E+Ci1jb21iaW5lIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbWFwwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9tYXAoKTwvY29kZT48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXVubWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdW5tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3VubWFwKCk8L2NvZGU+PC9hPiBpbiBvbmUgbWV0aG9kIGFuZCBhcmUKLXBvdGVudGlhbGx5IG1vcmUgY29udmVuaWVudCBmb3Igc29tZSB1c2UgY2FzZXMuPC9wPgotPHA+Rm9yIGV4YW1wbGUsIGEgc2luayBwYWQncyBjaGFpbiBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIHBhc3MgZGF0YSB0byBhIGxpYnJhcnkKLWluIDUxMi1ieXRlIGNodW5rcyBjb3VsZCBiZSBpbXBsZW1lbnRlZCBsaWtlIHRoaXM6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLTEyCi0xMwotMTQKLTE1Ci0xNgotMTcKLTE4Ci0xOQotMjAKLTIxCi0yMgotMjMKLTI0PC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+c3RhdGljPC9zcGFuPiBHc3RGbG93UmV0dXJuCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPnNpbmtfcGFkX2NoYWluPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5Hc3RQYWQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+cGFkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEdzdE9iamVjdCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5wYXJlbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR3N0QnVmZmVyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmJ1ZmZlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIE15RWxlbWVudCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGhpczwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgR3N0QWRhcHRlciA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5hZGFwdGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdzdEZsb3dSZXR1cm4gcmV0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiBHU1RfRkxPV19PSzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50aGlzPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5NWV9FTEVNRU5UPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5wYXJlbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgYWRhcHRlciA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRoaXM8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPmFkYXB0ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8gcHV0IGJ1ZmZlciBpbnRvIGFkYXB0ZXI8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXB1c2giPmdzdF9hZGFwdGVyX3B1c2g8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5hZGFwdGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGJ1ZmZlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8gd2hpbGUgd2UgY2FuIHJlYWQgb3V0IDUxMiBieXRlcywgcHJvY2VzcyB0aGVtPC9zcGFuPgotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+d2hpbGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWF2YWlsYWJsZSI+Z3N0X2FkYXB0ZXJfYXZhaWxhYmxlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YWRhcHRlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pICZndDs9PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj41MTI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4mYW1wOyZhbXA7PC9zcGFuPiByZXQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj09PC9zcGFuPiBHU1RfRkxPV19PSzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmNvbnN0PC9zcGFuPiBndWludDggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+ZGF0YSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIj5nc3RfYWRhcHRlcl9tYXA8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5hZGFwdGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjUxMjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIHVzZSBmbG93cmV0dXJuIGFzIGFuIGVycm9yIHZhbHVlPC9zcGFuPgotICAgIHJldCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5teV9saWJyYXJ5X2Zvbzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZGF0YTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci11bm1hcCI+Z3N0X2FkYXB0ZXJfdW5tYXA8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5hZGFwdGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWZsdXNoIj5nc3RfYWRhcHRlcl9mbHVzaDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmFkYXB0ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+NTEyPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IHJldDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08cD5Gb3IgYW5vdGhlciBleGFtcGxlLCBhIHNpbXBsZSBlbGVtZW50IGluc2lkZSBHU3RyZWFtZXIgdGhhdCB1c2VzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+Ci1pcyB0aGUgbGlidmlzdWFsIGVsZW1lbnQuPC9wPgotPHA+QW4gZWxlbWVudCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiBpbiBpdHMgc2luayBwYWQgY2hhaW4gZnVuY3Rpb24gc2hvdWxkIGVuc3VyZSB0aGF0Ci13aGVuIHRoZSBGTFVTSF9TVE9QIGV2ZW50IGlzIHJlY2VpdmVkLCB0aGF0IGFueSBxdWV1ZWQgZGF0YSBpcyBjbGVhcmVkIHVzaW5nCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNsZWFyIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfY2xlYXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX2NsZWFyKCk8L2NvZGU+PC9hPi4gRGF0YSBzaG91bGQgYWxzbyBiZSBjbGVhcmVkIG9yIHByb2Nlc3NlZCBvbiBFT1MgYW5kCi13aGVuIGNoYW5naW5nIHN0YXRlIGZyb20gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBBVVNFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BBVVNFRDwvY29kZT48L2E+IHRvIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1SRUFEWTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1JFQURZPC9jb2RlPjwvYT4uPC9wPgotPHA+QWxzbyBjaGVjayB0aGUgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQgZmxhZyBvbiB0aGUgYnVmZmVyLiBTb21lIGVsZW1lbnRzIG1pZ2h0Ci1uZWVkIHRvIGNsZWFyIHRoZSBhZGFwdGVyIGFmdGVyIGEgZGlzY29udGludWl0eS48L3A+Ci08cD5UaGUgYWRhcHRlciB3aWxsIGtlZXAgdHJhY2sgb2YgdGhlIHRpbWVzdGFtcHMgb2YgdGhlIGJ1ZmZlcnMKLXRoYXQgd2VyZSBwdXNoZWQuIFRoZSBsYXN0IHNlZW4gdGltZXN0YW1wIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbgotY2FuIGJlIHF1ZXJpZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtcHRzIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHJldl9wdHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3ByZXZfcHRzKCk8L2NvZGU+PC9hPi4gVGhpcyBmdW5jdGlvbiBjYW4KLW9wdGlvbmFsbHkgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciB0aGF0Ci1jYXJyaWVkIHRoZSB0aW1lc3RhbXAgYW5kIHRoZSBjdXJyZW50IGFkYXB0ZXIgcG9zaXRpb24uIFRoZSBkaXN0YW5jZSBpcwotdXNlZnVsIHdoZW4gZGVhbGluZyB3aXRoLCBmb3IgZXhhbXBsZSwgcmF3IGF1ZGlvIHNhbXBsZXMgYmVjYXVzZSBpdCBhbGxvd3MKLXlvdSB0byBjYWxjdWxhdGUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudCBhZGFwdGVyIHBvc2l0aW9uIGJ5IHVzaW5nIHRoZQotbGFzdCBzZWVuIHRpbWVzdGFtcCBhbmQgdGhlIGFtb3VudCBvZiBieXRlcyBzaW5jZS4gIEFkZGl0aW9uYWxseSwgdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtcHRzLWF0LW9mZnNldCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfcHRzX2F0X29mZnNldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0KCk8L2NvZGU+PC9hPiBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGxhc3QKLXNlZW4gdGltZXN0YW1wIGF0IGEgcGFydGljdWxhciBvZmZzZXQgaW4gdGhlIGFkYXB0ZXIuPC9wPgotPHA+VGhlIGFkYXB0ZXIgd2lsbCBhbHNvIGtlZXAgdHJhY2sgb2YgdGhlIG9mZnNldCBvZiB0aGUgYnVmZmVycwotKDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR1NULUJVRkZFUi1PRkZTRVQ6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9CVUZGRVJfT0ZGU0VUPC9zcGFuPjwvYT4pIHRoYXQgd2VyZSBwdXNoZWQuIFRoZSBsYXN0IHNlZW4gb2Zmc2V0IGJlZm9yZSB0aGUKLWN1cnJlbnQgcG9zaXRpb24gY2FuIGJlIHF1ZXJpZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtb2Zmc2V0IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0KCk8L2NvZGU+PC9hPi4gVGhpcyBmdW5jdGlvbgotY2FuIG9wdGlvbmFsbHkgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlcgotdGhhdCBjYXJyaWVkIHRoZSBvZmZzZXQgYW5kIHRoZSBjdXJyZW50IGFkYXB0ZXIgcG9zaXRpb24uPC9wPgotPHA+QWRkaXRpb25hbGx5IHRoZSBhZGFwdGVyIGFsc28ga2VlcHMgdHJhY2sgb2YgdGhlIFBUUywgRFRTIGFuZCBidWZmZXIgb2Zmc2V0Ci1hdCB0aGUgbGFzdCBkaXNjb250aW51aXR5LCB3aGljaCBjYW4gYmUgcmV0cmlldmVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHRzLWF0LWRpc2NvbnQiIHRpdGxlPSJnc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnQoKTwvY29kZT48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWR0cy1hdC1kaXNjb250IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZHRzX2F0X2Rpc2NvbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX2R0c19hdF9kaXNjb250KCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItb2Zmc2V0LWF0LWRpc2NvbnQiIHRpdGxlPSJnc3RfYWRhcHRlcl9vZmZzZXRfYXRfZGlzY29udMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQoKTwvY29kZT48L2E+LiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2VyZSBjb25zdW1lZAotc2luY2UgdGhlbiBjYW4gYmUgcXVlcmllZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZGlzdGFuY2UtZnJvbS1kaXNjb250IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQoKTwvY29kZT48L2E+LjwvcD4KLTxwPkEgbGFzdCB0aGluZyB0byBub3RlIGlzIHRoYXQgd2hpbGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gaXMgcHJldHR5IG9wdGltaXplZCwKLW1lcmdpbmcgYnVmZmVycyBzdGlsbCBtaWdodCBiZSBhbiBvcGVyYXRpb24gdGhhdCByZXF1aXJlcyBhIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+bWFsbG9jKCk8L2NvZGU+IGFuZAotPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tZW1jcHkoKTwvY29kZT4gb3BlcmF0aW9uLCBhbmQgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgbm90IHRoZSBmYXN0ZXN0LiBCZWNhdXNlIG9mCi10aGlzLCBzb21lIGZ1bmN0aW9ucyBsaWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItYXZhaWxhYmxlLWZhc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QoKTwvY29kZT48L2E+IGFyZSBwcm92aWRlZCB0byBoZWxwCi1zcGVlZCB1cCBzdWNoIGNhc2VzIHNob3VsZCB5b3Ugd2FudCB0by4gVG8gYXZvaWQgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb25zLAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1jb3B5IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfY29wecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfY29weSgpPC9jb2RlPjwvYT4gY2FuIGJlIHVzZWQgdG8gY29weSBkYXRhIGludG8gYSAoc3RhdGljYWxseSBhbGxvY2F0ZWQpCi11c2VyIHByb3ZpZGVkIGJ1ZmZlci48L3A+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiBpcyBub3QgTVQgc2FmZS4gQWxsIG9wZXJhdGlvbnMgb24gYW4gYWRhcHRlciBtdXN0IGJlIHNlcmlhbGl6ZWQgYnkKLXRoZSBjYWxsZXIuIFRoaXMgaXMgbm90IG5vcm1hbGx5IGEgcHJvYmxlbSwgaG93ZXZlciwgYXMgdGhlIG5vcm1hbCB1c2UgY2FzZQotb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gaXMgaW5zaWRlIG9uZSBwYWQncyBjaGFpbiBmdW5jdGlvbiwgaW4gd2hpY2ggY2FzZSBhY2Nlc3MgaXMKLXNlcmlhbGl6ZWQgdmlhIHRoZSBwYWQncyBTVFJFQU1fTE9DSy48L3A+Ci08cD5Ob3RlIHRoYXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdXNoIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHVzaMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfcHVzaCgpPC9jb2RlPjwvYT4gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgcGFzc2VkLiBVc2UKLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci1yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9yZWYoKTwvY29kZT48L2E+IGJlZm9yZSBwdXNoaW5nIGl0IGludG8gdGhlIGFkYXB0ZXIgaWYgeW91IHN0aWxsIHdhbnQgdG8KLWFjY2VzcyB0aGUgYnVmZmVyIGxhdGVyLiBUaGUgYWRhcHRlciB3aWxsIG5ldmVyIG1vZGlmeSB0aGUgZGF0YSBpbiB0aGUKLWJ1ZmZlciBwdXNoZWQgaW4gaXQuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBZGFwdGVyLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1uZXciPjwvYT48aDM+Z3N0X2FkYXB0ZXJfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+wqAqCi1nc3RfYWRhcHRlcl9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPi4gRnJlZSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3QtdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19vYmplY3RfdW5yZWYoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1jbGVhciI+PC9hPjxoMz5nc3RfYWRhcHRlcl9jbGVhcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9hZGFwdGVyX2NsZWFyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlcyBhbGwgYnVmZmVycyBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItY2xlYXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wdXNoIj48L2E+PGgzPmdzdF9hZGFwdGVyX3B1c2jCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYWRhcHRlcl9wdXNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIHRoZSBkYXRhIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZjwvY29kZT48L2VtPgotIHRvIHRoZSBkYXRhIHN0b3JlZCBpbnNpZGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4KLSBhbmQgdGFrZXMKLW93bmVyc2hpcCBvZiB0aGUgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXB1c2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gYWRkIHRvIHF1ZXVlIGluIHRoZSBhZGFwdGVyLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItbWFwIj48L2E+PGgzPmdzdF9hZGFwdGVyX21hcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NvbnN0cG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4KLWdzdF9hZGFwdGVyX21hcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBmaXJzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIHN0b3JlZCBpbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4KLS4gVGhlIHJldHVybmVkIHBvaW50ZXIgaXMKLXZhbGlkIHVudGlsIHRoZSBuZXh0IGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB0aGUgYWRhcHRlci48L3A+Ci08cD5Ob3RlIHRoYXQgc2V0dGluZyB0aGUgcmV0dXJuZWQgcG9pbnRlciBhcyB0aGUgZGF0YSBvZiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGlzCi1pbmNvcnJlY3QgZm9yIGdlbmVyYWwtcHVycG9zZSBwbHVnaW5zLiBUaGUgcmVhc29uIGlzIHRoYXQgaWYgYSBkb3duc3RyZWFtCi1lbGVtZW50IHN0b3JlcyB0aGUgYnVmZmVyIHNvIHRoYXQgaXQgaGFzIGFjY2VzcyB0byBpdCBvdXRzaWRlIG9mIHRoZSBib3VuZHMKLW9mIGl0cyBjaGFpbiBmdW5jdGlvbiwgdGhlIGJ1ZmZlciB3aWxsIGhhdmUgYW4gaW52YWxpZCBkYXRhIHBvaW50ZXIgYWZ0ZXIKLXlvdXIgZWxlbWVudCBmbHVzaGVzIHRoZSBieXRlcy4gSW4gdGhhdCBjYXNlIHlvdSBzaG91bGQgdXNlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl90YWtlKCk8L2NvZGU+PC9hPiwgd2hpY2ggcmV0dXJucyBhIGZyZXNobHktYWxsb2NhdGVkIGJ1ZmZlciB0aGF0IHlvdSBjYW4gc2V0Ci1hcyA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBtZW1vcnkgb3IgdGhlIHBvdGVudGlhbGx5IG1vcmUgcGVyZm9ybWFudAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWJ1ZmZlciIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcigpPC9jb2RlPjwvYT4uPC9wPgotPHA+UmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBhcmUgbm90IGF2YWlsYWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1tYXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbWFwL3BlZWs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLW1hcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+ICAgIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLWJ5dGVzIG9mIGRhdGEsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBndWludDhdWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXVubWFwIj48L2E+PGgzPmdzdF9hZGFwdGVyX3VubWFwwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2FkYXB0ZXJfdW5tYXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWxlYXNlcyB0aGUgbWVtb3J5IG9idGFpbmVkIHdpdGggdGhlIGxhc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXAiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXDCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX21hcCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItdW5tYXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1jb3B5Ij48L2E+PGgzPmdzdF9hZGFwdGVyX2NvcHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYWRhcHRlcl9jb3B5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGVzdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db3BpZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBvZiBkYXRhIHN0YXJ0aW5nIGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSBvdXQgb2YgdGhlIGJ1ZmZlcnMKLWNvbnRhaW5lZCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiBpbnRvIGFuIGFycmF5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZXN0PC9jb2RlPjwvZW0+Ci0gcHJvdmlkZWQgYnkgdGhlIGNhbGxlci48L3A+Ci08cD5UaGUgYXJyYXkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRlc3Q8L2NvZGU+PC9lbT4KLSBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcy4KLVRoZSB1c2VyIHNob3VsZCBjaGVjayB0aGF0IHRoZSBhZGFwdGVyIGhhcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotICsgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSkgYnl0ZXMKLWF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLWNvcHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiAgICB0aGUgbWVtb3J5IHRvIGNvcHkgaW50by4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iT3V0IHBhcmFtZXRlciwgd2hlcmUgY2FsbGVyIG11c3QgYWxsb2NhdGUgc3RvcmFnZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQgY2FsbGVyLWFsbG9jYXRlczwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBndWludDhdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGJ5dGVzIG9mZnNldCBpbiB0aGUgYWRhcHRlciB0byBzdGFydCBmcm9tPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItY29weS1ieXRlcyI+PC9hPjxoMz5nc3RfYWRhcHRlcl9jb3B5X2J5dGVzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQnl0ZS1BcnJheXMuaHRtbCNHQnl0ZXMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0J5dGVzPC9zcGFuPjwvYT7CoCoKLWdzdF9hZGFwdGVyX2NvcHlfYnl0ZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TaW1pbGFyIHRvIGdzdF9hZGFwdGVyX2NvcHksIGJ1dCBtb3JlIHN1aXRhYmxlIGZvciBsYW5ndWFnZSBiaW5kaW5ncy4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLQotYnl0ZXMgb2YgZGF0YSBzdGFydGluZyBhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBjb3BpZWQgb3V0IG9mIHRoZSBidWZmZXJzIGNvbnRhaW5lZAotaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4KLSBhbmQgaW50byBhIG5ldyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CeXRlLUFycmF5cy5odG1sI0dCeXRlcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdCeXRlczwvc3Bhbj48L2E+IHN0cnVjdHVyZSB3aGljaCBpcyByZXR1cm5lZC4gRGVwZW5kaW5nIG9uCi10aGUgdmFsdWUgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYXJndW1lbnQgYW4gZW1wdHkgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQnl0ZS1BcnJheXMuaHRtbCNHQnl0ZXMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQnl0ZXM8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUgbWF5IGJlIHJldHVybmVkLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlJlbmFtZSB0aGUgb3JpZ2luYWwgc3ltYm9sJ3MgbmFtZSB0byBTWU1CT0wuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+cmVuYW1lLXRvPC9zcGFuPjwvYWNyb255bT4gZ3N0X2FkYXB0ZXJfY29weV08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItY29weS1ieXRlcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgYnl0ZXMgb2Zmc2V0IGluIHRoZSBhZGFwdGVyIHRvIHN0YXJ0IGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItY29weS1ieXRlcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgbmV3IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJ5dGUtQXJyYXlzLmh0bWwjR0J5dGVzIj48c3BhbiBjbGFzcz0idHlwZSI+R0J5dGVzPC9zcGFuPjwvYT4gc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGNvcGllZCBkYXRhLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1mbHVzaCI+PC9hPjxoMz5nc3RfYWRhcHRlcl9mbHVzaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9hZGFwdGVyX2ZsdXNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IGZsdXNoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZsdXNoZXMgdGhlIGZpcnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mbHVzaDwvY29kZT48L2VtPgotIGJ5dGVzIGluIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPgotLiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQKLWF0IGxlYXN0IHRoaXMgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlLjwvcD4KLTxwPlNlZSBhbHNvOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW1hcCIgdGl0bGU9ImdzdF9hZGFwdGVyX21hcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfbWFwKCk8L2NvZGU+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci11bm1hcCIgdGl0bGU9ImdzdF9hZGFwdGVyX3VubWFwwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl91bm1hcCgpPC9jb2RlPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1mbHVzaC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZmx1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItYXZhaWxhYmxlIj48L2E+PGgzPmdzdF9hZGFwdGVyX2F2YWlsYWJsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3NpemU8L3NwYW4+PC9hPgotZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0cyB0aGUgbWF4aW11bSBhbW91bnQgb2YgYnl0ZXMgYXZhaWxhYmxlLCB0aGF0IGlzIGl0IHJldHVybnMgdGhlIG1heGltdW0KLXZhbHVlIHRoYXQgY2FuIGJlIHN1cHBsaWVkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfbWFwwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9tYXAoKTwvY29kZT48L2E+IHdpdGhvdXQgdGhhdCBmdW5jdGlvbgotcmV0dXJuaW5nIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1hdmFpbGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItYXZhaWxhYmxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLWF2YWlsYWJsZS1mYXN0Ij48L2E+PGgzPmdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nc2l6ZTwvc3Bhbj48L2E+Ci1nc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aXRob3V0Ci1yZXF1aXJpbmcgYW55IGV4cGVuc2l2ZSBvcGVyYXRpb25zIChsaWtlIGNvcHlpbmcgdGhlIGRhdGEgaW50byBhCi10ZW1wb3JhcnkgYnVmZmVyKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IG51bWJlciBvZiBieXRlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4KLXdpdGhvdXQgZXhwZW5zaXZlCi1vcGVyYXRpb25zPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXRha2UiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfdGFrZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotZ3N0X2FkYXB0ZXJfdGFrZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG5ieXRlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIGEgZnJlc2hseSBhbGxvY2F0ZWQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZpcnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLSBieXRlcyBvZiB0aGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+Ci0uIFRoZSByZXR1cm5lZCBieXRlcyB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0aGUgYWRhcHRlci48L3A+Ci08cD5DYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4gZ19mcmVlIGFmdGVyIHVzYWdlLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXRha2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciBvZiBieXRlcyB0byB0YWtlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci10YWtlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gICAgb3Zlbi1mcmVzaCBob3QgZGF0YSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLWJ5dGVzIGFyZSBub3QgYXZhaWxhYmxlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPW5ieXRlc11bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gZ3VpbnQ4XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci10YWtlLWJ1ZmZlciI+PC9hPjxoMz5nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gbmJ5dGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgYSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBmaXJzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgb2YgdGhlCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPgotLiBUaGUgcmV0dXJuZWQgYnl0ZXMgd2lsbCBiZSBmbHVzaGVkIGZyb20gdGhlIGFkYXB0ZXIuCi1UaGlzIGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IG1vcmUgcGVyZm9ybWFudCB0aGFuCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl90YWtlKCk8L2NvZGU+PC9hPiBzaW5jZSBpdCBjYW4gcmV1c2UgdGhlIG1lbW9yeSBpbiBwdXNoZWQgYnVmZmVycwotYnkgc3ViYnVmZmVyaW5nIG9yIG1lcmdpbmcuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIGEKLWJ1ZmZlciB3aXRoIGEgc2luZ2xlIG1lbW9yeSByZWdpb24uPC9wPgotPHA+Tm90ZSB0aGF0IG5vIGFzc3VtcHRpb25zIHNob3VsZCBiZSBtYWRlIGFzIHRvIHdoZXRoZXIgY2VydGFpbiBidWZmZXIKLWZsYWdzIHN1Y2ggYXMgdGhlIERJU0NPTlQgZmxhZyBhcmUgc2V0IG9uIHRoZSByZXR1cm5lZCBidWZmZXIsIG9yIG5vdC4KLVRoZSBjYWxsZXIgbmVlZHMgdG8gZXhwbGljaXRseSBzZXQgb3IgdW5zZXQgZmxhZ3MgdGhhdCBzaG91bGQgYmUgc2V0IG9yCi11bnNldC48L3A+Ci08cD5TaW5jZSAxLjYgdGhpcyB3aWxsIGFsc28gY29weSBvdmVyIGFsbCBHc3RNZXRhIG9mIHRoZSBpbnB1dCBidWZmZXJzIGV4Y2VwdAotZm9yIG1ldGEgd2l0aCB0aGUgPGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0TWV0YS5odG1sI0dTVC1NRVRBLUZMQUctUE9PTEVEOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfTUVUQV9GTEFHX1BPT0xFRDwvY29kZT48L2E+IGZsYWcgb3Igd2l0aCB0aGUgIm1lbW9yeSIgdGFnLjwvcD4KLTxwPkNhbGxlciBvd25zIGEgcmVmZXJlbmNlIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlcgotdXNhZ2UuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXRha2UtYnVmZmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5ieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIGZpcnN0Ci08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+Ci1vZiB0aGUgYWRhcHRlciwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLWJ5dGVzIGFyZSBub3QgYXZhaWxhYmxlLgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfdW5yZWYoKTwvY29kZT48L2E+IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1nZXQtYnVmZmVyIj48L2E+PGgzPmdzdF9hZGFwdGVyX2dldF9idWZmZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9hZGFwdGVyX2dldF9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBuYnl0ZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGNvbnRhaW5pbmcgdGhlIGZpcnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLSBvZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4KLSwgYnV0Ci1kb2VzIG5vdCBmbHVzaCB0aGVtIGZyb20gdGhlIGFkYXB0ZXIuIFNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UtYnVmZmVyIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKCk8L2NvZGU+PC9hPgotZm9yIGRldGFpbHMuPC9wPgotPHA+Q2FsbGVyIG93bnMgYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIGJ1ZmZlci4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfdW5yZWYoKTwvY29kZT48L2E+IGFmdGVyCi11c2FnZS48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgZmlyc3QKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLW9mIHRoZSBhZGFwdGVyLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUuCi08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXRha2UtYnVmZmVyLWZhc3QiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG5ieXRlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotIG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRhcHRlcjwvY29kZT48L2VtPgotLgotVGhlIHJldHVybmVkIGJ5dGVzIHdpbGwgYmUgZmx1c2hlZCBmcm9tIHRoZSBhZGFwdGVyLiAgVGhpcyBmdW5jdGlvbgotaXMgcG90ZW50aWFsbHkgbW9yZSBwZXJmb3JtYW50IHRoYW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWJ1ZmZlciIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcigpPC9jb2RlPjwvYT4gc2luY2UKLWl0IGNhbiByZXVzZSB0aGUgbWVtb3J5IGluIHB1c2hlZCBidWZmZXJzIGJ5IHN1YmJ1ZmZlcmluZyBvcgotbWVyZ2luZy4gVW5saWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXIiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKTwvY29kZT48L2E+LCB0aGUgcmV0dXJuZWQgYnVmZmVyIG1heQotYmUgY29tcG9zZWQgb2YgbXVsdGlwbGUgbm9uLWNvbnRpZ3VvdXMgPGEgaHJlZj0iLi4vaHRtbC9Hc3RNZW1vcnkuaHRtbCNHc3RNZW1vcnktc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVtb3J5PC9zcGFuPjwvYT4gb2JqZWN0cywgbm8KLWNvcGllcyBhcmUgbWFkZS48L3A+Ci08cD5Ob3RlIHRoYXQgbm8gYXNzdW1wdGlvbnMgc2hvdWxkIGJlIG1hZGUgYXMgdG8gd2hldGhlciBjZXJ0YWluIGJ1ZmZlcgotZmxhZ3Mgc3VjaCBhcyB0aGUgRElTQ09OVCBmbGFnIGFyZSBzZXQgb24gdGhlIHJldHVybmVkIGJ1ZmZlciwgb3Igbm90LgotVGhlIGNhbGxlciBuZWVkcyB0byBleHBsaWNpdGx5IHNldCBvciB1bnNldCBmbGFncyB0aGF0IHNob3VsZCBiZSBzZXQgb3IKLXVuc2V0LjwvcD4KLTxwPlRoaXMgd2lsbCBhbHNvIGNvcHkgb3ZlciBhbGwgR3N0TWV0YSBvZiB0aGUgaW5wdXQgYnVmZmVycyBleGNlcHQKLWZvciBtZXRhIHdpdGggdGhlIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHU1QtTUVUQS1GTEFHLVBPT0xFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX01FVEFfRkxBR19QT09MRUQ8L2NvZGU+PC9hPiBmbGFnIG9yIHdpdGggdGhlICJtZW1vcnkiIHRhZy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gYnVmZmVyIHVwIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItYXZhaWxhYmxlIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9hdmFpbGFibGUoKTwvY29kZT48L2E+IHdpdGhvdXQgbWFraW5nIGNvcGllcyBpZiBwb3NzaWJsZS48L3A+Ci08cD5DYWxsZXIgb3ducyBhIHJlZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgYnVmZmVyLiA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4gYWZ0ZXIKLXVzYWdlLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci10YWtlLWJ1ZmZlci1mYXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5ieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXItZmFzdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgZmlyc3QKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLW9mIHRoZSBhZGFwdGVyLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUuCi08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLWdldC1idWZmZXItZmFzdCI+PC9hPjxoMz5nc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2Zhc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9hZGFwdGVyX2dldF9idWZmZXJfZmFzdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gbmJ5dGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgYSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBmaXJzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+Ci0gb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+Ci0sIGJ1dAotZG9lcyBub3QgZmx1c2ggdGhlbSBmcm9tIHRoZSBhZGFwdGVyLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWJ1ZmZlci1mYXN0IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdCgpPC9jb2RlPjwvYT4KLWZvciBkZXRhaWxzLjwvcD4KLTxwPkNhbGxlciBvd25zIGEgcmVmZXJlbmNlIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiBhZnRlcgotdXNhZ2UuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLWdldC1idWZmZXItZmFzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlci1mYXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBjb250YWluaW5nIHRoZSBmaXJzdAotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotb2YgdGhlIGFkYXB0ZXIsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+Ci1ieXRlcyBhcmUgbm90IGF2YWlsYWJsZS4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItdGFrZS1saXN0Ij48L2E+PGgzPmdzdF9hZGFwdGVyX3Rha2VfbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi1nc3RfYWRhcHRlcl90YWtlX2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG5ieXRlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBvZiBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGZpcnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLSBieXRlcyBvZiB0aGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hZGFwdGVyPC9jb2RlPjwvZW0+Ci0uIFRoZSByZXR1cm5lZCBieXRlcyB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0aGUgYWRhcHRlci4KLVdoZW4gdGhlIGNhbGxlciBjYW4gZGVhbCB3aXRoIGluZGl2aWR1YWwgYnVmZmVycywgdGhpcyBmdW5jdGlvbiBpcyBtb3JlCi1wZXJmb3JtYW50IGJlY2F1c2Ugbm8gbWVtb3J5IHNob3VsZCBiZSBjb3BpZWQuPC9wPgotPHA+Q2FsbGVyIG93bnMgcmV0dXJuZWQgbGlzdCBhbmQgY29udGFpbmVkIGJ1ZmZlcnMuIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3VucmVmKCk8L2NvZGU+PC9hPiBlYWNoCi1idWZmZXIgaW4gdGhlIGxpc3QgYmVmb3JlIGZyZWVpbmcgdGhlIGxpc3QgYWZ0ZXIgdXNhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItdGFrZS1saXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5ieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItdGFrZS1saXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mCi1idWZmZXJzIGNvbnRhaW5pbmcgdGhlIGZpcnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLW9mIHRoZSBhZGFwdGVyLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0LkJ1ZmZlcl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZ2V0LWxpc3QiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfZ2V0X2xpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R0xpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2FkYXB0ZXJfZ2V0X2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gbmJ5dGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotIGJ5dGVzIG9mIHRoZQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4KLSwgYnV0IGRvZXMgbm90IGZsdXNoIHRoZW0gZnJvbSB0aGUgYWRhcHRlci4gU2VlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UtbGlzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfbGlzdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2FkYXB0ZXJfdGFrZV9saXN0KCk8L2NvZGU+PC9hPiBmb3IgZGV0YWlscy48L3A+Ci08cD5DYWxsZXIgb3ducyByZXR1cm5lZCBsaXN0IGFuZCBjb250YWluZWQgYnVmZmVycy4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfdW5yZWYoKTwvY29kZT48L2E+IGVhY2gKLWJ1ZmZlciBpbiB0aGUgbGlzdCBiZWZvcmUgZnJlZWluZyB0aGUgbGlzdCBhZnRlciB1c2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1nZXQtbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZ2V0LWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gb2YKLWJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotb2YgdGhlIGFkYXB0ZXIsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+Ci1ieXRlcyBhcmUgbm90IGF2YWlsYWJsZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuQnVmZmVyXVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci10YWtlLWJ1ZmZlci1saXN0Ij48L2E+PGgzPmdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBuYnl0ZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotIGJ5dGVzIG9mCi10aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4KLS4gVGhlIHJldHVybmVkIGJ5dGVzIHdpbGwgYmUgZmx1c2hlZCBmcm9tIHRoZSBhZGFwdGVyLgotV2hlbiB0aGUgY2FsbGVyIGNhbiBkZWFsIHdpdGggaW5kaXZpZHVhbCBidWZmZXJzLCB0aGlzIGZ1bmN0aW9uIGlzIG1vcmUKLXBlcmZvcm1hbnQgYmVjYXVzZSBubyBtZW1vcnkgc2hvdWxkIGJlIGNvcGllZC48L3A+Ci08cD5DYWxsZXIgb3ducyB0aGUgcmV0dXJuZWQgbGlzdC4gQ2FsbCA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlckxpc3QuaHRtbCNnc3QtYnVmZmVyLWxpc3QtdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9saXN0X3VucmVmKCk8L2NvZGU+PC9hPiB0byBmcmVlCi10aGUgbGlzdCBhZnRlciB1c2FnZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci10YWtlLWJ1ZmZlci1saXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5ieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXItbGlzdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXJMaXN0Lmh0bWwjR3N0QnVmZmVyTGlzdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJMaXN0PC9zcGFuPjwvYT4gb2YgYnVmZmVycyBjb250YWluaW5nCi10aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotb2YgdGhlIGFkYXB0ZXIsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+Ci1ieXRlcyBhcmUgbm90Ci1hdmFpbGFibGUuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlci1saXN0Ij48L2E+PGgzPmdzdF9hZGFwdGVyX2dldF9idWZmZXJfbGlzdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPsKgKgotZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcl9saXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBuYnl0ZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyTGlzdC5odG1sI0dzdEJ1ZmZlckxpc3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyTGlzdDwvc3Bhbj48L2E+IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotIGJ5dGVzIG9mCi10aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9lbT4KLSBidXQgZG9lcyBub3QgZmx1c2ggdGhlbSBmcm9tIHRoZSBhZGFwdGVyLiBTZWUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXItbGlzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3TCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3QoKTwvY29kZT48L2E+IGZvciBkZXRhaWxzLjwvcD4KLTxwPkNhbGxlciBvd25zIHRoZSByZXR1cm5lZCBsaXN0LiBDYWxsIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyTGlzdC5odG1sI2dzdC1idWZmZXItbGlzdC11bnJlZiI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX2xpc3RfdW5yZWYoKTwvY29kZT48L2E+IHRvIGZyZWUKLXRoZSBsaXN0IGFmdGVyIHVzYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLWdldC1idWZmZXItbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlci1saXN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlckxpc3QuaHRtbCNHc3RCdWZmZXJMaXN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckxpc3Q8L3NwYW4+PC9hPiBvZiBidWZmZXJzIGNvbnRhaW5pbmcKLXRoZSBmaXJzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJ5dGVzPC9jb2RlPjwvZW0+Ci1vZiB0aGUgYWRhcHRlciwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLWJ5dGVzIGFyZSBub3QKLWF2YWlsYWJsZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wcmV2LXB0cyI+PC9hPjxoMz5nc3RfYWRhcHRlcl9wcmV2X3B0c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9hZGFwdGVyX3ByZXZfcHRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqZGlzdGFuY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBwdHMgdGhhdCB3YXMgYmVmb3JlIHRoZSBjdXJyZW50IGJ5dGUgaW4gdGhlIGFkYXB0ZXIuIFdoZW4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaXN0YW5jZTwvY29kZT48L2VtPgotIGlzIGdpdmVuLCB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIHB0cyBhbmQgdGhlIGN1cnJlbnQKLXBvc2l0aW9uIGlzIHJldHVybmVkLjwvcD4KLTxwPlRoZSBwdHMgaXMgcmVzZXQgdG8gR1NUX0NMT0NLX1RJTUVfTk9ORSBhbmQgdGhlIGRpc3RhbmNlIGlzIHNldCB0byAwIHdoZW4KLXRoZSBhZGFwdGVyIGlzIGZpcnN0IGNyZWF0ZWQgb3Igd2hlbiBpdCBpcyBjbGVhcmVkLiBUaGlzIGFsc28gbWVhbnMgdGhhdCBiZWZvcmUKLXRoZSBmaXJzdCBieXRlIHdpdGggYSBwdHMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhZGFwdGVyLCB0aGUgcHRzCi1hbmQgZGlzdGFuY2UgcmV0dXJuZWQgYXJlIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIDAgcmVzcGVjdGl2ZWx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXByZXYtcHRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRpc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gbG9jYXRpb24gZm9yIGRpc3RhbmNlLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wcmV2LXB0cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBwcmV2aW91c2x5IHNlZW4gcHRzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wcmV2LWR0cyI+PC9hPjxoMz5nc3RfYWRhcHRlcl9wcmV2X2R0c8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9hZGFwdGVyX3ByZXZfZHRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqZGlzdGFuY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBkdHMgdGhhdCB3YXMgYmVmb3JlIHRoZSBjdXJyZW50IGJ5dGUgaW4gdGhlIGFkYXB0ZXIuIFdoZW4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaXN0YW5jZTwvY29kZT48L2VtPgotIGlzIGdpdmVuLCB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIGR0cyBhbmQgdGhlIGN1cnJlbnQKLXBvc2l0aW9uIGlzIHJldHVybmVkLjwvcD4KLTxwPlRoZSBkdHMgaXMgcmVzZXQgdG8gR1NUX0NMT0NLX1RJTUVfTk9ORSBhbmQgdGhlIGRpc3RhbmNlIGlzIHNldCB0byAwIHdoZW4KLXRoZSBhZGFwdGVyIGlzIGZpcnN0IGNyZWF0ZWQgb3Igd2hlbiBpdCBpcyBjbGVhcmVkLiBUaGlzIGFsc28gbWVhbnMgdGhhdCBiZWZvcmUKLXRoZSBmaXJzdCBieXRlIHdpdGggYSBkdHMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhZGFwdGVyLCB0aGUgZHRzCi1hbmQgZGlzdGFuY2UgcmV0dXJuZWQgYXJlIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIDAgcmVzcGVjdGl2ZWx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXByZXYtZHRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRpc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gbG9jYXRpb24gZm9yIGRpc3RhbmNlLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wcmV2LWR0cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBwcmV2aW91c2x5IHNlZW4gZHRzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wcmV2LXB0cy1hdC1vZmZzZXQiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotZ3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmRpc3RhbmNlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgcHRzIHRoYXQgd2FzIGJlZm9yZSB0aGUgYnl0ZSBhdCBvZmZzZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIGluIHRoZSBhZGFwdGVyLiBXaGVuCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlzdGFuY2U8L2NvZGU+PC9lbT4KLSBpcyBnaXZlbiwgdGhlIGFtb3VudCBvZiBieXRlcyBiZXR3ZWVuIHRoZSBwdHMgYW5kIHRoZSBjdXJyZW50Ci1wb3NpdGlvbiBpcyByZXR1cm5lZC48L3A+Ci08cD5UaGUgcHRzIGlzIHJlc2V0IHRvIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIHRoZSBkaXN0YW5jZSBpcyBzZXQgdG8gMCB3aGVuCi10aGUgYWRhcHRlciBpcyBmaXJzdCBjcmVhdGVkIG9yIHdoZW4gaXQgaXMgY2xlYXJlZC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgYmVmb3JlCi10aGUgZmlyc3QgYnl0ZSB3aXRoIGEgcHRzIGlzIHJlbW92ZWQgZnJvbSB0aGUgYWRhcHRlciwgdGhlIHB0cwotYW5kIGRpc3RhbmNlIHJldHVybmVkIGFyZSBHU1RfQ0xPQ0tfVElNRV9OT05FIGFuZCAwIHJlc3BlY3RpdmVseS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wcmV2LXB0cy1hdC1vZmZzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9mZnNldCBpbiB0aGUgYWRhcHRlciBhdCB3aGljaCB0byBnZXQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRpc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHBvaW50ZXIgdG8gbG9jYXRpb24gZm9yIGRpc3RhbmNlLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wcmV2LXB0cy1hdC1vZmZzZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgcHJldmlvdXNseSBzZWVuIHB0cyBhdCBnaXZlbiBvZmZzZXQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXByZXYtZHRzLWF0LW9mZnNldCI+PC9hPjxoMz5nc3RfYWRhcHRlcl9wcmV2X2R0c19hdF9vZmZzZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3RfYWRhcHRlcl9wcmV2X2R0c19hdF9vZmZzZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqZGlzdGFuY2U8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBkdHMgdGhhdCB3YXMgYmVmb3JlIHRoZSBieXRlIGF0IG9mZnNldCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gaW4gdGhlIGFkYXB0ZXIuIFdoZW4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kaXN0YW5jZTwvY29kZT48L2VtPgotIGlzIGdpdmVuLCB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIGR0cyBhbmQgdGhlIGN1cnJlbnQKLXBvc2l0aW9uIGlzIHJldHVybmVkLjwvcD4KLTxwPlRoZSBkdHMgaXMgcmVzZXQgdG8gR1NUX0NMT0NLX1RJTUVfTk9ORSBhbmQgdGhlIGRpc3RhbmNlIGlzIHNldCB0byAwIHdoZW4KLXRoZSBhZGFwdGVyIGlzIGZpcnN0IGNyZWF0ZWQgb3Igd2hlbiBpdCBpcyBjbGVhcmVkLiBUaGlzIGFsc28gbWVhbnMgdGhhdCBiZWZvcmUKLXRoZSBmaXJzdCBieXRlIHdpdGggYSBkdHMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhZGFwdGVyLCB0aGUgZHRzCi1hbmQgZGlzdGFuY2UgcmV0dXJuZWQgYXJlIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIDAgcmVzcGVjdGl2ZWx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXByZXYtZHRzLWF0LW9mZnNldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2Zmc2V0IGluIHRoZSBhZGFwdGVyIGF0IHdoaWNoIHRvIGdldCB0aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGlzdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBsb2NhdGlvbiBmb3IgZGlzdGFuY2UsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLXByZXYtZHRzLWF0LW9mZnNldC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBwcmV2aW91c2x5IHNlZW4gZHRzIGF0IGdpdmVuIG9mZnNldC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItcHJldi1vZmZzZXQiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfcHJldl9vZmZzZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYWRhcHRlcl9wcmV2X29mZnNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKmRpc3RhbmNlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgb2Zmc2V0IHRoYXQgd2FzIGJlZm9yZSB0aGUgY3VycmVudCBieXRlIGluIHRoZSBhZGFwdGVyLiBXaGVuCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGlzdGFuY2U8L2NvZGU+PC9lbT4KLSBpcyBnaXZlbiwgdGhlIGFtb3VudCBvZiBieXRlcyBiZXR3ZWVuIHRoZSBvZmZzZXQgYW5kIHRoZSBjdXJyZW50Ci1wb3NpdGlvbiBpcyByZXR1cm5lZC48L3A+Ci08cD5UaGUgb2Zmc2V0IGlzIHJlc2V0IHRvIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUgYW5kIHRoZSBkaXN0YW5jZSBpcyBzZXQgdG8gMAotd2hlbiB0aGUgYWRhcHRlciBpcyBmaXJzdCBjcmVhdGVkIG9yIHdoZW4gaXQgaXMgY2xlYXJlZC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQKLWJlZm9yZSB0aGUgZmlyc3QgYnl0ZSB3aXRoIGFuIG9mZnNldCBpcyByZW1vdmVkIGZyb20gdGhlIGFkYXB0ZXIsIHRoZSBvZmZzZXQKLWFuZCBkaXN0YW5jZSByZXR1cm5lZCBhcmUgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSBhbmQgMCByZXNwZWN0aXZlbHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItcHJldi1vZmZzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGlzdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byBhIGxvY2F0aW9uIGZvciBkaXN0YW5jZSwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItcHJldi1vZmZzZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgcHJldmlvdXMgc2VlbiBvZmZzZXQuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItcHRzLWF0LWRpc2NvbnQiPjwvYT48aDM+Z3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgUFRTIHRoYXQgd2FzIG9uIHRoZSBsYXN0IGJ1ZmZlciB3aXRoIHRoZSBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVAotZmxhZywgb3IgR1NUX0NMT0NLX1RJTUVfTk9ORS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wdHMtYXQtZGlzY29udC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1wdHMtYXQtZGlzY29udC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBQVFMgYXQgdGhlIGxhc3QgZGlzY29udCBvciBHU1RfQ0xPQ0tfVElNRV9OT05FLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDMuaHRtbCNhcGktaW5kZXgtMS4xMCI+MS4xMDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLWR0cy1hdC1kaXNjb250Ij48L2E+PGgzPmdzdF9hZGFwdGVyX2R0c19hdF9kaXNjb250wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotZ3N0X2FkYXB0ZXJfZHRzX2F0X2Rpc2NvbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIERUUyB0aGF0IHdhcyBvbiB0aGUgbGFzdCBidWZmZXIgd2l0aCB0aGUgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQKLWZsYWcsIG9yIEdTVF9DTE9DS19USU1FX05PTkUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZHRzLWF0LWRpc2NvbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFkYXB0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZHRzLWF0LWRpc2NvbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgRFRTIGF0IHRoZSBsYXN0IGRpc2NvbnQgb3IgR1NUX0NMT0NLX1RJTUVfTk9ORS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDAzLmh0bWwjYXBpLWluZGV4LTEuMTAiPjEuMTA8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1vZmZzZXQtYXQtZGlzY29udCI+PC9hPjxoMz5nc3RfYWRhcHRlcl9vZmZzZXRfYXRfZGlzY29udMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLWdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4gKmFkYXB0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBvZmZzZXQgdGhhdCB3YXMgb24gdGhlIGxhc3QgYnVmZmVyIHdpdGggdGhlIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UCi1mbGFnLCBvciBHU1RfQlVGRkVSX09GRlNFVF9OT05FLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLW9mZnNldC1hdC1kaXNjb250LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1hZGFwdGVyLW9mZnNldC1hdC1kaXNjb250LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG9mZnNldCBhdCB0aGUgbGFzdCBkaXNjb250IG9yIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwMy5odG1sI2FwaS1pbmRleC0xLjEwIj4xLjEwPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItZGlzdGFuY2UtZnJvbS1kaXNjb250Ij48L2E+PGgzPmdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLWdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWFkYXB0ZXItbWFza2VkLXNjYW4tdWludDMyIj48L2E+PGgzPmdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzc2l6ZTwvc3Bhbj48L2E+Ci1nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiAqYWRhcHRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBtYXNrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHBhdHRlcm48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNjYW4gZm9yIHBhdHRlcm4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdHRlcm48L2NvZGU+PC9lbT4KLSB3aXRoIGFwcGxpZWQgbWFzayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPgotIGluIHRoZSBhZGFwdGVyIGRhdGEsCi1zdGFydGluZyBmcm9tIG9mZnNldCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhlIGJ5dGVzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXR0ZXJuPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXNrPC9jb2RlPjwvZW0+Ci0gYXJlIGludGVycHJldGVkIGxlZnQtdG8tcmlnaHQsIHJlZ2FyZGxlc3MKLW9mIGVuZGlhbm5lc3MuICBBbGwgZm91ciBieXRlcyBvZiB0aGUgcGF0dGVybiBtdXN0IGJlIHByZXNlbnQgaW4gdGhlCi1hZGFwdGVyIGZvciBpdCB0byBtYXRjaCwgZXZlbiBpZiB0aGUgZmlyc3Qgb3IgbGFzdCBieXRlcyBhcmUgbWFza2VkIG91dC48L3A+Ci08cD5JdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZXJlIGlzCi1lbm91Z2ggZGF0YSAob2Zmc2V0K3NpemUgYnl0ZXMpIGluIHRoZSBhZGFwdGVyLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gY2FsbHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlayIgdGl0bGU9ImdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlaygpPC9jb2RlPjwvYT4gcGFzc2luZyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4KLWZvciB2YWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRhcHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1hc2sgdG8gYXBwbHkgdG8gZGF0YSBiZWZvcmUgbWF0Y2hpbmcgYWdhaW5zdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhdHRlcm48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYXR0ZXJuIHRvIG1hdGNoIChhZnRlciBtYXNrIGlzIGFwcGxpZWQpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9mZnNldCBpbnRvIHRoZSBhZGFwdGVyIGRhdGEgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgcmV0dXJucwotdGhlIGxhc3Qgc2Nhbm5lZCBwb3NpdGlvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBieXRlcyB0byBzY2FuIGZyb20gb2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBvZmZzZXQgb2YgdGhlIGZpcnN0IG1hdGNoLCBvciAtMSBpZiBubyBtYXRjaCB3YXMgZm91bmQuPC9wPgotPHA+RXhhbXBsZTo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0vLyBBc3N1bWUgdGhlIGFkYXB0ZXIgY29udGFpbnMgMHgwMCAweDAxIDB4MDIgLi4uIDB4ZmUgMHhmZgotZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDAwMDEwMjAzLCAwLCAyNTYpOwotLy8gLSZndDsgcmV0dXJucyAwCi1nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDEsIDI1NSk7Ci0vLyAtJmd0OyByZXR1cm5zIC0xCi1nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDEwMjAzMDQsIDEsIDI1NSk7Ci0vLyAtJmd0OyByZXR1cm5zIDEKLWdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmLCAweDAwMDEsIDAsIDI1Nik7Ci0vLyAtJmd0OyByZXR1cm5zIC0xCi1nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZiwgMHgwMjAzLCAwLCAyNTYpOwotLy8gLSZndDsgcmV0dXJucyAwCi1nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZjAwMDAsIDB4MDIwMzAwMDAsIDAsIDI1Nik7Ci0vLyAtJmd0OyByZXR1cm5zIDIKLWdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmMDAwMCwgMHgwMjAzMDAwMCwgMCwgNCk7Ci0vLyAtJmd0OyByZXR1cm5zIC0xCi08L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlayI+PC9hPjxoMz5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVla8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NzaXplIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdzc2l6ZTwvc3Bhbj48L2E+Ci1nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWRhcHRlcjwvc3Bhbj48L2E+ICphZGFwdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gbWFzazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHBhdHRlcm48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TY2FuIGZvciBwYXR0ZXJuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXR0ZXJuPC9jb2RlPjwvZW0+Ci0gd2l0aCBhcHBsaWVkIG1hc2sgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT4KLSBpbiB0aGUgYWRhcHRlciBkYXRhLAotc3RhcnRpbmcgZnJvbSBvZmZzZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotLiAgSWYgYSBtYXRjaCBpcyBmb3VuZCwgdGhlIHZhbHVlIHRoYXQgbWF0Y2hlZAotaXMgcmV0dXJuZWQgdGhyb3VnaCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSwgb3RoZXJ3aXNlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIGlzIGxlZnQgdW50b3VjaGVkLjwvcD4KLTxwPlRoZSBieXRlcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPgotIGFyZSBpbnRlcnByZXRlZCBsZWZ0LXRvLXJpZ2h0LCByZWdhcmRsZXNzCi1vZiBlbmRpYW5uZXNzLiAgQWxsIGZvdXIgYnl0ZXMgb2YgdGhlIHBhdHRlcm4gbXVzdCBiZSBwcmVzZW50IGluIHRoZQotYWRhcHRlciBmb3IgaXQgdG8gbWF0Y2gsIGV2ZW4gaWYgdGhlIGZpcnN0IG9yIGxhc3QgYnl0ZXMgYXJlIG1hc2tlZCBvdXQuPC9wPgotPHA+SXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgbWFraW5nIHN1cmUgdGhhdCB0aGVyZSBpcwotZW5vdWdoIGRhdGEgKG9mZnNldCtzaXplIGJ5dGVzKSBpbiB0aGUgYWRhcHRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hZGFwdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWFzayB0byBhcHBseSB0byBkYXRhIGJlZm9yZSBtYXRjaGluZyBhZ2FpbnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXR0ZXJuPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGF0dGVybjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBhdHRlcm4gdG8gbWF0Y2ggKGFmdGVyIG1hc2sgaXMgYXBwbGllZCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b2Zmc2V0IGludG8gdGhlIGFkYXB0ZXIgZGF0YSBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNjYW5uaW5nLCByZXR1cm5zCi10aGUgbGFzdCBzY2FubmVkIHBvc2l0aW9uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGJ5dGVzIHRvIHNjYW4gZnJvbSBvZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gcG9pbnRlciB0byB1aW50MzIgdG8gcmV0dXJuIG1hdGNoaW5nIGRhdGEuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IG9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2gsIG9yIC0xIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RBZGFwdGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBZGFwdGVyLXN0cnVjdCI+PC9hPjxoMz5Hc3RBZGFwdGVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0QWRhcHRlciBHc3RBZGFwdGVyOzwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFkYXB0ZXI8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvR3N0QmFzZVBhcnNlLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlUGFyc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ0NjNjMy4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlUGFyc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NDIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdEJhc2VQYXJzZTogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmFzZVBhcnNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RCYXNlUGFyc2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmFzZVBhcnNlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0QmFzZVBhcnNlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0QmFzZVBhcnNlLnRvcF9vZl9wYWdlIj48L2E+R3N0QmFzZVBhcnNlPC9zcGFuPjwvaDI+Ci08cD5Hc3RCYXNlUGFyc2Ug4oCUIEJhc2UgY2xhc3MgZm9yIHN0cmVhbSBwYXJzZXJzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VQYXJzZS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1tZXJnZS10YWdzIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFnc8KgKCkiPmdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtZHVyYXRpb24iIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb27CoCgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtYXZlcmFnZS1iaXRyYXRlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZcKgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9hdmVyYWdlX2JpdHJhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtbWluLWZyYW1lLXNpemUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemXCoCgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtcGFzc3Rocm91Z2giIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2jCoCgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtc3luY2FibGUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGXCoCgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtaGFzLXRpbWluZy1pbmZvIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mb8KgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9oYXNfdGltaW5nX2luZm88L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtZnJhbWUtcmF0ZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlwqAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9sYXRlbmN5wqAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2xhdGVuY3k8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtaW5mZXItdHMiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfaW5mZXJfdHPCoCgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfaW5mZXJfdHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtcHRzLWludGVycG9sYXRpb24iIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfcHRzX2ludGVycG9sYXRpb27CoCgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfcHRzX2ludGVycG9sYXRpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtdHMtYXQtb2Zmc2V0IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X3RzX2F0X29mZnNldMKgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF90c19hdF9vZmZzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWNvbnZlcnQtZGVmYXVsdCIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdMKgKCkiPmdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtYWRkLWluZGV4LWVudHJ5IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5wqAoKSI+Z3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QmFzZVBhcnNlRnJhbWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZnJhbWUtbmV3IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfbmV3wqAoKSI+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZnJhbWUtaW5pdCIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXTCoCgpIj5nc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZnJhbWUtZnJlZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWXCoCgpIj5nc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtcHVzaC1mcmFtZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWXCoCgpIj5nc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZmluaXNoLWZyYW1lIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lwqAoKSI+Z3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRFJBSU5JTkc6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX0RSQUlOSU5HKCkiPkdTVF9CQVNFX1BBUlNFX0RSQUlOSU5HPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUxPU1QtU1lOQzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DKCkiPkdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1TSU5LLVBBRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQoKSI+R1NUX0JBU0VfUEFSU0VfU0lOS19QQUQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtU1JDLVBBRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCgpIj5HU1RfQkFTRV9QQVJTRV9TUkNfUEFEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VQYXJzZS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2UtLWRpc2FibGUtcGFzc3Rocm91Z2giIHRpdGxlPSJUaGUg4oCcZGlzYWJsZS1wYXNzdGhyb3VnaOKAnSBwcm9wZXJ0eSI+ZGlzYWJsZS1wYXNzdGhyb3VnaDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VQYXJzZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2VDbGFzcyI+R3N0QmFzZVBhcnNlQ2xhc3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPkdzdEJhc2VQYXJzZUZyYW1lPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiPkdzdEJhc2VQYXJzZUZyYW1lRmxhZ3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMQUctRFJBSU5JTkc6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkciPkdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkc8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMQUctTE9TVC1TWU5DOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9QQVJTRV9GTEFHX0xPU1RfU1lOQyI+R1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkM8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMT1ctRFJPUFBFRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEIj5HU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVBhcnNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEJhc2VQYXJzZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VQYXJzZS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VQYXJzZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGJhc2UgY2xhc3MgaXMgZm9yIHBhcnNlciBlbGVtZW50cyB0aGF0IHByb2Nlc3MgZGF0YSBhbmQgc3BsaXRzIGl0Ci1pbnRvIHNlcGFyYXRlIGF1ZGlvL3ZpZGVvL3doYXRldmVyIGZyYW1lcy48L3A+Ci08cD5JdCBwcm92aWRlcyBmb3I6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPnByb3ZpZGVzIG9uZSBzaW5rIHBhZCBhbmQgb25lIHNvdXJjZSBwYWQ8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmhhbmRsZXMgc3RhdGUgY2hhbmdlczwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Y2FuIG9wZXJhdGUgaW4gcHVsbCBtb2RlIG9yIHB1c2ggbW9kZTwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+aGFuZGxlcyBzZWVraW5nIGluIGJvdGggbW9kZXM8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPmhhbmRsZXMgZXZlbnRzIChTRUdNRU5UL0VPUy9GTFVTSCk8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgICAgIGhhbmRsZXMgcXVlcmllcyAoUE9TSVRJT04vRFVSQVRJT04vU0VFS0lORy9GT1JNQVQvQ09OVkVSVCkKLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5oYW5kbGVzIGZsdXNoaW5nPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+VGhlIHB1cnBvc2Ugb2YgdGhpcyBiYXNlIGNsYXNzIGlzIHRvIHByb3ZpZGUgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YKLWEgcGFyc2VyIGFuZCBzaGFyZSBhIGxvdCBvZiByYXRoZXIgY29tcGxleCBjb2RlLjwvcD4KLTxwPkRlc2NyaXB0aW9uIG9mIHRoZSBwYXJzaW5nIG1lY2hhbmlzbTo8L3A+Ci08ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgotPHAgY2xhc3M9InRpdGxlIj48Yj5TZXQtdXAgcGhhc2U8L2I+PC9wPgotPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiBjYWxscyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnQ8L2NvZGU+PC9lbT4gdG8gaW5mb3JtIHN1YmNsYXNzIHRoYXQgZGF0YSBwcm9jZXNzaW5nIGlzCi0gICAgYWJvdXQgdG8gc3RhcnQgbm93LgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+IGNsYXNzIGNhbGxzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXRfc2lua19jYXBzPC9jb2RlPjwvZW0+IHRvIGluZm9ybSB0aGUgc3ViY2xhc3MgYWJvdXQKLSAgICBpbmNvbWluZyBzaW5rcGFkIGNhcHMuIFN1YmNsYXNzIGNvdWxkIGFscmVhZHkgc2V0IHRoZSBzcmNwYWQgY2FwcwotICAgIGFjY29yZGluZ2x5LCBidXQgdGhpcyBtaWdodCBiZSBkZWxheWVkIHVudGlsIGNhbGxpbmcKLSAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZmluaXNoLWZyYW1lIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhbWUoKTwvY29kZT48L2E+IHdpdGggYSBub24tcXVldWVkIGZyYW1lLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgICBBdCBsZWFzdCBhdCB0aGlzIHBvaW50IHN1YmNsYXNzIG5lZWRzIHRvIHRlbGwgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+IGNsYXNzCi0gICAgIGhvdyBiaWcgZGF0YSBjaHVua3MgaXQgd2FudHMgdG8gcmVjZWl2ZSAobWluX2ZyYW1lX3NpemUpLiBJdCBjYW4gZG8KLSAgICAgdGhpcyB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtbWluLWZyYW1lLXNpemUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSgpPC9jb2RlPjwvYT4uCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+IGNsYXNzIHNldHMgdXAgYXBwcm9wcmlhdGUgZGF0YSBwYXNzaW5nIG1vZGUgKHB1bGwvcHVzaCkKLSAgICAgYW5kIHN0YXJ0cyB0byBwcm9jZXNzIHRoZSBkYXRhLgotICA8L3A+PC9saT4KLTwvdWw+Ci08L2Rpdj48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+UGFyc2luZyBwaGFzZTwvYj48L3A+Ci08dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gZ2F0aGVycyBhdCBsZWFzdCBtaW5fZnJhbWVfc2l6ZSBieXRlcyBvZiBkYXRhIGVpdGhlcgotICAgICAgYnkgcHVsbGluZyBpdCBmcm9tIHVwc3RyZWFtIG9yIGNvbGxlY3RpbmcgYnVmZmVycyBpbiBhbiBpbnRlcm5hbAotICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBZGFwdGVyPC9zcGFuPjwvYT4uCi0gICAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLTxwPgotICAgICAgQSBidWZmZXIgb2YgKGF0IGxlYXN0KSBtaW5fZnJhbWVfc2l6ZSBieXRlcyBpcyBwYXNzZWQgdG8gc3ViY2xhc3Mgd2l0aAotICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhhbmRsZV9mcmFtZTwvY29kZT48L2VtPi4gU3ViY2xhc3MgY2hlY2tzIHRoZSBjb250ZW50cyBhbmQgY2FuIG9wdGlvbmFsbHkKLSAgICAgIHJldHVybiBHU1RfRkxPV19PSyBhbG9uZyB3aXRoIGFuIGFtb3VudCBvZiBkYXRhIHRvIGJlIHNraXBwZWQgdG8gZmluZAotICAgICAgYSB2YWxpZCBmcmFtZSAod2hpY2ggd2lsbCByZXN1bHQgaW4gYSBzdWJzZXF1ZW50IERJU0NPTlQpLgotICAgICAgSWYsIG90aGVyd2lzZSwgdGhlIGJ1ZmZlciBkb2VzIG5vdCBob2xkIGEgY29tcGxldGUgZnJhbWUsCi0gICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlX2ZyYW1lPC9jb2RlPjwvZW0+IGNhbiBtZXJlbHkgcmV0dXJuIGFuZCB3aWxsIGJlIGNhbGxlZCBhZ2FpbiB3aGVuIGFkZGl0aW9uYWwKLSAgICAgIGRhdGEgaXMgYXZhaWxhYmxlLiAgSW4gcHVzaCBtb2RlIHRoaXMgYW1vdW50cyB0byBhbgotICAgICAgYWRkaXRpb25hbCBpbnB1dCBidWZmZXIgKHRodXMgbWluaW1hbCBhZGRpdGlvbmFsIGxhdGVuY3kpLCBpbiBwdWxsIG1vZGUKLSAgICAgIHRoaXMgYW1vdW50cyB0byBzb21lIGFyYml0cmFyeSByZWFzb25hYmxlIGJ1ZmZlciBzaXplIGluY3JlYXNlLgotICAgICAgT2YgY291cnNlLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LW1pbi1mcmFtZS1zaXplIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUoKTwvY29kZT48L2E+IGNvdWxkIGFsc28gYmUgdXNlZCBpZiBhCi0gICAgICB2ZXJ5IHNwZWNpZmljIGtub3duIGFtb3VudCBvZiBhZGRpdGlvbmFsIGRhdGEgaXMgcmVxdWlyZWQuCi0gICAgICBJZiwgaG93ZXZlciwgdGhlIGJ1ZmZlciBob2xkcyBhIGNvbXBsZXRlIHZhbGlkIGZyYW1lLCBpdCBjYW4gcGFzcwotICAgICAgdGhlIHNpemUgb2YgdGhpcyBmcmFtZSB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZmluaXNoLWZyYW1lIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhbWUoKTwvY29kZT48L2E+LgotICAgICAgSWYgYWN0aW5nIGFzIGEgY29udmVydGVyLCBpdCBjYW4gYWxzbyBtZXJlbHkgaW5kaWNhdGUgY29uc3VtZWQgaW5wdXQgZGF0YQotICAgICAgd2hpbGUgc2ltdWx0YW5lb3VzbHkgcHJvdmlkaW5nIGN1c3RvbSBvdXRwdXQgZGF0YS4KLSAgICAgIE5vdGUgdGhhdCBiYXNlY2xhc3MgcGVyZm9ybXMgc29tZSBwcm9jZXNzaW5nIChzdWNoIGFzIHRyYWNraW5nCi0gICAgICBvdmVyYWxsIGNvbnN1bWVkIGRhdGEgcmF0ZSB2ZXJzdXMgZHVyYXRpb24pIGZvciBlYWNoIGZpbmlzaGVkIGZyYW1lLAotICAgICAgYnV0IG90aGVyIHN0YXRlIGlzIG9ubHkgdXBkYXRlZCB1cG9uIGVhY2ggY2FsbCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlX2ZyYW1lPC9jb2RlPjwvZW0+Ci0gICAgICAoc3VjaCBhcyB0cmFja2luZyB1cHN0cmVhbSBpbnB1dCB0aW1lc3RhbXApLgotICAgICAgPC9wPgotPHA+Ci0gICAgICBTdWJjbGFzcyBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBidWZmZXIgbWV0YWRhdGEKLSAgICAgIChlLmcuIGJ1ZmZlciB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uLCBvciBrZXlmcmFtZSBpZiBhcHBsaWNhYmxlKS4KLSAgICAgIChhbHRob3VnaCB0aGUgbGF0dGVyIGNhbiBhbHNvIGJlIGRvbmUgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gaWYgaXQgaXMKLSAgICAgIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCwgc2VlIGJlbG93KS4gIEZyYW1lIGlzIHByb3ZpZGVkIHdpdGgKLSAgICAgIHRpbWVzdGFtcCBkZXJpdmVkIGZyb20gdXBzdHJlYW0gKGFzIG11Y2ggYXMgZ2VuZXJhbGx5IHBvc3NpYmxlKSwKLSAgICAgIGR1cmF0aW9uIG9idGFpbmVkIGZyb20gY29uZmlndXJhdGlvbiAoc2VlIGJlbG93KSwgYW5kIG9mZnNldAotICAgICAgaWYgbWVhbmluZ2Z1bCAoaW4gcHVsbCBtb2RlKS4KLSAgICAgIDwvcD4KLTxwPgotICAgICAgTm90ZSB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jaGVja192YWxpZF9mcmFtZTwvY29kZT48L2VtPiBtaWdodCByZWNlaXZlIGFueSBzbWFsbAotICAgICAgYW1vdW50IG9mIGlucHV0IGRhdGEgd2hlbiBsZWZ0b3ZlciBkYXRhIGlzIGJlaW5nIGRyYWluZWQgKGUuZy4gYXQgRU9TKS4KLSAgICA8L3A+Ci08L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgICBBcyBwYXJ0IG9mIGZpbmlzaCBmcmFtZSBwcm9jZXNzaW5nLAotICAgICAganVzdCBwcmlvciB0byBhY3R1YWxseSBwdXNoaW5nIHRoZSBidWZmZXIgaW4gcXVlc3Rpb24sCi0gICAgICBpdCBpcyBwYXNzZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZV9wdXNoX2ZyYW1lPC9jb2RlPjwvZW0+IHdoaWNoIGdpdmVzIHN1YmNsYXNzIHlldCBvbmUKLSAgICAgIGxhc3QgY2hhbmNlIHRvIGV4YW1pbmUgYnVmZmVyIG1ldGFkYXRhLCBvciB0byBzZW5kIHNvbWUgY3VzdG9tICh0YWcpCi0gICAgICBldmVudHMsIG9yIHRvIHBlcmZvcm0gY3VzdG9tIChzZWdtZW50KSBmaWx0ZXJpbmcuCi0gICAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgIER1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2VDbGFzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUNsYXNzPC9zcGFuPjwvYT4gd2lsbCBoYW5kbGUgYm90aCBzcmNwYWQKLSAgICAgIGFuZCBzaW5rcGFkIGV2ZW50cy4gVGhleSB3aWxsIGJlIHBhc3NlZCB0byBzdWJjbGFzcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4gb3IKLSAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmNfZXZlbnQ8L2NvZGU+PC9lbT4gY2FsbGJhY2tzIGhhdmUgYmVlbiBwcm92aWRlZC4KLSAgICA8L3A+PC9saT4KLTwvdWw+Ci08L2Rpdj48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+U2h1dGRvd24gcGhhc2U8L2I+PC9wPgotPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gY2xhc3MgY2FsbHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN0b3A8L2NvZGU+PC9lbT4gdG8gaW5mb3JtIHRoZSBzdWJjbGFzcyB0aGF0IGRhdGEKLSAgICBwYXJzaW5nIHdpbGwgYmUgc3RvcHBlZC4KLSAgPC9wPjwvbGk+PC91bD4KLTwvZGl2PjwvbGk+Ci08L29sPjwvZGl2PgotPHA+U3ViY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBwYWQgdGVtcGxhdGUgY2FwcyBmb3IKLXNvdXJjZSBhbmQgc2luayBwYWRzLiBUaGUgcGFkcyBuZWVkIHRvIGJlIG5hbWVkICJzaW5rIiBhbmQgInNyYyIuIEl0IGFsc28KLW5lZWRzIHRvIHNldCB0aGUgZml4ZWQgY2FwcyBvbiBzcmNwYWQsIHdoZW4gdGhlIGZvcm1hdCBpcyBlbnN1cmVkIChlLmcuCi13aGVuIGJhc2UgY2xhc3MgY2FsbHMgc3ViY2xhc3MnIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXRfc2lua19jYXBzPC9jb2RlPjwvZW0+Ci0gZnVuY3Rpb24pLjwvcD4KLTxwPlRoaXMgYmFzZSBjbGFzcyB1c2VzIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtREVGQVVMVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZPUk1BVF9ERUZBVUxUPC9jb2RlPjwvYT4gYXMgYSBtZWFuaW5nIG9mIGZyYW1lcy4gU28sCi1zdWJjbGFzcyBjb252ZXJzaW9uIHJvdXRpbmUgbmVlZHMgdG8ga25vdyB0aGF0IGNvbnZlcnNpb24gZnJvbQotPGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1USU1FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRk9STUFUX1RJTUU8L2NvZGU+PC9hPiB0byA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULURFRkFVTFQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GT1JNQVRfREVGQVVMVDwvY29kZT48L2E+IG11c3QgcmV0dXJuIHRoZQotZnJhbWUgbnVtYmVyIHRoYXQgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGdpdmVuIGJ5dGUgcG9zaXRpb24uPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gdXNlcyBzdWJjbGFzc2VzIGNvbnZlcnNpb24gbWV0aG9kcyBhbHNvIGZvciBzZWVraW5nIChvcgotb3RoZXJ3aXNlIHVzZXMgaXRzIG93biBkZWZhdWx0IG9uZSwgc2VlIGFsc28gYmVsb3cpLjwvcD4KLTxwPlN1YmNsYXNzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdGFydDwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RvcDwvY29kZT48L2VtPgotIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCB0byBpbmZvcm0gdGhlIGJlZ2lubmluZwotYW5kIGVuZCBvZiBkYXRhIHByb2Nlc3NpbmcuPC9wPgotPHA+VGhpbmdzIHRoYXQgc3ViY2xhc3MgbmVlZCB0byB0YWtlIGNhcmUgb2Y6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPlByb3ZpZGUgcGFkIHRlbXBsYXRlczwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgIEZpeGF0ZSB0aGUgc291cmNlIHBhZCBjYXBzIHdoZW4gYXBwcm9wcmlhdGUKLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgSW5mb3JtIGJhc2UgY2xhc3MgaG93IGJpZyBkYXRhIGNodW5rcyBzaG91bGQgYmUgcmV0cmlldmVkLiBUaGlzIGlzCi0gICAgIGRvbmUgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LW1pbi1mcmFtZS1zaXplIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUoKTwvY29kZT48L2E+IGZ1bmN0aW9uLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgICBFeGFtaW5lIGRhdGEgY2h1bmtzIHBhc3NlZCB0byBzdWJjbGFzcyB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oYW5kbGVfZnJhbWU8L2NvZGU+PC9lbT4gYW5kIHBhc3MKLSAgICAgcHJvcGVyIGZyYW1lKHMpIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1maW5pc2gtZnJhbWUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZSgpPC9jb2RlPjwvYT4sIGFuZCBzZXR0aW5nIHNyYyBwYWQKLSAgICAgY2FwcyBhbmQgdGltZXN0YW1wcyBvbiBmcmFtZS4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5Qcm92aWRlIGNvbnZlcnNpb24gZnVuY3Rpb25zPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgVXBkYXRlIHRoZSBkdXJhdGlvbiBpbmZvcm1hdGlvbiB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtZHVyYXRpb24iIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbigpPC9jb2RlPjwvYT4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgT3B0aW9uYWxseSBwYXNzdGhyb3VnaCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LXBhc3N0aHJvdWdoIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2goKTwvY29kZT48L2E+Ci0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgIENvbmZpZ3VyZSB2YXJpb3VzIGJhc2VwYXJzZSBwYXJhbWV0ZXJzIHVzaW5nCi0gICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtYXZlcmFnZS1iaXRyYXRlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtc3luY2FibGUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZSgpPC9jb2RlPjwvYT4KLSAgICAgYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtZnJhbWUtcmF0ZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSgpPC9jb2RlPjwvYT4uCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgIEluIHBhcnRpY3VsYXIsIGlmIHN1YmNsYXNzIGlzIHVuYWJsZSB0byBkZXRlcm1pbmUgYSBkdXJhdGlvbiwgYnV0Ci0gICAgIHBhcnNpbmcgKG9yIHNwZWNzKSB5aWVsZHMgYSBmcmFtZXMgcGVyIHNlY29uZHMgcmF0ZSwgdGhlbiB0aGlzIGNhbiBiZQotICAgICBwcm92aWRlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiB0byBlbmFibGUgaXQgdG8gY2F0ZXIgZm9yCi0gICAgIGJ1ZmZlciB0aW1lIG1ldGFkYXRhICh3aGljaCB3aWxsIGJlIHRha2VuIGZyb20gdXBzdHJlYW0gYXMgbXVjaCBhcwotICAgICBwb3NzaWJsZSkuIEludGVybmFsbHkga2VlcGluZyB0cmFjayBvZiBmcmFtZSBkdXJhdGlvbnMgYW5kIHJlc3BlY3RpdmUKLSAgICAgc2l6ZXMgdGhhdCBoYXZlIGJlZW4gcHVzaGVkIHByb3ZpZGVzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+IHdpdGggYW4gZXN0aW1hdGVkCi0gICAgIGJpdHJhdGUuIEEgZGVmYXVsdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29udmVydDwvY29kZT48L2VtPiAodXNlZCBpZiBub3Qgb3ZlcnJpZGRlbikgd2lsbCB0aGVuIHVzZSB0aGVzZQotICAgICByYXRlcyB0byBwZXJmb3JtIG9idmlvdXMgY29udmVyc2lvbnMuICBUaGVzZSByYXRlcyBhcmUgYWxzbyB1c2VkIHRvCi0gICAgIHVwZGF0ZSAoZXN0aW1hdGVkKSBkdXJhdGlvbiBhdCByZWd1bGFyIGZyYW1lIGludGVydmFscy4KLSAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCYXNlUGFyc2UuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLW1lcmdlLXRhZ3MiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFnc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gKnRhZ3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gbW9kZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBwYXJzZXIgc3ViY2xhc3MncyB0YWdzIGFuZCBob3cgdGhleSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggYW55Ci11cHN0cmVhbSBzdHJlYW0gdGFncy4gVGhpcyB3aWxsIG92ZXJyaWRlIGFueSB0YWdzIHByZXZpb3VzbHktc2V0Ci13aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1tZXJnZS10YWdzIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFnc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFncygpPC9jb2RlPjwvYT4uPC9wPgotPHA+Tm90ZSB0aGF0IHRoaXMgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlLCBhbmQgdGhlIHN1YmNsYXNzIGlzCi1ub3QgcmVxdWlyZWQgdG8gdXNlIHRoaXMgYW5kIGNhbiBzdGlsbCBkbyB0YWcgaGFuZGxpbmcgb24gaXRzIG93bi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1tZXJnZS10YWdzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50YWdzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTGlzdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdMaXN0PC9zcGFuPjwvYT4gdG8gbWVyZ2UsIG9yIE5VTEwgdG8gdW5zZXQKLXByZXZpb3VzbHktc2V0IHRhZ3MuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RUYWdMaXN0Lmh0bWwjR3N0VGFnTWVyZ2VNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnTWVyZ2VNb2RlPC9zcGFuPjwvYT4gdG8gdXNlLCB1c3VhbGx5IDxhIGhyZWY9Ii4uL2h0bWwvR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctTUVSR0UtUkVQTEFDRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19NRVJHRV9SRVBMQUNFPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2Utc2V0LWR1cmF0aW9uIj48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGZtdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gZHVyYXRpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gaW50ZXJ2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgZHVyYXRpb24gb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIG1lZGlhLiBTdWJjbGFzcyBjYW4gdXNlIHRoaXMKLXdoZW4gaXQgaXMgYWJsZSB0byBkZXRlcm1pbmUgZHVyYXRpb24gYW5kL29yIG5vdGljZXMgYSBjaGFuZ2UgaW4gdGhlIG1lZGlhCi1kdXJhdGlvbi4gIEFsdGVybmF0aXZlbHksIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcnZhbDwvY29kZT48L2VtPgotIGlzIG5vbi16ZXJvIChkZWZhdWx0KSwgdGhlbiBzdHJlYW0KLWR1cmF0aW9uIGlzIGRldGVybWluZWQgYmFzZWQgb24gZXN0aW1hdGVkIGJpdHJhdGUsIGFuZCB1cGRhdGVkIGV2ZXJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbnRlcnZhbDwvY29kZT48L2VtPgotCi1mcmFtZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2Utc2V0LWR1cmF0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZtdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kdXJhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmR1cmF0aW9uIHZhbHVlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbnRlcnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmhvdyBvZnRlbiB0byB1cGRhdGUgdGhlIGR1cmF0aW9uIGVzdGltYXRlIGJhc2VkIG9uIGJpdHJhdGUsIG9yIDAuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1hdmVyYWdlLWJpdHJhdGUiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3BhcnNlX3NldF9hdmVyYWdlX2JpdHJhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gYml0cmF0ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5PcHRpb25hbGx5IHNldHMgdGhlIGF2ZXJhZ2UgYml0cmF0ZSBkZXRlY3RlZCBpbiBtZWRpYSAoaWYgbm9uLXplcm8pLAotZS5nLiBiYXNlZCBvbiBtZXRhZGF0YSwgYXMgaXQgd2lsbCBiZSBwb3N0ZWQgdG8gdGhlIGFwcGxpY2F0aW9uLjwvcD4KLTxwPkJ5IGRlZmF1bHQsIGFubm91bmNlZCBhdmVyYWdlIGJpdHJhdGUgaXMgZXN0aW1hdGVkLiBUaGUgYXZlcmFnZSBiaXRyYXRlCi1pcyB1c2VkIHRvIGVzdGltYXRlIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtIGFuZCB0byBlc3RpbWF0ZQotYSBzZWVrIHBvc2l0aW9uLCBpZiB0aGVyZSdzIG5vIGluZGV4IGFuZCB0aGUgZm9ybWF0IGlzIHN5bmNhYmxlCi0oc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtc3luY2FibGUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZSgpPC9jb2RlPjwvYT4pLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1hdmVyYWdlLWJpdHJhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Yml0cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3NlY29uZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtbWluLWZyYW1lLXNpemUiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbWluX3NpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U3ViY2xhc3MgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHRlbGwgdGhlIGJhc2UgY2xhc3MgdGhhdCBpdCBuZWVkcyB0bwotZ2l2ZSBhdCBsZWFzdCA8c3BhbiBjbGFzcz0idHlwZSI+bWluX3NpemU8L3NwYW4+IGJ1ZmZlcnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2Utc2V0LW1pbi1mcmFtZS1zaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbl9zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TWluaW11bSBzaXplIG9mIHRoZSBkYXRhIHRoYXQgdGhpcyBiYXNlIGNsYXNzIHNob3VsZCBnaXZlIHRvCi1zdWJjbGFzcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2Utc2V0LXBhc3N0aHJvdWdoIj48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHBhc3N0aHJvdWdoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCBpZiB0aGUgbmF0dXJlIG9mIHRoZSBmb3JtYXQgb3IgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBhbGxvdyAobXVjaCkKLXBhcnNpbmcsIGFuZCB0aGUgcGFyc2VyIHNob3VsZCBvcGVyYXRlIGluIHBhc3N0aHJvdWdoIG1vZGUgKHdoaWNoIG9ubHkKLWFwcGxpZXMgd2hlbiBvcGVyYXRpbmcgaW4gcHVzaCBtb2RlKS4gVGhhdCBpcywgaW5jb21pbmcgYnVmZmVycyBhcmUKLXB1c2hlZCB0aHJvdWdoIHVubW9kaWZpZWQsIGkuZS4gbm8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoZWNrX3ZhbGlkX2ZyYW1lPC9jb2RlPjwvZW0+Ci0gb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcnNlX2ZyYW1lPC9jb2RlPjwvZW0+Ci0KLWNhbGxiYWNrcyB3aWxsIGJlIGludm9rZWQsIGJ1dCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJlX3B1c2hfZnJhbWU8L2NvZGU+PC9lbT4KLSB3aWxsIHN0aWxsIGJlIGludm9rZWQsCi1zbyBzdWJjbGFzcyBjYW4gcGVyZm9ybSBhcyBtdWNoIG9yIGFzIGxpdHRsZSBpcyBhcHByb3ByaWF0ZSBmb3IKLXBhc3N0aHJvdWdoIHNlbWFudGljcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJlX3B1c2hfZnJhbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtcGFzc3Rocm91Z2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhc3N0aHJvdWdoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHBhcnNlciBzaG91bGQgcnVuIGluIHBhc3N0aHJvdWdoIG1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2Utc2V0LXN5bmNhYmxlIj48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHN5bmNhYmxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCBpZiBmcmFtZSBzdGFydHMgY2FuIGJlIGlkZW50aWZpZWQuIFRoaXMgaXMgc2V0IGJ5IGRlZmF1bHQgYW5kCi1kZXRlcm1pbmVzIHdoZXRoZXIgc2Vla2luZyBiYXNlZCBvbiBiaXRyYXRlIGF2ZXJhZ2VzCi1pcyBwb3NzaWJsZSBmb3IgYSBmb3JtYXQvc3RyZWFtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1zeW5jYWJsZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3luY2FibGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zZXQgaWYgZnJhbWUgc3RhcnRzIGNhbiBiZSBpZGVudGlmaWVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1oYXMtdGltaW5nLWluZm8iPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mb8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3BhcnNlX3NldF9oYXNfdGltaW5nX2luZm8gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaGFzX3RpbWluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgaWYgZnJhbWVzIGNhcnJ5IHRpbWluZyBpbmZvcm1hdGlvbiB3aGljaCB0aGUgc3ViY2xhc3MgY2FuIChnZW5lcmFsbHkpCi1wYXJzZSBhbmQgcHJvdmlkZS4gIEluIHBhcnRpY3VsYXIsIGludHJpbnNpYyAocmF0aGVyIHRoYW4gZXN0aW1hdGVkKSB0aW1lCi1jYW4gYmUgb2J0YWluZWQgZm9sbG93aW5nIGEgc2Vlay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtaGFzLXRpbWluZy1pbmZvLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oYXNfdGltaW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+d2hldGhlciBmcmFtZXMgY2FycnkgdGltaW5nIGluZm9ybWF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1mcmFtZS1yYXRlIj48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGZwc19udW08L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGZwc19kZW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlYWRfaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlYWRfb3V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPklmIGZyYW1lcyBwZXIgc2Vjb25kIGlzIGNvbmZpZ3VyZWQsIHBhcnNlciBjYW4gdGFrZSBjYXJlIG9mIGJ1ZmZlciBkdXJhdGlvbgotYW5kIHRpbWVzdGFtcGluZy4gIFdoZW4gcGVyZm9ybWluZyBzZWdtZW50IGNsaXBwaW5nLCBvciBzZWVraW5nIHRvIGEgc3BlY2lmaWMKLWxvY2F0aW9uLCBhIGNvcnJlc3BvbmRpbmcgZGVjb2RlciBtaWdodCBuZWVkIGFuIGluaXRpYWwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxlYWRfaW48L2NvZGU+PC9lbT4KLSBhbmQgYQotZm9sbG93aW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sZWFkX291dDwvY29kZT48L2VtPgotIG51bWJlciBvZiBmcmFtZXMgdG8gZW5zdXJlIHRoZSBkZXNpcmVkIHNlZ21lbnQgaXMKLWVudGlyZWx5IGZpbGxlZCB1cG9uIGRlY29kaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1mcmFtZS1yYXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+IHRvIHNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mcHNfbnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZnJhbWVzIHBlciBzZWNvbmQgKG51bWVyYXRvcikuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZwc19kZW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mcmFtZXMgcGVyIHNlY29uZCAoZGVub21pbmF0b3IpLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sZWFkX2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZnJhbWVzIG5lZWRlZCBiZWZvcmUgYSBzZWdtZW50IGZvciBzdWJzZXF1ZW50IGRlY29kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sZWFkX291dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmZyYW1lcyBuZWVkZWQgYWZ0ZXIgYSBzZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1sYXRlbmN5Ij48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX3NldF9sYXRlbmN5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfcGFyc2Vfc2V0X2xhdGVuY3kgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBtaW5fbGF0ZW5jeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IG1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gKHdoaWNoIG1heSBsaWtlbHkgYmUgZXF1YWwpIGxhdGVuY3kgaW50cm9kdWNlZAotYnkgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIElmIHRoZXJlIGlzIHN1Y2ggYSBsYXRlbmN5LCB3aGljaCBkZXBlbmRzIG9uIHRoZQotcGFydGljdWxhciBwYXJzaW5nIG9mIHRoZSBmb3JtYXQsIGl0IHR5cGljYWxseSBjb3JyZXNwb25kcyB0byAxIGZyYW1lIGR1cmF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1sYXRlbmN5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fbGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1pbmltdW0gcGFyc2UgbGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfbGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1heGltdW0gcGFyc2UgbGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtaW5mZXItdHMiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2luZmVyX3RzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfcGFyc2Vfc2V0X2luZmVyX3RzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW5mZXJfdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QnkgZGVmYXVsdCwgdGhlIGJhc2UgY2xhc3MgbWlnaHQgdHJ5IHRvIGluZmVyIFBUUyBmcm9tIERUUyBhbmQgdmljZQotdmVyc2EuICBXaGlsZSB0aGlzIGlzIGdlbmVyYWxseSBjb3JyZWN0IGZvciBhdWRpbyBkYXRhLCBpdCBtYXkgbm90Ci1iZSBvdGhlcndpc2UuIFN1Yi1jbGFzc2VzIGltcGxlbWVudGluZyBzdWNoIGZvcm1hdHMgc2hvdWxkIGRpc2FibGUKLXRpbWVzdGFtcCBpbmZlcnJpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2Utc2V0LWluZmVyLXRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhcnNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmZlcl90czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBwYXJzZXIgc2hvdWxkIGluZmVyIERUUy9QVFMgZnJvbSBlYWNoIG90aGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC1wdHMtaW50ZXJwb2xhdGlvbiI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9zZXRfcHRzX2ludGVycG9sYXRpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9wYXJzZV9zZXRfcHRzX2ludGVycG9sYXRpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBwdHNfaW50ZXJwb2xhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QnkgZGVmYXVsdCwgdGhlIGJhc2UgY2xhc3Mgd2lsbCBndWVzcyBQVFMgdGltZXN0YW1wcyB1c2luZyBhIHNpbXBsZQotaW50ZXJwb2xhdGlvbiAocHJldmlvdXMgdGltZXN0YW1wICsgZHVyYXRpb24pLCB3aGljaCBpcyBpbmNvcnJlY3QgZm9yCi1kYXRhIHN0cmVhbXMgd2l0aCByZW9yZGVyaW5nLCB3aGVyZSBQVFMgY2FuIGdvIGJhY2t3YXJkLiBTdWItY2xhc3NlcwotaW1wbGVtZW50aW5nIHN1Y2ggZm9ybWF0cyBzaG91bGQgZGlzYWJsZSBQVFMgaW50ZXJwb2xhdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1zZXQtcHRzLWludGVycG9sYXRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnB0c19pbnRlcnBvbGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBwYXJzZXIgc2hvdWxkIGludGVycG9sYXRlIFBUUyB0aW1lc3RhbXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC10cy1hdC1vZmZzZXQiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2Vfc2V0X3RzX2F0X29mZnNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3BhcnNlX3NldF90c19hdF9vZmZzZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiAqcGFyc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlX2ZyYW1lPC9jb2RlPjwvZW0+Ci0gaW1wbGVtZW50YXRpb24uPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gY3JlYXRlcyBpbml0aWFsIHRpbWVzdGFtcHMgZm9yIGZyYW1lcyBieSB1c2luZyB0aGUgbGFzdAotdGltZXN0YW1wIHNlZW4gaW4gdGhlIHN0cmVhbSBiZWZvcmUgdGhlIGZyYW1lIHN0YXJ0cy4gIEluIGNlcnRhaW4KLWNhc2VzLCB0aGUgY29ycmVjdCB0aW1lc3RhbXBzIHdpbGwgb2NjdXIgaW4gdGhlIHN0cmVhbSBhZnRlciB0aGUKLXN0YXJ0IG9mIHRoZSBmcmFtZSwgYnV0IGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGFjdHVhbCBwaWN0dXJlIGRhdGEuCi1UaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgdGltZXN0YW1wcyBiYXNlZCBvbiB0aGUgb2Zmc2V0Ci1pbnRvIHRoZSBmcmFtZSBkYXRhIHRoYXQgdGhlIHBpY3R1cmUgc3RhcnRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXNldC10cy1hdC1vZmZzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9mZnNldCBpbnRvIGN1cnJlbnQgYnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLWNvbnZlcnQtZGVmYXVsdCI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9jb252ZXJ0X2RlZmF1bHTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IHNyY19mb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHNyY192YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IGRlc3RfZm9ybWF0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqZGVzdF92YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mICJjb252ZXJ0IiB2bWV0aG9kIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+IGNsYXNzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLWNvbnZlcnQtZGVmYXVsdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNfZm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZGVzY3JpYmluZyB0aGUgc291cmNlIGZvcm1hdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjX3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U291cmNlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF9mb3JtYXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBkZWZpbmluZyB0aGUgY29udmVydGVkIGZvcm1hdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF92YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlBvaW50ZXIgd2hlcmUgdGhlIGNvbnZlcnNpb24gcmVzdWx0IHdpbGwgYmUgcHV0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2UtY29udmVydC1kZWZhdWx0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLWFkZC1pbmRleC1lbnRyeSI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9hZGRfaW5kZXhfZW50cnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBrZXk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmb3JjZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIGFuIGVudHJ5IHRvIHRoZSBpbmRleCBhc3NvY2lhdGluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRzPC9jb2RlPjwvZW0+Ci0uICBJdCBpcyByZWNvbW1lbmRlZAotdG8gb25seSBhZGQga2V5ZnJhbWUgZW50cmllcy4gIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mb3JjZTwvY29kZT48L2VtPgotIGFsbG93cyB0byBieXBhc3MgY2hlY2tzLCBzdWNoIGFzCi13aGV0aGVyIHRoZSBzdHJlYW0gaXMgKHVwc3RyZWFtKSBzZWVrYWJsZSwgYW5vdGhlciBlbnRyeSBpcyBhbHJlYWR5ICJjbG9zZSIKLXRvIHRoZSBuZXcgZW50cnksIGV0Yy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1hZGQtaW5kZXgtZW50cnkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b2Zmc2V0IG9mIGVudHJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGltZXN0YW1wIGFzc29jaWF0ZWQgd2l0aCBvZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+a2V5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+d2hldGhlciBlbnRyeSByZWZlcnMgdG8ga2V5ZnJhbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9yY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hZGQgZW50cnkgZGlzcmVnYXJkaW5nIHNhbml0eSBjaGVja3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLWFkZC1pbmRleC1lbnRyeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGluZGljYXRpbmcgd2hldGhlciBlbnRyeSB3YXMgYWRkZWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2UtZnJhbWUtbmV3Ij48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZSIgdGl0bGU9IkdzdEJhc2VQYXJzZUZyYW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT7CoCoKLWdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWVGbGFncyIgdGl0bGU9ImVudW0gR3N0QmFzZVBhcnNlRnJhbWVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lRmxhZ3M8L3NwYW4+PC9hPiBmbGFnczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBvdmVyaGVhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGxvY2F0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+LiBUaGlzIGZ1bmN0aW9uIGlzIG1haW5seSBmb3IgYmluZGluZ3MsCi1lbGVtZW50cyB3cml0dGVuIGluIEMgc2hvdWxkIHVzdWFsbHkgYWxsb2NhdGUgdGhlIGZyYW1lIG9uIHRoZSBzdGFjayBhbmQKLXRoZW4gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1pbml0IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCgpPC9jb2RlPjwvYT4gdG8gaW5pdGlhbGlzZSBpdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1mcmFtZS1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmbGFnczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vdmVyaGVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBieXRlcyBpbiB0aGlzIGZyYW1lIHdoaWNoIHNob3VsZCBiZSBjb3VudGVkIGFzCi1tZXRhZGF0YSBvdmVyaGVhZCwgaWUuIG5vdCB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYXZlcmFnZSBiaXRyYXRlLgotU2V0IHRvIC0xIHRvIG1hcmsgdGhlIGVudGlyZSBmcmFtZSBhcyBtZXRhZGF0YS4gSWYgaW4gZG91YnQsIHNldCB0byAwLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2UtZnJhbWUtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXdseS1hbGxvY2F0ZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+LiBGcmVlIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1mcmVlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSgpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1mcmFtZS1pbml0Ij48L2E+PGgzPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+ICpmcmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+IHRvIGluaXRpYWwgc3RhdGUuICBDdXJyZW50bHkgdGhpcyBtZWFucwotYWxsIHB1YmxpYyBmaWVsZHMgYXJlIHplcm8tZWQgYW5kIGEgcHJpdmF0ZSBmbGFnIGlzIHNldCB0byBtYWtlCi1zdXJlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1mcmVlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSgpPC9jb2RlPjwvYT4gb25seSBmcmVlcyB0aGUgY29udGVudHMgYnV0IG5vdAotdGhlIGFjdHVhbCBmcmFtZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZSIgdGl0bGU9IkdzdEJhc2VQYXJzZUZyYW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlRnJhbWU8L3NwYW4+PC9hPgotYWxsb2NhdGVkIG9uIHRoZSBzdGFjay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1mcmFtZS1pbml0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mcmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZSIgdGl0bGU9IkdzdEJhc2VQYXJzZUZyYW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlRnJhbWU8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLWZyYW1lLWZyZWUiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4gKmZyYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2UtcHVzaC1mcmFtZSI+PC9hPjxoMz5nc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+ICpwYXJzZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4gKmZyYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1c2hlcyB0aGUgZnJhbWUncyBidWZmZXIgZG93bnN0cmVhbSwgc2VuZHMgYW55IHBlbmRpbmcgZXZlbnRzIGFuZAotZG9lcyBzb21lIHRpbWVzdGFtcCBhbmQgc2VnbWVudCBoYW5kbGluZy4gVGFrZXMgb3duZXJzaGlwIG9mCi1mcmFtZSdzIGJ1ZmZlciwgdGhvdWdoIGNhbGxlciByZXRhaW5zIG93bmVyc2hpcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnJhbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5UaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggc2lua3BhZCBTVFJFQU1fTE9DSyBoZWxkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLXB1c2gtZnJhbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnJhbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtcGFyc2UtcHVzaC1mcmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1maW5pc2gtZnJhbWUiPjwvYT48aDM+Z3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlPC9zcGFuPjwvYT4gKnBhcnNlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lIiB0aXRsZT0iR3N0QmFzZVBhcnNlRnJhbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2VGcmFtZTwvc3Bhbj48L2E+ICpmcmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbGxlY3RzIHBhcnNlZCBkYXRhIGFuZCBwdXNoZXMgdGhpcyBkb3duc3RyZWFtLgotU291cmNlIHBhZCBjYXBzIG11c3QgYmUgc2V0IHdoZW4gdGhpcyBpcyBjYWxsZWQuPC9wPgotPHA+SWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZyYW1lPC9jb2RlPjwvZW0+Ci0ncyBvdXRfYnVmZmVyIGlzIHNldCwgdGhhdCB3aWxsIGJlIHVzZWQgYXMgc3Vic2VxdWVudCBmcmFtZSBkYXRhLgotT3RoZXJ3aXNlLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIHNhbXBsZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBpbnB1dCBhbmQgdXNlZCBmb3Igb3V0cHV0LAotYW5kIHRoZSBvdXRwdXQncyBtZXRhZGF0YSAodGltZXN0YW1wcyBldGMpIHdpbGwgYmUgdGFrZW4gYXMgKG9wdGlvbmFsbHkpCi1zZXQgYnkgdGhlIHN1YmNsYXNzIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mcmFtZTwvY29kZT48L2VtPgotJ3MgKGlucHV0KSBidWZmZXIgKHdoaWNoIGlzIG90aGVyd2lzZQotaWdub3JlZCBmb3IgYW55IGJ1dCB0aGUgYWJvdmUgcHVycG9zZS9pbmZvcm1hdGlvbikuPC9wPgotPHA+Tm90ZSB0aGF0IHRoZSBsYXR0ZXIgYnVmZmVyIGlzIGludmFsaWRhdGVkIGJ5IHRoaXMgY2FsbCwgd2hlcmVhcyB0aGUKLWNhbGxlciByZXRhaW5zIG93bmVyc2hpcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnJhbWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1wYXJzZS1maW5pc2gtZnJhbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZyYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VQYXJzZUZyYW1lPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNvbnN1bWVkIGlucHV0IGRhdGEgcmVwcmVzZW50ZWQgYnkgZnJhbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXBhcnNlLWZpbmlzaC1mcmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHRoYXQgc2hvdWxkIGJlIGVzY2FsYXRlZCB0byBjYWxsZXIgKG9mIGNhbGxlcik8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRFJBSU5JTkc6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9QQVJTRV9EUkFJTklORygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0RSQUlOSU5HKHBhcnNlKSAgKCEhKEdTVF9CQVNFX1BBUlNFX0NBU1QocGFyc2UpLSZndDtmbGFncyAmYW1wOyBHU1RfQkFTRV9QQVJTRV9GTEFHX0RSQUlOSU5HKSkKLTwvcHJlPgotPHA+T2J0YWlucyBjdXJyZW50IGRyYWluIHN0YXR1cyAoaWUuIHdoZXRoZXIgRU9TIGhhcyBiZWVuIHJlY2VpdmVkIGFuZAotdGhlIHBhcnNlciBpcyBub3cgcHJvY2Vzc2luZyB0aGUgZnJhbWVzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSk8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQkFTRS1QQVJTRS1EUkFJTklORy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5iYXNlIHBhcnNlIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1QQVJTRS1MT1NULVNZTkM6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkMoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkMocGFyc2UpICghIShHU1RfQkFTRV9QQVJTRV9DQVNUKHBhcnNlKS0mZ3Q7ZmxhZ3MgJmFtcDsgR1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkMpKQotPC9wcmU+Ci08cD5PYnRhaW5zIGN1cnJlbnQgc3luYyBzdGF0dXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtTE9TVC1TWU5DLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJhc2UgcGFyc2UgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CQVNFLVBBUlNFLVNJTkstUEFEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfUEFSU0VfU0lOS19QQUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRChvYmopICAgIChHU1RfQkFTRV9QQVJTRV9DQVNUIChvYmopLSZndDtzaW5rcGFkKQotPC9wcmU+Ci08cD5HaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgc2luayA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtU0lOSy1QQUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJhc2UgcGFyc2UgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CQVNFLVBBUlNFLVNSQy1QQUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9QQVJTRV9TUkNfUEFEKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfU1JDX1BBRChvYmopICAgIChHU1RfQkFTRV9QQVJTRV9DQVNUIChvYmopLSZndDtzcmNwYWQpCi08L3ByZT4KLTxwPkdpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2JqZWN0IG9mIHRoZSBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CQVNFLVBBUlNFLVNSQy1QQUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJhc2UgcGFyc2UgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVBhcnNlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlUGFyc2Utc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCYXNlUGFyc2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCYXNlUGFyc2UgewotICBHc3RFbGVtZW50ICAgICBlbGVtZW50OwotfTsKLTwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCYXNlUGFyc2UubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlLXN0cnVjdC5lbGVtZW50Ij48L2E+ZWxlbWVudDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCBlbGVtZW50LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RCYXNlUGFyc2VDbGFzczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEJhc2VQYXJzZUNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiB2aXJ0dWFsIG1ldGhvZHMgZm9yIHN1YmNsYXNzZXMgKi8KLQotICBnYm9vbGVhbiAgICAgICgqc3RhcnQpICAgICAgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UpOwotCi0gIGdib29sZWFuICAgICAgKCpzdG9wKSAgICAgICAgICAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7Ci0KLSAgZ2Jvb2xlYW4gICAgICAoKnNldF9zaW5rX2NhcHMpICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAgICAgICogY2Fwcyk7Ci0KLSAgR3N0Rmxvd1JldHVybiAoKmhhbmRsZV9mcmFtZSkgICAgICAgKEdzdEJhc2VQYXJzZSAgICAgICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgKiBza2lwc2l6ZSk7Ci0KLSAgR3N0Rmxvd1JldHVybiAoKnByZV9wdXNoX2ZyYW1lKSAgICAgKEdzdEJhc2VQYXJzZSAgICAgICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKTsKLQotICBnYm9vbGVhbiAgICAgICgqY29udmVydCkgICAgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgICAgICBzcmNfZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgc3JjX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0ICAgICAgZGVzdF9mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgKiBkZXN0X3ZhbHVlKTsKLQotICBnYm9vbGVhbiAgICAgICgqc2lua19ldmVudCkgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFdmVudCAgICAgKiBldmVudCk7Ci0KLSAgZ2Jvb2xlYW4gICAgICAoKnNyY19ldmVudCkgICAgICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RXZlbnQgICAgICogZXZlbnQpOwotCi0gIEdzdENhcHMgKiAgICAgKCpnZXRfc2lua19jYXBzKSAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgICAgICAqIGZpbHRlcik7Ci0KLSAgR3N0Rmxvd1JldHVybiAoKmRldGVjdCkgICAgICAgICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICAgICogYnVmZmVyKTsKLQotICBnYm9vbGVhbiAgICAgICgqc2lua19xdWVyeSkgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAgICAgKiBxdWVyeSk7Ci0KLSAgZ2Jvb2xlYW4gICAgICAoKnNyY19xdWVyeSkgICAgICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UXVlcnkgICAgICogcXVlcnkpOwotfTsKLTwvcHJlPgotPHA+U3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZSBhdmFpbGFibGUgdmlydHVhbCBtZXRob2RzIG9yIG5vdCwgYXMKLW5lZWRlZC4gQXQgbWluaW11bSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFuZGxlX2ZyYW1lPC9jb2RlPjwvZW0+Ci0gbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc3RhcnQiPjwvYT5zdGFydDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3B0aW9uYWwuCi1DYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBzdGFydHMgcHJvY2Vzc2luZy4KLUFsbG93cyBvcGVuaW5nIGV4dGVybmFsIHJlc291cmNlcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3B0aW9uYWwuCi1DYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBzdG9wcyBwcm9jZXNzaW5nLgotQWxsb3dzIGNsb3NpbmcgZXh0ZXJuYWwgcmVzb3VyY2VzLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLnNldC1zaW5rLWNhcHMiPjwvYT5zZXRfc2lua19jYXBzPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLUFsbG93cyB0aGUgc3ViY2xhc3MgdG8gYmUgbm90aWZpZWQgb2YgdGhlIGFjdHVhbCBjYXBzIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5oYW5kbGUtZnJhbWUiPjwvYT5oYW5kbGVfZnJhbWU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlBhcnNlcyB0aGUgaW5wdXQgZGF0YSBpbnRvIHZhbGlkIGZyYW1lcyBhcyBkZWZpbmVkIGJ5IHN1YmNsYXNzCi13aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1maW5pc2gtZnJhbWUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZSgpPC9jb2RlPjwvYT4uCi1UaGUgZnJhbWUncyBpbnB1dCBidWZmZXIgaXMgZ3VhcmFudGVlZCB3cml0YWJsZSwKLXdoZXJlYXMgdGhlIGlucHV0IGZyYW1lIG93bmVyc2hpcCBpcyBoZWxkIGJ5IGNhbGxlcgotKHNvIHN1YmNsYXNzIHNob3VsZCBtYWtlIGEgY29weSBpZiBpdCBuZWVkcyB0byBoYW5nIG9uKS4KLUlucHV0IGJ1ZmZlciAoZGF0YSkgaXMgcHJvdmlkZWQgYnkgYmFzZWNsYXNzIHdpdGggYXMgbXVjaAotbWV0YWRhdGEgc2V0IGFzIHBvc3NpYmxlIGJ5IGJhc2VjbGFzcyBhY2NvcmRpbmcgdG8gdXBzdHJlYW0KLWluZm9ybWF0aW9uIGFuZC9vciBzdWJjbGFzcyBzZXR0aW5ncywKLXRob3VnaCBzdWJjbGFzcyBtYXkgc3RpbGwgc2V0IGJ1ZmZlciB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uCi1pZiBkZXNpcmVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLnByZS1wdXNoLWZyYW1lIj48L2E+cHJlX3B1c2hfZnJhbWU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk9wdGlvbmFsLgotQ2FsbGVkIGp1c3QgcHJpb3IgdG8gcHVzaGluZyBhIGZyYW1lIChhZnRlciBhbnkgcGVuZGluZwotZXZlbnRzIGhhdmUgYmVlbiBzZW50KSB0byBnaXZlIHN1YmNsYXNzIGEgY2hhbmNlIHRvIHBlcmZvcm0KLWFkZGl0aW9uYWwgYWN0aW9ucyBhdCB0aGlzIHRpbWUgKGUuZy4gdGFnIHNlbmRpbmcpIG9yIHRvCi1kZWNpZGUgd2hldGhlciB0aGlzIGJ1ZmZlciBzaG91bGQgYmUgZHJvcHBlZCBvciBub3QKLShlLmcuIGN1c3RvbSBzZWdtZW50IGNsaXBwaW5nKS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5jb252ZXJ0Ij48L2E+Y29udmVydDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3B0aW9uYWwuCi1Db252ZXJ0IGJldHdlZW4gZm9ybWF0cy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5zaW5rLWV2ZW50Ij48L2E+c2lua19ldmVudDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3B0aW9uYWwuCi1FdmVudCBoYW5kbGVyIG9uIHRoZSBzaW5rIHBhZC4gVGhpcyBmdW5jdGlvbiBzaG91bGQgY2hhaW4KLXVwIHRvIHRoZSBwYXJlbnQgaW1wbGVtZW50YXRpb24gdG8gbGV0IHRoZSBkZWZhdWx0IGhhbmRsZXIKLXJ1bi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5zcmMtZXZlbnQiPjwvYT5zcmNfZXZlbnQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk9wdGlvbmFsLgotRXZlbnQgaGFuZGxlciBvbiB0aGUgc291cmNlIHBhZC4gU2hvdWxkIGNoYWluIHVwIHRvIHRoZQotcGFyZW50IHRvIGxldCB0aGUgZGVmYXVsdCBoYW5kbGVyIHJ1bi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5nZXQtc2luay1jYXBzIj48L2E+Z2V0X3NpbmtfY2FwczwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3B0aW9uYWwuCi1BbGxvd3MgdGhlIHN1YmNsYXNzIHRvIGRvIGl0cyBvd24gc2luayBnZXQgY2FwcyBpZiBuZWVkZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3MuZGV0ZWN0Ij48L2E+ZGV0ZWN0PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLUNhbGxlZCB1bnRpbCBpdCBkb2Vzbid0IHJldHVybiBHU1RfRkxPV19PSyBhbnltb3JlIGZvcgotdGhlIGZpcnN0IGJ1ZmZlcnMuIENhbiBiZSB1c2VkIGJ5IHRoZSBzdWJjbGFzcyB0byBkZXRlY3QKLXRoZSBzdHJlYW0gZm9ybWF0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLnNpbmstcXVlcnkiPjwvYT5zaW5rX3F1ZXJ5PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLVF1ZXJ5IGhhbmRsZXIgb24gdGhlIHNpbmsgcGFkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjaGFpbgotdXAgdG8gdGhlIHBhcmVudCBpbXBsZW1lbnRhdGlvbiB0byBsZXQgdGhlIGRlZmF1bHQgaGFuZGxlcgotcnVuIChTaW5jZSAxLjIpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc3JjLXF1ZXJ5Ij48L2E+c3JjX3F1ZXJ5PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLVF1ZXJ5IGhhbmRsZXIgb24gdGhlIHNvdXJjZSBwYWQuIFNob3VsZCBjaGFpbiB1cCB0byB0aGUKLXBhcmVudCB0byBsZXQgdGhlIGRlZmF1bHQgaGFuZGxlciBydW4gKFNpbmNlIDEuMik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lIj48L2E+PGgzPkdzdEJhc2VQYXJzZUZyYW1lPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7Ci0gIEdzdEJ1ZmZlciAqIGJ1ZmZlcjsKLSAgR3N0QnVmZmVyICogb3V0X2J1ZmZlcjsKLSAgZ3VpbnQgICAgICAgZmxhZ3M7Ci0gIGd1aW50NjQgICAgIG9mZnNldDsKLSAgZ2ludCAgICAgICAgb3ZlcmhlYWQ7Ci19IEdzdEJhc2VQYXJzZUZyYW1lOwotPC9wcmU+Ci08cD5GcmFtZSAoY29udGV4dCkgZGF0YSBwYXNzZWQgdG8gZWFjaCBmcmFtZSBwYXJzaW5nIHZpcnR1YWwgbWV0aG9kcy4gIEluCi1hZGRpdGlvbiB0byBwcm92aWRpbmcgdGhlIGRhdGEgdG8gYmUgY2hlY2tlZCBmb3IgYSB2YWxpZCBmcmFtZSBvciBhbiBhbHJlYWR5Ci1pZGVudGlmaWVkIGZyYW1lLCBpdCBjb252ZXlzIGFkZGl0aW9uYWwgbWV0YWRhdGEgb3IgY29udHJvbCBpbmZvcm1hdGlvbgotZnJvbSBhbmQgdG8gdGhlIHN1YmNsYXNzIHcuci50LiB0aGUgcGFydGljdWxhciBmcmFtZSBpbiBxdWVzdGlvbiAocmF0aGVyCi10aGFuIGdsb2JhbCBwYXJhbWV0ZXJzKS4gIFNvbWUgb2YgdGhlc2UgbWF5IGFwcGx5IHRvIGVhY2ggcGFyc2luZyBzdGFnZSwgb3RoZXJzCi1vbmx5IHRvIHNvbWUgYSBwYXJ0aWN1bGFyIG9uZS4gIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGVmZmVjdGl2ZWx5IHplcm9lZCBhdCBzdGFydAotb2YgZWFjaCBmcmFtZSdzIHByb2Nlc3NpbmcsIGkuZS4gcGFyc2luZyB2aXJ0dWFsIG1ldGhvZCBpbnZvY2F0aW9uIHNlcXVlbmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lLmJ1ZmZlciI+PC9hPmJ1ZmZlcjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+aW5wdXQgZGF0YSB0byBiZSBwYXJzZWQgZm9yIGZyYW1lcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lLm91dC1idWZmZXIiPjwvYT5vdXRfYnVmZmVyPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5vdXRwdXQgZGF0YS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlRnJhbWUuZmxhZ3MiPjwvYT5mbGFnczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+YSBjb21iaW5hdGlvbiBvZiBpbnB1dCBhbmQgb3V0cHV0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RCYXNlUGFyc2VGcmFtZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlRnJhbWVGbGFnczwvc3Bhbj48L2E+IHRoYXQKLWNvbnZleSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gc3ViY2xhc3Mgb3IgYWxsb3cgc3ViY2xhc3MgdG8gdHVuZQotc3Vic2VxdWVudCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlUGFyc2U8L3NwYW4+PC9hPiBhY3Rpb25zLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlRnJhbWUub2Zmc2V0Ij48L2E+b2Zmc2V0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5tZWRpYSBzcGVjaWZpYyBvZmZzZXQgb2YgaW5wdXQgZnJhbWUKLU5vdGUgdGhhdCBhIGNvbnZlcnRlciBtYXkgaGF2ZSBhIGRpZmZlcmVudCBvbmUgb24gdGhlIGZyYW1lJ3MgYnVmZmVyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVBhcnNlRnJhbWUub3ZlcmhlYWQiPjwvYT5vdmVyaGVhZDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+c3ViY2xhc3MgY2FuIHNldCB0aGlzIHRvIGluZGljYXRlcyB0aGUgbWV0YWRhdGEgb3ZlcmhlYWQKLWZvciB0aGUgZ2l2ZW4gZnJhbWUsIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBlbmFibGUgbW9yZSBhY2N1cmF0ZSBiaXRyYXRlCi1jb21wdXRhdGlvbnMuIElmIHRoaXMgaXMgLTEsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGZyYW1lIHNob3VsZCBiZQotc2tpcHBlZCBpbiBiaXRyYXRlIGNhbGN1bGF0aW9uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmFzZVBhcnNlRnJhbWVGbGFncyI+PC9hPjxoMz5lbnVtIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3M8L2gzPgotPHA+RmxhZ3MgdG8gYmUgdXNlZCBpbiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZSIgdGl0bGU9IkdzdEJhc2VQYXJzZUZyYW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVBhcnNlRnJhbWU8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCYXNlUGFyc2VGcmFtZUZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRlJBTUUtRkxBRy1OT05FOkNBUFMiPjwvYT5HU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bm8gZmxhZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQkFTRS1QQVJTRS1GUkFNRS1GTEFHLU5FVy1GUkFNRTpDQVBTIj48L2E+R1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19ORVdfRlJBTUU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+c2V0IGJ5IGJhc2VjbGFzcyBpZiBjdXJyZW50IGZyYW1lCi0gIGlzIHBhc3NlZCBmb3IgcHJvY2Vzc2luZyB0byB0aGUgc3ViY2xhc3MgZm9yIHRoZSBmaXJzdCB0aW1lCi0gIChhbmQgbm90IHNldCBvbiBzdWJzZXF1ZW50IGNhbGxzIHdpdGggc2FtZSBkYXRhKS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRlJBTUUtRkxBRy1OTy1GUkFNRTpDQVBTIj48L2E+R1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19OT19GUkFNRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zZXQgdG8gaW5kaWNhdGUgdGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZQotICBjb3VudGVkIGFzIGZyYW1lLCBlLmcuIGlmIHRoaXMgZnJhbWUgaXMgZGVwZW5kZW50IG9uIGEgcHJldmlvdXMgb25lLgotICBBcyBpdCBpcyBub3QgY291bnRlZCBhcyBhIGZyYW1lLCBiaXRyYXRlIGluY3JlYXNlcyBidXQgZnJhbWUgdG8gdGltZQotICBjb252ZXJzaW9ucyBhcmUgbWFpbnRhaW5lZC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRlJBTUUtRkxBRy1DTElQOkNBUFMiPjwvYT5HU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZV9wdXNoX2ZyYW1lPC9jb2RlPjwvZW0+Ci0gY2FuIHNldCB0aGlzIHRvIGluZGljYXRlCi0gICB0aGF0IHJlZ3VsYXIgc2VnbWVudCBjbGlwcGluZyBjYW4gc3RpbGwgYmUgcGVyZm9ybWVkIChhcyBvcHBvc2VkIHRvCi0gICBhbnkgY3VzdG9tIG9uZSBoYXZpbmcgYmVlbiBkb25lKS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRlJBTUUtRkxBRy1EUk9QOkNBUFMiPjwvYT5HU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0RST1A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+aW5kaWNhdGVzIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5maW5pc2hfZnJhbWU8L2NvZGU+PC9lbT4KLSB0aGF0IHRoZQotICAgdGhlIGZyYW1lIHNob3VsZCBiZSBkcm9wcGVkIChhbmQgbWlnaHQgYmUgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IHN1YmNsYXNzKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQkFTRS1QQVJTRS1GUkFNRS1GTEFHLVFVRVVFOkNBUFMiPjwvYT5HU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX1FVRVVFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmluZGljYXRlcyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmluaXNoX2ZyYW1lPC9jb2RlPjwvZW0+Ci0gdGhhdCB0aGUKLSAgIHRoZSBmcmFtZSBzaG91bGQgYmUgcXVldWVkIGZvciBub3cgYW5kIHByb2Nlc3NlZCBmdWxseSBsYXRlcgotICAgd2hlbiB0aGUgZmlyc3Qgbm9uLXF1ZXVlZCBmcmFtZSBpcyBmaW5pc2hlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRkxBRy1EUkFJTklORzpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkc8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRkxBR19EUkFJTklORyAgKDEgJmx0OyZsdDsgMSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1QQVJTRS1GTEFHLUxPU1QtU1lOQzpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DICgxICZsdDsmbHQ7IDApCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJBU0UtUEFSU0UtRkxPVy1EUk9QUEVEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRCAgICAgR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1MKLTwvcHJlPgotPHA+QSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSBwYXJzZV9mcmFtZSB0bwotaW5kaWNhdGUgdGhhdCBubyBvdXRwdXQgYnVmZmVyIHdhcyBnZW5lcmF0ZWQsIG9yIGZyb20gcHJlX3B1c2hfZnJhbWUgdG8KLXRvIGZvcmVnbyBwdXNoaW5nIGJ1ZmZlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVBhcnNlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlUGFyc2UtLWRpc2FibGUtcGFzc3Rocm91Z2giPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkaXNhYmxlLXBhc3N0aHJvdWdo4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkaXNhYmxlLXBhc3N0aHJvdWdo4oCdICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPklmIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIGJhc2VwYXJzZSB3aWxsIHVuY29uZGl0aW9uYWxseSBmb3JjZSBwYXJzaW5nIG9mIHRoZQotaW5jb21pbmcgZGF0YS4gVGhpcyBjYW4gYmUgcmVxdWlyZWQgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUgdGhlIGluY29taW5nCi1zaWRlLWRhdGEgKGNhcHMsIHB0cywgZHRzLCAuLi4pIGlzIG5vdCB0cnVzdGVkIGJ5IHRoZSB1c2VyIGFuZCB3YW50cyB0bwotZm9yY2UgdmFsaWRhdGlvbiBhbmQgcGFyc2luZyBvZiB0aGUgaW5jb21pbmcgZGF0YS4KLUlmIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiwgZGVjaXNpb24gb2Ygd2hldGhlciB0byBwYXJzZSB0aGUgZGF0YSBvciBub3QgaXMgdXAgdG8KLXRoZSBpbXBsZW1lbnRhdGlvbiAoc3RhbmRhcmQgYmVoYXZpb3VyKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVBhcnNlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlU2luay5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0QmFzZVNpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0OGI2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlU2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg0NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0QmFzZVNpbms6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RCYXNlU2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmFzZVNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmFzZVNpbmsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdEJhc2VTaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0QmFzZVNpbmsudG9wX29mX3BhZ2UiPjwvYT5Hc3RCYXNlU2luazwvc3Bhbj48L2gyPgotPHA+R3N0QmFzZVNpbmsg4oCUIEJhc2UgY2xhc3MgZm9yIHNpbmsgZWxlbWVudHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmsuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstcXVlcnktbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jecKgKCkiPmdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X2xhdGVuY3nCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWRvLXByZXJvbGwiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGzCoCgpIj5nc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstd2FpdCIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfd2FpdMKgKCkiPmdzdF9iYXNlX3Npbmtfd2FpdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0LXByZXJvbGwiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbMKgKCkiPmdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrUmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrUmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0LWNsb2NrIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrwqAoKSI+Z3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1zeW5jIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfc3luY8KgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3N5bmM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtc3luYyIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X3N5bmPCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF9zeW5jPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1tYXgtbGF0ZW5lc3MiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3PCoCgpIj5nc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1tYXgtbGF0ZW5lc3MiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3PCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXFvcy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWTCoCgpIj5nc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWlzLXFvcy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZMKgKCkiPmdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LWFzeW5jLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkwqAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWlzLWFzeW5jLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2lzX2FzeW5jX2VuYWJsZWTCoCgpIj5nc3RfYmFzZV9zaW5rX2lzX2FzeW5jX2VuYWJsZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXRzLW9mZnNldCIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldMKgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZURpZmY8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC10cy1vZmZzZXQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXTCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXJlbmRlci1kZWxheSIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxhecKgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtcmVuZGVyLWRlbGF5IiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5wqAoKSI+Z3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RTYW1wbGUuaHRtbCNHc3RTYW1wbGUtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LWxhc3Qtc2FtcGxlIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9zYW1wbGXCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF9sYXN0X3NhbXBsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtYmxvY2tzaXplIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplwqAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LWJsb2Nrc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZcKgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtdGhyb3R0bGUtdGltZSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWXCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC10aHJvdHRsZS10aW1lIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfdGhyb3R0bGVfdGltZcKgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LW1heC1iaXRyYXRlIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2JpdHJhdGXCoCgpIj5nc3RfYmFzZV9zaW5rX3NldF9tYXhfYml0cmF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbWF4LWJpdHJhdGUiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9tYXhfYml0cmF0ZcKgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X21heF9iaXRyYXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1sYXN0LXNhbXBsZS1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZMKgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X2xhc3Rfc2FtcGxlX2VuYWJsZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1pcy1sYXN0LXNhbXBsZS1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19pc19sYXN0X3NhbXBsZV9lbmFibGVkwqAoKSI+Z3N0X2Jhc2Vfc2lua19pc19sYXN0X3NhbXBsZV9lbmFibGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBBRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QQUQoKSI+R1NUX0JBU0VfU0lOS19QQUQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLUdFVC1QUkVST0xMLUNPTkQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfQ09ORCgpIj5HU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0NPTkQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLUdFVC1QUkVST0xMLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSygpIj5HU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtQlJPQURDQVNUOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfQlJPQURDQVNUKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9CUk9BRENBU1Q8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0soKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtU0lHTkFMOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9TSUdOQUw8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVFJZTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1RSWUxPQ0soKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1RSWUxPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVU5MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQoKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVC1VTlRJTDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVRfVU5USUwoKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVRfVU5USUw8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1hc3luYyIgdGl0bGU9IlRoZSDigJxhc3luY+KAnSBwcm9wZXJ0eSI+YXN5bmM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1ibG9ja3NpemUiIHRpdGxlPSJUaGUg4oCcYmxvY2tzaXpl4oCdIHByb3BlcnR5Ij5ibG9ja3NpemU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1lbmFibGUtbGFzdC1zYW1wbGUiIHRpdGxlPSJUaGUg4oCcZW5hYmxlLWxhc3Qtc2FtcGxl4oCdIHByb3BlcnR5Ij5lbmFibGUtbGFzdC1zYW1wbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0U2FtcGxlLmh0bWwjR3N0U2FtcGxlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWxhc3Qtc2FtcGxlIiB0aXRsZT0iVGhlIOKAnGxhc3Qtc2FtcGxl4oCdIHByb3BlcnR5Ij5sYXN0LXNhbXBsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tbWF4LWJpdHJhdGUiIHRpdGxlPSJUaGUg4oCcbWF4LWJpdHJhdGXigJ0gcHJvcGVydHkiPm1heC1iaXRyYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1tYXgtbGF0ZW5lc3MiIHRpdGxlPSJUaGUg4oCcbWF4LWxhdGVuZXNz4oCdIHByb3BlcnR5Ij5tYXgtbGF0ZW5lc3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1xb3MiIHRpdGxlPSJUaGUg4oCccW9z4oCdIHByb3BlcnR5Ij5xb3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tcmVuZGVyLWRlbGF5IiB0aXRsZT0iVGhlIOKAnHJlbmRlci1kZWxheeKAnSBwcm9wZXJ0eSI+cmVuZGVyLWRlbGF5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tc3luYyIgdGl0bGU9IlRoZSDigJxzeW5j4oCdIHByb3BlcnR5Ij5zeW5jPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLXRocm90dGxlLXRpbWUiIHRpdGxlPSJUaGUg4oCcdGhyb3R0bGUtdGltZeKAnSBwcm9wZXJ0eSI+dGhyb3R0bGUtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tdHMtb2Zmc2V0IiB0aXRsZT0iVGhlIOKAnHRzLW9mZnNldOKAnSBwcm9wZXJ0eSI+dHMtb2Zmc2V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCYXNlU2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCYXNlU2lua0NsYXNzIj5Hc3RCYXNlU2lua0NsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VTaW5rLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEJhc2VTaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmsuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvYmFzZS9nc3RiYXNlc2luay5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VTaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzIGluIEdTdHJlYW1lciwgc3VjaCBhcwoteHZpbWFnZXNpbmsgb3IgZmlsZXNpbmsuIEl0IGlzIGEgbGF5ZXIgb24gdG9wIG9mIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRoYXQgcHJvdmlkZXMgYQotc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gcGx1Z2luIHdyaXRlcnMuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+IGhhbmRsZXMgbWFueSBkZXRhaWxzCi1mb3IgeW91LCBmb3IgZXhhbXBsZTogcHJlcm9sbCwgY2xvY2sgc3luY2hyb25pemF0aW9uLCBzdGF0ZSBjaGFuZ2VzLAotYWN0aXZhdGlvbiBpbiBwdXNoIG9yIHB1bGwgbW9kZSwgYW5kIHF1ZXJpZXMuPC9wPgotPHA+SW4gbW9zdCBjYXNlcywgd2hlbiB3cml0aW5nIHNpbmsgZWxlbWVudHMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW1wbGVtZW50Ci1jbGFzcyBtZXRob2RzIGZyb20gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gb3IgdG8gc2V0IGZ1bmN0aW9ucyBvbiBwYWRzLCBiZWNhdXNlIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gaW5mcmFzdHJ1Y3R1cmUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gcHJvdmlkZXMgc3VwcG9ydCBmb3IgZXhhY3RseSBvbmUgc2luayBwYWQsIHdoaWNoIHNob3VsZCBiZQotbmFtZWQgInNpbmsiLiBBIHNpbmsgaW1wbGVtZW50YXRpb24gKHN1YmNsYXNzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+KSBzaG91bGQKLWluc3RhbGwgYSBwYWQgdGVtcGxhdGUgaW4gaXRzIGNsYXNzX2luaXQgZnVuY3Rpb24sIGxpa2Ugc286PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLTEyCi0xMwotMTQKLTE1PC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+c3RhdGljIHZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm15X2VsZW1lbnRfY2xhc3NfaW5pdDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+R3N0TXlFbGVtZW50Q2xhc3MgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+a2xhc3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij57PC9zcGFuPgotICBHc3RFbGVtZW50Q2xhc3MgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+Z3N0ZWxlbWVudF9jbGFzcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5HU1RfRUxFTUVOVF9DTEFTUzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+a2xhc3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIHNpbmt0ZW1wbGF0ZSBzaG91bGQgYmUgYSAjR3N0U3RhdGljUGFkVGVtcGxhdGUgd2l0aCBkaXJlY3Rpb248L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLyAlR1NUX1BBRF9TSU5LIGFuZCBuYW1lICZxdW90O3NpbmsmcXVvdDs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXN0YXRpYy1wYWQtdGVtcGxhdGUiPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Z3N0ZWxlbWVudF9jbGFzczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPnNpbmt0ZW1wbGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNsYXNzLXNldC1zdGF0aWMtbWV0YWRhdGEiPmdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGE8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5nc3RlbGVtZW50X2NsYXNzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtTaW5rIG5hbWUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtTaW5rJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7TXkgU2luayBlbGVtZW50JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7VGhlIGF1dGhvciAmbHQ7bXkuc2luayYjNjQ7bXkuZW1haWwmZ3Q7JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gd2lsbCBoYW5kbGUgdGhlIHByZXJvbGxpbmcgY29ycmVjdGx5LiBUaGlzIG1lYW5zIHRoYXQgaXQgd2lsbAotcmV0dXJuIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dTVC1TVEFURS1DSEFOR0UtQVNZTkM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9TVEFURV9DSEFOR0VfQVNZTkM8L2NvZGU+PC9hPiBmcm9tIGEgc3RhdGUgY2hhbmdlIHRvIFBBVVNFRCB1bnRpbCB0aGUgZmlyc3QKLWJ1ZmZlciBhcnJpdmVzIGluIHRoaXMgZWxlbWVudC4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBjYWxsIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5wcmVyb2xsIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucHJlcm9sbCgpPC9jb2RlPjwvYT4gdm1ldGhvZCB3aXRoIHRoaXMgcHJlcm9sbCBidWZmZXIgYW5kIHdpbGwgdGhlbgotY29tbWl0IHRoZSBzdGF0ZSBjaGFuZ2UgdG8gdGhlIG5leHQgYXN5bmNocm9ub3VzbHkgcGVuZGluZyBzdGF0ZS48L3A+Ci08cD5XaGVuIHRoZSBlbGVtZW50IGlzIHNldCB0byBQTEFZSU5HLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiB3aWxsIHN5bmNocm9uaXNlIG9uIHRoZQotY2xvY2sgdXNpbmcgdGhlIHRpbWVzIHJldHVybmVkIGZyb20gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5nZXQtdGltZXMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5nZXRfdGltZXMoKTwvY29kZT48L2E+LiBJZiB0aGlzCi1mdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9jb2RlPjwvYT4gZm9yIHRoZSBzdGFydCB0aW1lLCBubyBzeW5jaHJvbmlzYXRpb24KLXdpbGwgYmUgZG9uZS4gU3luY2hyb25pc2F0aW9uIGNhbiBiZSBkaXNhYmxlZCBlbnRpcmVseSBieSBzZXR0aW5nIHRoZSBvYmplY3QKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1zeW5jIiB0aXRsZT0iVGhlIOKAnHN5bmPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxzeW5j4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uPC9wPgotPHA+QWZ0ZXIgc3luY2hyb25pc2F0aW9uIHRoZSB2aXJ0dWFsIG1ldGhvZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnJlbmRlciI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnJlbmRlcigpPC9jb2RlPjwvYT4gd2lsbCBiZQotY2FsbGVkLiBTdWJjbGFzc2VzIHNob3VsZCBtaW5pbWFsbHkgaW1wbGVtZW50IHRoaXMgbWV0aG9kLjwvcD4KLTxwPlN1YmNsYXNzZXMgdGhhdCBzeW5jaHJvbmlzZSBvbiB0aGUgY2xvY2sgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCk8L2NvZGU+PC9hPgotbWV0aG9kIGFyZSBzdXBwb3J0ZWQgYXMgd2VsbC4gVGhlc2UgY2xhc3NlcyB0eXBpY2FsbHkgcmVjZWl2ZSBhIGJ1ZmZlciBpbgotdGhlIHJlbmRlciBtZXRob2QgYW5kIGNhbiB0aGVuIHBvdGVudGlhbGx5IGJsb2NrIG9uIHRoZSBjbG9jayB3aGlsZQotcmVuZGVyaW5nLiBBIHR5cGljYWwgZXhhbXBsZSBpcyBhbiBhdWRpb3NpbmsuCi1UaGVzZSBzdWJjbGFzc2VzIGNhbiB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0LXByZXJvbGwiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwoKTwvY29kZT48L2E+IHRvIHBlcmZvcm0gdGhlCi1ibG9ja2luZyB3YWl0LjwvcD4KLTxwPlVwb24gcmVjZWl2aW5nIHRoZSBFT1MgZXZlbnQgaW4gdGhlIFBMQVlJTkcgc3RhdGUsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+IHdpbGwgd2FpdAotZm9yIHRoZSBjbG9jayB0byByZWFjaCB0aGUgdGltZSBpbmRpY2F0ZWQgYnkgdGhlIHN0b3AgdGltZSBvZiB0aGUgbGFzdAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5nZXQtdGltZXMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5nZXRfdGltZXMoKTwvY29kZT48L2E+IGNhbGwgYmVmb3JlIHBvc3RpbmcgYW4gRU9TIG1lc3NhZ2UuIFdoZW4gdGhlCi1lbGVtZW50IHJlY2VpdmVzIEVPUyBpbiBQQVVTRUQsIHByZXJvbGwgY29tcGxldGVzLCB0aGUgZXZlbnQgaXMgcXVldWVkIGFuZCBhbgotRU9TIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW4gZ29pbmcgdG8gUExBWUlORy48L3A+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiB3aWxsIGludGVybmFsbHkgdXNlIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVNFR01FTlQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9TRUdNRU5UPC9jb2RlPjwvYT4gZXZlbnRzIHRvIHNjaGVkdWxlCi1zeW5jaHJvbmlzYXRpb24gYW5kIGNsaXBwaW5nIG9mIGJ1ZmZlcnMuIEJ1ZmZlcnMgdGhhdCBmYWxsIGNvbXBsZXRlbHkgb3V0c2lkZQotb2YgdGhlIGN1cnJlbnQgc2VnbWVudCBhcmUgZHJvcHBlZC4gQnVmZmVycyB0aGF0IGZhbGwgcGFydGlhbGx5IGluIHRoZQotc2VnbWVudCBhcmUgcmVuZGVyZWQgKGFuZCBwcmVyb2xsZWQpLiBTdWJjbGFzc2VzIHNob3VsZCBkbyBhbnkgc3ViYnVmZmVyCi1jbGlwcGluZyB0aGVtc2VsdmVzIHdoZW4gbmVlZGVkLjwvcD4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+IHdpbGwgYnkgZGVmYXVsdCByZXBvcnQgdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gaW4KLTxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtVElNRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZPUk1BVF9USU1FPC9jb2RlPjwvYT4gYmFzZWQgb24gdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBhbmQgc2VnbWVudCBpbmZvcm1hdGlvbi4KLUlmIG5vIGNsb2NrIGhhcyBiZWVuIHNldCBvbiB0aGUgZWxlbWVudCwgdGhlIHF1ZXJ5IHdpbGwgYmUgZm9yd2FyZGVkCi11cHN0cmVhbS48L3A+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5zZXQtY2FwcyI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnNldF9jYXBzKCk8L2NvZGU+PC9hPiBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzdWJjbGFzcwotc2hvdWxkIGNvbmZpZ3VyZSBpdHNlbGYgdG8gcHJvY2VzcyBhIHNwZWNpZmljIG1lZGlhIHR5cGUuPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RhcnQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5zdGFydCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RvcCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnN0b3AoKTwvY29kZT48L2E+IHZpcnR1YWwgbWV0aG9kcwotd2lsbCBiZSBjYWxsZWQgd2hlbiByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9jYXRlZC4gQW55IAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5wcmVyb2xsIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucHJlcm9sbCgpPC9jb2RlPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCk8L2NvZGU+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc2V0LWNhcHMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5zZXRfY2FwcygpPC9jb2RlPjwvYT4gZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYmV0d2VlbiB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RhcnQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5zdGFydCgpPC9jb2RlPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RvcCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnN0b3AoKTwvY29kZT48L2E+IGNhbGxzLjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLmV2ZW50Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MuZXZlbnQoKTwvY29kZT48L2E+IHZpcnR1YWwgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdoZW4gYW4gZXZlbnQgaXMKLXJlY2VpdmVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+LiBOb3JtYWxseSB0aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBvdmVycmlkZGVuIGJ5Ci12ZXJ5IHNwZWNpZmljIGVsZW1lbnRzIChzdWNoIGFzIGZpbGUgc2lua3MpIHdoaWNoIG5lZWQgdG8gaGFuZGxlIHRoZQotbmV3c2VnbWVudCBldmVudCBzcGVjaWFsbHkuPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MudW5sb2NrIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MudW5sb2NrKCk8L2NvZGU+PC9hPiBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnRzIHNob3VsZAotdW5ibG9jayBhbnkgYmxvY2tpbmcgb3BlcmF0aW9ucyB0aGV5IHBlcmZvcm0gaW4gdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnJlbmRlciI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLnJlbmRlcigpPC9jb2RlPjwvYT4gbWV0aG9kLiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgd2hlbiB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCk8L2NvZGU+PC9hPiBtZXRob2QgcGVyZm9ybXMgYSBibG9ja2luZyB3cml0ZSBvbiBhIGZpbGUKLWRlc2NyaXB0b3IsIGZvciBleGFtcGxlLjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tbWF4LWxhdGVuZXNzIiB0aXRsZT0iVGhlIOKAnG1heC1sYXRlbmVzc+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnG1heC1sYXRlbmVzc+KAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGFmZmVjdHMgaG93IHRoZSBzaW5rIGRlYWxzIHdpdGgKLWJ1ZmZlcnMgdGhhdCBhcnJpdmUgdG9vIGxhdGUgaW4gdGhlIHNpbmsuIEEgYnVmZmVyIGFycml2ZXMgdG9vIGxhdGUgaW4gdGhlCi1zaW5rIHdoZW4gdGhlIHByZXNlbnRhdGlvbiB0aW1lIChhcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBsYXN0IHNlZ21lbnQsIGJ1ZmZlcgotdGltZXN0YW1wIGFuZCBlbGVtZW50IGJhc2VfdGltZSkgcGx1cyB0aGUgZHVyYXRpb24gaXMgYmVmb3JlIHRoZSBjdXJyZW50Ci10aW1lIG9mIHRoZSBjbG9jay4KLUlmIHRoZSBmcmFtZSBpcyBsYXRlciB0aGFuIG1heC1sYXRlbmVzcywgdGhlIHNpbmsgd2lsbCBkcm9wIHRoZSBidWZmZXIKLXdpdGhvdXQgY2FsbGluZyB0aGUgcmVuZGVyIG1ldGhvZC4KLVRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBpZiBzeW5jIGlzIGRpc2FibGVkLCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MuZ2V0LXRpbWVzIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MuZ2V0X3RpbWVzKCk8L2NvZGU+PC9hPiBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGEgdmFsaWQgc3RhcnQgdGltZSBvcgotbWF4LWxhdGVuZXNzIGlzIHNldCB0byAtMSAodGhlIGRlZmF1bHQpLgotU3ViY2xhc3NlcyBjYW4gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LW1heC1sYXRlbmVzcyIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzKCk8L2NvZGU+PC9hPiB0byBjb25maWd1cmUgdGhlCi1tYXgtbGF0ZW5lc3MgdmFsdWUuPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1xb3MiIHRpdGxlPSJUaGUg4oCccW9z4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCccW9z4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgd2lsbCBlbmFibGUgdGhlIHF1YWxpdHktb2Ytc2VydmljZSBmZWF0dXJlcyBvZgotdGhlIGJhc2VzaW5rIHdoaWNoIGdhdGhlciBzdGF0aXN0aWNzIGFib3V0IHRoZSByZWFsLXRpbWUgcGVyZm9ybWFuY2Ugb2YgdGhlCi1jbG9jayBzeW5jaHJvbmlzYXRpb24uIEZvciBlYWNoIGJ1ZmZlciByZWNlaXZlZCBpbiB0aGUgc2luaywgc3RhdGlzdGljcyBhcmUKLWdhdGhlcmVkIGFuZCBhIFFPUyBldmVudCBpcyBzZW50IHVwc3RyZWFtIHdpdGggdGhlc2UgbnVtYmVycy4gVGhpcwotaW5mb3JtYXRpb24gY2FuIHRoZW4gYmUgdXNlZCBieSB1cHN0cmVhbSBlbGVtZW50cyB0byByZWR1Y2UgdGhlaXIgcHJvY2Vzc2luZwotcmF0ZSwgZm9yIGV4YW1wbGUuPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1hc3luYyIgdGl0bGU9IlRoZSDigJxhc3luY+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGFzeW5j4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gaW5zdHJ1Y3QgdGhlIHNpbmsgdG8gbmV2ZXIKLXBlcmZvcm0gYW4gQVNZTkMgc3RhdGUgY2hhbmdlLiBUaGlzIGZlYXR1cmUgaXMgbW9zdGx5IHVzYWJsZSB3aGVuIGRlYWxpbmcKLXdpdGggbm9uLXN5bmNocm9uaXplZCBzdHJlYW1zIG9yIHNwYXJzZSBzdHJlYW1zLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmsuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstcXVlcnktbGF0ZW5jeSI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3nCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gKmxpdmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAqdXBzdHJlYW1fbGl2ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiAqbWluX2xhdGVuY3k8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJ5IHRoZSBzaW5rIGZvciB0aGUgbGF0ZW5jeSBwYXJhbWV0ZXJzLiBUaGUgbGF0ZW5jeSB3aWxsIGJlIHF1ZXJpZWQgZnJvbQotdGhlIHVwc3RyZWFtIGVsZW1lbnRzLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGl2ZTwvY29kZT48L2VtPgotIHdpbGwgYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+Ci0gaXMgY29uZmlndXJlZCB0bwotc3luY2hyb25pemUgYWdhaW5zdCB0aGUgY2xvY2suIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cHN0cmVhbV9saXZlPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYW4gdXBzdHJlYW0KLWVsZW1lbnQgaXMgbGl2ZS48L3A+Ci08cD5JZiBib3RoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXZlPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT51cHN0cmVhbV9saXZlPC9jb2RlPjwvZW0+Ci0gYXJlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdGhlIHNpbmsgd2lsbCB3YW50IHRvIGNvbXBlbnNhdGUKLWZvciB0aGUgbGF0ZW5jeSBpbnRyb2R1Y2VkIGJ5IHRoZSB1cHN0cmVhbSBlbGVtZW50cyBieSBzZXR0aW5nIHRoZQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+Ci0gdG8gYSBzdHJpY3RseSBwb3NpdGl2ZSB2YWx1ZS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VkIGJ5IHN1YmNsYXNzZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1xdWVyeS1sYXRlbmN5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGlmIHRoZSBzaW5rIGlzIGxpdmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVwc3RyZWFtX2xpdmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gaWYgYW4gdXBzdHJlYW0gZWxlbWVudCBpcyBsaXZlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5taW5fbGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWluIGxhdGVuY3kgb2YgdGhlIHVwc3RyZWFtIGVsZW1lbnRzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfbGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWF4IGxhdGVuY3kgb2YgdGhlIHVwc3RyZWFtIGVsZW1lbnRzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1xdWVyeS1sYXRlbmN5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBxdWVyeSBzdWNjZWVkZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstZ2V0LWxhdGVuY3kiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3NpbmtfZ2V0X2xhdGVuY3kgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGxhdGVuY3kuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbGF0ZW5jeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbGF0ZW5jeS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBjb25maWd1cmVkIGxhdGVuY3kuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstZG8tcHJlcm9sbCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zaW5rX2RvX3ByZXJvbGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SWYgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+Ci0gc3Bhd25zIGl0cyBvd24gdGhyZWFkIGZvciBwdWxsaW5nIGJ1ZmZlcnMgZnJvbSB1cHN0cmVhbSBpdAotc2hvdWxkIGNhbGwgdGhpcyBtZXRob2QgYWZ0ZXIgaXQgaGFzIHB1bGxlZCBhIGJ1ZmZlci4gSWYgdGhlIGVsZW1lbnQgbmVlZGVkCi10byBwcmVyb2xsLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcGVyZm9ybSB0aGUgcHJlcm9sbCBhbmQgd2lsbCB0aGVuIGJsb2NrCi11bnRpbCB0aGUgZWxlbWVudCBzdGF0ZSBpcyBjaGFuZ2VkLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBQUkVST0xMX0xPQ0sgaGVsZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWRvLXByZXJvbGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWluaSBvYmplY3QgdGhhdCBjYXVzZWQgdGhlIHByZXJvbGwuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1kby1wcmVyb2xsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1PSzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZMT1dfT0s8L2NvZGU+PC9hPiBpZiB0aGUgcHJlcm9sbCBjb21wbGV0ZWQgYW5kIHByb2Nlc3NpbmcgY2FuCi1jb250aW51ZS4gQW55IG90aGVyIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVuZGVyIHZtZXRob2QuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstd2FpdCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3dhaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zaW5rX3dhaXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gKmppdHRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCBmb3IgcHJlcm9sbCB0byBjb21wbGV0ZSBhbmQgd2lsbCB0aGVuIGJsb2NrIHVudGlsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+Ci0KLWlzIHJlYWNoZWQuIEl0IGlzIHVzdWFsbHkgY2FsbGVkIGJ5IHN1YmNsYXNzZXMgdGhhdCB1c2UgdGhlaXIgb3duIGludGVybmFsCi1zeW5jaHJvbmlzYXRpb24gYnV0IHdhbnQgdG8gbGV0IHNvbWUgc3luY2hyb25pemF0aW9uIChsaWtlIEVPUykgYmUgaGFuZGxlZAotYnkgdGhlIGJhc2UgY2xhc3MuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgUFJFUk9MTF9MT0NLIGhlbGQgKGxpa2Ugd2hlbgotcmVjZWl2aW5nIGFuIEVPUyBldmVudCBpbiB0aGUgOjpldmVudCB2bWV0aG9kIG9yIHdoZW4gaGFuZGxpbmcgYnVmZmVycyBpbgotOjpyZW5kZXIpLjwvcD4KLTxwPlRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPgotIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgcnVubmluZ190aW1lIG9mIHdoZW4gdGhlIHRpbWVvdXQgc2hvdWxkIGhhcHBlbgotYW5kIHdpbGwgYmUgYWRqdXN0ZWQgd2l0aCBhbnkgbGF0ZW5jeSBhbmQgb2Zmc2V0IGNvbmZpZ3VyZWQgaW4gdGhlIHNpbmsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay13YWl0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHJ1bm5pbmdfdGltZSB0byBiZSByZWFjaGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmppdHRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgaml0dGVyIHRvIGJlIGZpbGxlZCB3aXRoIHRpbWUgZGlmZiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay13YWl0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstd2FpdC1wcmVyb2xsIj48L2E+PGgzPmdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKTwvY29kZT48L2E+IG1ldGhvZCBwZXJmb3JtcyBpdHMgb3duIHN5bmNocm9uaXNhdGlvbgotYWdhaW5zdCB0aGUgY2xvY2sgaXQgbXVzdCB1bmJsb2NrIHdoZW4gZ29pbmcgZnJvbSBQTEFZSU5HIHRvIHRoZSBQQVVTRUQgc3RhdGUKLWFuZCBjYWxsIHRoaXMgbWV0aG9kIGJlZm9yZSBjb250aW51aW5nIHRvIHJlbmRlciB0aGUgcmVtYWluaW5nIGRhdGEuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIGEgc3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgaGFwcGVucyAoaW4gd2hpY2gKLWNhc2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX09LPC9jb2RlPjwvYT4pIG9yIHRoZSBwcm9jZXNzaW5nIG11c3QgYmUgc3RvcHBlZCBkdWUKLXRvIGEgc3RhdGUgY2hhbmdlIHRvIFJFQURZIG9yIGEgRkxVU0ggZXZlbnQgKGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbgotcmV0dXJucyA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dTVC1GTE9XLUZMVVNISU5HOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19GTFVTSElORzwvY29kZT48L2E+KS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIHRoZSBQUkVST0xMX0xPQ0sgaGVsZCwgbGlrZSBpbiB0aGUKLXJlbmRlciBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXdhaXQtcHJlcm9sbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay13YWl0LXByZXJvbGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19PSzwvY29kZT48L2E+IGlmIHRoZSBwcmVyb2xsIGNvbXBsZXRlZCBhbmQgcHJvY2Vzc2luZyBjYW4KLWNvbnRpbnVlLiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSByZW5kZXIgdm1ldGhvZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay13YWl0LWNsb2NrIj48L2E+PGgzPmdzdF9iYXNlX3Npbmtfd2FpdF9jbG9ja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gKmppdHRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWU8L2NvZGU+PC9lbT4KLSBpcyByZWFjaGVkLiBJdCBpcyB1c3VhbGx5IGNhbGxlZCBieQotc3ViY2xhc3NlcyB0aGF0IHVzZSB0aGVpciBvd24gaW50ZXJuYWwgc3luY2hyb25pc2F0aW9uLjwvcD4KLTxwPklmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lPC9jb2RlPjwvZW0+Ci0gaXMgbm90IHZhbGlkLCBubyBzeW5jaHJvbmlzYXRpb24gaXMgZG9uZSBhbmQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1CQURUSU1FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfQkFEVElNRTwvY29kZT48L2E+IGlzCi1yZXR1cm5lZC4gTGlrZXdpc2UsIGlmIHN5bmNocm9uaXNhdGlvbiBpcyBkaXNhYmxlZCBpbiB0aGUgZWxlbWVudCBvciB0aGVyZQotaXMgbm8gY2xvY2ssIG5vIHN5bmNocm9uaXNhdGlvbiBpcyBkb25lIGFuZCA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR1NULUNMT0NLLUJBRFRJTUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19CQURUSU1FPC9jb2RlPjwvYT4gaXMgcmV0dXJuZWQuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgUFJFUk9MTF9MT0NLIGhlbGQsIGxpa2Ugd2hlbgotcmVjZWl2aW5nIGFuIEVPUyBldmVudCBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5ldmVudCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU2lua0NsYXNzLmV2ZW50KCk8L2NvZGU+PC9hPiB2bWV0aG9kIG9yIHdoZW4KLXJlY2VpdmluZyBhIGJ1ZmZlciBpbgotdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCk8L2NvZGU+PC9hPiB2bWV0aG9kLjwvcD4KLTxwPlRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZTwvY29kZT48L2VtPgotIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgcnVubmluZ190aW1lIG9mIHdoZW4gdGhpcyBtZXRob2Qgc2hvdWxkCi1yZXR1cm4gYW5kIGlzIG5vdCBhZGp1c3RlZCB3aXRoIGFueSBsYXRlbmN5IG9yIG9mZnNldCBjb25maWd1cmVkIGluIHRoZQotc2luay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXdhaXQtY2xvY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcnVubmluZ190aW1lIHRvIGJlIHJlYWNoZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aml0dGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBqaXR0ZXIgdG8gYmUgZmlsbGVkIHdpdGggdGltZSBkaWZmLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXdhaXQtY2xvY2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1JldHVybjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstc2V0LXN5bmMiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfc3luY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3Npbmtfc2V0X3N5bmMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBzeW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbmZpZ3VyZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4KLSB0byBzeW5jaHJvbml6ZSBvbiB0aGUgY2xvY2sgb3Igbm90LiBXaGVuCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3luYzwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LCBpbmNvbWluZyBzYW1wbGVzIHdpbGwgYmUgcGxheWVkIGFzIGZhc3QgYXMKLXBvc3NpYmxlLiBJZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3luYzwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdGhlIHRpbWVzdGFtcHMgb2YgdGhlIGluY29taW5nCi1idWZmZXJzIHdpbGwgYmUgdXNlZCB0byBzY2hlZHVsZSB0aGUgZXhhY3QgcmVuZGVyIHRpbWUgb2YgaXRzCi1jb250ZW50cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1zeW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zeW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5ldyBzeW5jIHZhbHVlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC1zeW5jIj48L2E+PGgzPmdzdF9iYXNlX3NpbmtfZ2V0X3N5bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3NpbmtfZ2V0X3N5bmMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4KLSBpcyBjdXJyZW50bHkgY29uZmlndXJlZCB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHRoZQotY2xvY2suPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtc3luYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtc3luYy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc2luayBpcyBjb25maWd1cmVkIHRvIHN5bmNocm9uaXplIGFnYWluc3QgdGhlIGNsb2NrLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1tYXgtbGF0ZW5lc3MiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IG1heF9sYXRlbmVzczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBuZXcgbWF4IGxhdGVuZXNzIHZhbHVlIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhfbGF0ZW5lc3M8L2NvZGU+PC9lbT4KLS4gVGhpcyB2YWx1ZSBpcwotdXNlZCB0byBkZWNpZGUgaWYgYSBidWZmZXIgc2hvdWxkIGJlIGRyb3BwZWQgb3Igbm90IGJhc2VkIG9uIHRoZQotYnVmZmVyIHRpbWVzdGFtcCBhbmQgdGhlIGN1cnJlbnQgY2xvY2sgdGltZS4gQSB2YWx1ZSBvZiAtMSBtZWFucwotYW4gdW5saW1pdGVkIHRpbWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1zZXQtbWF4LWxhdGVuZXNzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfbGF0ZW5lc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IG1heCBsYXRlbmVzcyB2YWx1ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbWF4LWxhdGVuZXNzIj48L2E+PGgzPmdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zaW5rX2dldF9tYXhfbGF0ZW5lc3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSBtYXggbGF0ZW5lc3MgdmFsdWUuIFNlZSBnc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3MgZm9yCi1tb3JlIGRldGFpbHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbWF4LWxhdGVuZXNzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC1tYXgtbGF0ZW5lc3MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgbWF4aW11bSB0aW1lIGluIG5hbm9zZWNvbmRzIHRoYXQgYSBidWZmZXIgY2FuIGJlIGxhdGUKLWJlZm9yZSBpdCBpcyBkcm9wcGVkIGFuZCBub3QgcmVuZGVyZWQuIEEgdmFsdWUgb2YgLTEgbWVhbnMgYW4KLXVubGltaXRlZCB0aW1lLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1xb3MtZW5hYmxlZCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3Npbmtfc2V0X3Fvc19lbmFibGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGVuYWJsZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uZmlndXJlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotIHRvIHNlbmQgUXVhbGl0eS1vZi1TZXJ2aWNlIGV2ZW50cyB1cHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1xb3MtZW5hYmxlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW5hYmxlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgcW9zIHZhbHVlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWlzLXFvcy1lbmFibGVkIj48L2E+PGgzPmdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4KLSBpcyBjdXJyZW50bHkgY29uZmlndXJlZCB0byBzZW5kIFF1YWxpdHktb2YtU2VydmljZSBldmVudHMKLXVwc3RyZWFtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstaXMtcW9zLWVuYWJsZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstaXMtcW9zLWVuYWJsZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHNpbmsgaXMgY29uZmlndXJlZCB0byBwZXJmb3JtIFF1YWxpdHktb2YtU2VydmljZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1zZXQtYXN5bmMtZW5hYmxlZCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGVuYWJsZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uZmlndXJlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotIHRvIHBlcmZvcm0gYWxsIHN0YXRlIGNoYW5nZXMgYXN5bmNocm9ub3VzbHkuIFdoZW4gYXN5bmMgaXMKLWRpc2FibGVkLCB0aGUgc2luayB3aWxsIGltbWVkaWF0ZWx5IGdvIHRvIFBBVVNFRCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEKLXByZXJvbGwgYnVmZmVyLiBUaGlzIGZlYXR1cmUgaXMgdXNlZnVsIGlmIHRoZSBzaW5rIGRvZXMgbm90IHN5bmNocm9uaXplCi1hZ2FpbnN0IHRoZSBjbG9jayBvciB3aGVuIGl0IGlzIGRlYWxpbmcgd2l0aCBzcGFyc2Ugc3RyZWFtcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1hc3luYy1lbmFibGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbmFibGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5ldyBhc3luYyB2YWx1ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1pcy1hc3luYy1lbmFibGVkIj48L2E+PGgzPmdzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+Ci0gaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgdG8gcGVyZm9ybSBhc3luY2hyb25vdXMgc3RhdGUKLWNoYW5nZXMgdG8gUEFVU0VELjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstaXMtYXN5bmMtZW5hYmxlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1pcy1hc3luYy1lbmFibGVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBzaW5rIGlzIGNvbmZpZ3VyZWQgdG8gcGVyZm9ybSBhc3luY2hyb25vdXMgc3RhdGUKLWNoYW5nZXMuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstc2V0LXRzLW9mZnNldCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3NldF90c19vZmZzZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9zaW5rX3NldF90c19vZmZzZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGp1c3QgdGhlIHN5bmNocm9uaXNhdGlvbiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotLiBBIG5lZ2F0aXZlIHZhbHVlIHdpbGwKLXJlbmRlciBidWZmZXJzIGVhcmxpZXIgdGhhbiB0aGVpciB0aW1lc3RhbXAuIEEgcG9zaXRpdmUgdmFsdWUgd2lsbCBkZWxheQotcmVuZGVyaW5nLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGZpeCBwbGF5YmFjayBvZiBiYWRseSB0aW1lc3RhbXBlZAotYnVmZmVycy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC10cy1vZmZzZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgb2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstZ2V0LXRzLW9mZnNldCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lRGlmZiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgc3luY2hyb25pc2F0aW9uIG9mZnNldCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstZ2V0LXRzLW9mZnNldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtdHMtb2Zmc2V0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHN5bmNocm9uaXNhdGlvbiBvZmZzZXQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstc2V0LXJlbmRlci1kZWxheSI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3NldF9yZW5kZXJfZGVsYXnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9zaW5rX3NldF9yZW5kZXJfZGVsYXkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBkZWxheTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHJlbmRlciBkZWxheSBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWxheTwvY29kZT48L2VtPgotLiBUaGUgcmVuZGVyIGRlbGF5IGlzIHRoZSB0aW1lCi1iZXR3ZWVuIGFjdHVhbCByZW5kZXJpbmcgb2YgYSBidWZmZXIgYW5kIGl0cyBzeW5jaHJvbmlzYXRpb24gdGltZS4gU29tZQotZGV2aWNlcyBtaWdodCBkZWxheSBtZWRpYSByZW5kZXJpbmcgd2hpY2ggY2FuIGJlIGNvbXBlbnNhdGVkIGZvciB3aXRoIHRoaXMKLWZ1bmN0aW9uLjwvcD4KLTxwPkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhpcyBzaW5rIHdpbGwgcmVwb3J0IGFkZGl0aW9uYWwgbGF0ZW5jeSBhbmQKLW90aGVyIHNpbmtzIHdpbGwgYWRqdXN0IHRoZWlyIGxhdGVuY3kgdG8gZGVsYXkgdGhlIHJlbmRlcmluZyBvZiB0aGVpciBtZWRpYS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGJ5IHN1YmNsYXNzZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1zZXQtcmVuZGVyLWRlbGF5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlbGF5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5ldyBkZWxheTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC1yZW5kZXItZGVsYXkiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSByZW5kZXIgZGVsYXkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4KLS4gc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXJlbmRlci1kZWxheSIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxhecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5KCk8L2NvZGU+PC9hPiBmb3IgbW9yZQotaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbmRlciBkZWxheS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC1yZW5kZXItZGVsYXkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtcmVuZGVyLWRlbGF5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIHJlbmRlciBkZWxheSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC1sYXN0LXNhbXBsZSI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX2dldF9sYXN0X3NhbXBsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0U2FtcGxlLmh0bWwjR3N0U2FtcGxlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPsKgKgotZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9zYW1wbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIGxhc3Qgc2FtcGxlIHRoYXQgYXJyaXZlZCBpbiB0aGUgc2luayBhbmQgd2FzIHVzZWQgZm9yIHByZXJvbGwgb3IgZm9yCi1yZW5kZXJpbmcuIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdGh1bWJuYWlscy48L3A+Ci08cD5UaGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gb24gdGhlIHNhbXBsZSBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlIGJ1ZmZlci48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3Rfc2FtcGxlX3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbGFzdC1zYW1wbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstZ2V0LWxhc3Qtc2FtcGxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdFNhbXBsZS5odG1sI0dzdFNhbXBsZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTYW1wbGU8L3NwYW4+PC9hPi4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RTYW1wbGUuaHRtbCNnc3Qtc2FtcGxlLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9zYW1wbGVfdW5yZWYoKTwvY29kZT48L2E+IGFmdGVyCi11c2FnZS4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2hlbiBubyBidWZmZXIgaGFzIGFycml2ZWQgaW4gdGhlCi1zaW5rIHlldCBvciB3aGVuIHRoZSBzaW5rIGlzIG5vdCBpbiBQQVVTRUQgb3IgUExBWUlORy4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1ibG9ja3NpemUiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBibG9ja3NpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgc2luayB3aWxsIHB1bGwgd2hlbiBpdCBpcyBvcGVyYXRpbmcgaW4gcHVsbAotbW9kZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1ibG9ja3NpemUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmxvY2tzaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGJsb2Nrc2l6ZSBpbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC1ibG9ja3NpemUiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiAqc2luazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBzaW5rIHdpbGwgcHVsbCB3aGVuIGl0IGlzIG9wZXJhdGluZyBpbiBwdWxsCi1tb2RlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstZ2V0LWJsb2Nrc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC1ibG9ja3NpemUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbnVtYmVyIG9mIGJ5dGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+Ci13aWxsIHB1bGwgaW4gcHVsbCBtb2RlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWdldC10aHJvdHRsZS10aW1lIj48L2E+PGgzPmdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSB0aW1lIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCBiZXR3ZWVuIGZyYW1lcyB0byBjb250cm9sIHRoZSAKLW1heGltdW0gYnVmZmVycyBwZXIgc2Vjb25kLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstZ2V0LXRocm90dGxlLXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtdGhyb3R0bGUtdGltZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBudW1iZXIgb2YgbmFub3NlY29uZHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbms8L2NvZGU+PC9lbT4KLXdpbGwgcHV0IGJldHdlZW4gZnJhbWVzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC10aHJvdHRsZS10aW1lIj48L2E+PGgzPmdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHRocm90dGxlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgdGltZSB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgYmV0d2VlbiByZW5kZXJlZCBidWZmZXJzLiBUaGlzCi1jYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBtYXhpbXVtIGJ1ZmZlcnMgcGVyIHNlY29uZCB0aGF0IHRoZSBzaW5rCi13aWxsIHJlbmRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC10aHJvdHRsZS10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRocm90dGxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHRocm90dGxlIHRpbWUgaW4gbmFub3NlY29uZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1zZXQtbWF4LWJpdHJhdGUiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19zZXRfbWF4X2JpdHJhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9zaW5rX3NldF9tYXhfYml0cmF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gbWF4X2JpdHJhdGU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBiaXRzIHBlciBzZWNvbmQgdGhhdCB0aGUgc2luayB3aWxsIHJlbmRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLXNldC1tYXgtYml0cmF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfYml0cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBtYXhfYml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbWF4LWJpdHJhdGUiPjwvYT48aDM+Z3N0X2Jhc2Vfc2lua19nZXRfbWF4X2JpdHJhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zaW5rX2dldF9tYXhfYml0cmF0ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgbWF4aW11bSBhbW91bnQgb2YgYml0cyBwZXIgc2Vjb25kIHRoYXQgdGhlIHNpbmsgd2lsbCByZW5kZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbWF4LWJpdHJhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1nZXQtbWF4LWJpdHJhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYml0cyBwZXIgc2Vjb25kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+Ci13aWxsIHJlbmRlci48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1zZXQtbGFzdC1zYW1wbGUtZW5hYmxlZCI+PC9hPjxoMz5nc3RfYmFzZV9zaW5rX3NldF9sYXN0X3NhbXBsZV9lbmFibGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU2luazwvc3Bhbj48L2E+ICpzaW5rPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGVuYWJsZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29uZmlndXJlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2luazwvY29kZT48L2VtPgotIHRvIHN0b3JlIHRoZSBsYXN0IHJlY2VpdmVkIHNhbXBsZSBpbiB0aGUgbGFzdC1zYW1wbGUKLXByb3BlcnR5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNpbmstc2V0LWxhc3Qtc2FtcGxlLWVuYWJsZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVuYWJsZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IGVuYWJsZS1sYXN0LXNhbXBsZSB2YWx1ZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1pcy1sYXN0LXNhbXBsZS1lbmFibGVkIj48L2E+PGgzPmdzdF9iYXNlX3NpbmtfaXNfbGFzdF9zYW1wbGVfZW5hYmxlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jhc2Vfc2lua19pc19sYXN0X3NhbXBsZV9lbmFibGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4gKnNpbms8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaW5rPC9jb2RlPjwvZW0+Ci0gaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgdG8gc3RvcmUgdGhlIGxhc3QgcmVjZWl2ZWQgc2FtcGxlIGluCi10aGUgbGFzdC1zYW1wbGUgcHJvcGVydHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc2luay1pcy1sYXN0LXNhbXBsZS1lbmFibGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zaW5rLWlzLWxhc3Qtc2FtcGxlLWVuYWJsZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHNpbmsgaXMgY29uZmlndXJlZCB0byBzdG9yZSB0aGUgbGFzdCByZWNlaXZlZCBzYW1wbGUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CQVNFLVNJTkstUEFEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19QQUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9TSU5LX1BBRChvYmopICAgICAgICAgIChHU1RfQkFTRV9TSU5LX0NBU1QgKG9iaiktJmd0O3NpbmtwYWQpCi08L3ByZT4KLTxwPkdpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJBU0UtU0lOSy1QQUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJhc2Ugc2luayBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1DT05EOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EKG9iaikgICAoJmFtcDtHU1RfQkFTRV9TSU5LX0NBU1Qob2JqKS0mZ3Q7cHJlcm9sbF9jb25kKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CQVNFLVNJTkstR0VULVBSRVJPTEwtTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSyhvYmopICAgKCZhbXA7R1NUX0JBU0VfU0lOS19DQVNUKG9iaiktJmd0O3ByZXJvbGxfbG9jaykKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtQlJPQURDQVNUOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19QUkVST0xMX0JST0FEQ0FTVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9CUk9BRENBU1Qob2JqKSAgZ19jb25kX2Jyb2FkY2FzdCAoR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EIChvYmopKTsKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sob2JqKSAgICAgICAoZ19tdXRleF9sb2NrKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSyhvYmopKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtU0lHTkFMOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9TSUdOQUwob2JqKSAgICAgZ19jb25kX3NpZ25hbCAoR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EIChvYmopKTsKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVFJZTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9UUllMT0NLKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX1RSWUxPQ0sob2JqKSAgICAoZ19tdXRleF90cnlsb2NrKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSyhvYmopKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVU5MT0NLOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sob2JqKSAgICAgKGdfbXV0ZXhfdW5sb2NrKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSyhvYmopKSkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVDpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9XQUlUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQob2JqKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVC1VTlRJTDpDQVBTIj48L2E+PGgzPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9XQUlUX1VOVElMKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVRfVU5USUwob2JqLCBlbmRfdGltZSk8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCYXNlU2luay5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmstc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCYXNlU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEJhc2VTaW5rOzwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdEJhc2VTaW5rQ2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCYXNlU2lua0NsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBnZXQgY2FwcyBmcm9tIHN1YmNsYXNzICovCi0gIEdzdENhcHMqICAgICAgKCpnZXRfY2FwcykgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2FwcyAqZmlsdGVyKTsKLSAgLyogbm90aWZ5IHN1YmNsYXNzIG9mIG5ldyBjYXBzICovCi0gIGdib29sZWFuICAgICAgKCpzZXRfY2FwcykgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2FwcyAqY2Fwcyk7Ci0KLSAgLyogZml4YXRlIHNpbmsgY2FwcyBkdXJpbmcgcHVsbC1tb2RlIG5lZ290aWF0aW9uICovCi0gIEdzdENhcHMgKiAgICAgKCpmaXhhdGUpICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2FwcyAqY2Fwcyk7Ci0gIC8qIHN0YXJ0IG9yIHN0b3AgYSBwdWxsaW5nIHRocmVhZCAqLwotICBnYm9vbGVhbiAgICAgICgqYWN0aXZhdGVfcHVsbCkoR3N0QmFzZVNpbmsgKnNpbmssIGdib29sZWFuIGFjdGl2ZSk7Ci0KLSAgLyogZ2V0IHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIGZvciBzeW5jaW5nIG9uIHRoaXMgYnVmZmVyICovCi0gIHZvaWQgICAgICAgICAgKCpnZXRfdGltZXMpICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0QnVmZmVyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnN0YXJ0LCBHc3RDbG9ja1RpbWUgKmVuZCk7Ci0KLSAgLyogcHJvcG9zZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHVwc3RyZWFtICovCi0gIGdib29sZWFuICAgICAgKCpwcm9wb3NlX2FsbG9jYXRpb24pICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RRdWVyeSAqcXVlcnkpOwotCi0gIC8qIHN0YXJ0IGFuZCBzdG9wIHByb2Nlc3NpbmcsIGlkZWFsIGZvciBvcGVuaW5nL2Nsb3NpbmcgdGhlIHJlc291cmNlICovCi0gIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgIChHc3RCYXNlU2luayAqc2luayk7Ci0gIGdib29sZWFuICAgICAgKCpzdG9wKSAgICAgICAgIChHc3RCYXNlU2luayAqc2luayk7Ci0KLSAgLyogdW5sb2NrIGFueSBwZW5kaW5nIGFjY2VzcyB0byB0aGUgcmVzb3VyY2UuIHN1YmNsYXNzZXMgc2hvdWxkIHVubG9jawotICAgKiBhbnkgZnVuY3Rpb24gQVNBUC4gKi8KLSAgZ2Jvb2xlYW4gICAgICAoKnVubG9jaykgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKLSAgLyogQ2xlYXIgYSBwcmV2aW91c2x5IGluZGljYXRlZCB1bmxvY2sgcmVxdWVzdCBub3QgdGhhdCB1bmxvY2tpbmcgaXMKLSAgICogY29tcGxldGUuIFN1Yi1jbGFzc2VzIHNob3VsZCBjbGVhciBhbnkgY29tbWFuZCBxdWV1ZSBvciBpbmRpY2F0b3IgdGhleQotICAgKiBzZXQgZHVyaW5nIHVubG9jayAqLwotICBnYm9vbGVhbiAgICAgICgqdW5sb2NrX3N0b3ApICAoR3N0QmFzZVNpbmsgKnNpbmspOwotCi0gIC8qIG5vdGlmeSBzdWJjbGFzcyBvZiBxdWVyeSAqLwotICBnYm9vbGVhbiAgICAgICgqcXVlcnkpICAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdFF1ZXJ5ICpxdWVyeSk7Ci0KLSAgLyogbm90aWZ5IHN1YmNsYXNzIG9mIGV2ZW50ICovCi0gIGdib29sZWFuICAgICAgKCpldmVudCkgICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0RXZlbnQgKmV2ZW50KTsKLSAgLyogd2FpdCBmb3IgZW9zIG9yIGdhcCwgc3ViY2xhc3NlcyBzaG91bGQgY2hhaW4gdXAgdG8gcGFyZW50IGZpcnN0ICovCi0gIEdzdEZsb3dSZXR1cm4gKCp3YWl0X2V2ZW50KSAgIChHc3RCYXNlU2luayAqc2luaywgR3N0RXZlbnQgKmV2ZW50KTsKLQotICAvKiBub3RpZnkgc3ViY2xhc3Mgb2YgYnVmZmVyIG9yIGxpc3QgYmVmb3JlIGRvaW5nIHN5bmMgKi8KLSAgR3N0Rmxvd1JldHVybiAoKnByZXBhcmUpICAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0gIEdzdEZsb3dSZXR1cm4gKCpwcmVwYXJlX2xpc3QpIChHc3RCYXNlU2luayAqc2luaywgR3N0QnVmZmVyTGlzdCAqYnVmZmVyX2xpc3QpOwotCi0gIC8qIG5vdGlmeSBzdWJjbGFzcyBvZiBwcmVyb2xsIGJ1ZmZlciBvciByZWFsIGJ1ZmZlciAqLwotICBHc3RGbG93UmV0dXJuICgqcHJlcm9sbCkgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgR3N0Rmxvd1JldHVybiAoKnJlbmRlcikgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0gIC8qIFJlbmRlciBhIEJ1ZmZlckxpc3QgKi8KLSAgR3N0Rmxvd1JldHVybiAoKnJlbmRlcl9saXN0KSAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdCk7Ci19OwotPC9wcmU+Ci08cD5TdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBhbnkgb2YgdGhlIGF2YWlsYWJsZSB2aXJ0dWFsIG1ldGhvZHMgb3Igbm90LCBhcwotbmVlZGVkLiBBdCB0aGUgbWluaW11bSwgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZW5kZXI8L2NvZGU+PC9lbT4KLSBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gdG8KLW91dHB1dC9wcmVzZW50IGJ1ZmZlcnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5nZXQtY2FwcyI+PC9hPmdldF9jYXBzPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5DYWxsZWQgdG8gZ2V0IHNpbmsgcGFkIGNhcHMgZnJvbSB0aGUgc3ViY2xhc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnNldC1jYXBzIj48L2E+c2V0X2NhcHM8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk5vdGlmeSBzdWJjbGFzcyBvZiBjaGFuZ2VkIGNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLmZpeGF0ZSI+PC9hPmZpeGF0ZTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T25seSB1c2VmdWwgaW4gcHVsbCBtb2RlLiBJbXBsZW1lbnQgaWYgeW91IGhhdmUKLWlkZWFzIGFib3V0IHdoYXQgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNhcHMgeW91IHN1cHBvcnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5hY3RpdmF0ZS1wdWxsIj48L2E+YWN0aXZhdGVfcHVsbDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+U3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB3aGVuIHRoZXkgY2FuIHByb3ZpZGUgYW4KLWFsdGVybmF0ZSBtZXRob2Qgb2Ygc3Bhd25pbmcgYSB0aHJlYWQgdG8gZHJpdmUgdGhlIHBpcGVsaW5lIGluIHB1bGwgbW9kZS4KLVNob3VsZCBzdGFydCBvciBzdG9wIHRoZSBwdWxsaW5nIHRocmVhZCwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGUKLSJhY3RpdmUiIGFyZ3VtZW50LiBDYWxsZWQgYWZ0ZXIgYWN0dWFsbHkgYWN0aXZhdGluZyB0aGUgc2luayBwYWQgaW4gcHVsbAotbW9kZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3RhcnRzIGEgdGFzayBvbiB0aGUgc2luayBwYWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5nZXQtdGltZXMiPjwvYT5nZXRfdGltZXM8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkNhbGxlZCB0byBnZXQgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgZm9yIHN5bmNocm9uaXNpbmcKLXRoZSBwYXNzZWQgYnVmZmVyIHRvIHRoZSBjbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MucHJvcG9zZS1hbGxvY2F0aW9uIj48L2E+cHJvcG9zZV9hbGxvY2F0aW9uPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5jb25maWd1cmUgdGhlIGFsbG9jYXRpb24gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnN0YXJ0Ij48L2E+c3RhcnQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlN0YXJ0IHByb2Nlc3NpbmcuIElkZWFsIGZvciBvcGVuaW5nIHJlc291cmNlcyBpbiB0aGUgc3ViY2xhc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnN0b3AiPjwvYT5zdG9wPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5TdG9wIHByb2Nlc3NpbmcuIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSB0aGlzIHRvIGNsb3NlIHJlc291cmNlcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnVubG9jayI+PC9hPnVubG9jazwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VW5sb2NrIGFueSBwZW5kaW5nIGFjY2VzcyB0byB0aGUgcmVzb3VyY2UuIFN1YmNsYXNzZXMgc2hvdWxkCi11bmJsb2NrIGFueSBibG9ja2VkIGZ1bmN0aW9uIEFTQVA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnVubG9jay1zdG9wIj48L2E+dW5sb2NrX3N0b3A8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkNsZWFyIHRoZSBwcmV2aW91cyB1bmxvY2sgcmVxdWVzdC4gU3ViY2xhc3NlcyBzaG91bGQgY2xlYXIKLWFueSBzdGF0ZSB0aGV5IHNldCBkdXJpbmcgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj51bmxvY2soKTwvY29kZT4sIHN1Y2ggYXMgY2xlYXJpbmcgY29tbWFuZCBxdWV1ZXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5xdWVyeSI+PC9hPnF1ZXJ5PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5wZXJmb3JtIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gb24gdGhlIGVsZW1lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5ldmVudCI+PC9hPmV2ZW50PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PdmVycmlkZSB0aGlzIHRvIGhhbmRsZSBldmVudHMgYXJyaXZpbmcgb24gdGhlIHNpbmsgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy53YWl0LWV2ZW50Ij48L2E+d2FpdF9ldmVudDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3ZlcnJpZGUgdGhpcyB0byBpbXBsZW1lbnQgY3VzdG9tIGxvZ2ljIHRvIHdhaXQgZm9yIHRoZSBldmVudAotdGltZSAoZm9yIGV2ZW50cyBsaWtlIEVPUyBhbmQgR0FQKS4gU3ViY2xhc3NlcyBzaG91bGQgYWx3YXlzIGZpcnN0Ci1jaGFpbiB1cCB0byB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnByZXBhcmUiPjwvYT5wcmVwYXJlPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5DYWxsZWQgdG8gcHJlcGFyZSB0aGUgYnVmZmVyIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVuZGVyPC9jb2RlPjwvZW0+Ci1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnByZXJvbGw8L2NvZGU+PC9lbT4KLS4gVGhpcwotZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBzeW5jaHJvbmlzYXRpb24gaXMgcGVyZm9ybWVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MucHJlcGFyZS1saXN0Ij48L2E+cHJlcGFyZV9saXN0PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5DYWxsZWQgdG8gcHJlcGFyZSB0aGUgYnVmZmVyIGxpc3QgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZW5kZXJfbGlzdDwvY29kZT48L2VtPgotLiBUaGlzCi1mdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHN5bmNocm9uaXNhdGlvbiBpcyBwZXJmb3JtZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5wcmVyb2xsIj48L2E+cHJlcm9sbDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+Q2FsbGVkIHRvIHByZXNlbnQgdGhlIHByZXJvbGwgYnVmZmVyIGlmIGRlc2lyZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIiPjwvYT5yZW5kZXI8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkNhbGxlZCB3aGVuIGEgYnVmZmVyIHNob3VsZCBiZSBwcmVzZW50ZWQgb3Igb3V0cHV0LCBhdCB0aGUKLWNvcnJlY3QgbW9tZW50IGlmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPiBoYXMgYmVlbiBzZXQgdG8gc3luYyB0byB0aGUgY2xvY2suPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXItbGlzdCI+PC9hPnJlbmRlcl9saXN0PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5TYW1lIGFzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZW5kZXI8L2NvZGU+PC9lbT4KLWJ1dCB1c2VkIHdpdGggYnVmZmVyIGxpc3RzIGluc3RlYWQgb2YKLWJ1ZmZlcnMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VTaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU2luay0tYXN5bmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxhc3luY+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYXN5bmPigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCB0aGUgYmFzZXNpbmsgd2lsbCBwZXJmb3JtIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLgotV2hlbiBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4sIHRoZSBzaW5rIHdpbGwgbm90IHNpZ25hbCB0aGUgcGFyZW50IHdoZW4gaXQgcHJlcm9sbHMuCi1Vc2UgdGhpcyBvcHRpb24gd2hlbiBkZWFsaW5nIHdpdGggc3BhcnNlIHN0cmVhbXMgb3Igd2hlbiBzeW5jaHJvbmlzYXRpb24gaXMKLW5vdCByZXF1aXJlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmstLWJsb2Nrc2l6ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJsb2Nrc2l6ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmxvY2tzaXpl4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgYW1vdW50IG9mIGJ5dGVzIHRvIHB1bGwgd2hlbiBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA0MDk2PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU2luay0tZW5hYmxlLWxhc3Qtc2FtcGxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZW5hYmxlLWxhc3Qtc2FtcGxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxlbmFibGUtbGFzdC1zYW1wbGXigJ0gICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkVuYWJsZSB0aGUgbGFzdC1zYW1wbGUgcHJvcGVydHkuIElmIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LCBiYXNlc2luayBkb2Vzbid0IGtlZXAgYQotcmVmZXJlbmNlIHRvIHRoZSBsYXN0IGJ1ZmZlciBhcnJpdmVkIGFuZCB0aGUgbGFzdC1zYW1wbGUgcHJvcGVydHkgaXMgYWx3YXlzCi1zZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IG5lZWQgYnVmZmVycyB0byBiZSByZWxlYXNlZCBhcyBzb29uCi1hcyBwb3NzaWJsZSwgZWcuIGlmIHlvdSdyZSB1c2luZyBhIGJ1ZmZlciBwb29sLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU2luay0tbGFzdC1zYW1wbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsYXN0LXNhbXBsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbGFzdC1zYW1wbGXigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0U2FtcGxlLmh0bWwjR3N0U2FtcGxlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNhbXBsZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgbGFzdCBidWZmZXIgdGhhdCBhcnJpdmVkIGluIHRoZSBzaW5rIGFuZCB3YXMgdXNlZCBmb3IgcHJlcm9sbCBvciBmb3IKLXJlbmRlcmluZy4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aHVtYm5haWxzLiBUaGlzIHByb3BlcnR5Ci1jYW4gYmUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdoZW4gdGhlIHNpbmsgaGFzIG5vdCB5ZXQgcmVjZWl2ZWQgYSBidWZmZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJhc2VTaW5rLS1tYXgtYml0cmF0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1iaXRyYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtYml0cmF0ZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Db250cm9sIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBiaXRzIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBwZXIgc2Vjb25kLgotU2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIGEgdmFsdWUgYmlnZ2VyIHRoYW4gMCB3aWxsIG1ha2UgdGhlIHNpbmsgZGVsYXkKLXJlbmRlcmluZyBvZiB0aGUgYnVmZmVycyB3aGVuIGl0IHdvdWxkIGV4Y2VlZCB0byBtYXgtYml0cmF0ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmstLW1heC1sYXRlbmVzcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1sYXRlbmVzc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LWxhdGVuZXNz4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heGltdW0gbnVtYmVyIG9mIG5hbm9zZWNvbmRzIHRoYXQgYSBidWZmZXIgY2FuIGJlIGxhdGUgYmVmb3JlIGl0IGlzIGRyb3BwZWQgKC0xIHVubGltaXRlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAtMTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU2luay0tcW9zIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccW9z4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxxb3PigJ0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkdlbmVyYXRlIFF1YWxpdHktb2YtU2VydmljZSBldmVudHMgdXBzdHJlYW0uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU2luay0tcmVuZGVyLWRlbGF5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVuZGVyLWRlbGF54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZW5kZXItZGVsYXnigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgYWRkaXRpb25hbCBkZWxheSBiZXR3ZWVuIHN5bmNocm9uaXNhdGlvbiBhbmQgYWN0dWFsIHJlbmRlcmluZyBvZiB0aGUKLW1lZGlhLiBUaGlzIHByb3BlcnR5IHdpbGwgYWRkIGFkZGl0aW9uYWwgbGF0ZW5jeSB0byB0aGUgZGV2aWNlIGluIG9yZGVyIHRvCi1tYWtlIG90aGVyIHNpbmtzIGNvbXBlbnNhdGUgZm9yIHRoZSBkZWxheS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmstLXN5bmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzeW5j4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzeW5j4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlN5bmMgb24gdGhlIGNsb2NrLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU2luay0tdGhyb3R0bGUtdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRocm90dGxlLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRocm90dGxlLXRpbWXigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSB0aW1lIHRvIGluc2VydCBiZXR3ZWVuIGJ1ZmZlcnMuIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gY29udHJvbAotdGhlIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgcGVyIHNlY29uZCB0byByZW5kZXIuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eQotdG8gYSB2YWx1ZSBiaWdnZXIgdGhhbiAwIHdpbGwgbWFrZSB0aGUgc2luayBjcmVhdGUgVEhST1RUTEUgUW9TIGV2ZW50cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmstLXRzLW9mZnNldCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRzLW9mZnNldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdHMtb2Zmc2V04oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkNvbnRyb2xzIHRoZSBmaW5hbCBzeW5jaHJvbmlzYXRpb24sIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCByZW5kZXIgdGhlIGJ1ZmZlcgotZWFybGllciB3aGlsZSBhIHBvc2l0aXZlIHZhbHVlIGRlbGF5cyBwbGF5YmFjay4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUKLXVzZWQgdG8gZml4IHN5bmNocm9uaXNhdGlvbiBpbiBiYWQgZmlsZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVNpbmsuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlU3JjLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RCYXNlU3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZTU2MzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvR3N0QmFzZVNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQwNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0QmFzZVNyYzogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VTcmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VTcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmFzZVNyYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0QmFzZVNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdEJhc2VTcmMudG9wX29mX3BhZ2UiPjwvYT5Hc3RCYXNlU3JjPC9zcGFuPjwvaDI+Ci08cD5Hc3RCYXNlU3JjIOKAlCBCYXNlIGNsYXNzIGZvciBnZXRyYW5nZSBiYXNlZCBzb3VyY2UgZWxlbWVudHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVNyYy5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXdhaXQtcGxheWluZyIgdGl0bGU9ImdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmfCoCgpIj5nc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zdGFydC13YWl0IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3N0YXJ0X3dhaXTCoCgpIj5nc3RfYmFzZV9zcmNfc3RhcnRfd2FpdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc3RhcnQtY29tcGxldGUiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGXCoCgpIj5nc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtaXMtbGl2ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19pc19saXZlwqAoKSI+Z3N0X2Jhc2Vfc3JjX2lzX2xpdmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1saXZlIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9saXZlwqAoKSI+Z3N0X2Jhc2Vfc3JjX3NldF9saXZlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZm9ybWF0IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXTCoCgpIj5nc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1xdWVyeS1sYXRlbmN5IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3nCoCgpIj5nc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtYmxvY2tzaXplIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemXCoCgpIj5nc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWJsb2Nrc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplwqAoKSI+Z3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtZ2V0LWRvLXRpbWVzdGFtcCIgdGl0bGU9ImdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wwqAoKSI+Z3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1kby10aW1lc3RhbXAiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcMKgKCkiPmdzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZHluYW1pYy1zaXplIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemXCoCgpIj5nc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWF1dG9tYXRpYy1lb3MiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3PCoCgpIj5nc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtbmV3LXNlYW1sZXNzLXNlZ21lbnQiIHRpdGxlPSJnc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnTCoCgpIj5nc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWNhcHMiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2NhcHPCoCgpIj5nc3RfYmFzZV9zcmNfc2V0X2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLWdldC1hbGxvY2F0b3IiIHRpdGxlPSJnc3RfYmFzZV9zcmNfZ2V0X2FsbG9jYXRvcsKgKCkiPmdzdF9iYXNlX3NyY19nZXRfYWxsb2NhdG9yPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLWdldC1idWZmZXItcG9vbCIgdGl0bGU9ImdzdF9iYXNlX3NyY19nZXRfYnVmZmVyX3Bvb2zCoCgpIj5nc3RfYmFzZV9zcmNfZ2V0X2J1ZmZlcl9wb29sPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLWlzLWFzeW5jIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX2lzX2FzeW5jwqAoKSI+Z3N0X2Jhc2Vfc3JjX2lzX2FzeW5jPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtYXN5bmMiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2FzeW5jwqAoKSI+Z3N0X2Jhc2Vfc3JjX3NldF9hc3luYzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHU1QtQkFTRS1TUkMtUEFEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TUkNfUEFEKCkiPkdTVF9CQVNFX1NSQ19QQUQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1JUy1TVEFSVEVEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TUkNfSVNfU1RBUlRFRCgpIj5HU1RfQkFTRV9TUkNfSVNfU1RBUlRFRDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR1NULUJBU0UtU1JDLUlTLVNUQVJUSU5HOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TUkNfSVNfU1RBUlRJTkcoKSI+R1NUX0JBU0VfU1JDX0lTX1NUQVJUSU5HPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VTcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tYmxvY2tzaXplIiB0aXRsZT0iVGhlIOKAnGJsb2Nrc2l6ZeKAnSBwcm9wZXJ0eSI+YmxvY2tzaXplPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtLWRvLXRpbWVzdGFtcCIgdGl0bGU9IlRoZSDigJxkby10aW1lc3RhbXDigJ0gcHJvcGVydHkiPmRvLXRpbWVzdGFtcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tbnVtLWJ1ZmZlcnMiIHRpdGxlPSJUaGUg4oCcbnVtLWJ1ZmZlcnPigJ0gcHJvcGVydHkiPm51bS1idWZmZXJzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtLXR5cGVmaW5kIiB0aXRsZT0iVGhlIOKAnHR5cGVmaW5k4oCdIHByb3BlcnR5Ij50eXBlZmluZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVNyYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCYXNlU3JjQ2xhc3MiPkdzdEJhc2VTcmNDbGFzczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0ZsYWdzIiB0aXRsZT0iZW51bSBHc3RCYXNlU3JjRmxhZ3MiPkdzdEJhc2VTcmNGbGFnczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEJhc2VTcmMKLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCIgdGl0bGU9IkdzdFB1c2hTcmMiPkdzdFB1c2hTcmM8L2E+Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVNyYy5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGJhc2VzcmMuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgaXMgYSBnZW5lcmljIGJhc2UgY2xhc3MgZm9yIHNvdXJjZSBlbGVtZW50cy4gVGhlIGZvbGxvd2luZwotdHlwZXMgb2Ygc291cmNlcyBhcmUgc3VwcG9ydGVkOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5yYW5kb20gYWNjZXNzIHNvdXJjZXMgbGlrZSBmaWxlczwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+c2Vla2FibGUgc291cmNlczwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+bGl2ZSBzb3VyY2VzPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+VGhlIHNvdXJjZSBjYW4gYmUgY29uZmlndXJlZCB0byBvcGVyYXRlIGluIGFueSA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiB3aXRoIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWZvcm1hdCIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfZm9ybWF0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCgpPC9jb2RlPjwvYT4gbWV0aG9kLiBUaGUgY3VycmVudGx5IHNldCBmb3JtYXQgZGV0ZXJtaW5lcwotdGhlIGZvcm1hdCBvZiB0aGUgaW50ZXJuYWwgPGEgaHJlZj0iLi4vaHRtbC9Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gYW5kIGFueSA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULVNFR01FTlQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9TRUdNRU5UPC9jb2RlPjwvYT4KLWV2ZW50cy4gVGhlIGRlZmF1bHQgZm9ybWF0IGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiBpcyA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULUJZVEVTOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRk9STUFUX0JZVEVTPC9jb2RlPjwvYT4uPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gYWx3YXlzIHN1cHBvcnRzIHB1c2ggbW9kZSBzY2hlZHVsaW5nLiBJZiB0aGUgZm9sbG93aW5nCi1jb25kaXRpb25zIGFyZSBtZXQsIGl0IGFsc28gc3VwcG9ydHMgcHVsbCBtb2RlIHNjaGVkdWxpbmc6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPlRoZSBmb3JtYXQgaXMgc2V0IHRvIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtQllURVM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GT1JNQVRfQllURVM8L2NvZGU+PC9hPiAoZGVmYXVsdCkuPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5pcy1zZWVrYWJsZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuaXNfc2Vla2FibGUoKTwvY29kZT48L2E+IHJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPklmIGFsbCB0aGUgY29uZGl0aW9ucyBhcmUgbWV0IGZvciBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlLCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiBpcwotYXV0b21hdGljYWxseSBzZWVrYWJsZSBpbiBwdXNoIG1vZGUgYXMgd2VsbC4gVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QKLWJlIG1ldCB0byBtYWtlIHRoZSBlbGVtZW50IHNlZWthYmxlIGluIHB1c2ggbW9kZSB3aGVuIHRoZSBmb3JtYXQgaXMgbm90Ci08YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULUJZVEVTOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRk9STUFUX0JZVEVTPC9jb2RlPjwvYT46PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmlzLXNlZWthYmxlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5pc19zZWVrYWJsZSgpPC9jb2RlPjwvYT4gcmV0dXJucyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4uCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MucXVlcnkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLnF1ZXJ5KCk8L2NvZGU+PC9hPiBjYW4gY29udmVydCBhbGwgc3VwcG9ydGVkIHNlZWsgZm9ybWF0cyB0byB0aGUKLSAgICBpbnRlcm5hbCBmb3JtYXQgYXMgc2V0IHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWZvcm1hdCIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfZm9ybWF0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCgpPC9jb2RlPjwvYT4uCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZG8tc2VlayI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuZG9fc2VlaygpPC9jb2RlPjwvYT4gaXMgaW1wbGVtZW50ZWQsIHBlcmZvcm1zIHRoZSBzZWVrIGFuZCByZXR1cm5zCi0gICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi4KLSAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+V2hlbiB0aGUgZWxlbWVudCBkb2VzIG5vdCBtZWV0IHRoZSByZXF1aXJlbWVudHMgdG8gb3BlcmF0ZSBpbiBwdWxsIG1vZGUsIHRoZQotb2Zmc2V0IGFuZCBsZW5ndGggaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuY3JlYXRlKCk8L2NvZGU+PC9hPiBtZXRob2Qgc2hvdWxkIGJlIGlnbm9yZWQuCi1JdCBpcyByZWNvbW1lbmRlZCB0byBzdWJjbGFzcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHVzaFNyYy5odG1sIiB0aXRsZT0iR3N0UHVzaFNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFB1c2hTcmM8L3NwYW4+PC9hPiBpbnN0ZWFkLCBpbiB0aGlzIHNpdHVhdGlvbi4gSWYgdGhlCi1lbGVtZW50IGNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSBidXQgb25seSB3aXRoIHNwZWNpZmljIG9mZnNldHMgYW5kCi1sZW5ndGhzLCBpdCBpcyBhbGxvd2VkIHRvIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gdGhlIHdyb25nIHZhbHVlcyBhcmUgcGFzc2VkCi10byB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuY3JlYXRlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKTwvY29kZT48L2E+IGZ1bmN0aW9uLjwvcD4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+IGhhcyBzdXBwb3J0IGZvciBsaXZlIHNvdXJjZXMuIExpdmUgc291cmNlcyBhcmUgc291cmNlcyB0aGF0IHdoZW4KLXBhdXNlZCBkaXNjYXJkIGRhdGEsIHN1Y2ggYXMgYXVkaW8gb3IgdmlkZW8gY2FwdHVyZSBkZXZpY2VzLiBBIHR5cGljYWwgbGl2ZQotc291cmNlIGFsc28gcHJvZHVjZXMgZGF0YSBhdCBhIGZpeGVkIHJhdGUgYW5kIHRodXMgcHJvdmlkZXMgYSBjbG9jayB0byBwdWJsaXNoCi10aGlzIHJhdGUuCi1Vc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWxpdmUiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2xpdmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3NyY19zZXRfbGl2ZSgpPC9jb2RlPjwvYT4gdG8gYWN0aXZhdGUgdGhlIGxpdmUgc291cmNlIG1vZGUuPC9wPgotPHA+QSBsaXZlIHNvdXJjZSBkb2VzIG5vdCBwcm9kdWNlIGRhdGEgaW4gdGhlIFBBVVNFRCBzdGF0ZS4gVGhpcyBtZWFucyB0aGF0IHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuY3JlYXRlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKTwvY29kZT48L2E+IG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWQgaW4gUEFVU0VEIGJ1dCBvbmx5IGluCi1QTEFZSU5HLiBUbyBzaWduYWwgdGhlIHBpcGVsaW5lIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBub3QgcHJvZHVjZSBkYXRhLCB0aGUKLXJldHVybiB2YWx1ZSBmcm9tIHRoZSBSRUFEWSB0byBQQVVTRUQgc3RhdGUgd2lsbCBiZQotPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLUNIQU5HRS1OTy1QUkVST0xMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw8L2NvZGU+PC9hPi48L3A+Ci08cD5BIHR5cGljYWwgbGl2ZSBzb3VyY2Ugd2lsbCB0aW1lc3RhbXAgdGhlIGJ1ZmZlcnMgaXQgY3JlYXRlcyB3aXRoIHRoZQotY3VycmVudCBydW5uaW5nIHRpbWUgb2YgdGhlIHBpcGVsaW5lLiBUaGlzIGlzIG9uZSByZWFzb24gd2h5IGEgbGl2ZSBzb3VyY2UKLWNhbiBvbmx5IHByb2R1Y2UgZGF0YSBpbiB0aGUgUExBWUlORyBzdGF0ZSwgd2hlbiB0aGUgY2xvY2sgaXMgYWN0dWFsbHkKLWRpc3RyaWJ1dGVkIGFuZCBydW5uaW5nLjwvcD4KLTxwPkxpdmUgc291cmNlcyB0aGF0IHN5bmNocm9uaXplIGFuZCBibG9jayBvbiB0aGUgY2xvY2sgKGFuIGF1ZGlvIHNvdXJjZSwgZm9yCi1leGFtcGxlKSBjYW4gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXdhaXQtcGxheWluZyIgdGl0bGU9ImdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcoKTwvY29kZT48L2E+IHdoZW4gdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5jcmVhdGUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSgpPC9jb2RlPjwvYT4gZnVuY3Rpb24gd2FzIGludGVycnVwdGVkIGJ5IGEgc3RhdGUgY2hhbmdlIHRvCi1QQVVTRUQuPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmdldC10aW1lcyI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuZ2V0X3RpbWVzKCk8L2NvZGU+PC9hPiBtZXRob2QgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHBzZXVkby1saXZlCi1zb3VyY2VzLiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGltcGxlbWVudCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZ2V0LXRpbWVzIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5nZXRfdGltZXMoKTwvY29kZT48L2E+Ci1mdW5jdGlvbiBpZiB0aGUgc291cmNlIGlzIGEgbGl2ZSBzb3VyY2UuIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5nZXQtdGltZXMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLmdldF90aW1lcygpPC9jb2RlPjwvYT4KLWZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGltZXN0YW1wcyBzdGFydGluZyBmcm9tIDAsIGFzIGlmIGl0IHdlcmUgYSBub24tbGl2ZQotc291cmNlLiBUaGUgYmFzZSBjbGFzcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSB0aW1lc3RhbXBzIGFyZSB0cmFuc2Zvcm1lZAotaW50byB0aGUgY3VycmVudCBydW5uaW5nX3RpbWUuIFRoZSBiYXNlIHNvdXJjZSB3aWxsIHRoZW4gd2FpdCBmb3IgdGhlCi1jYWxjdWxhdGVkIHJ1bm5pbmdfdGltZSBiZWZvcmUgcHVzaGluZyBvdXQgdGhlIGJ1ZmZlci48L3A+Ci08cD5Gb3IgbGl2ZSBzb3VyY2VzLCB0aGUgYmFzZSBjbGFzcyB3aWxsIGJ5IGRlZmF1bHQgcmVwb3J0IGEgbGF0ZW5jeSBvZiAwLgotRm9yIHBzZXVkbyBsaXZlIHNvdXJjZXMsIHRoZSBiYXNlIGNsYXNzIHdpbGwgYnkgZGVmYXVsdCBtZWFzdXJlIHRoZSBkaWZmZXJlbmNlCi1iZXR3ZWVuIHRoZSBmaXJzdCBidWZmZXIgdGltZXN0YW1wIGFuZCB0aGUgc3RhcnQgdGltZSBvZiBnZXRfdGltZXMgYW5kIHdpbGwKLXJlcG9ydCB0aGlzIHZhbHVlIGFzIHRoZSBsYXRlbmN5LgotU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhlIHF1ZXJ5IGZ1bmN0aW9uIHdoZW4gdGhpcyBiZWhhdmlvdXIgaXMgbm90Ci1hY2NlcHRhYmxlLjwvcD4KLTxwPlRoZXJlIGlzIG9ubHkgc3VwcG9ydCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiBmb3IgZXhhY3RseSBvbmUgc291cmNlIHBhZCwgd2hpY2gKLXNob3VsZCBiZSBuYW1lZCAic3JjIi4gQSBzb3VyY2UgaW1wbGVtZW50YXRpb24gKHN1YmNsYXNzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+KQotc2hvdWxkIGluc3RhbGwgYSBwYWQgdGVtcGxhdGUgaW4gaXRzIGNsYXNzX2luaXQgZnVuY3Rpb24sIGxpa2Ugc286PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLTEyCi0xMwotMTQ8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5zdGF0aWMgdm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+bXlfZWxlbWVudF9jbGFzc19pbml0PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5Hc3RNeUVsZW1lbnRDbGFzcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5rbGFzczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIEdzdEVsZW1lbnRDbGFzcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5nc3RlbGVtZW50X2NsYXNzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPkdTVF9FTEVNRU5UX0NMQVNTPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5rbGFzczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIHNyY3RlbXBsYXRlIHNob3VsZCBiZSBhICNHc3RTdGF0aWNQYWRUZW1wbGF0ZSB3aXRoIGRpcmVjdGlvbjwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vICVHU1RfUEFEX1NSQyBhbmQgbmFtZSAmcXVvdDtzcmMmcXVvdDs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3MtYWRkLXN0YXRpYy1wYWQtdGVtcGxhdGUiPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Z3N0ZWxlbWVudF9jbGFzczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPnNyY3RlbXBsYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtY2xhc3Mtc2V0LXN0YXRpYy1tZXRhZGF0YSI+Z3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmdzdGVsZW1lbnRfY2xhc3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLSAgICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7U291cmNlIG5hbWUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgIDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1NvdXJjZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLSAgICAgPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7TXkgU291cmNlIGVsZW1lbnQmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgIDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1RoZSBhdXRob3IgJmx0O215LnNpbmsmIzY0O215LmVtYWlsJmd0OyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxwPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40LjQuOC4xOSI+PC9hPjxoMz5Db250cm9sbGVkIHNodXRkb3duIG9mIGxpdmUgc291cmNlcyBpbiBhcHBsaWNhdGlvbnM8L2gzPgotPHA+Ci1BcHBsaWNhdGlvbnMgdGhhdCByZWNvcmQgZnJvbSBhIGxpdmUgc291cmNlIG1heSB3YW50IHRvIHN0b3AgcmVjb3JkaW5nCi1pbiBhIGNvbnRyb2xsZWQgd2F5LCBzbyB0aGF0IHRoZSByZWNvcmRpbmcgaXMgc3RvcHBlZCwgYnV0IHRoZSBkYXRhCi1hbHJlYWR5IGluIHRoZSBwaXBlbGluZSBpcyBwcm9jZXNzZWQgdG8gdGhlIGVuZCAocmVtZW1iZXIgdGhhdCBtYW55IGxpdmUKLXNvdXJjZXMgd291bGQgZ28gb24gcmVjb3JkaW5nIGZvcmV2ZXIgb3RoZXJ3aXNlKS4gRm9yIHRoYXQgdG8gaGFwcGVuIHRoZQotYXBwbGljYXRpb24gbmVlZHMgdG8gbWFrZSB0aGUgc291cmNlIHN0b3AgcmVjb3JkaW5nIGFuZCBzZW5kIGFuIEVPUwotZXZlbnQgZG93biB0aGUgcGlwZWxpbmUuIFRoZSBhcHBsaWNhdGlvbiB3b3VsZCB0aGVuIHdhaXQgZm9yIGFuCi1FT1MgbWVzc2FnZSBwb3N0ZWQgb24gdGhlIHBpcGVsaW5lJ3MgYnVzIHRvIGtub3cgd2hlbiBhbGwgZGF0YSBoYXMKLWJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgcGlwZWxpbmUgY2FuIHNhZmVseSBiZSBzdG9wcGVkLgotCi1BbiBhcHBsaWNhdGlvbiBtYXkgc2VuZCBhbiBFT1MgZXZlbnQgdG8gYSBzb3VyY2UgZWxlbWVudCB0byBtYWtlIGl0Ci1wZXJmb3JtIHRoZSBFT1MgbG9naWMgKHNlbmQgRU9TIGV2ZW50IGRvd25zdHJlYW0gb3IgcG9zdCBhCi08YSBocmVmPSIuLi9odG1sL0dzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1TRUdNRU5ULURPTkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORTwvY29kZT48L2E+IG9uIHRoZSBidXMpLiBUaGlzIGNhbiB0eXBpY2FsbHkgYmUgZG9uZQotd2l0aCB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2VuZC1ldmVudCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZWxlbWVudF9zZW5kX2V2ZW50KCk8L2NvZGU+PC9hPiBmdW5jdGlvbiBvbiB0aGUgZWxlbWVudCBvciBpdHMgcGFyZW50IGJpbi4KLQotQWZ0ZXIgdGhlIEVPUyBoYXMgYmVlbiBzZW50IHRvIHRoZSBlbGVtZW50LCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIHdhaXQgZm9yCi1hbiBFT1MgbWVzc2FnZSB0byBiZSBwb3N0ZWQgb24gdGhlIHBpcGVsaW5lJ3MgYnVzLiBPbmNlIHRoaXMgRU9TIG1lc3NhZ2UgaXMKLXJlY2VpdmVkLCBpdCBtYXkgc2FmZWx5IHNodXQgZG93biB0aGUgZW50aXJlIHBpcGVsaW5lLgotPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VTcmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy13YWl0LXBsYXlpbmciPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3NyY193YWl0X3BsYXlpbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPklmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5jcmVhdGUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSgpPC9jb2RlPjwvYT4gbWV0aG9kIHBlcmZvcm1zIGl0cyBvd24gc3luY2hyb25pc2F0aW9uCi1hZ2FpbnN0IHRoZSBjbG9jayBpdCBtdXN0IHVuYmxvY2sgd2hlbiBnb2luZyBmcm9tIFBMQVlJTkcgdG8gdGhlIFBBVVNFRCBzdGF0ZQotYW5kIGNhbGwgdGhpcyBtZXRob2QgYmVmb3JlIGNvbnRpbnVpbmcgdG8gcHJvZHVjZSB0aGUgcmVtYWluaW5nIGRhdGEuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIGEgc3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgaGFwcGVucyAoaW4gd2hpY2gKLWNhc2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX09LPC9jb2RlPjwvYT4pIG9yIHRoZSBwcm9jZXNzaW5nIG11c3QgYmUgc3RvcHBlZCBkdWUKLXRvIGEgc3RhdGUgY2hhbmdlIHRvIFJFQURZIG9yIGEgRkxVU0ggZXZlbnQgKGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbgotcmV0dXJucyA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dTVC1GTE9XLUZMVVNISU5HOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19GTFVTSElORzwvY29kZT48L2E+KS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtd2FpdC1wbGF5aW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLXdhaXQtcGxheWluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX09LPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotaXMgUExBWUlORyBhbmQgcHJvY2Vzc2luZyBjYW4KLWNvbnRpbnVlLiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSBjcmVhdGUgdm1ldGhvZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLXN0YXJ0LXdhaXQiPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX3N0YXJ0X3dhaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zcmNfc3RhcnRfd2FpdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpiYXNlc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldhaXQgdW50aWwgdGhlIHN0YXJ0IG9wZXJhdGlvbiBjb21wbGV0ZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLXN0YXJ0LXdhaXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJhc2VzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5iYXNlIHNvdXJjZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zdGFydC13YWl0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zdGFydC1jb21wbGV0ZSI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqYmFzZXNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiByZXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29tcGxldGUgYW4gYXN5bmNocm9ub3VzIHN0YXJ0IG9wZXJhdGlvbi4gV2hlbiB0aGUgc3ViY2xhc3Mgb3ZlcnJpZGVzIHRoZQotc3RhcnQgbWV0aG9kLCBpdCBzaG91bGQgY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zdGFydC1jb21wbGV0ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zdGFydF9jb21wbGV0ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBsZXRlKCk8L2NvZGU+PC9hPiB3aGVuIHRoZSBzdGFydAotb3BlcmF0aW9uIGNvbXBsZXRlcyBlaXRoZXIgZnJvbSB0aGUgc2FtZSB0aHJlYWQgb3IgZnJvbSBhbiBhc3luY2hyb25vdXMKLWhlbHBlciB0aHJlYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLXN0YXJ0LWNvbXBsZXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJhc2VzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5iYXNlIHNvdXJjZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtaXMtbGl2ZSI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfaXNfbGl2ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jhc2Vfc3JjX2lzX2xpdmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIGFuIGVsZW1lbnQgaXMgaW4gbGl2ZSBtb2RlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1pcy1saXZlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5iYXNlIHNvdXJjZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1pcy1saXZlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGVsZW1lbnQgaXMgaW4gbGl2ZSBtb2RlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWxpdmUiPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX3NldF9saXZlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2Vfc3JjX3NldF9saXZlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGxpdmU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SWYgdGhlIGVsZW1lbnQgbGlzdGVucyB0byBhIGxpdmUgc291cmNlLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bGl2ZTwvY29kZT48L2VtPgotIHNob3VsZAotYmUgc2V0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi48L3A+Ci08cD5BIGxpdmUgc291cmNlIHdpbGwgbm90IHByb2R1Y2UgZGF0YSBpbiB0aGUgUEFVU0VEIHN0YXRlIGFuZAotd2lsbCB0aGVyZWZvcmUgbm90IGJlIGFibGUgdG8gcGFydGljaXBhdGUgaW4gdGhlIFBSRVJPTEwgcGhhc2UKLW9mIGEgcGlwZWxpbmUuIFRvIHNpZ25hbCB0aGlzIGZhY3QgdG8gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUKLXBpcGVsaW5lLCB0aGUgc3RhdGUgY2hhbmdlIHJldHVybiB2YWx1ZSBvZiB0aGUgbGl2ZSBzb3VyY2Ugd2lsbAotYmUgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtbGl2ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5iYXNlIHNvdXJjZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5saXZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmV3IGxpdmUtbW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWZvcm1hdCI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3NyY19zZXRfZm9ybWF0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIGRlZmF1bHQgZm9ybWF0IG9mIHRoZSBzb3VyY2UuIFRoaXMgd2lsbCBiZSB0aGUgZm9ybWF0IHVzZWQKLWZvciBzZW5kaW5nIFNFR01FTlQgZXZlbnRzIGFuZCBmb3IgcGVyZm9ybWluZyBzZWVrcy48L3A+Ci08cD5JZiBhIGZvcm1hdCBvZiBHU1RfRk9STUFUX0JZVEVTIGlzIHNldCwgdGhlIGVsZW1lbnQgd2lsbCBiZSBhYmxlIHRvCi1vcGVyYXRlIGluIHB1bGwgbW9kZSBpZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuaXMtc2Vla2FibGUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLmlzX3NlZWthYmxlKCk8L2NvZGU+PC9hPiByZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBjYWxsZWQgaW4gc3RhdGVzICZsdDsgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLVBBVVNFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BBVVNFRDwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtZm9ybWF0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJhc2Ugc291cmNlIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZvcm1hdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBmb3JtYXQgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1xdWVyeS1sYXRlbmN5Ij48L2E+PGgzPmdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+ICpsaXZlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gKm1heF9sYXRlbmN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJ5IHRoZSBzb3VyY2UgZm9yIHRoZSBsYXRlbmN5IHBhcmFtZXRlcnMuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5saXZlPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+Ci0gaXMKLWNvbmZpZ3VyZWQgYXMgYSBsaXZlIHNvdXJjZS4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1pbl9sYXRlbmN5PC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tYXhfbGF0ZW5jeTwvY29kZT48L2VtPgotIHdpbGwgYmUgc2V0Ci10byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBydW5uaW5nIHRpbWUgYW5kIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGZpcnN0Ci1idWZmZXIuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyBtb3N0bHkgdXNlZCBieSBzdWJjbGFzc2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1xdWVyeS1sYXRlbmN5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGl2ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBpZiB0aGUgc291cmNlIGlzIGxpdmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1pbl9sYXRlbmN5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBtaW4gbGF0ZW5jeSBvZiB0aGUgc291cmNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXhfbGF0ZW5jeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgbWF4IGxhdGVuY3kgb2YgdGhlIHNvdXJjZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1xdWVyeS1sYXRlbmN5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBxdWVyeSBzdWNjZWVkZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1nZXQtYmxvY2tzaXplIj48L2E+PGgzPmdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+Ci0gd2lsbCBwdXNoIG91dCB3aXRoIGVhY2ggYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1nZXQtYmxvY2tzaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc291cmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLWdldC1ibG9ja3NpemUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHB1c2hlZCB3aXRoIGVhY2ggYnVmZmVyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWJsb2Nrc2l6ZSI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gYmxvY2tzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIHdpbGwgcHVzaCBvdXQgd2l0aCBlYWNoIGJ1ZmZlci4gV2hlbgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJsb2Nrc2l6ZTwvY29kZT48L2VtPgotIGlzIHNldCB0byAtMSwgYSBkZWZhdWx0IGxlbmd0aCB3aWxsIGJlIHVzZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLXNldC1ibG9ja3NpemUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNvdXJjZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ibG9ja3NpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IGJsb2Nrc2l6ZSBpbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtZ2V0LWRvLXRpbWVzdGFtcCI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJ5IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zcmM8L2NvZGU+PC9lbT4KLSB0aW1lc3RhbXBzIG91dGdvaW5nIGJ1ZmZlcnMgYmFzZWQgb24gdGhlIGN1cnJlbnQgcnVubmluZ190aW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1nZXQtZG8tdGltZXN0YW1wLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc291cmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLWdldC1kby10aW1lc3RhbXAucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIGJhc2UgY2xhc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHRpbWVzdGFtcCBvdXRnb2luZyBidWZmZXJzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWRvLXRpbWVzdGFtcCI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbmZpZ3VyZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+Ci0gdG8gYXV0b21hdGljYWxseSB0aW1lc3RhbXAgb3V0Z29pbmcgYnVmZmVycyBiYXNlZCBvbiB0aGUKLWN1cnJlbnQgcnVubmluZ190aW1lIG9mIHRoZSBwaXBlbGluZS4gVGhpcyBwcm9wZXJ0eSBpcyBtb3N0bHkgdXNlZnVsIGZvciBsaXZlCi1zb3VyY2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtZG8tdGltZXN0YW1wLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZW5hYmxlIG9yIGRpc2FibGUgdGltZXN0YW1waW5nPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtZHluYW1pYy1zaXplIj48L2E+PGgzPmdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBkeW5hbWljPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPklmIG5vdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZHluYW1pYzwvY29kZT48L2VtPgotLCBzaXplIGlzIG9ubHkgdXBkYXRlZCB3aGVuIG5lZWRlZCwgc3VjaCBhcyB3aGVuIHRyeWluZyB0bwotcmVhZCBwYXN0IGN1cnJlbnQgdHJhY2tlZCBzaXplLiAgT3RoZXJ3aXNlLCBzaXplIGlzIGNoZWNrZWQgZm9yIHVwb24gZWFjaAotcmVhZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWR5bmFtaWMtc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5iYXNlIHNvdXJjZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5keW5hbWljPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmV3IGR5bmFtaWMgc2l6ZSBtb2RlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtYXV0b21hdGljLWVvcyI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gYXV0b21hdGljX2VvczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXV0b21hdGljX2VvczwvY29kZT48L2VtPgotIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotIHdpbGwgYXV0b21hdGljYWxseSBnbyBFT1MgaWYgYSBidWZmZXIKLWFmdGVyIHRoZSB0b3RhbCBzaXplIGlzIHJldHVybmVkLiBCeSBkZWZhdWx0IHRoaXMgaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGJ1dCBzb3VyY2VzCi10aGF0IGNhbid0IHJldHVybiBhbiBhdXRob3JpdGF0aXZlIHNpemUgYW5kIG9ubHkga25vdyB0aGF0IHRoZXkncmUgRU9TCi13aGVuIHRyeWluZyB0byByZWFkIG1vcmUgc2hvdWxkIHNldCB0aGlzIHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtYXV0b21hdGljLWVvcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5iYXNlIHNvdXJjZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hdXRvbWF0aWNfZW9zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YXV0b21hdGljIGVvczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtbmV3LXNlYW1sZXNzLXNlZ21lbnQiPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiBzdGFydDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gc3RvcDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QcmVwYXJlIGEgbmV3IHNlYW1sZXNzIHNlZ21lbnQgZm9yIGVtaXNzaW9uIGRvd25zdHJlYW0uIFRoaXMgZnVuY3Rpb24gbXVzdAotb25seSBiZSBjYWxsZWQgYnkgZGVyaXZlZCBzdWItY2xhc3NlcywgYW5kIG9ubHkgZnJvbSB0aGUgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5jcmVhdGUoKTwvY29kZT4gZnVuY3Rpb24sCi1hcyB0aGUgc3RyZWFtLWxvY2sgbmVlZHMgdG8gYmUgaGVsZC48L3A+Ci08cD5UaGUgZm9ybWF0IGZvciB0aGUgbmV3IHNlZ21lbnQgd2lsbCBiZSB0aGUgY3VycmVudCBmb3JtYXQgb2YgdGhlIHNvdXJjZSwgYXMKLWNvbmZpZ3VyZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZm9ybWF0IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KCk8L2NvZGU+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1uZXctc2VhbWxlc3Mtc2VnbWVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgc291cmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXJ0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5ldyBzdGFydCB2YWx1ZSBmb3IgdGhlIHNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RvcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlN0b3AgdmFsdWUgZm9yIHRoZSBuZXcgc2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5ldyB0aW1lIHZhbHVlIGZvciB0aGUgc3RhcnQgb2YgdGhlIG5ldyBzZWdtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtbmV3LXNlYW1sZXNzLXNlZ21lbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgcHJlcGFyYXRpb24gb2YgdGhlIHNlYW1sZXNzIHNlZ21lbnQgc3VjY2VlZGVkLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtc2V0LWNhcHMiPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX3NldF9jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYmFzZV9zcmNfc2V0X2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IG5ldyBjYXBzIG9uIHRoZSBiYXNlc3JjIHNvdXJjZSBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLXNldC1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtY2Fwcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY2FwcyBjb3VsZCBiZSBzZXQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLWdldC1hbGxvY2F0b3IiPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX2dldF9hbGxvY2F0b3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYmFzZV9zcmNfZ2V0X2FsbG9jYXRvciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICoqYWxsb2NhdG9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdGlvblBhcmFtczwvc3Bhbj48L2E+ICpwYXJhbXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+TGV0cyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiBzdWItY2xhc3NlcyB0byBrbm93IHRoZSBtZW1vcnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPgotCi11c2VkIGJ5IHRoZSBiYXNlIGNsYXNzIGFuZCBpdHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhcmFtczwvY29kZT48L2VtPgotLjwvcD4KLTxwPlVucmVmIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gYWZ0ZXIgdXNhZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLWdldC1hbGxvY2F0b3IucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbGxvY2F0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+Ci11c2VkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJhbXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlCi08YSBocmVmPSIuLi9odG1sL0dzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdGlvblBhcmFtczwvc3Bhbj48L2E+IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvY2F0b3I8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLWdldC1idWZmZXItcG9vbCI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfZ2V0X2J1ZmZlcl9wb29swqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+wqAqCi1nc3RfYmFzZV9zcmNfZ2V0X2J1ZmZlcl9wb29sICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtZ2V0LWJ1ZmZlci1wb29sLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2Utc3JjLWdldC1idWZmZXItcG9vbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBpbnN0YW5jZSBvZiB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXJQb29sLmh0bWwjR3N0QnVmZmVyUG9vbC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJQb29sPC9zcGFuPjwvYT4gdXNlZAotYnkgdGhlIHNyYzsgdW5yZWYgaXQgYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1pcy1hc3luYyI+PC9hPjxoMz5nc3RfYmFzZV9zcmNfaXNfYXN5bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3NyY19pc19hc3luYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+ICpzcmM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBjdXJyZW50IGFzeW5jIGJlaGF2aW91ciBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjPC9jb2RlPjwvZW0+Ci0uIFNlZSBhbHNvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1hc3luYyIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfYXN5bmPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3NyY19zZXRfYXN5bmMoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1pcy1hc3luYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YmFzZSBzb3VyY2UgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS1zcmMtaXMtYXN5bmMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotaXMgb3BlcmF0aW5nIGluIGFzeW5jIG1vZGUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtYXN5bmMiPjwvYT48aDM+Z3N0X2Jhc2Vfc3JjX3NldF9hc3luY8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3NyY19zZXRfYXN5bmMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiAqc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGFzeW5jPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbmZpZ3VyZSBhc3luYyBiZWhhdmlvdXIgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNyYzwvY29kZT48L2VtPgotLCBubyBzdGF0ZSBjaGFuZ2Ugd2lsbCBibG9jay4gVGhlIG9wZW4sCi1jbG9zZSwgc3RhcnQsIHN0b3AsIHBsYXkgYW5kIHBhdXNlIHZpcnR1YWwgbWV0aG9kcyB3aWxsIGJlIGV4ZWN1dGVkIGluIGEKLWRpZmZlcmVudCB0aHJlYWQgYW5kIGFyZSB0aHVzIGFsbG93ZWQgdG8gcGVyZm9ybSBibG9ja2luZyBvcGVyYXRpb25zLiBBbnkKLWJsb2NraW5nIG9wZXJhdGlvbiBzaG91bGQgYmUgdW5ibG9ja2VkIHdpdGggdGhlIHVubG9jayB2bWV0aG9kLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXNyYy1zZXQtYXN5bmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YmFzZSBzb3VyY2UgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXN5bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5uZXcgYXN5bmMgbW9kZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TUkMtUEFEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU1JDX1BBRCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1NSQ19QQUQob2JqKSAgICAgICAgICAgICAgICAgKEdTVF9CQVNFX1NSQ19DQVNUIChvYmopLSZndDtzcmNwYWQpCi08L3ByZT4KLTxwPkdpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJBU0UtU1JDLVBBRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YmFzZSBzb3VyY2UgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CQVNFLVNSQy1JUy1TVEFSVEVEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfU1JDX0lTX1NUQVJURUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9TUkNfSVNfU1RBUlRFRChvYmopICBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUICgob2JqKSwgR1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRFRCkKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1TUkMtSVMtU1RBUlRJTkc6Q0FQUyI+PC9hPjxoMz5HU1RfQkFTRV9TUkNfSVNfU1RBUlRJTkcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9TUkNfSVNfU1RBUlRJTkcob2JqKSBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUICgob2JqKSwgR1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRJTkcpCi08L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QmFzZVNyYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEJhc2VTcmM7PC9wcmU+Ci08cD5UaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RCYXNlU3JjQ2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RCYXNlU3JjQ2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLwotCi0gIC8qIGdldCBjYXBzIGZyb20gc3ViY2xhc3MgKi8KLSAgR3N0Q2FwcyogICAgICAoKmdldF9jYXBzKSAgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0Q2FwcyAqZmlsdGVyKTsKLSAgLyogZGVjaWRlIG9uIGNhcHMgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKm5lZ290aWF0ZSkgICAgKEdzdEJhc2VTcmMgKnNyYyk7Ci0gIC8qIGNhbGxlZCBpZiwgaW4gbmVnb3RpYXRpb24sIGNhcHMgbmVlZCBmaXhhdGluZyAqLwotICBHc3RDYXBzICogICAgICgqZml4YXRlKSAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RDYXBzICpjYXBzKTsKLSAgLyogbm90aWZ5IHRoZSBzdWJjbGFzcyBvZiBuZXcgY2FwcyAqLwotICBnYm9vbGVhbiAgICAgICgqc2V0X2NhcHMpICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RDYXBzICpjYXBzKTsKLQotICAvKiBzZXR1cCBhbGxvY2F0aW9uIHF1ZXJ5ICovCi0gIGdib29sZWFuICAgICAgKCpkZWNpZGVfYWxsb2NhdGlvbikgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RRdWVyeSAqcXVlcnkpOwotCi0gIC8qIHN0YXJ0IGFuZCBzdG9wIHByb2Nlc3NpbmcsIGlkZWFsIGZvciBvcGVuaW5nL2Nsb3NpbmcgdGhlIHJlc291cmNlICovCi0gIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgIChHc3RCYXNlU3JjICpzcmMpOwotICBnYm9vbGVhbiAgICAgICgqc3RvcCkgICAgICAgICAoR3N0QmFzZVNyYyAqc3JjKTsKLQotICAvKiBnaXZlbiBhIGJ1ZmZlciwgcmV0dXJuIHN0YXJ0IGFuZCBzdG9wIHRpbWUgd2hlbiBpdCBzaG91bGQgYmUgcHVzaGVkCi0gICAqIG91dC4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBzeW5jIG9uIHRoZSBjbG9jayB1c2luZyB0aGVzZSB0aW1lcy4gKi8KLSAgdm9pZCAgICAgICAgICAoKmdldF90aW1lcykgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0QnVmZmVyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnN0YXJ0LCBHc3RDbG9ja1RpbWUgKmVuZCk7Ci0KLSAgLyogZ2V0IHRoZSB0b3RhbCBzaXplIG9mIHRoZSByZXNvdXJjZSBpbiB0aGUgZm9ybWF0IHNldCBieQotICAgKiBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCgpICovCi0gIGdib29sZWFuICAgICAgKCpnZXRfc2l6ZSkgICAgIChHc3RCYXNlU3JjICpzcmMsIGd1aW50NjQgKnNpemUpOwotCi0gIC8qIGNoZWNrIGlmIHRoZSByZXNvdXJjZSBpcyBzZWVrYWJsZSAqLwotICBnYm9vbGVhbiAgICAgICgqaXNfc2Vla2FibGUpICAoR3N0QmFzZVNyYyAqc3JjKTsKLQotICAvKiBQcmVwYXJlIHRoZSBzZWdtZW50IG9uIHdoaWNoIHRvIHBlcmZvcm0gZG9fc2VlaygpLCBjb252ZXJ0aW5nIHRvIHRoZQotICAgKiBjdXJyZW50IGJhc2VzcmMgZm9ybWF0LiAqLwotICBnYm9vbGVhbiAgICAgICgqcHJlcGFyZV9zZWVrX3NlZ21lbnQpIChHc3RCYXNlU3JjICpzcmMsIEdzdEV2ZW50ICpzZWVrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTZWdtZW50ICpzZWdtZW50KTsKLSAgLyogbm90aWZ5IHN1YmNsYXNzZXMgb2YgYSBzZWVrICovCi0gIGdib29sZWFuICAgICAgKCpkb19zZWVrKSAgICAgIChHc3RCYXNlU3JjICpzcmMsIEdzdFNlZ21lbnQgKnNlZ21lbnQpOwotCi0gIC8qIHVubG9jayBhbnkgcGVuZGluZyBhY2Nlc3MgdG8gdGhlIHJlc291cmNlLiBzdWJjbGFzc2VzIHNob3VsZCB1bmxvY2sKLSAgICogYW55IGZ1bmN0aW9uIEFTQVAuICovCi0gIGdib29sZWFuICAgICAgKCp1bmxvY2spICAgICAgIChHc3RCYXNlU3JjICpzcmMpOwotICAvKiBDbGVhciBhbnkgcGVuZGluZyB1bmxvY2sgcmVxdWVzdCwgYXMgd2Ugc3VjY2VlZGVkIGluIHVubG9ja2luZyAqLwotICBnYm9vbGVhbiAgICAgICgqdW5sb2NrX3N0b3ApICAoR3N0QmFzZVNyYyAqc3JjKTsKLQotICAvKiBub3RpZnkgc3ViY2xhc3NlcyBvZiBhIHF1ZXJ5ICovCi0gIGdib29sZWFuICAgICAgKCpxdWVyeSkgICAgICAgIChHc3RCYXNlU3JjICpzcmMsIEdzdFF1ZXJ5ICpxdWVyeSk7Ci0KLSAgLyogbm90aWZ5IHN1YmNsYXNzZXMgb2YgYW4gZXZlbnQgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKmV2ZW50KSAgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0RXZlbnQgKmV2ZW50KTsKLQotICAvKiBhc2sgdGhlIHN1YmNsYXNzIHRvIGNyZWF0ZSBhIGJ1ZmZlciB3aXRoIG9mZnNldCBhbmQgc2l6ZSwgdGhlIGRlZmF1bHQKLSAgICogaW1wbGVtZW50YXRpb24gd2lsbCBjYWxsIGFsbG9jIGFuZCBmaWxsLiAqLwotICBHc3RGbG93UmV0dXJuICgqY3JlYXRlKSAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqKmJ1Zik7Ci0gIC8qIGFzayB0aGUgc3ViY2xhc3MgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlci4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAgICogd2lsbCB1c2UgdGhlIG5lZ290aWF0ZWQgYWxsb2NhdG9yLiAqLwotICBHc3RGbG93UmV0dXJuICgqYWxsb2MpICAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqKmJ1Zik7Ci0gIC8qIGFzayB0aGUgc3ViY2xhc3MgdG8gZmlsbCB0aGUgYnVmZmVyIHdpdGggZGF0YSBmcm9tIG9mZnNldCBhbmQgc2l6ZSAqLwotICBHc3RGbG93UmV0dXJuICgqZmlsbCkgICAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqYnVmKTsKLX07Ci08L3ByZT4KLTxwPlN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUgYXZhaWxhYmxlIHZpcnR1YWwgbWV0aG9kcyBvciBub3QsIGFzCi1uZWVkZWQuIEF0IHRoZSBtaW5pbXVtLCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNyZWF0ZTwvY29kZT48L2VtPgotIG1ldGhvZCBzaG91bGQgYmUgb3ZlcnJpZGRlbiB0byBwcm9kdWNlCi1idWZmZXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmdldC1jYXBzIj48L2E+Z2V0X2NhcHM8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkNhbGxlZCB0byBnZXQgdGhlIGNhcHMgdG8gcmVwb3J0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLm5lZ290aWF0ZSI+PC9hPm5lZ290aWF0ZTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+TmVnb3RpYXRlZCB0aGUgY2FwcyB3aXRoIHRoZSBwZWVyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5maXhhdGUiPjwvYT5maXhhdGU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkNhbGxlZCBkdXJpbmcgbmVnb3RpYXRpb24gaWYgY2FwcyBuZWVkIGZpeGF0aW5nLiBJbXBsZW1lbnQgaW5zdGVhZCBvZgotc2V0dGluZyBhIGZpeGF0ZSBmdW5jdGlvbiBvbiB0aGUgc291cmNlIHBhZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU3JjQ2xhc3Muc2V0LWNhcHMiPjwvYT5zZXRfY2FwczwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+Tm90aWZ5IHN1YmNsYXNzIG9mIGNoYW5nZWQgb3V0cHV0IGNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MuZGVjaWRlLWFsbG9jYXRpb24iPjwvYT5kZWNpZGVfYWxsb2NhdGlvbjwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+Y29uZmlndXJlIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnN0YXJ0Ij48L2E+c3RhcnQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlN0YXJ0IHByb2Nlc3NpbmcuIFN1YmNsYXNzZXMgc2hvdWxkIG9wZW4gcmVzb3VyY2VzIGFuZCBwcmVwYXJlCi10byBwcm9kdWNlIGRhdGEuIEltcGxlbWVudGF0aW9uIHNob3VsZCBjYWxsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXN0YXJ0LWNvbXBsZXRlIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBsZXRlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGUoKTwvY29kZT48L2E+Ci13aGVuIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLCBlaXRoZXIgZnJvbSB0aGUgY3VycmVudCB0aHJlYWQgb3IgYW55IG90aGVyCi10aHJlYWQgdGhhdCBmaW5pc2hlcyB0aGUgc3RhcnQgb3BlcmF0aW9uIGFzeW5jaHJvbm91c2x5LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5zdG9wIj48L2E+c3RvcDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+U3RvcCBwcm9jZXNzaW5nLiBTdWJjbGFzc2VzIHNob3VsZCB1c2UgdGhpcyB0byBjbG9zZSByZXNvdXJjZXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmdldC10aW1lcyI+PC9hPmdldF90aW1lczwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+R2l2ZW4gYSBidWZmZXIsIHJldHVybiB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZSB3aGVuIGl0Ci1zaG91bGQgYmUgcHVzaGVkIG91dC4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBzeW5jIG9uIHRoZSBjbG9jayB1c2luZwotdGhlc2UgdGltZXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmdldC1zaXplIj48L2E+Z2V0X3NpemU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlJldHVybiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcmVzb3VyY2UsIGluIHRoZSBmb3JtYXQgc2V0IGJ5Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZm9ybWF0IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KCk8L2NvZGU+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MuaXMtc2Vla2FibGUiPjwvYT5pc19zZWVrYWJsZTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+Q2hlY2sgaWYgdGhlIHNvdXJjZSBjYW4gc2VlazwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5wcmVwYXJlLXNlZWstc2VnbWVudCI+PC9hPnByZXBhcmVfc2Vla19zZWdtZW50PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5QcmVwYXJlIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZG8tc2VlayI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuZG9fc2VlaygpPC9jb2RlPjwvYT4gdm1ldGhvZCBmb3IgZXhlY3V0aW5nIGEgc2VlawotcmVxdWVzdC4gU3ViLWNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgaWYgdGhleSBzdXBwb3J0IHNlZWtpbmcgaW4KLWZvcm1hdHMgb3RoZXIgdGhhbiB0aGUgY29uZmlndXJlZCBuYXRpdmUgZm9ybWF0LiBCeSBkZWZhdWx0LCBpdCB0cmllcyB0bwotY29udmVydCB0aGUgc2VlayBhcmd1bWVudHMgdG8gdGhlIGNvbmZpZ3VyZWQgbmF0aXZlIGZvcm1hdCBhbmQgcHJlcGFyZSBhCi1zZWdtZW50IGluIHRoYXQgZm9ybWF0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5kby1zZWVrIj48L2E+ZG9fc2VlazwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+UGVyZm9ybSBzZWVraW5nIG9uIHRoZSByZXNvdXJjZSB0byB0aGUgaW5kaWNhdGVkIHNlZ21lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnVubG9jayI+PC9hPnVubG9jazwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+VW5sb2NrIGFueSBwZW5kaW5nIGFjY2VzcyB0byB0aGUgcmVzb3VyY2UuIFN1YmNsYXNzZXMgc2hvdWxkIHVuYmxvY2sKLWFueSBibG9ja2VkIGZ1bmN0aW9uIEFTQVAuIEluIHBhcnRpY3VsYXIsIGFueSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmNyZWF0ZSgpPC9jb2RlPiBmdW5jdGlvbiBpbgotcHJvZ3Jlc3Mgc2hvdWxkIGJlIHVuYmxvY2tlZCBhbmQgc2hvdWxkIHJldHVybiBHU1RfRkxPV19GTFVTSElORy4gQW55Ci1mdXR1cmUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuY3JlYXRlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPkdzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKTwvY29kZT48L2E+IGZ1bmN0aW9uIGNhbGwgc2hvdWxkIGFsc28gcmV0dXJuCi1HU1RfRkxPV19GTFVTSElORyB1bnRpbCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MudW5sb2NrLXN0b3AiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+R3N0QmFzZVNyY0NsYXNzLnVubG9ja19zdG9wKCk8L2NvZGU+PC9hPiBmdW5jdGlvbiBoYXMKLWJlZW4gY2FsbGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy51bmxvY2stc3RvcCI+PC9hPnVubG9ja19zdG9wPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5DbGVhciB0aGUgcHJldmlvdXMgdW5sb2NrIHJlcXVlc3QuIFN1YmNsYXNzZXMgc2hvdWxkIGNsZWFyIGFueQotc3RhdGUgdGhleSBzZXQgZHVyaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLnVubG9jayI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MudW5sb2NrKCk8L2NvZGU+PC9hPiwgc3VjaCBhcyBjbGVhcmluZyBjb21tYW5kCi1xdWV1ZXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnF1ZXJ5Ij48L2E+cXVlcnk8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkhhbmRsZSBhIHJlcXVlc3RlZCBxdWVyeS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MuZXZlbnQiPjwvYT5ldmVudDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3ZlcnJpZGUgdGhpcyB0byBpbXBsZW1lbnQgY3VzdG9tIGV2ZW50IGhhbmRsaW5nLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5jcmVhdGUiPjwvYT5jcmVhdGU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkFzayB0aGUgc3ViY2xhc3MgdG8gY3JlYXRlIGEgYnVmZmVyIHdpdGggb2Zmc2V0IGFuZCBzaXplLiAgV2hlbiB0aGUKLXN1YmNsYXNzIHJldHVybnMgR1NUX0ZMT1dfT0ssIGl0IE1VU1QgcmV0dXJuIGEgYnVmZmVyIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZQotdW5sZXNzIGZld2VyIGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVjYXVzZSBhbiBFT1MgY29uZGl0aW9uIGlzIG5lYXIuIE5vCi1idWZmZXIgc2hvdWxkIGJlIHJldHVybmVkIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbQotR1NUX0ZMT1dfT0suIEEgcmV0dXJuIHZhbHVlIG9mIEdTVF9GTE9XX0VPUyBzaWduaWZpZXMgdGhhdCB0aGUgZW5kIG9mCi1zdHJlYW0gaXMgcmVhY2hlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBjYWxsCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5hbGxvYyI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuYWxsb2MoKTwvY29kZT48L2E+IGFuZCB0aGVuIGNhbGwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZmlsbCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5Hc3RCYXNlU3JjQ2xhc3MuZmlsbCgpPC9jb2RlPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmFsbG9jIj48L2E+YWxsb2M8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkFzayB0aGUgc3ViY2xhc3MgdG8gYWxsb2NhdGUgYSBidWZmZXIgd2l0aCBmb3Igb2Zmc2V0IGFuZCBzaXplLiBUaGUKLWRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBjcmVhdGUgYSBuZXcgYnVmZmVyIGZyb20gdGhlIG5lZ290aWF0ZWQgYWxsb2NhdG9yLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5maWxsIj48L2E+ZmlsbDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+QXNrIHRoZSBzdWJjbGFzcyB0byBmaWxsIHRoZSBidWZmZXIgd2l0aCBkYXRhIGZvciBvZmZzZXQgYW5kIHNpemUuIFRoZQotcGFzc2VkIGJ1ZmZlciBpcyBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgYnl0ZXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjRmxhZ3MiPjwvYT48aDM+ZW51bSBHc3RCYXNlU3JjRmxhZ3M8L2gzPgotPHA+VGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGZsYWdzIHRoYXQgYSBiYXNlc3JjIGVsZW1lbnQgbWF5IGhhdmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QmFzZVNyY0ZsYWdzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJBU0UtU1JDLUZMQUctU1RBUlRJTkc6Q0FQUyI+PC9hPkdTVF9CQVNFX1NSQ19GTEFHX1NUQVJUSU5HPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmhhcyBzb3VyY2UgaXMgc3RhcnRpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUJBU0UtU1JDLUZMQUctU1RBUlRFRDpDQVBTIj48L2E+R1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5oYXMgc291cmNlIGJlZW4gc3RhcnRlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQkFTRS1TUkMtRkxBRy1MQVNUOkNBUFMiPjwvYT5HU1RfQkFTRV9TUkNfRkxBR19MQVNUPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPm9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFnczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjLS1ibG9ja3NpemUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxibG9ja3NpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJsb2Nrc2l6ZeKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2l6ZSBpbiBieXRlcyB0byByZWFkIHBlciBidWZmZXIgKC0xID0gZGVmYXVsdCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDQwOTY8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJhc2VTcmMtLWRvLXRpbWVzdGFtcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRvLXRpbWVzdGFtcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZG8tdGltZXN0YW1w4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BcHBseSBjdXJyZW50IHN0cmVhbSB0aW1lIHRvIGJ1ZmZlcnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjLS1udW0tYnVmZmVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG51bS1idWZmZXJz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxudW0tYnVmZmVyc+KAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgYnVmZmVycyB0byBvdXRwdXQgYmVmb3JlIHNlbmRpbmcgRU9TICgtMSA9IHVubGltaXRlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAtMTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlU3JjLS10eXBlZmluZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHR5cGVmaW5k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0eXBlZmluZOKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlJ1biB0eXBlZmluZCBiZWZvcmUgbmVnb3RpYXRpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VTcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCIgdGl0bGU9IkdzdFB1c2hTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQdXNoU3JjPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNpbms8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvR3N0QmFzZVRyYW5zZm9ybS5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0QmFzZVRyYW5zZm9ybS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzk0ZGJkLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMTEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdEJhc2VUcmFuc2Zvcm06IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RQdXNoU3JjLmh0bWwiIHRpdGxlPSJHc3RQdXNoU3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VUcmFuc2Zvcm0uZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEJhc2VUcmFuc2Zvcm0ub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0QmFzZVRyYW5zZm9ybS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RCYXNlU2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UHVzaFNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtLnRvcF9vZl9wYWdlIj48L2E+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2gyPgotPHA+R3N0QmFzZVRyYW5zZm9ybSDigJQgQmFzZSBjbGFzcyBmb3Igc2ltcGxlIHRyYW5zZm9ybSBmaWx0ZXJzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0uZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXBhc3N0aHJvdWdoIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdowqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcGFzc3Rocm91Z2giIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdowqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXByZWZlci1wYXNzdGhyb3VnaCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJlZmVyX3Bhc3N0aHJvdWdowqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcmVmZXJfcGFzc3Rocm91Z2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0taXMtaW4tcGxhY2UiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1faXNfaW5fcGxhY2XCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1faXNfaW5fcGxhY2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5fcGxhY2XCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXFvcy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkwqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcW9zLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkwqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXFvcyIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zwqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1nYXAtYXdhcmUiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZcKgKCkiPmdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1nZXQtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9hbGxvY2F0b3LCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X2FsbG9jYXRvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1nZXQtYnVmZmVyLXBvb2wiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X2J1ZmZlcl9wb29swqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9idWZmZXJfcG9vbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tcmVjb25maWd1cmUtc2luayIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rwqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3Npbms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXJlY29uZmlndXJlLXNyYyIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zcmPCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc3JjPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXVwZGF0ZS1zcmMtY2FwcyIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfc3JjX2NhcHPCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3NyY19jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TSU5LLVBBRDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEKCkiPkdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX1BBRDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEKCkiPkdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0ucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tLXFvcyIgdGl0bGU9IlRoZSDigJxxb3PigJ0gcHJvcGVydHkiPnFvczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIj5Hc3RCYXNlVHJhbnNmb3JtQ2xhc3M8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tU0lOSy1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FIj5HU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1OQU1FOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX05BTUUiPkdTVF9CQVNFX1RSQU5TRk9STV9TUkNfTkFNRTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1GTE9XLURST1BQRUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQiPkdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RCYXNlVHJhbnNmb3JtCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgYmFzZSBjbGFzcyBpcyBmb3IgZmlsdGVyIGVsZW1lbnRzIHRoYXQgcHJvY2VzcyBkYXRhLiBFbGVtZW50cwotdGhhdCBhcmUgc3VpdGFibGUgZm9yIGltcGxlbWVudGF0aW9uIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+IGFyZSBvbmVzCi13aGVyZSB0aGUgc2l6ZSBhbmQgY2FwcyBvZiB0aGUgb3V0cHV0IGlzIGtub3duIGVudGlyZWx5IGZyb20gdGhlIGlucHV0Ci1jYXBzIGFuZCBidWZmZXIgc2l6ZXMuIFRoZXNlIGluY2x1ZGUgZWxlbWVudHMgdGhhdCBkaXJlY3RseSB0cmFuc2Zvcm0KLW9uZSBidWZmZXIgaW50byBhbm90aGVyLCBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIGEgYnVmZmVyIGluLXBsYWNlLCBhcwotd2VsbCBhcyBlbGVtZW50cyB0aGF0IGNvbGxhdGUgbXVsdGlwbGUgaW5wdXQgYnVmZmVycyBpbnRvIG9uZSBvdXRwdXQgYnVmZmVyLAotb3IgdGhhdCBleHBhbmQgb25lIGlucHV0IGJ1ZmZlciBpbnRvIG11bHRpcGxlIG91dHB1dCBidWZmZXJzLiBTZWUgYmVsb3cKLWZvciBtb3JlIGNvbmNyZXRlIHVzZSBjYXNlcy48L3A+Ci08cD5JdCBwcm92aWRlcyBmb3I6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPm9uZSBzaW5rcGFkIGFuZCBvbmUgc3JjcGFkPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgUG9zc2libGUgZm9ybWF0cyBvbiBzaW5rIGFuZCBzb3VyY2UgcGFkIGltcGxlbWVudGVkCi0gICAgIHdpdGggY3VzdG9tIHRyYW5zZm9ybV9jYXBzIGZ1bmN0aW9uLiBCeSBkZWZhdWx0IHVzZXMKLSAgICAgc2FtZSBmb3JtYXQgb24gc2luayBhbmQgc291cmNlLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPkhhbmRsZXMgc3RhdGUgY2hhbmdlczwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+RG9lcyBmbHVzaGluZzwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+UHVzaCBtb2RlPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgIFB1bGwgbW9kZSBpZiB0aGUgc3ViLWNsYXNzIHRyYW5zZm9ybSBjYW4gb3BlcmF0ZSBvbiBhcmJpdHJhcnkgZGF0YQotICAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQuNi44LjUiPjwvYT48aDM+VXNlIENhc2VzPC9oMz4KLTxwPgotPC9wPgotPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgotPHAgY2xhc3M9InRpdGxlIj48Yj5QYXNzdGhyb3VnaCBtb2RlPC9iPjwvcD4KLTx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgRWxlbWVudCBoYXMgbm8gaW50ZXJlc3QgaW4gbW9kaWZ5aW5nIHRoZSBidWZmZXIuIEl0IG1heSB3YW50IHRvIGluc3BlY3QgaXQsCi0gICAgaW4gd2hpY2ggY2FzZSB0aGUgZWxlbWVudCBzaG91bGQgaGF2ZSBhIHRyYW5zZm9ybV9pcCBmdW5jdGlvbi4gSWYgdGhlcmUKLSAgICBpcyBubyB0cmFuc2Zvcm1faXAgZnVuY3Rpb24gaW4gcGFzc3Rocm91Z2ggbW9kZSwgdGhlIGJ1ZmZlciBpcyBwdXNoZWQKLSAgICBpbnRhY3QuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnBhc3N0aHJvdWdoLW9uLXNhbWUtY2FwcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHM8L3NwYW4+PC9hPiB2YXJpYWJsZQotICAgIHdpbGwgYXV0b21hdGljYWxseSBzZXQvdW5zZXQgcGFzc3Rocm91Z2ggYmFzZWQgb24gd2hldGhlciB0aGUKLSAgICBlbGVtZW50IG5lZ290aWF0ZXMgdGhlIHNhbWUgY2FwcyBvbiBib3RoIHBhZHMuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MucGFzc3Rocm91Z2gtb24tc2FtZS1jYXBzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybUNsYXNzLnBhc3N0aHJvdWdoX29uX3NhbWVfY2Fwczwvc3Bhbj48L2E+IG9uIGFuIGVsZW1lbnQgdGhhdAotICAgIGRvZXNuJ3QgaW1wbGVtZW50IGEgdHJhbnNmb3JtX2NhcHMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBlbGVtZW50cyB0aGF0Ci0gICAgb25seSBpbnNwZWN0IGRhdGEgKHN1Y2ggYXMgbGV2ZWwpCi0gIDwvcD48L2xpPgotPC91bD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZSBlbGVtZW50czwvYj48L3A+Ci08dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPkxldmVsPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPlZpZGVvc2NhbGUsIGF1ZGlvY29udmVydCwgdmlkZW9jb252ZXJ0LCBhdWRpb3Jlc2FtcGxlIGluCi0gICAgY2VydGFpbiBtb2Rlcy48L2xpPgotPC91bD4KLTwvZGl2PgotPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+TW9kaWZpY2F0aW9ucyBpbi1wbGFjZSAtIGlucHV0IGJ1ZmZlciBhbmQgb3V0cHV0IGJ1ZmZlciBhcmUgdGhlCi0gICAgc2FtZSB0aGluZy48L2I+PC9wPgotPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBUaGUgZWxlbWVudCBtdXN0IGltcGxlbWVudCBhIHRyYW5zZm9ybV9pcCBmdW5jdGlvbi4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBPdXRwdXQgYnVmZmVyIHNpemUgbXVzdCAmbHQ7PSBpbnB1dCBidWZmZXIgc2l6ZQotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIElmIHRoZSBhbHdheXNfaW5fcGxhY2UgZmxhZyBpcyBzZXQsIG5vbi13cml0YWJsZSBidWZmZXJzIHdpbGwgYmUgY29waWVkCi0gICAgYW5kIHBhc3NlZCB0byB0aGUgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLCBvdGhlcndpc2UgYSBuZXcgYnVmZmVyIHdpbGwgYmUKLSAgICBjcmVhdGVkIGFuZCB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGNhbGxlZC4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBJbmNvbWluZyB3cml0YWJsZSBidWZmZXJzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm1faXAgZnVuY3Rpb24KLSAgICBpbW1lZGlhdGVseS4gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgb25seSBpbXBsZW1lbnRpbmcgdHJhbnNmb3JtX2lwIGFuZCBub3QgdHJhbnNmb3JtIGltcGxpZXMgYWx3YXlzX2luX3BsYWNlCi0gICAgPSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4KLSAgPC9wPjwvbGk+Ci08L3VsPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgotPHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlIGVsZW1lbnRzPC9iPjwvcD4KLTx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Vm9sdW1lPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPkF1ZGlvY29udmVydCBpbiBjZXJ0YWluIG1vZGVzIChzaWduZWQvdW5zaWduZWQKLSAgICBjb252ZXJzaW9uKTwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj52aWRlb2NvbnZlcnQgaW4gY2VydGFpbiBtb2RlcyAoZW5kaWFubmVzcwotICAgIHN3YXBwaW5nKTwvbGk+Ci08L3VsPgotPC9kaXY+Ci08L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgotPHAgY2xhc3M9InRpdGxlIj48Yj5Nb2RpZmljYXRpb25zIG9ubHkgdG8gdGhlIGNhcHMvbWV0YWRhdGEgb2YgYSBidWZmZXI8L2I+PC9wPgotPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBUaGUgZWxlbWVudCBkb2VzIG5vdCByZXF1aXJlIHdyaXRhYmxlIGRhdGEsIGJ1dCBub24td3JpdGFibGUgYnVmZmVycwotICAgIHNob3VsZCBiZSBzdWJidWZmZXJlZCBzbyB0aGF0IHRoZSBtZXRhLWluZm9ybWF0aW9uIGNhbiBiZSByZXBsYWNlZC4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBFbGVtZW50cyB3aXNoaW5nIHRvIG9wZXJhdGUgaW4gdGhpcyBtb2RlIHNob3VsZCByZXBsYWNlIHRoZQotICAgIHByZXBhcmVfb3V0cHV0X2J1ZmZlciBtZXRob2QgdG8gY3JlYXRlIHN1YmJ1ZmZlcnMgb2YgdGhlIGlucHV0IGJ1ZmZlcgotICAgIGFuZCBzZXQgYWx3YXlzX2luX3BsYWNlIHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPgotICA8L3A+PC9saT4KLTwvdWw+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Ci08cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGUgZWxlbWVudHM8L2I+PC9wPgotPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj5DYXBzZmlsdGVyIHdoZW4gc2V0dGluZyBjYXBzIG9uIG91dGdvaW5nIGJ1ZmZlcnMgdGhhdCBoYXZlCi0gICAgbm9uZS48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+aWRlbnRpdHkgd2hlbiBpdCBpcyBnb2luZyB0byByZS10aW1lc3RhbXAgYnVmZmVycyBieQotICAgIGRhdGFyYXRlLjwvbGk+Ci08L3VsPgotPC9kaXY+Ci08L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgotPHAgY2xhc3M9InRpdGxlIj48Yj5Ob3JtYWwgbW9kZTwvYj48L3A+Ci08dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIGFsd2F5c19pbl9wbGFjZSBmbGFnIGlzIG5vdCBzZXQsIG9yIHRoZXJlIGlzIG5vIHRyYW5zZm9ybV9pcCBmdW5jdGlvbgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIEVsZW1lbnQgd2lsbCByZWNlaXZlIGFuIGlucHV0IGJ1ZmZlciBhbmQgb3V0cHV0IGJ1ZmZlciB0byBvcGVyYXRlIG9uLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIE91dHB1dCBidWZmZXIgaXMgYWxsb2NhdGVkIGJ5IGNhbGxpbmcgdGhlIHByZXBhcmVfb3V0cHV0X2J1ZmZlciBmdW5jdGlvbi4KLSAgPC9wPjwvbGk+Ci08L3VsPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgotPHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlIGVsZW1lbnRzPC9iPjwvcD4KLTx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPlZpZGVvc2NhbGUsIHZpZGVvY29udmVydCwgYXVkaW9jb252ZXJ0IHdoZW4gZG9pbmcKLSAgICBzY2FsaW5nL2NvbnZlcnNpb25zPC9saT48L3VsPgotPC9kaXY+Ci08L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgotPHAgY2xhc3M9InRpdGxlIj48Yj5TcGVjaWFsIG91dHB1dCBidWZmZXIgYWxsb2NhdGlvbnM8L2I+PC9wPgotPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgRWxlbWVudHMgd2hpY2ggbmVlZCB0byBkbyBzcGVjaWFsIGFsbG9jYXRpb24gb2YgdGhlaXIgb3V0cHV0IGJ1ZmZlcnMKLSAgICBiZXlvbmQgYWxsb2NhdGluZyBvdXRwdXQgYnVmZmVycyB2aWEgdGhlIG5lZ290aWF0ZWQgYWxsb2NhdG9yIG9yCi0gICAgYnVmZmVyIHBvb2wgc2hvdWxkIGltcGxlbWVudCB0aGUgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIG1ldGhvZC4KLSAgPC9wPjwvbGk+PC91bD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZSBlbGVtZW50czwvYj48L3A+Ci08dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj48bGkgY2xhc3M9Imxpc3RpdGVtIj5lZmVuY2U8L2xpPjwvdWw+Ci08L2Rpdj4KLTwvbGk+Ci08L29sPjwvZGl2PgotPHA+Ci08L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40LjYuOC42Ij48L2E+PGgzPlN1Yi1jbGFzcyBzZXR0YWJsZSBmbGFncyBvbiBHc3RCYXNlVHJhbnNmb3JtPC9oMz4KLTxwPgotPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotPHA+Ci0gIDwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Ci08cCBjbGFzcz0idGl0bGUiPjxiPnBhc3N0aHJvdWdoPC9iPjwvcD4KLTx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgIEltcGxpZXMgdGhhdCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCB0aGUgc3ViLWNsYXNzIGlzIG5vdAotICAgICAgaW50ZXJlc3RlZCBpbiBtb2RpZnlpbmcgdGhlIGJ1ZmZlcnMuCi0gICAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgIEVsZW1lbnRzIHdoaWNoIGFyZSBhbHdheXMgaW4gcGFzc3Rocm91Z2ggbW9kZSB3aGVuZXZlciB0aGUgc2FtZSBjYXBzCi0gICAgICBoYXMgYmVlbiBuZWdvdGlhdGVkIG9uIGJvdGggcGFkcyBjYW4gc2V0IHRoZSBjbGFzcyB2YXJpYWJsZQotICAgICAgcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzIHRvIGhhdmUgdGhpcyBiZWhhdmlvdXIgYXV0b21hdGljYWxseS4KLSAgICA8L3A+PC9saT4KLTwvdWw+Ci08L2Rpdj4KLTxwPgotPC9wPgotPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotPHA+Ci0gIDwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Ci08cCBjbGFzcz0idGl0bGUiPjxiPmFsd2F5c19pbl9wbGFjZTwvYj48L3A+Ci08dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgYSBub24td3JpdGFibGUgYnVmZmVyIHdpbGwgYmUgY29waWVkIGJlZm9yZSBwYXNzaW5nCi0gICAgICB0byB0aGUgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLgotICAgIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gICAgICBJbXBsaWVkIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBubyB0cmFuc2Zvcm0gZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuCi0gICAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICAgIEltcGxpZWQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gaWYgT05MWSB0cmFuc2Zvcm0gZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuCi0gICAgPC9wPjwvbGk+Ci08L3VsPgotPC9kaXY+Ci08cD4KLTwvcD4KLTwvbGk+Ci08L3VsPjwvZGl2PgotPHA+Ci08L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXBhc3N0aHJvdWdoIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNlZSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT4KLSBpcyBjb25maWd1cmVkIGFzIGEgcGFzc3Rocm91Z2ggdHJhbnNmb3JtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS1pcy1wYXNzdGhyb3VnaC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0taXMtcGFzc3Rocm91Z2gucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaXMgdGhlIHRyYW5zZm9ybSBpcyBjb25maWd1cmVkIGluIHBhc3N0aHJvdWdoIG1vZGUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1wYXNzdGhyb3VnaCI+PC9hPjxoMz5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+ICp0cmFuczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBwYXNzdGhyb3VnaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgcGFzc3Rocm91Z2ggbW9kZSBmb3IgdGhpcyBmaWx0ZXIgYnkgZGVmYXVsdC4gVGhpcyBpcyBtb3N0bHkKLXVzZWZ1bCBmb3IgZmlsdGVycyB0aGF0IGRvIG5vdCBjYXJlIGFib3V0IG5lZ290aWF0aW9uLjwvcD4KLTxwPkFsd2F5cyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gZm9yIGZpbHRlcnMgd2hpY2ggZG9uJ3QgaW1wbGVtZW50IGVpdGhlciBhIHRyYW5zZm9ybQotb3IgdHJhbnNmb3JtX2lwIG1ldGhvZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcGFzc3Rocm91Z2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gdG8gc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhc3N0aHJvdWdoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Ym9vbGVhbiBpbmRpY2F0aW5nIHBhc3N0aHJvdWdoIG1vZGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcHJlZmVyLXBhc3N0aHJvdWdoIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJlZmVyX3Bhc3N0aHJvdWdowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcmVmZXJfcGFzc3Rocm91Z2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+ICp0cmFuczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHByZWZlcl9wYXNzdGhyb3VnaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJlZmVyX3Bhc3N0aHJvdWdoPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+ICh0aGUgZGVmYXVsdCksIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPgotIHdpbGwgY2hlY2sgYW5kCi1wcmVmZXIgcGFzc3Rocm91Z2ggY2FwcyBmcm9tIHRoZSBsaXN0IG9mIGNhcHMgcmV0dXJuZWQgYnkgdGhlCi10cmFuc2Zvcm1fY2FwcyB2bWV0aG9kLjwvcD4KLTxwPklmIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiwgdGhlIGVsZW1lbnQgbXVzdCBvcmRlciB0aGUgY2FwcyByZXR1cm5lZCBmcm9tIHRoZQotdHJhbnNmb3JtX2NhcHMgZnVuY3Rpb24gaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBwcmVmZXJyZWQgZm9ybWF0IGlzCi1maXJzdCBpbiB0aGUgbGlzdC4gVGhpcyBjYW4gYmUgaW50ZXJlc3RpbmcgZm9yIHRyYW5zZm9ybXMgdGhhdCBjYW4gZG8KLXBhc3N0aHJvdWdoIHRyYW5zZm9ybXMgYnV0IHByZWZlciB0byBkbyBzb21ldGhpbmcgZWxzZSwgbGlrZSBhCi1jYXBzZmlsdGVyLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1wcmVmZXItcGFzc3Rocm91Z2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByZWZlcl9wYXNzdGhyb3VnaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk5ldyBzdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDguaHRtbCNhcGktaW5kZXgtMS4wLjEiPjEuMC4xPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLWluLXBsYWNlIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNlZSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT4KLSBpcyBjb25maWd1cmVkIGFzIGEgaW5fcGxhY2UgdHJhbnNmb3JtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS1pcy1pbi1wbGFjZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0taXMtaW4tcGxhY2UucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaXMgdGhlIHRyYW5zZm9ybSBpcyBjb25maWd1cmVkIGluIGluX3BsYWNlIG1vZGUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1pbi1wbGFjZSI+PC9hPjxoMz5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+ICp0cmFuczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBpbl9wbGFjZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZXRlcm1pbmVzIHdoZXRoZXIgYSBub24td3JpdGFibGUgYnVmZmVyIHdpbGwgYmUgY29waWVkIGJlZm9yZSBwYXNzaW5nCi10byB0aGUgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj5BbHdheXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIG5vIHRyYW5zZm9ybSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+QWx3YXlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIE9OTFkgdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LWluLXBsYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRyYW5zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+IHRvIG1vZGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbl9wbGFjZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGF0IHdlIHdvdWxkIGxpa2UgdG8gb3BlcmF0ZQotb24gaW5fcGxhY2UgYnVmZmVycy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXFvcy1lbmFibGVkIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlF1ZXJpZXMgaWYgdGhlIHRyYW5zZm9ybSB3aWxsIGhhbmRsZSBRb1MuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLXFvcy1lbmFibGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50cmFuczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0taXMtcW9zLWVuYWJsZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgUW9TIGlzIGVuYWJsZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1xb3MtZW5hYmxlZCI+PC9hPjxoMz5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+ICp0cmFuczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBlbmFibGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkVuYWJsZSBvciBkaXNhYmxlIFFvUyBoYW5kbGluZyBpbiB0aGUgdHJhbnNmb3JtLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1xb3MtZW5hYmxlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50cmFuczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZW5hYmxlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5ldyBzdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXFvcyI+PC9hPjxoMz5nc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3Fvc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gcHJvcG9ydGlvbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gZGlmZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHRpbWVzdGFtcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIFFvUyBwYXJhbWV0ZXJzIGluIHRoZSB0cmFuc2Zvcm0uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGludGVybmFsbHkKLXdoZW4gYSBRT1MgZXZlbnQgaXMgcmVjZWl2ZWQgYnV0IHN1YmNsYXNzZXMgY2FuIHByb3ZpZGUgY3VzdG9tIGluZm9ybWF0aW9uCi13aGVuIG5lZWRlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS11cGRhdGUtcW9zLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRyYW5zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9wb3J0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHByb3BvcnRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGlmZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkaWZmIGFnYWluc3QgdGhlIGNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciBnZW5lcmF0aW5nIHRoZSBRb1MgZXhwcmVzc2VkIGluCi1ydW5uaW5nX3RpbWUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS1zZXQtZ2FwLWF3YXJlIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGdhcF9hd2FyZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2FwX2F3YXJlPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gKHRoZSBkZWZhdWx0KSwgb3V0cHV0IGJ1ZmZlcnMgd2lsbCBoYXZlIHRoZQotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHU1QtQlVGRkVSLUZMQUctR0FQOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQlVGRkVSX0ZMQUdfR0FQPC9jb2RlPjwvYT4gZmxhZyB1bnNldC48L3A+Ci08cD5JZiBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCB0aGUgZWxlbWVudCBtdXN0IGhhbmRsZSBvdXRwdXQgYnVmZmVycyB3aXRoIHRoaXMgZmxhZyBzZXQKLWNvcnJlY3RseSwgaS5lLiBpdCBjYW4gYXNzdW1lIHRoYXQgdGhlIGJ1ZmZlciBjb250YWlucyBuZXV0cmFsIGRhdGEgYnV0IG11c3QKLXVuc2V0IHRoZSBmbGFnIGlmIHRoZSBvdXRwdXQgaXMgbm8gbmV1dHJhbCBkYXRhLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1nYXAtYXdhcmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdhcF9hd2FyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk5ldyBzdGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tZ2V0LWFsbG9jYXRvciI+PC9hPjxoMz5nc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X2FsbG9jYXRvcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYWxsb2NhdG9yICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gKnRyYW5zPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiAqKmFsbG9jYXRvcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiAqcGFyYW1zPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxldHMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gc3ViLWNsYXNzZXMgdG8ga25vdyB0aGUgbWVtb3J5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvY2F0b3I8L2NvZGU+PC9lbT4KLQotdXNlZCBieSB0aGUgYmFzZSBjbGFzcyBhbmQgaXRzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXJhbXM8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5VbnJlZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPgotIGFmdGVyIHVzZSBpdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tZ2V0LWFsbG9jYXRvci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50cmFuczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWxsb2NhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPgotdXNlZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyYW1zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZQotPGEgaHJlZj0iLi4vaHRtbC9Hc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS1nZXQtYnVmZmVyLXBvb2wiPjwvYT48aDM+Z3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9idWZmZXJfcG9vbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPsKgKgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9idWZmZXJfcG9vbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+ICp0cmFuczwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tZ2V0LWJ1ZmZlci1wb29sLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50cmFuczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tZ2V0LWJ1ZmZlci1wb29sLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGluc3RhbmNlIG9mIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlclBvb2wuaHRtbCNHc3RCdWZmZXJQb29sLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlclBvb2w8L3NwYW4+PC9hPiB1c2VkCi1ieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnM8L2NvZGU+PC9lbT4KLTsgZnJlZSBpdCBhZnRlciB1c2UgaXQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS1yZWNvbmZpZ3VyZS1zaW5rIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3NpbmsgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5zdHJ1Y3RzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuczwvY29kZT48L2VtPgotIHRvIHJlcXVlc3QgcmVuZWdvdGlhdGlvbiB1cHN0cmVhbS4gVGhpcyBmdW5jdGlvbiBpcwotdHlwaWNhbGx5IGNhbGxlZCBhZnRlciBwcm9wZXJ0aWVzIG9uIHRoZSB0cmFuc2Zvcm0gd2VyZSBzZXQgdGhhdAotaW5mbHVlbmNlIHRoZSBpbnB1dCBmb3JtYXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXJlY29uZmlndXJlLXNpbmsucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRyYW5zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXJlY29uZmlndXJlLXNyYyI+PC9hPjxoMz5nc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc3JjwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3NyYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+ICp0cmFuczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5JbnN0cnVjdHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zPC9jb2RlPjwvZW0+Ci0gdG8gcmVuZWdvdGlhdGUgYSBuZXcgZG93bnN0cmVhbSB0cmFuc2Zvcm0gb24gdGhlIG5leHQKLWJ1ZmZlci4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGFmdGVyIHByb3BlcnRpZXMgb24gdGhlIHRyYW5zZm9ybQotd2VyZSBzZXQgdGhhdCBpbmZsdWVuY2UgdGhlIG91dHB1dCBmb3JtYXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJhc2UtdHJhbnNmb3JtLXJlY29uZmlndXJlLXNyYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXNyYy1jYXBzIj48L2E+PGgzPmdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfc3JjX2NhcHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfc3JjX2NhcHMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VUcmFuc2Zvcm08L3NwYW4+PC9hPiAqdHJhbnM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKnVwZGF0ZWRfY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5VcGRhdGVzIHRoZSBzcmNwYWQgY2FwcyBhbmQgc2VuZCB0aGUgY2FwcyBkb3duc3RyZWFtLiBUaGlzIGZ1bmN0aW9uCi1jYW4gYmUgdXNlZCBieSBzdWJjbGFzc2VzIHdoZW4gdGhleSBoYXZlIGFscmVhZHkgbmVnb3RpYXRlZCB0aGVpciBjYXBzCi1idXQgZm91bmQgYSBjaGFuZ2UgaW4gdGhlbSAob3IgY29tcHV0ZWQgbmV3IGluZm9ybWF0aW9ucykuIFRoaXMgd2F5LAotdGhleSBjYW4gbm90aWZ5IGRvd25zdHJlYW0gYWJvdXQgdGhhdCBjaGFuZ2Ugd2l0aG91dCBsb29zaW5nIGFueQotYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iYXNlLXRyYW5zZm9ybS11cGRhdGUtc3JjLWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHJhbnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVRyYW5zZm9ybTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVwZGF0ZWRfY2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgc3JjcGFkIGNhcHMgdG8gYmUgcHVzaGVkCi1kb3duc3RyZWFtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXNyYy1jYXBzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjYXBzIGNvdWxkIGJlIHNlbmQgZG93bnN0cmVhbSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2U8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJBU0UtVFJBTlNGT1JNLVNJTkstUEFEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEKG9iainCoChHU1RfQkFTRV9UUkFOU0ZPUk1fQ0FTVCAob2JqKS0mZ3Q7c2lua3BhZCkKLTwvcHJlPgotPHA+R2l2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIHNpbmsgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2JqZWN0IG9mIHRoZSBlbGVtZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CQVNFLVRSQU5TRk9STS1TSU5LLVBBRC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YmFzZSB0cmFuc2Zvcm0gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1CQVNFLVRSQU5TRk9STS1TUkMtUEFEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRChvYmopCQkoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKG9iaiktJmd0O3NyY3BhZCkKLTwvcHJlPgotPHA+R2l2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1QQUQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJhc2UgdHJhbnNmb3JtIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0ub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RCYXNlVHJhbnNmb3JtPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QmFzZVRyYW5zZm9ybTs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlVHJhbnNmb3JtPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdEJhc2VUcmFuc2Zvcm1DbGFzczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgZ2Jvb2xlYW4gICAgICAgcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzOwotICBnYm9vbGVhbiAgICAgICB0cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2g7Ci0KLSAgLyogdmlydHVhbCBtZXRob2RzIGZvciBzdWJjbGFzc2VzICovCi0gIEdzdENhcHMqwqAoKnRyYW5zZm9ybV9jYXBzKSAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmNhcHMsIEdzdENhcHMgKmZpbHRlcik7Ci0gIEdzdENhcHMqwqAoKmZpeGF0ZV9jYXBzKQkgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAqb3RoZXJjYXBzKTsKLSAgZ2Jvb2xlYW4gICAgICAoKmFjY2VwdF9jYXBzKSAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmNhcHMpOwotICBnYm9vbGVhbiAgICAgICgqc2V0X2NhcHMpICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0Q2FwcyAqaW5jYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpvdXRjYXBzKTsKLSAgZ2Jvb2xlYW4gICAgICAoKnF1ZXJ5KSAgICAgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFF1ZXJ5ICpxdWVyeSk7Ci0KLSAgLyogZGVjaWRlIGFsbG9jYXRpb24gcXVlcnkgZm9yIG91dHB1dCBidWZmZXJzICovCi0gIGdib29sZWFuICAgICAgKCpkZWNpZGVfYWxsb2NhdGlvbikgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0UXVlcnkgKnF1ZXJ5KTsKLSAgZ2Jvb2xlYW4gICAgICAoKmZpbHRlcl9tZXRhKSAgICAgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RRdWVyeSAqcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSBhcGksIGNvbnN0IEdzdFN0cnVjdHVyZSAqcGFyYW1zKTsKLQotICAvKiBwcm9wb3NlIGFsbG9jYXRpb24gcXVlcnkgcGFyYW1ldGVycyBmb3IgaW5wdXQgYnVmZmVycyAqLwotICBnYm9vbGVhbiAgICAgICgqcHJvcG9zZV9hbGxvY2F0aW9uKSAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFF1ZXJ5ICpkZWNpZGVfcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAqcXVlcnkpOwotCi0gIC8qIHRyYW5zZm9ybSBzaXplICovCi0gIGdib29sZWFuICAgICAgKCp0cmFuc2Zvcm1fc2l6ZSkgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpjYXBzLCBnc2l6ZSBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpvdGhlcmNhcHMsIGdzaXplICpvdGhlcnNpemUpOwotCi0gIGdib29sZWFuICAgICAgKCpnZXRfdW5pdF9zaXplKSAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RDYXBzICpjYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqc2l6ZSk7Ci0KLSAgLyogc3RhdGVzICovCi0gIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucyk7Ci0gIGdib29sZWFuICAgICAgKCpzdG9wKSAgICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucyk7Ci0KLSAgLyogc2luayBhbmQgc3JjIHBhZCBldmVudCBoYW5kbGVycyAqLwotICBnYm9vbGVhbiAgICAgICgqc2lua19ldmVudCkgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdEV2ZW50ICpldmVudCk7Ci0gIGdib29sZWFuICAgICAgKCpzcmNfZXZlbnQpICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0RXZlbnQgKmV2ZW50KTsKLQotICBHc3RGbG93UmV0dXJuICgqcHJlcGFyZV9vdXRwdXRfYnVmZmVyKSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICppbnB1dCwgR3N0QnVmZmVyICoqb3V0YnVmKTsKLQotICAvKiBtZXRhZGF0YSAqLwotICBnYm9vbGVhbiAgICAgICgqY29weV9tZXRhZGF0YSkgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpvdXRidWYpOwotICBnYm9vbGVhbiAgICAgICgqdHJhbnNmb3JtX21ldGEpICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICpvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1ldGEgKm1ldGEsIEdzdEJ1ZmZlciAqaW5idWYpOwotCi0gIHZvaWQgICAgICAgICAgKCpiZWZvcmVfdHJhbnNmb3JtKSAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0KLSAgLyogdHJhbnNmb3JtICovCi0gIEdzdEZsb3dSZXR1cm4gKCp0cmFuc2Zvcm0pICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICppbmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqb3V0YnVmKTsKLSAgR3N0Rmxvd1JldHVybiAoKnRyYW5zZm9ybV9pcCkgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RCdWZmZXIgKmJ1Zik7Ci0KLSAgR3N0Rmxvd1JldHVybiAoKnN1Ym1pdF9pbnB1dF9idWZmZXIpIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgZ2Jvb2xlYW4gaXNfZGlzY29udCwgR3N0QnVmZmVyICppbnB1dCk7Ci0gIEdzdEZsb3dSZXR1cm4gKCpnZW5lcmF0ZV9vdXRwdXQpIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICoqb3V0YnVmKTsKLX07Ci08L3ByZT4KLTxwPlN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUgYXZhaWxhYmxlIHZpcnR1YWwgbWV0aG9kcyBvciBub3QsIGFzCi1uZWVkZWQuIEF0IG1pbmltdW0gZWl0aGVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuc2Zvcm08L2NvZGU+PC9lbT4KLSBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnNmb3JtX2lwPC9jb2RlPjwvZW0+Ci0gbmVlZCB0byBiZSBvdmVycmlkZGVuLgotSWYgdGhlIGVsZW1lbnQgY2FuIG92ZXJ3cml0ZSB0aGUgaW5wdXQgZGF0YSB3aXRoIHRoZSByZXN1bHRzIChkYXRhIGlzIG9mIHRoZQotc2FtZSB0eXBlIGFuZCBxdWFudGl0eSkgaXQgc2hvdWxkIHByb3ZpZGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zZm9ybV9pcDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5wYXNzdGhyb3VnaC1vbi1zYW1lLWNhcHMiPjwvYT5wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHM8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPklmIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIHBhc3N0aHJvdWdoIG1vZGUgd2lsbCBiZQotYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHRoZSBjYXBzIGFyZSB0aGUgc2FtZS4KLVNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBieSBkZWZhdWx0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MudHJhbnNmb3JtLWlwLW9uLXBhc3N0aHJvdWdoIj48L2E+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5JZiBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnNmb3JtX2lwPC9jb2RlPjwvZW0+Ci13aWxsIGJlIGNhbGxlZCBpbgotcGFzc3Rocm91Z2ggbW9kZS4gVGhlIHBhc3NlZCBidWZmZXIgbWlnaHQgbm90IGJlCi13cml0YWJsZS4gV2hlbiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiwgbmVpdGhlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dHJhbnNmb3JtPC9jb2RlPjwvZW0+Ci1ub3IKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50cmFuc2Zvcm1faXA8L2NvZGU+PC9lbT4KLXdpbGwgYmUgY2FsbGVkIGluIHBhc3N0aHJvdWdoIG1vZGUuCi1TZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGJ5IGRlZmF1bHQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnRyYW5zZm9ybS1jYXBzIj48L2E+dHJhbnNmb3JtX2NhcHM8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk9wdGlvbmFsLiAgR2l2ZW4gdGhlIHBhZCBpbiB0aGlzIGRpcmVjdGlvbiBhbmQgdGhlIGdpdmVuCi1jYXBzLCB3aGF0IGNhcHMgYXJlIGFsbG93ZWQgb24gdGhlIG90aGVyIHBhZCBpbiB0aGlzCi1lbGVtZW50ID88L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuZml4YXRlLWNhcHMiPjwvYT5maXhhdGVfY2FwczwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3B0aW9uYWwuIEdpdmVuIHRoZSBwYWQgaW4gdGhpcyBkaXJlY3Rpb24gYW5kIHRoZSBnaXZlbgotY2FwcywgZml4YXRlIHRoZSBjYXBzIG9uIHRoZSBvdGhlciBwYWQuIFRoZSBmdW5jdGlvbiB0YWtlcwotb3duZXJzaGlwIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vdGhlcmNhcHM8L2NvZGU+PC9lbT4KLWFuZCByZXR1cm5zIGEgZml4YXRlZCB2ZXJzaW9uIG9mCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b3RoZXJjYXBzPC9jb2RlPjwvZW0+Ci0uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vdGhlcmNhcHM8L2NvZGU+PC9lbT4KLWlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHdyaXRhYmxlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5hY2NlcHQtY2FwcyI+PC9hPmFjY2VwdF9jYXBzPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLVN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNoZWNrIGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci1jYW4gYmUKLWhhbmRsZWQgYnkgdGhlIGVsZW1lbnQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBiZQotdGhlIG1vc3Qgb3B0aW1hbCB3YXkgdG8gY2hlY2sgdGhpcyBpbiBhbGwgY2FzZXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnNldC1jYXBzIj48L2E+c2V0X2NhcHM8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmFsbG93cyB0aGUgc3ViY2xhc3MgdG8gYmUgbm90aWZpZWQgb2YgdGhlIGFjdHVhbCBjYXBzIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MucXVlcnkiPjwvYT5xdWVyeTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3B0aW9uYWwuCi1IYW5kbGUgYSByZXF1ZXN0ZWQgcXVlcnkuIFN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhpcwotc2hvdWxkIG11c3QgY2hhaW4gdXAgdG8gdGhlIHBhcmVudCBpZiB0aGV5IGRpZG4ndCBoYW5kbGUgdGhlCi1xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5kZWNpZGUtYWxsb2NhdGlvbiI+PC9hPmRlY2lkZV9hbGxvY2F0aW9uPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5TZXR1cCB0aGUgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciBhbGxvY2F0aW5nIG91dHB1dAotYnVmZmVycy4gVGhlIHBhc3NlZCBpbiBxdWVyeSBjb250YWlucyB0aGUgcmVzdWx0IG9mIHRoZQotZG93bnN0cmVhbSBhbGxvY2F0aW9uIHF1ZXJ5LiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkCi13aGVuIG5vdCBvcGVyYXRpbmcgaW4gcGFzc3Rocm91Z2ggbW9kZS4gVGhlIGRlZmF1bHQKLWltcGxlbWVudGF0aW9uIHdpbGwgcmVtb3ZlIGFsbCBtZW1vcnkgZGVwZW5kZW50IG1ldGFkYXRhLgotSWYgdGhlcmUgaXMgYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZmlsdGVyX21ldGE8L2NvZGU+PC9lbT4KLW1ldGhvZCBpbXBsZW1lbnRhdGlvbiwgaXQgd2lsbAotYmUgY2FsbGVkIGZvciBhbGwgbWV0YWRhdGEgQVBJIGluIHRoZSBkb3duc3RyZWFtIHF1ZXJ5LAotb3RoZXJ3aXNlIHRoZSBtZXRhZGF0YSBBUEkgaXMgcmVtb3ZlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuZmlsdGVyLW1ldGEiPjwvYT5maWx0ZXJfbWV0YTwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+UmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbWV0YWRhdGEgQVBJIHNob3VsZCBiZSBwcm9wb3NlZCBpbiB0aGUKLXVwc3RyZWFtIGFsbG9jYXRpb24gcXVlcnkuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPgotYW5kIHdpbGwgY2F1c2UgYWxsIG1ldGFkYXRhIHRvIGJlIHJlbW92ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnByb3Bvc2UtYWxsb2NhdGlvbiI+PC9hPnByb3Bvc2VfYWxsb2NhdGlvbjwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+UHJvcG9zZSBidWZmZXIgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciB1cHN0cmVhbSBlbGVtZW50cy4KLVRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBpZiB0aGUgZWxlbWVudCByZWFkcyBvcgotd3JpdGVzIHRoZSBidWZmZXIgY29udGVudC4gVGhlIHF1ZXJ5IHRoYXQgd2FzIHBhc3NlZCB0bwotdGhlIGRlY2lkZV9hbGxvY2F0aW9uIGlzIHBhc3NlZCBpbiB0aGlzIG1ldGhvZCAob3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+Ci13aGVuIHRoZSBlbGVtZW50IGlzIGluIHBhc3N0aHJvdWdoIG1vZGUpLiBUaGUgZGVmYXVsdAotaW1wbGVtZW50YXRpb24gd2lsbCBwYXNzIHRoZSBxdWVyeSBkb3duc3RyZWFtIHdoZW4gaW4KLXBhc3N0aHJvdWdoIG1vZGUgYW5kIHdpbGwgY29weSBhbGwgdGhlIGZpbHRlcmVkIG1ldGFkYXRhCi1BUEkgaW4gbm9uLXBhc3N0aHJvdWdoIG1vZGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnRyYW5zZm9ybS1zaXplIj48L2E+dHJhbnNmb3JtX3NpemU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk9wdGlvbmFsLiBHaXZlbiB0aGUgc2l6ZSBvZiBhIGJ1ZmZlciBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uCi13aXRoIHRoZSBnaXZlbiBjYXBzLCBjYWxjdWxhdGUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgYSBidWZmZXIKLW9uIHRoZSBvdGhlciBwYWQgd2l0aCB0aGUgZ2l2ZW4gb3RoZXIgY2Fwcy4KLVRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgZ2V0X3VuaXRfc2l6ZSBhbmQga2VlcHMKLXRoZSBudW1iZXIgb2YgdW5pdHMgdGhlIHNhbWUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmdldC11bml0LXNpemUiPjwvYT5nZXRfdW5pdF9zaXplPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5SZXF1aXJlZCBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBpbi1wbGFjZS4KLWdldCB0aGUgc2l6ZSBpbiBieXRlcyBvZiBvbmUgdW5pdCBmb3IgdGhlIGdpdmVuIGNhcHMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnN0YXJ0Ij48L2E+c3RhcnQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk9wdGlvbmFsLgotQ2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgc3RhcnRzIHByb2Nlc3NpbmcuCi1BbGxvd3Mgb3BlbmluZyBleHRlcm5hbCByZXNvdXJjZXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnN0b3AiPjwvYT5zdG9wPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLUNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IHN0b3BzIHByb2Nlc3NpbmcuCi1BbGxvd3MgY2xvc2luZyBleHRlcm5hbCByZXNvdXJjZXMuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnNpbmstZXZlbnQiPjwvYT5zaW5rX2V2ZW50PC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLUV2ZW50IGhhbmRsZXIgb24gdGhlIHNpbmsgcGFkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotaGFuZGxlcyB0aGUgZXZlbnQgYW5kIGZvcndhcmRzIGl0IGRvd25zdHJlYW0uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnNyYy1ldmVudCI+PC9hPnNyY19ldmVudDwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+T3B0aW9uYWwuCi1FdmVudCBoYW5kbGVyIG9uIHRoZSBzb3VyY2UgcGFkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotaGFuZGxlcyB0aGUgZXZlbnQgYW5kIGZvcndhcmRzIGl0IHVwc3RyZWFtLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5wcmVwYXJlLW91dHB1dC1idWZmZXIiPjwvYT5wcmVwYXJlX291dHB1dF9idWZmZXI8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk9wdGlvbmFsLgotU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyB0byBkbyB0aGVpciBvd24KLWFsbG9jYXRpb24gb2Ygb3V0cHV0IGJ1ZmZlcnMuICBFbGVtZW50cyB0aGF0IG9ubHkgZG8KLWFuYWx5c2lzIGNhbiByZXR1cm4gYSBzdWJidWZmZXIgb3IgZXZlbiBqdXN0Ci1yZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGlucHV0IGJ1ZmZlciAoaWYgaW4KLXBhc3N0aHJvdWdoIG1vZGUpLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsCi11c2UgdGhlIG5lZ290aWF0ZWQgYWxsb2NhdG9yIG9yIGJ1ZmZlcnBvb2wgYW5kCi10cmFuc2Zvcm1fc2l6ZSB0byBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIG9yIGl0Ci13aWxsIHJldHVybiB0aGUgaW5wdXQgYnVmZmVyIGluIHBhc3N0aHJvdWdoIG1vZGUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmNvcHktbWV0YWRhdGEiPjwvYT5jb3B5X21ldGFkYXRhPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLUNvcHkgdGhlIG1ldGFkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KLVRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY29weSB0aGUgZmxhZ3MsIHRpbWVzdGFtcHMgYW5kCi1vZmZzZXRzIG9mIHRoZSBidWZmZXIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnRyYW5zZm9ybS1tZXRhIj48L2E+dHJhbnNmb3JtX21ldGE8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPk9wdGlvbmFsLiBUcmFuc2Zvcm0gdGhlIG1ldGFkYXRhIG9uIHRoZSBpbnB1dCBidWZmZXIgdG8gdGhlCi1vdXRwdXQgYnVmZmVyLiBCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIGNvcGllcyBhbGwgbWV0YSB3aXRob3V0Ci10YWdzLiBzdWJjbGFzc2VzIGNhbiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgYW5kIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYKLXRoZSBtZXRhZGF0YSBpcyB0byBiZSBjb3BpZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmJlZm9yZS10cmFuc2Zvcm0iPjwvYT5iZWZvcmVfdHJhbnNmb3JtPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5PcHRpb25hbC4KLVRoaXMgbWV0aG9kIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGJhc2UgY2xhc3Mgd2lsbAotc3RhcnQgcHJvY2Vzc2luZy4gRHluYW1pYyBwcm9wZXJ0aWVzIG9yIG90aGVyIGRlbGF5ZWQKLWNvbmZpZ3VyYXRpb24gY291bGQgYmUgcGVyZm9ybWVkIGluIHRoaXMgbWV0aG9kLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0iPjwvYT50cmFuc2Zvcm08L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlJlcXVpcmVkIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IG9wZXJhdGUgaW4tcGxhY2UuCi1UcmFuc2Zvcm1zIG9uZSBpbmNvbWluZyBidWZmZXIgdG8gb25lIG91dGdvaW5nIGJ1ZmZlci4KLVRoZSBmdW5jdGlvbiBpcyBhbGxvd2VkIHRvIGNoYW5nZSBzaXplL3RpbWVzdGFtcC9kdXJhdGlvbgotb2YgdGhlIG91dGdvaW5nIGJ1ZmZlci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MudHJhbnNmb3JtLWlwIj48L2E+dHJhbnNmb3JtX2lwPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5SZXF1aXJlZCBpZiB0aGUgZWxlbWVudCBvcGVyYXRlcyBpbi1wbGFjZS4KLVRyYW5zZm9ybSB0aGUgaW5jb21pbmcgYnVmZmVyIGluLXBsYWNlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5zdWJtaXQtaW5wdXQtYnVmZmVyIj48L2E+c3VibWl0X2lucHV0X2J1ZmZlcjwvY29kZT48L2VtPsKgKCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+RnVuY3Rpb24gd2hpY2ggYWNjZXB0cyBhIG5ldyBpbnB1dCBidWZmZXIgYW5kIHByZS1wcm9jZXNzZXMgaXQuCi1UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwZXJmb3JtcyBjYXBzIChyZSluZWdvdGlhdGlvbiwgdGhlbgotUW9TIGlmIG5lZWRlZCwgYW5kIHBsYWNlcyB0aGUgaW5wdXQgYnVmZmVyIGludG8gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZWRfYnVmPC9jb2RlPjwvZW0+Ci1tZW1iZXIgdmFyaWFibGUuIElmIHRoZSBidWZmZXIgaXMgZHJvcHBlZCBkdWUgdG8gUW9TLCBpdCByZXR1cm5zCi1HU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVELiBJZiB0aGlzIGlucHV0IGJ1ZmZlciBpcyBub3QKLWNvbnRpZ3VvdXMgd2l0aCBhbnkgcHJldmlvdXMgaW5wdXQgYnVmZmVyLCB0aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pc19kaXNjb250PC9jb2RlPjwvZW0+Ci1pcyBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+VFJVRTwvc3Bhbj48L2E+LiAoU2luY2UgMS42KTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5nZW5lcmF0ZS1vdXRwdXQiPjwvYT5nZW5lcmF0ZV9vdXRwdXQ8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkNhbGxlZCBhZnRlciBlYWNoIG5ldyBpbnB1dCBidWZmZXIgaXMgc3VibWl0dGVkIHJlcGVhdGVkbHkKLXVudGlsIGl0IGVpdGhlciBnZW5lcmF0ZXMgYW4gZXJyb3Igb3IgZmFpbHMgdG8gZ2VuZXJhdGUgYW4gb3V0cHV0Ci1idWZmZXIuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZWRfYnVmPC9jb2RlPjwvZW0+Ci12YXJpYWJsZSwgZ2VuZXJhdGVzIGFuIG91dHB1dCBidWZmZXIgaWYgbmVlZGVkCi1ieSBjYWxsaW5nIHRoZSBjbGFzcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cHJlcGFyZV9vdXRwdXRfYnVmZmVyPC9jb2RlPjwvZW0+Ci0sIGFuZCB0aGVuCi1jYWxscyBlaXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zZm9ybTwvY29kZT48L2VtPgotb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRyYW5zZm9ybV9pcDwvY29kZT48L2VtPgotLiBFbGVtZW50cyB0aGF0IGRvbid0Ci1kbyAxLXRvLTEgdHJhbnNmb3JtYXRpb25zIG9uIGlucHV0IHRvIG91dHB1dCBidWZmZXJzIGNhbiBlaXRoZXIKLXJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEIG9yIHNpbXBseSBub3QgZ2VuZXJhdGUKLWFuIG91dHB1dCBidWZmZXIgdW50aWwgdGhleSBhcmUgcmVhZHkgdG8gZG8gc28uIChTaW5jZSAxLjYpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1UUkFOU0ZPUk0tU0lOSy1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfTkFNRTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FwqAic2luayIKLTwvcHJlPgotPHA+VGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlcyBmb3IgdGhlIHNpbmsgcGFkLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1OQU1FOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19OQU1FPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9TUkNfTkFNRcKgInNyYyIKLTwvcHJlPgotPHA+VGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlcyBmb3IgdGhlIHNvdXJjZSBwYWQuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQkFTRS1UUkFOU0ZPUk0tRkxPVy1EUk9QUEVEOkNBUFMiPjwvYT48aDM+R1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEICAgR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1MKLTwvcHJlPgotPHA+QSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSB0cmFuc2Zvcm0gYW5kIHRyYW5zZm9ybV9pcCB0bwotaW5kaWNhdGUgdGhhdCBubyBvdXRwdXQgYnVmZmVyIHdhcyBnZW5lcmF0ZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0ucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm0tLXFvcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHFvc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccW9z4oCdICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5IYW5kbGUgUXVhbGl0eS1vZi1TZXJ2aWNlIGV2ZW50cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdENvbGxlY3RQYWRzLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RDb2xsZWN0UGFkcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjUzOTQyLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL0dzdENvbGxlY3RQYWRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RDb2xsZWN0UGFkczogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RDb2xsZWN0UGFkcy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0Q29sbGVjdFBhZHMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy50b3Bfb2ZfcGFnZSI+PC9hPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvaDI+Ci08cD5Hc3RDb2xsZWN0UGFkcyDigJQgbWFuYWdlcyBhIHNldCBvZiBwYWRzIHRoYXQgb3BlcmF0ZSBpbiBjb2xsZWN0IG1vZGU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHMuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkiIHRpdGxlPSJHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnnCoCgpIj4qR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbsKgKCkiPipHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uwqAoKSI+KkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uwqAoKSI+KkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzRXZlbnRGdW5jdGlvbsKgKCkiPipHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzRmx1c2hGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzRmx1c2hGdW5jdGlvbsKgKCkiPipHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNRdWVyeUZ1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNRdWVyeUZ1bmN0aW9uwqAoKSI+KkdzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzRnVuY3Rpb27CoCgpIj4qR3N0Q29sbGVjdFBhZHNGdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVEFURTpDQVBTIiB0aXRsZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURSgpIj5HU1RfQ09MTEVDVF9QQURTX1NUQVRFPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVEFURS1JUy1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUKCkiPkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVEFURS1TRVQ6Q0FQUyIgdGl0bGU9IkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfU0VUKCkiPkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfU0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVEFURS1VTlNFVDpDQVBTIiB0aXRsZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURV9VTlNFVCgpIj5HU1RfQ09MTEVDVF9QQURTX1NUQVRFX1VOU0VUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1HRVQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9DT0xMRUNUX1BBRFNfR0VUX1NUUkVBTV9MT0NLKCkiPkdTVF9DT0xMRUNUX1BBRFNfR0VUX1NUUkVBTV9MT0NLPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVFJFQU0tTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSygpIj5HU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVFJFQU0tVU5MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9VTkxPQ0soKSI+R1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1EVFM6Q0FQUyIgdGl0bGU9IkdTVF9DT0xMRUNUX1BBRFNfRFRTKCkiPkdTVF9DT0xMRUNUX1BBRFNfRFRTPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1EVFMtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9DT0xMRUNUX1BBRFNfRFRTX0lTX1ZBTElEKCkiPkdTVF9DT0xMRUNUX1BBRFNfRFRTX0lTX1ZBTElEPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLW5ldyIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfbmV3wqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZMKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXJlbW92ZS1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWTCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc3RhcnQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3N0YXJ0wqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zdGFydDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zdG9wIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zdG9wwqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zdG9wPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYXZhaWxhYmxlIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGXCoCgpIj5nc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWZsdXNoIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19mbHVzaMKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfZmx1c2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1wZWVrIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19wZWVrwqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19wZWVrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcG9wIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19wb3DCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3BvcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXJlYWQtYnVmZmVyIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19yZWFkX2J1ZmZlcsKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy10YWtlLWJ1ZmZlciIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXLCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWNsaXAtcnVubmluZy10aW1lIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3J1bm5pbmdfdGltZcKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfY2xpcF9ydW5uaW5nX3RpbWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1xdWVyeS1kZWZhdWx0IiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19xdWVyeV9kZWZhdWx0wqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19xdWVyeV9kZWZhdWx0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtZXZlbnQtZGVmYXVsdCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdMKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNyYy1ldmVudC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zcmNfZXZlbnRfZGVmYXVsdMKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc3JjX2V2ZW50X2RlZmF1bHQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWJ1ZmZlci1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbsKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtY2xpcC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb27CoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9jbGlwX2Z1bmN0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1jb21wYXJlLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfY29tcGFyZV9mdW5jdGlvbsKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2NvbXBhcmVfZnVuY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWV2ZW50LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb27CoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9ldmVudF9mdW5jdGlvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZmx1c2gtZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaF9mdW5jdGlvbsKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoX2Z1bmN0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1xdWVyeS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X3F1ZXJ5X2Z1bmN0aW9uwqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zZXRfcXVlcnlfZnVuY3Rpb248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWZsdXNoaW5nIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmfCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbsKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC13YWl0aW5nIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZ8KgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X3dhaXRpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPkdzdENvbGxlY3REYXRhPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzIiB0aXRsZT0iZW51bSBHc3RDb2xsZWN0UGFkc1N0YXRlRmxhZ3MiPkdzdENvbGxlY3RQYWRzU3RhdGVGbGFnczwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RDb2xsZWN0UGFkcwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5NYW5hZ2VzIGEgc2V0IG9mIHBhZHMgdGhhdCBvcGVyYXRlIGluIGNvbGxlY3QgbW9kZS4gVGhpcyBtZWFucyB0aGF0IGNvbnRyb2wKLWlzIGdpdmVuIHRvIHRoZSBtYW5hZ2VyIG9mIHRoaXMgb2JqZWN0IHdoZW4gYWxsIHBhZHMgaGF2ZSBkYXRhLjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBDb2xsZWN0cGFkcyBhcmUgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtbmV3IiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfbmV3KCk8L2NvZGU+PC9hPi4gQSBjYWxsYmFjayBzaG91bGQgdGhlbgotICAgIGJlIGluc3RhbGxlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uKCk8L2NvZGU+PC9hPi4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICBQYWRzIGFyZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbiB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKCk8L2NvZGU+PC9hPi8KLSAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXJlbW92ZS1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCgpPC9jb2RlPjwvYT4uIFRoZSBwYWQKLSAgICBoYXMgdG8gYmUgYSBzaW5rcGFkLiBUaGUgY2hhaW4gYW5kIGV2ZW50IGZ1bmN0aW9ucyBvZiB0aGUgcGFkIGFyZQotICAgIG92ZXJyaWRkZW4uIFRoZSBlbGVtZW50X3ByaXZhdGUgb2YgdGhlIHBhZCBpcyB1c2VkIHRvIHN0b3JlCi0gICAgcHJpdmF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbGxlY3RwYWRzLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIEZvciBlYWNoIHBhZCwgZGF0YSBpcyBxdWV1ZWQgaW4gdGhlIF9jaGFpbiBmdW5jdGlvbiBvciBieQotICAgIHBlcmZvcm1pbmcgYSBwdWxsX3JhbmdlLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIFdoZW4gZGF0YSBpcyBxdWV1ZWQgb24gYWxsIHBhZHMgaW4gd2FpdGluZyBtb2RlLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIERhdGEgY2FuIGJlIGRlcXVldWVkIGZyb20gdGhlIHBhZCB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBvcCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcG9wwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3BvcCgpPC9jb2RlPjwvYT4gbWV0aG9kLgotICAgIE9uZSBjYW4gcGVlayBhdCB0aGUgZGF0YSB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBlZWsiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3BlZWvCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfcGVlaygpPC9jb2RlPjwvYT4gZnVuY3Rpb24uCi0gICAgVGhlc2UgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIHJlY2VpdmVkIGFuIEVPUyBldmVudC4gV2hlbiBhbGwKLSAgICBwYWRzIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZnJvbSBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcGVlayIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcGVla8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19wZWVrKCk8L2NvZGU+PC9hPiwgdGhlIGVsZW1lbnQgY2FuIGVtaXQgYW4gRU9TCi0gICAgZXZlbnQgaXRzZWxmLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIERhdGEgY2FuIGFsc28gYmUgZGVxdWV1ZWQgaW4gYnl0ZSB1bml0cyB1c2luZyB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hdmFpbGFibGUiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUoKTwvY29kZT48L2E+LAotICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcmVhZC1idWZmZXIiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVyKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1mbHVzaCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfZmx1c2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfZmx1c2goKTwvY29kZT48L2E+IGNhbGxzLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICAgIEVsZW1lbnRzIHNob3VsZCBjYWxsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc3RhcnQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3N0YXJ0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3N0YXJ0KCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zdG9wIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zdG9wwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3N0b3AoKTwvY29kZT48L2E+IGluCi0gICAgdGhlaXIgc3RhdGUgY2hhbmdlIGZ1bmN0aW9ucyB0byBzdGFydCBhbmQgc3RvcCB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgY29sbGVjdHBhZHMuCi0gICAgVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc3RvcCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc3RvcMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19zdG9wKCk8L2NvZGU+PC9hPiBjYWxsIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcmVudAotICAgIGVsZW1lbnQgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGluIHRoZSBQQVVTRURfVE9fUkVBRFkgc3RhdGUgY2hhbmdlIHRvIGVuc3VyZQotICAgIG5vIHBhZCBpcyBibG9ja2VkIGFuZCB0aGUgZWxlbWVudCBjYW4gZmluaXNoIHN0cmVhbWluZy4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC13YWl0aW5nIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZ8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZygpPC9jb2RlPjwvYT4gc2V0cyBhIHBhZCB0byB3YWl0aW5nIG9yIG5vbi13YWl0aW5nIG1vZGUuCi0gICAgQ29sbGVjdFBhZHMgZWxlbWVudCBpcyBub3Qgd2FpdGluZyBmb3IgZGF0YSB0byBiZSBjb2xsZWN0ZWQgb24gbm9uLXdhaXRpbmcgcGFkcy4KLSAgICBUaHVzIHRoZXNlIHBhZHMgbWF5IGJ1dCBuZWVkIG5vdCBoYXZlIGRhdGEgd2hlbiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLgotICAgIEFsbCBwYWRzIGFyZSBpbiB3YWl0aW5nIG1vZGUgYnkgZGVmYXVsdC4KLSAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5Ij48L2E+PGgzPkdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnk8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiB3aWxsIGJlIGZyZWVkLgotSXQgaXMgcGFzc2VkIHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgYW5kIHNob3VsZCBmcmVlIGFueSBjdXN0b20KLW1lbW9yeSBhbmQgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgaXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiB0aGF0IHdpbGwgYmUgZnJlZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzQnVmZmVyRnVuY3Rpb24iPjwvYT48aDM+R3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgKGNvbnNpZGVyZWQgb2xkZXN0KSBidWZmZXIgY2FuIGJlIG11eGVkLgotSWYgYWxsIHBhZHMgaGF2ZSByZWFjaGVkIEVPUywgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotCi1hbmQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+IHRoYXQgdHJpZ2dlcmVkIHRoZSBjYWxsYmFjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiBvZiBwYWQgdGhhdCBoYXMgcmVjZWl2ZWQgdGhlIGJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1idWZmZXItZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9idWZmZXJfZnVuY3Rpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbigpPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzQnVmZmVyRnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19PSzwvY29kZT48L2E+IGZvciBzdWNjZXNzPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIj48L2E+PGgzPkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmluYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqKm91dGJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pbmJ1ZmZlcjwvY29kZT48L2VtPgotIGlzIHJlY2VpdmVkIG9uIHRoZSBwYWQgbWFuYWdlZAotYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLSBpbiB0aGUgY29sbGVjdHBhZCBvYmplY3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5UaGUgZnVuY3Rpb24gc2hvdWxkIHVzZSB0aGUgc2VnbWVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotIGFuZCB0aGUgbmVnb3RpYXRlZCBtZWRpYSB0eXBlIG9uCi10aGUgcGFkIHRvIHBlcmZvcm0gY2xpcHBpbmcgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluYnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluYnVmZmVyPC9jb2RlPjwvZW0+Ci0gYW5kIHNob3VsZCBvdXRwdXQgYSBidWZmZXIgaW4KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vdXRidWZmZXI8L2NvZGU+PC9lbT4KLSBvciByZXR1cm4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vdXRidWZmZXI8L2NvZGU+PC9lbT4KLSBpZiB0aGUgYnVmZmVyIHNob3VsZCBiZSBkcm9wcGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgaW5wdXQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vdXRidWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb3V0cHV0IDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSByZXN1bHQgb2YgY2xpcHBpbmcuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uIj48L2E+PGgzPkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ8L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiB0aW1lc3RhbXAxPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKmRhdGEyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wMjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZnVuY3Rpb24gZm9yIGNvbXBhcmluZyB0d28gdGltZXN0YW1wcyBvZiBidWZmZXJzIG9yIG5ld3NlZ21lbnRzIGNvbGxlY3RlZCBvbiBvbmUgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gdGhhdCBpcyBjb21wYXJpbmcgdGhlIHRpbWVzdGFtcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZmlyc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVzdGFtcDE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZmlyc3QgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGEyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlY29uZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZXN0YW1wMjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZWNvbmQgdGltZXN0YW1wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBwYXNzZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtY29tcGFyZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2NvbXBhcmVfZnVuY3Rpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2NvbXBhcmVfZnVuY3Rpb24oKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEludGVnZXIgbGVzcyB0aGFuIHplcm8gd2hlbiBmaXJzdCB0aW1lc3RhbXAgaXMgZGVlbWVkIG9sZGVyIHRoYW4gdGhlIHNlY29uZCBvbmUuCi1aZXJvIGlmIHRoZSB0aW1lc3RhbXBzIGFyZSBkZWVtZWQgZXF1YWxseSBvbGQuCi1JbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvIHdoZW4gc2Vjb25kIHRpbWVzdGFtcCBpcyBkZWVtZWQgb2xkZXIgdGhhbiB0aGUgZmlyc3Qgb25lLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb24iPjwvYT48aDM+R3N0Q29sbGVjdFBhZHNFdmVudEZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0Q29sbGVjdFBhZHNFdmVudEZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hpbGUgcHJvY2Vzc2luZyBhbiBldmVudC4gSXQgdGFrZXMKLW93bmVyc2hpcCBvZiB0aGUgZXZlbnQgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBjaGFpbmluZyB1cCAodG8KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtZXZlbnQtZGVmYXVsdCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0KCk8L2NvZGU+PC9hPikgb3IgZHJvcHBpbmcgZXZlbnRzIChzdWNoIHR5cGljYWwgY2FzZXMKLWJlaW5nIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQgaGFuZGxlcikuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHNFdmVudEZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gdGhhdCB0cmlnZ2VyZWQgdGhlIGNhbGxiYWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0aGF0IHJlY2VpdmVkIGFuIGV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHJlY2VpdmVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBwYXNzZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZXZlbnQtZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9ldmVudF9mdW5jdGlvbsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24oKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBhZCBjb3VsZCBoYW5kbGUgdGhlIGV2ZW50PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzRmx1c2hGdW5jdGlvbiI+PC9hPjxoMz5Hc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0Q29sbGVjdFBhZHNGbHVzaEZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoaWxlIHByb2Nlc3NpbmcgYSBmbHVzaGluZyBzZWVrIGV2ZW50LjwvcD4KLTxwPlRoZSBmdW5jdGlvbiBzaG91bGQgZmx1c2ggYW55IGludGVybmFsIHN0YXRlIG9mIHRoZSBlbGVtZW50IGFuZCB0aGUgc3RhdGUgb2YKLWFsbCB0aGUgcGFkcy4gSXQgc2hvdWxkIGNsZWFyIG9ubHkgdGhlIHN0YXRlIG5vdCBkaXJlY3RseSBtYW5hZ2VkIGJ5IHRoZQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLSBvYmplY3QuIEl0IGlzIHRoZXJlZm9yZSBub3QgbmVjZXNzYXJ5IHRvIGNhbGwKLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nIG5vciBnc3RfY29sbGVjdF9wYWRzX2NsZWFyIGZyb20gdGhpcyBmdW5jdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbiI+PC9hPjxoMz5Hc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RRdWVyeS5odG1sI0dzdFF1ZXJ5LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXJ5PC9zcGFuPjwvYT4gKnF1ZXJ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGlsZSBwcm9jZXNzaW5nIGEgcXVlcnkuIEl0IHRha2VzCi1vd25lcnNoaXAgb2YgdGhlIHF1ZXJ5IGFuZCBpcyByZXNwb25zaWJsZSBmb3IgY2hhaW5pbmcgdXAgKHRvCi1ldmVudHMgZG93bnN0cmVhbSAod2l0aCA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI2dzdC1wYWQtZXZlbnQtZGVmYXVsdCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX2V2ZW50X2RlZmF1bHQoKTwvY29kZT48L2E+KS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbGJhY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRoYXQgcmVjZWl2ZWQgYW4gZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gcmVjZWl2ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1xdWVyeS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X3F1ZXJ5X2Z1bmN0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3NldF9xdWVyeV9mdW5jdGlvbigpPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgcGFkIGNvdWxkIGhhbmRsZSB0aGUgZXZlbnQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiI+PC9hPjxoMz5Hc3RDb2xsZWN0UGFkc0Z1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdENvbGxlY3RQYWRzRnVuY3Rpb248c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYWxsIHBhZHMgaGF2ZSByZWNlaXZlZCBkYXRhLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzRnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbGJhY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbigpPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzRnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19PSzwvY29kZT48L2E+IGZvciBzdWNjZXNzPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RBVEU6Q0FQUyI+PC9hPjxoMz5HU1RfQ09MTEVDVF9QQURTX1NUQVRFKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19TVEFURShkYXRhKSAgICAgICAgICAgICAgICAgKCgoR3N0Q29sbGVjdERhdGEgKikgZGF0YSktJmd0O3N0YXRlKQotPC9wcmU+Ci08cD5BIGZsYWdzIHdvcmQgY29udGFpbmluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc1N0YXRlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENvbGxlY3RQYWRzU3RhdGVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzU3RhdGVGbGFnczwvc3Bhbj48L2E+IGZsYWdzIHNldAotb24gdGhpcyBjb2xsZWN0ZWQgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RBVEUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RBVEUtSVMtU0VUOkNBUFMiPjwvYT48aDM+R1NUX0NPTExFQ1RfUEFEU19TVEFURV9JU19TRVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0lTX1NFVChkYXRhLGZsYWcpICAgICAhIShHU1RfQ09MTEVDVF9QQURTX1NUQVRFIChkYXRhKSAmYW1wOyBmbGFnKQotPC9wcmU+Ci08cD5HaXZlcyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgZmxhZyBvbiBhIGNvbGxlY3RlZCBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNPTExFQ1QtUEFEUy1TVEFURS1JUy1TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzU3RhdGVGbGFncyIgdGl0bGU9ImVudW0gR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzPC9zcGFuPjwvYT4gdG8gY2hlY2suPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RBVEUtU0VUOkNBUFMiPjwvYT48aDM+R1NUX0NPTExFQ1RfUEFEU19TVEFURV9TRVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1NFVChkYXRhLGZsYWcpICAgICAgICAoR1NUX0NPTExFQ1RfUEFEU19TVEFURSAoZGF0YSkgfD0gZmxhZykKLTwvcHJlPgotPHA+U2V0cyBhIHN0YXRlIGZsYWcgb24gYSBjb2xsZWN0ZWQgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RBVEUtU0VULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmxhZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc1N0YXRlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENvbGxlY3RQYWRzU3RhdGVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzU3RhdGVGbGFnczwvc3Bhbj48L2E+IHRvIHNldC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNPTExFQ1QtUEFEUy1TVEFURS1VTlNFVDpDQVBTIj48L2E+PGgzPkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfVU5TRVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1VOU0VUKGRhdGEsZmxhZykgICAgICAoR1NUX0NPTExFQ1RfUEFEU19TVEFURSAoZGF0YSkgJmFtcDs9IH4oZmxhZykpCi08L3ByZT4KLTxwPkNsZWFycyBhIHN0YXRlIGZsYWcgb24gYSBjb2xsZWN0ZWQgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RBVEUtVU5TRVQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mbGFnPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzU3RhdGVGbGFncyIgdGl0bGU9ImVudW0gR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzPC9zcGFuPjwvYT4gdG8gY2xlYXIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtR0VULVNUUkVBTS1MT0NLOkNBUFMiPjwvYT48aDM+R1NUX0NPTExFQ1RfUEFEU19HRVRfU1RSRUFNX0xPQ0soKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX0dFVF9TVFJFQU1fTE9DSyhwYWRzKSAoJmFtcDsoKEdzdENvbGxlY3RQYWRzICopcGFkcyktJmd0O3N0cmVhbV9sb2NrKQotPC9wcmU+Ci08cD5HZXQgdGhlIHN0cmVhbSBsb2NrIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+Ci0uIFRoZSBzdHJlYW0gbG9jayBpcyB1c2VkIHRvIGNvb3JkaW5hdGUgYW5kCi1zZXJpYWxpemUgZXhlY3V0aW9uIGFtb25nIHRoZSB2YXJpb3VzIHN0cmVhbXMgYmVpbmcgY29sbGVjdGVkLCBhbmQgaW4KLXByb3RlY3RpbmcgdGhlIHJlc291cmNlcyB1c2VkIHRvIGFjY29tcGxpc2ggdGhpcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ09MTEVDVC1QQURTLUdFVC1TVFJFQU0tTE9DSy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RSRUFNLUxPQ0s6Q0FQUyI+PC9hPjxoMz5HU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSyhwYWRzKSAgICAgZ19yZWNfbXV0ZXhfbG9jayhHU1RfQ09MTEVDVF9QQURTX0dFVF9TVFJFQU1fTE9DSyAocGFkcykpCi08L3ByZT4KLTxwPkxvY2sgdGhlIHN0cmVhbSBsb2NrIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUNPTExFQ1QtUEFEUy1TVFJFQU0tTE9DSy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RSRUFNLVVOTE9DSzpDQVBTIj48L2E+PGgzPkdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSyhwYWRzKSAgIGdfcmVjX211dGV4X3VubG9jayhHU1RfQ09MTEVDVF9QQURTX0dFVF9TVFJFQU1fTE9DSyAocGFkcykpCi08L3ByZT4KLTxwPlVubG9jayB0aGUgc3RyZWFtIGxvY2sgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ09MTEVDVC1QQURTLVNUUkVBTS1VTkxPQ0sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQ09MTEVDVC1QQURTLURUUzpDQVBTIj48L2E+PGgzPkdTVF9DT0xMRUNUX1BBRFNfRFRTKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19EVFMoZGF0YSkgICAgICAgICAgICAgICAgICAgKCgoR3N0Q29sbGVjdERhdGEgKikgZGF0YSktJmd0O0FCSS5hYmkuZHRzKQotPC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBEVFMgdGhhdCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gcnVubmluZyB0aW1lIHdoZW4gdXNpbmcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtY2xpcC1ydW5uaW5nLXRpbWUiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lKCk8L2NvZGU+PC9hPi4gVW5saWtlIHRoZSB2YWx1ZSBzYXZlZCBpbnRvCi10aGUgYnVmZmVyLCB0aGlzIHZhbHVlIGlzIG9mIHR5cGUgZ2ludDY0IGFuZCBtYXkgYmUgbmVnYXRpdmUuIFRoaXMgYWxsb3cKLXByb3Blcmx5IGhhbmRsaW5nIHN0cmVhbXMgd2l0aCBmcmFtZSByZW9yZGVyaW5nIHdoZXJlIHRoZSBmaXJzdCBEVFMgbWF5Ci1iZSBuZWdhdGl2ZS4gSWYgdGhlIGluaXRpYWwgRFRTIHdhcyBub3Qgc2V0LCB0aGlzIHZhbHVlIHdpbGwgYmUKLXNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI0ctTUlOSU5UNjQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdfTUlOSU5UNjQ8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHU1QtQ09MTEVDVC1QQURTLURUUy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUNPTExFQ1QtUEFEUy1EVFMtSVMtVkFMSUQ6Q0FQUyI+PC9hPjxoMz5HU1RfQ09MTEVDVF9QQURTX0RUU19JU19WQUxJRCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFNfRFRTX0lTX1ZBTElEKGRhdGEpICAgICAgICAgIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKEdTVF9DT0xMRUNUX1BBRFNfRFRTIChkYXRhKSkpCi08L3ByZT4KLTxwPkNoZWNrIGlmIHJ1bm5pbmcgRFRTIHZhbHVlIHN0b3JlIGlzIHZhbGlkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtRFRTLUlTLVZBTElELnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+QSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLW5ldyI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPsKgKgotZ3N0X2NvbGxlY3RfcGFkc19uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGluIGNhc2Ugb2YgYW4gZXJyb3IuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZCI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX2FkZF9wYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+wqAqCi1nc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IiB0aXRsZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5wqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IGRlc3Ryb3lfbm90aWZ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gbG9jazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGQgYSBwYWQgdG8gdGhlIGNvbGxlY3Rpb24gb2YgY29sbGVjdCBwYWRzLiBUaGUgcGFkIGhhcyB0byBiZQotYSBzaW5rcGFkLiBUaGUgcmVmY291bnQgb2YgdGhlIHBhZCBpcyBpbmNyZW1lbnRlZC4gVXNlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXJlbW92ZS1wYWQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCgpPC9jb2RlPjwvYT4gdG8gcmVtb3ZlIHRoZSBwYWQgZnJvbSB0aGUgY29sbGVjdGlvbgotYWdhaW4uPC9wPgotPHA+WW91IHNwZWNpZnkgYSBzaXplIGZvciB0aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+IHN0cnVjdHVyZQotc28gdGhhdCB5b3UgY2FuIHVzZSBpdCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD4KLTxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IiB0aXRsZT0iR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5wqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IHRoYXQgd2lsbCBiZSBjYWxsZWQKLWp1c3QgYmVmb3JlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gc3RydWN0dXJlIGlzIGZyZWVkLiBJdCBpcyBwYXNzZWQgdGhlCi1wb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgYW5kIHNob3VsZCBmcmVlIGFueSBjdXN0b20gbWVtb3J5IGFuZCByZXNvdXJjZXMKLWFsbG9jYXRlZCBmb3IgaXQuPC9wPgotPHA+S2VlcGluZyBhIHBhZCBsb2NrZWQgaW4gd2FpdGluZyBzdGF0ZSBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdXNpbmcKLXRoZSBkZWZhdWx0IGNvbGxlY3Rpb24gYWxnb3JpdGhtIChwcm92aWRpbmcgdGhlIG9sZGVzdCBidWZmZXIpLgotSXQgZW5zdXJlcyBhIGJ1ZmZlciBtdXN0IGJlIGF2YWlsYWJsZSBvbiB0aGlzIHBhZCBmb3IgYSBjb2xsZWN0aW9uCi10byB0YWtlIHBsYWNlLiAgVGhpcyBpcyBvZiB0eXBpY2FsIHVzZSB0byBhIG11eGVyIGVsZW1lbnQgd2hlcmUKLW5vbi1zdWJ0aXRsZSBzdHJlYW1zIHNob3VsZCBhbHdheXMgYmUgaW4gd2FpdGluZyBzdGF0ZSwKLWUuZy4gdG8gYXNzdXJlIHRoYXQgY2FwcyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgb24gYWxsIHRoZXNlIHN0cmVhbXMKLXdoZW4gaW5pdGlhbCBoZWFkZXJzIGhhdmUgdG8gYmUgd3JpdHRlbi48L3A+Ci08cD5UaGUgcGFkIHdpbGwgYmUgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQgaW4gcHVzaCBtb2RlIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLSBpcwotc3RhcnRlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbGxlY3RwYWRzIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhZCB0byBhZGQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpemUgb2YgdGhlIHJldHVybmVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiBzdHJ1Y3R1cmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdHJveV9ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgcmV0dXJuZWQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUgaXMgZnJlZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCB1bnRpbCBmaXJzdCBjYWxsZWQuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgYXN5bmM8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+d2hldGhlciB0byBsb2NrIHRoaXMgcGFkIGluIHVzdWFsIHdhaXRpbmcgc3RhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiB0byBpZGVudGlmeSB0aGUKLW5ldyBwYWQuIE9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB3cm9uZyBwYXJhbWV0ZXJzIGFyZSBzdXBwbGllZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXJlbW92ZS1wYWQiPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlIGEgcGFkIGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgY29sbGVjdCBwYWRzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbwotZnJlZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+IGFuZCBhbGwgdGhlIHJlc291cmNlcyB0aGF0IHdlcmUgYWxsb2NhdGVkIHdpdGgKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5UaGUgcGFkIHdpbGwgYmUgZGVhY3RpdmF0ZWQgYXV0b21hdGljYWxseSB3aGVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+Ci0gaXMgc3RvcHBlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtcmVtb3ZlLXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbGxlY3RwYWRzIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhZCB0byByZW1vdmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1yZW1vdmUtcGFkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgY291bGQgYmUgcmVtb3ZlZC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zdGFydCI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN0YXJ0cyB0aGUgcHJvY2Vzc2luZyBvZiBkYXRhIGluIHRoZSBjb2xsZWN0X3BhZHMuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXN0YXJ0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbGxlY3RwYWRzIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zdG9wIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfc3RvcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jb2xsZWN0X3BhZHNfc3RvcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlN0b3BzIHRoZSBwcm9jZXNzaW5nIG9mIGRhdGEgaW4gdGhlIGNvbGxlY3RfcGFkcy4gdGhpcyBmdW5jdGlvbgotd2lsbCBhbHNvIHVuYmxvY2sgYW55IGJsb2NraW5nIG9wZXJhdGlvbnMuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXN0b3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29sbGVjdHBhZHMgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLWF2YWlsYWJsZSI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5RdWVyeSBob3cgbXVjaCBieXRlcyBjYW4gYmUgcmVhZCBmcm9tIGVhY2ggcXVldWVkIGJ1ZmZlci4gVGhpcyBtZWFucwotdGhhdCB0aGUgcmVzdWx0IG9mIHRoaXMgY2FsbCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4KLWJlIHJlYWQgZnJvbSBlYWNoIG9mIHRoZSBwYWRzLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+Ci0gU1RSRUFNX0xPQ0sgaGVsZCwgc3VjaCBhcwotaW4gdGhlIGNhbGxiYWNrLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1hdmFpbGFibGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29sbGVjdHBhZHMgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLWF2YWlsYWJsZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBxdWV1ZWQgb24gYWxsIHBhZHMuIFRoaXMgZnVuY3Rpb24KLXJldHVybnMgMCBpZiBhIHBhZCBoYXMgbm8gcXVldWVkIGJ1ZmZlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1mbHVzaCI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX2ZsdXNowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfY29sbGVjdF9wYWRzX2ZsdXNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Rmx1c2ggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBmcm9tIHRoZSBwYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPgotIFNUUkVBTV9MT0NLIGhlbGQsIHN1Y2ggYXMKLWluIHRoZSBjYWxsYmFjay48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtZmx1c2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xsZWN0cGFkcyB0byBxdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGRhdGEgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGZsdXNoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLWZsdXNoLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG51bWJlciBvZiBieXRlcyBmbHVzaGVkIFRoaXMgY2FuIGJlIGxlc3MgdGhhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotYW5kCi1pcyAwIGlmIHRoZSBwYWQgd2FzIGVuZC1vZi1zdHJlYW0uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtcGVlayI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX3BlZWvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9jb2xsZWN0X3BhZHNfcGVlayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBlZWsgYXQgdGhlIGJ1ZmZlciBjdXJyZW50bHkgcXVldWVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24KLXNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLSBTVFJFQU1fTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZSBjYWxsYmFjawotaGFuZGxlci48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtcGVlay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbGxlY3RwYWRzIHRvIHBlZWs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkYXRhIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1wZWVrLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGJ1ZmZlciBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vCi1idWZmZXIgaXMgcXVldWVkLiBzaG91bGQgdW5yZWYgdGhlIGJ1ZmZlciBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXBvcCI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX3BvcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2NvbGxlY3RfcGFkc19wb3AgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlBvcCB0aGUgYnVmZmVyIGN1cnJlbnRseSBxdWV1ZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbgotc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPgotIFNUUkVBTV9MT0NLIGhlbGQsIHN1Y2ggYXMgaW4gdGhlIGNhbGxiYWNrCi1oYW5kbGVyLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1wb3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xsZWN0cGFkcyB0byBwb3A8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkYXRhIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1wb3AucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgYnVmZmVyIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm8KLWJ1ZmZlciB3YXMgcXVldWVkLiBZb3Ugc2hvdWxkIHVucmVmIHRoZSBidWZmZXIgYWZ0ZXIgdXNhZ2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1yZWFkLWJ1ZmZlciI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi1nc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29sbGVjdERhdGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0RGF0YTwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IGEgc3ViYnVmZmVyIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgZnJvbSB0aGUgZ2l2ZW4gcGFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZHM8L2NvZGU+PC9lbT4KLSBTVFJFQU1fTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZQotY2FsbGJhY2suPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXJlYWQtYnVmZmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29sbGVjdHBhZHMgdG8gcXVlcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBkYXRhIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXJlYWQtYnVmZmVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSBzdWIgYnVmZmVyLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGNhbgotYmUgbGVzcyB0aGF0IHJlcXVlc3RlZC4gQSByZXR1cm4gb2YgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHNpZ25hbHMgdGhhdCB0aGUgcGFkIGlzCi1lbmQtb2Ytc3RyZWFtLiBVbnJlZiB0aGUgYnVmZmVyIGFmdGVyIHVzZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXRha2UtYnVmZmVyIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgYSBzdWJidWZmZXIgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBmcm9tIHRoZSBnaXZlbiBwYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLS4gRmx1c2hlcyB0aGUgYW1vdW50Ci1vZiByZWFkIGJ5dGVzLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+Ci0gU1RSRUFNX0xPQ0sgaGVsZCwgc3VjaCBhcyBpbiB0aGUKLWNhbGxiYWNrLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy10YWtlLWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbGxlY3RwYWRzIHRvIHF1ZXJ5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGF0YSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy10YWtlLWJ1ZmZlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgc3ViIGJ1ZmZlci4gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBjYW4KLWJlIGxlc3MgdGhhdCByZXF1ZXN0ZWQuIEEgcmV0dXJuIG9mIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBzaWduYWxzIHRoYXQgdGhlIHBhZCBpcwotZW5kLW9mLXN0cmVhbS4gVW5yZWYgdGhlIGJ1ZmZlciBhZnRlciB1c2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgbWF5IGJlIHBhc3NlZCBhcyB0aGUgdmFsdWUgaW4sIG91dCwgaW4tb3V0OyBvciBhcyBhIHJldHVybiB2YWx1ZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5udWxsYWJsZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1jbGlwLXJ1bm5pbmctdGltZSI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3J1bm5pbmdfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqY2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqKm91dGJ1ZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29udmVuaWVuY2UgY2xpcHBpbmcgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBpbmNvbWluZyBidWZmZXIncyB0aW1lc3RhbXAKLXRvIHJ1bm5pbmcgdGltZSwgb3IgY2xpcHMgdGhlIGJ1ZmZlciBpZiBvdXRzaWRlIGNvbmZpZ3VyZWQgc2VnbWVudC48L3A+Ci08cD5TaW5jZSAxLjYsIHRoaXMgY2xpcHBpbmcgZnVuY3Rpb24gYWxzbyBzZXRzIHRoZSBEVFMgcGFyYW1ldGVyIG9mIHRoZQotR3N0Q29sbGVjdERhdGEgc3RydWN0dXJlLiBUaGlzIHZlcnNpb24gb2YgdGhlIHJ1bm5pbmcgdGltZSBEVFMgY2FuIGJlCi1uZWdhdGl2ZS4gR19NSU5JTlQ2NCBpcyB1c2VkIHRvIGluZGljYXRlIGludmFsaWQgdmFsdWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1jbGlwLXJ1bm5pbmctdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbGxlY3RwYWRzIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNvbGxlY3QgZGF0YSBvZiBjb3JyZXNwb25kaW5nIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5idWZmZXIgYmVpbmcgY2xpcHBlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vdXRidWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gb3V0cHV0IGJ1ZmZlciB3aXRoIHJ1bm5pbmcgdGltZSwgb3IgTlVMTCBpZiBjbGlwcGVkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgKHVudXNlZCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1xdWVyeS1kZWZhdWx0Ij48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfcXVlcnlfZGVmYXVsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NvbGxlY3RfcGFkc19xdWVyeV9kZWZhdWx0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3REYXRhPC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFF1ZXJ5Lmh0bWwjR3N0UXVlcnktc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVlcnk8L3NwYW4+PC9hPiAqcXVlcnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBkaXNjYXJkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkRlZmF1bHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gcXVlcnkgaGFuZGxpbmcgdGhhdCBlbGVtZW50cyBzaG91bGQgYWx3YXlzCi1jaGFpbiB1cCB0byB0byBlbnN1cmUgcHJvcGVyIG9wZXJhdGlvbi4gIEVsZW1lbnQgbWlnaHQgaG93ZXZlciBpbmRpY2F0ZQotcXVlcnkgc2hvdWxkIG5vdCBiZSBmb3J3YXJkZWQgZG93bnN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXF1ZXJ5LWRlZmF1bHQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xsZWN0cGFkcyB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmNvbGxlY3QgZGF0YSBvZiBjb3JyZXNwb25kaW5nIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWVyeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnF1ZXJ5IGJlaW5nIHByb2Nlc3NlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kaXNjYXJkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cHJvY2VzcyBidXQgZG8gbm90IHNlbmQgZXZlbnQgZG93bnN0cmVhbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLWV2ZW50LWRlZmF1bHQiPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfY29sbGVjdF9wYWRzX2V2ZW50X2RlZmF1bHQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGRpc2NhcmQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RGVmYXVsdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiBldmVudCBoYW5kbGluZyB0aGF0IGVsZW1lbnRzIHNob3VsZCBhbHdheXMKLWNoYWluIHVwIHRvIHRvIGVuc3VyZSBwcm9wZXIgb3BlcmF0aW9uLiAgRWxlbWVudCBtaWdodCBob3dldmVyIGluZGljYXRlCi1ldmVudCBzaG91bGQgbm90IGJlIGZvcndhcmRlZCBkb3duc3RyZWFtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtZXZlbnQtZGVmYXVsdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbGxlY3RwYWRzIHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y29sbGVjdCBkYXRhIG9mIGNvcnJlc3BvbmRpbmcgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZXZlbnQgYmVpbmcgcHJvY2Vzc2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRpc2NhcmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wcm9jZXNzIGJ1dCBkbyBub3Qgc2VuZCBldmVudCBkb3duc3RyZWFtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtc3JjLWV2ZW50LWRlZmF1bHQiPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19zcmNfZXZlbnRfZGVmYXVsdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NvbGxlY3RfcGFkc19zcmNfZXZlbnRfZGVmYXVsdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkRlZmF1bHQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gZXZlbnQgaGFuZGxpbmcgZm9yIHRoZSBzcmMgcGFkIG9mIGVsZW1lbnRzLgotRWxlbWVudHMgY2FuIGNoYWluIHVwIHRvIHRoaXMgdG8gbGV0IGZsdXNoaW5nIHNlZWsgZXZlbnQgaGFuZGxpbmcKLWJlIGRvbmUgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zcmMtZXZlbnQtZGVmYXVsdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+IHRvIHVzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zcmMgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdGhhdCByZWNlaXZlZCB0aGUgZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5ldmVudCBiZWluZyBwcm9jZXNzZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtYnVmZmVyLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzQnVmZmVyRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdXNlciBkYXRhIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aAotdGhlIG9sZGVzdCBidWZmZXIgd2hlbiBhbGwgcGFkcyBoYXZlIGJlZW4gY29sbGVjdGVkLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gb24gRU9TLgotSWYgYSBidWZmZXIgaXMgcGFzc2VkLCB0aGUgY2FsbGJhY2sgb3ducyBhIHJlZmVyZW5jZSBhbmQgbXVzdCB1bnJlZgotaXQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXNldC1idWZmZXItZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xsZWN0cGFkcyB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZnVuY3Rpb24gdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtY2xpcC1mdW5jdGlvbiI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX3NldF9jbGlwX2Z1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb248L3NwYW4+PC9hPiBjbGlwZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5zdGFsbCBhIGNsaXBwaW5nIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHJpZ2h0IGFmdGVyIGEgYnVmZmVyIGlzIHJlY2VpdmVkCi1vbiBhIHBhZCBtYW5hZ2VkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+Ci0uIFNlZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uPC9zcGFuPjwvYT4gZm9yIG1vcmUgaW5mby48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXNldC1jbGlwLWZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29sbGVjdHBhZHMgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNsaXBmdW5jPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGNsaXAgZnVuY3Rpb24gdG8gaW5zdGFsbC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSB0byBwYXNzIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jbGlwX2Z1bmM8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXNldC1jb21wYXJlLWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2NvbXBhcmVfZnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY29sbGVjdF9wYWRzX3NldF9jb21wYXJlX2Z1bmN0aW9uICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbGxlY3RQYWRzPC9zcGFuPjwvYT4gKnBhZHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNDb21wYXJlRnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgdGltZXN0YW1wIGNvbXBhcmlzb24gZnVuY3Rpb24uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29sbGVjdC1wYWRzLXNldC1jb21wYXJlLWZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkcyB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZnVuY3Rpb24gdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGlzIHBhcmFtZXRlciBpcyBhICd1c2VyX2RhdGEnLCBmb3IgY2FsbGJhY2tzOyBtYW55IGJpbmRpbmdzIGNhbiBwYXNzIE5VTEwgaGVyZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5jbG9zdXJlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZXZlbnQtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY29sbGVjdF9wYWRzX3NldF9ldmVudF9mdW5jdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNFdmVudEZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgZXZlbnQgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHVzZXIgZGF0YSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4KLWNvbGxlY3RwYWRzIGhhcyByZWNlaXZlZCBhbiBldmVudCBvcmlnaW5hdGluZyBmcm9tIG9uZSBvZiB0aGUgY29sbGVjdGVkCi1wYWRzLiAgSWYgdGhlIGV2ZW50IGJlaW5nIHByb2Nlc3NlZCBpcyBhIHNlcmlhbGl6ZWQgb25lLCB0aGlzIGNhbGxiYWNrIGlzCi1jYWxsZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPgotIFNUUkVBTV9MT0NLIGhlbGQsIG90aGVyd2lzZSBub3QuICBBcyB0aGlzIGxvY2sgc2hvdWxkIGJlCi1oZWxkIHdoZW4gY2FsbGluZyBhIG51bWJlciBvZiBDb2xsZWN0UGFkcyBmdW5jdGlvbnMsIGl0IHNob3VsZCBiZSBhY3F1aXJlZAotaWYgc28gKHVudXN1YWxseSkgbmVlZGVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZXZlbnQtZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xsZWN0cGFkcyB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZnVuY3Rpb24gdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZmx1c2gtZnVuY3Rpb24iPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hfZnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaF9mdW5jdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNGbHVzaEZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluc3RhbGwgYSBmbHVzaCBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBpbnRlcm5hbAotc3RhdGUgb2YgYWxsIHBhZHMgc2hvdWxkIGJlIGZsdXNoZWQgYXMgcGFydCBvZiBmbHVzaGluZyBzZWVrCi1oYW5kbGluZy4gU2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzRmx1c2hGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzRmx1c2hGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb248L3NwYW4+PC9hPiBmb3IgbW9yZSBpbmZvLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtc2V0LWZsdXNoLWZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29sbGVjdHBhZHMgdG8gdXNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gZmx1c2ggZnVuY3Rpb24gdG8gaW5zdGFsbC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iVGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2NvcGUgY2FsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSB0byBwYXNzIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtcXVlcnktZnVuY3Rpb24iPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19zZXRfcXVlcnlfZnVuY3Rpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY29sbGVjdF9wYWRzX3NldF9xdWVyeV9mdW5jdGlvbiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNRdWVyeUZ1bmN0aW9uPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdXNlcl9kYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCB0aGUgcXVlcnkgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHVzZXIgZGF0YSB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyCi1jb2xsZWN0cGFkcyBoYXMgcmVjZWl2ZWQgYSBxdWVyeSBvcmlnaW5hdGluZyBmcm9tIG9uZSBvZiB0aGUgY29sbGVjdGVkCi1wYWRzLiAgSWYgdGhlIHF1ZXJ5IGJlaW5nIHByb2Nlc3NlZCBpcyBhIHNlcmlhbGl6ZWQgb25lLCB0aGlzIGNhbGxiYWNrIGlzCi1jYWxsZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPgotIFNUUkVBTV9MT0NLIGhlbGQsIG90aGVyd2lzZSBub3QuICBBcyB0aGlzIGxvY2sgc2hvdWxkIGJlCi1oZWxkIHdoZW4gY2FsbGluZyBhIG51bWJlciBvZiBDb2xsZWN0UGFkcyBmdW5jdGlvbnMsIGl0IHNob3VsZCBiZSBhY3F1aXJlZAotaWYgc28gKHVudXN1YWxseSkgbmVlZGVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtcXVlcnktZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xsZWN0cGFkcyB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZnVuY3Rpb24gdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZmx1c2hpbmciPjwvYT48aDM+Z3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmbHVzaGluZzwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGFuZ2UgdGhlIGZsdXNoaW5nIHN0YXRlIG9mIGFsbCB0aGUgcGFkcyBpbiB0aGUgY29sbGVjdGlvbi4gTm8gcGFkCi1pcyBhYmxlIHRvIGFjY2VwdCBhbnltb3JlIGRhdGEgd2hlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2hpbmc8L2NvZGU+PC9lbT4KLSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4uIENhbGxpbmcgdGhpcwotZnVuY3Rpb24gd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Zmx1c2hpbmc8L2NvZGU+PC9lbT4KLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBtYWtlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkczwvY29kZT48L2VtPgotIGFjY2VwdCBkYXRhIGFnYWluLgotQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgZG93bnN0cmVhbSBzdHJlYW1pbmcgKHRocmVhZCkgaXMgbm90IGJsb2NrZWQsCi1lLmcuIGJ5IHNlbmRpbmcgYSBGTFVTSF9TVEFSVCBkb3duc3RyZWFtLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZmx1c2hpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xsZWN0cGFkcyB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmx1c2hpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5kZXNpcmVkIHN0YXRlIG9mIHRoZSBwYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb2xsZWN0LXBhZHMtc2V0LWZ1bmN0aW9uIj48L2E+PGgzPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPiAqcGFkczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db2xsZWN0UGFkcyBwcm92aWRlcyBhIGRlZmF1bHQgY29sbGVjdGlvbiBhbGdvcml0aG0gdGhhdCB3aWxsIGRldGVybWluZQotdGhlIG9sZGVzdCBidWZmZXIgYXZhaWxhYmxlIG9uIGFsbCBvZiBpdHMgcGFkcywgYW5kIHRoZW4gZGVsZWdhdGUKLXRvIGEgY29uZmlndXJlZCBjYWxsYmFjay4KLUhvd2V2ZXIsIGlmIGNpcmN1bXN0YW5jZXMgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYW5kL29yIG1vcmUgY29udHJvbAotaXMgZGVzaXJlZCwgdGhpcyBzZXRzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgaW5zdGVhZCB3aGVuCi1hbGwgdGhlIHBhZHMgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gaGF2ZSBidWZmZXJzIHF1ZXVlZC4KLUV2aWRlbnRseSwgdGhpcyBjYWxsYmFjayBpcyBub3QgY29tcGF0aWJsZSB3aXRoCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1idWZmZXItZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9idWZmZXJfZnVuY3Rpb27CoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbigpPC9jb2RlPjwvYT4gY2FsbGJhY2suCi1JZiB0aGlzIGNhbGxiYWNrIGlzIHNldCwgdGhlIGZvcm1lciB3aWxsIGJlIHVuc2V0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZnVuY3Rpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjb2xsZWN0cGFkcyB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiB0aGUgZnVuY3Rpb24gdG8gc2V0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJUaGUgY2FsbGJhY2sgaXMgdmFsaWQgb25seSBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5zY29wZSBjYWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtd2FpdGluZyI+PC9hPjxoMz5nc3RfY29sbGVjdF9wYWRzX3NldF93YWl0aW5nwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+ICpwYWRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiB3YWl0aW5nPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgYSBwYWQgdG8gd2FpdGluZyBvciBub24td2FpdGluZyBtb2RlLCBpZiBhdCBsZWFzdCB0aGlzIHBhZAotaGFzIG5vdCBiZWVuIGNyZWF0ZWQgd2l0aCBsb2NrZWQgd2FpdGluZyBzdGF0ZSwKLWluIHdoaWNoIGNhc2Ugbm90aGluZyBoYXBwZW5zLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWRzPC9jb2RlPjwvZW0+Ci0gU1RSRUFNX0xPQ0sgaGVsZCwgc3VjaCBhcwotaW4gdGhlIGNhbGxiYWNrLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNvbGxlY3QtcGFkcy1zZXQtd2FpdGluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbGxlY3RwYWRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZGF0YSB0byB1c2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d2FpdGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgcGFkIHNob3VsZCBvcGVyYXRlCi1pbiB3YWl0aW5nIG9yIG5vbi13YWl0aW5nIG1vZGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RDb2xsZWN0UGFkczwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdENvbGxlY3RQYWRzIHsKLSAgR1NMaXN0ICAgICAgICAqZGF0YTsgICAgICAgICAgICAgICAgICAvKiBsaXN0IG9mIENvbGxlY3REYXRhIGl0ZW1zICovCi19OwotPC9wcmU+Ci08cD5Db2xsZWN0cGFkcyBvYmplY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Q29sbGVjdFBhZHMubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TaW5nbHktTGlua2VkLUxpc3RzLmh0bWwjR1NMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NMaXN0PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RDb2xsZWN0UGFkcy1zdHJ1Y3QuZGF0YSI+PC9hPmRhdGE8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+IG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdERhdGE8L3NwYW4+PC9hPiBtYW5hZ2VkCi1ieSB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb2xsZWN0UGFkczwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3RCYXNlLkNvbGxlY3REYXRhXTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0RGF0YSI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q29sbGVjdERhdGE8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDb2xsZWN0RGF0YSB7Ci0gIC8qIHdpdGggU1RSRUFNX0xPQ0sgb2YgQGNvbGxlY3QgKi8KLSAgR3N0Q29sbGVjdFBhZHMgICAgICAgICpjb2xsZWN0OwotICBHc3RQYWQgICAgICAgICAgICAgICAgKnBhZDsKLSAgR3N0QnVmZmVyICAgICAgICAgICAgICpidWZmZXI7Ci0gIGd1aW50ICAgICAgICAgICAgICAgICAgcG9zOwotICBHc3RTZWdtZW50ICAgICAgICAgICAgIHNlZ21lbnQ7Ci0KLSAgICAgIGdpbnQ2NCBkdHM7Ci19OwotPC9wcmU+Ci08cD5TdHJ1Y3R1cmUgdXNlZCBieSB0aGUgY29sbGVjdF9wYWRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENvbGxlY3REYXRhLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbGxlY3REYXRhLmNvbGxlY3QiPjwvYT5jb2xsZWN0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5vd25lciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29sbGVjdERhdGEucGFkIj48L2E+cGFkPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBtYW5hZ2VkIGJ5IHRoaXMgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29sbGVjdERhdGEuYnVmZmVyIj48L2E+YnVmZmVyPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5jdXJyZW50bHkgcXVldWVkIGJ1ZmZlci48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29sbGVjdERhdGEucG9zIj48L2E+cG9zPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5wb3NpdGlvbiBpbiB0aGUgYnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iLi4vaHRtbC9Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbGxlY3REYXRhLnNlZ21lbnQiPjwvYT5zZWdtZW50PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5sYXN0IHNlZ21lbnQgcmVjZWl2ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29sbGVjdERhdGEuZHRzIj48L2E+ZHRzPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2lnbmVkIHZlcnNpb24gb2YgdGhlIERUUyBjb252ZXJ0ZWQgdG8gcnVubmluZyB0aW1lLiBUbyBhY2Nlc3MKLXRoaXMgbWVtZWJlciwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtRFRTOkNBUFMiIHRpdGxlPSJHU1RfQ09MTEVDVF9QQURTX0RUUygpIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0NPTExFQ1RfUEFEU19EVFM8L2NvZGU+PC9hPiBtYWNyby4gKFNpbmNlIDEuNik8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbGxlY3RQYWRzU3RhdGVGbGFncyI+PC9hPjxoMz5lbnVtIEdzdENvbGxlY3RQYWRzU3RhdGVGbGFnczwvaDM+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb2xsZWN0UGFkc1N0YXRlRmxhZ3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtQ09MTEVDVC1QQURTLVNUQVRFLUVPUzpDQVBTIj48L2E+R1NUX0NPTExFQ1RfUEFEU19TVEFURV9FT1M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2V0IGlmIGNvbGxlY3RkYXRhJ3MgcGFkIGlzIEVPUy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPTExFQ1QtUEFEUy1TVEFURS1GTFVTSElORzpDQVBTIj48L2E+R1NUX0NPTExFQ1RfUEFEU19TVEFURV9GTFVTSElORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5TZXQgaWYgY29sbGVjdGRhdGEncyBwYWQgaXMgZmx1c2hpbmcuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DT0xMRUNULVBBRFMtU1RBVEUtTkVXLVNFR01FTlQ6Q0FQUyI+PC9hPkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfTkVXX1NFR01FTlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2V0IGlmIGNvbGxlY3RkYXRhJ3MgcGFkIHJlY2VpdmVkIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc2VnbWVudCBldmVudC48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPTExFQ1QtUEFEUy1TVEFURS1XQUlUSU5HOkNBUFMiPjwvYT5HU1RfQ09MTEVDVF9QQURTX1NUQVRFX1dBSVRJTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2V0IGlmIGNvbGxlY3RkYXRhJ3MgcGFkIG11c3QgYmUgd2FpdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdoZW4gY29sbGVjdGluZy48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUNPTExFQ1QtUEFEUy1TVEFURS1MT0NLRUQ6Q0FQUyI+PC9hPkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfTE9DS0VEPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlNldCBjb2xsZWN0ZGF0YSdzIHBhZCBXQUlUSU5HIHN0YXRlIG11c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmUgY2hhbmdlZC4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzU3RhdGVGbGFncyIgdGl0bGU9ImVudW0gR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzPC9zcGFuPjwvYT4gaW5kaWNhdGUgcHJpdmF0ZSBzdGF0ZSBvZiBhIGNvbGxlY3RkYXRhKCdzIHBhZCkuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3REaXJlY3RDb250cm9sQmluZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTIwMzExLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL0dzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdERpcmVjdENvbnRyb2xCaW5kaW5nOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RBUkdCQ29udHJvbEJpbmRpbmciPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdERpcmVjdENvbnRyb2xCaW5kaW5nLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdERpcmVjdENvbnRyb2xCaW5kaW5nLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3REaXJlY3RDb250cm9sQmluZGluZyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLnRvcF9vZl9wYWdlIj48L2E+R3N0RGlyZWN0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9oMj4KLTxwPkdzdERpcmVjdENvbnRyb2xCaW5kaW5nIOKAlCBkaXJlY3QgYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2VzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3RDb250cm9sQmluZGluZy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbEJpbmRpbmc8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCNnc3QtZGlyZWN0LWNvbnRyb2wtYmluZGluZy1uZXciIHRpdGxlPSJnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXfCoCgpIj5nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWRpcmVjdC1jb250cm9sLWJpbmRpbmctbmV3LWFic29sdXRlIiB0aXRsZT0iZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlwqAoKSI+Z3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5odG1sI0dzdERpcmVjdENvbnRyb2xCaW5kaW5nLS1hYnNvbHV0ZSIgdGl0bGU9IlRoZSDigJxhYnNvbHV0ZeKAnSBwcm9wZXJ0eSI+YWJzb2x1dGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3REaXJlY3RDb250cm9sQmluZGluZy0tY29udHJvbC1zb3VyY2UiIHRpdGxlPSJUaGUg4oCcY29udHJvbC1zb3VyY2XigJ0gcHJvcGVydHkiPmNvbnRyb2wtc291cmNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctc3RydWN0Ij5Hc3RDb250cm9sQmluZGluZzwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3REaXJlY3RDb250cm9sQmluZGluZwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7bGlicy9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+QSB2YWx1ZSBtYXBwaW5nIG9iamVjdCB0aGF0IGF0dGFjaGVzIGNvbnRyb2wgc291cmNlcyB0byBnb2JqZWN0IHByb3BlcnRpZXMuIEl0Ci13aWxsIG1hcCB0aGUgY29udHJvbCB2YWx1ZXMgZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBwcm9wZXJ0eSByYW5nZS4gSWYgYQotbm9uLWFic29sdXRlIGRpcmVjdCBjb250cm9sIGJpbmRpbmcgaXMgdXNlZCwgdGhlIHZhbHVlIHJhbmdlIFswLjAgLi4uIDEuMF0KLWlzIG1hcHBlZCB0byBmdWxsIHRhcmdldCBwcm9wZXJ0eSByYW5nZSwgYW5kIGFsbCB2YWx1ZXMgb3V0c2lkZSB0aGUgcmFuZ2UKLXdpbGwgYmUgY2xpcHBlZC4gQW4gYWJzb2x1dGUgY29udHJvbCBiaW5kaW5nIHdpbGwgbm90IGRvIGFueSB2YWx1ZQotdHJhbnNmb3JtYXRpb25zLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kaXJlY3QtY29udHJvbC1iaW5kaW5nLW5ldyI+PC9hPjxoMz5nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT7CoCoKLWdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmplY3Q8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpjczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgY29udHJvbC1iaW5kaW5nIHRoYXQgYXR0YWNoZXMgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IHRvIHRoZQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiBwcm9wZXJ0eS4gSXQgd2lsbCBtYXAgdGhlIGNvbnRyb2wgc291cmNlIHJhbmdlIFswLjAgLi4uIDEuMF0gdG8KLXRoZSBmdWxsIHRhcmdldCBwcm9wZXJ0eSByYW5nZSwgYW5kIGNsaXAgYWxsIHZhbHVlcyBvdXRzaWRlIHRoaXMgcmFuZ2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRpcmVjdC1jb250cm9sLWJpbmRpbmctbmV3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgb2YgdGhlIHByb3BlcnR5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb3BlcnR5X25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcHJvcGVydHktbmFtZSB0byBhdHRhY2ggdGhlIGNvbnRyb2wgc291cmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbnRyb2wgc291cmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGlyZWN0LWNvbnRyb2wtYmluZGluZy1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REaXJlY3RDb250cm9sQmluZGluZzwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJBbGlhcyBmb3IgdHJhbnNmZXIgbm9uZSwgdXNlZCBmb3Igb2JqZWN0cyB3aXRoIGZsb2F0aW5nIHJlZnMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZmxvYXRpbmc8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kaXJlY3QtY29udHJvbC1iaW5kaW5nLW5ldy1hYnNvbHV0ZSI+PC9hPjxoMz5nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXdfYWJzb2x1dGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT7CoCoKLWdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ld19hYnNvbHV0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gKm9iamVjdDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpwcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKmNzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyBjb250cm9sLWJpbmRpbmcgdGhhdCBhdHRhY2hlcyB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4gdG8gdGhlCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHByb3BlcnR5LiBJdCB3aWxsIGRpcmVjdGx5IG1hcCB0aGUgY29udHJvbCBzb3VyY2UgdmFsdWVzIHRvIHRoZQotdGFyZ2V0IHByb3BlcnR5IHJhbmdlIHdpdGhvdXQgYW55IHRyYW5zZm9ybWF0aW9ucy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGlyZWN0LWNvbnRyb2wtYmluZGluZy1uZXctYWJzb2x1dGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCBvZiB0aGUgcHJvcGVydHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvcGVydHlfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwcm9wZXJ0eS1uYW1lIHRvIGF0dGFjaCB0aGUgY29udHJvbCBzb3VyY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY29udHJvbCBzb3VyY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kaXJlY3QtY29udHJvbC1iaW5kaW5nLW5ldy1hYnNvbHV0ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3REaXJlY3RDb250cm9sQmluZGluZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERpcmVjdENvbnRyb2xCaW5kaW5nPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkFsaWFzIGZvciB0cmFuc2ZlciBub25lLCB1c2VkIGZvciBvYmplY3RzIHdpdGggZmxvYXRpbmcgcmVmcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmctLWFic29sdXRlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYWJzb2x1dGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGFic29sdXRl4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hldGhlciB0aGUgY29udHJvbCB2YWx1ZXMgYXJlIGFic29sdXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REaXJlY3RDb250cm9sQmluZGluZy0tY29udHJvbC1zb3VyY2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjb250cm9sLXNvdXJjZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29udHJvbC1zb3VyY2XigJ0gICAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgY29udHJvbCBzb3VyY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM1Njc1OC4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgRHluYW1pYyBQYXJhbWV0ZXIgQ29udHJvbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvaDI+Ci08cD5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSDigJQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLW5ldyIgdGl0bGU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ld8KgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uTW9kZSIgdGl0bGU9ImVudW0gR3N0SW50ZXJwb2xhdGlvbk1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uTW9kZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UtLW1vZGUiIHRpdGxlPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSI+bW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGlvbk1vZGUiIHRpdGxlPSJlbnVtIEdzdEludGVycG9sYXRpb25Nb2RlIj5Hc3RJbnRlcnBvbGF0aW9uTW9kZTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+R3N0Q29udHJvbFNvdXJjZTwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2xpYnMvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IGlzIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4sIHRoYXQgaW50ZXJwb2xhdGVzIHZhbHVlcyBiZXR3ZWVuIHVzZXItZ2l2ZW4KLWNvbnRyb2wgcG9pbnRzLiBJdCBzdXBwb3J0cyBzZXZlcmFsIGludGVycG9sYXRpb24gbW9kZXMgYW5kIHByb3BlcnR5IHR5cGVzLjwvcD4KLTxwPlRvIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBnZXQgYSBuZXcgaW5zdGFuY2UgYnkgY2FsbGluZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtbmV3IiB0aXRsZT0iZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcoKTwvY29kZT48L2E+LCBiaW5kIGl0IHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR1BhcmFtU3BlYy5odG1sI0dQYXJhbVNwZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HUGFyYW1TcGVjPC9zcGFuPjwvYT4gYW5kIHNldCBzb21lCi1jb250cm9sIHBvaW50cyBieSBjYWxsaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1zZXQiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0KCk8L2NvZGU+PC9hPi48L3A+Ci08cD5BbGwgZnVuY3Rpb25zIGFyZSBNVC1zYWZlLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLW5ldyI+PC9hPjxoMz5nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT7CoCoKLWdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGlzIHJldHVybnMgYSBuZXcsIHVuYm91bmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcsIHVuYm91bmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTs8L3ByZT4KLTxwPlRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uTW9kZSI+PC9hPjxoMz5lbnVtIEdzdEludGVycG9sYXRpb25Nb2RlPC9oMz4KLTxwPlRoZSB2YXJpb3VzIGludGVycG9sYXRpb24gbW9kZXMgYXZhaWxhYmxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEludGVycG9sYXRpb25Nb2RlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUlOVEVSUE9MQVRJT04tTU9ERS1OT05FOkNBUFMiPjwvYT5HU1RfSU5URVJQT0xBVElPTl9NT0RFX05PTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+c3RlcHMtbGlrZSBpbnRlcnBvbGF0aW9uLCBkZWZhdWx0PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1JTlRFUlBPTEFUSU9OLU1PREUtTElORUFSOkNBUFMiPjwvYT5HU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5saW5lYXIgaW50ZXJwb2xhdGlvbjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtSU5URVJQT0xBVElPTi1NT0RFLUNVQklDOkNBUFMiPjwvYT5HU1RfSU5URVJQT0xBVElPTl9NT0RFX0NVQklDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmN1YmljIGludGVycG9sYXRpb24gKG5hdHVyYWwpLCBtYXkgb3ZlcnNob290Ci0gIHRoZSBtaW4gb3IgbWF4IHZhbHVlcyBzZXQgYnkgdGhlIGNvbnRyb2wgcG9pbnQsIGJ1dCBpcyBtb3JlICdjdXJ2eSc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUlOVEVSUE9MQVRJT04tTU9ERS1DVUJJQy1NT05PVE9OSUM6Q0FQUyI+PC9hPkdTVF9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUNfTU9OT1RPTklDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPm1vbm90b25pYyBjdWJpYyBpbnRlcnBvbGF0aW9uLCB3aWxsIG5vdAotICBwcm9kdWNlIGFueSB2YWx1ZXMgb3V0c2lkZSBvZiB0aGUgbWluLW1heCByYW5nZSBzZXQgYnkgdGhlIGNvbnRyb2wgcG9pbnRzCi0gIChTaW5jZSAxLjgpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS0tbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vZGXigJ0gICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uTW9kZSIgdGl0bGU9ImVudW0gR3N0SW50ZXJwb2xhdGlvbk1vZGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJbnRlcnBvbGF0aW9uTW9kZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JbnRlcnBvbGF0aW9uIG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3RMRk9Db250cm9sU291cmNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ODI1NzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RMRk9Db250cm9sU291cmNlOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdExGT0NvbnRyb2xTb3VyY2UuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdExGT0NvbnRyb2xTb3VyY2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0TEZPQ29udHJvbFNvdXJjZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9oMj4KLTxwPkdzdExGT0NvbnRyb2xTb3VyY2Ug4oCUIExGTyBjb250cm9sIHNvdXJjZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNnc3QtbGZvLWNvbnRyb2wtc291cmNlLW5ldyIgdGl0bGU9ImdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3wqAoKSI+Z3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tYW1wbGl0dWRlIiB0aXRsZT0iVGhlIOKAnGFtcGxpdHVkZeKAnSBwcm9wZXJ0eSI+YW1wbGl0dWRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS1mcmVxdWVuY3kiIHRpdGxlPSJUaGUg4oCcZnJlcXVlbmN54oCdIHByb3BlcnR5Ij5mcmVxdWVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2UtLW9mZnNldCIgdGl0bGU9IlRoZSDigJxvZmZzZXTigJ0gcHJvcGVydHkiPm9mZnNldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tdGltZXNoaWZ0IiB0aXRsZT0iVGhlIOKAnHRpbWVzaGlmdOKAnSBwcm9wZXJ0eSI+dGltZXNoaWZ0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9XYXZlZm9ybSIgdGl0bGU9ImVudW0gR3N0TEZPV2F2ZWZvcm0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RMRk9XYXZlZm9ybTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS13YXZlZm9ybSIgdGl0bGU9IlRoZSDigJx3YXZlZm9ybeKAnSBwcm9wZXJ0eSI+d2F2ZWZvcm08L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPV2F2ZWZvcm0iIHRpdGxlPSJlbnVtIEdzdExGT1dhdmVmb3JtIj5Hc3RMRk9XYXZlZm9ybTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij5Hc3RDb250cm9sU291cmNlPC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdExGT0NvbnRyb2xTb3VyY2UKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7bGlicy9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IGlzIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4sIHRoYXQgcHJvdmlkZXMgc2V2ZXJhbCBwZXJpb2RpYwotd2F2ZWZvcm1zIGFzIGNvbnRyb2wgdmFsdWVzLjwvcD4KLTxwPlRvIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBnZXQgYSBuZXcgaW5zdGFuY2UgYnkgY2FsbGluZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNnc3QtbGZvLWNvbnRyb2wtc291cmNlLW5ldyIgdGl0bGU9ImdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldygpPC9jb2RlPjwvYT4sIGJpbmQgaXQgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HUGFyYW1TcGVjLmh0bWwjR1BhcmFtU3BlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdQYXJhbVNwZWM8L3NwYW4+PC9hPiBhbmQgc2V0IHRoZSByZWxldmFudAotcHJvcGVydGllcy48L3A+Ci08cD5BbGwgZnVuY3Rpb25zIGFyZSBNVC1zYWZlLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWxmby1jb250cm9sLXNvdXJjZS1uZXciPjwvYT48aDM+Z3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT7CoCoKLWdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoaXMgcmV0dXJucyBhIG5ldywgdW5ib3VuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbGZvLWNvbnRyb2wtc291cmNlLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3LCB1bmJvdW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2Utc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RMRk9Db250cm9sU291cmNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TEZPQ29udHJvbFNvdXJjZTs8L3ByZT4KLTxwPlRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDb250cm9sU291cmNlPC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RMRk9XYXZlZm9ybSI+PC9hPjxoMz5lbnVtIEdzdExGT1dhdmVmb3JtPC9oMz4KLTxwPlRoZSB2YXJpb3VzIHdhdmVmb3JtIG1vZGVzIGF2YWlsYWJsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RMRk9XYXZlZm9ybS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MRk8tV0FWRUZPUk0tU0lORTpDQVBTIj48L2E+R1NUX0xGT19XQVZFRk9STV9TSU5FPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNpbmUgd2F2ZWZvcm08L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxGTy1XQVZFRk9STS1TUVVBUkU6Q0FQUyI+PC9hPkdTVF9MRk9fV0FWRUZPUk1fU1FVQVJFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNxdWFyZSB3YXZlZm9ybTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTEZPLVdBVkVGT1JNLVNBVzpDQVBTIj48L2E+R1NUX0xGT19XQVZFRk9STV9TQVc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+c2F3IHdhdmVmb3JtPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1MRk8tV0FWRUZPUk0tUkVWRVJTRS1TQVc6Q0FQUyI+PC9hPkdTVF9MRk9fV0FWRUZPUk1fUkVWRVJTRV9TQVc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cmV2ZXJzZSBzYXcgd2F2ZWZvcm08L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUxGTy1XQVZFRk9STS1UUklBTkdMRTpDQVBTIj48L2E+R1NUX0xGT19XQVZFRk9STV9UUklBTkdMRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD50cmlhbmdsZSB3YXZlZm9ybTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlLS1hbXBsaXR1ZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxhbXBsaXR1ZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGFtcGxpdHVkZeKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPlNwZWNpZmllcyB0aGUgYW1wbGl0dWRlIGZvciB0aGUgd2F2ZWZvcm0gb2YgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS0tZnJlcXVlbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZnJlcXVlbmN54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmcmVxdWVuY3nigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TcGVjaWZpZXMgdGhlIGZyZXF1ZW5jeSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgd2F2ZWZvcm0KLW9mIHRoaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RMRk9Db250cm9sU291cmNlPC9zcGFuPjwvYT4uIEl0IHNob3VsZCBiZSBsYXJnZSBlbm91Z2gKLXNvIHRoYXQgdGhlIHBlcmlvZCBpcyBsb25nZXIgdGhhbiBvbmUgbmFub3NlY29uZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUlORE9VQkxFPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TEZPQ29udHJvbFNvdXJjZS0tb2Zmc2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb2Zmc2V04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxvZmZzZXTigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TcGVjaWZpZXMgdGhlIHZhbHVlIG9mZnNldCBmb3IgdGhlIHdhdmVmb3JtIG9mIHRoaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RMRk9Db250cm9sU291cmNlPC9zcGFuPjwvYT4uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2UtLXRpbWVzaGlmdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRpbWVzaGlmdOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGltZXNoaWZ04oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U3BlY2lmaWVzIHRoZSB0aW1lc2hpZnQgdG8gdGhlIHJpZ2h0IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSB3YXZlZm9ybQotb2YgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBpbiBuYW5vc2Vjb25kcy48L3A+Ci08cD5UbyBnZXQgYSBuIG5hbm9zZWNvbmQgc2hpZnQgdG8gdGhlIGxlZnQgdXNlCi0iKEdTVF9TRUNPTkQgLyBmcmVxdWVuY3kpIC0gbiIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdExGT0NvbnRyb2xTb3VyY2UtLXdhdmVmb3JtIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcd2F2ZWZvcm3igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHdhdmVmb3Jt4oCdICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT1dhdmVmb3JtIiB0aXRsZT0iZW51bSBHc3RMRk9XYXZlZm9ybSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT1dhdmVmb3JtPC9zcGFuPjwvYT48L3ByZT4KLTxwPlNwZWNpZmllcyB0aGUgd2F2ZWZvcm0gdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdExGT0NvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogR1NUX0xGT19XQVZFRk9STV9TSU5FPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdE5ldENsaWVudENsb2NrLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9Hc3ROZXRDbGllbnRDbG9jay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGNiYWQzLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL0dzdE5ldENsaWVudENsb2NrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdE5ldENsaWVudENsb2NrOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLW5ldC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwiIHRpdGxlPSJHc3ROZXRBZGRyZXNzTWV0YSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sIiB0aXRsZT0iR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE5ldENsaWVudENsb2NrLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3ROZXRDbGllbnRDbG9jay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3ROZXRDbGllbnRDbG9jay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLnRvcF9vZl9wYWdlIj48L2E+R3N0TmV0Q2xpZW50Q2xvY2s8L3NwYW4+PC9oMj4KLTxwPkdzdE5ldENsaWVudENsb2NrIOKAlCBTcGVjaWFsIGNsb2NrIHRoYXQgc3luY2hyb25pemVzIHRvIGEgcmVtb3RlIHRpbWUKLSAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNnc3QtbmV0LWNsaWVudC1jbG9jay1uZXciIHRpdGxlPSJnc3RfbmV0X2NsaWVudF9jbG9ja19uZXfCoCgpIj5nc3RfbmV0X2NsaWVudF9jbG9ja19uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjZ3N0LW50cC1jbG9jay1uZXciIHRpdGxlPSJnc3RfbnRwX2Nsb2NrX25ld8KgKCkiPmdzdF9udHBfY2xvY2tfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2sucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLWFkZHJlc3MiIHRpdGxlPSJUaGUg4oCcYWRkcmVzc+KAnSBwcm9wZXJ0eSI+YWRkcmVzczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLS1iYXNlLXRpbWUiIHRpdGxlPSJUaGUg4oCcYmFzZS10aW1l4oCdIHByb3BlcnR5Ij5iYXNlLXRpbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdXMuaHRtbCNHc3RCdXMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVzPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tYnVzIiB0aXRsZT0iVGhlIOKAnGJ1c+KAnSBwcm9wZXJ0eSI+YnVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLS1pbnRlcm5hbC1jbG9jayIgdGl0bGU9IlRoZSDigJxpbnRlcm5hbC1jbG9ja+KAnSBwcm9wZXJ0eSI+aW50ZXJuYWwtY2xvY2s8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLW1pbmltdW0tdXBkYXRlLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnG1pbmltdW0tdXBkYXRlLWludGVydmFs4oCdIHByb3BlcnR5Ij5taW5pbXVtLXVwZGF0ZS1pbnRlcnZhbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLS1wb3J0IiB0aXRsZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiPnBvcnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tcm91bmQtdHJpcC1saW1pdCIgdGl0bGU9IlRoZSDigJxyb3VuZC10cmlwLWxpbWl04oCdIHByb3BlcnR5Ij5yb3VuZC10cmlwLWxpbWl0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3ROdHBDbG9jayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJ0eXBlZGVmX2tleXdvcmQiPnR5cGVkZWY8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROdHBDbG9jayI+R3N0TnRwQ2xvY2s8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2sub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+R3N0Q2xvY2s8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLXN0cnVjdCI+R3N0U3lzdGVtQ2xvY2s8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdE5ldENsaWVudENsb2NrCi0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3ROdHBDbG9jawotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L25ldC9nc3RuZXQuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0Q2xpZW50Q2xvY2s8L3NwYW4+PC9hPiBpbXBsZW1lbnRzIGEgY3VzdG9tIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRoYXQgc3luY2hyb25pemVzIGl0cyB0aW1lCi10byBhIHJlbW90ZSB0aW1lIHByb3ZpZGVyIHN1Y2ggYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVByb3ZpZGVyPC9zcGFuPjwvYT4uIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE50cENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TnRwQ2xvY2s8L3NwYW4+PC9hPgotaW1wbGVtZW50cyBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IHRoYXQgc3luY2hyb25pemVzIGl0cyB0aW1lIHRvIGEgcmVtb3RlIE5UUHY0IHNlcnZlci48L3A+Ci08cD5BIG5ldyBjbG9jayBpcyBjcmVhdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjZ3N0LW5ldC1jbGllbnQtY2xvY2stbmV3IiB0aXRsZT0iZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbmV0X2NsaWVudF9jbG9ja19uZXcoKTwvY29kZT48L2E+IG9yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNnc3QtbnRwLWNsb2NrLW5ldyIgdGl0bGU9ImdzdF9udHBfY2xvY2tfbmV3wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbnRwX2Nsb2NrX25ldygpPC9jb2RlPjwvYT4sIHdoaWNoIHRha2VzIHRoZSBhZGRyZXNzIGFuZCBwb3J0IG9mIHRoZSByZW1vdGUgdGltZQotcHJvdmlkZXIgYWxvbmcgd2l0aCBhIG5hbWUgYW5kIGFuIGluaXRpYWwgdGltZS48L3A+Ci08cD5UaGlzIGNsb2NrIHdpbGwgcG9sbCB0aGUgdGltZSBwcm92aWRlciBhbmQgd2lsbCB1cGRhdGUgaXRzIGNhbGlicmF0aW9uCi1wYXJhbWV0ZXJzIGJhc2VkIG9uIHRoZSBsb2NhbCBhbmQgcmVtb3RlIG9ic2VydmF0aW9ucy48L3A+Ci08cD5UaGUgInJvdW5kLXRyaXAiIHByb3BlcnR5IGxpbWl0cyB0aGUgbWF4aW11bSByb3VuZCB0cmlwIHBhY2tldHMgY2FuIHRha2UuPC9wPgotPHA+VmFyaW91cyBwYXJhbWV0ZXJzIG9mIHRoZSBjbG9jayBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSBwYXJlbnQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4KLSJ0aW1lb3V0IiwgIndpbmRvdy1zaXplIiBhbmQgIndpbmRvdy10aHJlc2hvbGQiIG9iamVjdCBwcm9wZXJ0aWVzLjwvcD4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldENsaWVudENsb2NrPC9zcGFuPjwvYT4gYW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE50cENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TnRwQ2xvY2s8L3NwYW4+PC9hPiBpcyB0eXBpY2FsbHkgc2V0IG9uIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT4gd2l0aAotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS11c2UtY2xvY2siPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BpcGVsaW5lX3VzZV9jbG9jaygpPC9jb2RlPjwvYT4uPC9wPgotPHA+SWYgeW91IHNldCBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVzLmh0bWwjR3N0QnVzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IG9uIHRoZSBjbG9jayB2aWEgdGhlICJidXMiIG9iamVjdCBwcm9wZXJ0eSwgaXQgd2lsbAotc2VuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NUX01FU1NBR0VfRUxFTUVOVDwvY29kZT48L2VtPgotIG1lc3NhZ2VzIHdpdGggYW4gYXR0YWNoZWQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gY29udGFpbmluZwotc3RhdGlzdGljcyBhYm91dCBjbG9jayBhY2N1cmFjeSBhbmQgbmV0d29yayB0cmFmZmljLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2suZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1uZXQtY2xpZW50LWNsb2NrLW5ldyI+PC9hPjxoMz5nc3RfbmV0X2NsaWVudF9jbG9ja19uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCoKLWdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnJlbW90ZV9hZGRyZXNzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHJlbW90ZV9wb3J0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGJhc2VfdGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgPHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldENsaWVudEludGVybmFsQ2xvY2s8L3NwYW4+IHRoYXQgd2lsbCByZXBvcnQgdGhlIHRpbWUKLXByb3ZpZGVkIGJ5IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPiBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVtb3RlX2FkZHJlc3M8L2NvZGU+PC9lbT4KLSBhbmQgCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVtb3RlX3BvcnQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbmV0LWNsaWVudC1jbG9jay1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbmFtZSBmb3IgdGhlIGNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlbW90ZV9hZGRyZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGFkZHJlc3Mgb3IgaG9zdG5hbWUgb2YgdGhlIHJlbW90ZSBjbG9jayBwcm92aWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZW1vdGVfcG9ydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwb3J0IG9mIHRoZSByZW1vdGUgY2xvY2sgcHJvdmlkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmFzZV90aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aW5pdGlhbCB0aW1lIG9mIHRoZSBjbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW5ldC1jbGllbnQtY2xvY2stbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdGhhdCByZWNlaXZlcyBhIHRpbWUgZnJvbSB0aGUgcmVtb3RlCi1jbG9jay48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW50cC1jbG9jay1uZXciPjwvYT48aDM+Z3N0X250cF9jbG9ja19uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCoKLWdzdF9udHBfY2xvY2tfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpyZW1vdGVfYWRkcmVzczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHJlbW90ZV9wb3J0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gYmFzZV90aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROdHBDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE50cENsb2NrPC9zcGFuPjwvYT4gdGhhdCB3aWxsIHJlcG9ydCB0aGUgdGltZSBwcm92aWRlZCBieQotdGhlIE5UUHY0IHNlcnZlciBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVtb3RlX2FkZHJlc3M8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlbW90ZV9wb3J0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW50cC1jbG9jay1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbmFtZSBmb3IgdGhlIGNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlbW90ZV9hZGRyZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGFkZHJlc3Mgb3IgaG9zdG5hbWUgb2YgdGhlIHJlbW90ZSBjbG9jayBwcm92aWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZW1vdGVfcG9ydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwb3J0IG9mIHRoZSByZW1vdGUgY2xvY2sgcHJvdmlkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmFzZV90aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+aW5pdGlhbCB0aW1lIG9mIHRoZSBjbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW50cC1jbG9jay1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiB0aGF0IHJlY2VpdmVzIGEgdGltZSBmcm9tIHRoZSByZW1vdGUKLWNsb2NrLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdE5ldENsaWVudENsb2NrPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TmV0Q2xpZW50Q2xvY2s7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldENsaWVudENsb2NrPC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TnRwQ2xvY2siPjwvYT48aDM+R3N0TnRwQ2xvY2s8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3ROZXRDbGllbnRDbG9jayBHc3ROdHBDbG9jazsKLTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay0tYWRkcmVzcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFkZHJlc3PigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGFkZHJlc3PigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIElQIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgcHJvdmlkaW5nIGEgdGltZSBzZXJ2ZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIxMjcuMC4wLjEiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay0tYmFzZS10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYmFzZS10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxiYXNlLXRpbWXigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Jbml0aWFsIHRpbWUgdGhhdCBpcyByZXBvcnRlZCBiZWZvcmUgc3luY2hyb25pemF0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLS1idXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxidXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJ1c+KAnSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdEJ1cy5odG1sI0dzdEJ1cy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+QSBHc3RCdXMgb24gd2hpY2ggdG8gc2VuZCBjbG9jayBzdGF0dXMgaW5mb3JtYXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2stLWludGVybmFsLWNsb2NrIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaW50ZXJuYWwtY2xvY2vigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGludGVybmFsLWNsb2Nr4oCdICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+SW50ZXJuYWwgY2xvY2sgdGhhdCBkaXJlY3RseSBzbGF2ZWQgdG8gdGhlIHJlbW90ZSBjbG9jay48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2stLW1pbmltdW0tdXBkYXRlLWludGVydmFsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWluaW11bS11cGRhdGUtaW50ZXJ2YWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1pbmltdW0tdXBkYXRlLWludGVydmFs4oCdICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1pbmltdW0gcG9sbGluZyBpbnRlcnZhbCBmb3IgcGFja2V0cywgaW4gbmFub3NlY29uZHMoMCA9IG5vIGxpbWl0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNTAwMDAwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE5ldENsaWVudENsb2NrLS1wb3J0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9ydOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9ydOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIHBvcnQgb24gd2hpY2ggdGhlIHJlbW90ZSBzZXJ2ZXIgaXMgbGlzdGVuaW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsNjU1MzVdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNTYzNzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TmV0Q2xpZW50Q2xvY2stLXJvdW5kLXRyaXAtbGltaXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyb3VuZC10cmlwLWxpbWl04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyb3VuZC10cmlwLWxpbWl04oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXhpbXVtIHRvbGVyYWJsZSByb3VuZC10cmlwIGludGVydmFsIGZvciBwYWNrZXRzLCBpbiBuYW5vc2Vjb25kcyAoMCA9IG5vIGxpbWl0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTAwMDAwMDAwMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3ROZXRDbGllbnRDbG9jay5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVByb3ZpZGVyPC9zcGFuPjwvYT4sIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCBiL2RvY3MvbGlicy9odG1sL0dzdE5ldFRpbWVQcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTRiNTU3Li4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL0dzdE5ldFRpbWVQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3ROZXRUaW1lUHJvdmlkZXI6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVBhY2tldCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3ROZXRUaW1lUHJvdmlkZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdE5ldFRpbWVQcm92aWRlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3ROZXRUaW1lUHJvdmlkZXIuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0TmV0VGltZVByb3ZpZGVyLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXIudG9wX29mX3BhZ2UiPjwvYT5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9oMj4KLTxwPkdzdE5ldFRpbWVQcm92aWRlciDigJQgU3BlY2lhbCBvYmplY3QgdGhhdCBleHBvc2VkIHRoZSB0aW1lIG9mIGEgY2xvY2sKLSAgICAgICAgICAgICAgICAgICAgb24gdGhlIG5ldHdvcmsuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldFRpbWVQcm92aWRlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNnc3QtbmV0LXRpbWUtcHJvdmlkZXItbmV3IiB0aXRsZT0iZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ld8KgKCkiPmdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1hY3RpdmUiIHRpdGxlPSJUaGUg4oCcYWN0aXZl4oCdIHByb3BlcnR5Ij5hY3RpdmU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tYWRkcmVzcyIgdGl0bGU9IlRoZSDigJxhZGRyZXNz4oCdIHByb3BlcnR5Ij5hZGRyZXNzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tY2xvY2siIHRpdGxlPSJUaGUg4oCcY2xvY2vigJ0gcHJvcGVydHkiPmNsb2NrPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1wb3J0IiB0aXRsZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiPnBvcnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVByb3ZpZGVyIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3ROZXRUaW1lUHJvdmlkZXIKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXIuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0TmV0VGltZVByb3ZpZGVyIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HSW5pdGFibGUuaHRtbCNHSW5pdGFibGUtc3RydWN0Ij5HSW5pdGFibGU8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L25ldC9nc3RuZXQuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBvYmplY3QgZXhwb3NlcyB0aGUgdGltZSBvZiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IG9uIHRoZSBuZXR3b3JrLjwvcD4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVByb3ZpZGVyPC9zcGFuPjwvYT4gaXMgY3JlYXRlZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNnc3QtbmV0LXRpbWUtcHJvdmlkZXItbmV3IiB0aXRsZT0iZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldygpPC9jb2RlPjwvYT4gd2hpY2gKLXRha2VzIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4sIGFuIGFkZHJlc3MgYW5kIGEgcG9ydCBudW1iZXIgYXMgYXJndW1lbnRzLjwvcD4KLTxwPkFmdGVyIGNyZWF0aW5nIHRoZSBvYmplY3QsIGEgY2xpZW50IGNsb2NrIHN1Y2ggYXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldENsaWVudENsb2NrPC9zcGFuPjwvYT4gY2FuCi1xdWVyeSB0aGUgZXhwb3NlZCBjbG9jayBvdmVyIHRoZSBuZXR3b3JrIGZvciBpdHMgdmFsdWVzLjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPiB0eXBpY2FsbHkgd3JhcHMgdGhlIGNsb2NrIHVzZWQgYnkgYSA8YSBocmVmPSIuLi9odG1sL0dzdFBpcGVsaW5lLmh0bWwjR3N0UGlwZWxpbmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGlwZWxpbmU8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW5ldC10aW1lLXByb3ZpZGVyLW5ldyI+PC9hPjxoMz5nc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldFRpbWVQcm92aWRlcjwvc3Bhbj48L2E+wqAqCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gKmNsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICphZGRyZXNzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiBwb3J0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFsbG93cyBuZXR3b3JrIGNsaWVudHMgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW5ldC10aW1lLXByb3ZpZGVyLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gdG8gZXhwb3J0IG92ZXIgdGhlIG5ldHdvcms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRkcmVzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhbiBhZGRyZXNzIHRvIGJpbmQgb24gYXMgYSBkb3R0ZWQgcXVhZAotKHh4eC54eHgueHh4Lnh4eCksIElQdjYgYWRkcmVzcywgb3IgTlVMTCB0byBiaW5kIHRvIGFsbCBhZGRyZXNzZXMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBvcnQgdG8gYmluZCBvbiwgb3IgMCB0byBsZXQgdGhlIGtlcm5lbCBjaG9vc2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wcm92aWRlci1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQcm92aWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQcm92aWRlcjwvc3Bhbj48L2E+LCBvciBOVUxMIG9uIGVycm9yPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXItc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3ROZXRUaW1lUHJvdmlkZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3ROZXRUaW1lUHJvdmlkZXI7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVByb3ZpZGVyPC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXIucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci0tYWN0aXZlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYWN0aXZl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhY3RpdmXigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRSVUUgaWYgdGhlIGNsb2NrIHdpbGwgcmVzcG9uZCB0byBxdWVyaWVzIG92ZXIgdGhlIG5ldHdvcmsuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci0tYWRkcmVzcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFkZHJlc3PigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGFkZHJlc3PigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGFkZHJlc3MgdG8gYmluZCBvbiwgYXMgYSBkb3R0ZWQgcXVhZCAoeC54LngueCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIjAuMC4wLjAiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXItLWNsb2NrIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xvY2vigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNsb2Nr4oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGNsb2NrIHRvIGV4cG9ydCBvdmVyIHRoZSBuZXR3b3JrLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TmV0VGltZVByb3ZpZGVyLS1wb3J0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9ydOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9ydOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIHBvcnQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0cyBmcm9tLCAwPWFsbG9jYXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCw2NTUzNV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1NjM3PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdE5ldFRpbWVQcm92aWRlci5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldENsaWVudENsb2NrPC9zcGFuPjwvYT4sIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGlwZWxpbmUuaHRtbCNHc3RQaXBlbGluZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQaXBlbGluZTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3RQdHBDbG9jay5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0UHRwQ2xvY2suaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhNjk0ZS4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9Hc3RQdHBDbG9jay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTUxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RQdHBDbG9jazogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBOZXR3b3JrIENsYXNzZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQcm92aWRlciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENoZWNrIFVuaXQgVGVzdGluZyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQdHBDbG9jay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UHRwQ2xvY2sub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0UHRwQ2xvY2sucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLW5ldC5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdFB0cENsb2NrIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UHRwQ2xvY2sudG9wX29mX3BhZ2UiPjwvYT5Hc3RQdHBDbG9jazwvc3Bhbj48L2gyPgotPHA+R3N0UHRwQ2xvY2sg4oCUIFNwZWNpYWwgY2xvY2sgdGhhdCBzeW5jaHJvbml6ZXMgdG8gYSByZW1vdGUgdGltZQotICAgICAgICAgICAgICAgICAgICBwcm92aWRlciB2aWEgUFRQIChJRUVFMTU4ODoyMDA4KS48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHRwQ2xvY2suZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtaW5pdCIgdGl0bGU9ImdzdF9wdHBfaW5pdMKgKCkiPmdzdF9wdHBfaW5pdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1kZWluaXQiIHRpdGxlPSJnc3RfcHRwX2RlaW5pdMKgKCkiPmdzdF9wdHBfZGVpbml0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtaXMtaW5pdGlhbGl6ZWQiIHRpdGxlPSJnc3RfcHRwX2lzX2luaXRpYWxpemVkwqAoKSI+Z3N0X3B0cF9pc19pbml0aWFsaXplZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNnc3QtcHRwLWlzLXN1cHBvcnRlZCIgdGl0bGU9ImdzdF9wdHBfaXNfc3VwcG9ydGVkwqAoKSI+Z3N0X3B0cF9pc19zdXBwb3J0ZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1jbG9jay1uZXciIHRpdGxlPSJnc3RfcHRwX2Nsb2NrX25ld8KgKCkiPmdzdF9wdHBfY2xvY2tfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI0dzdFB0cFN0YXRpc3RpY3NDYWxsYmFjayIgdGl0bGU9IkdzdFB0cFN0YXRpc3RpY3NDYWxsYmFja8KgKCkiPipHc3RQdHBTdGF0aXN0aWNzQ2FsbGJhY2s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWxvbmc8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNnc3QtcHRwLXN0YXRpc3RpY3MtY2FsbGJhY2stYWRkIiB0aXRsZT0iZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX2FkZMKgKCkiPmdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtc3RhdGlzdGljcy1jYWxsYmFjay1yZW1vdmUiIHRpdGxlPSJnc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfcmVtb3ZlwqAoKSI+Z3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX3JlbW92ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFB0cENsb2NrLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHc3RQdHBDbG9jay0tZG9tYWluIiB0aXRsZT0iVGhlIOKAnGRvbWFpbuKAnSBwcm9wZXJ0eSI+ZG9tYWluPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3QgT25seTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHc3RQdHBDbG9jay0tZ3JhbmRtYXN0ZXItY2xvY2staWQiIHRpdGxlPSJUaGUg4oCcZ3JhbmRtYXN0ZXItY2xvY2staWTigJ0gcHJvcGVydHkiPmdyYW5kbWFzdGVyLWNsb2NrLWlkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHc3RQdHBDbG9jay0taW50ZXJuYWwtY2xvY2siIHRpdGxlPSJUaGUg4oCcaW50ZXJuYWwtY2xvY2vigJ0gcHJvcGVydHkiPmludGVybmFsLWNsb2NrPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI0dzdFB0cENsb2NrLS1tYXN0ZXItY2xvY2staWQiIHRpdGxlPSJUaGUg4oCcbWFzdGVyLWNsb2NrLWlk4oCdIHByb3BlcnR5Ij5tYXN0ZXItY2xvY2staWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQdHBDbG9jay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHU1QtUFRQLUNMT0NLLUlELU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9QVFBfQ0xPQ0tfSURfTk9ORSI+R1NUX1BUUF9DTE9DS19JRF9OT05FPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHc3RQdHBDbG9jay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI0dTVC1QVFAtU1RBVElTVElDUy1CRVNULU1BU1RFUi1DTE9DSy1TRUxFQ1RFRDpDQVBTIiB0aXRsZT0iR1NUX1BUUF9TVEFUSVNUSUNTX0JFU1RfTUFTVEVSX0NMT0NLX1NFTEVDVEVEIj5HU1RfUFRQX1NUQVRJU1RJQ1NfQkVTVF9NQVNURVJfQ0xPQ0tfU0VMRUNURUQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjR1NULVBUUC1TVEFUSVNUSUNTLU5FVy1ET01BSU4tRk9VTkQ6Q0FQUyIgdGl0bGU9IkdTVF9QVFBfU1RBVElTVElDU19ORVdfRE9NQUlOX0ZPVU5EIj5HU1RfUFRQX1NUQVRJU1RJQ1NfTkVXX0RPTUFJTl9GT1VORDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHU1QtUFRQLVNUQVRJU1RJQ1MtUEFUSC1ERUxBWS1NRUFTVVJFRDpDQVBTIiB0aXRsZT0iR1NUX1BUUF9TVEFUSVNUSUNTX1BBVEhfREVMQVlfTUVBU1VSRUQiPkdTVF9QVFBfU1RBVElTVElDU19QQVRIX0RFTEFZX01FQVNVUkVEPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI0dTVC1QVFAtU1RBVElTVElDUy1USU1FLVVQREFURUQ6Q0FQUyIgdGl0bGU9IkdTVF9QVFBfU1RBVElTVElDU19USU1FX1VQREFURUQiPkdTVF9QVFBfU1RBVElTVElDU19USU1FX1VQREFURUQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHRwQ2xvY2sub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+R3N0Q2xvY2s8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLXN0cnVjdCI+R3N0U3lzdGVtQ2xvY2s8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFB0cENsb2NrCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHRwQ2xvY2suaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvbmV0L25ldC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFB0cENsb2NrLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkdzdFB0cENsb2NrIGltcGxlbWVudHMgYSBQVFAgKElFRUUxNTg4OjIwMDgpIG9yZGluYXJ5IGNsb2NrIGluIHNsYXZlLW9ubHkKLW1vZGUsIHRoYXQgYWxsb3dzIGEgR1N0cmVhbWVyIHBpcGVsaW5lIHRvIHN5bmNocm9uaXplIHRvIGEgUFRQIG5ldHdvcmsKLWNsb2NrIGluIHNvbWUgc3BlY2lmaWMgZG9tYWluLjwvcD4KLTxwPlRoZSBQVFAgc3Vic3lzdGVtIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtaW5pdCIgdGl0bGU9ImdzdF9wdHBfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3B0cF9pbml0KCk8L2NvZGU+PC9hPiwgd2hpY2ggdGhlbiBzdGFydHMKLWEgaGVscGVyIHByb2Nlc3MgdG8gZG8gdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHZpYSB0aGUgUFRQIHBvcnRzLiBUaGlzIGlzCi1yZXF1aXJlZCBhcyBQVFAgbGlzdGVucyBvbiBwb3J0cyAmbHQ7IDEwMjQgYW5kIHRodXMgcmVxdWlyZXMgc3BlY2lhbAotcHJpdmlsZWdlcy4gT25jZSB0aGlzIGhlbHBlciBwcm9jZXNzIGlzIHN0YXJ0ZWQsIHRoZSBtYWluIHByb2Nlc3Mgd2lsbAotc3luY2hyb25pemUgdG8gYWxsIFBUUCBkb21haW5zIHRoYXQgYXJlIGRldGVjdGVkIG9uIHRoZSBzZWxlY3RlZAotaW50ZXJmYWNlcy48L3A+Ci08cD5nc3RfcHRwX2Nsb2NrX25ldygpIHRoZW4gYWxsb3dzIHRvIGNyZWF0ZSBhIEdzdENsb2NrIHRoYXQgcHJvdmlkZXMgdGhlIFBUUAotdGltZSBmcm9tIGEgbWFzdGVyIGNsb2NrIGluc2lkZSBhIHNwZWNpZmljIFBUUCBkb21haW4uIFRoaXMgY2xvY2sgd2lsbCBvbmx5Ci1yZXR1cm4gdmFsaWQgdGltZXN0YW1wcyBvbmNlIHRoZSB0aW1lc3RhbXBzIGluIHRoZSBQVFAgZG9tYWluIGFyZSBrbm93bi4gVG8KLWNoZWNrIHRoaXMsIHlvdSBjYW4gdXNlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2std2FpdC1mb3Itc3luYyI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfd2FpdF9mb3Jfc3luYygpPC9jb2RlPjwvYT4sIHRoZSBHc3RDbG9jazo6c3luY2VkCi1zaWduYWwgYW5kIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staXMtc3luY2VkIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19pc19zeW5jZWQoKTwvY29kZT48L2E+LjwvcD4KLTxwPlRvIGdhdGhlciBzdGF0aXN0aWNzIGFib3V0IHRoZSBQVFAgY2xvY2sgc3luY2hyb25pemF0aW9uLAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1zdGF0aXN0aWNzLWNhbGxiYWNrLWFkZCIgdGl0bGU9ImdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQoKTwvY29kZT48L2E+IGNhbiBiZSB1c2VkLiBUaGlzIGdpdmVzIHRoZSBhcHBsaWNhdGlvbgotdGhlIHBvc3NpYmlsaXR5IHRvIGNvbGxlY3QgYWxsIGtpbmRzIG9mIHN0YXRpc3RpY3MgZnJvbSB0aGUgY2xvY2sKLXN5bmNocm9uaXphdGlvbi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFB0cENsb2NrLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHRwLWluaXQiPjwvYT48aDM+Z3N0X3B0cF9pbml0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcHRwX2luaXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gY2xvY2tfaWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKmludGVyZmFjZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5pdGlhbGl6ZSB0aGUgR1N0cmVhbWVyIFBUUCBzdWJzeXN0ZW0gYW5kIGNyZWF0ZSBhIFBUUCBvcmRpbmFyeSBjbG9jayBpbgotc2xhdmUtb25seSBtb2RlIGZvciBhbGwgZG9tYWlucyBvbiB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmludGVyZmFjZXM8L2NvZGU+PC9lbT4KLSB3aXRoIHRoZQotZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrX2lkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+SWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNsb2NrX2lkPC9jb2RlPjwvZW0+Ci0gaXMgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjR1NULVBUUC1DTE9DSy1JRC1OT05FOkNBUFMiIHRpdGxlPSJHU1RfUFRQX0NMT0NLX0lEX05PTkUiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfUFRQX0NMT0NLX0lEX05PTkU8L2NvZGU+PC9hPiwgYSBjbG9jayBpZCBpcyBhdXRvbWF0aWNhbGx5Ci1nZW5lcmF0ZWQgZnJvbSB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IG5ldHdvcmsgaW50ZXJmYWNlLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gaXMgYXV0b21hdGljYWxseSBjYWxsZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1jbG9jay1uZXciIHRpdGxlPSJnc3RfcHRwX2Nsb2NrX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3B0cF9jbG9ja19uZXcoKTwvY29kZT48L2E+IHdpdGggZGVmYXVsdAotcGFyYW1ldGVycyBpZiBpdCB3YXNuJ3QgY2FsbGVkIGJlZm9yZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHRwLWluaXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2xvY2tfaWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5QVFAgY2xvY2sgaWQgb2YgdGhpcyBwcm9jZXNzJyBjbG9jayBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHU1QtUFRQLUNMT0NLLUlELU5PTkU6Q0FQUyIgdGl0bGU9IkdTVF9QVFBfQ0xPQ0tfSURfTk9ORSI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9QVFBfQ0xPQ0tfSURfTk9ORTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmludGVyZmFjZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbmV0d29yayBpbnRlcmZhY2VzIHRvIHJ1biB0aGUgY2xvY2sgb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHRwLWluaXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIEdTdHJlYW1lciBQVFAgY2xvY2sgc3Vic3lzdGVtIGNvdWxkIGJlIGluaXRpYWxpemVkLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHRwLWRlaW5pdCI+PC9hPjxoMz5nc3RfcHRwX2RlaW5pdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9wdHBfZGVpbml0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkRlaW5pdGlhbGl6ZSB0aGUgR1N0cmVhbWVyIFBUUCBzdWJzeXN0ZW0gYW5kIHN0b3AgdGhlIFBUUCBjbG9jay4gSWYgdGhlcmUKLWFyZSBhbnkgcmVtYWluaW5nIEdzdFB0cENsb2NrIGluc3RhbmNlcywgdGhleSB3b24ndCBiZSBmdXJ0aGVyIHN5bmNocm9uaXplZAotdG8gdGhlIFBUUCBuZXR3b3JrIGNsb2NrLjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXB0cC1pcy1pbml0aWFsaXplZCI+PC9hPjxoMz5nc3RfcHRwX2lzX2luaXRpYWxpemVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcHRwX2lzX2luaXRpYWxpemVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPnZvaWQ8L3NwYW4+PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrIGlmIHRoZSBHU3RyZWFtZXIgUFRQIGNsb2NrIHN1YnN5c3RlbSBpcyBpbml0aWFsaXplZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHRwLWlzLWluaXRpYWxpemVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBHU3RyZWFtZXIgUFRQIGNsb2NrIHN1YnN5c3RlbSBpcyBpbnRpYWxpemVkLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcHRwLWlzLXN1cHBvcnRlZCI+PC9hPjxoMz5nc3RfcHRwX2lzX3N1cHBvcnRlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3B0cF9pc19zdXBwb3J0ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2sgaWYgUFRQIGNsb2NrcyBhcmUgZ2VuZXJhbGx5IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSwgYW5kIGlmIHByZXZpb3VzCi1pbml0aWFsaXphdGlvbnMgZGlkIG5vdCBmYWlsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wdHAtaXMtc3VwcG9ydGVkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIFBUUCBjbG9ja3MgYXJlIGdlbmVyYWxseSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0sIGFuZAotcHJldmlvdXMgaW5pdGlhbGl6YXRpb25zIGRpZCBub3QgZmFpbC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXB0cC1jbG9jay1uZXciPjwvYT48aDM+Z3N0X3B0cF9jbG9ja19uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCoKLWdzdF9wdHBfY2xvY2tfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGRvbWFpbjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IFBUUCBjbG9jayBpbnN0YW5jZSB0aGF0IGV4cG9ydHMgdGhlIFBUUCB0aW1lIG9mIHRoZSBtYXN0ZXIKLWNsb2NrIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kb21haW48L2NvZGU+PC9lbT4KLS4gVGhpcyBjbG9jayBjYW4gYmUgc2xhdmVkIHRvIG90aGVyIGNsb2NrcyBhcyBuZWVkZWQuPC9wPgotPHA+SWYgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1pbml0IiB0aXRsZT0iZ3N0X3B0cF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcHRwX2luaXQoKTwvY29kZT48L2E+IHdhcyBub3QgY2FsbGVkIGJlZm9yZSwgdGhpcyB3aWxsIGNhbGwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1pbml0IiB0aXRsZT0iZ3N0X3B0cF9pbml0wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcHRwX2luaXQoKTwvY29kZT48L2E+IHdpdGgKLWRlZmF1bHQgcGFyYW1ldGVycy48L3A+Ci08cD5UaGlzIGNsb2NrIG9ubHkgcmV0dXJucyB2YWxpZCB0aW1lc3RhbXBzIGFmdGVyIGl0IHJlY2VpdmVkIHRoZSBmaXJzdAotdGltZXMgZnJvbSB0aGUgUFRQIG1hc3RlciBjbG9jayBvbiB0aGUgbmV0d29yay4gT25jZSB0aGlzIGhhcHBlbnMgdGhlCi1Hc3RQdHBDbG9jazo6aW50ZXJuYWwtY2xvY2sgcHJvcGVydHkgd2lsbCBiZWNvbWUgbm9uLU5VTEwuIFlvdSBjYW4KLWNoZWNrIHRoaXMgd2l0aCA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLXdhaXQtZm9yLXN5bmMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX3dhaXRfZm9yX3N5bmMoKTwvY29kZT48L2E+LCB0aGUgR3N0Q2xvY2s6OnN5bmNlZCBzaWduYWwgYW5kCi08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlzLXN5bmNlZCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaXNfc3luY2VkKCk8L2NvZGU+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcHRwLWNsb2NrLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TmFtZSBvZiB0aGUgY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZG9tYWluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+UFRQIGRvbWFpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdHBTdGF0aXN0aWNzQ2FsbGJhY2siPjwvYT48aDM+R3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiBkb21haW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIuLi9odG1sL0dzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPiAqc3RhdHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhlIHN0YXRpc3RpY3MgY2FuIGJlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlczo8L3A+Ci08cD5HU1RfUFRQX1NUQVRJU1RJQ1NfTkVXX0RPTUFJTl9GT1VORDoKLSJkb21haW4iICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UICAgICAgICAgIFRoZSBkb21haW4gaWRlbnRpZmllciBvZiB0aGUgZG9tYWluCi0iY2xvY2siICAgICAgICAgICAgICAgICBHU1RfVFlQRV9DTE9DSyAgICAgICBUaGUgaW50ZXJuYWwgY2xvY2sgdGhhdCBpcyBzbGF2ZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVFAgZG9tYWluPC9wPgotPHA+R1NUX1BUUF9TVEFUSVNUSUNTX0JFU1RfTUFTVEVSX0NMT0NLX1NFTEVDVEVEOgotImRvbWFpbiIgICAgICAgICAgICAgICAgR19UWVBFX1VJTlQgICAgICAgICAgVGhlIGRvbWFpbiBpZGVudGlmaWVyIG9mIHRoZSBkb21haW4KLSJtYXN0ZXItY2xvY2staWQiICAgICAgIEdfVFlQRV9VSU5UNjQgICAgICAgIFBUUCBjbG9jayBpZGVudGlmaWVyIG9mIHRoZSBzZWxlY3RlZCBtYXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrCi0ibWFzdGVyLWNsb2NrLXBvcnQiICAgICBHX1RZUEVfVUlOVCAgICAgICAgICBQVFAgcG9ydCBudW1iZXIgb2YgdGhlIHNlbGVjdGVkIG1hc3RlciBjbG9jawotImdyYW5kbWFzdGVyLWNsb2NrLWlkIiAgR19UWVBFX1VJTlQ2NCAgICAgICAgUFRQIGNsb2NrIGlkZW50aWZpZXIgb2YgdGhlIGdyYW5kbWFzdGVyIGNsb2NrPC9wPgotPHA+R1NUX1BUUF9TVEFUSVNUSUNTX1BBVEhfREVMQVlfTUVBU1VSRUQ6Ci0iZG9tYWluIiAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVCAgICAgICAgICBUaGUgZG9tYWluIGlkZW50aWZpZXIgb2YgdGhlIGRvbWFpbgotIm1lYW4tcGF0aC1kZWxheS1hdmciICAgR1NUX1RZUEVfQ0xPQ0tfVElNRSAgQXZlcmFnZSBtZWFuIHBhdGggZGVsYXkKLSJtZWFuLXBhdGgtZGVsYXkiICAgICAgIEdTVF9UWVBFX0NMT0NLX1RJTUUgIExhdGVzdCBtZWFuIHBhdGggZGVsYXkKLSJkZWxheS1yZXF1ZXN0LWRlbGF5IiAgIEdTVF9UWVBFX0NMT0NLX1RJTUUgIERlbGF5IG9mIERFTEFZX1JFUSAvIERFTEFZX1JFU1AgbWVzc2FnZXM8L3A+Ci08cD5HU1RfUFRQX1NUQVRJU1RJQ1NfVElNRV9VUERBVEVEOgotImRvbWFpbiIgICAgICAgICAgICAgICAgR19UWVBFX1VJTlQgICAgICAgICAgVGhlIGRvbWFpbiBpZGVudGlmaWVyIG9mIHRoZSBkb21haW4KLSJtZWFuLXBhdGgtZGVsYXktYXZnIiAgIEdTVF9UWVBFX0NMT0NLX1RJTUUgIEF2ZXJhZ2UgbWVhbiBwYXRoIGRlbGF5Ci0ibG9jYWwtdGltZSIgICAgICAgICAgICBHU1RfVFlQRV9DTE9DS19USU1FICBMb2NhbCB0aW1lIHRoYXQgY29ycmVzcG9uZHMgdG8gcHRwLXRpbWUKLSJwdHAtdGltZSIgICAgICAgICAgICAgIEdTVF9UWVBFX0NMT0NLX1RJTUUgIE5ld2x5IG1lYXN1cmVkIFBUUCB0aW1lIGF0IGxvY2FsLXRpbWUKLSJlc3RpbWF0ZWQtcHRwLXRpbWUiICAgIEdTVF9UWVBFX0NMT0NLX1RJTUUgIEVzdGltYXRlZCBQVFAgdGltZSBiYXNlZCBvbiBwcmV2aW91cyBtZWFzdXJlbWVudHMKLSJkaXNjb250aW51aXR5IiAgICAgICAgIEdfVFlQRV9JTlQ2NCAgICAgICAgIERpZmZlcmVuY2UgYmV0d2VlbiBlc3RpbWF0ZWQgYW5kIG1lYXN1cmVkIFBUUCB0aW1lCi0ic3luY2VkIiAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiAgICAgICBDdXJyZW50bHkgc3luY2VkIHRvIHRoZSByZW1vdGUgY2xvY2sKLSJyLXNxdWFyZWQiICAgICAgICAgICAgIEdfVFlQRV9ET1VCTEUgICAgICAgIFLCsiBvZiBjbG9jayBlc3RpbWF0aW9uIHJlZ3Jlc3Npb24KLSJpbnRlcm5hbC10aW1lIiAgICAgICAgIEdTVF9UWVBFX0NMT0NLX1RJTUUgIEludGVybmFsIHRpbWUgY2xvY2sgcGFyYW1ldGVyCi0iZXh0ZXJuYWwtdGltZSIgICAgICAgICBHU1RfVFlQRV9DTE9DS19USU1FICBFeHRlcm5hbCB0aW1lIGNsb2NrIHBhcmFtZXRlcgotInJhdGUtbnVtIiAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCAgICAgICAgSW50ZXJuYWwvZXh0ZXJuYWwgcmF0ZSBudW1lcmF0b3IKLSJyYXRlLWRlbiIgICAgICAgICAgICAgIEdfVFlQRV9VSU5UNjQgICAgICAgIEludGVybmFsL2V4dGVybmFsIHJhdGUgZGVub21pbmF0b3IKLSJyYXRlIiAgICAgICAgICAgICAgICAgIEdfVFlQRV9ET1VCTEUgICAgICAgIEludGVybmFsL2V4dGVybmFsIHJhdGU8L3A+Ci08cD5JZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpcyByZXR1cm5lZCwgdGhlIGNhbGxiYWNrIGlzIHJlbW92ZWQgYW5kIG5ldmVyIGNhbGxlZCBhZ2Fpbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQdHBTdGF0aXN0aWNzQ2FsbGJhY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZG9tYWluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+UFRQIGRvbWFpbiBpZGVudGlmaWVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0YXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TmV3IHN0YXRpc3RpY3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+RGF0YSBwYXNzZWQgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1zdGF0aXN0aWNzLWNhbGxiYWNrLWFkZCIgdGl0bGU9ImdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQoKTwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1wdHAtc3RhdGlzdGljcy1jYWxsYmFjay1hZGQiPjwvYT48aDM+Z3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX2FkZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1bG9uZzwvc3Bhbj48L2E+Ci1nc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfYWRkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrIiB0aXRsZT0iR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFB0cFN0YXRpc3RpY3NDYWxsYmFjazwvc3Bhbj48L2E+IGNhbGxiYWNrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IHVzZXJfZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBkZXN0cm95X2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5zdGFsbHMgYSBuZXcgc3RhdGlzdGljcyBjYWxsYmFjayBmb3IgZ2F0aGVyaW5nIFBUUCBzdGF0aXN0aWNzLiBTZWUKLUdzdFB0cFN0YXRpc3RpY3NDYWxsYmFjayBmb3IgYSBsaXN0IG9mIHN0YXRpc3RpY3MgdGhhdCBhcmUgcHJvdmlkZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXB0cC1zdGF0aXN0aWNzLWNhbGxiYWNrLWFkZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYWxsYmFjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkdzdFB0cFN0YXRpc3RpY3NDYWxsYmFjayB0byBjYWxsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkRhdGEgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdHJveV9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+R0Rlc3Ryb3lOb3RpZnkgdG8gZGVzdHJveSB0aGUgZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXB0cC1zdGF0aXN0aWNzLWNhbGxiYWNrLWFkZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IElkIGZvciB0aGUgY2FsbGJhY2sgdGhhdCBjYW4gYmUgcGFzc2VkIHRvCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNnc3QtcHRwLXN0YXRpc3RpY3MtY2FsbGJhY2stcmVtb3ZlIiB0aXRsZT0iZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX3JlbW92ZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX3JlbW92ZSgpPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXB0cC1zdGF0aXN0aWNzLWNhbGxiYWNrLXJlbW92ZSI+PC9hPjxoMz5nc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfcmVtb3ZlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX3JlbW92ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVtb3ZlcyBhIFBUUCBzdGF0aXN0aWNzIGNhbGxiYWNrIHRoYXQgd2FzIHByZXZpb3VzbHkgYWRkZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1zdGF0aXN0aWNzLWNhbGxiYWNrLWFkZCIgdGl0bGU9ImdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1wdHAtc3RhdGlzdGljcy1jYWxsYmFjay1yZW1vdmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmlkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Q2FsbGJhY2sgaWQgdG8gcmVtb3ZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFB0cENsb2NrLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUFRQLUNMT0NLLUlELU5PTkU6Q0FQUyI+PC9hPjxoMz5HU1RfUFRQX0NMT0NLX0lEX05PTkU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BUUF9DTE9DS19JRF9OT05FICgoZ3VpbnQ2NCkgLTEpCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHRwQ2xvY2stc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RQdHBDbG9jazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFB0cENsb2NrOzwvcHJlPgotPHA+T3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQdHBDbG9jazwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QVFAtU1RBVElTVElDUy1CRVNULU1BU1RFUi1DTE9DSy1TRUxFQ1RFRDpDQVBTIj48L2E+PGgzPkdTVF9QVFBfU1RBVElTVElDU19CRVNUX01BU1RFUl9DTE9DS19TRUxFQ1RFRDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfUFRQX1NUQVRJU1RJQ1NfQkVTVF9NQVNURVJfQ0xPQ0tfU0VMRUNURUQgIkdzdFB0cFN0YXRpc3RpY3NCZXN0TWFzdGVyQ2xvY2tTZWxlY3RlZCIKLTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtUFRQLVNUQVRJU1RJQ1MtTkVXLURPTUFJTi1GT1VORDpDQVBTIj48L2E+PGgzPkdTVF9QVFBfU1RBVElTVElDU19ORVdfRE9NQUlOX0ZPVU5EPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9QVFBfU1RBVElTVElDU19ORVdfRE9NQUlOX0ZPVU5EICAgICAgICAgICAiR3N0UHRwU3RhdGlzdGljc05ld0RvbWFpbkZvdW5kIgotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdTVC1QVFAtU1RBVElTVElDUy1QQVRILURFTEFZLU1FQVNVUkVEOkNBUFMiPjwvYT48aDM+R1NUX1BUUF9TVEFUSVNUSUNTX1BBVEhfREVMQVlfTUVBU1VSRUQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BUUF9TVEFUSVNUSUNTX1BBVEhfREVMQVlfTUVBU1VSRUQgICAgICAgICJHc3RQdHBTdGF0aXN0aWNzUGF0aERlbGF5TWVhc3VyZWQiCi08L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVBUUC1TVEFUSVNUSUNTLVRJTUUtVVBEQVRFRDpDQVBTIj48L2E+PGgzPkdTVF9QVFBfU1RBVElTVElDU19USU1FX1VQREFURUQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1BUUF9TVEFUSVNUSUNTX1RJTUVfVVBEQVRFRCAgICAgICAgICAgICAgICJHc3RQdHBTdGF0aXN0aWNzVGltZVVwZGF0ZWQiCi08L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQdHBDbG9jay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHRwQ2xvY2stLWRvbWFpbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRvbWFpbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZG9tYWlu4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgUFRQIGRvbWFpbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMjU1PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHRwQ2xvY2stLWdyYW5kbWFzdGVyLWNsb2NrLWlkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZ3JhbmRtYXN0ZXItY2xvY2staWTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGdyYW5kbWFzdGVyLWNsb2NrLWlk4oCdICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkdyYW5kIE1hc3RlciBDbG9jayBJRC48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB0cENsb2NrLS1pbnRlcm5hbC1jbG9jayI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGludGVybmFsLWNsb2Nr4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpbnRlcm5hbC1jbG9ja+KAnSAgICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkludGVybmFsIGNsb2NrLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdHBDbG9jay0tbWFzdGVyLWNsb2NrLWlkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWFzdGVyLWNsb2NrLWlk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXN0ZXItY2xvY2staWTigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXN0ZXIgQ2xvY2sgSUQuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFB0cENsb2NrLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0Q2xpZW50Q2xvY2s8L3NwYW4+PC9hPiwgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBpcGVsaW5lPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdFB1c2hTcmMuaHRtbCBiL2RvY3MvbGlicy9odG1sL0dzdFB1c2hTcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE0NjVkNy4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9Hc3RQdXNoU3JjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFB1c2hTcmM6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQdXNoU3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RQdXNoU3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RQdXNoU3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0UHVzaFNyYy50b3Bfb2ZfcGFnZSI+PC9hPkdzdFB1c2hTcmM8L3NwYW4+PC9oMj4KLTxwPkdzdFB1c2hTcmMg4oCUIEJhc2UgY2xhc3MgZm9yIHB1c2ggYmFzZWQgc291cmNlIGVsZW1lbnRzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFB1c2hTcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UHVzaFNyYyI+R3N0UHVzaFNyYzwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0UHVzaFNyY0NsYXNzIj5Hc3RQdXNoU3JjQ2xhc3M8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHVzaFNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UHVzaFNyYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFB1c2hTcmMuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvYmFzZS9nc3RwdXNoc3JjLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHVzaFNyYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGNsYXNzIGlzIG1vc3RseSB1c2VmdWwgZm9yIGVsZW1lbnRzIHRoYXQgY2Fubm90IGRvCi1yYW5kb20gYWNjZXNzLCBvciBhdCBsZWFzdCB2ZXJ5IHNsb3dseS4gVGhlIHNvdXJjZSB1c3VhbGx5Ci1wcmVmZXJzIHRvIHB1c2ggb3V0IGEgZml4ZWQgc2l6ZSBidWZmZXIuPC9wPgotPHA+U3ViY2xhc3NlcyB1c3VhbGx5IG9wZXJhdGUgaW4gYSBmb3JtYXQgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKLWRlZmF1bHQgR1NUX0ZPUk1BVF9CWVRFUyBmb3JtYXQgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT4uPC9wPgotPHA+Q2xhc3NlcyBleHRlbmRpbmcgdGhpcyBiYXNlIGNsYXNzIHdpbGwgdXN1YWxseSBiZSBzY2hlZHVsZWQKLWluIGEgcHVzaCBiYXNlZCBtb2RlLiBJZiB0aGUgcGVlciBhY2NlcHRzIHRvIG9wZXJhdGUgd2l0aG91dAotb2Zmc2V0cyBhbmQgd2l0aGluIHRoZSBsaW1pdHMgb2YgdGhlIGFsbG93ZWQgYmxvY2sgc2l6ZSwgdGhpcwotY2xhc3MgY2FuIG9wZXJhdGUgaW4gZ2V0cmFuZ2UgYmFzZWQgbW9kZSBhdXRvbWF0aWNhbGx5LiBUbyBtYWtlCi10aGlzIHBvc3NpYmxlLCB0aGUgc3ViY2xhc3Mgc2hvdWxkIGltcGxlbWVudCBhbmQgb3ZlcnJpZGUgdGhlCi1TQ0hFRFVMSU5HIHF1ZXJ5LjwvcD4KLTxwPlRoZSBzdWJjbGFzcyBzaG91bGQgZXh0ZW5kIHRoZSBtZXRob2RzIGZyb20gdGhlIGJhc2VjbGFzcyBpbgotYWRkaXRpb24gdG8gdGhlIDo6Y3JlYXRlIG1ldGhvZC48L3A+Ci08cD5TZWVraW5nLCBmbHVzaGluZywgc2NoZWR1bGluZyBhbmQgc3luYyBpcyBhbGwgaGFuZGxlZCBieSB0aGlzCi1iYXNlIGNsYXNzLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0UHVzaFNyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RQdXNoU3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdXNoU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UHVzaFNyYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFB1c2hTcmM7PC9wcmU+Ci08cD5UaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdXNoU3JjLmh0bWwiIHRpdGxlPSJHc3RQdXNoU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UHVzaFNyYzwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVzaFNyY0NsYXNzIj48L2E+PGgzPnN0cnVjdCBHc3RQdXNoU3JjQ2xhc3M8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RQdXNoU3JjQ2xhc3MgewotICBHc3RCYXNlU3JjQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIGFzayB0aGUgc3ViY2xhc3MgdG8gY3JlYXRlIGEgYnVmZmVyLCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotICAgKiB1c2VzIGFsbG9jIGFuZCBmaWxsICovCi0gIEdzdEZsb3dSZXR1cm4gKCpjcmVhdGUpIChHc3RQdXNoU3JjICpzcmMsIEdzdEJ1ZmZlciAqKmJ1Zik7Ci0gIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBidWZmZXIgKi8KLSAgR3N0Rmxvd1JldHVybiAoKmFsbG9jKSAgKEdzdFB1c2hTcmMgKnNyYywgR3N0QnVmZmVyICoqYnVmKTsKLSAgLyogYXNrIHRoZSBzdWJjbGFzcyB0byBmaWxsIGEgYnVmZmVyICovCi0gIEdzdEZsb3dSZXR1cm4gKCpmaWxsKSAgIChHc3RQdXNoU3JjICpzcmMsIEdzdEJ1ZmZlciAqYnVmKTsKLX07Ci08L3ByZT4KLTxwPlN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGUgYXZhaWxhYmxlIHZpcnR1YWwgbWV0aG9kcyBvciBub3QsIGFzCi1uZWVkZWQuIEF0IHRoZSBtaW5pbXVtLCB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbGw8L2NvZGU+PC9lbT4KLSBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gdG8gcHJvZHVjZQotYnVmZmVycy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RQdXNoU3JjQ2xhc3MubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFB1c2hTcmNDbGFzcy5jcmVhdGUiPjwvYT5jcmVhdGU8L2NvZGU+PC9lbT7CoCgpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkFzayB0aGUgc3ViY2xhc3MgdG8gY3JlYXRlIGEgYnVmZmVyLiBUaGUgc3ViY2xhc3MgZGVjaWRlcyB3aGljaAotc2l6ZSB0aGlzIGJ1ZmZlciBzaG91bGQgYmUuIE90aGVyIHRoZW4gdGhhdCwgcmVmZXIgdG8KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmFzZVNyYzwvc3Bhbj48L2E+LmNyZWF0ZSgpIGZvciBtb3JlIGRldGFpbHMuIElmIHRoaXMgbWV0aG9kIGlzCi1ub3QgaW1wbGVtZW50ZWQsIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvYzwvY29kZT48L2VtPgotZm9sbG93ZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZpbGw8L2NvZGU+PC9lbT4KLXdpbGwgYmUgY2FsbGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdFB1c2hTcmNDbGFzcy5hbGxvYyI+PC9hPmFsbG9jPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5Bc2sgdGhlIHN1YmNsYXNzIHRvIGFsbG9jYXRlIGEgYnVmZmVyLiBUaGUgc3ViY2xhc3MgZGVjaWRlcyB3aGljaAotc2l6ZSB0aGlzIGJ1ZmZlciBzaG91bGQgYmUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY3JlYXRlCi1hIG5ldyBidWZmZXIgZnJvbSB0aGUgbmVnb3RpYXRlZCBhbGxvY2F0b3IuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0UHVzaFNyY0NsYXNzLmZpbGwiPjwvYT5maWxsPC9jb2RlPjwvZW0+wqAoKTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5Bc2sgdGhlIHN1YmNsYXNzIHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIGRhdGEuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFB1c2hTcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCYXNlU3JjPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL0dzdFRlc3RDbG9jay5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0VGVzdENsb2NrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNjAwOWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvR3N0VGVzdENsb2NrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDI4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RUZXN0Q2xvY2s6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItY2hlY2suaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDaGVjayBVbml0IFRlc3RpbmciPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sIiB0aXRsZT0iT2JqZWN0IEhpZXJhcmNoeSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUZXN0Q2xvY2suZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI0dzdFRlc3RDbG9jay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUZXN0Q2xvY2sucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1oaWVyYXJjaHkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJHc3RUZXN0Q2xvY2siPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RUZXN0Q2xvY2sudG9wX29mX3BhZ2UiPjwvYT5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9oMj4KLTxwPkdzdFRlc3RDbG9jayDigJQgQ29udHJvbGxhYmxlLCBkZXRlcm1pbmlzdGljIGNsb2NrIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUZXN0Q2xvY2suZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1uZXciIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19uZXfCoCgpIj5nc3RfdGVzdF9jbG9ja19uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLW5ldy13aXRoLXN0YXJ0LXRpbWUiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXNldC10aW1lIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWXCoCgpIj5nc3RfdGVzdF9jbG9ja19zZXRfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLWFkdmFuY2UtdGltZSIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZcKgKCkiPmdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stcGVlay1pZC1jb3VudCIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnTCoCgpIj5nc3RfdGVzdF9jbG9ja19wZWVrX2lkX2NvdW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1oYXMtaWQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19oYXNfaWTCoCgpIj5nc3RfdGVzdF9jbG9ja19oYXNfaWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXBlZWstbmV4dC1wZW5kaW5nLWlkIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfcGVla19uZXh0X3BlbmRpbmdfaWTCoCgpIj5nc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLW5leHQtcGVuZGluZy1pZCIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZMKgKCkiPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLXBlbmRpbmctaWQtY291bnQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9wZW5kaW5nX2lkX2NvdW50wqAoKSI+Z3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfcGVuZGluZ19pZF9jb3VudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stcHJvY2Vzcy1uZXh0LWNsb2NrLWlkIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stZ2V0LW5leHQtZW50cnktdGltZSIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWXCoCgpIj5nc3RfdGVzdF9jbG9ja19nZXRfbmV4dF9lbnRyeV90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2std2FpdC1mb3ItbXVsdGlwbGUtcGVuZGluZy1pZHMiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkc8KgKCkiPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2staWQtbGlzdC1nZXQtbGF0ZXN0LXRpbWUiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19pZF9saXN0X2dldF9sYXRlc3RfdGltZcKgKCkiPmdzdF90ZXN0X2Nsb2NrX2lkX2xpc3RfZ2V0X2xhdGVzdF90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wcm9jZXNzLWlkLWxpc3QiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3TCoCgpIj5nc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLWNyYW5rIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfY3JhbmvCoCgpIj5nc3RfdGVzdF9jbG9ja19jcmFuazwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRlc3RDbG9jay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii4uL2h0bWwvR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RDbG9ja1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1R5cGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNHc3RUZXN0Q2xvY2stLWNsb2NrLXR5cGUiIHRpdGxlPSJUaGUg4oCcY2xvY2stdHlwZeKAnSBwcm9wZXJ0eSI+Y2xvY2stdHlwZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNHc3RUZXN0Q2xvY2stLXN0YXJ0LXRpbWUiIHRpdGxlPSJUaGUg4oCcc3RhcnQtdGltZeKAnSBwcm9wZXJ0eSI+c3RhcnQtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0IE9ubHk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUZXN0Q2xvY2sub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNHc3RUZXN0Q2xvY2stc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRlc3RDbG9jayI+R3N0VGVzdENsb2NrPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjR3N0VGVzdENsb2NrQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0VGVzdENsb2NrQ2xhc3MiPkdzdFRlc3RDbG9ja0NsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRlc3RDbG9jay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij5Hc3RDbG9jazwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RUZXN0Q2xvY2sKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUZXN0Q2xvY2suaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGVzdENsb2NrLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkdzdFRlc3RDbG9jayBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2stc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPiB3aGljaCBoYXMgZGlmZmVyZW50Ci1iZWhhdmlvdXIgY29tcGFyZWQgdG8gPGEgaHJlZj0iLi4vaHRtbC9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN5c3RlbUNsb2NrPC9zcGFuPjwvYT4uIFRpbWUgZm9yIDxhIGhyZWY9Ii4uL2h0bWwvR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RTeXN0ZW1DbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTeXN0ZW1DbG9jazwvc3Bhbj48L2E+IGFkdmFuY2VzCi1hY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSB0aW1lLCB3aGlsZSB0aW1lIGZvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiBjaGFuZ2VzIG9ubHkKLXdoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXNldC10aW1lIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90ZXN0X2Nsb2NrX3NldF90aW1lKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stYWR2YW5jZS10aW1lIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUoKTwvY29kZT48L2E+IGFyZQotY2FsbGVkLiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiBwcm92aWRlcyB1bml0IHRlc3RzIHdpdGggdGhlIHBvc3NpYmlsaXR5IHRvCi1wcmVjaXNlbHkgYWR2YW5jZSB0aGUgdGltZSBpbiBhIGRldGVybWluaXN0aWMgbWFubmVyLCBpbmRlcGVuZGVudCBvZiB0aGUKLXN5c3RlbSB0aW1lIG9yIGFueSBvdGhlciBleHRlcm5hbCBmYWN0b3JzLjwvcD4KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotPGEgbmFtZT0iaWQtMS4yLjcuNy44LjMiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDQuwqBBZHZhbmNpbmcgdGhlIHRpbWUgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPjwvYj48L3A+Ci08ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLTEyCi0xMwotMTQKLTE1Ci0xNjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtnc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmgmZ3Q7PC9zcGFuPgotCi1Hc3RDbG9jayA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5jbG9jazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotR3N0VGVzdENsb2NrIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnRlc3RfY2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotY2xvY2sgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stbmV3Ij5nc3RfdGVzdF9jbG9ja19uZXc8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCk7PC9zcGFuPgotdGVzdF9jbG9jayA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5HU1RfVEVTVF9DTE9DSzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIj5HU1RfSU5GTzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1RpbWU6ICUmcXVvdDs8L3NwYW4+IEdTVF9USU1FX0ZPUk1BVDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiPkdTVF9USU1FX0FSR1M8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiPmdzdF9jbG9ja19nZXRfdGltZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNsb2NrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpKTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLWFkdmFuY2UtdGltZSI+Z3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+IHRlc3RfY2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IEdTVF9TRUNPTkQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIj5HU1RfSU5GTzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1RpbWU6ICUmcXVvdDs8L3NwYW4+IEdTVF9USU1FX0ZPUk1BVDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiPkdTVF9USU1FX0FSR1M8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiPmdzdF9jbG9ja19nZXRfdGltZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNsb2NrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpKTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGUtYW5kLVRpbWUtRnVuY3Rpb25zLmh0bWwjZy11c2xlZXAiPmdfdXNsZWVwPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBHX1VTRUNfUEVSX1NFQzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPOkNBUFMiPkdTVF9JTkZPPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7VGltZTogJSZxdW90Ozwvc3Bhbj4gR1NUX1RJTUVfRk9STUFUPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1USU1FLUFSR1M6Q0FQUyI+R1NUX1RJTUVfQVJHUzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSI+Z3N0X2Nsb2NrX2dldF90aW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSkpOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stc2V0LXRpbWUiPmdzdF90ZXN0X2Nsb2NrX3NldF90aW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dGVzdF9jbG9jazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj40Mjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IEdTVF9TRUNPTkQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIj5HU1RfSU5GTzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1RpbWU6ICUmcXVvdDs8L3NwYW4+IEdTVF9USU1FX0ZPUk1BVDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiPkdTVF9USU1FX0FSR1M8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2stZ2V0LXRpbWUiPmdzdF9jbG9ja19nZXRfdGltZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNsb2NrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpKTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08YnIgY2xhc3M9ImV4YW1wbGUtYnJlYWsiPjxwPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGFsbG93cyBmb3Igc2V0dGluZyB1cCBzaW5nbGUgc2hvdCBvciBwZXJpb2RpYyBjbG9jayBub3RpZmljYXRpb25zCi1hcyB3ZWxsIGFzIHdhaXRpbmcgZm9yIHRoZXNlIG5vdGlmaWNhdGlvbnMgc3luY2hyb25vdXNseSAodXNpbmcKLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtd2FpdCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2xvY2tfaWRfd2FpdCgpPC9jb2RlPjwvYT4pIG9yIGFzeW5jaHJvbm91c2x5ICh1c2luZyA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKTwvY29kZT48L2E+IG9yCi08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQtYXN5bmMiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKTwvY29kZT48L2E+KS4gVGhpcyBpcyB1c2VkIGJ5IG1hbnkgR1N0cmVhbWVyIGVsZW1lbnRzLAotYW1vbmcgdGhlbSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTcmM8L3NwYW4+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJhc2VTaW5rPC9zcGFuPjwvYT4uPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4ga2VlcHMgdHJhY2sgb2YgdGhlc2UgY2xvY2sgbm90aWZpY2F0aW9ucy4gQnkgY2FsbGluZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLW5leHQtcGVuZGluZy1pZCIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkKCk8L2NvZGU+PC9hPiBvcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLW11bHRpcGxlLXBlbmRpbmctaWRzIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzKCk8L2NvZGU+PC9hPiBhIHVuaXQgdGVzdHMgbWF5IHdhaXQgZm9yIHRoZQotbmV4dCBvbmUgb3Igc2V2ZXJhbCBjbG9jayBub3RpZmljYXRpb25zIHRvIGJlIHJlcXVlc3RlZC4gQWRkaXRpb25hbGx5IHVuaXQKLXRlc3RzIG1heSByZWxlYXNlIGJsb2NrZWQgd2FpdHMgaW4gYSBjb250cm9sbGVkIGZhc2hpb24gYnkgY2FsbGluZwotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXByb2Nlc3MtbmV4dC1jbG9jay1pZCIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkKCk8L2NvZGU+PC9hPi4gVGhpcyB3YXkgYSB1bml0IHRlc3QgY2FuIGNvbnRyb2wgdGhlCi1pbmFjY3VyYWN5IChqaXR0ZXIpIG9mIGNsb2NrIG5vdGlmaWNhdGlvbnMsIHNpbmNlIHRoZSB0ZXN0IGNhbiBkZWNpZGUgdG8KLXJlbGVhc2UgYmxvY2tlZCB3YWl0cyB3aGVuIHRoZSBjbG9jayB0aW1lIGhhcyBhZHZhbmNlZCBleGFjdGx5IHRvLCBvciBwYXN0LAotdGhlIHJlcXVlc3RlZCBjbG9jayBub3RpZmljYXRpb24gdGltZS48L3A+Ci08cD5UaGVyZSBhcmUgYWxzbyBpbnRlcmZhY2VzIGZvciBkZXRlcm1pbmluZyBpZiBhIG5vdGlmaWNhdGlvbiBiZWxvbmdzIHRvIGEKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IG9yIG5vdCwgYXMgd2VsbCBhcyBnZXR0aW5nIHRoZSBudW1iZXIgb2YgcmVxdWVzdGVkIGNsb2NrCi1ub3RpZmljYXRpb25zIHNvIGZhci48L3A+Ci08cD5OLkIuOiBXaGVuIGEgdW5pdCB0ZXN0IHdhaXRzIGZvciBhIGNlcnRhaW4gYW1vdW50IG9mIGNsb2NrIG5vdGlmaWNhdGlvbnMgdG8KLWJlIHJlcXVlc3RlZCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2std2FpdC1mb3ItbmV4dC1wZW5kaW5nLWlkIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQoKTwvY29kZT48L2E+IG9yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2std2FpdC1mb3ItbXVsdGlwbGUtcGVuZGluZy1pZHMiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHMoKTwvY29kZT48L2E+IHRoZW4gdGhlc2UgZnVuY3Rpb25zIG1heSBibG9jawotZm9yIGEgbG9uZyB0aW1lLiBJZiB0aGV5IGJsb2NrIGZvcmV2ZXIgdGhlbiB0aGUgZXhwZWN0ZWQgY2xvY2sgbm90aWZpY2F0aW9ucwotd2VyZSBuZXZlciByZXF1ZXN0ZWQgZnJvbSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiwgYW5kIHNvIHRoZSBhc3N1bXB0aW9ucyBpbiB0aGUgY29kZQotb2YgdGhlIHVuaXQgdGVzdCBhcmUgd3JvbmcuIFRoZSB1bml0IHRlc3QgY2FzZSBydW5uZXIgaW4gZ3N0Y2hlY2sgaXMKLWV4cGVjdGVkIHRvIGNhdGNoIHRoZXNlIGNhc2VzIGVpdGhlciBieSB0aGUgZGVmYXVsdCB0ZXN0IGNhc2UgdGltZW91dCBvciB0aGUKLW9uZSBzZXQgZm9yIHRoZSB1bml0IHRlc3QgYnkgY2FsbGluZyA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnRjYXNlX3NldF90aW1lb3V0KCk8L2NvZGU+LjwvcD4KLTxwPlRoZSBzYW1wbGUgY29kZSBiZWxvdyBhc3N1bWVzIHRoYXQgdGhlIGVsZW1lbnQgdW5kZXIgdGVzdCB3aWxsIGRlbGF5IGEKLWJ1ZmZlciBwdXNoZWQgb24gdGhlIHNvdXJjZSBwYWQgYnkgc29tZSBsYXRlbmN5IHVudGlsIGl0IGFycml2ZXMgb24gdGhlIHNpbmsKLXBhZC4gTW9yZW92ZXIgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBlbGVtZW50IHdpbGwgYXQgc29tZSBwb2ludCBjYWxsCi08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWlkLXdhaXQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Nsb2NrX2lkX3dhaXQoKTwvY29kZT48L2E+IHRvIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgYSBzcGVjaWZpYyB0aW1lLiBUaGUgZmlyc3QKLWJ1ZmZlciBzZW50IHdpbGwgYXJyaXZlIGV4YWN0bHkgb24gdGltZSBvbmx5IGRlbGF5ZWQgYnkgdGhlIGxhdGVuY3kuIFRoZQotc2Vjb25kIGJ1ZmZlciB3aWxsIGFycml2ZSBhIGxpdHRsZSBsYXRlICg3bXMpIGR1ZSB0byBzaW11bGF0ZWQgaml0dGVyIGluIHRoZQotY2xvY2sgbm90aWZpY2F0aW9uLjwvcD4KLTxkaXYgY2xhc3M9ImV4YW1wbGUiPgotPGEgbmFtZT0iaWQtMS4yLjcuNy44LjkiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDUuwqBEZW1vbnN0cmF0aW9uIG9mIGhvdyB0byB3b3JrIHdpdGggY2xvY2sgbm90aWZpY2F0aW9ucyBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT48L2I+PC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTkKLTIwCi0yMQotMjIKLTIzCi0yNAotMjUKLTI2Ci0yNwotMjgKLTI5Ci0zMAotMzEKLTMyCi0zMwotMzQKLTM1Ci0zNgotMzcKLTM4Ci0zOQotNDAKLTQxCi00MgotNDMKLTQ0Ci00NQotNDYKLTQ3Ci00OAotNDkKLTUwCi01MQotNTIKLTUzCi01NAotNTUKLTU2Ci01NwotNTgKLTU5Ci02MAotNjEKLTYyCi02MwotNjQKLTY1Ci02NgotNjcKLTY4Ci02OQotNzA8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7Z3N0L2NoZWNrL2dzdGNoZWNrLmgmZ3Q7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtnc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmgmZ3Q7PC9zcGFuPgotCi1Hc3RDbG9ja1RpbWUgbGF0ZW5jeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotR3N0RWxlbWVudCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5lbGVtZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci1Hc3RQYWQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+c3JjcGFkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci1Hc3RDbG9jayA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5jbG9jazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotR3N0VGVzdENsb2NrIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnRlc3RfY2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLUdzdEJ1ZmZlciBidWY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLUdzdENsb2NrSUQgcGVuZGluZ19pZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotR3N0Q2xvY2tJRCBwcm9jZXNzZWRfaWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotbGF0ZW5jeSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+NDI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBHU1RfTVNFQ09ORDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotZWxlbWVudCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5jcmVhdGVfZWxlbWVudDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bGF0ZW5jeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sIC4uLik7PC9zcGFuPgotc3JjcGFkIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmdldF9zb3VyY2VfcGFkPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lbGVtZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi1jbG9jayA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1uZXciPmdzdF90ZXN0X2Nsb2NrX25ldzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oKTs8L3NwYW4+Ci10ZXN0X2Nsb2NrIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPkdTVF9URVNUX0NMT0NLPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5jbG9jazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LWNsb2NrIj5nc3RfZWxlbWVudF9zZXRfY2xvY2s8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lbGVtZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGNsb2NrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIj5HU1RfSU5GTzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1NldCB0aW1lLCBjcmVhdGUgYW5kIHB1c2ggdGhlIGZpcnN0IGJ1ZmZlcjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stc2V0LXRpbWUiPmdzdF90ZXN0X2Nsb2NrX3NldF90aW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dGVzdF9jbG9jazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLWJ1ZiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5jcmVhdGVfdGVzdF9idWZmZXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSI+Z3N0X2Nsb2NrX2dldF90aW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSwgLi4uKTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hc3NlcnRfY21waW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoIj5nc3RfcGFkX3B1c2g8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zcmNwYWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gYnVmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksID09LDwvc3Bhbj4gR1NUX0ZMT1dfT0s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPOkNBUFMiPkdTVF9JTkZPPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7QmxvY2sgdW50aWwgZWxlbWVudCBpcyB3YWl0aW5nIGZvciBhIGNsb2NrIG5vdGlmaWNhdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2std2FpdC1mb3ItbmV4dC1wZW5kaW5nLWlkIj5nc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj50ZXN0X2Nsb2NrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgJmFtcDs8L3NwYW4+cGVuZGluZ19pZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPOkNBUFMiPkdTVF9JTkZPPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7QWR2YW5jZSB0byB0aGUgcmVxdWVzdGVkIHRpbWUgb2YgdGhlIGNsb2NrIG5vdGlmaWNhdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stYWR2YW5jZS10aW1lIj5nc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj50ZXN0X2Nsb2NrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGxhdGVuY3k8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIj5HU1RfSU5GTzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1JlbGVhc2UgdGhlIG5leHQgYmxvY2tpbmcgd2FpdCBhbmQgbWFrZSBzdXJlIGl0IGlzIHRoZSBvbmUgZnJvbSBlbGVtZW50PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotcHJvY2Vzc2VkX2lkIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXByb2Nlc3MtbmV4dC1jbG9jay1pZCI+Z3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dGVzdF9jbG9jazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGVzdGluZy5odG1sI2ctYXNzZXJ0Ij5nX2Fzc2VydDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnByb2Nlc3NlZF9pZCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PT08L3NwYW4+IHBlbmRpbmdfaWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRlc3RpbmcuaHRtbCNnLWFzc2VydC1jbXBpbnQiPmdfYXNzZXJ0X2NtcGludDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1FTlRSWS1TVEFUVVM6Q0FQUyI+R1NUX0NMT0NLX0VOVFJZX1NUQVRVUzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnByb2Nlc3NlZF9pZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLCA9PSw8L3NwYW4+IEdTVF9DTE9DS19PSzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC11bnJlZiI+Z3N0X2Nsb2NrX2lkX3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cGVuZGluZ19pZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC11bnJlZiI+Z3N0X2Nsb2NrX2lkX3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cHJvY2Vzc2VkX2lkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIj5HU1RfSU5GTzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O1ZhbGlkYXRlIHRoYXQgZWxlbWVudCBwcm9kdWNlZCBhbiBvdXRwdXQgYnVmZmVyIGFuZCBjaGVjayBpdHMgdGltZXN0YW1wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UZXN0aW5nLmh0bWwjZy1hc3NlcnQtY21waW50Ij5nX2Fzc2VydF9jbXBpbnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmdldF9udW1iZXJfb2Zfb3V0cHV0X2J1ZmZlcjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiguLi4pLCA9PSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotYnVmIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmdldF9idWZmZXJfcHVzaGVkX2J5X2VsZW1lbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmVsZW1lbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAuLi4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGVzdGluZy5odG1sI2ctYXNzZXJ0LWNtcGludCI+Z19hc3NlcnRfY21waW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5HU1RfQlVGRkVSX1RJTUVTVEFNUDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksID09LDwvc3Bhbj4gbGF0ZW5jeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIj5nc3RfYnVmZmVyX3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUlORk86Q0FQUyI+R1NUX0lORk88L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtDaGVjayB0aGF0IGVsZW1lbnQgZG9lcyBub3Qgd2FpdCBmb3IgYW55IGNsb2NrIG5vdGlmaWNhdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGVzdGluZy5odG1sI2ctYXNzZXJ0Ij5nX2Fzc2VydDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oITwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXBlZWstbmV4dC1wZW5kaW5nLWlkIj5nc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnRlc3RfY2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPOkNBUFMiPkdTVF9JTkZPPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7U2V0IHRpbWUsIGNyZWF0ZSBhbmQgcHVzaCB0aGUgc2Vjb25kIGJ1ZmZlcjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stYWR2YW5jZS10aW1lIj5nc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj50ZXN0X2Nsb2NrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gR1NUX1NFQ09ORDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLWJ1ZiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5jcmVhdGVfdGVzdF9idWZmZXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1nZXQtdGltZSI+Z3N0X2Nsb2NrX2dldF90aW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSwgLi4uKTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmdzdF9hc3NlcnRfY21waW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoIj5nc3RfcGFkX3B1c2g8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zcmNwYWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gYnVmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksID09LDwvc3Bhbj4gR1NUX0ZMT1dfT0s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPOkNBUFMiPkdTVF9JTkZPPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7QmxvY2sgdW50aWwgZWxlbWVudCBpcyB3YWl0aW5nIGZvciBhIG5ldyBjbG9jayBub3RpZmljYXRpb248L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBlc2MiPlxuPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLW5leHQtcGVuZGluZy1pZCI+Z3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dGVzdF9jbG9jazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPnBlbmRpbmdfaWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtSU5GTzpDQVBTIj5HU1RfSU5GTzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0FkdmFuY2UgcGFzdCA3bXMgYmV5b25kIHRoZSByZXF1ZXN0ZWQgdGltZSBvZiB0aGUgY2xvY2sgbm90aWZpY2F0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1hZHZhbmNlLXRpbWUiPmdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnRlc3RfY2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gbGF0ZW5jeSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kzwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+Nzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IEdTVF9NU0VDT05EPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUlORk86Q0FQUyI+R1NUX0lORk88L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtSZWxlYXNlIHRoZSBuZXh0IGJsb2NraW5nIHdhaXQgYW5kIG1ha2Ugc3VyZSBpdCBpcyB0aGUgb25lIGZyb20gZWxlbWVudDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLXByb2Nlc3NlZF9pZCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wcm9jZXNzLW5leHQtY2xvY2staWQiPmdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnRlc3RfY2xvY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRlc3RpbmcuaHRtbCNnLWFzc2VydCI+Z19hc3NlcnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5wcm9jZXNzZWRfaWQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj09PC9zcGFuPiBwZW5kaW5nX2lkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UZXN0aW5nLmh0bWwjZy1hc3NlcnQtY21waW50Ij5nX2Fzc2VydF9jbXBpbnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stRU5UUlktU1RBVFVTOkNBUFMiPkdTVF9DTE9DS19FTlRSWV9TVEFUVVM8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5wcm9jZXNzZWRfaWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSwgPT0sPC9zcGFuPiBHU1RfQ0xPQ0tfT0s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5yZWYiPmdzdF9jbG9ja19pZF91bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnBlbmRpbmdfaWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNnc3QtY2xvY2staWQtdW5yZWYiPmdzdF9jbG9ja19pZF91bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnByb2Nlc3NlZF9pZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULUlORk86Q0FQUyI+R1NUX0lORk88L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtWYWxpZGF0ZSB0aGF0IGVsZW1lbnQgcHJvZHVjZWQgYW4gb3V0cHV0IGJ1ZmZlciBhbmQgY2hlY2sgaXRzIHRpbWVzdGFtcDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGVzdGluZy5odG1sI2ctYXNzZXJ0LWNtcGludCI+Z19hc3NlcnRfY21waW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5nZXRfbnVtYmVyX29mX291dHB1dF9idWZmZXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oLi4uKSwgPT0sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLWJ1ZiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5nZXRfYnVmZmVyX3B1c2hlZF9ieV9lbGVtZW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lbGVtZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgLi4uKTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRlc3RpbmcuaHRtbCNnLWFzc2VydC1jbXBpbnQiPmdfYXNzZXJ0X2NtcGludDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0JVRkZFUl9USU1FU1RBTVA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmJ1ZjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLCA9PSw8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9Im51bWJlciI+MTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBHU1RfU0VDT05EIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4rPC9zcGFuPiBsYXRlbmN5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4rPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj43PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gR1NUX01TRUNPTkQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjZ3N0LWJ1ZmZlci11bnJlZiI+Z3N0X2J1ZmZlcl91bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmJ1ZjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0SW5mby5odG1sI0dTVC1JTkZPOkNBUFMiPkdTVF9JTkZPPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7Q2hlY2sgdGhhdCBlbGVtZW50IGRvZXMgbm90IHdhaXQgZm9yIGFueSBjbG9jayBub3RpZmljYXRpb248L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBlc2MiPlxuPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRlc3RpbmcuaHRtbCNnLWFzc2VydCI+Z19hc3NlcnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCE8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wZWVrLW5leHQtcGVuZGluZy1pZCI+Z3N0X3Rlc3RfY2xvY2tfcGVla19uZXh0X3BlbmRpbmdfaWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj50ZXN0X2Nsb2NrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSk7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48cD5TaW5jZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiBpcyBvbmx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gdW5pdCB0ZXN0cyBpdCBjYWxscwotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGVzdGluZy5odG1sI2ctYXNzZXJ0Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfYXNzZXJ0KCk8L2NvZGU+PC9hPiwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGVzdGluZy5odG1sI2ctYXNzZXJ0LWNtcGludCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2Fzc2VydF9jbXBpbnQoKTwvY29kZT48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRlc3RpbmcuaHRtbCNnLWFzc2VydC1jbXB1aW50Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfYXNzZXJ0X2NtcHVpbnQoKTwvY29kZT48L2E+IHRvIHZhbGlkYXRlIGFsbCBmdW5jdGlvbgotYXJndW1lbnRzLiBUaGlzIHdpbGwgaGlnaGxpZ2h0IGFueSBpc3N1ZXMgd2l0aCB0aGUgdW5pdCB0ZXN0IGNvZGUgaXRzZWxmLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGVzdENsb2NrLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay1uZXciPjwvYT48aDM+Z3N0X3Rlc3RfY2xvY2tfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9jazwvc3Bhbj48L2E+wqAqCi1nc3RfdGVzdF9jbG9ja19uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyB0ZXN0IGNsb2NrIHdpdGggaXRzIHRpbWUgc2V0IHRvIHplcm8uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IGNhc3QgdG8gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLW5ldy13aXRoLXN0YXJ0LXRpbWUiPjwvYT48aDM+Z3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2s8L3NwYW4+PC9hPsKgKgotZ3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBzdGFydF90aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgdGVzdCBjbG9jayB3aXRoIGl0cyB0aW1lIHNldCB0byB0aGUgc3BlY2lmaWVkIHRpbWUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay1uZXctd2l0aC1zdGFydC10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdGFydF90aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gc2V0IHRvIHRoZSBkZXNpcmVkIHN0YXJ0IHRpbWUgb2YgdGhlIGNsb2NrLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLW5ldy13aXRoLXN0YXJ0LXRpbWUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IGNhc3QgdG8gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXNldC10aW1lIj48L2E+PGgzPmdzdF90ZXN0X2Nsb2NrX3NldF90aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiAqdGVzdF9jbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IG5ld190aW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIHRpbWUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlc3RfY2xvY2s8L2NvZGU+PC9lbT4KLSB0byB0aGUgdGltZSBnaXZlbiBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmV3X3RpbWU8L2NvZGU+PC9lbT4KLS4gVGhlIHRpbWUgb2YKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZXN0X2Nsb2NrPC9jb2RlPjwvZW0+Ci0gaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLCB0aGVyZWZvcmUgcHJvdmlkaW5nIGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ld190aW1lPC9jb2RlPjwvZW0+Ci0KLXdoaWNoIGlzIGVhcmxpZXIgb3IgZXF1YWwgdG8gdGhlIHRpbWUgb2YgdGhlIGNsb2NrIGFzIGdpdmVuIGJ5Ci08YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19nZXRfdGltZSgpPC9jb2RlPjwvYT4gaXMgYSBwcm9ncmFtbWluZyBlcnJvci48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXNldC10aW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlc3RfY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IG9mIHdoaWNoIHRvIHNldCB0aGUgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uZXdfdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IGxhdGVyIHRoYW4gdGhhdCByZXR1cm5lZCBieSA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjZ3N0LWNsb2NrLWdldC10aW1lIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19nZXRfdGltZSgpPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRlc3QtY2xvY2stYWR2YW5jZS10aW1lIj48L2E+PGgzPmdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+ICp0ZXN0X2Nsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZURpZmYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWVEaWZmPC9zcGFuPjwvYT4gZGVsdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QWR2YW5jZXMgdGhlIHRpbWUgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZXN0X2Nsb2NrPC9jb2RlPjwvZW0+Ci0gYnkgdGhlIGFtb3VudCBnaXZlbiBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGVsdGE8L2NvZGU+PC9lbT4KLS4gVGhlCi10aW1lIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZXN0X2Nsb2NrPC9jb2RlPjwvZW0+Ci0gaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLCB0aGVyZWZvcmUgcHJvdmlkaW5nIGEKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZWx0YTwvY29kZT48L2VtPgotIHdoaWNoIGlzIG5lZ2F0aXZlIG9yIHplcm8gaXMgYSBwcm9ncmFtbWluZyBlcnJvci48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLWFkdmFuY2UtdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50ZXN0X2Nsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiBmb3Igd2hpY2ggdG8gaW5jcmVhc2UgdGhlIHRpbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVsdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBvc2l0aXZlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWVEaWZmIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lRGlmZjwvc3Bhbj48L2E+IHRvIGJlIGFkZGVkIHRvIHRoZSB0aW1lIG9mIHRoZSBjbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay1wZWVrLWlkLWNvdW50Ij48L2E+PGgzPmdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiAqdGVzdF9jbG9jazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwZW5kaW5nIGNsb2NrIG5vdGlmaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4KLXJlcXVlc3RlZCBmcm9tIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGVzdF9jbG9jazwvY29kZT48L2VtPgotLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRlc3QtY2xvY2stcGVlay1pZC1jb3VudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVzdF9jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4gZm9yIHdoaWNoIHRvIGNvdW50IG5vdGlmaWNhdGlvbnM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay1wZWVrLWlkLWNvdW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIG51bWJlciBvZiBwZW5kaW5nIGNsb2NrIG5vdGlmaWNhdGlvbnMuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLWhhcy1pZCI+PC9hPjxoMz5nc3RfdGVzdF9jbG9ja19oYXNfaWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90ZXN0X2Nsb2NrX2hhc19pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+ICp0ZXN0X2Nsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gaWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2hlY2tzIHdoZXRoZXIgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlc3RfY2xvY2s8L2NvZGU+PC9lbT4KLSB3YXMgcmVxdWVzdGVkIHRvIHByb3ZpZGUgdGhlIGNsb2NrIG5vdGlmaWNhdGlvbgotZ2l2ZW4gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay1oYXMtaWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVzdF9jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4gdG8gYXNrIGlmIGl0IHByb3ZpZGVkIHRoZSBub3RpZmljYXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBjbG9jayBub3RpZmljYXRpb24uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRlc3QtY2xvY2staGFzLWlkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBjbG9jayBoYXMgYmVlbiBhc2tlZCB0byBwcm92aWRlIHRoZSBnaXZlbiBjbG9jawotbm90aWZpY2F0aW9uLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXBlZWstbmV4dC1wZW5kaW5nLWlkIj48L2E+PGgzPmdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+ICp0ZXN0X2Nsb2NrPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiAqcGVuZGluZ19pZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5EZXRlcm1pbmVzIGlmIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGVuZGluZ19pZDwvY29kZT48L2VtPgotIGlzIHRoZSBuZXh0IGNsb2NrIG5vdGlmaWNhdGlvbiBzY2hlZHVsZWQgdG8KLWJlIHRyaWdnZXJlZCBnaXZlbiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGVzdF9jbG9jazwvY29kZT48L2VtPgotLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPHA+UmV0dXJuOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBlbmRpbmdfaWQ8L2NvZGU+PC9lbT4KLSBpcyB0aGUgbmV4dCBjbG9jayBub3RpZmljYXRpb24gdG8gYmUKLXRyaWdnZXJlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXBlZWstbmV4dC1wZW5kaW5nLWlkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlc3RfY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IHRvIGNoZWNrIHRoZSBjbG9jayBub3RpZmljYXRpb25zIGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wZW5kaW5nX2lkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gY2xvY2sKLW5vdGlmaWNhdGlvbiB0byBsb29rIGZvci4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRlc3QtY2xvY2std2FpdC1mb3ItbmV4dC1wZW5kaW5nLWlkIj48L2E+PGgzPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4gKnRlc3RfY2xvY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiAqcGVuZGluZ19pZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5XYWl0cyB1bnRpbCBhIGNsb2NrIG5vdGlmaWNhdGlvbiBpcyByZXF1ZXN0ZWQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGVzdF9jbG9jazwvY29kZT48L2VtPgotLiBUaGVyZSBpcyBubwotdGltZW91dCBmb3IgdGhpcyB3YWl0LCBzZWUgdGhlIG1haW4gZGVzY3JpcHRpb24gb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4uIEEgcmVmZXJlbmNlCi10byB0aGUgcGVuZGluZyBjbG9jayBub3RpZmljYXRpb24gaXMgc3RvcmVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wZW5kaW5nX2lkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay13YWl0LWZvci1uZXh0LXBlbmRpbmctaWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVzdF9jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IGZvciB3aGljaCB0byBnZXQgdGhlIHBlbmRpbmcgY2xvY2sgbm90aWZpY2F0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBlbmRpbmdfaWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4KLXdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlbmRpbmcgY2xvY2sgbm90aWZpY2F0aW9uLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay13YWl0LWZvci1wZW5kaW5nLWlkLWNvdW50Ij48L2E+PGgzPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX3BlbmRpbmdfaWRfY291bnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9wZW5kaW5nX2lkX2NvdW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiAqdGVzdF9jbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGNvdW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9Indhcm5pbmciPgotPHA+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX3BlbmRpbmdfaWRfY291bnQ8L2NvZGU+IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBuZXdseS13cml0dGVuIGNvZGUuPC9wPgotPHA+dXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay13YWl0LWZvci1tdWx0aXBsZS1wZW5kaW5nLWlkcyIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkcygpPC9jb2RlPjwvYT4gaW5zdGVhZC48L3A+Ci08L2Rpdj4KLTxwPkJsb2NrcyB1bnRpbCBhdCBsZWFzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y291bnQ8L2NvZGU+PC9lbT4KLSBjbG9jayBub3RpZmljYXRpb25zIGhhdmUgYmVlbiByZXF1ZXN0ZWQgZnJvbQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRlc3RfY2xvY2s8L2NvZGU+PC9lbT4KLS4gVGhlcmUgaXMgbm8gdGltZW91dCBmb3IgdGhpcyB3YWl0LCBzZWUgdGhlIG1haW4gZGVzY3JpcHRpb24gb2YKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLXBlbmRpbmctaWQtY291bnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVzdF9jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IGZvciB3aGljaCB0byBhd2FpdCBoYXZpbmcgZW5vdWdoIHBlbmRpbmcgY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y291bnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIHBlbmRpbmcgY2xvY2sgbm90aWZpY2F0aW9ucyB0byB3YWl0IGZvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay1wcm9jZXNzLW5leHQtY2xvY2staWQiPjwvYT48aDM+Z3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+Ci1nc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiAqdGVzdF9jbG9jazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXByb2Nlc3MtbmV4dC1jbG9jay1pZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVzdF9jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4gZm9yIHdoaWNoIHRvIHJldHJpZXZlIHRoZSBuZXh0IHBlbmRpbmcgY2xvY2sKLW5vdGlmaWNhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXByb2Nlc3MtbmV4dC1jbG9jay1pZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gY29udGFpbmluZyB0aGUgbmV4dCBwZW5kaW5nIGNsb2NrCi1ub3RpZmljYXRpb24uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLWdldC1uZXh0LWVudHJ5LXRpbWUiPjwvYT48aDM+Z3N0X3Rlc3RfY2xvY2tfZ2V0X25leHRfZW50cnlfdGltZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLWdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiAqdGVzdF9jbG9jazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXRyaWV2ZSB0aGUgcmVxdWVzdGVkIHRpbWUgZm9yIHRoZSBuZXh0IHBlbmRpbmcgY2xvY2sgbm90aWZpY2F0aW9uLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRlc3QtY2xvY2stZ2V0LW5leHQtZW50cnktdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGVzdF9jbG9jazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4gdG8gZmV0Y2ggdGhlIG5leHQgY2xvY2sgbm90aWZpY2F0aW9uIHRpbWUgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRlc3QtY2xvY2stZ2V0LW5leHQtZW50cnktdGltZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+IHNldCB0byB0aGUgdGltZSBvZiB0aGUgbmV4dCBwZW5kaW5nIGNsb2NrCi1ub3RpZmljYXRpb24uIElmIG5vIGNsb2NrIG5vdGlmaWNhdGlvbnMgaGF2ZSBiZWVuIHJlcXVlc3RlZAotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19USU1FX05PTkU8L2NvZGU+PC9hPiB3aWxsIGJlIHJldHVybmVkLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay13YWl0LWZvci1tdWx0aXBsZS1wZW5kaW5nLWlkcyI+PC9hPjxoMz5nc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiAqdGVzdF9jbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGNvdW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqKnBlbmRpbmdfbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5CbG9ja3MgdW50aWwgYXQgbGVhc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvdW50PC9jb2RlPjwvZW0+Ci0gY2xvY2sgbm90aWZpY2F0aW9ucyBoYXZlIGJlZW4gcmVxdWVzdGVkIGZyb20KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50ZXN0X2Nsb2NrPC9jb2RlPjwvZW0+Ci0uIFRoZXJlIGlzIG5vIHRpbWVvdXQgZm9yIHRoaXMgd2FpdCwgc2VlIHRoZSBtYWluIGRlc2NyaXB0aW9uIG9mCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLW11bHRpcGxlLXBlbmRpbmctaWRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRlc3RfY2xvY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiBmb3Igd2hpY2ggdG8gYXdhaXQgaGF2aW5nIGVub3VnaCBwZW5kaW5nIGNsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvdW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG51bWJlciBvZiBwZW5kaW5nIGNsb2NrIG5vdGlmaWNhdGlvbnMgdG8gd2FpdCBmb3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGVuZGluZ19saXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IEFkZHJlc3MKLW9mIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBsaXN0IG9mIHBlbmRpbmcgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEczwvc3Bhbj48L2E+Ci10aGF0IGV4cGlyZWQsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuQ2xvY2tJRF1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLWlkLWxpc3QtZ2V0LWxhdGVzdC10aW1lIj48L2E+PGgzPmdzdF90ZXN0X2Nsb2NrX2lkX2xpc3RfZ2V0X2xhdGVzdF90aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotZ3N0X3Rlc3RfY2xvY2tfaWRfbGlzdF9nZXRfbGF0ZXN0X3RpbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKnBlbmRpbmdfbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GaW5kcyB0aGUgbGF0ZXN0IHRpbWUgaW5zaWRlIHRoZSBsaXN0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRlc3QtY2xvY2staWQtbGlzdC1nZXQtbGF0ZXN0LXRpbWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBlbmRpbmdfbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBMaXN0Ci1vZiBvZiBwZW5kaW5nIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRHM8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuQ2xvY2tJRF1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGVzdC1jbG9jay1wcm9jZXNzLWlkLWxpc3QiPjwvYT48aDM+Z3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19pZF9saXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiAqdGVzdF9jbG9jazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdMaXN0PC9zcGFuPjwvYT4gKnBlbmRpbmdfbGlzdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Qcm9jZXNzZXMgYW5kIHJlbGVhc2VzIHRoZSBwZW5kaW5nIElEcyBpbiB0aGUgbGlzdC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLXByb2Nlc3MtaWQtbGlzdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50ZXN0X2Nsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4gZm9yIHdoaWNoIHRvIHByb2Nlc3MgdGhlIHBlbmRpbmcgSURzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBlbmRpbmdfbGlzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBMaXN0Ci1vZiBwZW5kaW5nIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRHM8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3QuQ2xvY2tJRF1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLWNyYW5rIj48L2E+PGgzPmdzdF90ZXN0X2Nsb2NrX2NyYW5rwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGVzdF9jbG9ja19jcmFuayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+ICp0ZXN0X2Nsb2NrPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgImNyYW5rIiBjb25zaXN0cyBvZiB0aHJlZSBzdGVwczoKLTE6IFdhaXQgZm9yIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPi4KLTI6IEFkdmFuY2UgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IHRvIHRoZSB0aW1lIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpcyB3YWl0aW5nIGZvci4KLTM6IFJlbGVhc2UgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHdhaXQuCi1BICJjcmFuayIgY2FuIGJlIHRob3VnaCBvZiBhcyB0aGUgbm90aW9uIG9mCi1tYW51YWxseSBkcml2aW5nIHRoZSBjbG9jayBmb3J3YXJkIHRvIGl0cyBuZXh0IGxvZ2ljYWwgc3RlcC48L3A+Ci08cD5SZXR1cm46IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgY3Jhbmsgd2FzIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10ZXN0LWNsb2NrLWNyYW5rLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50ZXN0X2Nsb2NrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4gdG8gY3Jhbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VGVzdENsb2NrLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUZXN0Q2xvY2stc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RUZXN0Q2xvY2s8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RUZXN0Q2xvY2s7PC9wcmU+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IHN0cnVjdHVyZSB3aGljaCBpcyBiYXNlZCBvbiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+IGFsb25nIHdpdGggc29tZQotcHJpdmF0ZSBkYXRhLjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGVzdENsb2NrQ2xhc3MiPjwvYT48aDM+c3RydWN0IEdzdFRlc3RDbG9ja0NsYXNzPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VGVzdENsb2NrQ2xhc3MgewotICBHc3RDbG9ja0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci08L3ByZT4KLTxwPlRoZSBjbGFzcyBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+LCB3aGljaCBoYXMgbm8gdmlydHVhbCBtZXRob2RzIHRvIG92ZXJyaWRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRlc3RDbG9ja0NsYXNzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRlc3RDbG9jay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGVzdENsb2NrLS1jbG9jay10eXBlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xvY2stdHlwZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2xvY2stdHlwZeKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0U3lzdGVtQ2xvY2suaHRtbCNHc3RDbG9ja1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1R5cGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIGtpbmQgb2YgY2xvY2sgaW1wbGVtZW50YXRpb24gdG8gYmUgcmVwb3J0ZWQgYnkgdGhpcyBjbG9jay48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUZXN0Q2xvY2stLXN0YXJ0LXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzdGFydC10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzdGFydC10aW1l4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5XaGVuIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT4gaXMgY29uc3RydWN0ZWQgaXQgd2lsbCBoYXZlIGEgY2VydGFpbiBzdGFydCB0aW1lIHNldC4KLUlmIHRoZSBjbG9jayB3YXMgY3JlYXRlZCB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stbmV3LXdpdGgtc3RhcnQtdGltZSIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUoKTwvY29kZT48L2E+IHRoZW4KLXRoaXMgcHJvcGVydHkgY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RhcnRfdGltZTwvY29kZT48L2VtPgotIGFyZ3VtZW50LiBJZgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLW5ldyIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3Rlc3RfY2xvY2tfbmV3KCk8L2NvZGU+PC9hPiB3YXMgY2FsbGVkIHRoZSBjbG9jayBzdGFydGVkIGF0IHRpbWUgemVybywgYW5kIHRodXMKLXRoaXMgcHJvcGVydHkgY29udGFpbnMgdGhlIHZhbHVlIDAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdCBPbmx5PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUZXN0Q2xvY2suc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgaHJlZj0iLi4vaHRtbC9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN5c3RlbUNsb2NrPC9zcGFuPjwvYT4sIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9jazwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIGIvZG9jcy9saWJzL2h0bWwvR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ4ODdlOC4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjA0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgRHluYW1pYyBQYXJhbWV0ZXIgQ29udHJvbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3REaXJlY3RDb250cm9sQmluZGluZyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2Uuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvaDI+Ci08cD5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSDigJQgdGltZWQgdmFsdWUgY29udHJvbCBzb3VyY2UgYmFzZSBjbGFzczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TZXF1ZW5jZXMuaHRtbCNHU2VxdWVuY2VJdGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdTZXF1ZW5jZUl0ZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2UtZmluZC1jb250cm9sLXBvaW50LWl0ZXIiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X2l0ZXLCoCgpIj5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X2l0ZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXNldCIgdGl0bGU9ImdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXTCoCgpIj5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1zZXQtZnJvbS1saXN0IiB0aXRsZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldF9mcm9tX2xpc3TCoCgpIj5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURvdWJseS1MaW5rZWQtTGlzdHMuaHRtbCNHTGlzdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HTGlzdDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1nZXQtYWxsIiB0aXRsZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9hbGzCoCgpIj5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2FsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2UtdW5zZXQiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXTCoCgpIj5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS11bnNldC1hbGwiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXRfYWxswqAoKSI+Z3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLWdldC1jb3VudCIgdGl0bGU9ImdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfY291bnTCoCgpIj5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1pbnZhbGlkYXRlLWNhY2hlIiB0aXRsZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfaW52YWxpZGF0ZV9jYWNoZcKgKCkiPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX2ludmFsaWRhdGVfY2FjaGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UtdmFsdWUtYWRkZWQiIHRpdGxlPSJUaGUg4oCcdmFsdWUtYWRkZWTigJ0gc2lnbmFsIj52YWx1ZS1hZGRlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS12YWx1ZS1jaGFuZ2VkIiB0aXRsZT0iVGhlIOKAnHZhbHVlLWNoYW5nZWTigJ0gc2lnbmFsIj52YWx1ZS1jaGFuZ2VkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLXZhbHVlLXJlbW92ZWQiIHRpdGxlPSJUaGUg4oCcdmFsdWUtcmVtb3ZlZOKAnSBzaWduYWwiPnZhbHVlLXJlbW92ZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPlJ1biBGaXJzdDwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFBvaW50IiB0aXRsZT0ic3RydWN0IEdzdENvbnRyb2xQb2ludCI+R3N0Q29udHJvbFBvaW50PC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij5Hc3RDb250cm9sU291cmNlPC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlCi0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvYT4KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2xpYnMvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkJhc2UgY2xhc3MgZm9yIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IHRoYXQgdXNlIHRpbWUtc3RhbXBlZCB2YWx1ZXMuPC9wPgotPHA+V2hlbiBvdmVycmlkaW5nIGJpbmQsIGNoYWluIHVwIGZpcnN0IHRvIGdpdmUgdGhpcyBiaW5kIGltcGxlbWVudGF0aW9uIGEKLWNoYW5jZSB0byBzZXR1cCB0aGluZ3MuPC9wPgotPHA+QWxsIGZ1bmN0aW9ucyBhcmUgTVQtc2FmZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2UtZmluZC1jb250cm9sLXBvaW50LWl0ZXIiPjwvYT48aDM+Z3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU2VxdWVuY2VzLmh0bWwjR1NlcXVlbmNlSXRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5HU2VxdWVuY2VJdGVyPC9zcGFuPjwvYT7CoCoKLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpbmQgbGFzdCB2YWx1ZSBiZWZvcmUgZ2l2ZW4gdGltZXN0YW1wIGluIGNvbnRyb2wgcG9pbnQgbGlzdC4KLUlmIGFsbCB2YWx1ZXMgaW4gdGhlIGNvbnRyb2wgcG9pbnQgbGlzdCBjb21lIGFmdGVyIHRoZSBnaXZlbgotdGltZXN0YW1wIG9yIG5vIHZhbHVlcyBleGlzdCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlzIHJldHVybmVkLjwvcD4KLTxwPkZvciB1c2UgaW4gY29udHJvbCBzb3VyY2UgaW1wbGVtZW50YXRpb25zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1maW5kLWNvbnRyb2wtcG9pbnQtaXRlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbnRyb2wgc291cmNlIHRvIHNlYXJjaCBpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2VhcmNoIGtleTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLWZpbmQtY29udHJvbC1wb2ludC1pdGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGZvdW5kIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVNlcXVlbmNlcy5odG1sI0dTZXF1ZW5jZUl0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU2VxdWVuY2VJdGVyPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2Utc2V0Ij48L2E+PGgzPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXQgdGhlIHZhbHVlIG9mIGdpdmVuIGNvbnRyb2xsZXItaGFuZGxlZCBwcm9wZXJ0eSBhdCBhIGNlcnRhaW4gdGltZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2Utc2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSB0aW1lIHRoZSBjb250cm9sLWNoYW5nZSBpcyBzY2hlZHVsZWQgZm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNvbnRyb2wtdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1zZXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBGQUxTRSBpZiB0aGUgdmFsdWVzIGNvdWxkbid0IGJlIHNldCwgVFJVRSBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1zZXQtZnJvbS1saXN0Ij48L2E+PGgzPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TaW5nbHktTGlua2VkLUxpc3RzLmh0bWwjR1NMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NMaXN0PC9zcGFuPjwvYT4gKnRpbWVkdmFsdWVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgbXVsdGlwbGUgdGltZWQgdmFsdWVzIGF0IG9uY2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXNldC1mcm9tLWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZWR2YWx1ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSBsaXN0Ci13aXRoIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUaW1lZFZhbHVlPC9zcGFuPjwvYT4gaXRlbXMuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkdlbmVyaWNzIGFuZCBkZWZpbmluZyBlbGVtZW50cyBvZiBjb250YWluZXJzIGFuZCBhcnJheXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+ZWxlbWVudC10eXBlPC9zcGFuPjwvYWNyb255bT4gR3N0VGltZWRWYWx1ZV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXNldC1mcm9tLWxpc3QucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBGQUxTRSBpZiB0aGUgdmFsdWVzIGNvdWxkbid0IGJlIHNldCwgVFJVRSBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1nZXQtYWxsIj48L2E+PGgzPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfYWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdMaXN0PC9zcGFuPjwvYT7CoCoKLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIGEgcmVhZC1vbmx5IGNvcHkgb2YgdGhlIGxpc3Qgb2YgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0VGltZWRWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWU8L3NwYW4+PC9hPiBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgotRnJlZSB0aGUgbGlzdCBhZnRlciBkb25lIHdpdGggaXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLWdldC1hbGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gdG8gZ2V0IHRoZSBsaXN0IGZyb208L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2UtZ2V0LWFsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgY29weQotb2YgdGhlIGxpc3QsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlci4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGNvbnRhaW5lciBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGNvbnRhaW5lcjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3RUaW1lZFZhbHVlXTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXVuc2V0Ij48L2E+PGgzPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZXN0YW1wPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVzZWQgdG8gcmVtb3ZlIHRoZSB2YWx1ZSBvZiBnaXZlbiBjb250cm9sbGVyLWhhbmRsZWQgcHJvcGVydHkgYXQgYSBjZXJ0YWluCi10aW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS11bnNldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZWxmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+IG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lc3RhbXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdGltZSB0aGUgY29udHJvbC1jaGFuZ2Ugc2hvdWxkIGJlIHJlbW92ZWQgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXVuc2V0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gRkFMU0UgaWYgdGhlIHZhbHVlIGNvdWxkbid0IGJlIHVuc2V0IChpLmUuIG5vdCBmb3VuZCwgVFJVRSBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS11bnNldC1hbGwiPjwvYT48aDM+Z3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldF9hbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+ICpzZWxmPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVzZWQgdG8gcmVtb3ZlIGFsbCB0aW1lLXN0YW1wZWQgdmFsdWVzIG9mIGdpdmVuIGNvbnRyb2xsZXItaGFuZGxlZCBwcm9wZXJ0eTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS11bnNldC1hbGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2UtZ2V0LWNvdW50Ij48L2E+PGgzPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfY291bnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiAqc2VsZjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIG51bWJlciBvZiBjb250cm9sIHBvaW50cyB0aGF0IGFyZSBzZXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLWdldC1jb3VudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiB0byBnZXQgdGhlIG51bWJlciBvZiB2YWx1ZXMgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1nZXQtY291bnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbnVtYmVyIG9mIGNvbnRyb2wgcG9pbnRzIHRoYXQgYXJlIHNldC48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtaW52YWxpZGF0ZS1jYWNoZSI+PC9hPjxoMz5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9pbnZhbGlkYXRlX2NhY2hlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfaW52YWxpZGF0ZV9jYWNoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGY8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVzZXQgdGhlIGNvbnRyb2xsZWQgdmFsdWUgY2FjaGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtaW52YWxpZGF0ZS1jYWNoZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VsZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2Utc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlOzwvcHJlPgotPHA+VGhlIGluc3RhbmNlIHN0cnVjdHVyZSBvZiA8YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbnRyb2xQb2ludCI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q29udHJvbFBvaW50PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0Q29udHJvbFBvaW50IHsKLSAgLyogZmllbGRzIGZyb20gR3N0VGltZWRWYWx1ZS4gRE8gTk9UIENIQU5HRSEgKi8KLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgZ2RvdWJsZSB2YWx1ZTsKLX07Ci08L3ByZT4KLTxwPkFuIGludGVybmFsIHN0cnVjdHVyZSBmb3IgdmFsdWUrdGltZSBhbmQgdmFyaW91cyB0ZW1wb3JhcnkKLXZhbHVlcyB1c2VkIGZvciBpbnRlcnBvbGF0aW9uLiBUaGlzICJpbmhlcml0cyIgZnJvbQotR3N0VGltZWRWYWx1ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RDb250cm9sUG9pbnQubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Q29udHJvbFBvaW50LnRpbWVzdGFtcCI+PC9hPnRpbWVzdGFtcDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGltZXN0YW1wIG9mIHRoZSB2YWx1ZSBjaGFuZ2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdENvbnRyb2xQb2ludC52YWx1ZSI+PC9hPnZhbHVlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IHZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLXZhbHVlLWFkZGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdmFsdWUtYWRkZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGYsCi0gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sUG9pbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbFBvaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFBvaW50PC9zcGFuPjwvYT4gICAgICAgICAgICAqdGltZWRfdmFsdWUsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RW1pdGVkIHJpZ2h0IGFmdGVyIHRoZSBuZXcgdmFsdWUgaGFzIGJlZW4gYWRkZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlbGY8L2NvZGU+PC9lbT4KLTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLXZhbHVlLWFkZGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gaW50byB3aGljaCBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUaW1lZFZhbHVlPC9zcGFuPjwvYT4gaGFzIGJlZW4KLWFkZGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVkX3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5ld2x5IGFkZGVkIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUaW1lZFZhbHVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UtdmFsdWUtY2hhbmdlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHZhbHVlLWNoYW5nZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGYsCi0gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sUG9pbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbFBvaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFBvaW50PC9zcGFuPjwvYT4gICAgICAgICAgICAqdGltZWRfdmFsdWUsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RW1pdGVkIHJpZ2h0IGFmdGVyIHRoZSBuZXcgdmFsdWUgaGFzIGJlZW4gc2V0IG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50aW1lZF9zaWduYWxzPC9jb2RlPjwvZW0+Ci08L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS12YWx1ZS1jaGFuZ2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gb24gd2hpY2ggYSA8YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGltZWRWYWx1ZTwvc3Bhbj48L2E+IGhhcyBjaGFuZ2VkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVkX3ZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUaW1lZFZhbHVlPC9zcGFuPjwvYT4gd2hlcmUgdGhlIHZhbHVlIGNoYW5nZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UtdmFsdWUtcmVtb3ZlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHZhbHVlLXJlbW92ZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gKnNlbGYsCi0gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sUG9pbnQiIHRpdGxlPSJzdHJ1Y3QgR3N0Q29udHJvbFBvaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFBvaW50PC9zcGFuPjwvYT4gICAgICAgICAgICAqdGltZWRfdmFsdWUsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RW1pdGVkIHdoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnRpbWVkX3ZhbHVlPC9jb2RlPjwvZW0+Ci0gaXMgcmVtb3ZlZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZWxmPC9jb2RlPjwvZW0+Ci08L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS12YWx1ZS1yZW1vdmVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlbGY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9zcGFuPjwvYT4gZnJvbSB3aGljaCBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUaW1lZFZhbHVlPC9zcGFuPjwvYT4gaGFzIGJlZW4KLXJlbW92ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dGltZWRfdmFsdWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgcmVtb3ZlZCA8YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGltZWRWYWx1ZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPlJ1biBGaXJzdDwvYT48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCBiL2RvY3MvbGlicy9odG1sL0dzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZjE2ZDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0VHJpZ2dlckNvbnRyb2xTb3VyY2U6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItY29udHJvbC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2wiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLW5ldC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlcyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLW5ldC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UudG9wX29mX3BhZ2UiPjwvYT5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvc3Bhbj48L2gyPgotPHA+R3N0VHJpZ2dlckNvbnRyb2xTb3VyY2Ug4oCUIHRyaWdnZXIgY29udHJvbCBzb3VyY2U8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdHJpZ2dlci1jb250cm9sLXNvdXJjZS1uZXciIHRpdGxlPSJnc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9uZXfCoCgpIj5nc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sI0dzdFRyaWdnZXJDb250cm9sU291cmNlLS10b2xlcmFuY2UiIHRpdGxlPSJUaGUg4oCcdG9sZXJhbmNl4oCdIHByb3BlcnR5Ij50b2xlcmFuY2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRyaWdnZXJDb250cm9sU291cmNlIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCNHU1QtVFlQRS1UUklHR0VSLVdBVkVGT1JNOkNBUFMiIHRpdGxlPSJHU1RfVFlQRV9UUklHR0VSX1dBVkVGT1JNIj5HU1RfVFlQRV9UUklHR0VSX1dBVkVGT1JNPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij5Hc3RDb250cm9sU291cmNlPC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7bGlicy9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyaWdnZXJDb250cm9sU291cmNlPC9zcGFuPjwvYT4gaXMgYSA8YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RDb250cm9sU291cmNlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENvbnRyb2xTb3VyY2U8L3NwYW4+PC9hPiwgdGhhdCByZXR1cm5zIHZhbHVlcyBmcm9tIHVzZXItZ2l2ZW4KLWNvbnRyb2wgcG9pbnRzLiBJdCBhbGxvd3MgZm9yIGEgdG9sZXJhbmNlIG9uIHRoZSB0aW1lLXN0YW1wcy48L3A+Ci08cD5UbyB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRyaWdnZXJDb250cm9sU291cmNlPC9zcGFuPjwvYT4gZ2V0IGEgbmV3IGluc3RhbmNlIGJ5IGNhbGxpbmcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sI2dzdC10cmlnZ2VyLWNvbnRyb2wtc291cmNlLW5ldyIgdGl0bGU9ImdzdF90cmlnZ2VyX2NvbnRyb2xfc291cmNlX25ld8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfbmV3KCk8L2NvZGU+PC9hPiwgYmluZCBpdCB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdQYXJhbVNwZWMuaHRtbCNHUGFyYW1TcGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R1BhcmFtU3BlYzwvc3Bhbj48L2E+IGFuZCBzZXQgc29tZQotY29udHJvbCBwb2ludHMgYnkgY2FsbGluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2Utc2V0IiB0aXRsZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCgpPC9jb2RlPjwvYT4uPC9wPgotPHA+QWxsIGZ1bmN0aW9ucyBhcmUgTVQtc2FmZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHJpZ2dlci1jb250cm9sLXNvdXJjZS1uZXciPjwvYT48aDM+Z3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+wqAqCi1nc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhpcyByZXR1cm5zIGEgbmV3LCB1bmJvdW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10cmlnZ2VyLWNvbnRyb2wtc291cmNlLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3LCB1bmJvdW5kIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFRyaWdnZXJDb250cm9sU291cmNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2U7PC9wcmU+Ci08cD5UaGUgaW5zdGFuY2Ugc3RydWN0dXJlIG9mIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xTb3VyY2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q29udHJvbFNvdXJjZTwvc3Bhbj48L2E+LjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULVRZUEUtVFJJR0dFUi1XQVZFRk9STTpDQVBTIj48L2E+PGgzPkdTVF9UWVBFX1RSSUdHRVJfV0FWRUZPUk08L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX1RZUEVfVFJJR0dFUl9XQVZFRk9STSAoZ3N0X3RyaWdnZXJfd2F2ZWZvcm1fZ2V0X3R5cGUgKCkpCi08L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UtLXRvbGVyYW5jZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRvbGVyYW5jZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdG9sZXJhbmNl4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkFtb3VudCBvZiBucyBhIGNvbnRyb2wgdGltZSBjYW4gYmUgb2ZmIHRvIHN0aWxsIHRyaWdnZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMGNiN2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkFubm90YXRpb24gR2xvc3Nhcnk6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpeDA4Lmh0bWwiIHRpdGxlPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuMC4xIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PHNwYW4gaWQ9Im5hdl9nbG9zc2FyeSI+PGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzQSI+QTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNnbHNDIj5DPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2dsc0UiPkU8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzSSI+STwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNnbHNOIj5OPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2dsc08iPk88L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjZ2xzUiI+UjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNnbHNTIj5TPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2dsc1QiPlQ8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwOC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJyaWdodC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iZ2xvc3NhcnkiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzYXJ5Ij48L2E+QW5ub3RhdGlvbiBHbG9zc2FyeTwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+Ci08YSBuYW1lPSJnbHNBIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QTwvaDM+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tYWxsb3ctbm9uZSI+PC9hPmFsbG93LW5vbmU8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPk5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tYXJyYXkiPjwvYT5hcnJheTwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+UGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy48L3A+PC9kZD4KLTxhIG5hbWU9Imdsc0MiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5DPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1jbG9zdXJlIj48L2E+Y2xvc3VyZTwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+VGhpcyBwYXJhbWV0ZXIgaXMgYSAndXNlcl9kYXRhJywgZm9yIGNhbGxiYWNrczsgbWFueSBiaW5kaW5ncyBjYW4gcGFzcyBOVUxMIGhlcmUuPC9wPjwvZGQ+Ci08YSBuYW1lPSJnbHNFIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RTwvaDM+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tZWxlbWVudC10eXBlIj48L2E+ZWxlbWVudC10eXBlPC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5HZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLjwvcD48L2RkPgotPGEgbmFtZT0iZ2xzSSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkk8L2gzPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLWluIj48L2E+aW48L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPi48L3A+PC9kZD4KLTxhIG5hbWU9Imdsc04iPjwvYT48aDMgY2xhc3M9InRpdGxlIj5OPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1udWxsYWJsZSI+PC9hPm51bGxhYmxlPC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5OVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuPC9wPjwvZGQ+Ci08YSBuYW1lPSJnbHNPIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TzwvaDM+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tb3V0Ij48L2E+b3V0PC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5QYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIDxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT4uPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tb3V0JTIwY2FsbGVyLWFsbG9jYXRlcyI+PC9hPm91dCBjYWxsZXItYWxsb2NhdGVzPC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5PdXQgcGFyYW1ldGVyLCB3aGVyZSBjYWxsZXIgbXVzdCBhbGxvY2F0ZSBzdG9yYWdlLjwvcD48L2RkPgotPGEgbmFtZT0iZ2xzUiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlI8L2gzPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXJlbmFtZS10byI+PC9hPnJlbmFtZS10bzwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+UmVuYW1lIHRoZSBvcmlnaW5hbCBzeW1ib2wncyBuYW1lIHRvIFNZTUJPTC48L3A+PC9kZD4KLTxhIG5hbWU9Imdsc1MiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5TPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS1zY29wZSUyMGFzeW5jIj48L2E+c2NvcGUgYXN5bmM8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPlRoZSBjYWxsYmFjayBpcyB2YWxpZCB1bnRpbCBmaXJzdCBjYWxsZWQuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tc2NvcGUlMjBjYWxsIj48L2E+c2NvcGUgY2FsbDwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+VGhlIGNhbGxiYWNrIGlzIHZhbGlkIG9ubHkgZHVyaW5nIHRoZSBjYWxsIHRvIHRoZSBtZXRob2QuPC9wPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzdGVybSI+PGEgbmFtZT0iYW5ub3RhdGlvbi1nbG9zc3Rlcm0tc2tpcCI+PC9hPnNraXA8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy48L3A+PC9kZD4KLTxhIG5hbWU9Imdsc1QiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KLTxkdD48c3BhbiBjbGFzcz0iZ2xvc3N0ZXJtIj48YSBuYW1lPSJhbm5vdGF0aW9uLWdsb3NzdGVybS10cmFuc2ZlciUyMGNvbnRhaW5lciI+PC9hPnRyYW5zZmVyIGNvbnRhaW5lcjwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+RnJlZSBkYXRhIGNvbnRhaW5lciBhZnRlciB0aGUgY29kZSBpcyBkb25lLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwZmxvYXRpbmciPjwvYT50cmFuc2ZlciBmbG9hdGluZzwvc3Bhbj48L2R0PgotPGRkIGNsYXNzPSJnbG9zc2RlZiI+PHA+QWxpYXMgZm9yIDxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT4sIHVzZWQgZm9yIG9iamVjdHMgd2l0aCBmbG9hdGluZyByZWZzLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwZnVsbCI+PC9hPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXRyYW5zZmVyJTIwbm9uZSI+PC9hPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9kdD4KLTxkZCBjbGFzcz0iZ2xvc3NkZWYiPjxwPkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLjwvcD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJnbG9zc3Rlcm0iPjxhIG5hbWU9ImFubm90YXRpb24tZ2xvc3N0ZXJtLXR5cGUiPjwvYT50eXBlPC9zcGFuPjwvZHQ+Ci08ZGQgY2xhc3M9Imdsb3NzZGVmIj48cD5PdmVycmlkZSB0aGUgcGFyc2VkIEMgdHlwZSB3aXRoIGdpdmVuIHR5cGUuPC9wPjwvZGQ+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nZHAtaGVhZGVyLnBuZyBiL2RvY3MvbGlicy9odG1sL2dkcC1oZWFkZXIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2QwOGY2Li4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dkcC1oZWFkZXIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWJhc2UuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1iYXNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OTViMGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWJhc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5HU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlczogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiIHRpdGxlPSJQYXJ0wqBJLsKgR1N0cmVhbWVyIExpYnJhcmllcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiIHRpdGxlPSJQYXJ0wqBJLsKgR1N0cmVhbWVyIExpYnJhcmllcyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iY2hhcHRlciI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1iYXNlIj48L2E+R1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiPkdzdEJhc2VQYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3Igc3RyZWFtIHBhcnNlcnM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCI+R3N0QmFzZVNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3IgZ2V0cmFuZ2UgYmFzZWQgc291cmNlIGVsZW1lbnRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCYXNlU2luay5odG1sIj5Hc3RCYXNlU2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3Igc2luayBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzaW1wbGUgdHJhbnNmb3JtIGZpbHRlcnM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCI+R3N0UHVzaFNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQmFzZSBjbGFzcyBmb3IgcHVzaCBiYXNlZCBzb3VyY2UgZWxlbWVudHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCI+R3N0QWRhcHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgYWRhcHRzIGluY29taW5nIGRhdGEgb24gYSBzaW5rIHBhZCBpbnRvIGNodW5rcyBvZiBOIGJ5dGVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCI+R3N0Qml0UmVhZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZWFkcyBhbnkgbnVtYmVyIG9mIGJpdHMgZnJvbSBhIG1lbW9yeSBidWZmZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCI+R3N0Qnl0ZVJlYWRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUmVhZHMgZGlmZmVyZW50IGludGVnZXIsIHN0cmluZyBhbmQgZmxvYXRpbmcgcG9pbnQKLSAgICB0eXBlcyBmcm9tIGEgbWVtb3J5IGJ1ZmZlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIj5Hc3RCeXRlV3JpdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBXcml0ZXMgZGlmZmVyZW50IGludGVnZXIsIHN0cmluZyBhbmQgZmxvYXRpbmcgcG9pbnQKLSAgICB0eXBlcyB0byBhIG1lbW9yeSBidWZmZXIgYW5kIGFsbG93cyByZWFkaW5nPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIj5Hc3RDb2xsZWN0UGFkczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgbWFuYWdlcyBhIHNldCBvZiBwYWRzIHRoYXQgb3BlcmF0ZSBpbiBjb2xsZWN0IG1vZGU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIj5Hc3RGbG93Q29tYmluZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFV0aWxpdHkgdG8gY29tYmluZSBtdWx0aXBsZSBmbG93IHJldHVybnMgaW50byBvbmU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiPkdzdFR5cGVGaW5kSGVscGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgdHlwZWZpbmRpbmc8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIj5Hc3REYXRhUXVldWU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFRocmVhZHNhZmUgcXVldWVpbmcgb2JqZWN0PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiPkdzdFF1ZXVlQXJyYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFycmF5IGJhc2VkIHF1ZXVlIG9iamVjdDwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGl2PgotPHA+Ci0gICAgICAgIGxpYmdzdGJhc2UtMS4wLnNvIHByb3ZpZGVzIHNvbWUgYmFzZSBjbGFzc2VzIHRvIGJlIGV4dGVuZGVkCi0gICAgICAgIGJ5IGVsZW1lbnRzIGFuZCB1dGlsbGl0eSBjbGFzc2VzIHRoYXQgYXJlIG1vc3QgdXNlZnVsIGZvciBwbHVnaW4gZGV2ZWxvcGVycy4KLSAgICAgIDwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1jaGVjay5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWNoZWNrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMjRhZTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWNoZWNrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R1N0cmVhbWVyIENoZWNrIFVuaXQgVGVzdGluZzogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiIHRpdGxlPSJQYXJ0wqBJLsKgR1N0cmVhbWVyIExpYnJhcmllcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iY2hhcHRlciI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1jaGVjayI+PC9hPkdTdHJlYW1lciBDaGVjayBVbml0IFRlc3Rpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCI+R3N0Q2hlY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIENvbW1vbiBjb2RlIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCI+R3N0QnVmZmVyU3RyYXc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJ1ZmZlciBpbnRlcmNlcHRpb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEYXRhIGZsb3cgY29uc2lzdGVuY3kgY2hlY2tlciBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHMuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiPkdzdEhhcm5lc3M8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEEgdGVzdC1oYXJuZXNzIGZvciB3cml0aW5nIEdTdHJlYW1lciB1bml0IHRlc3RzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCI+R3N0VGVzdENsb2NrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDb250cm9sbGFibGUsIGRldGVybWluaXN0aWMgY2xvY2sgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzPC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kaXY+Ci08cD4KLSAgICAgICAgbGliZ3N0Y2hlY2stMS4wLnNvIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yIHdyaXRpbmcKLSAgICAgICAgdW5pdCB0ZXN0cyB0aGF0IHVzZSB0aGUgY2hlY2sgZnJhbWV3b3JrLgotICAgICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1jb250cm9sLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MmRiODQuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5HU3RyZWFtZXIgRHluYW1pYyBQYXJhbWV0ZXIgQ29udHJvbDogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiIHRpdGxlPSJQYXJ0wqBJLsKgR1N0cmVhbWVyIExpYnJhcmllcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdEFSR0JDb250cm9sQmluZGluZyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iY2hhcHRlciI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1jb250cm9sIj48L2E+R1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2w8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwiPkdzdEFSR0JDb250cm9sQmluZGluZzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2VzIHRvIGFyZ2IgcHJvcGVydGllczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCI+R3N0RGlyZWN0Q29udHJvbEJpbmRpbmc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGRpcmVjdCBhdHRhY2htZW50IGZvciBjb250cm9sIHNvdXJjZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCB0aW1lZCB2YWx1ZSBjb250cm9sIHNvdXJjZSBiYXNlIGNsYXNzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RMRk9Db250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBMRk8gY29udHJvbCBzb3VyY2U8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwiPkdzdFRyaWdnZXJDb250cm9sU291cmNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCB0cmlnZ2VyIGNvbnRyb2wgc291cmNlPC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kaXY+Ci08cD4KLSAgICAgICAgbGliZ3N0Y29udHJvbGxlci0xLjAuc28gcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBhbmltYXRlCi0gICAgICAgIGVsZW1lbnQgcHJvcGVydGllcyBvdmVyIHRpbWUuCi0gICAgICA8L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhOTQ1OGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWhpZXJhcmNoeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPk9iamVjdCBIaWVyYXJjaHk6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9Iml4MDEuaHRtbCIgdGl0bGU9IkFQSSBJbmRleCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJpeDAxLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iY2hhcHRlciI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDEgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1oaWVyYXJjaHkiPjwvYT5PYmplY3QgSGllcmFyY2h5PC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+Ci0gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCIgdGl0bGU9IkdzdFB1c2hTcmMiPkdzdFB1c2hTcmM8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9jay1zdHJ1Y3QiPkdzdENsb2NrPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RTeXN0ZW1DbG9jay5odG1sI0dzdFN5c3RlbUNsb2NrLXN0cnVjdCI+R3N0U3lzdGVtQ2xvY2s8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE50cENsb2NrIj5Hc3ROdHBDbG9jazwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0Q29udHJvbEJpbmRpbmctc3RydWN0Ij5Hc3RDb250cm9sQmluZGluZzwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilJzilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdEFSR0JDb250cm9sQmluZGluZyI+R3N0QVJHQkNvbnRyb2xCaW5kaW5nPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3REaXJlY3RDb250cm9sQmluZGluZyI+R3N0RGlyZWN0Q29udHJvbEJpbmRpbmc8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFNvdXJjZS1zdHJ1Y3QiPkdzdENvbnRyb2xTb3VyY2U8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSCPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UiPkdzdFRyaWdnZXJDb250cm9sU291cmNlPC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilII8L3NwYW4+ICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPkdzdExGT0NvbnRyb2xTb3VyY2U8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUnOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKUgjwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLTEuMC5kZXZoZWxwMiBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLTEuMC5kZXZoZWxwMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQzNTUzOC4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy0xLjAuZGV2aGVscDIKKysrIC9kZXYvbnVsbApAQCAtMSw5NDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+Ci08Ym9vayB4bWxucz0iaHR0cDovL3d3dy5kZXZoZWxwLm5ldC9ib29rIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiIGxpbms9ImluZGV4Lmh0bWwiIGF1dGhvcj0iIiBuYW1lPSJnc3RyZWFtZXItbGlicy0xLjAiIHZlcnNpb249IjIiIGxhbmd1YWdlPSJjIiBvbmxpbmU9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci1saWJzL2h0bWwvIj4KLSAgPGNoYXB0ZXJzPgotICAgIDxzdWIgbmFtZT0iR1N0cmVhbWVyIExpYnJhcmllcyIgbGluaz0iZ3N0cmVhbWVyLWxpYnMuaHRtbCI+Ci0gICAgICA8c3ViIG5hbWU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIiBsaW5rPSJnc3RyZWFtZXItYmFzZS5odG1sIj4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RCYXNlUGFyc2UiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0QmFzZVNyYyIgbGluaz0iR3N0QmFzZVNyYy5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0QmFzZVNpbmsiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RQdXNoU3JjIiBsaW5rPSJHc3RQdXNoU3JjLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RBZGFwdGVyIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RCaXRSZWFkZXIiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0Qnl0ZVJlYWRlciIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0Qnl0ZVdyaXRlciIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0Q29sbGVjdFBhZHMiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RGbG93Q29tYmluZXIiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0VHlwZUZpbmRIZWxwZXIiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3REYXRhUXVldWUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0UXVldWVBcnJheSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIi8+Ci0gICAgICA8L3N1Yj4KLSAgICAgIDxzdWIgbmFtZT0iR1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2wiIGxpbms9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiPgotICAgICAgICA8c3ViIG5hbWU9IkdzdEFSR0JDb250cm9sQmluZGluZyIgbGluaz0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3REaXJlY3RDb250cm9sQmluZGluZyIgbGluaz0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCIvPgotICAgICAgICA8c3ViIG5hbWU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIiBsaW5rPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RMRk9Db250cm9sU291cmNlIiBsaW5rPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSIgbGluaz0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCIvPgotICAgICAgPC9zdWI+Ci0gICAgICA8c3ViIG5hbWU9IkdTdHJlYW1lciBOZXR3b3JrIENsYXNzZXMiIGxpbms9ImdzdHJlYW1lci1uZXQuaHRtbCI+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0TmV0QWRkcmVzc01ldGEiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3ROZXRDbGllbnRDbG9jayIgbGluaz0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIvPgotICAgICAgICA8c3ViIG5hbWU9IkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3ROZXRUaW1lUGFja2V0IiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3ROZXRUaW1lUHJvdmlkZXIiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0UHRwQ2xvY2siIGxpbms9IkdzdFB0cENsb2NrLmh0bWwiLz4KLSAgICAgIDwvc3ViPgotICAgICAgPHN1YiBuYW1lPSJHU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nIiBsaW5rPSJnc3RyZWFtZXItY2hlY2suaHRtbCI+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0Q2hlY2siIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiLz4KLSAgICAgICAgPHN1YiBuYW1lPSJHc3RCdWZmZXJTdHJhdyIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCIvPgotICAgICAgICA8c3ViIG5hbWU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5IiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0SGFybmVzcyIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIi8+Ci0gICAgICAgIDxzdWIgbmFtZT0iR3N0VGVzdENsb2NrIiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCIvPgotICAgICAgPC9zdWI+Ci0gICAgPC9zdWI+Ci0gICAgPHN1YiBuYW1lPSJPYmplY3QgSGllcmFyY2h5IiBsaW5rPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiLz4KLSAgICA8c3ViIG5hbWU9IkFQSSBJbmRleCIgbGluaz0iaXgwMS5odG1sIi8+Ci0gICAgPHN1YiBuYW1lPSJJbmRleCBvZiBkZXByZWNhdGVkIEFQSSIgbGluaz0iaXgwMi5odG1sIi8+Ci0gICAgPHN1YiBuYW1lPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuMTAiIGxpbms9Iml4MDMuaHRtbCIvPgotICAgIDxzdWIgbmFtZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjgiIGxpbms9Iml4MDQuaHRtbCIvPgotICAgIDxzdWIgbmFtZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjYiIGxpbms9Iml4MDUuaHRtbCIvPgotICAgIDxzdWIgbmFtZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjQiIGxpbms9Iml4MDYuaHRtbCIvPgotICAgIDxzdWIgbmFtZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjIiIGxpbms9Iml4MDcuaHRtbCIvPgotICAgIDxzdWIgbmFtZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjAuMSIgbGluaz0iaXgwOC5odG1sIi8+Ci0gICAgPHN1YiBuYW1lPSJBbm5vdGF0aW9uIEdsb3NzYXJ5IiBsaW5rPSJhbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwiLz4KLSAgPC9jaGFwdGVycz4KLSAgPGZ1bmN0aW9ucz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFnc8KgKCkiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLW1lcmdlLXRhZ3MiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uwqAoKSIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX3NldF9hdmVyYWdlX2JpdHJhdGXCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtYXZlcmFnZS1iaXRyYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZcKgKCkiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1taW4tZnJhbWUtc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2jCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtcGFzc3Rocm91Z2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlwqAoKSIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LXN5bmNhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX3NldF9oYXNfdGltaW5nX2luZm/CoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtaGFzLXRpbWluZy1pbmZvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlwqAoKSIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LWZyYW1lLXJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2xhdGVuY3nCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9zZXRfaW5mZXJfdHPCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtaW5mZXItdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X3B0c19pbnRlcnBvbGF0aW9uwqAoKSIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2Utc2V0LXB0cy1pbnRlcnBvbGF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX3NldF90c19hdF9vZmZzZXTCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1zZXQtdHMtYXQtb2Zmc2V0IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdMKgKCkiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWNvbnZlcnQtZGVmYXVsdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9wYXJzZV9hZGRfaW5kZXhfZW50cnnCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1hZGQtaW5kZXgtZW50cnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfbmV3wqAoKSIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjZ3N0LWJhc2UtcGFyc2UtZnJhbWUtbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXTCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1pbml0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWXCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1mcmFtZS1mcmVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWXCoCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNnc3QtYmFzZS1wYXJzZS1wdXNoLWZyYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZcKgKCkiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZpbmlzaC1mcmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9EUkFJTklORygpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1EUkFJTklORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQygpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1MT1NULVNZTkM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCgpIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1TSU5LLVBBRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1BBUlNFX1NSQ19QQUQoKSIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtU1JDLVBBRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QmFzZVBhcnNlQ2xhc3MiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUNsYXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RCYXNlUGFyc2VGcmFtZSIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lRmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfUEFSU0VfRkxBR19EUkFJTklORyIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRkxBRy1EUkFJTklORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GTEFHLUxPU1QtU1lOQzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRCIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRkxPVy1EUk9QUEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRpc2FibGUtcGFzc3Rocm91Z2jigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZS0tZGlzYWJsZS1wYXNzdGhyb3VnaCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nwqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy13YWl0LXBsYXlpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX3N0YXJ0X3dhaXTCoCgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXN0YXJ0LXdhaXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBsZXRlwqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zdGFydC1jb21wbGV0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zcmNfaXNfbGl2ZcKgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtaXMtbGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zcmNfc2V0X2xpdmXCoCgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1saXZlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19zZXRfZm9ybWF0wqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZm9ybWF0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5wqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1xdWVyeS1sYXRlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplwqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtYmxvY2tzaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplwqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtYmxvY2tzaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wwqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtZG8tdGltZXN0YW1wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wwqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZG8tdGltZXN0YW1wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplwqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZHluYW1pYy1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19zZXRfYXV0b21hdGljX2Vvc8KgKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWF1dG9tYXRpYy1lb3MiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50wqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1uZXctc2VhbWxlc3Mtc2VnbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zcmNfc2V0X2NhcHPCoCgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19nZXRfYWxsb2NhdG9ywqAoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtYWxsb2NhdG9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19nZXRfYnVmZmVyX3Bvb2zCoCgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLWdldC1idWZmZXItcG9vbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zcmNfaXNfYXN5bmPCoCgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLWlzLWFzeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NyY19zZXRfYXN5bmPCoCgpIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1hc3luYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9TUkNfUEFEKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHU1QtQkFTRS1TUkMtUEFEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU1JDX0lTX1NUQVJURUQoKSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1JUy1TVEFSVEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU1JDX0lTX1NUQVJUSU5HKCkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHU1QtQkFTRS1TUkMtSVMtU1RBUlRJTkc6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJhc2VTcmMiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJhc2VTcmNDbGFzcyIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0QmFzZVNyY0ZsYWdzIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0ZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxibG9ja3NpemXigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS1ibG9ja3NpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRvLXRpbWVzdGFtcOKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtLWRvLXRpbWVzdGFtcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbnVtLWJ1ZmZlcnPigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS1udW0tYnVmZmVycyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHlwZWZpbmTigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS10eXBlZmluZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3nCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstcXVlcnktbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5wqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1sYXRlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfZG9fcHJlcm9sbMKgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1kby1wcmVyb2xsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfd2FpdMKgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xswqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXdhaXQtcHJlcm9sbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2vCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstd2FpdC1jbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3NldF9zeW5jwqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1zeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfZ2V0X3N5bmPCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXN5bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzwqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1tYXgtbGF0ZW5lc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzwqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1tYXgtbGF0ZW5lc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWTCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXFvcy1lbmFibGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWTCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstaXMtcW9zLWVuYWJsZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZMKgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtYXN5bmMtZW5hYmxlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2lzX2FzeW5jX2VuYWJsZWTCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstaXMtYXN5bmMtZW5hYmxlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3NldF90c19vZmZzZXTCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXRzLW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXTCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXRzLW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3NldF9yZW5kZXJfZGVsYXnCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXJlbmRlci1kZWxheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2dldF9yZW5kZXJfZGVsYXnCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXJlbmRlci1kZWxheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2dldF9sYXN0X3NhbXBsZcKgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbGFzdC1zYW1wbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplwqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1ibG9ja3NpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplwqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1ibG9ja3NpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19nZXRfdGhyb3R0bGVfdGltZcKgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtdGhyb3R0bGUtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lwqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC10aHJvdHRsZS10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3Npbmtfc2V0X21heF9iaXRyYXRlwqAoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1tYXgtYml0cmF0ZSIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2dldF9tYXhfYml0cmF0ZcKgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbWF4LWJpdHJhdGUiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZMKgKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtbGFzdC1zYW1wbGUtZW5hYmxlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV9zaW5rX2lzX2xhc3Rfc2FtcGxlX2VuYWJsZWTCoCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstaXMtbGFzdC1zYW1wbGUtZW5hYmxlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9TSU5LX1BBRCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUEFEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1DT05EOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLKCkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1MT0NLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX0JST0FEQ0FTVCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1CUk9BRENBU1Q6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSygpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1MT0NLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1TSUdOQUw6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfVFJZTE9DSygpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1UUllMT0NLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSygpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1VTkxPQ0s6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfV0FJVCgpIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1XQUlUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVRfVU5USUwoKSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVC1VTlRJTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QmFzZVNpbmsiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QmFzZVNpbmtDbGFzcyIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhc3luY+KAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tYXN5bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJsb2Nrc2l6ZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tYmxvY2tzaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxlbmFibGUtbGFzdC1zYW1wbGXigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWVuYWJsZS1sYXN0LXNhbXBsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGFzdC1zYW1wbGXigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWxhc3Qtc2FtcGxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtYml0cmF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tbWF4LWJpdHJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1sYXRlbmVzc+KAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tbWF4LWxhdGVuZXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxxb3PigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLXFvcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVuZGVyLWRlbGF54oCdIHByb3BlcnR5IiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1yZW5kZXItZGVsYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN5bmPigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLXN5bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRocm90dGxlLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLXRocm90dGxlLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRzLW9mZnNldOKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tdHMtb2Zmc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaMKgKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0taXMtcGFzc3Rocm91Z2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaMKgKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXBhc3N0aHJvdWdoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJlZmVyX3Bhc3N0aHJvdWdowqAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcHJlZmVyLXBhc3N0aHJvdWdoIiBzaW5jZT0iMS4wLjEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlwqAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1pcy1pbi1wbGFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlwqAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtaW4tcGxhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkwqAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1pcy1xb3MtZW5hYmxlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkwqAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcW9zLWVuYWJsZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3PCoCgpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXVwZGF0ZS1xb3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmXCoCgpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1nYXAtYXdhcmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9hbGxvY2F0b3LCoCgpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWdldC1hbGxvY2F0b3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9idWZmZXJfcG9vbMKgKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tZ2V0LWJ1ZmZlci1wb29sIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rwqAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1yZWNvbmZpZ3VyZS1zaW5rIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zcmPCoCgpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXJlY29uZmlndXJlLXNyYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3NyY19jYXBzwqAoKSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS11cGRhdGUtc3JjLWNhcHMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEKCkiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tU0lOSy1QQUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRCgpIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1QQUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJhc2VUcmFuc2Zvcm0iIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNJTkstTkFNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1RSQU5TRk9STV9TUkNfTkFNRSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TUkMtTkFNRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tRkxPVy1EUk9QUEVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHFvc+KAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tLXFvcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFB1c2hTcmMiIGxpbms9IkdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFB1c2hTcmNDbGFzcyIgbGluaz0iR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmNDbGFzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9uZXfCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX2NsZWFywqAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNsZWFyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX3B1c2jCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHVzaCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9tYXDCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX3VubWFwwqAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXVubWFwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX2NvcHnCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItY29weSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9jb3B5X2J5dGVzwqAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNvcHktYnl0ZXMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfZmx1c2jCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZmx1c2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlwqAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWF2YWlsYWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdMKgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl90YWtlwqAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXLCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcsKgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1nZXQtYnVmZmVyIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3TCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXItZmFzdCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2Zhc3TCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlci1mYXN0IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX3Rha2VfbGlzdMKgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfZ2V0X2xpc3TCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZ2V0LWxpc3QiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfbGlzdMKgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWJ1ZmZlci1saXN0IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX2dldF9idWZmZXJfbGlzdMKgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1nZXQtYnVmZmVyLWxpc3QiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfcHJldl9wdHPCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHJldi1wdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfcHJldl9kdHPCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHJldi1kdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0wqAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtcHRzLWF0LW9mZnNldCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9wcmV2X2R0c19hdF9vZmZzZXTCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHJldi1kdHMtYXQtb2Zmc2V0IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0wqAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtb2Zmc2V0IiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udMKgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdHMtYXQtZGlzY29udCIgc2luY2U9IjEuMTAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfZHRzX2F0X2Rpc2NvbnTCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZHRzLWF0LWRpc2NvbnQiIHNpbmNlPSIxLjEwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250wqAoKSIgbGluaz0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW9mZnNldC1hdC1kaXNjb250IiBzaW5jZT0iMS4xMCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnTCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZGlzdGFuY2UtZnJvbS1kaXNjb250Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMsKgKCkiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWvCoCgpIiBsaW5rPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFza2VkLXNjYW4tdWludDMyLXBlZWsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEFkYXB0ZXIiIGxpbms9IkdzdEFkYXB0ZXIuaHRtbCNHc3RBZGFwdGVyLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQklUX1JFQURFUl9JTklUKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dTVC1CSVQtUkVBREVSLUlOSVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9uZXfCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZnJlZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWZyZWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfaW5pdMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWluaXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X3Bvc8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1wb3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1yZW1haW5pbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfc2V0X3Bvc8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXNldC1wb3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9za2lwwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMsKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQzMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDjCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ2NCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDjCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcC10by1ieXRlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTZfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2LXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDY0LXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OC11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNl91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2LXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MzItdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ2NC11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50OC11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEJpdFJlYWRlciIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9CWVRFX1JFQURFUl9JTklUKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHU1QtQllURS1SRUFERVItSU5JVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9uZXfCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZnJlZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfaW5pdMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItaW5pdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19zdWJfcmVhZGVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXN1Yi1yZWFkZXIiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtc3ViLXJlYWRlciIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3Bvc8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXBvcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZ8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXJlbWFpbmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfc2V0X3Bvc8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2V0LXBvcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9za2lwwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1sZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1iZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLWRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzLCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW1hc2tlZC1zY2FuLXVpbnQzMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWvCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW1hc2tlZC1zY2FuLXVpbnQzMi1wZWVrIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXN0cmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtc3RyaW5nLXV0ZjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjjCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstc3RyaW5nLXV0ZjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjjCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNsKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGYxNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMsKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGYzMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTbCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjE2Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMsKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMzIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50OC11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OC11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDhfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDgtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWJlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1kYXRhLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZGF0YS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZGF0YS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEJ5dGVSZWFkZXIiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9uZXfCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfaW5pdMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX2RhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdC13aXRoLXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX2ZyZWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZyZWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXLCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZyZWUtYW5kLWdldC1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9kYXRhwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LWFuZC1nZXQtZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXLCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LWFuZC1nZXQtYnVmZmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtcG9zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1zZXQtcG9zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtcmVtYWluaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZ2V0LXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1lbnN1cmUtZnJlZS1zcGFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDjCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1iZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1sZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1iZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItYmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1sZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWJlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjE2wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjE2Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjMywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjMyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjjCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmctdXRmOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9maWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1maWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfYnVmZmVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtYnVmZmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfYnVmZmVyX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWJ1ZmZlci11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDgtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDgtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtYmUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItbGUtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWJlLXVuY2hlY2tlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfdW5jaGVja2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWRhdGEtdW5jaGVja2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZmlsbC11bmNoZWNrZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEJ5dGVXcml0ZXIiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmecKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdENvbGxlY3RQYWRzQnVmZmVyRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzQnVmZmVyRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzRXZlbnRGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzRmx1c2hGdW5jdGlvbiIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DT0xMRUNUX1BBRFNfU1RBVEUoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHU1QtQ09MTEVDVC1QQURTLVNUQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURV9JU19TRVQoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHU1QtQ09MTEVDVC1QQURTLVNUQVRFLUlTLVNFVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfU0VUKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVEFURS1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1VOU0VUKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVEFURS1VTlNFVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DT0xMRUNUX1BBRFNfR0VUX1NUUkVBTV9MT0NLKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1HRVQtU1RSRUFNLUxPQ0s6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVFJFQU0tTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSygpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtU1RSRUFNLVVOTE9DSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9DT0xMRUNUX1BBRFNfRFRTKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1EVFM6Q0FQUyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfQ09MTEVDVF9QQURTX0RUU19JU19WQUxJRCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtRFRTLUlTLVZBTElEOkNBUFMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19uZXfCoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZMKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hZGQtcGFkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZMKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1yZW1vdmUtcGFkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfc3RhcnTCoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19zdG9wwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXN0b3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGXCoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYXZhaWxhYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfZmx1c2jCoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtZmx1c2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19wZWVrwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXBlZWsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19wb3DCoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXLCoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcmVhZC1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc190YWtlX2J1ZmZlcsKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy10YWtlLWJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWNsaXAtcnVubmluZy10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfcXVlcnlfZGVmYXVsdMKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1xdWVyeS1kZWZhdWx0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdMKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1ldmVudC1kZWZhdWx0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfc3JjX2V2ZW50X2RlZmF1bHTCoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc3JjLWV2ZW50LWRlZmF1bHQiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfYnVmZmVyX2Z1bmN0aW9uwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1idWZmZXItZnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbsKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtY2xpcC1mdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX3NldF9jb21wYXJlX2Z1bmN0aW9uwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1jb21wYXJlLWZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2V2ZW50X2Z1bmN0aW9uwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1ldmVudC1mdW5jdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaF9mdW5jdGlvbsKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZmx1c2gtZnVuY3Rpb24iIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfcXVlcnlfZnVuY3Rpb27CoCgpIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LXF1ZXJ5LWZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nwqAoKSIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1mbHVzaGluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbsKgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZ8KgKCkiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtd2FpdGluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENvbGxlY3RQYWRzIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENvbGxlY3REYXRhIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RDb2xsZWN0UGFkc1N0YXRlRmxhZ3MiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mbG93X2NvbWJpbmVyX25ld8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLW5ldyIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZmxvd19jb21iaW5lcl9mcmVlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItZnJlZSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfZmxvd8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1mbG93IiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNnc3QtZmxvdy1jb21iaW5lci1hZGQtcGFkIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mbG93X2NvbWJpbmVyX3JlbW92ZV9wYWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNnc3QtZmxvdy1jb21iaW5lci1yZW1vdmUtcGFkIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9mbG93X2NvbWJpbmVyX2NsZWFywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItY2xlYXIiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2Zsb3dfY29tYmluZXJfcmVzZXTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNnc3QtZmxvdy1jb21iaW5lci1yZXNldCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfcGFkX2Zsb3fCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNnc3QtZmxvdy1jb21iaW5lci11cGRhdGUtcGFkLWZsb3ciIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEZsb3dDb21iaW5lciIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfaGVscGVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItYnVmZmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb27CoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1leHRlbnNpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbsKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZ2V0LXJhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFja8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRhX3F1ZXVlX25ld8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLW5ldyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0YV9xdWV1ZV9wdXNowqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtcHVzaCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtcHVzaC1mb3JjZSIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0YV9xdWV1ZV9wb3DCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wb3AiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfcGVla8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXBlZWsiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfZmx1c2jCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1mbHVzaCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmfCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1zZXQtZmx1c2hpbmciIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtZHJvcC1oZWFkIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1pcy1mdWxsIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtaXMtZW1wdHkiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtZ2V0LWxldmVsIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtbGltaXRzLWNoYW5nZWQiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REYXRhUXVldWUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdERhdGFRdWV1ZVNpemUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZVNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REYXRhUXVldWVJdGVtIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWV1ZV9hcnJheV9uZXfCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LW5ldyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVldWVfYXJyYXlfZnJlZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZnJlZSIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZ2V0LWxlbmd0aCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXBvcC1oZWFkIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXBlZWstaGVhZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVldWVfYXJyYXlfcHVzaF90YWlswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1wdXNoLXRhaWwiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1pcy1lbXB0eSIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1kcm9wLWVsZW1lbnQiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXVlX2FycmF5X2ZpbmTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWZpbmQiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXVlX2FycmF5X25ld19mb3Jfc3RydWN0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1uZXctZm9yLXN0cnVjdCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsX3N0cnVjdMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktcHVzaC10YWlsLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVldWVfYXJyYXlfcGVla19oZWFkX3N0cnVjdMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktcGVlay1oZWFkLXN0cnVjdCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWRfc3RydWN0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1wb3AtaGVhZC1zdHJ1Y3QiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3F1ZXVlX2FycmF5X2Ryb3Bfc3RydWN0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1kcm9wLXN0cnVjdCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0UXVldWVBcnJheSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX25ld8KgKCkiIGxpbms9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sI2dzdC1hcmdiLWNvbnRyb2wtYmluZGluZy1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbnRyb2wtc291cmNlLWHigJ0gcHJvcGVydHkiIGxpbms9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sI0dzdEFSR0JDb250cm9sQmluZGluZy0tY29udHJvbC1zb3VyY2UtYSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29udHJvbC1zb3VyY2UtYuKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwjR3N0QVJHQkNvbnRyb2xCaW5kaW5nLS1jb250cm9sLXNvdXJjZS1iIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjb250cm9sLXNvdXJjZS1n4oCdIHByb3BlcnR5IiBsaW5rPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCNHc3RBUkdCQ29udHJvbEJpbmRpbmctLWNvbnRyb2wtc291cmNlLWciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbnRyb2wtc291cmNlLXLigJ0gcHJvcGVydHkiIGxpbms9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sI0dzdEFSR0JDb250cm9sQmluZGluZy0tY29udHJvbC1zb3VyY2UtciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXfCoCgpIiBsaW5rPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5odG1sI2dzdC1kaXJlY3QtY29udHJvbC1iaW5kaW5nLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXdfYWJzb2x1dGXCoCgpIiBsaW5rPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5odG1sI2dzdC1kaXJlY3QtY29udHJvbC1iaW5kaW5nLW5ldy1hYnNvbHV0ZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYWJzb2x1dGXigJ0gcHJvcGVydHkiIGxpbms9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0RGlyZWN0Q29udHJvbEJpbmRpbmctLWFic29sdXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjb250cm9sLXNvdXJjZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCNHc3REaXJlY3RDb250cm9sQmluZGluZy0tY29udHJvbC1zb3VyY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVywqAoKSIgbGluaz0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2UtZmluZC1jb250cm9sLXBvaW50LWl0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldMKgKCkiIGxpbms9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdMKgKCkiIGxpbms9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXNldC1mcm9tLWxpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9hbGzCoCgpIiBsaW5rPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1nZXQtYWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldMKgKCkiIGxpbms9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXVuc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldF9hbGzCoCgpIiBsaW5rPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS11bnNldC1hbGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9jb3VudMKgKCkiIGxpbms9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLWdldC1jb3VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9pbnZhbGlkYXRlX2NhY2hlwqAoKSIgbGluaz0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1pbnZhbGlkYXRlLWNhY2hlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiIGxpbms9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Q29udHJvbFBvaW50IiBsaW5rPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xQb2ludCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHZhbHVlLWFkZGVk4oCdIHNpZ25hbCIgbGluaz0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS12YWx1ZS1hZGRlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHZhbHVlLWNoYW5nZWTigJ0gc2lnbmFsIiBsaW5rPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLXZhbHVlLWNoYW5nZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJx2YWx1ZS1yZW1vdmVk4oCdIHNpZ25hbCIgbGluaz0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS12YWx1ZS1yZW1vdmVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ld8KgKCkiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjZ3N0LWludGVycG9sYXRpb24tY29udHJvbC1zb3VyY2UtbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RJbnRlcnBvbGF0aW9uTW9kZSIgbGluaz0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uTW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ld8KgKCkiIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNnc3QtbGZvLWNvbnRyb2wtc291cmNlLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdExGT0NvbnRyb2xTb3VyY2UiIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0TEZPV2F2ZWZvcm0iIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9XYXZlZm9ybSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYW1wbGl0dWRl4oCdIHByb3BlcnR5IiBsaW5rPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tYW1wbGl0dWRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmcmVxdWVuY3nigJ0gcHJvcGVydHkiIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS1mcmVxdWVuY3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG9mZnNldOKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2UtLW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGltZXNoaWZ04oCdIHByb3BlcnR5IiBsaW5rPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tdGltZXNoaWZ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx3YXZlZm9ybeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2UtLXdhdmVmb3JtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90cmlnZ2VyX2NvbnRyb2xfc291cmNlX25ld8KgKCkiIGxpbms9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwjZ3N0LXRyaWdnZXItY29udHJvbC1zb3VyY2UtbmV3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UiIGxpbms9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9UWVBFX1RSSUdHRVJfV0FWRUZPUk0iIGxpbms9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwjR1NULVRZUEUtVFJJR0dFUi1XQVZFRk9STTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0b2xlcmFuY2XigJ0gcHJvcGVydHkiIGxpbms9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UtLXRvbGVyYW5jZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX2FkZF9uZXRfYWRkcmVzc19tZXRhwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuaHRtbCNnc3QtYnVmZmVyLWFkZC1uZXQtYWRkcmVzcy1tZXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9idWZmZXJfZ2V0X25ldF9hZGRyZXNzX21ldGHCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI2dzdC1idWZmZXItZ2V0LW5ldC1hZGRyZXNzLW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X25ldF9hZGRyZXNzX21ldGFfZ2V0X2luZm/CoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI2dzdC1uZXQtYWRkcmVzcy1tZXRhLWdldC1pbmZvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TmV0QWRkcmVzc01ldGEiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwjR3N0TmV0QWRkcmVzc01ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3wqAoKSIgbGluaz0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNnc3QtbmV0LWNsaWVudC1jbG9jay1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X250cF9jbG9ja19uZXfCoCgpIiBsaW5rPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI2dzdC1udHAtY2xvY2stbmV3IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TmV0Q2xpZW50Q2xvY2siIGxpbms9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0idHlwZWRlZiIgbmFtZT0iR3N0TnRwQ2xvY2siIGxpbms9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TnRwQ2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFkZHJlc3PigJ0gcHJvcGVydHkiIGxpbms9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLWFkZHJlc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhc2UtdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tYmFzZS10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidXPigJ0gcHJvcGVydHkiIGxpbms9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLWJ1cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaW50ZXJuYWwtY2xvY2vigJ0gcHJvcGVydHkiIGxpbms9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLWludGVybmFsLWNsb2NrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtaW5pbXVtLXVwZGF0ZS1pbnRlcnZhbOKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tbWluaW11bS11cGRhdGUtaW50ZXJ2YWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiIGxpbms9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLXBvcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJvdW5kLXRyaXAtbGltaXTigJ0gcHJvcGVydHkiIGxpbms9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLXJvdW5kLXRyaXAtbGltaXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9hZGRfbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwjZ3N0LWJ1ZmZlci1hZGQtbmV0LWNvbnRyb2wtbWVzc2FnZS1tZXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9idWZmZXJfZ2V0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YSgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCNnc3QtYnVmZmVyLWdldC1uZXQtY29udHJvbC1tZXNzYWdlLW1ldGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9nZXRfaW5mb8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sI2dzdC1uZXQtY29udHJvbC1tZXNzYWdlLW1ldGEtZ2V0LWluZm8iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sI0dzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbmV0X3RpbWVfcGFja2V0X25ld8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3QtbmV0LXRpbWUtcGFja2V0LW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbmV0X3RpbWVfcGFja2V0X2NvcHnCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1jb3B5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3QtbmV0LXRpbWUtcGFja2V0LWZyZWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtcmVjZWl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1zZW5kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtc2VyaWFsaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR1NULU5FVC1USU1FLVBBQ0tFVC1TSVpFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ld8KgKCkiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI2dzdC1uZXQtdGltZS1wcm92aWRlci1uZXciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3ROZXRUaW1lUHJvdmlkZXIiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFjdGl2ZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1hY3RpdmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFkZHJlc3PigJ0gcHJvcGVydHkiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tYWRkcmVzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2xvY2vigJ0gcHJvcGVydHkiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiIGxpbms9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tcG9ydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHRwX2luaXTCoCgpIiBsaW5rPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtaW5pdCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHRwX2RlaW5pdMKgKCkiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1kZWluaXQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3B0cF9pc19pbml0aWFsaXplZMKgKCkiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1pcy1pbml0aWFsaXplZCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfcHRwX2lzX3N1cHBvcnRlZMKgKCkiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1pcy1zdXBwb3J0ZWQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3B0cF9jbG9ja19uZXfCoCgpIiBsaW5rPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtY2xvY2stbmV3IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9IkdzdFB0cFN0YXRpc3RpY3NDYWxsYmFja8KgKCkiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGTCoCgpIiBsaW5rPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtc3RhdGlzdGljcy1jYWxsYmFjay1hZGQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX3JlbW92ZcKgKCkiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1zdGF0aXN0aWNzLWNhbGxiYWNrLXJlbW92ZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUFRQX0NMT0NLX0lEX05PTkUiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjR1NULVBUUC1DTE9DSy1JRC1OT05FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQdHBDbG9jayIgbGluaz0iR3N0UHRwQ2xvY2suaHRtbCNHc3RQdHBDbG9jay1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BUUF9TVEFUSVNUSUNTX0JFU1RfTUFTVEVSX0NMT0NLX1NFTEVDVEVEIiBsaW5rPSJHc3RQdHBDbG9jay5odG1sI0dTVC1QVFAtU1RBVElTVElDUy1CRVNULU1BU1RFUi1DTE9DSy1TRUxFQ1RFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkdTVF9QVFBfU1RBVElTVElDU19ORVdfRE9NQUlOX0ZPVU5EIiBsaW5rPSJHc3RQdHBDbG9jay5odG1sI0dTVC1QVFAtU1RBVElTVElDUy1ORVctRE9NQUlOLUZPVU5EOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iR1NUX1BUUF9TVEFUSVNUSUNTX1BBVEhfREVMQVlfTUVBU1VSRUQiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjR1NULVBUUC1TVEFUSVNUSUNTLVBBVEgtREVMQVktTUVBU1VSRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfUFRQX1NUQVRJU1RJQ1NfVElNRV9VUERBVEVEIiBsaW5rPSJHc3RQdHBDbG9jay5odG1sI0dTVC1QVFAtU1RBVElTVElDUy1USU1FLVVQREFURUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZG9tYWlu4oCdIHByb3BlcnR5IiBsaW5rPSJHc3RQdHBDbG9jay5odG1sI0dzdFB0cENsb2NrLS1kb21haW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGdyYW5kbWFzdGVyLWNsb2NrLWlk4oCdIHByb3BlcnR5IiBsaW5rPSJHc3RQdHBDbG9jay5odG1sI0dzdFB0cENsb2NrLS1ncmFuZG1hc3Rlci1jbG9jay1pZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaW50ZXJuYWwtY2xvY2vigJ0gcHJvcGVydHkiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjR3N0UHRwQ2xvY2stLWludGVybmFsLWNsb2NrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXN0ZXItY2xvY2staWTigJ0gcHJvcGVydHkiIGxpbms9IkdzdFB0cENsb2NrLmh0bWwjR3N0UHRwQ2xvY2stLW1hc3Rlci1jbG9jay1pZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfU1RBUlRfVEVTVCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0dTVC1TVEFSVC1URVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1CVUZGRVItUkVGQ09VTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJBU1NFUlRfQ0FQU19SRUZDT1VOVCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1DQVBTLVJFRkNPVU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iQVNTRVJUX0NSSVRJQ0FMKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULUNSSVRJQ0FMOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iQVNTRVJUX1dBUk5JTkcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtV0FSTklORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1NSU5JLU9CSkVDVC1SRUZDT1VOVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9IkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtT0JKRUNULVJFRkNPVU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULU9CSkVDVC1SRUZDT1VOVC1CRVRXRUVOOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iQVNTRVJUX1NFVF9TVEFURSgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1TRVQtU1RBVEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJmYWlsX3VubGVzc19lcXVhbHNfaW50KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtZmxvYXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZygpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1zdHJpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy11aW50NjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludDY0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludC1oZXgiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0X2hleCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1pbnQ2NC1oZXgiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NF9oZXgoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtdWludDY0LWhleCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlcigpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1wb2ludGVyIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3IoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1tZXNzYWdlLWVycm9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImFzc2VydF9lcXVhbHNfaW50KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iYXNzZXJ0X2VxdWFsc19mbG9hdCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtZmxvYXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iYXNzZXJ0X2VxdWFsc19zdHJpbmcoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLXN0cmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJhc3NlcnRfZXF1YWxzX3VpbnQ2NCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtdWludDY0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImFzc2VydF9lcXVhbHNfaW50NjQoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludDY0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImFzc2VydF9lcXVhbHNfaW50X2hleCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtaW50LWhleCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJhc3NlcnRfZXF1YWxzX2ludDY0X2hleCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtaW50NjQtaGV4IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImFzc2VydF9lcXVhbHNfdWludDY0X2hleCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtdWludDY0LWhleCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJhc3NlcnRfZXF1YWxzX3BvaW50ZXIoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLXBvaW50ZXIiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iYXNzZXJ0X21lc3NhZ2VfZXJyb3IoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtbWVzc2FnZS1lcnJvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfaW5pdMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWluaXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3LCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1tZXNzYWdlLWVycm9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19zZXR1cF9lbGVtZW50wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtZWxlbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zaW5rLXBhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1ieS1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWJ5LW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tcGFkLWJ5LW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay10ZWFyZG93bi1lbGVtZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLXNpbmstcGFkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tc3JjLXBhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfZHJvcF9idWZmZXJzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZHJvcC1idWZmZXJzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19idWZmZXJfZGF0YcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWJ1ZmZlci1kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19jYXBzX2VxdWFswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stY2Fwcy1lcXVhbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlci1saXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfcnVuX3N1aXRlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stcnVuLXN1aXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19zZXR1cF9ldmVudHPCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1ldmVudHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NoZWNrX3NldHVwX2V2ZW50c193aXRoX3N0cmVhbV9pZMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWV2ZW50cy13aXRoLXN0cmVhbS1pZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtYnktbmFtZS1mcm9tLXRlbXBsYXRlIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9mcm9tX3RlbXBsYXRlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtZnJvbS10ZW1wbGF0ZSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWJ5LW5hbWUtZnJvbS10ZW1wbGF0ZSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9mcm9tX3RlbXBsYXRlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1mcm9tLXRlbXBsYXRlIiBzaW5jZT0iMS40Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19vYmplY3RzX2Rlc3Ryb3llZF9vbl91bnJlZsKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLW9iamVjdHMtZGVzdHJveWVkLW9uLXVucmVmIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9jaGVja19vYmplY3RfZGVzdHJveWVkX29uX3VucmVmwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stb2JqZWN0LWRlc3Ryb3llZC1vbi11bnJlZiIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJHU1RfRU5EX1RFU1QiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjR1NULUVORC1URVNUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1zdGFydC1waXBlbGluZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXLCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RvcC1waXBlbGluZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXfCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdC1jb25zaXN0ZW5jeS1jaGVja2VyLW5ldyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9yZXNldMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItcmVzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItZnJlZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9hZGRfcGFkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1hZGQtcGFkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19uZXdfZW1wdHnCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LWVtcHR5IiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX25ld19mdWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldy1mdWxsIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LXdpdGgtZWxlbWVudCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19uZXdfd2l0aF9wYWRuYW1lc8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctd2l0aC1wYWRuYW1lcyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19uZXdfd2l0aF90ZW1wbGF0ZXPCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LXdpdGgtdGVtcGxhdGVzIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX25ld8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXciIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfbmV3X3BhcnNlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldy1wYXJzZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1lbGVtZW50LWZ1bGwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfYWRkX3BhcnNlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1wYXJzZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc190ZWFyZG93bsKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy10ZWFyZG93biIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19hZGRfZWxlbWVudF9zcmNfcGFkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1lbGVtZW50LXNyYy1wYWQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfc2lua19wYWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLWVsZW1lbnQtc2luay1wYWQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1zcmMtY2FwcyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zZXRfc2lua19jYXBzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1zaW5rLWNhcHMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc2V0X2NhcHPCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LWNhcHMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0csKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtc3JjLWNhcHMtc3RyIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHNfc3RywqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1zaW5rLWNhcHMtc3RyIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3NldF9jYXBzX3N0csKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtY2Fwcy1zdHIiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfdXNlX3N5c3RlbWNsb2NrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXVzZS1zeXN0ZW1jbG9jayIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc191c2VfdGVzdGNsb2NrwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXVzZS10ZXN0Y2xvY2siIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfZ2V0X3Rlc3RjbG9ja8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1nZXQtdGVzdGNsb2NrIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3NldF90aW1lwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC10aW1lIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXdhaXQtZm9yLWNsb2NrLWlkLXdhaXRzIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWNyYW5rLXNpbmdsZS1jbG9jay13YWl0IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2NyYW5rX211bHRpcGxlX2Nsb2NrX3dhaXRzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWNyYW5rLW11bHRpcGxlLWNsb2NrLXdhaXRzIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3BsYXnCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcGxheSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zZXRfYmxvY2tpbmdfcHVzaF9tb2RlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1ibG9ja2luZy1wdXNoLW1vZGUiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmfCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LWZvcndhcmRpbmciIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfY3JlYXRlX2J1ZmZlcsKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1jcmVhdGUtYnVmZmVyIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3B1c2jCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19wdWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1bGwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfdHJ5X3B1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdHJ5LXB1bGwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfcHVzaF9hbmRfcHVsbMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoLWFuZC1wdWxsIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYnVmZmVycy1yZWNlaXZlZCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWJ1ZmZlcnMtaW4tcXVldWUiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc2V0X2Ryb3BfYnVmZmVyc8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtZHJvcC1idWZmZXJzIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2R1bXBfdG9fZmlsZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1kdW1wLXRvLWZpbGUiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfZ2V0X2xhc3RfcHVzaGVkX3RpbWVzdGFtcMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1nZXQtbGFzdC1wdXNoZWQtdGltZXN0YW1wIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3B1c2hfZXZlbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC1ldmVudCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19wdWxsX2V2ZW50wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1bGwtZXZlbnQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfZXZlbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdHJ5LXB1bGwtZXZlbnQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfZXZlbnRzX3JlY2VpdmVkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWV2ZW50cy1yZWNlaXZlZCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19ldmVudHNfaW5fcXVldWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZXZlbnRzLWluLXF1ZXVlIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC11cHN0cmVhbS1ldmVudCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1bGwtdXBzdHJlYW0tZXZlbnQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfdXBzdHJlYW1fZXZlbnTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdHJ5LXB1bGwtdXBzdHJlYW0tZXZlbnQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX3JlY2VpdmVkwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXVwc3RyZWFtLWV2ZW50cy1yZWNlaXZlZCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWXCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdXBzdHJlYW0tZXZlbnRzLWluLXF1ZXVlIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3F1ZXJ5X2xhdGVuY3nCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcXVlcnktbGF0ZW5jeSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zZXRfdXBzdHJlYW1fbGF0ZW5jecKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtdXBzdHJlYW0tbGF0ZW5jeSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zZXRfcHJvcG9zZV9hbGxvY2F0b3LCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXByb3Bvc2UtYWxsb2NhdG9yIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2dldF9hbGxvY2F0b3LCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZ2V0LWFsbG9jYXRvciIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19hZGRfc3JjwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zcmMiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfYWRkX3NyY19oYXJuZXNzwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zcmMtaGFybmVzcyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19hZGRfc3JjX3BhcnNlwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zcmMtcGFyc2UiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyY8KgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoLWZyb20tc3JjIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3NyY19jcmFua19hbmRfcHVzaF9tYW55wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNyYy1jcmFuay1hbmQtcHVzaC1tYW55IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNyYy1wdXNoLWV2ZW50IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2FkZF9zaW5rwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zaW5rIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3PCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXNpbmstaGFybmVzcyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19hZGRfc2lua19wYXJzZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtc2luay1wYXJzZSIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19wdXNoX3RvX3NpbmvCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC10by1zaW5rIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3NpbmtfcHVzaF9tYW55wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNpbmstcHVzaC1tYW55IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2ZpbmRfZWxlbWVudMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1maW5kLWVsZW1lbnQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc2V0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19nZXTCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZ2V0IiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX2FkZF9wcm9iZcKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtcHJvYmUiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy10aHJlYWQtc3RvcCIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zdHJlc3NfY3VzdG9tX3N0YXJ0wqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1jdXN0b20tc3RhcnQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3N0YXRlY2hhbmdlX3N0YXJ0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3Mtc3RhdGVjaGFuZ2Utc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3N0YXRlY2hhbmdlX3N0YXJ0X2Z1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXN0YXRlY2hhbmdlLXN0YXJ0LWZ1bGwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1idWZmZXItc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0X2Z1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXN0YXJ0LWZ1bGwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jwqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1hY3JvIiBuYW1lPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfd2l0aF9jYl9zdGFydCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXdpdGgtY2Itc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3dpdGhfY2Jfc3RhcnRfZnVsbMKgKCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1idWZmZXItd2l0aC1jYi1zdGFydC1mdWxsIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC1zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF9zdGFydF9mdWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWV2ZW50LXN0YXJ0LWZ1bGwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmPCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMiIHNpbmNlPSIxLjgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfd2l0aF9jYl9zdGFydCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtZXZlbnQtd2l0aC1jYi1zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtZXZlbnQtd2l0aC1jYi1zdGFydC1mdWxsIiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9oYXJuZXNzX3N0cmVzc19zZW5kX3Vwc3RyZWFtX2V2ZW50X3N0YXJ0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3Mtc2VuZC11cHN0cmVhbS1ldmVudC1zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF9zdGFydF9mdWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLXVwc3RyZWFtLWV2ZW50LXN0YXJ0LWZ1bGwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtYWNybyIgbmFtZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3NlbmRfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXNlbmQtdXBzdHJlYW0tZXZlbnQtd2l0aC1jYi1zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGzCoCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQtd2l0aC1jYi1zdGFydC1mdWxsIiBzaW5jZT0iMS44Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydCgpIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXByb3BlcnR5LXN0YXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydF9mdWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wcm9wZXJ0eS1zdGFydC1mdWxsIiBzaW5jZT0iMS42Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWFjcm8iIG5hbWU9ImdzdF9oYXJuZXNzX3N0cmVzc19yZXF1ZXN0cGFkX3N0YXJ0KCkiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcmVxdWVzdHBhZC1zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydF9mdWxswqAoKSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1yZXF1ZXN0cGFkLXN0YXJ0LWZ1bGwiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RIYXJuZXNzIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgc2luY2U9IjEuNiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0SGFybmVzc1RocmVhZCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHNpbmNlPSIxLjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rlc3RfY2xvY2tfbmV3wqAoKSIgbGluaz0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stbmV3IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWXCoCgpIiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1uZXctd2l0aC1zdGFydC10aW1lIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90ZXN0X2Nsb2NrX3NldF90aW1lwqAoKSIgbGluaz0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stc2V0LXRpbWUiIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lwqAoKSIgbGluaz0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stYWR2YW5jZS10aW1lIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnTCoCgpIiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wZWVrLWlkLWNvdW50IiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90ZXN0X2Nsb2NrX2hhc19pZMKgKCkiIGxpbms9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLWhhcy1pZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZMKgKCkiIGxpbms9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXBlZWstbmV4dC1wZW5kaW5nLWlkIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZMKgKCkiIGxpbms9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLW5leHQtcGVuZGluZy1pZCIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9wZW5kaW5nX2lkX2NvdW50wqAoKSIgbGluaz0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2std2FpdC1mb3ItcGVuZGluZy1pZC1jb3VudCIgZGVwcmVjYXRlZD0idXNlIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzKCkgaW5zdGVhZC4iIHNpbmNlPSIxLjIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkwqAoKSIgbGluaz0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stcHJvY2Vzcy1uZXh0LWNsb2NrLWlkIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWXCoCgpIiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1nZXQtbmV4dC1lbnRyeS10aW1lIiBzaW5jZT0iMS4yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZnVuY3Rpb24iIG5hbWU9ImdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzwqAoKSIgbGluaz0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2std2FpdC1mb3ItbXVsdGlwbGUtcGVuZGluZy1pZHMiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rlc3RfY2xvY2tfaWRfbGlzdF9nZXRfbGF0ZXN0X3RpbWXCoCgpIiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1pZC1saXN0LWdldC1sYXRlc3QtdGltZSIgc2luY2U9IjEuNCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImZ1bmN0aW9uIiBuYW1lPSJnc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3TCoCgpIiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wcm9jZXNzLWlkLWxpc3QiIHNpbmNlPSIxLjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJmdW5jdGlvbiIgbmFtZT0iZ3N0X3Rlc3RfY2xvY2tfY3JhbmvCoCgpIiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1jcmFuayIgc2luY2U9IjEuOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFRlc3RDbG9jayIgbGluaz0iR3N0VGVzdENsb2NrLmh0bWwjR3N0VGVzdENsb2NrLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFRlc3RDbG9ja0NsYXNzIiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCNHc3RUZXN0Q2xvY2tDbGFzcyIgc2luY2U9IjEuMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2xvY2stdHlwZeKAnSBwcm9wZXJ0eSIgbGluaz0iR3N0VGVzdENsb2NrLmh0bWwjR3N0VGVzdENsb2NrLS1jbG9jay10eXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzdGFydC10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJHc3RUZXN0Q2xvY2suaHRtbCNHc3RUZXN0Q2xvY2stLXN0YXJ0LXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19OT05FIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GUkFNRS1GTEFHLU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05FV19GUkFNRSIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRlJBTUUtRkxBRy1ORVctRlJBTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PX0ZSQU1FIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GUkFNRS1GTEFHLU5PLUZSQU1FOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19DTElQIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GUkFNRS1GTEFHLUNMSVA6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0RST1AiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZSQU1FLUZMQUctRFJPUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9CQVNFX1BBUlNFX0ZSQU1FX0ZMQUdfUVVFVUUiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZSQU1FLUZMQUctUVVFVUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQkFTRV9TUkNfRkxBR19TVEFSVElORyIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1GTEFHLVNUQVJUSU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRFRCIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1GTEFHLVNUQVJURUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfQkFTRV9TUkNfRkxBR19MQVNUIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR1NULUJBU0UtU1JDLUZMQUctTEFTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRU9TIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtU1RBVEUtRU9TOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURV9GTFVTSElORyIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHU1QtQ09MTEVDVC1QQURTLVNUQVRFLUZMVVNISU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURV9ORVdfU0VHTUVOVCIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHU1QtQ09MTEVDVC1QQURTLVNUQVRFLU5FVy1TRUdNRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURV9XQUlUSU5HIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtU1RBVEUtV0FJVElORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfTE9DS0VEIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtU1RBVEUtTE9DS0VEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9OT05FIiBsaW5rPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFUSU9OLU1PREUtTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSIiBsaW5rPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dTVC1JTlRFUlBPTEFUSU9OLU1PREUtTElORUFSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQyIgbGluaz0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHU1QtSU5URVJQT0xBVElPTi1NT0RFLUNVQklDOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQ19NT05PVE9OSUMiIGxpbms9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR1NULUlOVEVSUE9MQVRJT04tTU9ERS1DVUJJQy1NT05PVE9OSUM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEZPX1dBVkVGT1JNX1NJTkUiIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVNJTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTEZPX1dBVkVGT1JNX1NRVUFSRSIgbGluaz0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dTVC1MRk8tV0FWRUZPUk0tU1FVQVJFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xGT19XQVZFRk9STV9TQVciIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVNBVzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9MRk9fV0FWRUZPUk1fUkVWRVJTRV9TQVciIGxpbms9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHU1QtTEZPLVdBVkVGT1JNLVJFVkVSU0UtU0FXOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRSIgbGluaz0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dTVC1MRk8tV0FWRUZPUk0tVFJJQU5HTEU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlLXN0cnVjdC5lbGVtZW50IiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2Utc3RydWN0LmVsZW1lbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLnN0YXJ0IiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcy5zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc3RvcCIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlQ2xhc3Muc3RvcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc2V0LXNpbmstY2FwcyIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlQ2xhc3Muc2V0LXNpbmstY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3MuaGFuZGxlLWZyYW1lIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcy5oYW5kbGUtZnJhbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLnByZS1wdXNoLWZyYW1lIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcy5wcmUtcHVzaC1mcmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3MuY29udmVydCIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlQ2xhc3MuY29udmVydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc2luay1ldmVudCIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlQ2xhc3Muc2luay1ldmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlQ2xhc3Muc3JjLWV2ZW50IiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcy5zcmMtZXZlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLmdldC1zaW5rLWNhcHMiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUNsYXNzLmdldC1zaW5rLWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VQYXJzZUNsYXNzLmRldGVjdCIgbGluaz0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlQ2xhc3MuZGV0ZWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5zaW5rLXF1ZXJ5IiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcy5zaW5rLXF1ZXJ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlUGFyc2VDbGFzcy5zcmMtcXVlcnkiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUNsYXNzLnNyYy1xdWVyeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlRnJhbWUuYnVmZmVyIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZS5idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lLm91dC1idWZmZXIiIGxpbms9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZUZyYW1lLm91dC1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lLmZsYWdzIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZS5mbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVBhcnNlRnJhbWUub2Zmc2V0IiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZS5vZmZzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VQYXJzZUZyYW1lLm92ZXJoZWFkIiBsaW5rPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VGcmFtZS5vdmVyaGVhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmdldC1jYXBzIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmdldC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MubmVnb3RpYXRlIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLm5lZ290aWF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmZpeGF0ZSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5maXhhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5zZXQtY2FwcyIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5zZXQtY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmRlY2lkZS1hbGxvY2F0aW9uIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLmRlY2lkZS1hbGxvY2F0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU3JjQ2xhc3Muc3RhcnQiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3Muc3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5zdG9wIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLnN0b3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5nZXQtdGltZXMiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZ2V0LXRpbWVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MuZ2V0LXNpemUiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZ2V0LXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5pcy1zZWVrYWJsZSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5pcy1zZWVrYWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnByZXBhcmUtc2Vlay1zZWdtZW50IiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLnByZXBhcmUtc2Vlay1zZWdtZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MuZG8tc2VlayIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5kby1zZWVrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MudW5sb2NrIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLnVubG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLnVubG9jay1zdG9wIiBsaW5rPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyY0NsYXNzLnVubG9jay1zdG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU3JjQ2xhc3MucXVlcnkiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MucXVlcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5ldmVudCIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5ldmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5jcmVhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTcmNDbGFzcy5hbGxvYyIgbGluaz0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNDbGFzcy5hbGxvYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNyY0NsYXNzLmZpbGwiIGxpbms9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MuZmlsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5nZXQtY2FwcyIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLmdldC1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnNldC1jYXBzIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc2V0LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MuZml4YXRlIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MuZml4YXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLmFjdGl2YXRlLXB1bGwiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5hY3RpdmF0ZS1wdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLmdldC10aW1lcyIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLmdldC10aW1lcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5wcm9wb3NlLWFsbG9jYXRpb24iIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5wcm9wb3NlLWFsbG9jYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3Muc3RhcnQiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5zdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5zdG9wIiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3Muc3RvcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy51bmxvY2siIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy51bmxvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MudW5sb2NrLXN0b3AiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy51bmxvY2stc3RvcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5xdWVyeSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnF1ZXJ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLmV2ZW50IiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MuZXZlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3Mud2FpdC1ldmVudCIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLndhaXQtZXZlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MucHJlcGFyZSIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnByZXBhcmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VTaW5rQ2xhc3MucHJlcGFyZS1saXN0IiBsaW5rPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rQ2xhc3MucHJlcGFyZS1saXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnByZXJvbGwiIGxpbms9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmtDbGFzcy5wcmVyb2xsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlU2lua0NsYXNzLnJlbmRlciIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnJlbmRlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXItbGlzdCIgbGluaz0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzLnJlbmRlci1saXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MucGFzc3Rocm91Z2gtb24tc2FtZS1jYXBzIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnBhc3N0aHJvdWdoLW9uLXNhbWUtY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnRyYW5zZm9ybS1pcC1vbi1wYXNzdGhyb3VnaCIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0taXAtb24tcGFzc3Rocm91Z2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0tY2FwcyIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0tY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmZpeGF0ZS1jYXBzIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmZpeGF0ZS1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuYWNjZXB0LWNhcHMiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuYWNjZXB0LWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5zZXQtY2FwcyIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy5zZXQtY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnF1ZXJ5IiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnF1ZXJ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuZGVjaWRlLWFsbG9jYXRpb24iIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuZGVjaWRlLWFsbG9jYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5maWx0ZXItbWV0YSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy5maWx0ZXItbWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnByb3Bvc2UtYWxsb2NhdGlvbiIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy5wcm9wb3NlLWFsbG9jYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0tc2l6ZSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0tc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmdldC11bml0LXNpemUiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuZ2V0LXVuaXQtc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnN0YXJ0IiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnN0YXJ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3Muc3RvcCIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy5zdG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3Muc2luay1ldmVudCIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy5zaW5rLWV2ZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3Muc3JjLWV2ZW50IiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnNyYy1ldmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnByZXBhcmUtb3V0cHV0LWJ1ZmZlciIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy5wcmVwYXJlLW91dHB1dC1idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy5jb3B5LW1ldGFkYXRhIiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmNvcHktbWV0YWRhdGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0tbWV0YSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0tbWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmJlZm9yZS10cmFuc2Zvcm0iIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuYmVmb3JlLXRyYW5zZm9ybSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0QmFzZVRyYW5zZm9ybUNsYXNzLnRyYW5zZm9ybSIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcy50cmFuc2Zvcm0taXAiIGxpbms9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MudHJhbnNmb3JtLWlwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3Muc3VibWl0LWlucHV0LWJ1ZmZlciIgbGluaz0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy5zdWJtaXQtaW5wdXQtYnVmZmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCYXNlVHJhbnNmb3JtQ2xhc3MuZ2VuZXJhdGUtb3V0cHV0IiBsaW5rPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzLmdlbmVyYXRlLW91dHB1dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UHVzaFNyY0NsYXNzLmNyZWF0ZSIgbGluaz0iR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmNDbGFzcy5jcmVhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdFB1c2hTcmNDbGFzcy5hbGxvYyIgbGluaz0iR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmNDbGFzcy5hbGxvYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0UHVzaFNyY0NsYXNzLmZpbGwiIGxpbms9IkdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjQ2xhc3MuZmlsbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Qml0UmVhZGVyLmRhdGEiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlci5kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCaXRSZWFkZXIuc2l6ZSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyLnNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJpdFJlYWRlci5ieXRlIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIuYnl0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Qml0UmVhZGVyLmJpdCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyLmJpdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Qnl0ZVJlYWRlci5kYXRhIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlci5kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCeXRlUmVhZGVyLnNpemUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyLnNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEJ5dGVSZWFkZXIuYnl0ZSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIuYnl0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Qnl0ZVdyaXRlci5wYXJlbnQiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyLnBhcmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Qnl0ZVdyaXRlci5hbGxvYy1zaXplIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlci5hbGxvYy1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RCeXRlV3JpdGVyLmZpeGVkIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlci5maXhlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Qnl0ZVdyaXRlci5vd25lZCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIub3duZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbGxlY3RQYWRzLXN0cnVjdC5kYXRhIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzLXN0cnVjdC5kYXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RDb2xsZWN0RGF0YS5jb2xsZWN0IiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhLmNvbGxlY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbGxlY3REYXRhLnBhZCIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YS5wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbGxlY3REYXRhLmJ1ZmZlciIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YS5idWZmZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbGxlY3REYXRhLnBvcyIgbGluaz0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YS5wb3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbGxlY3REYXRhLnNlZ21lbnQiIGxpbms9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdERhdGEuc2VnbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Q29sbGVjdERhdGEuZHRzIiBsaW5rPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3REYXRhLmR0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RGF0YVF1ZXVlLm9iamVjdCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlLm9iamVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RGF0YVF1ZXVlU2l6ZS52aXNpYmxlIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVTaXplLnZpc2libGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdERhdGFRdWV1ZVNpemUuYnl0ZXMiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZVNpemUuYnl0ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdERhdGFRdWV1ZVNpemUudGltZSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlU2l6ZS50aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3REYXRhUXVldWVJdGVtLm9iamVjdCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlSXRlbS5vYmplY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdERhdGFRdWV1ZUl0ZW0uc2l6ZSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlSXRlbS5zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3REYXRhUXVldWVJdGVtLmR1cmF0aW9uIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtLmR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3REYXRhUXVldWVJdGVtLnZpc2libGUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0udmlzaWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0RGF0YVF1ZXVlSXRlbS5kZXN0cm95IiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtLmRlc3Ryb3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdENvbnRyb2xQb2ludC50aW1lc3RhbXAiIGxpbms9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFBvaW50LnRpbWVzdGFtcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0Q29udHJvbFBvaW50LnZhbHVlIiBsaW5rPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI0dzdENvbnRyb2xQb2ludC52YWx1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TmV0QWRkcmVzc01ldGEubWV0YSIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuaHRtbCNHc3ROZXRBZGRyZXNzTWV0YS5tZXRhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3ROZXRBZGRyZXNzTWV0YS5hZGRyIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI0dzdE5ldEFkZHJlc3NNZXRhLmFkZHIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5tZXRhIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCNHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEubWV0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLm1lc3NhZ2UiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sI0dzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5tZXNzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3ROZXRUaW1lUGFja2V0LmxvY2FsLXRpbWUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0LmxvY2FsLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdE5ldFRpbWVQYWNrZXQucmVtb3RlLXRpbWUiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0LnJlbW90ZS10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ibWVtYmVyIiBuYW1lPSJHc3RIYXJuZXNzLmVsZW1lbnQiIGxpbms9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzLmVsZW1lbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEhhcm5lc3Muc3JjcGFkIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcy5zcmNwYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEhhcm5lc3Muc2lua3BhZCIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3Muc2lua3BhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9Im1lbWJlciIgbmFtZT0iR3N0SGFybmVzcy5zcmMtaGFybmVzcyIgbGluaz0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3Muc3JjLWhhcm5lc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJtZW1iZXIiIG5hbWU9IkdzdEhhcm5lc3Muc2luay1oYXJuZXNzIiBsaW5rPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcy5zaW5rLWhhcm5lc3MiLz4KLSAgPC9mdW5jdGlvbnM+Ci08L2Jvb2s+CmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmNiY2Q4Li4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM1NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0Qml0UmVhZGVyOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0QWRhcHRlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2gyPgotPHA+R3N0Qml0UmVhZGVyIOKAlCBSZWFkcyBhbnkgbnVtYmVyIG9mIGJpdHMgZnJvbSBhIG1lbW9yeSBidWZmZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dTVC1CSVQtUkVBREVSLUlOSVQ6Q0FQUyIgdGl0bGU9IkdTVF9CSVRfUkVBREVSX0lOSVQoKSI+R1NUX0JJVF9SRUFERVJfSU5JVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1uZXciIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9uZXfCoCgpIj5nc3RfYml0X3JlYWRlcl9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1mcmVlIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZnJlZcKgKCkiPmdzdF9iaXRfcmVhZGVyX2ZyZWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1pbml0IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfaW5pdMKgKCkiPmdzdF9iaXRfcmVhZGVyX2luaXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1wb3MiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfcG9zwqAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X3BvczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LXJlbWFpbmluZyIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmfCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1zZXQtcG9zIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfc2V0X3Bvc8KgKCkiPmdzdF9iaXRfcmVhZGVyX3NldF9wb3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1zaXplIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemXCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3NraXDCoCgpIj5nc3RfYml0X3JlYWRlcl9za2lwPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGXCoCgpIj5nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQxNiIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNsKgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMywqAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjTCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDjCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50ODwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNiIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTbCoCgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDMyIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMsKgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0wqAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ4IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4wqAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZMKgKCkiPmdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItc2tpcC10by1ieXRlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWTCoCgpIj5nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MTY8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWTCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTZfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMl91bmNoZWNrZWTCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDY0LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NF91bmNoZWNrZWTCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZMKgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDE2PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MTYtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNl91bmNoZWNrZWTCoCgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MzItdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMl91bmNoZWNrZWTCoCgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI2dzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NF91bmNoZWNrZWTCoCgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0X3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZMKgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OF91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBwcm92aWRlcyBhIGJpdCByZWFkZXIgdGhhdCBjYW4gcmVhZCBhbnkgbnVtYmVyIG9mIGJpdHMKLWZyb20gYSBtZW1vcnkgYnVmZmVyLiBJdCBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW55IG51bWJlciBvZiBiaXRzCi1pbnRvIDgsIDE2LCAzMiBhbmQgNjQgYml0IHZhcmlhYmxlcy48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULUJJVC1SRUFERVItSU5JVDpDQVBTIj48L2E+PGgzPkdTVF9CSVRfUkVBREVSX0lOSVQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBHU1RfQklUX1JFQURFUl9JTklUKGRhdGEsIHNpemUpIHtkYXRhLCBzaXplLCAwLCAwfQotPC9wcmU+Ci08cD5BIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggdGhpcyBtYWNybywgYmVmb3JlIGl0IGNhbiBiZQotdXNlZC4gVGhpcyBtYWNybyBjYW4gdXNlZCBiZSB0byBpbml0aWFsaXplIGEgdmFyaWFibGUsIGJ1dCBpdCBjYW5ub3QKLWJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUuIEluIHRoYXQgY2FzZSB5b3UgaGF2ZSB0byB1c2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1pbml0IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2JpdF9yZWFkZXJfaW5pdCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULUJJVC1SRUFERVItSU5JVC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+RGF0YSBmcm9tIHdoaWNoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gc2hvdWxkIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLWluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLW5ldyI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+wqAqCi1nc3RfYml0X3JlYWRlcl9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGUgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLCB3aGljaCB3aWxsIHJlYWQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9iaXRfcmVhZGVyX2ZyZWU8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBEYXRhIGZyb20gd2hpY2ggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPgotc2hvdWxkIHJlYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotaW4gYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZnJlZSI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2JpdF9yZWFkZXJfZnJlZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZyZWVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLCB3aGljaCB3YXMgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1uZXciIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9iaXRfcmVhZGVyX25ldygpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZnJlZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItaW5pdCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9pbml0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2JpdF9yZWFkZXJfaW5pdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Jbml0aWFsaXplcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSB0byByZWFkIGZyb20gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLS4gVGhpcyBmdW5jdGlvbgotY2FuIGJlIGNhbGxlZCBvbiBhbHJlYWR5IGluaXRpYWxpemVkIGluc3RhbmNlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1pbml0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gZGF0YSBmcm9tIHdoaWNoIHRoZSBiaXQgcmVhZGVyIHNob3VsZCByZWFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotaW4gYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LXBvcyI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfcG9zwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9nZXRfcG9zICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSBpbiBiaXRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1wb3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LXBvcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT4KLWluIGJpdHMuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1yZW1haW5pbmciPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYml0cyBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtcmVtYWluaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1yZW1haW5pbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgcmVtYWluaW5nIG51bWJlciBvZiBiaXRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT4KLWluc3RhbmNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1zZXQtcG9zIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3NldF9wb3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iaXRfcmVhZGVyX3NldF9wb3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBwb3M8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgbmV3IHBvc2l0aW9uIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3M8L2NvZGU+PC9lbT4KLSBpbiBiaXRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNldC1wb3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5ldyBwb3NpdGlvbiBpbiBiaXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1zZXQtcG9zLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwb3NpdGlvbiBjb3VsZCBiZSBzZXQgc3VjY2Vzc2Z1bGx5LCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPgotb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfc2l6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBvZiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtc2l6ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+Ci1pbnN0YW5jZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItc2tpcCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9za2lwwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9za2lwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2tpcHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNraXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmJpdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJpdHMgdG8gc2tpcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItc2tpcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4KLWJpdHMgY291bGQgYmUgc2tpcHBlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Ta2lwcyB1bnRpbCB0aGUgbmV4dCBieXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNraXAtdG8tYnl0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MTYiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4KLSBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYml0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQxNi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQzMiI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPgotIGJpdHMgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MzIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5iaXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDY0Ij48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ2NC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmJpdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgYml0cyB0byByZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPgotIGJpdHMgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5iaXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2Ij48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTYgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPgotIGJpdHMgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmJpdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgYml0cyB0byByZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMiI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4KLSBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MzIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5iaXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYml0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYml0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50OC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNraXAtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2tpcHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUKLWFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItc2tpcC11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmJpdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJpdHMgdG8gc2tpcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2tpcHMgdW50aWwgdGhlIG5leHQgYnl0ZSB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cwotYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXNraXAtdG8tYnl0ZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MTYtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTZfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDE2LXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYml0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQxNi11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciB3aXRoIHRoZSBiaXRzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MzItdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMl91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDMyLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYml0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQzMi11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciB3aXRoIHRoZSBiaXRzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NF91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItZ2V0LWJpdHMtdWludDY0LXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYml0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ2NC11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciB3aXRoIHRoZSBiaXRzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OC11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4KLWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPgotIGJpdHMgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4LXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYml0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLWdldC1iaXRzLXVpbnQ4LXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDggYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNi11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNl91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+Ci1nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYml0czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYml0czwvY29kZT48L2VtPgotIGJpdHMgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aG91dAotY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlcjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50MTYtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5iaXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQxNi11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciB3aXRoIHRoZSBiaXRzLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDMyLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4KLWdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzJfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG5iaXRzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5iaXRzPC9jb2RlPjwvZW0+Ci0gYml0cyBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLSBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQzMi11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwjR3N0Qml0UmVhZGVyIiB0aXRsZT0iR3N0Qml0UmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qml0UmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmJpdHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5udW1iZXIgb2YgYml0cyB0byByZWFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDMyLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIHdpdGggdGhlIGJpdHMuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NF91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4KLSBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXI8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0LXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYml0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBiaXRzIHRvIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1iaXQtcmVhZGVyLXBlZWstYml0cy11aW50NjQtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdW5zaWduZWQgNjQgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ4LXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDhfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4KLWdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OF91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCaXRSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJpdHM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmJpdHM8L2NvZGU+PC9lbT4KLSBiaXRzIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXI8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sI0dzdEJpdFJlYWRlciIgdGl0bGU9IkdzdEJpdFJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpdFJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5iaXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGJpdHMgdG8gcmVhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJpdC1yZWFkZXItcGVlay1iaXRzLXVpbnQ4LXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDggYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEJpdFJlYWRlciI+PC9hPjxoMz5Hc3RCaXRSZWFkZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICBndWludCBzaXplOwotCi0gIGd1aW50IGJ5dGU7ICAvKiBCeXRlIHBvc2l0aW9uICovCi0gIGd1aW50IGJpdDsgICAvKiBCaXQgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgYnl0ZSAqLwotfSBHc3RCaXRSZWFkZXI7Ci08L3ByZT4KLTxwPkEgYml0IHJlYWRlciBpbnN0YW5jZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RCaXRSZWFkZXIubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPmNvbnN0wqA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Qml0UmVhZGVyLmRhdGEiPjwvYT5kYXRhPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD4gRGF0YSBmcm9tIHdoaWNoIHRoZSBiaXQgcmVhZGVyIHdpbGwKLXJlYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPXNpemVdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCaXRSZWFkZXIuc2l6ZSI+PC9hPnNpemU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLWluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpdFJlYWRlci5ieXRlIj48L2E+Ynl0ZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+Q3VycmVudCBieXRlIHBvc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJpdFJlYWRlci5iaXQiPjwvYT5iaXQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPkJpdCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBieXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDdlZDUyLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdEJ1ZmZlclN0cmF3OiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcudG9wX29mX3BhZ2UiPjwvYT5Hc3RCdWZmZXJTdHJhdzwvc3Bhbj48L2gyPgotPHA+R3N0QnVmZmVyU3RyYXcg4oCUIEJ1ZmZlciBpbnRlcmNlcHRpb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZcKgKCkiPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1nZXQtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19nZXRfYnVmZmVywqAoKSI+Z3N0X2J1ZmZlcl9zdHJhd19nZXRfYnVmZmVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0b3AtcGlwZWxpbmUiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmXCoCgpIj5nc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZXNlIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9mIHRoZSB1bml0IHRlc3RzIGZvdW5kCi1pbnNpZGUgdGhlICdjaGVjaycgZGlyZWN0b3JpZXMgb2YgdmFyaW91cyBHU3RyZWFtZXIgcGFja2FnZXMuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1zdHJhdy1zdGFydC1waXBlbGluZSI+PC9hPjxoMz5nc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHVwIGEgcGlwZWxpbmUgZm9yIGJ1ZmZlciBzdWNraW5nLiBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNhbGwKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19nZXRfYnVmZmVyKCk8L2NvZGU+PC9hPiB0byBhY2Nlc3MgYnVmZmVycyBhcyB0aGV5IHBhc3Mgb3ZlciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseSB1c2VkIGluIHVuaXQgdGVzdHMgdGhhdCB3YW50IHRvIHZlcmlmeSB0aGF0IGEKLXBhcnRpY3VsYXIgZWxlbWVudCBpcyBvdXRwdXR0aW5nIGNvcnJlY3QgYnVmZmVycy4gRm9yIGV4YW1wbGUsIHlvdSB3b3VsZCBtYWtlCi1hIHBpcGVsaW5lIHZpYSA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2giPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhcnNlX2xhdW5jaCgpPC9jb2RlPjwvYT4sIHB1bGwgb3V0IHRoZSBwYWQgeW91IHdhbnQgdG8gbW9uaXRvciwgdGhlbgotY2FsbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LWdldC1idWZmZXIiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlcigpPC9jb2RlPjwvYT4gdG8gZ2V0IHRoZSBidWZmZXJzIHRoYXQgcGFzcyB0aHJvdWdoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4KLVRoZSBwaXBlbGluZSB3aWxsIGJsb2NrIHVudGlsIHlvdSBoYXZlIHN1Y2tlZCBvZmYgdGhlIGJ1ZmZlcnMuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgc3RhdGUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJpbjwvY29kZT48L2VtPgotIHRvIFBMQVlJTkc7IHRvIGNsZWFuIHVwLCBiZSBzdXJlIHRvCi1jYWxsIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RvcC1waXBlbGluZSIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lKCk8L2NvZGU+PC9hPi48L3A+Ci08cD5Ob3RlIHRoYXQgeW91IG1heSBub3Qgc3RhcnQgdHdvIGJ1ZmZlciBzdHJhd3MgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBmdW5jdGlvbgotaXMgaW50ZW5kZWQgZm9yIHVuaXQgdGVzdHMsIG5vdCBnZW5lcmFsIEFQSSB1c2UuIEluIGZhY3QgaXQgY2FsbHMgZmFpbF9pZgotZnJvbSBsaWJjaGVjaywgc28geW91IGNhbm5vdCB1c2UgaXQgb3V0c2lkZSB1bml0IHRlc3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItc3RyYXctc3RhcnQtcGlwZWxpbmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBpcGVsaW5lIHRvIHJ1bjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBhZCBvbiBhbiBlbGVtZW50IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iaW48L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLXN0cmF3LWdldC1idWZmZXIiPjwvYT48aDM+Z3N0X2J1ZmZlcl9zdHJhd19nZXRfYnVmZmVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi1nc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqYmluPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnBhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgb25lIGJ1ZmZlciBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLS4gSW1wbGVtZW50ZWQgdmlhIGJ1ZmZlciBwcm9iZXMuIFRoaXMgZnVuY3Rpb24gd2lsbAotYmxvY2sgdW50aWwgdGhlIHBpcGVsaW5lIHBhc3NlcyBhIGJ1ZmZlciBvdmVyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYWQ8L2NvZGU+PC9lbT4KLSwgc28gZm9yIHJvYnVzdCBiZWhhdmlvcgotaW4gdW5pdCB0ZXN0cywgeW91IG5lZWQgdG8gdXNlIGNoZWNrJ3MgdGltZW91dCB0byBmYWlsIG91dCBpbiB0aGUgY2FzZSB0aGF0IGEKLWJ1ZmZlciBuZXZlciBhcnJpdmVzLjwvcD4KLTxwPllvdSBtdXN0IGhhdmUgcHJldmlvdXNseSBjYWxsZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1zdGFydC1waXBlbGluZSIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUoKTwvY29kZT48L2E+IG9uCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGlwZWxpbmU8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGlwZWxpbmUgcHJldmlvdXNseSBzdGFydGVkIHZpYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCBwcmV2aW91c2x5IHBhc3NlZCB0byA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpPC9jb2RlPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItc3RyYXctZ2V0LWJ1ZmZlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBjYXB0dXJlZCA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1zdHJhdy1zdG9wLXBpcGVsaW5lIj48L2E+PGgzPmdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICpiaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YmluPC9jb2RlPjwvZW0+Ci0gdG8gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR1NULVNUQVRFLU5VTEw6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9TVEFURV9OVUxMPC9zcGFuPjwvYT4gYW5kIHJlbGVhc2UgcmVzb3VyY2UgYWxsb2NhdGVkIGluCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpPC9jb2RlPjwvYT4uPC9wPgotPHA+WW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IGNhbGxlZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpPC9jb2RlPjwvYT4gb24KLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5waXBlbGluZTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFkPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1zdHJhdy1zdG9wLXBpcGVsaW5lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwaXBlbGluZSBwcmV2aW91c2x5IHN0YXJ0ZWQgdmlhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RhcnQtcGlwZWxpbmUiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFkIHByZXZpb3VzbHkgcGFzc2VkIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RhcnQtcGlwZWxpbmUiIHRpdGxlPSJnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCk8L2NvZGU+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgwMzY4MC4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MTE5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RCeXRlUmVhZGVyOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9oMj4KLTxwPkdzdEJ5dGVSZWFkZXIg4oCUIFJlYWRzIGRpZmZlcmVudCBpbnRlZ2VyLCBzdHJpbmcgYW5kIGZsb2F0aW5nIHBvaW50Ci0gICAgdHlwZXMgZnJvbSBhIG1lbW9yeSBidWZmZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR1NULUJZVEUtUkVBREVSLUlOSVQ6Q0FQUyIgdGl0bGU9IkdTVF9CWVRFX1JFQURFUl9JTklUKCkiPkdTVF9CWVRFX1JFQURFUl9JTklUPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW5ldyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9uZXfCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1mcmVlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2ZyZWXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItaW5pdCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9pbml0wqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2luaXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1zdWItcmVhZGVyIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlcsKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXN1Yi1yZWFkZXIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXLCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXBvcyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9wb3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXJlbWFpbmluZyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2V0LXBvcyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NldF9wb3M8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXNpemUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9za2lwwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NraXA8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDjCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ4IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50OCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4wqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGHCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGHCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1kYXRhIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItbWFza2VkLXNjYW4tdWludDMyIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMsKgKCkiPmdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItbWFza2VkLXNjYW4tdWludDMyLXBlZWsiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWvCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWs8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmciIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZygpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXN0cmluZy11dGY4IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmOMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0Zjg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstc3RyaW5nIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmctdXRmOCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4wqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0Zjg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmciIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZygpIj5nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGY4IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmOMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0Zjg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGYxNiIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2wqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGYzMiIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMywqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMzI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmOCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4wqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0Zjg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMTYiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTbCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTY8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMzIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzLCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50ODwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OF91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDE2PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MTY8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MTY8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDE2PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ4PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDhfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OF91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MTY8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQxNjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MTY8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50NjQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Zsb2F0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Zsb2F0PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1kYXRhLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1kYXRhLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZGF0YS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gcHJvdmlkZXMgYSBieXRlIHJlYWRlciB0aGF0IGNhbiByZWFkIGRpZmZlcmVudCBpbnRlZ2VyIGFuZAotZmxvYXRpbmcgcG9pbnQgdHlwZXMgZnJvbSBhIG1lbW9yeSBidWZmZXIuIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZwotc2lnbmVkL3Vuc2lnbmVkLCBsaXR0bGUvYmlnIGVuZGlhbiBpbnRlZ2VycyBvZiA4LCAxNiwgMjQsIDMyIGFuZCA2NCBiaXRzCi1hbmQgZnVuY3Rpb25zIGZvciByZWFkaW5nIGxpdHRsZS9iaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50cyBudW1iZXJzIG9mCi0zMiBhbmQgNjQgYml0cy4gSXQgYWxzbyBwcm92aWRlcyBmdW5jdGlvbnMgdG8gcmVhZCBOVUwtdGVybWluYXRlZCBzdHJpbmdzCi1pbiB2YXJpb3VzIGNoYXJhY3RlciBlbmNvZGluZ3MuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtQllURS1SRUFERVItSU5JVDpDQVBTIj48L2E+PGgzPkdTVF9CWVRFX1JFQURFUl9JTklUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgR1NUX0JZVEVfUkVBREVSX0lOSVQoZGF0YSwgc2l6ZSkge2RhdGEsIHNpemUsIDB9Ci08L3ByZT4KLTxwPkEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggdGhpcyBtYWNybywgYmVmb3JlIGl0IGNhbiBiZQotdXNlZC4gVGhpcyBtYWNybyBjYW4gdXNlZCBiZSB0byBpbml0aWFsaXplIGEgdmFyaWFibGUsIGJ1dCBpdCBjYW5ub3QKLWJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUuIEluIHRoYXQgY2FzZSB5b3UgaGF2ZSB0byB1c2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWluaXQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfaW5pdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J5dGVfcmVhZGVyX2luaXQoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdTVC1CWVRFLVJFQURFUi1JTklULnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5EYXRhIGZyb20gd2hpY2ggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gc2hvdWxkIHJlYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLWluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1uZXciPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+wqAqCi1nc3RfYnl0ZV9yZWFkZXJfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZSBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLCB3aGljaCB3aWxsIHJlYWQgZnJvbSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9ieXRlX3JlYWRlcl9mcmVlPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGRhdGEgZnJvbSB3aGljaCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gc2hvdWxkIHJlYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci1pbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1mcmVlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfcmVhZGVyX2ZyZWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnJlZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLCB3aGljaCB3YXMgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW5ldyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9uZXfCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9ieXRlX3JlYWRlcl9uZXcoKTwvY29kZT48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1mcmVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWluaXQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2luaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV9yZWFkZXJfaW5pdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Jbml0aWFsaXplcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UgdG8gcmVhZCBmcm9tIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0uIFRoaXMgZnVuY3Rpb24KLWNhbiBiZSBjYWxsZWQgb24gYWxyZWFkeSBpbml0aWFsaXplZCBpbnN0YW5jZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWluaXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gZGF0YSBmcm9tIHdoaWNoCi10aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBzaG91bGQgcmVhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciBpbnB1dC4gRGVmYXVsdCBpcyB0cmFuc2ZlciBub25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmluPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPXNpemVdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLWluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXN1Yi1yZWFkZXIiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpzdWJfcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5pdGlhbGl6ZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IHN1Yi1yZWFkZXIgaW5zdGFuY2UgdG8gY29udGFpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIG9mCi1kYXRhIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPgotLiBUaGlzIGlzIHVzZWZ1bCB0byByZWFkIGNodW5rZWQKLWZvcm1hdHMgYW5kIG1ha2Ugc3VyZSB0aGF0IG9uZSBkb2Vzbid0IHJlYWQgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBzdWItY2h1bmsuPC9wPgotPHA+VW5saWtlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdWItcmVhZGVyIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXIoKTwvY29kZT48L2E+LCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSB0aGUKLWN1cnJlbnQgcG9zaXRpb24gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPgotLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXN1Yi1yZWFkZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YW4gZXhpc3RpbmcgYW5kIGluaXRpYWxpemVkIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3ViX3JlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSB0byBpbml0aWFsaXplIGFzIHN1Yi1yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN1Yl9yZWFkZXI8L2NvZGU+PC9lbT4KLWluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1zdWItcmVhZGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gRkFMU0Ugb24gZXJyb3Igb3IgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPgotZG9lcyBub3QgY29udGFpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotbW9yZSBieXRlcyBmcm9tCi10aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIG90aGVyd2lzZSBUUlVFPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtc3ViLXJlYWRlciI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnN1Yl9yZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkluaXRpYWxpemVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBzdWItcmVhZGVyIGluc3RhbmNlIHRvIGNvbnRhaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBvZgotZGF0YSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT4KLS4gVGhpcyBpcyB1c2VmdWwgdG8gcmVhZCBjaHVua2VkCi1mb3JtYXRzIGFuZCBtYWtlIHN1cmUgdGhhdCBvbmUgZG9lc24ndCByZWFkIGJleW9uZCB0aGUgc2l6ZSBvZiB0aGUgc3ViLWNodW5rLjwvcD4KLTxwPlVubGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXN1Yi1yZWFkZXIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19zdWJfcmVhZGVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19zdWJfcmVhZGVyKCk8L2NvZGU+PC9hPiwgdGhpcyBmdW5jdGlvbiBhbHNvIG1vZGlmaWVzIHRoZQotcG9zaXRpb24gb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPgotIGFuZCBtb3ZlcyBpdCBmb3J3YXJkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdWItcmVhZGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIGV4aXN0aW5nIGFuZCBpbml0aWFsaXplZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN1Yl9yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UgdG8gaW5pdGlhbGl6ZSBhcyBzdWItcmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdWJfcmVhZGVyPC9jb2RlPjwvZW0+Ci1pbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdWItcmVhZGVyLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gRkFMU0Ugb24gZXJyb3Igb3IgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlYWRlcjwvY29kZT48L2VtPgotZG9lcyBub3QgY29udGFpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotbW9yZSBieXRlcyBmcm9tCi10aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIG90aGVyd2lzZSBUUlVFPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtcG9zIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSBpbiBieXRlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXBvcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1wb3MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+Ci1pbiBieXRlcy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1yZW1haW5pbmciPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtcmVtYWluaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXJlbWFpbmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZWFkZXI8L2NvZGU+PC9lbT4KLWluc3RhbmNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2V0LXBvcyI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfc2V0X3Bvc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHBvczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBuZXcgcG9zaXRpb24gb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wb3M8L2NvZGU+PC9lbT4KLSBpbiBieXRlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2V0LXBvcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG5ldyBwb3NpdGlvbiBpbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXNldC1wb3MucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIHNldCBzdWNjZXNzZnVsbHksIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+Ci1vdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb2YgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1zaXplLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cmVhZGVyPC9jb2RlPjwvZW0+Ci1pbnN0YW5jZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3NraXDCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9za2lwICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBuYnl0ZXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2tpcHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5ieXRlczwvY29kZT48L2VtPgotIGJ5dGVzIG9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLWJ5dGVzIGNvdWxkIGJlIHNraXBwZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ4PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDggYml0IGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ4PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MTY8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMTYgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDE2IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1hbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDMyIGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCAzMiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1hbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgNjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDgiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50OMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1hbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1hbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGFuIHVuc2lnbmVkIDMyIGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMzIgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCA2NCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1hbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ4PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDggYml0IGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0gYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50OC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDg8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MTY8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMTYgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MTY8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1idXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1iZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDI0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMzIgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItYmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCAzMiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1idXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1sZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDY0IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgNjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50OC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMTYgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMTYgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMzIgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMzIgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiAqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWw8L2NvZGU+PC9lbT4KLQotYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgMzIgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDMyIGJpdCBiaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1hbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1iZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1hbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFBvaW50ZXIgdG8gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtYmUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgNjQgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDMyIGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1idXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgMzIgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsPC9jb2RlPjwvZW0+Ci0KLWJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBQb2ludGVyIHRvIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1idXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+ICp2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDY0IGJpdCBiaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbDwvY29kZT48L2VtPgotCi1idXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gUG9pbnRlciB0byBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgc3VjY2Vzc2Z1bCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWRhdGEiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIGEgY29uc3RhbnQgcG9pbnRlciB0byB0aGUgY3VycmVudCBkYXRhCi1wb3NpdGlvbiBpZiBhdCBsZWFzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIGFyZSBsZWZ0IGFuZAotdXBkYXRlcyB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWRhdGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5TaXplIGluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhZGRyZXNzIG9mIGEKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPXNpemVdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZGF0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtZGF0YSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICoqdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZyZWUtZnVuY3Rpb246IGdfZnJlZTwvcD4KLTxwPlJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgY29weSBvZiB0aGUgY3VycmVudCBkYXRhCi1wb3NpdGlvbiBpZiBhdCBsZWFzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIGFyZSBsZWZ0IGFuZAotdXBkYXRlcyB0aGUgY3VycmVudCBwb3NpdGlvbi4gRnJlZSB3aXRoIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lbW9yeS1BbGxvY2F0aW9uLmh0bWwjZy1mcmVlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfZnJlZSgpPC9jb2RlPjwvYT4gd2hlbiBubyBsb25nZXIgbmVlZGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlNpemUgaW4gYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGFkZHJlc3Mgb2YgYQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1kYXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZGF0YSI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqKnZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIGEgY29uc3RhbnQgcG9pbnRlciB0byB0aGUgY3VycmVudCBkYXRhCi1wb3NpdGlvbiBpZiBhdCBsZWFzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIGFyZSBsZWZ0IGFuZAota2VlcHMgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlNpemUgaW4gYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGFkZHJlc3Mgb2YgYQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZGF0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzIiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gbWFzazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gcGF0dGVybjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBvZmZzZXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TY2FuIGZvciBwYXR0ZXJuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXR0ZXJuPC9jb2RlPjwvZW0+Ci0gd2l0aCBhcHBsaWVkIG1hc2sgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT4KLSBpbiB0aGUgYnl0ZSByZWFkZXIgZGF0YSwKLXN0YXJ0aW5nIGZyb20gb2Zmc2V0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vZmZzZXQ8L2NvZGU+PC9lbT4KLSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08cD5UaGUgYnl0ZXMgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdHRlcm48L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1hc2s8L2NvZGU+PC9lbT4KLSBhcmUgaW50ZXJwcmV0ZWQgbGVmdC10by1yaWdodCwgcmVnYXJkbGVzcwotb2YgZW5kaWFubmVzcy4gIEFsbCBmb3VyIGJ5dGVzIG9mIHRoZSBwYXR0ZXJuIG11c3QgYmUgcHJlc2VudCBpbiB0aGUKLWJ5dGUgcmVhZGVyIGRhdGEgZm9yIGl0IHRvIG1hdGNoLCBldmVuIGlmIHRoZSBmaXJzdCBvciBsYXN0IGJ5dGVzIGFyZSBtYXNrZWQKLW91dC48L3A+Ci08cD5JdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZXJlIGlzCi1lbm91Z2ggZGF0YSAob2Zmc2V0K3NpemUgYnl0ZXMpIGluIHRoZSBieXRlIHJlYWRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItbWFza2VkLXNjYW4tdWludDMyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYXNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bWFzayB0byBhcHBseSB0byBkYXRhIGJlZm9yZSBtYXRjaGluZyBhZ2FpbnN0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wYXR0ZXJuPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGF0dGVybjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBhdHRlcm4gdG8gbWF0Y2ggKGFmdGVyIG1hc2sgaXMgYXBwbGllZCk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b2Zmc2V0IGZyb20gd2hpY2ggdG8gc3RhcnQgc2Nhbm5pbmcsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50Ci1wb3NpdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGJ5dGVzIHRvIHNjYW4gZnJvbSBvZmZzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBvZmZzZXQgb2YgdGhlIGZpcnN0IG1hdGNoLCBvciAtMSBpZiBubyBtYXRjaCB3YXMgZm91bmQuPC9wPgotPHA+RXhhbXBsZTo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0vLyBBc3N1bWUgdGhlIHJlYWRlciBjb250YWlucyAweDAwIDB4MDEgMHgwMiAuLi4gMHhmZSAweGZmCi1nc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDAsIDI1Nik7Ci0vLyAtJmd0OyByZXR1cm5zIDAKLWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmZmZmZiwgMHgwMDAxMDIwMywgMSwgMjU1KTsKLS8vIC0mZ3Q7IHJldHVybnMgLTEKLWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmZmZmZiwgMHgwMTAyMDMwNCwgMSwgMjU1KTsKLS8vIC0mZ3Q7IHJldHVybnMgMQotZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAocmVhZGVyLCAweGZmZmYsIDB4MDAwMSwgMCwgMjU2KTsKLS8vIC0mZ3Q7IHJldHVybnMgLTEKLWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmLCAweDAyMDMsIDAsIDI1Nik7Ci0vLyAtJmd0OyByZXR1cm5zIDAKLWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmMDAwMCwgMHgwMjAzMDAwMCwgMCwgMjU2KTsKLS8vIC0mZ3Q7IHJldHVybnMgMgotZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAocmVhZGVyLCAweGZmZmYwMDAwLCAweDAyMDMwMDAwLCAwLCA0KTsKLS8vIC0mZ3Q7IHJldHVybnMgLTEKLTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlayI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IG1hc2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gcGF0dGVybjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gKnZhbHVlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNjYW4gZm9yIHBhdHRlcm4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhdHRlcm48L2NvZGU+PC9lbT4KLSB3aXRoIGFwcGxpZWQgbWFzayA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPgotIGluIHRoZSBieXRlIHJlYWRlciBkYXRhLAotc3RhcnRpbmcgZnJvbSBvZmZzZXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9mZnNldDwvY29kZT48L2VtPgotIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxwPlRoZSBieXRlcyBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFzazwvY29kZT48L2VtPgotIGFyZSBpbnRlcnByZXRlZCBsZWZ0LXRvLXJpZ2h0LCByZWdhcmRsZXNzCi1vZiBlbmRpYW5uZXNzLiAgQWxsIGZvdXIgYnl0ZXMgb2YgdGhlIHBhdHRlcm4gbXVzdCBiZSBwcmVzZW50IGluIHRoZQotYnl0ZSByZWFkZXIgZGF0YSBmb3IgaXQgdG8gbWF0Y2gsIGV2ZW4gaWYgdGhlIGZpcnN0IG9yIGxhc3QgYnl0ZXMgYXJlIG1hc2tlZAotb3V0LjwvcD4KLTxwPkl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRob3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlcmUgaXMKLWVub3VnaCBkYXRhIChvZmZzZXQrc2l6ZSBieXRlcykgaW4gdGhlIGJ5dGUgcmVhZGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bWFzazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm1hc2sgdG8gYXBwbHkgdG8gZGF0YSBiZWZvcmUgbWF0Y2hpbmcgYWdhaW5zdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGF0dGVybjwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhdHRlcm48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYXR0ZXJuIHRvIG1hdGNoIChhZnRlciBtYXNrIGlzIGFwcGxpZWQpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm9mZnNldCBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNjYW5uaW5nLCByZWxhdGl2ZSB0byB0aGUgY3VycmVudAotcG9zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBieXRlcyB0byBzY2FuIGZyb20gb2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byB1aW50MzIgdG8gcmV0dXJuIG1hdGNoaW5nIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlay5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IG9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2gsIG9yIC0xIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmciPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZyhyZWFkZXIsc3RyKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXN0cmluZy11dGY4Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKipzdHI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcwotYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUganVzdCBhIE5VTCB0ZXJtaW5hdG9yKSwKLWFkdmFuY2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yawotZm9yIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAotVVRGLTgsIElTTy04ODU5LU4gZXRjLjwvcD4KLTxwPk5vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtOCBpcyBkb25lLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXN0cmluZy11dGY4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRkcmVzcyBvZiBhCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmctdXRmOC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhIHN0cmluZyBjb3VsZCBiZSBmb3VuZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmciPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nKHJlYWRlcixzdHIpPC9wcmU+Ci08cD5SZXR1cm5zIGEgY29uc3RhbnQgcG9pbnRlciB0byB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uIGlmIHRoZXJlIGlzCi1hIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBpbiB0aGUgZGF0YSAodGhpcyBjb3VsZCBiZSBqdXN0IGEgTlVMIHRlcm1pbmF0b3IpLgotVGhlIGN1cnJlbnQgcG9zaXRpb24gd2lsbCBiZSBtYWludGFpbmVkLiBUaGlzIHdpbGwgd29yayBmb3IgYW55Ci1OVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAotVVRGLTgsIElTTy04ODU5LU4gZXRjLjwvcD4KLTxwPlRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhZGRyZXNzIG9mIGEKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IHBvaW50ZXIgdmFyaWFibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmctdXRmOCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoqc3RyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgYSBjb25zdGFudCBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGRhdGEgcG9zaXRpb24gaWYgdGhlcmUgaXMKLWEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHRoZSBkYXRhICh0aGlzIGNvdWxkIGJlIGp1c3QgYSBOVUwgdGVybWluYXRvcikuCi1UaGUgY3VycmVudCBwb3NpdGlvbiB3aWxsIGJlIG1haW50YWluZWQuIFRoaXMgd2lsbCB3b3JrIGZvciBhbnkKLU5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIGEgY2hhcmFjdGVyIHdpZHRoIG9mIDggYml0cywgc28gQVNDSUksCi1VVEYtOCwgSVNPLTg4NTktTiBldGMuPC9wPgotPHA+Tm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi04IGlzIGRvbmUuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLXN0cmluZy11dGY4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYWRkcmVzcyBvZiBhCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstc3RyaW5nLXV0ZjgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZyI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nKHJlYWRlcixzdHIpPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjgiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmOMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmOCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqKnN0cjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnX2ZyZWU8L3A+Ci08cD5GSVhNRTpSZWFkcyAoY29waWVzKSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSwKLWFkdmFuY2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yawotZm9yIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAotVVRGLTgsIElTTy04ODU5LU4gZXRjLiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTggaXMgZG9uZS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmOC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGFkZHJlc3Mgb2YgYQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgcmVhZCBpbnRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHI8L2NvZGU+PC9lbT4KLSwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLiBUaGUKLXN0cmluZyBwdXQgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyPC9jb2RlPjwvZW0+Ci1tdXN0IGJlIGZyZWVkIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjE2Ij48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQxNjwvc3Bhbj48L2E+ICoqc3RyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZyZWUtZnVuY3Rpb246IGdfZnJlZTwvcD4KLTxwPlJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgY29weSBvZiB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uIGlmIHRoZXJlIGlzCi1hIE5VTC10ZXJtaW5hdGVkIFVURi0xNiBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUgYW4gZW1wdHkgc3RyaW5nCi1hcyB3ZWxsKSwgYW5kIGFkdmFuY2VzIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxwPk5vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtMTYgaXMgZG9uZS4gVGhpcyBmdW5jdGlvbiBpcyBlbmRpYW5uZXNzCi1hZ25vc3RpYyAtIHlvdSBzaG91bGQgbm90IGFzc3VtZSB0aGUgVVRGLTE2IGNoYXJhY3RlcnMgYXJlIGluIGhvc3QKLWVuZGlhbm5lc3MuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLjwvcD4KLTxwPk5vdGU6IHRoZXJlIGlzIG5vIHBlZWsgb3IgZ2V0IHZhcmlhbnQgb2YgdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgY29ycmVjdAotYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIFVURi0xNiBzdHJpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmMTYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhZGRyZXNzIG9mIGEKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmMTYucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgcmVhZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLiBUaGUKLXN0cmluZyBwdXQgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyPC9jb2RlPjwvZW0+Ci1tdXN0IGJlIGZyZWVkIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjMyIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICoqc3RyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZyZWUtZnVuY3Rpb246IGdfZnJlZTwvcD4KLTxwPlJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgY29weSBvZiB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uIGlmIHRoZXJlIGlzCi1hIE5VTC10ZXJtaW5hdGVkIFVURi0zMiBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUgYW4gZW1wdHkgc3RyaW5nCi1hcyB3ZWxsKSwgYW5kIGFkdmFuY2VzIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxwPk5vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtMzIgaXMgZG9uZS4gVGhpcyBmdW5jdGlvbiBpcyBlbmRpYW5uZXNzCi1hZ25vc3RpYyAtIHlvdSBzaG91bGQgbm90IGFzc3VtZSB0aGUgVVRGLTMyIGNoYXJhY3RlcnMgYXJlIGluIGhvc3QKLWVuZGlhbm5lc3MuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLjwvcD4KLTxwPk5vdGU6IHRoZXJlIGlzIG5vIHBlZWsgb3IgZ2V0IHZhcmlhbnQgb2YgdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgY29ycmVjdAotYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIFVURi0zMiBzdHJpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmMzIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhZGRyZXNzIG9mIGEKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgcmV0dXJuaW5nIHJlc3VsdHMuIERlZmF1bHQgaXMgdHJhbnNmZXIgZnVsbC4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5vdXQ8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiB6ZXJvLXRlcm1pbmF0ZWQ9MV08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmMzIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgcmVhZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLiBUaGUKLXN0cmluZyBwdXQgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3RyPC9jb2RlPjwvZW0+Ci1tdXN0IGJlIGZyZWVkIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZyI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcocmVhZGVyKTwvcHJlPgotPHA+U2tpcHMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UsIGFkdmFuY2luZwotdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy4gVGhpcyB3aWxsIHdvcmsgZm9yCi1hbnkgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKLVVURi04LCBJU08tODg1OS1OIGV0Yy48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmOCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2tpcHMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UsIGFkdmFuY2luZwotdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy4gVGhpcyB3aWxsIHdvcmsgZm9yCi1hbnkgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKLVVURi04LCBJU08tODg1OS1OIGV0Yy4gTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi04IGlzIGRvbmUuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZy11dGY4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmOC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhIHN0cmluZyBjb3VsZCBiZSBza2lwcGVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBvdGhlcndpc2UuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZy11dGYxNiI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Ta2lwcyBhIE5VTC10ZXJtaW5hdGVkIFVURi0xNiBzdHJpbmcgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UsCi1hZHZhbmNpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy48L3A+Ci08cD5ObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTE2IGlzIGRvbmUuPC9wPgotPHA+VGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZy11dGYxNi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjE2LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIGEgc3RyaW5nIGNvdWxkIGJlIHNraXBwZWQsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG90aGVyd2lzZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjMyIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNraXBzIGEgTlVMLXRlcm1pbmF0ZWQgVVRGLTMyIHN0cmluZyBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSwKLWFkdmFuY2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLjwvcD4KLTxwPk5vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtMzIgaXMgZG9uZS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjMyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMzIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gb3RoZXJ3aXNlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItc2tpcC11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbmJ5dGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNraXBzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYnl0ZXM8L2NvZGU+PC9lbT4KLSBieXRlcyBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSB3aXRob3V0IGNoZWNraW5nIGlmCi10aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXNraXAtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYnl0ZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4LXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50ODwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gc2lnbmVkIDggYml0IGludGVnZXIgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzCi1hdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4LXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4LXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNpZ25lZCA4IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQxNjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi1jdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtYmUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNpZ25lZCAxNiBiaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MTY8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZS11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBzaWduZWQgMTYgYml0IGludGVnZXIuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLWN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBnaW50MzIpPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLWN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBnaW50MzIpPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLWN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMzIgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi1jdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNpZ25lZCAzMiBiaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50NjQ8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1iZS11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBzaWduZWQgNjQgYml0IGludGVnZXIuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDY0PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLWN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ4LXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGFuIHVuc2lnbmVkIDggYml0IGludGVnZXIgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzCi1hdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OC11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDgtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdW5zaWduZWQgOCBiaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDE2PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMTYgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi1jdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdW5zaWduZWQgMTYgYml0IGludGVnZXIuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLWN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1iZS11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ3VpbnQzMik8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDMyPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi1jdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtbGUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdW5zaWduZWQgMjQgYml0IGludGVnZXIgKGFzIGd1aW50MzIpPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50MzI8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLWN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1sZS11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDY0PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi1jdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdW5zaWduZWQgNjQgYml0IGludGVnZXIuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4LXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDg8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OF91bmNoZWNrZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiBzaWduZWQgOCBiaXQgaW50ZWdlciB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMKLWF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZSB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDgtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ4LXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNpZ25lZCA4IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDE2PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKLXRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDE2PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKLXRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtbGUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDMyPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSBzaWduZWQgMjQgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKLXRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBnaW50MzIpPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50MzI8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZS11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBzaWduZWQgMjQgYml0IGludGVnZXIgKGFzIGdpbnQzMik8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi10aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNpZ25lZCAzMiBiaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi10aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNpZ25lZCAzMiBiaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi10aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNpZ25lZCA2NCBiaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLWlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi10aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHNpZ25lZCA2NCBiaXQgaW50ZWdlci48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4X3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcwotYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDgtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50OC11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQxNjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBndWludDMyKTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBndWludDMyKTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQzMjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi1pZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZmxvYXQ8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSAzMiBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAotZGF0YSBhdmFpbGFibGUgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZmxvYXQ8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSAzMiBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAotZGF0YSBhdmFpbGFibGUgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCi1kYXRhIGF2YWlsYWJsZSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdkb3VibGU8L3NwYW4+PC9hPgotZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSA2NCBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAotZGF0YSBhdmFpbGFibGUgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtYmUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Zsb2F0PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDMyIGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCi1kYXRhIGF2YWlsYWJsZSwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItbGUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdmbG9hdDwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSAzMiBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAotZGF0YSBhdmFpbGFibGUsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWJlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2RvdWJsZTwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlYWQgYSA2NCBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAotZGF0YSBhdmFpbGFibGUsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZWFkZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWxlLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nZG91YmxlPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+ICpyZWFkZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVhZCBhIDY0IGJpdCBiaWcgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCi1kYXRhIGF2YWlsYWJsZSwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1kdXAtZGF0YS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi1nc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIG5ld2x5LWFsbG9jYXRlZCBjb3B5IG9mIHRoZSBkYXRhIGF0IHRoZSBjdXJyZW50IGRhdGEgcG9zaXRpb24KLXdpdGhvdXQgY2hlY2tpbmcgaWYgYXQgbGVhc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBhcmUgbGVmdC4gQWR2YW5jZXMgdGhlIGN1cnJlbnQgcmVhZAotcG9zaXRpb24gYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcy48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnX2ZyZWU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZHVwLWRhdGEtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJlYWRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U2l6ZSBpbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLWR1cC1kYXRhLXVuY2hlY2tlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlCi1kYXRhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci1ieXRlcyBpbiBzaXplLiBGcmVlIHdpdGggPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPiBsZW5ndGg9c2l6ZV08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZGF0YS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVSZWFkZXI8L3NwYW4+PC9hPiAqcmVhZGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiB3aXRob3V0IGNoZWNraW5nCi1pZiBhdCBsZWFzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIGFyZSBsZWZ0LiBBZHZhbmNlcyB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5Ci08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXJlYWRlci1nZXQtZGF0YS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5TaXplIGluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItZ2V0LWRhdGEtdW5jaGVja2VkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBjb25zdGFudCBwb2ludGVyIHRvIHRoZQotY3VycmVudCBkYXRhIHBvc2l0aW9uLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPXNpemVdPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1kYXRhLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi1nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX3VuY2hlY2tlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT4gKnJlYWRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS1yZWFkZXItcGVlay1kYXRhLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVhZGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZGF0YS11bmNoZWNrZWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RCeXRlUmVhZGVyIj48L2E+PGgzPkdzdEJ5dGVSZWFkZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICBndWludCBzaXplOwotCi0gIGd1aW50IGJ5dGU7ICAvKiBCeXRlIHBvc2l0aW9uICovCi19IEdzdEJ5dGVSZWFkZXI7Ci08L3ByZT4KLTxwPkEgYnl0ZSByZWFkZXIgaW5zdGFuY2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0Qnl0ZVJlYWRlci5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+Y29uc3TCoDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCeXRlUmVhZGVyLmRhdGEiPjwvYT5kYXRhPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD4gRGF0YSBmcm9tIHdoaWNoIHRoZSBiaXQgcmVhZGVyIHdpbGwKLXJlYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gbGVuZ3RoPXNpemVdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCeXRlUmVhZGVyLnNpemUiPjwvYT5zaXplPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci1pbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCeXRlUmVhZGVyLmJ5dGUiPjwvYT5ieXRlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5DdXJyZW50IGJ5dGUgcG9zaXRpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzlhYjdkLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwNTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdEJ5dGVXcml0ZXI6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLnRvcF9vZl9wYWdlIj48L2E+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2gyPgotPHA+R3N0Qnl0ZVdyaXRlciDigJQgV3JpdGVzIGRpZmZlcmVudCBpbnRlZ2VyLCBzdHJpbmcgYW5kIGZsb2F0aW5nIHBvaW50Ci0gICAgdHlwZXMgdG8gYSBtZW1vcnkgYnVmZmVyIGFuZCBhbGxvd3MgcmVhZGluZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLW5ldyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9uZXfCoCgpIj5nc3RfYnl0ZV93cml0ZXJfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX25ld193aXRoX2RhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1uZXctd2l0aC1zaXplIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9pbml0wqAoKSI+Z3N0X2J5dGVfd3JpdGVyX2luaXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1kYXRhIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1pbml0LXdpdGgtc2l6ZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZnJlZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX2ZyZWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZnJlZS1hbmQtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfYnVmZmVywqAoKSI+Z3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcmVzZXQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcmVzZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlcsKgKCkiPmdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtcG9zIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3PCoCgpIj5nc3RfYnl0ZV93cml0ZXJfZ2V0X3BvczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1zZXQtcG9zIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3PCoCgpIj5nc3RfYnl0ZV93cml0ZXJfc2V0X3BvczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtcmVtYWluaW5nIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmfCoCgpIj5nc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1lbnN1cmUtZnJlZS1zcGFjZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50OCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50ODwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDgiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4wqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50ODwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjE2IiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTbCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYxNjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjMyIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzLCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYzMjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4wqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmODwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1maWxsIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2ZpbGzCoCgpIj5nc3RfYnl0ZV93cml0ZXJfZmlsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtYnVmZmVyIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXLCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2J1ZmZlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWJ1ZmZlci11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2J1ZmZlcl91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2J1ZmZlcl91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ4LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OF91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDhfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfdW5jaGVja2VkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZGF0YS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZmlsbC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZmlsbF91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfZmlsbF91bmNoZWNrZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBwcm92aWRlcyBhIGJ5dGUgd3JpdGVyIGFuZCByZWFkZXIgdGhhdCBjYW4gd3JpdGUvcmVhZCBkaWZmZXJlbnQKLWludGVnZXIgYW5kIGZsb2F0aW5nIHBvaW50IHR5cGVzIHRvL2Zyb20gYSBtZW1vcnkgYnVmZmVyLiBJdCBwcm92aWRlcyBmdW5jdGlvbnMKLWZvciB3cml0aW5nL3JlYWRpbmcgc2lnbmVkL3Vuc2lnbmVkLCBsaXR0bGUvYmlnIGVuZGlhbiBpbnRlZ2VycyBvZiA4LCAxNiwgMjQsCi0zMiBhbmQgNjQgYml0cyBhbmQgZnVuY3Rpb25zIGZvciByZWFkaW5nIGxpdHRsZS9iaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50cyBudW1iZXJzIG9mCi0zMiBhbmQgNjQgYml0cy4gSXQgYWxzbyBwcm92aWRlcyBmdW5jdGlvbnMgdG8gd3JpdGUvcmVhZCBOVUwtdGVybWluYXRlZCBzdHJpbmdzCi1pbiB2YXJpb3VzIGNoYXJhY3RlciBlbmNvZGluZ3MuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItbmV3Ij48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2J5dGVfd3JpdGVyX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3LCBlbXB0eSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2J5dGVfd3JpdGVyX2ZyZWU8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcsIGVtcHR5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1uZXctd2l0aC1kYXRhIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT7CoCoKLWdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiAqZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW5pdGlhbGl6ZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlIHdpdGggdGhlIGdpdmVuCi1tZW1vcnkgYXJlYS4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluaXRpYWxpemVkPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGl0IGlzIHBvc3NpYmxlIHRvCi1yZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBmcm9tIHRoZSBiZWdpbm5pbmcuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2J5dGVfd3JpdGVyX2ZyZWU8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TWVtb3J5IGFyZWEgZm9yIHdyaXRpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLWluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluaXRpYWxpemVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+SWYgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHRoZSBjb21wbGV0ZSBkYXRhIGNhbiBiZSByZWFkIGZyb20gdGhlIGJlZ2lubmluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLW5ldy13aXRoLWRhdGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtc2l6ZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+wqAqCi1nc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZpeGVkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbgotaW5pdGlhbCBkYXRhIHNpemUuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2J5dGVfd3JpdGVyX2ZyZWU8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItbmV3LXdpdGgtc2l6ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+SW5pdGlhbCBzaXplIG9mIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zml4ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5JZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gdGhlIGRhdGEgY2FuJ3QgYmUgcmVhbGxvY2F0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1uZXctd2l0aC1zaXplLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWluaXQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX2luaXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfaW5pdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Jbml0aWFsaXplcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gdG8gYW4gZW1wdHkgaW5zdGFuY2U8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItaW5pdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1kYXRhIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaW5pdGlhbGl6ZWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5pdGlhbGl6ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIHdpdGggdGhlIGdpdmVuCi1tZW1vcnkgYXJlYS4gSWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluaXRpYWxpemVkPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGl0IGlzIHBvc3NpYmxlIHRvCi1yZWFkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBmcm9tIHRoZSBiZWdpbm5pbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1kYXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBNZW1vcnkgYXJlYSBmb3Igd3JpdGluZy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci1pbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbml0aWFsaXplZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPklmIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB0aGUgY29tcGxldGUgZGF0YSBjYW4gYmUgcmVhZCBmcm9tIHRoZSBiZWdpbm5pbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1zaXplIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBmaXhlZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Jbml0aWFsaXplcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aCB0aGUgZ2l2ZW4gaW5pdGlhbCBkYXRhIHNpemUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1zaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkluaXRpYWwgc2l6ZSBvZiBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZpeGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+SWYgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHRoZSBkYXRhIGNhbid0IGJlIHJlYWxsb2NhdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1mcmVlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX2ZyZWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnJlZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIGFuZCBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSBpdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZnJlZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZnJlZS1hbmQtZ2V0LWJ1ZmZlciI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnJlZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIGFuZCBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSBpdCBleGNlcHQKLXRoZSBjdXJyZW50IGRhdGEsIHdoaWNoIGlzIHJldHVybmVkIGFzIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZnJlZS1hbmQtZ2V0LWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWZyZWUtYW5kLWdldC1idWZmZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY3VycmVudCBkYXRhIGFzIGJ1ZmZlci4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNnc3QtYnVmZmVyLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9idWZmZXJfdW5yZWYoKTwvY29kZT48L2E+Ci1hZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWZyZWUtYW5kLWdldC1kYXRhIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi1nc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2RhdGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnJlZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIGFuZCBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSBpdCBleGNlcHQKLXRoZSBjdXJyZW50IGRhdGEsIHdoaWNoIGlzIHJldHVybmVkLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdfZnJlZTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2UuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWZyZWUtYW5kLWdldC1kYXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGN1cnJlbnQgZGF0YS4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVtb3J5LUFsbG9jYXRpb24uaHRtbCNnLWZyZWUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19mcmVlKCk8L2NvZGU+PC9hPiBhZnRlciB1c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0Ij48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9yZXNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9yZXNldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXNldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIGFuZCBmcmVlcyB0aGUgZGF0YSBpZiBpdCdzCi1vd25lZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcmVzZXQtYW5kLWdldC1kYXRhIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDg8L3NwYW4+PC9hPsKgKgotZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXNldHMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IGRhdGEuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ19mcmVlPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LWFuZC1nZXQtZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWRhdGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgY3VycmVudCBkYXRhLiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZW1vcnktQWxsb2NhdGlvbi5odG1sI2ctZnJlZSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nX2ZyZWUoKTwvY29kZT48L2E+IGFmdGVyCi11c2FnZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LWFuZC1nZXQtYnVmZmVyIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2J1ZmZlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfYnVmZmVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlc2V0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgZGF0YSBhcyBidWZmZXIuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1yZXNldC1hbmQtZ2V0LWJ1ZmZlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSBjdXJyZW50IGRhdGEgYXMgYnVmZmVyLiA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl91bnJlZigpPC9jb2RlPjwvYT4KLWFmdGVyIHVzYWdlLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZ2V0LXBvcyI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZ2V0X3Bvc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWdldC1wb3MucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZ2V0LXBvcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSByZWFkL3dyaXRlIGN1cnNvcjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItc2V0LXBvcyI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfc2V0X3Bvc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHBvczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBjdXJyZW50IHJlYWQvd3JpdGUgY3Vyc29yIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS4gVGhlIG5ldyBwb3NpdGlvbgotY2FuIG9ubHkgYmUgYmV0d2VlbiAwIGFuZCB0aGUgY3VycmVudCBzaXplLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1zZXQtcG9zLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmV3IHBvc2l0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItc2V0LXBvcy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgbmV3IHBvc2l0aW9uIGNvdWxkIGJlIHNldDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZ2V0LXJlbWFpbmluZyI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyB0aGUgcmVtYWluaW5nIHNpemUgb2YgZGF0YSB0aGF0IGNhbiBzdGlsbCBiZSB3cml0dGVuLiBJZgotLTEgaXMgcmV0dXJuZWQgdGhlIHJlbWFpbmluZyBzaXplIGlzIG9ubHkgbGltaXRlZCBieSBzeXN0ZW0gcmVzb3VyY2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1nZXQtcmVtYWluaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWdldC1yZW1haW5pbmcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgcmVtYWluaW5nIHNpemUgb2YgZGF0YSB0aGF0IGNhbiBzdGlsbCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1nZXQtc2l6ZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZ2V0LXNpemUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZ2V0LXNpemUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgY3VycmVudCwgaW5pdGlhbGl6ZWQgc2l6ZSBvZiB0aGUgZGF0YTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZW5zdXJlLWZyZWUtc3BhY2UiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2UgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoZWNrcyBpZiBlbm91Z2ggZnJlZSBzcGFjZSBmcm9tIHRoZSBjdXJyZW50IHdyaXRlIGN1cnNvciBpcwotYXZhaWxhYmxlIGFuZCByZWFsbG9jYXRlcyBpZiBuZWNlc3NhcnkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLWVuc3VyZS1mcmVlLXNwYWNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk51bWJlciBvZiBieXRlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1lbnN1cmUtZnJlZS1zcGFjZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhdCBsZWFzdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotYnl0ZXMgYXJlIHN0aWxsIGF2YWlsYWJsZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDgiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDg8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgc2lnbmVkIDggYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50OC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHVuc2lnbmVkIDggYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtYmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtbGUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1iZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1iZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1sZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtbGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItYmUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgYSB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1sZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtYmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtbGUiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIGJpZyBlbmRpYW4gMzIgYml0IGZsb2F0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItYmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWJlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1sZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIGxpdHRsZSBlbmRpYW4gMzIgYml0IGZsb2F0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWxlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1iZSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgYmlnIGVuZGlhbiA2NCBiaXQgZmxvYXQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1iZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWxlIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgYSBsaXR0bGUgZW5kaWFuIDY0IGJpdCBmbG9hdCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWxlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZyI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZygpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nKHdyaXRlciwgZGF0YSk8L3ByZT4KLTxwPldyaXRlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS4gVGhlCi1zdHJpbmcgaXMgYXNzdW1lZCB0byBiZSBpbiBhbiA4LWJpdCBlbmNvZGluZyAoZS5nLiBBU0NJSSxVVEYtOCBvcgotSVNPLTg4NTktMSkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IE51bGwgdGVybWluYXRlZCBzdHJpbmcuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgc3RyaW5nIGNvdWxkIGJlIHdyaXR0ZW48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmctdXRmMTYiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTbCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjE2ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgTlVMLXRlcm1pbmF0ZWQgVVRGMTYgc3RyaW5nIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGYxNi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVVRGMTYgc3RyaW5nIHRvIHdyaXRlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFycmF5PC9zcGFuPjwvYWNyb255bT4gemVyby10ZXJtaW5hdGVkPTFdPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjE2LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjMyIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjMywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYzMiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIE5VTC10ZXJtaW5hdGVkIFVURjMyIHN0cmluZyB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gKGluY2x1ZGluZyB0aGUgdGVybWluYXRvcikuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmctdXRmMzIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFVURjMyIHN0cmluZyB0byB3cml0ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGYzMi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGY4Ij48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjjCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgTlVMLXRlcm1pbmF0ZWQgVVRGOCBzdHJpbmcgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IFVURjggc3RyaW5nIHRvCi13cml0ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IHplcm8tdGVybWluYXRlZD0xXVs8YWNyb255bSB0aXRsZT0iT3ZlcnJpZGUgdGhlIHBhcnNlZCBDIHR5cGUgd2l0aCBnaXZlbiB0eXBlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnR5cGU8L3NwYW4+PC9hY3JvbnltPiB1dGY4XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGY4LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZGF0YSI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotIGJ5dGVzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0gdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gRGF0YSB0byB3cml0ZS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci1pbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1kYXRhLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1maWxsIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9maWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfZmlsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBjb250YWluaW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT52YWx1ZTwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZmlsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbHVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gYmUgd3JpdHRlbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+TnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1maWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtYnVmZmVyIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfYnVmZmVywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2J1ZmZlciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1idWZmZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gc291cmNlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2Zmc2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+b2Zmc2V0IHRvIGNvcHkgZnJvbTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dG90YWwgc2l6ZSB0byBjb3B5LiBJZiAtMSwgYWxsIGRhdGEgaXMgY29waWVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWJ1ZmZlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgZGF0YSBjb3VsZCBiZSB3cml0dGVuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtYnVmZmVyLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2J1ZmZlcl91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2J1ZmZlcl91bmNoZWNrZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc2l6ZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzaXplPC9zcGFuPjwvYT4gb2Zmc2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnc3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ4LXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDhfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDg8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQxNjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgYSBzaWduZWQgYmlnIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aG91dAotY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDE2Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgYSBzaWduZWQgbGl0dGxlIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aG91dAotY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgYSBzaWduZWQgYmlnIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aG91dAotY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OC11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgdW5zaWduZWQgOCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZQotaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ4LXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQxNiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MTY8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aG91dAotY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MTYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDE2PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQzMiI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50MzI8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aG91dAotY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1iZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50MzIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDMyPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItYmUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDMyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQzMjwvc3Bhbj48L2E+IHZhbDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgYSB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWxlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aG91dAotY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtbGUtdW5jaGVja2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndyaXRlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VmFsdWUgdG8gd3JpdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWJlLXVuY2hlY2tlZCI+PC9hPjxoMz5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlX3VuY2hlY2tlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB2YWw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIGEgYmlnIGVuZGlhbiAzMiBiaXQgZmxvYXQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndyaXRlcjwvY29kZT48L2VtPgotIHdpdGhvdXQKLWNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWJlLXVuY2hlY2tlZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53cml0ZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+IGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnZhbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIHdyaXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1sZS11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV91bmNoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlV3JpdGVyPC9zcGFuPjwvYT4gKndyaXRlcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIGxpdHRsZSBlbmRpYW4gMzIgYml0IGZsb2F0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIGJpZyBlbmRpYW4gNjQgYml0IGZsb2F0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtbGUtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfdW5jaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI0dzdEJ5dGVXcml0ZXIiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVdyaXRlcjwvc3Bhbj48L2E+ICp3cml0ZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gdmFsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldyaXRlcyBhIGxpdHRsZSBlbmRpYW4gNjQgYml0IGZsb2F0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5WYWx1ZSB0byB3cml0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItcHV0LWRhdGEtdW5jaGVja2VkIj48L2E+PGgzPmdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Xcml0ZXMgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLSBieXRlcyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZGF0YTwvY29kZT48L2VtPgotIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT53cml0ZXI8L2NvZGU+PC9lbT4KLSB3aXRob3V0Ci1jaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1ieXRlLXdyaXRlci1wdXQtZGF0YS11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IERhdGEgdG8gd3JpdGUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIHBvaW50cyB0byBhbiBhcnJheSBvZiBpdGVtcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hcnJheTwvc3Bhbj48L2Fjcm9ueW0+IGxlbmd0aD1zaXplXTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5TaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci1pbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZmlsbC11bmNoZWNrZWQiPjwvYT48aDM+Z3N0X2J5dGVfd3JpdGVyX2ZpbGxfdW5jaGVja2VkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfdW5jaGVja2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiAqd3JpdGVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDg8L3NwYW4+PC9hPiB2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V3JpdGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zaXplPC9jb2RlPjwvZW0+Ci0gYnl0ZXMgY29udGFpbmluZyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+d3JpdGVyPC9jb2RlPjwvZW0+Ci0gd2l0aG91dAotY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnl0ZS13cml0ZXItZmlsbC11bmNoZWNrZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+d3JpdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNHc3RCeXRlV3JpdGVyIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ5dGVXcml0ZXI8L3NwYW4+PC9hPiBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlZhbHVlIHRvIGJlIHdyaXR0ZW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Qnl0ZVdyaXRlciI+PC9hPjxoMz5Hc3RCeXRlV3JpdGVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCB7Ci0gIEdzdEJ5dGVSZWFkZXIgcGFyZW50OwotCi0gIGd1aW50IGFsbG9jX3NpemU7Ci0KLSAgZ2Jvb2xlYW4gZml4ZWQ7Ci0gIGdib29sZWFuIG93bmVkOwotfSBHc3RCeXRlV3JpdGVyOwotPC9wcmU+Ci08cD5BIGJ5dGUgd3JpdGVyIGluc3RhbmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEJ5dGVXcml0ZXIubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjR3N0Qnl0ZVJlYWRlciIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCeXRlUmVhZGVyPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEJ5dGVXcml0ZXIucGFyZW50Ij48L2E+cGFyZW50PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI0dzdEJ5dGVSZWFkZXIiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Qnl0ZVJlYWRlcjwvc3Bhbj48L2E+IHBhcmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCeXRlV3JpdGVyLmFsbG9jLXNpemUiPjwvYT5hbGxvY19zaXplPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5BbGxvY2F0aW9uIHNpemUgb2YgdGhlIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0Qnl0ZVdyaXRlci5maXhlZCI+PC9hPmZpeGVkPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5JZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gbm8gcmVhbGxvY2F0aW9ucyBhcmUgYWxsb3dlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RCeXRlV3JpdGVyLm93bmVkIj48L2E+b3duZWQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPklmIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IG5vIHJlYWxsb2NhdGlvbnMgYXJlIGFsbG93ZWQgYW5kIGNvcGllcyBvZiBkYXRhIGFyZSByZXR1cm5lZDwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMxMTcxMS4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTk0OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0Q2hlY2s6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItY2hlY2suaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDaGVjayBVbml0IFRlc3RpbmciPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItY2hlY2suaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDaGVjayBVbml0IFRlc3RpbmciPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sIiB0aXRsZT0iR3N0QnVmZmVyU3RyYXciPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItY2hlY2suaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWNoZWNrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2sudG9wX29mX3BhZ2UiPjwvYT5Hc3RDaGVjazwvc3Bhbj48L2gyPgotPHA+R3N0Q2hlY2sg4oCUIENvbW1vbiBjb2RlIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0dTVC1TVEFSVC1URVNUOkNBUFMiIHRpdGxlPSJHU1RfU1RBUlRfVEVTVCgpIj5HU1RfU1RBUlRfVEVTVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1CVUZGRVItUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkFTU0VSVF9CVUZGRVJfUkVGQ09VTlQoKSI+QVNTRVJUX0JVRkZFUl9SRUZDT1VOVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1DQVBTLVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJBU1NFUlRfQ0FQU19SRUZDT1VOVCgpIj5BU1NFUlRfQ0FQU19SRUZDT1VOVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1DUklUSUNBTDpDQVBTIiB0aXRsZT0iQVNTRVJUX0NSSVRJQ0FMKCkiPkFTU0VSVF9DUklUSUNBTDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1XQVJOSU5HOkNBUFMiIHRpdGxlPSJBU1NFUlRfV0FSTklORygpIj5BU1NFUlRfV0FSTklORzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1NSU5JLU9CSkVDVC1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UKCkiPkFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQ6Q0FQUyIgdGl0bGU9IkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQoKSI+QVNTRVJUX09CSkVDVF9SRUZDT1VOVDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQtQkVUV0VFTjpDQVBTIiB0aXRsZT0iQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKCkiPkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1TRVQtU1RBVEU6Q0FQUyIgdGl0bGU9IkFTU0VSVF9TRVRfU1RBVEUoKSI+QVNTRVJUX1NFVF9TVEFURTwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1pbnQiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50KCkiPmZhaWxfdW5sZXNzX2VxdWFsc19pbnQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtZmxvYXQiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLXN0cmluZyIgdGl0bGU9ImZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy11aW50NjQiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfdWludDY0KCkiPmZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtaW50NjQiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50NjQoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludC1oZXgiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCgpIj5mYWlsX3VubGVzc19lcXVhbHNfaW50X2hleDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1pbnQ2NC1oZXgiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4KCkiPmZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXg8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNmYWlsLXVubGVzcy1lcXVhbHMtdWludDY0LWhleCIgdGl0bGU9ImZhaWxfdW5sZXNzX2VxdWFsc191aW50NjRfaGV4KCkiPmZhaWxfdW5sZXNzX2VxdWFsc191aW50NjRfaGV4PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLXBvaW50ZXIiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlcigpIj5mYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlcjwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLW1lc3NhZ2UtZXJyb3IiIHRpdGxlPSJmYWlsX3VubGVzc19tZXNzYWdlX2Vycm9yKCkiPmZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3I8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfaW50KCkiPmFzc2VydF9lcXVhbHNfaW50PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1mbG9hdCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfZmxvYXQoKSI+YXNzZXJ0X2VxdWFsc19mbG9hdDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtc3RyaW5nIiB0aXRsZT0iYXNzZXJ0X2VxdWFsc19zdHJpbmcoKSI+YXNzZXJ0X2VxdWFsc19zdHJpbmc8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLXVpbnQ2NCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfdWludDY0KCkiPmFzc2VydF9lcXVhbHNfdWludDY0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQ2NCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfaW50NjQoKSI+YXNzZXJ0X2VxdWFsc19pbnQ2NDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtaW50LWhleCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfaW50X2hleCgpIj5hc3NlcnRfZXF1YWxzX2ludF9oZXg8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludDY0LWhleCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfaW50NjRfaGV4KCkiPmFzc2VydF9lcXVhbHNfaW50NjRfaGV4PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy11aW50NjQtaGV4IiB0aXRsZT0iYXNzZXJ0X2VxdWFsc191aW50NjRfaGV4KCkiPmFzc2VydF9lcXVhbHNfdWludDY0X2hleDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2Fzc2VydC1lcXVhbHMtcG9pbnRlciIgdGl0bGU9ImFzc2VydF9lcXVhbHNfcG9pbnRlcigpIj5hc3NlcnRfZXF1YWxzX3BvaW50ZXI8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtbWVzc2FnZS1lcnJvciIgdGl0bGU9ImFzc2VydF9tZXNzYWdlX2Vycm9yKCkiPmFzc2VydF9tZXNzYWdlX2Vycm9yPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWluaXQiIHRpdGxlPSJnc3RfY2hlY2tfaW5pdMKgKCkiPmdzdF9jaGVja19pbml0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stbWVzc2FnZS1lcnJvciIgdGl0bGU9ImdzdF9jaGVja19tZXNzYWdlX2Vycm9ywqAoKSI+Z3N0X2NoZWNrX21lc3NhZ2VfZXJyb3I8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWVsZW1lbnQiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfZWxlbWVudMKgKCkiPmdzdF9jaGVja19zZXR1cF9lbGVtZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zaW5rLXBhZCIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zaW5rX3BhZMKgKCkiPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZCIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zcmNfcGFkwqAoKSI+Z3N0X2NoZWNrX3NldHVwX3NyY19wYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkLWJ5LW5hbWUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZcKgKCkiPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWJ5LW5hbWUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lwqAoKSI+Z3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLXBhZC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lwqAoKSI+Z3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tZWxlbWVudCIgdGl0bGU9ImdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50wqAoKSI+Z3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay10ZWFyZG93bi1zaW5rLXBhZCIgdGl0bGU9ImdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZMKgKCkiPmdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLXNyYy1wYWQiIHRpdGxlPSJnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZMKgKCkiPmdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZHJvcC1idWZmZXJzIiB0aXRsZT0iZ3N0X2NoZWNrX2Ryb3BfYnVmZmVyc8KgKCkiPmdzdF9jaGVja19kcm9wX2J1ZmZlcnM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1idWZmZXItZGF0YSIgdGl0bGU9ImdzdF9jaGVja19idWZmZXJfZGF0YcKgKCkiPmdzdF9jaGVja19idWZmZXJfZGF0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWNhcHMtZXF1YWwiIHRpdGxlPSJnc3RfY2hlY2tfY2Fwc19lcXVhbMKgKCkiPmdzdF9jaGVja19jYXBzX2VxdWFsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlci1saXN0IiB0aXRsZT0iZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdMKgKCkiPmdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1lbGVtZW50LXB1c2gtYnVmZmVyIiB0aXRsZT0iZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXLCoCgpIj5nc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5naW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXJ1bi1zdWl0ZSIgdGl0bGU9ImdzdF9jaGVja19ydW5fc3VpdGXCoCgpIj5nc3RfY2hlY2tfcnVuX3N1aXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtZXZlbnRzIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX2V2ZW50c8KgKCkiPmdzdF9jaGVja19zZXR1cF9ldmVudHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1ldmVudHMtd2l0aC1zdHJlYW0taWQiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkwqAoKSI+Z3N0X2NoZWNrX3NldHVwX2V2ZW50c193aXRoX3N0cmVhbV9pZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtYnktbmFtZS1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkLWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9mcm9tX3RlbXBsYXRlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWJ5LW5hbWUtZnJvbS10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1mcm9tLXRlbXBsYXRlIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2Zyb21fdGVtcGxhdGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1vYmplY3RzLWRlc3Ryb3llZC1vbi11bnJlZiIgdGl0bGU9ImdzdF9jaGVja19vYmplY3RzX2Rlc3Ryb3llZF9vbl91bnJlZsKgKCkiPmdzdF9jaGVja19vYmplY3RzX2Rlc3Ryb3llZF9vbl91bnJlZjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLW9iamVjdC1kZXN0cm95ZWQtb24tdW5yZWYiIHRpdGxlPSJnc3RfY2hlY2tfb2JqZWN0X2Rlc3Ryb3llZF9vbl91bnJlZsKgKCkiPmdzdF9jaGVja19vYmplY3RfZGVzdHJveWVkX29uX3VucmVmPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2sub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0dTVC1FTkQtVEVTVDpDQVBTIiB0aXRsZT0iR1NUX0VORF9URVNUIj5HU1RfRU5EX1RFU1Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2NoZWNrL2dzdGNoZWNrLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlc2UgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb2YgdGhlIHVuaXQgdGVzdHMgZm91bmQKLWluc2lkZSB0aGUgJ2NoZWNrJyBkaXJlY3RvcmllcyBvZiB2YXJpb3VzIEdTdHJlYW1lciBwYWNrYWdlcy48L3A+Ci08cD5PbmUgbm90YWJsZSBmZWF0dXJlIGlzIHRoYXQgb25lIGNhbiB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHU1RfQ0hFQ0tTCi1hbmQgR1NUX0NIRUNLU19JR05PUkUgdG8gc2VsZWN0IHdoaWNoIHRlc3RzIHRvIHJ1biBvciBza2lwLiBCb3RoIHZhcmlhYmxlcwotY2FuIGNvbnRhaW4gYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB0ZXN0IG5hbWUgZ2xvYnMgKGUuZy4gdGVzdF8qKS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtU1RBUlQtVEVTVDpDQVBTIj48L2E+PGgzPkdTVF9TVEFSVF9URVNUKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX1NUQVJUX1RFU1QoX190ZXN0bmFtZSk8L3ByZT4KLTxwPndyYXBwZXIgZm9yIGNoZWNrcyBTVEFSVF9URVNUPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR1NULVNUQVJULVRFU1QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPl9fdGVzdG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50ZXN0IGZ1bmN0aW9uIG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkFTU0VSVC1CVUZGRVItUkVGQ09VTlQ6Q0FQUyI+PC9hPjxoMz5BU1NFUlRfQlVGRkVSX1JFRkNPVU5UKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVChidWZmZXIsIG5hbWUsIHZhbHVlKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJBU1NFUlQtQ0FQUy1SRUZDT1VOVDpDQVBTIj48L2E+PGgzPkFTU0VSVF9DQVBTX1JFRkNPVU5UKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX0NBUFNfUkVGQ09VTlQoY2FwcywgbmFtZSwgdmFsdWUpPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkFTU0VSVC1DUklUSUNBTDpDQVBTIj48L2E+PGgzPkFTU0VSVF9DUklUSUNBTCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEFTU0VSVF9DUklUSUNBTChjb2RlKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJBU1NFUlQtV0FSTklORzpDQVBTIj48L2E+PGgzPkFTU0VSVF9XQVJOSU5HKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX1dBUk5JTkcoY29kZSk8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iQVNTRVJULU1JTkktT0JKRUNULVJFRkNPVU5UOkNBUFMiPjwvYT48aDM+QVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UKG1pbmlvYmosIG5hbWUsIHZhbHVlKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJBU1NFUlQtT0JKRUNULVJFRkNPVU5UOkNBUFMiPjwvYT48aDM+QVNTRVJUX09CSkVDVF9SRUZDT1VOVCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQob2JqZWN0LCBuYW1lLCB2YWx1ZSk8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iQVNTRVJULU9CSkVDVC1SRUZDT1VOVC1CRVRXRUVOOkNBUFMiPjwvYT48aDM+QVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKG9iamVjdCwgbmFtZSwgbG93ZXIsIHVwcGVyKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJBU1NFUlQtU0VULVNUQVRFOkNBUFMiPjwvYT48aDM+QVNTRVJUX1NFVF9TVEFURSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIEFTU0VSVF9TRVRfU1RBVEUoZWxlbWVudCwgc3RhdGUsIHJldCk8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLWludCI+PC9hPjxoMz5mYWlsX3VubGVzc19lcXVhbHNfaW50KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludChhLCBiKTwvcHJlPgotPHA+VGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcwotbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImZhaWwtdW5sZXNzLWVxdWFscy1pbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLWZsb2F0Ij48L2E+PGgzPmZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdChhLCBiKTwvcHJlPgotPHA+VGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGFyZSAoYWxtb3N0KSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMKLWlzIG5vdCB0aGUgY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZAotdG8uIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImZhaWwtdW5sZXNzLWVxdWFscy1mbG9hdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLXN0cmluZyI+PC9hPjxoMz5mYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyhhLCBiKTwvcHJlPgotPHA+VGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGFyZSBlcXVhbCAoYXMgcGVyIHN0cmNtcCkgYW5kIGFib3J0cyBpZgotdGhpcyBpcyBub3QgdGhlIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleQotZXZhbHVhdGVkIHRvLiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJmYWlsLXVubGVzcy1lcXVhbHMtc3RyaW5nLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHN0cmluZyBsaXRlcmFsIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc3RyaW5nIGxpdGVyYWwgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJmYWlsLXVubGVzcy1lcXVhbHMtdWludDY0Ij48L2E+PGgzPmZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0KGEsIGIpPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCi1jYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvLiBUaGlzCi1tYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLXVpbnQ2NC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJmYWlsLXVubGVzcy1lcXVhbHMtaW50NjQiPjwvYT48aDM+ZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0KGEsIGIpPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCi1jYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvLiBUaGlzCi1tYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLWludDY0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLWludC1oZXgiPjwvYT48aDM+ZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXgoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleChhLCBiKTwvcHJlPgotPHA+VGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0byBpbgotaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJmYWlsLXVubGVzcy1lcXVhbHMtaW50LWhleC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJmYWlsLXVubGVzcy1lcXVhbHMtaW50NjQtaGV4Ij48L2E+PGgzPmZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXgoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4KGEsIGIpPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCi1jYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvIGluCi1oZXhhZGVjaW1hbCBmb3JtYXQuIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImZhaWwtdW5sZXNzLWVxdWFscy1pbnQ2NC1oZXgucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJmYWlsLXVubGVzcy1lcXVhbHMtdWludDY0LWhleCI+PC9hPjxoMz5mYWlsX3VubGVzc19lcXVhbHNfdWludDY0X2hleCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjRfaGV4KGEsIGIpPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCi1jYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvIGluCi1oZXhhZGVjaW1hbCBmb3JtYXQuIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImZhaWwtdW5sZXNzLWVxdWFscy11aW50NjQtaGV4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZmFpbC11bmxlc3MtZXF1YWxzLXBvaW50ZXIiPjwvYT48aDM+ZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlcihhLCBiKTwvcHJlPgotPHA+VGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMKLWlzIG5vdCB0aGUgY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5Ci1ldmFsdWF0ZWQgdG8uIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImZhaWwtdW5sZXNzLWVxdWFscy1wb2ludGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIHBvaW50ZXIgdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwb2ludGVyIHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZmFpbC11bmxlc3MtbWVzc2FnZS1lcnJvciI+PC9hPjxoMz5mYWlsX3VubGVzc19tZXNzYWdlX2Vycm9yKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcihtc2csIGRvbWFpbiwgY29kZSk8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy1pbnQiPjwvYT48aDM+YXNzZXJ0X2VxdWFsc19pbnQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBhc3NlcnRfZXF1YWxzX2ludChhLCBiKSBmYWlsX3VubGVzc19lcXVhbHNfaW50KGEsIGIpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT4KLSBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKLWNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8uIFRoaXMKLW1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJhc3NlcnQtZXF1YWxzLWludC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJhc3NlcnQtZXF1YWxzLWZsb2F0Ij48L2E+PGgzPmFzc2VydF9lcXVhbHNfZmxvYXQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBhc3NlcnRfZXF1YWxzX2Zsb2F0KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdChhLCBiKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXJlIChhbG1vc3QpIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcwotaXMgbm90IHRoZSBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkCi10by4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy1mbG9hdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy1zdHJpbmciPjwvYT48aDM+YXNzZXJ0X2VxdWFsc19zdHJpbmcoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBhc3NlcnRfZXF1YWxzX3N0cmluZyhhLCBiKSBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nKGEsIGIpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT4KLSBhcmUgZXF1YWwgKGFzIHBlciBzdHJjbXApIGFuZCBhYm9ydHMgaWYKLXRoaXMgaXMgbm90IHRoZSBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkKLWV2YWx1YXRlZCB0by4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy1zdHJpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgc3RyaW5nIGxpdGVyYWwgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBzdHJpbmcgbGl0ZXJhbCBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImFzc2VydC1lcXVhbHMtdWludDY0Ij48L2E+PGgzPmFzc2VydF9lcXVhbHNfdWludDY0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgYXNzZXJ0X2VxdWFsc191aW50NjQoYSwgYikgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NChhLCBiKQotPC9wcmU+Ci08cD5UaGlzIG1hY3JvIGNoZWNrcyB0aGF0IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hPC9jb2RlPjwvZW0+Ci0gYW5kIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5iPC9jb2RlPjwvZW0+Ci0gYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCi1jYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvLiBUaGlzCi1tYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy11aW50NjQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy1pbnQ2NCI+PC9hPjxoMz5hc3NlcnRfZXF1YWxzX2ludDY0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgYXNzZXJ0X2VxdWFsc19pbnQ2NChhLCBiKSBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQoYSwgYikKLTwvcHJlPgotPHA+VGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcwotbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImFzc2VydC1lcXVhbHMtaW50NjQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT4gdmFsdWUgb3IgZXhwcmVzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJhc3NlcnQtZXF1YWxzLWludC1oZXgiPjwvYT48aDM+YXNzZXJ0X2VxdWFsc19pbnRfaGV4KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgYXNzZXJ0X2VxdWFsc19pbnRfaGV4KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4KGEsIGIpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT4KLSBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKLWNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8gaW4KLWhleGFkZWNpbWFsIGZvcm1hdC4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy1pbnQtaGV4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImFzc2VydC1lcXVhbHMtaW50NjQtaGV4Ij48L2E+PGgzPmFzc2VydF9lcXVhbHNfaW50NjRfaGV4KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgYXNzZXJ0X2VxdWFsc19pbnQ2NF9oZXgoYSxiKSBmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4KGEsYikKLTwvcHJlPgotPHA+VGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0byBpbgotaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJhc3NlcnQtZXF1YWxzLWludDY0LWhleC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+IHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImFzc2VydC1lcXVhbHMtdWludDY0LWhleCI+PC9hPjxoMz5hc3NlcnRfZXF1YWxzX3VpbnQ2NF9oZXgoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBhc3NlcnRfZXF1YWxzX3VpbnQ2NF9oZXgoYSxiKSBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0X2hleChhLGIpCi08L3ByZT4KLTxwPlRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmI8L2NvZGU+PC9lbT4KLSBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKLWNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8gaW4KLWhleGFkZWNpbWFsIGZvcm1hdC4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iYXNzZXJ0LWVxdWFscy11aW50NjQtaGV4LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPiB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImFzc2VydC1lcXVhbHMtcG9pbnRlciI+PC9hPjxoMz5hc3NlcnRfZXF1YWxzX3BvaW50ZXIoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSBhc3NlcnRfZXF1YWxzX3BvaW50ZXIoYSwgYikgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIoYSwgYikKLTwvcHJlPgotPHA+VGhpcyBtYWNybyBjaGVja3MgdGhhdCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YjwvY29kZT48L2VtPgotIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMKLWlzIG5vdCB0aGUgY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5Ci1ldmFsdWF0ZWQgdG8uIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImFzc2VydC1lcXVhbHMtcG9pbnRlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBwb2ludGVyIHZhbHVlIG9yIGV4cHJlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgcG9pbnRlciB2YWx1ZSBvciBleHByZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImFzc2VydC1tZXNzYWdlLWVycm9yIj48L2E+PGgzPmFzc2VydF9tZXNzYWdlX2Vycm9yKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgYXNzZXJ0X21lc3NhZ2VfZXJyb3IobSwgZCwgYykgZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcihtLCBkLCBjKQotPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1pbml0Ij48L2E+PGgzPmdzdF9jaGVja19pbml0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NoZWNrX2luaXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+aW50PC9zcGFuPiAqYXJnYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPmNoYXI8L3NwYW4+ICoqYXJndltdPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLW1lc3NhZ2UtZXJyb3IiPjwvYT48aDM+Z3N0X2NoZWNrX21lc3NhZ2VfZXJyb3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hlY2tfbWVzc2FnZV9lcnJvciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdE1lc3NhZ2UuaHRtbCNHc3RNZXNzYWdlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1lc3NhZ2VUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItUXVhcmtzLmh0bWwjR1F1YXJrIj48c3BhbiBjbGFzcz0idHlwZSI+R1F1YXJrPC9zcGFuPjwvYT4gZG9tYWluPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gY29kZTwvY29kZT48L2VtPik7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1lbGVtZW50Ij48L2E+PGgzPmdzdF9jaGVja19zZXR1cF9lbGVtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi1nc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmYWN0b3J5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPnNldHVwIGFuIGVsZW1lbnQgZm9yIGEgZmlsdGVyIHRlc3Qgd2l0aCBteXNyY3BhZCBhbmQgbXlzaW5rcGFkPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLWVsZW1lbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZhY3Rvcnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5mYWN0b3J5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLWVsZW1lbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBlbGVtZW50LiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc2luay1wYWQiPjwvYT48aDM+Z3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRtcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RG9lcyB0aGUgc2FtZSBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtYnktbmFtZSIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lPC9zcGFuPjwvYT4gd2l0aCB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+IG5hbWUgPC9lbT48L3NwYW4+IHBhcmFtZXRlciBlcXVhbCB0byAic3JjIi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc2luay1wYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmVsZW1lbnQgdG8gc2V0dXAgcGFkIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYWQgdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IHBhZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoZSBvdXRwdXQgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQiPjwvYT48aDM+Z3N0X2NoZWNrX3NldHVwX3NyY19wYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLWdzdF9jaGVja19zZXR1cF9zcmNfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRtcGw8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RG9lcyB0aGUgc2FtZSBhcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZcKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lPC9zcGFuPjwvYT4gd2l0aCB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+IG5hbWUgPC9lbT48L3NwYW4+IHBhcmFtZXRlciBlcXVhbCB0byAic2luayIuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmVsZW1lbnQgdG8gc2V0dXAgcGFkIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYWQgdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zcmMtcGFkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSBuZXcgcGFkIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5qZWN0IGRhdGEgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkLWJ5LW5hbWUiPjwvYT48aDM+Z3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRtcGw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgc2luayBwYWQgKGJhc2VkIG9uIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dG1wbDwvY29kZT48L2VtPgotKSBhbmQgbGlua3MgaXQgdG8gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+Ci0gc3JjIHBhZAotKHRoZSBwYWQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotKS4KLVlvdSBjYW4gc2V0IGV2ZW50L2NoYWluL3F1ZXJ5IGZ1bmN0aW9ucyBvbiB0aGlzIHBhZCB0byBjaGVjayB0aGUgb3V0cHV0IG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1ieS1uYW1lLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5lbGVtZW50IHRvIHNldHVwIHBhZCBvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50bXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cGFkIHRlbXBsYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5OYW1lIG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPgotc3JjIHBhZCB0aGF0IHdpbGwgYmUgbGlua2VkIHRvIHRoZSBzaW5rIHBhZCB0aGF0IHdpbGwgYmUgc2V0dXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1ieS1uYW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgcGFkIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgdGhlIG91dHB1dCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPgotLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1ieS1uYW1lIj48L2E+PGgzPmdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLWdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICp0bXBsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgc3JjIHBhZCAoYmFzZWQgb24gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT50bXBsPC9jb2RlPjwvZW0+Ci0pIGFuZCBsaW5rcyBpdCB0byB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9lbT4KLSBzaW5rIHBhZCAodGhlIHBhZCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci0pLgotQmVmb3JlIHVzaW5nIHRoZSBzcmMgcGFkIHRvIHB1c2ggZGF0YSBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPgotIHlvdSBuZWVkIHRvIGNhbGwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWV2ZW50cyIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9ldmVudHPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X2NoZWNrX3NldHVwX2V2ZW50czwvc3Bhbj48L2E+IG9uIHRoZSBjcmVhdGVkIHNyYyBwYWQuPC9wPgotPHA+RXhhbXBsZSBvZiBob3cgdG8gcHVzaCBhIGJ1ZmZlciBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudDwvY29kZT48L2VtPgotOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTkKLTIwCi0yMQotMjIKLTIzCi0yNDwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnN0YXRpYzwvc3Bhbj4gR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCNHU1QtU1RBVElDLVBBRC1URU1QTEFURTpDQVBTIj5HU1RfU1RBVElDX1BBRF9URU1QTEFURTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3NpbmsmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci1HU1RfUEFEX1NJTks8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLUdTVF9QQURfQUxXQVlTPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUyI+R1NUX1NUQVRJQ19DQVBTPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+WU9VUl9DQVBTX1RFTVBMQVRFX1NUUklORzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnN0YXRpYzwvc3Bhbj4gR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dTVC1TVEFUSUMtUEFELVRFTVBMQVRFOkNBUFMiPkdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7c3JjJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotR1NUX1BBRF9TUkM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLUdTVF9QQURfQUxXQVlTPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dTVC1TVEFUSUMtQ0FQUyI+R1NUX1NUQVRJQ19DQVBTPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+WU9VUl9DQVBTX1RFTVBMQVRFX1NUUklORzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi1Hc3RFbGVtZW50IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBlbGVtZW50IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWVsZW1lbnQiPmdzdF9jaGVja19zZXR1cF9lbGVtZW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7ZWxlbWVudCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci1Hc3RQYWQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IG15c3JjcGFkIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQiPmdzdF9jaGVja19zZXR1cF9zcmNfcGFkPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZWxlbWVudDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPnNyY3RlbXBsYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotR3N0UGFkIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBteXNpbmtwYWQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQiPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmVsZW1lbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5zaW5rdGVtcGxhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNnc3QtcGFkLXNldC1hY3RpdmUiPmdzdF9wYWRfc2V0X2FjdGl2ZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm15c3JjcGFkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IFRSVUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjZ3N0LXBhZC1zZXQtYWN0aXZlIj5nc3RfcGFkX3NldF9hY3RpdmU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5teXNpbmtwYWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gVFJVRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+ZmFpbF91bmxlc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIj5nc3RfZWxlbWVudF9zZXRfc3RhdGU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lbGVtZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEdTVF9TVEFURV9QTEFZSU5HPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikgPT08L3NwYW4+IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmcmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi1Hc3RDYXBzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBjYXBzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZyb20tc3RyaW5nIj5nc3RfY2Fwc19mcm9tX3N0cmluZzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPllPVVJfREVTSVJFRF9TSU5LX0NBUFM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWV2ZW50cyI+Z3N0X2NoZWNrX3NldHVwX2V2ZW50czwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm15c3JjcGFkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGVsZW1lbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHU1RfRk9STUFUX1RJTUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIj5nc3RfY2Fwc191bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+ZmFpbF91bmxlc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giPmdzdF9wYWRfcHVzaDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm15c3JjcGFkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjI8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpID09PC9zcGFuPiBHU1RfRkxPV19PSzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxwPjwvcD4KLTxwPkZvciB2ZXJ5IHNpbXBsZSBpbnB1dC9vdXRwdXQgdGVzdCBzY2VuYXJpb3MgY2hlY2tvdXQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWVsZW1lbnQtcHVzaC1idWZmZXItbGlzdCIgdGl0bGU9ImdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3TCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdDwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlciIgdGl0bGU9ImdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVywqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQtYnktbmFtZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZWxlbWVudCB0byBzZXR1cCBzcmMgcGFkIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYWQgdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk5hbWUgb2YgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+Ci1zaW5rIHBhZCB0aGF0IHdpbGwgYmUgbGlua2VkIHRvIHRoZSBzcmMgcGFkIHRoYXQgd2lsbCBiZSBzZXR1cDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQtYnktbmFtZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgbmV3IHBhZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGluamVjdCBkYXRhIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGVjay10ZWFyZG93bi1wYWQtYnktbmFtZSI+PC9hPjxoMz5nc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXRlYXJkb3duLWVsZW1lbnQiPjwvYT48aDM+Z3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXRlYXJkb3duLXNpbmstcGFkIj48L2E+PGgzPmdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXRlYXJkb3duLXNyYy1wYWQiPjwvYT48aDM+Z3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICplbGVtZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLWRyb3AtYnVmZmVycyI+PC9hPjxoMz5nc3RfY2hlY2tfZHJvcF9idWZmZXJzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5VbnJlZiBhbmQgcmVtb3ZlIGFsbCBidWZmZXJzIHRoYXQgYXJlIGluIHRoZSBnbG9iYWwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcnM8L2NvZGU+PC9lbT4KLSBHTGlzdCwKLWVtcHR5aW5nIHRoZSBsaXN0LjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLWJ1ZmZlci1kYXRhIj48L2E+PGgzPmdzdF9jaGVja19idWZmZXJfZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jaGVja19idWZmZXJfZGF0YSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXI8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djb25zdHBvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY29uc3Rwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q29tcGFyZSB0aGUgYnVmZmVyIGNvbnRlbnRzIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpemU8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hlY2stYnVmZmVyLWRhdGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YnVmZmVyIHRvIGNvbXBhcmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmRhdGEgdG8gY29tcGFyZSB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2l6ZSBvZiBkYXRhIHRvIGNvbXBhcmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLWNhcHMtZXF1YWwiPjwvYT48aDM+Z3N0X2NoZWNrX2NhcHNfZXF1YWzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hlY2tfY2Fwc19lcXVhbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzMTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHMyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbXBhcmUgdHdvIGNhcHMgd2l0aCBnc3RfY2Fwc19pc19lcXVhbCBhbmQgZmFpbCB1bmxlc3MgdGhleSBhcmUKLWVxdWFsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1jYXBzLWVxdWFsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMxPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Zmlyc3QgY2FwcyB0byBjb21wYXJlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHMyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+c2Vjb25kIGNhcHMgdG8gY29tcGFyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlci1saXN0Ij48L2E+PGgzPmdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmVsZW1lbnRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0xpc3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HTGlzdDwvc3Bhbj48L2E+ICpidWZmZXJfaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHNfaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dMaXN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R0xpc3Q8L3NwYW4+PC9hPiAqYnVmZmVyX291dDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2Fwc19vdXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IGxhc3RfZmxvd19yZXR1cm48L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGFuIGVsZW1lbnQgdXNpbmcgdGhlIGZhY3RvcnkgcHJvdmlkaW5nIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudF9uYW1lPC9jb2RlPjwvZW0+Ci0gYW5kIHB1c2ggdGhlCi1idWZmZXJzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXJfaW48L2NvZGU+PC9lbT4KLSB0byB0aGlzIGVsZW1lbnQuIFRoZSBlbGVtZW50IHNob3VsZCBjcmVhdGUgdGhlIGJ1ZmZlcnMKLWVxdWFsIHRvIHRoZSBidWZmZXJzIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXJfb3V0PC9jb2RlPjwvZW0+Ci0uIFdlIG9ubHkgY2hlY2sgdGhlIHNpemUgYW5kIHRoZSBkYXRhIG9mCi10aGUgYnVmZmVycy4gVGhpcyBmdW5jdGlvbiB1bnJlZnMgdGhlIGJ1ZmZlcnMgaW4gdGhlIHR3byBsaXN0cy4KLVRoZSBsYXN0X2Zsb3dfcmV0dXJuIHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIGV4cGVjdGVkIGZsb3cgcmV0dXJuIHZhbHVlIGZyb20KLXB1c2hpbmcgdGhlIGZpbmFsIGJ1ZmZlciBpbiB0aGUgbGlzdC4KLVRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIGEgdGVzdCB3aGljaCBwdXNoZXMgc29tZSBidWZmZXJzIGFuZCB0aGVuIGFuCi1pbnZhbGlkIGJ1ZmZlciwgd2hlbiB0aGUgZmluYWwgYnVmZmVyIGlzIGV4cGVjdGVkIHRvIGZhaWwsIGZvciBleGFtcGxlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1lbGVtZW50LXB1c2gtYnVmZmVyLWxpc3QucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZSBvZiB0aGUgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIGNyZWF0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyX2luPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbGlzdCBvZiBidWZmZXJzIHRoYXQgbmVlZHMgdG8gYmUKLXB1c2hlZCB0byB0aGUgZWxlbWVudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iR2VuZXJpY3MgYW5kIGRlZmluaW5nIGVsZW1lbnRzIG9mIGNvbnRhaW5lcnMgYW5kIGFycmF5cy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5lbGVtZW50LXR5cGU8L3NwYW4+PC9hY3JvbnltPiBHc3RCdWZmZXJdWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2Fwc19pbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBleHBlY3RlZCBvZiB0aGUgc2lua3BhZCBvZiB0aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXJfb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgbGlzdCBvZiBidWZmZXJzIHRoYXQgd2UgZXhwZWN0IGZyb20KLXRoZSBlbGVtZW50LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJHZW5lcmljcyBhbmQgZGVmaW5pbmcgZWxlbWVudHMgb2YgY29udGFpbmVycyBhbmQgYXJyYXlzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmVsZW1lbnQtdHlwZTwvc3Bhbj48L2Fjcm9ueW0+IEdzdEJ1ZmZlcl1bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzX291dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBleHBlY3RlZCBvZiB0aGUgc3JjcGFkIG9mIHRoZSBlbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxhc3RfZmxvd19yZXR1cm48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbGFzdCBidWZmZXIgcHVzaCBuZWVkcyB0byBnaXZlIHRoaXMgR3N0Rmxvd1JldHVybjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlciI+PC9hPjxoMz5nc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmVsZW1lbnRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlcl9pbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHNfaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXJfb3V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2Fwc19vdXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q3JlYXRlIGFuIGVsZW1lbnQgdXNpbmcgdGhlIGZhY3RvcnkgcHJvdmlkaW5nIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudF9uYW1lPC9jb2RlPjwvZW0+Ci0gYW5kCi1wdXNoIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyX2luPC9jb2RlPjwvZW0+Ci0gdG8gdGhpcyBlbGVtZW50LiBUaGUgZWxlbWVudCBzaG91bGQgY3JlYXRlIG9uZSBidWZmZXIKLWFuZCB0aGlzIHdpbGwgYmUgY29tcGFyZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyX291dDwvY29kZT48L2VtPgotLiBXZSBvbmx5IGNoZWNrIHRoZSBjYXBzCi1hbmQgdGhlIGRhdGEgb2YgdGhlIGJ1ZmZlcnMuIFRoaXMgZnVuY3Rpb24gdW5yZWZzIHRoZSBidWZmZXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1lbGVtZW50LXB1c2gtYnVmZmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWUgb2YgdGhlIGVsZW1lbnQgdGhhdCBuZWVkcyB0byBiZSBjcmVhdGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcl9pbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnB1c2ggdGhpcyBidWZmZXIgdG8gdGhlIGVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2Fwc19pbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBleHBlY3RlZCBvZiB0aGUgc2lua3BhZCBvZiB0aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXJfb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+Y29tcGFyZSB0aGUgcmVzdWx0IHdpdGggdGhpcyBidWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2Fwc19vdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gZXhwZWN0ZWQgb2YgdGhlIHNyY3BhZCBvZiB0aGUgZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stcnVuLXN1aXRlIj48L2E+PGgzPmdzdF9jaGVja19ydW5fc3VpdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2ludDwvc3Bhbj48L2E+Ci1nc3RfY2hlY2tfcnVuX3N1aXRlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PHNwYW4gY2xhc3M9InR5cGUiPlN1aXRlPC9zcGFuPiAqc3VpdGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmZuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLWV2ZW50cyI+PC9hPjxoMz5nc3RfY2hlY2tfc2V0dXBfZXZlbnRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzcmNwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR3N0Rm9ybWF0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rm9ybWF0PC9zcGFuPjwvYT4gZm9ybWF0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1c2ggc3RyZWFtLXN0YXJ0LCBjYXBzIGFuZCBzZWdtZW50IGV2ZW50LCB3aGljaCBjb25zaXN0IG9mIHRoZSBtaW5pbXVtCi1yZXF1aXJlZCBldmVudHMgdG8gYWxsb3cgc3RyZWFtaW5nLiBDYXBzIGlzIG9wdGlvbmFsIHRvIGFsbG93IHJhdyBzcmMKLXRlc3RpbmcuIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50PC9jb2RlPjwvZW0+Ci0gaGFzIG1vcmUgdGhhbiBvbmUgc3JjIG9yIHNpbmsgcGFkLCB1c2UKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1ldmVudHMtd2l0aC1zdHJlYW0taWQiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkKCk8L2NvZGU+PC9hPiBpbnN0ZWFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1ldmVudHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHNyYyA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBwdXNoIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdXNlIHRvIGNyZWF0ZSB0aGUgc3RyZWFtIGlkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gaW4gY2FzZSBjYXBzIGV2ZW50IG11c3QgYmUgc2VudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IG9mIHRoZSBkZWZhdWx0IHNlZ21lbnQgdG8gc2VuZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtZXZlbnRzLXdpdGgtc3RyZWFtLWlkIj48L2E+PGgzPmdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyY3BhZDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPiBmb3JtYXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnN0cmVhbV9pZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QdXNoIHN0cmVhbS1zdGFydCwgY2FwcyBhbmQgc2VnbWVudCBldmVudCwgd2hpY2ggY29uc2lzdCBvZiB0aGUgbWluaW11bQotcmVxdWlyZWQgZXZlbnRzIHRvIGFsbG93IHN0cmVhbWluZy4gQ2FwcyBpcyBvcHRpb25hbCB0byBhbGxvdyByYXcgc3JjCi10ZXN0aW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1ldmVudHMtd2l0aC1zdHJlYW0taWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIHNyYyA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBwdXNoIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdXNlIHRvIGNyZWF0ZSB0aGUgc3RyZWFtIGlkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gaW4gY2FzZSBjYXBzIGV2ZW50IG11c3QgYmUgc2VudC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9ybWF0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dzdEZvcm1hdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZvcm1hdDwvc3Bhbj48L2E+IG9mIHRoZSBkZWZhdWx0IHNlZ21lbnQgdG8gc2VuZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHJlYW1faWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RyZWFtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1ieS1uYW1lLWZyb20tdGVtcGxhdGUiPjwvYT48aDM+Z3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKgotZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdG1wbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1ieS1uYW1lLWZyb20tdGVtcGxhdGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmVsZW1lbnQgdG8gc2V0dXAgcGFkIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRtcGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5wYWQgdGVtcGxhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPm5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1ieS1uYW1lLWZyb20tdGVtcGxhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBwYWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1mcm9tLXRlbXBsYXRlIj48L2E+PGgzPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9mcm9tX3RlbXBsYXRlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqCi1nc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfZnJvbV90ZW1wbGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdG1wbDwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtZnJvbS10ZW1wbGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZWxlbWVudCB0byBzZXR1cCBwYWQgb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dG1wbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBhZCB0ZW1wbGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkLWZyb20tdGVtcGxhdGUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIG5ldyBwYWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWJ5LW5hbWUtZnJvbS10ZW1wbGF0ZSI+PC9hPjxoMz5nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLWdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdG1wbDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpuYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWJ5LW5hbWUtZnJvbS10ZW1wbGF0ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZWxlbWVudCB0byBzZXR1cCBwYWQgb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dG1wbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnBhZCB0ZW1wbGF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQtYnktbmFtZS1mcm9tLXRlbXBsYXRlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgcGFkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1mcm9tLXRlbXBsYXRlIj48L2E+PGgzPmdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2Zyb21fdGVtcGxhdGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCoKLWdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2Zyb21fdGVtcGxhdGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0UGFkVGVtcGxhdGUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqdG1wbDwvY29kZT48L2VtPik7PC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1mcm9tLXRlbXBsYXRlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5lbGVtZW50IHRvIHNldHVwIHBhZCBvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50bXBsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cGFkIHRlbXBsYXRlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1mcm9tLXRlbXBsYXRlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSBuZXcgcGFkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stb2JqZWN0cy1kZXN0cm95ZWQtb24tdW5yZWYiPjwvYT48aDM+Z3N0X2NoZWNrX29iamVjdHNfZGVzdHJveWVkX29uX3VucmVmwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NoZWNrX29iamVjdHNfZGVzdHJveWVkX29uX3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gb2JqZWN0X3RvX3VucmVmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZmlyc3Rfb2JqZWN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVucmVmcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0X3RvX3VucmVmPC9jb2RlPjwvZW0+Ci0gYW5kIGNoZWNrcyB0aGF0IGlzIGhhcyBwcm9wZXJseSBiZWVuCi1kZXN0cm95ZWQsIGFsc28gY2hlY2tzIHRoYXQgdGhlIG90aGVyIG9iamVjdHMgcGFzc2VkIGluCi1wYXJhbWV0dGVyIGhhdmUgYmVlbiBkZXN0cm95ZWQgYXMgYSBjb25jZXF1ZW5jZSBvZgotdW5yZWZpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdF90b191bnJlZjwvY29kZT48L2VtPgotLiBMYXN0IHZhcmlhYmxlIGFyZ3VtZW50IHNob3VsZCBiZSBOVUxMLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jaGVjay1vYmplY3RzLWRlc3Ryb3llZC1vbi11bnJlZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmplY3RfdG9fdW5yZWY8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiB0byB1bnJlZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maXJzdF9vYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gVGhlIGZpcnN0IG9iamVjdCB0aGF0IHNob3VsZCBiZSBkZXN0cm95ZWQgYXMgYQotY29uY2VxdWVuY2Ugb2YgdW5yZWZpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm9iamVjdF90b191bnJlZjwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BZGRpdGlvbmFsIG9iamVjdCB0aGF0IHNob3VsZCBoYXZlIGJlZW4gZGVzdHJveWVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY2hlY2stb2JqZWN0LWRlc3Ryb3llZC1vbi11bnJlZiI+PC9hPjxoMz5nc3RfY2hlY2tfb2JqZWN0X2Rlc3Ryb3llZF9vbl91bnJlZsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jaGVja19vYmplY3RfZGVzdHJveWVkX29uX3VucmVmICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gb2JqZWN0X3RvX3VucmVmPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlVucmVmcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqZWN0X3RvX3VucmVmPC9jb2RlPjwvZW0+Ci0gYW5kIGNoZWNrcyB0aGF0IGlzIGhhcyBwcm9wZXJseSBiZWVuCi1kZXN0cm95ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWNoZWNrLW9iamVjdC1kZXN0cm95ZWQtb24tdW5yZWYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iamVjdF90b191bnJlZjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+IHRvIHVucmVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHU1QtRU5ELVRFU1Q6Q0FQUyI+PC9hPjxoMz5HU1RfRU5EX1RFU1Q8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgR1NUX0VORF9URVNUPC9wcmU+Ci08cD53cmFwcGVyIGZvciBjaGVja3MgRU5EX1RFU1Q8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjNjQxOC4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg2NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0RGF0YVF1ZXVlOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS50b3Bfb2ZfcGFnZSI+PC9hPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2gyPgotPHA+R3N0RGF0YVF1ZXVlIOKAlCBUaHJlYWRzYWZlIHF1ZXVlaW5nIG9iamVjdDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiIgdGl0bGU9IkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uwqAoKSI+KkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjayIgdGl0bGU9IkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2vCoCgpIj4qR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjazwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjayIgdGl0bGU9IkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFja8KgKCkiPipHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2s8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtbmV3IiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfbmV3wqAoKSI+Z3N0X2RhdGFfcXVldWVfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wdXNoIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcHVzaMKgKCkiPmdzdF9kYXRhX3F1ZXVlX3B1c2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXB1c2gtZm9yY2UiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlwqAoKSI+Z3N0X2RhdGFfcXVldWVfcHVzaF9mb3JjZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtcG9wIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcG9wwqAoKSI+Z3N0X2RhdGFfcXVldWVfcG9wPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wZWVrIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcGVla8KgKCkiPmdzdF9kYXRhX3F1ZXVlX3BlZWs8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1mbHVzaCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2ZsdXNowqAoKSI+Z3N0X2RhdGFfcXVldWVfZmx1c2g8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmfCoCgpIj5nc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWRyb3AtaGVhZCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZMKgKCkiPmdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtaXMtZnVsbCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGzCoCgpIj5nc3RfZGF0YV9xdWV1ZV9pc19mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1pcy1lbXB0eSIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5wqAoKSI+Z3N0X2RhdGFfcXVldWVfaXNfZW1wdHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1nZXQtbGV2ZWwiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWzCoCgpIj5nc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1saW1pdHMtY2hhbmdlZCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkwqAoKSI+Z3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVTaXplIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZVNpemUiPkdzdERhdGFRdWV1ZVNpemU8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPkdzdERhdGFRdWV1ZUl0ZW08L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gaXMgYW4gb2JqZWN0IHRoYXQgaGFuZGxlcyB0aHJlYWRzYWZlIHF1ZXVlaW5nIG9mIG9iamVjdHMuIEl0Ci1hbHNvIHByb3ZpZGVzIHNpemUtcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBUaGlzIG9iamVjdCBzaG91bGQgYmUgdXNlZCBmb3IKLWFueSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0aGF0IHdpc2hlcyB0byBwcm92aWRlIHNvbWUgc29ydCBvZiBxdWV1ZWluZyBmdW5jdGlvbmFsaXR5LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiI+PC9hPjxoMz5Hc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHZpc2libGU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGJ5dGVzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gY2hlY2tkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoZSBwcm90b3R5cGUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gaW5mb3JtIHRoZSBxdWV1ZSB0aGF0IGl0IHNob3VsZCBiZQotY29uc2lkZXJlZCBhcyBmdWxsLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52aXNpYmxlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIG51bWJlciBvZiB2aXNpYmxlIGl0ZW1zIGN1cnJlbnRseSBpbiB0aGUgcXVldWUuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGFtb3VudCBvZiBieXRlcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGFjY3VtdWxhdGVkIGR1cmF0aW9uIG9mIHRoZSBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jaGVja2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gcmVnaXN0ZXJlZCB3aGVuIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+IHdhcyBjcmVhdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHF1ZXVlIHNob3VsZCBiZSBjb25zaWRlcmVkIGZ1bGwuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2siPjwvYT48aDM+R3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gY2hlY2tkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrIj48L2E+PGgzPkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2s8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj4gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGNoZWNrZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLW5ldyI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9uZXfCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPsKgKgotZ3N0X2RhdGFfcXVldWVfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIiB0aXRsZT0iR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb27CoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb248L3NwYW4+PC9hPiBjaGVja2Z1bGw8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrIiB0aXRsZT0iR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjazwvc3Bhbj48L2E+IGZ1bGxjYWxsYmFjazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrIiB0aXRsZT0iR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFja8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrPC9zcGFuPjwvYT4gZW1wdHljYWxsYmFjazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGNoZWNrZGF0YTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdWxsY2FsbGJhY2s8L2NvZGU+PC9lbT4KLSBvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZW1wdHljYWxsYmFjazwvY29kZT48L2VtPgotIGFyZSBzdXBwbGllZCwgdGhlbgotdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gd2lsbCBjYWxsIHRoZSByZXNwZWN0aXZlIGNhbGxiYWNrIHRvIHNpZ25hbCBmdWxsIG9yIGVtcHR5IGNvbmRpdGlvbi4KLUlmIHRoZSBjYWxsYmFja3MgYXJlIE5VTEwgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gd2lsbCBpbnN0ZWFkIGVtaXQgJ2Z1bGwnIGFuZCAnZW1wdHknCi1zaWduYWxzLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jaGVja2Z1bGw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY2FsbGJhY2sgdXNlZCB0byB0ZWxsIGlmIHRoZSBlbGVtZW50IGNvbnNpZGVycyB0aGUgcXVldWUgZnVsbAotb3Igbm90LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mdWxsY2FsbGJhY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaXMgY29uc2lkZXJlZCBmdWxsLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbXB0eWNhbGxiYWNrPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGNvbnNpZGVyZWQgZW1wdHkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNoZWNrZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNoZWNrZnVsbDwvY29kZT48L2VtPgotLCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVsbGNhbGxiYWNrPC9jb2RlPjwvZW0+Ci0sCi1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmVtcHR5Y2FsbGJhY2s8L2NvZGU+PC9lbT4KLWNhbGxiYWNrcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLXB1c2giPjwvYT48aDM+Z3N0X2RhdGFfcXVldWVfcHVzaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RhdGFfcXVldWVfcHVzaCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4gKml0ZW08L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHVzaGVzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUl0ZW08L3NwYW4+PC9hPiAob3IgYSBzdHJ1Y3R1cmUgdGhhdCBiZWdpbnMgd2l0aCB0aGUgc2FtZSBmaWVsZHMpCi1vbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+Ci0uIElmIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLSBpcyBmdWxsLCB0aGUgY2FsbCB3aWxsIGJsb2NrIHVudGlsIHNwYWNlIGlzCi1hdmFpbGFibGUsIE9SIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLSBpcyBzZXQgdG8gZmx1c2hpbmcgc3RhdGUuCi1NVCBzYWZlLjwvcD4KLTxwPk5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWNzIHRoYW4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2giPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoKCk8L2NvZGU+PC9hPgotYW5kIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjZ3N0LXBhZC1wdXNoLWV2ZW50Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9wYWRfcHVzaF9ldmVudCgpPC9jb2RlPjwvYT46IHRoaXMgZnVuY3Rpb24gb25seSB0YWtlcyBvd25lcnNoaXAgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4KLSBhbmQKLXRoZSA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RNaW5pT2JqZWN0Lmh0bWwjR3N0TWluaU9iamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE1pbmlPYmplY3Q8L3NwYW4+PC9hPiBjb250YWluZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4KLSBpZiB0aGUgcHVzaCB3YXMgc3VjY2Vzc2Z1bC4gSWYgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4KLWlzIHJldHVybmVkLCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pdGVtPC9jb2RlPjwvZW0+Ci0gYW5kIGl0cyBjb250ZW50cy48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1wdXNoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlSXRlbSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWVJdGVtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlSXRlbTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtcHVzaC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4KLXdhcyBzdWNjZXNzZnVsbHkgcHVzaGVkIG9uIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtcHVzaC1mb3JjZSI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUl0ZW08L3NwYW4+PC9hPiAqaXRlbTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QdXNoZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlSXRlbSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWVJdGVtIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlSXRlbTwvc3Bhbj48L2E+IChvciBhIHN0cnVjdHVyZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBzYW1lIGZpZWxkcykKLW9uIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLS4gSXQgaWdub3JlcyBpZiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+Ci0gaXMgZnVsbCBvciBub3QgYW5kIGZvcmNlcyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4KLQotdG8gYmUgcHVzaGVkIGFueXdheS4KLU1UIHNhZmUuPC9wPgotPHA+Tm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaGFzIHNsaWdodGx5IGRpZmZlcmVudCBzZW1hbnRpY3MgdGhhbiA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI2dzdC1wYWQtcHVzaCI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfcGFkX3B1c2goKTwvY29kZT48L2E+Ci1hbmQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNnc3QtcGFkLXB1c2gtZXZlbnQiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3BhZF9wdXNoX2V2ZW50KCk8L2NvZGU+PC9hPjogdGhpcyBmdW5jdGlvbiBvbmx5IHRha2VzIG93bmVyc2hpcCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPgotIGFuZAotdGhlIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IGNvbnRhaW5lZCBpbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPgotIGlmIHRoZSBwdXNoIHdhcyBzdWNjZXNzZnVsLiBJZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPgotaXMgcmV0dXJuZWQsIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4KLSBhbmQgaXRzIGNvbnRlbnRzLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLXB1c2gtZm9yY2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPml0ZW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1wdXNoLWZvcmNlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPgotd2FzIHN1Y2Nlc3NmdWxseSBwdXNoZWQgb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1wb3AiPjwvYT48aDM+Z3N0X2RhdGFfcXVldWVfcG9wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGF0YV9xdWV1ZV9wb3AgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4gKippdGVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4KLSBhdmFpbGFibGUgb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPgotLiBJZiB0aGUgcXVldWUgaXMgY3VycmVudGx5Ci1lbXB0eSwgdGhlIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBhdmFpbGFibGUsIE9SIHRoZQotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+Ci0gaXMgc2V0IHRvIHRoZSBmbHVzaGluZyBzdGF0ZS4KLU1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtcG9wLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byBzdG9yZSB0aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUl0ZW08L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLXBvcC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiBhbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aXRlbTwvY29kZT48L2VtPgotd2FzIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgZnJvbSB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLXBlZWsiPjwvYT48aDM+Z3N0X2RhdGFfcXVldWVfcGVla8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2RhdGFfcXVldWVfcGVlayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4gKippdGVtPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHJpZXZlcyB0aGUgZmlyc3QgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4KLSBhdmFpbGFibGUgb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPgotIHdpdGhvdXQgcmVtb3ZpbmcgaXQuCi1JZiB0aGUgcXVldWUgaXMgY3VycmVudGx5IGVtcHR5LCB0aGUgY2FsbCB3aWxsIGJsb2NrIHVudGlsIGF0IGxlYXN0Ci1vbmUgaXRlbSBpcyBhdmFpbGFibGUsIE9SIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLSBpcyBzZXQgdG8gdGhlIGZsdXNoaW5nIHN0YXRlLgotTVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1wZWVrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pdGVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cG9pbnRlciB0byBzdG9yZSB0aGUgcmV0dXJuZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUl0ZW08L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLXBlZWsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPml0ZW08L2NvZGU+PC9lbT4KLXdhcyBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPgotLjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1mbHVzaCI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9mbHVzaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kYXRhX3F1ZXVlX2ZsdXNoICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Rmx1c2hlcyBhbGwgdGhlIGNvbnRlbnRzIG9mIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLS4gQW55IGNhbGwgdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXB1c2giIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wdXNowqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9kYXRhX3F1ZXVlX3B1c2g8L3NwYW4+PC9hPiBhbmQKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wb3AiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wb3DCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X2RhdGFfcXVldWVfcG9wPC9zcGFuPjwvYT4gd2lsbCBiZSByZWxlYXNlZC4KLU1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtZmx1c2gucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtc2V0LWZsdXNoaW5nIj48L2E+PGgzPmdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gZmx1c2hpbmc8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgcXVldWUgdG8gZmx1c2hpbmcgc3RhdGUgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZsdXNoaW5nPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LiBJZiBzZXQgdG8gZmx1c2hpbmcKLXN0YXRlLCBhbnkgaW5jb21pbmcgZGF0YSBvbiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnF1ZXVlPC9jb2RlPjwvZW0+Ci0gd2lsbCBiZSBkaXNjYXJkZWQuIEFueSBjYWxsIGN1cnJlbnRseQotYmxvY2tpbmcgb24gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXB1c2giIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wdXNowqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9kYXRhX3F1ZXVlX3B1c2g8L3NwYW4+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtcG9wIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcG9wwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPmdzdF9kYXRhX3F1ZXVlX3BvcDwvc3Bhbj48L2E+IHdpbGwgcmV0dXJuIHN0cmFpZ2h0Ci1hd2F5IHdpdGggYSByZXR1cm4gdmFsdWUgb2YgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4uIFdoaWxlIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLSBpcyBpbiBmbHVzaGluZyBzdGF0ZSwgCi1hbGwgY2FsbHMgdG8gdGhvc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPi48L3A+Ci08cD5NVCBTYWZlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLXNldC1mbHVzaGluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWV1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmx1c2hpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHN0YXRpbmcgaWYgdGhlIHF1ZXVlIHdpbGwgYmUgZmx1c2hpbmcgb3Igbm90LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1kcm9wLWhlYWQiPjwvYT48aDM+Z3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVR5cGUtSW5mb3JtYXRpb24uaHRtbCNHVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdUeXBlPC9zcGFuPjwvYT4gdHlwZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Qb3AgYW5kIHVucmVmIHRoZSBoZWFkLW1vc3QgPGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT4gd2l0aCB0aGUgZ2l2ZW4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVHlwZS1JbmZvcm1hdGlvbi5odG1sI0dUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R1R5cGU8L3NwYW4+PC9hPi48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1kcm9wLWhlYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiB0byBkcm9wIGFuIGl0ZW0gZnJvbS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UeXBlLUluZm9ybWF0aW9uLmh0bWwjR1R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVHlwZTwvc3Bhbj48L2E+IG9mIHRoZSBpdGVtIHRvIGRyb3AuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1kcm9wLWhlYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgYW4gZWxlbWVudCB3YXMgcmVtb3ZlZC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtaXMtZnVsbCI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9pc19mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfZGF0YV9xdWV1ZV9pc19mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UXVlcmllcyBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLSBpcyBmdWxsLiBUaGlzIGNoZWNrIHdpbGwgYmUgZG9uZSB1c2luZyB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiIgdGl0bGU9IkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uPC9zcGFuPjwvYT4gcmVnaXN0ZXJlZCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPgotLgotTVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1pcy1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWV1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1pcy1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPgotaXMgZnVsbC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtaXMtZW1wdHkiPjwvYT48aDM+Z3N0X2RhdGFfcXVldWVfaXNfZW1wdHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UXVlcmllcyBpZiB0aGVyZSBhcmUgYW55IGl0ZW1zIGluIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cXVldWU8L2NvZGU+PC9lbT4KLS4KLU1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtaXMtZW1wdHkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLWlzLWVtcHR5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5xdWV1ZTwvY29kZT48L2VtPgotaXMgZW1wdHkuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLWdldC1sZXZlbCI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVTaXplIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZVNpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVTaXplPC9zcGFuPjwvYT4gKmxldmVsPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgY3VycmVudCBsZXZlbCBvZiB0aGUgcXVldWUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWRhdGEtcXVldWUtZ2V0LWxldmVsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWUiIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGF0YVF1ZXVlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGV2ZWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbG9jYXRpb24gdG8gc3RvcmUgdGhlIHJlc3VsdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZGF0YS1xdWV1ZS1saW1pdHMtY2hhbmdlZCI+PC9hPjxoMz5nc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWU8L3NwYW4+PC9hPiAqcXVldWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+SW5mb3JtIHRoZSBxdWV1ZSB0aGF0IHRoZSBsaW1pdHMgZm9yIHRoZSBmdWxsbmVzcyBjaGVjayBoYXZlIGNoYW5nZWQgYW5kIHRoYXQKLWFueSBibG9ja2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjZ3N0LWRhdGEtcXVldWUtcHVzaCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX3B1c2jCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9kYXRhX3F1ZXVlX3B1c2goKTwvY29kZT48L2E+IHNob3VsZCBiZSB1bmJsb2NrZWQgdG8gcmVjaGVjayB0aGUgbGltaXRzLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1kYXRhLXF1ZXVlLWxpbWl0cy1jaGFuZ2VkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWV1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGF0YVF1ZXVlIj48L2E+PGgzPnN0cnVjdCBHc3REYXRhUXVldWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REYXRhUXVldWUgewotICBHT2JqZWN0IG9iamVjdDsKLX07Ci08L3ByZT4KLTxwPk9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3REYXRhUXVldWUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R09iamVjdDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWUub2JqZWN0Ij48L2E+b2JqZWN0PC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGFyZW50IHN0cnVjdHVyZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERhdGFRdWV1ZVNpemUiPjwvYT48aDM+c3RydWN0IEdzdERhdGFRdWV1ZVNpemU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REYXRhUXVldWVTaXplIHsKLSAgZ3VpbnQgdmlzaWJsZTsKLSAgZ3VpbnQgYnl0ZXM7Ci0gIGd1aW50NjQgdGltZTsKLX07Ci08L3ByZT4KLTxwPlN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBzaXplIG9mIGEgcXVldWUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RGF0YVF1ZXVlU2l6ZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERhdGFRdWV1ZVNpemUudmlzaWJsZSI+PC9hPnZpc2libGU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPm51bWJlciBvZiBidWZmZXJzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERhdGFRdWV1ZVNpemUuYnl0ZXMiPjwvYT5ieXRlczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+bnVtYmVyIG9mIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWVTaXplLnRpbWUiPjwvYT50aW1lPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hbW91bnQgb2YgdGltZTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGF0YVF1ZXVlSXRlbSI+PC9hPjxoMz5zdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0gewotICBHc3RNaW5pT2JqZWN0ICpvYmplY3Q7Ci0gIGd1aW50IHNpemU7Ci0gIGd1aW50NjQgZHVyYXRpb247Ci0gIGdib29sZWFuIHZpc2libGU7Ci0KLSAgLyogdXNlciBzdXBwbGllZCBkZXN0cm95IGZ1bmN0aW9uICovCi0gIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Ci19OwotPC9wcmU+Ci08cD5TdHJ1Y3R1cmUgdXNlZCBieSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZTwvc3Bhbj48L2E+LiBZb3UgY2FuIHN1cHBseSBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUsIGFzCi1sb25nIGFzIHRoZSB0b3Agb2YgdGhlIHN0cnVjdHVyZSBpcyBpZGVudGljYWwgdG8gdGhpcyBzdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RGF0YVF1ZXVlSXRlbS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0TWluaU9iamVjdC5odG1sI0dzdE1pbmlPYmplY3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNaW5pT2JqZWN0PC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWVJdGVtLm9iamVjdCI+PC9hPm9iamVjdDwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCNHc3RNaW5pT2JqZWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWluaU9iamVjdDwvc3Bhbj48L2E+IHRvIHF1ZXVlLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3REYXRhUXVldWVJdGVtLnNpemUiPjwvYT5zaXplPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbWluaW9iamVjdC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERhdGFRdWV1ZUl0ZW0uZHVyYXRpb24iPjwvYT5kdXJhdGlvbjwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGR1cmF0aW9uIGluIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBvZiB0aGUgbWluaW9iamVjdC4gQ2FuIG5vdCBiZQotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9DTE9DS19USU1FX05PTkU8L2NvZGU+PC9hPi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPsKgPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0RGF0YVF1ZXVlSXRlbS52aXNpYmxlIj48L2E+dmlzaWJsZTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLXNob3VsZCBiZSBjb25zaWRlcmVkIGFzIGEgdmlzaWJsZSBvYmplY3QuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdERhdGFRdWV1ZUl0ZW0uZGVzdHJveSI+PC9hPmRlc3Ryb3k8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBmdW5jdGlvbiB0byB1c2UgdG8gZnJlZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUl0ZW0iIHRpdGxlPSJzdHJ1Y3QgR3N0RGF0YVF1ZXVlSXRlbSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERhdGFRdWV1ZUl0ZW08L3NwYW4+PC9hPi4KLVRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsc28gZHJvcCB0aGUgcmVmZXJlbmNlIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5vYmplY3Q8L2NvZGU+PC9lbT4KLXRoZSBvd25lciBvZiB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REYXRhUXVldWVJdGVtPC9zcGFuPjwvYT4gaXMgYXNzdW1lZCB0byBob2xkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTM4N2RkLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzk4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RGbG93Q29tYmluZXI6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLnRvcF9vZl9wYWdlIj48L2E+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvaDI+Ci08cD5Hc3RGbG93Q29tYmluZXIg4oCUIFV0aWxpdHkgdG8gY29tYmluZSBtdWx0aXBsZSBmbG93IHJldHVybnMgaW50byBvbmU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLW5ldyIgdGl0bGU9ImdzdF9mbG93X2NvbWJpbmVyX25ld8KgKCkiPmdzdF9mbG93X2NvbWJpbmVyX25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLWZyZWUiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9mcmVlwqAoKSI+Z3N0X2Zsb3dfY29tYmluZXJfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1mbG93IiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX2Zsb3fCoCgpIj5nc3RfZmxvd19jb21iaW5lcl91cGRhdGVfZmxvdzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLWFkZC1wYWQiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkwqAoKSI+Z3N0X2Zsb3dfY29tYmluZXJfYWRkX3BhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXJlbW92ZS1wYWQiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9yZW1vdmVfcGFkwqAoKSI+Z3N0X2Zsb3dfY29tYmluZXJfcmVtb3ZlX3BhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLWNsZWFyIiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfY2xlYXLCoCgpIj5nc3RfZmxvd19jb21iaW5lcl9jbGVhcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXJlc2V0IiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfcmVzZXTCoCgpIj5nc3RfZmxvd19jb21iaW5lcl9yZXNldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1wYWQtZmxvdyIgdGl0bGU9ImdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvd8KgKCkiPmdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VXRpbGl0eSBzdHJ1Y3QgdG8gaGVscCBoYW5kbGluZyA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gY29tYmluYXRpb24uIFVzZWZ1bCBmb3IKLTxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+cyB0aGF0IGhhdmUgbXVsdGlwbGUgc291cmNlIHBhZHMgYW5kIG5lZWQgdG8gY29tYmluZQotdGhlIGRpZmZlcmVudCA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gZm9yIHRob3NlIHBhZHMuPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+IHdvcmtzIGJ5IHVzaW5nIHRoZSBsYXN0IDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBmb3IgYWxsIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+Ci1pdCBoYXMgaW4gaXRzIGxpc3QgYW5kIGNvbXB1dGVzIHRoZSBjb21iaW5lZCByZXR1cm4gdmFsdWUgYW5kIHByb3ZpZGVzCi1pdCB0byB0aGUgY2FsbGVyLjwvcD4KLTxwPlRvIGFkZCBhIG5ldyBwYWQgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93Q29tYmluZXI8L3NwYW4+PC9hPiB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLWFkZC1wYWQiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkKCk8L2NvZGU+PC9hPi4KLVRoZSBuZXcgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gaXMgc3RvcmVkIHdpdGggYSBkZWZhdWx0IHZhbHVlIG9mIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX09LPC9jb2RlPjwvYT4uPC9wPgotPHA+SW4gY2FzZSB5b3Ugd2FudCBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGJlIHJlbW92ZWQsIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItcmVtb3ZlLXBhZCIgdGl0bGU9ImdzdF9mbG93X2NvbWJpbmVyX3JlbW92ZV9wYWTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9mbG93X2NvbWJpbmVyX3JlbW92ZV9wYWQoKTwvY29kZT48L2E+LjwvcD4KLTxwPlBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoaXMgc3RydWN0IGlzbid0IHRocmVhZCBzYWZlIGFzIGl0cyBkZXNpZ25lZCB0byBiZQotIHVzZWQgYnkgZGVtdXhlcnMsIHRob3NlIHVzdWFsbHkgd2lsbCBoYXZlIGEgc2luZ2xlIHRocmVhZCBvcGVyYXRpbmcgaXQuPC9wPgotPHA+VGhlc2UgZnVuY3Rpb25zIHdpbGwgdGFrZSByZWZzIG9uIHRoZSBwYXNzZWQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT5zLjwvcD4KLTxwPkFzaWRlIGZyb20gcmVkdWNpbmcgdGhlIHVzZXIncyBjb2RlIHNpemUsIHRoZSBtYWluIGFkdmFudGFnZSBvZiB1c2luZyB0aGlzCi1oZWxwZXIgc3RydWN0IGlzIHRvIGZvbGxvdyB0aGUgc3RhbmRhcmQgcnVsZXMgZm9yIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiBjb21iaW5hdGlvbi4KLVRoZXNlIHJ1bGVzIGFyZTo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1FT1M6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX0VPUzwvY29kZT48L2E+OiBvbmx5IGlmIGFsbCByZXR1cm5zIGFyZSBFT1MgdG9vPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dTVC1GTE9XLU5PVC1MSU5LRUQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX05PVF9MSU5LRUQ8L2NvZGU+PC9hPjogb25seSBpZiBhbGwgcmV0dXJucyBhcmUgTk9UX0xJTktFRCB0b288L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR1NULUZMT1ctRVJST1I6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX0VSUk9SPC9jb2RlPjwvYT4gb3IgYmVsb3c6IGlmIGF0IGxlYXN0IG9uZSByZXR1cm5zIGFuIGVycm9yIHJldHVybjwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1OT1QtTkVHT1RJQVRFRDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0ZMT1dfTk9UX05FR09USUFURUQ8L2NvZGU+PC9hPjogaWYgYXQgbGVhc3Qgb25lIHJldHVybnMgYSBub3QtbmVnb3RpYXRlZCByZXR1cm48L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR1NULUZMT1ctRkxVU0hJTkc6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GTE9XX0ZMVVNISU5HPC9jb2RlPjwvYT46IGlmIGF0IGxlYXN0IG9uZSByZXR1cm5zIGZsdXNoaW5nPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dTVC1GTE9XLU9LOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19PSzwvY29kZT48L2E+OiBvdGhlcndpc2U8L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dTVC1GTE9XLUVSUk9SOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRkxPV19FUlJPUjwvY29kZT48L2E+IG9yIGJlbG93LCBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCBhbmQgR1NUX0ZMT1dfRkxVU0hJTkcgYXJlCi1yZXR1cm5lZCBpbW1lZGlhdGVsbHkgZnJvbSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1mbG93IiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX2Zsb3fCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93KCk8L2NvZGU+PC9hPiBmdW5jdGlvbi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWZsb3ctY29tYmluZXItbmV3Ij48L2E+PGgzPmdzdF9mbG93X2NvbWJpbmVyX25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9mbG93X2NvbWJpbmVyX25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93Q29tYmluZXI8L3NwYW4+PC9hPiwgdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNnc3QtZmxvdy1jb21iaW5lci1mcmVlIiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfZnJlZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2Zsb3dfY29tYmluZXJfZnJlZSgpPC9jb2RlPjwvYT4gdG8gZnJlZSBpdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci1uZXcucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBBIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWZsb3ctY29tYmluZXItZnJlZSI+PC9hPjxoMz5nc3RfZmxvd19jb21iaW5lcl9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2Zsb3dfY29tYmluZXJfZnJlZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93Q29tYmluZXI8L3NwYW4+PC9hPiAqY29tYmluZXI8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RnJlZXMgYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT4gc3RydWN0IGFuZCBhbGwgaXRzIGludGVybmFsIGRhdGEuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZsb3ctY29tYmluZXItZnJlZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29tYmluZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+IHRvIGZyZWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNi5odG1sI2FwaS1pbmRleC0xLjQiPjEuNDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1mbG93Ij48L2E+PGgzPmdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX2Zsb3cgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT4gKmNvbWJpbmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gZnJldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Db21wdXRlcyB0aGUgY29tYmluZWQgZmxvdyByZXR1cm4gZm9yIHRoZSBwYWRzIGluIGl0LjwvcD4KLTxwPlRoZSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgbGFzdCBmbG93IHJldHVybiB1cGRhdGUgZm9yIGEgcGFkCi1pbiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93Q29tYmluZXI8L3NwYW4+PC9hPi4gSXQgd2lsbCB1c2UgdGhpcyB2YWx1ZSB0byBiZSBhYmxlIHRvIHNob3J0Y3V0IHNvbWUKLWNvbWJpbmF0aW9ucyBhbmQgYXZvaWQgbG9va2luZyBvdmVyIGFsbCBwYWRzIGFnYWluLiBlLmcuIFRoZSBsYXN0IGNvbWJpbmVkCi1yZXR1cm4gaXMgdGhlIHNhbWUgYXMgdGhlIGxhdGVzdCBvYnRhaW5lZCA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZsb3ctY29tYmluZXItdXBkYXRlLWZsb3cucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29tYmluZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZyZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbGF0ZXN0IDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiByZWNlaXZlZCBmb3IgYSBwYWQgaW4gdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1mbG93LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGNvbWJpbmVkIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci1hZGQtcGFkIj48L2E+PGgzPmdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+ICpjb21iaW5lcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFkZHMgYSBuZXcgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93Q29tYmluZXI8L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci1hZGQtcGFkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbWJpbmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93Q29tYmluZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRoYXQgaXMgYmVpbmcgYWRkZWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci1yZW1vdmUtcGFkIj48L2E+PGgzPmdzdF9mbG93X2NvbWJpbmVyX3JlbW92ZV9wYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfZmxvd19jb21iaW5lcl9yZW1vdmVfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+ICpjb21iaW5lcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJlbW92ZXMgYSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBmcm9tIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZsb3ctY29tYmluZXItcmVtb3ZlLXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb21iaW5lcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byByZW1vdmUuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDYuaHRtbCNhcGktaW5kZXgtMS40Ij4xLjQ8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci1jbGVhciI+PC9hPjxoMz5nc3RfZmxvd19jb21iaW5lcl9jbGVhcsKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9mbG93X2NvbWJpbmVyX2NsZWFyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+ICpjb21iaW5lcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZW1vdmVzIGFsbCBwYWRzIGZyb20gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT4gYW5kIHJlc2V0cyBpdCB0byBpdHMgaW5pdGlhbCBzdGF0ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci1jbGVhci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29tYmluZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+IHRvIGNsZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci1yZXNldCI+PC9hPjxoMz5nc3RfZmxvd19jb21iaW5lcl9yZXNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+ICpjb21iaW5lcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXNldCBmbG93IGNvbWJpbmVyIGFuZCBhbGwgcGFkcyB0byB0aGVpciBpbml0aWFsIHN0YXRlIHdpdGhvdXQgcmVtb3ZpbmcgcGFkcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci1yZXNldC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29tYmluZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+IHRvIGNsZWFyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtZmxvdy1jb21iaW5lci11cGRhdGUtcGFkLWZsb3ciPjwvYT48aDM+Z3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dDb21iaW5lcjwvc3Bhbj48L2E+ICpjb21iaW5lcjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gZnJldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBwcm92aWRlZCBwYWQncyBsYXN0IGZsb3cgcmV0dXJuIHRvIHByb3ZpZGVkIHZhbHVlIGFuZCBjb21wdXRlcwotdGhlIGNvbWJpbmVkIGZsb3cgcmV0dXJuIGZvciB0aGUgcGFkcyBpbiBpdC48L3A+Ci08cD5UaGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHBhcmFtZXRlciBzaG91bGQgYmUgdGhlIGxhc3QgZmxvdyByZXR1cm4gdXBkYXRlIGZvciBhIHBhZAotaW4gdGhpcyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT4uIEl0IHdpbGwgdXNlIHRoaXMgdmFsdWUgdG8gYmUgYWJsZSB0byBzaG9ydGN1dCBzb21lCi1jb21iaW5hdGlvbnMgYW5kIGF2b2lkIGxvb2tpbmcgb3ZlciBhbGwgcGFkcyBhZ2Fpbi4gZS5nLiBUaGUgbGFzdCBjb21iaW5lZAotcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXRlc3Qgb2J0YWluZWQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1wYWQtZmxvdy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb21iaW5lcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd0NvbWJpbmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHdob3NlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB0byB1cGRhdGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnJldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBsYXRlc3QgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHJlY2VpdmVkIGZvciBhIHBhZCBpbiB0aGlzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCNHc3RGbG93Q29tYmluZXIiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93Q29tYmluZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWZsb3ctY29tYmluZXItdXBkYXRlLXBhZC1mbG93LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGNvbWJpbmVkIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Rmxvd0NvbWJpbmVyIj48L2E+PGgzPkdzdEZsb3dDb21iaW5lcjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdEZsb3dDb21iaW5lciBHc3RGbG93Q29tYmluZXI7PC9wcmU+Ci08cD5PcGFxdWUgaGVscGVyIHN0cnVjdHVyZSB0byBhZ2dyZWdhdGUgZmxvdyByZXR1cm5zLjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA2Lmh0bWwjYXBpLWluZGV4LTEuNCI+MS40PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOWM2YmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDExMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0SGFybmVzczogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENoZWNrIFVuaXQgVGVzdGluZyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItY2hlY2suaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLnRvcF9vZl9wYWdlIj48L2E+R3N0SGFybmVzczwvc3Bhbj48L2gyPgotPHA+R3N0SGFybmVzcyDigJQgQSB0ZXN0LWhhcm5lc3MgZm9yIHdyaXRpbmcgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctZW1wdHkiIHRpdGxlPSJnc3RfaGFybmVzc19uZXdfZW1wdHnCoCgpIj5nc3RfaGFybmVzc19uZXdfZW1wdHk8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX25ld19mdWxswqAoKSI+Z3N0X2hhcm5lc3NfbmV3X2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctd2l0aC1lbGVtZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfbmV3X3dpdGhfZWxlbWVudMKgKCkiPmdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctd2l0aC1wYWRuYW1lcyIgdGl0bGU9ImdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzwqAoKSI+Z3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctd2l0aC10ZW1wbGF0ZXMiIHRpdGxlPSJnc3RfaGFybmVzc19uZXdfd2l0aF90ZW1wbGF0ZXPCoCgpIj5nc3RfaGFybmVzc19uZXdfd2l0aF90ZW1wbGF0ZXM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXciIHRpdGxlPSJnc3RfaGFybmVzc19uZXfCoCgpIj5nc3RfaGFybmVzc19uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctcGFyc2UiIHRpdGxlPSJnc3RfaGFybmVzc19uZXdfcGFyc2XCoCgpIj5nc3RfaGFybmVzc19uZXdfcGFyc2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLWVsZW1lbnQtZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1wYXJzZSIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9wYXJzZcKgKCkiPmdzdF9oYXJuZXNzX2FkZF9wYXJzZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy10ZWFyZG93biIgdGl0bGU9ImdzdF9oYXJuZXNzX3RlYXJkb3duwqAoKSI+Z3N0X2hhcm5lc3NfdGVhcmRvd248L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLWVsZW1lbnQtc3JjLXBhZCIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NyY19wYWTCoCgpIj5nc3RfaGFybmVzc19hZGRfZWxlbWVudF9zcmNfcGFkPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1lbGVtZW50LXNpbmstcGFkIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfc2lua19wYWTCoCgpIj5nc3RfaGFybmVzc19hZGRfZWxlbWVudF9zaW5rX3BhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtc3JjLWNhcHMiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfc3JjX2NhcHPCoCgpIj5nc3RfaGFybmVzc19zZXRfc3JjX2NhcHM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXNpbmstY2FwcyIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHPCoCgpIj5nc3RfaGFybmVzc19zZXRfc2lua19jYXBzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1jYXBzIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X2NhcHPCoCgpIj5nc3RfaGFybmVzc19zZXRfY2FwczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtc3JjLWNhcHMtc3RyIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0csKgKCkiPmdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXNpbmstY2Fwcy1zdHIiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfc2lua19jYXBzX3N0csKgKCkiPmdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHNfc3RyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1jYXBzLXN0ciIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9jYXBzX3N0csKgKCkiPmdzdF9oYXJuZXNzX3NldF9jYXBzX3N0cjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy11c2Utc3lzdGVtY2xvY2siIHRpdGxlPSJnc3RfaGFybmVzc191c2Vfc3lzdGVtY2xvY2vCoCgpIj5nc3RfaGFybmVzc191c2Vfc3lzdGVtY2xvY2s8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdXNlLXRlc3RjbG9jayIgdGl0bGU9ImdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2vCoCgpIj5nc3RfaGFybmVzc191c2VfdGVzdGNsb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZ2V0LXRlc3RjbG9jayIgdGl0bGU9ImdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2vCoCgpIj5nc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXRpbWUiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfdGltZcKgKCkiPmdzdF9oYXJuZXNzX3NldF90aW1lPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtd2FpdC1mb3ItY2xvY2staWQtd2FpdHMiIHRpdGxlPSJnc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0c8KgKCkiPmdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtY3Jhbmstc2luZ2xlLWNsb2NrLXdhaXQiIHRpdGxlPSJnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdMKgKCkiPmdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtY3JhbmstbXVsdGlwbGUtY2xvY2std2FpdHMiIHRpdGxlPSJnc3RfaGFybmVzc19jcmFua19tdWx0aXBsZV9jbG9ja193YWl0c8KgKCkiPmdzdF9oYXJuZXNzX2NyYW5rX211bHRpcGxlX2Nsb2NrX3dhaXRzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXBsYXkiIHRpdGxlPSJnc3RfaGFybmVzc19wbGF5wqAoKSI+Z3N0X2hhcm5lc3NfcGxheTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtYmxvY2tpbmctcHVzaC1tb2RlIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X2Jsb2NraW5nX3B1c2hfbW9kZcKgKCkiPmdzdF9oYXJuZXNzX3NldF9ibG9ja2luZ19wdXNoX21vZGU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LWZvcndhcmRpbmciIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfZm9yd2FyZGluZ8KgKCkiPmdzdF9oYXJuZXNzX3NldF9mb3J3YXJkaW5nPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtY3JlYXRlLWJ1ZmZlciIgdGl0bGU9ImdzdF9oYXJuZXNzX2NyZWF0ZV9idWZmZXLCoCgpIj5nc3RfaGFybmVzc19jcmVhdGVfYnVmZmVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2giIHRpdGxlPSJnc3RfaGFybmVzc19wdXNowqAoKSI+Z3N0X2hhcm5lc3NfcHVzaDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19wdWxswqAoKSI+Z3N0X2hhcm5lc3NfcHVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXRyeS1wdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3NfdHJ5X3B1bGzCoCgpIj5nc3RfaGFybmVzc190cnlfcHVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2gtYW5kLXB1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19wdXNoX2FuZF9wdWxswqAoKSI+Z3N0X2hhcm5lc3NfcHVzaF9hbmRfcHVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWJ1ZmZlcnMtcmVjZWl2ZWQiIHRpdGxlPSJnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkwqAoKSI+Z3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWJ1ZmZlcnMtaW4tcXVldWUiIHRpdGxlPSJnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlwqAoKSI+Z3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtZHJvcC1idWZmZXJzIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X2Ryb3BfYnVmZmVyc8KgKCkiPmdzdF9oYXJuZXNzX3NldF9kcm9wX2J1ZmZlcnM8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZHVtcC10by1maWxlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfZHVtcF90b19maWxlwqAoKSI+Z3N0X2hhcm5lc3NfZHVtcF90b19maWxlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWdldC1sYXN0LXB1c2hlZC10aW1lc3RhbXAiIHRpdGxlPSJnc3RfaGFybmVzc19nZXRfbGFzdF9wdXNoZWRfdGltZXN0YW1wwqAoKSI+Z3N0X2hhcm5lc3NfZ2V0X2xhc3RfcHVzaGVkX3RpbWVzdGFtcDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc19wdXNoX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3NfcHVzaF9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1bGwtZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc19wdWxsX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3NfcHVsbF9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXRyeS1wdWxsLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfZXZlbnTCoCgpIj5nc3RfaGFybmVzc190cnlfcHVsbF9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWV2ZW50cy1yZWNlaXZlZCIgdGl0bGU9ImdzdF9oYXJuZXNzX2V2ZW50c19yZWNlaXZlZMKgKCkiPmdzdF9oYXJuZXNzX2V2ZW50c19yZWNlaXZlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWV2ZW50cy1pbi1xdWV1ZSIgdGl0bGU9ImdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZcKgKCkiPmdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1bGwtdXBzdHJlYW0tZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXRyeS1wdWxsLXVwc3RyZWFtLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfdXBzdHJlYW1fZXZlbnTCoCgpIj5nc3RfaGFybmVzc190cnlfcHVsbF91cHN0cmVhbV9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXVwc3RyZWFtLWV2ZW50cy1yZWNlaXZlZCIgdGl0bGU9ImdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19yZWNlaXZlZMKgKCkiPmdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19yZWNlaXZlZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXVwc3RyZWFtLWV2ZW50cy1pbi1xdWV1ZSIgdGl0bGU9ImdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19pbl9xdWV1ZcKgKCkiPmdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19pbl9xdWV1ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1xdWVyeS1sYXRlbmN5IiB0aXRsZT0iZ3N0X2hhcm5lc3NfcXVlcnlfbGF0ZW5jecKgKCkiPmdzdF9oYXJuZXNzX3F1ZXJ5X2xhdGVuY3k8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXVwc3RyZWFtLWxhdGVuY3kiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfdXBzdHJlYW1fbGF0ZW5jecKgKCkiPmdzdF9oYXJuZXNzX3NldF91cHN0cmVhbV9sYXRlbmN5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1wcm9wb3NlLWFsbG9jYXRvciIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9wcm9wb3NlX2FsbG9jYXRvcsKgKCkiPmdzdF9oYXJuZXNzX3NldF9wcm9wb3NlX2FsbG9jYXRvcjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1nZXQtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2hhcm5lc3NfZ2V0X2FsbG9jYXRvcsKgKCkiPmdzdF9oYXJuZXNzX2dldF9hbGxvY2F0b3I8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXNyYyIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9zcmPCoCgpIj5nc3RfaGFybmVzc19hZGRfc3JjPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zcmMtaGFybmVzcyIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9zcmNfaGFybmVzc8KgKCkiPmdzdF9oYXJuZXNzX2FkZF9zcmNfaGFybmVzczwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtc3JjLXBhcnNlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX3NyY19wYXJzZcKgKCkiPmdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2U8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC1mcm9tLXNyYyIgdGl0bGU9ImdzdF9oYXJuZXNzX3B1c2hfZnJvbV9zcmPCoCgpIj5nc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNyYy1jcmFuay1hbmQtcHVzaC1tYW55IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnnCoCgpIj5nc3RfaGFybmVzc19zcmNfY3JhbmtfYW5kX3B1c2hfbWFueTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNyYy1wdXNoLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3JjX3B1c2hfZXZlbnTCoCgpIj5nc3RfaGFybmVzc19zcmNfcHVzaF9ldmVudDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtc2luayIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9zaW5rwqAoKSI+Z3N0X2hhcm5lc3NfYWRkX3Npbms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXNpbmstaGFybmVzcyIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3PCoCgpIj5nc3RfaGFybmVzc19hZGRfc2lua19oYXJuZXNzPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zaW5rLXBhcnNlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX3NpbmtfcGFyc2XCoCgpIj5nc3RfaGFybmVzc19hZGRfc2lua19wYXJzZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoLXRvLXNpbmsiIHRpdGxlPSJnc3RfaGFybmVzc19wdXNoX3RvX3NpbmvCoCgpIj5nc3RfaGFybmVzc19wdXNoX3RvX3Npbms8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2luay1wdXNoLW1hbnkiIHRpdGxlPSJnc3RfaGFybmVzc19zaW5rX3B1c2hfbWFuecKgKCkiPmdzdF9oYXJuZXNzX3NpbmtfcHVzaF9tYW55PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZmluZC1lbGVtZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfZmluZF9lbGVtZW50wqAoKSI+Z3N0X2hhcm5lc3NfZmluZF9lbGVtZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldCIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldMKgKCkiPmdzdF9oYXJuZXNzX3NldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1nZXQiIHRpdGxlPSJnc3RfaGFybmVzc19nZXTCoCgpIj5nc3RfaGFybmVzc19nZXQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXByb2JlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX3Byb2JlwqAoKSI+Z3N0X2hhcm5lc3NfYWRkX3Byb2JlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXRocmVhZC1zdG9wIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wwqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtY3VzdG9tLXN0YXJ0IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX2N1c3RvbV9zdGFydMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19jdXN0b21fc3RhcnQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXN0YXRlY2hhbmdlLXN0YXJ0IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3N0YXRlY2hhbmdlX3N0YXJ0KCkiPmdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1zdGF0ZWNoYW5nZS1zdGFydC1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3N0YXRlY2hhbmdlX3N0YXJ0X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2Vfc3RhcnRfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1idWZmZXItc3RhcnQiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnQoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl9zdGFydF9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jIiB0aXRsZT0iR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jwqAoKSI+KkdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYzwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KTwvc3Bhbj7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1idWZmZXItd2l0aC1jYi1zdGFydCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0KCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXdpdGgtY2Itc3RhcnQtZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfd2l0aF9jYl9zdGFydF9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWV2ZW50LXN0YXJ0IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnQoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC1zdGFydC1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0X2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYyIgdGl0bGU9IkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jwqAoKSI+KkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWV2ZW50LXdpdGgtY2Itc3RhcnQiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0KCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC13aXRoLWNiLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXNlbmQtdXBzdHJlYW0tZXZlbnQtc3RhcnQiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF9zdGFydDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLXVwc3RyZWFtLWV2ZW50LXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfc3RhcnRfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkZWZpbmVfa2V5d29yZCI+I2RlZmluZTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3Mtc2VuZC11cHN0cmVhbS1ldmVudC13aXRoLWNiLXN0YXJ0IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3NlbmRfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0PC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQtd2l0aC1jYi1zdGFydC1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wcm9wZXJ0eS1zdGFydCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnQ8L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHJvcGVydHktc3RhcnQtZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3Byb3BlcnR5X3N0YXJ0X2Z1bGw8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXJlcXVlc3RwYWQtc3RhcnQiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydDwvYT48c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1yZXF1ZXN0cGFkLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3JlcXVlc3RwYWRfc3RhcnRfZnVsbDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3Mub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPkdzdEhhcm5lc3NUaHJlYWQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9jaGVjay9jaGVjay5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gaXMgbWVhbnQgdG8gbWFrZSB3cml0aW5nIHVuaXQgdGVzdCBmb3IgR1N0cmVhbWVyIG11Y2ggZWFzaWVyLgotSXQgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSB3YXkgb2YgdHJlYXRpbmcgYSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBhcyBhIGJsYWNrIGJveCwKLWRldGVybWluaXN0aWNhbGx5IGZlZWRpbmcgaXQgZGF0YSwgYW5kIGNvbnRyb2xsaW5nIHdoYXQgZGF0YSBpdCBvdXRwdXRzLjwvcD4KLTxwPlRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2YgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gaXMgdHdvICJmbG9hdGluZyIgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkczwvc3Bhbj48L2E+IHRoYXQgY29ubmVjdAotdG8gdGhlIGhhcm5lc3NlZCA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBzcmMgYW5kIHNpbmsgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkczwvc3Bhbj48L2E+IGxpa2Ugc286PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fCi0gX19fX18gICB8ICBfX19fXyAgICAgICAgICAgIF9fX19fICB8ICAgX19fX18KLXwgICAgIHwgIHwgfCAgICAgfCAgICAgICAgICB8ICAgICB8IHwgIHwgICAgIHwKLXwgc3JjIHwtLSstfCBzaW5rfCAgRWxlbWVudCB8IHNyYyB8LSstLXwgc2lua3wKLXxfX19fX3wgIHwgfF9fX19ffCAgICAgICAgICB8X19fX198IHwgIHxfX19fX3wKLSAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX3wKLQotPC9wcmU+Ci08cD5XaXRoIHRoaXMsIHlvdSBjYW4gbm93IHNpbXVsYXRlIGFueSBlbnZpcm9ubWVudCB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gbWlnaHQgZmluZAotaXRzZWxmIGluLiBCeSBzcGVjaWZ5aW5nIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvZiB0aGUgaGFybmVzcyA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRzPC9zcGFuPjwvYT4sIHVzaW5nCi1mdW5jdGlvbnMgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1zcmMtY2FwcyIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzKCk8L2NvZGU+PC9hPiBvciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1zaW5rLWNhcHMtc3RyIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2Fwc19zdHLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHNfc3RyKCk8L2NvZGU+PC9hPiwKLXlvdSBjYW4gdGVzdCBob3cgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBjYXBzIHNldHMuPC9wPgotPHA+WW91ciBoYXJuZXNzZWQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gY2FuIG9mIGNvdXJzZSBhbHNvIGJlIGEgYmluLCBhbmQgdXNpbmcKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LXBhcnNlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfbmV3X3BhcnNlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaGFybmVzc19uZXdfcGFyc2UoKTwvY29kZT48L2E+IHN1cHBvcnRpbmcgc3RhbmRhcmQgZ3N0LWxhdW5jaCBzeW50YXgsIHlvdSBjYW4KLWVhc2lseSB0ZXN0IGEgd2hvbGUgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LjwvcD4KLTxwPllvdSBjYW4gdGhlbiBnbyBvbiB0byBwdXNoIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcnM8L3NwYW4+PC9hPiBhbmQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50czwvc3Bhbj48L2E+IG9uIHRvIHRoZSBzcmNwYWQsCi11c2luZyBmdW5jdGlvbnMgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2giIHRpdGxlPSJnc3RfaGFybmVzc19wdXNowqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaGFybmVzc19wdXNoKCk8L2NvZGU+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVzaF9ldmVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3NfcHVzaF9ldmVudCgpPC9jb2RlPjwvYT4sIGFuZAotdGhlbiBwdWxsIHRoZW0gb3V0IHRvIGV4YW1pbmUgdGhlbSB3aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3B1bGzCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9oYXJuZXNzX3B1bGwoKTwvY29kZT48L2E+IGFuZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdWxsLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVsbF9ldmVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3NfcHVsbF9ldmVudCgpPC9jb2RlPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08YSBuYW1lPSJpZC0xLjIuNy42LjYuOCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZcKgMS7CoEEgc2ltcGxlIGJ1ZmZlci1pbiBidWZmZXItb3V0IGV4YW1wbGU8L2I+PC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTkKLTIwCi0yMQotMjIKLTIzCi0yNAotMjUKLTI2Ci0yNzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtnc3QvY2hlY2svZ3N0aGFybmVzcy5oJmd0Ozwvc3Bhbj4KLUdzdEhhcm5lc3MgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotR3N0QnVmZmVyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmluX2J1ZjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotR3N0QnVmZmVyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPm91dF9idWY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIGF0dGFjaCB0aGUgaGFybmVzcyB0byB0aGUgc3JjIGFuZCBzaW5rIHBhZCBvZiBHc3RRdWV1ZTwvc3Bhbj4KLWggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldyI+Z3N0X2hhcm5lc3NfbmV3PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7cXVldWUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8gd2UgbXVzdCBzcGVjaWZ5IGEgY2FwcyBiZWZvcmUgcHVzaGluZyBidWZmZXJzPC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXNyYy1jYXBzLXN0ciI+Z3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0cjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7bXljYXBzJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIGNyZWF0ZSBhIGJ1ZmZlciBvZiBzaXplIDQyPC9zcGFuPgotaW5fYnVmIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1jcmVhdGUtYnVmZmVyIj5nc3RfaGFybmVzc19jcmVhdGVfYnVmZmVyPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj40Mjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLyBwdXNoIHRoZSBidWZmZXIgaW50byB0aGUgcXVldWU8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoIj5nc3RfaGFybmVzc19wdXNoPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBpbl9idWY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLyBwdWxsIHRoZSBidWZmZXIgZnJvbSB0aGUgcXVldWU8L3NwYW4+Ci1vdXRfYnVmIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdWxsIj5nc3RfaGFybmVzc19wdWxsPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vIHZhbGlkYXRlIHRoZSBidWZmZXIgaW4gaXMgdGhlIHNhbWUgYXMgYnVmZmVyIG91dDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+ZmFpbF91bmxlc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmluX2J1ZiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PT08L3NwYW4+IG91dF9idWY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLyBjbGVhbnVwPC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI2dzdC1idWZmZXItdW5yZWYiPmdzdF9idWZmZXJfdW5yZWY8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5vdXRfYnVmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdGVhcmRvd24iPmdzdF9oYXJuZXNzX3RlYXJkb3duPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48cD5Bbm90aGVyIG1haW4gZmVhdHVyZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gaXMgaXRzIGludGVncmF0aW9uIHdpdGggdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPi4gT3BlcmF0aW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiBjYW4gYmUgdmVyeSBjaGFsbGVuZ2luZywgYnV0Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiBzaW1wbGlmaWVzIHNvbWUgb2YgdGhlIG1vc3QgZGVzaXJlZCBhY3Rpb25zIGEgbG90LCBsaWtlIHdhbnRpbmcKLXRvIG1hbnVhbGx5IGFkdmFuY2UgdGhlIGNsb2NrIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgcmVsZWFzaW5nIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4KLXRoYXQgaXMgd2FpdGluZywgd2l0aCBmdW5jdGlvbnMgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWNyYW5rLXNpbmdsZS1jbG9jay13YWl0IiB0aXRsZT0iZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0KCk8L2NvZGU+PC9hPi48L3A+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiBhbHNvIHN1cHBvcnRzIHN1Yi1oYXJuZXNzZXMsIGFzIGEgd2F5IG9mIGdlbmVyYXRpbmcgYW5kCi12YWxpZGF0aW5nIGRhdGEuIEEgc3ViLWhhcm5lc3MgaXMgYW5vdGhlciA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiB0aGF0IGlzIG1hbmFnZWQgYnkKLXRoZSAicGFyZW50IiBoYXJuZXNzLCBhbmQgY2FuIGVpdGhlciBiZSBjcmVhdGVkIGJ5IHVzaW5nIHRoZSBzdGFuZGFyZAotZ3N0X2hhcm5lc3NfbmV3IHR5cGUgZnVuY3Rpb25zIGRpcmVjdGx5IG9uIHRoZSAoR3N0SGFybmVzcyAqKS0mZ3Q7c3JjX2hhcm5lc3MsCi1vciB1c2luZyB0aGUgbXVjaCBtb3JlIGNvbnZlbmllbnQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtc3JjIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX3NyY8KgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3NfYWRkX3NyYygpPC9jb2RlPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXNpbmstcGFyc2UiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfc2lua19wYXJzZcKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3NfYWRkX3NpbmtfcGFyc2UoKTwvY29kZT48L2E+LiBJZiB5b3UgaGF2ZSBhIGRlY29kZXItZWxlbWVudCB5b3Ugd2FudCB0byB0ZXN0LAotKGxpa2UgdnA4ZGVjKSBpdCBjYW4gYmUgdmVyeSB1c2VmdWwgdG8gYWRkIGEgc3JjLWhhcm5lc3Mgd2l0aCBib3RoIGEKLXNyYy1lbGVtZW50ICh2aWRlb3Rlc3RzcmMpIGFuZCBhbiBlbmNvZGVyICh2cDhlbmMpIHRvIGZlZWQgdGhlIGRlY29kZXIgZGF0YQotd2l0aCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMsIGJ5IHNpbXBseSBkb2luZzo8L3A+Ci08ZGl2IGNsYXNzPSJleGFtcGxlIj4KLTxhIG5hbWU9ImlkLTEuMi43LjYuNi4xMSI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZcKgMi7CoDwvYj48L3A+Ci08ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5Hc3RIYXJuZXNzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBoIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXciPmdzdF9oYXJuZXNzX25ldzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7dnA4ZGVjJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zcmMtcGFyc2UiPmdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5oPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3ZpZGVvdGVzdHNyYyBpcy1saXZlPTEgISB2cDhlbmMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IFRSVUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+PHA+YW5kIHRoZW4gZmVlZGluZyBpdCBkYXRhIHdpdGg6PC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZSI+Ci08YSBuYW1lPSJpZC0xLjIuNy42LjYuMTMiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkV4YW1wbGXCoDMuwqA8L2I+PC9wPgotPGRpdiBjbGFzcz0iZXhhbXBsZS1jb250ZW50cyI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC1mcm9tLXNyYyI+Z3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxiciBjbGFzcz0iZXhhbXBsZS1icmVhayI+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLW5ldy1lbXB0eSI+PC9hPjxoMz5nc3RfaGFybmVzc19uZXdfZW1wdHnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX25ld19lbXB0eSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IGVtcHR5IGhhcm5lc3MuIFVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1lbGVtZW50LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxsKCk8L2NvZGU+PC9hPiB0byBhZGQKLWFuIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGl0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtbmV3LWVtcHR5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBoYXJuZXNzIGNvdWxkCi1ub3QgYmUgY3JlYXRlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtbmV3LWZ1bGwiPjwvYT48aDM+Z3N0X2hhcm5lc3NfbmV3X2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX25ld19mdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKmhzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X3NpbmtwYWRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiAqaHNpbms8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X3NyY3BhZF9uYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgaGFybmVzcy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLW5ldy1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGF0dGFjaCB0aGUgaGFybmVzcyB0byAodHJhbnNmZXIgbm9uZSk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aHNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gZGVzY3JpYmluZyB0aGUgaGFybmVzcyBzcmNwYWQuCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2lsbCBub3QgY3JlYXRlIGEgaGFybmVzcyBzcmNwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfc2lua3BhZF9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gd2l0aCB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudAotc2lua3BhZCB0aGF0IGlzIHRoZW4gbGlua2VkIHRvIHRoZSBoYXJuZXNzIHNyY3BhZC4gQ2FuIGJlIGEgc3RhdGljIG9yIHJlcXVlc3QKLW9yIGEgc29tZXRpbWVzIHBhZCB0aGF0IGhhcyBiZWVuIGFkZGVkLiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2lsbCBub3QgZ2V0L3JlcXVlc3QgYSBzaW5rcGFkCi1mcm9tIHRoZSBlbGVtZW50LiAoTGlrZSBpZiB0aGUgZWxlbWVudCBpcyBhIHNyYy4pLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gZGVzY3JpYmluZyB0aGUgaGFybmVzcyBzaW5rcGFkLgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHdpbGwgbm90IGNyZWF0ZSBhIGhhcm5lc3Mgc2lua3BhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9zcmNwYWRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IHdpdGggdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKLXNyY3BhZCB0aGF0IGlzIHRoZW4gbGlua2VkIHRvIHRoZSBoYXJuZXNzIHNpbmtwYWQsIHNpbWlsYXIgdG8gdGhlCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZWxlbWVudF9zaW5rcGFkX25hbWU8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLW5ldy1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBoYXJuZXNzIGNvdWxkCi1ub3QgYmUgY3JlYXRlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtbmV3LXdpdGgtZWxlbWVudCI+PC9hPjxoMz5nc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+wqAqCi1nc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmVsZW1lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmVsZW1lbnRfc2lua3BhZF9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X3NyY3BhZF9uYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgaGFybmVzcy4gV29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19uZXdfZnVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3NfbmV3X2Z1bGwoKTwvY29kZT48L2E+LCBvbmx5Ci10aGF0IGdlbmVyaWMgcGFkdGVtcGxhdGVzIGFyZSB1c2VkIGZvciB0aGUgaGFybmVzcyBzcmMgYW5kIHNpbmtwYWRzLCB3aGljaAotd2lsbCBiZSBzdWZmaWNpZW50IGluIG1vc3QgdXNlY2FzZXMuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1uZXctd2l0aC1lbGVtZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHRvIGF0dGFjaCB0aGUgaGFybmVzcyB0byAodHJhbnNmZXIgbm9uZSk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9zaW5rcGFkX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50Ci1zaW5rcGFkIHRoYXQgaXMgdGhlbiBsaW5rZWQgdG8gdGhlIGhhcm5lc3Mgc3JjcGFkLiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZG9lcyBub3QgYXR0YWNoIGEKLXNpbmtwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfc3JjcGFkX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50Ci1zcmNwYWQgdGhhdCBpcyB0aGVuIGxpbmtlZCB0byB0aGUgaGFybmVzcyBzaW5rcGFkLiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZG9lcyBub3QgYXR0YWNoIGEKLXNyY3BhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLW5ldy13aXRoLWVsZW1lbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIGhhcm5lc3MgY291bGQKLW5vdCBiZSBjcmVhdGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1uZXctd2l0aC1wYWRuYW1lcyI+PC9hPjxoMz5nc3RfaGFybmVzc19uZXdfd2l0aF9wYWRuYW1lc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPsKgKgotZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZWxlbWVudF9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZWxlbWVudF9zaW5rcGFkX25hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X3NyY3BhZF9uYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgaGFybmVzcy4gV29ya3MgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldy13aXRoLWVsZW1lbnQiIHRpdGxlPSJnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50wqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50KCk8L2NvZGU+PC9hPiwKLWV4Y2VwdCB5b3Ugc3BlY2lmeSB0aGUgZmFjdG9yeW5hbWUgb2YgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1uZXctd2l0aC1wYWRuYW1lcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50X25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IGRlc2NyaWJpbmcgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9zaW5rcGFkX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50Ci1zaW5rcGFkIHRoYXQgaXMgdGhlbiBsaW5rZWQgdG8gdGhlIGhhcm5lc3Mgc3JjcGFkLiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZG9lcyBub3QgYXR0YWNoIGEKLXNpbmtwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfc3JjcGFkX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50Ci1zcmNwYWQgdGhhdCBpcyB0aGVuIGxpbmtlZCB0byB0aGUgaGFybmVzcyBzaW5rcGFkLiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gZG9lcyBub3QgYXR0YWNoIGEKLXNyY3BhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLW5ldy13aXRoLXBhZG5hbWVzLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRoZSBoYXJuZXNzIGNvdWxkCi1ub3QgYmUgY3JlYXRlZC4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtbmV3LXdpdGgtdGVtcGxhdGVzIj48L2E+PGgzPmdzdF9oYXJuZXNzX25ld193aXRoX3RlbXBsYXRlc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPsKgKgotZ3N0X2hhcm5lc3NfbmV3X3dpdGhfdGVtcGxhdGVzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmVsZW1lbnRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkVGVtcGxhdGUuaHRtbCNHc3RTdGF0aWNQYWRUZW1wbGF0ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0YXRpY1BhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKmhzcmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICpoc2luazwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IGhhcm5lc3MsIGxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX25ld19mdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaGFybmVzc19uZXdfZnVsbCgpPC9jb2RlPjwvYT4sIGV4Y2VwdCBpdAotYXNzdW1lcyB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gc2lua3BhZCBpcyBuYW1lZCAic2luayIgYW5kIHNyY3BhZCBpcyBuYW1lZCAic3JjIjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtbmV3LXdpdGgtdGVtcGxhdGVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gZGVzY3JpYmluZyB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiBkZXNjcmliaW5nIHRoZSBoYXJuZXNzIHNyY3BhZC4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aWxsIG5vdCBjcmVhdGUgYSBoYXJuZXNzIHNyY3BhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+IGRlc2NyaWJpbmcgdGhlIGhhcm5lc3Mgc2lua3BhZC4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aWxsIG5vdCBjcmVhdGUgYSBoYXJuZXNzIHNpbmtwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1uZXctd2l0aC10ZW1wbGF0ZXMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIGhhcm5lc3MgY291bGQKLW5vdCBiZSBjcmVhdGVkLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1uZXciPjwvYT48aDM+Z3N0X2hhcm5lc3NfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+wqAqCi1nc3RfaGFybmVzc19uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZWxlbWVudF9uYW1lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgaGFybmVzcy4gV29ya3MgbGlrZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldy13aXRoLXBhZG5hbWVzIiB0aXRsZT0iZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXPCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzKCk8L2NvZGU+PC9hPiwgZXhjZXB0IGl0Ci1hc3N1bWVzIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBzaW5rcGFkIGlzIG5hbWVkICJzaW5rIiBhbmQgc3JjcGFkIGlzIG5hbWVkICJzcmMiPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gZGVzY3JpYmluZyB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgaGFybmVzcyBjb3VsZAotbm90IGJlIGNyZWF0ZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLW5ldy1wYXJzZSI+PC9hPjxoMz5nc3RfaGFybmVzc19uZXdfcGFyc2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX25ld19wYXJzZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpsYXVuY2hsaW5lPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNyZWF0ZXMgYSBuZXcgaGFybmVzcywgcGFyc2luZyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxhdW5jaGxpbmU8L2NvZGU+PC9lbT4KLSBhbmQgcHV0dGluZyB0aGF0IGluIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QmluPC9zcGFuPjwvYT4sCi1hbmQgdGhlbiBhdHRjaGVzIHRoZSBoYXJuZXNzIHRvIHRoZSBiaW4uPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1uZXctcGFyc2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxhdW5jaGxpbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IGRlc2NyaWJpbmcgYSBnc3QtbGF1bmNoIHR5cGUgbGluZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLW5ldy1wYXJzZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiB0aGUgaGFybmVzcyBjb3VsZAotbm90IGJlIGNyZWF0ZWQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWFkZC1lbGVtZW50LWZ1bGwiPjwvYT48aDM+Z3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X2Z1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiAqZWxlbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICpoc3JjPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X3NpbmtwYWRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZFRlbXBsYXRlLmh0bWwjR3N0U3RhdGljUGFkVGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvc3Bhbj48L2E+ICpoc2luazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZWxlbWVudF9zcmNwYWRfbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZGRzIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gYW4gZW1wdHkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWFkZC1lbGVtZW50LWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gYWRkIHRvIHRoZSBoYXJuZXNzICh0cmFuc2ZlciBub25lKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiBkZXNjcmliaW5nIHRoZSBoYXJuZXNzIHNyY3BhZC4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aWxsIG5vdCBjcmVhdGUgYSBoYXJuZXNzIHNyY3BhZC4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9zaW5rcGFkX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50Ci1zaW5rcGFkIHRoYXQgaXMgdGhlbiBsaW5rZWQgdG8gdGhlIGhhcm5lc3Mgc3JjcGFkLiBDYW4gYmUgYSBzdGF0aWMgb3IgcmVxdWVzdAotb3IgYSBzb21ldGltZXMgcGFkIHRoYXQgaGFzIGJlZW4gYWRkZWQuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aWxsIG5vdCBnZXQvcmVxdWVzdCBhIHNpbmtwYWQKLWZyb20gdGhlIGVsZW1lbnQuIChMaWtlIGlmIHRoZSBlbGVtZW50IGlzIGEgc3JjLikuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmhzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFN0YXRpY1BhZFRlbXBsYXRlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RhdGljUGFkVGVtcGxhdGU8L3NwYW4+PC9hPiBkZXNjcmliaW5nIHRoZSBoYXJuZXNzIHNpbmtwYWQuCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gd2lsbCBub3QgY3JlYXRlIGEgaGFybmVzcyBzaW5rcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50X3NyY3BhZF9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gd2l0aCB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudAotc3JjcGFkIHRoYXQgaXMgdGhlbiBsaW5rZWQgdG8gdGhlIGhhcm5lc3Mgc2lua3BhZCwgc2ltaWxhciB0byB0aGUKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50X3NpbmtwYWRfbmFtZTwvY29kZT48L2VtPgotLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1hZGQtcGFyc2UiPjwvYT48aDM+Z3N0X2hhcm5lc3NfYWRkX3BhcnNlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2hhcm5lc3NfYWRkX3BhcnNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbGF1bmNobGluZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QYXJzZXMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sYXVuY2hsaW5lPC9jb2RlPjwvZW0+Ci0gYW5kIHB1dHMgdGhhdCBpbiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJpbjwvc3Bhbj48L2E+LAotYW5kIHRoZW4gYXR0Y2hlcyB0aGUgc3VwcGxpZWQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gdG8gdGhlIGJpbi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWFkZC1wYXJzZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5sYXVuY2hsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiBkZXNjcmliaW5nIGEgZ3N0LWxhdW5jaCB0eXBlIGxpbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtdGVhcmRvd24iPjwvYT48aDM+Z3N0X2hhcm5lc3NfdGVhcmRvd27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc190ZWFyZG93biAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRlYXJzIGRvd24gYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R3N0SGFybmVzczwvY29kZT48L2VtPgotLCBmcmVlaW5nIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIHVzaW5nIGl0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtdGVhcmRvd24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1hZGQtZWxlbWVudC1zcmMtcGFkIj48L2E+PGgzPmdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NyY19wYWTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19hZGRfZWxlbWVudF9zcmNfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyY3BhZDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5MaW5rcyB0aGUgc3BlY2lmZWQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5Hc3RIYXJuZXNzPC9jb2RlPjwvZW0+Ci0gc2lua3BhZC4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmCi1wZXJoYXBzIHRoZSBzcmNwYWQgZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBvZiBjcmVhdGluZyB0aGUgaGFybmVzcywKLWxpa2UgYSBkZW11eGVyIHRoYXQgcHJvdmlkZXMgYSBzb21ldGltZXMtcGFkIGFmdGVyIHJlY2VpdmluZyBkYXRhLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYWRkLWVsZW1lbnQtc3JjLXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IHRvIGxpbmsgdG8gdGhlIGhhcm5lc3Mgc2lua3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1hZGQtZWxlbWVudC1zaW5rLXBhZCI+PC9hPjxoMz5nc3RfaGFybmVzc19hZGRfZWxlbWVudF9zaW5rX3BhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NpbmtfcGFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpzaW5rcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkxpbmtzIHRoZSBzcGVjaWZlZCA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdzdEhhcm5lc3M8L2NvZGU+PC9lbT4KLSBzcmNwYWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1hZGQtZWxlbWVudC1zaW5rLXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaW5rcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiB0byBsaW5rIHRvIHRoZSBoYXJuZXNzIHNyY3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtc3JjLWNhcHMiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R3N0SGFybmVzczwvY29kZT48L2VtPgotIHNyY3BhZCBjYXBzLiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgYW55IGJ1ZmZlcnMKLWNhbiBsZWdhbGx5IGJlIHB1c2hlZCBmcm9tIHRoZSBoYXJuZXNzIHRvIHRoZSBlbGVtZW50LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0LXNyYy1jYXBzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBzZXQgb24gdGhlIGhhcm5lc3Mgc3JjcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0LXNpbmstY2FwcyI+PC9hPjxoMz5nc3RfaGFybmVzc19zZXRfc2lua19jYXBzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2FwcyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5Hc3RIYXJuZXNzPC9jb2RlPjwvZW0+Ci0gc2lua3BhZCBjYXBzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0LXNpbmstY2Fwcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc2V0IG9uIHRoZSBoYXJuZXNzIHNpbmtwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtY2FwcyI+PC9hPjxoMz5nc3RfaGFybmVzc19zZXRfY2Fwc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX3NldF9jYXBzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICppbjwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKm91dDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R3N0SGFybmVzczwvY29kZT48L2VtPgotIHNyY3BhZCBhbmQgc2lua3BhZCBjYXBzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0LWNhcHMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBzZXQgb24gdGhlIGhhcm5lc3Mgc3JjcGFkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc2V0IG9uIHRoZSBoYXJuZXNzIHNpbmtwYWQuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtc3JjLWNhcHMtc3RyIj48L2E+PGgzPmdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKnN0cjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R3N0SGFybmVzczwvY29kZT48L2VtPgotIHNyY3BhZCBjYXBzIHVzaW5nIGEgc3RyaW5nLiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUKLWFueSBidWZmZXJzIGNhbiBsZWdhbGx5IGJlIHB1c2hlZCBmcm9tIHRoZSBoYXJuZXNzIHRvIHRoZSBlbGVtZW50LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0LXNyYy1jYXBzLXN0ci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zdHI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nY2hhcjwvY29kZT48L2VtPgotZGVzY3JpYmluZyBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHNldCBvbiB0aGUgaGFybmVzcyBzcmNwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0LXNpbmstY2Fwcy1zdHIiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2Fwc19zdHLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19zZXRfc2lua19jYXBzX3N0ciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc3RyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5Hc3RIYXJuZXNzPC9jb2RlPjwvZW0+Ci0gc2lua3BhZCBjYXBzIHVzaW5nIGEgc3RyaW5nLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0LXNpbmstY2Fwcy1zdHIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2NoYXI8L2NvZGU+PC9lbT4KLWRlc2NyaWJpbmcgYSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiB0byBzZXQgb24gdGhlIGhhcm5lc3Mgc2lua3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtY2Fwcy1zdHIiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc2V0X2NhcHNfc3RywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2hhcm5lc3Nfc2V0X2NhcHNfc3RyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqaW48L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqb3V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5Hc3RIYXJuZXNzPC9jb2RlPjwvZW0+Ci0gc3JjcGFkIGFuZCBzaW5rcGFkIGNhcHMgdXNpbmcgc3RyaW5ncy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNldC1jYXBzLXN0ci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdjaGFyPC9jb2RlPjwvZW0+Ci1kZXNjcmliaW5nIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gdG8gc2V0IG9uIHRoZSBoYXJuZXNzIHNyY3BhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vdXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nY2hhcjwvY29kZT48L2VtPgotZGVzY3JpYmluZyBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IHRvIHNldCBvbiB0aGUgaGFybmVzcyBzaW5rcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXVzZS1zeXN0ZW1jbG9jayI+PC9hPjxoMz5nc3RfaGFybmVzc191c2Vfc3lzdGVtY2xvY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc191c2Vfc3lzdGVtY2xvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSBzeXN0ZW0gPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4gb24gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5Hc3RIYXJuZXNzPC9jb2RlPjwvZW0+Ci0gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXVzZS1zeXN0ZW1jbG9jay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXVzZS10ZXN0Y2xvY2siPjwvYT48aDM+Z3N0X2hhcm5lc3NfdXNlX3Rlc3RjbG9ja8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXRzIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXVzZS10ZXN0Y2xvY2sucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1nZXQtdGVzdGNsb2NrIj48L2E+PGgzPmdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2vCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0VGVzdENsb2NrPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+LiBVc2VmdWwgaWYgc3BlY2lmaWMgb3BlcmF0aW9ucyBvbiB0aGUgdGVzdGNsb2NrIGlzCi1uZWVkZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1nZXQtdGVzdGNsb2NrLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWdldC10ZXN0Y2xvY2sucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+LCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGhlIHRlc3RjbG9jayBpcyBub3QKLXByZXNlbnQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNldC10aW1lIj48L2E+PGgzPmdzdF9oYXJuZXNzX3NldF90aW1lwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19zZXRfdGltZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdGltZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BZHZhbmNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiB0byBhIHNwZWNpZmljIHRpbWUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtdGltZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gdG8gYWR2YW5jZSB0aGUgY2xvY2sgdG88L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNldC10aW1lLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Z2Jvb2xlYW48L2NvZGU+PC9lbT4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBpZiB0aGUgdGltZSBjb3VsZCBiZSBzZXQuIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIG5vdC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtd2FpdC1mb3ItY2xvY2staWQtd2FpdHMiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IHdhaXRzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiB0aW1lb3V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPldhaXRzIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dGltZW91dDwvY29kZT48L2VtPgotIHNlY29uZHMgdW50aWwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndhaXRzPC9jb2RlPjwvZW0+Ci0gbnVtYmVyIG9mIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHdhaXRzIGlzCi1yZWdpc3RlcmVkIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+LiBVc2VmdWwgZm9yIHdyaXRpbmcgZGV0ZXJtaW5pc3RpYyB0ZXN0cywKLXdoZXJlIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGFuIGV4cGVjdGVkIG51bWJlciBvZiB3YWl0cyBoYXZlIGJlZW4KLXJlYWNoZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy13YWl0LWZvci1jbG9jay1pZC13YWl0cy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD53YWl0czwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gZGVzY3JpYmluZyB0aGUgbnVtYmVycyBvZiA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiByZWdpc3RlcmVkIHdpdGgKLXRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50aW1lb3V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBkZXNjcmliaW5nIGhvdyBtYW55IHNlY29uZHMgdG8gd2FpdCBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPndhaXRzPC9jb2RlPjwvZW0+Ci10byBiZSB0cnVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy13YWl0LWZvci1jbG9jay1pZC13YWl0cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdib29sZWFuPC9jb2RlPjwvZW0+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlIHdhaXRzIGhhdmUgYmVlbiByZWdpc3RlcmVkLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBub3QuCi0oQ291bGQgYmUgdGhhdCBpdCB0aW1lZCBvdXQgd2FpdGluZyBvciB0aGF0IG1vcmUgd2FpdHMgdGhlbiB3YWl0cyB3YXMgZm91bmQpPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWNyYW5rLXNpbmdsZS1jbG9jay13YWl0Ij48L2E+PGgzPmdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgImNyYW5rIiBjb25zaXN0cyBvZiB0aHJlZSBzdGVwczoKLTE6IFdhaXQgZm9yIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEPC9zcGFuPjwvYT4gdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPi4KLTI6IEFkdmFuY2UgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlc3RDbG9jazwvc3Bhbj48L2E+IHRvIHRoZSB0aW1lIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiBpcyB3YWl0aW5nIGZvci4KLTM6IFJlbGVhc2UgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja0lEIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tJRDwvc3Bhbj48L2E+IHdhaXQuCi1Ub2dldGhlciwgdGhpcyBwcm92aWRlcyBhbiBlYXN5IHdheSB0byBub3QgaGF2ZSB0byB0aGluayBhYm91dCB0aGUgZGV0YWlscwotYXJvdW5kIGNsb2NrcyBhbmQgdGltZSwgYnV0IHN0aWxsIGJlaW5nIGFibGUgdG8gd3JpdGUgZGV0ZXJtaW5pc3RpYyB0ZXN0cwotdGhhdCBhcmUgZGVwZW5kYW50IG9uIHRoaXMuIEEgImNyYW5rIiBjYW4gYmUgdGhvdWdoIG9mIGFzIHRoZSBub3Rpb24gb2YKLW1hbnVhbGx5IGRyaXZpbmcgdGhlIGNsb2NrIGZvcndhcmQgdG8gaXRzIG5leHQgbG9naWNhbCBzdGVwLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtY3Jhbmstc2luZ2xlLWNsb2NrLXdhaXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtY3Jhbmstc2luZ2xlLWNsb2NrLXdhaXQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5nYm9vbGVhbjwvY29kZT48L2VtPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSAiY3JhbmsiIHdhcyBzdWNjZXNzZnVsLCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+RkFMU0U8L2NvZGU+PC9hPiBpZiBub3QuPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWNyYW5rLW11bHRpcGxlLWNsb2NrLXdhaXRzIj48L2E+PGgzPmdzdF9oYXJuZXNzX2NyYW5rX211bHRpcGxlX2Nsb2NrX3dhaXRzwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19jcmFua19tdWx0aXBsZV9jbG9ja193YWl0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiB3YWl0czwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TaW1pbGFyIHRvIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtY3Jhbmstc2luZ2xlLWNsb2NrLXdhaXQiIHRpdGxlPSJnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQoKTwvY29kZT48L2E+LCB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0byB1c2UKLWlmIHlvdXIgaGFybmVzc2VkIGVsZW1lbnQocykgYXJlIHVzaW5nIG1vcmUgdGhlbiBvbmUgZ3N0X2Nsb2NrX2lkX3dhaXQuCi1GYWlsaW5nIHRvIGRvIHNvIGNhbiAoYW5kIHdpbGwpIG1ha2UgaXQgcmFjeSB3aGljaCA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tJRCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrSUQ8L3NwYW4+PC9hPiB5b3UgYWN0dWFsbHkKLWFyZSByZWxlYXNpbmcsIHdoZXJlIGFzIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm9jZXNzIGFsbCB0aGUgd2FpdHMgYXQgdGhlCi1zYW1lIHRpbWUsIGVuc3VyaW5nIHRoYXQgb25lIHRocmVhZCBjYW4ndCByZWdpc3RlciBhbm90aGVyIHdhaXQgYmVmb3JlCi1ib3RoIGFyZSByZWxlYXNlZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWNyYW5rLW11bHRpcGxlLWNsb2NrLXdhaXRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPndhaXRzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBkZXNjcmliaW5nIHRoZSBudW1iZXIgb2YgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrSUQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja0lEczwvc3Bhbj48L2E+IHRvIGNyYW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1jcmFuay1tdWx0aXBsZS1jbG9jay13YWl0cy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmdib29sZWFuPC9jb2RlPjwvZW0+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gaWYgdGhlICJjcmFuayIgd2FzIHN1Y2Nlc3NmdWwsIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5GQUxTRTwvY29kZT48L2E+IGlmIG5vdC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcGxheSI+PC9hPjxoMz5nc3RfaGFybmVzc19wbGF5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2hhcm5lc3NfcGxheSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoaXMgd2lsbCBzZXQgdGhlIGhhcm5lc3NlZCA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0byA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtUExBWUlORzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX1BMQVlJTkc8L2NvZGU+PC9hPi4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudHM8L3NwYW4+PC9hPiB3aXRob3V0IGEgc2luay08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBhbmQgd2l0aCB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR1NULUVMRU1FTlQtRkxBRy1TT1VSQ0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FTEVNRU5UX0ZMQUdfU09VUkNFPC9jb2RlPjwvYT4KLWZsYWcgc2V0IGlzIGNvbmNpZGVyZWQgYSBzcmMgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4KLU5vbi1zcmMgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50czwvc3Bhbj48L2E+IChsaWtlIHNpbmtzIGFuZCBmaWx0ZXJzKSBhcmUgYXV0b21hdGljYWxseSBzZXQgdG8KLXBsYXlpbmcgYnkgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+LCBidXQgc3JjIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudHM8L3NwYW4+PC9hPiBhcmUgbm90IHRvIGF2b2lkIHRoZW0KLXN0YXJ0aW5nIHRvIHByb2R1Y2UgYnVmZmVycy4KLUhlbmNlLCBmb3Igc3JjIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHlvdSBtdXN0IGNhbGwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wbGF5IiB0aXRsZT0iZ3N0X2hhcm5lc3NfcGxhecKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3NfcGxheSgpPC9jb2RlPjwvYT4gZXhwbGljaXRseS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXBsYXkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtYmxvY2tpbmctcHVzaC1tb2RlIj48L2E+PGgzPmdzdF9oYXJuZXNzX3NldF9ibG9ja2luZ19wdXNoX21vZGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19zZXRfYmxvY2tpbmdfcHVzaF9tb2RlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0dGluZyB0aGlzIHdpbGwgbWFrZSB0aGUgaGFybmVzcyBibG9jayBpbiB0aGUgY2hhaW4tZnVuY3Rpb24sIGFuZAotdGhlbiByZWxlYXNlIHdoZW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVsbMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2hhcm5lc3NfcHVsbCgpPC9jb2RlPjwvYT4gb3IgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy10cnktcHVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3RyeV9wdWxswqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfaGFybmVzc190cnlfcHVsbCgpPC9jb2RlPjwvYT4gaXMgY2FsbGVkLgotQ2FuIGJlIHVzZWZ1bCB3aGVuIHdhbnRpbmcgdG8gY29udHJvbCBhIHNyYy1lbGVtZW50IHRoYXQgaXMgbm90IGltcGxlbWVudGluZwotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI2dzdC1jbG9jay1pZC13YWl0Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jbG9ja19pZF93YWl0KCk8L2NvZGU+PC9hPiBzbyBpdCBjYW4ndCBiZSBjb250cm9sbGVkIGJ5IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPiwgc2luY2UKLWl0IG90aGVyd2lzZSB3b3VsZCBwcm9kdWNlIGJ1ZmZlcnMgYXMgZmFzdCBhcyBwb3NzaWJsZS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNldC1ibG9ja2luZy1wdXNoLW1vZGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtZm9yd2FyZGluZyI+PC9hPjxoMz5nc3RfaGFybmVzc19zZXRfZm9yd2FyZGluZ8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX3NldF9mb3J3YXJkaW5nICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGZvcndhcmRpbmc8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QXMgYSBjb252ZW5pZW5jZSwgYSBzcmMtaGFybmVzcyB3aWxsIGZvcndhcmQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dTVC1FVkVOVC1TVFJFQU0tU1RBUlQ6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ8L2NvZGU+PC9hPiwKLTxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtQ0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9FVkVOVF9DQVBTPC9jb2RlPjwvYT4gYW5kIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHU1QtRVZFTlQtU0VHTUVOVDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX1NFR01FTlQ8L2NvZGU+PC9hPiB0byB0aGUgbWFpbi1oYXJuZXNzIGlmIGZvcndhcmRpbmcKLWlzIGVuYWJsZWQsIGFuZCBmb3J3YXJkIGFueSBzdGlja3ktZXZlbnRzIGZyb20gdGhlIG1haW4taGFybmVzcyB0bwotdGhlIHNpbmstaGFybmVzcy4gSXQgd2lsbCBhbHNvIGZvcndhcmQgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UXVlcnkuaHRtbCNHU1QtUVVFUlktQUxMT0NBVElPTjpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1FVRVJZX0FMTE9DQVRJT048L2NvZGU+PC9hPi48L3A+Ci08cD5JZiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCB0aGUgdXNlciB3aWxsIGhhdmUgdG8gZWl0aGVyIG1hbnVhbGx5IHB1c2gKLXRoZXNlIGV2ZW50cyBmcm9tIHRoZSBzcmMtaGFybmVzcyB1c2luZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNyYy1wdXNoLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3JjX3B1c2hfZXZlbnTCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50KCk8L2NvZGU+PC9hPiwgb3IKLWNyZWF0ZSBhbmQgcHVzaCB0aGVtIG1hbnVhbGx5LiBXaGlsZSB0aGlzIHdpbGwgYWxsb3cgZnVsbCBjb250cm9sIGFuZAotaW5zcGVjdGlvbiBvZiB0aGVzZSBldmVudHMsIGZvciB0aGUgbW9zdCBjYXNlcyBoYXZpbmcgZm9yd2FyZGluZyBlbmFibGVkCi13aWxsIGJlIHN1ZmZpY2llbnQgd2hlbiB3cml0aW5nIGEgdGVzdCB3aGVyZSB0aGUgc3JjLWhhcm5lc3MnIG1haW4gZnVuY3Rpb24KLWlzIHByb3ZpZGluZyBkYXRhIGZvciB0aGUgbWFpbi1oYXJuZXNzLjwvcD4KLTxwPkZvcndhcmRpbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0LWZvcndhcmRpbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zm9yd2FyZGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gdG8gZW5hYmxlL2Rpc2FibGUgZm9yd2FyZGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1jcmVhdGUtYnVmZmVyIj48L2E+PGgzPmdzdF9oYXJuZXNzX2NyZWF0ZV9idWZmZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX2NyZWF0ZV9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFsbG9jYXRlcyBhIGJ1ZmZlciB1c2luZyBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyUG9vbC5odG1sI0dzdEJ1ZmZlclBvb2wtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyUG9vbDwvc3Bhbj48L2E+IGlmIHByZXNlbnQsIG9yIGVsc2UgdXNpbmcgdGhlCi1jb25maWd1cmVkIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+IGFuZCA8YSBocmVmPSIuLi9odG1sL0dzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdGlvblBhcmFtczwvc3Bhbj48L2E+PC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1jcmVhdGUtYnVmZmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3NpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nc2l6ZTwvc3Bhbj48L2E+IHNwZWNpZnlpbmcgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtY3JlYXRlLWJ1ZmZlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gb2Ygc2l6ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2l6ZTwvY29kZT48L2VtPgotPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1c2giPjwvYT48aDM+Z3N0X2hhcm5lc3NfcHVzaMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4KLWdzdF9oYXJuZXNzX3B1c2ggKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1c2hlcyBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IG9uIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiBzcmNwYWQuIFRoZSBzdGFuZGFyZCB3YXkgb2YKLWludGVyYWN0aW5nIHdpdGggYW4gaGFybmVzc2VkIGVsZW1lbnQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1wdXNoLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gcHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcHVzaC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+IHdpdGggdGhlIHJlc3VsdCBmcm9tIHRoZSBwdXNoPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1bGwiPjwvYT48aDM+Z3N0X2hhcm5lc3NfcHVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPsKgKgotZ3N0X2hhcm5lc3NfcHVsbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1bGxzIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gZnJvbSB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQXN5bmNocm9ub3VzLVF1ZXVlcy5odG1sI0dBc3luY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R0FzeW5jUXVldWU8L3NwYW4+PC9hPiBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gc2lua3BhZC4gVGhlIHB1bGwKLXdpbGwgdGltZW91dCBpbiA2MCBzZWNvbmRzLiBUaGlzIGlzIHRoZSBzdGFuZGFyZCB3YXkgb2YgZ2V0dGluZyBhIGJ1ZmZlcgotZnJvbSBhIGhhcm5lc3NlZCA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcHVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRpbWVkIG91dC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtdHJ5LXB1bGwiPjwvYT48aDM+Z3N0X2hhcm5lc3NfdHJ5X3B1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3RyeV9wdWxsICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHVsbHMgYSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBmcm9tIHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Bc3luY2hyb25vdXMtUXVldWVzLmh0bWwjR0FzeW5jUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQXN5bmNRdWV1ZTwvc3Bhbj48L2E+IG9uIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiBzaW5rcGFkLiBVbmxpa2UKLWdzdF9oYXJuZXNzX3B1bGwgdGhpcyB3aWxsIG5vdCB3YWl0IGZvciBhbnkgYnVmZmVycyBpZiBub3QgYW55IGFyZSBwcmVzZW50LAotYW5kIHJldHVybiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gc3RyYWlnaHQgYXdheS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXRyeS1wdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXRyeS1wdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm8gYnVmZmVycyBhcmUgcHJlc2VudCBpbiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQXN5bmNocm9ub3VzLVF1ZXVlcy5odG1sI0dBc3luY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R0FzeW5jUXVldWU8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1wdXNoLWFuZC1wdWxsIj48L2E+PGgzPmdzdF9oYXJuZXNzX3B1c2hfYW5kX3B1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3B1c2hfYW5kX3B1bGwgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkJhc2ljYWxseSBhIGdzdF9oYXJuZXNzX3B1c2ggYW5kIGEgZ3N0X2hhcm5lc3NfcHVsbCBpbiBvbmUgbGluZS4gUmVmbGVjdHMKLXRoZSBmYWN0IHRoYXQgeW91IG9mdGVuIHdhbnQgdG8gZG8gZXhhY3RseSB0aGlzIGluIHlvdXIgdGVzdDogUHVzaCBvbmUgYnVmZmVyCi1pbiwgYW5kIGluc3BlY3QgdGhlIG91dGNvbWUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1wdXNoLWFuZC1wdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gdG8gcHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcHVzaC1hbmQtcHVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRpbWVkIG91dC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYnVmZmVycy1yZWNlaXZlZCI+PC9hPjxoMz5nc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhlIHRvdGFsIG51bWJlciBvZiA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJzPC9zcGFuPjwvYT4gdGhhdCBoYXMgYXJyaXZlZCBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gc2lua3BhZC4KLVRoaXMgbnVtYmVyIGluY2x1ZGVzIGJ1ZmZlcnMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBhcyB3ZWxsIGFzIGJ1ZmZlcnMKLXRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcHVsbGVkIG91dC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWJ1ZmZlcnMtcmVjZWl2ZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYnVmZmVycy1yZWNlaXZlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbnVtYmVyIG9mIGJ1ZmZlcnMgcmVjZWl2ZWQ8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYnVmZmVycy1pbi1xdWV1ZSI+PC9hPjxoMz5nc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhlIG51bWJlciBvZiA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJzPC9zcGFuPjwvYT4gY3VycmVudGx5IGluIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiBzaW5rcGFkIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUFzeW5jaHJvbm91cy1RdWV1ZXMuaHRtbCNHQXN5bmNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdBc3luY1F1ZXVlPC9zcGFuPjwvYT48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWJ1ZmZlcnMtaW4tcXVldWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYnVmZmVycy1pbi1xdWV1ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNldC1kcm9wLWJ1ZmZlcnMiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc2V0X2Ryb3BfYnVmZmVyc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX3NldF9kcm9wX2J1ZmZlcnMgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBkcm9wX2J1ZmZlcnM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+V2hlbiBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LCBpbnN0ZWFkIG9mIHBsYWNpbmcgdGhlIGJ1ZmZlcnMgYXJyaXZpbmcgZnJvbSB0aGUgaGFybmVzc2VkCi08YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBpbnNpZGUgdGhlIHNpbmtwYWRzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUFzeW5jaHJvbm91cy1RdWV1ZXMuaHRtbCNHQXN5bmNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdBc3luY1F1ZXVlPC9zcGFuPjwvYT4sIHRoZXkgYXJlIGluc3RlYWQgdW5yZWZmZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtZHJvcC1idWZmZXJzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRyb3BfYnVmZmVyczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gc3BlY2lmeWluZyB0byBkcm9wIG91dGdvaW5nIGJ1ZmZlcnMgb3Igbm90PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWR1bXAtdG8tZmlsZSI+PC9hPjxoMz5nc3RfaGFybmVzc19kdW1wX3RvX2ZpbGXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19kdW1wX3RvX2ZpbGUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaWxlbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGxvd3MgeW91IHRvIGR1bXAgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcnM8L3NwYW4+PC9hPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gc2lua3BhZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Bc3luY2hyb25vdXMtUXVldWVzLmh0bWwjR0FzeW5jUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQXN5bmNRdWV1ZTwvc3Bhbj48L2E+Ci10byBhIGZpbGUuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1kdW1wLXRvLWZpbGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmlsZW5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IHdpdGggYSB0aGUgbmFtZSBvZiBhIGZpbGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtZ2V0LWxhc3QtcHVzaGVkLXRpbWVzdGFtcCI+PC9hPjxoMz5nc3RfaGFybmVzc19nZXRfbGFzdF9wdXNoZWRfdGltZXN0YW1wwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotZ3N0X2hhcm5lc3NfZ2V0X2xhc3RfcHVzaGVkX3RpbWVzdGFtcCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkdldCB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IHB1c2hlZCBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gc3JjcGFkLAotdHlwaWNhbGx5IHdpdGggZ3N0X2hhcm5lc3NfcHVzaCBvciBnc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtZ2V0LWxhc3QtcHVzaGVkLXRpbWVzdGFtcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1nZXQtbGFzdC1wdXNoZWQtdGltZXN0YW1wLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gd2l0aCB0aGUgdGltZXN0YW1wIG9yIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHU1QtQ0xPQ0stVElNRS1OT05FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfQ0xPQ0tfVElNRV9OT05FPC9jb2RlPjwvYT4gaWYgbm8KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGhhcyBiZWVuIHB1c2hlZCBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gc3JjcGFkPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1c2gtZXZlbnQiPjwvYT48aDM+Z3N0X2hhcm5lc3NfcHVzaF9ldmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2hhcm5lc3NfcHVzaF9ldmVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+ICpldmVudDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QdXNoZXMgYW4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gb24gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+IHNyY3BhZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1c2gtZXZlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIHB1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1c2gtZXZlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHdpdGggdGhlIHJlc3VsdCBmcm9tIHRoZSBwdXNoPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1bGwtZXZlbnQiPjwvYT48aDM+Z3N0X2hhcm5lc3NfcHVsbF9ldmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1bGxzIGFuIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IGZyb20gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUFzeW5jaHJvbm91cy1RdWV1ZXMuaHRtbCNHQXN5bmNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdBc3luY1F1ZXVlPC9zcGFuPjwvYT4gb24gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+IHNpbmtwYWQuCi1UaW1lb3V0cyBhZnRlciA2MCBzZWNvbmRzIHNpbWlsYXIgdG8gZ3N0X2hhcm5lc3NfcHVsbC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1bGwtZXZlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcHVsbC1ldmVudC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIHRpbWVkIG91dC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtdHJ5LXB1bGwtZXZlbnQiPjwvYT48aDM+Z3N0X2hhcm5lc3NfdHJ5X3B1bGxfZXZlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3RyeV9wdWxsX2V2ZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHVsbHMgYW4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gZnJvbSB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQXN5bmNocm9ub3VzLVF1ZXVlcy5odG1sI0dBc3luY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R0FzeW5jUXVldWU8L3NwYW4+PC9hPiBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gc2lua3BhZC4KLVNlZSBnc3RfaGFybmVzc190cnlfcHVsbCBmb3IgZGV0YWlscy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXRyeS1wdWxsLWV2ZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXRyeS1wdWxsLWV2ZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgbm8gYnVmZmVycyBhcmUgcHJlc2VudCBpbiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQXN5bmNocm9ub3VzLVF1ZXVlcy5odG1sI0dBc3luY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R0FzeW5jUXVldWU8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1ldmVudHMtcmVjZWl2ZWQiPjwvYT48aDM+Z3N0X2hhcm5lc3NfZXZlbnRzX3JlY2VpdmVkwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19ldmVudHNfcmVjZWl2ZWQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGUgdG90YWwgbnVtYmVyIG9mIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudHM8L3NwYW4+PC9hPiB0aGF0IGhhcyBhcnJpdmVkIG9uIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiBzaW5rcGFkCi1UaGlzIG51bWJlciBpbmNsdWRlcyBldmVudHMgaGFuZGxlZCBieSB0aGUgaGFybmVzcyBhcyB3ZWxsIGFzIGV2ZW50cwotdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwdWxsZWQgb3V0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtZXZlbnRzLXJlY2VpdmVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWV2ZW50cy1yZWNlaXZlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbnVtYmVyIG9mIGV2ZW50cyByZWNlaXZlZDwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1ldmVudHMtaW4tcXVldWUiPjwvYT48aDM+Z3N0X2hhcm5lc3NfZXZlbnRzX2luX3F1ZXVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19ldmVudHNfaW5fcXVldWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGUgbnVtYmVyIG9mIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudHM8L3NwYW4+PC9hPiBjdXJyZW50bHkgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+IHNpbmtwYWQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQXN5bmNocm9ub3VzLVF1ZXVlcy5odG1sI0dBc3luY1F1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R0FzeW5jUXVldWU8L3NwYW4+PC9hPjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtZXZlbnRzLWluLXF1ZXVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWV2ZW50cy1pbi1xdWV1ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbnVtYmVyIG9mIGV2ZW50cyBpbiB0aGUgcXVldWU8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcHVzaC11cHN0cmVhbS1ldmVudCI+PC9hPjxoMz5nc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1c2hlcyBhbiA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gc2lua3BhZC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZXZlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHRvIHB1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHdpdGggdGhlIHJlc3VsdCBmcm9tIHRoZSBwdXNoPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1bGwtdXBzdHJlYW0tZXZlbnQiPjwvYT48aDM+Z3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1bGxzIGFuIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IGZyb20gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUFzeW5jaHJvbm91cy1RdWV1ZXMuaHRtbCNHQXN5bmNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdBc3luY1F1ZXVlPC9zcGFuPjwvYT4gb24gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+IHNyY3BhZC4KLVRpbWVvdXRzIGFmdGVyIDYwIHNlY29uZHMgc2ltaWxhciB0byBnc3RfaGFybmVzc19wdWxsLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcHVsbC11cHN0cmVhbS1ldmVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1wdWxsLXVwc3RyZWFtLWV2ZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYgdGltZWQgb3V0LjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy10cnktcHVsbC11cHN0cmVhbS1ldmVudCI+PC9hPjxoMz5nc3RfaGFybmVzc190cnlfcHVsbF91cHN0cmVhbV9ldmVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPsKgKgotZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfdXBzdHJlYW1fZXZlbnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QdWxscyBhbiA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBmcm9tIHRoZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Bc3luY2hyb25vdXMtUXVldWVzLmh0bWwjR0FzeW5jUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQXN5bmNRdWV1ZTwvc3Bhbj48L2E+IG9uIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiBzcmNwYWQuCi1TZWUgZ3N0X2hhcm5lc3NfdHJ5X3B1bGwgZm9yIGRldGFpbHMuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy10cnktcHVsbC11cHN0cmVhbS1ldmVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy10cnktcHVsbC11cHN0cmVhbS1ldmVudC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vIGJ1ZmZlcnMgYXJlIHByZXNlbnQgaW4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUFzeW5jaHJvbm91cy1RdWV1ZXMuaHRtbCNHQXN5bmNRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdBc3luY1F1ZXVlPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtdXBzdHJlYW0tZXZlbnRzLXJlY2VpdmVkIj48L2E+PGgzPmdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19yZWNlaXZlZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX3JlY2VpdmVkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VGhlIHRvdGFsIG51bWJlciBvZiA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnRzPC9zcGFuPjwvYT4gdGhhdCBoYXMgYXJyaXZlZCBvbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gc3JjcGFkCi1UaGlzIG51bWJlciBpbmNsdWRlcyBldmVudHMgaGFuZGxlZCBieSB0aGUgaGFybmVzcyBhcyB3ZWxsIGFzIGV2ZW50cwotdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwdWxsZWQgb3V0LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtdXBzdHJlYW0tZXZlbnRzLXJlY2VpdmVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXVwc3RyZWFtLWV2ZW50cy1yZWNlaXZlZC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gbnVtYmVyIG9mIGV2ZW50cyByZWNlaXZlZDwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy11cHN0cmVhbS1ldmVudHMtaW4tcXVldWUiPjwvYT48aDM+Z3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX2luX3F1ZXVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UaGUgbnVtYmVyIG9mIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudHM8L3NwYW4+PC9hPiBjdXJyZW50bHkgaW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+IHNyY3BhZCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Bc3luY2hyb25vdXMtUXVldWVzLmh0bWwjR0FzeW5jUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HQXN5bmNRdWV1ZTwvc3Bhbj48L2E+PC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy11cHN0cmVhbS1ldmVudHMtaW4tcXVldWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtdXBzdHJlYW0tZXZlbnRzLWluLXF1ZXVlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiBudW1iZXIgb2YgZXZlbnRzIGluIHRoZSBxdWV1ZTwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1xdWVyeS1sYXRlbmN5Ij48L2E+PGgzPmdzdF9oYXJuZXNzX3F1ZXJ5X2xhdGVuY3nCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19xdWVyeV9sYXRlbmN5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+R2V0IHRoZSBtaW4gbGF0ZW5jeSByZXBvcnRlZCBieSBhbnkgaGFybmVzc2VkIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcXVlcnktbGF0ZW5jeS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1xdWVyeS1sYXRlbmN5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4gd2l0aCBtaW4gbGF0ZW5jeTwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQtdXBzdHJlYW0tbGF0ZW5jeSI+PC9hPjxoMz5nc3RfaGFybmVzc19zZXRfdXBzdHJlYW1fbGF0ZW5jecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX3NldF91cHN0cmVhbV9sYXRlbmN5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBsYXRlbmN5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdGhlIG1pbiBsYXRlbmN5IHJlcG9ydGVkIGJ5IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+IHdoZW4gcmVjZWl2aW5nIGEgbGF0ZW5jeS1xdWVyeTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNldC11cHN0cmVhbS1sYXRlbmN5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxhdGVuY3k8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPiBzcGVjaWZ5aW5nIHRoZSBsYXRlbmN5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNldC1wcm9wb3NlLWFsbG9jYXRvciI+PC9hPjxoMz5nc3RfaGFybmVzc19zZXRfcHJvcG9zZV9hbGxvY2F0b3LCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19zZXRfcHJvcG9zZV9hbGxvY2F0b3IgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICphbGxvY2F0b3I8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIuLi9odG1sL0dzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRpb25QYXJhbXMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QWxsb2NhdGlvblBhcmFtczwvc3Bhbj48L2E+ICpwYXJhbXM8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFsbG9jYXRvcjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyYW1zPC9jb2RlPjwvZW0+Ci0gdG8gcHJvcG9zZSB3aGVuIHJlY2VpdmluZyBhbiBhbGxvY2F0aW9uCi1xdWVyeS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNldC1wcm9wb3NlLWFsbG9jYXRvci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hbGxvY2F0b3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFyYW1zPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RBbGxvY2F0b3IuaHRtbCNHc3RBbGxvY2F0aW9uUGFyYW1zLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRpb25QYXJhbXM8L3NwYW4+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJEb24ndCBmcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtZ2V0LWFsbG9jYXRvciI+PC9hPjxoMz5nc3RfaGFybmVzc19nZXRfYWxsb2NhdG9ywqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2hhcm5lc3NfZ2V0X2FsbG9jYXRvciAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdG9yLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFsbG9jYXRvcjwvc3Bhbj48L2E+ICoqYWxsb2NhdG9yPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0aW9uUGFyYW1zPC9zcGFuPjwvYT4gKnBhcmFtczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5HZXRzIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWxsb2NhdG9yPC9jb2RlPjwvZW0+Ci0gYW5kIGl0cyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFyYW1zPC9jb2RlPjwvZW0+Ci0gdGhhdCBoYXMgYmVlbiBkZWNpZGVkIHRvIHVzZSBhZnRlciBhbgotYWxsb2NhdGlvbiBxdWVyeS48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWdldC1hbGxvY2F0b3IucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWxsb2NhdG9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdEFsbG9jYXRvci5odG1sI0dzdEFsbG9jYXRvci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0b3I8L3NwYW4+PC9hPiB1c2VkLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJhbXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QWxsb2NhdG9yLmh0bWwjR3N0QWxsb2NhdGlvblBhcmFtcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbGxvY2F0aW9uUGFyYW1zPC9zcGFuPjwvYT4gb2YKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hbGxvY2F0b3I8L2NvZGU+PC9lbT4KLS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYWRkLXNyYyI+PC9hPjxoMz5nc3RfaGFybmVzc19hZGRfc3JjwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2hhcm5lc3NfYWRkX3NyYyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpzcmNfZWxlbWVudF9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGhhc19jbG9ja193YWl0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNpbWlsYXIgdG8gZ3N0X2hhcm5lc3NfYWRkX3NyY19oYXJuZXNzLCB0aGlzIGlzIGEgY29udmVuaWVuY2UgdG8KLWRpcmVjdGx5IGNyZWF0ZSBhIHNyYy1oYXJuZXNzIHVzaW5nIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3JjX2VsZW1lbnRfbmFtZTwvY29kZT48L2VtPgotIG5hbWUgc3BlY2lmaWVkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYWRkLXNyYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNfZWxlbWVudF9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiB3aXRoIHRoZSBuYW1lIG9mIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aGFzX2Nsb2NrX3dhaXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHNwZWNpZnlpbmcgaWYgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHVzZXMKLWdzdF9jbG9ja193YWl0X2lkIGludGVybmFsbHkuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWFkZC1zcmMtaGFybmVzcyI+PC9hPjxoMz5nc3RfaGFybmVzc19hZGRfc3JjX2hhcm5lc3PCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19hZGRfc3JjX2hhcm5lc3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpzcmNfaGFybmVzczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IGhhc19jbG9ja193YWl0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgc3JjLWhhcm5lc3MgaXMgYSBncmVhdCB3YXkgb2YgcHJvdmlkaW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiB3aXRoIGRhdGEuCi1CeSBhZGRpbmcgYSBzcmMtdHlwZSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiwgaXQgaXMgdGhlbiBlYXN5IHRvIHVzZSBmdW5jdGlvbnMgbGlrZQotZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYyBvciBnc3RfaGFybmVzc19zcmNfY3JhbmtfYW5kX3B1c2hfbWFueQotdG8gcHJvdmlkZSB5b3VyIGhhcm5lc3NlZCBlbGVtZW50IHdpdGggaW5wdXQuIFRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGFzX2Nsb2NrX3dhaXQ8L2NvZGU+PC9lbT4KLSB2YXJpYWJsZQotaXMgYSBncmVhdGUgd2F5IHRvIGNvbnRyb2wgeW91IHNyYy1lbGVtZW50IHdpdGgsIGluIHRoYXQgeW91IGNhbiBoYXZlIGl0Ci1wcm9kdWNlIGEgYnVmZmVyIGZvciB5b3UgYnkgc2ltcGx5IGNyYW5raW5nIHRoZSBjbG9jaywgYW5kIG5vdCBoYXZlIGl0Ci1zcGluIG91dCBvZiBjb250cm9sIHByb2R1Y2luZyBidWZmZXJzIGFzIGZhc3QgYXMgcG9zc2libGUuPC9wPgotPHA+SWYgYSBzcmMtaGFybmVzcyBhbHJlYWR5IGV4aXN0cyBpdCB3aWxsIGJlIHJlcGxhY2VkLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYWRkLXNyYy1oYXJuZXNzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyY19oYXJuZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gdG8gYmUgYWRkZWQgYXMgYSBzcmMtaGFybmVzcy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmhhc19jbG9ja193YWl0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBzcGVjaWZ5aW5nIGlmIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB1c2VzCi1nc3RfY2xvY2tfd2FpdF9pZCBpbnRlcm5hbGx5LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1hZGQtc3JjLXBhcnNlIj48L2E+PGgzPmdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19hZGRfc3JjX3BhcnNlICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmxhdW5jaGxpbmU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT4gaGFzX2Nsb2NrX3dhaXQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2ltaWxhciB0byBnc3RfaGFybmVzc19hZGRfc3JjLCB0aGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGxhdW5jaC1saW5lLAotd2hpY2ggY2FuIGJlIHVzZWZ1bCBmb3IgYm90aCBoYXZpbmcgbW9yZSB0aGVuIG9uZSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBhY3RpbmcgYXMgeW91cgotc3JjIChMaWtlIGEgc3JjIHByb2R1Y2luZyByYXcgYnVmZmVycywgYW5kIHRoZW4gYW4gZW5jb2RlciwgcHJvdmlkaW5nIGVuY29kZWQKLWRhdGEpLCBidXQgYWxzbyBieSBhbGxvd2luZyB5b3UgdG8gc2V0IHByb3BlcnRpZXMgbGlrZSAiaXMtbGl2ZSIgZGlyZWN0bHkgb24KLXRoZSBlbGVtZW50cy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWFkZC1zcmMtcGFyc2UucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bGF1bmNobGluZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gZGVzY3JpYmluZyBhIGdzdC1sYXVuY2ggdHlwZSBsaW5lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmhhc19jbG9ja193YWl0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiBzcGVjaWZ5aW5nIGlmIHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB1c2VzCi1nc3RfY2xvY2tfd2FpdF9pZCBpbnRlcm5hbGx5LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1wdXNoLWZyb20tc3JjIj48L2E+PGgzPmdzdF9oYXJuZXNzX3B1c2hfZnJvbV9zcmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VHJhbnNmZXIgZGF0YSBmcm9tIHRoZSBzcmMtPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gdG8gdGhlIG1haW4tPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4uIEl0IGNvbnNpc3RzCi1vZiA0IHN0ZXBzOgotMTogTWFrZSBzdXJlIHRoZSBzcmMgaXMgc3RhcnRlZC4gKHNlZTogZ3N0X2hhcm5lc3NfcGxheSkKLTI6IENyYW5rIHRoZSBjbG9jayAoc2VlOiBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCkKLTM6IFB1bGwgYSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBmcm9tIHRoZSBzcmMtPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKHNlZTogZ3N0X2hhcm5lc3NfcHVsbCkKLTQ6IFB1c2ggdGhlIHNhbWUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gaW50byB0aGUgbWFpbi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAoc2VlOiBnc3RfaGFybmVzc19wdXNoKTwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtcHVzaC1mcm9tLXNyYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1wdXNoLWZyb20tc3JjLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBwdXNoPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNyYy1jcmFuay1hbmQtcHVzaC1tYW55Ij48L2E+PGgzPmdzdF9oYXJuZXNzX3NyY19jcmFua19hbmRfcHVzaF9tYW55wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IGNyYW5rczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHB1c2hlczwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5UcmFuc2ZlciBkYXRhIGZyb20gdGhlIHNyYy08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiB0byB0aGUgbWFpbi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPi4gU2ltaWxhciB0bwotZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYywgdGhpcyB2YXJpYW50IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBob3cgbWFueSBjcmFua3MKLWFuZCBob3cgbWFueSBwdXNoZXMgdG8gcGVyZm9ybS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBib3RoIG1vdmluZyBhIGxvdAotb2YgZGF0YSBhdCB0aGUgc2FtZSB0aW1lLCBhcyB3ZWxsIGFzIGNhc2VzIHdoZW4gb25lIGNyYW5rIGRvZXMgbm90IGVxdWFsIG9uZQotYnVmZmVyIHRvIHB1c2ggYW5kIHYudi48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNyYy1jcmFuay1hbmQtcHVzaC1tYW55LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNyYW5rczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHdpdGggdGhlIG51bWJlciBvZiBjYWxscyB0byBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wdXNoZXM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiB3aXRoIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gZ3N0X2hhcm5lc3NfcHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3JjLWNyYW5rLWFuZC1wdXNoLW1hbnkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHB1c2g8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3JjLXB1c2gtZXZlbnQiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc3JjX3B1c2hfZXZlbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2ltaWxhciB0byB3aGF0IGdzdF9oYXJuZXNzX3NyY19wdXNoIGRvZXMgd2l0aCA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXJzPC9zcGFuPjwvYT4sIHRoaXMgdHJhbnNmZXJzCi1hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IGZyb20gdGhlIHNyYy08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiB0byB0aGUgbWFpbi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPi4gTm90ZSB0aGF0Ci1zb21lIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudHM8L3NwYW4+PC9hPiBhcmUgYmVpbmcgdHJhbnNmZXJyZWQgYXV0b21hZ2ljYWxseS4gTG9vayBhdCBzaW5rX2ZvcndhcmRfcGFkCi1mb3IgZGV0YWlscy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNyYy1wdXNoLWV2ZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNyYy1wdXNoLWV2ZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHB1c2g8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYWRkLXNpbmsiPjwvYT48aDM+Z3N0X2hhcm5lc3NfYWRkX3NpbmvCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19hZGRfc2luayAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqc2lua19lbGVtZW50X25hbWU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2ltaWxhciB0byBnc3RfaGFybmVzc19hZGRfc2lua19oYXJuZXNzLCB0aGlzIGlzIGEgY29udmVuaWVuY2UgdG8KLWRpcmVjdGx5IGNyZWF0ZSBhIHNpbmstaGFybmVzcyB1c2luZyB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNpbmtfZWxlbWVudF9uYW1lPC9jb2RlPjwvZW0+Ci0gbmFtZSBzcGVjaWZpZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1hZGQtc2luay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaW5rX2VsZW1lbnRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gd2l0aCB0aGUgbmFtZSBvZiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWFkZC1zaW5rLWhhcm5lc3MiPjwvYT48aDM+Z3N0X2hhcm5lc3NfYWRkX3NpbmtfaGFybmVzc8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3MgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqc2lua19oYXJuZXNzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNpbWlsYXIgdG8gZ3N0X2hhcm5lc3NfYWRkX3NyYywgdGhpcyBhbGxvd3MgeW91IHRvIHNlbmQgdGhlIGRhdGEgY29taW5nIG91dAotb2YgeW91ciBoYXJuZXNzZWQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gdG8gYSBzaW5rLWVsZW1lbnQsIGFsbG93aW5nIHRvIHRlc3QgZGlmZmVyZW50Ci1yZXNwb25zZXMgdGhlIGVsZW1lbnQgb3V0cHV0IG1pZ2h0IGNyZWF0ZSBpbiBzaW5rIGVsZW1lbnRzLiBBbiBleGFtcGxlIG1pZ2h0Ci1iZSBhbiBleGlzdGluZyBzaW5rIHByb3ZpZGluZyBzb21lIGFuYWx5dGljYWwgZGF0YSBvbiB0aGUgaW5wdXQgaXQgcmVjZWl2ZXMgdGhhdAotY2FuIGJlIHVzZWZ1bCB0byB5b3VyIHRlc3RpbmcuIElmIHRoZSBnb2FsIGlzIHRvIHRlc3QgYSBzaW5rLWVsZW1lbnQgaXRzZWxmLAotdGhpcyBpcyBiZXR0ZXIgYWNoZWl2ZWQgdXNpbmcgZ3N0X2hhcm5lc3NfbmV3IGRpcmVjdGx5IG9uIHRoZSBzaW5rLjwvcD4KLTxwPklmIGEgc2luay1oYXJuZXNzIGFscmVhZHkgZXhpc3RzIGl0IHdpbGwgYmUgcmVwbGFjZWQuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1hZGQtc2luay1oYXJuZXNzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpbmtfaGFybmVzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+IHRvIGJlIGFkZGVkIGFzIGEgc2luay1oYXJuZXNzLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYWRkLXNpbmstcGFyc2UiPjwvYT48aDM+Z3N0X2hhcm5lc3NfYWRkX3NpbmtfcGFyc2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19hZGRfc2lua19wYXJzZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqbGF1bmNobGluZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TaW1pbGFyIHRvIGdzdF9oYXJuZXNzX2FkZF9zaW5rLCB0aGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGxhdW5jaC1saW5lCi1pbnN0ZWFkIG9mIGp1c3QgYW4gZWxlbWVudCBuYW1lLiBTZWUgZ3N0X2hhcm5lc3NfYWRkX3NyY19wYXJzZSBmb3IgZGV0YWlscy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWFkZC1zaW5rLXBhcnNlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxhdW5jaGxpbmU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IHdpdGggdGhlIG5hbWUgb2YgYSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1wdXNoLXRvLXNpbmsiPjwvYT48aDM+Z3N0X2hhcm5lc3NfcHVzaF90b19zaW5rwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotZ3N0X2hhcm5lc3NfcHVzaF90b19zaW5rICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VHJhbnNmZXIgb25lIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+IGZyb20gdGhlIG1haW4tPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gdG8gdGhlIHNpbmstPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4uCi1TZWUgZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYyBmb3IgZGV0YWlscy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXB1c2gtdG8tc2luay5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1wdXNoLXRvLXNpbmsucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0Rmxvd1JldHVybiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHB1c2g8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2luay1wdXNoLW1hbnkiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc2lua19wdXNoX21hbnnCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci1nc3RfaGFybmVzc19zaW5rX3B1c2hfbWFueSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gcHVzaGVzPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNvbnZlbmllbmNlIHRoYXQgY2FsbHMgZ3N0X2hhcm5lc3NfcHVzaF90b19zaW5rIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wdXNoZXM8L2NvZGU+PC9lbT4KLSBudW1iZXIgb2YgdGltZXMuCi1XaWxsIGFib3J0IHRoZSBwdXNoaW5nIGlmIGFueSBvbmUgcHVzaCBmYWlscy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNpbmstcHVzaC1tYW55LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnB1c2hlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+IHdpdGggdGhlIG51bWJlciBvZiBjYWxscyB0byBnc3RfaGFybmVzc19wdXNoX3RvX3Npbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXNpbmstcHVzaC1tYW55LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbG93UmV0dXJuPC9zcGFuPjwvYT4gd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBwdXNoPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWZpbmQtZWxlbWVudCI+PC9hPjxoMz5nc3RfaGFybmVzc19maW5kX2VsZW1lbnTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX2ZpbmRfZWxlbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmVsZW1lbnRfbmFtZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Nb3N0IHVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIGdzdF9oYXJuZXNzX25ld19wYXJzZSwgdGhpcyB3aWxsIHNjYW4gdGhlCi08YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRzPC9zcGFuPjwvYT4gaW5zaWRlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiwgYW5kIGNoZWNrIGlmIGFueSBvZiB0aGVtIG1hdGNoZXMKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5lbGVtZW50X25hbWU8L2NvZGU+PC9lbT4KLS4gVHlwaWNhbCB1c2VjYXNlIGJlaW5nIHRoYXQgeW91IG5lZWQgdG8gYWNjZXNzIG9uZSBvZiB0aGUKLWhhcm5lc3NlZCBlbGVtZW50cyBmb3IgcHJvcGVydGllcyBhbmQvb3Igc2lnbmFscy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWZpbmQtZWxlbWVudC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lbGVtZW50X25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IHdpdGggYSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjR3N0RWxlbWVudEZhY3Rvcnktc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudEZhY3Rvcnk8L3NwYW4+PC9hPiBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1maW5kLWVsZW1lbnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBub3QgZm91bmQuIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIGZ1bGw8L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc2V0Ij48L2E+PGgzPmdzdF9oYXJuZXNzX3NldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9oYXJuZXNzX3NldCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKmVsZW1lbnRfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpmaXJzdF9wcm9wZXJ0eV9uYW1lPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Li4uPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gYWxsb3dzIHlvdSB0byBjYWxsIGdfb2JqZWN0X3NldCBvbiBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+Ci10aGF0IGFyZSByZXNpZGluZyBpbnNpZGUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+LCBieSB1c2luZyBub3JtYWwgZ19vYmplY3Rfc2V0Ci1zeW50YXguPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zZXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZWxlbWVudF9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiB3aXRoIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50RmFjdG9yeS5odG1sI0dzdEVsZW1lbnRGYWN0b3J5LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnRGYWN0b3J5PC9zcGFuPjwvYT4gbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5maXJzdF9wcm9wZXJ0eV9uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiB3aXRoIHRoZSBmaXJzdCBwcm9wZXJ0eSBuYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPi4uLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnZhbHVlIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZQotbmFtZS92YWx1ZSBwYWlycywgZm9sbG93ZWQgYnkgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWdldCI+PC9hPjxoMz5nc3RfaGFybmVzc19nZXTCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19nZXQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X25hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqZmlyc3RfcHJvcGVydHlfbmFtZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPi4uLjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGFsbG93cyB5b3UgdG8gY2FsbCBnX29iamVjdF9nZXQgb24gYSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPgotdGhhdCBhcmUgcmVzaWRpbmcgaW5zaWRlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiwgYnkgdXNpbmcgbm9ybWFsIGdfb2JqZWN0X2dldAotc3ludGF4LjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtZ2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gd2l0aCBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+IG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Zmlyc3RfcHJvcGVydHlfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gd2l0aCB0aGUgZmlyc3QgcHJvcGVydHkgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD4uLi48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5yZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBmaXJzdCBwcm9wZXJ0eSwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBtb3JlCi1uYW1lL3JldHVybiBsb2NhdGlvbiBwYWlycywgZm9sbG93ZWQgYnkgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLWFkZC1wcm9iZSI+PC9hPjxoMz5nc3RfaGFybmVzc19hZGRfcHJvYmXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfaGFybmVzc19hZGRfcHJvYmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICplbGVtZW50X25hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAqcGFkX25hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZFByb2JlVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByb2JlVHlwZTwvc3Bhbj48L2E+IG1hc2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZFByb2JlQ2FsbGJhY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRQcm9iZUNhbGxiYWNrPC9zcGFuPjwvYT4gY2FsbGJhY2s8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB1c2VyX2RhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBkZXN0cm95X2RhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+QSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBhbGxvd3MgeW91IHRvIGNhbGwgZ3N0X3BhZF9hZGRfcHJvYmUgb24gYQotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gb2YgYSA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiB0aGF0IGFyZSByZXNpZGluZyBpbnNpZGUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+LAotYnkgdXNpbmcgbm9ybWFsIGdzdF9wYWRfYWRkX3Byb2JlIHN5bnRheDwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3MtYWRkLXByb2JlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVsZW1lbnRfbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gd2l0aCBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNHc3RFbGVtZW50RmFjdG9yeS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50RmFjdG9yeTwvc3Bhbj48L2E+IG5hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkX25hbWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+IHdpdGggdGhlIG5hbWUgb2YgdGhlIHBhZCB0byBhdHRhY2ggdGhlIHByb2JlIHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm1hc2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVUeXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkUHJvYmVUeXBlPC9zcGFuPjwvYT4gKHNlZSBnc3RfcGFkX2FkZF9wcm9iZSk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FsbGJhY2s8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkUHJvYmVDYWxsYmFjayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFByb2JlQ2FsbGJhY2s8L3NwYW4+PC9hPiAoc2VlIGdzdF9wYWRfYWRkX3Byb2JlKTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IChzZWUgZ3N0X3BhZF9hZGRfcHJvYmUpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRlc3Ryb3lfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gKHNlZSBnc3RfcGFkX2FkZF9wcm9iZSk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXRocmVhZC1zdG9wIj48L2E+PGgzPmdzdF9oYXJuZXNzX3N0cmVzc190aHJlYWRfc3RvcMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPiAqdDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TdG9wIHRoZSBydW5uaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy10aHJlYWQtc3RvcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLWN1c3RvbS1zdGFydCI+PC9hPjxoMz5nc3RfaGFybmVzc19zdHJlc3NfY3VzdG9tX3N0YXJ0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3N0cmVzc19jdXN0b21fc3RhcnQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0Z1bmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRnVuYzwvc3Bhbj48L2E+IGluaXQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0Z1bmM8L3NwYW4+PC9hPiBjYWxsYmFjazwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gc2xlZXA8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U3RhcnQgYSBjdXN0b20gc3RyZXNzLXRocmVhZCB0aGF0IHdpbGwgY2FsbCB5b3VyIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYWxsYmFjazwvY29kZT48L2VtPgotIGZvciBldmVyeQotaXRlcmF0aW9uIGFsbG93aW5nIHlvdSB0byBkbyBzb21ldGhpbmcgbmFzdHkuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtY3VzdG9tLXN0YXJ0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluaXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1Eb3VibHktTGlua2VkLUxpc3RzLmh0bWwjR0Z1bmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRnVuYzwvc3Bhbj48L2E+IHRoYXQgaXMgY2FsbGVkIGluaXRpYWxseSBhbmQgb25seSBvbmNlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYWxsYmFjazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dGdW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R0Z1bmM8L3NwYW4+PC9hPiB0aGF0IGlzIGNhbGxlZCBhcyBvZnRlbiBhcyBwb3NzaWJsZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB3aXRoIGN1c3RvbSBkYXRhIHRvIHBhc3MgdG8gdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYWxsYmFjazwvY29kZT48L2VtPgotZnVuY3Rpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2xlZXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gc3BlY2lmeWluZyBob3cgbG9uZyB0byBzbGVlcCBpbiAobWljcm9zZWNvbmRzKSBmb3IKLWVhY2ggY2FsbCB0byB0aGUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNhbGxiYWNrPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1jdXN0b20tc3RhcnQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXN0YXRlY2hhbmdlLXN0YXJ0Ij48L2E+PGgzPmdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydChoKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3Mtc3RhdGVjaGFuZ2Utc3RhcnQtZnVsbCI+PC9hPjxoMz5nc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2Vfc3RhcnRfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+wqAqCi1nc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2Vfc3RhcnRfZnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IHNsZWVwPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNoYW5nZSB0aGUgc3RhdGUgb2YgeW91ciBoYXJuZXNzZWQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gZnJvbSBOVUxMIHRvIFBMQVlJTkcgYW5kCi1iYWNrIGFnYWluLCBvbmx5IHBhdXNpbmcgZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zbGVlcDwvY29kZT48L2VtPgotIG1pY3Jvc2Vjb25kcyBldmVyeSB0aW1lLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXN0YXRlY2hhbmdlLXN0YXJ0LWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2xlZXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gc3BlY2lmeWluZyBob3cgbG9uZyB0byBzbGVlcCBpbiAobWljcm9zZWNvbmRzKSBmb3IKLWVhY2ggc3RhdGUtY2hhbmdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3Mtc3RhdGVjaGFuZ2Utc3RhcnQtZnVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1idWZmZXItc3RhcnQiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0KGgsIGMsIHMsIGIpPC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWJ1ZmZlci1zdGFydC1mdWxsIj48L2E+PGgzPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl9zdGFydF9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl9zdGFydF9mdWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPiAqaDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICpjYXBzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iLi4vaHRtbC9Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT4gKnNlZ21lbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiBzbGVlcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QdXNoIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gaW4gaW50ZXJ2YWxzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zbGVlcDwvY29kZT48L2VtPgotIG1pY3Jvc2Vjb25kcy48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWJ1ZmZlci1zdGFydC1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNhcHM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGZvciB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VnbWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RTZWdtZW50Lmh0bWwjR3N0U2VnbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTZWdtZW50PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0byBwdXNoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNsZWVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IHNwZWNpZnlpbmcgaG93IGxvbmcgdG8gc2xlZXAgaW4gKG1pY3Jvc2Vjb25kcykgZm9yCi1lYWNoIGNhbGwgdG8gZ3N0X3BhZF9wdXNoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1idWZmZXItc3RhcnQtZnVsbC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RIYXJuZXNzUHJlcGFyZUJ1ZmZlckZ1bmMiPjwvYT48aDM+R3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+wqAqCi08c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KDwvc3Bhbj4qR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWJ1ZmZlci13aXRoLWNiLXN0YXJ0Ij48L2E+PGgzPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3dpdGhfY2Jfc3RhcnQoaCwgYywgcywgZiwgZCwgbik8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXdpdGgtY2Itc3RhcnQtZnVsbCI+PC9hPjxoMz5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfd2l0aF9jYl9zdGFydF9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gKmNhcHM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIuLi9odG1sL0dzdFNlZ21lbnQuaHRtbCNHc3RTZWdtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNlZ21lbnQ8L3NwYW4+PC9hPiAqc2VnbWVudDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jIiB0aXRsZT0iR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gbm90aWZ5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiBzbGVlcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QdXNoIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gcmV0dXJuZWQgYnkgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLSBpbiBpbnRlcnZhbHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNsZWVwPC9jb2RlPjwvZW0+Ci0gbWljcm9zZWNvbmRzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXdpdGgtY2Itc3RhcnQtZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBmb3IgdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlZ21lbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii4uL2h0bWwvR3N0U2VnbWVudC5odG1sI0dzdFNlZ21lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2VnbWVudDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jIiB0aXRsZT0iR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYzwvc3Bhbj48L2E+IGZ1bmN0aW9uIGNhbGxlZCBiZWZvcmUgZXZlcnkgaXRlcmF0aW9uCi10byBwcmVwYXJlIC8gY3JlYXRlIGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gZm9yIHB1c2hpbmc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gd2l0aCBkYXRhIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYyIgdGl0bGU9IkdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzUHJlcGFyZUJ1ZmZlckZ1bmM8L3NwYW4+PC9hPiBmdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ub3RpZnk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhyZWFkIGlzIHN0b3BwZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2xlZXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gc3BlY2lmeWluZyBob3cgbG9uZyB0byBzbGVlcCBpbiAobWljcm9zZWNvbmRzKSBmb3IKLWVhY2ggY2FsbCB0byBnc3RfcGFkX3B1c2g8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWJ1ZmZlci13aXRoLWNiLXN0YXJ0LWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtZXZlbnQtc3RhcnQiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF9zdGFydChoLCBlKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC1zdGFydC1mdWxsIj48L2E+PGgzPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0X2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPsKgKgotZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnRfZnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiAqZXZlbnQ8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IHNsZWVwPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1c2ggdGhlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotIG9udG8gdGhlIGhhcm5lc3NlZCA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBzaW5rcGFkIGluIGludGVydmFscyBvZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNsZWVwPC9jb2RlPjwvZW0+Ci0gbWljcm9zZWNvbmRzPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC1zdGFydC1mdWxsLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV2ZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0byBwdXNoPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNsZWVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IHNwZWNpZnlpbmcgaG93IGxvbmcgdG8gc2xlZXAgaW4gKG1pY3Jvc2Vjb25kcykgZm9yCi1lYWNoIGdzdF9ldmVudF9wdXNoIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV2ZW50PC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWV2ZW50LXN0YXJ0LWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMiPjwvYT48aDM+R3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmPCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEV2ZW50PC9zcGFuPjwvYT7CoCoKLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPipHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYzxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiBkYXRhPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA0Lmh0bWwjYXBpLWluZGV4LTEuOCI+MS44PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtZXZlbnQtd2l0aC1jYi1zdGFydCI+PC9hPjxoMz5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfd2l0aF9jYl9zdGFydChoLCBmLCBkLCBuKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC13aXRoLWNiLXN0YXJ0LWZ1bGwiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnRfZnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT4gKmg8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jIiB0aXRsZT0iR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmPCoCgpIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmM8L3NwYW4+PC9hPiBmdW5jPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gZGF0YTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLURhdGFzZXRzLmh0bWwjR0Rlc3Ryb3lOb3RpZnkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRGVzdHJveU5vdGlmeTwvc3Bhbj48L2E+IG5vdGlmeTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gc2xlZXA8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHVzaCBhIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RXZlbnQuaHRtbCNHc3RFdmVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFdmVudDwvc3Bhbj48L2E+IHJldHVybmVkIGJ5IDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gb250byB0aGUgaGFybmVzc2VkIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHNpbmtwYWQKLWluIGludGVydmFscyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2xlZXA8L2NvZGU+PC9lbT4KLSBtaWNyb3NlY29uZHMuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC13aXRoLWNiLXN0YXJ0LWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYyIgdGl0bGU9IkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jPC9zcGFuPjwvYT4gZnVuY3Rpb24gY2FsbGVkIGJlZm9yZSBldmVyeSBpdGVyYXRpb24KLXRvIHByZXBhcmUgLyBjcmVhdGUgYSA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBmb3IgcHVzaGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB3aXRoIGRhdGEgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMiIHRpdGxlPSJHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYzwvc3Bhbj48L2E+IGZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aHJlYWQgaXMgc3RvcHBlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zbGVlcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotZWFjaCBjYWxsIHRvIGdzdF9wYWRfcHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtZXZlbnQtd2l0aC1jYi1zdGFydC1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1zZW5kLXVwc3RyZWFtLWV2ZW50LXN0YXJ0Ij48L2E+PGgzPmdzdF9oYXJuZXNzX3N0cmVzc19zZW5kX3Vwc3RyZWFtX2V2ZW50X3N0YXJ0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3NlbmRfdXBzdHJlYW1fZXZlbnRfc3RhcnQoaCwgZSk8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQtc3RhcnQtZnVsbCI+PC9hPjxoMz5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF9zdGFydF9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50X3N0YXJ0X2Z1bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gKmV2ZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiBzbGVlcDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5QdXNoIHRoZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9lbT4KLSBvbnRvIHRoZSBoYXJuZXNzZWQgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gc3JjcGFkIGluIGludGVydmFscyBvZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNsZWVwPC9jb2RlPjwvZW0+Ci0gbWljcm9zZWNvbmRzLjwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQtc3RhcnQtZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ldmVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdG8gcHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zbGVlcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotZWFjaCBnc3RfZXZlbnRfcHVzaCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5ldmVudDwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC11cHN0cmVhbS1ldmVudC1zdGFydC1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1zZW5kLXVwc3RyZWFtLWV2ZW50LXdpdGgtY2Itc3RhcnQiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc3RyZXNzX3NlbmRfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9oYXJuZXNzX3N0cmVzc19zZW5kX3Vwc3RyZWFtX2V2ZW50X3dpdGhfY2Jfc3RhcnQoaCwgZiwgZCwgbik8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQtd2l0aC1jYi1zdGFydC1mdWxsIj48L2E+PGgzPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50X3dpdGhfY2Jfc3RhcnRfZnVsbMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+wqAqCi1nc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYyIgdGl0bGU9IkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jPC9zcGFuPjwvYT4gZnVuYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1EYXRhc2V0cy5odG1sI0dEZXN0cm95Tm90aWZ5Ij48c3BhbiBjbGFzcz0idHlwZSI+R0Rlc3Ryb3lOb3RpZnk8L3NwYW4+PC9hPiBub3RpZnk8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IHNsZWVwPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlB1c2ggYSA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiByZXR1cm5lZCBieSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIG9udG8gdGhlIGhhcm5lc3NlZCA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPiBzcmNwYWQKLWluIGludGVydmFscyBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2xlZXA8L2NvZGU+PC9lbT4KLSBtaWNyb3NlY29uZHMuPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC11cHN0cmVhbS1ldmVudC13aXRoLWNiLXN0YXJ0LWZ1bGwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZnVuYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYyIgdGl0bGU9IkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jPC9zcGFuPjwvYT4gZnVuY3Rpb24gY2FsbGVkIGJlZm9yZSBldmVyeSBpdGVyYXRpb24KLXRvIHByZXBhcmUgLyBjcmVhdGUgYSA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiBmb3IgcHVzaGluZzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiB3aXRoIGRhdGEgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMiIHRpdGxlPSJHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuY8KgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYzwvc3Bhbj48L2E+IGZ1bmN0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm5vdGlmeTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRGF0YXNldHMuaHRtbCNHRGVzdHJveU5vdGlmeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdEZXN0cm95Tm90aWZ5PC9zcGFuPjwvYT4gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aHJlYWQgaXMgc3RvcHBlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zbGVlcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWxvbmciPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWxvbmc8L3NwYW4+PC9hPiBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotZWFjaCBjYWxsIHRvIGdzdF9wYWRfcHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQtd2l0aC1jYi1zdGFydC1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNC5odG1sI2FwaS1pbmRleC0xLjgiPjEuODwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1wcm9wZXJ0eS1zdGFydCI+PC9hPjxoMz5nc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnQoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+I2RlZmluZSAgICAgICAgICAgICBnc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnQoaCwgbiwgdik8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXByb3BlcnR5LXN0YXJ0LWZ1bGwiPjwvYT48aDM+Z3N0X2hhcm5lc3Nfc3RyZXNzX3Byb3BlcnR5X3N0YXJ0X2Z1bGzCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEhhcm5lc3NUaHJlYWQ8L3NwYW4+PC9hPsKgKgotZ3N0X2hhcm5lc3Nfc3RyZXNzX3Byb3BlcnR5X3N0YXJ0X2Z1bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI0dWYWx1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZTwvc3Bhbj48L2E+ICp2YWx1ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gc2xlZXA8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+Q2FsbCBnX29iamVjdF9zZXQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bmFtZTwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dmFsdWU8L2NvZGU+PC9lbT4KLSBpbiBpbnRlcnZhbHMgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNsZWVwPC9jb2RlPjwvZW0+Ci0gbWljcm9zZWNvbmRzPC9wPgotPHA+TVQgc2FmZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtaGFybmVzcy1zdHJlc3MtcHJvcGVydHktc3RhcnQtZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5uYW1lPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiBzcGVjaWZ5aW5nIGEgcHJvcGVydHkgbmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52YWx1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNHVmFsdWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWU8L3NwYW4+PC9hPiB0byBzZXQgdGhlIHByb3BlcnR5IHRvPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNsZWVwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IHNwZWNpZnlpbmcgaG93IGxvbmcgdG8gc2xlZXAgaW4gKG1pY3Jvc2Vjb25kcykgZm9yCi1lYWNoIGdfb2JqZWN0X3NldCB3aXRoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5uYW1lPC9jb2RlPjwvZW0+Ci1hbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZhbHVlPC9jb2RlPjwvZW0+Ci08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1wcm9wZXJ0eS1zdGFydC1mdWxsLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzc1RocmVhZDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1yZXF1ZXN0cGFkLXN0YXJ0Ij48L2E+PGgzPmdzdF9oYXJuZXNzX3N0cmVzc19yZXF1ZXN0cGFkX3N0YXJ0KCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiNkZWZpbmUgICAgICAgICAgICAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3JlcXVlc3RwYWRfc3RhcnQoaCwgdCwgbiwgYywgcik8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXJlcXVlc3RwYWQtc3RhcnQtZnVsbCI+PC9hPjxoMz5nc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydF9mdWxswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzVGhyZWFkIiB0aXRsZT0iR3N0SGFybmVzc1RocmVhZCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT7CoCoKLWdzdF9oYXJuZXNzX3N0cmVzc19yZXF1ZXN0cGFkX3N0YXJ0X2Z1bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzcyIgdGl0bGU9InN0cnVjdCBHc3RIYXJuZXNzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SGFybmVzczwvc3Bhbj48L2E+ICpoPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT4gKnRlbXBsPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gKm5hbWU8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiAqY2FwczwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+IHJlbGVhc2U8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1bG9uZyI+PHNwYW4gY2xhc3M9InR5cGUiPmd1bG9uZzwvc3Bhbj48L2E+IHNsZWVwPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkNhbGwgZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgaW4gaW50ZXJ2YWxzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zbGVlcDwvY29kZT48L2VtPgotIG1pY3Jvc2Vjb25kczwvcD4KLTxwPk1UIHNhZmUuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWhhcm5lc3Mtc3RyZXNzLXJlcXVlc3RwYWQtc3RhcnQtZnVsbC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5oPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEhhcm5lc3M8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD50ZW1wbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWRUZW1wbGF0ZS5odG1sI0dzdFBhZFRlbXBsYXRlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZFRlbXBsYXRlPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bmFtZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVsZWFzZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2xlZXA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3Vsb25nIj48c3BhbiBjbGFzcz0idHlwZSI+Z3Vsb25nPC9zcGFuPjwvYT4gc3BlY2lmeWluZyBob3cgbG9uZyB0byBzbGVlcCBpbiAobWljcm9zZWNvbmRzKSBmb3IKLWVhY2ggZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1oYXJuZXNzLXN0cmVzcy1yZXF1ZXN0cGFkLXN0YXJ0LWZ1bGwucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzVGhyZWFkPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RIYXJuZXNzIj48L2E+PGgzPnN0cnVjdCBHc3RIYXJuZXNzPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SGFybmVzcyB7Ci0gIEdzdEVsZW1lbnQgKiBlbGVtZW50OwotCi0gIEdzdFBhZCAqIHNyY3BhZDsKLSAgR3N0UGFkICogc2lua3BhZDsKLQotICBHc3RIYXJuZXNzICogc3JjX2hhcm5lc3M7Ci0gIEdzdEhhcm5lc3MgKiBzaW5rX2hhcm5lc3M7Ci19OwotPC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RIYXJuZXNzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEhhcm5lc3MuZWxlbWVudCI+PC9hPmVsZW1lbnQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBlbGVtZW50IGluc2lkZSB0aGUgaGFybmVzczwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0SGFybmVzcy5zcmNwYWQiPjwvYT5zcmNwYWQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpbnRlcm5hbCBoYXJuZXNzIHNvdXJjZSBwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9uYW1lIj48cD48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKjxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdEhhcm5lc3Muc2lua3BhZCI+PC9hPnNpbmtwYWQ8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBpbnRlcm5hbCBoYXJuZXNzIHNpbmsgcGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RIYXJuZXNzLnNyYy1oYXJuZXNzIj48L2E+c3JjX2hhcm5lc3M8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzb3VyY2UgKGlucHV0KSBoYXJuZXNzIChpZiBhbnkpPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RIYXJuZXNzPC9zcGFuPjwvYT7CoCo8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3RIYXJuZXNzLnNpbmstaGFybmVzcyI+PC9hPnNpbmtfaGFybmVzczwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpbmsgKG91dHB1dCkgaGFybmVzcyAoaWYgYW55KTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA1Lmh0bWwjYXBpLWluZGV4LTEuNiI+MS42PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SGFybmVzc1RocmVhZCI+PC9hPjxoMz5Hc3RIYXJuZXNzVGhyZWFkPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0SGFybmVzc1RocmVhZCBHc3RIYXJuZXNzVGhyZWFkOzwvcHJlPgotPHA+T3BhcXVlIGhhbmRsZSByZXByZXNlbnRpbmcgYSBHc3RIYXJuZXNzIHN0cmVzcyB0ZXN0aW5nIHRocmVhZC48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZXN0Q2xvY2s8L3NwYW4+PC9hPixcPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU4NzcxMS4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3ROZXRBZGRyZXNzTWV0YTogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBOZXR3b3JrIENsYXNzZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iZ3N0cmVhbWVyLW5ldC5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEudG9wX29mX3BhZ2UiPjwvYT5Hc3ROZXRBZGRyZXNzTWV0YTwvc3Bhbj48L2gyPgotPHA+R3N0TmV0QWRkcmVzc01ldGEg4oCUIE5ldHdvcmsgYWRkcmVzcyBtZXRhZGF0YTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuaHRtbCNHc3ROZXRBZGRyZXNzTWV0YSIgdGl0bGU9InN0cnVjdCBHc3ROZXRBZGRyZXNzTWV0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3ROZXRBZGRyZXNzTWV0YTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI2dzdC1idWZmZXItYWRkLW5ldC1hZGRyZXNzLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9uZXRfYWRkcmVzc19tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9hZGRfbmV0X2FkZHJlc3NfbWV0YTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI0dzdE5ldEFkZHJlc3NNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE5ldEFkZHJlc3NNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldEFkZHJlc3NNZXRhPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbmV0LWFkZHJlc3MtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X25ldF9hZGRyZXNzX21ldGHCoCgpIj5nc3RfYnVmZmVyX2dldF9uZXRfYWRkcmVzc19tZXRhPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPmNvbnN0IDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhSW5mbyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RNZXRhSW5mbzwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI2dzdC1uZXQtYWRkcmVzcy1tZXRhLWdldC1pbmZvIiB0aXRsZT0iZ3N0X25ldF9hZGRyZXNzX21ldGFfZ2V0X2luZm/CoCgpIj5nc3RfbmV0X2FkZHJlc3NfbWV0YV9nZXRfaW5mbzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwjR3N0TmV0QWRkcmVzc01ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0QWRkcmVzc01ldGEiPkdzdE5ldEFkZHJlc3NNZXRhPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuaHRtbCNHc3ROZXRBZGRyZXNzTWV0YSIgdGl0bGU9InN0cnVjdCBHc3ROZXRBZGRyZXNzTWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldEFkZHJlc3NNZXRhPC9zcGFuPjwvYT4gY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBuZXR3b3JrIGFkZHJlc3MgKGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldEFkZHJlc3MuaHRtbCNHU29ja2V0QWRkcmVzcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0QWRkcmVzczwvc3Bhbj48L2E+KQotaW4gYSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiBzbyB0aGF0IGl0IG5ldHdvcmsgZWxlbWVudHMgY2FuIHRyYWNrIHRoZSB0byBhbmQgZnJvbSBhZGRyZXNzCi1vZiB0aGUgYnVmZmVyLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYWRkLW5ldC1hZGRyZXNzLW1ldGEiPjwvYT48aDM+Z3N0X2J1ZmZlcl9hZGRfbmV0X2FkZHJlc3NfbWV0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI0dzdE5ldEFkZHJlc3NNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE5ldEFkZHJlc3NNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldEFkZHJlc3NNZXRhPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfYWRkX25ldF9hZGRyZXNzX21ldGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXRBZGRyZXNzLmh0bWwjR1NvY2tldEFkZHJlc3Mtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NvY2tldEFkZHJlc3M8L3NwYW4+PC9hPiAqYWRkcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BdHRhY2hlcyA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YWRkcjwvY29kZT48L2VtPgotIGFzIG1ldGFkYXRhIGluIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwjR3N0TmV0QWRkcmVzc01ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0QWRkcmVzc01ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRBZGRyZXNzTWV0YTwvc3Bhbj48L2E+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWFkZC1uZXQtYWRkcmVzcy1tZXRhLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YWRkcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPkdTb2NrZXRBZGRyZXNzPC9jb2RlPjwvZW0+Ci10byBjb25uZWN0IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1hZGQtbmV0LWFkZHJlc3MtbWV0YS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwjR3N0TmV0QWRkcmVzc01ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0QWRkcmVzc01ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRBZGRyZXNzTWV0YTwvc3Bhbj48L2E+IGNvbm5lY3RlZCB0byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uIDwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LW5ldC1hZGRyZXNzLW1ldGEiPjwvYT48aDM+Z3N0X2J1ZmZlcl9nZXRfbmV0X2FkZHJlc3NfbWV0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI0dzdE5ldEFkZHJlc3NNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE5ldEFkZHJlc3NNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldEFkZHJlc3NNZXRhPC9zcGFuPjwvYT7CoCoKLWdzdF9idWZmZXJfZ2V0X25ldF9hZGRyZXNzX21ldGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZpbmQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI0dzdE5ldEFkZHJlc3NNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE5ldEFkZHJlc3NNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0QWRkcmVzc01ldGE8L3NwYW4+PC9hPiBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtbmV0LWFkZHJlc3MtbWV0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItZ2V0LW5ldC1hZGRyZXNzLW1ldGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwjR3N0TmV0QWRkcmVzc01ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0QWRkcmVzc01ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRBZGRyZXNzTWV0YTwvc3Bhbj48L2E+IG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiB3aGVuIHRoZXJlCi1pcyBubyBzdWNoIG1ldGFkYXRhIG9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW5ldC1hZGRyZXNzLW1ldGEtZ2V0LWluZm8iPjwvYT48aDM+Z3N0X25ldF9hZGRyZXNzX21ldGFfZ2V0X2luZm/CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPsKgKgotZ3N0X25ldF9hZGRyZXNzX21ldGFfZ2V0X2luZm8gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48c3BhbiBjbGFzcz0idHlwZSI+dm9pZDwvc3Bhbj48L2NvZGU+PC9lbT4pOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROZXRBZGRyZXNzTWV0YSI+PC9hPjxoMz5zdHJ1Y3QgR3N0TmV0QWRkcmVzc01ldGE8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3ROZXRBZGRyZXNzTWV0YSB7Ci0gIEdzdE1ldGEgICAgICAgbWV0YTsKLQotICBHU29ja2V0QWRkcmVzcyAqYWRkcjsKLX07Ci08L3ByZT4KLTxwPkJ1ZmZlciBtZXRhZGF0YSBmb3IgbmV0d29yayBhZGRyZXNzZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TmV0QWRkcmVzc01ldGEubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX25hbWUiPjxwPjxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdE1ldGEuaHRtbCNHc3RNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWV0YTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3ROZXRBZGRyZXNzTWV0YS5tZXRhIj48L2E+bWV0YTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldEFkZHJlc3MuaHRtbCNHU29ja2V0QWRkcmVzcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0QWRkcmVzczwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TmV0QWRkcmVzc01ldGEuYWRkciI+PC9hPmFkZHI8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldEFkZHJlc3MuaHRtbCNHU29ja2V0QWRkcmVzcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0QWRkcmVzczwvc3Bhbj48L2E+IHN0b3JlZCBhcyBtZXRhZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDE3NWQ5Li4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGE6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgTmV0d29yayBDbGFzc2VzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVBhY2tldCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLnRvcF9vZl9wYWdlIj48L2E+R3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhPC9zcGFuPjwvaDI+Ci08cD5Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEg4oCUIE5ldHdvcmsgQ29udHJvbCBNZXNzYWdlIE1ldGE8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCNHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YTwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCNnc3QtYnVmZmVyLWFkZC1uZXQtY29udHJvbC1tZXNzYWdlLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGHCoCgpIj5nc3RfYnVmZmVyX2FkZF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGVmaW5lX2tleXdvcmQiPiNkZWZpbmU8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCNnc3QtYnVmZmVyLWdldC1uZXQtY29udHJvbC1tZXNzYWdlLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2dldF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGEoKSI+Z3N0X2J1ZmZlcl9nZXRfbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhPC9hPjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj5jb25zdCA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwjZ3N0LW5ldC1jb250cm9sLW1lc3NhZ2UtbWV0YS1nZXQtaW5mbyIgdGl0bGU9ImdzdF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfZ2V0X2luZm/CoCgpIj5nc3RfbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhX2dldF9pbmZvPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sI0dzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSIgdGl0bGU9InN0cnVjdCBHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiPkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmluY2x1ZGVzIj48L2E+PGgyPkluY2x1ZGVzPC9oMj4KLTxwcmUgY2xhc3M9InN5bm9wc2lzIj4jaW5jbHVkZSAmbHQ7Z3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sI0dzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSIgdGl0bGU9InN0cnVjdCBHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGE8L3NwYW4+PC9hPiBjYW4gYmUgdXNlZCB0byBzdG9yZSBjb250cm9sIG1lc3NhZ2VzIChhbmNpbGxhcnkKLWRhdGEpIHdoaWNoIHdhcyByZWNlaXZlZCB3aXRoIG9yIGlzIHRvIGJlIHNlbnQgYWxvbmdzaWRlIHRoZSBidWZmZXIgZGF0YS4KLVdoZW4gdXNlZCB3aXRoIHNvY2tldCBzaW5rcyBhbmQgc291cmNlcyB3aGljaCB1bmRlcnN0YW5kIHRoaXMgbWV0YSBpdCBhbGxvd3MKLXNlbmRpbmcgYW5kIHJlY2VpdmluZyBhbmNpbGxhcnkgZGF0YSBzdWNoIGFzIHVuaXggY3JlZGVudGlhbHMgKFNlZQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1VuaXhDcmVkZW50aWFsc01lc3NhZ2UuaHRtbCNHVW5peENyZWRlbnRpYWxzTWVzc2FnZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVW5peENyZWRlbnRpYWxzTWVzc2FnZTwvc3Bhbj48L2E+KSBhbmQgVW5peCBmaWxlIGRlc2NyaXB0aW9ucyAoU2VlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dVbml4RkRNZXNzYWdlLmh0bWwjR1VuaXhGRE1lc3NhZ2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1VuaXhGRE1lc3NhZ2U8L3NwYW4+PC9hPikuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1idWZmZXItYWRkLW5ldC1jb250cm9sLW1lc3NhZ2UtbWV0YSI+PC9hPjxoMz5nc3RfYnVmZmVyX2FkZF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGHCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwjR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGE8L3NwYW4+PC9hPsKgKgotZ3N0X2J1ZmZlcl9hZGRfbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldENvbnRyb2xNZXNzYWdlLmh0bWwjR1NvY2tldENvbnRyb2xNZXNzYWdlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXRDb250cm9sTWVzc2FnZTwvc3Bhbj48L2E+ICptZXNzYWdlPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkF0dGFjaGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5tZXNzYWdlPC9jb2RlPjwvZW0+Ci0gYXMgbWV0YWRhdGEgaW4gYSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwjR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YTwvc3Bhbj48L2E+IHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWFkZC1uZXQtY29udHJvbC1tZXNzYWdlLW1ldGEucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tZXNzYWdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+R1NvY2tldENvbnRyb2xNZXNzYWdlPC9jb2RlPjwvZW0+Ci10byBhdHRhY2ggdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtYnVmZmVyLWFkZC1uZXQtY29udHJvbC1tZXNzYWdlLW1ldGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCNHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhPC9zcGFuPjwvYT4gY29ubmVjdGVkIHRvIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRG9uJ3QgZnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWJ1ZmZlci1nZXQtbmV0LWNvbnRyb2wtbWVzc2FnZS1tZXRhIj48L2E+PGgzPmdzdF9idWZmZXJfZ2V0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YSgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lICAgICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YShiKTwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbmV0LWNvbnRyb2wtbWVzc2FnZS1tZXRhLWdldC1pbmZvIj48L2E+PGgzPmdzdF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfZ2V0X2luZm/CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5jb25zdCA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RNZXRhLmh0bWwjR3N0TWV0YUluZm8iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TWV0YUluZm88L3NwYW4+PC9hPsKgKgotZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9nZXRfaW5mbyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxzcGFuIGNsYXNzPSJ0eXBlIj52b2lkPC9zcGFuPjwvY29kZT48L2VtPik7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiPjwvYT48aDM+c3RydWN0IEdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSB7Ci0gIEdzdE1ldGEgICAgICAgbWV0YTsKLQotICBHU29ja2V0Q29udHJvbE1lc3NhZ2UgKm1lc3NhZ2U7Ci19OwotPC9wcmU+Ci08cD5CdWZmZXIgbWV0YWRhdGEgZm9yIEdTb2NrZXQgY29udHJvbCBtZXNzYWdlcywgQUtBIGFuY2lsbGFyeSBkYXRhIGF0dGFjaGVkIHRvCi1kYXRhIHNlbnQgYWNyb3NzIGEgc29ja2V0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0TWV0YS5odG1sI0dzdE1ldGEiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXRhPC9zcGFuPjwvYT7CoDxlbSBjbGFzcz0ic3RydWN0ZmllbGQiPjxjb2RlPjxhIG5hbWU9IkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5tZXRhIj48L2E+bWV0YTwvY29kZT48L2VtPjs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhcmVudCB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldENvbnRyb2xNZXNzYWdlLmh0bWwjR1NvY2tldENvbnRyb2xNZXNzYWdlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXRDb250cm9sTWVzc2FnZTwvc3Bhbj48L2E+wqAqPGVtIGNsYXNzPSJzdHJ1Y3RmaWVsZCI+PGNvZGU+PGEgbmFtZT0iR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLm1lc3NhZ2UiPjwvYT5tZXNzYWdlPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXRDb250cm9sTWVzc2FnZS5odG1sI0dTb2NrZXRDb250cm9sTWVzc2FnZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0Q29udHJvbE1lc3NhZ2U8L3NwYW4+PC9hPiBzdG9yZWQgYXMgbWV0YWRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0ic3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzdjZGRjLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0TmV0VGltZVBhY2tldDogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBOZXR3b3JrIENsYXNzZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCIgdGl0bGU9IkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItbmV0Lmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQudG9wX29mX3BhZ2UiPjwvYT5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvaDI+Ci08cD5Hc3ROZXRUaW1lUGFja2V0IOKAlCBIZWxwZXIgc3RydWN0dXJlIHRvIGNvbnN0cnVjdCBjbG9jayBwYWNrZXRzIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgYnkgbmV0d29yayBjbG9ja3MuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuZnVuY3Rpb25zIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJmdW5jdGlvbnNfcmV0dXJuIj4KLTxjb2wgY2xhc3M9ImZ1bmN0aW9uc19uYW1lIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1uZXciIHRpdGxlPSJnc3RfbmV0X3RpbWVfcGFja2V0X25ld8KgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfbmV3PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1jb3B5IiB0aXRsZT0iZ3N0X25ldF90aW1lX3BhY2tldF9jb3B5wqAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9jb3B5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtZnJlZSIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZcKgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtcmVjZWl2ZSIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfcmVjZWl2ZcKgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfcmVjZWl2ZTwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtc2VuZCIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZMKgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50ODwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1zZXJpYWxpemUiIHRpdGxlPSJnc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZcKgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRlZmluZV9rZXl3b3JkIj4jZGVmaW5lPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHU1QtTkVULVRJTUUtUEFDS0VULVNJWkU6Q0FQUyIgdGl0bGU9IkdTVF9ORVRfVElNRV9QQUNLRVRfU0laRSI+R1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvbmV0L2dzdG5ldC5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VmFyaW91cyBmdW5jdGlvbnMgZm9yIHJlY2VpdmluZywgc2VuZGluZyBhbiBzZXJpYWxpemluZyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPgotc3RydWN0dXJlcy48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wYWNrZXQtbmV3Ij48L2E+PGgzPmdzdF9uZXRfdGltZV9wYWNrZXRfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+wqAqCi1nc3RfbmV0X3RpbWVfcGFja2V0X25ldyAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ4Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ4PC9zcGFuPjwvYT4gKmJ1ZmZlcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DcmVhdGVzIGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+IGZyb20gYSBidWZmZXIgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yay4gVGhlCi1jYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotIGlzIGF0IGxlYXN0Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dTVC1ORVQtVElNRS1QQUNLRVQtU0laRTpDQVBTIiB0aXRsZT0iR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFPC9zcGFuPjwvYT4gYnl0ZXMgbG9uZy48L3A+Ci08cD5JZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YnVmZmVyPC9jb2RlPjwvZW0+Ci0gaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+TlVMTDwvc3Bhbj48L2E+LCB0aGUgbG9jYWwgYW5kIHJlbW90ZSB0aW1lcyB3aWxsIGJlIHNldCB0bwotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dTVC1DTE9DSy1USU1FLU5PTkU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9DTE9DS19USU1FX05PTkU8L3NwYW4+PC9hPi48L3A+Ci08cD5NVCBzYWZlLiBDYWxsZXIgb3ducyByZXR1cm4gdmFsdWUgKGdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZSB0byBmcmVlKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbmV0LXRpbWUtcGFja2V0LW5ldy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgYnVmZmVyIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IHRoZSBwYWNrZXQsIG9yIE5VTEwuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBwb2ludHMgdG8gYW4gYXJyYXkgb2YgaXRlbXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YXJyYXk8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wYWNrZXQtbmV3LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW5ldC10aW1lLXBhY2tldC1jb3B5Ij48L2E+PGgzPmdzdF9uZXRfdGltZV9wYWNrZXRfY29wecKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPsKgKgotZ3N0X25ldF90aW1lX3BhY2tldF9jb3B5ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gKnBhY2tldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5NYWtlIGEgY29weSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cGFja2V0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW5ldC10aW1lLXBhY2tldC1jb3B5LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWNrZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbmV0LXRpbWUtcGFja2V0LWNvcHkucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIGNvcHkgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhY2tldDwvY29kZT48L2VtPgotLCBmcmVlIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3QtbmV0LXRpbWUtcGFja2V0LWZyZWUiIHRpdGxlPSJnc3RfbmV0X3RpbWVfcGFja2V0X2ZyZWXCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZSgpPC9jb2RlPjwvYT4uPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wYWNrZXQtZnJlZSI+PC9hPjxoMz5nc3RfbmV0X3RpbWVfcGFja2V0X2ZyZWXCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci1nc3RfbmV0X3RpbWVfcGFja2V0X2ZyZWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI0dzdE5ldFRpbWVQYWNrZXQiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE5ldFRpbWVQYWNrZXQ8L3NwYW4+PC9hPiAqcGFja2V0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZyZWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBhY2tldDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wYWNrZXQtZnJlZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFja2V0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtbmV0LXRpbWUtcGFja2V0LXJlY2VpdmUiPjwvYT48aDM+Z3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+wqAqCi1nc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HU29ja2V0Lmh0bWwjR1NvY2tldC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0PC9zcGFuPjwvYT4gKnNvY2tldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXRBZGRyZXNzLmh0bWwjR1NvY2tldEFkZHJlc3Mtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NvY2tldEFkZHJlc3M8L3NwYW4+PC9hPiAqKnNyY19hZGRyZXNzPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4gKiplcnJvcjwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZWNlaXZlcyBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+IG92ZXIgYSBzb2NrZXQuIEhhbmRsZXMgaW50ZXJydXB0ZWQgc3lzdGVtCi1jYWxscywgYnV0IG90aGVyd2lzZSByZXR1cm5zIE5VTEwgb24gZXJyb3IuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LW5ldC10aW1lLXBhY2tldC1yZWNlaXZlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNvY2tldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnNvY2tldCB0byByZWNlaXZlIHRoZSB0aW1lIHBhY2tldCBvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zcmNfYWRkcmVzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhZGRyZXNzIG9mIHZhcmlhYmxlIHRvIHJldHVybiBzZW5kZXIgYWRkcmVzcy4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmVycm9yPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+cmV0dXJuIGFkZHJlc3MgZm9yIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRXJyb3ItUmVwb3J0aW5nLmh0bWwjR0Vycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R0Vycm9yPC9zcGFuPjwvYT4sIG9yIE5VTEw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wYWNrZXQtcmVjZWl2ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TmV0VGltZVBhY2tldDwvc3Bhbj48L2E+LCBvciBOVUxMIG9uIGVycm9yLiBGcmVlCi13aXRoIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1mcmVlIiB0aXRsZT0iZ3N0X25ldF90aW1lX3BhY2tldF9mcmVlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfbmV0X3RpbWVfcGFja2V0X2ZyZWUoKTwvY29kZT48L2E+IHdoZW4gZG9uZS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LW5ldC10aW1lLXBhY2tldC1zZW5kIj48L2E+PGgzPmdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X25ldF90aW1lX3BhY2tldF9zZW5kICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gKnBhY2tldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXQuaHRtbCNHU29ja2V0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXQ8L3NwYW4+PC9hPiAqc29ja2V0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldEFkZHJlc3MuaHRtbCNHU29ja2V0QWRkcmVzcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0QWRkcmVzczwvc3Bhbj48L2E+ICpkZXN0X2FkZHJlc3M8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1FcnJvci1SZXBvcnRpbmcuaHRtbCNHRXJyb3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HRXJyb3I8L3NwYW4+PC9hPiAqKmVycm9yPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNlbmRzIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gb3ZlciBhIHNvY2tldC48L3A+Ci08cD5NVCBzYWZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wYWNrZXQtc2VuZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWNrZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gdG8gc2VuZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zb2NrZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5zb2NrZXQgdG8gc2VuZCB0aGUgdGltZSBwYWNrZXQgb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVzdF9hZGRyZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWRkcmVzcyB0byBzZW5kIHRoZSB0aW1lIHBhY2tldCB0bzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5lcnJvcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnJldHVybiBhZGRyZXNzIGZvciBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUVycm9yLVJlcG9ydGluZy5odG1sI0dFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdFcnJvcjwvc3Bhbj48L2E+LCBvciBOVUxMPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbmV0LXRpbWUtcGFja2V0LXNlbmQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUUlVFIGlmIHN1Y2Nlc3NmdWwsIEZBTFNFIGluIGNhc2UgYW4gZXJyb3Igb2NjdXJyZWQuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wYWNrZXQtc2VyaWFsaXplIj48L2E+PGgzPmdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDgiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ4PC9zcGFuPjwvYT7CoCoKLWdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc3QgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gKnBhY2tldDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5TZXJpYWxpemVkIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4gaW50byBhIG5ld2x5LWFsbG9jYXRlZCBzZXF1ZW5jZSBvZgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHU1QtTkVULVRJTUUtUEFDS0VULVNJWkU6Q0FQUyIgdGl0bGU9IkdTVF9ORVRfVElNRV9QQUNLRVRfU0laRSI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9ORVRfVElNRV9QQUNLRVRfU0laRTwvc3Bhbj48L2E+IGJ5dGVzLCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuIFRoZSB2YWx1ZSByZXR1cm5lZCBpcwotc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gd3JpdGUoMikgb3Igc2VuZHRvKDIpIGZvciBjb21tdW5pY2F0aW9uIG92ZXIgdGhlCi1uZXR3b3JrLjwvcD4KLTxwPk1UIHNhZmUuIENhbGxlciBvd25zIHJldHVybiB2YWx1ZSAoZ19mcmVlIHRvIGZyZWUpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1uZXQtdGltZS1wYWNrZXQtc2VyaWFsaXplLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWNrZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtbmV0LXRpbWUtcGFja2V0LXNlcmlhbGl6ZS5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgbmV3bHkgYWxsb2NhdGVkIHNlcXVlbmNlIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR1NULU5FVC1USU1FLVBBQ0tFVC1TSVpFOkNBUFMiIHRpdGxlPSJHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkU8L3NwYW4+PC9hPiBieXRlcy48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROZXRUaW1lUGFja2V0Ij48L2E+PGgzPnN0cnVjdCBHc3ROZXRUaW1lUGFja2V0PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TmV0VGltZVBhY2tldCB7Ci0gIEdzdENsb2NrVGltZSBsb2NhbF90aW1lOwotICBHc3RDbG9ja1RpbWUgcmVtb3RlX3RpbWU7Ci19OwotPC9wcmU+Ci08cD5Db250ZW50IG9mIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNHc3ROZXRUaW1lUGFja2V0IiB0aXRsZT0ic3RydWN0IEdzdE5ldFRpbWVQYWNrZXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUGFja2V0PC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TmV0VGltZVBhY2tldC5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3ROZXRUaW1lUGFja2V0LmxvY2FsLXRpbWUiPjwvYT5sb2NhbF90aW1lPC9jb2RlPjwvZW0+OzwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbG9jYWwgdGltZSB3aGVuIHRoaXMgcGFja2V0IHdhcyBzZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfbmFtZSI+PHA+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+wqA8ZW0gY2xhc3M9InN0cnVjdGZpZWxkIj48Y29kZT48YSBuYW1lPSJHc3ROZXRUaW1lUGFja2V0LnJlbW90ZS10aW1lIj48L2E+cmVtb3RlX3RpbWU8L2NvZGU+PC9lbT47PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InN0cnVjdF9tZW1iZXJfZGVzY3JpcHRpb24iPjxwPnRoZSByZW1vdGUgdGltZSBvYnNlcnZhdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR1NULU5FVC1USU1FLVBBQ0tFVC1TSVpFOkNBUFMiPjwvYT48aDM+R1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4jZGVmaW5lIEdTVF9ORVRfVElNRV9QQUNLRVRfU0laRSAxNgotPC9wcmU+Ci08cD5UaGUgc2l6ZSBvZiB0aGUgcGFja2V0cyBzZW50IGJldHdlZW4gbmV0d29yayBjbG9ja3MuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgaHJlZj0iLi4vaHRtbC9Hc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRDbGllbnRDbG9jazwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTQwNWFkLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY1MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R3N0UXVldWVBcnJheTogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQmFzZSBhbmQgVXRpbGxpdHkgQ2xhc3NlcyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBEeW5hbWljIFBhcmFtZXRlciBDb250cm9sIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1jb250cm9sLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkudG9wX29mX3BhZ2UiPjwvYT5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvaDI+Ci08cD5Hc3RRdWV1ZUFycmF5IOKAlCBBcnJheSBiYXNlZCBxdWV1ZSBvYmplY3Q8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5mdW5jdGlvbnMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9ImZ1bmN0aW9uc19yZXR1cm4iPgotPGNvbCBjbGFzcz0iZnVuY3Rpb25zX25hbWUiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFF1ZXVlQXJyYXk8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1uZXciIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfbmV3wqAoKSI+Z3N0X3F1ZXVlX2FycmF5X25ldzwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZnJlZSIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9mcmVlwqAoKSI+Z3N0X3F1ZXVlX2FycmF5X2ZyZWU8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmd1aW50PC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZ2V0LWxlbmd0aCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RowqAoKSI+Z3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGg8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktcG9wLWhlYWQiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWTCoCgpIj5nc3RfcXVldWVfYXJyYXlfcG9wX2hlYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktcGVlay1oZWFkIiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWQ8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXB1c2gtdGFpbCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWzCoCgpIj5nc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWlzLWVtcHR5IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5wqAoKSI+Z3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWRyb3AtZWxlbWVudCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9kcm9wX2VsZW1lbnTCoCgpIj5nc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWZpbmQiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfZmluZMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9maW5kPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNHc3RRdWV1ZUFycmF5IiB0aXRsZT0iR3N0UXVldWVBcnJheSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktbmV3LWZvci1zdHJ1Y3QiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfbmV3X2Zvcl9zdHJ1Y3TCoCgpIj5nc3RfcXVldWVfYXJyYXlfbmV3X2Zvcl9zdHJ1Y3Q8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXB1c2gtdGFpbC1zdHJ1Y3QiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsX3N0cnVjdMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWxfc3RydWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXBlZWstaGVhZC1zdHJ1Y3QiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfcGVla19oZWFkX3N0cnVjdMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWRfc3RydWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ncG9pbnRlcjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXBvcC1oZWFkLXN0cnVjdCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZF9zdHJ1Y3TCoCgpIj5nc3RfcXVldWVfYXJyYXlfcG9wX2hlYWRfc3RydWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWRyb3Atc3RydWN0IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X2Ryb3Bfc3RydWN0wqAoKSI+Z3N0X3F1ZXVlX2FycmF5X2Ryb3Bfc3RydWN0PC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNHc3RRdWV1ZUFycmF5IiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5pbmNsdWRlcyI+PC9hPjxoMj5JbmNsdWRlczwvaDI+Ci08cHJlIGNsYXNzPSJzeW5vcHNpcyI+I2luY2x1ZGUgJmx0O2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuaCZndDsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gaXMgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgc3RhbmRhcmQgcXVldWUgZnVuY3Rpb25hbGl0eQotYmFzZWQgb24gYW4gYXJyYXkgaW5zdGVhZCBvZiBsaW5rZWQgbGlzdHMuIFRoaXMgcmVkdWNlcyB0aGUgb3ZlcmhlYWQKLWNhdXNlZCBieSBtZW1vcnkgbWFuYWdlbWVudCBieSBhIGxhcmdlIGZhY3Rvci48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1uZXciPjwvYT48aDM+Z3N0X3F1ZXVlX2FycmF5X25ld8KgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+wqAqCi1nc3RfcXVldWVfYXJyYXlfbmV3ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaW5pdGlhbF9zaXplPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkFsbG9jYXRlcyBhIG5ldyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+IG9iamVjdCB3aXRoIGFuIGluaXRpYWwKLXF1ZXVlIHNpemUgb2YgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmluaXRpYWxfc2l6ZTwvY29kZT48L2VtPgotLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmluaXRpYWxfc2l6ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkluaXRpYWwgc2l6ZSBvZiB0aGUgbmV3IHF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gb2JqZWN0PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1mcmVlIj48L2E+PGgzPmdzdF9xdWV1ZV9hcnJheV9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXVlX2FycmF5X2ZyZWUgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+ICphcnJheTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5GcmVlcyBxdWV1ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4KLSBhbmQgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHRvIGl0LjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1mcmVlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcnJheTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNHc3RRdWV1ZUFycmF5IiB0aXRsZT0iR3N0UXVldWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlQXJyYXk8L3NwYW4+PC9hPiBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1nZXQtbGVuZ3RoIj48L2E+PGgzPmdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RowqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5ndWludDwvc3Bhbj48L2E+Ci1nc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gKmFycmF5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgcXVldWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFycmF5PC9jb2RlPjwvZW0+Ci08L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktZ2V0LWxlbmd0aC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LWdldC1sZW5ndGgucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgbGVuZ3RoIG9mIHRoZSBxdWV1ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4KLS48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LXBvcC1oZWFkIj48L2E+PGgzPmdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNHc3RRdWV1ZUFycmF5IiB0aXRsZT0iR3N0UXVldWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlQXJyYXk8L3NwYW4+PC9hPiAqYXJyYXk8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmV0dXJucyBhbmQgaGVhZCBvZiB0aGUgcXVldWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFycmF5PC9jb2RlPjwvZW0+Ci0gYW5kIHJlbW92ZXMKLWl0IGZyb20gdGhlIHF1ZXVlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1wb3AtaGVhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LXBvcC1oZWFkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVGhlIGhlYWQgb2YgdGhlIHF1ZXVlPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1wZWVrLWhlYWQiPjwvYT48aDM+Z3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gKmFycmF5PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlJldHVybnMgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcnJheTwvY29kZT48L2VtPgotIGFuZCBkb2VzIG5vdAotcmVtb3ZlIGl0IGZyb20gdGhlIHF1ZXVlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1wZWVrLWhlYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFycmF5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+IG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1wZWVrLWhlYWQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBUaGUgaGVhZCBvZiB0aGUgcXVldWU8L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LXB1c2gtdGFpbCI+PC9hPjxoMz5nc3RfcXVldWVfYXJyYXlfcHVzaF90YWlswqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gKmFycmF5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UHVzaGVzIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0gdG8gdGhlIHRhaWwgb2YgdGhlIHF1ZXVlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcnJheTwvY29kZT48L2VtPgotLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1wdXNoLXRhaWwucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmRhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5vYmplY3QgdG8gcHVzaDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktaXMtZW1wdHkiPjwvYT48aDM+Z3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci1nc3RfcXVldWVfYXJyYXlfaXNfZW1wdHkgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+ICphcnJheTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5DaGVja3MgaWYgdGhlIHF1ZXVlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5hcnJheTwvY29kZT48L2VtPgotIGlzIGVtcHR5LjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1pcy1lbXB0eS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LWlzLWVtcHR5LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBxdWV1ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4KLWlzIGVtcHR5PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNy5odG1sI2FwaS1pbmRleC0xLjIiPjEuMjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1kcm9wLWVsZW1lbnQiPjwvYT48aDM+Z3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotZ3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gKmFycmF5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGlkeDwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5Ecm9wcyB0aGUgcXVldWUgZWxlbWVudCBhdCBwb3NpdGlvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aWR4PC9jb2RlPjwvZW0+Ci0gZnJvbSBxdWV1ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4KLS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktZHJvcC1lbGVtZW50LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFycmF5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+IG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbmRleCB0byBkcm9wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktZHJvcC1lbGVtZW50LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGRyb3BwZWQgZWxlbWVudDwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDcuaHRtbCNhcGktaW5kZXgtMS4yIj4xLjI8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktZmluZCI+PC9hPjxoMz5nc3RfcXVldWVfYXJyYXlfZmluZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ8L3NwYW4+PC9hPgotZ3N0X3F1ZXVlX2FycmF5X2ZpbmQgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+ICphcnJheTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItRG91Ymx5LUxpbmtlZC1MaXN0cy5odG1sI0dDb21wYXJlRnVuYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdDb21wYXJlRnVuYzwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+IGRhdGE8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RmluZHMgYW4gZWxlbWVudCBpbiB0aGUgcXVldWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFycmF5PC9jb2RlPjwvZW0+Ci0sIGVpdGhlciBieSBjb21wYXJpbmcgZXZlcnkgZWxlbWVudAotd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZnVuYzwvY29kZT48L2VtPgotIG9yIGJ5IGxvb2tpbmcgdXAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLSBpZiBubyBjb21wYXJlIGZ1bmN0aW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5mdW5jPC9jb2RlPjwvZW0+Ci0gaXMgcHJvdmlkZWQsCi1hbmQgcmV0dXJuaW5nIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudC48L3A+Ci08cD5Ob3RlIHRoYXQgdGhlIGluZGV4IGlzIG5vdCAwLWJhc2VkLCBidXQgYW4gaW50ZXJuYWwgaW5kZXggbnVtYmVyIHdpdGggYQotcmFuZG9tIG9mZnNldC4gVGhlIGluZGV4IGNhbiBiZSB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZHJvcC1lbGVtZW50IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudCgpPC9jb2RlPjwvYT4uIEZJWE1FOiByZXR1cm4gaW5kZXggMC1iYXNlZCBhbmQgbWFrZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZHJvcC1lbGVtZW50IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudMKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudCgpPC9jb2RlPjwvYT4gdGFrZSBhIDAtYmFzZWQgaW5kZXguPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LWZpbmQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gb2JqZWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gY29tcGFyaXNvbiBmdW5jdGlvbiwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IHRvIGZpbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmRhdGE8L2NvZGU+PC9lbT4KLWJ5IHZhbHVlLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+ZGF0YSBmb3IgY29tcGFyaXNvbiBmdW5jdGlvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LWZpbmQucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBJbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCBvciAtMSBpZiBub3RoaW5nIHdhcyBmb3VuZC48L3A+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJpeDA3Lmh0bWwjYXBpLWluZGV4LTEuMiI+MS4yPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LW5ldy1mb3Itc3RydWN0Ij48L2E+PGgzPmdzdF9xdWV1ZV9hcnJheV9uZXdfZm9yX3N0cnVjdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+wqAqCi1nc3RfcXVldWVfYXJyYXlfbmV3X2Zvcl9zdHJ1Y3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzdHJ1Y3Rfc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGluaXRpYWxfc2l6ZTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5BbGxvY2F0ZXMgYSBuZXcgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNHc3RRdWV1ZUFycmF5IiB0aXRsZT0iR3N0UXVldWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlQXJyYXk8L3NwYW4+PC9hPiBvYmplY3QgZm9yIGVsZW1lbnRzIChlLmcuIHN0cnVjdHVyZXMpCi1vZiBzaXplIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zdHJ1Y3Rfc2l6ZTwvY29kZT48L2VtPgotLCB3aXRoIGFuIGluaXRpYWwgcXVldWUgc2l6ZSBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aW5pdGlhbF9zaXplPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LW5ldy1mb3Itc3RydWN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnN0cnVjdF9zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+U2l6ZSBvZiBlYWNoIGVsZW1lbnQgKGUuZy4gc3RydWN0dXJlKSBpbiB0aGUgYXJyYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aW5pdGlhbF9zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+SW5pdGlhbCBzaXplIG9mIHRoZSBuZXcgcXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1uZXctZm9yLXN0cnVjdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IGEgbmV3IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gb2JqZWN0PC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1wdXNoLXRhaWwtc3RydWN0Ij48L2E+PGgzPmdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWxfc3RydWN0wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbF9zdHJ1Y3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+ICphcnJheTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gcF9zdHJ1Y3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktcGVlay1oZWFkLXN0cnVjdCI+PC9hPjxoMz5nc3RfcXVldWVfYXJyYXlfcGVla19oZWFkX3N0cnVjdMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPgotZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZF9zdHJ1Y3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+ICphcnJheTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4KLSB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIHF1ZXVlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IkV4cG9zZWQgaW4gQyBjb2RlLCBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlcy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5za2lwPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1wZWVrLWhlYWQtc3RydWN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcnJheTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNHc3RRdWV1ZUFycmF5IiB0aXRsZT0iR3N0UXVldWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlQXJyYXk8L3NwYW4+PC9hPiBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktcGVlay1oZWFkLXN0cnVjdC5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHBvaW50ZXIgdG8gZWxlbWVudCBvciBzdHJ1Y3QsIG9yIE5VTEwgaWYgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFycmF5PC9jb2RlPjwvZW0+Ci13YXMgZW1wdHkuIFRoZQotZGF0YSBwb2ludGVkIHRvIGJ5IHRoZSByZXR1cm5lZCBwb2ludGVyIHN0YXlzIHZhbGlkIG9ubHkgYXMgbG9uZyBhcwotdGhlIHF1ZXVlIGFycmF5IGlzIG5vdCBtb2RpZmllZCBmdXJ0aGVyITwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktcG9wLWhlYWQtc3RydWN0Ij48L2E+PGgzPmdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZF9zdHJ1Y3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdwb2ludGVyPC9zcGFuPjwvYT4KLWdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZF9zdHJ1Y3QgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+ICphcnJheTwvY29kZT48L2VtPik7PC9wcmU+Ci08cD5SZXR1cm5zIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4KLSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBxdWV1ZS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktcG9wLWhlYWQtc3RydWN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5hcnJheTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNHc3RRdWV1ZUFycmF5IiB0aXRsZT0iR3N0UXVldWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlQXJyYXk8L3NwYW4+PC9hPiBvYmplY3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtcXVldWUtYXJyYXktcG9wLWhlYWQtc3RydWN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gcG9pbnRlciB0byBlbGVtZW50IG9yIHN0cnVjdCwgb3IgTlVMTCBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+YXJyYXk8L2NvZGU+PC9lbT4KLXdhcyBlbXB0eS4gVGhlCi1kYXRhIHBvaW50ZWQgdG8gYnkgdGhlIHJldHVybmVkIHBvaW50ZXIgc3RheXMgdmFsaWQgb25seSBhcyBsb25nIGFzCi10aGUgcXVldWUgYXJyYXkgaXMgbm90IG1vZGlmaWVkIGZ1cnRoZXIhPC9wPgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiA8YSBjbGFzcz0ibGluayIgaHJlZj0iaXgwNS5odG1sI2FwaS1pbmRleC0xLjYiPjEuNjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1xdWV1ZS1hcnJheS1kcm9wLXN0cnVjdCI+PC9hPjxoMz5nc3RfcXVldWVfYXJyYXlfZHJvcF9zdHJ1Y3TCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLWdzdF9xdWV1ZV9hcnJheV9kcm9wX3N0cnVjdCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUFycmF5PC9zcGFuPjwvYT4gKmFycmF5PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gaWR4PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gcF9zdHJ1Y3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+RHJvcHMgdGhlIHF1ZXVlIGVsZW1lbnQgYXQgcG9zaXRpb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmlkeDwvY29kZT48L2VtPgotIGZyb20gcXVldWUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmFycmF5PC9jb2RlPjwvZW0+Ci0gYW5kIGNvcGllcyB0aGUKLWRhdGEgb2YgdGhlIGVsZW1lbnQgb3Igc3RydWN0dXJlIHRoYXQgd2FzIHJlbW92ZWQgaW50byA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cF9zdHJ1Y3Q8L2NvZGU+PC9lbT4KLSBpZgotPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBfc3RydWN0PC9jb2RlPjwvZW0+Ci0gaXMgc2V0IChub3QgTlVMTCkuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRXhwb3NlZCBpbiBDIGNvZGUsIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFibGUgaW4gb3RoZXIgbGFuZ3VhZ2VzLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNraXA8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LWRyb3Atc3RydWN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmFycmF5PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI0dzdFF1ZXVlQXJyYXkiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWVBcnJheTwvc3Bhbj48L2E+IG9iamVjdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5pZHg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5pbmRleCB0byBkcm9wPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBfc3RydWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YWRkcmVzcyBpbnRvIHdoaWNoIHRvIHN0b3JlIHRoZSBkYXRhIG9mIHRoZSBkcm9wcGVkIHN0cnVjdHVyZSwgb3IgTlVMTDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXF1ZXVlLWFycmF5LWRyb3Atc3RydWN0LnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBlcnJvcjwvcD4KLTwvZGl2PgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogPGEgY2xhc3M9ImxpbmsiIGhyZWY9Iml4MDUuaHRtbCNhcGktaW5kZXgtMS42Ij4xLjY8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXVlQXJyYXkiPjwvYT48aDM+R3N0UXVldWVBcnJheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdFF1ZXVlQXJyYXkgR3N0UXVldWVBcnJheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIGIvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMwMDZmMi4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5Hc3RTdHJlYW1Db25zaXN0ZW5jeTogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENoZWNrIFVuaXQgVGVzdGluZyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJTdHJhdyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJnc3RyZWFtZXItY2hlY2suaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5LnRvcF9vZl9wYWdlIj48L2E+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L3NwYW4+PC9oMj4KLTxwPkdzdFN0cmVhbUNvbnNpc3RlbmN5IOKAlCBEYXRhIGZsb3cgY29uc2lzdGVuY3kgY2hlY2tlciBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5LmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI0dzdFN0cmVhbUNvbnNpc3RlbmN5IiB0aXRsZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1uZXciIHRpdGxlPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXfCoCgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXc8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdC1jb25zaXN0ZW5jeS1jaGVja2VyLXJlc2V0IiB0aXRsZT0iZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXTCoCgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9yZXNldDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItZnJlZSIgdGl0bGU9ImdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWXCoCgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5nYm9vbGVhbjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdC1jb25zaXN0ZW5jeS1jaGVja2VyLWFkZC1wYWQiIHRpdGxlPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9hZGRfcGFkwqAoKSI+Z3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfYWRkX3BhZDwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmgmZ3Q7Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlc2UgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb2YgdGhlIHVuaXQgdGVzdHMgZm91bmQKLWluc2lkZSB0aGUgJ2NoZWNrJyBkaXJlY3RvcmllcyBvZiB2YXJpb3VzIEdTdHJlYW1lciBwYWNrYWdlcy48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1uZXciPjwvYT48aDM+Z3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3wqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvc3Bhbj48L2E+wqAqCi1nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXcgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAqcGFkPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlNldHMgdXAgYSBkYXRhIHByb2JlIG9uIHRoZSBnaXZlbiBwYWQgd2hpY2ggd2lsbCByYWlzZSBhc3NlcnRpb25zIGlmIHRoZQotZGF0YSBmbG93IGlzIGluY29uc2lzdGVudC48L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJFeHBvc2VkIGluIEMgY29kZSwgbm90IG5lY2Vzc2FyaWx5IGF2YWlsYWJsZSBpbiBvdGhlciBsYW5ndWFnZXMuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+c2tpcDwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1uZXcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiBvbiB3aGljaCB0aGUgZGF0YWZsb3cgd2lsbCBiZSBjaGVja2VkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb25zaXN0ZW5jeS1jaGVja2VyLW5ldy5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9zcGFuPjwvYT4gc3RydWN0dXJlIHVzZWQgdG8gdHJhY2sgZGF0YSBmbG93LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1yZXNldCI+PC9hPjxoMz5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9yZXNldMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0ICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9zcGFuPjwvYT4gKmNvbnNpc3Q8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+UmVzZXQgdGhlIHN0cmVhbSBjaGVja2VyJ3MgaW50ZXJuYWwgdmFyaWFibGVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb25zaXN0ZW5jeS1jaGVja2VyLXJlc2V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jb25zaXN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI0dzdFN0cmVhbUNvbnNpc3RlbmN5IiB0aXRsZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvc3Bhbj48L2E+IHRvIHJlc2V0LjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItZnJlZSI+PC9hPjxoMz5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI0dzdFN0cmVhbUNvbnNpc3RlbmN5IiB0aXRsZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvc3Bhbj48L2E+ICpjb25zaXN0PC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPkZyZWVzIHRoZSBhbGxvY2F0ZWQgZGF0YSBhbmQgcHJvYmVzIGFzc29jaWF0ZWQgd2l0aCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29uc2lzdDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb25zaXN0ZW5jeS1jaGVja2VyLWZyZWUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmNvbnNpc3Q8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9zcGFuPjwvYT4gdG8gZnJlZS48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC1jb25zaXN0ZW5jeS1jaGVja2VyLWFkZC1wYWQiPjwvYT48aDM+Z3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfYWRkX3BhZMKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPgotZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfYWRkX3BhZCAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI0dzdFN0cmVhbUNvbnNpc3RlbmN5IiB0aXRsZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvc3Bhbj48L2E+ICpjb25zaXN0PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICpwYWQ8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+U2V0cyB1cCBhIGRhdGEgcHJvYmUgb24gdGhlIGdpdmVuIHBhZCB3aGljaCB3aWxsIHJhaXNlIGFzc2VydGlvbnMgaWYgdGhlCi1kYXRhIGZsb3cgaXMgaW5jb25zaXN0ZW50LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC1jb25zaXN0ZW5jeS1jaGVja2VyLWFkZC1wYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y29uc2lzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNHc3RTdHJlYW1Db25zaXN0ZW5jeSIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L3NwYW4+PC9hPiBoYW5kbGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+IG9uIHdoaWNoIHRoZSBkYXRhZmxvdyB3aWxsIGJlIGNoZWNrZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1hZGQtcGFkLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IGlmIHRoZSBwYWQgd2FzIGFkZGVkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij48L2E+PGgzPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtQ29uc2lzdGVuY3kgR3N0U3RyZWFtQ29uc2lzdGVuY3k7PC9wcmU+Ci08cD5PcGFxdWUgY29uc2lzdGVuY3kgY2hlY2tlciBoYW5kbGUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWI4YjZmLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NDcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdzdFR5cGVGaW5kSGVscGVyOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZ3N0cmVhbWVyLWJhc2UuaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwiIHRpdGxlPSJHc3RGbG93Q29tYmluZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci50b3Bfb2ZfcGFnZSI+PC9hPkdzdFR5cGVGaW5kSGVscGVyPC9zcGFuPjwvaDI+Ci08cD5Hc3RUeXBlRmluZEhlbHBlciDigJQgVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHR5cGVmaW5kaW5nPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmZ1bmN0aW9ucyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0iZnVuY3Rpb25zX3JldHVybiI+Ci08Y29sIGNsYXNzPSJmdW5jdGlvbnNfbmFtZSI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlciIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVywqAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXI8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWJ1ZmZlciIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXLCoCgpIj5nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqCi08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1leHRlbnNpb24iIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZXh0ZW5zaW9uwqAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbjwvYT7CoDxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oKTwvc3Bhbj4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJmdW5jdGlvbl90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItZGF0YSIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhwqAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGE8L2E+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdEZsb3dSZXR1cm4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Rmxvd1JldHVybjwvc3Bhbj48L2E+Ci08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj4KLTxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4oPC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI0dzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbsKgKCkiPipHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPik8L3NwYW4+wqA8c3BhbiBjbGFzcz0iY19wdW5jdHVhdGlvbiI+KCk8L3NwYW4+Ci08L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZ2V0LXJhbmdlIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlwqAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlPC9hPsKgPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPigpPC9zcGFuPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaW5jbHVkZXMiPjwvYT48aDI+SW5jbHVkZXM8L2gyPgotPHByZSBjbGFzcz0ic3lub3BzaXMiPiNpbmNsdWRlICZsdDtnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oJmd0OwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlV0aWxpdHkgZnVuY3Rpb25zIGZvciBlbGVtZW50cyBkb2luZyB0eXBlZmluZGluZzoKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXLCoCgpIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF90eXBlX2ZpbmRfaGVscGVyKCk8L2NvZGU+PC9hPiBkb2VzIHR5cGVmaW5kaW5nIGluIHB1bGwgbW9kZSwgd2hpbGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1idWZmZXIiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVywqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyKCk8L2NvZGU+PC9hPiBpcyB1c2VmdWwgZm9yIGVsZW1lbnRzIG5lZWRpbmcgdG8gZG8KLXR5cGVmaW5kaW5nIGluIHB1c2ggbW9kZSBmcm9tIGEgY2hhaW4gZnVuY3Rpb24uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXIiPjwvYT48aDM+Z3N0X3R5cGVfZmluZF9oZWxwZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF90eXBlX2ZpbmRfaGVscGVyICg8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT4gKnNyYzwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IHNpemU8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VHJpZXMgdG8gZmluZCB3aGF0IHR5cGUgb2YgZGF0YSBpcyBmbG93aW5nIGZyb20gdGhlIGdpdmVuIHNvdXJjZSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPi48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtaGVscGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPkEgc291cmNlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNpemU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5UaGUgbGVuZ3RoIGluIGJ5dGVzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWhlbHBlci5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRhCi1zdHJlYW0uICBSZXR1cm5zIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBubyA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBtYXRjaGVzIHRoZSBkYXRhIHN0cmVhbS4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItYnVmZmVyIj48L2E+PGgzPmdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXLCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICpidWY8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0VHlwZUZpbmQuaHRtbCNHc3RUeXBlRmluZFByb2JhYmlsaXR5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRQcm9iYWJpbGl0eTwvc3Bhbj48L2E+ICpwcm9iPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRyaWVzIHRvIGZpbmQgd2hhdCB0eXBlIG9mIGRhdGEgaXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiwgdGhlCi1hc3N1bXB0aW9uIGJlaW5nIHRoYXQgdGhlIGJ1ZmZlciByZXByZXNlbnRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSBvcgotZmlsZS48L3A+Ci08cD5BbGwgYXZhaWxhYmxlIHR5cGVmaW5kZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBkYXRhIGluIG9yZGVyIG9mIHJhbmsuIElmCi1hIHR5cGVmaW5kaW5nIGZ1bmN0aW9uIHJldHVybnMgYSBwcm9iYWJpbGl0eSBvZiA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dTVC1UWVBFLUZJTkQtTUFYSU1VTTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1RZUEVfRklORF9NQVhJTVVNPC9jb2RlPjwvYT4sCi10eXBlZmluZGluZyBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgZm91bmQgY2FwcyB3aWxsIGJlIHJldHVybmVkCi1yaWdodCBhd2F5LiBPdGhlcndpc2UsIGFsbCBhdmFpbGFibGUgdHlwZWZpbmQgZnVuY3Rpb25zIHdpbGwgdGhlIHRyaWVkLAotYW5kIHRoZSBjYXBzIHdpdGggdGhlIGhpZ2hlc3QgcHJvYmFiaWxpdHkgd2lsbCBiZSByZXR1cm5lZCwgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmCi10aGUgY29udGVudCBvZiB0aGUgYnVmZmVyIGNvdWxkIG5vdCBiZSBpZGVudGlmaWVkLjwvcD4KLTxwPkZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWJ1ZmZlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gb2JqZWN0IGRvaW5nIHRoZSB0eXBlZmluZGluZywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+ICh1c2VkIGZvciBsb2dnaW5nKS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gd2l0aCBkYXRhIHRvIHR5cGVmaW5kLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wcm9iPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgZm91bmQKLWNhcHMsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPi4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iUGFyYW1ldGVyIGZvciByZXR1cm5pbmcgcmVzdWx0cy4gRGVmYXVsdCBpcyB0cmFuc2ZlciBmdWxsLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm91dDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtaGVscGVyLWZvci1idWZmZXIucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gY29ycmVzcG9uZGluZyB0byB0aGUgZGF0YSwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kLiBUaGUgY2FsbGVyIHNob3VsZCBmcmVlIHRoZSBjYXBzCi1yZXR1cm5lZCB3aXRoIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3VucmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItZXh0ZW5zaW9uIj48L2E+PGgzPmdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb27CoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb24gKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpleHRlbnNpb248L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VHJpZXMgdG8gZmluZCB0aGUgYmVzdCA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBhc3NvY2lhdGVkIHdpdGggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVuc2lvbjwvY29kZT48L2VtPgotLjwvcD4KLTxwPkFsbCBhdmFpbGFibGUgdHlwZWZpbmRlcnMgd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgdGhlIGV4dGVuc2lvbiBpbiBvcmRlcgotb2YgcmFuay4gVGhlIGNhcHMgb2YgdGhlIGZpcnN0IHR5cGVmaW5kZXIgdGhhdCBjYW4gaGFuZGxlIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5leHRlbnNpb248L2NvZGU+PC9lbT4KLSB3aWxsIGJlCi1yZXR1cm5lZC48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtaGVscGVyLWZvci1leHRlbnNpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b2JqPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IG9iamVjdCBkb2luZyB0aGUgdHlwZWZpbmRpbmcsIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiAodXNlZCBmb3IgbG9nZ2luZykuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmV4dGVuc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmFuIGV4dGVuc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWV4dGVuc2lvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IHRoZSA8YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBjb3JyZXNwb25kaW5nIHRvCi08ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+ZXh0ZW5zaW9uPC9jb2RlPjwvZW0+Ci0sIG9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kLiBUaGUgY2FsbGVyIHNob3VsZCBmcmVlCi10aGUgY2FwcyByZXR1cm5lZCB3aXRoIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3VucmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItZGF0YSI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZGF0YcKgKCk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKgotZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGEgKDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqb2JqPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb25zdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50OCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50ODwvc3Bhbj48L2E+ICpkYXRhPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dzaXplIj48c3BhbiBjbGFzcz0idHlwZSI+Z3NpemU8L3NwYW4+PC9hPiBzaXplPC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kUHJvYmFiaWxpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZFByb2JhYmlsaXR5PC9zcGFuPjwvYT4gKnByb2I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VHJpZXMgdG8gZmluZCB3aGF0IHR5cGUgb2YgZGF0YSBpcyBjb250YWluZWQgaW4gdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0sIHRoZQotYXNzdW1wdGlvbiBiZWluZyB0aGF0IHRoZSBkYXRhIHJlcHJlc2VudHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtIG9yCi1maWxlLjwvcD4KLTxwPkFsbCBhdmFpbGFibGUgdHlwZWZpbmRlcnMgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGRhdGEgaW4gb3JkZXIgb2YgcmFuay4gSWYKLWEgdHlwZWZpbmRpbmcgZnVuY3Rpb24gcmV0dXJucyBhIHByb2JhYmlsaXR5IG9mIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdFR5cGVGaW5kLmh0bWwjR1NULVRZUEUtRklORC1NQVhJTVVNOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfVFlQRV9GSU5EX01BWElNVU08L2NvZGU+PC9hPiwKLXR5cGVmaW5kaW5nIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBmb3VuZCBjYXBzIHdpbGwgYmUgcmV0dXJuZWQKLXJpZ2h0IGF3YXkuIE90aGVyd2lzZSwgYWxsIGF2YWlsYWJsZSB0eXBlZmluZCBmdW5jdGlvbnMgd2lsbCB0aGUgdHJpZWQsCi1hbmQgdGhlIGNhcHMgd2l0aCB0aGUgaGlnaGVzdCBwcm9iYWJpbGl0eSB3aWxsIGJlIHJldHVybmVkLCBvciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4gaWYKLXRoZSBjb250ZW50IG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0gY291bGQgbm90IGJlIGlkZW50aWZpZWQuPC9wPgotPHA+RnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfdW5yZWY8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItZGF0YS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gb2JqZWN0IGRvaW5nIHRoZSB0eXBlZmluZGluZywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+ICh1c2VkIGZvciBsb2dnaW5nKS4gPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iTlVMTCBpcyBPSywgYm90aCBmb3IgcGFzc2luZyBhbmQgZm9yIHJldHVybmluZy4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5hbGxvdy1ub25lPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPiBhIHBvaW50ZXIgd2l0aCBkYXRhIHRvIHR5cGVmaW5kLiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIGlucHV0LiBEZWZhdWx0IGlzIHRyYW5zZmVyIG5vbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+aW48L3NwYW4+PC9hY3JvbnltPl1bPGFjcm9ueW0gdGl0bGU9IkRvbid0IGZyZWUgZGF0YSBhZnRlciB0aGUgY29kZSBpcyBkb25lLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnRyYW5zZmVyIG5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+IHRoZSBzaXplIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kYXRhPC9jb2RlPjwvZW0+Ci0uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlBhcmFtZXRlciBmb3IgaW5wdXQuIERlZmF1bHQgaXMgdHJhbnNmZXIgbm9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj5pbjwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb2I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gdG8gc3RvcmUgdGhlIHByb2JhYmlsaXR5IG9mIHRoZSBmb3VuZAotY2Fwcywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWRhdGEucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gY29ycmVzcG9uZGluZyB0byB0aGUgZGF0YSwKLW9yIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI05VTEw6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPk5VTEw8L2NvZGU+PC9hPiBpZiBubyB0eXBlIGNvdWxkIGJlIGZvdW5kLiBUaGUgY2FsbGVyIHNob3VsZCBmcmVlIHRoZSBjYXBzCi1yZXR1cm5lZCB3aXRoIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9jYXBzX3VucmVmKCk8L2NvZGU+PC9hPi4gPC9wPgotPHA+PHNwYW4gY2xhc3M9ImFubm90YXRpb24iPls8YWNyb255bSB0aXRsZT0iRnJlZSBkYXRhIGFmdGVyIHRoZSBjb2RlIGlzIGRvbmUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+dHJhbnNmZXIgZnVsbDwvc3Bhbj48L2Fjcm9ueW0+XVs8YWNyb255bSB0aXRsZT0iTlVMTCBtYXkgYmUgcGFzc2VkIGFzIHRoZSB2YWx1ZSBpbiwgb3V0LCBpbi1vdXQ7IG9yIGFzIGEgcmV0dXJuIHZhbHVlLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPm51bGxhYmxlPC9zcGFuPjwvYWNyb255bT5dPC9zcGFuPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24iPjwvYT48aDM+R3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uwqAoKTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RGbG93UmV0dXJuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEZsb3dSZXR1cm48L3NwYW4+PC9hPgotPHNwYW4gY2xhc3M9ImNfcHVuY3R1YXRpb24iPig8L3NwYW4+KkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbjxzcGFuIGNsYXNzPSJjX3B1bmN0dWF0aW9uIj4pPC9zcGFuPiAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+IG9mZnNldDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+IGxlbmd0aDwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICoqYnVmZmVyPC9jb2RlPjwvZW0+KTs8L3ByZT4KLTxwPlRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZ2V0LXJhbmdlIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlwqAoKSI+PGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2UoKTwvY29kZT48L2E+IHdoZW4KLXR5cGVmaW5kaW5nIGZ1bmN0aW9ucyByZXF1ZXN0IHRvIHBlZWsgYXQgdGhlIGRhdGEgb2YgYSBzdHJlYW0gYXQgY2VydGFpbgotb2Zmc2V0cy4gSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIEdTVF9GTE9XX09LLCB0aGUgcmVzdWx0IGJ1ZmZlciB3aWxsIGJlCi1zdG9yZWQgaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmJ1ZmZlcjwvY29kZT48L2VtPgotLiBUaGUgIGNvbnRlbnRzIG9mIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5idWZmZXI8L2NvZGU+PC9lbT4KLSBpcyBpbnZhbGlkIGZvciBhbnkgb3RoZXIKLXJldHVybiB2YWx1ZS48L3A+Ci08cD5UaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZSBleGFjdGx5IGxpa2UgYSA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWRHZXRSYW5nZUZ1bmN0aW9uPC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9iajwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0T2JqZWN0PC9zcGFuPjwvYT4gdGhhdCB3aWxsIGhhbmRsZSB0aGUgZ2V0cmFuZ2UgcmVxdWVzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm9mZnNldDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvZmZzZXQgb2YgdGhlIHJhbmdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmxlbmd0aDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBsZW5ndGggb2YgdGhlIHJhbmdlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgbWVtb3J5IGxvY2F0aW9uIHRvIGhvbGQgdGhlIHJlc3VsdCBidWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbi5yZXR1cm5zIj48L2E+PGg0PlJldHVybnM8L2g0PgotPHA+IEdTVF9GTE9XX09LIGZvciBzdWNjZXNzPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtaGVscGVyLWdldC1yYW5nZSI+PC9hPjxoMz5nc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2XCoCgpPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCoKLWdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSAoPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPjxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+ICpvYmo8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPYmplY3Q8L3NwYW4+PC9hPiAqcGFyZW50PC9jb2RlPjwvZW0+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uwqAoKSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbjwvc3Bhbj48L2E+IGZ1bmM8L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gc2l6ZTwvY29kZT48L2VtPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbnN0IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICpleHRlbnNpb248L2NvZGU+PC9lbT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT48YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RUeXBlRmluZC5odG1sI0dzdFR5cGVGaW5kUHJvYmFiaWxpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZFByb2JhYmlsaXR5PC9zcGFuPjwvYT4gKnByb2I8L2NvZGU+PC9lbT4pOzwvcHJlPgotPHA+VXRpbGl0eSBmdW5jdGlvbiB0byBkbyBwdWxsLWJhc2VkIHR5cGVmaW5kaW5nLiBVbmxpa2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXIiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlcsKgKCkiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X3R5cGVfZmluZF9oZWxwZXIoKTwvY29kZT48L2E+Ci1ob3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLSB0byBvYnRhaW4gdGhlCi1kYXRhIG5lZWRlZCBieSB0aGUgdHlwZWZpbmQgZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBvcGVyYXRpbmcgb24gYSBnaXZlbgotc291cmNlIHBhZC4gVGhpcyBpcyB1c2VmdWwgbW9zdGx5IGZvciBlbGVtZW50cyBsaWtlIHRhZyBkZW11eGVycyB3aGljaAotc3RyaXAgb2ZmIGRhdGEgYXQgdGhlIGJlZ2lubmluZyBhbmQvb3IgZW5kIG9mIGEgZmlsZSBhbmQgd2FudCB0byB0eXBlZmluZAotdGhlIHN0cmlwcGVkIGRhdGEgc3RyZWFtIGJlZm9yZSBhZGRpbmcgdGhlaXIgb3duIHNvdXJjZSBwYWQgKHRoZSBzcGVjaWZpZWQKLWNhbGxiYWNrIGNhbiB0aGVuIGNhbGwgdGhlIHVwc3RyZWFtIHBlZXIgcGFkIHdpdGggb2Zmc2V0cyBhZGp1c3RlZCBmb3IgdGhlCi10YWcgc2l6ZSwgZm9yIGV4YW1wbGUpLjwvcD4KLTxwPldoZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmV4dGVuc2lvbjwvY29kZT48L2VtPgotIGlzIG5vdCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4sIHRoaXMgZnVuY3Rpb24gd2lsbCBmaXJzdCB0cnkgdGhlIHR5cGVmaW5kCi1mdW5jdGlvbnMgZm9yIHRoZSBnaXZlbiBleHRlbnNpb24sIHdoaWNoIG1pZ2h0IHNwZWVkIHVwIHRoZSB0eXBlZmluZGluZwotaW4gbWFueSBjYXNlcy48L3A+Ci08cD5GcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9ImdzdC10eXBlLWZpbmQtaGVscGVyLWdldC1yYW5nZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5vYmo8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5BIDxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE9iamVjdDwvc3Bhbj48L2E+IHRoYXQgd2lsbCBiZSBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmZ1bmM8L2NvZGU+PC9lbT4KLTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYXJlbnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gdGhlIHBhcmVudCBvZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+b2JqPC9jb2RlPjwvZW0+Ci1vciA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNOVUxMOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5OVUxMPC9jb2RlPjwvYT4uIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9Ik5VTEwgaXMgT0ssIGJvdGggZm9yIHBhc3NpbmcgYW5kIGZvciByZXR1cm5pbmcuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+YWxsb3ctbm9uZTwvc3Bhbj48L2Fjcm9ueW0+XTwvc3Bhbj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZ1bmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gQSBnZW5lcmljIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI0dzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbsKgKCkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb248L3NwYW4+PC9hPiB0aGF0IHdpbGwKLWJlIHVzZWQgdG8gYWNjZXNzIGRhdGEgYXQgcmFuZG9tIG9mZnNldHMgd2hlbiBkb2luZyB0aGUgdHlwZWZpbmRpbmcuIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPjxzcGFuIGNsYXNzPSJhbm5vdGF0aW9uIj5bPGFjcm9ueW0gdGl0bGU9IlRoZSBjYWxsYmFjayBpcyB2YWxpZCBvbmx5IGR1cmluZyB0aGUgY2FsbCB0byB0aGUgbWV0aG9kLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPnNjb3BlIGNhbGw8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zaXplPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIGxlbmd0aCBpbiBieXRlczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5leHRlbnNpb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5leHRlbnNpb24gb2YgdGhlIG1lZGlhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnByb2I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD4gbG9jYXRpb24gdG8gc3RvcmUgdGhlIHByb2JhYmlsaXR5IG9mIHRoZSBmb3VuZAotY2Fwcywgb3IgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+LiA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJQYXJhbWV0ZXIgZm9yIHJldHVybmluZyByZXN1bHRzLiBEZWZhdWx0IGlzIHRyYW5zZmVyIGZ1bGwuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+b3V0PC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIGlzIE9LLCBib3RoIGZvciBwYXNzaW5nIGFuZCBmb3IgcmV0dXJuaW5nLiI+PHNwYW4gY2xhc3M9ImFjcm9ueW0iPmFsbG93LW5vbmU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iZ3N0LXR5cGUtZmluZC1oZWxwZXItZ2V0LXJhbmdlLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGEKLXN0cmVhbS4gIFJldHVybnMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+TlVMTDwvY29kZT48L2E+IGlmIG5vIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+IG1hdGNoZXMgdGhlIGRhdGEgc3RyZWFtLiA8L3A+Ci08cD48c3BhbiBjbGFzcz0iYW5ub3RhdGlvbiI+WzxhY3JvbnltIHRpdGxlPSJGcmVlIGRhdGEgYWZ0ZXIgdGhlIGNvZGUgaXMgZG9uZS4iPjxzcGFuIGNsYXNzPSJhY3JvbnltIj50cmFuc2ZlciBmdWxsPC9zcGFuPjwvYWNyb255bT5dWzxhY3JvbnltIHRpdGxlPSJOVUxMIG1heSBiZSBwYXNzZWQgYXMgdGhlIHZhbHVlIGluLCBvdXQsIGluLW91dDsgb3IgYXMgYSByZXR1cm4gdmFsdWUuIj48c3BhbiBjbGFzcz0iYWNyb255bSI+bnVsbGFibGU8L3NwYW4+PC9hY3JvbnltPl08L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMuaHRtbCBiL2RvY3MvbGlicy9odG1sL2dzdHJlYW1lci1saWJzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNzcxNDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLWxpYnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+UGFydMKgSS7CoEdTdHJlYW1lciBMaWJyYXJpZXM6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEJhc2UgYW5kIFV0aWxsaXR5IENsYXNzZXMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48aW1nIHNyYz0idXAtaW5zZW5zaXRpdmUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItYmFzZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InBhcnQiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbGlicyI+PC9hPlBhcnTCoEkuwqBHU3RyZWFtZXIgTGlicmFyaWVzPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+Ci08cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Ci08ZGwgY2xhc3M9InRvYyI+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCI+R3N0QmFzZVBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzdHJlYW0gcGFyc2Vyczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QmFzZVNyYy5odG1sIj5Hc3RCYXNlU3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBnZXRyYW5nZSBiYXNlZCBzb3VyY2UgZWxlbWVudHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiPkdzdEJhc2VTaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiPkdzdEJhc2VUcmFuc2Zvcm08L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIHNpbXBsZSB0cmFuc2Zvcm0gZmlsdGVyczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UHVzaFNyYy5odG1sIj5Hc3RQdXNoU3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBwdXNoIGJhc2VkIHNvdXJjZSBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QWRhcHRlci5odG1sIj5Hc3RBZGFwdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBhZGFwdHMgaW5jb21pbmcgZGF0YSBvbiBhIHNpbmsgcGFkIGludG8gY2h1bmtzIG9mIE4gYnl0ZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIj5Hc3RCaXRSZWFkZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlYWRzIGFueSBudW1iZXIgb2YgYml0cyBmcm9tIGEgbWVtb3J5IGJ1ZmZlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIj5Hc3RCeXRlUmVhZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZWFkcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAotICAgIHR5cGVzIGZyb20gYSBtZW1vcnkgYnVmZmVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiPkdzdEJ5dGVXcml0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFdyaXRlcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAotICAgIHR5cGVzIHRvIGEgbWVtb3J5IGJ1ZmZlciBhbmQgYWxsb3dzIHJlYWRpbmc8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiPkdzdENvbGxlY3RQYWRzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBtYW5hZ2VzIGEgc2V0IG9mIHBhZHMgdGhhdCBvcGVyYXRlIGluIGNvbGxlY3QgbW9kZTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwiPkdzdEZsb3dDb21iaW5lcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVXRpbGl0eSB0byBjb21iaW5lIG11bHRpcGxlIGZsb3cgcmV0dXJucyBpbnRvIG9uZTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCI+R3N0VHlwZUZpbmRIZWxwZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0eXBlZmluZGluZzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiPkdzdERhdGFRdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVGhyZWFkc2FmZSBxdWV1ZWluZyBvYmplY3Q8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCI+R3N0UXVldWVBcnJheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQXJyYXkgYmFzZWQgcXVldWUgb2JqZWN0PC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+R1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2w8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sIj5Hc3RBUkdCQ29udHJvbEJpbmRpbmc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGF0dGFjaG1lbnQgZm9yIGNvbnRyb2wgc291cmNlcyB0byBhcmdiIHByb3BlcnRpZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwiPkdzdERpcmVjdENvbnRyb2xCaW5kaW5nPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBkaXJlY3QgYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2VzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgdGltZWQgdmFsdWUgY29udHJvbCBzb3VyY2UgYmFzZSBjbGFzczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2U8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTEZPIGNvbnRyb2wgc291cmNlPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgdHJpZ2dlciBjb250cm9sIHNvdXJjZTwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCI+R1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlczwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuaHRtbCI+R3N0TmV0QWRkcmVzc01ldGE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE5ldHdvcmsgYWRkcmVzcyBtZXRhZGF0YTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFNwZWNpYWwgY2xvY2sgdGhhdCBzeW5jaHJvbml6ZXMgdG8gYSByZW1vdGUgdGltZQotICAgICAgICAgICAgICAgICAgICBwcm92aWRlci48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sIj5Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE5ldHdvcmsgQ29udHJvbCBNZXNzYWdlIE1ldGE8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCI+R3N0TmV0VGltZVBhY2tldDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSGVscGVyIHN0cnVjdHVyZSB0byBjb25zdHJ1Y3QgY2xvY2sgcGFja2V0cyB1c2VkCi0gICAgICAgICAgICAgICAgICAgIGJ5IG5ldHdvcmsgY2xvY2tzLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlY2lhbCBvYmplY3QgdGhhdCBleHBvc2VkIHRoZSB0aW1lIG9mIGEgY2xvY2sKLSAgICAgICAgICAgICAgICAgICAgb24gdGhlIG5ldHdvcmsuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RQdHBDbG9jay5odG1sIj5Hc3RQdHBDbG9jazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlY2lhbCBjbG9jayB0aGF0IHN5bmNocm9uaXplcyB0byBhIHJlbW90ZSB0aW1lCi0gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyIHZpYSBQVFAgKElFRUUxNTg4OjIwMDgpLjwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIj5HU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIj5Hc3RDaGVjazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ29tbW9uIGNvZGUgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sIj5Hc3RCdWZmZXJTdHJhdzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQnVmZmVyIGludGVyY2VwdGlvbiBjb2RlIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERhdGEgZmxvdyBjb25zaXN0ZW5jeSBjaGVja2VyIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0cy48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCI+R3N0SGFybmVzczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSB0ZXN0LWhhcm5lc3MgZm9yIHdyaXRpbmcgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIj5Hc3RUZXN0Q2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIENvbnRyb2xsYWJsZSwgZGV0ZXJtaW5pc3RpYyBjbG9jayBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3NwYW4+Ci08L2R0PgotPC9kbD48L2RkPgotPC9kbD4KLTwvZGl2PgotPHA+Ci0gICAgICBUbyBlYXNlIHRoZSBjcmVhdGlvbiBvZiBwbHVnaW5zLCBhIGxpYnJhcnkgc3lzdGVtIHdhcyBjcmVhdGVkLiBUaGUgbW9zdCBjb21tb24KLSAgICAgIGZ1bmN0aW9ucyBmb3IgYSBwbHVnaW4gY2FuIGJlIGZvdW5kIGluIGEgbGlicmFyeS4KLSAgICA8L3A+Ci08cD4KLSAgICAgIEdTdHJlYW1lciBwcm92aWRlcyBzb21lIHN0YW5kYXJkIGxpYnJhcmllcyB5b3UgY2FuIHVzZSB0byBjcmVhdGUgcGx1Z2lucy4KLSAgICA8L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbmV0Lmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9nc3RyZWFtZXItbmV0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyN2U2NmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvZ3N0cmVhbWVyLW5ldC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdTdHJlYW1lciBOZXR3b3JrIENsYXNzZXM6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIiB0aXRsZT0iUGFydMKgSS7CoEdTdHJlYW1lciBMaWJyYXJpZXMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sIiB0aXRsZT0iR3N0TmV0QWRkcmVzc01ldGEiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImdzdHJlYW1lci1saWJzLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItbmV0Ij48L2E+R1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPjxkbCBjbGFzcz0idG9jIj4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sIj5Hc3ROZXRBZGRyZXNzTWV0YTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTmV0d29yayBhZGRyZXNzIG1ldGFkYXRhPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIj5Hc3ROZXRDbGllbnRDbG9jazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlY2lhbCBjbG9jayB0aGF0IHN5bmNocm9uaXplcyB0byBhIHJlbW90ZSB0aW1lCi0gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwiPkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTmV0d29yayBDb250cm9sIE1lc3NhZ2UgTWV0YTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIj5Hc3ROZXRUaW1lUGFja2V0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBIZWxwZXIgc3RydWN0dXJlIHRvIGNvbnN0cnVjdCBjbG9jayBwYWNrZXRzIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgYnkgbmV0d29yayBjbG9ja3MuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCI+R3N0TmV0VGltZVByb3ZpZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTcGVjaWFsIG9iamVjdCB0aGF0IGV4cG9zZWQgdGhlIHRpbWUgb2YgYSBjbG9jawotICAgICAgICAgICAgICAgICAgICBvbiB0aGUgbmV0d29yay48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiPkdzdFB0cENsb2NrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTcGVjaWFsIGNsb2NrIHRoYXQgc3luY2hyb25pemVzIHRvIGEgcmVtb3RlIHRpbWUKLSAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIgdmlhIFBUUCAoSUVFRTE1ODg6MjAwOCkuPC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kaXY+Ci08cD4KLSAgICAgICAgbGliZ3N0bmV0LTEuMC5zbyBwcm92aWRlcyBuZXR3b3JrIGVsZW1lbnRzIGFuZCBvYmplY3RzLgotICAgICAgPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvaG9tZS5wbmcgYi9kb2NzL2xpYnMvaHRtbC9ob21lLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4OWQ0Ni4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9ob21lLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2luZGV4Lmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mjk5OTU1Li4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsOiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItbGlicy5odG1sIiB0aXRsZT0iUGFydMKgSS7CoEdTdHJlYW1lciBMaWJyYXJpZXMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTxkaXYgY2xhc3M9ImJvb2siPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLTxkaXY+Ci08ZGl2Pjx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0aCB2YWxpZ249Im1pZGRsZSI+PHAgY2xhc3M9InRpdGxlIj5HU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvcD48L3RoPjwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXY+PHAgY2xhc3M9InJlbGVhc2VpbmZvIj4KLSAgICAgIGZvciBHU3RyZWFtZXIgTGlicmFyeSAxLjAgKDEuMTAuNCkKLSAgICAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIG9uLWxpbmUgYXQKLSAgICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLWxpYnMvaHRtbC8iIHRhcmdldD0iX3RvcCI+aHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLWxpYnMvaHRtbC88L2E+LgotICAgIDwvcD48L2Rpdj4KLTwvZGl2PgotPGhyPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPjxkbCBjbGFzcz0idG9jIj4KLTxkdD48c3BhbiBjbGFzcz0icGFydCI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMuaHRtbCI+SS4gR1N0cmVhbWVyIExpYnJhcmllczwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1iYXNlLmh0bWwiPkdTdHJlYW1lciBCYXNlIGFuZCBVdGlsbGl0eSBDbGFzc2VzPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCI+R3N0QmFzZVBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzdHJlYW0gcGFyc2Vyczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QmFzZVNyYy5odG1sIj5Hc3RCYXNlU3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBnZXRyYW5nZSBiYXNlZCBzb3VyY2UgZWxlbWVudHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiPkdzdEJhc2VTaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiPkdzdEJhc2VUcmFuc2Zvcm08L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEJhc2UgY2xhc3MgZm9yIHNpbXBsZSB0cmFuc2Zvcm0gZmlsdGVyczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0UHVzaFNyYy5odG1sIj5Hc3RQdXNoU3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBCYXNlIGNsYXNzIGZvciBwdXNoIGJhc2VkIHNvdXJjZSBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0QWRhcHRlci5odG1sIj5Hc3RBZGFwdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBhZGFwdHMgaW5jb21pbmcgZGF0YSBvbiBhIHNpbmsgcGFkIGludG8gY2h1bmtzIG9mIE4gYnl0ZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJpdFJlYWRlci5odG1sIj5Hc3RCaXRSZWFkZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlYWRzIGFueSBudW1iZXIgb2YgYml0cyBmcm9tIGEgbWVtb3J5IGJ1ZmZlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIj5Hc3RCeXRlUmVhZGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZWFkcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAotICAgIHR5cGVzIGZyb20gYSBtZW1vcnkgYnVmZmVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiPkdzdEJ5dGVXcml0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFdyaXRlcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAotICAgIHR5cGVzIHRvIGEgbWVtb3J5IGJ1ZmZlciBhbmQgYWxsb3dzIHJlYWRpbmc8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiPkdzdENvbGxlY3RQYWRzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBtYW5hZ2VzIGEgc2V0IG9mIHBhZHMgdGhhdCBvcGVyYXRlIGluIGNvbGxlY3QgbW9kZTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwiPkdzdEZsb3dDb21iaW5lcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVXRpbGl0eSB0byBjb21iaW5lIG11bHRpcGxlIGZsb3cgcmV0dXJucyBpbnRvIG9uZTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCI+R3N0VHlwZUZpbmRIZWxwZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0eXBlZmluZGluZzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiPkdzdERhdGFRdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVGhyZWFkc2FmZSBxdWV1ZWluZyBvYmplY3Q8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCI+R3N0UXVldWVBcnJheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQXJyYXkgYmFzZWQgcXVldWUgb2JqZWN0PC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kZD4KLTxkdD48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZ3N0cmVhbWVyLWNvbnRyb2wuaHRtbCI+R1N0cmVhbWVyIER5bmFtaWMgUGFyYW1ldGVyIENvbnRyb2w8L2E+PC9zcGFuPjwvZHQ+Ci08ZGQ+PGRsPgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sIj5Hc3RBUkdCQ29udHJvbEJpbmRpbmc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGF0dGFjaG1lbnQgZm9yIGNvbnRyb2wgc291cmNlcyB0byBhcmdiIHByb3BlcnRpZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwiPkdzdERpcmVjdENvbnRyb2xCaW5kaW5nPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBkaXJlY3QgYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2VzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgdGltZWQgdmFsdWUgY29udHJvbCBzb3VyY2UgYmFzZSBjbGFzczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2U8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTEZPIGNvbnRyb2wgc291cmNlPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgdHJpZ2dlciBjb250cm9sIHNvdXJjZTwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1uZXQuaHRtbCI+R1N0cmVhbWVyIE5ldHdvcmsgQ2xhc3NlczwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuaHRtbCI+R3N0TmV0QWRkcmVzc01ldGE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE5ldHdvcmsgYWRkcmVzcyBtZXRhZGF0YTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFNwZWNpYWwgY2xvY2sgdGhhdCBzeW5jaHJvbml6ZXMgdG8gYSByZW1vdGUgdGltZQotICAgICAgICAgICAgICAgICAgICBwcm92aWRlci48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sIj5Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE5ldHdvcmsgQ29udHJvbCBNZXNzYWdlIE1ldGE8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCI+R3N0TmV0VGltZVBhY2tldDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSGVscGVyIHN0cnVjdHVyZSB0byBjb25zdHJ1Y3QgY2xvY2sgcGFja2V0cyB1c2VkCi0gICAgICAgICAgICAgICAgICAgIGJ5IG5ldHdvcmsgY2xvY2tzLjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlY2lhbCBvYmplY3QgdGhhdCBleHBvc2VkIHRoZSB0aW1lIG9mIGEgY2xvY2sKLSAgICAgICAgICAgICAgICAgICAgb24gdGhlIG5ldHdvcmsuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJHc3RQdHBDbG9jay5odG1sIj5Hc3RQdHBDbG9jazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlY2lhbCBjbG9jayB0aGF0IHN5bmNocm9uaXplcyB0byBhIHJlbW90ZSB0aW1lCi0gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyIHZpYSBQVFAgKElFRUUxNTg4OjIwMDgpLjwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImdzdHJlYW1lci1jaGVjay5odG1sIj5HU3RyZWFtZXIgQ2hlY2sgVW5pdCBUZXN0aW5nPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIj5Hc3RDaGVjazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ29tbW9uIGNvZGUgZm9yIEdTdHJlYW1lciB1bml0IHRlc3RzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sIj5Hc3RCdWZmZXJTdHJhdzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQnVmZmVyIGludGVyY2VwdGlvbiBjb2RlIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERhdGEgZmxvdyBjb25zaXN0ZW5jeSBjaGVja2VyIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0cy48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCI+R3N0SGFybmVzczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQSB0ZXN0LWhhcm5lc3MgZm9yIHdyaXRpbmcgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIj5Hc3RUZXN0Q2xvY2s8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIENvbnRyb2xsYWJsZSwgZGV0ZXJtaW5pc3RpYyBjbG9jayBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHM8L3NwYW4+Ci08L2R0PgotPC9kbD48L2RkPgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImluZGV4Ij48YSBocmVmPSJpeDAxLmh0bWwiPkFQSSBJbmRleDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9Iml4MDIuaHRtbCI+SW5kZXggb2YgZGVwcmVjYXRlZCBBUEk8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImluZGV4Ij48YSBocmVmPSJpeDAzLmh0bWwiPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4xMDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9Iml4MDQuaHRtbCI+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjg8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImluZGV4Ij48YSBocmVmPSJpeDA1Lmh0bWwiPkluZGV4IG9mIG5ldyBBUEkgaW4gMS42PC9hPjwvc3Bhbj48L2R0PgotPGR0PjxzcGFuIGNsYXNzPSJpbmRleCI+PGEgaHJlZj0iaXgwNi5odG1sIj5JbmRleCBvZiBuZXcgQVBJIGluIDEuNDwvYT48L3NwYW4+PC9kdD4KLTxkdD48c3BhbiBjbGFzcz0iaW5kZXgiPjxhIGhyZWY9Iml4MDcuaHRtbCI+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjI8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9ImluZGV4Ij48YSBocmVmPSJpeDA4Lmh0bWwiPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjE8L2E+PC9zcGFuPjwvZHQ+Ci08ZHQ+PHNwYW4gY2xhc3M9Imdsb3NzYXJ5Ij48YSBocmVmPSJhbm5vdGF0aW9uLWdsb3NzYXJ5Lmh0bWwiPkFubm90YXRpb24gR2xvc3Nhcnk8L2E+PC9zcGFuPjwvZHQ+Ci08L2RsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvaXgwMS5odG1sIGIvZG9jcy9saWJzL2h0bWwvaXgwMS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODczMjE0Li4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2l4MDEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwMzMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkFQSSBJbmRleDogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1oaWVyYXJjaHkuaHRtbCIgdGl0bGU9Ik9iamVjdCBIaWVyYXJjaHkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpeDAyLmh0bWwiIHRpdGxlPSJJbmRleCBvZiBkZXByZWNhdGVkIEFQSSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEEiPkE8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QiI+QjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhDIj5DPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEQiPkQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4RSI+RTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhGIj5GPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEgiPkg8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4SSI+STwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhMIj5MPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeE4iPk48L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4UCI+UDwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhRIj5RPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFMiPlM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4VCI+VDwvYT48L3NwYW4+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItaGllcmFyY2h5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJpeDAyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iaW5kZXgiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpZC0xLjQiPjwvYT5BUEkgSW5kZXg8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4QSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkE8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNHc3RBZGFwdGVyLXN0cnVjdCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWF2YWlsYWJsZSIgdGl0bGU9ImdzdF9hZGFwdGVyX2F2YWlsYWJsZcKgKCkiPmdzdF9hZGFwdGVyX2F2YWlsYWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1hdmFpbGFibGUtZmFzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0wqAoKSI+Z3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItY2xlYXIiIHRpdGxlPSJnc3RfYWRhcHRlcl9jbGVhcsKgKCkiPmdzdF9hZGFwdGVyX2NsZWFyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNvcHkiIHRpdGxlPSJnc3RfYWRhcHRlcl9jb3B5wqAoKSI+Z3N0X2FkYXB0ZXJfY29weTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1jb3B5LWJ5dGVzIiB0aXRsZT0iZ3N0X2FkYXB0ZXJfY29weV9ieXRlc8KgKCkiPmdzdF9hZGFwdGVyX2NvcHlfYnl0ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZGlzdGFuY2UtZnJvbS1kaXNjb250IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250wqAoKSI+Z3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWR0cy1hdC1kaXNjb250IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfZHRzX2F0X2Rpc2NvbnTCoCgpIj5nc3RfYWRhcHRlcl9kdHNfYXRfZGlzY29udDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1mbHVzaCIgdGl0bGU9ImdzdF9hZGFwdGVyX2ZsdXNowqAoKSI+Z3N0X2FkYXB0ZXJfZmx1c2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9hZGFwdGVyX2dldF9idWZmZXLCoCgpIj5nc3RfYWRhcHRlcl9nZXRfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWdldC1idWZmZXItZmFzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX2dldF9idWZmZXJfZmFzdMKgKCkiPmdzdF9hZGFwdGVyX2dldF9idWZmZXJfZmFzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1nZXQtYnVmZmVyLWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2xpc3TCoCgpIj5nc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZ2V0LWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl9nZXRfbGlzdMKgKCkiPmdzdF9hZGFwdGVyX2dldF9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW1hcCIgdGl0bGU9ImdzdF9hZGFwdGVyX21hcMKgKCkiPmdzdF9hZGFwdGVyX21hcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1tYXNrZWQtc2Nhbi11aW50MzIiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzLCoCgpIj5nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItbWFza2VkLXNjYW4tdWludDMyLXBlZWsiIHRpdGxlPSJnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVla8KgKCkiPmdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLW5ldyIgdGl0bGU9ImdzdF9hZGFwdGVyX25ld8KgKCkiPmdzdF9hZGFwdGVyX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1vZmZzZXQtYXQtZGlzY29udCIgdGl0bGU9ImdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250wqAoKSI+Z3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHJldi1kdHMiIHRpdGxlPSJnc3RfYWRhcHRlcl9wcmV2X2R0c8KgKCkiPmdzdF9hZGFwdGVyX3ByZXZfZHRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtZHRzLWF0LW9mZnNldCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldMKgKCkiPmdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wcmV2LW9mZnNldCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0wqAoKSI+Z3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHJldi1wdHMiIHRpdGxlPSJnc3RfYWRhcHRlcl9wcmV2X3B0c8KgKCkiPmdzdF9hZGFwdGVyX3ByZXZfcHRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtcHRzLWF0LW9mZnNldCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfcHRzX2F0X29mZnNldMKgKCkiPmdzdF9hZGFwdGVyX3ByZXZfcHRzX2F0X29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdHMtYXQtZGlzY29udCIgdGl0bGU9ImdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250wqAoKSI+Z3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItcHVzaCIgdGl0bGU9ImdzdF9hZGFwdGVyX3B1c2jCoCgpIj5nc3RfYWRhcHRlcl9wdXNoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlwqAoKSI+Z3N0X2FkYXB0ZXJfdGFrZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWJ1ZmZlciIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVywqAoKSI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXItZmFzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3TCoCgpIj5nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UtYnVmZmVyLWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9saXN0wqAoKSI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci10YWtlLWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlX2xpc3TCoCgpIj5nc3RfYWRhcHRlcl90YWtlX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdW5tYXAiIHRpdGxlPSJnc3RfYWRhcHRlcl91bm1hcMKgKCkiPmdzdF9hZGFwdGVyX3VubWFwPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwjR3N0QVJHQkNvbnRyb2xCaW5kaW5nLS1jb250cm9sLXNvdXJjZS1hIiB0aXRsZT0iVGhlIOKAnGNvbnRyb2wtc291cmNlLWHigJ0gcHJvcGVydHkiPkdzdEFSR0JDb250cm9sQmluZGluZzpjb250cm9sLXNvdXJjZS1hPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdEFSR0JDb250cm9sQmluZGluZyI+R3N0QVJHQkNvbnRyb2xCaW5kaW5nPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sI0dzdEFSR0JDb250cm9sQmluZGluZy0tY29udHJvbC1zb3VyY2UtYiIgdGl0bGU9IlRoZSDigJxjb250cm9sLXNvdXJjZS1i4oCdIHByb3BlcnR5Ij5Hc3RBUkdCQ29udHJvbEJpbmRpbmc6Y29udHJvbC1zb3VyY2UtYjwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3RBUkdCQ29udHJvbEJpbmRpbmciPkdzdEFSR0JDb250cm9sQmluZGluZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCNHc3RBUkdCQ29udHJvbEJpbmRpbmctLWNvbnRyb2wtc291cmNlLWciIHRpdGxlPSJUaGUg4oCcY29udHJvbC1zb3VyY2UtZ+KAnSBwcm9wZXJ0eSI+R3N0QVJHQkNvbnRyb2xCaW5kaW5nOmNvbnRyb2wtc291cmNlLWc8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nIj5Hc3RBUkdCQ29udHJvbEJpbmRpbmc8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QVJHQkNvbnRyb2xCaW5kaW5nLmh0bWwjR3N0QVJHQkNvbnRyb2xCaW5kaW5nLS1jb250cm9sLXNvdXJjZS1yIiB0aXRsZT0iVGhlIOKAnGNvbnRyb2wtc291cmNlLXLigJ0gcHJvcGVydHkiPkdzdEFSR0JDb250cm9sQmluZGluZzpjb250cm9sLXNvdXJjZS1yPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdEFSR0JDb250cm9sQmluZGluZyI+R3N0QVJHQkNvbnRyb2xCaW5kaW5nPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFSR0JDb250cm9sQmluZGluZy5odG1sI2dzdC1hcmdiLWNvbnRyb2wtYmluZGluZy1uZXciIHRpdGxlPSJnc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfbmV3wqAoKSI+Z3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBUkdCQ29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdEFSR0JDb250cm9sQmluZGluZyI+R3N0QVJHQkNvbnRyb2xCaW5kaW5nPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULUJVRkZFUi1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCgpIj5BU1NFUlRfQlVGRkVSX1JFRkNPVU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtQ0FQUy1SRUZDT1VOVDpDQVBTIiB0aXRsZT0iQVNTRVJUX0NBUFNfUkVGQ09VTlQoKSI+QVNTRVJUX0NBUFNfUkVGQ09VTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1DUklUSUNBTDpDQVBTIiB0aXRsZT0iQVNTRVJUX0NSSVRJQ0FMKCkiPkFTU0VSVF9DUklUSUNBTDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1mbG9hdCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfZmxvYXQoKSI+YXNzZXJ0X2VxdWFsc19mbG9hdDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX2ludCgpIj5hc3NlcnRfZXF1YWxzX2ludDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQ2NCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfaW50NjQoKSI+YXNzZXJ0X2VxdWFsc19pbnQ2NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQ2NC1oZXgiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX2ludDY0X2hleCgpIj5hc3NlcnRfZXF1YWxzX2ludDY0X2hleDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1pbnQtaGV4IiB0aXRsZT0iYXNzZXJ0X2VxdWFsc19pbnRfaGV4KCkiPmFzc2VydF9lcXVhbHNfaW50X2hleDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1wb2ludGVyIiB0aXRsZT0iYXNzZXJ0X2VxdWFsc19wb2ludGVyKCkiPmFzc2VydF9lcXVhbHNfcG9pbnRlcjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy1zdHJpbmciIHRpdGxlPSJhc3NlcnRfZXF1YWxzX3N0cmluZygpIj5hc3NlcnRfZXF1YWxzX3N0cmluZzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy11aW50NjQiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX3VpbnQ2NCgpIj5hc3NlcnRfZXF1YWxzX3VpbnQ2NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LWVxdWFscy11aW50NjQtaGV4IiB0aXRsZT0iYXNzZXJ0X2VxdWFsc191aW50NjRfaGV4KCkiPmFzc2VydF9lcXVhbHNfdWludDY0X2hleDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjYXNzZXJ0LW1lc3NhZ2UtZXJyb3IiIHRpdGxlPSJhc3NlcnRfbWVzc2FnZV9lcnJvcigpIj5hc3NlcnRfbWVzc2FnZV9lcnJvcjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULU1JTkktT0JKRUNULVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoKSI+QVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtT0JKRUNULVJFRkNPVU5UOkNBUFMiIHRpdGxlPSJBU1NFUlRfT0JKRUNUX1JFRkNPVU5UKCkiPkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0FTU0VSVC1PQkpFQ1QtUkVGQ09VTlQtQkVUV0VFTjpDQVBTIiB0aXRsZT0iQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOKCkiPkFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjQVNTRVJULVNFVC1TVEFURTpDQVBTIiB0aXRsZT0iQVNTRVJUX1NFVF9TVEFURSgpIj5BU1NFUlRfU0VUX1NUQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNBU1NFUlQtV0FSTklORzpDQVBTIiB0aXRsZT0iQVNTRVJUX1dBUk5JTkcoKSI+QVNTRVJUX1dBUk5JTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEIiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5CPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZS0tZGlzYWJsZS1wYXNzdGhyb3VnaCIgdGl0bGU9IlRoZSDigJxkaXNhYmxlLXBhc3N0aHJvdWdo4oCdIHByb3BlcnR5Ij5Hc3RCYXNlUGFyc2U6ZGlzYWJsZS1wYXNzdGhyb3VnaDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2VDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RCYXNlUGFyc2VDbGFzcyI+R3N0QmFzZVBhcnNlQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWUiIHRpdGxlPSJHc3RCYXNlUGFyc2VGcmFtZSI+R3N0QmFzZVBhcnNlRnJhbWU8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlRnJhbWVGbGFncyIgdGl0bGU9ImVudW0gR3N0QmFzZVBhcnNlRnJhbWVGbGFncyI+R3N0QmFzZVBhcnNlRnJhbWVGbGFnczwvYT4sIGVudW0gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWFzeW5jIiB0aXRsZT0iVGhlIOKAnGFzeW5j4oCdIHByb3BlcnR5Ij5Hc3RCYXNlU2luazphc3luYzwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1ibG9ja3NpemUiIHRpdGxlPSJUaGUg4oCcYmxvY2tzaXpl4oCdIHByb3BlcnR5Ij5Hc3RCYXNlU2luazpibG9ja3NpemU8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tZW5hYmxlLWxhc3Qtc2FtcGxlIiB0aXRsZT0iVGhlIOKAnGVuYWJsZS1sYXN0LXNhbXBsZeKAnSBwcm9wZXJ0eSI+R3N0QmFzZVNpbms6ZW5hYmxlLWxhc3Qtc2FtcGxlPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLWxhc3Qtc2FtcGxlIiB0aXRsZT0iVGhlIOKAnGxhc3Qtc2FtcGxl4oCdIHByb3BlcnR5Ij5Hc3RCYXNlU2luazpsYXN0LXNhbXBsZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1tYXgtYml0cmF0ZSIgdGl0bGU9IlRoZSDigJxtYXgtYml0cmF0ZeKAnSBwcm9wZXJ0eSI+R3N0QmFzZVNpbms6bWF4LWJpdHJhdGU8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tbWF4LWxhdGVuZXNzIiB0aXRsZT0iVGhlIOKAnG1heC1sYXRlbmVzc+KAnSBwcm9wZXJ0eSI+R3N0QmFzZVNpbms6bWF4LWxhdGVuZXNzPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLXFvcyIgdGl0bGU9IlRoZSDigJxxb3PigJ0gcHJvcGVydHkiPkdzdEJhc2VTaW5rOnFvczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1yZW5kZXItZGVsYXkiIHRpdGxlPSJUaGUg4oCccmVuZGVyLWRlbGF54oCdIHByb3BlcnR5Ij5Hc3RCYXNlU2luazpyZW5kZXItZGVsYXk8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tc3luYyIgdGl0bGU9IlRoZSDigJxzeW5j4oCdIHByb3BlcnR5Ij5Hc3RCYXNlU2luazpzeW5jPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstLXRocm90dGxlLXRpbWUiIHRpdGxlPSJUaGUg4oCcdGhyb3R0bGUtdGltZeKAnSBwcm9wZXJ0eSI+R3N0QmFzZVNpbms6dGhyb3R0bGUtdGltZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS10cy1vZmZzZXQiIHRpdGxlPSJUaGUg4oCcdHMtb2Zmc2V04oCdIHByb3BlcnR5Ij5Hc3RCYXNlU2luazp0cy1vZmZzZXQ8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2lua0NsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VTaW5rQ2xhc3MiPkdzdEJhc2VTaW5rQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtLWJsb2Nrc2l6ZSIgdGl0bGU9IlRoZSDigJxibG9ja3NpemXigJ0gcHJvcGVydHkiPkdzdEJhc2VTcmM6YmxvY2tzaXplPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLS1kby10aW1lc3RhbXAiIHRpdGxlPSJUaGUg4oCcZG8tdGltZXN0YW1w4oCdIHByb3BlcnR5Ij5Hc3RCYXNlU3JjOmRvLXRpbWVzdGFtcDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy0tbnVtLWJ1ZmZlcnMiIHRpdGxlPSJUaGUg4oCcbnVtLWJ1ZmZlcnPigJ0gcHJvcGVydHkiPkdzdEJhc2VTcmM6bnVtLWJ1ZmZlcnM8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtLXR5cGVmaW5kIiB0aXRsZT0iVGhlIOKAnHR5cGVmaW5k4oCdIHByb3BlcnR5Ij5Hc3RCYXNlU3JjOnR5cGVmaW5kPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjQ2xhc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0QmFzZVNyY0NsYXNzIj5Hc3RCYXNlU3JjQ2xhc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmNGbGFncyIgdGl0bGU9ImVudW0gR3N0QmFzZVNyY0ZsYWdzIj5Hc3RCYXNlU3JjRmxhZ3M8L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLS1xb3MiIHRpdGxlPSJUaGUg4oCccW9z4oCdIHByb3BlcnR5Ij5Hc3RCYXNlVHJhbnNmb3JtOnFvczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiB0aXRsZT0ic3RydWN0IEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyI+R3N0QmFzZVRyYW5zZm9ybUNsYXNzPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWFkZC1pbmRleC1lbnRyeSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyecKgKCkiPmdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWNvbnZlcnQtZGVmYXVsdCIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdMKgKCkiPmdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLURSQUlOSU5HOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9QQVJTRV9EUkFJTklORygpIj5HU1RfQkFTRV9QQVJTRV9EUkFJTklORzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZpbmlzaC1mcmFtZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZcKgKCkiPmdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUZMQUctRFJBSU5JTkc6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkciPkdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwiIHRpdGxlPSJHc3RCYXNlUGFyc2UiPkdzdEJhc2VQYXJzZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCNHU1QtQkFTRS1QQVJTRS1GTEFHLUxPU1QtU1lOQzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfRkxBR19MT1NUX1NZTkMiPkdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sIiB0aXRsZT0iR3N0QmFzZVBhcnNlIj5Hc3RCYXNlUGFyc2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVBhcnNlLmh0bWwjR1NULUJBU0UtUEFSU0UtRkxPVy1EUk9QUEVEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQiPkdTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLWZyZWUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlwqAoKSI+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLWluaXQiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0wqAoKSI+Z3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLWZyYW1lLW5ldyIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ld8KgKCkiPmdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLUxPU1QtU1lOQzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DKCkiPkdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLW1lcmdlLXRhZ3MiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9tZXJnZV90YWdzwqAoKSI+Z3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXB1c2gtZnJhbWUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lwqAoKSI+Z3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1hdmVyYWdlLWJpdHJhdGUiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfYXZlcmFnZV9iaXRyYXRlwqAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1kdXJhdGlvbiIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbsKgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1mcmFtZS1yYXRlIiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGXCoCgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1oYXMtdGltaW5nLWluZm8iIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfaGFzX3RpbWluZ19pbmZvwqAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1pbmZlci10cyIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9pbmZlcl90c8KgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9pbmZlcl90czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1sYXRlbmN5IiB0aXRsZT0iZ3N0X2Jhc2VfcGFyc2Vfc2V0X2xhdGVuY3nCoCgpIj5nc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1taW4tZnJhbWUtc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZcKgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1wYXNzdGhyb3VnaCIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaMKgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1wdHMtaW50ZXJwb2xhdGlvbiIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9wdHNfaW50ZXJwb2xhdGlvbsKgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9wdHNfaW50ZXJwb2xhdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC1zeW5jYWJsZSIgdGl0bGU9ImdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZcKgKCkiPmdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC10cy1hdC1vZmZzZXQiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfdHNfYXRfb2Zmc2V0wqAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X3RzX2F0X29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLVNJTkstUEFEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCgpIj5HU1RfQkFTRV9QQVJTRV9TSU5LX1BBRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI0dTVC1CQVNFLVBBUlNFLVNSQy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1BBUlNFX1NSQ19QQUQoKSI+R1NUX0JBU0VfUEFSU0VfU1JDX1BBRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1kby1wcmVyb2xsIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19kb19wcmVyb2xswqAoKSI+Z3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1ibG9ja3NpemUiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemXCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LWxhc3Qtc2FtcGxlIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9zYW1wbGXCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF9sYXN0X3NhbXBsZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X2xhdGVuY3nCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF9sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC1tYXgtYml0cmF0ZSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X21heF9iaXRyYXRlwqAoKSI+Z3N0X2Jhc2Vfc2lua19nZXRfbWF4X2JpdHJhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LW1heC1sYXRlbmVzcyIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzc8KgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1HRVQtUFJFUk9MTC1DT05EOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0NPTkQoKSI+R1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9DT05EPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLUdFVC1QUkVST0xMLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSygpIj5HU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXJlbmRlci1kZWxheSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxhecKgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtc3luYyIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X3N5bmPCoCgpIj5nc3RfYmFzZV9zaW5rX2dldF9zeW5jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWdldC10aHJvdHRsZS10aW1lIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19nZXRfdGhyb3R0bGVfdGltZcKgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstZ2V0LXRzLW9mZnNldCIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldMKgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1pcy1hc3luYy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkwqAoKSI+Z3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLWlzLWxhc3Qtc2FtcGxlLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2lzX2xhc3Rfc2FtcGxlX2VuYWJsZWTCoCgpIj5nc3RfYmFzZV9zaW5rX2lzX2xhc3Rfc2FtcGxlX2VuYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstaXMtcW9zLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2lzX3Fvc19lbmFibGVkwqAoKSI+Z3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfUEFEKCkiPkdTVF9CQVNFX1NJTktfUEFEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtQlJPQURDQVNUOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfQlJPQURDQVNUKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9CUk9BRENBU1Q8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSygpIj5HU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLVNJR05BTDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTCgpIj5HU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtVFJZTE9DSzpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1RSWUxPQ0soKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1RSWUxPQ0s8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI0dTVC1CQVNFLVNJTkstUFJFUk9MTC1VTkxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0soKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjR1NULUJBU0UtU0lOSy1QUkVST0xMLVdBSVQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NJTktfUFJFUk9MTF9XQUlUKCkiPkdTVF9CQVNFX1NJTktfUFJFUk9MTF9XQUlUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHU1QtQkFTRS1TSU5LLVBSRVJPTEwtV0FJVC1VTlRJTDpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVRfVU5USUwoKSI+R1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVRfVU5USUw8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstcXVlcnktbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jecKgKCkiPmdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtYXN5bmMtZW5hYmxlZCIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X2FzeW5jX2VuYWJsZWTCoCgpIj5nc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1ibG9ja3NpemUiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemXCoCgpIj5nc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LWxhc3Qtc2FtcGxlLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9sYXN0X3NhbXBsZV9lbmFibGVkwqAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtbWF4LWJpdHJhdGUiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9tYXhfYml0cmF0ZcKgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X21heF9iaXRyYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1tYXgtbGF0ZW5lc3MiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3PCoCgpIj5nc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXFvcy1lbmFibGVkIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWTCoCgpIj5nc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtcmVuZGVyLWRlbGF5IiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5wqAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1zeW5jIiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfc3luY8KgKCkiPmdzdF9iYXNlX3Npbmtfc2V0X3N5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstc2V0LXRocm90dGxlLXRpbWUiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lwqAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfdGhyb3R0bGVfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1zZXQtdHMtb2Zmc2V0IiB0aXRsZT0iZ3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0wqAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXdhaXQiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3dhaXTCoCgpIj5nc3RfYmFzZV9zaW5rX3dhaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sI2dzdC1iYXNlLXNpbmstd2FpdC1jbG9jayIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfd2FpdF9jbG9ja8KgKCkiPmdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay13YWl0LXByZXJvbGwiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbMKgKCkiPmdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX2dldF9hbGxvY2F0b3LCoCgpIj5nc3RfYmFzZV9zcmNfZ2V0X2FsbG9jYXRvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtZ2V0LWJsb2Nrc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplwqAoKSI+Z3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLWdldC1idWZmZXItcG9vbCIgdGl0bGU9ImdzdF9iYXNlX3NyY19nZXRfYnVmZmVyX3Bvb2zCoCgpIj5nc3RfYmFzZV9zcmNfZ2V0X2J1ZmZlcl9wb29sPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1nZXQtZG8tdGltZXN0YW1wIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXDCoCgpIj5nc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtaXMtYXN5bmMiIHRpdGxlPSJnc3RfYmFzZV9zcmNfaXNfYXN5bmPCoCgpIj5nc3RfYmFzZV9zcmNfaXNfYXN5bmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLWlzLWxpdmUiIHRpdGxlPSJnc3RfYmFzZV9zcmNfaXNfbGl2ZcKgKCkiPmdzdF9iYXNlX3NyY19pc19saXZlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1JUy1TVEFSVEVEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9TUkNfSVNfU1RBUlRFRCgpIj5HU1RfQkFTRV9TUkNfSVNfU1RBUlRFRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNHU1QtQkFTRS1TUkMtSVMtU1RBUlRJTkc6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NSQ19JU19TVEFSVElORygpIj5HU1RfQkFTRV9TUkNfSVNfU1RBUlRJTkc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLW5ldy1zZWFtbGVzcy1zZWdtZW50IiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50wqAoKSI+Z3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI0dTVC1CQVNFLVNSQy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1NSQ19QQUQoKSI+R1NUX0JBU0VfU1JDX1BBRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtcXVlcnktbGF0ZW5jeSIgdGl0bGU9ImdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5wqAoKSI+Z3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1hc3luYyIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfYXN5bmPCoCgpIj5nc3RfYmFzZV9zcmNfc2V0X2FzeW5jPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtYXV0b21hdGljLWVvcyIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfYXV0b21hdGljX2Vvc8KgKCkiPmdzdF9iYXNlX3NyY19zZXRfYXV0b21hdGljX2VvczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWJsb2Nrc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplwqAoKSI+Z3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1jYXBzIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9jYXBzwqAoKSI+Z3N0X2Jhc2Vfc3JjX3NldF9jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtZG8tdGltZXN0YW1wIiB0aXRsZT0iZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXDCoCgpIj5nc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWR5bmFtaWMtc2l6ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplwqAoKSI+Z3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXNldC1mb3JtYXQiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdMKgKCkiPmdzdF9iYXNlX3NyY19zZXRfZm9ybWF0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy1zZXQtbGl2ZSIgdGl0bGU9ImdzdF9iYXNlX3NyY19zZXRfbGl2ZcKgKCkiPmdzdF9iYXNlX3NyY19zZXRfbGl2ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc3RhcnQtY29tcGxldGUiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGXCoCgpIj5nc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwjZ3N0LWJhc2Utc3JjLXN0YXJ0LXdhaXQiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc3RhcnRfd2FpdMKgKCkiPmdzdF9iYXNlX3NyY19zdGFydF93YWl0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCIgdGl0bGU9IkdzdEJhc2VTcmMiPkdzdEJhc2VTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sI2dzdC1iYXNlLXNyYy13YWl0LXBsYXlpbmciIHRpdGxlPSJnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nwqAoKSI+Z3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU3JjLmh0bWwiIHRpdGxlPSJHc3RCYXNlU3JjIj5Hc3RCYXNlU3JjPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHU1QtQkFTRS1UUkFOU0ZPUk0tRkxPVy1EUk9QUEVEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEIj5HU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1nZXQtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9hbGxvY2F0b3LCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X2FsbG9jYXRvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tZ2V0LWJ1ZmZlci1wb29sIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9idWZmZXJfcG9vbMKgKCkiPmdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYnVmZmVyX3Bvb2w8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLWlzLWluLXBsYWNlIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlwqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1pcy1wYXNzdGhyb3VnaCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaMKgKCkiPmdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0taXMtcW9zLWVuYWJsZWQiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWTCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1faXNfcW9zX2VuYWJsZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXJlY29uZmlndXJlLXNpbmsiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc2lua8KgKCkiPmdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1yZWNvbmZpZ3VyZS1zcmMiIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc3JjwqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3NyYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LWdhcC1hd2FyZSIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlwqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1pbi1wbGFjZSIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5fcGxhY2XCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS1zZXQtcGFzc3Rocm91Z2giIHRpdGxlPSJnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdowqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXByZWZlci1wYXNzdGhyb3VnaCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJlZmVyX3Bhc3N0aHJvdWdowqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcmVmZXJfcGFzc3Rocm91Z2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjZ3N0LWJhc2UtdHJhbnNmb3JtLXNldC1xb3MtZW5hYmxlZCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWTCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Fvc19lbmFibGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TSU5LLU5BTUU6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX05BTUUiPkdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNJTkstUEFEOkNBUFMiIHRpdGxlPSJHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQoKSI+R1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dTVC1CQVNFLVRSQU5TRk9STS1TUkMtTkFNRTpDQVBTIiB0aXRsZT0iR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19OQU1FIj5HU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX05BTUU8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR1NULUJBU0UtVFJBTlNGT1JNLVNSQy1QQUQ6Q0FQUyIgdGl0bGU9IkdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEKCkiPkdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCIgdGl0bGU9IkdzdEJhc2VUcmFuc2Zvcm0iPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sI2dzdC1iYXNlLXRyYW5zZm9ybS11cGRhdGUtcW9zIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3PCoCgpIj5nc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlVHJhbnNmb3JtLmh0bWwiIHRpdGxlPSJHc3RCYXNlVHJhbnNmb3JtIj5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXNyYy1jYXBzIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9zcmNfY2Fwc8KgKCkiPmdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfc3JjX2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHc3RCaXRSZWFkZXIiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1mcmVlIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZnJlZcKgKCkiPmdzdF9iaXRfcmVhZGVyX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MTYiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTbCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MTYtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZMKgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MzIiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzLCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50MzItdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyX3VuY2hlY2tlZMKgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMl91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjTCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50NjQtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0X3VuY2hlY2tlZMKgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4wqAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtYml0cy11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWTCoCgpIj5nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtcG9zIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X3Bvc8KgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9wb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtcmVtYWluaW5nIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ8KgKCkiPmdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX2dldF9zaXplwqAoKSI+Z3N0X2JpdF9yZWFkZXJfZ2V0X3NpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNHU1QtQklULVJFQURFUi1JTklUOkNBUFMiIHRpdGxlPSJHU1RfQklUX1JFQURFUl9JTklUKCkiPkdTVF9CSVRfUkVBREVSX0lOSVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1pbml0IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfaW5pdMKgKCkiPmdzdF9iaXRfcmVhZGVyX2luaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1uZXciIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9uZXfCoCgpIj5nc3RfYml0X3JlYWRlcl9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNsKgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDE2LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkwqAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNl91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDMyIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMsKgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDMyLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzJfdW5jaGVja2VkwqAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQzMl91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0IiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NMKgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDY0LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkwqAoKSI+Z3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDjCoCgpIj5nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1wZWVrLWJpdHMtdWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZMKgKCkiPmdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1zZXQtcG9zIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfc2V0X3Bvc8KgKCkiPmdzdF9iaXRfcmVhZGVyX3NldF9wb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfc2tpcMKgKCkiPmdzdF9iaXRfcmVhZGVyX3NraXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUiIHRpdGxlPSJnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGXCoCgpIj5nc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXRvLWJ5dGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlX3VuY2hlY2tlZMKgKCkiPmdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCaXRSZWFkZXIuaHRtbCNnc3QtYml0LXJlYWRlci1za2lwLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkwqAoKSI+Z3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qml0UmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCaXRSZWFkZXIiPkdzdEJpdFJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI2dzdC1idWZmZXItYWRkLW5ldC1hZGRyZXNzLW1ldGEiIHRpdGxlPSJnc3RfYnVmZmVyX2FkZF9uZXRfYWRkcmVzc19tZXRhwqAoKSI+Z3N0X2J1ZmZlcl9hZGRfbmV0X2FkZHJlc3NfbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sIiB0aXRsZT0iR3N0TmV0QWRkcmVzc01ldGEiPkdzdE5ldEFkZHJlc3NNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sI2dzdC1idWZmZXItYWRkLW5ldC1jb250cm9sLW1lc3NhZ2UtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfYWRkX25ldF9jb250cm9sX21lc3NhZ2VfbWV0YcKgKCkiPmdzdF9idWZmZXJfYWRkX25ldF9jb250cm9sX21lc3NhZ2VfbWV0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCIgdGl0bGU9IkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSI+R3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbmV0LWFkZHJlc3MtbWV0YSIgdGl0bGU9ImdzdF9idWZmZXJfZ2V0X25ldF9hZGRyZXNzX21ldGHCoCgpIj5nc3RfYnVmZmVyX2dldF9uZXRfYWRkcmVzc19tZXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwiIHRpdGxlPSJHc3ROZXRBZGRyZXNzTWV0YSI+R3N0TmV0QWRkcmVzc01ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwjZ3N0LWJ1ZmZlci1nZXQtbmV0LWNvbnRyb2wtbWVzc2FnZS1tZXRhIiB0aXRsZT0iZ3N0X2J1ZmZlcl9nZXRfbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhKCkiPmdzdF9idWZmZXJfZ2V0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCIgdGl0bGU9IkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSI+R3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwjZ3N0LWJ1ZmZlci1zdHJhdy1nZXQtYnVmZmVyIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19nZXRfYnVmZmVywqAoKSI+Z3N0X2J1ZmZlcl9zdHJhd19nZXRfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ1ZmZlclN0cmF3Lmh0bWwiIHRpdGxlPSJHc3RCdWZmZXJTdHJhdyI+R3N0QnVmZmVyU3RyYXc8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCNnc3QtYnVmZmVyLXN0cmF3LXN0YXJ0LXBpcGVsaW5lIiB0aXRsZT0iZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZcKgKCkiPmdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0QnVmZmVyU3RyYXcuaHRtbCIgdGl0bGU9IkdzdEJ1ZmZlclN0cmF3Ij5Hc3RCdWZmZXJTdHJhdzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sI2dzdC1idWZmZXItc3RyYXctc3RvcC1waXBlbGluZSIgdGl0bGU9ImdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZcKgKCkiPmdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCdWZmZXJTdHJhdy5odG1sIiB0aXRsZT0iR3N0QnVmZmVyU3RyYXciPkdzdEJ1ZmZlclN0cmF3PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHc3RCeXRlUmVhZGVyIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjR3N0Qnl0ZVdyaXRlciIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLWRhdGEtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmciIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZygpIj5nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZHVwLXN0cmluZy11dGYxNiIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2wqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWR1cC1zdHJpbmctdXRmMzIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMsKgKCkiPmdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1kdXAtc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4wqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmODwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZnJlZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9mcmVlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1kYXRhIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZGF0YS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0MzJfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtZmxvYXQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWZsb2F0NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1mbG9hdDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDE2LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQxNi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MTYtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQyNC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDI0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtaW50NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LWludDgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDjCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1pbnQ4LXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OF91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtcG9zIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3PCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXJlbWFpbmluZyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zaXplIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9zaXplPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtc3RyaW5nIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmcoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmc8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdHJpbmctdXRmOCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjjCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtc3ViLXJlYWRlciIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlcsKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MTYtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDE2LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQxNi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQyNC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQzMi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItZ2V0LXVpbnQ2NC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC11aW50OCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDjCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1nZXQtdWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNHU1QtQllURS1SRUFERVItSU5JVDpDQVBTIiB0aXRsZT0iR1NUX0JZVEVfUkVBREVSX0lOSVQoKSI+R1NUX0JZVEVfUkVBREVSX0lOSVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWluaXQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfaW5pdMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9pbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMywqAoKSI+Z3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItbWFza2VkLXNjYW4tdWludDMyLXBlZWsiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWvCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWs8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLW5ldyIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9uZXfCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1kYXRhLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0MzItYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDMyLWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQzMi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1mbG9hdDY0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstZmxvYXQ2NC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWZsb2F0NjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MTYtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDE2LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQxNi1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDI0LWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQyNC1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MjQtbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQzMi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1pbnQ2NC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstaW50OCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDjCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLWludDgtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50OF91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1zdHJpbmciIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmcoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXN0cmluZy11dGY4IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjjCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmODwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1zdWItcmVhZGVyIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlcsKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQxNi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQyNC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZcKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGXCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXBlZWstdWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1wZWVrLXVpbnQ4IiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDjCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50ODwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNldC1wb3MiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2V0X3Bvc8KgKCkiPmdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3NraXDCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfc2tpcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmciIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmcoKSI+Z3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXN0cmluZy11dGYxNiIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNsKgKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItc2tpcC1zdHJpbmctdXRmMzIiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzLCoCgpIj5nc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLXNraXAtc3RyaW5nLXV0ZjgiIHRpdGxlPSJnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1za2lwLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZW5zdXJlLWZyZWUtc3BhY2UiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2XCoCgpIj5nc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZpbGwiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZmlsbMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9maWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1maWxsLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZnJlZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWZyZWUtYW5kLWdldC1idWZmZXIiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlcsKgKCkiPmdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1mcmVlLWFuZC1nZXQtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItZ2V0LXBvcyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX2dldF9wb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWdldC1yZW1haW5pbmciIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZ8KgKCkiPmdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1nZXQtc2l6ZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItaW5pdCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9pbml0wqAoKSI+Z3N0X2J5dGVfd3JpdGVyX2luaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLWluaXQtd2l0aC1kYXRhIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1pbml0LXdpdGgtc2l6ZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItbmV3IiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX25ld8KgKCkiPmdzdF9ieXRlX3dyaXRlcl9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLW5ldy13aXRoLWRhdGEiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfZGF0YcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1uZXctd2l0aC1zaXplIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWJ1ZmZlciIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfYnVmZmVywqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1idWZmZXItdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXJfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXJfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWRhdGEtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQzMi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0MzItbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDMyLWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWZsb2F0NjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1mbG9hdDY0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtZmxvYXQ2NC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQxNi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQyNC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2JlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDMyX2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1pbnQ4IiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4wqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtaW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDhfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZyIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtc3RyaW5nLXV0ZjE2IiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMTbCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYxNjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXN0cmluZy11dGYzMiIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjMywqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC1zdHJpbmctdXRmOCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjjCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQxNi1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MTYtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDE2LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1iZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MjQtYmUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDI0LWxlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQyNC1sZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItYmUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDMyLWJlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQzMi1sZSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50MzItbGUtdW5jaGVja2VkIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkwqAoKSI+Z3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWJlIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmXCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ2NC1iZS11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZV91bmNoZWNrZWTCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZV91bmNoZWNrZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50NjQtbGUiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZcKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1wdXQtdWludDY0LWxlLXVuY2hlY2tlZCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlX3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlX3VuY2hlY2tlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcHV0LXVpbnQ4IiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXB1dC11aW50OC11bmNoZWNrZWQiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1yZXNldCIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9yZXNldMKgKCkiPmdzdF9ieXRlX3dyaXRlcl9yZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCNnc3QtYnl0ZS13cml0ZXItcmVzZXQtYW5kLWdldC1idWZmZXIiIHRpdGxlPSJnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXLCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVdyaXRlciI+R3N0Qnl0ZVdyaXRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwjZ3N0LWJ5dGUtd3JpdGVyLXJlc2V0LWFuZC1nZXQtZGF0YSIgdGl0bGU9ImdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGHCoCgpIj5nc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVXcml0ZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVXcml0ZXIiPkdzdEJ5dGVXcml0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVdyaXRlci5odG1sI2dzdC1ieXRlLXdyaXRlci1zZXQtcG9zIiB0aXRsZT0iZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3PCoCgpIj5nc3RfYnl0ZV93cml0ZXJfc2V0X3BvczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlV3JpdGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlV3JpdGVyIj5Hc3RCeXRlV3JpdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4QyI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkM8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWJ1ZmZlci1kYXRhIiB0aXRsZT0iZ3N0X2NoZWNrX2J1ZmZlcl9kYXRhwqAoKSI+Z3N0X2NoZWNrX2J1ZmZlcl9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stY2Fwcy1lcXVhbCIgdGl0bGU9ImdzdF9jaGVja19jYXBzX2VxdWFswqAoKSI+Z3N0X2NoZWNrX2NhcHNfZXF1YWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1kcm9wLWJ1ZmZlcnMiIHRpdGxlPSJnc3RfY2hlY2tfZHJvcF9idWZmZXJzwqAoKSI+Z3N0X2NoZWNrX2Ryb3BfYnVmZmVyczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLWVsZW1lbnQtcHVzaC1idWZmZXIiIHRpdGxlPSJnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcsKgKCkiPmdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stZWxlbWVudC1wdXNoLWJ1ZmZlci1saXN0IiB0aXRsZT0iZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXJfbGlzdMKgKCkiPmdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1pbml0IiB0aXRsZT0iZ3N0X2NoZWNrX2luaXTCoCgpIj5nc3RfY2hlY2tfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLW1lc3NhZ2UtZXJyb3IiIHRpdGxlPSJnc3RfY2hlY2tfbWVzc2FnZV9lcnJvcsKgKCkiPmdzdF9jaGVja19tZXNzYWdlX2Vycm9yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stb2JqZWN0cy1kZXN0cm95ZWQtb24tdW5yZWYiIHRpdGxlPSJnc3RfY2hlY2tfb2JqZWN0c19kZXN0cm95ZWRfb25fdW5yZWbCoCgpIj5nc3RfY2hlY2tfb2JqZWN0c19kZXN0cm95ZWRfb25fdW5yZWY8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1vYmplY3QtZGVzdHJveWVkLW9uLXVucmVmIiB0aXRsZT0iZ3N0X2NoZWNrX29iamVjdF9kZXN0cm95ZWRfb25fdW5yZWbCoCgpIj5nc3RfY2hlY2tfb2JqZWN0X2Rlc3Ryb3llZF9vbl91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXJ1bi1zdWl0ZSIgdGl0bGU9ImdzdF9jaGVja19ydW5fc3VpdGXCoCgpIj5nc3RfY2hlY2tfcnVuX3N1aXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtZWxlbWVudCIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9lbGVtZW50wqAoKSI+Z3N0X2NoZWNrX3NldHVwX2VsZW1lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1ldmVudHMiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfZXZlbnRzwqAoKSI+Z3N0X2NoZWNrX3NldHVwX2V2ZW50czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLWV2ZW50cy13aXRoLXN0cmVhbS1pZCIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWTCoCgpIj5nc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWTCoCgpIj5nc3RfY2hlY2tfc2V0dXBfc2lua19wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1ieS1uYW1lIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWXCoCgpIj5nc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkLWJ5LW5hbWUtZnJvbS10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGXCoCgpIj5nc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc2luay1wYWQtZnJvbS10ZW1wbGF0ZSIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9mcm9tX3RlbXBsYXRlwqAoKSI+Z3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2Zyb21fdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkIiB0aXRsZT0iZ3N0X2NoZWNrX3NldHVwX3NyY19wYWTCoCgpIj5nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNyYy1wYWQtYnktbmFtZSIgdGl0bGU9ImdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWXCoCgpIj5nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1ieS1uYW1lLWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGXCoCgpIj5nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9mcm9tX3RlbXBsYXRlwqAoKSI+Z3N0X2NoZWNrX3NldHVwX3NyY19wYWRfZnJvbV90ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLWVsZW1lbnQiIHRpdGxlPSJnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudMKgKCkiPmdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stdGVhcmRvd24tcGFkLWJ5LW5hbWUiIHRpdGxlPSJnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWXCoCgpIj5nc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay10ZWFyZG93bi1zaW5rLXBhZCIgdGl0bGU9ImdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZMKgKCkiPmdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXRlYXJkb3duLXNyYy1wYWQiIHRpdGxlPSJnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZMKgKCkiPmdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YSIgdGl0bGU9InN0cnVjdCBHc3RDb2xsZWN0RGF0YSI+R3N0Q29sbGVjdERhdGE8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkiIHRpdGxlPSJHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnnCoCgpIj5Hc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnk8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzQnVmZmVyRnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uwqAoKSI+R3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uwqAoKSI+R3N0Q29sbGVjdFBhZHNDbGlwRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNDb21wYXJlRnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbsKgKCkiPkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzRXZlbnRGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzRXZlbnRGdW5jdGlvbsKgKCkiPkdzdENvbGxlY3RQYWRzRXZlbnRGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb24iIHRpdGxlPSJHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb27CoCgpIj5Hc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzRnVuY3Rpb27CoCgpIj5Hc3RDb2xsZWN0UGFkc0Z1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbiIgdGl0bGU9IkdzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbsKgKCkiPkdzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHc3RDb2xsZWN0UGFkc1N0YXRlRmxhZ3MiIHRpdGxlPSJlbnVtIEdzdENvbGxlY3RQYWRzU3RhdGVGbGFncyI+R3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtYWRkLXBhZCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZMKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1hdmFpbGFibGUiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZcKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfYXZhaWxhYmxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWNsaXAtcnVubmluZy10aW1lIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3J1bm5pbmdfdGltZcKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfY2xpcF9ydW5uaW5nX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtRFRTOkNBUFMiIHRpdGxlPSJHU1RfQ09MTEVDVF9QQURTX0RUUygpIj5HU1RfQ09MTEVDVF9QQURTX0RUUzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1EVFMtSVMtVkFMSUQ6Q0FQUyIgdGl0bGU9IkdTVF9DT0xMRUNUX1BBRFNfRFRTX0lTX1ZBTElEKCkiPkdTVF9DT0xMRUNUX1BBRFNfRFRTX0lTX1ZBTElEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLWV2ZW50LWRlZmF1bHQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2V2ZW50X2RlZmF1bHTCoCgpIj5nc3RfY29sbGVjdF9wYWRzX2V2ZW50X2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtZmx1c2giIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX2ZsdXNowqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19mbHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1HRVQtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9DT0xMRUNUX1BBRFNfR0VUX1NUUkVBTV9MT0NLKCkiPkdTVF9DT0xMRUNUX1BBRFNfR0VUX1NUUkVBTV9MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLW5ldyIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfbmV3wqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcGVlayIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfcGVla8KgKCkiPmdzdF9jb2xsZWN0X3BhZHNfcGVlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1wb3AiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3BvcMKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfcG9wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXF1ZXJ5LWRlZmF1bHQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3F1ZXJ5X2RlZmF1bHTCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3F1ZXJ5X2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtcmVhZC1idWZmZXIiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVywqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19yZWFkX2J1ZmZlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1yZW1vdmUtcGFkIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkwqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1idWZmZXItZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9idWZmZXJfZnVuY3Rpb27CoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9idWZmZXJfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWNsaXAtZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9jbGlwX2Z1bmN0aW9uwqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtY29tcGFyZS1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2NvbXBhcmVfZnVuY3Rpb27CoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9jb21wYXJlX2Z1bmN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1ldmVudC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2V2ZW50X2Z1bmN0aW9uwqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWZsdXNoaW5nIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmfCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtZmx1c2gtZnVuY3Rpb24iIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaF9mdW5jdGlvbsKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoX2Z1bmN0aW9uPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNldC1mdW5jdGlvbiIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uwqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LXF1ZXJ5LWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfcXVlcnlfZnVuY3Rpb27CoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9xdWVyeV9mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zZXQtd2FpdGluZyIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc2V0X3dhaXRpbmfCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF93YWl0aW5nPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXNyYy1ldmVudC1kZWZhdWx0IiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zcmNfZXZlbnRfZGVmYXVsdMKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfc3JjX2V2ZW50X2RlZmF1bHQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc3RhcnQiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3N0YXJ0wqAoKSI+Z3N0X2NvbGxlY3RfcGFkc19zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVEFURTpDQVBTIiB0aXRsZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURSgpIj5HU1RfQ09MTEVDVF9QQURTX1NUQVRFPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHU1QtQ09MTEVDVC1QQURTLVNUQVRFLUlTLVNFVDpDQVBTIiB0aXRsZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURV9JU19TRVQoKSI+R1NUX0NPTExFQ1RfUEFEU19TVEFURV9JU19TRVQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtU1RBVEUtU0VUOkNBUFMiIHRpdGxlPSJHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1NFVCgpIj5HU1RfQ09MTEVDVF9QQURTX1NUQVRFX1NFVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVEFURS1VTlNFVDpDQVBTIiB0aXRsZT0iR1NUX0NPTExFQ1RfUEFEU19TVEFURV9VTlNFVCgpIj5HU1RfQ09MTEVDVF9QQURTX1NUQVRFX1VOU0VUPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXN0b3AiIHRpdGxlPSJnc3RfY29sbGVjdF9wYWRzX3N0b3DCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3N0b3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtU1RSRUFNLUxPQ0s6Q0FQUyIgdGl0bGU9IkdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX0xPQ0soKSI+R1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR1NULUNPTExFQ1QtUEFEUy1TVFJFQU0tVU5MT0NLOkNBUFMiIHRpdGxlPSJHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9VTkxPQ0soKSI+R1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNnc3QtY29sbGVjdC1wYWRzLXRha2UtYnVmZmVyIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc190YWtlX2J1ZmZlcsKgKCkiPmdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdC1jb25zaXN0ZW5jeS1jaGVja2VyLWFkZC1wYWQiIHRpdGxlPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9hZGRfcGFkwqAoKSI+Z3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfYWRkX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjZ3N0LWNvbnNpc3RlbmN5LWNoZWNrZXItZnJlZSIgdGl0bGU9ImdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWXCoCgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCNnc3QtY29uc2lzdGVuY3ktY2hlY2tlci1uZXciIHRpdGxlPSJnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXfCoCgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0U3RyZWFtQ29uc2lzdGVuY3kuaHRtbCIgdGl0bGU9IkdzdFN0cmVhbUNvbnNpc3RlbmN5Ij5Hc3RTdHJlYW1Db25zaXN0ZW5jeTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sI2dzdC1jb25zaXN0ZW5jeS1jaGVja2VyLXJlc2V0IiB0aXRsZT0iZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfcmVzZXTCoCgpIj5nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9yZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RTdHJlYW1Db25zaXN0ZW5jeS5odG1sIiB0aXRsZT0iR3N0U3RyZWFtQ29uc2lzdGVuY3kiPkdzdFN0cmVhbUNvbnNpc3RlbmN5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjR3N0Q29udHJvbFBvaW50IiB0aXRsZT0ic3RydWN0IEdzdENvbnRyb2xQb2ludCI+R3N0Q29udHJvbFBvaW50PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4RCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkQ8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVDaGVja0Z1bGxGdW5jdGlvbiIgdGl0bGU9IkdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uwqAoKSI+R3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb248L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI0dzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2siIHRpdGxlPSJHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrwqAoKSI+R3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjazwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrIiB0aXRsZT0iR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrwqAoKSI+R3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNHc3REYXRhUXVldWVJdGVtIiB0aXRsZT0ic3RydWN0IEdzdERhdGFRdWV1ZUl0ZW0iPkdzdERhdGFRdWV1ZUl0ZW08L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sIiB0aXRsZT0iR3N0RGF0YVF1ZXVlIj5Hc3REYXRhUXVldWU8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwjR3N0RGF0YVF1ZXVlU2l6ZSIgdGl0bGU9InN0cnVjdCBHc3REYXRhUXVldWVTaXplIj5Hc3REYXRhUXVldWVTaXplPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWRyb3AtaGVhZCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZMKgKCkiPmdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWZsdXNoIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfZmx1c2jCoCgpIj5nc3RfZGF0YV9xdWV1ZV9mbHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWdldC1sZXZlbCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbMKgKCkiPmdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWlzLWVtcHR5IiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHnCoCgpIj5nc3RfZGF0YV9xdWV1ZV9pc19lbXB0eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWlzLWZ1bGwiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9pc19mdWxswqAoKSI+Z3N0X2RhdGFfcXVldWVfaXNfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLWxpbWl0cy1jaGFuZ2VkIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWTCoCgpIj5nc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLW5ldyIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX25ld8KgKCkiPmdzdF9kYXRhX3F1ZXVlX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXBlZWsiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wZWVrwqAoKSI+Z3N0X2RhdGFfcXVldWVfcGVlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXBvcCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX3BvcMKgKCkiPmdzdF9kYXRhX3F1ZXVlX3BvcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXB1c2giIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wdXNowqAoKSI+Z3N0X2RhdGFfcXVldWVfcHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXB1c2gtZm9yY2UiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlwqAoKSI+Z3N0X2RhdGFfcXVldWVfcHVzaF9mb3JjZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdERhdGFRdWV1ZS5odG1sI2dzdC1kYXRhLXF1ZXVlLXNldC1mbHVzaGluZyIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZ8KgKCkiPmdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCIgdGl0bGU9IkdzdERhdGFRdWV1ZSI+R3N0RGF0YVF1ZXVlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwjR3N0RGlyZWN0Q29udHJvbEJpbmRpbmctLWFic29sdXRlIiB0aXRsZT0iVGhlIOKAnGFic29sdXRl4oCdIHByb3BlcnR5Ij5Hc3REaXJlY3RDb250cm9sQmluZGluZzphYnNvbHV0ZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nIj5Hc3REaXJlY3RDb250cm9sQmluZGluZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5odG1sI0dzdERpcmVjdENvbnRyb2xCaW5kaW5nLS1jb250cm9sLXNvdXJjZSIgdGl0bGU9IlRoZSDigJxjb250cm9sLXNvdXJjZeKAnSBwcm9wZXJ0eSI+R3N0RGlyZWN0Q29udHJvbEJpbmRpbmc6Y29udHJvbC1zb3VyY2U8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3REaXJlY3RDb250cm9sQmluZGluZyI+R3N0RGlyZWN0Q29udHJvbEJpbmRpbmc8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCNnc3QtZGlyZWN0LWNvbnRyb2wtYmluZGluZy1uZXciIHRpdGxlPSJnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXfCoCgpIj5nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcuaHRtbCIgdGl0bGU9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nIj5Hc3REaXJlY3RDb250cm9sQmluZGluZzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5odG1sI2dzdC1kaXJlY3QtY29udHJvbC1iaW5kaW5nLW5ldy1hYnNvbHV0ZSIgdGl0bGU9ImdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ld19hYnNvbHV0ZcKgKCkiPmdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ld19hYnNvbHV0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3REaXJlY3RDb250cm9sQmluZGluZy5odG1sIiB0aXRsZT0iR3N0RGlyZWN0Q29udHJvbEJpbmRpbmciPkdzdERpcmVjdENvbnRyb2xCaW5kaW5nPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4RSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkU8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjR1NULUVORC1URVNUOkNBUFMiIHRpdGxlPSJHU1RfRU5EX1RFU1QiPkdTVF9FTkRfVEVTVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4RiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkY8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWZsb2F0IiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KCkiPmZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludCIgdGl0bGU9ImZhaWxfdW5sZXNzX2VxdWFsc19pbnQoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX2ludDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludDY0IiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0KCkiPmZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludDY0LWhleCIgdGl0bGU9ImZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXgoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0X2hleDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLWludC1oZXgiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCgpIj5mYWlsX3VubGVzc19lcXVhbHNfaW50X2hleDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLXBvaW50ZXIiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlcigpIj5mYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlcjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLXN0cmluZyIgdGl0bGU9ImZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZzwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLXVpbnQ2NCIgdGl0bGU9ImZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtZXF1YWxzLXVpbnQ2NC1oZXgiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfdWludDY0X2hleCgpIj5mYWlsX3VubGVzc19lcXVhbHNfdWludDY0X2hleDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZmFpbC11bmxlc3MtbWVzc2FnZS1lcnJvciIgdGl0bGU9ImZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3IoKSI+ZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvcjwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI0dzdEZsb3dDb21iaW5lciIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLWFkZC1wYWQiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkwqAoKSI+Z3N0X2Zsb3dfY29tYmluZXJfYWRkX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLWNsZWFyIiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfY2xlYXLCoCgpIj5nc3RfZmxvd19jb21iaW5lcl9jbGVhcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLWZyZWUiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9mcmVlwqAoKSI+Z3N0X2Zsb3dfY29tYmluZXJfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLW5ldyIgdGl0bGU9ImdzdF9mbG93X2NvbWJpbmVyX25ld8KgKCkiPmdzdF9mbG93X2NvbWJpbmVyX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXJlbW92ZS1wYWQiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9yZW1vdmVfcGFkwqAoKSI+Z3N0X2Zsb3dfY29tYmluZXJfcmVtb3ZlX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXJlc2V0IiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfcmVzZXTCoCgpIj5nc3RfZmxvd19jb21iaW5lcl9yZXNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1mbG93IiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX2Zsb3fCoCgpIj5nc3RfZmxvd19jb21iaW5lcl91cGRhdGVfZmxvdzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sI2dzdC1mbG93LWNvbWJpbmVyLXVwZGF0ZS1wYWQtZmxvdyIgdGl0bGU9ImdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvd8KgKCkiPmdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RGbG93Q29tYmluZXIuaHRtbCIgdGl0bGU9IkdzdEZsb3dDb21iaW5lciI+R3N0Rmxvd0NvbWJpbmVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4SCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkg8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNHc3RIYXJuZXNzIiB0aXRsZT0ic3RydWN0IEdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYyIgdGl0bGU9IkdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuY8KgKCkiPkdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYzwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jIiB0aXRsZT0iR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmPCoCgpIj5Hc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYzwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NUaHJlYWQiIHRpdGxlPSJHc3RIYXJuZXNzVGhyZWFkIj5Hc3RIYXJuZXNzVGhyZWFkPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtZWxlbWVudC1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLWVsZW1lbnQtc2luay1wYWQiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfZWxlbWVudF9zaW5rX3BhZMKgKCkiPmdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NpbmtfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1lbGVtZW50LXNyYy1wYWQiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfZWxlbWVudF9zcmNfcGFkwqAoKSI+Z3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfc3JjX3BhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtcGFyc2UiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfcGFyc2XCoCgpIj5nc3RfaGFybmVzc19hZGRfcGFyc2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXByb2JlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX3Byb2JlwqAoKSI+Z3N0X2hhcm5lc3NfYWRkX3Byb2JlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zaW5rIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX3NpbmvCoCgpIj5nc3RfaGFybmVzc19hZGRfc2luazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtc2luay1oYXJuZXNzIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX3NpbmtfaGFybmVzc8KgKCkiPmdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXNpbmstcGFyc2UiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfc2lua19wYXJzZcKgKCkiPmdzdF9oYXJuZXNzX2FkZF9zaW5rX3BhcnNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zcmMiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfc3JjwqAoKSI+Z3N0X2hhcm5lc3NfYWRkX3NyYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtc3JjLWhhcm5lc3MiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfc3JjX2hhcm5lc3PCoCgpIj5nc3RfaGFybmVzc19hZGRfc3JjX2hhcm5lc3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXNyYy1wYXJzZSIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2XCoCgpIj5nc3RfaGFybmVzc19hZGRfc3JjX3BhcnNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWJ1ZmZlcnMtaW4tcXVldWUiIHRpdGxlPSJnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlwqAoKSI+Z3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1idWZmZXJzLXJlY2VpdmVkIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZMKgKCkiPmdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtY3JhbmstbXVsdGlwbGUtY2xvY2std2FpdHMiIHRpdGxlPSJnc3RfaGFybmVzc19jcmFua19tdWx0aXBsZV9jbG9ja193YWl0c8KgKCkiPmdzdF9oYXJuZXNzX2NyYW5rX211bHRpcGxlX2Nsb2NrX3dhaXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWNyYW5rLXNpbmdsZS1jbG9jay13YWl0IiB0aXRsZT0iZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXTCoCgpIj5nc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1jcmVhdGUtYnVmZmVyIiB0aXRsZT0iZ3N0X2hhcm5lc3NfY3JlYXRlX2J1ZmZlcsKgKCkiPmdzdF9oYXJuZXNzX2NyZWF0ZV9idWZmZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZHVtcC10by1maWxlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfZHVtcF90b19maWxlwqAoKSI+Z3N0X2hhcm5lc3NfZHVtcF90b19maWxlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWV2ZW50cy1pbi1xdWV1ZSIgdGl0bGU9ImdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZcKgKCkiPmdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1ldmVudHMtcmVjZWl2ZWQiIHRpdGxlPSJnc3RfaGFybmVzc19ldmVudHNfcmVjZWl2ZWTCoCgpIj5nc3RfaGFybmVzc19ldmVudHNfcmVjZWl2ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZmluZC1lbGVtZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfZmluZF9lbGVtZW50wqAoKSI+Z3N0X2hhcm5lc3NfZmluZF9lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWdldCIgdGl0bGU9ImdzdF9oYXJuZXNzX2dldMKgKCkiPmdzdF9oYXJuZXNzX2dldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1nZXQtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2hhcm5lc3NfZ2V0X2FsbG9jYXRvcsKgKCkiPmdzdF9oYXJuZXNzX2dldF9hbGxvY2F0b3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZ2V0LWxhc3QtcHVzaGVkLXRpbWVzdGFtcCIgdGl0bGU9ImdzdF9oYXJuZXNzX2dldF9sYXN0X3B1c2hlZF90aW1lc3RhbXDCoCgpIj5nc3RfaGFybmVzc19nZXRfbGFzdF9wdXNoZWRfdGltZXN0YW1wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWdldC10ZXN0Y2xvY2siIHRpdGxlPSJnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrwqAoKSI+Z3N0X2hhcm5lc3NfZ2V0X3Rlc3RjbG9jazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXciIHRpdGxlPSJnc3RfaGFybmVzc19uZXfCoCgpIj5nc3RfaGFybmVzc19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LWVtcHR5IiB0aXRsZT0iZ3N0X2hhcm5lc3NfbmV3X2VtcHR5wqAoKSI+Z3N0X2hhcm5lc3NfbmV3X2VtcHR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldy1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3NfbmV3X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19uZXdfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctcGFyc2UiIHRpdGxlPSJnc3RfaGFybmVzc19uZXdfcGFyc2XCoCgpIj5nc3RfaGFybmVzc19uZXdfcGFyc2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LXdpdGgtZWxlbWVudCIgdGl0bGU9ImdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnTCoCgpIj5nc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldy13aXRoLXBhZG5hbWVzIiB0aXRsZT0iZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXPCoCgpIj5nc3RfaGFybmVzc19uZXdfd2l0aF9wYWRuYW1lczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctd2l0aC10ZW1wbGF0ZXMiIHRpdGxlPSJnc3RfaGFybmVzc19uZXdfd2l0aF90ZW1wbGF0ZXPCoCgpIj5nc3RfaGFybmVzc19uZXdfd2l0aF90ZW1wbGF0ZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcGxheSIgdGl0bGU9ImdzdF9oYXJuZXNzX3BsYXnCoCgpIj5nc3RfaGFybmVzc19wbGF5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19wdWxswqAoKSI+Z3N0X2hhcm5lc3NfcHVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdWxsLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVsbF9ldmVudMKgKCkiPmdzdF9oYXJuZXNzX3B1bGxfZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVsbC11cHN0cmVhbS1ldmVudCIgdGl0bGU9ImdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnTCoCgpIj5nc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2giIHRpdGxlPSJnc3RfaGFybmVzc19wdXNowqAoKSI+Z3N0X2hhcm5lc3NfcHVzaDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoLWFuZC1wdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVzaF9hbmRfcHVsbMKgKCkiPmdzdF9oYXJuZXNzX3B1c2hfYW5kX3B1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC1ldmVudCIgdGl0bGU9ImdzdF9oYXJuZXNzX3B1c2hfZXZlbnTCoCgpIj5nc3RfaGFybmVzc19wdXNoX2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2gtZnJvbS1zcmMiIHRpdGxlPSJnc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjwqAoKSI+Z3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoLXRvLXNpbmsiIHRpdGxlPSJnc3RfaGFybmVzc19wdXNoX3RvX3NpbmvCoCgpIj5nc3RfaGFybmVzc19wdXNoX3RvX3Npbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC11cHN0cmVhbS1ldmVudCIgdGl0bGU9ImdzdF9oYXJuZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnTCoCgpIj5nc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXF1ZXJ5LWxhdGVuY3kiIHRpdGxlPSJnc3RfaGFybmVzc19xdWVyeV9sYXRlbmN5wqAoKSI+Z3N0X2hhcm5lc3NfcXVlcnlfbGF0ZW5jeTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQiIHRpdGxlPSJnc3RfaGFybmVzc19zZXTCoCgpIj5nc3RfaGFybmVzc19zZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LWJsb2NraW5nLXB1c2gtbW9kZSIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9ibG9ja2luZ19wdXNoX21vZGXCoCgpIj5nc3RfaGFybmVzc19zZXRfYmxvY2tpbmdfcHVzaF9tb2RlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1jYXBzIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X2NhcHPCoCgpIj5nc3RfaGFybmVzc19zZXRfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtY2Fwcy1zdHIiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfY2Fwc19zdHLCoCgpIj5nc3RfaGFybmVzc19zZXRfY2Fwc19zdHI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LWRyb3AtYnVmZmVycyIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9kcm9wX2J1ZmZlcnPCoCgpIj5nc3RfaGFybmVzc19zZXRfZHJvcF9idWZmZXJzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1mb3J3YXJkaW5nIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmfCoCgpIj5nc3RfaGFybmVzc19zZXRfZm9yd2FyZGluZzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtcHJvcG9zZS1hbGxvY2F0b3IiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfcHJvcG9zZV9hbGxvY2F0b3LCoCgpIj5nc3RfaGFybmVzc19zZXRfcHJvcG9zZV9hbGxvY2F0b3I8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXNpbmstY2FwcyIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHPCoCgpIj5nc3RfaGFybmVzc19zZXRfc2lua19jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1zaW5rLWNhcHMtc3RyIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2Fwc19zdHLCoCgpIj5nc3RfaGFybmVzc19zZXRfc2lua19jYXBzX3N0cjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtc3JjLWNhcHMiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfc3JjX2NhcHPCoCgpIj5nc3RfaGFybmVzc19zZXRfc3JjX2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXNyYy1jYXBzLXN0ciIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHLCoCgpIj5nc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC10aW1lIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X3RpbWXCoCgpIj5nc3RfaGFybmVzc19zZXRfdGltZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtdXBzdHJlYW0tbGF0ZW5jeSIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF91cHN0cmVhbV9sYXRlbmN5wqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X3Vwc3RyZWFtX2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2luay1wdXNoLW1hbnkiIHRpdGxlPSJnc3RfaGFybmVzc19zaW5rX3B1c2hfbWFuecKgKCkiPmdzdF9oYXJuZXNzX3NpbmtfcHVzaF9tYW55PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNyYy1jcmFuay1hbmQtcHVzaC1tYW55IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnnCoCgpIj5nc3RfaGFybmVzc19zcmNfY3JhbmtfYW5kX3B1c2hfbWFueTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zcmMtcHVzaC1ldmVudCIgdGl0bGU9ImdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3Nfc3JjX3B1c2hfZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLWN1c3RvbS1zdGFydCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19jdXN0b21fc3RhcnTCoCgpIj5nc3RfaGFybmVzc19zdHJlc3NfY3VzdG9tX3N0YXJ0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wcm9wZXJ0eS1zdGFydCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXByb3BlcnR5LXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWJ1ZmZlci1zdGFydCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWJ1ZmZlci13aXRoLWNiLXN0YXJ0IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3dpdGhfY2Jfc3RhcnQoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3dpdGhfY2Jfc3RhcnQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXdpdGgtY2Itc3RhcnQtZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfd2l0aF9jYl9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWV2ZW50LXN0YXJ0IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnQoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtZXZlbnQtc3RhcnQtZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWV2ZW50LXdpdGgtY2Itc3RhcnQiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0KCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtZXZlbnQtd2l0aC1jYi1zdGFydC1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLXVwc3RyZWFtLWV2ZW50LXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfc3RhcnRfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC11cHN0cmVhbS1ldmVudC13aXRoLWNiLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXJlcXVlc3RwYWQtc3RhcnQiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcmVxdWVzdHBhZC1zdGFydC1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3JlcXVlc3RwYWRfc3RhcnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19yZXF1ZXN0cGFkX3N0YXJ0X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXNlbmQtdXBzdHJlYW0tZXZlbnQtc3RhcnQiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF9zdGFydDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3Mtc2VuZC11cHN0cmVhbS1ldmVudC13aXRoLWNiLXN0YXJ0IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3NlbmRfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1zdGF0ZWNoYW5nZS1zdGFydCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydCgpIj5nc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2Vfc3RhcnQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXN0YXRlY2hhbmdlLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2Vfc3RhcnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy10aHJlYWQtc3RvcCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc190aHJlYWRfc3RvcMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc190aHJlYWRfc3RvcDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy10ZWFyZG93biIgdGl0bGU9ImdzdF9oYXJuZXNzX3RlYXJkb3duwqAoKSI+Z3N0X2hhcm5lc3NfdGVhcmRvd248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdHJ5LXB1bGwiIHRpdGxlPSJnc3RfaGFybmVzc190cnlfcHVsbMKgKCkiPmdzdF9oYXJuZXNzX3RyeV9wdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXRyeS1wdWxsLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfZXZlbnTCoCgpIj5nc3RfaGFybmVzc190cnlfcHVsbF9ldmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy10cnktcHVsbC11cHN0cmVhbS1ldmVudCIgdGl0bGU9ImdzdF9oYXJuZXNzX3RyeV9wdWxsX3Vwc3RyZWFtX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3NfdHJ5X3B1bGxfdXBzdHJlYW1fZXZlbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdXBzdHJlYW0tZXZlbnRzLWluLXF1ZXVlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX2luX3F1ZXVlwqAoKSI+Z3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX2luX3F1ZXVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXVwc3RyZWFtLWV2ZW50cy1yZWNlaXZlZCIgdGl0bGU9ImdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19yZWNlaXZlZMKgKCkiPmdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19yZWNlaXZlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy11c2Utc3lzdGVtY2xvY2siIHRpdGxlPSJnc3RfaGFybmVzc191c2Vfc3lzdGVtY2xvY2vCoCgpIj5nc3RfaGFybmVzc191c2Vfc3lzdGVtY2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdXNlLXRlc3RjbG9jayIgdGl0bGU9ImdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2vCoCgpIj5nc3RfaGFybmVzc191c2VfdGVzdGNsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXdhaXQtZm9yLWNsb2NrLWlkLXdhaXRzIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHPCoCgpIj5nc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0czwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4SSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkk8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLS1tb2RlIiB0aXRsZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlOm1vZGU8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSI+R3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCNHc3RJbnRlcnBvbGF0aW9uTW9kZSIgdGl0bGU9ImVudW0gR3N0SW50ZXJwb2xhdGlvbk1vZGUiPkdzdEludGVycG9sYXRpb25Nb2RlPC9hPiwgZW51bSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIj5Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sI2dzdC1pbnRlcnBvbGF0aW9uLWNvbnRyb2wtc291cmNlLW5ldyIgdGl0bGU9ImdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ld8KgKCkiPmdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiPkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4TCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkw8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RMRk9Db250cm9sU291cmNlIj5Hc3RMRk9Db250cm9sU291cmNlPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj5Hc3RMRk9Db250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS1hbXBsaXR1ZGUiIHRpdGxlPSJUaGUg4oCcYW1wbGl0dWRl4oCdIHByb3BlcnR5Ij5Hc3RMRk9Db250cm9sU291cmNlOmFtcGxpdHVkZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0tZnJlcXVlbmN5IiB0aXRsZT0iVGhlIOKAnGZyZXF1ZW5jeeKAnSBwcm9wZXJ0eSI+R3N0TEZPQ29udHJvbFNvdXJjZTpmcmVxdWVuY3k8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPkdzdExGT0NvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT0NvbnRyb2xTb3VyY2UtLW9mZnNldCIgdGl0bGU9IlRoZSDigJxvZmZzZXTigJ0gcHJvcGVydHkiPkdzdExGT0NvbnRyb2xTb3VyY2U6b2Zmc2V0PC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj5Hc3RMRk9Db250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNHc3RMRk9Db250cm9sU291cmNlLS10aW1lc2hpZnQiIHRpdGxlPSJUaGUg4oCcdGltZXNoaWZ04oCdIHByb3BlcnR5Ij5Hc3RMRk9Db250cm9sU291cmNlOnRpbWVzaGlmdDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwjR3N0TEZPQ29udHJvbFNvdXJjZS0td2F2ZWZvcm0iIHRpdGxlPSJUaGUg4oCcd2F2ZWZvcm3igJ0gcHJvcGVydHkiPkdzdExGT0NvbnRyb2xTb3VyY2U6d2F2ZWZvcm08L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdExGT0NvbnRyb2xTb3VyY2UiPkdzdExGT0NvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sI0dzdExGT1dhdmVmb3JtIiB0aXRsZT0iZW51bSBHc3RMRk9XYXZlZm9ybSI+R3N0TEZPV2F2ZWZvcm08L2E+LCBlbnVtIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RMRk9Db250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RMRk9Db250cm9sU291cmNlIj5Hc3RMRk9Db250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdExGT0NvbnRyb2xTb3VyY2UuaHRtbCNnc3QtbGZvLWNvbnRyb2wtc291cmNlLW5ldyIgdGl0bGU9ImdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3wqAoKSI+Z3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TEZPQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0TEZPQ29udHJvbFNvdXJjZSI+R3N0TEZPQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeE4iPjwvYT48aDMgY2xhc3M9InRpdGxlIj5OPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRBZGRyZXNzTWV0YS5odG1sI0dzdE5ldEFkZHJlc3NNZXRhIiB0aXRsZT0ic3RydWN0IEdzdE5ldEFkZHJlc3NNZXRhIj5Hc3ROZXRBZGRyZXNzTWV0YTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0QWRkcmVzc01ldGEuaHRtbCIgdGl0bGU9IkdzdE5ldEFkZHJlc3NNZXRhIj5Hc3ROZXRBZGRyZXNzTWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3ROZXRDbGllbnRDbG9jayI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tYWRkcmVzcyIgdGl0bGU9IlRoZSDigJxhZGRyZXNz4oCdIHByb3BlcnR5Ij5Hc3ROZXRDbGllbnRDbG9jazphZGRyZXNzPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLWJhc2UtdGltZSIgdGl0bGU9IlRoZSDigJxiYXNlLXRpbWXigJ0gcHJvcGVydHkiPkdzdE5ldENsaWVudENsb2NrOmJhc2UtdGltZTwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj5Hc3ROZXRDbGllbnRDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLS1idXMiIHRpdGxlPSJUaGUg4oCcYnVz4oCdIHByb3BlcnR5Ij5Hc3ROZXRDbGllbnRDbG9jazpidXM8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0taW50ZXJuYWwtY2xvY2siIHRpdGxlPSJUaGUg4oCcaW50ZXJuYWwtY2xvY2vigJ0gcHJvcGVydHkiPkdzdE5ldENsaWVudENsb2NrOmludGVybmFsLWNsb2NrPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TmV0Q2xpZW50Q2xvY2stLW1pbmltdW0tdXBkYXRlLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnG1pbmltdW0tdXBkYXRlLWludGVydmFs4oCdIHByb3BlcnR5Ij5Hc3ROZXRDbGllbnRDbG9jazptaW5pbXVtLXVwZGF0ZS1pbnRlcnZhbDwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj5Hc3ROZXRDbGllbnRDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI0dzdE5ldENsaWVudENsb2NrLS1wb3J0IiB0aXRsZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiPkdzdE5ldENsaWVudENsb2NrOnBvcnQ8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwiIHRpdGxlPSJHc3ROZXRDbGllbnRDbG9jayI+R3N0TmV0Q2xpZW50Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNHc3ROZXRDbGllbnRDbG9jay0tcm91bmQtdHJpcC1saW1pdCIgdGl0bGU9IlRoZSDigJxyb3VuZC10cmlwLWxpbWl04oCdIHByb3BlcnR5Ij5Hc3ROZXRDbGllbnRDbG9jazpyb3VuZC10cmlwLWxpbWl0PC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YS5odG1sI0dzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSIgdGl0bGU9InN0cnVjdCBHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiPkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwiIHRpdGxlPSJHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiPkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR3N0TmV0VGltZVBhY2tldCIgdGl0bGU9InN0cnVjdCBHc3ROZXRUaW1lUGFja2V0Ij5Hc3ROZXRUaW1lUGFja2V0PC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUGFja2V0Ij5Hc3ROZXRUaW1lUGFja2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TmV0VGltZVByb3ZpZGVyIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1hY3RpdmUiIHRpdGxlPSJUaGUg4oCcYWN0aXZl4oCdIHByb3BlcnR5Ij5Hc3ROZXRUaW1lUHJvdmlkZXI6YWN0aXZlPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQcm92aWRlciI+R3N0TmV0VGltZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI0dzdE5ldFRpbWVQcm92aWRlci0tYWRkcmVzcyIgdGl0bGU9IlRoZSDigJxhZGRyZXNz4oCdIHByb3BlcnR5Ij5Hc3ROZXRUaW1lUHJvdmlkZXI6YWRkcmVzczwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUHJvdmlkZXIiPkdzdE5ldFRpbWVQcm92aWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCNHc3ROZXRUaW1lUHJvdmlkZXItLWNsb2NrIiB0aXRsZT0iVGhlIOKAnGNsb2Nr4oCdIHByb3BlcnR5Ij5Hc3ROZXRUaW1lUHJvdmlkZXI6Y2xvY2s8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVByb3ZpZGVyIj5Hc3ROZXRUaW1lUHJvdmlkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0VGltZVByb3ZpZGVyLmh0bWwjR3N0TmV0VGltZVByb3ZpZGVyLS1wb3J0IiB0aXRsZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiPkdzdE5ldFRpbWVQcm92aWRlcjpwb3J0PC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQcm92aWRlciI+R3N0TmV0VGltZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwjZ3N0LW5ldC1hZGRyZXNzLW1ldGEtZ2V0LWluZm8iIHRpdGxlPSJnc3RfbmV0X2FkZHJlc3NfbWV0YV9nZXRfaW5mb8KgKCkiPmdzdF9uZXRfYWRkcmVzc19tZXRhX2dldF9pbmZvPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldEFkZHJlc3NNZXRhLmh0bWwiIHRpdGxlPSJHc3ROZXRBZGRyZXNzTWV0YSI+R3N0TmV0QWRkcmVzc01ldGE8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNnc3QtbmV0LWNsaWVudC1jbG9jay1uZXciIHRpdGxlPSJnc3RfbmV0X2NsaWVudF9jbG9ja19uZXfCoCgpIj5nc3RfbmV0X2NsaWVudF9jbG9ja19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj5Hc3ROZXRDbGllbnRDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEuaHRtbCNnc3QtbmV0LWNvbnRyb2wtbWVzc2FnZS1tZXRhLWdldC1pbmZvIiB0aXRsZT0iZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9nZXRfaW5mb8KgKCkiPmdzdF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfZ2V0X2luZm88L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhLmh0bWwiIHRpdGxlPSJHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEiPkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1jb3B5IiB0aXRsZT0iZ3N0X25ldF90aW1lX3BhY2tldF9jb3B5wqAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9jb3B5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtZnJlZSIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZcKgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUGFja2V0Ij5Hc3ROZXRUaW1lUGFja2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3QtbmV0LXRpbWUtcGFja2V0LW5ldyIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfbmV3wqAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVBhY2tldCI+R3N0TmV0VGltZVBhY2tldDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjZ3N0LW5ldC10aW1lLXBhY2tldC1yZWNlaXZlIiB0aXRsZT0iZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlwqAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQYWNrZXQiPkdzdE5ldFRpbWVQYWNrZXQ8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sI2dzdC1uZXQtdGltZS1wYWNrZXQtc2VuZCIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZMKgKCkiPmdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUGFja2V0Ij5Hc3ROZXRUaW1lUGFja2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdE5ldFRpbWVQYWNrZXQuaHRtbCNnc3QtbmV0LXRpbWUtcGFja2V0LXNlcmlhbGl6ZSIgdGl0bGU9ImdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplwqAoKSI+Z3N0X25ldF90aW1lX3BhY2tldF9zZXJpYWxpemU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0TmV0VGltZVBhY2tldC5odG1sIiB0aXRsZT0iR3N0TmV0VGltZVBhY2tldCI+R3N0TmV0VGltZVBhY2tldDwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwjR1NULU5FVC1USU1FLVBBQ0tFVC1TSVpFOkNBUFMiIHRpdGxlPSJHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUiPkdTVF9ORVRfVElNRV9QQUNLRVRfU0laRTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3ROZXRUaW1lUGFja2V0Lmh0bWwiIHRpdGxlPSJHc3ROZXRUaW1lUGFja2V0Ij5Hc3ROZXRUaW1lUGFja2V0PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldFRpbWVQcm92aWRlci5odG1sI2dzdC1uZXQtdGltZS1wcm92aWRlci1uZXciIHRpdGxlPSJnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3wqAoKSI+Z3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRUaW1lUHJvdmlkZXIuaHRtbCIgdGl0bGU9IkdzdE5ldFRpbWVQcm92aWRlciI+R3N0TmV0VGltZVByb3ZpZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdE5ldENsaWVudENsb2NrLmh0bWwjR3N0TnRwQ2xvY2siPkdzdE50cENsb2NrPC9hPiwgdHlwZWRlZiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj5Hc3ROZXRDbGllbnRDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sI2dzdC1udHAtY2xvY2stbmV3IiB0aXRsZT0iZ3N0X250cF9jbG9ja19uZXfCoCgpIj5nc3RfbnRwX2Nsb2NrX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3ROZXRDbGllbnRDbG9jay5odG1sIiB0aXRsZT0iR3N0TmV0Q2xpZW50Q2xvY2siPkdzdE5ldENsaWVudENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4UCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlA8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjR3N0UHRwQ2xvY2stc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFB0cENsb2NrIj5Hc3RQdHBDbG9jazwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFB0cENsb2NrIj5Hc3RQdHBDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI0dzdFB0cENsb2NrLS1kb21haW4iIHRpdGxlPSJUaGUg4oCcZG9tYWlu4oCdIHByb3BlcnR5Ij5Hc3RQdHBDbG9jazpkb21haW48L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHc3RQdHBDbG9jay0tZ3JhbmRtYXN0ZXItY2xvY2staWQiIHRpdGxlPSJUaGUg4oCcZ3JhbmRtYXN0ZXItY2xvY2staWTigJ0gcHJvcGVydHkiPkdzdFB0cENsb2NrOmdyYW5kbWFzdGVyLWNsb2NrLWlkPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjR3N0UHRwQ2xvY2stLWludGVybmFsLWNsb2NrIiB0aXRsZT0iVGhlIOKAnGludGVybmFsLWNsb2Nr4oCdIHByb3BlcnR5Ij5Hc3RQdHBDbG9jazppbnRlcm5hbC1jbG9jazwvYT4sIG9iamVjdCBwcm9wZXJ0eSBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFB0cENsb2NrIj5Hc3RQdHBDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI0dzdFB0cENsb2NrLS1tYXN0ZXItY2xvY2staWQiIHRpdGxlPSJUaGUg4oCcbWFzdGVyLWNsb2NrLWlk4oCdIHByb3BlcnR5Ij5Hc3RQdHBDbG9jazptYXN0ZXItY2xvY2staWQ8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHc3RQdHBTdGF0aXN0aWNzQ2FsbGJhY2siIHRpdGxlPSJHc3RQdHBTdGF0aXN0aWNzQ2FsbGJhY2vCoCgpIj5Hc3RQdHBTdGF0aXN0aWNzQ2FsbGJhY2s8L2E+LCB1c2VyX2Z1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjR1NULVBUUC1DTE9DSy1JRC1OT05FOkNBUFMiIHRpdGxlPSJHU1RfUFRQX0NMT0NLX0lEX05PTkUiPkdTVF9QVFBfQ0xPQ0tfSURfTk9ORTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1jbG9jay1uZXciIHRpdGxlPSJnc3RfcHRwX2Nsb2NrX25ld8KgKCkiPmdzdF9wdHBfY2xvY2tfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNnc3QtcHRwLWRlaW5pdCIgdGl0bGU9ImdzdF9wdHBfZGVpbml0wqAoKSI+Z3N0X3B0cF9kZWluaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFB0cENsb2NrIj5Hc3RQdHBDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtaW5pdCIgdGl0bGU9ImdzdF9wdHBfaW5pdMKgKCkiPmdzdF9wdHBfaW5pdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1pcy1pbml0aWFsaXplZCIgdGl0bGU9ImdzdF9wdHBfaXNfaW5pdGlhbGl6ZWTCoCgpIj5nc3RfcHRwX2lzX2luaXRpYWxpemVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNnc3QtcHRwLWlzLXN1cHBvcnRlZCIgdGl0bGU9ImdzdF9wdHBfaXNfc3VwcG9ydGVkwqAoKSI+Z3N0X3B0cF9pc19zdXBwb3J0ZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFB0cENsb2NrIj5Hc3RQdHBDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI0dTVC1QVFAtU1RBVElTVElDUy1CRVNULU1BU1RFUi1DTE9DSy1TRUxFQ1RFRDpDQVBTIiB0aXRsZT0iR1NUX1BUUF9TVEFUSVNUSUNTX0JFU1RfTUFTVEVSX0NMT0NLX1NFTEVDVEVEIj5HU1RfUFRQX1NUQVRJU1RJQ1NfQkVTVF9NQVNURVJfQ0xPQ0tfU0VMRUNURUQ8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFB0cENsb2NrIj5Hc3RQdHBDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtc3RhdGlzdGljcy1jYWxsYmFjay1hZGQiIHRpdGxlPSJnc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfYWRkwqAoKSI+Z3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX2FkZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1zdGF0aXN0aWNzLWNhbGxiYWNrLXJlbW92ZSIgdGl0bGU9ImdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19yZW1vdmXCoCgpIj5nc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfcmVtb3ZlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHU1QtUFRQLVNUQVRJU1RJQ1MtTkVXLURPTUFJTi1GT1VORDpDQVBTIiB0aXRsZT0iR1NUX1BUUF9TVEFUSVNUSUNTX05FV19ET01BSU5fRk9VTkQiPkdTVF9QVFBfU1RBVElTVElDU19ORVdfRE9NQUlOX0ZPVU5EPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHU1QtUFRQLVNUQVRJU1RJQ1MtUEFUSC1ERUxBWS1NRUFTVVJFRDpDQVBTIiB0aXRsZT0iR1NUX1BUUF9TVEFUSVNUSUNTX1BBVEhfREVMQVlfTUVBU1VSRUQiPkdTVF9QVFBfU1RBVElTVElDU19QQVRIX0RFTEFZX01FQVNVUkVEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNHU1QtUFRQLVNUQVRJU1RJQ1MtVElNRS1VUERBVEVEOkNBUFMiIHRpdGxlPSJHU1RfUFRQX1NUQVRJU1RJQ1NfVElNRV9VUERBVEVEIj5HU1RfUFRQX1NUQVRJU1RJQ1NfVElNRV9VUERBVEVEPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFB1c2hTcmMiPkdzdFB1c2hTcmM8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB1c2hTcmMuaHRtbCIgdGl0bGU9IkdzdFB1c2hTcmMiPkdzdFB1c2hTcmM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmNDbGFzcyIgdGl0bGU9InN0cnVjdCBHc3RQdXNoU3JjQ2xhc3MiPkdzdFB1c2hTcmNDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHVzaFNyYy5odG1sIiB0aXRsZT0iR3N0UHVzaFNyYyI+R3N0UHVzaFNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFEiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5RPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjR3N0UXVldWVBcnJheSIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1kcm9wLWVsZW1lbnQiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50wqAoKSI+Z3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZHJvcC1zdHJ1Y3QiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfZHJvcF9zdHJ1Y3TCoCgpIj5nc3RfcXVldWVfYXJyYXlfZHJvcF9zdHJ1Y3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWZpbmQiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfZmluZMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9maW5kPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1mcmVlIiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X2ZyZWXCoCgpIj5nc3RfcXVldWVfYXJyYXlfZnJlZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZ2V0LWxlbmd0aCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RowqAoKSI+Z3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGg8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWlzLWVtcHR5IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5wqAoKSI+Z3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1uZXciIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfbmV3wqAoKSI+Z3N0X3F1ZXVlX2FycmF5X25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktbmV3LWZvci1zdHJ1Y3QiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfbmV3X2Zvcl9zdHJ1Y3TCoCgpIj5nc3RfcXVldWVfYXJyYXlfbmV3X2Zvcl9zdHJ1Y3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXBlZWstaGVhZCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWTCoCgpIj5nc3RfcXVldWVfYXJyYXlfcGVla19oZWFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1wZWVrLWhlYWQtc3RydWN0IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZF9zdHJ1Y3TCoCgpIj5nc3RfcXVldWVfYXJyYXlfcGVla19oZWFkX3N0cnVjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktcG9wLWhlYWQiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWTCoCgpIj5nc3RfcXVldWVfYXJyYXlfcG9wX2hlYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXBvcC1oZWFkLXN0cnVjdCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZF9zdHJ1Y3TCoCgpIj5nc3RfcXVldWVfYXJyYXlfcG9wX2hlYWRfc3RydWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1wdXNoLXRhaWwiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfcHVzaF90YWlswqAoKSI+Z3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktcHVzaC10YWlsLXN0cnVjdCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWxfc3RydWN0wqAoKSI+Z3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbF9zdHJ1Y3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFMiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5TPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI0dTVC1TVEFSVC1URVNUOkNBUFMiIHRpdGxlPSJHU1RfU1RBUlRfVEVTVCgpIj5HU1RfU1RBUlRfVEVTVDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwjR3N0U3RyZWFtQ29uc2lzdGVuY3kiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFN0cmVhbUNvbnNpc3RlbmN5Lmh0bWwiIHRpdGxlPSJHc3RTdHJlYW1Db25zaXN0ZW5jeSI+R3N0U3RyZWFtQ29uc2lzdGVuY3k8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhUIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjR3N0VGVzdENsb2NrLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNHc3RUZXN0Q2xvY2stLWNsb2NrLXR5cGUiIHRpdGxlPSJUaGUg4oCcY2xvY2stdHlwZeKAnSBwcm9wZXJ0eSI+R3N0VGVzdENsb2NrOmNsb2NrLXR5cGU8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj5Hc3RUZXN0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjR3N0VGVzdENsb2NrLS1zdGFydC10aW1lIiB0aXRsZT0iVGhlIOKAnHN0YXJ0LXRpbWXigJ0gcHJvcGVydHkiPkdzdFRlc3RDbG9jazpzdGFydC10aW1lPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+R3N0VGVzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI0dzdFRlc3RDbG9ja0NsYXNzIiB0aXRsZT0ic3RydWN0IEdzdFRlc3RDbG9ja0NsYXNzIj5Hc3RUZXN0Q2xvY2tDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1hZHZhbmNlLXRpbWUiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWXCoCgpIj5nc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1jcmFuayIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX2NyYW5rwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfY3Jhbms8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1nZXQtbmV4dC1lbnRyeS10aW1lIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfZ2V0X25leHRfZW50cnlfdGltZcKgKCkiPmdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1oYXMtaWQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19oYXNfaWTCoCgpIj5nc3RfdGVzdF9jbG9ja19oYXNfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1pZC1saXN0LWdldC1sYXRlc3QtdGltZSIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX2lkX2xpc3RfZ2V0X2xhdGVzdF90aW1lwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfaWRfbGlzdF9nZXRfbGF0ZXN0X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1uZXciIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19uZXfCoCgpIj5nc3RfdGVzdF9jbG9ja19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1uZXctd2l0aC1zdGFydC10aW1lIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZcKgKCkiPmdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wZWVrLWlkLWNvdW50IiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfcGVla19pZF9jb3VudMKgKCkiPmdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wZWVrLW5leHQtcGVuZGluZy1pZCIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfcGVla19uZXh0X3BlbmRpbmdfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wcm9jZXNzLWlkLWxpc3QiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3TCoCgpIj5nc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wcm9jZXNzLW5leHQtY2xvY2staWQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWTCoCgpIj5nc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1zZXQtdGltZSIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3NldF90aW1lwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay13YWl0LWZvci1tdWx0aXBsZS1wZW5kaW5nLWlkcyIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay13YWl0LWZvci1uZXh0LXBlbmRpbmctaWQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWTCoCgpIj5nc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay13YWl0LWZvci1wZW5kaW5nLWlkLWNvdW50IiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfcGVuZGluZ19pZF9jb3VudMKgKCkiPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX3BlbmRpbmdfaWRfY291bnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS12YWx1ZS1hZGRlZCIgdGl0bGU9IlRoZSDigJx2YWx1ZS1hZGRlZOKAnSBzaWduYWwiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlOjp2YWx1ZS1hZGRlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS12YWx1ZS1jaGFuZ2VkIiB0aXRsZT0iVGhlIOKAnHZhbHVlLWNoYW5nZWTigJ0gc2lnbmFsIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTo6dmFsdWUtY2hhbmdlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS12YWx1ZS1yZW1vdmVkIiB0aXRsZT0iVGhlIOKAnHZhbHVlLXJlbW92ZWTigJ0gc2lnbmFsIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTo6dmFsdWUtcmVtb3ZlZDwvYT4sIG9iamVjdCBzaWduYWwgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1pbnZhbGlkYXRlLWNhY2hlIiB0aXRsZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfaW52YWxpZGF0ZV9jYWNoZcKgKCkiPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX2ludmFsaWRhdGVfY2FjaGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1maW5kLWNvbnRyb2wtcG9pbnQtaXRlciIgdGl0bGU9ImdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlcsKgKCkiPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLWdldC1hbGwiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2FsbMKgKCkiPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfYWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2UtZ2V0LWNvdW50IiB0aXRsZT0iZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9jb3VudMKgKCkiPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfY291bnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS1zZXQiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0wqAoKSI+Z3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwjZ3N0LXRpbWVkLXZhbHVlLWNvbnRyb2wtc291cmNlLXNldC1mcm9tLWxpc3QiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdMKgKCkiPmdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdGltZWQtdmFsdWUtY29udHJvbC1zb3VyY2UtdW5zZXQiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXTCoCgpIj5nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI2dzdC10aW1lZC12YWx1ZS1jb250cm9sLXNvdXJjZS11bnNldC1hbGwiIHRpdGxlPSJnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXRfYWxswqAoKSI+Z3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRyaWdnZXJDb250cm9sU291cmNlIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sI0dzdFRyaWdnZXJDb250cm9sU291cmNlLS10b2xlcmFuY2UiIHRpdGxlPSJUaGUg4oCcdG9sZXJhbmNl4oCdIHByb3BlcnR5Ij5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTp0b2xlcmFuY2U8L2E+LCBvYmplY3QgcHJvcGVydHkgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwiIHRpdGxlPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSI+R3N0VHJpZ2dlckNvbnRyb2xTb3VyY2U8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCNnc3QtdHJpZ2dlci1jb250cm9sLXNvdXJjZS1uZXciIHRpdGxlPSJnc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9uZXfCoCgpIj5nc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRyaWdnZXJDb250cm9sU291cmNlIj5Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI0dzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbsKgKCkiPkdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbjwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEhlbHBlciI+R3N0VHlwZUZpbmRIZWxwZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlciIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVywqAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyIj5Hc3RUeXBlRmluZEhlbHBlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWZvci1idWZmZXIiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVywqAoKSI+Z3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXIiPkdzdFR5cGVGaW5kSGVscGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwjZ3N0LXR5cGUtZmluZC1oZWxwZXItZm9yLWRhdGEiIHRpdGxlPSJnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZGF0YcKgKCkiPmdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFR5cGVGaW5kSGVscGVyLmh0bWwiIHRpdGxlPSJHc3RUeXBlRmluZEhlbHBlciI+R3N0VHlwZUZpbmRIZWxwZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCNnc3QtdHlwZS1maW5kLWhlbHBlci1mb3ItZXh0ZW5zaW9uIiB0aXRsZT0iZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbsKgKCkiPmdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9leHRlbnNpb248L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0VHlwZUZpbmRIZWxwZXIuaHRtbCIgdGl0bGU9IkdzdFR5cGVGaW5kSGVscGVyIj5Hc3RUeXBlRmluZEhlbHBlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sI2dzdC10eXBlLWZpbmQtaGVscGVyLWdldC1yYW5nZSIgdGl0bGU9ImdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZcKgKCkiPmdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RUeXBlRmluZEhlbHBlci5odG1sIiB0aXRsZT0iR3N0VHlwZUZpbmRIZWxwZXIiPkdzdFR5cGVGaW5kSGVscGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRyaWdnZXJDb250cm9sU291cmNlLmh0bWwjR1NULVRZUEUtVFJJR0dFUi1XQVZFRk9STTpDQVBTIiB0aXRsZT0iR1NUX1RZUEVfVFJJR0dFUl9XQVZFRk9STSI+R1NUX1RZUEVfVFJJR0dFUl9XQVZFRk9STTwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZS5odG1sIiB0aXRsZT0iR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UiPkdzdFRyaWdnZXJDb250cm9sU291cmNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvaXgwMi5odG1sIGIvZG9jcy9saWJzL2h0bWwvaXgwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGU5ZWVmLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2l4MDIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbmRleCBvZiBkZXByZWNhdGVkIEFQSTogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDEuaHRtbCIgdGl0bGU9IkFQSSBJbmRleCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9Iml4MDMuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4xMCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFQiPlQ8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwMS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXgwMy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS41Ij48L2E+SW5kZXggb2YgZGVwcmVjYXRlZCBBUEk8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4VCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlQ8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI2dzdC10ZXN0LWNsb2NrLXdhaXQtZm9yLXBlbmRpbmctaWQtY291bnQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9wZW5kaW5nX2lkX2NvdW50wqAoKSI+Z3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfcGVuZGluZ19pZF9jb3VudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+R3N0VGVzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvaXgwMy5odG1sIGIvZG9jcy9saWJzL2h0bWwvaXgwMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmE5MjllLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2l4MDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMTA6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpeDAyLmh0bWwiIHRpdGxlPSJJbmRleCBvZiBkZXByZWNhdGVkIEFQSSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9Iml4MDQuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS44Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PHNwYW4gaWQ9Im5hdl9pbmRleCI+PGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QSI+QTwvYT48L3NwYW4+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJpeDAyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJpeDA0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iaW5kZXgiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpZC0xLjYiPjwvYT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMTA8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4QSI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkE8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1kdHMtYXQtZGlzY29udCIgdGl0bGU9ImdzdF9hZGFwdGVyX2R0c19hdF9kaXNjb250wqAoKSI+Z3N0X2FkYXB0ZXJfZHRzX2F0X2Rpc2NvbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItb2Zmc2V0LWF0LWRpc2NvbnQiIHRpdGxlPSJnc3RfYWRhcHRlcl9vZmZzZXRfYXRfZGlzY29udMKgKCkiPmdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtb2Zmc2V0IiB0aXRsZT0iZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXTCoCgpIj5nc3RfYWRhcHRlcl9wcmV2X29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdHMtYXQtZGlzY29udCIgdGl0bGU9ImdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250wqAoKSI+Z3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2l4MDQuaHRtbCBiL2RvY3MvbGlicy9odG1sL2l4MDQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI5ZGNmYi4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9peDA0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjg6IEdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpeDAzLmh0bWwiIHRpdGxlPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuMTAiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpeDA1Lmh0bWwiIHRpdGxlPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuNiI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEgiPkg8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4VCI+VDwvYT48L3NwYW4+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJpeDAzLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJpeDA1Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iaW5kZXgiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpZC0xLjciPjwvYT5JbmRleCBvZiBuZXcgQVBJIGluIDEuODwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+Ci08YSBuYW1lPSJpZHgiPjwvYT48YSBuYW1lPSJpZHhIIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+SDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jIiB0aXRsZT0iR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmPCoCgpIj5Hc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYzwvYT4sIHVzZXJfZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldy1lbXB0eSIgdGl0bGU9ImdzdF9oYXJuZXNzX25ld19lbXB0ecKgKCkiPmdzdF9oYXJuZXNzX25ld19lbXB0eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC13aXRoLWNiLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQtd2l0aC1jYi1zdGFydC1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhUIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stY3JhbmsiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19jcmFua8KgKCkiPmdzdF90ZXN0X2Nsb2NrX2NyYW5rPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj5Hc3RUZXN0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9peDA1Lmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9peDA1Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZDdkNWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvaXgwNS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuNjogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDQuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS44Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXgwNi5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48c3BhbiBpZD0ibmF2X2luZGV4Ij48YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhBIj5BPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEIiPkI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QyI+QzwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhEIj5EPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEYiPkY8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4SCI+SDwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhOIj5OPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeFAiPlA8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4USI+UTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhUIj5UPC9hPjwvc3Bhbj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48aW1nIHNyYz0idXAtaW5zZW5zaXRpdmUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9Iml4MDQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Iml4MDYuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJpbmRleCI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDEgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImlkLTEuOCI+PC9hPkluZGV4IG9mIG5ldyBBUEkgaW4gMS42PC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxhIG5hbWU9ImlkeCI+PC9hPjxhIG5hbWU9ImlkeEEiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5BPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZ2V0LWJ1ZmZlciIgdGl0bGU9ImdzdF9hZGFwdGVyX2dldF9idWZmZXLCoCgpIj5nc3RfYWRhcHRlcl9nZXRfYnVmZmVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWdldC1idWZmZXItZmFzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX2dldF9idWZmZXJfZmFzdMKgKCkiPmdzdF9hZGFwdGVyX2dldF9idWZmZXJfZmFzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1nZXQtYnVmZmVyLWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2xpc3TCoCgpIj5nc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2xpc3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItZ2V0LWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl9nZXRfbGlzdMKgKCkiPmdzdF9hZGFwdGVyX2dldF9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXRha2UtYnVmZmVyLWxpc3QiIHRpdGxlPSJnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9saXN0wqAoKSI+Z3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfbGlzdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4QiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkI8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLW1lcmdlLXRhZ3MiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9tZXJnZV90YWdzwqAoKSI+Z3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFnczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tdXBkYXRlLXNyYy1jYXBzIiB0aXRsZT0iZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9zcmNfY2Fwc8KgKCkiPmdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfc3JjX2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwjZ3N0LWJ5dGUtcmVhZGVyLWdldC1zdWItcmVhZGVyIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVywqAoKSI+Z3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCIgdGl0bGU9IkdzdEJ5dGVSZWFkZXIiPkdzdEJ5dGVSZWFkZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sI2dzdC1ieXRlLXJlYWRlci1tYXNrZWQtc2Nhbi11aW50MzItcGVlayIgdGl0bGU9ImdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVla8KgKCkiPmdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RCeXRlUmVhZGVyLmh0bWwiIHRpdGxlPSJHc3RCeXRlUmVhZGVyIj5Hc3RCeXRlUmVhZGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEJ5dGVSZWFkZXIuaHRtbCNnc3QtYnl0ZS1yZWFkZXItcGVlay1zdWItcmVhZGVyIiB0aXRsZT0iZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlcsKgKCkiPmdzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Qnl0ZVJlYWRlci5odG1sIiB0aXRsZT0iR3N0Qnl0ZVJlYWRlciI+R3N0Qnl0ZVJlYWRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEMiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5DPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1vYmplY3RzLWRlc3Ryb3llZC1vbi11bnJlZiIgdGl0bGU9ImdzdF9jaGVja19vYmplY3RzX2Rlc3Ryb3llZF9vbl91bnJlZsKgKCkiPmdzdF9jaGVja19vYmplY3RzX2Rlc3Ryb3llZF9vbl91bnJlZjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLW9iamVjdC1kZXN0cm95ZWQtb24tdW5yZWYiIHRpdGxlPSJnc3RfY2hlY2tfb2JqZWN0X2Rlc3Ryb3llZF9vbl91bnJlZsKgKCkiPmdzdF9jaGVja19vYmplY3RfZGVzdHJveWVkX29uX3VucmVmPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCNHU1QtQ09MTEVDVC1QQURTLURUUzpDQVBTIiB0aXRsZT0iR1NUX0NPTExFQ1RfUEFEU19EVFMoKSI+R1NUX0NPTExFQ1RfUEFEU19EVFM8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI0dTVC1DT0xMRUNULVBBRFMtRFRTLUlTLVZBTElEOkNBUFMiIHRpdGxlPSJHU1RfQ09MTEVDVF9QQURTX0RUU19JU19WQUxJRCgpIj5HU1RfQ09MTEVDVF9QQURTX0RUU19JU19WQUxJRDwvYT4sIG1hY3JvIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4RCI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkQ8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwjZ3N0LWRpcmVjdC1jb250cm9sLWJpbmRpbmctbmV3LWFic29sdXRlIiB0aXRsZT0iZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlwqAoKSI+Z3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nLmh0bWwiIHRpdGxlPSJHc3REaXJlY3RDb250cm9sQmluZGluZyI+R3N0RGlyZWN0Q29udHJvbEJpbmRpbmc8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhGIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RjwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItY2xlYXIiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9jbGVhcsKgKCkiPmdzdF9mbG93X2NvbWJpbmVyX2NsZWFyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItcmVzZXQiIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl9yZXNldMKgKCkiPmdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItdXBkYXRlLXBhZC1mbG93IiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93wqAoKSI+Z3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhIIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+SDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI0dzdEhhcm5lc3MiIHRpdGxlPSJzdHJ1Y3QgR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jIiB0aXRsZT0iR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jwqAoKSI+R3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjR3N0SGFybmVzc1RocmVhZCIgdGl0bGU9IkdzdEhhcm5lc3NUaHJlYWQiPkdzdEhhcm5lc3NUaHJlYWQ8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1lbGVtZW50LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxswqAoKSI+Z3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtZWxlbWVudC1zaW5rLXBhZCIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NpbmtfcGFkwqAoKSI+Z3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfc2lua19wYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLWVsZW1lbnQtc3JjLXBhZCIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NyY19wYWTCoCgpIj5nc3RfaGFybmVzc19hZGRfZWxlbWVudF9zcmNfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1wYXJzZSIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9wYXJzZcKgKCkiPmdzdF9oYXJuZXNzX2FkZF9wYXJzZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtcHJvYmUiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfcHJvYmXCoCgpIj5nc3RfaGFybmVzc19hZGRfcHJvYmU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXNpbmsiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfc2lua8KgKCkiPmdzdF9oYXJuZXNzX2FkZF9zaW5rPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zaW5rLWhhcm5lc3MiIHRpdGxlPSJnc3RfaGFybmVzc19hZGRfc2lua19oYXJuZXNzwqAoKSI+Z3N0X2hhcm5lc3NfYWRkX3NpbmtfaGFybmVzczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtc2luay1wYXJzZSIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9zaW5rX3BhcnNlwqAoKSI+Z3N0X2hhcm5lc3NfYWRkX3NpbmtfcGFyc2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYWRkLXNyYyIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9zcmPCoCgpIj5nc3RfaGFybmVzc19hZGRfc3JjPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWFkZC1zcmMtaGFybmVzcyIgdGl0bGU9ImdzdF9oYXJuZXNzX2FkZF9zcmNfaGFybmVzc8KgKCkiPmdzdF9oYXJuZXNzX2FkZF9zcmNfaGFybmVzczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1hZGQtc3JjLXBhcnNlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfYWRkX3NyY19wYXJzZcKgKCkiPmdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtYnVmZmVycy1pbi1xdWV1ZSIgdGl0bGU9ImdzdF9oYXJuZXNzX2J1ZmZlcnNfaW5fcXVldWXCoCgpIj5nc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWJ1ZmZlcnMtcmVjZWl2ZWQiIHRpdGxlPSJnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkwqAoKSI+Z3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1jcmFuay1tdWx0aXBsZS1jbG9jay13YWl0cyIgdGl0bGU9ImdzdF9oYXJuZXNzX2NyYW5rX211bHRpcGxlX2Nsb2NrX3dhaXRzwqAoKSI+Z3N0X2hhcm5lc3NfY3JhbmtfbXVsdGlwbGVfY2xvY2tfd2FpdHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtY3Jhbmstc2luZ2xlLWNsb2NrLXdhaXQiIHRpdGxlPSJnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdMKgKCkiPmdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWNyZWF0ZS1idWZmZXIiIHRpdGxlPSJnc3RfaGFybmVzc19jcmVhdGVfYnVmZmVywqAoKSI+Z3N0X2hhcm5lc3NfY3JlYXRlX2J1ZmZlcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1kdW1wLXRvLWZpbGUiIHRpdGxlPSJnc3RfaGFybmVzc19kdW1wX3RvX2ZpbGXCoCgpIj5nc3RfaGFybmVzc19kdW1wX3RvX2ZpbGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZXZlbnRzLWluLXF1ZXVlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfZXZlbnRzX2luX3F1ZXVlwqAoKSI+Z3N0X2hhcm5lc3NfZXZlbnRzX2luX3F1ZXVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWV2ZW50cy1yZWNlaXZlZCIgdGl0bGU9ImdzdF9oYXJuZXNzX2V2ZW50c19yZWNlaXZlZMKgKCkiPmdzdF9oYXJuZXNzX2V2ZW50c19yZWNlaXZlZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1maW5kLWVsZW1lbnQiIHRpdGxlPSJnc3RfaGFybmVzc19maW5kX2VsZW1lbnTCoCgpIj5nc3RfaGFybmVzc19maW5kX2VsZW1lbnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZ2V0IiB0aXRsZT0iZ3N0X2hhcm5lc3NfZ2V0wqAoKSI+Z3N0X2hhcm5lc3NfZ2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLWdldC1hbGxvY2F0b3IiIHRpdGxlPSJnc3RfaGFybmVzc19nZXRfYWxsb2NhdG9ywqAoKSI+Z3N0X2hhcm5lc3NfZ2V0X2FsbG9jYXRvcjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1nZXQtbGFzdC1wdXNoZWQtdGltZXN0YW1wIiB0aXRsZT0iZ3N0X2hhcm5lc3NfZ2V0X2xhc3RfcHVzaGVkX3RpbWVzdGFtcMKgKCkiPmdzdF9oYXJuZXNzX2dldF9sYXN0X3B1c2hlZF90aW1lc3RhbXA8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtZ2V0LXRlc3RjbG9jayIgdGl0bGU9ImdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2vCoCgpIj5nc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldyIgdGl0bGU9ImdzdF9oYXJuZXNzX25ld8KgKCkiPmdzdF9oYXJuZXNzX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX25ld19mdWxswqAoKSI+Z3N0X2hhcm5lc3NfbmV3X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LXBhcnNlIiB0aXRsZT0iZ3N0X2hhcm5lc3NfbmV3X3BhcnNlwqAoKSI+Z3N0X2hhcm5lc3NfbmV3X3BhcnNlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLW5ldy13aXRoLWVsZW1lbnQiIHRpdGxlPSJnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50wqAoKSI+Z3N0X2hhcm5lc3NfbmV3X3dpdGhfZWxlbWVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1uZXctd2l0aC1wYWRuYW1lcyIgdGl0bGU9ImdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzwqAoKSI+Z3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtbmV3LXdpdGgtdGVtcGxhdGVzIiB0aXRsZT0iZ3N0X2hhcm5lc3NfbmV3X3dpdGhfdGVtcGxhdGVzwqAoKSI+Z3N0X2hhcm5lc3NfbmV3X3dpdGhfdGVtcGxhdGVzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXBsYXkiIHRpdGxlPSJnc3RfaGFybmVzc19wbGF5wqAoKSI+Z3N0X2hhcm5lc3NfcGxheTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVsbMKgKCkiPmdzdF9oYXJuZXNzX3B1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVsbC1ldmVudCIgdGl0bGU9ImdzdF9oYXJuZXNzX3B1bGxfZXZlbnTCoCgpIj5nc3RfaGFybmVzc19wdWxsX2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1bGwtdXBzdHJlYW0tZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoIiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVzaMKgKCkiPmdzdF9oYXJuZXNzX3B1c2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC1hbmQtcHVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3B1c2hfYW5kX3B1bGzCoCgpIj5nc3RfaGFybmVzc19wdXNoX2FuZF9wdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc19wdXNoX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3NfcHVzaF9ldmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1wdXNoLWZyb20tc3JjIiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyY8KgKCkiPmdzdF9oYXJuZXNzX3B1c2hfZnJvbV9zcmM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtcHVzaC10by1zaW5rIiB0aXRsZT0iZ3N0X2hhcm5lc3NfcHVzaF90b19zaW5rwqAoKSI+Z3N0X2hhcm5lc3NfcHVzaF90b19zaW5rPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50wqAoKSI+Z3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1xdWVyeS1sYXRlbmN5IiB0aXRsZT0iZ3N0X2hhcm5lc3NfcXVlcnlfbGF0ZW5jecKgKCkiPmdzdF9oYXJuZXNzX3F1ZXJ5X2xhdGVuY3k8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0wqAoKSI+Z3N0X2hhcm5lc3Nfc2V0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1ibG9ja2luZy1wdXNoLW1vZGUiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfYmxvY2tpbmdfcHVzaF9tb2RlwqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X2Jsb2NraW5nX3B1c2hfbW9kZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtY2FwcyIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9jYXBzwqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X2NhcHM8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LWNhcHMtc3RyIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X2NhcHNfc3RywqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X2NhcHNfc3RyPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1kcm9wLWJ1ZmZlcnMiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfZHJvcF9idWZmZXJzwqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X2Ryb3BfYnVmZmVyczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtZm9yd2FyZGluZyIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9mb3J3YXJkaW5nwqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXByb3Bvc2UtYWxsb2NhdG9yIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X3Byb3Bvc2VfYWxsb2NhdG9ywqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X3Byb3Bvc2VfYWxsb2NhdG9yPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1zaW5rLWNhcHMiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfc2lua19jYXBzwqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2FwczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtc2luay1jYXBzLXN0ciIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHNfc3RywqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2Fwc19zdHI8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXNyYy1jYXBzIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzwqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNldC1zcmMtY2Fwcy1zdHIiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RywqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0cjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zZXQtdGltZSIgdGl0bGU9ImdzdF9oYXJuZXNzX3NldF90aW1lwqAoKSI+Z3N0X2hhcm5lc3Nfc2V0X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc2V0LXVwc3RyZWFtLWxhdGVuY3kiIHRpdGxlPSJnc3RfaGFybmVzc19zZXRfdXBzdHJlYW1fbGF0ZW5jecKgKCkiPmdzdF9oYXJuZXNzX3NldF91cHN0cmVhbV9sYXRlbmN5PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXNpbmstcHVzaC1tYW55IiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc2lua19wdXNoX21hbnnCoCgpIj5nc3RfaGFybmVzc19zaW5rX3B1c2hfbWFueTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zcmMtY3JhbmstYW5kLXB1c2gtbWFueSIgdGl0bGU9ImdzdF9oYXJuZXNzX3NyY19jcmFua19hbmRfcHVzaF9tYW55wqAoKSI+Z3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3JjLXB1c2gtZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc19zcmNfcHVzaF9ldmVudMKgKCkiPmdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1jdXN0b20tc3RhcnQiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfY3VzdG9tX3N0YXJ0wqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX2N1c3RvbV9zdGFydDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHJvcGVydHktc3RhcnQtZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3Byb3BlcnR5X3N0YXJ0X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtYnVmZmVyLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1wdXNoLWJ1ZmZlci13aXRoLWNiLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfd2l0aF9jYl9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3dpdGhfY2Jfc3RhcnRfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3MtcHVzaC1ldmVudC1zdGFydC1mdWxsIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnRfZnVsbMKgKCkiPmdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXB1c2gtdXBzdHJlYW0tZXZlbnQtc3RhcnQtZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50X3N0YXJ0X2Z1bGzCoCgpIj5nc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF9zdGFydF9mdWxsPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXN0cmVzcy1yZXF1ZXN0cGFkLXN0YXJ0LWZ1bGwiIHRpdGxlPSJnc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3JlcXVlc3RwYWRfc3RhcnRfZnVsbDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy1zdHJlc3Mtc3RhdGVjaGFuZ2Utc3RhcnQtZnVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydF9mdWxswqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3N0YXRlY2hhbmdlX3N0YXJ0X2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtc3RyZXNzLXRocmVhZC1zdG9wIiB0aXRsZT0iZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wwqAoKSI+Z3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXRlYXJkb3duIiB0aXRsZT0iZ3N0X2hhcm5lc3NfdGVhcmRvd27CoCgpIj5nc3RfaGFybmVzc190ZWFyZG93bjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy10cnktcHVsbCIgdGl0bGU9ImdzdF9oYXJuZXNzX3RyeV9wdWxswqAoKSI+Z3N0X2hhcm5lc3NfdHJ5X3B1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdHJ5LXB1bGwtZXZlbnQiIHRpdGxlPSJnc3RfaGFybmVzc190cnlfcHVsbF9ldmVudMKgKCkiPmdzdF9oYXJuZXNzX3RyeV9wdWxsX2V2ZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXRyeS1wdWxsLXVwc3RyZWFtLWV2ZW50IiB0aXRsZT0iZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfdXBzdHJlYW1fZXZlbnTCoCgpIj5nc3RfaGFybmVzc190cnlfcHVsbF91cHN0cmVhbV9ldmVudDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy11cHN0cmVhbS1ldmVudHMtaW4tcXVldWUiIHRpdGxlPSJnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWXCoCgpIj5nc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3MtdXBzdHJlYW0tZXZlbnRzLXJlY2VpdmVkIiB0aXRsZT0iZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX3JlY2VpdmVkwqAoKSI+Z3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX3JlY2VpdmVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sI2dzdC1oYXJuZXNzLXVzZS1zeXN0ZW1jbG9jayIgdGl0bGU9ImdzdF9oYXJuZXNzX3VzZV9zeXN0ZW1jbG9ja8KgKCkiPmdzdF9oYXJuZXNzX3VzZV9zeXN0ZW1jbG9jazwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwiIHRpdGxlPSJHc3RIYXJuZXNzIj5Hc3RIYXJuZXNzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCNnc3QtaGFybmVzcy11c2UtdGVzdGNsb2NrIiB0aXRsZT0iZ3N0X2hhcm5lc3NfdXNlX3Rlc3RjbG9ja8KgKCkiPmdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2s8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0SGFybmVzcy5odG1sIiB0aXRsZT0iR3N0SGFybmVzcyI+R3N0SGFybmVzczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RIYXJuZXNzLmh0bWwjZ3N0LWhhcm5lc3Mtd2FpdC1mb3ItY2xvY2staWQtd2FpdHMiIHRpdGxlPSJnc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0c8KgKCkiPmdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEhhcm5lc3MuaHRtbCIgdGl0bGU9IkdzdEhhcm5lc3MiPkdzdEhhcm5lc3M8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhOIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+TjwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCNnc3QtbnRwLWNsb2NrLW5ldyIgdGl0bGU9ImdzdF9udHBfY2xvY2tfbmV3wqAoKSI+Z3N0X250cF9jbG9ja19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0TmV0Q2xpZW50Q2xvY2suaHRtbCIgdGl0bGU9IkdzdE5ldENsaWVudENsb2NrIj5Hc3ROZXRDbGllbnRDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFAiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5QPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtY2xvY2stbmV3IiB0aXRsZT0iZ3N0X3B0cF9jbG9ja19uZXfCoCgpIj5nc3RfcHRwX2Nsb2NrX25ldzwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1kZWluaXQiIHRpdGxlPSJnc3RfcHRwX2RlaW5pdMKgKCkiPmdzdF9wdHBfZGVpbml0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNnc3QtcHRwLWluaXQiIHRpdGxlPSJnc3RfcHRwX2luaXTCoCgpIj5nc3RfcHRwX2luaXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFB0cENsb2NrIj5Hc3RQdHBDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtaXMtaW5pdGlhbGl6ZWQiIHRpdGxlPSJnc3RfcHRwX2lzX2luaXRpYWxpemVkwqAoKSI+Z3N0X3B0cF9pc19pbml0aWFsaXplZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwjZ3N0LXB0cC1pcy1zdXBwb3J0ZWQiIHRpdGxlPSJnc3RfcHRwX2lzX3N1cHBvcnRlZMKgKCkiPmdzdF9wdHBfaXNfc3VwcG9ydGVkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFB0cENsb2NrLmh0bWwiIHRpdGxlPSJHc3RQdHBDbG9jayI+R3N0UHRwQ2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCNnc3QtcHRwLXN0YXRpc3RpY3MtY2FsbGJhY2stYWRkIiB0aXRsZT0iZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX2FkZMKgKCkiPmdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0UHRwQ2xvY2suaHRtbCIgdGl0bGU9IkdzdFB0cENsb2NrIj5Hc3RQdHBDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sI2dzdC1wdHAtc3RhdGlzdGljcy1jYWxsYmFjay1yZW1vdmUiIHRpdGxlPSJnc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfcmVtb3ZlwqAoKSI+Z3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX3JlbW92ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RQdHBDbG9jay5odG1sIiB0aXRsZT0iR3N0UHRwQ2xvY2siPkdzdFB0cENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4USI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPlE8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZHJvcC1zdHJ1Y3QiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfZHJvcF9zdHJ1Y3TCoCgpIj5nc3RfcXVldWVfYXJyYXlfZHJvcF9zdHJ1Y3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LW5ldy1mb3Itc3RydWN0IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X25ld19mb3Jfc3RydWN0wqAoKSI+Z3N0X3F1ZXVlX2FycmF5X25ld19mb3Jfc3RydWN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1wZWVrLWhlYWQtc3RydWN0IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZF9zdHJ1Y3TCoCgpIj5nc3RfcXVldWVfYXJyYXlfcGVla19oZWFkX3N0cnVjdDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktcG9wLWhlYWQtc3RydWN0IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkX3N0cnVjdMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZF9zdHJ1Y3Q8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFQiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLXZhbHVlLWFkZGVkIiB0aXRsZT0iVGhlIOKAnHZhbHVlLWFkZGVk4oCdIHNpZ25hbCI+R3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U6OnZhbHVlLWFkZGVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLXZhbHVlLWNoYW5nZWQiIHRpdGxlPSJUaGUg4oCcdmFsdWUtY2hhbmdlZOKAnSBzaWduYWwiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlOjp2YWx1ZS1jaGFuZ2VkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZS5odG1sI0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlLXZhbHVlLXJlbW92ZWQiIHRpdGxlPSJUaGUg4oCcdmFsdWUtcmVtb3ZlZOKAnSBzaWduYWwiPkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlOjp2YWx1ZS1yZW1vdmVkPC9hPiwgb2JqZWN0IHNpZ25hbCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UuaHRtbCIgdGl0bGU9IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIj5Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2l4MDYuaHRtbCBiL2RvY3MvbGlicy9odG1sL2l4MDYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBkYTczYS4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9peDA2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPkluZGV4IG9mIG5ldyBBUEkgaW4gMS40OiBHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXgwNS5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjYiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpeDA3Lmh0bWwiIHRpdGxlPSJJbmRleCBvZiBuZXcgQVBJIGluIDEuMiI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEEiPkE8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QiI+QjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhDIj5DPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEYiPkY8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4VCI+VDwvYT48L3NwYW4+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJpeDA1Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJpeDA3Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0iaW5kZXgiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpZC0xLjkiPjwvYT5JbmRleCBvZiBuZXcgQVBJIGluIDEuNDwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+Ci08YSBuYW1lPSJpZHgiPjwvYT48YSBuYW1lPSJpZHhBIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QTwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLWNvcHktYnl0ZXMiIHRpdGxlPSJnc3RfYWRhcHRlcl9jb3B5X2J5dGVzwqAoKSI+Z3N0X2FkYXB0ZXJfY29weV9ieXRlczwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGEgbmFtZT0iaWR4QiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkI8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTcmMuaHRtbCNnc3QtYmFzZS1zcmMtc2V0LWF1dG9tYXRpYy1lb3MiIHRpdGxlPSJnc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3PCoCgpIj5nc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3M8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNyYy5odG1sIiB0aXRsZT0iR3N0QmFzZVNyYyI+R3N0QmFzZVNyYzwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEMiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5DPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zaW5rLXBhZC1ieS1uYW1lLWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlwqAoKSI+Z3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwjZ3N0LWNoZWNrLXNldHVwLXNpbmstcGFkLWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfZnJvbV90ZW1wbGF0ZcKgKCkiPmdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9mcm9tX3RlbXBsYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNnc3QtY2hlY2stc2V0dXAtc3JjLXBhZC1ieS1uYW1lLWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGXCoCgpIj5nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2dzdC1jaGVjay1zZXR1cC1zcmMtcGFkLWZyb20tdGVtcGxhdGUiIHRpdGxlPSJnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9mcm9tX3RlbXBsYXRlwqAoKSI+Z3N0X2NoZWNrX3NldHVwX3NyY19wYWRfZnJvbV90ZW1wbGF0ZTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sIiB0aXRsZT0iR3N0Q2hlY2siPkdzdENoZWNrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjR3N0Q29sbGVjdFBhZHNGbHVzaEZ1bmN0aW9uIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHNGbHVzaEZ1bmN0aW9uwqAoKSI+R3N0Q29sbGVjdFBhZHNGbHVzaEZ1bmN0aW9uPC9hPiwgdXNlcl9mdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0Q29sbGVjdFBhZHMuaHRtbCIgdGl0bGU9IkdzdENvbGxlY3RQYWRzIj5Hc3RDb2xsZWN0UGFkczwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sI2dzdC1jb2xsZWN0LXBhZHMtc2V0LWZsdXNoLWZ1bmN0aW9uIiB0aXRsZT0iZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hfZnVuY3Rpb27CoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaF9mdW5jdGlvbjwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RDb2xsZWN0UGFkcy5odG1sIiB0aXRsZT0iR3N0Q29sbGVjdFBhZHMiPkdzdENvbGxlY3RQYWRzPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwjZ3N0LWNvbGxlY3QtcGFkcy1zcmMtZXZlbnQtZGVmYXVsdCIgdGl0bGU9ImdzdF9jb2xsZWN0X3BhZHNfc3JjX2V2ZW50X2RlZmF1bHTCoCgpIj5nc3RfY29sbGVjdF9wYWRzX3NyY19ldmVudF9kZWZhdWx0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdENvbGxlY3RQYWRzLmh0bWwiIHRpdGxlPSJHc3RDb2xsZWN0UGFkcyI+R3N0Q29sbGVjdFBhZHM8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhGIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+RjwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjR3N0Rmxvd0NvbWJpbmVyIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+LCBzdHJ1Y3QgaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItYWRkLXBhZCIgdGl0bGU9ImdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWTCoCgpIj5nc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItZnJlZSIgdGl0bGU9ImdzdF9mbG93X2NvbWJpbmVyX2ZyZWXCoCgpIj5nc3RfZmxvd19jb21iaW5lcl9mcmVlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItbmV3IiB0aXRsZT0iZ3N0X2Zsb3dfY29tYmluZXJfbmV3wqAoKSI+Z3N0X2Zsb3dfY29tYmluZXJfbmV3PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItcmVtb3ZlLXBhZCIgdGl0bGU9ImdzdF9mbG93X2NvbWJpbmVyX3JlbW92ZV9wYWTCoCgpIj5nc3RfZmxvd19jb21iaW5lcl9yZW1vdmVfcGFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Rmxvd0NvbWJpbmVyLmh0bWwjZ3N0LWZsb3ctY29tYmluZXItdXBkYXRlLWZsb3ciIHRpdGxlPSJnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfZmxvd8KgKCkiPmdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdEZsb3dDb21iaW5lci5odG1sIiB0aXRsZT0iR3N0Rmxvd0NvbWJpbmVyIj5Hc3RGbG93Q29tYmluZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhUIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+VDwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2staWQtbGlzdC1nZXQtbGF0ZXN0LXRpbWUiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19pZF9saXN0X2dldF9sYXRlc3RfdGltZcKgKCkiPmdzdF90ZXN0X2Nsb2NrX2lkX2xpc3RfZ2V0X2xhdGVzdF90aW1lPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj5Hc3RUZXN0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2stcHJvY2Vzcy1pZC1saXN0IiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19pZF9saXN0wqAoKSI+Z3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19pZF9saXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj5Hc3RUZXN0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwjZ3N0LXRlc3QtY2xvY2std2FpdC1mb3ItbXVsdGlwbGUtcGVuZGluZy1pZHMiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkc8KgKCkiPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sIiB0aXRsZT0iR3N0VGVzdENsb2NrIj5Hc3RUZXN0Q2xvY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9peDA3Lmh0bWwgYi9kb2NzL2xpYnMvaHRtbC9peDA3Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZDE1NWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvaXgwNy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMjogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDYuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS40Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXgwOC5odG1sIiB0aXRsZT0iSW5kZXggb2YgbmV3IEFQSSBpbiAxLjAuMSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEEiPkE8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4QiI+QjwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhEIj5EPC9hPgotICAgICAgICAgICAgICAgICAgICDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEYiPkY8L2E+Ci0gICAgICAgICAgICAgICAgICAgIMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNob3J0Y3V0IiBocmVmPSIjaWR4USI+UTwvYT4KLSAgICAgICAgICAgICAgICAgICAgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic2hvcnRjdXQiIGhyZWY9IiNpZHhUIj5UPC9hPjwvc3Bhbj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48aW1nIHNyYz0idXAtaW5zZW5zaXRpdmUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9Iml4MDYuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9Iml4MDguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJpbmRleCI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDEgY2xhc3M9InRpdGxlIj4KLTxhIG5hbWU9ImlkLTEuMTAiPjwvYT5JbmRleCBvZiBuZXcgQVBJIGluIDEuMjwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+Ci08YSBuYW1lPSJpZHgiPjwvYT48YSBuYW1lPSJpZHhBIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QTwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sI2dzdC1hZGFwdGVyLXByZXYtZHRzLWF0LW9mZnNldCIgdGl0bGU9ImdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldMKgKCkiPmdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwiIHRpdGxlPSJHc3RBZGFwdGVyIj5Hc3RBZGFwdGVyPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wcmV2LXB0cy1hdC1vZmZzZXQiIHRpdGxlPSJnc3RfYWRhcHRlcl9wcmV2X3B0c19hdF9vZmZzZXTCoCgpIj5nc3RfYWRhcHRlcl9wcmV2X3B0c19hdF9vZmZzZXQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QWRhcHRlci5odG1sIiB0aXRsZT0iR3N0QWRhcHRlciI+R3N0QWRhcHRlcjwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RBZGFwdGVyLmh0bWwjZ3N0LWFkYXB0ZXItdGFrZS1idWZmZXItZmFzdCIgdGl0bGU9ImdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3TCoCgpIj5nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEFkYXB0ZXIuaHRtbCIgdGl0bGU9IkdzdEFkYXB0ZXIiPkdzdEFkYXB0ZXI8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludDY0LWhleCIgdGl0bGU9ImFzc2VydF9lcXVhbHNfaW50NjRfaGV4KCkiPmFzc2VydF9lcXVhbHNfaW50NjRfaGV4PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLWludC1oZXgiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX2ludF9oZXgoKSI+YXNzZXJ0X2VxdWFsc19pbnRfaGV4PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLXBvaW50ZXIiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX3BvaW50ZXIoKSI+YXNzZXJ0X2VxdWFsc19wb2ludGVyPC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCNhc3NlcnQtZXF1YWxzLXVpbnQ2NC1oZXgiIHRpdGxlPSJhc3NlcnRfZXF1YWxzX3VpbnQ2NF9oZXgoKSI+YXNzZXJ0X2VxdWFsc191aW50NjRfaGV4PC9hPiwgbWFjcm8gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdENoZWNrLmh0bWwiIHRpdGxlPSJHc3RDaGVjayI+R3N0Q2hlY2s8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08YSBuYW1lPSJpZHhCIj48L2E+PGgzIGNsYXNzPSJ0aXRsZSI+QjwvaDM+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay0tbWF4LWJpdHJhdGUiIHRpdGxlPSJUaGUg4oCcbWF4LWJpdHJhdGXigJ0gcHJvcGVydHkiPkdzdEJhc2VTaW5rOm1heC1iaXRyYXRlPC9hPiwgb2JqZWN0IHByb3BlcnR5IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlU2luay5odG1sIiB0aXRsZT0iR3N0QmFzZVNpbmsiPkdzdEJhc2VTaW5rPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VQYXJzZS5odG1sI2dzdC1iYXNlLXBhcnNlLXNldC10cy1hdC1vZmZzZXQiIHRpdGxlPSJnc3RfYmFzZV9wYXJzZV9zZXRfdHNfYXRfb2Zmc2V0wqAoKSI+Z3N0X2Jhc2VfcGFyc2Vfc2V0X3RzX2F0X29mZnNldDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RCYXNlUGFyc2UuaHRtbCIgdGl0bGU9IkdzdEJhc2VQYXJzZSI+R3N0QmFzZVBhcnNlPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwjZ3N0LWJhc2Utc2luay1nZXQtbWF4LWJpdHJhdGUiIHRpdGxlPSJnc3RfYmFzZV9zaW5rX2dldF9tYXhfYml0cmF0ZcKgKCkiPmdzdF9iYXNlX3NpbmtfZ2V0X21heF9iaXRyYXRlPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VTaW5rLmh0bWwiIHRpdGxlPSJHc3RCYXNlU2luayI+R3N0QmFzZVNpbms8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCNnc3QtYmFzZS1zaW5rLXNldC1tYXgtYml0cmF0ZSIgdGl0bGU9ImdzdF9iYXNlX3Npbmtfc2V0X21heF9iaXRyYXRlwqAoKSI+Z3N0X2Jhc2Vfc2lua19zZXRfbWF4X2JpdHJhdGU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVNpbmsuaHRtbCIgdGl0bGU9IkdzdEJhc2VTaW5rIj5Hc3RCYXNlU2luazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEQiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5EPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1kcm9wLWhlYWQiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWTCoCgpIj5nc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1mbHVzaCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2ZsdXNowqAoKSI+Z3N0X2RhdGFfcXVldWVfZmx1c2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1nZXQtbGV2ZWwiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWzCoCgpIj5nc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1pcy1lbXB0eSIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5wqAoKSI+Z3N0X2RhdGFfcXVldWVfaXNfZW1wdHk8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1pcy1mdWxsIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfaXNfZnVsbMKgKCkiPmdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1saW1pdHMtY2hhbmdlZCIgdGl0bGU9ImdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkwqAoKSI+Z3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1uZXciIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9uZXfCoCgpIj5nc3RfZGF0YV9xdWV1ZV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wZWVrIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcGVla8KgKCkiPmdzdF9kYXRhX3F1ZXVlX3BlZWs8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wb3AiIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9wb3DCoCgpIj5nc3RfZGF0YV9xdWV1ZV9wb3A8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wdXNoIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcHVzaMKgKCkiPmdzdF9kYXRhX3F1ZXVlX3B1c2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1wdXNoLWZvcmNlIiB0aXRsZT0iZ3N0X2RhdGFfcXVldWVfcHVzaF9mb3JjZcKgKCkiPmdzdF9kYXRhX3F1ZXVlX3B1c2hfZm9yY2U8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3REYXRhUXVldWUuaHRtbCNnc3QtZGF0YS1xdWV1ZS1zZXQtZmx1c2hpbmciIHRpdGxlPSJnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmfCoCgpIj5nc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0RGF0YVF1ZXVlLmh0bWwiIHRpdGxlPSJHc3REYXRhUXVldWUiPkdzdERhdGFRdWV1ZTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeEYiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5GPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1pbnQ2NC1oZXgiIHRpdGxlPSJmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4KCkiPmZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXg8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1pbnQtaGV4IiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXgoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXg8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy1wb2ludGVyIiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXI8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RDaGVjay5odG1sI2ZhaWwtdW5sZXNzLWVxdWFscy11aW50NjQtaGV4IiB0aXRsZT0iZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NF9oZXgoKSI+ZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NF9oZXg8L2E+LCBtYWNybyBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0Q2hlY2suaHRtbCIgdGl0bGU9IkdzdENoZWNrIj5Hc3RDaGVjazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFEiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5RPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWRyb3AtZWxlbWVudCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9kcm9wX2VsZW1lbnTCoCgpIj5nc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50PC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1maW5kIiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X2ZpbmTCoCgpIj5nc3RfcXVldWVfYXJyYXlfZmluZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktZnJlZSIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9mcmVlwqAoKSI+Z3N0X3F1ZXVlX2FycmF5X2ZyZWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LWdldC1sZW5ndGgiIHRpdGxlPSJnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1pcy1lbXB0eSIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9pc19lbXB0ecKgKCkiPmdzdF9xdWV1ZV9hcnJheV9pc19lbXB0eTwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktbmV3IiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X25ld8KgKCkiPmdzdF9xdWV1ZV9hcnJheV9uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwjZ3N0LXF1ZXVlLWFycmF5LXBlZWstaGVhZCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWTCoCgpIj5nc3RfcXVldWVfYXJyYXlfcGVla19oZWFkPC9hPiwgZnVuY3Rpb24gaW4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCIgdGl0bGU9IkdzdFF1ZXVlQXJyYXkiPkdzdFF1ZXVlQXJyYXk8L2E+Ci08L2R0PgotPGRkPjwvZGQ+Ci08ZHQ+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sI2dzdC1xdWV1ZS1hcnJheS1wb3AtaGVhZCIgdGl0bGU9ImdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZDwvYT4sIGZ1bmN0aW9uIGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItbGlicy1Hc3RRdWV1ZUFycmF5Lmh0bWwiIHRpdGxlPSJHc3RRdWV1ZUFycmF5Ij5Hc3RRdWV1ZUFycmF5PC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1saWJzLUdzdFF1ZXVlQXJyYXkuaHRtbCNnc3QtcXVldWUtYXJyYXktcHVzaC10YWlsIiB0aXRsZT0iZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbMKgKCkiPmdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWw8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLWxpYnMtR3N0UXVldWVBcnJheS5odG1sIiB0aXRsZT0iR3N0UXVldWVBcnJheSI+R3N0UXVldWVBcnJheTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxhIG5hbWU9ImlkeFQiPjwvYT48aDMgY2xhc3M9InRpdGxlIj5UPC9oMz4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNHc3RUZXN0Q2xvY2stc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRlc3RDbG9jayI+R3N0VGVzdENsb2NrPC9hPiwgc3RydWN0IGluIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCIgdGl0bGU9IkdzdFRlc3RDbG9jayI+R3N0VGVzdENsb2NrPC9hPgotPC9kdD4KLTxkZD48L2RkPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdFRlc3RDbG9jay5odG1sI0dzdFRlc3RDbG9ja0NsYXNzIiB0aXRsZT0ic3RydWN0IEdzdFRlc3RDbG9ja0NsYXNzIj5Hc3RUZXN0Q2xvY2tDbGFzczwvYT4sIHN0cnVjdCBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1hZHZhbmNlLXRpbWUiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWXCoCgpIj5nc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1nZXQtbmV4dC1lbnRyeS10aW1lIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfZ2V0X25leHRfZW50cnlfdGltZcKgKCkiPmdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1oYXMtaWQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19oYXNfaWTCoCgpIj5nc3RfdGVzdF9jbG9ja19oYXNfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1uZXciIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19uZXfCoCgpIj5nc3RfdGVzdF9jbG9ja19uZXc8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1uZXctd2l0aC1zdGFydC10aW1lIiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZcKgKCkiPmdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wZWVrLWlkLWNvdW50IiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfcGVla19pZF9jb3VudMKgKCkiPmdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wZWVrLW5leHQtcGVuZGluZy1pZCIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfcGVla19uZXh0X3BlbmRpbmdfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1wcm9jZXNzLW5leHQtY2xvY2staWQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWTCoCgpIj5nc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay1zZXQtdGltZSIgdGl0bGU9ImdzdF90ZXN0X2Nsb2NrX3NldF90aW1lwqAoKSI+Z3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWU8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay13YWl0LWZvci1uZXh0LXBlbmRpbmctaWQiIHRpdGxlPSJnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWTCoCgpIj5nc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTxkdD4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJHc3RUZXN0Q2xvY2suaHRtbCNnc3QtdGVzdC1jbG9jay13YWl0LWZvci1wZW5kaW5nLWlkLWNvdW50IiB0aXRsZT0iZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfcGVuZGluZ19pZF9jb3VudMKgKCkiPmdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX3BlbmRpbmdfaWRfY291bnQ8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0VGVzdENsb2NrLmh0bWwiIHRpdGxlPSJHc3RUZXN0Q2xvY2siPkdzdFRlc3RDbG9jazwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2l4MDguaHRtbCBiL2RvY3MvbGlicy9odG1sL2l4MDguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3YTYxMy4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9peDA4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+SW5kZXggb2YgbmV3IEFQSSBpbiAxLjAuMTogR1N0cmVhbWVyIDEuMCBMaWJyYXJ5IFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciAxLjAgTGlicmFyeSBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgMS4wIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InByZXYiIGhyZWY9Iml4MDcuaHRtbCIgdGl0bGU9IkluZGV4IG9mIG5ldyBBUEkgaW4gMS4yIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIiB0aXRsZT0iQW5ub3RhdGlvbiBHbG9zc2FyeSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjxzcGFuIGlkPSJuYXZfaW5kZXgiPjxhIGNsYXNzPSJzaG9ydGN1dCIgaHJlZj0iI2lkeEIiPkI8L2E+PC9zcGFuPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaXgwNy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYW5ub3RhdGlvbi1nbG9zc2FyeS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImluZGV4Ij4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS4xMSI+PC9hPkluZGV4IG9mIG5ldyBBUEkgaW4gMS4wLjE8L2gxPjwvZGl2PjwvZGl2PjwvZGl2PgotPGEgbmFtZT0iaWR4Ij48L2E+PGEgbmFtZT0iaWR4QiI+PC9hPjxoMyBjbGFzcz0idGl0bGUiPkI8L2gzPgotPGR0PgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNnc3QtYmFzZS10cmFuc2Zvcm0tc2V0LXByZWZlci1wYXNzdGhyb3VnaCIgdGl0bGU9ImdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJlZmVyX3Bhc3N0aHJvdWdowqAoKSI+Z3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcmVmZXJfcGFzc3Rocm91Z2g8L2E+LCBmdW5jdGlvbiBpbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iR3N0QmFzZVRyYW5zZm9ybS5odG1sIiB0aXRsZT0iR3N0QmFzZVRyYW5zZm9ybSI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLTwvZHQ+Ci08ZGQ+PC9kZD4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL2xlZnQtaW5zZW5zaXRpdmUucG5nIGIvZG9jcy9saWJzL2h0bWwvbGVmdC1pbnNlbnNpdGl2ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTQ4ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvbGVmdC1pbnNlbnNpdGl2ZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9sZWZ0LnBuZyBiL2RvY3MvbGlicy9odG1sL2xlZnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTY0OTEzLi4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL2xlZnQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9saWJzL2h0bWwvcmlnaHQtaW5zZW5zaXRpdmUucG5nIGIvZG9jcy9saWJzL2h0bWwvcmlnaHQtaW5zZW5zaXRpdmUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWVmYTI3Li4wMDAwMDAwCi0tLSBhL2RvY3MvbGlicy9odG1sL3JpZ2h0LWluc2Vuc2l0aXZlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL3JpZ2h0LnBuZyBiL2RvY3MvbGlicy9odG1sL3JpZ2h0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzNjFhNi4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC9yaWdodC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC9zdHlsZS5jc3MgYi9kb2NzL2xpYnMvaHRtbC9zdHlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NzU0MjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvc3R5bGUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDc5ICswLDAgQEAKLWJvZHkKLXsKLSAgZm9udC1mYW1pbHk6IGNhbnRhcmVsbCwgc2Fucy1zZXJpZjsKLX0KLS5zeW5vcHNpcywgLmNsYXNzc3lub3BzaXMKLXsKLSAgLyogdGFuZ286YWx1bWluaXVtIDEvMiAqLwotICBiYWNrZ3JvdW5kOiAjZWVlZWVjOwotICBiYWNrZ3JvdW5kOiByZ2JhKDIzOCwgMjM4LCAyMzYsIDAuNSk7Ci0gIGJvcmRlcjogc29saWQgMXB4IHJnYigyMzgsIDIzOCwgMjM2KTsKLSAgcGFkZGluZzogMC41ZW07Ci19Ci0ucHJvZ3JhbWxpc3RpbmcKLXsKLSAgLyogdGFuZ286c2t5IGJsdWUgMC8xICovCi0gIC8qIGZhbGxiYWNrIGZvciBubyByZ2JhIHN1cHBvcnQgKi8KLSAgYmFja2dyb3VuZDogI2U2ZjNmZjsKLSAgYm9yZGVyOiBzb2xpZCAxcHggIzcyOWZjZjsKLSAgYmFja2dyb3VuZDogcmdiYSgxMTQsIDE1OSwgMjA3LCAwLjEpOwotICBib3JkZXI6IHNvbGlkIDFweCByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMik7Ci0gIHBhZGRpbmc6IDAuNWVtOwotfQotLnZhcmlhYmxlbGlzdAotewotICBwYWRkaW5nOiA0cHg7Ci0gIG1hcmdpbi1sZWZ0OiAzZW07Ci19Ci0udmFyaWFibGVsaXN0IHRkOmZpcnN0LWNoaWxkCi17Ci0gIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLWRpdi5nYWxsZXJ5LWZsb2F0Ci17Ci0gIGZsb2F0OiBsZWZ0OwotICBwYWRkaW5nOiAxMHB4OwotfQotZGl2LmdhbGxlcnktZmxvYXQgaW1nCi17Ci0gIGJvcmRlci1zdHlsZTogbm9uZTsKLX0KLWRpdi5nYWxsZXJ5LXNwYWNlcgotewotICBjbGVhcjogYm90aDsKLX0KLQotYSwgYTp2aXNpdGVkCi17Ci0gIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgLyogdGFuZ286c2t5IGJsdWUgMiAqLwotICBjb2xvcjogIzM0NjVhNDsKLX0KLWE6aG92ZXIKLXsKLSAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci0gIC8qIHRhbmdvOnNreSBibHVlIDEgKi8KLSAgY29sb3I6ICM3MjlmY2Y7Ci19Ci0KLWRpdi5pbmZvcm1hbHRhYmxlIHRhYmxlCi17Ci0gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7Ci0gIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZW07Ci0gIGJvcmRlcjogbm9uZTsKLX0KLQotZGl2LmluZm9ybWFsdGFibGUgdGFibGUgdGQsIGRpdi5pbmZvcm1hbHRhYmxlIHRhYmxlIHRoCi17Ci0gIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLS5mdW5jdGlvbl90eXBlLAotLnZhcmlhYmxlX3R5cGUsCi0ucHJvcGVydHlfdHlwZSwKLS5zaWduYWxfdHlwZSwKLS5wYXJhbWV0ZXJfbmFtZSwKLS5zdHJ1Y3RfbWVtYmVyX25hbWUsCi0udW5pb25fbWVtYmVyX25hbWUsCi0uZGVmaW5lX2tleXdvcmQsCi0uZGF0YXR5cGVfa2V5d29yZCwKLS50eXBlZGVmX2tleXdvcmQKLXsKLSAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLS8qIGRpbSBub24tcHJpbWFyeSBjb2x1bW5zICovCi0uY19wdW5jdHVhdGlvbiwKLS5mdW5jdGlvbl90eXBlLAotLnZhcmlhYmxlX3R5cGUsCi0ucHJvcGVydHlfdHlwZSwKLS5zaWduYWxfdHlwZSwKLS5kZWZpbmVfa2V5d29yZCwKLS5kYXRhdHlwZV9rZXl3b3JkLAotLnR5cGVkZWZfa2V5d29yZCwKLS5wcm9wZXJ0eV9mbGFncywKLS5zaWduYWxfZmxhZ3MsCi0ucGFyYW1ldGVyX2Fubm90YXRpb25zLAotLmVudW1fbWVtYmVyX2Fubm90YXRpb25zLAotLnN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMsCi0udW5pb25fbWVtYmVyX2Fubm90YXRpb25zCi17Ci0gIGNvbG9yOiAjODg4YTg1OwotfQotCi0uZnVuY3Rpb25fdHlwZSBhLAotLmZ1bmN0aW9uX3R5cGUgYTp2aXNpdGVkLAotLmZ1bmN0aW9uX3R5cGUgYTpob3ZlciwKLS5wcm9wZXJ0eV90eXBlIGEsCi0ucHJvcGVydHlfdHlwZSBhOnZpc2l0ZWQsCi0ucHJvcGVydHlfdHlwZSBhOmhvdmVyLAotLnNpZ25hbF90eXBlIGEsCi0uc2lnbmFsX3R5cGUgYTp2aXNpdGVkLAotLnNpZ25hbF90eXBlIGE6aG92ZXIsCi0uc2lnbmFsX2ZsYWdzIGEsCi0uc2lnbmFsX2ZsYWdzIGE6dmlzaXRlZCwKLS5zaWduYWxfZmxhZ3MgYTpob3ZlcgotewotIGNvbG9yOiAjNzI5ZmNmOwotfQotCi10ZCBwCi17Ci0gIG1hcmdpbjogMC4yNWVtOwotfQotCi1kaXYudGFibGUgdGFibGUKLXsKLSAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLSAgYm9yZGVyLXNwYWNpbmc6IDBweDsKLSAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KLSAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKLX0KLQotZGl2LnRhYmxlIHRhYmxlIHRkLCBkaXYudGFibGUgdGFibGUgdGgKLXsKLSAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KLSAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKLSAgcGFkZGluZzogM3B4OwotICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotfQotCi1kaXYudGFibGUgdGFibGUgdGgKLXsKLSAgLyogdGFuZ286YWx1bWluaXVtIDIgKi8KLSAgYmFja2dyb3VuZC1jb2xvcjogI2QzZDdjZjsKLX0KLQotaDQKLXsKLSAgY29sb3I6ICM1NTU3NTM7Ci0gIG1hcmdpbi10b3A6IDFlbTsKLSAgbWFyZ2luLWJvdHRvbTogMWVtOwotfQotCi1ocgotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMSAqLwotICBjb2xvcjogI2QzZDdjZjsKLSAgYmFja2dyb3VuZDogI2QzZDdjZjsKLSAgYm9yZGVyOiBub25lIDBweDsKLSAgaGVpZ2h0OiAxcHg7Ci0gIGNsZWFyOiBib3RoOwotICBtYXJnaW46IDIuMGVtIDBlbSAyLjBlbSAwZW07Ci19Ci0KLWRsLnRvYyBkdAotewotICBwYWRkaW5nLWJvdHRvbTogMC4yNWVtOwotfQotCi1kbC50b2MgPiBkdAotewotICBwYWRkaW5nLXRvcDogMC4yNWVtOwotICBwYWRkaW5nLWJvdHRvbTogMC4yNWVtOwotICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotZGwudG9jID4gZGwKLXsKLSAgcGFkZGluZy1ib3R0b206IDAuNWVtOwotfQotCi0ucGFyYW1ldGVyCi17Ci0gIGZvbnQtc3R5bGU6IG5vcm1hbDsKLX0KLQotLmZvb3RlcgotewotICBwYWRkaW5nLXRvcDogMy41ZW07Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCi0gIGNvbG9yOiAjYmFiZGI2OwotICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gIGZvbnQtc2l6ZTogODAlOwotfQotCi0uaW5mb3JtYWxmaWd1cmUsCi0uZmlndXJlCi17Ci0gIG1hcmdpbjogMWVtOwotfQotCi0uaW5mb3JtYWxleGFtcGxlLAotLmV4YW1wbGUKLXsKLSAgbWFyZ2luLXRvcDogMWVtOwotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLS53YXJuaW5nCi17Ci0gIC8qIHRhbmdvOm9yYW5nZSAwLzEgKi8KLSAgYmFja2dyb3VuZDogI2ZmZWVkOTsKLSAgYmFja2dyb3VuZDogcmdiYSgyNTIsIDE3NSwgNjIsIDAuMSk7Ci0gIGJvcmRlci1jb2xvcjogI2ZmYjA0ZjsKLSAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1MiwgMTc1LCA2MiwgMC4yKTsKLX0KLS5ub3RlCi17Ci0gIC8qIHRhbmdvOmNoYW1lbGVvbiAwLzAuNSAqLwotICBiYWNrZ3JvdW5kOiAjZDhmZmIyOwotICBiYWNrZ3JvdW5kOiByZ2JhKDEzOCwgMjI2LCA1MiwgMC4xKTsKLSAgYm9yZGVyLWNvbG9yOiAjYWJmNTYyOwotICBib3JkZXItY29sb3I6IHJnYmEoMTM4LCAyMjYsIDUyLCAwLjIpOwotfQotZGl2LmJsb2NrcXVvdGUKLXsKLSAgYm9yZGVyLWNvbG9yOiAjZWVlZWVjOwotfQotLm5vdGUsIC53YXJuaW5nLCBkaXYuYmxvY2txdW90ZQotewotICBwYWRkaW5nOiAwLjVlbTsKLSAgYm9yZGVyLXdpZHRoOiAxcHg7Ci0gIGJvcmRlci1zdHlsZTogc29saWQ7Ci0gIG1hcmdpbjogMmVtOwotfQotLm5vdGUgcCwgLndhcm5pbmcgcAotewotICBtYXJnaW46IDA7Ci19Ci0KLWRpdi53YXJuaW5nIGgzLnRpdGxlLAotZGl2Lm5vdGUgaDMudGl0bGUKLXsKLSAgZGlzcGxheTogbm9uZTsKLX0KLQotcCArIGRpdi5zZWN0aW9uCi17Ci0gIG1hcmdpbi10b3A6IDFlbTsKLX0KLQotZGl2LnJlZm5hbWVkaXYsCi1kaXYucmVmc3lub3BzaXNkaXYsCi1kaXYucmVmc2VjdDEsCi1kaXYucmVmc2VjdDIsCi1kaXYudG9jLAotZGl2LnNlY3Rpb24KLXsKLSAgbWFyZ2luLWJvdHRvbTogMWVtOwotfQotCi0vKiBibG9iIGxpbmtzICovCi1oMiAuZXh0cmFsaW5rcywgaDMgLmV4dHJhbGlua3MKLXsKLSAgZmxvYXQ6IHJpZ2h0OwotICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLwotICBjb2xvcjogI2JhYmRiNjsKLSAgZm9udC1zaXplOiA4MCU7Ci0gIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci19Ci0KLS5saW5lYXJ0Ci17Ci0gIGNvbG9yOiAjZDNkN2NmOwotICBmb250LXdlaWdodDogbm9ybWFsOwotfQotCi0uYW5ub3RhdGlvbgotewotICAvKiB0YW5nbzphbHVtaW5pdW0gNSAqLwotICBjb2xvcjogIzU1NTc1MzsKLSAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotLnN0cnVjdGZpZWxkCi17Ci0gIGZvbnQtc3R5bGU6IG5vcm1hbDsKLSAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotYWNyb255bSxhYmJyIAotewotICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkIGdyYXk7Ci19Ci0KLS8qIGNvZGUgbGlzdGluZ3MgKi8KLQotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLm5vcm1hbCwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5ub3JtYWwgYSwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5udW1iZXIsCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuY2JyYWNrZXQsCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuc3ltYm9sICAgICB7IGNvbG9yOiAjNTU1NzUzOyB9Ci0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuY29tbWVudCwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5saW5lbnVtICAgIHsgY29sb3I6ICNiYWJkYjY7IH0gLyogdGFuZ286IGFsdW1pbml1bSAzICovCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuZnVuY3Rpb24sCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuZnVuY3Rpb24gYSwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5wcmVwcm9jICAgIHsgY29sb3I6ICMyMDRhODc7IH0gLyogdGFuZ286IHNreSBibHVlIDMgICovCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAuc3RyaW5nICAgICB7IGNvbG9yOiAjYWQ3ZmE4OyB9IC8qIHRhbmdvOiBwbHVtICovCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAua2V5d29yZCwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC51c2VydHlwZSwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC50eXBlLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnR5cGUgYSAgICAgeyBjb2xvcjogIzRlOWEwNjsgfSAvKiB0YW5nbzogY2hhbWVsZW9uIDMgICovCi0KLS5saXN0aW5nX2ZyYW1lIHsKLSAgLyogdGFuZ286c2t5IGJsdWUgMSAqLwotICBib3JkZXI6IHNvbGlkIDFweCAjNzI5ZmNmOwotICBib3JkZXI6IHNvbGlkIDFweCByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMik7Ci0gIHBhZGRpbmc6IDBweDsKLX0KLQotLmxpc3RpbmdfbGluZXMsIC5saXN0aW5nX2NvZGUgewotICBtYXJnaW4tdG9wOiAwcHg7Ci0gIG1hcmdpbi1ib3R0b206IDBweDsKLSAgcGFkZGluZzogMC41ZW07Ci19Ci0ubGlzdGluZ19saW5lcyB7Ci0gIC8qIHRhbmdvOnNreSBibHVlIDAuNSAqLwotICBiYWNrZ3JvdW5kOiAjYTZjNWUzOwotICBiYWNrZ3JvdW5kOiByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMik7Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSA2ICovCi0gIGNvbG9yOiAjMmUzNDM2OwotfQotLmxpc3RpbmdfY29kZSB7Ci0gIC8qIHRhbmdvOnNreSBibHVlIDAgKi8KLSAgYmFja2dyb3VuZDogI2U2ZjNmZjsKLSAgYmFja2dyb3VuZDogcmdiYSgxMTQsIDE1OSwgMjA3LCAwLjEpOwotfQotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgewotICAvKiBvdmVycmlkZSBmcm9tIHByZXZpb3VzICovCi0gIGJvcmRlcjogbm9uZSAwcHg7Ci0gIHBhZGRpbmc6IDBweDsKLSAgYmFja2dyb3VuZDogbm9uZTsKLX0KLS5saXN0aW5nX2xpbmVzIHByZSwgLmxpc3RpbmdfY29kZSBwcmUgewotICBtYXJnaW46IDBweDsKLX0KLQotQG1lZGlhIHNjcmVlbiB7Ci0gIC8qIHRoZXNlIGhhdmUgYSA8c3VwPiBhcyBhIGZpcnN0IGNoaWxkLCBidXQgc2luY2UgdGhlcmUgYXJlIG5vIHBhcmVudCBzZWxlY3RvcnMKLSAgICogd2UgY2FuJ3QgdXNlIHRoYXQuICovCi0gIGEuZm9vdG5vdGUKLSAgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICB0b3A6IDBlbSAhIGltcG9ydGFudDsKLSAgfQotICAvKiB0aGlzIGlzIG5lZWRlZCBzbyB0aGF0IHRoZSBsb2NhbCBhbmNob3JzIGFyZSBkaXNwbGF5ZWQgYmVsb3cgdGhlIG5hdmlhZ3Rpb24gKi8KLSAgZGl2LmZvb3Rub3RlIGFbbmFtZV0sIGRpdi5yZWZuYW1lZGl2IGFbbmFtZV0sIGRpdi5yZWZzZWN0MSBhW25hbWVdLCBkaXYucmVmc2VjdDIgYVtuYW1lXSwgZGl2LmluZGV4IGFbbmFtZV0sIGRpdi5nbG9zc2FyeSBhW25hbWVdLCBkaXYuc2VjdDEgYVtuYW1lXQotICB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICB0b3A6LTVlbTsKLSAgfQotICAvKiB0aGlzIHNlZW1zIHRvIGJlIGEgYnVnIGluIHRoZSB4c2wgc3R5bGUgc2hlZXRzIHdoZW4gZ2VuZXJhdGluZyBpbmRleGVzICovCi0gIGRpdi5pbmRleCBkaXYuaW5kZXgKLSAgewotICAgIHRvcDogMGVtOwotICB9Ci0gIC8qIG1ha2Ugc3BhY2UgZm9yIHRoZSBmaXhlZCBuYXZpZ2F0aW9uIGJhciBhbmQgYWRkIHNwYWNlIGF0IHRoZSBib3R0b20gc28gdGhhdAotICAgKiBsaW5rIHRhcmdldHMgYXBwZWFyIHNvbWV3aGF0IGNsb3NlIHRvIHRvcAotICAgKi8KLSAgYm9keQotICB7Ci0gICAgcGFkZGluZy10b3A6IDIuNWVtOwotICAgIHBhZGRpbmctYm90dG9tOiA1MDBweDsKLSAgICBtYXgtd2lkdGg6IDYwZW07Ci0gIH0KLSAgcAotICB7Ci0gICAgbWF4LXdpZHRoOiA2MGVtOwotICB9Ci0gIC8qIHN0eWxlIGFuZCBzaXplIHRoZSBuYXZpZ2F0aW9uIGJhciAqLwotICB0YWJsZS5uYXZpZ2F0aW9uI3RvcAotICB7Ci0gICAgcG9zaXRpb246IGZpeGVkOwotICAgIGJhY2tncm91bmQ6ICNlMmUyZTI7Ci0gICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNiYWJkYjY7Ci0gICAgYm9yZGVyLXNwYWNpbmc6IDVweDsKLSAgICBtYXJnaW4tdG9wOiAwOwotICAgIG1hcmdpbi1ib3R0b206IDA7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgei1pbmRleDogMTA7Ci0gIH0KLSAgdGFibGUubmF2aWdhdGlvbiN0b3AgdGQKLSAgewotICAgIHBhZGRpbmctbGVmdDogNnB4OwotICAgIHBhZGRpbmctcmlnaHQ6IDZweDsKLSAgfQotICAubmF2aWdhdGlvbiBhLCAubmF2aWdhdGlvbiBhOnZpc2l0ZWQKLSAgewotICAgIC8qIHRhbmdvOnNreSBibHVlIDMgKi8KLSAgICBjb2xvcjogIzIwNGE4NzsKLSAgfQotICAubmF2aWdhdGlvbiBhOmhvdmVyCi0gIHsKLSAgICAvKiB0YW5nbzpza3kgYmx1ZSAyICovCi0gICAgY29sb3I6ICMzNDY1YTQ7Ci0gIH0KLSAgdGQuc2hvcnRjdXRzCi0gIHsKLSAgICAvKiB0YW5nbzpza3kgYmx1ZSAyICovCi0gICAgY29sb3I6ICMzNDY1YTQ7Ci0gICAgZm9udC1zaXplOiA4MCU7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgfQotICB0ZC5zaG9ydGN1dHMgLmRpbQotICB7Ci0gICAgY29sb3I6ICNiYWJkYjY7Ci0gIH0KLSAgLm5hdmlnYXRpb24gLnRpdGxlCi0gIHsKLSAgICBmb250LXNpemU6IDgwJTsKLSAgICBtYXgtd2lkdGg6IG5vbmU7Ci0gICAgbWFyZ2luOiAwcHg7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgfQotfQotQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkgewotICAvKiBzY3JlZW4gbGFyZ2VyIHRoYW4gNjBlbSAqLwotICBib2R5IHsgbWFyZ2luOiBhdXRvOyB9Ci19Ci1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2MGVtKSB7Ci0gIC8qIHNjcmVlbiBsZXNzIHRoYW4gNjBlbSAqLwotICAjbmF2X2hpZXJhcmNoeSB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9pbnRlcmZhY2VzIHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X3ByZXJlcXVpc2l0ZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfZGVyaXZlZF9pbnRlcmZhY2VzIHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X2ltcGxlbWVudGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9jaGlsZF9wcm9wZXJ0aWVzIHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X3N0eWxlX3Byb3BlcnRpZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfaW5kZXggeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfZ2xvc3NhcnkgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC5nYWxsZXJ5X2ltYWdlIHsgZGlzcGxheTogbm9uZTsgfQotICAucHJvcGVydHlfZmxhZ3MgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC5zaWduYWxfZmxhZ3MgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC5wYXJhbWV0ZXJfYW5ub3RhdGlvbnMgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC5lbnVtX21lbWJlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnN0cnVjdF9tZW1iZXJfYW5ub3RhdGlvbnMgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC51bmlvbl9tZW1iZXJfYW5ub3RhdGlvbnMgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC8qIG5vdyB0aGF0IGEgY29sdW1uIGlzIGhpZGRlbiwgb3B0aW1pemUgc3BhY2UgKi8KLSAgY29sLnBhcmFtZXRlcnNfbmFtZSB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5wYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIHsgd2lkdGg6IGF1dG87IH0KLSAgY29sLnN0cnVjdF9tZW1iZXJzX25hbWUgeyB3aWR0aDogYXV0bzsgfQotICBjb2wuc3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICBjb2wuZW51bV9tZW1iZXJzX25hbWUgeyB3aWR0aDogYXV0bzsgfQotICBjb2wuZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIHsgd2lkdGg6IGF1dG87IH0KLSAgY29sLnVuaW9uX21lbWJlcnNfbmFtZSB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC51bmlvbl9tZW1iZXJzX2Rlc2NyaXB0aW9uIHsgd2lkdGg6IGF1dG87IH0KLSAgLmxpc3RpbmdfbGluZXMgeyBkaXNwbGF5OiBub25lOyB9Ci19Ci1AbWVkaWEgcHJpbnQgewotICB0YWJsZS5uYXZpZ2F0aW9uIHsKLSAgICB2aXNpYmlsaXR5OiBjb2xsYXBzZTsKLSAgICBkaXNwbGF5OiBub25lOwotICB9Ci0gIGRpdi50aXRsZXBhZ2UgdGFibGUubmF2aWdhdGlvbiB7Ci0gICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKLSAgICBkaXNwbGF5OiB0YWJsZTsKLSAgICBiYWNrZ3JvdW5kOiAjZTJlMmUyOwotICAgIGJvcmRlcjogc29saWQgMXB4ICNiYWJkYjY7Ci0gICAgbWFyZ2luLXRvcDogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotICAgIHRvcDogMDsKLSAgICBsZWZ0OiAwOwotICAgIGhlaWdodDogM2VtOwotICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2RvY3MvbGlicy9odG1sL3VwLWluc2Vuc2l0aXZlLnBuZyBiL2RvY3MvbGlicy9odG1sL3VwLWluc2Vuc2l0aXZlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNlMWE0Zi4uMDAwMDAwMAotLS0gYS9kb2NzL2xpYnMvaHRtbC91cC1pbnNlbnNpdGl2ZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL2xpYnMvaHRtbC91cC5wbmcgYi9kb2NzL2xpYnMvaHRtbC91cC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTkwNTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9saWJzL2h0bWwvdXAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9saXN0LXVsaW5rLnhzbCBiL2RvY3MvbGlzdC11bGluay54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OWI1YjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9saXN0LXVsaW5rLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0nIHZlcnNpb249JzEuMCc+Ci0gIDx4c2w6b3V0cHV0IG1ldGhvZD0ndGV4dCcvPgotICA8eHNsOnRlbXBsYXRlIHhtbG5zOnhpPSdodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlJyBtYXRjaD0ndWxpbmsnPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSdAdXJsJy8+PHhzbDp0ZXh0PiYjeGE7PC94c2w6dGV4dD4KLSAgPC94c2w6dGVtcGxhdGU+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9J3RleHQoKXxAKicvPgotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL01ha2VmaWxlLmFtIGIvZG9jcy9tYW51YWwvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YjYwMzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jIyMgdGhpcyBpcyB0aGUgcGFydCB5b3UgY2FuIGN1c3RvbWl6ZSBpZiB5b3UgbmVlZCB0bwotCi0jIHBhcmFsbGVsIGJ1aWxkcyBkb24ndCB3b3JrLCBwcm9iYWJseSBkdWUgdG8gdGVtcG9yYXJ5IGZpbGVzCi1NQUtFRkxBR1MgPSAtajEKLQotIyBiYXNlIG5hbWUgb2YgZG9jCi1ET0MgPSBtYW51YWwKLSMgZm9ybWF0cyBkZWZpbmVkIGZvciB1cGxvYWQtZG9jLm1hawotRk9STUFUUz1odG1sIHBzIHBkZgotCi0jIG1haW4geG1sIGZpbGUKLU1BSU4gPSAkKERPQykueG1sCi0jIGFsbCB4bWwgc291cmNlcwotWE1MID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi54bWwpKQotIyBiYXNlIHN0eWxlIHNoZWV0Ci1DU1MgPSBiYXNlLmNzcwotCi0jIGltYWdlIHNvdXJjZXMKLVBOR19TUkMgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLnBuZykpCi1GSUdfU1JDID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi5maWcpKQotCi0jIGV4dHJhIHNvdXJjZXMgdG8gY29weSBpbiBidWlsZCBkaXJlY3RvcnkKLUVYVFJBX1NSQyA9IAotCi0jIyMgdGhpcyBpcyB0aGUgZ2VuZXJpYyBiaXQgYW5kIHlvdSBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgdGhpcwotCi0jIGdldCB0aGUgZ2VuZXJpYyBkb2NidWlsZGluZyBNYWtlZmlsZSBzdHVmZgotaW5jbHVkZSAkKHNyY2RpcikvLi4vbWFudWFscy5tYWsKLSMgZ2V0IHRoZSBnZW5lcmljIHVwbG9hZCB0YXJnZXQKLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKLQotIyMjIHRoaXMgaXMgc3RhbmRhcmQgYXV0b21ha2Ugc3R1ZmYKLQotIyBwYWNrYWdlIHVwIGFsbCB0aGUgc291cmNlCi1FWFRSQV9ESVNUID0gJChTUkMpIFJFQURNRQotCi0jIGluc3RhbGwgZG9jdW1lbnRhdGlvbgotbWFudWFsZGlyID0gJChkb2NkaXIpLyQoRE9DKQotbWFudWFsX0RBVEEgPSAkKFBERl9EQVQpICQoUFNfREFUKQotCi1pbmNsdWRlICQoc3JjZGlyKS8uLi9odG1saW5zdGFsbC5tYWsKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL01ha2VmaWxlLmluIGIvZG9jcy9tYW51YWwvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMmJhMTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5OTEgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLSMjIyB0aGlzIGlzIHRoZSBwYXJ0IHlvdSBjYW4gY3VzdG9taXplIGlmIHlvdSBuZWVkIHRvCi0KLSMjIyBUaGVzZSBhcmUgYWxsIGdlbmVyaWM7IHdlIHNldCBhbGwgdGhlIHZhcmlhYmxlcyB3ZSBuZWVkCi0KLSMgdGhpcyBzbmlwcGV0IGlzIHRvIGJlIGluY2x1ZGVkIGJ5IGJvdGggb3VyIGRvY2Jvb2sgbWFudWFscwotIyBhbmQgZ3RrLWRvYyBBUEkgcmVmZXJlbmNlcwotCi0jIGl0IGFkZHMgYW4gdXBsb2FkIHRhcmdldCB0byBlYWNoIG9mIHRoZXNlIGRpcidzIE1ha2VmaWxlcwotCi0jIGVhY2ggTWFrZWZpbGUuYW0gc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKLSMgLSBET0M6IHRoZSBiYXNlIG5hbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KLSMgICAgICAgIChmYXEsIG1hbnVhbCwgcHdnLCBnc3RyZWFtZXIsIGdzdHJlYW1lci1saWJzKQotIyAtIEZPUk1BVFM6IHRoZSBmb3JtYXRzIGluIHdoaWNoIERPQyBpcyBvdXRwdXQKLSMgICAgICAgICAgICAoaHRtbCBwcyBwZGYpCi0KLSMgaWYgeW91IHdhbnQgdG8gdXNlIGl0LCBtYWtlIHN1cmUgeW91ciAkSE9NRS8uc3NoL2NvbmZpZyBmaWxlIGNvbnRhaW5zIHRoZQotIyBjb3JyZWN0IFVzZXIgZW50cnkgZm9yIHRoZSBIb3N0IGVudHJ5IGZvciB0aGUgRE9DX1NFUlZFUgotCi0jIHRoaXMgZmlsZSBhZGRzIHJ1bGVzIGZvciBpbnN0YWxsaW5nIGh0bWwgc3VidHJlZXMKLSMgSSByZWFsbHkgZG9uJ3QgbGlrZSB0aGlzIGhhY2ssIGJ1dCBhdXRvbWFrZSBkb2Vzbid0IHNlZW0gdG8gd2FudCB0bwotIyBpbnN0YWxsIGRpcmVjdG9yeSB0cmVlcyA6KAotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBkb2NzL21hbnVhbAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobWFudWFsZGlyKSIKLURBVEEgPSAkKG1hbnVhbF9EQVRBKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS8uLi9odG1saW5zdGFsbC5tYWsgXAotCSQoc3JjZGlyKS8uLi9tYW51YWxzLm1hayAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAotCSQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrIFJFQURNRQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi0KLSMgcGFyYWxsZWwgYnVpbGRzIGRvbid0IHdvcmssIHByb2JhYmx5IGR1ZSB0byB0ZW1wb3JhcnkgZmlsZXMKLU1BS0VGTEFHUyA9IC1qMQotCi0jIGJhc2UgbmFtZSBvZiBkb2MKLURPQyA9IG1hbnVhbAotIyBmb3JtYXRzIGRlZmluZWQgZm9yIHVwbG9hZC1kb2MubWFrCi1GT1JNQVRTID0gaHRtbCBwcyBwZGYKLQotIyBtYWluIHhtbCBmaWxlCi1NQUlOID0gJChET0MpLnhtbAotIyBhbGwgeG1sIHNvdXJjZXMKLVhNTCA9ICQobm90ZGlyICQod2lsZGNhcmQgJChzcmNkaXIpLyoueG1sKSkKLSMgYmFzZSBzdHlsZSBzaGVldAotQ1NTID0gYmFzZS5jc3MKLQotIyBpbWFnZSBzb3VyY2VzCi1QTkdfU1JDID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi5wbmcpKQotRklHX1NSQyA9ICQobm90ZGlyICQod2lsZGNhcmQgJChzcmNkaXIpLyouZmlnKSkKLQotIyBleHRyYSBzb3VyY2VzIHRvIGNvcHkgaW4gYnVpbGQgZGlyZWN0b3J5Ci1FWFRSQV9TUkMgPSAKLQotIyBpbnRlcm1lZGlhcnkgYnVpbGQgcGF0aAotQlVJTERESVIgPSBidWlsZAotIyBzYW1lIGZvciBpbWFnZXMKLUJVSUxESU1BR0VTRElSID0gJChCVUlMRERJUikvaW1hZ2VzCi0KLSMgaW1hZ2VzCi0jIHJpZ2h0IG5vdywgd2Ugb25seSBhbGxvdyAucG5nIGFuZCAuZmlnIGFzIHNvdXJjZQotIyB3ZSBtaWdodCBhZGQgbW9yZSBsYXRlciBpZiB3ZSBmZWVsIHRoZSBuZWVkCi0KLSMgUE5HJ3MgY2FuIGJlIHNvdXJjZSBvciBidWlsdCBmcm9tIC5maWcKLVBORyA9ICQoc3RyaXAgJChQTkdfU1JDKSAkKEZJR19TUkM6LmZpZz0ucG5nKSkKLSMgRVBTIC5wcyBmaWxlcyBjYW4gYmUgYnVpbHQgZnJvbSAucG5nIG9yIC5maWcKLUVQUyA9ICQoc3RyaXAgJChGSUdfU1JDOi5maWc9LnBzKSAkKFBOR19TUkM6LnBuZz0ucHMpKQotIyBQREYgLnBkZiBmaWxlcyBjYW4gYmUgYnVpbHQgZnJvbSAucG5nIG9yIC5maWcKLVBERiA9ICQoc3RyaXAgJChGSUdfU1JDOi5maWc9LnBkZikgJChQTkdfU1JDOi5wbmc9LnBkZikpCi0KLSMgd2hlcmUgd2UgZXhwZWN0IHRvIGZpbmQgaW1hZ2VzIGR1cmluZyBidWlsZGluZywgd2hldGhlciBieSBjb3B5aW5nCi0jIG9yIGJ5IGdlbmVyYXRpbmcgdGhlbQotUE5HX0JVSUxUID0gJChmb3JlYWNoIGZpbGUsICQoUE5HKSwgJChCVUlMRElNQUdFU0RJUikvJChmaWxlKSkKLUVQU19CVUlMVCA9ICQoZm9yZWFjaCBmaWxlLCAkKEVQUyksICQoQlVJTERJTUFHRVNESVIpLyQoZmlsZSkpCi1QREZfQlVJTFQgPSAkKGZvcmVhY2ggZmlsZSwgJChQREYpLCAkKEJVSUxESU1BR0VTRElSKS8kKGZpbGUpKQotU1JDID0gJChYTUwpICQoUE5HX1NSQykgJChGSUdfU1JDKSAkKENTUykgJChFWFRSQV9TUkMpCi0KLSMgZ2VuZXJhdGUgQTQgZG9jcwotUEFQRVJfTE9DQUxFID0gbmxfTkwKLUBET0NfSFRNTF9GQUxTRUBIVE1MX0RBVCA9IAotCi0jIGNhbiB3ZSBnZW5lcmF0ZSBIVE1MID8KLUBET0NfSFRNTF9UUlVFQEhUTUxfREFUID0gaHRtbAotQERPQ19IVE1MX0ZBTFNFQEhUTUxfVEFSR0VUID0gCi1ARE9DX0hUTUxfVFJVRUBIVE1MX1RBUkdFVCA9IGh0bWwvaW5kZXguaHRtbAotQERPQ19QU19GQUxTRUBQU19EQVQgPSAKLQotIyBjYW4gd2UgZ2VuZXJhdGUgUFMgPwotQERPQ19QU19UUlVFQFBTX0RBVCA9ICQoRE9DKS5wcwotQERPQ19QREZfRkFMU0VAUERGX0RBVCA9IAotCi0jIGNhbiB3ZSBnZW5lcmF0ZSBQREYgPwotQERPQ19QREZfVFJVRUBQREZfREFUID0gJChET0MpLnBkZgotCi0jIHRoZXNlIHZhcmlhYmxlcyBkZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBvbmxpbmUgZG9jcwotRE9DX1NFUlZFUiA9IGdzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcKLURPQ19CQVNFID0gL3Nydi9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3d3dy9kYXRhL2RvYwotRE9DX1VSTCA9ICQoRE9DX1NFUlZFUik6JChET0NfQkFTRSkKLQotIyMjIHRoaXMgaXMgdGhlIGdlbmVyaWMgYml0IGFuZCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIHRoaXMKLQotIyBnZXQgdGhlIGdlbmVyaWMgZG9jYnVpbGRpbmcgTWFrZWZpbGUgc3R1ZmYKLSMgZ2V0IHRoZSBnZW5lcmljIHVwbG9hZCB0YXJnZXQKLQotIyMjIHRoaXMgaXMgc3RhbmRhcmQgYXV0b21ha2Ugc3R1ZmYKLQotIyBwYWNrYWdlIHVwIGFsbCB0aGUgc291cmNlCi1FWFRSQV9ESVNUID0gJChTUkMpIFJFQURNRQotCi0jIGluc3RhbGwgZG9jdW1lbnRhdGlvbgotbWFudWFsZGlyID0gJChkb2NkaXIpLyQoRE9DKQotbWFudWFsX0RBVEEgPSAkKFBERl9EQVQpICQoUFNfREFUKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvLi4vbWFudWFscy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL21hbnVhbC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL21hbnVhbC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHNyY2RpcikvLi4vbWFudWFscy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hayAkKGFtX19lbXB0eSk6Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLWluc3RhbGwtbWFudWFsREFUQTogJChtYW51YWxfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChtYW51YWxfREFUQSknOyB0ZXN0IC1uICIkKG1hbnVhbGRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobWFudWFsZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW51YWxkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG1hbnVhbGRpciknIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKG1hbnVhbGRpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtbWFudWFsREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKG1hbnVhbF9EQVRBKSc7IHRlc3QgLW4gIiQobWFudWFsZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQobWFudWFsZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLXRhZ3MgVEFHUzoKLQotY3RhZ3MgQ1RBR1M6Ci0KLWNzY29wZSBjc2NvcGVsaXN0OgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWxvY2FsCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChEQVRBKSBhbGwtbG9jYWwKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKG1hbnVhbGRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLW1hbnVhbERBVEEKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGYtYW06Ci0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1sb2NhbCB1bmluc3RhbGwtbWFudWFsREFUQQotCi0uTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2hlY2stbG9jYWwgY2xlYW4gXAotCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBjc2NvcGVsaXN0LWFtIGN0YWdzLWFtIFwKLQlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAotCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1tYW51YWxEQVRBIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgXAotCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKLQlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAotCXBzIHBzLWFtIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbG9jYWwgXAotCXVuaW5zdGFsbC1tYW51YWxEQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIyMgZ2VuZXJhdGUgYWxsIGRvY3VtZW50YXRpb24gYnkgZGVmYXVsdAotIyBob29rIGluIGh0bWwgZ2VuZXJhdGlvbgotYWxsLWxvY2FsOiBodG1sCi1odG1sOiAkKEhUTUxfVEFSR0VUKQotcHM6ICQoUFNfREFUKQotcGRmOiAkKFBERl9EQVQpCi0KLWRlYnVnOgotCUBlY2hvICJvdXRwdXR0aW5nIHNvbWUgdXNlZnVsIGRlYnVnIGluZm9ybWF0aW9uIgotCUBlY2hvICJTb3VyY2UgWE1MOiIKLQlAZWNobyAiWE1MOiAnJChYTUwpJyIKLQlAZWNobyAiQ1NTOiAnJChDU1MpJyIKLQlAZWNobyAiU291cmNlIGltYWdlIGZpbGVzOiIKLQlAZWNobyAiUE5HX1NSQzogJyQoUE5HX1NSQyknIgotCUBlY2hvICJGSUdfU1JDOiAnJChGSUdfU1JDKSciCi0JQGVjaG8gIkFsbCB1c2VkIGltYWdlIGZpbGVzOiIKLQlAZWNobyAiUE5HOiAnJChQTkcpJyIKLQlAZWNobyAiRVBTOiAnJChFUFMpJyIKLQlAZWNobyAiUERGOiAnJChQREYpJyIKLQlAZWNobyAiQWxsIHVzZWQgaW1hZ2UgZmlsZXMgaW4gdGhlaXIgYnVpbHQgcGF0aDoiCi0JQGVjaG8gIlBOR19CVUlMVDogJyQoUE5HX0JVSUxUKSciCi0JQGVjaG8gIkVQU19CVUlMVDogJyQoRVBTX0JVSUxUKSciCi0JQGVjaG8gIlBERl9CVUlMVDogJyQoUERGX0JVSUxUKSciCi0JQGVjaG8gIkVuZCByZXN1bHQgcHJvZHVjdHM6IgotCUBlY2hvICJIVE1MX0RBVDogJyQoSFRNTF9EQVQpJyIKLQlAZWNobyAiUFNfREFUOiAgICckKFBTX0RBVCknIgotCUBlY2hvICJQREZfREFUOiAgJyQoUERGX0RBVCknIgotCi0jIGEgcnVsZSB0byBjb3B5IGFsbCBvZiB0aGUgc291cmNlIGZvciBkb2NzIGludG8gJChidWlsZGRpcikvYnVpbGQKLSQoQlVJTERESVIpLyQoTUFJTik6ICQoWE1MKSAkKENTUykgJChFWFRSQV9TUkMpCi0JQC1ta2RpciAtcCAkKEJVSUxERElSKTsgXAotCWlmIHRlc3QgIngkKEVYVFJBX1NSQykiICE9ICJ4IjsgdGhlbiBmb3IgYSBpbiAkKEVYVFJBX1NSQyk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmU7IGZpIDsgXAotCWZvciBhIGluICQoWE1MKTsgZG8gY3AgJChzcmNkaXIpLyQkYSAkKEJVSUxERElSKTsgZG9uZSA7IFwKLQlmb3IgYSBpbiAkKENTUyk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmUgOyBcCi0JY3AgLi4vdmVyc2lvbi5lbnRpdGllcyAkKEJVSUxERElSKSA7IFwKLQljcCAkKHRvcF9zcmNkaXIpL2RvY3MvdXJsLmVudGl0aWVzICQoQlVJTERESVIpCi0KLWh0bWwvaW5kZXguaHRtbDogJChCVUlMRERJUikvJChNQUlOKSAkKFBOR19CVUlMVCkgJChGSUdfU1JDKQotCUAkKE1BS0UpIGNoZWNrLWxvY2FsCi0JQGVjaG8gIioqKiBHZW5lcmF0aW5nIEhUTUwgb3V0cHV0ICoqKiIKLQlALW1rZGlyIC1wIGh0bWwKLQlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBuZyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcwotCUBjZCAkKEJVSUxERElSKSAmJiAkKFhTTFRQUk9DKSAtbyAuLi9odG1sLyAtLXN0cmluZ3BhcmFtIGNodW5rZXIub3V0cHV0LmVuY29kaW5nIFVURi04IC0tc3RyaW5ncGFyYW0gIHVzZS5pZC5hcy5maWxlbmFtZSAxICQoWFNMVFBST0NfRkxBR1MpICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC9odG1sL2NodW5rLnhzbCIgJChNQUlOKQotCUB0ZXN0ICJ4JChDU1MpIiAhPSAieCIgJiYgXAotICAgICAgICAgIGVjaG8gIkNvcHlpbmcgLmNzcyBmaWxlczogJChDU1MpIiAmJiBcCi0gICAgICAgICAgY3AgJChzcmNkaXIpLyQoQ1NTKSBodG1sCi0JQHRlc3QgIngkKFBORykiICE9ICJ4IiAmJiBcCi0gICAgICAgICAgZWNobyAiQ29weWluZyAucG5nIGltYWdlczogJChQTkdfQlVJTFQpIiAmJiBcCi0JICBta2RpciAtcCBodG1sL2ltYWdlcyAmJiBcCi0gICAgICAgICAgY3AgJChQTkdfQlVJTFQpIGh0bWwvaW1hZ2VzIHx8IHRydWUKLQotJChET0MpLnBzOiAkKEJVSUxERElSKS8kKE1BSU4pICQoRVBTX0JVSUxUKSAkKFBOR19TUkMpICQoRklHX1NSQykKLQlAJChNQUtFKSBjaGVjay1sb2NhbAotCUBlY2hvICIqKiogR2VuZXJhdGluZyBQUyBvdXRwdXQgKioqIgotCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtZXBzICQoQlVJTERESVIpL2ltYWdlLmVudGl0aWVzCi0JY2QgJChCVUlMRERJUikgJiYgU1BfRU5DT0RJTkc9IlVURi04IiBkb2Nib29rMnBzIC1vIC4uICQoTUFJTikKLSMJZXhwb3J0IExDX1BBUEVSPSQoUEFQRVJfTE9DQUxFKSAmJiBjZCAkKEJVSUxERElSKSAmJiB4bWx0byBwcyAtbyAuLiAkKE1BSU4pCi0KLSQoRE9DKS5wZGY6ICQoRE9DKS5wcwotCUAkKE1BS0UpIGNoZWNrLWxvY2FsCi0JQGVjaG8gIioqKiBHZW5lcmF0aW5nIFBERiBvdXRwdXQgKioqIgotCUBwczJwZGYgJChET0MpLnBzCi0KLSMkKERPQykucGRmOiAkKE1BSU4pICQoUERGKSAkKEZJR19TUkMpCi0jCUBlY2hvICIqKiogR2VuZXJhdGluZyBQREYgb3V0cHV0ICoqKiIKLSMJQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1wZGYgaW1hZ2UuZW50aXRpZXMKLSMJQGV4cG9ydCBMQ19QQVBFUj0kKFBBUEVSX0xPQ0FMRSkgJiYgeG1sdG8gcGRmICQoTUFJTikKLSMJQHJtIGltYWdlLmVudGl0aWVzCi0KLWNsZWFuLWxvY2FsOgotCS0kKFJNKSAtciAkKEJVSUxERElSKQotCS0kKFJNKSAtciBodG1sCi0JLSQoUk0pICQoRE9DKS5wcwotCS0kKFJNKSAkKERPQykucGRmCi0JLSQoUk0pIC1yIHd3dwotCi0jIyMgaW1hZ2UgZ2VuZXJhdGlvbgotCi0jIGNvcHkgcG5nIGZyb20gc291cmNlIGRpciBwbmcKLSQoQlVJTERJTUFHRVNESVIpLyUucG5nOiAkKHNyY2RpcikvJS5wbmcKLQlAZWNobyAiQ29weWluZyAkPCB0byAkQCIKLQlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKLQlAY3AgJDwgJEAKLSMgbWFrZSBwbmcgZnJvbSBmaWcKLSQoQlVJTERJTUFHRVNESVIpLyUucG5nOiAlLmZpZwotCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGZpZzJkZXYgLUxwbmcgJDwgJEAKLQotIyBtYWtlIHBzKEVQUykgZnJvbSBmaWcKLSQoQlVJTERJTUFHRVNESVIpLyUucHM6ICUuZmlnCi0JQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKLQlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKLQlAZmlnMmRldiAtTGVwcyAkPCAkQAotCi0jIG1ha2UgcGRmIGZyb20gZmlnCi0kKEJVSUxESU1BR0VTRElSKS8lLnBkZjogJS5maWcKLQlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgotCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQotCUBmaWcyZGV2IC1McGRmICQ8ICRACi0KLSMgbWFrZSBwZGYgZnJvbSBwbmcKLSQoQlVJTERJTUFHRVNESVIpLyUucGRmOiAlLnBuZwotCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGNhdCAkPCB8IHBuZ3RvcG5tIHwgcG5tdG9wcyAtbm90dXJuIDI+IC9kZXYvbnVsbCB8IGVwc3RvcGRmIC0tZmlsdGVyIC0tb3V0ZmlsZSAkQCAyPiAvZGV2L251bGwKLQotIyBtYWtlIHBzKEVQUykgZnJvbSBwbmcKLSQoQlVJTERJTUFHRVNESVIpLyUucHM6ICUucG5nCi0JQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKLQlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKLQlAY2F0ICQ8IHwgcG5ndG9wbm0gfCBwbm10b3BzIC1ub3R1cm4gPiAkQCAyPiAvZGV2L251bGwKLQotIyBtYWtlIHN1cmUgeG1sIHZhbGlkYXRlcyBwcm9wZXJseQotY2hlY2stbG9jYWw6ICQoQlVJTERESVIpLyQoTUFJTikKLQlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBuZyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcwotCUBjZCAkKEJVSUxERElSKSAmJiB4bWxsaW50IC1ub291dCAtdmFsaWQgJChNQUlOKQotCUBjZCAkKEJVSUxERElSKSAmJiBcCi0JaWYgWyBgd2hpY2ggY3VybGAgXTsgdGhlbiBcCi0gICAgbGlua3M9YCQoWFNMVFBST0MpICQoWFNMVFBST0NfRkxBR1MpIC0teGluY2x1ZGUgJChhYnNfdG9wX3NyY2RpcikvZG9jcy9saXN0LXVsaW5rLnhzbCAkKE1BSU4pIHwgZWdyZXAgJ15odHRwJyB8IHNvcnQgfCB1bmlxYCAmJiBcCi0gICAgaGF2ZV9lcnJvcj0wICYmIFwKLSAgICBmb3IgbGluayBpbiAkJGxpbmtzOyBkbyBcCi0gICAgICBjb2RlPWBjdXJsIC1zIC1tMjAgLW8gL2Rldi9udWxsIC1JIC13ICIle2h0dHBfY29kZX0iICQkbGlua2A7IFwKLSAgICAgIGlmIFsgXCggJCQ/IC1uZSAwIFwpIC1vIFwoICQkY29kZSAtZ3QgMzk5IFwpIF07IHRoZW4gXAotICAgICAgICBlY2hvICJleGl0X3N0YXR1cz0kJD8sIGh0dHBfY29kZT0kJGNvZGU6ICQkbGluayI7IFwKLSAgICAgICAgZ3JlcCAtSG5yICIkJGxpbmsiIC47IFwKLSAgICAgICAgaGF2ZV9lcnJvcj0xOyBcCi0gICAgICBmaTsgXAotICAgIGRvbmUgXAotICBmaQotCi0jIGF2b2lkICdjcDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUgYGJ1aWxkL2ltYWdlLmVudGl0aWVzJzogRmlsZSBleGlzdHMnCi0jIGVycm9ycyBkdXJpbmcgJ21ha2UgZGlzdGNoZWNrJyBieSBkaXNhYmxpbmcgcGFyYWxsZWwgYnVpbGRzCi0uTk9UUEFSQUxMRUw6Ci0KLXVwbG9hZDogJChGT1JNQVRTKQotCUBpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIGh0bWwgPiAvZGV2L251bGw7IHRoZW4gXAotCSAgZWNobyAiUHJlcGFyaW5nIGRvY3MgZm9yIHVwbG9hZCAocmViYXNpbmcgY3Jvc3MtcmVmZXJlbmNlcykgLi4uIiA7IFwKLQkgIGlmIHRlc3QgeCQoYnVpbGRkaXIpICE9IHgkKHNyY2Rpcik7IHRoZW4gXAotCSAgICBlY2hvICJtYWtlIHVwbG9hZCBjYW4gb25seSBiZSB1c2VkIGlmIHNyY2RpciA9PSBidWlsZGRpciI7IFwKLQkgICAgZXhpdCAxOyBcCi0JICBmaTsgXAotCSAgIyBndGtkb2MtcmViYXNlIHNvbWV0aW1lcyBnZXRzIGNvbmZ1c2VkLCBzbyByZXNldCBldmVyeXRoaW5nIHRvIFwKLQkgICMgbG9jYWwgbGlua3MgYmVmb3JlIHJlYmFzaW5nIHRvIG9ubGluZSBsaW5rcyAgICAgICAgICAgICAgICAgICBcCi0JICBndGtkb2MtcmViYXNlIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbCAyPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IFwKLQkgIHJlYmFzZT1gZ3RrZG9jLXJlYmFzZSAtLXZlcmJvc2UgLS1vbmxpbmUgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sYCA7IFwKLQkgIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWUgIk9uLSpsaW5lIjsgXAotCSAgZm9yIHJlcSBpbiBnbGliIGdvYmplY3QgZ3N0cmVhbWVyIGdzdHJlYW1lci1saWJzIGdzdC1wbHVnaW5zLWJhc2UtbGliczsgZG8gXAotCSAgICBpZiAhICggZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtaSAtZSAiT24tKmxpbmUuKi8kJHJlcS8iICk7IHRoZW4gXAotCSAgICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDsgXAotCSAgICAgIGVjaG8gIiBDb3VsZCBub3QgZGV0ZXJtaW5lIG9ubGluZSBsb2NhdGlvbiBmb3IgJCRyZXEgZG9jcy4gQ3Jvc3MtcmVmZXJlbmNpbmcgd2lsbCBiZSAiIDsgXAotCSAgICAgIGVjaG8gIiBicm9rZW4sIHNvIG5vdCB1cGxvYWRpbmcuIE1ha2Ugc3VyZSB0aGUgbGlicmFyeSdzIGd0ay1kb2MgZG9jdW1lbnRhdGlvbiBpcyAgICAiIDsgXAotCSAgICAgIGVjaG8gIiBpbnN0YWxsZWQgc29tZXdoZXJlIGluIC91c3Ivc2hhcmUvZ3RrLWRvYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDsgXAotCSAgICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDsgXAotCSAgICAgIGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgZG9uZTsgXAotCSAgZXhwb3J0IFNSQz0iJCRTUkMgaHRtbCI7IFwKLQlmaTsgXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcHMgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBzIjsgZmk7IFwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBkZiA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucGRmIjsgZmk7IFwKLQlcCi0JIyB1cGxvYWQgcmVsZWFzZXMgdG8gYm90aCBYLlkvIGFuZCBoZWFkLyBzdWJkaXJlY3RvcmllcyBcCi0JZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvJChQQUNLQUdFX1ZFUlNJT05fTUFKT1IpLiQoUEFDS0FHRV9WRVJTSU9OX01JTk9SKS8kKERPQyk7IFwKLQllY2hvIFVwbG9hZGluZyAkJFNSQyB0byAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKLQlyc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBjaG1vZCAtUiBnK3cgJCRESVI7IFwKLQlcCi0JZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvaGVhZC8kKERPQyk7IFwKLQllY2hvIFVwbG9hZGluZyAkJFNSQyB0byAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKLQlyc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBjaG1vZCAtUiBnK3cgJCRESVI7IFwKLQlcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKLQkgIGVjaG8gIlVuLXByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCi0JICBndGtkb2MtcmViYXNlIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbCA7IFwKLQlmaTsgXAotCWVjaG8gRG9uZQotCi1ARE9DX0hUTUxfVFJVRUBpbnN0YWxsLWRhdGEtbG9jYWw6IGh0bWwKLUBET0NfSFRNTF9UUlVFQAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGRvY2RpcikvJChET0MpCi1ARE9DX0hUTUxfVFJVRUAJY3AgLXByICQoSFRNTF9EQVQpICQoREVTVERJUikkKGRvY2RpcikvJChET0MpCi0KLUBET0NfSFRNTF9UUlVFQHVuaW5zdGFsbC1sb2NhbDoKLUBET0NfSFRNTF9UUlVFQAlmb3IgcGFydCBpbiAkKEhUTUxfREFUKTsgZG8gcm0gLXJmICQoREVTVERJUikkKGRvY2RpcikvJChET0MpLyQkcGFydDsgZG9uZQotQERPQ19IVE1MX0ZBTFNFQGluc3RhbGwtZGF0YS1sb2NhbDoKLUBET0NfSFRNTF9GQUxTRUB1bmluc3RhbGwtbG9jYWw6Ci0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL1JFQURNRSBiL2RvY3MvbWFudWFsL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJjNGVhNi4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi1DdXJyZW50IHJlcXVpcmVtZW50cyBmb3IgYnVpbGRpbmcgdGhlIGRvY3MgOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbGlieHNsdCA+PSAxLjAuNgotbGlieG1sMiA+PSAyLjQuMTIKLQotCi1UaGVzZSBhcmUgbm90IGluY2x1ZGVkIHdpdGggUkg3Mi4gIFRoZXkgYXJlIGluIGRlYmlhbi4gIEdERSBoYXMgZ29vZCBycG1zLgotCi1UbyBidWlsZCBwZGYncyBmcm9tIHhzbHQgc3R1ZmYsIHlvdSBuZWVkIHhtbHRleCBhbmQgKG9uIHJlZGhhdCkgCi1wYXNzaXZldGV4LiAgVGhleSBhcmUgbm90IGtub3duIHRvIGhhdmUgYmVlbiBidWlsdCBvbiBlaXRoZXIgcmVkaGF0IG9yIAotZGViaWFuIHlldCB0aG91Z2guCi0KLVdpbmdvJ3MgbmV3IGNvbW1lbnRzIG9uIHRoZSBkb2MgYnVpbGRpbmcgOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIFdlbGwgaGUgc2hvdWxkIGFkZCB0aGVtIHNvb24gaGVyZSBzaW5jZSBoZSBvdmVyaGF1bGVkIGl0LiBBbmQgZGlkIGEgZ29vZCAKLSAgam9iIG9uIGl0IHRvbyA7KQotCi1UaG9tYXMncyBuZXcgY29tbWVudHMgb24gdGhlIGRvYyBidWlsZGluZyA6Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIG9yaWdpbmFsbHkgdGhlIG1hbnVhbCB3YXMgd3JpdHRlbiB3aXRoIERvY0Jvb2sgMy4wIGluIG1pbmQsIHdoaWNoIAotICBzdXBwb3J0ZWQgdGhlIGdyYXBoaWMgdGFnLiAgVGhhdCBpcyBub3cgZGVwcmVjYXRlZCwgc28gSSBjaGFuZ2VkIGl0IHRvIAotICB0aGUgbmV3IG1lZGlhb2JqZWN0IHRhZyBzZXQuCi0KLSogZXBzIGZpbGVzIGluIGltYWdlcy8gc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBtYWtlZmlsZS4gIFlvdSBuZWVkIHRvIAotICBoYXZlIGZpZzJkZXYgaW5zdGFsbGVkIGZvciB0aGF0LgotCi1FbnNvbmljJ3MgY29tbWVudHMgb24gdGhlIGRvYyBidWlsZCBzeXN0ZW0gOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUluIGNhc2UgeW91IGxpa2UgdG8gc2hhcmUgZmlsZXMgYmV0d2VlbiB0aGUgbWFudWFsIGFuZCB0aGUgcHdnIC0gaXQncwotbm90IHRyaXZpYWwuCi1CZWZvcmUgYW55dGhpbmcgaXMgZG9uZSwgdGhlIGJ1aWxkLXN5c3RlbSBjb3BpZXMgYWxsIHhtbCBmaWxlcyBpbnRvIHRoZSBidWlsZAotc3ViZGlyIGFuZCB0aGlzIGJyZWFrcyBpbmNsdWRpbmcgc2hhcmVkIGRvY3MgdmlhIGVudGl0aWVzLgotCi1UaGUgZXhhbXBsZXMgc2hvdWxkIGJlIHVwZGF0ZWQgaW4gdGhlIHhtbC4gV2UgcnVuIGEgcGVybHNjcmlwdCBpbgotdGVzdHMvZXhhbXBsZXMvbWFudWFsIHRoYXQgZXh0cmFjdHMgdGhlbS4KLQotV3RheSdzIG9yaWdpbmFsIGNvbW1lbnRzIDoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZvciBub3cgdXNlOgotCi0gIGRiMmh0bWwgZ3N0cmVhbWVyLW1hbnVhbCAKLQotKE9uIGRlYmlhbiwgZGIyaHRtbCBpcyBpbiB0aGUgY3lnbnVzLXN0eWxlc2hlZXRzIHBhY2thZ2UpCi0KLVlvdSB3aWxsIG5lZWQgdGhlIHBuZyBzdXBwb3J0IGZvciBkb2Nib29rIChzZWUgR05PTUUgZG9jdW1lbnRhdGlvbiBwcm9qZWN0KQotCi1jb252ZXJ0IHRoZSBmaWcgaW1hZ2VzIHRvIHBuZyB3aXRoOgotCi0gIGZpZzJkZXYgLUwgcG5nIC1zIDE2IGZpZy88aW5wdXQgZmlsZT4uZmlnIGltYWdlcy88aW5wdXQgZmlsZT4ucG5nCi0KLVB1dCBhIGxpbmsgaW4gdGhlIGdzdHJlYW1lci1tYW51YWwgZGlyZWN0b3J5IHdpdGgKLQotICBsbiAtcyAuLi9pbWFnZXMgZ3N0cmVhbWVyLW1hbnVhbC9pbWFnZXMKLQotcG9pbnQgeW91ciBicm93c2VyIHRvIGdzdHJlYW1lci1tYW51YWwvZ3N0cmVhbWVyLmh0bWwKLQotRml4IHR5cGluZyBlcnJvcnMgYW5kIGNvcnJlY3QgYmFkIGVuZ2xpc2guCi1MZXQgbWUga25vdyBhYm91dCB0aGUgc3R1ZmYgdGhhdCBuZWVkcyBzb21lIG1vcmUgZXhwbGFuYXRpb24uCi1MZXQgbWUga25vdyBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWwgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjdhMGUwLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYXV0b3BsdWdnaW5nIj4KLSAgPHRpdGxlPkF1dG9wbHVnZ2luZzwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIEluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItaGVsbG93b3JsZCIvPiwgeW91J3ZlIGxlYXJuZWQgdG8gYnVpbGQgYQotICAgIHNpbXBsZSBtZWRpYSBwbGF5ZXIgZm9yIE9nZy9Wb3JiaXMgZmlsZXMuIEJ5IHVzaW5nIGFsdGVybmF0aXZlIGVsZW1lbnRzLAotICAgIHlvdSBhcmUgYWJsZSB0byBidWlsZCBtZWRpYSBwbGF5ZXJzIGZvciBvdGhlciBtZWRpYSB0eXBlcywgc3VjaCBhcwotICAgIE9nZy9TcGVleCwgTVAzIG9yIGV2ZW4gdmlkZW8gZm9ybWF0cy4gSG93ZXZlciwgeW91IHdvdWxkIHJhdGhlciB3YW50Ci0gICAgdG8gYnVpbGQgYW4gYXBwbGljYXRpb24gdGhhdCBjYW4gYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIG1lZGlhIHR5cGUKLSAgICBvZiBhIHN0cmVhbSBhbmQgYXV0b21hdGljYWxseSBnZW5lcmF0ZSB0aGUgYmVzdCBwb3NzaWJsZSBwaXBlbGluZQotICAgIGJ5IGxvb2tpbmcgYXQgYWxsIGF2YWlsYWJsZSBlbGVtZW50cyBpbiBhIHN5c3RlbS4gVGhpcyBwcm9jZXNzIGlzIGNhbGxlZAotICAgIGF1dG9wbHVnZ2luZywgYW5kICZHU3RyZWFtZXI7IGNvbnRhaW5zIGhpZ2gtcXVhbGl0eSBhdXRvcGx1Z2dlcnMuIElmCi0gICAgeW91J3JlIGxvb2tpbmcgZm9yIGFuIGF1dG9wbHVnZ2VyLCBkb24ndCByZWFkIGFueSBmdXJ0aGVyIGFuZCBnbyB0bwotICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItcGxheWJhY2stY29tcG9uZW50cyIvPi4gVGhpcyBjaGFwdGVyIHdpbGwgZXhwbGFpbiB0aGUKLSAgICA8ZW1waGFzaXM+Y29uY2VwdDwvZW1waGFzaXM+IG9mIGF1dG9wbHVnZ2luZyBhbmQgdHlwZWZpbmRpbmcuIEl0IHdpbGwKLSAgICBleHBsYWluIHdoYXQgc3lzdGVtcyAmR1N0cmVhbWVyOyBpbmNsdWRlcyB0byBkeW5hbWljYWxseSBkZXRlY3QgdGhlCi0gICAgdHlwZSBvZiBhIG1lZGlhIHN0cmVhbSwgYW5kIGhvdyB0byBnZW5lcmF0ZSBhIHBpcGVsaW5lIG9mIGRlY29kZXIKLSAgICBlbGVtZW50cyB0byBwbGF5YmFjayB0aGlzIG1lZGlhLiBUaGUgc2FtZSBwcmluY2lwbGVzIGNhbiBhbHNvIGJlIHVzZWQKLSAgICBmb3IgdHJhbnNjb2RpbmcuIEJlY2F1c2Ugb2YgdGhlIGZ1bGwgZHluYW1pY2l0eSBvZiB0aGlzIGNvbmNlcHQsCi0gICAgJkdTdHJlYW1lcjsgY2FuIGJlIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gc3VwcG9ydCBuZXcgbWVkaWEgdHlwZXMKLSAgICB3aXRob3V0IG5lZWRpbmcgYW55IGFkYXB0YXRpb25zIHRvIGl0cyBhdXRvcGx1Z2dlcnMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgV2Ugd2lsbCBmaXJzdCBpbnRyb2R1Y2UgdGhlIGNvbmNlcHQgb2YgTWVkaWEgdHlwZXMgYXMgYSBkeW5hbWljIGFuZAotICAgIGV4dGVuZGlibGUgd2F5IG9mIGlkZW50aWZ5aW5nIG1lZGlhIHN0cmVhbXMuIEFmdGVyIHRoYXQsIHdlIHdpbGwgaW50cm9kdWNlCi0gICAgdGhlIGNvbmNlcHQgb2YgdHlwZWZpbmRpbmcgdG8gZmluZCB0aGUgdHlwZSBvZiBhIG1lZGlhIHN0cmVhbS4gTGFzdGx5LAotICAgIHdlIHdpbGwgZXhwbGFpbiBob3cgYXV0b3BsdWdnaW5nIGFuZCB0aGUgJkdTdHJlYW1lcjsgcmVnaXN0cnkgY2FuIGJlCi0gICAgdXNlZCB0byBzZXR1cCBhIHBpcGVsaW5lIHRoYXQgd2lsbCBjb252ZXJ0IG1lZGlhIGZyb20gb25lIG1lZGlhdHlwZSB0bwotICAgIGFub3RoZXIsIGZvciBleGFtcGxlIGZvciBtZWRpYSBkZWNvZGluZy4KLSAgPC9wYXJhPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1tZWRpYSI+Ci0gICAgPHRpdGxlPk1lZGlhIHR5cGVzIGFzIGEgd2F5IHRvIGlkZW50aWZ5IHN0cmVhbXM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgV2UgaGF2ZSBwcmV2aW91c2x5IGludHJvZHVjZWQgdGhlIGNvbmNlcHQgb2YgY2FwYWJpbGl0aWVzIGFzIGEgd2F5Ci0gICAgICBmb3IgZWxlbWVudHMgKG9yLCByYXRoZXIsIHBhZHMpIHRvIGFncmVlIG9uIGEgbWVkaWEgdHlwZSB3aGVuCi0gICAgICBzdHJlYW1pbmcgZGF0YSBmcm9tIG9uZSBlbGVtZW50IHRvIHRoZSBuZXh0IChzZWUgPHhyZWYKLSAgICAgIGxpbmtlbmQ9InNlY3Rpb24tY2FwcyIvPikuIFdlIGhhdmUgZXhwbGFpbmVkIHRoYXQgYSBjYXBhYmlsaXR5IGlzCi0gICAgICBhIGNvbWJpbmF0aW9uIG9mIGEgbWVkaWEgdHlwZSBhbmQgYSBzZXQgb2YgcHJvcGVydGllcy4gRm9yIG1vc3QKLSAgICAgIGNvbnRhaW5lciBmb3JtYXRzICh0aG9zZSBhcmUgdGhlIGZpbGVzIHRoYXQgeW91IHdpbGwgZmluZCBvbiB5b3VyCi0gICAgICBoYXJkIGRpc2s7IE9nZywgZm9yIGV4YW1wbGUsIGlzIGEgY29udGFpbmVyIGZvcm1hdCksIG5vIHByb3BlcnRpZXMKLSAgICAgIGFyZSBuZWVkZWQgdG8gZGVzY3JpYmUgdGhlIHN0cmVhbS4gT25seSBhIG1lZGlhIHR5cGUgaXMgbmVlZGVkLiBBCi0gICAgICBmdWxsIGxpc3Qgb2YgbWVkaWEgdHlwZXMgYW5kIGFjY29tcGFueWluZyBwcm9wZXJ0aWVzIGNhbiBiZSBmb3VuZAotICAgICAgaW4gPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL3B3Zy9odG1sL3NlY3Rpb24tdHlwZXMtZGVmaW5pdGlvbnMuaHRtbCI+dGhlCi0gICAgICBQbHVnaW4gV3JpdGVyJ3MgR3VpZGU8L3VsaW5rPi4KLSAgICA8L3BhcmE+IAotICAgIDxwYXJhPgotICAgICAgQW4gZWxlbWVudCBtdXN0IGFzc29jaWF0ZSBhIG1lZGlhIHR5cGUgdG8gaXRzIHNvdXJjZSBhbmQgc2luayBwYWRzCi0gICAgICB3aGVuIGl0IGlzIGxvYWRlZCBpbnRvIHRoZSBzeXN0ZW0uICZHU3RyZWFtZXI7IGtub3dzIGFib3V0IHRoZQotICAgICAgZGlmZmVyZW50IGVsZW1lbnRzIGFuZCB3aGF0IHR5cGUgb2YgZGF0YSB0aGV5IGV4cGVjdCBhbmQgZW1pdCB0aHJvdWdoCi0gICAgICB0aGUgJkdTdHJlYW1lcjsgcmVnaXN0cnkuIFRoaXMgYWxsb3dzIGZvciB2ZXJ5IGR5bmFtaWMgYW5kIGV4dGVuc2libGUKLSAgICAgIGVsZW1lbnQgY3JlYXRpb24gYXMgd2Ugd2lsbCBzZWUuCi0gICAgPC9wYXJhPiAKLQotICAgIDxwYXJhPgotICAgICAgSW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1oZWxsb3dvcmxkIi8+LCB3ZSd2ZSBsZWFybmVkIHRvIGJ1aWxkIGEKLSAgICAgIG11c2ljIHBsYXllciBmb3IgT2dnL1ZvcmJpcyBmaWxlcy4gTGV0J3MgbG9vayBhdCB0aGUgbWVkaWEgdHlwZXMKLSAgICAgIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHBhZCBpbiB0aGlzIHBpcGVsaW5lLiA8eHJlZgotICAgICAgbGlua2VuZD0ic2VjdGlvbi1taW1lLWltZyIvPiBzaG93cyB3aGF0IG1lZGlhIHR5cGUgYmVsb25ncyB0byBlYWNoCi0gICAgICBwYWQgaW4gdGhpcyBwaXBlbGluZS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi1taW1lLWltZyI+Ci0gICAgICA8dGl0bGU+VGhlIEhlbGxvIHdvcmxkIHBpcGVsaW5lIHdpdGggbWVkaWEgdHlwZXM8L3RpdGxlPgotICAgICAgPG1lZGlhb2JqZWN0PgotICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9taW1lLXdvcmxkLiZpbWFnZTsiIGZvcm1hdD0iJklNQUdFOyIvPgotICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgPC9tZWRpYW9iamVjdD4KLSAgICA8L2ZpZ3VyZT4KLQotICAgIDxwYXJhPgotICAgICAgTm93IHRoYXQgd2UgaGF2ZSBhbiBpZGVhIGhvdyAmR1N0cmVhbWVyOyBpZGVudGlmaWVzIGtub3duIG1lZGlhCi0gICAgICBzdHJlYW1zLCB3ZSBjYW4gbG9vayBhdCBtZXRob2RzICZHU3RyZWFtZXI7IHVzZXMgdG8gc2V0dXAgcGlwZWxpbmVzCi0gICAgICBmb3IgbWVkaWEgaGFuZGxpbmcgYW5kIGZvciBtZWRpYSB0eXBlIGRldGVjdGlvbi4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXR5cGVmaW5kaW5nIj4KLSAgICA8dGl0bGU+TWVkaWEgc3RyZWFtIHR5cGUgZGV0ZWN0aW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFVzdWFsbHksIHdoZW4gbG9hZGluZyBhIG1lZGlhIHN0cmVhbSwgdGhlIHR5cGUgb2YgdGhlIHN0cmVhbSBpcyBub3QKLSAgICAgIGtub3duLiBUaGlzIG1lYW5zIHRoYXQgYmVmb3JlIHdlIGNhbiBjaG9vc2UgYSBwaXBlbGluZSB0byBkZWNvZGUgdGhlCi0gICAgICBzdHJlYW0sIHdlIGZpcnN0IG5lZWQgdG8gZGV0ZWN0IHRoZSBzdHJlYW0gdHlwZS4gJkdTdHJlYW1lcjsgdXNlcyB0aGUKLSAgICAgIGNvbmNlcHQgb2YgdHlwZWZpbmRpbmcgZm9yIHRoaXMuIFR5cGVmaW5kaW5nIGlzIGEgbm9ybWFsIHBhcnQgb2YgYQotICAgICAgcGlwZWxpbmUsIGl0IHdpbGwgcmVhZCBkYXRhIGZvciBhcyBsb25nIGFzIHRoZSB0eXBlIG9mIGEgc3RyZWFtIGlzCi0gICAgICB1bmtub3duLiBEdXJpbmcgdGhpcyBwZXJpb2QsIGl0IHdpbGwgcHJvdmlkZSBkYXRhIHRvIGFsbCBwbHVnaW5zCi0gICAgICB0aGF0IGltcGxlbWVudCBhIHR5cGVmaW5kZXIuIFdoZW4gb25lIG9mIHRoZSB0eXBlZmluZGVycyByZWNvZ25pemVzCi0gICAgICB0aGUgc3RyZWFtLCB0aGUgdHlwZWZpbmQgZWxlbWVudCB3aWxsIGVtaXQgYSBzaWduYWwgYW5kIGFjdCBhcyBhCi0gICAgICBwYXNzdGhyb3VnaCBtb2R1bGUgZnJvbSB0aGF0IHBvaW50IG9uLiBJZiBubyB0eXBlIHdhcyBmb3VuZCwgaXQgd2lsbAotICAgICAgZW1pdCBhbiBlcnJvciBhbmQgZnVydGhlciBtZWRpYSBwcm9jZXNzaW5nIHdpbGwgc3RvcC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBPbmNlIHRoZSB0eXBlZmluZCBlbGVtZW50IGhhcyBmb3VuZCBhIHR5cGUsIHRoZSBhcHBsaWNhdGlvbiBjYW4KLSAgICAgIHVzZSB0aGlzIHRvIHBsdWcgdG9nZXRoZXIgYSBwaXBlbGluZSB0byBkZWNvZGUgdGhlIG1lZGlhIHN0cmVhbS4KLSAgICAgIFRoaXMgd2lsbCBiZSBkaXNjdXNzZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBQbHVnaW5zIGluICZHU3RyZWFtZXI7IGNhbiwgYXMgbWVudGlvbmVkIGJlZm9yZSwgaW1wbGVtZW50IHR5cGVmaW5kZXIKLSAgICAgIGZ1bmN0aW9uYWxpdHkuIEEgcGx1Z2luIGltcGxlbWVudGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2lsbCBzdWJtaXQKLSAgICAgIGEgbWVkaWEgdHlwZSwgb3B0aW9uYWxseSBhIHNldCBvZiBmaWxlIGV4dGVuc2lvbnMgY29tbW9ubHkgdXNlZCBmb3IgdGhpcwotICAgICAgbWVkaWEgdHlwZSwgYW5kIGEgdHlwZWZpbmQgZnVuY3Rpb24uIE9uY2UgdGhpcyB0eXBlZmluZCBmdW5jdGlvbiBpbnNpZGUKLSAgICAgIHRoZSBwbHVnaW4gaXMgY2FsbGVkLCB0aGUgcGx1Z2luIHdpbGwgc2VlIGlmIHRoZSBkYXRhIGluIHRoaXMgbWVkaWEKLSAgICAgIHN0cmVhbSBtYXRjaGVzIGEgc3BlY2lmaWMgcGF0dGVybiB0aGF0IG1hcmtzIHRoZSBtZWRpYSB0eXBlIGlkZW50aWZpZWQKLSAgICAgIGJ5IHRoYXQgbWVkaWEgdHlwZS4gSWYgaXQgZG9lcywgaXQgd2lsbCBub3RpZnkgdGhlIHR5cGVmaW5kIGVsZW1lbnQgb2YKLSAgICAgIHRoaXMgZmFjdCwgdGVsbGluZyB3aGljaCBtZWRpYXR5cGUgd2FzIHJlY29nbml6ZWQgYW5kIGhvdyBjZXJ0YWluIHdlCi0gICAgICBhcmUgdGhhdCB0aGlzIHN0cmVhbSBpcyBpbmRlZWQgdGhhdCBtZWRpYXR5cGUuIE9uY2UgdGhpcyBydW4gaGFzIGJlZW4KLSAgICAgIGNvbXBsZXRlZCBmb3IgYWxsIHBsdWdpbnMgaW1wbGVtZW50aW5nIGEgdHlwZWZpbmQgZnVuY3Rpb25hbGl0eSwgdGhlCi0gICAgICB0eXBlZmluZCBlbGVtZW50IHdpbGwgdGVsbCB0aGUgYXBwbGljYXRpb24gd2hhdCBraW5kIG9mIG1lZGlhIHN0cmVhbQotICAgICAgaXQgdGhpbmtzIHRvIGhhdmUgcmVjb2duaXplZC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgZm9sbG93aW5nIGNvZGUgc2hvdWxkIGV4cGxhaW4gaG93IHRvIHVzZSB0aGUgdHlwZWZpbmQgZWxlbWVudC4KLSAgICAgIEl0IHdpbGwgcHJpbnQgdGhlIGRldGVjdGVkIG1lZGlhIHR5cGUsIG9yIHRlbGwgdGhhdCB0aGUgbWVkaWEgdHlwZQotICAgICAgd2FzIG5vdCBmb3VuZC4gVGhlIG5leHQgc2VjdGlvbiB3aWxsIGludHJvZHVjZSBtb3JlIHVzZWZ1bCBiZWhhdmlvdXJzLAotICAgICAgc3VjaCBhcyBwbHVnZ2luZyB0b2dldGhlciBhIGRlY29kaW5nIHBpcGVsaW5lLgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIHR5cGVmaW5kLmMgYSAtLT4KLSNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08IS0tIGV4YW1wbGUtZW5kIHR5cGVmaW5kLmMgYSAtLT4KLVsuLiBteV9idXNfY2FsbGJhY2sgZ29lcyBoZXJlIC4uXTwhLS0gZXhhbXBsZS1iZWdpbiB0eXBlZmluZC5jIGIgLS0+PCEtLQotc3RhdGljIGdib29sZWFuCi1teV9idXNfY2FsbGJhY2sgKEdzdEJ1cyAgICAgKmJ1cywKLSAgICAgICAgICAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogewotICAgICAgR0Vycm9yICplcnI7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmYW1wO2VyciwgJmFtcDtkZWJ1Zyk7Ci0gICAgICBnX3ByaW50ICgiRXJyb3I6ICVzXG4iLCBlcnItJmd0O21lc3NhZ2UpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgLyogZW5kLW9mLXN0cmVhbSAqLwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiByZW1vdmUgZnJvbSBxdWV1ZSAqLwotICByZXR1cm4gVFJVRTsKLX0KLS0tPjwhLS0gZXhhbXBsZS1lbmQgdHlwZWZpbmQuYyBiIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHR5cGVmaW5kLmMgYyAtLT4KLXN0YXRpYyBnYm9vbGVhbgotaWRsZV9leGl0X2xvb3AgKGdwb2ludGVyIGRhdGEpCi17Ci0gIGdfbWFpbl9sb29wX3F1aXQgKChHTWFpbkxvb3AgKikgZGF0YSk7Ci0KLSAgLyogb25jZSAqLwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYl90eXBlZm91bmQgKEdzdEVsZW1lbnQgKnR5cGVmaW5kLAotCSAgICAgIGd1aW50ICAgICAgIHByb2JhYmlsaXR5LAotCSAgICAgIEdzdENhcHMgICAgKmNhcHMsCi0JICAgICAgZ3BvaW50ZXIgICAgZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gZGF0YTsKLSAgZ2NoYXIgKnR5cGU7Ci0KLSAgdHlwZSA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7Ci0gIGdfcHJpbnQgKCJNZWRpYSB0eXBlICVzIGZvdW5kLCBwcm9iYWJpbGl0eSAlZCUlXG4iLCB0eXBlLCBwcm9iYWJpbGl0eSk7Ci0gIGdfZnJlZSAodHlwZSk7Ci0KLSAgLyogc2luY2Ugd2UgY29ubmVjdCB0byBhIHNpZ25hbCBpbiB0aGUgcGlwZWxpbmUgdGhyZWFkIGNvbnRleHQsIHdlIG5lZWQKLSAgICogdG8gc2V0IGFuIGlkbGUgaGFuZGxlciB0byBleGl0IHRoZSBtYWluIGxvb3AgaW4gdGhlIG1haW5sb29wIGNvbnRleHQuCi0gICAqIE5vcm1hbGx5LCB5b3VyIGFwcCBzaG91bGQgbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgc3VjaCB0aGluZ3MuICovCi0gIGdfaWRsZV9hZGQgKGlkbGVfZXhpdF9sb29wLCBsb29wKTsKLX0KLQotZ2ludCAKLW1haW4gKGdpbnQgICBhcmdjLAotICAgICAgZ2NoYXIgKmFyZ3ZbXSkKLXsKLSAgR01haW5Mb29wICpsb29wOwotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmZpbGVzcmMsICp0eXBlZmluZCwgKmZha2VzaW5rOwotICBHc3RCdXMgKmJ1czsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogY2hlY2sgYXJncyAqLwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoIlVzYWdlOiAlcyAmbHQ7ZmlsZW5hbWUmZ3Q7XG4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBjcmVhdGUgYSBuZXcgcGlwZWxpbmUgdG8gaG9sZCB0aGUgZWxlbWVudHMgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZSIpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG15X2J1c19jYWxsYmFjaywgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgLyogY3JlYXRlIGZpbGUgc291cmNlIGFuZCB0eXBlZmluZCBlbGVtZW50ICovCi0gIGZpbGVzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgInNvdXJjZSIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChmaWxlc3JjKSwgImxvY2F0aW9uIiwgYXJndlsxXSwgTlVMTCk7Ci0gIHR5cGVmaW5kID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidHlwZWZpbmQiLCAidHlwZWZpbmRlciIpOwotICBnX3NpZ25hbF9jb25uZWN0ICh0eXBlZmluZCwgImhhdmUtdHlwZSIsIEdfQ0FMTEJBQ0sgKGNiX3R5cGVmb3VuZCksIGxvb3ApOwotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLQotICAvKiBzZXR1cCAqLwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGZpbGVzcmMsIHR5cGVmaW5kLCBmYWtlc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoZmlsZXNyYywgdHlwZWZpbmQsIGZha2VzaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogdW5zZXQgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0gICAgPCEtLSBleGFtcGxlLWVuZCB0eXBlZmluZC5jIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KLSAgICA8cGFyYT4KLSAgICAgIE9uY2UgYSBtZWRpYSB0eXBlIGhhcyBiZWVuIGRldGVjdGVkLCB5b3UgY2FuIHBsdWcgYW4gZWxlbWVudCAoZS5nLiBhCi0gICAgICBkZW11eGVyIG9yIGRlY29kZXIpIHRvIHRoZSBzb3VyY2UgcGFkIG9mIHRoZSB0eXBlZmluZCBlbGVtZW50LCBhbmQKLSAgICAgIGRlY29kaW5nIG9mIHRoZSBtZWRpYSBzdHJlYW0gd2lsbCBzdGFydCByaWdodCBhZnRlci4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWR5bmFtaWMiPgotICAgIDx0aXRsZT5EeW5hbWljYWxseSBhdXRvcGx1Z2dpbmcgYSBwaXBlbGluZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBTZWUgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1wbGF5YmFjay1jb21wb25lbnRzIi8+IGZvciB1c2luZyB0aGUgaGlnaAotICAgICAgbGV2ZWwgb2JqZWN0IHRoYXQgeW91IGNhbiB1c2UgdG8gZHluYW1pY2FsbHkgY29uc3RydWN0IHBpcGVsaW5lcy4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hZHZhbmNlZC1idWZmZXJpbmcueG1sIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtYnVmZmVyaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZhY2Q4NS4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9hZHZhbmNlZC1idWZmZXJpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUwICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLWJ1ZmZlcmluZyI+Ci0gIDx0aXRsZT5CdWZmZXJpbmc8L3RpdGxlPgotICA8cGFyYT4KLSAgICBUaGUgcHVycG9zZSBvZiBidWZmZXJpbmcgaXMgdG8gYWNjdW11bGF0ZSBlbm91Z2ggZGF0YSBpbiBhIHBpcGVsaW5lIHNvIHRoYXQKLSAgICBwbGF5YmFjayBjYW4gb2NjdXIgc21vb3RobHkgYW5kIHdpdGhvdXQgaW50ZXJydXB0aW9ucy4gSXQgaXMgdHlwaWNhbGx5IGRvbmUKLSAgICB3aGVuIHJlYWRpbmcgZnJvbSBhIChzbG93KSBhbmQgbm9uLWxpdmUgbmV0d29yayBzb3VyY2UgYnV0IGNhbiBhbHNvIGJlCi0gICAgdXNlZCBmb3IgbGl2ZSBzb3VyY2VzLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgdXNlIGNhc2VzOgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEJ1ZmZlcmluZyB1cCB0byBhIHNwZWNpZmljIGFtb3VudCBvZiBkYXRhLCBpbiBtZW1vcnksIGJlZm9yZSBzdGFydGluZwotICAgICAgICAgIHBsYXliYWNrIHNvIHRoYXQgbmV0d29yayBmbHVjdHVhdGlvbnMgYXJlIG1pbmltaXplZC4KLSAgICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1idWZmZXJpbmctc3RyZWFtIi8+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBEb3dubG9hZCBvZiB0aGUgbmV0d29yayBmaWxlIHRvIGEgbG9jYWwgZGlzayB3aXRoIGZhc3Qgc2Vla2luZyBpbiB0aGUKLSAgICAgICAgICBkb3dubG9hZGVkIGRhdGEuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcXVpY2t0aW1lL3lvdXR1YmUgcGxheWVycy4KLSAgICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1idWZmZXJpbmctZG93bmxvYWQiLz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIENhY2hpbmcgb2YgKHNlbWkpLWxpdmUgc3RyZWFtcyB0byBhIGxvY2FsLCBvbiBkaXNrLCByaW5nYnVmZmVyIHdpdGgKLSAgICAgICAgICBzZWVraW5nIGluIHRoZSBjYWNoZWQgYXJlYS4gVGhpcyBpcyBzaW1pbGFyIHRvIHRpdm8tbGlrZSB0aW1lc2hpZnRpbmcuCi0gICAgICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tYnVmZmVyaW5nLXRpbWVzaGlmdCIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAmR1N0cmVhbWVyOyBjYW4gcHJvdmlkZSB0aGUgYXBwbGljYXRpb24gd2l0aCBwcm9ncmVzcyByZXBvcnRzIGFib3V0IHRoZQotICAgIGN1cnJlbnQgYnVmZmVyaW5nIHN0YXRlIGFzIHdlbGwgYXMgbGV0IHRoZSBhcHBsaWNhdGlvbiBkZWNpZGUgb24gaG93Ci0gICAgdG8gYnVmZmVyIGFuZCB3aGVuIHRoZSBidWZmZXJpbmcgc3RvcHMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgSW4gdGhlIG1vc3Qgc2ltcGxlIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBoYXMgdG8gbGlzdGVuIGZvciBCVUZGRVJJTkcKLSAgICBtZXNzYWdlcyBvbiB0aGUgYnVzLiBJZiB0aGUgcGVyY2VudCBpbmRpY2F0b3IgaW5zaWRlIHRoZSBCVUZGRVJJTkcgbWVzc2FnZQotICAgIGlzIHNtYWxsZXIgdGhhbiAxMDAsIHRoZSBwaXBlbGluZSBpcyBidWZmZXJpbmcuIFdoZW4gYSBtZXNzYWdlIGlzCi0gICAgcmVjZWl2ZWQgd2l0aCAxMDAgcGVyY2VudCwgYnVmZmVyaW5nIGlzIGNvbXBsZXRlLiBJbiB0aGUgYnVmZmVyaW5nIHN0YXRlLAotICAgIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQga2VlcCB0aGUgcGlwZWxpbmUgaW4gdGhlIFBBVVNFRCBzdGF0ZS4gV2hlbiBidWZmZXJpbmcKLSAgICBjb21wbGV0ZXMsIGl0IGNhbiBwdXQgdGhlIHBpcGVsaW5lIChiYWNrKSBpbiB0aGUgUExBWUlORyBzdGF0ZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBXaGF0IGZvbGxvd3MgaXMgYW4gZXhhbXBsZSBvZiBob3cgdGhlIG1lc3NhZ2UgaGFuZGxlciBjb3VsZCBkZWFsIHdpdGgKLSAgICB0aGUgQlVGRkVSSU5HIG1lc3NhZ2VzLiBXZSB3aWxsIHNlZSBtb3JlIGFkdmFuY2VkIG1ldGhvZHMgaW4KLSAgICA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWJ1ZmZlcmluZy1zdHJhdGVnaWVzIi8+LgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBbLi4uXQotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0JVRkZFUklORzp7Ci0gICAgICBnaW50IHBlcmNlbnQ7Ci0KLSAgICAgIC8qIG5vIHN0YXRlIG1hbmFnZW1lbnQgbmVlZGVkIGZvciBsaXZlIHBpcGVsaW5lcyAqLwotICAgICAgaWYgKGlzX2xpdmUpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcgKG1lc3NhZ2UsICZwZXJjZW50KTsKLQotICAgICAgaWYgKHBlcmNlbnQgPT0gMTAwKSB7Ci0gICAgICAgIC8qIGEgMTAwJSBtZXNzYWdlIG1lYW5zIGJ1ZmZlcmluZyBpcyBkb25lICovCi0gICAgICAgIGJ1ZmZlcmluZyA9IEZBTFNFOwotICAgICAgICAvKiBpZiB0aGUgZGVzaXJlZCBzdGF0ZSBpcyBwbGF5aW5nLCBnbyBiYWNrICovCi0gICAgICAgIGlmICh0YXJnZXRfc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKLSAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGJ1ZmZlcmluZyBidXN5ICovCi0gICAgICAgIGlmICghYnVmZmVyaW5nICYmIHRhcmdldF9zdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgewotICAgICAgICAgIC8qIHdlIHdlcmUgbm90IGJ1ZmZlcmluZyBidXQgUExBWUlORywgUEFVU0UgIHRoZSBwaXBlbGluZS4gKi8KLSAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICAgICAgfQotICAgICAgICBidWZmZXJpbmcgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAuLi4KLQotICBbLi4uXQotXV0+Ci0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJ1ZmZlcmluZy1zdHJlYW0iPgotICAgIDx0aXRsZT5TdHJlYW0gYnVmZmVyaW5nIDwvdGl0bGU+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotICAgICAgKy0tLS0tLS0tLSsgICAgICstLS0tLS0tLS0rICAgICArLS0tLS0tLSsKLSAgICAgIHwgaHR0cHNyYyB8ICAgICB8IGJ1ZmZlciAgfCAgICAgfCBkZW11eCB8Ci0gICAgICB8ICAgICAgICBzcmMgLSBzaW5rICAgICAgc3JjIC0gc2luayAgICAgLi4uLgotICAgICAgKy0tLS0tLS0tLSsgICAgICstLS0tLS0tLS0rICAgICArLS0tLS0tLSsKLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhpcyBjYXNlIHdlIGFyZSByZWFkaW5nIGZyb20gYSBzbG93IG5ldHdvcmsgc291cmNlIGludG8gYSBidWZmZXIKLSAgICAgIGVsZW1lbnQgKHN1Y2ggYXMgcXVldWUyKS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgYnVmZmVyIGVsZW1lbnQgaGFzIGEgbG93IGFuZCBoaWdoIHdhdGVybWFyayBleHByZXNzZWQgaW4gYnl0ZXMuIFRoZQotICAgICAgYnVmZmVyIHVzZXMgdGhlIHdhdGVybWFya3MgYXMgZm9sbG93czoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIGJ1ZmZlciBlbGVtZW50IHdpbGwgcG9zdCBCVUZGRVJJTkcgbWVzc2FnZXMgdW50aWwgdGhlIGhpZ2gKLSAgICAgICAgICB3YXRlcm1hcmsgaXMgaGl0LiBUaGlzIGluc3RydWN0cyB0aGUgYXBwbGljYXRpb24gdG8ga2VlcCB0aGUgcGlwZWxpbmUKLSAgICAgICAgICBQQVVTRUQsIHdoaWNoIHdpbGwgZXZlbnR1YWxseSBibG9jayB0aGUgc3JjcGFkIGZyb20gcHVzaGluZyB3aGlsZQotICAgICAgICAgIGRhdGEgaXMgcHJlcm9sbGVkIGluIHRoZSBzaW5rcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgV2hlbiB0aGUgaGlnaCB3YXRlcm1hcmsgaXMgaGl0LCBhIEJVRkZFUklORyBtZXNzYWdlIHdpdGggMTAwJSB3aWxsIGJlCi0gICAgICAgICAgcG9zdGVkLCB3aGljaCBpbnN0cnVjdHMgdGhlIGFwcGxpY2F0aW9uIHRvIGNvbnRpbnVlIHBsYXliYWNrLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBXaGVuIGR1cmluZyBwbGF5YmFjaywgdGhlIGxvdyB3YXRlcm1hcmsgaXMgaGl0LCB0aGUgcXVldWUgd2lsbCBzdGFydAotICAgICAgICAgIHBvc3RpbmcgQlVGRkVSSU5HIG1lc3NhZ2VzIGFnYWluLCBtYWtpbmcgdGhlIGFwcGxpY2F0aW9uIFBBVVNFIHRoZQotICAgICAgICAgIHBpcGVsaW5lIGFnYWluIHVudGlsIHRoZSBoaWdoIHdhdGVybWFyayBpcyBoaXQgYWdhaW4uIFRoaXMgaXMgY2FsbGVkCi0gICAgICAgICAgdGhlIHJlYnVmZmVyaW5nIHN0YWdlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBEdXJpbmcgcGxheWJhY2ssIHRoZSBxdWV1ZSBsZXZlbCB3aWxsIGZsdWN0dWF0ZSBiZXR3ZWVuIHRoZSBoaWdoIGFuZAotICAgICAgICAgIHRoZSBsb3cgd2F0ZXJtYXJrIGFzIGEgd2F5IHRvIGNvbXBlbnNhdGUgZm9yIG5ldHdvcmsgaXJyZWd1bGFyaXRpZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICA8L2l0ZW1pemVkbGlzdD4KLSAgIDxwYXJhPgotICAgICBUaGlzIGJ1ZmZlcmluZyBtZXRob2QgaXMgdXNhYmxlIHdoZW4gdGhlIGRlbXV4ZXIgb3BlcmF0ZXMgaW4gcHVzaCBtb2RlLgotICAgICBTZWVraW5nIGluIHRoZSBzdHJlYW0gcmVxdWlyZXMgdGhlIHNlZWsgdG8gaGFwcGVuIGluIHRoZSBuZXR3b3JrIHNvdXJjZS4KLSAgICAgSXQgaXMgbW9zdGx5IGRlc2lyYWJsZSB3aGVuIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgZmlsZSBpcyBub3Qga25vd24sCi0gICAgIHN1Y2ggYXMgaW4gbGl2ZSBzdHJlYW1pbmcgb3Igd2hlbiBlZmZpY2llbnQgc2Vla2luZyBpcyBub3QKLSAgICAgcG9zc2libGUvcmVxdWlyZWQuCi0gICA8L3BhcmE+Ci0gICA8cGFyYT4KLSAgICAgVGhlIHByb2JsZW0gaXMgY29uZmlndXJpbmcgYSBnb29kIGxvdyBhbmQgaGlnaCB3YXRlcm1hcmsuIEhlcmUgYXJlIHNvbWUKLSAgICAgaWRlYXM6Ci0gICA8L3BhcmE+Ci0gICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBtZWFzdXJlIHRoZSBuZXR3b3JrIGJhbmR3aWR0aCBhbmQgY29uZmlndXJlIHRoZQotICAgICAgICAgIGxvdy9oaWdoIHdhdGVybWFya3MgaW4gc3VjaCBhIHdheSB0aGF0IGJ1ZmZlcmluZyB0YWtlcyBhIGZpeGVkCi0gICAgICAgICAgYW1vdW50IG9mIHRpbWUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIHF1ZXVlMiBlbGVtZW50IGluICZHU3RyZWFtZXI7IGNvcmUgaGFzIHRoZSBtYXgtc2l6ZS10aW1lIHByb3BlcnR5Ci0gICAgICAgICAgdGhhdCwgdG9nZXRoZXIgd2l0aCB0aGUgdXNlLXJhdGUtZXN0aW1hdGUgcHJvcGVydHksIGRvZXMgZXhhY3RseQotICAgICAgICAgIHRoYXQuIEFsc28gdGhlIHBsYXliaW4gYnVmZmVyLWR1cmF0aW9uIHByb3BlcnR5IHVzZXMgdGhlIHJhdGUgZXN0aW1hdGUKLSAgICAgICAgICB0byBzY2FsZSB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBpcyBidWZmZXJlZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQmFzZWQgb24gdGhlIGNvZGVjIGJpdHJhdGUsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSB3YXRlcm1hcmtzCi0gICAgICAgICAgaW4gc3VjaCBhIHdheSB0aGF0IGEgZml4ZWQgYW1vdW50IG9mIGRhdGEgaXMgYnVmZmVyZWQgYmVmb3JlIHBsYXliYWNrCi0gICAgICAgICAgc3RhcnRzLiBOb3JtYWxseSwgdGhlIGJ1ZmZlcmluZyBlbGVtZW50IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUKLSAgICAgICAgICBiaXRyYXRlIG9mIHRoZSBzdHJlYW0gYnV0IGl0IGNhbiBnZXQgdGhpcyB3aXRoIGEgcXVlcnkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFN0YXJ0IHdpdGggYSBmaXhlZCBhbW91bnQgb2YgYnl0ZXMsIG1lYXN1cmUgdGhlIHRpbWUgYmV0d2VlbgotICAgICAgICAgIHJlYnVmZmVyaW5nIGFuZCBpbmNyZWFzZSB0aGUgcXVldWUgc2l6ZSB1bnRpbCB0aGUgdGltZSBiZXR3ZWVuCi0gICAgICAgICAgcmVidWZmZXJpbmcgaXMgd2l0aGluIHRoZSBhcHBsaWNhdGlvbidzIGNob3NlbiBsaW1pdHMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICA8L2l0ZW1pemVkbGlzdD4KLSAgIDxwYXJhPgotICAgICBUaGUgYnVmZmVyaW5nIGVsZW1lbnQgY2FuIGJlIGluc2VydGVkIGFueXdoZXJlIGluIHRoZSBwaXBlbGluZS4gWW91IGNvdWxkLAotICAgICBmb3IgZXhhbXBsZSwgaW5zZXJ0IHRoZSBidWZmZXJpbmcgZWxlbWVudCBiZWZvcmUgYSBkZWNvZGVyLiBUaGlzIHdvdWxkCi0gICAgIG1ha2UgaXQgcG9zc2libGUgdG8gc2V0IHRoZSBsb3cvaGlnaCB3YXRlcm1hcmtzIGJhc2VkIG9uIHRpbWUuCi0gICA8L3BhcmE+Ci0gICA8cGFyYT4KLSAgICAgVGhlIGJ1ZmZlcmluZyBmbGFnIG9uIHBsYXliaW4sIHBlcmZvcm1zIGJ1ZmZlcmluZyBvbiB0aGUgcGFyc2VkIGRhdGEuCi0gICAgIEFub3RoZXIgYWR2YW50YWdlIG9mIGRvaW5nIHRoZSBidWZmZXJpbmcgYXQgYSBsYXRlciBzdGFnZSBpcyB0aGF0IHlvdSBjYW4KLSAgICAgbGV0IHRoZSBkZW11eGVyIG9wZXJhdGUgaW4gcHVsbCBtb2RlLiBXaGVuIHJlYWRpbmcgZGF0YSBmcm9tIGEgc2xvdwotICAgICBuZXR3b3JrIGRyaXZlICh3aXRoIGZpbGVzcmMpIHRoaXMgY2FuIGJlIGFuIGludGVyZXN0aW5nIHdheSB0byBidWZmZXIuCi0gICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJ1ZmZlcmluZy1kb3dubG9hZCI+Ci0gICAgPHRpdGxlPkRvd25sb2FkIGJ1ZmZlcmluZyA8L3RpdGxlPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLSAgICAgICstLS0tLS0tLS0rICAgICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0rCi0gICAgICB8IGh0dHBzcmMgfCAgICAgfCBidWZmZXIgIHwgICAgIHwgZGVtdXggfAotICAgICAgfCAgICAgICAgc3JjIC0gc2luayAgICAgIHNyYyAtIHNpbmsgICAgIC4uLi4KLSAgICAgICstLS0tLS0tLS0rICAgICArLS0tLXwtLS0tKyAgICAgKy0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUKLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgSWYgd2Uga25vdyB0aGUgc2VydmVyIGlzIHN0cmVhbWluZyBhIGZpeGVkIGxlbmd0aCBmaWxlIHRvIHRoZSBjbGllbnQsCi0gICAgICB0aGUgYXBwbGljYXRpb24gY2FuIGNob29zZSB0byBkb3dubG9hZCB0aGUgZW50aXJlIGZpbGUgb24gZGlzay4gVGhlCi0gICAgICBidWZmZXIgZWxlbWVudCB3aWxsIHByb3ZpZGUgYSBwdXNoIG9yIHB1bGwgYmFzZWQgc3JjcGFkIHRvIHRoZSBkZW11eGVyCi0gICAgICB0byBuYXZpZ2F0ZSBpbiB0aGUgZG93bmxvYWRlZCBmaWxlLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgbW9kZSBpcyBvbmx5IHN1aXRhYmxlIHdoZW4gdGhlIGNsaWVudCBjYW4gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YKLSAgICAgIHRoZSBmaWxlIG9uIHRoZSBzZXJ2ZXIuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhpcyBjYXNlLCBidWZmZXJpbmcgbWVzc2FnZXMgd2lsbCBiZSBlbWl0dGVkIGFzIHVzdWFsIHdoZW4gdGhlCi0gICAgICByZXF1ZXN0ZWQgcmFuZ2UgaXMgbm90IHdpdGhpbiB0aGUgZG93bmxvYWRlZCBhcmVhICsgYnVmZmVyc2l6ZS4gVGhlCi0gICAgICBidWZmZXJpbmcgbWVzc2FnZSB3aWxsIGFsc28gY29udGFpbiBhbiBpbmRpY2F0aW9uIHRoYXQgaW5jcmVtZW50YWwKLSAgICAgIGRvd25sb2FkIGlzIGJlaW5nIHBlcmZvcm1lZC4gVGhpcyBmbGFnIGNhbiBiZSB1c2VkIHRvIGxldCB0aGUgYXBwbGljYXRpb24KLSAgICAgIGNvbnRyb2wgdGhlIGJ1ZmZlcmluZyBpbiBhIG1vcmUgaW50ZWxsaWdlbnQgd2F5LCB1c2luZyB0aGUgQlVGRkVSSU5HCi0gICAgICBxdWVyeSwgZm9yIGV4YW1wbGUuIFNlZSA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWJ1ZmZlcmluZy1zdHJhdGVnaWVzIi8+LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tYnVmZmVyaW5nLXRpbWVzaGlmdCI+Ci0gICAgPHRpdGxlPlRpbWVzaGlmdCBidWZmZXJpbmcgPC90aXRsZT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICArLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0tLSsgICAgICstLS0tLS0tKwotICAgICAgfCBodHRwc3JjIHwgICAgIHwgYnVmZmVyICB8ICAgICB8IGRlbXV4IHwKLSAgICAgIHwgICAgICAgIHNyYyAtIHNpbmsgICAgICBzcmMgLSBzaW5rICAgICAuLi4uCi0gICAgICArLS0tLS0tLS0tKyAgICAgKy0tLS18LS0tLSsgICAgICstLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgVgotICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXJpbmdidWZmZXIKLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhpcyBtb2RlLCBhIGZpeGVkIHNpemUgcmluZ2J1ZmZlciBpcyBrZXB0IHRvIGRvd25sb2FkIHRoZSBzZXJ2ZXIKLSAgICAgIGNvbnRlbnQuICBUaGlzIGFsbG93cyBmb3Igc2Vla2luZyBpbiB0aGUgYnVmZmVyZWQgZGF0YS4gRGVwZW5kaW5nIG9uIHRoZQotICAgICAgc2l6ZSBvZiB0aGUgcmluZ2J1ZmZlciBvbmUgY2FuIHNlZWsgZnVydGhlciBiYWNrIGluIHRpbWUuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhpcyBtb2RlIGlzIHN1aXRhYmxlIGZvciBhbGwgbGl2ZSBzdHJlYW1zLiBBcyB3aXRoIHRoZSBpbmNyZW1lbnRhbAotICAgICAgZG93bmxvYWQgbW9kZSwgYnVmZmVyaW5nIG1lc3NhZ2VzIGFyZSBlbWl0dGVkIGFsb25nIHdpdGggYW4gaW5kaWNhdGlvbgotICAgICAgdGhhdCB0aW1lc2hpZnRpbmcgZG93bmxvYWQgaXMgaW4gcHJvZ3Jlc3MuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1idWZmZXJpbmctbGl2ZSI+Ci0gICAgPHRpdGxlPkxpdmUgYnVmZmVyaW5nIDwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBJbiBsaXZlIHBpcGVsaW5lcyB3ZSB1c3VhbGx5IGludHJvZHVjZSBzb21lIGZpeGVkIGxhdGVuY3kgYmV0d2VlbiB0aGUKLSAgICAgIGNhcHR1cmUgYW5kIHRoZSBwbGF5YmFjayBlbGVtZW50cy4gVGhpcyBsYXRlbmN5IGNhbiBiZSBpbnRyb2R1Y2VkIGJ5Ci0gICAgICBhIHF1ZXVlIChzdWNoIGFzIGEgaml0dGVyYnVmZmVyKSBvciBieSBvdGhlciBtZWFucyAoaW4gdGhlIGF1ZGlvc2luaykuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQnVmZmVyaW5nIG1lc3NhZ2VzIGNhbiBiZSBlbWl0dGVkIGluIHRob3NlIGxpdmUgcGlwZWxpbmVzIGFzIHdlbGwgYW5kCi0gICAgICBzZXJ2ZSBhcyBhbiBpbmRpY2F0aW9uIHRvIHRoZSB1c2VyIG9mIHRoZSBsYXRlbmN5IGJ1ZmZlcmluZy4gVGhlCi0gICAgICBhcHBsaWNhdGlvbiB1c3VhbGx5IGRvZXMgbm90IHJlYWN0IHRvIHRoZXNlIGJ1ZmZlcmluZyBtZXNzYWdlcyB3aXRoIGEKLSAgICAgIHN0YXRlIGNoYW5nZS4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJ1ZmZlcmluZy1zdHJhdGVnaWVzIj4KLSAgICA8dGl0bGU+QnVmZmVyaW5nIHN0cmF0ZWdpZXMgPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFdoYXQgZm9sbG93cyBhcmUgc29tZSBpZGVhcyBmb3IgaW1wbGVtZW50aW5nIGRpZmZlcmVudCBidWZmZXJpbmcKLSAgICAgIHN0cmF0ZWdpZXMgYmFzZWQgb24gdGhlIGJ1ZmZlcmluZyBtZXNzYWdlcyBhbmQgYnVmZmVyaW5nIHF1ZXJ5LgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1idWZmZXJpbmctbm9yZWJ1ZmZlciI+Ci0gICAgICA8dGl0bGU+Tm8tcmVidWZmZXIgc3RyYXRlZ3kgPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBXZSB3b3VsZCBsaWtlIHRvIGJ1ZmZlciBlbm91Z2ggZGF0YSBpbiB0aGUgcGlwZWxpbmUgc28gdGhhdCBwbGF5YmFjawotICAgICAgICBjb250aW51ZXMgd2l0aG91dCBpbnRlcnJ1cHRpb25zLiBXaGF0IHdlIG5lZWQgdG8ga25vdyB0byBpbXBsZW1lbnQKLSAgICAgICAgdGhpcyBpcyBrbm93IHRoZSB0b3RhbCByZW1haW5pbmcgcGxheWJhY2sgdGltZSBpbiB0aGUgZmlsZSBhbmQgdGhlCi0gICAgICAgIHRvdGFsIHJlbWFpbmluZyBkb3dubG9hZCB0aW1lLiBJZiB0aGUgYnVmZmVyaW5nIHRpbWUgaXMgbGVzcyB0aGFuIHRoZQotICAgICAgICBwbGF5YmFjayB0aW1lLCB3ZSBjYW4gc3RhcnQgcGxheWJhY2sgd2l0aG91dCBpbnRlcnJ1cHRpb25zLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFdlIGhhdmUgYWxsIHRoaXMgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHdpdGggdGhlIERVUkFUSU9OLCBQT1NJVElPTiBhbmQKLSAgICAgICAgQlVGRkVSSU5HIHF1ZXJpZXMuIFdlIG5lZWQgdG8gcGVyaW9kaWNhbGx5IGV4ZWN1dGUgdGhlIGJ1ZmZlcmluZyBxdWVyeQotICAgICAgICB0byBnZXQgdGhlIGN1cnJlbnQgYnVmZmVyaW5nIHN0YXR1cy4gV2UgYWxzbyBuZWVkIHRvIGhhdmUgYSBsYXJnZQotICAgICAgICBlbm91Z2ggYnVmZmVyIHRvIGhvbGQgdGhlIGNvbXBsZXRlIGZpbGUsIHdvcnN0IGNhc2UuIEl0IGlzIGJlc3QgdG8KLSAgICAgICAgdXNlIHRoaXMgYnVmZmVyaW5nIHN0cmF0ZWd5IHdpdGggZG93bmxvYWQgYnVmZmVyaW5nIChzZWUKLSAgICAgICAgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1idWZmZXJpbmctZG93bmxvYWQiLz4pLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgaXMgd2hhdCB0aGUgY29kZSB3b3VsZCBsb29rIGxpa2U6Ci0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IS0tIGV4YW1wbGUtYmVnaW4gbm9yZWJ1ZmZlci5jIGEgLS0+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdzdFN0YXRlIHRhcmdldF9zdGF0ZTsKLXN0YXRpYyBnYm9vbGVhbiBpc19saXZlOwotc3RhdGljIGdib29sZWFuIGlzX2J1ZmZlcmluZzsKLQotc3RhdGljIGdib29sZWFuCi1idWZmZXJfdGltZW91dCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUgPSBkYXRhOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIGJ1c3k7Ci0gIGdpbnQgcGVyY2VudDsKLSAgZ2ludDY0IGVzdGltYXRlZF90b3RhbDsKLSAgZ2ludDY0IHBvc2l0aW9uLCBkdXJhdGlvbjsKLSAgZ3VpbnQ2NCBwbGF5X2xlZnQ7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyAoR1NUX0ZPUk1BVF9USU1FKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5IChwaXBlbGluZSwgcXVlcnkpKQotICAgIHJldHVybiBUUlVFOwotCi0gIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCAocXVlcnksICZidXN5LCAmcGVyY2VudCk7Ci0gIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCBOVUxMLCBOVUxMLCBOVUxMLCAmZXN0aW1hdGVkX3RvdGFsKTsKLQotICBpZiAoZXN0aW1hdGVkX3RvdGFsID09IC0xKQotICAgIGVzdGltYXRlZF90b3RhbCA9IDA7Ci0KLSAgLyogY2FsY3VsYXRlIHRoZSByZW1haW5pbmcgcGxheWJhY2sgdGltZSAqLwotICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChwaXBlbGluZSwgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pKQotICAgIHBvc2l0aW9uID0gLTE7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKHBpcGVsaW5lLCBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbikpCi0gICAgZHVyYXRpb24gPSAtMTsKLQotICBpZiAoZHVyYXRpb24gIT0gLTEgJiYgcG9zaXRpb24gIT0gLTEpCi0gICAgcGxheV9sZWZ0ID0gR1NUX1RJTUVfQVNfTVNFQ09ORFMgKGR1cmF0aW9uIC0gcG9zaXRpb24pOwotICBlbHNlCi0gICAgcGxheV9sZWZ0ID0gMDsKLQotICBnX21lc3NhZ2UgKCJwbGF5X2xlZnQgJSIgR19HVUlOVDY0X0ZPUk1BVCIsIGVzdGltYXRlZF90b3RhbCAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCBwZXJjZW50ICVkIiwgcGxheV9sZWZ0LCBlc3RpbWF0ZWRfdG90YWwsIHBlcmNlbnQpOwotCi0gIC8qIHdlIGFyZSBidWZmZXJpbmcgb3IgdGhlIGVzdGltYXRlZCBkb3dubG9hZCB0aW1lIGlzIGJpZ2dlciB0aGFuIHRoZQotICAgKiByZW1haW5pbmcgcGxheWJhY2sgdGltZS4gV2Uga2VlcCBidWZmZXJpbmcuICovCi0gIGlzX2J1ZmZlcmluZyA9IChidXN5IHx8IGVzdGltYXRlZF90b3RhbCAqIDEuMSA+IHBsYXlfbGVmdCk7Ci0KLSAgaWYgKCFpc19idWZmZXJpbmcpCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgdGFyZ2V0X3N0YXRlKTsKLQotICByZXR1cm4gaXNfYnVmZmVyaW5nOwotfQotCi1zdGF0aWMgdm9pZAotb25fbWVzc2FnZV9idWZmZXJpbmcgKEdzdEJ1cyAqYnVzLCBHc3RNZXNzYWdlICptZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gdXNlcl9kYXRhOwotICBnaW50IHBlcmNlbnQ7Ci0KLSAgLyogbm8gc3RhdGUgbWFuYWdlbWVudCBuZWVkZWQgZm9yIGxpdmUgcGlwZWxpbmVzICovCi0gIGlmIChpc19saXZlKQotICAgIHJldHVybjsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcgKG1lc3NhZ2UsICZwZXJjZW50KTsKLQotICBpZiAocGVyY2VudCA8IDEwMCkgewotICAgIC8qIGJ1ZmZlcmluZyBidXN5ICovCi0gICAgaWYgKCFpc19idWZmZXJpbmcpIHsKLSAgICAgIGlzX2J1ZmZlcmluZyA9IFRSVUU7Ci0gICAgICBpZiAodGFyZ2V0X3N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0gICAgICAgIC8qIHdlIHdlcmUgbm90IGJ1ZmZlcmluZyBidXQgUExBWUlORywgUEFVU0UgIHRoZSBwaXBlbGluZS4gKi8KLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9tZXNzYWdlX2FzeW5jX2RvbmUgKEdzdEJ1cyAqYnVzLCBHc3RNZXNzYWdlICptZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gdXNlcl9kYXRhOwotCi0gIGlmICghaXNfYnVmZmVyaW5nKQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIHRhcmdldF9zdGF0ZSk7Ci0gIGVsc2UKLSAgICBnX3RpbWVvdXRfYWRkICg1MDAsIGJ1ZmZlcl90aW1lb3V0LCBwaXBlbGluZSk7Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgICBhcmdjLAotICAgICAgZ2NoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYSBVUkkgKi8KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgJmx0O1VSSSZndDtcbiIsIGFyZ3ZbMF0pOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIHNldCB1cCAqLwotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBsYXliaW4iLCAicGlwZWxpbmUiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocGlwZWxpbmUpLCAidXJpIiwgYXJndlsxXSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHBpcGVsaW5lKSwgImZsYWdzIiwgMHg2OTcgLCBOVUxMKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6YnVmZmVyaW5nIiwKLSAgICAoR0NhbGxiYWNrKSBvbl9tZXNzYWdlX2J1ZmZlcmluZywgcGlwZWxpbmUpOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjphc3luYy1kb25lIiwKLSAgICAoR0NhbGxiYWNrKSBvbl9tZXNzYWdlX2FzeW5jX2RvbmUsIHBpcGVsaW5lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBpc19idWZmZXJpbmcgPSBGQUxTRTsKLSAgdGFyZ2V0X3N0YXRlID0gR1NUX1NUQVRFX1BMQVlJTkc7Ci0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIHN3aXRjaCAocmV0KSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6Ci0gICAgICBpc19saXZlID0gRkFMU0U7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgotICAgICAgZ193YXJuaW5nICgiZmFpbGVkIHRvIFBBVVNFIik7Ci0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKLSAgICAgIGlzX2xpdmUgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBub3cgcnVuICovCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogYWxzbyBjbGVhbiB1cCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICByZXR1cm4gMDsKLX0KLV1dPgotPCEtLSBleGFtcGxlLWVuZCBub3JlYnVmZmVyLmMgYSAtLT4KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU2VlIGhvdyB3ZSBzZXQgdGhlIHBpcGVsaW5lIHRvIHRoZSBQQVVTRUQgc3RhdGUgZmlyc3QuIFdlIHdpbGwgcmVjZWl2ZQotICAgICAgICBidWZmZXJpbmcgbWVzc2FnZXMgZHVyaW5nIHRoZSBwcmVyb2xsIHN0YXRlIHdoZW4gYnVmZmVyaW5nIGlzIG5lZWRlZC4KLSAgICAgICAgV2hlbiB3ZSBhcmUgcHJlcm9sbGVkIChvbl9tZXNzYWdlX2FzeW5jX2RvbmUpIHdlIHNlZSBpZiBidWZmZXJpbmcgaXMKLSAgICAgICAgZ29pbmcgb24sIGlmIG5vdCwgd2Ugc3RhcnQgcGxheWJhY2suIElmIGJ1ZmZlcmluZyB3YXMgZ29pbmcgb24sIHdlIHN0YXJ0Ci0gICAgICAgIGEgdGltZW91dCB0byBwb2xsIHRoZSBidWZmZXJpbmcgc3RhdGUuIElmIHRoZSBlc3RpbWF0ZWQgdGltZSB0byBkb3dubG9hZAotICAgICAgICBpcyBsZXNzIHRoYW4gdGhlIHJlbWFpbmluZyBwbGF5YmFjayB0aW1lLCB3ZSBzdGFydCBwbGF5YmFjay4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbCBiL2RvY3MvbWFudWFsL2FkdmFuY2VkLWNsb2Nrcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMzA2MjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYWR2YW5jZWQtY2xvY2tzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1jbG9ja3MiPgotICA8dGl0bGU+Q2xvY2tzIGFuZCBzeW5jaHJvbml6YXRpb24gaW4gJkdTdHJlYW1lcjs8L3RpdGxlPgotCi0gIDxwYXJhPgotICAgIFdoZW4gcGxheWluZyBjb21wbGV4IG1lZGlhLCBlYWNoIHNvdW5kIGFuZCB2aWRlbyBzYW1wbGUgbXVzdCBiZSBwbGF5ZWQgaW4gYQotICAgIHNwZWNpZmljIG9yZGVyIGF0IGEgc3BlY2lmaWMgdGltZS4gRm9yIHRoaXMgcHVycG9zZSwgR1N0cmVhbWVyIHByb3ZpZGVzIGEKLSAgICBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgdXNlIGNhc2VzOgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE5vbi1saXZlIHNvdXJjZXMgd2l0aCBhY2Nlc3MgZmFzdGVyIHRoYW4gcGxheWJhY2sgcmF0ZS4gVGhpcyBpcwotICAgICAgICAgIHRoZSBjYXNlIHdoZXJlIG9uZSBpcyByZWFkaW5nIG1lZGlhIGZyb20gYSBmaWxlIGFuZCBwbGF5aW5nIGl0Ci0gICAgICAgICAgYmFjayBpbiBhIHN5bmNocm9uaXplZCBmYXNoaW9uLiBJbiB0aGlzIGNhc2UsIG11bHRpcGxlIHN0cmVhbXMgbmVlZAotICAgICAgICAgIHRvIGJlIHN5bmNocm9uaXplZCwgbGlrZSBhdWRpbywgdmlkZW8gYW5kIHN1YnRpdGxlcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQ2FwdHVyZSBhbmQgc3luY2hyb25pemVkIG11eGluZy9taXhpbmcgb2YgbWVkaWEgZnJvbSBtdWx0aXBsZSBsaXZlCi0gICAgICAgICAgc291cmNlcy4gVGhpcyBpcyBhIHR5cGljYWwgdXNlIGNhc2Ugd2hlcmUgeW91IHJlY29yZCBhdWRpbyBhbmQKLSAgICAgICAgICB2aWRlbyBmcm9tIGEgbWljcm9waG9uZS9jYW1lcmEgYW5kIG11eCBpdCBpbnRvIGEgZmlsZSBmb3IgCi0gICAgICAgICAgc3RvcmFnZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgU3RyZWFtaW5nIGZyb20gKHNsb3cpIG5ldHdvcmsgc3RyZWFtcyB3aXRoIGJ1ZmZlcmluZy4gVGhpcyBpcyB0aGUKLSAgICAgICAgICB0eXBpY2FsIHdlYiBzdHJlYW1pbmcgY2FzZSB3aGVyZSB5b3UgYWNjZXNzIGNvbnRlbnQgZnJvbSBhIHN0cmVhbWluZwotICAgICAgICAgIHNlcnZlciB3aXRoIGh0dHAuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIENhcHR1cmUgZnJvbSBsaXZlIHNvdXJjZSBhbmQgYW5kIHBsYXliYWNrIHRvIGxpdmUgc291cmNlIHdpdGgKLSAgICAgICAgICBjb25maWd1cmFibGUgbGF0ZW5jeS4gVGhpcyBpcyB1c2VkIHdoZW4sIGZvciBleGFtcGxlLCBjYXB0dXJlIGZyb20KLSAgICAgICAgICBhIGNhbWVyYSwgYXBwbHkgYW4gZWZmZWN0IGFuZCBkaXNwbGF5IHRoZSByZXN1bHQuIEl0IGlzIGFsc28gdXNlZAotICAgICAgICAgIHdoZW4gc3RyZWFtaW5nIGxvdyBsYXRlbmN5IGNvbnRlbnQgb3ZlciBhIG5ldHdvcmsgd2l0aCBVRFAuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFNpbXVsdGFuZW91cyBsaXZlIGNhcHR1cmUgYW5kIHBsYXliYWNrIGZyb20gcHJlcmVjb3JkZWQgY29udGVudC4KLSAgICAgICAgICBUaGlzIGlzIHVzZWQgaW4gYXVkaW8gcmVjb3JkaW5nIGNhc2VzIHdoZXJlIHlvdSBwbGF5IGEgcHJldmlvdXNseQotICAgICAgICAgIHJlY29yZGVkIGF1ZGlvIGFuZCByZWNvcmQgbmV3IHNhbXBsZXMsIHRoZSBwdXJwb3NlIGlzIHRvIGhhdmUgdGhlCi0gICAgICAgICAgbmV3IGF1ZGlvIHBlcmZlY3RseSBpbiBzeW5jIHdpdGggdGhlIHByZXZpb3VzbHkgcmVjb3JkZWQgZGF0YS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAmR1N0cmVhbWVyOyB1c2VzIGEgPGNsYXNzbmFtZT5Hc3RDbG9jazwvY2xhc3NuYW1lPiBvYmplY3QsIGJ1ZmZlcgotICAgIHRpbWVzdGFtcHMgYW5kIGEgU0VHTUVOVCBldmVudCB0byBzeW5jaHJvbml6ZSBzdHJlYW1zIGluIGEgcGlwZWxpbmUKLSAgICBhcyB3ZSB3aWxsIHNlZSBpbiB0aGUgbmV4dCBzZWN0aW9ucy4KLSAgPC9wYXJhPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1jbG9jay10aW1lLXR5cGVzIiB4cmVmbGFiZWw9IkNsb2NrIHJ1bm5pbmctdGltZSI+Ci0gICAgPHRpdGxlPkNsb2NrIHJ1bm5pbmctdGltZSA8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSW4gYSB0eXBpY2FsIGNvbXB1dGVyLCB0aGVyZSBhcmUgbWFueSBzb3VyY2VzIHRoYXQgY2FuIGJlIHVzZWQgYXMgYQotICAgICAgdGltZSBzb3VyY2UsIGUuZy4sIHRoZSBzeXN0ZW0gdGltZSwgc291bmRjYXJkcywgQ1BVIHBlcmZvcm1hbmNlCi0gICAgICBjb3VudGVycywgLi4uIEZvciB0aGlzIHJlYXNvbiwgdGhlcmUgYXJlIG1hbnkKLSAgICAgIDxjbGFzc25hbWU+R3N0Q2xvY2s8L2NsYXNzbmFtZT4gaW1wbGVtZW50YXRpb25zIGF2YWlsYWJsZSBpbiAmR1N0cmVhbWVyOy4KLSAgICAgIFRoZSBjbG9jayB0aW1lIGRvZXNuJ3QgYWx3YXlzIHN0YXJ0IGZyb20gMCBvciBmcm9tIHNvbWUga25vd24gdmFsdWUuCi0gICAgICBTb21lIGNsb2NrcyBzdGFydCBjb3VudGluZyBmcm9tIHNvbWUga25vd24gc3RhcnQgZGF0ZSwgb3RoZXIgY2xvY2tzIHN0YXJ0Ci0gICAgICBjb3VudGluZyBzaW5jZSBsYXN0IHJlYm9vdCwgZXRjLi4uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQSA8Y2xhc3NuYW1lPkdzdENsb2NrPC9jbGFzc25hbWU+IHJldHVybnMgdGhlCi0gICAgICA8ZW1waGFzaXMgcm9sZT0ic3Ryb25nIj5hYnNvbHV0ZS10aW1lPC9lbXBoYXNpcz4KLSAgICAgIGFjY29yZGluZyB0byB0aGF0IGNsb2NrIHdpdGggPGZ1bmN0aW9uPmdzdF9jbG9ja19nZXRfdGltZSAoKTwvZnVuY3Rpb24+LgotICAgICAgVGhlIGFic29sdXRlLXRpbWUgKG9yIGNsb2NrIHRpbWUpIG9mIGEgY2xvY2sgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLgotICAgICAgRnJvbSB0aGUgYWJzb2x1dGUtdGltZSBpcyBhIDxlbXBoYXNpcyByb2xlPSJzdHJvbmciPnJ1bm5pbmctdGltZTwvZW1waGFzaXM+Ci0gICAgICBjYWxjdWxhdGVkLCB3aGljaCBpcyBzaW1wbHkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHByZXZpb3VzIHNuYXBzaG90Ci0gICAgICBvZiB0aGUgYWJzb2x1dGUtdGltZSBjYWxsZWQgdGhlIDxlbXBoYXNpcyByb2xlPSJzdHJvbmciPmJhc2UtdGltZTwvZW1waGFzaXM+LgotICAgICAgU286Ci0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgcnVubmluZy10aW1lID0gYWJzb2x1dGUtdGltZSAtIGJhc2UtdGltZQotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEEgJkdTdHJlYW1lcjsgPGNsYXNzbmFtZT5Hc3RQaXBlbGluZTwvY2xhc3NuYW1lPiBvYmplY3QgbWFpbnRhaW5zIGEKLSAgICAgIDxjbGFzc25hbWU+R3N0Q2xvY2s8L2NsYXNzbmFtZT4gb2JqZWN0IGFuZCBhIGJhc2UtdGltZSB3aGVuIGl0IGdvZXMKLSAgICAgIHRvIHRoZSBQTEFZSU5HIHN0YXRlLiAgVGhlIHBpcGVsaW5lIGdpdmVzIGEgaGFuZGxlIHRvIHRoZSBzZWxlY3RlZAotICAgICAgPGNsYXNzbmFtZT5Hc3RDbG9jazwvY2xhc3NuYW1lPiB0byBlYWNoIGVsZW1lbnQgaW4gdGhlIHBpcGVsaW5lIGFsb25nCi0gICAgICB3aXRoIHNlbGVjdGVkIGJhc2UtdGltZS4gVGhlIHBpcGVsaW5lIHdpbGwgc2VsZWN0IGEgYmFzZS10aW1lIGluIHN1Y2gKLSAgICAgIGEgd2F5IHRoYXQgdGhlIHJ1bm5pbmctdGltZSByZWZsZWN0cyB0aGUgdG90YWwgdGltZSBzcGVudCBpbiB0aGUKLSAgICAgIFBMQVlJTkcgc3RhdGUuIEFzIGEgcmVzdWx0LCB3aGVuIHRoZSBwaXBlbGluZSBpcyBQQVVTRUQsIHRoZQotICAgICAgcnVubmluZy10aW1lIHN0YW5kcyBzdGlsbC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBCZWNhdXNlIGFsbCBvYmplY3RzIGluIHRoZSBwaXBlbGluZSBoYXZlIHRoZSBzYW1lIGNsb2NrIGFuZCBiYXNlLXRpbWUsCi0gICAgICB0aGV5IGNhbiB0aHVzIGFsbCBjYWxjdWxhdGUgdGhlIHJ1bm5pbmctdGltZSBhY2NvcmRpbmcgdG8gdGhlIHBpcGVsaW5lCi0gICAgICBjbG9jay4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJ1ZmZlci1ydW5uaW5nLXRpbWUiIHhyZWZsYWJlbD0iQnVmZmVyIHJ1bm5pbmctdGltZSI+Ci0gICAgPHRpdGxlPkJ1ZmZlciBydW5uaW5nLXRpbWU8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVG8gY2FsY3VsYXRlIGEgYnVmZmVyIHJ1bm5pbmctdGltZSwgd2UgbmVlZCBhIGJ1ZmZlciB0aW1lc3RhbXAgYW5kCi0gICAgICB0aGUgU0VHTUVOVCBldmVudCB0aGF0IHByZWNlZWRlZCB0aGUgYnVmZmVyLiBGaXJzdCB3ZSBjYW4gY29udmVydAotICAgICAgdGhlIFNFR01FTlQgZXZlbnQgaW50byBhIDxjbGFzc25hbWU+R3N0U2VnbWVudDwvY2xhc3NuYW1lPiBvYmplY3QKLSAgICAgIGFuZCB0aGVuIHdlIGNhbiB1c2UgdGhlCi0gICAgICA8ZnVuY3Rpb24+Z3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdG8KLSAgICAgIHBlcmZvcm0gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBidWZmZXIgcnVubmluZy10aW1lLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFN5bmNocm9uaXphdGlvbiBpcyBub3cgYSBtYXR0ZXIgb2YgbWFraW5nIHN1cmUgdGhhdCBhIGJ1ZmZlciB3aXRoIGEKLSAgICAgIGNlcnRhaW4gcnVubmluZy10aW1lIGlzIHBsYXllZCB3aGVuIHRoZSBjbG9jayByZWFjaGVzIHRoZSBzYW1lCi0gICAgICBydW5uaW5nLXRpbWUuIFVzdWFsbHkgdGhpcyB0YXNrIGlzIGRvbmUgYnkgc2luayBlbGVtZW50cy4gU2luayBhbHNvCi0gICAgICBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBsYXRlbmN5IGNvbmZpZ3VyZWQgaW4gdGhlIHBpcGVsaW5lIGFuZAotICAgICAgYWRkIHRoaXMgdG8gdGhlIGJ1ZmZlciBydW5uaW5nLXRpbWUgYmVmb3JlIHN5bmNocm9uaXppbmcgdG8gdGhlCi0gICAgICBwaXBlbGluZSBjbG9jay4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBOb24tbGl2ZSBzb3VyY2VzIHRpbWVzdGFtcCBidWZmZXJzIHdpdGggYSBydW5uaW5nLXRpbWUgc3RhcnRpbmcKLSAgICAgIGZyb20gMC4gQWZ0ZXIgYSBmbHVzaGluZyBzZWVrLCB0aGV5IHdpbGwgcHJvZHVjZSBidWZmZXJzIGFnYWluCi0gICAgICBmcm9tIGEgcnVubmluZy10aW1lIG9mIDAuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgTGl2ZSBzb3VyY2VzIG5lZWQgdG8gdGltZXN0YW1wIGJ1ZmZlcnMgd2l0aCBhIHJ1bm5pbmctdGltZSBtYXRjaGluZwotICAgICAgdGhlIHBpcGVsaW5lIHJ1bm5pbmctdGltZSB3aGVuIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBidWZmZXIgd2FzCi0gICAgICBjYXB0dXJlZC4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJ1ZmZlci1zdHJlYW0tdGltZSIgeHJlZmxhYmVsPSJCdWZmZXIgc3RyZWFtLXRpbWUiPgotICAgIDx0aXRsZT5CdWZmZXIgc3RyZWFtLXRpbWU8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVGhlIGJ1ZmZlciBzdHJlYW0tdGltZSwgYWxzbyBrbm93biBhcyB0aGUgcG9zaXRpb24gaW4gdGhlIHN0cmVhbSwKLSAgICAgIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgYnVmZmVyIHRpbWVzdGFtcHMgYW5kIHRoZSBwcmVjZWRpbmcgU0VHTUVOVAotICAgICAgZXZlbnQuIEl0IHJlcHJlc2VudHMgdGhlIHRpbWUgaW5zaWRlIHRoZSBtZWRpYSBhcyBhIHZhbHVlIGJldHdlZW4KLSAgICAgIDAgYW5kIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgbWVkaWEuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhlIHN0cmVhbS10aW1lIGlzIHVzZWQgaW46Ci0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBSZXBvcnQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmVhbSB3aXRoIHRoZSBQT1NJVElPTgotICAgICAgICAgICAgcXVlcnkuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgcG9zaXRpb24gdXNlZCBpbiB0aGUgc2VlayBldmVudHMgYW5kIHF1ZXJpZXMuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgcG9zaXRpb24gdXNlZCB0byBzeW5jaHJvbml6ZSBjb250cm9sbGVkIHZhbHVlcy4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgc3RyZWFtLXRpbWUgaXMgbmV2ZXIgdXNlZCB0byBzeW5jaHJvbml6ZSBzdHJlYW1zLCB0aGlzIGlzIG9ubHkKLSAgICAgIGRvbmUgd2l0aCB0aGUgcnVubmluZy10aW1lLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tdGltZS1vdmVydmlldyIgeHJlZmxhYmVsPSJUaW1lIG92ZXJ2aWV3Ij4KLSAgICA8dGl0bGU+VGltZSBvdmVydmlldzwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBIZXJlIGlzIGFuIG92ZXJ2aWV3IG9mIHRoZSB2YXJpb3VzIHRpbWVsaW5lcyB1c2VkIGluICZHU3RyZWFtZXI7LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBpbWFnZSBiZWxvdyByZXByZXNlbnRzIHRoZSBkaWZmZXJlbnQgdGltZXMgaW4gdGhlIHBpcGVsaW5lIHdoZW4KLSAgICAgIHBsYXlpbmcgYSAxMDBtcyBzYW1wbGUgYW5kIHJlcGVhdGluZyB0aGUgcGFydCBiZXR3ZWVuIDUwbXMgYW5kCi0gICAgICAxMDBtcy4gCi0gICAgPC9wYXJhPgotCi0gICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9ImNoYXB0ZXItY2xvY2staW1nIj4KLSAgICAgIDx0aXRsZT4mR1N0cmVhbWVyOyBjbG9jayBhbmQgdmFyaW91cyB0aW1lczwvdGl0bGU+Ci0gICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL2Nsb2Nrcy4maW1hZ2U7IiBmb3JtYXQ9IiZJTUFHRTsiIC8+Ci0gICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICA8L21lZGlhb2JqZWN0PiAgCi0gICAgPC9maWd1cmU+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFlvdSBjYW4gc2VlIGhvdyB0aGUgcnVubmluZy10aW1lIG9mIGEgYnVmZmVyIGFsd2F5cyBpbmNyZW1lbnRzCi0gICAgICBtb25vdG9uaWNhbGx5IGFsb25nIHdpdGggdGhlIGNsb2NrLXRpbWUuIEJ1ZmZlcnMgYXJlIHBsYXllZCB3aGVuIHRoZWlyCi0gICAgICBydW5uaW5nLXRpbWUgaXMgZXF1YWwgdG8gdGhlIGNsb2NrLXRpbWUgLSBiYXNlLXRpbWUuIFRoZSBzdHJlYW0tdGltZQotICAgICAgcmVwcmVzZW50cyB0aGUgcG9zaXRpb24gaW4gdGhlIHN0cmVhbSBhbmQganVtcHMgYmFja3dhcmRzIHdoZW4KLSAgICAgIHJlcGVhdGluZy4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWNsb2Nrcy1wcm92aWRlcnMiPgotICAgIDx0aXRsZT5DbG9jayBwcm92aWRlcnM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQSBjbG9jayBwcm92aWRlciBpcyBhbiBlbGVtZW50IGluIHRoZSBwaXBlbGluZSB0aGF0IGNhbiBwcm92aWRlCi0gICAgICBhIDxjbGFzc25hbWU+R3N0Q2xvY2s8L2NsYXNzbmFtZT4gb2JqZWN0LiBUaGUgY2xvY2sgb2JqZWN0IG5lZWRzIHRvCi0gICAgICByZXBvcnQgYW4gYWJzb2x1dGUtdGltZSB0aGF0IGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB3aGVuIHRoZQotICAgICAgZWxlbWVudCBpcyBpbiB0aGUgUExBWUlORyBzdGF0ZS4gSXQgaXMgYWxsb3dlZCB0byBwYXVzZSB0aGUgY2xvY2sKLSAgICAgIHdoaWxlIHRoZSBlbGVtZW50IGlzIFBBVVNFRC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBDbG9jayBwcm92aWRlcnMgZXhpc3QgYmVjYXVzZSB0aGV5IHBsYXkgYmFjayBtZWRpYSBhdCBzb21lIHJhdGUsIGFuZAotICAgICAgdGhpcyByYXRlIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgc3lzdGVtIGNsb2NrIHJhdGUuIEZvcgotICAgICAgZXhhbXBsZSwgYSBzb3VuZGNhcmQgbWF5IHBsYXliYWNrIGF0IDQ0LDEga0h6LCBidXQgdGhhdCBkb2Vzbid0IG1lYW4KLSAgICAgIHRoYXQgYWZ0ZXIgPGVtcGhhc2lzPmV4YWN0bHk8L2VtcGhhc2lzPiAxIHNlY29uZCA8ZW1waGFzaXM+YWNjb3JkaW5nCi0gICAgICB0byB0aGUgc3lzdGVtIGNsb2NrPC9lbXBoYXNpcz4sIHRoZSBzb3VuZGNhcmQgaGFzIHBsYXllZCBiYWNrIDQ0LjEwMAotICAgICAgc2FtcGxlcy4gVGhpcyBpcyBvbmx5IHRydWUgYnkgYXBwcm94aW1hdGlvbi4gSW4gZmFjdCwgdGhlIGF1ZGlvCi0gICAgICBkZXZpY2UgaGFzIGFuIGludGVybmFsIGNsb2NrIGJhc2VkIG9uIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBwbGF5ZWQKLSAgICAgIHRoYXQgd2UgY2FuIGV4cG9zZS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBJZiBhbiBlbGVtZW50IHdpdGggYW4gaW50ZXJuYWwgY2xvY2sgbmVlZHMgdG8gc3luY2hyb25pemUsIGl0IG5lZWRzCi0gICAgICB0byBlc3RpbWF0ZSB3aGVuIGEgdGltZSBhY2NvcmRpbmcgdG8gdGhlIHBpcGVsaW5lIGNsb2NrIHdpbGwgdGFrZQotICAgICAgcGxhY2UgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcm5hbCBjbG9jay4gVG8gZXN0aW1hdGUgdGhpcywgaXQgbmVlZHMKLSAgICAgIHRvIHNsYXZlIGl0cyBjbG9jayB0byB0aGUgcGlwZWxpbmUgY2xvY2suCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSWYgdGhlIHBpcGVsaW5lIGNsb2NrIGlzIGV4YWN0bHkgdGhlIGludGVybmFsIGNsb2NrIG9mIGFuIGVsZW1lbnQsCi0gICAgICB0aGUgZWxlbWVudCBjYW4gc2tpcCB0aGUgc2xhdmluZyBzdGVwIGFuZCBkaXJlY3RseSB1c2UgdGhlIHBpcGVsaW5lCi0gICAgICBjbG9jayB0byBzY2hlZHVsZSBwbGF5YmFjay4gVGhpcyBjYW4gYmUgYm90aCBmYXN0ZXIgYW5kIG1vcmUKLSAgICAgIGFjY3VyYXRlLgotICAgICAgVGhlcmVmb3JlLCBnZW5lcmFsbHksIGVsZW1lbnRzIHdpdGggYW4gaW50ZXJuYWwgY2xvY2sgbGlrZSBhdWRpbwotICAgICAgaW5wdXQgb3Igb3V0cHV0IGRldmljZXMgd2lsbCBiZSBhIGNsb2NrIHByb3ZpZGVyIGZvciB0aGUgcGlwZWxpbmUuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgV2hlbiB0aGUgcGlwZWxpbmUgZ29lcyB0byB0aGUgUExBWUlORyBzdGF0ZSwgaXQgd2lsbCBnbyBvdmVyIGFsbAotICAgICAgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lIGZyb20gc2luayB0byBzb3VyY2UgYW5kIGFzayBlYWNoIGVsZW1lbnQKLSAgICAgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYSBjbG9jay4gVGhlIGxhc3QgZWxlbWVudCB0aGF0IGNhbiBwcm92aWRlIGEKLSAgICAgIGNsb2NrIHdpbGwgYmUgdXNlZCBhcyB0aGUgY2xvY2sgcHJvdmlkZXIgaW4gdGhlIHBpcGVsaW5lLgotICAgICAgVGhpcyBhbGdvcml0aG0gcHJlZmVycyBhIGNsb2NrIGZyb20gYW4gYXVkaW8gc2luayBpbiBhIHR5cGljYWwKLSAgICAgIHBsYXliYWNrIHBpcGVsaW5lIGFuZCBhIGNsb2NrIGZyb20gc291cmNlIGVsZW1lbnRzIGluIGEgdHlwaWNhbAotICAgICAgY2FwdHVyZSBwaXBlbGluZS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGVyZSBleGlzdCBzb21lIGJ1cyBtZXNzYWdlcyB0byBsZXQgeW91IGtub3cgYWJvdXQgdGhlIGNsb2NrIGFuZAotICAgICAgY2xvY2sgcHJvdmlkZXJzIGluIHRoZSBwaXBlbGluZS4gWW91IGNhbiBzZWUgd2hhdCBjbG9jayBpcyBzZWxlY3RlZAotICAgICAgaW4gdGhlIHBpcGVsaW5lIGJ5IGxvb2tpbmcgYXQgdGhlIE5FV19DTE9DSyBtZXNzYWdlIG9uIHRoZSBidXMuCi0gICAgICBXaGVuIGEgY2xvY2sgcHJvdmlkZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBwaXBlbGluZSwgYSBDTE9DS19MT1NUCi0gICAgICBtZXNzYWdlIGlzIHBvc3RlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBnbyB0byBQQVVTRUQgYW5kIGJhY2sKLSAgICAgIHRvIFBMQVlJTkcgdG8gc2VsZWN0IGEgbmV3IGNsb2NrLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tY2xvY2tzLWxhdGVuY3kiPgotICAgIDx0aXRsZT5MYXRlbmN5PC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBsYXRlbmN5IGlzIHRoZSB0aW1lIGl0IHRha2VzIGZvciBhIHNhbXBsZSBjYXB0dXJlZCBhdCB0aW1lc3RhbXAgWAotICAgICAgdG8gcmVhY2ggdGhlIHNpbmsuIFRoaXMgdGltZSBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSBjbG9jayBpbiB0aGUKLSAgICAgIHBpcGVsaW5lLiBGb3IgcGlwZWxpbmVzIHdoZXJlIHRoZSBvbmx5IGVsZW1lbnRzIHRoYXQgc3luY2hyb25pemUgYWdhaW5zdAotICAgICAgdGhlIGNsb2NrIGFyZSB0aGUgc2lua3MsIHRoZSBsYXRlbmN5IGlzIGFsd2F5cyAwIHNpbmNlIG5vIG90aGVyIGVsZW1lbnQKLSAgICAgIGlzIGRlbGF5aW5nIHRoZSBidWZmZXIuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgRm9yIHBpcGVsaW5lcyB3aXRoIGxpdmUgc291cmNlcywgYSBsYXRlbmN5IGlzIGludHJvZHVjZWQsIG1vc3RseSBiZWNhdXNlCi0gICAgICBvZiB0aGUgd2F5IGEgbGl2ZSBzb3VyY2Ugd29ya3MuIENvbnNpZGVyIGFuIGF1ZGlvIHNvdXJjZSwgaXQgd2lsbCBzdGFydAotICAgICAgY2FwdHVyaW5nIHRoZSBmaXJzdCBzYW1wbGUgYXQgdGltZSAwLiBJZiB0aGUgc291cmNlIHB1c2hlcyBidWZmZXJzIHdpdGgKLSAgICAgIDQ0MTAwIHNhbXBsZXMgYXQgYSB0aW1lIGF0IDQ0MTAwSHogaXQgd2lsbCBoYXZlIGNvbGxlY3RlZCB0aGUgYnVmZmVyIGF0Ci0gICAgICBzZWNvbmQgMS4gIFNpbmNlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciBpcyAwIGFuZCB0aGUgdGltZSBvZiB0aGUKLSAgICAgIGNsb2NrIGlzIG5vdyA+PSAxIHNlY29uZCwgdGhlIHNpbmsgd2lsbCBkcm9wIHRoaXMgYnVmZmVyIGJlY2F1c2UgaXQgaXMKLSAgICAgIHRvbyBsYXRlLiAgV2l0aG91dCBhbnkgbGF0ZW5jeSBjb21wZW5zYXRpb24gaW4gdGhlIHNpbmssIGFsbCBidWZmZXJzIHdpbGwKLSAgICAgIGJlIGRyb3BwZWQuCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWxhdGVuY3ktY29tcGVuc2F0aW9uIj4KLSAgICAgIDx0aXRsZT5MYXRlbmN5IGNvbXBlbnNhdGlvbjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQmVmb3JlIHRoZSBwaXBlbGluZSBnb2VzIHRvIHRoZSBQTEFZSU5HIHN0YXRlLCBpdCB3aWxsLCBpbiBhZGRpdGlvbiB0bwotICAgICAgICBzZWxlY3RpbmcgYSBjbG9jayBhbmQgY2FsY3VsYXRpbmcgYSBiYXNlLXRpbWUsIGNhbGN1bGF0ZSB0aGUgbGF0ZW5jeQotICAgICAgICBpbiB0aGUgcGlwZWxpbmUuIEl0IGRvZXMgdGhpcyBieSBkb2luZyBhIExBVEVOQ1kgcXVlcnkgb24gYWxsIHRoZSBzaW5rcwotICAgICAgICBpbiB0aGUgcGlwZWxpbmUuIFRoZSBwaXBlbGluZSB0aGVuIHNlbGVjdHMgdGhlIG1heGltdW0gbGF0ZW5jeSBpbiB0aGUKLSAgICAgICAgcGlwZWxpbmUgYW5kIGNvbmZpZ3VyZXMgdGhpcyB3aXRoIGEgTEFURU5DWSBldmVudC4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBbGwgc2luayBlbGVtZW50cyB3aWxsIGRlbGF5IHBsYXliYWNrIGJ5IHRoZSB2YWx1ZSBpbiB0aGUgTEFURU5DWSBldmVudC4KLSAgICAgICAgU2luY2UgYWxsIHNpbmtzIGRlbGF5IHdpdGggdGhlIHNhbWUgYW1vdW50IG9mIHRpbWUsIHRoZXkgd2lsbCBiZQotICAgICAgICByZWxhdGl2ZSBpbiBzeW5jLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tbGF0ZW5jeS1keW5hbWljIj4KLSAgICAgIDx0aXRsZT5EeW5hbWljIExhdGVuY3k8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEFkZGluZy9yZW1vdmluZyBlbGVtZW50cyB0by9mcm9tIGEgcGlwZWxpbmUgb3IgY2hhbmdpbmcgZWxlbWVudAotICAgICAgICBwcm9wZXJ0aWVzIGNhbiBjaGFuZ2UgdGhlIGxhdGVuY3kgaW4gYSBwaXBlbGluZS4gQW4gZWxlbWVudCBjYW4KLSAgICAgICAgcmVxdWVzdCBhIGxhdGVuY3kgY2hhbmdlIGluIHRoZSBwaXBlbGluZSBieSBwb3N0aW5nIGEgTEFURU5DWQotICAgICAgICBtZXNzYWdlIG9uIHRoZSBidXMuIFRoZSBhcHBsaWNhdGlvbiBjYW4gdGhlbiBkZWNpZGUgdG8gcXVlcnkgYW5kCi0gICAgICAgIHJlZGlzdHJpYnV0ZSBhIG5ldyBsYXRlbmN5IG9yIG5vdC4gQ2hhbmdpbmcgdGhlIGxhdGVuY3kgaW4gYQotICAgICAgICBwaXBlbGluZSBtaWdodCBjYXVzZSB2aXN1YWwgb3IgYXVkaWJsZSBnbGl0Y2hlcyBhbmQgc2hvdWxkCi0gICAgICAgIHRoZXJlZm9yZSBvbmx5IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uIHdoZW4gaXQgaXMgYWxsb3dlZC4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWwgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmNWQ2Yi4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MTQgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItZGF0YWFjY2VzcyI+Ci0gIDx0aXRsZT5QaXBlbGluZSBtYW5pcHVsYXRpb248L3RpdGxlPgotICA8cGFyYT4KLSAgICBUaGlzIGNoYXB0ZXIgd2lsbCBkaXNjdXNzIGhvdyB5b3UgY2FuIG1hbmlwdWxhdGUgeW91ciBwaXBlbGluZSBpbiBzZXZlcmFsCi0gICAgd2F5cyBmcm9tIHlvdXIgYXBwbGljYXRpb24gb24uIFBhcnRzIG9mIHRoaXMgY2hhcHRlciBhcmUgdmVyeQotICAgIGxvd2xldmVsLCBzbyBiZSBhc3N1cmVkIHRoYXQgeW91J2xsIG5lZWQgc29tZSBwcm9ncmFtbWluZyBrbm93bGVkZ2UKLSAgICBhbmQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgJkdTdHJlYW1lcjsgYmVmb3JlIHlvdSBzdGFydCByZWFkaW5nIHRoaXMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgVG9waWNzIHRoYXQgd2lsbCBiZSBkaXNjdXNzZWQgaGVyZSBpbmNsdWRlIGhvdyB5b3UgY2FuIGluc2VydCBkYXRhIGludG8KLSAgICBhIHBpcGVsaW5lIGZyb20geW91ciBhcHBsaWNhdGlvbiwgaG93IHRvIHJlYWQgZGF0YSBmcm9tIGEgcGlwZWxpbmUsCi0gICAgaG93IHRvIG1hbmlwdWxhdGUgdGhlIHBpcGVsaW5lJ3Mgc3BlZWQsIGxlbmd0aCwgc3RhcnRpbmcgcG9pbnQgYW5kIGhvdwotICAgIHRvIGxpc3RlbiB0byBhIHBpcGVsaW5lJ3MgZGF0YSBwcm9jZXNzaW5nLgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXVzaW5nLXByb2JlcyI+Ci0gICAgPHRpdGxlPlVzaW5nIHByb2JlczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBQcm9iaW5nIGlzIGJlc3QgZW52aXNpb25lZCBhcyBhIHBhZCBsaXN0ZW5lci4gVGVjaG5pY2FsbHksIGEgcHJvYmUgaXMKLSAgICAgIG5vdGhpbmcgbW9yZSB0aGFuIGEgY2FsbGJhY2sgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gYSBwYWQuCi0gICAgICBZb3UgY2FuIGF0dGFjaCBhIHByb2JlIHVzaW5nIDxmdW5jdGlvbj5nc3RfcGFkX2FkZF9wcm9iZSAoKTwvZnVuY3Rpb24+LgotICAgICAgU2ltaWxhcmx5LCBvbmUgY2FuIHVzZSB0aGUKLSAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX3JlbW92ZV9wcm9iZSAoKTwvZnVuY3Rpb24+Ci0gICAgICB0byByZW1vdmUgdGhlIGNhbGxiYWNrIGFnYWluLiBUaGUgcHJvYmUgbm90aWZpZXMgeW91IG9mIGFueSBhY3Rpdml0eQotICAgICAgdGhhdCBoYXBwZW5zIG9uIHRoZSBwYWQsIGxpa2UgYnVmZmVycywgZXZlbnRzIGFuZCBxdWVyaWVzLiBZb3UgY2FuCi0gICAgICBkZWZpbmUgd2hhdCBraW5kIG9mIG5vdGlmaWNhdGlvbnMgeW91IGFyZSBpbnRlcmVzdGVkIGluIHdoZW4geW91Ci0gICAgICBhZGQgdGhlIHByb2JlLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBwcm9iZSBjYW4gbm90aWZ5IHlvdSBvZiB0aGUgZm9sbG93aW5nIGFjdGl2aXR5IG9uIHBhZHM6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEEgYnVmZmVyIGlzIHB1c2hlZCBvciBwdWxsZWQuIFlvdSB3YW50IHRvIHNwZWNpZnkgdGhlCi0gICAgICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBwcm9iZS4gQmVjYXVzZSB0aGUKLSAgICAgICAgICBwYWQgY2FuIGJlIHNjaGVkdWxlZCBpbiBkaWZmZXJlbnQgd2F5cywgaXQgaXMgcG9zc2libGUgdG8gYWxzbwotICAgICAgICAgIHNwZWNpZnkgaW4gd2hhdCBzY2hlZHVsaW5nIG1vZGUgeW91IGFyZSBpbnRlcmVzdGVkIHdpdGggdGhlCi0gICAgICAgICAgb3B0aW9uYWwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0ggYW5kIEdTVF9QQURfUFJPQkVfVFlQRV9QVUxMCi0gICAgICAgICAgZmxhZ3MuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBwcm9iZSB0byBpbnNwZWN0LCBtb2RpZnkgb3IgZHJvcCB0aGUgYnVmZmVyLgotICAgICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWRhdGEtcHJvYmVzIi8+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBIGJ1ZmZlcmxpc3QgaXMgcHVzaGVkLiBVc2UgdGhlIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVJfTElTVAotICAgICAgICAgIHdoZW4gcmVnaXN0ZXJpbmcgdGhlIHByb2JlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbiBldmVudCB0cmF2ZWxzIG92ZXIgYSBwYWQuIFVzZSB0aGUgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0KLSAgICAgICAgICBhbmQgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX1VQU1RSRUFNIGZsYWdzIHRvIHNlbGVjdCBkb3duc3RyZWFtCi0gICAgICAgICAgYW5kIHVwc3RyZWFtIGV2ZW50cy4gVGhlcmUgaXMgYWxzbyBhIGNvbnZlbmllbmNlCi0gICAgICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEggdG8gYmUgbm90aWZpZWQgb2YgZXZlbnRzIGdvaW5nIGJvdGgKLSAgICAgICAgICB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbS4gQnkgZGVmYXVsdCwgZmx1c2ggZXZlbnRzIGRvIG5vdCBjYXVzZQotICAgICAgICAgIGEgbm90aWZpY2F0aW9uLiBZb3UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gKLSAgICAgICAgICB0byByZWNlaXZlIGNhbGxiYWNrcyBmcm9tIGZsdXNoaW5nIGV2ZW50cy4gRXZlbnRzIGFyZSBhbHdheXMKLSAgICAgICAgICBvbmx5IG5vdGlmaWVkIGluIHB1c2ggbW9kZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHByb2JlIHRvIGluc3BlY3QsIG1vZGlmeSBvciBkcm9wIHRoZSBldmVudC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQSBxdWVyeSB0cmF2ZWxzIG92ZXIgYSBwYWQuIFVzZSB0aGUgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0KLSAgICAgICAgICBhbmQgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX1VQU1RSRUFNIGZsYWdzIHRvIHNlbGVjdCBkb3duc3RyZWFtCi0gICAgICAgICAgYW5kIHVwc3RyZWFtIHF1ZXJpZXMuIFRoZSBjb252ZW5pZW5jZSBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfQk9USAotICAgICAgICAgIGNhbiBhbHNvIGJlIHVzZWQgdG8gc2VsZWN0IGJvdGggZGlyZWN0aW9ucy4gUXVlcnkgcHJvYmVzIHdpbGwgYmUKLSAgICAgICAgICBub3RpZmllZCB0d2ljZSwgb25jZSB3aGVuIHRoZSBxdWVyeSB0cmF2ZWxzIHVwc3RyZWFtL2Rvd25zdHJlYW0gYW5kCi0gICAgICAgICAgb25jZSB3aGVuIHRoZSBxdWVyeSByZXN1bHQgaXMgcmV0dXJuZWQuIFlvdSBjYW4gc2VsZWN0IGluIHdoYXQgc3RhZ2UKLSAgICAgICAgICB0aGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0ggYW5kCi0gICAgICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwsIHJlc3BlY3RpdmVseSB3aGVuIHRoZSBxdWVyeSBpcyBwZXJmb3JtZWQKLSAgICAgICAgICBhbmQgd2hlbiB0aGUgcXVlcnkgcmVzdWx0IGlzIHJldHVybmVkLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgcHJvYmUgdG8gaW5zcGVjdCBvciBtb2RpZnkgdGhlIHF1ZXJ5LiBZb3UgY2FuIGFsc28KLSAgICAgICAgICBhbnN3ZXIgdGhlIHF1ZXJ5IGluIHRoZSBwcm9iZSBjYWxsYmFjayBieSBwbGFjaW5nIHRoZSByZXN1bHQgdmFsdWUKLSAgICAgICAgICBpbiB0aGUgcXVlcnkgYW5kIGJ5IHJldHVybmluZyBHU1RfUEFEX1BST0JFX0RST1AgZnJvbSB0aGUgCi0gICAgICAgICAgY2FsbGJhY2suCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEluIGFkZGl0aW9uIHRvIG5vdGlmeWluZyB5b3Ugb2YgZGF0YWZsb3csIHlvdSBjYW4gYWxzbyBhc2sgdGhlCi0gICAgICAgICAgcHJvYmUgdG8gYmxvY2sgdGhlIGRhdGFmbG93IHdoZW4gdGhlIGNhbGxiYWNrIHJldHVybnMuIFRoaXMgaXMKLSAgICAgICAgICBjYWxsZWQgYSBibG9ja2luZyBwcm9iZSBhbmQgaXMgYWN0aXZhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlCi0gICAgICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLIGZsYWcuIFlvdSBjYW4gdXNlIHRoaXMgZmxhZyB3aXRoIHRoZQotICAgICAgICAgIG90aGVyIGZsYWdzIHRvIG9ubHkgYmxvY2sgZGF0YWZsb3cgb24gc2VsZWN0ZWQgYWN0aXZpdHkuIEEgcGFkCi0gICAgICAgICAgYmVjb21lcyB1bmJsb2NrZWQgYWdhaW4gaWYgeW91IHJlbW92ZSB0aGUgcHJvYmUgb3Igd2hlbiB5b3UgcmV0dXJuCi0gICAgICAgICAgR1NUX1BBRF9QUk9CRV9SRU1PVkUgZnJvbSB0aGUgY2FsbGJhY2suIFlvdSBjYW4gbGV0IG9ubHkgdGhlCi0gICAgICAgICAgY3VycmVudGx5IGJsb2NrZWQgaXRlbSBwYXNzIGJ5IHJldHVybmluZyBHU1RfUEFEX1BST0JFX1BBU1MKLSAgICAgICAgICBmcm9tIHRoZSBjYWxsYmFjaywgaXQgd2lsbCBibG9jayBhZ2FpbiBvbiB0aGUgbmV4dCBpdGVtLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEJsb2NraW5nIHByb2JlcyBhcmUgdXNlZCB0byB0ZW1wb3JhcmlseSBibG9jayBwYWRzIGJlY2F1c2UgdGhleQotICAgICAgICAgIGFyZSB1bmxpbmtlZCBvciBiZWNhdXNlIHlvdSBhcmUgZ29pbmcgdG8gdW5saW5rIHRoZW0uIElmIHRoZQotICAgICAgICAgIGRhdGFmbG93IGlzIG5vdCBibG9ja2VkLCB0aGUgcGlwZWxpbmUgd291bGQgZ28gaW50byBhbiBlcnJvcgotICAgICAgICAgIHN0YXRlIGlmIGRhdGEgaXMgcHVzaGVkIG9uIGFuIHVubGlua2VkIHBhZC4gV2Ugd2lsbCBzZSBob3cKLSAgICAgICAgICB0byB1c2UgYmxvY2tpbmcgcHJvYmVzIHRvIHBhcnRpYWxseSBwcmVyb2xsIGEgcGlwZWxpbmUuCi0gICAgICAgICAgU2VlIGFsc28gPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1wcmVyb2xsLXByb2JlcyIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQmUgbm90aWZpZWQgd2hlbiBubyBhY3Rpdml0eSBpcyBoYXBwZW5pbmcgb24gYSBwYWQuIFlvdSBpbnN0YWxsCi0gICAgICAgICAgdGhpcyBwcm9iZSB3aXRoIHRoZSBHU1RfUEFEX1BST0JFX1RZUEVfSURMRSBmbGFnLiBZb3UgY2FuIHNwZWNpZnkKLSAgICAgICAgICBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCBhbmQvb3IgR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwgdG8gCi0gICAgICAgICAgb25seSBiZSBub3RpZmllZCBkZXBlbmRpbmcgb24gdGhlIHBhZCBzY2hlZHVsaW5nIG1vZGUuCi0gICAgICAgICAgVGhlIElETEUgcHJvYmUgaXMgYWxzbyBhIGJsb2NraW5nIHByb2JlIGluIHRoYXQgaXQgd2lsbCBub3QgbGV0Ci0gICAgICAgICAgYW55IGRhdGEgcGFzcyBvbiB0aGUgcGFkIGZvciBhcyBsb25nIGFzIHRoZSBJRExFIHByb2JlIGlzCi0gICAgICAgICAgaW5zdGFsbGVkLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFlvdSBjYW4gdXNlIGlkbGUgcHJvYmVzIHRvIGR5bmFtaWNhbGx5IHJlbGluayBhIHBhZC4gIFdlIHdpbGwgc2VlCi0gICAgICAgICAgaG93IHRvIHVzZSBpZGxlIHByb2JlcyB0byByZXBsYWNlIGFuIGVsZW1lbnQgaW4gdGhlIHBpcGVsaW5lLgotICAgICAgICAgIFNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZHluYW1pYy1waXBlbGluZXMiLz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZGF0YS1wcm9iZXMiPgotICAgICAgPHRpdGxlPkRhdGEgcHJvYmVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBEYXRhIHByb2JlcyBhbGxvdyB5b3UgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGVyZSBpcyBkYXRhIHBhc3NpbmcKLSAgICAgICAgb24gYSBwYWQuIFdoZW4gYWRkaW5nIHRoZSBwcm9iZSwgc3BlY2lmeSB0aGUgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUgotICAgICAgICBhbmQvb3IgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNULiAKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBEYXRhIHByb2JlcyBydW4gaW4gcGlwZWxpbmUgc3RyZWFtaW5nIHRocmVhZCBjb250ZXh0LCBzbyBjYWxsYmFja3MKLSAgICAgICAgc2hvdWxkIHRyeSB0byBub3QgYmxvY2sgYW5kIGdlbmVyYWxseSBub3QgZG8gYW55IHdlaXJkIHN0dWZmLCBzaW5jZQotICAgICAgICB0aGlzIGNvdWxkIGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gcGlwZWxpbmUgcGVyZm9ybWFuY2Ugb3IsIGluIGNhc2UKLSAgICAgICAgb2YgYnVncywgY2F1c2UgZGVhZGxvY2tzIG9yIGNyYXNoZXMuIE1vcmUgcHJlY2lzZWx5LCBvbmUgc2hvdWxkIHVzdWFsbHkKLSAgICAgICAgbm90IGNhbGwgYW55IEdVSS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIHdpdGhpbiBhIHByb2JlIGNhbGxiYWNrLCBub3IgdHJ5Ci0gICAgICAgIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHBpcGVsaW5lLiAgQW4gYXBwbGljYXRpb24gbWF5IHBvc3QgY3VzdG9tCi0gICAgICAgIG1lc3NhZ2VzIG9uIHRoZSBwaXBlbGluZSdzIGJ1cyB0aG91Z2ggdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgbWFpbgotICAgICAgICBhcHBsaWNhdGlvbiB0aHJlYWQgYW5kIGhhdmUgaXQgZG8gdGhpbmdzIGxpa2Ugc3RvcCB0aGUgcGlwZWxpbmUuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gYW55IGNhc2UsIG1vc3QgY29tbW9uIGJ1ZmZlciBvcGVyYXRpb25zCi0gICAgICAgIHRoYXQgZWxlbWVudHMgY2FuIGRvIGluIDxmdW5jdGlvbj5fY2hhaW4gKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMsIGNhbgotICAgICAgICBiZSBkb25lIGluIHByb2JlIGNhbGxiYWNrcyBhcyB3ZWxsLiBUaGUgZXhhbXBsZSBiZWxvdyBnaXZlcyBhIHNob3J0Ci0gICAgICAgIGltcHJlc3Npb24gb24gaG93IHRvIHVzZSB0aGVtLgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCEtLSBleGFtcGxlLWJlZ2luIHByb2JlLmMgLS0+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotY2JfaGF2ZV9kYXRhIChHc3RQYWQgICAgICAgICAgKnBhZCwKLSAgICAgICAgICAgICAgR3N0UGFkUHJvYmVJbmZvICppbmZvLAotICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgIHVzZXJfZGF0YSkKLXsKLSAgZ2ludCB4LCB5OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQxNiAqcHRyLCB0OwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBidWZmZXIgPSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSIChpbmZvKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1ZmZlcik7Ci0KLSAgLyogTWFraW5nIGEgYnVmZmVyIHdyaXRhYmxlIGNhbiBmYWlsIChmb3IgZXhhbXBsZSBpZiBpdAotICAgKiBjYW5ub3QgYmUgY29waWVkIGFuZCBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlKQotICAgKi8KLSAgaWYgKGJ1ZmZlciA9PSBOVUxMKQotICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotCi0gIC8qIE1hcHBpbmcgYSBidWZmZXIgY2FuIGZhaWwgKG5vbi13cml0YWJsZSkgKi8KLSAgaWYgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpKSB7Ci0gICAgcHRyID0gKGd1aW50MTYgKikgbWFwLmRhdGE7Ci0gICAgLyogaW52ZXJ0IGRhdGEgKi8KLSAgICBmb3IgKHkgPSAwOyB5IDwgMjg4OyB5KyspIHsKLSAgICAgIGZvciAoeCA9IDA7IHggPCAzODQgLyAyOyB4KyspIHsKLSAgICAgICAgdCA9IHB0clszODQgLSAxIC0geF07Ci0gICAgICAgIHB0clszODQgLSAxIC0geF0gPSBwdHJbeF07Ci0gICAgICAgIHB0clt4XSA9IHQ7Ci0gICAgICB9Ci0gICAgICBwdHIgKz0gMzg0OwotICAgIH0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICB9Ci0KLSAgR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEgKGluZm8pID0gYnVmZmVyOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1naW50Ci1tYWluIChnaW50ICAgYXJnYywKLSAgICAgIGdjaGFyICphcmd2W10pCi17Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpzaW5rLCAqZmlsdGVyLCAqY3NwOwotICBHc3RDYXBzICpmaWx0ZXJjYXBzOwotICBHc3RQYWQgKnBhZDsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIC8qIGJ1aWxkICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoIm15LXBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsICJzcmMiKTsKLSAgaWYgKHNyYyA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlICd2aWRlb3Rlc3RzcmMnIGVsZW1lbnQiKTsKLQotICBmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgImZpbHRlciIpOwotICBnX2Fzc2VydCAoZmlsdGVyICE9IE5VTEwpOyAvKiBzaG91bGQgYWx3YXlzIGV4aXN0ICovCi0KLSAgY3NwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jb252ZXJ0IiwgImNzcCIpOwotICBpZiAoY3NwID09IE5VTEwpCi0gICAgZ19lcnJvciAoIkNvdWxkIG5vdCBjcmVhdGUgJ3ZpZGVvY29udmVydCcgZWxlbWVudCIpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ4dmltYWdlc2luayIsICJzaW5rIik7Ci0gIGlmIChzaW5rID09IE5VTEwpIHsKLSAgICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgieGltYWdlc2luayIsICJzaW5rIik7Ci0gICAgaWYgKHNpbmsgPT0gTlVMTCkKLSAgICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlIG5laXRoZXIgJ3h2aW1hZ2VzaW5rJyBub3IgJ3hpbWFnZXNpbmsnIGVsZW1lbnQiKTsKLSAgfQotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBmaWx0ZXIsIGNzcCwgc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBmaWx0ZXIsIGNzcCwgc2luaywgTlVMTCk7Ci0gIGZpbHRlcmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1yYXciLAotCQkJICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJSR0IxNiIsCi0JCQkgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAzODQsCi0JCQkgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjg4LAotCQkJICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAyNSwgMSwKLQkJCSAgIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChmaWx0ZXIpLCAiY2FwcyIsIGZpbHRlcmNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyY2Fwcyk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGNiX2hhdmVfZGF0YSwgTlVMTCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgLyogcnVuICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAvKiB3YWl0IHVudGlsIGl0J3MgdXAgYW5kIHJ1bm5pbmcgb3IgZmFpbGVkICovCi0gIGlmIChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBnbyBpbnRvIFBMQVlJTkcgc3RhdGUiKTsKLSAgfQotCi0gIGdfcHJpbnQgKCJSdW5uaW5nIC4uLlxuIik7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogZXhpdCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gMDsKLX0KLV1dPgotPCEtLSBleGFtcGxlLWVuZCBwcm9iZS5jIC0tPgotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxwYXJhPgotICAgICAgICBDb21wYXJlIHRoYXQgb3V0cHV0IHdpdGggdGhlIG91dHB1dCBvZiA8cXVvdGU+Z3N0LWxhdW5jaC0xLjAKLSAgICAgICAgdmlkZW90ZXN0c3JjICEgeHZpbWFnZXNpbms8L3F1b3RlPiwganVzdCBzbyB5b3Uga25vdyB3aGF0IHlvdSdyZQotICAgICAgICBsb29raW5nIGZvci4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBTdHJpY3RseSBzcGVha2luZywgYSBwYWQgcHJvYmUgY2FsbGJhY2sgaXMgb25seSBhbGxvd2VkIHRvIG1vZGlmeSB0aGUKLSAgICAgICAgYnVmZmVyIGNvbnRlbnQgaWYgdGhlIGJ1ZmZlciBpcyB3cml0YWJsZS4gIFdoZXRoZXIgdGhpcyBpcyB0aGUgY2FzZSBvcgotICAgICAgICBub3QgZGVwZW5kcyBhIGxvdCBvbiB0aGUgcGlwZWxpbmUgYW5kIHRoZSBlbGVtZW50cyBpbnZvbHZlZC4gIE9mdGVuCi0gICAgICAgIGVub3VnaCwgdGhpcyBpcyB0aGUgY2FzZSwgYnV0IHNvbWV0aW1lcyBpdCBpcyBub3QsIGFuZCBpZiBpdCBpcyBub3QKLSAgICAgICAgdGhlbiB1bmV4cGVjdGVkIG1vZGlmaWNhdGlvbiBvZiB0aGUgZGF0YSBvciBtZXRhZGF0YSBjYW4gaW50cm9kdWNlCi0gICAgICAgIGJ1Z3MgdGhhdCBhcmUgdmVyeSBoYXJkIHRvIGRlYnVnIGFuZCB0cmFjayBkb3duLiBZb3UgY2FuIGNoZWNrIGlmIGEKLSAgICAgICAgYnVmZmVyIGlzIHdyaXRhYmxlIHdpdGggPGZ1bmN0aW9uPmdzdF9idWZmZXJfaXNfd3JpdGFibGUgKCk8L2Z1bmN0aW9uPi4KLSAgICAgICAgU2luY2UgeW91IGNhbiBwYXNzIGJhY2sgYSBkaWZmZXJlbnQgYnVmZmVyIHRoYW4gdGhlIG9uZSBwYXNzZWQgaW4sCi0gICAgICAgIGl0IGlzIGEgZ29vZCBpZGVhIHRvIG1ha2UgdGhlIGJ1ZmZlciB3cml0YWJsZSBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAgICAgd2l0aCA8ZnVuY3Rpb24+Z3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICgpPC9mdW5jdGlvbj4uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgUGFkIHByb2JlcyBhcmUgc3VpdGVkIGJlc3QgZm9yIGxvb2tpbmcgYXQgZGF0YSBhcyBpdCBwYXNzZXMgdGhyb3VnaAotICAgICAgICB0aGUgcGlwZWxpbmUuIElmIHlvdSBuZWVkIHRvIG1vZGlmeSBkYXRhLCB5b3Ugc2hvdWxkIGJldHRlciB3cml0ZSB5b3VyCi0gICAgICAgIG93biBHU3RyZWFtZXIgZWxlbWVudC4gQmFzZSBjbGFzc2VzIGxpa2UgR3N0QXVkaW9GaWx0ZXIsIEdzdFZpZGVvRmlsdGVyIG9yCi0gICAgICAgIEdzdEJhc2VUcmFuc2Zvcm0gbWFrZSB0aGlzIGZhaXJseSBlYXN5LgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBqdXN0IHdhbnQgdG8gaW5zcGVjdCBidWZmZXJzIGFzIHRoZXkgcGFzcyB0aHJvdWdoIHRoZSBwaXBlbGluZSwKLSAgICAgICAgeW91IGRvbid0IGV2ZW4gbmVlZCB0byBzZXQgdXAgcGFkIHByb2Jlcy4gWW91IGNvdWxkIGFsc28ganVzdCBpbnNlcnQKLSAgICAgICAgYW4gaWRlbnRpdHkgZWxlbWVudCBpbnRvIHRoZSBwaXBlbGluZSBhbmQgY29ubmVjdCB0byBpdHMgImhhbmRvZmYiCi0gICAgICAgIHNpZ25hbC4gVGhlIGlkZW50aXR5IGVsZW1lbnQgYWxzbyBwcm92aWRlcyBhIGZldyB1c2VmdWwgZGVidWdnaW5nIHRvb2xzCi0gICAgICAgIGxpa2UgdGhlICJkdW1wIiBwcm9wZXJ0eSBvciB0aGUgImxhc3QtbWVzc2FnZSIgcHJvcGVydHkgKHRoZSBsYXR0ZXIgaXMKLSAgICAgICAgZW5hYmxlZCBieSBwYXNzaW5nIHRoZSAnLXYnIHN3aXRjaCB0byBnc3QtbGF1bmNoIGFuZCBieSBzZXR0aW5nIHRoZQotICAgICAgICBzaWxlbnQgcHJvcGVydHkgb24gdGhlIGlkZW50aXR5IHRvIEZBTFNFKS4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLXByZXJvbGwtcHJvYmVzIj4KLSAgICAgIDx0aXRsZT5QbGF5IGEgcmVnaW9uIG9mIGEgbWVkaWEgZmlsZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gdGhpcyBleGFtcGxlIHdlIHdpbGwgc2hvdyB5b3UgaG93IHRvIHBsYXkgYmFjayBhIHJlZ2lvbiBvZgotICAgICAgICBhIG1lZGlhIGZpbGUuIFRoZSBnb2FsIGlzIHRvIG9ubHkgcGxheSB0aGUgcGFydCBvZiBhIGZpbGUKLSAgICAgICAgZnJvbSAyIHNlY29uZHMgdG8gNSBzZWNvbmRzIGFuZCB0aGVuIEVPUy4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiBhIGZpcnN0IHN0ZXAgd2Ugd2lsbCBzZXQgYSB1cmlkZWNvZGViaW4gZWxlbWVudCB0byB0aGUgUEFVU0VECi0gICAgICAgIHN0YXRlIGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBibG9jayBhbGwgdGhlIHNvdXJjZSBwYWRzIHRoYXQgYXJlCi0gICAgICAgIGNyZWF0ZWQuIFdoZW4gYWxsIHRoZSBzb3VyY2UgcGFkcyBhcmUgYmxvY2tlZCwgd2UgaGF2ZSBkYXRhIG9uCi0gICAgICAgIGFsbCBzb3VyY2UgcGFkcyBhbmQgd2Ugc2F5IHRoYXQgdGhlIHVyaWRlY29kZWJpbiBpcyBwcmVyb2xsZWQuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gYSBwcmVyb2xsZWQgcGlwZWxpbmUgd2UgY2FuIGFzayBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBtZWRpYQotICAgICAgICBhbmQgd2UgY2FuIGFsc28gcGVyZm9ybSBzZWVrcy4gV2UgYXJlIGludGVyZXN0ZWQgaW4gcGVyZm9ybWluZyBhCi0gICAgICAgIHNlZWsgb3BlcmF0aW9uIG9uIHRoZSBwaXBlbGluZSB0byBzZWxlY3QgdGhlIHJhbmdlIG9mIG1lZGlhCi0gICAgICAgIHRoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQWZ0ZXIgd2UgY29uZmlndXJlIHRoZSByZWdpb24gd2UgYXJlIGludGVyZXN0ZWQgaW4sIHdlIGNhbiBsaW5rCi0gICAgICAgIHRoZSBzaW5rIGVsZW1lbnQsIHVuYmxvY2sgdGhlIHNvdXJjZSBwYWRzIGFuZCBzZXQgdGhlIHBpcGVsaW5lIHRvCi0gICAgICAgIHRoZSBwbGF5aW5nIHN0YXRlLiBZb3Ugd2lsbCBzZWUgdGhhdCBleGFjdGx5IHRoZSByZXF1ZXN0ZWQKLSAgICAgICAgcmVnaW9uIGlzIHBsYXllZCBieSB0aGUgc2luayBiZWZvcmUgaXQgZ29lcyB0byBFT1MuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV2hhdCBmb2xsb3dzIGlzIGFuIGV4YW1wbGUgYXBwbGljYXRpb24gdGhhdCBsb29zbHkgZm9sbG93cyB0aGlzCi0gICAgICAgIGFsZ29yaXRobS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhLS0gZXhhbXBsZS1iZWdpbiBibG9ja3Byb2JlLmMgLS0+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyBHTWFpbkxvb3AgKmxvb3A7Ci1zdGF0aWMgdm9sYXRpbGUgZ2ludCBjb3VudGVyOwotc3RhdGljIEdzdEJ1cyAqYnVzOwotc3RhdGljIGdib29sZWFuIHByZXJvbGxlZCA9IEZBTFNFOwotc3RhdGljIEdzdFBhZCAqc2lua3BhZDsKLQotc3RhdGljIHZvaWQKLWRlY19jb3VudGVyIChHc3RFbGVtZW50ICogcGlwZWxpbmUpCi17Ci0gIGlmIChwcmVyb2xsZWQpCi0gICAgcmV0dXJuOwotCi0gIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmY291bnRlcikpIHsKLSAgICAvKiBhbGwgcHJvYmVzIGJsb2NrZWQgYW5kIG5vLW1vcmUtcGFkcyBzaWduYWxlZCwgcG9zdAotICAgICAqIG1lc3NhZ2Ugb24gdGhlIGJ1cy4gKi8KLSAgICBwcmVyb2xsZWQgPSBUUlVFOwotCi0gICAgZ3N0X2J1c19wb3N0IChidXMsIGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbiAoCi0gICAgICAgICAgR1NUX09CSkVDVF9DQVNUIChwaXBlbGluZSksCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJFeFByZXJvbGxlZCIpKSk7Ci0gIH0KLX0KLQotLyogY2FsbGVkIHdoZW4gYSBzb3VyY2UgcGFkIG9mIHVyaWRlY29kZWJpbiBpcyBibG9ja2VkICovCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWNiX2Jsb2NrZWQgKEdzdFBhZCAgICAgICAgICAqcGFkLAotICAgICAgICAgICAgR3N0UGFkUHJvYmVJbmZvICppbmZvLAotICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gR1NUX0VMRU1FTlQgKHVzZXJfZGF0YSk7Ci0KLSAgaWYgKHByZXJvbGxlZCkKLSAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9SRU1PVkU7Ci0KLSAgZGVjX2NvdW50ZXIgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotLyogY2FsbGVkIHdoZW4gdXJpZGVjb2RlYmluIGhhcyBhIG5ldyBwYWQgKi8KLXN0YXRpYyB2b2lkCi1jYl9wYWRfYWRkZWQgKEdzdEVsZW1lbnQgKmVsZW1lbnQsCi0gICAgICAgICAgICAgIEdzdFBhZCAgICAgKnBhZCwKLSAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgdXNlcl9kYXRhKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSA9IEdTVF9FTEVNRU5UICh1c2VyX2RhdGEpOwotCi0gIGlmIChwcmVyb2xsZWQpCi0gICAgcmV0dXJuOwotCi0gIGdfYXRvbWljX2ludF9pbmMgKCZjb3VudGVyKTsKLQotICBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSwKLSAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBjYl9ibG9ja2VkLCBwaXBlbGluZSwgTlVMTCk7Ci0KLSAgLyogdHJ5IHRvIGxpbmsgdG8gdGhlIHZpZGVvIHBhZCAqLwotICBnc3RfcGFkX2xpbmsgKHBhZCwgc2lua3BhZCk7Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIHVyaWRlY29kZWJpbiBoYXMgY3JlYXRlZCBhbGwgcGFkcyAqLwotc3RhdGljIHZvaWQKLWNiX25vX21vcmVfcGFkcyAoR3N0RWxlbWVudCAqZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgdXNlcl9kYXRhKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSA9IEdTVF9FTEVNRU5UICh1c2VyX2RhdGEpOwotCi0gIGlmIChwcmVyb2xsZWQpCi0gICAgcmV0dXJuOwotCi0gIGRlY19jb3VudGVyIChwaXBlbGluZSk7Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIGEgbmV3IG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMgKi8KLXN0YXRpYyB2b2lkCi1jYl9tZXNzYWdlIChHc3RCdXMgICAgICpidXMsCi0gICAgICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlLAotICAgICAgICAgICAgZ3BvaW50ZXIgICAgdXNlcl9kYXRhKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSA9IEdTVF9FTEVNRU5UICh1c2VyX2RhdGEpOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgotICAgICAgZ19wcmludCAoIndlIHJlY2VpdmVkIGFuIGVycm9yIVxuIik7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgZ19wcmludCAoIndlIHJlYWNoZWQgRU9TXG4iKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTjoKLSAgICB7Ci0gICAgICBpZiAoZ3N0X21lc3NhZ2VfaGFzX25hbWUgKG1lc3NhZ2UsICJFeFByZXJvbGxlZCIpKSB7Ci0gICAgICAgIC8qIGl0J3Mgb3VyIG1lc3NhZ2UgKi8KLSAgICAgICAgZ19wcmludCAoIndlIGFyZSBhbGwgcHJlcm9sbGVkLCBkbyBzZWVrXG4iKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2VlayAocGlwZWxpbmUsCi0gICAgICAgICAgICAxLjAsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFLAotICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDIgKiBHU1RfU0VDT05ELAotICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDUgKiBHU1RfU0VDT05EKTsKLQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgICBhcmdjLAotICAgICAgZ2NoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpjc3AsICp2cywgKnNpbms7Ci0KLSAgLyogaW5pdCBHU3RyZWFtZXIgKi8KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICBpZiAoYXJnYyA8IDIpIHsKLSAgICBnX3ByaW50ICgidXNhZ2U6ICVzIDx1cmk+IiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogYnVpbGQgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgibXktcGlwZWxpbmUiKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2UiLCAoR0NhbGxiYWNrKSBjYl9tZXNzYWdlLAotICAgICAgcGlwZWxpbmUpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVyaWRlY29kZWJpbiIsICJzcmMiKTsKLSAgaWYgKHNyYyA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlICd1cmlkZWNvZGViaW4nIGVsZW1lbnQiKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgInVyaSIsIGFyZ3ZbMV0sIE5VTEwpOwotCi0gIGNzcCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvY29udmVydCIsICJjc3AiKTsKLSAgaWYgKGNzcCA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlICd2aWRlb2NvbnZlcnQnIGVsZW1lbnQiKTsKLQotICB2cyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvc2NhbGUiLCAidnMiKTsKLSAgaWYgKGNzcCA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlICd2aWRlb3NjYWxlJyBlbGVtZW50Iik7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG92aWRlb3NpbmsiLCAic2luayIpOwotICBpZiAoc2luayA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlICdhdXRvdmlkZW9zaW5rJyBlbGVtZW50Iik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGNzcCwgdnMsIHNpbmssIE5VTEwpOwotCi0gIC8qIGNhbid0IGxpbmsgc3JjIHlldCwgaXQgaGFzIG5vIHBhZHMgKi8KLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChjc3AsIHZzLCBzaW5rLCBOVUxMKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGNzcCwgInNpbmsiKTsKLQotICAvKiBmb3IgZWFjaCBwYWQgYmxvY2sgdGhhdCBpcyBpbnN0YWxsZWQsIHdlIHdpbGwgaW5jcmVtZW50Ci0gICAqIHRoZSBjb3VudGVyLiBmb3IgZWFjaCBwYWQgYmxvY2sgdGhhdCBpcyBzaWduYWxlZCwgd2UKLSAgICogZGVjcmVtZW50IHRoZSBjb3VudGVyLiBXaGVuIHRoZSBjb3VudGVyIGlzIDAgd2UgcG9zdAotICAgKiBhbiBhcHAgbWVzc2FnZSB0byB0ZWxsIHRoZSBhcHAgdGhhdCBhbGwgcGFkcyBhcmUKLSAgICogYmxvY2tlZC4gU3RhcnQgd2l0aCAxIHRoYXQgaXMgZGVjcmVtZW50ZWQgd2hlbiBuby1tb3JlLXBhZHMKLSAgICogaXMgc2lnbmFsZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugb25seSBwb3N0IHRoZSBtZXNzYWdlCi0gICAqIGFmdGVyIG5vLW1vcmUtcGFkcyAqLwotICBnX2F0b21pY19pbnRfc2V0ICgmY291bnRlciwgMSk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoc3JjLCAicGFkLWFkZGVkIiwKLSAgICAgIChHQ2FsbGJhY2spIGNiX3BhZF9hZGRlZCwgcGlwZWxpbmUpOwotICBnX3NpZ25hbF9jb25uZWN0IChzcmMsICJuby1tb3JlLXBhZHMiLAotICAgICAgKEdDYWxsYmFjaykgY2Jfbm9fbW9yZV9wYWRzLCBwaXBlbGluZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCi0gIHJldHVybiAwOwotfQotXV0+Ci08IS0tIGV4YW1wbGUtZW5kIGJsb2NrcHJvYmUuYyAtLT4KLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgTm90ZSB0aGF0IHdlIHVzZSBhIGN1c3RvbSBhcHBsaWNhdGlvbiBtZXNzYWdlIHRvIHNpZ25hbCB0aGUKLSAgICAgICAgbWFpbiB0aHJlYWQgdGhhdCB0aGUgdXJpZGVjaWRlYmluIGlzIHByZXJvbGxlZC4gVGhlIG1haW4gdGhyZWFkCi0gICAgICAgIHdpbGwgdGhlbiBpc3N1ZSBhIGZsdXNoaW5nIHNlZWsgdG8gdGhlIHJlcXVlc3RlZCByZWdpb24uIFRoZQotICAgICAgICBmbHVzaCB3aWxsIHRlbXBvcmFyaWx5IHVuYmxvY2sgdGhlIHBhZCBhbmQgcmVibG9jayB0aGVtIHdoZW4KLSAgICAgICAgbmV3IGRhdGEgYXJyaXZlcyBhZ2Fpbi4gV2UgZGV0ZWN0IHRoaXMgc2Vjb25kIGJsb2NrIHRvIHJlbW92ZQotICAgICAgICB0aGUgcHJvYmVzLiBUaGVuIHdlIHNldCB0aGUgcGlwZWxpbmUgdG8gUExBWUlORyBhbmQgaXQgc2hvdWxkCi0gICAgICAgIHBsYXkgZnJvbSAyIHRvIDUgc2Vjb25kcywgdGhlbiBFT1MgYW5kIGV4aXQgdGhlIGFwcGxpY2F0aW9uLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWRhdGEtc3Bvb2YiPgotICAgIDx0aXRsZT5NYW51YWxseSBhZGRpbmcgb3IgcmVtb3ZpbmcgZGF0YSBmcm9tL3RvIGEgcGlwZWxpbmU8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgTWFueSBwZW9wbGUgaGF2ZSBleHByZXNzZWQgdGhlIHdpc2ggdG8gdXNlIHRoZWlyIG93biBzb3VyY2VzIHRvIGluamVjdAotICAgICAgZGF0YSBpbnRvIGEgcGlwZWxpbmUuIFNvbWUgcGVvcGxlIGhhdmUgYWxzbyBleHByZXNzZWQgdGhlIHdpc2ggdG8gZ3JhYgotICAgICAgdGhlIG91dHB1dCBpbiBhIHBpcGVsaW5lIGFuZCB0YWtlIGNhcmUgb2YgdGhlIGFjdHVhbCBvdXRwdXQgaW5zaWRlCi0gICAgICB0aGVpciBhcHBsaWNhdGlvbi4gV2hpbGUgZWl0aGVyIG9mIHRoZXNlIG1ldGhvZHMgYXJlIHN0cm9uZ2x5Ci0gICAgICBkaXNjb3VyYWdlZCwgJkdTdHJlYW1lcjsgb2ZmZXJzIHN1cHBvcnQgZm9yIHRoaXMuCi0gICAgICA8ZW1waGFzaXM+QmV3YXJlISBZb3UgbmVlZCB0byBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48L2VtcGhhc2lzPiBTaW5jZQotICAgICAgeW91IGRvbid0IGhhdmUgYW55IHN1cHBvcnQgZnJvbSBhIGJhc2UgY2xhc3MgeW91IG5lZWQgdG8gdGhvcm91Z2hseQotICAgICAgdW5kZXJzdGFuZCBzdGF0ZSBjaGFuZ2VzIGFuZCBzeW5jaHJvbml6YXRpb24uIElmIGl0IGRvZXNuJ3Qgd29yaywKLSAgICAgIHRoZXJlIGFyZSBhIG1pbGxpb24gd2F5cyB0byBzaG9vdCB5b3Vyc2VsZiBpbiB0aGUgZm9vdC4gIEl0J3MgYWx3YXlzCi0gICAgICBiZXR0ZXIgdG8gc2ltcGx5IHdyaXRlIGEgcGx1Z2luIGFuZCBoYXZlIHRoZSBiYXNlIGNsYXNzIG1hbmFnZSBpdC4KLSAgICAgIFNlZSB0aGUgUGx1Z2luIFdyaXRlcidzIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMuIEFsc28KLSAgICAgIHNlZSB0aGUgbmV4dCBzZWN0aW9uLCB3aGljaCB3aWxsIGV4cGxhaW4gaG93IHRvIGVtYmVkIHBsdWdpbnMgc3RhdGljYWxseQotICAgICAgaW4geW91ciBhcHBsaWNhdGlvbi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGVyZSdzIHR3byBwb3NzaWJsZSBlbGVtZW50cyB0aGF0IHlvdSBjYW4gdXNlIGZvciB0aGUgYWJvdmUtbWVudGlvbmVkCi0gICAgICBwdXJwb3Nlcy4gVGhvc2UgYXJlIGNhbGxlZCA8cXVvdGU+YXBwc3JjPC9xdW90ZT4gKGFuIGltYWdpbmFyeSBzb3VyY2UpCi0gICAgICBhbmQgPHF1b3RlPmFwcHNpbms8L3F1b3RlPiAoYW4gaW1hZ2luYXJ5IHNpbmspLiBUaGUgc2FtZSBtZXRob2QgYXBwbGllcwotICAgICAgdG8gZWFjaCBvZiB0aG9zZSBlbGVtZW50cy4gSGVyZSwgd2Ugd2lsbCBkaXNjdXNzIGhvdyB0byB1c2UgdGhvc2UKLSAgICAgIGVsZW1lbnRzIHRvIGluc2VydCAodXNpbmcgYXBwc3JjKSBvciBncmFiICh1c2luZyBhcHBzaW5rKSBkYXRhIGZyb20gYQotICAgICAgcGlwZWxpbmUsIGFuZCBob3cgdG8gc2V0IG5lZ290aWF0aW9uLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEJvdGggYXBwc3JjIGFuZCBhcHBzaW5rIHByb3ZpZGUgMiBzZXRzIG9mIEFQSS4gT25lIEFQSSB1c2VzIHN0YW5kYXJkCi0gICAgICBHT2JqZWN0IChhY3Rpb24pIHNpZ25hbHMgYW5kIHByb3BlcnRpZXMuIFRoZSBzYW1lIEFQSSBpcyBhbHNvCi0gICAgICBhdmFpbGFibGUgYXMgYSByZWd1bGFyIEMgYXBpLiBUaGUgQyBhcGkgaXMgbW9yZSBwZXJmb3JtYW50IGJ1dAotICAgICAgcmVxdWlyZXMgeW91IHRvIGxpbmsgdG8gdGhlIGFwcCBsaWJyYXJ5IGluIG9yZGVyIHRvIHVzZSB0aGUgZWxlbWVudHMuCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLXNwb29mLWFwcHNyYyI+Ci0gICAgICA8dGl0bGU+SW5zZXJ0aW5nIGRhdGEgd2l0aCBhcHBzcmM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEZpcnN0IHdlIGxvb2sgYXQgc29tZSBleGFtcGxlcyBmb3IgYXBwc3JjLCB3aGljaCBsZXRzIHlvdSBpbnNlcnQgZGF0YQotICAgICAgICBpbnRvIHRoZSBwaXBlbGluZSBmcm9tIHRoZSBhcHBsaWNhdGlvbi4gQXBwc3JjIGhhcyBzb21lIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgb3B0aW9ucyB0aGF0IGRlZmluZSBob3cgaXQgd2lsbCBvcGVyYXRlLiBZb3Ugc2hvdWxkIGRlY2lkZSBhYm91dCB0aGUKLSAgICAgICAgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zOgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgV2lsbCB0aGUgYXBwc3JjIG9wZXJhdGUgaW4gcHVzaCBvciBwdWxsIG1vZGUuIFRoZSBzdHJlYW0tdHlwZQotICAgICAgICAgICAgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGlzLiBzdHJlYW0tdHlwZSBvZgotICAgICAgICAgICAgPHF1b3RlPnJhbmRvbS1hY2Nlc3M8L3F1b3RlPiB3aWxsIGFjdGl2YXRlIHB1bGwgbW9kZSBzY2hlZHVsaW5nCi0gICAgICAgICAgICB3aGlsZSB0aGUgb3RoZXIgc3RyZWFtLXR5cGVzIGFjdGl2YXRlIHB1c2ggbW9kZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBjYXBzIG9mIHRoZSBidWZmZXJzIHRoYXQgYXBwc3JjIHdpbGwgcHVzaCBvdXQuIFRoaXMgbmVlZHMgdG8KLSAgICAgICAgICAgIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgY2FwcyBwcm9wZXJ0eS4gVGhlIGNhcHMgbXVzdCBiZSBzZXQgdG8gYQotICAgICAgICAgICAgZml4ZWQgY2FwcyBhbmQgd2lsbCBiZSB1c2VkIHRvIG5lZ290aWF0ZSBhIGZvcm1hdCBkb3duc3RyZWFtLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgdGhlIGFwcHNyYyBvcGVyYXRlcyBpbiBsaXZlIG1vZGUgb3Igbm90LiBUaGlzIGNhbiBiZSBjb25maWd1cmVkCi0gICAgICAgICAgICB3aXRoIHRoZSBpcy1saXZlIHByb3BlcnR5LiBXaGVuIG9wZXJhdGluZyBpbiBsaXZlLW1vZGUgaXQgaXMKLSAgICAgICAgICAgIGltcG9ydGFudCB0byBjb25maWd1cmUgdGhlIG1pbi1sYXRlbmN5IGFuZCBtYXgtbGF0ZW5jeSBpbiBhcHBzcmMuCi0gICAgICAgICAgICBUaGUgbWluLWxhdGVuY3kgc2hvdWxkIGJlIHNldCB0byB0aGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgYmV0d2VlbgotICAgICAgICAgICAgY2FwdHVyaW5nIGEgYnVmZmVyIGFuZCB3aGVuIGl0IGlzIHB1c2hlZCBpbnNpZGUgYXBwc3JjLgotICAgICAgICAgICAgSW4gbGl2ZSBtb2RlLCB5b3Ugc2hvdWxkIHRpbWVzdGFtcCB0aGUgYnVmZmVycyB3aXRoIHRoZSBwaXBlbGluZQotICAgICAgICAgICAgcnVubmluZy10aW1lIHdoZW4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGJ1ZmZlciB3YXMgY2FwdHVyZWQgYmVmb3JlCi0gICAgICAgICAgICBmZWVkaW5nIHRoZW0gdG8gYXBwc3JjLiBZb3UgY2FuIGxldCBhcHBzcmMgZG8gdGhlIHRpbWVzdGFwaW5nIHdpdGgKLSAgICAgICAgICAgIHRoZSBkby10aW1lc3RhbXAgcHJvcGVydHkgKGJ1dCB0aGVuIHRoZSBtaW4tbGF0ZW5jeSBtdXN0IGJlIHNldAotICAgICAgICAgICAgdG8gMCBiZWNhdXNlIGl0IHRpbWVzdGFtcHMgYmFzZWQgb24gdGhlIHJ1bm5pbmctdGltZSB3aGVuIHRoZSBidWZmZXIKLSAgICAgICAgICAgIGVudGVyZWQgYXBwc3JjKS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIFNFR01FTlQgZXZlbnQgdGhhdCBhcHBzcmMgd2lsbCBwdXNoLiBUaGUgZm9ybWF0Ci0gICAgICAgICAgICBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIHJ1bm5pbmctdGltZSBvZiB0aGUgYnVmZmVycyB3aWxsCi0gICAgICAgICAgICBiZSBjYWxjdWxhdGVkIHNvIHlvdSBtdXN0IGJlIHN1cmUgeW91IHVuZGVyc3RhbmQgdGhpcy4gRm9yCi0gICAgICAgICAgICBsaXZlIHNvdXJjZXMgeW91IHByb2JhYmx5IHdhbnQgdG8gc2V0IHRoZSBmb3JtYXQgcHJvcGVydHkgdG8KLSAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRS4gRm9yIG5vbi1saXZlIHNvdXJjZSBpdCBkZXBlbmRzIG9uIHRoZSBtZWRpYSB0eXBlCi0gICAgICAgICAgICB0aGF0IHlvdSBhcmUgaGFuZGxpbmcuIElmIHlvdSBwbGFuIHRvIHRpbWVzdGFtcCB0aGUgYnVmZmVycywgeW91Ci0gICAgICAgICAgICBzaG91bGQgcHJvYmFibHkgcHV0IGEgR1NUX0ZPUk1BVF9USU1FIGZvcm1hdCwgb3RoZXJ3aXNlCi0gICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTIG1pZ2h0IGJlIGFwcHJvcHJpYXRlLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgYXBwc3JjIG9wZXJhdGVzIGluIHJhbmRvbS1hY2Nlc3MgbW9kZSwgaXQgaXMgaW1wb3J0YW50IHRvIGNvbmZpZ3VyZQotICAgICAgICAgICAgdGhlIHNpemUgcHJvcGVydHkgb2YgYXBwc3JjIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyZWFtLgotICAgICAgICAgICAgVGhpcyB3aWxsIGFsbG93IGRvd25zdHJlYW0gZWxlbWVudHMgdG8ga25vdyB0aGUgc2l6ZSBvZiB0aGUgbWVkaWEgYW5kCi0gICAgICAgICAgICBhbG93cyB0aGVtIHRvIHNlZWsgdG8gdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHdoZW4gbmVlZGVkLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBtYWluIHdheSBvZiBoYW5kbGluZyBkYXRhIHRvIGFwcHNyYyBpcyBieSB1c2luZyB0aGUgZnVuY3Rpb24KLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyICgpPC9mdW5jdGlvbj4gb3IgYnkgZW1pdGluZyB0aGUKLSAgICAgICAgcHVzaC1idWZmZXIgYWN0aW9uIHNpZ25hbC4gIFRoaXMgd2lsbCBwdXQgdGhlIGJ1ZmZlciBvbnRvIGEgcXVldWUgZnJvbQotICAgICAgICB3aGljaCBhcHBzcmMgd2lsbCByZWFkIGZyb20gaW4gaXRzIHN0cmVhbWluZyB0aHJlYWQuIEl0IGlzIGltcG9ydGFudAotICAgICAgICB0byBub3RlIHRoYXQgZGF0YSB0cmFuc3BvcnQgd2lsbCBub3QgaGFwcGVuIGZyb20gdGhlIHRocmVhZCB0aGF0Ci0gICAgICAgIHBlcmZvcm1lZCB0aGUgcHVzaC1idWZmZXIgY2FsbC4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHF1b3RlPm1heC1ieXRlczwvcXVvdGU+IHByb3BlcnR5IGNvbnRyb2xzIGhvdyBtdWNoIGRhdGEgY2FuIGJlCi0gICAgICAgIHF1ZXVlZCBpbiBhcHBzcmMgYmVmb3JlIGFwcHNyYyBjb25zaWRlcnMgdGhlIHF1ZXVlIGZ1bGwuIEEgZmlsbGVkCi0gICAgICAgIGludGVybmFsIHF1ZXVlIHdpbGwgYWx3YXlzIHNpZ25hbCB0aGUgPHF1b3RlPmVub3VnaC1kYXRhPC9xdW90ZT4KLSAgICAgICAgc2lnbmFsLCB3aGljaCBzaWduYWxzIHRoZSBhcHBsaWNhdGlvbiB0aGF0IGl0IHNob3VsZCBzdG9wIHB1c2hpbmcKLSAgICAgICAgZGF0YSBpbnRvIGFwcHNyYy4gVGhlIDxxdW90ZT5ibG9jazwvcXVvdGU+IHByb3BlcnR5IHdpbGwgY2F1c2UgYXBwc3JjIHRvCi0gICAgICAgIGJsb2NrIHRoZSBwdXNoLWJ1ZmZlciBtZXRob2QgdW50aWwgZnJlZSBkYXRhIGJlY29tZXMgYXZhaWxhYmxlIGFnYWluLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFdoZW4gdGhlIGludGVybmFsIHF1ZXVlIGlzIHJ1bm5pbmcgb3V0IG9mIGRhdGEsIHRoZQotICAgICAgICA8cXVvdGU+bmVlZC1kYXRhPC9xdW90ZT4gc2lnbmFsIGlzIGVtaXR0ZWQsIHdoaWNoIHNpZ25hbHMgdGhlIGFwcGxpY2F0aW9uCi0gICAgICAgIHRoYXQgaXQgc2hvdWxkIHN0YXJ0IHB1c2hpbmcgbW9yZSBkYXRhIGludG8gYXBwc3JjLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSA8cXVvdGU+bmVlZC1kYXRhPC9xdW90ZT4gYW5kIDxxdW90ZT5lbm91Z2gtZGF0YTwvcXVvdGU+Ci0gICAgICAgIHNpZ25hbHMsIGFwcHNyYyBjYW4gZW1pdCB0aGUgPHF1b3RlPnNlZWstZGF0YTwvcXVvdGU+IHNpZ25hbCB3aGVuIHRoZQotICAgICAgICA8cXVvdGU+c3RyZWFtLW1vZGU8L3F1b3RlPiBwcm9wZXJ0eSBpcyBzZXQgdG8gPHF1b3RlPnNlZWthYmxlPC9xdW90ZT4KLSAgICAgICAgb3IgPHF1b3RlPnJhbmRvbS1hY2Nlc3M8L3F1b3RlPi4gVGhlIHNpZ25hbCBhcmd1bWVudCB3aWxsIGNvbnRhaW4gdGhlCi0gICAgICAgIG5ldyBkZXNpcmVkIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0gZXhwcmVzc2VkIGluIHRoZSB1bml0IHNldCB3aXRoIHRoZQotICAgICAgICA8cXVvdGU+Zm9ybWF0PC9xdW90ZT4gcHJvcGVydHkuIEFmdGVyIHJlY2VpdmluZyB0aGUgc2Vlay1kYXRhIHNpZ25hbCwKLSAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBwdXNoLWJ1ZmZlcnMgZnJvbSB0aGUgbmV3IHBvc2l0aW9uLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFdoZW4gdGhlIGxhc3QgYnl0ZSBpcyBwdXNoZWQgaW50byBhcHBzcmMsIHlvdSBtdXN0IGNhbGwKLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0gKCk8L2Z1bmN0aW9uPiB0byBtYWtlIGl0IHNlbmQKLSAgICAgICAgYW4gRU9TIGRvd25zdHJlYW0uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlc2Ugc2lnbmFscyBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gb3BlcmF0ZSBhcHBzcmMgaW4gcHVzaCBhbmQKLSAgICAgICAgcHVsbCBtb2RlIGFzIHdpbGwgYmUgZXhwbGFpbmVkIG5leHQuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxzZWN0MyBpZD0ic2VjdGlvbi1zcG9vZi1hcHBzcmMtcHVzaCI+Ci0gICAgICAgIDx0aXRsZT5Vc2luZyBhcHBzcmMgaW4gcHVzaCBtb2RlPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgV2hlbiBhcHBzcmMgaXMgY29uZmlndXJlZCBpbiBwdXNoIG1vZGUgKHN0cmVhbS10eXBlIGlzIHN0cmVhbSBvcgotICAgICAgICAgIHNlZWthYmxlKSwgdGhlIGFwcGxpY2F0aW9uIHJlcGVhdGVkbHkgY2FsbHMgdGhlIHB1c2gtYnVmZmVyIG1ldGhvZAotICAgICAgICAgIHdpdGggYSBuZXcgYnVmZmVyLiBPcHRpb25hbGx5LCB0aGUgcXVldWUgc2l6ZSBpbiB0aGUgYXBwc3JjIGNhbiBiZQotICAgICAgICAgIGNvbnRyb2xsZWQgd2l0aCB0aGUgZW5vdWdoLWRhdGEgYW5kIG5lZWQtZGF0YSBzaWduYWxzIGJ5IHJlc3BlY3RpdmVseQotICAgICAgICAgIHN0b3BwaW5nL3N0YXJ0aW5nIHRoZSBwdXNoLWJ1ZmZlciBjYWxscy4gVGhlIHZhbHVlIG9mIHRoZQotICAgICAgICAgIG1pbi1wZXJjZW50IHByb3BlcnR5IGRlZmluZXMgaG93IGVtcHR5IHRoZSBpbnRlcm5hbCBhcHBzcmMgcXVldWUKLSAgICAgICAgICBuZWVkcyB0byBiZSBiZWZvcmUgdGhlIG5lZWQtZGF0YSBzaWduYWwgd2lsbCBiZSBmaXJlZC4gWW91IGNhbiBzZXQKLSAgICAgICAgICB0aGlzIHRvIHNvbWUgdmFsdWUgPjAgdG8gYXZvaWQgY29tcGxldGVseSBkcmFpbmluZyB0aGUgcXVldWUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgV2hlbiB0aGUgc3RyZWFtLXR5cGUgaXMgc2V0IHRvIHNlZWthYmxlLCBkb24ndCBmb3JnZXQgdG8gaW1wbGVtZW50Ci0gICAgICAgICAgYSBzZWVrLWRhdGEgY2FsbGJhY2suCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVXNlIHRoaXMgbW9kZWwgd2hlbiBpbXBsZW1lbnRpbmcgdmFyaW91cyBuZXR3b3JrIHByb3RvY29scyBvcgotICAgICAgICAgIGhhcmR3YXJlIGRldmljZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdDM+Ci0KLSAgICAgIDxzZWN0MyBpZD0ic2VjdGlvbi1zcG9vZi1hcHBzcmMtcHVsbCI+Ci0gICAgICAgIDx0aXRsZT5Vc2luZyBhcHBzcmMgaW4gcHVsbCBtb2RlPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gdGhlIHB1bGwgbW9kZWwsIGRhdGEgaXMgZmVkIHRvIGFwcHNyYyBmcm9tIHRoZSBuZWVkLWRhdGEgc2lnbmFsCi0gICAgICAgICAgaGFuZGxlci4gWW91IHNob3VsZCBwdXNoIGV4YWN0bHkgdGhlIGFtb3VudCBvZiBieXRlcyByZXF1ZXN0ZWQgaW4gdGhlCi0gICAgICAgICAgbmVlZC1kYXRhIHNpZ25hbC4gWW91IGFyZSBvbmx5IGFsbG93ZWQgdG8gcHVzaCBsZXNzIGJ5dGVzIHdoZW4geW91IGFyZQotICAgICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBVc2UgdGhpcyBtb2RlbCBmb3IgZmlsZSBhY2Nlc3Mgb3Igb3RoZXIgcmFuZG9tbHkgYWNjZXNzYWJsZSBzb3VyY2VzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3QzPgotCi0gICAgICA8c2VjdDMgaWQ9InNlY3Rpb24tc3Bvb2YtYXBwc3JjLWV4Ij4KLSAgICAgICAgPHRpdGxlPkFwcHNyYyBleGFtcGxlPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBleGFtcGxlIGFwcGxpY2F0aW9uIHdpbGwgZ2VuZXJhdGUgYmxhY2svd2hpdGUgKGl0IHN3aXRjaGVzCi0gICAgICAgICAgZXZlcnkgc2Vjb25kKSB2aWRlbyB0byBhbiBYdi13aW5kb3cgb3V0cHV0IGJ5IHVzaW5nIGFwcHNyYyBhcyBhCi0gICAgICAgICAgc291cmNlIHdpdGggY2FwcyB0byBmb3JjZSBhIGZvcm1hdC4gV2UgdXNlIGEgY29sb3JzcGFjZQotICAgICAgICAgIGNvbnZlcnNpb24gZWxlbWVudCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBmZWVkIHRoZSByaWdodCBmb3JtYXQgdG8KLSAgICAgICAgICB5b3VyIFggc2VydmVyLiBXZSBjb25maWd1cmUgYSB2aWRlbyBzdHJlYW0gd2l0aCBhIHZhcmlhYmxlIGZyYW1lcmF0ZQotICAgICAgICAgICgwLzEpIGFuZCB3ZSBzZXQgdGhlIHRpbWVzdGFtcHMgb24gdGhlIG91dGdvaW5nIGJ1ZmZlcnMgaW4gc3VjaAotICAgICAgICAgIGEgd2F5IHRoYXQgd2UgcGxheSAyIGZyYW1lcyBwZXIgc2Vjb25kLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE5vdGUgaG93IHdlIHVzZSB0aGUgcHVsbCBtb2RlIG1ldGhvZCBvZiBwdXNoaW5nIG5ldyBidWZmZXJzIGludG8KLSAgICAgICAgICBhcHBzcmMgYWx0aG91Z2ggYXBwc3JjIGlzIHJ1bm5pbmcgaW4gcHVzaCBtb2RlLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IS0tIGV4YW1wbGUtYmVnaW4gYXBwc3JjLmMgLS0+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyBHTWFpbkxvb3AgKmxvb3A7Ci0KLXN0YXRpYyB2b2lkCi1jYl9uZWVkX2RhdGEgKEdzdEVsZW1lbnQgKmFwcHNyYywKLQkgICAgICBndWludCAgICAgICB1bnVzZWRfc2l6ZSwKLQkgICAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCi17Ci0gIHN0YXRpYyBnYm9vbGVhbiB3aGl0ZSA9IEZBTFNFOwotICBzdGF0aWMgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCA9IDA7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBndWludCBzaXplOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBzaXplID0gMzg1ICogMjg4ICogMjsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgc2l6ZSwgTlVMTCk7Ci0KLSAgLyogdGhpcyBtYWtlcyB0aGUgaW1hZ2UgYmxhY2svd2hpdGUgKi8KLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGJ1ZmZlciwgMCwgd2hpdGUgPyAweGZmIDogMHgwLCBzaXplKTsKLQotICB3aGl0ZSA9ICF3aGl0ZTsKLQotICBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9IHRpbWVzdGFtcDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKDEsIEdTVF9TRUNPTkQsIDIpOwotCi0gIHRpbWVzdGFtcCArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotCi0gIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAoYXBwc3JjLCAicHVzaC1idWZmZXIiLCBidWZmZXIsICZyZXQpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAvKiBzb21ldGhpbmcgd3JvbmcsIHN0b3AgcHVzaGluZyAqLwotICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICB9Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgICBhcmdjLAotICAgICAgZ2NoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICphcHBzcmMsICpjb252LCAqdmlkZW9zaW5rOwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogc2V0dXAgcGlwZWxpbmUgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXBwc3JjIiwgInNvdXJjZSIpOwotICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jb252ZXJ0IiwgImNvbnYiKTsKLSAgdmlkZW9zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgieHZpbWFnZXNpbmsiLCAidmlkZW9zaW5rIik7Ci0KLSAgLyogc2V0dXAgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXBwc3JjKSwgImNhcHMiLAotICAJCWdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdyIsCi0JCQkJICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIlJHQjE2IiwKLQkJCQkgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDM4NCwKLQkJCQkgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyODgsCi0JCQkJICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDAsIDEsCi0JCQkJICAgICBOVUxMKSwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYXBwc3JjLCBjb252LCB2aWRlb3NpbmssIE5VTEwpOwotICBnc3RfZWxlbWVudF9saW5rX21hbnkgKGFwcHNyYywgY29udiwgdmlkZW9zaW5rLCBOVUxMKTsKLQotICAvKiBzZXR1cCBhcHBzcmMgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXBwc3JjKSwKLQkJInN0cmVhbS10eXBlIiwgMCwKLQkJImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGFwcHNyYywgIm5lZWQtZGF0YSIsIEdfQ0FMTEJBQ0sgKGNiX25lZWRfZGF0YSksIE5VTEwpOwotCi0gIC8qIHBsYXkgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCi0gIHJldHVybiAwOwotICB9Ci1dXT4KLTwhLS0gZXhhbXBsZS1lbmQgYXBwc3JjLmMgLS0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L3NlY3QzPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tc3Bvb2YtYXBwc2luayI+Ci0gICAgICA8dGl0bGU+R3JhYmJpbmcgZGF0YSB3aXRoIGFwcHNpbms8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFVubGlrZSBhcHBzcmMsIGFwcHNpbmsgaXMgYSBsaXR0bGUgZWFzaWVyIHRvIHVzZS4gSXQgYWxzbyBzdXBwb3J0cwotICAgICAgICBhIHB1bGwgYW5kIHB1c2ggYmFzZWQgbW9kZWwgb2YgZ2V0dGluZyBkYXRhIGZyb20gdGhlIHBpcGVsaW5lLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBub3JtYWwgd2F5IG9mIHJldHJpZXZpbmcgc2FtcGxlcyBmcm9tIGFwcHNpbmsgaXMgYnkgdXNpbmcgdGhlCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfYXBwX3NpbmtfcHVsbF9zYW1wbGUoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbCgpPC9mdW5jdGlvbj4gbWV0aG9kcyBvciBieSB1c2luZwotICAgICAgICB0aGUgPHF1b3RlPnB1bGwtc2FtcGxlPC9xdW90ZT4gYW5kIDxxdW90ZT5wdWxsLXByZXJvbGw8L3F1b3RlPgotICAgICAgICBzaWduYWxzLiAgVGhlc2UgbWV0aG9kcyBibG9jayB1bnRpbCBhIHNhbXBsZSBiZWNvbWVzIGF2YWlsYWJsZSBpbiB0aGUKLSAgICAgICAgc2luayBvciB3aGVuIHRoZSBzaW5rIGlzIHNodXQgZG93biBvciByZWFjaGVzIEVPUy4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBcHBzaW5rIHdpbGwgaW50ZXJuYWxseSB1c2UgYSBxdWV1ZSB0byBjb2xsZWN0IGJ1ZmZlcnMgZnJvbSB0aGUKLSAgICAgICAgc3RyZWFtaW5nIHRocmVhZC4gSWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBwdWxsaW5nIHNhbXBsZXMgZmFzdAotICAgICAgICBlbm91Z2gsIHRoaXMgcXVldWUgd2lsbCBjb25zdW1lIGEgbG90IG9mIG1lbW9yeSBvdmVyIHRpbWUuIFRoZQotICAgICAgICA8cXVvdGU+bWF4LWJ1ZmZlcnM8L3F1b3RlPiBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBsaW1pdCB0aGUgcXVldWUKLSAgICAgICAgc2l6ZS4gVGhlIDxxdW90ZT5kcm9wPC9xdW90ZT4gcHJvcGVydHkgY29udHJvbHMgd2hldGhlciB0aGUKLSAgICAgICAgc3RyZWFtaW5nIHRocmVhZCBibG9ja3Mgb3IgaWYgb2xkZXIgYnVmZmVycyBhcmUgZHJvcHBlZCB3aGVuIHRoZQotICAgICAgICBtYXhpbXVtIHF1ZXVlIHNpemUgaXMgcmVhY2hlZC4gTm90ZSB0aGF0IGJsb2NraW5nIHRoZSBzdHJlYW1pbmcgdGhyZWFkCi0gICAgICAgIGNhbiBuZWdhdGl2ZWx5IGFmZmVjdCByZWFsLXRpbWUgcGVyZm9ybWFuY2UgYW5kIHNob3VsZCBiZSBhdm9pZGVkLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIGEgYmxvY2tpbmcgYmVoYXZpb3VyIGlzIG5vdCBkZXNpcmFibGUsIHNldHRpbmcgdGhlIAotICAgICAgICA8cXVvdGU+ZW1pdC1zaWduYWxzPC9xdW90ZT4gcHJvcGVydHkgdG8gVFJVRSB3aWxsIG1ha2UgYXBwc2luayBlbWl0Ci0gICAgICAgIHRoZSA8cXVvdGU+bmV3LXNhbXBsZTwvcXVvdGU+IGFuZCA8cXVvdGU+bmV3LXByZXJvbGw8L3F1b3RlPiBzaWduYWxzCi0gICAgICAgIHdoZW4gYSBzYW1wbGUgY2FuIGJlIHB1bGxlZCB3aXRob3V0IGJsb2NraW5nLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSA8cXVvdGU+Y2FwczwvcXVvdGU+IHByb3BlcnR5IG9uIGFwcHNpbmsgY2FuIGJlIHVzZWQgdG8gY29udHJvbAotICAgICAgICB0aGUgZm9ybWF0cyB0aGF0IGFwcHNpbmsgY2FuIHJlY2VpdmUuIFRoaXMgcHJvcGVydHkgY2FuIGNvbnRhaW4KLSAgICAgICAgbm9uLWZpeGVkIGNhcHMsIHRoZSBmb3JtYXQgb2YgdGhlIHB1bGxlZCBzYW1wbGVzIGNhbiBiZSBvYnRhaW5lZCBieQotICAgICAgICBnZXR0aW5nIHRoZSBzYW1wbGUgY2Fwcy4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJZiBvbmUgb2YgdGhlIHB1bGwtcHJlcm9sbCBvciBwdWxsLXNhbXBsZSBtZXRob2RzIHJldHVybiBOVUxMLCB0aGUKLSAgICAgICAgYXBwc2luayBpcyBzdG9wcGVkIG9yIGluIHRoZSBFT1Mgc3RhdGUuIFlvdSBjYW4gY2hlY2sgZm9yIHRoZSBFT1Mgc3RhdGUKLSAgICAgICAgd2l0aCB0aGUgPHF1b3RlPmVvczwvcXVvdGU+IHByb3BlcnR5IG9yIHdpdGggdGhlCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfYXBwX3NpbmtfaXNfZW9zKCk8L2Z1bmN0aW9uPiBtZXRob2QuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGVvcyBzaWduYWwgY2FuIGFsc28gYmUgdXNlZCB0byBiZSBpbmZvcm1lZCB3aGVuIHRoZSBFT1Mgc3RhdGUgaXMKLSAgICAgICAgcmVhY2hlZCB0byBhdm9pZCBwb2xsaW5nLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIENvbnNpZGVyIGNvbmZpZ3VyaW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBpbiB0aGUgYXBwc2luazoKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSA8cXVvdGU+c3luYzwvcXVvdGU+IHByb3BlcnR5IGlmIHlvdSB3YW50IHRvIGhhdmUgdGhlIHNpbmsKLSAgICAgICAgICAgIGJhc2UgY2xhc3Mgc3luY2hyb25pemUgdGhlIGJ1ZmZlciBhZ2FpbnN0IHRoZSBwaXBlbGluZSBjbG9jawotICAgICAgICAgICAgYmVmb3JlIGhhbmRpbmcgeW91IHRoZSBzYW1wbGUuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBFbmFibGUgUXVhbGl0eS1vZi1TZXJ2aWNlIHdpdGggdGhlIDxxdW90ZT5xb3M8L3F1b3RlPiBwcm9wZXJ0eS4KLSAgICAgICAgICAgIElmIHlvdSBhcmUgZGVhbGluZyB3aXRoIHJhdyB2aWRlbyBmcmFtZXMgYW5kIGxldCB0aGUgYmFzZSBjbGFzcwotICAgICAgICAgICAgc3ljbmhyb25pemUgb24gdGhlIGNsb2NrLCBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byBhbHNvIGxldAotICAgICAgICAgICAgdGhlIGJhc2UgY2xhc3Mgc2VuZCBRT1MgZXZlbnRzIHVwc3RyZWFtLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGNhcHMgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgYWNjZXB0ZWQgY2Fwcy4gVXBzdHJlYW0gZWxlbWVudHMKLSAgICAgICAgICAgIHdpbGwgdHJ5IHRvIGNvbnZlcnQgdGhlIGZvcm1hdCBzbyB0aGF0IGl0IG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQKLSAgICAgICAgICAgIGNhcHMgb24gYXBwc2luay4gWW91IG11c3Qgc3RpbGwgY2hlY2sgdGhlCi0gICAgICAgICAgICA8Y2xhc3NuYW1lPkdzdFNhbXBsZTwvY2xhc3NuYW1lPiB0byBnZXQgdGhlIGFjdHVhbCBjYXBzIG9mIHRoZQotICAgICAgICAgICAgYnVmZmVyLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotCi0gICAgICA8c2VjdDMgaWQ9InNlY3Rpb24tc3Bvb2YtYXBwc2luay1leCI+Ci0gICAgICAgIDx0aXRsZT5BcHBzaW5rIGV4YW1wbGU8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBXaGF0IGZvbGxvd3MgaXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gY2FwdHVyZSBhIHNuYXBzaG90IG9mIGEgdmlkZW8KLSAgICAgICAgICBzdHJlYW0gdXNpbmcgYXBwc2luay4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IS0tIGV4YW1wbGUtYmVnaW4gYXBwc2luay5jIC0tPgotPCFbQ0RBVEFbCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2lmZGVmIEhBVkVfR1RLCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2RlZmluZSBDQVBTICJ2aWRlby94LXJhdyxmb3JtYXQ9UkdCLHdpZHRoPTE2MCxwaXhlbC1hc3BlY3QtcmF0aW89MS8xIgotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc2luazsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBHc3RTYW1wbGUgKnNhbXBsZTsKLSAgZ2NoYXIgKmRlc2NyOwotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgZ2ludDY0IGR1cmF0aW9uLCBwb3NpdGlvbjsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBnYm9vbGVhbiByZXM7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIGlmIChhcmdjICE9IDIpIHsKLSAgICBnX3ByaW50ICgidXNhZ2U6ICVzIDx1cmk+XG4gV3JpdGVzIHNuYXBzaG90LnBuZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiIsCi0gICAgICAgIGFyZ3ZbMF0pOwotICAgIGV4aXQgKC0xKTsKLSAgfQotCi0gIC8qIGNyZWF0ZSBhIG5ldyBwaXBlbGluZSAqLwotICBkZXNjciA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYgKCJ1cmlkZWNvZGViaW4gdXJpPSVzICEgdmlkZW9jb252ZXJ0ICEgdmlkZW9zY2FsZSAhICIKLSAgICAgICIgYXBwc2luayBuYW1lPXNpbmsgY2Fwcz1cIiIgQ0FQUyAiXCIiLCBhcmd2WzFdKTsKLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChkZXNjciwgJmVycm9yKTsKLQotICBpZiAoZXJyb3IgIT0gTlVMTCkgewotICAgIGdfcHJpbnQgKCJjb3VsZCBub3QgY29uc3RydWN0IHBpcGVsaW5lOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnJvcik7Ci0gICAgZXhpdCAoLTEpOwotICB9Ci0KLSAgLyogZ2V0IHNpbmsgKi8KLSAgc2luayA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNpbmsiKTsKLQotICAvKiBzZXQgdG8gUEFVU0VEIHRvIG1ha2UgdGhlIGZpcnN0IGZyYW1lIGFycml2ZSBpbiB0aGUgc2luayAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgc3dpdGNoIChyZXQpIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRToKLSAgICAgIGdfcHJpbnQgKCJmYWlsZWQgdG8gcGxheSB0aGUgZmlsZVxuIik7Ci0gICAgICBleGl0ICgtMSk7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Ci0gICAgICAvKiBmb3IgbGl2ZSBzb3VyY2VzLCB3ZSBuZWVkIHRvIHNldCB0aGUgcGlwZWxpbmUgdG8gUExBWUlORyBiZWZvcmUgd2UgY2FuCi0gICAgICAgKiByZWNlaXZlIGEgYnVmZmVyLiBXZSBkb24ndCBkbyB0aGF0IHlldCAqLwotICAgICAgZ19wcmludCAoImxpdmUgc291cmNlcyBub3Qgc3VwcG9ydGVkIHlldFxuIik7Ci0gICAgICBleGl0ICgtMSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIC8qIFRoaXMgY2FuIGJsb2NrIGZvciB1cCB0byA1IHNlY29uZHMuIElmIHlvdXIgbWFjaGluZSBpcyByZWFsbHkgb3ZlcmxvYWRlZCwKLSAgICogaXQgbWlnaHQgdGltZSBvdXQgYmVmb3JlIHRoZSBwaXBlbGluZSBwcmVyb2xsZWQgYW5kIHdlIGdlbmVyYXRlIGFuIGVycm9yLiBBCi0gICAqIGJldHRlciB3YXkgaXMgdG8gcnVuIGEgbWFpbmxvb3AgYW5kIGNhdGNoIGVycm9ycyB0aGVyZS4gKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgNSAqIEdTVF9TRUNPTkQpOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgewotICAgIGdfcHJpbnQgKCJmYWlsZWQgdG8gcGxheSB0aGUgZmlsZVxuIik7Ci0gICAgZXhpdCAoLTEpOwotICB9Ci0KLSAgLyogZ2V0IHRoZSBkdXJhdGlvbiAqLwotICBnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbiAocGlwZWxpbmUsIEdTVF9GT1JNQVRfVElNRSwgJmR1cmF0aW9uKTsKLQotICBpZiAoZHVyYXRpb24gIT0gLTEpCi0gICAgLyogd2UgaGF2ZSBhIGR1cmF0aW9uLCBzZWVrIHRvIDUlICovCi0gICAgcG9zaXRpb24gPSBkdXJhdGlvbiAqIDUgLyAxMDA7Ci0gIGVsc2UKLSAgICAvKiBubyBkdXJhdGlvbiwgc2VlayB0byAxIHNlY29uZCwgdGhpcyBjb3VsZCBFT1MgKi8KLSAgICBwb3NpdGlvbiA9IDEgKiBHU1RfU0VDT05EOwotCi0gIC8qIHNlZWsgdG8gdGhlIGEgcG9zaXRpb24gaW4gdGhlIGZpbGUuIE1vc3QgZmlsZXMgaGF2ZSBhIGJsYWNrIGZpcnN0IGZyYW1lIHNvCi0gICAqIGJ5IHNlZWtpbmcgdG8gc29tZXdoZXJlIGVsc2Ugd2UgaGF2ZSBhIGJpZ2dlciBjaGFuY2Ugb2YgZ2V0dGluZyBzb21ldGhpbmcKLSAgICogbW9yZSBpbnRlcmVzdGluZy4gQW4gb3B0aW1pc2F0aW9uIHdvdWxkIGJlIHRvIGRldGVjdCBibGFjayBpbWFnZXMgYW5kIHRoZW4KLSAgICogc2VlayBhIGxpdHRsZSBtb3JlICovCi0gIGdzdF9lbGVtZW50X3NlZWtfc2ltcGxlIChwaXBlbGluZSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgR1NUX1NFRUtfRkxBR19LRVlfVU5JVCB8IEdTVF9TRUVLX0ZMQUdfRkxVU0gsIHBvc2l0aW9uKTsKLQotICAvKiBnZXQgdGhlIHByZXJvbGwgYnVmZmVyIGZyb20gYXBwc2luaywgdGhpcyBibG9jayB1bnRpbHMgYXBwc2luayByZWFsbHkKLSAgICogcHJlcm9sbHMgKi8KLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChzaW5rLCAicHVsbC1wcmVyb2xsIiwgJnNhbXBsZSwgTlVMTCk7Ci0KLSAgLyogaWYgd2UgaGF2ZSBhIGJ1ZmZlciBub3csIGNvbnZlcnQgaXQgdG8gYSBwaXhidWYuIEl0J3MgcG9zc2libGUgdGhhdCB3ZQotICAgKiBkb24ndCBoYXZlIGEgYnVmZmVyIGJlY2F1c2Ugd2Ugd2VudCBFT1MgcmlnaHQgYXdheSBvciBoYWQgYW4gZXJyb3IuICovCi0gIGlmIChzYW1wbGUpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIEdzdFN0cnVjdHVyZSAqczsKLQotICAgIC8qIGdldCB0aGUgc25hcHNob3QgYnVmZmVyIGZvcm1hdCBub3cuIFdlIHNldCB0aGUgY2FwcyBvbiB0aGUgYXBwc2luayBzbwotICAgICAqIHRoYXQgaXQgY2FuIG9ubHkgYmUgYW4gcmdiIGJ1ZmZlci4gVGhlIG9ubHkgdGhpbmcgd2UgaGF2ZSBub3Qgc3BlY2lmaWVkCi0gICAgICogb24gdGhlIGNhcHMgaXMgdGhlIGhlaWdodCwgd2hpY2ggaXMgZGVwZW5kYW50IG9uIHRoZSBwaXhlbC1hc3BlY3QtcmF0aW8KLSAgICAgKiBvZiB0aGUgc291cmNlIG1hdGVyaWFsICovCi0gICAgY2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMgKHNhbXBsZSk7Ci0gICAgaWYgKCFjYXBzKSB7Ci0gICAgICBnX3ByaW50ICgiY291bGQgbm90IGdldCBzbmFwc2hvdCBmb3JtYXRcbiIpOwotICAgICAgZXhpdCAoLTEpOwotICAgIH0KLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgICAvKiB3ZSBuZWVkIHRvIGdldCB0aGUgZmluYWwgY2FwcyBvbiB0aGUgYnVmZmVyIHRvIGdldCB0aGUgc2l6ZSAqLwotICAgIHJlcyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgIndpZHRoIiwgJndpZHRoKTsKLSAgICByZXMgfD0gZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAiaGVpZ2h0IiwgJmhlaWdodCk7Ci0gICAgaWYgKCFyZXMpIHsKLSAgICAgIGdfcHJpbnQgKCJjb3VsZCBub3QgZ2V0IHNuYXBzaG90IGRpbWVuc2lvblxuIik7Ci0gICAgICBleGl0ICgtMSk7Ci0gICAgfQotCi0gICAgLyogY3JlYXRlIHBpeG1hcCBmcm9tIGJ1ZmZlciBhbmQgc2F2ZSwgZ3N0cmVhbWVyIHZpZGVvIGJ1ZmZlcnMgaGF2ZSBhIHN0cmlkZQotICAgICAqIHRoYXQgaXMgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiA0ICovCi0gICAgYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChzYW1wbGUpOwotICAgIC8qIE1hcHBpbmcgYSBidWZmZXIgY2FuIGZhaWwgKG5vbi1yZWFkYWJsZSkgKi8KLSAgICBpZiAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKSkgewotI2lmZGVmIEhBVkVfR1RLCi0gICAgICBwaXhidWYgPSBnZGtfcGl4YnVmX25ld19mcm9tX2RhdGEgKG1hcC5kYXRhLAotICAgICAgICAgIEdES19DT0xPUlNQQUNFX1JHQiwgRkFMU0UsIDgsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgR1NUX1JPVU5EX1VQXzQgKHdpZHRoICogMyksIE5VTEwsIE5VTEwpOwotCi0gICAgICAvKiBzYXZlIHRoZSBwaXhidWYgKi8KLSAgICAgIGdka19waXhidWZfc2F2ZSAocGl4YnVmLCAic25hcHNob3QucG5nIiwgInBuZyIsICZlcnJvciwgTlVMTCk7Ci0jZW5kaWYKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgfQotICAgIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ19wcmludCAoImNvdWxkIG5vdCBtYWtlIHNuYXBzaG90XG4iKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgYW5kIGV4aXQgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgZXhpdCAoMCk7Ci19Ci1dXT4KLTwhLS0gZXhhbXBsZS1lbmQgYXBwc2luay5jIC0tPgotPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvc2VjdDM+Ci0gICAgPC9zZWN0Mj4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tc3Bvb2YtZm9ybWF0Ij4KLSAgICA8dGl0bGU+Rm9yY2luZyBhIGZvcm1hdDwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBTb21ldGltZXMgeW91J2xsIHdhbnQgdG8gc2V0IGEgc3BlY2lmaWMgZm9ybWF0LCBmb3IgZXhhbXBsZSBhIHZpZGVvCi0gICAgICBzaXplIGFuZCBmb3JtYXQgb3IgYW4gYXVkaW8gYml0c2l6ZSBhbmQgbnVtYmVyIG9mIGNoYW5uZWxzLiBZb3UgY2FuCi0gICAgICBkbyB0aGlzIGJ5IGZvcmNpbmcgYSBzcGVjaWZpYyA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4gb24KLSAgICAgIHRoZSBwaXBlbGluZSwgd2hpY2ggaXMgcG9zc2libGUgYnkgdXNpbmcKLSAgICAgIDxlbXBoYXNpcz5maWx0ZXJlZCBjYXBzPC9lbXBoYXNpcz4uIFlvdSBjYW4gc2V0IGEgZmlsdGVyZWQgY2FwcyBvbgotICAgICAgYSBsaW5rIGJ5IHVzaW5nIHRoZSA8cXVvdGU+Y2Fwc2ZpbHRlcjwvcXVvdGU+IGVsZW1lbnQgaW4gYmV0d2VlbiB0aGUKLSAgICAgIHR3byBlbGVtZW50cywgYW5kIHNwZWNpZnlpbmcgYSA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4gYXMKLSAgICAgIDxxdW90ZT5jYXBzPC9xdW90ZT4gcHJvcGVydHkgb24gdGhpcyBlbGVtZW50LiBJdCB3aWxsIHRoZW4KLSAgICAgIG9ubHkgYWxsb3cgdHlwZXMgbWF0Y2hpbmcgdGhhdCBzcGVjaWZpZWQgY2FwYWJpbGl0eSBzZXQgZm9yCi0gICAgICBuZWdvdGlhdGlvbi4gIFNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tY2Fwcy1maWx0ZXIiLz4uCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWR5bmFtaWMtZm9ybWF0Ij4KLSAgICAgIDx0aXRsZT5DaGFuZ2luZyBmb3JtYXQgaW4gYSBQTEFZSU5HIHBpcGVsaW5lPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSB0aGUgZm9ybWF0IGluIGEgcGlwZWxpbmUKLSAgICAgICAgd2hpbGUgUExBWUlORy4gVGhpcyBjYW4gc2ltcGx5IGJlIGRvbmUgYnkgY2hhbmdpbmcgdGhlIGNhcHMgCi0gICAgICAgIHByb3BlcnR5IG9uIGEgY2Fwc2ZpbHRlci4gVGhlIGNhcHNmaWx0ZXIgd2lsbCBzZW5kIGEgUkVDT05GSUdVUkUKLSAgICAgICAgZXZlbnQgdXBzdHJlYW0gdGhhdCB3aWxsIG1ha2UgdGhlIHVwc3RyZWFtIGVsZW1lbnQgYXR0ZW1wdCB0bwotICAgICAgICByZW5lZ290aWF0ZSBhIG5ldyBmb3JtYXQgYW5kIGFsbG9jYXRvci4gVGhpcyBvbmx5IHdvcmtzIGlmCi0gICAgICAgIHRoZSB1cHN0cmVhbSBlbGVtZW50IGlzIG5vdCB1c2luZyBmaXhlZCBjYXBzIG9uIHRoZSBzb3VyY2UgcGFkLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgaG93IHlvdSBjYW4gY2hhbmdlIHRoZSBjYXBzIG9mIGEgcGlwZWxpbmUKLSAgICAgICAgd2hpbGUgaW4gdGhlIFBMQVlJTkcgc3RhdGU6Ci0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IS0tIGV4YW1wbGUtYmVnaW4gZHluZm9ybWF0LmMgLS0+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2RlZmluZSBNQVhfUk9VTkQgMTAwCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHc3RFbGVtZW50ICpwaXBlLCAqZmlsdGVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgeGRpciwgeWRpcjsKLSAgZ2ludCByb3VuZDsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBwaXBlID0gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgidmlkZW90ZXN0c3JjICEgY2Fwc2ZpbHRlciBuYW1lPWZpbHRlciAhICIKLSAgICAgICAgICAgICAieGltYWdlc2luayIsIE5VTEwsIEdTVF9QQVJTRV9GTEFHX05PTkUsIE5VTEwpOwotICBnX2Fzc2VydCAocGlwZSAhPSBOVUxMKTsKLQotICBmaWx0ZXIgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlKSwgImZpbHRlciIpOwotICBnX2Fzc2VydCAoZmlsdGVyKTsKLQotICB3aWR0aCA9IDMyMDsKLSAgaGVpZ2h0ID0gMjQwOwotICB4ZGlyID0geWRpciA9IC0xMDsKLQotICBmb3IgKHJvdW5kID0gMDsgcm91bmQgPCBNQVhfUk9VTkQ7IHJvdW5kKyspIHsKLSAgICBnY2hhciAqY2Fwc3N0cjsKLSAgICBnX3ByaW50ICgicmVzaXplIHRvICVkeCVkICglZC8lZCkgICBcciIsIHdpZHRoLCBoZWlnaHQsIHJvdW5kLCBNQVhfUk9VTkQpOwotCi0gICAgLyogd2UgcHJlZmVyIG91ciBmaXhlZCB3aWR0aCBhbmQgaGVpZ2h0IGJ1dCBhbGxvdyBvdGhlciBkaW1lbnNpb25zIHRvIHBhc3MKLSAgICAgKiBhcyB3ZWxsICovCi0gICAgY2Fwc3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoInZpZGVvL3gtcmF3LCB3aWR0aD0oaW50KSVkLCBoZWlnaHQ9KGludCklZCIsCi0gICAgICAgIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzc3RyKTsKLSAgICBnX2ZyZWUgKGNhcHNzdHIpOwotICAgIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGlmIChyb3VuZCA9PSAwKQotICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgICB3aWR0aCArPSB4ZGlyOwotICAgIGlmICh3aWR0aCA+PSAzMjApCi0gICAgICB4ZGlyID0gLTEwOwotICAgIGVsc2UgaWYgKHdpZHRoIDwgMjAwKQotICAgICAgeGRpciA9IDEwOwotCi0gICAgaGVpZ2h0ICs9IHlkaXI7Ci0gICAgaWYgKGhlaWdodCA+PSAyNDApCi0gICAgICB5ZGlyID0gLTEwOwotICAgIGVsc2UgaWYgKGhlaWdodCA8IDE1MCkKLSAgICAgIHlkaXIgPSAxMDsKLQotICAgIG1lc3NhZ2UgPQotICAgICAgICBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZSksIEdTVF9NRVNTQUdFX0VSUk9SLAotICAgICAgICA1MCAqIEdTVF9NU0VDT05EKTsKLSAgICBpZiAobWVzc2FnZSkgewotICAgICAgZ19wcmludCAoImdvdCBlcnJvciAgICAgICAgICAgXG4iKTsKLQotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotICBnX3ByaW50ICgiZG9uZSAgICAgICAgICAgICAgICAgICAgXG4iKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChmaWx0ZXIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci1dXT4KLTwhLS0gZXhhbXBsZS1lbmQgZHluZm9ybWF0LmMgLS0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE5vdGUgaG93IHdlIHVzZSA8ZnVuY3Rpb24+Z3N0X2J1c19wb2xsKCk8L2Z1bmN0aW9uPiB3aXRoIGEKLSAgICAgICAgc21hbGwgdGltZW91dCB0byBnZXQgbWVzc2FnZXMgYW5kIGFsc28gaW50cm9kdWNlIGEgc2hvcnQKLSAgICAgICAgc2xlZXAuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gc2V0IG11bHRpcGxlIGNhcHMgZm9yIHRoZSBjYXBzZmlsdGVyIHNlcGFyYXRlZAotICAgICAgICB3aXRoIGEgOy4gVGhlIGNhcHNmaWx0ZXIgd2lsbCB0cnkgdG8gcmVuZWdvdGlhdGUgdG8gdGhlIGZpcnN0Ci0gICAgICAgIHBvc3NpYmxlIGZvcm1hdCBmcm9tIHRoZSBsaXN0LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWR5bmFtaWMtcGlwZWxpbmVzIj4KLSAgICA8dGl0bGU+RHluYW1pY2FsbHkgY2hhbmdpbmcgdGhlIHBpcGVsaW5lPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEluIHRoaXMgc2VjdGlvbiB3ZSB0YWxrIGFib3V0IHNvbWUgdGVjaG5pcXVlcyBmb3IgZHluYW1pY2FsbHkKLSAgICAgIG1vZGlmeWluZyB0aGUgcGlwZWxpbmUuIFdlIGFyZSB0YWxraW5nIHNwZWNpZmljYWxseSBhYm91dCBjaGFuZ2luZwotICAgICAgdGhlIHBpcGVsaW5lIHdoaWxlIGl0IGlzIGluIHRoZSBQTEFZSU5HIHN0YXRlIHdpdGhvdXQgaW50ZXJydXB0aW5nCi0gICAgICB0aGUgZmxvdy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGVyZSBhcmUgc29tZSBpbXBvcnRhbnQgdGhpbmdzIHRvIGNvbnNpZGVyIHdoZW4gYnVpbGRpbmcgZHluYW1pYwotICAgICAgcGlwZWxpbmVzOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBXaGVuIHJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHBpcGVsaW5lLCBtYWtlIHN1cmUgdGhhdCB0aGVyZQotICAgICAgICAgIGlzIG5vIGRhdGFmbG93IG9uIHVubGlua2VkIHBhZHMgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UgYSBmYXRhbAotICAgICAgICAgIHBpcGVsaW5lIGVycm9yLiBBbHdheXMgYmxvY2sgc291cmNlIHBhZHMgKGluIHB1c2ggbW9kZSkgb3IKLSAgICAgICAgICBzaW5rIHBhZHMgKGluIHB1bGwgbW9kZSkgYmVmb3JlIHVubGlua2luZyBwYWRzLgotICAgICAgICAgIFNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZHluYW1pYy1jaGFuZ2luZyIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgV2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBwaXBlbGluZSwgbWFrZSBzdXJlIHRvIHB1dCB0aGUgZWxlbWVudAotICAgICAgICAgIGludG8gdGhlIHJpZ2h0IHN0YXRlLCB1c3VhbGx5IHRoZSBzYW1lIHN0YXRlIGFzIHRoZSBwYXJlbnQsIGJlZm9yZQotICAgICAgICAgIGFsbG93aW5nIGRhdGFmbG93IHRoZSBlbGVtZW50LiBXaGVuIGFuIGVsZW1lbnQgaXMgbmV3bHkgY3JlYXRlZCwKLSAgICAgICAgICBpdCBpcyBpbiB0aGUgTlVMTCBzdGF0ZSBhbmQgd2lsbCByZXR1cm4gYW4gZXJyb3Igd2hlbiBpdAotICAgICAgICAgIHJlY2VpdmVzIGRhdGEuCi0gICAgICAgICAgU2VlIGFsc28gPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1keW5hbWljLWNoYW5naW5nIi8+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBXaGVuIGFkZGluZyBlbGVtZW50cyB0byBhIHBpcGVsaW5lLCAmR1N0cmVhbWVyOyB3aWxsIGJ5IGRlZmF1bHQKLSAgICAgICAgICBzZXQgdGhlIGNsb2NrIGFuZCBiYXNlLXRpbWUgb24gdGhlIGVsZW1lbnQgdG8gdGhlIGN1cnJlbnQgdmFsdWVzCi0gICAgICAgICAgb2YgdGhlIHBpcGVsaW5lLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBiZSBhYmxlIHRvCi0gICAgICAgICAgY29uc3RydWN0IHRoZSBzYW1lIHBpcGVsaW5lIHJ1bm5pbmctdGltZSBhcyB0aGUgb3RoZXIgZWxlbWVudHMKLSAgICAgICAgICBpbiB0aGUgcGlwZWxpbmUuIFRoaXMgbWVhbnMgdGhhdCBzaW5rcyB3aWxsIHN5bmNocm9uaXplIGJ1ZmZlcnMKLSAgICAgICAgICBsaWtlIHRoZSBvdGhlciBzaW5rcyBpbiB0aGUgcGlwZWxpbmUgYW5kIHRoYXQgc291cmNlcyBwcm9kdWNlCi0gICAgICAgICAgYnVmZmVycyB3aXRoIGEgcnVubmluZy10aW1lIHRoYXQgbWF0Y2hlcyB0aGUgb3RoZXIgc291cmNlcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgV2hlbiB1bmxpbmtpbmcgZWxlbWVudHMgZnJvbSBhbiB1cHN0cmVhbSBjaGFpbiwgYWx3YXlzIG1ha2Ugc3VyZQotICAgICAgICAgIHRvIGZsdXNoIGFueSBxdWV1ZWQgZGF0YSBpbiB0aGUgZWxlbWVudCBieSBzZW5kaW5nIGFuIEVPUyBldmVudAotICAgICAgICAgIGRvd24gdGhlIGVsZW1lbnQgc2luayBwYWQocykgYW5kIGJ5IHdhaXRpbmcgdGhhdCB0aGUgRU9TIGxlYXZlcwotICAgICAgICAgIHRoZSBlbGVtZW50cyAod2l0aCBhbiBldmVudCBwcm9iZSkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgeW91IGRvIG5vdCBkbyB0aGlzLCB5b3Ugd2lsbCBsb3NlIHRoZSBkYXRhIHdoaWNoIGlzIGJ1ZmZlcmVkCi0gICAgICAgICAgYnkgdGhlIHVubGlua2VkIGVsZW1lbnQuIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpbXBsZSBmcmFtZSBsb3NzCi0gICAgICAgICAgKG9uZSBvciBtb3JlIHZpZGVvIGZyYW1lcywgc2V2ZXJhbCBtaWxsaXNlY29uZHMgb2YgYXVkaW8pLiBIb3dldmVyCi0gICAgICAgICAgaWYgeW91IHJlbW92ZSBhIG11eGVyIChhbmQgaW4gc29tZSBjYXNlcyBhbiBlbmNvZGVyIG9yIHNpbWlsYXIgZWxlbWVudHMpCi0gICAgICAgICAgZnJvbSB0aGUgcGlwZWxpbmUsIHlvdSByaXNrIGdldHRpbmcgYSBjb3JydXB0ZWQgZmlsZSB3aGljaCBjb3VsZCBub3QgYmUKLSAgICAgICAgICBwbGF5ZWQgcHJvcGVybHksIGFzIHNvbWUgcmVsZXZhbnQgbWV0YWRhdGEgKGhlYWRlciwgc2Vlay9pbmRleCB0YWJsZXMsIGludGVybmFsCi0gICAgICAgICAgc3luYyB0YWdzKSB3aWxsIG5vdCBiZSBzdG9yZWQgb3IgdXBkYXRlZCBwcm9wZXJseS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBTZWUgYWxzbyA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWR5bmFtaWMtY2hhbmdpbmciLz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEEgbGl2ZSBzb3VyY2Ugd2lsbCBwcm9kdWNlIGJ1ZmZlcnMgd2l0aCBhIHJ1bm5pbmctdGltZSBvZiB0aGUKLSAgICAgICAgICBjdXJyZW50IHJ1bm5pbmctdGltZSBpbiB0aGUgcGlwZWxpbmUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQSBwaXBlbGluZSB3aXRob3V0IGEgbGl2ZSBzb3VyY2UgcHJvZHVjZXMgYnVmZmVycyB3aXRoIGEKLSAgICAgICAgICBydW5uaW5nLXRpbWUgc3RhcnRpbmcgZnJvbSAwLiBMaWtld2lzZSwgYWZ0ZXIgYSBmbHVzaGluZyBzZWVrLAotICAgICAgICAgIHRob3NlIHBpcGVsaW5lcyByZXNldCB0aGUgcnVubmluZy10aW1lIGJhY2sgdG8gMC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgcnVubmluZy10aW1lIGNhbiBiZSBjaGFuZ2VkIHdpdGgKLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfb2Zmc2V0ICgpPC9mdW5jdGlvbj4uIEl0IGlzIGltcG9ydGFudCB0bwotICAgICAgICAgIGtub3cgdGhlIHJ1bm5pbmctdGltZSBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lIGluIG9yZGVyCi0gICAgICAgICAgdG8gbWFpbnRhaW4gc3luY2hyb25pemF0aW9uLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBZGRpbmcgZWxlbWVudHMgbWlnaHQgY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgcGlwZWxpbmUuIEFkZGluZyBhCi0gICAgICAgICAgbm9uLXByZXJvbGxlZCBzaW5rLCBmb3IgZXhhbXBsZSwgYnJpbmdzIHRoZSBwaXBlbGluZSBiYWNrIHRvIHRoZQotICAgICAgICAgIHByZXJvbGxpbmcgc3RhdGUuIFJlbW92aW5nIGEgbm9uLXByZXJvbGxlZCBzaW5rLCBmb3IgZXhhbXBsZSwgbWlnaHQKLSAgICAgICAgICBjaGFuZ2UgdGhlIHBpcGVsaW5lIHRvIFBBVVNFRCBhbmQgUExBWUlORyBzdGF0ZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBZGRpbmcgYSBsaXZlIHNvdXJjZSBjYW5jZWxzIHRoZSBwcmVyb2xsIHN0YWdlIGFuZCBwdXQgdGhlIHBpcGVsaW5lCi0gICAgICAgICAgdG8gdGhlIHBsYXlpbmcgc3RhdGUuIEFkZGluZyBhIGxpdmUgc291cmNlIG9yIG90aGVyIGxpdmUgZWxlbWVudHMKLSAgICAgICAgICBtaWdodCBhbHNvIGNoYW5nZSB0aGUgbGF0ZW5jeSBvZiBhIHBpcGVsaW5lLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFkZGluZyBvciByZW1vdmluZyBlbGVtZW50cyB0byB0aGUgcGlwZWxpbmUgbWlnaHQgY2hhbmdlIHRoZSBjbG9jawotICAgICAgICAgIHNlbGVjdGlvbiBvZiB0aGUgcGlwZWxpbmUuIElmIHRoZSBuZXdseSBhZGRlZCBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2ssCi0gICAgICAgICAgaXQgbWlnaHQgYmUgd29ydGggY2hhbmdpbmcgdGhlIGNsb2NrIGluIHRoZSBwaXBlbGluZSB0byB0aGUgbmV3Ci0gICAgICAgICAgY2xvY2suIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlcyB0aGUgY2xvY2sKLSAgICAgICAgICBmb3IgdGhlIHBpcGVsaW5lIGlzIHJlbW92ZWQsIGEgbmV3IGNsb2NrIGhhcyB0byBiZSBzZWxlY3RlZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQWRkaW5nIGFuZCByZW1vdmluZyBlbGVtZW50cyBtaWdodCBjYXVzZSB1cHN0cmVhbSBvciBkb3duc3RyZWFtCi0gICAgICAgICAgZWxlbWVudHMgdG8gcmVuZWdvdGlhdGUgY2FwcyBhbmQgb3IgYWxsb2NhdG9ycy4gWW91IGRvbid0IHJlYWxseQotICAgICAgICAgIG5lZWQgdG8gZG8gYW55dGhpbmcgZnJvbSB0aGUgYXBwbGljYXRpb24sIHBsdWdpbnMgbGFyZ2VseQotICAgICAgICAgIGFkYXB0IHRoZW1zZWxmIHRvIHRoZSBuZXcgcGlwZWxpbmUgdG9wb2xvZ3kgaW4gb3JkZXIgdG8gb3B0aW1pemUKLSAgICAgICAgICB0aGVpciBmb3JtYXRzIGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFdoYXQgaXMgaW1wb3J0YW50IGlzIHRoYXQgd2hlbiB5b3UgYWRkLCByZW1vdmUgb3IgY2hhbmdlIGVsZW1lbnRzCi0gICAgICAgICAgaW4gdGhlIHBpcGVsaW5lLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBwaXBlbGluZSBuZWVkcyB0bwotICAgICAgICAgIG5lZ290aWF0ZSBhIG5ldyBmb3JtYXQgYW5kIHRoaXMgY2FuIGZhaWwuIFVzdWFsbHkgeW91IGNhbiBmaXggdGhpcwotICAgICAgICAgIGJ5IGluc2VydGluZyB0aGUgcmlnaHQgY29udmVydGVyIGVsZW1lbnRzIHdoZXJlIG5lZWRlZC4KLSAgICAgICAgICBTZWUgYWxzbyA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWR5bmFtaWMtY2hhbmdpbmciLz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgICA8cGFyYT4KLSAgICAgICZHU3RyZWFtZXI7IG9mZmVycyBzdXBwb3J0IGZvciBkb2luZyBhYm91dCBhbnkgZHluYW1pYyBwaXBlbGluZQotICAgICAgbW9kaWZpY2F0aW9uIGJ1dCBpdCByZXF1aXJlcyB5b3UgdG8ga25vdyBhIGJpdCBvZiBkZXRhaWxzIGJlZm9yZQotICAgICAgeW91IGNhbiBkbyB0aGlzIHdpdGhvdXQgY2F1c2luZyBwaXBlbGluZSBlcnJvcnMuIEluIHRoZSBmb2xsb3dpbmcKLSAgICAgIHNlY3Rpb25zIHdlIHdpbGwgZGVtb25zdHJhdGUgYSBjb3VwbGUgb2YgdHlwaWNhbCB1c2UtY2FzZXMuCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWR5bmFtaWMtY2hhbmdpbmciPgotICAgICAgPHRpdGxlPkNoYW5naW5nIGVsZW1lbnRzIGluIGEgcGlwZWxpbmU8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBuZXh0IGV4YW1wbGUgd2UgbG9vayBhdCB0aGUgZm9sbG93aW5nIGNoYWluIG9mIGVsZW1lbnRzOgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotICAgICAgICAgICAgLSAtLS0tLiAgICAgIC4tLS0tLS0tLS0tLiAgICAgIC4tLS0tIC0KLSAgICAgICAgIGVsZW1lbnQxIHwgICAgICB8IGVsZW1lbnQyIHwgICAgICB8IGVsZW1lbnQzCi0gICAgICAgICAgICAgICAgc3JjIC0+IHNpbmsgICAgICAgc3JjIC0+IHNpbmsKLSAgICAgICAgICAgIC0gLS0tLScgICAgICAnLS0tLS0tLS0tLScgICAgICAnLS0tLSAtCi0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFdlIHdhbnQgdG8gY2hhbmdlIGVsZW1lbnQyIGJ5IGVsZW1lbnQ0IHdoaWxlIHRoZSBwaXBlbGluZSBpcyBpbgotICAgICAgICB0aGUgUExBWUlORyBzdGF0ZS4gTGV0J3Mgc2F5IHRoYXQgZWxlbWVudDIgaXMgYSB2aXN1YWxpemF0aW9uIGFuZAotICAgICAgICB0aGF0IHlvdSB3YW50IHRvIHN3aXRjaCB0aGUgdmlzdWFsaXphdGlvbiBpbiB0aGUgcGlwZWxpbmUuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV2UgY2FuJ3QganVzdCB1bmxpbmsgZWxlbWVudDIncyBzaW5rcGFkIGZyb20gZWxlbWVudDEncyBzb3VyY2UKLSAgICAgICAgcGFkIGJlY2F1c2UgdGhhdCB3b3VsZCBsZWF2ZSBlbGVtZW50MSdzIHNvdXJjZSBwYWQKLSAgICAgICAgdW5saW5rZWQgYW5kIHdvdWxkIGNhdXNlIGEgc3RyZWFtaW5nIGVycm9yIGluIHRoZSBwaXBlbGluZSB3aGVuCi0gICAgICAgIGRhdGEgaXMgcHVzaGVkIG9uIHRoZSBzb3VyY2UgcGFkLgotICAgICAgICBUaGUgdGVjaG5pcXVlIGlzIHRvIGJsb2NrIHRoZSBkYXRhZmxvdyBmcm9tIGVsZW1lbnQxJ3Mgc291cmNlIHBhZAotICAgICAgICBiZWZvcmUgd2UgY2hhbmdlIGVsZW1lbnQyIGJ5IGVsZW1lbnQ0IGFuZCB0aGVuIHJlc3VtZSBkYXRhZmxvdwotICAgICAgICBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQmxvY2sgZWxlbWVudDEncyBzb3VyY2UgcGFkIHdpdGggYSBibG9ja2luZyBwYWQgcHJvYmUuIFdoZW4gdGhlCi0gICAgICAgICAgICBwYWQgaXMgYmxvY2tlZCwgdGhlIHByb2JlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSW5zaWRlIHRoZSBibG9jayBjYWxsYmFjayBub3RoaW5nIGlzIGZsb3dpbmcgYmV0d2VlbiBlbGVtZW50MQotICAgICAgICAgICAgYW5kIGVsZW1lbnQyIGFuZCBub3RoaW5nIHdpbGwgZmxvdyB1bnRpbCB1bmJsb2NrZWQuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBVbmxpbmsgZWxlbWVudDEgYW5kIGVsZW1lbnQyLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgTWFrZSBzdXJlIGRhdGEgaXMgZmx1c2hlZCBvdXQgb2YgZWxlbWVudDIuIFNvbWUgZWxlbWVudHMgbWlnaHQKLSAgICAgICAgICAgIGludGVybmFsbHkga2VlcCBzb21lIGRhdGEsIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSBub3QgdG8gbG9zZSBkYXRhCi0gICAgICAgICAgICBieSBmb3JjaW5nIGl0IG91dCBvZiBlbGVtZW50Mi4gWW91IGNhbiBkbyB0aGlzIGJ5IHB1c2hpbmcgRU9TIGludG8KLSAgICAgICAgICAgIGVsZW1lbnQyLCBsaWtlIHRoaXM6Ci0gICAgICAgICAgPC9wYXJhPgotICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFB1dCBhbiBldmVudCBwcm9iZSBvbiBlbGVtZW50MidzIHNvdXJjZSBwYWQuCi0gICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFNlbmQgRU9TIHRvIGVsZW1lbnQyJ3Mgc2lua3BhZC4gVGhpcyBtYWtlcyBzdXJlIHRoZSBhbGwgdGhlCi0gICAgICAgICAgICAgICAgZGF0YSBpbnNpZGUgZWxlbWVudDIgaXMgZm9yY2VkIG91dC4KLSAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV2FpdCBmb3IgdGhlIEVPUyBldmVudCB0byBhcHBlYXIgb24gZWxlbWVudDIncyBzb3VyY2UgcGFkLgotICAgICAgICAgICAgICAgIFdoZW4gdGhlIEVPUyBpcyByZWNlaXZlZCwgZHJvcCBpdCBhbmQgcmVtb3ZlIHRoZSBldmVudAotICAgICAgICAgICAgICAgIHByb2JlLgotICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBVbmxpbmsgZWxlbWVudDIgYW5kIGVsZW1lbnQzLiBZb3UgY2FuIG5vdyBhbHNvIHJlbW92ZSBlbGVtZW50MgotICAgICAgICAgICAgZnJvbSB0aGUgcGlwZWxpbmUgYW5kIHNldCB0aGUgc3RhdGUgdG8gTlVMTC4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEFkZCBlbGVtZW50NCB0byB0aGUgcGlwZWxpbmUsIGlmIG5vdCBhbHJlYWR5IGFkZGVkLiBMaW5rIGVsZW1lbnQ0Ci0gICAgICAgICAgICBhbmQgZWxlbWVudDMuIExpbmsgZWxlbWVudDEgYW5kIGVsZW1lbnQ0LgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgTWFrZSBzdXJlIGVsZW1lbnQ0IGlzIGluIHRoZSBzYW1lIHN0YXRlIGFzIHRoZSByZXN0IG9mIHRoZSBlbGVtZW50cwotICAgICAgICAgICAgaW4gdGhlIHBpcGVsaW5lLiBJdCBzaG91bGQgYmUgYXQgbGVhc3QgaW4gdGhlIFBBVVNFRCBzdGF0ZSBiZWZvcmUKLSAgICAgICAgICAgIGl0IGNhbiByZWNlaXZlIGJ1ZmZlcnMgYW5kIGV2ZW50cy4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFVuYmxvY2sgZWxlbWVudDEncyBzb3VyY2UgcGFkIHByb2JlLiBUaGlzIHdpbGwgbGV0IG5ldyBkYXRhIGludG8KLSAgICAgICAgICAgIGVsZW1lbnQ0IGFuZCBjb250aW51ZSBzdHJlYW1pbmcuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFib3ZlIGFsZ29yaXRobSB3b3JrcyB3aGVuIHRoZSBzb3VyY2UgcGFkIGlzIGJsb2NrZWQsIGkuZS4gd2hlbgotICAgICAgICB0aGVyZSBpcyBkYXRhZmxvdyBpbiB0aGUgcGlwZWxpbmUuIElmIHRoZXJlIGlzIG5vIGRhdGFmbG93LCB0aGVyZSBpcwotICAgICAgICBhbHNvIG5vIHBvaW50IGluIGNoYW5naW5nIHRoZSBlbGVtZW50IChqdXN0IHlldCkgc28gdGhpcyBhbGdvcml0aG0gY2FuCi0gICAgICAgIGJlIHVzZWQgaW4gdGhlIFBBVVNFRCBzdGF0ZSBhcyB3ZWxsLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIExldCBzaG93IHlvdSBob3cgdGhpcyB3b3JrcyB3aXRoIGFuIGV4YW1wbGUuIFRoaXMgZXhhbXBsZSBjaGFuZ2VzIHRoZQotICAgICAgICB2aWRlbyBlZmZlY3Qgb24gYSBzaW1wbGUgcGlwZWxpbmUgZXZlcnkgc2Vjb25kLgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCEtLSBleGFtcGxlLWJlZ2luIGVmZmVjdHN3aXRjaC5jIC0tPgotPCFbQ0RBVEFbCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1zdGF0aWMgZ2NoYXIgKm9wdF9lZmZlY3RzID0gTlVMTDsKLQotI2RlZmluZSBERUZBVUxUX0VGRkVDVFMgImlkZW50aXR5LGV4Y2x1c2lvbixuYXZpZ2F0aW9udGVzdCwiIFwKLSAgICAiYWdpbmd0dix2aWRlb2ZsaXAsdmVydGlnb3R2LGdhdXNzaWFuYmx1cixzaGFnYWRlbGljdHYsZWRnZXR2IgotCi1zdGF0aWMgR3N0UGFkICpibG9ja3BhZDsKLXN0YXRpYyBHc3RFbGVtZW50ICpjb252X2JlZm9yZTsKLXN0YXRpYyBHc3RFbGVtZW50ICpjb252X2FmdGVyOwotc3RhdGljIEdzdEVsZW1lbnQgKmN1cl9lZmZlY3Q7Ci1zdGF0aWMgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0KLXN0YXRpYyBHUXVldWUgZWZmZWN0cyA9IEdfUVVFVUVfSU5JVDsKLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1ldmVudF9wcm9iZV9jYiAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IHVzZXJfZGF0YTsKLSAgR3N0RWxlbWVudCAqbmV4dDsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKEdTVF9QQURfUFJPQkVfSU5GT19EQVRBIChpbmZvKSkgIT0gR1NUX0VWRU5UX0VPUykKLSAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9QQVNTOwotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfSU5GT19JRCAoaW5mbykpOwotCi0gIC8qIHB1c2ggY3VycmVudCBlZmZlY3QgYmFjayBpbnRvIHRoZSBxdWV1ZSAqLwotICBnX3F1ZXVlX3B1c2hfdGFpbCAoJmVmZmVjdHMsIGdzdF9vYmplY3RfcmVmIChjdXJfZWZmZWN0KSk7Ci0gIC8qIHRha2UgbmV4dCBlZmZlY3QgZnJvbSB0aGUgcXVldWUgKi8KLSAgbmV4dCA9IGdfcXVldWVfcG9wX2hlYWQgKCZlZmZlY3RzKTsKLSAgaWYgKG5leHQgPT0gTlVMTCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5vIG1vcmUgZWZmZWN0cyIpOwotICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgIHJldHVybiBHU1RfUEFEX1BST0JFX0RST1A7Ci0gIH0KLQotICBnX3ByaW50ICgiU3dpdGNoaW5nIGZyb20gJyVzJyB0byAnJXMnLi5cbiIsIEdTVF9PQkpFQ1RfTkFNRSAoY3VyX2VmZmVjdCksCi0gICAgICBHU1RfT0JKRUNUX05BTUUgKG5leHQpKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGN1cl9lZmZlY3QsIEdTVF9TVEFURV9OVUxMKTsKLQotICAvKiByZW1vdmUgdW5saW5rcyBhdXRvbWF0aWNhbGx5ICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAicmVtb3ZpbmcgJSIgR1NUX1BUUl9GT1JNQVQsIGN1cl9lZmZlY3QpOwotICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAocGlwZWxpbmUpLCBjdXJfZWZmZWN0KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwaXBlbGluZSwgImFkZGluZyAgICUiIEdTVF9QVFJfRk9STUFULCBuZXh0KTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgbmV4dCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGlwZWxpbmUsICJsaW5raW5nLi4iKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChjb252X2JlZm9yZSwgbmV4dCwgY29udl9hZnRlciwgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChuZXh0LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgY3VyX2VmZmVjdCA9IG5leHQ7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAiZG9uZSIpOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX0RST1A7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcGFkX3Byb2JlX2NiIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCBpcyBibG9ja2VkIG5vdyIpOwotCi0gIC8qIHJlbW92ZSB0aGUgcHJvYmUgZmlyc3QgKi8KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHBhZCwgR1NUX1BBRF9QUk9CRV9JTkZPX0lEIChpbmZvKSk7Ci0KLSAgLyogaW5zdGFsbCBuZXcgcHJvYmUgZm9yIEVPUyAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoY3VyX2VmZmVjdCwgInNyYyIpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0sgfAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sIGV2ZW50X3Byb2JlX2NiLCB1c2VyX2RhdGEsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIC8qIHB1c2ggRU9TIGludG8gdGhlIGVsZW1lbnQsIHRoZSBwcm9iZSB3aWxsIGJlIGZpcmVkIHdoZW4gdGhlCi0gICAqIEVPUyBsZWF2ZXMgdGhlIGVmZmVjdCBhbmQgaXQgaGFzIHRodXMgZHJhaW5lZCBhbGwgb2YgaXRzIGRhdGEgKi8KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChjdXJfZWZmZWN0LCAic2luayIpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotdGltZW91dF9jYiAoZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnc3RfcGFkX2FkZF9wcm9iZSAoYmxvY2twYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS19ET1dOU1RSRUFNLAotICAgICAgcGFkX3Byb2JlX2NiLCB1c2VyX2RhdGEsIE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1c19jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IHVzZXJfZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICAgIGdjaGFyICpkYmc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsICZkYmcpOwotICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChtc2ctPnNyYywgZXJyLCBkYmcpOwotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICBnX2ZyZWUgKGRiZyk7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHT3B0aW9uRW50cnkgb3B0aW9uc1tdID0gewotICAgIHsiZWZmZWN0cyIsICdlJywgMCwgR19PUFRJT05fQVJHX1NUUklORywgJm9wdF9lZmZlY3RzLAotICAgICAgICAiRWZmZWN0cyB0byB1c2UgKGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGVsZW1lbnQgbmFtZXMpIiwgTlVMTH0sCi0gICAge05VTEx9Ci0gIH07Ci0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgR01haW5Mb29wICpsb29wOwotICBHc3RFbGVtZW50ICpzcmMsICpxMSwgKnEyLCAqZWZmZWN0LCAqZmlsdGVyMSwgKmZpbHRlcjIsICpzaW5rOwotICBnY2hhciAqKmVmZmVjdF9uYW1lcywgKiplOwotCi0gIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBOVUxMKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0gIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYXJnYywgJmFyZ3YsICZlcnIpKSB7Ci0gICAgZ19wcmludCAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmFtcDtlcnIpOwotICAgIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLSAgICByZXR1cm4gMTsKLSAgfQotICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0KLSAgaWYgKG9wdF9lZmZlY3RzICE9IE5VTEwpCi0gICAgZWZmZWN0X25hbWVzID0gZ19zdHJzcGxpdCAob3B0X2VmZmVjdHMsICIsIiwgLTEpOwotICBlbHNlCi0gICAgZWZmZWN0X25hbWVzID0gZ19zdHJzcGxpdCAoREVGQVVMVF9FRkZFQ1RTLCAiLCIsIC0xKTsKLQotICBmb3IgKGUgPSBlZmZlY3RfbmFtZXM7IGUgIT0gTlVMTCAmJiAqZSAhPSBOVUxMOyArK2UpIHsKLSAgICBHc3RFbGVtZW50ICplbDsKLQotICAgIGVsID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgqZSwgTlVMTCk7Ci0gICAgaWYgKGVsKSB7Ci0gICAgICBnX3ByaW50ICgiQWRkaW5nIGVmZmVjdCAnJXMnXG4iLCAqZSk7Ci0gICAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoJmVmZmVjdHMsIGVsKTsKLSAgICB9Ci0gIH0KLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYywgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKLQotICBmaWx0ZXIxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsIE5VTEwpOwotICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoR19PQkpFQ1QgKGZpbHRlcjEpLCAiY2FwcyIsCi0gICAgICAidmlkZW8veC1yYXcsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImZvcm1hdD17IEk0MjAsIFlWMTIsIFlVWTIsIFVZVlksIEFZVVYsIFk0MUIsIFk0MkIsICIKLSAgICAgICJZVllVLCBZNDQ0LCB2MjEwLCB2MjE2LCBOVjEyLCBOVjIxLCBVWVZQLCBBNDIwLCBZVVY5LCBZVlU5LCBJWVUxIH0iKTsKLQotICBxMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCk7Ci0KLSAgYmxvY2twYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocTEsICJzcmMiKTsKLQotICBjb252X2JlZm9yZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvY29udmVydCIsIE5VTEwpOwotCi0gIGVmZmVjdCA9IGdfcXVldWVfcG9wX2hlYWQgKCZlZmZlY3RzKTsKLSAgY3VyX2VmZmVjdCA9IGVmZmVjdDsKLQotICBjb252X2FmdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jb252ZXJ0IiwgTlVMTCk7Ci0KLSAgcTIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpOwotCi0gIGZpbHRlcjIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgTlVMTCk7Ci0gIGdzdF91dGlsX3NldF9vYmplY3RfYXJnIChHX09CSkVDVCAoZmlsdGVyMiksICJjYXBzIiwKLSAgICAgICJ2aWRlby94LXJhdywgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiZm9ybWF0PXsgUkdCeCwgQkdSeCwgeFJHQiwgeEJHUiwgUkdCQSwgQkdSQSwgQVJHQiwgQUJHUiwgUkdCLCBCR1IgfSIpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ4aW1hZ2VzaW5rIiwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGZpbHRlcjEsIHExLCBjb252X2JlZm9yZSwgZWZmZWN0LAotICAgICAgY29udl9hZnRlciwgcTIsIHNpbmssIE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBmaWx0ZXIxLCBxMSwgY29udl9iZWZvcmUsIGVmZmVjdCwgY29udl9hZnRlciwKLSAgICAgIHEyLCBzaW5rLCBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIGdzdF9idXNfYWRkX3dhdGNoIChHU1RfRUxFTUVOVF9CVVMgKHBpcGVsaW5lKSwgYnVzX2NiLCBsb29wKTsKLQotICBnX3RpbWVvdXRfYWRkX3NlY29uZHMgKDEsIHRpbWVvdXRfY2IsIGxvb3ApOwotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci1dXT4KLTwhLS0gZXhhbXBsZS1lbmQgZWZmZWN0c3dpdGNoLmMgLS0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE5vdGUgaG93IHdlIGFkZGVkIHZpZGVvY29udmVydCBlbGVtZW50cyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBlZmZlY3QuCi0gICAgICAgIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc29tZSBlbGVtZW50cyBtaWdodCBvcGVyYXRlIGluIGRpZmZlcmVudAotICAgICAgICBjb2xvcnNwYWNlcyB0aGFuIG90aGVyIGVsZW1lbnRzLiBCeSBpbnNlcnRpbmcgdGhlIGNvbnZlcnNpb24gZWxlbWVudHMKLSAgICAgICAgeW91IGVuc3VyZSB0aGF0IHRoZSByaWdodCBmb3JtYXQgY2FuIGJlIG5lZ290aWF0ZWQgYXQgYW55IHRpbWUuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLSAgPC9zZWN0MT4KLQotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYWR2YW5jZWQtZHBhcmFtcy54bWwgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC1kcGFyYW1zLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1OWUwMS4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kcGFyYW1zLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1kcGFyYW1zIj4KLSAgPHRpdGxlPkR5bmFtaWMgQ29udHJvbGxhYmxlIFBhcmFtZXRlcnM8L3RpdGxlPgotICAKLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWRwYXJhbXMtZ2V0dGluZy1zdGFydGVkIj4KLSAgICA8dGl0bGU+R2V0dGluZyBTdGFydGVkPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBjb250cm9sbGVyIHN1YnN5c3RlbSBvZmZlcnMgYSBsaWdodHdlaWdodCB3YXkgdG8gYWRqdXN0IGdvYmplY3QKLSAgICAgIHByb3BlcnRpZXMgb3ZlciBzdHJlYW0tdGltZS4gTm9ybWFsbHkgdGhlc2UgcHJvcGVydGllcyBhcmUgY2hhbmdlZCB1c2luZwotICAgICAgPGZ1bmN0aW9uPmdfb2JqZWN0X3NldCgpPC9mdW5jdGlvbj4uIFRpbWluZyB0aG9zZSBjYWxscyByZWxpYWJseSBzbyB0aGF0Ci0gICAgICB0aGUgY2hhbmdlcyBhZmZlY3QgY2VydGFpbiBzdHJlYW0gdGltZXMgaXMgY2xvc2UgdG8gaW1wb3NzaWJsZS4gVGhlCi0gICAgICBjb250cm9sbGVyIHRha2VzIHRpbWUgaW50byBhY2NvdW50LiBJdCB3b3JrcyBieSBhdHRhY2hpbmcgY29udHJvbC1zb3VyY2VzCi0gICAgICB0byBwcm9wZXJ0aWVzIHVzaW5nIGNvbnRyb2wtYmluZGluZ3MuIENvbnRyb2wtc291cmNlcyBwcm92aWRlIHZhbHVlcyBmb3IgYQotICAgICAgZ2l2ZW4gdGltZS1zdGFtcCB0aGF0IGFyZSB1c3VhbGx5IGluIHRoZSByYW5nZSBvZiAwLjAgdG8gMS4wLiAKLSAgICAgIENvbnRyb2wtYmluZGluZ3MgbWFwIHRoZSBjb250cm9sLXZhbHVlIHRvIGEgZ29iamVjdCBwcm9wZXJ0eSB0aGV5IGFyZSBib3VuZCB0bwotICAgICAgLSBjb252ZXJ0aW5nIHRoZSB0eXBlIGFuZCBzY2FsaW5nIHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgdmFsdWUgcmFuZ2UuCi0gICAgICBBdCBydW4tdGltZSB0aGUgZWxlbWVudHMgY29udGludW91c2x5IHB1bGwgdmFsdWVzIGNoYW5nZXMgZm9yIHRoZSBjdXJyZW50Ci0gICAgICBzdHJlYW0tdGltZSB0byB1cGRhdGUgdGhlIGdvYmplY3QgcHJvcGVydGllcy4gR1N0cmVhbWVyIGluY2x1ZGVzIGEgZmV3Ci0gICAgICBkaWZmZXJlbnQgY29udHJvbC1zb3VyY2VzIGFuZCBjb250cm9sLWJpbmRpbmdzIGFscmVhZHksIGJ1dCBhcHBsaWNhdGlvbnMgY2FuCi0gICAgICBkZWZpbmUgdGhlaXIgb3duIGJ5IHN1Yi1jbGFzc2luZyBmcm9tIHRoZSByZXNwZWN0aXZlIGJhc2UgY2xhc3Nlcy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBNb3N0IHBhcnRzIG9mIHRoZSBjb250cm9sbGVyIG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCBpbiBHc3RPYmplY3QuIEFsc28gdGhlCi0gICAgICBiYXNlIGNsYXNzZXMgZm9yIGNvbnRyb2wtc291cmNlcyBhbmQgY29udHJvbC1iaW5kaW5ncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNvcmUKLSAgICAgIGxpYnJhcnkuIFRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlCi0gICAgICA8ZmlsZW5hbWU+Z3N0Y29udHJvbGxlcjwvZmlsZW5hbWU+IGxpYnJhcnkuCi0gICAgICBZb3UgbmVlZCB0byBpbmNsdWRlIHRoZSBoZWFkZXIgaW4geW91ciBhcHBsaWNhdGlvbidzIHNvdXJjZSBmaWxlOgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci0uLi4KLSNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7Z3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaCZndDsKLSNpbmNsdWRlICZsdDtnc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oJmd0OwotLi4uCi0gICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICA8cGFyYT4KLSAgICAgIFlvdXIgYXBwbGljYXRpb24gc2hvdWxkIGxpbmsgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5IAotICAgICAgPGZpbGVuYW1lPmdzdHJlYW1lci1jb250cm9sbGVyPC9maWxlbmFtZT4uIE9uZSBjYW4gZ2V0IHRoZSByZXF1aXJlZCBmbGFnIGZvcgotICAgICAgY29tcGlsZXIgYW5kIGxpbmtlciBieSB1c2luZyBwa2ctY29uZmlnIGZvciBnc3RyZWFtZXItY29udHJvbGxlci0xLjAuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotICAKLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWRwYXJhbXMtcGFyYW1ldGVycyI+Ci0gICAgPHRpdGxlPlNldHRpbmcgdXAgcGFyYW1ldGVyIGNvbnRyb2w8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSWYgd2UgaGF2ZSBvdXIgcGlwZWxpbmUgc2V0IHVwIGFuZCB3YW50IHRvIGNvbnRyb2wgc29tZSBwYXJhbWV0ZXJzLCB3ZSBmaXJzdAotICAgICAgbmVlZCB0byBjcmVhdGUgYSBjb250cm9sLXNvdXJjZS4gTGV0cyB1c2UgYW4gaW50ZXJwb2xhdGlvbiBjb250cm9sLXNvdXJjZToKLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotICBjc291cmNlID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICBnX29iamVjdF9zZXQgKGNzb3VyY2UsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIE5VTEwpOwotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBOb3cgd2UgbmVlZCB0byBhdHRhY2ggdGhlIGNvbnRyb2wtc291cmNlIHRvIHRoZSBnb2JqZWN0IHByb3BlcnR5LiBUaGlzIGlzIGRvbmUKLSAgICAgIHdpdGggYSBjb250cm9sLWJpbmRpbmcuIE9uZSBjb250cm9sIHNvdXJjZSBjYW4gYmUgYXR0YWNoZWQgdG8gc2V2ZXJhbCBvYmplY3QKLSAgICAgIHByb3BlcnRpZXMgKGV2ZW4gaW4gZGlmZmVyZW50IG9iamVjdHMpIHVzaW5nIHNlcGFyYXRlIGNvbnRyb2wtYmluZGluZ3MuCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLSAgICAgIGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAob2JqZWN0LCBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKG9iamVjdCwgInByb3AxIiwgY3NvdXJjZSkpOwotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGlzIHR5cGUgY29udHJvbC1zb3VyY2UgdGFrZXMgbmV3IHByb3BlcnR5IHZhbHVlcyBmcm9tIGEgbGlzdCBvZiB0aW1lLXN0YW1wZWQKLSAgICAgIHBhcmFtZXRlciBjaGFuZ2VzLiBUaGUgc291cmNlIGNhbiBlLmcuIGZpbGwgZ2FwcyBieSBzbW9vdGhpbmcgcGFyYW1ldGVyIGNoYW5nZXMKLSAgICAgIFRoaXMgYmVoYXZpb3IgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUgbW9kZSBwcm9wZXJ0eSBvZiB0aGUKLSAgICAgIGNvbnRyb2wtc291cmNlLiBPdGhlciBjb250cm9sIHNvdXJjZXMgZS5nLiBwcm9kdWNlIGEgc3RyZWFtIG9mIHZhbHVlcyBieQotICAgICAgY2FsbGluZyA8ZnVuY3Rpb24+c2luKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gVGhleSBoYXZlIHBhcmFtZXRlcnMgdG8gY29udHJvbAotICAgICAgZS5nLiB0aGUgZnJlcXVlbmN5LiBBcyBjb250cm9sLXNvdXJjZXMgYXJlIEdzdE9iamVjdHMgdG9vLCBvbmUgY2FuIGF0dGFjaAotICAgICAgY29udHJvbC1zb3VyY2VzIHRvIHRoZXNlIHByb3BlcnRpZXMgdG9vLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIE5vdyB3ZSBjYW4gc2V0IHNvbWUgY29udHJvbCBwb2ludHMuIFRoZXNlIGFyZSB0aW1lLXN0YW1wZWQgZ2RvdWJsZSB2YWx1ZXMgYW5kCi0gICAgICBhcmUgdXN1YWxseSBpbiB0aGUgcmFuZ2Ugb2YgMC4wIHRvIDEuMC4gQSB2YWx1ZSBvZiAxLjAgaXMgbGF0ZXIgbWFwcGVkIHRvIHRoZQotICAgICAgbWF4aW11bSB2YWx1ZSBpbiB0aGUgdGFyZ2V0IHByb3BlcnRpZXMgdmFsdWUgcmFuZ2UuCi0gICAgICBUaGUgdmFsdWVzIGJlY29tZSBhY3RpdmUgd2hlbiB0aGUgdGltZXN0YW1wIGlzIHJlYWNoZWQuIFRoZXkgc3RpbGwgc3RheQotICAgICAgaW4gdGhlIGxpc3QuIElmIGUuZy4gdGhlIHBpcGVsaW5lIHJ1bnMgYSBsb29wICh1c2luZyBhIHNlZ21lbnRlZCBzZWVrKSwKLSAgICAgIHRoZSBjb250cm9sLWN1cnZlIGdldHMgcmVwZWF0ZWQgYXMgd2VsbC4KLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqdHZfY3NvdXJjZSA9IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKWNzb3VyY2U7Ci0gIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2X2Nzb3VyY2UsIDAgKiBHU1RfU0VDT05ELCAwLjApOwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dl9jc291cmNlLCAxICogR1NUX1NFQ09ORCwgMS4wKTsKLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgTm93IGV2ZXJ5dGhpbmcgaXMgcmVhZHkgdG8gcGxheS4gSWYgdGhlIGNvbnRyb2wtc291cmNlIGlzIGUuZy4gYm91bmQgdG8gYQotICAgICAgdm9sdW1lIHByb3BlcnR5LCB3ZSB3aWxsIGhlYWQgYSBmYWRlLWluIG92ZXIgMSBzZWNvbmQuIE9uZSB3b3JkIG9mIGNhdXRpb24sCi0gICAgICB0aGUgdm9sdW1lIGVsZW1lbnQgdGhhdCBjb21lcyB3aXRoIGdzdHJlYW1lciBoYXMgYSB2YWx1ZSByYW5nZSBvZiAwLjAgdG8gNC4wCi0gICAgICBvbiBpdHMgdm9sdW1lIHByb3BlcnR5LiBJZiB0aGUgYWJvdmUgY29udHJvbC1zb3VyY2UgaXMgYXR0YWNoZWQgdG8gdGhlIHByb3BlcnR5Ci0gICAgICB0aGUgdm9sdW1lIHdpbGwgcmFtcCB1cCB0byA0MDAlIQotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIE9uZSBmaW5hbCBub3RlIC0gdGhlIGNvbnRyb2xsZXIgc3Vic3lzdGVtIGhhcyBhIGJ1aWx0LWluIGxpdmUtbW9kZS4gRXZlbiB0aG91Z2gKLSAgICAgIGEgcHJvcGVydHkgaGFzIGEgY29udHJvbC1zb3VyY2UgYXNzaWduZWQgb25lIGNhbiBjaGFuZ2UgdGhlIEdPYmplY3QgcHJvcGVydHkKLSAgICAgIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5nX29iamVjdF9zZXQoKTwvZnVuY3Rpb24+LgotICAgICAgVGhpcyBpcyBoaWdobHkgdXNlZnVsIHdoZW4gYmluZGluZyB0aGUgR09iamVjdCBwcm9wZXJ0aWVzIHRvIEdVSSB3aWRnZXRzLgotICAgICAgV2hlbiB0aGUgdXNlciBhZGp1c3RzIHRoZSB2YWx1ZSB3aXRoIHRoZSB3aWRnZXQsIG9uZSBjYW4gc2V0IHRoZSBHT2JqZWN0Ci0gICAgICBwcm9wZXJ0eSBhbmQgdGhpcyByZW1haW5zIGFjdGl2ZSB1bnRpbCB0aGUgbmV4dCBwcm9ncmFtbWVkIGNvbnRyb2wtc291cmNlCi0gICAgICB2YWx1ZSBvdmVycmlkZXMgaXQuIFRoaXMgYWxzbyB3b3JrcyB3aXRoIHNtb290aGVkIHBhcmFtZXRlcnMuIEl0IGRvZXMgbm90Ci0gICAgICB3b3JrIGZvciBjb250cm9sLXNvdXJjZXMgdGhhdCBjb25zdGFudGx5IHVwZGF0ZSB0aGUgcHJvcGVydHkgKGUuZy4gdGhlCi0gICAgICBsZm9fY29udHJvbF9zb3VyY2UpLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgCi08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hZHZhbmNlZC1pbnRlcmZhY2VzLnhtbCBiL2RvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjQxZjRjLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLWludGVyZmFjZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItaW50ZXJmYWNlcyI+Ci0gIDx0aXRsZT5JbnRlcmZhY2VzPC90aXRsZT4KLQotICA8cGFyYT4KLSAgICBJbiA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWVsZW1lbnRzLXByb3BlcnRpZXMiLz4sIHlvdSBoYXZlIGxlYXJuZWQgaG93Ci0gICAgdG8gdXNlIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPiBwcm9wZXJ0aWVzIGFzIGEgc2ltcGxlIHdheSB0byBkbwotICAgIGludGVyYWN0aW9uIGJldHdlZW4gYXBwbGljYXRpb25zIGFuZCBlbGVtZW50cy4gVGhpcyBtZXRob2Qgc3VmZmljZXMgZm9yCi0gICAgdGhlIHNpbXBsZSduJ3N0cmFpZ2h0IHNldHRpbmdzLCBidXQgZmFpbHMgZm9yIGFueXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQKLSAgICB0aGFuIGEgZ2V0dGVyIGFuZCBzZXR0ZXIuIEZvciB0aGUgbW9yZSBjb21wbGljYXRlZCB1c2UgY2FzZXMsICZHU3RyZWFtZXI7Ci0gICAgdXNlcyBpbnRlcmZhY2VzIGJhc2VkIG9uIHRoZSBHT2JqZWN0IDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ29iamVjdC9zdGFibGUvZ3R5cGUtbm9uLWluc3RhbnRpYWJsZS1jbGFzc2VkLmh0bWwiPjxjbGFzc25hbWU+R1R5cGVJbnRlcmZhY2U8L2NsYXNzbmFtZT48L3VsaW5rPgotICAgIHR5cGUuCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLSAgICBNb3N0IG9mIHRoZSBpbnRlcmZhY2VzIGhhbmRsZWQgaGVyZSB3aWxsIG5vdCBjb250YWluIGFueSBleGFtcGxlIGNvZGUuCi0gICAgU2VlIHRoZSBBUEkgcmVmZXJlbmNlcyBmb3IgZGV0YWlscy4gSGVyZSwgd2Ugd2lsbCBqdXN0IGRlc2NyaWJlIHRoZQotICAgIHNjb3BlIGFuZCBwdXJwb3NlIG9mIGVhY2ggaW50ZXJmYWNlLgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludGVyZmFjZXMtdXJpIj4KLSAgICA8dGl0bGU+VGhlIFVSSSBpbnRlcmZhY2U8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICBJbiBhbGwgZXhhbXBsZXMgc28gZmFyLCB3ZSBoYXZlIG9ubHkgc3VwcG9ydGVkIGxvY2FsIGZpbGVzIHRocm91Z2ggdGhlCi0gICAgICA8cXVvdGU+ZmlsZXNyYzwvcXVvdGU+IGVsZW1lbnQuICZHU3RyZWFtZXI7LCBvYnZpb3VzbHksIHN1cHBvcnRzIG1hbnkKLSAgICAgIG1vcmUgbG9jYXRpb24gc291cmNlcy4gSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCBhcHBsaWNhdGlvbnMgdG8gbmVlZCB0bwotICAgICAga25vdyBhbnkgcGFydGljdWxhciBlbGVtZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHN1Y2ggYXMgZWxlbWVudAotICAgICAgbmFtZXMgZm9yIHBhcnRpY3VsYXIgbmV0d29yayBzb3VyY2UgdHlwZXMgYW5kIHNvIG9uLiBUaGVyZWZvcmUsIHRoZXJlCi0gICAgICBpcyBhIFVSSSBpbnRlcmZhY2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGdldCB0aGUgc291cmNlIGVsZW1lbnQgdGhhdAotICAgICAgc3VwcG9ydHMgYSBwYXJ0aWN1bGFyIFVSSSB0eXBlLiBUaGVyZSBpcyBubyBzdHJpY3QgcnVsZSBmb3IgVVJJIG5hbWluZywKLSAgICAgIGJ1dCBpbiBnZW5lcmFsIHdlIGZvbGxvdyBuYW1pbmcgY29udmVudGlvbnMgdGhhdCBvdGhlcnMgdXNlLCB0b28uIEZvcgotICAgICAgZXhhbXBsZSwgYXNzdW1pbmcgeW91IGhhdmUgdGhlIGNvcnJlY3QgcGx1Z2lucyBpbnN0YWxsZWQsICZHU3RyZWFtZXI7Ci0gICAgICBzdXBwb3J0cyA8cXVvdGU+ZmlsZTovLy8mbHQ7cGF0aCZndDsvJmx0O2ZpbGUmZ3Q7PC9xdW90ZT4sCi0gICAgICA8cXVvdGU+aHR0cDovLyZsdDtob3N0Jmd0Oy8mbHQ7cGF0aCZndDsvJmx0O2ZpbGUmZ3Q7PC9xdW90ZT4sCi0gICAgICA8cXVvdGU+bW1zOi8vJmx0O2hvc3QmZ3Q7LyZsdDtwYXRoJmd0Oy8mbHQ7ZmlsZSZndDs8L3F1b3RlPiwgYW5kIHNvIG9uLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEluIG9yZGVyIHRvIGdldCB0aGUgc291cmNlIG9yIHNpbmsgZWxlbWVudCBzdXBwb3J0aW5nIGEgcGFydGljdWxhciBVUkksCi0gICAgICB1c2UgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKCk8L2Z1bmN0aW9uPiwgd2l0aCB0aGUgVVJJCi0gICAgICB0eXBlIGJlaW5nIGVpdGhlciA8Y2xhc3NuYW1lPkdTVF9VUklfU1JDPC9jbGFzc25hbWU+IGZvciBhIHNvdXJjZQotICAgICAgZWxlbWVudCwgb3IgPGNsYXNzbmFtZT5HU1RfVVJJX1NJTks8L2NsYXNzbmFtZT4gZm9yIGEgc2luayBlbGVtZW50LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFlvdSBjYW4gY29udmVydCBmaWxlbmFtZXMgdG8gYW5kIGZyb20gVVJJcyB1c2luZyBHTGliJ3MKLSAgICAgIDxmdW5jdGlvbj5nX2ZpbGVuYW1lX3RvX3VyaSAoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgPGZ1bmN0aW9uPmdfdXJpX3RvX2ZpbGVuYW1lICgpPC9mdW5jdGlvbj4uCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRlcmZhY2VzLWNvbG9yYmFsYW5jZSI+Ci0gICAgPHRpdGxlPlRoZSBDb2xvciBCYWxhbmNlIGludGVyZmFjZTwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBjb2xvcmJhbGFuY2UgaW50ZXJmYWNlIGlzIGEgd2F5IHRvIGNvbnRyb2wgdmlkZW8tcmVsYXRlZCBwcm9wZXJ0aWVzCi0gICAgICBvbiBhbiBlbGVtZW50LCBzdWNoIGFzIGJyaWdodG5lc3MsIGNvbnRyYXN0IGFuZCBzbyBvbi4gSXQncyBzb2xlCi0gICAgICByZWFzb24gZm9yIGV4aXN0ZW5jZSBpcyB0aGF0LCBhcyBmYXIgYXMgaXRzIGF1dGhvcnMga25vdywgdGhlcmUncyBubwotICAgICAgd2F5IHRvIGR5bmFtaWNhbGx5IHJlZ2lzdGVyIHByb3BlcnRpZXMgdXNpbmcKLSAgICAgIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgY29sb3JiYWxhbmNlIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBzZXZlcmFsIHBsdWdpbnMsIGluY2x1ZGluZwotICAgICAgeHZpbWFnZXNpbmsgYW5kIHRoZSBWaWRlbzRsaW51eDIgZWxlbWVudHMuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRlcmZhY2VzLXZpZGVvb3ZlcmxheSI+Ci0gICAgPHRpdGxlPlRoZSBWaWRlbyBPdmVybGF5IGludGVyZmFjZTwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBWaWRlbyBPdmVybGF5IGludGVyZmFjZSB3YXMgY3JlYXRlZCB0byBzb2x2ZSB0aGUgcHJvYmxlbSBvZiBlbWJlZGRpbmcKLSAgICAgIHZpZGVvIHN0cmVhbXMgaW4gYW4gYXBwbGljYXRpb24gd2luZG93LiBUaGUgYXBwbGljYXRpb24gcHJvdmlkZXMgYW4KLSAgICAgIHdpbmRvdyBoYW5kbGUgdG8gdGhlIGVsZW1lbnQgaW1wbGVtZW50aW5nIHRoaXMgaW50ZXJmYWNlIHRvIGRyYXcgb24sIGFuZAotICAgICAgdGhlIGVsZW1lbnQgd2lsbCB0aGVuIHVzZSB0aGlzIHdpbmRvdyBoYW5kbGUgdG8gZHJhdyBvbiByYXRoZXIgdGhhbiBjcmVhdGluZwotICAgICAgYSBuZXcgdG9wbGV2ZWwgd2luZG93LiBUaGlzIGlzIHVzZWZ1bCB0byBlbWJlZCB2aWRlbyBpbiB2aWRlbyBwbGF5ZXJzLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5LCBhbW9uZ3N0IG90aGVycywgdGhlIFZpZGVvNGxpbnV4MgotICAgICAgZWxlbWVudHMgYW5kIGJ5IHhpbWFnZXNpbmssIHh2aW1hZ2VzaW5rIGFuZCBzZGx2aWRlb3NpbmsuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYWR2YW5jZWQtbWV0YWRhdGEueG1sIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtbWV0YWRhdGEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTc1NDA5Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLW1ldGFkYXRhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1tZXRhZGF0YSI+Ci0gIDx0aXRsZT5NZXRhZGF0YTwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci0gICAgJkdTdHJlYW1lcjsgbWFrZXMgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIHR3byB0eXBlcyBvZiBtZXRhZGF0YSwgYW5kCi0gICAgaGFzIHN1cHBvcnQgZm9yIGJvdGggdHlwZXMuIFRoZSBmaXJzdCBpcyBzdHJlYW0gdGFncywgd2hpY2ggZGVzY3JpYmUgdGhlCi0gICAgY29udGVudCBvZiBhIHN0cmVhbSBpbiBhIG5vbi10ZWNobmljYWwgd2F5LiBFeGFtcGxlcyBpbmNsdWRlIHRoZSBhdXRob3IKLSAgICBvZiBhIHNvbmcsIHRoZSB0aXRsZSBvZiB0aGF0IHZlcnkgc2FtZSBzb25nIG9yIHRoZSBhbGJ1bSBpdCBpcyBhIHBhcnQgb2YuCi0gICAgVGhlIG90aGVyIHR5cGUgb2YgbWV0YWRhdGEgaXMgc3RyZWFtLWluZm8sIHdoaWNoIGlzIGEgc29tZXdoYXQgdGVjaG5pY2FsCi0gICAgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnRpZXMgb2YgYSBzdHJlYW0uIFRoaXMgY2FuIGluY2x1ZGUgdmlkZW8gc2l6ZSwKLSAgICBhdWRpbyBzYW1wbGVyYXRlLCBjb2RlY3MgdXNlZCBhbmQgc28gb24uIFRhZ3MgYXJlIGhhbmRsZWQgdXNpbmcgdGhlCi0gICAgJkdTdHJlYW1lcjsgdGFnZ2luZyBzeXN0ZW0uIFN0cmVhbS1pbmZvIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBhCi0gICAgPGNsYXNzbmFtZT5Hc3RQYWQ8L2NsYXNzbmFtZT4gYnkgZ2V0dGluZyB0aGUgY3VycmVudCAobmVnb3RpYXRlZCkKLSAgICA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4gZm9yIHRoYXQgcGFkLgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXRhZ3MtcmVhZCI+Ci0gICAgPHRpdGxlPk1ldGFkYXRhIHJlYWRpbmc8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICBTdHJlYW0gaW5mb3JtYXRpb24gY2FuIG1vc3QgZWFzaWx5IGJlIHJlYWQgYnkgcmVhZGluZyBpdCBmcm9tIGEKLSAgICAgIDxjbGFzc25hbWU+R3N0UGFkPC9jbGFzc25hbWU+LiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gZGlzY3Vzc2VkIGJlZm9yZQotICAgICAgaW4gPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1jYXBzLW1ldGFkYXRhIi8+LiBUaGVyZWZvcmUsIHdlIHdpbGwgc2tpcAotICAgICAgaXQgaGVyZS4gTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgYWNjZXNzIHRvIGFsbCBwYWRzIG9mIHdoaWNoIHlvdQotICAgICAgd2FudCBzdHJlYW0gaW5mb3JtYXRpb24uCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBUYWcgcmVhZGluZyBpcyBkb25lIHRocm91Z2ggYSBidXMgaW4gJkdTdHJlYW1lcjssIHdoaWNoIGhhcyBiZWVuCi0gICAgICBkaXNjdXNzZWQgcHJldmlvdXNseSBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1cyIvPi4gWW91IGNhbgotICAgICAgbGlzdGVuIGZvciA8Y2xhc3NuYW1lPkdTVF9NRVNTQUdFX1RBRzwvY2xhc3NuYW1lPiBtZXNzYWdlcyBhbmQgaGFuZGxlCi0gICAgICB0aGVtIGFzIHlvdSB3aXNoLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIDxjbGFzc25hbWU+R1NUX01FU1NBR0VfVEFHPC9jbGFzc25hbWU+Ci0gICAgICBtZXNzYWdlIG1heSBiZSBmaXJlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcGlwZWxpbmUuIEl0IGlzIHRoZQotICAgICAgYXBwbGljYXRpb24ncyByZXNwb25zaWJpbGl0eSB0byBwdXQgYWxsIHRob3NlIHRhZ3MgdG9nZXRoZXIgYW5kCi0gICAgICBkaXNwbGF5IHRoZW0gdG8gdGhlIHVzZXIgaW4gYSBuaWNlLCBjb2hlcmVudCB3YXkuIFVzdWFsbHksIHVzaW5nCi0gICAgICA8ZnVuY3Rpb24+Z3N0X3RhZ19saXN0X21lcmdlICgpPC9mdW5jdGlvbj4gaXMgYSBnb29kIGVub3VnaCB3YXkKLSAgICAgIG9mIGRvaW5nIHRoaXM7IG1ha2Ugc3VyZSB0byBlbXB0eSB0aGUgY2FjaGUgd2hlbiBsb2FkaW5nIGEgbmV3IHNvbmcsCi0gICAgICBvciBhZnRlciBldmVyeSBmZXcgbWludXRlcyB3aGVuIGxpc3RlbmluZyB0byBpbnRlcm5ldCByYWRpby4gQWxzbywKLSAgICAgIG1ha2Ugc3VyZSB5b3UgdXNlIDxjbGFzc25hbWU+R1NUX1RBR19NRVJHRV9QUkVQRU5EPC9jbGFzc25hbWU+IGFzCi0gICAgICBtZXJnaW5nIG1vZGUsIHNvIHRoYXQgYSBuZXcgdGl0bGUgKHdoaWNoIGNhbWUgaW4gbGF0ZXIpIGhhcyBhCi0gICAgICBwcmVmZXJlbmNlIG92ZXIgdGhlIG9sZCBvbmUgZm9yIGRpc3BsYXkuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHdpbGwgZXh0cmFjdCB0YWdzIGZyb20gYSBmaWxlIGFuZCBwcmludCB0aGVtOgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci0vKiBjb21waWxlIHdpdGg6Ci0gKiBnY2MgLW8gdGFncyB0YWdzLmMgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdzdHJlYW1lci0xLjBgICovCi0jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotCi1zdGF0aWMgdm9pZAotcHJpbnRfb25lX3RhZyAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGludCBpLCBudW07Ci0KLSAgbnVtID0gZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAobGlzdCwgdGFnKTsKLSAgZm9yIChpID0gMDsgaSAmbHQ7IG51bTsgKytpKSB7Ci0gICAgY29uc3QgR1ZhbHVlICp2YWw7Ci0KLSAgICAvKiBOb3RlOiB3aGVuIGxvb2tpbmcgZm9yIHNwZWNpZmljIHRhZ3MsIHVzZSB0aGUgZ3N0X3RhZ19saXN0X2dldF94eXooKSBBUEksCi0gICAgICogd2Ugb25seSB1c2UgdGhlIEdWYWx1ZSBhcHByb2FjaCBoZXJlIGJlY2F1c2UgaXQgaXMgbW9yZSBnZW5lcmljICovCi0gICAgdmFsID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBpKTsKLSAgICBpZiAoR19WQUxVRV9IT0xEU19TVFJJTkcgKHZhbCkpIHsKLSAgICAgIGdfcHJpbnQgKCJcdCUyMHMgOiAlc1xuIiwgdGFnLCBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbCkpOwotICAgIH0gZWxzZSBpZiAoR19WQUxVRV9IT0xEU19VSU5UICh2YWwpKSB7Ci0gICAgICBnX3ByaW50ICgiXHQlMjBzIDogJXVcbiIsIHRhZywgZ192YWx1ZV9nZXRfdWludCAodmFsKSk7Ci0gICAgfSBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0RPVUJMRSAodmFsKSkgewotICAgICAgZ19wcmludCAoIlx0JTIwcyA6ICVnXG4iLCB0YWcsIGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsKSk7Ci0gICAgfSBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0JPT0xFQU4gKHZhbCkpIHsKLSAgICAgIGdfcHJpbnQgKCJcdCUyMHMgOiAlc1xuIiwgdGFnLAotICAgICAgICAgIChnX3ZhbHVlX2dldF9ib29sZWFuICh2YWwpKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0JVRkZFUiAodmFsKSkgewotICAgICAgR3N0QnVmZmVyICpidWYgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAodmFsKTsKLSAgICAgIGd1aW50IGJ1ZmZlcl9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLQotICAgICAgZ19wcmludCAoIlx0JTIwcyA6IGJ1ZmZlciBvZiBzaXplICV1XG4iLCB0YWcsIGJ1ZmZlcl9zaXplKTsKLSAgICB9IGVsc2UgaWYgKEdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUUgKHZhbCkpIHsKLSAgICAgIEdzdERhdGVUaW1lICpkdCA9IGdfdmFsdWVfZ2V0X2JveGVkICh2YWwpOwotICAgICAgZ2NoYXIgKmR0X3N0ciA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0KTsKLQotICAgICAgZ19wcmludCAoIlx0JTIwcyA6ICVzXG4iLCB0YWcsIGR0X3N0cik7Ci0gICAgICBnX2ZyZWUgKGR0X3N0cik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfcHJpbnQgKCJcdCUyMHMgOiB0YWcgb2YgdHlwZSAnJXMnXG4iLCB0YWcsIEdfVkFMVUVfVFlQRV9OQU1FICh2YWwpKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLW9uX25ld19wYWQgKEdzdEVsZW1lbnQgKiBkZWMsIEdzdFBhZCAqIHBhZCwgR3N0RWxlbWVudCAqIGZha2VzaW5rKQotewotICBHc3RQYWQgKnNpbmtwYWQ7Ci0KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChmYWtlc2luaywgInNpbmsiKTsKLSAgaWYgKCFnc3RfcGFkX2lzX2xpbmtlZCAoc2lua3BhZCkpIHsKLSAgICBpZiAoZ3N0X3BhZF9saW5rIChwYWQsIHNpbmtwYWQpICE9IEdTVF9QQURfTElOS19PSykKLSAgICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBwYWRzISIpOwotICB9Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGUsICpkZWMsICpzaW5rOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIGdjaGFyICp1cmk7Ci0KLSAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKLQotICBpZiAoYXJnYyAmbHQ7IDIpCi0gICAgZ19lcnJvciAoIlVzYWdlOiAlcyBGSUxFIG9yIFVSSSIsIGFyZ3ZbMF0pOwotCi0gIGlmIChnc3RfdXJpX2lzX3ZhbGlkIChhcmd2WzFdKSkgewotICAgIHVyaSA9IGdfc3RyZHVwIChhcmd2WzFdKTsKLSAgfSBlbHNlIHsKLSAgICB1cmkgPSBnc3RfZmlsZW5hbWVfdG9fdXJpIChhcmd2WzFdLCBOVUxMKTsKLSAgfQotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBkZWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1cmlkZWNvZGViaW4iLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChkZWMsICJ1cmkiLCB1cmksIE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIGRlYyk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc2luayk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoZGVjLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAob25fbmV3X3BhZCksIHNpbmspOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBHc3RUYWdMaXN0ICp0YWdzID0gTlVMTDsKLQotICAgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLAotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FLAotICAgICAgICBHU1RfTUVTU0FHRV9BU1lOQ19ET05FIHwgR1NUX01FU1NBR0VfVEFHIHwgR1NUX01FU1NBR0VfRVJST1IpOwotCi0gICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfVEFHKSAvKiBlcnJvciBvciBhc3luY19kb25lICovCi0gICAgICBicmVhazsKLQotICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RhZyAobXNnLCAmYW1wO3RhZ3MpOwotCi0gICAgZ19wcmludCAoIkdvdCB0YWdzIGZyb20gZWxlbWVudCAlczpcbiIsIEdTVF9PQkpFQ1RfTkFNRSAobXNnLSZndDtzcmMpKTsKLSAgICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAodGFncywgcHJpbnRfb25lX3RhZywgTlVMTCk7Ci0gICAgZ19wcmludCAoIlxuIik7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICB9Ci0KLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpIHsKLSAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmYW1wO2VyciwgTlVMTCk7Ci0gICAgZ19wcmludGVyciAoIkdvdCBlcnJvcjogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICB9Ci0KLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLSAgZ19mcmVlICh1cmkpOwotICByZXR1cm4gMDsKLX0KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi10YWdzLXdyaXRlIj4KLSAgICA8dGl0bGU+VGFnIHdyaXRpbmc8L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICBUYWcgd3JpdGluZyBpcyBkb25lIHVzaW5nIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKLQl1cmw9IiZVUkxBUEk7R3N0VGFnU2V0dGVyLmh0bWwiPjxjbGFzc25hbWU+R3N0VGFnU2V0dGVyPC9jbGFzc25hbWU+PC91bGluaz4KLSAgICAgIGludGVyZmFjZS4gQWxsIHRoYXQncyByZXF1aXJlZCBpcyBhIHRhZy1zZXQtc3VwcG9ydGluZyBlbGVtZW50IGluCi0gICAgICB5b3VyIHBpcGVsaW5lLiBJbiBvcmRlciB0byBzZWUgaWYgYW55IG9mIHRoZSBlbGVtZW50cyBpbiB5b3VyCi0gICAgICBwaXBlbGluZSBzdXBwb3J0cyB0YWcgd3JpdGluZywgeW91IGNhbiB1c2UgdGhlIGZ1bmN0aW9uCi0gICAgICA8ZnVuY3Rpb24+Z3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgKHBpcGVsaW5lLAotICAgICAgR1NUX1RZUEVfVEFHX1NFVFRFUik8L2Z1bmN0aW9uPi4gT24gdGhlIHJlc3VsdGluZyBlbGVtZW50LCB1c3VhbGx5Ci0gICAgICBhbiBlbmNvZGVyIG9yIG11eGVyLCB5b3UgY2FuIHVzZSA8ZnVuY3Rpb24+Z3N0X3RhZ19zZXR0ZXJfbWVyZ2UKLSAgICAgICgpPC9mdW5jdGlvbj4gKHdpdGggYSB0YWdsaXN0KSBvciA8ZnVuY3Rpb24+Z3N0X3RhZ19zZXR0ZXJfYWRkCi0gICAgICAoKTwvZnVuY3Rpb24+ICh3aXRoIGluZGl2aWR1YWwgdGFncykgdG8gc2V0IHRhZ3Mgb24gaXQuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQSBuaWNlIGV4dHJhIGZlYXR1cmUgaW4gJkdTdHJlYW1lcjsgdGFnIHN1cHBvcnQgaXMgdGhhdCB0YWdzIGFyZQotICAgICAgcHJlc2VydmVkIGluIHBpcGVsaW5lcy4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSB0cmFuc2NvZGUgb25lIGZpbGUKLSAgICAgIGNvbnRhaW5pbmcgdGFncyBpbnRvIGFub3RoZXIgbWVkaWEgdHlwZSwgYW5kIHRoYXQgbmV3IG1lZGlhIHR5cGUKLSAgICAgIHN1cHBvcnRzIHRhZ3MgdG9vLCB0aGVuIHRoZSB0YWdzIHdpbGwgYmUgaGFuZGxlZCBhcyBwYXJ0IG9mIHRoZQotICAgICAgZGF0YSBzdHJlYW0gYW5kIGJlIG1lcmdlZCBpbnRvIHRoZSBuZXdseSB3cml0dGVuIG1lZGlhIGZpbGUsIHRvby4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWwgYi9kb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODYzMzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLXF1ZXJ5ZXZlbnRzIj4KLSAgPHRpdGxlPlBvc2l0aW9uIHRyYWNraW5nIGFuZCBzZWVraW5nPC90aXRsZT4KLQotICA8cGFyYT4KLSAgICBTbyBmYXIsIHdlJ3ZlIGxvb2tlZCBhdCBob3cgdG8gY3JlYXRlIGEgcGlwZWxpbmUgdG8gZG8gbWVkaWEgcHJvY2Vzc2luZwotICAgIGFuZCBob3cgdG8gbWFrZSBpdCBydW4uIE1vc3QgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB3aWxsIGJlIGludGVyZXN0ZWQKLSAgICBpbiBwcm92aWRpbmcgZmVlZGJhY2sgdG8gdGhlIHVzZXIgb24gbWVkaWEgcHJvZ3Jlc3MuIE1lZGlhIHBsYXllcnMsIGZvcgotICAgIGV4YW1wbGUsIHdpbGwgd2FudCB0byBzaG93IGEgc2xpZGVyIHNob3dpbmcgdGhlIHByb2dyZXNzIGluIHRoZSBzb25nLAotICAgIGFuZCB1c3VhbGx5IGFsc28gYSBsYWJlbCBpbmRpY2F0aW5nIHN0cmVhbSBsZW5ndGguIFRyYW5zY29kaW5nCi0gICAgYXBwbGljYXRpb25zIHdpbGwgd2FudCB0byBzaG93IGEgcHJvZ3Jlc3MgYmFyIG9uIGhvdyBtdWNoIHBlcmNlbnQgb2YKLSAgICB0aGUgdGFzayBpcyBkb25lLiAmR1N0cmVhbWVyOyBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgZG9pbmcgYWxsIHRoaXMKLSAgICB1c2luZyBhIGNvbmNlcHQga25vd24gYXMgPGVtcGhhc2lzPnF1ZXJ5aW5nPC9lbXBoYXNpcz4uIFNpbmNlIHNlZWtpbmcKLSAgICBpcyB2ZXJ5IHNpbWlsYXIsIGl0IHdpbGwgYmUgZGlzY3Vzc2VkIGhlcmUgYXMgd2VsbC4gU2Vla2luZyBpcyBkb25lCi0gICAgdXNpbmcgdGhlIGNvbmNlcHQgb2YgPGVtcGhhc2lzPmV2ZW50czwvZW1waGFzaXM+LgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXF1ZXJ5aW5nIj4KLSAgICA8dGl0bGU+UXVlcnlpbmc6IGdldHRpbmcgdGhlIHBvc2l0aW9uIG9yIGxlbmd0aCBvZiBhIHN0cmVhbTwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFF1ZXJ5aW5nIGlzIGRlZmluZWQgYXMgcmVxdWVzdGluZyBhIHNwZWNpZmljIHN0cmVhbSBwcm9wZXJ0eSByZWxhdGVkCi0gICAgICB0byBwcm9ncmVzcyB0cmFja2luZy4gVGhpcyBpbmNsdWRlcyBnZXR0aW5nIHRoZSBsZW5ndGggb2YgYSBzdHJlYW0gKGlmCi0gICAgICBhdmFpbGFibGUpIG9yIGdldHRpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24uIFRob3NlIHN0cmVhbSBwcm9wZXJ0aWVzCi0gICAgICBjYW4gYmUgcmV0cmlldmVkIGluIHZhcmlvdXMgZm9ybWF0cyBzdWNoIGFzIHRpbWUsIGF1ZGlvIHNhbXBsZXMsIHZpZGVvCi0gICAgICBmcmFtZXMgb3IgYnl0ZXMuIFRoZSBmdW5jdGlvbiBtb3N0IGNvbW1vbmx5IHVzZWQgZm9yIHRoaXMgaXMKLSAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9xdWVyeSAoKTwvZnVuY3Rpb24+LCBhbHRob3VnaCBzb21lIGNvbnZlbmllbmNlCi0gICAgICB3cmFwcGVycyBhcmUgcHJvdmlkZWQgYXMgd2VsbCAoc3VjaCBhcwotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uICgpPC9mdW5jdGlvbj4gYW5kCi0gICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKCk8L2Z1bmN0aW9uPikuIFlvdSBjYW4gZ2VuZXJhbGx5Ci0gICAgICBxdWVyeSB0aGUgcGlwZWxpbmUgZGlyZWN0bHksIGFuZCBpdCdsbCBmaWd1cmUgb3V0IHRoZSBpbnRlcm5hbCBkZXRhaWxzCi0gICAgICBmb3IgeW91LCBsaWtlIHdoaWNoIGVsZW1lbnQgdG8gcXVlcnkuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBJbnRlcm5hbGx5LCBxdWVyaWVzIHdpbGwgYmUgc2VudCB0byB0aGUgc2lua3MsIGFuZAotICAgICAgPHF1b3RlPmRpc3BhdGNoZWQ8L3F1b3RlPiBiYWNrd2FyZHMgdW50aWwgb25lIGVsZW1lbnQgY2FuIGhhbmRsZSBpdDsKLSAgICAgIHRoYXQgcmVzdWx0IHdpbGwgYmUgc2VudCBiYWNrIHRvIHRoZSBmdW5jdGlvbiBjYWxsZXIuIFVzdWFsbHksIHRoYXQKLSAgICAgIGlzIHRoZSBkZW11eGVyLCBhbHRob3VnaCB3aXRoIGxpdmUgc291cmNlcyAoZnJvbSBhIHdlYmNhbSksIGl0IGlzIHRoZQotICAgICAgc291cmNlIGl0c2VsZi4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IS0tIGV4YW1wbGUtYmVnaW4gcXVlcnkuYyBhIC0tPgotI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLTwhLS0gZXhhbXBsZS1lbmQgcXVlcnkuYyBhIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHF1ZXJ5LmMgYiAtLT48IS0tCi1zdGF0aWMgdm9pZAotbXlfYnVzX21lc3NhZ2VfY2IgKEdzdEJ1cyAgICAgKmJ1cywKLSAgICAgICAgICAgICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IChHTWFpbkxvb3AgKikgZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogewotICAgICAgR0Vycm9yICplcnI7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmYW1wO2VyciwgJmFtcDtkZWJ1Zyk7Ci0gICAgICBnX3ByaW50ICgiRXJyb3I6ICVzXG4iLCBlcnItJmd0O21lc3NhZ2UpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgLyogZW5kLW9mLXN0cmVhbSAqLwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLS0tPgotPCEtLSBleGFtcGxlLWVuZCBxdWVyeS5jIGIgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gcXVlcnkuYyBjIC0tPgotc3RhdGljIGdib29sZWFuCi1jYl9wcmludF9wb3NpdGlvbiAoR3N0RWxlbWVudCAqcGlwZWxpbmUpCi17Ci0gIGdpbnQ2NCBwb3MsIGxlbjsKLQotICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHBpcGVsaW5lLCBHU1RfRk9STUFUX1RJTUUsICZhbXA7cG9zKQotICAgICZhbXA7JmFtcDsgZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKHBpcGVsaW5lLCBHU1RfRk9STUFUX1RJTUUsICZhbXA7bGVuKSkgewotICAgIGdfcHJpbnQgKCJUaW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiAvICUiIEdTVF9USU1FX0ZPUk1BVCAiXHIiLAotCSAgICAgR1NUX1RJTUVfQVJHUyAocG9zKSwgR1NUX1RJTUVfQVJHUyAobGVuKSk7Ci0gIH0KLQotICAvKiBjYWxsIG1lIGFnYWluICovCi0gIHJldHVybiBUUlVFOwotfQotCi1naW50Ci1tYWluIChnaW50ICAgYXJnYywKLSAgICAgIGdjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotPCEtLSBleGFtcGxlLWVuZCBxdWVyeS5jIGMgLS0+Ci1bLi5dPCEtLSBleGFtcGxlLWJlZ2luIHF1ZXJ5LmMgZCAtLT48IS0tCi0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR01haW5Mb29wICpsb29wOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIEdzdEJ1cyAqYnVzOwotICBnY2hhciAqbDsKLQotICAvKiBpbml0ICovCi0gIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7Ci0KLSAgLyogYXJncyAqLwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoIlVzYWdlOiAlcyAmbHQ7ZmlsZW5hbWUmZ3Q7XG4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUsIHRoZSBlYXN5IHdheSAqLwotICBsID0gZ19zdHJkdXBfcHJpbnRmICgiZmlsZXNyYyBsb2NhdGlvbj1cIiVzXCIgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhICIKLQkJICAgICAgICJhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYWxzYXNpbmsiLAotCQkgICAgICAgYXJndlsxXSk7Ci0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAobCwgJmFtcDtlcnIpOwotICBpZiAocGlwZWxpbmUgPT0gTlVMTCB8fCBlcnIgIT0gTlVMTCkgewotICAgIGdfcHJpbnRlcnIgKCJDYW5ub3QgYnVpbGQgcGlwZWxpbmU6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICBnX2ZyZWUgKGwpOwotICAgIGlmIChwaXBlbGluZSkKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZ19mcmVlIChsKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2UiLCBHX0NBTExCQUNLIChteV9idXNfbWVzc2FnZV9jYiksIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIC8qIHBsYXkgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIHNldCBwaXBlbGluZSB0byBQTEFZSU5HLlxuIik7Ci0tLT48IS0tIGV4YW1wbGUtZW5kIHF1ZXJ5LmMgZCAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBxdWVyeS5jIGUgLS0+Ci0gIC8qIHJ1biBwaXBlbGluZSAqLwotICBnX3RpbWVvdXRfYWRkICgyMDAsIChHU291cmNlRnVuYykgY2JfcHJpbnRfcG9zaXRpb24sIHBpcGVsaW5lKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLTwhLS0gZXhhbXBsZS1lbmQgcXVlcnkuYyBlIC0tPgotWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiBxdWVyeS5jIGYgLS0+PCEtLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7Ci0KLSAgcmV0dXJuIDA7Ci0tLT48IS0tIGV4YW1wbGUtZW5kIHF1ZXJ5LmMgZiAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBxdWVyeS5jIGcgLS0+Ci19Ci0gICAgPCEtLSBleGFtcGxlLWVuZCBxdWVyeS5jIGcgLS0+PC9wcm9ncmFtbGlzdGluZz4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tZXZlbnRzc2VlayI+Ci0gICAgPHRpdGxlPkV2ZW50czogc2Vla2luZyAoYW5kIG1vcmUpPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgRXZlbnRzIHdvcmsgaW4gYSB2ZXJ5IHNpbWlsYXIgd2F5IGFzIHF1ZXJpZXMuIERpc3BhdGNoaW5nLCBmb3IKLSAgICAgIGV4YW1wbGUsIHdvcmtzIGV4YWN0bHkgdGhlIHNhbWUgZm9yIGV2ZW50cyAoYW5kIGFsc28gaGFzIHRoZSBzYW1lCi0gICAgICBsaW1pdGF0aW9ucyksIGFuZCB0aGV5IGNhbiBzaW1pbGFybHkgYmUgc2VudCB0byB0aGUgdG9wbGV2ZWwgcGlwZWxpbmUKLSAgICAgIGFuZCBpdCB3aWxsIGZpZ3VyZSBvdXQgZXZlcnl0aGluZyBmb3IgeW91LiBBbHRob3VnaCB0aGVyZSBhcmUgbW9yZQotICAgICAgd2F5cyBpbiB3aGljaCBhcHBsaWNhdGlvbnMgYW5kIGVsZW1lbnRzIGNhbiBpbnRlcmFjdCB1c2luZyBldmVudHMsCi0gICAgICB3ZSB3aWxsIG9ubHkgZm9jdXMgb24gc2Vla2luZyBoZXJlLiBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIHNlZWstZXZlbnQuCi0gICAgICBBIHNlZWstZXZlbnQgY29udGFpbnMgYSBwbGF5YmFjayByYXRlLCBhIHNlZWsgb2Zmc2V0IGZvcm1hdCAod2hpY2ggaXMKLSAgICAgIHRoZSB1bml0IG9mIHRoZSBvZmZzZXRzIHRvIGZvbGxvdywgZS5nLiB0aW1lLCBhdWRpbyBzYW1wbGVzLCB2aWRlbwotICAgICAgZnJhbWVzIG9yIGJ5dGVzKSwgb3B0aW9uYWxseSBhIHNldCBvZiBzZWVraW5nLXJlbGF0ZWQgZmxhZ3MgKGUuZy4KLSAgICAgIHdoZXRoZXIgaW50ZXJuYWwgYnVmZmVycyBzaG91bGQgYmUgZmx1c2hlZCksIGEgc2VlayBtZXRob2QgKHdoaWNoCi0gICAgICBpbmRpY2F0ZXMgcmVsYXRpdmUgdG8gd2hhdCB0aGUgb2Zmc2V0IHdhcyBnaXZlbiksIGFuZCBzZWVrIG9mZnNldHMuCi0gICAgICBUaGUgZmlyc3Qgb2Zmc2V0IChjdXIpIGlzIHRoZSBuZXcgcG9zaXRpb24gdG8gc2VlayB0bywgd2hpbGUKLSAgICAgIHRoZSBzZWNvbmQgb2Zmc2V0IChzdG9wKSBpcyBvcHRpb25hbCBhbmQgc3BlY2lmaWVzIGEgcG9zaXRpb24gd2hlcmUKLSAgICAgIHN0cmVhbWluZyBpcyBzdXBwb3NlZCB0byBzdG9wLiBVc3VhbGx5IGl0IGlzIGZpbmUgdG8ganVzdCBzcGVjaWZ5Ci0gICAgICBHU1RfU0VFS19UWVBFX05PTkUgYW5kIC0xIGFzIGVuZF9tZXRob2QgYW5kIGVuZCBvZmZzZXQuIFRoZSBiZWhhdmlvdXIKLSAgICAgIG9mIGEgc2VlayBpcyBhbHNvIHdyYXBwZWQgaW4gdGhlIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9zZWVrICgpPC9mdW5jdGlvbj4uCi0gICAgPC9wYXJhPgotCi0gICAgPHByb2dyYW1saXN0aW5nPgotc3RhdGljIHZvaWQKLXNlZWtfdG9fdGltZSAoR3N0RWxlbWVudCAqcGlwZWxpbmUsCi0JICAgICAgZ2ludDY0ICAgICAgdGltZV9uYW5vc2Vjb25kcykKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9zZWVrIChwaXBlbGluZSwgMS4wLCBHU1RfRk9STUFUX1RJTUUsIEdTVF9TRUVLX0ZMQUdfRkxVU0gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHRpbWVfbmFub3NlY29uZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCBHU1RfQ0xPQ0tfVElNRV9OT05FKSkgewotICAgIGdfcHJpbnQgKCJTZWVrIGZhaWxlZCFcbiIpOwotICB9Ci19Ci0gICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICA8cGFyYT4KLSAgICAgIFNlZWtzIHdpdGggdGhlIEdTVF9TRUVLX0ZMQUdfRkxVU0ggc2hvdWxkIGJlIGRvbmUgd2hlbiB0aGUgcGlwZWxpbmUgaXMKLSAgICAgIGluIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlLiBUaGUgcGlwZWxpbmUgd2lsbCBhdXRvbWF0aWNhbGx5IGdvIHRvIHByZXJvbGwKLSAgICAgIHN0YXRlIHVudGlsIHRoZSBuZXcgZGF0YSBhZnRlciB0aGUgc2VlayB3aWxsIGNhdXNlIHRoZSBwaXBlbGluZSB0byBwcmVyb2xsCi0gICAgICBhZ2Fpbi4gQWZ0ZXIgdGhlIHBpcGVsaW5lIGlzIHByZXJvbGxlZCwgaXQgd2lsbCBnbyBiYWNrIHRvIHRoZSBzdGF0ZQotICAgICAgKFBBVVNFRCBvciBQTEFZSU5HKSBpdCB3YXMgaW4gd2hlbiB0aGUgc2VlayB3YXMgZXhlY3V0ZWQuIFlvdSBjYW4gd2FpdAotICAgICAgKGJsb2NraW5nKSBmb3IgdGhlIHNlZWsgdG8gY29tcGxldGUgd2l0aAotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2dldF9zdGF0ZSgpPC9mdW5jdGlvbj4gb3IgYnkgd2FpdGluZyBmb3IgdGhlCi0gICAgICBBU1lOQ19ET05FIG1lc3NhZ2UgdG8gYXBwZWFyIG9uIHRoZSBidXMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBTZWVrcyB3aXRob3V0IHRoZSBHU1RfU0VFS19GTEFHX0ZMVVNIIHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbiB0aGUKLSAgICAgIHBpcGVsaW5lIGlzIGluIHRoZSBQTEFZSU5HIHN0YXRlLiBFeGVjdXRpbmcgYSBub24tZmx1c2hpbmcgc2VlayBpbiB0aGUKLSAgICAgIFBBVVNFRCBzdGF0ZSBtaWdodCBkZWFkbG9jayBiZWNhdXNlIHRoZSBwaXBlbGluZSBzdHJlYW1pbmcgdGhyZWFkcyBtaWdodAotICAgICAgYmUgYmxvY2tlZCBpbiB0aGUgc2lua3MuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGlzZSB0aGF0IHNlZWtzIHdpbGwgbm90IGhhcHBlbiBpbnN0YW50bHkgaW4gdGhlCi0gICAgICBzZW5zZSB0aGF0IHRoZXkgYXJlIGZpbmlzaGVkIHdoZW4gdGhlIGZ1bmN0aW9uCi0gICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfc2VlayAoKTwvZnVuY3Rpb24+IHJldHVybnMuIERlcGVuZGluZyBvbiB0aGUKLSAgICAgIHNwZWNpZmljIGVsZW1lbnRzIGludm9sdmVkLCB0aGUgYWN0dWFsIHNlZWtpbmcgbWlnaHQgYmUgZG9uZSBsYXRlciBpbgotICAgICAgYW5vdGhlciB0aHJlYWQgKHRoZSBzdHJlYW1pbmcgdGhyZWFkKSwgYW5kIGl0IG1pZ2h0IHRha2UgYSBzaG9ydCB0aW1lCi0gICAgICB1bnRpbCBidWZmZXJzIGZyb20gdGhlIG5ldyBzZWVrIHBvc2l0aW9uIHdpbGwgcmVhY2ggZG93bnN0cmVhbSBlbGVtZW50cwotICAgICAgc3VjaCBhcyBzaW5rcyAoaWYgdGhlIHNlZWsgd2FzIG5vbi1mbHVzaGluZyB0aGVuIGl0IG1pZ2h0IHRha2UgYSBiaXQKLSAgICAgIGxvbmdlcikuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBJdCBpcyBwb3NzaWJsZSB0byBkbyBtdWx0aXBsZSBzZWVrcyBpbiBzaG9ydCB0aW1lLWludGVydmFscywgc3VjaCBhcwotICAgICAgYSBkaXJlY3QgcmVzcG9uc2UgdG8gc2xpZGVyIG1vdmVtZW50LiBBZnRlciBhIHNlZWssIGludGVybmFsbHksIHRoZQotICAgICAgcGlwZWxpbmUgd2lsbCBiZSBwYXVzZWQgKGlmIGl0IHdhcyBwbGF5aW5nKSwgdGhlIHBvc2l0aW9uIHdpbGwgYmUKLSAgICAgIHJlLXNldCBpbnRlcm5hbGx5LCB0aGUgZGVtdXhlcnMgYW5kIGRlY29kZXJzIHdpbGwgZGVjb2RlIGZyb20gdGhlIG5ldwotICAgICAgcG9zaXRpb24gb253YXJkcyBhbmQgdGhpcyB3aWxsIGNvbnRpbnVlIHVudGlsIGFsbCBzaW5rcyBoYXZlIGRhdGEKLSAgICAgIGFnYWluLiBJZiBpdCB3YXMgcGxheWluZyBvcmlnaW5hbGx5LCBpdCB3aWxsIGJlIHNldCB0byBwbGF5aW5nIGFnYWluLAotICAgICAgdG9vLiBTaW5jZSB0aGUgbmV3IHBvc2l0aW9uIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBpbiBhIHZpZGVvIG91dHB1dCwKLSAgICAgIHlvdSB3aWxsIHNlZSB0aGUgbmV3IGZyYW1lLCBldmVuIGlmIHlvdXIgcGlwZWxpbmUgaXMgbm90IGluIHRoZSBwbGF5aW5nCi0gICAgICBzdGF0ZS4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+Ci0KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sIGIvZG9jcy9tYW51YWwvYWR2YW5jZWQtdGhyZWFkcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMmY1MGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYWR2YW5jZWQtdGhyZWFkcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ODEgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItdGhyZWFkcyI+Ci0gIDx0aXRsZT5UaHJlYWRzPC90aXRsZT4KLSAgPHBhcmE+IAotICAgICZHU3RyZWFtZXI7IGlzIGluaGVyZW50bHkgbXVsdGktdGhyZWFkZWQsIGFuZCBpcyBmdWxseSB0aHJlYWQtc2FmZS4KLSAgICBNb3N0IHRocmVhZGluZyBpbnRlcm5hbHMgYXJlIGhpZGRlbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgd2hpY2ggc2hvdWxkCi0gICAgbWFrZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBlYXNpZXIuIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIGFwcGxpY2F0aW9ucwotICAgIG1heSB3YW50IHRvIGhhdmUgaW5mbHVlbmNlIG9uIHNvbWUgcGFydHMgb2YgdGhvc2UuICZHU3RyZWFtZXI7IGFsbG93cwotICAgIGFwcGxpY2F0aW9ucyB0byBmb3JjZSB0aGUgdXNlIG9mIG11bHRpcGxlIHRocmVhZHMgb3ZlciBzb21lIHBhcnRzIG9mCi0gICAgYSBwaXBlbGluZS4KLSAgICBTZWUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi10aHJlYWRzLXVzZXMiLz4uCi0gIDwvcGFyYT4KLSAgPHBhcmE+IAotICAgICZHU3RyZWFtZXI7IGNhbiBhbHNvIG5vdGlmeSB5b3Ugd2hlbiB0aHJlYWRzIGFyZSBjcmVhdGVkIHNvIHRoYXQgeW91IGNhbgotICAgIGNvbmZpZ3VyZSB0aGluZ3Mgc3VjaCBhcyB0aGUgdGhyZWFkIHByaW9yaXR5IG9yIHRoZSB0aHJlYWRwb29sIHRvIHVzZS4KLSAgICBTZWUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi10aHJlYWRzLXN0YXR1cyIvPi4KLSAgPC9wYXJhPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi10aHJlYWRzLXNjaGVkdWxpbmciPgotICAgIDx0aXRsZT5TY2hlZHVsaW5nIGluICZHU3RyZWFtZXI7PC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEVhY2ggZWxlbWVudCBpbiB0aGUgJkdTdHJlYW1lcjsgcGlwZWxpbmUgZGVjaWRlcyBob3cgaXQgaXMgZ29pbmcgdG8KLSAgICAgIGJlIHNjaGVkdWxlZC4gRWxlbWVudHMgY2FuIGNob29zZSBpZiB0aGVpciBwYWRzIGFyZSB0byBiZSBzY2hlZHVsZWQKLSAgICAgIHB1c2gtYmFzZWQgb3IgcHVsbC1iYXNlZC4gQW4gZWxlbWVudCBjYW4sIGZvciBleGFtcGxlLCBjaG9vc2UgdG8gc3RhcnQKLSAgICAgIGEgdGhyZWFkIHRvIHN0YXJ0IHB1bGxpbmcgZnJvbSB0aGUgc2luayBwYWQgb3IvYW5kIHN0YXJ0IHB1c2hpbmcgb24KLSAgICAgIHRoZSBzb3VyY2UgcGFkLiBBbiBlbGVtZW50IGNhbiBhbHNvIGNob29zZSB0byB1c2UgdGhlIHVwc3RyZWFtIG9yCi0gICAgICBkb3duc3RyZWFtIHRocmVhZCBmb3IgaXRzIGRhdGEgcHJvY2Vzc2luZyBpbiBwdXNoIGFuZCBwdWxsIG1vZGUKLSAgICAgIHJlc3BlY3RpdmVseS4gJkdTdHJlYW1lcjsgZG9lcyBub3QgcG9zZSBhbnkgcmVzdHJpY3Rpb25zIG9uIGhvdyB0aGUKLSAgICAgIGVsZW1lbnQgY2hvb3NlcyB0byBiZSBzY2hlZHVsZWQuIFNlZSB0aGUgUGx1Z2luIFdyaXRlciBHdWlkZSBmb3IgbW9yZQotICAgICAgZGV0YWlscy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBXaGF0IHdpbGwgaGFwcGVuIGluIGFueSBjYXNlIGlzIHRoYXQgc29tZSBlbGVtZW50cyB3aWxsIHN0YXJ0IGEgdGhyZWFkCi0gICAgICBmb3IgdGhlaXIgZGF0YSBwcm9jZXNzaW5nLCBjYWxsZWQgdGhlIDxxdW90ZT5zdHJlYW1pbmcgdGhyZWFkczwvcXVvdGU+LiAKLSAgICAgIFRoZSBzdHJlYW1pbmcgdGhyZWFkcywgb3IgPGNsYXNzbmFtZT5Hc3RUYXNrPC9jbGFzc25hbWU+IG9iamVjdHMsIGFyZQotICAgICAgY3JlYXRlZCBmcm9tIGEgPGNsYXNzbmFtZT5Hc3RUYXNrUG9vbDwvY2xhc3NuYW1lPiB3aGVuIHRoZSBlbGVtZW50Ci0gICAgICBuZWVkcyB0byBtYWtlIGEgc3RyZWFtaW5nIHRocmVhZC4gSW4gdGhlIG5leHQgc2VjdGlvbiB3ZSBzZWUgaG93IHdlCi0gICAgICBjYW4gcmVjZWl2ZSBub3RpZmljYXRpb25zIG9mIHRoZSB0YXNrcyBhbmQgcG9vbHMuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi10aHJlYWRzLXN0YXR1cyI+Ci0gICAgPHRpdGxlPkNvbmZpZ3VyaW5nIFRocmVhZHMgaW4gJkdTdHJlYW1lcjs8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQSBTVFJFQU1fU1RBVFVTIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMgdG8gaW5mb3JtIHlvdSBhYm91dCB0aGUKLSAgICAgIHN0YXR1cyBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZHMuIFlvdSB3aWxsIGdldCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uCi0gICAgICBmcm9tIHRoZSBtZXNzYWdlOgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgV2hlbiBhIG5ldyB0aHJlYWQgaXMgYWJvdXQgdG8gYmUgY3JlYXRlZCwgeW91IHdpbGwgYmUgbm90aWZpZWQKLSAgICAgICAgICAgIG9mIHRoaXMgd2l0aCBhIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFIHR5cGUuIEl0IGlzIHRoZW4KLSAgICAgICAgICAgIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBhIDxjbGFzc25hbWU+R3N0VGFza1Bvb2w8L2NsYXNzbmFtZT4gaW4KLSAgICAgICAgICAgIHRoZSA8Y2xhc3NuYW1lPkdzdFRhc2s8L2NsYXNzbmFtZT4uIFRoZSBjdXN0b20gdGFza3Bvb2wgd2lsbAotICAgICAgICAgICAgcHJvdmlkZSBjdXN0b20gdGhyZWFkcyBmb3IgdGhlIHRhc2sgdG8gaW1wbGVtZW50IHRoZSBzdHJlYW1pbmcKLSAgICAgICAgICAgIHRocmVhZHMuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhpcyBtZXNzYWdlIG5lZWRzIHRvIGJlIGhhbmRsZWQgc3luY2hyb25vdXNseSBpZiB5b3Ugd2FudCB0bwotICAgICAgICAgICAgY29uZmlndXJlIGEgY3VzdG9tIHRhc2twb29sLiBJZiB5b3UgZG9uJ3QgY29uZmlndXJlIHRoZSB0YXNrcG9vbAotICAgICAgICAgICAgb24gdGhlIHRhc2sgd2hlbiB0aGlzIG1lc3NhZ2UgcmV0dXJucywgdGhlIHRhc2sgd2lsbCB1c2UgaXRzCi0gICAgICAgICAgICBkZWZhdWx0IHBvb2wuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBXaGVuIGEgdGhyZWFkIGlzIGVudGVyZWQgb3IgbGVmdC4gVGhpcyBpcyB0aGUgbW9tZW50IHdoZXJlIHlvdQotICAgICAgICAgICAgY291bGQgY29uZmlndXJlIHRocmVhZCBwcmlvcml0aWVzLiBZb3UgYWxzbyBnZXQgYSBub3RpZmljYXRpb24KLSAgICAgICAgICAgIHdoZW4gYSB0aHJlYWQgaXMgZGVzdHJveWVkLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgWW91IGdldCBtZXNzYWdlcyB3aGVuIHRoZSB0aHJlYWQgc3RhcnRzLCBwYXVzZXMgYW5kIHN0b3BzLiBUaGlzCi0gICAgICAgICAgICBjb3VsZCBiZSB1c2VkIHRvIHZpc3VhbGl6ZSB0aGUgc3RhdHVzIG9mIHN0cmVhbWluZyB0aHJlYWRzIGluCi0gICAgICAgICAgICBhIGd1aSBhcHBsaWNhdGlvbi4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgV2Ugd2lsbCBub3cgbG9vayBhdCBzb21lIGV4YW1wbGVzIGluIHRoZSBuZXh0IHNlY3Rpb25zLgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi10aHJlYWRzLXJ0Ij4KLSAgICAgIDx0aXRsZT5Cb29zdCBwcmlvcml0eSBvZiBhIHRocmVhZDwvdGl0bGU+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIC4tLS0tLS0tLS0tLiAgICAuLS0tLS0tLS0tLS4KLSAgICAgICAgfCBmYWtzZXNyYyB8ICAgIHwgZmFrZXNpbmsgfAotICAgICAgICB8ICAgICAgICAgc3JjLT5zaW5rICAgICAgICB8Ci0gICAgICAgICctLS0tLS0tLS0tJyAgICAnLS0tLS0tLS0tLScKLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgTGV0J3MgbG9vayBhdCB0aGUgc2ltcGxlIHBpcGVsaW5lIGFib3ZlLiBXZSB3b3VsZCBsaWtlIHRvIGJvb3N0Ci0gICAgICAgIHRoZSBwcmlvcml0eSBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLSAgICAgICAgSXQgd2lsbCBiZSB0aGUgZmFrZXNyYyBlbGVtZW50IHRoYXQgc3RhcnRzIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGZvcgotICAgICAgICBnZW5lcmF0aW5nIHRoZSBmYWtlIGRhdGEgcHVzaGluZyB0aGVtIHRvIHRoZSBwZWVyIGZha2VzaW5rLgotICAgICAgICBUaGUgZmxvdyBmb3IgY2hhbmdpbmcgdGhlIHByaW9yaXR5IHdvdWxkIGdvIGxpa2UgdGhpczoKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdoZW4gZ29pbmcgZnJvbSBSRUFEWSB0byBQQVVTRUQgc3RhdGUsIGZha2VzcmMgd2lsbCByZXF1aXJlIGEKLSAgICAgICAgICAgIHN0cmVhbWluZyB0aHJlYWQgZm9yIHB1c2hpbmcgZGF0YSBpbnRvIHRoZSBmYWtlc2luay4gSXQgd2lsbAotICAgICAgICAgICAgcG9zdCBhIFNUUkVBTV9TVEFUVVMgbWVzc2FnZSBpbmRpY2F0aW5nIGl0cyByZXF1aXJlbWVudCBmb3IgYQotICAgICAgICAgICAgc3RyZWFtaW5nIHRocmVhZC4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiB3aWxsIHJlYWN0IHRvIHRoZSBTVFJFQU1fU1RBVFVTIG1lc3NhZ2VzIHdpdGggYQotICAgICAgICAgICAgc3luYyBidXMgaGFuZGxlci4gSXQgd2lsbCB0aGVuIGNvbmZpZ3VyZSBhIGN1c3RvbQotICAgICAgICAgICAgPGNsYXNzbmFtZT5Hc3RUYXNrUG9vbDwvY2xhc3NuYW1lPiBvbiB0aGUKLSAgICAgICAgICAgIDxjbGFzc25hbWU+R3N0VGFzazwvY2xhc3NuYW1lPiBpbnNpZGUgdGhlIG1lc3NhZ2UuIFRoZSBjdXN0b20KLSAgICAgICAgICAgIHRhc2twb29sIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgdGhyZWFkcy4gSW4gdGhpcwotICAgICAgICAgICAgZXhhbXBsZSB3ZSB3aWxsIG1ha2UgYSB0aHJlYWQgd2l0aCBhIGhpZ2hlciBwcmlvcml0eS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHNpbmNlIHRoZSBzeW5jIG1lc3NhZ2UgaXMgY2FsbGVkIGluIHRoZSB0aHJlYWQKLSAgICAgICAgICAgIGNvbnRleHQsIHlvdSBjYW4gdXNlIHRocmVhZCBFTlRFUi9MRUFWRSBub3RpZmljYXRpb25zIHRvCi0gICAgICAgICAgICBjaGFuZ2UgdGhlIHByaW9yaXR5IG9yIHNjaGVkdWxpbmcgcG9sbGljeSBvZiB0aGUgY3VycmVudCB0aHJlYWQuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gYSBmaXJzdCBzdGVwIHdlIG5lZWQgdG8gaW1wbGVtZW50IGEgY3VzdG9tCi0gICAgICAgIDxjbGFzc25hbWU+R3N0VGFza1Bvb2w8L2NsYXNzbmFtZT4gdGhhdCB3ZSBjYW4gY29uZmlndXJlIG9uIHRoZSB0YXNrLgotICAgICAgICBCZWxvdyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSA8Y2xhc3NuYW1lPkdzdFRhc2tQb29sPC9jbGFzc25hbWU+Ci0gICAgICAgIHN1YmNsYXNzIHRoYXQgdXNlcyBwdGhyZWFkcyB0byBjcmVhdGUgYSBTQ0hFRF9SUiByZWFsLXRpbWUgdGhyZWFkLgotICAgICAgICBOb3RlIHRoYXQgY3JlYXRpbmcgcmVhbC10aW1lIHRocmVhZHMgbWlnaHQgcmVxdWlyZSBleHRyYSBwcml2ZWxlZ2VzLgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCEtLSBleGFtcGxlLWJlZ2luIHRlc3RydHBvb2wuYyBhIC0tPgotPCEtLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2RlZmluZSBURVNUX1RZUEVfUlRfUE9PTCAgICAgICAgICAgICAodGVzdF9ydF9wb29sX2dldF90eXBlICgpKQotI2RlZmluZSBURVNUX1JUX1BPT0wocG9vbCkgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChwb29sKSwgVEVTVF9UWVBFX1JUX1BPT0wsIFRlc3RSVFBvb2wpKQotI2RlZmluZSBURVNUX0lTX1JUX1BPT0wocG9vbCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChwb29sKSwgVEVTVF9UWVBFX1JUX1BPT0wpKQotI2RlZmluZSBURVNUX1JUX1BPT0xfQ0xBU1MocGNsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChwY2xhc3MpLCBURVNUX1RZUEVfUlRfUE9PTCwgVGVzdFJUUG9vbENsYXNzKSkKLSNkZWZpbmUgVEVTVF9JU19SVF9QT09MX0NMQVNTKHBjbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgocGNsYXNzKSwgVEVTVF9UWVBFX1JUX1BPT0wpKQotI2RlZmluZSBURVNUX1JUX1BPT0xfR0VUX0NMQVNTKHBvb2wpICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKHBvb2wpLCBURVNUX1RZUEVfUlRfUE9PTCwgVGVzdFJUUG9vbENsYXNzKSkKLSNkZWZpbmUgVEVTVF9SVF9QT09MX0NBU1QocG9vbCkgICAgICAgKChUZXN0UlRQb29sKikocG9vbCkpCi0KLXR5cGVkZWYgc3RydWN0IF9UZXN0UlRQb29sIFRlc3RSVFBvb2w7Ci10eXBlZGVmIHN0cnVjdCBfVGVzdFJUUG9vbENsYXNzIFRlc3RSVFBvb2xDbGFzczsKLQotc3RydWN0IF9UZXN0UlRQb29sIHsKLSAgR3N0VGFza1Bvb2wgICAgb2JqZWN0OwotfTsKLQotc3RydWN0IF9UZXN0UlRQb29sQ2xhc3MgewotICBHc3RUYXNrUG9vbENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlICAgICAgICAgICB0ZXN0X3J0X3Bvb2xfZ2V0X3R5cGUgICAgKHZvaWQpOwotCi1Hc3RUYXNrUG9vbCAqICAgdGVzdF9ydF9wb29sX25ldyAgICAgICAgICh2b2lkKTsKLQotLS0+Ci08IS0tIGV4YW1wbGUtZW5kIHRlc3RydHBvb2wuYyBhLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gdGVzdHJ0cG9vbC5jIGIgLS0+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIHB0aHJlYWRfdCB0aHJlYWQ7Ci19IFRlc3RSVElkOwotCi1HX0RFRklORV9UWVBFIChUZXN0UlRQb29sLCB0ZXN0X3J0X3Bvb2wsIEdTVF9UWVBFX1RBU0tfUE9PTCk7Ci0KLXN0YXRpYyB2b2lkCi1kZWZhdWx0X3ByZXBhcmUgKEdzdFRhc2tQb29sICogcG9vbCwgR0Vycm9yICoqIGVycm9yKQotewotICAvKiB3ZSBkb24ndCBkbyBhbnl0aGluZyBoZXJlLiBXZSBjb3VsZCBjb25zdHJ1Y3QgYSBwb29sIG9mIHRocmVhZHMgaGVyZSB0aGF0Ci0gICAqIHdlIGNvdWxkIHJldXNlIGxhdGVyIGJ1dCB3ZSBkb24ndCAqLwotfQotCi1zdGF0aWMgdm9pZAotZGVmYXVsdF9jbGVhbnVwIChHc3RUYXNrUG9vbCAqIHBvb2wpCi17Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotZGVmYXVsdF9wdXNoIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgZGF0YSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIFRlc3RSVElkICp0aWQ7Ci0gIGdpbnQgcmVzOwotICBwdGhyZWFkX2F0dHJfdCBhdHRyOwotICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07Ci0KLSAgdGlkID0gZ19zbGljZV9uZXcwIChUZXN0UlRJZCk7Ci0KLSAgcHRocmVhZF9hdHRyX2luaXQgKCZhdHRyKTsKLSAgaWYgKChyZXMgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKCZhdHRyLCBTQ0hFRF9SUikpICE9IDApCi0gICAgZ193YXJuaW5nICgic2V0c2NoZWRwb2xpY3k6IGZhaWx1cmU6ICVwIiwgZ19zdHJlcnJvciAocmVzKSk7Ci0KLSAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSA1MDsKLSAgaWYgKChyZXMgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAoJmF0dHIsICZwYXJhbSkpICE9IDApCi0gICAgZ193YXJuaW5nICgic2V0c2NoZWRwYXJhbTogZmFpbHVyZTogJXAiLCBnX3N0cmVycm9yIChyZXMpKTsKLQotICBpZiAoKHJlcyA9IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKCZhdHRyLCBQVEhSRUFEX0VYUExJQ0lUX1NDSEVEKSkgIT0gMCkKLSAgICBnX3dhcm5pbmcgKCJzZXRpbmhlcml0c2NoZWQ6IGZhaWx1cmU6ICVwIiwgZ19zdHJlcnJvciAocmVzKSk7Ci0KLSAgcmVzID0gcHRocmVhZF9jcmVhdGUgKCZ0aWQtPnRocmVhZCwgJmF0dHIsICh2b2lkICooKikodm9pZCAqKSkgZnVuYywgZGF0YSk7Ci0KLSAgaWYgKHJlcyAhPSAwKSB7Ci0gICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHX1RIUkVBRF9FUlJPUiwgR19USFJFQURfRVJST1JfQUdBSU4sCi0gICAgICAgICJFcnJvciBjcmVhdGluZyB0aHJlYWQ6ICVzIiwgZ19zdHJlcnJvciAocmVzKSk7Ci0gICAgZ19zbGljZV9mcmVlIChUZXN0UlRJZCwgdGlkKTsKLSAgICB0aWQgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIHRpZDsKLX0KLQotc3RhdGljIHZvaWQKLWRlZmF1bHRfam9pbiAoR3N0VGFza1Bvb2wgKiBwb29sLCBncG9pbnRlciBpZCkKLXsKLSAgVGVzdFJUSWQgKnRpZCA9IChUZXN0UlRJZCAqKSBpZDsKLQotICBwdGhyZWFkX2pvaW4gKHRpZC0+dGhyZWFkLCBOVUxMKTsKLQotICBnX3NsaWNlX2ZyZWUgKFRlc3RSVElkLCB0aWQpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9ydF9wb29sX2NsYXNzX2luaXQgKFRlc3RSVFBvb2xDbGFzcyAqIGtsYXNzKQotewotICBHc3RUYXNrUG9vbENsYXNzICpnc3R0YXNrcG9vbF9jbGFzczsKLQotICBnc3R0YXNrcG9vbF9jbGFzcyA9IChHc3RUYXNrUG9vbENsYXNzICopIGtsYXNzOwotCi0gIGdzdHRhc2twb29sX2NsYXNzLT5wcmVwYXJlID0gZGVmYXVsdF9wcmVwYXJlOwotICBnc3R0YXNrcG9vbF9jbGFzcy0+Y2xlYW51cCA9IGRlZmF1bHRfY2xlYW51cDsKLSAgZ3N0dGFza3Bvb2xfY2xhc3MtPnB1c2ggPSBkZWZhdWx0X3B1c2g7Ci0gIGdzdHRhc2twb29sX2NsYXNzLT5qb2luID0gZGVmYXVsdF9qb2luOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9ydF9wb29sX2luaXQgKFRlc3RSVFBvb2wgKiBwb29sKQotewotfQotCi1Hc3RUYXNrUG9vbCAqCi10ZXN0X3J0X3Bvb2xfbmV3ICh2b2lkKQotewotICBHc3RUYXNrUG9vbCAqcG9vbDsKLQotICBwb29sID0gZ19vYmplY3RfbmV3IChURVNUX1RZUEVfUlRfUE9PTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHBvb2w7Ci19Ci1dXT4KLTwhLS0gZXhhbXBsZS1lbmQgdGVzdHJ0cG9vbC5jIGIgLS0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gaW1wbGVtZW50IHdoZW4gd3JpdGluZyBhbiB0YXNrcG9vbCBpcyB0aGUKLSAgICAgICAgPHF1b3RlPnB1c2g8L3F1b3RlPiBmdW5jdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBzdGFydCBhIHRocmVhZAotICAgICAgICB0aGF0IGNhbGxzIHRoZSBnaXZlbiBmdW5jdGlvbi4gTW9yZSBpbnZvbHZlZCBpbXBsZW1lbnRhdGlvbnMgbWlnaHQKLSAgICAgICAgd2FudCB0byBrZWVwIHNvbWUgdGhyZWFkcyBhcm91bmQgaW4gYSBwb29sIGJlY2F1c2UgY3JlYXRpbmcgYW5kCi0gICAgICAgIGRlc3Ryb3lpbmcgdGhyZWFkcyBpcyBub3QgYWx3YXlzIHRoZSBmYXN0ZXN0IG9wZXJhdGlvbi4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiBhIG5leHQgc3RlcCB3ZSBuZWVkIHRvIGFjdHVhbGx5IGNvbmZpZ3VyZSB0aGUgY3VzdG9tIHRhc2twb29sIHdoZW4KLSAgICAgICAgdGhlIGZha2VzcmMgbmVlZHMgaXQuIEZvciB0aGlzIHdlIGludGVyY2VwdCB0aGUgU1RSRUFNX1NUQVRVUyBtZXNzYWdlcwotICAgICAgICB3aXRoIGEgc3luYyBoYW5kbGVyLgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCEtLSBleGFtcGxlLWJlZ2luIHRlc3RydHBvb2wuYyBjIC0tPgotPCFbQ0RBVEFbCi1zdGF0aWMgR01haW5Mb29wKiBsb29wOwotCi1zdGF0aWMgdm9pZAotb25fc3RyZWFtX3N0YXR1cyAoR3N0QnVzICAgICAqYnVzLAotICAgICAgICAgICAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIHVzZXJfZGF0YSkKLXsKLSAgR3N0U3RyZWFtU3RhdHVzVHlwZSB0eXBlOwotICBHc3RFbGVtZW50ICpvd25lcjsKLSAgY29uc3QgR1ZhbHVlICp2YWw7Ci0gIEdzdFRhc2sgKnRhc2sgPSBOVUxMOwotCi0gIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKG1lc3NhZ2UsICZ0eXBlLCAmb3duZXIpOwotCi0gIHZhbCA9IGdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdCAobWVzc2FnZSk7Ci0KLSAgLyogc2VlIGlmIHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aCB0aGlzIG9iamVjdCAqLwotICBpZiAoR19WQUxVRV9UWVBFICh2YWwpID09IEdTVF9UWVBFX1RBU0spIHsKLSAgICB0YXNrID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWwpOwotICB9Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURToKLSAgICAgIGlmICh0YXNrKSB7Ci0gICAgICAgIEdzdFRhc2tQb29sICpwb29sOwotCi0gICAgICAgIHBvb2wgPSB0ZXN0X3J0X3Bvb2xfbmV3KCk7Ci0KLSAgICAgICAgZ3N0X3Rhc2tfc2V0X3Bvb2wgKHRhc2ssIHBvb2wpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9lcnJvciAoR3N0QnVzICAgICAqYnVzLAotICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCi0gICAgICAgICAgZ3BvaW50ZXIgICAgdXNlcl9kYXRhKQotewotICBnX21lc3NhZ2UgKCJyZWNlaXZlZCBFUlJPUiIpOwotICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2VvcyAoR3N0QnVzICAgICAqYnVzLAotICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlLAotICAgICAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCi17Ci0gIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKmJpbiwgKmZha2VzcmMsICpmYWtlc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBhIG5ldyBiaW4gdG8gaG9sZCB0aGUgZWxlbWVudHMgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGdfYXNzZXJ0IChiaW4pOwotCi0gIC8qIGNyZWF0ZSBhIHNvdXJjZSAqLwotICBmYWtlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJmYWtlc3JjIik7Ci0gIGdfYXNzZXJ0IChmYWtlc3JjKTsKLSAgZ19vYmplY3Rfc2V0IChmYWtlc3JjLCAibnVtLWJ1ZmZlcnMiLCA1MCwgTlVMTCk7Ci0KLSAgLyogYW5kIGEgc2luayAqLwotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2VzaW5rIik7Ci0gIGdfYXNzZXJ0IChmYWtlc2luayk7Ci0KLSAgLyogYWRkIG9iamVjdHMgdG8gdGhlIG1haW4gcGlwZWxpbmUgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOwotCi0gIC8qIGxpbmsgdGhlIGVsZW1lbnRzICovCi0gIGdzdF9lbGVtZW50X2xpbmsgKGZha2VzcmMsIGZha2VzaW5rKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogZ2V0IHRoZSBidXMsIHdlIG5lZWQgdG8gaW5zdGFsbCBhIHN5bmMgaGFuZGxlciAqLwotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChiaW4pKTsKLSAgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uIChidXMpOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAic3luYy1tZXNzYWdlOjpzdHJlYW0tc3RhdHVzIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3N0cmVhbV9zdGF0dXMsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjplcnJvciIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl9lcnJvciwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVvcyIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl9lb3MsIE5VTEwpOwotCi0gIC8qIHN0YXJ0IHBsYXlpbmcgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpIHsKLSAgICBnX21lc3NhZ2UgKCJmYWlsZWQgdG8gY2hhbmdlIHN0YXRlIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogUnVuIGV2ZW50IGxvb3AgbGlzdGVuaW5nIGZvciBidXMgbWVzc2FnZXMgdW50aWwgRU9TIG9yIEVSUk9SICovCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogc3RvcCB0aGUgYmluICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICByZXR1cm4gMDsKLX0KLV1dPgotPCEtLSBleGFtcGxlLWVuZCB0ZXN0cnRwb29sLmMgYyAtLT4KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgTm90ZSB0aGF0IHRoaXMgcHJvZ3JhbSBsaWtlbHkgbmVlZHMgcm9vdCBwZXJtaXNzaW9ucyBpbiBvcmRlciB0bwotICAgICAgICBjcmVhdGUgcmVhbC10aW1lIHRocmVhZHMuIFdoZW4gdGhlIHRocmVhZCBjYW4ndCBiZSBjcmVhdGVkLCB0aGUKLSAgICAgICAgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHdpbGwgZmFpbCwgd2hpY2ggd2UgY2F0Y2ggaW4gdGhlIGFwcGxpY2F0aW9uCi0gICAgICAgIGFib3ZlLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW4gdGhlIHBpcGVsaW5lLCB5b3Ugd2lsbCByZWNlaXZlCi0gICAgICAgIG11bHRpcGxlIFNUUkVBTV9TVEFUVVMgbWVzc2FnZXMuIFlvdSBzaG91bGQgdXNlIHRoZSBvd25lciBvZiB0aGUKLSAgICAgICAgbWVzc2FnZSwgd2hpY2ggaXMgbGlrZWx5IHRoZSBwYWQgb3IgdGhlIGVsZW1lbnQgdGhhdCBzdGFydHMgdGhlCi0gICAgICAgIHRocmVhZCwgdG8gZmlndXJlIG91dCB3aGF0IHRoZSBmdW5jdGlvbiBvZiB0aGlzIHRocmVhZCBpcyBpbiB0aGUKLSAgICAgICAgY29udGV4dCBvZiB0aGUgYXBwbGljYXRpb24uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tdGhyZWFkcy11c2VzIj4KLSAgICA8dGl0bGU+V2hlbiB3b3VsZCB5b3Ugd2FudCB0byBmb3JjZSBhIHRocmVhZD88L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgV2UgaGF2ZSBzZWVuIHRoYXQgdGhyZWFkcyBhcmUgY3JlYXRlZCBieSBlbGVtZW50cyBidXQgaXQgaXMgYWxzbwotICAgICAgcG9zc2libGUgdG8gaW5zZXJ0IGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZSBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZgotICAgICAgZm9yY2luZyBhIG5ldyB0aHJlYWQgaW4gdGhlIHBpcGVsaW5lLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZXJlIGFyZSBzZXZlcmFsIHJlYXNvbnMgdG8gZm9yY2UgdGhlIHVzZSBvZiB0aHJlYWRzLiBIb3dldmVyLAotICAgICAgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHlvdSBuZXZlciB3YW50IHRvIHVzZSBvbmUgdGhyZWFkIGZvciBldmVyeQotICAgICAgZWxlbWVudCBvdXQgdGhlcmUsIHNpbmNlIHRoYXQgd2lsbCBjcmVhdGUgc29tZSBvdmVyaGVhZC4KLSAgICAgIExldCdzIG5vdyBsaXN0IHNvbWUgc2l0dWF0aW9ucyB3aGVyZSB0aHJlYWRzIGNhbiBiZSBwYXJ0aWN1bGFybHkKLSAgICAgIHVzZWZ1bDoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRGF0YSBidWZmZXJpbmcsIGZvciBleGFtcGxlIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgc3RyZWFtcyBvcgotICAgICAgICAgIHdoZW4gcmVjb3JkaW5nIGRhdGEgZnJvbSBhIGxpdmUgc3RyZWFtIHN1Y2ggYXMgYSB2aWRlbyBvciBhdWRpbwotICAgICAgICAgIGNhcmQuIFNob3J0IGhpY2t1cHMgZWxzZXdoZXJlIGluIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBjYXVzZSBkYXRhCi0gICAgICAgICAgbG9zcy4gU2VlIGFsc28gPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1idWZmZXJpbmctc3RyZWFtIi8+IGFib3V0IG5ldHdvcmsKLSAgICAgICAgICBidWZmZXJpbmcgd2l0aCBxdWV1ZTIuCi0gICAgICAgIDwvcGFyYT4KLQk8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi10aHJlYWQtYnVmZmVyaW5nLWltZyI+Ci0JICA8dGl0bGU+RGF0YSBidWZmZXJpbmcsIGZyb20gYSBuZXR3b3JrZWQgc291cmNlPC90aXRsZT4KLQkgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy90aHJlYWQtYnVmZmVyaW5nLiZpbWFnZTsiIGZvcm1hdD0iJklNQUdFOyIvPgotICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLQkgIDwvbWVkaWFvYmplY3Q+Ci0JPC9maWd1cmU+Ci0KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFN5bmNocm9uaXppbmcgb3V0cHV0IGRldmljZXMsIGUuZy4gd2hlbiBwbGF5aW5nIGEgc3RyZWFtIGNvbnRhaW5pbmcKLSAgICAgICAgICBib3RoIHZpZGVvIGFuZCBhdWRpbyBkYXRhLiBCeSB1c2luZyB0aHJlYWRzIGZvciBib3RoIG91dHB1dHMsIHRoZXkKLSAgICAgICAgICB3aWxsIHJ1biBpbmRlcGVuZGVudGx5IGFuZCB0aGVpciBzeW5jaHJvbml6YXRpb24gd2lsbCBiZSBiZXR0ZXIuCi0gICAgICAgIDwvcGFyYT4KLQk8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi10aHJlYWQtc3luY2hyb25pemluZy1pbWciPgotCSAgPHRpdGxlPlN5bmNocm9uaXppbmcgYXVkaW8gYW5kIHZpZGVvIHNpbmtzPC90aXRsZT4KLQkgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy90aHJlYWQtc3luY2hyb25pemluZy4maW1hZ2U7IiBmb3JtYXQ9IiZJTUFHRTsiLz4KLSAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0JICA8L21lZGlhb2JqZWN0PgotCTwvZmlndXJlPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLQotCi0gICAgPHBhcmE+Ci0gICAgICBBYm92ZSwgd2UndmUgbWVudGlvbmVkIHRoZSA8cXVvdGU+cXVldWU8L3F1b3RlPiBlbGVtZW50IHNldmVyYWwgdGltZXMKLSAgICAgIG5vdy4gQSBxdWV1ZSBpcyB0aGUgdGhyZWFkIGJvdW5kYXJ5IGVsZW1lbnQgdGhyb3VnaCB3aGljaCB5b3UgY2FuCi0gICAgICBmb3JjZSB0aGUgdXNlIG9mIHRocmVhZHMuIEl0IGRvZXMgc28gYnkgdXNpbmcgYSBjbGFzc2ljCi0gICAgICBwcm92aWRlci9jb25zdW1lciBtb2RlbCBhcyBsZWFybmVkIGluIHRocmVhZGluZyBjbGFzc2VzIGF0Ci0gICAgICB1bml2ZXJzaXRpZXMgYWxsIGFyb3VuZCB0aGUgd29ybGQuIEJ5IGRvaW5nIHRoaXMsIGl0IGFjdHMgYm90aCBhcyBhCi0gICAgICBtZWFucyB0byBtYWtlIGRhdGEgdGhyb3VnaHB1dCBiZXR3ZWVuIHRocmVhZHMgdGhyZWFkc2FmZSwgYW5kIGl0IGNhbgotICAgICAgYWxzbyBhY3QgYXMgYSBidWZmZXIuIFF1ZXVlcyBoYXZlIHNldmVyYWwgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+Ci0gICAgICBwcm9wZXJ0aWVzIHRvIGJlIGNvbmZpZ3VyZWQgZm9yIHNwZWNpZmljIHVzZXMuIEZvciBleGFtcGxlLCB5b3UgY2FuIHNldAotICAgICAgbG93ZXIgYW5kIHVwcGVyIHRocmVzaG9sZHMgZm9yIHRoZSBlbGVtZW50LiBJZiB0aGVyZSdzIGxlc3MgZGF0YSB0aGFuCi0gICAgICB0aGUgbG93ZXIgdGhyZXNob2xkIChkZWZhdWx0OiBkaXNhYmxlZCksIGl0IHdpbGwgYmxvY2sgb3V0cHV0LiBJZgotICAgICAgdGhlcmUncyBtb3JlIGRhdGEgdGhhbiB0aGUgdXBwZXIgdGhyZXNob2xkLCBpdCB3aWxsIGJsb2NrIGlucHV0IG9yCi0gICAgICAoaWYgY29uZmlndXJlZCB0byBkbyBzbykgZHJvcCBkYXRhLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRvIHVzZSBhIHF1ZXVlIChhbmQgdGhlcmVmb3JlIGZvcmNlIHRoZSB1c2Ugb2YgdHdvIGRpc3RpbmN0IHRocmVhZHMKLSAgICAgIGluIHRoZSBwaXBlbGluZSksIG9uZSBjYW4gc2ltcGx5IGNyZWF0ZSBhIDxxdW90ZT5xdWV1ZTwvcXVvdGU+IGVsZW1lbnQKLSAgICAgIGFuZCBwdXQgdGhpcyBpbiBhcyBwYXJ0IG9mIHRoZSBwaXBlbGluZS4gJkdTdHJlYW1lcjsgd2lsbCB0YWtlIGNhcmUgb2YKLSAgICAgIGFsbCB0aHJlYWRpbmcgZGV0YWlscyBpbnRlcm5hbGx5LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbCBiL2RvY3MvbWFudWFsL2FwcGVuZGl4LWNoZWNrbGlzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOGJhNWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1jaGVja2xpc3QtZWxlbWVudCI+Ci0gIDx0aXRsZT5UaGluZ3MgdG8gY2hlY2sgd2hlbiB3cml0aW5nIGFuIGFwcGxpY2F0aW9uPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgVGhpcyBjaGFwdGVyIGNvbnRhaW5zIGEgZmFpcmx5IHJhbmRvbSBzZWxlY3Rpb24gb2YgdGhpbmdzIHRoYXQgY2FuIGJlCi0gICAgdXNlZnVsIHRvIGtlZXAgaW4gbWluZCB3aGVuIHdyaXRpbmcgJkdTdHJlYW1lcjstYmFzZWQgYXBwbGljYXRpb25zLiBJdCdzCi0gICAgdXAgdG8geW91IGhvdyBtdWNoIHlvdSdyZSBnb2luZyB0byB1c2UgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGhlcmUuCi0gICAgV2Ugd2lsbCBzaG9ydGx5IGRpc2N1c3MgaG93IHRvIGRlYnVnIHBpcGVsaW5lIHByb2JsZW1zIHVzaW5nICZHU3RyZWFtZXI7Ci0gICAgYXBwbGljYXRpb25zLiBBbHNvLCB3ZSB3aWxsIHRvdWNoIHVwb24gaG93IHRvIGFjcXVpcmUga25vd2xlZGdlIGFib3V0Ci0gICAgcGx1Z2lucyBhbmQgZWxlbWVudHMgYW5kIGhvdyB0byB0ZXN0IHNpbXBsZSBwaXBlbGluZXMgYmVmb3JlIGJ1aWxkaW5nCi0gICAgYXBwbGljYXRpb25zIGFyb3VuZCB0aGVtLgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWNoZWNrbGlzdC1wcm9ncmFtbWluZyI+Ci0gICAgPHRpdGxlPkdvb2QgcHJvZ3JhbW1pbmcgaGFiaXRzPC90aXRsZT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbHdheXMgYWRkIGEgPGNsYXNzbmFtZT5Hc3RCdXM8L2NsYXNzbmFtZT4gaGFuZGxlciB0byB5b3VyCi0gICAgICAgICAgcGlwZWxpbmUuIEFsd2F5cyByZXBvcnQgZXJyb3JzIGluIHlvdXIgYXBwbGljYXRpb24sIGFuZCB0cnkKLSAgICAgICAgICB0byBkbyBzb21ldGhpbmcgd2l0aCB3YXJuaW5ncyBhbmQgaW5mb3JtYXRpb24gbWVzc2FnZXMsIHRvby4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQWx3YXlzIGNoZWNrIHJldHVybiB2YWx1ZXMgb2YgJkdTdHJlYW1lcjsgZnVuY3Rpb25zLiBFc3BlY2lhbGx5LAotICAgICAgICAgIGNoZWNrIHJldHVybiB2YWx1ZXMgb2YgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2xpbmsgKCk8L2Z1bmN0aW9uPgotICAgICAgICAgIGFuZCA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlICgpPC9mdW5jdGlvbj4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIERlcmVmZXJlbmNlIHJldHVybiB2YWx1ZXMgb2YgYWxsIGZ1bmN0aW9ucyByZXR1cm5pbmcgYSBub24tYmFzZQotICAgICAgICAgIHR5cGUsIHN1Y2ggYXMgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2dldF9wYWQgKCk8L2Z1bmN0aW9uPi4gQWxzbywKLSAgICAgICAgICBhbHdheXMgZnJlZSBub24tY29uc3Qgc3RyaW5nIHJldHVybnMsIHN1Y2ggYXMKLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X29iamVjdF9nZXRfbmFtZSAoKTwvZnVuY3Rpb24+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbHdheXMgdXNlIHlvdXIgcGlwZWxpbmUgb2JqZWN0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUKLSAgICAgICAgICBvZiB5b3VyIHBpcGVsaW5lLiBEb24ndCBrZWVwIHByaXZhdGUgdmFyaWFibGVzIGluIHlvdXIgYXBwbGljYXRpb24uCi0gICAgICAgICAgQWxzbywgZG9uJ3QgdXBkYXRlIHlvdXIgdXNlciBpbnRlcmZhY2UgaWYgYSB1c2VyIHByZXNzZXMgdGhlCi0gICAgICAgICAgPHF1b3RlPnBsYXk8L3F1b3RlPiBidXR0b24uIEluc3RlYWQsIGxpc3RlbiBmb3IgdGhlCi0gICAgICAgICAgPHF1b3RlPnN0YXRlLWNoYW5nZWQ8L3F1b3RlPiBtZXNzYWdlIG9uIHRoZQotICAgICAgICAgIDxjbGFzc25hbWU+R3N0QnVzPC9jbGFzc25hbWU+IGFuZCBvbmx5IHVwZGF0ZSB0aGUgdXNlciBpbnRlcmZhY2UKLSAgICAgICAgICB3aGVuZXZlciB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFJlcG9ydCBhbGwgYnVncyB0aGF0IHlvdSBmaW5kIGluICZHU3RyZWFtZXI7IGJ1Z3ppbGxhIGF0Ci0gICAgICAgICAgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICAgICAgdXJsPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIj5odHRwOi8vYnVnemlsbGEuZ25vbWUub3JnLzwvdWxpbms+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1jaGVja2xpc3QtZGVidWciPgotICAgIDx0aXRsZT5EZWJ1Z2dpbmc8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQXBwbGljYXRpb25zIGNhbiBtYWtlIHVzZSBvZiB0aGUgZXh0ZW5zaXZlICZHU3RyZWFtZXI7IGRlYnVnZ2luZyBzeXN0ZW0KLSAgICAgIHRvIGRlYnVnIHBpcGVsaW5lIHByb2JsZW1zLiBFbGVtZW50cyB3aWxsIHdyaXRlIG91dHB1dCB0byB0aGlzIHN5c3RlbQotICAgICAgdG8gbG9nIHdoYXQgdGhleSdyZSBkb2luZy4gSXQncyBub3QgdXNlZCBmb3IgZXJyb3IgcmVwb3J0aW5nLCBidXQgaXQKLSAgICAgIGlzIHZlcnkgdXNlZnVsIGZvciB0cmFja2luZyB3aGF0IGFuIGVsZW1lbnQgaXMgZG9pbmcgZXhhY3RseSwgd2hpY2gKLSAgICAgIGNhbiBjb21lIGluIGhhbmR5IHdoZW4gZGVidWdnaW5nIGFwcGxpY2F0aW9uIGlzc3VlcyAoc3VjaCBhcyBmYWlsaW5nCi0gICAgICBzZWVrcywgb3V0LW9mLXN5bmMgbWVkaWEsIGV0Yy4pLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIE1vc3QgJkdTdHJlYW1lcjstYmFzZWQgYXBwbGljYXRpb25zIGFjY2VwdCB0aGUgY29tbWFuZGxpbmUgb3B0aW9uCi0gICAgICA8b3B0aW9uPi0tZ3N0LWRlYnVnPUxJU1Q8L29wdGlvbj4gYW5kIHJlbGF0ZWQgZmFtaWx5IG1lbWJlcnMuIFRoZQotICAgICAgbGlzdCBjb25zaXN0cyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5L2xldmVsIHBhaXJzLAotICAgICAgd2hpY2ggY2FuIHNldCB0aGUgZGVidWdnaW5nIGxldmVsIGZvciBhIHNwZWNpZmljIGRlYnVnZ2luZyBjYXRlZ29yeS4KLSAgICAgIEZvciBleGFtcGxlLCA8b3B0aW9uPi0tZ3N0LWRlYnVnPW9nZ2RlbXV4OjU8L29wdGlvbj4gd291bGQgdHVybgotICAgICAgb24gZGVidWdnaW5nIGZvciB0aGUgT2dnIGRlbXV4ZXIgZWxlbWVudC4gWW91IGNhbiB1c2Ugd2lsZGNhcmRzIGFzCi0gICAgICB3ZWxsLiBBIGRlYnVnZ2luZyBsZXZlbCBvZiAwIHdpbGwgdHVybiBvZmYgYWxsIGRlYnVnZ2luZywgYW5kIGEgbGV2ZWwKLSAgICAgIG9mIDkgd2lsbCB0dXJuIG9uIGFsbCBkZWJ1Z2dpbmcuIEludGVybWVkaWF0ZSB2YWx1ZXMgb25seSB0dXJuIG9uCi0gICAgICBzb21lIGRlYnVnZ2luZyAoYmFzZWQgb24gbWVzc2FnZSBzZXZlcml0eTsgMiwgZm9yIGV4YW1wbGUsIHdpbGwgb25seQotICAgICAgZGlzcGxheSBlcnJvcnMgYW5kIHdhcm5pbmdzKS4gSGVyZSdzIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIG9wdGlvbnM6Ci0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgIDxwYXJhPgotICAgICAgICAgIDxvcHRpb24+LS1nc3QtZGVidWctaGVscDwvb3B0aW9uPiB3aWxsIHByaW50IGF2YWlsYWJsZSBkZWJ1ZwotICAgICAgICAgIGNhdGVnb3JpZXMgYW5kIGV4aXQuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgPC9saXN0aXRlbT4KLSAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8b3B0aW9uPi0tZ3N0LWRlYnVnLWxldmVsPTxyZXBsYWNlYWJsZT5MRVZFTDwvcmVwbGFjZWFibGU+PC9vcHRpb24+IAotCSAgd2lsbCBzZXQgdGhlIGRlZmF1bHQgZGVidWcgbGV2ZWwgKHdoaWNoIGNhbiByYW5nZSBmcm9tIDAgKG5vCi0gICAgICAgICAgb3V0cHV0KSB0byA5IChldmVyeXRoaW5nKSkuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgPC9saXN0aXRlbT4KLSAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8b3B0aW9uPi0tZ3N0LWRlYnVnPTxyZXBsYWNlYWJsZT5MSVNUPC9yZXBsYWNlYWJsZT48L29wdGlvbj4gCi0JICB0YWtlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8KLSAgICAgICAgICBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciB0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOgotICAgICAgICAgIDxvcHRpb24+R1NUX0FVVE9QTFVHOjUsYXZpZGVtdXg6Mzwvb3B0aW9uPi4gQWx0ZXJuYXRpdmVseSwgeW91Ci0gICAgICAgICAgY2FuIGFsc28gc2V0IHRoZSA8Y2xhc3NuYW1lPkdTVF9ERUJVRzwvY2xhc3NuYW1lPiBlbnZpcm9ubWVudAotICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0LgotICAgICAgICAgPC9wYXJhPgotICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPG9wdGlvbj4tLWdzdC1kZWJ1Zy1uby1jb2xvcjwvb3B0aW9uPiB3aWxsIGRpc2FibGUgY29sb3IgZGVidWdnaW5nLgotICAgICAgICAgIFlvdSBjYW4gYWxzbyBzZXQgdGhlIEdTVF9ERUJVR19OT19DT0xPUiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAxCi0gICAgICAgICAgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBjb2xvcmVkIGRlYnVnIG91dHB1dCBwZXJtYW5lbnRseS4gTm90ZSB0aGF0Ci0gICAgICAgICAgaWYgeW91IGFyZSBkaXNhYmxpbmcgY29sb3IgcHVyZWx5IHRvIGF2b2lkIG1lc3NpbmcgdXAgeW91ciBwYWdlcgotICAgICAgICAgIG91dHB1dCwgdHJ5IHVzaW5nIDxjb21tYW5kPmxlc3MgLVI8L2NvbW1hbmQ+LgotICAgICAgICAgPC9wYXJhPgotICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPG9wdGlvbj4tLWdzdC1kZWJ1Zy1jb2xvci1tb2RlPTxyZXBsYWNlYWJsZT5NT0RFPC9yZXBsYWNlYWJsZT48L29wdGlvbj4KLSAgICAgICAgICB3aWxsIGNoYW5nZSBkZWJ1ZyBsb2cgY29sb3JpbmcgbW9kZS4gPHJlcGxhY2VhYmxlPk1PREU8L3JlcGxhY2VhYmxlPgotICAgICAgICAgIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogPG9wdGlvbj5vbjwvb3B0aW9uPiwKLSAgICAgICAgICA8b3B0aW9uPm9mZjwvb3B0aW9uPiwgPG9wdGlvbj5hdXRvPC9vcHRpb24+LAotICAgICAgICAgIDxvcHRpb24+ZGlzYWJsZTwvb3B0aW9uPiwgPG9wdGlvbj51bml4PC9vcHRpb24+LgotICAgICAgICAgIFlvdSBjYW4gYWxzbyBzZXQgdGhlIEdTVF9ERUJVR19DT0xPUl9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlCi0gICAgICAgICAgaWYgeW91IHdhbnQgdG8gY2hhbmdlIGNvbG9yZWQgZGVidWcgb3V0cHV0IHBlcm1hbmVudGx5LiBOb3RlIHRoYXQKLSAgICAgICAgICBpZiB5b3UgYXJlIGRpc2FibGluZyBjb2xvciBwdXJlbHkgdG8gYXZvaWQgbWVzc2luZyB1cCB5b3VyIHBhZ2VyCi0gICAgICAgICAgb3V0cHV0LCB0cnkgdXNpbmcgPGNvbW1hbmQ+bGVzcyAtUjwvY29tbWFuZD4uCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgPC9saXN0aXRlbT4KLSAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8b3B0aW9uPi0tZ3N0LWRlYnVnLWRpc2FibGU8L29wdGlvbj4gZGlzYWJsZXMgZGVidWdnaW5nIGFsdG9nZXRoZXIuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgPC9saXN0aXRlbT4KLSAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8b3B0aW9uPi0tZ3N0LXBsdWdpbi1zcGV3PC9vcHRpb24+IGVuYWJsZXMgcHJpbnRvdXQgb2YgZXJyb3JzIHdoaWxlCi0gICAgICAgICAgbG9hZGluZyAmR1N0cmVhbWVyOyBwbHVnaW5zLgotICAgICAgICAgPC9wYXJhPgotICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tY2hlY2tsaXN0LWNvbnZlcnNpb24iPgotICAgIDx0aXRsZT5Db252ZXJzaW9uIHBsdWdpbnM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgY29udGFpbnMgYSBidW5jaCBvZiBjb252ZXJzaW9uIHBsdWdpbnMgdGhhdCBtb3N0Ci0gICAgICBhcHBsaWNhdGlvbnMgd2lsbCBmaW5kIHVzZWZ1bC4gU3BlY2lmaWNhbGx5LCB0aG9zZSBhcmUgdmlkZW9zY2FsZXJzCi0gICAgICAodmlkZW9zY2FsZSksIGNvbG9yc3BhY2UgY29udmVydG9ycyAodmlkZW9jb252ZXJ0KSwgYXVkaW8gZm9ybWF0Ci0gICAgICBjb252ZXJ0b3JzIGFuZCBjaGFubmVsIHJlc2FtcGxlcnMgKGF1ZGlvY29udmVydCkgYW5kIGF1ZGlvIHNhbXBsZXJhdGUKLSAgICAgIGNvbnZlcnRvcnMgKGF1ZGlvcmVzYW1wbGUpLiBUaG9zZSBjb252ZXJ0b3JzIGRvbid0IGRvIGFueXRoaW5nIHdoZW4gbm90Ci0gICAgICByZXF1aXJlZCwgdGhleSB3aWxsIGFjdCBpbiBwYXNzdGhyb3VnaCBtb2RlLiBUaGV5IHdpbGwgYWN0aXZhdGUgd2hlbgotICAgICAgdGhlIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBhIHNwZWNpZmljIHJlcXVlc3QsIHRob3VnaC4gQWxsCi0gICAgICBhcHBsaWNhdGlvbnMgYXJlIHJlY29tbWVuZGVkIHRvIHVzZSB0aG9zZSBlbGVtZW50cy4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWNoZWNrbGlzdC1hcHBsaWNhdGlvbnMiPgotICAgIDx0aXRsZT5VdGlsaXR5IGFwcGxpY2F0aW9ucyBwcm92aWRlZCB3aXRoICZHU3RyZWFtZXI7PC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgICZHU3RyZWFtZXI7IGNvbWVzIHdpdGggYSBkZWZhdWx0IHNldCBvZiBjb21tYW5kLWxpbmUgdXRpbGl0aWVzIHRoYXQKLSAgICAgIGNhbiBoZWxwIGluIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LiBXZSB3aWxsIGRpc2N1c3Mgb25seQotICAgICAgPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gYW5kIDxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPiBoZXJlLgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1hcHBsaWNhdGlvbnMtbGF1bmNoIj4KLSAgICAgIDx0aXRsZT48Y29tbWFuZD5nc3QtbGF1bmNoPC9jb21tYW5kPjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gaXMgYSBzaW1wbGUgc2NyaXB0LWxpa2UgY29tbWFuZGxpbmUKLSAgICAgICAgYXBwbGljYXRpb24gdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHBpcGVsaW5lcy4gRm9yIGV4YW1wbGUsIHRoZQotICAgICAgICBjb21tYW5kIDxjb21tYW5kPmdzdC1sYXVuY2ggYXVkaW90ZXN0c3JjICEgYXVkaW9jb252ZXJ0ICEgCi0gICAgICAgIGF1ZGlvL3gtcmF3LGNoYW5uZWxzPTIgISBhbHNhc2luazwvY29tbWFuZD4gd2lsbCBydW4KLSAgICAgICAgYSBwaXBlbGluZSB3aGljaCBnZW5lcmF0ZXMgYSBzaW5lLXdhdmUgYXVkaW8gc3RyZWFtIGFuZCBwbGF5cyBpdAotICAgICAgICB0byB5b3VyIEFMU0EgYXVkaW8gY2FyZC4gPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gYWxzbyBhbGxvd3MKLSAgICAgICAgdGhlIHVzZSBvZiB0aHJlYWRzICh3aWxsIGJlIHVzZWQgYXV0b21hdGljYWxseSBhcyByZXF1aXJlZCBvciBhcyBxdWV1ZQotICAgICAgICBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIHBpcGVsaW5lKSBhbmQgYmlucyAodXNpbmcgYnJhY2tldHMsIHNvIAotICAgICAgICA8cXVvdGU+KDwvcXVvdGU+IGFuZCA8cXVvdGU+KTwvcXVvdGU+KS4gWW91IGNhbiB1c2UgZG90cyB0byBpbXBseQotICAgICAgICBwYWRuYW1lcyBvbiBlbGVtZW50cywKLSAgICAgICAgb3IgZXZlbiBvbWl0IHRoZSBwYWRuYW1lIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0IGEgcGFkLiBVc2luZwotICAgICAgICBhbGwgdGhpcywgdGhlIHBpcGVsaW5lCi0gICAgICAgIDxjb21tYW5kPmdzdC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1maWxlLm9nZyAhIG9nZ2RlbXV4IG5hbWU9ZAotICAgICAgICAgZC4gISBxdWV1ZSAhIHRoZW9yYWRlYyAhIHZpZGVvY29udmVydCAhIHh2aW1hZ2VzaW5rCi0gICAgICAgICBkLiAhIHF1ZXVlICEgdm9yYmlzZGVjICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGFsc2FzaW5rCi0gICAgICAgIDwvY29tbWFuZD4gd2lsbCBwbGF5IGFuIE9nZyBmaWxlCi0gICAgICAgIGNvbnRhaW5pbmcgYSBUaGVvcmEgdmlkZW8tc3RyZWFtIGFuZCBhIFZvcmJpcyBhdWRpby1zdHJlYW0uIFlvdSBjYW4KLSAgICAgICAgYWxzbyB1c2UgYXV0b3BsdWdnZXJzIHN1Y2ggYXMgZGVjb2RlYmluIG9uIHRoZSBjb21tYW5kbGluZS4gU2VlIHRoZQotICAgICAgICBtYW51YWwgcGFnZSBvZiA8Y29tbWFuZD5nc3QtbGF1bmNoPC9jb21tYW5kPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWFwcGxpY2F0aW9ucy1pbnNwZWN0Ij4KLSAgICAgIDx0aXRsZT48Y29tbWFuZD5nc3QtaW5zcGVjdDwvY29tbWFuZD48L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPiBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IGFsbCBwcm9wZXJ0aWVzLAotICAgICAgICBzaWduYWxzLCBkeW5hbWljIHBhcmFtZXRlcnMgYW5kIHRoZSBvYmplY3QgaGllcmFyY2h5IG9mIGFuIGVsZW1lbnQuCi0gICAgICAgIFRoaXMgY2FuIGJlIHZlcnkgdXNlZnVsIHRvIHNlZSB3aGljaCA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4KLSAgICAgICAgcHJvcGVydGllcyBvciB3aGljaCBzaWduYWxzIChhbmQgdXNpbmcgd2hhdCBhcmd1bWVudHMpIGFuIGVsZW1lbnQKLSAgICAgICAgc3VwcG9ydHMuIFJ1biA8Y29tbWFuZD5nc3QtaW5zcGVjdCBmYWtlc3JjPC9jb21tYW5kPiB0byBnZXQgYW4gaWRlYQotICAgICAgICBvZiB3aGF0IGl0IGRvZXMuIFNlZSB0aGUgbWFudWFsIHBhZ2Ugb2YgPGNvbW1hbmQ+Z3N0LWluc3BlY3Q8L2NvbW1hbmQ+Ci0gICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FwcGVuZGl4LWNvbXBpbGluZy54bWwgYi9kb2NzL21hbnVhbC9hcHBlbmRpeC1jb21waWxpbmcueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDgzYzk4Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2FwcGVuZGl4LWNvbXBpbGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1jb21waWxpbmciPgotICA8dGl0bGU+Q29tcGlsaW5nPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgVGhpcyBzZWN0aW9uIHRhbGtzIGFib3V0IHRoZSBkaWZmZXJlbnQgdGhpbmdzIHlvdSBjYW4gZG8gd2hlbiBidWlsZGluZwotICAgIGFuZCBzaGlwcGluZyB5b3VyIGFwcGxpY2F0aW9ucyBhbmQgcGx1Z2lucy4KLSAgPC9wYXJhPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1jb21waWxpbmctZW1iZWRkaW5nIj4KLSAgICA8dGl0bGU+RW1iZWRkaW5nIHN0YXRpYyBlbGVtZW50cyBpbiB5b3VyIGFwcGxpY2F0aW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvcHdnL2h0bWwvaW5kZXguaHRtbCI+UGx1Z2luCi0gICAgICBXcml0ZXIncyBHdWlkZTwvdWxpbms+IGRlc2NyaWJlcyBpbiBncmVhdCBkZXRhaWwgaG93IHRvIHdyaXRlIGVsZW1lbnRzCi0gICAgICBmb3IgdGhlICZHU3RyZWFtZXI7IGZyYW1ld29yay4gSW4gdGhpcyBzZWN0aW9uLCB3ZSB3aWxsIHNvbGVseSBkaXNjdXNzCi0gICAgICBob3cgdG8gZW1iZWQgc3VjaCBlbGVtZW50cyBzdGF0aWNhbGx5IGluIHlvdXIgYXBwbGljYXRpb24uIFRoaXMgY2FuIGJlCi0gICAgICB1c2VmdWwgZm9yIGFwcGxpY2F0aW9uLXNwZWNpZmljIGVsZW1lbnRzIHRoYXQgaGF2ZSBubyB1c2UgZWxzZXdoZXJlIGluCi0gICAgICAmR1N0cmVhbWVyOy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBEeW5hbWljYWxseSBsb2FkZWQgcGx1Z2lucyBjb250YWluIGEgc3RydWN0dXJlIHRoYXQncyBkZWZpbmVkIHVzaW5nCi0gICAgICA8ZnVuY3Rpb24+R1NUX1BMVUdJTl9ERUZJTkUgKCk8L2Z1bmN0aW9uPi4gVGhpcyBzdHJ1Y3R1cmUgaXMgbG9hZGVkCi0gICAgICB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkIGJ5IHRoZSAmR1N0cmVhbWVyOyBjb3JlLiBUaGUgc3RydWN0dXJlCi0gICAgICBjb250YWlucyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAodXN1YWxseSBjYWxsZWQKLSAgICAgIDxmdW5jdGlvbj5wbHVnaW5faW5pdDwvZnVuY3Rpb24+KSB0aGF0IHdpbGwgYmUgY2FsbGVkIHJpZ2h0IGFmdGVyIHRoYXQuCi0gICAgICBJdCdzIHB1cnBvc2UgaXMgdG8gcmVnaXN0ZXIgdGhlIGVsZW1lbnRzIHByb3ZpZGVkIGJ5IHRoZSBwbHVnaW4gd2l0aAotICAgICAgdGhlICZHU3RyZWFtZXI7IGZyYW1ld29yay4gCi0gICAgICBJZiB5b3Ugd2FudCB0byBlbWJlZCBlbGVtZW50cyBkaXJlY3RseSBpbgotICAgICAgeW91ciBhcHBsaWNhdGlvbiwgdGhlIG9ubHkgdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgdG8gcmVwbGFjZQotCSAgPGZ1bmN0aW9uPkdTVF9QTFVHSU5fREVGSU5FICgpPC9mdW5jdGlvbj4gd2l0aCBhIGNhbGwgdG8KLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMgKCk8L2Z1bmN0aW9uPi4gQXMgc29vbiBhcyB5b3UKLSAgICAgIGNhbGwgPGZ1bmN0aW9uPmdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljICgpPC9mdW5jdGlvbj4sIHRoZSBlbGVtZW50cwotICAgICAgd2lsbCBmcm9tIHRoZW4gb24gYmUgYXZhaWxhYmxlIGxpa2UgYW55IG90aGVyIGVsZW1lbnQsIHdpdGhvdXQgdGhlbQotICAgICAgaGF2aW5nIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRhYmxlIGxpYnJhcmllcy4gSW4gdGhlIGV4YW1wbGUgYmVsb3csIHlvdQotICAgICAgd291bGQgYmUgYWJsZSB0byBjYWxsIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UKLSAgICAgICgibXktZWxlbWVudC1uYW1lIiwgInNvbWUtbmFtZSIpPC9mdW5jdGlvbj4gdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZQotICAgICAgZWxlbWVudC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLS8qCi0gKiBIZXJlLCB5b3Ugd291bGQgd3JpdGUgdGhlIGFjdHVhbCBwbHVnaW4gY29kZS4KLSAqLwotCi1bLi5dCi0KLXN0YXRpYyBnYm9vbGVhbgotcmVnaXN0ZXJfZWxlbWVudHMgKEdzdFBsdWdpbiAqcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIm15LWVsZW1lbnQtbmFtZSIsCi0JCQkgICAgICAgR1NUX1JBTktfTk9ORSwgTVlfUExVR0lOX1RZUEUpOwotfQotCi1zdGF0aWMKLW15X2NvZGVfaW5pdCAodm9pZCkKLXsKLSAgLi4uCi0KLSAgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMgKAotICAgIEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgICJteS1wcml2YXRlLXBsdWdpbnMiLAotICAgICJQcml2YXRlIGVsZW1lbnRzIG9mIG15IGFwcGxpY2F0aW9uIiwKLSAgICByZWdpc3Rlcl9lbGVtZW50cywKLSAgICBWRVJTSU9OLAotICAgICJMR1BMIiwKLSAgICAibXktYXBwbGljYXRpb24tc291cmNlIiwKLSAgICAibXktYXBwbGljYXRpb24iLAotICAgICJodHRwOi8vd3d3Lm15LWFwcGxpY2F0aW9uLm5ldC8iKQotCi0gIC4uLgotfQotXV0+Ci0gICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbCBiL2RvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiOWVkOC4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItaW50Z3JhdGlvbiI+Ci0gIDx0aXRsZT5JbnRlZ3JhdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICZHU3RyZWFtZXI7IHRyaWVzIHRvIGludGVncmF0ZSBjbG9zZWx5IHdpdGggb3BlcmF0aW5nIHN5c3RlbXMgKHN1Y2gKLSAgICBhcyBMaW51eCBhbmQgVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLCBPUyBYIG9yIFdpbmRvd3MpIGFuZCBkZXNrdG9wCi0gICAgZW52aXJvbm1lbnRzIChzdWNoIGFzIEdOT01FIG9yIEtERSkuIEluIHRoaXMgY2hhcHRlciwgd2UnbGwgbWVudGlvbgotICAgIHNvbWUgc3BlY2lmaWMgdGVjaG5pcXVlcyB0byBpbnRlZ3JhdGUgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHlvdXIKLSAgICBvcGVyYXRpbmcgc3lzdGVtIG9yIGRlc2t0b3AgZW52aXJvbm1lbnQgb2YgY2hvaWNlLgotICA8L3BhcmE+Ci0gCi08IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgotPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KLTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludGVncmF0aW9uLW5peCI+Ci0gICAgPHRpdGxlPkxpbnV4IGFuZCBVTklYLWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgcHJvdmlkZXMgYSBiYXNpYyBzZXQgb2YgZWxlbWVudHMgdGhhdCBhcmUgdXNlZnVsIHdoZW4KLSAgICAgIGludGVncmF0aW5nIHdpdGggTGludXggb3IgYSBVTklYLWxpa2Ugb3BlcmF0aW5nIHN5c3RlbS4KLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRm9yIGF1ZGlvIGlucHV0IGFuZCBvdXRwdXQsICZHU3RyZWFtZXI7IHByb3ZpZGVzIGlucHV0IGFuZAotICAgICAgICAgIG91dHB1dCBlbGVtZW50cyBmb3Igc2V2ZXJhbCBhdWRpbyBzdWJzeXN0ZW1zLiBBbW9uZ3N0IG90aGVycywKLSAgICAgICAgICAmR1N0cmVhbWVyOyBpbmNsdWRlcyBlbGVtZW50cyBmb3IgQUxTQSAoYWxzYXNyYywKLSAgICAgICAgICBhbHNhc2luayksIE9TUyAob3Nzc3JjLCBvc3NzaW5rKSBQdWxlc2F1ZGlvIChwdWxzZXNyYywgcHVsc2VzaW5rKQotICAgICAgICAgIGFuZCBTdW4gYXVkaW8gKHN1bmF1ZGlvc3JjLCBzdW5hdWRpb21peGVyLCBzdW5hdWRpb3NpbmspLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBGb3IgdmlkZW8gaW5wdXQsICZHU3RyZWFtZXI7IGNvbnRhaW5zIHNvdXJjZSBlbGVtZW50cyBmb3IKLSAgICAgICAgICBWaWRlbzRsaW51eDIgKHY0bDJzcmMsIHY0bDJlbGVtZW50LCB2NGwyc2luaykuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEZvciB2aWRlbyBvdXRwdXQsICZHU3RyZWFtZXI7IHByb3ZpZGVzIGVsZW1lbnRzIGZvciBvdXRwdXQKLSAgICAgICAgICB0byBYLXdpbmRvd3MgKHhpbWFnZXNpbmspLCBYdi13aW5kb3dzICh4dmltYWdlc2luazsgZm9yCi0gICAgICAgICAgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgdmlkZW8pLCBkaXJlY3QtZnJhbWVidWZmZXIgKGRmYmltYWdlc2luaykKLSAgICAgICAgICBhbmQgb3BlbkdMIGltYWdlIGNvbnRleHRzIChnbHNpbmspLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3NlY3QxPgotCi08IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgotPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KLTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludGVncmF0aW9uLWdub21lIj4KLSAgICA8dGl0bGU+R05PTUUgZGVza3RvcDwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICAmR1N0cmVhbWVyOyBoYXMgYmVlbiB0aGUgbWVkaWEgYmFja2VuZCBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Imh0dHA6Ly93d3cuZ25vbWUub3JnLyI+R05PTUU8L3VsaW5rPiBkZXNrdG9wIHNpbmNlIEdOT01FLTIuMgotICAgICAgb253YXJkcy4gTm93YWRheXMsIGEgd2hvbGUgYnVuY2ggb2YgR05PTUUgYXBwbGljYXRpb25zIG1ha2UgdXNlIG9mCi0gICAgICAmR1N0cmVhbWVyOyBmb3IgbWVkaWEtcHJvY2Vzc2luZywgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pCi0gICAgICA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vd3d3LnJoeXRobWJveC5vcmcvIj5SaHl0aG1ib3g8L3VsaW5rPiwKLSAgICAgIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHBzOi8vd2lraS5nbm9tZS5vcmcvQXBwcy9WaWRlb3MiPlZpZGVvczwvdWxpbms+Ci0gICAgICBhbmQgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Imh0dHBzOi8vd2lraS5nbm9tZS5vcmcvQXBwcy9Tb3VuZEp1aWNlciI+U291bmQKLSAgICAgIEp1aWNlcjwvdWxpbms+LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIE1vc3Qgb2YgdGhlc2UgR05PTUUgYXBwbGljYXRpb25zIG1ha2UgdXNlIG9mIHNvbWUgc3BlY2lmaWMgdGVjaG5pcXVlcwotICAgICAgdG8gaW50ZWdyYXRlIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgd2l0aCB0aGUgR05PTUUgZGVza3RvcDoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgR05PTUUgYXBwbGljYXRpb25zIHVzdWFsbHkgY2FsbCA8ZnVuY3Rpb24+Z3RrX2luaXQgKCk8L2Z1bmN0aW9uPgotICAgICAgICAgIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZCBpbml0aWFsaXplIEdUSy4gJkdTdHJlYW1lcjsKLSAgICAgICAgICBhcHBsaWNhdGlvbnMgd291bGQgbm9ybWFsbHkgY2FsbCA8ZnVuY3Rpb24+Z3N0X2luaXQgKCk8L2Z1bmN0aW9uPgotICAgICAgICAgIHRvIGRvIHRoZSBzYW1lIGZvciBHU3RyZWFtZXIuCi0gICAgICAgICAgVGhpcyB3b3VsZCBtZWFuIHRoYXQgb25seSBvbmUgb2YgdGhlIHR3byBjYW4gcGFyc2UgY29tbWFuZC1saW5lCi0gICAgICAgICAgb3B0aW9ucy4gVG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZSwgJkdTdHJlYW1lcjsgY2FuIHByb3ZpZGUgYQotICAgICAgICAgIEdMaWIgPGNsYXNzbmFtZT5HT3B0aW9uR3JvdXA8L2NsYXNzbmFtZT4gd2hpY2ggY2FuIGJlIHBhc3NlZCB0bwotICAgICAgICAgIDxmdW5jdGlvbj5nbm9tZV9wcm9ncmFtX2luaXQgKCk8L2Z1bmN0aW9uPi4gVGhlIGZvbGxvd2luZwotICAgICAgICAgIGV4YW1wbGUgcmVxdWlyZXMgR1RLIDIuNiBvciBuZXdlciAocHJldmlvdXMgR1RLIHZlcnNpb25zCi0gICAgICAgICAgZG8gbm90IHN1cHBvcnQgY29tbWFuZCBsaW5lIHBhcnNpbmcgdmlhIEdPcHRpb24geWV0KQotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZ25vbWUuYyBhIC0tPgotI2luY2x1ZGUgJmx0O2d0ay9ndGsuaCZndDsKLSNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0KLXN0YXRpYyBnY2hhciAqKmNtZF9maWxlbmFtZXMgPSBOVUxMOwotCi1zdGF0aWMgR09wdGlvbkVudHJpZXMgY21kX29wdGlvbnNbXSA9IHsKLSAgLyogaGVyZSB5b3UgY2FuIGFkZCBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgeW91ciBhcHBsaWNhdGlvbi4gQ2hlY2sKLSAgICogdGhlIEdPcHRpb24gc2VjdGlvbiBpbiB0aGUgR0xpYiBBUEkgcmVmZXJlbmNlIGZvciBhIG1vcmUgZWxhYm9yYXRlCi0gICAqIGV4YW1wbGUgb2YgaG93IHRvIGFkZCB5b3VyIG93biBjb21tYW5kIGxpbmUgb3B0aW9ucyBoZXJlICovCi0KLSAgLyogYXQgdGhlIGVuZCB3ZSBoYXZlIGEgc3BlY2lhbCBvcHRpb24gdGhhdCBjb2xsZWN0cyBhbGwgcmVtYWluaW5nIAotICAgKiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIChsaWtlIGZpbGVuYW1lcykgZm9yIHVzLiBJZiB5b3UgZG9uJmFwb3M7dAotICAgKiBuZWVkIHRoaXMsIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSBpdCAqLwotICB7IEdfT1BUSU9OX1JFTUFJTklORywgMCwgMCwgR19PUFRJT05fQVJHX0ZJTEVOQU1FX0FSUkFZLCAmYW1wO2NtZF9maWxlbmFtZXMsCi0gICAgIlNwZWNpYWwgb3B0aW9uIHRoYXQgY29sbGVjdHMgYW55IHJlbWFpbmluZyBhcmd1bWVudHMgZm9yIHVzIiB9LAotCi0gIC8qIG1hcmsgdGhlIGVuZCBvZiB0aGUgb3B0aW9ucyBhcnJheSB3aXRoIGEgTlVMTCBvcHRpb24gKi8KLSAgeyBOVUxMLCB9Ci19OwotCi0vKiB0aGlzIHNob3VsZCB1c3VhbGx5IGJlIGRlZmluZWQgaW4geW91ciBjb25maWcuaCAqLwotI2RlZmluZSBWRVJTSU9OICIwLjAuMSIKLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKmFyZ3YpCi17Ci0gIEdPcHRpb25Db250ZXh0ICpjb250ZXh0OwotICBHT3B0aW9uR3JvdXAgKmdzdHJlYW1lcl9ncm91cCwgKmd0a19ncm91cDsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIGNvbnRleHQgPSBnX29wdGlvbl9jb250ZXh0X25ldyAoImd0ay1kZW1vLWFwcCIpOwotCi0gIC8qIGdldCBjb21tYW5kIGxpbmUgb3B0aW9ucyBmcm9tIEdTdHJlYW1lciBhbmQgYWRkIHRoZW0gdG8gdGhlIGdyb3VwICovCi0gIGdzdHJlYW1lcl9ncm91cCA9IGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjb250ZXh0LCBnc3RyZWFtZXJfZ3JvdXApOwotICBndGtfZ3JvdXAgPSBndGtfZ2V0X29wdGlvbl9ncm91cCAoVFJVRSk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjb250ZXh0LCBndGtfZ3JvdXApOwotCi0gIC8qIGFkZCBvdXIgb3duIG9wdGlvbnMuIElmIHlvdSBhcmUgdXNpbmcgZ2V0dGV4dCBmb3IgdHJhbnNsYXRpb24gb2YgeW91cgotICAgKiBzdHJpbmdzLCB1c2UgR0VUVEVYVF9QQUNLQUdFIGhlcmUgaW5zdGVhZCBvZiBOVUxMICovCi0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY29udGV4dCwgY21kX29wdGlvbnMsIE5VTEwpOwotCi0gIC8qIG5vdyBwYXJzZSB0aGUgY29tbWFuZGxpbmUgb3B0aW9ucywgbm90ZSB0aGF0IHRoaXMgYWxyZWFkeQotICAgKiBjYWxscyBndGtfaW5pdCgpIGFuZCBnc3RfaW5pdCgpICovCi0gIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYW1wO2FyZ2MsICZhbXA7YXJndiwgJmFtcDtlcnIpKSB7Ci0gICAgZ19wcmludCAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmFtcDtlcnIpOwotICAgIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLSAgICBleGl0ICgxKTsKLSAgfQotICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0KLSAgLyogYW55IGZpbGVuYW1lcyB3ZSBnb3QgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmU/IHBhcnNlIHRoZW0hICovCi0gIGlmIChjbWRfZmlsZW5hbWVzICE9IE5VTEwpIHsKLSAgICBndWludCBpLCBudW07Ci0KLSAgICBudW0gPSBnX3N0cnZfbGVuZ3RoIChjbWRfZmlsZW5hbWVzKTsKLSAgICBmb3IgKGkgPSAwOyBpICZsdDsgbnVtOyArK2kpIHsKLSAgICAgIC8qIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBmaWxlbmFtZSAuLi4gKi8KLSAgICAgIGdfcHJpbnQgKCJBZGRpbmcgdG8gcGxheSBxdWV1ZTogJXNcbiIsIGNtZF9maWxlbmFtZXNbaV0pOwotICAgIH0KLQotICAgIGdfc3RyZnJlZXYgKGNtZF9maWxlbmFtZXMpOwotICAgIGNtZF9maWxlbmFtZXMgPSBOVUxMOwotICB9Ci08IS0tIGV4YW1wbGUtZW5kIGdub21lLmMgYSAtLT4KLVsuLl08IS0tIGV4YW1wbGUtYmVnaW4gZ25vbWUuYyBiIC0tPjwhLS0KLSAgcmV0dXJuIDA7Ci0tLT48IS0tIGV4YW1wbGUtZW5kIGdub21lLmMgYiAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBnbm9tZS5jIGMgLS0+Ci19Ci0gICAgICAgIDwhLS0gZXhhbXBsZS1lbmQgZ25vbWUuYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBHTk9NRSB1c2VzIFB1bHNlYXVkaW8gZm9yIGF1ZGlvLCB1c2UgdGhlIHB1bHNlc3JjIGFuZAotICAgICAgICAgIHB1bHNlc2luayBlbGVtZW50cyB0byBoYXZlIGFjY2VzcyB0byBhbGwgdGhlIGZlYXR1cmVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAmR1N0cmVhbWVyOyBwcm92aWRlcyBkYXRhIGlucHV0L291dHB1dCBlbGVtZW50cyBmb3IgdXNlIHdpdGggdGhlCi0gICAgICAgICAgR0lPIFZGUyBzeXN0ZW0uIFRoZXNlIGVsZW1lbnRzIGFyZSBjYWxsZWQgPHF1b3RlPmdpb3NyYzwvcXVvdGU+Ci0gICAgICAgICAgYW5kIDxxdW90ZT5naW9zaW5rPC9xdW90ZT4uCi0gICAgICAgICAgVGhlIGRlcHJlY2F0ZWQgR05PTUUtVkZTIHN5c3RlbSBpcyBzdXBwb3J0ZWQgdG9vIGJ1dCBzaG91bGRuJ3QgYmUKLSAgICAgICAgICB1c2VkIGZvciBhbnkgbmV3IGFwcGxpY2F0aW9ucy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9zZWN0MT4KLQotPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KLTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Ci08IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgotCi0KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24taW50ZWdyYXRpb24ta2RlIj4KLSAgICA8dGl0bGU+S0RFIGRlc2t0b3A8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgaGFzIGJlZW4gcHJvcG9zZWQgZm9yIGluY2x1c2lvbiBpbiBLREUtNC4wLiBDdXJyZW50bHksCi0gICAgICAmR1N0cmVhbWVyOyBpcyBpbmNsdWRlZCBhcyBhbiBvcHRpb25hbCBjb21wb25lbnQsIGFuZCBpdCdzIHVzZWQgYnkKLSAgICAgIHNldmVyYWwgS0RFIGFwcGxpY2F0aW9ucywgaW5jbHVkaW5nIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8vYW1hcm9rLmtkZS5vcmcvIj5BbWFyb0s8L3VsaW5rPiwKLSAgICAgIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8vd3d3LnhzNGFsbC5ubC9+amp2cmllemUva21wbGF5ZXIuaHRtbCI+S01QbGF5ZXI8L3VsaW5rPiBhbmQKLSAgICAgIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8va2FmZmVpbmUuc291cmNlZm9yZ2UubmV0LyI+S2FmZmVpbmU8L3VsaW5rPi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBbHRob3VnaCBub3QgeWV0IGFzIGNvbXBsZXRlIGFzIHRoZSBHTk9NRSBpbnRlZ3JhdGlvbiBiaXRzLCB0aGVyZQotICAgICAgYXJlIGFscmVhZHkgc29tZSBLREUgaW50ZWdyYXRpb24gc3BlY2lmaWNzIGF2YWlsYWJsZS4gVGhpcyBsaXN0IHdpbGwKLSAgICAgIHByb2JhYmx5IGdyb3cgYXMgJkdTdHJlYW1lcjsgc3RhcnRzIHRvIGJlIHVzZWQgaW4gS0RFLTQuMDoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQW1hcm9LIGNvbnRhaW5zIGEga2lvc3JjIGVsZW1lbnQsIHdoaWNoIGlzIGEgc291cmNlIGVsZW1lbnQgdGhhdAotICAgICAgICAgIGludGVncmF0ZXMgd2l0aCB0aGUgS0RFIFZGUyBzdWJzeXN0ZW0gS0lPLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3NlY3QxPgotCi08IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgotPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KLTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludGVncmF0aW9uLW9zeCI+Ci0gICAgPHRpdGxlPk9TIFg8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgcHJvdmlkZXMgbmF0aXZlIHZpZGVvIGFuZCBhdWRpbyBvdXRwdXQgZWxlbWVudHMgZm9yIE9TIFguCi0gICAgICBJdCBidWlsZHMgdXNpbmcgdGhlIHN0YW5kYXJkIGRldmVsb3BtZW50IHRvb2xzIGZvciBPUyBYLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KLTwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+Ci08IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRlZ3JhdGlvbi13aW4zMiI+Ci0gICAgPHRpdGxlPldpbmRvd3M8L3RpdGxlPgotCi0gICAgPHdhcm5pbmc+Ci08cGFyYT4KLU5vdGU6IHRoaXMgc2VjdGlvbiBpcyBvdXQgb2YgZGF0ZS4gR1N0cmVhbWVyLTEuMCBoYXMgbXVjaCBiZXR0ZXIKLXN1cHBvcnQgZm9yIHdpbjMyIHRoYW4gcHJldmlvdXMgdmVyc2lvbnMgdGhvdWdoIGFuZCBzaG91bGQgdXN1YWxseSBjb21waWxlCi1hbmQgd29yayBvdXQtb2YtdGhlLWJveCBib3RoIHVzaW5nIE1TWVMvTWluR1cgb3IgTWljcm9zb2Z0IGNvbXBpbGVycy4gVGhlCi08dWxpbmsgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZyI+R1N0cmVhbWVyIHdlYiBzaXRlPC91bGluaz4gYW5kIHRoZQotPHVsaW5rIHVybD0iaHR0cDovL25ld3MuZ21hbmUub3JnL2dtYW5lLmNvbXAudmlkZW8uZ3N0cmVhbWVyLmRldmVsIj5tYWlsaW5nIGxpc3QKLWFyY2hpdmVzPC91bGluaz4gYXJlIGEgZ29vZCBwbGFjZSB0byBjaGVjayB0aGUgbGF0ZXN0IHdpbjMyLXJlbGF0ZWQgbmV3cy4KLTwvcGFyYT4KLSAgICA8L3dhcm5pbmc+Ci0KLQotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgYnVpbGRzIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgQyAuTkVUIDIwMDMgYW5kIHVzaW5nIEN5Z3dpbi4KLSAgICA8L3BhcmE+Ci0KLSAgPHNlY3QyIGlkPSJzZWN0aW9uLXdpbjMyLWJ1aWxkIj4KLSAgPHRpdGxlPkJ1aWxkaW5nIDxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPiB1bmRlciBXaW4zMjwvdGl0bGU+Ci0KLTxwYXJhPlRoZXJlIGFyZSBkaWZmZXJlbnQgbWFrZWZpbGVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQgR1N0cmVhbWVyIHdpdGggdGhlIHVzdWFsIE1pY3Jvc29mdCAKLWNvbXBpbGluZyB0b29scy48L3BhcmE+Ci0KLTxwYXJhPlRoZSBNYWtlZmlsZSBpcyBtZWFudCB0byBiZSB1c2VkIHdpdGggdGhlIEdOVSBtYWtlIHByb2dyYW0gYW5kIHRoZSBmcmVlIAotdmVyc2lvbiBvZiB0aGUgTWljcm9zb2Z0IGNvbXBpbGVyICg8dWxpbmsgdXJsPSJodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL3Zpc3VhbGMvdmN0b29sa2l0MjAwMy8iPmh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vdmlzdWFsYy92Y3Rvb2xraXQyMDAzLzwvdWxpbms+KS4gWW91IGFsc28gCi1oYXZlIHRvIG1vZGlmeSB5b3VyIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gdXNlIGl0IGZyb20gdGhlIGNvbW1hbmQtbGluZS4gWW91IHdpbGwgYWxzbyAKLW5lZWQgYSB3b3JraW5nIFBsYXRmb3JtIFNESyBmb3IgV2luZG93cyB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgZnJlZSBmcm9tIE1pY3Jvc29mdC48L3BhcmE+Ci0KLTxwYXJhPlRoZSBwcm9qZWN0cy9tYWtlZmlsZXMgd2lsbCBnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IHNvbWUgc291cmNlIGZpbGVzIG5lZWRlZCB0byBjb21waWxlIAotR1N0cmVhbWVyLiBUaGF0IHJlcXVpcmVzIHRoYXQgeW91IGhhdmUgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIHNvbWUgR05VIHRvb2xzIGFuZCB0aGF0IHRoZXkgYXJlIAotYXZhaWxhYmxlIGluIHlvdXIgc3lzdGVtIFBBVEguPC9wYXJhPgotCi08cGFyYT5UaGUgR1N0cmVhbWVyIHByb2plY3QgZGVwZW5kcyBvbiBvdGhlciBsaWJyYXJpZXMsIG5hbWVseSA6PC9wYXJhPgotPGl0ZW1pemVkbGlzdD4KLTxsaXN0aXRlbT48cGFyYT5HTGliPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+bGlieG1sMjwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPmxpYmludGw8L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT5saWJpY29udjwvcGFyYT48L2xpc3RpdGVtPgotPC9pdGVtaXplZGxpc3Q+Ci0KLTxwYXJhPldvcmsgaXMgYmVpbmcgZG9uZSB0byBwcm92aWRlIHByZS1jb21waWxlZCBHU3RyZWFtZXItMS4wIGxpYnJhcmllcyBhcwotYSBwYWNrYWdlcyBmb3Igd2luMzIuIENoZWNrIHRoZSA8dWxpbmsgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZyI+Ci1HU3RyZWFtZXIgd2ViIHNpdGU8L3VsaW5rPiBhbmQgY2hlY2sgb3VyCi08dWxpbmsgdXJsPSJodHRwOi8vbmV3cy5nbWFuZS5vcmcvZ21hbmUuY29tcC52aWRlby5nc3RyZWFtZXIuZGV2ZWwiPm1haWxpbmcgbGlzdAotPC91bGluaz4gZm9yIHRoZSBsYXRlc3QgZGV2ZWxvcG1lbnRzIGluIHRoaXMgcmVzcGVjdC48L3BhcmE+Ci0KLTxub3RlPgotPHRpdGxlPk5vdGVzPC90aXRsZT4KLQotPHBhcmE+R05VIHRvb2xzIG5lZWRlZCB0aGF0IHlvdSBjYW4gZmluZCBvbiA8dWxpbmsgdXJsPSJodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0LyI+aHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldC88L3VsaW5rPjwvcGFyYT4KLTxpdGVtaXplZGxpc3Q+Ci08bGlzdGl0ZW0+PHBhcmE+R05VIGZsZXggICAgICAodGVzdGVkIHdpdGggMi41LjQpPC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+R05VIGJpc29uICAgICAodGVzdGVkIHdpdGggMS4zNSk8L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT5hbmQgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5taW5ndy5vcmcvIj5odHRwOi8vd3d3Lm1pbmd3Lm9yZy88L3VsaW5rPjwvcGFyYT4KLTxpdGVtaXplZGxpc3Q+Ci08bGlzdGl0ZW0+PHBhcmE+R05VIG1ha2UgICAgICAodGVzdGVkIHdpdGggMy44MCk8L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotCi08cGFyYT50aGUgZ2VuZXJhdGVkIGZpbGVzIGZyb20gdGhlIC1hdXRvIG1ha2VmaWxlcyB3aWxsIGJlIGF2YWlsYWJsZSBzb29uIHNlcGFyYXRlbHkgb24gdGhlIG5ldCAKLWZvciBjb252ZW5pZW5jZSAocGVvcGxlIHdobyBkb24ndCB3YW50IHRvIGluc3RhbGwgR05VIHRvb2xzKS48L3BhcmE+Ci08L25vdGU+Ci08L3NlY3QyPgotCi0gIDxzZWN0MiBpZD0ic2VjdGlvbi13aW4zMi1pbnN0YWxsIj4KLTx0aXRsZT5JbnN0YWxsYXRpb24gb24gdGhlIHN5c3RlbTwvdGl0bGU+Ci0KLTxwYXJhPkZJWE1FOiBUaGlzIHNlY3Rpb24gbmVlZHMgYmUgdXBkYXRlZCBmb3IgR1N0cmVhbWVyLTEuMC48L3BhcmE+Ci0KLTwhLS0KLTxwYXJhPkJ5IGRlZmF1bHQsIEdTdHJlYW1lciBuZWVkcyBhIHJlZ2lzdHJ5LiBZb3UgaGF2ZSB0byBnZW5lcmF0ZSBpdCB1c2luZyAiZ3N0LXJlZ2lzdGVyLmV4ZSIuIEl0IHdpbGwgY3JlYXRlCi10aGUgZmlsZSBpbiBjOlxnc3RyZWFtZXJccmVnaXN0cnkueG1sIHRoYXQgd2lsbCBob2xkIGFsbCB0aGUgcGx1Z2lucyB5b3UgY2FuIHVzZS48L3BhcmE+Ci0KLTxwYXJhPllvdSBzaG91bGQgaW5zdGFsbCB0aGUgR1N0cmVhbWVyIGNvcmUgaW4gYzpcZ3N0cmVhbWVyXGJpbiBhbmQgdGhlIHBsdWdpbnMgaW4gYzpcZ3N0cmVhbWVyXHBsdWdpbnMuICBCb3RoCi1kaXJlY3RvcmllcyBzaG91bGQgYmUgYWRkZWQgdG8geW91ciBzeXN0ZW0gUEFUSC4gVGhlIGxpYnJhcnkgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQgaW4gYzpcdXNyPC9wYXJhPgotCi08cGFyYT5Gb3IgZXhhbXBsZSwgbXkgY3VycmVudCBzZXR1cCBpcyA6PC9wYXJhPgotCi08aXRlbWl6ZWRsaXN0PgotPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlxnc3RyZWFtZXJccmVnaXN0cnkueG1sPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcZ3N0cmVhbWVyXGJpblxnc3QtaW5zcGVjdC5leGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlxnc3RyZWFtZXJcYmluXGdzdC1sYXVuY2guZXhlPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcZ3N0cmVhbWVyXGJpblxnc3QtcmVnaXN0ZXIuZXhlPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcZ3N0cmVhbWVyXGJpblxnc3RieXRlc3RyZWFtLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxiaW5cZ3N0ZWxlbWVudHMuZGxsPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcZ3N0cmVhbWVyXGJpblxnc3RvcHRpbWFsc2NoZWR1bGVyLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxiaW5cZ3N0c3BpZGVyLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxiaW5cbGliZ3RyZWFtZXItMC44LmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxwbHVnaW5zXGdzdC1saWJzLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XGdzdHJlYW1lclxwbHVnaW5zXGdzdG1hdHJvc2thLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XHVzclxiaW5caWNvbnYuZGxsPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcdXNyXGJpblxpbnRsLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XHVzclxiaW5cbGliZ2xpYi0yLjAtMC5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlx1c3JcYmluXGxpYmdtb2R1bGUtMi4wLTAuZGxsPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLTxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YzpcdXNyXGJpblxsaWJnb2JqZWN0LTIuMC0wLmRsbDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmM6XHVzclxiaW5cbGliZ3RocmVhZC0yLjAtMC5kbGw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgotPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jOlx1c3JcYmluXGxpYnhtbDIuZGxsPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KLTwvaXRlbWl6ZWRsaXN0PgotLS0+Ci0KLSAgPC9zZWN0Mj4KLQotICA8L3NlY3QxPgotCi08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hcHBlbmRpeC1saWNlbnNpbmcueG1sIGIvZG9jcy9tYW51YWwvYXBwZW5kaXgtbGljZW5zaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI4YTZjYy4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9hcHBlbmRpeC1saWNlbnNpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLWxpY2Vuc2luZyI+Ci08dGl0bGU+TGljZW5zaW5nIGFkdmlzb3J5PC90aXRsZT4KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWFwcGxpY2F0aW9uLWxpY2Vuc2luZyI+Ci0gIDx0aXRsZT5Ib3cgdG8gbGljZW5zZSB0aGUgYXBwbGljYXRpb25zIHlvdSBidWlsZCB3aXRoIDxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPjwvdGl0bGU+Ci08cGFyYT4KLVRoZSBsaWNlbnNpbmcgb2YgR1N0cmVhbWVyIGlzIG5vIGRpZmZlcmVudCBmcm9tIGEgbG90IG9mIG90aGVyIGxpYnJhcmllcyAKLW91dCB0aGVyZSBsaWtlIEdUSysgb3IgZ2xpYmM6IHdlIHVzZSB0aGUgTEdQTC4gV2hhdCBjb21wbGljYXRlcyB0aGluZ3MgCi13aXRoIHJlZ2FyZHMgdG8gR1N0cmVhbWVyIGlzIGl0cyBwbHVnaW4tYmFzZWQgZGVzaWduIGFuZCB0aGUgaGVhdmlseSAKLXBhdGVudGVkIGFuZCBwcm9wcmlldGFyeSBuYXR1cmUgb2YgbWFueSBtdWx0aW1lZGlhIGNvZGVjcy4gV2hpbGUgcGF0ZW50cyAKLW9uIHNvZnR3YXJlIGFyZSBjdXJyZW50bHkgb25seSBhbGxvd2VkIGluIGEgc21hbGwgbWlub3JpdHkgb2Ygd29ybGQgCi1jb3VudHJpZXMgKHRoZSBVUyBhbmQgQXVzdHJhbGlhIGJlaW5nIHRoZSBtb3N0IGltcG9ydGFudCBvZiB0aG9zZSksIHRoZSAKLXByb2JsZW0gaXMgdGhhdCBkdWUgdG8gdGhlIGNlbnRyYWwgcGxhY2UgdGhlIFVTIGhvbGQgaW4gdGhlIHdvcmxkIGVjb25vbXkgCi1hbmQgdGhlIGNvbXB1dGluZyBpbmR1c3RyeSwgc29mdHdhcmUgcGF0ZW50cyBhcmUgaGFyZCB0byBpZ25vcmUgd2hlcmV2ZXIgCi15b3UgYXJlLgotCi1EdWUgdG8gdGhpcyBzaXR1YXRpb24sIG1hbnkgY29tcGFuaWVzLCBpbmNsdWRpbmcgbWFqb3IgR05VL0xpbnV4IAotZGlzdHJpYnV0aW9ucywgZ2V0IHRyYXBwZWQgaW4gYSBzaXR1YXRpb24gd2hlcmUgdGhleSBlaXRoZXIgZ2V0IGJhZCAKLXJldmlld3MgZHVlIHRvIGxhY2tpbmcgb3V0LW9mLXRoZS1ib3ggbWVkaWEgcGxheWJhY2sgY2FwYWJpbGl0aWVzIChhbmQgCi1hdHRlbXB0cyB0byBlZHVjYXRlIHRoZSByZXZpZXdlcnMgaGF2ZSBtZXQgd2l0aCBsaXR0bGUgc3VjY2VzcyBzbyBmYXIpLCBvciAKLWdvIGFnYWluc3QgdGhlaXIgb3duIC0gYW5kIHRoZSBmcmVlIHNvZnR3YXJlIG1vdmVtZW50J3MgLSB3aXNoIHRvIGF2b2lkIAotcHJvcHJpZXRhcnkgc29mdHdhcmUuIER1ZSB0byBjb21wZXRpdGl2ZSBwcmVzc3VyZSwgbW9zdCBjaG9vc2UgdG8gYWRkIHNvbWUgCi1zdXBwb3J0LiBEb2luZyB0aGF0IHRocm91Z2ggcHVyZSBmcmVlIHNvZnR3YXJlIHNvbHV0aW9ucyB3b3VsZCBoYXZlIHRoZW0gCi1yaXNrIGhlYXZ5IGxpdGlnYXRpb24gYW5kIHB1bmlzaG1lbnQgZnJvbSBwYXRlbnQgb3duZXJzLiBTbyB3aGVuIHRoZSAKLWRlY2lzaW9uIGlzIG1hZGUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBwYXRlbnRlZCBjb2RlY3MsIGl0IGxlYXZlcyB0aGVtIAotdGhlIGNob2ljZSBvZiBlaXRoZXIgdXNpbmcgc3BlY2lhbCBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMsIG9yIHRyeSB0byAKLWludGVncmF0ZSB0aGUgc3VwcG9ydCBmb3IgdGhlc2UgY29kZWNzIHRocm91Z2ggcHJvcHJpZXRhcnkgcGx1Z2lucyBpbnRvIAotdGhlIG11bHRpbWVkaWEgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgR1N0cmVhbWVyLiBGYWNlZCB3aXRoIG9uZSBvZiAKLXRoZXNlIHR3byBldmlscyB0aGUgR1N0cmVhbWVyIGNvbW11bml0eSBvZiBjb3Vyc2UgcHJlZmVyIHRoZSBzZWNvbmQgb3B0aW9uLgotPC9wYXJhPgotPHBhcmE+Ci1UaGUgcHJvYmxlbSB3aGljaCBhcmlzZXMgaXMgdGhhdCBtb3N0IGZyZWUgc29mdHdhcmUgYW5kIG9wZW4gc291cmNlIAotYXBwbGljYXRpb25zIGRldmVsb3BlZCB1c2UgdGhlIEdQTCBhcyB0aGVpciBsaWNlbnNlLiBXaGlsZSB0aGlzIGlzIAotZ2VuZXJhbGx5IGEgZ29vZCB0aGluZywgaXQgY3JlYXRlcyBhIGRpbGVtbWEgZm9yIHBlb3BsZSB3aG8gd2FudCB0byBwdXQgCi10b2dldGhlciBhIGRpc3RyaWJ1dGlvbi4gVGhlIGRpbGVtbWEgdGhleSBmYWNlIGlzIHRoYXQgaWYgdGhleSBpbmNsdWRlIAotcHJvcHJpZXRhcnkgcGx1Z2lucyBpbiBHU3RyZWFtZXIgdG8gc3VwcG9ydCBwYXRlbnRlZCBmb3JtYXRzIGluIGEgd2F5IHRoYXQgCi1pcyBsZWdhbCBmb3IgdGhlbSwgdGhleSBkbyByaXNrIHJ1bm5pbmcgYWZvdWwgb2YgdGhlIEdQTCBsaWNlbnNlIG9mIHRoZSAKLWFwcGxpY2F0aW9ucy4gV2UgaGF2ZSBnb3R0ZW4gc29tZSBjb25mbGljdGluZyByZXBvcnRzIGZyb20gbGF3eWVycyBvbiAKLXdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSBhIHByb2JsZW0sIGJ1dCB0aGUgb2ZmaWNpYWwgc3RhbmNlIG9mIHRoZSBGU0YgaXMgCi10aGF0IGl0IGlzIGEgcHJvYmxlbS4gV2UgdmlldyB0aGUgRlNGIGFzIGFuIGF1dGhvcml0eSBvbiB0aGlzIG1hdHRlciwgc28gCi13ZSBhcmUgaW5jbGluZWQgdG8gZm9sbG93IHRoZWlyIGludGVycHJldGF0aW9uIG9mIHRoZSBHUEwgbGljZW5zZS4KLTwvcGFyYT4KLTxwYXJhPgotU28gd2hhdCBkb2VzIHRoaXMgbWVhbiBmb3IgeW91IGFzIGFuIGFwcGxpY2F0aW9uIGRldmVsb3Blcj8gV2VsbCwgaXQgbWVhbnMgCi15b3UgaGF2ZSB0byBtYWtlIGFuIGFjdGl2ZSBkZWNpc2lvbiBvbiB3aGV0aGVyIHlvdSB3YW50IHlvdXIgYXBwbGljYXRpb24gCi10byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggcHJvcHJpZXRhcnkgcGx1Z2lucyBvciBub3QuIFdoYXQgeW91IGRlY2lkZSBoZXJlIAotd2lsbCBhbHNvIGluZmx1ZW5jZSB0aGUgY2hhbmNlcyBvZiBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbnMgYW5kIFVuaXggCi12ZW5kb3JzIHNoaXBwaW5nIHlvdXIgYXBwbGljYXRpb24uIFRoZSBHU3RyZWFtZXIgY29tbXVuaXR5IHN1Z2dlc3QgeW91IAotbGljZW5zZSB5b3VyIHNvZnR3YXJlIHVzaW5nIGEgbGljZW5zZSB0aGF0IHdpbGwgYWxsb3cgcHJvcHJpZXRhcnkgcGx1Z2lucyAKLXRvIGJlIGJ1bmRsZWQgd2l0aCBHU3RyZWFtZXIgYW5kIHlvdXIgYXBwbGljYXRpb25zLCBpbiBvcmRlciB0byBtYWtlIHN1cmUgCi10aGF0IGFzIG1hbnkgdmVuZG9ycyBhcyBwb3NzaWJsZSBnbyB3aXRoIEdTdHJlYW1lciBpbnN0ZWFkIG9mIGxlc3MgZnJlZSAKLXNvbHV0aW9ucy4gVGhpcyBpbiB0dXJuIHdlIGhvcGUgYW5kIHRoaW5rIHdpbGwgbGV0IEdTdHJlYW1lciBiZSBhIHZlaGljbGUgCi1mb3Igd2lkZXIgdXNlIG9mIGZyZWUgZm9ybWF0cyBsaWtlIHRoZSBYaXBoLm9yZyBmb3JtYXRzLgotPC9wYXJhPgotPHBhcmE+Ci1JZiB5b3UgZG8gZGVjaWRlIHRoYXQgeW91IHdhbnQgdG8gYWxsb3cgZm9yIG5vbi1mcmVlIHBsdWdpbnMgdG8gYmUgdXNlZCAKLXdpdGggeW91ciBhcHBsaWNhdGlvbiB5b3UgaGF2ZSBhIHZhcmlldHkgb2YgY2hvaWNlcy4gT25lIG9mIHRoZSBzaW1wbGVzdCAKLWlzIHVzaW5nIGxpY2Vuc2VzIGxpa2UgTEdQTCwgTVBMIG9yIEJTRCBmb3IgeW91ciBhcHBsaWNhdGlvbiBpbnN0ZWFkIG9mIAotdGhlIEdQTC4gT3IgeW91IGNhbiBhZGQgYW4gZXhjZXB0aW9uIGNsYXVzZSB0byB5b3VyIEdQTCBsaWNlbnNlIHN0YXRpbmcgCi10aGF0IHlvdSBleGNlcHQgR1N0cmVhbWVyIHBsdWdpbnMgZnJvbSB0aGUgb2JsaWdhdGlvbnMgb2YgdGhlIEdQTC4KLTwvcGFyYT4KLTxwYXJhPgotQSBnb29kIGV4YW1wbGUgb2Ygc3VjaCBhIEdQTCBleGNlcHRpb24gY2xhdXNlIHdvdWxkIGJlLCB1c2luZyB0aGUKLVRvdGVtIHZpZGVvIHBsYXllciBwcm9qZWN0IGFzIGFuIGV4YW1wbGU6Ci1UaGUgYXV0aG9ycyBvZiB0aGUgVG90ZW0gdmlkZW8gcGxheWVyIHByb2plY3QgaGVyZWJ5IGdyYW50cyBwZXJtaXNzaW9uIAotZm9yIG5vbi1HUEwtY29tcGF0aWJsZSBHU3RyZWFtZXIgcGx1Z2lucyB0byBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCAKLXRvZ2V0aGVyIHdpdGggR1N0cmVhbWVyIGFuZCBUb3RlbS4gVGhpcyBwZXJtaXNzaW9uIGdvZXMgYWJvdmUgYW5kIGJleW9uZCAKLXRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoZSBHUEwgbGljZW5zZSBUb3RlbSBpcyBjb3ZlcmVkIGJ5LgotPC9wYXJhPgotPHBhcmE+Ci1PdXIgc3VnZ2VzdGlvbiBhbW9uZyB0aGVzZSBjaG9pY2VzIGlzIHRvIHVzZSB0aGUgTEdQTCBsaWNlbnNlLCBhcyBpdCBpcyAKLXdoYXQgcmVzZW1ibGVzIHRoZSBHUEwgbW9zdCBhbmQgaXQgbWFrZXMgaXQgYSBnb29kIGxpY2Vuc2luZyBmaXQgd2l0aCB0aGUgCi1tYWpvciBHTlUvTGludXggZGVza3RvcCBwcm9qZWN0cyBsaWtlIEdOT01FIGFuZCBLREUuIEl0IGFsc28gYWxsb3dzIHlvdSB0byAKLXNoYXJlIGNvZGUgbW9yZSBvcGVubHkgd2l0aCBwcm9qZWN0cyB0aGF0IGhhdmUgY29tcGF0aWJsZSBsaWNlbnNlcy4gCi1PYnZpb3VzbHksIHB1cmUgR1BMIGNvZGUgd2l0aG91dCB0aGUgYWJvdmUtbWVudGlvbmVkIGNsYXVzZSBpcyBub3QgdXNhYmxlIAotaW4geW91ciBhcHBsaWNhdGlvbiBhcyBzdWNoLiBCeSBjaG9vc2luZyB0aGUgTEdQTCwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gCi1leGNlcHRpb24gY2xhdXNlIGFuZCB0aHVzIGNvZGUgY2FuIGJlIHNoYXJlZCBtb3JlIGZyZWVseS4KLTwvcGFyYT4KLTxwYXJhPgotSSBoYXZlIGFib3ZlIG91dGxpbmVkIHRoZSBwcmFjdGljYWwgcmVhc29ucyBmb3Igd2h5IHRoZSBHU3RyZWFtZXIgCi1jb21tdW5pdHkgc3VnZ2VzdHMgeW91IGFsbG93IG5vbi1mcmVlIHBsdWdpbnMgdG8gYmUgdXNlZCB3aXRoIHlvdXIgCi1hcHBsaWNhdGlvbnMuIFdlIGZlZWwgdGhhdCBpbiB0aGUgbXVsdGltZWRpYSBhcmVuYSwgdGhlIGZyZWUgc29mdHdhcmUgCi1jb21tdW5pdHkgaXMgc3RpbGwgbm90IHN0cm9uZyBlbm91Z2ggdG8gc2V0IHRoZSBhZ2VuZGEgYW5kIHRoYXQgYmxvY2tpbmcgCi1ub24tZnJlZSBwbHVnaW5zIHRvIGJlIHVzZWQgaW4gb3VyIGluZnJhc3RydWN0dXJlIGh1cnRzIHVzIG1vcmUgdGhhbiBpdCAKLWh1cnRzIHRoZSBwYXRlbnQgb3duZXJzIGFuZCB0aGVpciBpbGsuCi08L3BhcmE+Ci08cGFyYT4KLVRoaXMgdmlldyBpcyBub3Qgc2hhcmVkIGJ5IGV2ZXJ5b25lLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHVyZ2VzIAoteW91IHRvIHVzZSBhbiB1bm1vZGlmaWVkIEdQTCBmb3IgeW91ciBhcHBsaWNhdGlvbnMsIHNvIGFzIHRvIHB1c2ggYmFjayAKLWFnYWluc3QgdGhlIHRlbXB0YXRpb24gdG8gdXNlIG5vbi1mcmVlIHBsdWctaW5zLiBUaGV5IHNheSB0aGF0IHNpbmNlIG5vdCAKLWV2ZXJ5b25lIGVsc2UgaGFzIHRoZSBzdHJlbmd0aCB0byByZWplY3QgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIHVuZXRoaWNhbCwgCi10aGV5IGFzayB5b3VyIGhlbHAgdG8gZ2l2ZSB0aGVtIGEgbGVnYWwgcmVhc29uIHRvIGRvIHNvLiAKLTwvcGFyYT4KLTxwYXJhPgotVGhpcyBhZHZpc29yeSBpcyBwYXJ0IG9mIGEgYmlnZ2VyIGFkdmlzb3J5IHdpdGggYSBGQVEgd2hpY2ggeW91IGNhbiBmaW5kCi1vbiB0aGUgPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG9jdW1lbnRhdGlvbi9saWNlbnNpbmcuaHRtbCI+R1N0cmVhbWVyIHdlYnNpdGU8L3VsaW5rPgotPC9wYXJhPgotCi0KLTwvc2VjdDE+Ci0KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2FwcGVuZGl4LXBvcnRpbmcueG1sIGIvZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhOGViMDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtcG9ydGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItcG9ydGluZyI+Ci0gIDx0aXRsZT5Qb3J0aW5nIDAuOCBhcHBsaWNhdGlvbnMgdG8gMC4xMDwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIFRoaXMgc2VjdGlvbiBvZiB0aGUgYXBwZW5kaXggd2lsbCBkaXNjdXNzIHNob3J0bHkgd2hhdCBjaGFuZ2VzIHRvCi0gICAgYXBwbGljYXRpb25zIHdpbGwgYmUgbmVlZGVkIHRvIHF1aWNrbHkgYW5kIGNvbnZlbmllbnRseSBwb3J0IG1vc3QKLSAgICBhcHBsaWNhdGlvbnMgZnJvbSAmR1N0cmVhbWVyOy0wLjggdG8gJkdTdHJlYW1lcjstMC4xMCwgd2l0aCByZWZlcmVuY2VzCi0gICAgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb25zIGluIHRoaXMgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgTWFudWFsCi0gICAgd2hlcmUgbmVlZGVkLiBXaXRoIHRoaXMgbGlzdCwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBvcnQgc2ltcGxlCi0gICAgYXBwbGljYXRpb25zIHRvICZHU3RyZWFtZXI7LTAuMTAgaW4gbGVzcyB0aGFuIGEgZGF5LgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXBvcnRpbmctb2JqZWN0cyI+Ci0gICAgPHRpdGxlPkxpc3Qgb2YgY2hhbmdlczwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTW9zdCBmdW5jdGlvbnMgcmV0dXJuaW5nIGFuIG9iamVjdCBvciBhbiBvYmplY3QgcHJvcGVydHkgaGF2ZQotICAgICAgICAgIGJlZW4gY2hhbmdlZCB0byByZXR1cm4gaXRzIG93biByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYSBjb25zdGFudAotICAgICAgICAgIHJlZmVyZW5jZSBvZiB0aGUgb25lIG93bmVkIGJ5IHRoZSBvYmplY3QgaXRzZWxmLiBUaGUgcmVhc29uIGZvcgotICAgICAgICAgIHRoaXMgY2hhbmdlIGlzIHByaW1hcmlseSB0aHJlYWQgc2FmZXR5LiBUaGlzIG1lYW5zLCBlZmZlY3RpdmVseSwKLSAgICAgICAgICB0aGF0IHJldHVybiB2YWx1ZXMgb2YgZnVuY3Rpb25zIHN1Y2ggYXMKLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZ2V0X3BhZCAoKTwvZnVuY3Rpb24+LAotICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2dldF9uYW1lICgpPC9mdW5jdGlvbj4gYW5kIG1hbnkgbW9yZSBsaWtlIHRoZXNlCi0gICAgICAgICAgaGF2ZSB0byBiZSBmcmVlJ2VkIG9yIHVucmVmZXJlbmNlZCBhZnRlciB1c2UuIENoZWNrIHRoZSBBUEkKLSAgICAgICAgICByZWZlcmVuY2VzIG9mIGVhY2ggZnVuY3Rpb24gdG8ga25vdyBmb3Igc3VyZSB3aGV0aGVyIHJldHVybgotICAgICAgICAgIHZhbHVlcyBzaG91bGQgYmUgZnJlZSdlZCBvciBub3QuIEl0IGlzIGltcG9ydGFudCB0aGF0IGFsbCBvYmplY3RzCi0gICAgICAgICAgZGVyaXZlZCBmcm9tIEdzdE9iamVjdCBhcmUgcmVmJ2VkL3VucmVmJ2VkIHVzaW5nIGdzdF9vYmplY3RfcmVmKCkKLSAgICAgICAgICBhbmQgZ3N0X29iamVjdF91bnJlZigpIHJlc3BlY3RpdmVseSAoaW5zdGVhZCBvZiBnX29iamVjdF9yZWYvdW5yZWYpLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBcHBsaWNhdGlvbnMgc2hvdWxkIG5vIGxvbmdlciB1c2Ugc2lnbmFsIGhhbmRsZXJzIHRvIGJlIG5vdGlmaWVkCi0gICAgICAgICAgb2YgZXJyb3JzLCBlbmQtb2Ytc3RyZWFtIGFuZCBvdGhlciBzaW1pbGFyIHBpcGVsaW5lIGV2ZW50cy4KLSAgICAgICAgICBJbnN0ZWFkLCB0aGV5IHNob3VsZCB1c2UgdGhlIDxjbGFzc25hbWU+R3N0QnVzPC9jbGFzc25hbWU+LCB3aGljaAotICAgICAgICAgIGhhcyBiZWVuIGRpc2N1c3NlZCBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1cyIvPi4gVGhlIGJ1cyB3aWxsCi0gICAgICAgICAgdGFrZSBjYXJlIHRoYXQgdGhlIG1lc3NhZ2VzIHdpbGwgYmUgZGVsaXZlcmVkIGluIHRoZSBjb250ZXh0IG9mIGEKLSAgICAgICAgICBtYWluIGxvb3AsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGFwcGxpY2F0aW9uJ3MgbWFpbiB0aHJlYWQuCi0gICAgICAgICAgVGhlIGJpZyBhZHZhbnRhZ2Ugb2YgdGhpcyBpcyB0aGF0IGFwcGxpY2F0aW9ucyBubyBsb25nZXIgbmVlZCB0bwotICAgICAgICAgIGJlIHRocmVhZC1hd2FyZTsgdGhleSBkb24ndCBuZWVkIHRvIHVzZSA8ZnVuY3Rpb24+Z19pZGxlX2FkZAotICAgICAgICAgICgpPC9mdW5jdGlvbj4gaW4gdGhlIHNpZ25hbCBoYW5kbGVyIGFuZCBkbyB0aGUgYWN0dWFsIHJlYWwgd29yawotICAgICAgICAgIGluIHRoZSBpZGxlLWNhbGxiYWNrLiAmR1N0cmVhbWVyOyBub3cgZG9lcyBhbGwgdGhhdCBpbnRlcm5hbGx5LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBSZWxhdGVkIHRvIHRoaXMsIDxmdW5jdGlvbj5nc3RfYmluX2l0ZXJhdGUgKCk8L2Z1bmN0aW9uPiBoYXMgYmVlbgotICAgICAgICAgIHJlbW92ZWQuIFBpcGVsaW5lcyB3aWxsIGl0ZXJhdGUgaW4gdGhlaXIgb3duIHRocmVhZCwgYW5kIGFwcGxpY2F0aW9ucwotICAgICAgICAgIGNhbiBzaW1wbHkgcnVuIGEgPGNsYXNzbmFtZT5HTWFpbkxvb3A8L2NsYXNzbmFtZT4gKG9yIGNhbGwgdGhlCi0gICAgICAgICAgbWFpbmxvb3Agb2YgdGhlaXIgVUkgdG9vbGtpdCwgc3VjaCBhcyA8ZnVuY3Rpb24+Z3RrX21haW4KLSAgICAgICAgICAoKTwvZnVuY3Rpb24+KS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgU3RhdGUgY2hhbmdlcyBjYW4gYmUgZGVsYXllZCAoQVNZTkMpLiBEdWUgdG8gdGhlIG5ldyBmdWxseSB0aHJlYWRlZAotICAgICAgICAgIG5hdHVyZSBvZiBHU3RyZWFtZXItMC4xMCwgc3RhdGUgY2hhbmdlcyBhcmUgbm90IGFsd2F5cyBpbW1lZGlhdGUsCi0gICAgICAgICAgaW4gcGFydGljdWxhciBjaGFuZ2VzIGluY2x1ZGluZyB0aGUgdHJhbnNpdGlvbiBmcm9tIFJFQURZIHRvIFBBVVNFRAotICAgICAgICAgIHN0YXRlLiBUaGlzIG1lYW5zIHR3byB0aGluZ3MgaW4gdGhlIGNvbnRleHQgb2YgcG9ydGluZyBhcHBsaWNhdGlvbnM6Ci0gICAgICAgICAgZmlyc3Qgb2YgYWxsLCBpdCBpcyBubyBsb25nZXIgYWx3YXlzIHBvc3NpYmxlIHRvIGRvCi0gICAgICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKTwvZnVuY3Rpb24+IGFuZCBjaGVjayBmb3IgYSByZXR1cm4KLSAgICAgICAgICB2YWx1ZSBvZiBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsIGFzIHRoZSBzdGF0ZSBjaGFuZ2UgbWlnaHQgYmUKLSAgICAgICAgICBkZWxheWVkIChBU1lOQykgYW5kIHRoZSByZXN1bHQgd2lsbCBub3QgYmUga25vd24gdW50aWwgbGF0ZXIuIFlvdQotICAgICAgICAgIHNob3VsZCBzdGlsbCBjaGVjayBmb3IgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIHJpZ2h0IGF3YXksIGl0IGlzCi0gICAgICAgICAganVzdCBubyBsb25nZXIgcG9zc2libGUgdG8gYXNzdW1lIHRoYXQgZXZlcnl0aGluZyB0aGF0IGlzIG5vdCBTVUNDRVNTCi0gICAgICAgICAgbWVhbnMgZmFpbHVyZS4gU2Vjb25kbHksIHN0YXRlIGNoYW5nZXMgbWlnaHQgbm90IGJlIGltbWVkaWF0ZSwgc28KLSAgICAgICAgICB5b3VyIGNvZGUgbmVlZHMgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudC4gWW91IGNhbiB3YWl0IGZvciBhIHN0YXRlCi0gICAgICAgICAgY2hhbmdlIHRvIGNvbXBsZXRlIGlmIHlvdSB1c2UgR1NUX0NMT0NLX1RJTUVfTk9ORSBhcyB0aW1lb3V0IGludGVydmFsCi0gICAgICAgICAgd2l0aCA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlICgpPC9mdW5jdGlvbj4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEluIDAuOCwgZXZlbnRzIGFuZCBxdWVyaWVzIGhhZCB0byBtYW51YWxseSBiZSBzZW50IHRvIHNpbmtzIGluCi0gICAgICAgICAgcGlwZWxpbmVzICh1bmxlc3MgeW91IHdlcmUgdXNpbmcgcGxheWJpbikuIFRoaXMgaXMgbm8gbG9uZ2VyCi0gICAgICAgICAgdGhlIGNhc2UgaW4gMC4xMC4gSW4gMC4xMCwgcXVlcmllcyBhbmQgZXZlbnRzIGNhbiBiZSBzZW50IHRvCi0gICAgICAgICAgdG9wbGV2ZWwgcGlwZWxpbmVzLCBhbmQgdGhlIHBpcGVsaW5lIHdpbGwgZG8gdGhlIGRpc3BhdGNoaW5nCi0gICAgICAgICAgaW50ZXJuYWxseSBmb3IgeW91LiBUaGlzIG1lYW5zIGxlc3MgYm9va2tlZXBpbmcgaW4geW91cgotICAgICAgICAgIGFwcGxpY2F0aW9uLiBGb3IgYSBzaG9ydCBjb2RlIGV4YW1wbGUsIHNlZSA8eHJlZgotICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItcXVlcnlldmVudHMiLz4uIFJlbGF0ZWQsIHNlZWtpbmcgaXMgbm93Ci0gICAgICAgICAgdGhyZWFkc2FmZSwgYW5kIHlvdXIgdmlkZW8gb3V0cHV0IHdpbGwgc2hvdyB0aGUgbmV3IHZpZGVvCi0gICAgICAgICAgcG9zaXRpb24ncyBmcmFtZSB3aGlsZSBzZWVraW5nLCBwcm92aWRpbmcgYSBiZXR0ZXIgdXNlcgotICAgICAgICAgIGV4cGVyaWVuY2UuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSA8Y2xhc3NuYW1lPkdzdFRocmVhZDwvY2xhc3NuYW1lPiBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4KLSAgICAgICAgICBBcHBsaWNhdGlvbnMgY2FuIG5vdyBzaW1wbHkgcHV0IGVsZW1lbnRzIGluIGEgcGlwZWxpbmUgd2l0aAotICAgICAgICAgIG9wdGlvbmFsbHkgc29tZSA8cXVvdGU+cXVldWU8L3F1b3RlPiBlbGVtZW50cyBpbiBiZXR3ZWVuIGZvcgotICAgICAgICAgIGJ1ZmZlcmluZywgYW5kICZHU3RyZWFtZXI7IHdpbGwgdGFrZSBjYXJlIG9mIGNyZWF0aW5nIHRocmVhZHMKLSAgICAgICAgICBpbnRlcm5hbGx5LiBJdCBpcyBzdGlsbCBwb3NzaWJsZSB0byBoYXZlIHBhcnRzIG9mIGEgcGlwZWxpbmUKLSAgICAgICAgICBydW4gaW4gZGlmZmVyZW50IHRocmVhZHMgdGhhbiBvdGhlcnMsIGJ5IHVzaW5nIHRoZQotICAgICAgICAgIDxxdW90ZT5xdWV1ZTwvcXVvdGU+IGVsZW1lbnQuIFNlZSA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLXRocmVhZHMiLz4KLSAgICAgICAgICBmb3IgZGV0YWlscy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRmlsdGVyZWQgY2FwcyAtPiBjYXBzZmlsdGVyIGVsZW1lbnQgKHRoZSBwaXBlbGluZSBzeW50YXggZm9yCi0gICAgICAgICAgZ3N0LWxhdW5jaCBoYXMgbm90IGNoYW5nZWQgdGhvdWdoKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgbGliZ3N0Z2NvbmYtMC4xMC5sYSBkb2VzIG5vdCBleGlzdC4gVXNlIHRoZQotICAgICAgICAgIDxxdW90ZT5nY29uZnZpZGVvc2luazwvcXVvdGU+IGFuZCA8cXVvdGU+Z2NvbmZhdWRpb3Npbms8L3F1b3RlPgotICAgICAgICAgIGVsZW1lbnRzIGluc3RlYWQsIHdoaWNoIHdpbGwgZG8gbGl2ZS11cGRhdGVzIGFuZCByZXF1aXJlIG5vIGxpYnJhcnkKLSAgICAgICAgICBsaW5raW5nLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgPHF1b3RlPm5ldy1wYWQ8L3F1b3RlPiBhbmQgPHF1b3RlPnN0YXRlLWNoYW5nZTwvcXVvdGU+IHNpZ25hbHMgb24KLSAgICAgICAgICA8Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT4gd2VyZSByZW5hbWVkIHRvCi0gICAgICAgICAgPHF1b3RlPnBhZC1hZGRlZDwvcXVvdGU+IGFuZCA8cXVvdGU+c3RhdGUtY2hhbmdlZDwvcXVvdGU+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2luaXRfZ2V0X3BvcHRfdGFibGUgKCk8L2Z1bmN0aW9uPiBoYXMgYmVlbiByZW1vdmVkCi0gICAgICAgICAgaW4gZmF2b3VyIG9mIHRoZSBuZXcgR09wdGlvbiBjb21tYW5kIGxpbmUgb3B0aW9uIEFQSSB0aGF0IHdhcwotICAgICAgICAgIGFkZGVkIHRvIEdMaWIgMi42LiA8ZnVuY3Rpb24+Z3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKTwvZnVuY3Rpb24+Ci0gICAgICAgICAgaXMgdGhlIG5ldyBHT3B0aW9uLWJhc2VkIGVxdWl2YWxlbnQgdG8KLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2luaXRfZ2V0X3B0b3BfdGFibGUgKCk8L2Z1bmN0aW9uPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KLTxjaGFwdGVyIGlkPSJjaGFwdGVyLXBvcnRpbmctMS4wIj4KLSAgPHRpdGxlPlBvcnRpbmcgMC4xMCBhcHBsaWNhdGlvbnMgdG8gMS4wPC90aXRsZT4KLQotICA8cGFyYT5UaGlzIHNlY3Rpb24gb3V0bGluZXMgc29tZSBvZiB0aGUgY2hhbmdlcyBuZWNlc3NhcnkgdG8gcG9ydAotICBhcHBsaWNhdGlvbnMgZnJvbSAmR1N0cmVhbWVyOy0wLjEwIHRvICZHU3RyZWFtZXI7LTEuMC4gRm9yIGEKLSAgY29tcHJlaGVuc2l2ZSBhbmQgdXAtdG8tZGF0ZSBsaXN0LCBzZWUgdGhlIHNlcGFyYXRlIDx1bGluawotICB0eXBlPSJodHRwIgotICB1cmw9Imh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyL3BsYWluL2RvY3MvcmFuZG9tL3BvcnRpbmctdG8tMS4wLnR4dCI+Ci0gIFBvcnRpbmcgdG8gMS4wPC91bGluaz4gZG9jdW1lbnQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBvcnQgc2ltcGxlIGFwcGxpY2F0aW9ucyB0bwotICAgICZHU3RyZWFtZXI7LTEuMCBpbiBsZXNzIHRoYW4gYSBkYXkuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tcG9ydGluZy1vYmplY3RzLTEuMCI+Ci0gICAgPHRpdGxlPkxpc3Qgb2YgY2hhbmdlczwvdGl0bGU+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQWxsIGRlcHJlY2F0ZWQgbWV0aG9kcyB3ZXJlIHJlbW92ZWQuIFJlY29tcGlsZSBhZ2FpbnN0IDAuMTAgd2l0aAotCSAgR1NUX0RJU0FCTEVfREVQUkVDQVRFRCBkZWZpbmVkIChzdWNoIGFzIGJ5IGFkZGluZwotCSAgLURHU1RfRElTQUJMRV9ERVBSRUNBVEVEIHRvIHRoZSBjb21waWxlciBmbGFncykgYW5kIGZpeCBpc3N1ZXMKLQkgIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBvcnQgdG8gMS4wLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAicGxheWJpbjIiIGhhcyBiZWVuIHJlbmFtZWQgdG8gInBsYXliaW4iLCB3aXRoIHNpbWlsYXIgQVBJCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgICJkZWNvZGViaW4yIiBoYXMgYmVlbiByZW5hbWVkIHRvICJkZWNvZGViaW4iLCB3aXRoIHNpbWlsYXIgQVBJLiBOb3RlCi0gICAgICAgICAgdGhhdCB0aGVyZSBpcyBubyBsb25nZXIgYSAibmV3LWRlY29kZWQtcGFkIiBzaWduYWwsIGp1c3QgdXNlIEdzdEVsZW1lbnQncwotICAgICAgICAgICJwYWQtYWRkZWQiIHNpZ25hbCBpbnN0ZWFkIChidXQgZG9uJ3QgZm9yZ2V0IHRvIHJlbW92ZSB0aGUgJ2dib29sZWFuIGxhc3QnCi0gICAgICAgICAgYXJndW1lbnQgZnJvbSB5b3VyIG9sZCBzaWduYWwgY2FsbGJhY2sgZnVuY3Rpbm8gc2lnbmF0dXJlKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgdGhlIG5hbWVzIG9mIHNvbWUgImZvcm1hdHRlZCIgcGFkIHRlbXBsYXRlcyBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gZS5nLgotICAgICAgICAgICJzcmMlZCIgdG8gInNyYyV1IiBvciAic3JjXyV1IiBvciBzaW1pbGFyLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHNlZQotICAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgaW4gcGFkIG5hbWVzLiBUaGlzIG1vc3RseSBhZmZlY3RzIGFwcGxpY2F0aW9ucyB0aGF0Ci0gICAgICAgICAgY3JlYXRlIHJlcXVlc3QgcGFkcyBmcm9tIGVsZW1lbnRzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBzb21lIGVsZW1lbnRzIHRoYXQgdXNlZCB0byBoYXZlIGEgc2luZ2xlIGR5bmFtaWMgc291cmNlIHBhZCBoYXZlIGEKLSAgICAgICAgICBzb3VyY2UgcGFkIG5vdy4gRXhhbXBsZTogd2F2cGFyc2UsIGlkM2RlbXV4LCBpY2V5ZGVtdXgsIGFwZWRlbXV4LgotICAgICAgICAgIChUaGlzIGRvZXMgbm90IGFmZmVjdCBhcHBsaWNhdGlvbnMgdXNpbmcgZGVjb2RlYmluIG9yIHBsYXliaW4pLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBwbGF5YmluIG5vdyBwcm94aWVzIHRoZSBHc3RWaWRlb092ZXJsYXkgKGZvcm1lciBHc3RYT3ZlcmxheSkgaW50ZXJmYWNlLAotICAgICAgICAgIHNvIG1vc3QgYXBwbGljYXRpb25zIGNhbiBqdXN0IHJlbW92ZSB0aGUgc3luYyBidXMgaGFuZGxlciB3aGVyZSB0aGV5Ci0gICAgICAgICAgd291bGQgc2V0IHRoZSB3aW5kb3cgSUQsIGFuZCBpbnN0ZWFkIGp1c3Qgc2V0IHRoZSB3aW5kb3cgSUQgb24gcGxheWJpbgotICAgICAgICAgIGZyb20gdGhlIGFwcGxpY2F0aW9uIHRocmVhZCBiZWZvcmUgc3RhcnRpbmcgcGxheWJhY2suCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgcGxheWJpbiBhbHNvIHByb3hpZXMgdGhlIEdzdENvbG9yQmFsYW5jZSBhbmQgR3N0TmF2aWdhdGlvbiBpbnRlcmZhY2VzLAotICAgICAgICAgIHNvIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGlzIGRvbid0IG5lZWQgdG8gZ28gZmlzaGluZyBmb3IgZWxlbWVudHMKLQkgIHRoYXQgbWF5IGltcGxlbWVudCB0aG9zZSBhbnkgbW9yZSwgYnV0IGNhbiBqdXN0IHVzZSBvbiBwbGF5YmluCi0JICB1bmNvbmRpdGlvbmFsbHkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIG11bHRpZmRzaW5rLCB0Y3BjbGllbnRzaW5rLCB0Y3BjbGllbnRzcmMsIHRjcHNlcnZlcnNyYyB0aGUgcHJvdG9jb2wgcHJvcGVydHkKLSAgICAgICAgICBpcyByZW1vdmVkLCB1c2UgZ2RwcGF5IGFuZCBnZHBkZXBheS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgWE1MIHNlcmlhbGl6YXRpb24gd2FzIHJlbW92ZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFByb2JlcyBhbmQgcGFkIGJsb2NraW5nIHdhcyBtZXJnZWQgaW50byBuZXcgcGFkIHByb2Jlcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgUG9zaXRpb24sIGR1cmF0aW9uIGFuZCBjb252ZXJ0IGZ1bmN0aW9ucyBubyBsb25nZXIgdXNlIGFuIGlub3V0IHBhcmFtZXRlcgotICAgICAgICAgIGZvciB0aGUgZGVzdGluYXRpb24gZm9ybWF0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBWaWRlbyBhbmQgYXVkaW8gY2FwcyB3ZXJlIHNpbXBsaWZpZWQuIGF1ZGlvL3gtcmF3LWludCBhbmQgYXVkaW8veC1yYXctZmxvYXQKLSAgICAgICAgICBhcmUgbm93IGFsbCB1bmRlciB0aGUgYXVkaW8veC1yYXcgbWVkaWEgdHlwZS4gU2ltaWxhcmx5LCB2aWRlby94LXJhdy1yZ2IKLSAgICAgICAgICBhbmQgdmlkZW8veC1yYXcteXV2IGFyZSBub3cgdmlkZW8veC1yYXcuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIGZmbXBlZ2NvbG9yc3BhY2Ugd2FzIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggdmlkZW9jb252ZXJ0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBHc3RNaXhlckludGVyZmFjZSAvIEdzdFR1bmVySW50ZXJmYWNlIHdlcmUgcmVtb3ZlZCB3aXRob3V0IHJlcGxhY2VtZW50LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgR3N0WE92ZXJsYXkgaW50ZXJmYWNlIHdhcyByZW5hbWVkIHRvIEdzdFZpZGVvT3ZlcmxheSwgYW5kIG5vdyBwYXJ0Ci0gICAgICAgICAgb2YgdGhlIHZpZGVvIGxpYnJhcnkgaW4gZ3N0LXBsdWdpbnMtYmFzZSwgYXMgdGhlIGludGVyZmFjZXMgbGlicmFyeQotICAgICAgICAgIG5vIGxvbmdlciBleGlzdHMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIEdzdFhPdmVybGF5ICJwcmVwYXJlLXh3aW5kb3ctaWQiIG1lc3NhZ2UgaGFzIGNoYW5nZWQKLSAgICAgICAgICB0byAicHJlcGFyZS13aW5kb3ctaGFuZGxlIiAoYW5kIEdzdFhPdmVybGF5IGhhcyBiZWVuIHJlbmFtZWQgdG8KLSAgICAgICAgICBHc3RWaWRlb092ZXJsYXkpLiBDb2RlIHRoYXQgY2hlY2tzIGZvciB0aGUgc3RyaW5nIGRpcmVjdGx5IHNob3VsZCBiZQotICAgICAgICAgIGNoYW5nZWQgdG8gdXNlIGdzdF9pc192aWRlb19vdmVybGF5X3ByZXBhcmVfd2luZG93X2hhbmRsZV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgaW5zdGVhZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIEdzdFByb3BlcnR5UHJvYmUgaW50ZXJmYWNlIHdhcyByZW1vdmVkLiBUaGVyZSBpcyBubyByZXBsYWNlbWVudAotICAgICAgICAgIGZvciBpdCBpbiBHU3RyZWFtZXIgMS4wLnggYW5kIDEuMi54LCBidXQgc2luY2UgdmVyc2lvbiAxLjQgdGhlcmUgaXMKLSAgICAgICAgICBhIG1vcmUgZmVhdHVyZWZ1bCByZXBsYWNlbWVudCBmb3IgZGV2aWNlIGRpc2NvdmVyeSBhbmQgZmVhdHVyZQotICAgICAgICAgIHF1ZXJ5aW5nIHByb3ZpZGVkIGJ5IEdzdERldmljZU1vbml0b3IsIEdzdERldmljZSwgYW5kIGZyaWVuZHMuIFNlZQotICAgICAgICAgIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1kZXZpY2UtcHJvYmluZy5odG1sIj4KLSAgICAgICAgICAiR1N0cmVhbWVyIERldmljZSBEaXNjb3ZlcnkgYW5kIERldmljZSBQcm9iaW5nIiBkb2N1bWVudGF0aW9uPC91bGluaz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpKCkgYW5kIHRoZSBnZXRfdXJpIHZmdW5jIG5vdyByZXR1cm4gYSBjb3B5IG9mCi0gICAgICAgICAgdGhlIFVSSSBzdHJpbmcKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSgpIGFuZCB0aGUgc2V0X3VyaSB2ZnVuYyBub3cgdGFrZSBhbiBhZGRpdGlvbmFsCi0gICAgICAgICAgR0Vycm9yIGFyZ3VtZW50IHNvIHRoZSBoYW5kbGVyIGNhbiBub3RpZnkgdGhlIGNhbGxlciB3aHkgaXQgZGlkbid0Ci0gICAgICAgICAgYWNjZXB0IGEgcGFydGljdWxhciBVUkkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkoKSBub3cgY2hlY2tzIGlmIHRoZSBwcm90b2NvbCBvZiB0aGUgVVJJIHBhc3NlZAotICAgICAgICAgIGlzIG9uZSBvZiB0aGUgcHJvdG9jb2xzIGFkdmVydGlzZWQgYnkgdGhlIHVyaSBoYW5kbGVyLCBzbyBzZXRfdXJpIHZmdW5jCi0gICAgICAgICAgaW1wbGVtZW50YXRpb25zIG5vIGxvbmdlciBuZWVkIHRvIGNoZWNrIHRoYXQgYXMgd2VsbC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgR3N0VGFnTGlzdCBpcyBub3cgYW4gb3BhcXVlIG1pbmkgb2JqZWN0IGluc3RlYWQgb2YgYmVpbmcgdHlwZWRlZmVkIHRvIGEKLSAgICAgICAgICBHc3RTdHJ1Y3R1cmUuIFdoaWxlIGl0IHdhcyBwcmV2aW91c2x5IG9rYXkgKGFuZCBpbiBzb21lIGNhc2VzIHJlcXVpcmVkIGJlY2F1c2Ugb2YKLSAgICAgICAgICBtaXNzaW5nIHRhZ2xpc3QgQVBJKSB0byBjYXN0IGEgR3N0VGFnTGlzdCB0byBhIEdzdFN0cnVjdHVyZSBvciB1c2UKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlXyogQVBJIG9uIHRhZ2xpc3RzLCB5b3UgY2FuIG5vIGxvbmdlciBkbyB0aGF0LiBEb2luZyBzbyB3aWxsCi0gICAgICAgICAgY2F1c2UgY3Jhc2hlcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbHNvLCB0YWcgbGlzdHMgYXJlIHJlZmNvdW50ZWQgbm93LCBhbmQgY2FuIHRoZXJlZm9yZSBub3QgYmUgZnJlZWx5Ci0gICAgICAgICAgbW9kaWZpZWQgYW55IGxvbmdlci4gTWFrZSBzdXJlIHRvIGNhbGwgZ3N0X3RhZ19saXN0X21ha2Vfd3JpdGFibGUgKHRhZ2xpc3QpCi0gICAgICAgICAgYmVmb3JlIGFkZGluZywgcmVtb3Zpbmcgb3IgY2hhbmdpbmcgdGFncyBpbiB0aGUgdGFnbGlzdC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBHU1RfVEFHX0lNQUdFLCBHU1RfVEFHX1BSRVZJRVdfSU1BR0UsIEdTVF9UQUdfQVRUQUNITUVOVDogbWFueSB0YWdzIHRoYXQKLSAgICAgICAgICB1c2VkIHRvIGJlIG9mIHR5cGUgR3N0QnVmZmVyIGFyZSBub3cgb2YgdHlwZSBHc3RTYW1wbGUgKHdoaWNoIGlzIGJhc2ljYWxseQotICAgICAgICAgIGEgc3RydWN0IGNvbnRhaW5pbmcgYSBidWZmZXIgYWxvbmdzaWRlIGNhcHMgYW5kIHNvbWUgb3RoZXIgaW5mbykuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEdzdENvbnRyb2xsZXIgaGFzIG5vdyBiZWVuIG1lcmdlZCBpbnRvIEdzdE9iamVjdC4gSXQgZG9lcyBub3QgZXhpc3RzIGFzIGFuCi0gICAgICAgICAgaW5kaXZpZHVhbCBvYmplY3QgYW55bW9yZS4gSW4gYWRkaXRpb24gY29yZSBjb250YWlucyBhIEdzdENvbnRyb2xTb3VyY2UgYmFzZQotICAgICAgICAgIGNsYXNzIGFuZCB0aGUgR3N0Q29udHJvbEJpbmRpbmcuIFRoZSBhY3R1YWwgY29udHJvbCBzb3VyY2VzIGFyZSBpbiB0aGUgY29udHJvbGxlcgotICAgICAgICAgIGxpYnJhcnkgYXMgYmVmb3JlLiBUaGUgMm5kIGJpZyBjaGFuZ2UgaXMgdGhhdCBjb250cm9sIHNvdXJjZXMgZ2VuZXJhdGUKLSAgICAgICAgICBhIHNlcXVlbmNlIG9mIGdkb3VibGUgdmFsdWVzIGFuZCB0aG9zZSBhcmUgbWFwcGVkIHRvIHRoZSBwcm9wZXJ0eSB0eXBlIGFuZAotICAgICAgICAgIHZhbHVlIHJhbmdlIGJ5IEdzdENvbnRyb2xCaW5kaW5ncy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgd2hvbGUgZ3N0X2NvbnRyb2xsZXJfKiBBUEkgaXMgZ29uZSBhbmQgbm93IGF2YWlsYWJsZSBpbiBzaW1wbGlmaWVkIGZvcm0KLSAgICAgICAgICB1bmRlciBnc3Rfb2JqZWN0XyouIENvbnRyb2xTb3VyY2VzIGFyZSBub3cgYXR0YWNoZWQgdmlhIEdzdENvbnRyb2xCaW5kaW5nCi0gICAgICAgICAgdG8gcHJvcGVydGllcy4gVGhlcmUgYXJlIG5vIEdWYWx1ZSBhcmd1bWVudHMgdXNlZCBhbnltb3JlIHdoZW4gcHJvZ3JhbW1pbmcKLSAgICAgICAgICBjb250cm9sIHNvdXJjZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9hcHBlbmRpeC1wcm9ncmFtcy54bWwgYi9kb2NzL21hbnVhbC9hcHBlbmRpeC1wcm9ncmFtcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZWFiNTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtcHJvZ3JhbXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQyICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLXByb2dyYW1zIj4KLSAgPHRpdGxlPlByb2dyYW1zPC90aXRsZT4KLSAgPHBhcmE+IAotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXByb2dyYW1zLWdzdC1sYXVuY2giPgotICAgIDx0aXRsZT48Y29tbWFuZD5nc3QtbGF1bmNoPC9jb21tYW5kPjwvdGl0bGU+Ci0gICAgPHBhcmE+IAotICAgICAgVGhpcyBpcyBhIHRvb2wgdGhhdCB3aWxsIGNvbnN0cnVjdCBwaXBlbGluZXMgYmFzZWQgb24gYSBjb21tYW5kLWxpbmUKLSAgICAgIHN5bnRheC4KLSAgICA8L3BhcmE+IAotICAgIDxwYXJhPiAKLSAgICAgIEEgc2ltcGxlIGNvbW1hbmRsaW5lIGxvb2tzIGxpa2U6Ci0KLSAgICA8c2NyZWVuPgotZ3N0LWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPWhlbGxvLm1wMyAhIG1hZCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rCi0gICAgPC9zY3JlZW4+Ci0KLSAgICAgIEEgbW9yZSBjb21wbGV4IHBpcGVsaW5lIGxvb2tzIGxpa2U6Ci0KLSAgICA8c2NyZWVuPgotZ3N0LWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPXJlZHBpbGwudm9iICEgZHZkZGVtdXggbmFtZT1kZW11eCBcCi0gZGVtdXguYXVkaW9fMDAgISBxdWV1ZSAhIGE1MmRlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBvc3NzaW5rIFwKLSBkZW11eC52aWRlb18wMCAhIHF1ZXVlICEgbXBlZzJkZWMgISB2aWRlb2NvbnZlcnQgISB4dmltYWdlc2luawotICAgIDwvc2NyZWVuPgotCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgcGFyc2VyIGluIHlvdSBvd24KLSAgICAgIGNvZGUuIDxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPiBwcm92aWRlcyBhIGZ1bmN0aW9uCi0gICAgICBnc3RfcGFyc2VfbGF1bmNoICgpIHRoYXQgeW91IGNhbiB1c2UgdG8gY29uc3RydWN0IGEgcGlwZWxpbmUuCi0gICAgICBUaGUgZm9sbG93aW5nIHByb2dyYW0gbGV0cyB5b3UgY3JlYXRlIGFuIE1QMyBwaXBlbGluZSB1c2luZyB0aGUKLSAgICAgIGdzdF9wYXJzZV9sYXVuY2ggKCkgZnVuY3Rpb246Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLSNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKmZpbGVzcmM7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR3N0QnVzICpidXM7Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0gIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7Ci0KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnQgKCJ1c2FnZTogJXMgJmx0O2ZpbGVuYW1lJmd0O1xuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoICgiZmlsZXNyYyBuYW1lPW15X2ZpbGVzcmMgISBtYWQgISBvc3NzaW5rIiwgJmFtcDtlcnJvcik7Ci0gIGlmICghcGlwZWxpbmUpIHsKLSAgICBnX3ByaW50ICgiUGFyc2UgZXJyb3I6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgZXhpdCAoMSk7Ci0gIH0KLSAgCi0gIGZpbGVzcmMgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJteV9maWxlc3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoZmlsZXNyYywgImxvY2F0aW9uIiwgYXJndlsxXSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3VucmVmIChmaWxlc3JjKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotCi0gIC8qIHdhaXQgdW50aWwgd2UgZWl0aGVyIGdldCBhbiBFT1Mgb3IgYW4gRVJST1IgbWVzc2FnZS4gTm90ZSB0aGF0IGluIGEgcmVhbAotICAgKiBwcm9ncmFtIHlvdSB3b3VsZCBwcm9iYWJseSBub3QgdXNlIGdzdF9idXNfcG9sbCgpLCBidXQgcmF0aGVyIHNldCB1cCBhbgotICAgKiBhc3luYyBzaWduYWwgd2F0Y2ggb24gdGhlIGJ1cyBhbmQgcnVuIGEgbWFpbiBsb29wIGFuZCBjb25uZWN0IHRvIHRoZQotICAgKiBidXMncyBzaWduYWxzIHRvIGNhdGNoIGNlcnRhaW4gbWVzc2FnZXMgb3IgYWxsIG1lc3NhZ2VzICovCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOiB7Ci0gICAgICBnX3ByaW50ICgiRU9TXG4iKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7Ci0gICAgICBHRXJyb3IgKmVyciA9IE5VTEw7IC8qIGVycm9yIHRvIHNob3cgdG8gdXNlcnMgICAgICAgICAgICAgICAgICovCi0gICAgICBnY2hhciAqZGJnID0gTlVMTDsgIC8qIGFkZGl0aW9uYWwgZGVidWcgc3RyaW5nIGZvciBkZXZlbG9wZXJzICovCi0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZhbXA7ZXJyLCAmYW1wO2RiZyk7Ci0gICAgICBpZiAoZXJyKSB7Ci0gICAgICAgIGdfcHJpbnRlcnIgKCJFUlJPUjogJXNcbiIsIGVyci0mZ3Q7bWVzc2FnZSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIH0KLSAgICAgIGlmIChkYmcpIHsKLSAgICAgICAgZ19wcmludGVyciAoIltEZWJ1ZyBkZXRhaWxzOiAlc11cbiIsIGRiZyk7Ci0gICAgICAgIGdfZnJlZSAoZGJnKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfcHJpbnRlcnIgKCJVbmV4cGVjdGVkIG1lc3NhZ2Ugb2YgdHlwZSAlZCIsIEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0gICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICA8cGFyYT4KLSAgICAgIE5vdGUgaG93IHdlIGNhbiByZXRyaWV2ZSB0aGUgZmlsZXNyYyBlbGVtZW50IGZyb20gdGhlIGNvbnN0cnVjdGVkIGJpbiB1c2luZyB0aGUKLSAgICAgIGVsZW1lbnQgbmFtZS4KLSAgICA8L3BhcmE+Ci0gICAgPHNlY3QyPgotICAgICAgPHRpdGxlPkdyYW1tYXIgUmVmZXJlbmNlPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gc3ludGF4IGlzIHByb2Nlc3NlZCBieSBhIGZsZXgvYmlzb24gcGFyc2VyLiBUaGlzIHNlY3Rpb24KLSAgICAgICAgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIGZ1bGwgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZ3JhbW1hcjsgYW55IGRldmlhdGlvbnMgZnJvbSB0aGlzCi0gICAgICAgIHNwZWNpZmljYXRpb24gaXMgY29uc2lkZXJlZCBhIGJ1Zy4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxzZWN0Mz4KLSAgICAgICAgPHRpdGxlPkVsZW1lbnRzPC90aXRsZT4KLSAgICAgICAgPHNjcmVlbj4KLSAgICAgICAgICAuLi4gbWFkIC4uLgotICAgICAgICA8L3NjcmVlbj4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQSBiYXJlIGlkZW50aWZpZXIgKGEgc3RyaW5nIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluaW5nCi0gICAgICAgICAgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBkYXNoZXMsIHVuZGVyc2NvcmVzLCBwZXJjZW50IHNpZ25zLCBvciBjb2xvbnMpCi0gICAgICAgICAgd2lsbCBjcmVhdGUgYW4gZWxlbWVudCBmcm9tIGEgZ2l2ZW4gZWxlbWVudCBmYWN0b3J5LiBJbiB0aGlzIGV4YW1wbGUsCi0gICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhlICJtYWQiIE1QMyBkZWNvZGluZyBwbHVnaW4gd2lsbCBiZSBjcmVhdGVkLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3QzPiAgICAgICAgICAKLSAgICAgIDxzZWN0Mz4KLSAgICAgICAgPHRpdGxlPkxpbmtzPC90aXRsZT4KLSAgICAgICAgPHNjcmVlbj4KLSAgICAgICAgICAuLi4gIXNpbmsgLi4uCi0gICAgICAgIDwvc2NyZWVuPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbiBleGNsYW1hdGlvbiBwb2ludCwgb3B0aW9uYWxseSBoYXZpbmcgYSBxdWFsaWZpZWQgcGFkIG5hbWUgKGFuIHRoZSBuYW1lIG9mIHRoZSBwYWQsCi0gICAgICAgICAgb3B0aW9uYWxseSBwcmVjZWRlZCBieSB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCkgb24gYm90aCBzaWRlcywgd2lsbCBsaW5rIHR3byBwYWRzLiBJZgotICAgICAgICAgIHRoZSBzb3VyY2UgcGFkIGlzIG5vdCBzcGVjaWZpZWQsIGEgc291cmNlIHBhZCBmcm9tIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgZWxlbWVudAotICAgICAgICAgIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaG9zZW4uIElmIHRoZSBzaW5rIHBhZCBpcyBub3Qgc3BlY2lmaWVkLCBhIHNpbmsgcGFkIGZyb20gdGhlIG5leHQKLSAgICAgICAgICBlbGVtZW50IHRvIGJlIGNvbnN0cnVjdGVkIHdpbGwgYmUgY2hvc2VuLiBBbiBhdHRlbXB0IHdpbGwgYmUgbWFkZSB0byBmaW5kIGNvbXBhdGlibGUKLSAgICAgICAgICBwYWRzLiBQYWQgbmFtZXMgbWF5IGJlIHByZWNlZGVkIGJ5IGFuIGVsZW1lbnQgbmFtZSwgYXMgaW4KLSAgICAgICAgICA8Y29tcHV0ZXJvdXRwdXQ+bXlfZWxlbWVudF9uYW1lLnNpbmtfcGFkPC9jb21wdXRlcm91dHB1dD4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdDM+ICAgICAgICAgIAotICAgICAgPHNlY3QzPgotICAgICAgICA8dGl0bGU+UHJvcGVydGllczwvdGl0bGU+Ci0gICAgICAgIDxzY3JlZW4+Ci0gICAgICAgICAgLi4uIGxvY2F0aW9uPSJodHRwOi8vZ3N0cmVhbWVyLm5ldCIgLi4uCi0gICAgICAgIDwvc2NyZWVuPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgbmFtZSBvZiBhIHByb3BlcnR5LCBvcHRpb25hbGx5IHF1YWxpZmllZCB3aXRoIGFuIGVsZW1lbnQgbmFtZSwgYW5kIGEgdmFsdWUsCi0gICAgICAgICAgc2VwYXJhdGVkIGJ5IGFuIGVxdWFscyBzaWduLCB3aWxsIHNldCBhIHByb3BlcnR5IG9uIGFuIGVsZW1lbnQuIElmIHRoZSBlbGVtZW50IGlzIG5vdAotICAgICAgICAgIHNwZWNpZmllZCwgdGhlIHByZXZpb3VzIGVsZW1lbnQgaXMgYXNzdW1lZC4gU3RyaW5ncyBjYW4gb3B0aW9uYWxseSBiZSBlbmNsb3NlZCBpbgotICAgICAgICAgIHF1b3RhdGlvbiBtYXJrcy4gQ2hhcmFjdGVycyBpbiBzdHJpbmdzIG1heSBiZSBlc2NhcGVkIHdpdGggdGhlIGJhY2t0aWNrCi0gICAgICAgICAgKDxsaXRlcmFsPlw8L2xpdGVyYWw+KS4gSWYgdGhlIHJpZ2h0LWhhbmQgc2lkZSBpcyBhbGwgZGlnaXRzLCBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGFuCi0gICAgICAgICAgaW50ZWdlci4gSWYgaXQgaXMgYWxsIGRpZ2l0cyBhbmQgYSBkZWNpbWFsIHBvaW50LCBpdCBpcyBhIGRvdWJsZS4gSWYgaXQgaXMgInRydWUiLAotICAgICAgICAgICJmYWxzZSIsICJUUlVFIiwgb3IgIkZBTFNFIiBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGJvb2xlYW4uIE90aGVyd2lzZSwgaXQgaXMgcGFyc2VkIGFzIGEKLSAgICAgICAgICBzdHJpbmcuIFRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eSBpcyBkZXRlcm1pbmVkIGxhdGVyIG9uIGluIHRoZSBwYXJzaW5nLCBhbmQgdGhlIHZhbHVlIGlzCi0gICAgICAgICAgY29udmVydGVkIHRvIHRoZSB0YXJnZXQgdHlwZS4gVGhpcyBjb252ZXJzaW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmssIGl0IHJlbGllcyBvbgotICAgICAgICAgIHRoZSBnX3ZhbHVlX2NvbnZlcnQgcm91dGluZXMuIE5vIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb24gYW4gaW52YWxpZAotICAgICAgICAgIGNvbnZlcnNpb24sIGR1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgdmFsdWUgY29udmVydCBBUEkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdDM+ICAgICAgICAgIAotICAgICAgPHNlY3QzPgotICAgICAgICA8dGl0bGU+QmlucywgVGhyZWFkcywgYW5kIFBpcGVsaW5lczwvdGl0bGU+Ci0gICAgICAgIDxzY3JlZW4+Ci0gICAgICAgICAgKCAuLi4gKQotICAgICAgICA8L3NjcmVlbj4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQSBwaXBlbGluZSBkZXNjcmlwdGlvbiBiZXR3ZWVuIHBhcmVudGhlc2VzIGlzIHBsYWNlZCBpbnRvIGEgYmluLiBUaGUgb3BlbiBwYXJlbiBtYXkgYmUKLSAgICAgICAgICBwcmVjZWRlZCBieSBhIHR5cGUgbmFtZSwgYXMgaW4gPGNvbXB1dGVyb3V0cHV0PmphY2tiaW4uKCAuLi4gKTwvY29tcHV0ZXJvdXRwdXQ+IHRvIG1ha2UKLSAgICAgICAgICBhIGJpbiBvZiBhIHNwZWNpZmllZCB0eXBlLiBTcXVhcmUgYnJhY2tldHMgbWFrZSBwaXBlbGluZXMsIGFuZCBjdXJseSBicmFjZXMgbWFrZQotICAgICAgICAgIHRocmVhZHMuIFRoZSBkZWZhdWx0IHRvcGxldmVsIGJpbiB0eXBlIGlzIGEgcGlwZWxpbmUsIGFsdGhvdWdoIHB1dHRpbmcgdGhlIHdob2xlCi0gICAgICAgICAgZGVzY3JpcHRpb24gd2l0aGluIHBhcmVudGhlc2VzIG9yIGJyYWNlcyBjYW4gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3QzPiAgICAgICAgICAKLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1wcm9ncmFtcy1nc3QtaW5zcGVjdCI+Ci0gICAgPHRpdGxlPjxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPjwvdGl0bGU+Ci0gICAgPHBhcmE+IAotICAgICAgVGhpcyBpcyBhIHRvb2wgdG8gcXVlcnkgYSBwbHVnaW4gb3IgYW4gZWxlbWVudCBhYm91dCBpdHMgcHJvcGVydGllcy4KLSAgICA8L3BhcmE+IAotICAgIDxwYXJhPiAKLSAgICAgIFRvIHF1ZXJ5IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZWxlbWVudCBtYWQsIHlvdSB3b3VsZCBzcGVjaWZ5OgotICAgIDwvcGFyYT4gCi0KLSAgICA8c2NyZWVuPgotZ3N0LWluc3BlY3QgbWFkCi0gICAgPC9zY3JlZW4+Ci0KLSAgICA8cGFyYT4gCi0gICAgICBCZWxvdyBpcyB0aGUgb3V0cHV0IG9mIGEgcXVlcnkgZm9yIHRoZSBvc3NzaW5rIGVsZW1lbnQ6Ci0gICAgPC9wYXJhPiAKLQotICAgIDxzY3JlZW4+Ci08IVtDREFUQVsKLUZhY3RvcnkgRGV0YWlsczoKLSAgUmFuazogICAgICAgICBzZWNvbmRhcnkgKDEyOCkKLSAgTG9uZy1uYW1lOiAgICAgICAgICAgIEF1ZGlvIFNpbmsgKE9TUykKLSAgS2xhc3M6ICAgICAgICAgICAgICAgIFNpbmsvQXVkaW8KLSAgRGVzY3JpcHRpb246ICAgICAgICAgIE91dHB1dCB0byBhIHNvdW5kIGNhcmQgdmlhIE9TUwotICBBdXRob3I6ICAgICAgICAgICAgICAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4sIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+Ci0KLVBsdWdpbiBEZXRhaWxzOgotICBOYW1lOiAgICAgICAgICAgICAgICAgb3NzYXVkaW8KLSAgRGVzY3JpcHRpb246ICAgICAgICAgIE9TUyAoT3BlbiBTb3VuZCBTeXN0ZW0pIHN1cHBvcnQgZm9yIEdTdHJlYW1lcgotICBGaWxlbmFtZTogICAgICAgICAgICAgL2hvbWUvd2ltL2dzdC9oZWFkL2dzdC1wbHVnaW5zLWdvb2Qvc3lzL29zcy8ubGlicy9saWJnc3Rvc3NhdWRpby5zbwotICBWZXJzaW9uOiAgICAgICAgICAgICAgMS4wLjAuMQotICBMaWNlbnNlOiAgICAgICAgICAgICAgTEdQTAotICBTb3VyY2UgbW9kdWxlOiAgICAgICAgZ3N0LXBsdWdpbnMtZ29vZAotICBTb3VyY2UgcmVsZWFzZSBkYXRlOiAgMjAxMi0wOS0yNSAxMjo1MiAoVVRDKQotICBCaW5hcnkgcGFja2FnZTogICAgICAgR1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgZ2l0Ci0gIE9yaWdpbiBVUkw6ICAgICAgICAgICBVbmtub3duIHBhY2thZ2Ugb3JpZ2luCi0KLUdPYmplY3QKLSArLS0tLUdJbml0aWFsbHlVbm93bmVkCi0gICAgICAgKy0tLS1Hc3RPYmplY3QKLSAgICAgICAgICAgICArLS0tLUdzdEVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICArLS0tLUdzdEJhc2VTaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RBdWRpb0Jhc2VTaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS1Hc3RBdWRpb1NpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLUdzdE9zc1NpbmsKLQotUGFkIFRlbXBsYXRlczoKLSAgU0lOSyB0ZW1wbGF0ZTogJ3NpbmsnCi0gICAgQXZhaWxhYmlsaXR5OiBBbHdheXMKLSAgICBDYXBhYmlsaXRpZXM6Ci0gICAgICBhdWRpby94LXJhdwotICAgICAgICAgICAgICAgICBmb3JtYXQ6IHsgUzE2TEUsIFUxNkxFLCBTOCwgVTggfQotICAgICAgICAgICAgICAgICBsYXlvdXQ6IGludGVybGVhdmVkCi0gICAgICAgICAgICAgICAgICAgcmF0ZTogWyAxLCAyMTQ3NDgzNjQ3IF0KLSAgICAgICAgICAgICAgIGNoYW5uZWxzOiAxCi0gICAgICBhdWRpby94LXJhdwotICAgICAgICAgICAgICAgICBmb3JtYXQ6IHsgUzE2TEUsIFUxNkxFLCBTOCwgVTggfQotICAgICAgICAgICAgICAgICBsYXlvdXQ6IGludGVybGVhdmVkCi0gICAgICAgICAgICAgICAgICAgcmF0ZTogWyAxLCAyMTQ3NDgzNjQ3IF0KLSAgICAgICAgICAgICAgIGNoYW5uZWxzOiAyCi0gICAgICAgICAgIGNoYW5uZWwtbWFzazogMHgwMDAwMDAwMDAwMDAwMDAzCi0KLQotRWxlbWVudCBGbGFnczoKLSAgbm8gZmxhZ3Mgc2V0Ci0KLUVsZW1lbnQgSW1wbGVtZW50YXRpb246Ci0gIEhhcyBjaGFuZ2Vfc3RhdGUoKSBmdW5jdGlvbjogZ3N0X2F1ZGlvX2Jhc2Vfc2lua19jaGFuZ2Vfc3RhdGUKLQotQ2xvY2tpbmcgSW50ZXJhY3Rpb246Ci0gIGVsZW1lbnQgaXMgc3VwcG9zZWQgdG8gcHJvdmlkZSBhIGNsb2NrIGJ1dCByZXR1cm5lZCBOVUxMCi0KLUVsZW1lbnQgaGFzIG5vIGluZGV4aW5nIGNhcGFiaWxpdGllcy4KLUVsZW1lbnQgaGFzIG5vIFVSSSBoYW5kbGluZyBjYXBhYmlsaXRpZXMuCi0KLVBhZHM6Ci0gIFNJTks6ICdzaW5rJwotICAgIEltcGxlbWVudGF0aW9uOgotICAgICAgSGFzIGNoYWluZnVuYygpOiBnc3RfYmFzZV9zaW5rX2NoYWluCi0gICAgICBIYXMgY3VzdG9tIGV2ZW50ZnVuYygpOiBnc3RfYmFzZV9zaW5rX2V2ZW50Ci0gICAgICBIYXMgY3VzdG9tIHF1ZXJ5ZnVuYygpOiBnc3RfYmFzZV9zaW5rX3NpbmtfcXVlcnkKLSAgICAgIEhhcyBjdXN0b20gaXRlcmludGxpbmtmdW5jKCk6IGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0Ci0gICAgUGFkIFRlbXBsYXRlOiAnc2luaycKLQotRWxlbWVudCBQcm9wZXJ0aWVzOgotICBuYW1lICAgICAgICAgICAgICAgIDogVGhlIG5hbWUgb2YgdGhlIG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLiBEZWZhdWx0OiAib3Nzc2luazAiCi0gIHBhcmVudCAgICAgICAgICAgICAgOiBUaGUgcGFyZW50IG9mIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOiByZWFkYWJsZSwgd3JpdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBvZiB0eXBlICJHc3RPYmplY3QiCi0gIHN5bmMgICAgICAgICAgICAgICAgOiBTeW5jIG9uIHRoZSBjbG9jawotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbi4gRGVmYXVsdDogdHJ1ZQotICBtYXgtbGF0ZW5lc3MgICAgICAgIDogTWF4aW11bSBudW1iZXIgb2YgbmFub3NlY29uZHMgdGhhdCBhIGJ1ZmZlciBjYW4gYmUgbGF0ZSBiZWZvcmUgaXQgaXMgZHJvcHBlZCAoLTEgdW5saW1pdGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlcjY0LiBSYW5nZTogLTEgLSA5MjIzMzcyMDM2ODU0Nzc1ODA3IERlZmF1bHQ6IC0xIAotICBxb3MgICAgICAgICAgICAgICAgIDogR2VuZXJhdGUgUXVhbGl0eS1vZi1TZXJ2aWNlIGV2ZW50cyB1cHN0cmVhbQotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbi4gRGVmYXVsdDogZmFsc2UKLSAgYXN5bmMgICAgICAgICAgICAgICA6IEdvIGFzeW5jaHJvbm91c2x5IHRvIFBBVVNFRAotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbi4gRGVmYXVsdDogdHJ1ZQotICB0cy1vZmZzZXQgICAgICAgICAgIDogVGltZXN0YW1wIG9mZnNldCBpbiBuYW5vc2Vjb25kcwotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlcjY0LiBSYW5nZTogLTkyMjMzNzIwMzY4NTQ3NzU4MDggLSA5MjIzMzcyMDM2ODU0Nzc1ODA3IERlZmF1bHQ6IDAgCi0gIGVuYWJsZS1sYXN0LXNhbXBsZSAgOiBFbmFibGUgdGhlIGxhc3Qtc2FtcGxlIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogcmVhZGFibGUsIHdyaXRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuLiBEZWZhdWx0OiBmYWxzZQotICBsYXN0LXNhbXBsZSAgICAgICAgIDogVGhlIGxhc3Qgc2FtcGxlIHJlY2VpdmVkIGluIHRoZSBzaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogcmVhZGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIEJveGVkIHBvaW50ZXIgb2YgdHlwZSAiR3N0U2FtcGxlIgotICBibG9ja3NpemUgICAgICAgICAgIDogU2l6ZSBpbiBieXRlcyB0byBwdWxsIHBlciBidWZmZXIgKDAgPSBkZWZhdWx0KQotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgVW5zaWduZWQgSW50ZWdlci4gUmFuZ2U6IDAgLSA0Mjk0OTY3Mjk1IERlZmF1bHQ6IDQwOTYgCi0gIHJlbmRlci1kZWxheSAgICAgICAgOiBBZGRpdGlvbmFsIHJlbmRlciBkZWxheSBvZiB0aGUgc2luayBpbiBuYW5vc2Vjb25kcwotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgVW5zaWduZWQgSW50ZWdlcjY0LiBSYW5nZTogMCAtIDE4NDQ2NzQ0MDczNzA5NTUxNjE1IERlZmF1bHQ6IDAgCi0gIHRocm90dGxlLXRpbWUgICAgICAgOiBUaGUgdGltZSB0byBrZWVwIGJldHdlZW4gcmVuZGVyZWQgYnVmZmVycwotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgVW5zaWduZWQgSW50ZWdlcjY0LiBSYW5nZTogMCAtIDE4NDQ2NzQ0MDczNzA5NTUxNjE1IERlZmF1bHQ6IDAgCi0gIGJ1ZmZlci10aW1lICAgICAgICAgOiBTaXplIG9mIGF1ZGlvIGJ1ZmZlciBpbiBtaWNyb3NlY29uZHMsIHRoaXMgaXMgdGhlIG1pbmltdW0gbGF0ZW5jeSB0aGF0IHRoZSBzaW5rIHJlcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOiByZWFkYWJsZSwgd3JpdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXI2NC4gUmFuZ2U6IDEgLSA5MjIzMzcyMDM2ODU0Nzc1ODA3IERlZmF1bHQ6IDIwMDAwMCAKLSAgbGF0ZW5jeS10aW1lICAgICAgICA6IFRoZSBtaW5pbXVtIGFtb3VudCBvZiBkYXRhIHRvIHdyaXRlIGluIGVhY2ggaXRlcmF0aW9uIGluIG1pY3Jvc2Vjb25kcwotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlcjY0LiBSYW5nZTogMSAtIDkyMjMzNzIwMzY4NTQ3NzU4MDcgRGVmYXVsdDogMTAwMDAgCi0gIHByb3ZpZGUtY2xvY2sgICAgICAgOiBQcm92aWRlIGEgY2xvY2sgdG8gYmUgdXNlZCBhcyB0aGUgZ2xvYmFsIHBpcGVsaW5lIGNsb2NrCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogcmVhZGFibGUsIHdyaXRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuLiBEZWZhdWx0OiB0cnVlCi0gIHNsYXZlLW1ldGhvZCAgICAgICAgOiBBbGdvcml0aG0gdG8gdXNlIHRvIG1hdGNoIHRoZSByYXRlIG9mIHRoZSBtYXN0ZXJjbG9jawotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgRW51bSAiR3N0QXVkaW9CYXNlU2lua1NsYXZlTWV0aG9kIiBEZWZhdWx0OiAxLCAic2tldyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgwKTogcmVzYW1wbGUgICAgICAgICAtIEdTVF9BVURJT19CQVNFX1NJTktfU0xBVkVfUkVTQU1QTEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKTogc2tldyAgICAgICAgICAgICAtIEdTVF9BVURJT19CQVNFX1NJTktfU0xBVkVfU0tFVwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpOiBub25lICAgICAgICAgICAgIC0gR1NUX0FVRElPX0JBU0VfU0lOS19TTEFWRV9OT05FCi0gIGNhbi1hY3RpdmF0ZS1wdWxsICAgOiBBbGxvdyBwdWxsLWJhc2VkIHNjaGVkdWxpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOiByZWFkYWJsZSwgd3JpdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4uIERlZmF1bHQ6IGZhbHNlCi0gIGFsaWdubWVudC10aHJlc2hvbGQgOiBUaW1lc3RhbXAgYWxpZ25tZW50IHRocmVzaG9sZCBpbiBuYW5vc2Vjb25kcwotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgVW5zaWduZWQgSW50ZWdlcjY0LiBSYW5nZTogMSAtIDE4NDQ2NzQ0MDczNzA5NTUxNjE0IERlZmF1bHQ6IDQwMDAwMDAwIAotICBkcmlmdC10b2xlcmFuY2UgICAgIDogVG9sZXJhbmNlIGZvciBjbG9jayBkcmlmdCBpbiBtaWNyb3NlY29uZHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOiByZWFkYWJsZSwgd3JpdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXI2NC4gUmFuZ2U6IDEgLSA5MjIzMzcyMDM2ODU0Nzc1ODA3IERlZmF1bHQ6IDQwMDAwIAotICBkaXNjb250LXdhaXQgICAgICAgIDogV2luZG93IG9mIHRpbWUgaW4gbmFub3NlY29uZHMgdG8gd2FpdCBiZWZvcmUgY3JlYXRpbmcgYSBkaXNjb250aW51aXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogcmVhZGFibGUsIHdyaXRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICBVbnNpZ25lZCBJbnRlZ2VyNjQuIFJhbmdlOiAwIC0gMTg0NDY3NDQwNzM3MDk1NTE2MTQgRGVmYXVsdDogMTAwMDAwMDAwMCAKLSAgZGV2aWNlICAgICAgICAgICAgICA6IE9TUyBkZXZpY2UgKHVzdWFsbHkgL2Rldi9kc3BOKQotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHJlYWRhYmxlLCB3cml0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLiBEZWZhdWx0OiAiL2Rldi9kc3AiCi1dXT4KLSAgICA8L3NjcmVlbj4KLQotICAgIDxwYXJhPiAKLSAgICAgIFRvIHF1ZXJ5IHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIHBsdWdpbiwgeW91IHdvdWxkIGRvOgotICAgIDwvcGFyYT4gCi0KLSAgICA8c2NyZWVuPgotZ3N0LWluc3BlY3QgZ3N0ZWxlbWVudHMKLSAgICA8L3NjcmVlbj4KLSAgPC9zZWN0MT4KLQotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtcXVvdGVzLnhtbCBiL2RvY3MvbWFudWFsL2FwcGVuZGl4LXF1b3Rlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNjU2YWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYXBwZW5kaXgtcXVvdGVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1MCArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1xdW90ZXMiPgotICA8dGl0bGU+UXVvdGVzIGZyb20gdGhlIERldmVsb3BlcnM8L3RpdGxlPgotICA8cGFyYT4KLSAgICBBcyB3ZWxsIGFzIGJlaW5nIGEgY29vbCBwaWVjZSBvZiBzb2Z0d2FyZSwKLSAgICA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4gaXMgYSBsaXZlbHkgcHJvamVjdCwgd2l0aAotICAgIGRldmVsb3BlcnMgZnJvbSBhcm91bmQgdGhlIGdsb2JlIHZlcnkgYWN0aXZlbHkgY29udHJpYnV0aW5nLgotICAgIFdlIG9mdGVuIGhhbmcgb3V0IG9uIHRoZSAjZ3N0cmVhbWVyIElSQyBjaGFubmVsIG9uCi0gICAgaXJjLmZyZWVub2RlLm5ldDogdGhlIGZvbGxvd2luZyBhcmUgYSBzZWxlY3Rpb24gb2YgYW11c2luZzxmb290bm90ZT4KLSAgICA8cGFyYT5ObyBndWFyYW50ZWUgb2Ygc2Vuc2Ugb2YgaHVtb3VyIGNvbXBhdGliaWxpdHkgaXMgZ2l2ZW4uPC9wYXJhPgotICAgIDwvZm9vdG5vdGU+IHF1b3RlcyBmcm9tIG91ciBjb252ZXJzYXRpb25zLgotICA8L3BhcmE+Ci0KLSAgPHZhcmlhYmxlbGlzdD4KLQotICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT42IE1hciAyMDA2PC90ZXJtPgotICAgICAgPGxpc3RpdGVtPgotPHBhcmE+Ci1XaGVuIEkgb3BlbmVkIG15IGV5ZXMgSSB3YXMgaW4gYSBjb3VydCByb29tLiBUaGVyZSB3ZXJlIG1hc3RlcnMgTWNJbHJveSBhbmQKLVRob21wc29uIHNpdHRpbmcgaW4gdGhlIGp1cnkgYW5kIG1hc3RlciBLZXJuaWdoYW4gdG9vLiBUaGVyZSB3ZXJlIHRoZSBHU3RyZWFtZXIKLWRldmVsb3BlcnMgc3RhbmRpbmcgaW4gdGhlIGRlZmVuZGFudCdzIHBsYWNlLCBhY2N1c2VkIG9mIHZpb2xhdGluZyBzZXZlcmFsIGxhd3MKLW9mIFVuaXggcGhpbG9zb3BoeSBhbmQgY3VzdG9tZXIgbG9jay1kb3duIHZpYSBydW5uaW5nIG9uIGEgcHJvcHJpZXRhcnkKLXBpcGVsaW5lLCBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mIHRoZSBVbml4IHN5c3RlbXMuIEkgaGVhcmQgRXJpYyBSYXltb25kCi13aGlzcGVyaW5nICJnb3QgdG8gYWRkIHRoaXMgY2FzZSB0byBteSBib29rLgotPC9wYXJhPgotPHBhcmE+PGVtcGhhc2lzPmJlaGRhZCdzIGJsb2c8L2VtcGhhc2lzPjwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+MjIgTWF5IDIwMDc8L3Rlcm0+Ci0gICAgICA8bGlzdGl0ZW0+Ci08cGFyYT48ZW1waGFzaXM+Jmx0O19fdGltJmd0OzwvZW1waGFzaXM+Ci1VcmFldXM6IGFtdXNpbmcsIGlzbid0IGl0PwotPC9wYXJhPgotPHBhcmE+PGVtcGhhc2lzPiZsdDtVcmFldXMmZ3Q7PC9lbXBoYXNpcz4KLV9fdGltOiBJIHdyb3RlIHRoYXQgOikKLTwvcGFyYT4KLTxwYXJhPjxlbXBoYXNpcz4mbHQ7X190aW0mZ3Q7PC9lbXBoYXNpcz4KLVVyYWV1czogb2YgY291cnNlIHlvdSBkaWQ7IHlvdXIgcmVmdXNhbCB0byBzdXJyZW5kZXIgdG8gdGhlIG9wcHJlc3NpdmUgcmVnaW1lCi1vZiB0aGUgdGhpcmQtcGVyc29uLXNpbmd1bGFyLXJ1bGUgaXMgc28gdW5pcXVlIGluIGl0cyBwZXJzaXN0ZW5jZSB0aGF0IGl0J3MKLWhhcmQgdG8gbWlzcyA6KQotIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC92YXJsaXN0ZW50cnk+Ci0KLQotICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT4xMiBTZXAgMjAwNTwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLTxwYXJhPjxlbXBoYXNpcz4mbHQ7d2luZ28mZ3Q7PC9lbXBoYXNpcz4KLXdlIGp1c3QgbmVlZCB0byBnZXQgcmlkIG9mIHRoYXQgbW1hcCBzdHVmZgotPC9wYXJhPgotPHBhcmE+PGVtcGhhc2lzPiZsdDt3aW5nbyZndDs8L2VtcGhhc2lzPgotaSB0aGluayBnbm9tZXZmc3NyYyBpcyBmYXN0ZXIgZm9yIGZpbGVzIGV2ZW4KLTwvcGFyYT4KLTxwYXJhPjxlbXBoYXNpcz4mbHQ7QkJCJmd0OzwvZW1waGFzaXM+Ci13aW5nbywgbm8KLTwvcGFyYT4KLTxwYXJhPjxlbXBoYXNpcz4mbHQ7QkJCJmd0OzwvZW1waGFzaXM+Ci1hbmQgbm8KLTwvcGFyYT4KLTxwYXJhPjxlbXBoYXNpcz4mbHQ7d2luZ28mZ3Q7PC9lbXBoYXNpcz4KLWdvb2QgcG9pbnRzIHJvbmFsZAotPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT4yMyBKdW4gMjAwNTwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLQotPHBhcmE+PGVtcGhhc2lzPiogd2luZ288L2VtcGhhc2lzPiBiYWNrPC9wYXJhPgotPHBhcmE+PGVtcGhhc2lzPiogdGhvbWFzdnM8L2VtcGhhc2lzPiBiYWNrPC9wYXJhPgotPHBhcmE+LS0tIFlvdSBhcmUgbm93IGtub3duIGFzIGV2ZXJ5Ym9keTwvcGFyYT4KLTxwYXJhPjxlbXBoYXNpcz4qIGV2ZXJ5Ym9keTwvZW1waGFzaXM+IGJhY2sgYmFjazwvcGFyYT4KLTxwYXJhPjxlbXBoYXNpcz4mbHQ7ZXZlcnlib2R5Jmd0OzwvZW1waGFzaXM+IG5vdyBicmVhayBpdCBkb3duPC9wYXJhPgotPHBhcmE+LS0tIFlvdSBhcmUgbm93IGtub3duIGFzIHRob21hc3ZzPC9wYXJhPgotPHBhcmE+PGVtcGhhc2lzPiogYmlsYm9lZDwvZW1waGFzaXM+IGJhY2s8L3BhcmE+Ci08cGFyYT4tLS0gYmlsYm9lZCBpcyBub3cga25vd24gYXMgam9obi1zZWJhc3RpYW48L3BhcmE+Ci08cGFyYT48ZW1waGFzaXM+KiBqb2huLXNlYmFzdGlhbjwvZW1waGFzaXM+IGJhY2g8L3BhcmE+Ci08cGFyYT4tLS0gam9obi1zZWJhc3RpYW4gaXMgbm93IGtub3duIGFzIGJpbGJvZWQ8L3BhcmE+Ci08cGFyYT4tLS0gWW91IGFyZSBub3cga25vd24gYXMgc2NyYXRjaF9teTwvcGFyYT4KLTxwYXJhPjxlbXBoYXNpcz4qIHNjcmF0Y2hfbXk8L2VtcGhhc2lzPiBiYWNrPC9wYXJhPgotPHBhcmE+LS0tIGJpbGJvZWQgaXMgbm93IGtub3duIGFzIElsbGJlPC9wYXJhPgotPHBhcmE+LS0tIFlvdSBhcmUgbm93IGtub3duIGFzIHRob21hc3ZzPC9wYXJhPgotPHBhcmE+PGVtcGhhc2lzPiogSWxsYmU8L2VtcGhhc2lzPiBiYWNrPC9wYXJhPgotPHBhcmE+LS0tIElsbGJlIGlzIG5vdyBrbm93biBhcyBiaWxib2VkPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT4yMCBBcHIgMjAwNTwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGVtcGhhc2lzPnRob21hczwvZW1waGFzaXM+OgotanJiLCBzb21laG93IGhpcyBzY3JlZW5zaG90c3JjIGdyYWJzIHdoYXRldmVyIFggaXMgc2hvd2luZyBhbmQgbWFrZXMgaXQKLWF2YWlsYWJsZSBhcyBhIHN0cmVhbSBvZiBmcmFtZXMKLQk8L3BhcmE+Ci0JPHBhcmE+Ci0JICA8ZW1waGFzaXM+anJiPC9lbXBoYXNpcz46Ci10aG9tYXM6IHNvLCBpcyB0aGUgcG9pbnQgdGhhdCB0aGUgc2NyZWVuc2hvb3RlciB0YWtlcyBhIHZpZGVvPwotYnV0IHdvbid0IHRoZSBkaWFsb2cgYmUgaW4gdGhlIHZpZGVvPyAgb2gsIG5ldmVybWluZC4gIEknbGwganVzdCBzZW5kIG1haWwuLi4KLQk8L3BhcmE+Ci0JPHBhcmE+Ci0gICAgICAgICAgPGVtcGhhc2lzPnRob21hczwvZW1waGFzaXM+OgotanJiLCB3ZWxsLCBpdCB3b3VsZCBzaG9vdCBmaXJzdCBhbmQgYXNrIHF1ZXN0aW9ucyBsYXRlcgotCTwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+MiBOb3YgMjAwNDwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGVtcGhhc2lzPnphaGVlcm08L2VtcGhhc2lzPjoKLXd0YXk6IHVuZmFpciB1IGZpeGVkIHRoZSBidWcgaSB3YXMgdXNpbmcgYXMgYSBmZWF0dXJlIQotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjE0IE9jdCAyMDA0PC90ZXJtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8ZW1waGFzaXM+KiB6YWhlZXJtPC9lbXBoYXNpcz4KLXdvbmRlcnMgaG93IGhlIGNhbiBicmVhayBnc3RyZWFtZXIgdG9kYXkgOikKLQk8L3BhcmE+Ci0JPHBhcmE+Ci0JICA8ZW1waGFzaXM+ZW5zb25pYzwvZW1waGFzaXM+OgotemFoZWVybSwgc3BpZGVyIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQKLQk8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjE0IEp1biAyMDA0PC90ZXJtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8ZW1waGFzaXM+dGV1ZjwvZW1waGFzaXM+OiBvaywgdGhpbmdzIHdvcmsgbXVjaCBiZXR0ZXIgd2hlbiBJIGRvbid0IHdyaXRlIGluY3JlZGlibHkgc3R1cGlkIGFuZCBidWdneSBjb2RlCi0JPC9wYXJhPgotCTxwYXJhPgotCSAgPGVtcGhhc2lzPnRoYXl0YW48L2VtcGhhc2lzPjogSSBmaW5kIHRoYXQgdG9vCi0JPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+MjMgTm92IDIwMDM8L3Rlcm0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxlbXBoYXNpcz5VcmFldXM8L2VtcGhhc2lzPjogYWggeWVzLCB0aGUgc2xlZXBpbmcgcGFydCwgbXkgbWluZAotICAgICAgICAgIGlzIG5vdCBtdWx0aXRhc2tpbmcgc28gSSB3YXMgc3RpbGwgdGhpbmtpbmcgYWJvdXQgZXhlcmNpc2UKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8ZW1waGFzaXM+ZG9scGh5PC9lbXBoYXNpcz46IFVyYWV1czogeW91ciBtaW5kIGlzIG11bHRpdGFza2luZwotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxlbXBoYXNpcz5kb2xwaHk8L2VtcGhhc2lzPjogVXJhZXVzOiB5b3UganVzdCBtaXNzIGxvdyBsYXRlbmN5IHBhdGNoZXMKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT4xNCBTZXAgMjAwMjwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgLS0tIDxlbXBoYXNpcz53aW5nby1wYXJ0eTwvZW1waGFzaXM+IGlzIG5vdyBrbm93biBhcyAKLSAgICAgICAgICA8ZW1waGFzaXM+d2luZ288L2VtcGhhc2lzPgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgKiA8ZW1waGFzaXM+d2luZ288L2VtcGhhc2lzPiBob2xkcyBoZWFkCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+NCBKdW4gMjAwMTwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+PGVtcGhhc2lzPnRhYXo6PC9lbXBoYXNpcz4geW91IHdpdGNoZG9jdG9ycyBhbmQgeW91ciB2b29kb28gbXBlZzIgYmxhY2sgbWFnaWMuLi4gPC9wYXJhPgotICAgICAgICA8cGFyYT48ZW1waGFzaXM+b21lZ2FfOjwvZW1waGFzaXM+IHVtLiAgSSBjb3VudCB0aHJlZSwgbm8gZm91ciBkaWZmZXJlbnQgY3VsdHMgdGhlcmUgJmx0O2cmZ3Q7IDwvcGFyYT4KLSAgICAgICAgPHBhcmE+PGVtcGhhc2lzPmFqbWl0Y2g6PC9lbXBoYXNpcz4gaGVoZSA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPjxlbXBoYXNpcz5vbWVnYV86PC9lbXBoYXNpcz4gd2l0Y2hkb2N0b3JzLCB2b29kb28sIGJsYWNrIG1hZ2ljLCA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPjxlbXBoYXNpcz5vbWVnYV86PC9lbXBoYXNpcz4gYW5kIG1wZWcgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT4xNiBGZWIgMjAwMTwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+Ci0gICAgICAgIEkgc2hpcHBlZCBhIGZldyBjb21tZXJpY2FsIHByb2R1Y3RzIHRvICZndDs0MDAwMCBwZW9wbGUgbm93IGJ1dCAKLSAgICAgICAgR1N0cmVhbWVyIGlzIHdheSBtb3JlIGV4Y2l0aW5nLi4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjE2IEZlYiAyMDAxPC90ZXJtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgKgotICAgICAgICA8ZW1waGFzaXM+dG9vbC1tYW48L2VtcGhhc2lzPgotICAgICAgICBpcyBhIGdzdHJlYW1lciBncm91cGllCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjE0IEphbiAyMDAxPC90ZXJtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgPGVtcGhhc2lzPk9tZWdhOjwvZW1waGFzaXM+Ci0gICAgICAgICAgZGlkIHlvdSBydW4gbGRjb25maWc/ICBtYXliZSBpdCB0YWxrcyB0byBpbml0PwotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+d3RheTo8L2VtcGhhc2lzPgotICAgICAgICAgIG5vdCBzdXJlLCBkb24ndCB0aGluayBzby4uLgotICAgICAgICAgIEkgZGlkIHJ1biBnc3RyZWFtZXItcmVnaXN0ZXIgdGhvdWdoIDotKQotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+T21lZ2E6PC9lbXBoYXNpcz4KLSAgICAgICAgICBhaCwgdGhhdCBkaWQgaXQgdGhlbiA7LSkKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KLSAgICAgICAgICByaWdodAotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+T21lZ2E6PC9lbXBoYXNpcz4KLSAgICAgICAgICBwcm9iYWJseSBub3QsIGJ1dCBpbiBjYXNlIEdTdHJlYW1lciBzdGFydHMgdHVybmluZyBpbnRvIGFuIE9TLCBzb21lb25lIHBsZWFzZSBsZXQgbWUga25vdz8KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+OSBKYW4gMjAwMTwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+Ci0gICAgICAgIG1lIHRhciwgeW91IHJwbT8KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KLSAgICAgICAgaGVoZSwgZm9yZ290ICZxdW90O3phbiZxdW90OwotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+T21lZ2E6PC9lbXBoYXNpcz4KLSAgICAgICAgPwotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+d3RheTo8L2VtcGhhc2lzPgotICAgICAgICBtZSB0YXImcXVvdDt6YW4mcXVvdDssIHlvdSAuLi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+NyBKYW4gMjAwMTwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLQk8cGFyYT4KLQk8ZW1waGFzaXM+T21lZ2E6PC9lbXBoYXNpcz4KLQl0aGF0IG1lYW5zIHByb2JhYmx5IGJ1aWxkaW5nIGFuIGFncmVnZ2F0aW5nLCBjYWNoZS1tYXNzYWdpbmcKLQlxdWV1ZSB0byBzaG92ZSBOIGJ1ZmZlcnMgYWNyb3NzIGFsbCBhdCBvbmNlLCBmb3JjaW5nIGNhY2hlCi0JdHJhbnNmZXIuCi0JPC9wYXJhPgotCTxwYXJhPgotCTxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+Ci0gICAgICAgIG5ldmVyIGRvbmUgdGhhdCBiZWZvcmUuLi4KLQk8L3BhcmE+Ci0JPHBhcmE+Ci0JPGVtcGhhc2lzPk9tZWdhOjwvZW1waGFzaXM+Ci0Jbm9wZSwgYnV0IGl0J3MgZWFzeSB0byBkbyBpbiBnc3RyZWFtZXIgJmx0O2cmZ3Q7Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0JPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KLQlzdXJlLCBJIG5lZWQgdG8gcmV3cml0ZSBjcCB3aXRoIGdzdHJlYW1lciB0b28sIHNvbWVkYXkgOi0pCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgIDx0ZXJtPjcgSmFuIDIwMDE8L3Rlcm0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+d3RheTo8L2VtcGhhc2lzPgotCUdTdHJlYW1lcjsgYWx3YXlzIGF0IGxlYXN0IG9uZSBkZXZlbG9wZXIgaXMgYXdha2UuLi4KLQk8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvdmFybGlzdGVudHJ5PgotICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT41LzYgSmFuIDIwMDE8L3Rlcm0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+d3RheTo8L2VtcGhhc2lzPgotCXdlIG5lZWQgdG8gY3V0IGRvd24gdGhlIHRpbWUgdG8gY3JlYXRlIGFuIG1wMyBwbGF5ZXIgZG93biB0bwotCXNlY29uZHMuLi4KLQk8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+cmljaGFyZGI6PC9lbXBoYXNpcz4KLQk6KQotCTwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz5PbWVnYTo8L2VtcGhhc2lzPgotCUknbSB3YW50aW5nIHRvIHNvbWV0aGluZyBtb3JlIGludGVyZXN0aW5nIHNvb24sIEkgZGlkIHRoZSAiZHJhdyBhbiBtcDMgCi0JcGxheWVyIGluIDE1c2VjIiBiYWNrIGluIE9jdG9iZXIgJzk5LgotCTwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+Ci0JYnkgdGhlIHRpbWUgT21lZ2EgZ2V0cyBoaXMgaGFuZHMgb24gdGhlIGVkaXRvciwgeW91J2xsIHNlZSBhCi0JY29tcGxldGUgYXVkaW8gbWl4ZXIgaW4gdGhlIGVkaXRvciA6LSkKLQk8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+cmljaGFyZGI6PC9lbXBoYXNpcz4KLQlXZWxsLCBpdCBjbGVhcmx5IGhhcyB0aGUgcG90ZW50aWFsLi4uCi0JPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgPGVtcGhhc2lzPk9tZWdhOjwvZW1waGFzaXM+Ci0JV29ya2luZyBvbiBpdC4uLiA7LSkKLQk8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvdmFybGlzdGVudHJ5PgotICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICA8dGVybT4yOCBEZWMgMjAwMDwvdGVybT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz5NUEFBOjwvZW1waGFzaXM+Ci0gICAgICAgIFdlIHdpbGwgc3VlIHlvdSBub3csIHlvdSBoYXZlIHZpb2xhdGVkIG91ciBJUCByaWdodHMhCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIDxlbXBoYXNpcz53dGF5OjwvZW1waGFzaXM+Ci0gICAgICAgIGhlaGVoZQotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICA8ZW1waGFzaXM+TVBBQTo8L2VtcGhhc2lzPgotICAgICAgICBIb3cgZGFyZSB5b3UgbGF1Z2ggYXQgdXM/IFdlIGhhdmUgbGF3eWVycyEgV2UgaGF2ZSBDb25ncmVzc21lbiEgIFdlIGhhdmUgPGVtcGhhc2lzPkxBUlM8L2VtcGhhc2lzPiEKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgPGVtcGhhc2lzPnd0YXk6PC9lbXBoYXNpcz4KLSAgICAgICAgSSdtIHNvIHNvcnJ5IHlvdXIgaG9ub3IKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgPGVtcGhhc2lzPk1QQUE6PC9lbXBoYXNpcz4KLSAgICAgICAgSHJ1bXBoLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAqCi0gICAgICAgIDxlbXBoYXNpcz53dGF5PC9lbXBoYXNpcz4KLSAgICAgICAgYm93cyBiZWZvcmUgdGh5Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgPC92YXJpYWJsZWxpc3Q+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9iYXNlLmNzcyBiL2RvY3MvbWFudWFsL2Jhc2UuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjRjMDc4Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2Jhc2UuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1wcmUucHJvZ3JhbWxpc3RpbmcgeyAKLQkgYmFja2dyb3VuZDogI0U4RThGRjsKLX0KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbCBiL2RvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgyZjNkMS4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYmlucyI+Ci0gIDx0aXRsZT5CaW5zPC90aXRsZT4KLSAgPHBhcmE+IAotICAgIEEgYmluIGlzIGEgY29udGFpbmVyIGVsZW1lbnQuIFlvdSBjYW4gYWRkIGVsZW1lbnRzIHRvIGEgYmluLiBTaW5jZSBhCi0gICAgYmluIGlzIGFuIGVsZW1lbnQgaXRzZWxmLCBhIGJpbiBjYW4gYmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYW55Ci0gICAgb3RoZXIgZWxlbWVudC4gVGhlcmVmb3JlLCB0aGUgd2hvbGUgcHJldmlvdXMgY2hhcHRlciAoPHhyZWYKLSAgICBsaW5rZW5kPSJjaGFwdGVyLWVsZW1lbnRzIi8+KSBhcHBsaWVzIHRvIGJpbnMgYXMgd2VsbC4KLSAgPC9wYXJhPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1iaW5zIj4KLSAgICA8dGl0bGU+V2hhdCBhcmUgYmluczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBCaW5zIGFsbG93IHlvdSB0byBjb21iaW5lIGEgZ3JvdXAgb2YgbGlua2VkIGVsZW1lbnRzIGludG8gb25lCi0gICAgICBsb2dpY2FsIGVsZW1lbnQuIFlvdSBkbyBub3QgZGVhbCB3aXRoIHRoZSBpbmRpdmlkdWFsIGVsZW1lbnRzCi0gICAgICBhbnltb3JlIGJ1dCB3aXRoIGp1c3Qgb25lIGVsZW1lbnQsIHRoZSBiaW4uIFdlIHdpbGwgc2VlIHRoYXQKLSAgICAgIHRoaXMgaXMgZXh0cmVtZWx5IHBvd2VyZnVsIHdoZW4geW91IGFyZSBnb2luZyB0byBjb25zdHJ1Y3QKLSAgICAgIGNvbXBsZXggcGlwZWxpbmVzIHNpbmNlIGl0IGFsbG93cyB5b3UgdG8gYnJlYWsgdXAgdGhlIHBpcGVsaW5lCi0gICAgICBpbiBzbWFsbGVyIGNodW5rcy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+IAotICAgICAgVGhlIGJpbiB3aWxsIGFsc28gbWFuYWdlIHRoZSBlbGVtZW50cyBjb250YWluZWQgaW4gaXQuIEl0IHdpbGwKLSAgICAgIHBlcmZvcm0gc3RhdGUgY2hhbmdlcyBvbiB0aGUgZWxlbWVudHMgYXMgd2VsbCBhcyBjb2xsZWN0IGFuZAotICAgICAgZm9yd2FyZCBidXMgbWVzc2FnZXMuCi0gICAgPC9wYXJhPgotCi0gICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24tYmluLWltZyI+Ci0gICAgICA8dGl0bGU+VmlzdWFsaXNhdGlvbiBvZiBhIGJpbiB3aXRoIHNvbWUgZWxlbWVudHMgaW4gaXQ8L3RpdGxlPgotICAgICAgICA8bWVkaWFvYmplY3Q+ICAKLSAgICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL2Jpbi1lbGVtZW50LiZpbWFnZTsiIGZvcm1hdD0iJklNQUdFOyIvPgotICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0gICAgPC9maWd1cmU+Ci0KLSAgICA8cGFyYT4gCi0gICAgICBUaGVyZSBpcyBvbmUgc3BlY2lhbGl6ZWQgdHlwZSBvZiBiaW4gYXZhaWxhYmxlIHRvIHRoZQotICAgICAgJkdTdHJlYW1lcjsgcHJvZ3JhbW1lcjoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQSBwaXBlbGluZTogYSBnZW5lcmljIGNvbnRhaW5lciB0aGF0IG1hbmFnZXMgdGhlIHN5bmNocm9uaXphdGlvbgotICAgICAgICAgIGFuZCBidXMgbWVzc2FnZXMgb2YgdGhlIGNvbnRhaW5lZCBlbGVtZW50cy4gVGhlIHRvcGxldmVsIGJpbiBoYXMKLSAgICAgICAgICB0byBiZSBhIHBpcGVsaW5lLCBldmVyeSBhcHBsaWNhdGlvbiB0aHVzIG5lZWRzIGF0IGxlYXN0IG9uZSBvZgotICAgICAgICAgIHRoZXNlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1iaW4tY3JlYXRlIj4KLSAgICA8dGl0bGU+Q3JlYXRpbmcgYSBiaW48L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQmlucyBhcmUgY3JlYXRlZCBpbiB0aGUgc2FtZSB3YXkgdGhhdCBvdGhlciBlbGVtZW50cyBhcmUgY3JlYXRlZCwKLSAgICAgIGkuZS4gdXNpbmcgYW4gZWxlbWVudCBmYWN0b3J5LiBUaGVyZSBhcmUgYWxzbyBjb252ZW5pZW5jZSBmdW5jdGlvbnMKLSAgICAgIGF2YWlsYWJsZSAoPGZ1bmN0aW9uPmdzdF9iaW5fbmV3ICgpPC9mdW5jdGlvbj4gYW5kIAotICAgICAgPGZ1bmN0aW9uPmdzdF9waXBlbGluZV9uZXcgKCk8L2Z1bmN0aW9uPikuCi0gICAgICBUbyBhZGQgZWxlbWVudHMgdG8gYSBiaW4gb3IgcmVtb3ZlIGVsZW1lbnRzIGZyb20gYQotICAgICAgYmluLCB5b3UgY2FuIHVzZSA8ZnVuY3Rpb24+Z3N0X2Jpbl9hZGQgKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgIDxmdW5jdGlvbj5nc3RfYmluX3JlbW92ZSAoKTwvZnVuY3Rpb24+LiBOb3RlIHRoYXQgdGhlIGJpbiB0aGF0IHlvdQotICAgICAgYWRkIGFuIGVsZW1lbnQgdG8gd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGF0IGVsZW1lbnQuIElmIHlvdQotICAgICAgZGVzdHJveSB0aGUgYmluLCB0aGUgZWxlbWVudCB3aWxsIGJlIGRlcmVmZXJlbmNlZCB3aXRoIGl0LiBJZiB5b3UKLSAgICAgIHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYSBiaW4sIGl0IHdpbGwgYmUgZGVyZWZlcmVuY2VkIGF1dG9tYXRpY2FsbHkuCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gYmluLmMgYSAtLT4KLSNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0KLWludAotbWFpbiAoaW50ICAgYXJnYywKLSAgICAgIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqYmluLCAqcGlwZWxpbmUsICpzb3VyY2UsICpzaW5rOwotCi0gIC8qIGluaXQgKi8KLSAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKLQotICAvKiBjcmVhdGUgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgibXlfcGlwZWxpbmUiKTsKLSAgYmluID0gZ3N0X2Jpbl9uZXcgKCJteV9iaW4iKTsKLSAgc291cmNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLQotICAvKiBGaXJzdCBhZGQgdGhlIGVsZW1lbnRzIHRvIHRoZSBiaW4gKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc291cmNlLCBzaW5rLCBOVUxMKTsKLSAgLyogYWRkIHRoZSBiaW4gdG8gdGhlIHBpcGVsaW5lICovCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGJpbik7Ci0KLSAgLyogbGluayB0aGUgZWxlbWVudHMgKi8KLSAgZ3N0X2VsZW1lbnRfbGluayAoc291cmNlLCBzaW5rKTsKLTwhLS0gZXhhbXBsZS1lbmQgYmluLmMgYSAtLT4KLVsuLl08IS0tIGV4YW1wbGUtYmVnaW4gYmluLmMgYiAtLT48IS0tCi0gIHJldHVybiAwOwotLS0+PCEtLSBleGFtcGxlLWVuZCBiaW4uYyBiIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIGJpbi5jIGMgLS0+Ci19Ci0gICAgPCEtLSBleGFtcGxlLWVuZCBiaW4uYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGVyZSBhcmUgdmFyaW91cyBmdW5jdGlvbnMgdG8gbG9va3VwIGVsZW1lbnRzIGluIGEgYmluLiBUaGUgbW9zdAotICAgICAgY29tbW9ubHkgdXNlZCBhcmUgPGZ1bmN0aW9uPmdzdF9iaW5fZ2V0X2J5X25hbWUgKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgIDxmdW5jdGlvbj5nc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgKCk8L2Z1bmN0aW9uPi4gWW91IGNhbiBhbHNvCi0gICAgICBpdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIHRoYXQgYSBiaW4gY29udGFpbnMgdXNpbmcgdGhlIGZ1bmN0aW9uCi0gICAgICA8ZnVuY3Rpb24+Z3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzICgpPC9mdW5jdGlvbj4uIFNlZSB0aGUgQVBJIHJlZmVyZW5jZXMKLSAgICAgIG9mIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSImVVJMQVBJO0dzdEJpbi5odG1sIj48Y2xhc3NuYW1lPkdzdEJpbjwvY2xhc3NuYW1lPjwvdWxpbms+Ci0gICAgICBmb3IgZGV0YWlscy4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJpbi1jdXN0b20iPgotICAgIDx0aXRsZT5DdXN0b20gYmluczwvdGl0bGU+Ci0gICAgPHBhcmE+IAotICAgICAgVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIgY2FuIGNyZWF0ZSBjdXN0b20gYmlucyBwYWNrZWQgd2l0aCBlbGVtZW50cwotICAgICAgdG8gcGVyZm9ybSBhIHNwZWNpZmljIHRhc2suIFRoaXMgYWxsb3dzIHlvdSwgZm9yIGV4YW1wbGUsIHRvIHdyaXRlCi0gICAgICBhbiBPZ2cvVm9yYmlzIGRlY29kZXIgd2l0aCBqdXN0IHRoZSBmb2xsb3dpbmcgbGluZXMgb2YgY29kZToKLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpwbGF5ZXI7Ci0KLSAgLyogaW5pdCAqLwotICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotCi0gIC8qIGNyZWF0ZSBwbGF5ZXIgKi8KLSAgcGxheWVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgib2dndm9yYmlzcGxheWVyIiwgInBsYXllciIpOwotCi0gIC8qIHNldCB0aGUgc291cmNlIGF1ZGlvIGZpbGUgKi8KLSAgZ19vYmplY3Rfc2V0IChwbGF5ZXIsICJsb2NhdGlvbiIsICJoZWxsb3dvcmxkLm9nZyIsIE5VTEwpOwotCi0gIC8qIHN0YXJ0IHBsYXliYWNrICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBsYXllciksIEdTVF9TVEFURV9QTEFZSU5HKTsKLVsuLl0KLX0KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgKFRoaXMgaXMgYSBzaWxseSBleGFtcGxlIG9mIGNvdXJzZSwgdGhlcmUgYWxyZWFkeSBleGlzdHMgYSBtdWNoIG1vcmUKLSAgICAgIHBvd2VyZnVsIGFuZCB2ZXJzYXRpbGUgY3VzdG9tIGJpbiBsaWtlIHRoaXM6IHRoZSBwbGF5YmluIGVsZW1lbnQuKQotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEN1c3RvbSBiaW5zIGNhbiBiZSBjcmVhdGVkIHdpdGggYSBwbHVnaW4gb3IgZnJvbSB0aGUgYXBwbGljYXRpb24uIFlvdQotICAgICAgd2lsbCBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgY3VzdG9tIGJpbiBpbiB0aGUgPHVsaW5rCi0gICAgICB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9wd2cvaHRtbC9pbmRleC5odG1sIj5QbHVnaW4KLSAgICAgIFdyaXRlcnMgR3VpZGU8L3VsaW5rPi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBFeGFtcGxlcyBvZiBzdWNoIGN1c3RvbSBiaW5zIGFyZSB0aGUgcGxheWJpbiBhbmQgdXJpZGVjb2RlYmluIGVsZW1lbnRzIGZyb208dWxpbmsKLSAgICAgIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy9odG1sL2luZGV4Lmh0bWwiPgotICAgICAgZ3N0LXBsdWdpbnMtYmFzZTwvdWxpbms+LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJpbi1zdGF0ZS1jaGFuZ2UtaGFuZGxpbmciPgotICAgIDx0aXRsZT5CaW5zIG1hbmFnZSBzdGF0ZXMgb2YgdGhlaXIgY2hpbGRyZW48L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQmlucyBtYW5hZ2UgdGhlIHN0YXRlIG9mIGFsbCBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlbS4gSWYgeW91IHNldAotICAgICAgYSBiaW4gKG9yIGEgcGlwZWxpbmUsIHdoaWNoIGlzIGEgc3BlY2lhbCB0b3AtbGV2ZWwgdHlwZSBvZiBiaW4pIHRvCi0gICAgICBhIGNlcnRhaW4gdGFyZ2V0IHN0YXRlIHVzaW5nIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9zZXRfc3RhdGUgKCk8L2Z1bmN0aW9uPiwKLSAgICAgIGl0IHdpbGwgbWFrZSBzdXJlIGFsbCBlbGVtZW50cyBjb250YWluZWQgd2l0aGluIGl0IHdpbGwgYWxzbyBiZSBzZXQKLSAgICAgIHRvIHRoaXMgc3RhdGUuIFRoaXMgbWVhbnMgaXQncyB1c3VhbGx5IG9ubHkgbmVjZXNzYXJ5IHRvIHNldCB0aGUgc3RhdGUKLSAgICAgIG9mIHRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUgdG8gc3RhcnQgdXAgdGhlIHBpcGVsaW5lIG9yIHNodXQgaXQgZG93bi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgYmluIHdpbGwgcGVyZm9ybSB0aGUgc3RhdGUgY2hhbmdlcyBvbiBhbGwgaXRzIGNoaWxkcmVuIGZyb20gdGhlCi0gICAgICBzaW5rIGVsZW1lbnQgdG8gdGhlIHNvdXJjZSBlbGVtZW50LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZG93bnN0cmVhbQotICAgICAgZWxlbWVudCBpcyByZWFkeSB0byByZWNlaXZlIGRhdGEgd2hlbiB0aGUgdXBzdHJlYW0gZWxlbWVudCBpcyBicm91Z2h0Ci0gICAgICB0byBQQVVTRUQgb3IgUExBWUlORy4gU2ltaWxhcmx5IHdoZW4gc2h1dHRpbmcgZG93biwgdGhlIHNpbmsgZWxlbWVudHMKLSAgICAgIHdpbGwgYmUgc2V0IHRvIFJFQURZIG9yIE5VTEwgZmlyc3QsIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHVwc3RyZWFtCi0gICAgICBlbGVtZW50cyB0byByZWNlaXZlIGEgRkxVU0hJTkcgZXJyb3IgYW5kIHN0b3AgdGhlIHN0cmVhbWluZyB0aHJlYWRzCi0gICAgICBiZWZvcmUgdGhlIGVsZW1lbnRzIGFyZSBzZXQgdG8gdGhlIFJFQURZIG9yIE5VTEwgc3RhdGUuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgTm90ZSwgaG93ZXZlciwgdGhhdCBpZiBlbGVtZW50cyBhcmUgYWRkZWQgdG8gYSBiaW4gb3IgcGlwZWxpbmUgdGhhdCdzCi0gICAgICBhbHJlYWR5IHJ1bm5pbmcsICwgZS5nLiBmcm9tIHdpdGhpbiBhICJwYWQtYWRkZWQiCi0gICAgICBzaWduYWwgY2FsbGJhY2ssIGl0cyBzdGF0ZSB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJlIGJyb3VnaHQgaW4gbGluZSB3aXRoCi0gICAgICB0aGUgY3VycmVudCBzdGF0ZSBvciB0YXJnZXQgc3RhdGUgb2YgdGhlIGJpbiBvciBwaXBlbGluZSBpdCB3YXMgYWRkZWQgdG8uCi0gICAgICBJbnN0ZWFkLCB5b3UgaGF2ZSB0byBuZWVkIHRvIHNldCBpdCB0byB0aGUgZGVzaXJlZCB0YXJnZXQgc3RhdGUgeW91cnNlbGYKLSAgICAgIHVzaW5nIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9zZXRfc3RhdGUgKCk8L2Z1bmN0aW9uPiBvcgotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQgKCk8L2Z1bmN0aW9uPiB3aGVuIGFkZGluZwotICAgICAgZWxlbWVudHMgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIHBpcGVsaW5lLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Jhc2ljcy1idXMueG1sIGIvZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNDBjOGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYmFzaWNzLWJ1cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYnVzIj4KLSAgPHRpdGxlPkJ1czwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIEEgYnVzIGlzIGEgc2ltcGxlIHN5c3RlbSB0aGF0IHRha2VzIGNhcmUgb2YgZm9yd2FyZGluZyBtZXNzYWdlcyBmcm9tCi0gICAgdGhlIHN0cmVhbWluZyB0aHJlYWRzIHRvIGFuIGFwcGxpY2F0aW9uIGluIGl0cyBvd24gdGhyZWFkIGNvbnRleHQuIFRoZQotICAgIGFkdmFudGFnZSBvZiBhIGJ1cyBpcyB0aGF0IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUKLSAgICB0aHJlYWQtYXdhcmUgaW4gb3JkZXIgdG8gdXNlICZHU3RyZWFtZXI7LCBldmVuIHRob3VnaCAmR1N0cmVhbWVyOwotICAgIGl0c2VsZiBpcyBoZWF2aWx5IHRocmVhZGVkLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgIEV2ZXJ5IHBpcGVsaW5lIGNvbnRhaW5zIGEgYnVzIGJ5IGRlZmF1bHQsIHNvIGFwcGxpY2F0aW9ucyBkbyBub3QgbmVlZAotICAgIHRvIGNyZWF0ZSBhIGJ1cyBvciBhbnl0aGluZy4gVGhlIG9ubHkgdGhpbmcgYXBwbGljYXRpb25zIHNob3VsZCBkbyBpcwotICAgIHNldCBhIG1lc3NhZ2UgaGFuZGxlciBvbiBhIGJ1cywgd2hpY2ggaXMgc2ltaWxhciB0byBhIHNpZ25hbCBoYW5kbGVyCi0gICAgdG8gYW4gb2JqZWN0LiBXaGVuIHRoZSBtYWlubG9vcCBpcyBydW5uaW5nLCB0aGUgYnVzIHdpbGwgcGVyaW9kaWNhbGx5Ci0gICAgYmUgY2hlY2tlZCBmb3IgbmV3IG1lc3NhZ2VzLCBhbmQgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW4gYW55Ci0gICAgbWVzc2FnZSBpcyBhdmFpbGFibGUuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tYnVzLWhvd3RvIj4KLSAgICA8dGl0bGU+SG93IHRvIHVzZSBhIGJ1czwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGVyZSBhcmUgdHdvIGRpZmZlcmVudCB3YXlzIHRvIHVzZSBhIGJ1czoKLSAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFJ1biBhIEdMaWIvR3RrKyBtYWluIGxvb3AgKG9yIGl0ZXJhdGUgdGhlIGRlZmF1bHQgR0xpYiBtYWluCi0gICAgICAgICAgICBjb250ZXh0IHlvdXJzZWxmIHJlZ3VsYXJseSkgYW5kIGF0dGFjaCBzb21lIGtpbmQgb2Ygd2F0Y2ggdG8gdGhlCi0gICAgICAgICAgICBidXMuIFRoaXMgd2F5IHRoZSBHTGliIG1haW4gbG9vcCB3aWxsIGNoZWNrIHRoZSBidXMgZm9yIG5ldwotICAgICAgICAgICAgbWVzc2FnZXMgYW5kIG5vdGlmeSB5b3Ugd2hlbmV2ZXIgdGhlcmUgYXJlIG1lc3NhZ2VzLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFR5cGljYWxseSB5b3Ugd291bGQgdXNlIDxmdW5jdGlvbj5nc3RfYnVzX2FkZF93YXRjaCAoKTwvZnVuY3Rpb24+Ci0gICAgICAgICAgICBvciA8ZnVuY3Rpb24+Z3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoICgpPC9mdW5jdGlvbj4gaW4gdGhpcyBjYXNlLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRvIHVzZSBhIGJ1cywgYXR0YWNoIGEgbWVzc2FnZSBoYW5kbGVyIHRvIHRoZSBidXMgb2YgYSBwaXBlbGluZQotICAgICAgICAgICAgdXNpbmcgPGZ1bmN0aW9uPmdzdF9idXNfYWRkX3dhdGNoICgpPC9mdW5jdGlvbj4uIFRoaXMgaGFuZGxlciB3aWxsCi0gICAgICAgICAgICBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHBpcGVsaW5lIGVtaXRzIGEgbWVzc2FnZSB0byB0aGUgYnVzLiBJbiB0aGlzCi0gICAgICAgICAgICBoYW5kbGVyLCBjaGVjayB0aGUgc2lnbmFsIHR5cGUgKHNlZSBuZXh0IHNlY3Rpb24pIGFuZCBkbyBzb21ldGhpbmcKLSAgICAgICAgICAgIGFjY29yZGluZ2x5LiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBoYW5kbGVyIHNob3VsZCBiZSBUUlVFIHRvCi0gICAgICAgICAgICBrZWVwIHRoZSBoYW5kbGVyIGF0dGFjaGVkIHRvIHRoZSBidXMsIHJldHVybiBGQUxTRSB0byByZW1vdmUgaXQuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBDaGVjayBmb3IgbWVzc2FnZXMgb24gdGhlIGJ1cyB5b3Vyc2VsZi4gVGhpcyBjYW4gYmUgZG9uZSB1c2luZwotICAgICAgICAgICAgPGZ1bmN0aW9uPmdzdF9idXNfcGVlayAoKTwvZnVuY3Rpb24+IGFuZC9vcgotICAgICAgICAgICAgPGZ1bmN0aW9uPmdzdF9idXNfcG9sbCAoKTwvZnVuY3Rpb24+LgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGJ1cy5jIGEgLS0+Ci0jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotCi1zdGF0aWMgR01haW5Mb29wICpsb29wOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLW15X2J1c19jYWxsYmFjayAoR3N0QnVzICAgICAqYnVzLAotCQkgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLQkJIGdwb2ludGVyICAgIGRhdGEpCi17Ci0gIGdfcHJpbnQgKCJHb3QgJXMgbWVzc2FnZVxuIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSk7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKLSAgICAgIEdFcnJvciAqZXJyOwotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmFtcDtlcnIsICZhbXA7ZGVidWcpOwotICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLSZndDttZXNzYWdlKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIGdfZnJlZSAoZGVidWcpOwotCi0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHVuaGFuZGxlZCBtZXNzYWdlICovCi0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIHdlIHdhbnQgdG8gYmUgbm90aWZpZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aGVyZSBpcyBhIG1lc3NhZ2UKLSAgICogb24gdGhlIGJ1cywgc28gcmV0dXJuaW5nIFRSVUUgKEZBTFNFIG1lYW5zIHdlIHdhbnQgdG8gc3RvcCB3YXRjaGluZwotICAgKiBmb3IgbWVzc2FnZXMgb24gdGhlIGJ1cyBhbmQgb3VyIGNhbGxiYWNrIHNob3VsZCBub3QgYmUgY2FsbGVkIGFnYWluKQotICAgKi8KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgICBhcmdjLAotICAgICAgZ2NoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotICBndWludCBidXNfd2F0Y2hfaWQ7Ci0KLSAgLyogaW5pdCAqLwotICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotCi0gIC8qIGNyZWF0ZSBwaXBlbGluZSwgYWRkIGhhbmRsZXIgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgibXlfcGlwZWxpbmUiKTsKLQotICAvKiBhZGRzIGEgd2F0Y2ggZm9yIG5ldyBtZXNzYWdlIG9uIG91ciBwaXBlbGluZSZhcG9zO3MgbWVzc2FnZSBidXMgdG8KLSAgICogdGhlIGRlZmF1bHQgR0xpYiBtYWluIGNvbnRleHQsIHdoaWNoIGlzIHRoZSBtYWluIGNvbnRleHQgdGhhdCBvdXIKLSAgICogR0xpYiBtYWluIGxvb3AgaXMgYXR0YWNoZWQgdG8gYmVsb3cKLSAgICovCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGJ1c193YXRjaF9pZCA9IGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG15X2J1c19jYWxsYmFjaywgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci08IS0tIGV4YW1wbGUtZW5kIGJ1cy5jIGEgLS0+Ci1bLi5dPCEtLSBleGFtcGxlLWJlZ2luIGJ1cy5jIGIgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gYnVzLmMgYyAtLT4KLSAgLyogY3JlYXRlIGEgbWFpbmxvb3AgdGhhdCBydW5zL2l0ZXJhdGVzIHRoZSBkZWZhdWx0IEdMaWIgbWFpbiBjb250ZXh0Ci0gICAqIChjb250ZXh0IE5VTEwpLCBpbiBvdGhlciB3b3JkczogbWFrZXMgdGhlIGNvbnRleHQgY2hlY2sgaWYgYW55dGhpbmcKLSAgICogaXQgd2F0Y2hlcyBmb3IgaGFzIGhhcHBlbmVkLiBXaGVuIGEgbWVzc2FnZSBoYXMgYmVlbiBwb3N0ZWQgb24gdGhlCi0gICAqIGJ1cywgdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdpbGwgYXV0b21hdGljYWxseSBjYWxsIG91cgotICAgKiBteV9idXNfY2FsbGJhY2soKSBmdW5jdGlvbiB0byBub3RpZnkgdXMgb2YgdGhhdCBtZXNzYWdlLgotICAgKiBUaGUgbWFpbiBsb29wIHdpbGwgYmUgcnVuIHVudGlsIHNvbWVvbmUgY2FsbHMgZ19tYWluX2xvb3BfcXVpdCgpCi0gICAqLwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfc291cmNlX3JlbW92ZSAoYnVzX3dhdGNoX2lkKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCi0gIHJldHVybiAwOwotfQotICAgIDwhLS0gZXhhbXBsZS1lbmQgYnVzLmMgYyAtLT4KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB0aGUgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgdGhyZWFkCi0gICAgICBjb250ZXh0IG9mIHRoZSBtYWlubG9vcC4gVGhpcyBtZWFucyB0aGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZQotICAgICAgcGlwZWxpbmUgYW5kIGFwcGxpY2F0aW9uIG92ZXIgdGhlIGJ1cyBpcwotICAgICAgPGVtcGhhc2lzPmFzeW5jaHJvbm91czwvZW1waGFzaXM+LCBhbmQgdGh1cyBub3Qgc3VpdGVkIGZvciBzb21lCi0gICAgICByZWFsLXRpbWUgcHVycG9zZXMsIHN1Y2ggYXMgY3Jvc3MtZmFkaW5nIGJldHdlZW4gYXVkaW8gdHJhY2tzLCBkb2luZwotICAgICAgKHRoZW9yZXRpY2FsbHkpIGdhcGxlc3MgcGxheWJhY2sgb3IgdmlkZW8gZWZmZWN0cy4gQWxsIHN1Y2ggdGhpbmdzCi0gICAgICBzaG91bGQgYmUgZG9uZSBpbiB0aGUgcGlwZWxpbmUgY29udGV4dCwgd2hpY2ggaXMgZWFzaWVzdCBieSB3cml0aW5nCi0gICAgICBhICZHU3RyZWFtZXI7IHBsdWctaW4uIEl0IGlzIHZlcnkgdXNlZnVsIGZvciBpdHMgcHJpbWFyeSBwdXJwb3NlLAotICAgICAgdGhvdWdoOiBwYXNzaW5nIG1lc3NhZ2VzIGZyb20gcGlwZWxpbmUgdG8gYXBwbGljYXRpb24uCi0gICAgICBUaGUgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBhbGwgdGhlIHRocmVhZGluZyB0aGF0Ci0gICAgICAmR1N0cmVhbWVyOyBkb2VzIGludGVybmFsbHkgaXMgaGlkZGVuIGZyb20gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUKLSAgICAgIGFwcGxpY2F0aW9uIGRldmVsb3BlciBkb2VzIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRocmVhZCBpc3N1ZXMgYXQKLSAgICAgIGFsbC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBOb3RlIHRoYXQgaWYgeW91J3JlIHVzaW5nIHRoZSBkZWZhdWx0IEdMaWIgbWFpbmxvb3AgaW50ZWdyYXRpb24sIHlvdQotICAgICAgY2FuLCBpbnN0ZWFkIG9mIGF0dGFjaGluZyBhIHdhdGNoLCBjb25uZWN0IHRvIHRoZSA8cXVvdGU+bWVzc2FnZTwvcXVvdGU+IAotICAgICAgc2lnbmFsIG9uIHRoZSBidXMuIFRoaXMgd2F5IHlvdSBkb24ndCBoYXZlIHRvCi0gICAgICA8ZnVuY3Rpb24+c3dpdGNoKCk8L2Z1bmN0aW9uPiAKLSAgICAgIG9uIGFsbCBwb3NzaWJsZSBtZXNzYWdlIHR5cGVzOyBqdXN0IGNvbm5lY3QgdG8gdGhlIGludGVyZXN0aW5nIHNpZ25hbHMKLSAgICAgIGluIGZvcm0gb2YgPHF1b3RlPm1lc3NhZ2U6OiZsdDt0eXBlJmd0OzwvcXVvdGU+LCB3aGVyZSAmbHQ7dHlwZSZndDsgCi0gICAgICBpcyBhIHNwZWNpZmljIG1lc3NhZ2UgdHlwZSAoc2VlIHRoZSBuZXh0IHNlY3Rpb24gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIAotICAgICAgbWVzc2FnZSB0eXBlcykuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhlIGFib3ZlIHNuaXBwZXQgY291bGQgdGhlbiBhbHNvIGJlIHdyaXR0ZW4gYXM6Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLUdzdEJ1cyAqYnVzOwotCi1bLi5dCi0KLWJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKTsKLWdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoYnVzKTsKLWdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVycm9yIiwgR19DQUxMQkFDSyAoY2JfbWVzc2FnZV9lcnJvciksIE5VTEwpOwotZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZW9zIiwgR19DQUxMQkFDSyAoY2JfbWVzc2FnZV9lb3MpLCBOVUxMKTsKLQotWy4uXQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBJZiB5b3UgYXJlbid0IHVzaW5nIEdMaWIgbWFpbmxvb3AsIHRoZSBhc3luY2hyb25vdXMgbWVzc2FnZSBzaWduYWxzIHdvbid0Ci0gICAgICBiZSBhdmFpbGFibGUgYnkgZGVmYXVsdC4gWW91IGNhbiBob3dldmVyIGluc3RhbGwgYSBjdXN0b20gc3luYyBoYW5kbGVyCi0gICAgICB0aGF0IHdha2VzIHVwIHRoZSBjdXN0b20gbWFpbmxvb3AgYW5kIHRoYXQgdXNlcwotICAgICAgPGZ1bmN0aW9uPmdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMgKCk8L2Z1bmN0aW9uPiB0byBlbWl0IHRoZSBzaWduYWxzLgotICAgICAgKHNlZSBhbHNvIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSImVVJMQVBJO0dzdEJ1cy5odG1sIj5kb2N1bWVudGF0aW9uPC91bGluaz4gZm9yIGRldGFpbHMpCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1idXMtbWVzc2FnZS10eXBlcyI+Ci0gICAgPHRpdGxlPk1lc3NhZ2UgdHlwZXM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgaGFzIGEgZmV3IHByZS1kZWZpbmVkIG1lc3NhZ2UgdHlwZXMgdGhhdCBjYW4gYmUgcGFzc2VkCi0gICAgICBvdmVyIHRoZSBidXMuIFRoZSBtZXNzYWdlcyBhcmUgZXh0ZW5zaWJsZSwgaG93ZXZlci4gUGx1Zy1pbnMgY2FuCi0gICAgICBkZWZpbmUgYWRkaXRpb25hbCBtZXNzYWdlcywgYW5kIGFwcGxpY2F0aW9ucyBjYW4gZGVjaWRlIHRvIGVpdGhlcgotICAgICAgaGF2ZSBzcGVjaWZpYyBjb2RlIGZvciB0aG9zZSBvciBpZ25vcmUgdGhlbS4gQWxsIGFwcGxpY2F0aW9ucyBhcmUKLSAgICAgIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGF0IGxlYXN0IGhhbmRsZSBlcnJvciBtZXNzYWdlcyBieSBwcm92aWRpbmcKLSAgICAgIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlci4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBbGwgbWVzc2FnZXMgaGF2ZSBhIG1lc3NhZ2Ugc291cmNlLCB0eXBlIGFuZCB0aW1lc3RhbXAuIFRoZSBtZXNzYWdlCi0gICAgICBzb3VyY2UgY2FuIGJlIHVzZWQgdG8gc2VlIHdoaWNoIGVsZW1lbnQgZW1pdHRlZCB0aGUgbWVzc2FnZS4gRm9yIHNvbWUKLSAgICAgIG1lc3NhZ2VzLCBmb3IgZXhhbXBsZSwgb25seSB0aGUgb25lcyBlbWl0dGVkIGJ5IHRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUKLSAgICAgIHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gbW9zdCBhcHBsaWNhdGlvbnMgKGUuZy4gZm9yIHN0YXRlLWNoYW5nZQotICAgICAgbm90aWZpY2F0aW9ucykuIEJlbG93IGlzIGEgbGlzdCBvZiBhbGwgbWVzc2FnZXMgYW5kIGEgc2hvcnQgZXhwbGFuYXRpb24KLSAgICAgIG9mIHdoYXQgdGhleSBkbyBhbmQgaG93IHRvIHBhcnNlIG1lc3NhZ2Utc3BlY2lmaWMgY29udGVudC4KLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRXJyb3IsIHdhcm5pbmcgYW5kIGluZm9ybWF0aW9uIG5vdGlmaWNhdGlvbnM6IHRob3NlIGFyZSB1c2VkCi0gICAgICAgICAgYnkgZWxlbWVudHMgaWYgYSBtZXNzYWdlIHNob3VsZCBiZSBzaG93biB0byB0aGUgdXNlciBhYm91dCB0aGUKLSAgICAgICAgICBzdGF0ZSBvZiB0aGUgcGlwZWxpbmUuIEVycm9yIG1lc3NhZ2VzIGFyZSBmYXRhbCBhbmQgdGVybWluYXRlCi0gICAgICAgICAgdGhlIGRhdGEtcGFzc2luZy4gVGhlIGVycm9yIHNob3VsZCBiZSByZXBhaXJlZCB0byByZXN1bWUgcGlwZWxpbmUKLSAgICAgICAgICBhY3Rpdml0eS4gV2FybmluZ3MgYXJlIG5vdCBmYXRhbCwgYnV0IGltcGx5IGEgcHJvYmxlbSBuZXZlcnRoZWxlc3MuCi0gICAgICAgICAgSW5mb3JtYXRpb24gbWVzc2FnZXMgYXJlIGZvciBub24tcHJvYmxlbSBub3RpZmljYXRpb25zLiBBbGwgdGhvc2UKLSAgICAgICAgICBtZXNzYWdlcyBjb250YWluIGEgPGNsYXNzbmFtZT5HRXJyb3I8L2NsYXNzbmFtZT4gd2l0aCB0aGUgbWFpbgotICAgICAgICAgIGVycm9yIHR5cGUgYW5kIG1lc3NhZ2UsIGFuZCBvcHRpb25hbGx5IGEgZGVidWcgc3RyaW5nLiBCb3RoCi0gICAgICAgICAgY2FuIGJlIGV4dHJhY3RlZCB1c2luZyA8ZnVuY3Rpb24+Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IKLSAgICAgICAgICAoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+X3BhcnNlX3dhcm5pbmcgKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgICAgICA8ZnVuY3Rpb24+X3BhcnNlX2luZm8gKCk8L2Z1bmN0aW9uPi4gQm90aCBlcnJvciBhbmQgZGVidWcgc3RyaW5ncwotICAgICAgICAgIHNob3VsZCBiZSBmcmVlZCBhZnRlciB1c2UuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEVuZC1vZi1zdHJlYW0gbm90aWZpY2F0aW9uOiB0aGlzIGlzIGVtaXR0ZWQgd2hlbiB0aGUgc3RyZWFtIGhhcwotICAgICAgICAgIGVuZGVkLiBUaGUgc3RhdGUgb2YgdGhlIHBpcGVsaW5lIHdpbGwgbm90IGNoYW5nZSwgYnV0IGZ1cnRoZXIKLSAgICAgICAgICBtZWRpYSBoYW5kbGluZyB3aWxsIHN0YWxsLiBBcHBsaWNhdGlvbnMgY2FuIHVzZSB0aGlzIHRvIHNraXAgdG8KLSAgICAgICAgICB0aGUgbmV4dCBzb25nIGluIHRoZWlyIHBsYXlsaXN0LiBBZnRlciBlbmQtb2Ytc3RyZWFtLCBpdCBpcyBhbHNvCi0gICAgICAgICAgcG9zc2libGUgdG8gc2VlayBiYWNrIGluIHRoZSBzdHJlYW0uIFBsYXliYWNrIHdpbGwgdGhlbiBjb250aW51ZQotICAgICAgICAgIGF1dG9tYXRpY2FsbHkuIFRoaXMgbWVzc2FnZSBoYXMgbm8gc3BlY2lmaWMgYXJndW1lbnRzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUYWdzOiBlbWl0dGVkIHdoZW4gbWV0YWRhdGEgd2FzIGZvdW5kIGluIHRoZSBzdHJlYW0uIFRoaXMgY2FuIGJlCi0gICAgICAgICAgZW1pdHRlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBwaXBlbGluZSAoZS5nLiBvbmNlIGZvciBkZXNjcmlwdGl2ZQotICAgICAgICAgIG1ldGFkYXRhIHN1Y2ggYXMgYXJ0aXN0IG5hbWUgb3Igc29uZyB0aXRsZSwgYW5kIGFub3RoZXIgb25lIGZvcgotICAgICAgICAgIHN0cmVhbS1pbmZvcm1hdGlvbiwgc3VjaCBhcyBzYW1wbGVyYXRlIGFuZCBiaXRyYXRlKS4gQXBwbGljYXRpb25zCi0gICAgICAgICAgc2hvdWxkIGNhY2hlIG1ldGFkYXRhIGludGVybmFsbHkuIDxmdW5jdGlvbj5nc3RfbWVzc2FnZV9wYXJzZV90YWcKLSAgICAgICAgICAoKTwvZnVuY3Rpb24+IHNob3VsZCBiZSB1c2VkIHRvIHBhcnNlIHRoZSB0YWdsaXN0LCB3aGljaCBzaG91bGQKLSAgICAgICAgICBiZSA8ZnVuY3Rpb24+Z3N0X3RhZ19saXN0X3VucmVmICgpPC9mdW5jdGlvbj4nZWQgd2hlbiBubyBsb25nZXIKLSAgICAgICAgICBuZWVkZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFN0YXRlLWNoYW5nZXM6IGVtaXR0ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHN0YXRlIGNoYW5nZS4KLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAoKTwvZnVuY3Rpb24+IGNhbiBiZQotICAgICAgICAgIHVzZWQgdG8gcGFyc2UgdGhlIG9sZCBhbmQgbmV3IHN0YXRlIG9mIHRoaXMgdHJhbnNpdGlvbi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQnVmZmVyaW5nOiBlbWl0dGVkIGR1cmluZyBjYWNoaW5nIG9mIG5ldHdvcmstc3RyZWFtcy4gT25lIGNhbgotICAgICAgICAgIG1hbnVhbGx5IGV4dHJhY3QgdGhlIHByb2dyZXNzIChpbiBwZXJjZW50KSBmcm9tIHRoZSBtZXNzYWdlIGJ5Ci0gICAgICAgICAgZXh0cmFjdGluZyB0aGUgPHF1b3RlPmJ1ZmZlci1wZXJjZW50PC9xdW90ZT4gcHJvcGVydHkgZnJvbSB0aGUKLSAgICAgICAgICBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgPGZ1bmN0aW9uPmdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUKLSAgICAgICAgICAgICgpPC9mdW5jdGlvbj4uIFNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVmZmVyaW5nIi8+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBFbGVtZW50IG1lc3NhZ2VzOiB0aGVzZSBhcmUgc3BlY2lhbCBtZXNzYWdlcyB0aGF0IGFyZSB1bmlxdWUgdG8KLSAgICAgICAgICBjZXJ0YWluIGVsZW1lbnRzIGFuZCB1c3VhbGx5IHJlcHJlc2VudCBhZGRpdGlvbmFsIGZlYXR1cmVzLiBUaGUKLSAgICAgICAgICBlbGVtZW50J3MgZG9jdW1lbnRhdGlvbiBzaG91bGQgbWVudGlvbiBpbiBkZXRhaWwgd2hpY2gKLSAgICAgICAgICBlbGVtZW50IG1lc3NhZ2VzIGEgcGFydGljdWxhciBlbGVtZW50IG1heSBzZW5kLiBBcyBhbiBleGFtcGxlLAotICAgICAgICAgIHRoZSAncXRkZW11eCcgUXVpY2tUaW1lIGRlbXV4ZXIgZWxlbWVudCBtYXkgc2VuZCBhICdyZWRpcmVjdCcKLSAgICAgICAgICBlbGVtZW50IG1lc3NhZ2Ugb24gY2VydGFpbiBvY2Nhc2lvbnMgaWYgdGhlIHN0cmVhbSBjb250YWlucyBhCi0gICAgICAgICAgcmVkaXJlY3QgaW5zdHJ1Y3Rpb24uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFwcGxpY2F0aW9uLXNwZWNpZmljIG1lc3NhZ2VzOiBhbnkgaW5mb3JtYXRpb24gb24gdGhvc2UgY2FuCi0gICAgICAgICAgYmUgZXh0cmFjdGVkIGJ5IGdldHRpbmcgdGhlIG1lc3NhZ2Ugc3RydWN0dXJlIChzZWUgYWJvdmUpIGFuZAotICAgICAgICAgIHJlYWRpbmcgaXRzIGZpZWxkcy4gVXN1YWxseSB0aGVzZSBtZXNzYWdlcyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQXBwbGljYXRpb24gbWVzc2FnZXMgYXJlIHByaW1hcmlseSBtZWFudCBmb3IgaW50ZXJuYWwKLSAgICAgICAgICB1c2UgaW4gYXBwbGljYXRpb25zIGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIG1hcnNoYWwKLSAgICAgICAgICBpbmZvcm1hdGlvbiBmcm9tIHNvbWUgdGhyZWFkIGludG8gdGhlIG1haW4gdGhyZWFkLiBUaGlzIGlzCi0gICAgICAgICAgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBtYWtpbmcgdXNlIG9mIGVsZW1lbnQKLSAgICAgICAgICBzaWduYWxzIChhcyB0aG9zZSBzaWduYWxzIHdpbGwgYmUgZW1pdHRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUKLSAgICAgICAgICBzdHJlYW1pbmcgdGhyZWFkKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Jhc2ljcy1kYXRhLnhtbCBiL2RvY3MvbWFudWFsL2Jhc2ljcy1kYXRhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5NzJlMC4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9iYXNpY3MtZGF0YS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItZGF0YSI+Ci0gIDx0aXRsZT5CdWZmZXJzIGFuZCBFdmVudHM8L3RpdGxlPgotICA8cGFyYT4KLSAgICBUaGUgZGF0YSBmbG93aW5nIHRocm91Z2ggYSBwaXBlbGluZSBjb25zaXN0cyBvZiBhIGNvbWJpbmF0aW9uIG9mCi0gICAgYnVmZmVycyBhbmQgZXZlbnRzLiBCdWZmZXJzIGNvbnRhaW4gdGhlIGFjdHVhbCBtZWRpYSBkYXRhLiBFdmVudHMKLSAgICBjb250YWluIGNvbnRyb2wgaW5mb3JtYXRpb24sIHN1Y2ggYXMgc2Vla2luZyBpbmZvcm1hdGlvbiBhbmQKLSAgICBlbmQtb2Ytc3RyZWFtIG5vdGlmaWVycy4gQWxsIHRoaXMgd2lsbCBmbG93IHRocm91Z2ggdGhlIHBpcGVsaW5lCi0gICAgYXV0b21hdGljYWxseSB3aGVuIGl0J3MgcnVubmluZy4gVGhpcyBjaGFwdGVyIGlzIG1vc3RseSBtZWFudCB0bwotICAgIGV4cGxhaW4gdGhlIGNvbmNlcHQgdG8geW91OyB5b3UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3IgdGhpcy4KLSAgPC9wYXJhPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1idWZmZXJzIj4KLSAgICA8dGl0bGU+QnVmZmVyczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBCdWZmZXJzIGNvbnRhaW4gdGhlIGRhdGEgdGhhdCB3aWxsIGZsb3cgdGhyb3VnaCB0aGUgcGlwZWxpbmUgeW91IGhhdmUKLSAgICAgIGNyZWF0ZWQuIEEgc291cmNlIGVsZW1lbnQgd2lsbCB0eXBpY2FsbHkgY3JlYXRlIGEgbmV3IGJ1ZmZlciBhbmQgcGFzcwotICAgICAgaXQgdGhyb3VnaCBhIHBhZCB0byB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSBjaGFpbi4gIFdoZW4gdXNpbmcgdGhlCi0gICAgICBHU3RyZWFtZXIgaW5mcmFzdHJ1Y3R1cmUgdG8gY3JlYXRlIGEgbWVkaWEgcGlwZWxpbmUgeW91IHdpbGwgbm90IGhhdmUKLSAgICAgIHRvIGRlYWwgd2l0aCBidWZmZXJzIHlvdXJzZWxmOyB0aGUgZWxlbWVudHMgd2lsbCBkbyB0aGF0IGZvciB5b3UuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPiAKLSAgICAgIEEgYnVmZmVyIGNvbnNpc3RzLCBhbW9uZ3N0IG90aGVycywgb2Y6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFBvaW50ZXJzIHRvIG1lbW9yeSBvYmplY3RzLiBNZW1vcnkgb2JqZWN0cyBlbmNhcHN1bGF0ZSBhIHJlZ2lvbgotICAgICAgICAgIGluIHRoZSBtZW1vcnkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEEgdGltZXN0YW1wIGZvciB0aGUgYnVmZmVyLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBIHJlZmNvdW50IHRoYXQgaW5kaWNhdGVzIGhvdyBtYW55IGVsZW1lbnRzIGFyZSB1c2luZyB0aGlzCi0gICAgICAgICAgYnVmZmVyLiBUaGlzIHJlZmNvdW50IHdpbGwgYmUgdXNlZCB0byBkZXN0cm95IHRoZSBidWZmZXIgd2hlbiBubwotICAgICAgICAgIGVsZW1lbnQgaGFzIGEgcmVmZXJlbmNlIHRvIGl0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBCdWZmZXIgZmxhZ3MuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgc2ltcGxlIGNhc2UgaXMgdGhhdCBhIGJ1ZmZlciBpcyBjcmVhdGVkLCBtZW1vcnkgYWxsb2NhdGVkLCBkYXRhCi0gICAgICBwdXQgaW4gaXQsIGFuZCBwYXNzZWQgdG8gdGhlIG5leHQgZWxlbWVudC4gIFRoYXQgZWxlbWVudCByZWFkcyB0aGUKLSAgICAgIGRhdGEsIGRvZXMgc29tZXRoaW5nIChsaWtlIGNyZWF0aW5nIGEgbmV3IGJ1ZmZlciBhbmQgZGVjb2RpbmcgaW50bwotICAgICAgaXQpLCBhbmQgdW5yZWZlcmVuY2VzIHRoZSBidWZmZXIuICBUaGlzIGNhdXNlcyB0aGUgZGF0YSB0byBiZSBmcmVlJ2VkCi0gICAgICBhbmQgdGhlIGJ1ZmZlciB0byBiZSBkZXN0cm95ZWQuIEEgdHlwaWNhbCB2aWRlbyBvciBhdWRpbyBkZWNvZGVyCi0gICAgICB3b3JrcyBsaWtlIHRoaXMuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhlcmUgYXJlIG1vcmUgY29tcGxleCBzY2VuYXJpb3MsIHRob3VnaC4gRWxlbWVudHMgY2FuIG1vZGlmeSBidWZmZXJzCi0gICAgICBpbi1wbGFjZSwgaS5lLiB3aXRob3V0IGFsbG9jYXRpbmcgYSBuZXcgb25lLiBFbGVtZW50cyBjYW4gYWxzbyB3cml0ZQotICAgICAgdG8gaGFyZHdhcmUgbWVtb3J5IChzdWNoIGFzIGZyb20gdmlkZW8tY2FwdHVyZSBzb3VyY2VzKSBvciBtZW1vcnkKLSAgICAgIGFsbG9jYXRlZCBmcm9tIHRoZSBYLXNlcnZlciAodXNpbmcgWFNobSkuIEJ1ZmZlcnMgY2FuIGJlIHJlYWQtb25seSwKLSAgICAgIGFuZCBzbyBvbi4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWV2ZW50cyI+Ci0gICAgPHRpdGxlPkV2ZW50czwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBFdmVudHMgYXJlIGNvbnRyb2wgcGFydGljbGVzIHRoYXQgYXJlIHNlbnQgYm90aCB1cC0gYW5kIGRvd25zdHJlYW0gaW4KLSAgICAgIGEgcGlwZWxpbmUgYWxvbmcgd2l0aCBidWZmZXJzLiBEb3duc3RyZWFtIGV2ZW50cyBub3RpZnkgZmVsbG93IGVsZW1lbnRzCi0gICAgICBvZiBzdHJlYW0gc3RhdGVzLiBQb3NzaWJsZSBldmVudHMgaW5jbHVkZSBzZWVraW5nLCBmbHVzaGVzLAotICAgICAgZW5kLW9mLXN0cmVhbSBub3RpZmljYXRpb25zIGFuZCBzbyBvbi4gVXBzdHJlYW0gZXZlbnRzIGFyZSB1c2VkIGJvdGgKLSAgICAgIGluIGFwcGxpY2F0aW9uLWVsZW1lbnQgaW50ZXJhY3Rpb24gYXMgd2VsbCBhcyBlbGVtZW50LWVsZW1lbnQgaW50ZXJhY3Rpb24KLSAgICAgIHRvIHJlcXVlc3QgY2hhbmdlcyBpbiBzdHJlYW0gc3RhdGUsIHN1Y2ggYXMgc2Vla3MuIEZvciBhcHBsaWNhdGlvbnMsCi0gICAgICBvbmx5IHVwc3RyZWFtIGV2ZW50cyBhcmUgaW1wb3J0YW50LiBEb3duc3RyZWFtIGV2ZW50cyBhcmUganVzdAotICAgICAgZXhwbGFpbmVkIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGF0YSBjb25jZXB0LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFNpbmNlIG1vc3QgYXBwbGljYXRpb25zIHNlZWsgaW4gdGltZSB1bml0cywgb3VyIGV4YW1wbGUgYmVsb3cgZG9lcyBzbwotICAgICAgdG9vOgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgdm9pZAotc2Vla190b190aW1lIChHc3RFbGVtZW50ICplbGVtZW50LAotCSAgICAgIGd1aW50NjQgICAgIHRpbWVfbnMpCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VlayAoMS4wLCBHU1RfRk9STUFUX1RJTUUsCi0JCQkgICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0JCQkgICAgICBHU1RfU0VFS19NRVRIT0RfU0VULCB0aW1lX25zLAotCQkJICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCBHX0dVSU5UNjRfQ09OU1RBTlQgKDApKTsKLSAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoZWxlbWVudCwgZXZlbnQpOwotfQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgZnVuY3Rpb24gPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3NlZWsgKCk8L2Z1bmN0aW9uPiBpcyBhIHNob3J0Y3V0Ci0gICAgICBmb3IgdGhpcy4gVGhpcyBpcyBtb3N0bHkganVzdCB0byBzaG93IGhvdyBpdCBhbGwgd29ya3MuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbCBiL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYzg2MzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU2NyArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1lbGVtZW50cyIgeHJlZmxhYmVsPSJFbGVtZW50cyI+Ci0gIDx0aXRsZT5FbGVtZW50czwvdGl0bGU+Ci0gIDxwYXJhPiAKLSAgICBUaGUgbW9zdCBpbXBvcnRhbnQgb2JqZWN0IGluICZHU3RyZWFtZXI7IGZvciB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcgotICAgIGlzIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICB1cmw9IiZVUkxBUEk7R3N0RWxlbWVudC5odG1sIj48Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT48L3VsaW5rPgotICAgIG9iamVjdC4gQW4gZWxlbWVudCBpcyB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2sgZm9yIGEgbWVkaWEgcGlwZWxpbmUuIEFsbAotICAgIHRoZSBkaWZmZXJlbnQgaGlnaC1sZXZlbCBjb21wb25lbnRzIHlvdSB3aWxsIHVzZSBhcmUgZGVyaXZlZCBmcm9tCi0gICAgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+LiBFdmVyeSBkZWNvZGVyLCBlbmNvZGVyLCBkZW11eGVyLCB2aWRlbwotICAgIG9yIGF1ZGlvIG91dHB1dCBpcyBpbiBmYWN0IGEgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+Ci0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtZGVzaWduIiB4cmVmbGFiZWw9IldoYXQgYXJlIGVsZW1lbnRzPyI+Ci0gICAgPHRpdGxlPldoYXQgYXJlIGVsZW1lbnRzPzwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBGb3IgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIsIGVsZW1lbnRzIGFyZSBiZXN0IHZpc3VhbGl6ZWQgYXMgYmxhY2sKLSAgICAgIGJveGVzLiBPbiB0aGUgb25lIGVuZCwgeW91IG1pZ2h0IHB1dCBzb21ldGhpbmcgaW4sIHRoZSBlbGVtZW50IGRvZXMKLSAgICAgIHNvbWV0aGluZyB3aXRoIGl0IGFuZCBzb21ldGhpbmcgZWxzZSBjb21lcyBvdXQgYXQgdGhlIG90aGVyIHNpZGUuIEZvcgotICAgICAgYSBkZWNvZGVyIGVsZW1lbnQsIGZvciBleGFtcGxlLCB5b3UnZCBwdXQgaW4gZW5jb2RlZCBkYXRhLCBhbmQgdGhlCi0gICAgICBlbGVtZW50IHdvdWxkIG91dHB1dCBkZWNvZGVkIGRhdGEuIEluIHRoZSBuZXh0IGNoYXB0ZXIgKHNlZSA8eHJlZgotICAgICAgbGlua2VuZD0iY2hhcHRlci1wYWRzIi8+KSwgeW91IHdpbGwgbGVhcm4gbW9yZSBhYm91dCBkYXRhIGlucHV0IGFuZAotICAgICAgb3V0cHV0IGluIGVsZW1lbnRzLCBhbmQgaG93IHlvdSBjYW4gc2V0IHRoYXQgdXAgaW4geW91ciBhcHBsaWNhdGlvbi4KLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZWxlbWVudHMtc3JjIj4KLSAgICAgIDx0aXRsZT5Tb3VyY2UgZWxlbWVudHM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFNvdXJjZSBlbGVtZW50cyBnZW5lcmF0ZSBkYXRhIGZvciB1c2UgYnkgYSBwaXBlbGluZSwgZm9yIGV4YW1wbGUKLSAgICAgICAgcmVhZGluZyBmcm9tIGRpc2sgb3IgZnJvbSBhIHNvdW5kIGNhcmQuIDx4cmVmCi0gICAgICAgIGxpbmtlbmQ9InNlY3Rpb24tZWxlbWVudC1zcmNpbWciLz4gc2hvd3MgaG93IHdlIHdpbGwgdmlzdWFsaXNlCi0gICAgICAgIGEgc291cmNlIGVsZW1lbnQuIFdlIGFsd2F5cyBkcmF3IGEgc291cmNlIHBhZCB0byB0aGUgcmlnaHQgb2YKLSAgICAgICAgdGhlIGVsZW1lbnQuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi1lbGVtZW50LXNyY2ltZyI+Ci0gICAgICAgIDx0aXRsZT5WaXN1YWxpc2F0aW9uIG9mIGEgc291cmNlIGVsZW1lbnQ8L3RpdGxlPgotICAgICAgICAgIDxtZWRpYW9iamVjdD4gIAotICAgICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL3NyYy1lbGVtZW50LiZpbWFnZTsiCi0gICAgICAgICAgICAgIGZvcm1hdD0iJklNQUdFOyIvPgotICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgPC9maWd1cmU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU291cmNlIGVsZW1lbnRzIGRvIG5vdCBhY2NlcHQgZGF0YSwgdGhleSBvbmx5IGdlbmVyYXRlIGRhdGEuIFlvdSBjYW4KLSAgICAgICAgc2VlIHRoaXMgaW4gdGhlIGZpZ3VyZSBiZWNhdXNlIGl0IG9ubHkgaGFzIGEgc291cmNlIHBhZCAob24gdGhlCi0gICAgICAgIHJpZ2h0KS4gQSBzb3VyY2UgcGFkIGNhbiBvbmx5IGdlbmVyYXRlIGRhdGEuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1lbGVtZW50cy1maWx0ZXIiPgotICAgICAgPHRpdGxlPkZpbHRlcnMsIGNvbnZlcnRvcnMsIGRlbXV4ZXJzLCBtdXhlcnMgYW5kIGNvZGVjczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgRmlsdGVycyBhbmQgZmlsdGVyLWxpa2UgZWxlbWVudHMgaGF2ZSBib3RoIGlucHV0IGFuZCBvdXRwdXRzIHBhZHMuCi0gICAgICAgIFRoZXkgb3BlcmF0ZSBvbiBkYXRhIHRoYXQgdGhleSByZWNlaXZlIG9uIHRoZWlyIGlucHV0IChzaW5rKSBwYWRzLAotICAgICAgICBhbmQgd2lsbCBwcm92aWRlIGRhdGEgb24gdGhlaXIgb3V0cHV0IChzb3VyY2UpIHBhZHMuIEV4YW1wbGVzIG9mCi0gICAgICAgIHN1Y2ggZWxlbWVudHMgYXJlIGEgdm9sdW1lIGVsZW1lbnQgKGZpbHRlciksIGEgdmlkZW8gc2NhbGVyCi0gICAgICAgIChjb252ZXJ0b3IpLCBhbiBPZ2cgZGVtdXhlciBvciBhIFZvcmJpcyBkZWNvZGVyLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEZpbHRlci1saWtlIGVsZW1lbnRzIGNhbiBoYXZlIGFueSBudW1iZXIgb2Ygc291cmNlIG9yIHNpbmsgcGFkcy4gQQotICAgICAgICB2aWRlbyBkZW11eGVyLCBmb3IgZXhhbXBsZSwgd291bGQgaGF2ZSBvbmUgc2luayBwYWQgYW5kIHNldmVyYWwKLSAgICAgICAgKDEtTikgc291cmNlIHBhZHMsIG9uZSBmb3IgZWFjaCBlbGVtZW50YXJ5IHN0cmVhbSBjb250YWluZWQgaW4gdGhlCi0gICAgICAgIGNvbnRhaW5lciBmb3JtYXQuIERlY29kZXJzLCBvbiB0aGUgb3RoZXIgaGFuZCwgd2lsbCBvbmx5IGhhdmUgb25lCi0gICAgICAgIHNvdXJjZSBhbmQgc2luayBwYWRzLgotICAgICAgPC9wYXJhPgotICAgICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24tZWxlbWVudC1maWx0ZXJpbWciPgotICAgICAgICA8dGl0bGU+VmlzdWFsaXNhdGlvbiBvZiBhIGZpbHRlciBlbGVtZW50PC90aXRsZT4KLSAgICAgICAgICA8bWVkaWFvYmplY3Q+ICAKLSAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9maWx0ZXItZWxlbWVudC4maW1hZ2U7IgotICAgICAgICAgICAgICBmb3JtYXQ9IiZJTUFHRTsiLz4KLSAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgPC9tZWRpYW9iamVjdD4KLSAgICAgIDwvZmlndXJlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZWxlbWVudC1maWx0ZXJpbWciLz4gc2hvd3MgaG93IHdlIHdpbGwKLSAgICAgICAgdmlzdWFsaXNlIGEgZmlsdGVyLWxpa2UgZWxlbWVudC4gVGhpcyBzcGVjaWZpYyBlbGVtZW50IGhhcyBvbmUgc291cmNlCi0gICAgICAgIGFuZCBvbmUgc2luayBlbGVtZW50LiBTaW5rIHBhZHMsIHJlY2VpdmluZyBpbnB1dCBkYXRhLCBhcmUgZGVwaWN0ZWQKLSAgICAgICAgYXQgdGhlIGxlZnQgb2YgdGhlIGVsZW1lbnQ7IHNvdXJjZSBwYWRzIGFyZSBzdGlsbCBvbiB0aGUgcmlnaHQuCi0gICAgICA8L3BhcmE+IAotICAgICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24tZWxlbWVudC1tdWx0aWZpbHRlcmltZyI+Ci0gICAgICAgIDx0aXRsZT5WaXN1YWxpc2F0aW9uIG9mIGEgZmlsdGVyIGVsZW1lbnQgd2l0aAotCSAgbW9yZSB0aGFuIG9uZSBvdXRwdXQgcGFkPC90aXRsZT4KLSAgICAgICAgPG1lZGlhb2JqZWN0PiAgCi0gICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9maWx0ZXItZWxlbWVudC1tdWx0aS4maW1hZ2U7IiAKLSAgICAgICAgICAgIGZvcm1hdD0iJklNQUdFOyIgLz4KLSAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgPC9maWd1cmU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1lbGVtZW50LW11bHRpZmlsdGVyaW1nIi8+IHNob3dzIGFub3RoZXIKLSAgICAgICAgZmlsdGVyLWxpa2UgZWxlbWVudCwgdGhpcyBvbmUgaGF2aW5nIG1vcmUgdGhhbiBvbmUgb3V0cHV0IChzb3VyY2UpCi0gICAgICAgIHBhZC4gQW4gZXhhbXBsZSBvZiBvbmUgc3VjaCBlbGVtZW50IGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYW4gT2dnCi0gICAgICAgIGRlbXV4ZXIgZm9yIGFuIE9nZyBzdHJlYW0gY29udGFpbmluZyBib3RoIGF1ZGlvIGFuZCB2aWRlby4gT25lCi0gICAgICAgIHNvdXJjZSBwYWQgd2lsbCBjb250YWluIHRoZSBlbGVtZW50YXJ5IHZpZGVvIHN0cmVhbSwgYW5vdGhlciB3aWxsCi0gICAgICAgIGNvbnRhaW4gdGhlIGVsZW1lbnRhcnkgYXVkaW8gc3RyZWFtLiBEZW11eGVycyB3aWxsIGdlbmVyYWxseSBmaXJlCi0gICAgICAgIHNpZ25hbHMgd2hlbiBhIG5ldyBwYWQgaXMgY3JlYXRlZC4gVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIgY2FuCi0gICAgICAgIHRoZW4gaGFuZGxlIHRoZSBuZXcgZWxlbWVudGFyeSBzdHJlYW0gaW4gdGhlIHNpZ25hbCBoYW5kbGVyLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0gIAotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1lbGVtZW50cy1zaW5rIj4KLSAgICAgIDx0aXRsZT5TaW5rIGVsZW1lbnRzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBTaW5rIGVsZW1lbnRzIGFyZSBlbmQgcG9pbnRzIGluIGEgbWVkaWEgcGlwZWxpbmUuIFRoZXkgYWNjZXB0IAotICAgICAgICBkYXRhIGJ1dCBkbyBub3QgcHJvZHVjZSBhbnl0aGluZy4gRGlzayB3cml0aW5nLCBzb3VuZGNhcmQgcGxheWJhY2ssIAotICAgICAgICBhbmQgdmlkZW8gb3V0cHV0IHdvdWxkIGFsbCBiZSBpbXBsZW1lbnRlZCBieSBzaW5rIGVsZW1lbnRzLgotICAgICAgICA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWVsZW1lbnQtc2lua2ltZyIvPiBzaG93cyBhIHNpbmsgZWxlbWVudC4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLWVsZW1lbnQtc2lua2ltZyI+Ci0gICAgICAgIDx0aXRsZT5WaXN1YWxpc2F0aW9uIG9mIGEgc2luayBlbGVtZW50PC90aXRsZT4KLSAgICAgICAgPG1lZGlhb2JqZWN0PiAgCi0gICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9zaW5rLWVsZW1lbnQuJmltYWdlOyIKLSAgICAgICAgICAgIGZvcm1hdD0iJklNQUdFOyIgLz4KLSAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgPC9maWd1cmU+Ci0gICAgPC9zZWN0Mj4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtY3JlYXRlIj4KLSAgICA8dGl0bGU+Q3JlYXRpbmcgYSA8Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT48L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVGhlIHNpbXBsZXN0IHdheSB0byBjcmVhdGUgYW4gZWxlbWVudCBpcyB0byB1c2UgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9IiZVUkxBUEk7R3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiPjxmdW5jdGlvbj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UKLSAgICAgICgpPC9mdW5jdGlvbj48L3VsaW5rPi4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGZhY3RvcnkgbmFtZSBhbmQgYW4KLSAgICAgIGVsZW1lbnQgbmFtZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgZWxlbWVudC4gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKLSAgICAgIGlzIHNvbWV0aGluZyB5b3UgY2FuIHVzZSBsYXRlciBvbiB0byBsb29rIHVwIHRoZSBlbGVtZW50IGluIGEgYmluLAotICAgICAgZm9yIGV4YW1wbGUuIFRoZSBuYW1lIHdpbGwgYWxzbyBiZSB1c2VkIGluIGRlYnVnIG91dHB1dC4gWW91IGNhbgotICAgICAgcGFzcyA8c3ltYm9sPk5VTEw8L3N5bWJvbD4gYXMgdGhlIG5hbWUgYXJndW1lbnQgdG8gZ2V0IGEgdW5pcXVlLAotICAgICAgZGVmYXVsdCBuYW1lLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFdoZW4geW91IGRvbid0IG5lZWQgdGhlIGVsZW1lbnQgYW55bW9yZSwgeW91IG5lZWQgdG8gdW5yZWYgaXQgdXNpbmcKLSAgICAgIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSImVVJMQVBJO0dzdE9iamVjdC5odG1sI2dzdC1vYmplY3QtdW5yZWYiPjxmdW5jdGlvbj5nc3Rfb2JqZWN0X3VucmVmIAotICAgICAgKCk8L2Z1bmN0aW9uPjwvdWxpbms+LiBUaGlzIGRlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUKLSAgICAgIGVsZW1lbnQgYnkgMS4gQW4gZWxlbWVudCBoYXMgYSByZWZjb3VudCBvZiAxIHdoZW4gaXQgZ2V0cyBjcmVhdGVkLgotICAgICAgQW4gZWxlbWVudCBnZXRzIGRlc3Ryb3llZCBjb21wbGV0ZWx5IHdoZW4gdGhlIHJlZmNvdW50IGlzIGRlY3JlYXNlZAotICAgICAgdG8gMC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgJkVYQUZPT1Q7IHNob3dzIGhvdyB0byBjcmVhdGUgYW4gZWxlbWVudCBuYW1lZAotICAgICAgPGVtcGhhc2lzPnNvdXJjZTwvZW1waGFzaXM+IGZyb20gdGhlIGVsZW1lbnQgZmFjdG9yeSBuYW1lZAotICAgICAgPGVtcGhhc2lzPmZha2VzcmM8L2VtcGhhc2lzPi4gIEl0IGNoZWNrcyBpZiB0aGUgY3JlYXRpb24gc3VjY2VlZGVkLgotICAgICAgQWZ0ZXIgY2hlY2tpbmcsIGl0IHVucmVmcyB0aGUgZWxlbWVudC4KLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBlbGVtZW50bWFrZS5jIC0tPjwhW0NEQVRBWwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBlbGVtZW50ICovCi0gIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNvdXJjZSIpOwotICBpZiAoIWVsZW1lbnQpIHsKLSAgICBnX3ByaW50ICgiRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50IG9mIHR5cGUgJ2Zha2VzcmMnXG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChlbGVtZW50KSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0gICAgXV0+PCEtLSBleGFtcGxlLWVuZCBlbGVtZW50bWFrZS5jIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+IAotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZTwvZnVuY3Rpb24+IGlzIGFjdHVhbGx5IGEgc2hvcnRoYW5kCi0gICAgICBmb3IgYSBjb21iaW5hdGlvbiBvZiB0d28gZnVuY3Rpb25zLiBBIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSImVVJMQVBJO0dzdEVsZW1lbnQuaHRtbCI+PGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+PC91bGluaz4KLSAgICAgIG9iamVjdCBpcyBjcmVhdGVkIGZyb20gYSBmYWN0b3J5LiBUbyBjcmVhdGUgdGhlIGVsZW1lbnQsIHlvdSBoYXZlIHRvCi0gICAgICBnZXQgYWNjZXNzIHRvIGEgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9IiZVUkxBUEk7R3N0RWxlbWVudEZhY3RvcnkuaHRtbCI+PGNsYXNzbmFtZT5Hc3RFbGVtZW50RmFjdG9yeTwvY2xhc3NuYW1lPjwvdWxpbms+Ci0gICAgICBvYmplY3QgdXNpbmcgYSB1bmlxdWUgZmFjdG9yeSBuYW1lLiBUaGlzIGlzIGRvbmUgd2l0aCA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktZmluZCI+PGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZAotICAgICAgKCk8L2Z1bmN0aW9uPjwvdWxpbms+LgotICAgIDwvcGFyYT4gCi0gICAgPHBhcmE+IAotICAgICAgVGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50IGlzIHVzZWQgdG8gZ2V0IGEgZmFjdG9yeSB0aGF0IGNhbiBiZSB1c2VkIAotICAgICAgdG8gY3JlYXRlIHRoZSA8ZW1waGFzaXM+ZmFrZXNyYzwvZW1waGFzaXM+IGVsZW1lbnQsIGEgZmFrZSBkYXRhIHNvdXJjZS4KLSAgICAgIFRoZSBmdW5jdGlvbiA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktY3JlYXRlIj48ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUKLSAgICAgICgpPC9mdW5jdGlvbj48L3VsaW5rPiB3aWxsIHVzZSB0aGUgZWxlbWVudCBmYWN0b3J5IHRvIGNyZWF0ZSBhbgotICAgICAgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICAgIDwvcGFyYT4gCi0gICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBlbGVtZW50Y3JlYXRlLmMgLS0+PCFbQ0RBVEFbCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1pbnQKLW1haW4gKGludCAgIGFyZ2MsCi0gICAgICBjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OwotICBHc3RFbGVtZW50ICogZWxlbWVudDsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBjcmVhdGUgZWxlbWVudCwgbWV0aG9kICMyICovCi0gIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCJmYWtlc3JjIik7Ci0gIGlmICghZmFjdG9yeSkgewotICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gZmluZCBmYWN0b3J5IG9mIHR5cGUgJ2Zha2VzcmMnXG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCAic291cmNlIik7Ci0gIGlmICghZWxlbWVudCkgewotICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQsIGV2ZW4gdGhvdWdoIGl0cyBmYWN0b3J5IGV4aXN0cyFcbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKLQotICByZXR1cm4gMDsKLX0KLSAgICBdXT48IS0tIGV4YW1wbGUtZW5kIGVsZW1lbnRjcmVhdGUuYyAtLT48L3Byb2dyYW1saXN0aW5nPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1lbGVtZW50cy1wcm9wZXJ0aWVzIj4KLSAgICA8dGl0bGU+VXNpbmcgYW4gZWxlbWVudCBhcyBhIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPjwvdGl0bGU+Ci0gICAgPHBhcmE+IAotICAgICAgQSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50Lmh0bWwiPjxjbGFzc25hbWU+R3N0RWxlbWVudDwvY2xhc3NuYW1lPjwvdWxpbms+Ci0gICAgICBjYW4gaGF2ZSBzZXZlcmFsIHByb3BlcnRpZXMgd2hpY2ggYXJlIGltcGxlbWVudGVkIHVzaW5nIHN0YW5kYXJkCi0gICAgICA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4gcHJvcGVydGllcy4gVGhlIHVzdWFsCi0gICAgICA8Y2xhc3NuYW1lPkdPYmplY3Q8L2NsYXNzbmFtZT4gbWV0aG9kcyB0byBxdWVyeSwgc2V0IGFuZCBnZXQKLSAgICAgIHByb3BlcnR5IHZhbHVlcyBhbmQgPGNsYXNzbmFtZT5HUGFyYW1TcGVjczwvY2xhc3NuYW1lPiBhcmUKLSAgICAgIHRoZXJlZm9yZSBzdXBwb3J0ZWQuCi0gICAgPC9wYXJhPiAKLSAgICA8cGFyYT4gCi0gICAgICBFdmVyeSA8Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT4gaW5oZXJpdHMgYXQgbGVhc3Qgb25lCi0gICAgICBwcm9wZXJ0eSBmcm9tIGl0cyBwYXJlbnQgPGNsYXNzbmFtZT5Hc3RPYmplY3Q8L2NsYXNzbmFtZT46IHRoZQotICAgICAgIm5hbWUiIHByb3BlcnR5LiBUaGlzIGlzIHRoZSBuYW1lIHlvdSBwcm92aWRlIHRvIHRoZSBmdW5jdGlvbnMKLSAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCk8L2Z1bmN0aW9uPiBvcgotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlICgpPC9mdW5jdGlvbj4uIFlvdSBjYW4gZ2V0Ci0gICAgICBhbmQgc2V0IHRoaXMgcHJvcGVydHkgdXNpbmcgdGhlIGZ1bmN0aW9ucyAKLSAgICAgIDxmdW5jdGlvbj5nc3Rfb2JqZWN0X3NldF9uYW1lPC9mdW5jdGlvbj4gYW5kCi0gICAgICA8ZnVuY3Rpb24+Z3N0X29iamVjdF9nZXRfbmFtZTwvZnVuY3Rpb24+IG9yIHVzZSB0aGUKLSAgICAgIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPiBwcm9wZXJ0eSBtZWNoYW5pc20gYXMgc2hvd24gYmVsb3cuCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZWxlbWVudGdldC5jIC0tPjwhW0NEQVRBWwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBnY2hhciAqbmFtZTsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBjcmVhdGUgZWxlbWVudCAqLwotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKLQotICAvKiBnZXQgbmFtZSAqLwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChlbGVtZW50KSwgIm5hbWUiLCAmbmFtZSwgTlVMTCk7Ci0gIGdfcHJpbnQgKCJUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCBpcyAnJXMnLlxuIiwgbmFtZSk7Ci0gIGdfZnJlZSAobmFtZSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoZWxlbWVudCkpOwotCi0gIHJldHVybiAwOwotfQotICAgIF1dPjwhLS0gZXhhbXBsZS1lbmQgZWxlbWVudGdldC5jIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBNb3N0IHBsdWdpbnMgcHJvdmlkZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uCi0gICAgICBhYm91dCB0aGVpciBjb25maWd1cmF0aW9uIG9yIHRvIGNvbmZpZ3VyZSB0aGUgZWxlbWVudC4KLSAgICAgIDxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPiBpcyBhIHVzZWZ1bCB0b29sIHRvIHF1ZXJ5IHRoZSBwcm9wZXJ0aWVzCi0gICAgICBvZiBhIHBhcnRpY3VsYXIgZWxlbWVudCwgaXQgd2lsbCBhbHNvIHVzZSBwcm9wZXJ0eSBpbnRyb3NwZWN0aW9uIHRvIGdpdmUKLSAgICAgIGEgc2hvcnQgZXhwbGFuYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uIG9mIHRoZSBwcm9wZXJ0eSBhbmQgYWJvdXQgdGhlCi0gICAgICBwYXJhbWV0ZXIgdHlwZXMgYW5kIHJhbmdlcyBpdCBzdXBwb3J0cy4gU2VlCi0gICAgICA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWFwcGxpY2F0aW9ucy1pbnNwZWN0Ii8+Ci0gICAgICBpbiB0aGUgYXBwZW5kaXggZm9yIGRldGFpbHMgYWJvdXQgPGNvbW1hbmQ+Z3N0LWluc3BlY3Q8L2NvbW1hbmQ+LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPgotICAgICAgcHJvcGVydGllcyB3ZSByZWNvbW1lbmQgeW91IHJlYWQgdGhlIDx1bGluawotICAgICAgdXJsPSJodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3N0YWJsZS9ybjAxLmh0bWwiCi0gICAgICB0eXBlPSJodHRwIj5HT2JqZWN0IG1hbnVhbDwvdWxpbms+IGFuZCBhbiBpbnRyb2R1Y3Rpb24gdG8gPHVsaW5rCi0gICAgICB1cmw9Imh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3Qvc3RhYmxlL3B0MDEuaHRtbCIgdHlwZT0iaHR0cCI+Ci0JVGhlIEdsaWIgT2JqZWN0IHN5c3RlbTwvdWxpbms+LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEEgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50Lmh0bWwiPgotICAgICAgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+PC91bGluaz4gYWxzbyBwcm92aWRlcyB2YXJpb3VzIAotICAgICAgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+IHNpZ25hbHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZsZXhpYmxlCi0gICAgICBjYWxsYmFjayBtZWNoYW5pc20uIEhlcmUsIHRvbywgeW91IGNhbiB1c2UgPGNvbW1hbmQ+Z3N0LWluc3BlY3Q8L2NvbW1hbmQ+Ci0gICAgICB0byBzZWUgd2hpY2ggc2lnbmFscyBhIHNwZWNpZmljIGVsZW1lbnQgc3VwcG9ydHMuIFRvZ2V0aGVyLCBzaWduYWxzCi0gICAgICBhbmQgcHJvcGVydGllcyBhcmUgdGhlIG1vc3QgYmFzaWMgd2F5IGluIHdoaWNoIGVsZW1lbnRzIGFuZAotICAgICAgYXBwbGljYXRpb25zIGludGVyYWN0LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtZmFjdG9yaWVzIj4KLSAgICA8dGl0bGU+TW9yZSBhYm91dCBlbGVtZW50IGZhY3RvcmllczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBJbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgd2UgYnJpZWZseSBpbnRyb2R1Y2VkIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iJlVSTEFQSTtHc3RFbGVtZW50RmFjdG9yeS5odG1sIj48Y2xhc3NuYW1lPkdzdEVsZW1lbnRGYWN0b3J5PC9jbGFzc25hbWU+PC91bGluaz4KLSAgICAgIG9iamVjdCBhbHJlYWR5IGFzIGEgd2F5IHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgYW4gZWxlbWVudC4gRWxlbWVudAotICAgICAgZmFjdG9yaWVzLCBob3dldmVyLCBhcmUgbXVjaCBtb3JlIHRoYW4ganVzdCB0aGF0LiBFbGVtZW50IGZhY3RvcmllcwotICAgICAgYXJlIHRoZSBiYXNpYyB0eXBlcyByZXRyaWV2ZWQgZnJvbSB0aGUgJkdTdHJlYW1lcjsgcmVnaXN0cnksIHRoZXkKLSAgICAgIGRlc2NyaWJlIGFsbCBwbHVnaW5zIGFuZCBlbGVtZW50cyB0aGF0ICZHU3RyZWFtZXI7IGNhbiBjcmVhdGUuIFRoaXMKLSAgICAgIG1lYW5zIHRoYXQgZWxlbWVudCBmYWN0b3JpZXMgYXJlIHVzZWZ1bCBmb3IgYXV0b21hdGVkIGVsZW1lbnQKLSAgICAgIGluc3RhbmNpbmcsIHN1Y2ggYXMgd2hhdCBhdXRvcGx1Z2dlcnMgZG8sIGFuZCBmb3IgY3JlYXRpbmcgbGlzdHMKLSAgICAgIG9mIGF2YWlsYWJsZSBlbGVtZW50cy4KLSAgICA8L3BhcmE+Ci0gICAgCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWVsZW1lbnRzLWZhY3Rvcmllcy1kZXRhaWxzIj4KLSAgICAgIDx0aXRsZT5HZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0IGFuIGVsZW1lbnQgdXNpbmcgYSBmYWN0b3J5PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUb29scyBsaWtlIDxjb21tYW5kPmdzdC1pbnNwZWN0PC9jb21tYW5kPiB3aWxsIHByb3ZpZGUgc29tZSBnZW5lcmljCi0gICAgICAgIGluZm9ybWF0aW9uIGFib3V0IGFuIGVsZW1lbnQsIHN1Y2ggYXMgdGhlIHBlcnNvbiB0aGF0IHdyb3RlIHRoZQotICAgICAgICBwbHVnaW4sIGEgZGVzY3JpcHRpdmUgbmFtZSAoYW5kIGEgc2hvcnRuYW1lKSwgYSByYW5rIGFuZCBhIGNhdGVnb3J5LgotICAgICAgICBUaGUgY2F0ZWdvcnkgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50IHRoYXQgY2FuCi0gICAgICAgIGJlIGNyZWF0ZWQgdXNpbmcgdGhpcyBlbGVtZW50IGZhY3RvcnkuIEV4YW1wbGVzIG9mIGNhdGVnb3JpZXMgaW5jbHVkZQotICAgICAgICA8Y2xhc3NuYW1lPkNvZGVjL0RlY29kZXIvVmlkZW88L2NsYXNzbmFtZT4gKHZpZGVvIGRlY29kZXIpLAotICAgICAgICA8Y2xhc3NuYW1lPkNvZGVjL0VuY29kZXIvVmlkZW88L2NsYXNzbmFtZT4gKHZpZGVvIGVuY29kZXIpLAotICAgICAgICA8Y2xhc3NuYW1lPlNvdXJjZS9WaWRlbzwvY2xhc3NuYW1lPiAoYSB2aWRlbyBnZW5lcmF0b3IpLAotICAgICAgICA8Y2xhc3NuYW1lPlNpbmsvVmlkZW88L2NsYXNzbmFtZT4gKGEgdmlkZW8gb3V0cHV0KSwgYW5kIGFsbCB0aGVzZQotICAgICAgICBleGlzdCBmb3IgYXVkaW8gYXMgd2VsbCwgb2YgY291cnNlLiBUaGVuLCB0aGVyZSdzIGFsc28KLSAgICAgICAgPGNsYXNzbmFtZT5Db2RlYy9EZW11eGVyPC9jbGFzc25hbWU+IGFuZAotICAgICAgICA8Y2xhc3NuYW1lPkNvZGVjL011eGVyPC9jbGFzc25hbWU+IGFuZCBhIHdob2xlIGxvdCBtb3JlLgotICAgICAgICA8Y29tbWFuZD5nc3QtaW5zcGVjdDwvY29tbWFuZD4gd2lsbCBnaXZlIGEgbGlzdCBvZiBhbGwgZmFjdG9yaWVzLCBhbmQKLSAgICAgICAgPGNvbW1hbmQ+Z3N0LWluc3BlY3QgJmx0O2ZhY3RvcnktbmFtZSZndDs8L2NvbW1hbmQ+IHdpbGwgbGlzdCBhbGwKLSAgICAgICAgb2YgdGhlIGFib3ZlIGluZm9ybWF0aW9uLCBhbmQgYSBsb3QgbW9yZS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZWxlbWVudGZhY3RvcnkuYyAtLT48IVtDREFUQVsKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLWludAotbWFpbiAoaW50ICAgYXJnYywKLSAgICAgIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7Ci0KLSAgLyogaW5pdCBHU3RyZWFtZXIgKi8KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgLyogZ2V0IGZhY3RvcnkgKi8KLSAgZmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoImZha2VzcmMiKTsKLSAgaWYgKCFmYWN0b3J5KSB7Ci0gICAgZ19wcmludCAoIllvdSBkb24ndCBoYXZlIHRoZSAnZmFrZXNyYycgZWxlbWVudCBpbnN0YWxsZWQhXG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBkaXNwbGF5IGluZm9ybWF0aW9uICovCi0gIGdfcHJpbnQgKCJUaGUgJyVzJyBlbGVtZW50IGlzIGEgbWVtYmVyIG9mIHRoZSBjYXRlZ29yeSAlcy5cbiIKLSAgICAgICAgICAgIkRlc2NyaXB0aW9uOiAlc1xuIiwKLSAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChHU1RfUExVR0lOX0ZFQVRVUkUgKGZhY3RvcnkpKSwKLSAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKGZhY3RvcnksIEdTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTKSwKLSAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKGZhY3RvcnksIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OKSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0gICAgICBdXT48IS0tIGV4YW1wbGUtZW5kIGVsZW1lbnRmYWN0b3J5LmMgLS0+PC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxwYXJhPgotICAgICAgICBZb3UgY2FuIHVzZSA8ZnVuY3Rpb24+Z3N0X3JlZ2lzdHJ5X3Bvb2xfZmVhdHVyZV9saXN0IChHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlkpPC9mdW5jdGlvbj4KLSAgICAgICAgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgdGhlIGVsZW1lbnQgZmFjdG9yaWVzIHRoYXQgJkdTdHJlYW1lcjsga25vd3MKLSAgICAgICAgYWJvdXQuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLSAgICAKLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZWxlbWVudHMtZmFjdG9yaWVzLXBhZHRlbXBsYXRlcyI+Ci0gICAgICA8dGl0bGU+RmluZGluZyBvdXQgd2hhdCBwYWRzIGFuIGVsZW1lbnQgY2FuIGNvbnRhaW48L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFBlcmhhcHMgdGhlIG1vc3QgcG93ZXJmdWwgZmVhdHVyZSBvZiBlbGVtZW50IGZhY3RvcmllcyBpcyB0aGF0Ci0gICAgICAgIHRoZXkgY29udGFpbiBhIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIHBhZHMgdGhhdCB0aGUgZWxlbWVudAotICAgICAgICBjYW4gZ2VuZXJhdGUsIGFuZCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRob3NlIHBhZHMgKGluIGxheW1hbiB3b3JkczoKLSAgICAgICAgd2hhdCB0eXBlcyBvZiBtZWRpYSBjYW4gc3RyZWFtIG92ZXIgdGhvc2UgcGFkcyksIHdpdGhvdXQgYWN0dWFsbHkKLSAgICAgICAgaGF2aW5nIHRvIGxvYWQgdGhvc2UgcGx1Z2lucyBpbnRvIG1lbW9yeS4gVGhpcyBjYW4gYmUgdXNlZAotICAgICAgICB0byBwcm92aWRlIGEgY29kZWMgc2VsZWN0aW9uIGxpc3QgZm9yIGVuY29kZXJzLCBvciBpdCBjYW4gYmUgdXNlZAotICAgICAgICBmb3IgYXV0b3BsdWdnaW5nIHB1cnBvc2VzIGZvciBtZWRpYSBwbGF5ZXJzLiBBbGwgY3VycmVudAotICAgICAgICAmR1N0cmVhbWVyOy1iYXNlZCBtZWRpYSBwbGF5ZXJzIGFuZCBhdXRvcGx1Z2dlcnMgd29yayB0aGlzIHdheS4KLSAgICAgICAgV2UnbGwgbG9vayBjbG9zZXIgYXQgdGhlc2UgZmVhdHVyZXMgYXMgd2UgbGVhcm4gYWJvdXQKLSAgICAgICAgPGNsYXNzbmFtZT5Hc3RQYWQ8L2NsYXNzbmFtZT4gYW5kIDxjbGFzc25hbWU+R3N0Q2FwczwvY2xhc3NuYW1lPgotICAgICAgICBpbiB0aGUgbmV4dCBjaGFwdGVyOiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLXBhZHMiLz4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1lbGVtZW50cy1saW5rIiB4cmVmbGFiZWw9IkxpbmtpbmcgZWxlbWVudHMiPgotICAgIDx0aXRsZT5MaW5raW5nIGVsZW1lbnRzPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEJ5IGxpbmtpbmcgYSBzb3VyY2UgZWxlbWVudCB3aXRoIHplcm8gb3IgbW9yZSBmaWx0ZXItbGlrZQotICAgICAgZWxlbWVudHMgYW5kIGZpbmFsbHkgYSBzaW5rIGVsZW1lbnQsIHlvdSBzZXQgdXAgYSBtZWRpYQotICAgICAgcGlwZWxpbmUuIERhdGEgd2lsbCBmbG93IHRocm91Z2ggdGhlIGVsZW1lbnRzLiBUaGlzIGlzIHRoZQotICAgICAgYmFzaWMgY29uY2VwdCBvZiBtZWRpYSBoYW5kbGluZyBpbiAmR1N0cmVhbWVyOy4KLSAgICA8L3BhcmE+Ci0gICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24tbGluayI+Ci0gICAgICA8dGl0bGU+VmlzdWFsaXNhdGlvbiBvZiB0aHJlZSBsaW5rZWQgZWxlbWVudHM8L3RpdGxlPgotICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9saW5rZWQtZWxlbWVudHMuJmltYWdlOyIKLSAgICAgICAgICAgIGZvcm1hdD0iJklNQUdFOyIvPgotICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0gICAgPC9maWd1cmU+Ci0gICAgPHBhcmE+Ci0gICAgICBCeSBsaW5raW5nIHRoZXNlIHRocmVlIGVsZW1lbnRzLCB3ZSBoYXZlIGNyZWF0ZWQgYSB2ZXJ5IHNpbXBsZQotICAgICAgY2hhaW4gb2YgZWxlbWVudHMuIFRoZSBlZmZlY3Qgb2YgdGhpcyB3aWxsIGJlIHRoYXQgdGhlIG91dHB1dCBvZgotICAgICAgdGhlIHNvdXJjZSBlbGVtZW50ICg8cXVvdGU+ZWxlbWVudDE8L3F1b3RlPikgd2lsbCBiZSB1c2VkIGFzIGlucHV0Ci0gICAgICBmb3IgdGhlIGZpbHRlci1saWtlIGVsZW1lbnQgKDxxdW90ZT5lbGVtZW50MjwvcXVvdGU+KS4gVGhlCi0gICAgICBmaWx0ZXItbGlrZSBlbGVtZW50IHdpbGwgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEgYW5kIHNlbmQgdGhlCi0gICAgICByZXN1bHQgdG8gdGhlIGZpbmFsIHNpbmsgZWxlbWVudCAoPHF1b3RlPmVsZW1lbnQzPC9xdW90ZT4pLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEltYWdpbmUgdGhlIGFib3ZlIGdyYXBoIGFzIGEgc2ltcGxlIE9nZy9Wb3JiaXMgYXVkaW8gZGVjb2Rlci4gVGhlCi0gICAgICBzb3VyY2UgaXMgYSBkaXNrIHNvdXJjZSB3aGljaCByZWFkcyB0aGUgZmlsZSBmcm9tIGRpc2MuIFRoZSBzZWNvbmQKLSAgICAgIGVsZW1lbnQgaXMgYSBPZ2cvVm9yYmlzIGF1ZGlvIGRlY29kZXIuIFRoZSBzaW5rIGVsZW1lbnQgaXMgeW91cgotICAgICAgc291bmRjYXJkLCBwbGF5aW5nIGJhY2sgdGhlIGRlY29kZWQgYXVkaW8gZGF0YS4gV2Ugd2lsbCB1c2UgdGhpcwotICAgICAgc2ltcGxlIGdyYXBoIHRvIGNvbnN0cnVjdCBhbiBPZ2cvVm9yYmlzIHBsYXllciBsYXRlciBpbiB0aGlzIG1hbnVhbC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBJbiBjb2RlLCB0aGUgYWJvdmUgZ3JhcGggaXMgd3JpdHRlbiBsaWtlIHRoaXM6Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZWxlbWVudGxpbmsuYyBhIC0tPgotI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLQotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqc291cmNlLCAqZmlsdGVyLCAqc2luazsKLQotICAvKiBpbml0ICovCi0gIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7Ci0KLSAgLyogY3JlYXRlIHBpcGVsaW5lICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoIm15LXBpcGVsaW5lIik7Ci0KLSAgLyogY3JlYXRlIGVsZW1lbnRzICovCi0gIHNvdXJjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic291cmNlIik7Ci0gIGZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgImZpbHRlciIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotCi0gIC8qIG11c3QgYWRkIGVsZW1lbnRzIHRvIHBpcGVsaW5lIGJlZm9yZSBsaW5raW5nIHRoZW0gKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzb3VyY2UsIGZpbHRlciwgc2luaywgTlVMTCk7Ci0KLSAgLyogbGluayAqLwotICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfbWFueSAoc291cmNlLCBmaWx0ZXIsIHNpbmssIE5VTEwpKSB7Ci0gICAgZ193YXJuaW5nICgiRmFpbGVkIHRvIGxpbmsgZWxlbWVudHMhIik7Ci0gIH0KLTwhLS0gZXhhbXBsZS1lbmQgZWxlbWVudGxpbmsuYyBhIC0tPgotWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiBlbGVtZW50bGluay5jIGIgLS0+PCEtLQotICByZXR1cm4gMDsKLS0tPjwhLS0gZXhhbXBsZS1lbmQgZWxlbWVudGxpbmsuYyBiIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIGVsZW1lbnRsaW5rLmMgYyAtLT4KLX0KLSAgICA8IS0tIGV4YW1wbGUtZW5kIGVsZW1lbnRsaW5rLmMgYyAtLT48L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgRm9yIG1vcmUgc3BlY2lmaWMgYmVoYXZpb3VyLCB0aGVyZSBhcmUgYWxzbyB0aGUgZnVuY3Rpb25zCi0gICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfbGluayAoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2xpbmtfcGFkcyAoKTwvZnVuY3Rpb24+LiBZb3UgY2FuIGFsc28gb2J0YWluCi0gICAgICByZWZlcmVuY2VzIHRvIGluZGl2aWR1YWwgcGFkcyBhbmQgbGluayB0aG9zZSB1c2luZyB2YXJpb3VzCi0gICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9saW5rXyogKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMuIFNlZSB0aGUgQVBJCi0gICAgICByZWZlcmVuY2VzIGZvciBtb3JlIGRldGFpbHMuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSW1wb3J0YW50OiB5b3UgbXVzdCBhZGQgZWxlbWVudHMgdG8gYSBiaW4gb3IgcGlwZWxpbmUKLSAgICAgIDxlbXBoYXNpcz5iZWZvcmU8L2VtcGhhc2lzPiBsaW5raW5nIHRoZW0sIHNpbmNlIGFkZGluZyBhbiBlbGVtZW50IHRvCi0gICAgICBhIGJpbiB3aWxsIGRpc2Nvbm5lY3QgYW55IGFscmVhZHkgZXhpc3RpbmcgbGlua3MuIEFsc28sIHlvdSBjYW5ub3QKLSAgICAgIGRpcmVjdGx5IGxpbmsgZWxlbWVudHMgdGhhdCBhcmUgbm90IGluIHRoZSBzYW1lIGJpbiBvciBwaXBlbGluZTsgaWYKLSAgICAgIHlvdSB3YW50IHRvIGxpbmsgZWxlbWVudHMgb3IgcGFkcyBhdCBkaWZmZXJlbnQgaGllcmFyY2h5IGxldmVscywgeW91Ci0gICAgICB3aWxsIG5lZWQgdG8gdXNlIGdob3N0IHBhZHMgKG1vcmUgYWJvdXQgZ2hvc3QgcGFkcyBsYXRlciwKLSAgICAgIHNlZSA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLXBhZHMtZ2hvc3QiLz4pLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tZWxlbWVudHMtc3RhdGVzIj4KLSAgICA8dGl0bGU+RWxlbWVudCBTdGF0ZXM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQWZ0ZXIgYmVpbmcgY3JlYXRlZCwgYW4gZWxlbWVudCB3aWxsIG5vdCBhY3R1YWxseSBwZXJmb3JtIGFueSBhY3Rpb25zCi0gICAgICB5ZXQuIFlvdSBuZWVkIHRvIGNoYW5nZSBlbGVtZW50cyBzdGF0ZSB0byBtYWtlIGl0IGRvIHNvbWV0aGluZy4KLSAgICAgICZHU3RyZWFtZXI7IGtub3dzIGZvdXIgZWxlbWVudCBzdGF0ZXMsIGVhY2ggd2l0aCBhIHZlcnkgc3BlY2lmaWMKLSAgICAgIG1lYW5pbmcuIFRob3NlIGZvdXIgc3RhdGVzIGFyZToKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGNsYXNzbmFtZT5HU1RfU1RBVEVfTlVMTDwvY2xhc3NuYW1lPjogdGhpcyBpcyB0aGUgZGVmYXVsdCBzdGF0ZS4KLSAgICAgICAgICBObyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBpbiB0aGlzIHN0YXRlLCBzbywgdHJhbnNpdGlvbmluZyB0byBpdAotICAgICAgICAgIHdpbGwgZnJlZSBhbGwgcmVzb3VyY2VzLiBUaGUgZWxlbWVudCBtdXN0IGJlIGluIHRoaXMgc3RhdGUgd2hlbgotICAgICAgICAgIGl0cyByZWZjb3VudCByZWFjaGVzIDAgYW5kIGl0IGlzIGZyZWVkLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8Y2xhc3NuYW1lPkdTVF9TVEFURV9SRUFEWTwvY2xhc3NuYW1lPjogaW4gdGhlIHJlYWR5IHN0YXRlLCBhbgotICAgICAgICAgIGVsZW1lbnQgaGFzIGFsbG9jYXRlZCBhbGwgb2YgaXRzIGdsb2JhbCByZXNvdXJjZXMsIHRoYXQgaXMsCi0gICAgICAgICAgcmVzb3VyY2VzIHRoYXQgY2FuIGJlIGtlcHQgd2l0aGluIHN0cmVhbXMuIFlvdSBjYW4gdGhpbmsgYWJvdXQKLSAgICAgICAgICBvcGVuaW5nIGRldmljZXMsIGFsbG9jYXRpbmcgYnVmZmVycyBhbmQgc28gb24uIEhvd2V2ZXIsIHRoZQotICAgICAgICAgIHN0cmVhbSBpcyBub3Qgb3BlbmVkIGluIHRoaXMgc3RhdGUsIHNvIHRoZSBzdHJlYW0gcG9zaXRpb25zIGlzCi0gICAgICAgICAgYXV0b21hdGljYWxseSB6ZXJvLiBJZiBhIHN0cmVhbSB3YXMgcHJldmlvdXNseSBvcGVuZWQsIGl0IHNob3VsZAotICAgICAgICAgIGJlIGNsb3NlZCBpbiB0aGlzIHN0YXRlLCBhbmQgcG9zaXRpb24sIHByb3BlcnRpZXMgYW5kIHN1Y2ggc2hvdWxkCi0gICAgICAgICAgYmUgcmVzZXQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BBVVNFRDwvY2xhc3NuYW1lPjogaW4gdGhpcyBzdGF0ZSwgYW4KLSAgICAgICAgICBlbGVtZW50IGhhcyBvcGVuZWQgdGhlIHN0cmVhbSwgYnV0IGlzIG5vdCBhY3RpdmVseSBwcm9jZXNzaW5nCi0gICAgICAgICAgaXQuIEFuIGVsZW1lbnQgaXMgYWxsb3dlZCB0byBtb2RpZnkgYSBzdHJlYW0ncyBwb3NpdGlvbiwgcmVhZAotICAgICAgICAgIGFuZCBwcm9jZXNzIGRhdGEgYW5kIHN1Y2ggdG8gcHJlcGFyZSBmb3IgcGxheWJhY2sgYXMgc29vbiBhcwotICAgICAgICAgIHN0YXRlIGlzIGNoYW5nZWQgdG8gUExBWUlORywgYnV0IGl0IGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPgotICAgICAgICAgIGFsbG93ZWQgdG8gcGxheSB0aGUgZGF0YSB3aGljaCB3b3VsZCBtYWtlIHRoZSBjbG9jayBydW4uCi0gICAgICAgICAgSW4gc3VtbWFyeSwgUEFVU0VEIGlzIHRoZSBzYW1lIGFzIFBMQVlJTkcgYnV0IHdpdGhvdXQgYSBydW5uaW5nCi0gICAgICAgICAgY2xvY2suCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICBFbGVtZW50cyBnb2luZyBpbnRvIHRoZSBQQVVTRUQgc3RhdGUgc2hvdWxkIHByZXBhcmUgdGhlbXNlbHZlcwotICAgICAgICAgIGZvciBtb3Zpbmcgb3ZlciB0byB0aGUgUExBWUlORyBzdGF0ZSBhcyBzb29uIGFzIHBvc3NpYmxlLiBWaWRlbwotICAgICAgICAgIG9yIGF1ZGlvIG91dHB1dHMgd291bGQsIGZvciBleGFtcGxlLCB3YWl0IGZvciBkYXRhIHRvIGFycml2ZSBhbmQKLSAgICAgICAgICBxdWV1ZSBpdCBzbyB0aGV5IGNhbiBwbGF5IGl0IHJpZ2h0IGFmdGVyIHRoZSBzdGF0ZSBjaGFuZ2UuIEFsc28sCi0gICAgICAgICAgdmlkZW8gc2lua3MgY2FuIGFscmVhZHkgcGxheSB0aGUgZmlyc3QgZnJhbWUgKHNpbmNlIHRoaXMgZG9lcwotICAgICAgICAgIG5vdCBhZmZlY3QgdGhlIGNsb2NrIHlldCkuIEF1dG9wbHVnZ2VycyBjb3VsZCB1c2UgdGhpcyBzYW1lCi0gICAgICAgICAgc3RhdGUgdHJhbnNpdGlvbiB0byBhbHJlYWR5IHBsdWcgdG9nZXRoZXIgYSBwaXBlbGluZS4gTW9zdCBvdGhlcgotICAgICAgICAgIGVsZW1lbnRzLCBzdWNoIGFzIGNvZGVjcyBvciBmaWx0ZXJzLCBkbyBub3QgbmVlZCB0byBleHBsaWNpdGx5Ci0gICAgICAgICAgZG8gYW55dGhpbmcgaW4gdGhpcyBzdGF0ZSwgaG93ZXZlci4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGNsYXNzbmFtZT5HU1RfU1RBVEVfUExBWUlORzwvY2xhc3NuYW1lPjogaW4gdGhlIFBMQVlJTkcgc3RhdGUsCi0gICAgICAgICAgYW4gZWxlbWVudCBkb2VzIGV4YWN0bHkgdGhlIHNhbWUgYXMgaW4gdGhlIFBBVVNFRCBzdGF0ZSwgZXhjZXB0Ci0gICAgICAgICAgdGhhdCB0aGUgY2xvY2sgbm93IHJ1bnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBZb3UgY2FuIGNoYW5nZSB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCB1c2luZyB0aGUgZnVuY3Rpb24KLSAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9zZXRfc3RhdGUgKCk8L2Z1bmN0aW9uPi4gSWYgeW91IHNldCBhbiBlbGVtZW50Ci0gICAgICB0byBhbm90aGVyIHN0YXRlLCAmR1N0cmVhbWVyOyB3aWxsIGludGVybmFsbHkgdHJhdmVyc2UgYWxsIGludGVybWVkaWF0ZQotICAgICAgc3RhdGVzLiBTbyBpZiB5b3Ugc2V0IGFuIGVsZW1lbnQgZnJvbSBOVUxMIHRvIFBMQVlJTkcsICZHU3RyZWFtZXI7Ci0gICAgICB3aWxsIGludGVybmFsbHkgc2V0IHRoZSBlbGVtZW50IHRvIFJFQURZIGFuZCBQQVVTRUQgaW4gYmV0d2Vlbi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBXaGVuIG1vdmVkIHRvIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BMQVlJTkc8L2NsYXNzbmFtZT4sIHBpcGVsaW5lcwotICAgICAgd2lsbCBwcm9jZXNzIGRhdGEgYXV0b21hdGljYWxseS4gVGhleSBkbyBub3QgbmVlZCB0byBiZSBpdGVyYXRlZCBpbgotICAgICAgYW55IGZvcm0uIEludGVybmFsbHksICZHU3RyZWFtZXI7IHdpbGwgc3RhcnQgdGhyZWFkcyB0aGF0IHRha2UgdGhpcwotICAgICAgdGFzayBvbiB0byB0aGVtLiAmR1N0cmVhbWVyOyB3aWxsIGFsc28gdGFrZSBjYXJlIG9mIHN3aXRjaGluZwotICAgICAgbWVzc2FnZXMgZnJvbSB0aGUgcGlwZWxpbmUncyB0aHJlYWQgaW50byB0aGUgYXBwbGljYXRpb24ncyBvd24KLSAgICAgIHRocmVhZCwgYnkgdXNpbmcgYSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iJlVSTEFQSTtHc3RCdXMuaHRtbCI+PGNsYXNzbmFtZT5Hc3RCdXM8L2NsYXNzbmFtZT48L3VsaW5rPi4gU2VlCi0gICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1cyIvPiBmb3IgZGV0YWlscy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBXaGVuIHlvdSBzZXQgYSBiaW4gb3IgcGlwZWxpbmUgdG8gYSBjZXJ0YWluIHRhcmdldCBzdGF0ZSwgaXQgd2lsbCB1c3VhbGx5Ci0gICAgICBwcm9wYWdhdGUgdGhlIHN0YXRlIGNoYW5nZSB0byBhbGwgZWxlbWVudHMgd2l0aGluIHRoZSBiaW4gb3IgcGlwZWxpbmUKLSAgICAgIGF1dG9tYXRpY2FsbHksIHNvIGl0J3MgdXN1YWxseSBvbmx5IG5lY2Vzc2FyeSB0byBzZXQgdGhlIHN0YXRlIG9mIHRoZQotICAgICAgdG9wLWxldmVsIHBpcGVsaW5lIHRvIHN0YXJ0IHVwIHRoZSBwaXBlbGluZSBvciBzaHV0IGl0IGRvd24uIEhvd2V2ZXIsCi0gICAgICB3aGVuIGFkZGluZyBlbGVtZW50cyBkeW5hbWljYWxseSB0byBhbiBhbHJlYWR5LXJ1bm5pbmcgcGlwZWxpbmUsIGUuZy4KLSAgICAgIGZyb20gd2l0aGluIGEgInBhZC1hZGRlZCIgc2lnbmFsIGNhbGxiYWNrLCB5b3UKLSAgICAgIG5lZWQgdG8gc2V0IGl0IHRvIHRoZSBkZXNpcmVkIHRhcmdldCBzdGF0ZSB5b3Vyc2VsZiB1c2luZwotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKTwvZnVuY3Rpb24+IG9yCi0gICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoKTwvZnVuY3Rpb24+LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbCBiL2RvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA5N2IyMC4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItaGVsbG93b3JsZCI+Ci0gIDx0aXRsZT5Zb3VyIGZpcnN0IGFwcGxpY2F0aW9uPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgVGhpcyBjaGFwdGVyIHdpbGwgc3VtbWFyaXplIGV2ZXJ5dGhpbmcgeW91J3ZlIGxlYXJuZWQgaW4gdGhlIHByZXZpb3VzCi0gICAgY2hhcHRlcnMuIEl0IGRlc2NyaWJlcyBhbGwgYXNwZWN0cyBvZiBhIHNpbXBsZSAmR1N0cmVhbWVyOyBhcHBsaWNhdGlvbiwKLSAgICBpbmNsdWRpbmcgaW5pdGlhbGl6aW5nIGxpYnJhcmllcywgY3JlYXRpbmcgZWxlbWVudHMsIHBhY2tpbmcgZWxlbWVudHMKLSAgICB0b2dldGhlciBpbiBhIHBpcGVsaW5lIGFuZCBwbGF5aW5nIHRoaXMgcGlwZWxpbmUuIEJ5IGRvaW5nIGFsbCB0aGlzLAotICAgIHlvdSB3aWxsIGJlIGFibGUgdG8gYnVpbGQgYSBzaW1wbGUgT2dnL1ZvcmJpcyBhdWRpbyBwbGF5ZXIuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24taGVsbG93b3JsZCI+Ci0gICAgPHRpdGxlPkhlbGxvIHdvcmxkPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFdlJ3JlIGdvaW5nIHRvIGNyZWF0ZSBhIHNpbXBsZSBmaXJzdCBhcHBsaWNhdGlvbiwgYSBzaW1wbGUgT2dnL1ZvcmJpcwotICAgICAgY29tbWFuZC1saW5lIGF1ZGlvIHBsYXllci4gRm9yIHRoaXMsIHdlIHdpbGwgdXNlIG9ubHkgc3RhbmRhcmQKLSAgICAgICZHU3RyZWFtZXI7IGNvbXBvbmVudHMuIFRoZSBwbGF5ZXIgd2lsbCByZWFkIGEgZmlsZSBzcGVjaWZpZWQgb24KLSAgICAgIHRoZSBjb21tYW5kLWxpbmUuIExldCdzIGdldCBzdGFydGVkIQotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFdlJ3ZlIGxlYXJuZWQsIGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItaW5pdCIvPiwgdGhhdCB0aGUgZmlyc3QgdGhpbmcKLSAgICAgIHRvIGRvIGluIHlvdXIgYXBwbGljYXRpb24gaXMgdG8gaW5pdGlhbGl6ZSAmR1N0cmVhbWVyOyBieSBjYWxsaW5nCi0gICAgICA8ZnVuY3Rpb24+Z3N0X2luaXQgKCk8L2Z1bmN0aW9uPi4gQWxzbywgbWFrZSBzdXJlIHRoYXQgdGhlIGFwcGxpY2F0aW9uCi0gICAgICBpbmNsdWRlcyA8ZmlsZW5hbWU+Z3N0L2dzdC5oPC9maWxlbmFtZT4gc28gYWxsIGZ1bmN0aW9uIG5hbWVzIGFuZAotICAgICAgb2JqZWN0cyBhcmUgcHJvcGVybHkgZGVmaW5lZC4gVXNlIDxmdW5jdGlvbj4jaW5jbHVkZQotICAgICAgJmx0O2dzdC9nc3QuaCZndDs8L2Z1bmN0aW9uPiB0byBkbyB0aGF0LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIE5leHQsIHlvdSdsbCB3YW50IHRvIGNyZWF0ZSB0aGUgZGlmZmVyZW50IGVsZW1lbnRzIHVzaW5nCi0gICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgpPC9mdW5jdGlvbj4uIEZvciBhbiBPZ2cvVm9yYmlzCi0gICAgICBhdWRpbyBwbGF5ZXIsIHdlJ2xsIG5lZWQgYSBzb3VyY2UgZWxlbWVudCB0aGF0IHJlYWRzIGZpbGVzIGZyb20gYQotICAgICAgZGlzay4gJkdTdHJlYW1lcjsgaW5jbHVkZXMgdGhpcyBlbGVtZW50IHVuZGVyIHRoZSBuYW1lCi0gICAgICA8cXVvdGU+ZmlsZXNyYzwvcXVvdGU+LiBOZXh0LCB3ZSdsbCBuZWVkIHNvbWV0aGluZyB0byBwYXJzZSB0aGUKLSAgICAgIGZpbGUgYW5kIGRlY29kZSBpdCBpbnRvIHJhdyBhdWRpby4gJkdTdHJlYW1lcjsgaGFzIHR3byBlbGVtZW50cwotICAgICAgZm9yIHRoaXM6IHRoZSBmaXJzdCBwYXJzZXMgT2dnIHN0cmVhbXMgaW50byBlbGVtZW50YXJ5IHN0cmVhbXMgKHZpZGVvLAotICAgICAgYXVkaW8pIGFuZCBpcyBjYWxsZWQgPHF1b3RlPm9nZ2RlbXV4PC9xdW90ZT4uIFRoZSBzZWNvbmQgaXMgYSBWb3JiaXMKLSAgICAgIGF1ZGlvIGRlY29kZXIsIGl0J3MgY29udmVuaWVudGx5IGNhbGxlZCA8cXVvdGU+dm9yYmlzZGVjPC9xdW90ZT4uCi0gICAgICBTaW5jZSA8cXVvdGU+b2dnZGVtdXg8L3F1b3RlPiBjcmVhdGVzIGR5bmFtaWMgcGFkcyBmb3IgZWFjaCBlbGVtZW50YXJ5Ci0gICAgICBzdHJlYW0sIHlvdSdsbCBuZWVkIHRvIHNldCBhIDxxdW90ZT5wYWQtYWRkZWQ8L3F1b3RlPiBldmVudCBoYW5kbGVyCi0gICAgICBvbiB0aGUgPHF1b3RlPm9nZ2RlbXV4PC9xdW90ZT4gZWxlbWVudCwgbGlrZSB5b3UndmUgbGVhcm5lZCBpbgotICAgICAgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1wYWRzLWR5bmFtaWMiLz4sIHRvIGxpbmsgdGhlIE9nZyBkZW11eGVyIGFuZAotICAgICAgdGhlIFZvcmJpcyBkZWNvZGVyIGVsZW1lbnRzIHRvZ2V0aGVyLiBBdCBsYXN0LCB3ZSdsbCBhbHNvIG5lZWQgYW4KLSAgICAgIGF1ZGlvIG91dHB1dCBlbGVtZW50LCB3ZSB3aWxsIHVzZSA8cXVvdGU+YXV0b2F1ZGlvc2luazwvcXVvdGU+LCB3aGljaAotICAgICAgYXV0b21hdGljYWxseSBkZXRlY3RzIHlvdXIgYXVkaW8gZGV2aWNlLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBsYXN0IHRoaW5nIGxlZnQgdG8gZG8gaXMgdG8gYWRkIGFsbCBlbGVtZW50cyBpbnRvIGEgY29udGFpbmVyCi0gICAgICBlbGVtZW50LCBhIDxjbGFzc25hbWU+R3N0UGlwZWxpbmU8L2NsYXNzbmFtZT4sIGFuZCB3YWl0IHVudGlsCi0gICAgICB3ZSd2ZSBwbGF5ZWQgdGhlIHdob2xlIHNvbmcuIFdlJ3ZlIHByZXZpb3VzbHkKLSAgICAgIGxlYXJuZWQgaG93IHRvIGFkZCBlbGVtZW50cyB0byBhIGNvbnRhaW5lciBiaW4gaW4gPHhyZWYKLSAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItYmlucyIvPiwgYW5kIHdlJ3ZlIGxlYXJuZWQgYWJvdXQgZWxlbWVudCBzdGF0ZXMKLSAgICAgIGluIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZWxlbWVudHMtc3RhdGVzIi8+LiBXZSB3aWxsIGFsc28gYXR0YWNoCi0gICAgICBhIG1lc3NhZ2UgaGFuZGxlciB0byB0aGUgcGlwZWxpbmUgYnVzIHNvIHdlIGNhbiByZXRyaWV2ZSBlcnJvcnMKLSAgICAgIGFuZCBkZXRlY3QgdGhlIGVuZC1vZi1zdHJlYW0uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgTGV0J3Mgbm93IGFkZCBhbGwgdGhlIGNvZGUgdG9nZXRoZXIgdG8gZ2V0IG91ciB2ZXJ5IGZpcnN0IGF1ZGlvCi0gICAgICBwbGF5ZXI6Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhLS0gZXhhbXBsZS1iZWdpbiBoZWxsb3dvcmxkLmMgLS0+Ci0jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotI2luY2x1ZGUgJmx0O2dsaWIuaCZndDsKLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1c19jYWxsIChHc3RCdXMgICAgICpidXMsCi0gICAgICAgICAgR3N0TWVzc2FnZSAqbXNnLAotICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IChHTWFpbkxvb3AgKikgZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKLQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgZ19wcmludCAoIkVuZCBvZiBzdHJlYW1cbiIpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKLSAgICAgIGdjaGFyICAqZGVidWc7Ci0gICAgICBHRXJyb3IgKmVycm9yOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmYW1wO2Vycm9yLCAmYW1wO2RlYnVnKTsKLSAgICAgIGdfZnJlZSAoZGVidWcpOwotCi0gICAgICBnX3ByaW50ZXJyICgiRXJyb3I6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLQotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotc3RhdGljIHZvaWQKLW9uX3BhZF9hZGRlZCAoR3N0RWxlbWVudCAqZWxlbWVudCwKLSAgICAgICAgICAgICAgR3N0UGFkICAgICAqcGFkLAotICAgICAgICAgICAgICBncG9pbnRlciAgICBkYXRhKQotewotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdEVsZW1lbnQgKmRlY29kZXIgPSAoR3N0RWxlbWVudCAqKSBkYXRhOwotCi0gIC8qIFdlIGNhbiBub3cgbGluayB0aGlzIHBhZCB3aXRoIHRoZSB2b3JiaXMtZGVjb2RlciBzaW5rIHBhZCAqLwotICBnX3ByaW50ICgiRHluYW1pYyBwYWQgY3JlYXRlZCwgbGlua2luZyBkZW11eGVyL2RlY29kZXJcbiIpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZGVjb2RlciwgInNpbmsiKTsKLQotICBnc3RfcGFkX2xpbmsgKHBhZCwgc2lua3BhZCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci19Ci0KLQotCi1pbnQKLW1haW4gKGludCAgIGFyZ2MsCi0gICAgICBjaGFyICphcmd2W10pCi17Ci0gIEdNYWluTG9vcCAqbG9vcDsKLQotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNvdXJjZSwgKmRlbXV4ZXIsICpkZWNvZGVyLCAqY29udiwgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBndWludCBidXNfd2F0Y2hfaWQ7Ci0KLSAgLyogSW5pdGlhbGlzYXRpb24gKi8KLSAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLQotICAvKiBDaGVjayBpbnB1dCBhcmd1bWVudHMgKi8KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnRlcnIgKCJVc2FnZTogJXMgJmx0O09nZy9Wb3JiaXMgZmlsZW5hbWUmZ3Q7XG4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotCi0gIC8qIENyZWF0ZSBnc3RyZWFtZXIgZWxlbWVudHMgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgiYXVkaW8tcGxheWVyIik7Ci0gIHNvdXJjZSAgID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNyYyIsICAgICAgICJmaWxlLXNvdXJjZSIpOwotICBkZW11eGVyICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm9nZ2RlbXV4IiwgICAgICAib2dnLWRlbXV4ZXIiKTsKLSAgZGVjb2RlciAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2b3JiaXNkZWMiLCAgICAgInZvcmJpcy1kZWNvZGVyIik7Ci0gIGNvbnYgICAgID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgICJjb252ZXJ0ZXIiKTsKLSAgc2luayAgICAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdXRvYXVkaW9zaW5rIiwgImF1ZGlvLW91dHB1dCIpOwotCi0gIGlmICghcGlwZWxpbmUgfHwgIXNvdXJjZSB8fCAhZGVtdXhlciB8fCAhZGVjb2RlciB8fCAhY29udiB8fCAhc2luaykgewotICAgIGdfcHJpbnRlcnIgKCJPbmUgZWxlbWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZC4gRXhpdGluZy5cbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIFNldCB1cCB0aGUgcGlwZWxpbmUgKi8KLQotICAvKiB3ZSBzZXQgdGhlIGlucHV0IGZpbGVuYW1lIHRvIHRoZSBzb3VyY2UgZWxlbWVudCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzb3VyY2UpLCAibG9jYXRpb24iLCBhcmd2WzFdLCBOVUxMKTsKLQotICAvKiB3ZSBhZGQgYSBtZXNzYWdlIGhhbmRsZXIgKi8KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgYnVzX3dhdGNoX2lkID0gZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgYnVzX2NhbGwsIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIC8qIHdlIGFkZCBhbGwgZWxlbWVudHMgaW50byB0aGUgcGlwZWxpbmUgKi8KLSAgLyogZmlsZS1zb3VyY2UgfCBvZ2ctZGVtdXhlciB8IHZvcmJpcy1kZWNvZGVyIHwgY29udmVydGVyIHwgYWxzYS1vdXRwdXQgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLAotICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGRlbXV4ZXIsIGRlY29kZXIsIGNvbnYsIHNpbmssIE5VTEwpOwotCi0gIC8qIHdlIGxpbmsgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyICovCi0gIC8qIGZpbGUtc291cmNlIC0mZ3Q7IG9nZy1kZW11eGVyIH4mZ3Q7IHZvcmJpcy1kZWNvZGVyIC0mZ3Q7IGNvbnZlcnRlciAtJmd0OyBhbHNhLW91dHB1dCAqLwotICBnc3RfZWxlbWVudF9saW5rIChzb3VyY2UsIGRlbXV4ZXIpOwotICBnc3RfZWxlbWVudF9saW5rX21hbnkgKGRlY29kZXIsIGNvbnYsIHNpbmssIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChkZW11eGVyLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAob25fcGFkX2FkZGVkKSwgZGVjb2Rlcik7Ci0KLSAgLyogbm90ZSB0aGF0IHRoZSBkZW11eGVyIHdpbGwgYmUgbGlua2VkIHRvIHRoZSBkZWNvZGVyIGR5bmFtaWNhbGx5LgotICAgICBUaGUgcmVhc29uIGlzIHRoYXQgT2dnIG1heSBjb250YWluIHZhcmlvdXMgc3RyZWFtcyAoZm9yIGV4YW1wbGUKLSAgICAgYXVkaW8gYW5kIHZpZGVvKS4gVGhlIHNvdXJjZSBwYWQocykgd2lsbCBiZSBjcmVhdGVkIGF0IHJ1biB0aW1lLAotICAgICBieSB0aGUgZGVtdXhlciB3aGVuIGl0IGRldGVjdHMgdGhlIGFtb3VudCBhbmQgbmF0dXJlIG9mIHN0cmVhbXMuCi0gICAgIFRoZXJlZm9yZSB3ZSBjb25uZWN0IGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBleGVjdXRlZAotICAgICB3aGVuIHRoZSAicGFkLWFkZGVkIiBpcyBlbWl0dGVkLiovCi0KLQotICAvKiBTZXQgdGhlIHBpcGVsaW5lIHRvICJwbGF5aW5nIiBzdGF0ZSovCi0gIGdfcHJpbnQgKCJOb3cgcGxheWluZzogJXNcbiIsIGFyZ3ZbMV0pOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLQotICAvKiBJdGVyYXRlICovCi0gIGdfcHJpbnQgKCJSdW5uaW5nLi4uXG4iKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotCi0gIC8qIE91dCBvZiB0aGUgbWFpbiBsb29wLCBjbGVhbiB1cCBuaWNlbHkgKi8KLSAgZ19wcmludCAoIlJldHVybmVkLCBzdG9wcGluZyBwbGF5YmFja1xuIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnX3ByaW50ICgiRGVsZXRpbmcgcGlwZWxpbmVcbiIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOwotICBnX3NvdXJjZV9yZW1vdmUgKGJ1c193YXRjaF9pZCk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICByZXR1cm4gMDsKLX0KLTwhLS0gZXhhbXBsZS1lbmQgaGVsbG93b3JsZC5jIC0tPgotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBXZSBub3cgaGF2ZSBjcmVhdGVkIGEgY29tcGxldGUgcGlwZWxpbmUuICBXZSBjYW4gdmlzdWFsaXNlIHRoZQotICAgICAgcGlwZWxpbmUgYXMgZm9sbG93czoKLSAgICA8L3BhcmE+Ci0KLSAgICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi1oZWxsby1pbWciPgotICAgICAgPHRpdGxlPlRoZSAiaGVsbG8gd29ybGQiIHBpcGVsaW5lPC90aXRsZT4KLSAgICAgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgIDxpbWFnZWRhdGEgc2NhbGU9Ijc1IiBmaWxlcmVmPSJpbWFnZXMvaGVsbG8td29ybGQuJmltYWdlOyIgZm9ybWF0PSImSU1BR0U7IiAvPgotICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgPC9tZWRpYW9iamVjdD4gIAotICAgIDwvZmlndXJlPgotCi0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWhlbGxvd29ybGQtY29tcGlsZXJ1biI+Ci0gICAgPHRpdGxlPkNvbXBpbGluZyBhbmQgUnVubmluZyBoZWxsb3dvcmxkLmM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVG8gY29tcGlsZSB0aGUgaGVsbG93b3JsZCBleGFtcGxlLCB1c2U6IDxjb21tYW5kPmdjYyAtV2FsbAotICAgICAgaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKLSAgICAgICQocGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgZ3N0cmVhbWVyLSZHU1RfQVBJX1ZFUlNJT047KTwvY29tbWFuZD4uCi0gICAgICAmR1N0cmVhbWVyOyBtYWtlcyB1c2Ugb2YgPGNvbW1hbmQ+cGtnLWNvbmZpZzwvY29tbWFuZD4gdG8gZ2V0IGNvbXBpbGVyCi0gICAgICBhbmQgbGlua2VyIGZsYWdzIG5lZWRlZCB0byBjb21waWxlIHRoaXMgYXBwbGljYXRpb24uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSWYgeW91J3JlIHJ1bm5pbmcgYSBub24tc3RhbmRhcmQgaW5zdGFsbGF0aW9uIChpZS4geW91J3ZlIGluc3RhbGxlZAotICAgICAgR1N0cmVhbWVyIGZyb20gc291cmNlIHlvdXJzZWxmIGluc3RlYWQgb2YgdXNpbmcgcHJlLWJ1aWx0IHBhY2thZ2VzKSwKLSAgICAgIG1ha2Ugc3VyZSB0aGUgPGNsYXNzbmFtZT5QS0dfQ09ORklHX1BBVEg8L2NsYXNzbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgICAgIGlzIHNldCB0byB0aGUgY29ycmVjdCBsb2NhdGlvbiAoPGZpbGVuYW1lPiRsaWJkaXIvcGtnY29uZmlnPC9maWxlbmFtZT4pLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEluIHRoZSB1bmxpa2VseSBjYXNlIHRoYXQgeW91IGFyZSB1c2luZyBhbiB1bmluc3RhbGxlZCBHU3RyZWFtZXIKLSAgICAgIHNldHVwIChpZS4gZ3N0LXVuaW5zdGFsbGVkKSwgeW91IHdpbGwgbmVlZCB0byB1c2UgbGlidG9vbCB0byBidWlsZCB0aGUKLSAgICAgIGhlbGxvIHdvcmxkIHByb2dyYW0sIGxpa2UgdGhpczogPGNvbW1hbmQ+bGlidG9vbCAtLW1vZGU9bGluayBnY2MgLVdhbGwKLSAgICAgIGhlbGxvd29ybGQuYyAtbyBoZWxsb3dvcmxkCi0gICAgICAkKHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdzdHJlYW1lci0mR1NUX0FQSV9WRVJTSU9OOyk8L2NvbW1hbmQ+LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFlvdSBjYW4gcnVuIHRoaXMgZXhhbXBsZSBhcHBsaWNhdGlvbiB3aXRoIDxjb21tYW5kPi4vaGVsbG93b3JsZAotICAgICAgZmlsZS5vZ2c8L2NvbW1hbmQ+LiBTdWJzdGl0dXRlIDxmaWxlbmFtZT5maWxlLm9nZzwvZmlsZW5hbWU+Ci0gICAgICB3aXRoIHlvdXIgZmF2b3VyaXRlIE9nZy9Wb3JiaXMgZmlsZS4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWhlbGxvLXdvcmxkLWNvbmNsdXNpb24iPgotICAgIDx0aXRsZT5Db25jbHVzaW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgY29uY2x1ZGVzIG91ciBmaXJzdCBleGFtcGxlLiBBcyB5b3Ugc2VlLCBzZXR0aW5nIHVwIGEgcGlwZWxpbmUKLSAgICAgIGlzIHZlcnkgbG93LWxldmVsIGJ1dCBwb3dlcmZ1bC4gWW91IHdpbGwgc2VlIGxhdGVyIGluIHRoaXMgbWFudWFsIGhvdwotICAgICAgeW91IGNhbiBjcmVhdGUgYSBtb3JlIHBvd2VyZnVsIG1lZGlhIHBsYXllciB3aXRoIGV2ZW4gbGVzcyBlZmZvcnQKLSAgICAgIHVzaW5nIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2VzLiBXZSB3aWxsIGRpc2N1c3MgYWxsIHRoYXQgaW4gPHhyZWYKLSAgICAgIGxpbmtlbmQ9InBhcnQtaGlnaGxldmVsIi8+LiBXZSB3aWxsIGZpcnN0LCBob3dldmVyLCBnbyBtb3JlIGluLWRlcHRoCi0gICAgICBpbnRvIG1vcmUgYWR2YW5jZWQgJkdTdHJlYW1lcjsgaW50ZXJuYWxzLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEl0IHNob3VsZCBiZSBjbGVhciBmcm9tIHRoZSBleGFtcGxlIHRoYXQgd2UgY2FuIHZlcnkgZWFzaWx5IHJlcGxhY2UKLSAgICAgIHRoZSA8cXVvdGU+ZmlsZXNyYzwvcXVvdGU+IGVsZW1lbnQgd2l0aCBzb21lIG90aGVyIGVsZW1lbnQgdGhhdAotICAgICAgcmVhZHMgZGF0YSBmcm9tIGEgbmV0d29yaywgb3Igc29tZSBvdGhlciBkYXRhIHNvdXJjZSBlbGVtZW50IHRoYXQKLSAgICAgIGlzIGJldHRlciBpbnRlZ3JhdGVkIHdpdGggeW91ciBkZXNrdG9wIGVudmlyb25tZW50LiBBbHNvLCB5b3UgY2FuCi0gICAgICB1c2Ugb3RoZXIgZGVjb2RlcnMgYW5kIHBhcnNlcnMvZGVtdXhlcnMgdG8gc3VwcG9ydCBvdGhlciBtZWRpYSB0eXBlcy4gWW91Ci0gICAgICBjYW4gdXNlIGFub3RoZXIgYXVkaW8gc2luayBpZiB5b3UncmUgbm90IHJ1bm5pbmcgTGludXgsIGJ1dCBNYWMgT1MgWCwKLSAgICAgIFdpbmRvd3Mgb3IgRnJlZUJTRCwgb3IgeW91IGNhbiBpbnN0ZWFkIHVzZSBhIGZpbGVzaW5rIHRvIHdyaXRlIGF1ZGlvCi0gICAgICBmaWxlcyB0byBkaXNrIGluc3RlYWQgb2YgcGxheWluZyB0aGVtIGJhY2suIEJ5IHVzaW5nIGFuIGF1ZGlvIGNhcmQKLSAgICAgIHNvdXJjZSwgeW91IGNhbiBldmVuIGRvIGF1ZGlvIGNhcHR1cmUgaW5zdGVhZCBvZiBwbGF5YmFjay4gQWxsIHRoaXMKLSAgICAgIHNob3dzIHRoZSByZXVzYWJpbGl0eSBvZiAmR1N0cmVhbWVyOyBlbGVtZW50cywgd2hpY2ggaXMgaXRzIGdyZWF0ZXN0Ci0gICAgICBhZHZhbnRhZ2UuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sIGIvZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTcxYmU2Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2Jhc2ljcy1pbml0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1pbml0Ij4KLSAgPHRpdGxlPkluaXRpYWxpemluZyAmR1N0cmVhbWVyOzwvdGl0bGU+Ci0gIDxwYXJhPiAKLSAgICBXaGVuIHdyaXRpbmcgYSAmR1N0cmVhbWVyOyBhcHBsaWNhdGlvbiwgeW91IGNhbiBzaW1wbHkgaW5jbHVkZQotICAgIDxmaWxlbmFtZT5nc3QvZ3N0Lmg8L2ZpbGVuYW1lPiB0byBnZXQgYWNjZXNzIHRvIHRoZSBsaWJyYXJ5Ci0gICAgZnVuY3Rpb25zLiBCZXNpZGVzIHRoYXQsIHlvdSB3aWxsIGFsc28gbmVlZCB0byBpbml0aWFsaXplIHRoZQotICAgICZHU3RyZWFtZXI7IGxpYnJhcnkuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24taW5pdC1jIj4KLSAgICA8dGl0bGU+U2ltcGxlIGluaXRpYWxpemF0aW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEJlZm9yZSB0aGUgJkdTdHJlYW1lcjsgbGlicmFyaWVzIGNhbiBiZSB1c2VkLAotICAgICAgPGZ1bmN0aW9uPmdzdF9pbml0PC9mdW5jdGlvbj4gaGFzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluCi0gICAgICBhcHBsaWNhdGlvbi4gVGhpcyBjYWxsIHdpbGwgcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uCi0gICAgICBvZiB0aGUgbGlicmFyeSBhcyB3ZWxsIGFzIHBhcnNlIHRoZSAmR1N0cmVhbWVyOy1zcGVjaWZpYyBjb21tYW5kCi0gICAgICBsaW5lIG9wdGlvbnMuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPiAKLSAgICAgIEEgdHlwaWNhbCBwcm9ncmFtICZFWEFGT09UOyB3b3VsZCBoYXZlIGNvZGUgdG8gaW5pdGlhbGl6ZQotICAgICAgJkdTdHJlYW1lcjsgdGhhdCBsb29rcyBsaWtlIHRoaXM6Ci0gICAgPC9wYXJhPgotICAgIDxleGFtcGxlIGlkPSJleC1pbml0LWMiPgotICAgICAgPHRpdGxlPkluaXRpYWxpemluZyBHU3RyZWFtZXI8L3RpdGxlPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCEtLSBleGFtcGxlLWJlZ2luIGluaXQuYyAtLT4KLSNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwotI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLQotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBjb25zdCBnY2hhciAqbmFub19zdHI7Ci0gIGd1aW50IG1ham9yLCBtaW5vciwgbWljcm8sIG5hbm87Ci0KLSAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKLQotICBnc3RfdmVyc2lvbiAoJmFtcDttYWpvciwgJmFtcDttaW5vciwgJmFtcDttaWNybywgJmFtcDtuYW5vKTsKLQotICBpZiAobmFubyA9PSAxKQotICAgIG5hbm9fc3RyID0gIihDVlMpIjsKLSAgZWxzZSBpZiAobmFubyA9PSAyKQotICAgIG5hbm9fc3RyID0gIihQcmVyZWxlYXNlKSI7Ci0gIGVsc2UKLSAgICBuYW5vX3N0ciA9ICIiOwotCi0gIHByaW50ZiAoIlRoaXMgcHJvZ3JhbSBpcyBsaW5rZWQgYWdhaW5zdCBHU3RyZWFtZXIgJWQuJWQuJWQgJXNcbiIsCi0gICAgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybywgbmFub19zdHIpOwotCi0gIHJldHVybiAwOwotfQotPCEtLSBleGFtcGxlLWVuZCBpbml0LmMgLS0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDwvZXhhbXBsZT4KLSAgICA8cGFyYT4KLSAgICAgIFVzZSB0aGUgPHN5bWJvbD5HU1RfVkVSU0lPTl9NQUpPUjwvc3ltYm9sPiwKLSAgICAgIDxzeW1ib2w+R1NUX1ZFUlNJT05fTUlOT1I8L3N5bWJvbD4gYW5kIDxzeW1ib2w+R1NUX1ZFUlNJT05fTUlDUk88L3N5bWJvbD4KLSAgICAgIG1hY3JvcyB0byBnZXQgdGhlICZHU3RyZWFtZXI7IHZlcnNpb24geW91IGFyZSBidWlsZGluZyBhZ2FpbnN0LCBvcgotICAgICAgdXNlIHRoZSBmdW5jdGlvbiA8ZnVuY3Rpb24+Z3N0X3ZlcnNpb248L2Z1bmN0aW9uPiB0byBnZXQgdGhlIHZlcnNpb24KLSAgICAgIHlvdXIgYXBwbGljYXRpb24gaXMgbGlua2VkIGFnYWluc3QuICZHU3RyZWFtZXI7IGN1cnJlbnRseSB1c2VzIGEKLSAgICAgIHNjaGVtZSB3aGVyZSB2ZXJzaW9ucyB3aXRoIHRoZSBzYW1lIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9ucyBhcmUKLSAgICAgIEFQSS0vIGFuZCBBQkktY29tcGF0aWJsZS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNhbGwgdGhlIDxmdW5jdGlvbj5nc3RfaW5pdDwvZnVuY3Rpb24+IGZ1bmN0aW9uCi0gICAgICB3aXRoIHR3byA8c3ltYm9sPk5VTEw8L3N5bWJvbD4gYXJndW1lbnRzLCBpbiB3aGljaCBjYXNlIG5vIGNvbW1hbmQgbGluZQotICAgICAgb3B0aW9ucyB3aWxsIGJlIHBhcnNlZCBieSA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4uCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MT4KLSAgICA8dGl0bGU+VGhlIEdPcHRpb24gaW50ZXJmYWNlPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFlvdSBjYW4gYWxzbyB1c2UgYSBHT3B0aW9uIHRhYmxlIHRvIGluaXRpYWxpemUgeW91ciBvd24gcGFyYW1ldGVycyBhcwotICAgICAgc2hvd24gaW4gdGhlIG5leHQgZXhhbXBsZToKLSAgICA8L3BhcmE+Ci0gICAgPGV4YW1wbGUgaWQ9ImV4LWdvcHRpb24tYyI+Ci0gICAgICA8dGl0bGU+SW5pdGlhbGlzYXRpb24gdXNpbmcgdGhlIEdPcHRpb24gaW50ZXJmYWNlPC90aXRsZT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhLS0gZXhhbXBsZS1iZWdpbiBnb3B0aW9uLmMgLS0+Ci0jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotCi1pbnQKLW1haW4gKGludCAgIGFyZ2MsCi0gICAgICBjaGFyICphcmd2W10pCi17Ci0gIGdib29sZWFuIHNpbGVudCA9IEZBTFNFOwotICBnY2hhciAqc2F2ZWZpbGUgPSBOVUxMOwotICBHT3B0aW9uQ29udGV4dCAqY3R4OwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIEdPcHRpb25FbnRyeSBlbnRyaWVzW10gPSB7Ci0gICAgeyAic2lsZW50IiwgJ3MnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJmFtcDtzaWxlbnQsCi0gICAgICAiZG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24iLCBOVUxMIH0sCi0gICAgeyAib3V0cHV0IiwgJ28nLCAwLCBHX09QVElPTl9BUkdfU1RSSU5HLCAmYW1wO3NhdmVmaWxlLAotICAgICAgInNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiLCAiRklMRSIgfSwKLSAgICB7IE5VTEwgfQotICB9OwotCi0gIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiLSBZb3VyIGFwcGxpY2F0aW9uIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBlbnRyaWVzLCBOVUxMKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0gIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYW1wO2FyZ2MsICZhbXA7YXJndiwgJmFtcDtlcnIpKSB7Ci0gICAgZ19wcmludCAoIkZhaWxlZCB0byBpbml0aWFsaXplOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmYW1wO2Vycik7Ci0gICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotICAgIHJldHVybiAxOwotICB9Ci0gIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLQotICBwcmludGYgKCJSdW4gbWUgd2l0aCAtLWhlbHAgdG8gc2VlIHRoZSBBcHBsaWNhdGlvbiBvcHRpb25zIGFwcGVuZGVkLlxuIik7Ci0KLSAgcmV0dXJuIDA7Ci19Ci08IS0tIGV4YW1wbGUtZW5kIGdvcHRpb24uYyAtLT4KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPC9leGFtcGxlPgotICAgIDxwYXJhPgotICAgICAgQXMgc2hvd24gaW4gdGhpcyBmcmFnbWVudCwgeW91IGNhbiB1c2UgYSA8dWxpbmsKLSAgICAgIHVybD0iaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2xpYi9zdGFibGUvZ2xpYi1Db21tYW5kbGluZS1vcHRpb24tcGFyc2VyLmh0bWwiCi0gICAgICB0eXBlPSJodHRwIj5HT3B0aW9uPC91bGluaz4gdGFibGUgdG8gZGVmaW5lIHlvdXIgYXBwbGljYXRpb24tc3BlY2lmaWMKLSAgICAgIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhbmQgcGFzcyB0aGlzIHRhYmxlIHRvIHRoZSBHTGliIGluaXRpYWxpemF0aW9uCi0gICAgICBmdW5jdGlvbiBhbG9uZyB3aXRoIHRoZSBvcHRpb24gZ3JvdXAgcmV0dXJuZWQgZnJvbSB0aGUKLSAgICAgIGZ1bmN0aW9uIDxmdW5jdGlvbj5nc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwPC9mdW5jdGlvbj4uIFlvdXIKLSAgICAgIGFwcGxpY2F0aW9uIG9wdGlvbnMgd2lsbCBiZSBwYXJzZWQgaW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkCi0gICAgICA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4gb3B0aW9ucy4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWwgYi9kb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkY2EzOTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjg2ICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLXBhZHMiIHhyZWZsYWJlbD0iUGFkcyBhbmQgY2FwYWJpbGl0aWVzIj4KLSAgPHRpdGxlPlBhZHMgYW5kIGNhcGFiaWxpdGllczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIEFzIHdlIGhhdmUgc2VlbiBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWVsZW1lbnRzIi8+LCB0aGUgcGFkcyBhcmUKLSAgICB0aGUgZWxlbWVudCdzIGludGVyZmFjZSB0byB0aGUgb3V0c2lkZSB3b3JsZC4gRGF0YSBzdHJlYW1zIGZyb20gb25lCi0gICAgZWxlbWVudCdzIHNvdXJjZSBwYWQgdG8gYW5vdGhlciBlbGVtZW50J3Mgc2luayBwYWQuIFRoZSBzcGVjaWZpYwotICAgIHR5cGUgb2YgbWVkaWEgdGhhdCB0aGUgZWxlbWVudCBjYW4gaGFuZGxlIHdpbGwgYmUgZXhwb3NlZCBieSB0aGUKLSAgICBwYWQncyBjYXBhYmlsaXRpZXMuIFdlIHdpbGwgdGFsayBtb3JlIG9uIGNhcGFiaWxpdGllcyBsYXRlciBpbiB0aGlzCi0gICAgY2hhcHRlciAoc2VlIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tY2FwcyIvPikuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tcGFkcyI+Ci0gICAgPHRpdGxlPlBhZHM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQSBwYWQgdHlwZSBpcyBkZWZpbmVkIGJ5IHR3byBwcm9wZXJ0aWVzOiBpdHMgZGlyZWN0aW9uIGFuZCBpdHMKLSAgICAgIGF2YWlsYWJpbGl0eS4gQXMgd2UndmUgbWVudGlvbmVkIGJlZm9yZSwgJkdTdHJlYW1lcjsgZGVmaW5lcyB0d28KLSAgICAgIHBhZCBkaXJlY3Rpb25zOiBzb3VyY2UgcGFkcyBhbmQgc2luayBwYWRzLiBUaGlzIHRlcm1pbm9sb2d5IGlzCi0gICAgICBkZWZpbmVkIGZyb20gdGhlIHZpZXcgb2Ygd2l0aGluIHRoZSBlbGVtZW50OiBlbGVtZW50cyByZWNlaXZlIGRhdGEKLSAgICAgIG9uIHRoZWlyIHNpbmsgcGFkcyBhbmQgZ2VuZXJhdGUgZGF0YSBvbiB0aGVpciBzb3VyY2UgcGFkcy4KLSAgICAgIFNjaGVtYXRpY2FsbHksIHNpbmsgcGFkcyBhcmUgZHJhd24gb24gdGhlIGxlZnQgc2lkZSBvZiBhbiBlbGVtZW50LAotICAgICAgd2hlcmVhcyBzb3VyY2UgcGFkcyBhcmUgZHJhd24gb24gdGhlIHJpZ2h0IHNpZGUgb2YgYW4gZWxlbWVudC4gSW4KLSAgICAgIHN1Y2ggZ3JhcGhzLCBkYXRhIGZsb3dzIGZyb20gbGVmdCB0byByaWdodC4KLSAgICAgIDxmb290bm90ZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gcmVhbGl0eSwgdGhlcmUgaXMgbm8gb2JqZWN0aW9uIHRvIGRhdGEgZmxvd2luZyBmcm9tIGEKLSAgICAgICAgICBzb3VyY2UgcGFkIHRvIHRoZSBzaW5rIHBhZCBvZiBhbiBlbGVtZW50IHVwc3RyZWFtICh0byB0aGUKLSAgICAgICAgICBsZWZ0IG9mIHRoaXMgZWxlbWVudCBpbiBkcmF3aW5ncykuIERhdGEgd2lsbCwgaG93ZXZlciwgYWx3YXlzCi0gICAgICAgICAgZmxvdyBmcm9tIGEgc291cmNlIHBhZCBvZiBvbmUgZWxlbWVudCB0byB0aGUgc2luayBwYWQgb2YKLSAgICAgICAgICBhbm90aGVyLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2Zvb3Rub3RlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgUGFkIGRpcmVjdGlvbnMgYXJlIHZlcnkgc2ltcGxlIGNvbXBhcmVkIHRvIHBhZCBhdmFpbGFiaWxpdHkuIEEgcGFkCi0gICAgICBjYW4gaGF2ZSBhbnkgb2YgdGhyZWUgYXZhaWxhYmlsaXRpZXM6IGFsd2F5cywgc29tZXRpbWVzIGFuZCBvbgotICAgICAgcmVxdWVzdC4gVGhlIG1lYW5pbmcgb2YgdGhvc2UgdGhyZWUgdHlwZXMgaXMgZXhhY3RseSBhcyBpdCBzYXlzOgotICAgICAgYWx3YXlzIHBhZHMgYWx3YXlzIGV4aXN0LCBzb21ldGltZXMgcGFkIGV4aXN0IG9ubHkgaW4gY2VydGFpbgotICAgICAgY2FzZXMgKGFuZCBjYW4gZGlzYXBwZWFyIHJhbmRvbWx5KSwgYW5kIG9uLXJlcXVlc3QgcGFkcyBhcHBlYXIKLSAgICAgIG9ubHkgaWYgZXhwbGljaXRseSByZXF1ZXN0ZWQgYnkgYXBwbGljYXRpb25zLgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1wYWRzLWR5bmFtaWMiPgotICAgICAgPHRpdGxlPkR5bmFtaWMgKG9yIHNvbWV0aW1lcykgcGFkczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU29tZSBlbGVtZW50cyBtaWdodCBub3QgaGF2ZSBhbGwgb2YgdGhlaXIgcGFkcyB3aGVuIHRoZSBlbGVtZW50IGlzCi0gICAgICAgIGNyZWF0ZWQuIFRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIHdpdGggYW4gT2dnIGRlbXV4ZXIgZWxlbWVudC4KLSAgICAgICAgVGhlIGVsZW1lbnQgd2lsbCByZWFkIHRoZSBPZ2cgc3RyZWFtIGFuZCBjcmVhdGUgZHluYW1pYyBwYWRzIGZvcgotICAgICAgICBlYWNoIGNvbnRhaW5lZCBlbGVtZW50YXJ5IHN0cmVhbSAodm9yYmlzLCB0aGVvcmEpIHdoZW4gaXQgZGV0ZWN0cwotICAgICAgICBzdWNoIGEgc3RyZWFtIGluIHRoZSBPZ2cgc3RyZWFtLiBMaWtld2lzZSwgaXQgd2lsbCBkZWxldGUgdGhlIHBhZAotICAgICAgICB3aGVuIHRoZSBzdHJlYW0gZW5kcy4gVGhpcyBwcmluY2lwbGUgaXMgdmVyeSB1c2VmdWwgZm9yIGRlbXV4ZXIKLSAgICAgICAgZWxlbWVudHMsIGZvciBleGFtcGxlLgotICAgICAgPC9wYXJhPiAKLSAgICAgIDxwYXJhPiAKLSAgICAgICAgUnVubmluZyA8YXBwbGljYXRpb24+Z3N0LWluc3BlY3Qgb2dnZGVtdXg8L2FwcGxpY2F0aW9uPiB3aWxsIHNob3cKLSAgICAgICAgdGhhdCB0aGUgZWxlbWVudCBoYXMgb25seSBvbmUgcGFkOiBhIHNpbmsgcGFkIGNhbGxlZCAnc2luaycuIFRoZQotICAgICAgICBvdGhlciBwYWRzIGFyZSA8cXVvdGU+ZG9ybWFudDwvcXVvdGU+LiBZb3UgY2FuIHNlZSB0aGlzIGluIHRoZSBwYWQKLSAgICAgICAgdGVtcGxhdGUgYmVjYXVzZSB0aGVyZSBpcyBhbiA8cXVvdGU+RXhpc3RzOiBTb21ldGltZXM8L3F1b3RlPgotCXByb3BlcnR5LiBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgT2dnIGZpbGUgeW91IHBsYXksIHRoZSBwYWRzIHdpbGwKLSAgICAgICAgYmUgY3JlYXRlZC4gV2Ugd2lsbCBzZWUgdGhhdCB0aGlzIGlzIHZlcnkgaW1wb3J0YW50IHdoZW4geW91IGFyZQotICAgICAgICBnb2luZyB0byBjcmVhdGUgZHluYW1pYyBwaXBlbGluZXMuIFlvdSBjYW4gYXR0YWNoIGEgc2lnbmFsIGhhbmRsZXIKLSAgICAgICAgdG8gYW4gZWxlbWVudCB0byBpbmZvcm0geW91IHdoZW4gdGhlIGVsZW1lbnQgaGFzIGNyZWF0ZWQgYSBuZXcgcGFkCi0gICAgICAgIGZyb20gb25lIG9mIGl0cyA8cXVvdGU+c29tZXRpbWVzPC9xdW90ZT4gcGFkIHRlbXBsYXRlcy4gVGhlCi0gICAgICAgIGZvbGxvd2luZyBwaWVjZSBvZiBjb2RlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGRvIHRoaXM6Ci0gICAgICA8L3BhcmE+IAotICAgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBwYWQuYyBhIC0tPgotI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLQotc3RhdGljIHZvaWQKLWNiX25ld19wYWQgKEdzdEVsZW1lbnQgKmVsZW1lbnQsCi0JICAgIEdzdFBhZCAgICAgKnBhZCwKLQkgICAgZ3BvaW50ZXIgICAgZGF0YSkKLXsKLSAgZ2NoYXIgKm5hbWU7Ci0KLSAgbmFtZSA9IGdzdF9wYWRfZ2V0X25hbWUgKHBhZCk7Ci0gIGdfcHJpbnQgKCJBIG5ldyBwYWQgJXMgd2FzIGNyZWF0ZWRcbiIsIG5hbWUpOwotICBnX2ZyZWUgKG5hbWUpOwotCi0gIC8qIGhlcmUsIHlvdSB3b3VsZCBzZXR1cCBhIG5ldyBwYWQgbGluayBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgcGFkICovCi08IS0tIGV4YW1wbGUtZW5kIHBhZC5jIGEgLS0+Wy4uXQotPCEtLSBleGFtcGxlLWJlZ2luIHBhZC5jIGIgLS0+Ci19Ci0KLWludCAKLW1haW4gKGludCAgIGFyZ2MsCi0gICAgICBjaGFyICphcmd2W10pIAotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNvdXJjZSwgKmRlbXV4OwotICBHTWFpbkxvb3AgKmxvb3A7Ci0KLSAgLyogaW5pdCAqLwotICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotCi0gIC8qIGNyZWF0ZSBlbGVtZW50cyAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJteV9waXBlbGluZSIpOwotICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgInNvdXJjZSIpOwotICBnX29iamVjdF9zZXQgKHNvdXJjZSwgImxvY2F0aW9uIiwgYXJndlsxXSwgTlVMTCk7Ci0gIGRlbXV4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgib2dnZGVtdXgiLCAiZGVtdXhlciIpOwotCi0gIC8qIHlvdSB3b3VsZCBub3JtYWxseSBjaGVjayB0aGF0IHRoZSBlbGVtZW50cyB3ZXJlIGNyZWF0ZWQgcHJvcGVybHkgKi8KLQotICAvKiBwdXQgdG9nZXRoZXIgYSBwaXBlbGluZSAqLwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNvdXJjZSwgZGVtdXgsIE5VTEwpOwotICBnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNvdXJjZSwgInNyYyIsIGRlbXV4LCAic2luayIpOwotCi0gIC8qIGxpc3RlbiBmb3IgbmV3bHkgY3JlYXRlZCBwYWRzICovCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGRlbXV4LCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAoY2JfbmV3X3BhZCksIE5VTEwpOwotCi0gIC8qIHN0YXJ0IHRoZSBwaXBlbGluZSAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotPCEtLWV4YW1wbGUtZW5kIHBhZC5jIGIgLS0+Ci1bLi5dPCEtLSBleGFtcGxlLWJlZ2luIHBhZC5jIGMgLS0+PCEtLQotICByZXR1cm4gMDsKLS0tPjwhLS0gZXhhbXBsZS1lbmQgcGFkLmMgYyAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBwYWQuYyBkIC0tPgotfQotICAgICAgPCEtLSBleGFtcGxlLWVuZCBwYWQuYyBkIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSXQgaXMgbm90IHVuY29tbW9uIHRvIGFkZCBlbGVtZW50cyB0byB0aGUgcGlwZWxpbmUgb25seSBmcm9tIHdpdGhpbgotICAgICAgICB0aGUgInBhZC1hZGRlZCIgY2FsbGJhY2suIElmIHlvdSBkbyB0aGlzLCBkb24ndAotICAgICAgICBmb3JnZXQgdG8gc2V0IHRoZSBzdGF0ZSBvZiB0aGUgbmV3bHktYWRkZWQgZWxlbWVudHMgdG8gdGhlIHRhcmdldAotICAgICAgICBzdGF0ZSBvZiB0aGUgcGlwZWxpbmUgdXNpbmcKLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X3NldF9zdGF0ZSAoKTwvZnVuY3Rpb24+IG9yCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50ICgpPC9mdW5jdGlvbj4uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1wYWRzLXJlcXVlc3QiPgotICAgICAgPHRpdGxlPlJlcXVlc3QgcGFkczwvdGl0bGU+Ci0gICAgICA8cGFyYT4gCi0gICAgICAgIEFuIGVsZW1lbnQgY2FuIGFsc28gaGF2ZSByZXF1ZXN0IHBhZHMuIFRoZXNlIHBhZHMgYXJlIG5vdCBjcmVhdGVkCi0gICAgICAgIGF1dG9tYXRpY2FsbHkgYnV0IGFyZSBvbmx5IGNyZWF0ZWQgb24gZGVtYW5kLiBUaGlzIGlzIHZlcnkgdXNlZnVsCi0gICAgICAgIGZvciBtdWx0aXBsZXhlcnMsIGFnZ3JlZ2F0b3JzIGFuZCB0ZWUgZWxlbWVudHMuIEFnZ3JlZ2F0b3JzIGFyZQotICAgICAgICBlbGVtZW50cyB0aGF0IG1lcmdlIHRoZSBjb250ZW50IG9mIHNldmVyYWwgaW5wdXQgc3RyZWFtcyB0b2dldGhlcgotICAgICAgICBpbnRvIG9uZSBvdXRwdXQgc3RyZWFtLiBUZWUgZWxlbWVudHMgYXJlIHRoZSByZXZlcnNlOiB0aGV5IGFyZQotICAgICAgICBlbGVtZW50cyB0aGF0IGhhdmUgb25lIGlucHV0IHN0cmVhbSBhbmQgY29weSB0aGlzIHN0cmVhbSB0byBlYWNoCi0gICAgICAgIG9mIHRoZWlyIG91dHB1dCBwYWRzLCB3aGljaCBhcmUgY3JlYXRlZCBvbiByZXF1ZXN0LiBXaGVuZXZlciBhbgotICAgICAgICBhcHBsaWNhdGlvbiBuZWVkcyBhbm90aGVyIGNvcHkgb2YgdGhlIHN0cmVhbSwgaXQgY2FuIHNpbXBseSByZXF1ZXN0Ci0gICAgICAgIGEgbmV3IG91dHB1dCBwYWQgZnJvbSB0aGUgdGVlIGVsZW1lbnQuCi0gICAgICA8L3BhcmE+IAotICAgICAgPHBhcmE+IAotICAgICAgICBUaGUgZm9sbG93aW5nIHBpZWNlIG9mIGNvZGUgc2hvd3MgaG93IHlvdSBjYW4gcmVxdWVzdCBhIG5ldyBvdXRwdXQKLSAgICAgICAgcGFkIGZyb20gYSA8cXVvdGU+dGVlPC9xdW90ZT4gZWxlbWVudDoKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyB2b2lkCi1zb21lX2Z1bmN0aW9uIChHc3RFbGVtZW50ICp0ZWUpCi17Ci0gIEdzdFBhZCAqIHBhZDsKLSAgZ2NoYXIgKm5hbWU7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmMlZCIpOwotICBuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAocGFkKTsKLSAgZ19wcmludCAoIkEgbmV3IHBhZCAlcyB3YXMgY3JlYXRlZFxuIiwgbmFtZSk7Ci0gIGdfZnJlZSAobmFtZSk7Ci0KLSAgLyogaGVyZSwgeW91IHdvdWxkIGxpbmsgdGhlIHBhZCAqLwotWy4uXQotCi0gIC8qIGFuZCwgYWZ0ZXIgZG9pbmcgdGhhdCwgZnJlZSBvdXIgcmVmZXJlbmNlICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBhZCkpOwotfQotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxwYXJhPiAKLSAgICAgICAgVGhlIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKCk8L2Z1bmN0aW9uPiBtZXRob2QKLSAgICAgICAgY2FuIGJlIHVzZWQgdG8gZ2V0IGEgcGFkIGZyb20gdGhlIGVsZW1lbnQgYmFzZWQgb24gdGhlIG5hbWUgb2YKLSAgICAgICAgdGhlIHBhZCB0ZW1wbGF0ZS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byByZXF1ZXN0IGEgcGFkIHRoYXQgaXMKLSAgICAgICAgY29tcGF0aWJsZSB3aXRoIGFub3RoZXIgcGFkIHRlbXBsYXRlLiBUaGlzIGlzIHZlcnkgdXNlZnVsIGlmCi0gICAgICAgIHlvdSB3YW50IHRvIGxpbmsgYW4gZWxlbWVudCB0byBhIG11bHRpcGxleGVyIGVsZW1lbnQgYW5kIHlvdQotICAgICAgICBuZWVkIHRvIHJlcXVlc3QgYSBwYWQgdGhhdCBpcyBjb21wYXRpYmxlLiBUaGUgbWV0aG9kCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQgKCk8L2Z1bmN0aW9uPiBjYW4gYmUKLSAgICAgICAgdXNlZCB0byByZXF1ZXN0IGEgY29tcGF0aWJsZSBwYWQsIGFzIHNob3duIGluIHRoZSBuZXh0IGV4YW1wbGUuCi0gICAgICAgIEl0IHdpbGwgcmVxdWVzdCBhIGNvbXBhdGlibGUgcGFkIGZyb20gYW4gT2dnIG11bHRpcGxleGVyIGZyb20KLSAgICAgICAgYW55IGlucHV0LgotICAgICAgPC9wYXJhPiAKLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyB2b2lkCi1saW5rX3RvX211bHRpcGxleGVyIChHc3RQYWQgICAgICp0b2xpbmtfcGFkLAotCQkgICAgIEdzdEVsZW1lbnQgKm11eCkKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIGdjaGFyICpzcmNuYW1lLCAqc2lua25hbWU7Ci0KLSAgc3JjbmFtZSA9IGdzdF9wYWRfZ2V0X25hbWUgKHRvbGlua19wYWQpOwotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQgKG11eCwgdG9saW5rX3BhZCk7Ci0gIGdzdF9wYWRfbGluayAodG9saW5rcGFkLCBwYWQpOwotICBzaW5rbmFtZSA9IGdzdF9wYWRfZ2V0X25hbWUgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBhZCkpOwotCi0gIGdfcHJpbnQgKCJBIG5ldyBwYWQgJXMgd2FzIGNyZWF0ZWQgYW5kIGxpbmtlZCB0byAlc1xuIiwgc2lua25hbWUsIHNyY25hbWUpOwotICBnX2ZyZWUgKHNpbmtuYW1lKTsKLSAgZ19mcmVlIChzcmNuYW1lKTsKLX0KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPC9zZWN0Mj4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tY2FwcyI+Ci0gICAgPHRpdGxlPkNhcGFiaWxpdGllcyBvZiBhIHBhZDwvdGl0bGU+Ci0gICAgPHBhcmE+IAotICAgICAgU2luY2UgdGhlIHBhZHMgcGxheSBhIHZlcnkgaW1wb3J0YW50IHJvbGUgaW4gaG93IHRoZSBlbGVtZW50IGlzCi0gICAgICB2aWV3ZWQgYnkgdGhlIG91dHNpZGUgd29ybGQsIGEgbWVjaGFuaXNtIGlzIGltcGxlbWVudGVkIHRvIGRlc2NyaWJlCi0gICAgICB0aGUgZGF0YSB0aGF0IGNhbiBmbG93IG9yIGN1cnJlbnRseSBmbG93cyB0aHJvdWdoIHRoZSBwYWQgYnkgdXNpbmcKLSAgICAgIGNhcGFiaWxpdGllcy4gSGVyZSwgd2Ugd2lsbCBicmllZmx5IGRlc2NyaWJlIHdoYXQgY2FwYWJpbGl0aWVzIGFyZQotICAgICAgYW5kIGhvdyB0byB1c2UgdGhlbSwgZW5vdWdoIHRvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25jZXB0LgotICAgICAgRm9yIGFuIGluLWRlcHRoIGxvb2sgaW50byBjYXBhYmlsaXRpZXMgYW5kIGEgbGlzdCBvZiBhbGwgY2FwYWJpbGl0aWVzCi0gICAgICBkZWZpbmVkIGluICZHU3RyZWFtZXI7LCBzZWUgdGhlIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9wd2cvaHRtbC9pbmRleC5odG1sIj5QbHVnaW4KLSAgICAgIFdyaXRlcnMgR3VpZGU8L3VsaW5rPi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBDYXBhYmlsaXRpZXMgYXJlIGF0dGFjaGVkIHRvIHBhZCB0ZW1wbGF0ZXMgYW5kIHRvIHBhZHMuIEZvciBwYWQKLSAgICAgIHRlbXBsYXRlcywgaXQgd2lsbCBkZXNjcmliZSB0aGUgdHlwZXMgb2YgbWVkaWEgdGhhdCBtYXkgc3RyZWFtCi0gICAgICBvdmVyIGEgcGFkIGNyZWF0ZWQgZnJvbSB0aGlzIHRlbXBsYXRlLiBGb3IgcGFkcywgaXQgY2FuIGVpdGhlcgotICAgICAgYmUgYSBsaXN0IG9mIHBvc3NpYmxlIGNhcHMgKHVzdWFsbHkgYSBjb3B5IG9mIHRoZSBwYWQgdGVtcGxhdGUncwotICAgICAgY2FwYWJpbGl0aWVzKSwgaW4gd2hpY2ggY2FzZSB0aGUgcGFkIGlzIG5vdCB5ZXQgbmVnb3RpYXRlZCwgb3IgaXQKLSAgICAgIGlzIHRoZSB0eXBlIG9mIG1lZGlhIHRoYXQgY3VycmVudGx5IHN0cmVhbXMgb3ZlciB0aGlzIHBhZCwgaW4KLSAgICAgIHdoaWNoIGNhc2UgdGhlIHBhZCBoYXMgYmVlbiBuZWdvdGlhdGVkIGFscmVhZHkuCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWNhcHMtc3RydWN0dXJlIj4KLSAgICAgIDx0aXRsZT5EaXNzZWN0aW5nIGNhcGFiaWxpdGllczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQSBwYWQncyBjYXBhYmlsaXRpZXMgYXJlIGRlc2NyaWJlZCBpbiBhIDxjbGFzc25hbWU+R3N0Q2FwczwvY2xhc3NuYW1lPgotICAgICAgICBvYmplY3QuIEludGVybmFsbHksIGEgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICAgIHVybD0iJlVSTEFQSTtnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIj48Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT48L3VsaW5rPgotICAgICAgICB3aWxsIGNvbnRhaW4gb25lIG9yIG1vcmUgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICAgIHVybD0iJlVSTEFQSTtnc3RyZWFtZXItR3N0U3RydWN0dXJlLmh0bWwiPjxjbGFzc25hbWU+R3N0U3RydWN0dXJlPC9jbGFzc25hbWU+PC91bGluaz4KLSAgICAgICAgdGhhdCB3aWxsIGRlc2NyaWJlIG9uZSBtZWRpYSB0eXBlLiBBIG5lZ290aWF0ZWQgcGFkIHdpbGwgaGF2ZQotICAgICAgICBjYXBhYmlsaXRpZXMgc2V0IHRoYXQgY29udGFpbiBleGFjdGx5IDxlbXBoYXNpcz5vbmU8L2VtcGhhc2lzPgotICAgICAgICBzdHJ1Y3R1cmUuIEFsc28sIHRoaXMgc3RydWN0dXJlIHdpbGwgY29udGFpbiBvbmx5Ci0gICAgICAgIDxlbXBoYXNpcz5maXhlZDwvZW1waGFzaXM+IHZhbHVlcy4gVGhlc2UgY29uc3RyYWludHMgYXJlIG5vdAotICAgICAgICB0cnVlIGZvciB1bm5lZ290aWF0ZWQgcGFkcyBvciBwYWQgdGVtcGxhdGVzLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEFzIGFuIGV4YW1wbGUsIGJlbG93IGlzIGEgZHVtcCBvZiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZQotICAgICAgICA8cXVvdGU+dm9yYmlzZGVjPC9xdW90ZT4gZWxlbWVudCwgd2hpY2ggeW91IHdpbGwgZ2V0IGJ5IHJ1bm5pbmcKLSAgICAgICAgPGNvbW1hbmQ+Z3N0LWluc3BlY3Qgdm9yYmlzZGVjPC9jb21tYW5kPi4gWW91IHdpbGwgc2VlIHR3byBwYWRzOgotICAgICAgICBhIHNvdXJjZSBhbmQgYSBzaW5rIHBhZC4gQm90aCBvZiB0aGVzZSBwYWRzIGFyZSBhbHdheXMgYXZhaWxhYmxlLAotICAgICAgICBhbmQgYm90aCBoYXZlIGNhcGFiaWxpdGllcyBhdHRhY2hlZCB0byB0aGVtLiBUaGUgc2luayBwYWQgd2lsbAotICAgICAgICBhY2NlcHQgdm9yYmlzLWVuY29kZWQgYXVkaW8gZGF0YSwgd2l0aCB0aGUgbWVkaWEgdHlwZQotICAgICAgICA8cXVvdGU+YXVkaW8veC12b3JiaXM8L3F1b3RlPi4gVGhlIHNvdXJjZSBwYWQgd2lsbCBiZSB1c2VkCi0gICAgICAgIHRvIHNlbmQgcmF3IChkZWNvZGVkKSBhdWRpbyBzYW1wbGVzIHRvIHRoZSBuZXh0IGVsZW1lbnQsIHdpdGgKLSAgICAgICAgYSByYXcgYXVkaW8gbWVkaWEgdHlwZSAoaW4gdGhpcyBjYXNlLAotCTxxdW90ZT5hdWRpby94LXJhdzwvcXVvdGU+KS4gIFRoZSBzb3VyY2UgcGFkIHdpbGwgYWxzbwotICAgICAgICBjb250YWluIHByb3BlcnRpZXMgZm9yIHRoZSBhdWRpbyBzYW1wbGVyYXRlIGFuZCB0aGUgYW1vdW50IG9mCi0gICAgICAgIGNoYW5uZWxzLCBwbHVzIHNvbWUgbW9yZSB0aGF0IHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0Ci0gICAgICAgIGZvciBub3cuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLVBhZCBUZW1wbGF0ZXM6Ci0gIFNSQyB0ZW1wbGF0ZTogJ3NyYycKLSAgICBBdmFpbGFiaWxpdHk6IEFsd2F5cwotICAgIENhcGFiaWxpdGllczoKLSAgICAgIGF1ZGlvL3gtcmF3Ci0gICAgICAgICAgICAgICAgIGZvcm1hdDogRjMyTEUKLSAgICAgICAgICAgICAgICAgICByYXRlOiBbIDEsIDIxNDc0ODM2NDcgXQotICAgICAgICAgICAgICAgY2hhbm5lbHM6IFsgMSwgMjU2IF0KLQotICBTSU5LIHRlbXBsYXRlOiAnc2luaycKLSAgICBBdmFpbGFiaWxpdHk6IEFsd2F5cwotICAgIENhcGFiaWxpdGllczoKLSAgICAgIGF1ZGlvL3gtdm9yYmlzCi0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tY2Fwcy1wcm9wcyI+Ci0gICAgICA8dGl0bGU+UHJvcGVydGllcyBhbmQgdmFsdWVzPC90aXRsZT4KLSAgICAgIDxwYXJhPiAKLSAgICAgICAgUHJvcGVydGllcyBhcmUgdXNlZCB0byBkZXNjcmliZSBleHRyYSBpbmZvcm1hdGlvbiBmb3IgCi0gICAgICAgIGNhcGFiaWxpdGllcy4gQSBwcm9wZXJ0eSBjb25zaXN0cyBvZiBhIGtleSAoYSBzdHJpbmcpIGFuZAotICAgICAgICBhIHZhbHVlLiBUaGVyZSBhcmUgZGlmZmVyZW50IHBvc3NpYmxlIHZhbHVlIHR5cGVzIHRoYXQgY2FuIGJlIHVzZWQ6Ci0gICAgICA8L3BhcmE+IAotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQmFzaWMgdHlwZXMsIHRoaXMgY2FuIGJlIHByZXR0eSBtdWNoIGFueQotICAgICAgICAgICAgPGNsYXNzbmFtZT5HVHlwZTwvY2xhc3NuYW1lPiByZWdpc3RlcmVkIHdpdGggR2xpYi4gVGhvc2UKLSAgICAgICAgICAgIHByb3BlcnRpZXMgaW5kaWNhdGUgYSBzcGVjaWZpYywgbm9uLWR5bmFtaWMgdmFsdWUgZm9yIHRoaXMKLSAgICAgICAgICAgIHByb3BlcnR5LiBFeGFtcGxlcyBpbmNsdWRlOgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBbiBpbnRlZ2VyIHZhbHVlICg8Y2xhc3NuYW1lPkdfVFlQRV9JTlQ8L2NsYXNzbmFtZT4pOgotICAgICAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSBoYXMgdGhpcyBleGFjdCB2YWx1ZS4gCi0gICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPgotICAgIAkgICAgICAgIEEgYm9vbGVhbiB2YWx1ZSAoPGNsYXNzbmFtZT5HX1RZUEVfQk9PTEVBTjwvY2xhc3NuYW1lPik6Ci0gICAgICAgICAgICAgICAgdGhlIHByb3BlcnR5IGlzIGVpdGhlciBUUlVFIG9yIEZBTFNFLgotICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBIGZsb2F0IHZhbHVlICg8Y2xhc3NuYW1lPkdfVFlQRV9GTE9BVDwvY2xhc3NuYW1lPik6Ci0gICAgICAgICAgICAgICAgdGhlIHByb3BlcnR5IGhhcyB0aGlzIGV4YWN0IGZsb2F0aW5nIHBvaW50IHZhbHVlLgotICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBBIHN0cmluZyB2YWx1ZSAoPGNsYXNzbmFtZT5HX1RZUEVfU1RSSU5HPC9jbGFzc25hbWU+KToKLSAgICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgY29udGFpbnMgYSBVVEYtOCBzdHJpbmcuCi0gICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIEEgZnJhY3Rpb24gdmFsdWUgKDxjbGFzc25hbWU+R1NUX1RZUEVfRlJBQ1RJT048L2NsYXNzbmFtZT4pOgotICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEgZnJhY3Rpb24gZXhwcmVzc2VkIGJ5IGFuIGludGVnZXIgbnVtZXJhdG9yIGFuZAotICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yLgotICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBSYW5nZSB0eXBlcyBhcmUgPGNsYXNzbmFtZT5HVHlwZTwvY2xhc3NuYW1lPnMgcmVnaXN0ZXJlZCBieQotICAgICAgICAgICAgJkdTdHJlYW1lcjsgdG8gaW5kaWNhdGUgYSByYW5nZSBvZiBwb3NzaWJsZSB2YWx1ZXMuIFRoZXkgYXJlCi0gICAgICAgICAgICB1c2VkIGZvciBpbmRpY2F0aW5nIGFsbG93ZWQgYXVkaW8gc2FtcGxlcmF0ZSB2YWx1ZXMgb3IKLSAgICAgICAgICAgIHN1cHBvcnRlZCB2aWRlbyBzaXplcy4gVGhlIHR3byB0eXBlcyBkZWZpbmVkIGluICZHU3RyZWFtZXI7Ci0gICAgICAgICAgICBhcmU6Ci0gICAgICAgICAgPC9wYXJhPgotICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQW4gaW50ZWdlciByYW5nZSB2YWx1ZQotICAgICAgICAgICAgICAgICg8Y2xhc3NuYW1lPkdTVF9UWVBFX0lOVF9SQU5HRTwvY2xhc3NuYW1lPik6IHRoZSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgIGRlbm90ZXMgYSByYW5nZSBvZiBwb3NzaWJsZSBpbnRlZ2Vycywgd2l0aCBhIGxvd2VyIGFuZCBhbgotICAgICAgICAgICAgICAgIHVwcGVyIGJvdW5kYXJ5LiBUaGUgPHF1b3RlPnZvcmJpc2RlYzwvcXVvdGU+IGVsZW1lbnQsIGZvcgotICAgICAgICAgICAgICAgIGV4YW1wbGUsIGhhcyBhIHJhdGUgcHJvcGVydHkgdGhhdCBjYW4gYmUgYmV0d2VlbiA4MDAwIGFuZAotICAgICAgICAgICAgICAgIDUwMDAwLgotICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICA8cGFyYT4KLSAgICAJICAgICAgICBBIGZsb2F0IHJhbmdlIHZhbHVlCi0gICAgICAgICAgICAgICAgKDxjbGFzc25hbWU+R1NUX1RZUEVfRkxPQVRfUkFOR0U8L2NsYXNzbmFtZT4pOiB0aGUgcHJvcGVydHkKLSAgICAgICAgICAgICAgICBkZW5vdGVzIGEgcmFuZ2Ugb2YgcG9zc2libGUgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLCB3aXRoIGEKLSAgICAgICAgICAgICAgICBsb3dlciBhbmQgYW4gdXBwZXIgYm91bmRhcnkuCi0gICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgIDxwYXJhPgotICAgIAkgICAgICAgIEEgZnJhY3Rpb24gcmFuZ2UgdmFsdWUKLSAgICAgICAgICAgICAgICAoPGNsYXNzbmFtZT5HU1RfVFlQRV9GUkFDVElPTl9SQU5HRTwvY2xhc3NuYW1lPik6IHRoZSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgIGRlbm90ZXMgYSByYW5nZSBvZiBwb3NzaWJsZSBmcmFjdGlvbiB2YWx1ZXMsIHdpdGggYQotICAgICAgICAgICAgICAgIGxvd2VyIGFuZCBhbiB1cHBlciBib3VuZGFyeS4KLSAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgIAkgICAgQSBsaXN0IHZhbHVlICg8Y2xhc3NuYW1lPkdTVF9UWVBFX0xJU1Q8L2NsYXNzbmFtZT4pOiB0aGUKLSAgICAgICAgICAgIHByb3BlcnR5IGNhbiB0YWtlIGFueSB2YWx1ZSBmcm9tIGEgbGlzdCBvZiBiYXNpYyB2YWx1ZXMKLSAgICAgICAgICAgIGdpdmVuIGluIHRoaXMgbGlzdC4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBFeGFtcGxlOiBjYXBzIHRoYXQgZXhwcmVzcyB0aGF0IGVpdGhlcgotICAgICAgICAgICAgYSBzYW1wbGUgcmF0ZSBvZiA0NDEwMCBIeiBhbmQgYSBzYW1wbGUgcmF0ZSBvZiA0ODAwMCBIegotICAgICAgICAgICAgaXMgc3VwcG9ydGVkIHdvdWxkIHVzZSBhIGxpc3Qgb2YgaW50ZWdlciB2YWx1ZXMsIHdpdGgKLSAgICAgICAgICAgIG9uZSB2YWx1ZSBiZWluZyA0NDEwMCBhbmQgb25lIHZhbHVlIGJlaW5nIDQ4MDAwLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQW4gYXJyYXkgdmFsdWUgKDxjbGFzc25hbWU+R1NUX1RZUEVfQVJSQVk8L2NsYXNzbmFtZT4pOiB0aGUKLSAgICAgICAgICAgIHByb3BlcnR5IGlzIGFuIGFycmF5IG9mIHZhbHVlcy4gRWFjaCB2YWx1ZSBpbiB0aGUgYXJyYXkgaXMgYQotICAgICAgICAgICAgZnVsbCB2YWx1ZSBvbiBpdHMgb3duLCB0b28uIEFsbCB2YWx1ZXMgaW4gdGhlIGFycmF5IHNob3VsZCBiZQotICAgICAgICAgICAgb2YgdGhlIHNhbWUgZWxlbWVudGFyeSB0eXBlLiBUaGlzIG1lYW5zIHRoYXQgYW4gYXJyYXkgY2FuCi0gICAgICAgICAgICBjb250YWluIGFueSBjb21iaW5hdGlvbiBvZiBpbnRlZ2VycywgbGlzdHMgb2YgaW50ZWdlcnMsIGludGVnZXIKLSAgICAgICAgICAgIHJhbmdlcyB0b2dldGhlciwgYW5kIHRoZSBzYW1lIGZvciBmbG9hdHMgb3Igc3RyaW5ncywgYnV0IGl0IGNhbgotICAgICAgICAgICAgbm90IGNvbnRhaW4gYm90aCBmbG9hdHMgYW5kIGludHMgYXQgdGhlIHNhbWUgdGltZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBFeGFtcGxlOiBmb3IgYXVkaW8gd2hlcmUgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gY2hhbm5lbHMgaW52b2x2ZWQKLSAgICAgICAgICAgIHRoZSBjaGFubmVsIGxheW91dCBuZWVkcyB0byBiZSBzcGVjaWZpZWQgKGZvciBvbmUgYW5kIHR3byBjaGFubmVsCi0gICAgICAgICAgICBhdWRpbyB0aGUgY2hhbm5lbCBsYXlvdXQgaXMgaW1wbGljaXQgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UgaW4gdGhlCi0gICAgICAgICAgICBjYXBzKS4gU28gdGhlIGNoYW5uZWwgbGF5b3V0IHdvdWxkIGJlIGFuIGFycmF5IG9mIGludGVnZXIgZW51bQotICAgICAgICAgICAgdmFsdWVzIHdoZXJlIGVhY2ggZW51bSB2YWx1ZSByZXByZXNlbnRzIGEgbG91ZHNwZWFrZXIgcG9zaXRpb24uCi0gICAgICAgICAgICBVbmxpa2UgYSA8Y2xhc3NuYW1lPkdTVF9UWVBFX0xJU1Q8L2NsYXNzbmFtZT4sIHRoZSB2YWx1ZXMgaW4gYW4KLSAgICAgICAgICAgIGFycmF5IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSB3aG9sZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1jYXBzLWFwaSI+Ci0gICAgPHRpdGxlPldoYXQgY2FwYWJpbGl0aWVzIGFyZSB1c2VkIGZvcjwvdGl0bGU+Ci0gICAgPHBhcmE+IAotICAgICAgQ2FwYWJpbGl0aWVzIChzaG9ydDogY2FwcykgZGVzY3JpYmUgdGhlIHR5cGUgb2YgZGF0YSB0aGF0IGlzIHN0cmVhbWVkCi0gICAgICBiZXR3ZWVuIHR3byBwYWRzLCBvciB0aGF0IG9uZSBwYWQgKHRlbXBsYXRlKSBzdXBwb3J0cy4gVGhpcyBtYWtlcyB0aGVtCi0gICAgICB2ZXJ5IHVzZWZ1bCBmb3IgdmFyaW91cyBwdXJwb3NlczoKLSAgICA8L3BhcmE+IAotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEF1dG9wbHVnZ2luZzogYXV0b21hdGljYWxseSBmaW5kaW5nIGVsZW1lbnRzIHRvIGxpbmsgdG8gYQotICAgICAgICAgIHBhZCBiYXNlZCBvbiBpdHMgY2FwYWJpbGl0aWVzLiBBbGwgYXV0b3BsdWdnZXJzIHVzZSB0aGlzCi0gICAgICAgICAgbWV0aG9kLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBDb21wYXRpYmlsaXR5IGRldGVjdGlvbjogd2hlbiB0d28gcGFkcyBhcmUgbGlua2VkLCAmR1N0cmVhbWVyOwotICAgICAgICAgIGNhbiB2ZXJpZnkgaWYgdGhlIHR3byBwYWRzIGFyZSB0YWxraW5nIGFib3V0IHRoZSBzYW1lIG1lZGlhCi0gICAgICAgICAgdHlwZS4gVGhlIHByb2Nlc3Mgb2YgbGlua2luZyB0d28gcGFkcyBhbmQgY2hlY2tpbmcgaWYgdGhleQotICAgICAgICAgIGFyZSBjb21wYXRpYmxlIGlzIGNhbGxlZCA8cXVvdGU+Y2FwcyBuZWdvdGlhdGlvbjwvcXVvdGU+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBNZXRhZGF0YTogYnkgcmVhZGluZyB0aGUgY2FwYWJpbGl0aWVzIGZyb20gYSBwYWQsIGFwcGxpY2F0aW9ucwotICAgICAgICAgIGNhbiBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0eXBlIG9mIG1lZGlhIHRoYXQgaXMgYmVpbmcKLSAgICAgICAgICBzdHJlYW1lZCBvdmVyIHRoZSBwYWQsIHdoaWNoIGlzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJlYW0KLSAgICAgICAgICB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwbGF5ZWQgYmFjay4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRmlsdGVyaW5nOiBhbiBhcHBsaWNhdGlvbiBjYW4gdXNlIGNhcGFiaWxpdGllcyB0byBsaW1pdCB0aGUKLSAgICAgICAgICBwb3NzaWJsZSBtZWRpYSB0eXBlcyB0aGF0IGNhbiBzdHJlYW0gYmV0d2VlbiB0d28gcGFkcyB0byBhCi0gICAgICAgICAgc3BlY2lmaWMgc3Vic2V0IG9mIHRoZWlyIHN1cHBvcnRlZCBzdHJlYW0gdHlwZXMuIEFuIGFwcGxpY2F0aW9uCi0gICAgICAgICAgY2FuLCBmb3IgZXhhbXBsZSwgdXNlIDxxdW90ZT5maWx0ZXJlZCBjYXBzPC9xdW90ZT4gdG8gc2V0IGEKLSAgICAgICAgICBzcGVjaWZpYyAoZml4ZWQgb3Igbm9uLWZpeGVkKSB2aWRlbyBzaXplIHRoYXQgc2hvdWxkIHN0cmVhbQotICAgICAgICAgIGJldHdlZW4gdHdvIHBhZHMuIFlvdSB3aWxsIHNlZSBhbiBleGFtcGxlIG9mIGZpbHRlcmVkIGNhcHMKLSAgICAgICAgICBsYXRlciBpbiB0aGlzIG1hbnVhbCwgaW4gPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1kYXRhLXNwb29mIi8+LgotICAgICAgICAgIFlvdSBjYW4gZG8gY2FwcyBmaWx0ZXJpbmcgYnkgaW5zZXJ0aW5nIGEgY2Fwc2ZpbHRlciBlbGVtZW50IGludG8KLSAgICAgICAgICB5b3VyIHBpcGVsaW5lIGFuZCBzZXR0aW5nIGl0cyA8cXVvdGU+Y2FwczwvcXVvdGU+IHByb3BlcnR5LiBDYXBzCi0gICAgICAgICAgZmlsdGVycyBhcmUgb2Z0ZW4gcGxhY2VkIGFmdGVyIGNvbnZlcnRlciBlbGVtZW50cyBsaWtlIGF1ZGlvY29udmVydCwKLSAgICAgICAgICBhdWRpb3Jlc2FtcGxlLCB2aWRlb2NvbnZlcnQgb3IgdmlkZW9zY2FsZSB0byBmb3JjZSB0aG9zZQotICAgICAgICAgIGNvbnZlcnRlcnMgdG8gY29udmVydCBkYXRhIHRvIGEgc3BlY2lmaWMgb3V0cHV0IGZvcm1hdCBhdCBhCi0gICAgICAgICAgY2VydGFpbiBwb2ludCBpbiBhIHN0cmVhbS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1jYXBzLW1ldGFkYXRhIj4KLSAgICAgIDx0aXRsZT5Vc2luZyBjYXBhYmlsaXRpZXMgZm9yIG1ldGFkYXRhPC90aXRsZT4KLSAgICAgIDxwYXJhPiAKLSAgICAgICAgQSBwYWQgY2FuIGhhdmUgYSBzZXQgKGkuZS4gb25lIG9yIG1vcmUpIG9mIGNhcGFiaWxpdGllcyBhdHRhY2hlZAotICAgICAgICB0byBpdC4gQ2FwYWJpbGl0aWVzICg8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4pIGFyZSByZXByZXNlbnRlZAotICAgICAgICBhcyBhbiBhcnJheSBvZiBvbmUgb3IgbW9yZSA8Y2xhc3NuYW1lPkdzdFN0cnVjdHVyZTwvY2xhc3NuYW1lPnMsIGFuZAotICAgICAgICBlYWNoIDxjbGFzc25hbWU+R3N0U3RydWN0dXJlPC9jbGFzc25hbWU+IGlzIGFuIGFycmF5IG9mIGZpZWxkcyB3aGVyZQotICAgICAgICBlYWNoIGZpZWxkIGNvbnNpc3RzIG9mIGEgZmllbGQgbmFtZSBzdHJpbmcgKGUuZy4gIndpZHRoIikgYW5kIGEKLSAgICAgICAgdHlwZWQgdmFsdWUgKGUuZy4gPGNsYXNzbmFtZT5HX1RZUEVfSU5UPC9jbGFzc25hbWU+IG9yCi0gICAgICAgIDxjbGFzc25hbWU+R1NUX1RZUEVfSU5UX1JBTkdFPC9jbGFzc25hbWU+KS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBOb3RlIHRoYXQgdGhlcmUgaXMgYSBkaXN0aW5jdCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCi0gICAgICAgIDxlbXBoYXNpcz5wb3NzaWJsZTwvZW1waGFzaXM+IGNhcGFiaWxpdGllcyBvZiBhIHBhZCAoaWUuIHVzdWFsbHkgd2hhdAotICAgICAgICB5b3UgZmluZCBhcyBjYXBzIG9mIHBhZCB0ZW1wbGF0ZXMgYXMgdGhleSBhcmUgc2hvd24gaW4gZ3N0LWluc3BlY3QpLAotICAgICAgICB0aGUgPGVtcGhhc2lzPmFsbG93ZWQ8L2VtcGhhc2lzPiBjYXBzIG9mIGEgcGFkIChjYW4gYmUgdGhlIHNhbWUgYXMKLSAgICAgICAgdGhlIHBhZCdzIHRlbXBsYXRlIGNhcHMgb3IgYSBzdWJzZXQgb2YgdGhlbSwgZGVwZW5kaW5nIG9uIHRoZSBwb3NzaWJsZQotICAgICAgICBjYXBzIG9mIHRoZSBwZWVyIHBhZCkgYW5kIGxhc3RseSA8ZW1waGFzaXM+bmVnb3RpYXRlZDwvZW1waGFzaXM+IGNhcHMKLSAgICAgICAgKHRoZXNlIGRlc2NyaWJlIHRoZSBleGFjdCBmb3JtYXQgb2YgYSBzdHJlYW0gb3IgYnVmZmVyIGFuZCBjb250YWluCi0gICAgICAgIGV4YWN0bHkgb25lIHN0cnVjdHVyZSBhbmQgaGF2ZSBubyB2YXJpYWJsZSBiaXRzIGxpa2UgcmFuZ2VzIG9yIGxpc3RzLAotICAgICAgICBpZS4gdGhleSBhcmUgZml4ZWQgY2FwcykuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgWW91IGNhbiBnZXQgdmFsdWVzIG9mIHByb3BlcnRpZXMgaW4gYSBzZXQgb2YgY2FwYWJpbGl0aWVzCi0gICAgICAgIGJ5IHF1ZXJ5aW5nIGluZGl2aWR1YWwgcHJvcGVydGllcyBvZiBvbmUgc3RydWN0dXJlLiBZb3UgY2FuIGdldAotICAgICAgICBhIHN0cnVjdHVyZSBmcm9tIGEgY2FwcyB1c2luZwotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoKTwvZnVuY3Rpb24+IGFuZCB0aGUgbnVtYmVyIG9mCi0gICAgICAgIHN0cnVjdHVyZXMgaW4gYSA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4gdXNpbmcKLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9jYXBzX2dldF9zaXplICgpPC9mdW5jdGlvbj4uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQ2FwcyBhcmUgY2FsbGVkIDxlbXBoYXNpcz5zaW1wbGUgY2FwczwvZW1waGFzaXM+IHdoZW4gdGhleSBjb250YWluCi0gICAgICAgIG9ubHkgb25lIHN0cnVjdHVyZSwgYW5kIDxlbXBoYXNpcz5maXhlZCBjYXBzPC9lbXBoYXNpcz4gd2hlbiB0aGV5Ci0gICAgICAgIGNvbnRhaW4gb25seSBvbmUgc3RydWN0dXJlIGFuZCBoYXZlIG5vIHZhcmlhYmxlIGZpZWxkIHR5cGVzIChsaWtlCi0gICAgICAgIHJhbmdlcyBvciBsaXN0cyBvZiBwb3NzaWJsZSB2YWx1ZXMpLiBUd28gb3RoZXIgc3BlY2lhbCB0eXBlcyBvZiBjYXBzCi0gICAgICAgIGFyZSA8ZW1waGFzaXM+QU5ZIGNhcHM8L2VtcGhhc2lzPiBhbmQgPGVtcGhhc2lzPmVtcHR5IGNhcHM8L2VtcGhhc2lzPi4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIGV4dHJhY3QgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZnJvbQotICAgICAgICBhIHNldCBvZiBmaXhlZCB2aWRlbyBjYXBzOgotICAgICAgPHByb2dyYW1saXN0aW5nPgotc3RhdGljIHZvaWQKLXJlYWRfdmlkZW9fcHJvcHMgKEdzdENhcHMgKmNhcHMpCi17Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdHI7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKTsKLQotICBzdHIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0ciwgIndpZHRoIiwgJmFtcDt3aWR0aCkgfHwKLSAgICAgICFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0ciwgImhlaWdodCIsICZhbXA7aGVpZ2h0KSkgewotICAgIGdfcHJpbnQgKCJObyB3aWR0aC9oZWlnaHQgYXZhaWxhYmxlXG4iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBnX3ByaW50ICgiVGhlIHZpZGVvIHNpemUgb2YgdGhpcyBzZXQgb2YgY2FwYWJpbGl0aWVzIGlzICVkeCVkXG4iLAotCSAgIHdpZHRoLCBoZWlnaHQpOwotfQotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWNhcHMtZmlsdGVyIj4KLSAgICAgIDx0aXRsZT5DcmVhdGluZyBjYXBhYmlsaXRpZXMgZm9yIGZpbHRlcmluZzwvdGl0bGU+Ci0gICAgICA8cGFyYT4gCi0gICAgICAgIFdoaWxlIGNhcGFiaWxpdGllcyBhcmUgbWFpbmx5IHVzZWQgaW5zaWRlIGEgcGx1Z2luIHRvIGRlc2NyaWJlIHRoZQotICAgICAgICBtZWRpYSB0eXBlIG9mIHRoZSBwYWRzLCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lciBvZnRlbiBhbHNvIGhhcwotICAgICAgICB0byBoYXZlIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2YgY2FwYWJpbGl0aWVzIGluIG9yZGVyIHRvIGludGVyZmFjZQotICAgICAgICB3aXRoIHRoZSBwbHVnaW5zLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgZmlsdGVyZWQgY2Fwcy4gV2hlbiB5b3UncmUKLSAgICAgICAgdXNpbmcgZmlsdGVyZWQgY2FwcyBvciBmaXhhdGlvbiwgeW91J3JlIGxpbWl0aW5nIHRoZSBhbGxvd2VkIHR5cGVzIG9mCi0gICAgICAgIG1lZGlhIHRoYXQgY2FuIHN0cmVhbSBiZXR3ZWVuIHR3byBwYWRzIHRvIGEgc3Vic2V0IG9mIHRoZWlyIHN1cHBvcnRlZAotICAgICAgICBtZWRpYSB0eXBlcy4gWW91IGRvIHRoaXMgdXNpbmcgYSA8Y2xhc3NuYW1lPmNhcHNmaWx0ZXI8L2NsYXNzbmFtZT4KLSAgICAgICAgZWxlbWVudCBpbiB5b3VyIHBpcGVsaW5lLiBJbiBvcmRlciB0byBkbyB0aGlzLCB5b3UgYWxzbyBuZWVkIHRvCi0gICAgICAgIGNyZWF0ZSB5b3VyIG93biA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4uIFRoZSBlYXNpZXN0IHdheSB0bwotICAgICAgICBkbyB0aGlzIGlzIGJ5IHVzaW5nIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbgotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2NhcHNfbmV3X3NpbXBsZSAoKTwvZnVuY3Rpb24+OgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgZ2Jvb2xlYW4KLWxpbmtfZWxlbWVudHNfd2l0aF9maWx0ZXIgKEdzdEVsZW1lbnQgKmVsZW1lbnQxLCBHc3RFbGVtZW50ICplbGVtZW50MikKLXsKLSAgZ2Jvb2xlYW4gbGlua19vazsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcmF3IiwKLSAgCSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiSTQyMCIsCi0JICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgMzg0LAotCSAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyODgsCi0JICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAyNSwgMSwKLQkgICAgICBOVUxMKTsKLQotICBsaW5rX29rID0gZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCAoZWxlbWVudDEsIGVsZW1lbnQyLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGlmICghbGlua19vaykgewotICAgIGdfd2FybmluZyAoIkZhaWxlZCB0byBsaW5rIGVsZW1lbnQxIGFuZCBlbGVtZW50MiEiKTsKLSAgfQotCi0gIHJldHVybiBsaW5rX29rOwotfQotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIFRoaXMgd2lsbCBmb3JjZSB0aGUgZGF0YSBmbG93IGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnRzIHRvCi0gICAgICBhIGNlcnRhaW4gdmlkZW8gZm9ybWF0LCB3aWR0aCwgaGVpZ2h0IGFuZCBmcmFtZXJhdGUgKG9yIHRoZSBsaW5raW5nCi0gICAgICB3aWxsIGZhaWwgaWYgdGhhdCBjYW5ub3QgYmUgYWNoaWV2ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGVsZW1lbnRzCi0gICAgICBpbnZvbHZlZCkuIEtlZXAgaW4gbWluZCB0aGF0IHdoZW4geW91IHVzZSA8ZnVuY3Rpb24+Ci0gICAgICBnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkICgpPC9mdW5jdGlvbj4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZQotICAgICAgYSA8Y2xhc3NuYW1lPmNhcHNmaWx0ZXI8L2NsYXNzbmFtZT4gZWxlbWVudCBmb3IgeW91IGFuZCBpbnNlcnQgaXQgaW50bwotICAgICAgeW91ciBiaW4gb3IgcGlwZWxpbmUgYmV0d2VlbiB0aGUgdHdvIGVsZW1lbnRzIHlvdSB3YW50IHRvIGNvbm5lY3QgKHRoaXMKLSAgICAgIGlzIGltcG9ydGFudCBpZiB5b3UgZXZlciB3YW50IHRvIGRpc2Nvbm5lY3QgdGhvc2UgZWxlbWVudHMgYmVjYXVzZSB0aGVuCi0gICAgICB5b3Ugd2lsbCBoYXZlIHRvIGRpc2Nvbm5lY3QgYm90aCBlbGVtZW50cyBmcm9tIHRoZSBjYXBzZmlsdGVyIGluc3RlYWQpLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHNvbWUgY2FzZXMsIHlvdSB3aWxsIHdhbnQgdG8gY3JlYXRlIGEgbW9yZSBlbGFib3JhdGUgc2V0IG9mCi0gICAgICAgIGNhcGFiaWxpdGllcyB0byBmaWx0ZXIgYSBsaW5rIGJldHdlZW4gdHdvIHBhZHMuIFRoZW4sIHRoaXMgZnVuY3Rpb24KLSAgICAgICAgaXMgdG9vIHNpbXBsaXN0aWMgYW5kIHlvdSdsbCB3YW50IHRvIHVzZSB0aGUgbWV0aG9kCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfY2Fwc19uZXdfZnVsbCAoKTwvZnVuY3Rpb24+OgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotc3RhdGljIGdib29sZWFuCi1saW5rX2VsZW1lbnRzX3dpdGhfZmlsdGVyIChHc3RFbGVtZW50ICplbGVtZW50MSwgR3N0RWxlbWVudCAqZWxlbWVudDIpCi17Ci0gIGdib29sZWFuIGxpbmtfb2s7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2Z1bGwgKAotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2aWRlby94LXJhdyIsCi0JCQkgIndpZHRoIiwgR19UWVBFX0lOVCwgMzg0LAotCQkJICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyODgsCi0JCQkgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAyNSwgMSwKLQkJCSBOVUxMKSwKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmlkZW8veC1iYXllciIsCi0JCQkgIndpZHRoIiwgR19UWVBFX0lOVCwgMzg0LAotCQkJICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAyODgsCi0JCQkgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAyNSwgMSwKLQkJCSBOVUxMKSwKLSAgICAgIE5VTEwpOwotCi0gIGxpbmtfb2sgPSBnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkIChlbGVtZW50MSwgZWxlbWVudDIsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgaWYgKCFsaW5rX29rKSB7Ci0gICAgZ193YXJuaW5nICgiRmFpbGVkIHRvIGxpbmsgZWxlbWVudDEgYW5kIGVsZW1lbnQyISIpOwotICB9Ci0KLSAgcmV0dXJuIGxpbmtfb2s7Ci19Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFNlZSB0aGUgQVBJIHJlZmVyZW5jZXMgZm9yIHRoZSBmdWxsIEFQSSBvZgotCTx1bGluayB0eXBlPSJodHRwIgotCSAgdXJsPSImVVJMQVBJO2dzdHJlYW1lci1Hc3RTdHJ1Y3R1cmUuaHRtbCI+PGNsYXNzbmFtZT5Hc3RTdHJ1Y3R1cmU8L2NsYXNzbmFtZT48L3VsaW5rPgotCWFuZCA8dWxpbmsgdHlwZT0iaHR0cCIKLQkgIHVybD0iJlVSTEFQSTtnc3RyZWFtZXItR3N0Q2Fwcy5odG1sIj48Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT48L3VsaW5rPi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1wYWRzLWdob3N0Ij4KLSAgICA8dGl0bGU+R2hvc3QgcGFkczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBZb3UgY2FuIHNlZSBmcm9tIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tYmluLW5vZ2hvc3QtaW1nIi8+IGhvdyBhIGJpbgotICAgICAgaGFzIG5vIHBhZHMgb2YgaXRzIG93bi4gVGhpcyBpcyB3aGVyZSAiZ2hvc3QgcGFkcyIgY29tZSBpbnRvIHBsYXkuCi0gICAgPC9wYXJhPgotICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLWJpbi1ub2dob3N0LWltZyI+Ci0gICAgICA8dGl0bGU+VmlzdWFsaXNhdGlvbiBvZiBhIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSImVVJMQVBJO0dzdEJpbi5odG1sIj48Y2xhc3NuYW1lPkdzdEJpbjwvY2xhc3NuYW1lPjwvdWxpbms+Ci0gICAgICBlbGVtZW50IHdpdGhvdXQgZ2hvc3QgcGFkczwvdGl0bGU+Ci0gICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL2Jpbi1lbGVtZW50LW5vZ2hvc3QuJmltYWdlOyIKLSAgICAgICAgICBmb3JtYXQ9IiZJTUFHRTsiLz4KLSAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgIDwvbWVkaWFvYmplY3Q+ICAKLSAgICA8L2ZpZ3VyZT4KLSAgICA8cGFyYT4KLSAgICAgIEEgZ2hvc3QgcGFkIGlzIGEgcGFkIGZyb20gc29tZSBlbGVtZW50IGluIHRoZSBiaW4gdGhhdCBjYW4gYmUKLSAgICAgIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gdGhlIGJpbiBhcyB3ZWxsLiBDb21wYXJlIGl0IHRvIGEgc3ltYm9saWMKLSAgICAgIGxpbmsgaW4gVU5JWCBmaWxlc3lzdGVtcy4gVXNpbmcgZ2hvc3QgcGFkcyBvbiBiaW5zLCB0aGUgYmluIGFsc28KLSAgICAgIGhhcyBhIHBhZCBhbmQgY2FuIHRyYW5zcGFyZW50bHkgYmUgdXNlZCBhcyBhbiBlbGVtZW50IGluIG90aGVyCi0gICAgICBwYXJ0cyBvZiB5b3VyIGNvZGUuCi0gICAgPC9wYXJhPgotICAgIAotICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLWJpbi1naG9zdC1pbWciPgotICAgICAgPHRpdGxlPlZpc3VhbGlzYXRpb24gb2YgYSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iJlVSTEFQSTtHc3RCaW4uaHRtbCI+PGNsYXNzbmFtZT5Hc3RCaW48L2NsYXNzbmFtZT48L3VsaW5rPgotICAgICAgZWxlbWVudCB3aXRoIGEgZ2hvc3QgcGFkPC90aXRsZT4KLSAgICAgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgIDxpbWFnZWRhdGEgc2NhbGU9Ijc1IiBmaWxlcmVmPSJpbWFnZXMvYmluLWVsZW1lbnQtZ2hvc3QuJmltYWdlOyIKLSAgICAgICAgICBmb3JtYXQ9IiZJTUFHRTsiLz4KLSAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgIDwvbWVkaWFvYmplY3Q+ICAKLSAgICA8L2ZpZ3VyZT4KLSAgICA8cGFyYT4KLSAgICAgIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tYmluLWdob3N0LWltZyIvPiBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGEKLSAgICAgIGdob3N0IHBhZC4gVGhlIHNpbmsgcGFkIG9mIGVsZW1lbnQgb25lIGlzIG5vdyBhbHNvIGEgcGFkIG9mIHRoZSBiaW4uCi0gICAgICBCZWNhdXNlIGdob3N0IHBhZHMgbG9vayBhbmQgd29yayBsaWtlIGFueSBvdGhlciBwYWRzLCB0aGV5IGNhbiBiZSBhZGRlZCAKLSAgICAgIHRvIGFueSB0eXBlIG9mIGVsZW1lbnRzLCBub3QganVzdCB0byBhIDxjbGFzc25hbWU+R3N0QmluPC9jbGFzc25hbWU+LAotICAgICAganVzdCBsaWtlIG9yZGluYXJ5IHBhZHMuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQSBnaG9zdHBhZCBpcyBjcmVhdGVkIHVzaW5nIHRoZSBmdW5jdGlvbgotICAgICAgPGZ1bmN0aW9uPmdzdF9naG9zdF9wYWRfbmV3ICgpPC9mdW5jdGlvbj46Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZ2hvc3RwYWQuYyBhIC0tPgotI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLQotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpiaW4sICpzaW5rOwotICBHc3RQYWQgKnBhZDsKLQotICAvKiBpbml0ICovCi0gIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7Ci0KLSAgLyogY3JlYXRlIGVsZW1lbnQsIGFkZCB0byBiaW4gKi8KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgYmluID0gZ3N0X2Jpbl9uZXcgKCJteWJpbiIpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgc2luayk7Ci0KLSAgLyogYWRkIGdob3N0cGFkICovCi0gIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHBhZCkpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwYWQpKTsKLTwhLS0gZXhhbXBsZS1lbmQgZ2hvc3RwYWQuYyBhIC0tPgotWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiBnaG9zdHBhZC5jIGIgLS0+PCEtLQotICByZXR1cm4gMDsKLS0tPjwhLS0gZXhhbXBsZS1lbmQgZ2hvc3RwYWQuYyBiIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIGdob3N0cGFkLmMgYyAtLT4KLX0KLSAgICA8IS0tIGV4YW1wbGUtZW5kIGdob3N0cGFkLmMgYyAtLT48L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBiaW4gbm93IGFsc28gaGFzIGEgcGFkOiB0aGUgcGFkIGNhbGxlZAotICAgICAgPHF1b3RlPnNpbms8L3F1b3RlPiBvZiB0aGUgZ2l2ZW4gZWxlbWVudC4gVGhlIGJpbiBjYW4sIGZyb20gaGVyZQotICAgICAgb24sIGJlIHVzZWQgYXMgYSBzdWJzdGl0dXRlIGZvciB0aGUgc2luayBlbGVtZW50LiBZb3UgY291bGQsIGZvcgotICAgICAgZXhhbXBsZSwgbGluayBhbm90aGVyIGVsZW1lbnQgdG8gdGhlIGJpbi4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9iYXNpY3MtcGx1Z2lucy54bWwgYi9kb2NzL21hbnVhbC9iYXNpY3MtcGx1Z2lucy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMjYzZTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvYmFzaWNzLXBsdWdpbnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItcGx1Z2lucyI+Ci0gIDx0aXRsZT5QbHVnaW5zPC90aXRsZT4KLSAgPCEtLSBGSVhNRTogaW50cm9kdWNlIHR5cGUgZGVmaW5pdGlvbnMgYmVmb3JlIHRoaXMgY2hhcHRlciAtLT4KLSAgPHBhcmE+IAotICAgIEEgcGx1Z2luIGlzIGEgc2hhcmVkIGxpYnJhcnkgdGhhdCBjb250YWlucyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZwotICAgIGl0ZW1zOgotICA8L3BhcmE+Ci0KLSAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgb25lIG9yIG1vcmUgZWxlbWVudCBmYWN0b3JpZXMKLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICBvbmUgb3IgbW9yZSB0eXBlIGRlZmluaXRpb25zCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgb25lIG9yIG1vcmUgYXV0by1wbHVnZ2VycwotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIGV4cG9ydGVkIHN5bWJvbHMgZm9yIHVzZSBpbiBvdGhlciBwbHVnaW5zCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgPHBhcmE+IAotICAgIEFsbCBwbHVnaW5zIHNob3VsZCBpbXBsZW1lbnQgb25lIGZ1bmN0aW9uLCA8ZnVuY3Rpb24+cGx1Z2luX2luaXQ8L2Z1bmN0aW9uPiwKLSAgICB0aGF0IGNyZWF0ZXMgYWxsIHRoZSBlbGVtZW50IGZhY3RvcmllcyBhbmQgcmVnaXN0ZXJzIGFsbCB0aGUgdHlwZQotICAgIGRlZmluaXRpb25zIGNvbnRhaW5lZCBpbiB0aGUgcGx1Z2luLgotICAgIFdpdGhvdXQgdGhpcyBmdW5jdGlvbiwgYSBwbHVnaW4gY2Fubm90IGJlIHJlZ2lzdGVyZWQuCi0gIDwvcGFyYT4gCi0gIDxwYXJhPiAKLSAgICBUaGUgcGx1Z2lucyBhcmUgbWFpbnRhaW5lZCBpbiB0aGUgcGx1Z2luIHN5c3RlbS4gT3B0aW9uYWxseSwgdGhlCi0gICAgdHlwZSBkZWZpbml0aW9ucyBhbmQgdGhlIGVsZW1lbnQgZmFjdG9yaWVzIGNhbiBiZSBzYXZlZCBpbnRvIGFuIFhNTAotICAgIHJlcHJlc2VudGF0aW9uIHNvIHRoYXQgdGhlIHBsdWdpbiBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0byBsb2FkIGFsbAotICAgIGF2YWlsYWJsZSBwbHVnaW5zIGluIG9yZGVyIHRvIGtub3cgdGhlaXIgZGVmaW5pdGlvbi4KLSAgPC9wYXJhPiAKLQkJCQkJCQkJCQkJCQkJICAKLSAgPHBhcmE+IAotICAgIFRoZSBiYXNpYyBwbHVnaW4gc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkczoKLSAgPC9wYXJhPiAKLSAgPHByb2dyYW1saXN0aW5nPgotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBsdWdpbiAgIEdzdFBsdWdpbjsKLQotc3RydWN0IF9Hc3RQbHVnaW4gewotICBnY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgICAvKiBuYW1lIG9mIHRoZSBwbHVnaW4gKi8KLSAgZ2NoYXIgKmxvbmduYW1lOyAgICAgICAgICAgICAgLyogbG9uZyBuYW1lIG9mIHBsdWdpbiAqLwotICBnY2hhciAqZmlsZW5hbWU7ICAgICAgICAgICAgICAvKiBmaWxlbmFtZSBpdCBjYW1lIGZyb20gKi8KLQotICBHTGlzdCAqdHlwZXM7ICAgICAgICAgICAgICAgICAvKiBsaXN0IG9mIHR5cGVzIHByb3ZpZGVkICovCi0gIGdpbnQgbnVtdHlwZXM7Ci0gIEdMaXN0ICplbGVtZW50czsgICAgICAgICAgICAgIC8qIGxpc3Qgb2YgZWxlbWVudHMgcHJvdmlkZWQgKi8KLSAgZ2ludCBudW1lbGVtZW50czsKLSAgR0xpc3QgKmF1dG9wbHVnZ2VyczsgICAgICAgICAgLyogbGlzdCBvZiBhdXRvcGx1Z2dlcnMgcHJvdmlkZWQgKi8KLSAgZ2ludCBudW1hdXRvcGx1Z2dlcnM7Ci0KLSAgZ2Jvb2xlYW4gbG9hZGVkOyAgICAgICAgICAgICAgLyogaWYgdGhlIHBsdWdpbiBpcyBpbiBtZW1vcnkgKi8KLX07Ci0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgPHBhcmE+IAotICAgIFlvdSBjYW4gcXVlcnkgYSA8Y2xhc3NuYW1lPkdMaXN0PC9jbGFzc25hbWU+IG9mIGF2YWlsYWJsZSBwbHVnaW5zIHdpdGggdGhlCi0gICAgZnVuY3Rpb24gPGZ1bmN0aW9uPmdzdF9yZWdpc3RyeV9wb29sX3BsdWdpbl9saXN0PC9mdW5jdGlvbj4gYXMgdGhpcyBleGFtcGxlCi0gICAgc2hvd3M6Ci0gIDwvcGFyYT4gCi0gIDxwcm9ncmFtbGlzdGluZz4KLSAgICBHTGlzdCAqcGx1Z2luczsKLSAgICAKLSAgICBwbHVnaW5zID0gZ3N0X3JlZ2lzdHJ5X3Bvb2xfcGx1Z2luX2xpc3QgKCk7Ci0KLSAgICB3aGlsZSAocGx1Z2lucykgewotICAgICAgR3N0UGx1Z2luICpwbHVnaW4gPSAoR3N0UGx1Z2luICopcGx1Z2lucy0mZ3Q7ZGF0YTsKLQotICAgICAgZ19wcmludCAoInBsdWdpbjogJXNcbiIsIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbikpOwotCi0gICAgICBwbHVnaW5zID0gZ19saXN0X25leHQgKHBsdWdpbnMpOwotICAgIH0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Jpbi1lbGVtZW50LWdob3N0LnBuZyBiL2RvY3MvbWFudWFsL2Jpbi1lbGVtZW50LWdob3N0LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNhNTVkYy4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9iaW4tZWxlbWVudC1naG9zdC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9iaW4tZWxlbWVudC1ub2dob3N0LnBuZyBiL2RvY3MvbWFudWFsL2Jpbi1lbGVtZW50LW5vZ2hvc3QucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWRjYjY1Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2Jpbi1lbGVtZW50LW5vZ2hvc3QucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvYmluLWVsZW1lbnQucG5nIGIvZG9jcy9tYW51YWwvYmluLWVsZW1lbnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzdmODBkLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2Jpbi1lbGVtZW50LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2Nsb2Nrcy5wbmcgYi9kb2NzL21hbnVhbC9jbG9ja3MucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTZkZTRlLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2Nsb2Nrcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9jb21tdW5pY2F0aW9uLnBuZyBiL2RvY3MvbWFudWFsL2NvbW11bmljYXRpb24ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjExZWQ1Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2NvbW11bmljYXRpb24ucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQtbXVsdGkucG5nIGIvZG9jcy9tYW51YWwvZmlsdGVyLWVsZW1lbnQtbXVsdGkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmJiY2IxLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2ZpbHRlci1lbGVtZW50LW11bHRpLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2ZpbHRlci1lbGVtZW50LnBuZyBiL2RvY3MvbWFudWFsL2ZpbHRlci1lbGVtZW50LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2UyZWEzMi4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9maWx0ZXItZWxlbWVudC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9nc3RyZWFtZXItb3ZlcnZpZXcucG5nIGIvZG9jcy9tYW51YWwvZ3N0cmVhbWVyLW92ZXJ2aWV3LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyZGY5Yi4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9nc3RyZWFtZXItb3ZlcnZpZXcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvaGVsbG8td29ybGQucG5nIGIvZG9jcy9tYW51YWwvaGVsbG8td29ybGQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2Y4NzQ0Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2hlbGxvLXdvcmxkLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1wbGF5YmFjay54bWwgYi9kb2NzL21hbnVhbC9oaWdobGV2ZWwtcGxheWJhY2sueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2QyZDFmLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1wbGF5YmFjay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MTcgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItcGxheWJhY2stY29tcG9uZW50cyI+Ci0gIDx0aXRsZT5QbGF5YmFjayBDb21wb25lbnRzPC90aXRsZT4KLQotICA8cGFyYT4KLSAgICAmR1N0cmVhbWVyOyBpbmNsdWRlcyBzZXZlcmFsIGhpZ2hlci1sZXZlbCBjb21wb25lbnRzIHRvIHNpbXBsaWZ5IGFuCi0gICAgYXBwbGljYXRpb24gZGV2ZWxvcGVyJ3MgbGlmZS4gQWxsIG9mIHRoZSBjb21wb25lbnRzIGRpc2N1c3NlZCBoZXJlIChmb3Igbm93KSBhcmUKLSAgICB0YXJnZXR0ZWQgYXQgbWVkaWEgcGxheWJhY2suIFRoZSBpZGVhIG9mIGVhY2ggb2YgdGhlc2UgY29tcG9uZW50cyBpcwotICAgIHRvIGludGVncmF0ZSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlIHdpdGggYSAmR1N0cmVhbWVyOyBwaXBlbGluZSwgYnV0Ci0gICAgdG8gaGlkZSB0aGUgY29tcGxleGl0eSBvZiBtZWRpYSB0eXBlIGRldGVjdGlvbiBhbmQgc2V2ZXJhbCBvdGhlcgotICAgIHJhdGhlciBjb21wbGV4IHRvcGljcyB0aGF0IGhhdmUgYmVlbiBkaXNjdXNzZWQgaW4gPHhyZWYKLSAgICBsaW5rZW5kPSJwYXJ0LWFkdmFuY2VkIi8+LgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICAgV2UgY3VycmVudGx5IHJlY29tbWVuZCBwZW9wbGUgdG8gdXNlIGVpdGhlciBwbGF5YmluIChzZWUgPHhyZWYKLSAgICBsaW5rZW5kPSJzZWN0aW9uLWNvbXBvbmVudHMtcGxheWJpbiIvPikgb3IgZGVjb2RlYmluIChzZWUgPHhyZWYKLSAgICBsaW5rZW5kPSJzZWN0aW9uLWNvbXBvbmVudHMtZGVjb2RlYmluIi8+KSwgZGVwZW5kaW5nIG9uIHRoZWlyIG5lZWRzLgotICAgIFBsYXliaW4gaXMgdGhlIHJlY29tbWVuZGVkIHNvbHV0aW9uIGZvciBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gc2ltcGxlCi0gICAgcGxheWJhY2sgb2YgbWVkaWEgdGhhdCBzaG91bGQganVzdCB3b3JrLiBEZWNvZGViaW4gaXMgYSBtb3JlIGZsZXhpYmxlCi0gICAgYXV0b3BsdWdnZXIgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIGFkZCBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzLCBzdWNoCi0gICAgYXMgcGxheWxpc3Qgc3VwcG9ydCwgY3Jvc3NmYWRpbmcgb2YgYXVkaW8gdHJhY2tzIGFuZCBzbyBvbi4gSXRzCi0gICAgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGlzIG1vcmUgbG93LWxldmVsIHRoYW4gdGhhdCBvZiBwbGF5YmluLCB0aG91Z2guCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tY29tcG9uZW50cy1wbGF5YmluIj4KLSAgICA8dGl0bGU+UGxheWJpbjwvdGl0bGU+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFBsYXliaW4gaXMgYW4gZWxlbWVudCB0aGF0IGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBzdGFuZGFyZCAmR1N0cmVhbWVyOwotICAgICAgQVBJIChlLmcuIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCk8L2Z1bmN0aW9uPikuIFRoZSBmYWN0b3J5Ci0gICAgICBpcyBjb252ZW5pZW50bHkgY2FsbGVkIDxxdW90ZT5wbGF5YmluPC9xdW90ZT4uIEJ5IGJlaW5nIGEKLSAgICAgIDxjbGFzc25hbWU+R3N0UGlwZWxpbmU8L2NsYXNzbmFtZT4gKGFuZCB0aHVzIGEKLSAgICAgIDxjbGFzc25hbWU+R3N0RWxlbWVudDwvY2xhc3NuYW1lPiksIHBsYXliaW4gYXV0b21hdGljYWxseSBzdXBwb3J0cyBhbGwKLSAgICAgIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGlzIGNsYXNzLCBpbmNsdWRpbmcgZXJyb3IgaGFuZGxpbmcsIHRhZyBzdXBwb3J0LAotICAgICAgc3RhdGUgaGFuZGxpbmcsIGdldHRpbmcgc3RyZWFtIHBvc2l0aW9ucywgc2Vla2luZywgYW5kIHNvIG9uLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgU2V0dGluZyB1cCBhIHBsYXliaW4gcGlwZWxpbmUgaXMgYXMgc2ltcGxlIGFzIGNyZWF0aW5nIGFuIGluc3RhbmNlIG9mCi0gICAgICB0aGUgcGxheWJpbiBlbGVtZW50LCBzZXR0aW5nIGEgZmlsZSBsb2NhdGlvbiB1c2luZyB0aGUKLSAgICAgIDxxdW90ZT51cmk8L3F1b3RlPiBwcm9wZXJ0eSBvbiBwbGF5YmluLCBhbmQgdGhlbiBzZXR0aW5nIHRoZSBlbGVtZW50Ci0gICAgICB0byB0aGUgPGNsYXNzbmFtZT5HU1RfU1RBVEVfUExBWUlORzwvY2xhc3NuYW1lPiBzdGF0ZSAodGhlIGxvY2F0aW9uIGhhcyB0byBiZSBhIHZhbGlkCi0gICAgICBVUkksIHNvIDxxdW90ZT4mbHQ7cHJvdG9jb2wmZ3Q7Oi8vJmx0O2xvY2F0aW9uJmd0OzwvcXVvdGU+LCBlLmcuCi0gICAgICBmaWxlOi8vL3RtcC9teS5vZ2cgb3IgaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zdHJlYW0ub2dnKS4gSW50ZXJuYWxseSwKLSAgICAgIHBsYXliaW4gd2lsbCBzZXQgdXAgYSBwaXBlbGluZSB0byBwbGF5YmFjayB0aGUgbWVkaWEgbG9jYXRpb24uCi0gICAgPC9wYXJhPgotCi0gICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBwbGF5YmluLmMgYSAtLT4KLSNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci08IS0tIGV4YW1wbGUtZW5kIHBsYXliaW4uYyBhIC0tPgotWy4uIG15X2J1c19jYWxsYmFjayBnb2VzIGhlcmUgLi5dPCEtLSBleGFtcGxlLWJlZ2luIHBsYXliaW4uYyBiIC0tPjwhLS0KLXN0YXRpYyBnYm9vbGVhbgotbXlfYnVzX2NhbGxiYWNrIChHc3RCdXMgICAgICpidXMsCi0JCSBHc3RNZXNzYWdlICptZXNzYWdlLAotCQkgZ3BvaW50ZXIgICAgZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjogewotICAgICAgR0Vycm9yICplcnI7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmYW1wO2VyciwgJmFtcDtkZWJ1Zyk7Ci0gICAgICBnX3ByaW50ICgiRXJyb3I6ICVzXG4iLCBlcnItJmd0O21lc3NhZ2UpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgLyogZW5kLW9mLXN0cmVhbSAqLwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyogdW5oYW5kbGVkIG1lc3NhZ2UgKi8KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogcmVtb3ZlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUgKi8KLSAgcmV0dXJuIFRSVUU7Ci19Ci0tLT48IS0tIGV4YW1wbGUtZW5kIHBsYXliaW4uYyBiIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHBsYXliaW4uYyBjIC0tPgotZ2ludAotbWFpbiAoZ2ludCAgIGFyZ2MsCi0gICAgICBnY2hhciAqYXJndltdKQotewotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdzdEVsZW1lbnQgKnBsYXk7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7Ci0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhIFVSSSAqLwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoIlVzYWdlOiAlcyAmbHQ7VVJJJmd0O1xuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogc2V0IHVwICovCi0gIHBsYXkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwbGF5YmluIiwgInBsYXkiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocGxheSksICJ1cmkiLCBhcmd2WzFdLCBOVUxMKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwbGF5KSk7Ci0gIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG15X2J1c19jYWxsYmFjaywgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwbGF5LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgLyogbm93IHJ1biAqLwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIC8qIGFsc28gY2xlYW4gdXAgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwbGF5LCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBsYXkpKTsKLQotICByZXR1cm4gMDsKLX0KLSAgICA8IS0tIGV4YW1wbGUtZW5kIHBsYXliaW4uYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFBsYXliaW4gaGFzIHNldmVyYWwgZmVhdHVyZXMgdGhhdCBoYXZlIGJlZW4gZGlzY3Vzc2VkIHByZXZpb3VzbHk6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFNldHRhYmxlIHZpZGVvIGFuZCBhdWRpbyBvdXRwdXQgKHVzaW5nIHRoZSA8cXVvdGU+dmlkZW8tc2luazwvcXVvdGU+Ci0gICAgICAgICAgYW5kIDxxdW90ZT5hdWRpby1zaW5rPC9xdW90ZT4gcHJvcGVydGllcykuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE1vc3RseSBjb250cm9sbGFibGUgYW5kIHRyYWNrYWJsZSBhcyBhCi0gICAgICAgICAgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+LCBpbmNsdWRpbmcgZXJyb3IgaGFuZGxpbmcsIGVvcwotICAgICAgICAgIGhhbmRsaW5nLCB0YWcgaGFuZGxpbmcsIHN0YXRlIGhhbmRsaW5nICh0aHJvdWdoIHRoZQotICAgICAgICAgIDxjbGFzc25hbWU+R3N0QnVzPC9jbGFzc25hbWU+KSwgbWVkaWEgcG9zaXRpb24gaGFuZGxpbmcgYW5kCi0gICAgICAgICAgc2Vla2luZy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQnVmZmVycyBuZXR3b3JrLXNvdXJjZXMsIHdpdGggYnVmZmVyIGZ1bGxuZXNzIG5vdGlmaWNhdGlvbnMgYmVpbmcKLSAgICAgICAgICBwYXNzZWQgdGhyb3VnaCB0aGUgPGNsYXNzbmFtZT5Hc3RCdXM8L2NsYXNzbmFtZT4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFN1cHBvcnRzIHZpc3VhbGl6YXRpb25zIGZvciBhdWRpby1vbmx5IG1lZGlhLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBTdXBwb3J0cyBzdWJ0aXRsZXMsIGJvdGggaW4gdGhlIG1lZGlhIGFzIHdlbGwgYXMgZnJvbSBzZXBhcmF0ZQotICAgICAgICAgIGZpbGVzLiBGb3Igc2VwYXJhdGUgc3VidGl0bGUgZmlsZXMsIHVzZSB0aGUgPHF1b3RlPnN1YnVyaTwvcXVvdGU+Ci0gICAgICAgICAgcHJvcGVydHkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFN1cHBvcnRzIHN0cmVhbSBzZWxlY3Rpb24gYW5kIGRpc2FibGluZy4gSWYgeW91ciBtZWRpYSBoYXMKLSAgICAgICAgICBtdWx0aXBsZSBhdWRpbyBvciBzdWJ0aXRsZSB0cmFja3MsIHlvdSBjYW4gZHluYW1pY2FsbHkgY2hvb3NlCi0gICAgICAgICAgd2hpY2ggb25lIHRvIHBsYXkgYmFjaywgb3IgZGVjaWRlIHRvIHR1cm4gaXQgb2ZmIGFsdG9nZXRoZXIKLSAgICAgICAgICAod2hpY2ggaXMgZXNwZWNpYWxseSB1c2VmdWwgdG8gdHVybiBvZmYgc3VidGl0bGVzKS4gRm9yIGVhY2gKLSAgICAgICAgICBvZiB0aG9zZSwgdXNlIHRoZSA8cXVvdGU+Y3VycmVudC10ZXh0PC9xdW90ZT4gYW5kIG90aGVyIHJlbGF0ZWQKLSAgICAgICAgICBwcm9wZXJ0aWVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDxwYXJhPgotICAgICAgRm9yIGNvbnZlbmllbmNlLCBpdCBpcyBwb3NzaWJsZSB0byB0ZXN0IDxxdW90ZT5wbGF5YmluPC9xdW90ZT4gb24KLSAgICAgIHRoZSBjb21tYW5kbGluZSwgdXNpbmcgdGhlIGNvbW1hbmQgPHF1b3RlPmdzdC1sYXVuY2gtMS4wIHBsYXliaW4KLSAgICAgIHVyaT1maWxlOi8vL3BhdGgvdG8vZmlsZTwvcXVvdGU+LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tY29tcG9uZW50cy1kZWNvZGViaW4iPgotICAgIDx0aXRsZT5EZWNvZGViaW48L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICBEZWNvZGViaW4gaXMgdGhlIGFjdHVhbCBhdXRvcGx1Z2dlciBiYWNrZW5kIG9mIHBsYXliaW4sIHdoaWNoIHdhcwotICAgICAgZGlzY3Vzc2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLiBEZWNvZGViaW4gd2lsbCwgaW4gc2hvcnQsIGFjY2VwdAotICAgICAgaW5wdXQgZnJvbSBhIHNvdXJjZSB0aGF0IGlzIGxpbmtlZCB0byBpdHMgc2lua3BhZCBhbmQgd2lsbCB0cnkgdG8KLSAgICAgIGRldGVjdCB0aGUgbWVkaWEgdHlwZSBjb250YWluZWQgaW4gdGhlIHN0cmVhbSwgYW5kIHNldCB1cCBkZWNvZGVyCi0gICAgICByb3V0aW5lcyBmb3IgZWFjaCBvZiB0aG9zZS4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCBkZWNvZGVycy4KLSAgICAgIEZvciBlYWNoIGRlY29kZWQgc3RyZWFtLCBpdCB3aWxsIGVtaXQgdGhlIDxxdW90ZT5wYWQtYWRkZWQ8L3F1b3RlPgotICAgICAgc2lnbmFsLCB0byBsZXQgdGhlIGNsaWVudCBrbm93IGFib3V0IHRoZSBuZXdseSBmb3VuZCBkZWNvZGVkIHN0cmVhbS4KLSAgICAgIEZvciB1bmtub3duIHN0cmVhbXMgKHdoaWNoIG1pZ2h0IGJlIHRoZSB3aG9sZSBzdHJlYW0pLCBpdCB3aWxsIGVtaXQKLSAgICAgIHRoZSA8cXVvdGU+dW5rbm93bi10eXBlPC9xdW90ZT4gc2lnbmFsLiBUaGUgYXBwbGljYXRpb24gaXMgdGhlbgotICAgICAgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB0aGUgZXJyb3IgdG8gdGhlIHVzZXIuCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz48IS0tIGV4YW1wbGUtYmVnaW4gZGVjb2RlYmluLmMgYSAtLT4KLTwhW0NEQVRBWwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLV1dPgotPCEtLSBleGFtcGxlLWVuZCBkZWNvZGViaW4uYyBhIC0tPgotWy4uIG15X2J1c19jYWxsYmFjayBnb2VzIGhlcmUgLi5dPCEtLSBleGFtcGxlLWJlZ2luIGRlY29kZWJpbi5jIGIgLS0+Ci08IS0tCi1zdGF0aWMgZ2Jvb2xlYW4KLW15X2J1c19jYWxsYmFjayAoR3N0QnVzICAgICAqYnVzLAotCQkgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLQkJIGdwb2ludGVyICAgIGRhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKLSAgICAgIEdFcnJvciAqZXJyOwotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmFtcDtlcnIsICZhbXA7ZGVidWcpOwotICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLSZndDttZXNzYWdlKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIGdfZnJlZSAoZGVidWcpOwotCi0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHVuaGFuZGxlZCBtZXNzYWdlICovCi0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIHJlbW92ZSBtZXNzYWdlIGZyb20gdGhlIHF1ZXVlICovCi0gIHJldHVybiBUUlVFOwotfQotLS0+PCEtLSBleGFtcGxlLWVuZCBkZWNvZGViaW4uYyBiIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIGRlY29kZWJpbi5jIGMgLS0+Ci08IVtDREFUQVsKLUdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqYXVkaW87Ci0KLXN0YXRpYyB2b2lkCi1jYl9uZXdwYWQgKEdzdEVsZW1lbnQgKmRlY29kZWJpbiwKLQkgICBHc3RQYWQgICAgICpwYWQsCi0JICAgZ3BvaW50ZXIgICAgZGF0YSkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHI7Ci0gIEdzdFBhZCAqYXVkaW9wYWQ7Ci0KLSAgLyogb25seSBsaW5rIG9uY2UgKi8KLSAgYXVkaW9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYXVkaW8sICJzaW5rIik7Ci0gIGlmIChHU1RfUEFEX0lTX0xJTktFRCAoYXVkaW9wYWQpKSB7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGF1ZGlvcGFkKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBjaGVjayBtZWRpYSB0eXBlICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHBhZCwgTlVMTCk7Ci0gIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBpZiAoIWdfc3RycnN0ciAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RyKSwgImF1ZGlvIikpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoYXVkaW9wYWQpOwotICAgIHJldHVybjsKLSAgfQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogbGluayduJ3BsYXkgKi8KLSAgZ3N0X3BhZF9saW5rIChwYWQsIGF1ZGlvcGFkKTsKLQotICBnX29iamVjdF91bnJlZiAoYXVkaW9wYWQpOwotfQotCi1naW50Ci1tYWluIChnaW50ICAgYXJnYywKLSAgICAgIGdjaGFyICphcmd2W10pCi17Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0RWxlbWVudCAqc3JjLCAqZGVjLCAqY29udiwgKnNpbms7Ci0gIEdzdFBhZCAqYXVkaW9wYWQ7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogbWFrZSBzdXJlIHdlIGhhdmUgaW5wdXQgKi8KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgPGZpbGVuYW1lPlxuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogc2V0dXAgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAic291cmNlIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsIGFyZ3ZbMV0sIE5VTEwpOwotICBkZWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWNvZGViaW4iLCAiZGVjb2RlciIpOwotICBnX3NpZ25hbF9jb25uZWN0IChkZWMsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChjYl9uZXdwYWQpLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGRlYywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyYywgZGVjKTsKLQotICAvKiBjcmVhdGUgYXVkaW8gb3V0cHV0ICovCi0gIGF1ZGlvID0gZ3N0X2Jpbl9uZXcgKCJhdWRpb2JpbiIpOwotICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImFjb252Iik7Ci0gIGF1ZGlvcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGNvbnYsICJzaW5rIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhbHNhc2luayIsICJzaW5rIik7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGF1ZGlvKSwgY29udiwgc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKGNvbnYsIHNpbmspOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChhdWRpbywKLSAgICAgIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIGF1ZGlvcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGF1ZGlvcGFkKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYXVkaW8pOwotCi0gIC8qIHJ1biAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci1dXT4KLSAgICA8IS0tIGV4YW1wbGUtZW5kIGRlY29kZWJpbi5jIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KLSAgICA8cGFyYT4KLSAgICAgIERlY29kZWJpbiwgc2ltaWxhciB0byBwbGF5YmluLCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBDYW4gZGVjb2RlIGFuIHVubGltaXRlZCBudW1iZXIgb2YgY29udGFpbmVkIHN0cmVhbXMgdG8gZGVjb2RlZAotICAgICAgICAgIG91dHB1dCBwYWRzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJcyBoYW5kbGVkIGFzIGEgPGNsYXNzbmFtZT5Hc3RFbGVtZW50PC9jbGFzc25hbWU+IGluIGFsbCB3YXlzLAotICAgICAgICAgIGluY2x1ZGluZyB0YWcgb3IgZXJyb3IgZm9yd2FyZGluZyBhbmQgc3RhdGUgaGFuZGxpbmcuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBBbHRob3VnaCBkZWNvZGViaW4gaXMgYSBnb29kIGF1dG9wbHVnZ2VyLCB0aGVyZSdzIGEgd2hvbGUgbG90IG9mCi0gICAgICB0aGluZ3MgdGhhdCBpdCBkb2VzIG5vdCBkbyBhbmQgaXMgbm90IGludGVuZGVkIHRvIGRvOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUYWtpbmcgY2FyZSBvZiBpbnB1dCBzdHJlYW1zIHdpdGggYSBrbm93biBtZWRpYSB0eXBlIChlLmcuIGEgRFZELAotICAgICAgICAgIGFuIGF1ZGlvLUNEIG9yIHN1Y2gpLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBTZWxlY3Rpb24gb2Ygc3RyZWFtcyAoZS5nLiB3aGljaCBhdWRpbyB0cmFjayB0byBwbGF5IGluIGNhc2Ugb2YKLSAgICAgICAgICBtdWx0aS1sYW5ndWFnZSBtZWRpYSBzdHJlYW1zKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgT3ZlcmxheWluZyBzdWJ0aXRsZXMgb3ZlciBhIGRlY29kZWQgdmlkZW8gc3RyZWFtLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDxwYXJhPgotICAgICAgRGVjb2RlYmluIGNhbiBiZSBlYXNpbHkgdGVzdGVkIG9uIHRoZSBjb21tYW5kbGluZSwgZS5nLiBieSB1c2luZyB0aGUKLSAgICAgIGNvbW1hbmQgPGNvbW1hbmQ+Z3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj1maWxlLm9nZyAhIGRlY29kZWJpbgotICAgICAgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYXV0b2F1ZGlvc2luazwvY29tbWFuZD4uCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1jb21wb25lbnRzLXVyaWRlY29kZWJpbiI+Ci0gICAgPHRpdGxlPlVSSURlY29kZWJpbjwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgdXJpZGVjb2RlYmluIGVsZW1lbnQgaXMgdmVyeSBzaW1pbGFyIHRvIGRlY29kZWJpbiwgb25seSB0aGF0IGl0Ci0gICAgICBhdXRvbWF0aWNhbGx5IHBsdWdzIGEgc291cmNlIHBsdWdpbiBiYXNlZCBvbiB0aGUgcHJvdG9jb2wgb2YgdGhlIFVSSQotICAgICAgZ2l2ZW4uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVXJpZGVjb2RlYmluIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IGluc2VydCBidWZmZXJpbmcgZWxlbWVudHMgd2hlbgotICAgICAgdGhlIHVyaSBpcyBhIHNsb3cgbmV0d29yayBzb3VyY2UuIFRoZSBidWZmZXJpbmcgZWxlbWVudCB3aWxsIHBvc3QKLSAgICAgIEJVRkZFUklORyBtZXNzYWdlcyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBoYW5kbGUgYXMgZXhwbGFpbmVkCi0gICAgICBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1ZmZlcmluZyIvPi4gICAgIAotICAgICAgVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYnVmZmVyaW5nIG1ldGhvZDoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIGJ1ZmZlci1zaXplIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGEgbWF4aW11bSBzaXplIGluCi0gICAgICAgICAgYnl0ZXMgZm9yIHRoZSBidWZmZXIgZWxlbWVudC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIGJ1ZmZlci1kdXJhdGlvbiBwcm9wZXJ0eSBhbGxvd3MgeW91IHRvIGNvbmZpZ3VyZSBhIG1heGltdW0gc2l6ZQotICAgICAgICAgIGluIHRpbWUgZm9yIHRoZSBidWZmZXIgZWxlbWVudC4gVGhlIHRpbWUgd2lsbCBiZSBlc3RpbWF0ZWQgYmFzZWQgb24KLSAgICAgICAgICB0aGUgYml0cmF0ZSBvZiB0aGUgbmV0d29yay4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgV2l0aCB0aGUgZG93bmxvYWQgcHJvcGVydHkgeW91IGNhbiBlbmFibGUgdGhlIGRvd25sb2FkIGJ1ZmZlcmluZwotICAgICAgICAgIG1ldGhvZCBhcyBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1idWZmZXJpbmctZG93bmxvYWQiLz4uCi0gICAgICAgICAgU2V0dGluZyB0aGlzIG9wdGlvbiB0byBUUlVFIHdpbGwgb25seSBlbmFibGUgZG93bmxvYWQgYnVmZmVyaW5nCi0gICAgICAgICAgZm9yIHNlbGVjdGVkIGZvcm1hdHMgc3VjaCBhcyBxdWlja3RpbWUsIGZsYXNoIHZpZGVvLCBhdmkgYW5kCi0gICAgICAgICAgd2VibS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgWW91IGNhbiBhbHNvIGVuYWJsZSBidWZmZXJpbmcgb24gdGhlIHBhcnNlZC9kZW11eGVkIGRhdGEgd2l0aCB0aGUKLSAgICAgICAgICB1c2UtYnVmZmVyaW5nIHByb3BlcnR5LiBUaGlzIGlzIGludGVyZXN0aW5nIHRvIGVuYWJsZSBidWZmZXJpbmcKLSAgICAgICAgICBvbiBzbG93ZXIgcmFuZG9tIGFjY2VzcyBtZWRpYSBzdWNoIGFzIGEgbmV0d29yayBmaWxlIHNlcnZlci4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8cGFyYT4KLSAgICAgIFVSSURlY29kZWJpbiBjYW4gYmUgZWFzaWx5IHRlc3RlZCBvbiB0aGUgY29tbWFuZGxpbmUsIGUuZy4gYnkgdXNpbmcgdGhlCi0gICAgICBjb21tYW5kIDxjb21tYW5kPmdzdC1sYXVuY2gtMS4wIHVyaWRlY29kZWJpbiB1cmk9ZmlsZTovLy9maWxlLm9nZyAhCi0gICAgICAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhdXRvYXVkaW9zaW5rPC9jb21tYW5kPi4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWNvbXBvbmVudHMtcGxheXNpbmsiPgotICAgIDx0aXRsZT5QbGF5c2luazwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgcGxheXNpbmsgZWxlbWVudCBpcyBhIHBvd2VyZnVsIHNpbmsgZWxlbWVudC4gSXQgaGFzIHJlcXVlc3QgcGFkcwotICAgICAgZm9yIHJhdyBkZWNvZGVkIGF1ZGlvLCB2aWRlbyBhbmQgdGV4dCBhbmQgaXQgd2lsbCBjb25maWd1cmUgaXRzZWxmIHRvCi0gICAgICBwbGF5IHRoZSBtZWRpYSBzdHJlYW1zLiBJdCBoYXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSXQgZXhwb3NlcyBHc3RTdHJlYW1Wb2x1bWUsIEdzdFZpZGVvT3ZlcmxheSwgR3N0TmF2aWdhdGlvbiBhbmQKLSAgICAgICAgICBHc3RDb2xvckJhbGFuY2UgaW50ZXJmYWNlcyBhbmQgYXV0b21hdGljYWxseSBwbHVncyBzb2Z0d2FyZQotICAgICAgICAgIGVsZW1lbnRzIHRvIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlcyB3aGVuIG5lZWRlZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHBsdWcgY29udmVyc2lvbiBlbGVtZW50cy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQ2FuIG9wdGlvbmFsbHkgcmVuZGVyIHZpc3VhbGl6YXRpb25zIHdoZW4gdGhlcmUgaXMgbm8gdmlkZW8gaW5wdXQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIENvbmZpZ3VyYWJsZSBzaW5rIGVsZW1lbnRzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBDb25maWd1cmFibGUgYXVkaW8vdmlkZW8gc3luYyBvZmZzZXQgdG8gZmluZS10dW5lIHN5bmNocm9uaXphdGlvbgotICAgICAgICAgIGluIGJhZGx5IG11eGVkIGZpbGVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBTdXBwb3J0IGZvciB0YWtpbmcgYSBzbmFwc2hvdCBvZiB0aGUgbGFzdCB2aWRlbyBmcmFtZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8cGFyYT4KLSAgICAgIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgaG93IHlvdSBjYW4gdXNlIHBsYXlzaW5rLiBXZSB1c2UgYSB1cmlkZWNvZGViaW4KLSAgICAgIGVsZW1lbnQgdG8gZGVjb2RlIGludG8gcmF3IGF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1zIHdoaWNoIHdlIHRoZW4gbGluawotICAgICAgdG8gdGhlIHBsYXlzaW5rIHJlcXVlc3QgcGFkcy4gV2Ugb25seSBsaW5rIHRoZSBmaXJzdCBhdWRpbyBhbmQgdmlkZW8KLSAgICAgIHBhZHMsIHlvdSBjb3VsZCB1c2UgYW4gaW5wdXQtc2VsZWN0b3IgdG8gbGluayBhbGwgcGFkcy4KLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotPCEtLSBleGFtcGxlLWJlZ2luIHBsYXlzaW5rLmMgYSAtLT4KLTwhW0NEQVRBWwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLV1dPgotPCEtLSBleGFtcGxlLWVuZCBwbGF5c2luay5jIGEgLS0+Ci1bLi4gbXlfYnVzX2NhbGxiYWNrIGdvZXMgaGVyZSAuLl0KLTwhLS0gZXhhbXBsZS1iZWdpbiBwbGF5c2luay5jIGIgLS0+Ci08IS0tCi1zdGF0aWMgZ2Jvb2xlYW4KLW15X2J1c19jYWxsYmFjayAoR3N0QnVzICAgICAqYnVzLAotCQkgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLQkJIGdwb2ludGVyICAgIGRhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKLSAgICAgIEdFcnJvciAqZXJyOwotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmFtcDtlcnIsICZhbXA7ZGVidWcpOwotICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLSZndDttZXNzYWdlKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIGdfZnJlZSAoZGVidWcpOwotCi0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIC8qIGVuZC1vZi1zdHJlYW0gKi8KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHVuaGFuZGxlZCBtZXNzYWdlICovCi0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIHJlbW92ZSBtZXNzYWdlIGZyb20gdGhlIHF1ZXVlICovCi0gIHJldHVybiBUUlVFOwotfQotLS0+Ci08IS0tIGV4YW1wbGUtZW5kIHBsYXlzaW5rLmMgYiAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBwbGF5c2luay5jIGMgLS0+Ci08IVtDREFUQVsKLUdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc2luazsKLQotc3RhdGljIHZvaWQKLWNiX3BhZF9hZGRlZCAoR3N0RWxlbWVudCAqZGVjLAotCSAgICAgIEdzdFBhZCAgICAgKnBhZCwKLQkgICAgICBncG9pbnRlciAgICBkYXRhKQotewotICBHc3RDYXBzICpjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cjsKLSAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLQotICAvKiBjaGVjayBtZWRpYSB0eXBlICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHBhZCwgTlVMTCk7Ci0gIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RyKTsKLQotICBrbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoc2luayk7Ci0KLSAgaWYgKGdfc3RyX2hhc19wcmVmaXggKG5hbWUsICJhdWRpbyIpKSB7Ci0gICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgImF1ZGlvX3NpbmsiKTsKLSAgfSBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4IChuYW1lLCAidmlkZW8iKSkgewotICAgIHRlbXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJ2aWRlb19zaW5rIik7Ci0gIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeCAobmFtZSwgInRleHQiKSkgewotICAgIHRlbXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJ0ZXh0X3NpbmsiKTsKLSAgfSBlbHNlIHsKLSAgICB0ZW1wbCA9IE5VTEw7Ci0gIH0KLQotICBpZiAodGVtcGwpIHsKLSAgICBHc3RQYWQgKnNpbmtwYWQ7Ci0KLSAgICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKHNpbmssIHRlbXBsLCBOVUxMLCBOVUxMKTsKLQotICAgIGlmICghZ3N0X3BhZF9pc19saW5rZWQgKHNpbmtwYWQpKQotICAgICAgZ3N0X3BhZF9saW5rIChwYWQsIHNpbmtwYWQpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIH0KLX0KLQotZ2ludAotbWFpbiAoZ2ludCAgIGFyZ2MsCi0gICAgICBnY2hhciAqYXJndltdKQotewotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdzdEVsZW1lbnQgKmRlYzsKLSAgR3N0QnVzICpidXM7Ci0KLSAgLyogaW5pdCBHU3RyZWFtZXIgKi8KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBpbnB1dCAqLwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoIlVzYWdlOiAlcyA8dXJpPlxuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogc2V0dXAgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGRlYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVyaWRlY29kZWJpbiIsICJzb3VyY2UiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZGVjKSwgInVyaSIsIGFyZ3ZbMV0sIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChkZWMsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChjYl9wYWRfYWRkZWQpLCBOVUxMKTsKLQotICAvKiBjcmVhdGUgYXVkaW8gb3V0cHV0ICovCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwbGF5c2luayIsICJzaW5rIik7Ci0gIGdzdF91dGlsX3NldF9vYmplY3RfYXJnIChHX09CSkVDVCAoc2luayksICJmbGFncyIsICAKLSAgICAgICJzb2Z0LWNvbG9yYmFsYW5jZStzb2Z0LXZvbHVtZSt2aXMrdGV4dCthdWRpbyt2aWRlbyIpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGRlYywgc2luaywgTlVMTCk7Ci0KLSAgLyogcnVuICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKLQotICByZXR1cm4gMDsKLX0KLV1dPgotPCEtLSBleGFtcGxlLWVuZCBwbGF5c2luay5jIGMgLS0+Ci0gICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgZXhhbXBsZSB3aWxsIHNob3cgYXVkaW8gYW5kIHZpZGVvIGRlcGVuZGluZyBvbiB3aGF0IHlvdQotICAgICAgZ2l2ZSBpdC4gVHJ5IHRoaXMgZXhhbXBsZSBvbiBhbiBhdWRpbyBmaWxlIGFuZCB5b3Ugd2lsbCBzZWUgdGhhdAotICAgICAgaXQgc2hvd3MgdmlzdWFsaXphdGlvbnMuIFlvdSBjYW4gY2hhbmdlIHRoZSB2aXN1YWxpemF0aW9uIGF0IHJ1bnRpbWUgYnkKLSAgICAgIGNoYW5naW5nIHRoZSB2aXMtcGx1Z2luIHByb3BlcnR5LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC14bWwueG1sIGIvZG9jcy9tYW51YWwvaGlnaGxldmVsLXhtbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMzA2MTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvaGlnaGxldmVsLXhtbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci14bWwiPgotICA8dGl0bGU+WE1MIGluIDxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPiAoZGVwcmVjYXRlZCk8L3RpdGxlPgotICA8cGFyYT4gCi0gICAgPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+IHVzZWQgdG8gcHJvdmlkZSBmdW5jdGlvbnMgdG8KLSAgICBzYXZlIHBpcGVsaW5lIGRlZmluaXRpb25zIGludG8gWE1MIGZvcm1hdCBhbmQgbGF0ZXIgcmVzdG9yZSB0aGVtCi0gICAgYWdhaW4gZnJvbSBYTUwuCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLSAgICBUaGlzIG5ldmVyIHJlYWxseSB3b3JrZWQgcHJvcGVybHkgZm9yIGFsbCBidXQgdGhlIG1vc3Qgc2ltcGxlIHVzZSBjYXNlcwotICAgIHRob3VnaCwgYW5kIGlzIGFsc28gcHJldHR5IG11Y2ggaW1wb3NzaWJsZSB0byBtYWtlIHdvcmsgY29ycmVjdGx5IGluIGEKLSAgICB1c2VmdWwgd2F5IGR1ZSB0byB0aGUgZHluYW1pYyBuYXR1cmUgb2YgYWxtb3N0IGFsbCBub24tdHJpdmlhbCBHU3RyZWFtZXIKLSAgICBwaXBlbGluZXMuIENvbnNlcXVlbnRseSwgdGhpcyBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQotICAgIHJlbW92ZWQgYXQgc29tZSBwb2ludC4gRG9uJ3QgdXNlIGl0LgotICA8L3BhcmE+Ci0KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWwgYi9kb2NzL21hbnVhbC9pbnRyby1iYXNpY3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzM4NWIxLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2ludHJvLWJhc2ljcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItaW50cm8tYmFzaWNzIj4KLSAgPHRpdGxlPkZvdW5kYXRpb25zPC90aXRsZT4KLSAgPHBhcmE+PCEtLSBzeW5jaHJvbml6ZSB3aXRoIFBXRyAtLT4KLSAgICBUaGlzIGNoYXB0ZXIgb2YgdGhlIGd1aWRlIGludHJvZHVjZXMgdGhlIGJhc2ljIGNvbmNlcHRzIG9mICZHU3RyZWFtZXI7LgotICAgIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29uY2VwdHMgd2lsbCBiZSBpbXBvcnRhbnQgaW4gcmVhZGluZyBhbnkgb2YgdGhlCi0gICAgcmVzdCBvZiB0aGlzIGd1aWRlLCBhbGwgb2YgdGhlbSBhc3N1bWUgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBiYXNpYwotICAgIGNvbmNlcHRzLgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludHJvLWJhc2ljcy1lbGVtZW50cyI+Ci0gICAgPHRpdGxlPkVsZW1lbnRzPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEFuIDxlbXBoYXNpcz5lbGVtZW50PC9lbXBoYXNpcz4gaXMgdGhlIG1vc3QgaW1wb3J0YW50IGNsYXNzIG9mIG9iamVjdHMKLSAgICAgIGluICZHU3RyZWFtZXI7LiBZb3Ugd2lsbCB1c3VhbGx5IGNyZWF0ZSBhIGNoYWluIG9mIGVsZW1lbnRzIGxpbmtlZAotICAgICAgdG9nZXRoZXIgYW5kIGxldCBkYXRhIGZsb3cgdGhyb3VnaCB0aGlzIGNoYWluIG9mIGVsZW1lbnRzLiBBbiBlbGVtZW50Ci0gICAgICBoYXMgb25lIHNwZWNpZmljIGZ1bmN0aW9uLCB3aGljaCBjYW4gYmUgdGhlIHJlYWRpbmcgb2YgZGF0YSBmcm9tIGEKLSAgICAgIGZpbGUsIGRlY29kaW5nIG9mIHRoaXMgZGF0YSBvciBvdXRwdXR0aW5nIHRoaXMgZGF0YSB0byB5b3VyIHNvdW5kCi0gICAgICBjYXJkIChvciBhbnl0aGluZyBlbHNlKS4gQnkgY2hhaW5pbmcgdG9nZXRoZXIgc2V2ZXJhbCBzdWNoIGVsZW1lbnRzLAotICAgICAgeW91IGNyZWF0ZSBhIDxlbXBoYXNpcz5waXBlbGluZTwvZW1waGFzaXM+IHRoYXQgY2FuIGRvIGEgc3BlY2lmaWMgdGFzaywKLSAgICAgIGZvciBleGFtcGxlIG1lZGlhIHBsYXliYWNrIG9yIGNhcHR1cmUuICZHU3RyZWFtZXI7IHNoaXBzIHdpdGggYSBsYXJnZQotICAgICAgY29sbGVjdGlvbiBvZiBlbGVtZW50cyBieSBkZWZhdWx0LCBtYWtpbmcgdGhlIGRldmVsb3BtZW50IG9mIGEgbGFyZ2UKLSAgICAgIHZhcmlldHkgb2YgbWVkaWEgYXBwbGljYXRpb25zIHBvc3NpYmxlLiBJZiBuZWVkZWQsIHlvdSBjYW4gYWxzbyB3cml0ZQotICAgICAgbmV3IGVsZW1lbnRzLiBUaGF0IHRvcGljIGlzIGV4cGxhaW5lZCBpbiBncmVhdCBkZWFsIGluIHRoZSAmR3N0UFdHOy4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludHJvLWJhc2ljcy1wYWRzIj4KLSAgICA8dGl0bGU+UGFkczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICA8ZW1waGFzaXM+UGFkczwvZW1waGFzaXM+IGFyZSBlbGVtZW50J3MgaW5wdXQgYW5kIG91dHB1dCwgd2hlcmUKLSAgICAgIHlvdSBjYW4gY29ubmVjdCBvdGhlciBlbGVtZW50cy4gVGhleSBhcmUgdXNlZCB0byBuZWdvdGlhdGUgbGlua3MgYW5kCi0gICAgICBkYXRhIGZsb3cKLSAgICAgIGJldHdlZW4gZWxlbWVudHMgaW4gJkdTdHJlYW1lcjsuIEEgcGFkIGNhbiBiZSB2aWV3ZWQgYXMgYQotICAgICAgPHF1b3RlPnBsdWc8L3F1b3RlPiBvciA8cXVvdGU+cG9ydDwvcXVvdGU+IG9uIGFuIGVsZW1lbnQgd2hlcmUKLSAgICAgIGxpbmtzIG1heSBiZSBtYWRlIHdpdGggb3RoZXIgZWxlbWVudHMsIGFuZCB0aHJvdWdoIHdoaWNoIGRhdGEgY2FuCi0gICAgICBmbG93IHRvIG9yIGZyb20gdGhvc2UgZWxlbWVudHMuIFBhZHMgaGF2ZSBzcGVjaWZpYyBkYXRhIGhhbmRsaW5nCi0gICAgICBjYXBhYmlsaXRpZXM6IGEgcGFkIGNhbiByZXN0cmljdCB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgZmxvd3MKLSAgICAgIHRocm91Z2ggaXQuIExpbmtzIGFyZSBvbmx5IGFsbG93ZWQgYmV0d2VlbiB0d28gcGFkcyB3aGVuIHRoZQotICAgICAgYWxsb3dlZCBkYXRhIHR5cGVzIG9mIHRoZSB0d28gcGFkcyBhcmUgY29tcGF0aWJsZS4gRGF0YSB0eXBlcyBhcmUKLSAgICAgIG5lZ290aWF0ZWQgYmV0d2VlbiBwYWRzIHVzaW5nIGEgcHJvY2VzcyBjYWxsZWQgPGVtcGhhc2lzPmNhcHMKLSAgICAgIG5lZ290aWF0aW9uPC9lbXBoYXNpcz4uIERhdGEgdHlwZXMgYXJlIGRlc2NyaWJlZCBhcyBhCi0gICAgICA8Y2xhc3NuYW1lPkdzdENhcHM8L2NsYXNzbmFtZT4uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQW4gYW5hbG9neSBtYXkgYmUgaGVscGZ1bCBoZXJlLiBBIHBhZCBpcyBzaW1pbGFyIHRvIGEgcGx1ZyBvciBqYWNrIG9uIGEKLSAgICAgIHBoeXNpY2FsIGRldmljZS4gQ29uc2lkZXIsIGZvciBleGFtcGxlLCBhIGhvbWUgdGhlYXRlciBzeXN0ZW0gY29uc2lzdGluZwotICAgICAgb2YgYW4gYW1wbGlmaWVyLCBhIERWRCBwbGF5ZXIsIGFuZCBhIChzaWxlbnQpIHZpZGVvIHByb2plY3Rvci4gTGlua2luZwotICAgICAgdGhlIERWRCBwbGF5ZXIgdG8gdGhlIGFtcGxpZmllciBpcyBhbGxvd2VkIGJlY2F1c2UgYm90aCBkZXZpY2VzIGhhdmUgYXVkaW8KLSAgICAgIGphY2tzLCBhbmQgbGlua2luZyB0aGUgcHJvamVjdG9yIHRvIHRoZSBEVkQgcGxheWVyIGlzIGFsbG93ZWQgYmVjYXVzZQotICAgICAgYm90aCBkZXZpY2VzIGhhdmUgY29tcGF0aWJsZSB2aWRlbyBqYWNrcy4gTGlua3MgYmV0d2VlbiB0aGUKLSAgICAgIHByb2plY3RvciBhbmQgdGhlIGFtcGxpZmllciBtYXkgbm90IGJlIG1hZGUgYmVjYXVzZSB0aGUgcHJvamVjdG9yIGFuZAotICAgICAgYW1wbGlmaWVyIGhhdmUgZGlmZmVyZW50IHR5cGVzIG9mIGphY2tzLiBQYWRzIGluICZHU3RyZWFtZXI7IHNlcnZlIHRoZQotICAgICAgc2FtZSBwdXJwb3NlIGFzIHRoZSBqYWNrcyBpbiB0aGUgaG9tZSB0aGVhdGVyIHN5c3RlbS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBGb3IgdGhlIG1vc3QgcGFydCwgYWxsIGRhdGEgaW4gJkdTdHJlYW1lcjsgZmxvd3Mgb25lIHdheSB0aHJvdWdoIGEgbGluawotICAgICAgYmV0d2VlbiBlbGVtZW50cy4gRGF0YSBmbG93cyBvdXQgb2Ygb25lIGVsZW1lbnQgdGhyb3VnaCBvbmUgb3IgbW9yZQotICAgICAgPGVtcGhhc2lzPnNvdXJjZSBwYWRzPC9lbXBoYXNpcz4sIGFuZCBlbGVtZW50cyBhY2NlcHQgaW5jb21pbmcgZGF0YQotICAgICAgdGhyb3VnaCBvbmUgb3IgbW9yZSA8ZW1waGFzaXM+c2luayBwYWRzPC9lbXBoYXNpcz4uIFNvdXJjZSBhbmQgc2luawotICAgICAgZWxlbWVudHMgaGF2ZSBvbmx5IHNvdXJjZSBhbmQgc2luayBwYWRzLCByZXNwZWN0aXZlbHkuIERhdGEgdXN1YWxseQotICAgICAgbWVhbnMgYnVmZmVycyAoZGVzY3JpYmVkIGJ5IHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgICAgdXJsPSImVVJMQVBJO2dzdHJlYW1lci1Hc3RCdWZmZXIuaHRtbCI+Ci0gICAgICA8Y2xhc3NuYW1lPkdzdEJ1ZmZlcjwvY2xhc3NuYW1lPjwvdWxpbms+IG9iamVjdCkgYW5kIGV2ZW50cyAoZGVzY3JpYmVkCi0gICAgICBieSB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iJlVSTEFQSTtnc3RyZWFtZXItR3N0RXZlbnQuaHRtbCI+Ci0gICAgICA8Y2xhc3NuYW1lPkdzdEV2ZW50PC9jbGFzc25hbWU+PC91bGluaz4gb2JqZWN0KS4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludHJvLWJhc2ljcy1iaW5zIj4KLSAgICA8dGl0bGU+QmlucyBhbmQgcGlwZWxpbmVzPC90aXRsZT4KLQotICAgIDxwYXJhPgotICAgICAgQSA8ZW1waGFzaXM+YmluPC9lbXBoYXNpcz4gaXMgYSBjb250YWluZXIgZm9yIGEgY29sbGVjdGlvbiBvZiBlbGVtZW50cy4KLSAgICAgIFNpbmNlIGJpbnMgYXJlIHN1YmNsYXNzZXMgb2YgZWxlbWVudHMKLSAgICAgIHRoZW1zZWx2ZXMsIHlvdSBjYW4gbW9zdGx5IGNvbnRyb2wgYSBiaW4gYXMgaWYgaXQgd2VyZSBhbiBlbGVtZW50LAotICAgICAgdGhlcmVieSBhYnN0cmFjdGluZyBhd2F5IGEgbG90IG9mIGNvbXBsZXhpdHkgZm9yIHlvdXIgYXBwbGljYXRpb24uIFlvdQotICAgICAgY2FuLCBmb3IgZXhhbXBsZSBjaGFuZ2Ugc3RhdGUgb24gYWxsIGVsZW1lbnRzIGluIGEgYmluIGJ5IGNoYW5naW5nIHRoZQotICAgICAgc3RhdGUgb2YgdGhhdCBiaW4gaXRzZWxmLiBCaW5zIGFsc28gZm9yd2FyZCBidXMgbWVzc2FnZXMgZnJvbSB0aGVpcgotICAgICAgY29udGFpbmVkIGNoaWxkcmVuIChzdWNoIGFzIGVycm9yIG1lc3NhZ2VzLCB0YWcgbWVzc2FnZXMgb3IgRU9TIG1lc3NhZ2VzKS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBIDxlbXBoYXNpcz5waXBlbGluZTwvZW1waGFzaXM+IGlzIGEgdG9wLWxldmVsIGJpbi4gSXQgcHJvdmlkZXMgYSBidXMgZm9yCi0gICAgICB0aGUgYXBwbGljYXRpb24gYW5kIG1hbmFnZXMgdGhlIHN5bmNocm9uaXphdGlvbiBmb3IgaXRzIGNoaWxkcmVuLiAKLSAgICAgIEFzIHlvdSBzZXQgaXQgdG8gUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUsIGRhdGEgZmxvdyB3aWxsIHN0YXJ0IGFuZCBtZWRpYQotICAgICAgcHJvY2Vzc2luZyB3aWxsIHRha2UgcGxhY2UuIE9uY2Ugc3RhcnRlZCwgcGlwZWxpbmVzIHdpbGwgcnVuIGluIGEKLSAgICAgIHNlcGFyYXRlIHRocmVhZCB1bnRpbCB5b3Ugc3RvcCB0aGVtIG9yIHRoZSBlbmQKLSAgICAgIG9mIHRoZSBkYXRhIHN0cmVhbSBpcyByZWFjaGVkLgotICAgIDwvcGFyYT4KLQotICAgIDxmaWd1cmUgZmxvYXQ9IjEiIGlkPSJzZWN0aW9uLXBpcGVsaW5lLWltZyI+Ci0gICAgICA8dGl0bGU+JkdTdHJlYW1lcjsgcGlwZWxpbmUgZm9yIGEgc2ltcGxlIG9nZyBwbGF5ZXI8L3RpdGxlPgotICAgICAgPG1lZGlhb2JqZWN0PgotICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgPGltYWdlZGF0YSBzY2FsZT0iNzUiIGZpbGVyZWY9ImltYWdlcy9zaW1wbGUtcGxheWVyLiZpbWFnZTsiIGZvcm1hdD0iJklNQUdFOyIgLz4KLSAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgIDwvbWVkaWFvYmplY3Q+ICAKLSAgICA8L2ZpZ3VyZT4KLQotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRyby1iYXNpY3MtY29tbXVuaWNhdGlvbiI+Ci0gICAgPHRpdGxlPkNvbW11bmljYXRpb248L3RpdGxlPgotCi0gICAgPHBhcmE+Ci0gICAgICAmR1N0cmVhbWVyOyBwcm92aWRlcyBzZXZlcmFsIG1lY2hhbmlzbXMgZm9yIGNvbW11bmljYXRpb24gYW5kIGRhdGEgZXhjaGFuZ2UKLSAgICAgIGJldHdlZW4gdGhlIDxlbXBoYXNpcz5hcHBsaWNhdGlvbjwvZW1waGFzaXM+IGFuZCB0aGUgPGVtcGhhc2lzPnBpcGVsaW5lPC9lbXBoYXNpcz4uCi0gICAgPC9wYXJhPgotCi0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGVtcGhhc2lzPmJ1ZmZlcnM8L2VtcGhhc2lzPiBhcmUgb2JqZWN0cyBmb3IgcGFzc2luZyBzdHJlYW1pbmcgZGF0YQotICAgICAgICAgIGJldHdlZW4gZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lLiBCdWZmZXJzIGFsd2F5cyB0cmF2ZWwgZnJvbSBzb3VyY2VzCi0gICAgICAgICAgdG8gc2lua3MgKGRvd25zdHJlYW0pLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8ZW1waGFzaXM+ZXZlbnRzPC9lbXBoYXNpcz4gYXJlIG9iamVjdHMgc2VudCBiZXR3ZWVuIGVsZW1lbnRzIG9yIGZyb20KLSAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gZWxlbWVudHMuIEV2ZW50cyBjYW4gdHJhdmVsIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtLgotICAgICAgICAgIERvd25zdHJlYW0gZXZlbnRzIGNhbiBiZSBzeW5jaHJvbmlzZWQgdG8gdGhlIGRhdGEgZmxvdy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGVtcGhhc2lzPm1lc3NhZ2VzPC9lbXBoYXNpcz4gYXJlIG9iamVjdHMgcG9zdGVkIGJ5IGVsZW1lbnRzIG9uCi0gICAgICAgICAgdGhlIHBpcGVsaW5lJ3MgbWVzc2FnZSBidXMsIHdoZXJlIHRoZXkgd2lsbCBiZSBoZWxkIGZvciBjb2xsZWN0aW9uCi0gICAgICAgICAgYnkgdGhlIGFwcGxpY2F0aW9uLiBNZXNzYWdlcyBjYW4gYmUgaW50ZXJjZXB0ZWQgc3luY2hyb25vdXNseSBmcm9tCi0gICAgICAgICAgdGhlIHN0cmVhbWluZyB0aHJlYWQgY29udGV4dCBvZiB0aGUgZWxlbWVudCBwb3N0aW5nIHRoZSBtZXNzYWdlLCBidXQKLSAgICAgICAgICBhcmUgdXN1YWxseSBoYW5kbGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBhcHBsaWNhdGlvbiBmcm9tIHRoZQotICAgICAgICAgIGFwcGxpY2F0aW9uJ3MgbWFpbiB0aHJlYWQuIE1lc3NhZ2VzIGFyZSB1c2VkIHRvIHRyYW5zbWl0IGluZm9ybWF0aW9uCi0gICAgICAgICAgc3VjaCBhcyBlcnJvcnMsIHRhZ3MsIHN0YXRlIGNoYW5nZXMsIGJ1ZmZlcmluZyBzdGF0ZSwgcmVkaXJlY3RzIGV0Yy4KLSAgICAgICAgICBmcm9tIGVsZW1lbnRzIHRvIHRoZSBhcHBsaWNhdGlvbiBpbiBhIHRocmVhZC1zYWZlIHdheS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGVtcGhhc2lzPnF1ZXJpZXM8L2VtcGhhc2lzPiBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbgotICAgICAgICAgIHN1Y2ggYXMgZHVyYXRpb24gb3IgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBmcm9tIHRoZSBwaXBlbGluZS4KLSAgICAgICAgICBRdWVyaWVzIGFyZSBhbHdheXMgYW5zd2VyZWQgc3luY2hyb25vdXNseS4gRWxlbWVudHMgY2FuIGFsc28gdXNlCi0gICAgICAgICAgcXVlcmllcyB0byByZXF1ZXN0IGluZm9ybWF0aW9uIGZyb20gdGhlaXIgcGVlciBlbGVtZW50cyAoc3VjaCBhcyB0aGUKLSAgICAgICAgICBmaWxlIHNpemUgb3IgZHVyYXRpb24pLiBUaGV5IGNhbiBiZSB1c2VkIGJvdGggd2F5cyB3aXRoaW4gYSBwaXBlbGluZSwKLSAgICAgICAgICBidXQgdXBzdHJlYW0gcXVlcmllcyBhcmUgbW9yZSBjb21tb24uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgICA8ZmlndXJlIGZsb2F0PSIxIiBpZD0ic2VjdGlvbi1jb21tdW5pY2F0aW9uLWltZyI+Ci0gICAgICA8dGl0bGU+JkdTdHJlYW1lcjsgcGlwZWxpbmUgd2l0aCBkaWZmZXJlbnQgY29tbXVuaWNhdGlvbiBmbG93czwvdGl0bGU+Ci0gICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICA8aW1hZ2VkYXRhIHNjYWxlPSI3NSIgZmlsZXJlZj0iaW1hZ2VzL2NvbW11bmljYXRpb24uJmltYWdlOyIgZm9ybWF0PSImSU1BR0U7IiAvPgotICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgPC9tZWRpYW9iamVjdD4gIAotICAgIDwvZmlndXJlPgotCi0gIDwvc2VjdDE+Ci0KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2ludHJvLWdzdHJlYW1lci54bWwgYi9kb2NzL21hbnVhbC9pbnRyby1nc3RyZWFtZXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODMyOWU4Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2ludHJvLWdzdHJlYW1lci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1nc3RyZWFtZXIiPgotICA8dGl0bGU+V2hhdCBpcyAmR1N0cmVhbWVyOz88L3RpdGxlPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLTwhLS0gIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRyby13aGF0Ij4gLS0+PCEtLSBzeW5jaHJvbml6ZSB3aXRoIFBXRyAtLT4KLSAgICA8cGFyYT4gCi0gICAgICAmR1N0cmVhbWVyOyBpcyBhIGZyYW1ld29yayBmb3IgY3JlYXRpbmcgc3RyZWFtaW5nIG1lZGlhIGFwcGxpY2F0aW9ucy4KLSAgICAgIFRoZSBmdW5kYW1lbnRhbCBkZXNpZ24gY29tZXMgZnJvbSB0aGUgdmlkZW8gcGlwZWxpbmUgYXQgT3JlZ29uIEdyYWR1YXRlCi0gICAgICBJbnN0aXR1dGUsIGFzIHdlbGwgYXMgc29tZSBpZGVhcyBmcm9tIERpcmVjdFNob3cuICAKLSAgICA8L3BhcmE+Ci0gCi0gICAgPHBhcmE+Ci0gICAgICAmR1N0cmVhbWVyOydzIGRldmVsb3BtZW50IGZyYW1ld29yayBtYWtlcyBpdCBwb3NzaWJsZSB0byB3cml0ZSBhbnkKLSAgICAgIHR5cGUgb2Ygc3RyZWFtaW5nIG11bHRpbWVkaWEgYXBwbGljYXRpb24uIFRoZSAmR1N0cmVhbWVyOyBmcmFtZXdvcmsKLSAgICAgIGlzIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzeSB0byB3cml0ZSBhcHBsaWNhdGlvbnMgdGhhdCBoYW5kbGUgYXVkaW8KLSAgICAgIG9yIHZpZGVvIG9yIGJvdGguIEl0IGlzbid0IHJlc3RyaWN0ZWQgdG8gYXVkaW8gYW5kIHZpZGVvLCBhbmQgY2FuCi0gICAgICBwcm9jZXNzIGFueSBraW5kIG9mIGRhdGEgZmxvdy4KLSAgICAgIFRoZSBwaXBlbGluZSBkZXNpZ24gaXMgbWFkZSB0byBoYXZlIGxpdHRsZSBvdmVyaGVhZCBhYm92ZSB3aGF0IHRoZQotICAgICAgYXBwbGllZCBmaWx0ZXJzIGluZHVjZS4gVGhpcyBtYWtlcyAmR1N0cmVhbWVyOyBhIGdvb2QgZnJhbWV3b3JrIGZvcgotICAgICAgZGVzaWduaW5nIGV2ZW4gaGlnaC1lbmQgYXVkaW8gYXBwbGljYXRpb25zIHdoaWNoIHB1dCBoaWdoIGRlbWFuZHMgb24KLSAgICAgIGxhdGVuY3kuIAotICAgIDwvcGFyYT4gCi0KLSAgICA8cGFyYT4KLSAgICAgIE9uZSBvZiB0aGUgbW9zdCBvYnZpb3VzIHVzZXMgb2YgJkdTdHJlYW1lcjsgaXMgdXNpbmcgaXQgdG8gYnVpbGQKLSAgICAgIGEgbWVkaWEgcGxheWVyLiAmR1N0cmVhbWVyOyBhbHJlYWR5IGluY2x1ZGVzIGNvbXBvbmVudHMgZm9yIGJ1aWxkaW5nIGEKLSAgICAgIG1lZGlhIHBsYXllciB0aGF0IGNhbiBzdXBwb3J0IGEgdmVyeSB3aWRlIHZhcmlldHkgb2YgZm9ybWF0cywgaW5jbHVkaW5nCi0gICAgICBNUDMsIE9nZy9Wb3JiaXMsIE1QRUctMS8yLCBBVkksIFF1aWNrdGltZSwgbW9kLCBhbmQgbW9yZS4gJkdTdHJlYW1lcjssCi0gICAgICBob3dldmVyLCBpcyBtdWNoIG1vcmUgdGhhbiBqdXN0IGFub3RoZXIgbWVkaWEgcGxheWVyLiBJdHMgbWFpbiBhZHZhbnRhZ2VzCi0gICAgICBhcmUgdGhhdCB0aGUgcGx1Z2dhYmxlIGNvbXBvbmVudHMgY2FuIGJlIG1peGVkIGFuZCBtYXRjaGVkIGludG8gYXJiaXRyYXJ5Ci0gICAgICBwaXBlbGluZXMgc28gdGhhdCBpdCdzIHBvc3NpYmxlIHRvIHdyaXRlIGEgZnVsbC1mbGVkZ2VkIHZpZGVvIG9yIGF1ZGlvCi0gICAgICBlZGl0aW5nIGFwcGxpY2F0aW9uLgotICAgIDwvcGFyYT4gCi0KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBmcmFtZXdvcmsgaXMgYmFzZWQgb24gcGx1Z2lucyB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgdmFyaW91cyBjb2RlYyAKLSAgICAgIGFuZCBvdGhlciBmdW5jdGlvbmFsaXR5LiBUaGUgcGx1Z2lucyBjYW4gYmUgbGlua2VkIGFuZCBhcnJhbmdlZCBpbgotICAgICAgYSBwaXBlbGluZS4gVGhpcyBwaXBlbGluZSBkZWZpbmVzIHRoZSBmbG93IG9mIHRoZSBkYXRhLiBQaXBlbGluZXMgY2FuIAotICAgICAgYWxzbyBiZSBlZGl0ZWQgd2l0aCBhIEdVSSBlZGl0b3IgYW5kIHNhdmVkIGFzIFhNTCBzbyB0aGF0IHBpcGVsaW5lCi0gICAgICBsaWJyYXJpZXMgY2FuIGJlIG1hZGUgd2l0aCBhIG1pbmltdW0gb2YgZWZmb3J0LgotICAgIDwvcGFyYT4gCi0KLSAgICA8cGFyYT4KLSAgICAgIFRoZSAmR1N0cmVhbWVyOyBjb3JlIGZ1bmN0aW9uIGlzIHRvIHByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIHBsdWdpbnMsCi0gICAgICBkYXRhIGZsb3cgYW5kIG1lZGlhIHR5cGUgaGFuZGxpbmcvbmVnb3RpYXRpb24uIEl0IGFsc28gcHJvdmlkZXMgYW4KLSAgICAgIEFQSSB0byB3cml0ZSBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIHZhcmlvdXMgcGx1Z2lucy4KLSAgICA8L3BhcmE+IAotCi0KLSAgICA8cGFyYT4KLSAgICAgIFNwZWNpZmljYWxseSwgJkdTdHJlYW1lcjsgcHJvdmlkZXMKLSAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5hbiBBUEkgZm9yIG11bHRpbWVkaWEgYXBwbGljYXRpb25zPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5hIHBsdWdpbiBhcmNoaXRlY3R1cmU8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmEgcGlwZWxpbmUgYXJjaGl0ZWN0dXJlPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5hIG1lY2hhbmlzbSBmb3IgbWVkaWEgdHlwZSBoYW5kbGluZy9uZWdvdGlhdGlvbjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+YSBtZWNoYW5pc20gZm9yIHN5bmNocm9uaXphdGlvbjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3ZlciAyNTAgcGx1Zy1pbnMgcHJvdmlkaW5nIG1vcmUgdGhhbiAxMDAwIGVsZW1lbnRzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5hIHNldCBvZiB0b29sczwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPC9wYXJhPiAKLQotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgcGx1Zy1pbnMgY291bGQgYmUgY2xhc3NpZmllZCBpbnRvCi0gICAgICA8aXRlbWl6ZWRsaXN0PgotCTxsaXN0aXRlbT48cGFyYT5wcm90b2NvbHMgaGFuZGxpbmc8L3BhcmE+PC9saXN0aXRlbT4KLQk8bGlzdGl0ZW0+PHBhcmE+c291cmNlczogZm9yIGF1ZGlvIGFuZCB2aWRlbyAoaW52b2x2ZXMgcHJvdG9jb2wgcGx1Z2lucyk8L3BhcmE+PC9saXN0aXRlbT4KLQk8bGlzdGl0ZW0+PHBhcmE+Zm9ybWF0czogcGFyc2VycywgZm9ybWF0ZXJzLCBtdXhlcnMsIGRlbXV4ZXJzLCBtZXRhZGF0YSwgc3VidGl0bGVzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPGxpc3RpdGVtPjxwYXJhPmNvZGVjczogY29kZXJzIGFuZCBkZWNvZGVyczwvcGFyYT48L2xpc3RpdGVtPgotCTxsaXN0aXRlbT48cGFyYT5maWx0ZXJzOiBjb252ZXJ0ZXJzLCBtaXhlcnMsIGVmZmVjdHMsIC4uLjwvcGFyYT48L2xpc3RpdGVtPgotCTxsaXN0aXRlbT48cGFyYT5zaW5rczogZm9yIGF1ZGlvIGFuZCB2aWRlbyAoaW52b2x2ZXMgcHJvdG9jb2wgcGx1Z2lucyk8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4gCi0gICAgCi0gICAgPGZpZ3VyZSBmbG9hdD0iMSIgaWQ9InNlY3Rpb24tZ3N0cmVhbWVyLWltZyI+Ci0gICAgICA8dGl0bGU+R3N0cmVhbWVyIG92ZXJ2aWV3PC90aXRsZT4KLSAgICAgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgIDxpbWFnZWRhdGEgc2NhbGU9Ijc1IiBmaWxlcmVmPSJpbWFnZXMvZ3N0cmVhbWVyLW92ZXJ2aWV3LiZpbWFnZTsiIGZvcm1hdD0iJklNQUdFOyIgLz4KLSAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgIDwvbWVkaWFvYmplY3Q+ICAKLSAgICA8L2ZpZ3VyZT4KLQotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgaXMgcGFja2FnZWQgaW50bwotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmdzdHJlYW1lcjogdGhlIGNvcmUgcGFja2FnZTwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Z3N0LXBsdWdpbnMtYmFzZTogYW4gZXNzZW50aWFsIGV4ZW1wbGFyeSBzZXQgb2YgZWxlbWVudHM8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmdzdC1wbHVnaW5zLWdvb2Q6IGEgc2V0IG9mIGdvb2QtcXVhbGl0eSBwbHVnLWlucyB1bmRlciBMR1BMPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5nc3QtcGx1Z2lucy11Z2x5OiBhIHNldCBvZiBnb29kLXF1YWxpdHkgcGx1Zy1pbnMgdGhhdCBtaWdodCBwb3NlIGRpc3RyaWJ1dGlvbiBwcm9ibGVtczwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Z3N0LXBsdWdpbnMtYmFkOiBhIHNldCBvZiBwbHVnLWlucyB0aGF0IG5lZWQgbW9yZSBxdWFsaXR5PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5nc3QtbGliYXY6IGEgc2V0IG9mIHBsdWctaW5zIHRoYXQgd3JhcCBsaWJhdiBmb3IgZGVjb2RpbmcgYW5kIGVuY29kaW5nPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5hIGZldyBvdGhlcnMgcGFja2FnZXM8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4gCi0KLQotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvaW50cm8tbW90aXZhdGlvbi54bWwgYi9kb2NzL21hbnVhbC9pbnRyby1tb3RpdmF0aW9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1NzFiNi4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9pbnRyby1tb3RpdmF0aW9uLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwMCArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1tb3RpdmF0aW9uIj4KLSAgPHRpdGxlPkRlc2lnbiBwcmluY2lwbGVzPC90aXRsZT4KLQotPCEtLQotICA8cGFyYT4gCi0gICAgTGludXggaGFzIGhpc3RvcmljYWxseSBsYWdnZWQgYmVoaW5kIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGluIHRoZQotICAgIG11bHRpbWVkaWEgYXJlbmEuIE1pY3Jvc29mdCdzIDx0cmFkZW1hcms+V2luZG93czwvdHJhZGVtYXJrPiBhbmQKLSAgICBBcHBsZSdzIDx0cmFkZW1hcms+TWFjT1M8L3RyYWRlbWFyaz4gYm90aCBoYXZlIHN0cm9uZyBzdXBwb3J0IGZvcgotICAgIG11bHRpbWVkaWEgZGV2aWNlcywgbXVsdGltZWRpYSBjb250ZW50IGNyZWF0aW9uLCBwbGF5YmFjaywgYW5kCi0gICAgcmVhbHRpbWUgcHJvY2Vzc2luZy4gTGludXgsIG9uIHRoZSBvdGhlciBoYW5kLCBoYXMgYSBwb29ybHkgaW50ZWdyYXRlZAotICAgIGNvbGxlY3Rpb24gb2YgbXVsdGltZWRpYSB1dGlsaXRpZXMgYW5kIGFwcGxpY2F0aW9ucyBhdmFpbGFibGUsIHdoaWNoCi0gICAgY2FuIGhhcmRseSBjb21wZXRlIHdpdGggdGhlIHByb2Zlc3Npb25hbCBsZXZlbCBvZiBzb2Z0d2FyZSBhdmFpbGFibGUKLSAgICBmb3IgTVMgV2luZG93cyBhbmQgTWFjT1MuCi0gIDwvcGFyYT4KLSAgPHBhcmE+IAotICAgIEdTdHJlYW1lciB3YXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIHNvbHV0aW9uIHRvIHRoZSBjdXJyZW50IExpbnV4IG1lZGlhCi0gICAgcHJvYmxlbXMuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tbW90aXZhdGlvbi1wcm9ibGVtcyI+Ci0gICAgPHRpdGxlPkN1cnJlbnQgcHJvYmxlbXM8L3RpdGxlPgotICAgIDxwYXJhPiAKLSAgICAgIFdlIGRlc2NyaWJlIHRoZSB0eXBpY2FsIHByb2JsZW1zIGluIHRvZGF5J3MgbWVkaWEgaGFuZGxpbmcgb24gTGludXguCi0gICAgPC9wYXJhPgotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1tb3RpdmF0aW9uLWR1cGxpY2F0ZSI+Ci0gICAgICA8dGl0bGU+TXVsdGl0dWRlIG9mIGR1cGxpY2F0ZSBjb2RlPC90aXRsZT4KLSAgICAgIDxwYXJhPiAKLSAgICAgICAgVGhlIExpbnV4IHVzZXIgd2hvIHdpc2hlcyB0byBoZWFyIGEgc291bmQgZmlsZSBtdXN0IGh1bnQgdGhyb3VnaAotICAgICAgICB0aGVpciBjb2xsZWN0aW9uIG9mIHNvdW5kIGZpbGUgcGxheWVycyBpbiBvcmRlciB0byBwbGF5IHRoZSB0ZW5zCi0gICAgICAgIG9mIHNvdW5kIGZpbGUgZm9ybWF0cyBpbiB3aWRlIHVzZSB0b2RheS4gTW9zdCBvZiB0aGVzZSBwbGF5ZXJzCi0gICAgICAgIGJhc2ljYWxseSByZWltcGxlbWVudCB0aGUgc2FtZSBjb2RlIG92ZXIgYW5kIG92ZXIgYWdhaW4uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIExpbnV4IGRldmVsb3BlciB3aG8gd2lzaGVzIHRvIGVtYmVkIGEgdmlkZW8gY2xpcCBpbiB0aGVpcgotICAgICAgICBhcHBsaWNhdGlvbiBtdXN0IHVzZSBjcnVkZSBoYWNrcyB0byBydW4gYW4gZXh0ZXJuYWwgdmlkZW8gcGxheWVyLgotICAgICAgICBUaGVyZSBpcyBubyBsaWJyYXJ5IGF2YWlsYWJsZSB0aGF0IGEgZGV2ZWxvcGVyIGNhbiB1c2UgdG8gY3JlYXRlCi0gICAgICAgIGEgY3VzdG9tIG1lZGlhIHBsYXllci4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLW1vdGl2YXRpb24tZ29hbCI+Ci0gICAgICA8dGl0bGU+J09uZSBnb2FsJyBtZWRpYSBwbGF5ZXJzL2xpYnJhcmllczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgWW91ciB0eXBpY2FsIE1QRUcgcGxheWVyIHdhcyBkZXNpZ25lZCB0byBwbGF5IE1QRUcgdmlkZW8gYW5kIGF1ZGlvLgotICAgICAgICBNb3N0IG9mIHRoZXNlIHBsYXllcnMgaGF2ZSBpbXBsZW1lbnRlZCBhIGNvbXBsZXRlIGluZnJhc3RydWN0dXJlCi0gICAgICAgIGZvY3VzZWQgb24gYWNoaWV2aW5nIHRoZWlyIG9ubHkgZ29hbDogcGxheWJhY2suIE5vIHByb3Zpc2lvbnMgd2VyZQotICAgICAgICBtYWRlIHRvIGFkZCBmaWx0ZXJzIG9yIHNwZWNpYWwgZWZmZWN0cyB0byB0aGUgdmlkZW8gb3IgYXVkaW8gZGF0YS4KLSAgICAgIDwvcGFyYT4gCi0gICAgICA8cGFyYT4KLSAgICAgICAgSWYgeW91IHdhbnQgdG8gY29udmVydCBhbiBNUEVHLTIgdmlkZW8gc3RyZWFtIGludG8gYW4gQVZJIGZpbGUsCi0gICAgICAgIHlvdXIgYmVzdCBvcHRpb24gd291bGQgYmUgdG8gdGFrZSBhbGwgb2YgdGhlIE1QRUctMiBkZWNvZGluZwotICAgICAgICBhbGdvcml0aG1zIG91dCBvZiB0aGUgcGxheWVyIGFuZCBkdXBsaWNhdGUgdGhlbSBpbnRvIHlvdXIgb3duCi0gICAgICAgIEFWSSBlbmNvZGVyLiBUaGVzZSBhbGdvcml0aG1zIGNhbm5vdCBlYXNpbHkgYmUgc2hhcmVkIGFjcm9zcwotICAgICAgICBhcHBsaWNhdGlvbnMuCi0gICAgICA8L3BhcmE+IAotICAgICAgPHBhcmE+Ci0gICAgICAgIEF0dGVtcHRzIGhhdmUgYmVlbiBtYWRlIHRvIGNyZWF0ZSBsaWJyYXJpZXMgZm9yIGhhbmRsaW5nIHZhcmlvdXMKLSAgICAgICAgbWVkaWEgdHlwZXMuIEJlY2F1c2UgdGhleSBmb2N1cyBvbiBhIHZlcnkgc3BlY2lmaWMgbWVkaWEgdHlwZQotICAgICAgICAoYXZpZmlsZSwgbGlibXBlZzIsIC4uLiksIHNpZ25pZmljYW50IHdvcmsgaXMgbmVlZGVkIHRvIGludGVncmF0ZQotICAgICAgICB0aGVtIGR1ZSB0byBhIGxhY2sgb2YgYSBjb21tb24gQVBJLiAmR1N0cmVhbWVyOyBhbGxvd3MgeW91IHRvCi0gICAgICAgIHdyYXAgdGhlc2UgbGlicmFyaWVzIHdpdGggYSBjb21tb24gQVBJLCB3aGljaCBzaWduaWZpY2FudGx5Ci0gICAgICAgIHNpbXBsaWZpZXMgaW50ZWdyYXRpb24gYW5kIHJldXNlLgotICAgICAgPC9wYXJhPiAKLSAgICA8L3NlY3QyPgotICAKLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tbW90aXZhdGlvbi1wbHVnaW4iPgotICAgICAgPHRpdGxlPk5vbiB1bmlmaWVkIHBsdWdpbiBtZWNoYW5pc21zPC90aXRsZT4KLSAgICAgIDxwYXJhPiAKLSAgICAgICAgWW91ciB0eXBpY2FsIG1lZGlhIHBsYXllciBtaWdodCBoYXZlIGEgcGx1Z2luIGZvciBkaWZmZXJlbnQgbWVkaWEKLSAgICAgICAgdHlwZXMuIFR3byBtZWRpYSBwbGF5ZXJzIHdpbGwgdHlwaWNhbGx5IGltcGxlbWVudCB0aGVpciBvd24gcGx1Z2luCi0gICAgICAgIG1lY2hhbmlzbSBzbyB0aGF0IHRoZSBjb2RlY3MgY2Fubm90IGJlIGVhc2lseSBleGNoYW5nZWQuIFRoZSBwbHVnaW4KLSAgICAgICAgc3lzdGVtIG9mIHRoZSB0eXBpY2FsIG1lZGlhIHBsYXllciBpcyBhbHNvIHZlcnkgdGFpbG9yZWQgdG8gdGhlCi0gICAgICAgIHNwZWNpZmljIG5lZWRzIG9mIHRoZSBhcHBsaWNhdGlvbi4KLSAgICAgIDwvcGFyYT4gCi0gICAgICA8cGFyYT4gCi0gICAgICAgIFRoZSBsYWNrIG9mIGEgdW5pZmllZCBwbHVnaW4gbWVjaGFuaXNtIGFsc28gc2VyaW91c2x5IGhpbmRlcnMgdGhlIAotCWNyZWF0aW9uIG9mIGJpbmFyeSBvbmx5IGNvZGVjcy4gTm8gY29tcGFueSBpcyB3aWxsaW5nIHRvIHBvcnQgdGhlaXIKLQljb2RlIHRvIGFsbCB0aGUgZGlmZmVyZW50IHBsdWdpbiBtZWNoYW5pc21zLgotICAgICAgPC9wYXJhPiAKLSAgICAgIDxwYXJhPiAKLSAgICAgICAgV2hpbGUgJkdTdHJlYW1lcjsgYWxzbyB1c2VzIGl0IG93biBwbHVnaW4gc3lzdGVtIGl0IG9mZmVycyBhIHZlcnkgcmljaAotCWZyYW1ld29yayBmb3IgdGhlIHBsdWdpbiBkZXZlbG9wZXIgYW5kIGVuc3VyZXMgdGhlIHBsdWdpbiBjYW4gYmUgdXNlZAotCWluIGEgd2lkZSByYW5nZSBvZiBhcHBsaWNhdGlvbnMsIHRyYW5zcGFyZW50bHkgaW50ZXJhY3Rpbmcgd2l0aCBvdGhlcgotCXBsdWdpbnMuIFRoZSBmcmFtZXdvcmsgdGhhdCAmR1N0cmVhbWVyOyBwcm92aWRlcyBmb3IgdGhlIHBsdWdpbnMgaXMKLQlmbGV4aWJsZSBlbm91Z2ggdG8gaG9zdCBldmVuIHRoZSBtb3N0IGRlbWFuZGluZyBwbHVnaW5zLgotICAgICAgPC9wYXJhPiAKLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLW1vdGl2YXRpb24tZXhwZXJpZW5jZSI+Ci0gICAgICA8dGl0bGU+UG9vciB1c2VyIGV4cGVyaWVuY2U8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEJlY2F1c2Ugb2YgdGhlIHByb2JsZW1zIG1lbnRpb25lZCBhYm92ZSwgYXBwbGljYXRpb24gYXV0aG9ycyBoYXZlCi0gICAgICAgIHNvIGZhciBvZnRlbiBiZWVuIHVyZ2VkIHRvIHNwZW5kIGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiB0aW1lIGluCi0gICAgICAgIHdyaXRpbmcgdGhlaXIgb3duIGJhY2tlbmRzLCBwbHVnaW4gbWVjaGFuaXNtcyBhbmQgc28gb24uIFRoZSByZXN1bHQKLSAgICAgICAgaGFzIG9mdGVuIGJlZW4sIHVuZm9ydHVuYXRlbHksIHRoYXQgYm90aCB0aGUgYmFja2VuZCBhcyB3ZWxsIGFzIHRoZQotICAgICAgICB1c2VyIGludGVyZmFjZSB3ZXJlIG9ubHkgaGFsZi1maW5pc2hlZC4gRGVtb3RpdmF0ZWQsIHRoZSBhcHBsaWNhdGlvbgotICAgICAgICBhdXRob3JzIHdvdWxkIHN0YXJ0IHJld3JpdGluZyB0aGUgd2hvbGUgdGhpbmcgYW5kIGNvbXBsZXRlIHRoZSBjaXJjbGUuCi0gICAgICAgIFRoaXMgbGVhZHMgdG8gYSA8ZW1waGFzaXM+cG9vciBlbmQgdXNlciBleHBlcmllbmNlPC9lbXBoYXNpcz4uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1tb3RpdmF0aW9uLW5ldHdvcmsiPgotICAgICAgPHRpdGxlPlByb3Zpc2lvbiBmb3IgbmV0d29yayB0cmFuc3BhcmVuY3k8L3RpdGxlPgotICAgICAgPHBhcmE+IAotICAgICAgICBObyBpbmZyYXN0cnVjdHVyZSBpcyBwcmVzZW50IHRvIGFsbG93IG5ldHdvcmsgdHJhbnNwYXJlbnQgbWVkaWEKLSAgICAgICAgaGFuZGxpbmcuIEEgZGlzdHJpYnV0ZWQgTVBFRyBlbmNvZGVyIHdpbGwgdHlwaWNhbGx5IGR1cGxpY2F0ZSB0aGUKLSAgICAgICAgc2FtZSBlbmNvZGVyIGFsZ29yaXRobXMgZm91bmQgaW4gYSBub24tZGlzdHJpYnV0ZWQgZW5jb2Rlci4KLSAgICAgIDwvcGFyYT4gCi0gICAgICA8cGFyYT4gCi0gICAgICAgIE5vIHByb3Zpc2lvbnMgaGF2ZSBiZWVuIG1hZGUgZm9yIHVzZSBieSBhbmQgdXNlIG9mIHRlY2hub2xvZ2llcyBzdWNoIAotCWFzIHRoZSA8dWxpbmsgdXJsPSJodHRwOi8vZ25vbWUub3JnLyIgdHlwZT0iaHR0cCI+R05PTUU8L3VsaW5rPgotCWRlc2t0b3AgcGxhdGZvcm0uIEJlY2F1c2UgdGhlIHdoZWVsIGlzIHJlLWludmVudGVkIGFsbCB0aGUgdGltZSwKLQlpdCdzIGhhcmQgdG8gcHJvcGVybHkgaW50ZWdyYXRlIG11bHRpbWVkaWEgaW50byB0aGUgYmlnZ2VyIHdob2xlIG9mCi0JdXNlcidzIGVudmlyb25tZW50LgotICAgICAgPC9wYXJhPiAKLSAgICAgIDxwYXJhPiAKLSAgICAgICAgVGhlICZHU3RyZWFtZXI7IGNvcmUgZG9lcyBub3QgdXNlIG5ldHdvcmsgdHJhbnNwYXJlbnQgdGVjaG5vbG9naWVzCi0gICAgICAgIGF0IHRoZSBsb3dlc3QgbGV2ZWwgYXMgaXQgb25seSBhZGRzIG92ZXJoZWFkIGZvciB0aGUgbG9jYWwgY2FzZS4gCi0JVGhhdCBzYWlkLCBpdCBzaG91bGRuJ3QgYmUgaGFyZCB0byBjcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUKLQljb3JlIGNvbXBvbmVudHMuIFRoZXJlIGFyZSB0Y3AgcGx1Z2lucyBub3cgdGhhdCBpbXBsZW1lbnQgYQotICAgICAgICAmR1N0cmVhbWVyOyBEYXRhIFByb3RvY29sIHRoYXQgYWxsb3dzIHBpcGVsaW5lcyB0byBiZSBzcGxpdCBvdmVyCi0gICAgICAgIFRDUC4gVGhlc2UgYXJlIGxvY2F0ZWQgaW4gdGhlIGdzdC1wbHVnaW5zIG1vZHVsZSBkaXJlY3RvcnkgZ3N0L3RjcC4KLSAgICAgIDwvcGFyYT4gCi0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1tb3RpdmF0aW9uLWNhdGNodXAiPgotICAgICAgPHRpdGxlPkNhdGNoIHVwIHdpdGggdGhlIDx0cmFkZW1hcms+V2luZG93czwvdHJhZGVtYXJrPiB3b3JsZDwvdGl0bGU+Ci0gICAgICA8cGFyYT4gCi0gICAgICAgIFdlIG5lZWQgc29saWQgbWVkaWEgaGFuZGxpbmcgaWYgd2Ugd2FudCB0byBzZWUgTGludXggc3VjY2VlZCBvbgotCXRoZSBkZXNrdG9wLgotICAgICAgPC9wYXJhPiAKLSAgICAgIDxwYXJhPiAKLSAgICAgICAgV2UgbXVzdCBjbGVhciB0aGUgcm9hZCBmb3IgY29tbWVyY2lhbGx5IGJhY2tlZCBjb2RlY3MgYW5kIG11bHRpbWVkaWEgCi0JYXBwbGljYXRpb25zIHNvIHRoYXQgTGludXggY2FuIGJlY29tZSBhbiBvcHRpb24gZm9yIGRvaW5nIG11bHRpbWVkaWEuCi0gICAgICA8L3BhcmE+IAotICAgIDwvc2VjdDI+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWdvYWxzLWRlc2lnbiI+Ci0gICAgPHRpdGxlPlRoZSBkZXNpZ24gZ29hbHM8L3RpdGxlPgotICAgIDxwYXJhPiAKLSAgICAgIFdlIGRlc2NyaWJlIHdoYXQgd2UgdHJ5IHRvIGFjaGlldmUgd2l0aCAmR1N0cmVhbWVyOy4KLSAgICA8L3BhcmE+Ci0tLT4KLQotICAgIDxzZWN0aW9uIGlkPSJzZWN0aW9uLWdvYWxzLWNsZWFuIj4KLSAgICAgIDx0aXRsZT5DbGVhbiBhbmQgcG93ZXJmdWw8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIGEgY2xlYW4gaW50ZXJmYWNlIHRvOgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotCSAgPHBhcmE+Ci0JICAgIFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIHdobyB3YW50cyB0byBidWlsZCBhIG1lZGlhIHBpcGVsaW5lLiAKLQkgICAgVGhlIHByb2dyYW1tZXIgY2FuIHVzZSBhbiBleHRlbnNpdmUgc2V0IG9mIHBvd2VyZnVsIHRvb2xzIHRvIGNyZWF0ZQotCSAgICBtZWRpYSBwaXBlbGluZXMgd2l0aG91dCB3cml0aW5nIGEgc2luZ2xlIGxpbmUgb2YgY29kZS4gUGVyZm9ybWluZyAKLQkgICAgY29tcGxleCBtZWRpYSBtYW5pcHVsYXRpb25zIGJlY29tZXMgdmVyeSBlYXN5LgotCSAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0JICA8cGFyYT4KLQkgICAgVGhlIHBsdWdpbiBwcm9ncmFtbWVyLiBQbHVnaW4gcHJvZ3JhbW1lcnMgYXJlIHByb3ZpZGVkIGEgY2xlYW4gYW5kCi0JICAgIHNpbXBsZSBBUEkgdG8gY3JlYXRlIHNlbGYtY29udGFpbmVkIHBsdWdpbnMuIEFuIGV4dGVuc2l2ZSBkZWJ1Z2dpbmcKLQkgICAgYW5kIHRyYWNpbmcgbWVjaGFuaXNtIGhhcyBiZWVuIGludGVncmF0ZWQuIEdTdHJlYW1lciBhbHNvIGNvbWVzIHdpdGgKLQkgICAgYW4gZXh0ZW5zaXZlIHNldCBvZiByZWFsLWxpZmUgcGx1Z2lucyB0aGF0IHNlcnZlIGFzIGV4YW1wbGVzIHRvby4KLQkgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotCi0gICAgPC9zZWN0aW9uPgotICAgIDxzZWN0aW9uIGlkPSJzZWN0aW9uLWdvYWxzLW9iamVjdCI+Ci0gICAgICA8dGl0bGU+T2JqZWN0IG9yaWVudGVkPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICAmR1N0cmVhbWVyOyBhZGhlcmVzIHRvIEdPYmplY3QsIHRoZSBHTGliIDIuMCBvYmplY3QgbW9kZWwuIEEgcHJvZ3JhbW1lcgotICAgICAgICBmYW1pbGlhciB3aXRoIEdMaWIgMi4wIG9yIEdUSysgd2lsbCBiZQotICAgICAgICBjb21mb3J0YWJsZSB3aXRoICZHU3RyZWFtZXI7LgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgICZHU3RyZWFtZXI7IHVzZXMgdGhlIG1lY2hhbmlzbSBvZiBzaWduYWxzIGFuZCBvYmplY3QgcHJvcGVydGllcy4gCi0gICAgICA8L3BhcmE+IAotICAgICAgPHBhcmE+Ci0gICAgICAgIEFsbCBvYmplY3RzIGNhbiBiZSBxdWVyaWVkIGF0IHJ1bnRpbWUgZm9yIHRoZWlyIHZhcmlvdXMgcHJvcGVydGllcyBhbmQKLQljYXBhYmlsaXRpZXMuCi0gICAgICA8L3BhcmE+IAotICAgICAgPHBhcmE+Ci0gICAgICAgICZHU3RyZWFtZXI7IGludGVuZHMgdG8gYmUgc2ltaWxhciBpbiBwcm9ncmFtbWluZyBtZXRob2RvbG9neSB0byBHVEsrLgotCVRoaXMgYXBwbGllcyB0byB0aGUgb2JqZWN0IG1vZGVsLCBvd25lcnNoaXAgb2Ygb2JqZWN0cywgcmVmZXJlbmNlCi0gICAgICAgIGNvdW50aW5nLCBldGMuCi0gICAgICA8L3BhcmE+IAotICAgIDwvc2VjdGlvbj4KLSAgCi0gICAgPHNlY3Rpb24gaWQ9InNlY3Rpb24tZ29hbHMtZXh0ZW5zaWJsZSI+Ci0gICAgICA8dGl0bGU+RXh0ZW5zaWJsZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4gCi0JQWxsICZHU3RyZWFtZXI7IE9iamVjdHMgY2FuIGJlIGV4dGVuZGVkIHVzaW5nIHRoZSBHT2JqZWN0Ci0gICAgICAgIGluaGVyaXRhbmNlIG1ldGhvZHMuCi0gICAgICA8L3BhcmE+IAotICAgICAgPHBhcmE+IAotICAgICAgICBBbGwgcGx1Z2lucyBhcmUgbG9hZGVkIGR5bmFtaWNhbGx5IGFuZCBjYW4gYmUgZXh0ZW5kZWQgYW5kIHVwZ3JhZGVkCi0JaW5kZXBlbmRlbnRseS4KLSAgICAgIDwvcGFyYT4gCi0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InNlY3Rpb24tZ29hbHMtYmluYXJ5Ij4KLSAgICAgIDx0aXRsZT5BbGxvdyBiaW5hcnktb25seSBwbHVnaW5zPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBQbHVnaW5zIGFyZSBzaGFyZWQgbGlicmFyaWVzIHRoYXQgYXJlIGxvYWRlZCBhdCBydW50aW1lLiBTaW5jZSBhbGwKLSAgICAgICAgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBsdWdpbiBjYW4gYmUgc2V0IHVzaW5nIHRoZSBHT2JqZWN0IHByb3BlcnRpZXMsCi0gICAgICAgIHRoZXJlIGlzIG5vIG5lZWQgKGFuZCBpbiBmYWN0IG5vIHdheSkgdG8gaGF2ZSBhbnkgaGVhZGVyIGZpbGVzCi0gICAgICAgIGluc3RhbGxlZCBmb3IgdGhlIHBsdWdpbnMuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4gCi0gICAgICAgIFNwZWNpYWwgY2FyZSBoYXMgYmVlbiB0YWtlbiB0byBtYWtlIHBsdWdpbnMgY29tcGxldGVseSBzZWxmLWNvbnRhaW5lZC4gCi0gICAgICAgIEFsbCByZWxldmFudCBhc3BlY3RzIG9mIHBsdWdpbnMgY2FuIGJlIHF1ZXJpZWQgYXQgcnVuLXRpbWUuCi0gICAgICA8L3BhcmE+IAotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJzZWN0aW9uLWdvYWxzLXBlcmZvcm1hbmNlIj4KLSAgICAgIDx0aXRsZT5IaWdoIHBlcmZvcm1hbmNlPC90aXRsZT4KLSAgICAgIDxwYXJhPiAKLSAgICAgICAgSGlnaCBwZXJmb3JtYW5jZSBpcyBvYnRhaW5lZCBieToKLSAgICAgIDwvcGFyYT4gCi0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0JICA8cGFyYT4KLQkgICAgdXNpbmcgR0xpYidzIDxjbGFzc25hbWU+R1NsaWNlPC9jbGFzc25hbWU+IGFsbG9jYXRvcgotCSAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0JICA8cGFyYT4KLQkgICAgZXh0cmVtZWx5IGxpZ2h0LXdlaWdodCBsaW5rcyBiZXR3ZWVuIHBsdWdpbnMuIERhdGEgY2FuIHRyYXZlbAotCSAgICB0aGUgcGlwZWxpbmUgd2l0aCBtaW5pbWFsIG92ZXJoZWFkLiBEYXRhIHBhc3NpbmcgYmV0d2VlbgotICAgICAgICAgICAgcGx1Z2lucyBvbmx5IGludm9sdmVzIGEgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBhIHR5cGljYWwKLSAgICAgICAgICAgIHBpcGVsaW5lLgotCSAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0JICA8cGFyYT4KLQkgICAgcHJvdmlkaW5nIGEgbWVjaGFuaXNtIHRvIGRpcmVjdGx5IHdvcmsgb24gdGhlIHRhcmdldCBtZW1vcnkuCi0gICAgICAgICAgICBBIHBsdWdpbiBjYW4gZm9yIGV4YW1wbGUgZGlyZWN0bHkgd3JpdGUgdG8gdGhlIFggc2VydmVyJ3MKLSAgICAgICAgICAgIHNoYXJlZCBtZW1vcnkgc3BhY2UuIEJ1ZmZlcnMgY2FuIGFsc28gcG9pbnQgdG8gYXJiaXRyYXJ5Ci0gICAgICAgICAgICBtZW1vcnksIHN1Y2ggYXMgYSBzb3VuZCBjYXJkJ3MgaW50ZXJuYWwgaGFyZHdhcmUgYnVmZmVyLgotCSAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0JICA8cGFyYT4KLQkgICAgcmVmY291bnRpbmcgYW5kIGNvcHkgb24gd3JpdGUgbWluaW1pemUgdXNhZ2Ugb2YgbWVtY3B5LgotCSAgICBTdWItYnVmZmVycyBlZmZpY2llbnRseSBzcGxpdCBidWZmZXJzIGludG8gbWFuYWdlYWJsZSBwaWVjZXMuCi0JICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLQkgIDxwYXJhPgotCSAgICBkZWRpY2F0ZWQgc3RyZWFtaW5nIHRocmVhZHMsIHdpdGggc2NoZWR1bGluZyBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwuCi0JICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLQkgIDxwYXJhPgotCSAgICBhbGxvd2luZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYnkgdXNpbmcgc3BlY2lhbGl6ZWQgcGx1Z2lucy4KLQkgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotCSAgPHBhcmE+Ci0JICAgIHVzaW5nIGEgcGx1Z2luIHJlZ2lzdHJ5IHdpdGggdGhlIHNwZWNpZmljYXRpb25zIG9mIHRoZSBwbHVnaW5zIHNvIAotCSAgICB0aGF0IHRoZSBwbHVnaW4gbG9hZGluZyBjYW4gYmUgZGVsYXllZCB1bnRpbCB0aGUgcGx1Z2luIGlzIGFjdHVhbGx5Ci0JICAgIHVzZWQuCi0JICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ic2VjdGlvbi1nb2Fscy1zZXBhcmF0aW9uIj4KLSAgICAgIDx0aXRsZT5DbGVhbiBjb3JlL3BsdWdpbnMgc2VwYXJhdGlvbjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGNvcmUgb2YgJkdTdHJlYW1lcjsgaXMgZXNzZW50aWFsbHkgbWVkaWEtYWdub3N0aWMuIEl0IG9ubHkga25vd3MKLSAgICAgICAgYWJvdXQgYnl0ZXMgYW5kIGJsb2NrcywgYW5kIG9ubHkgY29udGFpbnMgYmFzaWMgZWxlbWVudHMuCi0gICAgICAgIFRoZSBjb3JlIG9mICZHU3RyZWFtZXI7IGlzIGZ1bmN0aW9uYWwgZW5vdWdoIHRvIGV2ZW4gaW1wbGVtZW50Ci0gICAgICAgIGxvdy1sZXZlbCBzeXN0ZW0gdG9vbHMsIGxpa2UgY3AuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQWxsIG9mIHRoZSBtZWRpYSBoYW5kbGluZyBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGJ5IHBsdWdpbnMKLSAgICAgICAgZXh0ZXJuYWwgdG8gdGhlIGNvcmUuIFRoZXNlIHRlbGwgdGhlIGNvcmUgaG93IHRvIGhhbmRsZSBzcGVjaWZpYwotICAgICAgICB0eXBlcyBvZiBtZWRpYS4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ic2VjdGlvbi1nb2Fscy10ZXN0YmVkIj4KLSAgICAgIDx0aXRsZT5Qcm92aWRlIGEgZnJhbWV3b3JrIGZvciBjb2RlYyBleHBlcmltZW50YXRpb248L3RpdGxlPgotICAgICAgPHBhcmE+Ci0JJkdTdHJlYW1lcjsgYWxzbyB3YW50cyB0byBiZSBhbiBlYXN5IGZyYW1ld29yayB3aGVyZSBjb2RlYwotCWRldmVsb3BlcnMgY2FuIGV4cGVyaW1lbnQgd2l0aCBkaWZmZXJlbnQgYWxnb3JpdGhtcywgc3BlZWRpbmcgdXAgdGhlCi0JZGV2ZWxvcG1lbnQgb2Ygb3BlbiBhbmQgZnJlZSBtdWx0aW1lZGlhIGNvZGVjcyBsaWtlIHRob3NlIGRldmVsb3BlZAotCWJ5IHRoZSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnhpcGgub3JnIiB0eXBlPSJodHRwIj5YaXBoLk9yZwotCUZvdW5kYXRpb248L3VsaW5rPiAoc3VjaCBhcyBUaGVvcmEgYW5kCVZvcmJpcykuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi08IS0tCi0gIDwvc2VjdDE+Ci0tLT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2ludHJvLXByZWZhY2UueG1sIGIvZG9jcy9tYW51YWwvaW50cm8tcHJlZmFjZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMjMzOWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvaW50cm8tcHJlZmFjZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludHJvLXdobyIgeHJlZmxhYmVsPSJXaG8gU2hvdWxkIFJlYWQgVGhpcyBNYW51YWw/Ij4KLSAgICA8dGl0bGU+V2hvIHNob3VsZCByZWFkIHRoaXMgbWFudWFsPzwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGlzIGJvb2sgaXMgYWJvdXQgJkdTdHJlYW1lcjsgZnJvbSBhbiBhcHBsaWNhdGlvbiBkZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3OyBpdAotICAgICAgZGVzY3JpYmVzIGhvdyB0byB3cml0ZSBhICZHU3RyZWFtZXI7IGFwcGxpY2F0aW9uIHVzaW5nIHRoZSAmR1N0cmVhbWVyOwotICAgICAgbGlicmFyaWVzIGFuZCB0b29scy4gRm9yIGFuIGV4cGxhbmF0aW9uIGFib3V0IHdyaXRpbmcgcGx1Z2lucywgd2UKLSAgICAgIHN1Z2dlc3QgdGhlIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9wd2cvaHRtbC9pbmRleC5odG1sIj5QbHVnaW4KLSAgICAgIFdyaXRlcnMgR3VpZGU8L3VsaW5rPi4KLSAgICA8L3BhcmE+ICAgICAKLSAgICA8cGFyYT4KLSAgICAgIEFsc28gY2hlY2sgb3V0IHRoZSBvdGhlciBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBvbiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RvY3VtZW50YXRpb24vIj4mR1N0cmVhbWVyOyB3ZWIgc2l0ZTwvdWxpbms+LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWludHJvLXJlYWRpbmciIHhyZWZsYWJlbD0iUHJlbGltaW5hcnkgUmVhZGluZyI+Ci0gICAgPHRpdGxlPlByZWxpbWluYXJ5IHJlYWRpbmc8L3RpdGxlPgotICAgIDxwYXJhPjwhLS0gc3luY2hyb25pemUgd2l0aCBQV0cgLS0+Ci0gICAgICBJbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoaXMgbWFudWFsLCB5b3UgbmVlZCB0byBoYXZlIGEgYmFzaWMKLSAgICAgIHVuZGVyc3RhbmRpbmcgb2YgdGhlIDxlbXBoYXNpcz5DIGxhbmd1YWdlPC9lbXBoYXNpcz4uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgU2luY2UgJkdTdHJlYW1lcjsgYWRoZXJlcyB0byB0aGUgR09iamVjdCBwcm9ncmFtbWluZyBtb2RlbCwgdGhpcyBndWlkZQotICAgICAgYWxzbyBhc3N1bWVzIHRoYXQgeW91IHVuZGVyc3RhbmQgdGhlIGJhc2ljcyBvZiA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dvYmplY3Qvc3RhYmxlLyI+R09iamVjdDwvdWxpbms+IGFuZCA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2dsaWIvc3RhYmxlLyI+Z2xpYjwvdWxpbms+IHByb2dyYW1taW5nLgotCi0gICAgICBFc3BlY2lhbGx5LAotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdPYmplY3QgaW5zdGFudGlhdGlvbjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R09iamVjdCBwcm9wZXJ0aWVzIChzZXQvZ2V0KTwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R09iamVjdCBjYXN0aW5nPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5HT2JqZWN0IHJlZmVyZWNpbmcvZGVyZWZlcmVuY2luZzwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Z2xpYiBtZW1vcnkgbWFuYWdlbWVudDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Z2xpYiBzaWduYWxzIGFuZCBjYWxsYmFja3M8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmdsaWIgbWFpbiBsb29wPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIAotICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1pbnRyby1zdHJ1Y3R1cmUiPgotICAgIDx0aXRsZT5TdHJ1Y3R1cmUgb2YgdGhpcyBtYW51YWw8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVG8gaGVscCB5b3UgbmF2aWdhdGUgdGhyb3VnaCB0aGlzIGd1aWRlLCBpdCBpcyBkaXZpZGVkIGludG8gc2V2ZXJhbCBsYXJnZQotICAgICAgcGFydHMuIEVhY2ggcGFydCBhZGRyZXNzZXMgYSBwYXJ0aWN1bGFyIGJyb2FkIHRvcGljIGNvbmNlcm5pbmcgJkdTdHJlYW1lcjsKLSAgICAgIGFwcGxpY3Rpb24gZGV2ZWxvcG1lbnQuIFRoZSBwYXJ0cyBvZiB0aGlzIGd1aWRlIGFyZSBsYWlkIG91dCBpbiB0aGUgZm9sbG93aW5nCi0gICAgICBvcmRlcjoKLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIDx4cmVmIGxpbmtlbmQ9InBhcnQtaW50cm9kdWN0aW9uIi8+IGdpdmVzIHlvdSBhbiBvdmVydmlldyBvZiAmR1N0cmVhbWVyOywKLSAgICAgIGl0J3MgZGVzaWduIHByaW5jaXBsZXMgYW5kIGZvdW5kYXRpb25zLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgPHhyZWYgbGlua2VuZD0icGFydC1idWlsZGluZyIvPiBjb3ZlcnMgdGhlIGJhc2ljcyBvZiAmR1N0cmVhbWVyOwotICAgICAgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcuIEF0IHRoZSBlbmQgb2YgdGhpcyBwYXJ0LCB5b3Ugc2hvdWxkIGJlCi0gICAgICBhYmxlIHRvIGJ1aWxkIHlvdXIgb3duIGF1ZGlvIHBsYXllciB1c2luZyAmR1N0cmVhbWVyOwotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgSW4gPHhyZWYgbGlua2VuZD0icGFydC1hZHZhbmNlZCIvPiwgd2Ugd2lsbCBtb3ZlIG9uIHRvIGFkdmFuY2VkCi0gICAgICBzdWJqZWN0cyB3aGljaCBtYWtlICZHU3RyZWFtZXI7IHN0YW5kIG91dCBvZiBpdHMgY29tcGV0aXRvcnMuIFdlCi0gICAgICB3aWxsIGRpc2N1c3MgYXBwbGljYXRpb24tcGlwZWxpbmUgaW50ZXJhY3Rpb24gdXNpbmcgZHluYW1pYyBwYXJhbWV0ZXJzCi0gICAgICBhbmQgaW50ZXJmYWNlcywgd2Ugd2lsbCBkaXNjdXNzIHRocmVhZGluZyBhbmQgdGhyZWFkZWQgcGlwZWxpbmVzLAotICAgICAgc2NoZWR1bGluZyBhbmQgY2xvY2tzIChhbmQgc3luY2hyb25pemF0aW9uKS4gTW9zdCBvZiB0aG9zZSB0b3BpY3MgYXJlCi0gICAgICBub3QganVzdCB0aGVyZSB0byBpbnRyb2R1Y2UgeW91IHRvIHRoZWlyIEFQSSwgYnV0IHByaW1hcmlseSB0byBnaXZlCi0gICAgICBhIGRlZXBlciBpbnNpZ2h0IGluIHNvbHZpbmcgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgcHJvYmxlbXMgd2l0aAotICAgICAgJkdTdHJlYW1lcjsgYW5kIHVuZGVyc3RhbmRpbmcgdGhlaXIgY29uY2VwdHMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBOZXh0LCBpbiA8eHJlZiBsaW5rZW5kPSJwYXJ0LWhpZ2hsZXZlbCIvPiwgd2Ugd2lsbCBnbyBpbnRvIGhpZ2hlci1sZXZlbAotICAgICAgcHJvZ3JhbW1pbmcgQVBJcyBmb3IgJkdTdHJlYW1lcjsuIFlvdSBkb24ndCBleGFjdGx5IG5lZWQgdG8ga25vdyBhbGwKLSAgICAgIHRoZSBkZXRhaWxzIGZyb20gdGhlIHByZXZpb3VzIHBhcnRzIHRvIHVuZGVyc3RhbmQgdGhpcywgYnV0IHlvdSB3aWxsCi0gICAgICBuZWVkIHRvIHVuZGVyc3RhbmQgYmFzaWMgJkdTdHJlYW1lcjsgY29uY2VwdHMgbmV2ZXJ0aGVsZXNzLiBXZSB3aWxsLAotICAgICAgYW1vbmdzdCBvdGhlcnMsIGRpc2N1c3MgWE1MLCBwbGF5YmluIGFuZCBhdXRvcGx1Z2dlcnMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBGaW5hbGx5IGluIDx4cmVmIGxpbmtlbmQ9InBhcnQtYXBwZW5kaWNlcyIvPiwgeW91IHdpbGwgZmluZCBzb21lIHJhbmRvbQotICAgICAgaW5mb3JtYXRpb24gb24gaW50ZWdyYXRpbmcgd2l0aCBHTk9NRSwgS0RFLCBPUyBYIG9yIFdpbmRvd3MsIHNvbWUKLSAgICAgIGRlYnVnZ2luZyBoZWxwIGFuZCBnZW5lcmFsIHRpcHMgdG8gaW1wcm92ZSBhbmQgc2ltcGxpZnkgJkdTdHJlYW1lcjsKLSAgICAgIHByb2dyYW1taW5nLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL2xpbmtlZC1lbGVtZW50cy5wbmcgYi9kb2NzL21hbnVhbC9saW5rZWQtZWxlbWVudHMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTc1YWRmLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL2xpbmtlZC1lbGVtZW50cy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9tYW51YWwueG1sIGIvZG9jcy9tYW51YWwvbWFudWFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyNjhiNS4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9tYW51YWwueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCc/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgotICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiIFsKLTwhRU5USVRZICUgaW1hZ2UtZW50aXRpZXMgU1lTVEVNICJpbWFnZS5lbnRpdGllcyI+Ci0laW1hZ2UtZW50aXRpZXM7Ci08IUVOVElUWSAlIHZlcnNpb24tZW50aXRpZXMgU1lTVEVNICJ2ZXJzaW9uLmVudGl0aWVzIj4KLSV2ZXJzaW9uLWVudGl0aWVzOwotPCFFTlRJVFkgJSB1cmwtZW50aXRpZXMgU1lTVEVNICJ1cmwuZW50aXRpZXMiPgotJXVybC1lbnRpdGllczsKLQotPCFFTlRJVFkgRVhBRk9PVCAiCi08Zm9vdG5vdGU+Ci0gIDxwYXJhPgotICAgIFRoZSBjb2RlIGZvciB0aGlzIGV4YW1wbGUgaXMgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgZnJvbQotICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBidWlsdCB1bmRlciA8ZmlsZW5hbWU+dGVzdHMvZXhhbXBsZXMvbWFudWFsPC9maWxlbmFtZT4KLSAgICBpbiB0aGUgR1N0cmVhbWVyIHRhcmJhbGwuCi0gIDwvcGFyYT4KLTwvZm9vdG5vdGU+Ci0iPgotCi08IUVOVElUWSBUSVRMRVBBR0UgICAgICAgICAgICBTWVNURU0gInRpdGxlcGFnZS54bWwiPgotCi08IS0tIFBhcnQgMTogT3ZlcnZpZXcgLS0+Ci08IUVOVElUWSBJTlRSTyAgICAgICAgICAgICAgICBTWVNURU0gImludHJvLXByZWZhY2UueG1sIj4KLQotPCFFTlRJVFkgR1NUUkVBTUVSICAgICAgICAgICAgU1lTVEVNICJpbnRyby1nc3RyZWFtZXIueG1sIj4KLTwhRU5USVRZIE1PVElWQVRJT04gICAgICAgICAgIFNZU1RFTSAiaW50cm8tbW90aXZhdGlvbi54bWwiPgotPCFFTlRJVFkgQ09OQ0VQVFMgICAgICAgICAgICAgU1lTVEVNICJpbnRyby1iYXNpY3MueG1sIj4KLQotPCEtLSBQYXJ0IDI6IEJhc2ljIENvbmNlcHRzIC0tPgotPCFFTlRJVFkgSU5JVCAgICAgICAgICAgICAgICAgU1lTVEVNICJiYXNpY3MtaW5pdC54bWwiPgotPCFFTlRJVFkgRUxFTUVOVFMgICAgICAgICAgICAgU1lTVEVNICJiYXNpY3MtZWxlbWVudHMueG1sIj4KLTwhRU5USVRZIEJJTlMgICAgICAgICAgICAgICAgIFNZU1RFTSAiYmFzaWNzLWJpbnMueG1sIj4KLTwhRU5USVRZIEJVUyAgICAgICAgICAgICAgICAgIFNZU1RFTSAiYmFzaWNzLWJ1cy54bWwiPgotPCFFTlRJVFkgUEFEUyAgICAgICAgICAgICAgICAgU1lTVEVNICJiYXNpY3MtcGFkcy54bWwiPgotPCFFTlRJVFkgREFUQSAgICAgICAgICAgICAgICAgU1lTVEVNICJiYXNpY3MtZGF0YS54bWwiPgotPCFFTlRJVFkgSEVMTE9XT1JMRCAgICAgICAgICAgU1lTVEVNICJiYXNpY3MtaGVsbG93b3JsZC54bWwiPgotCi08IS0tIFBhcnQgMzogQWR2YW5jZWQgQ29uY2VwdHMgLS0+Ci08IUVOVElUWSBRVUVSWUVWRU5UUyAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLXBvc2l0aW9uLnhtbCI+Ci08IUVOVElUWSBNRVRBREFUQSAgICAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLW1ldGFkYXRhLnhtbCI+Ci08IUVOVElUWSBJTlRFUkZBQ0VTICAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLWludGVyZmFjZXMueG1sIj4KLTwhRU5USVRZIENMT0NLUyAgICAgICAgICAgICAgIFNZU1RFTSAiYWR2YW5jZWQtY2xvY2tzLnhtbCI+Ci08IUVOVElUWSBCVUZGRVJJTkcgICAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLWJ1ZmZlcmluZy54bWwiPgotPCFFTlRJVFkgRFBBUkFNUyAgICAgICAgICAgICAgU1lTVEVNICJhZHZhbmNlZC1kcGFyYW1zLnhtbCI+Ci08IUVOVElUWSBUSFJFQURTICAgICAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLXRocmVhZHMueG1sIj4KLTwhRU5USVRZIEFVVE9QTFVHR0lORyAgICAgICAgIFNZU1RFTSAiYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbCI+Ci08IUVOVElUWSBEQVRBQUNDRVNTICAgICAgICAgICBTWVNURU0gImFkdmFuY2VkLWRhdGFhY2Nlc3MueG1sIj4KLQotPCEtLSBQYXJ0IDQ6IEhpZ2hlci1sZXZlbCBpbnRlcmZhY2VzIC0tPgotPCFFTlRJVFkgUExBWUJBQ0sgICAgICAgICAgICAgU1lTVEVNICJoaWdobGV2ZWwtcGxheWJhY2sueG1sIj4KLQotPCEtLSBBcHBlbmRpY2VzIC0tPgotPCFFTlRJVFkgUFJPR1JBTVMgICAgICAgICAgICAgU1lTVEVNICJhcHBlbmRpeC1wcm9ncmFtcy54bWwiPgotPCFFTlRJVFkgQ09NUElMSU5HICAgICAgICAgICAgU1lTVEVNICJhcHBlbmRpeC1jb21waWxpbmcueG1sIj4KLTwhRU5USVRZIENIRUNLTElTVCAgICAgICAgICAgIFNZU1RFTSAiYXBwZW5kaXgtY2hlY2tsaXN0LnhtbCI+Ci08IUVOVElUWSBQT1JUSU5HICAgICAgICAgICAgICBTWVNURU0gImFwcGVuZGl4LXBvcnRpbmcueG1sIj4KLTwhRU5USVRZIElOVEVHUkFUSU9OICAgICAgICAgIFNZU1RFTSAiYXBwZW5kaXgtaW50ZWdyYXRpb24ueG1sIj4KLTwhRU5USVRZIExJQ0VOU0lORyAgICAgICAgICAgIFNZU1RFTSAiYXBwZW5kaXgtbGljZW5zaW5nLnhtbCI+Ci08IUVOVElUWSBRVU9URVMgICAgICAgICAgICAgICBTWVNURU0gImFwcGVuZGl4LXF1b3Rlcy54bWwiPgotCi08IUVOVElUWSBHU3RyZWFtZXIgICAgIjxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPiI+Ci08IUVOVElUWSBHc3RQV0cgICAgICAgIjxlbXBoYXNpcz5HU3RyZWFtZXIgUGx1Z2luIFdyaXRlcidzIEd1aWRlPC9lbXBoYXNpcz4iPgotXT4KLQotPGJvb2sgaWQ9ImluZGV4Ij4KLSAgJlRJVExFUEFHRTsKLSAgCi08IS0tICMjIyMjIyMjIyMjIyMgSW50cm9kdWN0aW9uICMjIyMjIyMjIyMjIyMjIyAtLT4KLQotPHByZWZhY2U+PHRpdGxlPkZvcmV3b3JkPC90aXRsZT4KLSAgICAgIDxwYXJhPjwhLS0gc3luY2hyb25pemUgd2l0aCBQV0cgLS0+Ci0gICAgICAgICZHU3RyZWFtZXI7IGlzIGFuIGV4dHJlbWVseSBwb3dlcmZ1bCBhbmQgdmVyc2F0aWxlIGZyYW1ld29yayBmb3IKLSAgICAgICAgY3JlYXRpbmcgc3RyZWFtaW5nIG1lZGlhIGFwcGxpY2F0aW9ucy4gTWFueSBvZiB0aGUgdmlydHVlcyBvZiB0aGUKLSAgICAgICAgJkdTdHJlYW1lcjsgZnJhbWV3b3JrIGNvbWUgZnJvbSBpdHMgbW9kdWxhcml0eTogJkdTdHJlYW1lcjsgY2FuCi0gICAgICAgIHNlYW1sZXNzbHkgaW5jb3Jwb3JhdGUgbmV3IHBsdWdpbiBtb2R1bGVzLiBCdXQgYmVjYXVzZSBtb2R1bGFyaXR5Ci0gICAgICAgIGFuZCBwb3dlciBvZnRlbiBjb21lIGF0IGEgY29zdCBvZiBncmVhdGVyIGNvbXBsZXhpdHksIHdyaXRpbmcgbmV3Ci0gICAgICAgIGFwcGxpY2F0aW9ucyBpcyBub3QgYWx3YXlzIGVhc3kuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBndWlkZSBpcyBpbnRlbmRlZCB0byBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoZSAmR1N0cmVhbWVyOwotICAgICAgICBmcmFtZXdvcmsgKHZlcnNpb24gJkdTVF9WRVJTSU9OOykgc28geW91IGNhbiBkZXZlbG9wIGFwcGxpY2F0aW9ucwotICAgICAgICBiYXNlZCBvbiBpdC4gVGhlIGZpcnN0IGNoYXB0ZXJzIHdpbGwgZm9jdXMgb24gZGV2ZWxvcG1lbnQgb2YgYQotICAgICAgICBzaW1wbGUgYXVkaW8gcGxheWVyLCB3aXRoIG11Y2ggZWZmb3J0IGdvaW5nIGludG8gaGVscGluZyB5b3UKLSAgICAgICAgdW5kZXJzdGFuZCAmR1N0cmVhbWVyOyBjb25jZXB0cy4gTGF0ZXIgY2hhcHRlcnMgd2lsbCBnbyBpbnRvCi0gICAgICAgIG1vcmUgYWR2YW5jZWQgdG9waWNzIHJlbGF0ZWQgdG8gbWVkaWEgcGxheWJhY2ssIGJ1dCBhbHNvIGF0Ci0gICAgICAgIG90aGVyIGZvcm1zIG9mIG1lZGlhIHByb2Nlc3NpbmcgKGNhcHR1cmUsIGVkaXRpbmcsIGV0Yy4pLgotICAgICAgPC9wYXJhPgotPC9wcmVmYWNlPgotCi0KLTxwcmVmYWNlPjx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotCi0gICZJTlRSTzsKLQotPC9wcmVmYWNlPgotCi08IS0tICMjIyMjIyMjIyMjIyMgT3ZlcnZpZXcgLSBwYXJ0ICMjIyMjIyMjIyMjIyMjIyAtLT4KLQotICA8cGFydCBpZD0icGFydC1pbnRyb2R1Y3Rpb24iPgotICAgIDx0aXRsZT5BYm91dCBHU3RyZWFtZXI8L3RpdGxlPgotICAgIDxwYXJ0aW50cm8+Ci0gICAgICA8cGFyYT4KLSAgICBUaGlzIHBhcnQgZ2l2ZXMgeW91IGFuIG92ZXJ2aWV3IG9mIHRoZSB0ZWNobm9sb2dpZXMgZGVzY3JpYmVkIGluCi0gICAgdGhpcyBib29rLgotICAgICAgPC9wYXJhPgotICAgIDwvcGFydGludHJvPgotCi0gICAgJkdTVFJFQU1FUjsKLSAgICAmTU9USVZBVElPTjsKLSAgICAmQ09OQ0VQVFM7Ci0KLSAgPC9wYXJ0PgotCi08IS0tICMjIyMjIyMjIyMjIyBCYXNpYyBjb25jZXB0cyAtIHBhcnQgIyMjIyMjIyMjIyMjIyAtLT4KLQotICA8cGFydCBpZD0icGFydC1idWlsZGluZyI+Ci0gICAgPHRpdGxlPkJ1aWxkaW5nIGFuIEFwcGxpY2F0aW9uPC90aXRsZT4KLSAgICA8cGFydGludHJvPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZXNlIGNoYXB0ZXJzLCB3ZSB3aWxsIGRpc2N1c3MgdGhlIGJhc2ljIGNvbmNlcHRzIG9mICZHU3RyZWFtZXI7Ci0gICAgICAgIGFuZCB0aGUgbW9zdC11c2VkIG9iamVjdHMsIHN1Y2ggYXMgZWxlbWVudHMsIHBhZHMgYW5kIGJ1ZmZlcnMuIFdlCi0gICAgICAgIHdpbGwgdXNlIGEgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZXNlIG9iamVjdHMgc28gdGhhdCB3ZSBjYW4KLSAgICAgICAgdmlzdWFsaXplIHRoZSBtb3JlIGNvbXBsZXggcGlwZWxpbmVzIHlvdSB3aWxsIGxlYXJuIHRvIGJ1aWxkIGxhdGVyCi0gICAgICAgIG9uLiBZb3Ugd2lsbCBnZXQgYSBmaXJzdCBnbGFuY2UgYXQgdGhlICZHU3RyZWFtZXI7IEFQSSwgd2hpY2ggc2hvdWxkCi0gICAgICAgIGJlIGVub3VnaCBmb3IgYnVpbGRpbmcgZWxlbWVudGFyeSBhcHBsaWNhdGlvbnMuIExhdGVyIG9uIGluIHRoaXMKLSAgICAgICAgcGFydCwgeW91IHdpbGwgYWxzbyBsZWFybiB0byBidWlsZCBhIGJhc2ljIGNvbW1hbmQtbGluZSBhcHBsaWNhdGlvbi4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBOb3RlIHRoYXQgdGhpcyBwYXJ0IHdpbGwgZ2l2ZSBhIGxvb2sgaW50byB0aGUgbG93LWxldmVsIEFQSSBhbmQKLSAgICAgICAgY29uY2VwdHMgb2YgJkdTdHJlYW1lcjsuIE9uY2UgeW91J3JlIGdvaW5nIHRvIGJ1aWxkIGFwcGxpY2F0aW9ucywKLSAgICAgICAgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGhpZ2hlci1sZXZlbCBBUElzLiBUaG9zZSB3aWxsIGJlIGRpc2N1c3NlZAotICAgICAgICBsYXRlciBvbiBpbiB0aGlzIG1hbnVhbC4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3BhcnRpbnRybz4KLQotICAgICZJTklUOwotICAgICZFTEVNRU5UUzsKLSAgICAmQklOUzsKLSAgICAmQlVTOwotICAgICZQQURTOwotICAgICZEQVRBOwotICAgICZIRUxMT1dPUkxEOwotCi0gIDwvcGFydD4KLQotPCEtLSAjIyMjIyMjIyMjIyMgQWR2YW5jZWQgR1N0cmVhbWVyIC0gcGFydCAjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxwYXJ0IGlkPSJwYXJ0LWFkdmFuY2VkIj4KLSAgICA8dGl0bGU+QWR2YW5jZWQgJkdTdHJlYW1lcjsgY29uY2VwdHM8L3RpdGxlPgotICAgIDxwYXJ0aW50cm8+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gdGhpcyBwYXJ0IHdlIHdpbGwgY292ZXIgdGhlIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMgb2YgJkdTdHJlYW1lcjsuCi0JV2l0aCB0aGUgYmFzaWNzIHlvdSBsZWFybmVkIGluIHRoZSBwcmV2aW91cyBwYXJ0IHlvdSBzaG91bGQgYmUgCi0JYWJsZSB0byBjcmVhdGUgYSA8ZW1waGFzaXM+c2ltcGxlPC9lbXBoYXNpcz4gYXBwbGljYXRpb24uIEhvd2V2ZXIsCi0gICAgICAgICZHU3RyZWFtZXI7IHByb3ZpZGVzIG11Y2ggbW9yZSBjYW5keSB0aGFuIGp1c3QgdGhlIGJhc2ljcyBvZiBwbGF5aW5nCi0gICAgICAgIGJhY2sgYXVkaW8gZmlsZXMuIEluIHRoaXMgY2hhcHRlciwgeW91IHdpbGwgbGVhcm4gbW9yZSBvZiB0aGUKLQlsb3ctbGV2ZWwgZmVhdHVyZXMgYW5kIGludGVybmFscyBvZiAmR1N0cmVhbWVyOy4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBTb21lIHBhcnRzIG9mIHRoaXMgcGFydCB3aWxsIHNlcnZlIG1vc3RseSBhcyBhbiBleHBsYW5hdGlvbiBvZgotICAgICAgICBob3cgJkdTdHJlYW1lcjsgd29ya3MgaW50ZXJuYWxseTsgdGhleSBhcmUgbm90IGFjdHVhbGx5IG5lZWRlZCBmb3IKLSAgICAgICAgYWN0dWFsIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LiBUaGlzIGluY2x1ZGVzIGNoYXB0ZXJzIHN1Y2ggYXMgdGhlCi0gICAgICAgIG9uZXMgY292ZXJpbmcgc2NoZWR1bGluZywgYXV0b3BsdWdnaW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIE90aGVyCi0gICAgICAgIGNoYXB0ZXJzLCBob3dldmVyLCBkaXNjdXNzIG1vcmUgYWR2YW5jZWQgd2F5cyBvZgotICAgICAgICBwaXBlbGluZS1hcHBsaWNhdGlvbiBpbnRlcmFjdGlvbiwgYW5kIGNhbiB0dXJuIG91dCB0byBiZSB2ZXJ5IHVzZWZ1bAotICAgICAgICBmb3IgY2VydGFpbiBhcHBsaWNhdGlvbnMuIFRoaXMgaW5jbHVkZXMgdGhlIGNoYXB0ZXJzIG9uIG1ldGFkYXRhLAotICAgICAgICBxdWVyeWluZyBhbmQgZXZlbnRzLCBpbnRlcmZhY2VzLCBkeW5hbWljIHBhcmFtZXRlcnMgYW5kIHBpcGVsaW5lCi0gICAgICAgIGRhdGEgbWFuaXB1bGF0aW9uLgotICAgICAgPC9wYXJhPgotICAgIDwvcGFydGludHJvPgotCi0gICAgJlFVRVJZRVZFTlRTOwotICAgICZNRVRBREFUQTsKLSAgICAmSU5URVJGQUNFUzsKLSAgICAmQ0xPQ0tTOwotICAgICZCVUZGRVJJTkc7Ci0gICAgJkRQQVJBTVM7Ci0gICAgJlRIUkVBRFM7Ci0gICAgJkFVVE9QTFVHR0lORzsKLSAgICAmREFUQUFDQ0VTUzsKLQotICA8L3BhcnQ+Ci0KLTwhLS0gIyMjIyMjIyMjIyMjIEhpZ2hlci1sZXZlbCBBUElzIGluIEdTdHJlYW1lciAtIHBhcnQgIyMjIyMjIyMjIyMjIyAtLT4KLQotICA8cGFydCBpZD0icGFydC1oaWdobGV2ZWwiPgotICAgIDx0aXRsZT5IaWdoZXItbGV2ZWwgaW50ZXJmYWNlcyBmb3IgJkdTdHJlYW1lcjsgYXBwbGljYXRpb25zPC90aXRsZT4KLSAgICA8cGFydGludHJvPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBwcmV2aW91cyB0d28gcGFydHMsIHlvdSBoYXZlIGxlYXJuZWQgbWFueSBvZiB0aGUgaW50ZXJuYWxzCi0gICAgICAgIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGxvdy1sZXZlbCBpbnRlcmZhY2VzIGludG8gJkdTdHJlYW1lcjsKLSAgICAgICAgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcuIE1hbnkgcGVvcGxlIHdpbGwsIGhvd2V2ZXIsIG5vdCBuZWVkIHNvCi0gICAgICAgIG11Y2ggY29udHJvbCAoYW5kIGFzIG11Y2ggY29kZSksIGJ1dCB3aWxsIHByZWZlciB0byB1c2UgYSBzdGFuZGFyZAotICAgICAgICBwbGF5YmFjayBpbnRlcmZhY2UgdGhhdCBkb2VzIG1vc3Qgb2YgdGhlIGRpZmZpY3VsdCBpbnRlcm5hbHMgZm9yCi0gICAgICAgIHRoZW0uIEluIHRoaXMgY2hhcHRlciwgd2Ugd2lsbCBpbnRyb2R1Y2UgeW91IGludG8gdGhlIGNvbmNlcHQgb2YKLSAgICAgICAgYXV0b3BsdWdnZXJzLCBwbGF5YmFjayBtYW5hZ2luZyBlbGVtZW50cyBhbmQgb3RoZXIgc3VjaCB0aGluZ3MuCi0gICAgICAgIFRob3NlIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2VzIGFyZSBpbnRlbmRlZCB0bwotICAgICAgICBzaW1wbGlmeSAmR1N0cmVhbWVyOy1iYXNlZCBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZy4gVGhleSBkbywgaG93ZXZlciwKLSAgICAgICAgYWxzbyByZWR1Y2UgdGhlIGZsZXhpYmlsaXR5LiBJdCBpcyB1cCB0byB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcGVyCi0gICAgICAgIHRvIGNob29zZSB3aGljaCBpbnRlcmZhY2UgaGUgd2lsbCB3YW50IHRvIHVzZS4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3BhcnRpbnRybz4KLQotICAgICZQTEFZQkFDSzsKLQotICA8L3BhcnQ+Ci0KLTwhLS0gIyMjIyMjIyMjIyMjIEFwcGVuZGljZXMgLSBwYXJ0ICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHBhcnQgaWQ9InBhcnQtYXBwZW5kaWNlcyI+Ci0gICAgPHRpdGxlPkFwcGVuZGljZXM8L3RpdGxlPgotICAgIDxwYXJ0aW50cm8+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQnkgbm93LCB5b3UndmUgbGVhcm5lZCBhbGwgYWJvdXQgdGhlIGludGVybmFscyBvZiAmR1N0cmVhbWVyOyBhbmQKLSAgICAgICAgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgdXNpbmcgdGhlICZHU3RyZWFtZXI7IGZyYW1ld29yay4gVGhpcyBwYXJ0Ci0gICAgICAgIHdpbGwgZ28gaW50byBzb21lIHJhbmRvbSBiaXRzIHRoYXQgYXJlIHVzZWZ1bCB0byBrbm93IGlmIHlvdSdyZQotICAgICAgICBnb2luZyB0byB1c2UgJkdTdHJlYW1lcjsgZm9yIHNlcmlvdXMgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcuIEl0Ci0gICAgICAgIHdpbGwgdG91Y2ggdXBvbiB0aGluZ3MgcmVsYXRlZCB0byBpbnRlZ3JhdGlvbiB3aXRoIHBvcHVsYXIgZGVza3RvcAotICAgICAgICBlbnZpcm9ubWVudHMgdGhhdCB3ZSBydW4gb24gKEdOT01FLCBLREUsIE9TIFgsIFdpbmRvd3MpLCBpdCB3aWxsCi0gICAgICAgIHNob3J0bHkgZXhwbGFpbiBob3cgYXBwbGljYXRpb25zIGluY2x1ZGVkIHdpdGggJkdTdHJlYW1lcjsgY2FuIGhlbHAKLSAgICAgICAgbWFraW5nIHlvdXIgbGlmZSBlYXNpZXIsIGFuZCBzb21lIGluZm9ybWF0aW9uIG9uIGRlYnVnZ2luZy4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiBhZGRpdGlvbiwgd2UgYWxzbyBwcm92aWRlIGEgcG9ydGluZyBndWlkZSB3aGljaCB3aWxsIGV4cGxhaW4KLSAgICAgICAgZWFzaWx5IGhvdyB0byBwb3J0ICZHU3RyZWFtZXI7LTAuMTAgYXBwbGljYXRpb25zIHRvICZHU3RyZWFtZXI7LTEuMC4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3BhcnRpbnRybz4KLQotICAgIDwhLS0KLSAgICBJZGVhOgotICAgICogRGVidWdnaW5nIGFuZCBlcnJvciBoYW5kbGluZwotICAgICAtICdlcnJvcicgc2lnbmFsIGluIHBpcGVsaW5lcwotICAgICAtIGNoZWNraW5nIHJldHVybiB2YWx1ZXMgYW5kIGhvdyB0byBoYW5kbGUgdGhlbQotICAgICAtIHVzaW5nIHNpZ25hbHMgZm9yIHBpcGVsaW5lIHN0YXRlcwotICAgICAtIGdzdC1kZWJ1ZwotICAgICAtIHByb2dyYW1zCi0gICAgKiBEZXNrdG9wIGludGVncmF0aW9uCi0gICAgIC0gTGludXgvVU5JWAotCS4ge3gseHZ9aW1hZ2VzaW5rCi0JLiB7b3NzLGFsc2F9c2luawotCS4ge3Y0bCx2NGwyLG9zcyxhbHNhfXNyYwotICAgICAtIEdOT01FCi0JLiBHQ29uZiAoe3ZpZGVvLGF1ZGlvfXtzcmMsc2lua30pCi0JLiBnbm9tZXZmc3NyYywgZ25vbWV2ZnNzaW5rCi0JLiBwb3B0Ci0JLiBhcHAgZXhhbXBsZXMgKFJCLCBUb3RlbSwgZ25vbWUtbWVkaWEsIC4uLikKLSAgICAgLSBLREUKLQkuIGtpb3NyYwotCS4gYXBwIGV4YW1wbGVzIChKdUssIEFtYXJvSykKLQkuIGFzayBTY290dC9NYXJrCi0gICAgIC0gTWFjIE9TIFgKLQkuIG5hdGl2ZSB2aWRlby9hdWRpbyBzaW5rCi0gICAgIC0gV2luZG93cwotCS4gYnVpbGQgZXRjLgotICAgICogUXVvdGVzIGZyb20gZGV2cwotICAgICAtIHRhYmxlIHBsZWFzZS4uLgotICAgIC0tPgotCi0gICAgJlBST0dSQU1TOwotICAgICZDT01QSUxJTkc7Ci0gICAgJkNIRUNLTElTVDsKLSAgICAmUE9SVElORzsKLSAgICAmSU5URUdSQVRJT047Ci0gICAgJkxJQ0VOU0lORzsKLSAgICAmUVVPVEVTOwotCi0gIDwvcGFydD4KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL21pbWUtd29ybGQucG5nIGIvZG9jcy9tYW51YWwvbWltZS13b3JsZC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZTUxZjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvbWltZS13b3JsZC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC9zaW1wbGUtcGxheWVyLnBuZyBiL2RvY3MvbWFudWFsL3NpbXBsZS1wbGF5ZXIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2IzY2ExLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL3NpbXBsZS1wbGF5ZXIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvc2luay1lbGVtZW50LnBuZyBiL2RvY3MvbWFudWFsL3NpbmstZWxlbWVudC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNGVhYTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9tYW51YWwvc2luay1lbGVtZW50LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL3NyYy1lbGVtZW50LnBuZyBiL2RvY3MvbWFudWFsL3NyYy1lbGVtZW50LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2OTllMC4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbC9zcmMtZWxlbWVudC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbC90aHJlYWQtYnVmZmVyaW5nLnBuZyBiL2RvY3MvbWFudWFsL3RocmVhZC1idWZmZXJpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDZjNjAyLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL3RocmVhZC1idWZmZXJpbmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW51YWwvdGhyZWFkLXN5bmNocm9uaXppbmcucG5nIGIvZG9jcy9tYW51YWwvdGhyZWFkLXN5bmNocm9uaXppbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWMwYTdiLi4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL3RocmVhZC1zeW5jaHJvbml6aW5nLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvbWFudWFsL3RpdGxlcGFnZS54bWwgYi9kb2NzL21hbnVhbC90aXRsZXBhZ2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODgzMzg0Li4wMDAwMDAwCi0tLSBhL2RvY3MvbWFudWFsL3RpdGxlcGFnZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08Ym9va2luZm8+Ci0gIAotICA8YXV0aG9yZ3JvdXA+Ci0gICAgPGF1dGhvcj4KLSAgICAgIDxmaXJzdG5hbWU+V2ltPC9maXJzdG5hbWU+Ci0gICAgICA8c3VybmFtZT5UYXltYW5zPC9zdXJuYW1lPgotICAgICAgPGF1dGhvcmJsdXJiPgotCTxwYXJhPgotCSAgPGVtYWlsPndpbS50YXltYW5zQGNoZWxsby5iZTwvZW1haWw+Ci0JPC9wYXJhPgotICAgICAgPC9hdXRob3JibHVyYj4KLSAgICA8L2F1dGhvcj4KLSAgICAKLSAgICA8YXV0aG9yPgotICAgICAgPGZpcnN0bmFtZT5TdGV2ZTwvZmlyc3RuYW1lPgotICAgICAgPHN1cm5hbWU+QmFrZXI8L3N1cm5hbWU+Ci0gICAgICA8YXV0aG9yYmx1cmI+Ci0JPHBhcmE+Ci0JICA8ZW1haWw+c3RldmViYWtlcl9vcmdAeWFob28uY28udWs8L2VtYWlsPgotCTwvcGFyYT4KLSAgICAgIDwvYXV0aG9yYmx1cmI+Ci0gICAgPC9hdXRob3I+Ci0gICAgCi0gICAgPGF1dGhvcj4KLSAgICAgIDxmaXJzdG5hbWU+QW5keTwvZmlyc3RuYW1lPgotICAgICAgPHN1cm5hbWU+V2luZ288L3N1cm5hbWU+Ci0gICAgICA8YXV0aG9yYmx1cmI+Ci0JPHBhcmE+Ci0JICA8ZW1haWw+d2luZ29AcG9ib3guY29tPC9lbWFpbD4KLQk8L3BhcmE+Ci0gICAgICA8L2F1dGhvcmJsdXJiPgotICAgIDwvYXV0aG9yPgotICAgIAotICAgIDxhdXRob3I+Ci0gICAgICA8Zmlyc3RuYW1lPlJvbmFsZDwvZmlyc3RuYW1lPgotICAgICAgPG90aGVybmFtZT5TLjwvb3RoZXJuYW1lPgotICAgICAgPHN1cm5hbWU+QnVsdGplPC9zdXJuYW1lPgotICAgICAgPGF1dGhvcmJsdXJiPgotCTxwYXJhPgotCSAgPGVtYWlsPnJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldDwvZW1haWw+Ci0JPC9wYXJhPgotICAgICAgPC9hdXRob3JibHVyYj4KLSAgICA8L2F1dGhvcj4KLQotICAgIDxhdXRob3I+Ci0gICAgICA8Zmlyc3RuYW1lPlN0ZWZhbjwvZmlyc3RuYW1lPgotICAgICAgPHN1cm5hbWU+S29zdDwvc3VybmFtZT4KLSAgICAgIDxhdXRob3JibHVyYj4KLQk8cGFyYT4KLQkgIDxlbWFpbD5lbnNvbmljQHVzZXJzLnNmLm5ldDwvZW1haWw+Ci0JPC9wYXJhPgotICAgICAgPC9hdXRob3JibHVyYj4KLSAgICA8L2F1dGhvcj4KLSAgPC9hdXRob3Jncm91cD4KLQotICA8bGVnYWxub3RpY2UgaWQ9Im1pc2MtbGVnYWxub3RpY2UiPgotICAgIDxwYXJhPgotICAgICAgVGhpcyBtYXRlcmlhbCBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKLSAgICAgIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGluIHRoZSBPcGVuIFB1YmxpY2F0aW9uIExpY2Vuc2UsIHYxLjAgb3IgbGF0ZXIgKHRoZQotICAgICAgbGF0ZXN0IHZlcnNpb24gaXMgcHJlc2VudGx5IGF2YWlsYWJsZSBhdCA8dWxpbmsgdXJsPSIKLSAgICAgIGh0dHA6Ly93d3cub3BlbmNvbnRlbnQub3JnL29wbC5zaHRtbCIKLSAgICAgIHR5cGU9Imh0dHAiPmh0dHA6Ly93d3cub3BlbmNvbnRlbnQub3JnL29wbC5zaHRtbDwvdWxpbms+KS4KLSAgICA8L3BhcmE+Ci0gIDwvbGVnYWxub3RpY2U+Ci0KLSAgPHRpdGxlPiZHU3RyZWFtZXI7IEFwcGxpY2F0aW9uIERldmVsb3BtZW50IE1hbnVhbCAoJkdTVF9WRVJTSU9OOyk8L3RpdGxlPgotCi08L2Jvb2tpbmZvPgotCmRpZmYgLS1naXQgYS9kb2NzL21hbnVhbHMubWFrIGIvZG9jcy9tYW51YWxzLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBmZWM4NS4uMDAwMDAwMAotLS0gYS9kb2NzL21hbnVhbHMubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLSMjIyBUaGVzZSBhcmUgYWxsIGdlbmVyaWM7IHdlIHNldCBhbGwgdGhlIHZhcmlhYmxlcyB3ZSBuZWVkCi0KLSMgaW50ZXJtZWRpYXJ5IGJ1aWxkIHBhdGgKLUJVSUxERElSID0gYnVpbGQKLSMgc2FtZSBmb3IgaW1hZ2VzCi1CVUlMRElNQUdFU0RJUiA9ICQoQlVJTERESVIpL2ltYWdlcwotCi0jIGltYWdlcwotIyByaWdodCBub3csIHdlIG9ubHkgYWxsb3cgLnBuZyBhbmQgLmZpZyBhcyBzb3VyY2UKLSMgd2UgbWlnaHQgYWRkIG1vcmUgbGF0ZXIgaWYgd2UgZmVlbCB0aGUgbmVlZAotCi0jIFBORydzIGNhbiBiZSBzb3VyY2Ugb3IgYnVpbHQgZnJvbSAuZmlnCi1QTkcgPSAkKHN0cmlwICQoUE5HX1NSQykgJChGSUdfU1JDOi5maWc9LnBuZykpCi0jIEVQUyAucHMgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCi1FUFMgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wcykgJChQTkdfU1JDOi5wbmc9LnBzKSkKLSMgUERGIC5wZGYgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCi1QREYgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wZGYpICQoUE5HX1NSQzoucG5nPS5wZGYpKQotCi0jIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kIGltYWdlcyBkdXJpbmcgYnVpbGRpbmcsIHdoZXRoZXIgYnkgY29weWluZwotIyBvciBieSBnZW5lcmF0aW5nIHRoZW0KLVBOR19CVUlMVCA9ICQoZm9yZWFjaCBmaWxlLCAkKFBORyksICQoQlVJTERJTUFHRVNESVIpLyQoZmlsZSkpCi1FUFNfQlVJTFQgPSAkKGZvcmVhY2ggZmlsZSwgJChFUFMpLCAkKEJVSUxESU1BR0VTRElSKS8kKGZpbGUpKQotUERGX0JVSUxUID0gJChmb3JlYWNoIGZpbGUsICQoUERGKSwgJChCVUlMRElNQUdFU0RJUikvJChmaWxlKSkKLQotU1JDID0gJChYTUwpICQoUE5HX1NSQykgJChGSUdfU1JDKSAkKENTUykgJChFWFRSQV9TUkMpCi0KLSMgZ2VuZXJhdGUgQTQgZG9jcwotUEFQRVJfTE9DQUxFID0gbmxfTkwKLQotIyMjIGdlbmVyYXRlIGFsbCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHQKLSMgaG9vayBpbiBodG1sIGdlbmVyYXRpb24KLWFsbC1sb2NhbDogaHRtbAotCi0jIGNhbiB3ZSBnZW5lcmF0ZSBIVE1MID8KLWlmICAgICBET0NfSFRNTAotSFRNTF9EQVQgPSBodG1sCi1IVE1MX1RBUkdFVCA9IGh0bWwvaW5kZXguaHRtbAotZWxzZSAgIyFET0NfSFRNTAotSFRNTF9EQVQgPQotSFRNTF9UQVJHRVQgPQotZW5kaWYgI0RPQ19IVE1MCi1odG1sOiAkKEhUTUxfVEFSR0VUKQotCi0jIGNhbiB3ZSBnZW5lcmF0ZSBQUyA/Ci1pZiAgICAgRE9DX1BTCi1QU19EQVQgPSAkKERPQykucHMKLWVsc2UgICMhRE9DX1BTCi1QU19EQVQgPQotZW5kaWYgI0RPQ19QUwotcHM6ICQoUFNfREFUKQotCi0jIGNhbiB3ZSBnZW5lcmF0ZSBQREYgPwotaWYgICAgIERPQ19QREYKLVBERl9EQVQgPSAkKERPQykucGRmCi1lbHNlICAjIURPQ19QREYKLVBERl9EQVQgPQotZW5kaWYgI0RPQ19QREYKLXBkZjogJChQREZfREFUKQotCi1kZWJ1ZzoKLQlAZWNobyAib3V0cHV0dGluZyBzb21lIHVzZWZ1bCBkZWJ1ZyBpbmZvcm1hdGlvbiIKLQlAZWNobyAiU291cmNlIFhNTDoiCi0JQGVjaG8gIlhNTDogJyQoWE1MKSciCi0JQGVjaG8gIkNTUzogJyQoQ1NTKSciCi0JQGVjaG8gIlNvdXJjZSBpbWFnZSBmaWxlczoiCi0JQGVjaG8gIlBOR19TUkM6ICckKFBOR19TUkMpJyIKLQlAZWNobyAiRklHX1NSQzogJyQoRklHX1NSQyknIgotCUBlY2hvICJBbGwgdXNlZCBpbWFnZSBmaWxlczoiCi0JQGVjaG8gIlBORzogJyQoUE5HKSciCi0JQGVjaG8gIkVQUzogJyQoRVBTKSciCi0JQGVjaG8gIlBERjogJyQoUERGKSciCi0JQGVjaG8gIkFsbCB1c2VkIGltYWdlIGZpbGVzIGluIHRoZWlyIGJ1aWx0IHBhdGg6IgotCUBlY2hvICJQTkdfQlVJTFQ6ICckKFBOR19CVUlMVCknIgotCUBlY2hvICJFUFNfQlVJTFQ6ICckKEVQU19CVUlMVCknIgotCUBlY2hvICJQREZfQlVJTFQ6ICckKFBERl9CVUlMVCknIgotCUBlY2hvICJFbmQgcmVzdWx0IHByb2R1Y3RzOiIKLQlAZWNobyAiSFRNTF9EQVQ6ICckKEhUTUxfREFUKSciCi0JQGVjaG8gIlBTX0RBVDogICAnJChQU19EQVQpJyIKLQlAZWNobyAiUERGX0RBVDogICckKFBERl9EQVQpJyIKLQotIyBhIHJ1bGUgdG8gY29weSBhbGwgb2YgdGhlIHNvdXJjZSBmb3IgZG9jcyBpbnRvICQoYnVpbGRkaXIpL2J1aWxkCi0kKEJVSUxERElSKS8kKE1BSU4pOiAkKFhNTCkgJChDU1MpICQoRVhUUkFfU1JDKQotCUAtbWtkaXIgLXAgJChCVUlMRERJUik7IFwKLQlpZiB0ZXN0ICJ4JChFWFRSQV9TUkMpIiAhPSAieCI7IHRoZW4gZm9yIGEgaW4gJChFWFRSQV9TUkMpOyBkbyBjcCAkKHNyY2RpcikvJCRhICQoQlVJTERESVIpOyBkb25lOyBmaSA7IFwKLQlmb3IgYSBpbiAkKFhNTCk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmUgOyBcCi0JZm9yIGEgaW4gJChDU1MpOyBkbyBjcCAkKHNyY2RpcikvJCRhICQoQlVJTERESVIpOyBkb25lIDsgXAotCWNwIC4uL3ZlcnNpb24uZW50aXRpZXMgJChCVUlMRERJUikgOyBcCi0JY3AgJCh0b3Bfc3JjZGlyKS9kb2NzL3VybC5lbnRpdGllcyAkKEJVSUxERElSKQotCi1odG1sL2luZGV4Lmh0bWw6ICQoQlVJTERESVIpLyQoTUFJTikgJChQTkdfQlVJTFQpICQoRklHX1NSQykKLQlAJChNQUtFKSBjaGVjay1sb2NhbAotCUBlY2hvICIqKiogR2VuZXJhdGluZyBIVE1MIG91dHB1dCAqKioiCi0JQC1ta2RpciAtcCBodG1sCi0JQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1wbmcgJChCVUlMRERJUikvaW1hZ2UuZW50aXRpZXMKLQlAY2QgJChCVUlMRERJUikgJiYgJChYU0xUUFJPQykgLW8gLi4vaHRtbC8gLS1zdHJpbmdwYXJhbSBjaHVua2VyLm91dHB1dC5lbmNvZGluZyBVVEYtOCAtLXN0cmluZ3BhcmFtICB1c2UuaWQuYXMuZmlsZW5hbWUgMSAkKFhTTFRQUk9DX0ZMQUdTKSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQvaHRtbC9jaHVuay54c2wiICQoTUFJTikKLQlAdGVzdCAieCQoQ1NTKSIgIT0gIngiICYmIFwKLSAgICAgICAgICBlY2hvICJDb3B5aW5nIC5jc3MgZmlsZXM6ICQoQ1NTKSIgJiYgXAotICAgICAgICAgIGNwICQoc3JjZGlyKS8kKENTUykgaHRtbAotCUB0ZXN0ICJ4JChQTkcpIiAhPSAieCIgJiYgXAotICAgICAgICAgIGVjaG8gIkNvcHlpbmcgLnBuZyBpbWFnZXM6ICQoUE5HX0JVSUxUKSIgJiYgXAotCSAgbWtkaXIgLXAgaHRtbC9pbWFnZXMgJiYgXAotICAgICAgICAgIGNwICQoUE5HX0JVSUxUKSBodG1sL2ltYWdlcyB8fCB0cnVlCi0KLSQoRE9DKS5wczogJChCVUlMRERJUikvJChNQUlOKSAkKEVQU19CVUlMVCkgJChQTkdfU1JDKSAkKEZJR19TUkMpCi0JQCQoTUFLRSkgY2hlY2stbG9jYWwKLQlAZWNobyAiKioqIEdlbmVyYXRpbmcgUFMgb3V0cHV0ICoqKiIKLQlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLWVwcyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcwotCWNkICQoQlVJTERESVIpICYmIFNQX0VOQ09ESU5HPSJVVEYtOCIgZG9jYm9vazJwcyAtbyAuLiAkKE1BSU4pCi0jCWV4cG9ydCBMQ19QQVBFUj0kKFBBUEVSX0xPQ0FMRSkgJiYgY2QgJChCVUlMRERJUikgJiYgeG1sdG8gcHMgLW8gLi4gJChNQUlOKQotCi0kKERPQykucGRmOiAkKERPQykucHMKLQlAJChNQUtFKSBjaGVjay1sb2NhbAotCUBlY2hvICIqKiogR2VuZXJhdGluZyBQREYgb3V0cHV0ICoqKiIKLQlAcHMycGRmICQoRE9DKS5wcwotCi0jJChET0MpLnBkZjogJChNQUlOKSAkKFBERikgJChGSUdfU1JDKQotIwlAZWNobyAiKioqIEdlbmVyYXRpbmcgUERGIG91dHB1dCAqKioiCi0jCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtcGRmIGltYWdlLmVudGl0aWVzCi0jCUBleHBvcnQgTENfUEFQRVI9JChQQVBFUl9MT0NBTEUpICYmIHhtbHRvIHBkZiAkKE1BSU4pCi0jCUBybSBpbWFnZS5lbnRpdGllcwotCi1jbGVhbi1sb2NhbDoKLQktJChSTSkgLXIgJChCVUlMRERJUikKLQktJChSTSkgLXIgaHRtbAotCS0kKFJNKSAkKERPQykucHMKLQktJChSTSkgJChET0MpLnBkZgotCS0kKFJNKSAtciB3d3cKLQotIyMjIGltYWdlIGdlbmVyYXRpb24KLQotIyBjb3B5IHBuZyBmcm9tIHNvdXJjZSBkaXIgcG5nCi0kKEJVSUxESU1BR0VTRElSKS8lLnBuZzogJChzcmNkaXIpLyUucG5nCi0JQGVjaG8gIkNvcHlpbmcgJDwgdG8gJEAiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGNwICQ8ICRACi0jIG1ha2UgcG5nIGZyb20gZmlnCi0kKEJVSUxESU1BR0VTRElSKS8lLnBuZzogJS5maWcKLQlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgotCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQotCUBmaWcyZGV2IC1McG5nICQ8ICRACi0KLSMgbWFrZSBwcyhFUFMpIGZyb20gZmlnCi0kKEJVSUxESU1BR0VTRElSKS8lLnBzOiAlLmZpZwotCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGZpZzJkZXYgLUxlcHMgJDwgJEAKLQotIyBtYWtlIHBkZiBmcm9tIGZpZwotJChCVUlMRElNQUdFU0RJUikvJS5wZGY6ICUuZmlnCi0JQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKLQlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKLQlAZmlnMmRldiAtTHBkZiAkPCAkQAotCi0jIG1ha2UgcGRmIGZyb20gcG5nCi0kKEJVSUxESU1BR0VTRElSKS8lLnBkZjogJS5wbmcKLQlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgotCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQotCUBjYXQgJDwgfCBwbmd0b3BubSB8IHBubXRvcHMgLW5vdHVybiAyPiAvZGV2L251bGwgfCBlcHN0b3BkZiAtLWZpbHRlciAtLW91dGZpbGUgJEAgMj4gL2Rldi9udWxsCi0KLSMgbWFrZSBwcyhFUFMpIGZyb20gcG5nCi0kKEJVSUxESU1BR0VTRElSKS8lLnBzOiAlLnBuZwotCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGNhdCAkPCB8IHBuZ3RvcG5tIHwgcG5tdG9wcyAtbm90dXJuID4gJEAgMj4gL2Rldi9udWxsCi0KLSMgbWFrZSBzdXJlIHhtbCB2YWxpZGF0ZXMgcHJvcGVybHkKLWNoZWNrLWxvY2FsOiAkKEJVSUxERElSKS8kKE1BSU4pCi0JQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1wbmcgJChCVUlMRERJUikvaW1hZ2UuZW50aXRpZXMKLQlAY2QgJChCVUlMRERJUikgJiYgeG1sbGludCAtbm9vdXQgLXZhbGlkICQoTUFJTikKLQlAY2QgJChCVUlMRERJUikgJiYgXAotCWlmIFsgYHdoaWNoIGN1cmxgIF07IHRoZW4gXAotICAgIGxpbmtzPWAkKFhTTFRQUk9DKSAkKFhTTFRQUk9DX0ZMQUdTKSAtLXhpbmNsdWRlICQoYWJzX3RvcF9zcmNkaXIpL2RvY3MvbGlzdC11bGluay54c2wgJChNQUlOKSB8IGVncmVwICdeaHR0cCcgfCBzb3J0IHwgdW5pcWAgJiYgXAotICAgIGhhdmVfZXJyb3I9MCAmJiBcCi0gICAgZm9yIGxpbmsgaW4gJCRsaW5rczsgZG8gXAotICAgICAgY29kZT1gY3VybCAtcyAtbTIwIC1vIC9kZXYvbnVsbCAtSSAtdyAiJXtodHRwX2NvZGV9IiAkJGxpbmtgOyBcCi0gICAgICBpZiBbIFwoICQkPyAtbmUgMCBcKSAtbyBcKCAkJGNvZGUgLWd0IDM5OSBcKSBdOyB0aGVuIFwKLSAgICAgICAgZWNobyAiZXhpdF9zdGF0dXM9JCQ/LCBodHRwX2NvZGU9JCRjb2RlOiAkJGxpbmsiOyBcCi0gICAgICAgIGdyZXAgLUhuciAiJCRsaW5rIiAuOyBcCi0gICAgICAgIGhhdmVfZXJyb3I9MTsgXAotICAgICAgZmk7IFwKLSAgICBkb25lIFwKLSAgZmkKLQotIyBhdm9pZCAnY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGBidWlsZC9pbWFnZS5lbnRpdGllcyc6IEZpbGUgZXhpc3RzJwotIyBlcnJvcnMgZHVyaW5nICdtYWtlIGRpc3RjaGVjaycgYnkgZGlzYWJsaW5nIHBhcmFsbGVsIGJ1aWxkcwotLk5PVFBBUkFMTEVMOgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtIGIvZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDAxNGU0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLUdTVF9ET0NfU0NBTk9CSiA9ICQodG9wX3NyY2RpcikvY29tbW9uL2dzdGRvYy1zY2FuZ29iagotCi0jIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KLQotIyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLCBlLmcuICdnbGliJy4KLSNET0NfTU9EVUxFPWdzdC1wbHVnaW5zLWxpYnMtQEdTVF9BUElfVkVSU0lPTkAKLU1PRFVMRT1nc3RyZWFtZXIKLURPQ19NT0RVTEU9JChNT0RVTEUpLXBsdWdpbnMKLQotIyBmb3IgdXBsb2FkLWRvYy5tYWsKLURPQz0kKE1PRFVMRSktcGx1Z2lucwotRk9STUFUUz1odG1sCi1odG1sOiBodG1sLWJ1aWxkLnN0YW1wCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrCi0KLSMgRXh0cmEgZW52aXJvbm1lbnQgbmVlZGVkIGZvciBDb3JlIG9ubHkuLi4KLUlOU1BFQ1RfRVhUUkFfRU5WSVJPTk1FTlQ9IFwKLSAgICBHU1RfUExVR0lOX1NDQU5ORVJfMV8wPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lcgotCi0jIFRoZSB0b3AtbGV2ZWwgU0dNTCBmaWxlLiBDaGFuZ2UgaXQgaWYgeW91IHdhbnQuCi1ET0NfTUFJTl9TR01MX0ZJTEU9JChET0NfTU9EVUxFKS1kb2NzLnNnbWwKLQotIyBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBjb2RlLgotIyBndGstZG9jIHdpbGwgc2VhcmNoIGFsbCAuYyAmIC5oIGZpbGVzIGJlbmVhdGggaGVyZSBmb3IgaW5saW5lIGNvbW1lbnRzCi0jIGRvY3VtZW50aW5nIGZ1bmN0aW9ucyBhbmQgbWFjcm9zLgotRE9DX1NPVVJDRV9ESVIgPSAkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2Mtc2Nhbi4KLVNDQU5fT1BUSU9OUz0KLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtbWtkYi4KLU1LREJfT1BUSU9OUz0tLXNnbWwtbW9kZQotCi0jIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1maXhyZWYuCi1GSVhYUkVGX09QVElPTlM9LS1leHRyYS1kaXI9JCh0b3BfYnVpbGRkaXIpL2RvY3MvZ3N0L2h0bWwgXAotCS0tZXh0cmEtZGlyPSQodG9wX2J1aWxkZGlyKS9kb2NzL2xpYnMvaHRtbCBcCi0JLS1leHRyYS1kaXI9JChHTElCX1BSRUZJWCkvc2hhcmUvZ3RrLWRvYy9odG1sIFwKLQktLWV4dHJhLWRpcj0kKGRhdGFkaXIpL2d0ay1kb2MvaHRtbAotCi0jIFVzZWQgZm9yIGRlcGVuZGVuY2llcy4KLUhGSUxFX0dMT0I9JCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzLyouaAotQ0ZJTEVfR0xPQj0kKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvKi5jCi0KLSMgSGVhZGVyIGZpbGVzIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nLgotSUdOT1JFX0hGSUxFUyA9Ci1JR05PUkVfQ0ZJTEVTID0KLQotIyB3ZSBhZGQgYWxsIC5oIGZpbGVzIG9mIGVsZW1lbnRzIHRoYXQgaGF2ZSBzaWduYWxzL2FyZ3Mgd2Ugd2FudAotIyBzYWRseSB0aGlzIGFsc28gcHVsbHMgaW4gdGhlIHByaXZhdGUgbWV0aG9kcyAtIG1heWJlIHdlIHNob3VsZAotIyBtb3ZlIHRob3NlIGFyb3VuZCBpbiB0aGUgc291cmNlID8KLSMgYWxzbywgd2Ugc2hvdWxkIGFkZCBzb21lIHN0dWZmIGhlcmUgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB3aGV0aGVyCi0jIG9yIG5vdCB0aGUgcGx1Z2luIHdpbGwgYWN0dWFsbHkgYnVpbGQKLSMgYnV0IEknbSBub3Qgc3VyZSBhYm91dCB0aGF0IC0gaXQgbWlnaHQgYmUgdGhpcyBKdXN0IFdvcmtzIGdpdmVuIHRoYXQKLSMgdGhlIHJlZ2lzdHJ5IHdvbid0IGhhdmUgdGhlIGVsZW1lbnQKLQotRVhUUkFfSEZJTEVTID0gXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RjYXBzZmlsdGVyLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oCi0KLSMgSW1hZ2VzIHRvIGNvcHkgaW50byBIVE1MIGRpcmVjdG9yeS4KLUhUTUxfSU1BR0VTID0KLQotIyBFeHRyYSBTR01MIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5ICQoRE9DX01BSU5fU0dNTF9GSUxFKS4KLWNvbnRlbnRfZmlsZXMgPQotCi0jIE90aGVyIGZpbGVzIHRvIGRpc3RyaWJ1dGUuCi1leHRyYV9maWxlcyA9Ci0KLSMgQ0ZMQUdTIGFuZCBMREZMQUdTIGZvciBjb21waWxpbmcgc2NhbiBwcm9ncmFtLiBPbmx5IG5lZWRlZCBpZiB5b3VyIGFwcC9saWIKLSMgY29udGFpbnMgR3RrT2JqZWN0cy9HT2JqZWN0cyBhbmQgeW91IHdhbnQgdG8gZG9jdW1lbnQgc2lnbmFscyBhbmQgcHJvcGVydGllcy4KLUdUS0RPQ19DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAtSSQodG9wX2J1aWxkZGlyKSAtSSQodG9wX2J1aWxkZGlyKS9saWJzCi1HVEtET0NfTElCUyA9ICQoR1NUX09CSl9MSUJTKQotCi0jIElmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucywgcGxhY2UgdGhlbSBpbiB0aGlzIGZpbGUKLSMgYW5kIHVuY29tbWVudCB0aGlzIGxpbmUuCi0jRE9DX09WRVJSSURFUyA9ICQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dAotRE9DX09WRVJSSURFUyA9Ci0KLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3RrLWRvYy1wbHVnaW5zLm1hawpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL01ha2VmaWxlLmluIGIvZG9jcy9wbHVnaW5zL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDQ0NjA5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDExNzIgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLSMgdGhpcyBzbmlwcGV0IGlzIHRvIGJlIGluY2x1ZGVkIGJ5IGJvdGggb3VyIGRvY2Jvb2sgbWFudWFscwotIyBhbmQgZ3RrLWRvYyBBUEkgcmVmZXJlbmNlcwotCi0jIGl0IGFkZHMgYW4gdXBsb2FkIHRhcmdldCB0byBlYWNoIG9mIHRoZXNlIGRpcidzIE1ha2VmaWxlcwotCi0jIGVhY2ggTWFrZWZpbGUuYW0gc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKLSMgLSBET0M6IHRoZSBiYXNlIG5hbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KLSMgICAgICAgIChmYXEsIG1hbnVhbCwgcHdnLCBnc3RyZWFtZXIsIGdzdHJlYW1lci1saWJzKQotIyAtIEZPUk1BVFM6IHRoZSBmb3JtYXRzIGluIHdoaWNoIERPQyBpcyBvdXRwdXQKLSMgICAgICAgICAgICAoaHRtbCBwcyBwZGYpCi0KLSMgaWYgeW91IHdhbnQgdG8gdXNlIGl0LCBtYWtlIHN1cmUgeW91ciAkSE9NRS8uc3NoL2NvbmZpZyBmaWxlIGNvbnRhaW5zIHRoZQotIyBjb3JyZWN0IFVzZXIgZW50cnkgZm9yIHRoZSBIb3N0IGVudHJ5IGZvciB0aGUgRE9DX1NFUlZFUgotCi0jIFRoaXMgaXMgYW4gaW5jbHVkZSBmaWxlIHNwZWNpZmljYWxseSB0dW5lZCBmb3IgYnVpbGRpbmcgZG9jdW1lbnRhdGlvbgotIyBmb3IgR1N0cmVhbWVyIHBsdWctaW5zCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBkb2NzL3BsdWdpbnMKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAotCSQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MtcGx1Z2lucy5tYWsgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLUdTVF9ET0NfU0NBTk9CSiA9ICQodG9wX3NyY2RpcikvY29tbW9uL2dzdGRvYy1zY2FuZ29iagotCi0jIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUsIGUuZy4gJ2dsaWInLgotI0RPQ19NT0RVTEU9Z3N0LXBsdWdpbnMtbGlicy1AR1NUX0FQSV9WRVJTSU9OQAotTU9EVUxFID0gZ3N0cmVhbWVyCi1ET0NfTU9EVUxFID0gJChNT0RVTEUpLXBsdWdpbnMKLQotIyBmb3IgdXBsb2FkLWRvYy5tYWsKLURPQyA9ICQoTU9EVUxFKS1wbHVnaW5zCi1GT1JNQVRTID0gaHRtbAotCi0jIHRoZXNlIHZhcmlhYmxlcyBkZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBvbmxpbmUgZG9jcwotRE9DX1NFUlZFUiA9IGdzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcKLURPQ19CQVNFID0gL3Nydi9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3d3dy9kYXRhL2RvYwotRE9DX1VSTCA9ICQoRE9DX1NFUlZFUik6JChET0NfQkFTRSkKLQotIyBFeHRyYSBlbnZpcm9ubWVudCBuZWVkZWQgZm9yIENvcmUgb25seS4uLgotSU5TUEVDVF9FWFRSQV9FTlZJUk9OTUVOVCA9IFwKLSAgICBHU1RfUExVR0lOX1NDQU5ORVJfMV8wPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lcgotCi0KLSMgVGhlIHRvcC1sZXZlbCBTR01MIGZpbGUuIENoYW5nZSBpdCBpZiB5b3Ugd2FudC4KLURPQ19NQUlOX1NHTUxfRklMRSA9ICQoRE9DX01PRFVMRSktZG9jcy5zZ21sCi0KLSMgVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZS4KLSMgZ3RrLWRvYyB3aWxsIHNlYXJjaCBhbGwgLmMgJiAuaCBmaWxlcyBiZW5lYXRoIGhlcmUgZm9yIGlubGluZSBjb21tZW50cwotIyBkb2N1bWVudGluZyBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4KLURPQ19TT1VSQ0VfRElSID0gJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzCi0KLSMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLXNjYW4uCi1TQ0FOX09QVElPTlMgPSAKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtbWtkYi4KLU1LREJfT1BUSU9OUyA9IC0tc2dtbC1tb2RlCi0KLSMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLWZpeHJlZi4KLUZJWFhSRUZfT1BUSU9OUyA9IC0tZXh0cmEtZGlyPSQodG9wX2J1aWxkZGlyKS9kb2NzL2dzdC9odG1sIFwKLQktLWV4dHJhLWRpcj0kKHRvcF9idWlsZGRpcikvZG9jcy9saWJzL2h0bWwgXAotCS0tZXh0cmEtZGlyPSQoR0xJQl9QUkVGSVgpL3NoYXJlL2d0ay1kb2MvaHRtbCBcCi0JLS1leHRyYS1kaXI9JChkYXRhZGlyKS9ndGstZG9jL2h0bWwKLQotCi0jIFVzZWQgZm9yIGRlcGVuZGVuY2llcy4KLUhGSUxFX0dMT0IgPSAkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvKi5oCi1DRklMRV9HTE9CID0gJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzLyouYwotCi0jIEhlYWRlciBmaWxlcyB0byBpZ25vcmUgd2hlbiBzY2FubmluZy4KLUlHTk9SRV9IRklMRVMgPSAKLUlHTk9SRV9DRklMRVMgPSAKLQotIyB3ZSBhZGQgYWxsIC5oIGZpbGVzIG9mIGVsZW1lbnRzIHRoYXQgaGF2ZSBzaWduYWxzL2FyZ3Mgd2Ugd2FudAotIyBzYWRseSB0aGlzIGFsc28gcHVsbHMgaW4gdGhlIHByaXZhdGUgbWV0aG9kcyAtIG1heWJlIHdlIHNob3VsZAotIyBtb3ZlIHRob3NlIGFyb3VuZCBpbiB0aGUgc291cmNlID8KLSMgYWxzbywgd2Ugc2hvdWxkIGFkZCBzb21lIHN0dWZmIGhlcmUgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB3aGV0aGVyCi0jIG9yIG5vdCB0aGUgcGx1Z2luIHdpbGwgYWN0dWFsbHkgYnVpbGQKLSMgYnV0IEknbSBub3Qgc3VyZSBhYm91dCB0aGF0IC0gaXQgbWlnaHQgYmUgdGhpcyBKdXN0IFdvcmtzIGdpdmVuIHRoYXQKLSMgdGhlIHJlZ2lzdHJ5IHdvbid0IGhhdmUgdGhlIGVsZW1lbnQKLUVYVFJBX0hGSUxFUyA9IFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZG93bmxvYWRidWZmZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmggXAotCSQodG9wX3NyY2RpcikvcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuaCBcCi0JJCh0b3Bfc3JjZGlyKS9wbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oIFwKLQkkKHRvcF9zcmNkaXIpL3BsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuaAotCi0KLSMgSW1hZ2VzIHRvIGNvcHkgaW50byBIVE1MIGRpcmVjdG9yeS4KLUhUTUxfSU1BR0VTID0gCi0KLSMgRXh0cmEgU0dNTCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSAkKERPQ19NQUlOX1NHTUxfRklMRSkuCi1jb250ZW50X2ZpbGVzID0gCi0KLSMgT3RoZXIgZmlsZXMgdG8gZGlzdHJpYnV0ZS4KLWV4dHJhX2ZpbGVzID0gCi0KLSMgQ0ZMQUdTIGFuZCBMREZMQUdTIGZvciBjb21waWxpbmcgc2NhbiBwcm9ncmFtLiBPbmx5IG5lZWRlZCBpZiB5b3VyIGFwcC9saWIKLSMgY29udGFpbnMgR3RrT2JqZWN0cy9HT2JqZWN0cyBhbmQgeW91IHdhbnQgdG8gZG9jdW1lbnQgc2lnbmFscyBhbmQgcHJvcGVydGllcy4KLUdUS0RPQ19DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAtSSQodG9wX2J1aWxkZGlyKSAtSSQodG9wX2J1aWxkZGlyKS9saWJzCi1HVEtET0NfTElCUyA9ICQoR1NUX09CSl9MSUJTKQotCi0jIElmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucywgcGxhY2UgdGhlbSBpbiB0aGlzIGZpbGUKLSMgYW5kIHVuY29tbWVudCB0aGlzIGxpbmUuCi0jRE9DX09WRVJSSURFUyA9ICQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dAotRE9DX09WRVJSSURFUyA9IAotQEdUS19ET0NfVVNFX0xJQlRPT0xfRkFMU0VAR1RLRE9DX0NDID0gJChDQykgJChJTkNMVURFUykgJChHVEtET0NfREVQU19DRkxBR1MpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUBHVEtfRE9DX1VTRV9MSUJUT09MX1RSVUVAR1RLRE9DX0NDID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKElOQ0xVREVTKSAkKEdUS0RPQ19ERVBTX0NGTEFHUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQEdUS19ET0NfVVNFX0xJQlRPT0xfRkFMU0VAR1RLRE9DX0xEID0gJChDQykgJChHVEtET0NfREVQU19MSUJTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKQotQEdUS19ET0NfVVNFX0xJQlRPT0xfVFJVRUBHVEtET0NfTEQgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0MpICQoR1RLRE9DX0RFUFNfTElCUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykKLUBHVEtfRE9DX1VTRV9MSUJUT09MX0ZBTFNFQEdUS0RPQ19SVU4gPSAKLUBHVEtfRE9DX1VTRV9MSUJUT09MX1RSVUVAR1RLRE9DX1JVTiA9ICQoTElCVE9PTCkgLS1tb2RlPWV4ZWN1dGUKLQotIyBXZSBzZXQgR1BBVEggaGVyZTsgdGhpcyBnaXZlcyB1cyBzZW1hbnRpY3MgZm9yIEdOVSBtYWtlCi0jIHdoaWNoIGFyZSBtb3JlIGxpa2Ugb3RoZXIgbWFrZSdzIFZQQVRILCB3aGVuIGl0IGNvbWVzIHRvCi0jIHdoZXRoZXIgYSBzb3VyY2UgdGhhdCBpcyBhIHRhcmdldCBvZiBvbmUgcnVsZSBpcyB0aGVuCi0jIHNlYXJjaGVkIGZvciBpbiBWUEFUSC9HUEFUSC4KLSMKLUdQQVRIID0gJChzcmNkaXIpCi0KLSMgdGhvbWFzOiBtYWtlIGRvY3MgcGFyYWxsZWwgaW5zdGFsbGFibGUKLVRBUkdFVF9ESVIgPSAkKEhUTUxfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ACi1NQUlOVEFJTkVSX0RPQ19TVEFNUFMgPSBcCi0Jc2Nhbm9iai1idWlsZC5zdGFtcAotCi1FWFRSQV9ESVNUID0gXAotCSQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQkJXAotCSQoc3JjZGlyKS9pbnNwZWN0LyoueG1sCQlcCi0JJChTQ0FOT0JKX0ZJTEVTKQkJXAotCSQoY29udGVudF9maWxlcykJCVwKLQkkKGV4dHJhX2ZpbGVzKQkJCVwKLQkkKEhUTUxfSU1BR0VTKQkJCVwKLQkkKERPQ19NQUlOX1NHTUxfRklMRSkJXAotCSQoRE9DX09WRVJSSURFUykJCVwKLQkkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dAotCi0KLSMgd2UgZG9uJ3QgYWRkIHNjYW5vYmotYnVpbGQuc3RhbXAgaGVyZSBzaW5jZSB0aGV5IGFyZSBidWlsdCBtYW51YWxseSBieSBkb2NzCi0jIG1haW50YWluZXJzIGFuZCByZXN1bHQgaXMgY29tbWl0ZWQgdG8gZ2l0Ci1ET0NfU1RBTVBTID0gXAotCXNjYW4tYnVpbGQuc3RhbXAJCVwKLQlzZ21sLWJ1aWxkLnN0YW1wCQlcCi0JaHRtbC1idWlsZC5zdGFtcAkJXAotCXNjYW4uc3RhbXAJCQlcCi0Jc2dtbC5zdGFtcAkJCVwKLQlodG1sLnN0YW1wCi0KLQotIyBmaWxlcyBnZW5lcmF0ZWQvdXBkYXRlZCBieSBndGtkb2Mtc2NhbmdvYmoKLVNDQU5PQkpfRklMRVMgPSBcCi0JJChET0NfTU9EVUxFKS5hcmdzICAgICAgICAgICAgICBcCi0JJChET0NfTU9EVUxFKS5oaWVyYXJjaHkgICAgICAgICBcCi0JJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzICAgICAgICBcCi0JJChET0NfTU9EVUxFKS5wcmVyZXF1aXNpdGVzICAgICBcCi0JJChET0NfTU9EVUxFKS5zaWduYWxzICAgICAgICAgICBcCi0JJChET0NfTU9EVUxFKS50eXBlcwotCi1TQ0FOT0JKX0ZJTEVTX08gPSBcCi0JLmxpYnMvJChET0NfTU9EVUxFKS1zY2FuLm8KLQotCi0jIGZpbGVzIGdlbmVyYXRlZC91cGRhdGVkIGJ5IGd0a2RvYy1zY2FuCi1TQ0FOX0ZJTEVTID0gXAotCSQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0CVwKLQkkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQJXAotCSQoRE9DX01PRFVMRSktZGVjbC50eHQJCVwKLQkkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQKLQotUkVQT1JUX0ZJTEVTID0gXAotCSQoRE9DX01PRFVMRSktdW5kb2N1bWVudGVkLnR4dCBcCi0JJChET0NfTU9EVUxFKS11bmRlY2xhcmVkLnR4dCBcCi0JJChET0NfTU9EVUxFKS11bnVzZWQudHh0Ci0KLUNMRUFORklMRVMgPSBcCi0JJChTQ0FOT0JKX0ZJTEVTX08pIFwKLQkkKFJFUE9SVF9GSUxFUykgXAotCSQoRE9DX1NUQU1QUykgXAotCWluc3BlY3QtcmVnaXN0cnkueG1sCi0KLUlOU1BFQ1RfRElSID0gaW5zcGVjdAotCi0jIyMgaW5zcGVjdCBHU3RyZWFtZXIgcGx1Zy1pbnM7IGRvbmUgYnkgZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyICMjIwotCi0jIG9ubHkgbG9vayBhdCB0aGUgcGx1Z2lucyBpbiB0aGlzIG1vZHVsZSB3aGVuIGJ1aWxkaW5nIGluc3BlY3QgLnhtbCBzdHVmZgotQEVOQUJMRV9HVEtfRE9DX1RSVUVASU5TUEVDVF9SRUdJU1RSWSA9ICQodG9wX2J1aWxkZGlyKS9kb2NzL3BsdWdpbnMvaW5zcGVjdC1yZWdpc3RyeS54bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQElOU1BFQ1RfRU5WSVJPTk1FTlQgPSBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJTENfQUxMPUMgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJR1NUX1BMVUdJTl9QQVRIXzFfMD0kKHRvcF9idWlsZGRpcikvZ3N0OiQodG9wX2J1aWxkZGlyKS9zeXM6JCh0b3BfYnVpbGRkaXIpL2V4dDokKHRvcF9idWlsZGRpcikvcGx1Z2luczokKHRvcF9idWlsZGRpcikvc3JjOiQodG9wX2J1aWxkZGlyKS9nbmwgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUdTVF9SRUdJU1RSWV8xXzA9JChJTlNQRUNUX1JFR0lTVFJZKSBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJUEtHX0NPTkZJR19QQVRIPSIkKEdTVF9QS0dfQ09ORklHX1BBVEgpIiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJJChJTlNQRUNUX0VYVFJBX0VOVklST05NRU5UKQotCi1NQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQotCi0jIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKLWluc3BlY3RfZmlsZXMgPSAkKHNoZWxsIGZpbmQgJChzcmNkaXIpLyQoSU5TUEVDVF9ESVIpIC1uYW1lICcqLnhtbCcpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrICQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MtcGx1Z2lucy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9wbHVnaW5zL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvcGx1Z2lucy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrICQoYW1fX2VtcHR5KToKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotdGFncyBUQUdTOgotCi1jdGFncyBDVEFHUzoKLQotY3Njb3BlIGNzY29wZWxpc3Q6Ci0KLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCi0JICBkaXN0LWhvb2sKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSBhbGwtbG9jYWwKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1sb2NhbAotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRhdGEtbG9jYWwKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtbG9jYWwKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBkaXN0LWhvb2sgXAotCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tbG9jYWwgXAotCWRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgXAotCWluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgXAotCWluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAotCWluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCi0JaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBcCi0JaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAotCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBcCi0JcHMgcHMtYW0gdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1sb2NhbAotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLWh0bWw6IGh0bWwtYnVpbGQuc3RhbXAKLQotdXBsb2FkOiAkKEZPUk1BVFMpCi0JQGlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICBlY2hvICJQcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAotCSAgaWYgdGVzdCB4JChidWlsZGRpcikgIT0geCQoc3JjZGlyKTsgdGhlbiBcCi0JICAgIGVjaG8gIm1ha2UgdXBsb2FkIGNhbiBvbmx5IGJlIHVzZWQgaWYgc3JjZGlyID09IGJ1aWxkZGlyIjsgXAotCSAgICBleGl0IDE7IFwKLQkgIGZpOyBcCi0JICAjIGd0a2RvYy1yZWJhc2Ugc29tZXRpbWVzIGdldHMgY29uZnVzZWQsIHNvIHJlc2V0IGV2ZXJ5dGhpbmcgdG8gXAotCSAgIyBsb2NhbCBsaW5rcyBiZWZvcmUgcmViYXNpbmcgdG8gb25saW5lIGxpbmtzICAgICAgICAgICAgICAgICAgIFwKLQkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDI+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgXAotCSAgcmViYXNlPWBndGtkb2MtcmViYXNlIC0tdmVyYm9zZSAtLW9ubGluZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWxgIDsgXAotCSAgZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtZSAiT24tKmxpbmUiOyBcCi0JICBmb3IgcmVxIGluIGdsaWIgZ29iamVjdCBnc3RyZWFtZXIgZ3N0cmVhbWVyLWxpYnMgZ3N0LXBsdWdpbnMtYmFzZS1saWJzOyBkbyBcCi0JICAgIGlmICEgKCBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1pIC1lICJPbi0qbGluZS4qLyQkcmVxLyIgKTsgdGhlbiBcCi0JICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCi0JICAgICAgZWNobyAiIENvdWxkIG5vdCBkZXRlcm1pbmUgb25saW5lIGxvY2F0aW9uIGZvciAkJHJlcSBkb2NzLiBDcm9zcy1yZWZlcmVuY2luZyB3aWxsIGJlICIgOyBcCi0JICAgICAgZWNobyAiIGJyb2tlbiwgc28gbm90IHVwbG9hZGluZy4gTWFrZSBzdXJlIHRoZSBsaWJyYXJ5J3MgZ3RrLWRvYyBkb2N1bWVudGF0aW9uIGlzICAgICIgOyBcCi0JICAgICAgZWNobyAiIGluc3RhbGxlZCBzb21ld2hlcmUgaW4gL3Vzci9zaGFyZS9ndGstZG9jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgOyBcCi0JICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCi0JICAgICAgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICBkb25lOyBcCi0JICBleHBvcnQgU1JDPSIkJFNSQyBodG1sIjsgXAotCWZpOyBcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwcyA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucHMiOyBmaTsgXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcGRmID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wZGYiOyBmaTsgXAotCVwKLQkjIHVwbG9hZCByZWxlYXNlcyB0byBib3RoIFguWS8gYW5kIGhlYWQvIHN1YmRpcmVjdG9yaWVzIFwKLQlleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci8kKFBBQ0tBR0VfVkVSU0lPTl9NQUpPUikuJChQQUNLQUdFX1ZFUlNJT05fTUlOT1IpLyQoRE9DKTsgXAotCWVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBta2RpciAtcCAkJERJUjsgXAotCXJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAotCVwKLQlleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci9oZWFkLyQoRE9DKTsgXAotCWVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBta2RpciAtcCAkJERJUjsgXAotCXJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAotCVwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIGh0bWwgPiAvZGV2L251bGw7IHRoZW4gXAotCSAgZWNobyAiVW4tcHJlcGFyaW5nIGRvY3MgZm9yIHVwbG9hZCAocmViYXNpbmcgY3Jvc3MtcmVmZXJlbmNlcykgLi4uIiA7IFwKLQkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDsgXAotCWZpOyBcCi0JZWNobyBEb25lCi0KLWhlbHA6Ci0JQGVjaG8KLQlAZWNobyAiSWYgeW91IGFyZSBhIGRvYyBtYWludGFpbmVyLCBydW4gJ21ha2UgdXBkYXRlJyB0byB1cGRhdGUiCi0JQGVjaG8gInRoZSBkb2N1bWVudGF0aW9uIGZpbGVzIG1haW50YWluZWQgaW4gZ2l0IgotCUBlY2hvCi0JQGVjaG8gT3RoZXIgdXNlZnVsIG1ha2UgdGFyZ2V0czoKLQlAZWNobwotCUBlY2hvICBjaGVjay1pbnNwZWN0ZWQtdmVyc2lvbnM6IG1ha2Ugc3VyZSB0aGUgaW5zcGVjdGVkIHBsdWdpbiBpbmZvCi0JQGVjaG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXAgdG8gZGF0ZSBiZWZvcmUgYSByZWxlYXNlCi0JQGVjaG8KLQotIyB1cGRhdGUgdGhlIHN0dWZmIG1haW50YWluZWQgYnkgZG9jIG1haW50YWluZXJzCi11cGRhdGU6IHNjYW5vYmotdXBkYXRlCi0JJChNQUtFKSBjaGVjay1vdXRkYXRlZC1kb2NzCi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQGFsbC1sb2NhbDogaHRtbC1idWlsZC5zdGFtcAotCi0jIyMjIHNjYW4gZ29iamVjdHM7IGRvbmUgYnkgZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyICMjIyMKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQHNjYW5vYmotdXBkYXRlOgotQEVOQUJMRV9HVEtfRE9DX1RSVUVACS1ybSBzY2Fub2JqLWJ1aWxkLnN0YW1wCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJJChNQUtFKSBzY2Fub2JqLWJ1aWxkLnN0YW1wCi0KLSMgZ3N0ZG9jLXNjYW5vYmogcHJvZHVjZXMgNSBvdXRwdXQgZmlsZXMgKC5uZXcpCi0jIHNjYW5nb2JqLW1lcmdlLnB5IG1lcmdlcyB0aGVtIGludG8gdGhlIGZpbGUgd2hpY2ggd2UgY29tbWl0IGxhdGVyCi0jIFRPRE86IGFsc28gbWVyZ2UgdGhlIGhpZXJhcmNoeQotQEVOQUJMRV9HVEtfRE9DX1RSVUVAc2Nhbm9iai1idWlsZC5zdGFtcDogJChTQ0FOT0JKX0RFUFMpICQoYmFzZWZpbGVzKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICIgIERPQyAgIEludHJvc3BlY3RpbmcgZ29iamVjdHMiCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbgkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZvciBmIGluICQoU0NBTk9CSl9GSUxFUykgJChTQ0FOX0ZJTEVTKTsJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGRvCQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBpZiB0ZXN0IC1lICQoc3JjZGlyKS8kJGY7IHRoZW4gY3AgLXUgJChzcmNkaXIpLyQkZiAuIDsgZmk7CVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG9uZTsJCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpOwkJCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACW1rZGlyIC1wICQoSU5TUEVDVF9ESVIpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJc2Nhbm9ial9vcHRpb25zPSIiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIHNjYW5vYmpfb3B0aW9ucz0iLS12ZXJib3NlIjsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJJChJTlNQRUNUX0VOVklST05NRU5UKSAJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlDQz0iJChHVEtET0NfQ0MpIiBMRD0iJChHVEtET0NfTEQpIiBSVU49IiQoR1RLRE9DX1JVTikiCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlDRkxBR1M9IiQoR1RLRE9DX0NGTEFHUykgJChDRkxBR1MpICQoV0FSTklOR19DRkxBR1MpIglcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJTERGTEFHUz0iJChHVEtET0NfTElCUykgJChMREZMQUdTKSIJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSQoR1NUX0RPQ19TQ0FOT0JKKSAkJHNjYW5vYmpfb3B0aW9ucyAtLXR5cGUtaW5pdC1mdW5jPSJnc3RfaW5pdChOVUxMLE5VTEwpIglcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkgLS1zb3VyY2U9JChQQUNLQUdFKSAtLWluc3BlY3QtZGlyPSQoSU5TUEVDVF9ESVIpICYmCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGVjaG8gIiAgRE9DICAgTWVyZ2luZyBpbnRyb3NwZWN0aW9uIGRhdGEiICYmIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgJChQWVRIT04pCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAkKHRvcF9zcmNkaXIpL2NvbW1vbi9zY2FuZ29iai1tZXJnZS5weSAkKERPQ19NT0RVTEUpIHx8IGV4aXQgMTsJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbgkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGZvciBmIGluICQoU0NBTk9CSl9GSUxFUyk7CQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGRvCQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICBjbXAgLXMgLi8kJGYgJChzcmNkaXIpLyQkZiB8fCBjcCAuLyQkZiAkKHNyY2RpcikvIDsJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG9uZTsJCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpOwkJCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACXRvdWNoIHNjYW5vYmotYnVpbGQuc3RhbXAKLQotQEVOQUJMRV9HVEtfRE9DX1RSVUVAJChET0NfTU9EVUxFKS1kZWNsLnR4dCAkKFNDQU5PQkpfRklMRVMpICQoU0NBTk9CSl9GSUxFU19PKTogc2Nhbi1idWlsZC5zdGFtcAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0cnVlCi0KLSMjIyBzY2FuIGhlYWRlcnM7IGRvbmUgb24gZXZlcnkgYnVpbGQgIyMjCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBzY2FuLWJ1aWxkLnN0YW1wOiAkKEhGSUxFX0dMT0IpICQoRVhUUkFfSEZJTEVTKSAkKGJhc2VmaWxlcykgc2Nhbm9iai1idWlsZC5zdGFtcAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIFNjYW5uaW5nIGhlYWRlciBmaWxlcycKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKSAkKFNDQU5fRklMRVMpOwkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG8JCQkJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGlmIHRlc3QgLWUgJChzcmNkaXIpLyQkZjsgdGhlbiBjcCAtdSAkKHNyY2RpcikvJCRmIC4gOyBmaTsJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBkb25lOwkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmkKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAX3NvdXJjZV9kaXI9JycgOwkJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmb3IgaSBpbiAkKERPQ19TT1VSQ0VfRElSKSA7IGRvCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIF9zb3VyY2VfZGlyPSIkJHtfc291cmNlX2Rpcn0gLS1zb3VyY2UtZGlyPSQkaSIgOwkgICAgICAgIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlkb25lIDsJCQkJCQkJICAgICAgICBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZ3RrZG9jLXNjYW4JCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAkKFNDQU5fT1BUSU9OUykgJChFWFRSQV9IRklMRVMpCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgLS1tb2R1bGU9JChET0NfTU9EVUxFKQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAkJHtfc291cmNlX2Rpcn0gICAgICAgICAgICAgCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgLS1pZ25vcmUtaGVhZGVycz0iJChJR05PUkVfSEZJTEVTKSI7CQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACXRvdWNoIHNjYW4tYnVpbGQuc3RhbXAKLQotIyMjIyB4bWwgIyMjIwotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLWJ1aWxkLnN0YW1wOiBzY2FuLWJ1aWxkLnN0YW1wICQoQ0ZJTEVfR0xPQikgJCh0b3Bfc3JjZGlyKS9jb21tb24vcGx1Z2lucy54c2wgJChleHBhbmRfY29udGVudF9maWxlcykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBCdWlsZGluZyBYTUwnCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQC1ta2RpciAtcCB4bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZm9yIGEgaW4gJChpbnNwZWN0X2ZpbGVzKTsgZG8gXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICB4c2x0cHJvYyAtLXN0cmluZ3BhcmFtIG1vZHVsZSAkKE1PRFVMRSkgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9wbHVnaW5zLnhzbCAkJGEgPiB4bWwvYGJhc2VuYW1lICQkYWA7IGRvbmUKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZm9yIGYgaW4gJChFWEFNUExFX0NGSUxFUyk7IGRvIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkJJChQWVRIT04pICQodG9wX3NyY2RpcikvY29tbW9uL2MtdG8teG1sLnB5ICQkZiA+IHhtbC9lbGVtZW50LWBiYXNlbmFtZSAkJGYgLmNgLnhtbDsgZG9uZQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBfc291cmNlX2Rpcj0nJyA7CQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZvciBpIGluICQoRE9DX1NPVVJDRV9ESVIpIDsgZG8JCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgX3NvdXJjZV9kaXI9IiQke19zb3VyY2VfZGlyfSAtLXNvdXJjZS1kaXI9JCRpIiA7CSAgICAgICAgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWRvbmUgOwkJCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWd0a2RvYy1ta2RiIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkJLS1tb2R1bGU9JChET0NfTU9EVUxFKSBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJCSQke19zb3VyY2VfZGlyfSBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJCSAtLWV4cGFuZC1jb250ZW50LWZpbGVzPSIkKGV4cGFuZF9jb250ZW50X2ZpbGVzKSIgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLW1haW4tc2dtbC1maWxlPSQoc3JjZGlyKS8kKERPQ19NQUlOX1NHTUxfRklMRSkgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLW91dHB1dC1mb3JtYXQ9eG1sIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkJLS1pZ25vcmUtZmlsZXM9IiQoSUdOT1JFX0hGSUxFUykgJChJR05PUkVfQ0ZJTEVTKSIgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkKE1LREJfT1BUSU9OUykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAJChQWVRIT04pICQodG9wX3NyY2RpcikvY29tbW9uL21hbmdsZS1kYi5weSB4bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyB4bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggc2dtbC1idWlsZC5zdGFtcAotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBzZ21sLnN0YW1wOiBzZ21sLWJ1aWxkLnN0YW1wCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKLQotIyMjIyBodG1sICMjIyMKLQotQEVOQUJMRV9HVEtfRE9DX1RSVUVAaHRtbC1idWlsZC5zdGFtcDogc2dtbC5zdGFtcCAkKERPQ19NQUlOX1NHTUxfRklMRSkgJChjb250ZW50X2ZpbGVzKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIEhUTUwnCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1yZiBodG1sCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQG1rZGlyIGh0bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgJChzcmNkaXIpLyQoRE9DX01BSU5fU0dNTF9GSUxFKSBodG1sCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGZvciBmIGluICQoY29udGVudF9maWxlcyk7IGRvIGNwICQoc3JjZGlyKS8kJGYgaHRtbDsgZG9uZQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAtcHIgeG1sIGh0bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyBodG1sCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQG1raHRtbF9vcHRpb25zPSIiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZ3RrZG9jLW1raHRtbCAyPiYxIC0taGVscCB8IGdyZXAgID4vZGV2L251bGwgIlwtXC12ZXJib3NlIjsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWlmIHRlc3QgIiQoPykiID0gIjAiOyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIGlmIHRlc3QgIngkKFYpIiA9ICJ4MSI7IHRoZW4gXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBta2h0bWxfb3B0aW9ucz0iJCRta2h0bWxfb3B0aW9ucyAtLXZlcmJvc2UiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICBmaTsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJY2QgaHRtbCAmJiBndGtkb2MtbWtodG1sICQkbWtodG1sX29wdGlvbnMgJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQCAkKERPQ19NQUlOX1NHTUxfRklMRSkKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLWYgaHRtbC8kKERPQ19NQUlOX1NHTUxfRklMRSkKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIGh0bWwveG1sCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1mIGh0bWwvdmVyc2lvbi5lbnRpdGllcwotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0ZXN0ICJ4JChIVE1MX0lNQUdFUykiID0gIngiIHx8IGZvciBpIGluICIiICQoSFRNTF9JTUFHRVMpIDsgZG8gXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBpZiB0ZXN0ICIkJGkiICE9ICIiOyB0aGVuIGNwICQoc3JjZGlyKS8kJGkgaHRtbCA7IGZpOyBkb25lCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGVjaG8gJyAgRE9DICAgRml4aW5nIGNyb3NzLXJlZmVyZW5jZXMnCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGd0a2RvYy1maXh4cmVmIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkgLS1tb2R1bGUtZGlyPWh0bWwgLS1odG1sLWRpcj0kKEhUTUxfRElSKSAkKEZJWFhSRUZfT1BUSU9OUykKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdG91Y2ggaHRtbC1idWlsZC5zdGFtcAotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBjbGVhbi1sb2NhbC1ndGtkb2M6Ci1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHJtIC1yZiB4bWwgdG1wbCBodG1sCi0jIGNsZWFuIGZpbGVzIGNvcGllZCBmb3Igbm9uc3JjZGlyIHRlbXBsYXRlcyBidWlsZAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBpZiB0ZXN0IHgiJChzcmNkaXIpIiAhPSB4LiA7IHRoZW4gXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBybSAtcmYgJChTQ0FOT0JKX0ZJTEVTKSAkKFNDQU5fRklMRVMpICQoUkVQT1JUX0ZJTEVTKSBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICAgICAkKE1BSU5UQUlORVJfRE9DX1NUQU1QUyk7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQotQEVOQUJMRV9HVEtfRE9DX0ZBTFNFQGFsbC1sb2NhbDoKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUBjbGVhbi1sb2NhbC1ndGtkb2M6Ci0KLWNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbC1ndGtkb2MKLQlAcm0gLWYgKn4gKi5iYWsKLQlAcm0gLXJmIC5saWJzCi0KLWRpc3RjbGVhbi1sb2NhbDoKLQlAcm0gLWYgJChSRVBPUlRfRklMRVMpIFwKLQkgICAgICAgICQoRE9DX01PRFVMRSktZGVjbC1saXN0LnR4dCAkKERPQ19NT0RVTEUpLWRlY2wudHh0Ci0JQHJtIC1yZiB0bXBsLyouc2dtbC5iYWsKLQlAcm0gLWYgJChET0NfTU9EVUxFKS5oaWVyYXJjaHkKLQlAcm0gLWYgKi5zdGFtcCB8fCB0cnVlCi0JQGlmIHRlc3QgIiQoYWJzX3NyY2RpcikiICE9ICIkKGFic19idWlsZGRpcikiIDsgdGhlbiBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSktZG9jcy5zZ21sIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLnR5cGVzIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLmludGVyZmFjZXMgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dCA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS5wcmVyZXF1aXNpdGVzIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCA7IFwKLQkgICAgcm0gLXJmIHRtcGwvKi5zZ21sIDsgXAotCSAgICBybSAtcmYgJChJTlNQRUNUX0RJUik7IFwKLQlmaQotCUBybSAtcmYgKi5vCi0KLSMgdGhvbWFzOiBtYWtlIGRvY3MgcGFyYWxsZWwgaW5zdGFsbGFibGU7IGRldmhlbHAgcmVxdWlyZXMgbWFqb3JtaW5vciB0b28KLWluc3RhbGwtZGF0YS1sb2NhbDoKLQkoaW5zdGFsbGZpbGVzPWBlY2hvICQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzc2A7IFwKLQlpZiB0ZXN0ICIkJGluc3RhbGxmaWxlcyIgPSAnJChidWlsZGRpcikvaHRtbC8qLnNnbWwgJChidWlsZGRpcikvaHRtbC8qLmh0bWwgJChidWlsZGRpcikvaHRtbC8qLnBuZyAkKGJ1aWxkZGlyKS9odG1sLyouY3NzJzsgXAotCXRoZW4gZWNobyAnLS0gTm90aGluZyB0byBpbnN0YWxsJyA7IFwKLQllbHNlIFwKLQkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKLQkgIGZvciBpIGluICQkaW5zdGFsbGZpbGVzOyBkbyBcCi0JICAgIGVjaG8gJy0tIEluc3RhbGxpbmcgJyQkaSA7IFwKLQkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAotCSAgZG9uZTsgXAotCSAgcG5nZmlsZXM9YGVjaG8gLi9odG1sLyoucG5nYDsgXAotCSAgaWYgdGVzdCAiJCRwbmdmaWxlcyIgIT0gJy4vaHRtbC8qLnBuZyc7IHRoZW4gXAotCSAgICBmb3IgaSBpbiAkJHBuZ2ZpbGVzOyBkbyBcCi0JICAgICAgZWNobyAnLS0gSW5zdGFsbGluZyAnJCRpIDsgXAotCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKLQkgICAgZG9uZTsgXAotCSAgZmk7IFwKLQkgIGVjaG8gJy0tIEluc3RhbGxpbmcgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyJyA7IFwKLQkgIGlmIHRlc3QgLWUgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyOyB0aGVuIFwKLQkgICAgICAgICAgICAkKElOU1RBTExfREFUQSkgJChidWlsZGRpcikvaHRtbC8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyIFwKLQkgICAgICAgICAgICAkKERFU1RESVIpJChUQVJHRVRfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ALmRldmhlbHAyOyBcCi0JICBmaTsgXAotCSAgJChHVEtET0NfUkVCQVNFKSAtLXJlbGF0aXZlIC0tZGVzdC1kaXI9JChERVNURElSKSAtLWh0bWwtZGlyPSQoREVTVERJUikkKFRBUkdFVF9ESVIpIHx8IHRydWUgOyBcCi0JZmkpCi11bmluc3RhbGwtbG9jYWw6Ci0JaWYgdGVzdCAtZCAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgdGhlbiBcCi0JICBybSAtcmYgJChERVNURElSKSQoVEFSR0VUX0RJUikvKjsgXAotCSAgcm1kaXIgLXAgJChERVNURElSKSQoVEFSR0VUX0RJUikgMj4vZGV2L251bGwgfHwgdHJ1ZTsgXAotCWVsc2UgXAotCSAgZWNobyAnLS0gTm90aGluZyB0byB1bmluc3RhbGwnIDsgXAotCWZpOwotCi0jCi0jIENoZWNrcwotIwotQEVOQUJMRV9HVEtfRE9DX1RSVUVAY2hlY2staGllcmFyY2h5OiAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBpZiBncmVwICcJJyAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeTsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGVjaG8gIiQoRE9DX01PRFVMRSkuaGllcmFyY2h5IGNvbnRhaW5zIHRhYnMsIHBsZWFzZSBmaXgiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIC9iaW4vZmFsc2U7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBjaGVjazogY2hlY2staGllcmFyY2h5Ci0KLWNoZWNrLWluc3BlY3RlZC12ZXJzaW9uczoKLQlAZWNobyBDaGVja2luZyBwbHVnaW4gdmVyc2lvbnMgb2YgaW5zcGVjdGVkIHBsdWdpbiBkYXRhIC4uLjsgXAotCWZhaWw9MCA7IFwKLQlmb3IgZWFjaCBpbiAkKGluc3BlY3RfZmlsZXMpIDsgZG8gXAotCSAgaWYgKGdyZXAgLUggJzx2ZXJzaW9uPicgJCRlYWNoIHwgZ3JlcCAtdiAnPHZlcnNpb24+JChWRVJTSU9OKScpOyB0aGVuIFwKLQkgICAgZWNobyAkJGVhY2ggc2hvdWxkIGJlIGZpeGVkIHRvIHNheSB2ZXJzaW9uICQoVkVSU0lPTikgb3IgYmUgcmVtb3ZlZCA7IFwKLQkgICAgZWNobyAic2VkIC1pIC1lICdzLzx2ZXJzaW9uLip2ZXJzaW9uPi88dmVyc2lvbj4kKFZFUlNJT04pPFwvdmVyc2lvbj4vJyIgJCRlYWNoOyBcCi0JICAgIGVjaG8gOyBcCi0JICAgIGZhaWw9MTsgXAotCSAgZmkgOyBcCi0JZG9uZSA7IFwKLQlleGl0ICQkZmFpbAotCi1jaGVjay1vdXRkYXRlZC1kb2NzOgotCSQoQU1fVl9HRU4pZWNobyBDaGVja2luZyBmb3Igb3V0ZGF0ZWQgcGx1Z2luIGluc3BlY3QgZGF0YSAuLi47IFwKLQlmYWlsPTAgOyBcCi0JaWYgWyAtZCAkKHRvcF9zcmNkaXIpLy5naXQvIF07IHRoZW4gXAotCSAgZmlsZXM9YGZpbmQgJChzcmNkaXIpL2luc3BlY3QvIC1uYW1lICcqeG1sJ2A7IFwKLQkgIGZvciBmIGluICQkZmlsZXM7IGRvIFwKLQkgICAgdmVyPWBncmVwICc8dmVyc2lvbj4kKFBBQ0tBR0VfVkVSU0lPTik8L3ZlcnNpb24+JyAkJGZgOyBcCi0JICAgIGlmIHRlc3QgIngkJHZlciIgPSAieCI7IHRoZW4gXAotCSAgICAgIHBsdWdpbj1gZWNobyAkJGYgfCBzZWQgLWUgJ3MvXi4qcGx1Z2luLS8vJyAtZSAncy8ueG1sLy8nYDsgXAotCSAgICAgICMgZWNobyAiQ2hlY2tpbmcgJCRwbHVnaW4gJCRmIjsgXAotCSAgICAgIHB1c2hkICIkKHRvcF9zcmNkaXIpIiA+L2Rldi9udWxsOyBcCi0JICAgICAgcGluaXQ9YGdpdCBncmVwIC1BMyBHU1RfUExVR0lOX0RFRklORSAtLSBleHQvIGdzdC8gc3lzLyB8IGdyZXAgIlwiJCRwbHVnaW5cIiJgOyBcCi0JICAgICAgcG9wZCA+L2Rldi9udWxsOyBcCi0JICAgICAgIyBlY2hvICJbJCRwaW5pdF0iOyBcCi0JICAgICAgaWYgdGVzdCAieCQkcGluaXQiID0gIngiOyB0aGVuIFwKLQkgICAgICAgIHByaW50ZiAiICoqKiogb3V0ZGF0ZWQgZG9jcyBmb3IgcGx1Z2luICUtMTVzOiAlc1xuIiAkJHBsdWdpbiAkJGY7IFwKLQkgICAgICAgIGZhaWw9MTsgXAotCSAgICAgIGZpOyBcCi0JICAgIGZpOyBcCi0JICBkb25lOyBcCi0JZmkgOyBcCi0JZXhpdCAkJGZhaWwKLQotIwotIyBSZXF1aXJlIGd0ay1kb2Mgd2hlbiBtYWtpbmcgZGlzdAotIwotQEVOQUJMRV9HVEtfRE9DX1RSVUVAZGlzdC1jaGVjay1ndGtkb2M6Ci1ARU5BQkxFX0dUS19ET0NfRkFMU0VAZGlzdC1jaGVjay1ndGtkb2M6Ci1ARU5BQkxFX0dUS19ET0NfRkFMU0VACUBlY2hvICIqKiogZ3RrLWRvYyBtdXN0IGJlIGluc3RhbGxlZCBhbmQgZW5hYmxlZCBpbiBvcmRlciB0byBtYWtlIGRpc3QiCi1ARU5BQkxFX0dUS19ET0NfRkFMU0VACUBmYWxzZQotCi0jIEZJWE1FOiBkZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGRpc3QgZ2VuZXJhdGVkIGh0bWwgb3Igbm90Ci0jIGFsc28gdGhpcyBvbmx5IHdvcmtzLCBpZiB0aGUgcHJvamVjdCBoYXMgYmVlbiBidWlsZCBiZWZvcmUKLSMgd2UgY291bGQgZGlzdCBodG1sIG9ubHkgaWYgaXRzIHRoZXJlLCBidXQgdGhhdCBtaWdodCBsZWFkIHRvIG1pc3NpbmcgaHRtbCBpbgotIyB0YXJiYWxscwotZGlzdC1ob29rOiBkaXN0LWNoZWNrLWd0a2RvYyBkaXN0LWhvb2stbG9jYWwKLQlta2RpciAkKGRpc3RkaXIpL2h0bWwKLQljcCBodG1sLyogJChkaXN0ZGlyKS9odG1sCi0JLWNwICQoc3JjZGlyKS8kKERPQ19NT0RVTEUpLnR5cGVzICQoZGlzdGRpcikvCi0JLWNwICQoc3JjZGlyKS8kKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKGRpc3RkaXIpLwotCWNkICQoZGlzdGRpcikgJiYgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKLQktZ3RrZG9jLXJlYmFzZSAtLW9ubGluZSAtLXJlbGF0aXZlIC0taHRtbC1kaXI9JChkaXN0ZGlyKS9odG1sCi0KLS5QSE9OWSA6IGRpc3QtaG9vay1sb2NhbCBkb2NzIGNoZWNrLW91dGRhdGVkLWRvY3MgaW5zcGVjdAotCi0jIGF2b2lkIHNwdXJpb3VzIGJ1aWxkIGVycm9ycyB3aGVuIGRpc3RjaGVja2luZyB3aXRoIC1qTgotLk5PVFBBUkFMTEVMOgotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sIGIvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLWRvY3Muc2dtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllZGIwYy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtZG9jcy5zZ21sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKLSAgICAgICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgWwotPCFFTlRJVFkgJSB2ZXJzaW9uLWVudGl0aWVzIFNZU1RFTSAidmVyc2lvbi5lbnRpdGllcyI+Ci0ldmVyc2lvbi1lbnRpdGllczsKLV0+Ci0KLTxib29rIGlkPSJpbmRleCIgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiPgotICA8Ym9va2luZm8+Ci0gICAgPHRpdGxlPkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgJkdTVF9BUElfVkVSU0lPTjsgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLSAgICA8cmVsZWFzZWluZm8+Ci0gICAgICBmb3IgR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAmR1NUX0FQSV9WRVJTSU9OOyAoJkdTVF9WRVJTSU9OOykKLSAgICAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIG9uLWxpbmUgYXQKLSAgICAgIDx1bGluayByb2xlPSJvbmxpbmUtbG9jYXRpb24iIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyLXBsdWdpbnMvaHRtbC8iPmh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci1wbHVnaW5zL2h0bWwvPC91bGluaz4uCi0gICAgPC9yZWxlYXNlaW5mbz4KLSAgPC9ib29raW5mbz4KLQotICA8Y2hhcHRlcj4KLSAgICA8dGl0bGU+Z3N0cmVhbWVyIEVsZW1lbnRzPC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1jYXBzZmlsdGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1jb25jYXQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWRvd25sb2FkYnVmZmVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1mYWtlc2luay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmFrZXNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmRzaW5rLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1mZHNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmlsZXNpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWZpbGVzcmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWZ1bm5lbC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtaWRlbnRpdHkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWlucHV0LXNlbGVjdG9yLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1tdWx0aXF1ZXVlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1vdXRwdXQtc2VsZWN0b3IueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXF1ZXVlMi54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcXVldWUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXN0cmVhbWlkZGVtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXRlZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtdHlwZWZpbmQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXZhbHZlLnhtbCIgLz4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyPgotICAgIDx0aXRsZT5nc3RyZWFtZXIgUGx1Z2luczwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1jb3JlZWxlbWVudHMueG1sIiAvPgotICA8L2NoYXB0ZXI+Ci08L2Jvb2s+Ci0KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQgYi9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMtc2VjdGlvbnMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDg4Y2YzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy1zZWN0aW9ucy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWNhcHNmaWx0ZXI8L0ZJTEU+Ci08VElUTEU+Y2Fwc2ZpbHRlcjwvVElUTEU+Ci1Hc3RDYXBzRmlsdGVyCi1Hc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0Q2Fwc0ZpbHRlckNsYXNzCi1HU1RfQ0FQU19GSUxURVIKLUdTVF9DQVBTX0ZJTFRFUl9DQVNUCi1HU1RfSVNfQ0FQU19GSUxURVIKLUdTVF9DQVBTX0ZJTFRFUl9DTEFTUwotR1NUX0lTX0NBUFNfRklMVEVSX0NMQVNTCi1HU1RfVFlQRV9DQVBTX0ZJTFRFUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9jYXBzX2ZpbHRlcl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtY29uY2F0PC9GSUxFPgotPFRJVExFPmNvbmNhdDwvVElUTEU+Ci1Hc3RDb25jYXQKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0Q29uY2F0Q2xhc3MKLUdTVF9DT05DQVQKLUdTVF9DT05DQVRfQ0FTVAotR1NUX0lTX0NPTkNBVAotR1NUX0NPTkNBVF9DTEFTUwotR1NUX0lTX0NPTkNBVF9DTEFTUwotR1NUX1RZUEVfQ09OQ0FUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2NvbmNhdF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZG93bmxvYWRidWZmZXI8L0ZJTEU+Ci08VElUTEU+ZG93bmxvYWRidWZmZXI8L1RJVExFPgotR3N0RG93bmxvYWRCdWZmZXIKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RG93bmxvYWRCdWZmZXJTaXplCi1Hc3REb3dubG9hZEJ1ZmZlckNsYXNzCi1HU1RfRE9XTkxPQURfQlVGRkVSCi1HU1RfRE9XTkxPQURfQlVGRkVSX0NBU1QKLUdTVF9JU19ET1dOTE9BRF9CVUZGRVIKLUdTVF9ET1dOTE9BRF9CVUZGRVJfQ0xBU1MKLUdTVF9JU19ET1dOTE9BRF9CVUZGRVJfQ0xBU1MKLUdTVF9UWVBFX0RPV05MT0FEX0JVRkZFUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9kb3dubG9hZF9idWZmZXJfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWZha2VzaW5rPC9GSUxFPgotPFRJVExFPmZha2VzaW5rPC9USVRMRT4KLUdzdEZha2VTaW5rCi1Hc3RGYWtlU2lua1N0YXRlRXJyb3IKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RmFrZVNpbmtDbGFzcwotR1NUX0ZBS0VfU0lOSwotR1NUX0ZBS0VfU0lOS19DQVNUCi1HU1RfSVNfRkFLRV9TSU5LCi1HU1RfRkFLRV9TSU5LX0NMQVNTCi1HU1RfSVNfRkFLRV9TSU5LX0NMQVNTCi1HU1RfVFlQRV9GQUtFX1NJTksKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZmFrZV9zaW5rX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1mYWtlc3JjPC9GSUxFPgotPFRJVExFPmZha2VzcmM8L1RJVExFPgotR3N0RmFrZVNyYwotR3N0RmFrZVNyY0RhdGFUeXBlCi1Hc3RGYWtlU3JjRmlsbFR5cGUKLUdzdEZha2VTcmNPdXRwdXRUeXBlCi1Hc3RGYWtlU3JjU2l6ZVR5cGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RmFrZVNyY0NsYXNzCi1HU1RfRkFLRV9TUkMKLUdTVF9JU19GQUtFX1NSQwotR1NUX0ZBS0VfU1JDX0NMQVNTCi1HU1RfSVNfRkFLRV9TUkNfQ0xBU1MKLUdTVF9UWVBFX0ZBS0VfU1JDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2Zha2Vfc3JjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1mZHNpbms8L0ZJTEU+Ci08VElUTEU+ZmRzaW5rPC9USVRMRT4KLUdzdEZkU2luawotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RGZFNpbmtDbGFzcwotR1NUX0ZEX1NJTksKLUdTVF9GRF9TSU5LX0NBU1QKLUdTVF9JU19GRF9TSU5LCi1HU1RfRkRfU0lOS19DTEFTUwotR1NUX0lTX0ZEX1NJTktfQ0xBU1MKLUdTVF9UWVBFX0ZEX1NJTksKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZmRfc2lua19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZmRzcmM8L0ZJTEU+Ci08VElUTEU+ZmRzcmM8L1RJVExFPgotR3N0RmRTcmMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RmRTcmNDbGFzcwotR1NUX0ZEX1NSQwotR1NUX0lTX0ZEX1NSQwotR1NUX0ZEX1NSQ19DTEFTUwotR1NUX0lTX0ZEX1NSQ19DTEFTUwotR1NUX1RZUEVfRkRfU1JDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2ZkX3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZmlsZXNpbms8L0ZJTEU+Ci08VElUTEU+ZmlsZXNpbms8L1RJVExFPgotR3N0RmlsZVNpbmsKLUdzdEZpbGVTaW5rQnVmZmVyTW9kZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RGaWxlU2lua0NsYXNzCi1HU1RfRklMRV9TSU5LCi1HU1RfRklMRV9TSU5LX0NBU1QKLUdTVF9JU19GSUxFX1NJTksKLUdTVF9GSUxFX1NJTktfQ0xBU1MKLUdTVF9JU19GSUxFX1NJTktfQ0xBU1MKLUdTVF9UWVBFX0ZJTEVfU0lOSwotR1NUX1RZUEVfRklMRV9TSU5LX0JVRkZFUl9NT0RFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2ZpbGVfc2lua19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZmlsZXNyYzwvRklMRT4KLTxUSVRMRT5maWxlc3JjPC9USVRMRT4KLUdzdEZpbGVTcmMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RmlsZVNyY0NsYXNzCi1HU1RfRklMRV9TUkMKLUdTVF9GSUxFX1NSQ19DQVNUCi1HU1RfSVNfRklMRV9TUkMKLUdTVF9GSUxFX1NSQ19DTEFTUwotR1NUX0lTX0ZJTEVfU1JDX0NMQVNTCi1HU1RfVFlQRV9GSUxFX1NSQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9maWxlX3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZnVubmVsPC9GSUxFPgotPFRJVExFPmZ1bm5lbDwvVElUTEU+Ci1Hc3RGdW5uZWwKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RnVubmVsQ2xhc3MKLUdTVF9GVU5ORUwKLUdTVF9JU19GVU5ORUwKLUdTVF9GVU5ORUxfQ0xBU1MKLUdTVF9JU19GVU5ORUxfQ0xBU1MKLUdTVF9UWVBFX0ZVTk5FTAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9mdW5uZWxfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWlkZW50aXR5PC9GSUxFPgotPFRJVExFPmlkZW50aXR5PC9USVRMRT4KLUdzdElkZW50aXR5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdElkZW50aXR5Q2xhc3MKLUdTVF9JREVOVElUWQotR1NUX0lTX0lERU5USVRZCi1HU1RfSURFTlRJVFlfQ0xBU1MKLUdTVF9JU19JREVOVElUWV9DTEFTUwotR1NUX1RZUEVfSURFTlRJVFkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfaWRlbnRpdHlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWlucHV0LXNlbGVjdG9yPC9GSUxFPgotPFRJVExFPmlucHV0LXNlbGVjdG9yPC9USVRMRT4KLUdzdElucHV0U2VsZWN0b3IKLUdzdElucHV0U2VsZWN0b3JTeW5jTW9kZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RJbnB1dFNlbGVjdG9yQ2xhc3MKLUdTVF9JTlBVVF9TRUxFQ1RPUgotR1NUX0lTX0lOUFVUX1NFTEVDVE9SCi1HU1RfSU5QVVRfU0VMRUNUT1JfQ0xBU1MKLUdTVF9JU19JTlBVVF9TRUxFQ1RPUl9DTEFTUwotR1NUX1RZUEVfSU5QVVRfU0VMRUNUT1IKLUdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QKLUdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfQ09ORAotR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9MT0NLCi1HU1RfSU5QVVRfU0VMRUNUT1JfTE9DSwotR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSwotR1NUX0lOUFVUX1NFTEVDVE9SX1dBSVQKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW11bHRpcXVldWU8L0ZJTEU+Ci08VElUTEU+bXVsdGlxdWV1ZTwvVElUTEU+Ci1Hc3RNdWx0aVF1ZXVlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE11bHRpUXVldWVDbGFzcwotR1NUX01VTFRJX1FVRVVFCi1HU1RfSVNfTVVMVElfUVVFVUUKLUdTVF9NVUxUSV9RVUVVRV9DTEFTUwotR1NUX0lTX01VTFRJX1FVRVVFX0NMQVNTCi1HU1RfVFlQRV9NVUxUSV9RVUVVRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9tdWx0aV9xdWV1ZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtb3V0cHV0LXNlbGVjdG9yPC9GSUxFPgotPFRJVExFPm91dHB1dC1zZWxlY3RvcjwvVElUTEU+Ci1Hc3RPdXRwdXRTZWxlY3RvcgotR3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0T3V0cHV0U2VsZWN0b3JDbGFzcwotR1NUX09VVFBVVF9TRUxFQ1RPUgotR1NUX0lTX09VVFBVVF9TRUxFQ1RPUgotR1NUX09VVFBVVF9TRUxFQ1RPUl9DTEFTUwotR1NUX0lTX09VVFBVVF9TRUxFQ1RPUl9DTEFTUwotR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X291dHB1dF9zZWxlY3Rvcl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcXVldWU8L0ZJTEU+Ci08VElUTEU+cXVldWU8L1RJVExFPgotR3N0UXVldWUKLUdzdFF1ZXVlTGVha3kKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UXVldWVDbGFzcwotR1NUX1FVRVVFCi1HU1RfUVVFVUVfQ0FTVAotR1NUX0lTX1FVRVVFCi1HU1RfUVVFVUVfQ0xBU1MKLUdTVF9JU19RVUVVRV9DTEFTUwotR1NUX1RZUEVfUVVFVUUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1Hc3RRdWV1ZVNpemUKLWdzdF9xdWV1ZV9nZXRfdHlwZQotR1NUX1FVRVVFX0NMRUFSX0xFVkVMCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1xdWV1ZTI8L0ZJTEU+Ci08VElUTEU+cXVldWUyPC9USVRMRT4KLUdzdFF1ZXVlMgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RRdWV1ZTJDbGFzcwotR1NUX1FVRVVFMgotR1NUX1FVRVVFMl9DQVNUCi1HU1RfSVNfUVVFVUUyCi1HU1RfUVVFVUUyX0NMQVNTCi1HU1RfSVNfUVVFVUUyX0NMQVNTCi1HU1RfVFlQRV9RVUVVRTIKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1Hc3RRdWV1ZTJTaXplCi1Hc3RRdWV1ZTJSYW5nZQotZ3N0X3F1ZXVlMl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtc3RyZWFtaWRkZW11eDwvRklMRT4KLTxUSVRMRT5zdHJlYW1pZGRlbXV4PC9USVRMRT4KLUdzdFN0cmVhbWlkRGVtdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0U3RyZWFtaWREZW11eENsYXNzCi1HU1RfU1RSRUFNSURfREVNVVgKLUdTVF9TVFJFQU1JRF9ERU1VWF9DQVNUCi1HU1RfSVNfU1RSRUFNSURfREVNVVgKLUdTVF9TVFJFQU1JRF9ERU1VWF9DTEFTUwotR1NUX0lTX1NUUkVBTUlEX0RFTVVYX0NMQVNTCi1HU1RfVFlQRV9TVFJFQU1JRF9ERU1VWAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9zdHJlYW1pZF9kZW11eF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtdGVlPC9GSUxFPgotPFRJVExFPnRlZTwvVElUTEU+Ci1Hc3RUZWUKLUdzdFRlZVB1bGxNb2RlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFRlZUNsYXNzCi1HU1RfVEVFCi1HU1RfVEVFX0NBU1QKLUdTVF9JU19URUUKLUdTVF9URUVfQ0xBU1MKLUdTVF9JU19URUVfQ0xBU1MKLUdTVF9UWVBFX1RFRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90ZWVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXR5cGVmaW5kPC9GSUxFPgotPFRJVExFPnR5cGVmaW5kPC9USVRMRT4KLUdzdFR5cGVGaW5kRWxlbWVudAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RUeXBlRmluZEVsZW1lbnRDbGFzcwotR1NUX1RZUEVfRklORF9FTEVNRU5UCi1HU1RfSVNfVFlQRV9GSU5EX0VMRU1FTlQKLUdTVF9UWVBFX0ZJTkRfRUxFTUVOVF9DTEFTUwotR1NUX0lTX1RZUEVfRklORF9FTEVNRU5UX0NMQVNTCi1HU1RfVFlQRV9UWVBFX0ZJTkRfRUxFTUVOVAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtdmFsdmU8L0ZJTEU+Ci08VElUTEU+dmFsdmU8L1RJVExFPgotR3N0VmFsdmUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0VmFsdmVDbGFzcwotR1NUX1ZBTFZFCi1HU1RfSVNfVkFMVkUKLUdTVF9WQUxWRV9DTEFTUwotR1NUX0lTX1ZBTFZFX0NMQVNTCi1HU1RfVFlQRV9WQUxWRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF92YWx2ZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuYXJncyBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGQyNjUwLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5hcmdzCisrKyAvZGV2L251bGwKQEAgLTEsMTIyMCArMCwwIEBACi08QVJHPgotPE5BTUU+R3N0VmFsdmU6OmRyb3A8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRyb3AgYnVmZmVycyBhbmQgZXZlbnRzPC9OSUNLPgotPEJMVVJCPldoZXRoZXIgdG8gZHJvcCBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0IHRoZW0gdGhyb3VnaC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFR5cGVGaW5kRWxlbWVudDo6Y2FwczwvTkFNRT4KLTxUWVBFPkdzdENhcHMqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5jYXBzPC9OSUNLPgotPEJMVVJCPmRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0uPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VHlwZUZpbmRFbGVtZW50Ojpmb3JjZS1jYXBzPC9OQU1FPgotPFRZUEU+R3N0Q2Fwcyo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5mb3JjZSBjYXBzPC9OSUNLPgotPEJMVVJCPmZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFR5cGVGaW5kRWxlbWVudDo6bWluaW11bTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPlsxLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPm1pbmltdW08L05JQ0s+Ci08QkxVUkI+bWluaW11bSBwcm9iYWJpbGl0eSByZXF1aXJlZCB0byBhY2NlcHQgY2Fwcy48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VGVlOjphbGxvYy1wYWQ8L05BTUU+Ci08VFlQRT5Hc3RQYWQqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QWxsb2NhdGlvbiBTcmMgUGFkPC9OSUNLPgotPEJMVVJCPlRoZSBwYWQgQUxMT0NBVElPTiBxdWVyaWVzIHdpbGwgYmUgcHJveGllZCB0byAodW51c2VkKS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RUZWU6Omhhcy1jaGFpbjwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkhhcyBDaGFpbjwvTklDSz4KLTxCTFVSQj5JZiB0aGUgZWxlbWVudCBjYW4gb3BlcmF0ZSBpbiBwdXNoIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFRlZTo6bGFzdC1tZXNzYWdlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5MYXN0IE1lc3NhZ2U8L05JQ0s+Ci08QkxVUkI+VGhlIG1lc3NhZ2UgZGVzY3JpYmluZyBjdXJyZW50IHN0YXR1cy48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VGVlOjpudW0tc3JjLXBhZHM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+TnVtIFNyYyBQYWRzPC9OSUNLPgotPEJMVVJCPlRoZSBudW1iZXIgb2Ygc291cmNlIHBhZHMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFRlZTo6cHVsbC1tb2RlPC9OQU1FPgotPFRZUEU+R3N0VGVlUHVsbE1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UHVsbCBtb2RlPC9OSUNLPgotPEJMVVJCPkJlaGF2aW9yIG9mIHRlZSBpbiBwdWxsIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPk5ldmVyIGFjdGl2YXRlIGluIHB1bGwgbW9kZTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VGVlOjpzaWxlbnQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TaWxlbnQ8L05JQ0s+Ci08QkxVUkI+RG9uJ3QgcHJvZHVjZSBsYXN0X21lc3NhZ2UgZXZlbnRzLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RUZWU6OmFsbG93LW5vdC1saW5rZWQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BbGxvdyBub3QgbGlua2VkPC9OSUNLPgotPEJMVVJCPlJldHVybiBHU1RfRkxPV19PSyBldmVuIGlmIHRoZXJlIGFyZSBubyBzb3VyY2UgcGFkcyBvciB0aGV5IGFyZSBhbGwgdW5saW5rZWQuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6OmN1cnJlbnQtbGV2ZWwtYnVmZmVyczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5DdXJyZW50IGxldmVsIChidWZmZXJzKTwvTklDSz4KLTxCTFVSQj5DdXJyZW50IG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UXVldWUyOjpjdXJyZW50LWxldmVsLWJ5dGVzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkN1cnJlbnQgbGV2ZWwgKGtCKTwvTklDSz4KLTxCTFVSQj5DdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6OmN1cnJlbnQtbGV2ZWwtdGltZTwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkN1cnJlbnQgbGV2ZWwgKG5zKTwvTklDSz4KLTxCTFVSQj5DdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6OmhpZ2gtcGVyY2VudDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SGlnaCBwZXJjZW50PC9OSUNLPgotPEJMVVJCPkhpZ2ggdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlIChEZXByZWNhdGVkOiB1c2UgaGlnaC13YXRlcm1hcmsgaW5zdGVhZCkuPC9CTFVSQj4KLTxERUZBVUxUPjk5PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6Omxvdy1wZXJjZW50PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxMDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Mb3cgcGVyY2VudDwvTklDSz4KLTxCTFVSQj5Mb3cgdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gc3RhcnQuIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUgKERlcHJlY2F0ZWQ6IHVzZSBsb3ctd2F0ZXJtYXJrIGluc3RlYWQpLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6Om1heC1zaXplLWJ1ZmZlcnM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heC4gc2l6ZSAoYnVmZmVycyk8L05JQ0s+Ci08QkxVUkI+TWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UXVldWUyOjptYXgtc2l6ZS1ieXRlczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4LiBzaXplIChrQik8L05JQ0s+Ci08QkxVUkI+TWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzLCAwPWRpc2FibGUpLjwvQkxVUkI+Ci08REVGQVVMVD4yMDk3MTUyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6Om1heC1zaXplLXRpbWU8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4LiBzaXplIChucyk8L05JQ0s+Ci08QkxVUkI+TWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zLCAwPWRpc2FibGUpLjwvQkxVUkI+Ci08REVGQVVMVD4yMDAwMDAwMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6OnJpbmctYnVmZmVyLW1heC1zaXplPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heC4gcmluZyBidWZmZXIgc2l6ZSAoYnl0ZXMpPC9OSUNLPgotPEJMVVJCPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHJpbmcgYnVmZmVyIChieXRlcywgMCA9IGRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UXVldWUyOjp0ZW1wLWxvY2F0aW9uPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5UZW1wb3JhcnkgRmlsZSBMb2NhdGlvbjwvTklDSz4KLTxCTFVSQj5Mb2NhdGlvbiB0byBzdG9yZSB0ZW1wb3JhcnkgZmlsZXMgaW4gKE9ubHkgcmVhZCB0aGlzIHByb3BlcnR5LCB1c2UgdGVtcC10ZW1wbGF0ZSB0byBjb25maWd1cmUgdGhlIG5hbWUgdGVtcGxhdGUpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6OnRlbXAtcmVtb3ZlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SZW1vdmUgdGhlIFRlbXBvcmFyeSBGaWxlPC9OSUNLPgotPEJMVVJCPlJlbW92ZSB0aGUgdGVtcC1sb2NhdGlvbiBhZnRlciB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlMjo6dGVtcC10ZW1wbGF0ZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRlbXBvcmFyeSBGaWxlIFRlbXBsYXRlPC9OSUNLPgotPEJMVVJCPkZpbGUgdGVtcGxhdGUgdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzIGluLCBzaG91bGQgY29udGFpbiBkaXJlY3RvcnkgYW5kIFhYWFhYWC4gKE5VTEwgPT0gZGlzYWJsZWQpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTI6OnVzZS1idWZmZXJpbmc8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVzZSBidWZmZXJpbmc8L05JQ0s+Ci08QkxVUkI+RW1pdCBHU1RfTUVTU0FHRV9CVUZGRVJJTkcgYmFzZWQgb24gbG93LS9oaWdoLXBlcmNlbnQgdGhyZXNob2xkcy48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlMjo6dXNlLXJhdGUtZXN0aW1hdGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVzZSBSYXRlIEVzdGltYXRlPC9OSUNLPgotPEJMVVJCPkVzdGltYXRlIHRoZSBiaXRyYXRlIG9mIHRoZSBzdHJlYW0gdG8gY2FsY3VsYXRlIHRpbWUgbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlMjo6YXZnLWluLXJhdGU8L05BTUU+Ci08VFlQRT5naW50NjQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5JbnB1dCBkYXRhIHJhdGUgKGJ5dGVzL3MpPC9OSUNLPgotPEJMVVJCPkF2ZXJhZ2UgaW5wdXQgZGF0YSByYXRlIChieXRlcy9zKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UXVldWUyOjp1c2UtdGFncy1iaXRyYXRlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Vc2UgYml0cmF0ZSBmcm9tIHRhZ3M8L05JQ0s+Ci08QkxVUkI+VXNlIGEgYml0cmF0ZSBmcm9tIHVwc3RyZWFtIHRhZ3MgdG8gZXN0aW1hdGUgYnVmZmVyIGR1cmF0aW9uIGlmIG5vdCBwcm92aWRlZC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlMjo6aGlnaC13YXRlcm1hcms8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5IaWdoIHdhdGVybWFyazwvTklDSz4KLTxCTFVSQj5IaWdoIHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZS48L0JMVVJCPgotPERFRkFVTFQ+MC45OTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UXVldWUyOjpsb3ctd2F0ZXJtYXJrPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TG93IHdhdGVybWFyazwvTklDSz4KLTxCTFVSQj5Mb3cgdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gc3RhcnQuIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUuPC9CTFVSQj4KLTxERUZBVUxUPjAuMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlOjpjdXJyZW50LWxldmVsLWJ1ZmZlcnM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+Q3VycmVudCBsZXZlbCAoYnVmZmVycyk8L05JQ0s+Ci08QkxVUkI+Q3VycmVudCBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlOjpjdXJyZW50LWxldmVsLWJ5dGVzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkN1cnJlbnQgbGV2ZWwgKGtCKTwvTklDSz4KLTxCTFVSQj5DdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTo6Y3VycmVudC1sZXZlbC10aW1lPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+Q3VycmVudCBsZXZlbCAobnMpPC9OSUNLPgotPEJMVVJCPkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucykuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlOjpmbHVzaC1vbi1lb3M8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZsdXNoIG9uIEVPUzwvTklDSz4KLTxCTFVSQj5EaXNjYXJkIGFsbCBkYXRhIGluIHRoZSBxdWV1ZSB3aGVuIGFuIEVPUyBldmVudCBpcyByZWNlaXZlZC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlOjpsZWFreTwvTkFNRT4KLTxUWVBFPkdzdFF1ZXVlTGVha3k8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5MZWFreTwvTklDSz4KLTxCTFVSQj5XaGVyZSB0aGUgcXVldWUgbGVha3MsIGlmIGF0IGFsbC48L0JMVVJCPgotPERFRkFVTFQ+Tm90IExlYWt5PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTo6bWF4LXNpemUtYnVmZmVyczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4LiBzaXplIChidWZmZXJzKTwvTklDSz4KLTxCTFVSQj5NYXguIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZSAoMD1kaXNhYmxlKS48L0JMVVJCPgotPERFRkFVTFQ+MjAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTo6bWF4LXNpemUtYnl0ZXM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heC4gc2l6ZSAoa0IpPC9OSUNLPgotPEJMVVJCPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcywgMD1kaXNhYmxlKS48L0JMVVJCPgotPERFRkFVTFQ+MTA0ODU3NjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlOjptYXgtc2l6ZS10aW1lPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heC4gc2l6ZSAobnMpPC9OSUNLPgotPEJMVVJCPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKS48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDAwMDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UXVldWU6Om1pbi10aHJlc2hvbGQtYnVmZmVyczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWluLiB0aHJlc2hvbGQgKGJ1ZmZlcnMpPC9OSUNLPgotPEJMVVJCPk1pbi4gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlIHRvIGFsbG93IHJlYWRpbmcgKDA9ZGlzYWJsZSkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlOjptaW4tdGhyZXNob2xkLWJ5dGVzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NaW4uIHRocmVzaG9sZCAoa0IpPC9OSUNLPgotPEJMVVJCPk1pbi4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIHRvIGFsbG93IHJlYWRpbmcgKGJ5dGVzLCAwPWRpc2FibGUpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRdWV1ZTo6bWluLXRocmVzaG9sZC10aW1lPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1pbi4gdGhyZXNob2xkIChucyk8L05JQ0s+Ci08QkxVUkI+TWluLiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgdG8gYWxsb3cgcmVhZGluZyAoaW4gbnMsIDA9ZGlzYWJsZSkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1ZXVlOjpzaWxlbnQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNpbGVudDwvTklDSz4KLTxCTFVSQj5Eb24ndCBlbWl0IHF1ZXVlIHNpZ25hbHMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RPdXRwdXRTZWxlY3Rvcjo6YWN0aXZlLXBhZDwvTkFNRT4KLTxUWVBFPkdzdFBhZCo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5BY3RpdmUgcGFkPC9OSUNLPgotPEJMVVJCPkN1cnJlbnRseSBhY3RpdmUgc3JjIHBhZC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RPdXRwdXRTZWxlY3Rvcjo6cGFkLW5lZ290aWF0aW9uLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RPdXRwdXRTZWxlY3RvclBhZE5lZ290aWF0aW9uTW9kZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBhZCBuZWdvdGlhdGlvbiBtb2RlPC9OSUNLPgotPEJMVVJCPlRoZSBtb2RlIHRvIGJlIHVzZWQgZm9yIHBhZCBuZWdvdGlhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+QWxsPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RPdXRwdXRTZWxlY3Rvcjo6cmVzZW5kLWxhdGVzdDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVzZW5kIGxhdGVzdCBidWZmZXI8L05JQ0s+Ci08QkxVUkI+UmVzZW5kIGxhdGVzdCBidWZmZXIgYWZ0ZXIgYSBzd2l0Y2ggdG8gYSBuZXcgcGFkLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlRdWV1ZTo6ZXh0cmEtc2l6ZS1idWZmZXJzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5FeHRyYSBTaXplIChidWZmZXJzKTwvTklDSz4KLTxCTFVSQj5BbW91bnQgb2YgYnVmZmVycyB0aGUgcXVldWVzIGNhbiBncm93IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5ICgwPWRpc2FibGUpIChOT1QgSU1QTEVNRU5URUQpLjwvQkxVUkI+Ci08REVGQVVMVD41PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVF1ZXVlOjpleHRyYS1zaXplLWJ5dGVzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5FeHRyYSBTaXplIChrQik8L05JQ0s+Ci08QkxVUkI+QW1vdW50IG9mIGRhdGEgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoYnl0ZXMsIDA9ZGlzYWJsZSkgKE5PVCBJTVBMRU1FTlRFRCkuPC9CTFVSQj4KLTxERUZBVUxUPjEwNDg1NzYwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVF1ZXVlOjpleHRyYS1zaXplLXRpbWU8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RXh0cmEgU2l6ZSAobnMpPC9OSUNLPgotPEJMVVJCPkFtb3VudCBvZiB0aW1lIHRoZSBxdWV1ZXMgY2FuIGdyb3cgaWYgb25lIG9mIHRoZW0gaXMgZW1wdHkgKGluIG5zLCAwPWRpc2FibGUpIChOT1QgSU1QTEVNRU5URUQpLjwvQkxVUkI+Ci08REVGQVVMVD4zMDAwMDAwMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVF1ZXVlOjpoaWdoLXBlcmNlbnQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkhpZ2ggcGVyY2VudDwvTklDSz4KLTxCTFVSQj5IaWdoIHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZSAoRGVwcmVjYXRlZDogdXNlIGhpZ2gtd2F0ZXJtYXJrIGluc3RlYWQpLjwvQkxVUkI+Ci08REVGQVVMVD45OTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlRdWV1ZTo6bG93LXBlcmNlbnQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkxvdyBwZXJjZW50PC9OSUNLPgotPEJMVVJCPkxvdyB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBzdGFydC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZSAoRGVwcmVjYXRlZDogdXNlIGxvdy13YXRlcm1hcmsgaW5zdGVhZCkuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpUXVldWU6Om1heC1zaXplLWJ1ZmZlcnM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heC4gc2l6ZSAoYnVmZmVycyk8L05JQ0s+Ci08QkxVUkI+TWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkuPC9CTFVSQj4KLTxERUZBVUxUPjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpUXVldWU6Om1heC1zaXplLWJ5dGVzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXguIHNpemUgKGtCKTwvTklDSz4KLTxCTFVSQj5NYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMsIDA9ZGlzYWJsZSkuPC9CTFVSQj4KLTxERUZBVUxUPjEwNDg1NzYwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVF1ZXVlOjptYXgtc2l6ZS10aW1lPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heC4gc2l6ZSAobnMpPC9OSUNLPgotPEJMVVJCPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKS48L0JMVVJCPgotPERFRkFVTFQ+MjAwMDAwMDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlRdWV1ZTo6c3luYy1ieS1ydW5uaW5nLXRpbWU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlN5bmMgQnkgUnVubmluZyBUaW1lPC9OSUNLPgotPEJMVVJCPlN5bmNocm9uaXplIGRlYWN0aXZhdGVkIG9yIG5vdC1saW5rZWQgc3RyZWFtcyBieSBydW5uaW5nIHRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVF1ZXVlOjp1c2UtYnVmZmVyaW5nPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Vc2UgYnVmZmVyaW5nPC9OSUNLPgotPEJMVVJCPkVtaXQgR1NUX01FU1NBR0VfQlVGRkVSSU5HIGJhc2VkIG9uIGxvdy0vaGlnaC1wZXJjZW50IHRocmVzaG9sZHMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVF1ZXVlOjp1bmxpbmtlZC1jYWNoZS10aW1lPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVubGlua2VkIGNhY2hlIHRpbWUgKG5zKTwvTklDSz4KLTxCTFVSQj5FeHRyYSBidWZmZXJpbmcgaW4gdGltZSBmb3IgdW5saW5rZWQgc3RyZWFtcyAoaWYgJ3N5bmMtYnktcnVubmluZy10aW1lJykuPC9CTFVSQj4KLTxERUZBVUxUPjI1MDAwMDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlRdWV1ZTo6dXNlLWludGVybGVhdmU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVzZSBpbnRlcmxlYXZlPC9OSUNLPgotPEJMVVJCPkFkanVzdCB0aW1lIGxpbWl0cyBiYXNlZCBvbiBpbnB1dCBpbnRlcmxlYXZlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlRdWV1ZTo6aGlnaC13YXRlcm1hcms8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5IaWdoIHdhdGVybWFyazwvTklDSz4KLTxCTFVSQj5IaWdoIHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZS48L0JMVVJCPgotPERFRkFVTFQ+MC45OTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlRdWV1ZTo6bG93LXdhdGVybWFyazwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkxvdyB3YXRlcm1hcms8L05JQ0s+Ci08QkxVUkI+TG93IHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlLjwvQkxVUkI+Ci08REVGQVVMVD4wLjAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJbnB1dFNlbGVjdG9yOjphY3RpdmUtcGFkPC9OQU1FPgotPFRZUEU+R3N0UGFkKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkFjdGl2ZSBwYWQ8L05JQ0s+Ci08QkxVUkI+VGhlIGN1cnJlbnRseSBhY3RpdmUgc2luayBwYWQuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SW5wdXRTZWxlY3Rvcjo6Y2FjaGUtYnVmZmVyczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2FjaGUgQnVmZmVyczwvTklDSz4KLTxCTFVSQj5DYWNoZSBidWZmZXJzIGZvciBhY3RpdmUtcGFkLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SW5wdXRTZWxlY3Rvcjo6bi1wYWRzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPk51bWJlciBvZiBQYWRzPC9OSUNLPgotPEJMVVJCPlRoZSBudW1iZXIgb2Ygc2luayBwYWRzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJbnB1dFNlbGVjdG9yOjpzeW5jLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RJbnB1dFNlbGVjdG9yU3luY01vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TeW5jIG1vZGU8L05JQ0s+Ci08QkxVUkI+QmVoYXZpb3IgaW4gc3luYy1zdHJlYW1zIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPlN5bmMgdXNpbmcgdGhlIGN1cnJlbnQgYWN0aXZlIHNlZ21lbnQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElucHV0U2VsZWN0b3I6OnN5bmMtc3RyZWFtczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3luYyBTdHJlYW1zPC9OSUNLPgotPEJMVVJCPlN5bmNocm9uaXplIGluYWN0aXZlIHN0cmVhbXMgdG8gdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgYWN0aXZlIHN0cmVhbSBvciB0byB0aGUgY3VycmVudCBjbG9jay48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SWRlbnRpdHk6OmNoZWNrLWltcGVyZmVjdC1vZmZzZXQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNoZWNrIGZvciBkaXNjb250aWd1b3VzIG9mZnNldDwvTklDSz4KLTxCTFVSQj5TZW5kIGVsZW1lbnQgbWVzc2FnZXMgaWYgb2Zmc2V0IGFuZCBvZmZzZXRfZW5kIGRvIG5vdCBtYXRjaCB1cC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElkZW50aXR5OjpjaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DaGVjayBmb3IgZGlzY29udGlndW91cyB0aW1lc3RhbXBzPC9OSUNLPgotPEJMVVJCPlNlbmQgZWxlbWVudCBtZXNzYWdlcyBpZiB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbnMgZG8gbm90IG1hdGNoIHVwLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SWRlbnRpdHk6OmRhdGFyYXRlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EYXRhcmF0ZTwvTklDSz4KLTxCTFVSQj4oUmUpdGltZXN0YW1wcyBidWZmZXJzIHdpdGggbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQgKDAgPSBpbmFjdGl2ZSkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElkZW50aXR5Ojpkcm9wLXByb2JhYmlsaXR5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ecm9wIFByb2JhYmlsaXR5PC9OSUNLPgotPEJMVVJCPlRoZSBQcm9iYWJpbGl0eSBhIGJ1ZmZlciBpcyBkcm9wcGVkLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJZGVudGl0eTo6ZHVtcDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RHVtcDwvTklDSz4KLTxCTFVSQj5EdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJZGVudGl0eTo6ZXJyb3ItYWZ0ZXI8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RXJyb3IgQWZ0ZXI8L05JQ0s+Ci08QkxVUkI+RXJyb3IgYWZ0ZXIgTiBidWZmZXJzLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SWRlbnRpdHk6Omxhc3QtbWVzc2FnZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+bGFzdC1tZXNzYWdlPC9OSUNLPgotPEJMVVJCPmxhc3QtbWVzc2FnZS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SWRlbnRpdHk6OnNpZ25hbC1oYW5kb2ZmczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2lnbmFsIGhhbmRvZmZzPC9OSUNLPgotPEJMVVJCPlNlbmQgYSBzaWduYWwgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlci48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SWRlbnRpdHk6OnNpbGVudDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+c2lsZW50PC9OSUNLPgotPEJMVVJCPnNpbGVudC48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SWRlbnRpdHk6OnNpbmdsZS1zZWdtZW50PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TaW5nbGUgU2VnbWVudDwvTklDSz4KLTxCTFVSQj5UaW1lc3RhbXAgYnVmZmVycyBhbmQgZWF0IHNlZ21lbnRzIHNvIGFzIHRvIGFwcGVhciBhcyBvbmUgc2VnbWVudC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElkZW50aXR5OjpzbGVlcC10aW1lPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TbGVlcCB0aW1lPC9OSUNLPgotPEJMVVJCPk1pY3Jvc2Vjb25kcyB0byBzbGVlcCBiZXR3ZWVuIHByb2Nlc3NpbmcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElkZW50aXR5OjpzeW5jPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TeW5jaHJvbml6ZTwvTklDSz4KLTxCTFVSQj5TeW5jaHJvbml6ZSB0byBwaXBlbGluZSBjbG9jay48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElkZW50aXR5Ojpkcm9wLWJ1ZmZlci1mbGFnczwvTkFNRT4KLTxUWVBFPkdzdEJ1ZmZlckZsYWdzPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2hlY2sgZmxhZ3MgdG8gZHJvcCBidWZmZXJzPC9OSUNLPgotPEJMVVJCPkRyb3AgYnVmZmVycyB3aXRoIHRoZSBnaXZlbiBmbGFncy48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGaWxlU3JjOjpsb2NhdGlvbjwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZpbGUgTG9jYXRpb248L05JQ0s+Ci08QkxVUkI+TG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gcmVhZC48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmlsZVNpbms6OmFwcGVuZDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QXBwZW5kPC9OSUNLPgotPEJMVVJCPkFwcGVuZCB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGUuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGaWxlU2luazo6YnVmZmVyLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RGaWxlU2lua0J1ZmZlck1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXJpbmcgbW9kZTwvTklDSz4KLTxCTFVSQj5UaGUgYnVmZmVyaW5nIG1vZGUgdG8gdXNlLjwvQkxVUkI+Ci08REVGQVVMVD5EZWZhdWx0IGJ1ZmZlcmluZzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmlsZVNpbms6OmJ1ZmZlci1zaXplPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXJpbmcgc2l6ZTwvTklDSz4KLTxCTFVSQj5TaXplIG9mIGJ1ZmZlciBpbiBudW1iZXIgb2YgYnl0ZXMgZm9yIGxpbmUgb3IgZnVsbCBidWZmZXItbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+NjU1MzY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZpbGVTaW5rOjpsb2NhdGlvbjwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZpbGUgTG9jYXRpb248L05JQ0s+Ci08QkxVUkI+TG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gd3JpdGUuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZkU3JjOjpmZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+ZmQ8L05JQ0s+Ci08QkxVUkI+QW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8gcmVhZCBmcm9tLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGZFNyYzo6dGltZW91dDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaW1lb3V0PC9OSUNLPgotPEJMVVJCPlBvc3QgYSBtZXNzYWdlIGFmdGVyIHRpbWVvdXQgbWljcm9zZWNvbmRzICgwID0gZGlzYWJsZWQpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGZFNpbms6OmZkPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5mZDwvTklDSz4KLTxCTFVSQj5BbiBvcGVuIGZpbGUgZGVzY3JpcHRvciB0byB3cml0ZSB0by48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNyYzo6Y2FuLWFjdGl2YXRlLXB1bGw8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DYW4gYWN0aXZhdGUgcHVsbDwvTklDSz4KLTxCTFVSQj5DYW4gYWN0aXZhdGUgaW4gcHVsbCBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU3JjOjpjYW4tYWN0aXZhdGUtcHVzaDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNhbiBhY3RpdmF0ZSBwdXNoPC9OSUNLPgotPEJMVVJCPkNhbiBhY3RpdmF0ZSBpbiBwdXNoIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZha2VTcmM6OmRhdGE8L05BTUU+Ci08VFlQRT5Hc3RGYWtlU3JjRGF0YVR5cGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5kYXRhPC9OSUNLPgotPEJMVVJCPkRhdGEgYWxsb2NhdGlvbiBtZXRob2QuPC9CTFVSQj4KLTxERUZBVUxUPkFsbG9jYXRlIGRhdGE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZha2VTcmM6OmRhdGFyYXRlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EYXRhcmF0ZTwvTklDSz4KLTxCTFVSQj5UaW1lc3RhbXBzIGJ1ZmZlcnMgd2l0aCBudW1iZXIgb2YgYnl0ZXMgcGVyIHNlY29uZCAoMCA9IG5vbmUpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU3JjOjpkdW1wPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EdW1wPC9OSUNLPgotPEJMVVJCPkR1bXAgYnVmZmVyIGNvbnRlbnRzIHRvIHN0ZG91dC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZha2VTcmM6OmZpbGx0eXBlPC9OQU1FPgotPFRZUEU+R3N0RmFrZVNyY0ZpbGxUeXBlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+ZmlsbHR5cGU8L05JQ0s+Ci08QkxVUkI+SG93IHRvIGZpbGwgdGhlIGJ1ZmZlciwgaWYgYXQgYWxsLjwvQkxVUkI+Ci08REVGQVVMVD5GaWxsIGJ1ZmZlcnMgd2l0aCB6ZXJvczwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNyYzo6Zm9ybWF0PC9OQU1FPgotPFRZUEU+R3N0Rm9ybWF0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Rm9ybWF0PC9OSUNLPgotPEJMVVJCPlRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQgZXZlbnRzLjwvQkxVUkI+Ci08REVGQVVMVD5HU1RfRk9STUFUX0JZVEVTPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU3JjOjppcy1saXZlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SXMgdGhpcyBhIGxpdmUgc291cmNlPC9OSUNLPgotPEJMVVJCPlRydWUgaWYgdGhlIGVsZW1lbnQgY2Fubm90IHByb2R1Y2UgZGF0YSBpbiBQQVVTRUQuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU3JjOjpsYXN0LW1lc3NhZ2U8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhc3QtbWVzc2FnZTwvTklDSz4KLTxCTFVSQj5UaGUgbGFzdCBzdGF0dXMgbWVzc2FnZS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNyYzo6cGFyZW50c2l6ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+cGFyZW50c2l6ZTwvTklDSz4KLTxCTFVSQj5TaXplIG9mIHBhcmVudCBidWZmZXIgZm9yIHN1Yi1idWZmZXJlZCBhbGxvY2F0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD40MDk2MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNyYzo6cGF0dGVybjwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnBhdHRlcm48L05JQ0s+Ci08QkxVUkI+U2V0IHRoZSBwYXR0ZXJuICh1bnVzZWQpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU3JjOjpzaWduYWwtaGFuZG9mZnM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNpZ25hbCBoYW5kb2ZmczwvTklDSz4KLTxCTFVSQj5TZW5kIGEgc2lnbmFsIGJlZm9yZSBwdXNoaW5nIHRoZSBidWZmZXIuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU3JjOjpzaWxlbnQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNpbGVudDwvTklDSz4KLTxCTFVSQj5Eb24ndCBwcm9kdWNlIGxhc3RfbWVzc2FnZSBldmVudHMuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZha2VTcmM6OnNpemVtYXg8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnNpemVtYXg8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBidWZmZXIgc2l6ZS48L0JMVVJCPgotPERFRkFVTFQ+NDA5NjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNyYzo6c2l6ZW1pbjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+c2l6ZW1pbjwvTklDSz4KLTxCTFVSQj5NaW5pbXVtIGJ1ZmZlciBzaXplLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU3JjOjpzaXpldHlwZTwvTkFNRT4KLTxUWVBFPkdzdEZha2VTcmNTaXplVHlwZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnNpemV0eXBlPC9OSUNLPgotPEJMVVJCPkhvdyB0byBkZXRlcm1pbmUgYnVmZmVyIHNpemVzLjwvQkxVUkI+Ci08REVGQVVMVD5TZW5kIGVtcHR5IGJ1ZmZlcnM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZha2VTcmM6OnN5bmM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlN5bmM8L05JQ0s+Ci08QkxVUkI+U3luYyB0byB0aGUgY2xvY2sgdG8gdGhlIGRhdGFyYXRlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNpbms6OmNhbi1hY3RpdmF0ZS1wdWxsPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DYW4gYWN0aXZhdGUgcHVsbDwvTklDSz4KLTxCTFVSQj5DYW4gYWN0aXZhdGUgaW4gcHVsbCBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNpbms6OmNhbi1hY3RpdmF0ZS1wdXNoPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DYW4gYWN0aXZhdGUgcHVzaDwvTklDSz4KLTxCTFVSQj5DYW4gYWN0aXZhdGUgaW4gcHVzaCBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU2luazo6ZHVtcDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RHVtcDwvTklDSz4KLTxCTFVSQj5EdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGYWtlU2luazo6bGFzdC1tZXNzYWdlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5MYXN0IE1lc3NhZ2U8L05JQ0s+Ci08QkxVUkI+VGhlIG1lc3NhZ2UgZGVzY3JpYmluZyBjdXJyZW50IHN0YXR1cy48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNpbms6Om51bS1idWZmZXJzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5udW0tYnVmZmVyczwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgYnVmZmVycyB0byBhY2NlcHQgZ29pbmcgRU9TLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNpbms6OnNpZ25hbC1oYW5kb2ZmczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2lnbmFsIGhhbmRvZmZzPC9OSUNLPgotPEJMVVJCPlNlbmQgYSBzaWduYWwgYmVmb3JlIHVucmVmZmluZyB0aGUgYnVmZmVyLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNpbms6OnNpbGVudDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2lsZW50PC9OSUNLPgotPEJMVVJCPkRvbid0IHByb2R1Y2UgbGFzdF9tZXNzYWdlIGV2ZW50cy48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmFrZVNpbms6OnN0YXRlLWVycm9yPC9OQU1FPgotPFRZUEU+R3N0RmFrZVNpbmtTdGF0ZUVycm9yPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3RhdGUgRXJyb3I8L05JQ0s+Ci08QkxVUkI+R2VuZXJhdGUgYSBzdGF0ZSBjaGFuZ2UgZXJyb3IuPC9CTFVSQj4KLTxERUZBVUxUPk5vIHN0YXRlIGNoYW5nZSBlcnJvcnM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdENhcHNGaWx0ZXI6OmNhcHM8L05BTUU+Ci08VFlQRT5Hc3RDYXBzKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZpbHRlciBjYXBzPC9OSUNLPgotPEJMVVJCPlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdENhcHNGaWx0ZXI6OmNhcHMtY2hhbmdlLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DYXBzIENoYW5nZSBNb2RlPC9OSUNLPgotPEJMVVJCPkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIuPC9CTFVSQj4KLTxERUZBVUxUPk9ubHkgYWNjZXB0IHRoZSBjdXJyZW50IGZpbHRlciBjYXBzPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REb3dubG9hZEJ1ZmZlcjo6aGlnaC1wZXJjZW50PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxMDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5IaWdoIHBlcmNlbnQ8L05JQ0s+Ci08QkxVUkI+SGlnaCB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUuPC9CTFVSQj4KLTxERUZBVUxUPjk5PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REb3dubG9hZEJ1ZmZlcjo6bG93LXBlcmNlbnQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkxvdyBwZXJjZW50PC9OSUNLPgotPEJMVVJCPkxvdyB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBzdGFydC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZS48L0JMVVJCPgotPERFRkFVTFQ+MTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdERvd25sb2FkQnVmZmVyOjptYXgtc2l6ZS1ieXRlczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4LiBzaXplIChrQik8L05JQ0s+Ci08QkxVUkI+TWF4LiBhbW91bnQgb2YgZGF0YSB0byBidWZmZXIgKGJ5dGVzLCAwPWRpc2FibGUpLjwvQkxVUkI+Ci08REVGQVVMVD4yMDk3MTUyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REb3dubG9hZEJ1ZmZlcjo6bWF4LXNpemUtdGltZTwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXguIHNpemUgKG5zKTwvTklDSz4KLTxCTFVSQj5NYXguIGFtb3VudCBvZiBkYXRhIHRvIGJ1ZmZlciAoaW4gbnMsIDA9ZGlzYWJsZSkuPC9CTFVSQj4KLTxERUZBVUxUPjIwMDAwMDAwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdERvd25sb2FkQnVmZmVyOjp0ZW1wLWxvY2F0aW9uPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5UZW1wb3JhcnkgRmlsZSBMb2NhdGlvbjwvTklDSz4KLTxCTFVSQj5Mb2NhdGlvbiB0byBzdG9yZSB0ZW1wb3JhcnkgZmlsZXMgaW4gKE9ubHkgcmVhZCB0aGlzIHByb3BlcnR5LCB1c2UgdGVtcC10ZW1wbGF0ZSB0byBjb25maWd1cmUgdGhlIG5hbWUgdGVtcGxhdGUpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REb3dubG9hZEJ1ZmZlcjo6dGVtcC1yZW1vdmU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJlbW92ZSB0aGUgVGVtcG9yYXJ5IEZpbGU8L05JQ0s+Ci08QkxVUkI+UmVtb3ZlIHRoZSB0ZW1wLWxvY2F0aW9uIGFmdGVyIHVzZS48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RG93bmxvYWRCdWZmZXI6OnRlbXAtdGVtcGxhdGU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UZW1wb3JhcnkgRmlsZSBUZW1wbGF0ZTwvTklDSz4KLTxCTFVSQj5GaWxlIHRlbXBsYXRlIHRvIHN0b3JlIHRlbXBvcmFyeSBmaWxlcyBpbiwgc2hvdWxkIGNvbnRhaW4gZGlyZWN0b3J5IGFuZCBYWFhYWFguIChOVUxMID09IGRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3RyZWFtaWREZW11eDo6YWN0aXZlLXBhZDwvTkFNRT4KLTxUWVBFPkdzdFBhZCo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkFjdGl2ZSBwYWQ8L05JQ0s+Ci08QkxVUkI+VGhlIGN1cnJlbnRseSBhY3RpdmUgc3JjIHBhZC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RDb25jYXQ6OmFjdGl2ZS1wYWQ8L05BTUU+Ci08VFlQRT5Hc3RQYWQqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5BY3RpdmUgcGFkPC9OSUNLPgotPEJMVVJCPkN1cnJlbnRseSBhY3RpdmUgc3JjIHBhZC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RDb25jYXQ6OmFkanVzdC1iYXNlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5BZGp1c3Qgc2VnbWVudCBiYXNlPC9OSUNLPgotPEJMVVJCPkFkanVzdCB0aGUgYmFzZSB2YWx1ZSBvZiBzZWdtZW50cyB0byBlbnN1cmUgdGhleSBhcmUgYWRqYWNlbnQuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZ1bm5lbDo6Zm9yd2FyZC1zdGlja3ktZXZlbnRzPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Gb3J3YXJkIHN0aWNreSBldmVudHM8L05JQ0s+Ci08QkxVUkI+Rm9yd2FyZCBzdGlja3kgZXZlbnRzIG9uIHN0cmVhbSBjaGFuZ2VzLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHkgYi9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaGllcmFyY2h5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzU2Yjk2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5oaWVyYXJjaHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1HT2JqZWN0Ci0gIEdJbml0aWFsbHlVbm93bmVkCi0gICAgR3N0T2JqZWN0Ci0gICAgICBHc3RBbGxvY2F0b3IKLSAgICAgICAgR3N0QWxsb2NhdG9yU3lzbWVtCi0gICAgICBHc3RCdXMKLSAgICAgIEdzdENsb2NrCi0gICAgICBHc3RDb250cm9sQmluZGluZwotICAgICAgR3N0Q29udHJvbFNvdXJjZQotICAgICAgR3N0RWxlbWVudAotICAgICAgICBHc3RCYXNlU2luawotICAgICAgICAgIEdzdEZha2VTaW5rCi0gICAgICAgICAgR3N0RmRTaW5rCi0gICAgICAgICAgR3N0RmlsZVNpbmsKLSAgICAgICAgR3N0QmFzZVNyYwotICAgICAgICAgIEdzdEZha2VTcmMKLSAgICAgICAgICBHc3RGaWxlU3JjCi0gICAgICAgICAgR3N0UHVzaFNyYwotICAgICAgICAgICAgR3N0RmRTcmMKLSAgICAgICAgR3N0QmFzZVRyYW5zZm9ybQotICAgICAgICAgIEdzdENhcHNGaWx0ZXIKLSAgICAgICAgICBHc3RJZGVudGl0eQotICAgICAgICBHc3RCaW4KLSAgICAgICAgICBHc3RQaXBlbGluZQotICAgICAgICBHc3RDb25jYXQKLSAgICAgICAgR3N0RG93bmxvYWRCdWZmZXIKLSAgICAgICAgR3N0RnVubmVsCi0gICAgICAgIEdzdElucHV0U2VsZWN0b3IKLSAgICAgICAgR3N0TXVsdGlRdWV1ZQotICAgICAgICBHc3RPdXRwdXRTZWxlY3RvcgotICAgICAgICBHc3RRdWV1ZQotICAgICAgICBHc3RRdWV1ZTIKLSAgICAgICAgR3N0U3RyZWFtaWREZW11eAotICAgICAgICBHc3RUZWUKLSAgICAgICAgR3N0VHlwZUZpbmRFbGVtZW50Ci0gICAgICAgIEdzdFZhbHZlCi0gICAgICBHc3RQYWQKLSAgICAgIEdzdFBhZFRlbXBsYXRlCi0gICAgICBHc3RQbHVnaW4KLSAgICAgIEdzdFBsdWdpbkZlYXR1cmUKLSAgICAgICAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ci0gICAgICAgIEdzdEVsZW1lbnRGYWN0b3J5Ci0gICAgICAgIEdzdFRyYWNlckZhY3RvcnkKLSAgICAgICAgR3N0VHlwZUZpbmRGYWN0b3J5Ci0gICAgICBHc3RSZWdpc3RyeQotICAgICAgR3N0VGFzawotICAgICAgR3N0VGFza1Bvb2wKLSAgICAgIEdzdFRyYWNlcgotICAgICAgICBHc3RMYXRlbmN5VHJhY2VyCi0gICAgICAgIEdzdExlYWtzVHJhY2VyCi0gICAgICAgIEdzdExvZ1RyYWNlcgotICAgICAgICBHc3RSVXNhZ2VUcmFjZXIKLSAgICAgICAgR3N0U3RhdHNUcmFjZXIKLUdJbnRlcmZhY2UKLSAgR1R5cGVQbHVnaW4KLSAgR3N0Q2hpbGRQcm94eQotICBHc3RVUklIYW5kbGVyCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuaW50ZXJmYWNlcyBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5pbnRlcmZhY2VzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzgwNWY1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy5pbnRlcmZhY2VzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1Hc3RCaW4gR3N0Q2hpbGRQcm94eQotR3N0RmRTaW5rIEdzdFVSSUhhbmRsZXIKLUdzdEZkU3JjIEdzdFVSSUhhbmRsZXIKLUdzdEZpbGVTaW5rIEdzdFVSSUhhbmRsZXIKLUdzdEZpbGVTcmMgR3N0VVJJSGFuZGxlcgotR3N0UGlwZWxpbmUgR3N0Q2hpbGRQcm94eQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnByZXJlcXVpc2l0ZXMgYi9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMucHJlcmVxdWlzaXRlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThkNTE4YS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMucHJlcmVxdWlzaXRlcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUdzdENoaWxkUHJveHkgR09iamVjdApkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2dzdHJlYW1lci1wbHVnaW5zLnNpZ25hbHMgYi9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuc2lnbmFscwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjZjA2Ni4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMuc2lnbmFscworKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTxTSUdOQUw+Ci08TkFNRT5Hc3RUeXBlRmluZEVsZW1lbnQ6OmhhdmUtdHlwZTwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RUeXBlRmluZEVsZW1lbnQgKmdzdHR5cGVmaW5kZWxlbWVudAotZ3VpbnQgIGFyZzEKLUdzdENhcHMgKmFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UXVldWU6Om92ZXJydW48L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmY8L0ZMQUdTPgotR3N0UXVldWUgKmdzdHF1ZXVlCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFF1ZXVlOjpwdXNoaW5nPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5mPC9GTEFHUz4KLUdzdFF1ZXVlICpnc3RxdWV1ZQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RRdWV1ZTo6cnVubmluZzwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+ZjwvRkxBR1M+Ci1Hc3RRdWV1ZSAqZ3N0cXVldWUKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UXVldWU6OnVuZGVycnVuPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5mPC9GTEFHUz4KLUdzdFF1ZXVlICpnc3RxdWV1ZQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RNdWx0aVF1ZXVlOjpvdmVycnVuPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5mPC9GTEFHUz4KLUdzdE11bHRpUXVldWUgKmdzdG11bHRpcXVldWUKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0TXVsdGlRdWV1ZTo6dW5kZXJydW48L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmY8L0ZMQUdTPgotR3N0TXVsdGlRdWV1ZSAqZ3N0bXVsdGlxdWV1ZQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RJZGVudGl0eTo6aGFuZG9mZjwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RJZGVudGl0eSAqZ3N0aWRlbnRpdHkKLUdzdEJ1ZmZlciAqYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RGYWtlU3JjOjpoYW5kb2ZmPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdEZha2VTcmMgKmdzdGZha2VzcmMKLUdzdEJ1ZmZlciAqYXJnMQotR3N0UGFkICphcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdEZha2VTaW5rOjpoYW5kb2ZmPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdEZha2VTaW5rICpnc3RmYWtlc2luawotR3N0QnVmZmVyICphcmcxCi1Hc3RQYWQgKmFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0RmFrZVNpbms6OnByZXJvbGwtaGFuZG9mZjwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RGYWtlU2luayAqZ3N0ZmFrZXNpbmsKLUdzdEJ1ZmZlciAqYXJnMQotR3N0UGFkICphcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFF1ZXVlMjo6b3ZlcnJ1bjwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+ZjwvRkxBR1M+Ci1Hc3RRdWV1ZTIgKmdzdHF1ZXVlMgotPC9TSUdOQUw+Ci0KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy50eXBlcyBiL2RvY3MvcGx1Z2lucy9nc3RyZWFtZXItcGx1Z2lucy50eXBlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY0OTUwZS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvZ3N0cmVhbWVyLXBsdWdpbnMudHlwZXMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODFjMWQ3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2NoMDEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5nc3RyZWFtZXIgRWxlbWVudHM6IEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sIiB0aXRsZT0iY2Fwc2ZpbHRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJ1cC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS4yIj48L2E+Z3N0cmVhbWVyIEVsZW1lbnRzPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsIGNsYXNzPSJ0b2MiPgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCI+Y2Fwc2ZpbHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY29uY2F0Lmh0bWwiPmNvbmNhdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCI+ZG93bmxvYWRidWZmZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwiPmZha2VzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwiPmZha2VzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sIj5mZHNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwiPmZkc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIj5maWxlc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIj5maWxlc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCI+ZnVubmVsPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sIj5pZGVudGl0eTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCI+aW5wdXQtc2VsZWN0b3I8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCI+bXVsdGlxdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwiPm91dHB1dC1zZWxlY3RvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwiPnF1ZXVlMjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCI+cXVldWU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguaHRtbCI+c3RyZWFtaWRkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwiPnRlZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCI+dHlwZWZpbmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwiPnZhbHZlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9jaDAyLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9jaDAyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ODNmN2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmdzdHJlYW1lciBQbHVnaW5zOiBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCIgdGl0bGU9InZhbHZlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sIiB0aXRsZT0iY29yZWVsZW1lbnRzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpZC0xLjMiPjwvYT5nc3RyZWFtZXIgUGx1Z2luczwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ0b2MiPjxkbCBjbGFzcz0idG9jIj48ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sIj5jb3JlZWxlbWVudHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdTdHJlYW1lciBjb3JlIGVsZW1lbnRzPC9zcGFuPgotPC9kdD48L2RsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtMS4wLmRldmhlbHAyIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtMS4wLmRldmhlbHAyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzkwNDAzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLTEuMC5kZXZoZWxwMgorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KLTxib29rIHhtbG5zPSJodHRwOi8vd3d3LmRldmhlbHAubmV0L2Jvb2siIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiIGxpbms9ImluZGV4Lmh0bWwiIGF1dGhvcj0iIiBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy0xLjAiIHZlcnNpb249IjIiIGxhbmd1YWdlPSJjIiBvbmxpbmU9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci1wbHVnaW5zL2h0bWwvIj4KLSAgPGNoYXB0ZXJzPgotICAgIDxzdWIgbmFtZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIiBsaW5rPSJjaDAxLmh0bWwiPgotICAgICAgPHN1YiBuYW1lPSJjYXBzZmlsdGVyIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iY29uY2F0IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJkb3dubG9hZGJ1ZmZlciIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJmYWtlc2luayIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJmYWtlc3JjIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZmRzaW5rIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJmZHNyYyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJmaWxlc2luayIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJmaWxlc3JjIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZnVubmVsIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJpZGVudGl0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJpbnB1dC1zZWxlY3RvciIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJtdWx0aXF1ZXVlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ib3V0cHV0LXNlbGVjdG9yIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJxdWV1ZTIiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InF1ZXVlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InN0cmVhbWlkZGVtdXgiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ0ZWUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InR5cGVmaW5kIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InZhbHZlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sIi8+Ci0gICAgPC9zdWI+Ci0gICAgPHN1YiBuYW1lPSJnc3RyZWFtZXIgUGx1Z2lucyIgbGluaz0iY2gwMi5odG1sIj4KLSAgICAgIDxzdWIgbmFtZT0iY29yZWVsZW1lbnRzIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwiLz4KLSAgICA8L3N1Yj4KLSAgPC9jaGFwdGVycz4KLSAgPGZ1bmN0aW9ucz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDYXBzRmlsdGVyIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwjR3N0Q2Fwc0ZpbHRlci1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2Fwc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXItLWNhcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNhcHMtY2hhbmdlLW1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNHc3RDYXBzRmlsdGVyLS1jYXBzLWNoYW5nZS1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Q29uY2F0IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQuaHRtbCNHc3RDb25jYXQtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhY3RpdmUtcGFk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQuaHRtbCNHc3RDb25jYXQtLWFjdGl2ZS1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFkanVzdC1iYXNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQuaHRtbCNHc3RDb25jYXQtLWFkanVzdC1iYXNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RG93bmxvYWRCdWZmZXIiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwjR3N0RG93bmxvYWRCdWZmZXItc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxoaWdoLXBlcmNlbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwjR3N0RG93bmxvYWRCdWZmZXItLWhpZ2gtcGVyY2VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG93LXBlcmNlbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwjR3N0RG93bmxvYWRCdWZmZXItLWxvdy1wZXJjZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtc2l6ZS1ieXRlc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCNHc3REb3dubG9hZEJ1ZmZlci0tbWF4LXNpemUtYnl0ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1zaXplLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwjR3N0RG93bmxvYWRCdWZmZXItLW1heC1zaXplLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRlbXAtbG9jYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwjR3N0RG93bmxvYWRCdWZmZXItLXRlbXAtbG9jYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRlbXAtcmVtb3Zl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5odG1sI0dzdERvd25sb2FkQnVmZmVyLS10ZW1wLXJlbW92ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGVtcC10ZW1wbGF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCNHc3REb3dubG9hZEJ1ZmZlci0tdGVtcC10ZW1wbGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZha2VTaW5rIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RmFrZVNpbmtTdGF0ZUVycm9yIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rU3RhdGVFcnJvciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2FuLWFjdGl2YXRlLXB1bGzigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLWNhbi1hY3RpdmF0ZS1wdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjYW4tYWN0aXZhdGUtcHVzaOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tY2FuLWFjdGl2YXRlLXB1c2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGR1bXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLWR1bXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxhc3QtbWVzc2FnZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tbGFzdC1tZXNzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxudW0tYnVmZmVyc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tbnVtLWJ1ZmZlcnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNpZ25hbC1oYW5kb2Zmc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tc2lnbmFsLWhhbmRvZmZzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzaWxlbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLXNpbGVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3RhdGUtZXJyb3LigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLXN0YXRlLWVycm9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcaGFuZG9mZuKAnSBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstaGFuZG9mZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHByZXJvbGwtaGFuZG9mZuKAnSBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstcHJlcm9sbC1oYW5kb2ZmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RmFrZVNyYyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RGYWtlU3JjRGF0YVR5cGUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjRGF0YVR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEZha2VTcmNGaWxsVHlwZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmNGaWxsVHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RmFrZVNyY091dHB1dFR5cGUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjT3V0cHV0VHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RmFrZVNyY1NpemVUeXBlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyY1NpemVUeXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjYW4tYWN0aXZhdGUtcHVsbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWNhbi1hY3RpdmF0ZS1wdWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjYW4tYWN0aXZhdGUtcHVzaOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWNhbi1hY3RpdmF0ZS1wdXNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkYXRh4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZGF0YSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGF0YXJhdGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1kYXRhcmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZHVtcOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWR1bXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZpbGx0eXBl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZmlsbHR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZvcm1hdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWZvcm1hdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaXMtbGl2ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWlzLWxpdmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxhc3QtbWVzc2FnZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWxhc3QtbWVzc2FnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGFyZW50c2l6ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXBhcmVudHNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBhdHRlcm7igJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1wYXR0ZXJuIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzaWduYWwtaGFuZG9mZnPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1zaWduYWwtaGFuZG9mZnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNpbGVudOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpbGVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2l6ZW1heOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpemVtYXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNpemVtaW7igJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1zaXplbWluIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzaXpldHlwZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpemV0eXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzeW5j4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc3luYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGhhbmRvZmbigJ0gc2lnbmFsIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy1oYW5kb2ZmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RmRTaW5rIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaHRtbCNHc3RGZFNpbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwjR3N0RmRTaW5rLS1mZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZkU3JjIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI0dzdEZkU3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMtLWZkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aW1lb3V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI0dzdEZkU3JjLS10aW1lb3V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RmlsZVNpbmsiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RGaWxlU2lua0J1ZmZlck1vZGUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmtCdWZmZXJNb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhcHBlbmTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWFwcGVuZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYnVmZmVyLW1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWJ1ZmZlci1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidWZmZXItc2l6ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luay0tYnVmZmVyLXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rLS1sb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZpbGVTcmMiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjLS1sb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZ1bm5lbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwjR3N0RnVubmVsLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZm9yd2FyZC1zdGlja3ktZXZlbnRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCNHc3RGdW5uZWwtLWZvcndhcmQtc3RpY2t5LWV2ZW50cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdElkZW50aXR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2hlY2staW1wZXJmZWN0LW9mZnNldOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tY2hlY2staW1wZXJmZWN0LW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGF0YXJhdGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLWRhdGFyYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkcm9wLXByb2JhYmlsaXR54oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1kcm9wLXByb2JhYmlsaXR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkdW1w4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1kdW1wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxlcnJvci1hZnRlcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZXJyb3ItYWZ0ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxhc3QtbWVzc2FnZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tbGFzdC1tZXNzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzaWduYWwtaGFuZG9mZnPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLXNpZ25hbC1oYW5kb2ZmcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2lsZW504oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zaWxlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNpbmdsZS1zZWdtZW504oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1zaW5nbGUtc2VnbWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2xlZXAtdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2xlZXAtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3luY+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc3luYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZHJvcC1idWZmZXItZmxhZ3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktLWRyb3AtYnVmZmVyLWZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcaGFuZG9mZuKAnSBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHktaGFuZG9mZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdElucHV0U2VsZWN0b3IiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdElucHV0U2VsZWN0b3JTeW5jTW9kZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yU3luY01vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFjdGl2ZS1wYWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci0tYWN0aXZlLXBhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2FjaGUtYnVmZmVyc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLS1jYWNoZS1idWZmZXJzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxuLXBhZHPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci0tbi1wYWRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzeW5jLW1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci0tc3luYy1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzeW5jLXN0cmVhbXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci0tc3luYy1zdHJlYW1zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TXVsdGlRdWV1ZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxleHRyYS1zaXplLWJ1ZmZlcnPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLWJ1ZmZlcnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGV4dHJhLXNpemUtYnl0ZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLWJ5dGVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxleHRyYS1zaXplLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGhpZ2gtcGVyY2VudOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWhpZ2gtcGVyY2VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG93LXBlcmNlbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1sb3ctcGVyY2VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXNpemUtYnVmZmVyc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLW1heC1zaXplLWJ1ZmZlcnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1zaXplLWJ5dGVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbWF4LXNpemUtYnl0ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1zaXplLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzeW5jLWJ5LXJ1bm5pbmctdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLXN5bmMtYnktcnVubmluZy10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2UtYnVmZmVyaW5n4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tdXNlLWJ1ZmZlcmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdW5saW5rZWQtY2FjaGUtdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLXVubGlua2VkLWNhY2hlLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZS1pbnRlcmxlYXZl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tdXNlLWludGVybGVhdmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGhpZ2gtd2F0ZXJtYXJr4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0taGlnaC13YXRlcm1hcmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvdy13YXRlcm1hcmvigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1sb3ctd2F0ZXJtYXJrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcb3ZlcnJ1buKAnSBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLW92ZXJydW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJx1bmRlcnJ1buKAnSBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLXVuZGVycnVuIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0T3V0cHV0U2VsZWN0b3IiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yUGFkTmVnb3RpYXRpb25Nb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhY3RpdmUtcGFk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHc3RPdXRwdXRTZWxlY3Rvci0tYWN0aXZlLXBhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGFkLW5lZ290aWF0aW9uLW1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yLS1wYWQtbmVnb3RpYXRpb24tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZW5kLWxhdGVzdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3ItLXJlc2VuZC1sYXRlc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RRdWV1ZTIiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGN1cnJlbnQtbGV2ZWwtYnVmZmVyc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1jdXJyZW50LWxldmVsLWJ1ZmZlcnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGN1cnJlbnQtbGV2ZWwtYnl0ZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1ieXRlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY3VycmVudC1sZXZlbC10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaGlnaC1wZXJjZW504oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWhpZ2gtcGVyY2VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG93LXBlcmNlbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbG93LXBlcmNlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1zaXplLWJ1ZmZlcnPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtYnVmZmVycyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXNpemUtYnl0ZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtYnl0ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1zaXplLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmluZy1idWZmZXItbWF4LXNpemXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tcmluZy1idWZmZXItbWF4LXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRlbXAtbG9jYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdGVtcC1sb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGVtcC1yZW1vdmXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdGVtcC1yZW1vdmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRlbXAtdGVtcGxhdGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdGVtcC10ZW1wbGF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXNlLWJ1ZmZlcmluZ+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS11c2UtYnVmZmVyaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2UtcmF0ZS1lc3RpbWF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS11c2UtcmF0ZS1lc3RpbWF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYXZnLWluLXJhdGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tYXZnLWluLXJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZS10YWdzLWJpdHJhdGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdXNlLXRhZ3MtYml0cmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaGlnaC13YXRlcm1hcmvigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0taGlnaC13YXRlcm1hcmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvdy13YXRlcm1hcmvigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbG93LXdhdGVybWFyayIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG92ZXJydW7igJ0gc2lnbmFsIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItb3ZlcnJ1biIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFF1ZXVlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0UXVldWVMZWFreSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZUxlYWt5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjdXJyZW50LWxldmVsLWJ1ZmZlcnPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWN1cnJlbnQtbGV2ZWwtYnVmZmVycyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY3VycmVudC1sZXZlbC1ieXRlc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1ieXRlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY3VycmVudC1sZXZlbC10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1jdXJyZW50LWxldmVsLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZsdXNoLW9uLWVvc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tZmx1c2gtb24tZW9zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxsZWFreeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbGVha3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1zaXplLWJ1ZmZlcnPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1heC1zaXplLWJ1ZmZlcnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1zaXplLWJ5dGVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXNpemUtdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWF4LXNpemUtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWluLXRocmVzaG9sZC1idWZmZXJz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1taW4tdGhyZXNob2xkLWJ1ZmZlcnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1pbi10aHJlc2hvbGQtYnl0ZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1pbi10aHJlc2hvbGQtYnl0ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1pbi10aHJlc2hvbGQtdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzaWxlbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLXNpbGVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG92ZXJydW7igJ0gc2lnbmFsIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLW92ZXJydW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxwdXNoaW5n4oCdIHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS1wdXNoaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccnVubmluZ+KAnSBzaWduYWwiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtcnVubmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHVuZGVycnVu4oCdIHNpZ25hbCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS11bmRlcnJ1biIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFN0cmVhbWlkRGVtdXgiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguaHRtbCNHc3RTdHJlYW1pZERlbXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYWN0aXZlLXBhZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtc3RyZWFtaWRkZW11eC5odG1sI0dzdFN0cmVhbWlkRGVtdXgtLWFjdGl2ZS1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUZWUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFRlZVB1bGxNb2RlIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWVQdWxsTW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYWxsb2MtcGFk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLWFsbG9jLXBhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaGFzLWNoYWlu4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLWhhcy1jaGFpbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGFzdC1tZXNzYWdl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLWxhc3QtbWVzc2FnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbnVtLXNyYy1wYWRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLW51bS1zcmMtcGFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHVsbC1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLXB1bGwtbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2lsZW504oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLXNpbGVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYWxsb3ctbm90LWxpbmtlZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1hbGxvdy1ub3QtbGlua2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VHlwZUZpbmRFbGVtZW50IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNhcHPigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50LS1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmb3JjZS1jYXBz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC0tZm9yY2UtY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWluaW11beKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtLW1pbmltdW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxoYXZlLXR5cGXigJ0gc2lnbmFsIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC1oYXZlLXR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RWYWx2ZSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNHc3RWYWx2ZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRyb3DigJ0gcHJvcGVydHkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwjR3N0VmFsdmUtLWRyb3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NBUFNfRklMVEVSX0NBUFNfQ0hBTkdFX01PREVfSU1NRURJQVRFIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwjR1NULUNBUFMtRklMVEVSLUNBUFMtQ0hBTkdFLU1PREUtSU1NRURJQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0NBUFNfRklMVEVSX0NBUFNfQ0hBTkdFX01PREVfREVMQVlFRCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dTVC1DQVBTLUZJTFRFUi1DQVBTLUNIQU5HRS1NT0RFLURFTEFZRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NJTktfU1RBVEVfRVJST1JfTk9ORSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItTk9ORTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU0lOS19TVEFURV9FUlJPUl9OVUxMX1JFQURZIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0ZBS0UtU0lOSy1TVEFURS1FUlJPUi1OVUxMLVJFQURZOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1JFQURZX1BBVVNFRCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItUkVBRFktUEFVU0VEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9QTEFZSU5HIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0ZBS0UtU0lOSy1TVEFURS1FUlJPUi1QQVVTRUQtUExBWUlORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU0lOS19TVEFURV9FUlJPUl9QTEFZSU5HX1BBVVNFRCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItUExBWUlORy1QQVVTRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1JFQURZIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0ZBS0UtU0lOSy1TVEFURS1FUlJPUi1QQVVTRUQtUkVBRFk6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfTlVMTCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNGQUtFLVNJTkstU1RBVEUtRVJST1ItUkVBRFktTlVMTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0RBVEFfQUxMT0NBVEUiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1EQVRBLUFMTE9DQVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TUkNfREFUQV9TVUJCVUZGRVIiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1EQVRBLVNVQkJVRkZFUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkciIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1GSUxMVFlQRS1OT1RISU5HOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TUkNfRklMTFRZUEVfWkVSTyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJTExUWVBFLVpFUk86Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19GSUxMVFlQRV9SQU5ET00iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1GSUxMVFlQRS1SQU5ET006Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19GSUxMVFlQRV9QQVRURVJOIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtRklMTFRZUEUtUEFUVEVSTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk5fQ09OVCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJTExUWVBFLVBBVFRFUk4tQ09OVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUZJUlNULUxBU1QtTE9PUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX0xBU1RfRklSU1RfTE9PUCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLUxBU1QtRklSU1QtTE9PUDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX1BJTkdfUE9ORyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLVBJTkctUE9ORzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX09SREVSRURfUkFORE9NIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtT1JERVJFRC1SQU5ET006Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19SQU5ET00iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1SQU5ET006Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19QQVRURVJOX0xPT1AiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1QQVRURVJOLUxPT1A6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19QSU5HX1BPTkdfUEFUVEVSTiIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0ZBS0UtU1JDLVBJTkctUE9ORy1QQVRURVJOOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TUkNfR0VUX0FMV0FZU19TVUNFRURTIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtR0VULUFMV0FZUy1TVUNFRURTOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iRkFLRV9TUkNfU0laRVRZUEVfRU1QVFkiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1TSVpFVFlQRS1FTVBUWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkZBS0VfU1JDX1NJWkVUWVBFX0ZJWEVEIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjRkFLRS1TUkMtU0laRVRZUEUtRklYRUQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJGQUtFX1NSQ19TSVpFVFlQRV9SQU5ET00iIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNGQUtFLVNSQy1TSVpFVFlQRS1SQU5ET006Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0RFRkFVTFQiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR1NULUZJTEUtU0lOSy1CVUZGRVItTU9ERS1ERUZBVUxUOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0ZJTEVfU0lOS19CVUZGRVJfTU9ERV9GVUxMIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dTVC1GSUxFLVNJTkstQlVGRkVSLU1PREUtRlVMTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9GSUxFX1NJTktfQlVGRkVSX01PREVfTElORSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHU1QtRklMRS1TSU5LLUJVRkZFUi1NT0RFLUxJTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX1VOQlVGRkVSRUQiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR1NULUZJTEUtU0lOSy1CVUZGRVItTU9ERS1VTkJVRkZFUkVEOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOUFVUX1NFTEVDVE9SX1NZTkNfTU9ERV9BQ1RJVkVfU0VHTUVOVCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHU1QtSU5QVVQtU0VMRUNUT1ItU1lOQy1NT0RFLUFDVElWRS1TRUdNRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0lOUFVUX1NFTEVDVE9SX1NZTkNfTU9ERV9DTE9DSyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHU1QtSU5QVVQtU0VMRUNUT1ItU1lOQy1NT0RFLUNMT0NLOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9OT05FIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHU1QtT1VUUFVULVNFTEVDVE9SLVBBRC1ORUdPVElBVElPTi1NT0RFLU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FMTCIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR1NULU9VVFBVVC1TRUxFQ1RPUi1QQUQtTkVHT1RJQVRJT04tTU9ERS1BTEw6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FDVElWRSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR1NULU9VVFBVVC1TRUxFQ1RPUi1QQUQtTkVHT1RJQVRJT04tTU9ERS1BQ1RJVkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfUVVFVUVfTk9fTEVBSyIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHU1QtUVVFVUUtTk8tTEVBSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9RVUVVRV9MRUFLX1VQU1RSRUFNIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dTVC1RVUVVRS1MRUFLLVVQU1RSRUFNOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1FVRVVFX0xFQUtfRE9XTlNUUkVBTSIgbGluaz0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHU1QtUVVFVUUtTEVBSy1ET1dOU1RSRUFNOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RFRV9QVUxMX01PREVfTkVWRVIiIGxpbms9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dTVC1URUUtUFVMTC1NT0RFLU5FVkVSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1RFRV9QVUxMX01PREVfU0lOR0xFIiBsaW5rPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHU1QtVEVFLVBVTEwtTU9ERS1TSU5HTEU6Q0FQUyIvPgotICA8L2Z1bmN0aW9ucz4KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU3YTIzZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmNhcHNmaWx0ZXI6IEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sIiB0aXRsZT0iY29uY2F0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLnRvcF9vZl9wYWdlIj48L2E+Y2Fwc2ZpbHRlcjwvc3Bhbj48L2gyPgotPHA+Y2Fwc2ZpbHRlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwjR3N0Q2Fwc0ZpbHRlci0tY2FwcyIgdGl0bGU9IlRoZSDigJxjYXBz4oCdIHByb3BlcnR5Ij5jYXBzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNHc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGUiIHRpdGxlPSJlbnVtIEdzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNHc3RDYXBzRmlsdGVyLS1jYXBzLWNoYW5nZS1tb2RlIiB0aXRsZT0iVGhlIOKAnGNhcHMtY2hhbmdlLW1vZGXigJ0gcHJvcGVydHkiPmNhcHMtY2hhbmdlLW1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdENhcHNGaWx0ZXIiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdENhcHNGaWx0ZXIiPkdzdENhcHNGaWx0ZXI8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZSIgdGl0bGU9ImVudW0gR3N0Q2Fwc0ZpbHRlckNhcHNDaGFuZ2VNb2RlIj5Hc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGU8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0Q2Fwc0ZpbHRlcgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIGVsZW1lbnQgZG9lcyBub3QgbW9kaWZ5IGRhdGEgYXMgc3VjaCwgYnV0IGNhbiBlbmZvcmNlIGxpbWl0YXRpb25zIG9uIHRoZQotZGF0YSBmb3JtYXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gY2Fwc2ZpbHRlciBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dmlkZW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj54PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cmF3PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Zm9ybWF0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+R1JBWTggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBMaW1pdHMgYWNjZXB0YWJsZSB2aWRlbyBmcm9tIHZpZGVvdGVzdHNyYyB0byBiZSBncmF5c2NhbGUuIEVxdWl2YWxlbnQgdG8KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPmZvcm1hdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPkdSQVk4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG92aWRlb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gd2hpY2ggaXMgYSBzaG9ydCBub3RhdGlvbiBmb3IgdGhlIGNhcHNmaWx0ZXIgZWxlbWVudC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkRhdmlkIFNjaGxlZWYgJmx0O2RzQHNjaGxlZWYub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HZW5lcmljPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2Fwc0ZpbHRlci1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdENhcHNGaWx0ZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDYXBzRmlsdGVyOzwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sI0dzdENhcHNGaWx0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzRmlsdGVyPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGUiPjwvYT48aDM+ZW51bSBHc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGU8L2gzPgotPHA+RmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91cjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DQVBTLUZJTFRFUi1DQVBTLUNIQU5HRS1NT0RFLUlNTUVESUFURTpDQVBTIj48L2E+R1NUX0NBUFNfRklMVEVSX0NBUFNfQ0hBTkdFX01PREVfSU1NRURJQVRFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk9ubHkgYWNjZXB0IHRoZSBjdXJyZW50IGZpbHRlciBjYXBzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1DQVBTLUZJTFRFUi1DQVBTLUNIQU5HRS1NT0RFLURFTEFZRUQ6Q0FQUyI+PC9hPkdTVF9DQVBTX0ZJTFRFUl9DQVBTX0NIQU5HRV9NT0RFX0RFTEFZRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+VGVtcG9yYXJpbHkgYWNjZXB0IHByZXZpb3VzIGZpbHRlciBjYXBzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENhcHNGaWx0ZXItLWNhcHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjYXBz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjYXBz4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENhcHNGaWx0ZXItLWNhcHMtY2hhbmdlLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjYXBzLWNoYW5nZS1tb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjYXBzLWNoYW5nZS1tb2Rl4oCdICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCNHc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGUiIHRpdGxlPSJlbnVtIEdzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5GaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBPbmx5IGFjY2VwdCB0aGUgY3VycmVudCBmaWx0ZXIgY2FwczwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1jb25jYXQuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWE4MTJhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5jb25jYXQ6IEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNhcHNmaWx0ZXIuaHRtbCIgdGl0bGU9ImNhcHNmaWx0ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5odG1sIiB0aXRsZT0iZG93bmxvYWRidWZmZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtY29uY2F0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtY29uY2F0LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQudG9wX29mX3BhZ2UiPjwvYT5jb25jYXQ8L3NwYW4+PC9oMj4KLTxwPmNvbmNhdDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sI0dzdENvbmNhdC0tYWN0aXZlLXBhZCIgdGl0bGU9IlRoZSDigJxhY3RpdmUtcGFk4oCdIHByb3BlcnR5Ij5hY3RpdmUtcGFkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sI0dzdENvbmNhdC0tYWRqdXN0LWJhc2UiIHRpdGxlPSJUaGUg4oCcYWRqdXN0LWJhc2XigJ0gcHJvcGVydHkiPmFkanVzdC1iYXNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RDb25jYXQiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY29uY2F0Lmh0bWwjR3N0Q29uY2F0LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RDb25jYXQiPkdzdENvbmNhdDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtY29uY2F0Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdENvbmNhdAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5Db25jYXRlbmF0ZXMgc3RyZWFtcyB0b2dldGhlciB0byBvbmUgY29udGlub3VzIHN0cmVhbS48L3A+Ci08cD5BbGwgc3RyZWFtcyBidXQgdGhlIGN1cnJlbnQgb25lIGFyZSBibG9ja2VkIHVudGlsIHRoZSBjdXJyZW50IG9uZQotZmluaXNoZWQgd2l0aCA8YSBocmVmPSIuLi9odG1sL0dzdEV2ZW50Lmh0bWwjR1NULUVWRU5ULUVPUzpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX0VWRU5UX0VPUzwvY29kZT48L2E+LiBUaGVuIHRoZSBuZXh0IHN0cmVhbSBpcyBlbmFibGVkLCB3aGlsZQota2VlcGluZyB0aGUgcnVubmluZyB0aW1lIGNvbnRpbm91cyBmb3IgPGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0Rm9ybWF0Lmh0bWwjR1NULUZPUk1BVC1USU1FOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5HU1RfRk9STUFUX1RJTUU8L2NvZGU+PC9hPiBzZWdtZW50cyBvcgota2VlcGluZyB0aGUgc2VnbWVudCBjb250aW5vdXMgZm9yIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdEZvcm1hdC5odG1sI0dTVC1GT1JNQVQtQllURVM6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GT1JNQVRfQllURVM8L2NvZGU+PC9hPiBzZWdtZW50cy48L3A+Ci08cD5TdHJlYW1zIGFyZSBzd2l0Y2hlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHNpbmtwYWRzIHdlcmUgcmVxdWVzdGVkLjwvcD4KLTxwPkJ5IGRlZmF1bHQsIHRoZSBzdHJlYW0gc2VnbWVudCdzIGJhc2UgdmFsdWVzIGFyZSBhZGp1c3RlZCB0byBlbnN1cmUKLXRoZSBzZWdtZW50IHRyYW5zaXRpb25zIGJldHdlZW4gc3RyZWFtcyBhcmUgY29udGludW91cy4gSW4gc29tZSBjYXNlcywKLWl0IG1heSBiZSBkZXNpcmFibGUgdG8gdHVybiBvZmYgdGhlc2UgYWRqdXN0bWVudHMgKGZvciBleGFtcGxlLCBiZWNhdXNlCi1hbm90aGVyIGRvd25zdHJlYW0gZWxlbWVudCBsaWtlIGEgc3RyZWFtc3luY2hyb25pemVyIGFkanVzdHMgdGhlIGJhc2UKLXZhbHVlcyBvbiBpdHMgb3duKS4gVGhlIGFkanVzdC1iYXNlIHByb3BlcnR5IGNhbiBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMuNy42Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGNvbmNhdCBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+YyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geHZpbWFnZXNpbmsgIHZpZGVvdGVzdHNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPiAgIHZpZGVvdGVzdHNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwPC9zcGFuPiBwYXR0ZXJuPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+YmFsbCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBQbGF5cyB0d28gdmlkZW8gc3RyZWFtcyBvbmUgYWZ0ZXIgYW5vdGhlci4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zLjcuNy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbkBjZW50cmljdWxhci5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMy43LjcuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbmtfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENvbmNhdC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdENvbmNhdDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdENvbmNhdDs8L3ByZT4KLTxwPlRoZSBwcml2YXRlIGNvbmNhdCBzdHJ1Y3R1cmU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtY29uY2F0LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDb25jYXQtLWFjdGl2ZS1wYWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxhY3RpdmUtcGFk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhY3RpdmUtcGFk4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkN1cnJlbnRseSBhY3RpdmUgc3JjIHBhZC48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q29uY2F0LS1hZGp1c3QtYmFzZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFkanVzdC1iYXNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhZGp1c3QtYmFzZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkFkanVzdCB0aGUgYmFzZSB2YWx1ZSBvZiBzZWdtZW50cyB0byBlbnN1cmUgdGhleSBhcmUgYWRqYWNlbnQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtY29uY2F0LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCNHc3RGdW5uZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGdW5uZWw8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MGRjZGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZG93bmxvYWRidWZmZXI6IEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sIiB0aXRsZT0iY29uY2F0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCIgdGl0bGU9ImZha2VzaW5rIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLnRvcF9vZl9wYWdlIj48L2E+ZG93bmxvYWRidWZmZXI8L3NwYW4+PC9oMj4KLTxwPmRvd25sb2FkYnVmZmVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwjR3N0RG93bmxvYWRCdWZmZXItLWhpZ2gtcGVyY2VudCIgdGl0bGU9IlRoZSDigJxoaWdoLXBlcmNlbnTigJ0gcHJvcGVydHkiPmhpZ2gtcGVyY2VudDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5odG1sI0dzdERvd25sb2FkQnVmZmVyLS1sb3ctcGVyY2VudCIgdGl0bGU9IlRoZSDigJxsb3ctcGVyY2VudOKAnSBwcm9wZXJ0eSI+bG93LXBlcmNlbnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5odG1sI0dzdERvd25sb2FkQnVmZmVyLS1tYXgtc2l6ZS1ieXRlcyIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS1ieXRlc+KAnSBwcm9wZXJ0eSI+bWF4LXNpemUtYnl0ZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCNHc3REb3dubG9hZEJ1ZmZlci0tbWF4LXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS10aW1l4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5odG1sI0dzdERvd25sb2FkQnVmZmVyLS10ZW1wLWxvY2F0aW9uIiB0aXRsZT0iVGhlIOKAnHRlbXAtbG9jYXRpb27igJ0gcHJvcGVydHkiPnRlbXAtbG9jYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCNHc3REb3dubG9hZEJ1ZmZlci0tdGVtcC1yZW1vdmUiIHRpdGxlPSJUaGUg4oCcdGVtcC1yZW1vdmXigJ0gcHJvcGVydHkiPnRlbXAtcmVtb3ZlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5odG1sI0dzdERvd25sb2FkQnVmZmVyLS10ZW1wLXRlbXBsYXRlIiB0aXRsZT0iVGhlIOKAnHRlbXAtdGVtcGxhdGXigJ0gcHJvcGVydHkiPnRlbXAtdGVtcGxhdGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdERvd25sb2FkQnVmZmVyIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIuaHRtbCNHc3REb3dubG9hZEJ1ZmZlci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RG93bmxvYWRCdWZmZXIiPkdzdERvd25sb2FkQnVmZmVyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3REb3dubG9hZEJ1ZmZlcgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSBkb3dubG9hZGJ1ZmZlciBlbGVtZW50IHByb3ZpZGVzIG9uLWRpc2sgYnVmZmVyaW5nIGFuZCBjYWNoaW5nIG9mLCB0eXBpY2FsbHksCi1hIG5ldHdvcmsgZmlsZS4gdGVtcC10ZW1wbGF0ZSBzaG91bGQgYmUgc2V0IHRvIGEgdmFsdWUgc3VjaCBhcwotL3RtcC9nc3RyZWFtZXItWFhYWFhYIGFuZCB0aGUgZWxlbWVudCB3aWxsIGFsbG9jYXRlIGEgcmFuZG9tIGZyZWUgZmlsZW5hbWUgYW5kCi1idWZmZXIgdGhlIGRhdGEgaW4gdGhlIGZpbGUuPC9wPgotPHA+V2l0aCBtYXgtc2l6ZS1ieXRlcyBhbmQgbWF4LXNpemUtdGltZSB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgYnVmZmVyaW5nIGxpbWl0cy4KLVRoZSBkb3dubG9hZGJ1ZmZlciBlbGVtZW50IHdpbGwgdHJ5IHRvIHJlYWQtYWhlYWQgdGhlc2UgYW1vdW50cyBvZiBkYXRhLiBXaGVuCi10aGUgYW1vdW50IG9mIHJlYWQtYWhlYWQgZGF0YSBkcm9wcyBiZWxvdyBsb3ctcGVyY2VudCBvZiB0aGUgY29uZmlndXJlZCBtYXgsCi10aGUgZWxlbWVudCB3aWxsIHN0YXJ0IGVtaXR0aW5nIEJVRkZFUklORyBtZXNzYWdlcyB1bnRpbCBoaWdoLXBlcmNlbnQgb2YgbWF4IGlzCi1yZWFjaGVkIGFnYWluLjwvcD4KLTxwPlRoZSBkb3dubG9hZGJ1ZmZlciBwcm92aWRlcyBwdXNoIGFuZCBwdWxsIGJhc2VkIHNjaGVkdWxpbmcgb24gaXRzIHNvdXJjZSBwYWQKLWFuZCB3aWxsIGVmZmljaWVudGx5IHNlZWsgaW4gdGhlIHVwc3RyZWFtIGVsZW1lbnQgd2hlbiBuZWVkZWQuPC9wPgotPHA+VGhlIHRlbXAtbG9jYXRpb24gcHJvcGVydHkgd2lsbCBiZSB1c2VkIHRvIG5vdGlmeSB0aGUgYXBwbGljYXRpb24gb2YgdGhlCi1hbGxvY2F0ZWQgZmlsZW5hbWUuPC9wPgotPHA+V2hlbiB0aGUgZG93bmxvYWRidWZmZXIgaGFzIGNvbXBsZXRlbHkgZG93bmxvYWRlZCB0aGUgbWVkaWEsIGl0IHdpbGwKLXBvc3QgYW4gYXBwbGljYXRpb24gbWVzc2FnZSBuYW1lZCAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+IkdzdENhY2hlRG93bmxvYWRDb21wbGV0ZSI8L2NvZGU+Ci13aXRoIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj48bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgR19UWVBFX1NUUklORwotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4ibG9jYXRpb24iPC9jb2RlPjoKLSAgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21wbGV0ZWx5IGRvd25sb2FkZWQgZmlsZS4KLSAgPC9wPjwvbGk+PC91bD48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNC43LjguMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HZW5lcmljPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQuNy44LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REb3dubG9hZEJ1ZmZlci1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdERvd25sb2FkQnVmZmVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RG93bmxvYWRCdWZmZXI7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZG93bmxvYWRidWZmZXIucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERvd25sb2FkQnVmZmVyLS1oaWdoLXBlcmNlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxoaWdoLXBlcmNlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGhpZ2gtcGVyY2VudOKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkhpZ2ggdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDk5PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REb3dubG9hZEJ1ZmZlci0tbG93LXBlcmNlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb3ctcGVyY2VudOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG93LXBlcmNlbnTigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TG93IHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REb3dubG9hZEJ1ZmZlci0tbWF4LXNpemUtYnl0ZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtc2l6ZS1ieXRlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtYnl0ZXPigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXguIGFtb3VudCBvZiBkYXRhIHRvIGJ1ZmZlciAoYnl0ZXMsIDA9ZGlzYWJsZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDIwOTcxNTI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERvd25sb2FkQnVmZmVyLS1tYXgtc2l6ZS10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXNpemUtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtdGltZeKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4LiBhbW91bnQgb2YgZGF0YSB0byBidWZmZXIgKGluIG5zLCAwPWRpc2FibGUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAyMDAwMDAwMDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REb3dubG9hZEJ1ZmZlci0tdGVtcC1sb2NhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRlbXAtbG9jYXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRlbXAtbG9jYXRpb27igJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+TG9jYXRpb24gdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzIGluIChPbmx5IHJlYWQgdGhpcyBwcm9wZXJ0eSwgdXNlIHRlbXAtdGVtcGxhdGUgdG8gY29uZmlndXJlIHRoZSBuYW1lIHRlbXBsYXRlKS48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERvd25sb2FkQnVmZmVyLS10ZW1wLXJlbW92ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRlbXAtcmVtb3Zl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0ZW1wLXJlbW92ZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gdGVtcC10ZW1wbGF0ZSBpcyBzZXQsIHJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgd2hlbiBnb2luZyB0byBSRUFEWS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RG93bmxvYWRCdWZmZXItLXRlbXAtdGVtcGxhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0ZW1wLXRlbXBsYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0ZW1wLXRlbXBsYXRl4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkZpbGUgdGVtcGxhdGUgdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzIGluLCBzaG91bGQgY29udGFpbiBkaXJlY3RvcnkgYW5kIFhYWFhYWC4gKE5VTEwgPT0gZGlzYWJsZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjllNGQ0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmZha2VzaW5rOiBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5odG1sIiB0aXRsZT0iZG93bmxvYWRidWZmZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwiIHRpdGxlPSJmYWtlc3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay50b3Bfb2ZfcGFnZSI+PC9hPmZha2VzaW5rPC9zcGFuPjwvaDI+Ci08cD5mYWtlc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLWNhbi1hY3RpdmF0ZS1wdWxsIiB0aXRsZT0iVGhlIOKAnGNhbi1hY3RpdmF0ZS1wdWxs4oCdIHByb3BlcnR5Ij5jYW4tYWN0aXZhdGUtcHVsbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLWNhbi1hY3RpdmF0ZS1wdXNoIiB0aXRsZT0iVGhlIOKAnGNhbi1hY3RpdmF0ZS1wdXNo4oCdIHByb3BlcnR5Ij5jYW4tYWN0aXZhdGUtcHVzaDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLWR1bXAiIHRpdGxlPSJUaGUg4oCcZHVtcOKAnSBwcm9wZXJ0eSI+ZHVtcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luay0tbGFzdC1tZXNzYWdlIiB0aXRsZT0iVGhlIOKAnGxhc3QtbWVzc2FnZeKAnSBwcm9wZXJ0eSI+bGFzdC1tZXNzYWdlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLS1udW0tYnVmZmVycyIgdGl0bGU9IlRoZSDigJxudW0tYnVmZmVyc+KAnSBwcm9wZXJ0eSI+bnVtLWJ1ZmZlcnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLS1zaWduYWwtaGFuZG9mZnMiIHRpdGxlPSJUaGUg4oCcc2lnbmFsLWhhbmRvZmZz4oCdIHByb3BlcnR5Ij5zaWduYWwtaGFuZG9mZnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLS1zaWxlbnQiIHRpdGxlPSJUaGUg4oCcc2lsZW504oCdIHByb3BlcnR5Ij5zaWxlbnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2lua1N0YXRlRXJyb3IiIHRpdGxlPSJlbnVtIEdzdEZha2VTaW5rU3RhdGVFcnJvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTaW5rU3RhdGVFcnJvcjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstLXN0YXRlLWVycm9yIiB0aXRsZT0iVGhlIOKAnHN0YXRlLWVycm9y4oCdIHByb3BlcnR5Ij5zdGF0ZS1lcnJvcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLWhhbmRvZmYiIHRpdGxlPSJUaGUg4oCcaGFuZG9mZuKAnSBzaWduYWwiPmhhbmRvZmY8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rLXByZXJvbGwtaGFuZG9mZiIgdGl0bGU9IlRoZSDigJxwcmVyb2xsLWhhbmRvZmbigJ0gc2lnbmFsIj5wcmVyb2xsLWhhbmRvZmY8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0RmFrZVNpbmsiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEZha2VTaW5rIj5Hc3RGYWtlU2luazwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rU3RhdGVFcnJvciIgdGl0bGU9ImVudW0gR3N0RmFrZVNpbmtTdGF0ZUVycm9yIj5Hc3RGYWtlU2lua1N0YXRlRXJyb3I8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLXN0cnVjdCI+R3N0QmFzZVNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEZha2VTaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+RHVtbXkgc2luayB0aGF0IHN3YWxsb3dzIGV2ZXJ5dGhpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjUuOC4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZha2VzaW5rIHN5bmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZmFsc2U8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFJlbmRlciAxMDAwIGF1ZGlvIGJ1ZmZlcnMgKG9mIGRlZmF1bHQgc2l6ZSkgYXMgZmFzdCBhcyBwb3NzaWJsZS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41LjguNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OywgTXIuICdmcmFnLW1lLW1vcmUnIFZhbmRlcndpbmdvICZsdDt3aW5nb0BmbHVlbmRvLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luazwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41LjguNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RmFrZVNpbms8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RGYWtlU2luazs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLmh0bWwjR3N0RmFrZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGYWtlU2luazwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNpbmtTdGF0ZUVycm9yIj48L2E+PGgzPmVudW0gR3N0RmFrZVNpbmtTdGF0ZUVycm9yPC9oMz4KLTxwPlBvc3NpYmxlIHN0YXRlIGNoYW5nZSBlcnJvcnMgZm9yIHRoZSBzdGF0ZS1lcnJvciBwcm9wZXJ0eS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RGYWtlU2lua1N0YXRlRXJyb3IubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNJTkstU1RBVEUtRVJST1ItTk9ORTpDQVBTIj48L2E+RkFLRV9TSU5LX1NUQVRFX0VSUk9SX05PTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+bm8gZXJyb3I8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iRkFLRS1TSU5LLVNUQVRFLUVSUk9SLU5VTEwtUkVBRFk6Q0FQUyI+PC9hPkZBS0VfU0lOS19TVEFURV9FUlJPUl9OVUxMX1JFQURZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmNhdXNlIHRoZSBOVUxMIHRvIFJFQURZIHN0YXRlIGNoYW5nZSB0byBmYWlsPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkZBS0UtU0lOSy1TVEFURS1FUlJPUi1SRUFEWS1QQVVTRUQ6Q0FQUyI+PC9hPkZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9QQVVTRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Y2F1c2UgdGhlIFJFQURZIHRvIFBBVVNFRCBzdGF0ZSBjaGFuZ2UgdG8gZmFpbDo8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iRkFLRS1TSU5LLVNUQVRFLUVSUk9SLVBBVVNFRC1QTEFZSU5HOkNBUFMiPjwvYT5GQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1BMQVlJTkc8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Y2F1c2UgdGhlIFBBVVNFRCB0byBQTEFZSU5HIHN0YXRlIGNoYW5nZSB0byBmYWlsOjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNJTkstU1RBVEUtRVJST1ItUExBWUlORy1QQVVTRUQ6Q0FQUyI+PC9hPkZBS0VfU0lOS19TVEFURV9FUlJPUl9QTEFZSU5HX1BBVVNFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5jYXVzZSB0aGUgUExBWUlORyB0byBQQVVTRUQgc3RhdGUgY2hhbmdlIHRvIGZhaWw6PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkZBS0UtU0lOSy1TVEFURS1FUlJPUi1QQVVTRUQtUkVBRFk6Q0FQUyI+PC9hPkZBS0VfU0lOS19TVEFURV9FUlJPUl9QQVVTRURfUkVBRFk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Y2F1c2UgdGhlIFBBVVNFRCB0byBSRUFEWSBzdGF0ZSBjaGFuZ2UgdG8gZmFpbDo8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iRkFLRS1TSU5LLVNUQVRFLUVSUk9SLVJFQURZLU5VTEw6Q0FQUyI+PC9hPkZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9OVUxMPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmNhdXNlIHRoZSBSRUFEWSB0byBOVUxMIHN0YXRlIGNoYW5nZSB0byBmYWlsOjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNpbmstLWNhbi1hY3RpdmF0ZS1wdWxsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2FuLWFjdGl2YXRlLXB1bGzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNhbi1hY3RpdmF0ZS1wdWxs4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2FuIGFjdGl2YXRlIGluIHB1bGwgbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTaW5rLS1jYW4tYWN0aXZhdGUtcHVzaCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNhbi1hY3RpdmF0ZS1wdXNo4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjYW4tYWN0aXZhdGUtcHVzaOKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkNhbiBhY3RpdmF0ZSBpbiBwdXNoIG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTaW5rLS1kdW1wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHVtcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZHVtcOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU2luay0tbGFzdC1tZXNzYWdlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbGFzdC1tZXNzYWdl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsYXN0LW1lc3NhZ2XigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBtZXNzYWdlIGRlc2NyaWJpbmcgY3VycmVudCBzdGF0dXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU2luay0tbnVtLWJ1ZmZlcnMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxudW0tYnVmZmVyc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnVtLWJ1ZmZlcnPigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWNjZXB0IGdvaW5nIEVPUy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUFYVUxPTkc8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNpbmstLXNpZ25hbC1oYW5kb2ZmcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNpZ25hbC1oYW5kb2Zmc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2lnbmFsLWhhbmRvZmZz4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TZW5kIGEgc2lnbmFsIGJlZm9yZSB1bnJlZmZpbmcgdGhlIGJ1ZmZlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTaW5rLS1zaWxlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzaWxlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNpbGVudOKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RG9uJ3QgcHJvZHVjZSBsYXN0X21lc3NhZ2UgZXZlbnRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU2luay0tc3RhdGUtZXJyb3IiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzdGF0ZS1lcnJvcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RhdGUtZXJyb3LigJ0gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rU3RhdGVFcnJvciIgdGl0bGU9ImVudW0gR3N0RmFrZVNpbmtTdGF0ZUVycm9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNpbmtTdGF0ZUVycm9yPC9zcGFuPjwvYT48L3ByZT4KLTxwPkdlbmVyYXRlIGEgc3RhdGUgY2hhbmdlIGVycm9yLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBObyBzdGF0ZSBjaGFuZ2UgZXJyb3JzPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTaW5rLWhhbmRvZmYiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxoYW5kb2Zm4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNpbms8L3NwYW4+PC9hPiAqZmFrZXNpbmssCi0gICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAgICpidWZmZXIsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgICAgICpwYWQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+VGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSB1bnJlZmZpbmcgdGhlIGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RGYWtlU2luay1oYW5kb2ZmLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmZha2VzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZha2VzaW5rIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBidWZmZXIgdGhhdCBqdXN0IGhhcyBiZWVuIHJlY2VpdmVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYWQgdGhhdCByZWNlaXZlZCBpdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNpbmstcHJlcm9sbC1oYW5kb2ZmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJlcm9sbC1oYW5kb2Zm4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sI0dzdEZha2VTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNpbms8L3NwYW4+PC9hPiAqZmFrZXNpbmssCi0gICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiAgICpidWZmZXIsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgICAgICpwYWQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+VGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSB1bnJlZmZpbmcgdGhlIGJ1ZmZlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RGYWtlU2luay1wcmVyb2xsLWhhbmRvZmYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmFrZXNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZmFrZXNpbmsgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGJ1ZmZlciB0aGF0IGp1c3QgaGFzIGJlZW4gcmVjZWl2ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB0aGF0IHJlY2VpdmVkIGl0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzaW5rLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTcmM8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTEzNTNlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZmFrZXNyYzogR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCIgdGl0bGU9ImZha2VzaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiIHRpdGxlPSJmZHNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMudG9wX29mX3BhZ2UiPjwvYT5mYWtlc3JjPC9zcGFuPjwvaDI+Ci08cD5mYWtlc3JjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tY2FuLWFjdGl2YXRlLXB1bGwiIHRpdGxlPSJUaGUg4oCcY2FuLWFjdGl2YXRlLXB1bGzigJ0gcHJvcGVydHkiPmNhbi1hY3RpdmF0ZS1wdWxsPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWNhbi1hY3RpdmF0ZS1wdXNoIiB0aXRsZT0iVGhlIOKAnGNhbi1hY3RpdmF0ZS1wdXNo4oCdIHByb3BlcnR5Ij5jYW4tYWN0aXZhdGUtcHVzaDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyY0RhdGFUeXBlIiB0aXRsZT0iZW51bSBHc3RGYWtlU3JjRGF0YVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGYWtlU3JjRGF0YVR5cGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZGF0YSIgdGl0bGU9IlRoZSDigJxkYXRh4oCdIHByb3BlcnR5Ij5kYXRhPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1kYXRhcmF0ZSIgdGl0bGU9IlRoZSDigJxkYXRhcmF0ZeKAnSBwcm9wZXJ0eSI+ZGF0YXJhdGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZHVtcCIgdGl0bGU9IlRoZSDigJxkdW1w4oCdIHByb3BlcnR5Ij5kdW1wPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjRmlsbFR5cGUiIHRpdGxlPSJlbnVtIEdzdEZha2VTcmNGaWxsVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTcmNGaWxsVHlwZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1maWxsdHlwZSIgdGl0bGU9IlRoZSDigJxmaWxsdHlwZeKAnSBwcm9wZXJ0eSI+ZmlsbHR5cGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tZm9ybWF0IiB0aXRsZT0iVGhlIOKAnGZvcm1hdOKAnSBwcm9wZXJ0eSI+Zm9ybWF0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWlzLWxpdmUiIHRpdGxlPSJUaGUg4oCcaXMtbGl2ZeKAnSBwcm9wZXJ0eSI+aXMtbGl2ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLWxhc3QtbWVzc2FnZSIgdGl0bGU9IlRoZSDigJxsYXN0LW1lc3NhZ2XigJ0gcHJvcGVydHkiPmxhc3QtbWVzc2FnZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXBhcmVudHNpemUiIHRpdGxlPSJUaGUg4oCccGFyZW50c2l6ZeKAnSBwcm9wZXJ0eSI+cGFyZW50c2l6ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXBhdHRlcm4iIHRpdGxlPSJUaGUg4oCccGF0dGVybuKAnSBwcm9wZXJ0eSI+cGF0dGVybjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1zaWduYWwtaGFuZG9mZnMiIHRpdGxlPSJUaGUg4oCcc2lnbmFsLWhhbmRvZmZz4oCdIHByb3BlcnR5Ij5zaWduYWwtaGFuZG9mZnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2lsZW50IiB0aXRsZT0iVGhlIOKAnHNpbGVudOKAnSBwcm9wZXJ0eSI+c2lsZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLS1zaXplbWF4IiB0aXRsZT0iVGhlIOKAnHNpemVtYXjigJ0gcHJvcGVydHkiPnNpemVtYXg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXNpemVtaW4iIHRpdGxlPSJUaGUg4oCcc2l6ZW1pbuKAnSBwcm9wZXJ0eSI+c2l6ZW1pbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyY1NpemVUeXBlIiB0aXRsZT0iZW51bSBHc3RGYWtlU3JjU2l6ZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGYWtlU3JjU2l6ZVR5cGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy0tc2l6ZXR5cGUiIHRpdGxlPSJUaGUg4oCcc2l6ZXR5cGXigJ0gcHJvcGVydHkiPnNpemV0eXBlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sI0dzdEZha2VTcmMtLXN5bmMiIHRpdGxlPSJUaGUg4oCcc3luY+KAnSBwcm9wZXJ0eSI+c3luYzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyYy1oYW5kb2ZmIiB0aXRsZT0iVGhlIOKAnGhhbmRvZmbigJ0gc2lnbmFsIj5oYW5kb2ZmPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RGYWtlU3JjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RGYWtlU3JjIj5Hc3RGYWtlU3JjPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjRGF0YVR5cGUiIHRpdGxlPSJlbnVtIEdzdEZha2VTcmNEYXRhVHlwZSI+R3N0RmFrZVNyY0RhdGFUeXBlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjRmlsbFR5cGUiIHRpdGxlPSJlbnVtIEdzdEZha2VTcmNGaWxsVHlwZSI+R3N0RmFrZVNyY0ZpbGxUeXBlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjT3V0cHV0VHlwZSIgdGl0bGU9ImVudW0gR3N0RmFrZVNyY091dHB1dFR5cGUiPkdzdEZha2VTcmNPdXRwdXRUeXBlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjU2l6ZVR5cGUiIHRpdGxlPSJlbnVtIEdzdEZha2VTcmNTaXplVHlwZSI+R3N0RmFrZVNyY1NpemVUeXBlPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEZha2VTcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSBmYWtlc3JjIGVsZW1lbnQgaXMgYSBtdWx0aXB1cnBvc2UgZWxlbWVudCB0aGF0IGNhbiBnZW5lcmF0ZQotYSB3aWRlIHJhbmdlIG9mIGJ1ZmZlcnMgYW5kIGNhbiBvcGVyYXRlIGluIHZhcmlvdXMgc2NoZWR1bGluZyBtb2Rlcy48L3A+Ci08cD5JdCBpcyBtb3N0bHkgdXNlZCBhcyBhIHRlc3RpbmcgZWxlbWVudCwgb25lIHRyaXZpYWwgZXhhbXBsZSBmb3IgdGVzdGluZwotYmFzaWMgPHNwYW4gY2xhc3M9ImFwcGxpY2F0aW9uIj5HU3RyZWFtZXI8L3NwYW4+IGNvcmUgZnVuY3Rpb25hbGl0eSBpczo8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNi44LjQiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBmYWtlc3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmFrZXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSB3aWxsIHB1c2ggNSBlbXB0eSBidWZmZXJzIHRvIHRoZSBmYWtlc2luayBlbGVtZW50IGFuZCB0aGVuCi1zZW5kcyBhbiBFT1MuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNi44LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjYuOC41LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RmFrZVNyYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEZha2VTcmM7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNyYzwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyY0RhdGFUeXBlIj48L2E+PGgzPmVudW0gR3N0RmFrZVNyY0RhdGFUeXBlPC9oMz4KLTxwPlRoZSBkaWZmZXJlbnQgd2F5cyBidWZmZXJzIGFyZSBhbGxvY2F0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RmFrZVNyY0RhdGFUeXBlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iRkFLRS1TUkMtREFUQS1BTExPQ0FURTpDQVBTIj48L2E+RkFLRV9TUkNfREFUQV9BTExPQ0FURTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hbGxvY2F0ZSBidWZmZXJzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkZBS0UtU1JDLURBVEEtU1VCQlVGRkVSOkNBUFMiPjwvYT5GQUtFX1NSQ19EQVRBX1NVQkJVRkZFUjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5zdWJidWZmZXIgZWFjaCBidWZmZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTcmNGaWxsVHlwZSI+PC9hPjxoMz5lbnVtIEdzdEZha2VTcmNGaWxsVHlwZTwvaDM+Ci08cD5UaGUgZGlmZmVyZW50IHdheXMgb2YgZmlsbGluZyB0aGUgYnVmZmVycy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjRmlsbFR5cGUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1GSUxMVFlQRS1OT1RISU5HOkNBUFMiPjwvYT5GQUtFX1NSQ19GSUxMVFlQRV9OT1RISU5HPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmRvIG5vdCBmaWxsIGJ1ZmZlcnMgPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkZBS0UtU1JDLUZJTExUWVBFLVpFUk86Q0FQUyI+PC9hPkZBS0VfU1JDX0ZJTExUWVBFX1pFUk88L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZmlsbCBidWZmZXJzIHdpdGggMDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1GSUxMVFlQRS1SQU5ET006Q0FQUyI+PC9hPkZBS0VfU1JDX0ZJTExUWVBFX1JBTkRPTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5maWxsIGJ1ZmZlcnMgd2l0aCByYW5kb20gYnl0ZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iRkFLRS1TUkMtRklMTFRZUEUtUEFUVEVSTjpDQVBTIj48L2E+RkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5maWxsIGJ1ZmZlcnMgd2l0aCBhIHBhdHRlcm48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iRkFLRS1TUkMtRklMTFRZUEUtUEFUVEVSTi1DT05UOkNBUFMiPjwvYT5GQUtFX1NSQ19GSUxMVFlQRV9QQVRURVJOX0NPTlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+ZmlsbCBidWZmZXJzIHdpdGggYSBjb250aW51b3VzIHBhdHRlcm48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTcmNPdXRwdXRUeXBlIj48L2E+PGgzPmVudW0gR3N0RmFrZVNyY091dHB1dFR5cGU8L2gzPgotPHA+VGhlIGRpZmZlcmVudCBvdXRwdXQgdHlwZXMuIFVudXNlZCBjdXJyZW50bHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RmFrZVNyY091dHB1dFR5cGUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1GSVJTVC1MQVNULUxPT1A6Q0FQUyI+PC9hPkZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5maXJzdCBwYWQgdGhlbiBsYXN0IHBhZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1MQVNULUZJUlNULUxPT1A6Q0FQUyI+PC9hPkZBS0VfU1JDX0xBU1RfRklSU1RfTE9PUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5sYXN0IHBhZCB0aGVuIGZpcnN0IHBhZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1QSU5HLVBPTkc6Q0FQUyI+PC9hPkZBS0VfU1JDX1BJTkdfUE9ORzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5waW5nIHBvbmcgYmV0d2VlbiBwYWRzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkZBS0UtU1JDLU9SREVSRUQtUkFORE9NOkNBUFMiPjwvYT5GQUtFX1NSQ19PUkRFUkVEX1JBTkRPTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5vcmRlcmVkIHJhbmRvbSBwYWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iRkFLRS1TUkMtUkFORE9NOkNBUFMiPjwvYT5GQUtFX1NSQ19SQU5ET008L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cmFuZG9tIHBhZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1QQVRURVJOLUxPT1A6Q0FQUyI+PC9hPkZBS0VfU1JDX1BBVFRFUk5fTE9PUDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5sb29wIGJldHdlZW4gcGFkcyBpbiBhIHBhcnRpY3VsYXIgcGF0dGVybjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1QSU5HLVBPTkctUEFUVEVSTjpDQVBTIj48L2E+RkFLRV9TUkNfUElOR19QT05HX1BBVFRFUk48L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+cGluZyBwb25nIGJhc2VkIG9uIGEgcGF0dGVybjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1HRVQtQUxXQVlTLVNVQ0VFRFM6Q0FQUyI+PC9hPkZBS0VfU1JDX0dFVF9BTFdBWVNfU1VDRUVEUzwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5hIGdldCBhbHdheXMgc3VjY2VlZHMgb24gYSBwYWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTcmNTaXplVHlwZSI+PC9hPjxoMz5lbnVtIEdzdEZha2VTcmNTaXplVHlwZTwvaDM+Ci08cD5UaGUgZGlmZmVyZW50IHNpemUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEZha2VTcmNTaXplVHlwZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkZBS0UtU1JDLVNJWkVUWVBFLUVNUFRZOkNBUFMiPjwvYT5GQUtFX1NSQ19TSVpFVFlQRV9FTVBUWTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5jcmVhdGUgZW1wdHkgYnVmZmVyczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJGQUtFLVNSQy1TSVpFVFlQRS1GSVhFRDpDQVBTIj48L2E+RkFLRV9TUkNfU0laRVRZUEVfRklYRUQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Zml4ZWQgYnVmZmVyIHNpemUgKHNpemVtYXggc2l6ZWQpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkZBS0UtU1JDLVNJWkVUWVBFLVJBTkRPTTpDQVBTIj48L2E+RkFLRV9TUkNfU0laRVRZUEVfUkFORE9NPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnJhbmRvbSBidWZmZXIgc2l6ZSAoc2l6ZW1pbiAmbHQ7PSBzaXplICZsdDs9IHNpemVtYXgpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTcmMtLWNhbi1hY3RpdmF0ZS1wdWxsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2FuLWFjdGl2YXRlLXB1bGzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNhbi1hY3RpdmF0ZS1wdWxs4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2FuIGFjdGl2YXRlIGluIHB1bGwgbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyYy0tY2FuLWFjdGl2YXRlLXB1c2giPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjYW4tYWN0aXZhdGUtcHVzaOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2FuLWFjdGl2YXRlLXB1c2jigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DYW4gYWN0aXZhdGUgaW4gcHVzaCBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjLS1kYXRhIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGF0YeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGF0YeKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyY0RhdGFUeXBlIiB0aXRsZT0iZW51bSBHc3RGYWtlU3JjRGF0YVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGYWtlU3JjRGF0YVR5cGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+RGF0YSBhbGxvY2F0aW9uIG1ldGhvZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogQWxsb2NhdGUgZGF0YTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyYy0tZGF0YXJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkYXRhcmF0ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGF0YXJhdGXigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZXN0YW1wcyBidWZmZXJzIHdpdGggbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQgKDAgPSBub25lKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjLS1kdW1wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHVtcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZHVtcOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjLS1maWxsdHlwZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZpbGx0eXBl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmaWxsdHlwZeKAnSAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjRmlsbFR5cGUiIHRpdGxlPSJlbnVtIEdzdEZha2VTcmNGaWxsVHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTcmNGaWxsVHlwZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Ib3cgdG8gZmlsbCB0aGUgYnVmZmVyLCBpZiBhdCBhbGwuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZpbGwgYnVmZmVycyB3aXRoIHplcm9zPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjLS1mb3JtYXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmb3JtYXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZvcm1hdOKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHc3RGb3JtYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGb3JtYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2V0IHRoZSBmb3JtYXQgb2YgdGhlIG5ld3NlZ21lbnQgZXZlbnRzIHRvIHByb2R1Y2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEdTVF9GT1JNQVRfQllURVM8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTcmMtLWlzLWxpdmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpcy1saXZl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpcy1saXZl4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRydWUgaWYgdGhlIGVsZW1lbnQgY2Fubm90IHByb2R1Y2UgZGF0YSBpbiBQQVVTRUQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjLS1sYXN0LW1lc3NhZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsYXN0LW1lc3NhZ2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxhc3QtbWVzc2FnZeKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGxhc3Qgc3RhdHVzIG1lc3NhZ2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjLS1wYXJlbnRzaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGFyZW50c2l6ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccGFyZW50c2l6ZeKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2l6ZSBvZiBwYXJlbnQgYnVmZmVyIGZvciBzdWItYnVmZmVyZWQgYWxsb2NhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA0MDk2MDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyYy0tcGF0dGVybiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBhdHRlcm7igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBhdHRlcm7igJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+U2V0IHRoZSBwYXR0ZXJuICh1bnVzZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGYWtlU3JjLS1zaWduYWwtaGFuZG9mZnMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzaWduYWwtaGFuZG9mZnPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNpZ25hbC1oYW5kb2Zmc+KAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U2VuZCBhIHNpZ25hbCBiZWZvcmUgcHVzaGluZyB0aGUgYnVmZmVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyYy0tc2lsZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2lsZW504oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzaWxlbnTigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkRvbid0IHByb2R1Y2UgbGFzdF9tZXNzYWdlIGV2ZW50cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyYy0tc2l6ZW1heCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNpemVtYXjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNpemVtYXjigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heGltdW0gYnVmZmVyIHNpemUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDA5NjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyYy0tc2l6ZW1pbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNpemVtaW7igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNpemVtaW7igJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1pbmltdW0gYnVmZmVyIHNpemUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyYy0tc2l6ZXR5cGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzaXpldHlwZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2l6ZXR5cGXigJ0gICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwjR3N0RmFrZVNyY1NpemVUeXBlIiB0aXRsZT0iZW51bSBHc3RGYWtlU3JjU2l6ZVR5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGYWtlU3JjU2l6ZVR5cGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+SG93IHRvIGRldGVybWluZSBidWZmZXIgc2l6ZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFNlbmQgZW1wdHkgYnVmZmVyczwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmFrZVNyYy0tc3luYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN5bmPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN5bmPigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U3luYyB0byB0aGUgY2xvY2sgdG8gdGhlIGRhdGFyYXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZha2VTcmMtaGFuZG9mZiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGhhbmRvZmbigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCNHc3RGYWtlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmFrZVNyYzwvc3Bhbj48L2E+ICpmYWtlc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyPC9zcGFuPjwvYT4gICpidWZmZXIsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgICAgKnBhZCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlRoaXMgc2lnbmFsIGdldHMgZW1pdHRlZCBiZWZvcmUgc2VuZGluZyB0aGUgYnVmZmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdEZha2VTcmMtaGFuZG9mZi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mYWtlc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZha2VzcmMgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGJ1ZmZlciB0aGF0IHdpbGwgYmUgcHVzaGVkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYWQgdGhhdCB3aWxsIHNlbnQgaXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCNHc3RGYWtlU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZha2VTaW5rPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYTIxODMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmZkc2luazogR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sIiB0aXRsZT0iZmFrZXNyYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwiIHRpdGxlPSJmZHNyYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZkc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsudG9wX29mX3BhZ2UiPjwvYT5mZHNpbms8L3NwYW4+PC9oMj4KLTxwPmZkc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luay0tZmQiIHRpdGxlPSJUaGUg4oCcZmTigJ0gcHJvcGVydHkiPmZkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0RmRTaW5rIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RmRTaW5rIj5Hc3RGZFNpbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0Ij5Hc3RCYXNlU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0RmRTaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdEZkU2luayBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXItc3RydWN0Ij5Hc3RVUklIYW5kbGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5Xcml0ZSBkYXRhIHRvIGEgdW5peCBmaWxlIGRlc2NyaXB0b3IuPC9wPgotPHA+VGhpcyBlbGVtZW50IHdpbGwgc3luY2hyb25pemUgb24gdGhlIGNsb2NrIGJlZm9yZSB3cml0aW5nIHRoZSBkYXRhIG9uIHRoZQotc29ja2V0LiBGb3IgZmlsZSBkZXNjcmlwdG9ycyB3aGVyZSB0aGlzIGRvZXMgbm90IG1ha2Ugc2Vuc2UgKGZpbGVzLCAuLi4pIHRoZQotPGEgaHJlZj0iLi4vaHRtbC9Hc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLS1zeW5jIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcc3luY+KAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgc3luY2hyb25pc2F0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNy44LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL0ZpbGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNy44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZkU2luay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEZkU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEZkU2luazs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZkU2luazwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZkU2luay0tZmQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmTigJ0gICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8gd3JpdGUgdG8uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNpbmsuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGZFNyYzwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2ZjhlNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5mZHNyYzogR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiIHRpdGxlPSJmZHNpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIiB0aXRsZT0iZmlsZXNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZkc3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMudG9wX29mX3BhZ2UiPjwvYT5mZHNyYzwvc3Bhbj48L2gyPgotPHA+ZmRzcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNHc3RGZFNyYy0tZmQiIHRpdGxlPSJUaGUg4oCcZmTigJ0gcHJvcGVydHkiPmZkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMtLXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCcdGltZW91dOKAnSBwcm9wZXJ0eSI+dGltZW91dDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0RmRTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sI0dzdEZkU3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RGZFNyYyI+R3N0RmRTcmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtc3RydWN0Ij5Hc3RCYXNlU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCI+R3N0UHVzaFNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEZkU3JjCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0RmRTcmMgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5SZWFkIGRhdGEgZnJvbSBhIHVuaXggZmlsZSBkZXNjcmlwdG9yLjwvcD4KLTxwPlRvIGdlbmVyYXRlIGRhdGEsIGVudGVyIHNvbWUgZGF0YSBvbiB0aGUgY29uc29sZSBmb2xsb3dlZCBieSBlbnRlci4KLVRoZSBhYm92ZSBtZW50aW9uZWQgcGlwZWxpbmUgc2hvdWxkIGR1bXAgZGF0YSBwYWNrZXRzIHRvIHRoZSBjb25zb2xlLjwvcD4KLTxwPklmIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCNHc3RGZFNyYy0tdGltZW91dCIgdGl0bGU9IlRoZSDigJx0aW1lb3V04oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcdGltZW91dOKAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGlzIHNldCB0byBhIHZhbHVlIGJpZ2dlciB0aGFuIDAsIGZkc3JjIHdpbGwKLWdlbmVyYXRlIGFuIGVsZW1lbnQgbWVzc2FnZSBuYW1lZCA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4iR3N0RmRTcmNUaW1lb3V0IjwvY29kZT4KLWlmIG5vIGRhdGEgd2FzIHJlY2VpdmVkIGluIHRoZSBnaXZlbiB0aW1lb3V0LjwvcD4KLTxwPlRoZSBtZXNzYWdlJ3Mgc3RydWN0dXJlIGNvbnRhaW5zIG9uZSBmaWVsZDo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+InRpbWVvdXQiPC9jb2RlPjogdGhlIHRpbWVvdXQgaW4gbWljcm9zZWNvbmRzIHRoYXQKLSAgZXhwaXJlZCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEuCi0gIDwvcD48L2xpPjwvdWw+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOC44LjciPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmVjaG8gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7SGVsbG8gR1N0cmVhbWVyJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fDwvc3Bhbj4gZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZkc3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmYWtlc2luayBkdW1wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRydWU8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIEEgc2ltcGxlIHBpcGVsaW5lIHRvIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIGR1bXAgdGhlIGRhdGEKLXdpdGggYSBmYWtlc2luayBhcyBoZXggYXNjaWkgYmxvY2suCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOC44LjguMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Tb3VyY2UvRmlsZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi44LjguOC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGZFNyYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEZkU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RmRTcmM7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc3JjLmh0bWwjR3N0RmRTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGZFNyYzwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmRTcmMtLWZkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZk4oCdICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIHJlYWQgZnJvbS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGZFNyYy0tdGltZW91dCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRpbWVvdXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRpbWVvdXTigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlBvc3QgYSBtZXNzYWdlIGFmdGVyIHRpbWVvdXQgbWljcm9zZWNvbmRzPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZkc2luay5odG1sI0dzdEZkU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZkU2luazwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmMGRiOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5maWxlc2luazogR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCIgdGl0bGU9ImZkc3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIiB0aXRsZT0iZmlsZXNyYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mZHNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsudG9wX29mX3BhZ2UiPjwvYT5maWxlc2luazwvc3Bhbj48L2gyPgotPHA+ZmlsZXNpbms8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rLS1hcHBlbmQiIHRpdGxlPSJUaGUg4oCcYXBwZW5k4oCdIHByb3BlcnR5Ij5hcHBlbmQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2lua0J1ZmZlck1vZGUiIHRpdGxlPSJlbnVtIEdzdEZpbGVTaW5rQnVmZmVyTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZpbGVTaW5rQnVmZmVyTW9kZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWJ1ZmZlci1tb2RlIiB0aXRsZT0iVGhlIOKAnGJ1ZmZlci1tb2Rl4oCdIHByb3BlcnR5Ij5idWZmZXItbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmstLWJ1ZmZlci1zaXplIiB0aXRsZT0iVGhlIOKAnGJ1ZmZlci1zaXpl4oCdIHByb3BlcnR5Ij5idWZmZXItc2l6ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luay0tbG9jYXRpb24iIHRpdGxlPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiPmxvY2F0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RGaWxlU2luayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCNHc3RGaWxlU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RmlsZVNpbmsiPkdzdEZpbGVTaW5rPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmtCdWZmZXJNb2RlIiB0aXRsZT0iZW51bSBHc3RGaWxlU2lua0J1ZmZlck1vZGUiPkdzdEZpbGVTaW5rQnVmZmVyTW9kZTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0Ij5Hc3RCYXNlU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0RmlsZVNpbmsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RGaWxlU2luayBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iLi4vaHRtbC9nc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXItc3RydWN0Ij5Hc3RVUklIYW5kbGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPldyaXRlIGluY29taW5nIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOS44LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdjRsMnNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGpwZWdlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+Y2FwdHVyZTE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5qcGVnPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIENhcHR1cmUgb25lIGZyYW1lIGZyb20gYSB2NGwyIGNhbWVyYSBhbmQgc2F2ZSBhcyBqcGVnIGltYWdlLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjkuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGhvbWFzIFZhbmRlciBTdGljaGVsZSAmbHQ7dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL0ZpbGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOS44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGaWxlU2luay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEZpbGVTaW5rPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RmlsZVNpbms7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwjR3N0RmlsZVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGaWxlU2luazwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZpbGVTaW5rQnVmZmVyTW9kZSI+PC9hPjxoMz5lbnVtIEdzdEZpbGVTaW5rQnVmZmVyTW9kZTwvaDM+Ci08cD5GaWxlIHJlYWQgYnVmZmVyaW5nIG1vZGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RmlsZVNpbmtCdWZmZXJNb2RlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUZJTEUtU0lOSy1CVUZGRVItTU9ERS1ERUZBVUxUOkNBUFMiPjwvYT5HU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0RFRkFVTFQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RGVmYXVsdCBidWZmZXJpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUZJTEUtU0lOSy1CVUZGRVItTU9ERS1GVUxMOkNBUFMiPjwvYT5HU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0ZVTEw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RnVsbHkgYnVmZmVyZWQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUZJTEUtU0lOSy1CVUZGRVItTU9ERS1MSU5FOkNBUFMiPjwvYT5HU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0xJTkU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TGluZSBidWZmZXJlZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtRklMRS1TSU5LLUJVRkZFUi1NT0RFLVVOQlVGRkVSRUQ6Q0FQUyI+PC9hPkdTVF9GSUxFX1NJTktfQlVGRkVSX01PREVfVU5CVUZGRVJFRDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5VbmJ1ZmZlcmVkPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGaWxlU2luay0tYXBwZW5kIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXBwZW5k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhcHBlbmTigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkFwcGVuZCB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGaWxlU2luay0tYnVmZmVyLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxidWZmZXItbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYnVmZmVyLW1vZGXigJ0gICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sI0dzdEZpbGVTaW5rQnVmZmVyTW9kZSIgdGl0bGU9ImVudW0gR3N0RmlsZVNpbmtCdWZmZXJNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmlsZVNpbmtCdWZmZXJNb2RlPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBidWZmZXJpbmcgbW9kZSB0byB1c2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IERlZmF1bHQgYnVmZmVyaW5nPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGaWxlU2luay0tYnVmZmVyLXNpemUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxidWZmZXItc2l6ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYnVmZmVyLXNpemXigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TaXplIG9mIGJ1ZmZlciBpbiBudW1iZXIgb2YgYnl0ZXMgZm9yIGxpbmUgb3IgZnVsbCBidWZmZXItbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNjU1MzY8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZpbGVTaW5rLS1sb2NhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxvY2F0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb2NhdGlvbuKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkxvY2F0aW9uIG9mIHRoZSBmaWxlIHRvIHdyaXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZpbGVTcmM8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmMxMGEwLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZmlsZXNyYzogR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNpbmsuaHRtbCIgdGl0bGU9ImZpbGVzaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiIHRpdGxlPSJmdW5uZWwiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMudG9wX29mX3BhZ2UiPjwvYT5maWxlc3JjPC9zcGFuPjwvaDI+Ci08cD5maWxlc3JjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYy0tbG9jYXRpb24iIHRpdGxlPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiPmxvY2F0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0RmlsZVNyYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEZpbGVTcmMiPkdzdEZpbGVTcmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEZpbGVTcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdEZpbGVTcmMgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii4uL2h0bWwvZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlJlYWQgZGF0YSBmcm9tIGEgZmlsZSBpbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwLjguMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c29uZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gUGxheSBzb25nLm9nZyBhdWRpbyBmaWxlIHdoaWNoIG11c3QgYmUgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTAuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlL0ZpbGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTAuOC40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGaWxlU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RmlsZVNyYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEZpbGVTcmM7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmlsZVNyYzwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmlsZVNyYy0tbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb2NhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG9jYXRpb27igJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5Mb2NhdGlvbiBvZiB0aGUgZmlsZSB0byByZWFkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCNHc3RGaWxlU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmlsZVNyYzwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWQ5NzdlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5mdW5uZWw6IEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzcmMuaHRtbCIgdGl0bGU9ImZpbGVzcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sIiB0aXRsZT0iaWRlbnRpdHkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwudG9wX29mX3BhZ2UiPjwvYT5mdW5uZWw8L3NwYW4+PC9oMj4KLTxwPmZ1bm5lbDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwjR3N0RnVubmVsLS1mb3J3YXJkLXN0aWNreS1ldmVudHMiIHRpdGxlPSJUaGUg4oCcZm9yd2FyZC1zdGlja3ktZXZlbnRz4oCdIHByb3BlcnR5Ij5mb3J3YXJkLXN0aWNreS1ldmVudHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RGdW5uZWwiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwjR3N0RnVubmVsLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RGdW5uZWwiPkdzdEZ1bm5lbDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEZ1bm5lbAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UYWtlcyBwYWNrZXRzIGZyb20gdmFyaW91cyBpbnB1dCBzaW5rcyBpbnRvIG9uZSBvdXRwdXQgc291cmNlLjwvcD4KLTxwPmZ1bm5lbCBhbHdheXMgb3V0cHV0cyBhIHNpbmdsZSwgb3BlbiBlbmRlZCBzZWdtZW50IGZyb20KLTAgd2l0aCBpbiA8YSBocmVmPSIuLi9odG1sL2dzdHJlYW1lci1Hc3RGb3JtYXQuaHRtbCNHU1QtRk9STUFULVRJTUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkdTVF9GT1JNQVRfVElNRTwvY29kZT48L2E+IGFuZCBvdXRwdXRzIHRoZSBidWZmZXJzIG9mIHRoZQotZGlmZmVyZW50IHNpbmtwYWRzIHdpdGggdGltZXN0YW1wcyB0aGF0IGFyZSBzZXQgdG8gdGhlCi1ydW5uaW5nIHRpbWUgZm9yIHRoYXQgc3RyZWFtLiBmdW5uZWwgZG9lcyBub3Qgc3luY2hyb25pemUKLXRoZSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtcyBidXQgc2ltcGx5IGZvcndhcmRzIGFsbCBidWZmZXJzCi1pbW1lZGlhdGVseSB3aGVuIHRoZXkgYXJyaXZlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTEuNy40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+T2xpdmllciBDcmV0ZSAmbHQ7b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTEuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGdW5uZWwtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RGdW5uZWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RGdW5uZWw7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sI0dzdEZ1bm5lbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZ1bm5lbDwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZ1bm5lbC0tZm9yd2FyZC1zdGlja3ktZXZlbnRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZm9yd2FyZC1zdGlja3ktZXZlbnRz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmb3J3YXJkLXN0aWNreS1ldmVudHPigJ0gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkZvcndhcmQgc3RpY2t5IGV2ZW50cyBvbiBzdHJlYW0gY2hhbmdlcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMwYmRiZi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDA3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5pZGVudGl0eTogR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiIHRpdGxlPSJmdW5uZWwiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sIiB0aXRsZT0iaW5wdXQtc2VsZWN0b3IiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5LnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkudG9wX29mX3BhZ2UiPjwvYT5pZGVudGl0eTwvc3Bhbj48L2gyPgotPHA+aWRlbnRpdHk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1jaGVjay1pbXBlcmZlY3Qtb2Zmc2V0IiB0aXRsZT0iVGhlIOKAnGNoZWNrLWltcGVyZmVjdC1vZmZzZXTigJ0gcHJvcGVydHkiPmNoZWNrLWltcGVyZmVjdC1vZmZzZXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1jaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wIiB0aXRsZT0iVGhlIOKAnGNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXDigJ0gcHJvcGVydHkiPmNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZGF0YXJhdGUiIHRpdGxlPSJUaGUg4oCcZGF0YXJhdGXigJ0gcHJvcGVydHkiPmRhdGFyYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1kcm9wLXByb2JhYmlsaXR5IiB0aXRsZT0iVGhlIOKAnGRyb3AtcHJvYmFiaWxpdHnigJ0gcHJvcGVydHkiPmRyb3AtcHJvYmFiaWxpdHk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1kdW1wIiB0aXRsZT0iVGhlIOKAnGR1bXDigJ0gcHJvcGVydHkiPmR1bXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZXJyb3ItYWZ0ZXIiIHRpdGxlPSJUaGUg4oCcZXJyb3ItYWZ0ZXLigJ0gcHJvcGVydHkiPmVycm9yLWFmdGVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LS1sYXN0LW1lc3NhZ2UiIHRpdGxlPSJUaGUg4oCcbGFzdC1tZXNzYWdl4oCdIHByb3BlcnR5Ij5sYXN0LW1lc3NhZ2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2lnbmFsLWhhbmRvZmZzIiB0aXRsZT0iVGhlIOKAnHNpZ25hbC1oYW5kb2Zmc+KAnSBwcm9wZXJ0eSI+c2lnbmFsLWhhbmRvZmZzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2lsZW50IiB0aXRsZT0iVGhlIOKAnHNpbGVudOKAnSBwcm9wZXJ0eSI+c2lsZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2luZ2xlLXNlZ21lbnQiIHRpdGxlPSJUaGUg4oCcc2luZ2xlLXNlZ21lbnTigJ0gcHJvcGVydHkiPnNpbmdsZS1zZWdtZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc2xlZXAtdGltZSIgdGl0bGU9IlRoZSDigJxzbGVlcC10aW1l4oCdIHByb3BlcnR5Ij5zbGVlcC10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tc3luYyIgdGl0bGU9IlRoZSDigJxzeW5j4oCdIHByb3BlcnR5Ij5zeW5jPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iLi4vaHRtbC9Hc3RCdWZmZXIuaHRtbCNHc3RCdWZmZXJGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlckZsYWdzPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS0tZHJvcC1idWZmZXItZmxhZ3MiIHRpdGxlPSJUaGUg4oCcZHJvcC1idWZmZXItZmxhZ3PigJ0gcHJvcGVydHkiPmRyb3AtYnVmZmVyLWZsYWdzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sI0dzdElkZW50aXR5LWhhbmRvZmYiIHRpdGxlPSJUaGUg4oCcaGFuZG9mZuKAnSBzaWduYWwiPmhhbmRvZmY8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdElkZW50aXR5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SWRlbnRpdHkiPkdzdElkZW50aXR5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SWRlbnRpdHkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5EdW1teSBlbGVtZW50IHRoYXQgcGFzc2VzIGluY29taW5nIGRhdGEgdGhyb3VnaCB1bm1vZGlmaWVkLiBJdCBoYXMgc29tZQotdXNlZnVsIGRpYWdub3N0aWMgZnVuY3Rpb25zLCBzdWNoIGFzIG9mZnNldCBhbmQgdGltZXN0YW1wIGNoZWNraW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTIuOC4zLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R2VuZXJpYzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMi44LjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElkZW50aXR5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0SWRlbnRpdHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RJZGVudGl0eTs8L3ByZT4KLTxwPk9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCNHc3RJZGVudGl0eSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdElkZW50aXR5PC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElkZW50aXR5LS1jaGVjay1pbXBlcmZlY3Qtb2Zmc2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2hlY2staW1wZXJmZWN0LW9mZnNldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2hlY2staW1wZXJmZWN0LW9mZnNldOKAnSAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TZW5kIGVsZW1lbnQgbWVzc2FnZXMgaWYgb2Zmc2V0IGFuZCBvZmZzZXRfZW5kIGRvIG5vdCBtYXRjaCB1cC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElkZW50aXR5LS1jaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcOKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U2VuZCBlbGVtZW50IG1lc3NhZ2VzIGlmIHRpbWVzdGFtcHMgYW5kIGR1cmF0aW9ucyBkbyBub3QgbWF0Y2ggdXAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJZGVudGl0eS0tZGF0YXJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkYXRhcmF0ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGF0YXJhdGXigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+KFJlKXRpbWVzdGFtcHMgYnVmZmVycyB3aXRoIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kICgwID0gaW5hY3RpdmUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElkZW50aXR5LS1kcm9wLXByb2JhYmlsaXR5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHJvcC1wcm9iYWJpbGl0eeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZHJvcC1wcm9iYWJpbGl0eeKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBQcm9iYWJpbGl0eSBhIGJ1ZmZlciBpcyBkcm9wcGVkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJZGVudGl0eS0tZHVtcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGR1bXDigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGR1bXDigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RHVtcCBidWZmZXIgY29udGVudHMgdG8gc3Rkb3V0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWRlbnRpdHktLWVycm9yLWFmdGVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZXJyb3ItYWZ0ZXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGVycm9yLWFmdGVy4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkVycm9yIGFmdGVyIE4gYnVmZmVycy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogLTE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElkZW50aXR5LS1sYXN0LW1lc3NhZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsYXN0LW1lc3NhZ2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxhc3QtbWVzc2FnZeKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+bGFzdC1tZXNzYWdlLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWRlbnRpdHktLXNpZ25hbC1oYW5kb2ZmcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNpZ25hbC1oYW5kb2Zmc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2lnbmFsLWhhbmRvZmZz4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+VFJVRTwvc3Bhbj48L2E+LCB0aGUgaWRlbnRpdHkgd2lsbCBlbWl0IGEgaGFuZG9mZiBzaWduYWwgd2hlbiBoYW5kbGluZyBhIGJ1ZmZlci4KLVdoZW4gc2V0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5GQUxTRTwvc3Bhbj48L2E+LCBubyBzaWduYWwgd2lsbCBiZSBlbWl0dGVkLCB3aGljaCBtaWdodCBpbXByb3ZlIHBlcmZvcm1hbmNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJZGVudGl0eS0tc2lsZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2lsZW504oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzaWxlbnTigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPnNpbGVudC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWRlbnRpdHktLXNpbmdsZS1zZWdtZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2luZ2xlLXNlZ21lbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNpbmdsZS1zZWdtZW504oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZXN0YW1wIGJ1ZmZlcnMgYW5kIGVhdCBzZWdtZW50cyBzbyBhcyB0byBhcHBlYXIgYXMgb25lIHNlZ21lbnQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJZGVudGl0eS0tc2xlZXAtdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNsZWVwLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNsZWVwLXRpbWXigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWljcm9zZWNvbmRzIHRvIHNsZWVwIGJldHdlZW4gcHJvY2Vzc2luZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWRlbnRpdHktLXN5bmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzeW5j4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzeW5j4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlN5bmNocm9uaXplIHRvIHBpcGVsaW5lIGNsb2NrLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWRlbnRpdHktLWRyb3AtYnVmZmVyLWZsYWdzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHJvcC1idWZmZXItZmxhZ3PigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRyb3AtYnVmZmVyLWZsYWdz4oCdICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlckZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QnVmZmVyRmxhZ3M8L3NwYW4+PC9hPjwvcHJlPgotPHA+RHJvcCBidWZmZXJzIHdpdGggdGhlIGdpdmVuIGZsYWdzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjg8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWRlbnRpdHktaGFuZG9mZiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGhhbmRvZmbigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJZGVudGl0eTwvc3Bhbj48L2E+ICppZGVudGl0eSwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0QnVmZmVyLmh0bWwjR3N0QnVmZmVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1ZmZlcjwvc3Bhbj48L2E+ICAgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5UaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgYmVmb3JlIHBhc3NpbmcgdGhlIGJ1ZmZlciBkb3duc3RyZWFtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdElkZW50aXR5LWhhbmRvZmYucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWRlbnRpdHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgaWRlbnRpdHkgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGJ1ZmZlciB0aGF0IGp1c3QgaGFzIGJlZW4gcmVjZWl2ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB0aGF0IHJlY2VpdmVkIGl0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2I0ZGI4Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmlucHV0LXNlbGVjdG9yOiBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pZGVudGl0eS5odG1sIiB0aXRsZT0iaWRlbnRpdHkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwiIHRpdGxlPSJtdWx0aXF1ZXVlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci50b3Bfb2ZfcGFnZSI+PC9hPmlucHV0LXNlbGVjdG9yPC9zcGFuPjwvaDI+Ci08cD5pbnB1dC1zZWxlY3RvcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLS1hY3RpdmUtcGFkIiB0aXRsZT0iVGhlIOKAnGFjdGl2ZS1wYWTigJ0gcHJvcGVydHkiPmFjdGl2ZS1wYWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3ItLWNhY2hlLWJ1ZmZlcnMiIHRpdGxlPSJUaGUg4oCcY2FjaGUtYnVmZmVyc+KAnSBwcm9wZXJ0eSI+Y2FjaGUtYnVmZmVyczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3Rvci0tbi1wYWRzIiB0aXRsZT0iVGhlIOKAnG4tcGFkc+KAnSBwcm9wZXJ0eSI+bi1wYWRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3JTeW5jTW9kZSIgdGl0bGU9ImVudW0gR3N0SW5wdXRTZWxlY3RvclN5bmNNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5wdXRTZWxlY3RvclN5bmNNb2RlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLS1zeW5jLW1vZGUiIHRpdGxlPSJUaGUg4oCcc3luYy1tb2Rl4oCdIHByb3BlcnR5Ij5zeW5jLW1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sI0dzdElucHV0U2VsZWN0b3ItLXN5bmMtc3RyZWFtcyIgdGl0bGU9IlRoZSDigJxzeW5jLXN0cmVhbXPigJ0gcHJvcGVydHkiPnN5bmMtc3RyZWFtczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0SW5wdXRTZWxlY3RvciI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RJbnB1dFNlbGVjdG9yIj5Hc3RJbnB1dFNlbGVjdG9yPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwjR3N0SW5wdXRTZWxlY3RvclN5bmNNb2RlIiB0aXRsZT0iZW51bSBHc3RJbnB1dFNlbGVjdG9yU3luY01vZGUiPkdzdElucHV0U2VsZWN0b3JTeW5jTW9kZTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RJbnB1dFNlbGVjdG9yCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+RGlyZWN0IG9uZSBvdXQgb2YgTiBpbnB1dCBzdHJlYW1zIHRvIHRoZSBvdXRwdXQgcGFkLjwvcD4KLTxwPlRoZSBpbnB1dCBwYWRzIGFyZSBmcm9tIGEgR3N0UGFkIHN1YmNsYXNzIGFuZCBoYXZlIGFkZGl0aW9uYWwKLXByb3BlcnRpZXMsIHdoaWNoIHVzZXJzIG1heSBmaW5kIHVzZWZ1bCwgbmFtZWx5OjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLSJydW5uaW5nLXRpbWUiOiBSdW5uaW5nIHRpbWUgb2Ygc3RyZWFtIG9uIHBhZCAoPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPikKLTwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLSJ0YWdzIjogVGhlIGN1cnJlbnRseSBhY3RpdmUgdGFncyBvbiB0aGUgcGFkICg8YSBocmVmPSIuLi9odG1sL0dzdFRhZ0xpc3QuaHRtbCNHc3RUYWdMaXN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0xpc3Q8L3NwYW4+PC9hPiwgYm94ZWQgdHlwZSkKLTwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLSJhY3RpdmUiOiBJZiB0aGUgcGFkIGlzIGN1cnJlbnRseSBhY3RpdmUgKDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+KQotPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotImFsd2F5cy1vayIgOiBNYWtlIGFuIGluYWN0aXZlIHBhZHMgcmV0dXJuIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR1NULUZMT1ctT0s6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9GTE9XX09LPC9zcGFuPjwvYT4gaW5zdGVhZCBvZgotPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHU1QtRkxPVy1OT1QtTElOS0VEOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfRkxPV19OT1RfTElOS0VEPC9zcGFuPjwvYT4KLTwvbGk+Ci08L3VsPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMy43LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KdWxpZW4gTW91dHRlICZsdDtqdWxpZW5AbW91dHRlLm5ldCZndDssIEphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tJmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R2VuZXJpYzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMy43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbmtfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJbnB1dFNlbGVjdG9yLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0SW5wdXRTZWxlY3RvcjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdElucHV0U2VsZWN0b3I7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElucHV0U2VsZWN0b3JTeW5jTW9kZSI+PC9hPjxoMz5lbnVtIEdzdElucHV0U2VsZWN0b3JTeW5jTW9kZTwvaDM+Ci08cD5UaGUgZGlmZmVyZW50IHdheXMgdGhhdCBpbnB1dC1zZWxlY3RvciBjYW4gYmVoYXZlIHdoZW4gaW4gc3luYy1zdHJlYW1zIG1vZGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0SW5wdXRTZWxlY3RvclN5bmNNb2RlLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULUlOUFVULVNFTEVDVE9SLVNZTkMtTU9ERS1BQ1RJVkUtU0VHTUVOVDpDQVBTIj48L2E+R1NUX0lOUFVUX1NFTEVDVE9SX1NZTkNfTU9ERV9BQ1RJVkVfU0VHTUVOVDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5TeW5jIHVzaW5nIHRoZSBjdXJyZW50IGFjdGl2ZSBzZWdtZW50LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtSU5QVVQtU0VMRUNUT1ItU1lOQy1NT0RFLUNMT0NLOkNBUFMiPjwvYT5HU1RfSU5QVVRfU0VMRUNUT1JfU1lOQ19NT0RFX0NMT0NLPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPlN5bmMgdXNpbmcgdGhlIGNsb2NrLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SW5wdXRTZWxlY3Rvci0tYWN0aXZlLXBhZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFjdGl2ZS1wYWTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGFjdGl2ZS1wYWTigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGN1cnJlbnRseSBhY3RpdmUgc2luayBwYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SW5wdXRTZWxlY3Rvci0tY2FjaGUtYnVmZmVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNhY2hlLWJ1ZmZlcnPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNhY2hlLWJ1ZmZlcnPigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+SWYgc2V0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBhbmQgR3N0SW5wdXRTZWxlY3RvcjpzeW5jLXN0cmVhbXMgaXMgYWxzbyBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LAotdGhlIGFjdGl2ZSBwYWQgd2lsbCBjYWNoZSB0aGUgYnVmZmVycyBzdGlsbCBjb25zaWRlcmVkIHZhbGlkIChhZnRlciBjdXJyZW50Ci1ydW5uaW5nIHRpbWUsIHNlZSBzeW5jLW1vZGUpIHRvIGF2b2lkIG1pc3NpbmcgZnJhbWVzIGlmL3doZW4gdGhlIHBhZCBpcwotcmVhY3RpdmF0ZWQuPC9wPgotPHA+VGhlIGFjdGl2ZSBwYWQgbWF5IHB1c2ggbW9yZSBidWZmZXJzIHRoYW4gd2hhdCBpcyBjdXJyZW50bHkgZGlzcGxheWVkL2NvbnN1bWVkCi1hbmQgd2hlbiBjaGFuZ2luZyBwYWRzIHRob3NlIGJ1ZmZlcnMgd2lsbCBiZSBkaXNjYXJkZWQgYW5kIHRoZSBvbmx5IHdheSB0bwotcmVhY3RpdmF0ZSB0aGF0IHBhZCB3aXRob3V0IGxvb3NpbmcgdGhlIGFscmVhZHkgY29uc3VtZWQgYnVmZmVycyBpcyB0byBlbmFibGUgY2FjaGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJbnB1dFNlbGVjdG9yLS1uLXBhZHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxuLXBhZHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG4tcGFkc+KAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIG51bWJlciBvZiBzaW5rIHBhZHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJbnB1dFNlbGVjdG9yLS1zeW5jLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzeW5jLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN5bmMtbW9kZeKAnSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yU3luY01vZGUiIHRpdGxlPSJlbnVtIEdzdElucHV0U2VsZWN0b3JTeW5jTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdElucHV0U2VsZWN0b3JTeW5jTW9kZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TZWxlY3QgaG93IGlucHV0LXNlbGVjdG9yIHdpbGwgc3luYyBidWZmZXJzIHdoZW4gaW4gc3luYy1zdHJlYW1zIG1vZGUuPC9wPgotPHA+Tm90ZSB0aGF0IHdoZW4gdXNpbmcgdGhlICJhY3RpdmUtc2VnbWVudCIgbW9kZSwgdGhlICJhY3RpdmUtc2VnbWVudCIgbWF5Ci1iZSBhaGVhZCBvZiBjdXJyZW50IGNsb2NrIHRpbWUgd2hlbiBzd2l0Y2hpbmcgdGhlIGFjdGl2ZSBwYWQsIGFzIHRoZSBjdXJyZW50Ci1hY3RpdmUgcGFkIG1heSBoYXZlIHB1c2hlZCBtb3JlIGJ1ZmZlcnMgdGhhbiB3aGF0IHdhcyBkaXNwbGF5ZWQvY29uc3VtZWQsCi13aGljaCBtYXkgY2F1c2UgZGVsYXlzIGFuZCBzb21lIG1pc3NpbmcgYnVmZmVycy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogU3luYyB1c2luZyB0aGUgY3VycmVudCBhY3RpdmUgc2VnbWVudDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SW5wdXRTZWxlY3Rvci0tc3luYy1zdHJlYW1zIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3luYy1zdHJlYW1z4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzeW5jLXN0cmVhbXPigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPklmIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gYWxsIGluYWN0aXZlIHN0cmVhbXMgd2lsbCBiZSBzeW5jZWQgdG8gdGhlCi1ydW5uaW5nIHRpbWUgb2YgdGhlIGFjdGl2ZSBzdHJlYW0gb3IgdG8gdGhlIGN1cnJlbnQgY2xvY2suPC9wPgotPHA+VG8gbWFrZSBzdXJlIG5vIGJ1ZmZlcnMgYXJlIGRyb3BwZWQgYnkgaW5wdXQtc2VsZWN0b3IKLXRoYXQgbWlnaHQgYmUgbmVlZGVkIHdoZW4gc3dpdGNoaW5nIHRoZSBhY3RpdmUgcGFkLAotc3luYy1tb2RlIHNob3VsZCBiZSBzZXQgdG8gImNsb2NrIiBhbmQgY2FjaGUtYnVmZmVycyB0byBUUlVFLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHc3RPdXRwdXRTZWxlY3RvciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE91dHB1dFNlbGVjdG9yPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1Mjg0My4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm11bHRpcXVldWU6IEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlucHV0LXNlbGVjdG9yLmh0bWwiIHRpdGxlPSJpbnB1dC1zZWxlY3RvciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sIiB0aXRsZT0ib3V0cHV0LXNlbGVjdG9yIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnRvcF9vZl9wYWdlIj48L2E+bXVsdGlxdWV1ZTwvc3Bhbj48L2gyPgotPHA+bXVsdGlxdWV1ZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtYnVmZmVycyIgdGl0bGU9IlRoZSDigJxleHRyYS1zaXplLWJ1ZmZlcnPigJ0gcHJvcGVydHkiPmV4dHJhLXNpemUtYnVmZmVyczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLWJ5dGVzIiB0aXRsZT0iVGhlIOKAnGV4dHJhLXNpemUtYnl0ZXPigJ0gcHJvcGVydHkiPmV4dHJhLXNpemUtYnl0ZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxleHRyYS1zaXplLXRpbWXigJ0gcHJvcGVydHkiPmV4dHJhLXNpemUtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0taGlnaC1wZXJjZW50IiB0aXRsZT0iVGhlIOKAnGhpZ2gtcGVyY2VudOKAnSBwcm9wZXJ0eSI+aGlnaC1wZXJjZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1sb3ctcGVyY2VudCIgdGl0bGU9IlRoZSDigJxsb3ctcGVyY2VudOKAnSBwcm9wZXJ0eSI+bG93LXBlcmNlbnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbWF4LXNpemUtYnVmZmVycyIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS1idWZmZXJz4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS1idWZmZXJzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLW1heC1zaXplLWJ5dGVzIiB0aXRsZT0iVGhlIOKAnG1heC1zaXplLWJ5dGVz4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS1ieXRlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbWF4LXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS10aW1l4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLXN5bmMtYnktcnVubmluZy10aW1lIiB0aXRsZT0iVGhlIOKAnHN5bmMtYnktcnVubmluZy10aW1l4oCdIHByb3BlcnR5Ij5zeW5jLWJ5LXJ1bm5pbmctdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS11c2UtYnVmZmVyaW5nIiB0aXRsZT0iVGhlIOKAnHVzZS1idWZmZXJpbmfigJ0gcHJvcGVydHkiPnVzZS1idWZmZXJpbmc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLXVubGlua2VkLWNhY2hlLXRpbWUiIHRpdGxlPSJUaGUg4oCcdW5saW5rZWQtY2FjaGUtdGltZeKAnSBwcm9wZXJ0eSI+dW5saW5rZWQtY2FjaGUtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS11c2UtaW50ZXJsZWF2ZSIgdGl0bGU9IlRoZSDigJx1c2UtaW50ZXJsZWF2ZeKAnSBwcm9wZXJ0eSI+dXNlLWludGVybGVhdmU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWhpZ2gtd2F0ZXJtYXJrIiB0aXRsZT0iVGhlIOKAnGhpZ2gtd2F0ZXJtYXJr4oCdIHByb3BlcnR5Ij5oaWdoLXdhdGVybWFyazwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbG93LXdhdGVybWFyayIgdGl0bGU9IlRoZSDigJxsb3ctd2F0ZXJtYXJr4oCdIHByb3BlcnR5Ij5sb3ctd2F0ZXJtYXJrPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InNpZ25hbHNfcmV0dXJuIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic2lnbmFsc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic2lnbmFsc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtb3ZlcnJ1biIgdGl0bGU9IlRoZSDigJxvdmVycnVu4oCdIHNpZ25hbCI+b3ZlcnJ1bjwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtdW5kZXJydW4iIHRpdGxlPSJUaGUg4oCcdW5kZXJydW7igJ0gc2lnbmFsIj51bmRlcnJ1bjwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RNdWx0aVF1ZXVlIj5Hc3RNdWx0aVF1ZXVlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdE11bHRpUXVldWUKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNC44LjIiPjwvYT48cD4KLU11bHRpcXVldWUgaXMgc2ltaWxhciB0byBhIG5vcm1hbCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlPC9zcGFuPjwvYT4gd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwKLWZlYXR1cmVzOgotPC9wPgotPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+TXVsdGlwbGUgc3RyZWFtaGFuZGxpbmc8L2I+PC9wPgotPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci08cD4KLSAgICBUaGUgZWxlbWVudCBoYW5kbGVzIHF1ZXVlaW5nIGRhdGEgb24gbW9yZSB0aGFuIG9uZSBzdHJlYW0gYXQgb25jZS4gVG8KLSAgICBhY2hpZXZlIHN1Y2ggYSBmZWF0dXJlIGl0IGhhcyByZXF1ZXN0IHNpbmsgcGFkcyAoc2lua3UpIGFuZAotICAgICdzb21ldGltZXMnIHNyYyBwYWRzIChzcmN1KS4KLSAgPC9wPgotPHA+Ci0gICAgV2hlbiByZXF1ZXN0aW5nIGEgZ2l2ZW4gc2lua3BhZCB3aXRoIDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXJlcXVlc3QtcGFkIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKCk8L2NvZGU+PC9hPiwKLSAgICB0aGUgYXNzb2NpYXRlZCBzcmNwYWQgZm9yIHRoYXQgc3RyZWFtIHdpbGwgYmUgY3JlYXRlZC4KLSAgICBFeGFtcGxlOiByZXF1ZXN0aW5nIHNpbmsxIHdpbGwgZ2VuZXJhdGUgc3JjMS4KLSAgPC9wPgotPC9saT48L3VsPgotPC9kaXY+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+Ci08cCBjbGFzcz0idGl0bGUiPjxiPk5vbi1zdGFydmF0aW9uIG9uIG11bHRpcGxlIHN0cmVhbXM8L2I+PC9wPgotPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci08cD4KLSAgICBJZiBtb3JlIHRoYW4gb25lIHN0cmVhbSBpcyB1c2VkIHdpdGggdGhlIGVsZW1lbnQsIHRoZSBzdHJlYW1zJyBxdWV1ZXMKLSAgICB3aWxsIGJlIGR5bmFtaWNhbGx5IGdyb3duICh1cCB0byBhIGxpbWl0KSwgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgbm8KLSAgICBzdHJlYW0gaXMgcmlza2luZyBkYXRhIHN0YXJ2YXRpb24uIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGF0IGFueSBnaXZlbgotICAgIHRpbWUgdGhlcmUgYXJlIGF0IGxlYXN0IE4gYnl0ZXMgcXVldWVkIGFuZCBhdmFpbGFibGUgZm9yIGVhY2ggaW5kaXZpZHVhbAotICAgIHN0cmVhbS4KLSAgPC9wPgotPHA+Ci0gICAgSWYgYW4gRU9TIGV2ZW50IGNvbWVzIHRocm91Z2ggYSBzcmNwYWQsIHRoZSBhc3NvY2lhdGVkIHF1ZXVlIHdpbGwgYmUKLSAgICBjb25zaWRlcmVkIGFzICdub3QtZW1wdHknIGluIHRoZSBxdWV1ZS1zaXplLWdyb3dpbmcgYWxnb3JpdGhtLgotICA8L3A+Ci08L2xpPjwvdWw+Ci08L2Rpdj48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KLTxwIGNsYXNzPSJ0aXRsZSI+PGI+Tm9uLWxpbmtlZCBzcmNwYWRzIGdyYWNlZnVsIGhhbmRsaW5nPC9iPjwvcD4KLTx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotPHA+Ci0gICAgSW4gb3JkZXIgdG8gYmV0dGVyIHN1cHBvcnQgZHluYW1pYyBzd2l0Y2hpbmcgYmV0d2VlbiBzdHJlYW1zLCB0aGUgbXVsdGlxdWV1ZQotICAgICh1bmxpa2UgdGhlIGN1cnJlbnQgR1N0cmVhbWVyIHF1ZXVlKSBjb250aW51ZXMgdG8gcHVzaCBidWZmZXJzIG9uIG5vbi1saW5rZWQKLSAgICBwYWRzIHJhdGhlciB0aGFuIHNodXR0aW5nIGRvd24uCi0gIDwvcD4KLTxwPgotICAgIEluIGFkZGl0aW9uLCB0byBwcmV2ZW50IGEgbm9uLWxpbmtlZCBzdHJlYW0gZnJvbSB2ZXJ5IHF1aWNrbHkgY29uc3VtaW5nIGFsbAotICAgIGF2YWlsYWJsZSBidWZmZXJzIGFuZCB0aHVzICdyYWNpbmcgYWhlYWQnIG9mIHRoZSBvdGhlciBzdHJlYW1zLCB0aGUgZWxlbWVudAotICAgIG11c3QgZW5zdXJlIHRoYXQgYnVmZmVycyBhbmQgaW5saW5lZCBldmVudHMgZm9yIGEgbm9uLWxpbmtlZCBzdHJlYW0gYXJlIHB1c2hlZAotICAgIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgd2VyZSByZWNlaXZlZCwgcmVsYXRpdmUgdG8gdGhlIG90aGVyIHN0cmVhbXMKLSAgICBjb250cm9sbGVkIGJ5IHRoZSBlbGVtZW50LiBUaGlzIG1lYW5zIHRoYXQgYSBidWZmZXIgY2Fubm90IGJlIHB1c2hlZCB0byBhCi0gICAgbm9uLWxpbmtlZCBwYWQgYW55IHNvb25lciB0aGFuIGJ1ZmZlcnMgaW4gYW55IG90aGVyIHN0cmVhbSB3aGljaCB3ZXJlIHJlY2VpdmVkCi0gICAgYmVmb3JlIGl0LgotICA8L3A+Ci08L2xpPjwvdWw+Ci08L2Rpdj48L2xpPgotPC9vbD48L2Rpdj4KLTxwPgotPC9wPgotPHA+Ci0gIERhdGEgaXMgcXVldWVkIHVudGlsIG9uZSBvZiB0aGUgbGltaXRzIHNwZWNpZmllZCBieSB0aGUKLSAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIiB0aXRsZT0iVGhlIOKAnG1heC1zaXplLWJ1ZmZlcnPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxtYXgtc2l6ZS1idWZmZXJz4oCdPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tbWF4LXNpemUtYnl0ZXMiIHRpdGxlPSJUaGUg4oCcbWF4LXNpemUtYnl0ZXPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxtYXgtc2l6ZS1ieXRlc+KAnTwvc3Bhbj48L2E+IGFuZC9vcgotICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLW1heC1zaXplLXRpbWUiIHRpdGxlPSJUaGUg4oCcbWF4LXNpemUtdGltZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnG1heC1zaXplLXRpbWXigJ08L3NwYW4+PC9hPiBwcm9wZXJ0aWVzIGhhcyBiZWVuIHJlYWNoZWQuIEFueSBhdHRlbXB0IHRvIHB1c2gKLSAgbW9yZSBidWZmZXJzIGludG8gdGhlIHF1ZXVlIHdpbGwgYmxvY2sgdGhlIHB1c2hpbmcgdGhyZWFkIHVudGlsIG1vcmUgc3BhY2UKLSAgYmVjb21lcyBhdmFpbGFibGUuIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS1idWZmZXJzIiB0aXRsZT0iVGhlIOKAnGV4dHJhLXNpemUtYnVmZmVyc+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGV4dHJhLXNpemUtYnVmZmVyc+KAnTwvc3Bhbj48L2E+LAotPC9wPgotPHA+Ci0gIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS1ieXRlcyIgdGl0bGU9IlRoZSDigJxleHRyYS1zaXplLWJ5dGVz4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcZXh0cmEtc2l6ZS1ieXRlc+KAnTwvc3Bhbj48L2E+IGFuZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtLWV4dHJhLXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxleHRyYS1zaXplLXRpbWXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxleHRyYS1zaXplLXRpbWXigJ08L3NwYW4+PC9hPiBhcmUKLSAgY3VycmVudGx5IHVudXNlZC4KLTwvcD4KLTxwPgotICBUaGUgZGVmYXVsdCBxdWV1ZSBzaXplIGxpbWl0cyBhcmUgNSBidWZmZXJzLCAxME1CIG9mIGRhdGEsIG9yCi0gIHR3byBzZWNvbmQgd29ydGggb2YgZGF0YSwgd2hpY2hldmVyIGlzIHJlYWNoZWQgZmlyc3QuIE5vdGUgdGhhdCB0aGUgbnVtYmVyCi0gIG9mIGJ1ZmZlcnMgd2lsbCBkeW5hbWljYWxseSBncm93IGRlcGVuZGluZyBvbiB0aGUgZmlsbCBsZXZlbCBvZiAKLSAgb3RoZXIgcXVldWVzLgotPC9wPgotPHA+Ci0gIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUtdW5kZXJydW4iIHRpdGxlPSJUaGUg4oCcdW5kZXJydW7igJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcdW5kZXJydW7igJ08L3NwYW4+PC9hPiBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGFsbCBvZiB0aGUgcXVldWVzCi0gIGFyZSBlbXB0eS4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS1vdmVycnVuIiB0aXRsZT0iVGhlIOKAnG92ZXJydW7igJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcb3ZlcnJ1buKAnTwvc3Bhbj48L2E+IHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gb25lIG9mIHRoZQotICBxdWV1ZXMgaXMgZmlsbGVkLgotICBCb3RoIHNpZ25hbHMgYXJlIGVtaXR0ZWQgZnJvbSB0aGUgY29udGV4dCBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLTwvcD4KLTxwPgotICBXaGVuIHVzaW5nIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwjR3N0TXVsdGlRdWV1ZS0tc3luYy1ieS1ydW5uaW5nLXRpbWUiIHRpdGxlPSJUaGUg4oCcc3luYy1ieS1ydW5uaW5nLXRpbWXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxzeW5jLWJ5LXJ1bm5pbmctdGltZeKAnTwvc3Bhbj48L2E+IHRoZSB1bmxpbmtlZCBzdHJlYW1zIHdpbGwKLSAgYmUgdGhyb3R0bGVkIGJ5IHRoZSBoaWdoZXN0IHJ1bm5pbmctdGltZSBvZiBsaW5rZWQgc3RyZWFtcy4gVGhpcyBhbGxvd3MKLSAgZnVydGhlciByZWxpbmtpbmcgb2YgdGhvc2UgdW5saW5rZWQgc3RyZWFtcyB3aXRob3V0IHRoZW0gYmVpbmcgaW4gdGhlCi0gIGZ1dHVyZSAoaS5lLiB0byBhY2hpZXZlIGdhcGxlc3MgcGxheWJhY2spLgotICBXaGVuIGRlYWxpbmcgd2l0aCBzdHJlYW1zIHdoaWNoIGhhdmUgZ290IGRpZmZlcmVudCBjb25zdW1wdGlvbiByZXF1aXJlbWVudHMKLSAgZG93bnN0cmVhbSAoZXg6IHZpZGVvIGRlY29kZXJzIHdoaWNoIHdpbGwgY29uc3VtZSBtb3JlIGJ1ZmZlciAoaW4gdGltZSkgdGhhbgotICBhdWRpbyBkZWNvZGVycyksIGl0IGlzIHJlY29tbWVuZGVkIHRvIGdyb3VwIHN0cmVhbXMgb2YgdGhlIHNhbWUgdHlwZQotICBieSB1c2luZyB0aGUgcGFkICJncm91cC1pZCIgcHJvcGVydHkuIFRoaXMgd2lsbCBmdXJ0aGVyIHRocm90dGxlIHN0cmVhbXMKLSAgaW4gdGltZSB3aXRoaW4gdGhhdCBncm91cC4KLTwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNC44LjMuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FZHdhcmQgSGVydmV5ICZsdDtlZHdhcmRAZmx1ZW5kby5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQuOC4zLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyY18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvbWV0aW1lczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RNdWx0aVF1ZXVlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TXVsdGlRdWV1ZTs8L3ByZT4KLTxwPk9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sI0dzdE11bHRpUXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNdWx0aVF1ZXVlPC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLWJ1ZmZlcnMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxleHRyYS1zaXplLWJ1ZmZlcnPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGV4dHJhLXNpemUtYnVmZmVyc+KAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QW1vdW50IG9mIGJ1ZmZlcnMgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoMD1kaXNhYmxlKSAoTk9UIElNUExFTUVOVEVEKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlRdWV1ZS0tZXh0cmEtc2l6ZS1ieXRlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGV4dHJhLXNpemUtYnl0ZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGV4dHJhLXNpemUtYnl0ZXPigJ0gICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QW1vdW50IG9mIGRhdGEgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoYnl0ZXMsIDA9ZGlzYWJsZSkgKE5PVCBJTVBMRU1FTlRFRCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwNDg1NzYwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLS1leHRyYS1zaXplLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxleHRyYS1zaXplLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGV4dHJhLXNpemUtdGltZeKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkFtb3VudCBvZiB0aW1lIHRoZSBxdWV1ZXMgY2FuIGdyb3cgaWYgb25lIG9mIHRoZW0gaXMgZW1wdHkgKGluIG5zLCAwPWRpc2FibGUpIChOT1QgSU1QTEVNRU5URUQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAzMDAwMDAwMDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLS1oaWdoLXBlcmNlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxoaWdoLXBlcmNlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGhpZ2gtcGVyY2VudOKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkhpZ2ggdGhyZXNob2xkIHBlcmNlbnQgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogOTk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtLWxvdy1wZXJjZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbG93LXBlcmNlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxvdy1wZXJjZW504oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkxvdyB0aHJlc2hvbGQgcGVyY2VudCBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtLW1heC1zaXplLWJ1ZmZlcnMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtc2l6ZS1idWZmZXJz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtc2l6ZS1idWZmZXJz4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heC4gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlICgwPWRpc2FibGUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1zaXplLWJ5dGVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtc2l6ZS1ieXRlc+KAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcywgMD1kaXNhYmxlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTA0ODU3NjA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtLW1heC1zaXplLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtc2l6ZS10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtc2l6ZS10aW1l4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMsIDA9ZGlzYWJsZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDIwMDAwMDAwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtLXN5bmMtYnktcnVubmluZy10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3luYy1ieS1ydW5uaW5nLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN5bmMtYnktcnVubmluZy10aW1l4oCdICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+SWYgZW5hYmxlZCBtdWx0aXF1ZXVlIHdpbGwgc3luY2hyb25pemUgZGVhY3RpdmF0ZWQgb3Igbm90LWxpbmtlZCBzdHJlYW1zCi10byB0aGUgYWN0aXZhdGVkIGFuZCBsaW5rZWQgc3RyZWFtcyBieSB0YWtpbmcgdGhlIHJ1bm5pbmcgdGltZS4KLU90aGVyd2lzZSBtdWx0aXF1ZXVlIHdpbGwgc3luY2hyb25pemUgdGhlIGRlYWN0aXZhdGVkIG9yIG5vdC1saW5rZWQKLXN0cmVhbXMgYnkga2VlcGluZyB0aGUgb3JkZXIgaW4gd2hpY2ggYnVmZmVycyBhbmQgZXZlbnRzIGFycml2ZWQgY29tcGFyZWQKLXRvIGFjdGl2ZSBhbmQgbGlua2VkIHN0cmVhbXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLS11c2UtYnVmZmVyaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlLWJ1ZmZlcmluZ+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdXNlLWJ1ZmZlcmluZ+KAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FbmFibGUgdGhlIGJ1ZmZlcmluZyBvcHRpb24gaW4gbXVsdGlxdWV1ZSBzbyB0aGF0IEJVRkZFUklORyBtZXNzYWdlcyBhcmUKLWVtaXR0ZWQgYmFzZWQgb24gbG93LS9oaWdoLXBlcmNlbnQgdGhyZXNob2xkcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtLXVubGlua2VkLWNhY2hlLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1bmxpbmtlZC1jYWNoZS10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1bmxpbmtlZC1jYWNoZS10aW1l4oCdICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FeHRyYSBidWZmZXJpbmcgaW4gdGltZSBmb3IgdW5saW5rZWQgc3RyZWFtcyAoaWYgJ3N5bmMtYnktcnVubmluZy10aW1lJykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDI1MDAwMDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlRdWV1ZS0tdXNlLWludGVybGVhdmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1c2UtaW50ZXJsZWF2ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdXNlLWludGVybGVhdmXigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BZGp1c3QgdGltZSBsaW1pdHMgYmFzZWQgb24gaW5wdXQgaW50ZXJsZWF2ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtLWhpZ2gtd2F0ZXJtYXJrIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaGlnaC13YXRlcm1hcmvigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGhpZ2gtd2F0ZXJtYXJr4oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPkhpZ2ggdGhyZXNob2xkIHdhdGVybWFyayBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMC45OTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMTA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtLWxvdy13YXRlcm1hcmsiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb3ctd2F0ZXJtYXJr4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb3ctd2F0ZXJtYXJr4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Mb3cgdGhyZXNob2xkIHdhdGVybWFyayBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwLjAxPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS4xMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpUXVldWUtb3ZlcnJ1biI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG92ZXJydW7igJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TXVsdGlRdWV1ZTwvc3Bhbj48L2E+ICptdWx0aXF1ZXVlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+UmVwb3J0cyB0aGF0IG9uZSBvZiB0aGUgcXVldWVzIGluIHRoZSBtdWx0aXF1ZXVlIGlzIGZ1bGwgKG92ZXJydW4pLgotQSBxdWV1ZSBpcyBmdWxsIGlmIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBpbnNpZGUgaXQgKG51bS1idWZmZXJzLCB0aW1lLAotc2l6ZSkgaXMgaGlnaGVyIHRoYW4gdGhlIGJvdW5kYXJ5IHZhbHVlcyB3aGljaCBjYW4gYmUgc2V0IHRocm91Z2ggdGhlCi1HT2JqZWN0IHByb3BlcnRpZXMuPC9wPgotPHA+VGhpcyBjYW4gYmUgdXNlZCBhcyBhbiBpbmRpY2F0b3Igb2YgcHJlLXJvbGwuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TXVsdGlRdWV1ZS1vdmVycnVuLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm11bHRpcXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbXVsdGlxdWV1ZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLXVuZGVycnVuIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdW5kZXJydW7igJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCNHc3RNdWx0aVF1ZXVlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TXVsdGlRdWV1ZTwvc3Bhbj48L2E+ICptdWx0aXF1ZXVlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+VGhpcyBzaWduYWwgaXMgZW1pdHRlZCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHdoZW4gdGhlcmUgaXMKLW5vIGRhdGEgaW4gYW55IG9mIHRoZSBxdWV1ZXMgaW5zaWRlIHRoZSBtdWx0aXF1ZXVlIGluc3RhbmNlICh1bmRlcnJ1bikuPC9wPgotPHA+VGhpcyBpbmRpY2F0ZXMgZWl0aGVyIHN0YXJ2YXRpb24gb3IgRU9TIGZyb20gdGhlIHVwc3RyZWFtIGRhdGEgc291cmNlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNdWx0aVF1ZXVlLXVuZGVycnVuLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm11bHRpcXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbXVsdGlxdWV1ZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njg0ZmI1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5vdXRwdXQtc2VsZWN0b3I6IEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW11bHRpcXVldWUuaHRtbCIgdGl0bGU9Im11bHRpcXVldWUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCIgdGl0bGU9InF1ZXVlMiI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IudG9wX29mX3BhZ2UiPjwvYT5vdXRwdXQtc2VsZWN0b3I8L3NwYW4+PC9oMj4KLTxwPm91dHB1dC1zZWxlY3RvcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yLS1hY3RpdmUtcGFkIiB0aXRsZT0iVGhlIOKAnGFjdGl2ZS1wYWTigJ0gcHJvcGVydHkiPmFjdGl2ZS1wYWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGUiIHRpdGxlPSJlbnVtIEdzdE91dHB1dFNlbGVjdG9yUGFkTmVnb3RpYXRpb25Nb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHc3RPdXRwdXRTZWxlY3Rvci0tcGFkLW5lZ290aWF0aW9uLW1vZGUiIHRpdGxlPSJUaGUg4oCccGFkLW5lZ290aWF0aW9uLW1vZGXigJ0gcHJvcGVydHkiPnBhZC1uZWdvdGlhdGlvbi1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3ItLXJlc2VuZC1sYXRlc3QiIHRpdGxlPSJUaGUg4oCccmVzZW5kLWxhdGVzdOKAnSBwcm9wZXJ0eSI+cmVzZW5kLWxhdGVzdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0T3V0cHV0U2VsZWN0b3IiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3Iub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCNHc3RPdXRwdXRTZWxlY3Rvci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0T3V0cHV0U2VsZWN0b3IiPkdzdE91dHB1dFNlbGVjdG9yPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yUGFkTmVnb3RpYXRpb25Nb2RlIiB0aXRsZT0iZW51bSBHc3RPdXRwdXRTZWxlY3RvclBhZE5lZ290aWF0aW9uTW9kZSI+R3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGU8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdE91dHB1dFNlbGVjdG9yCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkRpcmVjdCBpbnB1dCBzdHJlYW0gdG8gb25lIG91dCBvZiBOIG91dHB1dCBwYWRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTUuNy4zLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U3RlZmFuIEtvc3QgJmx0O3N0ZWZhbi5rb3N0QG5va2lhLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R2VuZXJpYzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNS43LjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmNfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3Iub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE91dHB1dFNlbGVjdG9yLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0T3V0cHV0U2VsZWN0b3I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RPdXRwdXRTZWxlY3Rvcjs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGUiPjwvYT48aDM+ZW51bSBHc3RPdXRwdXRTZWxlY3RvclBhZE5lZ290aWF0aW9uTW9kZTwvaDM+Ci08cD5UbyB3aGF0IG91dHB1dCBwYWQgdGhlIGlucHV0IHN0cmVhbSBzaG91bGQgYmUgZGlyZWN0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtT1VUUFVULVNFTEVDVE9SLVBBRC1ORUdPVElBVElPTi1NT0RFLU5PTkU6Q0FQUyI+PC9hPkdTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfTk9ORTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5kb24ndCBwcm9wYWdhdGUgdGhlIGlucHV0Ci1zdHJlYW0uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1PVVRQVVQtU0VMRUNUT1ItUEFELU5FR09USUFUSU9OLU1PREUtQUxMOkNBUFMiPjwvYT5HU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FMTDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5kaXJlY3QgaW5wdXQgc3RyZWFtIHRvIGFsbAotb3V0cHV0IHBhZHMuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1PVVRQVVQtU0VMRUNUT1ItUEFELU5FR09USUFUSU9OLU1PREUtQUNUSVZFOkNBUFMiPjwvYT5HU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FDVElWRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5kaXJlY3QgaW5wdXQgc3RyZWFtIHRvIHRoZQotY3VycmVudGx5IGFjdGl2ZSBvdXRwdXQgcGFkIGFzIGRlc2NyaWJlZCBieSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5odG1sI0dzdE91dHB1dFNlbGVjdG9yLS1hY3RpdmUtcGFkIiB0aXRsZT0iVGhlIOKAnGFjdGl2ZS1wYWTigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxhY3RpdmUtcGFk4oCdPC9zcGFuPjwvYT4KLXByb3BlcnR5LjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE91dHB1dFNlbGVjdG9yLS1hY3RpdmUtcGFkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYWN0aXZlLXBhZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYWN0aXZlLXBhZOKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5DdXJyZW50bHkgYWN0aXZlIHNyYyBwYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3V0cHV0U2VsZWN0b3ItLXBhZC1uZWdvdGlhdGlvbi1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGFkLW5lZ290aWF0aW9uLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBhZC1uZWdvdGlhdGlvbi1tb2Rl4oCdICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGUiIHRpdGxlPSJlbnVtIEdzdE91dHB1dFNlbGVjdG9yUGFkTmVnb3RpYXRpb25Nb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0T3V0cHV0U2VsZWN0b3JQYWROZWdvdGlhdGlvbk1vZGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIG1vZGUgdG8gYmUgdXNlZCBmb3IgcGFkIG5lZ290aWF0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBBbGw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE91dHB1dFNlbGVjdG9yLS1yZXNlbmQtbGF0ZXN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzZW5kLWxhdGVzdOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzZW5kLWxhdGVzdOKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5SZXNlbmQgbGF0ZXN0IGJ1ZmZlciBhZnRlciBhIHN3aXRjaCB0byBhIG5ldyBwYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLW91dHB1dC1zZWxlY3Rvci5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwjR3N0T3V0cHV0U2VsZWN0b3IiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPdXRwdXRTZWxlY3Rvcjwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaW5wdXQtc2VsZWN0b3IuaHRtbCNHc3RJbnB1dFNlbGVjdG9yIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SW5wdXRTZWxlY3Rvcjwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MGYxOTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5jb3JlZWxlbWVudHM6IEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIFBsdWdpbnMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJyaWdodC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmNvcmVlbGVtZW50czwvc3Bhbj48L2gyPgotPHA+Y29yZWVsZW1lbnRzIOKAlCA8YSBuYW1lPSJwbHVnaW4tY29yZWVsZW1lbnRzIj48L2E+R1N0cmVhbWVyIGNvcmUgZWxlbWVudHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjIuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3Rjb3JlZWxlbWVudHMuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjIuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1jYXBzZmlsdGVyLmh0bWwiIHRpdGxlPSJjYXBzZmlsdGVyIj5jYXBzZmlsdGVyPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXNzIGRhdGEgd2l0aG91dCBtb2RpZmljYXRpb24sIGxpbWl0aW5nIGZvcm1hdHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWNvbmNhdC5odG1sIiB0aXRsZT0iY29uY2F0Ij5jb25jYXQ8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkNvbmNhdGVuYXRlIG11bHRpcGxlIHN0cmVhbXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWRvd25sb2FkYnVmZmVyLmh0bWwiIHRpdGxlPSJkb3dubG9hZGJ1ZmZlciI+ZG93bmxvYWRidWZmZXI8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRvd25sb2FkIEJ1ZmZlciBlbGVtZW50PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc2luay5odG1sIiB0aXRsZT0iZmFrZXNpbmsiPmZha2VzaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5CbGFjayBob2xlIGZvciBkYXRhPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mYWtlc3JjLmh0bWwiIHRpdGxlPSJmYWtlc3JjIj5mYWtlc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QdXNoIGVtcHR5IChubyBkYXRhKSBidWZmZXJzIGFyb3VuZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiIHRpdGxlPSJmZHNpbmsiPmZkc2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V3JpdGUgZGF0YSB0byBhIGZpbGUgZGVzY3JpcHRvcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCIgdGl0bGU9ImZkc3JjIj5mZHNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVhZCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc2luay5odG1sIiB0aXRsZT0iZmlsZXNpbmsiPmZpbGVzaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Xcml0ZSBzdHJlYW0gdG8gYSBmaWxlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwiIHRpdGxlPSJmaWxlc3JjIj5maWxlc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZWFkIGZyb20gYXJiaXRyYXJ5IHBvaW50IGluIGEgZmlsZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZnVubmVsLmh0bWwiIHRpdGxlPSJmdW5uZWwiPmZ1bm5lbDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ti10by0xIHBpcGUgZml0dGluZzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtaWRlbnRpdHkuaHRtbCIgdGl0bGU9ImlkZW50aXR5Ij5pZGVudGl0eTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGFzcyBkYXRhIHdpdGhvdXQgbW9kaWZpY2F0aW9uPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sIiB0aXRsZT0iaW5wdXQtc2VsZWN0b3IiPmlucHV0LXNlbGVjdG9yPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5OLXRvLTEgaW5wdXQgc3RyZWFtIHNlbGVjdG9yPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1tdWx0aXF1ZXVlLmh0bWwiIHRpdGxlPSJtdWx0aXF1ZXVlIj5tdWx0aXF1ZXVlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5NdWx0aXBsZSBkYXRhIHF1ZXVlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCIgdGl0bGU9Im91dHB1dC1zZWxlY3RvciI+b3V0cHV0LXNlbGVjdG9yPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLXRvLU4gb3V0cHV0IHN0cmVhbSBzZWxlY3RvcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCIgdGl0bGU9InF1ZXVlIj5xdWV1ZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2ltcGxlIGRhdGEgcXVldWU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sIiB0aXRsZT0icXVldWUyIj5xdWV1ZTI8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlNpbXBsZSBkYXRhIHF1ZXVlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lmh0bWwiIHRpdGxlPSJzdHJlYW1pZGRlbXV4Ij5zdHJlYW1pZGRlbXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLXRvLU4gb3V0cHV0IHN0cmVhbSBieSBzdHJlYW0taWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sIiB0aXRsZT0idGVlIj50ZWU8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPjEtdG8tTiBwaXBlIGZpdHRpbmc8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwiIHRpdGxlPSJ0eXBlZmluZCI+dHlwZWZpbmQ8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbmRzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyZWFtPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sIiB0aXRsZT0idmFsdmUiPnZhbHZlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Ecm9wcyBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0cyB0aGVtIHRocm91Z2g8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI1MjU2ZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTcxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5xdWV1ZTogR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwiIHRpdGxlPSJxdWV1ZTIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lmh0bWwiIHRpdGxlPSJzdHJlYW1pZGRlbXV4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtc3RyZWFtaWRkZW11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUudG9wX29mX3BhZ2UiPjwvYT5xdWV1ZTwvc3Bhbj48L2gyPgotPHA+cXVldWU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1jdXJyZW50LWxldmVsLWJ1ZmZlcnMiIHRpdGxlPSJUaGUg4oCcY3VycmVudC1sZXZlbC1idWZmZXJz4oCdIHByb3BlcnR5Ij5jdXJyZW50LWxldmVsLWJ1ZmZlcnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1ieXRlcyIgdGl0bGU9IlRoZSDigJxjdXJyZW50LWxldmVsLWJ5dGVz4oCdIHByb3BlcnR5Ij5jdXJyZW50LWxldmVsLWJ5dGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1jdXJyZW50LWxldmVsLXRpbWUiIHRpdGxlPSJUaGUg4oCcY3VycmVudC1sZXZlbC10aW1l4oCdIHByb3BlcnR5Ij5jdXJyZW50LWxldmVsLXRpbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tZmx1c2gtb24tZW9zIiB0aXRsZT0iVGhlIOKAnGZsdXNoLW9uLWVvc+KAnSBwcm9wZXJ0eSI+Zmx1c2gtb24tZW9zPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWVMZWFreSIgdGl0bGU9ImVudW0gR3N0UXVldWVMZWFreSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlTGVha3k8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1sZWFreSIgdGl0bGU9IlRoZSDigJxsZWFreeKAnSBwcm9wZXJ0eSI+bGVha3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIiB0aXRsZT0iVGhlIOKAnG1heC1zaXplLWJ1ZmZlcnPigJ0gcHJvcGVydHkiPm1heC1zaXplLWJ1ZmZlcnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS1ieXRlc+KAnSBwcm9wZXJ0eSI+bWF4LXNpemUtYnl0ZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWF4LXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS10aW1l4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC1idWZmZXJzIiB0aXRsZT0iVGhlIOKAnG1pbi10aHJlc2hvbGQtYnVmZmVyc+KAnSBwcm9wZXJ0eSI+bWluLXRocmVzaG9sZC1idWZmZXJzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC1ieXRlcyIgdGl0bGU9IlRoZSDigJxtaW4tdGhyZXNob2xkLWJ5dGVz4oCdIHByb3BlcnR5Ij5taW4tdGhyZXNob2xkLWJ5dGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLW1pbi10aHJlc2hvbGQtdGltZSIgdGl0bGU9IlRoZSDigJxtaW4tdGhyZXNob2xkLXRpbWXigJ0gcHJvcGVydHkiPm1pbi10aHJlc2hvbGQtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLXNpbGVudCIgdGl0bGU9IlRoZSDigJxzaWxlbnTigJ0gcHJvcGVydHkiPnNpbGVudDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLW92ZXJydW4iIHRpdGxlPSJUaGUg4oCcb3ZlcnJ1buKAnSBzaWduYWwiPm92ZXJydW48L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPlJ1biBGaXJzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtcHVzaGluZyIgdGl0bGU9IlRoZSDigJxwdXNoaW5n4oCdIHNpZ25hbCI+cHVzaGluZzwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS1ydW5uaW5nIiB0aXRsZT0iVGhlIOKAnHJ1bm5pbmfigJ0gc2lnbmFsIj5ydW5uaW5nPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLXVuZGVycnVuIiB0aXRsZT0iVGhlIOKAnHVuZGVycnVu4oCdIHNpZ25hbCI+dW5kZXJydW48L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPlJ1biBGaXJzdDwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RRdWV1ZSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVldWUiPkdzdFF1ZXVlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWVMZWFreSIgdGl0bGU9ImVudW0gR3N0UXVldWVMZWFreSI+R3N0UXVldWVMZWFreTwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RRdWV1ZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkRhdGEgaXMgcXVldWVkIHVudGlsIG9uZSBvZiB0aGUgbGltaXRzIHNwZWNpZmllZCBieSB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIiB0aXRsZT0iVGhlIOKAnG1heC1zaXplLWJ1ZmZlcnPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxtYXgtc2l6ZS1idWZmZXJz4oCdPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1tYXgtc2l6ZS1ieXRlcyIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS1ieXRlc+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnG1heC1zaXplLWJ5dGVz4oCdPC9zcGFuPjwvYT4gYW5kL29yCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tbWF4LXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS10aW1l4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcbWF4LXNpemUtdGltZeKAnTwvc3Bhbj48L2E+IHByb3BlcnRpZXMgaGFzIGJlZW4gcmVhY2hlZC4gQW55IGF0dGVtcHQgdG8gcHVzaAotbW9yZSBidWZmZXJzIGludG8gdGhlIHF1ZXVlIHdpbGwgYmxvY2sgdGhlIHB1c2hpbmcgdGhyZWFkIHVudGlsIG1vcmUgc3BhY2UKLWJlY29tZXMgYXZhaWxhYmxlLjwvcD4KLTxwPlRoZSBxdWV1ZSB3aWxsIGNyZWF0ZSBhIG5ldyB0aHJlYWQgb24gdGhlIHNvdXJjZSBwYWQgdG8gZGVjb3VwbGUgdGhlCi1wcm9jZXNzaW5nIG9uIHNpbmsgYW5kIHNvdXJjZSBwYWQuPC9wPgotPHA+WW91IGNhbiBxdWVyeSBob3cgbWFueSBidWZmZXJzIGFyZSBxdWV1ZWQgYnkgcmVhZGluZyB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlLS1jdXJyZW50LWxldmVsLWJ1ZmZlcnMiIHRpdGxlPSJUaGUg4oCcY3VycmVudC1sZXZlbC1idWZmZXJz4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcY3VycmVudC1sZXZlbC1idWZmZXJz4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkuIFlvdSBjYW4gdHJhY2sgY2hhbmdlcwotYnkgY29ubmVjdGluZyB0byB0aGUgbm90aWZ5OjpjdXJyZW50LWxldmVsLWJ1ZmZlcnMgc2lnbmFsICh3aGljaAotbGlrZSBhbGwgc2lnbmFscyB3aWxsIGJlIGVtaXR0ZWQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCkuIFRoZSBzYW1lCi1hcHBsaWVzIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC10aW1lIiB0aXRsZT0iVGhlIOKAnGN1cnJlbnQtbGV2ZWwtdGltZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGN1cnJlbnQtbGV2ZWwtdGltZeKAnTwvc3Bhbj48L2E+IGFuZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWN1cnJlbnQtbGV2ZWwtYnl0ZXMiIHRpdGxlPSJUaGUg4oCcY3VycmVudC1sZXZlbC1ieXRlc+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGN1cnJlbnQtbGV2ZWwtYnl0ZXPigJ08L3NwYW4+PC9hPiBwcm9wZXJ0aWVzLjwvcD4KLTxwPlRoZSBkZWZhdWx0IHF1ZXVlIHNpemUgbGltaXRzIGFyZSAyMDAgYnVmZmVycywgMTBNQiBvZiBkYXRhLCBvcgotb25lIHNlY29uZCB3b3J0aCBvZiBkYXRhLCB3aGljaGV2ZXIgaXMgcmVhY2hlZCBmaXJzdC48L3A+Ci08cD5BcyBzYWlkIGVhcmxpZXIsIHRoZSBxdWV1ZSBibG9ja3MgYnkgZGVmYXVsdCB3aGVuIG9uZSBvZiB0aGUgc3BlY2lmaWVkCi1tYXhpbXVtcyAoYnl0ZXMsIHRpbWUsIGJ1ZmZlcnMpIGhhcyBiZWVuIHJlYWNoZWQuIFlvdSBjYW4gc2V0IHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtLWxlYWt5IiB0aXRsZT0iVGhlIOKAnGxlYWt54oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcbGVha3nigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoYXQgaW5zdGVhZCBvZiBibG9ja2luZyBpdCBzaG91bGQKLWxlYWsgKGRyb3ApIG5ldyBvciBvbGQgYnVmZmVycy48L3A+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUtdW5kZXJydW4iIHRpdGxlPSJUaGUg4oCcdW5kZXJydW7igJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcdW5kZXJydW7igJ08L3NwYW4+PC9hPiBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSBxdWV1ZSBoYXMgbGVzcyBkYXRhIHRoYW4KLXRoZSBzcGVjaWZpZWQgbWluaW11bSB0aHJlc2hvbGRzIHJlcXVpcmUgKGJ5IGRlZmF1bHQ6IHdoZW4gdGhlIHF1ZXVlIGlzCi1lbXB0eSkuIFRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZS1vdmVycnVuIiB0aXRsZT0iVGhlIOKAnG92ZXJydW7igJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcb3ZlcnJ1buKAnTwvc3Bhbj48L2E+IHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGZpbGxlZAotdXAuIEJvdGggc2lnbmFscyBhcmUgZW1pdHRlZCBmcm9tIHRoZSBjb250ZXh0IG9mIHRoZSBzdHJlYW1pbmcgdGhyZWFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTcuOC44LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R2VuZXJpYzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNy44LjguMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXVlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UXVldWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RRdWV1ZTs8L3ByZT4KLTxwPk9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlPC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWVMZWFreSI+PC9hPjxoMz5lbnVtIEdzdFF1ZXVlTGVha3k8L2gzPgotPHA+QnVmZmVyIGRyb3BwaW5nIHNjaGVtZSB0byBhdm9pZCB0aGUgcXVldWUgdG8gYmxvY2sgd2hlbiBmdWxsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFF1ZXVlTGVha3kubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtUVVFVUUtTk8tTEVBSzpDQVBTIj48L2E+R1NUX1FVRVVFX05PX0xFQUs8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Tm90IExlYWt5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVVRS1MRUFLLVVQU1RSRUFNOkNBUFMiPjwvYT5HU1RfUVVFVUVfTEVBS19VUFNUUkVBTTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5MZWFreSBvbiB1cHN0cmVhbSAobmV3IGJ1ZmZlcnMpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1RVUVVRS1MRUFLLURPV05TVFJFQU06Q0FQUyI+PC9hPkdTVF9RVUVVRV9MRUFLX0RPV05TVFJFQU08L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TGVha3kgb24gZG93bnN0cmVhbSAob2xkIGJ1ZmZlcnMpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC1idWZmZXJzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY3VycmVudC1sZXZlbC1idWZmZXJz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjdXJyZW50LWxldmVsLWJ1ZmZlcnPigJ0gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkN1cnJlbnQgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUtLWN1cnJlbnQtbGV2ZWwtYnl0ZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjdXJyZW50LWxldmVsLWJ5dGVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjdXJyZW50LWxldmVsLWJ5dGVz4oCdICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcykuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS0tY3VycmVudC1sZXZlbC10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY3VycmVudC1sZXZlbC10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjdXJyZW50LWxldmVsLXRpbWXigJ0gICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUtLWZsdXNoLW9uLWVvcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZsdXNoLW9uLWVvc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmx1c2gtb24tZW9z4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EaXNjYXJkIGFsbCBkYXRhIGluIHRoZSBxdWV1ZSB3aGVuIGFuIEVPUyBldmVudCBpcyByZWNlaXZlZCwgYW5kIHBhc3MKLW9uIHRoZSBFT1MgZXZlbnQgYXMgc29vbiBhcyBwb3NzaWJsZSAoaW5zdGVhZCBvZiB3YWl0aW5nIHVudGlsIGFsbAotYnVmZmVycyBpbiB0aGUgcXVldWUgaGF2ZSBiZWVuIHByb2Nlc3NlZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyKS48L3A+Ci08cD5GbHVzaGluZyB0aGUgcXVldWUgb24gRU9TIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIGNhcHR1cmluZyBhbmQgZW5jb2RpbmcKLWZyb20gYSBsaXZlIHNvdXJjZSwgdG8gZmluaXNoIHVwIHRoZSByZWNvcmRpbmcgcXVpY2tseSBpbiBjYXNlcyB3aGVuCi10aGUgZW5jb2RlciBpcyBzbG93LiBOb3RlIHRoYXQgdGhpcyBtaWdodCBtZWFuIHNvbWUgZGF0YSBmcm9tIHRoZSBlbmQgb2YKLXRoZSByZWNvcmRpbmcgZGF0YSBtaWdodCBiZSBsb3N0IHRob3VnaCAobmV2ZXIgbW9yZSB0aGFuIHRoZSBjb25maWd1cmVkCi1tYXguIHNpemVzIHRob3VnaCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS4yPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS0tbGVha3kiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsZWFreeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbGVha3nigJ0gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sI0dzdFF1ZXVlTGVha3kiIHRpdGxlPSJlbnVtIEdzdFF1ZXVlTGVha3kiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZUxlYWt5PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZXJlIHRoZSBxdWV1ZSBsZWFrcywgaWYgYXQgYWxsLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOb3QgTGVha3k8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXVlLS1tYXgtc2l6ZS1idWZmZXJzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXNpemUtYnVmZmVyc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtYnVmZmVyc+KAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXguIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZSAoMD1kaXNhYmxlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS0tbWF4LXNpemUtYnl0ZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtc2l6ZS1ieXRlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtYnl0ZXPigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMsIDA9ZGlzYWJsZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwNDg1NzYwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS0tbWF4LXNpemUtdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1zaXplLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1zaXplLXRpbWXigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTAwMDAwMDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUtLW1pbi10aHJlc2hvbGQtYnVmZmVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1pbi10aHJlc2hvbGQtYnVmZmVyc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWluLXRocmVzaG9sZC1idWZmZXJz4oCdICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NaW4uIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZSB0byBhbGxvdyByZWFkaW5nICgwPWRpc2FibGUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS0tbWluLXRocmVzaG9sZC1ieXRlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1pbi10aHJlc2hvbGQtYnl0ZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1pbi10aHJlc2hvbGQtYnl0ZXPigJ0gICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWluLiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgdG8gYWxsb3cgcmVhZGluZyAoYnl0ZXMsIDA9ZGlzYWJsZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXVlLS1taW4tdGhyZXNob2xkLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtaW4tdGhyZXNob2xkLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1pbi10aHJlc2hvbGQtdGltZeKAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1pbi4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIHRvIGFsbG93IHJlYWRpbmcgKGluIG5zLCAwPWRpc2FibGUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS0tc2lsZW50Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2lsZW504oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzaWxlbnTigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkRvbid0IGVtaXQgcXVldWUgc2lnbmFscy4gTWFrZXMgcXVldWVzIG1vcmUgbGlnaHR3ZWlnaHQgaWYgbm8gc2lnbmFscyBhcmUKLW5lZWRlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUtb3ZlcnJ1biI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG92ZXJydW7igJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwjR3N0UXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRdWV1ZTwvc3Bhbj48L2E+ICpxdWV1ZSwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5SZXBvcnRzIHRoYXQgdGhlIGJ1ZmZlciBiZWNhbWUgZnVsbCAob3ZlcnJ1bikuCi1BIGJ1ZmZlciBpcyBmdWxsIGlmIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBpbnNpZGUgaXQgKG51bS1idWZmZXJzLCB0aW1lLAotc2l6ZSkgaXMgaGlnaGVyIHRoYW4gdGhlIGJvdW5kYXJ5IHZhbHVlcyB3aGljaCBjYW4gYmUgc2V0IHRocm91Z2ggdGhlCi1HT2JqZWN0IHByb3BlcnRpZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UXVldWUtb3ZlcnJ1bi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWV1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBxdWV1ZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS1wdXNoaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHVzaGluZ+KAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlJlcG9ydHMgd2hlbiB0aGUgcXVldWUgaGFzIGVub3VnaCBkYXRhIHRvIHN0YXJ0IHB1c2hpbmcgZGF0YSBhZ2FpbiBvbiB0aGUKLXNvdXJjZSBwYWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UXVldWUtcHVzaGluZy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5xdWV1ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBxdWV1ZSBpbnN0YW5jZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZS1ydW5uaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnVubmluZ+KAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlJlcG9ydHMgdGhhdCBlbm91Z2ggKG1pbi10aHJlc2hvbGQpIGRhdGEgaXMgaW4gdGhlIHF1ZXVlLiBVc2UgdGhpcyBzaWduYWwKLXRvZ2V0aGVyIHdpdGggdGhlIHVuZGVycnVuIHNpZ25hbCB0byBwYXVzZSB0aGUgcGlwZWxpbmUgb24gdW5kZXJydW4gYW5kCi13YWl0IGZvciB0aGUgcXVldWUgdG8gZmlsbC11cCBiZWZvcmUgcmVzdW1lIHBsYXliYWNrLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFF1ZXVlLXJ1bm5pbmcucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cXVldWU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcXVldWUgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUtdW5kZXJydW4iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1bmRlcnJ1buKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUuaHRtbCNHc3RRdWV1ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFF1ZXVlPC9zcGFuPjwvYT4gKnF1ZXVlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlJlcG9ydHMgdGhhdCB0aGUgYnVmZmVyIGJlY2FtZSBlbXB0eSAodW5kZXJydW4pLgotQSBidWZmZXIgaXMgZW1wdHkgaWYgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIGluc2lkZSBpdCAobnVtLWJ1ZmZlcnMsIHRpbWUsCi1zaXplKSBpcyBsb3dlciB0aGFuIHRoZSBib3VuZGFyeSB2YWx1ZXMgd2hpY2ggY2FuIGJlIHNldCB0aHJvdWdoIHRoZQotR09iamVjdCBwcm9wZXJ0aWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFF1ZXVlLXVuZGVycnVuLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnF1ZXVlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHF1ZXVlIGluc3RhbmNlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPlJ1biBGaXJzdDwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmNmIwNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cXVldWUyOiBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCIgdGl0bGU9Im91dHB1dC1zZWxlY3RvciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlLmh0bWwiIHRpdGxlPSJxdWV1ZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtb3V0cHV0LXNlbGVjdG9yLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMiI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi50b3Bfb2ZfcGFnZSI+PC9hPnF1ZXVlMjwvc3Bhbj48L2gyPgotPHA+cXVldWUyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1idWZmZXJzIiB0aXRsZT0iVGhlIOKAnGN1cnJlbnQtbGV2ZWwtYnVmZmVyc+KAnSBwcm9wZXJ0eSI+Y3VycmVudC1sZXZlbC1idWZmZXJzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1ieXRlcyIgdGl0bGU9IlRoZSDigJxjdXJyZW50LWxldmVsLWJ5dGVz4oCdIHByb3BlcnR5Ij5jdXJyZW50LWxldmVsLWJ5dGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtdGltZSIgdGl0bGU9IlRoZSDigJxjdXJyZW50LWxldmVsLXRpbWXigJ0gcHJvcGVydHkiPmN1cnJlbnQtbGV2ZWwtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1oaWdoLXBlcmNlbnQiIHRpdGxlPSJUaGUg4oCcaGlnaC1wZXJjZW504oCdIHByb3BlcnR5Ij5oaWdoLXBlcmNlbnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS1sb3ctcGVyY2VudCIgdGl0bGU9IlRoZSDigJxsb3ctcGVyY2VudOKAnSBwcm9wZXJ0eSI+bG93LXBlcmNlbnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLW1heC1zaXplLWJ1ZmZlcnMiIHRpdGxlPSJUaGUg4oCcbWF4LXNpemUtYnVmZmVyc+KAnSBwcm9wZXJ0eSI+bWF4LXNpemUtYnVmZmVyczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtYnl0ZXMiIHRpdGxlPSJUaGUg4oCcbWF4LXNpemUtYnl0ZXPigJ0gcHJvcGVydHkiPm1heC1zaXplLWJ5dGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS10aW1l4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tcmluZy1idWZmZXItbWF4LXNpemUiIHRpdGxlPSJUaGUg4oCccmluZy1idWZmZXItbWF4LXNpemXigJ0gcHJvcGVydHkiPnJpbmctYnVmZmVyLW1heC1zaXplPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXRlbXAtbG9jYXRpb24iIHRpdGxlPSJUaGUg4oCcdGVtcC1sb2NhdGlvbuKAnSBwcm9wZXJ0eSI+dGVtcC1sb2NhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXRlbXAtcmVtb3ZlIiB0aXRsZT0iVGhlIOKAnHRlbXAtcmVtb3Zl4oCdIHByb3BlcnR5Ij50ZW1wLXJlbW92ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyLS10ZW1wLXRlbXBsYXRlIiB0aXRsZT0iVGhlIOKAnHRlbXAtdGVtcGxhdGXigJ0gcHJvcGVydHkiPnRlbXAtdGVtcGxhdGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXVzZS1idWZmZXJpbmciIHRpdGxlPSJUaGUg4oCcdXNlLWJ1ZmZlcmluZ+KAnSBwcm9wZXJ0eSI+dXNlLWJ1ZmZlcmluZzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tdXNlLXJhdGUtZXN0aW1hdGUiIHRpdGxlPSJUaGUg4oCcdXNlLXJhdGUtZXN0aW1hdGXigJ0gcHJvcGVydHkiPnVzZS1yYXRlLWVzdGltYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWF2Zy1pbi1yYXRlIiB0aXRsZT0iVGhlIOKAnGF2Zy1pbi1yYXRl4oCdIHByb3BlcnR5Ij5hdmctaW4tcmF0ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLXVzZS10YWdzLWJpdHJhdGUiIHRpdGxlPSJUaGUg4oCcdXNlLXRhZ3MtYml0cmF0ZeKAnSBwcm9wZXJ0eSI+dXNlLXRhZ3MtYml0cmF0ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWhpZ2gtd2F0ZXJtYXJrIiB0aXRsZT0iVGhlIOKAnGhpZ2gtd2F0ZXJtYXJr4oCdIHByb3BlcnR5Ij5oaWdoLXdhdGVybWFyazwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWxvdy13YXRlcm1hcmsiIHRpdGxlPSJUaGUg4oCcbG93LXdhdGVybWFya+KAnSBwcm9wZXJ0eSI+bG93LXdhdGVybWFyazwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InNpZ25hbHNfcmV0dXJuIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic2lnbmFsc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic2lnbmFsc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi1vdmVycnVuIiB0aXRsZT0iVGhlIOKAnG92ZXJydW7igJ0gc2lnbmFsIj5vdmVycnVuPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFF1ZXVlMiI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFF1ZXVlMiI+R3N0UXVldWUyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UXVldWUyCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkRhdGEgaXMgcXVldWVkIHVudGlsIG9uZSBvZiB0aGUgbGltaXRzIHNwZWNpZmllZCBieSB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLW1heC1zaXplLWJ1ZmZlcnMiIHRpdGxlPSJUaGUg4oCcbWF4LXNpemUtYnVmZmVyc+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnG1heC1zaXplLWJ1ZmZlcnPigJ08L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtYnl0ZXMiIHRpdGxlPSJUaGUg4oCcbWF4LXNpemUtYnl0ZXPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxtYXgtc2l6ZS1ieXRlc+KAnTwvc3Bhbj48L2E+IGFuZC9vcgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5odG1sI0dzdFF1ZXVlMi0tbWF4LXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS10aW1l4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcbWF4LXNpemUtdGltZeKAnTwvc3Bhbj48L2E+IHByb3BlcnRpZXMgaGFzIGJlZW4gcmVhY2hlZC4gQW55IGF0dGVtcHQgdG8gcHVzaAotbW9yZSBidWZmZXJzIGludG8gdGhlIHF1ZXVlIHdpbGwgYmxvY2sgdGhlIHB1c2hpbmcgdGhyZWFkIHVudGlsIG1vcmUgc3BhY2UKLWJlY29tZXMgYXZhaWxhYmxlLjwvcD4KLTxwPlRoZSBxdWV1ZSB3aWxsIGNyZWF0ZSBhIG5ldyB0aHJlYWQgb24gdGhlIHNvdXJjZSBwYWQgdG8gZGVjb3VwbGUgdGhlCi1wcm9jZXNzaW5nIG9uIHNpbmsgYW5kIHNvdXJjZSBwYWQuPC9wPgotPHA+WW91IGNhbiBxdWVyeSBob3cgbWFueSBidWZmZXJzIGFyZSBxdWV1ZWQgYnkgcmVhZGluZyB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCNHc3RRdWV1ZTItLWN1cnJlbnQtbGV2ZWwtYnVmZmVycyIgdGl0bGU9IlRoZSDigJxjdXJyZW50LWxldmVsLWJ1ZmZlcnPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxjdXJyZW50LWxldmVsLWJ1ZmZlcnPigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eS48L3A+Ci08cD5UaGUgZGVmYXVsdCBxdWV1ZSBzaXplIGxpbWl0cyBhcmUgMTAwIGJ1ZmZlcnMsIDJNQiBvZiBkYXRhLCBvcgotdHdvIHNlY29uZHMgd29ydGggb2YgZGF0YSwgd2hpY2hldmVyIGlzIHJlYWNoZWQgZmlyc3QuPC9wPgotPHA+SWYgeW91IHNldCB0ZW1wLXRlbXBsYXRlIHRvIGEgdmFsdWUgc3VjaCBhcyAvdG1wL2dzdHJlYW1lci1YWFhYWFgsIHRoZSBlbGVtZW50Ci13aWxsIGFsbG9jYXRlIGEgcmFuZG9tIGZyZWUgZmlsZW5hbWUgYW5kIGJ1ZmZlciBkYXRhIGluIHRoZSBmaWxlLgotQnkgdXNpbmcgdGhpcywgaXQgd2lsbCBidWZmZXIgdGhlIGVudGlyZSBzdHJlYW0gZGF0YSBvbiB0aGUgZmlsZSBpbmRlcGVuZGVudGx5Ci1vZiB0aGUgcXVldWUgc2l6ZSBsaW1pdHMsIHRoZXkgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIGJ1ZmZlcmluZyBzdGF0aXN0aWNzLjwvcD4KLTxwPlRoZSB0ZW1wLWxvY2F0aW9uIHByb3BlcnR5IHdpbGwgYmUgdXNlZCB0byBub3RpZnkgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZQotYWxsb2NhdGVkIGZpbGVuYW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTYuOC44LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDssIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTYuOC44LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXF1ZXVlMi5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXVlMi1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFF1ZXVlMjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFF1ZXVlMjs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXVlMi0tY3VycmVudC1sZXZlbC1idWZmZXJzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY3VycmVudC1sZXZlbC1idWZmZXJz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjdXJyZW50LWxldmVsLWJ1ZmZlcnPigJ0gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkN1cnJlbnQgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUyLS1jdXJyZW50LWxldmVsLWJ5dGVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY3VycmVudC1sZXZlbC1ieXRlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY3VycmVudC1sZXZlbC1ieXRlc+KAnSAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUyLS1jdXJyZW50LWxldmVsLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjdXJyZW50LWxldmVsLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGN1cnJlbnQtbGV2ZWwtdGltZeKAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucykuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLWhpZ2gtcGVyY2VudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGhpZ2gtcGVyY2VudOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaGlnaC1wZXJjZW504oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+SGlnaCB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUgKERlcHJlY2F0ZWQ6IHVzZSBoaWdoLXdhdGVybWFyayBpbnN0ZWFkKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA5OTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUyLS1sb3ctcGVyY2VudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxvdy1wZXJjZW504oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb3ctcGVyY2VudOKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Mb3cgdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gc3RhcnQuIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUgKERlcHJlY2F0ZWQ6IHVzZSBsb3ctd2F0ZXJtYXJrIGluc3RlYWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXVlMi0tbWF4LXNpemUtYnVmZmVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1zaXplLWJ1ZmZlcnPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1zaXplLWJ1ZmZlcnPigJ0gICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUyLS1tYXgtc2l6ZS1ieXRlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1zaXplLWJ5dGVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtc2l6ZS1ieXRlc+KAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcywgMD1kaXNhYmxlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjA5NzE1MjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUyLS1tYXgtc2l6ZS10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXNpemUtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtdGltZeKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zLCAwPWRpc2FibGUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAyMDAwMDAwMDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLXJpbmctYnVmZmVyLW1heC1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmluZy1idWZmZXItbWF4LXNpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJpbmctYnVmZmVyLW1heC1zaXpl4oCdICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHJpbmcgYnVmZmVyIGluIGJ5dGVzLiBJZiBzZXQgdG8gMCwgdGhlIHJpbmcKLWJ1ZmZlciBpcyBkaXNhYmxlZC4gRGVmYXVsdCAwLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLXRlbXAtbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0ZW1wLWxvY2F0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0ZW1wLWxvY2F0aW9u4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkxvY2F0aW9uIHRvIHN0b3JlIHRlbXBvcmFyeSBmaWxlcyBpbiAoT25seSByZWFkIHRoaXMgcHJvcGVydHksIHVzZSB0ZW1wLXRlbXBsYXRlIHRvIGNvbmZpZ3VyZSB0aGUgbmFtZSB0ZW1wbGF0ZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLXRlbXAtcmVtb3ZlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGVtcC1yZW1vdmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRlbXAtcmVtb3Zl4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hlbiB0ZW1wLXRlbXBsYXRlIGlzIHNldCwgcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZSB3aGVuIGdvaW5nIHRvIFJFQURZLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLXRlbXAtdGVtcGxhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0ZW1wLXRlbXBsYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0ZW1wLXRlbXBsYXRl4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkZpbGUgdGVtcGxhdGUgdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzIGluLCBzaG91bGQgY29udGFpbiBkaXJlY3RvcnkgYW5kIFhYWFhYWC4gKE5VTEwgPT0gZGlzYWJsZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLXVzZS1idWZmZXJpbmciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1c2UtYnVmZmVyaW5n4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1c2UtYnVmZmVyaW5n4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkVtaXQgR1NUX01FU1NBR0VfQlVGRkVSSU5HIGJhc2VkIG9uIGxvdy0vaGlnaC1wZXJjZW50IHRocmVzaG9sZHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLXVzZS1yYXRlLWVzdGltYXRlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlLXJhdGUtZXN0aW1hdGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZS1yYXRlLWVzdGltYXRl4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RXN0aW1hdGUgdGhlIGJpdHJhdGUgb2YgdGhlIHN0cmVhbSB0byBjYWxjdWxhdGUgdGltZSBsZXZlbC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVldWUyLS1hdmctaW4tcmF0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGF2Zy1pbi1yYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhdmctaW4tcmF0ZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIGF2ZXJhZ2UgaW5wdXQgZGF0YSByYXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLXVzZS10YWdzLWJpdHJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1c2UtdGFncy1iaXRyYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1c2UtdGFncy1iaXRyYXRl4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZSBhIGJpdHJhdGUgZnJvbSB1cHN0cmVhbSB0YWdzIHRvIGVzdGltYXRlIGJ1ZmZlciBkdXJhdGlvbiBpZiBub3QgcHJvdmlkZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLWhpZ2gtd2F0ZXJtYXJrIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaGlnaC13YXRlcm1hcmvigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGhpZ2gtd2F0ZXJtYXJr4oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPkhpZ2ggdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwLjk5PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRdWV1ZTItLWxvdy13YXRlcm1hcmsiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb3ctd2F0ZXJtYXJr4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb3ctd2F0ZXJtYXJr4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Mb3cgdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gc3RhcnQuIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDAuMDE8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1ZXVlMi1vdmVycnVuIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb3ZlcnJ1buKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcXVldWUyLmh0bWwjR3N0UXVldWUyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UXVldWUyPC9zcGFuPjwvYT4gKmdzdHF1ZXVlMiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ODRiYzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtc3RyZWFtaWRkZW11eC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zdHJlYW1pZGRlbXV4OiBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIiB0aXRsZT0icXVldWUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCIgdGl0bGU9InRlZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXgucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtc3RyZWFtaWRkZW11eCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXgudG9wX29mX3BhZ2UiPjwvYT5zdHJlYW1pZGRlbXV4PC9zcGFuPjwvaDI+Ci08cD5zdHJlYW1pZGRlbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXgucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lmh0bWwjR3N0U3RyZWFtaWREZW11eC0tYWN0aXZlLXBhZCIgdGl0bGU9IlRoZSDigJxhY3RpdmUtcGFk4oCdIHByb3BlcnR5Ij5hY3RpdmUtcGFkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFN0cmVhbWlkRGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguaHRtbCNHc3RTdHJlYW1pZERlbXV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTdHJlYW1pZERlbXV4Ij5Hc3RTdHJlYW1pZERlbXV4PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFN0cmVhbWlkRGVtdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSBiYXNpYyBjb25jZXB0IHdhcyBzdGFydGVkIGZyb20gZGUtZnVubmVsaW5nIGVsZW1lbnQgd2hpY2ggcmVzdG9yZXMgb25lCi1zZXJpYWxpemVkIHN0cmVhbSB2aWEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sI0dzdEZ1bm5lbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZ1bm5lbDwvc3Bhbj48L2E+IHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguaHRtbCNHc3RTdHJlYW1pZERlbXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtaWREZW11eDwvc3Bhbj48L2E+Ci1jbGFzc2lmaWVzIGVhY2ggc3RyZWFtIGJhc2Ugb24gc3RyZWFtIGlkcy48L3A+Ci08cD5UaGUgc3RyZWFtIGlkIGRlbXV4IGFsd2F5cyB0YWtlcyBvbmUgaW5wdXQgYW5kIGNoZWNrcyBob3cgbWFueSBzdHJlYW1zCi1hcmUgY29udGFpbmVkIGluIGEgc3RyZWFtIGJ5IFNUUkVBTV9TVEFSVCBldmVudC4gTGlrZXdpc2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sI0dzdEZ1bm5lbCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZ1bm5lbDwvc3Bhbj48L2E+LAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguaHRtbCNHc3RTdHJlYW1pZERlbXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RyZWFtaWREZW11eDwvc3Bhbj48L2E+IGRvZXMgbm90IHN5bmNocm9uaXplIHRoZSBkaWZmZXJlbnQgb3V0cHV0IHN0cmVhbXMuPC9wPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguaHRtbCNHc3RTdHJlYW1pZERlbXV4LS1hY3RpdmUtcGFkIiB0aXRsZT0iVGhlIOKAnGFjdGl2ZS1wYWTigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxhY3RpdmUtcGFk4oCdPC9zcGFuPjwvYT4gcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggb3V0cHV0IHBhZAotaXMgYWN0aXZhdGVkIGF0IHRoZSBtb21lbnQuPC9wPgotPHA+PGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlZV9hbHNvPC9jb2RlPjwvZW0+Ci06IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1mdW5uZWwuaHRtbCNHc3RGdW5uZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGdW5uZWw8L3NwYW4+PC9hPiwgPGEgaHJlZj0iLi4vaHRtbC9Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RyZWFtLXN0YXJ0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQ8L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTguNy42LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+SG9vbkhlZSBMZWUgJmx0O2hvb25oZWUubGVlQGxnZS5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTguNy42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtc3RyZWFtaWRkZW11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3RyZWFtaWREZW11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFN0cmVhbWlkRGVtdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RTdHJlYW1pZERlbXV4OzwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtc3RyZWFtaWRkZW11eC5odG1sI0dzdFN0cmVhbWlkRGVtdXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJlYW1pZERlbXV4PC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXgucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFN0cmVhbWlkRGVtdXgtLWFjdGl2ZS1wYWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxhY3RpdmUtcGFk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhY3RpdmUtcGFk4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBjdXJyZW50bHkgYWN0aXZlIHNyYyBwYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTczYjcyNC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+dGVlOiBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1zdHJlYW1pZGRlbXV4Lmh0bWwiIHRpdGxlPSJzdHJlYW1pZGRlbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCIgdGl0bGU9InR5cGVmaW5kIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXRlZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXRlZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXN0cmVhbWlkZGVtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLnRvcF9vZl9wYWdlIj48L2E+dGVlPC9zcGFuPjwvaDI+Ci08cD50ZWU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLWFsbG9jLXBhZCIgdGl0bGU9IlRoZSDigJxhbGxvYy1wYWTigJ0gcHJvcGVydHkiPmFsbG9jLXBhZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0taGFzLWNoYWluIiB0aXRsZT0iVGhlIOKAnGhhcy1jaGFpbuKAnSBwcm9wZXJ0eSI+aGFzLWNoYWluPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLWxhc3QtbWVzc2FnZSIgdGl0bGU9IlRoZSDigJxsYXN0LW1lc3NhZ2XigJ0gcHJvcGVydHkiPmxhc3QtbWVzc2FnZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1udW0tc3JjLXBhZHMiIHRpdGxlPSJUaGUg4oCcbnVtLXNyYy1wYWRz4oCdIHByb3BlcnR5Ij5udW0tc3JjLXBhZHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZVB1bGxNb2RlIiB0aXRsZT0iZW51bSBHc3RUZWVQdWxsTW9kZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRlZVB1bGxNb2RlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlLS1wdWxsLW1vZGUiIHRpdGxlPSJUaGUg4oCccHVsbC1tb2Rl4oCdIHByb3BlcnR5Ij5wdWxsLW1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtLXNpbGVudCIgdGl0bGU9IlRoZSDigJxzaWxlbnTigJ0gcHJvcGVydHkiPnNpbGVudDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZS0tYWxsb3ctbm90LWxpbmtlZCIgdGl0bGU9IlRoZSDigJxhbGxvdy1ub3QtbGlua2Vk4oCdIHByb3BlcnR5Ij5hbGxvdy1ub3QtbGlua2VkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RUZWUiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFRlZSI+R3N0VGVlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5odG1sI0dzdFRlZVB1bGxNb2RlIiB0aXRsZT0iZW51bSBHc3RUZWVQdWxsTW9kZSI+R3N0VGVlUHVsbE1vZGU8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFRlZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5TcGxpdCBkYXRhIHRvIG11bHRpcGxlIHBhZHMuIEJyYW5jaGluZyB0aGUgZGF0YSBmbG93IGlzIHVzZWZ1bCB3aGVuIGUuZy4KLWNhcHR1cmluZyBhIHZpZGVvIHdoZXJlIHRoZSB2aWRlbyBpcyBzaG93biBvbiB0aGUgc2NyZWVuIGFuZCBhbHNvIGVuY29kZWQgYW5kCi13cml0dGVuIHRvIGEgZmlsZS4gQW5vdGhlciBleGFtcGxlIGlzIHBsYXlpbmcgbXVzaWMgYW5kIGhvb2tpbmcgdXAgYQotdmlzdWFsaXNhdGlvbiBtb2R1bGUuPC9wPgotPHA+T25lIG5lZWRzIHRvIHVzZSBzZXBhcmF0ZSBxdWV1ZSBlbGVtZW50cyAob3IgYSBtdWx0aXF1ZXVlKSBpbiBlYWNoIGJyYW5jaCB0bwotcHJvdmlkZSBzZXBhcmF0ZSB0aHJlYWRzIGZvciBlYWNoIGJyYW5jaC4gT3RoZXJ3aXNlIGEgYmxvY2tlZCBkYXRhZmxvdyBpbiBvbmUKLWJyYW5jaCB3b3VsZCBzdGFsbCB0aGUgb3RoZXIgYnJhbmNoZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5LjcuNCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c29uZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB0ZWUgbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3NpbmsgdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uICE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGdvb20gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBQbGF5IHNvbmcub2dnIGF1ZGlvIGZpbGUgd2hpY2ggbXVzdCBiZSBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQotYW5kIHJlbmRlciB2aXN1YWxpc2F0aW9ucyB1c2luZyB0aGUgZ29vbSBlbGVtZW50ICh0aGlzIGNhbiBiZSBlYXNpZXIgZG9uZQotdXNpbmcgdGhlIHBsYXliaW4gZWxlbWVudCwgdGhpcyBpcyBqdXN0IGFuIGV4YW1wbGUgcGlwZWxpbmUpLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5LjcuNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sI3BsdWdpbi1jb3JlZWxlbWVudHMiPmNvcmVlbGVtZW50czwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HZW5lcmljPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5LjcuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyY18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXRlZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGVlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VGVlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VGVlOzwvcHJlPgotPHA+T3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCNHc3RUZWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUZWU8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRlZVB1bGxNb2RlIj48L2E+PGgzPmVudW0gR3N0VGVlUHVsbE1vZGU8L2gzPgotPHA+VGhlIGRpZmZlcmVudCB3YXlzIHRoYXQgdGVlIGNhbiBiZWhhdmUgaW4gcHVsbCBtb2RlLiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+VEVFX1BVTExfTU9ERV9ORVZFUjwvY29kZT48L2VtPgotCi1kaXNhYmxlcyBwdWxsIG1vZGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VGVlUHVsbE1vZGUubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVEVFLVBVTEwtTU9ERS1ORVZFUjpDQVBTIj48L2E+R1NUX1RFRV9QVUxMX01PREVfTkVWRVI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TmV2ZXIgYWN0aXZhdGUgaW4gcHVsbCBtb2RlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVEVFLVBVTEwtTU9ERS1TSU5HTEU6Q0FQUyI+PC9hPkdTVF9URUVfUFVMTF9NT0RFX1NJTkdMRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Pbmx5IG9uZSBzcmMgcGFkIGNhbiBiZSBhY3RpdmUgaW4gcHVsbCBtb2RlLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRlZS0tYWxsb2MtcGFkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYWxsb2MtcGFk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhbGxvYy1wYWTigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RQYWQuaHRtbCNHc3RQYWQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UGFkPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBwYWQgQUxMT0NBVElPTiBxdWVyaWVzIHdpbGwgYmUgcHJveGllZCB0byAodW51c2VkKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUZWUtLWhhcy1jaGFpbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGhhcy1jaGFpbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaGFzLWNoYWlu4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiB0aGUgZWxlbWVudCBjYW4gb3BlcmF0ZSBpbiBwdXNoIG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRlZS0tbGFzdC1tZXNzYWdlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbGFzdC1tZXNzYWdl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsYXN0LW1lc3NhZ2XigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBtZXNzYWdlIGRlc2NyaWJpbmcgY3VycmVudCBzdGF0dXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUZWUtLW51bS1zcmMtcGFkcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG51bS1zcmMtcGFkc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnVtLXNyYy1wYWRz4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIG51bWJlciBvZiBzb3VyY2UgcGFkcy48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VGVlLS1wdWxsLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwdWxsLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHB1bGwtbW9kZeKAnSAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwjR3N0VGVlUHVsbE1vZGUiIHRpdGxlPSJlbnVtIEdzdFRlZVB1bGxNb2RlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGVlUHVsbE1vZGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+QmVoYXZpb3Igb2YgdGVlIGluIHB1bGwgbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTmV2ZXIgYWN0aXZhdGUgaW4gcHVsbCBtb2RlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUZWUtLXNpbGVudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNpbGVudOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2lsZW504oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Eb24ndCBwcm9kdWNlIGxhc3RfbWVzc2FnZSBldmVudHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRlZS0tYWxsb3ctbm90LWxpbmtlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFsbG93LW5vdC1saW5rZWTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGFsbG93LW5vdC1saW5rZWTigJ0gICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhpcyBwcm9wZXJ0eSBtYWtlcyBzaW5rIHBhZCByZXR1cm4gR1NUX0ZMT1dfT0sgZXZlbiBpZiB0aGVyZSBhcmUgbm8KLXNvdXJjZSBwYWRzIG9yIGFueSBvZiB0aGVtIGlzIGxpbmtlZC48L3A+Ci08cD5UaGlzIGlzIHVzZWZ1bCB0byBhdm9pZCBlcnJvcnMgd2hlbiB5b3UgaGF2ZSBhIGR5bmFtaWMgcGlwZWxpbmUgYW5kIGR1cmluZwotYSByZWNvbm5lY3Rpb24geW91IGNhbiBoYXZlIGFsbCB0aGUgcGFkcyB1bmxpbmtlZCBvciByZW1vdmVkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuNjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwjR3N0SWRlbnRpdHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJZGVudGl0eTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYjc2OC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjgxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT50eXBlZmluZDogR1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0cmVhbWVyIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwiIHRpdGxlPSJ0ZWUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sIiB0aXRsZT0idmFsdmUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdGVlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQudG9wX29mX3BhZ2UiPjwvYT50eXBlZmluZDwvc3Bhbj48L2gyPgotPHA+dHlwZWZpbmQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50LS1jYXBzIiB0aXRsZT0iVGhlIOKAnGNhcHPigJ0gcHJvcGVydHkiPmNhcHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIuLi9odG1sL0dzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC0tZm9yY2UtY2FwcyIgdGl0bGU9IlRoZSDigJxmb3JjZS1jYXBz4oCdIHByb3BlcnR5Ij5mb3JjZS1jYXBzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtLW1pbmltdW0iIHRpdGxlPSJUaGUg4oCcbWluaW11beKAnSBwcm9wZXJ0eSI+bWluaW11bTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtaGF2ZS10eXBlIiB0aXRsZT0iVGhlIOKAnGhhdmUtdHlwZeKAnSBzaWduYWwiPmhhdmUtdHlwZTwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0VHlwZUZpbmRFbGVtZW50Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFR5cGVGaW5kRWxlbWVudCI+R3N0VHlwZUZpbmRFbGVtZW50PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iLi4vaHRtbC9Hc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RUeXBlRmluZEVsZW1lbnQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5EZXRlcm1pbmVzIHRoZSBtZWRpYS10eXBlIG9mIGEgc3RyZWFtLiBJdCBhcHBsaWVzIHR5cGVmaW5kIGZ1bmN0aW9ucyBpbiB0aGUKLW9yZGVyIG9mIHRoZWlyIHJhbmsuIE9uY2UgdGhlIHR5cGUgaGFzIGJlZW4gZGV0ZWN0ZWQgaXQgc2V0cyBpdHMgc3JjIHBhZCBjYXBzCi10byB0aGUgZm91bmQgbWVkaWEgdHlwZS48L3A+Ci08cD5XaGVuZXZlciBhIHR5cGUgaXMgZm91bmQgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sI0dzdFR5cGVGaW5kRWxlbWVudC1oYXZlLXR5cGUiIHRpdGxlPSJUaGUg4oCcaGF2ZS10eXBl4oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGhhdmUtdHlwZeKAnTwvc3Bhbj48L2E+IHNpZ25hbCBpcwotZW1pdHRlZCwgZWl0aGVyIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgb3IgdGhlIGFwcGxpY2F0aW9uIHRocmVhZAotKHRoZSBsYXR0ZXIgbWF5IGhhcHBlbiB3aGVuIHR5cGVmaW5kaW5nIGlzIGRvbmUgcHVsbC1iYXNlZCBmcm9tIHRoZQotc3RhdGUgY2hhbmdlIGZ1bmN0aW9uKS48L3A+Ci08cD5QbHVnaW5zIGNhbiByZWdpc3RlciBjdXN0b20gdHlwZWZpbmRlcnMgYnkgdXNpbmcgPGEgaHJlZj0iLi4vaHRtbC9Hc3RUeXBlRmluZEZhY3RvcnkuaHRtbCNHc3RUeXBlRmluZEZhY3Rvcnktc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRGYWN0b3J5PC9zcGFuPjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMC44LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXBsdWdpbi1jb3JlZWxlbWVudHMuaHRtbCNwbHVnaW4tY29yZWVsZW1lbnRzIj5jb3JlZWxlbWVudHM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5CZW5qYW1pbiBPdHRlICZsdDtpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R2VuZXJpYzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMC44LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kRWxlbWVudC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFR5cGVGaW5kRWxlbWVudDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFR5cGVGaW5kRWxlbWVudDs8L3ByZT4KLTxwPk9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdHlwZWZpbmQuaHRtbCNHc3RUeXBlRmluZEVsZW1lbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUeXBlRmluZEVsZW1lbnQ8L3NwYW4+PC9hPiBkYXRhIHN0cnVjdHVyZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VHlwZUZpbmRFbGVtZW50LS1jYXBzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2Fwc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2Fwc+KAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5kZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RUeXBlRmluZEVsZW1lbnQtLWZvcmNlLWNhcHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmb3JjZS1jYXBz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmb3JjZS1jYXBz4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vaHRtbC9Hc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPmZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kRWxlbWVudC0tbWluaW11bSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1pbmltdW3igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1pbmltdW3igJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+bWluaW11bSBwcm9iYWJpbGl0eSByZXF1aXJlZCB0byBhY2NlcHQgY2Fwcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDEwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kRWxlbWVudC1oYXZlLXR5cGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxoYXZlLXR5cGXigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXR5cGVmaW5kLmh0bWwjR3N0VHlwZUZpbmRFbGVtZW50Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VHlwZUZpbmRFbGVtZW50PC9zcGFuPjwvYT4gKnR5cGVmaW5kLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBwcm9iYWJpbGl0eSwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2h0bWwvR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICAgICAgICAgICAgKmNhcHMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlRoaXMgc2lnbmFsIGdldHMgZW1pdHRlZCB3aGVuIHRoZSB0eXBlIGFuZCBpdHMgcHJvYmFiaWxpdHkgaGFzCi1iZWVuIGZvdW5kLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFR5cGVGaW5kRWxlbWVudC1oYXZlLXR5cGUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dHlwZWZpbmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgdHlwZWZpbmQgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHJvYmFiaWxpdHk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcHJvYmFiaWxpdHkgb2YgdGhlIHR5cGUgZm91bmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBjYXBzIG9mIHRoZSB0eXBlIGZvdW5kPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWFkZmE0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnZhbHZlOiBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIiB0aXRsZT0idHlwZWZpbmQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3RyZWFtZXIgUGx1Z2lucyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUudG9wX29mX3BhZ2UiPjwvYT52YWx2ZTwvc3Bhbj48L2gyPgotPHA+dmFsdmU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCNHc3RWYWx2ZS0tZHJvcCIgdGl0bGU9IlRoZSDigJxkcm9w4oCdIHByb3BlcnR5Ij5kcm9wPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0VmFsdmUiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sI0dzdFZhbHZlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RWYWx2ZSI+R3N0VmFsdmU8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIuLi9odG1sL0dzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii4uL2h0bWwvR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZhbHZlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIHZhbHZlIGlzIGEgc2ltcGxlIGVsZW1lbnQgdGhhdCBkcm9wcyBidWZmZXJzIHdoZW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5odG1sI0dzdFZhbHZlLS1kcm9wIiB0aXRsZT0iVGhlIOKAnGRyb3DigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxkcm9w4oCdPC9zcGFuPjwvYT4KLXByb3BlcnR5IGlzIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gYW5kIGxldHMgdGhlbiB0aHJvdWdoIG90aGVyd2lzZS48L3A+Ci08cD5BbnkgZG93bnN0cmVhbSBlcnJvciByZWNlaXZlZCB3aGlsZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLXZhbHZlLmh0bWwjR3N0VmFsdmUtLWRyb3AiIHRpdGxlPSJUaGUg4oCcZHJvcOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGRyb3DigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4KLWlzIGlnbm9yZWQuIFNvIGRvd25zdHJlYW0gZWxlbWVudCBjYW4gYmUgc2V0IHRvICA8YSBocmVmPSIuLi9odG1sL0dzdEVsZW1lbnQuaHRtbCNHU1QtU1RBVEUtTlVMTDpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R1NUX1NUQVRFX05VTEw8L2NvZGU+PC9hPiBhbmQgcmVtb3ZlZCwKLXdpdGhvdXQgdXNpbmcgcGFkIGJsb2NraW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjEuNy40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1wbHVnaW4tY29yZWVsZW1lbnRzLmh0bWwjcGx1Z2luLWNvcmVlbGVtZW50cyI+Y29yZWVsZW1lbnRzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+T2xpdmllciBDcmV0ZSAmbHQ7b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMS43LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZhbHZlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VmFsdmU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWYWx2ZTs8L3ByZT4KLTxwPlRoZSBwcml2YXRlIHZhbHZlIHN0cnVjdHVyZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3RyZWFtZXItcGx1Z2lucy12YWx2ZS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmFsdmUtLWRyb3AiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkcm9w4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkcm9w4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZXRoZXIgdG8gZHJvcCBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0IHRoZW0gdGhyb3VnaC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvaG9tZS5wbmcgYi9kb2NzL3BsdWdpbnMvaHRtbC9ob21lLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4OWQ0Ni4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9ob21lLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2luZGV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWM5NDZmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R1N0cmVhbWVyIENvcmUgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsOiBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdHJlYW1lciBFbGVtZW50cyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPGRpdiBjbGFzcz0iYm9vayI+Ci08ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgotPGRpdj4KLTxkaXY+PHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRoIHZhbGlnbj0ibWlkZGxlIj48cCBjbGFzcz0idGl0bGUiPkdTdHJlYW1lciBDb3JlIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvcD48L3RoPjwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXY+PHAgY2xhc3M9InJlbGVhc2VpbmZvIj4KLSAgICAgIGZvciBHU3RyZWFtZXIgQ29yZSBQbHVnaW5zIDEuMCAoMS4xMC40KQotICAgICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgb24tbGluZSBhdAotICAgICAgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItcGx1Z2lucy9odG1sLyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItcGx1Z2lucy9odG1sLzwvYT4uCi0gICAgPC9wPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsIGNsYXNzPSJ0b2MiPgotPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDAxLmh0bWwiPmdzdHJlYW1lciBFbGVtZW50czwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtY2Fwc2ZpbHRlci5odG1sIj5jYXBzZmlsdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1jb25jYXQuaHRtbCI+Y29uY2F0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1kb3dubG9hZGJ1ZmZlci5odG1sIj5kb3dubG9hZGJ1ZmZlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmFrZXNpbmsuaHRtbCI+ZmFrZXNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZha2VzcmMuaHRtbCI+ZmFrZXNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzaW5rLmh0bWwiPmZkc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtZmRzcmMuaHRtbCI+ZmRzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZpbGVzaW5rLmh0bWwiPmZpbGVzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwiPmZpbGVzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWZ1bm5lbC5odG1sIj5mdW5uZWw8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdHJlYW1lci1wbHVnaW5zLWlkZW50aXR5Lmh0bWwiPmlkZW50aXR5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1pbnB1dC1zZWxlY3Rvci5odG1sIj5pbnB1dC1zZWxlY3RvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtbXVsdGlxdWV1ZS5odG1sIj5tdWx0aXF1ZXVlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1vdXRwdXQtc2VsZWN0b3IuaHRtbCI+b3V0cHV0LXNlbGVjdG9yPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZTIuaHRtbCI+cXVldWUyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy1xdWV1ZS5odG1sIj5xdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtc3RyZWFtaWRkZW11eC5odG1sIj5zdHJlYW1pZGRlbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10ZWUuaHRtbCI+dGVlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3RyZWFtZXItcGx1Z2lucy10eXBlZmluZC5odG1sIj50eXBlZmluZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtdmFsdmUuaHRtbCI+dmFsdmU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDAyLmh0bWwiPmdzdHJlYW1lciBQbHVnaW5zPC9hPjwvc3Bhbj48L2R0PgotPGRkPjxkbD48ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0cmVhbWVyLXBsdWdpbnMtcGx1Z2luLWNvcmVlbGVtZW50cy5odG1sIj5jb3JlZWxlbWVudHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdTdHJlYW1lciBjb3JlIGVsZW1lbnRzPC9zcGFuPgotPC9kdD48L2RsPjwvZGQ+Ci08L2RsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvbGVmdC1pbnNlbnNpdGl2ZS5wbmcgYi9kb2NzL3BsdWdpbnMvaHRtbC9sZWZ0LWluc2Vuc2l0aXZlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjExNDhmYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9sZWZ0LWluc2Vuc2l0aXZlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2xlZnQucG5nIGIvZG9jcy9wbHVnaW5zL2h0bWwvbGVmdC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNjQ5MTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvbGVmdC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9yaWdodC1pbnNlbnNpdGl2ZS5wbmcgYi9kb2NzL3BsdWdpbnMvaHRtbC9yaWdodC1pbnNlbnNpdGl2ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZWZhMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvcmlnaHQtaW5zZW5zaXRpdmUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvcmlnaHQucG5nIGIvZG9jcy9wbHVnaW5zL2h0bWwvcmlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzM2MWE2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL3JpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL3N0eWxlLmNzcyBiL2RvY3MvcGx1Z2lucy9odG1sL3N0eWxlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3NTQyMC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9zdHlsZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotYm9keQotewotICBmb250LWZhbWlseTogY2FudGFyZWxsLCBzYW5zLXNlcmlmOwotfQotLnN5bm9wc2lzLCAuY2xhc3NzeW5vcHNpcwotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMS8yICovCi0gIGJhY2tncm91bmQ6ICNlZWVlZWM7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMjM4LCAyMzgsIDIzNiwgMC41KTsKLSAgYm9yZGVyOiBzb2xpZCAxcHggcmdiKDIzOCwgMjM4LCAyMzYpOwotICBwYWRkaW5nOiAwLjVlbTsKLX0KLS5wcm9ncmFtbGlzdGluZwotewotICAvKiB0YW5nbzpza3kgYmx1ZSAwLzEgKi8KLSAgLyogZmFsbGJhY2sgZm9yIG5vIHJnYmEgc3VwcG9ydCAqLwotICBiYWNrZ3JvdW5kOiAjZTZmM2ZmOwotICBib3JkZXI6IHNvbGlkIDFweCAjNzI5ZmNmOwotICBiYWNrZ3JvdW5kOiByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMSk7Ci0gIGJvcmRlcjogc29saWQgMXB4IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgcGFkZGluZzogMC41ZW07Ci19Ci0udmFyaWFibGVsaXN0Ci17Ci0gIHBhZGRpbmc6IDRweDsKLSAgbWFyZ2luLWxlZnQ6IDNlbTsKLX0KLS52YXJpYWJsZWxpc3QgdGQ6Zmlyc3QtY2hpbGQKLXsKLSAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLQotZGl2LmdhbGxlcnktZmxvYXQKLXsKLSAgZmxvYXQ6IGxlZnQ7Ci0gIHBhZGRpbmc6IDEwcHg7Ci19Ci1kaXYuZ2FsbGVyeS1mbG9hdCBpbWcKLXsKLSAgYm9yZGVyLXN0eWxlOiBub25lOwotfQotZGl2LmdhbGxlcnktc3BhY2VyCi17Ci0gIGNsZWFyOiBib3RoOwotfQotCi1hLCBhOnZpc2l0ZWQKLXsKLSAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAvKiB0YW5nbzpza3kgYmx1ZSAyICovCi0gIGNvbG9yOiAjMzQ2NWE0OwotfQotYTpob3ZlcgotewotICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLSAgLyogdGFuZ286c2t5IGJsdWUgMSAqLwotICBjb2xvcjogIzcyOWZjZjsKLX0KLQotZGl2LmluZm9ybWFsdGFibGUgdGFibGUKLXsKLSAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKLSAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNlbTsKLSAgYm9yZGVyOiBub25lOwotfQotCi1kaXYuaW5mb3JtYWx0YWJsZSB0YWJsZSB0ZCwgZGl2LmluZm9ybWFsdGFibGUgdGFibGUgdGgKLXsKLSAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLQotLmZ1bmN0aW9uX3R5cGUsCi0udmFyaWFibGVfdHlwZSwKLS5wcm9wZXJ0eV90eXBlLAotLnNpZ25hbF90eXBlLAotLnBhcmFtZXRlcl9uYW1lLAotLnN0cnVjdF9tZW1iZXJfbmFtZSwKLS51bmlvbl9tZW1iZXJfbmFtZSwKLS5kZWZpbmVfa2V5d29yZCwKLS5kYXRhdHlwZV9rZXl3b3JkLAotLnR5cGVkZWZfa2V5d29yZAotewotICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLyogZGltIG5vbi1wcmltYXJ5IGNvbHVtbnMgKi8KLS5jX3B1bmN0dWF0aW9uLAotLmZ1bmN0aW9uX3R5cGUsCi0udmFyaWFibGVfdHlwZSwKLS5wcm9wZXJ0eV90eXBlLAotLnNpZ25hbF90eXBlLAotLmRlZmluZV9rZXl3b3JkLAotLmRhdGF0eXBlX2tleXdvcmQsCi0udHlwZWRlZl9rZXl3b3JkLAotLnByb3BlcnR5X2ZsYWdzLAotLnNpZ25hbF9mbGFncywKLS5wYXJhbWV0ZXJfYW5ub3RhdGlvbnMsCi0uZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMsCi0uc3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucywKLS51bmlvbl9tZW1iZXJfYW5ub3RhdGlvbnMKLXsKLSAgY29sb3I6ICM4ODhhODU7Ci19Ci0KLS5mdW5jdGlvbl90eXBlIGEsCi0uZnVuY3Rpb25fdHlwZSBhOnZpc2l0ZWQsCi0uZnVuY3Rpb25fdHlwZSBhOmhvdmVyLAotLnByb3BlcnR5X3R5cGUgYSwKLS5wcm9wZXJ0eV90eXBlIGE6dmlzaXRlZCwKLS5wcm9wZXJ0eV90eXBlIGE6aG92ZXIsCi0uc2lnbmFsX3R5cGUgYSwKLS5zaWduYWxfdHlwZSBhOnZpc2l0ZWQsCi0uc2lnbmFsX3R5cGUgYTpob3ZlciwKLS5zaWduYWxfZmxhZ3MgYSwKLS5zaWduYWxfZmxhZ3MgYTp2aXNpdGVkLAotLnNpZ25hbF9mbGFncyBhOmhvdmVyCi17Ci0gY29sb3I6ICM3MjlmY2Y7Ci19Ci0KLXRkIHAKLXsKLSAgbWFyZ2luOiAwLjI1ZW07Ci19Ci0KLWRpdi50YWJsZSB0YWJsZQotewotICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICBib3JkZXItc3BhY2luZzogMHB4OwotICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLwotICBib3JkZXI6IHNvbGlkIDFweCAjYmFiZGI2OwotfQotCi1kaXYudGFibGUgdGFibGUgdGQsIGRpdi50YWJsZSB0YWJsZSB0aAotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLwotICBib3JkZXI6IHNvbGlkIDFweCAjYmFiZGI2OwotICBwYWRkaW5nOiAzcHg7Ci0gIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLWRpdi50YWJsZSB0YWJsZSB0aAotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMiAqLwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDNkN2NmOwotfQotCi1oNAotewotICBjb2xvcjogIzU1NTc1MzsKLSAgbWFyZ2luLXRvcDogMWVtOwotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLWhyCi17Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSAxICovCi0gIGNvbG9yOiAjZDNkN2NmOwotICBiYWNrZ3JvdW5kOiAjZDNkN2NmOwotICBib3JkZXI6IG5vbmUgMHB4OwotICBoZWlnaHQ6IDFweDsKLSAgY2xlYXI6IGJvdGg7Ci0gIG1hcmdpbjogMi4wZW0gMGVtIDIuMGVtIDBlbTsKLX0KLQotZGwudG9jIGR0Ci17Ci0gIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07Ci19Ci0KLWRsLnRvYyA+IGR0Ci17Ci0gIHBhZGRpbmctdG9wOiAwLjI1ZW07Ci0gIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi1kbC50b2MgPiBkbAotewotICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Ci19Ci0KLS5wYXJhbWV0ZXIKLXsKLSAgZm9udC1zdHlsZTogbm9ybWFsOwotfQotCi0uZm9vdGVyCi17Ci0gIHBhZGRpbmctdG9wOiAzLjVlbTsKLSAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KLSAgY29sb3I6ICNiYWJkYjY7Ci0gIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgZm9udC1zaXplOiA4MCU7Ci19Ci0KLS5pbmZvcm1hbGZpZ3VyZSwKLS5maWd1cmUKLXsKLSAgbWFyZ2luOiAxZW07Ci19Ci0KLS5pbmZvcm1hbGV4YW1wbGUsCi0uZXhhbXBsZQotewotICBtYXJnaW4tdG9wOiAxZW07Ci0gIG1hcmdpbi1ib3R0b206IDFlbTsKLX0KLQotLndhcm5pbmcKLXsKLSAgLyogdGFuZ286b3JhbmdlIDAvMSAqLwotICBiYWNrZ3JvdW5kOiAjZmZlZWQ5OwotICBiYWNrZ3JvdW5kOiByZ2JhKDI1MiwgMTc1LCA2MiwgMC4xKTsKLSAgYm9yZGVyLWNvbG9yOiAjZmZiMDRmOwotICBib3JkZXItY29sb3I6IHJnYmEoMjUyLCAxNzUsIDYyLCAwLjIpOwotfQotLm5vdGUKLXsKLSAgLyogdGFuZ286Y2hhbWVsZW9uIDAvMC41ICovCi0gIGJhY2tncm91bmQ6ICNkOGZmYjI7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMTM4LCAyMjYsIDUyLCAwLjEpOwotICBib3JkZXItY29sb3I6ICNhYmY1NjI7Ci0gIGJvcmRlci1jb2xvcjogcmdiYSgxMzgsIDIyNiwgNTIsIDAuMik7Ci19Ci1kaXYuYmxvY2txdW90ZQotewotICBib3JkZXItY29sb3I6ICNlZWVlZWM7Ci19Ci0ubm90ZSwgLndhcm5pbmcsIGRpdi5ibG9ja3F1b3RlCi17Ci0gIHBhZGRpbmc6IDAuNWVtOwotICBib3JkZXItd2lkdGg6IDFweDsKLSAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKLSAgbWFyZ2luOiAyZW07Ci19Ci0ubm90ZSBwLCAud2FybmluZyBwCi17Ci0gIG1hcmdpbjogMDsKLX0KLQotZGl2Lndhcm5pbmcgaDMudGl0bGUsCi1kaXYubm90ZSBoMy50aXRsZQotewotICBkaXNwbGF5OiBub25lOwotfQotCi1wICsgZGl2LnNlY3Rpb24KLXsKLSAgbWFyZ2luLXRvcDogMWVtOwotfQotCi1kaXYucmVmbmFtZWRpdiwKLWRpdi5yZWZzeW5vcHNpc2RpdiwKLWRpdi5yZWZzZWN0MSwKLWRpdi5yZWZzZWN0MiwKLWRpdi50b2MsCi1kaXYuc2VjdGlvbgotewotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLS8qIGJsb2IgbGlua3MgKi8KLWgyIC5leHRyYWxpbmtzLCBoMyAuZXh0cmFsaW5rcwotewotICBmbG9hdDogcmlnaHQ7Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCi0gIGNvbG9yOiAjYmFiZGI2OwotICBmb250LXNpemU6IDgwJTsKLSAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotLmxpbmVhcnQKLXsKLSAgY29sb3I6ICNkM2Q3Y2Y7Ci0gIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci19Ci0KLS5hbm5vdGF0aW9uCi17Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSA1ICovCi0gIGNvbG9yOiAjNTU1NzUzOwotICBmb250LXdlaWdodDogbm9ybWFsOwotfQotCi0uc3RydWN0ZmllbGQKLXsKLSAgZm9udC1zdHlsZTogbm9ybWFsOwotICBmb250LXdlaWdodDogbm9ybWFsOwotfQotCi1hY3JvbnltLGFiYnIgCi17Ci0gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgZ3JheTsKLX0KLQotLyogY29kZSBsaXN0aW5ncyAqLwotCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAubm9ybWFsLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLm5vcm1hbCBhLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLm51bWJlciwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jYnJhY2tldCwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5zeW1ib2wgICAgIHsgY29sb3I6ICM1NTU3NTM7IH0KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jb21tZW50LAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLmxpbmVudW0gICAgeyBjb2xvcjogI2JhYmRiNjsgfSAvKiB0YW5nbzogYWx1bWluaXVtIDMgKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5mdW5jdGlvbiwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5mdW5jdGlvbiBhLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnByZXByb2MgICAgeyBjb2xvcjogIzIwNGE4NzsgfSAvKiB0YW5nbzogc2t5IGJsdWUgMyAgKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5zdHJpbmcgICAgIHsgY29sb3I6ICNhZDdmYTg7IH0gLyogdGFuZ286IHBsdW0gKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5rZXl3b3JkLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnVzZXJ0eXBlLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnR5cGUsCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAudHlwZSBhICAgICB7IGNvbG9yOiAjNGU5YTA2OyB9IC8qIHRhbmdvOiBjaGFtZWxlb24gMyAgKi8KLQotLmxpc3RpbmdfZnJhbWUgewotICAvKiB0YW5nbzpza3kgYmx1ZSAxICovCi0gIGJvcmRlcjogc29saWQgMXB4ICM3MjlmY2Y7Ci0gIGJvcmRlcjogc29saWQgMXB4IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgcGFkZGluZzogMHB4OwotfQotCi0ubGlzdGluZ19saW5lcywgLmxpc3RpbmdfY29kZSB7Ci0gIG1hcmdpbi10b3A6IDBweDsKLSAgbWFyZ2luLWJvdHRvbTogMHB4OwotICBwYWRkaW5nOiAwLjVlbTsKLX0KLS5saXN0aW5nX2xpbmVzIHsKLSAgLyogdGFuZ286c2t5IGJsdWUgMC41ICovCi0gIGJhY2tncm91bmQ6ICNhNmM1ZTM7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgLyogdGFuZ286YWx1bWluaXVtIDYgKi8KLSAgY29sb3I6ICMyZTM0MzY7Ci19Ci0ubGlzdGluZ19jb2RlIHsKLSAgLyogdGFuZ286c2t5IGJsdWUgMCAqLwotICBiYWNrZ3JvdW5kOiAjZTZmM2ZmOwotICBiYWNrZ3JvdW5kOiByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMSk7Ci19Ci0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyB7Ci0gIC8qIG92ZXJyaWRlIGZyb20gcHJldmlvdXMgKi8KLSAgYm9yZGVyOiBub25lIDBweDsKLSAgcGFkZGluZzogMHB4OwotICBiYWNrZ3JvdW5kOiBub25lOwotfQotLmxpc3RpbmdfbGluZXMgcHJlLCAubGlzdGluZ19jb2RlIHByZSB7Ci0gIG1hcmdpbjogMHB4OwotfQotCi1AbWVkaWEgc2NyZWVuIHsKLSAgLyogdGhlc2UgaGF2ZSBhIDxzdXA+IGFzIGEgZmlyc3QgY2hpbGQsIGJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gcGFyZW50IHNlbGVjdG9ycwotICAgKiB3ZSBjYW4ndCB1c2UgdGhhdC4gKi8KLSAgYS5mb290bm90ZQotICB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDogMGVtICEgaW1wb3J0YW50OwotICB9Ci0gIC8qIHRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgdGhlIGxvY2FsIGFuY2hvcnMgYXJlIGRpc3BsYXllZCBiZWxvdyB0aGUgbmF2aWFndGlvbiAqLwotICBkaXYuZm9vdG5vdGUgYVtuYW1lXSwgZGl2LnJlZm5hbWVkaXYgYVtuYW1lXSwgZGl2LnJlZnNlY3QxIGFbbmFtZV0sIGRpdi5yZWZzZWN0MiBhW25hbWVdLCBkaXYuaW5kZXggYVtuYW1lXSwgZGl2Lmdsb3NzYXJ5IGFbbmFtZV0sIGRpdi5zZWN0MSBhW25hbWVdCi0gIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDotNWVtOwotICB9Ci0gIC8qIHRoaXMgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhlIHhzbCBzdHlsZSBzaGVldHMgd2hlbiBnZW5lcmF0aW5nIGluZGV4ZXMgKi8KLSAgZGl2LmluZGV4IGRpdi5pbmRleAotICB7Ci0gICAgdG9wOiAwZW07Ci0gIH0KLSAgLyogbWFrZSBzcGFjZSBmb3IgdGhlIGZpeGVkIG5hdmlnYXRpb24gYmFyIGFuZCBhZGQgc3BhY2UgYXQgdGhlIGJvdHRvbSBzbyB0aGF0Ci0gICAqIGxpbmsgdGFyZ2V0cyBhcHBlYXIgc29tZXdoYXQgY2xvc2UgdG8gdG9wCi0gICAqLwotICBib2R5Ci0gIHsKLSAgICBwYWRkaW5nLXRvcDogMi41ZW07Ci0gICAgcGFkZGluZy1ib3R0b206IDUwMHB4OwotICAgIG1heC13aWR0aDogNjBlbTsKLSAgfQotICBwCi0gIHsKLSAgICBtYXgtd2lkdGg6IDYwZW07Ci0gIH0KLSAgLyogc3R5bGUgYW5kIHNpemUgdGhlIG5hdmlnYXRpb24gYmFyICovCi0gIHRhYmxlLm5hdmlnYXRpb24jdG9wCi0gIHsKLSAgICBwb3NpdGlvbjogZml4ZWQ7Ci0gICAgYmFja2dyb3VuZDogI2UyZTJlMjsKLSAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2JhYmRiNjsKLSAgICBib3JkZXItc3BhY2luZzogNXB4OwotICAgIG1hcmdpbi10b3A6IDA7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICB6LWluZGV4OiAxMDsKLSAgfQotICB0YWJsZS5uYXZpZ2F0aW9uI3RvcCB0ZAotICB7Ci0gICAgcGFkZGluZy1sZWZ0OiA2cHg7Ci0gICAgcGFkZGluZy1yaWdodDogNnB4OwotICB9Ci0gIC5uYXZpZ2F0aW9uIGEsIC5uYXZpZ2F0aW9uIGE6dmlzaXRlZAotICB7Ci0gICAgLyogdGFuZ286c2t5IGJsdWUgMyAqLwotICAgIGNvbG9yOiAjMjA0YTg3OwotICB9Ci0gIC5uYXZpZ2F0aW9uIGE6aG92ZXIKLSAgewotICAgIC8qIHRhbmdvOnNreSBibHVlIDIgKi8KLSAgICBjb2xvcjogIzM0NjVhNDsKLSAgfQotICB0ZC5zaG9ydGN1dHMKLSAgewotICAgIC8qIHRhbmdvOnNreSBibHVlIDIgKi8KLSAgICBjb2xvcjogIzM0NjVhNDsKLSAgICBmb250LXNpemU6IDgwJTsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICB9Ci0gIHRkLnNob3J0Y3V0cyAuZGltCi0gIHsKLSAgICBjb2xvcjogI2JhYmRiNjsKLSAgfQotICAubmF2aWdhdGlvbiAudGl0bGUKLSAgewotICAgIGZvbnQtc2l6ZTogODAlOwotICAgIG1heC13aWR0aDogbm9uZTsKLSAgICBtYXJnaW46IDBweDsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICB9Ci19Ci1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7Ci0gIC8qIHNjcmVlbiBsYXJnZXIgdGhhbiA2MGVtICovCi0gIGJvZHkgeyBtYXJnaW46IGF1dG87IH0KLX0KLUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDYwZW0pIHsKLSAgLyogc2NyZWVuIGxlc3MgdGhhbiA2MGVtICovCi0gICNuYXZfaGllcmFyY2h5IHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X2ludGVyZmFjZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfcHJlcmVxdWlzaXRlcyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9kZXJpdmVkX2ludGVyZmFjZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfaW1wbGVtZW50YXRpb25zIHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X2NoaWxkX3Byb3BlcnRpZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfc3R5bGVfcHJvcGVydGllcyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9pbmRleCB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9nbG9zc2FyeSB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLmdhbGxlcnlfaW1hZ2UgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC5wcm9wZXJ0eV9mbGFncyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnNpZ25hbF9mbGFncyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnBhcmFtZXRlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLmVudW1fbWVtYmVyX2Fubm90YXRpb25zIHsgZGlzcGxheTogbm9uZTsgfQotICAuc3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnVuaW9uX21lbWJlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLyogbm93IHRoYXQgYSBjb2x1bW4gaXMgaGlkZGVuLCBvcHRpbWl6ZSBzcGFjZSAqLwotICBjb2wucGFyYW1ldGVyc19uYW1lIHsgd2lkdGg6IGF1dG87IH0KLSAgY29sLnBhcmFtZXRlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICBjb2wuc3RydWN0X21lbWJlcnNfbmFtZSB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5zdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5lbnVtX21lbWJlcnNfbmFtZSB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5lbnVtX21lbWJlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICBjb2wudW5pb25fbWVtYmVyc19uYW1lIHsgd2lkdGg6IGF1dG87IH0KLSAgY29sLnVuaW9uX21lbWJlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICAubGlzdGluZ19saW5lcyB7IGRpc3BsYXk6IG5vbmU7IH0KLX0KLUBtZWRpYSBwcmludCB7Ci0gIHRhYmxlLm5hdmlnYXRpb24gewotICAgIHZpc2liaWxpdHk6IGNvbGxhcHNlOwotICAgIGRpc3BsYXk6IG5vbmU7Ci0gIH0KLSAgZGl2LnRpdGxlcGFnZSB0YWJsZS5uYXZpZ2F0aW9uIHsKLSAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwotICAgIGRpc3BsYXk6IHRhYmxlOwotICAgIGJhY2tncm91bmQ6ICNlMmUyZTI7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKLSAgICBtYXJnaW4tdG9wOiAwOwotICAgIG1hcmdpbi1ib3R0b206IDA7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiAzZW07Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvdXAtaW5zZW5zaXRpdmUucG5nIGIvZG9jcy9wbHVnaW5zL2h0bWwvdXAtaW5zZW5zaXRpdmUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2UxYTRmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL3VwLWluc2Vuc2l0aXZlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL3VwLnBuZyBiL2RvY3MvcGx1Z2lucy9odG1sL3VwLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhOTA1NC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC91cC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZWVsZW1lbnRzLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjM5MzVmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jb3JlZWxlbWVudHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzk3ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmNvcmVlbGVtZW50czwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkdTdHJlYW1lciBjb3JlIGVsZW1lbnRzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL3BsdWdpbnMvZWxlbWVudHMvLmxpYnMvbGliZ3N0Y29yZWVsZW1lbnRzLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGNvcmVlbGVtZW50cy5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3RyZWFtZXI8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+Y2Fwc2ZpbHRlcjwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5DYXBzRmlsdGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXNzIGRhdGEgd2l0aG91dCBtb2RpZmljYXRpb24sIGxpbWl0aW5nIGZvcm1hdHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5EYXZpZCBTY2hsZWVmICZsdDtkc0BzY2hsZWVmLm9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5jb25jYXQ8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+Q29uY2F0PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Db25jYXRlbmF0ZSBtdWx0aXBsZSBzdHJlYW1zPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZG93bmxvYWRidWZmZXI8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+RG93bmxvYWRCdWZmZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRvd25sb2FkIEJ1ZmZlciBlbGVtZW50PC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5mYWtlc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5GYWtlIFNpbms8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNpbms8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkJsYWNrIGhvbGUgZm9yIGRhdGE8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDssIE1yLiAmYXBvcztmcmFnLW1lLW1vcmUmYXBvczsgVmFuZGVyd2luZ28gJmx0O3dpbmdvQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZmFrZXNyYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5GYWtlIFNvdXJjZTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U291cmNlPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QdXNoIGVtcHR5IChubyBkYXRhKSBidWZmZXJzIGFyb3VuZDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmZkc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5GaWxlZGVzY3JpcHRvciBTaW5rPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5TaW5rL0ZpbGU8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPldyaXRlIGRhdGEgdG8gYSBmaWxlIGRlc2NyaXB0b3I8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZmRzcmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+RmlsZWRlc2NyaXB0b3IgU291cmNlPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Tb3VyY2UvRmlsZTwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmVhZCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5maWxlc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5GaWxlIFNpbms8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNpbmsvRmlsZTwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+V3JpdGUgc3RyZWFtIHRvIGEgZmlsZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRob21hcyBWYW5kZXIgU3RpY2hlbGUgJmx0O3Rob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmZpbGVzcmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+RmlsZSBTb3VyY2U8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNvdXJjZS9GaWxlPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5SZWFkIGZyb20gYXJiaXRyYXJ5IHBvaW50IGluIGEgZmlsZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZnVubmVsPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkZ1bm5lbCBwaXBlIGZpdHRpbmc8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk4tdG8tMSBwaXBlIGZpdHRpbmc8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5PbGl2aWVyIENyZXRlICZsdDtvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+aWRlbnRpdHk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+SWRlbnRpdHk8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBhc3MgZGF0YSB3aXRob3V0IG1vZGlmaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+aW5wdXQtc2VsZWN0b3I8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+SW5wdXQgc2VsZWN0b3I8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk4tdG8tMSBpbnB1dCBzdHJlYW0gc2VsZWN0b3I8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KdWxpZW4gTW91dHRlICZsdDtqdWxpZW5AbW91dHRlLm5ldCZndDssIEphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tJmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+bXVsdGlxdWV1ZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5NdWx0aVF1ZXVlPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5NdWx0aXBsZSBkYXRhIHF1ZXVlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RWR3YXJkIEhlcnZleSAmbHQ7ZWR3YXJkQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbmtfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmNfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5vdXRwdXQtc2VsZWN0b3I8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+T3V0cHV0IHNlbGVjdG9yPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj4xLXRvLU4gb3V0cHV0IHN0cmVhbSBzZWxlY3RvcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlN0ZWZhbiBLb3N0ICZsdDtzdGVmYW4ua29zdEBub2tpYS5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnF1ZXVlPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlF1ZXVlPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5TaW1wbGUgZGF0YSBxdWV1ZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cXVldWUyPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlF1ZXVlIDI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlNpbXBsZSBkYXRhIHF1ZXVlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDssIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+c3RyZWFtaWRkZW11eDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TdHJlYW1pZCBEZW11eDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+R2VuZXJpYzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+MS10by1OIG91dHB1dCBzdHJlYW0gYnkgc3RyZWFtLWlkPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+SG9vbkhlZSBMZWUgJmx0O2hvb25oZWUubGVlQGxnZS5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+dGVlPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlRlZSBwaXBlIGZpdHRpbmc8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPjEtdG8tTiBwaXBlIGZpdHRpbmc8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmNfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+dHlwZWZpbmQ8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VHlwZUZpbmQ8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkdlbmVyaWM8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkZpbmRzIHRoZSBtZWRpYSB0eXBlIG9mIGEgc3RyZWFtPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+QmVuamFtaW4gT3R0ZSAmbHQ7aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+dmFsdmU8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VmFsdmUgZWxlbWVudDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Ecm9wcyBidWZmZXJzIGFuZCBldmVudHMgb3IgbGV0cyB0aGVtIHRocm91Z2g8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5PbGl2aWVyIENyZXRlICZsdDtvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZXRyYWNlcnMueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNvcmV0cmFjZXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQzZjg4OC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY29yZXRyYWNlcnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+Y29yZXRyYWNlcnM8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5HU3RyZWFtZXIgY29yZSB0cmFjZXJzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL3BsdWdpbnMvdHJhY2Vycy8ubGlicy9saWJnc3Rjb3JldHJhY2Vycy5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3Rjb3JldHJhY2Vycy5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3RyZWFtZXI8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL3NjYW5vYmotYnVpbGQuc3RhbXAgYi9kb2NzL3BsdWdpbnMvc2Nhbm9iai1idWlsZC5zdGFtcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvc2Nhbm9iai1idWlsZC5zdGFtcAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9NYWtlZmlsZS5hbSBiL2RvY3MvcHdnL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjI4YTMxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyMjIHRoaXMgaXMgdGhlIHBhcnQgeW91IGNhbiBjdXN0b21pemUgaWYgeW91IG5lZWQgdG8KLQotIyBiYXNlIG5hbWUgb2YgZG9jCi1ET0MgPSBwd2cKLSMgZm9ybWF0cyBkZWZpbmVkIGZvciB1cGxvYWQtZG9jLm1hawotRk9STUFUUz1odG1sIHBzIHBkZgotCi0jIG1haW4geG1sIGZpbGUKLU1BSU4gPSAkKERPQykueG1sCi0jIGFsbCB4bWwgc291cmNlcwotWE1MID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi54bWwpKQotIyBiYXNlIHN0eWxlIHNoZWV0Ci1DU1MgPSBiYXNlLmNzcwotCi0jIGltYWdlIHNvdXJjZXMKLVBOR19TUkMgPSAKLUZJR19TUkMgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLmZpZykpCi0KLSMgZXh0cmEgc291cmNlcyB0byBjb3B5IGluIGJ1aWxkIGRpcmVjdG9yeQotRVhUUkFfU1JDID0gCi0KLSMjIyB0aGlzIGlzIHRoZSBnZW5lcmljIGJpdCBhbmQgeW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzCi0KLSMgZ2V0IHRoZSBnZW5lcmljIGRvY2J1aWxkaW5nIE1ha2VmaWxlIHN0dWZmCi1pbmNsdWRlICQoc3JjZGlyKS8uLi9tYW51YWxzLm1hawotIyBnZXQgdGhlIGdlbmVyaWMgdXBsb2FkIHRhcmdldAotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1hawotCi0jIyMgdGhpcyBpcyBzdGFuZGFyZCBhdXRvbWFrZSBzdHVmZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSMgcGFja2FnZSB1cCBhbGwgdGhlIHNvdXJjZQotRVhUUkFfRElTVCA9ICQoU1JDKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSMgaW5zdGFsbCBkb2N1bWVudGF0aW9uCi1wd2dkaXIgPSAkKGRvY2RpcikvJChET0MpCi1wd2dfREFUQSA9ICQoUERGX0RBVCkgJChQU19EQVQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotaW5jbHVkZSAkKHNyY2RpcikvLi4vaHRtbGluc3RhbGwubWFrCmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9NYWtlZmlsZS5pbiBiL2RvY3MvcHdnL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTFiYjY4Li4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTg4ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIyMgdGhpcyBpcyB0aGUgcGFydCB5b3UgY2FuIGN1c3RvbWl6ZSBpZiB5b3UgbmVlZCB0bwotCi0jIyMgVGhlc2UgYXJlIGFsbCBnZW5lcmljOyB3ZSBzZXQgYWxsIHRoZSB2YXJpYWJsZXMgd2UgbmVlZAotCi0jIHRoaXMgc25pcHBldCBpcyB0byBiZSBpbmNsdWRlZCBieSBib3RoIG91ciBkb2Nib29rIG1hbnVhbHMKLSMgYW5kIGd0ay1kb2MgQVBJIHJlZmVyZW5jZXMKLQotIyBpdCBhZGRzIGFuIHVwbG9hZCB0YXJnZXQgdG8gZWFjaCBvZiB0aGVzZSBkaXIncyBNYWtlZmlsZXMKLQotIyBlYWNoIE1ha2VmaWxlLmFtIHNob3VsZCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6Ci0jIC0gRE9DOiB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkb2N1bWVudGF0aW9uCi0jICAgICAgICAoZmFxLCBtYW51YWwsIHB3ZywgZ3N0cmVhbWVyLCBnc3RyZWFtZXItbGlicykKLSMgLSBGT1JNQVRTOiB0aGUgZm9ybWF0cyBpbiB3aGljaCBET0MgaXMgb3V0cHV0Ci0jICAgICAgICAgICAgKGh0bWwgcHMgcGRmKQotCi0jIGlmIHlvdSB3YW50IHRvIHVzZSBpdCwgbWFrZSBzdXJlIHlvdXIgJEhPTUUvLnNzaC9jb25maWcgZmlsZSBjb250YWlucyB0aGUKLSMgY29ycmVjdCBVc2VyIGVudHJ5IGZvciB0aGUgSG9zdCBlbnRyeSBmb3IgdGhlIERPQ19TRVJWRVIKLQotIyB0aGlzIGZpbGUgYWRkcyBydWxlcyBmb3IgaW5zdGFsbGluZyBodG1sIHN1YnRyZWVzCi0jIEkgcmVhbGx5IGRvbid0IGxpa2UgdGhpcyBoYWNrLCBidXQgYXV0b21ha2UgZG9lc24ndCBzZWVtIHRvIHdhbnQgdG8KLSMgaW5zdGFsbCBkaXJlY3RvcnkgdHJlZXMgOigKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZG9jcy9wd2cKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHB3Z2RpcikiCi1EQVRBID0gJChwd2dfREFUQSkKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvLi4vaHRtbGluc3RhbGwubWFrIFwKLQkkKHNyY2RpcikvLi4vbWFudWFscy5tYWsgJChzcmNkaXIpL01ha2VmaWxlLmluIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1hawotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi0KLSMgYmFzZSBuYW1lIG9mIGRvYwotRE9DID0gcHdnCi0jIGZvcm1hdHMgZGVmaW5lZCBmb3IgdXBsb2FkLWRvYy5tYWsKLUZPUk1BVFMgPSBodG1sIHBzIHBkZgotCi0jIG1haW4geG1sIGZpbGUKLU1BSU4gPSAkKERPQykueG1sCi0jIGFsbCB4bWwgc291cmNlcwotWE1MID0gJChub3RkaXIgJCh3aWxkY2FyZCAkKHNyY2RpcikvKi54bWwpKQotIyBiYXNlIHN0eWxlIHNoZWV0Ci1DU1MgPSBiYXNlLmNzcwotCi0jIGltYWdlIHNvdXJjZXMKLVBOR19TUkMgPSAKLUZJR19TUkMgPSAkKG5vdGRpciAkKHdpbGRjYXJkICQoc3JjZGlyKS8qLmZpZykpCi0KLSMgZXh0cmEgc291cmNlcyB0byBjb3B5IGluIGJ1aWxkIGRpcmVjdG9yeQotRVhUUkFfU1JDID0gCi0KLSMgaW50ZXJtZWRpYXJ5IGJ1aWxkIHBhdGgKLUJVSUxERElSID0gYnVpbGQKLSMgc2FtZSBmb3IgaW1hZ2VzCi1CVUlMRElNQUdFU0RJUiA9ICQoQlVJTERESVIpL2ltYWdlcwotCi0jIGltYWdlcwotIyByaWdodCBub3csIHdlIG9ubHkgYWxsb3cgLnBuZyBhbmQgLmZpZyBhcyBzb3VyY2UKLSMgd2UgbWlnaHQgYWRkIG1vcmUgbGF0ZXIgaWYgd2UgZmVlbCB0aGUgbmVlZAotCi0jIFBORydzIGNhbiBiZSBzb3VyY2Ugb3IgYnVpbHQgZnJvbSAuZmlnCi1QTkcgPSAkKHN0cmlwICQoUE5HX1NSQykgJChGSUdfU1JDOi5maWc9LnBuZykpCi0jIEVQUyAucHMgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCi1FUFMgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wcykgJChQTkdfU1JDOi5wbmc9LnBzKSkKLSMgUERGIC5wZGYgZmlsZXMgY2FuIGJlIGJ1aWx0IGZyb20gLnBuZyBvciAuZmlnCi1QREYgPSAkKHN0cmlwICQoRklHX1NSQzouZmlnPS5wZGYpICQoUE5HX1NSQzoucG5nPS5wZGYpKQotCi0jIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kIGltYWdlcyBkdXJpbmcgYnVpbGRpbmcsIHdoZXRoZXIgYnkgY29weWluZwotIyBvciBieSBnZW5lcmF0aW5nIHRoZW0KLVBOR19CVUlMVCA9ICQoZm9yZWFjaCBmaWxlLCAkKFBORyksICQoQlVJTERJTUFHRVNESVIpLyQoZmlsZSkpCi1FUFNfQlVJTFQgPSAkKGZvcmVhY2ggZmlsZSwgJChFUFMpLCAkKEJVSUxESU1BR0VTRElSKS8kKGZpbGUpKQotUERGX0JVSUxUID0gJChmb3JlYWNoIGZpbGUsICQoUERGKSwgJChCVUlMRElNQUdFU0RJUikvJChmaWxlKSkKLVNSQyA9ICQoWE1MKSAkKFBOR19TUkMpICQoRklHX1NSQykgJChDU1MpICQoRVhUUkFfU1JDKQotCi0jIGdlbmVyYXRlIEE0IGRvY3MKLVBBUEVSX0xPQ0FMRSA9IG5sX05MCi1ARE9DX0hUTUxfRkFMU0VASFRNTF9EQVQgPSAKLQotIyBjYW4gd2UgZ2VuZXJhdGUgSFRNTCA/Ci1ARE9DX0hUTUxfVFJVRUBIVE1MX0RBVCA9IGh0bWwKLUBET0NfSFRNTF9GQUxTRUBIVE1MX1RBUkdFVCA9IAotQERPQ19IVE1MX1RSVUVASFRNTF9UQVJHRVQgPSBodG1sL2luZGV4Lmh0bWwKLUBET0NfUFNfRkFMU0VAUFNfREFUID0gCi0KLSMgY2FuIHdlIGdlbmVyYXRlIFBTID8KLUBET0NfUFNfVFJVRUBQU19EQVQgPSAkKERPQykucHMKLUBET0NfUERGX0ZBTFNFQFBERl9EQVQgPSAKLQotIyBjYW4gd2UgZ2VuZXJhdGUgUERGID8KLUBET0NfUERGX1RSVUVAUERGX0RBVCA9ICQoRE9DKS5wZGYKLQotIyB0aGVzZSB2YXJpYWJsZXMgZGVmaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUgb25saW5lIGRvY3MKLURPQ19TRVJWRVIgPSBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnCi1ET0NfQkFTRSA9IC9zcnYvZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy93d3cvZGF0YS9kb2MKLURPQ19VUkwgPSAkKERPQ19TRVJWRVIpOiQoRE9DX0JBU0UpCi0KLSMjIyB0aGlzIGlzIHRoZSBnZW5lcmljIGJpdCBhbmQgeW91IHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzCi0KLSMgZ2V0IHRoZSBnZW5lcmljIGRvY2J1aWxkaW5nIE1ha2VmaWxlIHN0dWZmCi0jIGdldCB0aGUgZ2VuZXJpYyB1cGxvYWQgdGFyZ2V0Ci0KLSMjIyB0aGlzIGlzIHN0YW5kYXJkIGF1dG9tYWtlIHN0dWZmCi0KLSMgcGFja2FnZSB1cCBhbGwgdGhlIHNvdXJjZQotRVhUUkFfRElTVCA9ICQoU1JDKQotCi0jIGluc3RhbGwgZG9jdW1lbnRhdGlvbgotcHdnZGlyID0gJChkb2NkaXIpLyQoRE9DKQotcHdnX0RBVEEgPSAkKFBERl9EQVQpICQoUFNfREFUKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvLi4vbWFudWFscy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3B3Zy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3B3Zy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHNyY2RpcikvLi4vbWFudWFscy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJChzcmNkaXIpLy4uL2h0bWxpbnN0YWxsLm1hayAkKGFtX19lbXB0eSk6Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLWluc3RhbGwtcHdnREFUQTogJChwd2dfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwd2dfREFUQSknOyB0ZXN0IC1uICIkKHB3Z2RpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocHdnZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwd2dkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHB3Z2RpciknIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHB3Z2RpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtcHdnREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHB3Z19EQVRBKSc7IHRlc3QgLW4gIiQocHdnZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQocHdnZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLXRhZ3MgVEFHUzoKLQotY3RhZ3MgQ1RBR1M6Ci0KLWNzY29wZSBjc2NvcGVsaXN0OgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWxvY2FsCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChEQVRBKSBhbGwtbG9jYWwKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHB3Z2RpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLXB3Z0RBVEEKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGYtYW06Ci0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1sb2NhbCB1bmluc3RhbGwtcHdnREFUQQotCi0uTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2hlY2stbG9jYWwgY2xlYW4gXAotCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBjc2NvcGVsaXN0LWFtIGN0YWdzLWFtIFwKLQlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAotCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXB3Z0RBVEEgaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKLQlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAotCXBzIHBzLWFtIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbG9jYWwgXAotCXVuaW5zdGFsbC1wd2dEQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIyMgZ2VuZXJhdGUgYWxsIGRvY3VtZW50YXRpb24gYnkgZGVmYXVsdAotIyBob29rIGluIGh0bWwgZ2VuZXJhdGlvbgotYWxsLWxvY2FsOiBodG1sCi1odG1sOiAkKEhUTUxfVEFSR0VUKQotcHM6ICQoUFNfREFUKQotcGRmOiAkKFBERl9EQVQpCi0KLWRlYnVnOgotCUBlY2hvICJvdXRwdXR0aW5nIHNvbWUgdXNlZnVsIGRlYnVnIGluZm9ybWF0aW9uIgotCUBlY2hvICJTb3VyY2UgWE1MOiIKLQlAZWNobyAiWE1MOiAnJChYTUwpJyIKLQlAZWNobyAiQ1NTOiAnJChDU1MpJyIKLQlAZWNobyAiU291cmNlIGltYWdlIGZpbGVzOiIKLQlAZWNobyAiUE5HX1NSQzogJyQoUE5HX1NSQyknIgotCUBlY2hvICJGSUdfU1JDOiAnJChGSUdfU1JDKSciCi0JQGVjaG8gIkFsbCB1c2VkIGltYWdlIGZpbGVzOiIKLQlAZWNobyAiUE5HOiAnJChQTkcpJyIKLQlAZWNobyAiRVBTOiAnJChFUFMpJyIKLQlAZWNobyAiUERGOiAnJChQREYpJyIKLQlAZWNobyAiQWxsIHVzZWQgaW1hZ2UgZmlsZXMgaW4gdGhlaXIgYnVpbHQgcGF0aDoiCi0JQGVjaG8gIlBOR19CVUlMVDogJyQoUE5HX0JVSUxUKSciCi0JQGVjaG8gIkVQU19CVUlMVDogJyQoRVBTX0JVSUxUKSciCi0JQGVjaG8gIlBERl9CVUlMVDogJyQoUERGX0JVSUxUKSciCi0JQGVjaG8gIkVuZCByZXN1bHQgcHJvZHVjdHM6IgotCUBlY2hvICJIVE1MX0RBVDogJyQoSFRNTF9EQVQpJyIKLQlAZWNobyAiUFNfREFUOiAgICckKFBTX0RBVCknIgotCUBlY2hvICJQREZfREFUOiAgJyQoUERGX0RBVCknIgotCi0jIGEgcnVsZSB0byBjb3B5IGFsbCBvZiB0aGUgc291cmNlIGZvciBkb2NzIGludG8gJChidWlsZGRpcikvYnVpbGQKLSQoQlVJTERESVIpLyQoTUFJTik6ICQoWE1MKSAkKENTUykgJChFWFRSQV9TUkMpCi0JQC1ta2RpciAtcCAkKEJVSUxERElSKTsgXAotCWlmIHRlc3QgIngkKEVYVFJBX1NSQykiICE9ICJ4IjsgdGhlbiBmb3IgYSBpbiAkKEVYVFJBX1NSQyk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmU7IGZpIDsgXAotCWZvciBhIGluICQoWE1MKTsgZG8gY3AgJChzcmNkaXIpLyQkYSAkKEJVSUxERElSKTsgZG9uZSA7IFwKLQlmb3IgYSBpbiAkKENTUyk7IGRvIGNwICQoc3JjZGlyKS8kJGEgJChCVUlMRERJUik7IGRvbmUgOyBcCi0JY3AgLi4vdmVyc2lvbi5lbnRpdGllcyAkKEJVSUxERElSKSA7IFwKLQljcCAkKHRvcF9zcmNkaXIpL2RvY3MvdXJsLmVudGl0aWVzICQoQlVJTERESVIpCi0KLWh0bWwvaW5kZXguaHRtbDogJChCVUlMRERJUikvJChNQUlOKSAkKFBOR19CVUlMVCkgJChGSUdfU1JDKQotCUAkKE1BS0UpIGNoZWNrLWxvY2FsCi0JQGVjaG8gIioqKiBHZW5lcmF0aW5nIEhUTUwgb3V0cHV0ICoqKiIKLQlALW1rZGlyIC1wIGh0bWwKLQlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBuZyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcwotCUBjZCAkKEJVSUxERElSKSAmJiAkKFhTTFRQUk9DKSAtbyAuLi9odG1sLyAtLXN0cmluZ3BhcmFtIGNodW5rZXIub3V0cHV0LmVuY29kaW5nIFVURi04IC0tc3RyaW5ncGFyYW0gIHVzZS5pZC5hcy5maWxlbmFtZSAxICQoWFNMVFBST0NfRkxBR1MpICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC9odG1sL2NodW5rLnhzbCIgJChNQUlOKQotCUB0ZXN0ICJ4JChDU1MpIiAhPSAieCIgJiYgXAotICAgICAgICAgIGVjaG8gIkNvcHlpbmcgLmNzcyBmaWxlczogJChDU1MpIiAmJiBcCi0gICAgICAgICAgY3AgJChzcmNkaXIpLyQoQ1NTKSBodG1sCi0JQHRlc3QgIngkKFBORykiICE9ICJ4IiAmJiBcCi0gICAgICAgICAgZWNobyAiQ29weWluZyAucG5nIGltYWdlczogJChQTkdfQlVJTFQpIiAmJiBcCi0JICBta2RpciAtcCBodG1sL2ltYWdlcyAmJiBcCi0gICAgICAgICAgY3AgJChQTkdfQlVJTFQpIGh0bWwvaW1hZ2VzIHx8IHRydWUKLQotJChET0MpLnBzOiAkKEJVSUxERElSKS8kKE1BSU4pICQoRVBTX0JVSUxUKSAkKFBOR19TUkMpICQoRklHX1NSQykKLQlAJChNQUtFKSBjaGVjay1sb2NhbAotCUBlY2hvICIqKiogR2VuZXJhdGluZyBQUyBvdXRwdXQgKioqIgotCUBjcCAtZiAkKHNyY2RpcikvLi4vaW1hZ2UtZXBzICQoQlVJTERESVIpL2ltYWdlLmVudGl0aWVzCi0JY2QgJChCVUlMRERJUikgJiYgU1BfRU5DT0RJTkc9IlVURi04IiBkb2Nib29rMnBzIC1vIC4uICQoTUFJTikKLSMJZXhwb3J0IExDX1BBUEVSPSQoUEFQRVJfTE9DQUxFKSAmJiBjZCAkKEJVSUxERElSKSAmJiB4bWx0byBwcyAtbyAuLiAkKE1BSU4pCi0KLSQoRE9DKS5wZGY6ICQoRE9DKS5wcwotCUAkKE1BS0UpIGNoZWNrLWxvY2FsCi0JQGVjaG8gIioqKiBHZW5lcmF0aW5nIFBERiBvdXRwdXQgKioqIgotCUBwczJwZGYgJChET0MpLnBzCi0KLSMkKERPQykucGRmOiAkKE1BSU4pICQoUERGKSAkKEZJR19TUkMpCi0jCUBlY2hvICIqKiogR2VuZXJhdGluZyBQREYgb3V0cHV0ICoqKiIKLSMJQGNwIC1mICQoc3JjZGlyKS8uLi9pbWFnZS1wZGYgaW1hZ2UuZW50aXRpZXMKLSMJQGV4cG9ydCBMQ19QQVBFUj0kKFBBUEVSX0xPQ0FMRSkgJiYgeG1sdG8gcGRmICQoTUFJTikKLSMJQHJtIGltYWdlLmVudGl0aWVzCi0KLWNsZWFuLWxvY2FsOgotCS0kKFJNKSAtciAkKEJVSUxERElSKQotCS0kKFJNKSAtciBodG1sCi0JLSQoUk0pICQoRE9DKS5wcwotCS0kKFJNKSAkKERPQykucGRmCi0JLSQoUk0pIC1yIHd3dwotCi0jIyMgaW1hZ2UgZ2VuZXJhdGlvbgotCi0jIGNvcHkgcG5nIGZyb20gc291cmNlIGRpciBwbmcKLSQoQlVJTERJTUFHRVNESVIpLyUucG5nOiAkKHNyY2RpcikvJS5wbmcKLQlAZWNobyAiQ29weWluZyAkPCB0byAkQCIKLQlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKLQlAY3AgJDwgJEAKLSMgbWFrZSBwbmcgZnJvbSBmaWcKLSQoQlVJTERJTUFHRVNESVIpLyUucG5nOiAlLmZpZwotCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGZpZzJkZXYgLUxwbmcgJDwgJEAKLQotIyBtYWtlIHBzKEVQUykgZnJvbSBmaWcKLSQoQlVJTERJTUFHRVNESVIpLyUucHM6ICUuZmlnCi0JQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKLQlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKLQlAZmlnMmRldiAtTGVwcyAkPCAkQAotCi0jIG1ha2UgcGRmIGZyb20gZmlnCi0kKEJVSUxESU1BR0VTRElSKS8lLnBkZjogJS5maWcKLQlAZWNobyAiR2VuZXJhdGluZyAkQCBmcm9tICQ8IgotCUBta2RpciAtcCAkKEJVSUxESU1BR0VTRElSKQotCUBmaWcyZGV2IC1McGRmICQ8ICRACi0KLSMgbWFrZSBwZGYgZnJvbSBwbmcKLSQoQlVJTERJTUFHRVNESVIpLyUucGRmOiAlLnBuZwotCUBlY2hvICJHZW5lcmF0aW5nICRAIGZyb20gJDwiCi0JQG1rZGlyIC1wICQoQlVJTERJTUFHRVNESVIpCi0JQGNhdCAkPCB8IHBuZ3RvcG5tIHwgcG5tdG9wcyAtbm90dXJuIDI+IC9kZXYvbnVsbCB8IGVwc3RvcGRmIC0tZmlsdGVyIC0tb3V0ZmlsZSAkQCAyPiAvZGV2L251bGwKLQotIyBtYWtlIHBzKEVQUykgZnJvbSBwbmcKLSQoQlVJTERJTUFHRVNESVIpLyUucHM6ICUucG5nCi0JQGVjaG8gIkdlbmVyYXRpbmcgJEAgZnJvbSAkPCIKLQlAbWtkaXIgLXAgJChCVUlMRElNQUdFU0RJUikKLQlAY2F0ICQ8IHwgcG5ndG9wbm0gfCBwbm10b3BzIC1ub3R1cm4gPiAkQCAyPiAvZGV2L251bGwKLQotIyBtYWtlIHN1cmUgeG1sIHZhbGlkYXRlcyBwcm9wZXJseQotY2hlY2stbG9jYWw6ICQoQlVJTERESVIpLyQoTUFJTikKLQlAY3AgLWYgJChzcmNkaXIpLy4uL2ltYWdlLXBuZyAkKEJVSUxERElSKS9pbWFnZS5lbnRpdGllcwotCUBjZCAkKEJVSUxERElSKSAmJiB4bWxsaW50IC1ub291dCAtdmFsaWQgJChNQUlOKQotCUBjZCAkKEJVSUxERElSKSAmJiBcCi0JaWYgWyBgd2hpY2ggY3VybGAgXTsgdGhlbiBcCi0gICAgbGlua3M9YCQoWFNMVFBST0MpICQoWFNMVFBST0NfRkxBR1MpIC0teGluY2x1ZGUgJChhYnNfdG9wX3NyY2RpcikvZG9jcy9saXN0LXVsaW5rLnhzbCAkKE1BSU4pIHwgZWdyZXAgJ15odHRwJyB8IHNvcnQgfCB1bmlxYCAmJiBcCi0gICAgaGF2ZV9lcnJvcj0wICYmIFwKLSAgICBmb3IgbGluayBpbiAkJGxpbmtzOyBkbyBcCi0gICAgICBjb2RlPWBjdXJsIC1zIC1tMjAgLW8gL2Rldi9udWxsIC1JIC13ICIle2h0dHBfY29kZX0iICQkbGlua2A7IFwKLSAgICAgIGlmIFsgXCggJCQ/IC1uZSAwIFwpIC1vIFwoICQkY29kZSAtZ3QgMzk5IFwpIF07IHRoZW4gXAotICAgICAgICBlY2hvICJleGl0X3N0YXR1cz0kJD8sIGh0dHBfY29kZT0kJGNvZGU6ICQkbGluayI7IFwKLSAgICAgICAgZ3JlcCAtSG5yICIkJGxpbmsiIC47IFwKLSAgICAgICAgaGF2ZV9lcnJvcj0xOyBcCi0gICAgICBmaTsgXAotICAgIGRvbmUgXAotICBmaQotCi0jIGF2b2lkICdjcDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUgYGJ1aWxkL2ltYWdlLmVudGl0aWVzJzogRmlsZSBleGlzdHMnCi0jIGVycm9ycyBkdXJpbmcgJ21ha2UgZGlzdGNoZWNrJyBieSBkaXNhYmxpbmcgcGFyYWxsZWwgYnVpbGRzCi0uTk9UUEFSQUxMRUw6Ci0KLXVwbG9hZDogJChGT1JNQVRTKQotCUBpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIGh0bWwgPiAvZGV2L251bGw7IHRoZW4gXAotCSAgZWNobyAiUHJlcGFyaW5nIGRvY3MgZm9yIHVwbG9hZCAocmViYXNpbmcgY3Jvc3MtcmVmZXJlbmNlcykgLi4uIiA7IFwKLQkgIGlmIHRlc3QgeCQoYnVpbGRkaXIpICE9IHgkKHNyY2Rpcik7IHRoZW4gXAotCSAgICBlY2hvICJtYWtlIHVwbG9hZCBjYW4gb25seSBiZSB1c2VkIGlmIHNyY2RpciA9PSBidWlsZGRpciI7IFwKLQkgICAgZXhpdCAxOyBcCi0JICBmaTsgXAotCSAgIyBndGtkb2MtcmViYXNlIHNvbWV0aW1lcyBnZXRzIGNvbmZ1c2VkLCBzbyByZXNldCBldmVyeXRoaW5nIHRvIFwKLQkgICMgbG9jYWwgbGlua3MgYmVmb3JlIHJlYmFzaW5nIHRvIG9ubGluZSBsaW5rcyAgICAgICAgICAgICAgICAgICBcCi0JICBndGtkb2MtcmViYXNlIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbCAyPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IFwKLQkgIHJlYmFzZT1gZ3RrZG9jLXJlYmFzZSAtLXZlcmJvc2UgLS1vbmxpbmUgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sYCA7IFwKLQkgIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWUgIk9uLSpsaW5lIjsgXAotCSAgZm9yIHJlcSBpbiBnbGliIGdvYmplY3QgZ3N0cmVhbWVyIGdzdHJlYW1lci1saWJzIGdzdC1wbHVnaW5zLWJhc2UtbGliczsgZG8gXAotCSAgICBpZiAhICggZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtaSAtZSAiT24tKmxpbmUuKi8kJHJlcS8iICk7IHRoZW4gXAotCSAgICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDsgXAotCSAgICAgIGVjaG8gIiBDb3VsZCBub3QgZGV0ZXJtaW5lIG9ubGluZSBsb2NhdGlvbiBmb3IgJCRyZXEgZG9jcy4gQ3Jvc3MtcmVmZXJlbmNpbmcgd2lsbCBiZSAiIDsgXAotCSAgICAgIGVjaG8gIiBicm9rZW4sIHNvIG5vdCB1cGxvYWRpbmcuIE1ha2Ugc3VyZSB0aGUgbGlicmFyeSdzIGd0ay1kb2MgZG9jdW1lbnRhdGlvbiBpcyAgICAiIDsgXAotCSAgICAgIGVjaG8gIiBpbnN0YWxsZWQgc29tZXdoZXJlIGluIC91c3Ivc2hhcmUvZ3RrLWRvYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDsgXAotCSAgICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iIDsgXAotCSAgICAgIGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgZG9uZTsgXAotCSAgZXhwb3J0IFNSQz0iJCRTUkMgaHRtbCI7IFwKLQlmaTsgXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcHMgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBzIjsgZmk7IFwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBkZiA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucGRmIjsgZmk7IFwKLQlcCi0JIyB1cGxvYWQgcmVsZWFzZXMgdG8gYm90aCBYLlkvIGFuZCBoZWFkLyBzdWJkaXJlY3RvcmllcyBcCi0JZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvJChQQUNLQUdFX1ZFUlNJT05fTUFKT1IpLiQoUEFDS0FHRV9WRVJTSU9OX01JTk9SKS8kKERPQyk7IFwKLQllY2hvIFVwbG9hZGluZyAkJFNSQyB0byAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKLQlyc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBjaG1vZCAtUiBnK3cgJCRESVI7IFwKLQlcCi0JZXhwb3J0IERJUj0kKERPQ19CQVNFKS9nc3RyZWFtZXIvaGVhZC8kKERPQyk7IFwKLQllY2hvIFVwbG9hZGluZyAkJFNSQyB0byAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgbWtkaXIgLXAgJCRESVI7IFwKLQlyc3luYyAtcnYgLWUgc3NoIC0tZGVsZXRlICQkU1JDICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBjaG1vZCAtUiBnK3cgJCRESVI7IFwKLQlcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKLQkgIGVjaG8gIlVuLXByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCi0JICBndGtkb2MtcmViYXNlIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbCA7IFwKLQlmaTsgXAotCWVjaG8gRG9uZQotCi1ARE9DX0hUTUxfVFJVRUBpbnN0YWxsLWRhdGEtbG9jYWw6IGh0bWwKLUBET0NfSFRNTF9UUlVFQAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGRvY2RpcikvJChET0MpCi1ARE9DX0hUTUxfVFJVRUAJY3AgLXByICQoSFRNTF9EQVQpICQoREVTVERJUikkKGRvY2RpcikvJChET0MpCi0KLUBET0NfSFRNTF9UUlVFQHVuaW5zdGFsbC1sb2NhbDoKLUBET0NfSFRNTF9UUlVFQAlmb3IgcGFydCBpbiAkKEhUTUxfREFUKTsgZG8gcm0gLXJmICQoREVTVERJUikkKGRvY2RpcikvJChET0MpLyQkcGFydDsgZG9uZQotQERPQ19IVE1MX0ZBTFNFQGluc3RhbGwtZGF0YS1sb2NhbDoKLUBET0NfSFRNTF9GQUxTRUB1bmluc3RhbGwtbG9jYWw6Ci0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2FkdmFuY2VkLWFsbG9jYXRpb24ueG1sIGIvZG9jcy9wd2cvYWR2YW5jZWQtYWxsb2NhdGlvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MzQ2YmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYWR2YW5jZWQtYWxsb2NhdGlvbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MTcgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYWxsb2NhdGlvbiIgeHJlZmxhYmVsPSJNZW1vcnkgYWxsb2NhdGlvbiI+Ci0gIDx0aXRsZT5NZW1vcnkgYWxsb2NhdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IGlzIGEgdmVyeSBpbXBvcnRhbnQgdG9waWMgaW4KLSAgICBtdWx0aW1lZGlhLiBIaWdoIGRlZmluaXRpb24gdmlkZW8gdXNlcyBtYW55IG1lZ2FieXRlcyB0byBzdG9yZQotICAgIG9uZSBzaW5nbGUgZnJhbWUgb2YgdmlkZW8uIEl0IGlzIGltcG9ydGFudCB0byByZXVzZSB0aGUgbWVtb3J5Ci0gICAgd2hlbiBwb3NzaWJsZSBpbnN0ZWFkIG9mIGNvbnN0YW50bHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZwotICAgIHRoZSBtZW1vcnkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgTXVsdGltZWRpYSBzeXN0ZW1zIHVzdWFsbHkgdXNlIHNwZWNpYWwgcHVycG9zZSBjaGlwcywgc3VjaCBhcwotICAgIERTUHMgb3IgR1BVcyB0byBwZXJmb3JtIHRoZSBoZWF2eSBsaWZ0aW5nIChlc3BlY2lhbGx5IGZvciB2aWRlbykuCi0gICAgVGhlc2Ugc3BlY2lhbCBwdXJwb3NlIGNoaXBzIGhhdmUgdXN1YWxseSBzdHJpY3QgcmVxdWlyZW1lbnRzCi0gICAgZm9yIHRoZSBtZW1vcnkgdGhhdCB0aGV5IGNhbiBvcGVyYXRlIG9uIGFuZCBob3cgdGhlIG1lbW9yeQotICAgIGlzIGFjY2Vzc2VkLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgIFRoaXMgY2hhcHRlciB0YWxrcyBhYm91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMgdGhhdAotICAgICZHU3RyZWFtZXI7IHBsdWdpbnMgY2FuIHVzZS4gV2Ugd2lsbCBmaXJzdCB0YWxrIGFib3V0IHRoZQotICAgIGxvd2xldmVsIDxjbGFzc25hbWU+R3N0TWVtb3J5PC9jbGFzc25hbWU+IG9iamVjdCB0aGF0IG1hbmFnZXMKLSAgICBhY2Nlc3MgdG8gYSBwaWVjZSBvZiBtZW1vcnkuIFdlIHRoZW4gY29udGludWUgd2l0aAotICAgIDxjbGFzc25hbWU+R3N0QnVmZmVyPC9jbGFzc25hbWU+IHRoYXQgaXMgdXNlZCB0byBleGNoYW5nZSBkYXRhCi0gICAgYmV0d2VlbiBwbHVnaW5zIChhbmQgdGhlIGFwcGxpY2F0aW9uKSBhbmQgdGhhdCB1c2VzCi0gICAgPGNsYXNzbmFtZT5Hc3RNZW1vcnk8L2NsYXNzbmFtZT4uIFdlIHRhbGsgYWJvdXQKLSAgICA8Y2xhc3NuYW1lPkdzdE1ldGE8L2NsYXNzbmFtZT4gdGhhdCBjYW4gYmUgcGxhY2VkIG9uIGJ1ZmZlcnMgdG8KLSAgICBnaXZlIGV4dHJhIGluZm8gYWJvdXQgdGhlIGJ1ZmZlciBhbmQgaXRzIG1lbW9yeS4KLSAgICBGb3IgZWZmaWNpZW50bHkgbWFuYWdpbmcgYnVmZmVycyBvZiB0aGUgc2FtZSBzaXplLCB3ZSB0YWtlIGEKLSAgICBsb29rIGF0IDxjbGFzc25hbWU+R3N0QnVmZmVyUG9vbDwvY2xhc3NuYW1lPi4gVG8gY29uY2x1ZGUgdGhpcwotICAgIGNoYXB0ZXIgd2UgdGFrZSBhIGxvb2sgYXQgdGhlIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHF1ZXJ5IHRoYXQKLSAgICBpcyB1c2VkIHRvIG5lZ290aWF0ZSBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zIGJldHdlZW4gZWxlbWVudHMuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tYWxsb2NhdGlvbi1tZW1vcnkiIHhyZWZsYWJlbD0iR3N0TWVtb3J5Ij4KLSAgICA8dGl0bGU+R3N0TWVtb3J5PC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIDxjbGFzc25hbWU+R3N0TWVtb3J5PC9jbGFzc25hbWU+IGlzIGFuIG9iamVjdCB0aGF0IG1hbmFnZXMgYSByZWdpb24KLSAgICAgIG9mIG1lbW9yeS4gVGhlIG1lbW9yeSBvYmplY3QgcG9pbnRzIHRvIGEgcmVnaW9uIG9mIG1lbW9yeSBvZgotICAgICAgPHF1b3RlPm1heHNpemU8L3F1b3RlPi4gVGhlIGFyZWEgaW4gdGhpcyBtZW1vcnkgc3RhcnRpbmcgYXQKLSAgICAgIDxxdW90ZT5vZmZzZXQ8L3F1b3RlPiBhbmQgZm9yIDxxdW90ZT5zaXplPC9xdW90ZT4gYnl0ZXMgaXMgdGhlCi0gICAgICBhY2Nlc3NpYmxlIHJlZ2lvbiBpbiB0aGUgbWVtb3J5LiB0aGUgbWF4c2l6ZSBvZiB0aGUgbWVtb3J5IGNhbgotICAgICAgbmV2ZXIgYmUgY2hhbmdlZCBhZnRlciB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGhvd2V2ZXIsIHRoZSBvZmZzZXQKLSAgICAgIGFuZCBzaXplIGNhbiBiZSBjaGFuZ2VkLgotICAgIDwvcGFyYT4KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tYWxsb2NhdGlvbi1hbGxvY2F0b3IiIHhyZWZsYWJlbD0iR3N0QWxsb2NhdG9yIj4KLSAgICAgIDx0aXRsZT5Hc3RBbGxvY2F0b3I8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDxjbGFzc25hbWU+R3N0TWVtb3J5PC9jbGFzc25hbWU+IG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgYQotICAgICAgICA8Y2xhc3NuYW1lPkdzdEFsbG9jYXRvcjwvY2xhc3NuYW1lPiBvYmplY3QuIE1vc3QgYWxsb2NhdG9ycyBpbXBsZW1lbnQgdGhlCi0gICAgICAgIGRlZmF1bHQgPGZ1bmN0aW9uPmdzdF9hbGxvY2F0b3JfYWxsb2MoKTwvZnVuY3Rpb24+IG1ldGhvZCBidXQgc29tZSBhbGxvY2F0b3IKLSAgICAgICAgbWlnaHQgaW1wbGVtZW50IGEgZGlmZmVyZW50IG1ldGhvZCwgZm9yIGV4YW1wbGUgd2hlbiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMKLSAgICAgICAgYXJlIG5lZWRlZCB0byBhbGxvY2F0ZSB0aGUgc3BlY2lmaWMgbWVtb3J5LgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIERpZmZlcmVudCBhbGxvY2F0b3JzIGV4aXN0IGZvciwgZm9yIGV4YW1wbGUsIHN5c3RlbSBtZW1vcnksIHNoYXJlZCBtZW1vcnkKLSAgICAgICAgYW5kIG1lbW9yeSBiYWNrZWQgYnkgYSBETUFidWYgZmlsZSBkZXNjcmlwdG9yLiBUbyBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgYQotICAgICAgICBuZXcga2luZCBvZiBtZW1vcnkgdHlwZSwgeW91IG11c3QgaW1wbGVtZW50IGEgbmV3IGFsbG9jYXRvciBvYmplY3QgYXMgc2hvd24KLSAgICAgICAgYmVsb3cuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tYWxsb2NhdGlvbi1tZW1vcnktZXgiIHhyZWZsYWJlbD0iR3N0TWVtb3J5LWV4Ij4KLSAgICAgIDx0aXRsZT5Hc3RNZW1vcnkgQVBJIGV4YW1wbGU8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIERhdGEgYWNjZXNzIHRvIHRoZSBtZW1vcnkgd3JhcHBlZCBieSB0aGUgPGNsYXNzbmFtZT5Hc3RNZW1vcnk8L2NsYXNzbmFtZT4KLSAgICAgICAgb2JqZWN0IGlzIGFsd2F5cyBwcm90ZWN0ZWQgd2l0aCBhIDxmdW5jdGlvbj5nc3RfbWVtb3J5X21hcCgpPC9mdW5jdGlvbj4KLSAgICAgICAgYW5kIDxmdW5jdGlvbj5nc3RfbWVtb3J5X3VubWFwKCk8L2Z1bmN0aW9uPiBwYWlyLiBBbiBhY2Nlc3MgbW9kZQotICAgICAgICAocmVhZC93cml0ZSkgbXVzdCBiZSBnaXZlbiB3aGVuIG1hcHBpbmcgbWVtb3J5LiBUaGUgbWFwCi0gICAgICAgIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB2YWxpZCBtZW1vcnkgcmVnaW9uIHRoYXQgY2FuCi0gICAgICAgIHRoZW4gYmUgYWNjZXNzZWQgYWNjb3JkaW5nIHRvIHRoZSByZXF1ZXN0ZWQgYWNjZXNzIG1vZGUuIAotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgbWFraW5nIGEgPGNsYXNzbmFtZT5Hc3RNZW1vcnk8L2NsYXNzbmFtZT4KLSAgICAgICAgb2JqZWN0IGFuZCB1c2luZyB0aGUgPGZ1bmN0aW9uPmdzdF9tZW1vcnlfbWFwKCk8L2Z1bmN0aW9uPiB0bwotICAgICAgICBhY2Nlc3MgdGhlIG1lbW9yeSByZWdpb24uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLVsuLi5dCi0KLSAgR3N0TWVtb3J5ICptZW07Ci0gIEdzdE1hcEluZm8gaW5mbzsKLSAgZ2ludCBpOwotCi0gIC8qIGFsbG9jYXRlIDEwMCBieXRlcyAqLwotICBtZW0gPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCAxMDAsIE5VTEwpOwotCi0gIC8qIGdldCBhY2Nlc3MgdG8gdGhlIG1lbW9yeSBpbiB3cml0ZSBtb2RlICovCi0gIGdzdF9tZW1vcnlfbWFwIChtZW0sICZpbmZvLCBHU1RfTUFQX1dSSVRFKTsKLQotICAvKiBmaWxsIHdpdGggcGF0dGVybiAqLwotICBmb3IgKGkgPSAwOyBpIDwgaW5mby5zaXplOyBpKyspCi0gICAgaW5mby5kYXRhW2ldID0gaTsKLQotICAvKiByZWxlYXNlIG1lbW9yeSAqLwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvKTsKLQotWy4uLl0KLV1dPgotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWFsbG9jYXRpb24tYWxsb2NhdG9yLWV4IiB4cmVmbGFiZWw9IkdzdEFsbG9jYXRvci1leCI+Ci0gICAgICA8dGl0bGU+SW1wbGVtZW50aW5nIGEgR3N0QWxsb2NhdG9yPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBXUklURU1FCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1hbGxvY2F0aW9uLWJ1ZmZlciIgeHJlZmxhYmVsPSJHc3RCdWZmZXIiPgotICAgIDx0aXRsZT5Hc3RCdWZmZXI8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQSA8Y2xhc3NuYW1lPkdzdEJ1ZmZlcjwvY2xhc3NuYW1lPiBpcyBhbiBsaWdodHdlaWdodCBvYmplY3QgdGhhdAotICAgICAgaXMgcGFzc2VkIGZyb20gYW4gdXBzdHJlYW0gdG8gYSBkb3duc3RyZWFtIGVsZW1lbnQgYW5kIGNvbnRhaW5zCi0gICAgICBtZW1vcnkgYW5kIG1ldGFkYXRhLiBJdCByZXByZXNlbnRzIHRoZSBtdWx0aW1lZGlhIGNvbnRlbnQgdGhhdAotICAgICAgaXMgcHVzaGVkIG9yIHB1bGwgZG93bnN0cmVhbSBieSBlbGVtZW50cy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgYnVmZmVyIGNvbnRhaW5zIG9uZSBvciBtb3JlIDxjbGFzc25hbWU+R3N0TWVtb3J5PC9jbGFzc25hbWU+Ci0gICAgICBvYmplY3RzIHRoYXQgcmVwcmVzZW50IHRoZSBkYXRhIGluIHRoZSBidWZmZXIuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgTWV0YWRhdGEgaW4gdGhlIGJ1ZmZlciBjb25zaXN0cyBvZjoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdCBtYXJrPSJvcGVuY2lyY2xlIj4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRFRTIGFuZCBQVFMgdGltZXN0YW1wcy4gVGhlc2UgcmVwcmVzZW50IHRoZSBkZWNvZGluZyBhbmQKLSAgICAgICAgICBwcmVzZW50YXRpb24gdGltZXN0YW1wcyBvZiB0aGUgYnVmZmVyIGNvbnRlbnQgYW5kIGlzIHVzZWQgYnkKLSAgICAgICAgICBzeW5jaHJvbml6aW5nIGVsZW1lbnRzIHRvIHNjaGVkdWxlIGJ1ZmZlcnMuIEJvdGggdGhlc2UgdGltZXN0YW1wcwotICAgICAgICAgIGNhbiBiZSBHU1RfQ0xPQ0tfVElNRV9OT05FIHdoZW4gdW5rbm93bi91bmRlZmluZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIGNvbnRlbnRzLiBUaGlzIGR1cmF0aW9uIGNhbiBiZQotICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUgd2hlbiB1bmtub3duL3VuZGVmaW5lZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTWVkaWEgc3BlY2lmaWMgb2Zmc2V0cyBhbmQgb2Zmc2V0X2VuZC4gRm9yIHZpZGVvIHRoaXMgaXMgdGhlIAotICAgICAgICAgIGZyYW1lIG51bWJlciBpbiB0aGUgc3RyZWFtIGFuZCBmb3IgYXVkaW8gdGhlIHNhbXBsZSBudW1iZXIuIE90aGVyCi0gICAgICAgICAgZGVmaW5pdGlvbnMgZm9yIG90aGVyIG1lZGlhIGV4aXN0LiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQXJiaXRyYXJ5IHN0cnVjdHVyZXMgdmlhIDxjbGFzc25hbWU+R3N0TWV0YTwvY2xhc3NuYW1lPiwgc2VlIGJlbG93LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWFsbG9jYXRpb24td3JpdGFiaWxpdHkiIHhyZWZsYWJlbD0iR3N0QnVmZmVyLXdyaXRlIj4KLSAgICAgIDx0aXRsZT5Hc3RCdWZmZXIgd3JpdGFiaWxpdHk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEEgYnVmZmVyIGlzIHdyaXRhYmxlIHdoZW4gdGhlIHJlZmNvdW50IG9mIHRoZSBvYmplY3QgaXMgZXhhY3RseSAxLCBtZWFuaW5nCi0gICAgICAgIHRoYXQgb25seSBvbmUgb2JqZWN0IGlzIGhvbGRpbmcgYSByZWYgdG8gdGhlIGJ1ZmZlci4gWW91IGNhbiBvbmx5Ci0gICAgICAgIG1vZGlmeSBhbnl0aGluZyBpbiB0aGUgYnVmZmVyIHdoZW4gdGhlIGJ1ZmZlciBpcyB3cml0YWJsZS4gVGhpcyBtZWFucwotICAgICAgICB0aGF0IHlvdSBuZWVkIHRvIGNhbGwgPGZ1bmN0aW9uPmdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpPC9mdW5jdGlvbj4KLSAgICAgICAgYmVmb3JlIGNoYW5naW5nIHRoZSB0aW1lc3RhbXBzLCBvZmZzZXRzLCBtZXRhZGF0YSBvciBhZGRpbmcgYW5kCi0gICAgICAgIHJlbW92aW5nIG1lbW9yeSBibG9ja3MuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tYWxsb2NhdGlvbi1idWZmZXItZXgiIHhyZWZsYWJlbD0iR3N0QnVmZmVyLWV4Ij4KLSAgICAgIDx0aXRsZT5Hc3RCdWZmZXIgQVBJIGV4YW1wbGVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBZb3UgY2FuIGNyZWF0ZSBhIGJ1ZmZlciB3aXRoIDxmdW5jdGlvbj5nc3RfYnVmZmVyX25ldyAoKTwvZnVuY3Rpb24+Ci0gICAgICAgIGFuZCB0aGVuIGFkZCBtZW1vcnkgb2JqZWN0cyB0byBpdCBvciB5b3UgY2FuIHVzZSBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoKTwvZnVuY3Rpb24+IHdoaWNoIGNvbWJpbmVzIHRoZQotICAgICAgICB0d28uIEl0J3MgYWxzbyBwb3NzaWJsZSB0byB3cmFwIGV4aXN0aW5nIG1lbW9yeSB3aXRoIAotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsICgpIDwvZnVuY3Rpb24+IHdoZXJlIHlvdSBjYW4KLSAgICAgICAgZ2l2ZSB0aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBtZW1vcnkgc2hvdWxkIGJlIGZyZWVkLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFlvdSBjYW4gYWNjZXNzIHRoZSBtZW1vcnkgb2YgdGhlIGJ1ZmZlciBieSBnZXR0aW5nIGFuZCBtYXBwaW5nIHRoZSAKLSAgICAgICAgPGNsYXNzbmFtZT5Hc3RNZW1vcnk8L2NsYXNzbmFtZT4gb2JqZWN0cyBpbmRpdmlkdWFsbHkgb3IgYnkgdXNpbmcKLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9idWZmZXJfbWFwICgpPC9mdW5jdGlvbj4uIFRoZSBsYXR0ZXIgbWVyZ2VzIGFsbCB0aGUKLSAgICAgICAgbWVtb3J5IGludG8gb25lIGJpZyBibG9jayBhbmQgdGhlbiBnaXZlcyB5b3UgYSBwb2ludGVyIHRvIHRoaXMgYmxvY2suCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gY3JlYXRlIGEgYnVmZmVyIGFuZCBhY2Nlc3MgaXRzIG1lbW9yeS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotWy4uLl0KLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdE1lbW9yeSAqbWVtOwotICBHc3RNYXBJbmZvIGluZm87Ci0KLSAgLyogbWFrZSBlbXB0eSBidWZmZXIgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgLyogbWFrZSBtZW1vcnkgaG9sZGluZyAxMDAgYnl0ZXMgKi8KLSAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgMTAwLCBOVUxMKTsKLQotICAvKiBhZGQgdGhlIGJ1ZmZlciAqLwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGJ1ZmZlciwgbWVtKTsKLQotWy4uLl0KLQotICAvKiBnZXQgV1JJVEUgYWNjZXNzIHRvIHRoZSBtZW1vcnkgYW5kIGZpbGwgd2l0aCAweGZmICovCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1dSSVRFKTsKLSAgbWVtc2V0IChpbmZvLmRhdGEsIDB4ZmYsIGluZm8uc2l6ZSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotCi1bLi4uXQotCi0gIC8qIGZyZWUgdGhlIGJ1ZmZlciAqLwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi1bLi4uXQotXV0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDwvc2VjdDI+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWFsbG9jYXRpb24tbWV0YSIgeHJlZmxhYmVsPSJHc3RNZXRhIj4KLSAgICA8dGl0bGU+R3N0TWV0YTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBXaXRoIHRoZSA8Y2xhc3NuYW1lPkdzdE1ldGE8L2NsYXNzbmFtZT4gc3lzdGVtIHlvdSBjYW4gYWRkIGFyYml0cmFyeQotICAgICAgc3RydWN0dXJlcyBvbiBidWZmZXJzLiBUaGVzZSBzdHJ1Y3R1cmVzIGRlc2NyaWJlIGV4dHJhIHByb3BlcnRpZXMKLSAgICAgIG9mIHRoZSBidWZmZXIgc3VjaCBhcyBjcm9wcGluZywgc3RyaWRlLCByZWdpb24gb2YgaW50ZXJlc3QgZXRjLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBtZXRhZGF0YSBzeXN0ZW0gc2VwYXJhdGVzIEFQSSBzcGVjaWZpY2F0aW9uICh3aGF0IHRoZSBtZXRhZGF0YQotICAgICAgYW5kIGl0cyBBUEkgbG9vayBsaWtlKSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIChob3cgaXQgd29ya3MpLiBUaGlzIG1ha2VzCi0gICAgICBpdCBwb3NzaWJsZSB0byBtYWtlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHNhbWUgQVBJLAotICAgICAgZm9yIGV4YW1wbGUsIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgeW91IGFyZSBydW5uaW5nIG9uLgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1hbGxvY2F0aW9uLW1ldGEtZXgiIHhyZWZsYWJlbD0iR3N0TWV0YS1leCI+Ci0gICAgICA8dGl0bGU+R3N0TWV0YSBBUEkgZXhhbXBsZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQWZ0ZXIgYWxsb2NhdGluZyBhIG5ldyBidWZmZXIsIHlvdSBjYW4gYWRkIG1ldGFkYXRhIHRvIHRoZSBidWZmZXIKLSAgICAgICAgd2l0aCB0aGUgbWV0YWRhdGEgc3BlY2lmaWMgQVBJLiBUaGlzIG1lYW5zIHRoYXQgeW91IHdpbGwgbmVlZCB0bwotICAgICAgICBsaW5rIHRvIHRoZSBoZWFkZXIgZmlsZSB3aGVyZSB0aGUgbWV0YWRhdGEgaXMgZGVmaW5lZCB0byB1c2UKLSAgICAgICAgaXRzIEFQSS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBCeSBjb252ZW50aW9uLCBhIG1ldGFkYXRhIEFQSSB3aXRoIG5hbWUgPGNsYXNzbmFtZT5Gb29CYXI8L2NsYXNzbmFtZT4KLSAgICAgICAgc2hvdWxkIHByb3ZpZGUgdHdvIG1ldGhvZHMsIGEKLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9idWZmZXJfYWRkX2Zvb19iYXJfbWV0YSAoKTwvZnVuY3Rpb24+IGFuZCBhCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfYnVmZmVyX2dldF9mb29fYmFyX21ldGEgKCk8L2Z1bmN0aW9uPi4gQm90aCBmdW5jdGlvbnMKLSAgICAgICAgc2hvdWxkIHJldHVybiBhIHBvaW50ZXIgdG8gYSA8Y2xhc3NuYW1lPkZvb0Jhck1ldGE8L2NsYXNzbmFtZT4KLSAgICAgICAgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgdGhlIG1ldGFkYXRhIGZpZWxkcy4gU29tZSBvZiB0aGUKLSAgICAgICAgPGZ1bmN0aW9uPl9hZGRfKl9tZXRhICgpPC9mdW5jdGlvbj4gY2FuIGhhdmUgZXh0cmEgcGFyYW1ldGVycyB0aGF0Ci0gICAgICAgIHdpbGwgdXN1YWxseSBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgbWV0YWRhdGEgc3RydWN0dXJlIGZvciB5b3UuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgTGV0J3MgaGF2ZSBhIGxvb2sgYXQgdGhlIG1ldGFkYXRhIHRoYXQgaXMgdXNlZCB0byBzcGVjaWZ5IGEgY3JvcHBpbmcKLSAgICAgICAgcmVnaW9uIGZvciB2aWRlbyBmcmFtZXMuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0KLVsuLi5dCi0gIEdzdFZpZGVvQ3JvcE1ldGEgKm1ldGE7Ci0KLSAgLyogYnVmZmVyIHBvaW50cyB0byBhIHZpZGVvIGZyYW1lLCBhZGQgc29tZSBjcm9wcGluZyBtZXRhZGF0YSAqLwotICBtZXRhID0gZ3N0X2J1ZmZlcl9hZGRfdmlkZW9fY3JvcF9tZXRhIChidWZmZXIpOwotCi0gIC8qIGNvbmZpZ3VyZSB0aGUgY3JvcHBpbmcgbWV0YWRhdGEgKi8KLSAgbWV0YS0+eCA9IDg7Ci0gIG1ldGEtPnkgPSA4OwotICBtZXRhLT53aWR0aCA9IDEyMDsKLSAgbWV0YS0+aGVpZ2h0ID0gODA7Ci1bLi4uXQotXV0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEFuIGVsZW1lbnQgY2FuIHRoZW4gdXNlIHRoZSBtZXRhZGF0YSBvbiB0aGUgYnVmZmVyIHdoZW4gcmVuZGVyaW5nCi0gICAgICAgIHRoZSBmcmFtZSBsaWtlIHRoaXM6Ci0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0KLVsuLi5dCi0gIEdzdFZpZGVvQ3JvcE1ldGEgKm1ldGE7Ci0KLSAgLyogYnVmZmVyIHBvaW50cyB0byBhIHZpZGVvIGZyYW1lLCBnZXQgdGhlIGNyb3BwaW5nIG1ldGFkYXRhICovCi0gIG1ldGEgPSBnc3RfYnVmZmVyX2dldF92aWRlb19jcm9wX21ldGEgKGJ1ZmZlcik7Ci0KLSAgaWYgKG1ldGEpIHsKLSAgICAvKiByZW5kZXIgZnJhbWUgd2l0aCBjcm9wcGluZyAqLwotICAgIF9yZW5kZXJfZnJhbWVfY3JvcHBlZCAoYnVmZmVyLCBtZXRhLT54LCBtZXRhLT55LCBtZXRhLT53aWR0aCwgbWV0YS0+aGVpZ2h0KTsKLSAgfSBlbHNlIHsKLSAgICAvKiByZW5kZXIgZnJhbWUgKi8KLSAgICBfcmVuZGVyX2ZyYW1lIChidWZmZXIpOwotICB9Ci1bLi4uXQotCi1dXT4KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1hbGxvY2F0aW9uLW1ldGEtbmV3IiB4cmVmbGFiZWw9IkdzdE1ldGEtbmV3Ij4KLSAgICAgIDx0aXRsZT5JbXBsZW1lbnRpbmcgbmV3IEdzdE1ldGE8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBuZXh0IHNlY3Rpb25zIHdlIHNob3cgaG93IHlvdSBjYW4gYWRkIG5ldyBtZXRhZGF0YSB0byB0aGUKLSAgICAgICAgc3lzdGVtIGFuZCB1c2UgaXQgb24gYnVmZmVycy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHNlY3QzIGlkPSJzZWN0aW9uLWFsbG9jYXRpb24tbWV0YS1hcGkiIHhyZWZsYWJlbD0iR3N0TWV0YS1hcGkiPgotICAgICAgICA8dGl0bGU+RGVmaW5lIHRoZSBtZXRhZGF0YSBBUEk8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBGaXJzdCB3ZSBuZWVkIHRvIGRlZmluZSB3aGF0IG91ciBBUEkgd2lsbCBsb29rIGxpa2UgYW5kIHdlCi0gICAgICAgICAgd2lsbCBoYXZlIHRvIHJlZ2lzdGVyIHRoaXMgQVBJIHRvIHRoZSBzeXN0ZW0uIFRoaXMgaXMgaW1wb3J0YW50Ci0gICAgICAgICAgYmVjYXVzZSB0aGlzIEFQSSBkZWZpbml0aW9uIHdpbGwgYmUgdXNlZCB3aGVuIGVsZW1lbnRzIG5lZ290aWF0ZQotICAgICAgICAgIHdoYXQga2luZCBvZiBtZXRhZGF0YSB0aGV5IHdpbGwgZXhjaGFuZ2UuIFRoZSBBUEkgZGVmaW5pdGlvbgotICAgICAgICAgIGFsc28gY29udGFpbnMgYXJiaXRyYXJ5IHRhZ3MgdGhhdCBnaXZlIGhpbnRzIGFib3V0IHdoYXQgdGhlCi0gICAgICAgICAgbWV0YWRhdGEgY29udGFpbnMuIFRoaXMgaXMgaW1wb3J0YW50IHdoZW4gd2Ugc2VlIGhvdyBtZXRhZGF0YQotICAgICAgICAgIGlzIHByZXNlcnZlZCB3aGVuIGJ1ZmZlcnMgcGFzcyB0aHJvdWdoIHRoZSBwaXBlbGluZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBhbiBleGlzdGluZyBBUEksCi0gICAgICAgICAgeW91IGNhbiBza2lwIHRoaXMgc3RlcCBhbmQgbW92ZSBvbiB0byB0aGUgaW1wbGVtZW50YXRpb24gc3RlcC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBGaXJzdCB3ZSBzdGFydCB3aXRoIG1ha2luZyB0aGUKLSAgICAgICAgICA8ZmlsZW5hbWU+bXktZXhhbXBsZS1tZXRhLmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZSB0aGF0IHdpbGwgY29udGFpbgotICAgICAgICAgIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBBUEkgYW5kIHN0cnVjdHVyZSBmb3Igb3VyIG1ldGFkYXRhLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX015RXhhbXBsZU1ldGEgTXlFeGFtcGxlTWV0YTsKLQotc3RydWN0IF9NeUV4YW1wbGVNZXRhIHsKLSAgR3N0TWV0YSAgICAgICBtZXRhOwotCi0gIGdpbnQgICAgICAgICAgYWdlOwotICBnY2hhciAgICAgICAgKm5hbWU7Ci19OwotCi1HVHlwZSBteV9leGFtcGxlX21ldGFfYXBpX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgTVlfRVhBTVBMRV9NRVRBX0FQSV9UWVBFIChteV9leGFtcGxlX21ldGFfYXBpX2dldF90eXBlKCkpCi0KLSNkZWZpbmUgZ3N0X2J1ZmZlcl9nZXRfbXlfZXhhbXBsZV9tZXRhKGIpIFwKLSAgKChNeUV4YW1wbGVNZXRhKilnc3RfYnVmZmVyX2dldF9tZXRhKChiKSxNWV9FWEFNUExFX01FVEFfQVBJX1RZUEUpKQotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBtZXRhZGF0YSBBUEkgZGVmaW5pdGlvbiBjb25zaXN0cyBvZiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKLSAgICAgICAgICBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhIGdpbnQgYW5kIGEgc3RyaW5nLiBUaGUgZmlyc3QgZmllbGQgaW4KLSAgICAgICAgICB0aGUgc3RydWN0dXJlIG11c3QgYmUgPGNsYXNzbmFtZT5Hc3RNZXRhPC9jbGFzc25hbWU+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFdlIGFsc28gZGVmaW5lIGEgPGZ1bmN0aW9uPm15X2V4YW1wbGVfbWV0YV9hcGlfZ2V0X3R5cGUgKCk8L2Z1bmN0aW9uPgotICAgICAgICAgIGZ1bmN0aW9uIHRoYXQgd2lsbCByZWdpc3RlciBvdXQgbWV0YWRhdGEgQVBJIGRlZmluaXRpb24uIFdlCi0gICAgICAgICAgYWxzbyBkZWZpbmUgYSBjb252ZW5pZW5jZSBtYWNybyAKLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2J1ZmZlcl9nZXRfbXlfZXhhbXBsZV9tZXRhICgpPC9mdW5jdGlvbj4gdGhhdCBzaW1wbHkKLSAgICAgICAgICBmaW5kcyBhbmQgcmV0dXJucyB0aGUgbWV0YWRhdGEgd2l0aCBvdXIgbmV3IEFQSS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBOZXh0IGxldCdzIGhhdmUgYSBsb29rIGF0IGhvdyB0aGUKLSAgICAgICAgICA8ZnVuY3Rpb24+bXlfZXhhbXBsZV9tZXRhX2FwaV9nZXRfdHlwZSAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzCi0gICAgICAgICAgaW1wbGVtZW50ZWQgaW4gdGhlIDxmaWxlbmFtZT5teS1leGFtcGxlLW1ldGEuYzwvZmlsZW5hbWU+IGZpbGUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0jaW5jbHVkZSAibXktZXhhbXBsZS1tZXRhLmgiCi0KLUdUeXBlCi1teV9leGFtcGxlX21ldGFfYXBpX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgR1R5cGUgdHlwZTsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICp0YWdzW10gPSB7ICJmb28iLCAiYmFyIiwgTlVMTCB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnR5cGUpKSB7Ci0gICAgR1R5cGUgX3R5cGUgPSBnc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlciAoIk15RXhhbXBsZU1ldGFBUEkiLCB0YWdzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnR5cGUsIF90eXBlKTsKLSAgfQotICByZXR1cm4gdHlwZTsKLX0KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBcyB5b3UgY2FuIHNlZSwgaXQgc2ltcGx5IHVzZXMgdGhlCi0gICAgICAgICAgPGZ1bmN0aW9uPmdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVyICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdG8KLSAgICAgICAgICByZWdpc3RlciBhIG5hbWUgZm9yIHRoZSBhcGkgYW5kIHNvbWUgdGFncy4gVGhlIHJlc3VsdCBpcyBhCi0gICAgICAgICAgbmV3IHBvaW50ZXIgR1R5cGUgdGhhdCBkZWZpbmVzIHRoZSBuZXdseSByZWdpc3RlcmVkIEFQSS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0Mz4KLQotICAgICAgPHNlY3QzIGlkPSJzZWN0aW9uLWFsbG9jYXRpb24tbWV0YS1pbXBsIiB4cmVmbGFiZWw9IkdzdE1ldGEtaW1wbCI+Ci0gICAgICAgIDx0aXRsZT5JbXBsZW1lbnRpbmcgYSBtZXRhZGF0YSBBUEk8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBOZXh0IHdlIGNhbiBtYWtlIGFuIGltcGxlbWVudGF0aW9uIGZvciBhIHJlZ2lzdGVyZWQgbWV0YWRhdGEKLSAgICAgICAgICBBUEkgR1R5cGUuIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgYSBtZXRhZGF0YSBBUEkKLSAgICAgICAgICBhcmUga2VwdCBpbiBhIDxjbGFzc25hbWU+R3N0TWV0YUluZm88L2NsYXNzbmFtZT4gc3RydWN0dXJlCi0gICAgICAgICAgdGhhdCB5b3Ugd2lsbCBtYWtlIGF2YWlsYWJsZSB0byB0aGUgdXNlcnMgb2YgeW91ciBtZXRhZGF0YQotICAgICAgICAgIEFQSSBpbXBsZW1lbnRhdGlvbiB3aXRoIGEgPGZ1bmN0aW9uPm15X2V4YW1wbGVfbWV0YV9nZXRfaW5mbyAoKTwvZnVuY3Rpb24+Ci0gICAgICAgICAgZnVuY3Rpb24gYW5kIGEgY29udmVuaWVuY2UgPGZ1bmN0aW9uPk1ZX0VYQU1QTEVfTUVUQV9JTkZPPC9mdW5jdGlvbj4KLSAgICAgICAgICBtYWNyby4gWW91IHdpbGwgYWxzbyBtYWtlIGEgbWV0aG9kIHRvIGFkZCB5b3VyIG1ldGFkYXRhCi0gICAgICAgICAgaW1wbGVtZW50YXRpb24gdG8gYSA8Y2xhc3NuYW1lPkdzdEJ1ZmZlcjwvY2xhc3NuYW1lPi4KLSAgICAgICAgICBZb3VyIDxmaWxlbmFtZT5teS1leGFtcGxlLW1ldGEuaDwvZmlsZW5hbWU+IGhlYWRlciBmaWxlIHdpbGwKLSAgICAgICAgICBuZWVkIHRoZXNlIGFkZGl0aW9uczoKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLVsuLi5dCi0KLS8qIGltcGxlbWVudGF0aW9uICovCi1jb25zdCBHc3RNZXRhSW5mbyAqbXlfZXhhbXBsZV9tZXRhX2dldF9pbmZvICh2b2lkKTsKLSNkZWZpbmUgTVlfRVhBTVBMRV9NRVRBX0lORk8gKG15X2V4YW1wbGVfbWV0YV9nZXRfaW5mbygpKQotCi1NeUV4YW1wbGVNZXRhICogZ3N0X2J1ZmZlcl9hZGRfbXlfZXhhbXBsZV9tZXRhIChHc3RCdWZmZXIgICAgICAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgIGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICpuYW1lKTsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBMZXQncyBoYXZlIGEgbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZQotICAgICAgICAgIGltcGxlbWVudGVkIGluIHRoZSA8ZmlsZW5hbWU+bXktZXhhbXBsZS1tZXRhLmM8L2ZpbGVuYW1lPiBmaWxlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotWy4uLl0KLQotc3RhdGljIGdib29sZWFuCi1teV9leGFtcGxlX21ldGFfaW5pdCAoR3N0TWV0YSAqIG1ldGEsIGdwb2ludGVyIHBhcmFtcywgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBNeUV4YW1wbGVNZXRhICplbWV0YSA9IChNeUV4YW1wbGVNZXRhICopIG1ldGE7Ci0KLSAgZW1ldGEtPmFnZSA9IDA7Ci0gIGVtZXRhLT5uYW1lID0gTlVMTDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1teV9leGFtcGxlX21ldGFfdHJhbnNmb3JtIChHc3RCdWZmZXIgKiB0cmFuc2J1ZiwgR3N0TWV0YSAqIG1ldGEsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBHUXVhcmsgdHlwZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgTXlFeGFtcGxlTWV0YSAqZW1ldGEgPSAoTXlFeGFtcGxlTWV0YSAqKSBtZXRhOwotCi0gIC8qIHdlIGFsd2F5cyBjb3B5IG5vIG1hdHRlciB3aGF0IHRyYW5zZm9ybSAqLwotICBnc3RfYnVmZmVyX2FkZF9teV9leGFtcGxlX21ldGEgKHRyYW5zYnVmLCBlbWV0YS0+YWdlLCBlbWV0YS0+bmFtZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1teV9leGFtcGxlX21ldGFfZnJlZSAoR3N0TWV0YSAqIG1ldGEsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgTXlFeGFtcGxlTWV0YSAqZW1ldGEgPSAoTXlFeGFtcGxlTWV0YSAqKSBtZXRhOwotCi0gIGdfZnJlZSAoZW1ldGEtPm5hbWUpOwotICBlbWV0YS0+bmFtZSA9IE5VTEw7Ci19Ci0KLWNvbnN0IEdzdE1ldGFJbmZvICoKLW15X2V4YW1wbGVfbWV0YV9nZXRfaW5mbyAodm9pZCkKLXsKLSAgc3RhdGljIGNvbnN0IEdzdE1ldGFJbmZvICptZXRhX2luZm8gPSBOVUxMOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJm1ldGFfaW5mbykpIHsKLSAgICBjb25zdCBHc3RNZXRhSW5mbyAqbWkgPSBnc3RfbWV0YV9yZWdpc3RlciAoTVlfRVhBTVBMRV9NRVRBX0FQSV9UWVBFLAotICAgICAgICAiTXlFeGFtcGxlTWV0YSIsCi0gICAgICAgIHNpemVvZiAoTXlFeGFtcGxlTWV0YSksCi0gICAgICAgIG15X2V4YW1wbGVfbWV0YV9pbml0LAotICAgICAgICBteV9leGFtcGxlX21ldGFfZnJlZSwKLSAgICAgICAgbXlfZXhhbXBsZV9tZXRhX3RyYW5zZm9ybSk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZtZXRhX2luZm8sIG1pKTsKLSAgfQotICByZXR1cm4gbWV0YV9pbmZvOwotfQotCi1NeUV4YW1wbGVNZXRhICoKLWdzdF9idWZmZXJfYWRkX215X2V4YW1wbGVfbWV0YSAoR3N0QnVmZmVyICAgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgIGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWUpCi17Ci0gIE15RXhhbXBsZU1ldGEgKm1ldGE7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIE5VTEwpOwotCi0gIG1ldGEgPSAoTXlFeGFtcGxlTWV0YSAqKSBnc3RfYnVmZmVyX2FkZF9tZXRhIChidWZmZXIsCi0gICAgICBNWV9FWEFNUExFX01FVEFfSU5GTywgTlVMTCk7Ci0KLSAgbWV0YS0+YWdlID0gYWdlOwotICBtZXRhLT5uYW1lID0gZ19zdHJkdXAgKG5hbWUpOwotCi0gIHJldHVybiBtZXRhOwotfQotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxmdW5jdGlvbj5nc3RfbWV0YV9yZWdpc3RlciAoKTwvZnVuY3Rpb24+IHJlZ2lzdGVycyB0aGUgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICBkZXRhaWxzLCBsaWtlIHRoZSBBUEkgdGhhdCB5b3UgaW1wbGVtZW50IGFuZCB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICAgICBtZXRhZGF0YSBzdHJ1Y3R1cmUgYWxvbmcgd2l0aCBtZXRob2RzIHRvIGluaXRpYWxpemUgYW5kIGZyZWUgdGhlCi0gICAgICAgICAgbWVtb3J5IGFyZWEuIFlvdSBjYW4gYWxzbyBpbXBsZW1lbnQgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdGhhdCB3aWxsCi0gICAgICAgICAgYmUgY2FsbGVkIHdoZW4gYSBjZXJ0YWluIHRyYW5zZm9ybWF0aW9uIChpZGVudGlmaWVkIGJ5IHRoZSBxdWFyayBhbmQKLSAgICAgICAgICBxdWFyayBzcGVjaWZpYyBkYXRhKSBpcyBwZXJmb3JtZWQgb24gYSBidWZmZXIuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTGFzdGx5LCB5b3UgaW1wbGVtZW50IGEgPGZ1bmN0aW9uPmdzdF9idWZmZXJfYWRkXypfbWV0YSgpPC9mdW5jdGlvbj4KLSAgICAgICAgICB0aGF0IGFkZHMgdGhlIG1ldGFkYXRhIGltcGxlbWVudGF0aW9uIHRvIGEgYnVmZmVyIGFuZCBzZXRzIHRoZQotICAgICAgICAgIHZhbHVlcyBvZiB0aGUgbWV0YWRhdGEuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdDM+Ci0gICAgPC9zZWN0Mj4KLQotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1hbGxvY2F0aW9uLWJ1ZmZlcnBvb2wiIHhyZWZsYWJlbD0iR3N0QnVmZmVyUG9vbCI+Ci0gICAgPHRpdGxlPkdzdEJ1ZmZlclBvb2w8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVGhlIDxjbGFzc25hbWU+R3N0QnVmZmVyUG9vbDwvY2xhc3NuYW1lPiBvYmplY3QgcHJvdmlkZXMgYSBjb252ZW5pZW50Ci0gICAgICBiYXNlIGNsYXNzIGZvciBtYW5hZ2luZyBsaXN0cyBvZiByZXVzYWJsZSBidWZmZXJzLiBFc3NlbnRpYWwgZm9yIHRoaXMKLSAgICAgIG9iamVjdCBpcyB0aGF0IGFsbCB0aGUgYnVmZmVycyBoYXZlIHRoZSBzYW1lIHByb3BlcnRpZXMgc3VjaCBhcyBzaXplLAotICAgICAgcGFkZGluZywgbWV0YWRhdGEgYW5kIGFsaWdubWVudC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBIGJ1ZmZlcnBvb2wgb2JqZWN0IGNhbiBiZSBjb25maWd1cmVkIHRvIG1hbmFnZSBhIG1pbmltdW0gYW5kIG1heGltdW0KLSAgICAgIGFtb3VudCBvZiBidWZmZXJzIG9mIGEgc3BlY2lmaWMgc2l6ZS4gQSBidWZmZXJwb29sIGNhbiBhbHNvIGJlCi0gICAgICBjb25maWd1cmVkIHRvIHVzZSBhIHNwZWNpZmljIDxjbGFzc25hbWU+R3N0QWxsb2NhdG9yPC9jbGFzc25hbWU+IGZvcgotICAgICAgdGhlIG1lbW9yeSBvZiB0aGUgYnVmZmVycy4gVGhlcmUgaXMgc3VwcG9ydCBpbiB0aGUgYnVmZmVycG9vbCB0byBlbmFibGUKLSAgICAgIGJ1ZmZlcnBvb2wgc3BlY2lmaWMgb3B0aW9ucywgc3VjaCBhcyBhZGRpbmcgPGNsYXNzbmFtZT5Hc3RNZXRhPC9jbGFzc25hbWU+Ci0gICAgICB0byB0aGUgYnVmZmVycyBpbiB0aGUgcG9vbCBvciBzdWNoIGFzIGVuYWJsaW5nIHNwZWNpZmljIHBhZGRpbmcgb24KLSAgICAgIHRoZSBtZW1vcnkgaW4gdGhlIGJ1ZmZlcnMuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQSBCdWZmZXJwb29sIGNhbiBiZSBpbmFjdGl2YXRlIGFuZCBhY3RpdmUuIEluIHRoZSBpbmFjdGl2ZSBzdGF0ZSwKLSAgICAgIHlvdSBjYW4gY29uZmlndXJlIHRoZSBwb29sLiBJbiB0aGUgYWN0aXZlIHN0YXRlLCB5b3UgY2FuJ3QgY2hhbmdlCi0gICAgICB0aGUgY29uZmlndXJhdGlvbiBhbnltb3JlIGJ1dCB5b3UgY2FuIGFjcXVpcmUgYW5kIHJlbGVhc2UgYnVmZmVycwotICAgICAgZnJvbS90byB0aGUgcG9vbC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHdlIHRha2UgYSBsb29rIGF0IGhvdyB5b3UgY2FuIHVzZQotICAgICAgYSBidWZmZXJwb29sLiAKLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tYWxsb2NhdGlvbi1wb29sLWV4IiB4cmVmbGFiZWw9IkdzdEJ1ZmZlclBvb2wtZXgiPgotICAgICAgPHRpdGxlPkdzdEJ1ZmZlclBvb2wgQVBJIGV4YW1wbGU8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE1hbnkgZGlmZmVyZW50IGJ1ZmZlcnBvb2wgaW1wbGVtZW50YXRpb25zIGNhbiBleGlzdDsgdGhleSBhcmUgYWxsCi0gICAgICAgIHN1YmNsYXNzZXMgb2YgdGhlIGJhc2UgY2xhc3MgPGNsYXNzbmFtZT5Hc3RCdWZmZXJQb29sPC9jbGFzc25hbWU+LgotICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB3ZSB3aWxsIGFzc3VtZSB3ZSBzb21laG93IGhhdmUgYWNjZXNzIHRvIGEKLSAgICAgICAgYnVmZmVycG9vbCwgZWl0aGVyIGJlY2F1c2Ugd2UgY3JlYXRlZCBpdCBvdXJzZWx2ZXMgb3IgYmVjYXVzZQotICAgICAgICB3ZSB3ZXJlIGdpdmVuIG9uZSBhcyBhIHJlc3VsdCBvZiB0aGUgQUxMT0NBVElPTiBxdWVyeSBhcyB3ZSB3aWxsCi0gICAgICAgIHNlZSBiZWxvdy4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgYnVmZmVycG9vbCBpcyBpbml0aWFsbHkgaW4gdGhlIGluYWN0aXZlIHN0YXRlIHNvIHRoYXQgd2UgY2FuCi0gICAgICAgIGNvbmZpZ3VyZSBpdC4gVHJ5aW5nIHRvIGNvbmZpZ3VyZSBhIGJ1ZmZlcnBvb2wgdGhhdCBpcyBub3QgaW4gdGhlCi0gICAgICAgIGluYWN0aXZlIHN0YXRlIHdpbGwgZmFpbC4gTGlrZXdpc2UsIHRyeWluZyB0byBhY3RpdmF0ZSBhIGJ1ZmZlcnBvb2wKLSAgICAgICAgdGhhdCBpcyBub3QgY29uZmlndXJlZCB3aWxsIGZhaWwuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgR3N0U3RydWN0dXJlICpjb25maWc7Ci0KLVsuLi5dCi0KLSAgLyogZ2V0IGNvbmZpZyBzdHJ1Y3R1cmUgKi8KLSAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotCi0gIC8qIHNldCBjYXBzLCBzaXplLCBtaW5pbXVtIGFuZCBtYXhpbXVtIGJ1ZmZlcnMgaW4gdGhlIHBvb2wgKi8KLSAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zIChjb25maWcsIGNhcHMsIHNpemUsIG1pbiwgbWF4KTsKLQotICAvKiBjb25maWd1cmUgYWxsb2NhdG9yIGFuZCBwYXJhbWV0ZXJzICovCi0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvciAoY29uZmlnLCBhbGxvY2F0b3IsICZwYXJhbXMpOwotCi0gIC8qIHN0b3JlIHRoZSB1cGRhdGVkIGNvbmZpZ3VyYXRpb24gYWdhaW4gKi8KLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZyk7Ci0KLVsuLi5dCi1dXT4KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1ZmZlcnBvb2wgaXMgbWFpbnRhaW5lZCBpbiBhIGdlbmVyaWMKLSAgICAgICAgPGNsYXNzbmFtZT5Hc3RTdHJ1Y3R1cmU8L2NsYXNzbmFtZT4gdGhhdCBjYW4gYmUgb2J0YWluZWQgd2l0aAotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcoKTwvZnVuY3Rpb24+LiBDb252ZW5pZW5jZQotICAgICAgICBtZXRob2RzIGV4aXN0IHRvIGdldCBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhpcwotICAgICAgICBzdHJ1Y3R1cmUuIEFmdGVyIHVwZGF0aW5nIHRoZSBzdHJ1Y3R1cmUsIGl0IGlzIHNldCBhcyB0aGUgY3VycmVudAotICAgICAgICBjb25maWd1cmF0aW9uIGluIHRoZSBidWZmZXJwb29sIGFnYWluIHdpdGgKLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnKCk8L2Z1bmN0aW9uPi4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBidWZmZXJwb29sOgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdCBtYXJrPSJvcGVuY2lyY2xlIj4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGNhcHMgb2YgdGhlIGJ1ZmZlcnMgdG8gYWxsb2NhdGUuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVycy4gVGhpcyBpcyB0aGUgc3VnZ2VzdGVkIHNpemUgb2YgdGhlCi0gICAgICAgICAgICBidWZmZXJzIGluIHRoZSBwb29sLiBUaGUgcG9vbCBtaWdodCBkZWNpZGUgdG8gYWxsb2NhdGUgbGFyZ2VyCi0gICAgICAgICAgICBidWZmZXJzIHRvIGFkZCBwYWRkaW5nLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIG1pbmltdW0gYW5kIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgaW4gdGhlIHBvb2wuIFdoZW4KLSAgICAgICAgICAgIG1pbmltdW0gaXMgc2V0IHRvID4gMCwgdGhlIGJ1ZmZlcnBvb2wgd2lsbCBwcmUtYWxsb2NhdGUgdGhpcwotICAgICAgICAgICAgYW1vdW50IG9mIGJ1ZmZlcnMuIFdoZW4gbWF4aW11bSBpcyBub3QgMCwgdGhlIGJ1ZmZlcnBvb2wKLSAgICAgICAgICAgIHdpbGwgYWxsb2NhdGUgdXAgdG8gbWF4aW11bSBhbW91bnQgb2YgYnVmZmVycy4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBhbGxvY2F0b3IgYW5kIHBhcmFtZXRlcnMgdG8gdXNlLiBTb21lIGJ1ZmZlcnBvb2xzIG1pZ2h0Ci0gICAgICAgICAgICBpZ25vcmUgdGhlIGFsbG9jYXRvciBhbmQgdXNlIGl0cyBpbnRlcm5hbCBvbmUuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBPdGhlciBhcmJpdHJhcnkgYnVmZmVycG9vbCBvcHRpb25zIGlkZW50aWZpZWQgd2l0aCBhIHN0cmluZy4KLSAgICAgICAgICAgIGEgYnVmZmVycG9vbCBsaXN0cyB0aGUgc3VwcG9ydGVkIG9wdGlvbnMgd2l0aAotICAgICAgICAgICAgPGZ1bmN0aW9uPmdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucygpPC9mdW5jdGlvbj4gYW5kIHlvdSAKLSAgICAgICAgICAgIGNhbiBhc2sgaWYgYW4gb3B0aW9uIGlzIHN1cHBvcnRlZCB3aXRoCi0gICAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2J1ZmZlcl9wb29sX2hhc19vcHRpb24oKTwvZnVuY3Rpb24+LiBUaGUgb3B0aW9uCi0gICAgICAgICAgICBjYW4gYmUgZW5hYmxlZCBieSBhZGRpbmcgaXQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCi0gICAgICAgICAgICB3aXRoIDxmdW5jdGlvbj5nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24gKCk8L2Z1bmN0aW9uPi4KLSAgICAgICAgICAgIFRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgdG8gZW5hYmxlIHRoaW5ncyBsaWtlIGxldHRpbmcgdGhlCi0gICAgICAgICAgICBwb29sIHNldCBtZXRhZGF0YSBvbiB0aGUgYnVmZmVycyBvciB0byBhZGQgZXh0cmEgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgb3B0aW9ucyBmb3IgcGFkZGluZywgZm9yIGV4YW1wbGUuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQWZ0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IG9uIHRoZSBidWZmZXJwb29sLCB0aGUgcG9vbCBjYW4KLSAgICAgICAgYmUgYWN0aXZhdGVkIHdpdGgKLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBUUlVFKTwvZnVuY3Rpb24+LiBGcm9tCi0gICAgICAgIHRoYXQgcG9pbnQgb24geW91IGNhbiB1c2UKLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoKTwvZnVuY3Rpb24+IHRvIHJldHJpZXZlCi0gICAgICAgIGEgYnVmZmVyIGZyb20gdGhlIHBvb2wsIGxpa2UgdGhpczoKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBbLi4uXQotCi0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICByZXQgPSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHBvb2wsICZidWZmZXIsIE5VTEwpOwotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIHBvb2xfZmFpbGVkOwotCi0gIFsuLi5dCi1dXT4KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGFjcXVpcmUgZnVuY3Rpb24KLSAgICAgICAgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSB0aGF0IGl0IGZhaWxzOiBXaGVuIHlvdXIKLSAgICAgICAgZWxlbWVudCBzaHV0cyBkb3duLCBpdCB3aWxsIGRlYWN0aXZhdGUgdGhlIGJ1ZmZlcnBvb2wgYW5kIHRoZW4KLSAgICAgICAgYWxsIGNhbGxzIHRvIGFjcXVpcmUgd2lsbCByZXR1cm4gR1NUX0ZMT1dfRkxVU0hORy4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBbGwgYnVmZmVycyB0aGF0IGFyZSBhY3F1aXJlZCBmcm9tIHRoZSBwb29sIHdpbGwgaGF2ZSB0aGVpciBwb29sCi0gICAgICAgIG1lbWJlciBzZXQgdG8gdGhlIG9yaWdpbmFsIHBvb2wuIFdoZW4gdGhlIGxhc3QgcmVmIGlzIGRlY3JlbWVudGVkCi0gICAgICAgIG9uIHRoZSBidWZmZXIsICZHU3RyZWFtZXI7IHdpbGwgYXV0b21hdGljYWxseSBjYWxsCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIoKTwvZnVuY3Rpb24+IHRvIHJlbGVhc2UKLSAgICAgICAgdGhlIGJ1ZmZlciBiYWNrIHRvIHRoZSBwb29sLiBZb3UgKG9yIGFueSBvdGhlciBkb3duc3RyZWFtIGVsZW1lbnQpCi0gICAgICAgIGRvbid0IG5lZWQgdG8ga25vdyBpZiBhIGJ1ZmZlciBjYW1lIGZyb20gYSBwb29sLCB5b3UgY2FuIGp1c3QKLSAgICAgICAgdW5yZWYgaXQuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1hbGxvY2F0aW9uLXBvb2wtaW1wbCIgeHJlZmxhYmVsPSJHc3RCdWZmZXJQb29sLWltcGwiPgotICAgICAgPHRpdGxlPkltcGxlbWVudGluZyBhIG5ldyBHc3RCdWZmZXJQb29sPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBXUklURU1FCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1hbGxvY2F0aW9uLXF1ZXJ5IiB4cmVmbGFiZWw9IkdTVF9RVUVSWV9BTExPQ0FUSU9OIj4KLSAgICA8dGl0bGU+R1NUX1FVRVJZX0FMTE9DQVRJT048L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVGhlIEFMTE9DQVRJT04gcXVlcnkgaXMgdXNlZCB0byBuZWdvdGlhdGUKLSAgICAgIDxjbGFzc25hbWU+R3N0TWV0YTwvY2xhc3NuYW1lPiwgPGNsYXNzbmFtZT5Hc3RCdWZmZXJQb29sPC9jbGFzc25hbWU+Ci0gICAgICBhbmQgPGNsYXNzbmFtZT5Hc3RBbGxvY2F0b3I8L2NsYXNzbmFtZT4gYmV0d2VlbiBlbGVtZW50cy4gTmVnb3RpYXRpb24KLSAgICAgIG9mIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGFsd2F5cyBpbml0aWF0ZWQgYW5kIGRlY2lkZWQgYnkgYSBzcmNwYWQKLSAgICAgIGFmdGVyIGl0IGhhcyBuZWdvdGlhdGVkIGEgZm9ybWF0IGFuZCBiZWZvcmUgaXQgZGVjaWRlcyB0byBwdXNoIGJ1ZmZlcnMuCi0gICAgICBBIHNpbmtwYWQgY2FuIHN1Z2dlc3QgYW4gYWxsb2NhdGlvbiBzdHJhdGVneSBidXQgaXQgaXMgdWx0aW1hdGVseSB0aGUKLSAgICAgIHNvdXJjZSBwYWQgdGhhdCB3aWxsIGRlY2lkZSBiYXNlZCBvbiB0aGUgc3VnZ2VzdGlvbnMgb2YgdGhlIGRvd25zdHJlYW0KLSAgICAgIHNpbmsgcGFkLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBzb3VyY2UgcGFkIHdpbGwgZG8gYSBHU1RfUVVFUllfQUxMT0NBVElPTiB3aXRoIHRoZSBuZWdvdGlhdGVkIGNhcHMKLSAgICAgIGFzIGEgcGFyYW1ldGVyLiBUaGlzIGlzIG5lZWRlZCBzbyB0aGF0IHRoZSBkb3duc3RyZWFtIGVsZW1lbnQga25vd3MKLSAgICAgIHdoYXQgbWVkaWEgdHlwZSBpcyBiZWluZyBoYW5kbGVkLiBBIGRvd25zdHJlYW0gc2luayBwYWQgY2FuIGFuc3dlciB0aGUKLSAgICAgIGFsbG9jYXRpb24gcXVlcnkgd2l0aCB0aGUgZm9sbG93aW5nIHJlc3VsdHM6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3QgbWFyaz0ib3BlbmNpcmNsZSI+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFuIGFycmF5IG9mIHBvc3NpYmxlIDxjbGFzc25hbWU+R3N0QnVmZmVyUG9vbDwvY2xhc3NuYW1lPiBzdWdnZXN0aW9ucwotICAgICAgICAgIHdpdGggc3VnZ2VzdGVkIHNpemUsIG1pbmltdW0gYW5kIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFuIGFycmF5IG9mIEdzdEFsbG9jYXRvciBvYmplY3RzIGFsb25nIHdpdGggc3VnZ2VzdGVkIGFsbG9jYXRpb24KLSAgICAgICAgICBwYXJhbWV0ZXJzIHN1Y2ggYXMgZmxhZ3MsIHByZWZpeCwgYWxpZ25tZW50IGFuZCBwYWRkaW5nLiBUaGVzZQotICAgICAgICAgIGFsbG9jYXRvcnMgY2FuIGFsc28gYmUgY29uZmlndXJlZCBpbiBhIGJ1ZmZlcnBvb2wgd2hlbiB0aGlzIGlzCi0gICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBidWZmZXJwb29sLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbiBhcnJheSBvZiBzdXBwb3J0ZWQgPGNsYXNzbmFtZT5Hc3RNZXRhPC9jbGFzc25hbWU+IGltcGxlbWVudGF0aW9ucwotICAgICAgICAgIGFsb25nIHdpdGggbWV0YWRhdGEgc3BlY2lmaWMgcGFyYW1ldGVycy4KLSAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgdXBzdHJlYW0gZWxlbWVudCBrbm93cyB3aGF0IGtpbmQgb2YKLSAgICAgICAgICBtZXRhZGF0YSBpcyBzdXBwb3J0ZWQgZG93bnN0cmVhbSBiZWZvcmUgaXQgcGxhY2VzIHRoYXQgbWV0YWRhdGEKLSAgICAgICAgICBvbiBidWZmZXJzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDxwYXJhPgotICAgICAgV2hlbiB0aGUgR1NUX1FVRVJZX0FMTE9DQVRJT04gcmV0dXJucywgdGhlIHNvdXJjZSBwYWQgd2lsbCBzZWxlY3QKLSAgICAgIGZyb20gdGhlIGF2YWlsYWJsZSBidWZmZXJwb29scywgYWxsb2NhdG9ycyBhbmQgbWV0YWRhdGEgaG93IGl0IHdpbGwKLSAgICAgIGFsbG9jYXRlIGJ1ZmZlcnMuCi0gICAgPC9wYXJhPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWFsbG9jYXRpb24tcXVlcnktZXgiIHhyZWZsYWJlbD0iQWxsb2NhdGlvbi1leCI+Ci0gICAgICA8dGl0bGU+QUxMT0NBVElPTiBxdWVyeSBleGFtcGxlPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIHRoZSBBTExPQ0FUSU9OIHF1ZXJ5LgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3Bvb2wuaD4KLQotICBHc3RDYXBzICpjYXBzOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZzsKLSAgZ3VpbnQgc2l6ZSwgbWluLCBtYXg7Ci0KLVsuLi5dCi0KLSAgLyogZmluZCBhIHBvb2wgZm9yIHRoZSBuZWdvdGlhdGVkIGNhcHMgbm93ICovCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uIChjYXBzLCBUUlVFKTsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoc2NvcGUtPnNyY3BhZCwgcXVlcnkpKSB7Ci0gICAgLyogcXVlcnkgZmFpbGVkLCBub3QgYSBwcm9ibGVtLCB3ZSB1c2UgdGhlIHF1ZXJ5IGRlZmF1bHRzICovCi0gIH0KLQotICBpZiAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKHF1ZXJ5KSA+IDApIHsKLSAgICAvKiB3ZSBnb3QgY29uZmlndXJhdGlvbiBmcm9tIG91ciBwZWVyLCBwYXJzZSB0aGVtICovCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCAwLCAmcG9vbCwgJnNpemUsICZtaW4sICZtYXgpOwotICB9IGVsc2UgewotICAgIHBvb2wgPSBOVUxMOwotICAgIHNpemUgPSAwOwotICAgIG1pbiA9IG1heCA9IDA7Ci0gIH0KLQotICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0gICAgLyogd2UgZGlkIG5vdCBnZXQgYSBwb29sLCBtYWtlIG9uZSBvdXJzZWx2ZXMgdGhlbiAqLwotICAgIHBvb2wgPSBnc3RfdmlkZW9fYnVmZmVyX3Bvb2xfbmV3ICgpOwotICB9Ci0KLSAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24gKGNvbmZpZywgR1NUX0JVRkZFUl9QT09MX09QVElPTl9WSURFT19NRVRBKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zIChjb25maWcsIGNhcHMsIHNpemUsIG1pbiwgbWF4KTsKLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZyk7Ci0KLSAgLyogYW5kIGFjdGl2YXRlICovCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBUUlVFKTsKLQotWy4uLl0KLV1dPgotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gd2lsbCBtYWtlIGEgY3VzdG9tCi0gICAgICAgIDxjbGFzc25hbWU+R3N0VmlkZW9CdWZmZXJQb29sPC9jbGFzc25hbWU+IG9iamVjdCB0aGF0IGlzIHNwZWNpYWxpemVkCi0gICAgICAgIGluIGFsbG9jYXRpbmcgdmlkZW8gYnVmZmVycy4gWW91IGNhbiBhbHNvIGVuYWJsZSB0aGUgcG9vbCB0bwotICAgICAgICBwdXQgPGNsYXNzbmFtZT5Hc3RWaWRlb01ldGE8L2NsYXNzbmFtZT4gbWV0YWRhdGEgb24gdGhlIGJ1ZmZlcnMgZnJvbQotICAgICAgICB0aGUgcG9vbCBkb2luZwotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uIChjb25maWcsCi0gICAgICAgICAgR1NUX0JVRkZFUl9QT09MX09QVElPTl9WSURFT19NRVRBKTwvZnVuY3Rpb24+LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tYWxsb2NhdGlvbi1xdWVyeS1iYXNlIiB4cmVmbGFiZWw9IkFsbG9jYXRpb24tYmFzZSI+Ci0gICAgICA8dGl0bGU+VGhlIEFMTE9DQVRJT04gcXVlcnkgaW4gYmFzZSBjbGFzc2VzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiBtYW55IGJhc2VjbGFzc2VzIHlvdSB3aWxsIHNlZSB0aGUgZm9sbG93aW5nIHZpcnR1YWwgbWV0aG9kcyBmb3IKLSAgICAgICAgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3k6Ci0gICAgICA8L3BhcmE+Ci0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8ZnVuY3Rpb24+cHJvcG9zZV9hbGxvY2F0aW9uICgpPC9mdW5jdGlvbj4gc2hvdWxkIHN1Z2dlc3QKLSAgICAgICAgICAgIGFsbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIHVwc3RyZWFtIGVsZW1lbnQuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICA8ZnVuY3Rpb24+ZGVjaWRlX2FsbG9jYXRpb24gKCk8L2Z1bmN0aW9uPiBzaG91bGQgZGVjaWRlIHRoZQotICAgICAgICAgICAgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIHN1Z2dlc3Rpb25zIHJlY2VpdmVkIGZyb20KLSAgICAgICAgICAgIGRvd25zdHJlYW0uCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW1wbGVtZW50b3JzIG9mIHRoZXNlIG1ldGhvZHMgc2hvdWxkIG1vZGlmeSB0aGUgZ2l2ZW4KLSAgICAgICAgPGNsYXNzbmFtZT5Hc3RRdWVyeTwvY2xhc3NuYW1lPiBvYmplY3QgYnkgdXBkYXRpbmcgdGhlIHBvb2wgb3B0aW9ucwotICAgICAgICBhbmQgYWxsb2NhdGlvbiBvcHRpb25zLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9hZHZhbmNlZC1jbG9jay54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC1jbG9jay54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZmZjNGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYWR2YW5jZWQtY2xvY2sueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLWFkdmFuY2VkLWNsb2NrIj4KLSAgPHRpdGxlPkNsb2NraW5nPC90aXRsZT4KLQotICA8cGFyYT4KLSAgICBXaGVuIHBsYXlpbmcgY29tcGxleCBtZWRpYSwgZWFjaCBzb3VuZCBhbmQgdmlkZW8gc2FtcGxlIG11c3QgYmUgcGxheWVkIGluIGEKLSAgICBzcGVjaWZpYyBvcmRlciBhdCBhIHNwZWNpZmljIHRpbWUuIEZvciB0aGlzIHB1cnBvc2UsIEdTdHJlYW1lciBwcm92aWRlcyBhCi0gICAgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbS4KLSAgPC9wYXJhPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1jbG9ja3MiIHhyZWZsYWJlbD0iQ2xvY2tzIj4KLSAgICA8dGl0bGU+Q2xvY2tzPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFRpbWUgaW4gJkdTdHJlYW1lcjsgaXMgZGVmaW5lZCBhcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhIHBhcnRpY3VsYXIgCi0gICAgICA8Y2xhc3NuYW1lPkdzdENsb2NrPC9jbGFzc25hbWU+IG9iamVjdCBmcm9tIHRoZSBtZXRob2QKLSAgICAgIDxmdW5jdGlvbj5nc3RfY2xvY2tfZ2V0X3RpbWUgKCk8L2Z1bmN0aW9uPi4gCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSW4gYSB0eXBpY2FsIGNvbXB1dGVyLCB0aGVyZSBhcmUgbWFueSBzb3VyY2VzIHRoYXQgY2FuIGJlIHVzZWQgYXMgYQotICAgICAgdGltZSBzb3VyY2UsIGUuZy4sIHRoZSBzeXN0ZW0gdGltZSwgc291bmRjYXJkcywgQ1BVIHBlcmZvcm1hbmNlCi0gICAgICBjb3VudGVycywgLi4uIEZvciB0aGlzIHJlYXNvbiwgdGhlcmUgYXJlIG1hbnkKLSAgICAgIDxjbGFzc25hbWU+R3N0Q2xvY2s8L2NsYXNzbmFtZT4gaW1wbGVtZW50YXRpb25zIGF2YWlsYWJsZSBpbiAmR1N0cmVhbWVyOy4KLSAgICAgIFRoZSBjbG9jayB0aW1lIGRvZXNuJ3QgYWx3YXlzIHN0YXJ0IGZyb20gMCBvciBmcm9tIHNvbWUga25vd24gdmFsdWUuCi0gICAgICBTb21lIGNsb2NrcyBzdGFydCBjb3VudGluZyBmcm9tIHNvbWUga25vd24gc3RhcnQgZGF0ZSwgb3RoZXIgY2xvY2tzIHN0YXJ0Ci0gICAgICBjb3VudGluZyBzaW5jZSBsYXN0IHJlYm9vdCwgZXRjLi4uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQXMgY2xvY2tzIHJldHVybiBhbiBhYnNvbHV0ZSBtZWFzdXJlIG9mIHRpbWUsIHRoZXkgYXJlIG5vdCB1c3VhbGx5IHVzZWQKLSAgICAgIGRpcmVjdGx5LiBJbnN0ZWFkLCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBjbG9jayB0aW1lcyBhcmUgdXNlZCB0bwotICAgICAgbWVhc3VyZSBlbGFwc2VkIHRpbWUgYWNjb3JkaW5nIHRvIGEgY2xvY2suCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1jbG9jay10aW1lLXR5cGVzIiB4cmVmbGFiZWw9IkNsb2NrIHJ1bm5pbmctdGltZSI+IAotICAgIDx0aXRsZT4gQ2xvY2sgcnVubmluZy10aW1lIDwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBBIGNsb2NrIHJldHVybnMgdGhlIDxlbXBoYXNpcyByb2xlPSJzdHJvbmciPmFic29sdXRlLXRpbWU8L2VtcGhhc2lzPgotICAgICAgYWNjb3JkaW5nIHRvIHRoYXQgY2xvY2sgd2l0aCA8ZnVuY3Rpb24+Z3N0X2Nsb2NrX2dldF90aW1lICgpPC9mdW5jdGlvbj4uCi0gICAgICBGcm9tIHRoZSBhYnNvbHV0ZS10aW1lIGlzIGEgPGVtcGhhc2lzIHJvbGU9InN0cm9uZyI+cnVubmluZy10aW1lPC9lbXBoYXNpcz4KLSAgICAgIGNhbGN1bGF0ZWQsIHdoaWNoIGlzIHNpbXBseSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgcHJldmlvdXMgc25hcHNob3QKLSAgICAgIG9mIHRoZSBhYnNvbHV0ZS10aW1lIGNhbGxlZCB0aGUgPGVtcGhhc2lzIHJvbGU9InN0cm9uZyI+YmFzZS10aW1lPC9lbXBoYXNpcz4uCi0gICAgICBTbzoKLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBydW5uaW5nLXRpbWUgPSBhYnNvbHV0ZS10aW1lIC0gYmFzZS10aW1lCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQSAmR1N0cmVhbWVyOyA8Y2xhc3NuYW1lPkdzdFBpcGVsaW5lPC9jbGFzc25hbWU+IG9iamVjdCBtYWludGFpbnMgYSAKLSAgICAgIDxjbGFzc25hbWU+R3N0Q2xvY2s8L2NsYXNzbmFtZT4gb2JqZWN0IGFuZCBhIGJhc2UtdGltZSB3aGVuIGl0IGdvZXMKLSAgICAgIHRvIHRoZSBQTEFZSU5HIHN0YXRlLiAgVGhlIHBpcGVsaW5lIGdpdmVzIGEgaGFuZGxlIHRvIHRoZSBzZWxlY3RlZAotICAgICAgPGNsYXNzbmFtZT5Hc3RDbG9jazwvY2xhc3NuYW1lPiB0byBlYWNoIGVsZW1lbnQgaW4gdGhlIHBpcGVsaW5lIGFsb25nCi0gICAgICB3aXRoIHNlbGVjdGVkIGJhc2UtdGltZS4gVGhlIHBpcGVsaW5lIHdpbGwgc2VsZWN0IGEgYmFzZS10aW1lIGluIHN1Y2gKLSAgICAgIGEgd2F5IHRoYXQgdGhlIHJ1bm5pbmctdGltZSByZWZsZWN0cyB0aGUgdG90YWwgdGltZSBzcGVudCBpbiB0aGUKLSAgICAgIFBMQVlJTkcgc3RhdGUuIEFzIGEgcmVzdWx0LCB3aGVuIHRoZSBwaXBlbGluZSBpcyBQQVVTRUQsIHRoZQotICAgICAgcnVubmluZy10aW1lIHN0YW5kcyBzdGlsbC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBCZWNhdXNlIGFsbCBvYmplY3RzIGluIHRoZSBwaXBlbGluZSBoYXZlIHRoZSBzYW1lIGNsb2NrIGFuZCBiYXNlLXRpbWUsCi0gICAgICB0aGV5IGNhbiB0aHVzIGFsbCBjYWxjdWxhdGUgdGhlIHJ1bm5pbmctdGltZSBhY2NvcmRpbmcgdG8gdGhlIHBpcGVsaW5lCi0gICAgICBjbG9jay4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJ1ZmZlci10aW1lLXR5cGVzIiB4cmVmbGFiZWw9IkJ1ZmZlciBydW5uaW5nLXRpbWUiPiAKLSAgICA8dGl0bGU+IEJ1ZmZlciBydW5uaW5nLXRpbWUgPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFRvIGNhbGN1bGF0ZSBhIGJ1ZmZlciBydW5uaW5nLXRpbWUsIHdlIG5lZWQgYSBidWZmZXIgdGltZXN0YW1wIGFuZAotICAgICAgdGhlIFNFR01FTlQgZXZlbnQgdGhhdCBwcmVjZWRlZCB0aGUgYnVmZmVyLiBGaXJzdCB3ZSBjYW4gY29udmVydAotICAgICAgdGhlIFNFR01FTlQgZXZlbnQgaW50byBhIDxjbGFzc25hbWU+R3N0U2VnbWVudDwvY2xhc3NuYW1lPiBvYmplY3QKLSAgICAgIGFuZCB0aGVuIHdlIGNhbiB1c2UgdGhlCi0gICAgICA8ZnVuY3Rpb24+Z3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdG8KLSAgICAgIHBlcmZvcm0gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBidWZmZXIgcnVubmluZy10aW1lLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFN5bmNocm9uaXphdGlvbiBpcyBub3cgYSBtYXR0ZXIgb2YgbWFraW5nIHN1cmUgdGhhdCBhIGJ1ZmZlciB3aXRoIGEKLSAgICAgIGNlcnRhaW4gcnVubmluZy10aW1lIGlzIHBsYXllZCB3aGVuIHRoZSBjbG9jayByZWFjaGVzIHRoZSBzYW1lCi0gICAgICBydW5uaW5nLXRpbWUuIFVzdWFsbHkgdGhpcyB0YXNrIGlzIGRvbmUgYnkgc2luayBlbGVtZW50cy4gU2luayBhbHNvCi0gICAgICBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBsYXRlbmN5IGNvbmZpZ3VyZWQgaW4gdGhlIHBpcGVsaW5lIGFuZAotICAgICAgYWRkIHRoaXMgdG8gdGhlIGJ1ZmZlciBydW5uaW5nLXRpbWUgYmVmb3JlIHN5bmNocm9uaXppbmcgdG8gdGhlCi0gICAgICBwaXBlbGluZSBjbG9jay4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIAotICAKLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWNsb2NrLW9ibGlnYXRpb25zLW9mLWVhY2gtZWxlbWVudCIgeHJlZmxhYmVsPSJPYmxpZ2F0aW9ucwotICAgIG9mIGVhY2ggZWxlbWVudCI+Ci0gICAgPHRpdGxlPgotICAgICAgT2JsaWdhdGlvbnMgb2YgZWFjaCBlbGVtZW50LgotICAgIDwvdGl0bGU+Ci0gICAgCi0gICAgPHBhcmE+Ci0gICAgICBMZXQgdXMgY2xhcmlmeSB0aGUgY29udHJhY3QgYmV0d2VlbiBHU3RyZWFtZXIgYW5kIGVhY2ggZWxlbWVudCBpbiB0aGUKLSAgICAgIHBpcGVsaW5lLgotICAgIDwvcGFyYT4KLSAgICAKLSAgICA8c2VjdDI+Ci0gICAgICA8dGl0bGU+Tm9uLWxpdmUgc291cmNlIGVsZW1lbnRzIDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgTm9uLWxpdmUgc291cmNlIGVsZW1lbnRzIG11c3QgcGxhY2UgYSB0aW1lc3RhbXAgaW4gZWFjaCBidWZmZXIgdGhhdAotICAgICAgICB0aGV5IGRlbGl2ZXIgd2hlbiB0aGlzIGlzIHBvc3NpYmxlLiAgVGhleSBtdXN0IGNob29zZSB0aGUgdGltZXN0YW1wcwotICAgICAgICBhbmQgdGhlIHZhbHVlcyBvZiB0aGUgU0VHTUVOVCBldmVudCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlCi0gICAgICAgIHJ1bm5pbmctdGltZSBvZiB0aGUgYnVmZmVyIHN0YXJ0cyBmcm9tIDAuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU29tZSBzb3VyY2VzLCBzdWNoIGFzIGZpbGVzcmMsIGlzIG5vdCBhYmxlIHRvIGdlbmVyYXRlIHRpbWVzdGFtcHMKLSAgICAgICAgb24gYWxsIGJ1ZmZlcnMuIEl0IGNhbiBhbmQgbXVzdCBob3dldmVyIGNyZWF0ZSBhIHRpbWVzdGFtcCBvbiB0aGUKLSAgICAgICAgZmlyc3QgYnVmZmVyICh3aXRoIGEgcnVubmluZy10aW1lIG9mIDApLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBzb3VyY2UgdGhlbiBwdXNoZXMgb3V0IHRoZSBTRUdNRU5UIGV2ZW50IGZvbGxvd2VkIGJ5IHRoZQotICAgICAgICB0aW1lc3RhbXBlZCBidWZmZXJzLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDI+Ci0gICAgICA8dGl0bGU+TGl2ZSBzb3VyY2UgZWxlbWVudHMgPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBMaXZlIHNvdXJjZSBlbGVtZW50cyBtdXN0IHBsYWNlIGEgdGltZXN0YW1wIGluIGVhY2ggYnVmZmVyIHRoYXQKLSAgICAgICAgdGhleSBkZWxpdmVyLiBUaGV5IG11c3QgY2hvb3NlIHRoZSB0aW1lc3RhbXBzIGFuZCB0aGUgdmFsdWVzIG9mIHRoZQotICAgICAgICBTRUdNRU5UIGV2ZW50IGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgcnVubmluZy10aW1lIG9mIHRoZSBidWZmZXIKLSAgICAgICAgbWF0Y2hlcyBleGFjdGx5IHRoZSBydW5uaW5nLXRpbWUgb2YgdGhlIHBpcGVsaW5lIGNsb2NrIHdoZW4gdGhlIGZpcnN0IAotICAgICAgICBieXRlIGluIHRoZSBidWZmZXIgd2FzIGNhcHR1cmVkLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDI+Ci0gICAgICA8dGl0bGU+UGFyc2VyL0RlY29kZXIvRW5jb2RlciBlbGVtZW50cyA8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFBhcnNlci9EZWNvZGVyIGVsZW1lbnRzIG11c3QgdXNlIHRoZSBpbmNvbWluZyB0aW1lc3RhbXBzIGFuZCB0cmFuc2ZlcgotICAgICAgICB0aG9zZSB0byB0aGUgcmVzdWx0aW5nIG91dHB1dCBidWZmZXJzLiBUaGV5IGFyZSBhbGxvd2VkIHRvIGludGVycG9sYXRlCi0gICAgICAgIG9yIHJlY29uc3RydWN0IHRpbWVzdGFtcHMgb24gbWlzc2luZyBpbnB1dCBidWZmZXJzIHdoZW4gdGhleSBjYW4uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0Mj4KLSAgICAgIDx0aXRsZT5EZW11eGVyIGVsZW1lbnRzIDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgRGVtdXhlciBlbGVtZW50cyBjYW4gdXN1YWxseSBzZXQgdGhlIHRpbWVzdGFtcHMgc3RvcmVkIGluc2lkZSB0aGUgbWVkaWEKLSAgICAgICAgZmlsZSBvbnRvIHRoZSBvdXRnb2luZyBidWZmZXJzLiBUaGV5IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgb3V0Z29pbmcKLSAgICAgICAgYnVmZmVycyB0aGF0IGFyZSB0byBiZSBwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZSBoYXZlIHRoZSBzYW1lCi0gICAgICAgIHJ1bm5pbmctdGltZS4gRGVtdXhlcnMgYWxzbyBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBpbmNvbWluZwotICAgICAgICB0aW1lc3RhbXBzIG9uIGJ1ZmZlcnMgYW5kIHVzZSB0aGF0IHRvIGNhbGN1bGF0ZSBhbiBvZmZzZXQgb24gdGhlIG91dGdvaW5nCi0gICAgICAgIGJ1ZmZlciB0aW1lc3RhbXBzLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDI+Ci0gICAgICA8dGl0bGU+TXV4ZXIgZWxlbWVudHM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE11eGVyIGVsZW1lbnRzIHNob3VsZCB1c2UgdGhlIGluY29taW5nIGJ1ZmZlciBydW5uaW5nLXRpbWUgdG8gbXV4IHRoZQotICAgICAgICBkaWZmZXJlbnQgc3RyZWFtcyB0b2dldGhlci4gVGhleSBzaG91bGQgY29weSB0aGUgaW5jb21pbmcgcnVubmluZy10aW1lCi0gICAgICAgIHRvIHRoZSBvdXRnb2luZyBidWZmZXJzLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0gICAgCi0gICAgPHNlY3QyPgotICAgICAgPHRpdGxlPlNpbmsgZWxlbWVudHM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0JSWYgdGhlIGVsZW1lbnQgaXMgaW50ZW5kZWQgdG8gZW1pdCBzYW1wbGVzIGF0IGEgc3BlY2lmaWMgdGltZSAocmVhbCB0aW1lCi0JcGxheWluZyksIHRoZSBlbGVtZW50IHNob3VsZCByZXF1aXJlIGEgY2xvY2ssIGFuZCB0aHVzIGltcGxlbWVudCB0aGUKLQltZXRob2QgPGZ1bmN0aW9uPnNldF9jbG9jazwvZnVuY3Rpb24+LgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBzaW5rIHNob3VsZCB0aGVuIG1ha2Ugc3VyZSB0aGF0IHRoZSBzYW1wbGUgd2l0aCBydW5uaW5nLXRpbWUgaXMgcGxheWVkCi0gICAgICAgIGV4YWN0bHkgd2hlbiB0aGUgcGlwZWxpbmUgY2xvY2sgcmVhY2hlcyB0aGF0IHJ1bm5pbmctdGltZSArIGxhdGVuY3kuCi0gICAgICAgIFNvbWUgZWxlbWVudHMgbWlnaHQgdXNlIHRoZSBjbG9jayBBUEkgc3VjaCBhcwotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2Nsb2NrX2lkX3dhaXQoKTwvZnVuY3Rpb24+Ci0gICAgICAgIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24uIE90aGVyIHNpbmtzIG1pZ2h0IG5lZWQgdG8gdXNlIG90aGVyIG1lYW5zIG9mCi0gICAgICAgIHNjaGVkdWxpbmcgdGltZWx5IHBsYXliYWNrIG9mIHRoZSBkYXRhLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0gIDwvc2VjdDE+Ci0gIAotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtZHBhcmFtcy54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC1kcGFyYW1zLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3OGMzMC4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9hZHZhbmNlZC1kcGFyYW1zLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0KLTwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KLQotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItZHBhcmFtcyI+Ci0gIDx0aXRsZT5TdXBwb3J0aW5nIER5bmFtaWMgUGFyYW1ldGVyczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIFdhcm5pbmcsIHRoaXMgcGFydCBkZXNjcmliZXMgMC4xMCBhbmQgaXMgb3V0ZGF0ZWQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgU29tZXRpbWVzIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3QgcG93ZXJmdWwgZW5vdWdoIHRvIGNvbnRyb2wgdGhlCi0gICAgcGFyYW1ldGVycyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mIHlvdXIgZWxlbWVudC4KLSAgICBXaGVuIHRoaXMgaXMgdGhlIGNhc2UgeW91IGNhbiBtYXJrIHRoZXNlIHBhcmFtZXRlcnMgYXMgYmVpbmcgQ29udHJvbGxhYmxlLgotICAgIEF3YXJlIGFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoZSBjb250cm9sbGVyIHN1YnN5c3RlbSB0byBkeW5hbWljYWxseSBhZGp1c3QKLSAgICB0aGUgcHJvcGVydHkgdmFsdWVzIG92ZXIgdGltZS4KLSAgPC9wYXJhPgotCi08c2VjdDEgaWQ9InNlY3Rpb24tZHBhcmFtLXN0YXJ0Ij4KLSAgPHRpdGxlPkdldHRpbmcgU3RhcnRlZDwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci0gICAgVGhlIGNvbnRyb2xsZXIgc3Vic3lzdGVtIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlCi0gICAgPGZpbGVuYW1lPmdzdGNvbnRyb2xsZXI8L2ZpbGVuYW1lPiBsaWJyYXJ5LiBZb3UgbmVlZCB0byBpbmNsdWRlIHRoZSBoZWFkZXIgaW4KLSAgICB5b3VyIGVsZW1lbnQncyBzb3VyY2UgZmlsZToKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0uLi4KLSNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7Z3N0L2NvbnRyb2xsZXIvZ3N0Y29udHJvbGxlci5oJmd0OwotLi4uCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgPHBhcmE+Ci0gICAgRXZlbiB0aG91Z2ggdGhlIDxmaWxlbmFtZT5nc3Rjb250cm9sbGVyPC9maWxlbmFtZT4gbGlicmFyeSBtYXkgYmUgbGlua2VkIGludG8KLSAgICB0aGUgaG9zdCBhcHBsaWNhdGlvbiwgeW91IHNob3VsZCBtYWtlIHN1cmUgaXQgaXMgaW5pdGlhbGl6ZWQgaW4geW91cgotICAgIDxmaWxlbmFtZT5wbHVnaW5faW5pdDwvZmlsZW5hbWU+IGZ1bmN0aW9uOgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLSAgc3RhdGljIGdib29sZWFuCi0gIHBsdWdpbl9pbml0IChHc3RQbHVnaW4gKnBsdWdpbikKLSAgewotICAgIC4uLgotICAgIC8qIGluaXRpYWxpemUgbGlicmFyeSAqLwotICAgIGdzdF9jb250cm9sbGVyX2luaXQgKE5VTEwsIE5VTEwpOwotICAgIC4uLgotICB9Ci0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgIEl0IG1ha2VzIG5vIHNlbnNlIGZvciBhbGwgR09iamVjdCBwYXJhbWV0ZXIgdG8gYmUgcmVhbC10aW1lIGNvbnRyb2xsZWQuCi0gICAgVGhlcmVmb3JlIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFyayBjb250cm9sbGFibGUgcGFyYW1ldGVycy4KLSAgICBUaGlzIGlzIGRvbmUgYnkgdXNpbmcgdGhlIHNwZWNpYWwgZmxhZyA8Y29uc3RhbnQ+R1NUX1BBUkFNX0NPTlRST0xMQUJMRTwvY29uc3RhbnQ+LgotICAgIHdoZW4gc2V0dGluZyB1cCBHT2JqZWN0IHBhcmFtcyBpbiB0aGUgPGZ1bmN0aW9uPl9jbGFzc19pbml0PC9mdW5jdGlvbj4gbWV0aG9kLiAgICAKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRlJFUSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJmcmVxIiwgIkZyZXF1ZW5jeSIsICJGcmVxdWVuY3kgb2YgdGVzdCBzaWduYWwiLAotICAgICAgICAgIDAuMCwgMjAwMDAuMCwgNDQwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICA8L3Byb2dyYW1saXN0aW5nPgotCi08L3NlY3QxPgotCi08c2VjdDEgaWQ9ImNoYXB0ZXItZHBhcmFtLWxvb3AiPgotICA8dGl0bGU+VGhlIERhdGEgUHJvY2Vzc2luZyBMb29wPC90aXRsZT4KLQotICA8cGFyYT4KLSAgICBJbiB0aGUgbGFzdCBzZWN0aW9uIHdlIGxlYXJuZWQgaG93IHRvIG1hcmsgR09iamVjdCBwYXJhbXMgYXMgY29udHJvbGxhYmxlLgotICAgIEFwcGxpY2F0aW9uIGRldmVsb3BlcnMgY2FuIHRoZW4gcXVldWUgcGFyYW1ldGVyIGNoYW5nZXMgZm9yIHRoZXNlIHBhcmFtZXRlcnMuCi0gICAgVGhlIGFwcHJvYWNoIHRoZSBjb250cm9sbGVyIHN1YnN5c3RlbSB0YWtlcyBpcyB0byBtYWtlIHBsdWdpbnMgcmVzcG9uc2libGUgCi0gICAgZm9yIHB1bGxpbmcgdGhlIGNoYW5nZXMgaW4uIFRoaXMgcmVxdWlyZXMganVzdCBvbmUgYWN0aW9uOgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKGVsZW1lbnQsdGltZXN0YW1wKTsKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgVGhpcyBjYWxsIG1ha2VzIGFsbCBwYXJhbWV0ZXItY2hhbmdlcyBmb3IgdGhlIGdpdmVuIHRpbWVzdGFtcCBhY3RpdmUgYnkKLSAgICBhZGp1c3RpbmcgdGhlIEdPYmplY3QgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudC4gSXRzIHVwIHRvIHRoZSBlbGVtZW50IHRvCi0gICAgZGV0ZXJtaW5lIHRoZSBzeW5jaHJvbmlzYXRpb24gcmF0ZS4KLSAgPC9wYXJhPgotICAKLSAgPHNlY3QyIGlkPSJjaGFwdGVyLWRwYXJhbS1sb29wLXZpZGVvIj4KLSAgICA8dGl0bGU+VGhlIERhdGEgUHJvY2Vzc2luZyBMb29wIGZvciBWaWRlbyBFbGVtZW50czwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBGb3IgdmlkZW8gcHJvY2Vzc2luZyBlbGVtZW50cyBpdCBpcyB0aGUgYmVzdCB0byBzeW5jaHJvbmlzZSBmb3IgZXZlcnkgZnJhbWUuCi0gICAgICBUaGF0IG1lYW5zIG9uZSB3b3VsZCBhZGQgdGhlIDxmdW5jdGlvbj5nc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCk8L2Z1bmN0aW9uPgotICAgICAgY2FsbCBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24gdG8gdGhlIGRhdGEgcHJvY2Vzc2luZyBmdW5jdGlvbiBvZgotICAgICAgdGhlIGVsZW1lbnQuCi0gICAgPC9wYXJhPgotICA8L3NlY3QyPgotCi0gIDxzZWN0MiBpZD0iY2hhcHRlci1kcGFyYW0tbG9vcC1hdWRpbyI+Ci0gICAgPHRpdGxlPlRoZSBEYXRhIFByb2Nlc3NpbmcgTG9vcCBmb3IgQXVkaW8gRWxlbWVudHM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgRm9yIGF1ZGlvIHByb2Nlc3NpbmcgZWxlbWVudHMgdGhlIGNhc2UgaXMgbm90IGFzIGVhc3kgYXMgZm9yIHZpZGVvCi0gICAgICBwcm9jZXNzaW5nIGVsZW1lbnRzLiBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgYXVkaW8gaGFzIGEgbXVjaCBoaWdoZXIgcmF0ZS4KLSAgICAgIEZvciBQQUwgdmlkZW8gb25lIHdpbGwgZS5nLiBwcm9jZXNzIDI1IGZ1bGwgZnJhbWVzIHBlciBzZWNvbmQsIGJ1dCBmb3IKLSAgICAgIHN0YW5kYXJkIGF1ZGlvIGl0IHdpbGwgYmUgNDQxMDAgc2FtcGxlcy4KLSAgICAgIEl0IGlzIHJhcmVseSB1c2VmdWwgdG8gc3luY2hyb25pc2UgY29udHJvbGxhYmxlIHBhcmFtZXRlcnMgdGhhdCBvZnRlbi4gCi0gICAgICBUaGUgZWFzaWVzdCBzb2x1dGlvbiBpcyBhbHNvIHRvIGhhdmUganVzdCBvbmUgc3luY2hyb25pc2F0aW9uIGNhbGwgcGVyCi0gICAgICBidWZmZXIgcHJvY2Vzc2luZy4gVGhpcyBtYWtlcyB0aGUgY29udHJvbC1yYXRlIGRlcGVuZCBvbiB0aGUgYnVmZmVyCi0gICAgICBzaXplLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEVsZW1lbnRzIHRoYXQgbmVlZCBhIHNwZWNpZmljIGNvbnRyb2wtcmF0ZSBuZWVkIHRvIGJyZWFrIHRoZWlyIGRhdGEKLSAgICAgIHByb2Nlc3NpbmcgbG9vcCB0byBzeW5jaHJvbmlzZSBldmVyeSBuLXNhbXBsZXMuCi0gICAgPC9wYXJhPgotICA8L3NlY3QyPgotPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC1ldmVudHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDcxYWNlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL2FkdmFuY2VkLWV2ZW50cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NDIgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYWR2YW5jZWQtZXZlbnRzIj4KLSAgPHRpdGxlPkV2ZW50czogU2Vla2luZywgTmF2aWdhdGlvbiBhbmQgTW9yZTwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBldmVudCB0eXBlcyBidXQgb25seSB0d28gd2F5cyB0aGV5IGNhbiB0cmF2ZWwgaW4KLSAgICB0aGUgcGlwZWxpbmU6IGRvd25zdHJlYW0gb3IgdXBzdHJlYW0uIEl0IGlzIHZlcnkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQKLSAgICBob3cgYm90aCBvZiB0aGVzZSBtZXRob2RzIHdvcmsgYmVjYXVzZSBpZiBvbmUgZWxlbWVudCBpbiB0aGUgcGlwZWxpbmUgaXMgbm90Ci0gICAgaGFuZGxpbmcgdGhlbSBjb3JyZWN0bHkgdGhlIHdob2xlIGV2ZW50IHN5c3RlbSBvZiB0aGUgcGlwZWxpbmUgaXMgYnJva2VuLgotICAgIFdlIHdpbGwgdHJ5IHRvIGV4cGxhaW4gaGVyZSBob3cgdGhlc2UgbWV0aG9kcyB3b3JrIGFuZCBob3cgZWxlbWVudHMgYXJlIAotICAgIHN1cHBvc2VkIHRvIGltcGxlbWVudCB0aGVtLgotICA8L3BhcmE+Ci0gIDxzZWN0MSBpZD0ic2VjdGlvbi1ldmVudHMtZG93bnN0cmVhbSIgeHJlZmxhYmVsPSJEb3duc3RyZWFtIGV2ZW50cyI+Ci0gICAgPHRpdGxlPkRvd25zdHJlYW0gZXZlbnRzPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIERvd25zdHJlYW0gZXZlbnRzIGFyZSByZWNlaXZlZCB0aHJvdWdoIHRoZSBzaW5rIHBhZCdzIGV2ZW50IGhhbmRsZXIsCi0gICAgICBhcyBzZXQgdXNpbmcgPGZ1bmN0aW9uPmdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uICgpPC9mdW5jdGlvbj4gd2hlbgotICAgICAgdGhlIHBhZCB3YXMgY3JlYXRlZC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBEb3duc3RyZWFtIGV2ZW50cyBjYW4gdHJhdmVsIGluIHR3byB3YXlzOiB0aGV5IGNhbiBiZSBpbi1iYW5kIChzZXJpYWxpc2VkCi0gICAgICB3aXRoIHRoZSBidWZmZXIgZmxvdykgb3Igb3V0LW9mLWJhbmQgKHRyYXZlbGxpbmcgdGhyb3VnaCB0aGUgcGlwZWxpbmUKLSAgICAgIGluc3RhbnRseSwgcG9zc2libHkgbm90IGluIHRoZSBzYW1lIHRocmVhZCBhcyB0aGUgc3RyZWFtaW5nIHRocmVhZCB0aGF0Ci0gICAgICBpcyBwcm9jZXNzaW5nIHRoZSBidWZmZXJzLCBza2lwcGluZyBhaGVhZCBvZiBidWZmZXJzIGJlaW5nIHByb2Nlc3NlZAotICAgICAgb3IgcXVldWVkIGluIHRoZSBwaXBlbGluZSkuIFRoZSBtb3N0IGNvbW1vbiBkb3duc3RyZWFtIGV2ZW50cwotICAgICAgKFNFR01FTlQsIENBUFMsIFRBRywgRU9TKSBhcmUgYWxsIHNlcmlhbGlzZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSGVyZSBpcyBhIHR5cGljYWwgZXZlbnQgZnVuY3Rpb246Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X2ZpbHRlcl9zaW5rX2V2ZW50IChHc3RQYWQgICpwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0TXlGaWx0ZXIgKmZpbHRlcjsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGZpbHRlciA9IEdTVF9NWV9GSUxURVIgKHBhcmVudCk7Ci0gIC4uLgotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICAvKiBtYXliZSBzYXZlIGFuZC9vciB1cGRhdGUgdGhlIGN1cnJlbnQgc2VnbWVudCAoZS5nLiBmb3Igb3V0cHV0Ci0gICAgICAgKiBjbGlwcGluZykgb3IgY29udmVydCB0aGUgZXZlbnQgaW50byBvbmUgaW4gYSBkaWZmZXJlbnQgZm9ybWF0Ci0gICAgICAgKiAoZS5nLiBCWVRFUyB0byBUSU1FKSBvciBkcm9wIGl0IGFuZCBzZXQgYSBmbGFnIHRvIHNlbmQgYSBzZWdtZW50Ci0gICAgICAgKiBldmVudCBpbiBhIGRpZmZlcmVudCBmb3JtYXQgbGF0ZXIgKi8KLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZmlsdGVyLSZndDtzcmNfcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICAvKiBlbmQtb2Ytc3RyZWFtLCB3ZSBzaG91bGQgY2xvc2UgZG93biBhbGwgc3RyZWFtIGxlZnRvdmVycyBoZXJlICovCi0gICAgICBnc3RfbXlfZmlsdGVyX3N0b3BfcHJvY2Vzc2luZyAoZmlsdGVyKTsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZmlsdGVyLSZndDtzcmNfcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgZ3N0X215X2ZpbHRlcl9jbGVhcl90ZW1wb3JhcnlfYnVmZmVycyAoZmlsdGVyKTsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZmlsdGVyLSZndDtzcmNfcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICAuLi4KLSAgcmV0dXJuIHJldDsKLX0KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICBJZiB5b3VyIGVsZW1lbnQgaXMgY2hhaW4tYmFzZWQsIHlvdSB3aWxsIGFsbW9zdCBhbHdheXMgaGF2ZSB0byBpbXBsZW1lbnQKLSAgICBhIHNpbmsgZXZlbnQgZnVuY3Rpb24sIHNpbmNlIHRoYXQgaXMgaG93IHlvdSBhcmUgbm90aWZpZWQgYWJvdXQKLSAgICBzZWdtZW50cywgY2FwcyBhbmQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgIElmIHlvdXIgZWxlbWVudCBpcyBleGNsdXNpdmVseSBsb29wLWJhc2VkLCB5b3UgbWF5IG9yIG1heSBub3Qgd2FudCBhCi0gICAgc2luayBldmVudCBmdW5jdGlvbiAoc2luY2UgdGhlIGVsZW1lbnQgaXMgZHJpdmluZyB0aGUgcGlwZWxpbmUgaXQgd2lsbAotICAgIGtub3cgdGhlIGxlbmd0aCBvZiB0aGUgc3RyZWFtIGluIGFkdmFuY2Ugb3IgYmUgbm90aWZpZWQgYnkgdGhlIGZsb3cKLSAgICByZXR1cm4gdmFsdWUgb2YgPGZ1bmN0aW9uPmdzdF9wYWRfcHVsbF9yYW5nZSgpPC9mdW5jdGlvbj4uIEluIHNvbWUgY2FzZXMKLSAgICBldmVuIGxvb3AtYmFzZWQgZWxlbWVudCBtYXkgcmVjZWl2ZSBldmVudHMgZnJvbSB1cHN0cmVhbSB0aG91Z2ggKGZvcgotICAgIGV4YW1wbGUgYXVkaW8gZGVjb2RlcnMgd2l0aCBhbiBpZDNkZW11eCBvciBhcGVkZW11eCBlbGVtZW50IGluIGZyb250IG9mCi0gICAgdGhlbSwgb3IgZGVtdXhlcnMgdGhhdCBhcmUgYmVpbmcgZmVkIGlucHV0IGZyb20gc291cmNlcyB0aGF0IHNlbmQKLSAgICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJlYW0gaW4gY3VzdG9tIGV2ZW50cywgYXMgRFZEIHNvdXJjZXMKLSAgICBkbykuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWV2ZW50cy11cHN0cmVhbSIgeHJlZmxhYmVsPSJVcHN0cmVhbSBldmVudHMiPgotICAgIDx0aXRsZT5VcHN0cmVhbSBldmVudHM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVXBzdHJlYW0gZXZlbnRzIGFyZSBnZW5lcmF0ZWQgYnkgYW4gZWxlbWVudCBzb21ld2hlcmUgZG93bnN0cmVhbSBpbgotICAgICAgdGhlIHBpcGVsaW5lIChleGFtcGxlOiBhIHZpZGVvIHNpbmsgbWF5IGdlbmVyYXRlIG5hdmlnYXRpb24KLSAgICAgIGV2ZW50cyB0aGF0IGluZm9ybXMgdXBzdHJlYW0gZWxlbWVudHMgYWJvdXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YKLSAgICAgIHRoZSBtb3VzZSBwb2ludGVyKS4gVGhpcyBtYXkgYWxzbyBoYXBwZW4gaW5kaXJlY3RseSBvbiByZXF1ZXN0IG9mIHRoZQotICAgICAgYXBwbGljYXRpb24sIGZvciBleGFtcGxlIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGV4ZWN1dGVzIGEgc2VlayBvbiBhCi0gICAgICBwaXBlbGluZSB0aGlzIHNlZWsgcmVxdWVzdCB3aWxsIGJlIHBhc3NlZCBvbiB0byBhIHNpbmsgZWxlbWVudCB3aGljaAotICAgICAgd2lsbCB0aGVuIGluIHR1cm4gZ2VuZXJhdGUgYW4gdXBzdHJlYW0gc2VlayBldmVudC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgbW9zdCBjb21tb24gdXBzdHJlYW0gZXZlbnRzIGFyZSBzZWVrIGV2ZW50cywgUXVhbGl0eS1vZi1TZXJ2aWNlCi0gICAgICAoUW9TKSBhbmQgcmVjb25maWd1cmUgZXZlbnRzLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEFuIHVwc3RyZWFtIGV2ZW50IGNhbiBiZSBzZW50IHVzaW5nIHRoZQotICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfc2VuZF9ldmVudDwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBUaGlzCi0gICAgICBmdW5jdGlvbiBzaW1wbHkgY2FsbCB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVyIG9mIHRoYXQgcGFkLiBUaGUgZGVmYXVsdAotICAgICAgZXZlbnQgaGFuZGxlciBvZiBwYWRzIGlzIDxmdW5jdGlvbj5nc3RfcGFkX2V2ZW50X2RlZmF1bHQ8L2Z1bmN0aW9uPiwgYW5kCi0gICAgICBpdCBiYXNpY2FsbHkgc2VuZHMgdGhlIGV2ZW50IHRvIHRoZSBwZWVyIG9mIHRoZSBpbnRlcm5hbGx5IGxpbmtlZCBwYWQuCi0gICAgICBTbyB1cHN0cmVhbSBldmVudHMgYWx3YXlzIGFycml2ZSBvbiB0aGUgc3JjIHBhZCBvZiB5b3VyIGVsZW1lbnQgYW5kIGFyZQotICAgICAgaGFuZGxlZCBieSB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVyIGV4Y2VwdCBpZiB5b3Ugb3ZlcnJpZGUgdGhhdCBoYW5kbGVyCi0gICAgICB0byBoYW5kbGUgaXQgeW91cnNlbGYuIFRoZXJlIGFyZSBzb21lIHNwZWNpZmljIGNhc2VzIHdoZXJlIHlvdSBoYXZlIHRvCi0gICAgICBkbyB0aGF0IDoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdCBtYXJrPSJvcGVuY2lyY2xlIj4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgeW91IGhhdmUgbXVsdGlwbGUgc2luayBwYWRzIGluIHlvdXIgZWxlbWVudC4gSW4gdGhhdCBjYXNlIHlvdSB3aWxsCi0gICAgICAgICAgaGF2ZSB0byBkZWNpZGUgd2hpY2ggb25lIG9mIHRoZSBzaW5rIHBhZHMgeW91IHdpbGwgc2VuZCB0aGUgZXZlbnQgdG8KLSAgICAgICAgICAoaWYgbm90IGFsbCBvZiB0aGVtKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgeW91IG5lZWQgdG8gaGFuZGxlIHRoYXQgZXZlbnQgbG9jYWxseS4gRm9yIGV4YW1wbGUgYSBuYXZpZ2F0aW9uIAotICAgICAgICAgIGV2ZW50IHRoYXQgeW91IHdpbGwgd2FudCB0byBjb252ZXJ0IGJlZm9yZSBzZW5kaW5nIGl0IHVwc3RyZWFtLCBvcgotICAgICAgICAgIGEgUW9TIGV2ZW50IHRoYXQgeW91IHdhbnQgdG8gaGFuZGxlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDxwYXJhPgotICAgICAgVGhlIHByb2Nlc3NpbmcgeW91IHdpbGwgZG8gaW4gdGhhdCBldmVudCBoYW5kbGVyIGRvZXMgbm90IHJlYWxseSBtYXR0ZXIKLSAgICAgIGJ1dCB0aGVyZSBhcmUgaW1wb3J0YW50IHJ1bGVzIHlvdSBoYXZlIHRvIGFic29sdXRlbHkgcmVzcGVjdCBiZWNhdXNlCi0gICAgICBvbmUgYnJva2VuIGVsZW1lbnQgZXZlbnQgaGFuZGxlciBpcyBicmVha2luZyB0aGUgd2hvbGUgcGlwZWxpbmUgZXZlbnQgCi0gICAgICBoYW5kbGluZy4gSGVyZSB0aGV5IGFyZSA6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3QgbWFyaz0ib3BlbmNpcmNsZSI+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFsd2F5cyBoYW5kbGUgZXZlbnRzIHlvdSB3b24ndCBoYW5kbGUgdXNpbmcgdGhlIGRlZmF1bHQgCi0gICAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfZXZlbnRfZGVmYXVsdDwvZnVuY3Rpb24+IG1ldGhvZC4gVGhpcyBtZXRob2Qgd2lsbAotICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgZXZlbnQsIGZvcndhcmQgdGhlIGV2ZW50IG9yIGRyb3AgaXQuIAotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJZiB5b3UgYXJlIGdlbmVyYXRpbmcgc29tZSBuZXcgZXZlbnQgYmFzZWQgb24gdGhlIG9uZSB5b3UgcmVjZWl2ZWQKLSAgICAgICAgICBkb24ndCBmb3JnZXQgdG8gZ3N0X2V2ZW50X3VucmVmIHRoZSBldmVudCB5b3UgcmVjZWl2ZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gYXJlIHN1cHBvc2VkIHRvIHJldHVybiBUUlVFIG9yIEZBTFNFIGluZGljYXRpbmcKLSAgICAgICAgICBpZiB0aGUgZXZlbnQgaGFzIGJlZW4gaGFuZGxlZCBvciBub3QuIE5ldmVyIHNpbXBseSByZXR1cm4gVFJVRS9GQUxTRQotICAgICAgICAgIGluIHRoYXQgaGFuZGxlciBleGNlcHQgaWYgeW91IHJlYWxseSBrbm93IHRoYXQgeW91IGhhdmUgaGFuZGxlZCB0aGF0IAotICAgICAgICAgIGV2ZW50LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBSZW1lbWJlciB0aGF0IHRoZSBldmVudCBoYW5kbGVyIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGEgZGlmZmVyZW50Ci0gICAgICAgICAgdGhyZWFkIHRoYW4gdGhlIHN0cmVhbWluZyB0aHJlYWQsIHNvIG1ha2Ugc3VyZSB5b3UgdXNlCi0gICAgICAgICAgYXBwcm9wcmlhdGUgbG9ja2luZyBldmVyeXdoZXJlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1ldmVudHMtZGVmaW5pdGlvbnMiIHhyZWZsYWJlbD0iQWxsIEV2ZW50cyBUb2dldGhlciI+Ci0gICAgPHRpdGxlPkFsbCBFdmVudHMgVG9nZXRoZXI8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhpcyBjaGFwdGVyIGZvbGxvd3MgYSBsaXN0IG9mIGFsbCBkZWZpbmVkIGV2ZW50cyB0aGF0IGFyZSBjdXJyZW50bHkKLSAgICAgIGJlaW5nIHVzZWQsIHBsdXMgaG93IHRoZXkgc2hvdWxkIGJlIHVzZWQvaW50ZXJwcmV0ZWQuIFlvdSBjYW4gY2hlY2sgdGhlCi0gICAgICB3aGF0IHR5cGUgYSBjZXJ0YWluIGV2ZW50IGlzIHVzaW5nIHRoZSBHU1RfRVZFTlRfVFlQRSBtYWNybyAob3IgaWYgeW91Ci0gICAgICBuZWVkIGEgc3RyaW5nIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgeW91IGNhbiB1c2UgR1NUX0VWRU5UX1RZUEVfTkFNRSkuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhpcyBjaGFwdGVyLCB3ZSB3aWxsIGRpc2N1c3MgdGhlIGZvbGxvd2luZyBldmVudHM6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0ic2VjdGlvbi1ldmVudHMtc3RyZWFtLXN0YXJ0Ii8+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0ic2VjdGlvbi1ldmVudHMtY2FwcyIvPjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPjxwYXJhPjx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZXZlbnRzLXNlZ21lbnQiLz48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWV2ZW50cy10YWciLz48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWV2ZW50cy1lb3MiLz48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWV2ZW50cy10b2MiLz48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWV2ZW50cy1nYXAiLz48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWV2ZW50cy1mbHVzaC1zdGFydCIvPjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPjxwYXJhPjx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tZXZlbnRzLWZsdXNoLXN0b3AiLz48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWV2ZW50cy1xb3MiLz48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT48cGFyYT48eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWV2ZW50cy1zZWVrIi8+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+PHBhcmE+PHhyZWYgbGlua2VuZD0ic2VjdGlvbi1ldmVudHMtbmF2Ii8+PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBGb3IgbW9yZSBjb21wcmVoZW5zaXZlIGluZm9ybWF0aW9uIGFib3V0IGV2ZW50cyBhbmQgaG93IHRoZXkgc2hvdWxkIGJlCi0gICAgICB1c2VkIGNvcnJlY3RseSBpbiB2YXJpb3VzIGNpcmN1bXN0YW5jZXMgcGxlYXNlIGNvbnN1bHQgdGhlIEdTdHJlYW1lcgotICAgICAgZGVzaWduIGRvY3VtZW50YXRpb24uIFRoaXMgc2VjdGlvbiBvbmx5IGdpdmVzIGEgZ2VuZXJhbCBvdmVydmlldy4gICAgICAKLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLXN0cmVhbS1zdGFydCIgeHJlZmxhYmVsPSJTdHJlYW0gU3RhcnQiPgotICAgICAgPHRpdGxlPlN0cmVhbSBTdGFydDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV1JJVEVNRQotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLWNhcHMiIHhyZWZsYWJlbD0iQ2FwcyI+Ci0gICAgICA8dGl0bGU+Q2FwczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIENBUFMgZXZlbnQgY29udGFpbnMgdGhlIGZvcm1hdCBkZXNjcmlwdGlvbiBvZiB0aGUgZm9sbG93aW5nCi0gICAgICAgIGJ1ZmZlcnMuIFNlZSA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLW5lZ290aWF0aW9uIi8+IGZvciBtb3JlCi0gICAgICAgIGluZm9ybWF0aW9uIGFib3V0IG5lZ290aWF0aW9uLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLXNlZ21lbnQiIHhyZWZsYWJlbD0iU2VnbWVudCI+Ci0gICAgICA8dGl0bGU+U2VnbWVudDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQSBzZWdtZW50IGV2ZW50IGlzIHNlbnQgZG93bnN0cmVhbSB0byBhbm5vdW5jZSB0aGUgcmFuZ2Ugb2YgdmFsaWQKLSAgICAgICAgdGltZXN0YW1wcyBpbiB0aGUgc3RyZWFtIGFuZCBob3cgdGhleSBzaG91bGQgYmUgdHJhbnNmb3JtZWQgaW50bwotICAgICAgICBydW5uaW5nLXRpbWUgYW5kIHN0cmVhbS10aW1lLiBBIHNlZ21lbnQgZXZlbnQgbXVzdCBhbHdheXMgYmUgc2VudAotICAgICAgICBiZWZvcmUgdGhlIGZpcnN0IGJ1ZmZlciBvZiBkYXRhIGFuZCBhZnRlciBhIGZsdXNoIChzZWUgYWJvdmUpLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaXJzdCBzZWdtZW50IGV2ZW50IGlzIGNyZWF0ZWQgYnkgdGhlIGVsZW1lbnQgZHJpdmluZyB0aGUgCi0gICAgICAgIHBpcGVsaW5lLCBsaWtlIGEgc291cmNlIG9wZXJhdGluZyBpbiBwdXNoLW1vZGUgb3IgYSBkZW11eGVyL2RlY29kZXIKLSAgICAgICAgb3BlcmF0aW5nIHB1bGwtYmFzZWQuIFRoaXMgc2VnbWVudCBldmVudCB0aGVuIHRyYXZlbHMgZG93biB0aGUKLSAgICAgICAgcGlwZWxpbmUgYW5kIG1heSBiZSB0cmFuc2Zvcm1lZCBvbiB0aGUgd2F5IChhIGRlY29kZXIsIGZvciBleGFtcGxlLAotICAgICAgICBtaWdodCByZWNlaXZlIGEgc2VnbWVudCBldmVudCBpbiBCWVRFUyBmb3JtYXQgYW5kIG1pZ2h0IHRyYW5zZm9ybQotICAgICAgICB0aGlzIGludG8gYSBzZWdtZW50IGV2ZW50IGluIFRJTUVTIGZvcm1hdCBiYXNlZCBvbiB0aGUgYXZlcmFnZQotICAgICAgICBiaXRyYXRlKS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGVsZW1lbnQgdHlwZSwgdGhlIGV2ZW50IGNhbiBzaW1wbHkgYmUgZm9yd2FyZGVkIHVzaW5nCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2V2ZW50X2RlZmF1bHQgKCk8L2Z1bmN0aW9uPiwgb3IgaXQgc2hvdWxkIGJlIHBhcnNlZAotICAgICAgICBhbmQgYSBtb2RpZmllZCBldmVudCBzaG91bGQgYmUgc2VudCBvbi4gVGhlIGxhc3QgaXMgdHJ1ZSBmb3IgZGVtdXhlcnMsCi0gICAgICAgIHdoaWNoIGdlbmVyYWxseSBoYXZlIGEgYnl0ZS10by10aW1lIGNvbnZlcnNpb24gY29uY2VwdC4gVGhlaXIgaW5wdXQKLSAgICAgICAgaXMgdXN1YWxseSBieXRlLWJhc2VkLCBzbyB0aGUgaW5jb21pbmcgZXZlbnQgd2lsbCBoYXZlIGFuIG9mZnNldCBpbgotICAgICAgICBieXRlIHVuaXRzICg8c3ltYm9sPkdTVF9GT1JNQVRfQllURVM8L3N5bWJvbD4pLCB0b28uIEVsZW1lbnRzCi0gICAgICAgIGRvd25zdHJlYW0sIGhvd2V2ZXIsIGV4cGVjdCBzZWdtZW50IGV2ZW50cyBpbiB0aW1lIHVuaXRzLCBzbyB0aGF0Ci0gICAgICAgIGl0IGNhbiBiZSB1c2VkIHRvIHN5bmNocm9uaXplIGFnYWluc3QgdGhlIHBpcGVsaW5lIGNsb2NrLiBUaGVyZWZvcmUsCi0gICAgICAgIGRlbXV4ZXJzIGFuZCBzaW1pbGFyIGVsZW1lbnRzIHNob3VsZCBub3QgZm9yd2FyZCB0aGUgZXZlbnQsIGJ1dCBwYXJzZQotICAgICAgICBpdCwgZnJlZSBpdCBhbmQgc2VuZCBhIHNlZ21lbnQgZXZlbnQgKGluIHRpbWUgdW5pdHMsCi0gICAgICAgIDxzeW1ib2w+R1NUX0ZPUk1BVF9USU1FPC9zeW1ib2w+KSBmdXJ0aGVyIGRvd25zdHJlYW0uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHNlZ21lbnQgZXZlbnQgaXMgY3JlYXRlZCB1c2luZyB0aGUgZnVuY3Rpb24KLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9ldmVudF9uZXdfc2VnbWVudCAoKTwvZnVuY3Rpb24+LiBTZWUgdGhlIEFQSQotICAgICAgICByZWZlcmVuY2UgYW5kIGRlc2lnbiBkb2N1bWVudCBmb3IgZGV0YWlscyBhYm91dCBpdHMgcGFyYW1ldGVycy4gCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgRWxlbWVudHMgcGFyc2luZyB0aGlzIGV2ZW50IGNhbiB1c2UgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQoKQotICAgICAgICB0byBleHRyYWN0IHRoZSBldmVudCBkZXRhaWxzLiBFbGVtZW50cyBtYXkgZmluZCB0aGUgR3N0U2VnbWVudAotICAgICAgICBBUEkgdXNlZnVsIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCAoaWYgdGhleSB3YW50IHRvIHVzZQotICAgICAgICBpdCBmb3Igb3V0cHV0IGNsaXBwaW5nLCBmb3IgZXhhbXBsZSkuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1ldmVudHMtdGFnIiB4cmVmbGFiZWw9IlRhZyAobWV0YWRhdGEpIj4KLSAgICAgIDx0aXRsZT5UYWcgKG1ldGFkYXRhKTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGFnZ2luZyBldmVudHMgYXJlIGJlaW5nIHNlbnQgZG93bnN0cmVhbSB0byBpbmRpY2F0ZSB0aGUgdGFncyBhcyBwYXJzZWQKLSAgICAgICAgZnJvbSB0aGUgc3RyZWFtIGRhdGEuIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgdG8gcHJlc2VydmUgdGFncyBkdXJpbmcKLSAgICAgICAgc3RyZWFtIHRyYW5zY29kaW5nIGZyb20gb25lIGZvcm1hdCB0byB0aGUgb3RoZXIuIFRhZ3MgYXJlIGRpc2N1c3NlZAotICAgICAgICBleHRlbnNpdmVseSBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWFkdmFuY2VkLXRhZ2dpbmciLz4uIE1vc3QKLSAgICAgICAgZWxlbWVudHMgd2lsbCBzaW1wbHkgZm9yd2FyZCB0aGUgZXZlbnQgYnkgY2FsbGluZwotICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9ldmVudF9kZWZhdWx0ICgpPC9mdW5jdGlvbj4uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHRhZyBldmVudCBpcyBjcmVhdGVkIHVzaW5nIHRoZSBmdW5jdGlvbgotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2V2ZW50X25ld190YWcgKCk8L2Z1bmN0aW9uPiwgYnV0IG1vcmUgb2Z0ZW4gZWxlbWVudHMgd2lsbAotICAgICAgICBzZW5kIGEgdGFnIGV2ZW50IGRvd25zdHJlYW0gdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEgbWVzc2FnZQotICAgICAgICBvbiB0aGUgYnVzIGJ5IHNpbmsgZWxlbWVudHMuCi0gICAgICAgIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgcmVxdWlyZSBhIGZpbGxlZC1pbiB0YWdsaXN0IGFzCi0gICAgICAgIGFyZ3VtZW50LCB3aGljaCB0aGV5IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgRWxlbWVudHMgcGFyc2luZyB0aGlzIGV2ZW50IGNhbiB1c2UgdGhlIGZ1bmN0aW9uCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfZXZlbnRfcGFyc2VfdGFnICgpPC9mdW5jdGlvbj4gdG8gYWNxdWlyZSB0aGUKLSAgICAgICAgdGFnbGlzdCB0aGF0IHRoZSBldmVudCBjb250YWlucy4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWV2ZW50cy1lb3MiIHhyZWZsYWJlbD0iRW5kIG9mIFN0cmVhbSAoRU9TKSI+Ci0gICAgICA8dGl0bGU+RW5kIG9mIFN0cmVhbSAoRU9TKTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgRW5kLW9mLXN0cmVhbSBldmVudHMgYXJlIHNlbnQgaWYgdGhlIHN0cmVhbSB0aGF0IGFuIGVsZW1lbnQgc2VuZHMgb3V0Ci0gICAgICAgIGlzIGZpbmlzaGVkLiBBbiBlbGVtZW50IHJlY2VpdmluZyB0aGlzIGV2ZW50IChmcm9tIHVwc3RyZWFtLCBzbyBpdAotICAgICAgICByZWNlaXZlcyBpdCBvbiBpdHMgc2lua3BhZCkgd2lsbCBnZW5lcmFsbHkganVzdCBwcm9jZXNzIGFueSBidWZmZXJlZAotICAgICAgICBkYXRhIChpZiB0aGVyZSBpcyBhbnkpIGFuZCB0aGVuIGZvcndhcmQgdGhlIGV2ZW50IGZ1cnRoZXIgZG93bnN0cmVhbS4KLSAgICAgICAgVGhlIDxmdW5jdGlvbj5nc3RfcGFkX2V2ZW50X2RlZmF1bHQgKCk8L2Z1bmN0aW9uPiB0YWtlcyBjYXJlIG9mIGFsbAotICAgICAgICB0aGlzLCBzbyBtb3N0IGVsZW1lbnRzIGRvIG5vdCBuZWVkIHRvIHN1cHBvcnQgdGhpcyBldmVudC4gRXhjZXB0aW9ucyBhcmUKLSAgICAgICAgZWxlbWVudHMgdGhhdCBleHBsaWNpdGx5IG5lZWQgdG8gY2xvc2UgYSByZXNvdXJjZSBkb3duIG9uIEVPUywgYW5kCi0gICAgICAgIE4tdG8tMSBlbGVtZW50cy4gTm90ZSB0aGF0IHRoZSBzdHJlYW0gaXRzZWxmIGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPgotICAgICAgICBhIHJlc291cmNlIHRoYXQgc2hvdWxkIGJlIGNsb3NlZCBkb3duIG9uIEVPUyEgQXBwbGljYXRpb25zIG1pZ2h0IHNlZWsKLSAgICAgICAgYmFjayB0byBhIHBvaW50IGJlZm9yZSBFT1MgYW5kIGNvbnRpbnVlIHBsYXlpbmcgYWdhaW4uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIEVPUyBldmVudCBoYXMgbm8gcHJvcGVydGllcywgd2hpY2ggbWFrZXMgaXQgb25lIG9mIHRoZSBzaW1wbGVzdAotICAgICAgICBldmVudHMgaW4gJkdTdHJlYW1lcjsuIEl0IGlzIGNyZWF0ZWQgdXNpbmcgdGhlIAotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2V2ZW50X25ld19lb3MoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgPGVtcGhhc2lzPm9ubHkgZWxlbWVudHMgZHJpdmluZyB0aGUKLSAgICAgICAgcGlwZWxpbmUgc2hvdWxkIGV2ZXIgc2VuZCBhbiBFT1MgZXZlbnQ8L2VtcGhhc2lzPi4gSWYgeW91ciBlbGVtZW50Ci0gICAgICAgIGlzIGNoYWluLWJhc2VkLCBpdCBpcyBub3QgZHJpdmluZyB0aGUgcGlwZWxpbmUuIENoYWluLWJhc2VkIGVsZW1lbnRzCi0gICAgICAgIHNob3VsZCBqdXN0IHJldHVybiBHU1RfRkxPV19FT1MgZnJvbSB0aGVpciBjaGFpbiBmdW5jdGlvbiBhdAotICAgICAgICB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gKG9yIHRoZSBjb25maWd1cmVkIHNlZ21lbnQpLCB0aGUgdXBzdHJlYW0KLSAgICAgICAgZWxlbWVudCB0aGF0IGlzIGRyaXZpbmcgdGhlIHBpcGVsaW5lIHdpbGwgdGhlbiB0YWtlIGNhcmUgb2YKLSAgICAgICAgc2VuZGluZyB0aGUgRU9TIGV2ZW50IChvciBhbHRlcm5hdGl2ZWx5IHBvc3QgYSBTRUdNRU5UX0RPTkUgbWVzc2FnZQotICAgICAgICBvbiB0aGUgYnVzIGRlcGVuZGluZyBvbiB0aGUgbW9kZSBvZiBvcGVyYXRpb24pLiBJZiB5b3UgYXJlIGltcGxlbWVudGluZwotICAgICAgICB5b3VyIG93biBzb3VyY2UgZWxlbWVudCwgeW91IGFsc28gZG8gbm90IG5lZWQgdG8gZXZlciBtYW51YWxseSBzZW5kCi0gICAgICAgIGFuIEVPUyBldmVudCwgeW91IHNob3VsZCBhbHNvIGp1c3QgcmV0dXJuIEdTVF9GTE9XX0VPUyBpbgotICAgICAgICB5b3VyIGNyZWF0ZSBvciBmaWxsIGZ1bmN0aW9uIChhc3N1bWluZyB5b3VyIGVsZW1lbnQgZGVyaXZlcyBmcm9tCi0gICAgICAgIEdzdEJhc2VTcmMgb3IgR3N0UHVzaFNyYykuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1ldmVudHMtdG9jIiB4cmVmbGFiZWw9IlRhYmxlIE9mIENvbnRlbnRzIj4KLSAgICAgIDx0aXRsZT5UYWJsZSBPZiBDb250ZW50czwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV1JJVEVNRQotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLWdhcCIgeHJlZmxhYmVsPSJHYXAiPgotICAgICAgPHRpdGxlPkdhcDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV1JJVEVNRQotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLWZsdXNoLXN0YXJ0IiB4cmVmbGFiZWw9IkZsdXNoIFN0YXJ0Ij4KLSAgICAgIDx0aXRsZT5GbHVzaCBTdGFydDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZsdXNoIHN0YXJ0IGV2ZW50IGlzIHNlbnQgZG93bnN0cmVhbSAoaW4gcHVzaCBtb2RlKSBvciB1cHN0cmVhbQotICAgICAgICAoaW4gcHVsbCBtb2RlKSBpZiBhbGwgYnVmZmVycyBhbmQgY2FjaGVzIGluIHRoZSBwaXBlbGluZSBzaG91bGQgYmUKLSAgICAgICAgZW1wdGllZC4gPHF1b3RlPlF1ZXVlPC9xdW90ZT4gZWxlbWVudHMgd2lsbAotICAgICAgICBlbXB0eSB0aGVpciBpbnRlcm5hbCBsaXN0IG9mIGJ1ZmZlcnMgd2hlbiB0aGV5IHJlY2VpdmUgdGhpcyBldmVudCwgZm9yCi0gICAgICAgIGV4YW1wbGUuIEZpbGUgc2luayBlbGVtZW50cyAoZS5nLiA8cXVvdGU+ZmlsZXNpbms8L3F1b3RlPikgd2lsbCBmbHVzaAotICAgICAgICB0aGUga2VybmVsLXRvLWRpc2sgY2FjaGUgKDxmdW5jdGlvbj5mZGF0YXN5bmMgKCk8L2Z1bmN0aW9uPiBvcgotICAgICAgICA8ZnVuY3Rpb24+ZmZsdXNoICgpPC9mdW5jdGlvbj4pIHdoZW4gdGhleSByZWNlaXZlIHRoaXMgZXZlbnQuIE5vcm1hbGx5LAotICAgICAgICBlbGVtZW50cyByZWNlaXZpbmcgdGhpcyBldmVudCB3aWxsIHNpbXBseSBqdXN0IGZvcndhcmQgaXQsIHNpbmNlIG1vc3QKLSAgICAgICAgZmlsdGVyIG9yIGZpbHRlci1saWtlIGVsZW1lbnRzIGRvbid0IGhhdmUgYW4gaW50ZXJuYWwgY2FjaGUgb2YgZGF0YS4KLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfZXZlbnRfZGVmYXVsdCAoKTwvZnVuY3Rpb24+IGRvZXMganVzdCB0aGF0LCBzbyBmb3IKLSAgICAgICAgbW9zdCBlbGVtZW50cywgaXQgaXMgZW5vdWdoIHRvIGZvcndhcmQgdGhlIGV2ZW50IHVzaW5nIHRoZSBkZWZhdWx0Ci0gICAgICAgIGV2ZW50IGhhbmRsZXIuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQXMgYSBzaWRlLWVmZmVjdCBvZiBmbHVzaGluZyBhbGwgZGF0YSBmcm9tIHRoZSBwaXBlbGluZSwgdGhpcyBldmVudAotICAgICAgICB1bmJsb2NrcyB0aGUgc3RyZWFtaW5nIHRocmVhZCBieSBtYWtpbmcgYWxsIHBhZHMgcmVqZWN0IGRhdGEgdW50aWwKLSAgICAgICAgdGhleSByZWNlaXZlIGEgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1ldmVudHMtZmx1c2gtc3RvcCIvPiBzaWduYWwKLSAgICAgICAgKGVsZW1lbnRzIHRyeWluZyB0byBwdXNoIGRhdGEgd2lsbCBnZXQgYSBGTFVTSElORyBmbG93IHJldHVybgotICAgICAgICAgYW5kIHN0b3AgcHJvY2Vzc2luZyBkYXRhKS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZmx1c2gtc3RhcnQgZXZlbnQgaXMgY3JlYXRlZCB3aXRoIHRoZQotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKTwvZnVuY3Rpb24+LgotICAgICAgICBMaWtlIHRoZSBFT1MgZXZlbnQsIGl0IGhhcyBubyBwcm9wZXJ0aWVzLiBUaGlzIGV2ZW50IGlzIHVzdWFsbHkKLSAgICAgICAgb25seSBjcmVhdGVkIGJ5IGVsZW1lbnRzIGRyaXZpbmcgdGhlIHBpcGVsaW5lLCBsaWtlIHNvdXJjZSBlbGVtZW50cwotICAgICAgICBvcGVyYXRpbmcgaW4gcHVzaC1tb2RlIG9yIHB1bGwtcmFuZ2UgYmFzZWQgZGVtdXhlcnMvZGVjb2RlcnMuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1ldmVudHMtZmx1c2gtc3RvcCIgeHJlZmxhYmVsPSJGbHVzaCBTdG9wIj4KLSAgICAgIDx0aXRsZT5GbHVzaCBTdG9wPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZmx1c2gtc3RvcCBldmVudCBpcyBzZW50IGJ5IGFuIGVsZW1lbnQgZHJpdmluZyB0aGUgcGlwZWxpbmUKLSAgICAgICAgYWZ0ZXIgYSBmbHVzaC1zdGFydCBhbmQgdGVsbHMgcGFkcyBhbmQgZWxlbWVudHMgZG93bnN0cmVhbSB0aGF0Ci0gICAgICAgIHRoZXkgc2hvdWxkIGFjY2VwdCBldmVudHMgYW5kIGJ1ZmZlcnMgYWdhaW4gKHRoZXJlIHdpbGwgYmUgYXQKLSAgICAgICAgbGVhc3QgYSBTRUdNRU5UIGV2ZW50IGJlZm9yZSBhbnkgYnVmZmVycyBmaXJzdCB0aG91Z2gpLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdXIgZWxlbWVudCBrZWVwcyB0ZW1wb3JhcnkgY2FjaGVzIG9mIHN0cmVhbSBkYXRhLCBpdCBzaG91bGQKLSAgICAgICAgY2xlYXIgdGhlbSB3aGVuIGl0IHJlY2VpdmVzIGEgRkxVU0gtU1RPUCBldmVudCAoYW5kIGFsc28gd2hlbmV2ZXIKLSAgICAgICAgaXRzIGNoYWluIGZ1bmN0aW9uIHJlY2VpdmVzIGEgYnVmZmVyIHdpdGggdGhlIERJU0NPTlQgZmxhZyBzZXQpLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBmbHVzaC1zdG9wIGV2ZW50IGlzIGNyZWF0ZWQgd2l0aAotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2V2ZW50X25ld19mbHVzaF9zdG9wICgpPC9mdW5jdGlvbj4uIEl0IGhhcyBvbmUKLSAgICAgICAgcGFyYW1ldGVyIHRoYXQgY29udHJvbHMgaWYgdGhlIHJ1bm5pbmctdGltZSBvZiB0aGUgcGlwZWxpbmUgc2hvdWxkCi0gICAgICAgIGJlIHJlc2V0IHRvIDAgb3Igbm90LiBOb3JtYWxseSBhZnRlciBhIGZsdXNoaW5nIHNlZWssIHRoZQotICAgICAgICBydW5uaW5nX3RpbWUgaXMgc2V0IGJhY2sgdG8gMC4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLWV2ZW50cy1xb3MiIHhyZWZsYWJlbD0iUXVhbGl0eSBPZiBTZXJ2aWNlIChRT1MpIj4KLSAgICAgIDx0aXRsZT5RdWFsaXR5IE9mIFNlcnZpY2UgKFFPUyk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBRT1MgZXZlbnQgY29udGFpbnMgYSByZXBvcnQgYWJvdXQgdGhlIGN1cnJlbnQgcmVhbC10aW1lCi0gICAgICAgIHBlcmZvcm1hbmNlIG9mIHRoZSBzdHJlYW0uIFNlZSBtb3JlIGluZm8gaW4gCi0gICAgICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYWR2YW5jZWQtcW9zIi8+LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLXNlZWsiIHhyZWZsYWJlbD0iU2VlayBSZXF1ZXN0Ij4KLSAgICAgIDx0aXRsZT5TZWVrIFJlcXVlc3Q8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFNlZWsgZXZlbnRzIGFyZSBtZWFudCB0byByZXF1ZXN0IGEgbmV3IHN0cmVhbSBwb3NpdGlvbiB0byBlbGVtZW50cy4KLSAgICAgICAgVGhpcyBuZXcgcG9zaXRpb24gY2FuIGJlIHNldCBpbiBzZXZlcmFsIGZvcm1hdHMgKHRpbWUsIGJ5dGVzIG9yCi0gICAgICAgIDxxdW90ZT5kZWZhdWx0IHVuaXRzPC9xdW90ZT4gW2EgdGVybSBpbmRpY2F0aW5nIGZyYW1lcyBmb3IgdmlkZW8sCi0gICAgICAgIGNoYW5uZWwtaW5kZXBlbmRlbnQgc2FtcGxlcyBmb3IgYXVkaW8sIGV0Yy5dKS4gU2Vla2luZyBjYW4gYmUgZG9uZSB3aXRoCi0gICAgICAgIHJlc3BlY3QgdG8gdGhlIGVuZC1vZi1maWxlIG9yIHN0YXJ0LW9mLWZpbGUsIGFuZAotICAgICAgICB1c3VhbGx5IGhhcHBlbnMgaW4gdXBzdHJlYW0gZGlyZWN0aW9uIChkb3duc3RyZWFtIHNlZWtpbmcgaXMgZG9uZSBieQotICAgICAgICBzZW5kaW5nIGEgU0VHTUVOVCBldmVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvZmZzZXRzIGZvciBlbGVtZW50cwotICAgICAgICB0aGF0IHN1cHBvcnQgdGhhdCwgbGlrZSBmaWxlc2luaykuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgRWxlbWVudHMgcmVjZWl2aW5nIHNlZWsgZXZlbnRzIHNob3VsZCwgZGVwZW5kaW5nIG9uIHRoZSBlbGVtZW50IHR5cGUsCi0gICAgICAgIGVpdGhlciBqdXN0IGZvcndhcmQgaXQgdXBzdHJlYW0gKGZpbHRlcnMsIGRlY29kZXJzKSwgY2hhbmdlIHRoZQotICAgICAgICBmb3JtYXQgaW4gd2hpY2ggdGhlIGV2ZW50IGlzIGdpdmVuIGFuZCB0aGVuIGZvcndhcmQgaXQgKGRlbXV4ZXJzKSwKLSAgICAgICAgb3IgaGFuZGxlIHRoZSBldmVudCBieSBjaGFuZ2luZyB0aGUgZmlsZSBwb2ludGVyIGluIHRoZWlyIGludGVybmFsCi0gICAgICAgIHN0cmVhbSByZXNvdXJjZSAoZmlsZSBzb3VyY2VzLCBkZW11eGVycy9kZWNvZGVycyBkcml2aW5nIHRoZSBwaXBlbGluZQotICAgICAgICBpbiBwdWxsLW1vZGUpIG9yIHNvbWV0aGluZyBlbHNlLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFNlZWsgZXZlbnRzIGFyZSBidWlsdCB1cCB1c2luZyBwb3NpdGlvbnMgaW4gc3BlY2lmaWVkIGZvcm1hdHMgKHRpbWUsCi0gICAgICAgIGJ5dGVzLCB1bml0cykuIFRoZXkgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlIGZ1bmN0aW9uCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfZXZlbnRfbmV3X3NlZWsgKCk8L2Z1bmN0aW9uPi4gTm90ZSB0aGF0IG1hbnkgcGx1Z2lucyBkbwotICAgICAgICBub3Qgc3VwcG9ydCBzZWVraW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgotICAgICAgICBBbiBlbGVtZW50IG5vdCBkcml2aW5nIHRoZSBwaXBlbGluZSBhbmQgZm9yd2FyZGluZyBhIHNlZWsKLSAgICAgICAgcmVxdWVzdCBzaG91bGQgbm90IGFzc3VtZSB0aGF0IHRoZSBzZWVrIHN1Y2NlZWRlZCBvciBhY3R1YWxseSBoYXBwZW5lZCwKLSAgICAgICAgaXQgc2hvdWxkIG9wZXJhdGUgYmFzZWQgb24gdGhlIFNFR01FTlQgZXZlbnRzIGl0IHJlY2VpdmVzLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEVsZW1lbnRzIHBhcnNpbmcgdGhpcyBldmVudCBjYW4gZG8gdGhpcyB1c2luZwotICAgICAgICA8ZnVuY3Rpb24+Z3N0X2V2ZW50X3BhcnNlX3NlZWsoKTwvZnVuY3Rpb24+LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tZXZlbnRzLW5hdiIgeHJlZmxhYmVsPSJOYXZpZ2F0aW9uIj4KLSAgICAgIDx0aXRsZT5OYXZpZ2F0aW9uPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBOYXZpZ2F0aW9uIGV2ZW50cyBhcmUgc2VudCB1cHN0cmVhbSBieSB2aWRlbyBzaW5rcyB0byBpbmZvcm0gdXBzdHJlYW0KLSAgICAgICAgZWxlbWVudHMgb2Ygd2hlcmUgdGhlIG1vdXNlIHBvaW50ZXIgaXMsIGlmIGFuZCB3aGVyZSBtb3VzZSBwb2ludGVyCi0gICAgICAgIGNsaWNrcyBoYXZlIGhhcHBlbmVkLCBvciBpZiBrZXlzIGhhdmUgYmVlbiBwcmVzc2VkIG9yIHJlbGVhc2VkLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEFsbCB0aGlzIGluZm9ybWF0aW9uIGlzIGNvbnRhaW5lZCBpbiB0aGUgZXZlbnQgc3RydWN0dXJlIHdoaWNoIGNhbgotICAgICAgICBiZSBvYnRhaW5lZCB3aXRoIDxmdW5jdGlvbj5nc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoKTwvZnVuY3Rpb24+LgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIENoZWNrIG91dCB0aGUgbmF2aWdhdGlvbnRlc3QgZWxlbWVudCBpbiBnc3QtcGx1Z2lucy1nb29kIGZvciBhbiBpZGVhCi0gICAgICAgIGhvdyB0byBleHRyYWN0IG5hdmlnYXRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGlzIGV2ZW50LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2FkdmFuY2VkLWludGVyZmFjZXMueG1sIGIvZG9jcy9wd2cvYWR2YW5jZWQtaW50ZXJmYWNlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZTM0YjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYWR2YW5jZWQtaW50ZXJmYWNlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzcgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYWR2YW5jZWQtaW50ZXJmYWNlcyI+Ci0gIDx0aXRsZT5JbnRlcmZhY2VzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgUHJldmlvdXNseSwgaW4gdGhlIGNoYXB0ZXIgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1idWlsZGluZy1hcmdzIi8+LCB3ZSBoYXZlCi0gICAgaW50cm9kdWNlZCB0aGUgY29uY2VwdCBvZiBHT2JqZWN0IHByb3BlcnRpZXMgb2YgY29udHJvbGxpbmcgYW4gZWxlbWVudCdzCi0gICAgYmVoYXZpb3VyLiBUaGlzIGlzIHZlcnkgcG93ZXJmdWwsIGJ1dCBpdCBoYXMgdHdvIGJpZyBkaXNhZHZhbnRhZ2VzOgotICAgIGZpcnN0IG9mIGFsbCwgaXQgaXMgdG9vIGdlbmVyaWMsIGFuZCBzZWNvbmQsIGl0IGlzbid0IGR5bmFtaWMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgVGhlIGZpcnN0IGRpc2FkdmFudGFnZSBpcyByZWxhdGVkIHRvIHRoZSBjdXN0b21pemFiaWxpdHkgb2YgdGhlIGVuZC11c2VyCi0gICAgaW50ZXJmYWNlIHRoYXQgd2lsbCBiZSBidWlsdCB0byBjb250cm9sIHRoZSBlbGVtZW50LiBTb21lIHByb3BlcnRpZXMgYXJlCi0gICAgbW9yZSBpbXBvcnRhbnQgdGhhbiBvdGhlcnMuIFNvbWUgaW50ZWdlciBwcm9wZXJ0aWVzIGFyZSBiZXR0ZXIgc2hvd24gaW4gYQotICAgIHNwaW4tYnV0dG9uIHdpZGdldCwgd2hlcmVhcyBvdGhlcnMgd291bGQgYmUgYmV0dGVyIHJlcHJlc2VudGVkIGJ5IGEgc2xpZGVyCi0gICAgd2lkZ2V0LiBTdWNoIHRoaW5ncyBhcmUgbm90IHBvc3NpYmxlIGJlY2F1c2UgdGhlIFVJIGhhcyBubyBhY3R1YWwgbWVhbmluZwotICAgIGluIHRoZSBhcHBsaWNhdGlvbi4gQSBVSSB3aWRnZXQgdGhhdCByZXByZXNlbnRzIGEgYml0cmF0ZSBwcm9wZXJ0eSBpcyB0aGUKLSAgICBzYW1lIGFzIGEgVUkgd2lkZ2V0IHRoYXQgcmVwcmVzZW50cyB0aGUgc2l6ZSBvZiBhIHZpZGVvLCBhcyBsb25nIGFzIGJvdGgKLSAgICBhcmUgb2YgdGhlIHNhbWUgPGNsYXNzbmFtZT5HUGFyYW1TcGVjPC9jbGFzc25hbWU+IHR5cGUuIEFub3RoZXIgcHJvYmxlbSwKLSAgICBpcyB0aGF0IHRoaW5ncyBsaWtlIHBhcmFtZXRlciBncm91cGluZywgZnVuY3Rpb24gZ3JvdXBpbmcsIG9yIHBhcmFtZXRlcgotICAgIGNvdXBsaW5nIGFyZSBub3QKLSAgICByZWFsbHkgcG9zc2libGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgVGhlIHNlY29uZCBwcm9ibGVtIHdpdGggcGFyYW1ldGVycyBhcmUgdGhhdCB0aGV5IGFyZSBub3QgZHluYW1pYy4gSW4KLSAgICBtYW55IGNhc2VzLCB0aGUgYWxsb3dlZCB2YWx1ZXMgZm9yIGEgcHJvcGVydHkgYXJlIG5vdCBmaXhlZCwgYnV0IGRlcGVuZAotICAgIG9uIHRoaW5ncyB0aGF0IGNhbiBvbmx5IGJlIGRldGVjdGVkIGF0IHJ1bnRpbWUuIFRoZSBuYW1lcyBvZiBpbnB1dHMgZm9yCi0gICAgYSBUViBjYXJkIGluIGEgdmlkZW80bGludXggc291cmNlIGVsZW1lbnQsIGZvciBleGFtcGxlLCBjYW4gb25seSBiZQotICAgIHJldHJpZXZlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyIHdoZW4gd2UndmUgb3BlbmVkIHRoZSBkZXZpY2U7IHRoaXMgb25seQotICAgIGhhcHBlbnMgd2hlbiB0aGUgZWxlbWVudCBnb2VzIGludG8gdGhlIFJFQURZIHN0YXRlLiBUaGlzIG1lYW5zIHRoYXQgd2UKLSAgICBjYW5ub3QgY3JlYXRlIGFuIGVudW0gcHJvcGVydHkgdHlwZSB0byBzaG93IHRoaXMgdG8gdGhlIHVzZXIuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgVGhlIHNvbHV0aW9uIHRvIHRob3NlIHByb2JsZW1zIGlzIHRvIGNyZWF0ZSB2ZXJ5IHNwZWNpYWxpemVkIHR5cGVzIG9mCi0gICAgY29udHJvbHMgZm9yIGNlcnRhaW4gb2Z0ZW4tdXNlZCBjb250cm9scy4gV2UgdXNlIHRoZSBjb25jZXB0IG9mIGludGVyZmFjZXMKLSAgICB0byBhY2hpZXZlIHRoaXMuIFRoZSBiYXNpcyBvZiB0aGlzIGFsbCBpcyB0aGUgZ2xpYgotICAgIDxjbGFzc25hbWU+R1R5cGVJbnRlcmZhY2U8L2NsYXNzbmFtZT4gdHlwZS4gRm9yIGVhY2ggY2FzZSB3aGVyZSB3ZSB0aGluawotICAgIGl0J3MgdXNlZnVsLCB3ZSd2ZSBjcmVhdGVkIGludGVyZmFjZXMgd2hpY2ggY2FuIGJlIGltcGxlbWVudGVkIGJ5IGVsZW1lbnRzCi0gICAgYXQgdGhlaXIgb3duIHdpbGwuIAotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgIE9uZSBpbXBvcnRhbnQgbm90ZTogaW50ZXJmYWNlcyBkbyA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gcmVwbGFjZQotICAgIHByb3BlcnRpZXMuIFJhdGhlciwgaW50ZXJmYWNlcyBzaG91bGQgYmUgYnVpbHQgPGVtcGhhc2lzPm5leHQgdG88L2VtcGhhc2lzPgotICAgIHByb3BlcnRpZXMuIFRoZXJlIGFyZSB0d28gaW1wb3J0YW50IHJlYXNvbnMgZm9yIHRoaXMuIEZpcnN0IG9mIGFsbCwgCi0gICAgcHJvcGVydGllcyBjYW4gYmUgbW9yZSBlYXNpbHkgaW50cm9zcGVjdGVkLiBTZWNvbmQsIHByb3BlcnRpZXMgY2FuIGJlCi0gICAgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZSAoPGZpbGVuYW1lPmdzdC1sYXVuY2g8L2ZpbGVuYW1lPikuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24taWZhY2UtZ2VuZXJhbCIgeHJlZmxhYmVsPSJIb3cgdG8gSW1wbGVtZW50IEludGVyZmFjZXMiPgotICAgIDx0aXRsZT5Ib3cgdG8gSW1wbGVtZW50IEludGVyZmFjZXM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSW1wbGVtZW50aW5nIGludGVyZmFjZXMgaXMgaW5pdGlhdGVkIGluIHRoZSA8ZnVuY3Rpb24+X2dldF90eXBlICgpPC9mdW5jdGlvbj4KLSAgICAgIG9mIHlvdXIgZWxlbWVudC4gWW91IGNhbiByZWdpc3RlciBvbmUgb3IgbW9yZSBpbnRlcmZhY2VzIGFmdGVyIGhhdmluZwotICAgICAgcmVnaXN0ZXJlZCB0aGUgdHlwZSBpdHNlbGYuIFNvbWUgaW50ZXJmYWNlcyBoYXZlIGRlcGVuZGVuY2llcyBvbiBvdGhlcgotICAgICAgaW50ZXJmYWNlcyBvciBjYW4gb25seSBiZSByZWdpc3RlcmVkIGJ5IGNlcnRhaW4gdHlwZXMgb2YgZWxlbWVudHMuIFlvdQotICAgICAgd2lsbCBiZSBub3RpZmllZCBvZiBkb2luZyB0aGF0IHdyb25nbHkgd2hlbiB1c2luZyB0aGUgZWxlbWVudDogaXQgd2lsbAotICAgICAgcXVpdCB3aXRoIGZhaWxlZCBhc3NlcnRpb25zLCB3aGljaCB3aWxsIGV4cGxhaW4gd2hhdCB3ZW50IHdyb25nLgotICAgICAgSWYgaXQgZG9lcywgeW91IG5lZWQgdG8gcmVnaXN0ZXIgc3VwcG9ydCBmb3IgPGVtcGhhc2lzPnRoYXQ8L2VtcGhhc2lzPgotICAgICAgaW50ZXJmYWNlIGJlZm9yZSByZWdpc3RlcmluZyBzdXBwb3J0IGZvciB0aGUgaW50ZXJmYWNlIHRoYXQgeW91J3JlCi0gICAgICB3YW50aW5nIHRvIHN1cHBvcnQuIFRoZSBleGFtcGxlIGJlbG93IGV4cGxhaW5zIGhvdyB0byBhZGQgc3VwcG9ydCBmb3IgYQotICAgICAgc2ltcGxlIGludGVyZmFjZSB3aXRoIG5vIGZ1cnRoZXIgZGVwZW5kZW5jaWVzLgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgdm9pZAlnc3RfbXlfZmlsdGVyX3NvbWVfaW50ZXJmYWNlX2luaXQJKEdzdFNvbWVJbnRlcmZhY2UgKmlmYWNlKTsKLQotR1R5cGUKLWdzdF9teV9maWx0ZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBteV9maWx0ZXJfdHlwZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICBpZiAoIW15X2ZpbHRlcl90eXBlKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBteV9maWx0ZXJfaW5mbyA9IHsKLSAgICAgIHNpemVvZiAoR3N0TXlGaWx0ZXJDbGFzcyksCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X215X2ZpbHRlcl9jbGFzc19pbml0LAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICBzaXplb2YgKEdzdE15RmlsdGVyKSwKLSAgICAgIDAsCi0gICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9teV9maWx0ZXJfaW5pdAotICAgIH07Ci0gICAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIHNvbWVfaW50ZXJmYWNlX2luZm8gPSB7Ci0gICAgICAoR0ludGVyZmFjZUluaXRGdW5jKSBnc3RfbXlfZmlsdGVyX3NvbWVfaW50ZXJmYWNlX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTAotICAgIH07Ci0KLSAgICBteV9maWx0ZXJfdHlwZSA9Ci0JZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwKLQkJCQkiR3N0TXlGaWx0ZXIiLAotCQkJCSZhbXA7bXlfZmlsdGVyX2luZm8sIDApOwotICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAobXlfZmlsdGVyX3R5cGUsCi0JCQkJIEdTVF9UWVBFX1NPTUVfSU5URVJGQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFtcDtzb21lX2ludGVyZmFjZV9pbmZvKTsKLSAgfQotCi0gIHJldHVybiBteV9maWx0ZXJfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfc29tZV9pbnRlcmZhY2VfaW5pdCAoR3N0U29tZUludGVyZmFjZSAqaWZhY2UpCi17Ci0gIC8qIGhlcmUsIHlvdSB3b3VsZCBzZXQgdmlydHVhbCBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgaW50ZXJmYWNlICovCi19Ci0gICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICA8cGFyYT4KLSAgICAgIE9yIG1vcmUgY29udmVuaWVudGx5OgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgdm9pZAlnc3RfbXlfZmlsdGVyX3NvbWVfaW50ZXJmYWNlX2luaXQJKEdzdFNvbWVJbnRlcmZhY2UgKmlmYWNlKTsKLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdE15RmlsdGVyLCBnc3RfbXlfZmlsdGVyLEdTVF9UWVBFX0VMRU1FTlQsCi0gICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfU09NRV9JTlRFUkZBQ0UsCi0gICAgICAgICAgICBnc3RfbXlfZmlsdGVyX3NvbWVfaW50ZXJmYWNlX2luaXQpKTsKLQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWlmYWNlLXVyaSIgeHJlZmxhYmVsPSJVUkkgaW50ZXJmYWNlIj4KLSAgICA8dGl0bGU+VVJJIGludGVyZmFjZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBXUklURU1FCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1pZmFjZS1jb2xvcmJhbGFuY2UiIHhyZWZsYWJlbD0iQ29sb3IgQmFsYW5jZSBJbnRlcmZhY2UiPgotICAgIDx0aXRsZT5Db2xvciBCYWxhbmNlIEludGVyZmFjZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBXUklURU1FCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1pZmFjZS14b3ZlcmxheSIgeHJlZmxhYmVsPSJWaWRlbyBPdmVybGF5IEludGVyZmFjZSI+Ci0gICAgPHRpdGxlPlZpZGVvIE92ZXJsYXkgSW50ZXJmYWNlPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSAjR3N0VmlkZW9PdmVybGF5IGludGVyZmFjZSBpcyB1c2VkIGZvciAyIG1haW4gcHVycG9zZXMgOgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgVG8gZ2V0IGEgZ3JhYiBvbiB0aGUgV2luZG93IHdoZXJlIHRoZSB2aWRlbyBzaW5rIGVsZW1lbnQgaXMgZ29pbmcgdG8gcmVuZGVyLgotICAgICAgVGhpcyBpcyBhY2hpZXZlZCBieSBlaXRoZXIgYmVpbmcgaW5mb3JtZWQgYWJvdXQgdGhlIFdpbmRvdyBpZGVudGlmaWVyIHRoYXQKLSAgICAgIHRoZSB2aWRlbyBzaW5rIGVsZW1lbnQgZ2VuZXJhdGVkLCBvciBieSBmb3JjaW5nIHRoZSB2aWRlbyBzaW5rIGVsZW1lbnQgdG8gdXNlCi0gICAgICBhIHNwZWNpZmljIFdpbmRvdyBpZGVudGlmaWVyIGZvciByZW5kZXJpbmcuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICBUbyBmb3JjZSBhIHJlZHJhd2luZyBvZiB0aGUgbGF0ZXN0IHZpZGVvIGZyYW1lIHRoZSB2aWRlbyBzaW5rIGVsZW1lbnQKLSAgICAgIGRpc3BsYXllZCBvbiB0aGUgV2luZG93LiBJbmRlZWQgaWYgdGhlICNHc3RQaXBlbGluZSBpcyBpbiAjR1NUX1NUQVRFX1BBVVNFRAotICAgICAgc3RhdGUsIG1vdmluZyB0aGUgV2luZG93IGFyb3VuZCB3aWxsIGRhbWFnZSBpdHMgY29udGVudC4gQXBwbGljYXRpb24KLSAgICAgIGRldmVsb3BlcnMgd2lsbCB3YW50IHRvIGhhbmRsZSB0aGUgRXhwb3NlIGV2ZW50cyB0aGVtc2VsdmVzIGFuZCBmb3JjZSB0aGUKLSAgICAgIHZpZGVvIHNpbmsgZWxlbWVudCB0byByZWZyZXNoIHRoZSBXaW5kb3cncyBjb250ZW50LgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEEgcGx1Z2luIGRyYXdpbmcgdmlkZW8gb3V0cHV0IGluIGEgdmlkZW8gd2luZG93IHdpbGwgbmVlZCB0byBoYXZlIHRoYXQKLSAgICAgIHdpbmRvdyBhdCBvbmUgc3RhZ2Ugb3IgYW5vdGhlci4gUGFzc2l2ZSBtb2RlIHNpbXBseSBtZWFucyB0aGF0IG5vIHdpbmRvdwotICAgICAgaGFzIGJlZW4gZ2l2ZW4gdG8gdGhlIHBsdWdpbiBiZWZvcmUgdGhhdCBzdGFnZSwgc28gdGhlIHBsdWdpbiBjcmVhdGVkIHRoZQotICAgICAgd2luZG93IGJ5IGl0c2VsZi4gSW4gdGhhdCBjYXNlIHRoZSBwbHVnaW4gaXMgcmVzcG9uc2libGUgb2YgZGVzdHJveWluZwotICAgICAgdGhhdCB3aW5kb3cgd2hlbiBpdCdzIG5vdCBuZWVkZWQgYW55IG1vcmUgYW5kIGl0IGhhcyB0byB0ZWxsIHRoZQotICAgICAgYXBwbGljYXRpb25zIHRoYXQgYSB3aW5kb3cgaGFzIGJlZW4gY3JlYXRlZCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4KLSAgICAgIHVzZSBpdC4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSA8Y2xhc3NuYW1lPmhhdmUtd2luZG93LWhhbmRsZTwvY2xhc3NuYW1lPgotICAgICAgbWVzc2FnZSB0aGF0IGNhbiBiZSBwb3N0ZWQgZnJvbSB0aGUgcGx1Z2luIHdpdGggdGhlCi0gICAgICA8ZnVuY3Rpb24+Z3N0X3ZpZGVvX292ZXJsYXlfZ290X3dpbmRvd19oYW5kbGU8L2Z1bmN0aW9uPiBtZXRob2QuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQXMgeW91IHByb2JhYmx5IGd1ZXNzZWQgYWxyZWFkeSBhY3RpdmUgbW9kZSBqdXN0IG1lYW5zIHNlbmRpbmcgYSB2aWRlbwotICAgICAgd2luZG93IHRvIHRoZSBwbHVnaW4gc28gdGhhdCB2aWRlbyBvdXRwdXQgZ29lcyB0aGVyZS4gVGhpcyBpcyBkb25lIHVzaW5nCi0gICAgICB0aGUgPGZ1bmN0aW9uPmdzdF92aWRlb19vdmVybGF5X3NldF93aW5kb3dfaGFuZGxlPC9mdW5jdGlvbj4gbWV0aG9kLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHN3aXRjaCBmcm9tIG9uZSBtb2RlIHRvIGFub3RoZXIgYXQgYW55IG1vbWVudCwgc28gdGhlCi0gICAgICBwbHVnaW4gaW1wbGVtZW50aW5nIHRoaXMgaW50ZXJmYWNlIGhhcyB0byBoYW5kbGUgYWxsIGNhc2VzLiBUaGVyZSBhcmUgb25seQotICAgICAgMiBtZXRob2RzIHRoYXQgcGx1Z2lucyB3cml0ZXJzIGhhdmUgdG8gaW1wbGVtZW50IGFuZCB0aGV5IG1vc3QgcHJvYmFibHkKLSAgICAgIGxvb2sgbGlrZSB0aGF0IDoKLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPjwhW0NEQVRBWwotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfc2V0X3dpbmRvd19oYW5kbGUgKEdzdFZpZGVvT3ZlcmxheSAqb3ZlcmxheSwgZ3VpbnRwdHIgaGFuZGxlKQotewotICBHc3RNeUZpbHRlciAqbXlfZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAob3ZlcmxheSk7Ci0KLSAgaWYgKG15X2ZpbHRlci0+d2luZG93KQotICAgIGdzdF9teV9maWx0ZXJfZGVzdHJveV93aW5kb3cgKG15X2ZpbHRlci0+d2luZG93KTsKLSAgICAKLSAgbXlfZmlsdGVyLT53aW5kb3cgPSBoYW5kbGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX3hvdmVybGF5X2luaXQgKEdzdFZpZGVvT3ZlcmxheUNsYXNzICppZmFjZSkKLXsKLSAgaWZhY2UtPnNldF93aW5kb3dfaGFuZGxlID0gZ3N0X215X2ZpbHRlcl9zZXRfd2luZG93X2hhbmRsZTsKLX0KLSAgICBdXT48L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgWW91IHdpbGwgYWxzbyBuZWVkIHRvIHVzZSB0aGUgaW50ZXJmYWNlIG1ldGhvZHMgdG8gcG9zdCBtZXNzYWdlcyB3aGVuIAotICAgICAgbmVlZGVkIHN1Y2ggYXMgd2hlbiByZWNlaXZpbmcgYSBDQVBTIGV2ZW50IHdoZXJlIHlvdSB3aWxsIGtub3cgdGhlIHZpZGVvCi0gICAgICBnZW9tZXRyeSBhbmQgbWF5YmUgY3JlYXRlIHRoZSB3aW5kb3cuCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz48IVtDREFUQVsKLXN0YXRpYyBNeUZpbHRlcldpbmRvdyAqCi1nc3RfbXlfZmlsdGVyX3dpbmRvd19jcmVhdGUgKEdzdE15RmlsdGVyICpteV9maWx0ZXIsIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0KQotewotICBNeUZpbHRlcldpbmRvdyAqd2luZG93ID0gZ19uZXcgKE15RmlsdGVyV2luZG93LCAxKTsKLSAgLi4uCi0gIGdzdF92aWRlb19vdmVybGF5X2dvdF93aW5kb3dfaGFuZGxlIChHU1RfVklERU9fT1ZFUkxBWSAobXlfZmlsdGVyKSwgd2luZG93LT53aW4pOwotfQotCi0vKiBjYWxsZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBmb3IgQ0FQUyBldmVudHMgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X2ZpbHRlcl9zaW5rX3NldF9jYXBzIChHc3RNeUZpbHRlciAqbXlfZmlsdGVyLCBHc3RDYXBzICpjYXBzKQotewotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdib29sZWFuIHJldDsKLSAgLi4uCi0gIHJldCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAid2lkdGgiLCAmd2lkdGgpOwotICByZXQgJj0gZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0KTsKLSAgaWYgKCFyZXQpIHJldHVybiBGQUxTRTsKLQotICBnc3RfdmlkZW9fb3ZlcmxheV9wcmVwYXJlX3dpbmRvd19oYW5kbGUgKEdTVF9WSURFT19PVkVSTEFZIChteV9maWx0ZXIpKTsKLSAgCi0gIGlmICghbXlfZmlsdGVyLT53aW5kb3cpCi0gICAgbXlfZmlsdGVyLT53aW5kb3cgPSBnc3RfbXlfZmlsdGVyX2NyZWF0ZV93aW5kb3cgKG15X2ZpbHRlciwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgLi4uCi19Ci0gICAgXV0+PC9wcm9ncmFtbGlzdGluZz4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24taWZhY2UtbmF2aWdhdGlvbiIgeHJlZmxhYmVsPSJOYXZpZ2F0aW9uIEludGVyZmFjZSI+Ci0gICAgPHRpdGxlPk5hdmlnYXRpb24gSW50ZXJmYWNlPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFdSSVRFTUUKLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC1uZWdvdGlhdGlvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NTkxZDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYWR2YW5jZWQtbmVnb3RpYXRpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjAxICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLW5lZ290aWF0aW9uIiB4cmVmbGFiZWw9IkNhcHMgbmVnb3RpYXRpb24iPgotICA8dGl0bGU+Q2FwcyBuZWdvdGlhdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIENhcHMgbmVnb3RpYXRpb24gaXMgdGhlIGFjdCBvZiBmaW5kaW5nIGEgbWVkaWEgZm9ybWF0IChHc3RDYXBzKSBiZXR3ZWVuCi0gICAgZWxlbWVudHMgdGhhdCB0aGV5IGNhbiBoYW5kbGUuIFRoaXMgcHJvY2VzcyBpbiAmR1N0cmVhbWVyOyBjYW4gaW4gbW9zdAotICAgIGNhc2VzIGZpbmQgYW4gb3B0aW1hbCBzb2x1dGlvbiBmb3IgdGhlIGNvbXBsZXRlIHBpcGVsaW5lLiBJbiB0aGlzIHNlY3Rpb24KLSAgICB3ZSBleHBsYWluIGhvdyB0aGlzIHdvcmtzLgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLW5lZ28tYmFzaWNzIj4KLSAgICA8dGl0bGU+Q2FwcyBuZWdvdGlhdGlvbiBiYXNpY3M8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSW4gJkdTdHJlYW1lcjssIG5lZ290aWF0aW9uIG9mIHRoZSBtZWRpYSBmb3JtYXQgYWx3YXlzIGZvbGxvd3MgdGhlCi0gICAgICBmb2xsb3dpbmcgc2ltcGxlIHJ1bGVzOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBIGRvd25zdHJlYW0gZWxlbWVudCBzdWdnZXN0IGEgZm9ybWF0IG9uIGl0cyBzaW5rcGFkIGFuZCBwbGFjZXMgdGhlCi0gICAgICAgICAgc3VnZ2VzdGlvbiBpbiB0aGUgcmVzdWx0IG9mIHRoZSBDQVBTIHF1ZXJ5IHBlcmZvcm1lZCBvbiB0aGUgc2lua3BhZC4KLSAgICAgICAgICBTZWUgYWxzbyA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLW5lZ28tZ2V0Y2FwcyIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQW4gdXBzdHJlYW0gZWxlbWVudCBkZWNpZGVzIG9uIGEgZm9ybWF0LiBJdCBzZW5kcyB0aGUgc2VsZWN0ZWQgbWVkaWEKLSAgICAgICAgICBmb3JtYXQgZG93bnN0cmVhbSBvbiBpdHMgc291cmNlIHBhZCB3aXRoIGEgQ0FQUyBldmVudC4gRG93bnN0cmVhbQotICAgICAgICAgIGVsZW1lbnRzIHJlY29uZmlndXJlIHRoZW1zZWx2ZXMgdG8gaGFuZGxlIHRoZSBtZWRpYSB0eXBlIGluIHRoZSBDQVBTCi0gICAgICAgICAgZXZlbnQgb24gdGhlIHNpbmtwYWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEEgZG93bnN0cmVhbSBlbGVtZW50IGNhbiBpbmZvcm0gdXBzdHJlYW0gdGhhdCBpdCB3b3VsZCBsaWtlIHRvCi0gICAgICAgICAgc3VnZ2VzdCBhIG5ldyBmb3JtYXQgYnkgc2VuZGluZyBhIFJFQ09ORklHVVJFIGV2ZW50IHVwc3RyZWFtLiBUaGUKLSAgICAgICAgICBSRUNPTkZJR1VSRSBldmVudCBzaW1wbHkgaW5zdHJ1Y3RzIGFuIHVwc3RyZWFtIGVsZW1lbnQgdG8gcmVzdGFydAotICAgICAgICAgIHRoZSBuZWdvdGlhdGlvbiBwaGFzZS4gQmVjYXVzZSB0aGUgZWxlbWVudCB0aGF0IHNlbnQgb3V0IHRoZQotICAgICAgICAgIFJFQ09ORklHVVJFIGV2ZW50IGlzIG5vdyBzdWdnZXN0aW5nIGFub3RoZXIgZm9ybWF0LCB0aGUgZm9ybWF0Ci0gICAgICAgICAgaW4gdGhlIHBpcGVsaW5lIG1pZ2h0IGNoYW5nZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8cGFyYT4KLSAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBDQVBTIGFuZCBSRUNPTkZJR1VSRSBldmVudCBhbmQgdGhlIENBUFMgcXVlcnksIHRoZXJlCi0gICAgICBpcyBhbiBBQ0NFUFRfQ0FQUyBxdWVyeSB0byBxdWlja2x5IGNoZWNrIGlmIGEgY2VydGFpbiBjYXBzIGNhbgotICAgICAgYmUgYWNjZXB0ZWQgYnkgYW4gZWxlbWVudC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBbGwgbmVnb3RpYXRpb24gZm9sbG93cyB0aGVzZSBzaW1wbGUgcnVsZXMuIExldCdzIHRha2UgYSBsb29rIGF0IHNvbWUKLSAgICAgIHR5cGljYWwgdXNlcyBjYXNlcyBhbmQgaG93IG5lZ290aWF0aW9uIGhhcHBlbnMuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1uZWdvLXVzZWNhc2VzIj4KLSAgICA8dGl0bGU+Q2FwcyBuZWdvdGlhdGlvbiB1c2UgY2FzZXM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSW4gd2hhdCBmb2xsb3dzIHdlIHdpbGwgbG9vayBhdCBzb21lIHVzZSBjYXNlcyBmb3IgcHVzaC1tb2RlIHNjaGVkdWxpbmcuCi0gICAgICBUaGUgcHVsbC1tb2RlIHNjaGVkdWxpbmcgbmVnb3RpYXRpb24gcGhhc2UgaXMgZGlzY3Vzc2VkIGluCi0gICAgICA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLW5lZ28tcHVsbG1vZGUiLz4gYW5kIGlzIGFjdHVhbGx5IHNpbWlsYXIgYXMgd2UKLSAgICAgIHdpbGwgc2VlLiAKLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBTaW5jZSB0aGUgc2luayBwYWRzIG9ubHkgc3VnZ2VzdCBmb3JtYXRzIGFuZCB0aGUgc291cmNlIHBhZHMgbmVlZCB0bwotICAgICAgZGVjaWRlLCB0aGUgbW9zdCBjb21wbGljYXRlZCB3b3JrIGlzIGRvbmUgaW4gdGhlIHNvdXJjZSBwYWRzLgotICAgICAgV2UgY2FuIGlkZW50aWZ5IDMgY2FwcyBuZWdvdGlhdGlvbiB1c2UgY2FzZXMgZm9yIHRoZSBzb3VyY2UgcGFkczoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRml4ZWQgbmVnb3RpYXRpb24uIEFuIGVsZW1lbnQgY2FuIG91dHB1dCBvbmUgZm9ybWF0IG9ubHkuCi0gICAgICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tbmVnby1maXhlZCIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVHJhbnNmb3JtIG5lZ290aWF0aW9uLiBUaGVyZSBpcyBhIChmaXhlZCkgdHJhbnNmb3JtIGJldHdlZW4gdGhlCi0gICAgICAgICAgaW5wdXQgYW5kIG91dHB1dCBmb3JtYXQgb2YgdGhlIGVsZW1lbnQsIHVzdWFsbHkgYmFzZWQgb24gc29tZQotICAgICAgICAgIGVsZW1lbnQgcHJvcGVydHkuIFRoZSBjYXBzIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBwcm9kdWNlIGRlcGVuZAotICAgICAgICAgIG9uIHRoZSB1cHN0cmVhbSBjYXBzIGFuZCB0aGUgY2FwcyB0aGF0IHRoZSBlbGVtZW50IGNhbiBhY2NlcHQKLSAgICAgICAgICBkZXBlbmQgb24gdGhlIGRvd25zdHJlYW0gY2Fwcy4KLSAgICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1uZWdvLXRyYW5zZm9ybSIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRHluYW1pYyBuZWdvdGlhdGlvbi4gQW4gZWxlbWVudCBjYW4gb3V0cHV0IG1hbnkgZm9ybWF0cy4KLSAgICAgICAgICBTZWUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1uZWdvLWR5bmFtaWMiLz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tbmVnby1maXhlZCI+Ci0gICAgICA8dGl0bGU+Rml4ZWQgbmVnb3RpYXRpb248L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHNvdXJjZSBwYWQgY2FuIG9ubHkgcHJvZHVjZSBhIGZpeGVkIGZvcm1hdC4gVXN1YWxseQotICAgICAgICB0aGlzIGZvcm1hdCBpcyBlbmNvZGVkIGluc2lkZSB0aGUgbWVkaWEuIE5vIGRvd25zdHJlYW0gZWxlbWVudCBjYW4KLSAgICAgICAgYXNrIGZvciBhIGRpZmZlcmVudCBmb3JtYXQsIHRoZSBvbmx5IHdheSB0aGF0IHRoZSBzb3VyY2UgcGFkIHdpbGwKLSAgICAgICAgcmVuZWdvdGlhdGUgaXMgd2hlbiB0aGUgZWxlbWVudCBkZWNpZGVzIHRvIGNoYW5nZSB0aGUgY2FwcyBpdHNlbGYuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgRWxlbWVudHMgdGhhdCBjb3VsZCBpbXBsZW1lbnQgZml4ZWQgY2FwcyAob24gdGhlaXIgc291cmNlIHBhZHMpIGFyZSwKLSAgICAgICAgaW4gZ2VuZXJhbCwgYWxsIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCByZW5lZ290aWFibGUuIEV4YW1wbGVzIGluY2x1ZGU6Ci0gICAgICA8L3BhcmE+Ci0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBIHR5cGVmaW5kZXIsIHNpbmNlIHRoZSB0eXBlIGZvdW5kIGlzIHBhcnQgb2YgdGhlIGFjdHVhbCBkYXRhIHN0cmVhbQotICAgICAgICAgICAgYW5kIGNhbiB0aHVzIG5vdCBiZSByZS1uZWdvdGlhdGVkLiBUaGUgdHlwZWZpbmRlciB3aWxsIGxvb2sgYXQgdGhlCi0gICAgICAgICAgICBzdHJlYW0gb2YgYnl0ZXMsIGZpZ3VyZSBvdXQgdGhlIHR5cGUsIHNlbmQgYSBDQVBTIGV2ZW50IHdpdGggdGhlCi0gICAgICAgICAgICBjYXBzIGFuZCB0aGVuIHB1c2ggYnVmZmVycyBvZiB0aGUgdHlwZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFByZXR0eSBtdWNoIGFsbCBkZW11eGVycywgc2luY2UgdGhlIGNvbnRhaW5lZCBlbGVtZW50YXJ5IGRhdGEKLSAgICAgICAgICAgIHN0cmVhbXMgYXJlIGRlZmluZWQgaW4gdGhlIGZpbGUgaGVhZGVycywgYW5kIHRodXMgbm90Ci0gICAgICAgICAgICByZW5lZ290aWFibGUuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBTb21lIGRlY29kZXJzLCB3aGVyZSB0aGUgZm9ybWF0IGlzIGVtYmVkZGVkIGluIHRoZSBkYXRhIHN0cmVhbQotICAgICAgICAgICAgYW5kIG5vdCBwYXJ0IG9mIHRoZSBwZWVyY2FwcyA8ZW1waGFzaXM+YW5kPC9lbXBoYXNpcz4gd2hlcmUgdGhlCi0gICAgICAgICAgICBkZWNvZGVyIGl0c2VsZiBpcyBub3QgcmVjb25maWd1cmFibGUsIHRvby4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFNvbWUgc291cmNlcyB0aGF0IHByb2R1Y2UgYSBmaXhlZCBmb3JtYXQuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMoKTwvZnVuY3Rpb24+IGlzIHVzZWQgb24gdGhlIHNvdXJjZQotICAgICAgICBwYWQgd2l0aCBmaXhlZCBjYXBzLiBBcyBsb25nIGFzIHRoZSBwYWQgaXMgbm90IG5lZ290aWF0ZWQsIHRoZSBkZWZhdWx0Ci0gICAgICAgIENBUFMgcXVlcnkgd2lsbCByZXR1cm4gdGhlIGNhcHMgcHJlc2VudGVkIGluIHRoZSBwYWR0ZW1wbGF0ZS4gQXMgc29vbgotICAgICAgICBhcyB0aGUgcGFkIGlzIG5lZ290aWF0ZWQsIHRoZSBDQVBTIHF1ZXJ5IHdpbGwgcmV0dXJuIHRoZSBuZWdvdGlhdGVkCi0gICAgICAgIGNhcHMgKGFuZCBub3RoaW5nIGVsc2UpLiBUaGVzZSBhcmUgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldHMgZm9yIGZpeGVkCi0gICAgICAgIGNhcHMgc291cmNlIHBhZHMuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLVsuLl0KLSAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKC4uKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAocGFkKTsKLVsuLl0KLV1dPgotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZml4ZWQgY2FwcyBjYW4gdGhlbiBiZSBzZXQgb24gdGhlIHBhZCBieSBjYWxsaW5nCi0gICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX3NldF9jYXBzICgpPC9mdW5jdGlvbj4uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLVsuLl0KLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIEdTVF9BVURJT19ORShGMzIpLAotICAgICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIDxzYW1wbGVyYXRlPiwKLSAgICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgPG51bS1jaGFubmVscz4sIE5VTEwpOwotICAgIGlmICghZ3N0X3BhZF9zZXRfY2FwcyAocGFkLCBjYXBzKSkgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGVsZW1lbnQsIENPUkUsIE5FR09USUFUSU9OLCAoTlVMTCksCi0gICAgICAgICAgKCJTb21lIGRlYnVnIGluZm9ybWF0aW9uIGhlcmUiKSk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotWy4uXQotXV0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXNlIHR5cGVzIG9mIGVsZW1lbnRzIGFsc28gZG9uJ3QgaGF2ZSBhIHJlbGF0aW9uIGJldHdlZW4gdGhlIGlucHV0Ci0gICAgICAgIGZvcm1hdCBhbmQgdGhlIG91dHB1dCBmb3JtYXQsIHRoZSBpbnB1dCBjYXBzIHNpbXBseSBkb24ndCBjb250YWluIHRoZQotICAgICAgICBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcHJvZHVjZSB0aGUgb3V0cHV0IGNhcHMuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQWxsIG90aGVyIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBiZSBjb25maWd1cmVkIGZvciB0aGUgZm9ybWF0IHNob3VsZAotICAgICAgICBpbXBsZW1lbnQgZnVsbCBjYXBzIG5lZ290aWF0aW9uLCB3aGljaCB3aWxsIGJlIGV4cGxhaW5lZCBpbiB0aGUgbmV4dAotICAgICAgICBmZXcgc2VjdGlvbnMuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1uZWdvLXRyYW5zZm9ybSI+Ci0gICAgICA8dGl0bGU+VHJhbnNmb3JtIG5lZ290aWF0aW9uPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiB0aGlzIG5lZ290aWF0aW9uIHRlY2huaXF1ZSwgdGhlcmUgaXMgYSBmaXhlZCB0cmFuc2Zvcm0gYmV0d2VlbgotICAgICAgICB0aGUgZWxlbWVudCBpbnB1dCBjYXBzIGFuZCB0aGUgb3V0cHV0IGNhcHMuIFRoaXMgdHJhbnNmb3JtYXRpb24KLSAgICAgICAgY291bGQgYmUgcGFyYW1ldGVyaXplZCBieSBlbGVtZW50IHByb3BlcnRpZXMgYnV0IG5vdCBieSB0aGUKLSAgICAgICAgY29udGVudCBvZiB0aGUgc3RyZWFtIChzZWUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1uZWdvLWZpeGVkIi8+Ci0gICAgICAgIGZvciB0aGF0IHVzZS1jYXNlKS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgY2FwcyB0aGF0IHRoZSBlbGVtZW50IGNhbiBhY2NlcHQgZGVwZW5kIG9uIHRoZSAoZml4ZWQKLSAgICAgICAgdHJhbnNmb3JtYXRpb24pIGRvd25zdHJlYW0gY2Fwcy4gVGhlIGNhcHMgdGhhdCB0aGUgZWxlbWVudCBjYW4KLSAgICAgICAgcHJvZHVjZSBkZXBlbmQgb24gdGhlIChmaXhlZCB0cmFuc2Zvcm1hdGlvbiBvZikgdGhlIHVwc3RyZWFtCi0gICAgICAgIGNhcHMuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyB0eXBlIG9mIGVsZW1lbnQgY2FuIHVzdWFsbHkgc2V0IGNhcHMgb24gaXRzIHNvdXJjZSBwYWQgZnJvbQotICAgICAgICB0aGUgPGZ1bmN0aW9uPl9ldmVudCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gb24gdGhlIHNpbmsgcGFkIHdoZW4KLSAgICAgICAgaXQgcmVjZWl2ZWQgdGhlIENBUFMgZXZlbnQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2FwcyB0cmFuc2Zvcm0KLSAgICAgICAgZnVuY3Rpb24gdHJhbnNmb3JtcyBhIGZpeGVkIGNhcHMgaW50byBhbm90aGVyIGZpeGVkIGNhcHMuCi0gICAgICAgIEV4YW1wbGVzIG9mIGVsZW1lbnRzIGluY2x1ZGU6Ci0gICAgICA8L3BhcmE+Ci0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBWaWRlb2JveC4gSXQgYWRkcyBjb25maWd1cmFibGUgYm9yZGVyIGFyb3VuZCBhIHZpZGVvIGZyYW1lCi0gICAgICAgICAgICBkZXBlbmRpbmcgb24gb2JqZWN0IHByb3BlcnRpZXMuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBJZGVudGl0eSBlbGVtZW50cy4gQWxsIGVsZW1lbnRzIHRoYXQgZG9uJ3QgY2hhbmdlIHRoZSBmb3JtYXQKLSAgICAgICAgICAgIG9mIHRoZSBkYXRhLCBvbmx5IHRoZSBjb250ZW50LiBWaWRlbyBhbmQgYXVkaW8gZWZmZWN0cyBhcmUgYW4KLSAgICAgICAgICAgIGV4YW1wbGUuIE90aGVyIGV4YW1wbGVzIGluY2x1ZGUgZWxlbWVudHMgdGhhdCBpbnNwZWN0IHRoZQotICAgICAgICAgICAgc3RyZWFtLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgU29tZSBkZWNvZGVycyBhbmQgZW5jb2RlcnMsIHdoZXJlIHRoZSBvdXRwdXQgZm9ybWF0IGlzIGRlZmluZWQKLSAgICAgICAgICAgIGJ5IGlucHV0IGZvcm1hdCwgbGlrZSBtdWxhd2RlYyBhbmQgbXVsYXdlbmMuIFRoZXNlIGRlY29kZXJzCi0gICAgICAgICAgICB1c3VhbGx5IGhhdmUgbm8gaGVhZGVycyB0aGF0IGRlZmluZSB0aGUgY29udGVudCBvZiB0aGUgc3RyZWFtLgotICAgICAgICAgICAgVGhleSBhcmUgdXN1YWxseSBtb3JlIGxpa2UgY29udmVyc2lvbiBlbGVtZW50cy4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgIDxwYXJhPgotICAgICAgICBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIGEgbmVnb3RpYXRpb24gc3RlcHMgb2YgYSB0eXBpY2FsIHRyYW5zZm9ybSAKLSAgICAgICAgZWxlbWVudC4gSW4gdGhlIHNpbmsgcGFkIENBUFMgZXZlbnQgaGFuZGxlciwgd2UgY29tcHV0ZSB0aGUgY2FwcwotICAgICAgICBmb3IgdGhlIHNvdXJjZSBwYWQgYW5kIHNldCB0aG9zZS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBbLi4uXQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9teV9maWx0ZXJfc2V0Y2FwcyAoR3N0TXlGaWx0ZXIgKmZpbHRlciwKLQkJICAgICAgIEdzdENhcHMgKmNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBpbnQgcmF0ZSwgY2hhbm5lbHM7Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0Q2FwcyAqb3V0Y2FwczsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJyYXRlIiwgJnJhdGUpOwotICByZXQgPSByZXQgJiYgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsICZjaGFubmVscyk7Ci0gIGlmICghcmV0KQotICAgIHJldHVybiBGQUxTRTsKLQotICBvdXRjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBHU1RfQVVESU9fTkUoUzE2KSwKLSAgICAgICJyYXRlIiwgR19UWVBFX0lOVCwgcmF0ZSwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGNoYW5uZWxzLCBOVUxMKTsKLSAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAoZmlsdGVyLT5zcmNwYWQsIG91dGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAob3V0Y2Fwcyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXlfZmlsdGVyX3NpbmtfZXZlbnQgKEdzdFBhZCAgICAqcGFkLAotCQkgICAgICAgICAgR3N0T2JqZWN0ICpwYXJlbnQsCi0JCSAgICAgICAgICBHc3RFdmVudCAgKmV2ZW50KQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICByZXQgPSBnc3RfbXlfZmlsdGVyX3NldGNhcHMgKGZpbHRlciwgY2Fwcyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLSAgWy4uLl0KLV1dPgotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICA8L3NlY3QyPgotCi0gICAgPHNlY3QyIGlkPSJzZWN0aW9uLW5lZ28tZHluYW1pYyI+Ci0gICAgICA8dGl0bGU+RHluYW1pYyBuZWdvdGlhdGlvbjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQSBsYXN0IG5lZ290aWF0aW9uIG1ldGhvZCBpcyB0aGUgbW9zdCBjb21wbGV4IGFuZCBwb3dlcmZ1bCBkeW5hbWljCi0gICAgICAgIG5lZ290aWF0aW9uLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIExpa2Ugd2l0aCB0aGUgdHJhbnNmb3JtIG5lZ290aWF0aW9uIGluIAotICAgICAgICA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLW5lZ28tdHJhbnNmb3JtIi8+LCBkeW5hbWljIG5lZ290aWF0aW9uIHdpbGwKLSAgICAgICAgcGVyZm9ybSBhIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBkb3duc3RyZWFtL3Vwc3RyZWFtIGNhcHMuIFVubGlrZSB0aGUKLSAgICAgICAgdHJhbnNmb3JtIG5lZ290aWF0aW9uLCB0aGlzIHRyYW5zZm9ybSB3aWxsIGNvbnZlcnQgZml4ZWQgY2FwcyB0bwotICAgICAgICB1bmZpeGVkIGNhcHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgc2luayBwYWQgaW5wdXQgY2FwcyBjYW4gYmUgY29udmVydGVkCi0gICAgICAgIGludG8gdW5maXhlZCAobXVsdGlwbGUpIGZvcm1hdHMuIFRoZSBzb3VyY2UgcGFkIHdpbGwgaGF2ZSB0byBjaG9vc2UgYQotICAgICAgICBmb3JtYXQgZnJvbSBhbGwgdGhlIHBvc3NpYmlsaXRpZXMuIEl0IHdvdWxkIHVzdWFsbHkgbGlrZSB0byBjaG9vc2UgYQotICAgICAgICBmb3JtYXQgdGhhdCByZXF1aXJlcyB0aGUgbGVhc3QgYW1vdW50IG9mIGVmZm9ydCB0byBwcm9kdWNlIGJ1dCBpdCBkb2VzCi0gICAgICAgIG5vdCBoYXZlIHRvIGJlLiBUaGUgc2VsZWN0aW9uIG9mIHRoZSBmb3JtYXQgc2hvdWxkIGFsc28gZGVwZW5kIG9uIHRoZQotICAgICAgICBjYXBzIHRoYXQgY2FuIGJlIGFjY2VwdGVkIGRvd25zdHJlYW0gKHNlZSBhIFFVRVJZX0NBUFMgZnVuY3Rpb24gaW4KLSAgICAgICAgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1uZWdvLWdldGNhcHMiLz4pLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEEgdHlwaWNhbCBmbG93IGdvZXMgbGlrZSB0aGlzOgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQ2FwcyBhcmUgcmVjZWl2ZWQgb24gdGhlIHNpbmsgcGFkIG9mIHRoZSBlbGVtZW50LgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgSWYgdGhlIGVsZW1lbnQgcHJlZmVycyB0byBvcGVyYXRlIGluIHBhc3N0aHJvdWdoIG1vZGUsIGNoZWNrCi0gICAgICAgICAgICBpZiBkb3duc3RyZWFtIGFjY2VwdHMgdGhlIGNhcHMgd2l0aCB0aGUgQUNDRVBUX0NBUFMgcXVlcnkuIElmIGl0Ci0gICAgICAgICAgICBkb2VzLCB3ZSBjYW4gY29tcGxldGUgbmVnb3RpYXRpb24gYW5kIHdlIGNhbiBvcGVyYXRlIGluCi0gICAgICAgICAgICBwYXNzdGhyb3VnaCBtb2RlLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQ2FsY3VsYXRlIHRoZSBwb3NzaWJsZSBjYXBzIGZvciB0aGUgc291cmNlIHBhZC4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFF1ZXJ5IHRoZSBkb3duc3RyZWFtIHBlZXIgcGFkIGZvciB0aGUgbGlzdCBvZiBwb3NzaWJsZQotICAgICAgICAgICAgY2Fwcy4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFNlbGVjdCBmcm9tIHRoZSBkb3duc3RyZWFtIGxpc3QgdGhlIGZpcnN0IGNhcHMgdGhhdCB5b3UgY2FuCi0gICAgICAgICAgICB0cmFuc2Zvcm0gdG8gYW5kIHNldCB0aGlzIGFzIHRoZSBvdXRwdXQgY2Fwcy4gWW91IG1pZ2h0IGhhdmUgdG8KLSAgICAgICAgICAgIGZpeGF0ZSB0aGUgY2FwcyB0byBzb21lIHJlYXNvbmFibGUgZGVmYXVsdHMgdG8gY29uc3RydWN0Ci0gICAgICAgICAgICBmaXhlZCBjYXBzLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgPHBhcmE+Ci0gICAgICAgIEV4YW1wbGVzIG9mIHRoaXMgdHlwZSBvZiBlbGVtZW50cyBpbmNsdWRlOgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQ29udmVydGVyIGVsZW1lbnRzIHN1Y2ggYXMgdmlkZW9jb252ZXJ0LCBhdWRpb2NvbnZlcnQsIGF1ZGlvcmVzYW1wbGUsCi0gICAgICAgICAgICB2aWRlb3NjYWxlLCAuLi4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFNvdXJjZSBlbGVtZW50cyBzdWNoIGFzIGF1ZGlvdGVzdHNyYywgdmlkZW90ZXN0c3JjLCB2NGwyc3JjLAotICAgICAgICAgICAgcHVsc2VzcmMsIC4uLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgPHBhcmE+Ci0gICAgICAgIExldCdzIGxvb2sgYXQgdGhlIGV4YW1wbGUgb2YgYW4gZWxlbWVudCB0aGF0IGNhbiBjb252ZXJ0IGJldHdlZW4KLSAgICAgICAgc2FtcGxlcmF0ZXMsIHNvIHdoZXJlIGlucHV0IGFuZCBvdXRwdXQgc2FtcGxlcmF0ZSBkb24ndCBoYXZlIHRvIGJlCi0gICAgICAgIHRoZSBzYW1lOgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9teV9maWx0ZXJfc2V0Y2FwcyAoR3N0TXlGaWx0ZXIgKmZpbHRlciwKLQkJICAgICAgIEdzdENhcHMgKmNhcHMpCi17Ci0gIGlmIChnc3RfcGFkX3NldF9jYXBzIChmaWx0ZXItPnNyY3BhZCwgY2FwcykpIHsKLSAgICBmaWx0ZXItPnBhc3N0aHJvdWdoID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBHc3RDYXBzICpvdGhlcmNhcHMsICpuZXdjYXBzOwotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApLCAqb3RoZXJzOwotCi0gICAgLyogbm8gcGFzc3Rocm91Z2gsIHNldHVwIGludGVybmFsIGNvbnZlcnNpb24gKi8KLSAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjaGFubmVscyIsICZmaWx0ZXItPmNoYW5uZWxzKTsKLSAgICBvdGhlcmNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKGZpbHRlci0+c3JjcGFkKTsKLSAgICBvdGhlcnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChvdGhlcmNhcHMsIDApOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdGhlcnMsCi0gICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBmaWx0ZXItPmNoYW5uZWxzLCBOVUxMKTsKLQotICAgIC8qIG5vdywgdGhlIHNhbXBsZXJhdGUgdmFsdWUgY2FuIG9wdGlvbmFsbHkgaGF2ZSBtdWx0aXBsZSB2YWx1ZXMsIHNvCi0gICAgICogd2UgImZpeGF0ZSIgaXQsIHdoaWNoIG1lYW5zIHRoYXQgb25lIGZpeGVkIHZhbHVlIGlzIGNob3NlbiAqLwotICAgIG5ld2NhcHMgPSBnc3RfY2Fwc19jb3B5X250aCAob3RoZXJjYXBzLCAwKTsKLSAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKLSAgICBnc3RfcGFkX2ZpeGF0ZV9jYXBzIChmaWx0ZXItPnNyY3BhZCwgbmV3Y2Fwcyk7Ci0gICAgaWYgKCFnc3RfcGFkX3NldF9jYXBzIChmaWx0ZXItPnNyY3BhZCwgbmV3Y2FwcykpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvKiB3ZSBhcmUgbm93IHNldCB1cCwgY29uZmlndXJlIGludGVybmFsbHkgKi8KLSAgICBmaWx0ZXItPnBhc3N0aHJvdWdoID0gRkFMU0U7Ci0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAicmF0ZSIsICZmaWx0ZXItPmZyb21fc2FtcGxlcmF0ZSk7Ci0gICAgb3RoZXJzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAobmV3Y2FwcywgMCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChvdGhlcnMsICJyYXRlIiwgJmZpbHRlci0+dG9fc2FtcGxlcmF0ZSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXlfZmlsdGVyX3NpbmtfZXZlbnQgKEdzdFBhZCAgICAqcGFkLAotCQkgICAgICAgICAgR3N0T2JqZWN0ICpwYXJlbnQsCi0JCSAgICAgICAgICBHc3RFdmVudCAgKmV2ZW50KQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICByZXQgPSBnc3RfbXlfZmlsdGVyX3NldGNhcHMgKGZpbHRlciwgY2Fwcyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXlfZmlsdGVyX2NoYWluIChHc3RQYWQgICAgKnBhZCwKLQkJICAgICBHc3RPYmplY3QgKnBhcmVudCwKLQkJICAgICBHc3RCdWZmZXIgKmJ1ZikKLXsKLSAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKHBhcmVudCk7Ci0gIEdzdEJ1ZmZlciAqb3V0OwotCi0gIC8qIHB1c2ggb24gaWYgaW4gcGFzc3Rocm91Z2ggbW9kZSAqLwotICBpZiAoZmlsdGVyLT5wYXNzdGhyb3VnaCkKLSAgICByZXR1cm4gZ3N0X3BhZF9wdXNoIChmaWx0ZXItPnNyY3BhZCwgYnVmKTsKLQotICAvKiBjb252ZXJ0LCBwdXNoICovCi0gIG91dCA9IGdzdF9teV9maWx0ZXJfY29udmVydCAoZmlsdGVyLCBidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIHJldHVybiBnc3RfcGFkX3B1c2ggKGZpbHRlci0+c3JjcGFkLCBvdXQpOwotfQotXV0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDwvc2VjdDI+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLW5lZ28tdXBzdHJlYW0iIHhyZWZsYWJlbD0iVXBzdHJlYW0gY2FwcyAocmUpbmVnb3RpYXRpb24iPgotICAgIDx0aXRsZT5VcHN0cmVhbSBjYXBzIChyZSluZWdvdGlhdGlvbjwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBVcHN0cmVhbSBuZWdvdGlhdGlvbidzIHByaW1hcnkgdXNlIGlzIHRvIHJlbmVnb3RpYXRlIChwYXJ0IG9mKSBhbgotICAgICAgYWxyZWFkeS1uZWdvdGlhdGVkIHBpcGVsaW5lIHRvIGEgbmV3IGZvcm1hdC4gU29tZSBwcmFjdGljYWwgZXhhbXBsZXMKLSAgICAgIGluY2x1ZGUgdG8gc2VsZWN0IGEgZGlmZmVyZW50IHZpZGVvIHNpemUgYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KLSAgICAgIHdpbmRvdyBjaGFuZ2VkLCBhbmQgdGhlIHZpZGVvIG91dHB1dCBpdHNlbGYgaXMgbm90IGNhcGFibGUgb2YgcmVzY2FsaW5nLAotICAgICAgb3IgYmVjYXVzZSB0aGUgYXVkaW8gY2hhbm5lbCBjb25maWd1cmF0aW9uIGNoYW5nZWQuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVXBzdHJlYW0gY2FwcyByZW5lZ290aWF0aW9uIGlzIHJlcXVlc3RlZCBieSBzZW5kaW5nIGEgR1NUX0VWRU5UX1JFQ09ORklHVVJFCi0gICAgICBldmVudCB1cHN0cmVhbS4gVGhlIGlkZWEgaXMgdGhhdCBpdCB3aWxsIGluc3RydWN0IHRoZSB1cHN0cmVhbSBlbGVtZW50Ci0gICAgICB0byByZWNvbmZpZ3VyZSBpdHMgY2FwcyBieSBkb2luZyBhIG5ldyBxdWVyeSBmb3IgdGhlIGFsbG93ZWQgY2FwcyBhbmQgdGhlbgotICAgICAgY2hvb3NpbmcgYSBuZXcgY2Fwcy4gVGhlIGVsZW1lbnQgdGhhdCBzZW5kcyBvdXQgdGhlIFJFQ09ORklHVVJFIGV2ZW50Ci0gICAgICB3b3VsZCBpbmZsdWVuY2UgdGhlIHNlbGVjdGlvbiBvZiB0aGUgbmV3IGNhcHMgYnkgcmV0dXJuaW5nIHRoZSBuZXcKLSAgICAgIHByZWZlcnJlZCBjYXBzIGZyb20gaXRzIEdTVF9RVUVSWV9DQVBTIHF1ZXJ5IGZ1bmN0aW9uLiBUaGUgUkVDT05GSUdVUkUKLSAgICAgIGV2ZW50IHdpbGwgc2V0IHRoZSBHU1RfUEFEX0ZMQUdfTkVFRF9SRUNPTkZJR1VSRSBvbiBhbGwgcGFkcyB0aGF0IGl0Ci0gICAgICB0cmF2ZWxzIG92ZXIuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgaGVyZSB0aGF0IGRpZmZlcmVudCBlbGVtZW50cyBhY3R1YWxseSBoYXZlCi0gICAgICBkaWZmZXJlbnQgcmVzcG9uc2liaWxpdGllcyBoZXJlOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBFbGVtZW50cyB0aGF0IHdhbnQgdG8gcHJvcG9zZSBhIG5ldyBmb3JtYXQgdXBzdHJlYW0gbmVlZCB0byBmaXJzdAotICAgICAgICAgIGNoZWNrIGlmIHRoZSBuZXcgY2FwcyBhcmUgYWNjZXB0YWJsZSB1cHN0cmVhbSB3aXRoIGFuIEFDQ0VQVF9DQVBTCi0gICAgICAgICAgcXVlcnkuIFRoZW4gdGhleSB3b3VsZCBzZW5kIGEgUkVDT05GSUdVUkUgZXZlbnQgYW5kIGJlIHByZXBhcmVkIHRvCi0gICAgICAgICAgYW5zd2VyIHRoZSBDQVBTIHF1ZXJ5IHdpdGggdGhlIG5ldyBwcmVmZXJyZWQgZm9ybWF0LiBJdCBzaG91bGQgYmUKLSAgICAgICAgICBub3RlZCB0aGF0IHdoZW4gdGhlcmUgaXMgbm8gdXBzdHJlYW0gZWxlbWVudCB0aGF0IGNhbiAob3Igd2FudHMpCi0gICAgICAgICAgdG8gcmVuZWdvdGlhdGUsIHRoZSBlbGVtZW50IG5lZWRzIHRvIGRlYWwgd2l0aCB0aGUgY3VycmVudGx5Ci0gICAgICAgICAgY29uZmlndXJlZCBmb3JtYXQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEVsZW1lbnRzIHRoYXQgb3BlcmF0ZSBpbiB0cmFuc2Zvcm0gbmVnb3RpYXRpb24gYWNjb3JkaW5nIHRvCi0gICAgICAgICAgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1uZWdvLXRyYW5zZm9ybSIvPiBwYXNzIHRoZSBSRUNPTkZJR1VSRQotICAgICAgICAgIGV2ZW50IHVwc3RyZWFtLiBCZWNhdXNlIHRoZXNlIGVsZW1lbnRzIHNpbXBseSBkbyBhIGZpeGVkIHRyYW5zZm9ybQotICAgICAgICAgIGJhc2VkIG9uIHRoZSB1cHN0cmVhbSBjYXBzLCB0aGV5IG5lZWQgdG8gc2VuZCB0aGUgZXZlbnQgdXBzdHJlYW0KLSAgICAgICAgICBzbyB0aGF0IGl0IGNhbiBzZWxlY3QgYSBuZXcgZm9ybWF0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBFbGVtZW50cyB0aGF0IG9wZXJhdGUgaW4gZml4ZWQgbmVnb3RpYXRpb24gCi0gICAgICAgICAgKDx4cmVmIGxpbmtlbmQ9InNlY3Rpb24tbmVnby1maXhlZCIvPikgZHJvcCB0aGUgUkVDT05GSUdVUkUgZXZlbnQuCi0gICAgICAgICAgVGhlc2UgZWxlbWVudHMgY2FuJ3QgcmVjb25maWd1cmUgYW5kIHRoZWlyIG91dHB1dCBjYXBzIGRvbid0IGRlcGVuZAotICAgICAgICAgIG9uIHRoZSB1cHN0cmVhbSBjYXBzIHNvIHRoZSBldmVudCBjYW4gYmUgZHJvcHBlZC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRWxlbWVudHMgdGhhdCBjYW4gYmUgcmVjb25maWd1cmVkIG9uIHRoZSBzb3VyY2UgcGFkIChzb3VyY2UgcGFkcwotICAgICAgICAgIGltcGxlbWVudGluZyBkeW5hbWljIG5lZ290aWF0aW9uIGluCi0gICAgICAgICAgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1uZWdvLWR5bmFtaWMiLz4pIHNob3VsZCBjaGVjayBpdHMKLSAgICAgICAgICBORUVEX1JFQ09ORklHVVJFIGZsYWcgd2l0aAotICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlICgpPC9mdW5jdGlvbj4gYW5kIGl0IHNob3VsZAotICAgICAgICAgIHN0YXJ0IHJlbmVnb3RpYXRpb24gd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBUUlVFLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1uZWdvLWdldGNhcHMiIHhyZWZsYWJlbD0iSW1wbGVtZW50aW5nIGEgQ0FQUyBxdWVyeSBmdW5jdGlvbiI+Ci0gICAgPHRpdGxlPkltcGxlbWVudGluZyBhIENBUFMgcXVlcnkgZnVuY3Rpb248L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgQSA8ZnVuY3Rpb24+X3F1ZXJ5ICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24gd2l0aCB0aGUgR1NUX1FVRVJZX0NBUFMgcXVlcnkKLSAgICAgIHR5cGUgaXMgY2FsbGVkIHdoZW4gYSBwZWVyIGVsZW1lbnQgd291bGQgbGlrZSB0byBrbm93IHdoaWNoIGZvcm1hdHMKLSAgICAgIHRoaXMgcGFkIHN1cHBvcnRzLCBhbmQgaW4gd2hhdCBvcmRlciBvZiBwcmVmZXJlbmNlLiBUaGUgcmV0dXJuIHZhbHVlCi0gICAgICBzaG91bGQgYmUgYWxsIGZvcm1hdHMgdGhhdCB0aGlzIGVsZW1lbnRzIHN1cHBvcnRzLCB0YWtpbmcgaW50byBhY2NvdW50Ci0gICAgICBsaW1pdGF0aW9ucyBvZiBwZWVyIGVsZW1lbnRzIGZ1cnRoZXIgZG93bnN0cmVhbSBvciB1cHN0cmVhbSwgc29ydGVkIGJ5Ci0gICAgICBvcmRlciBvZiBwcmVmZXJlbmNlLCBoaWdoZXN0IHByZWZlcmVuY2UgZmlyc3QuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X2ZpbHRlcl9xdWVyeSAoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTCi0gICAgewotICAgICAgR3N0UGFkICpvdGhlcnBhZDsKLSAgICAgIEdzdENhcHMgKnRlbXAsICpjYXBzLCAqZmlsdCwgKnRjYXBzOwotICAgICAgZ2ludCBpOwotCi0gICAgICBvdGhlcnBhZCA9IChwYWQgPT0gZmlsdGVyLT5zcmNwYWQpID8gZmlsdGVyLT5zaW5rcGFkIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXItPnNyY3BhZDsKLSAgICAgIGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKG90aGVycGFkKTsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdCk7Ci0KLSAgICAgIC8qIFdlIHN1cHBvcnQgKmFueSogc2FtcGxlcmF0ZSwgaW5kaWZmZXJlbnQgZnJvbSB0aGUgc2FtcGxlcmF0ZQotICAgICAgICogc3VwcG9ydGVkIGJ5IHRoZSBsaW5rZWQgZWxlbWVudHMgb24gYm90aCBzaWRlcy4gKi8KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7IGkrKykgewotICAgICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsICJyYXRlIik7Ci0gICAgICB9Ci0KLSAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBvbmx5IHJldHVybiByZXN1bHRzIHRoYXQgaW50ZXJzZWN0IG91cgotICAgICAgICogcGFkdGVtcGxhdGUgKi8KLSAgICAgIHRjYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0gICAgICBpZiAodGNhcHMpIHsKLSAgICAgICAgdGVtcCA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwcywgdGNhcHMpOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmICh0Y2Fwcyk7Ci0gICAgICAgIGNhcHMgPSB0ZW1wOwotICAgICAgfQotICAgICAgLyogZmlsdGVyIGFnYWluc3QgdGhlIHF1ZXJ5IGZpbHRlciB3aGVuIG5lZWRlZCAqLwotICAgICAgaWYgKGZpbHQpIHsKLSAgICAgICAgdGVtcCA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwcywgZmlsdCk7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgICAgY2FwcyA9IHRlbXA7Ci0gICAgICB9Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotXV0+Ci0gICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tbmVnby1wdWxsbW9kZSI+Ci0gICAgPHRpdGxlPlB1bGwtbW9kZSBDYXBzIG5lZ290aWF0aW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFdSSVRFTUUsIHRoZSBtZWNoYW5pc20gb2YgcHVsbC1tb2RlIG5lZ290aWF0aW9uIGlzIG5vdCB5ZXQgZnVsbHkKLSAgICAgIHVuZGVyc3Rvb2QuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBVc2luZyBhbGwgdGhlIGtub3dsZWRnZSB5b3UndmUgYWNxdWlyZWQgYnkgcmVhZGluZyB0aGlzIGNoYXB0ZXIsIHlvdQotICAgICAgc2hvdWxkIGJlIGFibGUgdG8gd3JpdGUgYW4gZWxlbWVudCB0aGF0IGRvZXMgY29ycmVjdCBjYXBzIG5lZ290aWF0aW9uLgotICAgICAgSWYgaW4gZG91YnQsIGxvb2sgYXQgb3RoZXIgZWxlbWVudHMgb2YgdGhlIHNhbWUgdHlwZSBpbiBvdXIgZ2l0Ci0gICAgICByZXBvc2l0b3J5IHRvIGdldCBhbiBpZGVhIG9mIGhvdyB0aGV5IGRvIHdoYXQgeW91IHdhbnQgdG8gZG8uCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtcW9zLnhtbCBiL2RvY3MvcHdnL2FkdmFuY2VkLXFvcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4N2JmMWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYWR2YW5jZWQtcW9zLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1hZHZhbmNlZC1xb3MiPgotICA8dGl0bGU+UXVhbGl0eSBPZiBTZXJ2aWNlIChRb1MpPC90aXRsZT4KLQotICA8cGFyYT4KLSAgICBRdWFsaXR5IG9mIFNlcnZpY2UgaW4gJkdTdHJlYW1lcjsgaXMgYWJvdXQgbWVhc3VyaW5nIGFuZCBhZGp1c3RpbmcKLSAgICB0aGUgcmVhbC10aW1lIHBlcmZvcm1hbmNlIG9mIGEgcGlwZWxpbmUuIFRoZSByZWFsLXRpbWUgcGVyZm9ybWFuY2UgaXMKLSAgICBhbHdheXMgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIHBpcGVsaW5lIGNsb2NrIGFuZCB0eXBpY2FsbHkgaGFwcGVucyBpbgotICAgIHRoZSBzaW5rcyB3aGVuIHRoZXkgc3luY2hyb25pemUgYnVmZmVycyBhZ2FpbnN0IHRoZSBjbG9jay4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBXaGVuIGJ1ZmZlcnMgYXJyaXZlIGxhdGUgaW4gdGhlIHNpbmssIGkuZS4gd2hlbiB0aGVpciBydW5uaW5nLXRpbWUgaXMKLSAgICBzbWFsbGVyIHRoYW4gdGhhdCBvZiB0aGUgY2xvY2ssIHdlIHNheSB0aGF0IHRoZSBwaXBlbGluZSBpcyBoYXZpbmcgYQotICAgIHF1YWxpdHkgb2Ygc2VydmljZSBwcm9ibGVtLiBUaGVzZSBhcmUgYSBmZXcgcG9zc2libGUgcmVhc29uczoKLSAgPC9wYXJhPgotICA8aXRlbWl6ZWRsaXN0PgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICBIaWdoIENQVSBsb2FkLCB0aGVyZSBpcyBub3QgZW5vdWdoIENQVSBwb3dlciB0byBoYW5kbGUgdGhlIHN0cmVhbSwKLSAgICAgICAgY2F1c2luZyBidWZmZXJzIHRvIGFycml2ZSBsYXRlIGluIHRoZSBzaW5rLgotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE5ldHdvcmsgcHJvYmxlbXMKLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICBPdGhlciByZXNvdXJjZSBwcm9ibGVtcyBzdWNoIGFzIGRpc2sgbG9hZCwgbWVtb3J5IGJvdHRsZW5lY2tzIGV0YwotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotICA8cGFyYT4KLSAgICBUaGUgbWVhc3VyZW1lbnRzIHJlc3VsdCBpbiBRT1MgZXZlbnRzIHRoYXQgYWltIHRvIGFkanVzdCB0aGUgZGF0YXJhdGUKLSAgICBpbiBvbmUgb3IgbW9yZSB1cHN0cmVhbSBlbGVtZW50cy4gVHdvIHR5cGVzIG9mIGFkanVzdG1lbnRzIGNhbiBiZQotICAgIG1hZGU6Ci0gIDwvcGFyYT4KLSAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU2hvcnQgdGltZSAiZW1lcmdlbmN5IiBjb3JyZWN0aW9ucyBiYXNlZCBvbiBsYXRlc3Qgb2JzZXJ2YXRpb24gaW4KLSAgICAgICAgdGhlIHNpbmtzLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIExvbmcgdGVybSByYXRlIGNvcnJlY3Rpb25zIGJhc2VkIG9uIHRyZW5kcyBvYnNlcnZlZCBpbiB0aGUgc2lua3MuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci0gIDxwYXJhPgotICAgIEl0IGlzIGFsc28gcG9zc2libGUgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBhcnRpZmljaWFsbHkgaW50cm9kdWNlIGRlbGF5Ci0gICAgYmV0d2VlbiBzeW5jaHJvbml6ZWQgYnVmZmVycywgdGhpcyBpcyBjYWxsZWQgdGhyb3R0bGluZy4gSXQgY2FuIGJlIHVzZWQKLSAgICB0byBsaW1pdCBvciByZWR1Y2UgdGhlIGZyYW1lcmF0ZSwgZm9yIGV4YW1wbGUuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tbWVhc3VyaW5nIj4KLSAgICA8dGl0bGU+TWVhc3VyaW5nIFFvUzwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBFbGVtZW50cyB0aGF0IHN5bmNocm9uaXplIGJ1ZmZlcnMgb24gdGhlIHBpcGVsaW5lIGNsb2NrIHdpbGwgdXN1YWxseQotICAgICAgbWVhc3VyZSB0aGUgY3VycmVudCBRb1MuIFRoZXkgd2lsbCBhbHNvIG5lZWQgdG8ga2VlcCBzb21lIHN0YXRpc3RpY3MKLSAgICAgIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBRT1MgZXZlbnQuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgRm9yIGVhY2ggYnVmZmVyIHRoYXQgYXJyaXZlcyBpbiB0aGUgc2luaywgdGhlIGVsZW1lbnQgbmVlZHMgdG8gY2FsY3VsYXRlCi0gICAgICBob3cgbGF0ZSBvciBob3cgZWFybHkgaXQgd2FzLiBUaGlzIGlzIGNhbGxlZCB0aGUgaml0dGVyLiBOZWdhdGl2ZSBqaXR0ZXIKLSAgICAgIHZhbHVlcyBtZWFuIHRoYXQgdGhlIGJ1ZmZlciB3YXMgZWFybHksIHBvc2l0aXZlIHZhbHVlcyBtZWFuIHRoYXQgdGhlCi0gICAgICBidWZmZXIgd2FzIGxhdGUuIHRoZSBqaXR0ZXIgdmFsdWUgZ2l2ZXMgYW4gaW5kaWNhdGlvbiBvZiBob3cgZWFybHkvbGF0ZQotICAgICAgYSBidWZmZXIgd2FzLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEEgc3luY2hyb25pemluZyBlbGVtZW50IHdpbGwgYWxzbyBuZWVkIHRvIGNhbGN1bGF0ZSBob3cgbXVjaCB0aW1lCi0gICAgICBlbGFwc2VkIGJldHdlZW4gcmVjZWl2aW5nIHR3byBjb25zZWN1dGl2ZSBidWZmZXJzLiBXZSBjYWxsIHRoaXMgdGhlCi0gICAgICBwcm9jZXNzaW5nIHRpbWUgYmVjYXVzZSB0aGF0IGlzIHRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlCi0gICAgICB1cHN0cmVhbSBlbGVtZW50IHRvIHByb2R1Y2UvcHJvY2VzcyB0aGUgYnVmZmVyLiBXZSBjYW4gY29tcGFyZSB0aGlzCi0gICAgICBwcm9jZXNzaW5nIHRpbWUgdG8gdGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIgdG8gaGF2ZSBhIG1lYXN1cmVtZW50Ci0gICAgICBvZiBob3cgZmFzdCB1cHN0cmVhbSBjYW4gcHJvZHVjZSBkYXRhLCBjYWxsZWQgdGhlIHByb3BvcnRpb24uCi0gICAgICBJZiwgZm9yIGV4YW1wbGUsIHVwc3RyZWFtIGNhbiBwcm9kdWNlIGEgYnVmZmVyIGluIDAuNSBzZWNvbmRzIG9mIDEKLSAgICAgIHNlY29uZCBsb25nLCBpdCBpcyBvcGVyYXRpbmcgYXQgdHdpY2UgdGhlIHJlcXVpcmVkIHNwZWVkLiBJZiwgb24gdGhlCi0gICAgICBvdGhlciBoYW5kLCBpdCB0YWtlcyAyIHNlY29uZHMgdG8gcHJvZHVjZSBhIGJ1ZmZlciB3aXRoIDEgc2Vjb25kcyB3b3J0aAotICAgICAgb2YgZGF0YSwgdXBzdHJlYW0gaXMgcHJvZHVjaW5nIGJ1ZmZlcnMgdG9vIHNsb3cgYW5kIHdlIHdvbid0IGJlIGFibGUgdG8KLSAgICAgIGtlZXAgc3luY2hyb25pemF0aW9uLiBVc3VhbGx5LCBhIHJ1bm5pbmcgYXZlcmFnZSBpcyBrZXB0IG9mIHRoZQotICAgICAgcHJvcG9ydGlvbi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBIHN5bmNocm9uaXppbmcgZWxlbWVudCBhbHNvIG5lZWRzIHRvIG1lYXN1cmUgaXRzIG93biBwZXJmb3JtYW5jZSBpbgotICAgICAgb3JkZXIgdG8gZmlndXJlIG91dCBpZiB0aGUgcGVyZm9ybWFuY2UgcHJvYmxlbSBpcyB1cHN0cmVhbSBvZiBpdHNlbGYuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhlc2UgbWVhc3VyZW1lbnRzIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhIFFPUyBldmVudCB0aGF0IGlzIHNlbnQKLSAgICAgIHVwc3RyZWFtLiBOb3RlIHRoYXQgYSBRb1MgZXZlbnQgaXMgc2VudCBmb3IgZWFjaCBidWZmZXIgdGhhdCBhcnJpdmVzCi0gICAgICBpbiB0aGUgc2luay4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWhhbmRsaW5nIj4KLSAgICA8dGl0bGU+SGFuZGxpbmcgUW9TPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEFuIGVsZW1lbnQgd2lsbCBoYXZlIHRvIGluc3RhbGwgYW4gZXZlbnQgZnVuY3Rpb24gb24gaXRzIHNvdXJjZSBwYWRzCi0gICAgICBpbiBvcmRlciB0byByZWNlaXZlIFFPUyBldmVudHMuIFVzdWFsbHksIHRoZSBlbGVtZW50IHdpbGwgbmVlZCB0bwotICAgICAgc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBRT1MgZXZlbnQgYW5kIHVzZSB0aGVtIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcKLSAgICAgIGZ1bmN0aW9uLiBUaGUgZWxlbWVudCB3aWxsIG5lZWQgdG8gdXNlIGEgbG9jayB0byBwcm90ZWN0IHRoZXNlIFFvUwotICAgICAgdmFsdWVzIGFzIHNob3duIGluIHRoZSBleGFtcGxlIGJlbG93LiBBbHNvIG1ha2Ugc3VyZSB0byBwYXNzIHRoZQotICAgICAgUW9TIGV2ZW50IHVwc3RyZWFtLgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgICBbLi4uXQotCi0gICAgY2FzZSBHU1RfRVZFTlRfUU9TOgotICAgIHsKLSAgICAgIEdzdFFPU1R5cGUgdHlwZTsKLSAgICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKLSAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLSAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9xb3MgKGV2ZW50LCAmdHlwZSwgJnByb3BvcnRpb24sICZkaWZmLCAmdGltZXN0YW1wKTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChkZWNvZGVyKTsKLSAgICAgIHByaXYtPnFvc19wcm9wb3J0aW9uID0gcHJvcG9ydGlvbjsKLSAgICAgIHByaXYtPnFvc190aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgICBwcml2LT5xb3NfZGlmZiA9IGRpZmY7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVjb2Rlcik7Ci0KLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGVjb2Rlci0+c2lua3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgWy4uLl0KLV1dPgotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBXaXRoIHRoZSBRb1MgdmFsdWVzLCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIGNvcnJlY3Rpb25zIHRoYXQgYW4gZWxlbWVudAotICAgICAgY2FuIGRvOgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1oYW5kbGluZy1zaG9ydCI+Ci0gICAgICA8dGl0bGU+U2hvcnQgdGVybSBjb3JyZWN0aW9uPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgdGltZXN0YW1wIGFuZCB0aGUgaml0dGVyIHZhbHVlIGluIHRoZSBRT1MgZXZlbnQgY2FuIGJlIHVzZWQgdG8KLSAgICAgICAgcGVyZm9ybSBhIHNob3J0IHRlcm0gY29ycmVjdGlvbi4gSWYgdGhlIGppdHRlciBpcyBwb3NpdGl2ZSwgdGhlCi0gICAgICAgIHByZXZpb3VzIGJ1ZmZlciBhcnJpdmVkIGxhdGUgYW5kIHdlIGNhbiBiZSBzdXJlIHRoYXQgYSBidWZmZXIgd2l0aAotICAgICAgICBhIHRpbWVzdGFtcCAmbHQ7IHRpbWVzdGFtcCArIGppdHRlciBpcyBhbHNvIGdvaW5nIHRvIGJlIGxhdGUuIFdlCi0gICAgICAgIGNhbiB0aHVzIGRyb3AgYWxsIGJ1ZmZlcnMgd2l0aCBhIHRpbWVzdGFtcCBsZXNzIHRoYW4gdGltZXN0YW1wICsKLSAgICAgICAgaml0dGVyLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHRoZSBidWZmZXIgZHVyYXRpb24gaXMga25vd24sIGEgYmV0dGVyIGVzdGltYXRpb24gZm9yIHRoZSBuZXh0Ci0gICAgICAgIGxpa2VseSB0aW1lc3RhbXAgYXM6IHRpbWVzdGFtcCArIDIgKiBqaXR0ZXIgKyBkdXJhdGlvbi4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBIHBvc3NpYmxlIGFsZ29yaXRobSB0eXBpY2FsbHkgbG9va3MgbGlrZSB0aGlzOgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIFsuLi5dCi0KLSAgR1NUX09CSkVDVF9MT0NLIChkZWMpOwotICBxb3NfcHJvcG9ydGlvbiA9IHByaXYtPnFvc19wcm9wb3J0aW9uOwotICBxb3NfdGltZXN0YW1wID0gcHJpdi0+cW9zX3RpbWVzdGFtcDsKLSAgcW9zX2RpZmYgPSBwcml2LT5xb3NfZGlmZjsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlYyk7Ci0KLSAgLyogY2FsY3VsYXRlIHRoZSBlYXJsaWVzdCB2YWxpZCB0aW1lc3RhbXAgKi8KLSAgaWYgKEdfTElLRUxZIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocW9zX3RpbWVzdGFtcCkpKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHFvc19kaWZmID4gMCkpIHsKLSAgICAgIGVhcmxpZXN0X3RpbWUgPSBxb3NfdGltZXN0YW1wICsgMiAqIHFvc19kaWZmICsgZnJhbWVfZHVyYXRpb247Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVhcmxpZXN0X3RpbWUgPSBxb3NfdGltZXN0YW1wICsgcW9zX2RpZmY7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGVhcmxpZXN0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB9Ci0KLSAgLyogY29tcGFyZSBlYXJsaWVzdF90aW1lIHRvIHJ1bm5pbmctdGltZSBvZiBuZXh0IGJ1ZmZlciAqLwotICBpZiAoZWFybGllc3RfdGltZSA+IHRpbWVzdGFtcCkKLSAgICBnb3RvIGRyb3BfYnVmZmVyOwotCi0gIFsuLi5dCi1dXT4KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPC9zZWN0Mj4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1oYW5kbGluZy1sb25nIj4KLSAgICAgIDx0aXRsZT5Mb25nIHRlcm0gY29ycmVjdGlvbjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgTG9uZyB0ZXJtIGNvcnJlY3Rpb25zIGFyZSBhIGJpdCBtb3JlIGRpZmZpY3VsdCB0byBwZXJmb3JtLiBUaGV5Ci0gICAgICAgIHJlbHkgb24gdGhlIHZhbHVlIG9mIHRoZSBwcm9wb3J0aW9uIGluIHRoZSBRT1MgZXZlbnQuIEVsZW1lbnRzIHNob3VsZAotICAgICAgICByZWR1Y2UgdGhlIGFtb3VudCBvZiByZXNvdXJjZXMgdGhleSBjb25zdW1lIGJ5IHRoZSBwcm9wb3J0aW9uCi0gICAgICAgIGZpZWxkIGluIHRoZSBRb1MgbWVzc2FnZS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBIZXJlIGFyZSBzb21lIHBvc3NpYmxlIHN0cmF0ZWdpZXMgdG8gYWNoaWV2ZSB0aGlzOgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgUGVybWFuZW50bHkgZHJvcHBpbmcgZnJhbWVzIG9yIHJlZHVjaW5nIHRoZSBDUFUgb3IgYmFuZHdpZHRoCi0gICAgICAgICAgICByZXF1aXJlbWVudHMgb2YgdGhlIGVsZW1lbnQuIFNvbWUgZGVjb2RlcnMgbWlnaHQgYmUgYWJsZSB0bwotICAgICAgICAgICAgc2tpcCBkZWNvZGluZyBvZiBCIGZyYW1lcy4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFN3aXRjaCB0byBsb3dlciBxdWFsaXR5IHByb2Nlc3Npbmcgb3IgcmVkdWNlIHRoZSBhbGdvcml0aG1pYwotICAgICAgICAgICAgY29tcGxleGl0eS4gQ2FyZSBzaG91bGQgYmUgdGFrZW4gdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlCi0gICAgICAgICAgICBkaXN0dXJiaW5nIHZpc3VhbCBvciBhdWRpYmxlIGdsaXRjaGVzLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgU3dpdGNoIHRvIGEgbG93ZXIgcXVhbGl0eSBzb3VyY2UgdG8gcmVkdWNlIG5ldHdvcmsgYmFuZHdpZHRoLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXNzaWduIG1vcmUgQ1BVIGN5Y2xlcyB0byBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgcGlwZWxpbmUuIFRoaXMKLSAgICAgICAgICAgIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgZG9uZSBieSBpbmNyZWFzaW5nIHRoZSB0aHJlYWQgcHJpb3JpdHkuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gYWxsIGNhc2VzLCBlbGVtZW50cyBzaG91bGQgYmUgcHJlcGFyZWQgdG8gZ28gYmFjayB0byB0aGVpciBub3JtYWwKLSAgICAgICAgcHJvY2Vzc2luZyByYXRlIHdoZW4gdGhlIHByb3BvcnRpb24gbWVtYmVyIGluIHRoZSBRT1MgZXZlbnQgYXBwcm9hY2hlcwotICAgICAgICB0aGUgaWRlYWwgcHJvcG9ydGlvbiBvZiAxLjAgYWdhaW4uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0Mj4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tdGhyb3R0bGUiPgotICAgIDx0aXRsZT5UaHJvdHRsaW5nPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEVsZW1lbnRzIHN5bmNocm9uaXppbmcgdG8gdGhlIGNsb2NrIHNob3VsZCBleHBvc2UgYSBwcm9wZXJ0eSB0byBjb25maWd1cmUKLSAgICAgIHRoZW0gaW4gdGhyb3R0bGUgbW9kZS4gSW4gdGhyb3R0bGUgbW9kZSwgdGhlIHRpbWUgZGlzdGFuY2UgYmV0d2VlbiBidWZmZXJzCi0gICAgICBpcyBrZXB0IHRvIGEgY29uZmlndXJhYmxlIHRocm90dGxlIGludGVydmFsLiBUaGlzIG1lYW5zIHRoYXQgZWZmZWN0aXZlbHkKLSAgICAgIHRoZSBidWZmZXIgcmF0ZSBpcyBsaW1pdGVkIHRvIDEgYnVmZmVyIHBlciB0aHJvdHRsZSBpbnRlcnZhbC4gVGhpcyBjYW4gYmUKLSAgICAgIHVzZWQgdG8gbGltaXQgdGhlIGZyYW1lcmF0ZSwgZm9yIGV4YW1wbGUuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgV2hlbiBhbiBlbGVtZW50IGlzIGNvbmZpZ3VyZWQgaW4gdGhyb3R0bGluZyBtb2RlICh0aGlzIGlzIHVzdWFsbHkgb25seQotICAgICAgaW1wbGVtZW50ZWQgb24gc2lua3MpIGl0IHNob3VsZCBwcm9kdWNlIFFvUyBldmVudHMgdXBzdHJlYW0gd2l0aCB0aGUgaml0dGVyCi0gICAgICBmaWVsZCBzZXQgdG8gdGhlIHRocm90dGxlIGludGVydmFsLiBUaGlzIHNob3VsZCBpbnN0cnVjdCB1cHN0cmVhbSBlbGVtZW50cyB0bwotICAgICAgc2tpcCBvciBkcm9wIHRoZSByZW1haW5pbmcgYnVmZmVycyBpbiB0aGUgY29uZmlndXJlZCB0aHJvdHRsZSBpbnRlcnZhbC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgcHJvcG9ydGlvbiBmaWVsZCBpcyBzZXQgdG8gdGhlIGRlc2lyZWQgc2xvd2Rvd24gbmVlZGVkIHRvIGdldCB0aGUKLSAgICAgIGRlc2lyZWQgdGhyb3R0bGUgaW50ZXJ2YWwuIEltcGxlbWVudGF0aW9ucyBjYW4gdXNlIHRoZSBRb1MgVGhyb3R0bGUgdHlwZSwKLSAgICAgIHRoZSBwcm9wb3J0aW9uIGFuZCB0aGUgaml0dGVyIG1lbWJlciB0byB0dW5lIHRoZWlyIGltcGxlbWVudGF0aW9ucy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgZGVmYXVsdCBzaW5rIGJhc2UgY2xhc3MsIGhhcyB0aGUgPHF1b3RlPnRocm90dGxlLXRpbWU8L3F1b3RlPgotICAgICAgcHJvcGVydHkgZm9yIHRoaXMgZmVhdHVyZS4gWW91IGNhbiB0ZXN0IHRoaXMgd2l0aDogCi0gICAgICA8Y29tbWFuZD5nc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgIQotICAgICAgICB4dmltYWdlc2luayB0aHJvdHRsZS10aW1lPTUwMDAwMDAwMDwvY29tbWFuZD4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLW1lc3NhZ2VzIj4KLSAgICA8dGl0bGU+UW9TIE1lc3NhZ2VzPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBRT1MgZXZlbnRzIHRoYXQgYXJlIHNlbnQgYmV0d2VlbiBlbGVtZW50cyBpbiB0aGUKLSAgICAgIHBpcGVsaW5lLCB0aGVyZSBhcmUgYWxzbyBRT1MgbWVzc2FnZXMgcG9zdGVkIG9uIHRoZSBwaXBlbGluZSBidXMgdG8KLSAgICAgIGluZm9ybSB0aGUgYXBwbGljYXRpb24gb2YgUW9TIGRlY2lzaW9ucy4gVGhlIFFPUyBtZXNzYWdlIGNvbnRhaW5zCi0gICAgICB0aGUgdGltZXN0YW1wcyBvZiB3aGVuIHNvbWV0aGluZyB3YXMgZHJvcHBlZCBhbG9uZyB3aXRoIHRoZSBhbW91bnQKLSAgICAgIG9mIGRyb3BwZWQgdnMgcHJvY2Vzc2VkIGl0ZW1zLiAgRWxlbWVudHMgbXVzdCBwb3N0IGEgUU9TCi0gICAgICBtZXNzYWdlIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnM6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBlbGVtZW50IGRyb3BwZWQgYSBidWZmZXIgYmVjYXVzZSBvZiBRb1MgcmVhc29ucy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQW4gZWxlbWVudCBjaGFuZ2VzIGl0cyBwcm9jZXNzaW5nIHN0cmF0ZWd5IGJlY2F1c2Ugb2YgUW9TIHJlYXNvbnMKLSAgICAgICAgICAocXVhbGl0eSkuIFRoaXMgY291bGQgaW5jbHVkZSBhIGRlY29kZXIgdGhhdCBkZWNpZGVzIHRvIGRyb3AgZXZlcnkKLSAgICAgICAgICBCIGZyYW1lIHRvIGluY3JlYXNlIGl0cyBwcm9jZXNzaW5nIHNwZWVkIG9yIGFuIGVmZmVjdCBlbGVtZW50Ci0gICAgICAgICAgc3dpdGNoaW5nIHRvIGEgbG93ZXIgcXVhbGl0eSBhbGdvcml0aG0uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gIDwvc2VjdDE+Ci0gIAotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtcmVxdWVzdC54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC1yZXF1ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVmOTg5Ny4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9hZHZhbmNlZC1yZXF1ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1hZHZhbmNlZC1yZXF1ZXN0Ij4KLSAgPHRpdGxlPlJlcXVlc3QgYW5kIFNvbWV0aW1lcyBwYWRzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgVW50aWwgbm93LCB3ZSd2ZSBvbmx5IGRlYWx0IHdpdGggcGFkcyB0aGF0IGFyZSBhbHdheXMgYXZhaWxhYmxlLiBIb3dldmVyLAotICAgIHRoZXJlJ3MgYWxzbyBwYWRzIHRoYXQgYXJlIG9ubHkgYmVpbmcgY3JlYXRlZCBpbiBzb21lIGNhc2VzLCBvciBvbmx5IGlmCi0gICAgdGhlIGFwcGxpY2F0aW9uIHJlcXVlc3RzIHRoZSBwYWQuIFRoZSBmaXJzdCBpcyBjYWxsZWQgYQotICAgIDxlbXBoYXNpcz5zb21ldGltZXM8L2VtcGhhc2lzPjsgdGhlIHNlY29uZCBpcyBjYWxsZWQgYQotICAgIDxlbXBoYXNpcz5yZXF1ZXN0PC9lbXBoYXNpcz4gcGFkLiBUaGUgYXZhaWxhYmlsaXR5IG9mIGEgcGFkIChhbHdheXMsCi0gICAgc29tZXRpbWVzIG9yIHJlcXVlc3QpIGNhbiBiZSBzZWVuIGluIGEgcGFkJ3MgdGVtcGxhdGUuIFRoaXMgY2hhcHRlciB3aWxsCi0gICAgZGlzY3VzcyB3aGVuIGVhY2ggb2YgdGhlIHR3byBpcyB1c2VmdWwsIGhvdyB0aGV5IGFyZSBjcmVhdGVkIGFuZCB3aGVuCi0gICAgdGhleSBzaG91bGQgYmUgZGlzcG9zZWQuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tcmVxcGFkLXNvbWV0aW1lcyIgeHJlZmxhYmVsPSJTb21ldGltZXMgcGFkcyI+Ci0gICAgPHRpdGxlPlNvbWV0aW1lcyBwYWRzPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEEgPHF1b3RlPnNvbWV0aW1lczwvcXVvdGU+IHBhZCBpcyBhIHBhZCB0aGF0IGlzIGNyZWF0ZWQgdW5kZXIgY2VydGFpbgotICAgICAgY29uZGl0aW9ucywgYnV0IG5vdCBpbiBhbGwgY2FzZXMuIFRoaXMgbW9zdGx5IGRlcGVuZHMgb24gc3RyZWFtIGNvbnRlbnQ6Ci0gICAgICBkZW11eGVycyB3aWxsIGdlbmVyYWxseSBwYXJzZSB0aGUgc3RyZWFtIGhlYWRlciwgZGVjaWRlIHdoYXQgZWxlbWVudGFyeQotICAgICAgKHZpZGVvLCBhdWRpbywgc3VidGl0bGUsIGV0Yy4pIHN0cmVhbXMgYXJlIGVtYmVkZGVkIGluc2lkZSB0aGUgc3lzdGVtCi0gICAgICBzdHJlYW0sIGFuZCB3aWxsIHRoZW4gY3JlYXRlIGEgc29tZXRpbWVzIHBhZCBmb3IgZWFjaCBvZiB0aG9zZSBlbGVtZW50YXJ5Ci0gICAgICBzdHJlYW1zLiBBdCBpdHMgb3duIGNob2ljZSwgaXQgY2FuIGFsc28gY3JlYXRlIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YKLSAgICAgIGVhY2ggb2YgdGhvc2UgcGVyIGVsZW1lbnQgaW5zdGFuY2UuIFRoZSBvbmx5IGxpbWl0YXRpb24gaXMgdGhhdCBlYWNoCi0gICAgICBuZXdseSBjcmVhdGVkIHBhZCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBuYW1lLiBTb21ldGltZXMgcGFkcyBhcmUgZGlzcG9zZWQKLSAgICAgIHdoZW4gdGhlIHN0cmVhbSBkYXRhIGlzIGRpc3Bvc2VkLCB0b28gKGkuZS4gd2hlbiBnb2luZyBmcm9tIFBBVVNFRCB0byB0aGUKLSAgICAgIFJFQURZIHN0YXRlKS4gWW91IHNob3VsZCA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gZGlzcG9zZSB0aGUgcGFkIG9uIEVPUywKLSAgICAgIGJlY2F1c2Ugc29tZW9uZSBtaWdodCByZS1hY3RpdmF0ZSB0aGUgcGlwZWxpbmUgYW5kIHNlZWsgYmFjayB0byBiZWZvcmUKLSAgICAgIHRoZSBlbmQtb2Ytc3RyZWFtIHBvaW50LiBUaGUgc3RyZWFtIHNob3VsZCBzdGlsbCBzdGF5IHZhbGlkIGFmdGVyIEVPUywgYXQKLSAgICAgIGxlYXN0IHVudGlsIHRoZSBzdHJlYW0gZGF0YSBpcyBkaXNwb3NlZC4gSW4gYW55IGNhc2UsIHRoZSBlbGVtZW50IGlzCi0gICAgICBhbHdheXMgdGhlIG93bmVyIG9mIHN1Y2ggYSBwYWQuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhlIGV4YW1wbGUgY29kZSBiZWxvdyB3aWxsIHBhcnNlIGEgdGV4dCBmaWxlLCB3aGVyZSB0aGUgZmlyc3QgbGluZSBpcwotICAgICAgYSBudW1iZXIgKG4pLiBUaGUgbmV4dCBsaW5lcyBhbGwgc3RhcnQgd2l0aCBhIG51bWJlciAoMCB0byBuLTEpLCB3aGljaAotICAgICAgaXMgdGhlIG51bWJlciBvZiB0aGUgc291cmNlIHBhZCBvdmVyIHdoaWNoIHRoZSBkYXRhIHNob3VsZCBiZSBzZW50LgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci0zCi0wOiBmb28KLTE6IGJhcgotMDogYm9vCi0yOiBieWUKLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgVGhlIGNvZGUgdG8gcGFyc2UgdGhpcyBmaWxlIGFuZCBjcmVhdGUgdGhlIGR5bmFtaWMgPHF1b3RlPnNvbWV0aW1lczwvcXVvdGU+Ci0gICAgICBwYWRzLCBsb29rcyBsaWtlIHRoaXM6Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE15RmlsdGVyIHsKLVsuLl0KLSAgZ2Jvb2xlYW4gZmlyc3RydW47Ci0gIEdMaXN0ICpzcmNwYWRsaXN0OwotfSBHc3RNeUZpbHRlcjsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKLSAgInNyY18ldSIsCi0gIEdTVF9QQURfU1JDLAotICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgR1NUX1NUQVRJQ19DQVBTICgiQU5ZIikKLSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKEdzdE15RmlsdGVyQ2xhc3MgKmtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotWy4uXQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotCWdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNyY19mYWN0b3J5KSk7Ci1bLi5dCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2luaXQgKEdzdE15RmlsdGVyICpmaWx0ZXIpCi17Ci1bLi5dCi0gIGZpbHRlci0+Zmlyc3RydW4gPSBUUlVFOwotICBmaWx0ZXItPnNyY3BhZGxpc3QgPSBOVUxMOwotfQotCi0vKgotICogR2V0IG9uZSBsaW5lIG9mIGRhdGEgLSB3aXRob3V0IG5ld2xpbmUuCi0gKi8KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfbXlfZmlsdGVyX2dldGxpbmUgKEdzdE15RmlsdGVyICpmaWx0ZXIpCi17Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ2ludCBuLCBudW07Ci0KLSAgLyogbWF4LiBsaW5lIGxlbmd0aCBpcyA1MTIgY2hhcmFjdGVycyAtIGZvciBzYWZldHkgKi8KLSAgZm9yIChuID0gMDsgbiA8IDUxMjsgbisrKSB7Ci0gICAgbnVtID0gZ3N0X2J5dGVzdHJlYW1fcGVla19ieXRlcyAoZmlsdGVyLT5icywgJmRhdGEsIG4gKyAxKTsKLSAgICBpZiAobnVtICE9IG4gKyAxKQotICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBuZXdsaW5lPyAqLwotICAgIGlmIChkYXRhW25dID09ICdcbicpIHsKLSAgICAgIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIG4gKyAxLCBOVUxMKTsKLQotICAgICAgZ3N0X2J5dGVzdHJlYW1fcGVla19ieXRlcyAoZmlsdGVyLT5icywgJmRhdGEsIG4pOwotICAgICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGRhdGEsIG4pOwotICAgICAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGJ1ZiwgbiwgJ1wwJywgMSk7Ci0gICAgICBnc3RfYnl0ZXN0cmVhbV9mbHVzaF9mYXN0IChmaWx0ZXItPmJzLCBuICsgMSk7Ci0KLSAgICAgIHJldHVybiBidWY7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2xvb3BmdW5jIChHc3RFbGVtZW50ICplbGVtZW50KQotewotICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAoZWxlbWVudCk7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RQYWQgKnBhZDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdpbnQgbnVtLCBuOwotCi0gIC8qIHBhcnNlIGhlYWRlciAqLwotICBpZiAoZmlsdGVyLT5maXJzdHJ1bikgewotICAgIGdjaGFyICpwYWRuYW1lOwotICAgIGd1aW50OCBpZDsKLQotICAgIGlmICghKGJ1ZiA9IGdzdF9teV9maWx0ZXJfZ2V0bGluZSAoZmlsdGVyKSkpIHsKLSAgICAgIGdzdF9lbGVtZW50X2Vycm9yIChlbGVtZW50LCBTVFJFQU0sIFJFQUQsIChOVUxMKSwKLQkJCSAoIlN0cmVhbSBjb250YWlucyBubyBoZWFkZXIiKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCAmaWQsIDEpOwotICAgIG51bSA9IGF0b2kgKGlkKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gICAgLyogZm9yIGVhY2ggb2YgdGhlIHN0cmVhbXMsIGNyZWF0ZSBhIHBhZCAqLwotICAgIGZvciAobiA9IDA7IG4gPCBudW07IG4rKykgewotICAgICAgcGFkbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNyY18ldSIsIG4pOwotICAgICAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKHNyY19mYWN0b3J5LCBwYWRuYW1lKTsKLSAgICAgIGdfZnJlZSAocGFkbmFtZSk7Ci0KLSAgICAgIC8qIGhlcmUsIHlvdSB3b3VsZCBzZXQgX2V2ZW50ICgpIGFuZCBfcXVlcnkgKCkgZnVuY3Rpb25zICovCi0KLSAgICAgIC8qIG5lZWQgdG8gYWN0aXZhdGUgdGhlIHBhZCBiZWZvcmUgYWRkaW5nICovCi0gICAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7Ci0KLSAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQgKGVsZW1lbnQsIHBhZCk7Ci0gICAgICBmaWx0ZXItPnNyY3BhZGxpc3QgPSBnX2xpc3RfYXBwZW5kIChmaWx0ZXItPnNyY3BhZGxpc3QsIHBhZCk7Ci0gICAgfQotICB9Ci0KLSAgLyogYW5kIG5vdywgc2ltcGx5IHBhcnNlIGVhY2ggbGluZSBhbmQgcHVzaCBvdmVyICovCi0gIGlmICghKGJ1ZiA9IGdzdF9teV9maWx0ZXJfZ2V0bGluZSAoZmlsdGVyKSkpIHsKLSAgICBHc3RFdmVudCAqZXZlbnQgPSBnc3RfZXZlbnRfbmV3IChHU1RfRVZFTlRfRU9TKTsKLSAgICBHTGlzdCAqcGFkbGlzdDsKLQotICAgIGZvciAocGFkbGlzdCA9IHNyY3BhZGxpc3Q7Ci0gICAgICAgICBwYWRsaXN0ICE9IE5VTEw7IHBhZGxpc3QgPSBnX2xpc3RfbmV4dCAocGFkbGlzdCkpIHsKLSAgICAgIHBhZCA9IEdTVF9QQUQgKHBhZGxpc3QtPmRhdGEpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9yZWYgKGV2ZW50KSk7Ci0gICAgfQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIC8qIHBhdXNlIHRoZSB0YXNrIGhlcmUgKi8KLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBwYXJzZSBzdHJlYW0gbnVtYmVyIGFuZCBnbyBiZXlvbmQgdGhlICc6JyBpbiB0aGUgZGF0YSAqLwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBudW0gPSBhdG9pIChtYXAuZGF0YVswXSk7Ci0gIGlmIChudW0gPj0gMCAmJiBudW0gPCBnX2xpc3RfbGVuZ3RoIChmaWx0ZXItPnNyY3BhZGxpc3QpKSB7Ci0gICAgcGFkID0gR1NUX1BBRCAoZ19saXN0X250aF9kYXRhIChmaWx0ZXItPnNyY3BhZGxpc3QsIG51bSk7Ci0KLSAgICAvKiBtYWdpYyBidWZmZXIgcGFyc2luZyBmb28gKi8KLSAgICBmb3IgKG4gPSAwOyBtYXAuZGF0YVtuXSAhPSAnOicgJiYKLSAgICAgICAgICAgICAgICBtYXAuZGF0YVtuXSAhPSAnXDAnOyBuKyspIDsKLSAgICBpZiAobWFwLmRhdGFbbl0gIT0gJ1wwJykgewotICAgICAgR3N0QnVmZmVyICpzdWI7Ci0KLSAgICAgIC8qIGNyZWF0ZSByZWdpb24gY29weSB0aGF0IHN0YXJ0cyByaWdodCBwYXN0IHRoZSBzcGFjZS4gVGhlIHJlYXNvbgotICAgICAgICogdGhhdCB3ZSBkb24ndCBqdXN0IGZvcndhcmQgdGhlIGRhdGEgcG9pbnRlciBpcyBiZWNhdXNlIHRoZQotICAgICAgICogcG9pbnRlciBpcyBubyBsb25nZXIgdGhlIHN0YXJ0IG9mIGFuIGFsbG9jYXRlZCBibG9jayBvZiBtZW1vcnksCi0gICAgICAgKiBidXQganVzdCBhIHBvaW50ZXIgdG8gYSBwb3NpdGlvbiBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiBpdC4KLSAgICAgICAqIFRoYXQgY2Fubm90IGJlIGZyZWVkIHVwb24gZGlzcG9zYWwsIHNvIHdlJ2QgZWl0aGVyIGNyYXNoIG9yIGhhdmUKLSAgICAgICAqIGEgbWVtbGVhay4gQ3JlYXRpbmcgYSByZWdpb24gY29weSBpcyBhIHNpbXBsZSB3YXkgdG8gc29sdmUgdGhhdC4gKi8KLSAgICAgIHN1YiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZiwgR1NUX0JVRkZFUl9DT1BZX0FMTCwKLSAgICAgICAgICBuICsgMSwgbWFwLnNpemUgLSBuIC0gMSk7Ci0gICAgICBnc3RfcGFkX3B1c2ggKHBhZCwgc3ViKTsKLSAgICB9Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLX0KLV1dPgotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBOb3RlIHRoYXQgd2UgdXNlIGEgbG90IG9mIGNoZWNrcyBldmVyeXdoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb250ZW50Ci0gICAgICBpbiB0aGUgZmlsZSBpcyB2YWxpZC4gVGhpcyBoYXMgdHdvIHB1cnBvc2VzOiBmaXJzdCwgdGhlIGZpbGUgY291bGQgYmUKLSAgICAgIGVycm9uZW91cywgaW4gd2hpY2ggY2FzZSB3ZSBwcmV2ZW50IGEgY3Jhc2guIFRoZSBzZWNvbmQgYW5kIG1vc3QgaW1wb3J0YW50Ci0gICAgICByZWFzb24gaXMgdGhhdCAtIGluIGV4dHJlbWUgY2FzZXMgLSB0aGUgZmlsZSBjb3VsZCBiZSB1c2VkIG1hbGljaW91c2x5IHRvCi0gICAgICBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3VyIGluIHRoZSBwbHVnaW4sIHdoaWNoIG1pZ2h0IGxlYWQgdG8gc2VjdXJpdHkKLSAgICAgIGlzc3Vlcy4gPGVtcGhhc2lzPkFsd2F5czwvZW1waGFzaXM+IGFzc3VtZSB0aGF0IHRoZSBmaWxlIGNvdWxkIGJlIHVzZWQgdG8KLSAgICAgIGRvIGJhZCB0aGluZ3MuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1yZXFwYWQtcmVxdWVzdCIgeHJlZmxhYmVsPSJSZXF1ZXN0IHBhZHMiPgotICAgIDx0aXRsZT5SZXF1ZXN0IHBhZHM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgPHF1b3RlPlJlcXVlc3Q8L3F1b3RlPiBwYWRzIGFyZSBzaW1pbGFyIHRvIHNvbWV0aW1lcyBwYWRzLCBleGNlcHQgdGhhdAotICAgICAgcmVxdWVzdCBhcmUgY3JlYXRlZCBvbiBkZW1hbmQgb2Ygc29tZXRoaW5nIG91dHNpZGUgb2YgdGhlIGVsZW1lbnQgcmF0aGVyCi0gICAgICB0aGFuIHNvbWV0aGluZyBpbnNpZGUgdGhlIGVsZW1lbnQuIFRoaXMgY29uY2VwdCBpcyBvZnRlbiB1c2VkIGluIG11eGVycywKLSAgICAgIHdoZXJlIC0gZm9yIGVhY2ggZWxlbWVudGFyeSBzdHJlYW0gdGhhdCBpcyB0byBiZSBwbGFjZWQgaW4gdGhlIG91dHB1dAotICAgICAgc3lzdGVtIHN0cmVhbSAtIG9uZSBzaW5rIHBhZCB3aWxsIGJlIHJlcXVlc3RlZC4gSXQgY2FuIGFsc28gYmUgdXNlZCBpbgotICAgICAgZWxlbWVudHMgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBpbnB1dCBvciBvdXRwdXRzIHBhZHMsIHN1Y2ggYXMgdGhlCi0gICAgICA8Y2xhc3NuYW1lPnRlZTwvY2xhc3NuYW1lPiAobXVsdGktb3V0cHV0KSBvcgotICAgICAgPGNsYXNzbmFtZT5pbnB1dC1zZWxlY3RvcjwvY2xhc3NuYW1lPiAobXVsdGktaW5wdXQpIGVsZW1lbnRzLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRvIGltcGxlbWVudCByZXF1ZXN0IHBhZHMsIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSBwYWR0ZW1wbGF0ZSB3aXRoIGEKLSAgICAgIEdTVF9QQURfUkVRVUVTVCBwcmVzZW5jZSBhbmQgaW1wbGVtZW50IHRoZQotICAgICAgPGZ1bmN0aW9uPnJlcXVlc3RfbmV3X3BhZDwvZnVuY3Rpb24+IHZpcnR1YWwgbWV0aG9kIGluCi0gICAgICA8Y2xhc3NuYW1lPkdzdEVsZW1lbnQ8L2NsYXNzbmFtZT4uCi0gICAgICBUbyBjbGVhbiB1cCwgeW91IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgdGhlCi0gICAgICA8ZnVuY3Rpb24+cmVsZWFzZV9wYWQ8L2Z1bmN0aW9uPiB2aXJ0dWFsIG1ldGhvZC4KLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi1zdGF0aWMgR3N0UGFkICoJZ3N0X215X2ZpbHRlcl9yZXF1ZXN0X25ld19wYWQJKEdzdEVsZW1lbnQgICAgICplbGVtZW50LAotCQkJCQkJIEdzdFBhZFRlbXBsYXRlICp0ZW1wbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RDYXBzICAqY2Fwcyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9teV9maWx0ZXJfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKmVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWQgKnBhZCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKAotICAic2lua18ldSIsCi0gIEdTVF9QQURfU0lOSywKLSAgR1NUX1BBRF9SRVFVRVNULAotICBHU1RfU1RBVElDX0NBUFMgKCJBTlkiKQotKTsKLQotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfY2xhc3NfaW5pdCAoR3N0TXlGaWx0ZXJDbGFzcyAqa2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci1bLi5dCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotCWdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNpbmtfZmFjdG9yeSkpOwotWy4uXQotICBlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPSBnc3RfbXlfZmlsdGVyX3JlcXVlc3RfbmV3X3BhZDsKLSAgZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPSBnc3RfbXlfZmlsdGVyX3JlbGVhc2VfcGFkOwotfQotCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9teV9maWx0ZXJfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICAgICAqZWxlbWVudCwKLQkJCSAgICAgICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwsCi0JCQkgICAgICAgY29uc3QgZ2NoYXIgICAgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0Q2FwcyAgKmNhcHMpCi17Ci0gIEdzdFBhZCAqcGFkOwotICBHc3RNeUZpbHRlcklucHV0Q29udGV4dCAqY29udGV4dDsKLQotICBjb250ZXh0ID0gZ19uZXcwIChHc3RNeUZpbHRlcklucHV0Q29udGV4dCwgMSk7Ci0gIHBhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBuYW1lKTsKLSAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChwYWQsIGNvbnRleHQpOwotCi0gIC8qIG5vcm1hbGx5LCB5b3Ugd291bGQgc2V0IF9jaGFpbiAoKSBhbmQgX2V2ZW50ICgpIGZ1bmN0aW9ucyBoZXJlICovCi0KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZWxlbWVudCwgcGFkKTsKLQotICByZXR1cm4gcGFkOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X215X2ZpbHRlcl9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZCAqcGFkKQotewotICBHc3RNeUZpbHRlcklucHV0Q29udGV4dCAqY29udGV4dDsKLQotICBjb250ZXh0ID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICBnX2ZyZWUgKGNvbnRleHQpOwotCi0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGVsZW1lbnQsIHBhZCk7Ci19Ci0KLV1dPgotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9hZHZhbmNlZC1zY2hlZHVsaW5nLnhtbCBiL2RvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjM5ZDYzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL2FkdmFuY2VkLXNjaGVkdWxpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQ1ICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLXNjaGVkdWxpbmciIHhyZWZsYWJlbD0iRGlmZmVyZW50IHNjaGVkdWxpbmcgbW9kZXMiPgotICA8dGl0bGU+RGlmZmVyZW50IHNjaGVkdWxpbmcgbW9kZXM8L3RpdGxlPgotICA8cGFyYT4KLSAgICBUaGUgc2NoZWR1bGluZyBtb2RlIG9mIGEgcGFkIGRlZmluZXMgaG93IGRhdGEgaXMgcmV0cmlldmVkIGZyb20gKHNvdXJjZSkKLSAgICBvciBnaXZlbiB0byAoc2luaykgcGFkcy4gJkdTdHJlYW1lcjsgY2FuIG9wZXJhdGUgaW4gdHdvIHNjaGVkdWxpbmcKLSAgICBtb2RlLCBjYWxsZWQgcHVzaC0gYW5kIHB1bGwtbW9kZS4gJkdTdHJlYW1lcjsgc3VwcG9ydHMgZWxlbWVudHMgd2l0aCBwYWRzCi0gICAgaW4gYW55IG9mIHRoZSBzY2hlZHVsaW5nIG1vZGVzIHdoZXJlIG5vdCBhbGwgcGFkcyBuZWVkIHRvIGJlIG9wZXJhdGluZwotICAgIGluIHRoZSBzYW1lIG1vZGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgU28gZmFyLCB3ZSBoYXZlIG9ubHkgZGlzY3Vzc2VkIDxmdW5jdGlvbj5fY2hhaW4gKCk8L2Z1bmN0aW9uPi1vcGVyYXRpbmcKLSAgICBlbGVtZW50cywgaS5lLiBlbGVtZW50cyB0aGF0IGhhdmUgYSBjaGFpbi1mdW5jdGlvbiBzZXQgb24gdGhlaXIgc2luayBwYWQKLSAgICBhbmQgcHVzaCBidWZmZXJzIG9uIHRoZWlyIHNvdXJjZSBwYWQocykuIFdlIGNhbGwgdGhpcyB0aGUgcHVzaC1tb2RlCi0gICAgYmVjYXVzZSBhIHBlZXIgZWxlbWVudCB3aWxsIHVzZSA8ZnVuY3Rpb24+Z3N0X3BhZF9wdXNoICgpPC9mdW5jdGlvbj4gb24KLSAgICBhIHNyY3BhZCwgd2hpY2ggd2lsbCBjYXVzZSBvdXIgPGZ1bmN0aW9uPl9jaGFpbiAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uCi0gICAgdG8gYmUgY2FsbGVkLCB3aGljaCBpbiB0dXJuIGNhdXNlcyBvdXIgZWxlbWVudCB0byBwdXNoIG91dCBhIGJ1ZmZlciBvbgotICAgIHRoZSBzb3VyY2UgcGFkLiBUaGUgaW5pdGlhdGl2ZSB0byBzdGFydCB0aGUgZGF0YWZsb3cgaGFwcGVucyBzb21ld2hlcmUKLSAgICB1cHN0cmVhbSB3aGVuIGl0IHB1c2hlcyBvdXQgYSBidWZmZXIgYW5kIGFsbCBkb3duc3RyZWFtIGVsZW1lbnRzIGdldAotICAgIHNjaGVkdWxlZCB3aGVuIHRoZWlyIDxmdW5jdGlvbj5fY2hhaW4gKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbnMgYXJlCi0gICAgY2FsbGVkIGluIHR1cm4uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgQmVmb3JlIHdlIGV4cGxhaW4gcHVsbC1tb2RlIHNjaGVkdWxpbmcsIGxldCdzIGZpcnN0IHVuZGVyc3RhbmQgaG93IHRoZQotICAgIGRpZmZlcmVudCBzY2hlZHVsaW5nIG1vZGVzIGFyZSBzZWxlY3RlZCBhbmQgYWN0aXZhdGVkIG9uIGEgcGFkLgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXNjaGVkdWxpbmctYWN0aXZhdGlvbiIKLSAgICAgIHhyZWZsYWJlbD0iVGhlIHBhZCBhY3RpdmF0aW9uIHN0YWdlIj4KLSAgICA8dGl0bGU+VGhlIHBhZCBhY3RpdmF0aW9uIHN0YWdlPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIER1cmluZyB0aGUgZWxlbWVudCBzdGF0ZSBjaGFuZ2Ugb2YgUkVBRFktPlBBVVNFRCwgdGhlIHBhZHMgb2YgYW4KLSAgICAgIGVsZW1lbnQgd2lsbCBiZSBhY3RpdmF0ZWQuIFRoaXMgaGFwcGVucyBmaXJzdCBvbiB0aGUgc291cmNlIHBhZHMgYW5kCi0gICAgICB0aGVuIG9uIHRoZSBzaW5rIHBhZHMgb2YgdGhlIGVsZW1lbnQuICZHU3RyZWFtZXI7IGNhbGxzIHRoZQotICAgICAgPGZ1bmN0aW9uPl9hY3RpdmF0ZSAoKTwvZnVuY3Rpb24+IG9mIGEgcGFkLiBCeSBkZWZhdWx0IHRoaXMgZnVuY3Rpb24KLSAgICAgIHdpbGwgYWN0aXZhdGUgdGhlIHBhZCBpbiBwdXNoLW1vZGUgYnkgY2FsbGluZwotICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoKTwvZnVuY3Rpb24+IHdpdGggdGhlIEdTVF9QQURfTU9ERV9QVVNICi0gICAgICBzY2hlZHVsaW5nIG1vZGUuCi0gICAgICBJdCBpcyBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgPGZ1bmN0aW9uPl9hY3RpdmF0ZSAoKTwvZnVuY3Rpb24+IG9mIGEgcGFkCi0gICAgICBhbmQgZGVjaWRlIG9uIGEgZGlmZmVyZW50IHNjaGVkdWxpbmcgbW9kZS4gWW91IGNhbiBrbm93IGluIHdoYXQKLSAgICAgIHNjaGVkdWxpbmcgbW9kZSBhIHBhZCBpcyBhY3RpdmF0ZWQgYnkgb3ZlcnJpZGluZyB0aGUKLSAgICAgIDxmdW5jdGlvbj5fYWN0aXZhdGVfbW9kZSAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgICZHU3RyZWFtZXI7IGFsbG93cyB0aGUgZGlmZmVyZW50IHBhZHMgb2YgYW4gZWxlbWVudCB0byBvcGVyYXRlIGluCi0gICAgICBkaWZmZXJlbnQgc2NoZWR1bGluZyBtb2Rlcy4gVGhpcyBhbGxvd3MgZm9yIG1hbnkgZGlmZmVyZW50IHBvc3NpYmxlCi0gICAgICB1c2UtY2FzZXMuIFdoYXQgZm9sbG93cyBpcyBhbiBvdmVydmlldyBvZiBzb21lIHR5cGljYWwgdXNlLWNhc2VzLgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJZiBhbGwgcGFkcyBvZiBhbiBlbGVtZW50IGFyZSBhY3RpdmF0ZWQgaW4gcHVzaC1tb2RlIHNjaGVkdWxpbmcsCi0gICAgICAgICAgdGhlIGVsZW1lbnQgYXMgYSB3aG9sZSBpcyBvcGVyYXRpbmcgaW4gcHVzaC1tb2RlLiAKLSAgICAgICAgICBGb3Igc291cmNlIGVsZW1lbnRzIHRoaXMgbWVhbnMgdGhhdCB0aGV5IHdpbGwgaGF2ZSB0byBzdGFydCBhCi0gICAgICAgICAgdGFzayB0aGF0IHB1c2hlcyBvdXQgYnVmZmVycyBvbiB0aGUgc291cmNlIHBhZCB0byB0aGUgZG93bnN0cmVhbQotICAgICAgICAgIGVsZW1lbnRzLgotICAgICAgICAgIERvd25zdHJlYW0gZWxlbWVudHMgd2lsbCBoYXZlIGRhdGEgcHVzaGVkIHRvIHRoZW0gYnkgdXBzdHJlYW0gZWxlbWVudHMKLSAgICAgICAgICB1c2luZyB0aGUgc2lua3BhZHMgPGZ1bmN0aW9uPl9jaGFpbiAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIHdoaWNoIHdpbGwKLSAgICAgICAgICBwdXNoIG91dCBidWZmZXJzIG9uIHRoZSBzb3VyY2UgcGFkcy4KLSAgICAgICAgICBQcmVyZXF1aXNpdGVzIGZvciB0aGlzIHNjaGVkdWxpbmcgbW9kZSBhcmUgdGhhdCBhIGNoYWluLWZ1bmN0aW9uIHdhcwotICAgICAgICAgIHNldCBmb3IgZWFjaCBzaW5rcGFkIHVzaW5nIDxmdW5jdGlvbj5nc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoKTwvZnVuY3Rpb24+Ci0gICAgICAgICAgYW5kIHRoYXQgYWxsIGRvd25zdHJlYW0gZWxlbWVudHMgb3BlcmF0ZSBpbiB0aGUgc2FtZSBtb2RlLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCBzaW5rcGFkcyBjYW4gYmUgdGhlIGRyaXZpbmcgZm9yY2UgYmVoaW5kIGEgcGlwZWxpbmUKLSAgICAgICAgICBieSBvcGVyYXRpbmcgaW4gcHVsbC1tb2RlLCB3aGlsZSB0aGUgc291cmNlcGFkcwotICAgICAgICAgIG9mIHRoZSBlbGVtZW50IHN0aWxsIG9wZXJhdGUgaW4gcHVzaC1tb2RlLiBJbiBvcmRlciB0byBiZSB0aGUKLSAgICAgICAgICBkcml2aW5nIGZvcmNlLCB0aG9zZSBwYWRzIHN0YXJ0IGEgPGNsYXNzbmFtZT5Hc3RUYXNrPC9jbGFzc25hbWU+Ci0gICAgICAgICAgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuIFRoaXMgdGFzayBpcyBhIHRocmVhZCwgd2hpY2gKLSAgICAgICAgICB3aWxsIGNhbGwgYSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGVsZW1lbnQuIFdoZW4gY2FsbGVkLCB0aGlzCi0gICAgICAgICAgZnVuY3Rpb24gd2lsbCBoYXZlIHJhbmRvbSBkYXRhIGFjY2VzcyAodGhyb3VnaAotICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX3B1bGxfcmFuZ2UgKCk8L2Z1bmN0aW9uPikgb3ZlciBhbGwgc2lua3BhZHMsIGFuZAotICAgICAgICAgIGNhbiBwdXNoIGRhdGEgb3ZlciB0aGUgc291cmNlcGFkcywgd2hpY2ggZWZmZWN0aXZlbHkgbWVhbnMgdGhhdAotICAgICAgICAgIHRoaXMgZWxlbWVudCBjb250cm9scyBkYXRhIGZsb3cgaW4gdGhlIHBpcGVsaW5lLiBQcmVyZXF1aXNpdGVzIGZvcgotICAgICAgICAgIHRoaXMgbW9kZSBhcmUgdGhhdCBhbGwgZG93bnN0cmVhbSBlbGVtZW50cyBjYW4gYWN0IGluIHB1c2gKLSAgICAgICAgICBtb2RlLCBhbmQgdGhhdCBhbGwgdXBzdHJlYW0gZWxlbWVudHMgb3BlcmF0ZSBpbiBwdWxsLW1vZGUgKHNlZSBiZWxvdykuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgU291cmNlIHBhZHMgY2FuIGJlIGFjdGl2YXRlZCBpbiBQVUxMIG1vZGUgYnkgYSBkb3duc3RyZWFtIGVsZW1lbnQKLSAgICAgICAgICB3aGVuIHRoZXkgcmV0dXJuIEdTVF9QQURfTU9ERV9QVUxMIGZyb20gdGhlIEdTVF9RVUVSWV9TQ0hFRFVMSU5HCi0gICAgICAgICAgcXVlcnkuIFByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgc2NoZWR1bGluZyBtb2RlIGFyZSB0aGF0IGEKLSAgICAgICAgICBnZXRyYW5nZS1mdW5jdGlvbiB3YXMgc2V0IGZvciB0aGUgc291cmNlIHBhZCB1c2luZwotICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoKTwvZnVuY3Rpb24+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBMYXN0bHksIGFsbCBwYWRzIGluIGFuIGVsZW1lbnQgY2FuIGJlIGFjdGl2YXRlZCBpbiBQVUxMLW1vZGUuCi0gICAgICAgICAgSG93ZXZlciwgY29udHJhcnkgdG8gdGhlIGFib3ZlLCB0aGlzIGRvZXMgbm90IG1lYW4gdGhhdCB0aGV5Ci0gICAgICAgICAgc3RhcnQgYSB0YXNrIG9uIHRoZWlyIG93bi4gUmF0aGVyLCBpdCBtZWFucyB0aGF0IHRoZXkgYXJlIHB1bGwKLSAgICAgICAgICBzbGF2ZSBmb3IgdGhlIGRvd25zdHJlYW0gZWxlbWVudCwgYW5kIGhhdmUgdG8gcHJvdmlkZSByYW5kb20gZGF0YQotICAgICAgICAgIGFjY2VzcyB0byBpdCBmcm9tIHRoZWlyIDxmdW5jdGlvbj5fZ2V0X3JhbmdlICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24uCi0gICAgICAgICAgUmVxdWlyZW1lbnRzIGFyZSB0aGF0IHRoZSBhIDxmdW5jdGlvbj5fZ2V0X3JhbmdlCi0gICAgICAgICAgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiB3YXMgc2V0IG9uIHRoaXMgcGFkIHVzaW5nIHRoZSBmdW5jdGlvbgotICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoKTwvZnVuY3Rpb24+LiBBbHNvLCBpZgotICAgICAgICAgIHRoZSBlbGVtZW50IGhhcyBhbnkgc2lua3BhZHMsIGFsbCB0aG9zZSBwYWRzIChhbmQgdGhlcmVieSB0aGVpcgotICAgICAgICAgIHBlZXJzKSBuZWVkIHRvIG9wZXJhdGUgaW4gUFVMTCBhY2Nlc3MgbW9kZSwgdG9vLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFdoZW4gYSBzaW5rIGVsZW1lbnQgaXMgYWN0aXZhdGVkIGluIFBVTEwgbW9kZSwgaXQgc2hvdWxkIHN0YXJ0IGEKLSAgICAgICAgICB0YXNrIHRoYXQgY2FsbHMgPGZ1bmN0aW9uPmdzdF9wYWRfcHVsbF9yYW5nZSAoKTwvZnVuY3Rpb24+IG9uIGl0cwotICAgICAgICAgIHNpbmtwYWQuIEl0IGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB0aGUgdXBzdHJlYW0gU0NIRURVTElORyBxdWVyeQotICAgICAgICAgIHJldHVybnMgc3VwcG9ydCBmb3IgdGhlIEdTVF9QQURfTU9ERV9QVUxMIHNjaGVkdWxpbmcgbW9kZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8cGFyYT4KLSAgICAgIEluIHRoZSBuZXh0IHR3byBzZWN0aW9ucywgd2Ugd2lsbCBnbyBjbG9zZXIgaW50byBwdWxsLW1vZGUgc2NoZWR1bGluZwotICAgICAgKGVsZW1lbnRzL3BhZHMgZHJpdmluZyB0aGUgcGlwZWxpbmUsIGFuZCBlbGVtZW50cy9wYWRzIHByb3ZpZGluZyByYW5kb20KLSAgICAgIGFjY2VzcyksIGFuZCBzb21lIHNwZWNpZmljIHVzZSBjYXNlcyB3aWxsIGJlIGdpdmVuLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tc2NoZWR1bGluZy1sb29wIiB4cmVmbGFiZWw9IlBhZHMgZHJpdmluZyB0aGUgcGlwZWxpbmUiPgotICAgIDx0aXRsZT5QYWRzIGRyaXZpbmcgdGhlIHBpcGVsaW5lPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFNpbmtwYWRzIG9wZXJhdGluZyBpbiBwdWxsLW1vZGUsIHdpdGggdGhlIHNvdXJjZXBhZHMgb3BlcmF0aW5nIGluCi0gICAgICBwdXNoLW1vZGUgKG9yIGl0IGhhcyBubyBzb3VyY2VwYWRzIHdoZW4gaXQgaXMgYSBzaW5rKSwgY2FuIHN0YXJ0IGEgdGFzawotICAgICAgdGhhdCB3aWxsIGRyaXZlIHRoZSBwaXBlbGluZSBkYXRhIGZsb3cuCi0gICAgICBXaXRoaW4gdGhpcyB0YXNrIGZ1bmN0aW9uLCB5b3UgaGF2ZSByYW5kb20gYWNjZXNzIG92ZXIgYWxsIG9mIHRoZSBzaW5rcGFkcywKLSAgICAgIGFuZCBwdXNoIGRhdGEgb3ZlciB0aGUgc291cmNlcGFkcy4KLSAgICAgIFRoaXMgY2FuIGNvbWUgaW4gdXNlZnVsIGZvciBzZXZlcmFsIGRpZmZlcmVudCBraW5kcyBvZiBlbGVtZW50czoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRGVtdXhlcnMsIHBhcnNlcnMgYW5kIGNlcnRhaW4ga2luZHMgb2YgZGVjb2RlcnMgd2hlcmUgZGF0YSBjb21lcwotICAgICAgICAgIGluIHVucGFyc2VkIChzdWNoIGFzIE1QRUctYXVkaW8gb3IgdmlkZW8gc3RyZWFtcyksIHNpbmNlIHRob3NlIHdpbGwKLSAgICAgICAgICBwcmVmZXIgYnl0ZS1leGFjdCAocmFuZG9tKSBhY2Nlc3MgZnJvbSB0aGVpciBpbnB1dC4gSWYgcG9zc2libGUsCi0gICAgICAgICAgaG93ZXZlciwgc3VjaCBlbGVtZW50cyBzaG91bGQgYmUgcHJlcGFyZWQgdG8gb3BlcmF0ZSBpbiBwdXNoLW1vZGUKLSAgICAgICAgICBtb2RlLCB0b28uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIENlcnRhaW4ga2luZCBvZiBhdWRpbyBvdXRwdXRzLCB3aGljaCByZXF1aXJlIGNvbnRyb2wgb3ZlciB0aGVpcgotICAgICAgICAgIGlucHV0IGRhdGEgZmxvdywgc3VjaCBhcyB0aGUgSmFjayBzb3VuZCBzZXJ2ZXIuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBGaXJzdCB5b3UgbmVlZCB0byBwZXJmb3JtIGEgU0NIRURVTElORyBxdWVyeSB0byBjaGVjayBpZiB0aGUgdXBzdHJlYW0KLSAgICAgIGVsZW1lbnQocykgc3VwcG9ydCBwdWxsLW1vZGUgc2NoZWR1bGluZy4gSWYgdGhhdCBpcyBwb3NzaWJsZSwgeW91Ci0gICAgICBjYW4gYWN0aXZhdGUgdGhlIHNpbmtwYWQgaW4gcHVsbC1tb2RlLiBJbnNpZGUgdGhlIGFjdGl2YXRlX21vZGUKLSAgICAgIGZ1bmN0aW9uIHlvdSBjYW4gdGhlbiBzdGFydCB0aGUgdGFzay4KLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgYSAtLT4KLSNpbmNsdWRlICJmaWx0ZXIuaCIKLSNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKLQotc3RhdGljIGdib29sZWFuCWdzdF9teV9maWx0ZXJfYWN0aXZhdGUJICAgIChHc3RQYWQgICAgICAqIHBhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE9iamVjdCAgICogcGFyZW50KTsKLXN0YXRpYyBnYm9vbGVhbglnc3RfbXlfZmlsdGVyX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAgICAgICogcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0T2JqZWN0ICAgKiBwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRNb2RlICAgIG1vZGUsCi0JCQkJCSAgICAgZ2Jvb2xlYW4gICAgICBhY3RpdmUpOwotc3RhdGljIHZvaWQJZ3N0X215X2ZpbHRlcl9sb29wCSAgICAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIpOwotCi1HX0RFRklORV9UWVBFIChHc3RNeUZpbHRlciwgZ3N0X215X2ZpbHRlciwgR1NUX1RZUEVfRUxFTUVOVCk7Ci08IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBhIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBjIC0tPgotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfaW5pdCAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIpCi17Ci08IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBjIC0tPgotWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgZCAtLT48IS0tCi0tLT48IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBkIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBlIC0tPgotICBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAoZmlsdGVyLSZndDtzaW5rcGFkLCBnc3RfbXlfZmlsdGVyX2FjdGl2YXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NpbmtwYWQsCi0gICAgICBnc3RfbXlfZmlsdGVyX2FjdGl2YXRlX21vZGUpOwotPCEtLSBleGFtcGxlLWVuZCB0YXNrLmMgZSAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgZiAtLT48IS0tCi0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChmaWx0ZXIpLCBmaWx0ZXItJmd0O3NpbmtwYWQpOwotCi0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChmaWx0ZXIpLCBmaWx0ZXItJmd0O3NyY3BhZCk7Ci0tLT48IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBmIC0tPgotWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiB0YXNrLmMgZyAtLT4KLX0KLTwhLS0gZXhhbXBsZS1lbmQgdGFzay5jIGcgLS0+Ci1bLi5dPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBoIC0tPjwhLS0KLSNpbmNsdWRlICJjYXBzLmZ1bmMiCi0tLT48IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBoIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBpIC0tPgotc3RhdGljIGdib29sZWFuCi1nc3RfbXlfZmlsdGVyX2FjdGl2YXRlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiBwdWxsX21vZGU7Ci0KLSAgLyogZmlyc3QgY2hlY2sgd2hhdCB1cHN0cmVhbSBzY2hlZHVsaW5nIGlzIHN1cHBvcnRlZCAqLwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAoKTsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSkpIHsKLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgICBnb3RvIGFjdGl2YXRlX3B1c2g7Ci0gIH0KLQotICAvKiBzZWUgaWYgcHVsbC1tb2RlIGlzIHN1cHBvcnRlZCAqLwotICBwdWxsX21vZGUgPSBnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzIChxdWVyeSwKLSAgICAgIEdTVF9QQURfTU9ERV9QVUxMLCBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFKTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgaWYgKCFwdWxsX21vZGUpCi0gICAgZ290byBhY3RpdmF0ZV9wdXNoOwotCi0gIC8qIG5vdyB3ZSBjYW4gYWN0aXZhdGUgaW4gcHVsbC1tb2RlLiBHU3RyZWFtZXIgd2lsbCBhbHNvCi0gICAqIGFjdGl2YXRlIHRoZSB1cHN0cmVhbSBwZWVyIGluIHB1bGwtbW9kZSAqLwotICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKTsKLQotYWN0aXZhdGVfcHVzaDoKLSAgewotICAgIC8qIHNvbWV0aGluZyBub3QgcmlnaHQsIHdlIGZhbGxiYWNrIHRvIHB1c2gtbW9kZSAqLwotICAgIHJldHVybiBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHBhZCwgR1NUX1BBRF9NT0RFX1BVU0gsIFRSVUUpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X2ZpbHRlcl9hY3RpdmF0ZV9wdWxsIChHc3RQYWQgICAgKiBwYWQsCi0JCQkgICAgIEdzdE9iamVjdCAqIHBhcmVudCwKLQkJCSAgICAgR3N0UGFkTW9kZSAgbW9kZSwKLQkJCSAgICAgZ2Jvb2xlYW4gICAgYWN0aXZlKQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVMTDoKLSAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgZmlsdGVyLT5vZmZzZXQgPSAwOwotICAgICAgICByZXMgPSBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHBhZCwKLSAgICAgICAgICAgIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9teV9maWx0ZXJfbG9vcCwgZmlsdGVyLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfc3RvcF90YXNrIChwYWQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHVua25vd24gc2NoZWR1bGluZyBtb2RlICovCi0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0gICAgPCEtLSBleGFtcGxlLWVuZCB0YXNrLmMgaSAtLT48L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgT25jZSBzdGFydGVkLCB5b3VyIHRhc2sgaGFzIGZ1bGwgY29udHJvbCBvdmVyIGlucHV0IGFuZCBvdXRwdXQuIFRoZQotICAgICAgbW9zdCBzaW1wbGUgY2FzZSBvZiBhIHRhc2sgZnVuY3Rpb24gaXMgb25lIHRoYXQgcmVhZHMgaW5wdXQgYW5kIHB1c2hlcwotICAgICAgdGhhdCBvdmVyIGl0cyBzb3VyY2UgcGFkLiBJdCdzIG5vdCBhbGwgdGhhdCB1c2VmdWwsIGJ1dCBwcm92aWRlcyBzb21lCi0gICAgICBtb3JlIGZsZXhpYmlsaXR5IHRoYW4gdGhlIG9sZCBwdXNoLW1vZGUgY2FzZSB0aGF0IHdlJ3ZlIGJlZW4gbG9va2luZwotICAgICAgYXQgc28gZmFyLgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBqIC0tPgotI2RlZmluZSBCTE9DS1NJWkUgMjA0OAotCi1zdGF0aWMgdm9pZAotZ3N0X215X2ZpbHRlcl9sb29wIChHc3RNeUZpbHRlciAqIGZpbHRlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGd1aW50NjQgbGVuOwotICBHc3RGb3JtYXQgZm10ID0gR1NUX0ZPUk1BVF9CWVRFUzsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotCi0gIGlmICghZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbiAoZmlsdGVyLSZndDtzaW5rcGFkLCBmbXQsICZhbXA7bGVuKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgImZhaWxlZCB0byBxdWVyeSBkdXJhdGlvbiwgcGF1c2luZyIpOwotICAgIGdvdG8gc3RvcDsKLSAgfQotCi0gICBpZiAoZmlsdGVyLSZndDtvZmZzZXQgPj0gbGVuKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAiYXQgZW5kIG9mIGlucHV0LCBzZW5kaW5nIEVPUywgcGF1c2luZyIpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZmlsdGVyLSZndDtzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICBnb3RvIHN0b3A7Ci0gIH0KLQotICAvKiBub3csIHJlYWQgQkxPQ0tTSVpFIGJ5dGVzIGZyb20gYnl0ZSBvZmZzZXQgZmlsdGVyLSZndDtvZmZzZXQgKi8KLSAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChmaWx0ZXItJmd0O3NpbmtwYWQsIGZpbHRlci0mZ3Q7b2Zmc2V0LAotICAgICAgQkxPQ0tTSVpFLCAmYW1wO2J1Zik7Ci0KLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInB1bGxfcmFuZ2UgZmFpbGVkOiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICBnb3RvIHN0b3A7Ci0gIH0KLQotICAvKiBub3cgcHVzaCBidWZmZXIgZG93bnN0cmVhbSAqLwotICByZXQgPSBnc3RfcGFkX3B1c2ggKGZpbHRlci0mZ3Q7c3JjcGFkLCBidWYpOwotCi0gIGJ1ZiA9IE5VTEw7IC8qIGdzdF9wYWRfcHVzaCgpIHRvb2sgb3duZXJzaGlwIG9mIGJ1ZmZlciAqLwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsICJwYWRfcHVzaCBmYWlsZWQ6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdvdG8gc3RvcDsKLSAgfQotCi0gIC8qIGV2ZXJ5dGhpbmcgaXMgZmluZSwgaW5jcmVhc2Ugb2Zmc2V0IGFuZCB3YWl0IGZvciB1cyB0byBiZSBjYWxsZWQgYWdhaW4gKi8KLSAgZmlsdGVyLSZndDtvZmZzZXQgKz0gQkxPQ0tTSVpFOwotICByZXR1cm47Ci0KLXN0b3A6Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInBhdXNpbmcgdGFzayIpOwotICBnc3RfcGFkX3BhdXNlX3Rhc2sgKGZpbHRlci0mZ3Q7c2lua3BhZCk7Ci19Ci08IS0tIGV4YW1wbGUtZW5kIHRhc2suYyBqIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBrIC0tPjwhLS0KLSNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgotICAgIC0tPjwhLS0gZXhhbXBsZS1lbmQgdGFzay5jIGsgLS0+PC9wcm9ncmFtbGlzdGluZz4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tc2NoZWR1bGluZy1yYW5kb214cyIgeHJlZmxhYmVsPSJQcm92aWRpbmcgcmFuZG9tIGFjY2VzcyI+Ci0gICAgPHRpdGxlPlByb3ZpZGluZyByYW5kb20gYWNjZXNzPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCB3ZSBoYXZlIHRhbGtlZCBhYm91dCBob3cgZWxlbWVudHMgKG9yIHBhZHMpCi0gICAgICB0aGF0IGFyZSBhY3RpdmF0ZWQgdG8gZHJpdmUgdGhlIHBpcGVsaW5lIHVzaW5nIHRoZWlyIG93biB0YXNrLCBtdXN0IHVzZQotICAgICAgcHVsbC1tb2RlIHNjaGVkdWxpbmcgb24gdGhlaXIgc2lua3BhZHMuIFRoaXMgbWVhbnMgdGhhdCBhbGwgcGFkcyBsaW5rZWQKLSAgICAgIHRvIHRob3NlIHBhZHMgbmVlZCB0byBiZSBhY3RpdmF0ZWQgaW4gcHVsbC1tb2RlLgotICAgICAgU291cmNlIHBhZHMgYWN0aXZhdGVkIGluIHB1bGwtbW9kZSBtdXN0IGltcGxlbWVudCBhCi0gICAgICA8ZnVuY3Rpb24+X2dldF9yYW5nZSAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIHNldCB1c2luZwotICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uICgpPC9mdW5jdGlvbj4sIGFuZAotICAgICAgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBwZWVyIHBhZCByZXF1ZXN0cyBzb21lIGRhdGEgd2l0aAotICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfcHVsbF9yYW5nZSAoKTwvZnVuY3Rpb24+LgotICAgICAgVGhlIGVsZW1lbnQgaXMgdGhlbiByZXNwb25zaWJsZSBmb3Igc2Vla2luZyB0byB0aGUgcmlnaHQgb2Zmc2V0IGFuZAotICAgICAgcHJvdmlkaW5nIHRoZSByZXF1ZXN0ZWQgZGF0YS4gU2V2ZXJhbCBlbGVtZW50cyBjYW4gaW1wbGVtZW50IHJhbmRvbQotICAgICAgYWNjZXNzOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBEYXRhIHNvdXJjZXMsIHN1Y2ggYXMgYSBmaWxlIHNvdXJjZSwgdGhhdCBjYW4gcHJvdmlkZSBkYXRhIGZyb20gYW55Ci0gICAgICAgICAgb2Zmc2V0IHdpdGggcmVhc29uYWJsZSBsb3cgbGF0ZW5jeS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRmlsdGVycyB0aGF0IHdvdWxkIGxpa2UgdG8gcHJvdmlkZSBhIHB1bGwtbW9kZSBzY2hlZHVsaW5nCi0gICAgICAgICAgb3ZlciB0aGUgd2hvbGUgcGlwZWxpbmUuIAotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBQYXJzZXJzIHdobyBjYW4gZWFzaWx5IHByb3ZpZGUgdGhpcyBieSBza2lwcGluZyBhIHNtYWxsIHBhcnQgb2YKLSAgICAgICAgICB0aGVpciBpbnB1dCBhbmQgYXJlIHRodXMgZXNzZW50aWFsbHkgImZvcndhcmRpbmciIGdldHJhbmdlCi0gICAgICAgICAgcmVxdWVzdHMgbGl0ZXJhbGx5IHdpdGhvdXQgYW55IG93biBwcm9jZXNzaW5nIGludm9sdmVkLiBFeGFtcGxlcwotICAgICAgICAgIGluY2x1ZGUgdGFnIHJlYWRlcnMgKGUuZy4gSUQzKSBvciBzaW5nbGUgb3V0cHV0IHBhcnNlcnMsIHN1Y2ggYXMKLSAgICAgICAgICBhIFdBVkUgcGFyc2VyLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDxwYXJhPgotICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHdpbGwgc2hvdyBob3cgYSA8ZnVuY3Rpb24+X2dldF9yYW5nZQotICAgICAgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gYSBzb3VyY2UgZWxlbWVudDoKLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiByYW5nZS5jIGEgLS0+Ci0jaW5jbHVkZSAiZmlsdGVyLmgiCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotCQlnc3RfbXlfZmlsdGVyX2dldF9yYW5nZQkoR3N0UGFkICAgICAqIHBhZCwKLQkJCQkJIEdzdE9iamVjdCAgKiBwYXJlbnQsCi0JCQkJCSBndWludDY0ICAgICAgb2Zmc2V0LAotCQkJCQkgZ3VpbnQgICAgICAgIGxlbmd0aCwKLQkJCQkJIEdzdEJ1ZmZlciAqKiBidWYpOwotCi1HX0RFRklORV9UWVBFIChHc3RNeUZpbHRlciwgZ3N0X215X2ZpbHRlciwgR1NUX1RZUEVfRUxFTUVOVCk7Ci08IS0tIGV4YW1wbGUtZW5kIHJhbmdlLmMgYSAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiByYW5nZS5jIGIgLS0+PCEtLQotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfY2xhc3NfaW5pdCAoZ3BvaW50ZXIga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIHN0YXRpYyBHc3RFbGVtZW50RGV0YWlscyBteV9maWx0ZXJfZGV0YWlscyA9IHsKLSAgICAiQW4gZXhhbXBsZSBwbHVnaW4iLAotICAgICJFeGFtcGxlL0ZpcnN0RXhhbXBsZSIsCi0gICAgIlNob3dzIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2YgYSBwbHVnaW4iLAotICAgICJ5b3VyIG5hbWUgPHlvdXIubmFtZUB5b3VyLmlzcD4iCi0gIH07Ci0gIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9Ci0gIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKLSAgICAic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJBTlkiKQotICApOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzIChlbGVtZW50X2NsYXNzLCAmbXlfZmlsdGVyX2RldGFpbHMpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzcmNfZmFjdG9yeSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X215X2ZpbHRlcl9jbGFzc19pbml0IChHc3RNeUZpbHRlckNsYXNzICoga2xhc3MpCi17Ci19Ci0tLT48IS0tIGV4YW1wbGUtYmVnaW4gcmFuZ2UuYyBiIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHJhbmdlLmMgYyAtLT4KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2luaXQgKEdzdE15RmlsdGVyICogZmlsdGVyKQotewotPCEtLSBleGFtcGxlLWVuZCB0YXNrLmMgYyAtLT48IS0tCi0gIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGZpbHRlcik7Ci0KLSAgZmlsdGVyLSZndDtzcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICgKLSAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJzcmMiKSwgInNyYyIpOwotLS0+Ci1bLi5dPCEtLSBleGFtcGxlLWJlZ2luIHRhc2suYyBkIC0tPjwhLS0KLS0tPjwhLS0gZXhhbXBsZS1lbmQgdGFzay5jIGQgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gdGFzay5jIGUgLS0+Ci0gIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NyY3BhZCwKLSAgICAgIGdzdF9teV9maWx0ZXJfZ2V0X3JhbmdlKTsKLTwhLS0gZXhhbXBsZS1lbmQgcmFuZ2UuYyBjIC0tPjwhLS0KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGZpbHRlciksIGZpbHRlci0mZ3Q7c3JjcGFkKTsKLS0tPgotWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiByYW5nZS5jIGQgLS0+Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXlfZmlsdGVyX2dldF9yYW5nZSAoR3N0UGFkICAgICAqIHBhZCwKLQkJCSBHc3RPYmplY3QgICogcGFyZW50LAotCQkJIGd1aW50NjQgICAgICBvZmZzZXQsCi0JCQkgZ3VpbnQgICAgICAgIGxlbmd0aCwKLQkJCSBHc3RCdWZmZXIgKiogYnVmKQotewotPCEtLSBleGFtcGxlLWVuZCByYW5nZS5jIGQgLS0+Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChwYXJlbnQpOwotCi0gIFsuLiBoZXJlLCB5b3Ugd291bGQgZmlsbCAqYnVmIC4uXQotPCEtLSBleGFtcGxlLWJlZ2luIHJhbmdlLmMgZSAtLT4KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotPCEtLSBleGFtcGxlLWVuZCByYW5nZS5jIGUgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gcmFuZ2UuYyBmIC0tPjwhLS0KLSNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgotICAgIC0tPjwhLS0gZXhhbXBsZS1lbmQgcmFuZ2UuYyBmIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBJbiBwcmFjdGljZSwgbWFueSBlbGVtZW50cyB0aGF0IGNvdWxkIHRoZW9yZXRpY2FsbHkgZG8gcmFuZG9tIGFjY2VzcywKLSAgICAgIG1heSBpbiBwcmFjdGljZSBvZnRlbiBiZSBhY3RpdmF0ZWQgaW4gcHVzaC1tb2RlIHNjaGVkdWxpbmcgYW55d2F5LAotICAgICAgc2luY2UgdGhlcmUgaXMgbm8gZG93bnN0cmVhbSBlbGVtZW50IGFibGUgdG8gc3RhcnQgaXRzIG93biB0YXNrLgotICAgICAgVGhlcmVmb3JlLCBpbiBwcmFjdGljZSwgdGhvc2UgZWxlbWVudHMgc2hvdWxkIGltcGxlbWVudCBib3RoIGEKLSAgICAgIDxmdW5jdGlvbj5fZ2V0X3JhbmdlICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24gYW5kIGEgPGZ1bmN0aW9uPl9jaGFpbgotICAgICAgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiAoZm9yIGZpbHRlcnMgYW5kIHBhcnNlcnMpIG9yIGEgPGZ1bmN0aW9uPl9nZXRfcmFuZ2UKLSAgICAgICgpPC9mdW5jdGlvbj4tZnVuY3Rpb24gYW5kIGJlIHByZXBhcmVkIHRvIHN0YXJ0IHRoZWlyIG93biB0YXNrIGJ5Ci0gICAgICBwcm92aWRpbmcgPGZ1bmN0aW9uPl9hY3RpdmF0ZV8qICgpPC9mdW5jdGlvbj4tZnVuY3Rpb25zIChmb3IKLSAgICAgIHNvdXJjZSBlbGVtZW50cykuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtdGFnZ2luZy54bWwgYi9kb2NzL3B3Zy9hZHZhbmNlZC10YWdnaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNTM5My4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9hZHZhbmNlZC10YWdnaW5nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1hZHZhbmNlZC10YWdnaW5nIj4KLSAgPHRpdGxlPlRhZ2dpbmcgKE1ldGFkYXRhIGFuZCBTdHJlYW1pbmZvKTwvdGl0bGU+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXRhZ2dpbmctb3ZlcnZpZXciIHhyZWZsYWJlbD0iT3ZlcnZpZXciPgotICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgotICA8cGFyYT4KLSAgICBUYWdzIGFyZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gc3RvcmVkIGluIGEgc3RyZWFtIHRoYXQgYXJlIG5vdCB0aGUgY29udGVudAotICAgIGl0c2VsZiwgYnV0IHRoZXkgcmF0aGVyIDxlbXBoYXNpcz5kZXNjcmliZTwvZW1waGFzaXM+IHRoZSBjb250ZW50LiBNb3N0Ci0gICAgbWVkaWEgY29udGFpbmVyIGZvcm1hdHMgc3VwcG9ydCB0YWdnaW5nIGluIG9uZSB3YXkgb3IgYW5vdGhlci4gT2dnIHVzZXMKLSAgICBWb3JiaXNDb21tZW50IGZvciB0aGlzLCBNUDMgdXNlcyBJRDMsIEFWSSBhbmQgV0FWIHVzZSBSSUZGJ3MgSU5GTyBsaXN0Ci0gICAgY2h1bmssIGV0Yy4gR1N0cmVhbWVyIHByb3ZpZGVzIGEgZ2VuZXJhbCB3YXkgZm9yIGVsZW1lbnRzIHRvIHJlYWQgdGFncyBmcm9tCi0gICAgdGhlIHN0cmVhbSBhbmQgZXhwb3NlIHRoaXMgdG8gdGhlIHVzZXIuIFRoZSB0YWdzIChhdCBsZWFzdCB0aGUgbWV0YWRhdGEpCi0gICAgd2lsbCBiZSBwYXJ0IG9mIHRoZSBzdHJlYW0gaW5zaWRlIHRoZSBwaXBlbGluZS4gVGhlIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMKLSAgICB0aGF0IHRyYW5zY29kaW5nIG9mIGZpbGVzIGZyb20gb25lIGZvcm1hdCB0byBhbm90aGVyIHdpbGwgYXV0b21hdGljYWxseQotICAgIHByZXNlcnZlIHRhZ3MsIGFzIGxvbmcgYXMgdGhlIGlucHV0IGFuZCBvdXRwdXQgZm9ybWF0IGVsZW1lbnRzIGJvdGggc3VwcG9ydAotICAgIHRhZ2dpbmcuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgVGFncyBhcmUgc2VwYXJhdGVkIGluIHR3byBjYXRlZ29yaWVzIGluIEdTdHJlYW1lciwgZXZlbiB0aG91Z2ggYXBwbGljYXRpb25zCi0gICAgd29uJ3Qgbm90aWNlIGFueXRoaW5nIG9mIHRoaXMuIFRoZSBmaXJzdCBhcmUgY2FsbGVkIDxlbXBoYXNpcz5tZXRhZGF0YTwvZW1waGFzaXM+LAotICAgIHRoZSBzZWNvbmQgYXJlIGNhbGxlZCA8ZW1waGFzaXM+c3RyZWFtaW5mbzwvZW1waGFzaXM+LiBNZXRhZGF0YSBhcmUgdGFncwotICAgIHRoYXQgZGVzY3JpYmUgdGhlIG5vbi10ZWNobmljYWwgcGFydHMgb2Ygc3RyZWFtIGNvbnRlbnQuIFRoZXkgY2FuIGJlCi0gICAgY2hhbmdlZCB3aXRob3V0IG5lZWRpbmcgdG8gcmUtZW5jb2RlIHRoZSBzdHJlYW0gY29tcGxldGVseS4gRXhhbXBsZXMgYXJlCi0gICAgPHF1b3RlPmF1dGhvcjwvcXVvdGU+LCA8cXVvdGU+dGl0bGU8L3F1b3RlPiBvciA8cXVvdGU+YWxidW08L3F1b3RlPi4gVGhlCi0gICAgY29udGFpbmVyIGZvcm1hdCBtaWdodCBzdGlsbCBuZWVkIHRvIGJlIHJlLXdyaXR0ZW4gZm9yIHRoZSB0YWdzIHRvIGZpdCBpbiwKLSAgICB0aG91Z2guIFN0cmVhbWluZm8sIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgdGFncyB0aGF0IGRlc2NyaWJlIHRoZSBzdHJlYW0KLSAgICBjb250ZW50cyB0ZWNobmljYWxseS4gVG8gY2hhbmdlIHRoZW0sIHRoZSBzdHJlYW0gbmVlZHMgdG8gYmUgcmUtZW5jb2RlZC4KLSAgICBFeGFtcGxlcyBhcmUgPHF1b3RlPmNvZGVjPC9xdW90ZT4gb3IgPHF1b3RlPmJpdHJhdGU8L3F1b3RlPi4gTm90ZSB0aGF0IHNvbWUKLSAgICBjb250YWluZXIgZm9ybWF0cyAobGlrZSBJRDMpIHN0b3JlIHZhcmlvdXMgc3RyZWFtaW5mbyB0YWdzIGFzIG1ldGFkYXRhIGluCi0gICAgdGhlIGZpbGUgY29udGFpbmVyLCB3aGljaCBtZWFucyB0aGF0IHRoZXkgY2FuIGJlIGNoYW5nZWQgc28gdGhhdCB0aGV5IGRvbid0Ci0gICAgbWF0Y2ggdGhlIGNvbnRlbnQgaW4gdGhlIGZpbGUgYW55IG1vcmUuIFN0aWxsLCB0aGV5IGFyZSBjYWxsZWQgbWV0YWRhdGEKLSAgICBiZWNhdXNlIDxlbXBoYXNpcz50ZWNobmljYWxseTwvZW1waGFzaXM+LCB0aGV5IGNhbiBiZSBjaGFuZ2VkIHdpdGhvdXQKLSAgICByZS1lbmNvZGluZyB0aGUgd2hvbGUgc3RyZWFtLCBldmVuIHRob3VnaCB0aGF0IG1ha2VzIHRoZW0gaW52YWxpZC4gRmlsZXMKLSAgICB3aXRoIHN1Y2ggbWV0YWRhdGEgdGFncyB3aWxsIGhhdmUgdGhlIHNhbWUgdGFnIHR3aWNlOiBvbmNlIGFzIG1ldGFkYXRhLAotICAgIG9uY2UgYXMgc3RyZWFtaW5mby4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBUaGVyZSBpcyBubyBzcGVjaWFsIG5hbWUgZm9yIHRhZyByZWFkaW5nIGVsZW1lbnRzIGluICZHU3RyZWFtZXI7LiBUaGVyZSBhcmUKLSAgICBzcGVjaWFsaXNlZCBlbGVtZW50cyAoZS5nLiBpZDNkZW11eCkgdGhhdCBkbyBub3RoaW5nIGJlc2lkZXMgdGFnIHJlYWRpbmcsCi0gICAgYnV0IGFueSAgJkdTdHJlYW1lcjsgZWxlbWVudCBtYXkgZXh0cmFjdCB0YWdzIHdoaWxlIHByb2Nlc3NpbmcgZGF0YSwgYW5kCi0gICAgbW9zdCBkZWNvZGVycywgZGVtdXhlcnMgYW5kIHBhcnNlcnMgZG8uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgQSB0YWcgd3JpdGVyIGlzIGNhbGxlZCA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICB1cmw9Ii4uLy4uL2dzdHJlYW1lci9odG1sL0dzdFRhZ1NldHRlci5odG1sIj48Y2xhc3NuYW1lPlRhZ1NldHRlcjwvY2xhc3NuYW1lPjwvdWxpbms+LgotICAgIEFuIGVsZW1lbnQgc3VwcG9ydGluZyBib3RoIGNhbiBiZSB1c2VkIGluIGEgdGFnIGVkaXRvciBmb3IgcXVpY2sgdGFnCi0gICAgY2hhbmdpbmcgKG5vdGU6IGluLXBsYWNlIHRhZyBlZGl0aW5nIGlzIHN0aWxsIHBvb3JseSBzdXBwb3J0ZWQgYXQgdGhlIHRpbWUKLSAgICBvZiB3cml0aW5nIGFuZCB1c3VhbGx5IHJlcXVpcmVzIHRhZyBleHRyYWN0aW9uL3N0cmlwcGluZyBhbmQgcmVtdXhpbmcgb2YKLSAgICB0aGUgc3RyZWFtIHdpdGggbmV3IHRhZ3MpLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXRhZ2dpbmctcmVhZCIgeHJlZmxhYmVsPSJSZWFkaW5nIFRhZ3MgZnJvbSBTdHJlYW1zIj4KLSAgICA8dGl0bGU+UmVhZGluZyBUYWdzIGZyb20gU3RyZWFtczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgYmFzaWMgb2JqZWN0IGZvciB0YWdzIGlzIGEgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Ii4uLy4uL2dzdHJlYW1lci9odG1sL0dzdFRhZ0xpc3QuaHRtbCI+PGNsYXNzbmFtZT5Hc3RUYWdMaXN0Ci0gICAgICA8L2NsYXNzbmFtZT48L3VsaW5rPi4gQW4gZWxlbWVudCB0aGF0IGlzIHJlYWRpbmcgdGFncyBmcm9tIGEgc3RyZWFtIHNob3VsZAotICAgICAgY3JlYXRlIGFuIGVtcHR5IHRhZ2xpc3QgYW5kIGZpbGwgdGhpcyB3aXRoIGluZGl2aWR1YWwgdGFncy4gRW1wdHkgdGFnCi0gICAgICBsaXN0cyBjYW4gYmUgY3JlYXRlZCB3aXRoIDxmdW5jdGlvbj5nc3RfdGFnX2xpc3RfbmV3ICgpPC9mdW5jdGlvbj4uIFRoZW4sCi0gICAgICB0aGUgZWxlbWVudCBjYW4gZmlsbCB0aGUgbGlzdCB1c2luZyA8ZnVuY3Rpb24+Z3N0X3RhZ19saXN0X2FkZCAoKQotICAgICAgPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPmdzdF90YWdfbGlzdF9hZGRfdmFsdWVzICgpPC9mdW5jdGlvbj4uCi0gICAgICBOb3RlIHRoYXQgZWxlbWVudHMgb2Z0ZW4gcmVhZCBtZXRhZGF0YSBhcyBzdHJpbmdzLCBidXQgdGhlCi0gICAgICB2YWx1ZXMgaW4gdGhlIHRhZ2xpc3QgbWlnaHQgbm90IG5lY2Vzc2FyaWx5IGJlIHN0cmluZ3MgLSB0aGV5IG5lZWQgdG8gYmUKLSAgICAgIG9mIHRoZSB0eXBlIHRoZSB0YWcgd2FzIHJlZ2lzdGVyZWQgYXMgKHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaAotICAgICAgcHJlZGVmaW5lZCB0YWcgc2hvdWxkIGNvbnRhaW4gdGhlIHR5cGUpLiBCZSBzdXJlIHRvIHVzZSBmdW5jdGlvbnMgbGlrZQotICAgICAgPGZ1bmN0aW9uPmdzdF92YWx1ZV90cmFuc2Zvcm0gKCk8L2Z1bmN0aW9uPgotICAgICAgdG8gbWFrZSBzdXJlIHRoYXQgeW91ciBkYXRhIGlzIG9mIHRoZSByaWdodCB0eXBlLgotICAgICAgQWZ0ZXIgZGF0YSByZWFkaW5nLCB5b3UgY2FuIHNlbmQgdGhlIHRhZ3MgZG93bnN0cmVhbSB3aXRoIHRoZSBUQUcgZXZlbnQuCi0gICAgICBXaGVuIHRoZSBUQUcgZXZlbnQgcmVhY2hlcyB0aGUgc2luaywgaXQgd2lsbCBwb3N0IHRoZSBUQUcgbWVzc2FnZSBvbgotICAgICAgdGhlIHBpcGVsaW5lJ3MgR3N0QnVzIGZvciB0aGUgYXBwbGljYXRpb24gdG8gcGljayB1cC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBXZSBjdXJyZW50bHkgcmVxdWlyZSB0aGUgY29yZSB0byBrbm93IHRoZSBHVHlwZSBvZiB0YWdzIGJlZm9yZSB0aGV5IGFyZQotICAgICAgYmVpbmcgdXNlZCwgc28gYWxsIHRhZ3MgbXVzdCBiZSByZWdpc3RlcmVkIGZpcnN0LiAgWW91IGNhbiBhZGQgbmV3IHRhZ3MKLSAgICAgIHRvIHRoZSBsaXN0IG9mIGtub3duIHRhZ3MgdXNpbmcgPGZ1bmN0aW9uPmdzdF90YWdfcmVnaXN0ZXIgKCk8L2Z1bmN0aW9uPi4KLSAgICAgIElmIHlvdSB0aGluayB0aGUgdGFnIHdpbGwgYmUgdXNlZnVsIGluIG1vcmUgY2FzZXMgdGhhbiBqdXN0IHlvdXIgb3duCi0gICAgICBlbGVtZW50LCBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byBhZGQgaXQgdG8gPGZpbGVuYW1lPmdzdHRhZy5jPC9maWxlbmFtZT4KLSAgICAgIGluc3RlYWQuIFRoYXQncyB1cCB0byB5b3UgdG8gZGVjaWRlLiBJZiB5b3Ugd2FudCB0byBkbyBpdCBpbiB5b3VyIG93bgotICAgICAgZWxlbWVudCwgaXQncyBlYXNpZXN0IHRvIHJlZ2lzdGVyIHRoZSB0YWcgaW4gb25lIG9mIHlvdXIgY2xhc3MgaW5pdAotICAgICAgZnVuY3Rpb25zLCBwcmVmZXJhYmx5IDxmdW5jdGlvbj5fY2xhc3NfaW5pdCAoKTwvZnVuY3Rpb24+LgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKEdzdE15RmlsdGVyQ2xhc3MgKmtsYXNzKQotewotWy4uXQotICBnc3RfdGFnX3JlZ2lzdGVyICgibXlfdGFnX25hbWUiLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLQkJICAgIEdfVFlQRV9TVFJJTkcsCi0JCSAgICBfKCJteSBvd24gdGFnIiksCi0JCSAgICBfKCJhIHRhZyB0aGF0IGlzIHNwZWNpZmljIHRvIG15IG93biBlbGVtZW50IiksCi0JCSAgICBOVUxMKTsKLVsuLl0KLX0KLV1dPgotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXRhZ2dpbmctd3JpdGUiIHhyZWZsYWJlbD0iV3JpdGluZyBUYWdzIHRvIFN0cmVhbXMiPgotICAgIDx0aXRsZT5Xcml0aW5nIFRhZ3MgdG8gU3RyZWFtczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUYWcgd3JpdGVycyBhcmUgdGhlIG9wcG9zaXRlIG9mIHRhZyByZWFkZXJzLiBUYWcgd3JpdGVycyBvbmx5IHRha2UKLSAgICAgIG1ldGFkYXRhIHRhZ3MgaW50byBhY2NvdW50LCBzaW5jZSB0aGF0J3MgdGhlIG9ubHkgdHlwZSBvZiB0YWdzIHRoYXQgaGF2ZQotICAgICAgdG8gYmUgd3JpdHRlbiBpbnRvIGEgc3RyZWFtLiBUYWcgd3JpdGVycyBjYW4gcmVjZWl2ZSB0YWdzIGluIHRocmVlIHdheXM6Ci0gICAgICBpbnRlcm5hbCwgYXBwbGljYXRpb24gYW5kIHBpcGVsaW5lLiBJbnRlcm5hbCB0YWdzIGFyZSB0YWdzIHJlYWQgYnkgdGhlCi0gICAgICBlbGVtZW50IGl0c2VsZiwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdGFnIHdyaXRlciBpcyAtIGluIHRoYXQgY2FzZSAtIGEgdGFnCi0gICAgICByZWFkZXIsIHRvby4gQXBwbGljYXRpb24gdGFncyBhcmUgdGFncyBwcm92aWRlZCB0byB0aGUgZWxlbWVudCB2aWEgdGhlCi0gICAgICBUYWdTZXR0ZXIgaW50ZXJmYWNlICh3aGljaCBpcyBqdXN0IGEgbGF5ZXIpLiBQaXBlbGluZSB0YWdzIGFyZSB0YWdzCi0gICAgICBwcm92aWRlZCB0byB0aGUgZWxlbWVudCBmcm9tIHdpdGhpbiB0aGUgcGlwZWxpbmUuIFRoZSBlbGVtZW50IHJlY2VpdmVzCi0gICAgICBzdWNoIHRhZ3MgdmlhIHRoZSA8c3ltYm9sPkdTVF9FVkVOVF9UQUc8L3N5bWJvbD4gZXZlbnQsIHdoaWNoIG1lYW5zCi0gICAgICB0aGF0IHRhZ3Mgd3JpdGVycyBzaG91bGQgaW1wbGVtZW50IGFuIGV2ZW50IGhhbmRsZXIuIFRoZSB0YWcgd3JpdGVyIGlzCi0gICAgICByZXNwb25zaWJsZSBmb3IgY29tYmluaW5nIGFsbCB0aGVzZSB0aHJlZSBpbnRvIG9uZSBsaXN0IGFuZCB3cml0aW5nIHRoZW0KLSAgICAgIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBleGFtcGxlIGJlbG93IHdpbGwgcmVjZWl2ZSB0YWdzIGZyb20gYm90aCBhcHBsaWNhdGlvbiBhbmQgcGlwZWxpbmUsCi0gICAgICBjb21iaW5lIHRoZW0gYW5kIHdyaXRlIHRoZW0gdG8gdGhlIG91dHB1dCBzdHJlYW0uIEl0IGltcGxlbWVudHMgdGhlIHRhZwotICAgICAgc2V0dGVyIHNvIGFwcGxpY2F0aW9ucyBjYW4gc2V0IHRhZ3MsIGFuZCByZXRyaWV2ZXMgcGlwZWxpbmUgdGFncyBmcm9tCi0gICAgICBpbmNvbWluZyBldmVudHMuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgV2FybmluZywgdGhpcyBleGFtcGxlIGlzIG91dGRhdGVkIGFuZCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgMS4wIHZlcnNpb24KLSAgICAgIG9mICZHU3RyZWFtZXI7IGFueW1vcmUuCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotR1R5cGUKLWdzdF9teV9maWx0ZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci1bLi5dCi0gICAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIHRhZ19zZXR0ZXJfaW5mbyA9IHsKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgTlVMTAotICAgIH07Ci1bLi5dCi0gICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljIChteV9maWx0ZXJfdHlwZSwKLQkJCQkgR1NUX1RZUEVfVEFHX1NFVFRFUiwKLQkJCQkgJnRhZ19zZXR0ZXJfaW5mbyk7Ci1bLi5dCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2luaXQgKEdzdE15RmlsdGVyICpmaWx0ZXIpCi17Ci1bLi5dCi19Ci0KLS8qCi0gKiBXcml0ZSBvbmUgdGFnLgotICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX3dyaXRlX3RhZyAoY29uc3QgR3N0VGFnTGlzdCAqdGFnbGlzdCwKLQkJCSBjb25zdCBnY2hhciAgICAgICp0YWduYW1lLAotCQkJIGdwb2ludGVyICAgICAgICAgIGRhdGEpCi17Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChkYXRhKTsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGd1aW50IG51bV92YWx1ZXMgPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChsaXN0LCB0YWdfbmFtZSksIG47Ci0gIGNvbnN0IEdWYWx1ZSAqZnJvbTsKLSAgR1ZhbHVlIHRvID0geyAwIH07Ci0KLSAgZ192YWx1ZV9pbml0ICgmdG8sIEdfVFlQRV9TVFJJTkcpOwotCi0gIGZvciAobiA9IDA7IG4gPCBudW1fdmFsdWVzOyBuKyspIHsKLSAgICBndWludDggKiBkYXRhOwotICAgIGdzaXplIHNpemU7Ci0KLSAgICBmcm9tID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAodGFnbGlzdCwgdGFnbmFtZSwgbik7Ci0gICAgZ192YWx1ZV90cmFuc2Zvcm0gKGZyb20sICZ0byk7Ci0KLSAgICBkYXRhID0gZ19zdHJkdXBfcHJpbnRmICgiJXM6JXMiLCB0YWduYW1lLAotCQlnX3ZhbHVlX2dldF9zdHJpbmcgKCZ0bykpOwotICAgIHNpemUgPSBzdHJsZW4gKGRhdGEpOwotCi0gICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZGF0YSwgc2l6ZSk7Ci0gICAgZ3N0X3BhZF9wdXNoIChmaWx0ZXItPnNyY3BhZCwgYnVmKTsKLSAgfQotCi0gIGdfdmFsdWVfdW5zZXQgKCZ0byk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX3Rhc2tfZnVuYyAoR3N0RWxlbWVudCAqZWxlbWVudCkKLXsKLSAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKGVsZW1lbnQpOwotICBHc3RUYWdTZXR0ZXIgKnRhZ3NldHRlciA9IEdTVF9UQUdfU0VUVEVSIChlbGVtZW50KTsKLSAgR3N0RGF0YSAqZGF0YTsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnYm9vbGVhbiBlb3MgPSBGQUxTRTsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXcgKCk7Ci0KLSAgd2hpbGUgKCFlb3MpIHsKLSAgICBkYXRhID0gZ3N0X3BhZF9wdWxsIChmaWx0ZXItPnNpbmtwYWQpOwotCi0gICAgLyogV2UncmUgbm90IHZlcnkgbXVjaCBpbnRlcmVzdGVkIGluIGRhdGEgcmlnaHQgbm93ICovCi0gICAgaWYgKEdTVF9JU19CVUZGRVIgKGRhdGEpKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoR1NUX0JVRkZFUiAoZGF0YSkpOwotICAgIGV2ZW50ID0gR1NUX0VWRU5UIChkYXRhKTsKLQotICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgICAgY2FzZSBHU1RfRVZFTlRfVEFHOgotICAgICAgICBnc3RfdGFnX2xpc3RfaW5zZXJ0ICh0YWdsaXN0LCBnc3RfZXZlbnRfdGFnX2dldF9saXN0IChldmVudCksCi0JCQkgICAgIEdTVF9UQUdfTUVSR0VfUFJFUEVORCk7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgICAgZW9zID0gVFJVRTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChmaWx0ZXItPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLyogbWVyZ2UgdGFncyB3aXRoIHRoZSBvbmVzIHJldHJpZXZlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiAqLwotICBpZiAoKGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCAodGFnc2V0dGVyKSkgewotICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKHRhZ2xpc3QsCi0JCQkgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0ICh0YWdzZXR0ZXIpLAotCQkJIGdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZSAodGFnc2V0dGVyKSk7Ci0gIH0KLQotICAvKiB3cml0ZSB0YWdzICovCi0gIGdzdF90YWdfbGlzdF9mb3JlYWNoICh0YWdsaXN0LCBnc3RfbXlfZmlsdGVyX3dyaXRlX3RhZywgZmlsdGVyKTsKLQotICAvKiBzaWduYWwgRU9TICovCi0gIGdzdF9wYWRfcHVzaCAoZmlsdGVyLT5zcmNwYWQsIGdzdF9ldmVudF9uZXcgKEdTVF9FVkVOVF9FT1MpKTsKLX0KLV1dPgotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBOb3RlIHRoYXQgbm9ybWFsbHksIGVsZW1lbnRzIHdvdWxkIG5vdCByZWFkIHRoZSBmdWxsIHN0cmVhbSBiZWZvcmUKLSAgICAgIHByb2Nlc3NpbmcgdGFncy4gUmF0aGVyLCB0aGV5IHdvdWxkIHJlYWQgZnJvbSBlYWNoIHNpbmtwYWQgdW50aWwgdGhleSd2ZQotICAgICAgcmVjZWl2ZWQgZGF0YSAoc2luY2UgdGFncyB1c3VhbGx5IGNvbWUgaW4gYmVmb3JlIHRoZSBmaXJzdCBkYXRhIGJ1ZmZlcikKLSAgICAgIGFuZCBwcm9jZXNzIHRoYXQuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sIGIvZG9jcy9wd2cvYWR2YW5jZWQtdHlwZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjFkMTQ5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL2FkdmFuY2VkLXR5cGVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MzEgKzAsMCBAQAotPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgotCi08Y2hhcHRlciBpZD0iY2hhcHRlci1idWlsZGluZy10eXBlcyI+Ci0gIDx0aXRsZT5UeXBlcyBhbmQgUHJvcGVydGllczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIFRoZXJlIGlzIGEgdmVyeSBsYXJnZSBzZXQgb2YgcG9zc2libGUgdHlwZXMgdGhhdCBtYXkgYmUgdXNlZCB0byBwYXNzIGRhdGEKLSAgICBiZXR3ZWVuIGVsZW1lbnRzLiBJbmRlZWQsIGVhY2ggbmV3IGVsZW1lbnQgdGhhdCBpcyBkZWZpbmVkIG1heSB1c2UgYSBuZXcKLSAgICBkYXRhIGZvcm1hdCAodGhvdWdoIHVubGVzcyBhdCBsZWFzdCBvbmUgb3RoZXIgZWxlbWVudCByZWNvZ25pc2VzIHRoYXQKLSAgICBmb3JtYXQsIGl0IHdpbGwgYmUgbW9zdCBsaWtlbHkgYmUgdXNlbGVzcyBzaW5jZSBub3RoaW5nIHdpbGwgYmUgYWJsZSB0bwotICAgIGxpbmsgd2l0aCBpdCkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgSW4gb3JkZXIgZm9yIHR5cGVzIHRvIGJlIHVzZWZ1bCwgYW5kIGZvciBzeXN0ZW1zIGxpa2UgYXV0b3BsdWdnZXJzIHRvCi0gICAgd29yaywgaXQgaXMgbmVjZXNzYXJ5IHRoYXQgYWxsIGVsZW1lbnRzIGFncmVlIG9uIHRoZSB0eXBlIGRlZmluaXRpb25zLAotICAgIGFuZCB3aGljaCBwcm9wZXJ0aWVzIGFyZSByZXF1aXJlZCBmb3IgZWFjaCB0eXBlLiBUaGUgJkdTdHJlYW1lcjsgZnJhbWV3b3JrCi0gICAgaXRzZWxmIHNpbXBseSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkZWZpbmUgdHlwZXMgYW5kIHBhcmFtZXRlcnMsIGJ1dAotICAgIGRvZXMgbm90IGZpeCB0aGUgbWVhbmluZyBvZiB0eXBlcyBhbmQgcGFyYW1ldGVycywgYW5kIGRvZXMgbm90IGVuZm9yY2UKLSAgICBzdGFuZGFyZHMgb24gdGhlIGNyZWF0aW9uIG9mIG5ldyB0eXBlcy4gVGhpcyBpcyBhIG1hdHRlciBmb3IgYSBwb2xpY3kgdG8KLSAgICBkZWNpZGUsIG5vdCB0ZWNobmljYWwgc3lzdGVtcyB0byBlbmZvcmNlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgIEZvciBub3csIHRoZSBwb2xpY3kgaXMgc2ltcGxlOgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIERvIG5vdCBjcmVhdGUgYSBuZXcgdHlwZSBpZiB5b3UgY291bGQgdXNlIG9uZSB3aGljaCBhbHJlYWR5IGV4aXN0cy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgY3JlYXRpbmcgYSBuZXcgdHlwZSwgZGlzY3VzcyBpdCBmaXJzdCB3aXRoIHRoZSBvdGhlciAmR1N0cmVhbWVyOwotICAgICAgICAgIGRldmVsb3BlcnMsIG9uIGF0IGxlYXN0IG9uZSBvZjogSVJDLCBtYWlsaW5nIGxpc3RzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUcnkgdG8gZW5zdXJlIHRoYXQgdGhlIG5hbWUgZm9yIGEgbmV3IGZvcm1hdCBpcyBhcyB1bmxpa2VseSB0bwotICAgICAgICAgIGNvbmZsaWN0IHdpdGggYW55dGhpbmcgZWxzZSBjcmVhdGVkIGFscmVhZHksIGFuZCBpcyBub3QgYSBtb3JlCi0gICAgICAgICAgZ2VuZXJhbGlzZWQgbmFtZSB0aGFuIGl0IHNob3VsZCBiZS4gRm9yIGV4YW1wbGU6ICJhdWRpby9jb21wcmVzc2VkIgotICAgICAgICAgIHdvdWxkIGJlIHRvbyBnZW5lcmFsaXNlZCBhIG5hbWUgdG8gcmVwcmVzZW50IGF1ZGlvIGRhdGEgY29tcHJlc3NlZAotICAgICAgICAgIHdpdGggYW4gbXAzIGNvZGVjLiBJbnN0ZWFkICJhdWRpby9tcDMiIG1pZ2h0IGJlIGFuIGFwcHJvcHJpYXRlIG5hbWUsCi0gICAgICAgICAgb3IgImF1ZGlvL2NvbXByZXNzZWQiIGNvdWxkIGV4aXN0IGFuZCBoYXZlIGEgcHJvcGVydHkgaW5kaWNhdGluZyB0aGUKLSAgICAgICAgICB0eXBlIG9mIGNvbXByZXNzaW9uIHVzZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEVuc3VyZSB0aGF0LCB3aGVuIHlvdSBkbyBjcmVhdGUgYSBuZXcgdHlwZSwgeW91IHNwZWNpZnkgaXQgY2xlYXJseSwKLSAgICAgICAgICBhbmQgZ2V0IGl0IGFkZGVkIHRvIHRoZSBsaXN0IG9mIGtub3duIHR5cGVzIHNvIHRoYXQgb3RoZXIgZGV2ZWxvcGVycwotICAgICAgICAgIGNhbiB1c2UgdGhlIHR5cGUgY29ycmVjdGx5IHdoZW4gd3JpdGluZyB0aGVpciBlbGVtZW50cy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9wYXJhPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXR5cGVzLXRlc3QiIHhyZWZsYWJlbD0iQnVpbGRpbmcgYSBTaW1wbGUgRm9ybWF0IGZvciBUZXN0aW5nIj4KLSAgICA8dGl0bGU+QnVpbGRpbmcgYSBTaW1wbGUgRm9ybWF0IGZvciBUZXN0aW5nPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIElmIHlvdSBuZWVkIGEgbmV3IGZvcm1hdCB0aGF0IGhhcyBub3QgeWV0IGJlZW4gZGVmaW5lZCBpbiBvdXIgPHhyZWYKLSAgICAgIGxpbmtlbmQ9InNlY3Rpb24tdHlwZXMtZGVmaW5pdGlvbnMiLz4sIHlvdSB3aWxsIHdhbnQgdG8gaGF2ZSBzb21lIGdlbmVyYWwKLSAgICAgIGd1aWRlbGluZXMgb24gbWVkaWEgdHlwZSBuYW1pbmcsIHByb3BlcnRpZXMgYW5kIHN1Y2guIEEgbWVkaWEgdHlwZSB3b3VsZAotICAgICAgaWRlYWxseSBiZSBlcXVpdmFsZW50IHRvIHRoZSBNaW1lLXR5cGUgZGVmaW5lZCBieSBJQU5BOyBlbHNlLCBpdCBzaG91bGQKLSAgICAgIGJlIGluIHRoZSBmb3JtIHR5cGUveC1uYW1lLCB3aGVyZSB0eXBlIGlzIHRoZSBzb3J0IG9mIGRhdGEgdGhpcyBtZWRpYSB0eXBlCi0gICAgICBoYW5kbGVzIChhdWRpbywgdmlkZW8sIC4uLikgYW5kIG5hbWUgc2hvdWxkIGJlIHNvbWV0aGluZyBzcGVjaWZpYyBmb3IKLSAgICAgIHRoaXMgc3BlY2lmaWMgdHlwZS4gIEF1ZGlvIGFuZCB2aWRlbyBtZWRpYSB0eXBlcyBzaG91bGQgdHJ5IHRvIHN1cHBvcnQgdGhlCi0gICAgICBnZW5lcmFsIGF1ZGlvL3ZpZGVvIHByb3BlcnRpZXMgKHNlZSB0aGUgbGlzdCksIGFuZCBjYW4gdXNlIHRoZWlyIG93bgotICAgICAgcHJvcGVydGllcywgdG9vLiBUbyBnZXQgYW4gaWRlYSBvZiB3aGF0IHByb3BlcnRpZXMgd2UgdGhpbmsgYXJlIHVzZWZ1bCwKLSAgICAgIHNlZSAoYWdhaW4pIHRoZSBsaXN0LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRha2UgeW91ciB0aW1lIHRvIGZpbmQgdGhlIHJpZ2h0IHNldCBvZiBwcm9wZXJ0aWVzIGZvciB5b3VyIHR5cGUuIFRoZXJlCi0gICAgICBpcyBubyByZWFzb24gdG8gaHVycnkuIEFsc28sIGV4cGVyaW1lbnRpbmcgd2l0aCB0aGlzIGlzIGdlbmVyYWxseSBhIGdvb2QKLSAgICAgIGlkZWEuIEV4cGVyaWVuY2UgbGVhcm5zIHRoYXQgdGhlb3JldGljYWxseSB0aG91Z2h0LW91dCB0eXBlcyBhcmUgZ29vZCwKLSAgICAgIGJ1dCB0aGV5IHN0aWxsIG5lZWQgcHJhY3RpY2FsIHVzZSB0byBhc3N1cmUgdGhhdCB0aGV5IHNlcnZlIHRoZWlyIG5lZWRzLgotICAgICAgTWFrZSBzdXJlIHRoYXQgeW91ciBwcm9wZXJ0eSBuYW1lcyBkbyBub3QgY2xhc2ggd2l0aCBzaW1pbGFyIHByb3BlcnRpZXMKLSAgICAgIHVzZWQgaW4gb3RoZXIgdHlwZXMuIElmIHRoZXkgbWF0Y2gsIG1ha2Ugc3VyZSB0aGV5IG1lYW4gdGhlIHNhbWUgdGhpbmc7Ci0gICAgICBwcm9wZXJ0aWVzIHdpdGggZGlmZmVyZW50IHR5cGVzIGJ1dCB0aGUgc2FtZSBuYW1lcyBhcmUKLSAgICAgIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBhbGxvd2VkLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi10eXBlcy10eXBlZmluZCIgeHJlZmxhYmVsPSJUeXBlZmluZCBGdW5jdGlvbnMgYW5kIEF1dG9wbHVnZ2luZyI+Ci0gICAgPHRpdGxlPlR5cGVmaW5kIEZ1bmN0aW9ucyBhbmQgQXV0b3BsdWdnaW5nPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFdpdGggb25seSA8ZW1waGFzaXM+ZGVmaW5pbmc8L2VtcGhhc2lzPiB0aGUgdHlwZXMsIHdlJ3JlIG5vdCB5ZXQgdGhlcmUuCi0gICAgICBJbiBvcmRlciBmb3IgYSByYW5kb20gZGF0YSBmaWxlIHRvIGJlIHJlY29nbml6ZWQgYW5kIHBsYXllZCBiYWNrIGFzCi0gICAgICBzdWNoLCB3ZSBuZWVkIGEgd2F5IG9mIHJlY29nbml6aW5nIHRoZWlyIHR5cGUgb3V0IG9mIHRoZSBibHVlLiBGb3IgdGhpcwotICAgICAgcHVycG9zZSwgPHF1b3RlPnR5cGVmaW5kaW5nPC9xdW90ZT4gd2FzIGludHJvZHVjZWQuIFR5cGVmaW5kaW5nIGlzIHRoZQotICAgICAgcHJvY2VzcyBvZiBkZXRlY3RpbmcgdGhlIHR5cGUgb2YgYSBkYXRhIHN0cmVhbS4gVHlwZWZpbmRpbmcgY29uc2lzdHMgb2YKLSAgICAgIHR3byBzZXBhcmF0ZSBwYXJ0czogZmlyc3QsIHRoZXJlJ3MgYW4gdW5saW1pdGVkIG51bWJlciBvZiBmdW5jdGlvbnMKLSAgICAgIHRoYXQgd2UgY2FsbCA8ZW1waGFzaXM+dHlwZWZpbmQgZnVuY3Rpb25zPC9lbXBoYXNpcz4sIHdoaWNoIGFyZSBlYWNoCi0gICAgICBhYmxlIHRvIHJlY29nbml6ZSBvbmUgb3IgbW9yZSB0eXBlcyBmcm9tIGFuIGlucHV0IHN0cmVhbS4gVGhlbiwKLSAgICAgIHNlY29uZGx5LCB0aGVyZSdzIGEgc21hbGwgZW5naW5lIHdoaWNoIHJlZ2lzdGVycyBhbmQgY2FsbHMgZWFjaCBvZgotICAgICAgdGhvc2UgZnVuY3Rpb25zLiBUaGlzIGlzIHRoZSB0eXBlZmluZCBjb3JlLiBPbiB0b3Agb2YgdGhpcyB0eXBlZmluZAotICAgICAgY29yZSwgeW91IHdvdWxkIG5vcm1hbGx5IHdyaXRlIGFuIGF1dG9wbHVnZ2VyLCB3aGljaCBpcyBhYmxlIHRvIHVzZQotICAgICAgdGhpcyB0eXBlIGRldGVjdGlvbiBzeXN0ZW0gdG8gZHluYW1pY2FsbHkgYnVpbGQgYSBwaXBlbGluZSBhcm91bmQgYW4KLSAgICAgIGlucHV0IHN0cmVhbS4gSGVyZSwgd2Ugd2lsbCBmb2N1cyBvbmx5IG9uIHR5cGVmaW5kIGZ1bmN0aW9ucy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBIHR5cGVmaW5kIGZ1bmN0aW9uIHVzdWFsbHkgbGl2ZXMgaW4KLSAgICAgIDxmaWxlbmFtZT5nc3QtcGx1Z2lucy1iYXNlL2dzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jPC9maWxlbmFtZT4sCi0gICAgICB1bmxlc3MgdGhlcmUncyBhIGdvb2QgcmVhc29uIChsaWtlIGxpYnJhcnkgZGVwZW5kZW5jaWVzKSB0byBwdXQgaXQKLSAgICAgIGVsc2V3aGVyZS4gVGhlIHJlYXNvbiBmb3IgdGhpcyBjZW50cmFsaXphdGlvbiBpcyB0byByZWR1Y2UgdGhlCi0gICAgICBudW1iZXIgb2YgcGx1Z2lucyB0aGF0IG5lZWQgdG8gYmUgbG9hZGVkIGluIG9yZGVyIHRvIGRldGVjdCBhIHN0cmVhbSdzCi0gICAgICB0eXBlLiBCZWxvdyBpcyBhbiBleGFtcGxlIHRoYXQgd2lsbCByZWNvZ25pemUgQVZJIGZpbGVzLCB3aGljaCBzdGFydAotICAgICAgd2l0aCBhIDxxdW90ZT5SSUZGPC9xdW90ZT4gdGFnLCB0aGVuIHRoZSBzaXplIG9mIHRoZSBmaWxlIGFuZCB0aGVuIGFuCi0gICAgICA8cXVvdGU+QVZJIDwvcXVvdGU+IHRhZzoKLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotc3RhdGljIHZvaWQKLWdzdF9teV90eXBlZmluZF9mdW5jdGlvbiAoR3N0VHlwZUZpbmQgKnRmLAotCQkJICBncG9pbnRlciAgICAgZGF0YSkKLXsKLSAgZ3VpbnQ4ICpkYXRhID0gZ3N0X3R5cGVfZmluZF9wZWVrICh0ZiwgMCwgMTIpOwotCi0gIGlmIChkYXRhICZhbXA7JmFtcDsKLSAgICAgIEdVSU5UMzJfRlJPTV9MRSAoJmFtcDsoKGd1aW50MzIgKikgZGF0YSlbMF0pID09IEdTVF9NQUtFX0ZPVVJDQyAoJ1InLCdJJywnRicsJ0YnKSAmYW1wOyZhbXA7Ci0gICAgICBHVUlOVDMyX0ZST01fTEUgKCZhbXA7KChndWludDMyICopIGRhdGEpWzJdKSA9PSBHU1RfTUFLRV9GT1VSQ0MgKCdBJywnVicsJ0knLCcgJykpIHsKLSAgICBnc3RfdHlwZV9maW5kX3N1Z2dlc3QgKHRmLCBHU1RfVFlQRV9GSU5EX01BWElNVU0sCi0JCQkgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1tc3ZpZGVvIiwgTlVMTCkpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqcGx1Z2luKQotewotICBpZiAoIWdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIgKHBsdWdpbiwgIiIsIEdTVF9SQU5LX1BSSU1BUlksCi0JCQkgICAgICAgZ3N0X215X3R5cGVmaW5kX2Z1bmN0aW9uLCAiYXZpIiwKLQkJCSAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1tc3ZpZGVvIiwKLQkJCQkJCSAgICBOVUxMKSwgTlVMTCkpCi0gICAgcmV0dXJuIEZBTFNFOwotfQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBOb3RlIHRoYXQKLSAgICAgIDxmaWxlbmFtZT5nc3QtcGx1Z2lucy9nc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzwvZmlsZW5hbWU+Ci0gICAgICBoYXMgc29tZSBzaW1wbGlmaWNhdGlvbiBtYWNyb3MgdG8gZGVjcmVhc2UgdGhlIGFtb3VudCBvZiBjb2RlLiBNYWtlCi0gICAgICBnb29kIHVzZSBvZiB0aG9zZSBpZiB5b3Ugd2FudCB0byBzdWJtaXQgdHlwZWZpbmRpbmcgcGF0Y2hlcyB3aXRoIG5ldwotICAgICAgdHlwZWZpbmQgZnVuY3Rpb25zLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEF1dG9wbHVnZ2luZyBoYXMgYmVlbiBkaXNjdXNzZWQgaW4gZ3JlYXQgZGV0YWlsIGluIHRoZSBBcHBsaWNhdGlvbgotICAgICAgRGV2ZWxvcG1lbnQgTWFudWFsLgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi10eXBlcy1kZWZpbml0aW9ucyIgeHJlZmxhYmVsPSJMaXN0IG9mIERlZmluZWQgVHlwZXMiPgotICAgIDx0aXRsZT5MaXN0IG9mIERlZmluZWQgVHlwZXM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEJlbG93IGlzIGEgbGlzdCBvZiBhbGwgdGhlIGRlZmluZWQgdHlwZXMgaW4gJkdTdHJlYW1lcjsuIFRoZXkgYXJlIHNwbGl0Ci0gICAgICAgIHVwIGluIHNlcGFyYXRlIHRhYmxlcyBmb3IgYXVkaW8sIHZpZGVvLCBjb250YWluZXIsIHN1YnRpdGxlIGFuZCBvdGhlcgotICAgICAgICB0eXBlcywgZm9yIHRoZSBzYWtlIG9mIHJlYWRhYmlsaXR5LiBCZWxvdyBlYWNoIHRhYmxlIG1pZ2h0IGZvbGxvdyBhCi0gICAgICAgIGxpc3Qgb2Ygbm90ZXMgdGhhdCBhcHBseSB0byB0aGF0IHRhYmxlLiBJbiB0aGUgZGVmaW5pdGlvbiBvZiBlYWNoIHR5cGUsCi0gICAgICAgIHdlIHRyeSB0byBmb2xsb3cgdGhlIHR5cGVzIGFuZCBydWxlcyBhcyBkZWZpbmVkIGJ5IDx1bGluayB0eXBlPSJodHRwIgotICAgICAgICB1cmw9Imh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMiPgotICAgICAgICBJQU5BPC91bGluaz4gZm9yIGFzIGZhciBhcyBwb3NzaWJsZS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBKdW1wIGRpcmVjdGx5IHRvIGEgc3BlY2lmaWMgdGFibGU6Ci0JPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT48eHJlZiBsaW5rZW5kPSJ0YWJsZS1hdWRpby10eXBlcyIvPjwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPjx4cmVmIGxpbmtlbmQ9InRhYmxlLXZpZGVvLXR5cGVzIi8+PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+PHhyZWYgbGlua2VuZD0idGFibGUtY29udGFpbmVyLXR5cGVzIi8+PC9wYXJhPgotICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+PHhyZWYgbGlua2VuZD0idGFibGUtc3VidGl0bGUtdHlwZXMiLz48L3BhcmE+Ci0gICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT48eHJlZiBsaW5rZW5kPSJ0YWJsZS1vdGhlci10eXBlcyIvPjwvcGFyYT4KLSAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBOb3RlIHRoYXQgbWFueSBvZiB0aGUgcHJvcGVydGllcyBhcmUgbm90IDxlbXBoYXNpcz5yZXF1aXJlZDwvZW1waGFzaXM+LAotICAgICAgICBidXQgcmF0aGVyIDxlbXBoYXNpcz5vcHRpb25hbDwvZW1waGFzaXM+IHByb3BlcnRpZXMuIFRoaXMgbWVhbnMgdGhhdAotICAgICAgICBtb3N0IG9mIHRoZXNlIHByb3BlcnRpZXMgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBjb250YWluZXIgaGVhZGVyLAotICAgICAgICBidXQgdGhhdCAtIGluIGNhc2UgdGhlIGNvbnRhaW5lciBoZWFkZXIgZG9lcyBub3QgcHJvdmlkZSB0aGVzZSAtIHRoZXkKLSAgICAgICAgY2FuIGFsc28gYmUgZXh0cmFjdGVkIGJ5IHBhcnNpbmcgdGhlIHN0cmVhbSBoZWFkZXIgb3IgdGhlIHN0cmVhbQotICAgICAgICBjb250ZW50LiBUaGUgcG9saWN5IGlzIHRoYXQgeW91ciBlbGVtZW50IHNob3VsZCBwcm92aWRlIHRoZSBkYXRhIHRoYXQKLSAgICAgICAgaXQga25vd3MgYWJvdXQgYnkgb25seSBwYXJzaW5nIGl0cyBvd24gY29udGVudCwgbm90IGFub3RoZXIgZWxlbWVudCdzCi0gICAgICAgIGNvbnRlbnQuIEV4YW1wbGU6IHRoZSBBVkkgaGVhZGVyIHByb3ZpZGVzIHNhbXBsZXJhdGUgb2YgdGhlIGNvbnRhaW5lZAotICAgICAgICBhdWRpbyBzdHJlYW0gaW4gdGhlIGhlYWRlci4gTVBFRyBzeXN0ZW0gc3RyZWFtcyBkb24ndC4gVGhpcyBtZWFucyB0aGF0Ci0gICAgICAgIGFuIEFWSSBzdHJlYW0gZGVtdXhlciB3b3VsZCBwcm92aWRlIHNhbXBsZXJhdGUgYXMgYSBwcm9wZXJ0eSBmb3IgTVBFRwotICAgICAgICBhdWRpbyBzdHJlYW1zLCB3aGVyZWFzIGFuIE1QRUcgZGVtdXhlciB3b3VsZCBub3QuIEEgZGVjb2RlciBuZWVkaW5nCi0gICAgICAgIHRoaXMgZGF0YSB3b3VsZCByZXF1aXJlIGEgc3RyZWFtIHBhcnNlciBpbiBiZXR3ZWVuIHR3byBleHRyYWN0IHRoaXMKLSAgICAgICAgZnJvbSB0aGUgaGVhZGVyIG9yIGNhbGN1bGF0ZSBpdCBmcm9tIHRoZSBzdHJlYW0uCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idGFibGUtYXVkaW8tdHlwZXMiIHhyZWZsYWJlbD0iVGFibGUgb2YgQXVkaW8gVHlwZXMiPgotICAgICAgICA8dGl0bGU+VGFibGUgb2YgQXVkaW8gVHlwZXM8L3RpdGxlPgotICAgICAgICA8dGdyb3VwIGNvbHM9IjYiIGFsaWduPSJsZWZ0IiBjb2xzZXA9IjEiIHJvd3NlcD0iMSI+Ci0gICAgICAgIDxjb2xzcGVjIGNvbG51bT0iMSIgY29sbmFtZT0iY29sYTEiIGNvbHdpZHRoPSIxKiIvPgotICAgICAgICA8Y29sc3BlYyBjb2xudW09IjYiIGNvbG5hbWU9ImNvbGE2IiBjb2x3aWR0aD0iNioiLz4KLSAgICAgICAgPHNwYW5zcGVjIHNwYW5uYW1lPSJmdWxsd2lkdGgiIG5hbWVzdD0iY29sYTEiIG5hbWVlbmQ9ImNvbGE2Ii8+Ci0KLSAgICAgICAgPHRoZWFkPgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+TWVkaWEgVHlwZTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBUeXBlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBWYWx1ZXM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IERlc2NyaXB0aW9uPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgPC90aGVhZD4KLQotICAgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgc3VidGl0bGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnkgc3Bhbm5hbWU9ImZ1bGx3aWR0aCI+Ci0gICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgYXVkaW8gdHlwZXMuPC9lbXBoYXNpcz4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSI0Ij5hdWRpby8qPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iNCI+Ci0gICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgYXVkaW8gdHlwZXM8L2VtcGhhc2lzPgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5yYXRlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIHRoYW4gMDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgZGF0YSwgaW4gc2FtcGxlcyAocGVyIGNoYW5uZWwpIHBlciBzZWNvbmQuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+Y2hhbm5lbHM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgdGhhbiAwPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBjaGFubmVscyBvZiBhdWRpbyBkYXRhLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmNoYW5uZWwtbWFzazwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Yml0bWFzazwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgQ2hhbm5lbCBwb3NpdGlvbnMgcHJlc2VudC4gU2VlIDxxdW90ZT5Hc3RBdWRpb0NoYW5uZWxQb3NpdGlvbjwvcXVvdGU+LgotICAgICAgICAgICAgICAwIG1lYW5zIHVucG9zaXRpb25lZC4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5mb3JtYXQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFM4IFU4IFMxNkxFIFMxNkJFIFUxNkxFIFUxNkJFIFMyNF8zMkxFIFMyNF8zMkJFIFUyNF8zMkxFIFUyNF8zMkJFIFMzMkxFIFMzMkJFIFUzMkxFIFUzMkJFCi0gICAgICAgICAgICAgIFMyNExFIFMyNEJFIFUyNExFIFUyNEJFIFMyMExFIFMyMEJFIFUyMExFIFUyMEJFIFMxOExFIFMxOEJFIFUxOExFIFUxOEJFIEYzMkxFIEYzMkJFIEY2NExFIEY2NEJFCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSBzYW1wbGUgZGF0YS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5sYXlvdXQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+ImludGVybGVhdmVkIiBvciAibm9uLWludGVybGVhdmVkIjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIExheW91dCBvZiBjaGFubmVscyB3aXRoaW4gYSBidWZmZXIuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgc3VidGl0bGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnkgc3Bhbm5hbWU9ImZ1bGx3aWR0aCI+Ci0gICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgcmF3IGF1ZGlvIHR5cGVzLjwvZW1waGFzaXM+Ci0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXJhdzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFVuc3RydWN0dXJlZCBhbmQgdW5jb21wcmVzc2VkIHJhdyBhdWRpbyBkYXRhLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgQWxsIHByb3BlcnRpZXMgKGV4Y2VwdCBjaGFubmVsLW1hc2ssIGluIHRoZSBtb25vIGFuZCBzdGVyZW8gY2FzZXMpIGFyZSBtYW5kYXRvcnkuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgc3VidGl0bGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnkgc3Bhbm5hbWU9ImZ1bGx3aWR0aCI+Ci0gICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgZW5jb2RlZCBhdWRpbyB0eXBlcy48L2VtcGhhc2lzPgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1hYzM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkFDLTMgb3IgQTUyIGF1ZGlvIHN0cmVhbXMuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+YXVkaW8veC1hZHBjbTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjEiPkFEUENNIEF1ZGlvIHN0cmVhbXMuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5sYXlvdXQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIDxxdW90ZT5xdWlja3RpbWU8L3F1b3RlPiwgPHF1b3RlPmR2aTwvcXVvdGU+LAotICAgICAgICAgICAgICA8cXVvdGU+bWljcm9zb2Z0PC9xdW90ZT4gb3IgPHF1b3RlPjR4bTwvcXVvdGU+LgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIGxheW91dCBkZWZpbmVzIHRoZSBwYWNraW5nIG9mIHRoZSBzYW1wbGVzIGluIHRoZSBzdHJlYW0uIEluCi0gICAgICAgICAgICAgIEFEUENNLCBtb3N0IGZvcm1hdHMgc3RvcmUgbXVsdGlwbGUgc2FtcGxlcyBwZXIgY2hhbm5lbCB0b2dldGhlci4KLSAgICAgICAgICAgICAgVGhpcyBudW1iZXIgb2Ygc2FtcGxlcyBkaWZmZXJzIHBlciBmb3JtYXQsIGhlbmNlIHRoZSBkaWZmZXJlbnQKLSAgICAgICAgICAgICAgbGF5b3V0cy4gT24gdGhlIGxvbmcgdGVybSwgd2UgcHJvYmFibHkgd2FudCB0aGlzIHZhcmlhYmxlIHRvIGRpZQotICAgICAgICAgICAgICBhbmQgdXNlIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLCBidXQgdGhpcyB3aWxsIGRvIGZvciBub3cuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YmxvY2tfYWxpZ248L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBBbnkKLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIENodW5rIGJ1ZmZlciBzaXplLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1jaW5lcGFrPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5BdWRpbyBhcyBwcm92aWRlZCBpbiBhIENpbmVwYWsgKFF1aWNrdGltZSkgc3RyZWFtLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1kdjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+QXVkaW8gYXMgcHJvdmlkZWQgaW4gYSBEaWdpdGFsIFZpZGVvIHN0cmVhbS48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtZmxhYzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+RnJlZSBMb3NzbGVzcyBBdWRpbyBjb2RlYyAoRkxBQykuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LWdzbTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+RGF0YSBlbmNvZGVkIGJ5IHRoZSBHU00gY29kZWMuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LWFsYXc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkEtTGF3IEF1ZGlvLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1tdWxhdzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+TXUtTGF3IEF1ZGlvLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1tYWNlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5NQUNFIEF1ZGlvICh1c2VkIGluIFF1aWNrdGltZSkuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5tYWNldmVyc2lvbjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+MyBvciA2PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIE1BQ0UgYXVkaW8gY29kZWMgdXNlZCB0byBlbmNvZGUgdGhlIHN0cmVhbS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIzIj5hdWRpby9tcGVnPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMyI+Ci0gICAgICAgICAgICAgIEF1ZGlvIGRhdGEgY29tcHJlc3NlZCB1c2luZyB0aGUgTVBFRyBhdWRpbyBlbmNvZGluZyBzY2hlbWUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5Pm1wZWd2ZXJzaW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4xLCAyIG9yIDQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGUgTVBFRy12ZXJzaW9uIHVzZWQgZm9yIGVuY29kaW5nIHRoZSBkYXRhLiBUaGUgdmFsdWUgMSByZWZlcnMKLSAgICAgICAgICAgICAgdG8gTVBFRy0xLCAtMiBhbmQgLTIuNSBsYXllciAxLCAyIG9yIDMuIFRoZSB2YWx1ZXMgMiBhbmQgNCByZWZlcgotICAgICAgICAgICAgICB0byB0aGUgTVBFRy1BQUMgYXVkaW8gZW5jb2Rpbmcgc2NoZW1lcy4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5mcmFtZWQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjAgb3IgMTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBlYWNoIGJ1ZmZlciBjb250YWlucyBleGFjdGx5IG9uZQotICAgICAgICAgICAgICBmcmFtZS4gQSBmYWxzZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBmcmFtZXMgYW5kIGJ1ZmZlcnMgZG8gbm90Ci0gICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IG1hdGNoIHVwLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmxheWVyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4xLCAyLCBvciAzPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIGNvbXByZXNzaW9uIHNjaGVtZSBsYXllciB1c2VkIHRvIGNvbXByZXNzIHRoZSBkYXRhCi0gICAgICAgICAgICAgIDxlbXBoYXNpcz4ob25seSBpZiBtcGVndmVyc2lvbj0xKTwvZW1waGFzaXM+LgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmJpdHJhdGU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgdGhhbiAwPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIGJpdHJhdGUsIGluIGJpdHMgcGVyIHNlY29uZC4gRm9yIFZCUiAodmFyaWFibGUgYml0cmF0ZSkKLSAgICAgICAgICAgICAgTVBFRyBkYXRhLCB0aGlzIGlzIHRoZSBhdmVyYWdlIGJpdHJhdGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXFkbTI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkRhdGEgZW5jb2RlZCBieSB0aGUgUURNIHZlcnNpb24gMiBjb2RlYy48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtcG4tcmVhbGF1ZGlvPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5SZWFsbWVkaWEgQXVkaW8gZGF0YS48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnJhdmVyc2lvbjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+MSBvciAyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIFJlYWwgQXVkaW8gY29kZWMgdXNlZCB0byBlbmNvZGUgdGhlIHN0cmVhbS4KLSAgICAgICAgICAgICAgMSBzdGFuZHMgZm9yIGEgMTRrNCBzdHJlYW0sIDIgc3RhbmRzIGZvciBhIDI4azggc3RyZWFtLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1zcGVleDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+RGF0YSBlbmNvZGVkIGJ5IHRoZSBTcGVleCBhdWRpbyBjb2RlYzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC12b3JiaXM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlZvcmJpcyBhdWRpbyBkYXRhPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXdtYTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+V2luZG93cyBNZWRpYSBBdWRpbzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+d21hdmVyc2lvbjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+MSwyIG9yIDM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBvZiB0aGUgV01BIGNvZGVjIHVzZWQgdG8gZW5jb2RlIHRoZSBzdHJlYW0uCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXBhcmlzPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5FbnNvbmlxIFBBUklTIGF1ZGlvPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXN2eDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+QW1pZ2EgSUZGIC8gU1ZYOCAvIFNWMTYgYXVkaW88L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtbmlzdDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+U3BoZXJlIE5JU1QgYXVkaW88L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmF1ZGlvL3gtdm9jPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Tb3VuZCBCbGFzdGVyIFZPQyBhdWRpbzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1pcmNhbTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+QmVya2VsZXkvSVJDQU0vQ0FSTCBhdWRpbzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC13NjQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlNvbmljIEZvdW5kcnkncyA2NCBiaXQgUklGRi9XQVY8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgPC90Ym9keT4KLSAgICAgICAgPC90Z3JvdXA+Ci0gICAgICA8L3RhYmxlPgotCi0gICAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InRhYmxlLXZpZGVvLXR5cGVzIiB4cmVmbGFiZWw9IlRhYmxlIG9mIFZpZGVvIFR5cGVzIj4KLSAgICAgICAgPHRpdGxlPlRhYmxlIG9mIFZpZGVvIFR5cGVzPC90aXRsZT4KLSAgICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0ibGVmdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgotICAgICAgICA8Y29sc3BlYyBjb2xudW09IjEiIGNvbG5hbWU9ImNvbHYxIiBjb2x3aWR0aD0iMSoiLz4KLSAgICAgICAgPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjb2x2NiIgY29sd2lkdGg9IjYqIi8+Ci0gICAgICAgIDxzcGFuc3BlYyBzcGFubmFtZT0iZnVsbHdpZHRoIiBuYW1lc3Q9ImNvbHYxIiBuYW1lZW5kPSJjb2x2NiIvPgotCi0gICAgICAgIDx0aGVhZD4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5Pk1lZGlhIFR5cGU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UHJvcGVydHkgVHlwZTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UHJvcGVydHkgVmFsdWVzPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgIDwvdGhlYWQ+Ci0KLSAgICAgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHN1YnRpdGxlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IHNwYW5uYW1lPSJmdWxsd2lkdGgiPgotICAgICAgICAgICAgICA8ZW1waGFzaXM+QWxsIHZpZGVvIHR5cGVzLjwvZW1waGFzaXM+Ci0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iOSI+dmlkZW8vKjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjkiPgotICAgICAgICAgICAgICA8ZW1waGFzaXM+QWxsIHZpZGVvIHR5cGVzPC9lbXBoYXNpcz4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+d2lkdGg8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgdGhhbiAwPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5UaGUgd2lkdGggb2YgdGhlIHZpZGVvIGltYWdlPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmhlaWdodDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlRoZSBoZWlnaHQgb2YgdGhlIHZpZGVvIGltYWdlPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmZyYW1lcmF0ZTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+ZnJhY3Rpb248L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgb3IgZXF1YWwgMDsgZGVmYXVsdCAwLzE8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGUgKGF2ZXJhZ2UpIGZyYW1lcmF0ZSBpbiBmcmFtZXMgcGVyIHNlY29uZC4gTm90ZSB0aGF0IHRoaXMKLSAgICAgICAgICAgICAgcHJvcGVydHkgZG9lcyBub3QgZ3VhcmFudGVlIGluIDxlbXBoYXNpcz5hbnk8L2VtcGhhc2lzPiB3YXkgdGhhdAotICAgICAgICAgICAgICBpdCB3aWxsIGFjdHVhbGx5IGNvbWUgY2xvc2UgdG8gdGhpcyB2YWx1ZS4gSWYgeW91IG5lZWQgYSBmaXhlZAotICAgICAgICAgICAgICBmcmFtZXJhdGUsIHBsZWFzZSB1c2UgYW4gZWxlbWVudCB0aGF0IHByb3ZpZGVzIHRoYXQgKHN1Y2ggYXMKLSAgICAgICAgICAgICAgPHF1b3RlPnZpZGVvcmF0ZTwvcXVvdGU+KS4gMC8xIG1lYW5zIGEgdmFyaWFibGUgZnJhbWVyYXRlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5Pm1heC1mcmFtZXJhdGU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmZyYWN0aW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIG9yIGVxdWFsIDA7IGRlZmF1bHQgYXMgZnJhbWVyYXRlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgRm9yIHZhcmlhYmxlIGZyYW1lcmF0ZXMsIHRoZSBtYXhpbXVtIGZyYW1lcmF0ZSB0aGF0IGlzIGV4cGVjdGVkLgotICAgICAgICAgICAgICBPbmx5IHZhbGlkIHdoZW4gZnJhbWVyYXRlIGlzIDAvMS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT52aWV3czwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA7IGRlZmF1bHQgMTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygdmlld3MgZm9yIG11bHRpdmlldyB2aWRlby4gRWFjaCBidWZmZXIgY29udGFpbnMKLSAgICAgICAgICAgICAgbXVsdGlwbGUgPHF1b3RlPkdzdFZpZGVvTWV0YTwvcXVvdGU+IGJ1ZmZlcnMgdGhhdCBkZXNjcmliZSBlYWNoIHZpZXcuIFVzZSB0aGUKLSAgICAgICAgICAgICAgZnJhbWUgSUQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgZGlmZmVyZW50IHZpZXdzLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmludGVybGFjZS1tb2RlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnByb2dyZXNzaXZlLCBpbnRlcmxlYXZlZCwgbWl4ZWQsIGZpZWxkczsgZGVmYXVsdCBwcm9ncmVzc2l2ZTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZSBpbnRlcmxhY2UgbW9kZS4gRXh0cmEgYnVmZmVyIGZsYWdzIGRlc2NyaWJlIHRoZSBmcmFtZSBhbmQgZmllbGRzLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmNocm9tYS1zaXRlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmpwZWcsIG1wZWcyLCBkdjsgZGVmYXVsdCBVTktOT1dOPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIGNocm9tYSBzaXRpbmcgb2YgdGhlIHZpZGVvIGZyYW1lcy4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5jb2xvcmltZXRyeTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+c3RyaW5nPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5idDYwMSwgYnQ3MDksIHNtcHRlMjQwbTsgZGVmYXVsdCBVTktOT1dOPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIGNvbG9yaW1ldHJ5IG9mIHRoZSB2aWRlbyBmcmFtZXMuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+cGl4ZWwtYXNwZWN0LXJhdGlvPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5mcmFjdGlvbjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Z3JlYXRlciB0aGFuIDA7IGRlZmF1bHQgMS8xPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIHBpeGVsIGFzcGVjdCByYXRpbyBvZiB0aGUgdmlkZW8uCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+Zm9ybWF0PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBJNDIwIFlWMTIgWVVZMiBVWVZZIEFZVVYgUkdCeCBCR1J4IHhSR0IgeEJHUiBSR0JBIEJHUkEgQVJHQiBBQkdSIFJHQiBCR1IgWTQxQiBZNDJCCi0gICAgICAgICAgICAgIFlWWVUgWTQ0NCB2MjEwIHYyMTYgTlYxMiBOVjIxIEdSQVk4IEdSQVkxNl9CRSBHUkFZMTZfTEUKLSAgICAgICAgICAgICAgdjMwOCBSR0IxNiBCR1IxNiBSR0IxNSBCR1IxNSBVWVZQIEE0MjAgUkdCOFAgWVVWOSBZVlU5Ci0gICAgICAgICAgICAgIElZVTEgQVJHQjY0IEFZVVY2NCByMjEwIEk0MjBfMTBMRSBJNDIwXzEwQkUgSTQyMl8xMExFIEk0MjJfMTBCRQotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgdmlkZW8uIFNlZSA8dWxpbmsgdHlwZT0iaHR0cCIKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vd3d3LmZvdXJjYy5vcmcvIj5Gb3VyQ0MgZGVmaW5pdGlvbiBzaXRlPC91bGluaz4KLSAgICAgICAgICAgICAgZm9yIHJlZmVyZW5jZXMgYW5kIGRlZmluaXRpb25zLiBZVVkyLCBZVllVIGFuZCBVWVZZIGFyZSA0OjI6MgotICAgICAgICAgICAgICBwYWNrZWQtcGl4ZWwsIFk0MVAgaXMgNDoxOjEgcGFja2VkLXBpeGVsIGFuZCBJWVUyIGlzIDQ6NDo0Ci0gICAgICAgICAgICAgIHBhY2tlZC1waXhlbC4gWTQyQiBpcyA0OjI6MiBwbGFuYXIsIFlWMTIgYW5kIEk0MjAgYXJlIDQ6MjowCi0gICAgICAgICAgICAgIHBsYW5hciwgWTQxQiBpcyA0OjE6MSBwbGFuYXIgYW5kIFlVVjkgYW5kIFlWVTkgYXJlIDQ6MTowIHBsYW5hci4KLSAgICAgICAgICAgICAgWTgwMCBjb250YWlucyBZLXNhbXBsZXMgb25seSAoYmxhY2svd2hpdGUpLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHN1YnRpdGxlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IHNwYW5uYW1lPSJmdWxsd2lkdGgiPgotICAgICAgICAgICAgICA8ZW1waGFzaXM+QWxsIHJhdyB2aWRlbyB0eXBlcy48L2VtcGhhc2lzPgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1yYXc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlVuc3RydWN0dXJlZCBhbmQgdW5jb21wcmVzc2VkIHJhdyB2aWRlbyBkYXRhLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZSBwcm9wZXJ0aWVzIHdpZHRoLCBoZWlnaHQgYW5kIGZvcm1hdCBhcmUgbWFuZGF0b3J5LgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHN1YnRpdGxlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IHNwYW5uYW1lPSJmdWxsd2lkdGgiPgotICAgICAgICAgICAgICA8ZW1waGFzaXM+QWxsIGVuY29kZWQgdmlkZW8gdHlwZXMuPC9lbXBoYXNpcz4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtM2l2eDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+M2l2eCB2aWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtZGl2eDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+RGl2WCB2aWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmRpdnh2ZXJzaW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4zLCA0IG9yIDU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBWZXJzaW9uIG9mIHRoZSBEaXZYIGNvZGVjIHVzZWQgdG8gZW5jb2RlIHRoZSBzdHJlYW0uCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT52aWRlby94LWR2PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5EaWdpdGFsIFZpZGVvLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+c3lzdGVtc3RyZWFtPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5GQUxTRTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoaXMgc3RyZWFtIGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBhIHN5c3RlbQotICAgICAgICAgICAgICBjb250YWluZXIgc3RyZWFtLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1mZnY8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkZGTXBlZyB2aWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmZmdnZlcnNpb248L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjE8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBWZXJzaW9uIG9mIHRoZSBGRk1wZWcgdmlkZW8gY29kZWMgdXNlZCB0byBlbmNvZGUgdGhlIHN0cmVhbS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIxIj52aWRlby94LWgyNjM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIxIj5ILTI2MyB2aWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnZhcmlhbnQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+aXR1LCBsZWFkLCBtaWNyb3NvZnQsIHZkb2xpdmUsIHZpdm8sIHhpcmxpbmsgPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVmVuZG9yIHNwZWNpZmljIHZhcmlhbnQgb2YgdGhlIGZvcm1hdC4gJ2l0dScgaXMgdGhlIHN0YW5kYXJkLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmgyNjN2ZXJzaW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmgyNjMsIGgyNjNwLCBoMjYzcHA8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBFbmhhbmNlZCB2ZXJzaW9ucyBvZiB0aGUgaDI2MyBjb2RlYy4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtaDI2NDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+SC0yNjQgdmlkZW8uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT52YXJpYW50PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5Pml0dSwgdmlkZW9zb2Z0PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVmVuZG9yIHNwZWNpZmljIHZhcmlhbnQgb2YgdGhlIGZvcm1hdC4gJ2l0dScgaXMgdGhlIHN0YW5kYXJkLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1odWZmeXV2PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5IdWZmeXV2IHZpZGVvLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1pbmRlbzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+SW5kZW8gdmlkZW8uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbmRlb3ZlcnNpb248L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBWZXJzaW9uIG9mIHRoZSBJbmRlbyBjb2RlYyB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtaW50ZWwtaDI2MzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+SC0yNjMgdmlkZW8uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT52YXJpYW50PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVsPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVmVuZG9yIHNwZWNpZmljIHZhcmlhbnQgb2YgdGhlIGZvcm1hdC4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtanBlZzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+TW90aW9uLUpQRUcgdmlkZW8uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuIE5vdGUgdGhhdCB2aWRlby94LWpwZWcgb25seSBhcHBsaWVzIHRvIE1vdGlvbi1KUEVHCi0gICAgICAgICAgICAgIHBpY3R1cmVzIChZVVkyIGNvbG91cnNwYWNlKS4gUkdCIGNvbG91cnNwYWNlIEpQRUcgaW1hZ2VzIGFyZQotICAgICAgICAgICAgICByZWZlcnJlZCB0byBhcyBpbWFnZS9qcGVnIChKUEVHIGltYWdlKS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIxIj52aWRlby9tcGVnPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+TVBFRyB2aWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5Pm1wZWd2ZXJzaW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4xLCAyIG9yIDQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBWZXJzaW9uIG9mIHRoZSBNUEVHIGNvZGVjIHRoYXQgdGhpcyBzdHJlYW0gd2FzIGVuY29kZWQgd2l0aC4KLSAgICAgICAgICAgICAgTm90ZSB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IG1lZGlhIHR5cGVzIGZvciAzaXZ4LCBYdmlELCBEaXZYIGFuZAotICAgICAgICAgICAgICAic3RhbmRhcmQiIElTTyBNUEVHLTQuIFRoaXMgaXMgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGEgZ29vZAotICAgICAgICAgICAgICB0aGluZyBhbmQgd2UncmUgZnVsbHkgYXdhcmUgb2YgdGhpcy4gSG93ZXZlciwgd2UgZG8gbm90IGhhdmUgYQotICAgICAgICAgICAgICBzb2x1dGlvbiB5ZXQuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+c3lzdGVtc3RyZWFtPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5ib29sZWFuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5GQUxTRTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoaXMgc3RyZWFtIGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBhIHN5c3RlbQotICAgICAgICAgICAgICBjb250YWluZXIgc3RyZWFtLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1tc21wZWc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5Pk1pY3Jvc29mdCBNUEVHLTQgdmlkZW8gZGV2aWF0aW9ucy48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5Pm1zbXBlZ3ZlcnNpb248L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjQxLCA0MiBvciA0MzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFZlcnNpb24gb2YgdGhlIE1TLU1QRUctNC1saWtlIGNvZGVjIHRoYXQgd2FzIHVzZWQgdG8gZW5jb2RlIHRoaXMKLSAgICAgICAgICAgICAgdmVyc2lvbi4gQSB2YWx1ZSBvZiA0MSByZWZlcnMgdG8gTVMgTVBFRyA0LjEsIDQyIHRvIDQuMiBhbmQgNDMKLSAgICAgICAgICAgICAgdG8gdmVyc2lvbiA0LjMuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT52aWRlby94LW1zdmlkZW9jb2RlYzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+TWljcm9zb2Z0IFZpZGVvIDEgKG9sZGlzaCBjb2RlYykuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5tc3ZpZGVvdmVyc2lvbjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+MTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFZlcnNpb24gb2YgdGhlIGNvZGVjIC0gYWx3YXlzIDEuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT52aWRlby94LXBuLXJlYWx2aWRlbzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UmVhbG1lZGlhIHZpZGVvLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+cm12ZXJzaW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4xLCAyIG9yIDM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBWZXJzaW9uIG9mIHRoZSBSZWFsIFZpZGVvIGNvZGVjIHRoYXQgdGhpcyBzdHJlYW0gd2FzIGVuY29kZWQKLSAgICAgICAgICAgICAgd2l0aC4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIyIj52aWRlby94LXJsZTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnkgbW9yZXJvd3M9IjIiPlJMRSBhbmltYXRpb24gZm9ybWF0LjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+bGF5b3V0PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5zdHJpbmc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PiJtaWNyb3NvZnQiIG9yICJxdWlja3RpbWUiPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIFJMRSBmb3JtYXQgaW5zaWRlIHRoZSBNaWNyb3NvZnQgQVZJIGNvbnRhaW5lciBoYXMgYQotICAgICAgICAgICAgICBkaWZmZXJlbnQgYnl0ZSBsYXlvdXQgdGhhbiB0aGUgUkxFIGZvcm1hdCBpbnNpZGUgQXBwbGUncwotICAgICAgICAgICAgICBRdWlja3RpbWUgY29udGFpbmVyOyB0aGlzIHByb3BlcnR5IGtlZXBzIHRyYWNrIG9mIHRoZQotICAgICAgICAgICAgICBsYXlvdXQuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+ZGVwdGg8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjEgdG8gNjQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBCaXQgZGVwdGggb2YgdGhlIHVzZWQgcGFsZXR0ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBwYWxldHRlCi0gICAgICAgICAgICAgIHRoYXQgYmVsb25ncyB0byB0aGlzIGZvcm1hdCBkZWZpbmVzIDJeZGVwdGggY29sb3JzLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnBhbGV0dGVfZGF0YTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+R3N0QnVmZmVyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBCdWZmZXIgY29udGFpbmluZyBhIGNvbG9yIHBhbGV0dGUgKGluIG5hdGl2ZS1lbmRpYW4gUkdCQSkgdXNlZAotICAgICAgICAgICAgICBieSB0aGlzIGZvcm1hdC4gVGhlIGJ1ZmZlciBpcyBvZiBzaXplIDQqMl5kZXB0aC4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtc3ZxPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Tb3JlbnNlbiBWaWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnN2cXZlcnNpb248L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjEgb3IgMzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFZlcnNpb24gb2YgdGhlIFNvcmVuc2VuIGNvZGVjIHRoYXQgdGhlIHN0cmVhbSB3YXMgZW5jb2RlZCB3aXRoLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+dmlkZW8veC10YXJraW48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlRhcmtpbiB2aWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtdGhlb3JhPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5UaGVvcmEgdmlkZW8uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT52aWRlby94LXZwMzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+VlAtMyB2aWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4gTm90ZSB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IG1lZGlhIHR5cGVzIGZvciBWUC0zIGFuZAotICAgICAgICAgICAgICBUaGVvcmEsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSBhIGdvb2QgaWRlYS4gVGhpcyBjb3VsZCBwcm9iYWJseQotICAgICAgICAgICAgICBiZSBpbXByb3ZlZC4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtd212PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5XaW5kb3dzIE1lZGlhIFZpZGVvPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT53bXZ2ZXJzaW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4xLDIgb3IgMzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFZlcnNpb24gb2YgdGhlIFdNViBjb2RlYyB0aGF0IHRoZSBzdHJlYW0gd2FzIGVuY29kZWQgd2l0aC4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gteHZpZDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+WHZpRCB2aWRlby48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyBzdWJ0aXRsZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeSBzcGFubmFtZT0iZnVsbHdpZHRoIj4KLSAgICAgICAgICAgICAgPGVtcGhhc2lzPkFsbCBpbWFnZSB0eXBlcy48L2VtcGhhc2lzPgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotCSAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5pbWFnZS9naWY8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdC48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmltYWdlL2pwZWc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkpvaW50IFBpY3R1cmUgRXhwZXJ0IEdyb3VwIEltYWdlLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLiBOb3RlIHRoYXQgaW1hZ2UvanBlZyBvbmx5IGFwcGxpZXMgdG8gUkdCLWNvbG91cnNwYWNlCi0gICAgICAgICAgICAgIEpQRUcgaW1hZ2VzOyBZVVkyLWNvbG91cnNwYWNlIEpQRUcgcGljdHVyZXMgYXJlIHJlZmVycmVkIHRvIGFzCi0gICAgICAgICAgICAgIHZpZGVvL3gtanBlZyAoIk1vdGlvbiBKUEVHIikuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0JICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmltYWdlL3BuZzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UG9ydGFibGUgTmV0d29yayBHcmFwaGljcyBJbWFnZS48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLQkgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+aW1hZ2UvdGlmZjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+VGFnZ2VkIEltYWdlIEZpbGUgRm9ybWF0LjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgPC90Ym9keT4KLSAgICAgICAgPC90Z3JvdXA+Ci0gICAgICA8L3RhYmxlPgotCi0gICAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InRhYmxlLWNvbnRhaW5lci10eXBlcyIgeHJlZmxhYmVsPSJUYWJsZSBvZiBDb250YWluZXIgVHlwZXMiPgotICAgICAgICA8dGl0bGU+VGFibGUgb2YgQ29udGFpbmVyIFR5cGVzPC90aXRsZT4KLSAgICAgICAgPHRncm91cCBjb2xzPSI2IiBhbGlnbj0ibGVmdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgotICAgICAgICA8Y29sc3BlYyBjb2xudW09IjEiIGNvbG5hbWU9ImNvbGMxIiBjb2x3aWR0aD0iMSoiLz4KLSAgICAgICAgPGNvbHNwZWMgY29sbnVtPSI2IiBjb2xuYW1lPSJjb2xjNiIgY29sd2lkdGg9IjYqIi8+Ci0gICAgICAgIDxzcGFuc3BlYyBzcGFubmFtZT0iZnVsbHdpZHRoIiBuYW1lc3Q9ImNvbGMxIiBuYW1lZW5kPSJjb2xjNiIvPgotCi0gICAgICAgIDx0aGVhZD4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5Pk1lZGlhIFR5cGU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UHJvcGVydHkgVHlwZTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UHJvcGVydHkgVmFsdWVzPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgIDwvdGhlYWQ+Ci0KLSAgICAgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+dmlkZW8veC1tcy1hc2Y8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkFkdmFuY2VkIFN0cmVhbWluZyBGb3JtYXQgKEFTRikuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT52aWRlby94LW1zdmlkZW88L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkFWSS48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL3gtZHY8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PkRpZ2l0YWwgVmlkZW8uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5zeXN0ZW1zdHJlYW08L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlRSVUU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIGEgY29udGFpbmVyIHN5c3RlbSBzdHJlYW0gcmF0aGVyIHRoYW4gYW4KLSAgICAgICAgICAgICAgZWxlbWVudGFyeSB2aWRlbyBzdHJlYW0uCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT52aWRlby94LW1hdHJvc2thPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5NYXRyb3NrYS48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBvciBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgIHRoaXMgdHlwZS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PnZpZGVvL21wZWc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5Pk1vdGlvbiBQaWN0dXJlcyBFeHBlcnQgR3JvdXAgU3lzdGVtIFN0cmVhbS48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnN5c3RlbXN0cmVhbTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+VFJVRTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoaXMgaXMgYSBjb250YWluZXIgc3lzdGVtIHN0cmVhbSByYXRoZXIgdGhhbiBhbgotICAgICAgICAgICAgICBlbGVtZW50YXJ5IHZpZGVvIHN0cmVhbS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmFwcGxpY2F0aW9uL29nZzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+T2dnLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+dmlkZW8vcXVpY2t0aW1lPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5RdWlja3RpbWUuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5SZWFsTWVkaWEuPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSBubyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGRlZmluZWQgb3IgbmVlZGVkIGZvcgotICAgICAgICAgICAgICB0aGlzIHR5cGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXdhdjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+V0FWLjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gc3BlY2lmaWMgcHJvcGVydGllcyBkZWZpbmVkIG9yIG5lZWRlZCBmb3IKLSAgICAgICAgICAgICAgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQkgIDwvdGJvZHk+Ci0gICAgICAgIDwvdGdyb3VwPgotICAgICAgPC90YWJsZT4KLQotICAgICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ0YWJsZS1zdWJ0aXRsZS10eXBlcyIgeHJlZmxhYmVsPSJUYWJsZSBvZiBTdWJ0aXRsZSBUeXBlcyI+Ci0gICAgICAgIDx0aXRsZT5UYWJsZSBvZiBTdWJ0aXRsZSBUeXBlczwvdGl0bGU+Ci0gICAgICAgIDx0Z3JvdXAgY29scz0iNiIgYWxpZ249ImxlZnQiIGNvbHNlcD0iMSIgcm93c2VwPSIxIj4KLSAgICAgICAgPGNvbHNwZWMgY29sbnVtPSIxIiBjb2xuYW1lPSJjb2x0MSIgY29sd2lkdGg9IjEqIi8+Ci0gICAgICAgIDxjb2xzcGVjIGNvbG51bT0iNiIgY29sbmFtZT0iY29sdDYiIGNvbHdpZHRoPSI2KiIvPgotICAgICAgICA8c3BhbnNwZWMgc3Bhbm5hbWU9ImZ1bGx3aWR0aCIgbmFtZXN0PSJjb2x0MSIgbmFtZWVuZD0iY29sdDYiLz4KLQotICAgICAgICA8dGhlYWQ+Ci0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5NZWRpYSBUeXBlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UHJvcGVydHk8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IFR5cGU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IFZhbHVlczwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UHJvcGVydHkgRGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICA8L3RoZWFkPgotCi0gICAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgTm9uZSBkZWZpbmVkIHlldC4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0JICA8L3Rib2R5PgotICAgICAgICA8L3Rncm91cD4KLSAgICAgIDwvdGFibGU+Ci0KLSAgICAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idGFibGUtb3RoZXItdHlwZXMiIHhyZWZsYWJlbD0iVGFibGUgb2YgT3RoZXIgVHlwZXMiPgotICAgICAgICA8dGl0bGU+VGFibGUgb2YgT3RoZXIgVHlwZXM8L3RpdGxlPgotICAgICAgICA8dGdyb3VwIGNvbHM9IjYiIGFsaWduPSJsZWZ0IiBjb2xzZXA9IjEiIHJvd3NlcD0iMSI+Ci0gICAgICAgIDxjb2xzcGVjIGNvbG51bT0iMSIgY29sbmFtZT0iY29sbzEiIGNvbHdpZHRoPSIxKiIvPgotICAgICAgICA8Y29sc3BlYyBjb2xudW09IjYiIGNvbG5hbWU9ImNvbG82IiBjb2x3aWR0aD0iNioiLz4KLSAgICAgICAgPHNwYW5zcGVjIHNwYW5uYW1lPSJmdWxsd2lkdGgiIG5hbWVzdD0iY29sbzEiIG5hbWVlbmQ9ImNvbG82Ii8+Ci0KLSAgICAgICAgPHRoZWFkPgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+TWVkaWEgVHlwZTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBUeXBlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5Qcm9wZXJ0eSBWYWx1ZXM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IERlc2NyaXB0aW9uPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgPC90aGVhZD4KLQotICAgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIE5vbmUgZGVmaW5lZCB5ZXQuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCSAgPC90Ym9keT4KLSAgICAgICAgPC90Z3JvdXA+Ci0gICAgICA8L3RhYmxlPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbCBiL2RvY3MvcHdnL2FwcGVuZGl4LWNoZWNrbGlzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMTE4YzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYXBwZW5kaXgtY2hlY2tsaXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1jaGVja2xpc3QtZWxlbWVudCI+Ci0gIDx0aXRsZT5UaGluZ3MgdG8gY2hlY2sgd2hlbiB3cml0aW5nIGFuIGVsZW1lbnQ8L3RpdGxlPgotICA8cGFyYT4KLSAgICBUaGlzIGNoYXB0ZXIgY29udGFpbnMgYSBmYWlybHkgcmFuZG9tIHNlbGVjdGlvbiBvZiB0aGluZ3MgdG8gdGFrZSBjYXJlCi0gICAgb2Ygd2hlbiB3cml0aW5nIGFuIGVsZW1lbnQuIEl0J3MgdXAgdG8geW91IGhvdyBmYXIgeW91J3JlIGdvaW5nIHRvIHN0aWNrCi0gICAgdG8gdGhvc2UgZ3VpZGVsaW5lcy4gSG93ZXZlciwga2VlcCBpbiBtaW5kIHRoYXQgd2hlbiB5b3UncmUgd3JpdGluZyBhbgotICAgIGVsZW1lbnQgYW5kIGhvcGUgZm9yIGl0IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBtYWluc3RyZWFtICZHU3RyZWFtZXI7Ci0gICAgZGlzdHJpYnV0aW9uLCBpdCA8ZW1waGFzaXM+aGFzIHRvPC9lbXBoYXNpcz4gbWVldCB0aG9zZSByZXF1aXJlbWVudHMuCi0gICAgQXMgZmFyIGFzIHBvc3NpYmxlLCB3ZSB3aWxsIHRyeSB0byBleHBsYWluIHdoeSB0aG9zZSByZXF1aXJlbWVudHMgYXJlCi0gICAgc2V0LgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWNoZWNrbGlzdC1zdGF0ZXMiPgotICAgIDx0aXRsZT5BYm91dCBzdGF0ZXM8L3RpdGxlPgotCi0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTWFrZSBzdXJlIHRoZSBzdGF0ZSBvZiBhbiBlbGVtZW50IGdldHMgcmVzZXQgd2hlbiBnb2luZyB0bwotICAgICAgICAgIDxjbGFzc25hbWU+TlVMTDwvY2xhc3NuYW1lPi4gSWRlYWxseSwgdGhpcyBzaG91bGQgc2V0IGFsbAotICAgICAgICAgIG9iamVjdCBwcm9wZXJ0aWVzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLiBUaGlzIGZ1bmN0aW9uCi0gICAgICAgICAgc2hvdWxkIGFsc28gYmUgY2FsbGVkIGZyb20gX2luaXQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE1ha2Ugc3VyZSBhbiBlbGVtZW50IGZvcmdldHMgPGVtcGhhc2lzPmV2ZXJ5dGhpbmc8L2VtcGhhc2lzPgotICAgICAgICAgIGFib3V0IGl0cyBjb250YWluZWQgc3RyZWFtIHdoZW4gZ29pbmcgZnJvbQotICAgICAgICAgIDxjbGFzc25hbWU+UEFVU0VEPC9jbGFzc25hbWU+IHRvIDxjbGFzc25hbWU+UkVBRFk8L2NsYXNzbmFtZT4uIEluCi0gICAgICAgICAgPGNsYXNzbmFtZT5SRUFEWTwvY2xhc3NuYW1lPiwgYWxsIHN0cmVhbSBzdGF0ZXMgYXJlIHJlc2V0LiBBbgotICAgICAgICAgIGVsZW1lbnQgdGhhdCBnb2VzIGZyb20gPGNsYXNzbmFtZT5QQVVTRUQ8L2NsYXNzbmFtZT4gdG8KLSAgICAgICAgICA8Y2xhc3NuYW1lPlJFQURZPC9jbGFzc25hbWU+IGFuZCBiYWNrIHRvCi0gICAgICAgICAgPGNsYXNzbmFtZT5QQVVTRUQ8L2NsYXNzbmFtZT4gc2hvdWxkIHN0YXJ0IHJlYWRpbmcgdGhlCi0gICAgICAgICAgc3RyZWFtIGZyb20gdGhlIHN0YXJ0IGFnYWluLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBQZW9wbGUgdGhhdCB1c2UgPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gZm9yIHRlc3RpbmcgaGF2ZQotICAgICAgICAgIHRoZSB0ZW5kZW5jeSB0byBub3QgY2FyZSBhYm91dCBjbGVhbmluZyB1cC4gVGhpcyBpcwotICAgICAgICAgIDxlbXBoYXNpcz53cm9uZzwvZW1waGFzaXM+LiBBbiBlbGVtZW50IHNob3VsZCBiZSB0ZXN0ZWQgdXNpbmcKLSAgICAgICAgICB2YXJpb3VzIGFwcGxpY2F0aW9ucywgd2hlcmUgdGVzdGluZyBub3Qgb25seSBtZWFucyB0byA8cXVvdGU+bWFrZQotICAgICAgICAgIHN1cmUgaXQgZG9lc24ndCBjcmFzaDwvcXVvdGU+LCBidXQgYWxzbyB0byB0ZXN0IGZvciBtZW1vcnkgbGVha3MKLSAgICAgICAgICB1c2luZyB0b29scyBzdWNoIGFzIDxjb21tYW5kPnZhbGdyaW5kPC9jb21tYW5kPi4gRWxlbWVudHMgaGF2ZSB0bwotICAgICAgICAgIGJlIHJldXNhYmxlIGluIGEgcGlwZWxpbmUgYWZ0ZXIgaGF2aW5nIGJlZW4gcmVzZXQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWNoZWNrbGlzdC1kZWJ1ZyI+Ci0gICAgPHRpdGxlPkRlYnVnZ2luZzwvdGl0bGU+Ci0KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBFbGVtZW50cyBzaG91bGQgPGVtcGhhc2lzPm5ldmVyPC9lbXBoYXNpcz4gdXNlIHRoZWlyIHN0YW5kYXJkCi0gICAgICAgICAgb3V0cHV0IGZvciBkZWJ1Z2dpbmcgKHVzaW5nIGZ1bmN0aW9ucyBzdWNoIGFzIDxmdW5jdGlvbj5wcmludGYKLSAgICAgICAgICAoKTwvZnVuY3Rpb24+IG9yIDxmdW5jdGlvbj5nX3ByaW50ICgpPC9mdW5jdGlvbj4pLiBJbnN0ZWFkLAotICAgICAgICAgIGVsZW1lbnRzIHNob3VsZCB1c2UgdGhlIGxvZ2dpbmcgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5ICZHU3RyZWFtZXI7LAotICAgICAgICAgIG5hbWVkIDxmdW5jdGlvbj5HU1RfREVCVUcgKCk8L2Z1bmN0aW9uPiwKLSAgICAgICAgICA8ZnVuY3Rpb24+R1NUX0xPRyAoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+R1NUX0lORk8gKCk8L2Z1bmN0aW9uPiwKLSAgICAgICAgICA8ZnVuY3Rpb24+R1NUX1dBUk5JTkcgKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgICAgICA8ZnVuY3Rpb24+R1NUX0VSUk9SICgpPC9mdW5jdGlvbj4uIFRoZSB2YXJpb3VzIGxvZ2dpbmcgbGV2ZWxzIGNhbgotICAgICAgICAgIGJlIHR1cm5lZCBvbiBhbmQgb2ZmIGF0IHJ1bnRpbWUgYW5kIGNhbiB0aHVzIGJlIHVzZWQgZm9yIHNvbHZpbmcKLSAgICAgICAgICBpc3N1ZXMgYXMgdGhleSB0dXJuIHVwLiBJbnN0ZWFkIG9mIDxmdW5jdGlvbj5HU1RfTE9HICgpPC9mdW5jdGlvbj4KLSAgICAgICAgICAoYXMgYW4gZXhhbXBsZSksIHlvdSBjYW4gYWxzbyB1c2UgPGZ1bmN0aW9uPkdTVF9MT0dfT0JKRUNUCi0gICAgICAgICAgKCk8L2Z1bmN0aW9uPiB0byBwcmludCB0aGUgb2JqZWN0IHRoYXQgeW91J3JlIGxvZ2dpbmcgb3V0cHV0IGZvci4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWRlYWxseSwgZWxlbWVudHMgc2hvdWxkIHVzZSB0aGVpciBvd24gZGVidWdnaW5nIGNhdGVnb3J5LiBNb3N0Ci0gICAgICAgICAgZWxlbWVudHMgdXNlIHRoZSBmb2xsb3dpbmcgY29kZSB0byBkbyB0aGF0OgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKG15ZWxlbWVudF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBteWVsZW1lbnRfZGVidWcKLQotWy4uXQotCi1zdGF0aWMgdm9pZAotZ3N0X215ZWxlbWVudF9jbGFzc19pbml0IChHc3RNeWVsZW1lbnRDbGFzcyAqa2xhc3MpCi17Ci1bLi5dCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChteWVsZW1lbnRfZGVidWcsICJteWVsZW1lbnQiLAotCQkJICAgMCwgIk15IG93biBlbGVtZW50Iik7Ci19Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEF0IHJ1bnRpbWUsIHlvdSBjYW4gdHVybiBvbiBkZWJ1Z2dpbmcgdXNpbmcgdGhlIGNvbW1hbmRsaW5lCi0gICAgICAgICAgb3B0aW9uIDxjb21tYW5kPi0tZ3N0LWRlYnVnPW15ZWxlbWVudDo1PC9jb21tYW5kPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRWxlbWVudHMgc2hvdWxkIHVzZSBHU1RfREVCVUdfRlVOQ1BUUiB3aGVuIHNldHRpbmcgcGFkIGZ1bmN0aW9ucyBvcgotICAgICAgICAgIG92ZXJyaWRpbmcgZWxlbWVudCBjbGFzcyBtZXRob2RzLCBmb3IgZXhhbXBsZToKLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1nc3RfcGFkX3NldF9ldmVudF9mdW5jIChteWVsZW1lbnQtPnNyY3BhZCwKLSAgICBHU1RfREVCVUdfRlVOQ1BUUiAobXlfZWxlbWVudF9zcmNfZXZlbnQpKTsKLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIFRoaXMgbWFrZXMgZGVidWcgb3V0cHV0IG11Y2ggZWFzaWVyIHRvIHJlYWQgbGF0ZXIgb24uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEVsZW1lbnRzIHRoYXQgYXJlIGFpbWVkIGZvciBpbmNsdXNpb24gaW50byBvbmUgb2YgdGhlIEdTdHJlYW1lcgotICAgICAgICAgIG1vZHVsZXMgc2hvdWxkIGVuc3VyZSBjb25zaXN0ZW50IG5hbWluZyBvZiB0aGUgZWxlbWVudCBuYW1lLAotICAgICAgICAgIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uIG5hbWVzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGVsZW1lbnQgdHlwZSBpcwotICAgICAgICAgIEdzdFllbGxvd0Zvb0RlYywgZnVuY3Rpb25zIHNob3VsZCBiZSBwcmVmaXhlZCB3aXRoCi0gICAgICAgICAgZ3N0X3llbGxvd19mb29fZGVjXyBhbmQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHJlZ2lzdGVyZWQKLSAgICAgICAgICBhcyAneWVsbG93Zm9vZGVjJy4gU2VwYXJhdGUgd29yZHMgc2hvdWxkIGJlIHNlcGFyYXRlIGluIHRoaXMgc2NoZW1lLAotICAgICAgICAgIHNvIGl0IHNob3VsZCBiZSBHc3RGb29EZWMgYW5kIGdzdF9mb29fZGVjLCBhbmQgbm90IEdzdEZvb2RlYyBhbmQKLSAgICAgICAgICBnc3RfZm9vZGVjLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1jaGVja2xpc3QtcXVlcnkiPgotICAgIDx0aXRsZT5RdWVyeWluZywgZXZlbnRzIGFuZCB0aGUgbGlrZTwvdGl0bGU+Ci0KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbGwgZWxlbWVudHMgdG8gd2hpY2ggaXQgYXBwbGllcyAoc291cmNlcywgc2lua3MsIGRlbXV4ZXJzKQotICAgICAgICAgIHNob3VsZCBpbXBsZW1lbnQgcXVlcnkgZnVuY3Rpb25zIG9uIHRoZWlyIHBhZHMsIHNvIHRoYXQKLSAgICAgICAgICBhcHBsaWNhdGlvbnMgYW5kIG5laWdoYm91ciBlbGVtZW50cyBjYW4gcmVxdWVzdCB0aGUgY3VycmVudAotICAgICAgICAgIHBvc2l0aW9uLCB0aGUgc3RyZWFtIGxlbmd0aCAoaWYga25vd24pIGFuZCBzbyBvbi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRWxlbWVudHMgc2hvdWxkIG1ha2Ugc3VyZSB0aGV5IGZvcndhcmQgZXZlbnRzIHRoZXkgZG8gbm90Ci0gICAgICAgICAgaGFuZGxlIHdpdGggZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpIGluc3RlYWQgb2YKLSAgICAgICAgICBqdXN0IGRyb3BwaW5nIHRoZW0uIEV2ZW50cyBzaG91bGQgbmV2ZXIgYmUgZHJvcHBlZCB1bmxlc3MKLSAgICAgICAgICBzcGVjaWZpY2FsbHkgaW50ZW5kZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEVsZW1lbnRzIHNob3VsZCBtYWtlIHN1cmUgdGhleSBmb3J3YXJkIHF1ZXJpZXMgdGhleSBkbyBub3QKLSAgICAgICAgICBoYW5kbGUgd2l0aCBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSkgaW5zdGVhZCBvZgotICAgICAgICAgIGp1c3QgZHJvcHBpbmcgdGhlbS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9zZWN0MT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tY2hlY2tsaXN0LXRlc3RpbmciPgotICAgIDx0aXRsZT5UZXN0aW5nIHlvdXIgZWxlbWVudDwvdGl0bGU+Ci0KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8Y29tbWFuZD5nc3QtbGF1bmNoPC9jb21tYW5kPiBpcyA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYSBnb29kCi0gICAgICAgICAgdG9vbCB0byBzaG93IHRoYXQgeW91ciBlbGVtZW50IGlzIGZpbmlzaGVkLiBBcHBsaWNhdGlvbnMgc3VjaCBhcwotICAgICAgICAgIFJoeXRobWJveCBhbmQgVG90ZW0gKGZvciBHTk9NRSkgb3IgQW1hcm9LIChmb3IgS0RFKQotICAgICAgICAgIDxlbXBoYXNpcz5hcmU8L2VtcGhhc2lzPi4gPGNvbW1hbmQ+Z3N0LWxhdW5jaDwvY29tbWFuZD4gd2lsbCBub3QKLSAgICAgICAgICB0ZXN0IHZhcmlvdXMgdGhpbmdzIHN1Y2ggYXMgcHJvcGVyIGNsZWFuLXVwIG9uIHJlc2V0LCBldmVudAotICAgICAgICAgIGhhbmRsaW5nLCBxdWVyeWluZyBhbmQgc28gb24uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFBhcnNlcnMgYW5kIGRlbXV4ZXJzIHNob3VsZCBtYWtlIHN1cmUgdG8gY2hlY2sgdGhlaXIgaW5wdXQuIElucHV0Ci0gICAgICAgICAgY2Fubm90IGJlIHRydXN0ZWQuIFByZXZlbnQgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93cyBhbmQgdGhlIGxpa2UuCi0gICAgICAgICAgRmVlbCBmcmVlIHRvIGVycm9yIG91dCBvbiB1bnJlY292ZXJhYmxlIHN0cmVhbSBlcnJvcnMuIFRlc3QgeW91cgotICAgICAgICAgIGRlbXV4ZXIgdXNpbmcgc3RyZWFtIGNvcnJ1cHRpb24gZWxlbWVudHMgc3VjaCBhcwotICAgICAgICAgIDxjbGFzc25hbWU+YnJlYWtteWRhdGE8L2NsYXNzbmFtZT4gKGluY2x1ZGVkIGluIGdzdC1wbHVnaW5zKS4gSXQKLSAgICAgICAgICB3aWxsIHJhbmRvbWx5IGluc2VydCwgZGVsZXRlIGFuZCBtb2RpZnkgYnl0ZXMgaW4gYSBzdHJlYW0sIGFuZCBpcwotICAgICAgICAgIHRoZXJlZm9yZSBhIGdvb2QgdGVzdCBmb3Igcm9idXN0bmVzcy4gSWYgeW91ciBlbGVtZW50IGNyYXNoZXMKLSAgICAgICAgICB3aGVuIGFkZGluZyB0aGlzIGVsZW1lbnQsIHlvdXIgZWxlbWVudCBuZWVkcyBmaXhpbmcuIElmIGl0IGVycm9ycwotICAgICAgICAgIG91dCBwcm9wZXJseSwgaXQncyBnb29kIGVub3VnaC4gSWRlYWxseSwgaXQnZCBqdXN0IGNvbnRpbnVlIHRvCi0gICAgICAgICAgd29yayBhbmQgZm9yd2FyZCBkYXRhIGFzIG11Y2ggYXMgcG9zc2libGUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIERlbXV4ZXJzIHNob3VsZCBub3QgYXNzdW1lIHRoYXQgc2Vla2luZyB3b3Jrcy4gQmUgcHJlcGFyZWQgdG8KLSAgICAgICAgICB3b3JrIHdpdGggdW5zZWVrYWJsZSBpbnB1dCBzdHJlYW1zIChlLmcuIG5ldHdvcmsgc291cmNlcykgYXMKLSAgICAgICAgICB3ZWxsLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBTb3VyY2VzIGFuZCBzaW5rcyBzaG91bGQgYmUgcHJlcGFyZWQgdG8gYmUgYXNzaWduZWQgYW5vdGhlciBjbG9jawotICAgICAgICAgIHRoZW4gdGhlIG9uZSB0aGV5IGV4cG9zZSB0aGVtc2VsdmVzLiBBbHdheXMgdXNlIHRoZSBwcm92aWRlZCBjbG9jawotICAgICAgICAgIGZvciBzeW5jaHJvbml6YXRpb24sIGVsc2UgeW91J2xsIGdldCBBL1Ygc3luYyBpc3N1ZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9hcHBlbmRpeC1saWNlbnNpbmcueG1sIGIvZG9jcy9wd2cvYXBwZW5kaXgtbGljZW5zaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxZDE5Mi4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9hcHBlbmRpeC1saWNlbnNpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItbGljZW5zaW5nLWFkdmlzb3J5Ij4KLSAgPHRpdGxlPkdTdHJlYW1lciBsaWNlbnNpbmc8L3RpdGxlPgotPHNlY3QxIGlkPSJzZWN0aW9uLWFwcGxpY2F0aW9uLWxpY2Vuc2luZyI+Ci0gIDx0aXRsZT5Ib3cgdG8gbGljZW5zZSB0aGUgY29kZSB5b3Ugd3JpdGUgZm9yIDxhcHBsaWNhdGlvbj5HU3RyZWFtZXI8L2FwcGxpY2F0aW9uPjwvdGl0bGU+Ci08cGFyYT4KLUdTdHJlYW1lciBpcyBhIHBsdWdpbi1iYXNlZCBmcmFtZXdvcmsgbGljZW5zZWQgdW5kZXIgdGhlIExHUEwuIFRoZSByZWFzb24gCi1mb3IgdGhpcyBjaG9pY2UgaW4gbGljZW5zaW5nIGlzIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5b25lIGNhbiB1c2UgR1N0cmVhbWVyIAotdG8gYnVpbGQgYXBwbGljYXRpb25zIHVzaW5nIGxpY2Vuc2VzIG9mIHRoZWlyIGNob2ljZS4KLTwvcGFyYT4KLTxwYXJhPgotVG8ga2VlcCB0aGlzIHBvbGljeSB2aWFibGUsIHRoZSBHU3RyZWFtZXIgY29tbXVuaXR5IGhhcyBtYWRlIGEgZmV3IAotbGljZW5zaW5nIHJ1bGVzIGZvciBjb2RlIHRvIGJlIGluY2x1ZGVkIGluIEdTdHJlYW1lcidzIGNvcmUgb3IgR1N0cmVhbWVyJ3MgCi1vZmZpY2lhbCBtb2R1bGVzLCBsaWtlIG91ciBwbHVnaW4gcGFja2FnZXMuIFdlIHJlcXVpcmUgdGhhdCBhbGwgY29kZSBnb2luZyAKLWludG8gb3VyIGNvcmUgcGFja2FnZSBpcyBMR1BMLiBGb3IgdGhlIHBsdWdpbiBjb2RlLCB3ZSByZXF1aXJlIHRoZSB1c2Ugb2YgCi10aGUgTEdQTCBmb3IgYWxsIHBsdWdpbnMgd3JpdHRlbiBmcm9tIHNjcmF0Y2ggb3IgbGlua2luZyB0byBleHRlcm5hbCAKLWxpYnJhcmllcy4gVGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgd2hlbiBwbHVnaW5zIGNvbnRhaW4gb2xkZXIgY29kZSAKLXVuZGVyIG1vcmUgbGliZXJhbCBsaWNlbnNlcyAobGlrZSB0aGUgTVBMIG9yIEJTRCkuIFRoZXkgY2FuIHVzZSB0aG9zZSAKLWxpY2Vuc2VzIGluc3RlYWQgYW5kIHdpbGwgc3RpbGwgYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uLiBXZSBkbyBub3QgCi1hY2NlcHQgR1BMIGNvZGUgdG8gYmUgYWRkZWQgdG8gb3VyIHBsdWdpbnMgbW9kdWxlLCBidXQgd2UgZG8gYWNjZXB0IAotTEdQTC1saWNlbnNlZCBwbHVnaW5zIHVzaW5nIGFuIGV4dGVybmFsIEdQTCBsaWJyYXJ5LiBUaGUgcmVhc29uIGZvciAKLWRlbWFuZGluZyBwbHVnaW5zIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMLCBldmVuIHdoZW4gdXNpbmcgYSBHUEwgCi1saWJyYXJ5LCBpcyB0aGF0IG90aGVyIGRldmVsb3BlcnMgbWlnaHQgd2FudCB0byB1c2UgdGhlIHBsdWdpbiBjb2RlIGFzIGEgCi10ZW1wbGF0ZSBmb3IgcGx1Z2lucyBsaW5raW5nIHRvIG5vbi1HUEwgbGlicmFyaWVzLgotPC9wYXJhPgotPHBhcmE+Ci1XZSBhbHNvIHBsYW4gb24gc3BsaXR0aW5nIG91dCB0aGUgcGx1Z2lucyB1c2luZyBHUEwgbGlicmFyaWVzIGludG8gYSAKLXNlcGFyYXRlIHBhY2thZ2UgZXZlbnR1YWxseSBhbmQgaW1wbGVtZW50IGEgc3lzdGVtIHdoaWNoIG1ha2VzIHN1cmUgYW4gCi1hcHBsaWNhdGlvbiB3aWxsIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyB0aGVzZSBwbHVnaW5zIHVubGVzcyBpdCB1c2VzIHNvbWUgCi1zcGVjaWFsIGNvZGUgdG8gZG8gc28uIFRoZSBwb2ludCBvZiB0aGlzIGlzIG5vdCB0byBibG9jayBHUEwtbGljZW5zZWQgCi1wbHVnaW5zIGZyb20gYmVpbmcgdXNlZCBhbmQgZGV2ZWxvcGVkLCBidXQgdG8gbWFrZSBzdXJlIHBlb3BsZSBhcmUgbm90IAotdW5pbnRlbnRpb25hbGx5IHZpb2xhdGluZyB0aGUgR1BMIGxpY2Vuc2Ugb2Ygc2FpZCBwbHVnaW5zLiAKLTwvcGFyYT4KLTxwYXJhPgotVGhpcyBhZHZpc29yeSBpcyBwYXJ0IG9mIGEgYmlnZ2VyIGFkdmlzb3J5IHdpdGggYSBGQVEgd2hpY2ggeW91IGNhbiBmaW5kCi1vbiB0aGUgPHVsaW5rIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG9jdW1lbnRhdGlvbi9saWNlbnNpbmcuaHRtbCI+R1N0cmVhbWVyIHdlYnNpdGU8L3VsaW5rPgotPC9wYXJhPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYXBwZW5kaXgtcG9ydGluZy54bWwgYi9kb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI0NTdhOC4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9hcHBlbmRpeC1wb3J0aW5nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1wb3J0aW5nIj4KLSAgPHRpdGxlPlBvcnRpbmcgMC44IHBsdWctaW5zIHRvIDAuMTA8L3RpdGxlPgotICA8cGFyYT4KLSAgICBUaGlzIHNlY3Rpb24gb2YgdGhlIGFwcGVuZGl4IHdpbGwgZGlzY3VzcyBzaG9ydGx5IHdoYXQgY2hhbmdlcyB0bwotICAgIHBsdWdpbnMgd2lsbCBiZSBuZWVkZWQgdG8gcXVpY2tseSBhbmQgY29udmVuaWVudGx5IHBvcnQgbW9zdAotICAgIGFwcGxpY2F0aW9ucyBmcm9tICZHU3RyZWFtZXI7LTAuOCB0byAmR1N0cmVhbWVyOy0wLjEwLCB3aXRoIHJlZmVyZW5jZXMKLSAgICB0byB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgaW4gdGhpcyBQbHVnaW4gV3JpdGVyJ3MgR3VpZGUgd2hlcmUgbmVlZGVkLgotICAgIFdpdGggdGhpcyBsaXN0LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcG9ydCBtb3N0IHBsdWdpbnMgdG8KLSAgICAmR1N0cmVhbWVyOy0wLjEwIGluIGxlc3MgdGhhbiBhIGRheS4gRXhjZXB0aW9ucyBhcmUgZWxlbWVudHMgdGhhdCB3aWxsCi0gICAgcmVxdWlyZSBhIGJhc2UgY2xhc3MgaW4gMC4xMCAoc291cmNlcywgc2lua3MpLCBpbiB3aGljaCBjYXNlIGl0IG1heSB0YWtlCi0gICAgYSBsb3QgbG9uZ2VyLCBkZXBlbmRpbmcgb24gdGhlIGNvZGVyJ3Mgc2tpbGxzIChob3dldmVyLCB3aGVuIHVzaW5nIHRoZQotICAgIDxjbGFzc25hbWU+R3N0QmFzZVNpbms8L2NsYXNzbmFtZT4gYW5kIDxjbGFzc25hbWU+R3N0QmFzZVNyYzwvY2xhc3NuYW1lPgotICAgIGJhc2UtY2xhc3NlcywgaXQgc2hvdWxkbid0IGJlIGFsbCB0b28gYmFkKSwgYW5kIGVsZW1lbnRzIHJlcXVpcmluZwotICAgIHRoZSBkZXByZWNhdGVkIGJ5dGVzdHJlYW0gaW50ZXJmYWNlLCB3aGljaCBzaG91bGQgdGFrZSAxLTIgZGF5cyB3aXRoCi0gICAgcmFuZG9tIGFjY2Vzcy4gVGhlIHNjaGVkdWxpbmcgcGFydHMgb2YgbXV4ZXJzIHdpbGwgYWxzbyBuZWVkIGEgcmV3cml0ZSwKLSAgICB3aGljaCB3aWxsIHRha2UgYWJvdXQgdGhlIHNhbWUgYW1vdW50IG9mIHRpbWUuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tcG9ydGluZy1vYmplY3RzIj4KLSAgICA8dGl0bGU+TGlzdCBvZiBjaGFuZ2VzPC90aXRsZT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgRGlzY29udCBldmVudHMgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IG5ld3NlZ21lbnQgZXZlbnRzLiBJbiAwLjEwLCBpdCBpcwotICAgICAgICBlc3NlbnRpYWwgdGhhdCB5b3Ugc2VuZCBhIG5ld3NlZ21lbnQgZXZlbnQgZG93bnN0cmVhbSBiZWZvcmUgeW91IHNlbmQgCi0gICAgICAgIHlvdXIgZmlyc3QgYnVmZmVyIChpbiAwLjggdGhlIHNjaGVkdWxlciB3b3VsZCBpbnZlbnQgZGlzY29udCBldmVudHMgaWYKLSAgICAgICAgeW91IGZvcmdvdCB0aGVtLCBpbiAwLjEwIHRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIEluIDAuMTAsIGJ1ZmZlcnMgaGF2ZSBjYXBzIGF0dGFjaGVkIHRvIHRoZW0uIEVsZW1lbnRzIHNob3VsZCBhbGxvY2F0ZQotICAgICAgICBuZXcgYnVmZmVycyB3aXRoIDxmdW5jdGlvbj5nc3RfcGFkX2FsbG9jX2J1ZmZlciAoKTwvZnVuY3Rpb24+LiBTZWUKLSAgICAgICAgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1uZWdvdGlhdGlvbiIvPiBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBNb3N0IGZ1bmN0aW9ucyByZXR1cm5pbmcgYW4gb2JqZWN0IG9yIGFuIG9iamVjdCBwcm9wZXJ0eSBoYXZlCi0gICAgICAgICAgYmVlbiBjaGFuZ2VkIHRvIHJldHVybiBpdHMgb3duIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBhIGNvbnN0YW50Ci0gICAgICAgICAgcmVmZXJlbmNlIG9mIHRoZSBvbmUgb3duZWQgYnkgdGhlIG9iamVjdCBpdHNlbGYuIFRoZSByZWFzb24gZm9yCi0gICAgICAgICAgdGhpcyBjaGFuZ2UgaXMgcHJpbWFyaWx5IHRocmVhZC1zYWZldHkuIFRoaXMgbWVhbnMgZWZmZWN0aXZlbHkKLSAgICAgICAgICB0aGF0IHJldHVybiB2YWx1ZXMgb2YgZnVuY3Rpb25zIHN1Y2ggYXMKLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X2VsZW1lbnRfZ2V0X3BhZCAoKTwvZnVuY3Rpb24+LAotICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX2dldF9uYW1lICgpPC9mdW5jdGlvbj4sCi0gICAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfZ2V0X3BhcmVudCAoKTwvZnVuY3Rpb24+LAotICAgICAgICAgIDxmdW5jdGlvbj5nc3Rfb2JqZWN0X2dldF9wYXJlbnQgKCk8L2Z1bmN0aW9uPiwKLSAgICAgICAgICBhbmQgbWFueSBtb3JlIGxpa2UgdGhlc2UKLSAgICAgICAgICBoYXZlIHRvIGJlIGZyZWUnZWQgb3IgdW5yZWZlcmVuY2VkIGFmdGVyIHVzZS4gQ2hlY2sgdGhlIEFQSQotICAgICAgICAgIHJlZmVyZW5jZXMgb2YgZWFjaCBmdW5jdGlvbiB0byBrbm93IGZvciBzdXJlIHdoZXRoZXIgcmV0dXJuCi0gICAgICAgICAgdmFsdWVzIHNob3VsZCBiZSBmcmVlJ2VkIG9yIG5vdC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gMC44LCBzY2hlZHVsaW5nIGNvdWxkIGhhcHBlbiBpbiBhbnkgd2F5LiBTb3VyY2UgZWxlbWVudHMgY291bGQKLSAgICAgICAgICBiZSA8ZnVuY3Rpb24+X2dldCAoKTwvZnVuY3Rpb24+LWJhc2VkIG9yIDxmdW5jdGlvbj5fbG9vcAotICAgICAgICAgICgpPC9mdW5jdGlvbj4tYmFzZWQsIGFuZCBhbnkgb3RoZXIgZWxlbWVudCBjb3VsZCBiZSAgPGZ1bmN0aW9uPl9jaGFpbgotICAgICAgICAgICgpPC9mdW5jdGlvbj4tYmFzZWQgb3IgPGZ1bmN0aW9uPl9sb29wICgpPC9mdW5jdGlvbj4tYmFzZWQsIHdpdGgKLSAgICAgICAgICBubyBsaW1pdGF0aW9ucy4gU2NoZWR1bGluZyBpbiAwLjEwIGlzIHNpbXBsZXIgZm9yIHRoZSBzY2hlZHVsZXIsCi0gICAgICAgICAgYW5kIHRoZSBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGRvIHNvbWUgbW9yZSB3b3JrLiBQYWRzIGdldAotICAgICAgICAgIGFzc2lnbmVkIGEgc2NoZWR1bGluZyBtb2RlLCBiYXNlZCBvbiB3aGljaCB0aGV5IGNhbiBlaXRoZXIKLSAgICAgICAgICBvcGVyYXRlIGluIHJhbmRvbSBhY2Nlc3MtbW9kZSwgaW4gcGlwZWxpbmUgZHJpdmluZyBtb2RlIG9yIGluCi0gICAgICAgICAgcHVzaC1tb2RlLiBhbGwgdGhpcyBpcyBkb2N1bWVudGVkIGluIGRldGFpbCBpbiA8eHJlZgotICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItc2NoZWR1bGluZyIvPi4gQXMgYSByZXN1bHQgb2YgdGhpcywgdGhlIGJ5dGVzdHJlYW0KLSAgICAgICAgICBvYmplY3Qgbm8gbG9uZ2VyIGV4aXN0cy4gRWxlbWVudHMgcmVxdWlyaW5nIGJ5dGUtbGV2ZWwgYWNjZXNzIHNob3VsZAotICAgICAgICAgIG5vdyB1c2UgcmFuZG9tIGFjY2VzcyBvbiB0aGVpciBzaW5rcGFkcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTmVnb3RpYXRpb24gaXMgYXN5bmNocm9ub3VzLiBUaGlzIG1lYW5zIHRoYXQgZG93bnN0cmVhbSBuZWdvdGlhdGlvbgotICAgICAgICAgIGlzIGRvbmUgYXMgZGF0YSBjb21lcyBpbiBhbmQgdXBzdHJlYW0gbmVnb3RpYXRpb24gaXMgZG9uZSB3aGVuZXZlcgotICAgICAgICAgIHJlbmVnb3RpYXRpb24gaXMgcmVxdWlyZWQuIEFsbCBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gCi0gICAgICAgICAgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1uZWdvdGlhdGlvbiIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRm9yIGFzIGZhciBhcyBwb3NzaWJsZSwgZWxlbWVudHMgc2hvdWxkIHRyeSB0byB1c2UgZXhpc3RpbmcgYmFzZQotICAgICAgICAgIGNsYXNzZXMgaW4gMC4xMC4gU2luayBhbmQgc291cmNlIGVsZW1lbnRzLCBmb3IgZXhhbXBsZSwgY291bGQgZGVyaXZlCi0gICAgICAgICAgZnJvbSA8Y2xhc3NuYW1lPkdzdEJhc2VTcmM8L2NsYXNzbmFtZT4gYW5kCi0gICAgICAgICAgPGNsYXNzbmFtZT5Hc3RCYXNlU2luazwvY2xhc3NuYW1lPi4gQXVkaW8gc2lua3Mgb3Igc291cmNlcyBjb3VsZCBldmVuCi0gICAgICAgICAgZGVyaXZlIGZyb20gYXVkaW8tc3BlY2lmaWMgYmFzZSBjbGFzc2VzLiBBbGwgZXhpc3RpbmcgYmFzZSBjbGFzc2VzCi0gICAgICAgICAgaGF2ZSBiZWVuIGRpc2N1c3NlZCBpbiA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLW90aGVyLWJhc2UiLz4gYW5kIHRoZQotICAgICAgICAgIG5leHQgZmV3IGNoYXB0ZXJzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJbiAwLjEwLCBldmVudCBoYW5kbGluZyBhbmQgYnVmZmVycyBhcmUgc2VwYXJhdGVkIG9uY2UgYWdhaW4uIFRoaXMKLSAgICAgICAgICBtZWFucyB0aGF0IGluIG9yZGVyIHRvIHJlY2VpdmUgZXZlbnRzLCBvbmUgbm8gbG9uZ2VyIGhhcyB0byBzZXQgdGhlCi0gICAgICAgICAgPGNsYXNzbmFtZT5HU1RfRkxBR19FVkVOVF9BV0FSRTwvY2xhc3NuYW1lPiBmbGFnLCBidXQgY2FuIHNpbXBseQotICAgICAgICAgIHNldCBhbiBldmVudCBoYW5kbGluZyBmdW5jdGlvbiBvbiB0aGUgZWxlbWVudCdzIHNpbmtwYWQocyksIHVzaW5nCi0gICAgICAgICAgIHRoZSBmdW5jdGlvbiA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKCk8L2Z1bmN0aW9uPi4gVGhlCi0gICAgICAgICAgPGZ1bmN0aW9uPl9jaGFpbiAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIHdpbGwgb25seSByZWNlaXZlIGJ1ZmZlcnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFsdGhvdWdoIGNvcmUgd2lsbCB3cmFwIG1vc3QgdGhyZWFkaW5nLXJlbGF0ZWQgbG9ja2luZyBmb3IgeW91IChlLmcuCi0gICAgICAgICAgaXQgdGFrZXMgdGhlIHN0cmVhbSBsb2NrIGJlZm9yZSBjYWxsaW5nIHlvdXIgZGF0YSBoYW5kbGluZwotICAgICAgICAgIGZ1bmN0aW9ucyksIHlvdSBhcmUgc3RpbGwgcmVzcG9uc2libGUgZm9yIGxvY2tpbmcgYXJvdW5kIGNlcnRhaW4KLSAgICAgICAgICBmdW5jdGlvbnMsIGUuZy4gb2JqZWN0IHByb3BlcnRpZXMuIEJlIHN1cmUgdG8gbG9jayBwcm9wZXJseSBoZXJlLAotICAgICAgICAgIHNpbmNlIGFwcGxpY2F0aW9ucyB3aWxsIGNoYW5nZSB0aG9zZSBwcm9wZXJ0aWVzIGluIGEgZGlmZmVyZW50IHRocmVhZAotICAgICAgICAgIHRoYW4gdGhlIHRocmVhZCB3aGljaCBkb2VzIHRoZSBhY3R1YWwgZGF0YSBwYXNzaW5nISBZb3UgY2FuIHVzZSB0aGUKLSAgICAgICAgICA8ZnVuY3Rpb24+R1NUX09CSkVDVF9MT0NLICgpPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5HU1RfT0JKRUNUX1VOTE9DSwotICAgICAgICAgICgpPC9mdW5jdGlvbj4gaGVscGVycyBpbiBtb3N0IGNhc2VzLCBmb3J0dW5hdGVseSwgd2hpY2ggZ3JhYnMgdGhlCi0gICAgICAgICAgZGVmYXVsdCBwcm9wZXJ0eSBsb2NrIG9mIHRoZSBlbGVtZW50LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8Y2xhc3NuYW1lPkdzdFZhbHVlRml4ZWRMaXN0PC9jbGFzc25hbWU+IGFuZCBhbGwKLSAgICAgICAgICA8ZnVuY3Rpb24+Kl9maXhlZF9saXN0XyogKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgd2VyZSByZW5hbWVkIHRvCi0gICAgICAgICAgPGNsYXNzbmFtZT5Hc3RWYWx1ZUFycmF5PC9jbGFzc25hbWU+IGFuZCA8ZnVuY3Rpb24+Kl9hcnJheV8qCi0gICAgICAgICAgKCk8L2Z1bmN0aW9uPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIHNlbWFudGljcyBvZiA8c3ltYm9sPkdTVF9TVEFURV9QQVVTRUQ8L3N5bWJvbD4gYW5kIAotICAgICAgICAgIDxzeW1ib2w+R1NUX1NUQVRFX1BMQVlJTkc8L3N5bWJvbD4gaGF2ZSBjaGFuZ2VkIGZvciBlbGVtZW50cyB0aGF0Ci0gICAgICAgICAgYXJlIG5vdCBzaW5rIGVsZW1lbnRzLiBOb24tc2luayBlbGVtZW50cyBuZWVkIHRvIGJlIGFibGUgdG8gYWNjZXB0Ci0gICAgICAgICAgYW5kIHByb2Nlc3MgZGF0YSBhbHJlYWR5IGluIHRoZSA8c3ltYm9sPkdTVF9TVEFURV9QQVVTRUQ8L3N5bWJvbD4gCi0gICAgICAgICAgc3RhdGUgbm93IChpLmUuIHdoZW4gcHJlcm9sbGluZyB0aGUgcGlwZWxpbmUpLiBNb3JlIGRldGFpbHMgY2FuIGJlCi0gICAgICAgICAgZm91bmQgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1zdGF0ZW1hbmFnZS1zdGF0ZXMiLz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIElmIHlvdXIgcGx1Z2luJ3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGhhc24ndCBiZWVuIHN1cGVyc2VkZWQgYnkKLSAgICAgICAgICB2aXJ0dWFsIHN0YXJ0KCkgYW5kIHN0b3AoKSBtZXRob2RzIG9mIG9uZSBvZiB0aGUgbmV3IGJhc2UgY2xhc3NlcywKLSAgICAgICAgICB0aGVuIHlvdXIgcGx1Z2luJ3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9ucyBtYXkgbmVlZCB0byBiZSBjaGFuZ2VkIGluIAotICAgICAgICAgIG9yZGVyIHRvIHNhZmVseSBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgYnkgbXVsdGlwbGUgdGhyZWFkcy4gWW91ciAKLSAgICAgICAgICB0eXBpY2FsIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiB3aWxsIG5vdyBmaXJzdCBoYW5kbGUgdXB3YXJkcyBzdGF0ZSAKLSAgICAgICAgICBjaGFuZ2VzLCB0aGVuIGNoYWluIHVwIHRvIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gb2YgdGhlIHBhcmVudCAKLSAgICAgICAgICBjbGFzcyAodXN1YWxseSBHc3RFbGVtZW50Q2xhc3MgaW4gdGhlc2UgY2FzZXMpLCBhbmQgb25seSB0aGVuIGhhbmRsZQotICAgICAgICAgIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2VzLiBTZWUgdGhlIHZvcmJpcyBkZWNvZGVyIHBsdWdpbiBpbgotICAgICAgICAgIGdzdC1wbHVnaW5zLWJhc2UgZm9yIGFuIGV4YW1wbGUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGluIHRoZSBjYXNlIG9mIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2VzCi0gICAgICAgICAgeW91IGRvbid0IHdhbnQgdG8gZGVzdHJveSBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoaWxlIHlvdXIgcGx1Z2luJ3MgCi0gICAgICAgICAgY2hhaW4gZnVuY3Rpb24gKGZvciBleGFtcGxlKSBpcyBzdGlsbCBhY2Nlc3NpbmcgdGhvc2UgcmVzb3VyY2VzIGluCi0gICAgICAgICAgYW5vdGhlciB0aHJlYWQuIFdoZXRoZXIgeW91ciBjaGFpbiBmdW5jdGlvbiBtaWdodCBiZSBydW5uaW5nIG9yIG5vdAotICAgICAgICAgIGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mIHlvdXIgcGx1Z2luJ3MgcGFkcywgYW5kIHRoZSBzdGF0ZSBvZiB0aG9zZQotICAgICAgICAgIHBhZHMgaXMgY2xvc2VseSBsaW5rZWQgdG8gdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50LiBQYWQgc3RhdGVzIGFyZQotICAgICAgICAgIGhhbmRsZWQgaW4gdGhlIEdzdEVsZW1lbnQgY2xhc3MncyBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24sIGluY2x1ZGluZwotICAgICAgICAgIHByb3BlciBsb2NraW5nLCB0aGF0J3Mgd2h5IGl0IGlzIGVzc2VudGlhbCB0byBjaGFpbiB1cCBiZWZvcmUKLSAgICAgICAgICBkZXN0cm95aW5nIGFsbG9jYXRlZCByZXNvdXJjZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQXMgYWxyZWFkeSBtZW50aW9uZWQgYWJvdmUsIHlvdSBzaG91bGQgcmVhbGx5IHJld3JpdGUgeW91ciBwbHVnaW4KLSAgICAgICAgICB0byBkZXJpdmUgZnJvbSBvbmUgb2YgdGhlIG5ldyBiYXNlIGNsYXNzZXMgdGhvdWdoLCBzbyB5b3UgZG9uJ3QgaGF2ZQotICAgICAgICAgIHRvIHdvcnJ5IGFib3V0IHRoZXNlIHRoaW5ncywgYXMgdGhlIGJhc2UgY2xhc3Mgd2lsbCBoYW5kbGUgaXQgZm9yIHlvdS4KLSAgICAgICAgICBUaGVyZSBhcmUgbm8gYmFzZSBjbGFzc2VzIGZvciBkZWNvZGVycyBhbmQgZW5jb2RlcnMgeWV0LCBzbyB0aGUgYWJvdmUgCi0gICAgICAgICAgcGFyYWdyYXBocyBhYm91dCBzdGF0ZSBjaGFuZ2VzIGRlZmluaXRpdmVseSBhcHBseSBpZiB5b3VyIHBsdWdpbiBpcyBhCi0gICAgICAgICAgZGVjb2RlciBvciBhbiBlbmNvZGVyLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbiAoKTwvZnVuY3Rpb24+LCB3aGljaCB1c2VkIHRvIHNldAotICAgICAgICAgIGEgZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSBjYWxsZWQgd2hlbiBhIGZvcm1hdCB3YXMgbmVnb3RpYXRlZCBiZXR3ZWVuCi0gICAgICAgICAgdHdvIDxjbGFzc25hbWU+R3N0UGFkPC9jbGFzc25hbWU+cywgbm93IHNldHMgYSBmdW5jdGlvbiB0aGF0IGlzCi0gICAgICAgICAgY2FsbGVkIHdoZW4gdHdvIGVsZW1lbnRzIGFyZSBsaW5rZWQgdG9nZXRoZXIgaW4gYW4gYXBwbGljYXRpb24uIEZvcgotICAgICAgICAgIGFsbCBwcmFjdGljYWwgcHVycG9zZXMsIHlvdSBtb3N0IGxpa2VseSB3YW50IHRvIHVzZSB0aGUgZnVuY3Rpb24KLSAgICAgICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfc2V0Y2Fwc19mdW5jdGlvbiAoKTwvZnVuY3Rpb24+LCBub3dhZGF5cywgd2hpY2gKLSAgICAgICAgICBzZXRzIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgZm9ybWF0IHN0cmVhbWluZyBvdmVyIGEgcGFkCi0gICAgICAgICAgY2hhbmdlcyAoc28gc2ltaWxhciB0byA8ZnVuY3Rpb24+X3NldF9saW5rX2Z1bmN0aW9uICgpPC9mdW5jdGlvbj4gaW4KLSAgICAgICAgICAmR1N0cmVhbWVyOy0wLjgpLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIElmIHRoZSBlbGVtZW50IGlzIGRlcml2ZWQgZnJvbSBhIDxjbGFzc25hbWU+R3N0QmFzZTwvY2xhc3NuYW1lPiBjbGFzcywKLSAgICAgICAgICB0aGVuIG92ZXJyaWRlIHRoZSA8ZnVuY3Rpb24+c2V0X2NhcHMgKCk8L2Z1bmN0aW9uPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGZ1bmN0aW9uPmdzdF9wYWRfdXNlX2V4cGxpY2l0X2NhcHMgKCk8L2Z1bmN0aW9uPiBoYXMgYmVlbiByZXBsYWNlZCBieQotICAgICAgICAgIDxmdW5jdGlvbj5nc3RfcGFkX3VzZV9maXhlZF9jYXBzICgpPC9mdW5jdGlvbj4uIFlvdSBjYW4gdGhlbiBzZXQgdGhlCi0gICAgICAgICAgZml4ZWQgY2FwcyB0byB1c2Ugb24gYSBwYWQgd2l0aCA8ZnVuY3Rpb24+Z3N0X3BhZF9zZXRfY2FwcyAoKTwvZnVuY3Rpb24+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgotCi08Y2hhcHRlciBpZD0iY2hhcHRlci1wb3J0aW5nLTFfMCI+Ci0gIDx0aXRsZT5Qb3J0aW5nIDAuMTAgcGx1Zy1pbnMgdG8gMS4wPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IG9mIGNoYW5nZXMgaW4gdGhlCi0gICAgPHVsaW5rIHVybD0iaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvdHJlZS9kb2NzL3JhbmRvbS9wb3J0aW5nLXRvLTEuMC50eHQiPlBvcnRpbmcgdG8gMS4wPC91bGluaz4gZG9jdW1lbnQuCi0gIDwvcGFyYT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2FwcGVuZGl4LXB5dGhvbi54bWwgYi9kb2NzL3B3Zy9hcHBlbmRpeC1weXRob24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL2FwcGVuZGl4LXB5dGhvbi54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYmFzZS5jc3MgYi9kb2NzL3B3Zy9iYXNlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9iYXNlLmNzcworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sIGIvZG9jcy9wd2cvYnVpbGRpbmctYm9pbGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUxYmYzMy4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9idWlsZGluZy1ib2lsZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDY2ICswLDAgQEAKLTwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KLQotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYnVpbGRpbmctYm9pbGVyIiB4cmVmbGFiZWw9IkNvbnN0cnVjdGluZyB0aGUgQm9pbGVycGxhdGUiPgotICA8dGl0bGU+Q29uc3RydWN0aW5nIHRoZSBCb2lsZXJwbGF0ZTwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIEluIHRoaXMgY2hhcHRlciB5b3Ugd2lsbCBsZWFybiBob3cgdG8gY29uc3RydWN0IHRoZSBiYXJlIG1pbmltdW0gY29kZSBmb3IgYQotICAgIG5ldyBwbHVnaW4uIFN0YXJ0aW5nIGZyb20gZ3JvdW5kIHplcm8sIHlvdSB3aWxsIHNlZSBob3cgdG8gZ2V0IHRoZQotICAgICZHU3RyZWFtZXI7IHRlbXBsYXRlIHNvdXJjZS4gVGhlbiB5b3Ugd2lsbCBsZWFybiBob3cgdG8gdXNlIGEgZmV3IGJhc2ljCi0gICAgdG9vbHMgdG8gY29weSBhbmQgbW9kaWZ5IGEgdGVtcGxhdGUgcGx1Z2luIHRvIGNyZWF0ZSBhIG5ldyBwbHVnaW4uIElmIHlvdQotICAgIGZvbGxvdyB0aGUgZXhhbXBsZXMgaGVyZSwgdGhlbiBieSB0aGUgZW5kIG9mIHRoaXMgY2hhcHRlciB5b3Ugd2lsbCBoYXZlIGEKLSAgICBmdW5jdGlvbmFsIGF1ZGlvIGZpbHRlciBwbHVnaW4gdGhhdCB5b3UgY2FuIGNvbXBpbGUgYW5kIHVzZSBpbiAmR1N0cmVhbWVyOwotICAgIGFwcGxpY2F0aW9ucy4KLSAgPC9wYXJhPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJvaWxlci1zb3VyY2UiIHhyZWZsYWJlbD0iR2V0dGluZyB0aGUgR1N0cmVhbWVyIFBsdWdpbiBUZW1wbGF0ZXMiPgotICAgIDx0aXRsZT5HZXR0aW5nIHRoZSBHU3RyZWFtZXIgUGx1Z2luIFRlbXBsYXRlczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byB3YXlzIHRvIGRldmVsb3AgYSBuZXcgcGx1Z2luIGZvciAmR1N0cmVhbWVyOzogWW91Ci0gICAgICBjYW4gd3JpdGUgdGhlIGVudGlyZSBwbHVnaW4gYnkgaGFuZCwgb3IgeW91IGNhbiBjb3B5IGFuIGV4aXN0aW5nIHBsdWdpbgotICAgICAgdGVtcGxhdGUgYW5kIHdyaXRlIHRoZSBwbHVnaW4gY29kZSB5b3UgbmVlZC4gVGhlIHNlY29uZCBtZXRob2QgaXMgYnkgZmFyCi0gICAgICB0aGUgc2ltcGxlciBvZiB0aGUgdHdvLCBzbyB0aGUgZmlyc3QgbWV0aG9kIHdpbGwgbm90IGV2ZW4gYmUgZGVzY3JpYmVkCi0gICAgICBoZXJlLiAoRXJybSwgdGhhdCBpcywgPHF1b3RlPml0IGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgdG8gdGhlCi0gICAgICByZWFkZXIuPC9xdW90ZT4pCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhlIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgb3V0IGEgY29weSBvZiB0aGUKLSAgICAgIDxmaWxlbmFtZT5nc3QtdGVtcGxhdGU8L2ZpbGVuYW1lPiBnaXQgbW9kdWxlIHRvIGdldCBhbiBpbXBvcnRhbnQgdG9vbCBhbmQKLSAgICAgIHRoZSBzb3VyY2UgY29kZSB0ZW1wbGF0ZSBmb3IgYSBiYXNpYyAmR1N0cmVhbWVyOyBwbHVnaW4uIFRvIGNoZWNrIG91dCB0aGUKLSAgICAgIDxmaWxlbmFtZT5nc3QtdGVtcGxhdGU8L2ZpbGVuYW1lPiBtb2R1bGUsIG1ha2Ugc3VyZSB5b3UgYXJlIGNvbm5lY3RlZCB0bwotICAgICAgdGhlIGludGVybmV0LCBhbmQgdHlwZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGF0IGEgY29tbWFuZCBjb25zb2xlOgotICAgIDwvcGFyYT4KLSAgICA8c2NyZWVuPgotPHByb21wdD5zaGVsbCAkIDwvcHJvbXB0Pjx1c2VyaW5wdXQ+Z2l0IGNsb25lIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtdGVtcGxhdGUuZ2l0PC91c2VyaW5wdXQ+Ci1Jbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAvc29tZS9wYXRoL2dzdC10ZW1wbGF0ZS8uZ2l0LwotcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiAzNzMsIGRvbmUuCi1yZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDExNC8xMTQpLCBkb25lLgotcmVtb3RlOiBUb3RhbCAzNzMgKGRlbHRhIDI0MCksIHJldXNlZCAzNzMgKGRlbHRhIDI0MCkKLVJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgzNzMvMzczKSwgNzUuMTYgS2lCIHwgNzggS2lCL3MsIGRvbmUuCi1SZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgyNDAvMjQwKSwgZG9uZS4KLSAgICA8L3NjcmVlbj4KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgY29tbWFuZCB3aWxsIGNoZWNrIG91dCBhIHNlcmllcyBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW50bwotICAgICAgPGZpbGVuYW1lIGNsYXNzPSJkaXJlY3RvcnkiPmdzdC10ZW1wbGF0ZTwvZmlsZW5hbWU+LiBUaGUgdGVtcGxhdGUgeW91Ci0gICAgICB3aWxsIGJlIHVzaW5nIGlzIGluIHRoZQotICAgICAgPGZpbGVuYW1lIGNsYXNzPSJkaXJlY3RvcnkiPmdzdC10ZW1wbGF0ZS9nc3QtcGx1Z2luLzwvZmlsZW5hbWU+Ci0gICAgICBkaXJlY3RvcnkuIFlvdSBzaG91bGQgbG9vayBvdmVyIHRoZSBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeSB0byBnZXQgYQotICAgICAgZ2VuZXJhbCBpZGVhIG9mIHRoZSBzdHJ1Y3R1cmUgb2YgYSBzb3VyY2UgdHJlZSBmb3IgYSBwbHVnaW4uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW4ndCBhY2Nlc3MgdGhlIGdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIGFsc28KLSAgICAgIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC10ZW1wbGF0ZS9jb21taXQvIj4KLSAgICAgIGRvd25sb2FkIGEgc25hcHNob3Qgb2YgdGhlIGxhdGVzdCByZXZpc2lvbjwvdWxpbms+IHZpYSB0aGUgY2dpdCB3ZWIKLSAgICAgIGludGVyZmFjZS4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tYm9pbGVyLXByb2plY3Qtc3RhbXAiIHhyZWZsYWJlbD0iVXNpbmcgdGhlIFByb2plY3QgU3RhbXAiPgotICAgIDx0aXRsZT5Vc2luZyB0aGUgUHJvamVjdCBTdGFtcDwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgZmlyc3QgdGhpbmcgdG8gZG8gd2hlbiBtYWtpbmcgYSBuZXcgZWxlbWVudCBpcyB0byBzcGVjaWZ5IHNvbWUgYmFzaWMKLSAgICAgIGRldGFpbHMgYWJvdXQgaXQ6IHdoYXQgaXRzIG5hbWUgaXMsIHdobyB3cm90ZSBpdCwgd2hhdCB2ZXJzaW9uIG51bWJlciBpdAotICAgICAgaXMsIGV0Yy4gV2UgYWxzbyBuZWVkIHRvIGRlZmluZSBhbiBvYmplY3QgdG8gcmVwcmVzZW50IHRoZSBlbGVtZW50IGFuZCB0bwotICAgICAgc3RvcmUgdGhlIGRhdGEgdGhlIGVsZW1lbnQgbmVlZHMuIFRoZXNlIGRldGFpbHMgYXJlIGNvbGxlY3RpdmVseSBrbm93biBhcwotICAgICAgdGhlIDxlbXBoYXNpcz5ib2lsZXJwbGF0ZTwvZW1waGFzaXM+LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBzdGFuZGFyZCB3YXkgb2YgZGVmaW5pbmcgdGhlIGJvaWxlcnBsYXRlIGlzIHNpbXBseSB0byB3cml0ZSBzb21lIGNvZGUsCi0gICAgICBhbmQgZmlsbCBpbiBzb21lIHN0cnVjdHVyZXMuIEFzIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhlCi0gICAgICBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvIGNvcHkgYSB0ZW1wbGF0ZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKLSAgICAgIGFjY29yZGluZyB0byB5b3VyIG5lZWRzLiBUbyBoZWxwIHlvdSBkbyBzbywgdGhlcmUgaXMgYSB0b29sIGluIHRoZQotICAgICAgPGZpbGVuYW1lIGNsYXNzPSJkaXJlY3RvcnkiPi4vZ3N0LXBsdWdpbi90b29scy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCi0gICAgICBUaGlzIHRvb2wsIDxmaWxlbmFtZT5tYWtlX2VsZW1lbnQ8L2ZpbGVuYW1lPiwgaXMgYSBjb21tYW5kIGxpbmUgdXRpbGl0eQotICAgICAgdGhhdCBjcmVhdGVzIHRoZSBib2lsZXJwbGF0ZSBjb2RlIGZvciB5b3UuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVG8gdXNlIDxjb21tYW5kPm1ha2VfZWxlbWVudDwvY29tbWFuZD4sIGZpcnN0IG9wZW4gdXAgYSB0ZXJtaW5hbCB3aW5kb3cuCi0gICAgICBDaGFuZ2UgdG8gdGhlIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij5nc3QtdGVtcGxhdGUvZ3N0LXBsdWdpbi9zcmM8L2ZpbGVuYW1lPgotICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlbiBydW4gdGhlIDxjb21tYW5kPm1ha2VfZWxlbWVudDwvY29tbWFuZD4gY29tbWFuZC4gVGhlCi0gICAgICBhcmd1bWVudHMgdG8gdGhlIDxjb21tYW5kPm1ha2VfZWxlbWVudDwvY29tbWFuZD4gYXJlOgotICAgIDwvcGFyYT4KLSAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPnRoZSBuYW1lIG9mIHRoZSBwbHVnaW4sIGFuZDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZSB0aGF0IHRoZSB0b29sIHdpbGwgdXNlLiBCeSBkZWZhdWx0LAotICAgICAgICAgIDxmaWxlbmFtZT5nc3RwbHVnaW48L2ZpbGVuYW1lPiBpcyB1c2VkLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgIDwvb3JkZXJlZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBjcmVhdGUgdGhlIE15RmlsdGVyIHBsdWdpbiBiYXNlZCBvbgotICAgICAgdGhlIHBsdWdpbiB0ZW1wbGF0ZSBhbmQgcHV0IHRoZSBvdXRwdXQgZmlsZXMgaW4gdGhlCi0gICAgICA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+Z3N0LXRlbXBsYXRlL2dzdC1wbHVnaW4vc3JjPC9maWxlbmFtZT4KLSAgICAgIGRpcmVjdG9yeToKLSAgICA8L3BhcmE+Ci0gICAgPHNjcmVlbj4KLTxwcm9tcHQ+c2hlbGwgJCA8L3Byb21wdD48dXNlcmlucHV0PmNkIGdzdC10ZW1wbGF0ZS9nc3QtcGx1Z2luL3NyYzwvdXNlcmlucHV0PgotPHByb21wdD5zaGVsbCAkIDwvcHJvbXB0Pjx1c2VyaW5wdXQ+Li4vdG9vbHMvbWFrZV9lbGVtZW50IE15RmlsdGVyPC91c2VyaW5wdXQ+Ci0gICAgPC9zY3JlZW4+Ci0gICAgPG5vdGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQ2FwaXRhbGl6YXRpb24gaXMgaW1wb3J0YW50IGZvciB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luLiBLZWVwIGluIG1pbmQKLSAgICAgICAgdGhhdCB1bmRlciBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLCBjYXBpdGFsaXphdGlvbiBpcyBhbHNvIGltcG9ydGFudAotICAgICAgICB3aGVuIHNwZWNpZnlpbmcgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWVzIGluIGdlbmVyYWwuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9ub3RlPgotICAgIDxwYXJhPgotICAgICAgVGhlIGxhc3QgY29tbWFuZCBjcmVhdGVzIHR3byBmaWxlczoKLSAgICAgIDxmaWxlbmFtZT5nc3RteWZpbHRlci5jPC9maWxlbmFtZT4gYW5kCi0gICAgICA8ZmlsZW5hbWU+Z3N0bXlmaWx0ZXIuaDwvZmlsZW5hbWU+LgotICAgIDwvcGFyYT4KLSAgICA8bm90ZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgYSBjb3B5IG9mIHRoZSA8ZmlsZW5hbWUKLQljbGFzcz0iZGlyZWN0b3J5Ij5nc3QtcGx1Z2luPC9maWxlbmFtZT4KLQlkaXJlY3RvcnkgYmVmb3JlIGNvbnRpbnVpbmcuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9ub3RlPgotICAgIDxwYXJhPgotICAgICAgTm93IG9uZSBuZWVkcyB0byBhZGp1c3QgdGhlIDxmaWxlbmFtZT5NYWtlZmlsZS5hbTwvZmlsZW5hbWU+IHRvIHVzZSB0aGUKLSAgICAgIG5ldyBmaWxlbmFtZXMgYW5kIHJ1biA8ZmlsZW5hbWU+YXV0b2dlbi5zaDwvZmlsZW5hbWU+IGZyb20gdGhlIHBhcmVudAotICAgICAgZGlyZWN0b3J5IHRvIGJvb3RzdHJhcCB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEFmdGVyIHRoYXQsIHRoZSBwcm9qZWN0Ci0gICAgICBjYW4gYmUgYnVpbHQgYW5kIGluc3RhbGxlZCB1c2luZyB0aGUgd2VsbCBrbm93bgotICAgICAgPHVzZXJpbnB1dD5tYWtlICZhbXA7JmFtcDsgc3VkbyBtYWtlIGluc3RhbGw8L3VzZXJpbnB1dD4gY29tbWFuZHMuCi0gICAgPC9wYXJhPgotICAgIDxub3RlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEJlIGF3YXJlIHRoYXQgYnkgZGVmYXVsdCA8ZmlsZW5hbWU+YXV0b2dlbi5zaDwvZmlsZW5hbWU+IGFuZCAKLSAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+IHdvdWxkIGNob29zZSA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+L3Vzci9sb2NhbDwvZmlsZW5hbWU+Ci0gICAgICAgIGFzIGEgZGVmYXVsdCBsb2NhdGlvbi4gT25lIHdvdWxkIG5lZWQgdG8gYWRkCi0gICAgICAgIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij4vdXNyL2xvY2FsL2xpYi9nc3RyZWFtZXItMS4wPC9maWxlbmFtZT4KLSAgICAgICAgdG8gPHN5bWJvbD5HU1RfUExVR0lOX1BBVEg8L3N5bWJvbD4gaW4gb3JkZXIgdG8gbWFrZSB0aGUgbmV3IHBsdWdpbgotICAgICAgICBzaG93IHVwIGluIGEgZ3N0cmVhbWVyIHRoYXQncyBiZWVuIGluc3RhbGxlZCBmcm9tIHBhY2thZ2VzLgotICAgICAgPC9wYXJhPgotICAgIDwvbm90ZT4KLSAgICA8bm90ZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBGSVhNRTogdGhpcyBzZWN0aW9uIGlzIHNsaWdodGx5IG91dGRhdGVkLiBnc3QtdGVtcGxhdGUgaXMgc3RpbGwgdXNlZnVsCi0gICAgICAgIGFzIGFuIGV4YW1wbGUgZm9yIGEgbWluaW1hbCBwbHVnaW4gYnVpbGQgc3lzdGVtIHNrZWxldG9uLiBIb3dldmVyLCBmb3IKLSAgICAgICAgY3JlYXRpbmcgZWxlbWVudHMgdGhlIHRvb2wgZ3N0LWVsZW1lbnQtbWFrZXIgZnJvbSBnc3QtcGx1Z2lucy1iYWQgaXMKLSAgICAgICAgcmVjb21tZW5kZWQgdGhlc2UgZGF5cy4KLSAgICAgIDwvcGFyYT4KLSAgICA8L25vdGU+Ci0gIDwvc2VjdDE+Ci0KLSAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tYm9pbGVyLWV4YW1pbmUiPgotICAgIDx0aXRsZT5FeGFtaW5pbmcgdGhlIEJhc2ljIENvZGU8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgRmlyc3Qgd2Ugd2lsbCBleGFtaW5lIHRoZSBjb2RlIHlvdSB3b3VsZCBiZSBsaWtlbHkgdG8gcGxhY2UgaW4gYSBoZWFkZXIKLSAgICAgIGZpbGUgKGFsdGhvdWdoIHNpbmNlIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGNvZGUgaXMgZW50aXJlbHkgZGVmaW5lZCBieSB0aGUKLSAgICAgIHBsdWdpbiBzeXN0ZW0sIGFuZCBkb2Vzbid0IGRlcGVuZCBvbiByZWFkaW5nIGEgaGVhZGVyIGZpbGUsIHRoaXMgaXMgbm90Ci0gICAgICBjcnVjaWFsLikKLSAgICA8L3BhcmE+Ci0KLSAgICA8ZXhhbXBsZSBpZD0iZXgtYm9pbGVyLWV4YW1pbmUtaCI+Ci0gICAgICA8dGl0bGU+RXhhbXBsZSBQbHVnaW4gSGVhZGVyIEZpbGU8L3RpdGxlPgotICAgICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBmaWx0ZXIuaCBhIC0tPgotI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLQotLyogRGVmaW5pdGlvbiBvZiBzdHJ1Y3R1cmUgc3RvcmluZyBkYXRhIGZvciB0aGlzIGVsZW1lbnQuICovCi10eXBlZGVmIHN0cnVjdCBfR3N0TXlGaWx0ZXIgewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgR3N0UGFkICpzaW5rcGFkLCAqc3JjcGFkOwotCi0gIGdib29sZWFuIHNpbGVudDsKLTwhLS0gZXhhbXBsZS1lbmQgZmlsdGVyLmggYSAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBmaWx0ZXIuaCBiIC0tPjwhLS0KLSAgZ2ludCBzYW1wbGVyYXRlLCBjaGFubmVsczsKLSAgZ2ludCBmcm9tX3NhbXBsZXJhdGUsIHRvX3NhbXBsZXJhdGU7Ci0gIGdib29sZWFuIHBhc3N0aHJvdWdoOwotICBndWludDY0IG9mZnNldDsKLS0tPjwhLS0gZXhhbXBsZS1lbmQgZmlsdGVyLmggYiAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBmaWx0ZXIuaCBjIC0tPgotfSBHc3RNeUZpbHRlcjsKLQotLyogU3RhbmRhcmQgZGVmaW5pdGlvbiBkZWZpbmluZyBhIGNsYXNzIGZvciB0aGlzIGVsZW1lbnQuICovCi10eXBlZGVmIHN0cnVjdCBfR3N0TXlGaWx0ZXJDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19IEdzdE15RmlsdGVyQ2xhc3M7Ci0KLS8qIFN0YW5kYXJkIG1hY3JvcyBmb3IgZGVmaW5pbmcgdHlwZXMgZm9yIHRoaXMgZWxlbWVudC4gICovCi0jZGVmaW5lIEdTVF9UWVBFX01ZX0ZJTFRFUiAoZ3N0X215X2ZpbHRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfTVlfRklMVEVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTVlfRklMVEVSLEdzdE15RmlsdGVyKSkKLSNkZWZpbmUgR1NUX01ZX0ZJTFRFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9NWV9GSUxURVIsR3N0TXlGaWx0ZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19NWV9GSUxURVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9NWV9GSUxURVIpKQotI2RlZmluZSBHU1RfSVNfTVlfRklMVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX01ZX0ZJTFRFUikpCi0KLS8qIFN0YW5kYXJkIGZ1bmN0aW9uIHJldHVybmluZyB0eXBlIGluZm9ybWF0aW9uLiAqLwotR1R5cGUgZ3N0X215X2ZpbHRlcl9nZXRfdHlwZSAodm9pZCk7Ci0gICAgICA8IS0tIGV4YW1wbGUtZW5kIGZpbHRlci5oIGMgLS0+PC9wcm9ncmFtbGlzdGluZz4KLSAgICA8L2V4YW1wbGU+Ci0gICAgPHBhcmE+Ci0gICAgICBVc2luZyB0aGlzIGhlYWRlciBmaWxlLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIHNldHVwCi0gICAgICB0aGUgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+IGJhc2ljcyBpbiB5b3VyIHNvdXJjZSBmaWxlIHNvCi0gICAgICB0aGF0IGFsbCBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgYXBwcm9wcmlhdGVseToKLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiBib2lsZXJwbGF0ZS5jIGEgLS0+Ci0jaW5jbHVkZSAiZmlsdGVyLmgiCi0KLUdfREVGSU5FX1RZUEUgKEdzdE15RmlsdGVyLCBnc3RfbXlfZmlsdGVyLCBHU1RfVFlQRV9FTEVNRU5UKTsKLSAgICA8IS0tIGV4YW1wbGUtZW5kIGJvaWxlcnBsYXRlLmMgYSAtLT48L3Byb2dyYW1saXN0aW5nPgotICA8L3NlY3QxPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJvaWxlci1kZXRhaWxzIj4KLSAgICA8dGl0bGU+RWxlbWVudCBtZXRhZGF0YTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgRWxlbWVudCBtZXRhZGF0YSBwcm92aWRlcyBleHRyYSBlbGVtZW50IGluZm9ybWF0aW9uLiBJdCBpcyBjb25maWd1cmVkCi0gICAgICB3aXRoIDxmdW5jdGlvbj5nc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGE8L2Z1bmN0aW9uPiBvcgotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGE8L2Z1bmN0aW9uPiB3aGljaCB0YWtlcyB0aGUKLSAgICAgIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPjxwYXJhPgotICAgICAgICBBIGxvbmcsIEVuZ2xpc2gsIG5hbWUgZm9yIHRoZSBlbGVtZW50LgotICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPgotICAgICAgICBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudCwgc2VlIHRoZSBkb2NzL2Rlc2lnbi9kcmFmdC1rbGFzcy50eHQgZG9jdW1lbnQKLSAgICAgICAgaW4gdGhlIEdTdHJlYW1lciBjb3JlIHNvdXJjZSB0cmVlIGZvciBkZXRhaWxzIGFuZCBleGFtcGxlcy4KLSAgICAgIDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcHVycG9zZSBvZiB0aGUgZWxlbWVudC4KLSAgICAgIDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4KLSAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBvZiB0aGUgZWxlbWVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGNvbnRhY3QKLSAgICAgICAgZW1haWwgYWRkcmVzcyBpbiBhbmdsZSBicmFja2V0cy4KLSAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDxwYXJhPgotICAgICAgRm9yIGV4YW1wbGU6Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLWdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGtsYXNzLAotICAiQW4gZXhhbXBsZSBwbHVnaW4iLAotICAiRXhhbXBsZS9GaXJzdEV4YW1wbGUiLAotICAiU2hvd3MgdGhlIGJhc2ljIHN0cnVjdHVyZSBvZiBhIHBsdWdpbiIsCi0gICJ5b3VyIG5hbWUgJmx0O3lvdXIubmFtZUB5b3VyLmlzcCZndDsiKTsKLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgVGhlIGVsZW1lbnQgZGV0YWlscyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBwbHVnaW4gZHVyaW5nCi0gICAgICB0aGUgPGZ1bmN0aW9uPl9jbGFzc19pbml0ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHdoaWNoIGlzIHBhcnQgb2YKLSAgICAgIHRoZSBHT2JqZWN0IHN5c3RlbS4gVGhlIDxmdW5jdGlvbj5fY2xhc3NfaW5pdCAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uCi0gICAgICBzaG91bGQgYmUgc2V0IGZvciB0aGlzIEdPYmplY3QgaW4gdGhlIGZ1bmN0aW9uIHdoZXJlIHlvdSByZWdpc3RlcgotICAgICAgdGhlIHR5cGUgd2l0aCBHTGliLgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGJvaWxlcnBsYXRlLmMgYyAtLT4KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKEdzdE15RmlsdGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLTwhLS0gZXhhbXBsZS1lbmQgYm9pbGVycGxhdGUuYyBjIC0tPgotWy4uXTwhLS0gZXhhbXBsZS1iZWdpbiBib2lsZXJwbGF0ZS5jIGQgLS0+Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfa2xhc3MsCi0gICAgIkFuIGV4YW1wbGUgcGx1Z2luIiwKLSAgICAiRXhhbXBsZS9GaXJzdEV4YW1wbGUiLAotICAgICJTaG93cyB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIGEgcGx1Z2luIiwKLSAgICAieW91ciBuYW1lICZsdDt5b3VyLm5hbWVAeW91ci5pc3AmZ3Q7Iik7Ci08IS0tIGV4YW1wbGUtZW5kIGJvaWxlcnBsYXRlLmMgZCAtLT4KLX0KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICA8L3NlY3QxPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJvaWxlci1wYWR0ZW1wbGF0ZXMiPgotICAgIDx0aXRsZT5Hc3RTdGF0aWNQYWRUZW1wbGF0ZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBBIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGlzIGEgZGVzY3JpcHRpb24gb2YgYSBwYWQgdGhhdCB0aGUgZWxlbWVudCB3aWxsCi0gICAgICAob3IgbWlnaHQpIGNyZWF0ZSBhbmQgdXNlLiBJdCBjb250YWluczoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+QSBzaG9ydCBuYW1lIGZvciB0aGUgcGFkLjwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPlBhZCBkaXJlY3Rpb24uPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRXhpc3RlbmNlIHByb3BlcnR5LiBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBwYWQgZXhpc3RzIGFsd2F5cyAoYW4KLSAgICAgICAgICA8cXVvdGU+YWx3YXlzPC9xdW90ZT4gcGFkKSwgb25seSBpbiBzb21lIGNhc2VzIChhCi0gICAgICAgICAgPHF1b3RlPnNvbWV0aW1lczwvcXVvdGU+IHBhZCkgb3Igb25seSBpZiB0aGUgYXBwbGljYXRpb24gcmVxdWVzdGVkCi0gICAgICAgICAgc3VjaCBhIHBhZCAoYSA8cXVvdGU+cmVxdWVzdDwvcXVvdGU+IHBhZCkuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPlN1cHBvcnRlZCB0eXBlcyBieSB0aGlzIGVsZW1lbnQgKGNhcGFiaWxpdGllcykuPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8cGFyYT4KLSAgICAgIEZvciBleGFtcGxlOgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGJvaWxlcnBsYXRlLmMgZSAtLT4KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKAotICAic2luayIsCi0gIEdTVF9QQURfU0lOSywKLSAgR1NUX1BBRF9BTFdBWVMsCi0gIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCi0pOwotPCEtLSBleGFtcGxlLWVuZCBib2lsZXJwbGF0ZS5jIGUgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gYm9pbGVycGxhdGUuYyBmIC0tPjwhLS0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoCi0gICJzcmMiLAotICBHU1RfUEFEX1NSQywKLSAgR1NUX1BBRF9BTFdBWVMsCi0gIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCi0pOwotLS0+PCEtLSBleGFtcGxlLWVuZCBib2lsZXJwbGF0ZS5jIGYgLS0+Ci0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgVGhvc2UgcGFkIHRlbXBsYXRlcyBhcmUgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlCi0gICAgICA8ZnVuY3Rpb24+X2NsYXNzX2luaXQgKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiB3aXRoIHRoZQotICAgICAgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKCk8L2Z1bmN0aW9uPi4gRm9yIHRoaXMKLSAgICAgIGZ1bmN0aW9uIHlvdSBuZWVkIGEgaGFuZGxlIHRoZSA8Y2xhc3NuYW1lPkdzdFBhZFRlbXBsYXRlPC9jbGFzc25hbWU+Ci0gICAgICB3aGljaCB5b3UgY2FuIGNyZWF0ZSBmcm9tIHRoZSBzdGF0aWMgcGFkIHRlbXBsYXRlIHdpdGgKLSAgICAgIDxmdW5jdGlvbj5nc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCk8L2Z1bmN0aW9uPi4gU2VlIGJlbG93IGZvciBtb3JlCi0gICAgICBkZXRhaWxzIG9uIHRoaXMuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgUGFkcyBhcmUgY3JlYXRlZCBmcm9tIHRoZXNlIHN0YXRpYyB0ZW1wbGF0ZXMgaW4gdGhlIGVsZW1lbnQncyAKLSAgICAgIDxmdW5jdGlvbj5faW5pdCAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHVzaW5nCi0gICAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCk8L2Z1bmN0aW9uPi4KLSAgICAgIEluIG9yZGVyIHRvIGNyZWF0ZSBhIG5ldyBwYWQgZnJvbSB0aGlzCi0gICAgICB0ZW1wbGF0ZSB1c2luZyA8ZnVuY3Rpb24+Z3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCk8L2Z1bmN0aW9uPiwgeW91Ci0gICAgICB3aWxsIG5lZWQgdG8gZGVjbGFyZSB0aGUgcGFkIHRlbXBsYXRlIGFzIGEgZ2xvYmFsIHZhcmlhYmxlLiBNb3JlIG9uCi0gICAgICB0aGlzIHN1YmplY3QgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1idWlsZGluZy1wYWRzIi8+LgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19mYWN0b3J5ID0gWy4uXSwKLSAgICBzcmNfZmFjdG9yeSA9IFsuLl07Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKEdzdE15RmlsdGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLVsuLl0KLTwhLS0gZXhhbXBsZS1iZWdpbiBib2lsZXJwbGF0ZS5jIGcgLS0+Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0JZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmYW1wO3NyY19mYWN0b3J5KSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0JZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmYW1wO3NpbmtfZmFjdG9yeSkpOwotfQotPCEtLSBleGFtcGxlLWVuZCBib2lsZXJwbGF0ZS5jIGcgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gYm9pbGVycGxhdGUuYyBoIC0tPjwhLS0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2luaXQgKEdzdE15RmlsdGVyICogZmlsdGVyKQotewotfQotCi0jaW5jbHVkZSAicmVnaXN0ZXIuZnVuYyIKLSAgICAtLT48IS0tIGV4YW1wbGUtZW5kIGJvaWxlcnBsYXRlLmMgaCAtLT48L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgVGhlIGxhc3QgYXJndW1lbnQgaW4gYSB0ZW1wbGF0ZSBpcyBpdHMgdHlwZQotICAgICAgb3IgbGlzdCBvZiBzdXBwb3J0ZWQgdHlwZXMuIEluIHRoaXMgZXhhbXBsZSwgd2UgdXNlICdBTlknLCB3aGljaCBtZWFucwotICAgICAgdGhhdCB0aGlzIGVsZW1lbnQgd2lsbCBhY2NlcHQgYWxsIGlucHV0LiBJbiByZWFsLWxpZmUgc2l0dWF0aW9ucywgeW91Ci0gICAgICB3b3VsZCBzZXQgYSBtZWRpYSB0eXBlIGFuZCBvcHRpb25hbGx5IGEgc2V0IG9mIHByb3BlcnRpZXMgdG8gbWFrZSBzdXJlCi0gICAgICB0aGF0IG9ubHkgc3VwcG9ydGVkIGlucHV0IHdpbGwgY29tZSBpbi4gVGhpcyByZXByZXNlbnRhdGlvbiBzaG91bGQgYmUKLSAgICAgIGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggYSBtZWRpYSB0eXBlLCB0aGVuIGEgc2V0IG9mIGNvbW1hLXNlcGFyYXRlcwotICAgICAgcHJvcGVydGllcyB3aXRoIHRoZWlyIHN1cHBvcnRlZCB2YWx1ZXMuIEluIGNhc2Ugb2YgYW4gYXVkaW8gZmlsdGVyIHRoYXQKLSAgICAgIHN1cHBvcnRzIHJhdyBpbnRlZ2VyIDE2LWJpdCBhdWRpbywgbW9ubyBvciBzdGVyZW8gYXQgYW55IHNhbXBsZXJhdGUsIHRoZQotICAgICAgY29ycmVjdCB0ZW1wbGF0ZSB3b3VsZCBsb29rIGxpa2UgdGhpczoKLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKLSAgInNpbmsiLAotICBHU1RfUEFEX1NJTkssCi0gIEdTVF9QQURfQUxXQVlTLAotICBHU1RfU1RBVElDX0NBUFMgKAotICAgICJhdWRpby94LXJhdywgIgotICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMTYpICIsICIKLSAgICAgICJjaGFubmVscyA9IChpbnQpIHsgMSwgMiB9LCAiCi0gICAgICAicmF0ZSA9IChpbnQpIFsgODAwMCwgOTYwMDAgXSIKLSAgKQotKTsKLV1dPgotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBWYWx1ZXMgc3Vycm91bmRlZCBieSBjdXJseSBicmFja2V0cyAoPHF1b3RlPns8L3F1b3RlPiBhbmQKLSAgICAgIDxxdW90ZT59PC9xdW90ZT4pIGFyZSBsaXN0cywgdmFsdWVzIHN1cnJvdW5kZWQgYnkgc3F1YXJlIGJyYWNrZXRzCi0gICAgICAoPHF1b3RlPls8L3F1b3RlPiBhbmQgPHF1b3RlPl08L3F1b3RlPikgYXJlIHJhbmdlcy4KLSAgICAgIE11bHRpcGxlIHNldHMgb2YgdHlwZXMgYXJlIHN1cHBvcnRlZCB0b28sIGFuZCBzaG91bGQgYmUgc2VwYXJhdGVkIGJ5Ci0gICAgICBhIHNlbWljb2xvbiAoPHF1b3RlPjs8L3F1b3RlPikuIExhdGVyLCBpbiB0aGUgY2hhcHRlciBvbiBwYWRzLCB3ZSB3aWxsCi0gICAgICBzZWUgaG93IHRvIHVzZSB0eXBlcyB0byBrbm93IHRoZSBleGFjdCBmb3JtYXQgb2YgYSBzdHJlYW06Ci0gICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLXBhZHMiLz4uCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJvaWxlci1jb25zdHJ1Y3RvcnMiPgotICAgIDx0aXRsZT5Db25zdHJ1Y3RvciBGdW5jdGlvbnM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgRWFjaCBlbGVtZW50IGhhcyB0d28gZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VkIGZvciBjb25zdHJ1Y3Rpb24gb2YgYW4KLSAgICAgIGVsZW1lbnQuIFRoZSA8ZnVuY3Rpb24+X2NsYXNzX2luaXQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLAotICAgICAgd2hpY2ggaXMgdXNlZCB0byBpbml0aWFsaXNlIHRoZSBjbGFzcyBvbmx5IG9uY2UgKHNwZWNpZnlpbmcgd2hhdCBzaWduYWxzLAotICAgICAgYXJndW1lbnRzIGFuZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0aGUgY2xhc3MgaGFzIGFuZCBzZXR0aW5nIHVwIGdsb2JhbAotICAgICAgc3RhdGUpOyBhbmQgdGhlIDxmdW5jdGlvbj5faW5pdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgdG8KLSAgICAgIGluaXRpYWxpc2UgYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGlzIHR5cGUuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJvaWxlci1wbHVnaW5pbml0Ij4KLSAgICA8dGl0bGU+VGhlIHBsdWdpbl9pbml0IGZ1bmN0aW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIE9uY2Ugd2UgaGF2ZSB3cml0dGVuIGNvZGUgZGVmaW5pbmcgYWxsIHRoZSBwYXJ0cyBvZiB0aGUgcGx1Z2luLCB3ZSBuZWVkIHRvCi0gICAgICB3cml0ZSB0aGUgcGx1Z2luX2luaXQoKSBmdW5jdGlvbi4gVGhpcyBpcyBhIHNwZWNpYWwgZnVuY3Rpb24sIHdoaWNoIGlzCi0gICAgICBjYWxsZWQgYXMgc29vbiBhcyB0aGUgcGx1Z2luIGlzIGxvYWRlZCwgYW5kIHNob3VsZCByZXR1cm4gVFJVRSBvciBGQUxTRQotICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgbG9hZGVkIGluaXRpYWxpemVkIGFueSBkZXBlbmRlbmNpZXMgY29ycmVjdGx5LgotICAgICAgQWxzbywgaW4gdGhpcyBmdW5jdGlvbiwgYW55IHN1cHBvcnRlZCBlbGVtZW50IHR5cGUgaW4gdGhlIHBsdWdpbiBzaG91bGQKLSAgICAgIGJlIHJlZ2lzdGVyZWQuCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhLS0gZXhhbXBsZS1iZWdpbiByZWdpc3Rlci5mdW5jIC0tPgotPCFbQ0RBVEFbCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKnBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJteV9maWx0ZXIiLAotCQkJICAgICAgIEdTVF9SQU5LX05PTkUsCi0JCQkgICAgICAgR1NUX1RZUEVfTVlfRklMVEVSKTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKAotICBHU1RfVkVSU0lPTl9NQUpPUiwKLSAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gIG15X2ZpbHRlciwKLSAgIk15IGZpbHRlciBwbHVnaW4iLAotICBwbHVnaW5faW5pdCwKLSAgVkVSU0lPTiwKLSAgIkxHUEwiLAotICAiR1N0cmVhbWVyIiwKLSAgImh0dHA6Ly9nc3RyZWFtZXIubmV0LyIKLSkKLV1dPgotPCEtLSBleGFtcGxlLWVuZCByZWdpc3Rlci5mdW5jIC0tPgotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBOb3RlIHRoYXQgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGJ5IHRoZSBwbHVnaW5faW5pdCgpIGZ1bmN0aW9uIHdpbGwgYmUKLSAgICAgIGNhY2hlZCBpbiBhIGNlbnRyYWwgcmVnaXN0cnkuIEZvciB0aGlzIHJlYXNvbiwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlCi0gICAgICBzYW1lIGluZm9ybWF0aW9uIGlzIGFsd2F5cyByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb246IGZvciBleGFtcGxlLCBpdCAKLSAgICAgIG11c3Qgbm90IG1ha2UgZWxlbWVudCBmYWN0b3JpZXMgYXZhaWxhYmxlIGJhc2VkIG9uIHJ1bnRpbWUgY29uZGl0aW9ucy4KLSAgICAgIElmIGFuIGVsZW1lbnQgY2FuIG9ubHkgd29yayBpbiBjZXJ0YWluIGNvbmRpdGlvbnMgKGZvciBleGFtcGxlLCBpZiB0aGUKLSAgICAgIHNvdW5kY2FyZCBpcyBub3QgYmVpbmcgdXNlZCBieSBzb21lIG90aGVyIHByb2Nlc3MpIHRoaXMgbXVzdCBiZSByZWZsZWN0ZWQKLSAgICAgIGJ5IHRoZSBlbGVtZW50IGJlaW5nIHVuYWJsZSB0byBlbnRlciB0aGUgUkVBRFkgc3RhdGUgaWYgdW5hdmFpbGFibGUsCi0gICAgICByYXRoZXIgdGhhbiB0aGUgcGx1Z2luIGF0dGVtcHRpbmcgdG8gZGVueSBleGlzdGVuY2Ugb2YgdGhlIHBsdWdpbi4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9idWlsZGluZy1jaGFpbmZuLnhtbCBiL2RvY3MvcHdnL2J1aWxkaW5nLWNoYWluZm4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzdjYTQ5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL2J1aWxkaW5nLWNoYWluZm4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLQotPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgotCi08Y2hhcHRlciBpZD0iY2hhcHRlci1idWlsZGluZy1jaGFpbmZuIj4KLSAgPHRpdGxlPlRoZSBjaGFpbiBmdW5jdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIFRoZSBjaGFpbiBmdW5jdGlvbiBpcyB0aGUgZnVuY3Rpb24gaW4gd2hpY2ggYWxsIGRhdGEgcHJvY2Vzc2luZyB0YWtlcwotICAgIHBsYWNlLiBJbiB0aGUgY2FzZSBvZiBhIHNpbXBsZSBmaWx0ZXIsIDxmdW5jdGlvbj5fY2hhaW4gKCk8L2Z1bmN0aW9uPgotICAgIGZ1bmN0aW9ucyBhcmUgbW9zdGx5IGxpbmVhciBmdW5jdGlvbnMgLSBzbyBmb3IgZWFjaCBpbmNvbWluZyBidWZmZXIsCi0gICAgb25lIGJ1ZmZlciB3aWxsIGdvIG91dCwgdG9vLiBCZWxvdyBpcyBhIHZlcnkgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgYSBjaGFpbiBmdW5jdGlvbjoKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGNoYWluLmMgYSAtLT48IS0tCi0jaW5jbHVkZSAiaW5pdC5mdW5jIgotI2luY2x1ZGUgImNhcHMuZnVuYyIKLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X2ZpbHRlcl9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci19Ci0tLT48IS0tIGV4YW1wbGUtZW5kIGNoYWluLmMgYSAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBjaGFpbi5jIGIgLS0+Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfbXlfZmlsdGVyX2NoYWluIChHc3RQYWQgICAgKnBhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE9iamVjdCAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpidWYpOwotCi1bLi5dCi0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2luaXQgKEdzdE15RmlsdGVyICogZmlsdGVyKQotewotWy4uXQotICAvKiBjb25maWd1cmUgY2hhaW4gZnVuY3Rpb24gb24gdGhlIHBhZCBiZWZvcmUgYWRkaW5nCi0gICAqIHRoZSBwYWQgdG8gdGhlIGVsZW1lbnQgKi8KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGZpbHRlci0mZ3Q7c2lua3BhZCwKLSAgICAgIGdzdF9teV9maWx0ZXJfY2hhaW4pOwotWy4uXQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X215X2ZpbHRlcl9jaGFpbiAoR3N0UGFkICAgICpwYWQsCi0gICAgICAgICAgICAgICAgICAgICBHc3RPYmplY3QgKnBhcmVudCwKLQkJICAgICBHc3RCdWZmZXIgKmJ1ZikKLXsKLSAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKHBhcmVudCk7Ci0KLSAgaWYgKCFmaWx0ZXItPnNpbGVudCkKLSAgICBnX3ByaW50ICgiSGF2ZSBkYXRhIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQiIGJ5dGVzIVxuIiwKLSAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSk7Ci0KLSAgcmV0dXJuIGdzdF9wYWRfcHVzaCAoZmlsdGVyLT5zcmNwYWQsIGJ1Zik7Ci19Ci08IS0tIGV4YW1wbGUtZW5kIGNoYWluLmMgYiAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBjaGFpbi5jIGMgLS0+PCEtLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfbXlfZmlsdGVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUIChHU1RfRUxFTUVOVF9DTEFTUywKLSAgICAgIGNoYW5nZV9zdGF0ZSwgKGVsZW1lbnQsIHRyYW5zaXRpb24pLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotfQotI2luY2x1ZGUgInJlZ2lzdGVyLmZ1bmMiCi0gIC0tPjwhLS0gZXhhbXBsZS1lbmQgY2hhaW4uYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgIE9idmlvdXNseSwgdGhlIGFib3ZlIGRvZXNuJ3QgZG8gbXVjaCB1c2VmdWwuIEluc3RlYWQgb2YgcHJpbnRpbmcgdGhhdCB0aGUKLSAgICBkYXRhIGlzIGluLCB5b3Ugd291bGQgbm9ybWFsbHkgcHJvY2VzcyB0aGUgZGF0YSB0aGVyZS4gUmVtZW1iZXIsIGhvd2V2ZXIsCi0gICAgdGhhdCBidWZmZXJzIGFyZSBub3QgYWx3YXlzIHdyaXRlYWJsZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBJbiBtb3JlIGFkdmFuY2VkIGVsZW1lbnRzICh0aGUgb25lcyB0aGF0IGRvIGV2ZW50IHByb2Nlc3NpbmcpLCB5b3UgbWF5IHdhbnQKLSAgICB0byBhZGRpdGlvbmFsbHkgc3BlY2lmeSBhbiBldmVudCBoYW5kbGluZyBmdW5jdGlvbiwgd2hpY2ggd2lsbCBiZSBjYWxsZWQKLSAgICB3aGVuIHN0cmVhbS1ldmVudHMgYXJlIHNlbnQgKHN1Y2ggYXMgY2FwcywgZW5kLW9mLXN0cmVhbSwgbmV3c2VnbWVudCwgdGFncywgZXRjLikuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfaW5pdCAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIpCi17Ci1bLi5dCi0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NpbmtwYWQsCi0gICAgICBnc3RfbXlfZmlsdGVyX3NpbmtfZXZlbnQpOwotWy4uXQotfQotPCEtLSBleGFtcGxlLWJlZ2luIGNoYWluMi5jIGEgLS0+PCEtLQotI2luY2x1ZGUgImluaXQuZnVuYyIKLSNpbmNsdWRlICJjYXBzLmZ1bmMiCi0jaW5jbHVkZSAiY2hhaW4uZnVuYyIKLS0tPjwhLS0gZXhhbXBsZS1lbmQgY2hhaW4yLmMgYSAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBjaGFpbi5mdW5jIGEgLS0+PCEtLQotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfc3RvcF9wcm9jZXNzaW5nIChHc3RNeUZpbHRlciAqIGZpbHRlcikKLXsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfbXlfZmlsdGVyX3Byb2Nlc3NfZGF0YSAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIsIGNvbnN0IEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0tLT48IS0tIGV4YW1wbGUtZW5kIGNoYWluLmZ1bmMgYSAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBjaGFpbi5mdW5jIGIgLS0+Ci1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9teV9maWx0ZXJfc2lua19ldmVudCAoR3N0UGFkICAgICpwYWQsCi0JCSAgICAgICAgICBHc3RPYmplY3QgKnBhcmVudCwKLQkJICAgICAgICAgIEdzdEV2ZW50ICAqZXZlbnQpCi17Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgICAvKiB3ZSBzaG91bGQgaGFuZGxlIHRoZSBmb3JtYXQgaGVyZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgLyogZW5kLW9mLXN0cmVhbSwgd2Ugc2hvdWxkIGNsb3NlIGRvd24gYWxsIHN0cmVhbSBsZWZ0b3ZlcnMgaGVyZSAqLwotICAgICAgZ3N0X215X2ZpbHRlcl9zdG9wX3Byb2Nlc3NpbmcgKGZpbHRlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X215X2ZpbHRlcl9jaGFpbiAoR3N0UGFkICAgICpwYWQsCi0JCSAgICAgR3N0T2JqZWN0ICpwYXJlbnQsCi0JCSAgICAgR3N0QnVmZmVyICpidWYpCi17Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChwYXJlbnQpOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLQotICBvdXRidWYgPSBnc3RfbXlfZmlsdGVyX3Byb2Nlc3NfZGF0YSAoZmlsdGVyLCBidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBpZiAoIW91dGJ1ZikgewotICAgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIC0gc2lnbmFsIGFuIGVycm9yICovCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKEdTVF9FTEVNRU5UIChmaWx0ZXIpLCBTVFJFQU0sIEZBSUxFRCwgKE5VTEwpLCAoTlVMTCkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIHJldHVybiBnc3RfcGFkX3B1c2ggKGZpbHRlci0+c3JjcGFkLCBvdXRidWYpOwotfQotPCEtLSBleGFtcGxlLWVuZCBjaGFpbi5mdW5jIGIgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gY2hhaW4yLmMgYiAtLT48IS0tCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9teV9maWx0ZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgcmV0dXJuIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQgKEdTVF9FTEVNRU5UX0NMQVNTLAotICAgICAgY2hhbmdlX3N0YXRlLCAoZWxlbWVudCwgdHJhbnNpdGlvbiksIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci19Ci0jaW5jbHVkZSAicmVnaXN0ZXIuZnVuYyIKLSAgLS0+PCEtLSBleGFtcGxlLWVuZCBjaGFpbjIuYyBiIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgIEluIHNvbWUgY2FzZXMsIGl0IG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYW4gZWxlbWVudCB0byBoYXZlIGNvbnRyb2wgb3ZlciB0aGUKLSAgICBpbnB1dCBkYXRhIHJhdGUsIHRvby4gSW4gdGhhdCBjYXNlLCB5b3UgcHJvYmFibHkgd2FudCB0byB3cml0ZSBhIHNvLWNhbGxlZAotICAgIDxlbXBoYXNpcz5sb29wLWJhc2VkPC9lbXBoYXNpcz4gZWxlbWVudC4gU291cmNlIGVsZW1lbnRzICh3aXRoIG9ubHkgc291cmNlCi0gICAgcGFkcykgY2FuIGFsc28gYmUgPGVtcGhhc2lzPmdldC1iYXNlZDwvZW1waGFzaXM+IGVsZW1lbnRzLiBUaGVzZSBjb25jZXB0cwotICAgIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBhZHZhbmNlZCBzZWN0aW9uIG9mIHRoaXMgZ3VpZGUsIGFuZCBpbiB0aGUgc2VjdGlvbgotICAgIHRoYXQgc3BlY2lmaWNhbGx5IGRpc2N1c3NlcyBzb3VyY2UgcGFkcy4KLSAgPC9wYXJhPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYnVpbGRpbmctZXZlbnRmbi54bWwgYi9kb2NzL3B3Zy9idWlsZGluZy1ldmVudGZuLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcyZTM3Ni4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9idWlsZGluZy1ldmVudGZuLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLQotPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgotCi08Y2hhcHRlciBpZD0iY2hhcHRlci1idWlsZGluZy1ldmVudGZuIj4KLSAgPHRpdGxlPlRoZSBldmVudCBmdW5jdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIFRoZSBldmVudCBmdW5jdGlvbiBub3RpZmllcyB5b3Ugb2Ygc3BlY2lhbCBldmVudHMgdGhhdCBoYXBwZW4gaW4KLSAgICB0aGUgZGF0YXN0cmVhbSAoc3VjaCBhcyBjYXBzLCBlbmQtb2Ytc3RyZWFtLCBuZXdzZWdtZW50LCB0YWdzLCBldGMuKS4KLSAgICBFdmVudHMgY2FuIHRyYXZlbCBib3RoIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtLCBzbyB5b3UgY2FuIHJlY2VpdmUgdGhlbQotICAgIG9uIHNpbmsgcGFkcyBhcyB3ZWxsIGFzIHNvdXJjZSBwYWRzLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBCZWxvdyBmb2xsb3dzIGEgdmVyeSBzaW1wbGUgZXZlbnQgZnVuY3Rpb24gdGhhdCB3ZSBpbnN0YWxsIG9uIHRoZSBzaW5rCi0gICAgcGFkIG9mIG91ciBlbGVtZW50LgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotc3RhdGljIGdib29sZWFuIGdzdF9teV9maWx0ZXJfc2lua19ldmVudCAoR3N0UGFkICAgICpwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RPYmplY3QgKnBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEV2ZW50ICAqZXZlbnQpOwotCi1bLi5dCi0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2luaXQgKEdzdE15RmlsdGVyICogZmlsdGVyKQotewotWy4uXQotICAvKiBjb25maWd1cmUgZXZlbnQgZnVuY3Rpb24gb24gdGhlIHBhZCBiZWZvcmUgYWRkaW5nCi0gICAqIHRoZSBwYWQgdG8gdGhlIGVsZW1lbnQgKi8KLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGZpbHRlci0+c2lua3BhZCwKLSAgICAgIGdzdF9teV9maWx0ZXJfc2lua19ldmVudCk7Ci1bLi5dCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X2ZpbHRlcl9zaW5rX2V2ZW50IChHc3RQYWQgICAgKnBhZCwKLQkJICAgICAgICAgIEdzdE9iamVjdCAqcGFyZW50LAotCQkgICAgICAgICAgR3N0RXZlbnQgICpldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgICAgLyogd2Ugc2hvdWxkIGhhbmRsZSB0aGUgZm9ybWF0IGhlcmUgKi8KLQotICAgICAgLyogcHVzaCB0aGUgZXZlbnQgZG93bnN0cmVhbSAqLwotICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChmaWx0ZXItPnNyY3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgLyogZW5kLW9mLXN0cmVhbSwgd2Ugc2hvdWxkIGNsb3NlIGRvd24gYWxsIHN0cmVhbSBsZWZ0b3ZlcnMgaGVyZSAqLwotICAgICAgZ3N0X215X2ZpbHRlcl9zdG9wX3Byb2Nlc3NpbmcgKGZpbHRlcik7Ci0KLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBqdXN0IGNhbGwgdGhlIGRlZmF1bHQgaGFuZGxlciAqLwotICAgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLV1dPgotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICBJdCBpcyBhIGdvb2QgaWRlYSB0byBjYWxsIHRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIKLSAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9ldmVudF9kZWZhdWx0ICgpPC9mdW5jdGlvbj4gZm9yIHVua25vd24gZXZlbnRzLgotICAgIERlcGVuZGluZyBvbiB0aGUgZXZlbnQgdHlwZSwgdGhlIGRlZmF1bHQgaGFuZGxlciB3aWxsIGZvcndhcmQgCi0gICAgdGhlIGV2ZW50IG9yIHNpbXBseSB1bnJlZiBpdC4gVGhlIENBUFMgZXZlbnQgaXMgYnkgZGVmYXVsdCBub3QKLSAgICBmb3J3YXJkZWQgc28gd2UgbmVlZCB0byBkbyB0aGlzIGluIHRoZSBldmVudCBoYW5kbGVyIG91cnNlbHZlcy4KLSAgPC9wYXJhPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYnVpbGRpbmctcGFkcy54bWwgYi9kb2NzL3B3Zy9idWlsZGluZy1wYWRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUzMTY0OC4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9idWlsZGluZy1wYWRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0KLTwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KLQotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYnVpbGRpbmctcGFkcyI+Ci0gIDx0aXRsZT5TcGVjaWZ5aW5nIHRoZSBwYWRzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgQXMgZXhwbGFpbmVkIGJlZm9yZSwgcGFkcyBhcmUgdGhlIHBvcnQgdGhyb3VnaCB3aGljaCBkYXRhIGdvZXMgaW4gYW5kIG91dAotICAgIG9mIHlvdXIgZWxlbWVudCwgYW5kIHRoYXQgbWFrZXMgdGhlbSBhIHZlcnkgaW1wb3J0YW50IGl0ZW0gaW4gdGhlIHByb2Nlc3MKLSAgICBvZiBlbGVtZW50IGNyZWF0aW9uLiBJbiB0aGUgYm9pbGVycGxhdGUgY29kZSwgd2UgaGF2ZSBzZWVuIGhvdyBzdGF0aWMgcGFkCi0gICAgdGVtcGxhdGVzIHRha2UgY2FyZSBvZiByZWdpc3RlcmluZyBwYWQgdGVtcGxhdGVzIHdpdGggdGhlIGVsZW1lbnQgY2xhc3MuCi0gICAgSGVyZSwgd2Ugd2lsbCBzZWUgaG93IHRvIGNyZWF0ZSBhY3R1YWwgZWxlbWVudHMsIHVzZSBhbiA8ZnVuY3Rpb24+X2V2ZW50Ci0gICAgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiB0byBjb25maWd1cmUgZm9yIGEgcGFydGljdWxhciBmb3JtYXQgYW5kIGhvdyB0bwotICAgIHJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBsZXQgZGF0YSBmbG93IHRocm91Z2ggdGhlIGVsZW1lbnQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgSW4gdGhlIGVsZW1lbnQgPGZ1bmN0aW9uPl9pbml0ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHlvdSBjcmVhdGUgdGhlIHBhZAotICAgIGZyb20gdGhlIHBhZCB0ZW1wbGF0ZSB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZWxlbWVudCBjbGFzcyBpbgotICAgIHRoZSA8ZnVuY3Rpb24+X2NsYXNzX2luaXQgKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gQWZ0ZXIgY3JlYXRpbmcgdGhlIHBhZCwKLSAgICB5b3UgaGF2ZSB0byBzZXQgYSA8ZnVuY3Rpb24+X2NoYWluICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gcG9pbnRlciB0aGF0IHdpbGwKLSAgICByZWNlaXZlIGFuZCBwcm9jZXNzIHRoZSBpbnB1dCBkYXRhIG9uIHRoZSBzaW5rcGFkLgotICAgIFlvdSBjYW4gb3B0aW9uYWxseSBhbHNvIHNldCBhbiA8ZnVuY3Rpb24+X2V2ZW50ICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24KLSAgICBwb2ludGVyIGFuZCBhIDxmdW5jdGlvbj5fcXVlcnkgKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBwb2ludGVyLgotICAgIEFsdGVybmF0aXZlbHksIHBhZHMgY2FuIGFsc28gb3BlcmF0ZSBpbiBsb29waW5nIG1vZGUsIHdoaWNoIG1lYW5zIHRoYXQgdGhleQotICAgIGNhbiBwdWxsIGRhdGEgdGhlbXNlbHZlcy4gTW9yZSBvbiB0aGlzIHRvcGljIGxhdGVyLiBBZnRlciB0aGF0LCB5b3UgaGF2ZQotICAgIHRvIHJlZ2lzdGVyIHRoZSBwYWQgd2l0aCB0aGUgZWxlbWVudC4gVGhpcyBoYXBwZW5zIGxpa2UgdGhpczoKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIGluaXQuZnVuYyBhIC0tPjwhLS0KLSNpbmNsdWRlICJmaWx0ZXIuaCIKLSNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfbXlfZmlsdGVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1HX0RFRklORV9UWVBFIChHc3RNeUZpbHRlciwgZ3N0X215X2ZpbHRlciwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKGdwb2ludGVyIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9Ci0gIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgKLSAgICAic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCi0gICk7Ci0gIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPQotICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoCi0gICAgInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiQU5ZIikKLSAgKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICJBbiBleGFtcGxlIHBsdWdpbiIsCi0gICAgIkV4YW1wbGUvRmlyc3RFeGFtcGxlIiwKLSAgICAiU2hvd3MgdGhlIGJhc2ljIHN0cnVjdHVyZSBvZiBhIHBsdWdpbiIsCi0gICAgInlvdXIgbmFtZSA8eW91ci5uYW1lQHlvdXIuaXNwPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnNyY190ZW1wbGF0ZSkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzaW5rX3RlbXBsYXRlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKEdzdE15RmlsdGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKS0+Y2hhbmdlX3N0YXRlID0gZ3N0X215X2ZpbHRlcl9jaGFuZ2Vfc3RhdGU7Ci19Ci0tLT48IS0tIGV4YW1wbGUtZW5kIGluaXQuZnVuYyBhIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIGluaXQuZnVuYyBjIC0tPjwhLS0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCWdzdF9teV9maWx0ZXJfY2hhaW4JIChHc3RQYWQgICAgICAgICpwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE9iamVjdCAgICAgKnBhcmVudCwKLQkJCQkJCSAgR3N0QnVmZmVyICAgICAqYnVmKTsKLXN0YXRpYyBnYm9vbGVhbgkJZ3N0X215X2ZpbHRlcl9zaW5rX2V2ZW50IChHc3RQYWQgICAgICAgICpwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE9iamVjdCAgICAgKnBhcmVudCwKLQkJCQkJCSAgR3N0RXZlbnQgICAgICAqZXZlbnQpOwotc3RhdGljIGdib29sZWFuIAlnc3RfbXlfZmlsdGVyX3NyY19xdWVyeSAgKEdzdFBhZCAgICAgICAgKnBhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0T2JqZWN0ICAgICAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAgICAgICpxdWVyeSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gCWdzdF9teV9maWx0ZXJfc2lua19xdWVyeSAoR3N0UGFkICAgICAgICAqcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RPYmplY3QgICAgICpwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFF1ZXJ5ICAgICAgKnF1ZXJ5KTsKLS0tPjwhLS0gZXhhbXBsZS1lbmQgaW5pdC5mdW5jIGMgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gaW5pdC5mdW5jIGQgLS0+Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2luaXQgKEdzdE15RmlsdGVyICpmaWx0ZXIpCi17Ci0gIC8qIHBhZCB0aHJvdWdoIHdoaWNoIGRhdGEgY29tZXMgaW4gdG8gdGhlIGVsZW1lbnQgKi8KLSAgZmlsdGVyLSZndDtzaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKAotCSZhbXA7c2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgLyogcGFkcyBhcmUgY29uZmlndXJlZCBoZXJlIHdpdGggZ3N0X3BhZF9zZXRfKl9mdW5jdGlvbiAoKSAqLwotPCEtLSBleGFtcGxlLWVuZCBpbml0LmZ1bmMgZCAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBpbml0LmZ1bmMgZSAtLT48IS0tCi0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChmaWx0ZXItJmd0O3NpbmtwYWQsIGdzdF9teV9maWx0ZXJfY2hhaW4pOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoZmlsdGVyLSZndDtzaW5rcGFkLCBnc3RfbXlfZmlsdGVyX3NpbmtfZXZlbnQpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoZmlsdGVyLSZndDtzaW5rcGFkLCBnc3RfbXlfZmlsdGVyX3NpbmtfcXVlcnkpOwotLS0+PCEtLSBleGFtcGxlLWVuZCBpbml0LmZ1bmMgZSAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBpbml0LmZ1bmMgZiAtLT4KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGZpbHRlciksIGZpbHRlci0mZ3Q7c2lua3BhZCk7Ci0KLSAgLyogcGFkIHRocm91Z2ggd2hpY2ggZGF0YSBnb2VzIG91dCBvZiB0aGUgZWxlbWVudCAqLwotICBmaWx0ZXItJmd0O3NyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgKLQkmYW1wO3NyY190ZW1wbGF0ZSwgInNyYyIpOwotICAvKiBwYWRzIGFyZSBjb25maWd1cmVkIGhlcmUgd2l0aCBnc3RfcGFkX3NldF8qX2Z1bmN0aW9uICgpICovCi08IS0tIGV4YW1wbGUtZW5kIGluaXQuZnVuYyBmIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIGluaXQuZnVuYyBnIC0tPjwhLS0KLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGZpbHRlci0mZ3Q7c3JjcGFkLCBnc3RfbXlfZmlsdGVyX3NyY19xdWVyeSk7Ci0tLT48IS0tIGV4YW1wbGUtZW5kIGluaXQuZnVuYyBnIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIGluaXQuZnVuYyBoIC0tPgotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZmlsdGVyKSwgZmlsdGVyLSZndDtzcmNwYWQpOwotCi0gIC8qIHByb3BlcnRpZXMgaW5pdGlhbCB2YWx1ZSAqLwotICBmaWx0ZXItPnNpbGVudCA9IEZBTFNFOwotfQotICA8IS0tIGV4YW1wbGUtZW5kIGluaXQuZnVuYyBoIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTwhLS0gZXhhbXBsZS1iZWdpbiBwYWRzLmMgLS0+PCEtLQotI2luY2x1ZGUgImluaXQuZnVuYyIKLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXlfZmlsdGVyX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgcmV0dXJuIGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9teV9maWx0ZXJfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIHJldHVybiBnc3RfcGFkX3B1c2ggKEdTVF9NWV9GSUxURVIgKHBhcmVudCktPnNyY3BhZCwgYnVmKTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfbXlfZmlsdGVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUIChHU1RfRUxFTUVOVF9DTEFTUywKLSAgICAgIGNoYW5nZV9zdGF0ZSwgKGVsZW1lbnQsIHRyYW5zaXRpb24pLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotfQotCi0jaW5jbHVkZSAicmVnaXN0ZXIuZnVuYyIKLS0tPjwhLS0gZXhhbXBsZS1lbmQgcGFkcy5jIC0tPgotPC9jaGFwdGVyPgotCmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9idWlsZGluZy1wcm9wcy54bWwgYi9kb2NzL3B3Zy9idWlsZGluZy1wcm9wcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZjdkNzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYnVpbGRpbmctcHJvcHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLTwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KLQotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYnVpbGRpbmctYXJncyIgeHJlZmxhYmVsPSJBZGRpbmcgUHJvcGVydGllcyI+Ci0gIDx0aXRsZT5BZGRpbmcgUHJvcGVydGllczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIFRoZSBwcmltYXJ5IGFuZCBtb3N0IGltcG9ydGFudCB3YXkgb2YgY29udHJvbGxpbmcgaG93IGFuIGVsZW1lbnQgYmVoYXZlcywKLSAgICBpcyB0aHJvdWdoIEdPYmplY3QgcHJvcGVydGllcy4gR09iamVjdCBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIGluIHRoZQotICAgIDxmdW5jdGlvbj5fY2xhc3NfaW5pdCAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBUaGUgZWxlbWVudCBvcHRpb25hbGx5Ci0gICAgaW1wbGVtZW50cyBhIDxmdW5jdGlvbj5fZ2V0X3Byb3BlcnR5ICgpPC9mdW5jdGlvbj4gYW5kIGEKLSAgICA8ZnVuY3Rpb24+X3NldF9wcm9wZXJ0eSAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZQotICAgIG5vdGlmaWVkIGlmIGFuIGFwcGxpY2F0aW9uIGNoYW5nZXMgb3IgcmVxdWVzdHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHksCi0gICAgYW5kIGNhbiB0aGVuIGZpbGwgaW4gdGhlIHZhbHVlIG9yIHRha2UgYWN0aW9uIHJlcXVpcmVkIGZvciB0aGF0IHByb3BlcnR5Ci0gICAgdG8gY2hhbmdlIHZhbHVlIGludGVybmFsbHkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgWW91IHByb2JhYmx5IGFsc28gd2FudCB0byBrZWVwIGFuIGluc3RhbmNlIHZhcmlhYmxlIGFyb3VuZAotICAgIHdpdGggdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHlvdSB1c2UgaW4gdGhlCi0gICAgZ2V0IGFuZCBzZXQgZnVuY3Rpb25zLiAKLSAgICBOb3RlIHRoYXQgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+IHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2V0IHlvdXIKLSAgICBpbnN0YW5jZSB2YXJpYWJsZSB0byB0aGUgZGVmYXVsdCB2YWx1ZSwgeW91IHdpbGwgaGF2ZSB0byBkbyB0aGF0IGluIHRoZQotICAgIDxmdW5jdGlvbj5faW5pdCAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIG9mIHlvdXIgZWxlbWVudC4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+PCEtLSBleGFtcGxlLWJlZ2luIHByb3BlcnRpZXMuYyBhIC0tPjwhLS0KLSNpbmNsdWRlICJmaWx0ZXIuaCIKLUdfREVGSU5FX1RZUEUgKEdzdE15RmlsdGVyLCBnc3RfbXlfZmlsdGVyLCBHU1RfVFlQRV9FTEVNRU5UKTsKLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2NsYXNzX2luaXQgKGdwb2ludGVyIGtsYXNzKQotewotfQotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfaW5pdCAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIpCi17Ci19Ci0tLT48IS0tIGV4YW1wbGUtZW5kIHByb3BlcnRpZXMuYyBhIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHByb3BlcnRpZXMuYyBiIC0tPgotLyogcHJvcGVydGllcyAqLwotZW51bSB7Ci0gIFBST1BfMCwKLSAgUFJPUF9TSUxFTlQKLSAgLyogRklMTCBNRSAqLwotfTsKLQotc3RhdGljIHZvaWQJZ3N0X215X2ZpbHRlcl9zZXRfcHJvcGVydHkJKEdPYmplY3QgICAgICAqb2JqZWN0LAotCQkJCQkJIGd1aW50ICAgICAgICAgcHJvcF9pZCwKLQkJCQkJCSBjb25zdCBHVmFsdWUgKnZhbHVlLAotCQkJCQkJIEdQYXJhbVNwZWMgICAqcHNwZWMpOwotc3RhdGljIHZvaWQJZ3N0X215X2ZpbHRlcl9nZXRfcHJvcGVydHkJKEdPYmplY3QgICAgICAqb2JqZWN0LAotCQkJCQkJIGd1aW50ICAgICAgICAgcHJvcF9pZCwKLQkJCQkJCSBHVmFsdWUgICAgICAgKnZhbHVlLAotCQkJCQkJIEdQYXJhbVNwZWMgICAqcHNwZWMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X215X2ZpbHRlcl9jbGFzc19pbml0IChHc3RNeUZpbHRlckNsYXNzICprbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIC8qIGRlZmluZSB2aXJ0dWFsIGZ1bmN0aW9uIHBvaW50ZXJzICovCi0gIG9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X215X2ZpbHRlcl9zZXRfcHJvcGVydHk7Ci0gIG9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X215X2ZpbHRlcl9nZXRfcHJvcGVydHk7Ci0KLSAgLyogZGVmaW5lIHByb3BlcnRpZXMgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBQUk9QX1NJTEVOVCwKLSAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNpbGVudCIsICJTaWxlbnQiLAotCQkJICAiV2hldGhlciB0byBiZSB2ZXJ5IHZlcmJvc2Ugb3Igbm90IiwKLQkJCSAgRkFMU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X215X2ZpbHRlcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgICAgICAqb2JqZWN0LAotCQkJICAgIGd1aW50ICAgICAgICAgcHJvcF9pZCwKLQkJCSAgICBjb25zdCBHVmFsdWUgKnZhbHVlLAotCQkJICAgIEdQYXJhbVNwZWMgICAqcHNwZWMpCi17Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TSUxFTlQ6Ci0gICAgICBmaWx0ZXItPnNpbGVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGdfcHJpbnQgKCJTaWxlbnQgYXJndW1lbnQgd2FzIGNoYW5nZWQgdG8gJXNcbiIsCi0JICAgICAgIGZpbHRlci0+c2lsZW50ID8gInRydWUiIDogImZhbHNlIik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAgICAqb2JqZWN0LAotCQkJICAgIGd1aW50ICAgICAgIHByb3BfaWQsCi0JCQkgICAgR1ZhbHVlICAgICAqdmFsdWUsCi0JCQkgICAgR1BhcmFtU3BlYyAqcHNwZWMpCi17Ci0gIEdzdE15RmlsdGVyICpmaWx0ZXIgPSBHU1RfTVlfRklMVEVSIChvYmplY3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NJTEVOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPnNpbGVudCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci08IS0tIGV4YW1wbGUtZW5kIHByb3BlcnRpZXMuYyBiIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHByb3BlcnRpZXMuYyBjIC0tPjwhLS0KLSNpbmNsdWRlICJyZWdpc3Rlci5mdW5jIgotICAtLT48IS0tIGV4YW1wbGUtZW5kIHByb3BlcnRpZXMuYyBjIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgIFRoZSBhYm92ZSBpcyBhIHZlcnkgc2ltcGxlIGV4YW1wbGUgb2YgaG93IHByb3BlcnRpZXMgYXJlIHVzZWQuIEdyYXBoaWNhbAotICAgIGFwcGxpY2F0aW9ucyB3aWxsIHVzZSB0aGVzZSBwcm9wZXJ0aWVzIGFuZCB3aWxsIGRpc3BsYXkgYQotICAgIHVzZXItY29udHJvbGxhYmxlIHdpZGdldCB3aXRoIHdoaWNoIHRoZXNlIHByb3BlcnRpZXMgY2FuIGJlIGNoYW5nZWQuCi0gICAgVGhpcyBtZWFucyB0aGF0IC0gZm9yIHRoZSBwcm9wZXJ0eSB0byBiZSBhcyB1c2VyLWZyaWVuZGx5Ci0gICAgYXMgcG9zc2libGUgLSB5b3Ugc2hvdWxkIGJlIGFzIGV4YWN0IGFzIHBvc3NpYmxlIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZQotICAgIHByb3BlcnR5LiBOb3Qgb25seSBpbiBkZWZpbmluZyByYW5nZXMgaW4gYmV0d2VlbiB3aGljaCB2YWxpZCBwcm9wZXJ0aWVzCi0gICAgY2FuIGJlIGxvY2F0ZWQgKGZvciBpbnRlZ2VycywgZmxvYXRzLCBldGMuKSwgYnV0IGFsc28gaW4gdXNpbmcgdmVyeQotICAgIGRlc2NyaXB0aXZlIChiZXR0ZXIgeWV0OiBpbnRlcm5hdGlvbmFsaXplZCkgc3RyaW5ncyBpbiB0aGUgZGVmaW5pdGlvbiBvZgotICAgIHRoZSBwcm9wZXJ0eSwgYW5kIGlmIHBvc3NpYmxlIHVzaW5nIGVudW1zIGFuZCBmbGFncyBpbnN0ZWFkIG9mIGludGVnZXJzLgotICAgIFRoZSBHT2JqZWN0IGRvY3VtZW50YXRpb24gZGVzY3JpYmVzIHRoZXNlIGluIGEgdmVyeSBjb21wbGV0ZSB3YXksIGJ1dAotICAgIGJlbG93LCB3ZSdsbCBnaXZlIGEgc2hvcnQgZXhhbXBsZSBvZiB3aGVyZSB0aGlzIGlzIHVzZWZ1bC4gTm90ZSB0aGF0IHVzaW5nCi0gICAgaW50ZWdlcnMgaGVyZSB3b3VsZCBwcm9iYWJseSBjb21wbGV0ZWx5IGNvbmZ1c2UgdGhlIHVzZXIsIGJlY2F1c2UgdGhleQotICAgIG1ha2Ugbm8gc2Vuc2UgaW4gdGhpcyBjb250ZXh0LiBUaGUgZXhhbXBsZSBpcyBzdG9sZW4gZnJvbSB2aWRlb3Rlc3RzcmMuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1ZJREVPVEVTVFNSQ19TTVBURSwKLSAgR1NUX1ZJREVPVEVTVFNSQ19TTk9XLAotICBHU1RfVklERU9URVNUU1JDX0JMQUNLCi19IEdzdFZpZGVvdGVzdHNyY1BhdHRlcm47Ci0KLVsuLl0KLQotI2RlZmluZSBHU1RfVFlQRV9WSURFT1RFU1RTUkNfUEFUVEVSTiAoZ3N0X3ZpZGVvdGVzdHNyY19wYXR0ZXJuX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfdmlkZW90ZXN0c3JjX3BhdHRlcm5fZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSB2aWRlb3Rlc3RzcmNfcGF0dGVybl90eXBlID0gMDsKLQotICBpZiAoIXZpZGVvdGVzdHNyY19wYXR0ZXJuX3R5cGUpIHsKLSAgICBzdGF0aWMgR0VudW1WYWx1ZSBwYXR0ZXJuX3R5cGVzW10gPSB7Ci0gICAgICB7IEdTVF9WSURFT1RFU1RTUkNfU01QVEUsICJTTVBURSAxMDAlIGNvbG9yIGJhcnMiLCAgICAic21wdGUiIH0sCi0gICAgICB7IEdTVF9WSURFT1RFU1RTUkNfU05PVywgICJSYW5kb20gKHRlbGV2aXNpb24gc25vdykiLCAic25vdyIgIH0sCi0gICAgICB7IEdTVF9WSURFT1RFU1RTUkNfQkxBQ0ssICIwJSBCbGFjayIsICAgICAgICAgICAgICAgICAiYmxhY2siIH0sCi0gICAgICB7IDAsIE5VTEwsIE5VTEwgfSwKLSAgICB9OwotCi0gICAgdmlkZW90ZXN0c3JjX3BhdHRlcm5fdHlwZSA9Ci0JZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFZpZGVvdGVzdHNyY1BhdHRlcm4iLAotCQkJCXBhdHRlcm5fdHlwZXMpOwotICB9Ci0KLSAgcmV0dXJuIHZpZGVvdGVzdHNyY19wYXR0ZXJuX3R5cGU7Ci19Ci0KLVsuLl0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb3Rlc3RzcmNfY2xhc3NfaW5pdCAoR3N0dmlkZW90ZXN0c3JjQ2xhc3MgKmtsYXNzKQotewotWy4uXQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1BBVFRFUk4sCi0gICAgZ19wYXJhbV9zcGVjX2VudW0gKCJwYXR0ZXJuIiwgIlBhdHRlcm4iLAotCQkgICAgICAgIlR5cGUgb2YgdGVzdCBwYXR0ZXJuIHRvIGdlbmVyYXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgR1NUX1RZUEVfVklERU9URVNUU1JDX1BBVFRFUk4sIEdTVF9WSURFT1RFU1RTUkNfU01QVEUsCi0gICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotWy4uXQotfQotICA8L3Byb2dyYW1saXN0aW5nPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYnVpbGRpbmctcXVlcnlmbi54bWwgYi9kb2NzL3B3Zy9idWlsZGluZy1xdWVyeWZuLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4ODE2My4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9idWlsZGluZy1xdWVyeWZuLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLQotPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgotCi08Y2hhcHRlciBpZD0iY2hhcHRlci1idWlsZGluZy1xdWVyeWZuIj4KLSAgPHRpdGxlPlRoZSBxdWVyeSBmdW5jdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIFRocm91Z2ggdGhlIHF1ZXJ5IGZ1bmN0aW9uLCB5b3VyIGVsZW1lbnQgd2lsbCByZWNlaXZlIHF1ZXJpZXMgdGhhdCBpdAotICAgIGhhcyB0byByZXBseSB0by4gVGhlc2UgYXJlIHF1ZXJpZXMgbGlrZSBwb3NpdGlvbiwgZHVyYXRpb24gYnV0IGFsc28KLSAgICBhYm91dCB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgYW5kIHNjaGVkdWxpbmcgbW9kZXMgeW91ciBlbGVtZW50IHN1cHBvcnRzLgotICAgIFF1ZXJpZXMgY2FuIHRyYXZlbCBib3RoIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtLCBzbyB5b3UgY2FuIHJlY2VpdmUgdGhlbQotICAgIG9uIHNpbmsgcGFkcyBhcyB3ZWxsIGFzIHNvdXJjZSBwYWRzLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBCZWxvdyBmb2xsb3dzIGEgdmVyeSBzaW1wbGUgcXVlcnkgZnVuY3Rpb24gdGhhdCB3ZSBpbnN0YWxsIG9uIHRoZSBzb3VyY2UKLSAgICBwYWQgb2Ygb3VyIGVsZW1lbnQuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X215X2ZpbHRlcl9zcmNfcXVlcnkgKEdzdFBhZCAgICAqcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RPYmplY3QgKnBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UXVlcnkgICpxdWVyeSk7Ci0KLVsuLl0KLQotc3RhdGljIHZvaWQKLWdzdF9teV9maWx0ZXJfaW5pdCAoR3N0TXlGaWx0ZXIgKiBmaWx0ZXIpCi17Ci1bLi5dCi0gIC8qIGNvbmZpZ3VyZSBldmVudCBmdW5jdGlvbiBvbiB0aGUgcGFkIGJlZm9yZSBhZGRpbmcKLSAgICogdGhlIHBhZCB0byB0aGUgZWxlbWVudCAqLwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoZmlsdGVyLT5zcmNwYWQsCi0gICAgICBnc3RfbXlfZmlsdGVyX3NyY19xdWVyeSk7Ci1bLi5dCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X2ZpbHRlcl9zcmNfcXVlcnkgKEdzdFBhZCAgICAqcGFkLAotCQkgICAgICAgICBHc3RPYmplY3QgKnBhcmVudCwKLQkJICAgICAgICAgR3N0UXVlcnkgICpxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RNeUZpbHRlciAqZmlsdGVyID0gR1NUX01ZX0ZJTFRFUiAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICAgIC8qIHdlIHNob3VsZCByZXBvcnQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KLSAgICAgIFsuLi5dCi0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjoKLSAgICAgIC8qIHdlIHNob3VsZCByZXBvcnQgdGhlIGR1cmF0aW9uIGhlcmUgKi8KLSAgICAgIFsuLi5dCi0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgICAgLyogd2Ugc2hvdWxkIHJlcG9ydCB0aGUgc3VwcG9ydGVkIGNhcHMgaGVyZSAqLwotICAgICAgWy4uLl0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBqdXN0IGNhbGwgdGhlIGRlZmF1bHQgaGFuZGxlciAqLwotICAgICAgcmV0ID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLV1dPgotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICBJdCBpcyBhIGdvb2QgaWRlYSB0byBjYWxsIHRoZSBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIKLSAgICA8ZnVuY3Rpb24+Z3N0X3BhZF9xdWVyeV9kZWZhdWx0ICgpPC9mdW5jdGlvbj4gZm9yIHVua25vd24gcXVlcmllcy4KLSAgICBEZXBlbmRpbmcgb24gdGhlIHF1ZXJ5IHR5cGUsIHRoZSBkZWZhdWx0IGhhbmRsZXIgd2lsbCBmb3J3YXJkIAotICAgIHRoZSBxdWVyeSBvciBzaW1wbHkgdW5yZWYgaXQuCi0gIDwvcGFyYT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2J1aWxkaW5nLXNpZ25hbHMueG1sIGIvZG9jcy9wd2cvYnVpbGRpbmctc2lnbmFscy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYmUxNjguLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYnVpbGRpbmctc2lnbmFscy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0KLTwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KLQotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItYnVpbGRpbmctc2lnbmFscyI+Ci0gIDx0aXRsZT5TaWduYWxzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgR09iamVjdCBzaWduYWxzIGNhbiBiZSB1c2VkIHRvIG5vdGlmeSBhcHBsaWNhdGlvbnMgb2YgZXZlbnRzIHNwZWNpZmljCi0gICAgdG8gdGhpcyBvYmplY3QuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGJlIGF3YXJlCi0gICAgb2Ygc2lnbmFscyBhbmQgdGhlaXIgbWVhbmluZywgc28gaWYgeW91J3JlIGxvb2tpbmcgZm9yIGEgZ2VuZXJpYyB3YXkKLSAgICBmb3IgYXBwbGljYXRpb24tZWxlbWVudCBpbnRlcmFjdGlvbiwgc2lnbmFscyBhcmUgcHJvYmFibHkgbm90IHdoYXQKLSAgICB5b3UncmUgbG9va2luZyBmb3IuIEluIG1hbnkgY2FzZXMsIGhvd2V2ZXIsIHNpZ25hbHMgY2FuIGJlIHZlcnkgdXNlZnVsLgotICAgIFNlZSB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Imh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9nb2JqZWN0L3N0YWJsZS8iPkdPYmplY3QKLSAgICBkb2N1bWVudGF0aW9uPC91bGluaz4gZm9yIGFsbCBpbnRlcm5hbHMgYWJvdXQgc2lnbmFscy4KLSAgPC9wYXJhPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvYnVpbGRpbmctc3RhdGUueG1sIGIvZG9jcy9wd2cvYnVpbGRpbmctc3RhdGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDdjY2VmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL2J1aWxkaW5nLXN0YXRlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi08Y2hhcHRlciBpZD0iY2hhcHRlci1zdGF0ZW1hbmFnZS1zdGF0ZXMiPgotICA8dGl0bGU+V2hhdCBhcmUgc3RhdGVzPzwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIEEgc3RhdGUgZGVzY3JpYmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaW5zdGFuY2UgaXMgaW5pdGlhbGl6ZWQsIHdoZXRoZXIgaXQKLSAgICBpcyByZWFkeSB0byB0cmFuc2ZlciBkYXRhIGFuZCB3aGV0aGVyIGl0IGlzIGN1cnJlbnRseSBoYW5kbGluZyBkYXRhLiBUaGVyZQotICAgIGFyZSBmb3VyIHN0YXRlcyBkZWZpbmVkIGluICZHU3RyZWFtZXI7OgotICA8L3BhcmE+Ci0gIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDxzeW1ib2w+R1NUX1NUQVRFX05VTEw8L3N5bWJvbD4KLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICA8c3ltYm9sPkdTVF9TVEFURV9SRUFEWTwvc3ltYm9sPgotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDxzeW1ib2w+R1NUX1NUQVRFX1BBVVNFRDwvc3ltYm9sPgotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIDxzeW1ib2w+R1NUX1NUQVRFX1BMQVlJTkc8L3N5bWJvbD4KLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICA8L2l0ZW1pemVkbGlzdD4KLSAgPHBhcmE+Ci0gICAgd2hpY2ggd2lsbCBmcm9tIG5vdyBvbiBiZSByZWZlcnJlZCB0byBzaW1wbHkgYXMgPHF1b3RlPk5VTEw8L3F1b3RlPiwKLSAgICA8cXVvdGU+UkVBRFk8L3F1b3RlPiwgPHF1b3RlPlBBVVNFRDwvcXVvdGU+IGFuZCA8cXVvdGU+UExBWUlORzwvcXVvdGU+LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgIDxzeW1ib2w+R1NUX1NUQVRFX05VTEw8L3N5bWJvbD4gaXMgdGhlIGRlZmF1bHQgc3RhdGUgb2YgYW4gZWxlbWVudC4gSW4gdGhpcyBzdGF0ZSwgaXQKLSAgICBoYXMgbm90IGFsbG9jYXRlZCBhbnkgcnVudGltZSByZXNvdXJjZXMsIGl0IGhhcyBub3QgbG9hZGVkIGFueSBydW50aW1lCi0gICAgbGlicmFyaWVzIGFuZCBpdCBjYW4gb2J2aW91c2x5IG5vdCBoYW5kbGUgZGF0YS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICA8c3ltYm9sPkdTVF9TVEFURV9SRUFEWTwvc3ltYm9sPiBpcyB0aGUgbmV4dCBzdGF0ZSB0aGF0IGFuIGVsZW1lbnQgY2FuIGJlIGluLiBJbiB0aGUKLSAgICBSRUFEWSBzdGF0ZSwgYW4gZWxlbWVudCBoYXMgYWxsIGRlZmF1bHQgcmVzb3VyY2VzIChydW50aW1lLWxpYnJhcmllcywKLSAgICBydW50aW1lLW1lbW9yeSkgYWxsb2NhdGVkLiBIb3dldmVyLCBpdCBoYXMgbm90IHlldCBhbGxvY2F0ZWQgb3IgZGVmaW5lZAotICAgIGFueXRoaW5nIHRoYXQgaXMgc3RyZWFtLXNwZWNpZmljLiBXaGVuIGdvaW5nIGZyb20gTlVMTCB0byBSRUFEWSBzdGF0ZQotICAgICg8c3ltYm9sPkdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWTwvc3ltYm9sPiksIGFuIGVsZW1lbnQgc2hvdWxkCi0gICAgYWxsb2NhdGUgYW55IG5vbi1zdHJlYW0tc3BlY2lmaWMgcmVzb3VyY2VzIGFuZCBzaG91bGQgbG9hZCBydW50aW1lLWxvYWRhYmxlCi0gICAgbGlicmFyaWVzIChpZiBhbnkpLiBXaGVuIGdvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIChmcm9tIFJFQURZIHRvIE5VTEwsCi0gICAgPHN5bWJvbD5HU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw8L3N5bWJvbD4pLCBhbiBlbGVtZW50IHNob3VsZCB1bmxvYWQKLSAgICB0aGVzZSBsaWJyYXJpZXMgYW5kIGZyZWUgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMuIEV4YW1wbGVzIG9mIHN1Y2gKLSAgICByZXNvdXJjZXMgYXJlIGhhcmR3YXJlIGRldmljZXMuIE5vdGUgdGhhdCBmaWxlcyBhcmUgZ2VuZXJhbGx5IHN0cmVhbXMsCi0gICAgYW5kIHRoZXNlIHNob3VsZCB0aHVzIGJlIGNvbnNpZGVyZWQgYXMgc3RyZWFtLXNwZWNpZmljIHJlc291cmNlczsgdGhlcmVmb3JlLAotICAgIHRoZXkgc2hvdWxkIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBiZSBhbGxvY2F0ZWQgaW4gdGhpcyBzdGF0ZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICA8c3ltYm9sPkdTVF9TVEFURV9QQVVTRUQ8L3N5bWJvbD4gaXMgdGhlIHN0YXRlIGluIHdoaWNoIGFuIGVsZW1lbnQgaXMgCi0gICAgcmVhZHkgdG8gYWNjZXB0IGFuZCBoYW5kbGUgZGF0YS4gRm9yIG1vc3QgZWxlbWVudHMgdGhpcyBzdGF0ZSBpcyB0aGUgc2FtZQotICAgIGFzIFBMQVlJTkcuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgYXJlIHNpbmsgZWxlbWVudHMuIFNpbmsKLSAgICBlbGVtZW50cyBvbmx5IGFjY2VwdCBvbmUgc2luZ2xlIGJ1ZmZlciBvZiBkYXRhIGFuZCB0aGVuIGJsb2NrLiBBdCB0aGlzCi0gICAgcG9pbnQgdGhlIHBpcGVsaW5lIGlzICdwcmVyb2xsZWQnIGFuZCByZWFkeSB0byByZW5kZXIgZGF0YSBpbW1lZGlhdGVseS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICA8c3ltYm9sPkdTVF9TVEFURV9QTEFZSU5HPC9zeW1ib2w+IGlzIHRoZSBoaWdoZXN0IHN0YXRlIHRoYXQgYW4gZWxlbWVudAotICAgIGNhbiBiZSBpbi4gRm9yIG1vc3QgZWxlbWVudHMgdGhpcyBzdGF0ZSBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIFBBVVNFRCwKLSAgICB0aGV5IGFjY2VwdCBhbmQgcHJvY2VzcyBldmVudHMgYW5kIGJ1ZmZlcnMgd2l0aCBkYXRhLiBPbmx5IHNpbmsgZWxlbWVudHMKLSAgICBuZWVkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBQQVVTRUQgYW5kIFBMQVlJTkcgc3RhdGUuIEluIFBMQVlJTkcgc3RhdGUsCi0gICAgc2luayBlbGVtZW50cyBhY3R1YWxseSByZW5kZXIgaW5jb21pbmcgZGF0YSwgZS5nLiBvdXRwdXQgYXVkaW8gdG8gYSBzb3VuZAotICAgIGNhcmQgb3IgcmVuZGVyIHZpZGVvIHBpY3R1cmVzIHRvIGFuIGltYWdlIHNpbmsuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tc3RhdGVtYW5hZ2UtZmlsdGVycyI+Ci0gIDx0aXRsZT5NYW5hZ2luZyBmaWx0ZXIgc3RhdGU8L3RpdGxlPgotICA8cGFyYT4KLSAgICBJZiBhdCBhbGwgcG9zc2libGUsIHlvdXIgZWxlbWVudCBzaG91bGQgZGVyaXZlIGZyb20gb25lIG9mIHRoZSBuZXcgYmFzZSAKLSAgICBjbGFzc2VzICg8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLW90aGVyLWJhc2UiLz4pLiBUaGVyZSBhcmUgcmVhZHktbWFkZSAKLSAgICBnZW5lcmFsIHB1cnBvc2UgYmFzZSBjbGFzc2VzIGZvciBkaWZmZXJlbnQgdHlwZXMgb2Ygc291cmNlcywgc2lua3MgYW5kCi0gICAgZmlsdGVyL3RyYW5zZm9ybWF0aW9uIGVsZW1lbnRzLiBJbiBhZGRpdGlvbiB0byB0aG9zZSwgc3BlY2lhbGlzZWQgYmFzZSAKLSAgICBjbGFzc2VzIGV4aXN0IGZvciBhdWRpbyBhbmQgdmlkZW8gZWxlbWVudHMgYW5kIG90aGVycy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBJZiB5b3UgdXNlIGEgYmFzZSBjbGFzcywgeW91IHdpbGwgcmFyZWx5IGhhdmUgdG8gaGFuZGxlIHN0YXRlIGNoYW5nZXMgCi0gICAgeW91cnNlbGYuIEFsbCB5b3UgaGF2ZSB0byBkbyBpcyBvdmVycmlkZSB0aGUgYmFzZSBjbGFzcydzIHN0YXJ0KCkgYW5kCi0gICAgc3RvcCgpIHZpcnR1YWwgZnVuY3Rpb25zIChtaWdodCBiZSBjYWxsZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZQotICAgIGJhc2UgY2xhc3MpIGFuZCB0aGUgYmFzZSBjbGFzcyB3aWxsIHRha2UgY2FyZSBvZiBldmVyeXRoaW5nIGZvciB5b3UuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgSWYsIGhvd2V2ZXIsIHlvdSBkbyBub3QgZGVyaXZlIGZyb20gYSByZWFkeS1tYWRlIGJhc2UgY2xhc3MsIGJ1dCBmcm9tIAotICAgIEdzdEVsZW1lbnQgb3Igc29tZSBvdGhlciBjbGFzcyBub3QgYnVpbHQgb24gdG9wIG9mIGEgYmFzZSBjbGFzcywgeW91IAotICAgIHdpbGwgbW9zdCBsaWtlbHkgaGF2ZSB0byBpbXBsZW1lbnQgeW91ciBvd24gc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHRvCi0gICAgYmUgbm90aWZpZWQgb2Ygc3RhdGUgY2hhbmdlcy4gVGhpcyBpcyBkZWZpbml0aXZlbHkgbmVjZXNzYXJ5IGlmIHlvdXIKLSAgICBwbHVnaW4gaXMgYSBkZW11eGVyIG9yIGEgbXV4ZXIsIGFzIHRoZXJlIGFyZSBubyBiYXNlIGNsYXNzZXMgZm9yCi0gICAgbXV4ZXJzIG9yIGRlbXV4ZXJzIHlldC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBBbiBlbGVtZW50IGNhbiBiZSBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzIHRocm91Z2ggYSB2aXJ0dWFsIGZ1bmN0aW9uCi0gICAgcG9pbnRlci4gSW5zaWRlIHRoaXMgZnVuY3Rpb24sIHRoZSBlbGVtZW50IGNhbiBpbml0aWFsaXplIGFueSBzb3J0IG9mCi0gICAgc3BlY2lmaWMgZGF0YSBuZWVkZWQgYnkgdGhlIGVsZW1lbnQsIGFuZCBpdCBjYW4gb3B0aW9uYWxseSBmYWlsIHRvCi0gICAgZ28gZnJvbSBvbmUgc3RhdGUgdG8gYW5vdGhlci4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBEbyBub3QgZ19hc3NlcnQgZm9yIHVuaGFuZGxlZCBzdGF0ZSBjaGFuZ2VzOyB0aGlzIGlzIHRha2VuIGNhcmUgb2YgYnkKLSAgICB0aGUgR3N0RWxlbWVudCBiYXNlIGNsYXNzLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X215X2ZpbHRlcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZAotZ3N0X215X2ZpbHRlcl9jbGFzc19pbml0IChHc3RNeUZpbHRlckNsYXNzICprbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfbXlfZmlsdGVyX2NoYW5nZV9zdGF0ZTsKLX0KLTwhLS0gZXhhbXBsZS1iZWdpbiBzdGF0ZS5jIGEgLS0+PCEtLQotI2luY2x1ZGUgImluaXQuZnVuYyIKLSNpbmNsdWRlICJjYXBzLmZ1bmMiCi0jaW5jbHVkZSAiY2hhaW4uZnVuYyIKLSNpbmNsdWRlICJzdGF0ZS5mdW5jIgotLS0+PCEtLSBleGFtcGxlLWVuZCBzdGF0ZS5jIGEgLS0+Ci08IS0tIGV4YW1wbGUtYmVnaW4gc3RhdGUuZnVuYyBhIC0tPjwhLS0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X2ZpbHRlcl9hbGxvY2F0ZV9tZW1vcnkgKEdzdE15RmlsdGVyICogZmlsdGVyKQotewotICByZXR1cm4gVFJVRTsKLX0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfZmlsdGVyX2ZyZWVfbWVtb3J5IChHc3RNeUZpbHRlciAqIGZpbHRlcikKLXsKLX0KLS0tPjwhLS0gZXhhbXBsZS1lbmQgc3RhdGUuZnVuYyBhIC0tPgotPCEtLSBleGFtcGxlLWJlZ2luIHN0YXRlLmZ1bmMgYiAtLT4KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X215X2ZpbHRlcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgR3N0TXlGaWx0ZXIgKmZpbHRlciA9IEdTVF9NWV9GSUxURVIgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgaWYgKCFnc3RfbXlfZmlsdGVyX2FsbG9jYXRlX21lbW9yeSAoZmlsdGVyKSkKLSAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLSZndDtjaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICByZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgZ3N0X215X2ZpbHRlcl9mcmVlX21lbW9yeSAoZmlsdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci08IS0tIGV4YW1wbGUtZW5kIHN0YXRlLmZ1bmMgYiAtLT4KLTwhLS0gZXhhbXBsZS1iZWdpbiBzdGF0ZS5jIGIgLS0+PCEtLQotI2luY2x1ZGUgInJlZ2lzdGVyLmZ1bmMiCi0gIC0tPjwhLS0gZXhhbXBsZS1lbmQgc3RhdGUuYyBiIC0tPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgIE5vdGUgdGhhdCB1cHdhcmRzIChOVUxMPSZndDtSRUFEWSwgUkVBRFk9Jmd0O1BBVVNFRCwgUEFVU0VEPSZndDtQTEFZSU5HKQotICAgIGFuZCBkb3dud2FyZHMgKFBMQVlJTkc9Jmd0O1BBVVNFRCwgUEFVU0VEPSZndDtSRUFEWSwgUkVBRFk9Jmd0O05VTEwpIHN0YXRlCi0gICAgY2hhbmdlcyBhcmUgaGFuZGxlZCBpbiB0d28gc2VwYXJhdGUgYmxvY2tzIHdpdGggdGhlIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2UKLSAgICBoYW5kbGVkIG9ubHkgYWZ0ZXIgd2UgaGF2ZSBjaGFpbmVkIHVwIHRvIHRoZSBwYXJlbnQgY2xhc3MncyBzdGF0ZQotICAgIGNoYW5nZSBmdW5jdGlvbi4gVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gc2FmZWx5IGhhbmRsZSBjb25jdXJyZW50Ci0gICAgYWNjZXNzIGJ5IG11bHRpcGxlIHRocmVhZHMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGluIHRoZSBjYXNlIG9mIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2VzCi0gICAgeW91IGRvbid0IHdhbnQgdG8gZGVzdHJveSBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdoaWxlIHlvdXIgcGx1Z2luJ3MgCi0gICAgY2hhaW4gZnVuY3Rpb24gKGZvciBleGFtcGxlKSBpcyBzdGlsbCBhY2Nlc3NpbmcgdGhvc2UgcmVzb3VyY2VzIGluCi0gICAgYW5vdGhlciB0aHJlYWQuIFdoZXRoZXIgeW91ciBjaGFpbiBmdW5jdGlvbiBtaWdodCBiZSBydW5uaW5nIG9yIG5vdAotICAgIGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mIHlvdXIgcGx1Z2luJ3MgcGFkcywgYW5kIHRoZSBzdGF0ZSBvZiB0aG9zZQotICAgIHBhZHMgaXMgY2xvc2VseSBsaW5rZWQgdG8gdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50LiBQYWQgc3RhdGVzIGFyZQotICAgIGhhbmRsZWQgaW4gdGhlIEdzdEVsZW1lbnQgY2xhc3MncyBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24sIGluY2x1ZGluZwotICAgIHByb3BlciBsb2NraW5nLCB0aGF0J3Mgd2h5IGl0IGlzIGVzc2VudGlhbCB0byBjaGFpbiB1cCBiZWZvcmUKLSAgICBkZXN0cm95aW5nIGFsbG9jYXRlZCByZXNvdXJjZXMuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2J1aWxkaW5nLXRlc3RhcHAueG1sIGIvZG9jcy9wd2cvYnVpbGRpbmctdGVzdGFwcC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYTE2ZjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvYnVpbGRpbmctdGVzdGFwcC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgotCi08Y2hhcHRlciBpZD0iY2hhcHRlci1idWlsZGluZy10ZXN0YXBwIj4KLSAgPHRpdGxlPkJ1aWxkaW5nIGEgVGVzdCBBcHBsaWNhdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIE9mdGVuLCB5b3Ugd2lsbCB3YW50IHRvIHRlc3QgeW91ciBuZXdseSB3cml0dGVuIHBsdWdpbiBpbiBhbiBhcyBzbWFsbAotICAgIHNldHRpbmcgYXMgcG9zc2libGUuIFVzdWFsbHksIDxmaWxlbmFtZT5nc3QtbGF1bmNoLTEuMDwvZmlsZW5hbWU+IGlzIGEKLSAgICBnb29kIGZpcnN0IHN0ZXAgYXQgdGVzdGluZyBhIHBsdWdpbi4gSWYgeW91IGhhdmUgbm90IGluc3RhbGxlZCB5b3VyCi0gICAgcGx1Z2luIGluIGEgZGlyZWN0b3J5IHRoYXQgR1N0cmVhbWVyIHNlYXJjaGVzLCB0aGVuIHlvdSB3aWxsIG5lZWQgdG8KLSAgICBzZXQgdGhlIHBsdWdpbiBwYXRoLiBFaXRoZXIgc2V0IEdTVF9QTFVHSU5fUEFUSCB0byB0aGUgZGlyZWN0b3J5Ci0gICAgY29udGFpbmluZyB5b3VyIHBsdWdpbiwgb3IgdXNlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIC0tZ3N0LXBsdWdpbi1wYXRoLgotICAgIElmIHlvdSBiYXNlZCB5b3VyIHBsdWdpbiBvZmYgb2YgdGhlIGdzdC1wbHVnaW4gdGVtcGxhdGUsIHRoZW4gdGhpcwotICAgIHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZQotICAgIDxjb21tYW5kPgotICAgIGdzdC1sYXVuY2gtMS4wIC0tZ3N0LXBsdWdpbi1wYXRoPSRIT01FL2dzdC10ZW1wbGF0ZS9nc3QtcGx1Z2luL3NyYy8ubGlicyBURVNUUElQRUxJTkUKLSAgICA8L2NvbW1hbmQ+Ci0gICAgSG93ZXZlciwgeW91IHdpbGwgb2Z0ZW4gbmVlZCBtb3JlCi0gICAgdGVzdGluZyBmZWF0dXJlcyB0aGFuIGdzdC1sYXVuY2gtMS4wIGNhbiBwcm92aWRlLCBzdWNoIGFzIHNlZWtpbmcsIGV2ZW50cywKLSAgICBpbnRlcmFjdGl2aXR5IGFuZCBtb3JlLiBXcml0aW5nIHlvdXIgb3duIHNtYWxsIHRlc3RpbmcgcHJvZ3JhbSBpcyB0aGUKLSAgICBlYXNpZXN0IHdheSB0byBhY2NvbXBsaXNoIHRoaXMuIFRoaXMgc2VjdGlvbiBleHBsYWlucyAtIGluIGEgZmV3IHdvcmRzCi0gICAgLSBob3cgdG8gZG8gdGhhdC4gRm9yIGEgY29tcGxldGUgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZ3VpZGUsIHNlZSB0aGUKLSAgICA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSIuLi8uLi9tYW51YWwvaHRtbC9pbmRleC5odG1sIj5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudAotICAgIE1hbnVhbDwvdWxpbms+LgotICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIEF0IHRoZSBzdGFydCwgeW91IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgJkdTdHJlYW1lcjsgY29yZSBsaWJyYXJ5IGJ5Ci0gICAgICBjYWxsaW5nIDxmdW5jdGlvbj5nc3RfaW5pdCAoKTwvZnVuY3Rpb24+LiBZb3UgY2FuIGFsdGVybmF0aXZlbHkgY2FsbAotICAgICAgPGZ1bmN0aW9uPmdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCk8L2Z1bmN0aW9uPiwgd2hpY2ggd2lsbCByZXR1cm4KLSAgICAgIGEgcG9pbnRlciB0byBHT3B0aW9uR3JvdXAuIFlvdSBjYW4gdGhlbiB1c2UgR09wdGlvbiB0byBoYW5kbGUgdGhlCi0gICAgICBpbml0aWFsaXphdGlvbiwgYW5kIHRoaXMgd2lsbCBmaW5pc2ggdGhlICZHU3RyZWFtZXI7IGluaXRpYWxpemF0aW9uLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgWW91IGNhbiBjcmVhdGUgZWxlbWVudHMgdXNpbmcgPGZ1bmN0aW9uPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoKTwvZnVuY3Rpb24+LAotICAgICAgd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBlbGVtZW50IHR5cGUgdGhhdCB5b3Ugd2FudCB0byBjcmVhdGUsCi0gICAgICBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGZyZWUtZm9ybSBuYW1lLiBUaGUgZXhhbXBsZSBhdCB0aGUgZW5kIHVzZXMKLSAgICAgIGEgc2ltcGxlIGZpbGVzb3VyY2UgLSBkZWNvZGVyIC0gc291bmRjYXJkIG91dHB1dCBwaXBlbGluZSwgYnV0IHlvdSBjYW4KLSAgICAgIHVzZSBzcGVjaWZpYyBkZWJ1Z2dpbmcgZWxlbWVudHMgaWYgdGhhdCdzIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIGFuCi0gICAgICA8Y2xhc3NuYW1lPmlkZW50aXR5PC9jbGFzc25hbWU+IGVsZW1lbnQgY2FuIGJlIHVzZWQgaW4gdGhlIG1pZGRsZSBvZgotICAgICAgdGhlIHBpcGVsaW5lIHRvIGFjdCBhcyBhIGRhdGEtdG8tYXBwbGljYXRpb24gdHJhbnNtaXR0ZXIuIFRoaXMgY2FuIGJlCi0gICAgICB1c2VkIHRvIGNoZWNrIHRoZSBkYXRhIGZvciBtaXNiZWhhdmlvdXJzIG9yIGNvcnJlY3RuZXNzIGluIHlvdXIgdGVzdAotICAgICAgYXBwbGljYXRpb24uIEFsc28sIHlvdSBjYW4gdXNlIGEgPGNsYXNzbmFtZT5mYWtlc2luazwvY2xhc3NuYW1lPgotICAgICAgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBwaXBlbGluZSB0byBkdW1wIHlvdXIgZGF0YSB0byB0aGUgc3Rkb3V0Ci0gICAgICAoaW4gb3JkZXIgdG8gZG8gdGhpcywgc2V0IHRoZSA8ZnVuY3Rpb24+ZHVtcDwvZnVuY3Rpb24+IHByb3BlcnR5IHRvCi0gICAgICBUUlVFKS4gTGFzdGx5LCB5b3UgY2FuIHVzZSB2YWxncmluZCB0byBjaGVjayBmb3IgbWVtb3J5IGVycm9ycy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIER1cmluZyBsaW5raW5nLCB5b3VyIHRlc3QgYXBwbGljYXRpb24gY2FuIHVzZSBmaWx0ZXJlZCBjYXBzCi0gICAgICBhcyBhIHdheSB0byBkcml2ZSBhIHNwZWNpZmljIHR5cGUgb2YgZGF0YSB0byBvciBmcm9tIHlvdXIgZWxlbWVudC4gVGhpcwotICAgICAgaXMgYSB2ZXJ5IHNpbXBsZSBhbmQgZWZmZWN0aXZlIHdheSBvZiBjaGVja2luZyBtdWx0aXBsZSB0eXBlcyBvZiBpbnB1dAotICAgICAgYW5kIG91dHB1dCBpbiB5b3VyIGVsZW1lbnQuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBOb3RlIHRoYXQgZHVyaW5nIHJ1bm5pbmcsIHlvdSBzaG91bGQgbGlzdGVuIGZvciBhdCBsZWFzdCB0aGUKLSAgICAgIDxxdW90ZT5lcnJvcjwvcXVvdGU+IGFuZCA8cXVvdGU+ZW9zPC9xdW90ZT4gbWVzc2FnZXMgb24gdGhlIGJ1cwotICAgICAgYW5kL29yIHlvdXIgcGx1Z2luL2VsZW1lbnQgdG8gY2hlY2sgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhpcy4gQWxzbywKLSAgICAgIHlvdSBzaG91bGQgYWRkIGV2ZW50cyBpbnRvIHRoZSBwaXBlbGluZSBhbmQgbWFrZSBzdXJlIHlvdXIgcGx1Z2luIGhhbmRsZXMKLSAgICAgIHRoZXNlIGNvcnJlY3RseSAod2l0aCByZXNwZWN0IHRvIGNsb2NraW5nLCBpbnRlcm5hbCBjYWNoaW5nLCBldGMuKS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIE5ldmVyIGZvcmdldCB0byBjbGVhbiB1cCBtZW1vcnkgaW4geW91ciBwbHVnaW4gb3IgeW91ciB0ZXN0IGFwcGxpY2F0aW9uLgotICAgICAgV2hlbiBnb2luZyB0byB0aGUgTlVMTCBzdGF0ZSwgeW91ciBlbGVtZW50IHNob3VsZCBjbGVhbiB1cCBhbGxvY2F0ZWQKLSAgICAgIG1lbW9yeSBhbmQgY2FjaGVzLiBBbHNvLCBpdCBzaG91bGQgY2xvc2UgZG93biBhbnkgcmVmZXJlbmNlcyBoZWxkIHRvCi0gICAgICBwb3NzaWJsZSBzdXBwb3J0IGxpYnJhcmllcy4gWW91ciBhcHBsaWNhdGlvbiBzaG91bGQgPGZ1bmN0aW9uPnVucmVmICgpPC9mdW5jdGlvbj4KLSAgICAgIHRoZSBwaXBlbGluZSBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgY3Jhc2guCi0gICAgPC9wYXJhPgotCi0gICAgPHByb2dyYW1saXN0aW5nPjwhLS0gZXhhbXBsZS1iZWdpbiB0ZXN0LmMgLS0+Ci0jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1c19jYWxsIChHc3RCdXMgICAgICpidXMsCi0JICBHc3RNZXNzYWdlICptc2csCi0JICBncG9pbnRlciAgICBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSBkYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgZ19wcmludCAoIkVuZC1vZi1zdHJlYW1cbiIpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7Ci0gICAgICBnY2hhciAqZGVidWcgPSBOVUxMOwotICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmYW1wO2VyciwgJmFtcDtkZWJ1Zyk7Ci0KLSAgICAgIGdfcHJpbnQgKCJFcnJvcjogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0KLSAgICAgIGlmIChkZWJ1ZykgewotICAgICAgICBnX3ByaW50ICgiRGVidWcgZGV0YWlsczogJXNcbiIsIGRlYnVnKTsKLSAgICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICB9Ci0KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1naW50Ci1tYWluIChnaW50ICAgYXJnYywKLSAgICAgIGdjaGFyICphcmd2W10pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmaWxlc3JjLCAqZGVjb2RlciwgKmZpbHRlciwgKnNpbms7Ci0gIEdzdEVsZW1lbnQgKmNvbnZlcnQxLCAqY29udmVydDIsICpyZXNhbXBsZTsKLSAgR01haW5Mb29wICpsb29wOwotICBHc3RCdXMgKmJ1czsKLSAgZ3VpbnQgd2F0Y2hfaWQ7Ci0KLSAgLyogaW5pdGlhbGl6YXRpb24gKi8KLSAgZ3N0X2luaXQgKCZhbXA7YXJnYywgJmFtcDthcmd2KTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoIlVzYWdlOiAlcyAmbHQ7bXAzIGZpbGVuYW1lJmd0O1xuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIDAxOwotICB9Ci0KLSAgLyogY3JlYXRlIGVsZW1lbnRzICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoIm15X3BpcGVsaW5lIik7Ci0KLSAgLyogd2F0Y2ggZm9yIG1lc3NhZ2VzIG9uIHRoZSBwaXBlbGluZSdzIGJ1cyAobm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5Ci0gICAqIHdvcmsgbGlrZSB0aGlzIHdoZW4gYSBHTGliIG1haW4gbG9vcCBpcyBydW5uaW5nKSAqLwotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICB3YXRjaF9pZCA9IGdzdF9idXNfYWRkX3dhdGNoIChidXMsIGJ1c19jYWxsLCBsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBmaWxlc3JjICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAibXlfZmlsZXNvdXJjZSIpOwotICBkZWNvZGVyICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm1hZCIsICJteV9kZWNvZGVyIik7Ci0KLSAgLyogcHV0dGluZyBhbiBhdWRpb2NvbnZlcnQgZWxlbWVudCBoZXJlIHRvIGNvbnZlcnQgdGhlIG91dHB1dCBvZiB0aGUKLSAgICogZGVjb2RlciBpbnRvIGEgZm9ybWF0IHRoYXQgbXlfZmlsdGVyIGNhbiBoYW5kbGUgKHdlIGFyZSBhc3N1bWluZyBpdAotICAgKiB3aWxsIGhhbmRsZSBhbnkgc2FtcGxlIHJhdGUgaGVyZSB0aG91Z2gpICovCi0gIGNvbnZlcnQxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImF1ZGlvY29udmVydDEiKTsKLQotICAvKiB1c2UgImlkZW50aXR5IiBoZXJlIGZvciBhIGZpbHRlciB0aGF0IGRvZXMgbm90aGluZyAqLwotICBmaWx0ZXIgICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm15X2ZpbHRlciIsICJteV9maWx0ZXIiKTsKLQotICAvKiB0aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF1ZGlvY29udmVydCBhbmQgYXVkaW9yZXNhbXBsZSBlbGVtZW50cyBiZWZvcmUKLSAgICogdGhlIGF1ZGlvIHNpbmssIHNpbmNlIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGF1ZGlvIHNpbmsgdXN1YWxseSB2YXJ5Ci0gICAqIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgKG91dHB1dCB1c2VkLCBzb3VuZCBjYXJkLCBkcml2ZXIgZXRjLikgKi8KLSAgY29udmVydDIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCAiYXVkaW9jb252ZXJ0MiIpOwotICByZXNhbXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvcmVzYW1wbGUiLCAiYXVkaW9yZXNhbXBsZSIpOwotICBzaW5rICAgICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInB1bHNlc2luayIsICJhdWRpb3NpbmsiKTsKLQotICBpZiAoIXNpbmsgfHwgIWRlY29kZXIpIHsKLSAgICBnX3ByaW50ICgiRGVjb2RlciBvciBvdXRwdXQgY291bGQgbm90IGJlIGZvdW5kIC0gY2hlY2sgeW91ciBpbnN0YWxsXG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0gZWxzZSBpZiAoIWNvbnZlcnQxIHx8ICFjb252ZXJ0MiB8fCAhcmVzYW1wbGUpIHsKLSAgICBnX3ByaW50ICgiQ291bGQgbm90IGNyZWF0ZSBhdWRpb2NvbnZlcnQgb3IgYXVkaW9yZXNhbXBsZSBlbGVtZW50LCAiCi0gICAgICAgICAgICAgImNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uXG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0gZWxzZSBpZiAoIWZpbHRlcikgewotICAgIGdfcHJpbnQgKCJZb3VyIHNlbGYtd3JpdHRlbiBmaWx0ZXIgY291bGQgbm90IGJlIGZvdW5kLiBNYWtlIHN1cmUgaXQgIgotICAgICAgICAgICAgICJpcyBpbnN0YWxsZWQgY29ycmVjdGx5IGluICQobGliZGlyKS9nc3RyZWFtZXItMS4wLyBvciAiCi0gICAgICAgICAgICAgIn4vLmdzdHJlYW1lci0xLjAvcGx1Z2lucy8gYW5kIHRoYXQgZ3N0LWluc3BlY3QtMS4wIGxpc3RzIGl0LiAiCi0gICAgICAgICAgICAgIklmIGl0IGRvZXNuJ3QsIGNoZWNrIHdpdGggJ0dTVF9ERUJVRz0qOjIgZ3N0LWluc3BlY3QtMS4wJyBmb3IgIgotICAgICAgICAgICAgICJ0aGUgcmVhc29uIHdoeSBpdCBpcyBub3QgYmVpbmcgbG9hZGVkLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZpbGVzcmMpLCAibG9jYXRpb24iLCBhcmd2WzFdLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGZpbGVzcmMsIGRlY29kZXIsIGNvbnZlcnQxLCBmaWx0ZXIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnQyLCByZXNhbXBsZSwgc2luaywgTlVMTCk7Ci0KLSAgLyogbGluayBldmVyeXRoaW5nIHRvZ2V0aGVyICovCi0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19tYW55IChmaWxlc3JjLCBkZWNvZGVyLCBjb252ZXJ0MSwgZmlsdGVyLCBjb252ZXJ0MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2FtcGxlLCBzaW5rLCBOVUxMKSkgewotICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gbGluayBvbmUgb3IgbW9yZSBlbGVtZW50cyFcbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIHJ1biAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0gICAgR3N0TWVzc2FnZSAqbXNnOwotCi0gICAgZ19wcmludCAoIkZhaWxlZCB0byBzdGFydCB1cCBwaXBlbGluZSFcbiIpOwotCi0gICAgLyogY2hlY2sgaWYgdGhlcmUgaXMgYW4gZXJyb3IgbWVzc2FnZSB3aXRoIGRldGFpbHMgb24gdGhlIGJ1cyAqLwotICAgIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FUlJPUiwgMCk7Ci0gICAgaWYgKG1zZykgewotICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmYW1wO2VyciwgTlVMTCk7Ci0gICAgICBnX3ByaW50ICgiRVJST1I6ICVzXG4iLCBlcnItJmd0O21lc3NhZ2UpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfc291cmNlX3JlbW92ZSAod2F0Y2hfaWQpOwotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0gICAgPCEtLSBleGFtcGxlLWVuZCB0ZXN0LmMgLS0+PC9wcm9ncmFtbGlzdGluZz4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL2ludHJvLWJhc2ljcy54bWwgYi9kb2NzL3B3Zy9pbnRyby1iYXNpY3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTA2NWQyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL2ludHJvLWJhc2ljcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTUgKzAsMCBAQAotPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgotCi08Y2hhcHRlciBpZD0iY2hhcHRlci1pbnRyby1iYXNpY3MiIHhyZWZsYWJlbD0iRm91bmRhdGlvbnMiPgotICA8dGl0bGU+Rm91bmRhdGlvbnM8L3RpdGxlPgotICA8cGFyYT48IS0tIHN5bmNocm9uaXplIHdpdGggQXBwRGV2TWFuIC0tPgotICAgIFRoaXMgY2hhcHRlciBvZiB0aGUgZ3VpZGUgaW50cm9kdWNlcyB0aGUgYmFzaWMgY29uY2VwdHMgb2YgJkdTdHJlYW1lcjsuCi0gICAgVW5kZXJzdGFuZGluZyB0aGVzZSBjb25jZXB0cyB3aWxsIGhlbHAgeW91IGdyb2sgdGhlIGlzc3VlcyBpbnZvbHZlZCBpbgotICAgIGV4dGVuZGluZyAmR1N0cmVhbWVyOy4gTWFueSBvZiB0aGVzZSBjb25jZXB0cyBhcmUgZXhwbGFpbmVkIGluIGdyZWF0ZXIKLSAgICBkZXRhaWwgaW4gdGhlICZHc3RBcHBEZXZNYW47OyB0aGUgYmFzaWMgY29uY2VwdHMgcHJlc2VudGVkIGhlcmUgc2VydmUgbWFpbmx5Ci0gICAgdG8gcmVmcmVzaCB5b3VyIG1lbW9yeS4KLSAgPC9wYXJhPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJhc2ljcy1lbGVtZW50cyIgeHJlZmxhYmVsPSJFbGVtZW50cyBhbmQgUGx1Z2lucyI+Ci0gICAgPHRpdGxlPkVsZW1lbnRzIGFuZCBQbHVnaW5zPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIEVsZW1lbnRzIGFyZSBhdCB0aGUgY29yZSBvZiAmR1N0cmVhbWVyOy4gSW4gdGhlIGNvbnRleHQgb2YgcGx1Z2luCi0gICAgICBkZXZlbG9wbWVudCwgYW4gPGVtcGhhc2lzPmVsZW1lbnQ8L2VtcGhhc2lzPiBpcyBhbiBvYmplY3QgZGVyaXZlZCBmcm9tIHRoZQotICAgICAgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvR3N0RWxlbWVudC5odG1sIj48Y2xhc3NuYW1lPgotICAgICAgR3N0RWxlbWVudDwvY2xhc3NuYW1lPjwvdWxpbms+IGNsYXNzLiBFbGVtZW50cyBwcm92aWRlIHNvbWUgc29ydCBvZgotICAgICAgZnVuY3Rpb25hbGl0eSB3aGVuIGxpbmtlZCB3aXRoIG90aGVyIGVsZW1lbnRzOiBGb3IgZXhhbXBsZSwgYSBzb3VyY2UKLSAgICAgIGVsZW1lbnQgcHJvdmlkZXMgZGF0YSB0byBhIHN0cmVhbSwgYW5kIGEgZmlsdGVyIGVsZW1lbnQgYWN0cyBvbiB0aGUgZGF0YQotICAgICAgaW4gYSBzdHJlYW0uIFdpdGhvdXQgZWxlbWVudHMsICZHU3RyZWFtZXI7IGlzIGp1c3QgYSBidW5jaCBvZiBjb25jZXB0dWFsCi0gICAgICBwaXBlIGZpdHRpbmdzIHdpdGggbm90aGluZyB0byBsaW5rLiBBIGxhcmdlIG51bWJlciBvZiBlbGVtZW50cyBzaGlwCi0gICAgICB3aXRoICZHU3RyZWFtZXI7LCBidXQgZXh0cmEgZWxlbWVudHMgY2FuIGFsc28gYmUgd3JpdHRlbi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBKdXN0IHdyaXRpbmcgYSBuZXcgZWxlbWVudCBpcyBub3QgZW50aXJlbHkgZW5vdWdoLCBob3dldmVyOiBZb3Ugd2lsbCBuZWVkCi0gICAgICB0byBlbmNhcHN1bGF0ZSB5b3VyIGVsZW1lbnQgaW4gYSA8ZW1waGFzaXM+cGx1Z2luPC9lbXBoYXNpcz4gdG8gZW5hYmxlCi0gICAgICAmR1N0cmVhbWVyOyB0byB1c2UgaXQuIEEgcGx1Z2luIGlzIGVzc2VudGlhbGx5IGEgbG9hZGFibGUgYmxvY2sgb2YgY29kZSwKLSAgICAgIHVzdWFsbHkgY2FsbGVkIGEgc2hhcmVkIG9iamVjdCBmaWxlIG9yIGEgZHluYW1pY2FsbHkgbGlua2VkIGxpYnJhcnkuIEEKLSAgICAgIHNpbmdsZSBwbHVnaW4gbWF5IGNvbnRhaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHNldmVyYWwgZWxlbWVudHMsIG9yIGp1c3QKLSAgICAgIGEgc2luZ2xlIG9uZS4gRm9yIHNpbXBsaWNpdHksIHRoaXMgZ3VpZGUgY29uY2VudHJhdGVzIHByaW1hcmlseSBvbiBwbHVnaW5zCi0gICAgICBjb250YWluaW5nIG9uZSBlbGVtZW50LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEEgPGVtcGhhc2lzPmZpbHRlcjwvZW1waGFzaXM+IGlzIGFuIGltcG9ydGFudCB0eXBlIG9mIGVsZW1lbnQgdGhhdAotICAgICAgcHJvY2Vzc2VzIGEgc3RyZWFtIG9mIGRhdGEuIFByb2R1Y2VycyBhbmQgY29uc3VtZXJzIG9mIGRhdGEgYXJlIGNhbGxlZAotICAgICAgPGVtcGhhc2lzPnNvdXJjZTwvZW1waGFzaXM+IGFuZCA8ZW1waGFzaXM+c2luazwvZW1waGFzaXM+IGVsZW1lbnRzLAotICAgICAgcmVzcGVjdGl2ZWx5LiA8ZW1waGFzaXM+QmluPC9lbXBoYXNpcz4gZWxlbWVudHMgY29udGFpbiBvdGhlciBlbGVtZW50cy4KLSAgICAgIE9uZSB0eXBlIG9mIGJpbiBpcyByZXNwb25zaWJsZSBmb3Igc3luY2hyb25pemF0aW9uIG9mIHRoZSBlbGVtZW50cyB0aGF0IHRoZXkKLSAgICAgIGNvbnRhaW4gc28gdGhhdCBkYXRhIGZsb3dzIHNtb290aGx5LiBBbm90aGVyIHR5cGUgb2YgYmluLCBjYWxsZWQKLSAgICAgIDxlbXBoYXNpcz5hdXRvcGx1Z2dlcjwvZW1waGFzaXM+IGVsZW1lbnRzLCBhdXRvbWF0aWNhbGx5IGFkZCBvdGhlcgotICAgICAgZWxlbWVudHMgdG8gdGhlIGJpbiBhbmQgbGlua3MgdGhlbSB0b2dldGhlciBzbyB0aGF0IHRoZXkgYWN0IGFzIGEKLSAgICAgIGZpbHRlciBiZXR3ZWVuIHR3byBhcmJpdHJhcnkgc3RyZWFtIHR5cGVzLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBwbHVnaW4gbWVjaGFuaXNtIGlzIHVzZWQgZXZlcnl3aGVyZSBpbiAmR1N0cmVhbWVyOywgZXZlbiBpZiBvbmx5IHRoZQotICAgICAgc3RhbmRhcmQgcGFja2FnZXMgYXJlIGJlaW5nIHVzZWQuIEEgZmV3IHZlcnkgYmFzaWMgZnVuY3Rpb25zIHJlc2lkZSBpbiB0aGUKLSAgICAgIGNvcmUgbGlicmFyeSwgYW5kIGFsbCBvdGhlcnMgYXJlIGltcGxlbWVudGVkIGluIHBsdWdpbnMuIEEgcGx1Z2luIHJlZ2lzdHJ5Ci0gICAgICBpcyB1c2VkIHRvIHN0b3JlIHRoZSBkZXRhaWxzIG9mIHRoZSBwbHVnaW5zIGluIGFuIGJpbmFyeSByZWdpc3RyeSBmaWxlLgotICAgICAgVGhpcyB3YXksIGEgcHJvZ3JhbSB1c2luZyAmR1N0cmVhbWVyOyBkb2VzIG5vdCBoYXZlIHRvIGxvYWQgYWxsIHBsdWdpbnMgdG8KLSAgICAgIGRldGVybWluZSB3aGljaCBhcmUgbmVlZGVkLiBQbHVnaW5zIGFyZSBvbmx5IGxvYWRlZCB3aGVuIHRoZWlyIHByb3ZpZGVkCi0gICAgICBlbGVtZW50cyBhcmUgcmVxdWVzdGVkLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFNlZSB0aGUgJkdzdExpYlJlZjsgZm9yIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgPHVsaW5rCi0gICAgICB0eXBlPSJodHRwIgotICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RFbGVtZW50Lmh0bWwiPjxjbGFzc25hbWU+R3N0RWxlbWVudDwvY2xhc3NuYW1lPjwvdWxpbms+Ci0gICAgICBhbmQgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Ii4uLy4uL2dzdHJlYW1lci9odG1sL0dzdFBsdWdpbi5odG1sIj48Y2xhc3NuYW1lPkdzdFBsdWdpbjwvY2xhc3NuYW1lPjwvdWxpbms+LgotICAgIDwvcGFyYT4KLSAgPC9zZWN0MT4KLQotICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1iYXNpY3MtcGFkcyIgeHJlZmxhYmVsPSJQYWRzIj4KLSAgICA8dGl0bGU+UGFkczwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICA8ZW1waGFzaXM+UGFkczwvZW1waGFzaXM+IGFyZSB1c2VkIHRvIG5lZ290aWF0ZSBsaW5rcyBhbmQgZGF0YSBmbG93Ci0gICAgICBiZXR3ZWVuIGVsZW1lbnRzIGluICZHU3RyZWFtZXI7LiBBIHBhZCBjYW4gYmUgdmlld2VkIGFzIGEKLSAgICAgIDxxdW90ZT5wbGFjZTwvcXVvdGU+IG9yIDxxdW90ZT5wb3J0PC9xdW90ZT4gb24gYW4gZWxlbWVudCB3aGVyZQotICAgICAgbGlua3MgbWF5IGJlIG1hZGUgd2l0aCBvdGhlciBlbGVtZW50cywgYW5kIHRocm91Z2ggd2hpY2ggZGF0YSBjYW4KLSAgICAgIGZsb3cgdG8gb3IgZnJvbSB0aG9zZSBlbGVtZW50cy4gIFBhZHMgaGF2ZSBzcGVjaWZpYyBkYXRhIGhhbmRsaW5nCi0gICAgICBjYXBhYmlsaXRpZXM6IEEgcGFkIGNhbiByZXN0cmljdCB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgZmxvd3MKLSAgICAgIHRocm91Z2ggaXQuICBMaW5rcyBhcmUgb25seSBhbGxvd2VkIGJldHdlZW4gdHdvIHBhZHMgd2hlbiB0aGUKLSAgICAgIGFsbG93ZWQgZGF0YSB0eXBlcyBvZiB0aGUgdHdvIHBhZHMgYXJlIGNvbXBhdGlibGUuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQW4gYW5hbG9neSBtYXkgYmUgaGVscGZ1bCBoZXJlLiBBIHBhZCBpcyBzaW1pbGFyIHRvIGEgcGx1ZyBvciBqYWNrIG9uIGEKLSAgICAgIHBoeXNpY2FsIGRldmljZS4gQ29uc2lkZXIsIGZvciBleGFtcGxlLCBhIGhvbWUgdGhlYXRlciBzeXN0ZW0gY29uc2lzdGluZwotICAgICAgb2YgYW4gYW1wbGlmaWVyLCBhIERWRCBwbGF5ZXIsIGFuZCBhIChzaWxlbnQpIHZpZGVvIHByb2plY3Rvci4gTGlua2luZwotICAgICAgdGhlIERWRCBwbGF5ZXIgdG8gdGhlIGFtcGxpZmllciBpcyBhbGxvd2VkIGJlY2F1c2UgYm90aCBkZXZpY2VzIGhhdmUgYXVkaW8KLSAgICAgIGphY2tzLCBhbmQgbGlua2luZyB0aGUgcHJvamVjdG9yIHRvIHRoZSBEVkQgcGxheWVyIGlzIGFsbG93ZWQgYmVjYXVzZQotICAgICAgYm90aCBkZXZpY2VzIGhhdmUgY29tcGF0aWJsZSB2aWRlbyBqYWNrcy4gTGlua3MgYmV0d2VlbiB0aGUKLSAgICAgIHByb2plY3RvciBhbmQgdGhlIGFtcGxpZmllciBtYXkgbm90IGJlIG1hZGUgYmVjYXVzZSB0aGUgcHJvamVjdG9yIGFuZAotICAgICAgYW1wbGlmaWVyIGhhdmUgZGlmZmVyZW50IHR5cGVzIG9mIGphY2tzLiBQYWRzIGluICZHU3RyZWFtZXI7IHNlcnZlIHRoZQotICAgICAgc2FtZSBwdXJwb3NlIGFzIHRoZSBqYWNrcyBpbiB0aGUgaG9tZSB0aGVhdGVyIHN5c3RlbS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBGb3IgdGhlIG1vc3QgcGFydCwgYWxsIGRhdGEgaW4gJkdTdHJlYW1lcjsgZmxvd3Mgb25lIHdheSB0aHJvdWdoIGEgbGluawotICAgICAgYmV0d2VlbiBlbGVtZW50cy4gRGF0YSBmbG93cyBvdXQgb2Ygb25lIGVsZW1lbnQgdGhyb3VnaCBvbmUgb3IgbW9yZQotICAgICAgPGVtcGhhc2lzPnNvdXJjZSBwYWRzPC9lbXBoYXNpcz4sIGFuZCBlbGVtZW50cyBhY2NlcHQgaW5jb21pbmcgZGF0YSB0aHJvdWdoCi0gICAgICBvbmUgb3IgbW9yZSA8ZW1waGFzaXM+c2luayBwYWRzPC9lbXBoYXNpcz4uIFNvdXJjZSBhbmQgc2luayBlbGVtZW50cyBoYXZlCi0gICAgICBvbmx5IHNvdXJjZSBhbmQgc2luayBwYWRzLCByZXNwZWN0aXZlbHkuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgU2VlIHRoZSAmR3N0TGliUmVmOyBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBhIDx1bGluawotICAgICAgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvR3N0UGFkLmh0bWwiPjxjbGFzc25hbWU+R3N0UGFkPC9jbGFzc25hbWU+PC91bGluaz4uCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJhc2ljcy1kYXRhIiB4cmVmbGFiZWw9IkRhdGEsIEJ1ZmZlcnMgYW5kIEV2ZW50cyI+Ci0gICAgPHRpdGxlPkdzdE1pbmlPYmplY3QsIEJ1ZmZlcnMgYW5kIEV2ZW50czwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBBbGwgc3RyZWFtcyBvZiBkYXRhIGluICZHU3RyZWFtZXI7IGFyZSBjaG9wcGVkIHVwIGludG8gY2h1bmtzIHRoYXQgYXJlCi0gICAgICBwYXNzZWQgZnJvbSBhIHNvdXJjZSBwYWQgb24gb25lIGVsZW1lbnQgdG8gYSBzaW5rIHBhZCBvbiBhbm90aGVyIGVsZW1lbnQuCi0gICAgICA8ZW1waGFzaXM+R3N0TWluaU9iamVjdDwvZW1waGFzaXM+IGlzIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIHRoZXNlCi0gICAgICBjaHVua3Mgb2YgZGF0YS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBHc3RNaW5pT2JqZWN0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgaW1wb3J0YW50IHR5cGVzOgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQW4gZXhhY3QgdHlwZSBpbmRpY2F0aW5nIHdoYXQgdHlwZSBvZiBkYXRhIChldmVudCwgYnVmZmVyLCAuLi4pCi0gICAgICAgICAgICB0aGlzIEdzdE1pbmlPYmplY3QgaXMuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBIHJlZmVyZW5jZSBjb3VudCBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgY3VycmVudGx5Ci0gICAgICAgICAgICBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBtaW5pb2JqZWN0LiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQKLSAgICAgICAgICAgIGZhbGxzIHRvIHplcm8sIHRoZSBtaW5pb2JqZWN0IHdpbGwgYmUgZGlzcG9zZWQsIGFuZCBpdHMgbWVtb3J5IHdpbGwgYmUKLSAgICAgICAgICAgIGZyZWVkIGluIHNvbWUgc2Vuc2UgKHNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzKS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBGb3IgZGF0YSB0cmFuc3BvcnQsIHRoZXJlIGFyZSB0d28gdHlwZXMgb2YgR3N0TWluaU9iamVjdCBkZWZpbmVkOgotICAgICAgZXZlbnRzIChjb250cm9sKSBhbmQgYnVmZmVycyAoY29udGVudCkuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQnVmZmVycyBtYXkgY29udGFpbiBhbnkgc29ydCBvZiBkYXRhIHRoYXQgdGhlIHR3byBsaW5rZWQgcGFkcwotICAgICAga25vdyBob3cgdG8gaGFuZGxlLiBOb3JtYWxseSwgYSBidWZmZXIgY29udGFpbnMgYSBjaHVuayBvZiBzb21lIHNvcnQgb2YKLSAgICAgIGF1ZGlvIG9yIHZpZGVvIGRhdGEgdGhhdCBmbG93cyBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQnVmZmVycyBhbHNvIGNvbnRhaW4gbWV0YWRhdGEgZGVzY3JpYmluZyB0aGUgYnVmZmVyJ3MgY29udGVudHMuIFNvbWUgb2YKLSAgICAgIHRoZSBpbXBvcnRhbnQgdHlwZXMgb2YgbWV0YWRhdGEgYXJlOgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgUG9pbnRlcnMgdG8gb25lIG9yIG1vcmUgR3N0TWVtb3J5IG9iamVjdHMuIEdzdE1lbW9yeSBvYmplY3RzIGFyZQotICAgICAgICAgICAgcmVmY291bnRlZCBvYmplY3RzIHRoYXQgZW5jYXBzdWxhdGUgYSByZWdpb24gb2YgbWVtb3J5LgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQSB0aW1lc3RhbXAgaW5kaWNhdGluZyB0aGUgcHJlZmVycmVkIGRpc3BsYXkgdGltZXN0YW1wIG9mIHRoZQotICAgICAgICAgICAgY29udGVudCBpbiB0aGUgYnVmZmVyLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEV2ZW50cwotICAgICAgY29udGFpbiBpbmZvcm1hdGlvbiBvbiB0aGUgc3RhdGUgb2YgdGhlIHN0cmVhbSBmbG93aW5nIGJldHdlZW4gdGhlIHR3bwotICAgICAgbGlua2VkIHBhZHMuIEV2ZW50cyB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgZWxlbWVudCBleHBsaWNpdGx5IHN1cHBvcnRzCi0gICAgICB0aGVtLCBlbHNlIHRoZSBjb3JlIHdpbGwgKHRyeSB0bykgaGFuZGxlIHRoZSBldmVudHMgYXV0b21hdGljYWxseS4gRXZlbnRzCi0gICAgICBhcmUgdXNlZCB0byBpbmRpY2F0ZSwgZm9yIGV4YW1wbGUsIGEgbWVkaWEgdHlwZSwgdGhlIGVuZCBvZiBhCi0gICAgICBtZWRpYSBzdHJlYW0gb3IgdGhhdCB0aGUgY2FjaGUgc2hvdWxkIGJlIGZsdXNoZWQuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgRXZlbnRzIG1heSBjb250YWluIHNldmVyYWwgb2YgdGhlIGZvbGxvd2luZyBpdGVtczoKLSAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEEgc3VidHlwZSBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIHRoZSBjb250YWluZWQgZXZlbnQuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBUaGUgb3RoZXIgY29udGVudHMgb2YgdGhlIGV2ZW50IGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgZXZlbnQgdHlwZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBFdmVudHMgd2lsbCBiZSBkaXNjdXNzZWQgZXh0ZW5zaXZlbHkgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1hZHZhbmNlZC1ldmVudHMiLz4uCi0gICAgICBVbnRpbCB0aGVuLCB0aGUgb25seSBldmVudCB0aGF0IHdpbGwgYmUgdXNlZCBpcyB0aGUgPGVtcGhhc2lzPkVPUzwvZW1waGFzaXM+Ci0gICAgICBldmVudCwgd2hpY2ggaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZW5kLW9mLXN0cmVhbSAodXN1YWxseSBlbmQtb2YtZmlsZSkuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgU2VlIHRoZSAmR3N0TGliUmVmOyBmb3IgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBhIDx1bGluawotICAgICAgdHlwZT0iaHR0cCIKLSAgICAgIHVybD0iLi4vLi4vZ3N0cmVhbWVyL2h0bWwvZ3N0cmVhbWVyLUdzdE1pbmlPYmplY3QuaHRtbCI+PGNsYXNzbmFtZT5Hc3RNaW5pT2JqZWN0PC9jbGFzc25hbWU+PC91bGluaz4sIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSIuLi8uLi9nc3RyZWFtZXIvaHRtbC9Hc3RCdWZmZXIuaHRtbCI+PGNsYXNzbmFtZT5Hc3RCdWZmZXI8L2NsYXNzbmFtZT48L3VsaW5rPiBhbmQgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Ii4uLy4uL2dzdHJlYW1lci9odG1sL0dzdEV2ZW50Lmh0bWwiPjxjbGFzc25hbWU+R3N0RXZlbnQ8L2NsYXNzbmFtZT48L3VsaW5rPi4KLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3QyLWJ1ZmZlci1hbGxvY2F0aW9uIiB4cmVmbGFiZWw9IkJ1ZmZlciBBbGxvY2F0aW9uIj4KLSAgICAgIDx0aXRsZT5CdWZmZXIgQWxsb2NhdGlvbjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQnVmZmVycyBhcmUgYWJsZSB0byBzdG9yZSBjaHVua3Mgb2YgbWVtb3J5IG9mIHNldmVyYWwgZGlmZmVyZW50Ci0JdHlwZXMuICBUaGUgbW9zdCBnZW5lcmljIHR5cGUgb2YgYnVmZmVyIGNvbnRhaW5zIG1lbW9yeSBhbGxvY2F0ZWQKLQlieSBtYWxsb2MoKS4gIFN1Y2ggYnVmZmVycywgYWx0aG91Z2ggY29udmVuaWVudCwgYXJlIG5vdCBhbHdheXMKLQl2ZXJ5IGZhc3QsIHNpbmNlIGRhdGEgb2Z0ZW4gbmVlZHMgdG8gYmUgc3BlY2lmaWNhbGx5IGNvcGllZCBpbnRvCi0JdGhlIGJ1ZmZlci4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotCU1hbnkgc3BlY2lhbGl6ZWQgZWxlbWVudHMgY3JlYXRlIGJ1ZmZlcnMgdGhhdCBwb2ludCB0byBzcGVjaWFsCi0JbWVtb3J5LiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlc3JjIGVsZW1lbnQgdXN1YWxseQotCW1hcHMgYSBmaWxlIGludG8gdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGFwcGxpY2F0aW9uICh1c2luZyBtbWFwKCkpLAotCWFuZCBjcmVhdGVzIGJ1ZmZlcnMgdGhhdCBwb2ludCBpbnRvIHRoYXQgYWRkcmVzcyByYW5nZS4gIFRoZXNlCi0JYnVmZmVycyBjcmVhdGVkIGJ5IGZpbGVzcmMgYWN0IGV4YWN0bHkgbGlrZSBnZW5lcmljIGJ1ZmZlcnMsIGV4Y2VwdAotCXRoYXQgdGhleSBhcmUgcmVhZC1vbmx5LiAgVGhlIGJ1ZmZlciBmcmVlaW5nIGNvZGUgYXV0b21hdGljYWxseQotCWRldGVybWluZXMgdGhlIGNvcnJlY3QgbWV0aG9kIG9mIGZyZWVpbmcgdGhlIHVuZGVybHlpbmcgbWVtb3J5LgotCURvd25zdHJlYW0gZWxlbWVudHMgdGhhdCByZWNlaXZlIHRoZXNlIGtpbmRzIG9mIGJ1ZmZlcnMgZG8gbm90Ci0JbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsIHRvIGhhbmRsZSBvciB1bnJlZmVyZW5jZSBpdC4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBbm90aGVyIHdheSBhbiBlbGVtZW50IG1pZ2h0IGdldCBzcGVjaWFsaXplZCBidWZmZXJzIGlzIHRvCi0gICAgICAgIHJlcXVlc3QgdGhlbSBmcm9tIGEgZG93bnN0cmVhbSBwZWVyIHRocm91Z2ggYSBHc3RCdWZmZXJQb29sIG9yCi0gICAgICAgIEdzdEFsbG9jYXRvci4gIEVsZW1lbnRzIGNhbiBhc2sgYSBHc3RCdWZmZXJQb29sIG9yIEdzdEFsbG9jYXRvcgotICAgICAgICBmcm9tIHRoZSBkb3duc3RyZWFtIHBlZXIgZWxlbWVudC4gSWYgZG93bnN0cmVhbSBpcyBhYmxlIHRvIHByb3ZpZGUKLSAgICAgICAgdGhlc2Ugb2JqZWN0cywgdXBzdHJlYW0gY2FuIHVzZSB0aGVtIHRvIGFsbG9jYXRlIGJ1ZmZlcnMuCi0gICAgICAgIFNlZSBtb3JlIGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYWxsb2NhdGlvbiIvPi4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICBNYW55IHNpbmsgZWxlbWVudHMgaGF2ZSBhY2NlbGVyYXRlZCBtZXRob2RzIGZvciBjb3B5aW5nIGRhdGEKLQl0byBoYXJkd2FyZSwgb3IgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGhhcmR3YXJlLiAgSXQgaXMgY29tbW9uCi0gICAgICAgIGZvciB0aGVzZSBlbGVtZW50cyB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIEdzdEJ1ZmZlclBvb2wgb3IgCi0gICAgICAgIEdzdEFsbG9jYXRvciBmb3IgdGhlaXIgdXBzdHJlYW0gcGVlcnMuICBPbmUgc3VjaCBleGFtcGxlIGlzCi0JeGltYWdlc2luay4gIEl0IGNyZWF0ZXMgYnVmZmVycyB0aGF0IGNvbnRhaW4gWEltYWdlcy4gIFRodXMsCi0Jd2hlbiBhbiB1cHN0cmVhbSBwZWVyIGNvcGllcyBkYXRhIGludG8gdGhlIGJ1ZmZlciwgaXQgaXMgY29weWluZwotCWRpcmVjdGx5IGludG8gdGhlIFhJbWFnZSwgZW5hYmxpbmcgeGltYWdlc2luayB0byBkcmF3IHRoZQotCWltYWdlIGRpcmVjdGx5IHRvIHRoZSBzY3JlZW4gaW5zdGVhZCBvZiBoYXZpbmcgdG8gY29weSBkYXRhCi0JaW50byBhbiBYSW1hZ2UgZmlyc3QuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgRmlsdGVyIGVsZW1lbnRzIG9mdGVuIGhhdmUgdGhlIG9wcG9ydHVuaXR5IHRvIGVpdGhlciB3b3JrIG9uCi0JYSBidWZmZXIgaW4tcGxhY2UsIG9yIHdvcmsgd2hpbGUgY29weWluZyBmcm9tIGEgc291cmNlIGJ1ZmZlcgotCXRvIGEgZGVzdGluYXRpb24gYnVmZmVyLiAgSXQgaXMgb3B0aW1hbCB0byBpbXBsZW1lbnQgYm90aAotCWFsZ29yaXRobXMsIHNpbmNlIHRoZSAmR1N0cmVhbWVyOyBmcmFtZXdvcmsgY2FuIGNob29zZSB0aGUKLQlmYXN0ZXN0IGFsZ29yaXRobSBhcyBhcHByb3ByaWF0ZS4gIE5hdHVyYWxseSwgdGhpcyBvbmx5IG1ha2VzCi0Jc2Vuc2UgZm9yIHN0cmljdCBmaWx0ZXJzIC0tIGVsZW1lbnRzIHRoYXQgaGF2ZSBleGFjdGx5IHRoZQotCXNhbWUgZm9ybWF0IG9uIHNvdXJjZSBhbmQgc2luayBwYWRzLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0gIDwvc2VjdDE+Ci0KLSAgPCEtLSAjIyMjIyMjIyMjIyMgc2VjdDEgIyMjIyMjIyMjIyMjIyAtLT4KLQotICA8c2VjdDEgaWQ9InNlY3Rpb24tYmFzaWNzLXR5cGVzIiB4cmVmbGFiZWw9IlR5cGVzIGFuZCBQcm9wZXJ0aWVzIj4KLSAgICA8dGl0bGU+TWVkaWEgdHlwZXMgYW5kIFByb3BlcnRpZXM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgJkdTdHJlYW1lcjsgdXNlcyBhIHR5cGUgc3lzdGVtIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHBhc3NlZCBiZXR3ZWVuCi0gICAgICBlbGVtZW50cyBpcyBpbiBhIHJlY29nbml6ZWQgZm9ybWF0LiBUaGUgdHlwZSBzeXN0ZW0gaXMgYWxzbyBpbXBvcnRhbnQKLSAgICAgIGZvciBlbnN1cmluZyB0aGF0IHRoZSBwYXJhbWV0ZXJzIHJlcXVpcmVkIHRvIGZ1bGx5IHNwZWNpZnkgYSBmb3JtYXQgbWF0Y2gKLSAgICAgIHVwIGNvcnJlY3RseSB3aGVuIGxpbmtpbmcgcGFkcyBiZXR3ZWVuIGVsZW1lbnRzLiBFYWNoIGxpbmsgdGhhdCBpcwotICAgICAgbWFkZSBiZXR3ZWVuIGVsZW1lbnRzIGhhcyBhIHNwZWNpZmllZCB0eXBlIGFuZCBvcHRpb25hbGx5IGEgc2V0IG9mCi0gICAgICBwcm9wZXJ0aWVzLiBTZWUgbW9yZSBhYm91dCBjYXBzIG5lZ290aWF0aW9uIGluCi0gICAgICA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLW5lZ290aWF0aW9uIi8+LgotICAgIDwvcGFyYT4KLQotICAgIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QyICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3QyLXR5cGVzLWJhc2ljdHlwZXMiIHhyZWZsYWJlbD0iQmFzaWMgVHlwZXMiPgotICAgICAgPHRpdGxlPlRoZSBCYXNpYyBUeXBlczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgJkdTdHJlYW1lcjsgYWxyZWFkeSBzdXBwb3J0cyBtYW55IGJhc2ljIG1lZGlhIHR5cGVzLiBGb2xsb3dpbmcgaXMgYQotICAgICAgICB0YWJsZSBvZiBhIGZldyBvZiB0aGUgYmFzaWMgdHlwZXMgdXNlZCBmb3IgYnVmZmVycyBpbgotICAgICAgICAmR1N0cmVhbWVyOy4gVGhlIHRhYmxlIGNvbnRhaW5zIHRoZSBuYW1lICgibWVkaWEgdHlwZSIpIGFuZCBhCi0gICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSB0eXBlLCB0aGUgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggdGhlIHR5cGUsIGFuZAotICAgICAgICB0aGUgbWVhbmluZyBvZiBlYWNoIHByb3BlcnR5LiBBIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgdHlwZXMgaXMKLSAgICAgICAgaW5jbHVkZWQgaW4gPHhyZWYgbGlua2VuZD0ic2VjdGlvbi10eXBlcy1kZWZpbml0aW9ucyIvPi4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ0YWJsZS1iYXNpY3R5cGVzIiB4cmVmbGFiZWw9IlRhYmxlIG9mIEV4YW1wbGUgVHlwZXMiPgotICAgICAgICA8dGl0bGU+VGFibGUgb2YgRXhhbXBsZSBUeXBlczwvdGl0bGU+Ci0gICAgICAgIDx0Z3JvdXAgY29scz0iNiIgYWxpZ249ImxlZnQiIGNvbHNlcD0iMSIgcm93c2VwPSIxIj4KLQotICAgICAgICA8dGhlYWQ+Ci0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5NZWRpYSBUeXBlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UHJvcGVydHk8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IFR5cGU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PlByb3BlcnR5IFZhbHVlczwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+UHJvcGVydHkgRGVzY3JpcHRpb248L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICA8L3RoZWFkPgotCi0gICAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIxIj5hdWRpby8qPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMSI+Ci0gICAgICAgICAgICAgIDxlbXBoYXNpcz5BbGwgYXVkaW8gdHlwZXM8L2VtcGhhc2lzPgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5yYXRlPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5ncmVhdGVyIHRoYW4gMDwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgZGF0YSwgaW4gc2FtcGxlcyAocGVyIGNoYW5uZWwpIHBlciBzZWNvbmQuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+Y2hhbm5lbHM8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgdGhhbiAwPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBjaGFubmVscyBvZiBhdWRpbyBkYXRhLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLQotICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIHR5cGUgIyMjIyMjIyMjIyMjIyAtLT4KLQotICAgICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8ZW50cnk+YXVkaW8veC1yYXc8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBVbnN0cnVjdHVyZWQgYW5kIHVuY29tcHJlc3NlZCByYXcgaW50ZWdlciBhdWRpbyBkYXRhLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5mb3JtYXQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PnN0cmluZzwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIFM4IFU4IFMxNkxFIFMxNkJFIFUxNkxFIFUxNkJFIFMyNF8zMkxFIFMyNF8zMkJFIFUyNF8zMkxFIFUyNF8zMkJFIFMzMkxFIFMzMkJFIFUzMkxFIFUzMkJFCi0gICAgICAgICAgICAgIFMyNExFIFMyNEJFIFUyNExFIFUyNEJFIFMyMExFIFMyMEJFIFUyMExFIFUyMEJFIFMxOExFIFMxOEJFIFUxOExFIFUxOEJFIEYzMkxFIEYzMkJFIEY2NExFIEY2NEJFCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSBzYW1wbGUgZGF0YS4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0KLSAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyB0eXBlICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSIzIj5hdWRpby9tcGVnPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeSBtb3Jlcm93cz0iMyI+Ci0gICAgICAgICAgICAgIEF1ZGlvIGRhdGEgY29tcHJlc3NlZCB1c2luZyB0aGUgTVBFRyBhdWRpbyBlbmNvZGluZyBzY2hlbWUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5Pm1wZWd2ZXJzaW9uPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4xLCAyIG9yIDQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGUgTVBFRy12ZXJzaW9uIHVzZWQgZm9yIGVuY29kaW5nIHRoZSBkYXRhLiBUaGUgdmFsdWUgMSByZWZlcnMKLSAgICAgICAgICAgICAgdG8gTVBFRy0xLCAtMiBhbmQgLTIuNSBsYXllciAxLCAyIG9yIDMuIFRoZSB2YWx1ZXMgMiBhbmQgNCByZWZlcgotICAgICAgICAgICAgICB0byB0aGUgTVBFRy1BQUMgYXVkaW8gZW5jb2Rpbmcgc2NoZW1lcy4KLSAgICAgICAgICAgIDwvZW50cnk+Ci0gICAgICAgICAgPC9yb3c+Ci0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5mcmFtZWQ8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmJvb2xlYW48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjAgb3IgMTwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Ci0gICAgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBlYWNoIGJ1ZmZlciBjb250YWlucyBleGFjdGx5IG9uZQotICAgICAgICAgICAgICBmcmFtZS4gQSBmYWxzZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBmcmFtZXMgYW5kIGJ1ZmZlcnMgZG8gbm90Ci0gICAgICAgICAgICAgIG5lY2Vzc2FyaWx5IG1hdGNoIHVwLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmxheWVyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4xLCAyLCBvciAzPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIGNvbXByZXNzaW9uIHNjaGVtZSBsYXllciB1c2VkIHRvIGNvbXByZXNzIHRoZSBkYXRhCi0gICAgICAgICAgICAgIDxlbXBoYXNpcz4ob25seSBpZiBtcGVndmVyc2lvbj0xKTwvZW1waGFzaXM+LgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgICA8cm93PgotICAgICAgICAgICAgPGVudHJ5PmJpdHJhdGU8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PmdyZWF0ZXIgdGhhbiAwPC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT4KLSAgICAgICAgICAgICAgVGhlIGJpdHJhdGUsIGluIGJpdHMgcGVyIHNlY29uZC4gRm9yIFZCUiAodmFyaWFibGUgYml0cmF0ZSkKLSAgICAgICAgICAgICAgTVBFRyBkYXRhLCB0aGlzIGlzIHRoZSBhdmVyYWdlIGJpdHJhdGUuCi0gICAgICAgICAgICA8L2VudHJ5PgotICAgICAgICAgIDwvcm93PgotCi0gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMgdHlwZSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gICAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxlbnRyeT5hdWRpby94LXZvcmJpczwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+Vm9yYmlzIGF1ZGlvIGRhdGE8L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+Ci0gICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KLSAgICAgICAgICAgIDxlbnRyeT48L2VudHJ5PgotICAgICAgICAgICAgPGVudHJ5PgotICAgICAgICAgICAgICBUaGVyZSBhcmUgY3VycmVudGx5IG5vIHNwZWNpZmljIHByb3BlcnRpZXMgZGVmaW5lZCBmb3IgdGhpcyB0eXBlLgotICAgICAgICAgICAgPC9lbnRyeT4KLSAgICAgICAgICA8L3Jvdz4KLSAgICAgICAgPC90Ym9keT4KLSAgICAgIDwvdGdyb3VwPgotICAgICAgPC90YWJsZT4KLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvaW50cm8tcHJlZmFjZS54bWwgYi9kb2NzL3B3Zy9pbnRyby1wcmVmYWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlNjU0MS4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9pbnRyby1wcmVmYWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0KLTwhLS0gIyMjIyMjIyMjIyMjIGNoYXB0ZXIgIyMjIyMjIyMjIyMjIyAtLT4KLQotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItaW50cm8tcHJlZmFjZSIgeHJlZmxhYmVsPSJQcmVmYWNlIj4KLSAgPHRpdGxlPlByZWZhY2U8L3RpdGxlPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0gIAotICA8c2VjdDEgaWQ9InNlY3Rpb24taW50cm8td2hhdCI+PCEtLSBzeW5jaHJvbml6ZSB3aXRoIEFwcERldk1hbiAtLT4KLSAgICA8dGl0bGU+V2hhdCBpcyAmR1N0cmVhbWVyOz88L3RpdGxlPgotICAgIDxwYXJhPiAKLSAgICAgICZHU3RyZWFtZXI7IGlzIGEgZnJhbWV3b3JrIGZvciBjcmVhdGluZyBzdHJlYW1pbmcgbWVkaWEgYXBwbGljYXRpb25zLgotICAgICAgVGhlIGZ1bmRhbWVudGFsIGRlc2lnbiBjb21lcyBmcm9tIHRoZSB2aWRlbyBwaXBlbGluZSBhdCBPcmVnb24gR3JhZHVhdGUKLSAgICAgIEluc3RpdHV0ZSwgYXMgd2VsbCBhcyBzb21lIGlkZWFzIGZyb20gRGlyZWN0U2hvdy4gIAotICAgIDwvcGFyYT4KLSAKLSAgICA8cGFyYT4KLSAgICAgICZHU3RyZWFtZXI7J3MgZGV2ZWxvcG1lbnQgZnJhbWV3b3JrIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGFueQotICAgICAgdHlwZSBvZiBzdHJlYW1pbmcgbXVsdGltZWRpYSBhcHBsaWNhdGlvbi4gVGhlICZHU3RyZWFtZXI7IGZyYW1ld29yawotICAgICAgaXMgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXN5IHRvIHdyaXRlIGFwcGxpY2F0aW9ucyB0aGF0IGhhbmRsZSBhdWRpbwotICAgICAgb3IgdmlkZW8gb3IgYm90aC4gSXQgaXNuJ3QgcmVzdHJpY3RlZCB0byBhdWRpbyBhbmQgdmlkZW8sIGFuZCBjYW4KLSAgICAgIHByb2Nlc3MgYW55IGtpbmQgb2YgZGF0YSBmbG93LgotICAgICAgVGhlIHBpcGVsaW5lIGRlc2lnbiBpcyBtYWRlIHRvIGhhdmUgbGl0dGxlIG92ZXJoZWFkIGFib3ZlIHdoYXQgdGhlCi0gICAgICBhcHBsaWVkIGZpbHRlcnMgaW5kdWNlLiBUaGlzIG1ha2VzICZHU3RyZWFtZXI7IGEgZ29vZCBmcmFtZXdvcmsgZm9yCi0gICAgICBkZXNpZ25pbmcgZXZlbiBoaWdoLWVuZCBhdWRpbyBhcHBsaWNhdGlvbnMgd2hpY2ggcHV0IGhpZ2ggZGVtYW5kcyBvbgotICAgICAgbGF0ZW5jeSBvciBwZXJmb3JtYW5jZS4gCi0gICAgPC9wYXJhPiAKLQotICAgIDxwYXJhPgotICAgICAgT25lIG9mIHRoZSBtb3N0IG9idmlvdXMgdXNlcyBvZiAmR1N0cmVhbWVyOyBpcyB1c2luZyBpdCB0byBidWlsZAotICAgICAgYSBtZWRpYSBwbGF5ZXIuICZHU3RyZWFtZXI7IGFscmVhZHkgaW5jbHVkZXMgY29tcG9uZW50cyBmb3IgYnVpbGRpbmcgYQotICAgICAgbWVkaWEgcGxheWVyIHRoYXQgY2FuIHN1cHBvcnQgYSB2ZXJ5IHdpZGUgdmFyaWV0eSBvZiBmb3JtYXRzLCBpbmNsdWRpbmcKLSAgICAgIE1QMywgT2dnL1ZvcmJpcywgTVBFRy0xLzIsIEFWSSwgUXVpY2t0aW1lLCBtb2QsIGFuZCBtb3JlLiAmR1N0cmVhbWVyOywKLSAgICAgIGhvd2V2ZXIsIGlzIG11Y2ggbW9yZSB0aGFuIGp1c3QgYW5vdGhlciBtZWRpYSBwbGF5ZXIuIEl0cyBtYWluIGFkdmFudGFnZXMKLSAgICAgIGFyZSB0aGF0IHRoZSBwbHVnZ2FibGUgY29tcG9uZW50cyBjYW4gYmUgbWl4ZWQgYW5kIG1hdGNoZWQgaW50byBhcmJpdHJhcnkKLSAgICAgIHBpcGVsaW5lcyBzbyB0aGF0IGl0J3MgcG9zc2libGUgdG8gd3JpdGUgYSBmdWxsLWZsZWRnZWQgdmlkZW8gb3IgYXVkaW8KLSAgICAgIGVkaXRpbmcgYXBwbGljYXRpb24uCi0gICAgPC9wYXJhPiAKLQotICAgIDxwYXJhPgotICAgICAgVGhlIGZyYW1ld29yayBpcyBiYXNlZCBvbiBwbHVnaW5zIHRoYXQgd2lsbCBwcm92aWRlIHRoZSB2YXJpb3VzIGNvZGVjIAotICAgICAgYW5kIG90aGVyIGZ1bmN0aW9uYWxpdHkuIFRoZSBwbHVnaW5zIGNhbiBiZSBsaW5rZWQgYW5kIGFycmFuZ2VkIGluCi0gICAgICBhIHBpcGVsaW5lLiBUaGlzIHBpcGVsaW5lIGRlZmluZXMgdGhlIGZsb3cgb2YgdGhlIGRhdGEuCi0gICAgPC9wYXJhPiAKLQotICAgIDxwYXJhPgotICAgICAgVGhlICZHU3RyZWFtZXI7IGNvcmUgZnVuY3Rpb24gaXMgdG8gcHJvdmlkZSBhIGZyYW1ld29yayBmb3IgcGx1Z2lucywKLSAgICAgIGRhdGEgZmxvdywgc3luY2hyb25pemF0aW9uIGFuZCBtZWRpYSB0eXBlIGhhbmRsaW5nL25lZ290aWF0aW9uLiBJdAotICAgICAgYWxzbyBwcm92aWRlcyBhbiBBUEkgdG8gd3JpdGUgYXBwbGljYXRpb25zIHVzaW5nIHRoZSB2YXJpb3VzIHBsdWdpbnMuCi0gICAgPC9wYXJhPiAKLSAgPC9zZWN0MT4KLQotICA8IS0tICMjIyMjIyMjIyMjIyBzZWN0MSAjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1wcmVmYWNlLXdobyIgeHJlZmxhYmVsPSJXaG8gU2hvdWxkIFJlYWQgVGhpcyBHdWlkZT8iPgotICAgIDx0aXRsZT5XaG8gU2hvdWxkIFJlYWQgVGhpcyBHdWlkZT88L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVGhpcyBndWlkZSBleHBsYWlucyBob3cgdG8gd3JpdGUgbmV3IG1vZHVsZXMgZm9yICZHU3RyZWFtZXI7LiBUaGUgZ3VpZGUgaXMKLSAgICAgIHJlbGV2YW50IHRvIHNldmVyYWwgZ3JvdXBzIG9mIHBlb3BsZToKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQW55b25lIHdobyB3YW50cyB0byBhZGQgc3VwcG9ydCBmb3IgbmV3IHdheXMgb2YgcHJvY2Vzc2luZyBkYXRhIGluCi0gICAgICAgICAgJkdTdHJlYW1lcjsuIEZvciBleGFtcGxlLCBhIHBlcnNvbiBpbiB0aGlzIGdyb3VwIG1pZ2h0IHdhbnQgdG8gY3JlYXRlCi0gICAgICAgICAgYSBuZXcgZGF0YSBmb3JtYXQgY29udmVydGVyLCBhIG5ldyB2aXN1YWxpemF0aW9uIHRvb2wsIG9yIGEgbmV3Ci0gICAgICAgICAgZGVjb2RlciBvciBlbmNvZGVyLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbnlvbmUgd2hvIHdhbnRzIHRvIGFkZCBzdXBwb3J0IGZvciBuZXcgaW5wdXQgYW5kIG91dHB1dCBkZXZpY2VzLiBGb3IKLSAgICAgICAgICBleGFtcGxlLCBwZW9wbGUgaW4gdGhpcyBncm91cCBtaWdodCB3YW50IHRvIGFkZCB0aGUgYWJpbGl0eSB0byB3cml0ZQotICAgICAgICAgIHRvIGEgbmV3IHZpZGVvIG91dHB1dCBzeXN0ZW0gb3IgcmVhZCBkYXRhIGZyb20gYSBkaWdpdGFsIGNhbWVyYSBvcgotICAgICAgICAgIHNwZWNpYWwgbWljcm9waG9uZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQW55b25lIHdobyB3YW50cyB0byBleHRlbmQgJkdTdHJlYW1lcjsgaW4gYW55IHdheS4gWW91IG5lZWQgdG8gaGF2ZSBhbgotICAgICAgICAgIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBwbHVnaW4gc3lzdGVtIHdvcmtzIGJlZm9yZSB5b3UgY2FuIHVuZGVyc3RhbmQKLSAgICAgICAgICB0aGUgY29uc3RyYWludHMgdGhhdCB0aGUgcGx1Z2luIHN5c3RlbSBwbGFjZXMgb24gdGhlIHJlc3Qgb2YgdGhlIGNvZGUuCi0gICAgICAgICAgQWxzbywgeW91IG1pZ2h0IGJlIHN1cnByaXNlZCBhZnRlciByZWFkaW5nIHRoaXMgYXQgaG93IG11Y2ggY2FuIGJlCi0gICAgICAgICAgZG9uZSB3aXRoIHBsdWdpbnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGlzIGd1aWRlIGlzIG5vdCByZWxldmFudCB0byB5b3UgaWYgeW91IG9ubHkgd2FudCB0byB1c2UgdGhlIGV4aXN0aW5nCi0gICAgICBmdW5jdGlvbmFsaXR5IG9mICZHU3RyZWFtZXI7LCBvciBpZiB5b3UganVzdCB3YW50IHRvIHVzZSBhbiBhcHBsaWNhdGlvbgotICAgICAgdGhhdCB1c2VzICZHU3RyZWFtZXI7LiBJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB1c2luZyBleGlzdGluZwotICAgICAgcGx1Z2lucyB0byB3cml0ZSBhIG5ldyBhcHBsaWNhdGlvbiAtIGFuZCB0aGVyZSBhcmUgcXVpdGUgYSBsb3Qgb2YKLSAgICAgIHBsdWdpbnMgYWxyZWFkeSAtIHlvdSBtaWdodCB3YW50IHRvIGNoZWNrIHRoZSAmR3N0QXBwRGV2TWFuOy4gSWYgeW91Ci0gICAgICBhcmUganVzdCB0cnlpbmcgdG8gZ2V0IGhlbHAgd2l0aCBhICZHU3RyZWFtZXI7IGFwcGxpY2F0aW9uLCB0aGVuIHlvdQotICAgICAgc2hvdWxkIGNoZWNrIHdpdGggdGhlIHVzZXIgbWFudWFsIGZvciB0aGF0IHBhcnRpY3VsYXIgYXBwbGljYXRpb24uCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXByZWZhY2UtcmVhZGluZyIgeHJlZmxhYmVsPSJQcmVsaW1pbmFyeSBSZWFkaW5nIj4KLSAgICA8dGl0bGU+UHJlbGltaW5hcnkgUmVhZGluZzwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGlzIGd1aWRlIGFzc3VtZXMgdGhhdCB5b3UgYXJlIHNvbWV3aGF0IGZhbWlsaWFyIHdpdGggdGhlIGJhc2ljIHdvcmtpbmdzCi0gICAgICBvZiAmR1N0cmVhbWVyOy4gRm9yIGEgZ2VudGxlIGludHJvZHVjdGlvbiB0byBwcm9ncmFtbWluZyBjb25jZXB0cyBpbgotICAgICAgJkdTdHJlYW1lcjssIHlvdSBtYXkgd2lzaCB0byByZWFkIHRoZSAmR3N0QXBwRGV2TWFuOyBmaXJzdC4KLSAgICAgIEFsc28gY2hlY2sgb3V0IHRoZSBvdGhlciBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBvbiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiCi0gICAgICB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RvY3VtZW50YXRpb24vIj4mR1N0cmVhbWVyOyB3ZWIgc2l0ZTwvdWxpbms+LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT48IS0tIHN5bmNocm9uaXplIHdpdGggQXBwRGV2TWFuIC0tPgotICAgICAgSW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB0aGlzIG1hbnVhbCwgeW91IHdpbGwgbmVlZCB0byBoYXZlIGEgYmFzaWMKLSAgICAgIHVuZGVyc3RhbmRpbmcgb2YgdGhlIEMgbGFuZ3VhZ2UuCi0gICAgICBTaW5jZSAmR1N0cmVhbWVyOyBhZGhlcmVzIHRvIHRoZSBHT2JqZWN0IHByb2dyYW1taW5nIG1vZGVsLCB0aGlzIGd1aWRlCi0gICAgICBhbHNvIGFzc3VtZXMgdGhhdCB5b3UgdW5kZXJzdGFuZCB0aGUgYmFzaWNzIG9mIDx1bGluayB0eXBlPSJodHRwIgotICAgICAgdXJsPSJodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3N0YWJsZS9wdDAxLmh0bWwiPkdPYmplY3Q8L3VsaW5rPgotICAgICAgcHJvZ3JhbW1pbmcuIAotICAgICAgWW91IG1heSBhbHNvIHdhbnQgdG8gaGF2ZSBhIGxvb2sKLSAgICAgIGF0IEVyaWMgSGFybG93J3MgYm9vayA8ZW1waGFzaXM+RGV2ZWxvcGluZyBMaW51eCBBcHBsaWNhdGlvbnMgd2l0aAotICAgICAgR1RLKyBhbmQgR0RLPC9lbXBoYXNpcz4uCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIHNlY3QxICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXByZWZhY2Utc3RydWN0dXJlIiB4cmVmbGFiZWw9IlN0cnVjdHVyZSBvZiBUaGlzIEd1aWRlIj4KLSAgICA8dGl0bGU+U3RydWN0dXJlIG9mIFRoaXMgR3VpZGU8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVG8gaGVscCB5b3UgbmF2aWdhdGUgdGhyb3VnaCB0aGlzIGd1aWRlLCBpdCBpcyBkaXZpZGVkIGludG8gc2V2ZXJhbCBsYXJnZQotICAgICAgcGFydHMuIEVhY2ggcGFydCBhZGRyZXNzZXMgYSBwYXJ0aWN1bGFyIGJyb2FkIHRvcGljIGNvbmNlcm5pbmcgJkdTdHJlYW1lcjsKLSAgICAgIHBsdWdpbiBkZXZlbG9wbWVudC4gVGhlIHBhcnRzIG9mIHRoaXMgZ3VpZGUgYXJlIGxhaWQgb3V0IGluIHRoZSBmb2xsb3dpbmcKLSAgICAgIG9yZGVyOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJwYXJ0LWJ1aWxkaW5nIi8+IC0KLSAgICAgICAgICBJbnRyb2R1Y3Rpb24gdG8gdGhlIHN0cnVjdHVyZSBvZiBhIHBsdWdpbiwgdXNpbmcgYW4gZXhhbXBsZSBhdWRpbwotICAgICAgICAgIGZpbHRlciBmb3IgaWxsdXN0cmF0aW9uLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgcGFydCBjb3ZlcnMgYWxsIHRoZSBiYXNpYyBzdGVwcyB5b3UgZ2VuZXJhbGx5IG5lZWQgdG8gcGVyZm9ybQotICAgICAgICAgIHRvIGJ1aWxkIGEgcGx1Z2luLCBzdWNoIGFzIHJlZ2lzdGVyaW5nIHRoZSBlbGVtZW50IHdpdGggJkdTdHJlYW1lcjsKLSAgICAgICAgICBhbmQgc2V0dGluZyB1cCB0aGUgYmFzaWNzIHNvIGl0IGNhbiByZWNlaXZlIGRhdGEgZnJvbSBhbmQgc2VuZCBkYXRhCi0gICAgICAgICAgdG8gbmVpZ2hib3VyIGVsZW1lbnRzLiBUaGUgZGlzY3Vzc2lvbiBiZWdpbnMgYnkgZ2l2aW5nIGV4YW1wbGVzIG9mCi0gICAgICAgICAgZ2VuZXJhdGluZyB0aGUgYmFzaWMgc3RydWN0dXJlcyBhbmQgcmVnaXN0ZXJpbmcgYW4gZWxlbWVudCBpbgotICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctYm9pbGVyIi8+LiBUaGVuLCB5b3Ugd2lsbCBsZWFybiBob3cKLSAgICAgICAgICB0byB3cml0ZSB0aGUgY29kZSB0byBnZXQgYSBiYXNpYyBmaWx0ZXIgcGx1Z2luIHdvcmtpbmcgaW4gPHhyZWYKLSAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLXBhZHMiLz4sIDx4cmVmCi0gICAgICAgICAgbGlua2VuZD0iY2hhcHRlci1idWlsZGluZy1jaGFpbmZuIi8+IGFuZCA8eHJlZgotICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItc3RhdGVtYW5hZ2Utc3RhdGVzIi8+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFmdGVyIHRoYXQsIHdlIHdpbGwgc2hvdyBzb21lIG9mIHRoZSBHT2JqZWN0IGNvbmNlcHRzIG9uIGhvdyB0bwotICAgICAgICAgIG1ha2UgYW4gZWxlbWVudCBjb25maWd1cmFibGUgZm9yIGFwcGxpY2F0aW9ucyBhbmQgaG93IHRvIGRvCi0gICAgICAgICAgYXBwbGljYXRpb24tZWxlbWVudCBpbnRlcmFjdGlvbiBpbgotICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctYXJncyIvPiBhbmQgPHhyZWYKLSAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLWJ1aWxkaW5nLXNpZ25hbHMiLz4uIE5leHQsIHlvdSB3aWxsIGxlYXJuIHRvIGJ1aWxkCi0gICAgICAgICAgYSBxdWljayB0ZXN0IGFwcGxpY2F0aW9uIHRvIHRlc3QgYWxsIHRoYXQgeW91J3ZlIGp1c3QgbGVhcm5lZCBpbgotICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctdGVzdGFwcCIvPi4gV2Ugd2lsbCBqdXN0IHRvdWNoIHVwb24KLSAgICAgICAgICBiYXNpY3MgaGVyZS4gRm9yIGZ1bGwtYmxvd24gYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQsIHlvdSBzaG91bGQKLSAgICAgICAgICBsb29rIGF0IDx1bGluayB0eXBlPSJodHRwIgotICAgICAgICAgIHVybD0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvbWFudWFsL2h0bWwvaW5kZXguaHRtbCI+dGhlCi0gICAgICAgICAgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4uCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9InBhcnQtYWR2YW5jZWQiLz4gLQotICAgICAgICAgIEluZm9ybWF0aW9uIG9uIGFkdmFuY2VkIGZlYXR1cmVzIG9mICZHU3RyZWFtZXI7IHBsdWdpbiBkZXZlbG9wbWVudC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBZnRlciBsZWFybmluZyBhYm91dCB0aGUgYmFzaWMgc3RlcHMsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYQotICAgICAgICAgIGZ1bmN0aW9uYWwgYXVkaW8gb3IgdmlkZW8gZmlsdGVyIHBsdWdpbiB3aXRoIHNvbWUgbmljZSBmZWF0dXJlcy4KLSAgICAgICAgICBIb3dldmVyLCAmR1N0cmVhbWVyOyBvZmZlcnMgbW9yZSBmb3IgcGx1Z2luIHdyaXRlcnMuIFRoaXMgcGFydCBvZiB0aGUKLSAgICAgICAgICBndWlkZSBpbmNsdWRlcyBjaGFwdGVycyBvbiBtb3JlIGFkdmFuY2VkIHRvcGljcywgc3VjaCBhcyBzY2hlZHVsaW5nLAotICAgICAgICAgIG1lZGlhIHR5cGUgZGVmaW5pdGlvbnMgaW4gJkdTdHJlYW1lcjssIGNsb2NrcywgaW50ZXJmYWNlcyBhbmQKLSAgICAgICAgICB0YWdnaW5nLiBTaW5jZSB0aGVzZSBmZWF0dXJlcyBhcmUgcHVycG9zZS1zcGVjaWZpYywgeW91IGNhbiByZWFkIHRoZW0KLSAgICAgICAgICBpbiBhbnkgb3JkZXIsIG1vc3Qgb2YgdGhlbSBkb24ndCByZXF1aXJlIGtub3dsZWRnZSBmcm9tIG90aGVyCi0gICAgICAgICAgc2VjdGlvbnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIGZpcnN0IGNoYXB0ZXIsIG5hbWVkIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItc2NoZWR1bGluZyIvPiwKLSAgICAgICAgICB3aWxsIGV4cGxhaW4gc29tZSBvZiB0aGUgYmFzaWNzIG9mIGVsZW1lbnQgc2NoZWR1bGluZy4gSXQgaXMgbm90Ci0gICAgICAgICAgdmVyeSBpbi1kZXB0aCwgYnV0IGlzIG1vc3RseSBzb21lIHNvcnQgb2YgYW4gaW50cm9kdWN0aW9uIG9uIHdoeQotICAgICAgICAgIG90aGVyIHRoaW5ncyB3b3JrIGFzIHRoZXkgZG8uIFJlYWQgdGhpcyBjaGFwdGVyIGlmIHlvdSdyZSBpbnRlcmVzdGVkCi0gICAgICAgICAgaW4gJkdTdHJlYW1lcjsgaW50ZXJuYWxzLiBOZXh0LCB3ZSB3aWxsIGFwcGx5IHRoaXMga25vd2xlZGdlIGFuZAotICAgICAgICAgIGRpc2N1c3MgYW5vdGhlciB0eXBlIG9mIGRhdGEgdHJhbnNtaXNzaW9uIHRoYW4gd2hhdCB5b3UgbGVhcm5lZCBpbgotICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctY2hhaW5mbiIvPjogPHhyZWYKLSAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLXNjaGVkdWxpbmciLz4uIExvb3AtYmFzZWQgZWxlbWVudHMgd2lsbCBnaXZlCi0gICAgICAgICAgeW91IG1vcmUgY29udHJvbCBvdmVyIGlucHV0IHJhdGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gd3JpdGluZywgZm9yCi0gICAgICAgICAgZXhhbXBsZSwgbXV4ZXJzIG9yIGRlbXV4ZXJzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE5leHQsIHdlIHdpbGwgZGlzY3VzcyBtZWRpYSBpZGVudGlmaWNhdGlvbiBpbiAmR1N0cmVhbWVyOyBpbiA8eHJlZgotICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctdHlwZXMiLz4uIFlvdSB3aWxsIGxlYXJuIGhvdyB0byBkZWZpbmUKLSAgICAgICAgICBuZXcgbWVkaWEgdHlwZXMgYW5kIGdldCB0byBrbm93IGEgbGlzdCBvZiBzdGFuZGFyZCBtZWRpYSB0eXBlcwotICAgICAgICAgIGRlZmluZWQgaW4gJkdTdHJlYW1lcjsuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gdGhlIG5leHQgY2hhcHRlciwgeW91IHdpbGwgbGVhcm4gdGhlIGNvbmNlcHQgb2YgcmVxdWVzdC0gYW5kCi0gICAgICAgICAgc29tZXRpbWVzLXBhZHMsIHdoaWNoIGFyZSBwYWRzIHRoYXQgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHksIGVpdGhlcgotICAgICAgICAgIGJlY2F1c2UgdGhlIGFwcGxpY2F0aW9uIGFza2VkIGZvciBpdCAocmVxdWVzdCkgb3IgYmVjYXVzZSB0aGUgbWVkaWEKLSAgICAgICAgICBzdHJlYW0gcmVxdWlyZXMgaXQgKHNvbWV0aW1lcykuIFRoaXMgd2lsbCBiZSBpbiA8eHJlZgotICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItYWR2YW5jZWQtcmVxdWVzdCIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgbmV4dCBjaGFwdGVyLCA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWFkdmFuY2VkLWNsb2NrIi8+LCB3aWxsCi0gICAgICAgICAgZXhwbGFpbiB0aGUgY29uY2VwdCBvZiBjbG9ja3MgaW4gJkdTdHJlYW1lcjsuIFlvdSBuZWVkIHRoaXMKLSAgICAgICAgICBpbmZvcm1hdGlvbiB3aGVuIHlvdSB3YW50IHRvIGtub3cgaG93IGVsZW1lbnRzIHNob3VsZCBhY2hpZXZlCi0gICAgICAgICAgYXVkaW8vdmlkZW8gc3luY2hyb25pemF0aW9uLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBuZXh0IGZldyBjaGFwdGVycyB3aWxsIGRpc2N1c3MgYWR2YW5jZWQgd2F5cyBvZiBkb2luZwotICAgICAgICAgIGFwcGxpY2F0aW9uLWVsZW1lbnQgaW50ZXJhY3Rpb24uIFByZXZpb3VzbHksIHdlIGxlYXJuZWQgb24gdGhlCi0gICAgICAgICAgR09iamVjdC13YXlzIG9mIGRvaW5nIHRoaXMgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1idWlsZGluZy1hcmdzIi8+Ci0gICAgICAgICAgYW5kIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYnVpbGRpbmctc2lnbmFscyIvPi4gV2Ugd2lsbCBkaXNjdXNzCi0gICAgICAgICAgZHluYW1pYyBwYXJhbWV0ZXJzLCB3aGljaCBhcmUgYSB3YXkgb2YgZGVmaW5pbmcgZWxlbWVudCBiZWhhdmlvdXIKLSAgICAgICAgICBvdmVyIHRpbWUgaW4gYWR2YW5jZSwgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1kcGFyYW1zIi8+LiBOZXh0LAotICAgICAgICAgIHlvdSB3aWxsIGxlYXJuIGFib3V0IGludGVyZmFjZXMgaW4gPHhyZWYKLSAgICAgICAgICBsaW5rZW5kPSJjaGFwdGVyLWFkdmFuY2VkLWludGVyZmFjZXMiLz4uIEludGVyZmFjZXMgYXJlIHZlcnkgdGFyZ2V0LQotICAgICAgICAgIHNwZWNpZmljIHdheXMgb2YgYXBwbGljYXRpb24tZWxlbWVudCBpbnRlcmFjdGlvbiwgYmFzZWQgb24gR09iamVjdCdzCi0gICAgICAgICAgR0ludGVyZmFjZS4gTGFzdGx5LCB5b3Ugd2lsbCBsZWFybiBhYm91dCBob3cgbWV0YWRhdGEgaXMgaGFuZGxlZCBpbgotICAgICAgICAgICZHU3RyZWFtZXI7IGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItYWR2YW5jZWQtdGFnZ2luZyIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgbGFzdCBjaGFwdGVyLCA8eHJlZiBsaW5rZW5kPSJjaGFwdGVyLWFkdmFuY2VkLWV2ZW50cyIvPiwgd2lsbAotICAgICAgICAgIGRpc2N1c3MgdGhlIGNvbmNlcHQgb2YgZXZlbnRzIGluICZHU3RyZWFtZXI7LiBFdmVudHMgYXJlLCBvbiB0aGUKLSAgICAgICAgICBvbmUgaGFuZCwgYW5vdGhlciB3YXkgb2YgZG9pbmcgYXBwbGljYXRpb24tZWxlbWVudCBpbnRlcmFjdGlvbi4gSXQKLSAgICAgICAgICB0YWtlcyBjYXJlIG9mIHNlZWtpbmcsIGZvciBleGFtcGxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgaXMgYWxzbwotICAgICAgICAgIGEgd2F5IGluIHdoaWNoIGVsZW1lbnRzIGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgc3VjaCBhcyBsZXR0aW5nCi0gICAgICAgICAgZWFjaCBvdGhlciBrbm93IGFib3V0IG1lZGlhIHN0cmVhbSBkaXNjb250aW51aXRpZXMsIGZvcndhcmRpbmcgdGFncwotICAgICAgICAgIGluc2lkZSBhIHBpcGVsaW5lIGFuZCBzbyBvbi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPHhyZWYgbGlua2VuZD0icGFydC1vdGhlciIvPiAtIEV4cGxhbmF0aW9uCi0gICAgICAgICAgb2Ygd3JpdGluZyBvdGhlciBwbHVnaW4gdHlwZXMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgQmVjYXVzZSB0aGUgZmlyc3QgdHdvIHBhcnRzIG9mIHRoZSBndWlkZSB1c2UgYW4gYXVkaW8gZmlsdGVyIGFzIGFuCi0gICAgICAgICAgZXhhbXBsZSwgdGhlIGNvbmNlcHRzIGludHJvZHVjZWQgYXBwbHkgdG8gZmlsdGVyIHBsdWdpbnMuIEJ1dCBtYW55IG9mCi0gICAgICAgICAgdGhlIGNvbmNlcHRzIGFwcGx5IGVxdWFsbHkgdG8gb3RoZXIgcGx1Z2luIHR5cGVzLCBpbmNsdWRpbmcgc291cmNlcywKLSAgICAgICAgICBzaW5rcywgYW5kIGF1dG9wbHVnZ2Vycy4gVGhpcyBwYXJ0IG9mIHRoZSBndWlkZSBwcmVzZW50cyB0aGUgaXNzdWVzCi0gICAgICAgICAgdGhhdCBhcmlzZSB3aGVuIHdvcmtpbmcgb24gdGhlc2UgbW9yZSBzcGVjaWFsaXplZCBwbHVnaW4gdHlwZXMuIFRoZQotICAgICAgICAgIGNoYXB0ZXIgc3RhcnRzIHdpdGggYSBzcGVjaWFsIGZvY3VzIG9uIGVsZW1lbnRzIHRoYXQgY2FuIGJlIHdyaXR0ZW4KLSAgICAgICAgICB1c2luZyBhIGJhc2UtY2xhc3MgKDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItb3RoZXItYmFzZSIvPiksIGFuZAotICAgICAgICAgIGxhdGVyIGFsc28gZ29lcyBpbnRvIHdyaXRpbmcgc3BlY2lhbCB0eXBlcyBvZiBlbGVtZW50cyBpbgotICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItb3RoZXItb25ldG9uIi8+LCA8eHJlZgotICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItb3RoZXItbnRvb25lIi8+IGFuZCA8eHJlZgotICAgICAgICAgIGxpbmtlbmQ9ImNoYXB0ZXItb3RoZXItbWFuYWdlciIvPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPHhyZWYgbGlua2VuZD0icGFydC1hcHBlbmRpeCIvPiAtIEZ1cnRoZXIKLSAgICAgICAgICBpbmZvcm1hdGlvbiBmb3IgcGx1Z2luIGRldmVsb3BlcnMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIGFwcGVuZGljZXMgY29udGFpbiBzb21lIGluZm9ybWF0aW9uIHRoYXQgc3R1YmJvcm5seSByZWZ1c2VzCi0gICAgICAgICAgdG8gZml0IGNsZWFubHkgaW4gb3RoZXIgc2VjdGlvbnMgb2YgdGhlIGd1aWRlLiBNb3N0IG9mIHRoaXMgc2VjdGlvbgotICAgICAgICAgIGlzIG5vdCB5ZXQgZmluaXNoZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBpbnRyb2R1Y3RvcnkgcGFydCBvZiB0aGUgZ3VpZGUgcHJlc2VudHMgYSBzaG9ydAotICAgICAgb3ZlcnZpZXcgb2YgdGhlIGJhc2ljIGNvbmNlcHRzIGludm9sdmVkIGluICZHU3RyZWFtZXI7IHBsdWdpbiBkZXZlbG9wbWVudC4KLSAgICAgIFRvcGljcyBjb3ZlcmVkIGluY2x1ZGUgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1iYXNpY3MtZWxlbWVudHMiLz4sIDx4cmVmCi0gICAgICBsaW5rZW5kPSJzZWN0aW9uLWJhc2ljcy1wYWRzIi8+LCA8eHJlZiBsaW5rZW5kPSJzZWN0aW9uLWJhc2ljcy1kYXRhIi8+IGFuZAotICAgICAgPHhyZWYgbGlua2VuZD0ic2VjdGlvbi1iYXNpY3MtdHlwZXMiLz4uIElmIHlvdSBhcmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoCi0gICAgICB0aGlzIGluZm9ybWF0aW9uLCB5b3UgY2FuIHVzZSB0aGlzIHNob3J0IG92ZXJ2aWV3IHRvIHJlZnJlc2ggeW91ciBtZW1vcnksCi0gICAgICBvciB5b3UgY2FuIHNraXAgdG8gPHhyZWYgbGlua2VuZD0icGFydC1idWlsZGluZyIvPi4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBcyB5b3UgY2FuIHNlZSwgdGhlcmUgYSBsb3QgdG8gbGVhcm4sIHNvIGxldCdzIGdldCBzdGFydGVkIQotICAgIDwvcGFyYT4KLQotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIENyZWF0aW5nIGNvbXBvdW5kIGFuZCBjb21wbGV4IGVsZW1lbnRzIGJ5IGV4dGVuZGluZyBmcm9tIGEgR3N0QmluLgotICAgICAgICAgIFRoaXMgd2lsbCBhbGxvdyB5b3UgdG8gY3JlYXRlIHBsdWdpbnMgdGhhdCBoYXZlIG90aGVyIHBsdWdpbnMgZW1iZWRkZWQKLSAgICAgICAgICBpbiB0aGVtLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBZGRpbmcgbmV3IG1lZGlhIHR5cGVzIHRvIHRoZSByZWdpc3RyeSBhbG9uZyB3aXRoIHR5cGVkZXRlY3QgZnVuY3Rpb25zLgotICAgICAgICAgIFRoaXMgd2lsbCBhbGxvdyB5b3VyIHBsdWdpbiB0byBvcGVyYXRlIG9uIGEgY29tcGxldGVseSBuZXcgbWVkaWEgdHlwZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgPC9zZWN0MT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL290aGVyLWJhc2UueG1sIGIvZG9jcy9wd2cvb3RoZXItYmFzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMDBmOTguLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvb3RoZXItYmFzZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItb3RoZXItYmFzZSIgeHJlZmxhYmVsPSJQcmUtbWFkZSBiYXNlIGNsYXNzZXMiPgotICA8dGl0bGU+UHJlLW1hZGUgYmFzZSBjbGFzc2VzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgU28gZmFyLCB3ZSd2ZSBiZWVuIGxvb2tpbmcgYXQgbG93LWxldmVsIGNvbmNlcHRzIG9mIGNyZWF0aW5nIGFueSB0eXBlIG9mCi0gICAgJkdTdHJlYW1lcjsgZWxlbWVudC4gTm93LCBsZXQncyBhc3N1bWUgdGhhdCBhbGwgeW91IHdhbnQgaXMgdG8gY3JlYXRlIGFuCi0gICAgc2ltcGxlIGF1ZGlvc2luayB0aGF0IHdvcmtzIGV4YWN0bHkgdGhlIHNhbWUgYXMsIHNheSwKLSAgICA8cXVvdGU+ZXNkc2luazwvcXVvdGU+LCBvciBhIGZpbHRlciB0aGF0IHNpbXBseSBub3JtYWxpemVzIGF1ZGlvIHZvbHVtZS4KLSAgICBTdWNoIGVsZW1lbnRzIGFyZSB2ZXJ5IGdlbmVyYWwgaW4gY29uY2VwdCBhbmQgc2luY2UgdGhleSBkbyBub3RoaW5nCi0gICAgc3BlY2lhbCwgdGhleSBzaG91bGQgYmUgZWFzaWVyIHRvIGNvZGUgdGhhbiB0byBwcm92aWRlIHlvdXIgb3duIHNjaGVkdWxlcgotICAgIGFjdGl2YXRpb24gZnVuY3Rpb25zIGFuZCBkb2luZyBjb21wbGV4IGNhcHMgbmVnb3RpYXRpb24uIEZvciB0aGlzIHB1cnBvc2UsCi0gICAgJkdTdHJlYW1lcjsgcHJvdmlkZXMgYmFzZSBjbGFzc2VzIHRoYXQgc2ltcGxpZnkgc29tZSB0eXBlcyBvZiBlbGVtZW50cy4KLSAgICBUaG9zZSBiYXNlIGNsYXNzZXMgd2lsbCBiZSBkaXNjdXNzZWQgaW4gdGhpcyBjaGFwdGVyLgotICA8L3BhcmE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLWJhc2Utc2luayIgeHJlZmxhYmVsPSJXcml0aW5nIGEgc2luayI+Ci0gICAgPHRpdGxlPldyaXRpbmcgYSBzaW5rPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFNpbmtzIGFyZSBzcGVjaWFsIGVsZW1lbnRzIGluICZHU3RyZWFtZXI7LiBUaGlzIGlzIGJlY2F1c2Ugc2luayBlbGVtZW50cwotICAgICAgaGF2ZSB0byB0YWtlIGNhcmUgb2YgPGVtcGhhc2lzPnByZXJvbGw8L2VtcGhhc2lzPiwgd2hpY2ggaXMgdGhlIHByb2Nlc3MKLSAgICAgIHRoYXQgdGFrZXMgY2FyZSB0aGF0IGVsZW1lbnRzIGdvaW5nIGludG8gdGhlCi0gICAgICA8Y2xhc3NuYW1lPkdTVF9TVEFURV9QQVVTRUQ8L2NsYXNzbmFtZT4gc3RhdGUgd2lsbCBoYXZlIGJ1ZmZlcnMgcmVhZHkKLSAgICAgIGFmdGVyIHRoZSBzdGF0ZSBjaGFuZ2UuIFRoZSByZXN1bHQgb2YgdGhpcyBpcyB0aGF0IHN1Y2ggZWxlbWVudHMgY2FuCi0gICAgICBzdGFydCBwcm9jZXNzaW5nIGRhdGEgaW1tZWRpYXRlbHkgYWZ0ZXIgZ29pbmcgaW50byB0aGUKLSAgICAgIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BMQVlJTkc8L2NsYXNzbmFtZT4gc3RhdGUsIHdpdGhvdXQgcmVxdWlyaW5nIHRvCi0gICAgICB0YWtlIHNvbWUgdGltZSB0byBpbml0aWFsaXplIG91dHB1dHMgb3Igc2V0IHVwIGRlY29kZXJzOyBhbGwgdGhhdCBpcyBkb25lCi0gICAgICBhbHJlYWR5IGJlZm9yZSB0aGUgc3RhdGUtY2hhbmdlIHRvIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BBVVNFRDwvY2xhc3NuYW1lPgotICAgICAgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBQcmVyb2xsLCBob3dldmVyLCBpcyBhIGNvbXBsZXggcHJvY2VzcyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlIHNhbWUKLSAgICAgIGNvZGUgaW4gbWFueSBlbGVtZW50cy4gVGhlcmVmb3JlLCBzaW5rIGVsZW1lbnRzIGNhbiBkZXJpdmUgZnJvbSB0aGUKLSAgICAgIDxjbGFzc25hbWU+R3N0QmFzZVNpbms8L2NsYXNzbmFtZT4gYmFzZS1jbGFzcywgd2hpY2ggZG9lcyBwcmVyb2xsIGFuZAotICAgICAgYSBmZXcgb3RoZXIgdXRpbGl0eSBmdW5jdGlvbnMgYXV0b21hdGljYWxseS4gVGhlIGRlcml2ZWQgY2xhc3Mgb25seQotICAgICAgbmVlZHMgdG8gaW1wbGVtZW50IGEgYnVuY2ggb2YgdmlydHVhbCBmdW5jdGlvbnMgYW5kIHdpbGwgd29yawotICAgICAgYXV0b21hdGljYWxseS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgYmFzZSBjbGFzcyBpbXBsZW1lbnQgbXVjaCBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIHRoYXQgYQotICAgICAgc2luayBoYXMgdG8gcGVyZm9ybS4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGUgPGNsYXNzbmFtZT5Hc3RCYXNlU2luazwvY2xhc3NuYW1lPiBiYXNlLWNsYXNzIHNwZWNpZmllcyBzb21lCi0gICAgICBsaW1pdGF0aW9ucyBvbiBlbGVtZW50cywgdGhvdWdoOgotICAgIDwvcGFyYT4KLSAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJdCByZXF1aXJlcyB0aGF0IHRoZSBzaW5rIG9ubHkgaGFzIG9uZSBzaW5rcGFkLiBTaW5rIGVsZW1lbnRzIHRoYXQKLSAgICAgICAgICBuZWVkIG1vcmUgdGhhbiBvbmUgc2lua3BhZCwgbXVzdCBtYWtlIGEgbWFuYWdlciBlbGVtZW50IHdpdGgKLSAgICAgICAgICBtdWx0aXBsZSBHc3RCYXNlU2luayBlbGVtZW50cyBpbnNpZGUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBTaW5rIGVsZW1lbnRzIGNhbiBkZXJpdmUgZnJvbSA8Y2xhc3NuYW1lPkdzdEJhc2VTaW5rPC9jbGFzc25hbWU+IHVzaW5nCi0gICAgICB0aGUgdXN1YWwgPGNsYXNzbmFtZT5HT2JqZWN0PC9jbGFzc25hbWU+IGNvbnZlbmllbmNlIG1hY3JvCi0gICAgICA8ZnVuY3Rpb24+R19ERUZJTkVfVFlQRSAoKTwvZnVuY3Rpb24+OgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1HX0RFRklORV9UWVBFIChHc3RNeVNpbmssIGdzdF9teV9zaW5rLCBHU1RfVFlQRV9CQVNFX1NJTkspOwotCi1bLi5dCi0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfc2lua19jbGFzc19pbml0IChHc3RNeVNpbmtDbGFzcyAqIGtsYXNzKQotewotICBrbGFzcy0+c2V0X2NhcHMgPSBbLi5dOwotICBrbGFzcy0+cmVuZGVyID0gWy4uXTsKLVsuLl0KLX0KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgVGhlIGFkdmFudGFnZXMgb2YgZGVyaXZpbmcgZnJvbSA8Y2xhc3NuYW1lPkdzdEJhc2VTaW5rPC9jbGFzc25hbWU+IGFyZQotICAgICAgbnVtZXJvdXM6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIERlcml2ZWQgaW1wbGVtZW50YXRpb25zIGJhcmVseSBuZWVkIHRvIGJlIGF3YXJlIG9mIHByZXJvbGwsIGFuZCBkbwotICAgICAgICAgIG5vdCBuZWVkIHRvIGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIHRlY2huaWNhbCBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgIHJlcXVpcmVtZW50cyBvZiBwcmVyb2xsLiBUaGUgYmFzZS1jbGFzcyBkb2VzIGFsbCB0aGUgaGFyZCB3b3JrLgotICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIExlc3MgY29kZSB0byB3cml0ZSBpbiB0aGUgZGVyaXZlZCBjbGFzcywgc2hhcmVkIGNvZGUgKGFuZCB0aHVzCi0gICAgICAgICAgc2hhcmVkIGJ1Z2ZpeGVzKS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8cGFyYT4KLSAgICAgIFRoZXJlIGFyZSBhbHNvIHNwZWNpYWxpemVkIGJhc2UgY2xhc3NlcyBmb3IgYXVkaW8gYW5kIHZpZGVvLCBsZXQncyBsb29rCi0gICAgICBhdCB0aG9zZSBhIGJpdC4KLSAgICA8L3BhcmE+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tYmFzZS1hdWRpb3NpbmsiIHhyZWZsYWJlbD0iV3JpdGluZyBhbiBhdWRpbyBzaW5rIj4KLSAgICAgIDx0aXRsZT5Xcml0aW5nIGFuIGF1ZGlvIHNpbms8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEVzc2VudGlhbGx5LCBhdWRpbyBzaW5rIGltcGxlbWVudGF0aW9ucyBhcmUganVzdCBhIHNwZWNpYWwgY2FzZSBvZiBhCi0gICAgICAgIGdlbmVyYWwgc2luay4gQW4gYXVkaW8gc2luayBoYXMgdGhlIGFkZGVkIGNvbXBsZXhpdHkgdGhhdCBpdCBuZWVkcyB0bwotICAgICAgICBzY2hlZHVsZSBwbGF5YmFjayBvZiBzYW1wbGVzLiBJdCBtdXN0IG1hdGNoIHRoZSBjbG9jayBzZWxlY3RlZCBpbiB0aGUKLSAgICAgICAgcGlwZWxpbmUgYWdhaW5zdCB0aGUgY2xvY2sgb2YgdGhlIGF1ZGlvIGRldmljZSBhbmQgY2FsY3VsYXRlIGFuZAotICAgICAgICBjb21wZW5zYXRlIGZvciBkcmlmdCBhbmQgaml0dGVyLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSB0d28gYXVkaW8gYmFzZSBjbGFzc2VzIHRoYXQgeW91IGNhbiBjaG9vc2UgdG8KLSAgICAgICAgZGVyaXZlIGZyb20sIGRlcGVuZGluZyBvbiB5b3VyIG5lZWRzOgotICAgICAgICA8Y2xhc3NuYW1lPkdzdEF1ZGlvQmFzZXNpbms8L2NsYXNzbmFtZT4gYW5kCi0gICAgICAgIDxjbGFzc25hbWU+R3N0QXVkaW9TaW5rPC9jbGFzc25hbWU+LiBUaGUgYXVkaW9iYXNlc2luayBwcm92aWRlcyBmdWxsCi0gICAgICAgIGNvbnRyb2wgb3ZlciBob3cgc3luY2hyb25pemF0aW9uIGFuZCBzY2hlZHVsaW5nIGlzIGhhbmRsZWQsIGJ5IHVzaW5nCi0gICAgICAgIGEgcmluZ2J1ZmZlciB0aGF0IHRoZSBkZXJpdmVkIGNsYXNzIGNvbnRyb2xzIGFuZCBwcm92aWRlcy4gVGhlCi0gICAgICAgIGF1ZGlvc2luayBiYXNlLWNsYXNzIGlzIGEgZGVyaXZlZCBjbGFzcyBvZiB0aGUgYXVkaW9iYXNlc2luaywKLSAgICAgICAgaW1wbGVtZW50aW5nIGEgc3RhbmRhcmQgcmluZ2J1ZmZlciBpbXBsZW1lbnRpbmcgZGVmYXVsdAotICAgICAgICBzeW5jaHJvbml6YXRpb24gYW5kIHByb3ZpZGluZyBhIHN0YW5kYXJkIGF1ZGlvLXNhbXBsZSBjbG9jay4gRGVyaXZlZAotICAgICAgICBjbGFzc2VzIG9mIHRoaXMgYmFzZSBjbGFzcyBtZXJlbHkgbmVlZCB0byBwcm92aWRlIGEgPGZ1bmN0aW9uPl9vcGVuCi0gICAgICAgICgpPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5fY2xvc2UgKCk8L2Z1bmN0aW9uPiBhbmQgYSA8ZnVuY3Rpb24+X3dyaXRlCi0gICAgICAgICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaW1wbGVtZW50YXRpb24sIGFuZCBzb21lIG9wdGlvbmFsIGZ1bmN0aW9ucy4KLSAgICAgICAgVGhpcyBzaG91bGQgc3VmZmljZSBmb3IgbWFueSBzb3VuZC1zZXJ2ZXIgb3V0cHV0IGVsZW1lbnRzIGFuZCBldmVuCi0gICAgICAgIG1vc3QgaW50ZXJmYWNlcy4gTW9yZSBkZW1hbmRpbmcgYXVkaW8gc3lzdGVtcywgc3VjaCBhcyBKYWNrLCB3b3VsZAotICAgICAgICB3YW50IHRvIGltcGxlbWVudCB0aGUgPGNsYXNzbmFtZT5Hc3RBdWRpb0Jhc2VTaW5rPC9jbGFzc25hbWU+Ci0gICAgICAgIGJhc2UtY2xhc3MuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxjbGFzc25hbWU+R3N0QXVkaW9CYXNlU2luazwvY2xhc3NuYW1lPiBoYXMgbGl0dGxlIHRvIG5vCi0gICAgICAgIGxpbWl0YXRpb25zIGFuZCBzaG91bGQgZml0IHZpcnR1YWxseSBldmVyeSBpbXBsZW1lbnRhdGlvbiwgYnV0IGlzCi0gICAgICAgIGhhcmQgdG8gaW1wbGVtZW50LiBUaGUgPGNsYXNzbmFtZT5Hc3RBdWRpb1Npbms8L2NsYXNzbmFtZT4sIG9uIHRoZQotICAgICAgICBvdGhlciBoYW5kLCBvbmx5IGZpdHMgdGhvc2Ugc3lzdGVtcyB3aXRoIGEgc2ltcGxlIDxmdW5jdGlvbj5vcGVuCi0gICAgICAgICgpPC9mdW5jdGlvbj4gLyA8ZnVuY3Rpb24+Y2xvc2UgKCk8L2Z1bmN0aW9uPiAvIDxmdW5jdGlvbj53cml0ZQotICAgICAgICAoKTwvZnVuY3Rpb24+IEFQSSAod2hpY2ggcHJhY3RpY2FsbHkgbWVhbnMgcHJldHR5IG11Y2ggYWxsIG9mIHRoZW0pLAotICAgICAgICBidXQgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCBpdCBpcyBhIGxvdCBlYXNpZXIgdG8gaW1wbGVtZW50LiBUaGUKLSAgICAgICAgYmVuZWZpdHMgb2YgdGhpcyBzZWNvbmQgYmFzZSBjbGFzcyBhcmUgbGFyZ2U6Ci0gICAgICA8L3BhcmE+Ci0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBBdXRvbWF0aWMgc3luY2hyb25pemF0aW9uLCB3aXRob3V0IGFueSBjb2RlIGluIHRoZSBkZXJpdmVkIGNsYXNzLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQWxzbyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVzIGEgY2xvY2ssIHNvIHRoYXQgb3RoZXIgc2lua3MgKGUuZy4gaW4KLSAgICAgICAgICAgIGNhc2Ugb2YgYXVkaW8vdmlkZW8gcGxheWJhY2spIGFyZSBzeW5jaHJvbml6ZWQuCi0gICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBGZWF0dXJlcyBjYW4gYmUgYWRkZWQgdG8gYWxsIGF1ZGlvc2lua3MgYnkgbWFraW5nIGEgY2hhbmdlIGluIHRoZQotICAgICAgICAgICAgYmFzZSBjbGFzcywgd2hpY2ggbWFrZXMgbWFpbnRlbmFuY2UgZWFzeS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIERlcml2ZWQgY2xhc3NlcyByZXF1aXJlIG9ubHkgdGhyZWUgc21hbGwgZnVuY3Rpb25zLCBwbHVzIHNvbWUKLSAgICAgICAgICAgIDxjbGFzc25hbWU+R09iamVjdDwvY2xhc3NuYW1lPiBib2lsZXJwbGF0ZSBjb2RlLgotICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIGFkZGl0aW9uIHRvIGltcGxlbWVudGluZyB0aGUgYXVkaW8gYmFzZS1jbGFzcyB2aXJ0dWFsIGZ1bmN0aW9ucywKLSAgICAgICAgZGVyaXZlZCBjbGFzc2VzIGNhbiAoc2hvdWxkKSBhbHNvIGltcGxlbWVudCB0aGUKLSAgICAgICAgPGNsYXNzbmFtZT5Hc3RCYXNlU2luazwvY2xhc3NuYW1lPiA8ZnVuY3Rpb24+c2V0X2NhcHMgKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgICAgPGZ1bmN0aW9uPmdldF9jYXBzICgpPC9mdW5jdGlvbj4gdmlydHVhbCBmdW5jdGlvbnMgZm9yIG5lZ290aWF0aW9uLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDI+Ci0KLSAgICA8c2VjdDIgaWQ9InNlY3Rpb24tYmFzZS12aWRlb3NpbmsiIHhyZWZsYWJlbD0iV3JpdGluZyBhIGdlbmVyYWwgc2luayI+Ci0gICAgICA8dGl0bGU+V3JpdGluZyBhIHZpZGVvIHNpbms8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFdyaXRpbmcgYSB2aWRlb3NpbmsgY2FuIGJlIGRvbmUgdXNpbmcgdGhlCi0gICAgICAgIDxjbGFzc25hbWU+R3N0VmlkZW9TaW5rPC9jbGFzc25hbWU+IGJhc2UtY2xhc3MsIHdoaWNoIGRlcml2ZXMgZnJvbQotICAgICAgICA8Y2xhc3NuYW1lPkdzdEJhc2VTaW5rPC9jbGFzc25hbWU+IGludGVybmFsbHkuIEN1cnJlbnRseSwgaXQgZG9lcwotICAgICAgICBub3RoaW5nIHlldCBidXQgYWRkIGFub3RoZXIgY29tcGlsZSBkZXBlbmRlbmN5LCBzbyBkZXJpdmVkIGNsYXNzZXMKLSAgICAgICAgd2lsbCBuZWVkIHRvIGltcGxlbWVudCBhbGwgYmFzZS1zaW5rIHZpcnR1YWwgZnVuY3Rpb25zLiBXaGVuIHRoZXkgZG8KLSAgICAgICAgdGhpcyBjb3JyZWN0bHksIHRoaXMgd2lsbCBoYXZlIHNvbWUgcG9zaXRpdmUgZWZmZWN0cyBvbiB0aGUgZW5kIHVzZXIKLSAgICAgICAgZXhwZXJpZW5jZSB3aXRoIHRoZSB2aWRlb3Npbms6Ci0gICAgICA8L3BhcmE+Ci0gICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBCZWNhdXNlIG9mIHByZXJvbGwgKGFuZCB0aGUgPGZ1bmN0aW9uPnByZXJvbGwgKCk8L2Z1bmN0aW9uPiB2aXJ0dWFsCi0gICAgICAgICAgICBmdW5jdGlvbiksIGl0IGlzIHBvc3NpYmxlIHRvIGRpc3BsYXkgYSB2aWRlbyBmcmFtZSBhbHJlYWR5IHdoZW4KLSAgICAgICAgICAgIGdvaW5nIGludG8gdGhlIDxjbGFzc25hbWU+R1NUX1NUQVRFX1BBVVNFRDwvY2xhc3NuYW1lPiBzdGF0ZS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIEJ5IGFkZGluZyBuZXcgZmVhdHVyZXMgdG8gPGNsYXNzbmFtZT5Hc3RWaWRlb1Npbms8L2NsYXNzbmFtZT4sIGl0Ci0gICAgICAgICAgICB3aWxsIGJlIHBvc3NpYmxlIHRvIGFkZCBleHRlbnNpb25zIHRvIHZpZGVvc2lua3MgdGhhdCBhZmZlY3QgYWxsIG9mCi0gICAgICAgICAgICB0aGVtLCBidXQgb25seSBuZWVkIHRvIGJlIGNvZGVkIG9uY2UsIHdoaWNoIGlzIGEgaHVnZSBtYWludGVuYW5jZQotICAgICAgICAgICAgYmVuZWZpdC4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1iYXNlLXNyYyIgeHJlZmxhYmVsPSJXcml0aW5nIGEgc291cmNlIj4KLSAgICA8dGl0bGU+V3JpdGluZyBhIHNvdXJjZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBJbiB0aGUgcHJldmlvdXMgcGFydCwgcGFydGljdWxhcmx5IDx4cmVmCi0gICAgICBsaW5rZW5kPSJzZWN0aW9uLXNjaGVkdWxpbmctcmFuZG9teHMiLz4sIHdlIGhhdmUgbGVhcm5lZCB0aGF0IHNvbWUgdHlwZXMKLSAgICAgIG9mIGVsZW1lbnRzIGNhbiBwcm92aWRlIHJhbmRvbSBhY2Nlc3MuIFRoaXMgYXBwbGllcyBtb3N0IGRlZmluaXRlbHkgdG8KLSAgICAgIHNvdXJjZSBlbGVtZW50cyByZWFkaW5nIGZyb20gYSByYW5kb21seSBzZWVrYWJsZSBsb2NhdGlvbiwgc3VjaCBhcyBmaWxlCi0gICAgICBzb3VyY2VzLiBIb3dldmVyLCBvdGhlciBzb3VyY2UgZWxlbWVudHMgbWF5IGJlIGJldHRlciBkZXNjcmliZWQgYXMgYQotICAgICAgbGl2ZSBzb3VyY2UgZWxlbWVudCwgc3VjaCBhcyBhIGNhbWVyYSBzb3VyY2UsIGFuIGF1ZGlvIGNhcmQgc291cmNlIGFuZAotICAgICAgc3VjaDsgdGhvc2UgYXJlIG5vdCBzZWVrYWJsZSBhbmQgZG8gbm90IHByb3ZpZGUgYnl0ZS1leGFjdCBhY2Nlc3MuIEZvcgotICAgICAgYWxsIHN1Y2ggdXNlIGNhc2VzLCAmR1N0cmVhbWVyOyBwcm92aWRlcyB0d28gYmFzZSBjbGFzc2VzOgotICAgICAgPGNsYXNzbmFtZT5Hc3RCYXNlU3JjPC9jbGFzc25hbWU+IGZvciB0aGUgYmFzaWMgc291cmNlIGZ1bmN0aW9uYWxpdHksIGFuZAotICAgICAgPGNsYXNzbmFtZT5Hc3RQdXNoU3JjPC9jbGFzc25hbWU+LCB3aGljaCBpcyBhIG5vbi1ieXRlIGV4YWN0IHNvdXJjZQotICAgICAgYmFzZS1jbGFzcy4gVGhlIHB1c2hzb3VyY2UgYmFzZSBjbGFzcyBpdHNlbGYgZGVyaXZlcyBmcm9tIGJhc2Vzb3VyY2UgYXMKLSAgICAgIHdlbGwsIGFuZCB0aHVzIGFsbCBzdGF0ZW1lbnRzIGFib3V0IHRoZSBiYXNlc291cmNlIGFwcGx5IHRvIHRoZQotICAgICAgcHVzaHNvdXJjZSwgdG9vLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBiYXNlc3JjIGNsYXNzIGRvZXMgc2V2ZXJhbCB0aGluZ3MgYXV0b21hdGljYWxseSBmb3IgZGVyaXZlZCBjbGFzc2VzLAotICAgICAgc28gdGhleSBubyBsb25nZXIgaGF2ZSB0byB3b3JyeSBhYm91dCBpdDoKLSAgICA8L3BhcmE+Ci0gICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgRml4ZXMgdG8gPGNsYXNzbmFtZT5Hc3RCYXNlU3JjPC9jbGFzc25hbWU+IGFwcGx5IHRvIGFsbCBkZXJpdmVkCi0gICAgICAgICAgY2xhc3NlcyBhdXRvbWF0aWNhbGx5LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBdXRvbWF0aWMgcGFkIGFjdGl2YXRpb24gaGFuZGxpbmcsIGFuZCB0YXNrLXdyYXBwaW5nIGluIGNhc2Ugd2UgZ2V0Ci0gICAgICAgICAgYXNzaWduZWQgdG8gc3RhcnQgYSB0YXNrIG91cnNlbHZlcy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9saXN0aXRlbT4KLSAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSA8Y2xhc3NuYW1lPkdzdEJhc2VTcmM8L2NsYXNzbmFtZT4gbWF5IG5vdCBiZSBzdWl0YWJsZSBmb3IgYWxsIGNhc2VzLAotICAgICAgdGhvdWdoOyBpdCBoYXMgbGltaXRhdGlvbnM6Ci0gICAgPC9wYXJhPgotICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZXJlIGlzIG9uZSBhbmQgb25seSBvbmUgc291cmNlcGFkLiBTb3VyY2UgZWxlbWVudHMgcmVxdWlyaW5nCi0gICAgICAgICAgbXVsdGlwbGUgc291cmNlcGFkcyBtdXN0IGltcGxlbWVudCBhIG1hbmFnZXIgYmluIGFuZCB1c2UgbXVsdGlwbGUKLSAgICAgICAgICBzb3VyY2UgZWxlbWVudHMgaW50ZXJuYWxseSBvciBtYWtlIGEgbWFuYWdlciBlbGVtZW50IHRoYXQgdXNlcwotICAgICAgICAgIGEgc291cmNlIGVsZW1lbnQgYW5kIGEgZGVtdXhlciBpbnNpZGUuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgPC9pdGVtaXplZGxpc3Q+Ci0gICAgPHBhcmE+Ci0gICAgICBJdCBpcyBwb3NzaWJsZSB0byB1c2Ugc3BlY2lhbCBtZW1vcnksIHN1Y2ggYXMgWCBzZXJ2ZXIgbWVtb3J5IHBvaW50ZXJzCi0gICAgICBvciA8ZnVuY3Rpb24+bW1hcCAoKTwvZnVuY3Rpb24+J2VkIG1lbW9yeSBhcmVhcywgYXMgZGF0YSBwb2ludGVycyBpbgotICAgICAgYnVmZmVycyByZXR1cm5lZCBmcm9tIHRoZSA8ZnVuY3Rpb24+Y3JlYXRlKCk8L2Z1bmN0aW9uPiB2aXJ0dWFsIGZ1bmN0aW9uLgotICAgIDwvcGFyYT4KLQotICAgIDxzZWN0MiBpZD0ic2VjdGlvbi1iYXNlLWF1ZGlvc3JjIiB4cmVmbGFiZWw9IldyaXRpbmcgYW4gYXVkaW8gc291cmNlIj4KLSAgICAgIDx0aXRsZT5Xcml0aW5nIGFuIGF1ZGlvIHNvdXJjZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQW4gYXVkaW8gc291cmNlIGlzIG5vdGhpbmcgbW9yZSBidXQgYSBzcGVjaWFsIGNhc2Ugb2YgYSBwdXNoc291cmNlLgotICAgICAgICBBdWRpbyBzb3VyY2VzIHdvdWxkIGJlIGFueXRoaW5nIHRoYXQgcmVhZHMgYXVkaW8sIHN1Y2ggYXMgYSBzb3VyY2UKLSAgICAgICAgcmVhZGluZyBmcm9tIGEgc291bmRzZXJ2ZXIsIGEga2VybmVsIGludGVyZmFjZSAoc3VjaCBhcyBBTFNBKSBvciBhCi0gICAgICAgIHRlc3Qgc291bmQgLyBzaWduYWwgZ2VuZXJhdG9yLiAmR1N0cmVhbWVyOyBwcm92aWRlcyB0d28gYmFzZSBjbGFzc2VzLAotICAgICAgICBzaW1pbGFyIHRvIHRoZSB0d28gYXVkaW9zaW5rcyBkZXNjcmliZWQgaW4gPHhyZWYKLSAgICAgICAgbGlua2VuZD0ic2VjdGlvbi1iYXNlLWF1ZGlvc2luayIvPjsgb25lIGlzIHJpbmdidWZmZXItYmFzZWQsIGFuZAotICAgICAgICByZXF1aXJlcyB0aGUgZGVyaXZlZCBjbGFzcyB0byB0YWtlIGNhcmUgb2YgaXRzIG93biBzY2hlZHVsaW5nLAotICAgICAgICBzeW5jaHJvbml6YXRpb24gYW5kIHN1Y2guIFRoZSBvdGhlciBpcyBiYXNlZCBvbiB0aGlzCi0gICAgICAgIDxjbGFzc25hbWU+R3N0QXVkaW9CYXNlU3JjPC9jbGFzc25hbWU+IGFuZCBpcyBjYWxsZWQKLSAgICAgICAgPGNsYXNzbmFtZT5Hc3RBdWRpb1NyYzwvY2xhc3NuYW1lPiwgYW5kIHByb3ZpZGVzIGEgc2ltcGxlCi0gICAgICAgIDxmdW5jdGlvbj5vcGVuICgpPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5jbG9zZSAoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgICA8ZnVuY3Rpb24+cmVhZCAoKTwvZnVuY3Rpb24+IGludGVyZmFjZSwgd2hpY2ggaXMgcmF0aGVyIHNpbXBsZSB0bwotICAgICAgICBpbXBsZW1lbnQgYW5kIHdpbGwgc3VmZmljZSBmb3IgbW9zdCBzb3VuZHNlcnZlciBzb3VyY2VzIGFuZCBhdWRpbwotICAgICAgICBpbnRlcmZhY2VzIChlLmcuIEFMU0Egb3IgT1NTKSBvdXQgdGhlcmUuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxjbGFzc25hbWU+R3N0QXVkaW9TcmM8L2NsYXNzbmFtZT4gYmFzZS1jbGFzcyBoYXMgc2V2ZXJhbCBiZW5lZml0cwotICAgICAgICBmb3IgZGVyaXZlZCBjbGFzc2VzLCBvbiB0b3Agb2YgdGhlIGJlbmVmaXRzIG9mIHRoZQotICAgICAgICA8Y2xhc3NuYW1lPkdzdFB1c2hTcmM8L2NsYXNzbmFtZT4gYmFzZS1jbGFzcyB0aGF0IGl0IGlzIGJhc2VkIG9uOgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgRG9lcyBzeW5jcm9uaXphdGlvbiBhbmQgcHJvdmlkZXMgYSBjbG9jay4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIE5ldyBmZWF0dXJlcyBjYW4gYmUgYWRkZWQgdG8gaXQgYW5kIHdpbGwgYXBwbHkgdG8gYWxsIGRlcml2ZWQKLSAgICAgICAgICAgIGNsYXNzZXMgYXV0b21hdGljYWxseS4KLSAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICA8L3NlY3QyPgotICA8L3NlY3QxPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1iYXNlLXRyYW5zZm9ybSIKLSAgICAgIHhyZWZsYWJlbD0iV3JpdGluZyBhIHRyYW5zZm9ybWF0aW9uIGVsZW1lbnQiPgotICAgIDx0aXRsZT5Xcml0aW5nIGEgdHJhbnNmb3JtYXRpb24gZWxlbWVudDwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBBIHRoaXJkIGJhc2UtY2xhc3MgdGhhdCAmR1N0cmVhbWVyOyBwcm92aWRlcyBpcyB0aGUKLSAgICAgIDxjbGFzc25hbWU+R3N0QmFzZVRyYW5zZm9ybTwvY2xhc3NuYW1lPi4gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yCi0gICAgICBlbGVtZW50cyB3aXRoIG9uZSBzb3VyY2VwYWQgYW5kIG9uZSBzaW5rcGFkIHdoaWNoIGFjdCBhcyBhIGZpbHRlcgotICAgICAgb2Ygc29tZSBzb3J0LCBzdWNoIGFzIHZvbHVtZSBjaGFuZ2luZywgYXVkaW8gcmVzYW1wbGluZywgYXVkaW8gZm9ybWF0Ci0gICAgICBjb252ZXJzaW9uLCBhbmQgc28gb24gYW5kIHNvIG9uLiBUaGVyZSBpcyBxdWl0ZSBhIGxvdCBvZiBib29ra2VlcGluZwotICAgICAgdGhhdCBzdWNoIGVsZW1lbnRzIG5lZWQgdG8gZG8gaW4gb3JkZXIgZm9yIHRoaW5ncyBzdWNoIGFzIGJ1ZmZlcgotICAgICAgYWxsb2NhdGlvbiBmb3J3YXJkaW5nLCBwYXNzdGhyb3VnaCwgaW4tcGxhY2UgcHJvY2Vzc2luZyBhbmQgc3VjaCB0byBhbGwKLSAgICAgIHdvcmsgY29ycmVjdGx5LiBUaGlzIGJhc2UgY2xhc3MgZG9lcyBhbGwgdGhhdCBmb3IgeW91LCBzbyB0aGF0IHlvdSBqdXN0Ci0gICAgICBuZWVkIHRvIGRvIHRoZSBhY3R1YWwgcHJvY2Vzc2luZy4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBTaW5jZSB0aGUgPGNsYXNzbmFtZT5Hc3RCYXNlVHJhbnNmb3JtPC9jbGFzc25hbWU+IGlzIGJhc2VkIG9uIHRoZSAxLXRvLTEKLSAgICAgIG1vZGVsIGZvciBmaWx0ZXJzLCBpdCBtYXkgbm90IGFwcGx5IHdlbGwgdG8gZWxlbWVudHMgc3VjaCBhcyBkZWNvZGVycywKLSAgICAgIHdoaWNoIG1heSBoYXZlIHRvIHBhcnNlIHByb3BlcnRpZXMgZnJvbSB0aGUgc3RyZWFtLiBBbHNvLCBpdCB3aWxsIG5vdAotICAgICAgd29yayBmb3IgZWxlbWVudHMgcmVxdWlyaW5nIG1vcmUgdGhhbiBvbmUgc291cmNlcGFkIG9yIHNpbmtwYWQuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvb3RoZXItbWFuYWdlci54bWwgYi9kb2NzL3B3Zy9vdGhlci1tYW5hZ2VyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMzODExNC4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9vdGhlci1tYW5hZ2VyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTxjaGFwdGVyIGlkPSJjaGFwdGVyLW90aGVyLW1hbmFnZXIiIHhyZWZsYWJlbD0iV3JpdGluZyBhIE1hbmFnZXIiPgotICA8dGl0bGU+V3JpdGluZyBhIE1hbmFnZXI8L3RpdGxlPgotICA8cGFyYT4KLSAgICBNYW5hZ2VycyBhcmUgZWxlbWVudHMgdGhhdCBhZGQgYSBmdW5jdGlvbiBvciB1bmlmeSB0aGUgZnVuY3Rpb24gb2YKLSAgICBhbm90aGVyIChzZXJpZXMgb2YpIGVsZW1lbnQocykuIE1hbmFnZXJzIGFyZSBnZW5lcmFsbHkgYQotICAgIDxjbGFzc25hbWU+R3N0QmluPC9jbGFzc25hbWU+IHdpdGggb25lIG9yIG1vcmUgZ2hvc3RwYWRzLiBJbnNpZGUgdGhlbQotICAgIGlzL2FyZSB0aGUgYWN0dWFsIGVsZW1lbnQocykgdGhhdCBtYXR0ZXJzLiBUaGVyZSBpcyBzZXZlcmFsIGNhc2VzIHdoZXJlCi0gICAgdGhpcyBpcyB1c2VmdWwuIEZvciBleGFtcGxlOgotICA8L3BhcmE+Ci0gIDxpdGVtaXplZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRvIGFkZCBzdXBwb3J0IGZvciBwcml2YXRlIGV2ZW50cyB3aXRoIGN1c3RvbSBldmVudCBoYW5kbGluZyB0bwotICAgICAgICBhbm90aGVyIGVsZW1lbnQuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVG8gYWRkIHN1cHBvcnQgZm9yIGN1c3RvbSBwYWQgPGZ1bmN0aW9uPl9xdWVyeSAoKTwvZnVuY3Rpb24+Ci0gICAgICAgIG9yIDxmdW5jdGlvbj5fY29udmVydCAoKTwvZnVuY3Rpb24+IGhhbmRsaW5nIHRvIGFub3RoZXIgZWxlbWVudC4KLSAgICAgIDwvcGFyYT4KLSAgICA8L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUbyBhZGQgY3VzdG9tIGRhdGEgaGFuZGxpbmcgYmVmb3JlIG9yIGFmdGVyIGFub3RoZXIgZWxlbWVudCdzIGRhdGEKLSAgICAgICAgaGFuZGxlciBmdW5jdGlvbiAoZ2VuZXJhbGx5IGl0cyA8ZnVuY3Rpb24+X2NoYWluICgpPC9mdW5jdGlvbj4KLSAgICAgICAgZnVuY3Rpb24pLgotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRvIGVtYmVkIGFuIGVsZW1lbnQsIG9yIGEgc2VyaWVzIG9mIGVsZW1lbnRzLCBpbnRvIHNvbWV0aGluZyB0aGF0Ci0gICAgICAgIGxvb2tzIGFuZCB3b3JrcyBsaWtlIGEgc2ltcGxlIGVsZW1lbnQgdG8gdGhlIG91dHNpZGUgd29ybGQuIFRoaXMKLSAgICAgICAgaXMgcGFydGljdWxhciBoYW5keSBmb3IgaW1wbGVtZW50aW5nIHNvdXJjZXMgYW5kIHNpbmsgZWxlbWVudHMgd2l0aAotICAgICAgICBtdWx0aXBsZSBwYWRzLgotICAgICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+Ci0gIDwvaXRlbWl6ZWRsaXN0PgotICA8cGFyYT4KLSAgICBNYWtpbmcgYSBtYW5hZ2VyIGlzIGFib3V0IGFzIHNpbXBsZSBhcyBpdCBnZXRzLiBZb3UgY2FuIGRlcml2ZSBmcm9tIGEKLSAgICA8Y2xhc3NuYW1lPkdzdEJpbjwvY2xhc3NuYW1lPiwgYW5kIGluIG1vc3QgY2FzZXMsIHlvdSBjYW4gZW1iZWQgdGhlCi0gICAgcmVxdWlyZWQgZWxlbWVudHMgaW4gdGhlIDxmdW5jdGlvbj5faW5pdCAoKTwvZnVuY3Rpb24+IGFscmVhZHksIGluY2x1ZGluZwotICAgIHNldHVwIG9mIGdob3N0cGFkcy4gSWYgeW91IG5lZWQgYW55IGN1c3RvbSBkYXRhIGhhbmRsZXJzLCB5b3UgY2FuIGNvbm5lY3QKLSAgICBzaWduYWxzIG9yIGVtYmVkIGEgc2Vjb25kIGVsZW1lbnQgd2hpY2ggeW91IGNvbnRyb2wuCi0gIDwvcGFyYT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL290aGVyLW50b29uZS54bWwgYi9kb2NzL3B3Zy9vdGhlci1udG9vbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWZjZmY2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcHdnL290aGVyLW50b29uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItb3RoZXItbnRvb25lIgotICAgIHhyZWZsYWJlbD0iV3JpdGluZyBhIE4tdG8tMSBFbGVtZW50IG9yIE11eGVyIj4KLSAgPHRpdGxlPldyaXRpbmcgYSBOLXRvLTEgRWxlbWVudCBvciBNdXhlcjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgIE4tdG8tMSBlbGVtZW50cyBoYXZlIGJlZW4gcHJldmlvdXNseSBtZW50aW9uZWQgYW5kIGRpc2N1c3NlZCBpbiBib3RoCi0gICAgPHhyZWYgbGlua2VuZD0iY2hhcHRlci1hZHZhbmNlZC1yZXF1ZXN0Ii8+IGFuZCBpbgotICAgIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItc2NoZWR1bGluZyIvPi4gVGhlIG1haW4gbm90ZXdvcnRoeSB0aGluZwotICAgIGFib3V0IE4tdG8tMSBlbGVtZW50cyBpcyB0aGF0IGVhY2ggcGFkIGlzIHB1c2gtYmFzZWQgaW4gaXRzIG93biB0aHJlYWQsCi0gICAgYW5kIHRoZSBOLXRvLTEgZWxlbWVudCBzeW5jaHJvbml6ZXMgdGhvc2Ugc3RyZWFtcyBieQotICAgIGV4cGVjdGVkLXRpbWVzdGFtcC1iYXNlZCBsb2dpYy4gVGhpcyBtZWFucyBpdCBsZXRzIGFsbCBzdHJlYW1zIHdhaXQKLSAgICBleGNlcHQgZm9yIHRoZSBvbmUgdGhhdCBwcm92aWRlcyB0aGUgZWFybGllc3QgbmV4dC1leHBlY3RlZCB0aW1lc3RhbXAuCi0gICAgV2hlbiB0aGF0IHN0cmVhbSBoYXMgcGFzc2VkIG9uZSBidWZmZXIsIHRoZSBuZXh0Ci0gICAgZWFybGllc3QtZXhwZWN0ZWQtdGltZXN0YW1wIGlzIGNhbGN1bGF0ZWQsIGFuZCB3ZSBzdGFydCBiYWNrIHdoZXJlIHdlCi0gICAgd2VyZSwgdW50aWwgYWxsIHN0cmVhbXMgaGF2ZSByZWFjaGVkIEVPUy4gVGhlcmUgaXMgYSBoZWxwZXIgYmFzZSBjbGFzcywKLSAgICBjYWxsZWQgPGNsYXNzbmFtZT5Hc3RDb2xsZWN0UGFkczwvY2xhc3NuYW1lPiwgdGhhdCB3aWxsIGhlbHAgeW91IHRvIGRvCi0gICAgdGhpcy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICBOb3RlLCBob3dldmVyLCB0aGF0IHRoaXMgaGVscGVyIGNsYXNzIHdpbGwgb25seSBoZWxwIHlvdSB3aXRoIGdyYWJiaW5nCi0gICAgYSBidWZmZXIgZnJvbSBlYWNoIGlucHV0IGFuZCBnaXZpbmcgeW91IHRoZSBvbmUgd2l0aCBlYXJsaWVzdCB0aW1lc3RhbXAuCi0gICAgSWYgeW91IG5lZWQgYW55dGhpbmcgbW9yZSBkaWZmaWN1bHQsIHN1Y2ggYXMgImRvbid0LWdyYWItYS1uZXctYnVmZmVyCi0gICAgdW50aWwgYSBnaXZlbiB0aW1lc3RhbXAiIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQsIHlvdSdsbCBuZWVkIHRvIGRvIHRoaXMKLSAgICB5b3Vyc2VsZi4KLSAgPC9wYXJhPgotCi08IS0tCi0gIE5vdGU6IEknZCBsaWtlIHRvIGhhdmUgc29tZXRoaW5nIGxpa2UgdGhpcyBpbiB0aGUgZmluYWwgdGV4dCwgYnV0IHNpbmNlCi0gIHRoZSBjb2RlIGJlbG93IGRvZXNuJ3Qgd29yayBhbmQgdGhpcyBpcyBhbGwgMC44J3ksIEkgY29tbWVudGVkIGl0IGZvciBub3cuCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1tdXhlci1uZWdvdGlhdGlvbiIgeHJlZmxhYmVsPSJOZWdvdGlhdGlvbiI+Ci0gICAgPHRpdGxlPk5lZ290aWF0aW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIE1vc3QgY29udGFpbmVyIGZvcm1hdHMgd2lsbCBoYXZlIGEgZmFpciBhbW91bnQgb2YgaXNzdWVzIHdpdGgKLSAgICAgIGNoYW5naW5nIGNvbnRlbnQgb24gYW4gZWxlbWVudGFyeSBzdHJlYW0uIFRoZXJlZm9yZSwgeW91IHNob3VsZAotICAgICAgbm90IGFsbG93IGNhcHMgdG8gYmUgY2hhbmdlZCBvbmNlIHlvdSd2ZSBzdGFydGVkIHVzaW5nIGRhdGEgZnJvbQotICAgICAgdGhlbS4gVGhlIGVhc2llc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyBieSB1c2luZyBleHBsaWNpdCBjYXBzLAotICAgICAgd2hpY2ggaGF2ZSBiZWVuIGV4cGxhaW5lZCBiZWZvcmUuIEhvd2V2ZXIsIHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGVtCi0gICAgICBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXkgdGhlbiB3aGF0IHlvdSdyZSB1c2VkIHRvLCBoYXZpbmcgdGhlCi0gICAgICBjb3JlIGRvIGFsbCB0aGUgd29yayBmb3IgdXMuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGhlIGlkZWEgaXMgdGhhdCwgYXMgbG9uZyBhcyB0aGUgc3RyZWFtL2ZpbGUgaGVhZGVycyBoYXZlIG5vdCBiZWVuCi0gICAgICB3cml0dGVuIHlldCBhbmQgbm8gZGF0YSBoYXMgYmVlbiBwcm9jZXNzZWQgeWV0LCBhIHN0cmVhbSBpcyBhbGxvd2VkCi0gICAgICB0byByZW5lZ290aWF0ZS4gQWZ0ZXIgdGhhdCBwb2ludCwgdGhlIGNhcHMgc2hvdWxkIGJlIGZpeGVkLCBiZWNhdXNlCi0gICAgICB3ZSBjYW4gb25seSB1c2UgYSBzdHJlYW0gb25jZS4gQ2FwcyBtYXkgdGhlbiBvbmx5IGNoYW5nZSB3aXRoaW4gYW4KLSAgICAgIGFsbG93ZWQgcmFuZ2UgKHRoaW5rIE1QRUcsIHdoZXJlIGNoYW5nZXMgaW4gRlBTIGFyZSBhbGxvd2VkKSwgb3IKLSAgICAgIHNvbWV0aW1lcyBub3QgYXQgYWxsIChzdWNoIGFzIEFWSSBhdWRpbykuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHdlCi0gICAgICB3aWxsLCBhZnRlciBkYXRhIHJldHJpZXZhbCBhbmQgaGVhZGVyIHdyaXRpbmcsIHNldCBhbiBleHBsaWNpdCBjYXBzCi0gICAgICBvbiBlYWNoIHNpbmsgcGFkLCB0aGF0IGlzIHRoZSBtaW5pbWFsIGNhcHMgZGVzY3JpYmluZyB0aGUgcHJvcGVydGllcwotICAgICAgb2YgdGhlIGZvcm1hdCB0aGF0IG1heSBub3QgY2hhbmdlLiBBcyBhbiBleGFtcGxlLCBmb3IgTVBFRyBhdWRpbwotICAgICAgaW5zaWRlIGFuIE1QRUcgc3lzdGVtIHN0cmVhbSwgdGhpcyB3b3VsZCBtZWFuIGEgd2lkZSBjYXBzIG9mCi0gICAgICBhdWRpby9tcGVnIHdpdGggbXBlZ3ZlcnNpb249MSBhbmQgbGF5ZXI9WzEsMl0uIEZvciB0aGUgc2FtZSBhdWRpbyB0eXBlCi0gICAgICBpbiBNUEVHLCB0aG91Z2gsIHRoZSBzYW1wbGVyYXRlLCBiaXRyYXRlLCBsYXllciBhbmQgbnVtYmVyIG9mIGNoYW5uZWxzCi0gICAgICB3b3VsZCBiZWNvbWUgc3RhdGljLCB0b28uIFNpbmNlIHRoZSAocmVxdWVzdCkgcGFkcyB3aWxsIGJlIHJlbW92ZWQKLSAgICAgIHdoZW4gdGhlIHN0cmVhbSBlbmRzLCB0aGUgc3RhdGljIGNhcHMgd2lsbCBjZWFzZSB0byBleGlzdCB0b28sIHRoZW4uCi0gICAgICBXaGlsZSB0aGUgZXhwbGljaXQgY2FwcyAgZXhpc3QsIHRoZSA8ZnVuY3Rpb24+X2xpbmsgKCk8L2Z1bmN0aW9uPi0KLSAgICAgIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZCwgc2luY2UgdGhlIGNvcmUgd2lsbCBkbyBhbGwgbmVjZXNzYXJ5Ci0gICAgICBjaGVja3MgZm9yIHVzLiBOb3RlIHRoYXQgdGhlIHByb3BlcnR5IG9mIHVzaW5nIGV4cGxpY2l0IGNhcHMgc2hvdWxkCi0gICAgICBiZSBhZGRlZCBhbG9uZyB3aXRoIHRoZSBhY3R1YWwgZXhwbGljaXQgY2Fwcywgbm90IGFueSBlYXJsaWVyLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEJlbG93IGhlcmUgZm9sbG93cyB0aGUgc2ltcGxlIGV4YW1wbGUgb2YgYW4gQVZJIG11eGVyJ3MgYXVkaW8gY2FwcwotICAgICAgbmVnb3RpYXRpb24uIFRoZSA8ZnVuY3Rpb24+X2xpbmsgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiBpcyBmYWlybHkKLSAgICAgIG5vcm1hbCwgYnV0IHRoZSA8ZnVuY3Rpb24+LUxvb3AgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiBkb2VzIHNvbWUgb2YKLSAgICAgIHRoZSB0cmlja3MgbWVudGlvbmVkIGFib3ZlLiBUaGVyZSBpcyBubyA8ZnVuY3Rpb24+X2dldGNhcHMgKCk8L2Z1bmN0aW9uPi0KLSAgICAgIGZ1bmN0aW9uIHNpbmNlIHRoZSBwYWQgdGVtcGxhdGUgY29udGFpbnMgYWxsIHRoYXQgaW5mb3JtYXRpb24gYWxyZWFkeQotICAgICAgKG5vdCBzaG93bikuCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyBHc3RQYWRMaW5rUmV0dXJuCi1nc3RfYXZpX211eF9hdWRpb19saW5rIChHc3RQYWQgICAgICAgICpwYWQsCi0JCQljb25zdCBHc3RDYXBzICpjYXBzKQotewotICBHc3RBdmlNdXggKm11eCA9IEdTVF9BVklfTVVYIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotICBHc3RTdHJ1Y3R1cmUgKnN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBjb25zdCBnY2hhciAqbWVkaWEgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHIpOwotCi0gIGlmICghc3RyY21wIChzdHIsICJhdWRpby9tcGVnIikpIHsKLSAgICAvKiBnZXQgdmVyc2lvbiwgbWFrZSBzdXJlIGl0J3MgMSwgZ2V0IGxheWVyLCBtYWtlIHN1cmUgaXQncyAxLTMsCi0gICAgICogdGhlbiBjcmVhdGUgdGhlIDItYnl0ZSBhdWRpbyB0YWcgKDB4MDA1NSkgYW5kIGZpbGwgYW4gYXVkaW8KLSAgICAgKiBzdHJlYW0gc3RydWN0dXJlIChzdHJoL3N0cmYpLiAqLwotICAgIFsuLl0KLSAgICByZXR1cm4gR1NUX1BBRF9MSU5LX09LOwotICB9IGVsc2UgaWYgIXN0cmNtcCAoc3RyLCAiYXVkaW8veC1yYXciKSkgewotICAgIC8qIFNlZSBhYm92ZSwgYnV0IG5vdyB3aXRoIHRoZSByYXcgYXVkaW8gdGFnICgweDAwMDEpLiAqLwotICAgIFsuLl0KLSAgICByZXR1cm4gR1NUX1BBRF9MSU5LX09LOwotICB9IGVsc2UgWy4uXQotWy4uXQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9tdXhfbG9vcCAoR3N0RWxlbWVudCAqZWxlbWVudCkKLXsKLSAgR3N0QXZpTXV4ICptdXggPSBHU1RfQVZJX01VWCAoZWxlbWVudCk7Ci1bLi5dCi0gIC8qIEFzIHdlIGdldCBoZXJlLCB3ZSBzaG91bGQgaGF2ZSB3cml0dGVuIHRoZSBoZWFkZXIgaWYgd2UgaGFkbid0IGRvbmUKLSAgICogdGhhdCBiZWZvcmUgeWV0LCBhbmQgd2UncmUgc3VwcG9zZWQgdG8gaGF2ZSBhbiBpbnRlcm5hbCBidWZmZXIgZnJvbQotICAgKiBlYWNoIHBhZCwgYWxzbyBmcm9tIHRoZSBhdWRpbyBvbmUuIFNvIGhlcmUsIHdlIGNoZWNrIGFnYWluIHdoZXRoZXIKLSAgICogdGhpcyBpcyB0aGUgZmlyc3QgcnVuIGFuZCBpZiBzbywgd2Ugc2V0IHN0YXRpYyBjYXBzLiAqLwotICBpZiAobXV4LT5maXJzdF9jeWNsZSkgewotICAgIGNvbnN0IEdMaXN0ICpwYWRsaXN0ID0gZ3N0X2VsZW1lbnRfZ2V0X3BhZF9saXN0IChlbGVtZW50KTsKLSAgICBHTGlzdCAqaXRlbTsKLQotICAgIGZvciAoaXRlbSA9IHBhZGxpc3Q7IGl0ZW0gIT0gTlVMTDsgaXRlbSA9IGl0ZW0tPm5leHQpIHsKLSAgICAgIEdzdFBhZCAqcGFkID0gaXRlbS0+ZGF0YTsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGlmICghR1NUX1BBRF9JU19TSU5LIChwYWQpKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgLyogc2V0IHN0YXRpYyBjYXBzIGhlcmUgKi8KLSAgICAgIGlmICghc3RybmNtcCAoZ3N0X3BhZF9nZXRfbmFtZSAocGFkKSwgImF1ZGlvXyIsIDYpKSB7Ci0gICAgICAgIC8qIHRoZSBzdHJmIGlzIHRoZSBzdHJ1Y3QgeW91IGZpbGxlZCBpbiB0aGUgX2xpbmsgKCkgZnVuY3Rpb24uICovCi0gICAgICAgIHN3aXRjaCAoc3RyZi0+Zm9ybWF0KSB7Ci0gICAgICAgICAgY2FzZSAweDAwNTU6IC8qIG1wMyAqLwotICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby9tcGVnIiwKLQkJCSJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDEsCi0JCQkibGF5ZXIiLCAgICAgICBHX1RZUEVfSU5ULCAzLAotCQkJImJpdHJhdGUiLCAgICAgR19UWVBFX0lOVCwgc3RyZi0+YXZfYnBzLAotCQkJInJhdGUiLCAgICAgICAgR19UWVBFX0lOVCwgc3RyZi0+cmF0ZSwKLQkJCSJjaGFubmVscyIsICAgIEdfVFlQRV9JTlQsIHN0cmYtPmNoYW5uZWxzLAotCQkJTlVMTCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDB4MDAwMTogLyogcGNtICovCi0gICAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLQkJCQkJWy4uXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBbLi5dCi0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAgKGdzdF9wYWRfZ2V0X25hbWUgKHBhZCksICJ2aWRlb18iLCA2KSkgewotICAgICAgICBbLi5dCi0gICAgICB9IGVsc2UgewotICAgICAgICBnX3dhcm5pbmcgKCJvaSEiKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHNldCBzdGF0aWMgY2FwcyAqLwotICAgICAgZ3N0X3BhZF91c2VfZXhwbGljaXRfY2FwcyAocGFkKTsKLSAgICAgIGdzdF9wYWRfc2V0X2V4cGxpY2l0X2NhcHMgKHBhZCwgY2Fwcyk7Ci0gICAgfQotICB9Ci1bLi5dCi0gIC8qIE5leHQgcnVucyB3aWxsIG5ldmVyIGJlIHRoZSBmaXJzdCBhZ2Fpbi4gKi8KLSAgbXV4LT5maXJzdF9jeWNsZSA9IEZBTFNFOwotfQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBOb3RlIHRoYXQgdGhlcmUgYXJlIG90aGVyIHdheXMgdG8gYWNoaWV2ZSB0aGF0LCB3aGljaCBtaWdodCBiZSB1c2VmdWwKLSAgICAgIGZvciBtb3JlIGNvbXBsZXggY2FzZXMuIFRoaXMgd2lsbCBkbyBmb3IgdGhlIHNpbXBsZSBjYXNlcywgdGhvdWdoLgotICAgICAgVGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgdG8gc2ltcGxpZnkgbmVnb3RpYXRpb24gYW5kIHJlbmVnb3RpYXRpb24gaW4KLSAgICAgIG11eGVycywgaXQgaXMgbm90IGEgY29tcGxldGUgc29sdXRpb24sIG5vciBpcyBpdCBhIHByZXR0eSBvbmUuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotLS0+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9vdGhlci1vbmV0b24ueG1sIGIvZG9jcy9wd2cvb3RoZXItb25ldG9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM2MWJhYy4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9vdGhlci1vbmV0b24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPGNoYXB0ZXIgaWQ9ImNoYXB0ZXItb3RoZXItb25ldG9uIiB4cmVmbGFiZWw9IldyaXRpbmcgYSBEZW11eGVyIG9yIFBhcnNlciI+Ci0gIDx0aXRsZT5Xcml0aW5nIGEgRGVtdXhlciBvciBQYXJzZXI8L3RpdGxlPgotICA8cGFyYT4KLSAgICBEZW11eGVycyBhcmUgdGhlIDEtdG8tTiBlbGVtZW50cyB0aGF0IG5lZWQgdmVyeSBzcGVjaWFsIGNhcmUuCi0gICAgVGhleSBhcmUgcmVzcG9uc2libGUgZm9yIHRpbWVzdGFtcGluZyByYXcsIHVucGFyc2VkIGRhdGEgaW50bwotICAgIGVsZW1lbnRhcnkgdmlkZW8gb3IgYXVkaW8gc3RyZWFtcywgYW5kIHRoZXJlIGFyZSBtYW55IHRoaW5ncyB0aGF0IHlvdQotICAgIGNhbiBvcHRpbWl6ZSBvciBkbyB3cm9uZy4gSGVyZSwgc2V2ZXJhbCBjdWxwcml0cyB3aWxsIGJlIG1lbnRpb25lZAotICAgIGFuZCBjb21tb24gc29sdXRpb25zIHdpbGwgYmUgb2ZmZXJlZC4gUGFyc2VycyBhcmUgZGVtdXhlcnMgd2l0aCBvbmx5Ci0gICAgb25lIHNvdXJjZSBwYWQuIEFsc28sIHRoZXkgb25seSBjdXQgdGhlIHN0cmVhbSBpbnRvIGJ1ZmZlcnMsIHRoZXkKLSAgICBkb24ndCB0b3VjaCB0aGUgZGF0YSBvdGhlcndpc2UuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgQXMgbWVudGlvbmVkIHByZXZpb3VzbHkgaW4gPHhyZWYgbGlua2VuZD0iY2hhcHRlci1uZWdvdGlhdGlvbiIvPiwKLSAgICBkZW11eGVycyBzaG91bGQgdXNlIGZpeGVkIGNhcHMsIHNpbmNlIHRoZWlyIGRhdGEgdHlwZSB3aWxsIG5vdCBjaGFuZ2UuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgQXMgZGlzY3Vzc2VkIGluIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItc2NoZWR1bGluZyIvPiwgZGVtdXhlciBlbGVtZW50cwotICAgIGNhbiBiZSB3cml0dGVuIGluIG11bHRpcGxlIHdheXM6Ci0gIDwvcGFyYT4KLSAgPGl0ZW1pemVkbGlzdD4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhleSBjYW4gYmUgdGhlIGRyaXZpbmcgZm9yY2Ugb2YgdGhlIHBpcGVsaW5lLCBieSBydW5uaW5nIHRoZWlyIG93bgotICAgICAgICB0YXNrLiBUaGlzIHdvcmtzIHBhcnRpY3VsYXJseSB3ZWxsIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgcmFuZG9tCi0gICAgICAgIGFjY2VzcywgZm9yIGV4YW1wbGUgYW4gQVZJIGRlbXV4ZXIuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhleSBjYW4gYWxzbyBydW4gaW4gcHVzaC1iYXNlZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0IGFuIHVwc3RyZWFtCi0gICAgICAgIGVsZW1lbnQgZHJpdmVzIHRoZSBwaXBlbGluZS4gVGhpcyB3b3JrcyBwYXJ0aWN1bGFybHkgd2VsbCBmb3Igc3RyZWFtcwotICAgICAgICB0aGF0IG1heSBjb21lIGZyb20gbmV0d29yaywgc3VjaCBhcyBPZ2cuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KLSAgPC9pdGVtaXplZGxpc3Q+Ci0gIDxwYXJhPgotICAgIEluIGFkZGl0aW9uLCBhdWRpbyBwYXJzZXJzIHdpdGggb25lIG91dHB1dCBjYW4sIGluIHRoZW9yeSwgYWxzbyBiZSB3cml0dGVuCi0gICAgaW4gcmFuZG9tIGFjY2VzcyBtb2RlLiBBbHRob3VnaCBzaW1wbGUgcGxheWJhY2sgd2lsbCBtb3N0bHkgd29yayBpZiB5b3VyCi0gICAgZWxlbWVudCBvbmx5IGFjY2VwdHMgb25lIG1vZGUsIGl0IG1heSBiZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgbXVsdGlwbGUKLSAgICBtb2RlcyB0byB3b3JrIGluIGNvbWJpbmF0aW9uIHdpdGggYWxsIHNvcnRzIG9mIGFwcGxpY2F0aW9ucywgc3VjaCBhcwotICAgIGVkaXRpbmcuIEFsc28sIHBlcmZvcm1hbmNlIG1heSBiZWNvbWUgYmV0dGVyIGlmIHlvdSBpbXBsZW1lbnQgbXVsdGlwbGUKLSAgICBtb2Rlcy4gU2VlIDx4cmVmIGxpbmtlbmQ9ImNoYXB0ZXItc2NoZWR1bGluZyIvPiB0byBzZWUgaG93IGFuIGVsZW1lbnQKLSAgICBjYW4gYWNjZXB0IG11bHRpcGxlIHNjaGVkdWxpbmcgbW9kZXMuCi0gIDwvcGFyYT4KLTwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3MvcHdnL290aGVyLXNpbmsueG1sIGIvZG9jcy9wd2cvb3RoZXItc2luay54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMjIxMDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvb3RoZXItc2luay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotCi08IS0tICMjIyMjIyMjIyMjIyBjaGFwdGVyICMjIyMjIyMjIyMjIyMgLS0+Ci0KLTxjaGFwdGVyIGlkPSJjaGFwdGVyLW90aGVyLXNpbmsiIHhyZWZsYWJlbD0iV3JpdGluZyBhIFNpbmsiPgotICA8dGl0bGU+V3JpdGluZyBhIFNpbms8L3RpdGxlPgotICA8cGFyYT4KLSAgICBTaW5rcyBhcmUgb3V0cHV0IGVsZW1lbnRzIHRoYXQsIG9wcG9zaXRlIHRvIHNvdXJjZXMsIGhhdmUgbm8gc291cmNlCi0gICAgcGFkcyBhbmQgb25lIG9yIG1vcmUgKHVzdWFsbHkgb25lKSBzaW5rIHBhZC4gVGhleSBjYW4gYmUgc291bmQgY2FyZAotICAgIG91dHB1dHMsIGRpc2sgd3JpdGVycywgZXRjLiBUaGlzIGNoYXB0ZXIgd2lsbCBkaXNjdXNzIHRoZSBiYXNpYwotICAgIGltcGxlbWVudGF0aW9uIG9mIHNpbmsgZWxlbWVudHMuCi0gIDwvcGFyYT4KLQotICA8c2VjdDEgaWQ9Im90aGVyLXNpbmstcHJvY2Vzc2luZyIgeHJlZmxhYmVsPSJEYXRhIHByb2Nlc3NpbmcsIGV2ZW50cywgc3luY2hyb25pemF0aW9uIGFuZCBjbG9ja3MiPgotICAgIDx0aXRsZT5EYXRhIHByb2Nlc3NpbmcsIGV2ZW50cywgc3luY2hyb25pemF0aW9uIGFuZCBjbG9ja3M8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgRXhjZXB0IGZvciBjb3JuZXIgY2FzZXMsIHNpbmsgZWxlbWVudHMgd2lsbCBiZSA8ZnVuY3Rpb24+X2NoYWluCi0gICAgICAoKTwvZnVuY3Rpb24+LWJhc2VkIGVsZW1lbnRzLiBUaGUgY29uY2VwdCBvZiBzdWNoIGVsZW1lbnRzIGhhcwotICAgICAgYmVlbiBkaXNjdXNzZWQgYmVmb3JlIGluIGRldGFpbCwgc28gdGhhdCB3aWxsIGJlIHNraXBwZWQgaGVyZS4gV2hhdAotICAgICAgaXMgdmVyeSBpbXBvcnRhbnQgaW4gc2luayBlbGVtZW50cywgc3BlY2lmaWNhbGx5IGluIHJlYWwtdGltZSBhdWRpbwotICAgICAgYW5kIHZpZGVvIHNvdXJjZXMgKHN1Y2ggYXMgPGNsYXNzbmFtZT5vc3NzaW5rPC9jbGFzc25hbWU+IG9yCi0gICAgICA8Y2xhc3NuYW1lPnhpbWFnZXNpbms8L2NsYXNzbmFtZT4pLCBpcyBldmVudCBoYW5kbGluZyBpbiB0aGUKLSAgICAgIDxmdW5jdGlvbj5fY2hhaW4gKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiwgYmVjYXVzZSBtb3N0IGVsZW1lbnRzIHJlbHkKLSAgICAgIG9uIEVPUy1oYW5kbGluZyBvZiB0aGUgc2luayBlbGVtZW50LCBhbmQgYmVjYXVzZSBBL1Ygc3luY2hyb25pemF0aW9uCi0gICAgICBjYW4gb25seSBiZSBwZXJmZWN0IGlmIHRoZSBlbGVtZW50IHRha2VzIHRoaXMgaW50byBhY2NvdW50LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEhvdyB0byBhY2hpZXZlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHN0cmVhbXMgZGVwZW5kcyBvbiB3aGV0aGVyCi0gICAgICB5b3UncmUgYSBjbG9jay1wcm92aWRpbmcgb3IgYSBjbG9jay1yZWNlaXZpbmcgZWxlbWVudC4gSWYgeW91J3JlCi0gICAgICB0aGUgY2xvY2sgcHJvdmlkZXIsIHlvdSBjYW4gZG8gd2l0aCB0aW1lIHdoYXRldmVyIHlvdSB3YW50LiBDb3JyZWN0Ci0gICAgICBoYW5kbGluZyB3b3VsZCBtZWFuIHRoYXQgeW91IGNoZWNrIHdoZXRoZXIgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMKLSAgICAgIGJ1ZmZlciAoaWYgYW55KSBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBhcmUgdGhlIHNhbWUuCi0gICAgICBJZiBzbywgdGhlcmUncyBubyBnYXAgYmV0d2VlbiB0aGUgdHdvIGFuZCB5b3UgY2FuIGNvbnRpbnVlIHBsYXlpbmcKLSAgICAgIHJpZ2h0IGF3YXkuIElmIHRoZXJlIGlzIGEgZ2FwLCB0aGVuIHlvdSdsbCBuZWVkIHRvIHdhaXQgZm9yIHlvdXIKLSAgICAgIGNsb2NrIHRvIHJlYWNoIHRoYXQgdGltZS4gSG93IHRvIGRvIHRoYXQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudAotICAgICAgdHlwZS4gSW4gdGhlIGNhc2Ugb2YgYXVkaW8gb3V0cHV0IGVsZW1lbnRzLCB5b3Ugd291bGQgb3V0cHV0IHNpbGVuY2UKLSAgICAgIGZvciBhIHdoaWxlLiBJbiB0aGUgY2FzZSBvZiB2aWRlbywgeW91IHdvdWxkIHNob3cgYmFja2dyb3VuZCBjb2xvci4KLSAgICAgIEluIGNhc2Ugb2Ygc3VidGl0bGVzLCBzaG93IG5vIHN1YnRpdGxlcyBhdCBhbGwuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhlIGNhc2UgdGhhdCB0aGUgcHJvdmlkZWQgY2xvY2sgYW5kIHRoZSByZWNlaXZlZCBjbG9jayBhcmUgbm90Ci0gICAgICB0aGUgc2FtZSAob3IgaW4gdGhlIGNhc2Ugd2hlcmUgeW91ciBlbGVtZW50IHByb3ZpZGVzIG5vIGNsb2NrLCB3aGljaAotICAgICAgaXMgdGhlIHNhbWUpLCB5b3Ugc2ltcGx5IHdhaXQgZm9yIHRoZSBjbG9jayB0byByZWFjaCB0aGUgdGltZXN0YW1wIG9mCi0gICAgICB0aGUgY3VycmVudCBidWZmZXIgYW5kIHRoZW4geW91IGhhbmRsZSB0aGUgZGF0YSBpbiBpdC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgICBBIHNpbXBsZSBkYXRhIGhhbmRsaW5nIGZ1bmN0aW9uIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgdm9pZAotZ3N0X215X3NpbmtfY2hhaW4gKEdzdFBhZCAgKnBhZCwKLQkJICAgR3N0RGF0YSAqZGF0YSkKLXsKLSAgR3N0TXlTaW5rICpzaW5rID0gR1NUX01ZX1NJTksgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RDbG9ja1RpbWUgdGltZTsKLQotICAvKiBvbmx5IG5lZWRlZCBpZiB0aGUgZWxlbWVudCBpcyBHU1RfRVZFTlRfQVdBUkUgKi8KLSAgaWYgKEdTVF9JU19FVkVOVCAoZGF0YSkpIHsKLSAgICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfRVZFTlQgKGRhdGEpOwotCi0gICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICAgIFsgaWYgeW91ciBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2ssIGRpc2FibGUgKGluYWN0aXZhdGUpIGl0IGhlcmUgXQotICAgICAgICAvKiBwYXNzLXRocm91Z2ggKi8KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLyogdGhlIGRlZmF1bHQgaGFuZGxlciBoYW5kbGVzIGRpc2NvbnRpbnVpdGllcywgZXZlbiBpZiB5b3VyCi0gICAgICAgICAqIGVsZW1lbnQgcHJvdmlkZXMgYSBjbG9jayEgKi8KLSAgICAgICAgZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIGV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuOwotICB9Ci0KLSAgYnVmID0gR1NUX0JVRkZFUiAoZGF0YSk7Ci0gIGlmIChHU1RfQlVGRkVSX1RJTUVfSVNfVkFMSUQgKGJ1ZikpCi0gICAgdGltZSA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOwotICBlbHNlCi0gICAgdGltZSA9IHNpbmstPmV4cGVjdGVkX25leHRfdGltZTsKLQotICAvKiBTeW5jaHJvbml6YXRpb24gLSB0aGUgcHJvcGVydHkgaXMgb25seSB1c2VmdWwgaW4gY2FzZSB0aGUKLSAgICogZWxlbWVudCBoYXMgdGhlIG9wdGlvbiBvZiBub3Qgc3luY2luZy4gU28gaXQgaXMgbm90IHVzZWZ1bAotICAgKiBmb3IgaGFyZHdhcmUtc3luYyAoY2xvY2stcHJvdmlkaW5nKSBlbGVtZW50cy4gKi8KLSAgaWYgKHNpbmstPnN5bmMpIHsKLSAgICAvKiBUaGlzIGNoZWNrIGlzIG9ubHkgbmVlZGVkIGlmIHlvdSBwcm92aWRlIGEgY2xvY2suIEVsc2UsCi0gICAgICogeW91IGNhbiBhbHdheXMgZXhlY3V0ZSB0aGUgJ2Vsc2UnIGNsYXVzZS4gKi8KLSAgICBpZiAoc2luay0+cHJvdmlkZWRfY2xvY2sgPT0gc2luay0+cmVjZWl2ZWRfY2xvY2spIHsKLSAgICAgIC8qIEdTVF9TRUNPTkQgLyAxMCBpcyAwLDEgc2VjLCBpdCdzIGFuIGFyYml0cmFyeSB2YWx1ZS4gVGhlCi0gICAgICAgKiBjYXN0cyBhcmUgbmVlZGVkIGJlY2F1c2UgZWxzZSBpdCdsbCBiZSB1bnNpZ25lZCBhbmQgd2UKLSAgICAgICAqIHdvbid0IGRldGVjdCBuZWdhdGl2ZSB2YWx1ZXMuICovCi0gICAgICBpZiAobGxhYnMgKChnaW50NjQpIHNpbmstPmV4cGVjdGVkX25leHRfdGltZSAtIChnaW50NjQpIHRpbWUpID4KLSAgICAgICAgICAgIChHU1RfU0VDT05EIC8gMTApKSB7Ci0gICAgICAgIC8qIHNvIGFyZSB3ZSBhaGVhZCBvciBiZWhpbmQ/ICovCi0gICAgICAgIGlmICh0aW1lID4gc2luay0+ZXhwZWN0ZWRfdGltZSkgewotICAgICAgICAgIC8qIHdlIG5lZWQgdG8gd2FpdCBhIHdoaWxlLi4uIEluIGNhc2Ugb2YgYXVkaW8sIG91dHB1dAotICAgICAgICAgICAqIHNpbGVuY2UuIEluIGNhc2Ugb2YgdmlkZW8sIG91dHB1dCBiYWNrZ3JvdW5kIGNvbG9yLgotICAgICAgICAgICAqIEluIGNhc2Ugb2Ygc3VidGl0bGVzLCBkaXNwbGF5IG5vdGhpbmcuICovCi0gICAgICAgICAgWy4uXQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8qIERyb3AgZGF0YS4gKi8KLSAgICAgICAgICBbLi5dCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogWW91IGNvdWxkIGRvIG1vcmUgc29waGlzdGljYXRlZCB0aGluZ3MgaGVyZSwgYnV0IHdlJ2xsCi0gICAgICAgKiBrZWVwIGl0IHNpbXBsZSBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGV4YW1wbGUuICovCi0gICAgICBnc3RfZWxlbWVudF93YWl0IChHU1RfRUxFTUVOVCAoc2luayksIHRpbWUpOwotICAgIH0KLSAgfQotCi0gIC8qIEFuZCBub3cgaGFuZGxlIHRoZSBkYXRhLiAqLwotWy4uXQotfQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJvdGhlci1zaW5rLWJ1ZmZlcnMiIHhyZWZsYWJlbD0iU3BlY2lhbCBtZW1vcnkiPgotICAgIDx0aXRsZT5TcGVjaWFsIG1lbW9yeTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBMaWtlIHNvdXJjZSBlbGVtZW50cywgc2luayBlbGVtZW50cyBjYW4gc29tZXRpbWVzIHByb3ZpZGUgZXh0ZXJuYWxseQotICAgICAgYWxsb2NhdGVkIChzdWNoIGFzIFgtcHJvdmlkZWQgb3IgRE1BJ2FibGUpIG1lbW9yeSB0byBlbGVtZW50cyBlYXJsaWVyCi0gICAgICBpbiB0aGUgcGlwZWxpbmUsIGFuZCB0aGVyZWJ5IHByZXZlbnQgdGhlIG5lZWQgZm9yCi0gICAgICA8ZnVuY3Rpb24+bWVtY3B5ICgpPC9mdW5jdGlvbj4gZm9yIGluY29taW5nIGRhdGEuIFdlIGRvIHRoaXMgYnkKLSAgICAgIHByb3ZpZGluZyBhIHBhZC1hbGxvY2F0ZS1idWZmZXIgZnVuY3Rpb24uCi0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyBHc3RCdWZmZXIgKglnc3RfbXlfc2lua19idWZmZXJfYWxsb2NhdGUJKEdzdFBhZCAqcGFkLAotCQkJCQkJCSBndWludDY0IG9mZnNldCwKLQkJCQkJCQkgZ3VpbnQgICBzaXplKTsKLQotc3RhdGljIHZvaWQKLWdzdF9teV9zaW5rX2luaXQgKEdzdE15U2luayAqc2luaykKLXsKLVsuLl0KLSAgZ3N0X3BhZF9zZXRfYnVmZmVyYWxsb2NfZnVuY3Rpb24gKHNpbmstPnNpbmtwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RfbXlfc2lua19idWZmZXJfYWxsb2NhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X215X3NpbmtfYnVmZmVyX2ZyZWUgKEdzdEJ1ZmZlciAqYnVmKQotewotICBHc3RNeVNpbmsgKnNpbmsgPSBHU1RfTVlfU0lOSyAoR1NUX0JVRkZFUl9QUklWQVRFIChidWYpKTsKLQotICAvKiBEbyB3aGF0ZXZlciBpcyBuZWVkZWQgaGVyZS4gKi8KLVsuLl0KLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfbXlfc2lua19idWZmZXJfYWxsb2NhdGUgKEdzdFBhZCAqcGFkLAotCQkJICAgICBndWludDY0IG9mZnNldCwKLQkJCSAgICAgZ3VpbnQgICBzaXplKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gIC8qIFNvIGhlcmUgaXQncyB1cCB0byB5b3UgdG8gd3JhcCB5b3VyIHByaXZhdGUgYnVmZmVycyBhbmQKLSAgICogcmV0dXJuIHRoYXQuICovCi0gIEdTVF9CVUZGRVJfRlJFRV9EQVRBX0ZVTkMgKGJ1ZikgPSBnc3RfbXlfc2lua19idWZmZXJfZnJlZTsKLSAgR1NUX0JVRkZFUl9QUklWQVRFIChidWYpID0gc2luazsKLSAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0RPTlRGUkVFKTsKLVsuLl0KLQotICByZXR1cm4gYnVmOwotfQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9vdGhlci1zb3VyY2UueG1sIGIvZG9jcy9wd2cvb3RoZXItc291cmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVhYWFmYy4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9vdGhlci1zb3VyY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDc1ICswLDAgQEAKLQotPCEtLSAjIyMjIyMjIyMjIyMgY2hhcHRlciAjIyMjIyMjIyMjIyMjIC0tPgotCi08Y2hhcHRlciBpZD0iY2hhcHRlci1vdGhlci1zb3VyY2UiIHhyZWZsYWJlbD0iV3JpdGluZyBhIFNvdXJjZSI+Ci0gIDx0aXRsZT5Xcml0aW5nIGEgU291cmNlPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgU291cmNlIGVsZW1lbnRzIGFyZSB0aGUgc3RhcnQgb2YgYSBkYXRhIHN0cmVhbWluZyBwaXBlbGluZS4gU291cmNlCi0gICAgZWxlbWVudHMgaGF2ZSBubyBzaW5rIHBhZHMgYW5kIGhhdmUgb25lIG9yIG1vcmUgc291cmNlIHBhZHMuIFdlIHdpbGwKLSAgICBmb2N1cyBvbiBzaW5nbGUtc291cmNlcGFkIGVsZW1lbnRzIGhlcmUsIGJ1dCB0aGUgY29uY2VwdHMgYXBwbHkgZXF1YWxseQotICAgIHdlbGwgdG8gbXVsdGktc291cmNlcGFkIGVsZW1lbnRzLiBUaGlzIGNoYXB0ZXIgd2lsbCBleHBsYWluIHRoZSBlc3NlbnRpYWxzCi0gICAgb2Ygc291cmNlIGVsZW1lbnRzLCB3aGljaCBmZWF0dXJlcyBpdCBzaG91bGQgaW1wbGVtZW50IGFuZCB3aGljaCBpdAotICAgIGRvZXNuJ3QgaGF2ZSB0bywgYW5kIGhvdyBzb3VyY2UgZWxlbWVudHMgd2lsbCBpbnRlcmFjdCB3aXRoIG90aGVyCi0gICAgZWxlbWVudHMgaW4gYSBwaXBlbGluZS4KLSAgPC9wYXJhPgotCi0gIDxzZWN0MSBpZD0ic2VjdGlvbi1zb3VyY2UtZ2V0Zm4iIHhyZWZsYWJlbD0iVGhlIGdldCgpLWZ1bmN0aW9uIj4KLSAgICA8dGl0bGU+VGhlIGdldCgpLWZ1bmN0aW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFNvdXJjZSBlbGVtZW50cyBoYXZlIHRoZSBzcGVjaWFsIG9wdGlvbiBvZiBoYXZpbmcgYQotICAgICAgPGZ1bmN0aW9uPl9nZXQgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbiByYXRoZXIgdGhhbiBhCi0gICAgICA8ZnVuY3Rpb24+X2xvb3AgKCk8L2Z1bmN0aW9uPi0gb3IgPGZ1bmN0aW9uPl9jaGFpbgotICAgICAgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbi4gQSA8ZnVuY3Rpb24+X2dldCAoKTwvZnVuY3Rpb24+LWZ1bmN0aW9uIGlzCi0gICAgICBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciBldmVyeSB0aW1lIHRoZSBuZXh0IGVsZW1lbnRzIG5lZWRzIGRhdGEuIEFwYXJ0Ci0gICAgICBmcm9tIGNvcm5lciBjYXNlcywgZXZlcnkgc291cmNlIGVsZW1lbnQgd2lsbCB3YW50IHRvIGJlIDxmdW5jdGlvbj5fZ2V0Ci0gICAgICAoKTwvZnVuY3Rpb24+LWJhc2VkLgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgR3N0RGF0YSAqCWdzdF9teV9zb3VyY2VfZ2V0CShHc3RQYWQgKnBhZCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfc291cmNlX2luaXQgKEdzdE15U291cmNlICpzcmMpCi17Ci1bLi5dCi0gIGdzdF9wYWRfc2V0X2dldF9mdW5jdGlvbiAoc3JjLT5zcmNwYWQsIGdzdF9teV9zb3VyY2VfZ2V0KTsKLX0KLQotc3RhdGljIEdzdERhdGEgKgotZ3N0X215X3NvdXJjZV9nZXQgKEdzdFBhZCAqcGFkKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9EQVRBIChidWYpID0gZ19zdHJkdXAgKCJoZWxsbyBwaXBlbGluZSEiKTsKLSAgR1NUX0JVRkZFUl9TSVpFIChidWYpID0gc3RybGVuIChHU1RfQlVGRkVSX0RBVEEgKGJ1ZikpOwotICAvKiB0ZXJtaW5hdGluZyAnLzAnICovCi0gIEdTVF9CVUZGRVJfTUFaU0laRSAoYnVmKSA9IEdTVF9CVUZGRVJfU0laRSAoYnVmKSArIDE7Ci0KLSAgcmV0dXJuIEdTVF9EQVRBIChidWZmZXIpOwotfQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXNvdXJjZS1wYWRmbiIgeHJlZmxhYmVsPSJFdmVudHMsIHF1ZXJ5aW5nIGFuZCBjb252ZXJ0aW5nIj4KLSAgICA8dGl0bGU+RXZlbnRzLCBxdWVyeWluZyBhbmQgY29udmVydGluZzwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGZ1bmN0aW9ucyBvZiBzb3VyY2UgZWxlbWVudHMgaXMgdG8KLSAgICAgIGltcGxlbWVudCBjb3JyZWN0IHF1ZXJ5LCBjb252ZXJ0IGFuZCBldmVudCBoYW5kbGluZyBmdW5jdGlvbnMuCi0gICAgICBUaG9zZSB3aWxsIGNvbnRpbnVvdXNseSBkZXNjcmliZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3RyZWFtLgotICAgICAgUXVlcnkgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvIGdldCBzdHJlYW0gcHJvcGVydGllcyBzdWNoIGFzIGN1cnJlbnQKLSAgICAgIHBvc2l0aW9uIGFuZCBsZW5ndGguIFRoaXMgY2FuIGJlIHVzZWQgYnkgZmVsbG93IGVsZW1lbnRzIHRvIGNvbnZlcnQKLSAgICAgIHRoaXMgc2FtZSB2YWx1ZSBpbnRvIGEgZGlmZmVyZW50IHVuaXQsIG9yIGJ5IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlCi0gICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGVuZ3RoL3Bvc2l0aW9uIG9mIHRoZSBzdHJlYW0gdG8gdGhlIHVzZXIuCi0gICAgICBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjb252ZXJ0IHN1Y2ggdmFsdWVzIGZyb20gb25lIHVuaXQKLSAgICAgIHRvIGFub3RoZXIuIExhc3RseSwgZXZlbnRzIGFyZSBtb3N0bHkgdXNlZCB0byBzZWVrIHRvIHBvc2l0aW9ucwotICAgICAgaW5zaWRlIHRoZSBzdHJlYW0uIEFueSBmdW5jdGlvbiBpcyBlc3NlbnRpYWxseSBvcHRpb25hbCwgYnV0IHRoZQotICAgICAgZWxlbWVudCBzaG91bGQgdHJ5IHRvIHByb3ZpZGUgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBpdCBrbm93cy4gTm90ZQotICAgICAgdGhhdCBlbGVtZW50cyBwcm92aWRpbmcgYW4gZXZlbnQgZnVuY3Rpb24gc2hvdWxkIGFsc28gbGlzdCB0aGVpcgotICAgICAgc3VwcG9ydGVkIGV2ZW50cyBpbiBhbiA8ZnVuY3Rpb24+X2dldF9ldmVudF9tYXNrICgpPC9mdW5jdGlvbj4KLSAgICAgIGZ1bmN0aW9uLiBFbGVtZW50cyBzdXBwb3J0aW5nIHF1ZXJ5IG9wZXJhdGlvbnMgc2hvdWxkIGxpc3QgdGhlCi0gICAgICBzdXBwb3J0ZWQgb3BlcmF0aW9ucyBpbiBhIDxmdW5jdGlvbj5fZ2V0X3F1ZXJ5X3R5cGVzCi0gICAgICAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLiBFbGVtZW50cyBzdXBwb3J0aW5nIGVpdGhlciBjb252ZXJzaW9uCi0gICAgICBvciBxdWVyeSBvcGVyYXRpb25zIHNob3VsZCBhbHNvIGltcGxlbWVudCBhIDxmdW5jdGlvbj5fZ2V0X2Zvcm1hdHMKLSAgICAgICgpPC9mdW5jdGlvbj4gZnVuY3Rpb24uCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgQW4gZXhhbXBsZSBzb3VyY2UgZWxlbWVudCBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFuIGVsZW1lbnQgdGhhdAotICAgICAgY29udGludW91c2x5IGdlbmVyYXRlcyBhIHdhdmUgdG9uZSBhdCA0NCwxIGtIeiwgbW9ubywgMTYtYml0LiBUaGlzCi0gICAgICBlbGVtZW50IHdpbGwgZ2VuZXJhdGUgNDQxMDAgYXVkaW8gc2FtcGxlcyBwZXIgc2Vjb25kIG9yIDg4LDIga0Ivcy4KLSAgICAgIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHN1Y2ggZnVuY3Rpb25zOgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgR3N0Rm9ybWF0ICoJZ3N0X215X3NvdXJjZV9mb3JtYXRfbGlzdAkoR3N0UGFkICAgICAgKnBhZCk7Ci1zdGF0aWMgR3N0UXVlcnlUeXBlICoJZ3N0X215X3NvdXJjZV9xdWVyeV9saXN0CShHc3RQYWQgICAgICAqcGFkKTsKLQotc3RhdGljIGdib29sZWFuCQlnc3RfbXlfc291cmNlX2NvbnZlcnQJCShHc3RQYWQgICAgICAqcGFkLAotCQkJCQkJCSBHc3RGb3JtYXQgICAgZnJvbV9mbXQsCi0JCQkJCQkJIGdpbnQ2NCAgICAgICBmcm9tX3ZhbCwKLQkJCQkJCQkgR3N0Rm9ybWF0ICAgKnRvX2ZtdCwKLQkJCQkJCQkgZ2ludDY0ICAgICAgKnRvX3ZhbCk7Ci1zdGF0aWMgZ2Jvb2xlYW4JCWdzdF9teV9zb3VyY2VfcXVlcnkJCShHc3RQYWQgICAgICAqcGFkLAotCQkJCQkJCSBHc3RRdWVyeVR5cGUgdHlwZSwKLQkJCQkJCQkgR3N0Rm9ybWF0ICAgKnRvX2ZtdCwKLQkJCQkJCQkgZ2ludDY0ICAgICAgKnRvX3ZhbCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfc291cmNlX2luaXQgKEdzdE15U291cmNlICpzcmMpCi17Ci1bLi5dCi0gIGdzdF9wYWRfc2V0X2NvbnZlcnRfZnVuY3Rpb24gKHNyYy0+c3JjcGFkLCBnc3RfbXlfc291cmNlX2NvbnZlcnQpOwotICBnc3RfcGFkX3NldF9mb3JtYXRzX2Z1bmN0aW9uIChzcmMtPnNyY3BhZCwgZ3N0X215X3NvdXJjZV9mb3JtYXRfbGlzdCk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzcmMtPnNyY3BhZCwgZ3N0X215X3NvdXJjZV9xdWVyeSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X3R5cGVfZnVuY3Rpb24gKHNyYy0+c3JjcGFkLCBnc3RfbXlfc291cmNlX3F1ZXJ5X2xpc3QpOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVudW1lcmF0aW9uIG9mIHN1cHBvcnRlZCBHc3RGb3JtYXQKLSAqIHR5cGVzIGluIHRoZSBxdWVyeSgpIG9yIGNvbnZlcnQoKSBmdW5jdGlvbnMuIFNlZSBnc3QvZ3N0Zm9ybWF0LmgKLSAqIGZvciBhIGZ1bGwgbGlzdC4KLSAqLwotCi1zdGF0aWMgR3N0Rm9ybWF0ICoKLWdzdF9teV9zb3VyY2VfZm9ybWF0X2xpc3QgKEdzdFBhZCAqcGFkKQotewotICBzdGF0aWMgY29uc3QgR3N0Rm9ybWF0IGZvcm1hdHNbXSA9IHsKLSAgICBHU1RfRk9STUFUX1RJTUUsCi0gICAgR1NUX0ZPUk1BVF9ERUZBVUxULCAvKiBtZWFucyAiYXVkaW8gc2FtcGxlcyIgKi8KLSAgICBHU1RfRk9STUFUX0JZVEVTLAotICAgIDAKLSAgfTsKLQotICByZXR1cm4gZm9ybWF0czsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgc3VwcG9ydGVkIHF1ZXJ5KCkKLSAqIG9wZXJhdGlvbnMuIFNpbmNlIHdlIGdlbmVyYXRlIGF1ZGlvIGludGVybmFsbHksIHdlIG9ubHkgcHJvdmlkZQotICogYW4gaW5kaWNhdGlvbiBvZiBob3cgbWFueSBzYW1wbGVzIHdlJ3ZlIHBsYXllZCBzbyBmYXIuIEZpbGUgc291cmNlcwotICogb3Igc3VjaCBlbGVtZW50cyBjb3VsZCBhbHNvIHByb3ZpZGUgR1NUX1FVRVJZX1RPVEFMIGZvciB0aGUgdG90YWwKLSAqIHN0cmVhbSBsZW5ndGgsIG9yIG90aGVyIHRoaW5ncy4gU2VlIGdzdC9nc3RxdWVyeS5oIGZvciBkZXRhaWxzLgotICovCi0KLXN0YXRpYyBHc3RRdWVyeVR5cGUgKgotZ3N0X215X3NvdXJjZV9xdWVyeV9saXN0IChHc3RQYWQgKnBhZCkKLXsKLSAgc3RhdGljIGNvbnN0IEdzdFF1ZXJ5VHlwZSBxdWVyeV90eXBlc1tdID0gewotICAgIEdTVF9RVUVSWV9QT1NJVElPTiwKLSAgICAwLAotICB9OwotCi0gIHJldHVybiBxdWVyeV90eXBlczsKLX0KLQotLyoKLSAqIEFuZCBiZWxvdyBhcmUgdGhlIGxvZ2ljYWwgaW1wbGVtZW50YXRpb25zLgotICovCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X215X3NvdXJjZV9jb252ZXJ0IChHc3RQYWQgICAgKnBhZCwKLQkJICAgICAgIEdzdEZvcm1hdCAgZnJvbV9mbXQsCi0JCSAgICAgICBnaW50NjQgICAgIGZyb21fdmFsLAotCQkgICAgICAgR3N0Rm9ybWF0ICp0b19mbXQsCi0JCSAgICAgICBnaW50NjQgICAgKnRvX3ZhbCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0TXlTb3VyY2UgKnNyYyA9IEdTVF9NWV9TT1VSQ0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0KLSAgc3dpdGNoIChmcm9tX2ZtdCkgewotICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgc3dpdGNoICgqdG9fZm10KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgICAgIC8qIG5vdGhpbmcgKi8KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgICAgICAgKnRvX3ZhbCA9IGZyb21fdmFsIC8gKEdTVF9TRUNPTkQgLyAoNDQxMDAgKiAyKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6Ci0gICAgICAgICAgKnRvX3ZhbCA9IGZyb21fdmFsIC8gKEdTVF9TRUNPTkQgLyA0NDEwMCk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgc3dpdGNoICgqdG9fZm10KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgICAgICp0b192YWwgPSBmcm9tX3ZhbCAqIChHU1RfU0VDT05EIC8gKDQ0MTAwICogMikpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgICAgICAvKiBub3RoaW5nICovCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6Ci0gICAgICAgICAgKnRvX3ZhbCA9IGZyb21fdmFsIC8gMjsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgIHN3aXRjaCAoKnRvX2ZtdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICAqdG9fdmFsID0gZnJvbV92YWwgKiAoR1NUX1NFQ09ORCAvIDQ0MTAwKTsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgICAgICAgKnRvX3ZhbCA9IGZyb21fdmFsICogMjsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgICAgICAvKiBub3RoaW5nICovCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9teV9zb3VyY2VfcXVlcnkgKEdzdFBhZCAgICAgICpwYWQsCi0JCSAgICAgR3N0UXVlcnlUeXBlIHR5cGUsCi0JCSAgICAgR3N0Rm9ybWF0ICAgKnRvX2ZtdCwKLQkJICAgICBnaW50NjQgICAgICAqdG9fdmFsKQotewotICBHc3RNeVNvdXJjZSAqc3JjID0gR1NUX01ZX1NPVVJDRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICAgIHJlcyA9IGdzdF9wYWRfY29udmVydCAocGFkLCBHU1RfRk9STUFUX0JZVEVTLCBzcmMtPnRvdGFsX2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19mbXQsIHRvX3ZhbCk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgQmUgc3VyZSB0byBpbmNyZWFzZSBzcmMtPnRvdGFsX2J5dGVzIGFmdGVyIGVhY2ggY2FsbCB0byB5b3VyCi0gICAgICA8ZnVuY3Rpb24+X2dldCAoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLSAgICAgIEV2ZW50IGhhbmRsaW5nIGhhcyBhbHJlYWR5IGJlZW4gZXhwbGFpbmVkIHByZXZpb3VzbHkgaW4gdGhlIGV2ZW50cwotICAgICAgY2hhcHRlci4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0KLSAgPHNlY3QxIGlkPSJzZWN0aW9uLXNvdXJjZS1zeW5jIiB4cmVmbGFiZWw9IlRpbWUsIGNsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24iPgotICAgIDx0aXRsZT5UaW1lLCBjbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uPC90aXRsZT4KLSAgICA8cGFyYT4KLSAgICAgIFRoZSBhYm92ZSBleGFtcGxlIGRvZXMgbm90IHByb3ZpZGUgYW55IHRpbWluZyBpbmZvLCBidXQgd2lsbCBzdWZmaWNlCi0gICAgICBmb3IgZWxlbWVudGFyeSBkYXRhIHNvdXJjZXMgc3VjaCBhcyBhIGZpbGUgc291cmNlIG9yIG5ldHdvcmsgZGF0YQotICAgICAgc291cmNlIGVsZW1lbnQuIFRoaW5ncyBiZWNvbWUgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCwgYnV0IHN0aWxsCi0gICAgICB2ZXJ5IHNpbXBsZSwgaWYgd2UgY3JlYXRlIGFydGlmaWNpYWwgdmlkZW8gb3IgYXVkaW8gZGF0YSBzb3VyY2VzLAotICAgICAgc3VjaCBhcyBhIHZpZGVvIHRlc3QgaW1hZ2Ugc291cmNlIG9yIGFuIGFydGlmaWNpYWwgYXVkaW8gc291cmNlIChlLmcuCi0gICAgICA8Y2xhc3NuYW1lPmF1ZGlvdGVzdHNyYzwvY2xhc3NuYW1lPikuCi0gICAgICBJdCB3aWxsIGJlY29tZSBtb3JlIGNvbXBsaWNhdGVkIGlmIHdlIHdhbnQgdGhlIGVsZW1lbnQgdG8gYmUgYQotICAgICAgcmVhbHRpbWUgY2FwdHVyZSBzb3VyY2UsIHN1Y2ggYXMgYSB2aWRlbzRsaW51eCBzb3VyY2UgKGZvciByZWFkaW5nCi0gICAgICB2aWRlbyBmcmFtZXMgZnJvbSBhIFRWIGNhcmQpIG9yIGFuIEFMU0Egc291cmNlIChmb3IgcmVhZGluZyBkYXRhCi0gICAgICBmcm9tIHNvdW5kY2FyZHMgc3VwcG9ydGVkIGJ5IGFuIEFMU0EtZHJpdmVyKS4gSGVyZSwgd2Ugd2lsbCBuZWVkIHRvCi0gICAgICBtYWtlIHRoZSBlbGVtZW50IGF3YXJlIG9mIHRpbWluZyBhbmQgY2xvY2tpbmcuCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgVGltZXN0YW1wcyBjYW4gZXNzZW50aWFsbHkgYmUgZ2VuZXJhdGVkIGZyb20gYWxsIHRoZSBpbmZvcm1hdGlvbgotICAgICAgZ2l2ZW4gYWJvdmUgd2l0aG91dCBhbnkgZGlmZmljdWx0eS4gV2UgY291bGQgYWRkIGEgdmVyeSBzbWFsbCBhbW91bnQKLSAgICAgIG9mIGNvZGUgdG8gZ2VuZXJhdGUgcGVyZmVjdGx5IHRpbWVzdGFtcGVkIGJ1ZmZlcnMgZnJvbSBvdXIKLSAgICAgIDxmdW5jdGlvbj5fZ2V0ICgpPC9mdW5jdGlvbj4tZnVuY3Rpb246Ci0gICAgPC9wYXJhPgotICAgIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyB2b2lkCi1nc3RfbXlfc291cmNlX2luaXQgKEdzdE15U291cmNlICpzcmMpCi17Ci1bLi5dCi0gIHNyYy0+dG90YWxfYnl0ZXMgPSAwOwotfQotCi1zdGF0aWMgR3N0RGF0YSAqCi1nc3RfbXlfc291cmNlX2dldCAoR3N0UGFkICpwYWQpCi17Ci0gIEdzdE15U291cmNlICpzcmMgPSBHU1RfTVlfU09VUkNFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfVElNRTsKLVsuLl0KLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IEdTVF9CVUZGRVJfU0laRSAoYnVmKSAqIChHU1RfU0VDT05EIC8gKDQ0MTAwICogMikpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHNyYy0+dG90YWxfYnl0ZXMgKiAoR1NUX1NFQ09ORCAvICg0NDEwMCAqIDIpKTsKLSAgc3JjLT50b3RhbF9ieXRlcyArPSBHU1RfQlVGRkVSX1NJWkUgKGJ1Zik7Ci0KLSAgcmV0dXJuIEdTVF9EQVRBIChidWYpOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9teV9zb3VyY2VfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0gIEdzdE15U291cmNlICpzcmMgPSBHU1RfTVlfU09VUkNFIChlbGVtZW50KTsKLQotICAvKiBGaXJzdCwgaGFuZGxlIHVwd2FyZHMgc3RhdGUgY2hhbmdlcyAqLwotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICAvKiBkbyBzb21ldGhpbmcgKi8KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLSZndDtjaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICByZXR1cm4gcmV0OwotCi0gIC8qIE5vdyBoYW5kbGUgZG93bndhcmRzIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgY2hhaW5pbmcgdXAgKi8KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfUEFVU0VEX1RPX1JFQURZOgotICAgICAgc3JjLT50b3RhbF9ieXRlcyA9IDA7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGF0IHdhc24ndCB0b28gaGFyZC4gTm93LCBsZXQncyBhc3N1bWUgcmVhbC10aW1lIGVsZW1lbnRzLiBUaG9zZQotICAgICAgY2FuIGVpdGhlciBoYXZlIGhhcmR3YXJlLXRpbWluZywgaW4gd2hpY2ggY2FzZSB3ZSBjYW4gcmVseSBvbiBiYWNrZW5kcwotICAgICAgdG8gcHJvdmlkZSBzeW5jIGZvciB1cyAoaW4gd2hpY2ggY2FzZSB5b3UgcHJvYmFibHkgd2FudCB0byBwcm92aWRlIGEKLSAgICAgIGNsb2NrKSwgb3Igd2Ugd2lsbCBoYXZlIHRvIGVtdWxhdGUgdGhhdCBpbnRlcm5hbGx5IChlLmcuIHRvIGFjcXVpcmUKLSAgICAgIHN5bmMgaW4gYXJ0aWZpY2lhbCBkYXRhIGVsZW1lbnRzIHN1Y2ggYXMKLSAgICAgIDxjbGFzc25hbWU+YXVkaW90ZXN0c3JjPC9jbGFzc25hbWU+KS4KLSAgICAgIExldCdzIGZpcnN0IGxvb2sgYXQgdGhlIHNlY29uZCBvcHRpb24gKHNvZnR3YXJlIHN5bmMpLiBUaGUgZmlyc3Qgb3B0aW9uCi0gICAgICAoaGFyZHdhcmUgc3luYyArIHByb3ZpZGluZyBhIGNsb2NrKSBkb2VzIG5vdCByZXF1aXJlIGFueSBzcGVjaWFsIGNvZGUKLSAgICAgIHdpdGggcmVzcGVjdCB0byB0aW1pbmcsIGFuZCB0aGUgY2xvY2tpbmcgc2VjdGlvbiBhbHJlYWR5IGV4cGxhaW5lZCBob3cKLSAgICAgIHRvIHByb3ZpZGUgYSBjbG9jay4KLSAgICA8L3BhcmE+Ci0gICAgPHByb2dyYW1saXN0aW5nPgotZW51bSB7Ci0gIEFSR18wLAotWy4uXQotICBBUkdfU1lOQywKLVsuLl0KLX07Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXlfc291cmNlX2NsYXNzX2luaXQgKEdzdE15U291cmNlQ2xhc3MgKmtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci1bLi5dCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKG9iamVjdF9jbGFzcywgQVJHX1NZTkMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMiLCAiU3luYyIsICJTeW5jaHJvbml6ZSB0byBjbG9jayIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotWy4uXQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X215X3NvdXJjZV9pbml0IChHc3RNeVNvdXJjZSAqc3JjKQotewotWy4uXQotICBzcmMtPnN5bmMgPSBGQUxTRTsKLX0KLQotc3RhdGljIEdzdERhdGEgKgotZ3N0X215X3NvdXJjZV9nZXQgKEdzdFBhZCAqcGFkKQotewotICBHc3RNeVNvdXJjZSAqc3JjID0gR1NUX01ZX1NPVVJDRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKLSAgR3N0QnVmZmVyICpidWY7Ci1bLi5dCi0gIGlmIChzcmMtPnN5bmMpIHsKLSAgICAvKiB3YWl0IG9uIGNsb2NrICovCi0gICAgZ3N0X2VsZW1lbnRfd2FpdCAoR1NUX0VMRU1FTlQgKHNyYyksIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKTsKLSAgfQotCi0gIHJldHVybiBHU1RfREFUQSAoYnVmKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9teV9zb3VyY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICpvYmplY3QsCi0JCQkgICAgZ3VpbnQgICAgICAgcHJvcF9pZCwKLQkJCSAgICBHUGFyYW1TcGVjICpwc3BlYywKLQkJCSAgICBHVmFsdWUgICAgICp2YWx1ZSkKLXsKLSAgR3N0TXlTb3VyY2UgKnNyYyA9IEdTVF9NWV9TT1VSQ0UgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci1bLi5dCi0gICAgY2FzZSBBUkdfU1lOQzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPnN5bmMpOwotICAgICAgYnJlYWs7Ci1bLi5dCi0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9teV9zb3VyY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICAgKm9iamVjdCwKLQkJCSAgICBndWludCAgICAgICAgIHByb3BfaWQsCi0JCQkgICAgR1BhcmFtU3BlYyAgICpwc3BlYywKLQkJCSAgICBjb25zdCBHVmFsdWUgKnZhbHVlKQotewotICBHc3RNeVNvdXJjZSAqc3JjID0gR1NUX01ZX1NPVVJDRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLVsuLl0KLSAgICBjYXNlIEFSR19TWU5DOgotICAgICAgc3JjLT5zeW5jID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci1bLi5dCi0gIH0KLX0KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgTW9zdCBvZiB0aGlzIGlzIEdPYmplY3Qgd3JhcHBpbmcgY29kZS4gVGhlIGFjdHVhbCBjb2RlIHRvIGRvCi0gICAgICBzb2Z0d2FyZS1zeW5jIChpbiB0aGUgPGZ1bmN0aW9uPl9nZXQgKCk8L2Z1bmN0aW9uPi1mdW5jdGlvbikKLSAgICAgIGlzIHJlbGF0aXZlbHkgc21hbGwuCi0gICAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9InNlY3Rpb24tc291cmNlLWJ1ZmZlcnMiIHhyZWZsYWJlbD0iVXNpbmcgc3BlY2lhbCBtZW1vcnkiPgotICAgIDx0aXRsZT5Vc2luZyBzcGVjaWFsIG1lbW9yeTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBJbiBzb21lIGNhc2VzLCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gdXNlIHNwZWNpYWxseSBhbGxvY2F0ZWQgbWVtb3J5Ci0gICAgICAoZS5nLiA8ZnVuY3Rpb24+bW1hcCAoKTwvZnVuY3Rpb24+J2VkIERNQSdhYmxlIG1lbW9yeSkgaW4KLSAgICAgIHlvdXIgYnVmZmVycywgYW5kIHRob3NlIHdpbGwgcmVxdWlyZSBzcGVjaWFsIGhhbmRsaW5nIHdoZW4gdGhleSBhcmUKLSAgICAgIGJlaW5nIGRlcmVmZXJlbmNlZC4gRm9yIHRoaXMsICZHU3RyZWFtZXI7IHVzZXMgdGhlIGNvbmNlcHQgb2YKLSAgICAgIGJ1ZmZlci1mcmVlIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHNwZWNpYWwgZnVuY3Rpb25zIHBvaW50ZXJzIHRoYXQgYW4KLSAgICAgIGVsZW1lbnQgY2FuIHNldCBvbiBidWZmZXJzIHRoYXQgaXQgY3JlYXRlZCBpdHNlbGYuIFRoZSBnaXZlbiBmdW5jdGlvbgotICAgICAgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIGhhcyBiZWVuIGRlcmVmZXJlbmNlZCwgc28gdGhhdCB0aGUKLSAgICAgIGVsZW1lbnQgY2FuIGNsZWFuIHVwIG9yIHJlLXVzZSBtZW1vcnkgaW50ZXJuYWxseSByYXRoZXIgdGhhbiB1c2luZwotICAgICAgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gKHdoaWNoIHNpbXBseSBjYWxscwotICAgICAgPGZ1bmN0aW9uPmdfZnJlZSAoKTwvZnVuY3Rpb24+IG9uIHRoZSBkYXRhIHBvaW50ZXIpLgotICAgIDwvcGFyYT4KLSAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci1zdGF0aWMgdm9pZAotZ3N0X215X3NvdXJjZV9idWZmZXJfZnJlZSAoR3N0QnVmZmVyICpidWYpCi17Ci0gIEdzdE15U291cmNlICpzcmMgPSBHU1RfTVlfU09VUkNFIChHU1RfQlVGRkVSX1BSSVZBVEUgKGJ1ZikpOwotCi0gIC8qIGRvIHVzZWZ1bCB0aGluZ3MgaGVyZSwgbGlrZSByZS1xdWV1ZWluZyB0aGUgYnVmZmVyIHdoaWNoCi0gICAqIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IgRE1BIGFnYWluLiBUaGUgZGVmYXVsdCBoYW5kbGVyIHdpbGwKLSAgICogbm90IGZyZWUgdGhpcyBidWZmZXIgYmVjYXVzZSBvZiB0aGUgR1NUX0JVRkZFUl9ET05URlJFRQotICAgKiBmbGFnLiAqLwotfQotCi1zdGF0aWMgR3N0RGF0YSAqCi1nc3RfbXlfc291cmNlX2dldCAoR3N0UGFkICpwYWQpCi17Ci0gIEdzdE15U291cmNlICpzcmMgPSBHU1RfTVlfU09VUkNFIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotICBHc3RCdWZmZXIgKmJ1ZjsKLVsuLl0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdTVF9CVUZGRVJfRlJFRV9EQVRBX0ZVTkMgKGJ1ZikgPSBnc3RfbXlfc291cmNlX2J1ZmZlcl9mcmVlOwotICBHU1RfQlVGRkVSX1BSSVZBVEUgKGJ1ZikgPSBzcmM7Ci0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9SRUFET05MWSB8IEdTVF9CVUZGRVJfRE9OVEZSRUUpOwotWy4uXQotCi0gIHJldHVybiBHU1RfREFUQSAoYnVmKTsKLX0KLSAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgIDxwYXJhPgotICAgICAgTm90ZSB0aGF0IHRoaXMgY29uY2VwdCBzaG91bGQgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGJlIHVzZWQgdG8KLSAgICAgIGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgY2FsbHMgbWFkZSB0byBmdW5jdGlvbnMgc3VjaCBhcwotICAgICAgPGZ1bmN0aW9uPmdfbWFsbG9jICgpPC9mdW5jdGlvbj4gaW5zaWRlIHlvdXIgZWxlbWVudC4gV2UKLSAgICAgIGhhdmUgYmV0dGVyIHdheXMgb2YgZG9pbmcgdGhhdCBlbHNld2hlcmUgKCZHU3RyZWFtZXI7IGNvcmUsIEdsaWIsCi0gICAgICBHbGliYywgTGludXgga2VybmVsLCBldGMuKS4KLSAgICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci08L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2NzL3B3Zy9wd2cueG1sIGIvZG9jcy9wd2cvcHdnLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJkNzI5ZS4uMDAwMDAwMAotLS0gYS9kb2NzL3B3Zy9wd2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04Jz8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCi0gICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIgWwotPCFFTlRJVFkgJSBpbWFnZS1lbnRpdGllcyBTWVNURU0gImltYWdlLmVudGl0aWVzIj4KLSVpbWFnZS1lbnRpdGllczsKLTwhRU5USVRZICUgdmVyc2lvbi1lbnRpdGllcyBTWVNURU0gInZlcnNpb24uZW50aXRpZXMiPgotJXZlcnNpb24tZW50aXRpZXM7Ci0KLTwhRU5USVRZIFRJVExFUEFHRSAgICAgICAgICAgIFNZU1RFTSAidGl0bGVwYWdlLnhtbCI+Ci0KLTwhLS0gUGFydCAxOiBJbnRyb2R1Y3Rpb24gLS0+Ci08IUVOVElUWSBJTlRST19QUkVGQUNFICAgICAgICBTWVNURU0gImludHJvLXByZWZhY2UueG1sIj4KLTwhRU5USVRZIElOVFJPX0JBU0lDUyAgICAgICAgIFNZU1RFTSAiaW50cm8tYmFzaWNzLnhtbCI+Ci0KLTwhLS0gUGFydCAyOiBCdWlsZGluZyBhIFBsdWdpbiAtLT4KLTwhRU5USVRZIEJVSUxESU5HX0JPSUxFUiAgICAgIFNZU1RFTSAiYnVpbGRpbmctYm9pbGVyLnhtbCI+Ci08IUVOVElUWSBCVUlMRElOR19ERUJVRyAgICAgICBTWVNURU0gImJ1aWxkaW5nLWRlYnVnLnhtbCI+Ci08IUVOVElUWSBCVUlMRElOR19QQURTICAgICAgICBTWVNURU0gImJ1aWxkaW5nLXBhZHMueG1sIj4KLTwhRU5USVRZIEJVSUxESU5HX0NIQUlORk4gICAgIFNZU1RFTSAiYnVpbGRpbmctY2hhaW5mbi54bWwiPgotPCFFTlRJVFkgQlVJTERJTkdfRVZFTlRGTiAgICAgU1lTVEVNICJidWlsZGluZy1ldmVudGZuLnhtbCI+Ci08IUVOVElUWSBCVUlMRElOR19RVUVSWUZOICAgICBTWVNURU0gImJ1aWxkaW5nLXF1ZXJ5Zm4ueG1sIj4KLTwhRU5USVRZIEJVSUxESU5HX1NUQVRFICAgICAgIFNZU1RFTSAiYnVpbGRpbmctc3RhdGUueG1sIj4KLTwhRU5USVRZIEJVSUxESU5HX1BST1BTICAgICAgIFNZU1RFTSAiYnVpbGRpbmctcHJvcHMueG1sIj4KLTwhRU5USVRZIEJVSUxESU5HX1NJR05BTFMgICAgIFNZU1RFTSAiYnVpbGRpbmctc2lnbmFscy54bWwiPgotPCFFTlRJVFkgQlVJTERJTkdfVEVTVEFQUCAgICAgU1lTVEVNICJidWlsZGluZy10ZXN0YXBwLnhtbCI+Ci0KLTwhLS0gUGFydCAzOiBBZHZhbmNlZCBGaWx0ZXIgQ29uY2VwdHMgLS0+Ci08IUVOVElUWSBBRFZBTkNFRF9SRVFVRVNUICAgICBTWVNURU0gImFkdmFuY2VkLXJlcXVlc3QueG1sIj4KLTwhRU5USVRZIEFEVkFOQ0VEX1NDSEVEVUxJTkcgIFNZU1RFTSAiYWR2YW5jZWQtc2NoZWR1bGluZy54bWwiPgotPCFFTlRJVFkgQURWQU5DRURfTkVHT1RJQVRJT04gU1lTVEVNICJhZHZhbmNlZC1uZWdvdGlhdGlvbi54bWwiPgotPCFFTlRJVFkgQURWQU5DRURfQUxMT0NBVElPTiAgU1lTVEVNICJhZHZhbmNlZC1hbGxvY2F0aW9uLnhtbCI+Ci08IUVOVElUWSBBRFZBTkNFRF9UWVBFUyAgICAgICBTWVNURU0gImFkdmFuY2VkLXR5cGVzLnhtbCI+Ci08IUVOVElUWSBBRFZBTkNFRF9FVkVOVFMgICAgICBTWVNURU0gImFkdmFuY2VkLWV2ZW50cy54bWwiPgotPCFFTlRJVFkgQURWQU5DRURfQ0xPQ0sgICAgICAgU1lTVEVNICJhZHZhbmNlZC1jbG9jay54bWwiPgotPCFFTlRJVFkgQURWQU5DRURfUU9TICAgICAgICAgU1lTVEVNICJhZHZhbmNlZC1xb3MueG1sIj4KLTwhRU5USVRZIEFEVkFOQ0VEX0RQQVJBTVMgICAgIFNZU1RFTSAiYWR2YW5jZWQtZHBhcmFtcy54bWwiPgotPCFFTlRJVFkgQURWQU5DRURfSU5URVJGQUNFUyAgU1lTVEVNICJhZHZhbmNlZC1pbnRlcmZhY2VzLnhtbCI+Ci08IUVOVElUWSBBRFZBTkNFRF9UQUdHSU5HICAgICBTWVNURU0gImFkdmFuY2VkLXRhZ2dpbmcueG1sIj4KLQotPCEtLSBQYXJ0IDQ6IENyZWF0aW5nIHNwZWNpYWwgZWxlbWVudCB0eXBlcyAtLT4KLTwhRU5USVRZIE9USEVSX0JBU0UgICAgICAgICAgIFNZU1RFTSAib3RoZXItYmFzZS54bWwiPgotPCFFTlRJVFkgT1RIRVJfT05FVE9OICAgICAgICAgU1lTVEVNICJvdGhlci1vbmV0b24ueG1sIj4KLTwhRU5USVRZIE9USEVSX05UT09ORSAgICAgICAgIFNZU1RFTSAib3RoZXItbnRvb25lLnhtbCI+Ci08IUVOVElUWSBPVEhFUl9NQU5BR0VSICAgICAgICBTWVNURU0gIm90aGVyLW1hbmFnZXIueG1sIj4KLQotPCEtLSBBcHBlbmRpY2VzIC0tPgotPCFFTlRJVFkgQVBQRU5ESVhfQ0hFQ0tMSVNUICAgU1lTVEVNICJhcHBlbmRpeC1jaGVja2xpc3QueG1sIj4KLTwhRU5USVRZIEFQUEVORElYX1BPUlRJTkcgICAgIFNZU1RFTSAiYXBwZW5kaXgtcG9ydGluZy54bWwiPgotPCFFTlRJVFkgQVBQRU5ESVhfTElDRU5TSU5HICAgU1lTVEVNICJhcHBlbmRpeC1saWNlbnNpbmcueG1sIj4KLTwhRU5USVRZIEFQUEVORElYX1BZVEhPTiAgICAgIFNZU1RFTSAiYXBwZW5kaXgtcHl0aG9uLnhtbCI+Ci0KLTwhRU5USVRZIEdTdHJlYW1lciAgICAiPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+Ij4KLTwhRU5USVRZIEdzdEFwcERldk1hbiAiPGVtcGhhc2lzPkdTdHJlYW1lciBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBNYW51YWw8L2VtcGhhc2lzPiI+Ci08IUVOVElUWSBHc3RMaWJSZWYgICAgIjxlbXBoYXNpcz5HU3RyZWFtZXIgTGlicmFyeSBSZWZlcmVuY2U8L2VtcGhhc2lzPiI+Ci1dPgotCi08Ym9vayBpZD0iaW5kZXgiPgotICAmVElUTEVQQUdFOwotCi0gIDwhLS0gIyMjIyMjIyMjIyMjIyBJbnRyb2R1Y3Rpb24gLSBwYXJ0ICMjIyMjIyMjIyMjIyMjIyAtLT4KLQotICA8cGFydCBpZD0icGFydC1pbnRyb2R1Y3Rpb24iIHhyZWZsYWJlbD0iSW50cm9kdWN0aW9uIj4KLSAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KLSAgICA8cGFydGludHJvPgotICAgICAgPHBhcmE+PCEtLSBzeW5jaHJvbml6ZSB3aXRoIEFwcERldk1hbiAtLT4KLSAgICAgICAgJkdTdHJlYW1lcjsgaXMgYW4gZXh0cmVtZWx5IHBvd2VyZnVsIGFuZCB2ZXJzYXRpbGUgZnJhbWV3b3JrIGZvciBjcmVhdGluZwotICAgICAgICBzdHJlYW1pbmcgbWVkaWEgYXBwbGljYXRpb25zLiBNYW55IG9mIHRoZSB2aXJ0dWVzIG9mIHRoZSAmR1N0cmVhbWVyOwotICAgICAgICBmcmFtZXdvcmsgY29tZSBmcm9tIGl0cyBtb2R1bGFyaXR5OiAmR1N0cmVhbWVyOyBjYW4gc2VhbWxlc3NseQotICAgICAgICBpbmNvcnBvcmF0ZSBuZXcgcGx1Z2luIG1vZHVsZXMuIEJ1dCBiZWNhdXNlIG1vZHVsYXJpdHkgYW5kIHBvd2VyIG9mdGVuCi0gICAgICAgIGNvbWUgYXQgYSBjb3N0IG9mIGdyZWF0ZXIgY29tcGxleGl0eSAoY29uc2lkZXIsIGZvciBleGFtcGxlLCA8dWxpbmsKLSAgICAgICAgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vd3d3Lm9tZy5vcmcvIj5DT1JCQTwvdWxpbms+KSwgd3JpdGluZyBuZXcKLSAgICAgICAgcGx1Z2lucyBpcyBub3QgYWx3YXlzIGVhc3kuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBndWlkZSBpcyBpbnRlbmRlZCB0byBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoZSAmR1N0cmVhbWVyOyBmcmFtZXdvcmsKLSAgICAgICAgKHZlcnNpb24gJkdTVF9WRVJTSU9OOykgc28geW91IGNhbiBkZXZlbG9wIG5ldyBwbHVnaW5zIHRvIGV4dGVuZCB0aGUKLSAgICAgICAgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gVGhlIGd1aWRlIGFkZHJlc3NlcyBtb3N0IGlzc3VlcyBieSBmb2xsb3dpbmcgdGhlCi0gICAgICAgIGRldmVsb3BtZW50IG9mIGFuIGV4YW1wbGUgcGx1Z2luIC0gYW4gYXVkaW8gZmlsdGVyIHBsdWdpbiAtCi0gICAgICAgIHdyaXR0ZW4gaW4gQy4gSG93ZXZlciwgdGhlIGxhdGVyIHBhcnRzIG9mIHRoZSBndWlkZSBhbHNvIHByZXNlbnQgc29tZQotICAgICAgICBpc3N1ZXMgaW52b2x2ZWQgaW4gd3JpdGluZyBvdGhlciB0eXBlcyBvZiBwbHVnaW5zLCBhbmQgdGhlIGVuZCBvZiB0aGUKLSAgICAgICAgZ3VpZGUgZGVzY3JpYmVzIHNvbWUgb2YgdGhlIFB5dGhvbiBiaW5kaW5ncyBmb3IgJkdTdHJlYW1lcjsuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9wYXJ0aW50cm8+Ci0KLSAgICAmSU5UUk9fUFJFRkFDRTsKLSAgICAmSU5UUk9fQkFTSUNTOwotICA8L3BhcnQ+Ci0KLSAgPCEtLSAjIyMjIyMjIyMjIyMgQnVpbGRpbmcgYSBQbHVnaW4gLSBwYXJ0ICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHBhcnQgaWQ9InBhcnQtYnVpbGRpbmciIHhyZWZsYWJlbD0iQnVpbGRpbmcgYSBQbHVnaW4iPgotICAgIDx0aXRsZT5CdWlsZGluZyBhIFBsdWdpbjwvdGl0bGU+Ci0gICAgPHBhcnRpbnRybz4KLSAgICAgIDxwYXJhPgotICAgICAgICBZb3UgYXJlIG5vdyByZWFkeSB0byBsZWFybiBob3cgdG8gYnVpbGQgYSBwbHVnaW4uIEluIHRoaXMgcGFydCBvZiB0aGUKLSAgICAgICAgZ3VpZGUsIHlvdSB3aWxsIGxlYXJuIGhvdyB0byBhcHBseSBiYXNpYyAmR1N0cmVhbWVyOwotICAgICAgICBwcm9ncmFtbWluZyBjb25jZXB0cyB0byB3cml0ZSBhIHNpbXBsZSBwbHVnaW4uIFRoZSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUKLSAgICAgICAgZ3VpZGUgaGF2ZSBjb250YWluZWQgbm8gZXhwbGljaXQgZXhhbXBsZSBjb2RlLCBwZXJoYXBzIG1ha2luZyB0aGluZ3MgYQotICAgICAgICBiaXQgYWJzdHJhY3QgYW5kIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kLiBJbiBjb250cmFzdCwgdGhpcyBzZWN0aW9uIHdpbGwKLSAgICAgICAgcHJlc2VudCBib3RoIGFwcGxpY2F0aW9ucyBhbmQgY29kZSBieSBmb2xsb3dpbmcgdGhlIGRldmVsb3BtZW50IG9mIGFuCi0gICAgICAgIGV4YW1wbGUgYXVkaW8gZmlsdGVyIHBsdWdpbiBjYWxsZWQgPHF1b3RlPk15RmlsdGVyPC9xdW90ZT4uCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGV4YW1wbGUgZmlsdGVyIGVsZW1lbnQgd2lsbCBiZWdpbiB3aXRoIGEgc2luZ2xlIGlucHV0IHBhZCBhbmQgYSAKLSAgICAgICAgc2luZ2xlCi0gICAgICAgIG91dHB1dCBwYWQuIFRoZSBmaWx0ZXIgd2lsbCwgYXQgZmlyc3QsIHNpbXBseSBwYXNzIG1lZGlhIGFuZCBldmVudCBkYXRhCi0gICAgICAgIGZyb20gaXRzIHNpbmsgcGFkIHRvIGl0cyBzb3VyY2UgcGFkIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBCdXQgYnkgdGhlIGVuZAotICAgICAgICBvZiB0aGlzIHBhcnQgb2YgdGhlIGd1aWRlLCB5b3Ugd2lsbCBsZWFybiB0byBhZGQgc29tZSBtb3JlIGludGVyZXN0aW5nCi0gICAgICAgIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBwcm9wZXJ0aWVzIGFuZCBzaWduYWwgaGFuZGxlcnMuIEFuZCBhZnRlcgotICAgICAgICByZWFkaW5nIHRoZSBuZXh0IHBhcnQgb2YgdGhlIGd1aWRlLCA8eHJlZiBsaW5rZW5kPSJwYXJ0LWFkdmFuY2VkIi8+LCB5b3UKLSAgICAgICAgd2lsbCBiZSBhYmxlIHRvIGFkZCBldmVuIG1vcmUgZnVuY3Rpb25hbGl0eSB0byB5b3VyIHBsdWdpbnMuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9wYXJ0aW50cm8+Ci0KLSAgICAmQlVJTERJTkdfQk9JTEVSOwotICAgICZCVUlMRElOR19QQURTOwotICAgICZCVUlMRElOR19DSEFJTkZOOwotICAgICZCVUlMRElOR19FVkVOVEZOOwotICAgICZCVUlMRElOR19RVUVSWUZOOwotICAgICZCVUlMRElOR19TVEFURTsKLSAgICAmQlVJTERJTkdfUFJPUFM7Ci0gICAgJkJVSUxESU5HX1NJR05BTFM7Ci0gICAgJkJVSUxESU5HX1RFU1RBUFA7Ci0gIDwvcGFydD4KLQotICA8IS0tICMjIyMjIyMjIyMjIyBBZHZhbmNlZCBGaWx0ZXIgQ29uY2VwdHMgLSBwYXJ0ICMjIyMjIyMjIyMjIyMgLS0+Ci0KLSAgPHBhcnQgaWQ9InBhcnQtYWR2YW5jZWQiIHhyZWZsYWJlbD0iQWR2YW5jZWQgRmlsdGVyIENvbmNlcHRzIj4KLSAgICA8dGl0bGU+QWR2YW5jZWQgRmlsdGVyIENvbmNlcHRzPC90aXRsZT4KLSAgICA8cGFydGludHJvPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEJ5IG5vdywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBiYXNpYyBmaWx0ZXIgZWxlbWVudHMgdGhhdCBjYW4KLSAgICAgICAgcmVjZWl2ZSBhbmQgc2VuZCBkYXRhLiBUaGlzIGlzIHRoZSBzaW1wbGUgbW9kZWwgdGhhdCAmR1N0cmVhbWVyOyBzdGFuZHMKLSAgICAgICAgZm9yLiBCdXQgJkdTdHJlYW1lcjsgY2FuIGRvIG11Y2ggbW9yZSB0aGFuIG9ubHkgdGhpcyEgSW4gdGhpcyBjaGFwdGVyLAotICAgICAgICB2YXJpb3VzIGFkdmFuY2VkIHRvcGljcyB3aWxsIGJlIGRpc2N1c3NlZCwgc3VjaCBhcyBzY2hlZHVsaW5nLCBzcGVjaWFsCi0gICAgICAgIHBhZCB0eXBlcywgY2xvY2tpbmcsIGV2ZW50cywgaW50ZXJmYWNlcywgdGFnZ2luZyBhbmQgbW9yZS4gVGhlc2UgdG9waWNzCi0gICAgICAgIGFyZSB0aGUgc3VnYXIgdGhhdCBtYWtlcyAmR1N0cmVhbWVyOyBzbyBlYXN5IHRvIHVzZSBmb3IgYXBwbGljYXRpb25zLgotICAgICAgPC9wYXJhPgotICAgIDwvcGFydGludHJvPgotCi0gICAgJkFEVkFOQ0VEX1JFUVVFU1Q7Ci0gICAgJkFEVkFOQ0VEX1NDSEVEVUxJTkc7Ci0gICAgJkFEVkFOQ0VEX05FR09USUFUSU9OOwotICAgICZBRFZBTkNFRF9BTExPQ0FUSU9OOwotICAgICZBRFZBTkNFRF9UWVBFUzsKLSAgICAmQURWQU5DRURfRVZFTlRTOwotICAgICZBRFZBTkNFRF9DTE9DSzsKLSAgICAmQURWQU5DRURfUU9TOwotICAgICZBRFZBTkNFRF9EUEFSQU1TOwotICAgICZBRFZBTkNFRF9JTlRFUkZBQ0VTOwotICAgICZBRFZBTkNFRF9UQUdHSU5HOwotCi0gICAgPCEtLSBGSVhNRTogYWRkIHF1ZXJ5aW5nLCBldmVudCBoYW5kbGluZyBhbmQgY29udmVyc2lvbiAtLT4KLQotICA8L3BhcnQ+Ci0KLSAgPCEtLSAjIyMjIyMjIyMjIyMgQ3JlYXRpbmcgc3BlY2lhbCBlbGVtZW50IHR5cGVzIC0gcGFydCAjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxwYXJ0IGlkPSJwYXJ0LW90aGVyIiB4cmVmbGFiZWw9IkNyZWF0aW5nIHNwZWNpYWwgZWxlbWVudCB0eXBlcyI+Ci0gICAgPHRpdGxlPkNyZWF0aW5nIHNwZWNpYWwgZWxlbWVudCB0eXBlczwvdGl0bGU+Ci0gICAgPHBhcnRpbnRybz4KLSAgICAgIDxwYXJhPgotICAgICAgICBCeSBub3csIHdlIGhhdmUgbG9va2VkIGF0IHByZXR0eSBtdWNoIGFueSBmZWF0dXJlIHRoYXQgY2FuIGJlIGVtYmVkZGVkCi0gICAgICAgIGludG8gYSAmR1N0cmVhbWVyOyBlbGVtZW50LiBNb3N0IG9mIHRoaXMgaGFzIGJlZW4gZmFpcmx5IGxvdy1sZXZlbCBhbmQKLSAgICAgICAgZ2l2ZW4gZGVlcCBpbnNpZ2h0cyBpbiBob3cgJkdTdHJlYW1lcjsgd29ya3MgaW50ZXJuYWxseS4gRm9ydHVuYXRlbHksCi0gICAgICAgICZHU3RyZWFtZXI7IGNvbnRhaW5zIHNvbWUgZWFzaWVyLXRvLXVzZSBpbnRlcmZhY2VzIHRvIGNyZWF0ZSBzdWNoCi0gICAgICAgIGVsZW1lbnRzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB3ZSB3aWxsIGxvb2sgY2xvc2VyIGF0IHRoZSBlbGVtZW50Ci0gICAgICAgIHR5cGVzIGZvciB3aGljaCAmR1N0cmVhbWVyOyBwcm92aWRlcyBiYXNlIGNsYXNzZXMgKHNvdXJjZXMsIHNpbmtzIGFuZAotICAgICAgICB0cmFuc2Zvcm1hdGlvbiBlbGVtZW50cykuIFdlIHdpbGwgYWxzbyBsb29rIGNsb3NlciBhdCBzb21lIHR5cGVzIG9mCi0gICAgICAgIGVsZW1lbnRzIHRoYXQgcmVxdWlyZSBubyBzcGVjaWZpYyBjb2Rpbmcgc3VjaCBhcyBzY2hlZHVsaW5nLWludGVyYWN0aW9uCi0gICAgICAgIG9yIGRhdGEgcGFzc2luZywgYnV0IHJhdGhlciByZXF1aXJlIHNwZWNpZmljIHBpcGVsaW5lIGNvbnRyb2wgKGUuZy4KLSAgICAgICAgTi10by0xIGVsZW1lbnRzIGFuZCBtYW5hZ2VycykuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9wYXJ0aW50cm8+Ci0KLSAgICAmT1RIRVJfQkFTRTsKLSAgICAmT1RIRVJfT05FVE9OOwotICAgICZPVEhFUl9OVE9PTkU7Ci0gICAgJk9USEVSX01BTkFHRVI7Ci0gIDwvcGFydD4KLQotICA8IS0tICMjIyMjIyMjIyMjIyBBcHBlbmRpY2VzIC0gcGFydCAjIyMjIyMjIyMjIyMjIC0tPgotCi0gIDxwYXJ0IGlkPSJwYXJ0LWFwcGVuZGl4IiB4cmVmbGFiZWw9IkFwcGVuZGljZXMiPgotICAgIDx0aXRsZT5BcHBlbmRpY2VzPC90aXRsZT4KLSAgICA8cGFydGludHJvPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgY2hhcHRlciBjb250YWlucyB0aGluZ3MgdGhhdCBkb24ndCBiZWxvbmcgYW55d2hlcmUgZWxzZS4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3BhcnRpbnRybz4KLQotICAgICAgJkFQUEVORElYX0NIRUNLTElTVDsKLSAgICAgICZBUFBFTkRJWF9QT1JUSU5HOwotICAgICAgJkFQUEVORElYX0xJQ0VOU0lORzsKLSAgICAgICZBUFBFTkRJWF9QWVRIT047Ci0gIDwvcGFydD4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvZG9jcy9wd2cvdGl0bGVwYWdlLnhtbCBiL2RvY3MvcHdnL3RpdGxlcGFnZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDlkMTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wd2cvdGl0bGVwYWdlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTxib29raW5mbz4KLQotICA8YXV0aG9yZ3JvdXA+Ci0gICAgPGF1dGhvcj4KLSAgICAgIDxmaXJzdG5hbWU+UmljaGFyZDwvZmlyc3RuYW1lPgotICAgICAgPG90aGVybmFtZT5Kb2huPC9vdGhlcm5hbWU+Ci0gICAgICA8c3VybmFtZT5Cb3VsdG9uPC9zdXJuYW1lPgotICAgICAgPGF1dGhvcmJsdXJiPgotCTxwYXJhPgotCSAgPGVtYWlsPnJpY2hhcmQtZ3N0QHRhcnRhcnVzLm9yZzwvZW1haWw+Ci0JPC9wYXJhPgotICAgICAgPC9hdXRob3JibHVyYj4KLSAgICA8L2F1dGhvcj4KLQotICAgIDxhdXRob3I+Ci0gICAgICA8Zmlyc3RuYW1lPkVyaWs8L2ZpcnN0bmFtZT4KLSAgICAgIDxzdXJuYW1lPldhbHRoaW5zZW48L3N1cm5hbWU+Ci0gICAgICA8YXV0aG9yYmx1cmI+Ci0JPHBhcmE+Ci0JICA8ZW1haWw+b21lZ2FAdGVtcGxlLWJhcHRpc3QuY29tPC9lbWFpbD4KLQk8L3BhcmE+Ci0gICAgICA8L2F1dGhvcmJsdXJiPgotICAgIDwvYXV0aG9yPgotCi0gICAgPGF1dGhvcj4KLSAgICAgIDxmaXJzdG5hbWU+U3RldmU8L2ZpcnN0bmFtZT4KLSAgICAgIDxzdXJuYW1lPkJha2VyPC9zdXJuYW1lPgotICAgICAgPGF1dGhvcmJsdXJiPgotCTxwYXJhPgotCSAgPGVtYWlsPnN0ZXZlYmFrZXJfb3JnQHlhaG9vLmNvLnVrPC9lbWFpbD4KLQk8L3BhcmE+Ci0gICAgICA8L2F1dGhvcmJsdXJiPgotICAgIDwvYXV0aG9yPgotCi0gICAgPGF1dGhvcj4KLSAgICAgIDxmaXJzdG5hbWU+TGVpZjwvZmlyc3RuYW1lPgotICAgICAgPHN1cm5hbWU+Sm9obnNvbjwvc3VybmFtZT4KLSAgICAgIDxhdXRob3JibHVyYj4KLQk8cGFyYT4KLQkgIDxlbWFpbD5sZWlmQGFtYmllbnQuMnkubmV0PC9lbWFpbD4KLQk8L3BhcmE+Ci0gICAgICA8L2F1dGhvcmJsdXJiPgotICAgIDwvYXV0aG9yPgotCi0gICAgPGF1dGhvcj4KLSAgICAgIDxmaXJzdG5hbWU+Um9uYWxkPC9maXJzdG5hbWU+Ci0gICAgICA8b3RoZXJuYW1lPlMuPC9vdGhlcm5hbWU+Ci0gICAgICA8c3VybmFtZT5CdWx0amU8L3N1cm5hbWU+Ci0gICAgICA8YXV0aG9yYmx1cmI+Ci0JPHBhcmE+Ci0JICA8ZW1haWw+cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PC9lbWFpbD4KLQk8L3BhcmE+Ci0gICAgICA8L2F1dGhvcmJsdXJiPgotICAgIDwvYXV0aG9yPgotCi0gICAgPGF1dGhvcj4KLSAgICAgIDxmaXJzdG5hbWU+U3RlZmFuPC9maXJzdG5hbWU+Ci0gICAgICA8c3VybmFtZT5Lb3N0PC9zdXJuYW1lPgotICAgICAgPGF1dGhvcmJsdXJiPgotCTxwYXJhPgotCSAgPGVtYWlsPmVuc29uaWNAdXNlcnMuc2YubmV0PC9lbWFpbD4KLQk8L3BhcmE+Ci0gICAgICA8L2F1dGhvcmJsdXJiPgotICAgIDwvYXV0aG9yPgotCi0gICAgPGF1dGhvcj4KLSAgICAgIDxmaXJzdG5hbWU+VGltLVBoaWxpcHA8L2ZpcnN0bmFtZT4KLSAgICAgIDxzdXJuYW1lPk3DvGxsZXI8L3N1cm5hbWU+Ci0gICAgICA8YXV0aG9yYmx1cmI+Ci0gICAgICAgIDxwYXJhPgotCSAgICAgIDxlbWFpbD50aW0gY2VudHJpY3VsYXIgLiBuZXQ8L2VtYWlsPgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L2F1dGhvcmJsdXJiPgotICAgIDwvYXV0aG9yPgotICAgIDxhdXRob3I+Ci0gICAgICA8Zmlyc3RuYW1lPldpbTwvZmlyc3RuYW1lPgotICAgICAgPHN1cm5hbWU+VGF5bWFuczwvc3VybmFtZT4KLSAgICAgIDxhdXRob3JibHVyYj4KLSAgICAgICAgPHBhcmE+Ci0JICAgICAgPGVtYWlsPndpbS50YXltYW5zQGdtYWlsLmNvbTwvZW1haWw+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvYXV0aG9yYmx1cmI+Ci0gICAgPC9hdXRob3I+Ci0gIDwvYXV0aG9yZ3JvdXA+Ci0KLSAgPGxlZ2Fsbm90aWNlIGlkPSJtaXNjLWxlZ2Fsbm90aWNlIj4KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgbWF0ZXJpYWwgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kCi0gICAgICBjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGUgT3BlbiBQdWJsaWNhdGlvbiBMaWNlbnNlLCB2MS4wIG9yIGxhdGVyICh0aGUKLSAgICAgIGxhdGVzdCB2ZXJzaW9uIGlzIHByZXNlbnRseSBhdmFpbGFibGUgYXQgPHVsaW5rCi0gICAgICB1cmw9Imh0dHA6Ly93d3cub3BlbmNvbnRlbnQub3JnL29wZW5wdWIvIgotICAgICAgdHlwZT0iaHR0cCI+aHR0cDovL3d3dy5vcGVuY29udGVudC5vcmcvb3BlbnB1Yi88L3VsaW5rPikuCi0gICAgPC9wYXJhPgotICA8L2xlZ2Fsbm90aWNlPgotCi0gIDx0aXRsZT4mR1N0cmVhbWVyOyBQbHVnaW4gV3JpdGVyJ3MgR3VpZGUgKCZHU1RfVkVSU0lPTjspPC90aXRsZT4KLQotPC9ib29raW5mbz4KZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL01ha2VmaWxlLmFtIGIvZG9jcy9zbGlkZXMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYjFjNTguLjAwMDAwMDAKLS0tIGEvZG9jcy9zbGlkZXMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FWFRSQV9ESVNUID0gYWJzdHJhY3QgYWJzdHJhY3Quc2F2ZSBvdXRsaW5lIFJFQURNRSBzbGlkZXMKZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL01ha2VmaWxlLmluIGIvZG9jcy9zbGlkZXMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MGZmOWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9zbGlkZXMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw2NDUgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBkb2NzL3NsaWRlcwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotRVhUUkFfRElTVCA9IGFic3RyYWN0IGFic3RyYWN0LnNhdmUgb3V0bGluZSBSRUFETUUgc2xpZGVzCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3NsaWRlcy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3NsaWRlcy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLXRhZ3MgVEFHUzoKLQotY3RhZ3MgQ1RBR1M6Ci0KLWNzY29wZSBjc2NvcGVsaXN0OgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZG9jcy9zbGlkZXMvUkVBRE1FIGIvZG9jcy9zbGlkZXMvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjNlNmRjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvc2xpZGVzL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotVGhlc2UgYXJlIG5vdGVzIGZvciBzbGlkZXMgdG8gYmUgcHJlc2VudGVkIGF0IHRoZSBPR0kgRElTQyBDb29raWUgVGFsaywKLU9jdCAyMiwgMTk5OS4gIE91dGxpbmUgd2lsbCBiZSB0ZXh0LCBwcm9iYWJseSB3cml0dGVuIHVwIGluIFBvd2VyUG9pbnQgZm9yCi1lYXNlIG9mIHByZXNlbnRhdGlvbiwgYW5kIGNvbnZlcnRlZCB0byAucHMsIC5wZGYsIGFuZCAuaHRtbCBvbmNlIHRoZSB0YWxrCi1oYXMgYmVlbiBnaXZlbi4KZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL2Fic3RyYWN0IGIvZG9jcy9zbGlkZXMvYWJzdHJhY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YmMwMTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9zbGlkZXMvYWJzdHJhY3QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLUludHJvIHRvIEdTdHJlYW1lcgotCi1HU3RyZWFtZXIgaXMgYSBtZWRpYS1zdHJlYW1pbmcgYXJjaGl0ZWN0dXJlIHRoYXQgSSd2ZSBiZWVuIGRldmVsb3BpbmcgYXQKLWhvbWUgZm9yIGFib3V0IDQgbW9udGhzIG5vdy4gSXQncyBkZXNpZ25lZCB0byBvdmVyY29tZSBzb21lIG9mIHRoZQotcHJvYmxlbXMgSSd2ZSBzZWVuIGluIGJvdGggdGhlIE9HSSBQaXBlbGluZSBhbmQgaW4gcmVhZGluZyB0aHJvdWdoCi1EaXJlY3RTaG93IGRvY3MuICBBZnRlciBhbiBvdmVydmlldyBvZiB0aGUgZXhpc3RpbmcgT0dJIFBpcGVsaW5lLCBJJ2xsCi1jb3ZlciBHU3RyZWFtZXIncyBleGlzdGluZyBhbmQgcGxhbm5lZCBhcmNoaXRlY3R1cmUsIGFuZCBsaXN0IHdoYXQgcmVtYWlucwotdG8gYmUgZG9uZS4gIEdTdHJlYW1lciBpcyBtb3N0bHkgZnJvemVuIHJpZ2h0IG5vdywgYXMgaXQgaXMgdG8gYmUgcmVsZWFzZWQKLWFzIDAuMS4wIG9uIE9jdCAzMS4gIE1ham9yIHRoYXcgd2lsbCBvY2N1ciBpbiBhIGZldyB3ZWVrcy4KZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL2Fic3RyYWN0LnNhdmUgYi9kb2NzL3NsaWRlcy9hYnN0cmFjdC5zYXZlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzE3YzVhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvc2xpZGVzL2Fic3RyYWN0LnNhdmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1JbnRybyB0byBHU3RyZWFtZXIKLQotR1N0cmVhbWVyIGlzIGEgbWVkaWEtc3RyZWFtaW5nIGFyY2hpdGVjdHVyZSB0aGF0IEkndmUgYmVlbiBkZXZlbG9waW5nIGF0Ci1ob21lIGZvciBhYm91dCA0IG1vbnRocyBub3cuIEl0J3MgZGVzaWduZWQgdG8gb3ZlcmNvbWUgc29tZSBvZiB0aGUKLXByb2JsZW1zIEkndmUgc2VlbiBpbiBib3RoIHRoZSBPR0kgUGlwZWxpbmUgYW5kIGluIHJlYWRpbmcgdGhyb3VnaAotRGlyZWN0U2hvdyBkb2NzLiAgQWZ0ZXIgYW4gb3ZlcnZpZXcgb2YgdGhlIGV4aXN0aW5nIE9HSSBQaXBlbGluZSwgSSdsbAotY292ZXIgR1N0cmVhbWVyJ3MgZXhpc3RpbmcgYW5kIHBsYW5uZWQgYXJjaGl0ZWN0dXJlLCBhbmQgbGlzdCB3aGF0IHJlbWFpbnMKLXRvIGJlIGRvbmUuICBHU3RyZWFtZXIgaXMgbW9zdGx5IGZyb3plbiByaWdodCBub3csIGFzIGl0IGlzIHRvIGJlIHJlbGVhc2VkCi1hcyAwLjEuMCBvbiBPY3QgMzEuICBNYWpvciB0aGF3IHdpbGwgb2NjdXIgaW4gYSBmZXcgd2Vla3MuCi0KZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL291dGxpbmUgYi9kb2NzL3NsaWRlcy9vdXRsaW5lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGZjOGMwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvc2xpZGVzL291dGxpbmUKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotSW50cm9kdWN0aW9uICgxKQotCShzb3JyeSwgbm8gY29vbCBsb2dvL2dyYXBoaWMgeWV0LCBpZGVhcz8pCi0JR1N0cmVhbWVyIGlzIGEgbGlicmFyeSBhbmQgc2V0IG9mIHRvb2xzIHRvIGJ1aWxkIGFyYml0cmFyeSwKLQkgcmVjb25maWd1cmFibGUgZmlsdGVyIGdyYXBocy4gIEl0IGRlcml2ZXMgZnJvbSB0aGUgT0dJIFBpcGVsaW5lCi0JIGFuZCBEaXJlY3RTaG93IChkb2NzLCBubyBleHBlcmllbmNlKSwgYW5kIGlzIGluIGl0cyBzZWNvbmQKLQkgZ2VuZXJhdGlvbiAoZmlyc3Qgd2FzIGNvbXBsZXRlZC9hYmFuZG9uZWQgKmluKiBBdGxhbnRhIG9uIHRoZQotCSB3YXkgdG8gdGhlIExpbnV4IEV4cG8pLgotCTAuMS4wIHJlbGVhc2UgaXMgc2NoZWR1bGVkIGZvciBPY3QgMzEsIDE5OTkuCi0JV2lsbCBjb3ZlciBCYWNrZ3JvdW5kLCBHb2FscywgRGVzaWduLCBhbmQgRnV0dXJlcwotV2h5IGRvIHdlIG5lZWQgdGhpcz8KLQlsYXVuY2ggcmVhZHMgdGhlIGNvbW1hbmQgbGluZSB0byBjcmVhdGUgdGhlIGdyYXBoLCBmcm9tIC5zbydzCi0JQ29ubmVjdGlvbnMgKHF1ZXVlcykgYXJlIG1hZGUgYnkgbGF1bmNoZXIsIGxvdHMgb2Ygc3dpdGNob3V0IGNvZGUKLQlBcmd1bWVudCBoYW5kbGluZyBpcyBtZXNzeSwgYXQgc3RhcnQtdGltZSBvbmx5Ci0JLi4udGh1cyB0aGVyZSBpcyBiYXNpY2FsbHkgb25seSBvbmUgc3RhdGU6IHJ1bm5pbmcKLQlUaGVyZSBpcyBubyByZWFsIG1hc3RlciBwcm9jZXNzIGNhcGFibGUgb2Ygc2VlaW5nIHRoZSB3aG9sZQotCSBwaXBlbGluZSBhcyBhIGdyYXBoLCBzbyB3aXJpbmcgQS0+Qi0+QyB3aXRoIHNvbWUgYmFja2NoYW5uZWwKLQkgKHBhcmFtZXRlciwgbm90IGRhdGEgc3RyZWFtKSBmcm9tIEMgdG8gQSBpcyBoYXJkCi0JQ2hhbm5lbHMgdHJ5IHRvIGRvIElQQywgZmlsZSwgYW5kIG5ldHdvcmsgSS9PLCBleGNlc3MgYWJzdHJhY3Rpb24KLUdvYWxzICgxKQotCVByb3ZpZGUgYSBjbGVhbiB3YXkgdG8gYm90aCBidWlsZCBncmFwaHMgYW5kIHdyaXRlIG5ldyBlbGVtZW50cwotCU1ha2UgdGhpbmdzIGVhc2llciBieSBwcm92aWRpbmcgYXV0by1jb25uZWN0LCBzdG9jayBzdWItZ3JhcGhzCi0JSW5jbHVkZSB0b29scyBzb3JlbHkgbGFja2luZyBpbiBPR0kgcGlwZWxpbmUsIGxpa2UgZWRpdG9yLCBzYXZlcwotCUVuYWJsZSBMaW51eCB0byBjYXRjaCB1cCB3aXRoIE0kJ3Mgd29ybGQsIGFsbG93aW5nIGNvbW1lcmNpYWwKLQkgcGx1Z2lucyB0byBhIHN0YWJsZSBBUEkgKGFzIG9mIDEuMCkgc28gd2UgZG9uJ3QgZW5kIHVwIHdpdGggTgotCSB3aGVlbHMgZnJvbSBOLU0gZGlmZmVyZW50IHBlb3BsZSAobXVsdGlwbGUgcHJvamVjdHMpCi1PdmVydmlldyAoMSkKLQlPYmplY3QgaGllcmFyY2h5IGNhcGFibGUgb2YgcnVuLXRpbWUgZGlzY292ZXJ5LCBiYXNlZCBvbiBHdGtPYmplY3QKLQlEZWVwbHkgbmVzdGVkIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGVuYWJsZSB0aHJlYWRzLCBibGFja2JveGVzCi0JQnVmZmVycyBjYW4gcG9pbnQgdG8gYW55dGhpbmcsIGFyZSB0eXBlZCwgYW5kIGNhbiBjYXJyeSBtZXRhZGF0YQotCVBsdWdpbnMgY2FuIGJlIGxvYWRlZCBhdCBhbnkgcG9pbnQsIGFuZCByZWdpc3RyeSByZWR1Y2VzIGxvYWRzCi0JU3ltYmlvdGljIGVkaXRvciBsZXRzIHlvdSBkZXNpZ24vcnVuL3NhdmUgZ3JhcGhzIHZpc3VhbGx5Ci1XaGF0IGFyZSBmaWx0ZXIgZ3JhcGhzPyAoMSkKLQlGaWx0ZXJzIHRha2UgZGF0YSBpbiBhbmQgc3BpdCBkYXRhIG91dCwgZG9pbmcgc29tZXRoaW5nIHRvIGl0Ci0JRmlsdGVycyBoYXZlIE4+PTAgaW5wdXRzIGFuZCBNPj0wIG91dHB1dHMKLQlGaWx0ZXIgZ3JhcGhzIGFyZSBtYW55IGZpbHRlcnMgY29ubmVjdGVkIHRvZ2V0aGVyLCBsaWtlIGEgY2lyY3VpdAotCVRoZSBnb2FsIGlzIHR5cGljYWxseSB0byBtb3ZlIGRhdGEgZnJvbSAnbGVmdCcgdG8gJ3JpZ2h0JywgdG93YXJkcwotCSBzb21lIGtpbmQgb2YgdXNlci12aXNpYmxlIGNvbmNsdXNpb24sIGkuZS4gYXVkaW8gb3IgdmlkZW8KLUFyY2hpdGVjdHVyZSAoMz8pCi0gIC0gR3JhcGhzIG9mIEVsZW1lbnRzCi0JKGhlcmUgbGllcyBzY3JlZW4tZ3JhYiBmcm9tIGVkaXRvcikKLQlFbGVtZW50IGlzIGNvcmUgT2JqZWN0LCBCaW5zIGhvbGQgKGFuZCBhcmUpIEVsZW1lbnRzCi0JUGFkcyBhcmUgZnVuZGFtZW50YWwgdG8gYW4gRWxlbWVudCwgYXJlIGNyb3NzLXdpcmVkIHdpdGggcG9pbnRlcnMKLQlTaW5jZSBCaW5zIGhvbGQgRWxlbWVudHMsIGFuZCBCaW5zIGFyZSBFbGVtZW50cywgQmlucyBob2xkIEJpbnMKLQknR2hvc3RwYWRzJyBwcm92aWRlIGludGVyZmFjZXMgZm9yIEJpbnMgd2l0aG91dCBuYXRpdmUgaW50ZXJmYWNlcwotIwlUaHJlYWRzIGFyZSB0eXBlIG9mIEJpbiB0aGF0IGFjdHVhbGx5IHJ1biBpbiBzZXBhcmF0ZSB0aHJlYWRzCi0KLSAgLSBTdGF0ZXMKLQkodGFibGUgb2Ygc3RhdGVzLCBpbnZhcmlhbnRzLCBhbmQgZGVzY3JpcHRpb25zKQotCSAgICBDT01QTEVURQlFbGVtZW50IGhhcyBhbGwgbmVlZGVkIGluZm9ybWF0aW9uCi0JICAgIFJVTk5JTkcJRWxlbWVudCBoYXMgYWNxdWlyZWQgcmVzb3VyY2VzLCByZWFkeSB0byBnbwotCSAgICBESVNDT1ZFUlkJLi4uICh1bmltcGxlbWVudGVkKQotCSAgICBQUkVST0xMCS4uLiAodW5pbXBsZW1lbnRlZCkKLQkgICAgUExBWUlORwlFbGVtZW50IGlzIGFjdGl2ZWx5IHRyYWRpbmcgZGF0YQotCSAgICBQQVVTRUQJU3BlY2lhbCBzdGF0ZSB3aGVyZSB0aGluZ3MganVzdCBkb24ndCBydW4gKD8uLikKLQlTdGF0ZXMgYXJlIHVzZWQgdG8ga2VlcCBlbGVtZW50cyBpbiBjaGVjawotCi0gIC0gQnVmZmVycwotCUJ1ZmZlcnMgZGVzaWduZWQgdG8gYmUgdmVyc2F0aWxlLCB3aXRoIGFyYml0cmFyeSB0eXBpbmcvbWV0YWRhdGEKLQlIYXMgcG9pbnRlciB0byBkYXRhLCBsZW5ndGgsIHNvIGNhbiBwb2ludCB0byBzb21lb25lIGVsc2UncyBkYXRhCi0JVHlwZSBzeXN0ZW0gKGNydWRlIHNvIGZhcikgZW5zdXJlcyBidWZmZXJzIGRvbid0IGdvIHN0cmF5Ci0JTWV0YWRhdGEgY2FuIGJlIGF0dGFjaGVkLCBzdWNoIGFzIHRoZSBhdWRpbyBwYXJhbWV0ZXJzCi0JUmVmLWNvdW50aW5nIGFuZCBjb3B5LW9uLXdyaXRlIGF2b2lkcyBtb3N0IGNvcGllcywgbm90IGNvbXBsZXRlCi0JU3ViLWJ1ZmZlcnMgY2FuIGJlIGNyZWF0ZWQgZnJvbSBiaWdnZXIgYnVmZmVyLCBsaW1pdHRpbmcgY29waWVzCi1HdGsrIE9iamVjdCBTeXN0ZW0gKDIpCi0gIC0gUHJvcwotCUMtbGFuZ3VhZ2Ugb2JqZWN0IHN5c3RlbSwgd2VsbCB0ZXN0ZWQgKEd0ayssIEdub21lLi4uKQotCUFyZ3VtZW50cyBvZiBhbnkgZnVuZGFtZW50YWwgdHlwZSwgcmVhZC93cml0ZSwgYnVpbHQtaW4gaG9va3MKLQlTaWduYWxzIHVzZWQgZm9yIGhvb2tzIGludG8gb2JqZWN0IGV2ZW50cywgb3ZlcnJpZGFibGUKLQlSdW4tdGltZSBkaXNjb3Zlcnkgb2YgYXJncywgc2lnbmFscyAocXVhcmtzKQotICAtIENvbnMKLQlObyBtdWx0aXBsZS1pbmhlcml0YW5jZSwgdGhvdWdoIEkgaGF2ZW4ndCAqbmVlZGVkKiBpdAotCVRoZXJlIGFyZSBzb21lIGhvbGVzIChjYW4ndCBhdHRhY2ggcXVhcmtzIHRvICpldmV5dGhpbmcqKQotCi0gIC0gRGVzaWduCi0JQ2xhc3NlcywgaW5zdGFuY2VzIGFyZSBzdHJ1Y3RzOyAxc3QgaXRlbSBpcyBwYXJlbnQgY2xhc3MKLQlUeXBlIHN5c3RlbSBhbGxvd3MgY2xlYW4gY2FzdGluZywgXl5eXl5eCi0JQXJndW1lbnRzIGFyZSBzZXQvZ2V0IGJ5IHN0cmluZywgdXNlIGZ1bmN0aW9ucyB0byBkbyB0aGUgd29yaywKLQkgdGh1cyBzZXR0aW5nIGFuIGFyZyBtaWdodCB0cmlnZ2VyIGEgcmVkcmF3IG9mIHRoZSBHVUkKLQlTaWduYWxzIGFyZSBzdHJpbmdzLCB1c2UgbWFyc2hhbGxlcnMsIHZhcmlvdXMgZmlyaW5nIG1ldGhvZHMKLUJhc2ljIEdTdHJlYW1lciBvYmplY3RzICgxKQotICAtIEVsZW1lbnRzCi0JKHNob3cgY2xhc3MsaW5zdGFuY2Ugc3RydWN0cykKLQlWZXJ5IHNpbXBsZSwganVzdCBwcm92aWRlcyBhIG1lYW5zIHRvIGhhbmRsZSBwYWRzLCBzdGF0ZQotICAtIEJpbnMKLQkoc2hvdyBjbGFzcyxpbnN0YW5jZSBzdHJ1Y3RzKQotCVN1cHBvcnRzIGNoaWxkcmVuLCBoYW5kbGVzIGdyb3VwIHN0YXRlIHRyYW5zaXRpb25zCi1QYWRzICgxKQotCVBhZCBsaXN0IHR5cGUsIGRpcmVjdGlvbiwgYW5kIGNoYWluaW5nIGZ1bmN0aW9uIHB0cgotCVdoZW4gY3JlYXRpbmcgYSBzaW5rIHBhZCAoIXNyYykgeW91IHNldCB0aGUgY2hhaW5pbmcgZnVuY3Rpb24KLQlnc3RfcGFkX2Nvbm5lY3QoKSBzZXRzIHRoZSBwZWVycywgYW5kIGNvcGllcyBjaGFpbiBmdW5jdGlvbiB0byBzcmMKLQlQYXNzaW5nIGJ1ZmZlciB0byBhIHNyYyBwYWQgdHJhbnNwYXJlbnRseSBjYWxscyB0aGUgY2hhaW4gZnVuY3Rpb24KLQkoZ3JhcGggZ29lcyBoZXJlLi4uKQotU291cmNlcyAoMSkKLQlTb3VyY2UgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIHB1c2ggZGF0YQotCVJlZ3VsYXIgcHVzaCgpIGZ1bmN0aW9uIGp1c3QgdGFrZXMgbmV4dCBOIGJ5dGVzIGFuZCBzZW5kcyB0aGVtCi0JQXN5bmMgcHVzaF9yZWdpb24oKSBncmFicyBOIGJ5dGVzIGF0IG9mZnNldCBPIGFuZCBzZW5kcyB0aGVtCi0JRU9GIHNpZ25hbCBbd2lsbF0gcmVzZXQgdGhlIHN0YXRlIGZyb20gUExBWUlORyBkb3duIHRvICFSVU5OSU5HCi0JImxvY2F0aW9uIiBhcmd1bWVudCBpcyBnbG9iYWwgYnkgY29udmVudGlvbiwgZm9yIGZpbGVuYW1lcy4uLlVSSXMKLUNvbm5lY3Rpb25zICgxKQotCVNwZWNpYWwgdHlwZSBvZiBGaWx0ZXIgdGhhdCAKLVRocmVhZHMgKDEpCi0JU3BlY2lhbCBjYXNlIG9mIEJpbiB0aGF0IGFjdHVhbGx5IGNyZWF0ZXMgYSB0aHJlYWQgdHJhbnNwYXJlbnRseQotCVdoZW4gUlVOTklORywgdGhyZWFkIGV4aXN0cywgbXV0ZXgvY29uZCB1c2VkIHRvIGdvIFshXVBMQVlJTkcKLQlBdXRvbWF0aWNhbGx5IGRldGVybWluZXMgaG93IHRvIHN0YXJ0IHN1Yi1ncmFwaAotCQlMb29rcyBmb3IgYm90aCBTb3VyY2VzIGFuZCBFbGVtZW50cyB3aXJlZCB0byBDb25uZWN0aW9uCi0JV2lsbCBjb29wZXJhdGUgd2l0aCBQaXBlbGluZXMgd2hlbiB0aHJlYWRpbmcgaXMgbm90IGF2YWlsYWJsZQotVHlwaW5nIGFuZCBNZXRhZGF0YSAoMSkKLSAgLSBUeXBlcwotCUJhc2VkIG9uIE1JTUUgdHlwZXMsIHNldCB1cCBhcyBxdWFya3MsIGFuZCBkZWFsdCB3aXRoIGFzIGludAotCVVzYWJsZSBlbnRpcmVseSBhdCBydW4tdGltZSwgc2luY2UgdGhleSdyZSByZWdpc3RlcmFibGUgYnkgcGx1Z2lucwotICAtIE1ldGFkYXRhCi0JQWxzbyByZWdpc3RlcmVkIGFzIGFuIGludCwgYnV0IG11c3QgYmUgY29tcGlsZSB0aW1lIGR1ZSB0byBzdHJ1Y3RzCi0JSGF2ZSByZWZjb3VudHMgYW5kIENvVyBzZW1hbnRpY3MsIHNpbmNlIHRoZXkgdHJhdmVsIHdpdGggYnVmZmVycwotUGx1Z2lucyAoMSkKLQlQbHVnaW4gYXJjaGl0ZWN0dXJlIGRlc2lnbmVkIGFyb3VuZCBjbGFzcyBzeXN0ZW0KLQlBcmd1bWVudHMgYW5kIHNpZ25hbHMgcHJvdmlkZSBpbnRlcmZhY2Ugb3ZlciBzdGFuZGFyZCBiYXNlIGNsYXNzCi0JRWFjaCBFbGVtZW50IGRlZmluZWQgYnkgRWxlbWVudEZhY3RvcnksIHdoaWNoIGlzIHF1ZXJpZWQgYnkgbmFtZQotCUF0IHBsdWdpbiBsb2FkLCBhbnkgbnVtYmVyIG9mIEVsZW1lbnRGYWN0b3JpZXMgYW5kIFR5cGVzIHJlZ2lzdGVyZWQKLQlFbGVtZW50IHJlZ2lzdGVycyBhZ2FpbnN0IFR5cGUgYXMgc291cmNlIG9yIHNpbmsKLUVkaXRvciAoMis/KQotCShzaG93IGZpbHRlciBncmFwaCBzbmFwc2hvdCwgYSBkaWZmZXJlbnQgb25lLCBtb3JlIGNvbXBsZXgpCi0JQnVpbHQgYXMgYSBwYXJhbGxlbCBvYmplY3QgaGllcmFyY2h5IG9uIHRvcCBvZiBHTk9NRSBDYW52YXMKLQlFdmVyeSBvYmplY3QgaW4gZmlsdGVyIGdyYXBoIGhhcyBlcXVpdmFsZW50IGluIGVkaXRvciwgcGx1cyBzb21lCi0JQ2FudmFzIGlzIGRlc2lnbmVkIHdpdGggZ3JvdXBzIGFuZCBzaWduYWwtcHJvcGFnYXRpb24sIHNvLi4uCi0JV2h5IG5vdCBidWlsZCB0aGUgd2hvbGUgdGhpbmcgYXMgc3ViY2xhc3NlcyBvZiBDYW52YXNHcm91cD8KLQotCS4uLmJlY2F1c2UgdXBkYXRlcyBnZXQgbWVzc3kvcmVjdXJzaXZlICh0aGUgd2F5IEkgKndhcyogZG9pbmcgaXQpCi0JU29sdXRpb24gaXMgdG8gbW9kaWZ5IG9iamVjdHMgc28gdGhleSBvd24gR3JvdXAgcmF0aGVyIHRoYW4gYmVpbmcKLQlSZWxhdGl2ZWx5IHRyaXZpYWwgbW9kaWZpY2F0aW9uLCBidXQgcmVxdWlyZXMgbG90cyBvZiByZXBvaW50ZXJpbmcKLQlTdGlsbCBhIGdlbmVhbG9naWNhbCBtZXNzIG9mIHBhcmVudHMgYW5kIGNoaWxkcmVuLi4uCi1YTUwKLQlUaGUgZ29hbCBpcyB0byB1c2UgWE1MIGhlYXZpbHksIHdpdGggYW4gZXllIHRvd2FyZHMgRE9NCi0JVXNlZCBmb3IgYm90aCBzYXZpbmcgYW5kIHByb3ZpZGluZyBwcmUtYnVpbGQgY29tcG9uZW50cwotCUJvdGggZ3JhcGggYW5kIGVkaXRvciB3aWxsIGhhdmUgbmFtZXNwYWNlLCB0aGV5J2xsIGludGVybGVhdmUKLQlBIGdlbmVyaWMgc2F2ZSBmdW5jdGlvbiB3aWxsIGV4aXN0IGZvciBFbGVtZW50cywgd2l0aCBob29rcwotCVNhdmluZyBhbiBFZGl0b3JFbGVtZW50IHdpbGwgYWxzbyBzYXZlIEVsZW1lbnQKLQlBbHNvIHVzZWQgZm9yIGEgcGx1Z2luIHJlZ2lzdHJ5LCB0byBhdm9pZCBsb2FkaW5nIGFsbCBwbHVnaW5zCi0KLQotCi0KLWxlYWt5IGJ1Y2tldCBpcyB0cml2aWFsCi1hcHBsaWNhdGlvbnMgLSBnZW5lcmljIGNvbmZlcmVuY2luZyB0b29sIChyZXBsdWdnYWJsZSBjb2RlY3MpLCBtaXhpbmcKLSBlbnZpcm9ubWVudCAoZGF0YSBmbG93IGdyYXBocykKZGlmZiAtLWdpdCBhL2RvY3Mvc2xpZGVzL3NsaWRlcyBiL2RvY3Mvc2xpZGVzL3NsaWRlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQzNDgxMS4uMDAwMDAwMAotLS0gYS9kb2NzL3NsaWRlcy9zbGlkZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1JbnRyb2R1Y3Rpb24KLVdoeSBkbyB3ZSBuZWVkIHRoaXM/Ci1Hb2FscwotT3ZlcnZpZXcKLVdoYXQgYXJlIGZpbHRlciBncmFwaHM/Ci1HdGsrIE9iamVjdCBTeXN0ZW0KLUFyY2hpdGVjdHVyZSAtIEVsZW1lbnRzCi1QYWRzCi1BcmNoaXRlY3R1cmUgLSBCdWZmZXJzCi1UeXBpbmcgYW5kIE1ldGFkYXRhCi1Tb3VyY2VzCi1UaHJlYWRzIGFuZCBDb25uZWN0aW9ucwotQXJjaGl0ZWN0dXJlIC0gU3RhdGVzCi1QbHVnaW5zCi1FZGl0b3IKLVhNTAotRnV0dXJlcwpkaWZmIC0tZ2l0IGEvZG9jcy91cmwuZW50aXRpZXMgYi9kb2NzL3VybC5lbnRpdGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJmYjUwZS4uMDAwMDAwMAotLS0gYS9kb2NzL3VybC5lbnRpdGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCEtLSBUaGVzZSBlbnRpdGllcyBjb3VsZCBiZSBvdmVycmlkZGVuIGZvciBpbnN0YWxsZWQgZG9jcyAtLT4KLTwhRU5USVRZIFVSTEFQSSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL3N0YWJsZS9nc3RyZWFtZXIvaHRtbC8iPgotCmRpZmYgLS1naXQgYS9kb2NzL3ZlcnNpb24uZW50aXRpZXMuaW4gYi9kb2NzL3ZlcnNpb24uZW50aXRpZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlOGVkNGIuLjAwMDAwMDAKLS0tIGEvZG9jcy92ZXJzaW9uLmVudGl0aWVzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08IUVOVElUWSBHU1RfQVBJX1ZFUlNJT04gIkBHU1RfQVBJX1ZFUlNJT05AIj4KLTwhRU5USVRZIEdTVF9WRVJTSU9OICJAUEFDS0FHRV9WRVJTSU9OQCI+Ci08IUVOVElUWSBHU1RfUExVR0lOU19ESVIgIkBQTFVHSU5ESVJAIj4KZGlmZiAtLWdpdCBhL2RvY3MveHNsL01ha2VmaWxlLmFtIGIvZG9jcy94c2wvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZTY3MzMuLjAwMDAwMDAKLS0tIGEvZG9jcy94c2wvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLVhTTD0kKHdpbGRjYXJkICoueHNsKQotCi1FWFRSQV9ESVNUID0gJChYU0wpCmRpZmYgLS1naXQgYS9kb2NzL3hzbC9NYWtlZmlsZS5pbiBiL2RvY3MveHNsL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjZjNmI2Li4wMDAwMDAwCi0tLSBhL2RvY3MveHNsL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNjQ2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZG9jcy94c2wKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotWFNMID0gJCh3aWxkY2FyZCAqLnhzbCkKLUVYVFJBX0RJU1QgPSAkKFhTTCkKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGRvY3MveHNsL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MveHNsL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotdGFncyBUQUdTOgotCi1jdGFncyBDVEFHUzoKLQotY3Njb3BlIGNzY29wZWxpc3Q6Ci0KLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAotCWNzY29wZWxpc3QtYW0gY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9kb2NzL3hzbC9hZG1vbi54c2wgYi9kb2NzL3hzbC9hZG1vbi54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOTBjZDAuLjAwMDAwMDAKLS0tIGEvZG9jcy94c2wvYWRtb24ueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gICAgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPScxLjAnPgotCi08IS0tIFR1cm4gb24gYWRtb25pdGlvbiBncmFwaGljcy4gLS0+Ci08eHNsOnBhcmFtIG5hbWU9ImFkbW9uLmdyYXBoaWNzIiBzZWxlY3Q9IicxJyIvPgotPHhzbDpwYXJhbSBuYW1lPSJhZG1vbi5ncmFwaGljcy5wYXRoIiBzZWxlY3Q9IidzdHlsZXNoZWV0LWltYWdlcy8nIi8+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+Ci0KZGlmZiAtLWdpdCBhL2RvY3MveHNsL2Nzcy54c2wgYi9kb2NzL3hzbC9jc3MueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDVhYWIyLi4wMDAwMDAwCi0tLSBhL2RvY3MveHNsL2Nzcy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgotICAgICAgICAgICAgICAgIHZlcnNpb249JzEuMCc+Ci0KLTwhLS0gVXNlIGFuIEhUTUwgQ1NTIHN0eWxlc2hlZXQuIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ2Jhc2UuY3NzJyIvPgotCi08L3hzbDpzdHlsZXNoZWV0PgotCmRpZmYgLS1naXQgYS9kb2NzL3hzbC9maWxlZXh0LnhzbCBiL2RvY3MveHNsL2ZpbGVleHQueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzRlNGNiLi4wMDAwMDAwCi0tLSBhL2RvY3MveHNsL2ZpbGVleHQueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gICAgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPScxLjAnPgotCi08IS0tIFRoaXMgc2V0cyB0aGUgZXh0ZW5zaW9uIGZvciBIVE1MIGZpbGVzIHRvICIuaHRtbCIuICAgICAtLT4KLTwhLS0gKFRoZSBzdHlsZXNoZWV0J3MgZGVmYXVsdCBmb3IgWEhUTUwgZmlsZXMgaXMgIi54aHRtIi4pIC0tPgotPHhzbDpwYXJhbSBuYW1lPSJodG1sLmV4dCIgc2VsZWN0PSInLmh0bWwnIi8+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+Ci0KZGlmZiAtLWdpdCBhL2RvY3MveHNsL2ZvLnhzbCBiL2RvY3MveHNsL2ZvLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE5ODQwOS4uMDAwMDAwMAotLS0gYS9kb2NzL3hzbC9mby54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPScxLjAnCi0gICAgICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS90cmFuc2l0aW9uYWwiCi0gICAgICAgICAgICAgICAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9IiNkZWZhdWx0Ij4KLQotPCEtLSBUaGlzIGZpbGUgaXMgZm9yIGN1c3RvbWl6aW5nIHRoZSBkZWZhdWx0IFhTTCBzdHlsZXNoZWV0cy4gLS0+Ci08IS0tIFdlIGluY2x1ZGUgdGhlbSBoZXJlICh0aGlzIG9uZSBpcyBmb3IgcHJpbnQgb3V0cHV0KTogICAgICAtLT4KLTx4c2w6aW1wb3J0Ci0gaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNTAuMC9mby9kb2Nib29rLnhzbCIvPgotCi08IS0tIC4uIGFuZCBjdXN0b21pemUgdGhlbSBoZXJlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTx4c2w6aW5jbHVkZSBocmVmPSJ1bGluay54c2wiLz4KLTx4c2w6aW5jbHVkZSBocmVmPSJrZXljb21iby54c2wiLz4KLTx4c2w6cGFyYW0gbmFtZT0iYm9keS5mb250LmZhbWlseSIgc2VsZWN0PSInc2VyaWYnIi8+Ci08eHNsOnBhcmFtIG5hbWU9InNhbnMuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3NhbnMtc2VyaWYnIi8+Ci08eHNsOnBhcmFtIG5hbWU9InRpdGxlLmZvbnQuZmFtaWx5IiBzZWxlY3Q9IidzYW5zLXNlcmlmJyIvPgotCi08L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvZG9jcy94c2wvaHRtbC54c2wgYi9kb2NzL3hzbC9odG1sLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkwOGYyYi4uMDAwMDAwMAotLS0gYS9kb2NzL3hzbC9odG1sLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCc/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICAgICAgICAgICAgIHZlcnNpb249JzEuMCcKLSAgICAgICAgICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL3RyYW5zaXRpb25hbCIKLSAgICAgICAgICAgICAgICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iI2RlZmF1bHQiPgotCi08IS0tIFRoaXMgZmlsZSBpcyBmb3IgY3VzdG9taXppbmcgdGhlIGRlZmF1bHQgWFNMIHN0eWxlc2hlZXRzLiAtLT4KLTwhLS0gV2UgaW5jbHVkZSB0aGVtIGhlcmUgKHRoaXMgb25lIGlzIGZvciBIVE1MIG91dHB1dCk6ICAgICAgIC0tPgotPHhzbDppbXBvcnQKLSBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9jaHVuay54c2wiLz4KLQotPCEtLSAuLiBhbmQgY3VzdG9taXplIHRoZW0gaGVyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08eHNsOmluY2x1ZGUgaHJlZj0iZmlsZWV4dC54c2wiLz4KLTx4c2w6aW5jbHVkZSBocmVmPSJrZXljb21iby54c2wiLz4KLTwhLS0gPHhzbDppbmNsdWRlIGhyZWY9ImFkbW9uLnhzbCIvPiAtLT4KLTx4c2w6aW5jbHVkZSBocmVmPSJjc3MueHNsIi8+Ci0KLTx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuY29tcG9uZW50LnRvYyIgc2VsZWN0PSIwIi8+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2NzL3hzbC9rZXljb21iby54c2wgYi9kb2NzL3hzbC9rZXljb21iby54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMTI1MGEuLjAwMDAwMDAKLS0tIGEvZG9jcy94c2wva2V5Y29tYm8ueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gICAgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPScxLjAnPgotCi08IS0tIFRoZXJlIGlzIGEgYnVnIGluIGRvY2Jvb2steHNsLTEuNDU7IHdvcmsgYXJvdW5kIGl0IGhlcmUuIC0tPgotPCEtLSBBbHNvIGNoYW5nZSBpdCBzbGlnaHRseSBmb3IgZW1hY3Mga2V5IGRlc2NyaXB0aW9ucy4gICAgICAtLT4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9ImtleWNvbWJvIj4KLSA8eHNsOnZhcmlhYmxlIG5hbWU9ImFjdGlvbiIgc2VsZWN0PSJAYWN0aW9uIi8+Ci0gPHhzbDp2YXJpYWJsZSBuYW1lPSJqb2luY2hhciI+Ci0gIDx4c2w6Y2hvb3NlPgotICAgPHhzbDp3aGVuIHRlc3Q9IiRhY3Rpb249J3NlcSciPjx4c2w6dGV4dD4gPC94c2w6dGV4dD48L3hzbDp3aGVuPgotICAgPHhzbDp3aGVuIHRlc3Q9IiRhY3Rpb249J3NpbXVsJyI+LTwveHNsOndoZW4+Ci0gICA8eHNsOm90aGVyd2lzZT4tPC94c2w6b3RoZXJ3aXNlPgotICA8L3hzbDpjaG9vc2U+Ci0gPC94c2w6dmFyaWFibGU+Ci0gPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii4vKiI+Ci0gIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT4xIj4KLSAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkam9pbmNoYXIiLz4KLSAgPC94c2w6aWY+Ci0gIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIvPgotIDwveHNsOmZvci1lYWNoPgotPC94c2w6dGVtcGxhdGU+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+Ci0KZGlmZiAtLWdpdCBhL2RvY3MveHNsL3VsaW5rLnhzbCBiL2RvY3MveHNsL3VsaW5rLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IxZWU0OC4uMDAwMDAwMAotLS0gYS9kb2NzL3hzbC91bGluay54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgotICAgICAgICAgICAgICAgIHZlcnNpb249JzEuMCc+Ci0KLTwhLS0gVGhpcyBhbHRlcnMgdGhlIHJlbmRlcmluZyBvZiBVUkxzLiAgTGV0J3MgZm9sbG93IFJGQyAyMzk2IC0tPgotPCEtLSBndWlkZWxpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08eHNsOnRlbXBsYXRlIG1hdGNoPSJ1bGluayI+Ci0gPGZvOmJhc2ljLWxpbmsgZXh0ZXJuYWwtZGVzdGluYXRpb249IntAdXJsfSIKLSAgICAgICAgICAgICAgICB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJ4cmVmLnByb3BlcnRpZXMiPgotICA8eHNsOmNob29zZT4KLSAgIDx4c2w6d2hlbiB0ZXN0PSJjb3VudChjaGlsZDo6bm9kZSgpKT0wIj4KLSAgICA8eHNsOnRleHQ+Jmx0OzwveHNsOnRleHQ+Ci0gICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB1cmwiLz4KLSAgICA8eHNsOnRleHQ+Jmd0OzwveHNsOnRleHQ+Ci0gICA8L3hzbDp3aGVuPgotICAgPHhzbDpvdGhlcndpc2U+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgotICAgPC94c2w6b3RoZXJ3aXNlPgotICA8L3hzbDpjaG9vc2U+Ci0gPC9mbzpiYXNpYy1saW5rPgotIDx4c2w6aWYgdGVzdD0iY291bnQoY2hpbGQ6Om5vZGUoKSkgIT0gMCI+Ci0gIDxmbzppbmxpbmUgaHlwaGVuYXRlPSJmYWxzZSI+Ci0gICA8eHNsOnRleHQ+IGF0ICZsdDs8L3hzbDp0ZXh0PgotICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB1cmwiLz4KLSAgIDx4c2w6dGV4dD4mZ3Q7PC94c2w6dGV4dD4KLSAgPC9mbzppbmxpbmU+Ci0gPC94c2w6aWY+Ci08L3hzbDp0ZW1wbGF0ZT4KLQotPC94c2w6c3R5bGVzaGVldD4KLQpkaWZmIC0tZ2l0IGEvZ3N0LWVsZW1lbnQtY2hlY2subTQgYi9nc3QtZWxlbWVudC1jaGVjay5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFkNDIxZi4uMDAwMDAwMAotLS0gYS9nc3QtZWxlbWVudC1jaGVjay5tNAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLWRubCBQZXJmb3JtIGEgY2hlY2sgZm9yIGEgR1N0cmVhbWVyIGVsZW1lbnQgdXNpbmcgZ3N0LWluc3BlY3QteC55Ci1kbmwKLWRubCBHU1RfRUxFTUVOVF9DSEVDSyhFTEVNRU5ULU5BTUUsIE1JTi1WRVJTSU9OLCBBQ1RJT04tSUYtRk9VTkQsIEFDVElPTi1JRi1OT1QtRk9VTkQpCi1kbmwKLWRubCBFTEVNRU5ULU5BTUUgICAgICAgIDogZWxlbWVudCBmYWN0b3J5IG5hbWUgKG1hbmRhdG9yeSkKLWRubCBNSU4tVkVSU0lPTiAgICAgICAgIDogbWluaW11bSB2ZXJzaW9uIHJlcXVpcmVkLCBlLmcuIDEuMCBvciAxLjAuNSAobWFuZGF0b3J5KQotZG5sIEFDVElPTi1JRl9GT1VORCAgICAgOiBhY3Rpb24gaWYgZWxlbWVudCBleGlzdHMgYW5kIGlzIG9mIHRoZSBkZXNpcmVkIHZlcnNpb24KLWRubCBBQ1RJT04tSUYtTk9ULUZPVU5EIDogYWN0aW9uIGlmIGVsZW1lbnQgZG9lcyBub3QgZXhpc3Qgb3IgaXMgdG9vIG9sZAotZG5sCi1kbmwgZ3N0YXBpdmVyc2lvbj1gZWNobyAkMiB8IHRyICcuJyAnXG4nIHwgaGVhZCAtbiAyIHwgdHIgJ1xuJyAnLicgfCBzZWQgJ3MvXC4kLy8nYAotCi1BQ19ERUZVTihbR1NUX0VMRU1FTlRfQ0hFQ0tdLAotWwotICBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKLQotICBnc3RhcGl2ZXJzaW9uPWBlY2hvICIkMiIgfCB3aGlsZSBJRlM9LiByZWFkIGEgYjsgZG8gZWNobyAiJGEuMCI7IGRvbmVgCi0gIGdzdHRvb2xzZGlyPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXRvb2xzZGlyIGdzdHJlYW1lci0kZ3N0YXBpdmVyc2lvbmAKLSAgaWYgdGVzdCAieCRnc3R0b29sc2RpciIgIT0gIngiOyB0aGVuCi0gICAgZ3N0aW5zcGVjdD0iJGdzdHRvb2xzZGlyL2dzdC1pbnNwZWN0LSRnc3RhcGl2ZXJzaW9uIgotICAgIEFDX01TR19DSEVDS0lORyhHU3RyZWFtZXIgJGdzdGFwaXZlcnNpb24gZWxlbWVudCAkMSA+PSAkMikKLSAgICBpZiBbICRnc3RpbnNwZWN0IC0tZXhpc3RzIC0tYXRsZWFzdC12ZXJzaW9uPSQyICQxIF07IHRoZW4KLSAgICAgIEFDX01TR19SRVNVTFQoW2ZvdW5kXSkKLSAgICAgICQzCi0gICAgZWxzZQotICAgICAgaWYgWyAkZ3N0aW5zcGVjdCAtLWV4aXN0cyAkMSBdOyB0aGVuCi0gICAgICAgIEFDX01TR19SRVNVTFQoW2ZvdW5kLCBidXQgdG9vIG9sZF0pCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19SRVNVTFQoW25vdCBmb3VuZF0pCi0gICAgICBmaQotICAgICAgJDQKLSAgICBmaQotICBmaQotXSkKZGlmZiAtLWdpdCBhL2dzdC9NYWtlZmlsZS5hbSBiL2dzdC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZlOTQ3YS4uMDAwMDAwMAotLS0gYS9nc3QvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotbGliX0xUTElCUkFSSUVTID0gbGliZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi0KLWlmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCi1HU1RfUkVHSVNUUllfU1JDID0KLWVsc2UKLUdTVF9SRUdJU1RSWV9TUkMgPSBnc3RyZWdpc3RyeWJpbmFyeS5jCi1lbmRpZgotCi1pZiBHU1RfRElTQUJMRV9QQVJTRQotU1VCRElSU19QQVJTRSA9Ci1HU1RfUEFSU0VfTEEgPQotZWxzZQotU1VCRElSU19QQVJTRSA9IHBhcnNlCi1HU1RfUEFSU0VfTEEgPSBwYXJzZS9saWJnc3RwYXJzZS5sYQotZW5kaWYKLQotaWYgR1NUX0RJU0FCTEVfUExVR0lOCi1HU1RfUExVR0lOX1NSQyA9Ci1lbHNlCi1HU1RfUExVR0lOX1NSQyA9IGdzdHBsdWdpbi5jCi1lbmRpZgotCi1pZiAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi1TVUJESVJTX1BSSU5URiA9IHByaW50ZgotR1NUX1BSSU5URl9MQSA9IHByaW50Zi9saWJnc3RwcmludGYubGEKLWVsc2UKLVNVQkRJUlNfUFJJTlRGID0KLUdTVF9QUklOVEZfTEEgPQotZW5kaWYKLQotU1VCRElSUyA9ICQoU1VCRElSU19QQVJTRSkgJChTVUJESVJTX1BSSU5URikKLQotRElTVF9TVUJESVJTID0gcGFyc2UgcHJpbnRmCi0KLSMgbWFrZSB2YXJpYWJsZXMgZm9yIGFsbCBnZW5lcmF0ZWQgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMgdG8gbWFrZSB0aGUKLSMgZGlzdGluY3Rpb24gY2xlYXIKLQotYnVpbHRfaGVhZGVyc19jb25maWd1cmUgPSBnc3R2ZXJzaW9uLmggZ3N0Y29uZmlnLmgKLWJ1aWx0X2hlYWRlcl9tYWtlID0gZ3N0ZW51bXR5cGVzLmgKLWJ1aWx0X3NvdXJjZV9tYWtlID0gZ3N0ZW51bXR5cGVzLmMKLQotRVhUUkFfbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBcCi0JZ3N0cmVnaXN0cnliaW5hcnkuYwotCi0KLSMgdGVtcG9yYXJpbHkgbm90IHVzZWQKLSMJZ2xpYi1jb21wYXQuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUyA9IFwKLQlnc3QuYwkJCVwKLQlnc3RvYmplY3QuYwkJXAotCWdzdGFsbG9jYXRvci5jCQlcCi0JZ3N0YmluLmMJCVwKLQlnc3RidWZmZXIuYwkJXAotCWdzdGJ1ZmZlcmxpc3QuYwkJXAotCWdzdGJ1ZmZlcnBvb2wuYwkJXAotCWdzdGJ1cy5jCQlcCi0JZ3N0Y2Fwcy5jCQlcCi0JZ3N0Y2Fwc2ZlYXR1cmVzLmMJXAotCWdzdGNoaWxkcHJveHkuYwkJXAotCWdzdGNsb2NrLmMJCVwKLQlnc3RjbG9jay1saW5yZWcuYwlcCi0JZ3N0Y29udGV4dC5jIFwKLQlnc3Rjb250cm9sYmluZGluZy5jIFwKLQlnc3Rjb250cm9sc291cmNlLmMgXAotCWdzdGRhdGV0aW1lLmMJCVwKLQlnc3RkZWJ1Z3V0aWxzLmMJCVwKLQlnc3RkZXZpY2UuYwkJXAotCWdzdGRldmljZW1vbml0b3IuYyAJXAotCWdzdGRldmljZXByb3ZpZGVyLmMJXAotCWdzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5jIFwKLQlnc3RlbGVtZW50LmMJCVwKLQlnc3RlbGVtZW50ZmFjdG9yeS5jCVwKLQlnc3RlcnJvci5jCQlcCi0JZ3N0ZXZlbnQuYwkJXAotCWdzdGZvcm1hdC5jCQlcCi0JZ3N0Z2hvc3RwYWQuYwkJXAotCWdzdGluZm8uYwkJXAotCWdzdGl0ZXJhdG9yLmMJCVwKLQlnc3RhdG9taWNxdWV1ZS5jCVwKLQlnc3RtZXNzYWdlLmMJCVwKLQlnc3RtZXRhLmMJCVwKLQlnc3RtZW1vcnkuYwkJXAotCWdzdG1pbmlvYmplY3QuYwkJXAotCWdzdHBhZC5jCQlcCi0JZ3N0cGFkdGVtcGxhdGUuYwlcCi0JZ3N0cGFyYW1zcGVjcy5jCQlcCi0JZ3N0cGlwZWxpbmUuYwkJXAotCWdzdHBsdWdpbi5jCQlcCi0JZ3N0cGx1Z2luZmVhdHVyZS5jCVwKLQlnc3RwbHVnaW5sb2FkZXIuYwlcCi0JZ3N0cG9sbC5jCQlcCi0JZ3N0cHJlc2V0LmMgICAgICAgICAgICAgXAotCWdzdHByb3RlY3Rpb24uYyAgICAgICAgIFwKLQlnc3RxdWFyay5jCQlcCi0JZ3N0cXVlcnkuYwkJXAotCWdzdHJlZ2lzdHJ5LmMJCVwKLQlnc3RyZWdpc3RyeWNodW5rcy5jCVwKLQlnc3RzYW1wbGUuYwkJXAotCWdzdHNlZ21lbnQuYwkJXAotCWdzdHN0cmVhbWNvbGxlY3Rpb24uYwlcCi0JZ3N0c3RyZWFtcy5jCQlcCi0JZ3N0c3RydWN0dXJlLmMJCVwKLQlnc3RzeXN0ZW1jbG9jay5jCVwKLQlnc3R0YWdsaXN0LmMJCVwKLQlnc3R0YWdzZXR0ZXIuYwkJXAotCWdzdHRhc2suYwkJXAotCWdzdHRhc2twb29sLmMJCVwKLQlnc3R0b2MuYwkJXAotCWdzdHRvY3NldHRlci5jCQlcCi0JZ3N0dHJhY2VyLmMJCVwKLQlnc3R0cmFjZXJmYWN0b3J5LmMJXAotCWdzdHRyYWNlcnJlY29yZC5jCQlcCi0JZ3N0dHJhY2VydXRpbHMuYwkJXAotCWdzdHR5cGVmaW5kLmMJCVwKLQlnc3R0eXBlZmluZGZhY3RvcnkuYwlcCi0JZ3N0dXJpLmMJCVwKLQlnc3R1dGlscy5jCQlcCi0JZ3N0dmFsdWUuYwkJXAotCWdzdHBhcnNlLmMJCVwKLQkkKEdTVF9SRUdJU1RSWV9TUkMpCi0KLSMgZG8gbm90IHB1dCBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIHRoYXQgYXJlIGdlbmVyYXRlZAotbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTID0gJChidWlsdF9zb3VyY2VfbWFrZSkKLQotIyBCVUlMVF9TT1VSQ0VTIGFyZSBidWlsdCBvbiBtYWtlIGFsbC9jaGVjay9pbnN0YWxsIGJlZm9yZSBhbGwgb3RoZXIgdGFyZ2V0cwotQlVJTFRfU09VUkNFUyA9IFwKLSAgICAgICAgJChidWlsdF9oZWFkZXJzX2NvbmZpZ3VyZSkJXAotICAgICAgICAkKGJ1aWx0X2hlYWRlcl9tYWtlKQkJXAotICAgICAgICAkKGJ1aWx0X3NvdXJjZV9tYWtlKQotIyBDTEVBTkZJTEVTIGlzIGZvciBmaWxlcyBnZW5lcmF0ZWQgYnkgbWFrZQotQ0xFQU5GSUxFUyA9ICQoYnVpbHRfaGVhZGVyX21ha2UpICQoYnVpbHRfc291cmNlX21ha2UpICQoYXNfZGxsX2NsZWFuZmlsZXMpICouZ2NubyAqLmdjZGEgKi5nY292ICouZ2Nvdi5vdXQKLSMgRElTVENMRUFORklMRVMgaXMgZm9yIGZpbGVzIGdlbmVyYXRlZCBieSBjb25maWd1cmUKLURJU1RDTEVBTkZJTEVTID0gJChidWlsdF9oZWFkZXJzX2NvbmZpZ3VyZSkKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUyA9CQlcCi0JLURfR05VX1NPVVJDRQkJCQkJXAotCS1ER1NUX0VYUE9SVFMJCQkJCVwKLQktREdfTE9HX0RPTUFJTj1nX2xvZ19kb21haW5fZ3N0cmVhbWVyIAkJXAotCS1ER1NUX0FQSV9WRVJTSU9OPVwiIiQoR1NUX0FQSV9WRVJTSU9OKSJcIiAJXAotCS1ER1NUX0RJU0FCTEVfREVQUkVDQVRFRAkJCVwKLQkkKFZBTEdSSU5EX0NGTEFHUykJCQkJXAotCSQoR1NUX0FMTF9DRkxBR1MpCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9MSUJBREQgPQkJXAotCSQoR1NUX1BBUlNFX0xBKQkJCQkJXAotCSQoR1NUX1BSSU5URl9MQSkJCQkJXAotCSQoR1NUX0FMTF9MSUJTKQkJCQkJXAotCSQoV0lOMzJfTElCUykJCQkJCVwKLQkkKFNPQ0tFVF9MSUJTKQkJCQkJXAotCSQoTElCTSkKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xERkxBR1MgPQkJXAotCSQoR1NUX0xJQl9MREZMQUdTKSAkKEdTVF9BTExfTERGTEFHUykgJChHU1RfTFRfTERGTEFHUykKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AL2dzdAotCi1nc3RfaGVhZGVycyA9CQkJXAotCWdzdC5oCQkJXAotCWdsaWItY29tcGF0LmgJCVwKLQlnc3RvYmplY3QuaAkJXAotCWdzdGFsbG9jYXRvci5oCQlcCi0JZ3N0YmluLmgJCVwKLQlnc3RidWZmZXIuaAkJXAotCWdzdGJ1ZmZlcmxpc3QuaAkJXAotCWdzdGJ1ZmZlcnBvb2wuaAkJXAotCWdzdGJ1cy5oCQlcCi0JZ3N0Y2Fwcy5oCQlcCi0JZ3N0Y2Fwc2ZlYXR1cmVzLmgJXAotCWdzdGNoaWxkcHJveHkuaAkJXAotCWdzdGNsb2NrLmgJCVwKLQlnc3Rjb21wYXQuaAkJXAotCWdzdGNvbnRleHQuaCBcCi0JZ3N0Y29udHJvbGJpbmRpbmcuaCBcCi0JZ3N0Y29udHJvbHNvdXJjZS5oIFwKLQlnc3RkYXRldGltZS5oCQlcCi0JZ3N0ZGVidWd1dGlscy5oCQlcCi0JZ3N0ZWxlbWVudC5oCQlcCi0JZ3N0ZWxlbWVudG1ldGFkYXRhLmgJXAotCWdzdGRldmljZS5oCQlcCi0JZ3N0ZGV2aWNlcHJvdmlkZXIuaAlcCi0JZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmggXAotCWdzdGVsZW1lbnRmYWN0b3J5LmgJXAotCWdzdGVycm9yLmgJCVwKLQlnc3RldmVudC5oCQlcCi0JZ3N0Zm9ybWF0LmgJCVwKLQlnc3RnaG9zdHBhZC5oCQlcCi0JZ3N0ZGV2aWNlbW9uaXRvci5oIAlcCi0JZ3N0aW5mby5oCQlcCi0JZ3N0aXRlcmF0b3IuaAkJXAotCWdzdGF0b21pY3F1ZXVlLmgJXAotCWdzdG1hY3Jvcy5oCQlcCi0JZ3N0bWVzc2FnZS5oCQlcCi0JZ3N0bWV0YS5oCQlcCi0JZ3N0bWVtb3J5LmgJCVwKLQlnc3RtaW5pb2JqZWN0LmgJCVwKLQlnc3RwYWQuaAkJXAotCWdzdHBhZHRlbXBsYXRlLmgJXAotCWdzdHBhcmFtc3BlY3MuaAkJXAotCWdzdHBpcGVsaW5lLmgJCVwKLQlnc3RwbHVnaW4uaAkJXAotCWdzdHBsdWdpbmZlYXR1cmUuaAlcCi0JZ3N0cG9sbC5oCQlcCi0JZ3N0cHJlc2V0LmggICAgICAgICAgICAgXAotCWdzdHByb3RlY3Rpb24uaCAgICAgICAgIFwKLQlnc3RxdWVyeS5oCQlcCi0JZ3N0c2FtcGxlLmgJCVwKLQlnc3RzZWdtZW50LmgJCVwKLQlnc3RzdHJlYW1jb2xsZWN0aW9uLmgJXAotCWdzdHN0cmVhbXMuaAkJXAotCWdzdHN0cnVjdHVyZS5oCQlcCi0JZ3N0c3lzdGVtY2xvY2suaAlcCi0JZ3N0dGFnbGlzdC5oCQlcCi0JZ3N0dGFnc2V0dGVyLmgJCVwKLQlnc3R0YXNrLmgJCVwKLQlnc3R0YXNrcG9vbC5oCQlcCi0JZ3N0dG9jLmgJCVwKLQlnc3R0b2NzZXR0ZXIuaAkJXAotCWdzdHRyYWNlci5oCQlcCi0JZ3N0dHJhY2VyZmFjdG9yeS5oCVwKLQlnc3R0cmFjZXJyZWNvcmQuaAkJXAotCWdzdHR5cGVmaW5kLmgJCVwKLQlnc3R0eXBlZmluZGZhY3RvcnkuaAlcCi0JZ3N0dXJpLmgJCVwKLQlnc3R1dGlscy5oCQlcCi0JZ3N0dmFsdWUuaAkJXAotCWdzdHJlZ2lzdHJ5LmgJCVwKLQlnc3RwYXJzZS5oCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyA9ICQoZ3N0X2hlYWRlcnMpIG1hdGgtY29tcGF0LmgKLQotbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyA9IFwKLQkkKGJ1aWx0X2hlYWRlcnNfY29uZmlndXJlKSAkKGJ1aWx0X2hlYWRlcl9tYWtlKQotCi1ub2luc3RfSEVBREVSUyA9IAkJXAotCWdldHRleHQuaAkJXAotCWdsaWItY29tcGF0LXByaXZhdGUuaAlcCi0JZ3N0LWkxOG4tbGliLmgJCVwKLQlnc3QtaTE4bi1hcHAuaAkJXAotCWdzdGVsZW1lbnRtZXRhZGF0YS5oCVwKLQlnc3RwbHVnaW5sb2FkZXIuaAlcCi0JZ3N0cXVhcmsuaAkJXAotCWdzdHJlZ2lzdHJ5YmluYXJ5LmggICAgIFwKLQlnc3RyZWdpc3RyeWNodW5rcy5oICAgICBcCi0JZ3N0dHJhY2VydXRpbHMuaAkJXAotCWdzdF9wcml2YXRlLmgKLQotZ3N0ZW51bXR5cGVzLmg6ICQoZ3N0X2hlYWRlcnMpCi0JJChBTV9WX0dFTikkKEdMSUJfTUtFTlVNUykgXAotCS0tZmhlYWQgIiNpZm5kZWYgX19HU1RfRU5VTV9UWVBFU19IX19cbiNkZWZpbmUgX19HU1RfRU5VTV9UWVBFU19IX19cblxuI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+XG5cbkdfQkVHSU5fREVDTFNcbiIgXAotCS0tZnByb2QgIlxuLyogZW51bWVyYXRpb25zIGZyb20gXCJAZmlsZW5hbWVAXCIgKi9cbiIgXAotCS0tdmhlYWQgIkdUeXBlIEBlbnVtX25hbWVAX2dldF90eXBlICh2b2lkKTtcbiNkZWZpbmUgR1NUX1RZUEVfQEVOVU1TSE9SVEAgKEBlbnVtX25hbWVAX2dldF90eXBlKCkpXG4iICAgICAgICAgXAotCS0tZnRhaWwgIkdfRU5EX0RFQ0xTXG5cbiNlbmRpZiAvKiBfX0dTVF9FTlVNX1RZUEVTX0hfXyAqLyIgXAotCSReID4gZ3N0ZW51bXR5cGVzLmgKLQotZ3N0ZW51bXR5cGVzLmM6ICQoZ3N0X2hlYWRlcnMpCi0JJChBTV9WX0dFTikkKEdMSUJfTUtFTlVNUykgXAotCS0tZmhlYWQgIiNpbmNsdWRlIFwiZ3N0X3ByaXZhdGUuaFwiXG4jaW5jbHVkZSA8Z3N0L2dzdC5oPlxuI2RlZmluZSBDX0VOVU0odikgKChnaW50KSB2KVxuI2RlZmluZSBDX0ZMQUdTKHYpICgoZ3VpbnQpIHYpXG4gIiBcCi0JLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqLyIgXAotCS0tdmhlYWQgIkdUeXBlXG5AZW51bV9uYW1lQF9nZXRfdHlwZSAodm9pZClcbntcbiAgc3RhdGljIGdzaXplIGlkID0gMDtcbiAgc3RhdGljIGNvbnN0IEdAVHlwZUBWYWx1ZSB2YWx1ZXNbXSA9IHsiICAgICBcCi0JLS12cHJvZCAiICAgIHsgQ19AVFlQRUAoQFZBTFVFTkFNRUApLCBcIkBWQUxVRU5BTUVAXCIsIFwiQHZhbHVlbmlja0BcIiB9LCIgXAotCS0tdnRhaWwgIiAgICB7IDAsIE5VTEwsIE5VTEwgfVxuICB9O1xuXG4gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkge1xuICAgIEdUeXBlIHRtcCA9IGdfQHR5cGVAX3JlZ2lzdGVyX3N0YXRpYyAoXCJARW51bU5hbWVAXCIsIHZhbHVlcyk7XG4gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTtcbiAgfVxuXG4gIHJldHVybiAoR1R5cGUpIGlkO1xufSIgXAotCSReID4gZ3N0ZW51bXR5cGVzLmMKLQotJS5jLmdjb3Y6IC5saWJzL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS0lLmdjZGEgJS5jCi0JJChHQ09WKSAtYiAtZiAtbyAkXiA+ICRALm91dAotCi1nY292OiAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTOj0uZ2NvdikKLQotaWYgSEFWRV9JTlRST1NQRUNUSU9OCi1CVUlMVF9HSVJTT1VSQ0VTID0gR3N0LUBHU1RfQVBJX1ZFUlNJT05ALmdpcgotCi1naXJfaGVhZGVycz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZV9IRUFERVJTKSkKLWdpcl9oZWFkZXJzKz0kKHBhdHN1YnN0ICUsJChidWlsZGRpcikvJSwgJChidWlsdF9oZWFkZXJfbWFrZSkpCi1naXJfaGVhZGVycys9JChwYXRzdWJzdCAlLCQoYnVpbGRkaXIpLyUsIGdzdHZlcnNpb24uaCkKLWdpcl9zb3VyY2VzPSQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUykpCi1naXJfc291cmNlcys9JChwYXRzdWJzdCAlLCQoYnVpbGRkaXIpLyUsICQoYnVpbHRfc291cmNlX21ha2UpKQotCi1Hc3QtQEdTVF9BUElfVkVSU0lPTkAuZ2lyOiAkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgbGliZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi0JJChBTV9WX0dFTilHU1RfUExVR0lOX1NZU1RFTV9QQVRIXzFfMD0iIiBHU1RfUExVR0lOX1BBVEhfMV8wPSIiIEdTVF9SRUdJU1RSWV9VUERBVEU9bm8gR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPXllcyBcCi0JCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIENDPSIkKENDKSIgUEtHX0NPTkZJRz0iJChQS0dfQ09ORklHKSIgRExMVE9PTD0iJChETExUT09MKSIgXAotCQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0IFwKLQkJLS1uc3ZlcnNpb249QEdTVF9BUElfVkVSU0lPTkAgXAotCQktLXZlcmJvc2UgXAotCQktLXdhcm4tYWxsIFwKLQkJLUkkKHRvcF9zcmNkaXIpIFwKLQkJLUkkKHRvcF9idWlsZGRpcikgXAotCQktRElOX0dPQkpFQ1RfSU5UUk9TUEVDVElPTj0xIFwKLQkJLS1jLWluY2x1ZGU9J2dzdC9nc3QuaCcgXAotCQktLWxpYnJhcnk9bGliZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkJLS1pbmNsdWRlPUdMaWItMi4wIFwKLQkJLS1pbmNsdWRlPUdPYmplY3QtMi4wIFwKLQkJLS1pbmNsdWRlPUdNb2R1bGUtMi4wIFwKLQkJLS1saWJ0b29sPSIke0xJQlRPT0x9IiBcCi0JCS0tcGtnIGdsaWItMi4wIFwKLQkJLS1wa2cgZ29iamVjdC0yLjAgXAotCQktLXBrZyBnbW9kdWxlLW5vLWV4cG9ydC0yLjAgXAotCQktLXBrZy1leHBvcnQgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJLS1hZGQtaW5pdC1zZWN0aW9uPSIkKElOVFJPU1BFQ1RJT05fSU5JVCkiIFwKLQkJLS1vdXRwdXQgJEAgXAotCQkkKGdpcl9oZWFkZXJzKSBcCi0JCSQoZ2lyX3NvdXJjZXMpCi0KLSMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KLSMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KLWdpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAotZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCi0KLXR5cGVsaWJzZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAvCi0KLXR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKLQotJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCi0JJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQotCi1DTEVBTkZJTEVTICs9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQotZW5kaWYKLQotIyB0cnkgdG8gcHJldmVudCBwYWNrYWdpbmcgZXJyb3JzCi1jaGVjay1saWJleGVjZGlyLWNvbnNpc3RlbmN5OgotCUBpZiB0ZXN0ICIke0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUR9IiAhPSAiJHtsaWJleGVjZGlyfS9nc3RyZWFtZXItJChHU1RfQVBJX1ZFUlNJT04pL2dzdC1wbHVnaW4tc2Nhbm5lciI7IHRoZW4gXAotCSAgZWNobyAiKioqIEluY29uc2lzdGVudCBsaWJleGVjZGlyISBQbGVhc2UgdXNlIC4vY29uZmlndXJlIC0tbGliZXhlY2Rpcj0vZm9vL2JhciI7IFwKLQkgIGVjaG8gIioqKiB0byBzZXQgdGhlIGxpYmV4ZWNkaXIgYW5kIG5vdCBtYWtlIGxpYmV4ZWNkaXI9L2Zvby9iYXIgb3IgdGhlIGxpa2UuIjsgXAotCSAgZWNobyAiKioqIFRoZSBzYW1lIGdvZXMgZm9yIHByZWZpeCwgbGliZGlyIGV0Yy4iOyBcCi0JICBlY2hvICIqKiogJHtHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEfSAhPSAke2xpYmV4ZWNkaXJ9L2dzdHJlYW1lci0kKEdTVF9BUElfVkVSU0lPTikvZ3N0LXBsdWdpbi1zY2FubmVyIjsgXAotCSAgZXhpdCAxOyBcCi0JZmkKLQotYWxsLWxvY2FsOiBjaGVjay1saWJleGVjZGlyLWNvbnNpc3RlbmN5CmRpZmYgLS1naXQgYS9nc3QvTWFrZWZpbGUuaW4gYi9nc3QvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NGQ5MjcuLjAwMDAwMDAKLS0tIGEvZ3N0L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjA4NCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBhbV9fYXBwZW5kXzEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpICQodHlwZWxpYnNfREFUQSkKLXN1YmRpciA9IGdzdAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKLQkkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykgXAotCSQobm9pbnN0X0hFQURFUlMpICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9IGdzdGNvbmZpZy5oIGdzdHZlcnNpb24uaAotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiBcCi0JIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgXAotCSIkKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSIgXAotCSIkKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSIKLUxUTElCUkFSSUVTID0gJChsaWJfTFRMSUJSQVJJRVMpCi1AR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VAYW1fX0RFUEVOREVOQ0lFU18xID0gcGFyc2UvbGliZ3N0cGFyc2UubGEKLUBHU1RfRElTQUJMRV9HU1RfREVCVUdfRkFMU0VAYW1fX0RFUEVOREVOQ0lFU18yID0gIFwKLUBHU1RfRElTQUJMRV9HU1RfREVCVUdfRkFMU0VACXByaW50Zi9saWJnc3RwcmludGYubGEKLWFtX19ERVBFTkRFTkNJRVNfMyA9Ci1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTID0gIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzIpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMykgJChhbV9fREVQRU5ERU5DSUVTXzMpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMykgJChhbV9fREVQRU5ERU5DSUVTXzMpCi1hbV9fbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVNfRElTVCA9IGdzdC5jIGdzdG9iamVjdC5jIFwKLQlnc3RhbGxvY2F0b3IuYyBnc3RiaW4uYyBnc3RidWZmZXIuYyBnc3RidWZmZXJsaXN0LmMgXAotCWdzdGJ1ZmZlcnBvb2wuYyBnc3RidXMuYyBnc3RjYXBzLmMgZ3N0Y2Fwc2ZlYXR1cmVzLmMgXAotCWdzdGNoaWxkcHJveHkuYyBnc3RjbG9jay5jIGdzdGNsb2NrLWxpbnJlZy5jIGdzdGNvbnRleHQuYyBcCi0JZ3N0Y29udHJvbGJpbmRpbmcuYyBnc3Rjb250cm9sc291cmNlLmMgZ3N0ZGF0ZXRpbWUuYyBcCi0JZ3N0ZGVidWd1dGlscy5jIGdzdGRldmljZS5jIGdzdGRldmljZW1vbml0b3IuYyBcCi0JZ3N0ZGV2aWNlcHJvdmlkZXIuYyBnc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYyBnc3RlbGVtZW50LmMgXAotCWdzdGVsZW1lbnRmYWN0b3J5LmMgZ3N0ZXJyb3IuYyBnc3RldmVudC5jIGdzdGZvcm1hdC5jIFwKLQlnc3RnaG9zdHBhZC5jIGdzdGluZm8uYyBnc3RpdGVyYXRvci5jIGdzdGF0b21pY3F1ZXVlLmMgXAotCWdzdG1lc3NhZ2UuYyBnc3RtZXRhLmMgZ3N0bWVtb3J5LmMgZ3N0bWluaW9iamVjdC5jIGdzdHBhZC5jIFwKLQlnc3RwYWR0ZW1wbGF0ZS5jIGdzdHBhcmFtc3BlY3MuYyBnc3RwaXBlbGluZS5jIGdzdHBsdWdpbi5jIFwKLQlnc3RwbHVnaW5mZWF0dXJlLmMgZ3N0cGx1Z2lubG9hZGVyLmMgZ3N0cG9sbC5jIGdzdHByZXNldC5jIFwKLQlnc3Rwcm90ZWN0aW9uLmMgZ3N0cXVhcmsuYyBnc3RxdWVyeS5jIGdzdHJlZ2lzdHJ5LmMgXAotCWdzdHJlZ2lzdHJ5Y2h1bmtzLmMgZ3N0c2FtcGxlLmMgZ3N0c2VnbWVudC5jIFwKLQlnc3RzdHJlYW1jb2xsZWN0aW9uLmMgZ3N0c3RyZWFtcy5jIGdzdHN0cnVjdHVyZS5jIFwKLQlnc3RzeXN0ZW1jbG9jay5jIGdzdHRhZ2xpc3QuYyBnc3R0YWdzZXR0ZXIuYyBnc3R0YXNrLmMgXAotCWdzdHRhc2twb29sLmMgZ3N0dG9jLmMgZ3N0dG9jc2V0dGVyLmMgZ3N0dHJhY2VyLmMgXAotCWdzdHRyYWNlcmZhY3RvcnkuYyBnc3R0cmFjZXJyZWNvcmQuYyBnc3R0cmFjZXJ1dGlscy5jIFwKLQlnc3R0eXBlZmluZC5jIGdzdHR5cGVmaW5kZmFjdG9yeS5jIGdzdHVyaS5jIGdzdHV0aWxzLmMgXAotCWdzdHZhbHVlLmMgZ3N0cGFyc2UuYyBnc3RyZWdpc3RyeWJpbmFyeS5jCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VAYW1fX29iamVjdHNfMSA9IGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeWJpbmFyeS5sbwotYW1fbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3QubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RvYmplY3QubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhbGxvY2F0b3IubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaW4ubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXIubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJsaXN0LmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVycG9vbC5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1cy5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNhcHMubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjYXBzZmVhdHVyZXMubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjaGlsZHByb3h5LmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2subG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjbG9jay1saW5yZWcubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250ZXh0LmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbGJpbmRpbmcubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250cm9sc291cmNlLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGF0ZXRpbWUubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZWJ1Z3V0aWxzLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlbW9uaXRvci5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZXByb3ZpZGVyLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZWxlbWVudC5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVsZW1lbnRmYWN0b3J5LmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZXJyb3IubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RldmVudC5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZvcm1hdC5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGdob3N0cGFkLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aW5mby5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGl0ZXJhdG9yLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YXRvbWljcXVldWUubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXNzYWdlLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWV0YS5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1lbW9yeS5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1pbmlvYmplY3QubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYWQubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYWR0ZW1wbGF0ZS5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcmFtc3BlY3MubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwaXBlbGluZS5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbi5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbmZlYXR1cmUubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwbHVnaW5sb2FkZXIubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rwb2xsLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHJlc2V0LmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHJvdGVjdGlvbi5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHF1YXJrLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVlcnkubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeS5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5Y2h1bmtzLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c2FtcGxlLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c2VnbWVudC5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cmVhbWNvbGxlY3Rpb24ubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJlYW1zLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RydWN0dXJlLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3lzdGVtY2xvY2subG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdsaXN0LmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFnc2V0dGVyLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFzay5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhc2twb29sLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dG9jLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dG9jc2V0dGVyLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VyLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VyZmFjdG9yeS5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcnJlY29yZC5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcnV0aWxzLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmQubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZGZhY3RvcnkubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1cmkubG8gXAotCWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1dGlscy5sbyBcCi0JbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHZhbHVlLmxvIFwKLQlsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyc2UubG8gJChhbV9fb2JqZWN0c18xKQotYW1fX29iamVjdHNfMiA9IGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbnVtdHlwZXMubG8KLW5vZGlzdF9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMikKLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTID0gIFwKLQkkKGFtX2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTKSBcCi0JJChub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSBcCi0JLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMpIFwKLQkkKEVYVFJBX2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKSBcCi0JJChub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGFtX19saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFU19ESVNUKSBcCi0JJChFWFRSQV9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUykKLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAotCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotREFUQSA9ICQoZ2lyX0RBVEEpICQodHlwZWxpYnNfREFUQSkKLUhFQURFUlMgPSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykgXAotCSQobm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykgXAotCSQobm9pbnN0X0hFQURFUlMpCi1SRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAotICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi1hbV9fcmVjdXJzaXZlX3RhcmdldHMgPSBcCi0gICQoUkVDVVJTSVZFX1RBUkdFVFMpIFwKLSAgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgXAotICAkKGFtX19leHRyYV9yZWN1cnNpdmVfdGFyZ2V0cykKLUFNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChhbV9fcmVjdXJzaXZlX3RhcmdldHM6LXJlY3Vyc2l2ZT0pIFRBR1MgQ1RBR1MgXAotCWRpc3RkaXIKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9nc3Rjb25maWcuaC5pbiBcCi0JJChzcmNkaXIpL2dzdHZlcnNpb24uaC5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1hbV9fcmVsYXRpdml6ZSA9IFwKLSAgZGlyMD1gcHdkYDsgXAotICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKLSAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKLSAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKLSAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCi0gIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKLSAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCi0gICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAotICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKLSAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCi0gICAgICBlbHNlIFwKLSAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCi0gICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gICAgICAgIGVsc2UgXAotICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKLSAgICAgICAgZmk7IFwKLSAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKLSAgICAgIGZpOyBcCi0gICAgZmk7IFwKLSAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgZG9uZTsgXAotICByZWxkaXI9IiQkZGlyMiIKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1saWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAubGEKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUBHU1RfUkVHSVNUUllfU1JDID0gZ3N0cmVnaXN0cnliaW5hcnkuYwotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX1RSVUVAR1NUX1JFR0lTVFJZX1NSQyA9IAotQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQFNVQkRJUlNfUEFSU0UgPSBwYXJzZQotQEdTVF9ESVNBQkxFX1BBUlNFX1RSVUVAU1VCRElSU19QQVJTRSA9IAotQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQEdTVF9QQVJTRV9MQSA9IHBhcnNlL2xpYmdzdHBhcnNlLmxhCi1AR1NUX0RJU0FCTEVfUEFSU0VfVFJVRUBHU1RfUEFSU0VfTEEgPSAKLUBHU1RfRElTQUJMRV9QTFVHSU5fRkFMU0VAR1NUX1BMVUdJTl9TUkMgPSBnc3RwbHVnaW4uYwotQEdTVF9ESVNBQkxFX1BMVUdJTl9UUlVFQEdTVF9QTFVHSU5fU1JDID0gCi1AR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFQFNVQkRJUlNfUFJJTlRGID0gcHJpbnRmCi1AR1NUX0RJU0FCTEVfR1NUX0RFQlVHX1RSVUVAU1VCRElSU19QUklOVEYgPSAKLUBHU1RfRElTQUJMRV9HU1RfREVCVUdfRkFMU0VAR1NUX1BSSU5URl9MQSA9IHByaW50Zi9saWJnc3RwcmludGYubGEKLUBHU1RfRElTQUJMRV9HU1RfREVCVUdfVFJVRUBHU1RfUFJJTlRGX0xBID0gCi1TVUJESVJTID0gJChTVUJESVJTX1BBUlNFKSAkKFNVQkRJUlNfUFJJTlRGKQotRElTVF9TVUJESVJTID0gcGFyc2UgcHJpbnRmCi0KLSMgbWFrZSB2YXJpYWJsZXMgZm9yIGFsbCBnZW5lcmF0ZWQgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMgdG8gbWFrZSB0aGUKLSMgZGlzdGluY3Rpb24gY2xlYXIKLWJ1aWx0X2hlYWRlcnNfY29uZmlndXJlID0gZ3N0dmVyc2lvbi5oIGdzdGNvbmZpZy5oCi1idWlsdF9oZWFkZXJfbWFrZSA9IGdzdGVudW10eXBlcy5oCi1idWlsdF9zb3VyY2VfbWFrZSA9IGdzdGVudW10eXBlcy5jCi1FWFRSQV9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUyA9IFwKLQlnc3RyZWdpc3RyeWJpbmFyeS5jCi0KLQotIyB0ZW1wb3JhcmlseSBub3QgdXNlZAotIwlnbGliLWNvbXBhdC5jCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUyA9IFwKLQlnc3QuYwkJCVwKLQlnc3RvYmplY3QuYwkJXAotCWdzdGFsbG9jYXRvci5jCQlcCi0JZ3N0YmluLmMJCVwKLQlnc3RidWZmZXIuYwkJXAotCWdzdGJ1ZmZlcmxpc3QuYwkJXAotCWdzdGJ1ZmZlcnBvb2wuYwkJXAotCWdzdGJ1cy5jCQlcCi0JZ3N0Y2Fwcy5jCQlcCi0JZ3N0Y2Fwc2ZlYXR1cmVzLmMJXAotCWdzdGNoaWxkcHJveHkuYwkJXAotCWdzdGNsb2NrLmMJCVwKLQlnc3RjbG9jay1saW5yZWcuYwlcCi0JZ3N0Y29udGV4dC5jIFwKLQlnc3Rjb250cm9sYmluZGluZy5jIFwKLQlnc3Rjb250cm9sc291cmNlLmMgXAotCWdzdGRhdGV0aW1lLmMJCVwKLQlnc3RkZWJ1Z3V0aWxzLmMJCVwKLQlnc3RkZXZpY2UuYwkJXAotCWdzdGRldmljZW1vbml0b3IuYyAJXAotCWdzdGRldmljZXByb3ZpZGVyLmMJXAotCWdzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5jIFwKLQlnc3RlbGVtZW50LmMJCVwKLQlnc3RlbGVtZW50ZmFjdG9yeS5jCVwKLQlnc3RlcnJvci5jCQlcCi0JZ3N0ZXZlbnQuYwkJXAotCWdzdGZvcm1hdC5jCQlcCi0JZ3N0Z2hvc3RwYWQuYwkJXAotCWdzdGluZm8uYwkJXAotCWdzdGl0ZXJhdG9yLmMJCVwKLQlnc3RhdG9taWNxdWV1ZS5jCVwKLQlnc3RtZXNzYWdlLmMJCVwKLQlnc3RtZXRhLmMJCVwKLQlnc3RtZW1vcnkuYwkJXAotCWdzdG1pbmlvYmplY3QuYwkJXAotCWdzdHBhZC5jCQlcCi0JZ3N0cGFkdGVtcGxhdGUuYwlcCi0JZ3N0cGFyYW1zcGVjcy5jCQlcCi0JZ3N0cGlwZWxpbmUuYwkJXAotCWdzdHBsdWdpbi5jCQlcCi0JZ3N0cGx1Z2luZmVhdHVyZS5jCVwKLQlnc3RwbHVnaW5sb2FkZXIuYwlcCi0JZ3N0cG9sbC5jCQlcCi0JZ3N0cHJlc2V0LmMgICAgICAgICAgICAgXAotCWdzdHByb3RlY3Rpb24uYyAgICAgICAgIFwKLQlnc3RxdWFyay5jCQlcCi0JZ3N0cXVlcnkuYwkJXAotCWdzdHJlZ2lzdHJ5LmMJCVwKLQlnc3RyZWdpc3RyeWNodW5rcy5jCVwKLQlnc3RzYW1wbGUuYwkJXAotCWdzdHNlZ21lbnQuYwkJXAotCWdzdHN0cmVhbWNvbGxlY3Rpb24uYwlcCi0JZ3N0c3RyZWFtcy5jCQlcCi0JZ3N0c3RydWN0dXJlLmMJCVwKLQlnc3RzeXN0ZW1jbG9jay5jCVwKLQlnc3R0YWdsaXN0LmMJCVwKLQlnc3R0YWdzZXR0ZXIuYwkJXAotCWdzdHRhc2suYwkJXAotCWdzdHRhc2twb29sLmMJCVwKLQlnc3R0b2MuYwkJXAotCWdzdHRvY3NldHRlci5jCQlcCi0JZ3N0dHJhY2VyLmMJCVwKLQlnc3R0cmFjZXJmYWN0b3J5LmMJXAotCWdzdHRyYWNlcnJlY29yZC5jCQlcCi0JZ3N0dHJhY2VydXRpbHMuYwkJXAotCWdzdHR5cGVmaW5kLmMJCVwKLQlnc3R0eXBlZmluZGZhY3RvcnkuYwlcCi0JZ3N0dXJpLmMJCVwKLQlnc3R1dGlscy5jCQlcCi0JZ3N0dmFsdWUuYwkJXAotCWdzdHBhcnNlLmMJCVwKLQkkKEdTVF9SRUdJU1RSWV9TUkMpCi0KLQotIyBkbyBub3QgcHV0IGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gdGhhdCBhcmUgZ2VuZXJhdGVkCi1ub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSAkKGJ1aWx0X3NvdXJjZV9tYWtlKQotCi0jIEJVSUxUX1NPVVJDRVMgYXJlIGJ1aWx0IG9uIG1ha2UgYWxsL2NoZWNrL2luc3RhbGwgYmVmb3JlIGFsbCBvdGhlciB0YXJnZXRzCi1CVUlMVF9TT1VSQ0VTID0gXAotICAgICAgICAkKGJ1aWx0X2hlYWRlcnNfY29uZmlndXJlKQlcCi0gICAgICAgICQoYnVpbHRfaGVhZGVyX21ha2UpCQlcCi0gICAgICAgICQoYnVpbHRfc291cmNlX21ha2UpCi0KLSMgQ0xFQU5GSUxFUyBpcyBmb3IgZmlsZXMgZ2VuZXJhdGVkIGJ5IG1ha2UKLUNMRUFORklMRVMgPSAkKGJ1aWx0X2hlYWRlcl9tYWtlKSAkKGJ1aWx0X3NvdXJjZV9tYWtlKSBcCi0JJChhc19kbGxfY2xlYW5maWxlcykgKi5nY25vICouZ2NkYSAqLmdjb3YgKi5nY292Lm91dCBcCi0JJChhbV9fYXBwZW5kXzEpCi0jIERJU1RDTEVBTkZJTEVTIGlzIGZvciBmaWxlcyBnZW5lcmF0ZWQgYnkgY29uZmlndXJlCi1ESVNUQ0xFQU5GSUxFUyA9ICQoYnVpbHRfaGVhZGVyc19jb25maWd1cmUpCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTID0gXAotCS1EX0dOVV9TT1VSQ0UJCQkJCVwKLQktREdTVF9FWFBPUlRTCQkJCQlcCi0JLURHX0xPR19ET01BSU49Z19sb2dfZG9tYWluX2dzdHJlYW1lciAJCVwKLQktREdTVF9BUElfVkVSU0lPTj1cIiIkKEdTVF9BUElfVkVSU0lPTikiXCIgCVwKLQktREdTVF9ESVNBQkxFX0RFUFJFQ0FURUQJCQlcCi0JJChWQUxHUklORF9DRkxBR1MpCQkJCVwKLQkkKEdTVF9BTExfQ0ZMQUdTKQotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfTElCQUREID0gXAotCSQoR1NUX1BBUlNFX0xBKQkJCQkJXAotCSQoR1NUX1BSSU5URl9MQSkJCQkJXAotCSQoR1NUX0FMTF9MSUJTKQkJCQkJXAotCSQoV0lOMzJfTElCUykJCQkJCVwKLQkkKFNPQ0tFVF9MSUJTKQkJCQkJXAotCSQoTElCTSkKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xERkxBR1MgPSBcCi0JJChHU1RfTElCX0xERkxBR1MpICQoR1NUX0FMTF9MREZMQUdTKSAkKEdTVF9MVF9MREZMQUdTKQotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9nc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAvZ3N0Ci1nc3RfaGVhZGVycyA9IFwKLQlnc3QuaAkJCVwKLQlnbGliLWNvbXBhdC5oCQlcCi0JZ3N0b2JqZWN0LmgJCVwKLQlnc3RhbGxvY2F0b3IuaAkJXAotCWdzdGJpbi5oCQlcCi0JZ3N0YnVmZmVyLmgJCVwKLQlnc3RidWZmZXJsaXN0LmgJCVwKLQlnc3RidWZmZXJwb29sLmgJCVwKLQlnc3RidXMuaAkJXAotCWdzdGNhcHMuaAkJXAotCWdzdGNhcHNmZWF0dXJlcy5oCVwKLQlnc3RjaGlsZHByb3h5LmgJCVwKLQlnc3RjbG9jay5oCQlcCi0JZ3N0Y29tcGF0LmgJCVwKLQlnc3Rjb250ZXh0LmggXAotCWdzdGNvbnRyb2xiaW5kaW5nLmggXAotCWdzdGNvbnRyb2xzb3VyY2UuaCBcCi0JZ3N0ZGF0ZXRpbWUuaAkJXAotCWdzdGRlYnVndXRpbHMuaAkJXAotCWdzdGVsZW1lbnQuaAkJXAotCWdzdGVsZW1lbnRtZXRhZGF0YS5oCVwKLQlnc3RkZXZpY2UuaAkJXAotCWdzdGRldmljZXByb3ZpZGVyLmgJXAotCWdzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5oIFwKLQlnc3RlbGVtZW50ZmFjdG9yeS5oCVwKLQlnc3RlcnJvci5oCQlcCi0JZ3N0ZXZlbnQuaAkJXAotCWdzdGZvcm1hdC5oCQlcCi0JZ3N0Z2hvc3RwYWQuaAkJXAotCWdzdGRldmljZW1vbml0b3IuaCAJXAotCWdzdGluZm8uaAkJXAotCWdzdGl0ZXJhdG9yLmgJCVwKLQlnc3RhdG9taWNxdWV1ZS5oCVwKLQlnc3RtYWNyb3MuaAkJXAotCWdzdG1lc3NhZ2UuaAkJXAotCWdzdG1ldGEuaAkJXAotCWdzdG1lbW9yeS5oCQlcCi0JZ3N0bWluaW9iamVjdC5oCQlcCi0JZ3N0cGFkLmgJCVwKLQlnc3RwYWR0ZW1wbGF0ZS5oCVwKLQlnc3RwYXJhbXNwZWNzLmgJCVwKLQlnc3RwaXBlbGluZS5oCQlcCi0JZ3N0cGx1Z2luLmgJCVwKLQlnc3RwbHVnaW5mZWF0dXJlLmgJXAotCWdzdHBvbGwuaAkJXAotCWdzdHByZXNldC5oICAgICAgICAgICAgIFwKLQlnc3Rwcm90ZWN0aW9uLmggICAgICAgICBcCi0JZ3N0cXVlcnkuaAkJXAotCWdzdHNhbXBsZS5oCQlcCi0JZ3N0c2VnbWVudC5oCQlcCi0JZ3N0c3RyZWFtY29sbGVjdGlvbi5oCVwKLQlnc3RzdHJlYW1zLmgJCVwKLQlnc3RzdHJ1Y3R1cmUuaAkJXAotCWdzdHN5c3RlbWNsb2NrLmgJXAotCWdzdHRhZ2xpc3QuaAkJXAotCWdzdHRhZ3NldHRlci5oCQlcCi0JZ3N0dGFzay5oCQlcCi0JZ3N0dGFza3Bvb2wuaAkJXAotCWdzdHRvYy5oCQlcCi0JZ3N0dG9jc2V0dGVyLmgJCVwKLQlnc3R0cmFjZXIuaAkJXAotCWdzdHRyYWNlcmZhY3RvcnkuaAlcCi0JZ3N0dHJhY2VycmVjb3JkLmgJCVwKLQlnc3R0eXBlZmluZC5oCQlcCi0JZ3N0dHlwZWZpbmRmYWN0b3J5LmgJXAotCWdzdHVyaS5oCQlcCi0JZ3N0dXRpbHMuaAkJXAotCWdzdHZhbHVlLmgJCVwKLQlnc3RyZWdpc3RyeS5oCQlcCi0JZ3N0cGFyc2UuaAotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMgPSAkKGdzdF9oZWFkZXJzKSBtYXRoLWNvbXBhdC5oCi1ub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZV9IRUFERVJTID0gXAotCSQoYnVpbHRfaGVhZGVyc19jb25maWd1cmUpICQoYnVpbHRfaGVhZGVyX21ha2UpCi0KLW5vaW5zdF9IRUFERVJTID0gXAotCWdldHRleHQuaAkJXAotCWdsaWItY29tcGF0LXByaXZhdGUuaAlcCi0JZ3N0LWkxOG4tbGliLmgJCVwKLQlnc3QtaTE4bi1hcHAuaAkJXAotCWdzdGVsZW1lbnRtZXRhZGF0YS5oCVwKLQlnc3RwbHVnaW5sb2FkZXIuaAlcCi0JZ3N0cXVhcmsuaAkJXAotCWdzdHJlZ2lzdHJ5YmluYXJ5LmggICAgIFwKLQlnc3RyZWdpc3RyeWNodW5rcy5oICAgICBcCi0JZ3N0dHJhY2VydXRpbHMuaAkJXAotCWdzdF9wcml2YXRlLmgKLQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEJVSUxUX0dJUlNPVVJDRVMgPSBHc3QtQEdTVF9BUElfVkVSU0lPTkAuZ2lyCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX2hlYWRlcnMgPSAkKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpKSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACSQocGF0c3Vic3QgJSwkKGJ1aWxkZGlyKS8lLCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACSQoYnVpbHRfaGVhZGVyX21ha2UpKSAkKHBhdHN1YnN0IFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJSwkKGJ1aWxkZGlyKS8lLCBnc3R2ZXJzaW9uLmgpCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX3NvdXJjZXMgPSAkKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUykpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChwYXRzdWJzdCAlLCQoYnVpbGRkaXIpLyUsIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChidWlsdF9zb3VyY2VfbWFrZSkpCi0KLSMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KLSMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJkaXIgPSAkKGRhdGFkaXIpL2dpci0xLjAKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic2RpciA9ICQobGliZGlyKS9naXJlcG9zaXRvcnktMS4wLwotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKLWFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLWdzdGNvbmZpZy5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0Y29uZmlnLmguaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotZ3N0dmVyc2lvbi5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0dmVyc2lvbi5oLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLQotaW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLWxpYkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQC5sYTogJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGFsbG9jYXRvci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhdG9taWNxdWV1ZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaW4uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcmxpc3QuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVycG9vbC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidXMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2Fwcy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjYXBzZmVhdHVyZXMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2hpbGRwcm94eS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjbG9jay1saW5yZWcuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2suUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udGV4dC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250cm9sYmluZGluZy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250cm9sc291cmNlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRhdGV0aW1lLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRlYnVndXRpbHMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZW1vbml0b3IuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlcHJvdmlkZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVsZW1lbnQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZW51bXR5cGVzLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVycm9yLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGV2ZW50LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZvcm1hdC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RnaG9zdHBhZC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpbmZvLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGl0ZXJhdG9yLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1lbW9yeS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXNzYWdlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1ldGEuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWluaW9iamVjdC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RvYmplY3QuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFkLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhZHRlbXBsYXRlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcmFtc3BlY3MuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyc2UuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGlwZWxpbmUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2luLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbmZlYXR1cmUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2lubG9hZGVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBvbGwuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHJlc2V0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHByb3RlY3Rpb24uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVhcmsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVlcnkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cmVnaXN0cnkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cmVnaXN0cnliaW5hcnkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cmVnaXN0cnljaHVua3MuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c2FtcGxlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHNlZ21lbnQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RyZWFtY29sbGVjdGlvbi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJlYW1zLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cnVjdHVyZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzeXN0ZW1jbG9jay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdsaXN0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhZ3NldHRlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhc2twb29sLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRvYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2NzZXR0ZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcmZhY3RvcnkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VycmVjb3JkLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcnV0aWxzLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHR5cGVmaW5kLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHR5cGVmaW5kZmFjdG9yeS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1cmkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dXRpbHMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dmFsdWUuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3QubG86IGdzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0LmxvIGB0ZXN0IC1mICdnc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3QuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdC5sbyBgdGVzdCAtZiAnZ3N0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RvYmplY3QubG86IGdzdG9iamVjdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0b2JqZWN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0b2JqZWN0LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0b2JqZWN0LmxvIGB0ZXN0IC1mICdnc3RvYmplY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b2JqZWN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RvYmplY3QuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0b2JqZWN0LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG9iamVjdC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RvYmplY3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG9iamVjdC5sbyBgdGVzdCAtZiAnZ3N0b2JqZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9iamVjdC5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhbGxvY2F0b3IubG86IGdzdGFsbG9jYXRvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YWxsb2NhdG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YWxsb2NhdG9yLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YWxsb2NhdG9yLmxvIGB0ZXN0IC1mICdnc3RhbGxvY2F0b3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YWxsb2NhdG9yLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhbGxvY2F0b3IuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YWxsb2NhdG9yLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGFsbG9jYXRvci5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhbGxvY2F0b3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGFsbG9jYXRvci5sbyBgdGVzdCAtZiAnZ3N0YWxsb2NhdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGFsbG9jYXRvci5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaW4ubG86IGdzdGJpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmluLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmluLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmluLmxvIGB0ZXN0IC1mICdnc3RiaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmluLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaW4uVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmluLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGJpbi5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJpbi5sbyBgdGVzdCAtZiAnZ3N0YmluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJpbi5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXIubG86IGdzdGJ1ZmZlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVyLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVyLmxvIGB0ZXN0IC1mICdnc3RidWZmZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YnVmZmVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXIuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGJ1ZmZlci5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlci5sbyBgdGVzdCAtZiAnZ3N0YnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ1ZmZlci5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJsaXN0LmxvOiBnc3RidWZmZXJsaXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJsaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVybGlzdC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcmxpc3QubG8gYHRlc3QgLWYgJ2dzdGJ1ZmZlcmxpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YnVmZmVybGlzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVybGlzdC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJsaXN0LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGJ1ZmZlcmxpc3QuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVybGlzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVybGlzdC5sbyBgdGVzdCAtZiAnZ3N0YnVmZmVybGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RidWZmZXJsaXN0LmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcnBvb2wubG86IGdzdGJ1ZmZlcnBvb2wuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcnBvb2wubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJwb29sLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVycG9vbC5sbyBgdGVzdCAtZiAnZ3N0YnVmZmVycG9vbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RidWZmZXJwb29sLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJwb29sLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcnBvb2wuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YnVmZmVycG9vbC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJwb29sLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJwb29sLmxvIGB0ZXN0IC1mICdnc3RidWZmZXJwb29sLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ1ZmZlcnBvb2wuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVzLmxvOiBnc3RidXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1cy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1cy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1cy5sbyBgdGVzdCAtZiAnZ3N0YnVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ1cy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVzLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1cy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RidXMuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidXMubG8gYHRlc3QgLWYgJ2dzdGJ1cy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RidXMuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2Fwcy5sbzogZ3N0Y2Fwcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2Fwcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNhcHMuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjYXBzLmxvIGB0ZXN0IC1mICdnc3RjYXBzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNhcHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNhcHMuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2Fwcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RjYXBzLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNhcHMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNhcHMubG8gYHRlc3QgLWYgJ2dzdGNhcHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2Fwcy5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjYXBzZmVhdHVyZXMubG86IGdzdGNhcHNmZWF0dXJlcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2Fwc2ZlYXR1cmVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2Fwc2ZlYXR1cmVzLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2Fwc2ZlYXR1cmVzLmxvIGB0ZXN0IC1mICdnc3RjYXBzZmVhdHVyZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2Fwc2ZlYXR1cmVzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjYXBzZmVhdHVyZXMuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2Fwc2ZlYXR1cmVzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGNhcHNmZWF0dXJlcy5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjYXBzZmVhdHVyZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNhcHNmZWF0dXJlcy5sbyBgdGVzdCAtZiAnZ3N0Y2Fwc2ZlYXR1cmVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNhcHNmZWF0dXJlcy5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjaGlsZHByb3h5LmxvOiBnc3RjaGlsZHByb3h5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjaGlsZHByb3h5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2hpbGRwcm94eS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNoaWxkcHJveHkubG8gYHRlc3QgLWYgJ2dzdGNoaWxkcHJveHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2hpbGRwcm94eS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2hpbGRwcm94eS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjaGlsZHByb3h5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGNoaWxkcHJveHkuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2hpbGRwcm94eS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2hpbGRwcm94eS5sbyBgdGVzdCAtZiAnZ3N0Y2hpbGRwcm94eS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjaGlsZHByb3h5LmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNsb2NrLmxvOiBnc3RjbG9jay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjbG9jay5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNsb2NrLmxvIGB0ZXN0IC1mICdnc3RjbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjbG9jay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2suVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2suUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Y2xvY2suYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2subG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNsb2NrLmxvIGB0ZXN0IC1mICdnc3RjbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjbG9jay5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjbG9jay1saW5yZWcubG86IGdzdGNsb2NrLWxpbnJlZy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2stbGlucmVnLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2stbGlucmVnLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2stbGlucmVnLmxvIGB0ZXN0IC1mICdnc3RjbG9jay1saW5yZWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2xvY2stbGlucmVnLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjbG9jay1saW5yZWcuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2xvY2stbGlucmVnLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGNsb2NrLWxpbnJlZy5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjbG9jay1saW5yZWcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNsb2NrLWxpbnJlZy5sbyBgdGVzdCAtZiAnZ3N0Y2xvY2stbGlucmVnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNsb2NrLWxpbnJlZy5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250ZXh0LmxvOiBnc3Rjb250ZXh0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250ZXh0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udGV4dC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbnRleHQubG8gYHRlc3QgLWYgJ2dzdGNvbnRleHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y29udGV4dC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udGV4dC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250ZXh0LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGNvbnRleHQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udGV4dC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udGV4dC5sbyBgdGVzdCAtZiAnZ3N0Y29udGV4dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb250ZXh0LmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbnRyb2xiaW5kaW5nLmxvOiBnc3Rjb250cm9sYmluZGluZy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbGJpbmRpbmcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250cm9sYmluZGluZy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbnRyb2xiaW5kaW5nLmxvIGB0ZXN0IC1mICdnc3Rjb250cm9sYmluZGluZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb250cm9sYmluZGluZy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbGJpbmRpbmcuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbGJpbmRpbmcuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Y29udHJvbGJpbmRpbmcuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbGJpbmRpbmcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbnRyb2xiaW5kaW5nLmxvIGB0ZXN0IC1mICdnc3Rjb250cm9sYmluZGluZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb250cm9sYmluZGluZy5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250cm9sc291cmNlLmxvOiBnc3Rjb250cm9sc291cmNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250cm9sc291cmNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbHNvdXJjZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbnRyb2xzb3VyY2UubG8gYHRlc3QgLWYgJ2dzdGNvbnRyb2xzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y29udHJvbHNvdXJjZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbHNvdXJjZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb250cm9sc291cmNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGNvbnRyb2xzb3VyY2UuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbHNvdXJjZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29udHJvbHNvdXJjZS5sbyBgdGVzdCAtZiAnZ3N0Y29udHJvbHNvdXJjZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb250cm9sc291cmNlLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRhdGV0aW1lLmxvOiBnc3RkYXRldGltZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGF0ZXRpbWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkYXRldGltZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRhdGV0aW1lLmxvIGB0ZXN0IC1mICdnc3RkYXRldGltZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkYXRldGltZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGF0ZXRpbWUuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGF0ZXRpbWUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZGF0ZXRpbWUuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGF0ZXRpbWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRhdGV0aW1lLmxvIGB0ZXN0IC1mICdnc3RkYXRldGltZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkYXRldGltZS5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZWJ1Z3V0aWxzLmxvOiBnc3RkZWJ1Z3V0aWxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZWJ1Z3V0aWxzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGVidWd1dGlscy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRlYnVndXRpbHMubG8gYHRlc3QgLWYgJ2dzdGRlYnVndXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGVidWd1dGlscy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGVidWd1dGlscy5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZWJ1Z3V0aWxzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGRlYnVndXRpbHMuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGVidWd1dGlscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGVidWd1dGlscy5sbyBgdGVzdCAtZiAnZ3N0ZGVidWd1dGlscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkZWJ1Z3V0aWxzLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZS5sbzogZ3N0ZGV2aWNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2UuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2UubG8gYHRlc3QgLWYgJ2dzdGRldmljZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkZXZpY2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZGV2aWNlLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlLmxvIGB0ZXN0IC1mICdnc3RkZXZpY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGV2aWNlLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZW1vbml0b3IubG86IGdzdGRldmljZW1vbml0b3IuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZW1vbml0b3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vtb25pdG9yLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlbW9uaXRvci5sbyBgdGVzdCAtZiAnZ3N0ZGV2aWNlbW9uaXRvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkZXZpY2Vtb25pdG9yLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vtb25pdG9yLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZW1vbml0b3IuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZGV2aWNlbW9uaXRvci5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vtb25pdG9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vtb25pdG9yLmxvIGB0ZXN0IC1mICdnc3RkZXZpY2Vtb25pdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRldmljZW1vbml0b3IuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlcHJvdmlkZXIubG86IGdzdGRldmljZXByb3ZpZGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vwcm92aWRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZXByb3ZpZGVyLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlcHJvdmlkZXIubG8gYHRlc3QgLWYgJ2dzdGRldmljZXByb3ZpZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRldmljZXByb3ZpZGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vwcm92aWRlci5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vwcm92aWRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RkZXZpY2Vwcm92aWRlci5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vwcm92aWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlcHJvdmlkZXIubG8gYHRlc3QgLWYgJ2dzdGRldmljZXByb3ZpZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRldmljZXByb3ZpZGVyLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5sbzogZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkubG8gYHRlc3QgLWYgJ2dzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmxvIGB0ZXN0IC1mICdnc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVsZW1lbnQubG86IGdzdGVsZW1lbnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVsZW1lbnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbGVtZW50LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZWxlbWVudC5sbyBgdGVzdCAtZiAnZ3N0ZWxlbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlbGVtZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbGVtZW50LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVsZW1lbnQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZWxlbWVudC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbGVtZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbGVtZW50LmxvIGB0ZXN0IC1mICdnc3RlbGVtZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVsZW1lbnQuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkubG86IGdzdGVsZW1lbnRmYWN0b3J5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbGVtZW50ZmFjdG9yeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVsZW1lbnRmYWN0b3J5LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkubG8gYHRlc3QgLWYgJ2dzdGVsZW1lbnRmYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVsZW1lbnRmYWN0b3J5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbGVtZW50ZmFjdG9yeS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbGVtZW50ZmFjdG9yeS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RlbGVtZW50ZmFjdG9yeS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbGVtZW50ZmFjdG9yeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZWxlbWVudGZhY3RvcnkubG8gYHRlc3QgLWYgJ2dzdGVsZW1lbnRmYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVsZW1lbnRmYWN0b3J5LmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVycm9yLmxvOiBnc3RlcnJvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZXJyb3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlcnJvci5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVycm9yLmxvIGB0ZXN0IC1mICdnc3RlcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlcnJvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZXJyb3IuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZXJyb3IuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZXJyb3IuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZXJyb3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVycm9yLmxvIGB0ZXN0IC1mICdnc3RlcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlcnJvci5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RldmVudC5sbzogZ3N0ZXZlbnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGV2ZW50LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZXZlbnQuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RldmVudC5sbyBgdGVzdCAtZiAnZ3N0ZXZlbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZXZlbnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGV2ZW50LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGV2ZW50LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGV2ZW50LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGV2ZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RldmVudC5sbyBgdGVzdCAtZiAnZ3N0ZXZlbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZXZlbnQuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Zm9ybWF0LmxvOiBnc3Rmb3JtYXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZvcm1hdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZvcm1hdC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZvcm1hdC5sbyBgdGVzdCAtZiAnZ3N0Zm9ybWF0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZvcm1hdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Zm9ybWF0LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZvcm1hdC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rmb3JtYXQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Zm9ybWF0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rmb3JtYXQubG8gYHRlc3QgLWYgJ2dzdGZvcm1hdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rmb3JtYXQuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Z2hvc3RwYWQubG86IGdzdGdob3N0cGFkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RnaG9zdHBhZC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGdob3N0cGFkLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Z2hvc3RwYWQubG8gYHRlc3QgLWYgJ2dzdGdob3N0cGFkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGdob3N0cGFkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RnaG9zdHBhZC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RnaG9zdHBhZC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RnaG9zdHBhZC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RnaG9zdHBhZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Z2hvc3RwYWQubG8gYHRlc3QgLWYgJ2dzdGdob3N0cGFkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGdob3N0cGFkLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGluZm8ubG86IGdzdGluZm8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGluZm8ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpbmZvLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aW5mby5sbyBgdGVzdCAtZiAnZ3N0aW5mby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpbmZvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpbmZvLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGluZm8uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0aW5mby5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpbmZvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpbmZvLmxvIGB0ZXN0IC1mICdnc3RpbmZvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGluZm8uYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aXRlcmF0b3IubG86IGdzdGl0ZXJhdG9yLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpdGVyYXRvci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGl0ZXJhdG9yLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aXRlcmF0b3IubG8gYHRlc3QgLWYgJ2dzdGl0ZXJhdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGl0ZXJhdG9yLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpdGVyYXRvci5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpdGVyYXRvci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RpdGVyYXRvci5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpdGVyYXRvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aXRlcmF0b3IubG8gYHRlc3QgLWYgJ2dzdGl0ZXJhdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGl0ZXJhdG9yLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGF0b21pY3F1ZXVlLmxvOiBnc3RhdG9taWNxdWV1ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YXRvbWljcXVldWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhdG9taWNxdWV1ZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGF0b21pY3F1ZXVlLmxvIGB0ZXN0IC1mICdnc3RhdG9taWNxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhdG9taWNxdWV1ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YXRvbWljcXVldWUuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YXRvbWljcXVldWUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YXRvbWljcXVldWUuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YXRvbWljcXVldWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGF0b21pY3F1ZXVlLmxvIGB0ZXN0IC1mICdnc3RhdG9taWNxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhdG9taWNxdWV1ZS5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXNzYWdlLmxvOiBnc3RtZXNzYWdlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXNzYWdlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWVzc2FnZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1lc3NhZ2UubG8gYHRlc3QgLWYgJ2dzdG1lc3NhZ2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bWVzc2FnZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWVzc2FnZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXNzYWdlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG1lc3NhZ2UuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWVzc2FnZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWVzc2FnZS5sbyBgdGVzdCAtZiAnZ3N0bWVzc2FnZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtZXNzYWdlLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1ldGEubG86IGdzdG1ldGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1ldGEubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXRhLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWV0YS5sbyBgdGVzdCAtZiAnZ3N0bWV0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtZXRhLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXRhLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1ldGEuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bWV0YS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXRhLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZXRhLmxvIGB0ZXN0IC1mICdnc3RtZXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG1ldGEuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWVtb3J5LmxvOiBnc3RtZW1vcnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1lbW9yeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1lbW9yeS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1lbW9yeS5sbyBgdGVzdCAtZiAnZ3N0bWVtb3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG1lbW9yeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWVtb3J5LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1lbW9yeS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RtZW1vcnkuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWVtb3J5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtZW1vcnkubG8gYHRlc3QgLWYgJ2dzdG1lbW9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtZW1vcnkuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWluaW9iamVjdC5sbzogZ3N0bWluaW9iamVjdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWluaW9iamVjdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1pbmlvYmplY3QuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RtaW5pb2JqZWN0LmxvIGB0ZXN0IC1mICdnc3RtaW5pb2JqZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG1pbmlvYmplY3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1pbmlvYmplY3QuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bWluaW9iamVjdC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RtaW5pb2JqZWN0LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1pbmlvYmplY3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG1pbmlvYmplY3QubG8gYHRlc3QgLWYgJ2dzdG1pbmlvYmplY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bWluaW9iamVjdC5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYWQubG86IGdzdHBhZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFkLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFkLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFkLmxvIGB0ZXN0IC1mICdnc3RwYWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGFkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYWQuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFkLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHBhZC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYWQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhZC5sbyBgdGVzdCAtZiAnZ3N0cGFkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBhZC5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYWR0ZW1wbGF0ZS5sbzogZ3N0cGFkdGVtcGxhdGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhZHRlbXBsYXRlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFkdGVtcGxhdGUuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYWR0ZW1wbGF0ZS5sbyBgdGVzdCAtZiAnZ3N0cGFkdGVtcGxhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGFkdGVtcGxhdGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhZHRlbXBsYXRlLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhZHRlbXBsYXRlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHBhZHRlbXBsYXRlLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhZHRlbXBsYXRlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYWR0ZW1wbGF0ZS5sbyBgdGVzdCAtZiAnZ3N0cGFkdGVtcGxhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGFkdGVtcGxhdGUuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyYW1zcGVjcy5sbzogZ3N0cGFyYW1zcGVjcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyYW1zcGVjcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcmFtc3BlY3MuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYXJhbXNwZWNzLmxvIGB0ZXN0IC1mICdnc3RwYXJhbXNwZWNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBhcmFtc3BlY3MuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcmFtc3BlY3MuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyYW1zcGVjcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RwYXJhbXNwZWNzLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcmFtc3BlY3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcmFtc3BlY3MubG8gYHRlc3QgLWYgJ2dzdHBhcmFtc3BlY3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGFyYW1zcGVjcy5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwaXBlbGluZS5sbzogZ3N0cGlwZWxpbmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBpcGVsaW5lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGlwZWxpbmUuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwaXBlbGluZS5sbyBgdGVzdCAtZiAnZ3N0cGlwZWxpbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGlwZWxpbmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBpcGVsaW5lLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBpcGVsaW5lLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHBpcGVsaW5lLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBpcGVsaW5lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwaXBlbGluZS5sbyBgdGVzdCAtZiAnZ3N0cGlwZWxpbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGlwZWxpbmUuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2luLmxvOiBnc3RwbHVnaW4uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbi5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbi5sbyBgdGVzdCAtZiAnZ3N0cGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RwbHVnaW4uYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwbHVnaW4ubG8gYHRlc3QgLWYgJ2dzdHBsdWdpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwbHVnaW4uYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5sbzogZ3N0cGx1Z2luZmVhdHVyZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbmZlYXR1cmUuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwbHVnaW5mZWF0dXJlLmxvIGB0ZXN0IC1mICdnc3RwbHVnaW5mZWF0dXJlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBsdWdpbmZlYXR1cmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbmZlYXR1cmUuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2luZmVhdHVyZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RwbHVnaW5mZWF0dXJlLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbmZlYXR1cmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbmZlYXR1cmUubG8gYHRlc3QgLWYgJ2dzdHBsdWdpbmZlYXR1cmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGx1Z2luZmVhdHVyZS5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwbHVnaW5sb2FkZXIubG86IGdzdHBsdWdpbmxvYWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2lubG9hZGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2lubG9hZGVyLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2lubG9hZGVyLmxvIGB0ZXN0IC1mICdnc3RwbHVnaW5sb2FkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cGx1Z2lubG9hZGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwbHVnaW5sb2FkZXIuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGx1Z2lubG9hZGVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHBsdWdpbmxvYWRlci5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwbHVnaW5sb2FkZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBsdWdpbmxvYWRlci5sbyBgdGVzdCAtZiAnZ3N0cGx1Z2lubG9hZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBsdWdpbmxvYWRlci5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rwb2xsLmxvOiBnc3Rwb2xsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rwb2xsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cG9sbC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBvbGwubG8gYHRlc3QgLWYgJ2dzdHBvbGwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cG9sbC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cG9sbC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rwb2xsLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHBvbGwuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cG9sbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cG9sbC5sbyBgdGVzdCAtZiAnZ3N0cG9sbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rwb2xsLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHByZXNldC5sbzogZ3N0cHJlc2V0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwcmVzZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwcmVzZXQuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwcmVzZXQubG8gYHRlc3QgLWYgJ2dzdHByZXNldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwcmVzZXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHByZXNldC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwcmVzZXQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cHJlc2V0LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHByZXNldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHJlc2V0LmxvIGB0ZXN0IC1mICdnc3RwcmVzZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cHJlc2V0LmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHByb3RlY3Rpb24ubG86IGdzdHByb3RlY3Rpb24uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHByb3RlY3Rpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rwcm90ZWN0aW9uLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHJvdGVjdGlvbi5sbyBgdGVzdCAtZiAnZ3N0cHJvdGVjdGlvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rwcm90ZWN0aW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rwcm90ZWN0aW9uLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHByb3RlY3Rpb24uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cHJvdGVjdGlvbi5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rwcm90ZWN0aW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rwcm90ZWN0aW9uLmxvIGB0ZXN0IC1mICdnc3Rwcm90ZWN0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHByb3RlY3Rpb24uYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVhcmsubG86IGdzdHF1YXJrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWFyay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHF1YXJrLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVhcmsubG8gYHRlc3QgLWYgJ2dzdHF1YXJrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF1YXJrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWFyay5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWFyay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RxdWFyay5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWFyay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVhcmsubG8gYHRlc3QgLWYgJ2dzdHF1YXJrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF1YXJrLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHF1ZXJ5LmxvOiBnc3RxdWVyeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVlcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWVyeS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHF1ZXJ5LmxvIGB0ZXN0IC1mICdnc3RxdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdWVyeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVlcnkuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVlcnkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cXVlcnkuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVlcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHF1ZXJ5LmxvIGB0ZXN0IC1mICdnc3RxdWVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdWVyeS5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeS5sbzogZ3N0cmVnaXN0cnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cmVnaXN0cnkuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeS5sbyBgdGVzdCAtZiAnZ3N0cmVnaXN0cnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmVnaXN0cnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJlZ2lzdHJ5LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeS5sbyBgdGVzdCAtZiAnZ3N0cmVnaXN0cnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmVnaXN0cnkuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cmVnaXN0cnljaHVua3MubG86IGdzdHJlZ2lzdHJ5Y2h1bmtzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeWNodW5rcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5Y2h1bmtzLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cmVnaXN0cnljaHVua3MubG8gYHRlc3QgLWYgJ2dzdHJlZ2lzdHJ5Y2h1bmtzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJlZ2lzdHJ5Y2h1bmtzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeWNodW5rcy5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeWNodW5rcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RyZWdpc3RyeWNodW5rcy5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeWNodW5rcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cmVnaXN0cnljaHVua3MubG8gYHRlc3QgLWYgJ2dzdHJlZ2lzdHJ5Y2h1bmtzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJlZ2lzdHJ5Y2h1bmtzLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHNhbXBsZS5sbzogZ3N0c2FtcGxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzYW1wbGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzYW1wbGUuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzYW1wbGUubG8gYHRlc3QgLWYgJ2dzdHNhbXBsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzYW1wbGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHNhbXBsZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzYW1wbGUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c2FtcGxlLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHNhbXBsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c2FtcGxlLmxvIGB0ZXN0IC1mICdnc3RzYW1wbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c2FtcGxlLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHNlZ21lbnQubG86IGdzdHNlZ21lbnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHNlZ21lbnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzZWdtZW50LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c2VnbWVudC5sbyBgdGVzdCAtZiAnZ3N0c2VnbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzZWdtZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzZWdtZW50LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHNlZ21lbnQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c2VnbWVudC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzZWdtZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzZWdtZW50LmxvIGB0ZXN0IC1mICdnc3RzZWdtZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNlZ21lbnQuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RyZWFtY29sbGVjdGlvbi5sbzogZ3N0c3RyZWFtY29sbGVjdGlvbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RyZWFtY29sbGVjdGlvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cmVhbWNvbGxlY3Rpb24uVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJlYW1jb2xsZWN0aW9uLmxvIGB0ZXN0IC1mICdnc3RzdHJlYW1jb2xsZWN0aW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHN0cmVhbWNvbGxlY3Rpb24uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cmVhbWNvbGxlY3Rpb24uVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RyZWFtY29sbGVjdGlvbi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzdHJlYW1jb2xsZWN0aW9uLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cmVhbWNvbGxlY3Rpb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cmVhbWNvbGxlY3Rpb24ubG8gYHRlc3QgLWYgJ2dzdHN0cmVhbWNvbGxlY3Rpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3RyZWFtY29sbGVjdGlvbi5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJlYW1zLmxvOiBnc3RzdHJlYW1zLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJlYW1zLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RyZWFtcy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cmVhbXMubG8gYHRlc3QgLWYgJ2dzdHN0cmVhbXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3RyZWFtcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RyZWFtcy5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJlYW1zLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHN0cmVhbXMuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RyZWFtcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RyZWFtcy5sbyBgdGVzdCAtZiAnZ3N0c3RyZWFtcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdHJlYW1zLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cnVjdHVyZS5sbzogZ3N0c3RydWN0dXJlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJ1Y3R1cmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJ1Y3R1cmUuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJ1Y3R1cmUubG8gYHRlc3QgLWYgJ2dzdHN0cnVjdHVyZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdHJ1Y3R1cmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cnVjdHVyZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzdHJ1Y3R1cmUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c3RydWN0dXJlLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN0cnVjdHVyZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3RydWN0dXJlLmxvIGB0ZXN0IC1mICdnc3RzdHJ1Y3R1cmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3RydWN0dXJlLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN5c3RlbWNsb2NrLmxvOiBnc3RzeXN0ZW1jbG9jay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3lzdGVtY2xvY2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RzeXN0ZW1jbG9jay5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN5c3RlbWNsb2NrLmxvIGB0ZXN0IC1mICdnc3RzeXN0ZW1jbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzeXN0ZW1jbG9jay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3lzdGVtY2xvY2suVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3lzdGVtY2xvY2suUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c3lzdGVtY2xvY2suYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0c3lzdGVtY2xvY2subG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHN5c3RlbWNsb2NrLmxvIGB0ZXN0IC1mICdnc3RzeXN0ZW1jbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzeXN0ZW1jbG9jay5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdsaXN0LmxvOiBnc3R0YWdsaXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdsaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFnbGlzdC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhZ2xpc3QubG8gYHRlc3QgLWYgJ2dzdHRhZ2xpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGFnbGlzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFnbGlzdC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdsaXN0LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHRhZ2xpc3QuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFnbGlzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFnbGlzdC5sbyBgdGVzdCAtZiAnZ3N0dGFnbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0YWdsaXN0LmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhZ3NldHRlci5sbzogZ3N0dGFnc2V0dGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdzZXR0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdzZXR0ZXIuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdzZXR0ZXIubG8gYHRlc3QgLWYgJ2dzdHRhZ3NldHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0YWdzZXR0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhZ3NldHRlci5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YWdzZXR0ZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dGFnc2V0dGVyLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhZ3NldHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFnc2V0dGVyLmxvIGB0ZXN0IC1mICdnc3R0YWdzZXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGFnc2V0dGVyLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhc2subG86IGdzdHRhc2suYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhc2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFzay5sbyBgdGVzdCAtZiAnZ3N0dGFzay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0YXNrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhc2suUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dGFzay5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrLmxvIGB0ZXN0IC1mICdnc3R0YXNrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRhc2suYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFza3Bvb2wubG86IGdzdHRhc2twb29sLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrcG9vbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRhc2twb29sLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFza3Bvb2wubG8gYHRlc3QgLWYgJ2dzdHRhc2twb29sLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRhc2twb29sLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrcG9vbC5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrcG9vbC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R0YXNrcG9vbC5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0YXNrcG9vbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGFza3Bvb2wubG8gYHRlc3QgLWYgJ2dzdHRhc2twb29sLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRhc2twb29sLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRvYy5sbzogZ3N0dG9jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2MuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2MubG8gYHRlc3QgLWYgJ2dzdHRvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0b2MuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRvYy5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2MuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dG9jLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRvYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dG9jLmxvIGB0ZXN0IC1mICdnc3R0b2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dG9jLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRvY3NldHRlci5sbzogZ3N0dG9jc2V0dGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2NzZXR0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2NzZXR0ZXIuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2NzZXR0ZXIubG8gYHRlc3QgLWYgJ2dzdHRvY3NldHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0b2NzZXR0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRvY3NldHRlci5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0b2NzZXR0ZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dG9jc2V0dGVyLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRvY3NldHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dG9jc2V0dGVyLmxvIGB0ZXN0IC1mICdnc3R0b2NzZXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dG9jc2V0dGVyLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlci5sbzogZ3N0dHJhY2VyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXIuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXIubG8gYHRlc3QgLWYgJ2dzdHRyYWNlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0cmFjZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlci5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dHJhY2VyLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VyLmxvIGB0ZXN0IC1mICdnc3R0cmFjZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHJhY2VyLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcmZhY3RvcnkubG86IGdzdHRyYWNlcmZhY3RvcnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcmZhY3RvcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJmYWN0b3J5LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VyZmFjdG9yeS5sbyBgdGVzdCAtZiAnZ3N0dHJhY2VyZmFjdG9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0cmFjZXJmYWN0b3J5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJmYWN0b3J5LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcmZhY3RvcnkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dHJhY2VyZmFjdG9yeS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJmYWN0b3J5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJmYWN0b3J5LmxvIGB0ZXN0IC1mICdnc3R0cmFjZXJmYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRyYWNlcmZhY3RvcnkuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VycmVjb3JkLmxvOiBnc3R0cmFjZXJyZWNvcmQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcnJlY29yZC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcnJlY29yZC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcnJlY29yZC5sbyBgdGVzdCAtZiAnZ3N0dHJhY2VycmVjb3JkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRyYWNlcnJlY29yZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VycmVjb3JkLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcnJlY29yZC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R0cmFjZXJyZWNvcmQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VycmVjb3JkLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJyZWNvcmQubG8gYHRlc3QgLWYgJ2dzdHRyYWNlcnJlY29yZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0cmFjZXJyZWNvcmQuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VydXRpbHMubG86IGdzdHRyYWNlcnV0aWxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJ1dGlscy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyYWNlcnV0aWxzLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VydXRpbHMubG8gYHRlc3QgLWYgJ2dzdHRyYWNlcnV0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRyYWNlcnV0aWxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJ1dGlscy5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJ1dGlscy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R0cmFjZXJ1dGlscy5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmFjZXJ1dGlscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJhY2VydXRpbHMubG8gYHRlc3QgLWYgJ2dzdHRyYWNlcnV0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRyYWNlcnV0aWxzLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHR5cGVmaW5kLmxvOiBnc3R0eXBlZmluZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZC5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHR5cGVmaW5kLmxvIGB0ZXN0IC1mICdnc3R0eXBlZmluZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0eXBlZmluZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmQuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dHlwZWZpbmQuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHR5cGVmaW5kLmxvIGB0ZXN0IC1mICdnc3R0eXBlZmluZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0eXBlZmluZC5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZGZhY3RvcnkubG86IGdzdHR5cGVmaW5kZmFjdG9yeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRmYWN0b3J5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRmYWN0b3J5LlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRmYWN0b3J5LmxvIGB0ZXN0IC1mICdnc3R0eXBlZmluZGZhY3RvcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHlwZWZpbmRmYWN0b3J5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZGZhY3RvcnkuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRmYWN0b3J5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHR5cGVmaW5kZmFjdG9yeS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZGZhY3RvcnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHR5cGVmaW5kZmFjdG9yeS5sbyBgdGVzdCAtZiAnZ3N0dHlwZWZpbmRmYWN0b3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHR5cGVmaW5kZmFjdG9yeS5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1cmkubG86IGdzdHVyaS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dXJpLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dXJpLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dXJpLmxvIGB0ZXN0IC1mICdnc3R1cmkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dXJpLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1cmkuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dXJpLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHVyaS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1cmkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHVyaS5sbyBgdGVzdCAtZiAnZ3N0dXJpLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHVyaS5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1dGlscy5sbzogZ3N0dXRpbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHV0aWxzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dXRpbHMuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1dGlscy5sbyBgdGVzdCAtZiAnZ3N0dXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dXRpbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHV0aWxzLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHV0aWxzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHV0aWxzLmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHV0aWxzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R1dGlscy5sbyBgdGVzdCAtZiAnZ3N0dXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dXRpbHMuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dmFsdWUubG86IGdzdHZhbHVlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R2YWx1ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHZhbHVlLlRwbyAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dmFsdWUubG8gYHRlc3QgLWYgJ2dzdHZhbHVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZhbHVlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R2YWx1ZS5UcG8gJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R2YWx1ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2YWx1ZS5jJyBvYmplY3Q9J2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R2YWx1ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dmFsdWUubG8gYHRlc3QgLWYgJ2dzdHZhbHVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZhbHVlLmMKLQotbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcnNlLmxvOiBnc3RwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyc2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwYXJzZS5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcnNlLmxvIGB0ZXN0IC1mICdnc3RwYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cGFyc2UuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cGFyc2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHBhcnNlLmxvIGB0ZXN0IC1mICdnc3RwYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwYXJzZS5jCi0KLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeWJpbmFyeS5sbzogZ3N0cmVnaXN0cnliaW5hcnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5YmluYXJ5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cmVnaXN0cnliaW5hcnkuVHBvIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeWJpbmFyeS5sbyBgdGVzdCAtZiAnZ3N0cmVnaXN0cnliaW5hcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmVnaXN0cnliaW5hcnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5YmluYXJ5LlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5YmluYXJ5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJlZ2lzdHJ5YmluYXJ5LmMnIG9iamVjdD0nbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHJlZ2lzdHJ5YmluYXJ5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RyZWdpc3RyeWJpbmFyeS5sbyBgdGVzdCAtZiAnZ3N0cmVnaXN0cnliaW5hcnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmVnaXN0cnliaW5hcnkuYwotCi1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZW51bXR5cGVzLmxvOiBnc3RlbnVtdHlwZXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVudW10eXBlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVudW10eXBlcy5UcG8gLWMgLW8gbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVudW10eXBlcy5sbyBgdGVzdCAtZiAnZ3N0ZW51bXR5cGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVudW10eXBlcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZW51bXR5cGVzLlRwbyAkKERFUERJUikvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGVudW10eXBlcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RlbnVtdHlwZXMuYycgb2JqZWN0PSdsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZW51bXR5cGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RlbnVtdHlwZXMubG8gYHRlc3QgLWYgJ2dzdGVudW10eXBlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlbnVtdHlwZXMuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotaW5zdGFsbC1naXJEQVRBOiAkKGdpcl9EQVRBKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChnaXJkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGdpcmRpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZ2lyZGlyKSciOyBcCi0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZ2lyZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1naXJEQVRBOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoZ2lyX0RBVEEpJzsgdGVzdCAtbiAiJChnaXJkaXIpIiB8fCBsaXN0PTsgXAotCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChnaXJkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotaW5zdGFsbC10eXBlbGlic0RBVEE6ICQodHlwZWxpYnNfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJCh0eXBlbGlic19EQVRBKSc7IHRlc3QgLW4gIiQodHlwZWxpYnNkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQodHlwZWxpYnNkaXIpJyI7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtdHlwZWxpYnNEQVRBOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQodHlwZWxpYnNfREFUQSknOyB0ZXN0IC1uICIkKHR5cGVsaWJzZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQodHlwZWxpYnNkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotaW5zdGFsbC1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUzogJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSciOyBcCi0JICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAotCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLWluc3RhbGwtbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTOiAkKG5vZGlzdF9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQobm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciknIjsgXAotCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQobm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAotCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChsaWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKLQlAZmFpbD07IFwKLQlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAotCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCi0JZWxzZSBcCi0JICBmYWlsY29tPSdleGl0IDEnOyBcCi0JZmk7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1yZWN1cnNpdmUKLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1yZWN1cnNpdmUKLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKLQkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKLQkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAotCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKLQkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAotCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCi0JCWFtX19za2lwX21vZGVfZml4PTogXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKERBVEEpICQoSEVBREVSUykgYWxsLWxvY2FsCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoZ2lyZGlyKSIgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgIiQoREVTVERJUikkKGxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiAiJChERVNURElSKSQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0JLXRlc3QgLXogIiQoRElTVENMRUFORklMRVMpIiB8fCBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLQktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQotY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1yZWN1cnNpdmUKLQotZHZpLWFtOgotCi1odG1sOiBodG1sLXJlY3Vyc2l2ZQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLXJlY3Vyc2l2ZQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZ2lyREFUQSBcCi0JaW5zdGFsbC1saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUyBcCi0JaW5zdGFsbC1ub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlMgXAotCWluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1saWJMVExJQlJBUklFUwotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLXJlY3Vyc2l2ZQotCi1wZGYtYW06Ci0KLXBzOiBwcy1yZWN1cnNpdmUKLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWdpckRBVEEgdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKLQl1bmluc3RhbGwtbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlMgXAotCXVuaW5zdGFsbC1ub2Rpc3RfbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlMgXAotCXVuaW5zdGFsbC10eXBlbGlic0RBVEEKLQotLk1BS0U6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBhbGwgY2hlY2sgaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBhbGwtbG9jYWwgXAotCWNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgXAotCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1naXJEQVRBIFwKLQlpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAotCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAotCWluc3RhbGwtbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlMgXAotCWluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLW5vZGlzdF9saWJnc3RyZWFtZXJfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUyBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGwtdHlwZWxpYnNEQVRBIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWdpckRBVEEgXAotCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCi0JdW5pbnN0YWxsLWxpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtbm9kaXN0X2xpYmdzdHJlYW1lcl9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi1nc3RlbnVtdHlwZXMuaDogJChnc3RfaGVhZGVycykKLQkkKEFNX1ZfR0VOKSQoR0xJQl9NS0VOVU1TKSBcCi0JLS1maGVhZCAiI2lmbmRlZiBfX0dTVF9FTlVNX1RZUEVTX0hfX1xuI2RlZmluZSBfX0dTVF9FTlVNX1RZUEVTX0hfX1xuXG4jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD5cblxuR19CRUdJTl9ERUNMU1xuIiBcCi0JLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqL1xuIiBcCi0JLS12aGVhZCAiR1R5cGUgQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpO1xuI2RlZmluZSBHU1RfVFlQRV9ARU5VTVNIT1JUQCAoQGVudW1fbmFtZUBfZ2V0X3R5cGUoKSlcbiIgICAgICAgICBcCi0JLS1mdGFpbCAiR19FTkRfREVDTFNcblxuI2VuZGlmIC8qIF9fR1NUX0VOVU1fVFlQRVNfSF9fICovIiBcCi0JJF4gPiBnc3RlbnVtdHlwZXMuaAotCi1nc3RlbnVtdHlwZXMuYzogJChnc3RfaGVhZGVycykKLQkkKEFNX1ZfR0VOKSQoR0xJQl9NS0VOVU1TKSBcCi0JLS1maGVhZCAiI2luY2x1ZGUgXCJnc3RfcHJpdmF0ZS5oXCJcbiNpbmNsdWRlIDxnc3QvZ3N0Lmg+XG4jZGVmaW5lIENfRU5VTSh2KSAoKGdpbnQpIHYpXG4jZGVmaW5lIENfRkxBR1ModikgKChndWludCkgdilcbiAiIFwKLQktLWZwcm9kICJcbi8qIGVudW1lcmF0aW9ucyBmcm9tIFwiQGZpbGVuYW1lQFwiICovIiBcCi0JLS12aGVhZCAiR1R5cGVcbkBlbnVtX25hbWVAX2dldF90eXBlICh2b2lkKVxue1xuICBzdGF0aWMgZ3NpemUgaWQgPSAwO1xuICBzdGF0aWMgY29uc3QgR0BUeXBlQFZhbHVlIHZhbHVlc1tdID0geyIgICAgIFwKLQktLXZwcm9kICIgICAgeyBDX0BUWVBFQChAVkFMVUVOQU1FQCksIFwiQFZBTFVFTkFNRUBcIiwgXCJAdmFsdWVuaWNrQFwiIH0sIiBcCi0JLS12dGFpbCAiICAgIHsgMCwgTlVMTCwgTlVMTCB9XG4gIH07XG5cbiAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7XG4gICAgR1R5cGUgdG1wID0gZ19AdHlwZUBfcmVnaXN0ZXJfc3RhdGljIChcIkBFbnVtTmFtZUBcIiwgdmFsdWVzKTtcbiAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApO1xuICB9XG5cbiAgcmV0dXJuIChHVHlwZSkgaWQ7XG59IiBcCi0JJF4gPiBnc3RlbnVtdHlwZXMuYwotCi0lLmMuZ2NvdjogLmxpYnMvbGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLSUuZ2NkYSAlLmMKLQkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0Ci0KLWdjb3Y6ICQobGliZ3N0cmVhbWVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVM6PS5nY292KQotCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAR3N0LUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQC5sYQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKUdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSIiIEdTVF9QTFVHSU5fUEFUSF8xXzA9IiIgR1NUX1JFR0lTVFJZX1VQREFURT1ubyBHSV9TQ0FOTkVSX0RJU0FCTEVfQ0FDSEU9eWVzIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIENDPSIkKENDKSIgUEtHX0NPTkZJRz0iJChQS0dfQ09ORklHKSIgRExMVE9PTD0iJChETExUT09MKSIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIC12IC0tbmFtZXNwYWNlIEdzdCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW5zdmVyc2lvbj1AR1NUX0FQSV9WRVJTSU9OQCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXZlcmJvc2UgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS13YXJuLWFsbCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX3NyY2RpcikgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9idWlsZGRpcikgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLURJTl9HT0JKRUNUX0lOVFJPU1BFQ1RJT049MSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWMtaW5jbHVkZT0nZ3N0L2dzdC5oJyBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnJhcnk9bGliZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0taW5jbHVkZT1HTGliLTIuMCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWluY2x1ZGU9R09iamVjdC0yLjAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1pbmNsdWRlPUdNb2R1bGUtMi4wIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlidG9vbD0iJHtMSUJUT09MfSIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ2xpYi0yLjAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ29iamVjdC0yLjAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ21vZHVsZS1uby1leHBvcnQtMi4wIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1hZGQtaW5pdC1zZWN0aW9uPSIkKElOVFJPU1BFQ1RJT05fSU5JVCkiIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tb3V0cHV0ICRAIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoZ2lyX2hlYWRlcnMpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoZ2lyX3NvdXJjZXMpCi0KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAlLnR5cGVsaWI6ICUuZ2lyICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQotCi0jIHRyeSB0byBwcmV2ZW50IHBhY2thZ2luZyBlcnJvcnMKLWNoZWNrLWxpYmV4ZWNkaXItY29uc2lzdGVuY3k6Ci0JQGlmIHRlc3QgIiR7R1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRH0iICE9ICIke2xpYmV4ZWNkaXJ9L2dzdHJlYW1lci0kKEdTVF9BUElfVkVSU0lPTikvZ3N0LXBsdWdpbi1zY2FubmVyIjsgdGhlbiBcCi0JICBlY2hvICIqKiogSW5jb25zaXN0ZW50IGxpYmV4ZWNkaXIhIFBsZWFzZSB1c2UgLi9jb25maWd1cmUgLS1saWJleGVjZGlyPS9mb28vYmFyIjsgXAotCSAgZWNobyAiKioqIHRvIHNldCB0aGUgbGliZXhlY2RpciBhbmQgbm90IG1ha2UgbGliZXhlY2Rpcj0vZm9vL2JhciBvciB0aGUgbGlrZS4iOyBcCi0JICBlY2hvICIqKiogVGhlIHNhbWUgZ29lcyBmb3IgcHJlZml4LCBsaWJkaXIgZXRjLiI7IFwKLQkgIGVjaG8gIioqKiAke0dTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUR9ICE9ICR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSQoR1NUX0FQSV9WRVJTSU9OKS9nc3QtcGx1Z2luLXNjYW5uZXIiOyBcCi0JICBleGl0IDE7IFwKLQlmaQotCi1hbGwtbG9jYWw6IGNoZWNrLWxpYmV4ZWNkaXItY29uc2lzdGVuY3kKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2dldHRleHQuaCBiL2dzdC9nZXR0ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNzBhYjcuLjAwMDAwMDAKLS0tIGEvZ3N0L2dldHRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qIENvbnZlbmllbmNlIGhlYWRlciBmb3IgY29uZGl0aW9uYWwgdXNlIG9mIEdOVSA8bGliaW50bC5oPi4KLSAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCi0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCi0gICBVU0EuICAqLwotCi0jaWZuZGVmIF9MSUJHRVRURVhUX0gKLSNkZWZpbmUgX0xJQkdFVFRFWFRfSCAxCi0KLS8qIE5MUyBjYW4gYmUgZGlzYWJsZWQgdGhyb3VnaCB0aGUgY29uZmlndXJlIC0tZGlzYWJsZS1ubHMgb3B0aW9uLiAgKi8KLSNpZmRlZiBFTkFCTEVfTkxTCi0KLS8qIEdldCBkZWNsYXJhdGlvbnMgb2YgR05VIG1lc3NhZ2UgY2F0YWxvZyBmdW5jdGlvbnMuICAqLwotIyBpbmNsdWRlIDxsaWJpbnRsLmg+Ci0KLSNlbHNlCi0KLS8qIFNvbGFyaXMgL3Vzci9pbmNsdWRlL2xvY2FsZS5oIGluY2x1ZGVzIC91c3IvaW5jbHVkZS9saWJpbnRsLmgsIHdoaWNoCi0gICBjaG9rZXMgaWYgZGNnZXR0ZXh0IGlzIGRlZmluZWQgYXMgYSBtYWNyby4gIFNvIGluY2x1ZGUgaXQgbm93LCB0byBtYWtlCi0gICBsYXRlciBpbmNsdXNpb25zIG9mIDxsb2NhbGUuaD4gYSBOT1AuICBXZSBkb24ndCBpbmNsdWRlIDxsaWJpbnRsLmg+Ci0gICBhcyB3ZWxsIGJlY2F1c2UgcGVvcGxlIHVzaW5nICJnZXR0ZXh0LmgiIHdpbGwgbm90IGluY2x1ZGUgPGxpYmludGwuaD4sCi0gICBhbmQgYWxzbyBpbmNsdWRpbmcgPGxpYmludGwuaD4gd291bGQgZmFpbCBvbiBTdW5PUyA0LCB3aGVyZWFzIDxsb2NhbGUuaD4KLSAgIGlzIE9LLiAgKi8KLSNpZiBkZWZpbmVkKF9fc3VuKQotIyBpbmNsdWRlIDxsb2NhbGUuaD4KLSNlbmRpZgotCi0vKiBEaXNhYmxlZCBOTFMuCi0gICBUaGUgY2FzdHMgdG8gJ2NvbnN0IGNoYXIgKicgc2VydmUgdGhlIHB1cnBvc2Ugb2YgcHJvZHVjaW5nIHdhcm5pbmdzCi0gICBmb3IgaW52YWxpZCB1c2VzIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRoZXNlIGZ1bmN0aW9ucy4KLSAgIE9uIHByZS1BTlNJIHN5c3RlbXMgd2l0aG91dCAnY29uc3QnLCB0aGUgY29uZmlnLmggZmlsZSBpcyBzdXBwb3NlZCB0bwotICAgY29udGFpbiAiI2RlZmluZSBjb25zdCIuICAqLwotIyBkZWZpbmUgZ2V0dGV4dChNc2dpZCkgKChjb25zdCBjaGFyICopIChNc2dpZCkpCi0jIGRlZmluZSBkZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZCkgKChjb25zdCBjaGFyICopIChNc2dpZCkpCi0jIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSAoKGNvbnN0IGNoYXIgKikgKE1zZ2lkKSkKLSMgZGVmaW5lIG5nZXR0ZXh0KE1zZ2lkMSwgTXNnaWQyLCBOKSBcCi0gICAgKChOKSA9PSAxID8gKGNvbnN0IGNoYXIgKikgKE1zZ2lkMSkgOiAoY29uc3QgY2hhciAqKSAoTXNnaWQyKSkKLSMgZGVmaW5lIGRuZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZDEsIE1zZ2lkMiwgTikgXAotICAgICgoTikgPT0gMSA/IChjb25zdCBjaGFyICopIChNc2dpZDEpIDogKGNvbnN0IGNoYXIgKikgKE1zZ2lkMikpCi0jIGRlZmluZSBkY25nZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkMSwgTXNnaWQyLCBOLCBDYXRlZ29yeSkgXAotICAgICgoTikgPT0gMSA/IChjb25zdCBjaGFyICopIChNc2dpZDEpIDogKGNvbnN0IGNoYXIgKikgKE1zZ2lkMikpCi0jIGRlZmluZSB0ZXh0ZG9tYWluKERvbWFpbm5hbWUpICgoY29uc3QgY2hhciAqKSAoRG9tYWlubmFtZSkpCi0jIGRlZmluZSBiaW5kdGV4dGRvbWFpbihEb21haW5uYW1lLCBEaXJuYW1lKSAoKGNvbnN0IGNoYXIgKikgKERpcm5hbWUpKQotIyBkZWZpbmUgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoRG9tYWlubmFtZSwgQ29kZXNldCkgKChjb25zdCBjaGFyICopIChDb2Rlc2V0KSkKLQotI2VuZGlmCi0KLS8qIEEgcHNldWRvIGZ1bmN0aW9uIGNhbGwgdGhhdCBzZXJ2ZXMgYXMgYSBtYXJrZXIgZm9yIHRoZSBhdXRvbWF0ZWQKLSAgIGV4dHJhY3Rpb24gb2YgbWVzc2FnZXMsIGJ1dCBkb2VzIG5vdCBjYWxsIGdldHRleHQoKS4gIFRoZSBydW4tdGltZQotICAgdHJhbnNsYXRpb24gaXMgZG9uZSBhdCBhIGRpZmZlcmVudCBwbGFjZSBpbiB0aGUgY29kZS4KLSAgIFRoZSBhcmd1bWVudCwgU3RyaW5nLCBzaG91bGQgYmUgYSBsaXRlcmFsIHN0cmluZy4gIENvbmNhdGVuYXRlZCBzdHJpbmdzCi0gICBhbmQgb3RoZXIgc3RyaW5nIGV4cHJlc3Npb25zIHdvbid0IHdvcmsuCi0gICBUaGUgbWFjcm8ncyBleHBhbnNpb24gaXMgbm90IHBhcmVudGhlc2l6ZWQsIHNvIHRoYXQgaXQgaXMgc3VpdGFibGUgYXMKLSAgIGluaXRpYWxpemVyIGZvciBzdGF0aWMgJ2NoYXJbXScgb3IgJ2NvbnN0IGNoYXJbXScgdmFyaWFibGVzLiAgKi8KLSNkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCi0KLSNlbmRpZiAvKiBfTElCR0VUVEVYVF9IICovCmRpZmYgLS1naXQgYS9nc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIGIvZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzN2RlMi4uMDAwMDAwMAotLS0gYS9nc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIGdsaWItY29tcGF0LmMKLSAqIEZ1bmN0aW9ucyBjb3BpZWQgZnJvbSBnbGliIDIuMTAKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNSBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR0xJQl9DT01QQVRfUFJJVkFURV9IX18KLSNkZWZpbmUgX19HTElCX0NPTVBBVF9QUklWQVRFX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qIGNvcGllcyAqLwotCi0vKiBhZGFwdGF0aW9ucyAqLwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9nbGliLWNvbXBhdC5oIGIvZ3N0L2dsaWItY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYjI2N2IuLjAwMDAwMDAKLS0tIGEvZ3N0L2dsaWItY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3ICBQZXRlciBNYXR0aXMsIFNwZW5jZXIgS2ltYmFsbCBhbmQgSm9zaCBNYWNEb25hbGQKLSAqCi0gKiBnbGliLWNvbXBhdC5oOiBQdWJsaWMgR0xpYiBjb21wYXRpYmlsaXR5IHNoaW1zCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0vKgotICogTW9kaWZpZWQgYnkgdGhlIEdMaWIgVGVhbSBhbmQgb3RoZXJzIDE5OTctMjAwMC4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZnJvbQotICogZ2xpYi0yLjguMCBmb3IgYSBsaXN0IG9mIHBlb3BsZSBvbiB0aGUgR0xpYiBUZWFtLiBTZWUgdGhlIENoYW5nZUxvZyBmaWxlcwotICogZnJvbSBnbGliLTIuOC4wIGZvciBhIGxpc3Qgb2YgY2hhbmdlcy4gVGhlc2UgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIHdpdGggR0xpYgotICogYXQgZnRwOi8vZnRwLmd0ay5vcmcvcHViL2d0ay8uCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9HTElCX0NPTVBBVF9IX18KLSNkZWZpbmUgX19HU1RfR0xJQl9DT01QQVRfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0dMSUJfQ09NUEFUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdC1pMThuLWFwcC5oIGIvZ3N0L2dzdC1pMThuLWFwcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjE0MGU1Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3QtaTE4bi1hcHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotICoKLSAqIGdzdC1pMThuLWFwcC5oOiBpbnRlcm5hdGlvbmFsaXphdGlvbiBtYWNyb3MgZm9yIHRoZSBHU3RyZWFtZXIgdG9vbHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfSTE4Tl9BUFBfSF9fCi0jZGVmaW5lIF9fR1NUX0kxOE5fQVBQX0hfXwotCi0jaWZkZWYgRU5BQkxFX05MUwotCi0jaW5jbHVkZSA8bG9jYWxlLmg+ICAvKiBzb21lIHBlb3BsZSBuZWVkIGl0IGFuZCBzb21lIHBlb3BsZSBkb24ndCAqLwotI2luY2x1ZGUgImdldHRleHQuaCIgLyogaW5jbHVkZWQgd2l0aCBnZXR0ZXh0IGRpc3RyaWJ1dGlvbiBhbmQgY29waWVkICovCi0KLS8qIHdlIHdhbnQgdG8gdXNlIHNob3J0aGFuZCBfKCkgZm9yIHRyYW5zbGF0aW5nIGFuZCBOXygpIGZvciBtYXJraW5nICovCi0jZGVmaW5lIF8oU3RyaW5nKSBnZXR0ZXh0IChTdHJpbmcpCi0jZGVmaW5lIE5fKFN0cmluZykgZ2V0dGV4dF9ub29wIChTdHJpbmcpCi0vKiBGSVhNRTogaWYgd2UgbmVlZCBpdCwgd2UgY2FuIGFkZCBRXyBhcyB3ZWxsLCBsaWtlIGluIGdsaWIgKi8KLQotI2Vsc2UKLQotI2RlZmluZSBfKFN0cmluZykgU3RyaW5nCi0jZGVmaW5lIE5fKFN0cmluZykgU3RyaW5nCi0jZGVmaW5lIG5nZXR0ZXh0KFNpbmd1bGFyLFBsdXJhbCxDb3VudCkgKChDb3VudD4xKT9QbHVyYWw6U2luZ3VsYXIpCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19HU1RfSTE4Tl9BUFBfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0LWkxOG4tbGliLmggYi9nc3QvZ3N0LWkxOG4tbGliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNWMyODUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdC1pMThuLWxpYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0gKgotICogZ3N0LWkxOG4tbGliLmg6IGludGVybmF0aW9uYWxpemF0aW9uIG1hY3JvcyBmb3IgdGhlIEdTdHJlYW1lciBsaWJyYXJpZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfSTE4Tl9MSUJfSF9fCi0jZGVmaW5lIF9fR1NUX0kxOE5fTElCX0hfXwotCi0jaWZuZGVmIFBBQ0tBR0VfTkFNRQotI2Vycm9yIFlvdSBtdXN0IGluY2x1ZGUgY29uZmlnLmggYmVmb3JlIGluY2x1ZGluZyB0aGlzIGhlYWRlci4KLSNlbmRpZgotCi0jaWZkZWYgRU5BQkxFX05MUwotCi0jaW5jbHVkZSA8bG9jYWxlLmg+ICAvKiBzb21lIHBlb3BsZSBuZWVkIGl0IGFuZCBzb21lIHBlb3BsZSBkb24ndCAqLwotI2luY2x1ZGUgImdldHRleHQuaCIgLyogaW5jbHVkZWQgd2l0aCBnZXR0ZXh0IGRpc3RyaWJ1dGlvbiBhbmQgY29waWVkICovCi0KLS8qIHdlIHdhbnQgdG8gdXNlIHNob3J0aGFuZCBfKCkgZm9yIHRyYW5zbGF0aW5nIGFuZCBOXygpIGZvciBtYXJraW5nICovCi0jZGVmaW5lIF8oU3RyaW5nKSBkZ2V0dGV4dCAoR0VUVEVYVF9QQUNLQUdFLCBTdHJpbmcpCi0jZGVmaW5lIE5fKFN0cmluZykgZ2V0dGV4dF9ub29wIChTdHJpbmcpCi0vKiBGSVhNRTogaWYgd2UgbmVlZCBpdCwgd2UgY2FuIGFkZCBRXyBhcyB3ZWxsLCBsaWtlIGluIGdsaWIgKi8KLQotI2Vsc2UKLSNkZWZpbmUgXyhTdHJpbmcpIFN0cmluZwotI2RlZmluZSBOXyhTdHJpbmcpIFN0cmluZwotI2RlZmluZSBuZ2V0dGV4dChTaW5ndWxhcixQbHVyYWwsQ291bnQpICgoQ291bnQ+MSk/UGx1cmFsOlNpbmd1bGFyKQotCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fR1NUX0kxOE5fTElCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdC5jIGIvZ3N0L2dzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzI5NTNkLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMTIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdC5jOiBJbml0aWFsaXphdGlvbiBhbmQgbm9uLXBpcGVsaW5lIG9wZXJhdGlvbnMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0Ci0gKiBAc2hvcnRfZGVzY3JpcHRpb246IE1lZGlhIGxpYnJhcnkgc3VwcG9ydGluZyBhcmJpdHJhcnkgZm9ybWF0cyBhbmQgZmlsdGVyCi0gKiAgICAgICAgICAgICAgICAgICAgIGdyYXBocy4KLSAqCi0gKiBHU3RyZWFtZXIgaXMgYSBmcmFtZXdvcmsgZm9yIGNvbnN0cnVjdGluZyBncmFwaHMgb2YgdmFyaW91cyBmaWx0ZXJzCi0gKiAodGVybWVkIGVsZW1lbnRzIGhlcmUpIHRoYXQgd2lsbCBoYW5kbGUgc3RyZWFtaW5nIG1lZGlhLiAgQW55IGRpc2NyZXRlCi0gKiAocGFja2V0aXphYmxlKSBtZWRpYSB0eXBlIGlzIHN1cHBvcnRlZCwgd2l0aCBwcm92aXNpb25zIGZvciBhdXRvbWF0aWNhbGx5Ci0gKiBkZXRlcm1pbmluZyBzb3VyY2UgdHlwZS4gIEZvcm1hdHRpbmcvZnJhbWluZyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCB3aXRoCi0gKiBhIHBvd2VyZnVsIG5lZ290aWF0aW9uIGZyYW1ld29yay4gIFBsdWdpbnMgYXJlIGhlYXZpbHkgdXNlZCB0byBwcm92aWRlIGZvcgotICogYWxsIGVsZW1lbnRzLCBhbGxvd2luZyBvbmUgdG8gY29uc3RydWN0IHBsdWdpbnMgb3V0c2lkZSBvZiB0aGUgR1NUCi0gKiBsaWJyYXJ5LCBldmVuIHJlbGVhc2VkIGJpbmFyeS1vbmx5IGlmIGxpY2Vuc2UgcmVxdWlyZSAocGxlYXNlIGRvbid0KS4KLSAqIEdTdHJlYW1lciBjb3ZlcnMgYSB3aWRlIHJhbmdlIG9mIHVzZSBjYXNlcyBpbmNsdWRpbmc6IHBsYXliYWNrLCByZWNvcmRpbmcsCi0gKiBlZGl0aW5nLCBzZXJ2aW5nIHN0cmVhbXMsIHZvaWNlIG92ZXIgaXAgYW5kIHZpZGVvIGNhbGxzLgotICoKLSAqIFRoZSA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4gbGlicmFyeSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aAotICogZ3N0X2luaXQoKSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQuIFlvdSBzaG91bGQgcGFzcyBwb2ludGVycyB0byB0aGUgbWFpbiBhcmdjCi0gKiBhbmQgYXJndiB2YXJpYWJsZXMgc28gdGhhdCBHU3RyZWFtZXIgY2FuIHByb2Nlc3MgaXRzIG93biBjb21tYW5kIGxpbmUKLSAqIG9wdGlvbnMsIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZS4KLSAqCi0gKiA8ZXhhbXBsZT4KLSAqIDx0aXRsZT5Jbml0aWFsaXppbmcgdGhlIGdzdHJlYW1lciBsaWJyYXJ5PC90aXRsZT4KLSAqIDxwcm9ncmFtbGlzdGluZyBsYW5ndWFnZT0iYyI+Ci0gKiBpbnQKLSAqIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gKiB7Ci0gKiAgIC8vIGluaXRpYWxpemUgdGhlIEdTdHJlYW1lciBsaWJyYXJ5Ci0gKiAgIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7Ci0gKiAgIC4uLgotICogfQotICogPC9wcm9ncmFtbGlzdGluZz4KLSAqIDwvZXhhbXBsZT4KLSAqCi0gKiBJdCdzIGFsbG93ZWQgdG8gcGFzcyB0d28gJU5VTEwgcG9pbnRlcnMgdG8gZ3N0X2luaXQoKSBpbiBjYXNlIHlvdSBkb24ndCB3YW50Ci0gKiB0byBwYXNzIHRoZSBjb21tYW5kIGxpbmUgYXJncyB0byBHU3RyZWFtZXIuCi0gKgotICogWW91IGNhbiBhbHNvIHVzZSBHT3B0aW9uIHRvIGluaXRpYWxpemUgeW91ciBvd24gcGFyYW1ldGVycyBhcyBzaG93biBpbgotICogdGhlIG5leHQgY29kZSBmcmFnbWVudDoKLSAqIDxleGFtcGxlPgotICogPHRpdGxlPkluaXRpYWxpemluZyBvd24gcGFyYW1ldGVycyB3aGVuIGluaXRpYWxpemluZyBnc3RyZWFtZXI8L3RpdGxlPgotICogPHByb2dyYW1saXN0aW5nPgotICogc3RhdGljIGdib29sZWFuIHN0YXRzID0gRkFMU0U7Ci0gKiAuLi4KLSAqIGludAotICogbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAqIHsKLSAqICBHT3B0aW9uRW50cnkgb3B0aW9uc1tdID0gewotICogICB7InRhZ3MiLCAndCcsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmYW1wO3RhZ3MsCi0gKiAgICAgICBOXygiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIiksIE5VTEx9LAotICogICB7TlVMTH0KLSAqICB9OwotICogIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiW0FERElUSU9OQUwgQVJHVU1FTlRTXSIpOwotICogIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOwotICogIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOwotICogIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYW1wO2FyZ2MsICZhbXA7YXJndiwgJmFtcDtlcnIpKSB7Ci0gKiAgICBnX3ByaW50ICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAmcGVyY250O3NcbiIsIEdTVF9TVFJfTlVMTCAoZXJyLT5tZXNzYWdlKSk7Ci0gKiAgICBleGl0ICgxKTsKLSAqICB9Ci0gKiAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotICogLi4uCi0gKiB9Ci0gKiA8L3Byb2dyYW1saXN0aW5nPgotICogPC9leGFtcGxlPgotICoKLSAqIFVzZSBnc3RfdmVyc2lvbigpIHRvIHF1ZXJ5IHRoZSBsaWJyYXJ5IHZlcnNpb24gYXQgcnVudGltZSBvciB1c2UgdGhlCi0gKiBHU1RfVkVSU0lPTl8qIG1hY3JvcyB0byBmaW5kIHRoZSB2ZXJzaW9uIGF0IGNvbXBpbGUgdGltZS4gT3B0aW9uYWxseQotICogZ3N0X3ZlcnNpb25fc3RyaW5nKCkgcmV0dXJucyBhIHByaW50YWJsZSBzdHJpbmcuCi0gKgotICogVGhlIGdzdF9kZWluaXQoKSBjYWxsIGlzIHVzZWQgdG8gY2xlYW4gdXAgYWxsIGludGVybmFsIHJlc291cmNlcyB1c2VkCi0gKiBieSA8YXBwbGljYXRpb24+R1N0cmVhbWVyPC9hcHBsaWNhdGlvbj4uIEl0IGlzIG1vc3RseSB1c2VkIGluIHVuaXQgdGVzdHMgCi0gKiB0byBjaGVjayBmb3IgbGVha3MuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0Y29uZmlnLmgiCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBIQVZFX1NZU19VVFNOQU1FX0gKLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWZkZWYgR19PU19XSU4zMgotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOICAgICAvKiBwcmV2ZW50cyBmcm9tIGluY2x1ZGluZyB0b28gbWFueSB0aGluZ3MgKi8KLSNpbmNsdWRlIDx3aW5kb3dzLmg+ICAgICAgICAgICAgLyogR2V0U3RkSGFuZGxlLCB3aW5kb3dzIGNvbnNvbGUgKi8KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0LWkxOG4tbGliLmgiCi0jaW5jbHVkZSA8bG9jYWxlLmg+ICAgICAgICAgICAgIC8qIGZvciBMQ19BTEwgKi8KLQotI2luY2x1ZGUgImdzdC5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX0dTVF9JTklUCi0KLSNkZWZpbmUgTUFYX1BBVEhfU1BMSVQgIDE2Ci0jZGVmaW5lIEdTVF9QTFVHSU5fU0VQQVJBVE9SICIsIgotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2luaXRpYWxpemVkID0gRkFMU0U7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RlaW5pdGlhbGl6ZWQgPSBGQUxTRTsKLQotR3N0Q2xvY2tUaW1lIF9wcml2X2dzdF9zdGFydF90aW1lOwotCi0jaWZkZWYgR19PU19XSU4zMgotSE1PRFVMRSBfcHJpdl9nc3RfZGxsX2hhbmRsZSA9IE5VTEw7Ci0jZW5kaWYKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9SRUdJU1RSWQotR0xpc3QgKl9wcml2X2dzdF9wbHVnaW5fcGF0aHMgPSBOVUxMOyAgIC8qIGZvciBkZWxheWVkIHByb2Nlc3NpbmcgaW4gaW5pdF9wb3N0ICovCi0KLWV4dGVybiBnYm9vbGVhbiBfcHJpdl9nc3RfZGlzYWJsZV9yZWdpc3RyeV91cGRhdGU7Ci0jZW5kaWYKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLWNvbnN0IGdjaGFyICpwcml2X2dzdF9kdW1wX2RvdF9kaXI7Ci0jZW5kaWYKLQotLyogZGVmYXVsdHMgKi8KLQotLyogc2V0IHRvIFRSVUUgd2hlbiBzZWdmYXVsdHMgbmVlZCB0byBiZSBsZWZ0IGFzIGlzICovCi1zdGF0aWMgZ2Jvb2xlYW4gX2dzdF9kaXNhYmxlX3NlZ3RyYXAgPSBGQUxTRTsKLQotc3RhdGljIGdib29sZWFuIGluaXRfcHJlIChHT3B0aW9uQ29udGV4dCAqIGNvbnRleHQsIEdPcHRpb25Hcm91cCAqIGdyb3VwLAotICAgIGdwb2ludGVyIGRhdGEsIEdFcnJvciAqKiBlcnJvcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gaW5pdF9wb3N0IChHT3B0aW9uQ29udGV4dCAqIGNvbnRleHQsIEdPcHRpb25Hcm91cCAqIGdyb3VwLAotICAgIGdwb2ludGVyIGRhdGEsIEdFcnJvciAqKiBlcnJvcik7Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HCi1zdGF0aWMgZ2Jvb2xlYW4gcGFyc2VfZ29wdGlvbl9hcmcgKGNvbnN0IGdjaGFyICogc19vcHQsCi0gICAgY29uc3QgZ2NoYXIgKiBhcmcsIGdwb2ludGVyIGRhdGEsIEdFcnJvciAqKiBlcnIpOwotI2VuZGlmCi0KLUdTTGlzdCAqX3ByaXZfZ3N0X3ByZWxvYWRfcGx1Z2lucyA9IE5VTEw7Ci0KLWNvbnN0IGdjaGFyIGdfbG9nX2RvbWFpbl9nc3RyZWFtZXJbXSA9ICJHU3RyZWFtZXIiOwotCi1zdGF0aWMgdm9pZAotZGVidWdfbG9nX2hhbmRsZXIgKGNvbnN0IGdjaGFyICogbG9nX2RvbWFpbiwKLSAgICBHTG9nTGV2ZWxGbGFncyBsb2dfbGV2ZWwsIGNvbnN0IGdjaGFyICogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnX2xvZ19kZWZhdWx0X2hhbmRsZXIgKGxvZ19kb21haW4sIGxvZ19sZXZlbCwgbWVzc2FnZSwgdXNlcl9kYXRhKTsKLSAgLyogRklYTUU6IGRvIHdlIHN0aWxsIG5lZWQgdGhpcyA/IGZhdGFsIGVycm9ycyB0aGVzZSBkYXlzIGFyZSBhbGwKLSAgICogb3RoZXIgdGhhbiBjb3JlIGVycm9ycyAqLwotICAvKiBnX29uX2Vycm9yX3F1ZXJ5IChOVUxMKTsgKi8KLX0KLQotZW51bQotewotICBBUkdfVkVSU0lPTiA9IDEsCi0gIEFSR19GQVRBTF9XQVJOSU5HUywKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIEFSR19ERUJVR19MRVZFTCwKLSAgQVJHX0RFQlVHLAotICBBUkdfREVCVUdfRElTQUJMRSwKLSAgQVJHX0RFQlVHX05PX0NPTE9SLAotICBBUkdfREVCVUdfQ09MT1JfTU9ERSwKLSAgQVJHX0RFQlVHX0hFTFAsCi0jZW5kaWYKLSAgQVJHX1BMVUdJTl9TUEVXLAotICBBUkdfUExVR0lOX1BBVEgsCi0gIEFSR19QTFVHSU5fTE9BRCwKLSAgQVJHX1NFR1RSQVBfRElTQUJMRSwKLSAgQVJHX1JFR0lTVFJZX1VQREFURV9ESVNBQkxFLAotICBBUkdfUkVHSVNUUllfRk9SS19ESVNBQkxFCi19OwotCi0vKiBkZWJ1Zy1zcGVjIDo6PSBjYXRlZ29yeS1zcGVjIFssIGNhdGVnb3J5LXNwZWNdKgotICogY2F0ZWdvcnktc3BlYyA6Oj0gY2F0ZWdvcnk6dmFsIHwgdmFsCi0gKiBjYXRlZ29yeSA6Oj0gW146XSsKLSAqIHZhbCA6Oj0gWzAtNV0KLSAqLwotCi0jaWZkZWYgR19PU19XSU4zMgotLyogTm90ZTogRGxsTWFpbiBpcyBvbmx5IGNhbGxlZCB3aGVuIERMTHMgYXJlIGxvYWRlZCBvciB1bmxvYWRlZCwgc28gdGhpcyB3aWxsCi0gKiBuZXZlciBiZSBjYWxsZWQgaWYgbGliZ3N0cmVhbWVyLTEuMCBpcyBsaW5rZWQgc3RhdGljYWxseS4gRG8gbm90IGFkZCBhbnkgY29kZQotICogaGVyZSB0bywgc2F5LCBpbml0aWFsaXplIHZhcmlhYmxlcyBvciBzZXQgdGhpbmdzIHVwIHNpbmNlIHRoYXQgd2lsbCBvbmx5Ci0gKiBoYXBwZW4gZm9yIGR5bmFtaWNhbGx5LWJ1aWx0IEdTdHJlYW1lci4KLSAqCi0gKiBBbHNvLCBpZGVhbGx5IHRoaXMgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIHdoZW4gR1N0cmVhbWVyIGlzIGJ1aWx0IHN0YXRpY2FsbHkuCi0gKiBpLmUuLCBpdCBzaG91bGQgYmUgY29uZGl0aW9uYWwgb24gI2lmZGVmIERMTF9FWFBPUlQuIEl0IHdpbGwgYmUgaWdub3JlZCwgYnV0Ci0gKiBpZiBvdGhlciBsaWJyYXJpZXMgbWFrZSB0aGUgc2FtZSBtaXN0YWtlIG9mIGRlZmluaW5nIGl0IHdoZW4gYnVpbGRpbmcKLSAqIHN0YXRpY2FsbHksIHRoZXJlIHdpbGwgYmUgYSBzeW1ib2wgY29sbGlzaW9uIGR1cmluZyBsaW5raW5nLiBGaXhpbmcgdGhpcwotICogcmVxdWlyZXMgb25lIHRvIGJ1aWxkIHR3byBvYmplY3QgZmlsZXM6IG9uZSBmb3Igc3RhdGljIGxpbmtpbmcgYW5kIGFub3RoZXIKLSAqIGZvciBkeW5hbWljIGxpbmtpbmcuICovCi1CT09MIFdJTkFQSSBEbGxNYWluIChISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKTsKLUJPT0wgV0lOQVBJCi1EbGxNYWluIChISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKQotewotICBpZiAoZmR3UmVhc29uID09IERMTF9QUk9DRVNTX0FUVEFDSCkKLSAgICBfcHJpdl9nc3RfZGxsX2hhbmRsZSA9IChITU9EVUxFKSBoaW5zdERMTDsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXA6IChza2lwKQotICoKLSAqIFJldHVybnMgYSAjR09wdGlvbkdyb3VwIHdpdGggR1N0cmVhbWVyJ3MgYXJndW1lbnQgc3BlY2lmaWNhdGlvbnMuIFRoZQotICogZ3JvdXAgaXMgc2V0IHVwIHRvIHVzZSBzdGFuZGFyZCBHT3B0aW9uIGNhbGxiYWNrcywgc28gd2hlbiB1c2luZyB0aGlzCi0gKiBncm91cCBpbiBjb21iaW5hdGlvbiB3aXRoIEdPcHRpb24gcGFyc2luZyBtZXRob2RzLCBhbGwgYXJndW1lbnQgcGFyc2luZwotICogYW5kIGluaXRpYWxpemF0aW9uIGlzIGF1dG9tYXRlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgR1N0cmVhbWVyIHdpdGggb3RoZXIKLSAqIGxpYnJhcmllcyB0aGF0IHVzZSBHT3B0aW9uIChzZWUgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAoKSApLgotICoKLSAqIElmIHlvdSB1c2UgdGhpcyBmdW5jdGlvbiwgeW91IHNob3VsZCBtYWtlIHN1cmUgeW91IGluaXRpYWxpc2UgdGhlIEdMaWIKLSAqIHRocmVhZGluZyBzeXN0ZW0gYXMgb25lIG9mIHRoZSB2ZXJ5IGZpcnN0IHRoaW5ncyBpbiB5b3VyIHByb2dyYW0KLSAqIChzZWUgdGhlIGV4YW1wbGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24pLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBwb2ludGVyIHRvIEdTdHJlYW1lcidzIG9wdGlvbiBncm91cC4KLSAqLwotCi1HT3B0aW9uR3JvdXAgKgotZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAodm9pZCkKLXsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKLSAgR09wdGlvbkdyb3VwICpncm91cDsKLSAgc3RhdGljIGNvbnN0IEdPcHRpb25FbnRyeSBnc3RfYXJnc1tdID0gewotICAgIHsiZ3N0LXZlcnNpb24iLCAwLCBHX09QVElPTl9GTEFHX05PX0FSRywgR19PUFRJT05fQVJHX0NBTExCQUNLLAotICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLCBOXygiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIiksIE5VTEx9LAotICAgIHsiZ3N0LWZhdGFsLXdhcm5pbmdzIiwgMCwgR19PUFRJT05fRkxBR19OT19BUkcsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgKGdwb2ludGVyKSBwYXJzZV9nb3B0aW9uX2FyZywgTl8oIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIiksIE5VTEx9LAotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICB7ImdzdC1kZWJ1Zy1oZWxwIiwgMCwgR19PUFRJT05fRkxBR19OT19BUkcsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLAotICAgICAgICAgIE5fKCJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIpLAotICAgICAgICBOVUxMfSwKLSAgICB7ImdzdC1kZWJ1Zy1sZXZlbCIsIDAsIDAsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLAotICAgICAgICAgIE5fKCJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yICIKLSAgICAgICAgICAgICAgIjAgZm9yIG5vIG91dHB1dCIpLAotICAgICAgICBOXygiTEVWRUwiKX0sCi0gICAgeyJnc3QtZGVidWciLCAwLCAwLCBHX09QVElPTl9BUkdfQ0FMTEJBQ0ssIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsCi0gICAgICAgICAgTl8oIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0ICIKLSAgICAgICAgICAgICAgInNwZWNpZmljIGxldmVscyBmb3IgdGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogIgotICAgICAgICAgICAgICAiR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIiksCi0gICAgICAgIE5fKCJMSVNUIil9LAotICAgIHsiZ3N0LWRlYnVnLW5vLWNvbG9yIiwgMCwgR19PUFRJT05fRkxBR19OT19BUkcsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLCBOXygiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiKSwKLSAgICAgICAgTlVMTH0sCi0gICAgeyJnc3QtZGVidWctY29sb3ItbW9kZSIsIDAsIDAsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLAotICAgICAgICAgIE5fKCJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gIgotICAgICAgICAgICAgICAiUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsIGF1dG8sIHVuaXgiKSwKLSAgICAgICAgTlVMTH0sCi0gICAgeyJnc3QtZGVidWctZGlzYWJsZSIsIDAsIEdfT1BUSU9OX0ZMQUdfTk9fQVJHLCBHX09QVElPTl9BUkdfQ0FMTEJBQ0ssCi0gICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsIE5fKCJEaXNhYmxlIGRlYnVnZ2luZyIpLCBOVUxMfSwKLSNlbmRpZgotICAgIHsiZ3N0LXBsdWdpbi1zcGV3IiwgMCwgR19PUFRJT05fRkxBR19OT19BUkcsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLAotICAgICAgICAgIE5fKCJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIpLAotICAgICAgICBOVUxMfSwKLSAgICB7ImdzdC1wbHVnaW4tcGF0aCIsIDAsIDAsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLAotICAgICAgICBOXygiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIpLCBOXygiUEFUSFMiKX0sCi0gICAgeyJnc3QtcGx1Z2luLWxvYWQiLCAwLCAwLCBHX09QVElPTl9BUkdfQ0FMTEJBQ0ssCi0gICAgICAgICAgKGdwb2ludGVyKSBwYXJzZV9nb3B0aW9uX2FyZywKLSAgICAgICAgICBOXygiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSAiCi0gICAgICAgICAgICAgICJsaXN0IHN0b3JlZCBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiKSwKLSAgICAgICAgTl8oIlBMVUdJTlMiKX0sCi0gICAgeyJnc3QtZGlzYWJsZS1zZWd0cmFwIiwgMCwgR19PUFRJT05fRkxBR19OT19BUkcsIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLAotICAgICAgICAgIE5fKCJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIiksCi0gICAgICAgIE5VTEx9LAotICAgIHsiZ3N0LWRpc2FibGUtcmVnaXN0cnktdXBkYXRlIiwgMCwgR19PUFRJT05fRkxBR19OT19BUkcsCi0gICAgICAgICAgR19PUFRJT05fQVJHX0NBTExCQUNLLAotICAgICAgICAgIChncG9pbnRlcikgcGFyc2VfZ29wdGlvbl9hcmcsCi0gICAgICAgICAgTl8oIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IiksCi0gICAgICAgIE5VTEx9LAotICAgIHsiZ3N0LWRpc2FibGUtcmVnaXN0cnktZm9yayIsIDAsIEdfT1BUSU9OX0ZMQUdfTk9fQVJHLAotICAgICAgICAgIEdfT1BUSU9OX0FSR19DQUxMQkFDSywKLSAgICAgICAgICAoZ3BvaW50ZXIpIHBhcnNlX2dvcHRpb25fYXJnLAotICAgICAgICAgIE5fKCJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IiksCi0gICAgICAgIE5VTEx9LAotICAgIHtOVUxMfQotICB9OwotCi0gIGdyb3VwID0gZ19vcHRpb25fZ3JvdXBfbmV3ICgiZ3N0IiwgXygiR1N0cmVhbWVyIE9wdGlvbnMiKSwKLSAgICAgIF8oIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiKSwgTlVMTCwgTlVMTCk7Ci0gIGdfb3B0aW9uX2dyb3VwX3NldF9wYXJzZV9ob29rcyAoZ3JvdXAsIChHT3B0aW9uUGFyc2VGdW5jKSBpbml0X3ByZSwKLSAgICAgIChHT3B0aW9uUGFyc2VGdW5jKSBpbml0X3Bvc3QpOwotCi0gIGdfb3B0aW9uX2dyb3VwX2FkZF9lbnRyaWVzIChncm91cCwgZ3N0X2FyZ3MpOwotICBnX29wdGlvbl9ncm91cF9zZXRfdHJhbnNsYXRpb25fZG9tYWluIChncm91cCwgR0VUVEVYVF9QQUNLQUdFKTsKLQotICByZXR1cm4gZ3JvdXA7Ci0jZWxzZQotICByZXR1cm4gTlVMTDsKLSNlbmRpZgotfQotCi0vKioKLSAqIGdzdF9pbml0X2NoZWNrOgotICogQGFyZ2M6IChpbm91dCkgKGFsbG93LW5vbmUpOiBwb2ludGVyIHRvIGFwcGxpY2F0aW9uJ3MgYXJnYwotICogQGFyZ3Y6IChpbm91dCkgKGFycmF5IGxlbmd0aD1hcmdjKSAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gYXBwbGljYXRpb24ncyBhcmd2Ci0gKiBAZXJyOiBwb2ludGVyIHRvIGEgI0dFcnJvciB0byB3aGljaCBhIG1lc3NhZ2Ugd2lsbCBiZSBwb3N0ZWQgb24gZXJyb3IKLSAqCi0gKiBJbml0aWFsaXplcyB0aGUgR1N0cmVhbWVyIGxpYnJhcnksIHNldHRpbmcgdXAgaW50ZXJuYWwgcGF0aCBsaXN0cywKLSAqIHJlZ2lzdGVyaW5nIGJ1aWx0LWluIGVsZW1lbnRzLCBhbmQgbG9hZGluZyBzdGFuZGFyZCBwbHVnaW5zLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gJUZBTFNFIGlmIEdTdHJlYW1lciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQKLSAqIGZvciBzb21lIHJlYXNvbi4gIElmIHlvdSB3YW50IHlvdXIgcHJvZ3JhbSB0byBmYWlsIGZhdGFsbHksCi0gKiB1c2UgZ3N0X2luaXQoKSBpbnN0ZWFkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEdTdHJlYW1lciBjb3VsZCBiZSBpbml0aWFsaXplZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9pbml0X2NoZWNrIChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2W10sIEdFcnJvciAqKiBlcnIpCi17Ci0gIHN0YXRpYyBHTXV0ZXggaW5pdF9sb2NrOwotI2lmbmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORwotICBHT3B0aW9uR3JvdXAgKmdyb3VwOwotICBHT3B0aW9uQ29udGV4dCAqY3R4OwotI2VuZGlmCi0gIGdib29sZWFuIHJlczsKLQotICBnX211dGV4X2xvY2sgKCZpbml0X2xvY2spOwotCi0gIGlmIChnc3RfaW5pdGlhbGl6ZWQpIHsKLSAgICBHU1RfREVCVUcgKCJhbHJlYWR5IGluaXRpYWxpemVkIGdzdCIpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmaW5pdF9sb2NrKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotI2lmbmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORwotICBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIi0gR1N0cmVhbWVyIGluaXRpYWxpemF0aW9uIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfc2V0X2lnbm9yZV91bmtub3duX29wdGlvbnMgKGN0eCwgVFJVRSk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfc2V0X2hlbHBfZW5hYmxlZCAoY3R4LCBGQUxTRSk7Ci0gIGdyb3VwID0gZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3JvdXApOwotICByZXMgPSBnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsIGFyZ2MsIGFyZ3YsIGVycik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLSNlbHNlCi0gIGluaXRfcHJlIChOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgaW5pdF9wb3N0IChOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgcmVzID0gVFJVRTsKLSNlbmRpZgotCi0gIGdzdF9pbml0aWFsaXplZCA9IHJlczsKLQotICBnX211dGV4X3VubG9jayAoJmluaXRfbG9jayk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfaW5pdDoKLSAqIEBhcmdjOiAoaW5vdXQpIChhbGxvdy1ub25lKTogcG9pbnRlciB0byBhcHBsaWNhdGlvbidzIGFyZ2MKLSAqIEBhcmd2OiAoaW5vdXQpIChhcnJheSBsZW5ndGg9YXJnYykgKGFsbG93LW5vbmUpOiBwb2ludGVyIHRvIGFwcGxpY2F0aW9uJ3MgYXJndgotICoKLSAqIEluaXRpYWxpemVzIHRoZSBHU3RyZWFtZXIgbGlicmFyeSwgc2V0dGluZyB1cCBpbnRlcm5hbCBwYXRoIGxpc3RzLAotICogcmVnaXN0ZXJpbmcgYnVpbHQtaW4gZWxlbWVudHMsIGFuZCBsb2FkaW5nIHN0YW5kYXJkIHBsdWdpbnMuCi0gKgotICogVW5sZXNzIHRoZSBwbHVnaW4gcmVnaXN0cnkgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCB0aGUgcmVnaXN0cnkgd2lsbCBiZQotICogbG9hZGVkLiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBhbHNvIGNoZWNrIGlmIHRoZSByZWdpc3RyeSBjYWNoZSBuZWVkcyB0byBiZQotICogdXBkYXRlZCBhbmQgcmVzY2FuIGFsbCBwbHVnaW5zIGlmIG5lZWRlZC4gU2VlIGdzdF91cGRhdGVfcmVnaXN0cnkoKSBmb3IKLSAqIGRldGFpbHMgYW5kIHNlY3Rpb24KLSAqIDxsaW5rIGxpbmtlbmQ9ImdzdC1ydW5uaW5nIj5SdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnM8L2xpbms+Ci0gKiBmb3IgaG93IHRvIGRpc2FibGUgYXV0b21hdGljIHJlZ2lzdHJ5IHVwZGF0ZXMuCi0gKgotICogPG5vdGU+PHBhcmE+Ci0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGVybWluYXRlIHlvdXIgcHJvZ3JhbSBpZiBpdCB3YXMgdW5hYmxlIHRvIGluaXRpYWxpemUKLSAqIEdTdHJlYW1lciBmb3Igc29tZSByZWFzb24uICBJZiB5b3Ugd2FudCB5b3VyIHByb2dyYW0gdG8gZmFsbCBiYWNrLAotICogdXNlIGdzdF9pbml0X2NoZWNrKCkgaW5zdGVhZC4KLSAqIDwvcGFyYT48L25vdGU+Ci0gKgotICogV0FSTklORzogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyBjb3JyZXNwb25kaW5nCi0gKiBmdW5jdGlvbnMgaW4gb3RoZXIgZ2xpYi1zdHlsZSBsaWJyYXJpZXMsIHN1Y2ggYXMgZ3RrX2luaXRcKFwpLiBJbgotICogcGFydGljdWxhciwgdW5rbm93biBjb21tYW5kIGxpbmUgb3B0aW9ucyBjYXVzZSB0aGlzIGZ1bmN0aW9uIHRvCi0gKiBhYm9ydCBwcm9ncmFtIGV4ZWN1dGlvbi4KLSAqLwotdm9pZAotZ3N0X2luaXQgKGludCAqYXJnYywgY2hhciAqKmFyZ3ZbXSkKLXsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIGlmICghZ3N0X2luaXRfY2hlY2sgKGFyZ2MsIGFyZ3YsICZlcnIpKSB7Ci0gICAgZ19wcmludCAoIkNvdWxkIG5vdCBpbml0aWFsaXplIEdTdHJlYW1lcjogJXNcbiIsCi0gICAgICAgIGVyciA/IGVyci0+bWVzc2FnZSA6ICJ1bmtub3duIGVycm9yIG9jY3VycmVkIik7Ci0gICAgaWYgKGVycikgewotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgIH0KLSAgICBleGl0ICgxKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9pc19pbml0aWFsaXplZDoKLSAqCi0gKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBjaGVjayBpZiBHU3RyZWFtZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBnc3RfaW5pdCgpCi0gKiBvciBnc3RfaW5pdF9jaGVjaygpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGluaXRpYWxpemF0aW9uIGhhcyBiZWVuIGRvbmUsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLWdib29sZWFuCi1nc3RfaXNfaW5pdGlhbGl6ZWQgKHZvaWQpCi17Ci0gIHJldHVybiBnc3RfaW5pdGlhbGl6ZWQ7Ci19Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkKLXN0YXRpYyB2b2lkCi1hZGRfcGF0aF9mdW5jIChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdTVF9JTkZPICgiQWRkaW5nIHBsdWdpbiBwYXRoOiBcIiVzXCIsIHdpbGwgc2NhbiBsYXRlciIsIChnY2hhciAqKSBkYXRhKTsKLSAgX3ByaXZfZ3N0X3BsdWdpbl9wYXRocyA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChfcHJpdl9nc3RfcGx1Z2luX3BhdGhzLCBnX3N0cmR1cCAoZGF0YSkpOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKLXN0YXRpYyB2b2lkCi1wcmVwYXJlX2Zvcl9sb2FkX3BsdWdpbl9mdW5jIChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIF9wcml2X2dzdF9wcmVsb2FkX3BsdWdpbnMgPQotICAgICAgZ19zbGlzdF9wcmVwZW5kIChfcHJpdl9nc3RfcHJlbG9hZF9wbHVnaW5zLCBnX3N0cmR1cCAoZGF0YSkpOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKLXN0YXRpYyB2b2lkCi1zcGxpdF9hbmRfaXRlcmF0ZSAoY29uc3QgZ2NoYXIgKiBzdHJpbmdsaXN0LCBjb25zdCBnY2hhciAqIHNlcGFyYXRvciwKLSAgICBHRnVuYyBpdGVyYXRvciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnY2hhciAqKnN0cmluZ3M7Ci0gIGdpbnQgaiA9IDA7Ci0gIGdjaGFyICpsYXN0bGlzdCA9IGdfc3RyZHVwIChzdHJpbmdsaXN0KTsKLQotICB3aGlsZSAobGFzdGxpc3QpIHsKLSAgICBzdHJpbmdzID0gZ19zdHJzcGxpdCAobGFzdGxpc3QsIHNlcGFyYXRvciwgTUFYX1BBVEhfU1BMSVQpOwotICAgIGdfZnJlZSAobGFzdGxpc3QpOwotICAgIGxhc3RsaXN0ID0gTlVMTDsKLQotICAgIHdoaWxlIChzdHJpbmdzW2pdKSB7Ci0gICAgICBpdGVyYXRvciAoc3RyaW5nc1tqXSwgdXNlcl9kYXRhKTsKLSAgICAgIGlmICgrK2ogPT0gTUFYX1BBVEhfU1BMSVQpIHsKLSAgICAgICAgbGFzdGxpc3QgPSBnX3N0cmR1cCAoc3RyaW5nc1tqXSk7Ci0gICAgICAgIGogPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ19zdHJmcmVldiAoc3RyaW5ncyk7Ci0gIH0KLX0KLSNlbmRpZgotCi0vKiB3ZSBoYXZlIG5vIGZhaWwgY2FzZXMgeWV0LCBidXQgbWF5YmUgaW4gdGhlIGZ1dHVyZSAqLwotc3RhdGljIGdib29sZWFuCi1pbml0X3ByZSAoR09wdGlvbkNvbnRleHQgKiBjb250ZXh0LCBHT3B0aW9uR3JvdXAgKiBncm91cCwgZ3BvaW50ZXIgZGF0YSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIGdjaGFyICpsaWJkaXI7Ci0gIGlmIChnc3RfaW5pdGlhbGl6ZWQpIHsKLSAgICBHU1RfREVCVUcgKCJhbHJlYWR5IGluaXRpYWxpemVkIik7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBfcHJpdl9nc3Rfc3RhcnRfdGltZSA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIF9wcml2X2dzdF9kZWJ1Z19pbml0ICgpOwotICBwcml2X2dzdF9kdW1wX2RvdF9kaXIgPSBnX2dldGVudiAoIkdTVF9ERUJVR19EVU1QX0RPVF9ESVIiKTsKLSNlbmRpZgotCi0jaWZkZWYgRU5BQkxFX05MUwotICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBMT0NBTEVESVIpOwotICBiaW5kX3RleHRkb21haW5fY29kZXNldCAoR0VUVEVYVF9QQUNLQUdFLCAiVVRGLTgiKTsKLSNlbmRpZiAvKiBFTkFCTEVfTkxTICovCi0KLSAgLyogVGhpcyBpcyB0aGUgZWFybGllc3Qgd2UgY2FuIG1ha2Ugc3R1ZmYgc2hvdyB1cCBpbiB0aGUgbG9ncy4KLSAgICogU28gZ2l2ZSBzb21lIHVzZWZ1bCBpbmZvIGFib3V0IEdTdHJlYW1lciBoZXJlICovCi0jaWZkZWYgR19PU19XSU4zMgotICB7Ci0gICAgZ2NoYXIgKmJhc2VkaXIgPQotICAgICAgICBnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlvbl9kaXJlY3Rvcnlfb2ZfbW9kdWxlCi0gICAgICAgIChfcHJpdl9nc3RfZGxsX2hhbmRsZSk7Ci0KLSAgICBsaWJkaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChiYXNlZGlyLAotI2lmZGVmIF9ERUJVRwotICAgICAgICAiZGVidWciCi0jZW5kaWYKLSAgICAgICAgImxpYiIsIE5VTEwpOwotICAgIGdfZnJlZSAoYmFzZWRpcik7Ci0gIH0KLSNlbHNlCi0gIGxpYmRpciA9IGdfc3RyZHVwIChMSUJESVIpOwotI2VuZGlmCi0gIEdTVF9JTkZPICgiSW5pdGlhbGl6aW5nIEdTdHJlYW1lciBDb3JlIExpYnJhcnkgdmVyc2lvbiAlcyIsIFZFUlNJT04pOwotICBHU1RfSU5GTyAoIlVzaW5nIGxpYnJhcnkgaW5zdGFsbGVkIGluICVzIiwgbGliZGlyKTsKLSAgZ19mcmVlIChsaWJkaXIpOwotCi0gIC8qIFByaW50IHNvbWUgYmFzaWMgc3lzdGVtIGRldGFpbHMgaWYgcG9zc2libGUgKE9TL2FyY2hpdGVjdHVyZSkgKi8KLSNpZmRlZiBIQVZFX1NZU19VVFNOQU1FX0gKLSAgewotICAgIHN0cnVjdCB1dHNuYW1lIHN5c19kZXRhaWxzOwotCi0gICAgaWYgKHVuYW1lICgmc3lzX2RldGFpbHMpID09IDApIHsKLSAgICAgIEdTVF9JTkZPICgiJXMgJXMgJXMgJXMgJXMiLCBzeXNfZGV0YWlscy5zeXNuYW1lLAotICAgICAgICAgIHN5c19kZXRhaWxzLm5vZGVuYW1lLCBzeXNfZGV0YWlscy5yZWxlYXNlLCBzeXNfZGV0YWlscy52ZXJzaW9uLAotICAgICAgICAgIHN5c19kZXRhaWxzLm1hY2hpbmUpOwotICAgIH0KLSAgfQotI2VuZGlmCi0KLSNpZm5kZWYgR19BVE9NSUNfTE9DS19GUkVFCi0gIEdTVF9DQVRfV0FSTklORyAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgIkdMaWIgYXRvbWljIG9wZXJhdGlvbnMgYXJlIE5PVCAiCi0gICAgICAiaW1wbGVtZW50ZWQgdXNpbmcgcmVhbCBoYXJkd2FyZSBhdG9taWMgb3BlcmF0aW9ucyEiKTsKLSNlbmRpZgotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3Rlcl9jb3JlX2VsZW1lbnRzIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIC8qIHJlZ2lzdGVyIHNvbWUgc3RhbmRhcmQgYnVpbHRpbiB0eXBlcyAqLwotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJiaW4iLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX0JJTikgfHwKLSAgICAgICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicGlwZWxpbmUiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX1BJUEVMSU5FKQotICAgICAgKQotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKgotICogdGhpcyBiaXQgaGFuZGxlczoKLSAqIC0gaW5pdGFsaXphdGlvbiBvZiB0aHJlYWRzIGlmIHdlIHVzZSB0aGVtCi0gKiAtIGxvZyBoYW5kbGVyCi0gKiAtIGluaXRpYWwgb3V0cHV0Ci0gKiAtIGluaXRpYWxpemVzIGdzdF9mb3JtYXQKLSAqIC0gcmVnaXN0ZXJzIGEgYnVuY2ggb2YgdHlwZXMgZm9yIGdzdF9vYmplY3RzCi0gKgotICogLSB3ZSBkb24ndCBoYXZlIGNhc2VzIHlldCB3aGVyZSB0aGlzIGZhaWxzLCBidXQgaW4gdGhlIGZ1dHVyZQotICogICB3ZSBtaWdodCBhbmQgdGhlbiBpdCdzIG5pY2UgdG8gYmUgYWJsZSB0byByZXR1cm4gdGhhdAotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWluaXRfcG9zdCAoR09wdGlvbkNvbnRleHQgKiBjb250ZXh0LCBHT3B0aW9uR3JvdXAgKiBncm91cCwgZ3BvaW50ZXIgZGF0YSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdMb2dMZXZlbEZsYWdzIGxsZjsKLQotICBpZiAoZ3N0X2luaXRpYWxpemVkKSB7Ci0gICAgR1NUX0RFQlVHICgiYWxyZWFkeSBpbml0aWFsaXplZCIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgbGxmID0gR19MT0dfTEVWRUxfQ1JJVElDQUwgfCBHX0xPR19MRVZFTF9FUlJPUiB8IEdfTE9HX0ZMQUdfRkFUQUw7Ci0gIGdfbG9nX3NldF9oYW5kbGVyIChnX2xvZ19kb21haW5fZ3N0cmVhbWVyLCBsbGYsIGRlYnVnX2xvZ19oYW5kbGVyLCBOVUxMKTsKLQotICBfcHJpdl9nc3RfbWluaV9vYmplY3RfaW5pdGlhbGl6ZSAoKTsKLSAgX3ByaXZfZ3N0X3F1YXJrc19pbml0aWFsaXplICgpOwotICBfcHJpdl9nc3RfYWxsb2NhdG9yX2luaXRpYWxpemUgKCk7Ci0gIF9wcml2X2dzdF9tZW1vcnlfaW5pdGlhbGl6ZSAoKTsKLSAgX3ByaXZfZ3N0X2Zvcm1hdF9pbml0aWFsaXplICgpOwotICBfcHJpdl9nc3RfcXVlcnlfaW5pdGlhbGl6ZSAoKTsKLSAgX3ByaXZfZ3N0X3N0cnVjdHVyZV9pbml0aWFsaXplICgpOwotICBfcHJpdl9nc3RfY2Fwc19pbml0aWFsaXplICgpOwotICBfcHJpdl9nc3RfY2Fwc19mZWF0dXJlc19pbml0aWFsaXplICgpOwotICBfcHJpdl9nc3RfbWV0YV9pbml0aWFsaXplICgpOwotICBfcHJpdl9nc3RfbWVzc2FnZV9pbml0aWFsaXplICgpOwotCi0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9vYmplY3RfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9lbGVtZW50X2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3RyYWNlcl9mYWN0b3J5X2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Jpbl9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9idXNfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfdGFza19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9jbG9ja19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9kZWJ1Z19jb2xvcl9tb2RlX2dldF90eXBlICgpKTsKLQotICBnc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUgKCk7Ci0KLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X29iamVjdF9mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9iaW5fZmxhZ3NfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2J1ZmZlcl9jb3B5X2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2J1c19mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9idXNfc3luY19yZXBseV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9jYXBzX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Nsb2NrX3JldHVybl9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9jbG9ja19lbnRyeV90eXBlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Nsb2NrX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2Nsb2NrX3R5cGVfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfZGVidWdfZ3JhcGhfZGV0YWlsc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zdGF0ZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3N0YXRlX2NoYW5nZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3RyYWNlcl92YWx1ZV9zY29wZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF90cmFjZXJfdmFsdWVfZmxhZ3NfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfY29yZV9lcnJvcl9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9saWJyYXJ5X2Vycm9yX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3Jlc291cmNlX2Vycm9yX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3N0cmVhbV9lcnJvcl9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9ldmVudF90eXBlX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2V2ZW50X3R5cGVfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3Rfc2Vla190eXBlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3NlZWtfZmxhZ3NfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcW9zX3R5cGVfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfZm9ybWF0X2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2RlYnVnX2xldmVsX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2RlYnVnX2NvbG9yX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2l0ZXJhdG9yX3Jlc3VsdF9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9pdGVyYXRvcl9pdGVtX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X21lc3NhZ2VfdHlwZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYWRfbGlua19yZXR1cm5fZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX2xpbmtfY2hlY2tfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfZmxvd19yZXR1cm5fZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX21vZGVfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX2RpcmVjdGlvbl9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYWRfZmxhZ3NfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFkX3ByZXNlbmNlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3BhZF90ZW1wbGF0ZV9mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9waXBlbGluZV9mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wbHVnaW5fZXJyb3JfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGx1Z2luX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3BsdWdpbl9kZXBlbmRlbmN5X2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3JhbmtfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcXVlcnlfdHlwZV9mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9xdWVyeV90eXBlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2J1ZmZlcmluZ19tb2RlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3N0cmVhbV9zdGF0dXNfdHlwZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zdHJ1Y3R1cmVfY2hhbmdlX3R5cGVfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfdGFnX21lcmdlX21vZGVfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfdGFnX2ZsYWdfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfdGFnX3Njb3BlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3Rhc2tfcG9vbF9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF90YXNrX3N0YXRlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3RvY19lbnRyeV90eXBlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3R5cGVfZmluZF9wcm9iYWJpbGl0eV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF91cmlfZXJyb3JfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfdXJpX3R5cGVfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFyc2VfZXJyb3JfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcGFyc2VfZmxhZ3NfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3Rfc2VhcmNoX21vZGVfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfcHJvZ3Jlc3NfdHlwZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9tYXBfZmxhZ3NfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfY2Fwc19pbnRlcnNlY3RfbW9kZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYWRfcHJvYmVfdHlwZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYWRfcHJvYmVfcmV0dXJuX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3NlZ21lbnRfZmxhZ3NfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3Rfc2NoZWR1bGluZ19mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9tZXRhX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3RvY19lbnRyeV90eXBlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X3RvY19zY29wZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF90b2NfbG9vcF90eXBlX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9sb2NrX2ZsYWdzX2dldF90eXBlICgpKTsKLSAgZ190eXBlX2NsYXNzX3JlZiAoZ3N0X2FsbG9jYXRvcl9mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zdHJlYW1fZmxhZ3NfZ2V0X3R5cGUgKCkpOwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3Rfc3RyZWFtX3R5cGVfZ2V0X3R5cGUgKCkpOwotCi0gIF9wcml2X2dzdF9ldmVudF9pbml0aWFsaXplICgpOwotICBfcHJpdl9nc3RfYnVmZmVyX2luaXRpYWxpemUgKCk7Ci0gIF9wcml2X2dzdF9idWZmZXJfbGlzdF9pbml0aWFsaXplICgpOwotICBfcHJpdl9nc3Rfc2FtcGxlX2luaXRpYWxpemUgKCk7Ci0gIF9wcml2X2dzdF9jb250ZXh0X2luaXRpYWxpemUgKCk7Ci0gIF9wcml2X2dzdF9kYXRlX3RpbWVfaW5pdGlhbGl6ZSAoKTsKLSAgX3ByaXZfZ3N0X3ZhbHVlX2luaXRpYWxpemUgKCk7Ci0gIF9wcml2X2dzdF90YWdfaW5pdGlhbGl6ZSAoKTsKLSAgX3ByaXZfZ3N0X3RvY19pbml0aWFsaXplICgpOwotCi0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uX2dldF90eXBlICgpKTsKLSAgZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X3R5cGUgKCk7Ci0KLSAgX3ByaXZfZ3N0X3BsdWdpbl9pbml0aWFsaXplICgpOwotCi0gIC8qIHJlZ2lzdGVyIGNvcmUgcGx1Z2lucyAqLwotICBnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLAotICAgICAgInN0YXRpY2VsZW1lbnRzIiwgImNvcmUgZWxlbWVudHMgbGlua2VkIGludG8gdGhlIEdTdHJlYW1lciBsaWJyYXJ5IiwKLSAgICAgIGdzdF9yZWdpc3Rlcl9jb3JlX2VsZW1lbnRzLCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgUEFDS0FHRSwKLSAgICAgIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7Ci0KLSAgLyoKLSAgICogQW55IGVycm9ycyBoYXBwZW5pbmcgYmVsb3cgdGhpcyBwb2ludCBhcmUgbm9uLWZhdGFsLCB3ZSB0aGVyZWZvcmUgbWFyawotICAgKiBnc3RyZWFtZXIgYXMgYmVpbmcgaW5pdGlhbGl6ZWQsIHNpbmNlIGl0IGlzIHRoZSBjYXNlIGZyb20gYSBwbHVnaW4gcG9pbnQgb2YKLSAgICogdmlldy4KLSAgICoKLSAgICogSWYgYW55dGhpbmcgZmFpbHMsIGl0IHdpbGwgYmUgcHV0IGJhY2sgdG8gJUZBTFNFIGluIGdzdF9pbml0X2NoZWNrKCkuCi0gICAqIFRoaXMgYWxsb3dzIHNvbWUgc3BlY2lhbCBwbHVnaW5zIHRoYXQgd291bGQgY2FsbCBnc3RfaW5pdCgpIHRvIG5vdCBjYXVzZSBhCi0gICAqIGxvb3BpbmcgZWZmZWN0IChpLmUuIGluaXRpYWxpemluZyBHU3RyZWFtZXIgdHdpY2UpLgotICAgKi8KLSAgZ3N0X2luaXRpYWxpemVkID0gVFJVRTsKLQotICBpZiAoIWdzdF91cGRhdGVfcmVnaXN0cnkgKCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9JTkZPICgiR0xpYiBydW50aW1lIHZlcnNpb246ICVkLiVkLiVkIiwgZ2xpYl9tYWpvcl92ZXJzaW9uLAotICAgICAgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOwotICBHU1RfSU5GTyAoIkdMaWIgaGVhZGVycyB2ZXJzaW9uOiAlZC4lZC4lZCIsIEdMSUJfTUFKT1JfVkVSU0lPTiwKLSAgICAgIEdMSUJfTUlOT1JfVkVSU0lPTiwgR0xJQl9NSUNST19WRVJTSU9OKTsKLSAgR1NUX0lORk8gKCJpbml0aWFsaXplZCBHU3RyZWFtZXIgc3VjY2Vzc2Z1bGx5Iik7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIF9wcml2X2dzdF90cmFjaW5nX2luaXQgKCk7Ci0jZW5kaWYKLQotICByZXR1cm4gVFJVRTsKLX0KLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLXN0YXRpYyBnYm9vbGVhbgotc2VsZWN0X2FsbCAoR3N0UGx1Z2luICogcGx1Z2luLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2ludAotc29ydF9ieV9jYXRlZ29yeV9uYW1lIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLSAgcmV0dXJuIHN0cmNtcCAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lICgoR3N0RGVidWdDYXRlZ29yeSAqKSBhKSwKLSAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoKEdzdERlYnVnQ2F0ZWdvcnkgKikgYikpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlYnVnX2hlbHAgKHZvaWQpCi17Ci0gIEdTTGlzdCAqbGlzdCwgKndhbGs7Ci0gIEdMaXN0ICpsaXN0MiwgKmc7Ci0KLSAgLyogTmVlZCB0byBlbnN1cmUgdGhlIHJlZ2lzdHJ5IGlzIGxvYWRlZCB0byBnZXQgZGVidWcgY2F0ZWdvcmllcyAqLwotICBpZiAoIWluaXRfcG9zdCAoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpCi0gICAgZXhpdCAoMSk7Ci0KLSAgbGlzdDIgPSBnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlciAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgIHNlbGVjdF9hbGwsIEZBTFNFLCBOVUxMKTsKLQotICAvKiBGSVhNRSB0aGlzIGlzIGdyb3NzLiAgd2h5IGRvbid0IGRlYnVnIGhhdmUgY2F0ZWdvcmllcyBQbHVnaW5GZWF0dXJlcz8gKi8KLSAgZm9yIChnID0gbGlzdDI7IGc7IGcgPSBnX2xpc3RfbmV4dCAoZykpIHsKLSAgICBHc3RQbHVnaW4gKnBsdWdpbiA9IEdTVF9QTFVHSU5fQ0FTVCAoZy0+ZGF0YSk7Ci0gICAgR0xpc3QgKmZlYXR1cmVzLCAqb3JpZ19mZWF0dXJlczsKLQotICAgIGlmIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwbHVnaW4sIEdTVF9QTFVHSU5fRkxBR19CTEFDS0xJU1RFRCkpCi0gICAgICBjb250aW51ZTsKLQotICAgIGdzdF9wbHVnaW5fbG9hZCAocGx1Z2luKTsKLSAgICAvKiBOb3cgY3JlYXRlIG9uZSBvZiBlYWNoIGZlYXR1cmUgc28gdGhlIGNsYXNzX2luaXQgZnVuY3Rpb25zCi0gICAgICogYXJlIGNhbGxlZCwgYXMgdGhhdCdzIHdoZXJlIG1vc3QgZGVidWcgY2F0ZWdvcmllcyBhcmUKLSAgICAgKiByZWdpc3RlcmVkLiBGSVhNRTogSWYgZGVidWcgY2F0ZWdvcmllcyB3ZXJlIGEgcGx1Z2luIGZlYXR1cmUsCi0gICAgICogdGhpcyB3b3VsZCBiZSB1bm5lZWRlZCAqLwotICAgIG9yaWdfZmVhdHVyZXMgPSBmZWF0dXJlcyA9Ci0gICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgICAgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0gICAgd2hpbGUgKGZlYXR1cmVzKSB7Ci0gICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoZmVhdHVyZXMtPmRhdGEgPT0gTlVMTCkpCi0gICAgICAgIGdvdG8gbmV4dDsKLQotICAgICAgZmVhdHVyZSA9IEdTVF9QTFVHSU5fRkVBVFVSRSAoZmVhdHVyZXMtPmRhdGEpOwotICAgICAgaWYgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7Ci0gICAgICAgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OwotICAgICAgICBHc3RFbGVtZW50ICplOwotCi0gICAgICAgIGZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKTsKLSAgICAgICAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCBOVUxMKTsKLSAgICAgICAgaWYgKGUpCi0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZSk7Ci0gICAgICB9Ci0KLSAgICBuZXh0OgotICAgICAgZmVhdHVyZXMgPSBnX2xpc3RfbmV4dCAoZmVhdHVyZXMpOwotICAgIH0KLQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKG9yaWdfZmVhdHVyZXMpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChsaXN0Mik7Ci0KLSAgbGlzdCA9IGdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXMgKCk7Ci0gIHdhbGsgPSBsaXN0ID0gZ19zbGlzdF9zb3J0IChsaXN0LCBzb3J0X2J5X2NhdGVnb3J5X25hbWUpOwotCi0gIGdfcHJpbnQgKCJcbiIpOwotICBnX3ByaW50ICgibmFtZSAgICAgICAgICAgICAgICAgIGxldmVsICAgIGRlc2NyaXB0aW9uXG4iKTsKLSAgZ19wcmludCAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0KLSAgd2hpbGUgKHdhbGspIHsKLSAgICBnYm9vbGVhbiBvbl91bml4OwotICAgIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IChHc3REZWJ1Z0NhdGVnb3J5ICopIHdhbGstPmRhdGE7Ci0gICAgR3N0RGVidWdDb2xvck1vZGUgY29sb3JpbmcgPSBnc3RfZGVidWdfZ2V0X2NvbG9yX21vZGUgKCk7Ci0jaWZkZWYgR19PU19VTklYCi0gICAgb25fdW5peCA9IFRSVUU7Ci0jZWxzZQotICAgIG9uX3VuaXggPSBGQUxTRTsKLSNlbmRpZgotCi0gICAgaWYgKEdTVF9ERUJVR19DT0xPUl9NT0RFX1VOSVggPT0gY29sb3JpbmcKLSAgICAgICAgfHwgKG9uX3VuaXggJiYgR1NUX0RFQlVHX0NPTE9SX01PREVfT04gPT0gY29sb3JpbmcpKSB7Ci0gICAgICBnY2hhciAqY29sb3IgPSBnc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3IgKGNhdC0+Y29sb3IpOwotCi0gICAgICBnX3ByaW50ICgiJXMlLTIwc1wwMzNbMDBtICAlMWQgJXMgICVzJXNcMDMzWzAwbVxuIiwKLSAgICAgICAgICBjb2xvciwKLSAgICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUgKGNhdCksCi0gICAgICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKGNhdCksCi0gICAgICAgICAgZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoY2F0KSksCi0gICAgICAgICAgY29sb3IsIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb24gKGNhdCkpOwotICAgICAgZ19mcmVlIChjb2xvcik7Ci0gICAgfSBlbHNlIGlmIChHU1RfREVCVUdfQ09MT1JfTU9ERV9PTiA9PSBjb2xvcmluZyAmJiAhb25fdW5peCkgewotI2lmZGVmIEdfT1NfV0lOMzIKLSAgICAgIGdpbnQgY29sb3IgPSBnc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvciAoY2F0LT5jb2xvcik7Ci0gICAgICBjb25zdCBnaW50IGNsZWFyID0gRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFOwotCi0gICAgICBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSAoR2V0U3RkSGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSksIGNvbG9yKTsKLSAgICAgIGdfcHJpbnQgKCIlLTIwcyIsIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoY2F0KSk7Ci0gICAgICBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSAoR2V0U3RkSGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSksIGNsZWFyKTsKLSAgICAgIGdfcHJpbnQgKCIgJTFkICVzICIsIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkIChjYXQpLAotICAgICAgICAgIGdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZSAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKGNhdCkpKTsKLSAgICAgIFNldENvbnNvbGVUZXh0QXR0cmlidXRlIChHZXRTdGRIYW5kbGUgKFNURF9PVVRQVVRfSEFORExFKSwgY29sb3IpOwotICAgICAgZ19wcmludCAoIiVzIiwgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAoY2F0KSk7Ci0gICAgICBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSAoR2V0U3RkSGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSksIGNsZWFyKTsKLSAgICAgIGdfcHJpbnQgKCJcbiIpOwotI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KLSAgICB9IGVsc2UgewotICAgICAgZ19wcmludCAoIiUtMjBzICAlMWQgJXMgICVzXG4iLCBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUgKGNhdCksCi0gICAgICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKGNhdCksCi0gICAgICAgICAgZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoY2F0KSksCi0gICAgICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAoY2F0KSk7Ci0gICAgfQotICAgIHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspOwotICB9Ci0gIGdfc2xpc3RfZnJlZSAobGlzdCk7Ci0gIGdfcHJpbnQgKCJcbiIpOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKLXN0YXRpYyBnYm9vbGVhbgotcGFyc2Vfb25lX29wdGlvbiAoZ2ludCBvcHQsIGNvbnN0IGdjaGFyICogYXJnLCBHRXJyb3IgKiogZXJyKQotewotICBzd2l0Y2ggKG9wdCkgewotICAgIGNhc2UgQVJHX1ZFUlNJT046Ci0gICAgICBnX3ByaW50ICgiR1N0cmVhbWVyIENvcmUgTGlicmFyeSB2ZXJzaW9uICVzXG4iLCBQQUNLQUdFX1ZFUlNJT04pOwotICAgICAgZXhpdCAoMCk7Ci0gICAgY2FzZSBBUkdfRkFUQUxfV0FSTklOR1M6ewotICAgICAgR0xvZ0xldmVsRmxhZ3MgZmF0YWxfbWFzazsKLQotICAgICAgZmF0YWxfbWFzayA9IGdfbG9nX3NldF9hbHdheXNfZmF0YWwgKEdfTE9HX0ZBVEFMX01BU0spOwotICAgICAgZmF0YWxfbWFzayB8PSBHX0xPR19MRVZFTF9XQVJOSU5HIHwgR19MT0dfTEVWRUxfQ1JJVElDQUw7Ci0gICAgICBnX2xvZ19zZXRfYWx3YXlzX2ZhdGFsIChmYXRhbF9tYXNrKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gICAgY2FzZSBBUkdfREVCVUdfTEVWRUw6ewotICAgICAgR3N0RGVidWdMZXZlbCB0bXAgPSBHU1RfTEVWRUxfTk9ORTsKLQotICAgICAgdG1wID0gKEdzdERlYnVnTGV2ZWwpIHN0cnRvbCAoYXJnLCBOVUxMLCAwKTsKLSAgICAgIGlmICgoKGd1aW50KSB0bXApIDwgR1NUX0xFVkVMX0NPVU5UKSB7Ci0gICAgICAgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKHRtcCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBBUkdfREVCVUc6Ci0gICAgICBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZyAoYXJnLCBGQUxTRSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19ERUJVR19OT19DT0xPUjoKLSAgICAgIGdzdF9kZWJ1Z19zZXRfY29sb3JlZCAoRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfREVCVUdfQ09MT1JfTU9ERToKLSAgICAgIGdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZyAoYXJnKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX0RFQlVHX0RJU0FCTEU6Ci0gICAgICBnc3RfZGVidWdfc2V0X2FjdGl2ZSAoRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfREVCVUdfSEVMUDoKLSAgICAgIGdzdF9kZWJ1Z19oZWxwICgpOwotICAgICAgZXhpdCAoMCk7Ci0jZW5kaWYKLSAgICBjYXNlIEFSR19QTFVHSU5fU1BFVzoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX1BMVUdJTl9QQVRIOgotI2lmbmRlZiBHU1RfRElTQUJMRV9SRUdJU1RSWQotICAgICAgc3BsaXRfYW5kX2l0ZXJhdGUgKGFyZywgR19TRUFSQ0hQQVRIX1NFUEFSQVRPUl9TLCBhZGRfcGF0aF9mdW5jLCBOVUxMKTsKLSNlbmRpZiAvKiBHU1RfRElTQUJMRV9SRUdJU1RSWSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfUExVR0lOX0xPQUQ6Ci0gICAgICBzcGxpdF9hbmRfaXRlcmF0ZSAoYXJnLCAiLCIsIHByZXBhcmVfZm9yX2xvYWRfcGx1Z2luX2Z1bmMsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfU0VHVFJBUF9ESVNBQkxFOgotICAgICAgX2dzdF9kaXNhYmxlX3NlZ3RyYXAgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfUkVHSVNUUllfVVBEQVRFX0RJU0FCTEU6Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCi0gICAgICBfcHJpdl9nc3RfZGlzYWJsZV9yZWdpc3RyeV91cGRhdGUgPSBUUlVFOwotI2VuZGlmCi0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19SRUdJU1RSWV9GT1JLX0RJU0FCTEU6Ci0gICAgICBnc3RfcmVnaXN0cnlfZm9ya19zZXRfZW5hYmxlZCAoRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdfT1BUSU9OX0VSUk9SLCBHX09QVElPTl9FUlJPUl9VTktOT1dOX09QVElPTiwKLSAgICAgICAgICBfKCJVbmtub3duIG9wdGlvbiIpKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBhcnNlX2dvcHRpb25fYXJnIChjb25zdCBnY2hhciAqIG9wdCwKLSAgICBjb25zdCBnY2hhciAqIGFyZywgZ3BvaW50ZXIgZGF0YSwgR0Vycm9yICoqIGVycikKLXsKLSAgc3RhdGljIGNvbnN0IHN0cnVjdAotICB7Ci0gICAgY29uc3QgZ2NoYXIgKm9wdDsKLSAgICBpbnQgdmFsOwotICB9IG9wdGlvbnNbXSA9IHsKLSAgICB7Ci0gICAgIi0tZ3N0LXZlcnNpb24iLCBBUkdfVkVSU0lPTn0sIHsKLSAgICAiLS1nc3QtZmF0YWwtd2FybmluZ3MiLCBBUkdfRkFUQUxfV0FSTklOR1N9LAotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICB7Ci0gICAgIi0tZ3N0LWRlYnVnLWxldmVsIiwgQVJHX0RFQlVHX0xFVkVMfSwgewotICAgICItLWdzdC1kZWJ1ZyIsIEFSR19ERUJVR30sIHsKLSAgICAiLS1nc3QtZGVidWctZGlzYWJsZSIsIEFSR19ERUJVR19ESVNBQkxFfSwgewotICAgICItLWdzdC1kZWJ1Zy1uby1jb2xvciIsIEFSR19ERUJVR19OT19DT0xPUn0sIHsKLSAgICAiLS1nc3QtZGVidWctY29sb3ItbW9kZSIsIEFSR19ERUJVR19DT0xPUl9NT0RFfSwgewotICAgICItLWdzdC1kZWJ1Zy1oZWxwIiwgQVJHX0RFQlVHX0hFTFB9LAotI2VuZGlmCi0gICAgewotICAgICItLWdzdC1wbHVnaW4tc3BldyIsIEFSR19QTFVHSU5fU1BFV30sIHsKLSAgICAiLS1nc3QtcGx1Z2luLXBhdGgiLCBBUkdfUExVR0lOX1BBVEh9LCB7Ci0gICAgIi0tZ3N0LXBsdWdpbi1sb2FkIiwgQVJHX1BMVUdJTl9MT0FEfSwgewotICAgICItLWdzdC1kaXNhYmxlLXNlZ3RyYXAiLCBBUkdfU0VHVFJBUF9ESVNBQkxFfSwgewotICAgICItLWdzdC1kaXNhYmxlLXJlZ2lzdHJ5LXVwZGF0ZSIsIEFSR19SRUdJU1RSWV9VUERBVEVfRElTQUJMRX0sIHsKLSAgICAiLS1nc3QtZGlzYWJsZS1yZWdpc3RyeS1mb3JrIiwgQVJHX1JFR0lTVFJZX0ZPUktfRElTQUJMRX0sIHsKLSAgICBOVUxMfQotICB9OwotICBnaW50IHZhbCA9IDAsIG47Ci0KLSAgZm9yIChuID0gMDsgb3B0aW9uc1tuXS5vcHQ7IG4rKykgewotICAgIGlmICghc3RyY21wIChvcHQsIG9wdGlvbnNbbl0ub3B0KSkgewotICAgICAgdmFsID0gb3B0aW9uc1tuXS52YWw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcGFyc2Vfb25lX29wdGlvbiAodmFsLCBhcmcsIGVycik7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBnc3RfZGVpbml0OgotICoKLSAqIENsZWFuIHVwIGFueSByZXNvdXJjZXMgY3JlYXRlZCBieSBHU3RyZWFtZXIgaW4gZ3N0X2luaXQoKS4KLSAqCi0gKiBJdCBpcyBub3JtYWxseSBub3QgbmVlZGVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBhIG5vcm1hbCBhcHBsaWNhdGlvbgotICogYXMgdGhlIHJlc291cmNlcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZnJlZWQgd2hlbiB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVzLgotICogVGhpcyBmdW5jdGlvbiBpcyB0aGVyZWZvcmUgbW9zdGx5IHVzZWQgYnkgdGVzdHN1aXRlcyBhbmQgb3RoZXIgbWVtb3J5Ci0gKiBwcm9maWxpbmcgdG9vbHMuCi0gKgotICogQWZ0ZXIgdGhpcyBjYWxsIEdTdHJlYW1lciAoaW5jbHVkaW5nIHRoaXMgbWV0aG9kKSBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gCi0gKi8KLXZvaWQKLWdzdF9kZWluaXQgKHZvaWQpCi17Ci0gIEdzdEJpbkNsYXNzICpiaW5fY2xhc3M7Ci0gIEdzdENsb2NrICpjbG9jazsKLQotICBHU1RfSU5GTyAoImRlaW5pdGlhbGl6aW5nIEdTdHJlYW1lciIpOwotCi0gIGlmIChnc3RfZGVpbml0aWFsaXplZCkgewotICAgIEdTVF9ERUJVRyAoImFscmVhZHkgZGVpbml0aWFsaXplZCIpOwotICAgIHJldHVybjsKLSAgfQotICBnX3RocmVhZF9wb29sX3NldF9tYXhfdW51c2VkX3RocmVhZHMgKDApOwotICBiaW5fY2xhc3MgPSBHU1RfQklOX0NMQVNTIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2Jpbl9nZXRfdHlwZSAoKSkpOwotICBpZiAoYmluX2NsYXNzLT5wb29sICE9IE5VTEwpIHsKLSAgICBnX3RocmVhZF9wb29sX2ZyZWUgKGJpbl9jbGFzcy0+cG9vbCwgRkFMU0UsIFRSVUUpOwotICAgIGJpbl9jbGFzcy0+cG9vbCA9IE5VTEw7Ci0gIH0KLSAgZ3N0X3Rhc2tfY2xlYW51cF9hbGwgKCk7Ci0KLSAgZ19zbGlzdF9mb3JlYWNoIChfcHJpdl9nc3RfcHJlbG9hZF9wbHVnaW5zLCAoR0Z1bmMpIGdfZnJlZSwgTlVMTCk7Ci0gIGdfc2xpc3RfZnJlZSAoX3ByaXZfZ3N0X3ByZWxvYWRfcGx1Z2lucyk7Ci0gIF9wcml2X2dzdF9wcmVsb2FkX3BsdWdpbnMgPSBOVUxMOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCi0gIGdfbGlzdF9mb3JlYWNoIChfcHJpdl9nc3RfcGx1Z2luX3BhdGhzLCAoR0Z1bmMpIGdfZnJlZSwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChfcHJpdl9nc3RfcGx1Z2luX3BhdGhzKTsKLSAgX3ByaXZfZ3N0X3BsdWdpbl9wYXRocyA9IE5VTEw7Ci0jZW5kaWYKLQotICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICBfcHJpdl9nc3RfcmVnaXN0cnlfY2xlYW51cCAoKTsKLSAgX3ByaXZfZ3N0X2FsbG9jYXRvcl9jbGVhbnVwICgpOwotCi0gIC8qIFdlIHdhbnQgdG8gZGVzdHJveSB0cmFjZXJzIGFzIGxhdGUgYXMgcG9zc2libGUgZm9yIHRoZSBsZWFrcyB0cmFjZXIKLSAgICogYnV0IHN0aWxsIG5lZWQgdG8ga2VlcCB0aGUgY2FwcyBzeXN0ZW0gYWxpdmUgYXMgaXQgbWF5IGhhdmUgdG8gdXNlCi0gICAqIGdzdF9jYXBzX3RvX3N0cmluZygpIHRvIGRpc3BsYXkgbGVha2VkIGNhcHMuICovCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBfcHJpdl9nc3RfdHJhY2luZ19kZWluaXQgKCk7Ci0jZW5kaWYKLQotICBfcHJpdl9nc3RfY2Fwc19mZWF0dXJlc19jbGVhbnVwICgpOwotICBfcHJpdl9nc3RfY2Fwc19jbGVhbnVwICgpOwotCi0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9vYmplY3RfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhZF9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZWxlbWVudF9mYWN0b3J5X2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9lbGVtZW50X2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF90cmFjZXJfZmFjdG9yeV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2Jpbl9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfYnVzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF90YXNrX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2Jpbl9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9idWZmZXJfY29weV9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfYnVzX2ZsYWdzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9idXNfc3luY19yZXBseV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfY2Fwc19mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfY2xvY2tfdHlwZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfY2xvY2tfcmV0dXJuX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9jbG9ja19lbnRyeV90eXBlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9jbG9ja19mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZGVidWdfZ3JhcGhfZGV0YWlsc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc3RhdGVfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3N0YXRlX2NoYW5nZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZWxlbWVudF9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfdHJhY2VyX3ZhbHVlX3Njb3BlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF90cmFjZXJfdmFsdWVfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2NvcmVfZXJyb3JfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2xpYnJhcnlfZXJyb3JfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BsdWdpbl9kZXBlbmRlbmN5X2ZsYWdzX2dldF90eXBlCi0gICAgICAgICAgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhcnNlX2ZsYWdzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9yZXNvdXJjZV9lcnJvcl9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc2VhcmNoX21vZGVfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3N0cmVhbV9lcnJvcl9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc3RyZWFtX3N0YXR1c190eXBlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9zdHJ1Y3R1cmVfY2hhbmdlX3R5cGVfZ2V0X3R5cGUKLSAgICAgICAgICAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZXZlbnRfdHlwZV9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZXZlbnRfdHlwZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc2Vla190eXBlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9zZWVrX2ZsYWdzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9xb3NfdHlwZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZm9ybWF0X2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9kZWJ1Z19sZXZlbF9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZGVidWdfY29sb3JfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2l0ZXJhdG9yX3Jlc3VsdF9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfaXRlcmF0b3JfaXRlbV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfbWVzc2FnZV90eXBlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9tZXRhX2ZsYWdzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcGFkX2xpbmtfcmV0dXJuX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wYWRfbGlua19jaGVja19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfZmxvd19yZXR1cm5fZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhZF9tb2RlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wYWRfZGlyZWN0aW9uX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wYWRfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhZF9wcmVzZW5jZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcGFkX3RlbXBsYXRlX2ZsYWdzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9waXBlbGluZV9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcGx1Z2luX2Vycm9yX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wbHVnaW5fZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3JhbmtfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3F1ZXJ5X3R5cGVfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3F1ZXJ5X3R5cGVfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2J1ZmZlcmluZ19tb2RlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF90YWdfbWVyZ2VfbW9kZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfdGFnX2ZsYWdfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3RhZ19zY29wZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfdGFza19zdGF0ZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3RvY19zY29wZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfdHlwZV9maW5kX3Byb2JhYmlsaXR5X2dldF90eXBlCi0gICAgICAgICAgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3VyaV90eXBlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF91cmlfZXJyb3JfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3BhcnNlX2Vycm9yX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wcm9ncmVzc190eXBlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2ZsYWdzX2dldF90eXBlCi0gICAgICAgICAgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfbWFwX2ZsYWdzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9jYXBzX2ludGVyc2VjdF9tb2RlX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9wYWRfcHJvYmVfdHlwZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfcGFkX3Byb2JlX3JldHVybl9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc2VnbWVudF9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc2NoZWR1bGluZ19mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc3RyZWFtX3R5cGVfZ2V0X3R5cGUgKCkpKTsKLQotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfY29udHJvbF9iaW5kaW5nX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X3RvY19sb29wX3R5cGVfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2xvY2tfZmxhZ3NfZ2V0X3R5cGUgKCkpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChnX3R5cGVfY2xhc3NfcGVlayAoZ3N0X2FsbG9jYXRvcl9mbGFnc19nZXRfdHlwZSAoKSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfdHlwZV9jbGFzc19wZWVrIChnc3Rfc3RyZWFtX2ZsYWdzX2dldF90eXBlICgpKSk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZ190eXBlX2NsYXNzX3BlZWsgKGdzdF9kZWJ1Z19jb2xvcl9tb2RlX2dldF90eXBlICgpKSk7Ci0KLSAgZ3N0X2RlaW5pdGlhbGl6ZWQgPSBUUlVFOwotICBHU1RfSU5GTyAoImRlaW5pdGlhbGl6ZWQgR1N0cmVhbWVyIik7Ci19Ci0KLS8qKgotICogZ3N0X3ZlcnNpb246Ci0gKiBAbWFqb3I6IChvdXQpOiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyCi0gKiBAbWlub3I6IChvdXQpOiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyCi0gKiBAbWljcm86IChvdXQpOiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG1pY3JvIHZlcnNpb24gbnVtYmVyCi0gKiBAbmFubzogIChvdXQpOiBwb2ludGVyIHRvIGEgZ3VpbnQgdG8gc3RvcmUgdGhlIG5hbm8gdmVyc2lvbiBudW1iZXIKLSAqCi0gKiBHZXRzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIGxpYnJhcnkuCi0gKi8KLXZvaWQKLWdzdF92ZXJzaW9uIChndWludCAqIG1ham9yLCBndWludCAqIG1pbm9yLCBndWludCAqIG1pY3JvLCBndWludCAqIG5hbm8pCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1ham9yKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAobWlub3IpOwotICBnX3JldHVybl9pZl9mYWlsIChtaWNybyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG5hbm8pOwotCi0gICptYWpvciA9IEdTVF9WRVJTSU9OX01BSk9SOwotICAqbWlub3IgPSBHU1RfVkVSU0lPTl9NSU5PUjsKLSAgKm1pY3JvID0gR1NUX1ZFUlNJT05fTUlDUk87Ci0gICpuYW5vID0gR1NUX1ZFUlNJT05fTkFOTzsKLX0KLQotLyoqCi0gKiBnc3RfdmVyc2lvbl9zdHJpbmc6Ci0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgdXNlZnVsIGZvciBkZXNjcmliaW5nIHRoaXMgdmVyc2lvbgotICogb2YgR1N0cmVhbWVyIHRvIHRoZSBvdXRzaWRlIHdvcmxkOiB1c2VyIGFnZW50IHN0cmluZ3MsIGxvZ2dpbmcsIC4uLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGRlc2NyaWJpbmcgdGhpcyB2ZXJzaW9uCi0gKiAgICAgb2YgR1N0cmVhbWVyLgotICovCi0KLWdjaGFyICoKLWdzdF92ZXJzaW9uX3N0cmluZyAodm9pZCkKLXsKLSAgZ3VpbnQgbWFqb3IsIG1pbm9yLCBtaWNybywgbmFubzsKLQotICBnc3RfdmVyc2lvbiAoJm1ham9yLCAmbWlub3IsICZtaWNybywgJm5hbm8pOwotICBpZiAobmFubyA9PSAwKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJHU3RyZWFtZXIgJWQuJWQuJWQiLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKLSAgZWxzZSBpZiAobmFubyA9PSAxKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJHU3RyZWFtZXIgJWQuJWQuJWQgKEdJVCkiLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKLSAgZWxzZQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJHU3RyZWFtZXIgJWQuJWQuJWQgKHByZXJlbGVhc2UpIiwgbWFqb3IsIG1pbm9yLAotICAgICAgICBtaWNybyk7Ci19Ci0KLS8qKgotICogZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZDoKLSAqCi0gKiBTb21lIGZ1bmN0aW9ucyBpbiB0aGUgR1N0cmVhbWVyIGNvcmUgbWlnaHQgaW5zdGFsbCBhIGN1c3RvbSBTSUdTRUdWIGhhbmRsZXIKLSAqIHRvIGJldHRlciBjYXRjaCBhbmQgcmVwb3J0IGVycm9ycyB0byB0aGUgYXBwbGljYXRpb24uIEN1cnJlbnRseSB0aGlzIGZlYXR1cmUKLSAqIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGxvYWRpbmcgcGx1Z2lucy4KLSAqCi0gKiBBcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3VyIHdpdGggdGhlCi0gKiBnc3Rfc2VndHJhcF9zZXRfZW5hYmxlZCgpIGZ1bmN0aW9uLiBUaGlzIGlzIHR5cGljYWxseSBkb25lIGlmIHRoZSBhcHBsaWNhdGlvbgotICogd2FudHMgdG8gaW5zdGFsbCBpdHMgb3duIGhhbmRsZXIgd2l0aG91dCBHU3RyZWFtZXIgaW50ZXJmZXJpbmcuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgR1N0cmVhbWVyIGlzIGFsbG93ZWQgdG8gaW5zdGFsbCBhIGN1c3RvbSBTSUdTRUdWIGhhbmRsZXIuCi0gKi8KLWdib29sZWFuCi1nc3Rfc2VndHJhcF9pc19lbmFibGVkICh2b2lkKQotewotICAvKiB5ZXBzLCBpdCdzIGVuYWJsZWQgd2hlbiBpdCdzIG5vdCBkaXNhYmxlZCAqLwotICByZXR1cm4gIV9nc3RfZGlzYWJsZV9zZWd0cmFwOwotfQotCi0vKioKLSAqIGdzdF9zZWd0cmFwX3NldF9lbmFibGVkOgotICogQGVuYWJsZWQ6IHdoZXRoZXIgYSBjdXN0b20gU0lHU0VHViBoYW5kbGVyIHNob3VsZCBiZSBpbnN0YWxsZWQuCi0gKgotICogQXBwbGljYXRpb25zIG1pZ2h0IHdhbnQgdG8gZGlzYWJsZS9lbmFibGUgdGhlIFNJR1NFR1YgaGFuZGxpbmcgb2YKLSAqIHRoZSBHU3RyZWFtZXIgY29yZS4gU2VlIGdzdF9zZWd0cmFwX2lzX2VuYWJsZWQoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqLwotdm9pZAotZ3N0X3NlZ3RyYXBfc2V0X2VuYWJsZWQgKGdib29sZWFuIGVuYWJsZWQpCi17Ci0gIF9nc3RfZGlzYWJsZV9zZWd0cmFwID0gIWVuYWJsZWQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0LmggYi9nc3QvZ3N0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDdmNDEuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3QuaDogTWFpbiBoZWFkZXIgZm9yIEdTdHJlYW1lciwgYXBwcyBzaG91bGQgaW5jbHVkZSB0aGlzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0hfXwotI2RlZmluZSBfX0dTVF9IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9nbGliLWNvbXBhdC5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdGVudW10eXBlcy5oPgotI2luY2x1ZGUgPGdzdC9nc3R2ZXJzaW9uLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0YXRvbWljcXVldWUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0YmluLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9nc3RidWZmZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlcnBvb2wuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2Fwcy5oPgotI2luY2x1ZGUgPGdzdC9nc3RjYXBzZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2hpbGRwcm94eS5oPgotI2luY2x1ZGUgPGdzdC9nc3RjbG9jay5oPgotI2luY2x1ZGUgPGdzdC9nc3Rjb250cm9sc291cmNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGRhdGV0aW1lLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGRlYnVndXRpbHMuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGRldmljZW1vbml0b3IuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgotI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50bWV0YWRhdGEuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZXJyb3IuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZXZlbnQuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Z2hvc3RwYWQuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0aW5mby5oPgotI2luY2x1ZGUgPGdzdC9nc3RpdGVyYXRvci5oPgotI2luY2x1ZGUgPGdzdC9nc3RtZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdG1lbW9yeS5oPgotI2luY2x1ZGUgPGdzdC9nc3RtZXRhLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHN0cmVhbWNvbGxlY3Rpb24uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGFkLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBhcmFtc3BlY3MuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGlwZWxpbmUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBvbGwuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cHJlc2V0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHByb3RlY3Rpb24uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cXVlcnkuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cmVnaXN0cnkuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0c2FtcGxlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHNlZ21lbnQuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0c3RyZWFtcy5oPgotI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0c3lzdGVtY2xvY2suaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dGFnbGlzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3R0YWdzZXR0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dGFzay5oPgotI2luY2x1ZGUgPGdzdC9nc3R0YXNrcG9vbC5oPgotI2luY2x1ZGUgPGdzdC9nc3R0b2MuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dG9jc2V0dGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRyYWNlci5oPgotI2luY2x1ZGUgPGdzdC9nc3R0cmFjZXJmYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRyYWNlcnJlY29yZC5oPgotI2luY2x1ZGUgPGdzdC9nc3R0eXBlZmluZC5oPgotI2luY2x1ZGUgPGdzdC9nc3R0eXBlZmluZGZhY3RvcnkuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dXJpLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHV0aWxzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHZhbHVlLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0cGFyc2UuaD4KLQotLyogQVBJIGNvbXBhdGliaWxpdHkgc3R1ZmYgKi8KLSNpbmNsdWRlIDxnc3QvZ3N0Y29tcGF0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdm9pZAkJZ3N0X2luaXQJCQkoaW50ICphcmdjLCBjaGFyICoqYXJndltdKTsKLWdib29sZWFuCWdzdF9pbml0X2NoZWNrCQkJKGludCAqYXJnYywgY2hhciAqKmFyZ3ZbXSwKLQkJCQkJCSBHRXJyb3IgKiogZXJyKTsKLWdib29sZWFuICAgICAgICBnc3RfaXNfaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICh2b2lkKTsKLUdPcHRpb25Hcm91cCAqCWdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAJKHZvaWQpOwotdm9pZAkJZ3N0X2RlaW5pdAkJCSh2b2lkKTsKLQotdm9pZAkJZ3N0X3ZlcnNpb24JCQkoZ3VpbnQgKm1ham9yLCBndWludCAqbWlub3IsCi0JCQkJCQkgZ3VpbnQgKm1pY3JvLCBndWludCAqbmFubyk7Ci1nY2hhciAqCQlnc3RfdmVyc2lvbl9zdHJpbmcJCSh2b2lkKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9zZWd0cmFwX2lzX2VuYWJsZWQgICAgICAgICAgKHZvaWQpOwotdm9pZCAgICAgICAgICAgIGdzdF9zZWd0cmFwX3NldF9lbmFibGVkICAgICAgICAgKGdib29sZWFuIGVuYWJsZWQpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCAgICAodm9pZCk7Ci12b2lkICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQgICAoZ2Jvb2xlYW4gZW5hYmxlZCk7Ci0KLWdib29sZWFuICAgICAgICBnc3RfdXBkYXRlX3JlZ2lzdHJ5ICAgICAgICAgICAgICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdF9wcml2YXRlLmggYi9nc3QvZ3N0X3ByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ5MTQyYy4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0X3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKgotICogZ3N0X3ByaXZhdGUuaDogUHJpdmF0ZSBoZWFkZXIgZm9yIHdpdGhpbiBsaWJnc3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1BSSVZBVEVfSF9fCi0jZGVmaW5lIF9fR1NUX1BSSVZBVEVfSF9fCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGlmbmRlZiBHU1RfTElDRU5TRSAgIC8qIGRvbid0IGluY2x1ZGUgY29uZmlnLmggdHdpY2UsIGl0IGhhcyBubyBndWFyZHMgKi8KLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotIyBlbmRpZgotI2VuZGlmCi0KLS8qIFRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIGdsaWIuaCwgc2luY2UgaXQgbWlnaHQgYmUgdXNlZCBpbiBpbmxpbmUKLSAqIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgZ19sb2dfZG9tYWluX2dzdHJlYW1lcltdOwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIE5lZWRlZCBmb3IgR1NUX0VYUE9SVCAqLwotI2luY2x1ZGUgImdzdC9nc3Rjb25maWcuaCIKLQotLyogTmVlZGVkIGZvciBHc3RSZWdpc3RyeSAqICovCi0jaW5jbHVkZSAiZ3N0cmVnaXN0cnkuaCIKLSNpbmNsdWRlICJnc3RzdHJ1Y3R1cmUuaCIKLQotLyogd2UgbmVlZCB0aGlzIGluIHByZXR0eSBtdWNoIGFsbCBmaWxlcyAqLwotI2luY2x1ZGUgImdzdGluZm8uaCIKLQotLyogZm9yIHRoZSBmbGFncyBpbiB0aGUgR3N0UGx1Z2luRGVwIHN0cnVjdHVyZSBiZWxvdyAqLwotI2luY2x1ZGUgImdzdHBsdWdpbi5oIgotCi0vKiBmb3IgdGhlIHBhZCBjYWNoZSAqLwotI2luY2x1ZGUgImdzdHBhZC5oIgotCi0vKiBmb3IgR3N0RWxlbWVudCAqLwotI2luY2x1ZGUgImdzdGVsZW1lbnQuaCIKLQotLyogZm9yIEdzdERldmljZVByb3ZpZGVyICovCi0jaW5jbHVkZSAiZ3N0ZGV2aWNlcHJvdmlkZXIuaCIKLQotLyogZm9yIEdzdFRvYyAqLwotI2luY2x1ZGUgImdzdHRvYy5oIgotCi0jaW5jbHVkZSAiZ3N0ZGF0ZXRpbWUuaCIKLQotI2luY2x1ZGUgImdzdHRyYWNlcnV0aWxzLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotLyogdXNlZCBieSBnc3RwYXJzZS5jIGFuZCBncmFtbWFyLnkgKi8KLXN0cnVjdCBfR3N0UGFyc2VDb250ZXh0IHsKLSAgR0xpc3QgKiBtaXNzaW5nX2VsZW1lbnRzOwotfTsKLQotLyogdXNlZCBieSBnc3RwbHVnaW4uYyBhbmQgZ3N0cmVnaXN0cnliaW5hcnkuYyAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICAvKiBkZXRhaWxzIHJlZ2lzdGVyZWQgdmlhIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3koKSAqLwotICBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MgIGZsYWdzOwotICBnY2hhciAqKmVudl92YXJzOwotICBnY2hhciAqKnBhdGhzOwotICBnY2hhciAqKm5hbWVzOwotCi0gIC8qIGluZm9ybWF0aW9uIHNhdmVkIGZyb20gdGhlIGxhc3QgdGltZSB0aGUgcGx1Z2luIHdhcyBsb2FkZWQgKC0xID0gdW5zZXQpICovCi0gIGd1aW50ICAgZW52X2hhc2g7ICAvKiBoYXNoIG9mIGNvbnRlbnQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGVudl92YXJzICovCi0gIGd1aW50ICAgc3RhdF9oYXNoOyAvKiBoYXNoIG9mIHN0YXQoKSBvbiBhbGwgcmVsZXZhbnQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzICovCi19IEdzdFBsdWdpbkRlcDsKLQotc3RydWN0IF9Hc3RQbHVnaW5Qcml2YXRlIHsKLSAgR0xpc3QgKmRlcHM7ICAgIC8qIGxpc3Qgb2YgR3N0UGx1Z2luRGVwIHN0cnVjdHVyZXMgKi8KLSAgR3N0U3RydWN0dXJlICpjYWNoZV9kYXRhOwotfTsKLQotLyogRklYTUU6IGNvdWxkIHJlbmFtZSBhbGwgcHJpdl9nc3RfKiBmdW5jdGlvbnMgdG8gX19nc3RfKiBub3cgKi8KLUdfR05VQ19JTlRFUk5BTCAgZ2Jvb2xlYW4gcHJpdl9nc3RfcGx1Z2luX2xvYWRpbmdfaGF2ZV93aGl0ZWxpc3QgKHZvaWQpOwotCi1HX0dOVUNfSU5URVJOQUwgIGd1aW50MzIgIHByaXZfZ3N0X3BsdWdpbl9sb2FkaW5nX2dldF93aGl0ZWxpc3RfaGFzaCAodm9pZCk7Ci0KLUdfR05VQ19JTlRFUk5BTCAgZ2Jvb2xlYW4gcHJpdl9nc3RfcGx1Z2luX2Rlc2NfaXNfd2hpdGVsaXN0ZWQgKEdzdFBsdWdpbkRlc2MgKiBkZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAqIGZpbGVuYW1lKTsKLQotR19HTlVDX0lOVEVSTkFMICBnYm9vbGVhbiBfcHJpdl9wbHVnaW5fZGVwc19lbnZfdmFyc19jaGFuZ2VkIChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0dOVUNfSU5URVJOQUwgIGdib29sZWFuIF9wcml2X3BsdWdpbl9kZXBzX2ZpbGVzX2NoYW5nZWQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfR05VQ19JTlRFUk5BTCAgZ2Jvb2xlYW4gX3ByaXZfZ3N0X2luX3ZhbGdyaW5kICh2b2lkKTsKLQotLyogaW5pdCBmdW5jdGlvbnMgY2FsbGVkIGZyb20gZ3N0X2luaXQoKS4gKi8KLUdfR05VQ19JTlRFUk5BTCAgdm9pZCAgX3ByaXZfZ3N0X3F1YXJrc19pbml0aWFsaXplICh2b2lkKTsKLUdfR05VQ19JTlRFUk5BTCAgdm9pZCAgX3ByaXZfZ3N0X21pbmlfb2JqZWN0X2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfbWVtb3J5X2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfYWxsb2NhdG9yX2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfYnVmZmVyX2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfYnVmZmVyX2xpc3RfaW5pdGlhbGl6ZSAodm9pZCk7Ci1HX0dOVUNfSU5URVJOQUwgIHZvaWQgIF9wcml2X2dzdF9zdHJ1Y3R1cmVfaW5pdGlhbGl6ZSAodm9pZCk7Ci1HX0dOVUNfSU5URVJOQUwgIHZvaWQgIF9wcml2X2dzdF9jYXBzX2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfY2Fwc19mZWF0dXJlc19pbml0aWFsaXplICh2b2lkKTsKLUdfR05VQ19JTlRFUk5BTCAgdm9pZCAgX3ByaXZfZ3N0X2V2ZW50X2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfZm9ybWF0X2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfbWVzc2FnZV9pbml0aWFsaXplICh2b2lkKTsKLUdfR05VQ19JTlRFUk5BTCAgdm9pZCAgX3ByaXZfZ3N0X21ldGFfaW5pdGlhbGl6ZSAodm9pZCk7Ci1HX0dOVUNfSU5URVJOQUwgIHZvaWQgIF9wcml2X2dzdF9wbHVnaW5faW5pdGlhbGl6ZSAodm9pZCk7Ci1HX0dOVUNfSU5URVJOQUwgIHZvaWQgIF9wcml2X2dzdF9xdWVyeV9pbml0aWFsaXplICh2b2lkKTsKLUdfR05VQ19JTlRFUk5BTCAgdm9pZCAgX3ByaXZfZ3N0X3NhbXBsZV9pbml0aWFsaXplICh2b2lkKTsKLUdfR05VQ19JTlRFUk5BTCAgdm9pZCAgX3ByaXZfZ3N0X3RhZ19pbml0aWFsaXplICh2b2lkKTsKLUdfR05VQ19JTlRFUk5BTCAgdm9pZCAgX3ByaXZfZ3N0X3ZhbHVlX2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfZGVidWdfaW5pdCAodm9pZCk7Ci1HX0dOVUNfSU5URVJOQUwgIHZvaWQgIF9wcml2X2dzdF9jb250ZXh0X2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfdG9jX2luaXRpYWxpemUgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfZGF0ZV90aW1lX2luaXRpYWxpemUgKHZvaWQpOwotCi0vKiBjbGVhbnVwIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBnc3RfZGVpbml0KCkuICovCi1HX0dOVUNfSU5URVJOQUwgIHZvaWQgIF9wcml2X2dzdF9hbGxvY2F0b3JfY2xlYW51cCAodm9pZCk7Ci1HX0dOVUNfSU5URVJOQUwgIHZvaWQgIF9wcml2X2dzdF9jYXBzX2ZlYXR1cmVzX2NsZWFudXAgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkICBfcHJpdl9nc3RfY2Fwc19jbGVhbnVwICh2b2lkKTsKLQotLyogY2FsbGVkIGZyb20gZ3N0X3Rhc2tfY2xlYW51cF9hbGwoKS4gKi8KLUdfR05VQ19JTlRFUk5BTCAgdm9pZCAgX3ByaXZfZ3N0X2VsZW1lbnRfY2xlYW51cCAodm9pZCk7Ci0KLS8qIFByaXZhdGUgcmVnaXN0cnkgZnVuY3Rpb25zICovCi1HX0dOVUNfSU5URVJOQUwKLWdib29sZWFuIF9wcml2X2dzdF9yZWdpc3RyeV9yZW1vdmVfY2FjaGVfcGx1Z2lucyAoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5KTsKLQotR19HTlVDX0lOVEVSTkFMICB2b2lkIF9wcml2X2dzdF9yZWdpc3RyeV9jbGVhbnVwICh2b2lkKTsKLQotZ2Jvb2xlYW4gX2dzdF9wbHVnaW5fbG9hZGVyX2NsaWVudF9ydW4gKHZvaWQpOwotCi1HX0dOVUNfSU5URVJOQUwgIEdzdFBsdWdpbiAqIF9wcml2X2dzdF9wbHVnaW5fbG9hZF9maWxlX2Zvcl9yZWdpc3RyeSAoY29uc3QgZ2NoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yKiogZXJyb3IpOwotCi0vKiBVc2VkIGluIEdzdEJpbiBmb3IgbWFudWFsIHN0YXRlIGhhbmRsaW5nICovCi1HX0dOVUNfSU5URVJOQUwgIHZvaWQgX3ByaXZfZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlZCAoR3N0RWxlbWVudCAqZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0ZSBvbGRzdGF0ZSwgR3N0U3RhdGUgbmV3c3RhdGUsIEdzdFN0YXRlIHBlbmRpbmcpOwotCi0vKiB1c2VkIGluIGJvdGggZ3N0c3RydWN0dXJlLmMgYW5kIGdzdGNhcHMuYzsgbnVtYmVycyBhcmUgY29tcGxldGVseSBtYWRlIHVwICovCi0jZGVmaW5lIFNUUlVDVFVSRV9FU1RJTUFURURfU1RSSU5HX0xFTihzKSAoMTYgKyBnc3Rfc3RydWN0dXJlX25fZmllbGRzKHMpICogMjIpCi0jZGVmaW5lIEZFQVRVUkVTX0VTVElNQVRFRF9TVFJJTkdfTEVOKHMpICgxNiArIGdzdF9jYXBzX2ZlYXR1cmVzX2dldF9zaXplKHMpICogMTQpCi0KLUdfR05VQ19JTlRFUk5BTAotZ2Jvb2xlYW4gIHByaXZfZ3N0X3N0cnVjdHVyZV9hcHBlbmRfdG9fZ3N0cmluZyAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1N0cmluZyAgICAgICAgICAgICogcyk7Ci1HX0dOVUNfSU5URVJOQUwKLWdib29sZWFuIHByaXZfX2dzdF9zdHJ1Y3R1cmVfYXBwZW5kX3RlbXBsYXRlX3RvX2dzdHJpbmcgKEdRdWFyayBmaWVsZF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotR19HTlVDX0lOVEVSTkFMCi12b2lkIHByaXZfZ3N0X2NhcHNfZmVhdHVyZXNfYXBwZW5kX3RvX2dzdHJpbmcgKGNvbnN0IEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzLCBHU3RyaW5nICpzKTsKLQotR19HTlVDX0lOVEVSTkFMCi1nYm9vbGVhbiBwcml2X2dzdF9zdHJ1Y3R1cmVfcGFyc2VfbmFtZSAoZ2NoYXIgKiBzdHIsIGdjaGFyICoqc3RhcnQsIGdjaGFyICoqIGVuZCwgZ2NoYXIgKiogbmV4dCk7Ci1HX0dOVUNfSU5URVJOQUwKLWdib29sZWFuIHByaXZfZ3N0X3N0cnVjdHVyZV9wYXJzZV9maWVsZHMgKGdjaGFyICpzdHIsIGdjaGFyICoqIGVuZCwgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUpOwotCi0vKiB1c2VkIGluIGdzdHZhbHVlLmMgYW5kIGdzdHN0cnVjdHVyZS5jICovCi0KLSNkZWZpbmUgR1NUX1dSQVBQRURfUFRSX0ZPUk1BVCAgICAgInBcYWEiCi0KLUdfR05VQ19JTlRFUk5BTAotZ2NoYXIgKnByaXZfZ3N0X3N0cmluZ190YWtlX2FuZF93cmFwIChnY2hhciAqIHMpOwotCi0vKiByZWdpc3RyeSBjYWNoZSBiYWNrZW5kcyAqLwotR19HTlVDX0lOVEVSTkFMCi1nYm9vbGVhbgkJcHJpdl9nc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUJKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGNoYXIgKmxvY2F0aW9uKTsKLQotR19HTlVDX0lOVEVSTkFMCi1nYm9vbGVhbgkJcHJpdl9nc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlCShHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHTGlzdCAqIHBsdWdpbnMsIGNvbnN0IGNoYXIgKmxvY2F0aW9uKTsKLQotCi1HX0dOVUNfSU5URVJOQUwKLXZvaWQgICAgICBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKEdzdEVsZW1lbnRGYWN0b3J5ICAgICogZWxlbWVudGZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRlbXBsKTsKLQotR19HTlVDX0lOVEVSTkFMCi12b2lkICAgICAgX19nc3RfZWxlbWVudF9mYWN0b3J5X2FkZF9pbnRlcmZhY2UgICAgICAgICAgIChHc3RFbGVtZW50RmFjdG9yeSAgICAqIGVsZW1lbnRmYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKiBpbnRlcmZhY2VuYW1lKTsKLQotLyogdXNlZCBpbiBnc3R2YWx1ZS5jIGFuZCBnc3RzdHJ1Y3R1cmUuYyAqLwotI2RlZmluZSBHU1RfQVNDSUlfSVNfU1RSSU5HKGMpIChnX2FzY2lpX2lzYWxudW0oKGMpKSB8fCAoKGMpID09ICdfJykgfHwgXAotICAgICgoYykgPT0gJy0nKSB8fCAoKGMpID09ICcrJykgfHwgKChjKSA9PSAnLycpIHx8ICgoYykgPT0gJzonKSB8fCBcCi0gICAgKChjKSA9PSAnLicpKQotCi0vKiBUaGlzIGlzIG9ubHkgbWVhbnQgZm9yIGludGVybmFsIHVzZXMgKi8KLUdfR05VQ19JTlRFUk5BTAotZ2ludCBfX2dzdF9kYXRlX3RpbWVfY29tcGFyZSAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkdDEsIGNvbnN0IEdzdERhdGVUaW1lICogZHQyKTsKLQotR19HTlVDX0lOVEVSTkFMCi1nY2hhciAqIF9fZ3N0X2RhdGVfdGltZV9zZXJpYWxpemUgKEdzdERhdGVUaW1lICogZGF0ZXRpbWUsIGdib29sZWFuIHdpdGhfdXNlY3MpOwotCi0vKiBOb24tc3RhdGljLCBmb3IgYWNjZXNzIGZyb20gdGhlIHRlc3RzdWl0ZSwgYnV0IG5vdCBmb3IgZXh0ZXJuYWwgdXNlICovCi1nYm9vbGVhbgotX3ByaXZfZ3N0X2RvX2xpbmVhcl9yZWdyZXNzaW9uIChHc3RDbG9ja1RpbWUgKnRpbWVzLCBndWludCBuLAotICAgIEdzdENsb2NrVGltZSAqIG1fbnVtLCBHc3RDbG9ja1RpbWUgKiBtX2Rlbm9tLCBHc3RDbG9ja1RpbWUgKiBiLAotICAgIEdzdENsb2NrVGltZSAqIHhiYXNlLCBnZG91YmxlICogcl9zcXVhcmVkKTsKLQotLyogRm9yIHVzZSBpbiBnc3RkZWJ1Z3V0aWxzICovCi1HX0dOVUNfSU5URVJOQUwKLUdzdENhcHNGZWF0dXJlcyAqIF9fZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY29uc3QgR3N0Q2FwcyAqIGNhcHMsIGd1aW50IGlkeCk7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkKLS8qIFNlY3JldCB2YXJpYWJsZSB0byBpbml0aWFsaXNlIGdzdCB3aXRob3V0IHJlZ2lzdHJ5IGNhY2hlICovCi1HU1RfRVhQT1JUIGdib29sZWFuIF9nc3RfZGlzYWJsZV9yZWdpc3RyeV9jYWNoZTsKLSNlbmRpZgotCi0vKiBwcm92aWRlIGlubGluZSBnc3RfZ192YWx1ZV9nZXRfZm9vX3VuY2hlY2tlZCgpLCB1c2VkIGluIGdzdHN0cnVjdHVyZS5jICovCi0jZGVmaW5lIERFRklORV9JTkxJTkVfR19WQUxVRV9HRVRfVU5DSEVDS0VEKHJldF90eXBlLG5hbWVfdHlwZSx2X2ZpZWxkKSBcCi1zdGF0aWMgaW5saW5lIHJldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfZ192YWx1ZV9nZXRfIyNuYW1lX3R5cGUjI191bmNoZWNrZWQgKGNvbnN0IEdWYWx1ZSAqdmFsdWUpICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiB2YWx1ZS0+ZGF0YVswXS52X2ZpZWxkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLURFRklORV9JTkxJTkVfR19WQUxVRV9HRVRfVU5DSEVDS0VEKGdib29sZWFuLGJvb2xlYW4sdl9pbnQpCi1ERUZJTkVfSU5MSU5FX0dfVkFMVUVfR0VUX1VOQ0hFQ0tFRChnaW50LGludCx2X2ludCkKLURFRklORV9JTkxJTkVfR19WQUxVRV9HRVRfVU5DSEVDS0VEKGd1aW50LHVpbnQsdl91aW50KQotREVGSU5FX0lOTElORV9HX1ZBTFVFX0dFVF9VTkNIRUNLRUQoZ2ludDY0LGludDY0LHZfaW50NjQpCi1ERUZJTkVfSU5MSU5FX0dfVkFMVUVfR0VUX1VOQ0hFQ0tFRChndWludDY0LHVpbnQ2NCx2X3VpbnQ2NCkKLURFRklORV9JTkxJTkVfR19WQUxVRV9HRVRfVU5DSEVDS0VEKGdmbG9hdCxmbG9hdCx2X2Zsb2F0KQotREVGSU5FX0lOTElORV9HX1ZBTFVFX0dFVF9VTkNIRUNLRUQoZ2RvdWJsZSxkb3VibGUsdl9kb3VibGUpCi1ERUZJTkVfSU5MSU5FX0dfVkFMVUVfR0VUX1VOQ0hFQ0tFRChjb25zdCBnY2hhciAqLHN0cmluZyx2X3BvaW50ZXIpCi0KLQotLyoqKiBkZWJ1Z2dpbmcgY2F0ZWdvcmllcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBHU1RfUkVNT1ZFX0dTVF9ERUJVRwotCi1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfR1NUX0lOSVQ7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfTUVNT1JZOwotR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BBUkVOVEFHRTsKLUdTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9TVEFURVM7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfU0NIRURVTElORzsKLUdTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9CVUZGRVI7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQlVGRkVSX0xJU1Q7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQlVTOwotR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0NBUFM7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQ0xPQ0s7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfRUxFTUVOVF9QQURTOwotR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BBRFM7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUEVSRk9STUFOQ0U7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUElQRUxJTkU7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUExVR0lOX0xPQURJTkc7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUExVR0lOX0lORk87Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUFJPUEVSVElFUzsKLUdTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9ORUdPVElBVElPTjsKLUdTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9SRUZDT1VOVElORzsKLUdTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9FUlJPUl9TWVNURU07Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfRVZFTlQ7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfTUVTU0FHRTsKLUdTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QQVJBTVM7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQ0FMTF9UUkFDRTsKLUdTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9TSUdOQUw7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUFJPQkU7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUkVHSVNUUlk7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUU9TOwotR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX01FVEE7Ci1HU1RfRVhQT1JUIEdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfTE9DS0lORzsKLUdTVF9FWFBPUlQgR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9DT05URVhUOwotCi0vKiBDYXRlZ29yaWVzIHRoYXQgc2hvdWxkIGJlIGNvbXBsZXRlbHkgcHJpdmF0ZSB0bwotICogbGliZ3N0cmVhbWVyIHNob3VsZCBiZSBkb25lIGxpa2UgdGhpczogKi8KLSNkZWZpbmUgR1NUX0NBVF9QT0xMIF9wcml2X0dTVF9DQVRfUE9MTAotZXh0ZXJuIEdzdERlYnVnQ2F0ZWdvcnkgKl9wcml2X0dTVF9DQVRfUE9MTDsKLQotI2RlZmluZSBHU1RfQ0FUX1BST1RFQ1RJT04gX3ByaXZfR1NUX0NBVF9QUk9URUNUSU9OCi1leHRlcm4gR3N0RGVidWdDYXRlZ29yeSAqX3ByaXZfR1NUX0NBVF9QUk9URUNUSU9OOwotCi1leHRlcm4gR3N0Q2xvY2tUaW1lIF9wcml2X2dzdF9zdGFydF90aW1lOwotCi0jZWxzZQotCi0jZGVmaW5lIEdTVF9DQVRfR1NUX0lOSVQgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQVVUT1BMVUcgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQVVUT1BMVUdfQVRURU1QVCBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUEFSRU5UQUdFICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfU1RBVEVTICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfU0NIRURVTElORyAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfREFUQUZMT1cgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQlVGRkVSICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQlVGRkVSX0xJU1QgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQlVTICAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQ0FQUyAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQ0xPQ0sgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfRUxFTUVOVF9QQURTICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUEFEUyAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUEVSRk9STUFOQ0UgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUElQRUxJTkUgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUExVR0lOX0xPQURJTkcgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUExVR0lOX0lORk8gICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUFJPUEVSVElFUyAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfTkVHT1RJQVRJT04gICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUkVGQ09VTlRJTkcgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfRVJST1JfU1lTVEVNICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfRVZFTlQgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfTUVTU0FHRSAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUEFSQU1TICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQ0FMTF9UUkFDRSAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfU0lHTkFMICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUFJPQkUgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUkVHSVNUUlkgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUU9TICAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfVFlQRVMgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUE9MTCAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfTUVUQSAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfTE9DS0lORyAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfQ09OVEVYVCAgICAgICAgICBOVUxMCi0jZGVmaW5lIEdTVF9DQVRfUFJPVEVDVElPTiAgICAgICBOVUxMCi0KLSNlbmRpZgotCi0jaWZkZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0vKiBmb3IgX2dzdF9lbGVtZW50X2Vycm9yX3ByaW50ZiAqLwotI2RlZmluZSBfX2dzdF92YXNwcmludGYgX19nc3RfaW5mb19mYWxsYmFja192YXNwcmludGYKLWludCBfX2dzdF92YXNwcmludGYgKGNoYXIgKipyZXN1bHQsIGNoYXIgY29uc3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKLSNlbmRpZgotCi0vKioqKiBvYmplY3RzIG1hZGUgb3BhcXVlIHVudGlsIHRoZSBwcml2YXRlIGJpdHMgaGF2ZSBiZWVuIG1hZGUgcHJpdmF0ZSAqKioqLwotCi0jaW5jbHVkZSA8Z21vZHVsZS5oPgotI2luY2x1ZGUgPHRpbWUuaD4gLyogdGltZV90ICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIG9mZl90ICovCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4gLyogb2ZmX3QgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBsdWdpblByaXZhdGUgR3N0UGx1Z2luUHJpdmF0ZTsKLQotc3RydWN0IF9Hc3RQbHVnaW4gewotICBHc3RPYmplY3QgICAgICAgb2JqZWN0OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RQbHVnaW5EZXNjCWRlc2M7Ci0KLSAgR3N0UGx1Z2luRGVzYyAqb3JpZ19kZXNjOwotCi0gIGdjaGFyICoJZmlsZW5hbWU7Ci0gIGdjaGFyICoJYmFzZW5hbWU7ICAgICAgIC8qIGJhc2UgbmFtZSAobm9uLWRpciBwYXJ0KSBvZiBwbHVnaW4gcGF0aCAqLwotCi0gIEdNb2R1bGUgKgltb2R1bGU7CQkvKiBjb250YWlucyB0aGUgbW9kdWxlIGlmIHBsdWdpbiBpcyBsb2FkZWQgKi8KLQotICBvZmZfdCAgICAgICAgIGZpbGVfc2l6ZTsKLSAgdGltZV90ICAgICAgICBmaWxlX210aW1lOwotICBnYm9vbGVhbiAgICAgIHJlZ2lzdGVyZWQ7ICAgICAvKiBUUlVFIHdoZW4gdGhlIHJlZ2lzdHJ5IGhhcyBzZWVuIGEgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhhdCBtYXRjaGVzIHRoZSBwbHVnaW4ncyBiYXNlbmFtZSAqLwotCi0gIEdzdFBsdWdpblByaXZhdGUgKnByaXY7Ci0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdFBsdWdpbkNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgIG9iamVjdF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdFBsdWdpbkZlYXR1cmUgewotICBHc3RPYmplY3QgICAgICBvYmplY3Q7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdib29sZWFuICAgICAgIGxvYWRlZDsKLSAgZ3VpbnQgICAgICAgICAgcmFuazsKLQotICBjb25zdCBnY2hhciAgICpwbHVnaW5fbmFtZTsKLSAgR3N0UGx1Z2luICAgICAqcGx1Z2luOyAgICAgIC8qIHdlYWsgcmVmICovCi0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3RQbHVnaW5GZWF0dXJlQ2xhc3MgewotICBHc3RPYmplY3RDbGFzcyAgICAgICAgcGFyZW50X2NsYXNzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLSNpbmNsdWRlICJnc3R0eXBlZmluZC5oIgotCi1zdHJ1Y3QgX0dzdFR5cGVGaW5kRmFjdG9yeSB7Ci0gIEdzdFBsdWdpbkZlYXR1cmUgICAgICAgICAgICAgIGZlYXR1cmU7Ci0gIC8qIDxwcml2YXRlPiAqLwotCi0gIEdzdFR5cGVGaW5kRnVuY3Rpb24gICAgICAgICAgIGZ1bmN0aW9uOwotICBnY2hhciAqKiAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zOwotICBHc3RDYXBzICogICAgICAgICAgICAgICAgICAgICBjYXBzOwotCi0gIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YTsKLSAgR0Rlc3Ryb3lOb3RpZnkgICAgICAgICAgICAgICAgdXNlcl9kYXRhX25vdGlmeTsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLXN0cnVjdCBfR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MgewotICBHc3RQbHVnaW5GZWF0dXJlQ2xhc3MgICAgICAgICBwYXJlbnQ7Ci0gIC8qIDxwcml2YXRlPiAqLwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3RUcmFjZXJGYWN0b3J5IHsKLSAgR3N0UGx1Z2luRmVhdHVyZSAgICAgICAgICAgICAgZmVhdHVyZTsKLSAgLyogPHByaXZhdGU+ICovCi0KLSAgR1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsKLQotICAvKgotICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5ICAgICAgICAgICAgICAgIHVzZXJfZGF0YV9ub3RpZnk7Ci0gICovCi0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdFRyYWNlckZhY3RvcnlDbGFzcyB7Ci0gIEdzdFBsdWdpbkZlYXR1cmVDbGFzcyAgICAgICAgIHBhcmVudDsKLSAgLyogPHByaXZhdGU+ICovCi0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdEVsZW1lbnRGYWN0b3J5IHsKLSAgR3N0UGx1Z2luRmVhdHVyZSAgICAgIHBhcmVudDsKLQotICBHVHlwZSAgICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdW5pcXVlIEdUeXBlIG9mIGVsZW1lbnQgb3IgMCBpZiBub3QgbG9hZGVkICovCi0KLSAgZ3BvaW50ZXIgICAgICAgICAgICAgIG1ldGFkYXRhOwotCi0gIEdMaXN0ICogICAgICAgICAgICAgICBzdGF0aWNwYWR0ZW1wbGF0ZXM7ICAgICAvKiBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBsaXN0ICovCi0gIGd1aW50ICAgICAgICAgICAgICAgICBudW1wYWR0ZW1wbGF0ZXM7Ci0KLSAgLyogVVJJIGludGVyZmFjZSBzdHVmZiAqLwotICBHc3RVUklUeXBlICAgICAgICAgICAgdXJpX3R5cGU7Ci0gIGdjaGFyICoqICAgICAgICAgICAgICB1cmlfcHJvdG9jb2xzOwotCi0gIEdMaXN0ICogICAgICAgICAgICAgICBpbnRlcmZhY2VzOyAgICAgICAgICAgICAvKiBpbnRlcmZhY2UgdHlwZSBuYW1lcyB0aGlzIGVsZW1lbnQgaW1wbGVtZW50cyAqLwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLXN0cnVjdCBfR3N0RWxlbWVudEZhY3RvcnlDbGFzcyB7Ci0gIEdzdFBsdWdpbkZlYXR1cmVDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdERldmljZVByb3ZpZGVyRmFjdG9yeSB7Ci0gIEdzdFBsdWdpbkZlYXR1cmUgICAgICAgICAgIGZlYXR1cmU7Ci0gIC8qIDxwcml2YXRlPiAqLwotCi0gIEdUeXBlICAgICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAvKiB1bmlxdWUgR1R5cGUgdGhlIGRldmljZSBmYWN0b3J5IG9yIDAgaWYgbm90IGxvYWRlZCAqLwotCi0gIHZvbGF0aWxlIEdzdERldmljZVByb3ZpZGVyICpwcm92aWRlcjsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE7Ci0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdERldmljZVByb3ZpZGVyRmFjdG9yeUNsYXNzIHsKLSAgR3N0UGx1Z2luRmVhdHVyZUNsYXNzICAgICAgICAgcGFyZW50OwotICAvKiA8cHJpdmF0ZT4gKi8KLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLS8qIHByaXZhdCBmbGFnIHVzZWQgYnkgR3N0QnVzIC8gR3N0TWVzc2FnZSAqLwotI2RlZmluZSBHU1RfTUVTU0FHRV9GTEFHX0FTWU5DX0RFTElWRVJZIChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDApCi0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUFJJVkFURV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RhbGxvY2F0b3IuYyBiL2dzdC9nc3RhbGxvY2F0b3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3ZmMyYS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0YWxsb2NhdG9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NDcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmJlPgotICoKLSAqIGdzdGFsbG9jYXRvci5jOiBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGFsbG9jYXRvcgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBhbGxvY2F0ZSBtZW1vcnkgYmxvY2tzCi0gKiBAc2VlX2Fsc286ICNHc3RNZW1vcnkKLSAqCi0gKiBNZW1vcnkgaXMgdXN1YWxseSBjcmVhdGVkIGJ5IGFsbG9jYXRvcnMgd2l0aCBhIGdzdF9hbGxvY2F0b3JfYWxsb2MoKQotICogbWV0aG9kIGNhbGwuIFdoZW4gJU5VTEwgaXMgdXNlZCBhcyB0aGUgYWxsb2NhdG9yLCB0aGUgZGVmYXVsdCBhbGxvY2F0b3Igd2lsbAotICogYmUgdXNlZC4KLSAqCi0gKiBOZXcgYWxsb2NhdG9ycyBjYW4gYmUgcmVnaXN0ZXJlZCB3aXRoIGdzdF9hbGxvY2F0b3JfcmVnaXN0ZXIoKS4KLSAqIEFsbG9jYXRvcnMgYXJlIGlkZW50aWZpZWQgYnkgbmFtZSBhbmQgY2FuIGJlIHJldHJpZXZlZCB3aXRoCi0gKiBnc3RfYWxsb2NhdG9yX2ZpbmQoKS4gZ3N0X2FsbG9jYXRvcl9zZXRfZGVmYXVsdCgpIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUKLSAqIGRlZmF1bHQgYWxsb2NhdG9yLgotICoKLSAqIE5ldyBtZW1vcnkgY2FuIGJlIGNyZWF0ZWQgd2l0aCBnc3RfbWVtb3J5X25ld193cmFwcGVkKCkgdGhhdCB3cmFwcyB0aGUgbWVtb3J5Ci0gKiBhbGxvY2F0ZWQgZWxzZXdoZXJlLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0bWVtb3J5LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9hbGxvY2F0b3JfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2FsbG9jYXRvcl9kZWJ1ZwotCi0jZGVmaW5lIEdTVF9BTExPQ0FUT1JfR0VUX1BSSVZBVEUob2JqKSAgXAotICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfQUxMT0NBVE9SLCBHc3RBbGxvY2F0b3JQcml2YXRlKSkKLQotc3RydWN0IF9Hc3RBbGxvY2F0b3JQcml2YXRlCi17Ci0gIGdwb2ludGVyIGR1bW15OwotfTsKLQotI2lmIGRlZmluZWQoTUVNT1JZX0FMSUdOTUVOVF9NQUxMT0MpCi1nc2l6ZSBnc3RfbWVtb3J5X2FsaWdubWVudCA9IDc7Ci0jZWxpZiBkZWZpbmVkKE1FTU9SWV9BTElHTk1FTlRfUEFHRVNJWkUpCi0vKiB3ZSBmaWxsIHRoaXMgaW4gaW4gdGhlIF9pbml0IG1ldGhvZCAqLwotZ3NpemUgZ3N0X21lbW9yeV9hbGlnbm1lbnQgPSAwOwotI2VsaWYgZGVmaW5lZChNRU1PUllfQUxJR05NRU5UKQotZ3NpemUgZ3N0X21lbW9yeV9hbGlnbm1lbnQgPSBNRU1PUllfQUxJR05NRU5UIC0gMTsKLSNlbHNlCi0jZXJyb3IgIk5vIG1lbW9yeSBhbGlnbm1lbnQgY29uZmlndXJlZCIKLWdzaXplIGdzdF9tZW1vcnlfYWxpZ25tZW50ID0gMDsKLSNlbmRpZgotCi0vKiB0aGUgZGVmYXVsdCBhbGxvY2F0b3IgKi8KLXN0YXRpYyBHc3RBbGxvY2F0b3IgKl9kZWZhdWx0X2FsbG9jYXRvcjsKLQotc3RhdGljIEdzdEFsbG9jYXRvciAqX3N5c21lbV9hbGxvY2F0b3I7Ci0KLS8qIHJlZ2lzdGVyZWQgYWxsb2NhdG9ycyAqLwotc3RhdGljIEdSV0xvY2sgbG9jazsKLXN0YXRpYyBHSGFzaFRhYmxlICphbGxvY2F0b3JzOwotCi1HX0RFRklORV9BQlNUUkFDVF9UWVBFIChHc3RBbGxvY2F0b3IsIGdzdF9hbGxvY2F0b3IsIEdTVF9UWVBFX09CSkVDVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxsb2NhdG9yX2NsYXNzX2luaXQgKEdzdEFsbG9jYXRvckNsYXNzICoga2xhc3MpCi17Ci0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0QWxsb2NhdG9yUHJpdmF0ZSkpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfYWxsb2NhdG9yX2RlYnVnLCAiYWxsb2NhdG9yIiwgMCwKLSAgICAgICJhbGxvY2F0b3IgZGVidWciKTsKLX0KLQotc3RhdGljIEdzdE1lbW9yeSAqCi1fZmFsbGJhY2tfbWVtX2NvcHkgKEdzdE1lbW9yeSAqIG1lbSwgZ3NzaXplIG9mZnNldCwgZ3NzaXplIHNpemUpCi17Ci0gIEdzdE1lbW9yeSAqY29weTsKLSAgR3N0TWFwSW5mbyBzaW5mbywgZGluZm87Ci0gIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zID0geyAwLCBtZW0tPmFsaWduLCAwLCAwLCB9OwotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLQotICBpZiAoIWdzdF9tZW1vcnlfbWFwIChtZW0sICZzaW5mbywgR1NUX01BUF9SRUFEKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBpZiAoc2l6ZSA9PSAtMSkKLSAgICBzaXplID0gc2luZm8uc2l6ZSA+IG9mZnNldCA/IHNpbmZvLnNpemUgLSBvZmZzZXQgOiAwOwotCi0gIC8qIHVzZSB0aGUgc2FtZSBhbGxvY2F0b3IgYXMgdGhlIG1lbW9yeSB3ZSBjb3B5ICAqLwotICBhbGxvY2F0b3IgPSBtZW0tPmFsbG9jYXRvcjsKLSAgaWYgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGFsbG9jYXRvciwgR1NUX0FMTE9DQVRPUl9GTEFHX0NVU1RPTV9BTExPQykpCi0gICAgYWxsb2NhdG9yID0gTlVMTDsKLSAgY29weSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKGFsbG9jYXRvciwgc2l6ZSwgJnBhcmFtcyk7Ci0KLSAgaWYgKCFnc3RfbWVtb3J5X21hcCAoY29weSwgJmRpbmZvLCBHU1RfTUFQX1dSSVRFKSkgewotICAgIEdTVF9DQVRfV0FSTklORyAoR1NUX0NBVF9NRU1PUlksICJjb3VsZCBub3Qgd3JpdGUgbWFwIG1lbW9yeSAlcCIsIGNvcHkpOwotICAgIGdzdF9hbGxvY2F0b3JfZnJlZSAobWVtLT5hbGxvY2F0b3IsIGNvcHkpOwotICAgIGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgJnNpbmZvKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEVSRk9STUFOQ0UsCi0gICAgICAibWVtY3B5ICUiIEdfR1NTSVpFX0ZPUk1BVCAiIG1lbW9yeSAlcCAtPiAlcCIsIHNpemUsIG1lbSwgY29weSk7Ci0gIG1lbWNweSAoZGluZm8uZGF0YSwgc2luZm8uZGF0YSArIG9mZnNldCwgc2l6ZSk7Ci0gIGdzdF9tZW1vcnlfdW5tYXAgKGNvcHksICZkaW5mbyk7Ci0gIGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgJnNpbmZvKTsKLQotICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fZmFsbGJhY2tfbWVtX2lzX3NwYW4gKEdzdE1lbW9yeSAqIG1lbTEsIEdzdE1lbW9yeSAqIG1lbTIsIGdzaXplICogb2Zmc2V0KQotewotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxsb2NhdG9yX2luaXQgKEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvcikKLXsKLSAgYWxsb2NhdG9yLT5wcml2ID0gR1NUX0FMTE9DQVRPUl9HRVRfUFJJVkFURSAoYWxsb2NhdG9yKTsKLQotICBhbGxvY2F0b3ItPm1lbV9jb3B5ID0gX2ZhbGxiYWNrX21lbV9jb3B5OwotICBhbGxvY2F0b3ItPm1lbV9pc19zcGFuID0gX2ZhbGxiYWNrX21lbV9pc19zcGFuOwotfQotCi1HX0RFRklORV9CT1hFRF9UWVBFIChHc3RBbGxvY2F0aW9uUGFyYW1zLCBnc3RfYWxsb2NhdGlvbl9wYXJhbXMsCi0gICAgKEdCb3hlZENvcHlGdW5jKSBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfY29weSwKLSAgICAoR0JveGVkRnJlZUZ1bmMpIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19mcmVlKTsKLQotLyoqCi0gKiBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdDoKLSAqIEBwYXJhbXM6IGEgI0dzdEFsbG9jYXRpb25QYXJhbXMKLSAqCi0gKiBJbml0aWFsaXplIEBwYXJhbXMgdG8gaXRzIGRlZmF1bHQgdmFsdWVzCi0gKi8KLXZvaWQKLWdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0IChHc3RBbGxvY2F0aW9uUGFyYW1zICogcGFyYW1zKQotewotICBnX3JldHVybl9pZl9mYWlsIChwYXJhbXMgIT0gTlVMTCk7Ci0KLSAgbWVtc2V0IChwYXJhbXMsIDAsIHNpemVvZiAoR3N0QWxsb2NhdGlvblBhcmFtcykpOwotfQotCi0vKioKLSAqIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19jb3B5OgotICogQHBhcmFtczogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RBbGxvY2F0aW9uUGFyYW1zCi0gKgotICogQ3JlYXRlIGEgY29weSBvZiBAcGFyYW1zLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9hbGxvY2F0aW9uX3BhcmFtc19mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjI0dzdEFsbG9jYXRpb25QYXJhbXMsIGZyZWUgd2l0aAotICogZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2ZyZWUoKS4KLSAqLwotR3N0QWxsb2NhdGlvblBhcmFtcyAqCi1nc3RfYWxsb2NhdGlvbl9wYXJhbXNfY29weSAoY29uc3QgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcykKLXsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyAqcmVzdWx0ID0gTlVMTDsKLQotICBpZiAocGFyYW1zKSB7Ci0gICAgcmVzdWx0ID0KLSAgICAgICAgKEdzdEFsbG9jYXRpb25QYXJhbXMgKikgZ19zbGljZV9jb3B5IChzaXplb2YgKEdzdEFsbG9jYXRpb25QYXJhbXMpLAotICAgICAgICBwYXJhbXMpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2ZyZWU6Ci0gKiBAcGFyYW1zOiAoaW4pICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QWxsb2NhdGlvblBhcmFtcwotICoKLSAqIEZyZWUgQHBhcmFtcwotICovCi12b2lkCi1nc3RfYWxsb2NhdGlvbl9wYXJhbXNfZnJlZSAoR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcykKLXsKLSAgZ19zbGljZV9mcmVlIChHc3RBbGxvY2F0aW9uUGFyYW1zLCBwYXJhbXMpOwotfQotCi0vKioKLSAqIGdzdF9hbGxvY2F0b3JfcmVnaXN0ZXI6Ci0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGFsbG9jYXRvcgotICogQGFsbG9jYXRvcjogKHRyYW5zZmVyIGZ1bGwpOiAjR3N0QWxsb2NhdG9yCi0gKgotICogUmVnaXN0ZXJzIHRoZSBtZW1vcnkgQGFsbG9jYXRvciB3aXRoIEBuYW1lLiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZgotICogQGFsbG9jYXRvci4KLSAqLwotdm9pZAotZ3N0X2FsbG9jYXRvcl9yZWdpc3RlciAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGFsbG9jYXRvciAhPSBOVUxMKTsKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX01FTU9SWSwgInJlZ2lzdGVyaW5nIGFsbG9jYXRvciAlcCB3aXRoIG5hbWUgXCIlc1wiIiwKLSAgICAgIGFsbG9jYXRvciwgbmFtZSk7Ci0KLSAgZ19yd19sb2NrX3dyaXRlcl9sb2NrICgmbG9jayk7Ci0gIC8qIFRoZSByZWYgd2lsbCBuZXZlciBiZSByZWxlYXNlZCAqLwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChhbGxvY2F0b3IsIEdTVF9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEKTsKLSAgZ19oYXNoX3RhYmxlX2luc2VydCAoYWxsb2NhdG9ycywgKGdwb2ludGVyKSBuYW1lLCAoZ3BvaW50ZXIpIGFsbG9jYXRvcik7Ci0gIGdfcndfbG9ja193cml0ZXJfdW5sb2NrICgmbG9jayk7Ci19Ci0KLS8qKgotICogZ3N0X2FsbG9jYXRvcl9maW5kOgotICogQG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlIGFsbG9jYXRvcgotICoKLSAqIEZpbmQgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgYWxsb2NhdG9yIHdpdGggQG5hbWUuIFdoZW4gQG5hbWUgaXMgJU5VTEwsIHRoZQotICogZGVmYXVsdCBhbGxvY2F0b3Igd2lsbCBiZSByZXR1cm5lZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSAjR3N0QWxsb2NhdG9yIG9yICVOVUxMIHdoZW4KLSAqIHRoZSBhbGxvY2F0b3Igd2l0aCBAbmFtZSB3YXMgbm90IHJlZ2lzdGVyZWQuIFVzZSBnc3Rfb2JqZWN0X3VucmVmKCkKLSAqIHRvIHJlbGVhc2UgdGhlIGFsbG9jYXRvciBhZnRlciB1c2FnZS4KLSAqLwotR3N0QWxsb2NhdG9yICoKLWdzdF9hbGxvY2F0b3JfZmluZCAoY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLQotICBnX3J3X2xvY2tfcmVhZGVyX2xvY2sgKCZsb2NrKTsKLSAgaWYgKG5hbWUpIHsKLSAgICBhbGxvY2F0b3IgPSBnX2hhc2hfdGFibGVfbG9va3VwIChhbGxvY2F0b3JzLCAoZ2NvbnN0cG9pbnRlcikgbmFtZSk7Ci0gIH0gZWxzZSB7Ci0gICAgYWxsb2NhdG9yID0gX2RlZmF1bHRfYWxsb2NhdG9yOwotICB9Ci0gIGlmIChhbGxvY2F0b3IpCi0gICAgZ3N0X29iamVjdF9yZWYgKGFsbG9jYXRvcik7Ci0gIGdfcndfbG9ja19yZWFkZXJfdW5sb2NrICgmbG9jayk7Ci0KLSAgcmV0dXJuIGFsbG9jYXRvcjsKLX0KLQotLyoqCi0gKiBnc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0OgotICogQGFsbG9jYXRvcjogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RBbGxvY2F0b3IKLSAqCi0gKiBTZXQgdGhlIGRlZmF1bHQgYWxsb2NhdG9yLiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiBAYWxsb2NhdG9yLgotICovCi12b2lkCi1nc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0IChHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IpCi17Ci0gIEdzdEFsbG9jYXRvciAqb2xkOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19BTExPQ0FUT1IgKGFsbG9jYXRvcikpOwotCi0gIGdfcndfbG9ja193cml0ZXJfbG9jayAoJmxvY2spOwotICBvbGQgPSBfZGVmYXVsdF9hbGxvY2F0b3I7Ci0gIF9kZWZhdWx0X2FsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgZ19yd19sb2NrX3dyaXRlcl91bmxvY2sgKCZsb2NrKTsKLQotICBpZiAob2xkKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKG9sZCk7Ci19Ci0KLS8qKgotICogZ3N0X2FsbG9jYXRvcl9hbGxvYzoKLSAqIEBhbGxvY2F0b3I6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IGEgI0dzdEFsbG9jYXRvciB0byB1c2UKLSAqIEBzaXplOiBzaXplIG9mIHRoZSB2aXNpYmxlIG1lbW9yeSBhcmVhCi0gKiBAcGFyYW1zOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBvcHRpb25hbCBwYXJhbWV0ZXJzCi0gKgotICogVXNlIEBhbGxvY2F0b3IgdG8gYWxsb2NhdGUgYSBuZXcgbWVtb3J5IGJsb2NrIHdpdGggbWVtb3J5IHRoYXQgaXMgYXQgbGVhc3QKLSAqIEBzaXplIGJpZy4KLSAqCi0gKiBUaGUgb3B0aW9uYWwgQHBhcmFtcyBjYW4gc3BlY2lmeSB0aGUgcHJlZml4IGFuZCBwYWRkaW5nIGZvciB0aGUgbWVtb3J5LiBJZgotICogJU5VTEwgaXMgcGFzc2VkLCBubyBmbGFncywgbm8gZXh0cmEgcHJlZml4L3BhZGRpbmcgYW5kIGEgZGVmYXVsdCBhbGlnbm1lbnQgaXMKLSAqIHVzZWQuCi0gKgotICogVGhlIHByZWZpeC9wYWRkaW5nIHdpbGwgYmUgZmlsbGVkIHdpdGggMCBpZiBmbGFncyBjb250YWlucwotICogI0dTVF9NRU1PUllfRkxBR19aRVJPX1BSRUZJWEVEIGFuZCAjR1NUX01FTU9SWV9GTEFHX1pFUk9fUEFEREVEIHJlc3BlY3RpdmVseS4KLSAqCi0gKiBXaGVuIEBhbGxvY2F0b3IgaXMgJU5VTEwsIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB3aWxsIGJlIHVzZWQuCi0gKgotICogVGhlIGFsaWdubWVudCBpbiBAcGFyYW1zIGlzIGdpdmVuIGFzIGEgYml0bWFzayBzbyB0aGF0IEBhbGlnbiArIDEgZXF1YWxzCi0gKiB0aGUgYW1vdW50IG9mIGJ5dGVzIHRvIGFsaWduIHRvLiBGb3IgZXhhbXBsZSwgdG8gYWxpZ24gdG8gOCBieXRlcywKLSAqIHVzZSBhbiBhbGlnbm1lbnQgb2YgNy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RNZW1vcnkuCi0gKi8KLUdzdE1lbW9yeSAqCi1nc3RfYWxsb2NhdG9yX2FsbG9jIChHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGdzaXplIHNpemUsCi0gICAgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcykKLXsKLSAgR3N0TWVtb3J5ICptZW07Ci0gIHN0YXRpYyBHc3RBbGxvY2F0aW9uUGFyYW1zIGRlZnBhcmFtcyA9IHsgMCwgMCwgMCwgMCwgfTsKLSAgR3N0QWxsb2NhdG9yQ2xhc3MgKmFjbGFzczsKLQotICBpZiAocGFyYW1zKSB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCgocGFyYW1zLT5hbGlnbiArIDEpICYgcGFyYW1zLT5hbGlnbikgPT0gMCwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgcGFyYW1zID0gJmRlZnBhcmFtczsKLSAgfQotCi0gIGlmIChhbGxvY2F0b3IgPT0gTlVMTCkKLSAgICBhbGxvY2F0b3IgPSBfZGVmYXVsdF9hbGxvY2F0b3I7Ci0KLSAgYWNsYXNzID0gR1NUX0FMTE9DQVRPUl9HRVRfQ0xBU1MgKGFsbG9jYXRvcik7Ci0gIGlmIChhY2xhc3MtPmFsbG9jKQotICAgIG1lbSA9IGFjbGFzcy0+YWxsb2MgKGFsbG9jYXRvciwgc2l6ZSwgcGFyYW1zKTsKLSAgZWxzZQotICAgIG1lbSA9IE5VTEw7Ci0KLSAgcmV0dXJuIG1lbTsKLX0KLQotLyoqCi0gKiBnc3RfYWxsb2NhdG9yX2ZyZWU6Ci0gKiBAYWxsb2NhdG9yOiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEFsbG9jYXRvciB0byB1c2UKLSAqIEBtZW1vcnk6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG1lbW9yeSB0byBmcmVlCi0gKgotICogRnJlZSBAbWVtb3J5IHRoYXQgd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggZ3N0X2FsbG9jYXRvcl9hbGxvYygpLgotICovCi12b2lkCi1nc3RfYWxsb2NhdG9yX2ZyZWUgKEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwgR3N0TWVtb3J5ICogbWVtb3J5KQotewotICBHc3RBbGxvY2F0b3JDbGFzcyAqYWNsYXNzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19BTExPQ0FUT1IgKGFsbG9jYXRvcikpOwotICBnX3JldHVybl9pZl9mYWlsIChtZW1vcnkgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1lbW9yeS0+YWxsb2NhdG9yID09IGFsbG9jYXRvcik7Ci0KLSAgYWNsYXNzID0gR1NUX0FMTE9DQVRPUl9HRVRfQ0xBU1MgKGFsbG9jYXRvcik7Ci0gIGlmIChhY2xhc3MtPmZyZWUpCi0gICAgYWNsYXNzLT5mcmVlIChhbGxvY2F0b3IsIG1lbW9yeSk7Ci19Ci0KLS8qIGRlZmF1bHQgbWVtb3J5IGltcGxlbWVudGF0aW9uICovCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RNZW1vcnkgbWVtOwotCi0gIGdzaXplIHNsaWNlX3NpemU7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBncG9pbnRlciB1c2VyX2RhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5IG5vdGlmeTsKLX0gR3N0TWVtb3J5U3lzdGVtOwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RBbGxvY2F0b3IgcGFyZW50OwotfSBHc3RBbGxvY2F0b3JTeXNtZW07Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEFsbG9jYXRvckNsYXNzIHBhcmVudF9jbGFzczsKLX0gR3N0QWxsb2NhdG9yU3lzbWVtQ2xhc3M7Ci0KLUdUeXBlIGdzdF9hbGxvY2F0b3Jfc3lzbWVtX2dldF90eXBlICh2b2lkKTsKLUdfREVGSU5FX1RZUEUgKEdzdEFsbG9jYXRvclN5c21lbSwgZ3N0X2FsbG9jYXRvcl9zeXNtZW0sIEdTVF9UWVBFX0FMTE9DQVRPUik7Ci0KLS8qIGluaXRpYWxpemUgdGhlIGZpZWxkcyAqLwotc3RhdGljIGlubGluZSB2b2lkCi1fc3lzbWVtX2luaXQgKEdzdE1lbW9yeVN5c3RlbSAqIG1lbSwgR3N0TWVtb3J5RmxhZ3MgZmxhZ3MsCi0gICAgR3N0TWVtb3J5ICogcGFyZW50LCBnc2l6ZSBzbGljZV9zaXplLAotICAgIGdwb2ludGVyIGRhdGEsIGdzaXplIG1heHNpemUsIGdzaXplIGFsaWduLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnkpCi17Ci0gIGdzdF9tZW1vcnlfaW5pdCAoR1NUX01FTU9SWV9DQVNUIChtZW0pLAotICAgICAgZmxhZ3MsIF9zeXNtZW1fYWxsb2NhdG9yLCBwYXJlbnQsIG1heHNpemUsIGFsaWduLCBvZmZzZXQsIHNpemUpOwotCi0gIG1lbS0+c2xpY2Vfc2l6ZSA9IHNsaWNlX3NpemU7Ci0gIG1lbS0+ZGF0YSA9IGRhdGE7Ci0gIG1lbS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotICBtZW0tPm5vdGlmeSA9IG5vdGlmeTsKLX0KLQotLyogY3JlYXRlIGEgbmV3IG1lbW9yeSBibG9jayB0aGF0IG1hbmFnZXMgdGhlIGdpdmVuIG1lbW9yeSAqLwotc3RhdGljIGlubGluZSBHc3RNZW1vcnlTeXN0ZW0gKgotX3N5c21lbV9uZXcgKEdzdE1lbW9yeUZsYWdzIGZsYWdzLAotICAgIEdzdE1lbW9yeSAqIHBhcmVudCwgZ3BvaW50ZXIgZGF0YSwgZ3NpemUgbWF4c2l6ZSwgZ3NpemUgYWxpZ24sIGdzaXplIG9mZnNldCwKLSAgICBnc2l6ZSBzaXplLCBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKLXsKLSAgR3N0TWVtb3J5U3lzdGVtICptZW07Ci0gIGdzaXplIHNsaWNlX3NpemU7Ci0KLSAgc2xpY2Vfc2l6ZSA9IHNpemVvZiAoR3N0TWVtb3J5U3lzdGVtKTsKLQotICBtZW0gPSBnX3NsaWNlX2FsbG9jIChzbGljZV9zaXplKTsKLSAgX3N5c21lbV9pbml0IChtZW0sIGZsYWdzLCBwYXJlbnQsIHNsaWNlX3NpemUsCi0gICAgICBkYXRhLCBtYXhzaXplLCBhbGlnbiwgb2Zmc2V0LCBzaXplLCB1c2VyX2RhdGEsIG5vdGlmeSk7Ci0KLSAgcmV0dXJuIG1lbTsKLX0KLQotLyogYWxsb2NhdGUgdGhlIG1lbW9yeSBhbmQgc3RydWN0dXJlIGluIG9uZSBibG9jayAqLwotc3RhdGljIEdzdE1lbW9yeVN5c3RlbSAqCi1fc3lzbWVtX25ld19ibG9jayAoR3N0TWVtb3J5RmxhZ3MgZmxhZ3MsCi0gICAgZ3NpemUgbWF4c2l6ZSwgZ3NpemUgYWxpZ24sIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0TWVtb3J5U3lzdGVtICptZW07Ci0gIGdzaXplIGFvZmZzZXQsIHNsaWNlX3NpemUsIHBhZGRpbmc7Ci0gIGd1aW50OCAqZGF0YTsKLQotICAvKiBlbnN1cmUgY29uZmlndXJlZCBhbGlnbm1lbnQgKi8KLSAgYWxpZ24gfD0gZ3N0X21lbW9yeV9hbGlnbm1lbnQ7Ci0gIC8qIGFsbG9jYXRlIG1vcmUgdG8gY29tcGVuc2F0ZSBmb3IgYWxpZ25tZW50ICovCi0gIG1heHNpemUgKz0gYWxpZ247Ci0gIC8qIGFsbG9jIGhlYWRlciBhbmQgZGF0YSBpbiBvbmUgYmxvY2sgKi8KLSAgc2xpY2Vfc2l6ZSA9IHNpemVvZiAoR3N0TWVtb3J5U3lzdGVtKSArIG1heHNpemU7Ci0KLSAgbWVtID0gZ19zbGljZV9hbGxvYyAoc2xpY2Vfc2l6ZSk7Ci0gIGlmIChtZW0gPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBkYXRhID0gKGd1aW50OCAqKSBtZW0gKyBzaXplb2YgKEdzdE1lbW9yeVN5c3RlbSk7Ci0KLSAgLyogZG8gYWxpZ25tZW50ICovCi0gIGlmICgoYW9mZnNldCA9ICgoZ3VpbnRwdHIpIGRhdGEgJiBhbGlnbikpKSB7Ci0gICAgYW9mZnNldCA9IChhbGlnbiArIDEpIC0gYW9mZnNldDsKLSAgICBkYXRhICs9IGFvZmZzZXQ7Ci0gICAgbWF4c2l6ZSAtPSBhb2Zmc2V0OwotICB9Ci0KLSAgaWYgKG9mZnNldCAmJiAoZmxhZ3MgJiBHU1RfTUVNT1JZX0ZMQUdfWkVST19QUkVGSVhFRCkpCi0gICAgbWVtc2V0IChkYXRhLCAwLCBvZmZzZXQpOwotCi0gIHBhZGRpbmcgPSBtYXhzaXplIC0gKG9mZnNldCArIHNpemUpOwotICBpZiAocGFkZGluZyAmJiAoZmxhZ3MgJiBHU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQpKQotICAgIG1lbXNldCAoZGF0YSArIG9mZnNldCArIHNpemUsIDAsIHBhZGRpbmcpOwotCi0gIF9zeXNtZW1faW5pdCAobWVtLCBmbGFncywgTlVMTCwgc2xpY2Vfc2l6ZSwgZGF0YSwgbWF4c2l6ZSwKLSAgICAgIGFsaWduLCBvZmZzZXQsIHNpemUsIE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBtZW07Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotX3N5c21lbV9tYXAgKEdzdE1lbW9yeVN5c3RlbSAqIG1lbSwgZ3NpemUgbWF4c2l6ZSwgR3N0TWFwRmxhZ3MgZmxhZ3MpCi17Ci0gIHJldHVybiBtZW0tPmRhdGE7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX3N5c21lbV91bm1hcCAoR3N0TWVtb3J5U3lzdGVtICogbWVtKQotewotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdE1lbW9yeVN5c3RlbSAqCi1fc3lzbWVtX2NvcHkgKEdzdE1lbW9yeVN5c3RlbSAqIG1lbSwgZ3NzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0TWVtb3J5U3lzdGVtICpjb3B5OwotCi0gIGlmIChzaXplID09IC0xKQotICAgIHNpemUgPSBtZW0tPm1lbS5zaXplID4gb2Zmc2V0ID8gbWVtLT5tZW0uc2l6ZSAtIG9mZnNldCA6IDA7Ci0KLSAgY29weSA9IF9zeXNtZW1fbmV3X2Jsb2NrICgwLCBzaXplLCBtZW0tPm1lbS5hbGlnbiwgMCwgc2l6ZSk7Ci0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEVSRk9STUFOQ0UsCi0gICAgICAibWVtY3B5ICUiIEdfR1NJWkVfRk9STUFUICIgbWVtb3J5ICVwIC0+ICVwIiwgc2l6ZSwgbWVtLCBjb3B5KTsKLSAgbWVtY3B5IChjb3B5LT5kYXRhLCBtZW0tPmRhdGEgKyBtZW0tPm1lbS5vZmZzZXQgKyBvZmZzZXQsIHNpemUpOwotCi0gIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgR3N0TWVtb3J5U3lzdGVtICoKLV9zeXNtZW1fc2hhcmUgKEdzdE1lbW9yeVN5c3RlbSAqIG1lbSwgZ3NzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0TWVtb3J5U3lzdGVtICpzdWI7Ci0gIEdzdE1lbW9yeSAqcGFyZW50OwotCi0gIC8qIGZpbmQgdGhlIHJlYWwgcGFyZW50ICovCi0gIGlmICgocGFyZW50ID0gbWVtLT5tZW0ucGFyZW50KSA9PSBOVUxMKQotICAgIHBhcmVudCA9IChHc3RNZW1vcnkgKikgbWVtOwotCi0gIGlmIChzaXplID09IC0xKQotICAgIHNpemUgPSBtZW0tPm1lbS5zaXplIC0gb2Zmc2V0OwotCi0gIC8qIHRoZSBzaGFyZWQgbWVtb3J5IGlzIGFsd2F5cyByZWFkb25seSAqLwotICBzdWIgPQotICAgICAgX3N5c21lbV9uZXcgKEdTVF9NSU5JX09CSkVDVF9GTEFHUyAocGFyZW50KSB8Ci0gICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19MT0NLX1JFQURPTkxZLCBwYXJlbnQsIG1lbS0+ZGF0YSwgbWVtLT5tZW0ubWF4c2l6ZSwKLSAgICAgIG1lbS0+bWVtLmFsaWduLCBtZW0tPm1lbS5vZmZzZXQgKyBvZmZzZXQsIHNpemUsIE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBzdWI7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX3N5c21lbV9pc19zcGFuIChHc3RNZW1vcnlTeXN0ZW0gKiBtZW0xLCBHc3RNZW1vcnlTeXN0ZW0gKiBtZW0yLCBnc2l6ZSAqIG9mZnNldCkKLXsKLQotICBpZiAob2Zmc2V0KSB7Ci0gICAgR3N0TWVtb3J5U3lzdGVtICpwYXJlbnQ7Ci0KLSAgICBwYXJlbnQgPSAoR3N0TWVtb3J5U3lzdGVtICopIG1lbTEtPm1lbS5wYXJlbnQ7Ci0KLSAgICAqb2Zmc2V0ID0gbWVtMS0+bWVtLm9mZnNldCAtIHBhcmVudC0+bWVtLm9mZnNldDsKLSAgfQotCi0gIC8qIGFuZCBtZW1vcnkgaXMgY29udGlndW91cyAqLwotICByZXR1cm4gbWVtMS0+ZGF0YSArIG1lbTEtPm1lbS5vZmZzZXQgKyBtZW0xLT5tZW0uc2l6ZSA9PQotICAgICAgbWVtMi0+ZGF0YSArIG1lbTItPm1lbS5vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBHc3RNZW1vcnkgKgotZGVmYXVsdF9hbGxvYyAoR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLCBnc2l6ZSBzaXplLAotICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCi17Ci0gIGdzaXplIG1heHNpemUgPSBzaXplICsgcGFyYW1zLT5wcmVmaXggKyBwYXJhbXMtPnBhZGRpbmc7Ci0KLSAgcmV0dXJuIChHc3RNZW1vcnkgKikgX3N5c21lbV9uZXdfYmxvY2sgKHBhcmFtcy0+ZmxhZ3MsCi0gICAgICBtYXhzaXplLCBwYXJhbXMtPmFsaWduLCBwYXJhbXMtPnByZWZpeCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWZhdWx0X2ZyZWUgKEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwgR3N0TWVtb3J5ICogbWVtKQotewotICBHc3RNZW1vcnlTeXN0ZW0gKmRtZW0gPSAoR3N0TWVtb3J5U3lzdGVtICopIG1lbTsKLSAgZ3NpemUgc2xpY2Vfc2l6ZTsKLQotICBpZiAoZG1lbS0+bm90aWZ5KQotICAgIGRtZW0tPm5vdGlmeSAoZG1lbS0+dXNlcl9kYXRhKTsKLQotICBzbGljZV9zaXplID0gZG1lbS0+c2xpY2Vfc2l6ZTsKLQotI2lmZGVmIFVTRV9QT0lTT05JTkcKLSAgLyoganVzdCBwb2lzb24gdGhlIHN0cnVjdHMsIG5vdCBhbGwgdGhlIGRhdGEgKi8KLSAgbWVtc2V0IChtZW0sIDB4ZmYsIHNpemVvZiAoR3N0TWVtb3J5U3lzdGVtKSk7Ci0jZW5kaWYKLQotICBnX3NsaWNlX2ZyZWUxIChzbGljZV9zaXplLCBtZW0pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FsbG9jYXRvcl9zeXNtZW1fZmluYWxpemUgKEdPYmplY3QgKiBvYmopCi17Ci0gIC8qIERvbid0IHJhaXNlIHdhcm5pbmdzIGlmIHdlIGFyZSBzaHV0dGluZyBkb3duICovCi0gIGlmIChfZGVmYXVsdF9hbGxvY2F0b3IpCi0gICAgZ193YXJuaW5nICgiVGhlIGRlZmF1bHQgbWVtb3J5IGFsbG9jYXRvciB3YXMgZnJlZWQhIik7Ci0KLSAgKChHT2JqZWN0Q2xhc3MgKikgZ3N0X2FsbG9jYXRvcl9zeXNtZW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxsb2NhdG9yX3N5c21lbV9jbGFzc19pbml0IChHc3RBbGxvY2F0b3JTeXNtZW1DbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEFsbG9jYXRvckNsYXNzICphbGxvY2F0b3JfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGFsbG9jYXRvcl9jbGFzcyA9IChHc3RBbGxvY2F0b3JDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9hbGxvY2F0b3Jfc3lzbWVtX2ZpbmFsaXplOwotCi0gIGFsbG9jYXRvcl9jbGFzcy0+YWxsb2MgPSBkZWZhdWx0X2FsbG9jOwotICBhbGxvY2F0b3JfY2xhc3MtPmZyZWUgPSBkZWZhdWx0X2ZyZWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxsb2NhdG9yX3N5c21lbV9pbml0IChHc3RBbGxvY2F0b3JTeXNtZW0gKiBhbGxvY2F0b3IpCi17Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2MgPSBHU1RfQUxMT0NBVE9SX0NBU1QgKGFsbG9jYXRvcik7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9NRU1PUlksICJpbml0IGFsbG9jYXRvciAlcCIsIGFsbG9jYXRvcik7Ci0KLSAgYWxsb2MtPm1lbV90eXBlID0gR1NUX0FMTE9DQVRPUl9TWVNNRU07Ci0gIGFsbG9jLT5tZW1fbWFwID0gKEdzdE1lbW9yeU1hcEZ1bmN0aW9uKSBfc3lzbWVtX21hcDsKLSAgYWxsb2MtPm1lbV91bm1hcCA9IChHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uKSBfc3lzbWVtX3VubWFwOwotICBhbGxvYy0+bWVtX2NvcHkgPSAoR3N0TWVtb3J5Q29weUZ1bmN0aW9uKSBfc3lzbWVtX2NvcHk7Ci0gIGFsbG9jLT5tZW1fc2hhcmUgPSAoR3N0TWVtb3J5U2hhcmVGdW5jdGlvbikgX3N5c21lbV9zaGFyZTsKLSAgYWxsb2MtPm1lbV9pc19zcGFuID0gKEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uKSBfc3lzbWVtX2lzX3NwYW47Ci19Ci0KLXZvaWQKLV9wcml2X2dzdF9hbGxvY2F0b3JfaW5pdGlhbGl6ZSAodm9pZCkKLXsKLSAgZ19yd19sb2NrX2luaXQgKCZsb2NrKTsKLSAgYWxsb2NhdG9ycyA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIE5VTEwsCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmKTsKLQotI2lmZGVmIEhBVkVfR0VUUEFHRVNJWkUKLSNpZmRlZiBNRU1PUllfQUxJR05NRU5UX1BBR0VTSVpFCi0gIGdzdF9tZW1vcnlfYWxpZ25tZW50ID0gZ2V0cGFnZXNpemUgKCkgLSAxOwotI2VuZGlmCi0jZW5kaWYKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX01FTU9SWSwgIm1lbW9yeSBhbGlnbm1lbnQ6ICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgZ3N0X21lbW9yeV9hbGlnbm1lbnQpOwotCi0gIF9zeXNtZW1fYWxsb2NhdG9yID0gZ19vYmplY3RfbmV3IChnc3RfYWxsb2NhdG9yX3N5c21lbV9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0KLSAgZ3N0X2FsbG9jYXRvcl9yZWdpc3RlciAoR1NUX0FMTE9DQVRPUl9TWVNNRU0sCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAoX3N5c21lbV9hbGxvY2F0b3IpKTsKLQotICBfZGVmYXVsdF9hbGxvY2F0b3IgPSBnc3Rfb2JqZWN0X3JlZiAoX3N5c21lbV9hbGxvY2F0b3IpOwotfQotCi12b2lkCi1fcHJpdl9nc3RfYWxsb2NhdG9yX2NsZWFudXAgKHZvaWQpCi17Ci0gIGdzdF9vYmplY3RfdW5yZWYgKF9zeXNtZW1fYWxsb2NhdG9yKTsKLSAgX3N5c21lbV9hbGxvY2F0b3IgPSBOVUxMOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKF9kZWZhdWx0X2FsbG9jYXRvcik7Ci0gIF9kZWZhdWx0X2FsbG9jYXRvciA9IE5VTEw7Ci0KLSAgZ19jbGVhcl9wb2ludGVyICgmYWxsb2NhdG9ycywgZ19oYXNoX3RhYmxlX3VucmVmKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVtb3J5X25ld193cmFwcGVkOgotICogQGZsYWdzOiAjR3N0TWVtb3J5RmxhZ3MKLSAqIEBkYXRhOiAoYXJyYXkgbGVuZ3RoPXNpemUpIChlbGVtZW50LXR5cGUgZ3VpbnQ4KSAodHJhbnNmZXIgbm9uZSk6IGRhdGEgdG8KLSAqICAgd3JhcAotICogQG1heHNpemU6IGFsbG9jYXRlZCBzaXplIG9mIEBkYXRhCi0gKiBAb2Zmc2V0OiBvZmZzZXQgaW4gQGRhdGEKLSAqIEBzaXplOiBzaXplIG9mIHZhbGlkIGRhdGEKLSAqIEB1c2VyX2RhdGE6IChhbGxvdy1ub25lKTogdXNlcl9kYXRhCi0gKiBAbm90aWZ5OiAoYWxsb3ctbm9uZSkgKHNjb3BlIGFzeW5jKSAoY2xvc3VyZSB1c2VyX2RhdGEpOiBjYWxsZWQgd2l0aCBAdXNlcl9kYXRhIHdoZW4gdGhlIG1lbW9yeSBpcyBmcmVlZAotICoKLSAqIEFsbG9jYXRlIGEgbmV3IG1lbW9yeSBibG9jayB0aGF0IHdyYXBzIHRoZSBnaXZlbiBAZGF0YS4KLSAqCi0gKiBUaGUgcHJlZml4L3BhZGRpbmcgbXVzdCBiZSBmaWxsZWQgd2l0aCAwIGlmIEBmbGFncyBjb250YWlucwotICogI0dTVF9NRU1PUllfRkxBR19aRVJPX1BSRUZJWEVEIGFuZCAjR1NUX01FTU9SWV9GTEFHX1pFUk9fUEFEREVEIHJlc3BlY3RpdmVseS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RNZW1vcnkuCi0gKi8KLUdzdE1lbW9yeSAqCi1nc3RfbWVtb3J5X25ld193cmFwcGVkIChHc3RNZW1vcnlGbGFncyBmbGFncywgZ3BvaW50ZXIgZGF0YSwKLSAgICBnc2l6ZSBtYXhzaXplLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUsIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpCi17Ci0gIEdzdE1lbW9yeVN5c3RlbSAqbWVtOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRhICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAob2Zmc2V0ICsgc2l6ZSA8PSBtYXhzaXplLCBOVUxMKTsKLQotICBtZW0gPQotICAgICAgX3N5c21lbV9uZXcgKGZsYWdzLCBOVUxMLCBkYXRhLCBtYXhzaXplLCAwLCBvZmZzZXQsIHNpemUsIHVzZXJfZGF0YSwKLSAgICAgIG5vdGlmeSk7Ci0KLSAgcmV0dXJuIChHc3RNZW1vcnkgKikgbWVtOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGFsbG9jYXRvci5oIGIvZ3N0L2dzdGFsbG9jYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjkzNjIwLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RhbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuYmU+Ci0gKgotICogZ3N0YWxsb2NhdG9yLmg6IEhlYWRlciBmb3IgbWVtb3J5IGFsbG9jYXRpb24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfQUxMT0NBVE9SX0hfXwotI2RlZmluZSBfX0dTVF9BTExPQ0FUT1JfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0bWVtb3J5Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBbGxvY2F0b3JQcml2YXRlIEdzdEFsbG9jYXRvclByaXZhdGU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QWxsb2NhdG9yQ2xhc3MgR3N0QWxsb2NhdG9yQ2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfQUxMT0NBVE9SICAgICAgICAgICAgICAgICAoZ3N0X2FsbG9jYXRvcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSVNfQUxMT0NBVE9SKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0FMTE9DQVRPUikpCi0jZGVmaW5lIEdTVF9JU19BTExPQ0FUT1JfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9BTExPQ0FUT1IpKQotI2RlZmluZSBHU1RfQUxMT0NBVE9SX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQUxMT0NBVE9SLCBHc3RBbGxvY2F0b3JDbGFzcykpCi0jZGVmaW5lIEdTVF9BTExPQ0FUT1Iob2JqKSAgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfQUxMT0NBVE9SLCBHc3RBbGxvY2F0b3IpKQotI2RlZmluZSBHU1RfQUxMT0NBVE9SX0NMQVNTKGtsYXNzKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfQUxMT0NBVE9SLCBHc3RBbGxvY2F0b3JDbGFzcykpCi0jZGVmaW5lIEdTVF9BTExPQ0FUT1JfQ0FTVChvYmopICAgICAgICAgICAgKChHc3RBbGxvY2F0b3IgKikob2JqKSkKLQotI2RlZmluZSBHU1RfVFlQRV9BTExPQ0FUSU9OX1BBUkFNUyAoZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfZ2V0X3R5cGUodm9pZCk7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBbGxvY2F0aW9uUGFyYW1zIEdzdEFsbG9jYXRpb25QYXJhbXM7Ci0KLS8qKgotICogZ3N0X21lbW9yeV9hbGlnbm1lbnQ6Ci0gKgotICogVGhlIGRlZmF1bHQgbWVtb3J5IGFsaWdubWVudCBpbiBieXRlcyAtIDEKLSAqIGFuIGFsaWdubWVudCBvZiA3IHdvdWxkIGJlIHRoZSBzYW1lIGFzIHdoYXQgbWFsbG9jKCkgZ3VhcmFudGVlcy4KLSAqLwotR1NUX0VYUE9SVCBnc2l6ZSBnc3RfbWVtb3J5X2FsaWdubWVudDsKLQotLyoqCi0gKiBHU1RfQUxMT0NBVE9SX1NZU01FTToKLSAqCi0gKiBUaGUgYWxsb2NhdG9yIG5hbWUgZm9yIHRoZSBkZWZhdWx0IHN5c3RlbSBtZW1vcnkgYWxsb2NhdG9yCi0gKi8KLSNkZWZpbmUgR1NUX0FMTE9DQVRPUl9TWVNNRU0gICAiU3lzdGVtTWVtb3J5IgotCi0vKioKLSAqIEdzdEFsbG9jYXRpb25QYXJhbXM6Ci0gKiBAZmxhZ3M6IGZsYWdzIHRvIGNvbnRyb2wgYWxsb2NhdGlvbgotICogQGFsaWduOiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQgb2YgdGhlIG1lbW9yeQotICogQHByZWZpeDogdGhlIGRlc2lyZWQgcHJlZml4Ci0gKiBAcGFkZGluZzogdGhlIGRlc2lyZWQgcGFkZGluZwotICoKLSAqIFBhcmFtZXRlcnMgdG8gY29udHJvbCB0aGUgYWxsb2NhdGlvbiBvZiBtZW1vcnkKLSAqLwotc3RydWN0IF9Hc3RBbGxvY2F0aW9uUGFyYW1zIHsKLSAgR3N0TWVtb3J5RmxhZ3MgZmxhZ3M7Ci0gIGdzaXplICAgICAgICAgIGFsaWduOwotICBnc2l6ZSAgICAgICAgICBwcmVmaXg7Ci0gIGdzaXplICAgICAgICAgIHBhZGRpbmc7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotLyoqCi0gKiBHc3RBbGxvY2F0b3JGbGFnczoKLSAqIEBHU1RfQUxMT0NBVE9SX0ZMQUdfQ1VTVE9NX0FMTE9DOiBUaGUgYWxsb2NhdG9yIGhhcyBhIGN1c3RvbSBhbGxvYyBmdW5jdGlvbi4KLSAqIEBHU1RfQUxMT0NBVE9SX0ZMQUdfTEFTVDogZmlyc3QgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXMKLSAqCi0gKiBGbGFncyBmb3IgYWxsb2NhdG9ycy4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0FMTE9DQVRPUl9GTEFHX0NVU1RPTV9BTExPQyAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCi0KLSAgR1NUX0FMTE9DQVRPUl9GTEFHX0xBU1QgICAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMTYpCi19IEdzdEFsbG9jYXRvckZsYWdzOwotCi0vKioKLSAqIEdzdEFsbG9jYXRvcjoKLSAqIEBtZW1fbWFwOiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeU1hcEZ1bmN0aW9uCi0gKiBAbWVtX3VubWFwOiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeVVubWFwRnVuY3Rpb24KLSAqIEBtZW1fY29weTogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlDb3B5RnVuY3Rpb24KLSAqIEBtZW1fc2hhcmU6IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR3N0TWVtb3J5U2hhcmVGdW5jdGlvbgotICogQG1lbV9pc19zcGFuOiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uCi0gKiBAbWVtX21hcF9mdWxsOiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdzdE1lbW9yeU1hcEZ1bGxGdW5jdGlvbi4KLSAqICAgICAgV2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgQG1lbV9tYXAgaWYgcHJlc2VudC4gKFNpbmNlIDEuNikKLSAqIEBtZW1fdW5tYXBfZnVsbDogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHc3RNZW1vcnlVbm1hcEZ1bGxGdW5jdGlvbi4KLSAqICAgICAgV2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgQG1lbV91bm1hcCBpZiBwcmVzZW50LiAoU2luY2UgMS42KQotICoKLSAqIFRoZSAjR3N0QWxsb2NhdG9yIGlzIHVzZWQgdG8gY3JlYXRlIG5ldyBtZW1vcnkuCi0gKi8KLXN0cnVjdCBfR3N0QWxsb2NhdG9yCi17Ci0gIEdzdE9iamVjdCAgb2JqZWN0OwotCi0gIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKm1lbV90eXBlOwotCi0gIC8qPCBwdWJsaWMgPiovCi0gIEdzdE1lbW9yeU1hcEZ1bmN0aW9uICAgICAgIG1lbV9tYXA7Ci0gIEdzdE1lbW9yeVVubWFwRnVuY3Rpb24gICAgIG1lbV91bm1hcDsKLQotICBHc3RNZW1vcnlDb3B5RnVuY3Rpb24gICAgICBtZW1fY29weTsKLSAgR3N0TWVtb3J5U2hhcmVGdW5jdGlvbiAgICAgbWVtX3NoYXJlOwotICBHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbiAgICBtZW1faXNfc3BhbjsKLQotICBHc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb24gICBtZW1fbWFwX2Z1bGw7Ci0gIEdzdE1lbW9yeVVubWFwRnVsbEZ1bmN0aW9uIG1lbV91bm1hcF9mdWxsOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HIC0gMl07Ci0KLSAgR3N0QWxsb2NhdG9yUHJpdmF0ZSAqcHJpdjsKLX07Ci0KLS8qKgotICogR3N0QWxsb2NhdG9yQ2xhc3M6Ci0gKiBAb2JqZWN0X2NsYXNzOiAgT2JqZWN0IHBhcmVudCBjbGFzcwotICogQGFsbG9jOiBpbXBsZW1lbnRhdGlvbiB0aGF0IGFjcXVpcmVzIG1lbW9yeQotICogQGZyZWU6IGltcGxlbWVudGF0aW9uIHRoYXQgcmVsZWFzZXMgbWVtb3J5Ci0gKgotICogVGhlICNHc3RBbGxvY2F0b3IgaXMgdXNlZCB0byBjcmVhdGUgbmV3IG1lbW9yeS4KLSAqLwotc3RydWN0IF9Hc3RBbGxvY2F0b3JDbGFzcyB7Ci0gIEdzdE9iamVjdENsYXNzIG9iamVjdF9jbGFzczsKLQotICAvKjwgcHVibGljID4qLwotICBHc3RNZW1vcnkgKiAgKCphbGxvYykgICAgICAoR3N0QWxsb2NhdG9yICphbGxvY2F0b3IsIGdzaXplIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBbGxvY2F0aW9uUGFyYW1zICpwYXJhbXMpOwotICB2b2lkICAgICAgICAgKCpmcmVlKSAgICAgICAoR3N0QWxsb2NhdG9yICphbGxvY2F0b3IsIEdzdE1lbW9yeSAqbWVtb3J5KTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSBnc3RfYWxsb2NhdG9yX2dldF90eXBlKHZvaWQpOwotCi0vKiBhbGxvY2F0b3JzICovCi12b2lkICAgICAgICAgICBnc3RfYWxsb2NhdG9yX3JlZ2lzdGVyICAgICAgICAoY29uc3QgZ2NoYXIgKm5hbWUsIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yKTsKLUdzdEFsbG9jYXRvciAqIGdzdF9hbGxvY2F0b3JfZmluZCAgICAgICAgICAgIChjb25zdCBnY2hhciAqbmFtZSk7Ci12b2lkICAgICAgICAgICBnc3RfYWxsb2NhdG9yX3NldF9kZWZhdWx0ICAgICAoR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yKTsKLQotLyogYWxsb2NhdGlvbiBwYXJhbWV0ZXJzICovCi12b2lkICAgICAgICAgICBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdCAgICAoR3N0QWxsb2NhdGlvblBhcmFtcyAqcGFyYW1zKTsKLUdzdEFsbG9jYXRpb25QYXJhbXMgKgotICAgICAgICAgICAgICAgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2NvcHkgICAgKGNvbnN0IEdzdEFsbG9jYXRpb25QYXJhbXMgKnBhcmFtcykgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19mcmVlICAgIChHc3RBbGxvY2F0aW9uUGFyYW1zICpwYXJhbXMpOwotCi0vKiBhbGxvY2F0aW5nIG1lbW9yeSBibG9ja3MgKi8KLUdzdE1lbW9yeSAqICAgIGdzdF9hbGxvY2F0b3JfYWxsb2MgICAgICAgICAgIChHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGdzaXplIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QWxsb2NhdGlvblBhcmFtcyAqcGFyYW1zKTsKLXZvaWQgICAgICAgICAgIGdzdF9hbGxvY2F0b3JfZnJlZSAgICAgICAgICAgIChHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIEdzdE1lbW9yeSAqbWVtb3J5KTsKLQotR3N0TWVtb3J5ICogICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAgKEdzdE1lbW9yeUZsYWdzIGZsYWdzLCBncG9pbnRlciBkYXRhLCBnc2l6ZSBtYXhzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0QWxsb2NhdGlvblBhcmFtcywgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2ZyZWUpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FMTE9DQVRPUl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RhdG9taWNxdWV1ZS5jIGIvZ3N0L2dzdGF0b21pY3F1ZXVlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MDA4OWMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGF0b21pY3F1ZXVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLSAqICAgICAgICAgICAgICAgMjAxMSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIGdzdGF0b21pY3F1ZXVlLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3RhdG9taWNxdWV1ZS5oIgotI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKLQotLyoqCi0gKiBTRUNUSU9OOmdzdGF0b21pY3F1ZXVlCi0gKiBAdGl0bGU6IEdzdEF0b21pY1F1ZXVlCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEFuIGF0b21pYyBxdWV1ZSBpbXBsZW1lbnRhdGlvbgotICoKLSAqIFRoZSAjR3N0QXRvbWljUXVldWUgb2JqZWN0IGltcGxlbWVudHMgYSBxdWV1ZSB0aGF0IGNhbiBiZSB1c2VkIGZyb20gbXVsdGlwbGUKLSAqIHRocmVhZHMgd2l0aG91dCBwZXJmb3JtaW5nIGFueSBibG9ja2luZyBvcGVyYXRpb25zLgotICovCi0KLUdfREVGSU5FX0JPWEVEX1RZUEUgKEdzdEF0b21pY1F1ZXVlLCBnc3RfYXRvbWljX3F1ZXVlLAotICAgIChHQm94ZWRDb3B5RnVuYykgZ3N0X2F0b21pY19xdWV1ZV9yZWYsCi0gICAgKEdCb3hlZEZyZWVGdW5jKSBnc3RfYXRvbWljX3F1ZXVlX3VucmVmKTsKLQotLyogQnkgZGVmYXVsdCB0aGUgcXVldWUgdXNlcyAyICogc2l6ZW9mKGdwb2ludGVyKSAqIGNscDIgKG1heF9pdGVtcykgb2YKLSAqIG1lbW9yeS4gY2xwMih4KSBpcyB0aGUgbmV4dCBwb3dlciBvZiB0d28gPj0gdGhhbiB4LgotICoKLSAqIFRoZSBxdWV1ZSBjYW4gb3BlcmF0ZSBpbiBsb3cgbWVtb3J5IG1vZGUsIGluIHdoaWNoIGl0IGNvbnN1bWVzIGFsbW9zdAotICogaGFsZiB0aGUgbWVtb3J5IGF0IHRoZSBleHBlbnNlIG9mIGV4dHJhIG92ZXJoZWFkIGluIHRoZSByZWFkZXJzLiBUaGlzCi0gKiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgZXZlbiB3aXRob3V0IExPV19NRU0gbW9kZSwgdGhlIG1lbW9yeQotICogY29uc3VtcHRpb24gaXMgc3RpbGwgbG93ZXIgdGhhbiBhIHBsYWluIEdMaXN0LgotICovCi0jdW5kZWYgTE9XX01FTQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QVF1ZXVlTWVtIEdzdEFRdWV1ZU1lbTsKLQotc3RydWN0IF9Hc3RBUXVldWVNZW0KLXsKLSAgZ2ludCBzaXplOwotICBncG9pbnRlciAqYXJyYXk7Ci0gIHZvbGF0aWxlIGdpbnQgaGVhZDsKLSAgdm9sYXRpbGUgZ2ludCB0YWlsX3dyaXRlOwotICB2b2xhdGlsZSBnaW50IHRhaWxfcmVhZDsKLSAgR3N0QVF1ZXVlTWVtICpuZXh0OwotICBHc3RBUXVldWVNZW0gKmZyZWU7Ci19OwotCi1zdGF0aWMgZ3VpbnQKLWNscDIgKGd1aW50IG4pCi17Ci0gIGd1aW50IHJlcyA9IDE7Ci0KLSAgd2hpbGUgKHJlcyA8IG4pCi0gICAgcmVzIDw8PSAxOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RBUXVldWVNZW0gKgotbmV3X3F1ZXVlX21lbSAoZ3VpbnQgc2l6ZSwgZ2ludCBwb3MpCi17Ci0gIEdzdEFRdWV1ZU1lbSAqbWVtOwotCi0gIG1lbSA9IGdfbmV3IChHc3RBUXVldWVNZW0sIDEpOwotCi0gIC8qIHdlIGtlZXAgdGhlIHNpemUgYXMgYSBtYXNrIGZvciBwZXJmb3JtYW5jZSAqLwotICBtZW0tPnNpemUgPSBjbHAyIChNQVggKHNpemUsIDE2KSkgLSAxOwotICBtZW0tPmFycmF5ID0gZ19uZXcwIChncG9pbnRlciwgbWVtLT5zaXplICsgMSk7Ci0gIG1lbS0+aGVhZCA9IHBvczsKLSAgbWVtLT50YWlsX3dyaXRlID0gcG9zOwotICBtZW0tPnRhaWxfcmVhZCA9IHBvczsKLSAgbWVtLT5uZXh0ID0gTlVMTDsKLSAgbWVtLT5mcmVlID0gTlVMTDsKLQotICByZXR1cm4gbWVtOwotfQotCi1zdGF0aWMgdm9pZAotZnJlZV9xdWV1ZV9tZW0gKEdzdEFRdWV1ZU1lbSAqIG1lbSkKLXsKLSAgZ19mcmVlIChtZW0tPmFycmF5KTsKLSAgZ19mcmVlIChtZW0pOwotfQotCi1zdHJ1Y3QgX0dzdEF0b21pY1F1ZXVlCi17Ci0gIHZvbGF0aWxlIGdpbnQgcmVmY291bnQ7Ci0jaWZkZWYgTE9XX01FTQotICBnaW50IG51bV9yZWFkZXJzOwotI2VuZGlmCi0gIEdzdEFRdWV1ZU1lbSAqaGVhZF9tZW07Ci0gIEdzdEFRdWV1ZU1lbSAqdGFpbF9tZW07Ci0gIEdzdEFRdWV1ZU1lbSAqZnJlZV9saXN0OwotfTsKLQotc3RhdGljIHZvaWQKLWFkZF90b19mcmVlX2xpc3QgKEdzdEF0b21pY1F1ZXVlICogcXVldWUsIEdzdEFRdWV1ZU1lbSAqIG1lbSkKLXsKLSAgZG8gewotICAgIG1lbS0+ZnJlZSA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgmcXVldWUtPmZyZWVfbGlzdCk7Ci0gIH0gd2hpbGUgKCFnX2F0b21pY19wb2ludGVyX2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmcXVldWUtPmZyZWVfbGlzdCwKLSAgICAgICAgICBtZW0tPmZyZWUsIG1lbSkpOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYXJfZnJlZV9saXN0IChHc3RBdG9taWNRdWV1ZSAqIHF1ZXVlKQotewotICBHc3RBUXVldWVNZW0gKmZyZWVfbGlzdDsKLQotICAvKiB0YWtlIHRoZSBmcmVlIGxpc3QgYW5kIHJlcGxhY2Ugd2l0aCBOVUxMICovCi0gIGRvIHsKLSAgICBmcmVlX2xpc3QgPSBnX2F0b21pY19wb2ludGVyX2dldCAoJnF1ZXVlLT5mcmVlX2xpc3QpOwotICAgIGlmIChmcmVlX2xpc3QgPT0gTlVMTCkKLSAgICAgIHJldHVybjsKLSAgfSB3aGlsZSAoIWdfYXRvbWljX3BvaW50ZXJfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZxdWV1ZS0+ZnJlZV9saXN0LCBmcmVlX2xpc3QsCi0gICAgICAgICAgTlVMTCkpOwotCi0gIHdoaWxlIChmcmVlX2xpc3QpIHsKLSAgICBHc3RBUXVldWVNZW0gKm5leHQgPSBmcmVlX2xpc3QtPmZyZWU7Ci0KLSAgICBmcmVlX3F1ZXVlX21lbSAoZnJlZV9saXN0KTsKLQotICAgIGZyZWVfbGlzdCA9IG5leHQ7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYXRvbWljX3F1ZXVlX25ldzoKLSAqIEBpbml0aWFsX3NpemU6IGluaXRpYWwgcXVldWUgc2l6ZQotICoKLSAqIENyZWF0ZSBhIG5ldyBhdG9taWMgcXVldWUgaW5zdGFuY2UuIEBpbml0aWFsX3NpemUgd2lsbCBiZSByb3VuZGVkIHVwIHRvIHRoZQotICogbmVhcmVzdCBwb3dlciBvZiAyIGFuZCB1c2VkIGFzIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIHF1ZXVlLgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNHc3RBdG9taWNRdWV1ZQotICovCi1Hc3RBdG9taWNRdWV1ZSAqCi1nc3RfYXRvbWljX3F1ZXVlX25ldyAoZ3VpbnQgaW5pdGlhbF9zaXplKQotewotICBHc3RBdG9taWNRdWV1ZSAqcXVldWU7Ci0KLSAgcXVldWUgPSBnX25ldyAoR3N0QXRvbWljUXVldWUsIDEpOwotCi0gIHF1ZXVlLT5yZWZjb3VudCA9IDE7Ci0jaWZkZWYgTE9XX01FTQotICBxdWV1ZS0+bnVtX3JlYWRlcnMgPSAwOwotI2VuZGlmCi0gIHF1ZXVlLT5oZWFkX21lbSA9IHF1ZXVlLT50YWlsX21lbSA9IG5ld19xdWV1ZV9tZW0gKGluaXRpYWxfc2l6ZSwgMCk7Ci0gIHF1ZXVlLT5mcmVlX2xpc3QgPSBOVUxMOwotCi0gIHJldHVybiBxdWV1ZTsKLX0KLQotLyoqCi0gKiBnc3RfYXRvbWljX3F1ZXVlX3JlZjoKLSAqIEBxdWV1ZTogYSAjR3N0QXRvbWljUXVldWUKLSAqCi0gKiBJbmNyZWFzZSB0aGUgcmVmY291bnQgb2YgQHF1ZXVlLgotICovCi12b2lkCi1nc3RfYXRvbWljX3F1ZXVlX3JlZiAoR3N0QXRvbWljUXVldWUgKiBxdWV1ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAocXVldWUgIT0gTlVMTCk7Ci0KLSAgZ19hdG9taWNfaW50X2luYyAoJnF1ZXVlLT5yZWZjb3VudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXRvbWljX3F1ZXVlX2ZyZWUgKEdzdEF0b21pY1F1ZXVlICogcXVldWUpCi17Ci0gIGZyZWVfcXVldWVfbWVtIChxdWV1ZS0+aGVhZF9tZW0pOwotICBpZiAocXVldWUtPmhlYWRfbWVtICE9IHF1ZXVlLT50YWlsX21lbSkKLSAgICBmcmVlX3F1ZXVlX21lbSAocXVldWUtPnRhaWxfbWVtKTsKLSAgY2xlYXJfZnJlZV9saXN0IChxdWV1ZSk7Ci0gIGdfZnJlZSAocXVldWUpOwotfQotCi0vKioKLSAqIGdzdF9hdG9taWNfcXVldWVfdW5yZWY6Ci0gKiBAcXVldWU6IGEgI0dzdEF0b21pY1F1ZXVlCi0gKgotICogVW5yZWYgQHF1ZXVlIGFuZCBmcmVlIHRoZSBtZW1vcnkgd2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLgotICovCi12b2lkCi1nc3RfYXRvbWljX3F1ZXVlX3VucmVmIChHc3RBdG9taWNRdWV1ZSAqIHF1ZXVlKQotewotICBnX3JldHVybl9pZl9mYWlsIChxdWV1ZSAhPSBOVUxMKTsKLQotICBpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCAoJnF1ZXVlLT5yZWZjb3VudCkpCi0gICAgZ3N0X2F0b21pY19xdWV1ZV9mcmVlIChxdWV1ZSk7Ci19Ci0KLS8qKgotICogZ3N0X2F0b21pY19xdWV1ZV9wZWVrOgotICogQHF1ZXVlOiBhICNHc3RBdG9taWNRdWV1ZQotICoKLSAqIFBlZWsgdGhlIGhlYWQgZWxlbWVudCBvZiB0aGUgcXVldWUgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBxdWV1ZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKG51bGxhYmxlKTogdGhlIGhlYWQgZWxlbWVudCBvZiBAcXVldWUgb3IKLSAqICVOVUxMIHdoZW4gdGhlIHF1ZXVlIGlzIGVtcHR5LgotICovCi1ncG9pbnRlcgotZ3N0X2F0b21pY19xdWV1ZV9wZWVrIChHc3RBdG9taWNRdWV1ZSAqIHF1ZXVlKQotewotICBHc3RBUXVldWVNZW0gKmhlYWRfbWVtOwotICBnaW50IGhlYWQsIHRhaWwsIHNpemU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHF1ZXVlICE9IE5VTEwsIE5VTEwpOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgR3N0QVF1ZXVlTWVtICpuZXh0OwotCi0gICAgaGVhZF9tZW0gPSBnX2F0b21pY19wb2ludGVyX2dldCAoJnF1ZXVlLT5oZWFkX21lbSk7Ci0KLSAgICBoZWFkID0gZ19hdG9taWNfaW50X2dldCAoJmhlYWRfbWVtLT5oZWFkKTsKLSAgICB0YWlsID0gZ19hdG9taWNfaW50X2dldCAoJmhlYWRfbWVtLT50YWlsX3JlYWQpOwotICAgIHNpemUgPSBoZWFkX21lbS0+c2l6ZTsKLQotICAgIC8qIHdoZW4gd2UgYXJlIG5vdCBlbXB0eSwgd2UgY2FuIGNvbnRpbnVlICovCi0gICAgaWYgKEdfTElLRUxZIChoZWFkICE9IHRhaWwpKQotICAgICAgYnJlYWs7Ci0KLSAgICAvKiBlbHNlIGFycmF5IGVtcHR5LCB0cnkgdG8gdGFrZSBuZXh0ICovCi0gICAgbmV4dCA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgmaGVhZF9tZW0tPm5leHQpOwotICAgIGlmIChuZXh0ID09IE5VTEwpCi0gICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIG5vdyB3ZSB0cnkgdG8gbW92ZSB0aGUgbmV4dCBhcnJheSBhcyB0aGUgaGVhZCBtZW1vcnkuIElmIHdlIGZhaWwgdG8gZG8gdGhhdCwKLSAgICAgKiBzb21lIG90aGVyIHJlYWRlciBtYW5hZ2VkIHRvIGRvIGl0IGZpcnN0IGFuZCB3ZSByZXRyeSAqLwotICAgIGlmICghZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoJnF1ZXVlLT5oZWFkX21lbSwgaGVhZF9tZW0sCi0gICAgICAgICAgICBuZXh0KSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogd2hlbiB3ZSBtYW5hZ2VkIHRvIHN3aW5nIHRoZSBoZWFkIHBvaW50ZXIgdGhlIG9sZCBoZWFkIGlzIG5vdwotICAgICAqIHVzZWxlc3MgYW5kIHdlIGFkZCBpdCB0byB0aGUgZnJlZWxpc3QuIFdlIGNhbid0IGZyZWUgdGhlIG1lbW9yeSB5ZXQKLSAgICAgKiBiZWNhdXNlIHdlIGZpcnN0IG5lZWQgdG8gbWFrZSBzdXJlIG5vIHJlYWRlciBpcyBhY2Nlc3NpbmcgaXQgYW55bW9yZS4gKi8KLSAgICBhZGRfdG9fZnJlZV9saXN0IChxdWV1ZSwgaGVhZF9tZW0pOwotICB9Ci0KLSAgcmV0dXJuIGhlYWRfbWVtLT5hcnJheVtoZWFkICYgc2l6ZV07Ci19Ci0KLS8qKgotICogZ3N0X2F0b21pY19xdWV1ZV9wb3A6Ci0gKiBAcXVldWU6IGEgI0dzdEF0b21pY1F1ZXVlCi0gKgotICogR2V0IHRoZSBoZWFkIGVsZW1lbnQgb2YgdGhlIHF1ZXVlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGhlYWQgZWxlbWVudCBvZiBAcXVldWUgb3IgJU5VTEwgd2hlbgotICogdGhlIHF1ZXVlIGlzIGVtcHR5LgotICovCi1ncG9pbnRlcgotZ3N0X2F0b21pY19xdWV1ZV9wb3AgKEdzdEF0b21pY1F1ZXVlICogcXVldWUpCi17Ci0gIGdwb2ludGVyIHJldDsKLSAgR3N0QVF1ZXVlTWVtICpoZWFkX21lbTsKLSAgZ2ludCBoZWFkLCB0YWlsLCBzaXplOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChxdWV1ZSAhPSBOVUxMLCBOVUxMKTsKLQotI2lmZGVmIExPV19NRU0KLSAgZ19hdG9taWNfaW50X2luYyAoJnF1ZXVlLT5udW1fcmVhZGVycyk7Ci0jZW5kaWYKLQotICBkbyB7Ci0gICAgd2hpbGUgKFRSVUUpIHsKLSAgICAgIEdzdEFRdWV1ZU1lbSAqbmV4dDsKLQotICAgICAgaGVhZF9tZW0gPSBnX2F0b21pY19wb2ludGVyX2dldCAoJnF1ZXVlLT5oZWFkX21lbSk7Ci0KLSAgICAgIGhlYWQgPSBnX2F0b21pY19pbnRfZ2V0ICgmaGVhZF9tZW0tPmhlYWQpOwotICAgICAgdGFpbCA9IGdfYXRvbWljX2ludF9nZXQgKCZoZWFkX21lbS0+dGFpbF9yZWFkKTsKLSAgICAgIHNpemUgPSBoZWFkX21lbS0+c2l6ZTsKLQotICAgICAgLyogd2hlbiB3ZSBhcmUgbm90IGVtcHR5LCB3ZSBjYW4gY29udGludWUgKi8KLSAgICAgIGlmIEdfTElLRUxZCi0gICAgICAgIChoZWFkICE9IHRhaWwpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgLyogZWxzZSBhcnJheSBlbXB0eSwgdHJ5IHRvIHRha2UgbmV4dCAqLwotICAgICAgbmV4dCA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgmaGVhZF9tZW0tPm5leHQpOwotICAgICAgaWYgKG5leHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgIC8qIG5vdyB3ZSB0cnkgdG8gbW92ZSB0aGUgbmV4dCBhcnJheSBhcyB0aGUgaGVhZCBtZW1vcnkuIElmIHdlIGZhaWwgdG8gZG8gdGhhdCwKLSAgICAgICAqIHNvbWUgb3RoZXIgcmVhZGVyIG1hbmFnZWQgdG8gZG8gaXQgZmlyc3QgYW5kIHdlIHJldHJ5ICovCi0gICAgICBpZiBHX1VOTElLRUxZCi0gICAgICAgICghZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoJnF1ZXVlLT5oZWFkX21lbSwgaGVhZF9tZW0sCi0gICAgICAgICAgICAgICAgbmV4dCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgLyogd2hlbiB3ZSBtYW5hZ2VkIHRvIHN3aW5nIHRoZSBoZWFkIHBvaW50ZXIgdGhlIG9sZCBoZWFkIGlzIG5vdwotICAgICAgICogdXNlbGVzcyBhbmQgd2UgYWRkIGl0IHRvIHRoZSBmcmVlbGlzdC4gV2UgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IHlldAotICAgICAgICogYmVjYXVzZSB3ZSBmaXJzdCBuZWVkIHRvIG1ha2Ugc3VyZSBubyByZWFkZXIgaXMgYWNjZXNzaW5nIGl0IGFueW1vcmUuICovCi0gICAgICBhZGRfdG9fZnJlZV9saXN0IChxdWV1ZSwgaGVhZF9tZW0pOwotICAgIH0KLQotICAgIHJldCA9IGhlYWRfbWVtLT5hcnJheVtoZWFkICYgc2l6ZV07Ci0gIH0gd2hpbGUgR19VTkxJS0VMWQotICAoIWdfYXRvbWljX2ludF9jb21wYXJlX2FuZF9leGNoYW5nZSAoJmhlYWRfbWVtLT5oZWFkLCBoZWFkLCBoZWFkICsgMSkpOwotCi0jaWZkZWYgTE9XX01FTQotICAvKiBkZWNyZW1lbnQgbnVtYmVyIG9mIHJlYWRlcnMsIHdoZW4gd2UgcmVhY2ggMCByZWFkZXJzIHdlIGNhbiBiZSBzdXJlIHRoYXQKLSAgICogbm9uZSBpcyBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBpbiB0aGUgZnJlZSBsaXN0IGFuZCB3ZSBjYW4gdHJ5IHRvIGNsZWFuIHVwICovCi0gIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmcXVldWUtPm51bV9yZWFkZXJzKSkKLSAgICBjbGVhcl9mcmVlX2xpc3QgKHF1ZXVlKTsKLSNlbmRpZgotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2F0b21pY19xdWV1ZV9wdXNoOgotICogQHF1ZXVlOiBhICNHc3RBdG9taWNRdWV1ZQotICogQGRhdGE6IHRoZSBkYXRhCi0gKgotICogQXBwZW5kIEBkYXRhIHRvIHRoZSB0YWlsIG9mIHRoZSBxdWV1ZS4KLSAqLwotdm9pZAotZ3N0X2F0b21pY19xdWV1ZV9wdXNoIChHc3RBdG9taWNRdWV1ZSAqIHF1ZXVlLCBncG9pbnRlciBkYXRhKQotewotICBHc3RBUXVldWVNZW0gKnRhaWxfbWVtOwotICBnaW50IGhlYWQsIHRhaWwsIHNpemU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAocXVldWUgIT0gTlVMTCk7Ci0KLSAgZG8gewotICAgIHdoaWxlIChUUlVFKSB7Ci0gICAgICBHc3RBUXVldWVNZW0gKm1lbTsKLQotICAgICAgdGFpbF9tZW0gPSBnX2F0b21pY19wb2ludGVyX2dldCAoJnF1ZXVlLT50YWlsX21lbSk7Ci0gICAgICBoZWFkID0gZ19hdG9taWNfaW50X2dldCAoJnRhaWxfbWVtLT5oZWFkKTsKLSAgICAgIHRhaWwgPSBnX2F0b21pY19pbnRfZ2V0ICgmdGFpbF9tZW0tPnRhaWxfd3JpdGUpOwotICAgICAgc2l6ZSA9IHRhaWxfbWVtLT5zaXplOwotCi0gICAgICAvKiB3ZSdyZSBub3QgZnVsbCwgY29udGludWUgKi8KLSAgICAgIGlmIEdfTElLRUxZCi0gICAgICAgICh0YWlsIC0gaGVhZCA8PSBzaXplKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgIC8qIGVsc2Ugd2UgbmVlZCB0byBncm93IHRoZSBhcnJheSwgd2Ugc3RvcmUgYSBtYXNrIHNvIHdlIGhhdmUgdG8gYWRkIDEgKi8KLSAgICAgIG1lbSA9IG5ld19xdWV1ZV9tZW0gKChzaXplIDw8IDEpICsgMSwgdGFpbCk7Ci0KLSAgICAgIC8qIHRyeSB0byBtYWtlIG91ciBuZXcgYXJyYXkgdmlzaWJsZSB0byBvdGhlciB3cml0ZXJzICovCi0gICAgICBpZiBHX1VOTElLRUxZCi0gICAgICAgICghZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoJnF1ZXVlLT50YWlsX21lbSwgdGFpbF9tZW0sCi0gICAgICAgICAgICAgICAgbWVtKSkgewotICAgICAgICAvKiB3ZSB0cmllZCB0byBzd2FwIHRoZSBuZXcgd3JpdGVyIGFycmF5IGJ1dCBzb21ldGhpbmcgY2hhbmdlZC4gVGhpcyBpcwotICAgICAgICAgKiBiZWNhdXNlIHNvbWUgb3RoZXIgd3JpdGVyIGJlYXQgdXMgdG8gaXQsIHdlIGZyZWUgb3VyIG1lbW9yeSBhbmQgdHJ5Ci0gICAgICAgICAqIGFnYWluICovCi0gICAgICAgIGZyZWVfcXVldWVfbWVtIChtZW0pOwotICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgLyogbWFrZSBzdXJlIHRoYXQgcmVhZGVycyBjYW4gZmluZCBvdXIgbmV3IGFycmF5IGFzIHdlbGwuIFRoZSBvbmUgd2hvCi0gICAgICAgKiBtYW5hZ2VzIHRvIHN3YXAgdGhlIHBvaW50ZXIgaXMgdGhlIG9ubHkgb25lIHdobyBjYW4gc2V0IHRoZSBuZXh0Ci0gICAgICAgKiBwb2ludGVyIHRvIHRoZSBuZXcgYXJyYXkgKi8KLSAgICAgIGdfYXRvbWljX3BvaW50ZXJfc2V0ICgmdGFpbF9tZW0tPm5leHQsIG1lbSk7Ci0gICAgfQotICB9IHdoaWxlIEdfVU5MSUtFTFkKLSAgKCFnX2F0b21pY19pbnRfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZ0YWlsX21lbS0+dGFpbF93cml0ZSwgdGFpbCwgdGFpbCArIDEpKTsKLQotICB0YWlsX21lbS0+YXJyYXlbdGFpbCAmIHNpemVdID0gZGF0YTsKLQotICAvKiBub3cgd2FpdCB1bnRpbCBhbGwgd3JpdGVycyBoYXZlIGNvbXBsZXRlZCB0aGVpciB3cml0ZSBiZWZvcmUgd2UgbW92ZSB0aGUKLSAgICogdGFpbF9yZWFkIHRvIHRoaXMgbmV3IGl0ZW0uIEl0IGlzIHBvc3NpYmxlIHRoYXQgb3RoZXIgd3JpdGVycyBhcmUgc3RpbGwKLSAgICogdXBkYXRpbmcgdGhlIHByZXZpb3VzIGFycmF5IHNsb3RzIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJldmVhbCB0aGVpciBjaGFuZ2VzCi0gICAqIGJlZm9yZSB0aGV5IGFyZSBkb25lLiBGSVhNRSwgaXQgd291bGQgYmUgbmljZSBpZiB3ZSBkaWRuJ3QgaGF2ZSB0byBidXN5Ci0gICAqIHdhaXQgaGVyZS4gKi8KLSAgd2hpbGUgR19VTkxJS0VMWQotICAgICghZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmdGFpbF9tZW0tPnRhaWxfcmVhZCwgdGFpbCwgdGFpbCArIDEpKTsKLX0KLQotLyoqCi0gKiBnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aDoKLSAqIEBxdWV1ZTogYSAjR3N0QXRvbWljUXVldWUKLSAqCi0gKiBHZXQgdGhlIGFtb3VudCBvZiBpdGVtcyBpbiB0aGUgcXVldWUuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuCi0gKi8KLWd1aW50Ci1nc3RfYXRvbWljX3F1ZXVlX2xlbmd0aCAoR3N0QXRvbWljUXVldWUgKiBxdWV1ZSkKLXsKLSAgR3N0QVF1ZXVlTWVtICpoZWFkX21lbSwgKnRhaWxfbWVtOwotICBnaW50IGhlYWQsIHRhaWw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHF1ZXVlICE9IE5VTEwsIDApOwotCi0jaWZkZWYgTE9XX01FTQotICBnX2F0b21pY19pbnRfaW5jICgmcXVldWUtPm51bV9yZWFkZXJzKTsKLSNlbmRpZgotCi0gIGhlYWRfbWVtID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKCZxdWV1ZS0+aGVhZF9tZW0pOwotICBoZWFkID0gZ19hdG9taWNfaW50X2dldCAoJmhlYWRfbWVtLT5oZWFkKTsKLQotICB0YWlsX21lbSA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgmcXVldWUtPnRhaWxfbWVtKTsKLSAgdGFpbCA9IGdfYXRvbWljX2ludF9nZXQgKCZ0YWlsX21lbS0+dGFpbF9yZWFkKTsKLQotI2lmZGVmIExPV19NRU0KLSAgaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZxdWV1ZS0+bnVtX3JlYWRlcnMpKQotICAgIGNsZWFyX2ZyZWVfbGlzdCAocXVldWUpOwotI2VuZGlmCi0KLSAgcmV0dXJuIHRhaWwgLSBoZWFkOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGF0b21pY3F1ZXVlLmggYi9nc3QvZ3N0YXRvbWljcXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2ZTZlYy4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0YXRvbWljcXVldWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLSAqICAgICAgICAgICAoQykgMjAxMSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIGdzdGF0b21pY3F1ZXVlLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotCi0jaWZuZGVmIF9fR1NUX0FUT01JQ19RVUVVRV9IX18KLSNkZWZpbmUgX19HU1RfQVRPTUlDX1FVRVVFX0hfXwotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVRPTUlDX1FVRVVFIChnc3RfYXRvbWljX3F1ZXVlX2dldF90eXBlKCkpCi0KLS8qKgotICogR3N0QXRvbWljUXVldWU6Ci0gKgotICogT3BhcXVlIGF0b21pYyBkYXRhIHF1ZXVlLgotICoKLSAqIFVzZSB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIHRvIGdldCB0aGUgc3RvcmVkIHZhbHVlcy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF0b21pY1F1ZXVlIEdzdEF0b21pY1F1ZXVlOwotCi0KLUdUeXBlICAgICAgICAgICAgICBnc3RfYXRvbWljX3F1ZXVlX2dldF90eXBlICAgICh2b2lkKTsKLQotR3N0QXRvbWljUXVldWUgKiAgIGdzdF9hdG9taWNfcXVldWVfbmV3ICAgICAgICAgKGd1aW50IGluaXRpYWxfc2l6ZSkgR19HTlVDX01BTExPQzsKLQotdm9pZCAgICAgICAgICAgICAgIGdzdF9hdG9taWNfcXVldWVfcmVmICAgICAgICAgKEdzdEF0b21pY1F1ZXVlICogcXVldWUpOwotdm9pZCAgICAgICAgICAgICAgIGdzdF9hdG9taWNfcXVldWVfdW5yZWYgICAgICAgKEdzdEF0b21pY1F1ZXVlICogcXVldWUpOwotCi12b2lkICAgICAgICAgICAgICAgZ3N0X2F0b21pY19xdWV1ZV9wdXNoICAgICAgICAoR3N0QXRvbWljUXVldWUqIHF1ZXVlLCBncG9pbnRlciBkYXRhKTsKLWdwb2ludGVyICAgICAgICAgICBnc3RfYXRvbWljX3F1ZXVlX3BvcCAgICAgICAgIChHc3RBdG9taWNRdWV1ZSogcXVldWUpOwotZ3BvaW50ZXIgICAgICAgICAgIGdzdF9hdG9taWNfcXVldWVfcGVlayAgICAgICAgKEdzdEF0b21pY1F1ZXVlKiBxdWV1ZSk7Ci0KLWd1aW50ICAgICAgICAgICAgICBnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aCAgICAgIChHc3RBdG9taWNRdWV1ZSAqIHF1ZXVlKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RBdG9taWNRdWV1ZSwgZ3N0X2F0b21pY19xdWV1ZV91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQVRPTUlDX1FVRVVFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGJpbi5jIGIvZ3N0L2dzdGJpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjE3ODg1Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RiaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDQ2MzAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA0IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogZ3N0YmluLmM6IEdzdEJpbiBjb250YWluZXIgb2JqZWN0IGFuZCBzdXBwb3J0IGNvZGUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RiaW4KLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQmFzZSBjbGFzcyBhbmQgZWxlbWVudCB0aGF0IGNhbiBjb250YWluIG90aGVyIGVsZW1lbnRzCi0gKgotICogI0dzdEJpbiBpcyBhbiBlbGVtZW50IHRoYXQgY2FuIGNvbnRhaW4gb3RoZXIgI0dzdEVsZW1lbnQsIGFsbG93aW5nIHRoZW0gdG8gYmUKLSAqIG1hbmFnZWQgYXMgYSBncm91cC4KLSAqIFBhZHMgZnJvbSB0aGUgY2hpbGQgZWxlbWVudHMgY2FuIGJlIGdob3N0ZWQgdG8gdGhlIGJpbiwgc2VlICNHc3RHaG9zdFBhZC4KLSAqIFRoaXMgbWFrZXMgdGhlIGJpbiBsb29rIGxpa2UgYW55IG90aGVyIGVsZW1lbnRzIGFuZCBlbmFibGVzIGNyZWF0aW9uIG9mCi0gKiBoaWdoZXItbGV2ZWwgYWJzdHJhY3Rpb24gZWxlbWVudHMuCi0gKgotICogQSBuZXcgI0dzdEJpbiBpcyBjcmVhdGVkIHdpdGggZ3N0X2Jpbl9uZXcoKS4gVXNlIGEgI0dzdFBpcGVsaW5lIGluc3RlYWQgaWYgeW91Ci0gKiB3YW50IHRvIGNyZWF0ZSBhIHRvcGxldmVsIGJpbiBiZWNhdXNlIGEgbm9ybWFsIGJpbiBkb2Vzbid0IGhhdmUgYSBidXMgb3IKLSAqIGhhbmRsZSBjbG9jayBkaXN0cmlidXRpb24gb2YgaXRzIG93bi4KLSAqCi0gKiBBZnRlciB0aGUgYmluIGhhcyBiZWVuIGNyZWF0ZWQgeW91IHdpbGwgdHlwaWNhbGx5IGFkZCBlbGVtZW50cyB0byBpdCB3aXRoCi0gKiBnc3RfYmluX2FkZCgpLiBZb3UgY2FuIHJlbW92ZSBlbGVtZW50cyB3aXRoIGdzdF9iaW5fcmVtb3ZlKCkuCi0gKgotICogQW4gZWxlbWVudCBjYW4gYmUgcmV0cmlldmVkIGZyb20gYSBiaW4gd2l0aCBnc3RfYmluX2dldF9ieV9uYW1lKCksIHVzaW5nIHRoZQotICogZWxlbWVudHMgbmFtZS4gZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwKCkgaXMgbWFpbmx5IHVzZWQgZm9yIGludGVybmFsCi0gKiBwdXJwb3NlcyBhbmQgd2lsbCBxdWVyeSB0aGUgcGFyZW50IGJpbnMgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgZm91bmQgaW4gdGhlCi0gKiBjdXJyZW50IGJpbi4KLSAqCi0gKiBBbiBpdGVyYXRvciBvZiBlbGVtZW50cyBpbiBhIGJpbiBjYW4gYmUgcmV0cmlldmVkIHdpdGgKLSAqIGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cygpLiBWYXJpb3VzIG90aGVyIGl0ZXJhdG9ycyBleGlzdCB0byByZXRyaWV2ZSB0aGUKLSAqIGVsZW1lbnRzIGluIGEgYmluLgotICoKLSAqIGdzdF9vYmplY3RfdW5yZWYoKSBpcyB1c2VkIHRvIGRyb3AgeW91ciByZWZlcmVuY2UgdG8gdGhlIGJpbi4KLSAqCi0gKiBUaGUgI0dzdEJpbjo6ZWxlbWVudC1hZGRlZCBzaWduYWwgaXMgZmlyZWQgd2hlbmV2ZXIgYSBuZXcgZWxlbWVudCBpcyBhZGRlZCB0bwotICogdGhlIGJpbi4gTGlrZXdpc2UgdGhlICNHc3RCaW46OmVsZW1lbnQtcmVtb3ZlZCBzaWduYWwgaXMgZmlyZWQgd2hlbmV2ZXIgYW4KLSAqIGVsZW1lbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBiaW4uCi0gKgotICogPHJlZnNlY3QyPjx0aXRsZT5Ob3RlczwvdGl0bGU+Ci0gKiA8cGFyYT4KLSAqIEEgI0dzdEJpbiBpbnRlcm5hbGx5IGludGVyY2VwdHMgZXZlcnkgI0dzdE1lc3NhZ2UgcG9zdGVkIGJ5IGl0cyBjaGlsZHJlbiBhbmQKLSAqIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBkZWZhdWx0IGJlaGF2aW91ciBmb3IgZWFjaCBvZiB0aGVtOgotICogPHZhcmlhYmxlbGlzdD4KLSAqICAgPHZhcmxpc3RlbnRyeT4KLSAqICAgICA8dGVybT5HU1RfTUVTU0FHRV9FT1M8L3Rlcm0+Ci0gKiAgICAgPGxpc3RpdGVtPjxwYXJhPlRoaXMgbWVzc2FnZSBpcyBvbmx5IHBvc3RlZCBieSBzaW5rcyBpbiB0aGUgUExBWUlORwotICogICAgIHN0YXRlLiBJZiBhbGwgc2lua3MgcG9zdGVkIHRoZSBFT1MgbWVzc2FnZSwgdGhpcyBiaW4gd2lsbCBwb3N0IGFuZCBFT1MKLSAqICAgICBtZXNzYWdlIHVwd2FyZHMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDwvdmFybGlzdGVudHJ5PgotICogICA8dmFybGlzdGVudHJ5PgotICogICAgIDx0ZXJtPkdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQ8L3Rlcm0+Ci0gKiAgICAgPGxpc3RpdGVtPjxwYXJhPmp1c3QgY29sbGVjdGVkIGFuZCBuZXZlciBmb3J3YXJkZWQgdXB3YXJkcy4KLSAqICAgICBUaGUgbWVzc2FnZXMgYXJlIHVzZWQgdG8gZGVjaWRlIHdoZW4gYWxsIGVsZW1lbnRzIGhhdmUgY29tcGxldGVkIHBsYXliYWNrCi0gKiAgICAgb2YgdGhlaXIgc2VnbWVudC48L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPC92YXJsaXN0ZW50cnk+Ci0gKiAgIDx2YXJsaXN0ZW50cnk+Ci0gKiAgICAgPHRlcm0+R1NUX01FU1NBR0VfU0VHTUVOVF9ET05FPC90ZXJtPgotICogICAgIDxsaXN0aXRlbT48cGFyYT4gSXMgcG9zdGVkIGJ5ICNHc3RCaW4gd2hlbiBhbGwgZWxlbWVudHMgdGhhdCBwb3N0ZWQKLSAqICAgICBhIFNFR01FTlRfU1RBUlQgaGF2ZSBwb3N0ZWQgYSBTRUdNRU5UX0RPTkUuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDwvdmFybGlzdGVudHJ5PgotICogICA8dmFybGlzdGVudHJ5PgotICogICAgIDx0ZXJtPkdTVF9NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQ8L3Rlcm0+Ci0gKiAgICAgPGxpc3RpdGVtPjxwYXJhPiBJcyBwb3N0ZWQgYnkgYW4gZWxlbWVudCB0aGF0IGRldGVjdGVkIGEgY2hhbmdlCi0gKiAgICAgaW4gdGhlIHN0cmVhbSBkdXJhdGlvbi4gVGhlIGRlZmF1bHQgYmluIGJlaGF2aW91ciBpcyB0byBjbGVhciBhbnkKLSAqICAgICBjYWNoZWQgZHVyYXRpb24gdmFsdWVzIHNvIHRoYXQgdGhlIG5leHQgZHVyYXRpb24gcXVlcnkgd2lsbCBwZXJmb3JtCi0gKiAgICAgYSBmdWxsIGR1cmF0aW9uIHJlY2FsY3VsYXRpb24uIFRoZSBkdXJhdGlvbiBjaGFuZ2UgaXMgcG9zdGVkIHRvIHRoZQotICogICAgIGFwcGxpY2F0aW9uIHNvIHRoYXQgaXQgY2FuIHJlZmV0Y2ggdGhlIG5ldyBkdXJhdGlvbiB3aXRoIGEgZHVyYXRpb24KLSAqICAgICBxdWVyeS4gTm90ZSB0aGF0IHRoZXNlIG1lc3NhZ2VzIGNhbiBiZSBwb3N0ZWQgYmVmb3JlIHRoZSBiaW4gaXMKLSAqICAgICBwcmVyb2xsZWQsIGluIHdoaWNoIGNhc2UgdGhlIGR1cmF0aW9uIHF1ZXJ5IG1pZ2h0IGZhaWwuCi0gKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDwvdmFybGlzdGVudHJ5PgotICogICA8dmFybGlzdGVudHJ5PgotICogICAgIDx0ZXJtPkdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q8L3Rlcm0+Ci0gKiAgICAgPGxpc3RpdGVtPjxwYXJhPiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGFuIGVsZW1lbnQgd2hlbiBpdAotICogICAgIGNhbiBubyBsb25nZXIgcHJvdmlkZSBhIGNsb2NrLiBUaGUgZGVmYXVsdCBiaW4gYmVoYXZpb3VyIGlzIHRvCi0gKiAgICAgY2hlY2sgaWYgdGhlIGxvc3QgY2xvY2sgd2FzIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIGJpbi4gSWYgc28gYW5kCi0gKiAgICAgdGhlIGJpbiBpcyBjdXJyZW50bHkgaW4gdGhlIFBMQVlJTkcgc3RhdGUsIHRoZSBtZXNzYWdlIGlzIGZvcndhcmRlZCB0bwotICogICAgIHRoZSBiaW4gcGFyZW50LgotICogICAgIFRoaXMgbWVzc2FnZSBpcyBhbHNvIGdlbmVyYXRlZCB3aGVuIGEgY2xvY2sgcHJvdmlkZXIgaXMgcmVtb3ZlZCBmcm9tCi0gKiAgICAgdGhlIGJpbi4gSWYgdGhpcyBtZXNzYWdlIGlzIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgaXQgc2hvdWxkCi0gKiAgICAgUEFVU0UgdGhlIHBpcGVsaW5lIGFuZCBzZXQgaXQgYmFjayB0byBQTEFZSU5HIHRvIGZvcmNlIGEgbmV3IGNsb2NrCi0gKiAgICAgZGlzdHJpYnV0aW9uLgotICogICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L3Zhcmxpc3RlbnRyeT4KLSAqICAgPHZhcmxpc3RlbnRyeT4KLSAqICAgICA8dGVybT5HU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFPC90ZXJtPgotICogICAgIDxsaXN0aXRlbT48cGFyYT4gVGhpcyBtZXNzYWdlIGlzIGdlbmVyYXRlZCB3aGVuIGFuIGVsZW1lbnQKLSAqICAgICBjYW4gcHJvdmlkZSBhIGNsb2NrLiBUaGlzIG1vc3RseSBoYXBwZW5zIHdoZW4gYSBuZXcgY2xvY2sKLSAqICAgICBwcm92aWRlciBpcyBhZGRlZCB0byB0aGUgYmluLiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGhlIGJpbiBpcyB0bwotICogICAgIG1hcmsgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjbG9jayBhcyBkaXJ0eSwgd2hpY2ggd2lsbCBwZXJmb3JtIGEgY2xvY2sKLSAqICAgICByZWNhbGN1bGF0aW9uIHRoZSBuZXh0IHRpbWUgdGhlIGJpbiBpcyBhc2tlZCB0byBwcm92aWRlIGEgY2xvY2suCi0gKiAgICAgVGhpcyBtZXNzYWdlIGlzIG5ldmVyIHNlbnQgdG90IHRoZSBhcHBsaWNhdGlvbiBidXQgaXMgZm9yd2FyZGVkIHRvCi0gKiAgICAgdGhlIHBhcmVudCBvZiB0aGUgYmluLgotICogICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L3Zhcmxpc3RlbnRyeT4KLSAqICAgPHZhcmxpc3RlbnRyeT4KLSAqICAgICA8dGVybT5PVEhFUlM8L3Rlcm0+Ci0gKiAgICAgPGxpc3RpdGVtPjxwYXJhPiBwb3N0ZWQgdXB3YXJkcy48L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPC92YXJsaXN0ZW50cnk+Ci0gKiA8L3ZhcmlhYmxlbGlzdD4KLSAqCi0gKgotICogQSAjR3N0QmluIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBkZWZhdWx0IGJlaGF2aW91ciBmb3IgYW5zd2VyaW5nIHRvIGEKLSAqICNHc3RRdWVyeToKLSAqIDx2YXJpYWJsZWxpc3Q+Ci0gKiAgIDx2YXJsaXN0ZW50cnk+Ci0gKiAgICAgPHRlcm0+R1NUX1FVRVJZX0RVUkFUSU9OPC90ZXJtPgotICogICAgIDxsaXN0aXRlbT48cGFyYT5JZiB0aGUgcXVlcnkgaGFzIGJlZW4gYXNrZWQgYmVmb3JlIHdpdGggdGhlIHNhbWUgZm9ybWF0Ci0gKiAgICAgYW5kIHRoZSBiaW4gaXMgYSB0b3BsZXZlbCBiaW4gKGllLiBoYXMgbm8gcGFyZW50KSwKLSAqICAgICB1c2UgdGhlIGNhY2hlZCBwcmV2aW91cyB2YWx1ZS4gSWYgbm8gcHJldmlvdXMgdmFsdWUgd2FzIGNhY2hlZCwgdGhlCi0gKiAgICAgcXVlcnkgaXMgc2VudCB0byBhbGwgc2luayBlbGVtZW50cyBpbiB0aGUgYmluIGFuZCB0aGUgTUFYSU1VTSBvZiBhbGwKLSAqICAgICB2YWx1ZXMgaXMgcmV0dXJuZWQuIElmIHRoZSBiaW4gaXMgYSB0b3BsZXZlbCBiaW4gdGhlIHZhbHVlIGlzIGNhY2hlZC4KLSAqICAgICBJZiBubyBzaW5rcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBiaW4sIHRoZSBxdWVyeSBmYWlscy4KLSAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPC92YXJsaXN0ZW50cnk+Ci0gKiAgIDx2YXJsaXN0ZW50cnk+Ci0gKiAgICAgPHRlcm0+R1NUX1FVRVJZX1BPU0lUSU9OPC90ZXJtPgotICogICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcXVlcnkgaXMgc2VudCB0byBhbGwgc2luayBlbGVtZW50cyBpbiB0aGUgYmluIGFuZCB0aGUKLSAqICAgICBNQVhJTVVNIG9mIGFsbCB2YWx1ZXMgaXMgcmV0dXJuZWQuIElmIG5vIHNpbmtzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJpbiwKLSAqICAgICB0aGUgcXVlcnkgZmFpbHMuCi0gKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDwvdmFybGlzdGVudHJ5PgotICogICA8dmFybGlzdGVudHJ5PgotICogICAgIDx0ZXJtPk9USEVSUzwvdGVybT4KLSAqICAgICA8bGlzdGl0ZW0+PHBhcmE+dGhlIHF1ZXJ5IGlzIGZvcndhcmRlZCB0byBhbGwgc2luayBlbGVtZW50cywgdGhlIHJlc3VsdAotICogICAgIG9mIHRoZSBmaXJzdCBzaW5rIHRoYXQgYW5zd2VycyB0aGUgcXVlcnkgc3VjY2Vzc2Z1bGx5IGlzIHJldHVybmVkLiBJZiBubwotICogICAgIHNpbmsgaXMgaW4gdGhlIGJpbiwgdGhlIHF1ZXJ5IGZhaWxzLjwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L3Zhcmxpc3RlbnRyeT4KLSAqIDwvdmFyaWFibGVsaXN0PgotICoKLSAqIEEgI0dzdEJpbiB3aWxsIGJ5IGRlZmF1bHQgZm9yd2FyZCBhbnkgZXZlbnQgc2VudCB0byBpdCB0byBhbGwgc2luayBlbGVtZW50cy4KLSAqIElmIGFsbCB0aGUgc2lua3MgcmV0dXJuICVUUlVFLCB0aGUgYmluIHdpbGwgYWxzbyByZXR1cm4gJVRSVUUsIGVsc2UgJUZBTFNFIGlzCi0gKiByZXR1cm5lZC4gSWYgbm8gc2lua3MgYXJlIGluIHRoZSBiaW4sIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgcmV0dXJuICVUUlVFLgotICoKLSAqIDwvcGFyYT4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlICJnc3RldmVudC5oIgotI2luY2x1ZGUgImdzdGJpbi5oIgotI2luY2x1ZGUgImdzdGluZm8uaCIKLSNpbmNsdWRlICJnc3RlcnJvci5oIgotCi0jaW5jbHVkZSAiZ3N0dXRpbHMuaCIKLSNpbmNsdWRlICJnc3RjaGlsZHByb3h5LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGJpbl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBiaW5fZGVidWcKLQotLyogYSBiaW4gaXMgdG9wbGV2ZWwgaWYgaXQgaGFzIG5vIHBhcmVudCBvciB3aGVuIGl0IGlzIGNvbmZpZ3VyZWQgdG8gYmVoYXZlIGxpa2UKLSAqIGEgdG9wbGV2ZWwgYmluICovCi0jZGVmaW5lIEJJTl9JU19UT1BMRVZFTChiaW4pICgoR1NUX09CSkVDVF9QQVJFTlQgKGJpbikgPT0gTlVMTCkgfHwgYmluLT5wcml2LT5hc3luY2hhbmRsaW5nKQotCi0jZGVmaW5lIEdTVF9CSU5fR0VUX1BSSVZBVEUob2JqKSAgXAotICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX0JJTiwgR3N0QmluUHJpdmF0ZSkpCi0KLXN0cnVjdCBfR3N0QmluUHJpdmF0ZQotewotICBnYm9vbGVhbiBhc3luY2hhbmRsaW5nOwotICAvKiBpZiB3ZSBnZXQgYW4gQVNZTkNfRE9ORSBtZXNzYWdlIGZyb20gb3Vyc2VsdmVzLCB0aGlzIG1lYW5zIHRoYXQgdGhlCi0gICAqIHN1YmNsYXNzIHdpbGwgc2ltdWxhdGUgQVNZTkMgYmVoYXZpb3VyIHdpdGhvdXQgaGF2aW5nIEFTWU5DIGNoaWxkcmVuLiBXaGVuCi0gICAqIHN1Y2ggYW4gQVNZTkNfRE9ORSBtZXNzYWdlIGlzIHBvc3RlZCB3aGlsZSB3ZSBhcmUgZG9pbmcgYSBzdGF0ZSBjaGFuZ2UsIHdlCi0gICAqIGhhdmUgdG8gcHJvY2VzcyB0aGUgbWVzc2FnZSBhZnRlciBmaW5pc2hpbmcgdGhlIHN0YXRlIGNoYW5nZSBldmVuIHdoZW4gbm8KLSAgICogY2hpbGQgcmV0dXJuZWQgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQy4gKi8KLSAgZ2Jvb2xlYW4gcGVuZGluZ19hc3luY19kb25lOwotCi0gIGd1aW50MzIgc3RydWN0dXJlX2Nvb2tpZTsKLQotI2lmIDAKLSAgLyogY2FjaGVkIGluZGV4ICovCi0gIEdzdEluZGV4ICppbmRleDsKLSNlbmRpZgotCi0gIC8qIGZvcndhcmQgbWVzc2FnZXMgZnJvbSBvdXIgY2hpbGRyZW4gKi8KLSAgZ2Jvb2xlYW4gbWVzc2FnZV9mb3J3YXJkOwotCi0gIGdib29sZWFuIHBvc3RlZF9lb3M7Ci0gIGdib29sZWFuIHBvc3RlZF9wbGF5aW5nOwotICBHc3RFbGVtZW50RmxhZ3Mgc3VwcHJlc3NlZF9mbGFnczsKLX07Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50MzIgY29va2llOwotICBHc3RTdGF0ZSBwZW5kaW5nOwotfSBCaW5Db250aW51ZURhdGE7Ci0KLXN0YXRpYyB2b2lkIGdzdF9iaW5fZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9iaW5fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2Jpbl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmluX3Bvc3RfbWVzc2FnZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdE1lc3NhZ2UgKiBtc2cpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9iaW5fZ2V0X3N0YXRlX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlICogc3RhdGUsIEdzdFN0YXRlICogcGVuZGluZywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpOwotc3RhdGljIHZvaWQgYmluX2hhbmRsZV9hc3luY19kb25lIChHc3RCaW4gKiBiaW4sIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCwKLSAgICBnYm9vbGVhbiBmbGFnX3BlbmRpbmcsIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUpOwotc3RhdGljIHZvaWQgYmluX2hhbmRsZV9hc3luY19zdGFydCAoR3N0QmluICogYmluKTsKLXN0YXRpYyB2b2lkIGJpbl9wdXNoX3N0YXRlX2NvbnRpbnVlIChHc3RCaW4gKiBiaW4sIEJpbkNvbnRpbnVlRGF0YSAqIGRhdGEpOwotc3RhdGljIHZvaWQgYmluX2RvX2VvcyAoR3N0QmluICogYmluKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iaW5fYWRkX2Z1bmMgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9iaW5fcmVtb3ZlX2Z1bmMgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotc3RhdGljIHZvaWQgZ3N0X2Jpbl9kZWVwX2VsZW1lbnRfYWRkZWRfZnVuYyAoR3N0QmluICogYmluLCBHc3RCaW4gKiBzdWJfYmluLAotICAgIEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLXN0YXRpYyB2b2lkIGdzdF9iaW5fZGVlcF9lbGVtZW50X3JlbW92ZWRfZnVuYyAoR3N0QmluICogYmluLCBHc3RCaW4gKiBzdWJfYmluLAotICAgIEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLXN0YXRpYyB2b2lkIGdzdF9iaW5fdXBkYXRlX2NvbnRleHQgKEdzdEJpbiAqIGJpbiwgR3N0Q29udGV4dCAqIGNvbnRleHQpOwotc3RhdGljIHZvaWQgZ3N0X2Jpbl91cGRhdGVfY29udGV4dF91bmxvY2tlZCAoR3N0QmluICogYmluLAotICAgIEdzdENvbnRleHQgKiBjb250ZXh0KTsKLQotI2lmIDAKLXN0YXRpYyB2b2lkIGdzdF9iaW5fc2V0X2luZGV4X2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RJbmRleCAqIGluZGV4KTsKLXN0YXRpYyBHc3RJbmRleCAqZ3N0X2Jpbl9nZXRfaW5kZXhfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotI2VuZGlmCi0KLXN0YXRpYyBHc3RDbG9jayAqZ3N0X2Jpbl9wcm92aWRlX2Nsb2NrX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmluX3NldF9jbG9ja19mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0Q2xvY2sgKiBjbG9jayk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyAoR3N0QmluICogYmluLCBHc3RNZXNzYWdlICogbWVzc2FnZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jpbl9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0QnVzU3luY1JlcGx5IGJpbl9idXNfaGFuZGxlciAoR3N0QnVzICogYnVzLAotICAgIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RCaW4gKiBiaW4pOwotc3RhdGljIGdib29sZWFuIGdzdF9iaW5fcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyB2b2lkIGdzdF9iaW5fc2V0X2NvbnRleHQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDb250ZXh0ICogY29udGV4dCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmluX2RvX2xhdGVuY3lfZnVuYyAoR3N0QmluICogYmluKTsKLQotc3RhdGljIHZvaWQgYmluX3JlbW92ZV9tZXNzYWdlcyAoR3N0QmluICogYmluLCBHc3RPYmplY3QgKiBzcmMsCi0gICAgR3N0TWVzc2FnZVR5cGUgdHlwZXMpOwotc3RhdGljIHZvaWQgZ3N0X2Jpbl9jb250aW51ZV9mdW5jIChHc3RCaW4gKiBiaW4sIEJpbkNvbnRpbnVlRGF0YSAqIGRhdGEpOwotc3RhdGljIGdpbnQgYmluX2VsZW1lbnRfaXNfc2luayAoR3N0RWxlbWVudCAqIGNoaWxkLCBHc3RCaW4gKiBiaW4pOwotc3RhdGljIGdpbnQgYmluX2VsZW1lbnRfaXNfc3JjIChHc3RFbGVtZW50ICogY2hpbGQsIEdzdEJpbiAqIGJpbik7Ci0KLXN0YXRpYyBHc3RJdGVyYXRvciAqZ3N0X2Jpbl9zb3J0X2l0ZXJhdG9yX25ldyAoR3N0QmluICogYmluKTsKLQotLyogQmluIHNpZ25hbHMgYW5kIHByb3BlcnRpZXMgKi8KLWVudW0KLXsKLSAgRUxFTUVOVF9BRERFRCwKLSAgRUxFTUVOVF9SRU1PVkVELAotICBET19MQVRFTkNZLAotICBERUVQX0VMRU1FTlRfQURERUQsCi0gIERFRVBfRUxFTUVOVF9SRU1PVkVELAotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX0FTWU5DX0hBTkRMSU5HCUZBTFNFCi0jZGVmaW5lIERFRkFVTFRfTUVTU0FHRV9GT1JXQVJECUZBTFNFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0FTWU5DX0hBTkRMSU5HLAotICBQUk9QX01FU1NBR0VfRk9SV0FSRCwKLSAgUFJPUF9MQVNUCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfYmluX2NoaWxkX3Byb3h5X2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpOwotCi1zdGF0aWMgZ3VpbnQgZ3N0X2Jpbl9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi0jZGVmaW5lIF9kb19pbml0IFwKLXsgXAotICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gaWZhY2VfaW5mbyA9IHsgXAotICAgIGdzdF9iaW5fY2hpbGRfcHJveHlfaW5pdCwgXAotICAgIE5VTEwsIFwKLSAgICBOVUxMfTsgXAotICBcCi0gIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAoZ19kZWZpbmVfdHlwZV9pZCwgR1NUX1RZUEVfQ0hJTERfUFJPWFksICZpZmFjZV9pbmZvKTsgXAotICBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChiaW5fZGVidWcsICJiaW4iLCBHU1RfREVCVUdfQk9MRCwgXAotICAgICAgImRlYnVnZ2luZyBpbmZvIGZvciB0aGUgJ2JpbicgY29udGFpbmVyIGVsZW1lbnQiKTsgXAotICBcCi19Ci0KLSNkZWZpbmUgZ3N0X2Jpbl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0QmluLCBnc3RfYmluLCBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7Ci0KLXN0YXRpYyBHT2JqZWN0ICoKLWdzdF9iaW5fY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4IChHc3RDaGlsZFByb3h5ICogY2hpbGRfcHJveHksCi0gICAgZ3VpbnQgaW5kZXgpCi17Ci0gIEdzdE9iamVjdCAqcmVzOwotICBHc3RCaW4gKmJpbjsKLQotICBiaW4gPSBHU1RfQklOX0NBU1QgKGNoaWxkX3Byb3h5KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gIGlmICgocmVzID0gZ19saXN0X250aF9kYXRhIChiaW4tPmNoaWxkcmVuLCBpbmRleCkpKQotICAgIGdzdF9vYmplY3RfcmVmIChyZXMpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICByZXR1cm4gKEdPYmplY3QgKikgcmVzOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9iaW5fY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50IChHc3RDaGlsZFByb3h5ICogY2hpbGRfcHJveHkpCi17Ci0gIGd1aW50IG51bTsKLSAgR3N0QmluICpiaW47Ci0KLSAgYmluID0gR1NUX0JJTl9DQVNUIChjaGlsZF9wcm94eSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICBudW0gPSBiaW4tPm51bWNoaWxkcmVuOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICByZXR1cm4gbnVtOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jpbl9jaGlsZF9wcm94eV9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RDaGlsZFByb3h5SW50ZXJmYWNlICppZmFjZSA9IGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF9jaGlsZHJlbl9jb3VudCA9IGdzdF9iaW5fY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50OwotICBpZmFjZS0+Z2V0X2NoaWxkX2J5X2luZGV4ID0gZ3N0X2Jpbl9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXg7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF9ib29sZWFuX2FjY3VtdWxhdG9yIChHU2lnbmFsSW52b2NhdGlvbkhpbnQgKiBpaGludCwKLSAgICBHVmFsdWUgKiByZXR1cm5fYWNjdSwgY29uc3QgR1ZhbHVlICogaGFuZGxlcl9yZXR1cm4sIGdwb2ludGVyIGR1bW15KQotewotICBnYm9vbGVhbiBteWJvb2xlYW47Ci0KLSAgbXlib29sZWFuID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAoaGFuZGxlcl9yZXR1cm4pOwotICBpZiAoIShpaGludC0+cnVuX3R5cGUgJiBHX1NJR05BTF9SVU5fQ0xFQU5VUCkpCi0gICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAocmV0dXJuX2FjY3UsIG15Ym9vbGVhbik7Ci0KLSAgR1NUX0RFQlVHICgiaW52b2NhdGlvbiAlZCwgJWQiLCBpaGludC0+cnVuX3R5cGUsIG15Ym9vbGVhbik7Ci0KLSAgLyogc3RvcCBlbWlzc2lvbiAqLwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmluX2NsYXNzX2luaXQgKEdzdEJpbkNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdEJpblByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYmluX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2Jpbl9nZXRfcHJvcGVydHk7Ci0KLSAgLyoqCi0gICAqIEdzdEJpbjphc3luYy1oYW5kbGluZzoKLSAgICoKLSAgICogSWYgc2V0IHRvICVUUlVFLCB0aGUgYmluIHdpbGwgaGFuZGxlIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLgotICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgdGhlIGJpbiBzdWJjbGFzcyBpcyBtb2RpZnlpbmcgdGhlIHN0YXRlCi0gICAqIG9mIGl0cyBjaGlsZHJlbiBvbiBpdHMgb3duLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BU1lOQ19IQU5ETElORywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXN5bmMtaGFuZGxpbmciLCAiQXN5bmMgSGFuZGxpbmciLAotICAgICAgICAgICJUaGUgYmluIHdpbGwgaGFuZGxlIEFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzIiwKLSAgICAgICAgICBERUZBVUxUX0FTWU5DX0hBTkRMSU5HLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0QmluOjplbGVtZW50LWFkZGVkOgotICAgKiBAYmluOiB0aGUgI0dzdEJpbgotICAgKiBAZWxlbWVudDogdGhlICNHc3RFbGVtZW50IHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBiaW4KLSAgICoKLSAgICogV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSBlbGVtZW50IHdhcyBhZGRlZCB0byB0aGUgYmluLgotICAgKi8KLSAgZ3N0X2Jpbl9zaWduYWxzW0VMRU1FTlRfQURERURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImVsZW1lbnQtYWRkZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0ZJUlNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdEJpbkNsYXNzLCBlbGVtZW50X2FkZGVkKSwgTlVMTCwKLSAgICAgIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0gIC8qKgotICAgKiBHc3RCaW46OmVsZW1lbnQtcmVtb3ZlZDoKLSAgICogQGJpbjogdGhlICNHc3RCaW4KLSAgICogQGVsZW1lbnQ6IHRoZSAjR3N0RWxlbWVudCB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIGJpbgotICAgKgotICAgKiBXaWxsIGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgYmluLgotICAgKi8KLSAgZ3N0X2Jpbl9zaWduYWxzW0VMRU1FTlRfUkVNT1ZFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiZWxlbWVudC1yZW1vdmVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9GSVJTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RCaW5DbGFzcywgZWxlbWVudF9yZW1vdmVkKSwgTlVMTCwKLSAgICAgIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0gIC8qKgotICAgKiBHc3RCaW46OmRlZXAtZWxlbWVudC1hZGRlZDoKLSAgICogQGJpbjogdGhlICNHc3RCaW4KLSAgICogQHN1Yl9iaW46IHRoZSAjR3N0QmluIHRoZSBlbGVtZW50IHdhcyBhZGRlZCB0bwotICAgKiBAZWxlbWVudDogdGhlICNHc3RFbGVtZW50IHRoYXQgd2FzIGFkZGVkIHRvIEBzdWJfYmluCi0gICAqCi0gICAqIFdpbGwgYmUgZW1pdHRlZCBhZnRlciB0aGUgZWxlbWVudCB3YXMgYWRkZWQgdG8gc3ViX2Jpbi4KLSAgICoKLSAgICogU2luY2U6IDEuMTAKLSAgICovCi0gIGdzdF9iaW5fc2lnbmFsc1tERUVQX0VMRU1FTlRfQURERURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImRlZXAtZWxlbWVudC1hZGRlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fRklSU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0QmluQ2xhc3MsIGRlZXBfZWxlbWVudF9hZGRlZCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsIEdTVF9UWVBFX0JJTiwKLSAgICAgIEdTVF9UWVBFX0VMRU1FTlQpOwotICAvKioKLSAgICogR3N0QmluOjpkZWVwLWVsZW1lbnQtcmVtb3ZlZDoKLSAgICogQGJpbjogdGhlICNHc3RCaW4KLSAgICogQHN1Yl9iaW46IHRoZSAjR3N0QmluIHRoZSBlbGVtZW50IHdhcyByZW1vdmVkIGZyb20KLSAgICogQGVsZW1lbnQ6IHRoZSAjR3N0RWxlbWVudCB0aGF0IHdhcyByZW1vdmVkIGZyb20gQHN1Yl9iaW4KLSAgICoKLSAgICogV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSBlbGVtZW50IHdhcyByZW1vdmVkIGZyb20gc3ViX2Jpbi4KLSAgICoKLSAgICogU2luY2U6IDEuMTAKLSAgICovCi0gIGdzdF9iaW5fc2lnbmFsc1tERUVQX0VMRU1FTlRfUkVNT1ZFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiZGVlcC1lbGVtZW50LXJlbW92ZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0ZJUlNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdEJpbkNsYXNzLCBkZWVwX2VsZW1lbnRfcmVtb3ZlZCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsIEdTVF9UWVBFX0JJTiwKLSAgICAgIEdTVF9UWVBFX0VMRU1FTlQpOwotICAvKioKLSAgICogR3N0QmluOjpkby1sYXRlbmN5OgotICAgKiBAYmluOiB0aGUgI0dzdEJpbgotICAgKgotICAgKiBXaWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgYmluIG5lZWRzIHRvIHBlcmZvcm0gbGF0ZW5jeSBjYWxjdWxhdGlvbnMuIFRoaXMKLSAgICogc2lnbmFsIGlzIG9ubHkgZW1pdHRlZCBmb3IgdG9wbGV2ZWwgYmlucyBvciB3aGVuIGFzeW5jLWhhbmRsaW5nIGlzCi0gICAqIGVuYWJsZWQuCi0gICAqCi0gICAqIE9ubHkgb25lIHNpZ25hbCBoYW5kbGVyIGlzIGludm9rZWQuIElmIG5vIHNpZ25hbHMgYXJlIGNvbm5lY3RlZCwgdGhlCi0gICAqIGRlZmF1bHQgaGFuZGxlciBpcyBpbnZva2VkLCB3aGljaCB3aWxsIHF1ZXJ5IGFuZCBkaXN0cmlidXRlIHRoZSBsb3dlc3QKLSAgICogcG9zc2libGUgbGF0ZW5jeSB0byBhbGwgc2lua3MuCi0gICAqCi0gICAqIENvbm5lY3QgdG8gdGhpcyBzaWduYWwgaWYgdGhlIGRlZmF1bHQgbGF0ZW5jeSBjYWxjdWxhdGlvbnMgYXJlIG5vdAotICAgKiBzdWZmaWNpZW50LCBsaWtlIHdoZW4geW91IG5lZWQgZGlmZmVyZW50IGxhdGVuY2llcyBmb3IgZGlmZmVyZW50IHNpbmtzIGluCi0gICAqIHRoZSBzYW1lIHBpcGVsaW5lLgotICAgKi8KLSAgZ3N0X2Jpbl9zaWduYWxzW0RPX0xBVEVOQ1ldID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImRvLWxhdGVuY3kiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0QmluQ2xhc3MsIGRvX2xhdGVuY3kpLAotICAgICAgX2dzdF9ib29sZWFuX2FjY3VtdWxhdG9yLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywKLSAgICAgIEdfVFlQRV9CT09MRUFOLCAwLCBHX1RZUEVfTk9ORSk7Ci0KLSAgLyoqCi0gICAqIEdzdEJpbjptZXNzYWdlLWZvcndhcmQ6Ci0gICAqCi0gICAqIEZvcndhcmQgYWxsIGNoaWxkcmVuIG1lc3NhZ2VzLCBldmVuIHRob3NlIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgZmlsdGVyZWQgYnkKLSAgICogdGhlIGJpbi4gVGhpcyBjYW4gYmUgaW50ZXJlc3Rpbmcgd2hlbiBvbmUgd2FudHMgdG8gYmUgbm90aWZpZWQgb2YgdGhlIEVPUwotICAgKiBzdGF0ZSBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBmb3IgZXhhbXBsZS4KLSAgICoKLSAgICogVGhlIG1lc3NhZ2VzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gRUxFTUVOVCBtZXNzYWdlIHdpdGggdGhlIGJpbiBhcyB0aGUKLSAgICogc291cmNlLiBUaGUgc3RydWN0dXJlIG9mIHRoZSBtZXNzYWdlIGlzIG5hbWVkICdHc3RCaW5Gb3J3YXJkZWQnIGFuZCBjb250YWlucwotICAgKiBhIGZpZWxkIG5hbWVkICdtZXNzYWdlJyBvZiB0eXBlIEdTVF9UWVBFX01FU1NBR0UgdGhhdCBjb250YWlucyB0aGUgb3JpZ2luYWwKLSAgICogZm9yd2FyZGVkIG1lc3NhZ2UuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01FU1NBR0VfRk9SV0FSRCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibWVzc2FnZS1mb3J3YXJkIiwgIk1lc3NhZ2UgRm9yd2FyZCIsCi0gICAgICAgICAgIkZvcndhcmRzIGFsbCBjaGlsZHJlbiBtZXNzYWdlcyIsCi0gICAgICAgICAgREVGQVVMVF9NRVNTQUdFX0ZPUldBUkQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfYmluX2Rpc3Bvc2U7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkdlbmVyaWMgYmluIiwKLSAgICAgICJHZW5lcmljL0JpbiIsCi0gICAgICAiU2ltcGxlIGNvbnRhaW5lciBvYmplY3QiLAotICAgICAgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+LCIKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9jaGFuZ2Vfc3RhdGVfZnVuYyk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnBvc3RfbWVzc2FnZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmluX3Bvc3RfbWVzc2FnZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmdldF9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmluX2dldF9zdGF0ZV9mdW5jKTsKLSNpZiAwCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmdldF9pbmRleCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmluX2dldF9pbmRleF9mdW5jKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2V0X2luZGV4ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iaW5fc2V0X2luZGV4X2Z1bmMpOwotI2VuZGlmCi0gIGdzdGVsZW1lbnRfY2xhc3MtPnByb3ZpZGVfY2xvY2sgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2V0X2Nsb2NrID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iaW5fc2V0X2Nsb2NrX2Z1bmMpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPnNlbmRfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9zZW5kX2V2ZW50KTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9xdWVyeSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnNldF9jb250ZXh0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iaW5fc2V0X2NvbnRleHQpOwotCi0gIGtsYXNzLT5hZGRfZWxlbWVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmluX2FkZF9mdW5jKTsKLSAga2xhc3MtPnJlbW92ZV9lbGVtZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iaW5fcmVtb3ZlX2Z1bmMpOwotICBrbGFzcy0+aGFuZGxlX21lc3NhZ2UgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jpbl9oYW5kbGVfbWVzc2FnZV9mdW5jKTsKLQotICBrbGFzcy0+ZGVlcF9lbGVtZW50X2FkZGVkID0gZ3N0X2Jpbl9kZWVwX2VsZW1lbnRfYWRkZWRfZnVuYzsKLSAga2xhc3MtPmRlZXBfZWxlbWVudF9yZW1vdmVkID0gZ3N0X2Jpbl9kZWVwX2VsZW1lbnRfcmVtb3ZlZF9mdW5jOwotCi0gIGtsYXNzLT5kb19sYXRlbmN5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iaW5fZG9fbGF0ZW5jeV9mdW5jKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iaW5faW5pdCAoR3N0QmluICogYmluKQotewotICBHc3RCdXMgKmJ1czsKLQotICBiaW4tPm51bWNoaWxkcmVuID0gMDsKLSAgYmluLT5jaGlsZHJlbiA9IE5VTEw7Ci0gIGJpbi0+Y2hpbGRyZW5fY29va2llID0gMDsKLSAgYmluLT5tZXNzYWdlcyA9IE5VTEw7Ci0gIGJpbi0+cHJvdmlkZWRfY2xvY2sgPSBOVUxMOwotICBiaW4tPmNsb2NrX2RpcnR5ID0gRkFMU0U7Ci0KLSAgLyogU2V0IHVwIGEgYnVzIGZvciBsaXN0ZW5pbmcgdG8gY2hpbGQgZWxlbWVudHMgKi8KLSAgYnVzID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9CVVMsICJlbmFibGUtYXN5bmMiLCBGQUxTRSwgTlVMTCk7Ci0gIGJpbi0+Y2hpbGRfYnVzID0gYnVzOwotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJ1c2luZyBidXMgJSIgR1NUX1BUUl9GT1JNQVQgIiB0byBsaXN0ZW4gdG8gY2hpbGRyZW4iLAotICAgICAgYnVzKTsKLSAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyIChidXMsIChHc3RCdXNTeW5jSGFuZGxlcikgYmluX2J1c19oYW5kbGVyLCBiaW4sCi0gICAgICBOVUxMKTsKLQotICBiaW4tPnByaXYgPSBHU1RfQklOX0dFVF9QUklWQVRFIChiaW4pOwotICBiaW4tPnByaXYtPmFzeW5jaGFuZGxpbmcgPSBERUZBVUxUX0FTWU5DX0hBTkRMSU5HOwotICBiaW4tPnByaXYtPnN0cnVjdHVyZV9jb29raWUgPSAwOwotICBiaW4tPnByaXYtPm1lc3NhZ2VfZm9yd2FyZCA9IERFRkFVTFRfTUVTU0FHRV9GT1JXQVJEOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jpbl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RCaW4gKmJpbiA9IEdTVF9CSU5fQ0FTVCAob2JqZWN0KTsKLSAgR3N0QnVzICoqY2hpbGRfYnVzX3AgPSAmYmluLT5jaGlsZF9idXM7Ci0gIEdzdENsb2NrICoqcHJvdmlkZWRfY2xvY2tfcCA9ICZiaW4tPnByb3ZpZGVkX2Nsb2NrOwotICBHc3RFbGVtZW50ICoqY2xvY2tfcHJvdmlkZXJfcCA9ICZiaW4tPmNsb2NrX3Byb3ZpZGVyOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBvYmplY3QsICIlcCBkaXNwb3NlIiwgb2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgY2hpbGRfYnVzX3AsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIHByb3ZpZGVkX2Nsb2NrX3AsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGNsb2NrX3Byb3ZpZGVyX3AsIE5VTEwpOwotICBiaW5fcmVtb3ZlX21lc3NhZ2VzIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX0FOWSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotCi0gIHdoaWxlIChiaW4tPmNoaWxkcmVuKSB7Ci0gICAgZ3N0X2Jpbl9yZW1vdmUgKGJpbiwgR1NUX0VMRU1FTlRfQ0FTVCAoYmluLT5jaGlsZHJlbi0+ZGF0YSkpOwotICB9Ci0gIGlmIChHX1VOTElLRUxZIChiaW4tPmNoaWxkcmVuICE9IE5VTEwpKSB7Ci0gICAgZ19jcml0aWNhbCAoImNvdWxkIG5vdCByZW1vdmUgZWxlbWVudHMgZnJvbSBiaW4gJyVzJyIsCi0gICAgICAgIEdTVF9TVFJfTlVMTCAoR1NUX09CSkVDVF9OQU1FIChvYmplY3QpKSk7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfYmluX25ldzoKLSAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSBuZXcgYmluCi0gKgotICogQ3JlYXRlcyBhIG5ldyBiaW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZmxvYXRpbmcpOiBhIG5ldyAjR3N0QmluCi0gKi8KLUdzdEVsZW1lbnQgKgotZ3N0X2Jpbl9uZXcgKGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIG5hbWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jpbl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QmluICpnc3RiaW47Ci0KLSAgZ3N0YmluID0gR1NUX0JJTl9DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9BU1lOQ19IQU5ETElORzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZ3N0YmluKTsKLSAgICAgIGdzdGJpbi0+cHJpdi0+YXN5bmNoYW5kbGluZyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChnc3RiaW4pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01FU1NBR0VfRk9SV0FSRDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZ3N0YmluKTsKLSAgICAgIGdzdGJpbi0+cHJpdi0+bWVzc2FnZV9mb3J3YXJkID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGdzdGJpbik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmluX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RCaW4gKmdzdGJpbjsKLQotICBnc3RiaW4gPSBHU1RfQklOX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0FTWU5DX0hBTkRMSU5HOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChnc3RiaW4pOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdzdGJpbi0+cHJpdi0+YXN5bmNoYW5kbGluZyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZ3N0YmluKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NRVNTQUdFX0ZPUldBUkQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGdzdGJpbik7Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0YmluLT5wcml2LT5tZXNzYWdlX2ZvcndhcmQpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGdzdGJpbik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLSNpZiAwCi0vKiByZXR1cm4gdGhlIGNhY2hlZCBpbmRleCAqLwotc3RhdGljIEdzdEluZGV4ICoKLWdzdF9iaW5fZ2V0X2luZGV4X2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RCaW4gKmJpbjsKLSAgR3N0SW5kZXggKnJlc3VsdDsKLQotICBiaW4gPSBHU1RfQklOX0NBU1QgKGVsZW1lbnQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgaWYgKChyZXN1bHQgPSBiaW4tPnByaXYtPmluZGV4KSkKLSAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogc2V0IHRoZSBpbmRleCBvbiBhbGwgZWxlbWVudHMgaW4gdGhpcyBiaW4KLSAqCi0gKiBNVCBzYWZlCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYmluX3NldF9pbmRleF9mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgR3N0QmluICpiaW47Ci0gIGdib29sZWFuIGRvbmU7Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgR3N0SW5kZXggKm9sZDsKLSAgR1ZhbHVlIGRhdGEgPSB7IDAsIH07Ci0KLSAgYmluID0gR1NUX0JJTl9DQVNUIChlbGVtZW50KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gIG9sZCA9IGJpbi0+cHJpdi0+aW5kZXg7Ci0gIGlmIChHX1VOTElLRUxZIChvbGQgPT0gaW5kZXgpKQotICAgIGdvdG8gd2FzX3NldDsKLSAgaWYgKGluZGV4KQotICAgIGdzdF9vYmplY3RfcmVmIChpbmRleCk7Ci0gIGJpbi0+cHJpdi0+aW5kZXggPSBpbmRleDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgaWYgKG9sZCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGQpOwotCi0gIGl0ID0gZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzIChiaW4pOwotCi0gIC8qIHNldCB0aGUgaW5kZXggb24gYWxsIGVsZW1lbnRzIGluIHRoZSBiaW4gKi8KLSAgZG9uZSA9IEZBTFNFOwotICB3aGlsZSAoIWRvbmUpIHsKLSAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJmRhdGEpKSB7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLSAgICAgIHsKLSAgICAgICAgR3N0RWxlbWVudCAqY2hpbGQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKCZkYXRhKTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJzZXR0aW5nIGluZGV4IG9uICclcyciLAotICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoY2hpbGQpKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2luZGV4IChjaGlsZCwgaW5kZXgpOwotCi0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZkYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIml0ZXJhdG9yIGRvaW5nIHJlc3luYyIpOwotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIml0ZXJhdG9yIGRvbmUiKTsKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBnX3ZhbHVlX3Vuc2V0ICgmZGF0YSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci0gIHJldHVybjsKLQotd2FzX3NldDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImluZGV4IHdhcyBhbHJlYWR5IHNldCIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgIHJldHVybjsKLSAgfQotfQotI2VuZGlmCi0KLS8qIHNldCB0aGUgY2xvY2sgb24gYWxsIGVsZW1lbnRzIGluIHRoaXMgYmluCi0gKgotICogTVQgc2FmZQotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iaW5fc2V0X2Nsb2NrX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3RCaW4gKmJpbjsKLSAgZ2Jvb2xlYW4gZG9uZTsKLSAgR3N0SXRlcmF0b3IgKml0OwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHVmFsdWUgZGF0YSA9IHsgMCwgfTsKLQotICBiaW4gPSBHU1RfQklOX0NBU1QgKGVsZW1lbnQpOwotCi0gIGl0ID0gZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzIChiaW4pOwotCi0gIGRvbmUgPSBGQUxTRTsKLSAgd2hpbGUgKCFkb25lKSB7Ci0gICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZkYXRhKSkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICB7Ci0gICAgICAgIEdzdEVsZW1lbnQgKmNoaWxkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7Ci0KLSAgICAgICAgcmVzICY9IGdzdF9lbGVtZW50X3NldF9jbG9jayAoY2hpbGQsIGNsb2NrKTsKLQotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJpdGVyYXRvciBkb2luZyByZXN5bmMiKTsKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJpdGVyYXRvciBkb25lIik7Ci0gICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ192YWx1ZV91bnNldCAoJmRhdGEpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIGlmIChyZXMpCi0gICAgcmVzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNldF9jbG9jayAoZWxlbWVudCwgY2xvY2spOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qIGdldCB0aGUgY2xvY2sgZm9yIHRoaXMgYmluIGJ5IGFza2luZyBhbGwgb2YgdGhlIGNoaWxkcmVuIGluIHRoaXMgYmluCi0gKgotICogVGhlIHJlZiBvZiB0aGUgcmV0dXJuZWQgY2xvY2sgaW4gaW5jcmVhc2VkIHNvIHVucmVmIGFmdGVyIHVzYWdlLgotICoKLSAqIFdlIGxvb3AgdGhlIGVsZW1lbnRzIGluIHN0YXRlIG9yZGVyIGFuZCBwaWNrIHRoZSBsYXN0IGNsb2NrIHdlIGNhbgotICogZ2V0LiBUaGlzIG1ha2VzIHN1cmUgd2UgZ2V0IGEgY2xvY2sgZnJvbSB0aGUgc291cmNlLgotICoKLSAqIE1UIHNhZmUKLSAqLwotc3RhdGljIEdzdENsb2NrICoKLWdzdF9iaW5fcHJvdmlkZV9jbG9ja19mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0Q2xvY2sgKnJlc3VsdCA9IE5VTEw7Ci0gIEdzdEVsZW1lbnQgKnByb3ZpZGVyID0gTlVMTDsKLSAgR3N0QmluICpiaW47Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgZ2Jvb2xlYW4gZG9uZTsKLSAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLSAgR3N0Q2xvY2sgKipwcm92aWRlZF9jbG9ja19wOwotICBHc3RFbGVtZW50ICoqY2xvY2tfcHJvdmlkZXJfcDsKLQotICBiaW4gPSBHU1RfQklOX0NBU1QgKGVsZW1lbnQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgaWYgKCFiaW4tPmNsb2NrX2RpcnR5KQotICAgIGdvdG8gbm90X2RpcnR5OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImZpbmRpbmcgbmV3IGNsb2NrIik7Ci0KLSAgaXQgPSBnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV3IChiaW4pOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICBkb25lID0gRkFMU0U7Ci0gIHdoaWxlICghZG9uZSkgewotICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdmFsKSkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICB7Ci0gICAgICAgIEdzdEVsZW1lbnQgKmNoaWxkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsKTsKLSAgICAgICAgR3N0Q2xvY2sgKmNsb2NrOwotCi0gICAgICAgIGNsb2NrID0gZ3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jayAoY2hpbGQpOwotICAgICAgICBpZiAoY2xvY2spIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJmb3VuZCBjYW5kaWRhdGUgY2xvY2sgJXAgYnkgZWxlbWVudCAlcyIsCi0gICAgICAgICAgICAgIGNsb2NrLCBHU1RfRUxFTUVOVF9OQU1FIChjaGlsZCkpOwotICAgICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHJlc3VsdCk7Ci0gICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm92aWRlcik7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJlc3VsdCA9IGNsb2NrOwotICAgICAgICAgIHByb3ZpZGVyID0gZ3N0X29iamVjdF9yZWYgKGNoaWxkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZ2YWwpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgaWYgKCFiaW4tPmNsb2NrX2RpcnR5KSB7Ci0gICAgaWYgKHByb3ZpZGVyKQotICAgICAgZ3N0X29iamVjdF91bnJlZiAocHJvdmlkZXIpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotICAgIHJlc3VsdCA9IE5VTEw7Ci0KLSAgICBnb3RvIG5vdF9kaXJ0eTsKLSAgfQotCi0gIHByb3ZpZGVkX2Nsb2NrX3AgPSAmYmluLT5wcm92aWRlZF9jbG9jazsKLSAgY2xvY2tfcHJvdmlkZXJfcCA9ICZiaW4tPmNsb2NrX3Byb3ZpZGVyOwotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIHByb3ZpZGVkX2Nsb2NrX3AsIChHc3RPYmplY3QgKikgcmVzdWx0KTsKLSAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBjbG9ja19wcm92aWRlcl9wLCAoR3N0T2JqZWN0ICopIHByb3ZpZGVyKTsKLSAgYmluLT5jbG9ja19kaXJ0eSA9IEZBTFNFOwotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAicHJvdmlkZWQgbmV3IGNsb2NrICUiIEdTVF9QVFJfRk9STUFUICIgYnkgcHJvdmlkZXIgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICByZXN1bHQsIHByb3ZpZGVyKTsKLSAgLyogUHJvdmlkZXIgaXMgbm90IGJlaW5nIHJldHVybmVkIHRvIGNhbGxlciwganVzdCB0aGUgcmVzdWx0ICovCi0gIGlmIChwcm92aWRlcikKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm92aWRlcik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLW5vdF9kaXJ0eToKLSAgewotICAgIGlmICgocmVzdWx0ID0gYmluLT5wcm92aWRlZF9jbG9jaykpCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJyZXR1cm5pbmcgb2xkIGNsb2NrICVwIiwgcmVzdWx0KTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KLQotLyoKLSAqIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIGNhY2hlZCBtZXNzYWdlcwotICovCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RPYmplY3QgKnNyYzsKLSAgR3N0TWVzc2FnZVR5cGUgdHlwZXM7Ci19IE1lc3NhZ2VGaW5kOwotCi0vKiBjaGVjayBpZiBhIG1lc3NhZ2UgaXMgb2YgZ2l2ZW4gc3JjIGFuZCB0eXBlICovCi1zdGF0aWMgZ2ludAotbWVzc2FnZV9jaGVjayAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIE1lc3NhZ2VGaW5kICogdGFyZ2V0KQotewotICBnYm9vbGVhbiBlcSA9IFRSVUU7Ci0KLSAgaWYgKHRhcmdldC0+c3JjKQotICAgIGVxICY9IEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gdGFyZ2V0LT5zcmM7Ci0gIGlmICh0YXJnZXQtPnR5cGVzKQotICAgIGVxICY9IChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSAmIHRhcmdldC0+dHlwZXMpICE9IDA7Ci0gIEdTVF9MT0cgKCJsb29raW5nIGF0IG1lc3NhZ2UgJXA6ICVkIiwgbWVzc2FnZSwgZXEpOwotCi0gIHJldHVybiAoZXEgPyAwIDogMSk7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqCi1maW5kX21lc3NhZ2UgKEdzdEJpbiAqIGJpbiwgR3N0T2JqZWN0ICogc3JjLCBHc3RNZXNzYWdlVHlwZSB0eXBlcykKLXsKLSAgR0xpc3QgKnJlc3VsdDsKLSAgTWVzc2FnZUZpbmQgZmluZDsKLQotICBmaW5kLnNyYyA9IHNyYzsKLSAgZmluZC50eXBlcyA9IHR5cGVzOwotCi0gIHJlc3VsdCA9IGdfbGlzdF9maW5kX2N1c3RvbSAoYmluLT5tZXNzYWdlcywgJmZpbmQsCi0gICAgICAoR0NvbXBhcmVGdW5jKSBtZXNzYWdlX2NoZWNrKTsKLQotICBpZiAocmVzdWx0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAid2UgZm91bmQgYSBtZXNzYWdlICVwIGZyb20gJXMgbWF0Y2hpbmcgdHlwZXMgJTA4eCIsCi0gICAgICAgIHJlc3VsdC0+ZGF0YSwgR1NUX09CSkVDVF9OQU1FIChHU1RfTUVTU0FHRV9DQVNUIChyZXN1bHQtPmRhdGEpLT5zcmMpLAotICAgICAgICB0eXBlcyk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAibm8gbWVzc2FnZSBmb3VuZCBtYXRjaGluZyB0eXBlcyAlMDh4IiwgdHlwZXMpOwotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICB7Ci0gICAgICBndWludCBpOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKLSAgICAgICAgaWYgKHR5cGVzICYgKDFVIDw8IGkpKQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIiAgJXMiLCBnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lICgxVSA8PCBpKSk7Ci0gICAgfQotI2VuZGlmCi0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiB3aXRoIExPQ0ssIHJldHVybnMgVFJVRSBpZiBtZXNzYWdlIGhhZCBhIHZhbGlkIFNSQywgdGFrZXMgb3duZXJzaGlwIG9mCi0gKiB0aGUgbWVzc2FnZS4KLSAqCi0gKiBBIG1lc3NhZ2UgdGhhdCBpcyBjYWNoZWQgYW5kIGhhcyB0aGUgc2FtZSBTUkMgYW5kIHR5cGUgaXMgcmVwbGFjZWQKLSAqIGJ5IHRoZSBnaXZlbiBtZXNzYWdlLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWJpbl9yZXBsYWNlX21lc3NhZ2UgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdE1lc3NhZ2VUeXBlIHR5cGVzKQotewotICBHTGlzdCAqcHJldmlvdXM7Ci0gIEdzdE9iamVjdCAqc3JjOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGlmICgoc3JjID0gR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSkpIHsKLSAgICAvKiBmaXJzdCBmaW5kIHRoZSBwcmV2aW91cyBtZXNzYWdlIHBvc3RlZCBieSB0aGlzIGVsZW1lbnQgKi8KLSAgICBpZiAoKHByZXZpb3VzID0gZmluZF9tZXNzYWdlIChiaW4sIHNyYywgdHlwZXMpKSkgewotICAgICAgR3N0TWVzc2FnZSAqcHJldmlvdXNfbXNnOwotCi0gICAgICAvKiBpZiB3ZSBmb3VuZCBhIHByZXZpb3VzIG1lc3NhZ2UsIHJlcGxhY2UgaXQgKi8KLSAgICAgIHByZXZpb3VzX21zZyA9IHByZXZpb3VzLT5kYXRhOwotICAgICAgcHJldmlvdXMtPmRhdGEgPSBtZXNzYWdlOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJyZXBsYWNlIG9sZCBtZXNzYWdlICVzIGZyb20gJXMgd2l0aCAlcyBtZXNzYWdlIiwKLSAgICAgICAgICBHU1RfTUVTU0FHRV9UWVBFX05BTUUgKHByZXZpb3VzX21zZyksIEdTVF9FTEVNRU5UX05BTUUgKHNyYyksCi0gICAgICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSk7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChwcmV2aW91c19tc2cpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBrZWVwIG5ldyBtZXNzYWdlICovCi0gICAgICBiaW4tPm1lc3NhZ2VzID0gZ19saXN0X3ByZXBlbmQgKGJpbi0+bWVzc2FnZXMsIG1lc3NhZ2UpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJnb3QgbmV3IG1lc3NhZ2UgJXAsICVzIGZyb20gJXMiLAotICAgICAgICAgIG1lc3NhZ2UsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSksIEdTVF9FTEVNRU5UX05BTUUgKHNyYykpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJnb3QgbWVzc2FnZSAlcyBmcm9tIChOVUxMKSwgbm90IHByb2Nlc3NpbmciLAotICAgICAgICBHU1RfTUVTU0FHRV9UWVBFX05BTUUgKG1lc3NhZ2UpKTsKLSAgICByZXMgPSBGQUxTRTsKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogd2l0aCBMT0NLLiBSZW1vdmUgYWxsIG1lc3NhZ2VzIG9mIGdpdmVuIHR5cGVzICovCi1zdGF0aWMgdm9pZAotYmluX3JlbW92ZV9tZXNzYWdlcyAoR3N0QmluICogYmluLCBHc3RPYmplY3QgKiBzcmMsIEdzdE1lc3NhZ2VUeXBlIHR5cGVzKQotewotICBNZXNzYWdlRmluZCBmaW5kOwotICBHTGlzdCAqd2FsaywgKm5leHQ7Ci0KLSAgZmluZC5zcmMgPSBzcmM7Ci0gIGZpbmQudHlwZXMgPSB0eXBlczsKLQotICBmb3IgKHdhbGsgPSBiaW4tPm1lc3NhZ2VzOyB3YWxrOyB3YWxrID0gbmV4dCkgewotICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSAoR3N0TWVzc2FnZSAqKSB3YWxrLT5kYXRhOwotCi0gICAgbmV4dCA9IGdfbGlzdF9uZXh0ICh3YWxrKTsKLQotICAgIGlmIChtZXNzYWdlX2NoZWNrIChtZXNzYWdlLCAmZmluZCkgPT0gMCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwKLSAgICAgICAgICAiZGVsZXRpbmcgbWVzc2FnZSAlcCBvZiB0eXBlICVzICh0eXBlcyAweCUwOHgpIiwgbWVzc2FnZSwKLSAgICAgICAgICBHU1RfTUVTU0FHRV9UWVBFX05BTUUgKG1lc3NhZ2UpLCB0eXBlcyk7Ci0gICAgICBiaW4tPm1lc3NhZ2VzID0gZ19saXN0X2RlbGV0ZV9saW5rIChiaW4tPm1lc3NhZ2VzLCB3YWxrKTsKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwKLSAgICAgICAgICAibm90IGRlbGV0aW5nIG1lc3NhZ2UgJXAgb2YgdHlwZSAweCUwOHgiLCBtZXNzYWdlLAotICAgICAgICAgIEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKTsKLSAgICB9Ci0gIH0KLX0KLQotCi0vKiBDaGVjayBpZiB0aGUgYmluIGlzIEVPUy4gV2UgZG8gdGhpcyBieSBzY2FubmluZyBhbGwgc2lua3MgYW5kCi0gKiBjaGVja2luZyBpZiB0aGV5IHBvc3RlZCBhbiBFT1MgbWVzc2FnZS4KLSAqCi0gKiBjYWxsIHdpdGggYmluIExPQ0sgKi8KLXN0YXRpYyBnYm9vbGVhbgotaXNfZW9zIChHc3RCaW4gKiBiaW4sIGd1aW50MzIgKiBzZXFudW0pCi17Ci0gIGdib29sZWFuIHJlc3VsdDsKLSAgZ2ludCBuX2VvcyA9IDA7Ci0gIEdMaXN0ICp3YWxrLCAqbXNnczsKLQotICByZXN1bHQgPSBUUlVFOwotICBmb3IgKHdhbGsgPSBiaW4tPmNoaWxkcmVuOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0RWxlbWVudCAqZWxlbWVudDsKLQotICAgIGVsZW1lbnQgPSBHU1RfRUxFTUVOVF9DQVNUICh3YWxrLT5kYXRhKTsKLSAgICBpZiAoYmluX2VsZW1lbnRfaXNfc2luayAoZWxlbWVudCwgYmluKSA9PSAwKSB7Ci0gICAgICAvKiBjaGVjayBpZiBlbGVtZW50IHBvc3RlZCBFT1MgKi8KLSAgICAgIGlmICgobXNncyA9Ci0gICAgICAgICAgICAgIGZpbmRfbWVzc2FnZSAoYmluLCBHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLCBHU1RfTUVTU0FHRV9FT1MpKSkgewotICAgICAgICBHU1RfREVCVUcgKCJzaW5rICclcycgcG9zdGVkIEVPUyIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgICAgICAgKnNlcW51bSA9IGdzdF9tZXNzYWdlX2dldF9zZXFudW0gKEdTVF9NRVNTQUdFX0NBU1QgKG1zZ3MtPmRhdGEpKTsKLSAgICAgICAgbl9lb3MrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoInNpbmsgJyVzJyBkaWQgbm90IHBvc3QgRU9TIHlldCIsCi0gICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gICAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLyogRklYTUU6IFNvbWUgdGVzdHMgKGUuZy4gZWxlbWVudHMvY2Fwc2ZpbHRlcikgdXNlCi0gICAqIHBpcGVsaW5lcyB3aXRoIGEgZGFuZ2xpbmcgc2lua3BhZCBidXQgbm8gc2luayBlbGVtZW50LgotICAgKiBUaGVzZSB0ZXN0cyBhc3N1bWUgdGhhdCBubyBFT1MgbWVzc2FnZSBpcyBldmVyCi0gICAqIHBvc3RlZCBvbiB0aGUgYnVzIHNvIGxldCdzIGtlZXAgdGhhdCBiZWhhdmlvdXIuCi0gICAqIEluIHZhbGlkIHBpcGVsaW5lcyB0aGlzIGRvZXNuJ3QgbWFrZSBhIGRpZmZlcmVuY2UuCi0gICAqLwotICByZXR1cm4gcmVzdWx0ICYmIG5fZW9zID4gMDsKLX0KLQotCi0vKiBDaGVjayBpZiB0aGUgYmluIGlzIFNUUkVBTV9TVEFSVC4gV2UgZG8gdGhpcyBieSBzY2FubmluZyBhbGwgc2lua3MgYW5kCi0gKiBjaGVja2luZyBpZiB0aGV5IHBvc3RlZCBhbiBTVFJFQU1fU1RBUlQgbWVzc2FnZS4KLSAqCi0gKiBjYWxsIHdpdGggYmluIExPQ0sgKi8KLXN0YXRpYyBnYm9vbGVhbgotaXNfc3RyZWFtX3N0YXJ0IChHc3RCaW4gKiBiaW4sIGd1aW50MzIgKiBzZXFudW0sIGdib29sZWFuICogaGF2ZV9ncm91cF9pZCwKLSAgICBndWludCAqIGdyb3VwX2lkKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0gIEdMaXN0ICp3YWxrLCAqbXNnczsKLSAgZ3VpbnQgdG1wX2dyb3VwX2lkOwotICBnYm9vbGVhbiBmaXJzdCA9IFRSVUUsIHNhbWVfZ3JvdXBfaWQgPSBUUlVFOwotCi0gICpoYXZlX2dyb3VwX2lkID0gVFJVRTsKLSAgKmdyb3VwX2lkID0gMDsKLSAgcmVzdWx0ID0gVFJVRTsKLSAgZm9yICh3YWxrID0gYmluLT5jaGlsZHJlbjsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0KLSAgICBlbGVtZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAod2Fsay0+ZGF0YSk7Ci0gICAgaWYgKGJpbl9lbGVtZW50X2lzX3NpbmsgKGVsZW1lbnQsIGJpbikgPT0gMCkgewotICAgICAgLyogY2hlY2sgaWYgZWxlbWVudCBwb3N0ZWQgU1RSRUFNX1NUQVJUICovCi0gICAgICBpZiAoKG1zZ3MgPQotICAgICAgICAgICAgICBmaW5kX21lc3NhZ2UgKGJpbiwgR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSwKLSAgICAgICAgICAgICAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCkpKSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoInNpbmsgJyVzJyBwb3N0ZWQgU1RSRUFNX1NUQVJUIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICAgICAgICAqc2VxbnVtID0gZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bSAoR1NUX01FU1NBR0VfQ0FTVCAobXNncy0+ZGF0YSkpOwotICAgICAgICBpZiAoZ3N0X21lc3NhZ2VfcGFyc2VfZ3JvdXBfaWQgKEdTVF9NRVNTQUdFX0NBU1QgKG1zZ3MtPmRhdGEpLAotICAgICAgICAgICAgICAgICZ0bXBfZ3JvdXBfaWQpKSB7Ci0gICAgICAgICAgaWYgKGZpcnN0KSB7Ci0gICAgICAgICAgICBmaXJzdCA9IEZBTFNFOwotICAgICAgICAgICAgKmdyb3VwX2lkID0gdG1wX2dyb3VwX2lkOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodG1wX2dyb3VwX2lkICE9ICpncm91cF9pZCkKLSAgICAgICAgICAgICAgc2FtZV9ncm91cF9pZCA9IEZBTFNFOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAqaGF2ZV9ncm91cF9pZCA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUcgKCJzaW5rICclcycgZGlkIG5vdCBwb3N0IFNUUkVBTV9TVEFSVCB5ZXQiLAotICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICAgICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogSWYgYWxsIGhhdmUgYSBncm91cF9pZCB3ZSBvbmx5IGNvbnNpZGVyIHRoaXMgc3RyZWFtIHN0YXJ0ZWQKLSAgICogaWYgYWxsIGdyb3VwIGlkcyB3ZXJlIHRoZSBzYW1lIGFuZCBhbGwgc2lua3MgcG9zdGVkIGEgc3RyZWFtLXN0YXJ0Ci0gICAqIG1lc3NhZ2UgKi8KLSAgaWYgKCpoYXZlX2dyb3VwX2lkKQotICAgIHJldHVybiBzYW1lX2dyb3VwX2lkICYmIHJlc3VsdDsKLSAgLyogb3RoZXJ3aXNlIGNvbnNpZGVyIHRoaXMgc3RyZWFtIHN0YXJ0ZWQgYWZ0ZXIgYWxsIHNpbmtzCi0gICAqIGhhdmUgcmVwb3J0ZWQgc3RyZWFtLXN0YXJ0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotICAgKiBGSVhNRSAyLjA6IFRoaXMgc2hvdWxkIGdvIGF3YXkhICovCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi11bmxpbmtfcGFkcyAoY29uc3QgR1ZhbHVlICogaXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RQYWQgKnBhZDsKLSAgR3N0UGFkICpwZWVyOwotCi0gIHBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoaXRlbSk7Ci0KLSAgaWYgKChwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKSkpIHsKLSAgICBpZiAoZ3N0X3BhZF9nZXRfZGlyZWN0aW9uIChwYWQpID09IEdTVF9QQURfU1JDKQotICAgICAgZ3N0X3BhZF91bmxpbmsgKHBhZCwgcGVlcik7Ci0gICAgZWxzZQotICAgICAgZ3N0X3BhZF91bmxpbmsgKHBlZXIsIHBhZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWJpbl9kZWVwX2l0ZXJhdG9yX2ZvcmVhY2ggKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR1F1ZXVlICpxdWV1ZSA9IHVzZXJfZGF0YTsKLQotICBnX3F1ZXVlX3B1c2hfdGFpbCAocXVldWUsIGdfdmFsdWVfZHVwX29iamVjdCAoaXRlbSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jpbl9kb19kZWVwX2FkZF9yZW1vdmUgKEdzdEJpbiAqIGJpbiwgZ2ludCBzaWdfaWQsIGNvbnN0IGdjaGFyICogc2lnX25hbWUsCi0gICAgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKGJpbiwgc2lnX2lkLCAwLCBiaW4sIGVsZW1lbnQpOwotCi0gIC8qIFdoZW4gcmVtb3ZpbmcgYSBiaW4sIGVtaXQgZGVlcC1lbGVtZW50LSogZm9yIGV2ZXJ5dGhpbmcgaW4gdGhlIGJpbiB0b28gKi8KLSAgaWYgKEdTVF9JU19CSU4gKGVsZW1lbnQpKSB7Ci0gICAgR3N0SXRlcmF0b3IgKml0OwotICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGlyZXM7Ci0gICAgR1F1ZXVlIGVsZW1lbnRzID0gR19RVUVVRV9JTklUOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGJpbiwgIlJlY3Vyc2luZyBpbnRvIGJpbiAlIiBHU1RfUFRSX0ZPUk1BVCAiIGZvciAlcyIsCi0gICAgICAgIGVsZW1lbnQsIHNpZ19uYW1lKTsKLSAgICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlIChHU1RfQklOX0NBU1QgKGVsZW1lbnQpKTsKLSAgICBkbyB7Ci0gICAgICBpcmVzID0gZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggKGl0LCBiaW5fZGVlcF9pdGVyYXRvcl9mb3JlYWNoLCAmZWxlbWVudHMpOwotICAgICAgaWYgKGlyZXMgIT0gR1NUX0lURVJBVE9SX0RPTkUpIHsKLSAgICAgICAgZ19xdWV1ZV9mb3JlYWNoICgmZWxlbWVudHMsIChHRnVuYykgZ19vYmplY3RfdW5yZWYsIE5VTEwpOwotICAgICAgICBnX3F1ZXVlX2NsZWFyICgmZWxlbWVudHMpOwotICAgICAgfQotICAgICAgaWYgKGlyZXMgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICAgIH0gd2hpbGUgKGlyZXMgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gICAgaWYgKGlyZXMgIT0gR1NUX0lURVJBVE9SX0VSUk9SKSB7Ci0gICAgICBHc3RFbGVtZW50ICplOwotCi0gICAgICB3aGlsZSAoKGUgPSBnX3F1ZXVlX3BvcF9oZWFkICgmZWxlbWVudHMpKSkgewotICAgICAgICBHc3RPYmplY3QgKnBhcmVudCA9IGdzdF9vYmplY3RfZ2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChlKSk7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGJpbiwgImNhbGxpbmcgJXMgZm9yIGVsZW1lbnQgJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICAgICAgICIgaW4gYmluICUiIEdTVF9QVFJfRk9STUFULCBzaWdfbmFtZSwgZSwgcGFyZW50KTsKLSAgICAgICAgZ19zaWduYWxfZW1pdCAoYmluLCBzaWdfaWQsIDAsIHBhcmVudCwgZSk7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmIChlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLSAgfQotfQotCi0vKiB2bWV0aG9kIHRoYXQgYWRkcyBhbiBlbGVtZW50IHRvIGEgYmluCi0gKgotICogTVQgc2FmZQotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iaW5fYWRkX2Z1bmMgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGdjaGFyICplbGVtX25hbWU7Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgZ2Jvb2xlYW4gaXNfc2luaywgaXNfc291cmNlLCBwcm92aWRlc19jbG9jaywgcmVxdWlyZXNfY2xvY2s7Ci0gIEdzdE1lc3NhZ2UgKmNsb2NrX21lc3NhZ2UgPSBOVUxMLCAqYXN5bmNfbWVzc2FnZSA9IE5VTEw7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR0xpc3QgKmwsICplbGVtX2NvbnRleHRzLCAqbmVlZF9jb250ZXh0X21lc3NhZ2VzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImVsZW1lbnQgOiVzIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotCi0gIC8qIHdlIG9idmlvdXNseSBjYW4ndCBhZGQgb3Vyc2VsZiB0byBvdXJzZWxmICovCi0gIGlmIChHX1VOTElLRUxZIChlbGVtZW50ID09IEdTVF9FTEVNRU5UX0NBU1QgKGJpbikpKQotICAgIGdvdG8gYWRkaW5nX2l0c2VsZjsKLQotICAvKiBnZXQgdGhlIGVsZW1lbnQgbmFtZSB0byBtYWtlIHN1cmUgaXQgaXMgdW5pcXVlIGluIHRoaXMgYmluLiAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICBlbGVtX25hbWUgPSBnX3N0cmR1cCAoR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICBpc19zaW5rID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfRkxBR19TSU5LKTsKLSAgaXNfc291cmNlID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UpOwotICBwcm92aWRlc19jbG9jayA9Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0spOwotICByZXF1aXJlc19jbG9jayA9Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0spOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotCi0gIC8qIHRoZW4gY2hlY2sgdG8gc2VlIGlmIHRoZSBlbGVtZW50J3MgbmFtZSBpcyBhbHJlYWR5IHRha2VuIGluIHRoZSBiaW4sCi0gICAqIHdlIGNhbiBzYWZlbHkgdGFrZSB0aGUgbG9jayBoZXJlLiBUaGlzIGNoZWNrIGlzIHByb2JhYmx5IGJvZ3VzIGJlY2F1c2UKLSAgICogeW91IGNhbiBzYWZlbHkgY2hhbmdlIHRoZSBlbGVtZW50IG5hbWUgYWZ0ZXIgdGhpcyBjaGVjayBhbmQgYmVmb3JlIHNldHRpbmcKLSAgICogdGhlIG9iamVjdCBwYXJlbnQuIFRoZSB3aW5kb3cgaXMgdmVyeSBzbWFsbCB0aG91Z2guLi4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MgKGJpbi0+Y2hpbGRyZW4sIGVsZW1fbmFtZSkpKQotICAgIGdvdG8gZHVwbGljYXRlX25hbWU7Ci0KLSAgLyogc2V0IHRoZSBlbGVtZW50J3MgcGFyZW50IGFuZCBhZGQgdGhlIGVsZW1lbnQgdG8gdGhlIGJpbidzIGxpc3Qgb2YgY2hpbGRyZW4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCi0gICAgICAgICAgICAgIEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSkpKQotICAgIGdvdG8gaGFkX3BhcmVudDsKLQotICAvKiBpZiB3ZSBhZGQgYSBzaW5rIHdlIGJlY29tZSBhIHNpbmsgKi8KLSAgaWYgKGlzX3NpbmsgJiYgIShiaW4tPnByaXYtPnN1cHByZXNzZWRfZmxhZ3MgJiBHU1RfRUxFTUVOVF9GTEFHX1NJTkspKSB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFSRU5UQUdFLCBiaW4sICJlbGVtZW50IFwiJXNcIiB3YXMgc2luayIsCi0gICAgICAgIGVsZW1fbmFtZSk7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1NFVCAoYmluLCBHU1RfRUxFTUVOVF9GTEFHX1NJTkspOwotICB9Ci0gIGlmIChpc19zb3VyY2UgJiYgIShiaW4tPnByaXYtPnN1cHByZXNzZWRfZmxhZ3MgJiBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSkpIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQVJFTlRBR0UsIGJpbiwgImVsZW1lbnQgXCIlc1wiIHdhcyBzb3VyY2UiLAotICAgICAgICBlbGVtX25hbWUpOwotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGJpbiwgR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UpOwotICB9Ci0gIGlmIChwcm92aWRlc19jbG9jawotICAgICAgJiYgIShiaW4tPnByaXYtPnN1cHByZXNzZWRfZmxhZ3MgJiBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0spKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZWxlbWVudCBcIiVzXCIgY2FuIHByb3ZpZGUgYSBjbG9jayIsIGVsZW1fbmFtZSk7Ci0gICAgY2xvY2tfbWVzc2FnZSA9Ci0gICAgICAgIGdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLCBOVUxMLCBUUlVFKTsKLSAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChiaW4sIEdTVF9FTEVNRU5UX0ZMQUdfUFJPVklERV9DTE9DSyk7Ci0gIH0KLSAgaWYgKHJlcXVpcmVzX2Nsb2NrCi0gICAgICAmJiAhKGJpbi0+cHJpdi0+c3VwcHJlc3NlZF9mbGFncyAmIEdTVF9FTEVNRU5UX0ZMQUdfUkVRVUlSRV9DTE9DSykpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJlbGVtZW50IFwiJXNcIiByZXF1aXJlcyBhIGNsb2NrIiwgZWxlbV9uYW1lKTsKLSAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChiaW4sIEdTVF9FTEVNRU5UX0ZMQUdfUkVRVUlSRV9DTE9DSyk7Ci0gIH0KLQotICBiaW4tPmNoaWxkcmVuID0gZ19saXN0X3ByZXBlbmQgKGJpbi0+Y2hpbGRyZW4sIGVsZW1lbnQpOwotICBiaW4tPm51bWNoaWxkcmVuKys7Ci0gIGJpbi0+Y2hpbGRyZW5fY29va2llKys7Ci0gIGlmICghR1NUX0JJTl9JU19OT19SRVNZTkMgKGJpbikpCi0gICAgYmluLT5wcml2LT5zdHJ1Y3R1cmVfY29va2llKys7Ci0KLSAgLyogZGlzdHJpYnV0ZSB0aGUgYnVzICovCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKGVsZW1lbnQsIGJpbi0+Y2hpbGRfYnVzKTsKLQotICAvKiBwcm9wYWdhdGUgdGhlIGN1cnJlbnQgYmFzZV90aW1lLCBzdGFydF90aW1lIGFuZCBjbG9jayAqLwotICBnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lIChlbGVtZW50LCBHU1RfRUxFTUVOVF9DQVNUIChiaW4pLT5iYXNlX3RpbWUpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSAoZWxlbWVudCwgR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAoYmluKSk7Ci0gIC8qIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZWxlbWVudCBkaWQgbm90IGFjY2VwdCB0aGUgY2xvY2sgYnV0Ci0gICAqIHRoYXQgaXMgbm90IGltcG9ydGFudCByaWdodCBub3cuIFdoZW4gdGhlIHBpcGVsaW5lIGdvZXMgdG8gUExBWUlORywKLSAgICogYSBuZXcgY2xvY2sgd2lsbCBiZSBzZWxlY3RlZCAqLwotICBnc3RfZWxlbWVudF9zZXRfY2xvY2sgKGVsZW1lbnQsIEdTVF9FTEVNRU5UX0NMT0NLIChiaW4pKTsKLQotICAvKiBnZXQgdGhlIGVsZW1lbnQncyBsaXN0IG9mIGNvbnRleHRzIGJlZm9yZSBwcm9wYWdhdGluZyBvdXIgb3duICovCi0gIGVsZW1fY29udGV4dHMgPSBnc3RfZWxlbWVudF9nZXRfY29udGV4dHMgKGVsZW1lbnQpOwotICBmb3IgKGwgPSBHU1RfRUxFTUVOVF9DQVNUIChiaW4pLT5jb250ZXh0czsgbDsgbCA9IGwtPm5leHQpCi0gICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQgKGVsZW1lbnQsIGwtPmRhdGEpOwotCi0gIG5lZWRfY29udGV4dF9tZXNzYWdlcyA9IE5VTEw7Ci0gIGZvciAobCA9IGVsZW1fY29udGV4dHM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0Q29udGV4dCAqcmVwbGFjZW1lbnQsICpjb250ZXh0ID0gbC0+ZGF0YTsKLSAgICBjb25zdCBnY2hhciAqY29udGV4dF90eXBlOwotCi0gICAgY29udGV4dF90eXBlID0gZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAoY29udGV4dCk7Ci0KLSAgICAvKiB3ZSBhbHJlYWR5IHNldCB0aGlzIGNvbnRleHQgYWJvdmU/ICovCi0gICAgcmVwbGFjZW1lbnQgPQotICAgICAgICBnc3RfZWxlbWVudF9nZXRfY29udGV4dF91bmxvY2tlZCAoR1NUX0VMRU1FTlQgKGJpbiksIGNvbnRleHRfdHlwZSk7Ci0gICAgaWYgKHJlcGxhY2VtZW50KSB7Ci0gICAgICBnc3RfY29udGV4dF91bnJlZiAocmVwbGFjZW1lbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHc3RNZXNzYWdlICptc2c7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgICAgIC8qIGFzayBvdXIgcGFyZW50IGZvciB0aGUgY29udGV4dCAqLwotICAgICAgbXNnID0gZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dCAoR1NUX09CSkVDVF9DQVNUIChiaW4pLCBjb250ZXh0X3R5cGUpOwotICAgICAgcyA9IChHc3RTdHJ1Y3R1cmUgKikgZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobXNnKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiYmluLm9sZC5jb250ZXh0IiwgR1NUX1RZUEVfQ09OVEVYVCwgY29udGV4dCwgTlVMTCk7Ci0KLSAgICAgIG5lZWRfY29udGV4dF9tZXNzYWdlcyA9IGdfbGlzdF9wcmVwZW5kIChuZWVkX2NvbnRleHRfbWVzc2FnZXMsIG1zZyk7Ci0gICAgfQotICB9Ci0KLSNpZiAwCi0gIC8qIHNldCB0aGUgY2FjaGVkIGluZGV4IG9uIHRoZSBjaGlsZHJlbiAqLwotICBpZiAoYmluLT5wcml2LT5pbmRleCkKLSAgICBnc3RfZWxlbWVudF9zZXRfaW5kZXggKGVsZW1lbnQsIGJpbi0+cHJpdi0+aW5kZXgpOwotI2VuZGlmCi0KLSAgcmV0ID0gR1NUX1NUQVRFX1JFVFVSTiAoYmluKTsKLSAgLyogbm8gbmVlZCB0byB1cGRhdGUgdGhlIHN0YXRlIGlmIHdlIGFyZSBpbiBlcnJvciAqLwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICBnb3RvIG5vX3N0YXRlX3JlY2FsYzsKLQotICAvKiB1cGRhdGUgdGhlIGJpbiBzdGF0ZSwgdGhlIG5ldyBlbGVtZW50IGNvdWxkIGhhdmUgYmVlbiBhbiBBU1lOQyBvcgotICAgKiBOT19QUkVST0xMIGVsZW1lbnQgKi8KLSAgcmV0ID0gR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImFkZGVkICVzIGVsZW1lbnQiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAocmV0KSk7Ci0KLSAgc3dpdGNoIChyZXQpIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6Ci0gICAgewotICAgICAgLyogY3JlYXRlIG1lc3NhZ2UgdG8gdHJhY2sgdGhpcyBheW5jIGVsZW1lbnQgd2hlbiBpdCBwb3N0cyBhbiBhc3luYy1kb25lCi0gICAgICAgKiBtZXNzYWdlICovCi0gICAgICBhc3luY19tZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKLSAgICAgIC8qIGlnbm9yZSBhbGwgYXN5bmMgZWxlbWVudHMgd2UgbWlnaHQgaGF2ZSBhbmQgY29tbWl0IG91ciBzdGF0ZSAqLwotICAgICAgYmluX2hhbmRsZV9hc3luY19kb25lIChiaW4sIHJldCwgRkFMU0UsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotbm9fc3RhdGVfcmVjYWxjOgotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICBmb3IgKGwgPSBuZWVkX2NvbnRleHRfbWVzc2FnZXM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0TWVzc2FnZSAqbXNnID0gbC0+ZGF0YTsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgY29uc3QgZ2NoYXIgKmNvbnRleHRfdHlwZTsKLSAgICBHc3RDb250ZXh0ICpyZXBsYWNlbWVudCwgKmNvbnRleHQ7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGUgKG1zZywgJmNvbnRleHRfdHlwZSk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoYmluLCAiYXNraW5nIHBhcmVudCBmb3IgY29udGV4dCB0eXBlOiAlcyAiCi0gICAgICAgICJmcm9tICUiIEdTVF9QVFJfRk9STUFULCBjb250ZXh0X3R5cGUsIGVsZW1lbnQpOwotCi0gICAgcyA9IChHc3RTdHJ1Y3R1cmUgKikgZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobXNnKTsKLSAgICBnc3Rfc3RydWN0dXJlX2dldCAocywgImJpbi5vbGQuY29udGV4dCIsIEdTVF9UWVBFX0NPTlRFWFQsICZjb250ZXh0LCBOVUxMKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImJpbi5vbGQuY29udGV4dCIpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgbXNnKTsKLQotICAgIC8qIGxvY2sgdG8gYXZvaWQgbG9zaW5nIGEgcG90ZW50aWFsIHdyaXRlICovCi0gICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAgIHJlcGxhY2VtZW50ID0KLSAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRfdW5sb2NrZWQgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIGNvbnRleHRfdHlwZSk7Ci0KLSAgICBpZiAocmVwbGFjZW1lbnQpIHsKLSAgICAgIC8qIHdlIGdvdCB0aGUgY29udGV4dCBzZXQgZnJvbSBHc3RFbGVtZW50OjpzZXRfY29udGV4dCAqLwotICAgICAgZ3N0X2NvbnRleHRfdW5yZWYgKHJlcGxhY2VtZW50KTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBQcm9wYWdhdGUgdGhlIGVsZW1lbnQncyBjb250ZXh0IHVwd2FyZHMgKi8KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChiaW4sICJwcm9wYWdhdGluZyBleGlzdGluZyBjb250ZXh0IHR5cGU6ICVzICVwICIKLSAgICAgICAgICAiZnJvbSAlIiBHU1RfUFRSX0ZPUk1BVCwgY29udGV4dF90eXBlLCBjb250ZXh0LCBlbGVtZW50KTsKLQotICAgICAgZ3N0X2Jpbl91cGRhdGVfY29udGV4dF91bmxvY2tlZCAoYmluLCBjb250ZXh0KTsKLQotICAgICAgbXNnID0KLSAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfaGF2ZV9jb250ZXh0IChHU1RfT0JKRUNUX0NBU1QgKGJpbiksCi0gICAgICAgICAgZ3N0X2NvbnRleHRfcmVmIChjb250ZXh0KSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgbXNnKTsKLSAgICB9Ci0gICAgZ3N0X2NvbnRleHRfdW5yZWYgKGNvbnRleHQpOwotICB9Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGVsZW1fY29udGV4dHMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2NvbnRleHRfdW5yZWYpOwotICBnX2xpc3RfZnJlZSAobmVlZF9jb250ZXh0X21lc3NhZ2VzKTsKLQotICAvKiBwb3N0IHRoZSBtZXNzYWdlcyBvbiB0aGUgYnVzIG9mIHRoZSBlbGVtZW50IHNvIHRoYXQgdGhlIGJpbiBjYW4gaGFuZGxlCi0gICAqIHRoZW0gKi8KLSAgaWYgKGNsb2NrX21lc3NhZ2UpCi0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LCBjbG9ja19tZXNzYWdlKTsKLQotICBpZiAoYXN5bmNfbWVzc2FnZSkKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKGVsZW1lbnQsIGFzeW5jX21lc3NhZ2UpOwotCi0gIC8qIHVubGluayBhbGwgbGlua2VkIHBhZHMgKi8KLSAgaXQgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKGVsZW1lbnQpOwotICB3aGlsZSAoZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggKGl0LCAoR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24pIHVubGlua19wYWRzLAotICAgICAgICAgIE5VTEwpID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCi0gICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBUkVOVEFHRSwgYmluLCAiYWRkZWQgZWxlbWVudCBcIiVzXCIiLAotICAgICAgZWxlbV9uYW1lKTsKLQotICBnX3NpZ25hbF9lbWl0IChiaW4sIGdzdF9iaW5fc2lnbmFsc1tFTEVNRU5UX0FEREVEXSwgMCwgZWxlbWVudCk7Ci0gIGdzdF9jaGlsZF9wcm94eV9jaGlsZF9hZGRlZCAoKEdzdENoaWxkUHJveHkgKikgYmluLCAoR09iamVjdCAqKSBlbGVtZW50LAotICAgICAgZWxlbV9uYW1lKTsKLQotICBnc3RfYmluX2RvX2RlZXBfYWRkX3JlbW92ZSAoYmluLCBnc3RfYmluX3NpZ25hbHNbREVFUF9FTEVNRU5UX0FEREVEXSwKLSAgICAgICJkZWVwLWVsZW1lbnQtYWRkZWQiLCBlbGVtZW50KTsKLQotICBnX2ZyZWUgKGVsZW1fbmFtZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1IgaGFuZGxpbmcgaGVyZSAqLwotYWRkaW5nX2l0c2VsZjoKLSAgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgICBnX3dhcm5pbmcgKCJDYW5ub3QgYWRkIGJpbiAnJXMnIHRvIGl0c2VsZiIsIEdTVF9FTEVNRU5UX05BTUUgKGJpbikpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZHVwbGljYXRlX25hbWU6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJOYW1lICclcycgaXMgbm90IHVuaXF1ZSBpbiBiaW4gJyVzJywgbm90IGFkZGluZyIsCi0gICAgICAgIGVsZW1fbmFtZSwgR1NUX0VMRU1FTlRfTkFNRSAoYmluKSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0gICAgZ19mcmVlIChlbGVtX25hbWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaGFkX3BhcmVudDoKLSAgewotICAgIGdfd2FybmluZyAoIkVsZW1lbnQgJyVzJyBhbHJlYWR5IGhhcyBwYXJlbnQiLCBlbGVtX25hbWUpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgIGdfZnJlZSAoZWxlbV9uYW1lKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYmluX3NldF9zdXBwcmVzc2VkX2ZsYWdzOgotICogQGJpbjogYSAjR3N0QmluCi0gKiBAZmxhZ3M6IHRoZSAjR3N0RWxlbWVudEZsYWdzIHRvIHN1cHByZXNzCi0gKgotICogU3VwcHJlc3MgdGhlIGdpdmVuIGZsYWdzIG9uIHRoZSBiaW4uICNHc3RFbGVtZW50RmxhZ3Mgb2YgYQotICogY2hpbGQgZWxlbWVudCBhcmUgcHJvcGFnYXRlZCB3aGVuIGl0IGlzIGFkZGVkIHRvIHRoZSBiaW4uCi0gKiBXaGVuIHN1cHByZXNzZWQgZmxhZ3MgYXJlIHNldCwgdGhvc2Ugc3BlY2lmaWVkIGZsYWdzIHdpbGwKLSAqIG5vdCBiZSBwcm9wYWdhdGVkIHRvIHRoZSBiaW4uCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi12b2lkCi1nc3RfYmluX3NldF9zdXBwcmVzc2VkX2ZsYWdzIChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnRGbGFncyBmbGFncykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICBiaW4tPnByaXYtPnN1cHByZXNzZWRfZmxhZ3MgPSBiaW4tPnByaXYtPnN1cHByZXNzZWRfZmxhZ3MgfCBmbGFnczsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiU2V0IHN1cHByZXNzZWQgZmxhZ3MoMHgleCkgdG8gYmluICclcyciLCBmbGFncywKLSAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGJpbikpOwotfQotCi0vKioKLSAqIGdzdF9iaW5fZ2V0X3N1cHByZXNzZWRfZmxhZ3M6Ci0gKiBAYmluOiBhICNHc3RCaW4KLSAqCi0gKiBSZXR1cm4gdGhlIHN1cHByZXNzZWQgZmxhZ3Mgb2YgdGhlIGJpbi4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IHRoZSBiaW4ncyBzdXBwcmVzc2VkICNHc3RFbGVtZW50RmxhZ3MuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0RWxlbWVudEZsYWdzCi1nc3RfYmluX2dldF9zdXBwcmVzc2VkX2ZsYWdzIChHc3RCaW4gKiBiaW4pCi17Ci0gIEdzdEVsZW1lbnRGbGFncyByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIDApOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgcmVzID0gYmluLT5wcml2LT5zdXBwcmVzc2VkX2ZsYWdzOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKiBzaWduYWwgdmZ1bmMsIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBuZXcgZWxlbWVudCB3YXMgYWRkZWQgKi8KLXN0YXRpYyB2b2lkCi1nc3RfYmluX2RlZXBfZWxlbWVudF9hZGRlZF9mdW5jIChHc3RCaW4gKiBiaW4sIEdzdEJpbiAqIHN1Yl9iaW4sCi0gICAgR3N0RWxlbWVudCAqIGNoaWxkKQotewotICBHc3RCaW4gKnBhcmVudF9iaW47Ci0KLSAgcGFyZW50X2JpbiA9IChHc3RCaW4gKikgZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKGJpbikpOwotICBpZiAocGFyZW50X2JpbiA9PSBOVUxMKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGJpbiwgIm5vIHBhcmVudCwgcmVhY2hlZCB0b3AtbGV2ZWwiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAocGFyZW50X2JpbiwgImVtaXR0aW5nIGRlZXAtZWxlbWVudC1hZGRlZCBmb3IgZWxlbWVudCAiCi0gICAgICAiJSIgR1NUX1BUUl9GT1JNQVQgIiB3aGljaCBoYXMganVzdCBiZWVuIGFkZGVkIHRvICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgc3ViX2JpbiwgY2hpbGQpOwotCi0gIGdfc2lnbmFsX2VtaXQgKHBhcmVudF9iaW4sIGdzdF9iaW5fc2lnbmFsc1tERUVQX0VMRU1FTlRfQURERURdLCAwLCBzdWJfYmluLAotICAgICAgY2hpbGQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudF9iaW4pOwotfQotCi0vKiBzaWduYWwgdmZ1bmMsIHdpbGwgYmUgY2FsbGVkIHdoZW4gYW4gZWxlbWVudCB3YXMgcmVtb3ZlZCAqLwotc3RhdGljIHZvaWQKLWdzdF9iaW5fZGVlcF9lbGVtZW50X3JlbW92ZWRfZnVuYyAoR3N0QmluICogYmluLCBHc3RCaW4gKiBzdWJfYmluLAotICAgIEdzdEVsZW1lbnQgKiBjaGlsZCkKLXsKLSAgR3N0QmluICpwYXJlbnRfYmluOwotCi0gIHBhcmVudF9iaW4gPSAoR3N0QmluICopIGdzdF9vYmplY3RfZ2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChiaW4pKTsKLSAgaWYgKHBhcmVudF9iaW4gPT0gTlVMTCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChiaW4sICJubyBwYXJlbnQsIHJlYWNoZWQgdG9wLWxldmVsIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcmVudF9iaW4sICJlbWl0dGluZyBkZWVwLWVsZW1lbnQtcmVtb3ZlZCBmb3IgZWxlbWVudCAiCi0gICAgICAiJSIgR1NUX1BUUl9GT1JNQVQgIiB3aGljaCBoYXMganVzdCBiZWVuIHJlbW92ZWQgZnJvbSAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIHN1Yl9iaW4sIGNoaWxkKTsKLQotICBnX3NpZ25hbF9lbWl0IChwYXJlbnRfYmluLCBnc3RfYmluX3NpZ25hbHNbREVFUF9FTEVNRU5UX1JFTU9WRURdLCAwLCBzdWJfYmluLAotICAgICAgY2hpbGQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudF9iaW4pOwotfQotCi0vKioKLSAqIGdzdF9iaW5fYWRkOgotICogQGJpbjogYSAjR3N0QmluCi0gKiBAZWxlbWVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEVsZW1lbnQgdG8gYWRkCi0gKgotICogQWRkcyB0aGUgZ2l2ZW4gZWxlbWVudCB0byB0aGUgYmluLiAgU2V0cyB0aGUgZWxlbWVudCdzIHBhcmVudCwgYW5kIHRodXMKLSAqIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgZWxlbWVudC4gQW4gZWxlbWVudCBjYW4gb25seSBiZSBhZGRlZCB0byBvbmUgYmluLgotICoKLSAqIElmIHRoZSBlbGVtZW50J3MgcGFkcyBhcmUgbGlua2VkIHRvIG90aGVyIHBhZHMsIHRoZSBwYWRzIHdpbGwgYmUgdW5saW5rZWQKLSAqIGJlZm9yZSB0aGUgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgYmluLgotICoKLSAqIDxub3RlPgotICogV2hlbiB5b3UgYWRkIGFuIGVsZW1lbnQgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIHBpcGVsaW5lLCB5b3Ugd2lsbCBoYXZlIHRvCi0gKiB0YWtlIGNhcmUgdG8gc2V0IHRoZSBzdGF0ZSBvZiB0aGUgbmV3bHktYWRkZWQgZWxlbWVudCB0byB0aGUgZGVzaXJlZAotICogc3RhdGUgKHVzdWFsbHkgUExBWUlORyBvciBQQVVTRUQsIHNhbWUgeW91IHNldCB0aGUgcGlwZWxpbmUgdG8gb3JpZ2luYWxseSkKLSAqIHdpdGggZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKCksIG9yIHVzZSBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KCkuCi0gKiBUaGUgYmluIG9yIHBpcGVsaW5lIHdpbGwgbm90IHRha2UgY2FyZSBvZiB0aGlzIGZvciB5b3UuCi0gKiA8L25vdGU+Ci0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZWxlbWVudCBjb3VsZCBiZSBhZGRlZCwgJUZBTFNFIGlmCi0gKiB0aGUgYmluIGRvZXMgbm90IHdhbnQgdG8gYWNjZXB0IHRoZSBlbGVtZW50LgotICovCi1nYm9vbGVhbgotZ3N0X2Jpbl9hZGQgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEJpbkNsYXNzICpiY2xhc3M7Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pICE9IGVsZW1lbnQsIEZBTFNFKTsKLQotICBiY2xhc3MgPSBHU1RfQklOX0dFVF9DTEFTUyAoYmluKTsKLQotICBpZiAoR19VTkxJS0VMWSAoYmNsYXNzLT5hZGRfZWxlbWVudCA9PSBOVUxMKSkKLSAgICBnb3RvIG5vX2Z1bmN0aW9uOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEFSRU5UQUdFLCAiYWRkaW5nIGVsZW1lbnQgJXMgdG8gYmluICVzIiwKLSAgICAgIEdTVF9TVFJfTlVMTCAoR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpLAotICAgICAgR1NUX1NUUl9OVUxMIChHU1RfRUxFTUVOVF9OQU1FIChiaW4pKSk7Ci0KLSAgR1NUX1RSQUNFUl9CSU5fQUREX1BSRSAoYmluLCBlbGVtZW50KTsKLSAgcmVzdWx0ID0gYmNsYXNzLT5hZGRfZWxlbWVudCAoYmluLCBlbGVtZW50KTsKLSAgR1NUX1RSQUNFUl9CSU5fQUREX1BPU1QgKGJpbiwgZWxlbWVudCwgcmVzdWx0KTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SIGhhbmRsaW5nICovCi1ub19mdW5jdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoImFkZGluZyBlbGVtZW50cyB0byBiaW4gJyVzJyBpcyBub3Qgc3VwcG9ydGVkIiwKLSAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoYmluKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIHJlbW92ZSBhbiBlbGVtZW50IGZyb20gdGhlIGJpbgotICoKLSAqIE1UIHNhZmUKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmluX3JlbW92ZV9mdW5jIChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnY2hhciAqZWxlbV9uYW1lOwotICBHc3RJdGVyYXRvciAqaXQ7Ci0gIGdib29sZWFuIGlzX3NpbmssIGlzX3NvdXJjZSwgcHJvdmlkZXNfY2xvY2ssIHJlcXVpcmVzX2Nsb2NrOwotICBnYm9vbGVhbiBvdGhlcnNpbmssIG90aGVyc291cmNlLCBvdGhlcnByb3ZpZGVyLCBvdGhlcnJlcXVpcmVyLCBmb3VuZDsKLSAgR3N0TWVzc2FnZSAqY2xvY2tfbWVzc2FnZSA9IE5VTEw7Ci0gIEdzdENsb2NrICoqcHJvdmlkZWRfY2xvY2tfcDsKLSAgR3N0RWxlbWVudCAqKmNsb2NrX3Byb3ZpZGVyX3A7Ci0gIEdMaXN0ICp3YWxrLCAqbmV4dDsKLSAgZ2Jvb2xlYW4gb3RoZXJfYXN5bmMsIHRoaXNfYXN5bmMsIGhhdmVfbm9fcHJlcm9sbDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImVsZW1lbnQgOiVzIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotCi0gIC8qIHdlIG9idmlvdXNseSBjYW4ndCByZW1vdmUgb3Vyc2VsZiBmcm9tIG91cnNlbGYgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGVsZW1lbnQgPT0gR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSkpCi0gICAgZ290byByZW1vdmluZ19pdHNlbGY7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIGVsZW1fbmFtZSA9IGdfc3RyZHVwIChHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0KLSAgaWYgKEdTVF9PQkpFQ1RfUEFSRU5UIChlbGVtZW50KSAhPSBHU1RfT0JKRUNUX0NBU1QgKGJpbikpCi0gICAgZ290byBub3RfaW5fYmluOwotCi0gIC8qIHJlbW92ZSB0aGUgcGFyZW50IHJlZiAqLwotICBHU1RfT0JKRUNUX1BBUkVOVCAoZWxlbWVudCkgPSBOVUxMOwotCi0gIC8qIGdyYWIgZWxlbWVudCBuYW1lIHNvIHdlIGNhbiBwcmludCBpdCAqLwotICBpc19zaW5rID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfRkxBR19TSU5LKTsKLSAgaXNfc291cmNlID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UpOwotICBwcm92aWRlc19jbG9jayA9Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0spOwotICByZXF1aXJlc19jbG9jayA9Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0spOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgZm91bmQgPSBGQUxTRTsKLSAgb3RoZXJzaW5rID0gRkFMU0U7Ci0gIG90aGVyc291cmNlID0gRkFMU0U7Ci0gIG90aGVycHJvdmlkZXIgPSBGQUxTRTsKLSAgb3RoZXJyZXF1aXJlciA9IEZBTFNFOwotICBoYXZlX25vX3ByZXJvbGwgPSBGQUxTRTsKLSAgLyogaXRlcmF0ZSB0aGUgZWxlbWVudHMsIHdlIGNvbGxlY3Qgd2hpY2ggb25lcyBhcmUgYXN5bmMgYW5kIG5vX3ByZXJvbGwuIFdlCi0gICAqIGFsc28gcmVtb3ZlIHRoZSBlbGVtZW50IHdoZW4gd2UgZmluZCBpdC4gKi8KLSAgZm9yICh3YWxrID0gYmluLT5jaGlsZHJlbjsgd2Fsazsgd2FsayA9IG5leHQpIHsKLSAgICBHc3RFbGVtZW50ICpjaGlsZCA9IEdTVF9FTEVNRU5UX0NBU1QgKHdhbGstPmRhdGEpOwotCi0gICAgbmV4dCA9IGdfbGlzdF9uZXh0ICh3YWxrKTsKLQotICAgIGlmIChjaGlsZCA9PSBlbGVtZW50KSB7Ci0gICAgICBmb3VuZCA9IFRSVUU7Ci0gICAgICAvKiByZW1vdmUgdGhlIGVsZW1lbnQgKi8KLSAgICAgIGJpbi0+Y2hpbGRyZW4gPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGJpbi0+Y2hpbGRyZW4sIHdhbGspOwotICAgIH0gZWxzZSB7Ci0gICAgICBnYm9vbGVhbiBjaGlsZF9zaW5rLCBjaGlsZF9zb3VyY2UsIGNoaWxkX3Byb3ZpZGVyLCBjaGlsZF9yZXF1aXJlcjsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChjaGlsZCk7Ci0gICAgICBjaGlsZF9zaW5rID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoY2hpbGQsIEdTVF9FTEVNRU5UX0ZMQUdfU0lOSyk7Ci0gICAgICBjaGlsZF9zb3VyY2UgPSBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChjaGlsZCwgR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UpOwotICAgICAgY2hpbGRfcHJvdmlkZXIgPQotICAgICAgICAgIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGNoaWxkLCBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0spOwotICAgICAgY2hpbGRfcmVxdWlyZXIgPQotICAgICAgICAgIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGNoaWxkLCBHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0spOwotICAgICAgLyogd2hlbiB3ZSByZW1vdmUgYSBzaW5rLCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgc2lua3MuICovCi0gICAgICBpZiAoaXNfc2luayAmJiAhb3RoZXJzaW5rICYmIGNoaWxkX3NpbmspCi0gICAgICAgIG90aGVyc2luayA9IFRSVUU7Ci0gICAgICBpZiAoaXNfc291cmNlICYmICFvdGhlcnNvdXJjZSAmJiBjaGlsZF9zb3VyY2UpCi0gICAgICAgIG90aGVyc291cmNlID0gVFJVRTsKLSAgICAgIGlmIChwcm92aWRlc19jbG9jayAmJiAhb3RoZXJwcm92aWRlciAmJiBjaGlsZF9wcm92aWRlcikKLSAgICAgICAgb3RoZXJwcm92aWRlciA9IFRSVUU7Ci0gICAgICBpZiAocmVxdWlyZXNfY2xvY2sgJiYgIW90aGVycmVxdWlyZXIgJiYgY2hpbGRfcmVxdWlyZXIpCi0gICAgICAgIG90aGVycmVxdWlyZXIgPSBUUlVFOwotICAgICAgLyogY2hlY2sgaWYgd2UgaGF2ZSBOT19QUkVST0xMIGNoaWxkcmVuICovCi0gICAgICBpZiAoR1NUX1NUQVRFX1JFVFVSTiAoY2hpbGQpID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCkKLSAgICAgICAgaGF2ZV9ub19wcmVyb2xsID0gVFJVRTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjaGlsZCk7Ci0gICAgfQotICB9Ci0KLSAgLyogdGhlIGVsZW1lbnQgbXVzdCBoYXZlIGJlZW4gaW4gdGhlIGJpbidzIGxpc3Qgb2YgY2hpbGRyZW4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFmb3VuZCkpCi0gICAgZ290byBub3RfaW5fYmluOwotCi0gIC8qIHdlIG5vdyByZW1vdmVkIHRoZSBlbGVtZW50IGZyb20gdGhlIGxpc3Qgb2YgZWxlbWVudHMsIGluY3JlbWVudCB0aGUgY29va2llCi0gICAqIHNvIHRoYXQgb3RoZXJzIGNhbiBkZXRlY3QgYSBjaGFuZ2UgaW4gdGhlIGNoaWxkcmVuIGxpc3QuICovCi0gIGJpbi0+bnVtY2hpbGRyZW4tLTsKLSAgYmluLT5jaGlsZHJlbl9jb29raWUrKzsKLSAgaWYgKCFHU1RfQklOX0lTX05PX1JFU1lOQyAoYmluKSkKLSAgICBiaW4tPnByaXYtPnN0cnVjdHVyZV9jb29raWUrKzsKLQotICBpZiAoaXNfc2luayAmJiAhb3RoZXJzaW5rCi0gICAgICAmJiAhKGJpbi0+cHJpdi0+c3VwcHJlc3NlZF9mbGFncyAmIEdTVF9FTEVNRU5UX0ZMQUdfU0lOSykpIHsKLSAgICAvKiB3ZSdyZSBub3QgYSBzaW5rIGFueW1vcmUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJ3ZSByZW1vdmVkIHRoZSBsYXN0IHNpbmsiKTsKLSAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKGJpbiwgR1NUX0VMRU1FTlRfRkxBR19TSU5LKTsKLSAgfQotICBpZiAoaXNfc291cmNlICYmICFvdGhlcnNvdXJjZQotICAgICAgJiYgIShiaW4tPnByaXYtPnN1cHByZXNzZWRfZmxhZ3MgJiBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSkpIHsKLSAgICAvKiB3ZSdyZSBub3QgYSBzb3VyY2UgYW55bW9yZSAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIndlIHJlbW92ZWQgdGhlIGxhc3Qgc291cmNlIik7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChiaW4sIEdTVF9FTEVNRU5UX0ZMQUdfU09VUkNFKTsKLSAgfQotICBpZiAocHJvdmlkZXNfY2xvY2sgJiYgIW90aGVycHJvdmlkZXIKLSAgICAgICYmICEoYmluLT5wcml2LT5zdXBwcmVzc2VkX2ZsYWdzICYgR1NUX0VMRU1FTlRfRkxBR19QUk9WSURFX0NMT0NLKSkgewotICAgIC8qIHdlJ3JlIG5vdCBhIGNsb2NrIHByb3ZpZGVyIGFueW1vcmUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJ3ZSByZW1vdmVkIHRoZSBsYXN0IGNsb2NrIHByb3ZpZGVyIik7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChiaW4sIEdTVF9FTEVNRU5UX0ZMQUdfUFJPVklERV9DTE9DSyk7Ci0gIH0KLSAgaWYgKHJlcXVpcmVzX2Nsb2NrICYmICFvdGhlcnJlcXVpcmVyCi0gICAgICAmJiAhKGJpbi0+cHJpdi0+c3VwcHJlc3NlZF9mbGFncyAmIEdTVF9FTEVNRU5UX0ZMQUdfUkVRVUlSRV9DTE9DSykpIHsKLSAgICAvKiB3ZSdyZSBub3QgYSBjbG9jayByZXF1aXJlciBhbnltb3JlICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAid2UgcmVtb3ZlZCB0aGUgbGFzdCBjbG9jayByZXF1aXJlciIpOwotICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAoYmluLCBHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0spOwotICB9Ci0KLSAgLyogaWYgdGhlIGNsb2NrIHByb3ZpZGVyIGZvciB0aGlzIGVsZW1lbnQgaXMgcmVtb3ZlZCwgd2UgbG9zdAotICAgKiB0aGUgY2xvY2sgYXMgd2VsbCwgd2UgbmVlZCB0byBpbmZvcm0gdGhlIHBhcmVudCBvZiB0aGlzCi0gICAqIHNvIHRoYXQgaXQgY2FuIHNlbGVjdCBhIG5ldyBjbG9jayAqLwotICBpZiAoYmluLT5jbG9ja19wcm92aWRlciA9PSBlbGVtZW50KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZWxlbWVudCBcIiVzXCIgcHJvdmlkZWQgdGhlIGNsb2NrIiwgZWxlbV9uYW1lKTsKLSAgICBiaW4tPmNsb2NrX2RpcnR5ID0gVFJVRTsKLSAgICBjbG9ja19tZXNzYWdlID0KLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3QgKEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSwgYmluLT5wcm92aWRlZF9jbG9jayk7Ci0gICAgcHJvdmlkZWRfY2xvY2tfcCA9ICZiaW4tPnByb3ZpZGVkX2Nsb2NrOwotICAgIGNsb2NrX3Byb3ZpZGVyX3AgPSAmYmluLT5jbG9ja19wcm92aWRlcjsKLSAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIHByb3ZpZGVkX2Nsb2NrX3AsIE5VTEwpOwotICAgIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgY2xvY2tfcHJvdmlkZXJfcCwgTlVMTCk7Ci0gIH0KLQotICAvKiByZW1vdmUgbWVzc2FnZXMgZm9yIHRoZSBlbGVtZW50LCBpZiB0aGVyZSB3YXMgYSBwZW5kaW5nIEFTWU5DX1NUQVJUCi0gICAqIG1lc3NhZ2Ugd2UgbXVzdCBzZWUgaWYgcmVtb3ZpbmcgdGhlIGVsZW1lbnQgY2F1c2VkIHRoZSBiaW4gdG8gbG9zZSBpdHMKLSAgICogYXN5bmMgc3RhdGUuICovCi0gIHRoaXNfYXN5bmMgPSBGQUxTRTsKLSAgb3RoZXJfYXN5bmMgPSBGQUxTRTsKLSAgZm9yICh3YWxrID0gYmluLT5tZXNzYWdlczsgd2Fsazsgd2FsayA9IG5leHQpIHsKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlID0gKEdzdE1lc3NhZ2UgKikgd2Fsay0+ZGF0YTsKLSAgICBHc3RFbGVtZW50ICpzcmMgPSBHU1RfRUxFTUVOVF9DQVNUIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKLSAgICBnYm9vbGVhbiByZW1vdmU7Ci0KLSAgICBuZXh0ID0gZ19saXN0X25leHQgKHdhbGspOwotICAgIHJlbW92ZSA9IEZBTFNFOwotCi0gICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVDoKLSAgICAgICAgaWYgKHNyYyA9PSBlbGVtZW50KQotICAgICAgICAgIHRoaXNfYXN5bmMgPSBUUlVFOwotICAgICAgICBlbHNlCi0gICAgICAgICAgb3RoZXJfYXN5bmMgPSBUUlVFOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImxvb2tpbmcgYXQgbWVzc2FnZSAlcCIsIG1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRToKLSAgICAgIHsKLSAgICAgICAgR3N0RWxlbWVudCAqb3duZXI7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAibG9va2luZyBhdCBzdHJ1Y3R1cmUgY2hhbmdlIG1lc3NhZ2UgJXAiLAotICAgICAgICAgICAgbWVzc2FnZSk7Ci0gICAgICAgIC8qIGl0J3MgdW5saWtlbHkgdGhhdCB0aGlzIG1lc3NhZ2UgaXMgc3RpbGwgaW4gdGhlIGxpc3Qgb2YgbWVzc2FnZXMKLSAgICAgICAgICogYmVjYXVzZSB0aGlzIHdvdWxkIG1lYW4gdGhhdCBhIGxpbmsvdW5saW5rIGlzIGJ1c3kgaW4gYW5vdGhlciB0aHJlYWQKLSAgICAgICAgICogd2hpbGUgd2UgcmVtb3ZlIHRoZSBlbGVtZW50LiBXZSBzdGlsbCBoYXZlIHRvIHJlbW92ZSB0aGUgbWVzc2FnZQotICAgICAgICAgKiBiZWNhdXNlIHdlIG1pZ2h0IG5vdCByZWNlaXZlIHRoZSBkb25lIG1lc3NhZ2UgYW55bW9yZSB3aGVuIHRoZSBlbGVtZW50Ci0gICAgICAgICAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgYmluLiAqLwotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlIChtZXNzYWdlLCBOVUxMLCAmb3duZXIsIE5VTEwpOwotICAgICAgICBpZiAob3duZXIgPT0gZWxlbWVudCkKLSAgICAgICAgICByZW1vdmUgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoc3JjID09IGVsZW1lbnQpCi0gICAgICByZW1vdmUgPSBUUlVFOwotCi0gICAgaWYgKHJlbW92ZSkgewotICAgICAgLyogZGVsZXRlIGFsbCBtZXNzYWdlIHR5cGVzICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJkZWxldGluZyBtZXNzYWdlICVwIG9mIGVsZW1lbnQgXCIlc1wiIiwKLSAgICAgICAgICBtZXNzYWdlLCBlbGVtX25hbWUpOwotICAgICAgYmluLT5tZXNzYWdlcyA9IGdfbGlzdF9kZWxldGVfbGluayAoYmluLT5tZXNzYWdlcywgd2Fsayk7Ci0gICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgfQotICB9Ci0KLSAgLyogZ2V0IGxhc3QgcmV0dXJuICovCi0gIHJldCA9IEdTVF9TVEFURV9SRVRVUk4gKGJpbik7Ci0KLSAgLyogbm8gbmVlZCB0byB1cGRhdGUgdGhlIHN0YXRlIGlmIHdlIGFyZSBpbiBlcnJvciAqLwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICBnb3RvIG5vX3N0YXRlX3JlY2FsYzsKLQotICBpZiAoIW90aGVyX2FzeW5jICYmIHRoaXNfYXN5bmMpIHsKLSAgICAvKiBhbGwgb3RoZXIgZWxlbWVudHMgd2VyZSBub3QgYXN5bmMgYW5kIHdlIHJlbW92ZWQgdGhlIGFzeW5jIG9uZSwKLSAgICAgKiBoYW5kbGUgdGhlIGFzeW5jLWRvbmUgY2FzZSBiZWNhdXNlIHdlIGFyZSBub3QgYXN5bmMgYW55bW9yZSBub3cuICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLAotICAgICAgICAid2UgcmVtb3ZlZCB0aGUgbGFzdCBhc3luYyBlbGVtZW50LCBoYXZlIG5vX3ByZXJvbGwgJWQiLAotICAgICAgICBoYXZlX25vX3ByZXJvbGwpOwotCi0gICAgLyogdGhlIGN1cnJlbnQgc3RhdGUgcmV0dXJuIG9mIHRoZSBiaW4gZGVwZW5kcyBvbiBpZiB0aGVyZSBhcmUgbm9fcHJlcm9sbAotICAgICAqIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZSBvciBub3QgKi8KLSAgICBpZiAoaGF2ZV9ub19wcmVyb2xsKQotICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOwotICAgIGVsc2UKLSAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLQotICAgIGJpbl9oYW5kbGVfYXN5bmNfZG9uZSAoYmluLCByZXQsIEZBTFNFLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAgICJyZWNhbGMgc3RhdGUgcHJlcm9sbDogJWQsIG90aGVyIGFzeW5jOiAlZCwgdGhpcyBhc3luYyAlZCIsCi0gICAgICAgIGhhdmVfbm9fcHJlcm9sbCwgb3RoZXJfYXN5bmMsIHRoaXNfYXN5bmMpOwotCi0gICAgaWYgKGhhdmVfbm9fcHJlcm9sbCkgewotICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOwotICAgIH0gZWxzZSBpZiAob3RoZXJfYXN5bmMpIHsKLSAgICAgIC8qIHRoZXJlIGFyZSBvdGhlciBhc3luYyBlbGVtZW50cyBhbmQgd2Ugd2VyZSBub3QgZG9pbmcgYW4gYXN5bmMgc3RhdGUKLSAgICAgICAqIGNoYW5nZSwgY2hhbmdlIG91ciBwZW5kaW5nIHN0YXRlIGFuZCBnbyBhc3luYyAqLwotICAgICAgaWYgKEdTVF9TVEFURV9QRU5ESU5HIChiaW4pID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpIHsKLSAgICAgICAgR1NUX1NUQVRFX05FWFQgKGJpbikgPSBHU1RfU1RBVEUgKGJpbik7Ci0gICAgICAgIEdTVF9TVEFURV9QRU5ESU5HIChiaW4pID0gR1NUX1NUQVRFIChiaW4pOwotICAgICAgfQotICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKLSAgICB9Ci0gICAgR1NUX1NUQVRFX1JFVFVSTiAoYmluKSA9IHJldDsKLSAgfQotbm9fc3RhdGVfcmVjYWxjOgotICAvKiBjbGVhciBidXMgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZWxlbWVudCwgTlVMTCk7Ci0gIC8qIENsZWFyIHRoZSBjbG9jayB3ZSBwcm92aWRlZCB0byB0aGUgZWxlbWVudCAqLwotICBnc3RfZWxlbWVudF9zZXRfY2xvY2sgKGVsZW1lbnQsIE5VTEwpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICBpZiAoY2xvY2tfbWVzc2FnZSkKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIGNsb2NrX21lc3NhZ2UpOwotCi0gIC8qIHVubGluayBhbGwgbGlua2VkIHBhZHMgKi8KLSAgaXQgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKGVsZW1lbnQpOwotICB3aGlsZSAoZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggKGl0LCAoR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24pIHVubGlua19wYWRzLAotICAgICAgICAgIE5VTEwpID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCi0gICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfUEFSRU5UQUdFLCBiaW4sICJyZW1vdmVkIGNoaWxkIFwiJXNcIiIsCi0gICAgICBlbGVtX25hbWUpOwotCi0gIGdfc2lnbmFsX2VtaXQgKGJpbiwgZ3N0X2Jpbl9zaWduYWxzW0VMRU1FTlRfUkVNT1ZFRF0sIDAsIGVsZW1lbnQpOwotICBnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCAoKEdzdENoaWxkUHJveHkgKikgYmluLCAoR09iamVjdCAqKSBlbGVtZW50LAotICAgICAgZWxlbV9uYW1lKTsKLQotICBnc3RfYmluX2RvX2RlZXBfYWRkX3JlbW92ZSAoYmluLCBnc3RfYmluX3NpZ25hbHNbREVFUF9FTEVNRU5UX1JFTU9WRURdLAotICAgICAgImRlZXAtZWxlbWVudC1yZW1vdmVkIiwgZWxlbWVudCk7Ci0KLSAgZ19mcmVlIChlbGVtX25hbWUpOwotICAvKiBlbGVtZW50IGlzIHJlYWxseSBvdXQgb2Ygb3VyIGNvbnRyb2wgbm93ICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SIGhhbmRsaW5nICovCi1yZW1vdmluZ19pdHNlbGY6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gICAgZ193YXJuaW5nICgiQ2Fubm90IHJlbW92ZSBiaW4gJyVzJyBmcm9tIGl0c2VsZiIsIEdTVF9FTEVNRU5UX05BTUUgKGJpbikpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm90X2luX2JpbjoKLSAgewotICAgIGdfd2FybmluZyAoIkVsZW1lbnQgJyVzJyBpcyBub3QgaW4gYmluICclcyciLCBlbGVtX25hbWUsCi0gICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGJpbikpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICBnX2ZyZWUgKGVsZW1fbmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2Jpbl9yZW1vdmU6Ci0gKiBAYmluOiBhICNHc3RCaW4KLSAqIEBlbGVtZW50OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0RWxlbWVudCB0byByZW1vdmUKLSAqCi0gKiBSZW1vdmVzIHRoZSBlbGVtZW50IGZyb20gdGhlIGJpbiwgdW5wYXJlbnRpbmcgaXQgYXMgd2VsbC4KLSAqIFVucGFyZW50aW5nIHRoZSBlbGVtZW50IG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBiZSBkZXJlZmVyZW5jZWQsCi0gKiBzbyBpZiB0aGUgYmluIGhvbGRzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnQKLSAqIHdpbGwgYmUgZnJlZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgYmluLiAgSWYgeW91Ci0gKiB3YW50IHRoZSBlbGVtZW50IHRvIHN0aWxsIGV4aXN0IGFmdGVyIHJlbW92aW5nLCB5b3UgbmVlZCB0byBjYWxsCi0gKiBnc3Rfb2JqZWN0X3JlZigpIGJlZm9yZSByZW1vdmluZyBpdCBmcm9tIHRoZSBiaW4uCi0gKgotICogSWYgdGhlIGVsZW1lbnQncyBwYWRzIGFyZSBsaW5rZWQgdG8gb3RoZXIgcGFkcywgdGhlIHBhZHMgd2lsbCBiZSB1bmxpbmtlZAotICogYmVmb3JlIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgYmluLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGVsZW1lbnQgY291bGQgYmUgcmVtb3ZlZCwgJUZBTFNFIGlmCi0gKiB0aGUgYmluIGRvZXMgbm90IHdhbnQgdG8gcmVtb3ZlIHRoZSBlbGVtZW50LgotICovCi1nYm9vbGVhbgotZ3N0X2Jpbl9yZW1vdmUgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEJpbkNsYXNzICpiY2xhc3M7Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pICE9IGVsZW1lbnQsIEZBTFNFKTsKLQotICBiY2xhc3MgPSBHU1RfQklOX0dFVF9DTEFTUyAoYmluKTsKLQotICBpZiAoR19VTkxJS0VMWSAoYmNsYXNzLT5yZW1vdmVfZWxlbWVudCA9PSBOVUxMKSkKLSAgICBnb3RvIG5vX2Z1bmN0aW9uOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEFSRU5UQUdFLCAicmVtb3ZpbmcgZWxlbWVudCAlcyBmcm9tIGJpbiAlcyIsCi0gICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSwgR1NUX0VMRU1FTlRfTkFNRSAoYmluKSk7Ci0KLSAgR1NUX1RSQUNFUl9CSU5fUkVNT1ZFX1BSRSAoYmluLCBlbGVtZW50KTsKLSAgcmVzdWx0ID0gYmNsYXNzLT5yZW1vdmVfZWxlbWVudCAoYmluLCBlbGVtZW50KTsKLSAgR1NUX1RSQUNFUl9CSU5fUkVNT1ZFX1BPU1QgKGJpbiwgcmVzdWx0KTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SIGhhbmRsaW5nICovCi1ub19mdW5jdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoInJlbW92aW5nIGVsZW1lbnRzIGZyb20gYmluICclcycgaXMgbm90IHN1cHBvcnRlZCIsCi0gICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGJpbikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50czoKLSAqIEBiaW46IGEgI0dzdEJpbgotICoKLSAqIEdldHMgYW4gaXRlcmF0b3IgZm9yIHRoZSBlbGVtZW50cyBpbiB0aGlzIGJpbi4KLSAqCi0gKiBNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdEl0ZXJhdG9yIG9mICNHc3RFbGVtZW50LAotICogb3IgJU5VTEwKLSAqLwotR3N0SXRlcmF0b3IgKgotZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzIChHc3RCaW4gKiBiaW4pCi17Ci0gIEdzdEl0ZXJhdG9yICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX25ld19saXN0IChHU1RfVFlQRV9FTEVNRU5ULAotICAgICAgR1NUX09CSkVDVF9HRVRfTE9DSyAoYmluKSwKLSAgICAgICZiaW4tPmNoaWxkcmVuX2Nvb2tpZSwgJmJpbi0+Y2hpbGRyZW4sIChHT2JqZWN0ICopIGJpbiwgTlVMTCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBHc3RJdGVyYXRvckl0ZW0KLWl0ZXJhdGVfY2hpbGRfcmVjdXJzZSAoR3N0SXRlcmF0b3IgKiBpdCwgY29uc3QgR1ZhbHVlICogaXRlbSkKLXsKLSAgR3N0RWxlbWVudCAqY2hpbGQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKGl0ZW0pOwotCi0gIGlmIChHU1RfSVNfQklOIChjaGlsZCkpIHsKLSAgICBHc3RJdGVyYXRvciAqb3RoZXIgPSBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSAoR1NUX0JJTl9DQVNUIChjaGlsZCkpOwotCi0gICAgZ3N0X2l0ZXJhdG9yX3B1c2ggKGl0LCBvdGhlcik7Ci0gIH0KLSAgcmV0dXJuIEdTVF9JVEVSQVRPUl9JVEVNX1BBU1M7Ci19Ci0KLS8qKgotICogZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2U6Ci0gKiBAYmluOiBhICNHc3RCaW4KLSAqCi0gKiBHZXRzIGFuIGl0ZXJhdG9yIGZvciB0aGUgZWxlbWVudHMgaW4gdGhpcyBiaW4uCi0gKiBUaGlzIGl0ZXJhdG9yIHJlY3Vyc2VzIGludG8gR3N0QmluIGNoaWxkcmVuLgotICoKLSAqIE1UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSAjR3N0SXRlcmF0b3Igb2YgI0dzdEVsZW1lbnQsCi0gKiBvciAlTlVMTAotICovCi1Hc3RJdGVyYXRvciAqCi1nc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSAoR3N0QmluICogYmluKQotewotICBHc3RJdGVyYXRvciAqcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQklOIChiaW4pLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gIHJlc3VsdCA9IGdzdF9pdGVyYXRvcl9uZXdfbGlzdCAoR1NUX1RZUEVfRUxFTUVOVCwKLSAgICAgIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKGJpbiksCi0gICAgICAmYmluLT5jaGlsZHJlbl9jb29raWUsCi0gICAgICAmYmluLT5jaGlsZHJlbiwKLSAgICAgIChHT2JqZWN0ICopIGJpbiwgKEdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uKSBpdGVyYXRlX2NoaWxkX3JlY3Vyc2UpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiByZXR1cm5zIDAgd2hlbiBUUlVFIGJlY2F1c2UgdGhpcyBpcyBhIEdDb21wYXJlRnVuYyAqLwotLyogTVQgc2FmZSAqLwotc3RhdGljIGdpbnQKLWJpbl9lbGVtZW50X2lzX3NpbmsgKEdzdEVsZW1lbnQgKiBjaGlsZCwgR3N0QmluICogYmluKQotewotICBnYm9vbGVhbiBpc19zaW5rOwotCi0gIC8qIHdlIGxvY2sgdGhlIGNoaWxkIGhlcmUgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGZ1bmN0aW9uIHRvCi0gICAqIGdldCBpdHMgbmFtZSBhbmQgZmxhZyBzYWZlbHkuICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY2hpbGQpOwotICBpc19zaW5rID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoY2hpbGQsIEdTVF9FTEVNRU5UX0ZMQUdfU0lOSyk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sCi0gICAgICAiY2hpbGQgJXMgJXMgc2luayIsIEdTVF9PQkpFQ1RfTkFNRSAoY2hpbGQpLCBpc19zaW5rID8gImlzIiA6ICJpcyBub3QiKTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoY2hpbGQpOwotICByZXR1cm4gaXNfc2luayA/IDAgOiAxOwotfQotCi1zdGF0aWMgZ2ludAotc2lua19pdGVyYXRvcl9maWx0ZXIgKGNvbnN0IEdWYWx1ZSAqIHZjaGlsZCwgR1ZhbHVlICogdmJpbikKLXsKLSAgR3N0QmluICpiaW4gPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZiaW4pOwotICBHc3RFbGVtZW50ICpjaGlsZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmNoaWxkKTsKLQotICByZXR1cm4gKGJpbl9lbGVtZW50X2lzX3NpbmsgKGNoaWxkLCBiaW4pKTsKLX0KLQotLyoqCi0gKiBnc3RfYmluX2l0ZXJhdGVfc2lua3M6Ci0gKiBAYmluOiBhICNHc3RCaW4KLSAqCi0gKiBHZXRzIGFuIGl0ZXJhdG9yIGZvciBhbGwgZWxlbWVudHMgaW4gdGhlIGJpbiB0aGF0IGhhdmUgdGhlCi0gKiAjR1NUX0VMRU1FTlRfRkxBR19TSU5LIGZsYWcgc2V0LgotICoKLSAqIE1UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSAjR3N0SXRlcmF0b3Igb2YgI0dzdEVsZW1lbnQsCi0gKiBvciAlTlVMTAotICovCi1Hc3RJdGVyYXRvciAqCi1nc3RfYmluX2l0ZXJhdGVfc2lua3MgKEdzdEJpbiAqIGJpbikKLXsKLSAgR3N0SXRlcmF0b3IgKmNoaWxkcmVuOwotICBHc3RJdGVyYXRvciAqcmVzdWx0OwotICBHVmFsdWUgdmJpbiA9IHsgMCwgfTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgTlVMTCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmJpbiwgR1NUX1RZUEVfQklOKTsKLSAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmdmJpbiwgYmluKTsKLQotICBjaGlsZHJlbiA9IGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cyAoYmluKTsKLSAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZpbHRlciAoY2hpbGRyZW4sCi0gICAgICAoR0NvbXBhcmVGdW5jKSBzaW5rX2l0ZXJhdG9yX2ZpbHRlciwgJnZiaW4pOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZ2YmluKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiByZXR1cm5zIDAgd2hlbiBUUlVFIGJlY2F1c2UgdGhpcyBpcyBhIEdDb21wYXJlRnVuYyAqLwotLyogTVQgc2FmZSAqLwotc3RhdGljIGdpbnQKLWJpbl9lbGVtZW50X2lzX3NyYyAoR3N0RWxlbWVudCAqIGNoaWxkLCBHc3RCaW4gKiBiaW4pCi17Ci0gIGdib29sZWFuIGlzX3NyYzsKLQotICAvKiB3ZSBsb2NrIHRoZSBjaGlsZCBoZXJlIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBmdW5jdGlvbiB0bwotICAgKiBnZXQgaXRzIG5hbWUgYW5kIG90aGVyIGluZm8gc2FmZWx5LiAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGNoaWxkKTsKLSAgaXNfc3JjID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoY2hpbGQsIEdTVF9FTEVNRU5UX0ZMQUdfU09VUkNFKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGJpbiwKLSAgICAgICJjaGlsZCAlcyAlcyBzcmMiLCBHU1RfT0JKRUNUX05BTUUgKGNoaWxkKSwgaXNfc3JjID8gImlzIiA6ICJpcyBub3QiKTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoY2hpbGQpOwotICByZXR1cm4gaXNfc3JjID8gMCA6IDE7Ci19Ci0KLXN0YXRpYyBnaW50Ci1zcmNfaXRlcmF0b3JfZmlsdGVyIChjb25zdCBHVmFsdWUgKiB2Y2hpbGQsIEdWYWx1ZSAqIHZiaW4pCi17Ci0gIEdzdEJpbiAqYmluID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2YmluKTsKLSAgR3N0RWxlbWVudCAqY2hpbGQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZjaGlsZCk7Ci0KLSAgcmV0dXJuIChiaW5fZWxlbWVudF9pc19zcmMgKGNoaWxkLCBiaW4pKTsKLX0KLQotLyoqCi0gKiBnc3RfYmluX2l0ZXJhdGVfc291cmNlczoKLSAqIEBiaW46IGEgI0dzdEJpbgotICoKLSAqIEdldHMgYW4gaXRlcmF0b3IgZm9yIGFsbCBlbGVtZW50cyBpbiB0aGUgYmluIHRoYXQgaGF2ZSB0aGUKLSAqICNHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSBmbGFnIHNldC4KLSAqCi0gKiBNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdEl0ZXJhdG9yIG9mICNHc3RFbGVtZW50LAotICogb3IgJU5VTEwKLSAqLwotR3N0SXRlcmF0b3IgKgotZ3N0X2Jpbl9pdGVyYXRlX3NvdXJjZXMgKEdzdEJpbiAqIGJpbikKLXsKLSAgR3N0SXRlcmF0b3IgKmNoaWxkcmVuOwotICBHc3RJdGVyYXRvciAqcmVzdWx0OwotICBHVmFsdWUgdmJpbiA9IHsgMCwgfTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgTlVMTCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmJpbiwgR1NUX1RZUEVfQklOKTsKLSAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmdmJpbiwgYmluKTsKLQotICBjaGlsZHJlbiA9IGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cyAoYmluKTsKLSAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZpbHRlciAoY2hpbGRyZW4sCi0gICAgICAoR0NvbXBhcmVGdW5jKSBzcmNfaXRlcmF0b3JfZmlsdGVyLCAmdmJpbik7Ci0KLSAgZ192YWx1ZV91bnNldCAoJnZiaW4pOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBNVCBzYWZlCi0gKi8KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2Jpbl9nZXRfc3RhdGVfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlICogc3RhdGUsCi0gICAgR3N0U3RhdGUgKiBwZW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZW91dCkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiZ2V0dGluZyBzdGF0ZSIpOwotCi0gIHJldCA9Ci0gICAgICBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Z2V0X3N0YXRlIChlbGVtZW50LCBzdGF0ZSwgcGVuZGluZywKLSAgICAgIHRpbWVvdXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVG9wb2xvZ2ljYWxseSBzb3J0ZWQgaXRlcmF0b3IKLSAqIHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcKLSAqCi0gKiBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBncmFwaCwgYW4gZW50cnkgaXMga2VwdCBpbiBhIEhhc2hUYWJsZQotICogd2l0aCBpdHMgbnVtYmVyIG9mIHNyY3BhZCBjb25uZWN0aW9ucyAoZGVncmVlKS4KLSAqIFdlIHRoZW4gY2hhbmdlIHN0YXRlIG9mIGFsbCBlbGVtZW50cyB3aXRob3V0IGRlcGVuZGVuY2llcwotICogKGRlZ3JlZSAwKSBhbmQgZGVjcmVtZW50IHRoZSBkZWdyZWUgb2YgYWxsIGVsZW1lbnRzIGNvbm5lY3RlZAotICogb24gdGhlIHNpbmtwYWRzLiBXaGVuIGFuIGVsZW1lbnQgcmVhY2hlcyBkZWdyZWUgMCwgaXRzIHN0YXRlIGlzCi0gKiBjaGFuZ2VkIG5leHQuCi0gKiBXaGVuIGFsbCBlbGVtZW50cyBhcmUgaGFuZGxlZCB0aGUgYWxnb3JpdGhtIHN0b3BzLgotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0QmluU29ydEl0ZXJhdG9yCi17Ci0gIEdzdEl0ZXJhdG9yIGl0OwotICBHUXVldWUgcXVldWU7ICAgICAgICAgICAgICAgICAvKiBlbGVtZW50cyBxdWV1ZWQgZm9yIHN0YXRlIGNoYW5nZSAqLwotICBHc3RCaW4gKmJpbjsgICAgICAgICAgICAgICAgICAvKiBiaW4gd2UgaXRlcmF0ZSAqLwotICBnaW50IG1vZGU7ICAgICAgICAgICAgICAgICAgICAvKiBhZGRpbmcgb3IgcmVtb3ZpbmcgZGVwZW5kZW5jeSAqLwotICBHc3RFbGVtZW50ICpiZXN0OyAgICAgICAgICAgICAvKiBuZXh0IGVsZW1lbnQgd2l0aCBsZWFzdCBkZXBlbmRlbmNpZXMgKi8KLSAgZ2ludCBiZXN0X2RlZzsgICAgICAgICAgICAgICAgLyogYmVzdCBkZWdyZWUgKi8KLSAgR0hhc2hUYWJsZSAqaGFzaDsgICAgICAgICAgICAgLyogaGFzaHRhYmxlIHdpdGggZWxlbWVudCBkZXBlbmRlbmNpZXMgKi8KLSAgZ2Jvb2xlYW4gZGlydHk7ICAgICAgICAgICAgICAgLyogd2UgZGV0ZWN0ZWQgc3RydWN0dXJlIGNoYW5nZSAqLwotfSBHc3RCaW5Tb3J0SXRlcmF0b3I7Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X3RvX3F1ZXVlIChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBkYXRhOwotICBHUXVldWUgKnF1ZXVlID0gdXNlcl9kYXRhOwotCi0gIGdzdF9vYmplY3RfcmVmIChlbGVtZW50KTsKLSAgZ19xdWV1ZV9wdXNoX3RhaWwgKHF1ZXVlLCBlbGVtZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iaW5fc29ydF9pdGVyYXRvcl9jb3B5IChjb25zdCBHc3RCaW5Tb3J0SXRlcmF0b3IgKiBpdCwKLSAgICBHc3RCaW5Tb3J0SXRlcmF0b3IgKiBjb3B5KQotewotICBHSGFzaFRhYmxlSXRlciBpdGVyOwotICBncG9pbnRlciBrZXksIHZhbHVlOwotCi0gIGdfcXVldWVfaW5pdCAoJmNvcHktPnF1ZXVlKTsKLSAgZ19xdWV1ZV9mb3JlYWNoICgoR1F1ZXVlICopICYgaXQtPnF1ZXVlLCBjb3B5X3RvX3F1ZXVlLCAmY29weS0+cXVldWUpOwotCi0gIGNvcHktPmJpbiA9IGdzdF9vYmplY3RfcmVmIChpdC0+YmluKTsKLSAgaWYgKGl0LT5iZXN0KQotICAgIGNvcHktPmJlc3QgPSBnc3Rfb2JqZWN0X3JlZiAoaXQtPmJlc3QpOwotCi0gIGNvcHktPmhhc2ggPSBnX2hhc2hfdGFibGVfbmV3IChOVUxMLCBOVUxMKTsKLSAgZ19oYXNoX3RhYmxlX2l0ZXJfaW5pdCAoJml0ZXIsIGl0LT5oYXNoKTsKLSAgd2hpbGUgKGdfaGFzaF90YWJsZV9pdGVyX25leHQgKCZpdGVyLCAma2V5LCAmdmFsdWUpKQotICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKGNvcHktPmhhc2gsIGtleSwgdmFsdWUpOwotfQotCi0vKiB3ZSBhZGQgYW5kIHN1YnRyYWN0IDEgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNvbmZ1c2UgTlVMTCBhbmQgMCAqLwotI2RlZmluZSBIQVNIX1NFVF9ERUdSRUUoYml0LCBlbGVtLCBkZWcpIFwKLSAgICBnX2hhc2hfdGFibGVfcmVwbGFjZSAoYml0LT5oYXNoLCBlbGVtLCBHSU5UX1RPX1BPSU5URVIoZGVnKzEpKQotI2RlZmluZSBIQVNIX0dFVF9ERUdSRUUoYml0LCBlbGVtKSBcCi0gICAgKEdQT0lOVEVSX1RPX0lOVChnX2hhc2hfdGFibGVfbG9va3VwIChiaXQtPmhhc2gsIGVsZW0pKS0xKQotCi0vKiBhZGQgZWxlbWVudCB0byBxdWV1ZSBvZiBuZXh0IGVsZW1lbnRzIGluIHRoZSBpdGVyYXRvci4KLSAqIFdlIHB1c2ggYXQgdGhlIHRhaWwgdG8gZ2l2ZSBoaWdoZXIgcHJpb3JpdHkgZWxlbWVudHMgYQotICogY2hhbmNlIGZpcnN0ICovCi1zdGF0aWMgdm9pZAotYWRkX3RvX3F1ZXVlIChHc3RCaW5Tb3J0SXRlcmF0b3IgKiBiaXQsIEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHU1RfREVCVUdfT0JKRUNUIChiaXQtPmJpbiwgImFkZGluZyAnJXMnIHRvIHF1ZXVlIiwKLSAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgZ3N0X29iamVjdF9yZWYgKGVsZW1lbnQpOwotICBnX3F1ZXVlX3B1c2hfdGFpbCAoJmJpdC0+cXVldWUsIGVsZW1lbnQpOwotICBIQVNIX1NFVF9ERUdSRUUgKGJpdCwgZWxlbWVudCwgLTEpOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX2Zyb21fcXVldWUgKEdzdEJpblNvcnRJdGVyYXRvciAqIGJpdCwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdMaXN0ICpmaW5kOwotCi0gIGlmICgoZmluZCA9IGdfcXVldWVfZmluZCAoJmJpdC0+cXVldWUsIGVsZW1lbnQpKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpdC0+YmluLCAicmVtb3ZpbmcgJyVzJyBmcm9tIHF1ZXVlIiwKLSAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotCi0gICAgZ19xdWV1ZV9kZWxldGVfbGluayAoJmJpdC0+cXVldWUsIGZpbmQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpdC0+YmluLCAidW5hYmxlIHRvIHJlbW92ZSAnJXMnIGZyb20gcXVldWUiLAotICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gIH0KLX0KLQotLyogY2xlYXIgdGhlIHF1ZXVlLCB1bnJlZiBhbGwgb2JqZWN0cyBhcyB3ZSB0b29rIGEgcmVmIHdoZW4KLSAqIHdlIGFkZGVkIHRoZW0gdG8gdGhlIHF1ZXVlICovCi1zdGF0aWMgdm9pZAotY2xlYXJfcXVldWUgKEdRdWV1ZSAqIHF1ZXVlKQotewotICBncG9pbnRlciBwOwotCi0gIHdoaWxlICgocCA9IGdfcXVldWVfcG9wX2hlYWQgKHF1ZXVlKSkpCi0gICAgZ3N0X29iamVjdF91bnJlZiAocCk7Ci19Ci0KLS8qIHNldCBhbGwgZGVncmVlcyB0byAwLiBFbGVtZW50cyBtYXJrZWQgYXMgYSBzaW5rIGFyZQotICogYWRkZWQgdG8gdGhlIHF1ZXVlIGltbWVkaWF0ZWx5LiBTaW5jZSB3ZSBvbmx5IGxvb2sgYXQgdGhlIFNJTksgZmxhZyBvZiB0aGUKLSAqIGVsZW1lbnQsIGl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgYWRkIG5vbi1zaW5rcyB0byB0aGUgcXVldWUuIFRoZXNlIHdpbGwgYmUKLSAqIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUgYWdhaW4gd2hlbiB3ZSBjYW4gcHJvdmUgdGhhdCBpdCBwcm92aWRlcyBkYXRhIGZvciBzb21lCi0gKiBvdGhlciBlbGVtZW50LiAqLwotc3RhdGljIHZvaWQKLXJlc2V0X2RlZ3JlZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJpblNvcnRJdGVyYXRvciAqIGJpdCkKLXsKLSAgZ2Jvb2xlYW4gaXNfc2luazsKLQotICAvKiBzaW5rcyBhcmUgYWRkZWQgcmlnaHQgYXdheSAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICBpc19zaW5rID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfRkxBR19TSU5LKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIGlmIChpc19zaW5rKSB7Ci0gICAgYWRkX3RvX3F1ZXVlIChiaXQsIGVsZW1lbnQpOwotICB9IGVsc2UgewotICAgIC8qIG90aGVycyBhcmUgbWFya2VkIHdpdGggMCBhbmQgaGFuZGxlZCB3aGVuIHNpbmtzIGFyZSBkb25lICovCi0gICAgSEFTSF9TRVRfREVHUkVFIChiaXQsIGVsZW1lbnQsIDApOwotICB9Ci19Ci0KLS8qIGFkanVzdCB0aGUgZGVncmVlIG9mIGFsbCBlbGVtZW50cyBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuCi0gKiBlbGVtZW50LiBJZiBhIGRlZ3JlZSBvZiBhbiBlbGVtZW50IGRyb3BzIHRvIDAsIGl0IGlzCi0gKiBhZGRlZCB0byB0aGUgcXVldWUgb2YgZWxlbWVudHMgdG8gc2NoZWR1bGUgbmV4dC4KLSAqCi0gKiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSBub3QgdG8gY3Jvc3MgdGhlIGJpbiBib3VuZGFyeSB0aGlzIGVsZW1lbnQKLSAqIGJlbG9uZ3MgdG8uCi0gKi8KLXN0YXRpYyB2b2lkCi11cGRhdGVfZGVncmVlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QmluU29ydEl0ZXJhdG9yICogYml0KQotewotICBnYm9vbGVhbiBsaW5rZWQgPSBGQUxTRTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICAvKiBkb24ndCB0b3VjaCBkZWdyZWUgaWYgZWxlbWVudCBoYXMgbm8gc2lua3BhZHMgKi8KLSAgaWYgKGVsZW1lbnQtPm51bXNpbmtwYWRzICE9IDApIHsKLSAgICAvKiBsb29wIG92ZXIgYWxsIHNpbmtwYWRzLCBkZWNyZW1lbnQgZGVncmVlIGZvciBhbGwgY29ubmVjdGVkCi0gICAgICogZWxlbWVudHMgaW4gdGhpcyBiaW4gKi8KLSAgICBHTGlzdCAqcGFkczsKLQotICAgIGZvciAocGFkcyA9IGVsZW1lbnQtPnNpbmtwYWRzOyBwYWRzOyBwYWRzID0gZ19saXN0X25leHQgKHBhZHMpKSB7Ci0gICAgICBHc3RQYWQgKnBhZCwgKnBlZXI7Ci0KLSAgICAgIHBhZCA9IEdTVF9QQURfQ0FTVCAocGFkcy0+ZGF0YSk7Ci0KLSAgICAgIC8qIHdlJ3JlIGl0ZXJhdGluZyBvdmVyIHRoZSBzaW5rcGFkcywgY2hlY2sgaWYgaXQncyBidXN5IGluIGEgbGluay91bmxpbmsgKi8KLSAgICAgIGlmIChHX1VOTElLRUxZIChmaW5kX21lc3NhZ2UgKGJpdC0+YmluLCBHU1RfT0JKRUNUX0NBU1QgKHBhZCksCi0gICAgICAgICAgICAgICAgICBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFKSkpIHsKLSAgICAgICAgLyogbWFyayB0aGUgaXRlcmF0b3IgYXMgZGlydHkgYmVjYXVzZSB3ZSB3b24ndCBiZSB1cGRhdGluZyB0aGUgZGVncmVlCi0gICAgICAgICAqIG9mIHRoZSBwZWVyIHBhcmVudCBub3cuIFRoaXMgd291bGQgcmVzdWx0IGluIHRoZSAnbG9vcCBkZXRlY3RlZCcKLSAgICAgICAgICogbGF0ZXIgb24gYmVjYXVzZSB0aGUgcGVlciBwYXJlbnQgZWxlbWVudCBjb3VsZCBiZWNvbWUgdGhlIGJlc3QgbmV4dAotICAgICAgICAgKiBlbGVtZW50IHdpdGggYSBkZWdyZWUgPiAwLiBXZSB3aWxsIHNpbXBseSBjb250aW51ZSBvdXIgc3RhdGUKLSAgICAgICAgICogY2hhbmdlcyBhbmQgd2UnbGwgZXZlbnR1YWxseSByZXN5bmMgd2hlbiB0aGUgdW5saW5rIGNvbXBsZXRlZCBhbmQKLSAgICAgICAgICogdGhlIGl0ZXJhdG9yIGNvb2tpZSBpcyB1cGRhdGVkLiAqLwotICAgICAgICBiaXQtPmRpcnR5ID0gVFJVRTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmICgocGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCkpKSB7Ci0gICAgICAgIEdzdEVsZW1lbnQgKnBlZXJfZWxlbWVudDsKLQotICAgICAgICBpZiAoKHBlZXJfZWxlbWVudCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50IChwZWVyKSkpIHsKLSAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBlZXJfZWxlbWVudCk7Ci0gICAgICAgICAgLyogY2hlY2sgdGhhdCB3ZSBkb24ndCBnbyBvdXRzaWRlIG9mIHRoaXMgYmluICovCi0gICAgICAgICAgaWYgKEdTVF9PQkpFQ1RfQ0FTVCAocGVlcl9lbGVtZW50KS0+cGFyZW50ID09Ci0gICAgICAgICAgICAgIEdTVF9PQkpFQ1RfQ0FTVCAoYml0LT5iaW4pKSB7Ci0gICAgICAgICAgICBnaW50IG9sZF9kZWcsIG5ld19kZWc7Ci0KLSAgICAgICAgICAgIG9sZF9kZWcgPSBIQVNIX0dFVF9ERUdSRUUgKGJpdCwgcGVlcl9lbGVtZW50KTsKLQotICAgICAgICAgICAgLyogY2hlY2sgdG8gc2VlIGlmIHdlIGFkZGVkIGFuIGVsZW1lbnQgYXMgc2luayB0aGF0IHdhcyBub3QgcmVhbGx5IGEKLSAgICAgICAgICAgICAqIHNpbmsgYmVjYXVzZSBpdCB3YXMgY29ubmVjdGVkIHRvIHNvbWUgb3RoZXIgZWxlbWVudC4gKi8KLSAgICAgICAgICAgIGlmIChvbGRfZGVnID09IC0xKSB7Ci0gICAgICAgICAgICAgIHJlbW92ZV9mcm9tX3F1ZXVlIChiaXQsIHBlZXJfZWxlbWVudCk7Ci0gICAgICAgICAgICAgIG9sZF9kZWcgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV3X2RlZyA9IG9sZF9kZWcgKyBiaXQtPm1vZGU7Ci0KLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpdC0+YmluLAotICAgICAgICAgICAgICAgICJjaGFuZ2UgZWxlbWVudCAlcywgZGVncmVlICVkLT4lZCwgbGlua2VkIHRvICVzIiwKLSAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChwZWVyX2VsZW1lbnQpLCBvbGRfZGVnLCBuZXdfZGVnLAotICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLQotICAgICAgICAgICAgLyogdXBkYXRlIGRlZ3JlZSwgaXQgaXMgcG9zc2libGUgdGhhdCBhbiBlbGVtZW50IHdhcyBpbiAwIGFuZAotICAgICAgICAgICAgICogcmVhY2hlcyAtMSBoZXJlLiBUaGlzIHdvdWxkIG1lYW4gdGhhdCB0aGUgZWxlbWVudCBoYWQgbm8gc2lua3BhZHMKLSAgICAgICAgICAgICAqIGJ1dCBiZWNhbWUgbGlua2VkIHdoaWxlIHRoZSBzdGF0ZSBjaGFuZ2Ugd2FzIGhhcHBlbmluZy4gV2Ugd2lsbAotICAgICAgICAgICAgICogcmVzeW5jIG9uIHRoaXMgd2l0aCB0aGUgc3RydWN0dXJlIGNoYW5nZSBtZXNzYWdlLiAqLwotICAgICAgICAgICAgaWYgKG5ld19kZWcgPT0gMCkgewotICAgICAgICAgICAgICAvKiBkZWdyZWUgaGl0IDAsIGFkZCB0byBxdWV1ZSAqLwotICAgICAgICAgICAgICBhZGRfdG9fcXVldWUgKGJpdCwgcGVlcl9lbGVtZW50KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIEhBU0hfU0VUX0RFR1JFRSAoYml0LCBwZWVyX2VsZW1lbnQsIG5ld19kZWcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlua2VkID0gVFJVRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBlZXJfZWxlbWVudCk7Ci0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcl9lbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKCFsaW5rZWQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaXQtPmJpbiwgImVsZW1lbnQgJXMgbm90IGxpbmtlZCBvbiBhbnkgc2lua3BhZHMiLAotICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotfQotCi0vKiBmaW5kIHRoZSBuZXh0IGJlc3QgZWxlbWVudCBub3QgaGFuZGxlZCB5ZXQuIFRoaXMgaXMgdGhlIG9uZQotICogd2l0aCB0aGUgbG93ZXN0IG5vbi1uZWdhdGl2ZSBkZWdyZWUgKi8KLXN0YXRpYyB2b2lkCi1maW5kX2VsZW1lbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RCaW5Tb3J0SXRlcmF0b3IgKiBiaXQpCi17Ci0gIGdpbnQgZGVncmVlOwotCi0gIC8qIGVsZW1lbnQgaXMgYWxyZWFkeSBoYW5kbGVkICovCi0gIGlmICgoZGVncmVlID0gSEFTSF9HRVRfREVHUkVFIChiaXQsIGVsZW1lbnQpKSA8IDApCi0gICAgcmV0dXJuOwotCi0gIC8qIGZpcnN0IGVsZW1lbnQgb3IgZWxlbWVudCB3aXRoIHNtYWxsZXIgZGVncmVlICovCi0gIGlmIChiaXQtPmJlc3QgPT0gTlVMTCB8fCBiaXQtPmJlc3RfZGVnID4gZGVncmVlKSB7Ci0gICAgYml0LT5iZXN0ID0gZWxlbWVudDsKLSAgICBiaXQtPmJlc3RfZGVnID0gZGVncmVlOwotICB9Ci19Ci0KLS8qIGdldCBuZXh0IGVsZW1lbnQgaW4gaXRlcmF0b3IuICovCi1zdGF0aWMgR3N0SXRlcmF0b3JSZXN1bHQKLWdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXh0IChHc3RCaW5Tb3J0SXRlcmF0b3IgKiBiaXQsIEdWYWx1ZSAqIHJlc3VsdCkKLXsKLSAgR3N0RWxlbWVudCAqYmVzdDsKLSAgR3N0QmluICpiaW4gPSBiaXQtPmJpbjsKLQotICAvKiBlbXB0eSBxdWV1ZSwgd2UgaGF2ZSB0byBmaW5kIGEgbmV4dCBiZXN0IGVsZW1lbnQgKi8KLSAgaWYgKGdfcXVldWVfaXNfZW1wdHkgKCZiaXQtPnF1ZXVlKSkgewotICAgIGJpdC0+YmVzdCA9IE5VTEw7Ci0gICAgYml0LT5iZXN0X2RlZyA9IEdfTUFYSU5UOwotICAgIGdfbGlzdF9mb3JlYWNoIChiaW4tPmNoaWxkcmVuLCAoR0Z1bmMpIGZpbmRfZWxlbWVudCwgYml0KTsKLSAgICBpZiAoKGJlc3QgPSBiaXQtPmJlc3QpKSB7Ci0gICAgICAvKiB3aGVuIHdlIGRldGVjdGVkIGFuIHVubGluaywgZG9uJ3Qgd2FybiBiZWNhdXNlIG91ciBkZWdyZWVzIG1pZ2h0IGJlCi0gICAgICAgKiBzY3Jld2VkIHVwLiBXZSB3aWxsIHJlc3luYyBsYXRlciAqLwotICAgICAgaWYgKGJpdC0+YmVzdF9kZWcgIT0gMCAmJiAhYml0LT5kaXJ0eSkgewotICAgICAgICAvKiB3ZSBkb24ndCBmYWlsIG9uIHRoaXMgb25lIHlldCAqLwotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJpbiwgImxvb3AgZGVjdGVkIGluIGdyYXBoIik7Ci0gICAgICAgIGdfd2FybmluZyAoImxvb3AgZGV0ZWN0ZWQgaW4gdGhlIGdyYXBoIG9mIGJpbiAnJXMnISEiLAotICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoYmluKSk7Ci0gICAgICB9Ci0gICAgICAvKiBiZXN0IHVuaGFuZGxlZCBlbGVtZW50LCBzY2hlZHVsZSBhcyBuZXh0IGVsZW1lbnQgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInF1ZXVlIGVtcHR5LCBuZXh0IGJlc3Q6ICVzIiwKLSAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChiZXN0KSk7Ci0gICAgICBIQVNIX1NFVF9ERUdSRUUgKGJpdCwgYmVzdCwgLTEpOwotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0IChyZXN1bHQsIGJlc3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJxdWV1ZSBlbXB0eSwgZWxlbWVudHMgZXhoYXVzdGVkIik7Ci0gICAgICAvKiBubyBtb3JlIHVuaGFuZGxlZCBlbGVtZW50cywgd2UgYXJlIGRvbmUgKi8KLSAgICAgIHJldHVybiBHU1RfSVRFUkFUT1JfRE9ORTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogZXZlcnl0aGluZyBhZGRlZCB0byB0aGUgcXVldWUgZ290IHJlZmZlZCAqLwotICAgIGJlc3QgPSBnX3F1ZXVlX3BvcF9oZWFkICgmYml0LT5xdWV1ZSk7Ci0gICAgZ192YWx1ZV9zZXRfb2JqZWN0IChyZXN1bHQsIGJlc3QpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGJlc3QpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicXVldWUgaGVhZCBnaXZlcyAlcyIsIEdTVF9FTEVNRU5UX05BTUUgKGJlc3QpKTsKLSAgLyogdXBkYXRlIGRlZ3JlZXMgb2YgbGlua2VkIGVsZW1lbnRzICovCi0gIHVwZGF0ZV9kZWdyZWUgKGJlc3QsIGJpdCk7Ci0KLSAgcmV0dXJuIEdTVF9JVEVSQVRPUl9PSzsKLX0KLQotLyogY2xlYXIgcXVldWVzLCByZWNhbGN1bGF0ZSB0aGUgZGVncmVlcyBhbmQgcmVzdGFydC4gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jIChHc3RCaW5Tb3J0SXRlcmF0b3IgKiBiaXQpCi17Ci0gIEdzdEJpbiAqYmluID0gYml0LT5iaW47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicmVzeW5jIik7Ci0gIGJpdC0+ZGlydHkgPSBGQUxTRTsKLSAgY2xlYXJfcXVldWUgKCZiaXQtPnF1ZXVlKTsKLSAgLyogcmVzZXQgZGVncmVlcyAqLwotICBnX2xpc3RfZm9yZWFjaCAoYmluLT5jaGlsZHJlbiwgKEdGdW5jKSByZXNldF9kZWdyZWUsIGJpdCk7Ci0gIC8qIGNhbGMgZGVncmVlcywgaW5jcmVtZW50aW5nICovCi0gIGJpdC0+bW9kZSA9IDE7Ci0gIGdfbGlzdF9mb3JlYWNoIChiaW4tPmNoaWxkcmVuLCAoR0Z1bmMpIHVwZGF0ZV9kZWdyZWUsIGJpdCk7Ci0gIC8qIGZvciB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gd2UgZGVjcmVtZW50IHRoZSBkZWdyZWVzICovCi0gIGJpdC0+bW9kZSA9IC0xOwotfQotCi0vKiBjbGVhciBxdWV1ZXMsIHVucmVmIGJpbiBhbmQgZnJlZSBpdGVyYXRvci4gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYmluX3NvcnRfaXRlcmF0b3JfZnJlZSAoR3N0QmluU29ydEl0ZXJhdG9yICogYml0KQotewotICBHc3RCaW4gKmJpbiA9IGJpdC0+YmluOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImZyZWUiKTsKLSAgY2xlYXJfcXVldWUgKCZiaXQtPnF1ZXVlKTsKLSAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKGJpdC0+aGFzaCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLS8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgYmluIExPQ0sgaGVsZCAqLwotc3RhdGljIEdzdEl0ZXJhdG9yICoKLWdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXcgKEdzdEJpbiAqIGJpbikKLXsKLSAgR3N0QmluU29ydEl0ZXJhdG9yICpyZXN1bHQ7Ci0KLSAgLyogd2UgZG9uJ3QgbmVlZCBhbiBJdGVtRnVuY3Rpb24gYmVjYXVzZSB3ZSByZWYgdGhlIGl0ZW1zIGluIHRoZSBfbmV4dAotICAgKiBtZXRob2QgYWxyZWFkeSAqLwotICByZXN1bHQgPSAoR3N0QmluU29ydEl0ZXJhdG9yICopCi0gICAgICBnc3RfaXRlcmF0b3JfbmV3IChzaXplb2YgKEdzdEJpblNvcnRJdGVyYXRvciksCi0gICAgICBHU1RfVFlQRV9FTEVNRU5ULAotICAgICAgR1NUX09CSkVDVF9HRVRfTE9DSyAoYmluKSwKLSAgICAgICZiaW4tPnByaXYtPnN0cnVjdHVyZV9jb29raWUsCi0gICAgICAoR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24pIGdzdF9iaW5fc29ydF9pdGVyYXRvcl9jb3B5LAotICAgICAgKEdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uKSBnc3RfYmluX3NvcnRfaXRlcmF0b3JfbmV4dCwKLSAgICAgIChHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbikgTlVMTCwKLSAgICAgIChHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uKSBnc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jLAotICAgICAgKEdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uKSBnc3RfYmluX3NvcnRfaXRlcmF0b3JfZnJlZSk7Ci0gIGdfcXVldWVfaW5pdCAoJnJlc3VsdC0+cXVldWUpOwotICByZXN1bHQtPmhhc2ggPSBnX2hhc2hfdGFibGVfbmV3IChOVUxMLCBOVUxMKTsKLSAgZ3N0X29iamVjdF9yZWYgKGJpbik7Ci0gIHJlc3VsdC0+YmluID0gYmluOwotICBnc3RfYmluX3NvcnRfaXRlcmF0b3JfcmVzeW5jIChyZXN1bHQpOwotCi0gIHJldHVybiAoR3N0SXRlcmF0b3IgKikgcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQ6Ci0gKiBAYmluOiBhICNHc3RCaW4KLSAqCi0gKiBHZXRzIGFuIGl0ZXJhdG9yIGZvciB0aGUgZWxlbWVudHMgaW4gdGhpcyBiaW4gaW4gdG9wb2xvZ2ljYWxseQotICogc29ydGVkIG9yZGVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZCBmcm9tCi0gKiB0aGUgbW9zdCBkb3duc3RyZWFtIGVsZW1lbnRzIChzaW5rcykgdG8gdGhlIHNvdXJjZXMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgdG8gcGVyZm9ybSB0aGUgc3RhdGUgY2hhbmdlcwotICogb2YgdGhlIGJpbiBlbGVtZW50cyBhbmQgZm9yIGNsb2NrIHNlbGVjdGlvbi4KLSAqCi0gKiBNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdEl0ZXJhdG9yIG9mICNHc3RFbGVtZW50LAotICogb3IgJU5VTEwKLSAqLwotR3N0SXRlcmF0b3IgKgotZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCAoR3N0QmluICogYmluKQotewotICBHc3RJdGVyYXRvciAqcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQklOIChiaW4pLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gIHJlc3VsdCA9IGdzdF9iaW5fc29ydF9pdGVyYXRvcl9uZXcgKGJpbik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2Jpbl9lbGVtZW50X3NldF9zdGF0ZSAoR3N0QmluICogYmluLCBHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lLCBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSwgR3N0U3RhdGUgY3VycmVudCwKLSAgICBHc3RTdGF0ZSBuZXh0KQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGNoaWxkX2N1cnJlbnQsIGNoaWxkX3BlbmRpbmc7Ci0gIGdib29sZWFuIGxvY2tlZDsKLSAgR0xpc3QgKmZvdW5kOwotCi0gIEdTVF9TVEFURV9MT0NLIChlbGVtZW50KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICAvKiBzZXQgYmFzZV90aW1lIGFuZCBzdGFydCB0aW1lIG9uIGNoaWxkICovCi0gIEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKGVsZW1lbnQpID0gc3RhcnRfdGltZTsKLSAgZWxlbWVudC0+YmFzZV90aW1lID0gYmFzZV90aW1lOwotICAvKiBwZWVsIG9mZiB0aGUgbG9ja2VkIGZsYWcgKi8KLSAgbG9ja2VkID0gR1NUX0VMRU1FTlRfSVNfTE9DS0VEX1NUQVRFIChlbGVtZW50KTsKLSAgLyogR2V0IHRoZSBwcmV2aW91cyBzZXRfc3RhdGUgcmVzdWx0IHRvIHByZXNlcnZlIE5PX1BSRVJPTEwgYW5kIEFTWU5DICovCi0gIHJldCA9IEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpOwotICBjaGlsZF9jdXJyZW50ID0gR1NUX1NUQVRFIChlbGVtZW50KTsKLSAgY2hpbGRfcGVuZGluZyA9IEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIC8qIHNraXAgbG9ja2VkIGVsZW1lbnRzICovCi0gIGlmIChHX1VOTElLRUxZIChsb2NrZWQpKQotICAgIGdvdG8gbG9ja2VkOwotCi0gIC8qIGlmIHRoZSBlbGVtZW50IHdhcyBubyBwcmVyb2xsLCBqdXN0IHN0YXJ0IGNoYW5naW5nIHRoZSBzdGF0ZSByZWdhcmRsZXNzCi0gICAqIGlmIGl0IGhhZCBhc3luYyBlbGVtZW50cyAoaW4gdGhlIGNhc2Ugb2YgYSBiaW4pIGJlY2F1c2UgdGhleSB3b24ndCBwcmVyb2xsCi0gICAqIGFueXdheS4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImVsZW1lbnQgaXMgTk9fUFJFUk9MTCwgaWdub3JlIGFzeW5jIGVsZW1lbnRzIik7Ci0gICAgZ290byBub19wcmVyb2xsOwotICB9Ci0KLSAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCi0gICAgICAiY3VycmVudCAlcyBwZW5kaW5nICVzLCBkZXNpcmVkIG5leHQgJXMiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKGNoaWxkX2N1cnJlbnQpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKGNoaWxkX3BlbmRpbmcpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5leHQpKTsKLQotICAvKiBhbHdheXMgcmVjdXJzZSBpbnRvIGJpbnMgc28gdGhhdCB3ZSBjYW4gc2V0IHRoZSBiYXNlIHRpbWUgKi8KLSAgaWYgKEdTVF9JU19CSU4gKGVsZW1lbnQpKQotICAgIGdvdG8gZG9fc3RhdGU7Ci0KLSAgLyogVHJ5IG5vdCB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIHN0YXRlIHdlJ3JlCi0gICAqIGdvaW5nIHRvICovCi0gIGlmIChjaGlsZF9jdXJyZW50ID09IG5leHQgJiYgY2hpbGRfcGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKSB7Ci0gICAgLyogY2hpbGQgaXMgYWxyZWFkeSBhdCB0aGUgcmVxdWVzdGVkIHN0YXRlLCByZXR1cm4gcHJldmlvdXMgcmV0dXJuLiBOb3RlIHRoYXQKLSAgICAgKiBpZiB0aGUgY2hpbGQgaGFzIGEgcGVuZGluZyBzdGF0ZSB0byBuZXh0LCB3ZSB3aWxsIHN0aWxsIGNhbGwgdGhlCi0gICAgICogc2V0X3N0YXRlIGZ1bmN0aW9uICovCi0gICAgZ290byB1bm5lZWRlZDsKLSAgfSBlbHNlIGlmIChuZXh0ID4gY3VycmVudCkgewotICAgIC8qIHVwd2FyZCBzdGF0ZSBjaGFuZ2UgKi8KLSAgICBpZiAoY2hpbGRfcGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKSB7Ci0gICAgICAvKiAuLiBhbmQgdGhlIGNoaWxkIGlzIG5vdCBidXN5IGRvaW5nIGFueXRoaW5nICovCi0gICAgICBpZiAoY2hpbGRfY3VycmVudCA+IG5leHQpIHsKLSAgICAgICAgLyogLi4gYW5kIGlzIGFscmVhZHkgcGFzdCB0aGUgcmVxdWVzdGVkIHN0YXRlLCBhc3N1bWUgaXQgZ290IHRoZXJlCi0gICAgICAgICAqIHdpdGhvdXQgZXJyb3IgKi8KLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICAgICAgICBnb3RvIHVubmVlZGVkOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2hpbGRfcGVuZGluZyA+IGNoaWxkX2N1cnJlbnQpIHsKLSAgICAgIC8qIC4uIGFuZCB0aGUgY2hpbGQgaXMgYnVzeSBnb2luZyB1cHdhcmRzICovCi0gICAgICBpZiAoY2hpbGRfY3VycmVudCA+PSBuZXh0KSB7Ci0gICAgICAgIC8qIC4uIGFuZCBpcyBhbHJlYWR5IHBhc3QgdGhlIHJlcXVlc3RlZCBzdGF0ZSwgYXNzdW1lIGl0IGdvdCB0aGVyZQotICAgICAgICAgKiB3aXRob3V0IGVycm9yICovCi0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgICAgICAgZ290byB1bm5lZWRlZDsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogLi4gYW5kIHRoZSBjaGlsZCBpcyBidXN5IGdvaW5nIGRvd253YXJkcyAqLwotICAgICAgaWYgKGNoaWxkX2N1cnJlbnQgPiBuZXh0KSB7Ci0gICAgICAgIC8qIC4uIGFuZCBpcyBhbHJlYWR5IHBhc3QgdGhlIHJlcXVlc3RlZCBzdGF0ZSwgYXNzdW1lIGl0IGdvdCB0aGVyZQotICAgICAgICAgKiB3aXRob3V0IGVycm9yICovCi0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgICAgICAgZ290byB1bm5lZWRlZDsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSBpZiAobmV4dCA8IGN1cnJlbnQpIHsKLSAgICAvKiBkb3dud2FyZCBzdGF0ZSBjaGFuZ2UgKi8KLSAgICBpZiAoY2hpbGRfcGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKSB7Ci0gICAgICAvKiAuLiBhbmQgdGhlIGNoaWxkIGlzIG5vdCBidXN5IGRvaW5nIGFueXRoaW5nICovCi0gICAgICBpZiAoY2hpbGRfY3VycmVudCA8IG5leHQpIHsKLSAgICAgICAgLyogLi4gYW5kIGlzIGFscmVhZHkgcGFzdCB0aGUgcmVxdWVzdGVkIHN0YXRlLCBhc3N1bWUgaXQgZ290IHRoZXJlCi0gICAgICAgICAqIHdpdGhvdXQgZXJyb3IgKi8KLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICAgICAgICBnb3RvIHVubmVlZGVkOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2hpbGRfcGVuZGluZyA8IGNoaWxkX2N1cnJlbnQpIHsKLSAgICAgIC8qIC4uIGFuZCB0aGUgY2hpbGQgaXMgYnVzeSBnb2luZyBkb3dud2FyZHMgKi8KLSAgICAgIGlmIChjaGlsZF9jdXJyZW50IDw9IG5leHQpIHsKLSAgICAgICAgLyogLi4gYW5kIGlzIGFscmVhZHkgcGFzdCB0aGUgcmVxdWVzdGVkIHN0YXRlLCBhc3N1bWUgaXQgZ290IHRoZXJlCi0gICAgICAgICAqIHdpdGhvdXQgZXJyb3IgKi8KLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICAgICAgICBnb3RvIHVubmVlZGVkOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiAuLiBhbmQgdGhlIGNoaWxkIGlzIGJ1c3kgZ29pbmcgdXB3YXJkcyAqLwotICAgICAgaWYgKGNoaWxkX2N1cnJlbnQgPCBuZXh0KSB7Ci0gICAgICAgIC8qIC4uIGFuZCBpcyBhbHJlYWR5IHBhc3QgdGhlIHJlcXVlc3RlZCBzdGF0ZSwgYXNzdW1lIGl0IGdvdCB0aGVyZQotICAgICAgICAgKiB3aXRob3V0IGVycm9yICovCi0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgICAgICAgZ290byB1bm5lZWRlZDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotZG9fc3RhdGU6Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgLyogdGhlIGVsZW1lbnQgd2FzIGJ1c3kgd2l0aCBhbiB1cHdhcmRzIGFzeW5jIHN0YXRlIGNoYW5nZSwgd2UgbXVzdCB3YWl0IGZvcgotICAgKiBhbiBBU1lOQ19ET05FIG1lc3NhZ2UgYmVmb3JlIHdlIGF0dGVtcCB0byBjaGFuZ2UgdGhlIHN0YXRlLiAqLwotICBpZiAoKGZvdW5kID0KLSAgICAgICAgICBmaW5kX21lc3NhZ2UgKGJpbiwgR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSwKLSAgICAgICAgICAgICAgR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQpKSkgewotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlID0gR1NUX01FU1NBR0VfQ0FTVCAoZm91bmQtPmRhdGEpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImVsZW1lbnQgbWVzc2FnZSAlcCwgJXMgYXN5bmMgYnVzeSIsCi0gICAgICAgIG1lc3NhZ2UsIEdTVF9FTEVNRU5UX05BTUUgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpKTsKLSNlbmRpZgotICAgIC8qIG9ubHkgd2FpdCBmb3IgdXB3YXJkIHN0YXRlIGNoYW5nZXMgKi8KLSAgICBpZiAobmV4dCA+IGN1cnJlbnQpIHsKLSAgICAgIC8qIFdlIGZvdW5kIGFuIGFzeW5jIGVsZW1lbnQgY2hlY2sgaWYgd2UgY2FuIGZvcmNlIGl0cyBzdGF0ZSB0byBjaGFuZ2Ugb3IKLSAgICAgICAqIGlmIHdlIGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gcHJlcm9sbC4gKi8KLSAgICAgIGdvdG8gd2FzX2J1c3k7Ci0gICAgfQotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi1ub19wcmVyb2xsOgotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAic2V0dGluZyBlbGVtZW50ICVzIHRvICVzLCBiYXNlX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGJhc2VfdGltZSkpOwotCi0gIC8qIGNoYW5nZSBzdGF0ZSAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIG5leHQpOwotCi0gIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldHVybiByZXQ7Ci0KLWxvY2tlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsCi0gICAgICAgICJlbGVtZW50IGlzIGxvY2tlZCwgcmV0dXJuIHByZXZpb3VzIHJldHVybiAlcyIsCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOwotICAgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLXVubmVlZGVkOgotICB7Ci0gICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCi0gICAgICAgICJza2lwcGluZyB0cmFuc2l0aW9uIGZyb20gJXMgdG8gICVzIiwKLSAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKGNoaWxkX2N1cnJlbnQpLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCkpOwotICAgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLXdhc19idXN5OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImVsZW1lbnQgd2FzIGJ1c3ksIGRlbGF5aW5nIHN0YXRlIGNoYW5nZSIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOwotICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOwotICB9Ci19Ci0KLS8qIGdzdF9pdGVyYXRvcl9mb2xkIGZ1bmN0aW9ucyBmb3IgcGFkc19hY3RpdmF0ZQotICogU3RvcCB0aGUgaXRlcmF0b3IgaWYgYWN0aXZhdGluZyBvbmUgcGFkIGZhaWxlZCwgYnV0IG9ubHkgaWYgdGhhdCBwYWQKLSAqIGhhcyBub3QgYmVlbiByZW1vdmVkIGZyb20gdGhlIGVsZW1lbnQuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWFjdGl2YXRlX3BhZHMgKGNvbnN0IEdWYWx1ZSAqIHZwYWQsIEdWYWx1ZSAqIHJldCwgZ2Jvb2xlYW4gKiBhY3RpdmUpCi17Ci0gIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2cGFkKTsKLSAgZ2Jvb2xlYW4gY29udCA9IFRSVUU7Ci0KLSAgaWYgKCFnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgKmFjdGl2ZSkpIHsKLSAgICBpZiAoR1NUX1BBRF9QQVJFTlQgKHBhZCkgIT0gTlVMTCkgewotICAgICAgY29udCA9IEZBTFNFOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAocmV0LCBGQUxTRSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGNvbnQ7Ci19Ci0KLS8qIHJldHVybnMgZmFsc2Ugb24gZXJyb3Igb3IgZWFybHkgY3V0b3V0IG9mIHRoZSBmb2xkLCB0cnVlIGlmIGFsbAotICogcGFkcyBpbiBAaXRlciB3ZXJlIChkZSlhY3RpdmF0ZWQgc3VjY2Vzc2Z1bGx5LiAqLwotc3RhdGljIGdib29sZWFuCi1pdGVyYXRvcl9hY3RpdmF0ZV9mb2xkX3dpdGhfcmVzeW5jIChHc3RJdGVyYXRvciAqIGl0ZXIsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgaXJlczsKLSAgR1ZhbHVlIHJldCA9IHsgMCB9OwotCi0gIC8qIG5vIG5lZWQgdG8gdW5zZXQgdGhpcyBsYXRlciwgaXQncyBqdXN0IGEgYm9vbGVhbiAqLwotICBnX3ZhbHVlX2luaXQgKCZyZXQsIEdfVFlQRV9CT09MRUFOKTsKLSAgZ192YWx1ZV9zZXRfYm9vbGVhbiAoJnJldCwgVFJVRSk7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICBpcmVzID0gZ3N0X2l0ZXJhdG9yX2ZvbGQgKGl0ZXIsIChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgYWN0aXZhdGVfcGFkcywKLSAgICAgICAgJnJldCwgdXNlcl9kYXRhKTsKLSAgICBzd2l0Y2ggKGlyZXMpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKLSAgICAgICAgLyogbmVlZCB0byByZXNldCB0aGUgcmVzdWx0IGFnYWluICovCi0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZyZXQsIFRSVUUpOwotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICAvKiBhbGwgcGFkcyBpdGVyYXRlZCwgcmV0dXJuIGNvbGxlY3RlZCB2YWx1ZSAqLwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAvKiBpdGVyYXRvciByZXR1cm5lZCBfRVJST1Igb3IgcHJlbWF0dXJlIGVuZCB3aXRoIF9PSywKLSAgICAgICAgICogbWFyayBhbiBlcnJvciBhbmQgZXhpdCAqLwotICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICgmcmV0LCBGQUxTRSk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gIH0KLWRvbmU6Ci0gIC8qIHJldHVybiBjb2xsZWN0ZWQgdmFsdWUgKi8KLSAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKCZyZXQpOwotfQotCi0vKiBpcyBjYWxsZWQgd2l0aCBTVEFURV9MT0NLCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jpbl9zcmNfcGFkc19hY3RpdmF0ZSAoR3N0QmluICogYmluLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIEdzdEl0ZXJhdG9yICppdGVyOwotICBnYm9vbGVhbiBmb2xkX29rOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIiVzIHBhZHMiLCBhY3RpdmUgPyAiYWN0aXZhdGUiIDogImRlYWN0aXZhdGUiKTsKLQotICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAoKEdzdEVsZW1lbnQgKikgYmluKTsKLSAgZm9sZF9vayA9IGl0ZXJhdG9yX2FjdGl2YXRlX2ZvbGRfd2l0aF9yZXN5bmMgKGl0ZXIsICZhY3RpdmUpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0gIGlmIChHX1VOTElLRUxZICghZm9sZF9vaykpCi0gICAgZ290byBmYWlsZWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicGFkICVzYWN0aXZhdGlvbiBzdWNjZXNzZnVsIiwgYWN0aXZlID8gIiIgOiAiZGUiKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInBhZCAlc2FjdGl2YXRpb24gZmFpbGVkIiwgYWN0aXZlID8gIiIgOiAiZGUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYmluX3JlY2FsY3VsYXRlX2xhdGVuY3k6Ci0gKiBAYmluOiBhICNHc3RCaW4KLSAqCi0gKiBRdWVyeSBAYmluIGZvciB0aGUgY3VycmVudCBsYXRlbmN5IHVzaW5nIGFuZCByZWNvbmZpZ3VyZXMgdGhpcyBsYXRlbmN5IHRvIGFsbCB0aGUKLSAqIGVsZW1lbnRzIHdpdGggYSBMQVRFTkNZIGV2ZW50LgotICoKLSAqIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSBjYWxsZWQgb24gdGhlIHBpcGVsaW5lIHdoZW4gYSAjR1NUX01FU1NBR0VfTEFURU5DWQotICogaXMgcG9zdGVkIG9uIHRoZSBidXMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgdGhlICdkby1sYXRlbmN5JyBzaWduYWwgc28gYW55IGN1c3RvbSBsYXRlbmN5Ci0gKiBjYWxjdWxhdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGxhdGVuY3kgY291bGQgYmUgcXVlcmllZCBhbmQgcmVjb25maWd1cmVkLgotICovCi1nYm9vbGVhbgotZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5IChHc3RCaW4gKiBiaW4pCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBnX3NpZ25hbF9lbWl0IChiaW4sIGdzdF9iaW5fc2lnbmFsc1tET19MQVRFTkNZXSwgMCwgJnJlcyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImxhdGVuY3kgcmV0dXJuZWQgJWQiLCByZXMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jpbl9kb19sYXRlbmN5X2Z1bmMgKEdzdEJpbiAqIGJpbikKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHc3RDbG9ja1RpbWUgbWluX2xhdGVuY3ksIG1heF9sYXRlbmN5OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIEZBTFNFKTsKLQotICBlbGVtZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAoYmluKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAicXVlcnlpbmcgbGF0ZW5jeSIpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19sYXRlbmN5ICgpOwotICBpZiAoKHJlcyA9IGdzdF9lbGVtZW50X3F1ZXJ5IChlbGVtZW50LCBxdWVyeSkpKSB7Ci0gICAgZ2Jvb2xlYW4gbGl2ZTsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5IChxdWVyeSwgJmxpdmUsICZtaW5fbGF0ZW5jeSwgJm1heF9sYXRlbmN5KTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsCi0gICAgICAgICJnb3QgbWluIGxhdGVuY3kgJSIgR1NUX1RJTUVfRk9STUFUICIsIG1heCBsYXRlbmN5ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCBsaXZlICVkIiwgR1NUX1RJTUVfQVJHUyAobWluX2xhdGVuY3kpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChtYXhfbGF0ZW5jeSksIGxpdmUpOwotCi0gICAgaWYgKG1heF9sYXRlbmN5IDwgbWluX2xhdGVuY3kpIHsKLSAgICAgIC8qIHRoaXMgaXMgYW4gaW1wb3NzaWJsZSBzaXR1YXRpb24sIHNvbWUgcGFydHMgb2YgdGhlIHBpcGVsaW5lIG1pZ2h0IG5vdAotICAgICAgICogd29yayBjb3JyZWN0bHkuIFdlIHBvc3QgYSB3YXJuaW5nIGZvciBub3cuICovCi0gICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChlbGVtZW50LCBDT1JFLCBDTE9DSywgKE5VTEwpLAotICAgICAgICAgICgiSW1wb3NzaWJsZSB0byBjb25maWd1cmUgbGF0ZW5jeTogbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCAiIDwgbWluICUiCi0gICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLiBBZGQgcXVldWVzIG9yIG90aGVyIGJ1ZmZlcmluZyBlbGVtZW50cy4iLAotICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChtYXhfbGF0ZW5jeSksIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSkpOwotICAgIH0KLQotICAgIC8qIGNvbmZpZ3VyZSBsYXRlbmN5IG9uIGVsZW1lbnRzICovCi0gICAgcmVzID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoZWxlbWVudCwgZ3N0X2V2ZW50X25ld19sYXRlbmN5IChtaW5fbGF0ZW5jeSkpOwotICAgIGlmIChyZXMpIHsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZWxlbWVudCwgImNvbmZpZ3VyZWQgbGF0ZW5jeSBvZiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAobWluX2xhdGVuY3kpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbGVtZW50LAotICAgICAgICAgICJkaWQgbm90IHJlYWxseSBjb25maWd1cmUgbGF0ZW5jeSBvZiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAobWluX2xhdGVuY3kpKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogdGhpcyBpcyBub3QgYSByZWFsIHByb2JsZW0sIHdlIGp1c3QgZG9uJ3QgY29uZmlndXJlIGFueSBsYXRlbmN5LiAqLwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWxlbWVudCwgImZhaWxlZCB0byBxdWVyeSBsYXRlbmN5Iik7Ci0gIH0KLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmluX3Bvc3RfbWVzc2FnZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdE1lc3NhZ2UgKiBtc2cpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqcGtsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBwYXJlbnRfY2xhc3M7Ci0gIGdib29sZWFuIHJldDsKLQotICByZXQgPSBwa2xhc3MtPnBvc3RfbWVzc2FnZSAoZWxlbWVudCwgZ3N0X21lc3NhZ2VfcmVmIChtc2cpKTsKLQotICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEICYmCi0gICAgICBHU1RfTUVTU0FHRV9TUkMgKG1zZykgPT0gR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSkgewotICAgIEdzdFN0YXRlIG5ld3N0YXRlLCBwZW5kaW5nOwotCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobXNnLCBOVUxMLCAmbmV3c3RhdGUsICZwZW5kaW5nKTsKLSAgICBpZiAobmV3c3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgcGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKSB7Ci0gICAgICBHU1RfQklOX0NBU1QgKGVsZW1lbnQpLT5wcml2LT5wb3N0ZWRfcGxheWluZyA9IFRSVUU7Ci0gICAgICBiaW5fZG9fZW9zIChHU1RfQklOX0NBU1QgKGVsZW1lbnQpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0JJTl9DQVNUIChlbGVtZW50KS0+cHJpdi0+cG9zdGVkX3BsYXlpbmcgPSBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotcmVzZXRfc3RhdGUgKGNvbnN0IEdWYWx1ZSAqIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqZSA9IGdfdmFsdWVfZ2V0X29iamVjdCAoZGF0YSk7Ci0gIEdzdFN0YXRlIHN0YXRlID0gR1BPSU5URVJfVE9fSU5UICh1c2VyX2RhdGEpOwotCi0gIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGUsIHN0YXRlKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlLCAiRmFpbGVkIHRvIHN3aXRjaCBiYWNrIGRvd24gdG8gJXMiLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoc3RhdGUpKTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfYmluX2NoYW5nZV9zdGF0ZV9mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0QmluICpiaW47Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0U3RhdGUgY3VycmVudCwgbmV4dDsKLSAgZ2Jvb2xlYW4gaGF2ZV9hc3luYzsKLSAgZ2Jvb2xlYW4gaGF2ZV9ub19wcmVyb2xsOwotICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lLCBzdGFydF90aW1lOwotICBHc3RJdGVyYXRvciAqaXQ7Ci0gIGdib29sZWFuIGRvbmU7Ci0gIEdWYWx1ZSBkYXRhID0geyAwLCB9OwotCi0gIC8qIHdlIGRvbid0IG5lZWQgdG8gdGFrZSB0aGUgU1RBVEVfTE9DSywgaXQgaXMgYWxyZWFkeSB0YWtlbiAqLwotICBjdXJyZW50ID0gKEdzdFN0YXRlKSBHU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UICh0cmFuc2l0aW9uKTsKLSAgbmV4dCA9IChHc3RTdGF0ZSkgR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCAodHJhbnNpdGlvbik7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgImNoYW5naW5nIHN0YXRlIG9mIGNoaWxkcmVuIGZyb20gJXMgdG8gJXMiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKGN1cnJlbnQpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCkpOwotCi0gIGJpbiA9IEdTVF9CSU5fQ0FTVCAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoIChuZXh0KSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKLSAgICB7Ci0gICAgICBnYm9vbGVhbiB0b3BsZXZlbCwgYXN5bmNoYW5kbGluZzsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAgICAgdG9wbGV2ZWwgPSBCSU5fSVNfVE9QTEVWRUwgKGJpbik7Ci0gICAgICBhc3luY2hhbmRsaW5nID0gYmluLT5wcml2LT5hc3luY2hhbmRsaW5nOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgICAgIGlmICh0b3BsZXZlbCkKLSAgICAgICAgZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5IChiaW4pOwotICAgICAgaWYgKGFzeW5jaGFuZGxpbmcpCi0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoZWxlbWVudCwKLSAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19sYXRlbmN5IChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfU1RBVEVfUEFVU0VEOgotICAgICAgLyogQ2xlYXIgRU9TIGxpc3Qgb24gbmV4dCBQQVVTRUQgKi8KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJjbGVhcmluZyBFT1MgZWxlbWVudHMiKTsKLSAgICAgIGJpbl9yZW1vdmVfbWVzc2FnZXMgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfRU9TKTsKLSAgICAgIGJpbi0+cHJpdi0+cG9zdGVkX2VvcyA9IEZBTFNFOwotICAgICAgaWYgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICBiaW5fcmVtb3ZlX21lc3NhZ2VzIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICAgIGlmIChjdXJyZW50ID09IEdTVF9TVEFURV9SRUFEWSkKLSAgICAgICAgaWYgKCEoZ3N0X2Jpbl9zcmNfcGFkc19hY3RpdmF0ZSAoYmluLCBUUlVFKSkpCi0gICAgICAgICAgZ290byBhY3RpdmF0ZV9mYWlsdXJlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6Ci0gICAgICAvKiBDbGVhciBtZXNzYWdlIGxpc3Qgb24gbmV4dCBSRUFEWSAqLwotICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImNsZWFyaW5nIGFsbCBjYWNoZWQgbWVzc2FnZXMiKTsKLSAgICAgIGJpbl9yZW1vdmVfbWVzc2FnZXMgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfQU5ZKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgICAgLyogV2UgbWlnaHQgbm90IGhhdmUgcmVhY2hlZCBQQVVTRUQgeWV0IGR1ZSB0byBhc3luYyBlcnJvcnMsCi0gICAgICAgKiBtYWtlIHN1cmUgdG8gYWx3YXlzIGRlYWN0aXZhdGUgdGhlIHBhZHMgbm9uZXRoZWxlc3MgKi8KLSAgICAgIGlmICghKGdzdF9iaW5fc3JjX3BhZHNfYWN0aXZhdGUgKGJpbiwgRkFMU0UpKSkKLSAgICAgICAgZ290byBhY3RpdmF0ZV9mYWlsdXJlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfTlVMTDoKLSAgICAgIC8qIENsZWFyIG1lc3NhZ2UgbGlzdCBvbiBuZXh0IE5VTEwgKi8KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJjbGVhcmluZyBhbGwgY2FjaGVkIG1lc3NhZ2VzIik7Ci0gICAgICBiaW5fcmVtb3ZlX21lc3NhZ2VzIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX0FOWSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICAgIGlmIChjdXJyZW50ID09IEdTVF9TVEFURV9SRUFEWSkgewotICAgICAgICBpZiAoIShnc3RfYmluX3NyY19wYWRzX2FjdGl2YXRlIChiaW4sIEZBTFNFKSkpCi0gICAgICAgICAgZ290byBhY3RpdmF0ZV9mYWlsdXJlOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogdGhpcyBmbGFnIGlzIHVzZWQgdG8gbWFrZSB0aGUgYXN5bmMgc3RhdGUgY2hhbmdlcyByZXR1cm4gaW1tZWRpYXRlbHkuIFdlCi0gICAqIGRvbid0IHdhbnQgdGhlbSB0byBpbnRlcmZlcmUgd2l0aCB0aGlzIHN0YXRlIGNoYW5nZSAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gIGJpbi0+cG9sbGluZyA9IFRSVUU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gIC8qIGl0ZXJhdGUgaW4gc3RhdGUgY2hhbmdlIG9yZGVyICovCi0gIGl0ID0gZ3N0X2Jpbl9pdGVyYXRlX3NvcnRlZCAoYmluKTsKLQotICAvKiBtYXJrIGlmIHdlJ3ZlIHNlZW4gYW4gQVNZTkMgZWxlbWVudCBpbiB0aGUgYmluIHdoZW4gd2UgZGlkIGEgc3RhdGUgY2hhbmdlLgotICAgKiBOb3RlIGhvdyB3ZSBkb24ndCByZXNldCB0aGlzIHZhbHVlIHdoZW4gYSByZXN5bmMgaGFwcGVucywgdGhlIHJlYXNvbiBiZWluZwotICAgKiB0aGF0IHRoZSBhc3luYyBlbGVtZW50IHBvc3RlZCBBU1lOQ19TVEFSVCBhbmQgd2Ugd2FudCB0byBwb3N0IEFTWU5DX0RPTkUKLSAgICogZXZlbiBhZnRlciBhIHJlc3luYyB3aGVuIHRoZSBhc3luYyBlbGVtZW50IGlzIGdvbmUgKi8KLSAgaGF2ZV9hc3luYyA9IEZBTFNFOwotCi1yZXN0YXJ0OgotICAvKiB0YWtlIGJhc2VfdGltZSAqLwotICBiYXNlX3RpbWUgPSBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lIChlbGVtZW50KTsKLSAgc3RhcnRfdGltZSA9IGdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lIChlbGVtZW50KTsKLQotICBoYXZlX25vX3ByZXJvbGwgPSBGQUxTRTsKLQotICBkb25lID0gRkFMU0U7Ci0gIHdoaWxlICghZG9uZSkgewotICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmZGF0YSkpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgotICAgICAgewotICAgICAgICBHc3RFbGVtZW50ICpjaGlsZDsKLQotICAgICAgICBjaGlsZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJmRhdGEpOwotCi0gICAgICAgIC8qIHNldCBzdGF0ZSBhbmQgYmFzZV90aW1lIG5vdyAqLwotICAgICAgICByZXQgPSBnc3RfYmluX2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIGNoaWxkLCBiYXNlX3RpbWUsIHN0YXJ0X3RpbWUsCi0gICAgICAgICAgICBjdXJyZW50LCBuZXh0KTsKLQotICAgICAgICBzd2l0Y2ggKHJldCkgewotICAgICAgICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOgotICAgICAgICAgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgImNoaWxkICclcycgY2hhbmdlZCBzdGF0ZSB0byAlZCglcykgc3VjY2Vzc2Z1bGx5IiwKLSAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChjaGlsZCksIG5leHQsCi0gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5leHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgICAgICAgICAiY2hpbGQgJyVzJyBpcyBjaGFuZ2luZyBzdGF0ZSBhc3luY2hyb25vdXNseSB0byAlcyIsCi0gICAgICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoY2hpbGQpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCkpOwotICAgICAgICAgICAgaGF2ZV9hc3luYyA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6ewotICAgICAgICAgICAgR3N0T2JqZWN0ICpwYXJlbnQ7Ci0KLSAgICAgICAgICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgICAgICAgICAgICJjaGlsZCAnJXMnIGZhaWxlZCB0byBnbyB0byBzdGF0ZSAlZCglcykiLAotICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGNoaWxkKSwKLSAgICAgICAgICAgICAgICBuZXh0LCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCkpOwotCi0gICAgICAgICAgICAvKiBPbmx5IGZhaWwgaWYgdGhlIGNoaWxkIGlzIHN0aWxsIGluc2lkZQotICAgICAgICAgICAgICogdGhpcyBiaW4uIEl0IG1pZ2h0J3ZlIGJlZW4gcmVtb3ZlZCBhbHJlYWR5Ci0gICAgICAgICAgICAgKiBiZWNhdXNlIG9mIHRoZSBlcnJvciBieSB0aGUgYmluIHN1YmNsYXNzCi0gICAgICAgICAgICAgKiB0byBpZ25vcmUgdGhlIGVycm9yLiAgKi8KLSAgICAgICAgICAgIHBhcmVudCA9IGdzdF9vYmplY3RfZ2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChjaGlsZCkpOwotICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgIC8qIGVsZW1lbnQgaXMgc3RpbGwgaW4gYmluLCByZWFsbHkgZXJyb3Igbm93ICovCi0gICAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7Ci0gICAgICAgICAgICAgIGdvdG8gdW5kbzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGNoaWxkIHJlbW92ZWQgZnJvbSBiaW4sIGxldCB0aGUgcmVzeW5jIGNvZGUgcmVkbyB0aGUgc3RhdGUKLSAgICAgICAgICAgICAqIGNoYW5nZSAqLwotICAgICAgICAgICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgImNoaWxkICclcycgd2FzIHJlbW92ZWQgZnJvbSB0aGUgYmluIiwKLSAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChjaGlsZCkpOwotCi0gICAgICAgICAgICBpZiAocGFyZW50KQotICAgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Ci0gICAgICAgICAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgICAgICAgICAiY2hpbGQgJyVzJyBjaGFuZ2VkIHN0YXRlIHRvICVkKCVzKSBzdWNjZXNzZnVsbHkgd2l0aG91dCBwcmVyb2xsIiwKLSAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChjaGlsZCksIG5leHQsCi0gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5leHQpKTsKLSAgICAgICAgICAgIGhhdmVfbm9fcHJlcm9sbCA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJpdGVyYXRvciBkb2luZyByZXN5bmMiKTsKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICAgICAgICBnb3RvIHJlc3RhcnQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiaXRlcmF0b3IgZG9uZSIpOwotICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgaWYgKGhhdmVfbm9fcHJlcm9sbCkgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLAotICAgICAgICAid2UgaGF2ZSBOT19QUkVST0xMIGVsZW1lbnRzICVzIC0+IE5PX1BSRVJPTEwiLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lIChyZXQpKTsKLSAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw7Ci0gIH0gZWxzZSBpZiAoaGF2ZV9hc3luYykgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLAotICAgICAgICAid2UgaGF2ZSBBU1lOQyBlbGVtZW50cyAlcyAtPiBBU1lOQyIsCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOwotICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7Ci0gIH0KLQotZG9uZToKLSAgZ192YWx1ZV91bnNldCAoJmRhdGEpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgYmluLT5wb2xsaW5nID0gRkFMU0U7Ci0gIC8qIGl0J3MgcG9zc2libGUgdGhhdCB3ZSBkaWQgbm90IGdldCBBU1lOQyBmcm9tIHRoZSBjaGlsZHJlbiB3aGlsZSB0aGUgYmluIGlzCi0gICAqIHNpbXVsYXRpbmcgQVNZTkMgYmVoYXZpb3VyIGJ5IHBvc3RpbmcgYW4gQVNZTkNfRE9ORSBtZXNzYWdlIG9uIHRoZSBidXMgd2l0aAotICAgKiBpdHNlbGYgYXMgdGhlIHNvdXJjZS4gSW4gdGhhdCBjYXNlIHdlIHN0aWxsIHdhbnQgdG8gY2hlY2sgaWYgdGhlIHN0YXRlCi0gICAqIGNoYW5nZSBjb21wbGV0ZWQuICovCi0gIGlmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyAmJiAhYmluLT5wcml2LT5wZW5kaW5nX2FzeW5jX2RvbmUpIHsKLSAgICAvKiBubyBlbGVtZW50IHJldHVybmVkIEFTWU5DIGFuZCB0aGVyZSBhcmUgbm8gcGVuZGluZyBhc3luY19kb25lIG1lc3NhZ2VzLAotICAgICAqIHdlIGNhbiBqdXN0IGNvbXBsZXRlLiAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIm5vIGFzeW5jIGVsZW1lbnRzIik7Ci0gICAgZ290byBzdGF0ZV9lbmQ7Ci0gIH0KLSAgLyogd2hlbiB3ZSBnZXQgaGVyZSBhbiBBU1lOQyBlbGVtZW50IHdhcyBmb3VuZCAqLwotICBpZiAoR1NUX1NUQVRFX1RBUkdFVCAoYmluKSA8PSBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAvKiB3ZSBpZ25vcmUgQVNZTkMgc3RhdGUgY2hhbmdlcyB3aGVuIHdlIGdvIHRvIFJFQURZIG9yIE5VTEwgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJ0YXJnZXQgc3RhdGUgJXMgPD0gUkVBRFkiLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoR1NUX1NUQVRFX1RBUkdFVCAoYmluKSkpOwotICAgIGdvdG8gc3RhdGVfZW5kOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiY2hlY2sgYXN5bmMgZWxlbWVudHMiKTsKLSAgLyogY2hlY2sgaWYgYWxsIGVsZW1lbnRzIG1hbmFnZWQgdG8gY29tbWl0IHRoZWlyIHN0YXRlIGFscmVhZHkgKi8KLSAgaWYgKCFmaW5kX21lc3NhZ2UgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQpKSB7Ci0gICAgLyogbm90aGluZyBmb3VuZCwgcmVtb3ZlIGFsbCBvbGQgQVNZTkNfRE9ORSBtZXNzYWdlcy4gVGhpcyBjYW4gaGFwcGVuIHdoZW4KLSAgICAgKiBhbGwgdGhlIGVsZW1lbnRzIGNvbW1pdGVkIHRoZWlyIHN0YXRlIHdoaWxlIHdlIHdlcmUgZG9pbmcgdGhlIHN0YXRlCi0gICAgICogY2hhbmdlLiBXZSB3aWxsIHN0aWxsIHJldHVybiBBU1lOQyBmb3IgY29uc2lzdGVuY3kgYnV0IHdlIGNvbW1pdCB0aGUKLSAgICAgKiBzdGF0ZSBhbHJlYWR5IHNvIHRoYXQgYSBfZ2V0X3N0YXRlKCkgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuICovCi0gICAgYmluX3JlbW92ZV9tZXNzYWdlcyAoYmluLCBOVUxMLCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImFzeW5jIGVsZW1lbnRzIGNvbW1pdGVkIik7Ci0gICAgYmluX2hhbmRsZV9hc3luY19kb25lIChiaW4sIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgRkFMU0UsCi0gICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOwotICB9Ci0KLXN0YXRlX2VuZDoKLSAgYmluLT5wcml2LT5wZW5kaW5nX2FzeW5jX2RvbmUgPSBGQUxTRTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgImRvbmUgY2hhbmdpbmcgYmluJ3Mgc3RhdGUgZnJvbSAlcyB0byAlcywgbm93IGluICVzLCByZXQgJXMiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKGN1cnJlbnQpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5leHQpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKEdTVF9TVEFURSAoZWxlbWVudCkpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAocmV0KSk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWFjdGl2YXRlX2ZhaWx1cmU6Ci0gIHsKLSAgICBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgImZhaWx1cmUgKGRlKWFjdGl2YXRpbmcgc3JjIHBhZHMiKTsKLSAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICB9Ci0KLXVuZG86Ci0gIHsKLSAgICBpZiAoY3VycmVudCA8IG5leHQpIHsKLSAgICAgIEdzdEl0ZXJhdG9yICppdCA9IGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQgKEdTVF9CSU4gKGVsZW1lbnQpKTsKLSAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IHJldDsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwKLSAgICAgICAgICAiQmluIGZhaWxlZCB0byBjaGFuZ2Ugc3RhdGUsIHN3aXRjaGluZyBjaGlsZHJlbiBiYWNrIHRvICVzIiwKLSAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoY3VycmVudCkpOwotICAgICAgd2hpbGUgKFRSVUUpIHsKLSAgICAgICAgcmV0ID0KLSAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9mb3JlYWNoIChpdCwgJnJlc2V0X3N0YXRlLCBHSU5UX1RPX1BPSU5URVIgKGN1cnJlbnQpKTsKLSAgICAgICAgaWYgKHJldCAhPSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdCk7Ci0gICAgICB9Ci0gICAgICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotICAgIH0KLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgYSB1dGlsaXR5IGV2ZW50IGhhbmRsZXIgZm9yIHNlZWsgZXZlbnRzLgotICogSXQgd2lsbCBzZW5kIHRoZSBldmVudCB0byBhbGwgc2lua3Mgb3Igc291cmNlcyBhbmQgYXBwcm9wcmlhdGUKLSAqIGdob3N0IHBhZHMgZGVwZW5kaW5nIG9uIHRoZSBldmVudC1kaXJlY3Rpb24uCi0gKgotICogQXBwbGljYXRpb25zIGFyZSBmcmVlIHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3VyIGFuZAotICogaW1wbGVtZW50IHRoZWlyIG93biBzZWVrIGhhbmRsZXIsIGJ1dCB0aGlzIHdpbGwgd29yayBmb3IKLSAqIHByZXR0eSBtdWNoIGFsbCBjYXNlcyBpbiBwcmFjdGljZS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmluX3NlbmRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RCaW4gKmJpbiA9IEdTVF9CSU5fQ0FTVCAoZWxlbWVudCk7Ci0gIEdzdEl0ZXJhdG9yICppdGVyOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBnYm9vbGVhbiBkb25lID0gRkFMU0U7Ci0gIEdWYWx1ZSBkYXRhID0geyAwLCB9OwotCi0gIGlmIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKSB7Ci0gICAgaXRlciA9IGdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzIChiaW4pOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIlNlbmRpbmcgJXMgZXZlbnQgdG8gc3JjIGNoaWxkcmVuIiwKLSAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgfSBlbHNlIHsKLSAgICBpdGVyID0gZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzIChiaW4pOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIlNlbmRpbmcgJXMgZXZlbnQgdG8gc2luayBjaGlsZHJlbiIsCi0gICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gIH0KLQotICB3aGlsZSAoIWRvbmUpIHsKLSAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdGVyLCAmZGF0YSkpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgotICAgICAgewotICAgICAgICBHc3RFbGVtZW50ICpjaGlsZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJmRhdGEpOwotCi0gICAgICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgICAgICAgcmVzICY9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGNoaWxkLCBldmVudCk7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGNoaWxkLCAiQWZ0ZXIgaGFuZGxpbmcgJXMgZXZlbnQ6ICVkIiwKLSAgICAgICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwgcmVzKTsKLQotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdGVyKTsKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBnX3ZhbHVlX3Vuc2V0ICgmZGF0YSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLQotICBpZiAoR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0gKGV2ZW50KSkgewotICAgIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoR1NUX0VMRU1FTlQgKGJpbikpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIlNlbmRpbmcgJXMgZXZlbnQgdG8gc2luayBwYWRzIiwKLSAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgfSBlbHNlIHsKLSAgICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAoR1NUX0VMRU1FTlQgKGJpbikpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIlNlbmRpbmcgJXMgZXZlbnQgdG8gc3JjIHBhZHMiLAotICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotICB9Ci0KLSAgZG9uZSA9IEZBTFNFOwotICB3aGlsZSAoIWRvbmUpIHsKLSAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdGVyLCAmZGF0YSkpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgotICAgICAgewotICAgICAgICBHc3RQYWQgKnBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJmRhdGEpOwotCi0gICAgICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgICAgICAgcmVzICY9IGdzdF9wYWRfc2VuZF9ldmVudCAocGFkLCBldmVudCk7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJBZnRlciBoYW5kbGluZyAlcyBldmVudDogJWQiLAotICAgICAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCByZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBnX3ZhbHVlX3Vuc2V0ICgmZGF0YSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogdGhpcyBpcyB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSB0aHJlYWRwb29sLiBXaGVuIGFzeW5jIGVsZW1lbnRzIGNvbW1pdAotICogdGhlaXIgc3RhdGUsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdHRlbXB0IHRvIGJyaW5nIHRoZSBiaW4gdG8gdGhlIG5leHQgc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYmluX2NvbnRpbnVlX2Z1bmMgKEdzdEJpbiAqIGJpbiwgQmluQ29udGludWVEYXRhICogZGF0YSkKLXsKLSAgR3N0U3RhdGUgY3VycmVudCwgbmV4dCwgcGVuZGluZzsKLSAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbjsKLQotICBwZW5kaW5nID0gZGF0YS0+cGVuZGluZzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJ3YWl0aW5nIGZvciBzdGF0ZSBsb2NrIik7Ci0gIEdTVF9TVEFURV9MT0NLIChiaW4pOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImRvaW5nIHN0YXRlIGNvbnRpbnVlIik7Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLQotICAvKiBpZiBhIG5ldyBzdGF0ZSBjaGFuZ2UgaGFwcGVuZWQgYWZ0ZXIgdGhpcyB0aHJlYWQgd2FzIHNjaGVkdWxlZCwgd2UgcmV0dXJuCi0gICAqIGltbWVkaWF0ZWx5LiAqLwotICBpZiAoZGF0YS0+Y29va2llICE9IEdTVF9FTEVNRU5UX0NBU1QgKGJpbiktPnN0YXRlX2Nvb2tpZSkKLSAgICBnb3RvIGludGVycnVwdGVkOwotCi0gIGN1cnJlbnQgPSBHU1RfU1RBVEUgKGJpbik7Ci0gIG5leHQgPSBHU1RfU1RBVEVfR0VUX05FWFQgKGN1cnJlbnQsIHBlbmRpbmcpOwotICB0cmFuc2l0aW9uID0gKEdzdFN0YXRlQ2hhbmdlKSBHU1RfU1RBVEVfVFJBTlNJVElPTiAoY3VycmVudCwgbmV4dCk7Ci0KLSAgR1NUX1NUQVRFX05FWFQgKGJpbikgPSBuZXh0OwotICBHU1RfU1RBVEVfUEVORElORyAoYmluKSA9IHBlbmRpbmc7Ci0gIC8qIG1hcmsgYnVzeSAqLwotICBHU1RfU1RBVEVfUkVUVVJOIChiaW4pID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGJpbiwKLSAgICAgICJjb250aW51ZSBzdGF0ZSBjaGFuZ2UgJXMgdG8gJXMsIGZpbmFsICVzIiwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChjdXJyZW50KSwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHBlbmRpbmcpKTsKLQotICBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIHRyYW5zaXRpb24pOwotCi0gIEdTVF9TVEFURV9VTkxPQ0sgKGJpbik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInN0YXRlIGNvbnRpbnVlIGRvbmUiKTsKLQotICByZXR1cm47Ci0KLWludGVycnVwdGVkOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0gICAgR1NUX1NUQVRFX1VOTE9DSyAoYmluKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJzdGF0ZSBjb250aW51ZSBhYm9ydGVkIGR1ZSB0byBpbnRlcnZlbmluZyBjaGFuZ2UiKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIEdzdEJ1c1N5bmNSZXBseQotYmluX2J1c19oYW5kbGVyIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RCaW4gKiBiaW4pCi17Ci0gIEdzdEJpbkNsYXNzICpiY2xhc3M7Ci0KLSAgYmNsYXNzID0gR1NUX0JJTl9HRVRfQ0xBU1MgKGJpbik7Ci0gIGlmIChiY2xhc3MtPmhhbmRsZV9tZXNzYWdlKQotICAgIGJjbGFzcy0+aGFuZGxlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSk7Ci0gIGVsc2UKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKLX0KLQotc3RhdGljIHZvaWQKLWZyZWVfYmluX2NvbnRpbnVlX2RhdGEgKEJpbkNvbnRpbnVlRGF0YSAqIGRhdGEpCi17Ci0gIGdfc2xpY2VfZnJlZSAoQmluQ29udGludWVEYXRhLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLWJpbl9wdXNoX3N0YXRlX2NvbnRpbnVlIChHc3RCaW4gKiBiaW4sIEJpbkNvbnRpbnVlRGF0YSAqIGRhdGEpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInB1c2hpbmcgY29udGludWUgb24gdGhyZWFkIHBvb2wiKTsKLSAgZ3N0X2VsZW1lbnRfY2FsbF9hc3luYyAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwKLSAgICAgIChHc3RFbGVtZW50Q2FsbEFzeW5jRnVuYykgZ3N0X2Jpbl9jb250aW51ZV9mdW5jLCBkYXRhLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBmcmVlX2Jpbl9jb250aW51ZV9kYXRhKTsKLX0KLQotLyogYW4gZWxlbWVudCBzdGFydGVkIGFuIGFzeW5jIHN0YXRlIGNoYW5nZSwgaWYgd2Ugd2VyZSBub3QgYnVzeSB3aXRoIGEgc3RhdGUKLSAqIGNoYW5nZSwgd2UgcGVyZm9ybSBhIGxvc3Qgc3RhdGUuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBPQkpFQ1QgbG9jay4KLSAqLwotc3RhdGljIHZvaWQKLWJpbl9oYW5kbGVfYXN5bmNfc3RhcnQgKEdzdEJpbiAqIGJpbikKLXsKLSAgR3N0U3RhdGUgb2xkX3N0YXRlLCBuZXdfc3RhdGU7Ci0gIGdib29sZWFuIHRvcGxldmVsOwotICBHc3RNZXNzYWdlICphbWVzc2FnZSA9IE5VTEw7Ci0KLSAgaWYgKEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdvdG8gaGFkX2Vycm9yOwotCi0gIC8qIGdldCBvdXIgdG9wbGV2ZWwgc3RhdGUgKi8KLSAgdG9wbGV2ZWwgPSBCSU5fSVNfVE9QTEVWRUwgKGJpbik7Ci0KLSAgLyogcHJlcGFyZSBhbiBBU1lOQ19TVEFSVCBtZXNzYWdlLCB3ZSBhbHdheXMgcG9zdCB0aGUgc3RhcnQgbWVzc2FnZSBldmVuIGlmIHdlCi0gICAqIGFyZSBidXN5IHdpdGggYSBzdGF0ZSBjaGFuZ2Ugb3Igd2hlbiB3ZSBhcmUgTk9fUFJFUk9MTC4gKi8KLSAgaWYgKCF0b3BsZXZlbCkKLSAgICAvKiBub24gdG9wbGV2ZWwgYmluLCBwcmVwYXJlIGFzeW5jLXN0YXJ0IGZvciB0aGUgcGFyZW50ICovCi0gICAgYW1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfc3RhcnQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSk7Ci0KLSAgaWYgKGJpbi0+cG9sbGluZyB8fCBHU1RfU1RBVEVfUEVORElORyAoYmluKSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKQotICAgIGdvdG8gd2FzX2J1c3k7Ci0KLSAgLyogYXN5bmMgc3RhcnRzIGFyZSBpZ25vcmVkIHdoZW4gd2UgYXJlIE5PX1BSRVJPTEwgKi8KLSAgaWYgKEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMKQotICAgIGdvdG8gd2FzX25vX3ByZXJvbGw7Ci0KLSAgb2xkX3N0YXRlID0gR1NUX1NUQVRFIChiaW4pOwotCi0gIC8qIHdoZW4gd2UgUExBWUlORyB3ZSBnbyBiYWNrIHRvIFBBVVNFRCwgd2hlbiBwcmVyb2xsIGhhcHBlbnMsIHdlIGdvIGJhY2sgdG8KLSAgICogUExBWUlORyBhZnRlciBvcHRpb25hbGx5IHJlZGlzdHJpYnV0aW5nIHRoZSBiYXNlX3RpbWUuICovCi0gIGlmIChvbGRfc3RhdGUgPiBHU1RfU1RBVEVfUEFVU0VEKQotICAgIG5ld19zdGF0ZSA9IEdTVF9TVEFURV9QQVVTRUQ7Ci0gIGVsc2UKLSAgICBuZXdfc3RhdGUgPSBvbGRfc3RhdGU7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sCi0gICAgICAibG9zdCBzdGF0ZSBvZiAlcywgbmV3ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZF9zdGF0ZSksCi0gICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV3X3N0YXRlKSk7Ci0KLSAgR1NUX1NUQVRFIChiaW4pID0gbmV3X3N0YXRlOwotICBHU1RfU1RBVEVfTkVYVCAoYmluKSA9IG5ld19zdGF0ZTsKLSAgR1NUX1NUQVRFX1BFTkRJTkcgKGJpbikgPSBuZXdfc3RhdGU7Ci0gIEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICAvKiBwb3N0IG1lc3NhZ2UgKi8KLSAgX3ByaXZfZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlZCAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgbmV3X3N0YXRlLCBuZXdfc3RhdGUsCi0gICAgICBuZXdfc3RhdGUpOwotCi1wb3N0X3N0YXJ0OgotICBpZiAoYW1lc3NhZ2UpIHsKLSAgICAvKiBwb3N0IG91ciBBU1lOQ19TVEFSVC4gKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJwb3N0aW5nIEFTWU5DX1NUQVJUIHRvIHBhcmVudCIpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgYW1lc3NhZ2UpOwotICB9Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLQotICByZXR1cm47Ci0KLWhhZF9lcnJvcjoKLSAgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLCAid2UgaGFkIGFuIGVycm9yIik7Ci0gICAgcmV0dXJuOwotICB9Ci13YXNfYnVzeToKLSAgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLCAic3RhdGUgY2hhbmdlIGJ1c3kiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICBnb3RvIHBvc3Rfc3RhcnQ7Ci0gIH0KLXdhc19ub19wcmVyb2xsOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sICJpZ25vcmluZywgd2UgYXJlIE5PX1BSRVJPTEwiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICBnb3RvIHBvc3Rfc3RhcnQ7Ci0gIH0KLX0KLQotLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBhc3luYyBlbGVtZW50cyBpbiB0aGUgYmluLiBXZQotICogcG9zdCBhIHN0YXRlIGNoYW5nZWQgbWVzc2FnZSBhbmQgYW4gQVNZTkNfRE9ORSBtZXNzYWdlLgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgT0JKRUNUIGxvY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1iaW5faGFuZGxlX2FzeW5jX2RvbmUgKEdzdEJpbiAqIGJpbiwgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0LAotICAgIGdib29sZWFuIGZsYWdfcGVuZGluZywgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZSkKLXsKLSAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZywgdGFyZ2V0OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBvbGRfcmV0OwotICBHc3RTdGF0ZSBvbGRfc3RhdGUsIG9sZF9uZXh0OwotICBnYm9vbGVhbiB0b3BsZXZlbCwgc3RhdGVfY2hhbmdlZCA9IEZBTFNFOwotICBHc3RNZXNzYWdlICphbWVzc2FnZSA9IE5VTEw7Ci0gIEJpbkNvbnRpbnVlRGF0YSAqY29udCA9IE5VTEw7Ci0KLSAgaWYgKEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdvdG8gaGFkX2Vycm9yOwotCi0gIHBlbmRpbmcgPSBHU1RfU1RBVEVfUEVORElORyAoYmluKTsKLQotICBpZiAoYmluLT5wb2xsaW5nKQotICAgIGdvdG8gd2FzX2J1c3k7Ci0KLSAgLyogY2hlY2sgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGNvbW1pdCAqLwotICBpZiAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKQotICAgIGdvdG8gbm90aGluZ19wZW5kaW5nOwotCi0gIG9sZF9yZXQgPSBHU1RfU1RBVEVfUkVUVVJOIChiaW4pOwotICBHU1RfU1RBVEVfUkVUVVJOIChiaW4pID0gcmV0OwotCi0gIC8qIG1vdmUgdG8gdGhlIG5leHQgdGFyZ2V0IHN0YXRlICovCi0gIHRhcmdldCA9IEdTVF9TVEFURV9UQVJHRVQgKGJpbik7Ci0gIHBlbmRpbmcgPSBHU1RfU1RBVEVfUEVORElORyAoYmluKSA9IHRhcmdldDsKLQotICBhbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19hc3luY19kb25lIChHU1RfT0JKRUNUX0NBU1QgKGJpbiksIHJ1bm5pbmdfdGltZSk7Ci0KLSAgb2xkX3N0YXRlID0gR1NUX1NUQVRFIChiaW4pOwotICAvKiB0aGlzIGlzIHRoZSBzdGF0ZSB3ZSBzaG91bGQgZ28gdG8gbmV4dCAqLwotICBvbGRfbmV4dCA9IEdTVF9TVEFURV9ORVhUIChiaW4pOwotCi0gIGlmIChvbGRfbmV4dCAhPSBHU1RfU1RBVEVfUExBWUlORykgewotICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sCi0gICAgICAgICJjb21taXR0aW5nIHN0YXRlIGZyb20gJXMgdG8gJXMsIG9sZCBwZW5kaW5nICVzIiwKLSAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZF9zdGF0ZSksCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGRfbmV4dCksCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChwZW5kaW5nKSk7Ci0KLSAgICAvKiB1cGRhdGUgY3VycmVudCBzdGF0ZSAqLwotICAgIGN1cnJlbnQgPSBHU1RfU1RBVEUgKGJpbikgPSBvbGRfbmV4dDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLAotICAgICAgICAic2V0dGluZyBzdGF0ZSBmcm9tICVzIHRvICVzLCBwZW5kaW5nICVzIiwKLSAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZF9zdGF0ZSksCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGRfc3RhdGUpLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGVuZGluZykpOwotICAgIGN1cnJlbnQgPSBvbGRfc3RhdGU7Ci0gIH0KLQotICAvKiBnZXQgb3VyIHRvcGxldmVsIHN0YXRlICovCi0gIHRvcGxldmVsID0gQklOX0lTX1RPUExFVkVMIChiaW4pOwotCi0gIC8qIHNlZSBpZiB3ZSByZWFjaGVkIHRoZSBmaW5hbCBzdGF0ZS4gSWYgd2UgYXJlIG5vdCB0b3BsZXZlbCwgd2UgYWxzbyBoYXZlIHRvCi0gICAqIHN0b3AgaGVyZSwgdGhlIHBhcmVudCB3aWxsIGNvbnRpbnVlIG91ciBzdGF0ZS4gKi8KLSAgaWYgKChwZW5kaW5nID09IGN1cnJlbnQpIHx8ICF0b3BsZXZlbCkgewotICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sCi0gICAgICAgICJjb21wbGV0ZWQgc3RhdGUgY2hhbmdlLCBwZW5kaW5nIFZPSUQiKTsKLQotICAgIC8qIG1hcmsgVk9JRCBwZW5kaW5nICovCi0gICAgcGVuZGluZyA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7Ci0gICAgR1NUX1NUQVRFX1BFTkRJTkcgKGJpbikgPSBwZW5kaW5nOwotICAgIEdTVF9TVEFURV9ORVhUIChiaW4pID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgYmluLAotICAgICAgICAiY29udGludWUgc3RhdGUgY2hhbmdlLCBwZW5kaW5nICVzIiwKLSAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHBlbmRpbmcpKTsKLQotICAgIGNvbnQgPSBnX3NsaWNlX25ldyAoQmluQ29udGludWVEYXRhKTsKLQotICAgIC8qIGNvb2tpZSB0byBkZXRlY3QgY29uY3VycmVudCBzdGF0ZSBjaGFuZ2UgKi8KLSAgICBjb250LT5jb29raWUgPSBHU1RfRUxFTUVOVF9DQVNUIChiaW4pLT5zdGF0ZV9jb29raWU7Ci0gICAgLyogcGVuZGluZyB0YXJnZXQgc3RhdGUgKi8KLSAgICBjb250LT5wZW5kaW5nID0gcGVuZGluZzsKLSAgICAvKiBtYXJrIGJ1c3kgKi8KLSAgICBHU1RfU1RBVEVfUkVUVVJOIChiaW4pID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKLSAgICBHU1RfU1RBVEVfTkVYVCAoYmluKSA9IEdTVF9TVEFURV9HRVRfTkVYVCAob2xkX3N0YXRlLCBwZW5kaW5nKTsKLSAgfQotCi0gIGlmIChvbGRfbmV4dCAhPSBHU1RfU1RBVEVfUExBWUlORykgewotICAgIGlmIChvbGRfc3RhdGUgIT0gb2xkX25leHQgfHwgb2xkX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7Ci0gICAgICBzdGF0ZV9jaGFuZ2VkID0gVFJVRTsKLSAgICB9Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgaWYgKHN0YXRlX2NoYW5nZWQpIHsKLSAgICBfcHJpdl9nc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VkIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCBvbGRfc3RhdGUsCi0gICAgICAgIG9sZF9uZXh0LCBwZW5kaW5nKTsKLSAgfQotICBpZiAoYW1lc3NhZ2UpIHsKLSAgICAvKiBwb3N0IG91ciBjb21iaW5lZCBBU1lOQ19ET05FIHdoZW4gYWxsIGlzIEFTWU5DX0RPTkUuICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicG9zdGluZyBBU1lOQ19ET05FIHRvIHBhcmVudCIpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgYW1lc3NhZ2UpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICBpZiAoY29udCkgewotICAgIC8qIHRvcGxldmVsLCBzdGFydCBjb250aW51ZSBzdGF0ZSAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImFsbCBhc3luYy1kb25lLCBzdGFydGluZyBzdGF0ZSBjb250aW51ZSIpOwotICAgIGJpbl9wdXNoX3N0YXRlX2NvbnRpbnVlIChiaW4sIGNvbnQpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInN0YXRlIGNoYW5nZSBjb21wbGV0ZSIpOwotICAgIEdTVF9TVEFURV9CUk9BRENBU1QgKGJpbik7Ci0gIH0KLSAgcmV0dXJuOwotCi1oYWRfZXJyb3I6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGJpbiwgIndlIGhhZCBhbiBlcnJvciIpOwotICAgIHJldHVybjsKLSAgfQotd2FzX2J1c3k6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGJpbiwgInN0YXRlIGNoYW5nZSBidXN5Iik7Ci0gICAgLyogaWYgd2Ugd2VyZSBidXN5IHdpdGggYSBzdGF0ZSBjaGFuZ2UgYW5kIHdlIGFyZSByZXF1ZXN0ZWQgdG8gZmxhZyBhCi0gICAgICogcGVuZGluZyBhc3luYyBkb25lLCB3ZSBkbyBzbyBoZXJlICovCi0gICAgaWYgKGZsYWdfcGVuZGluZykKLSAgICAgIGJpbi0+cHJpdi0+cGVuZGluZ19hc3luY19kb25lID0gVFJVRTsKLSAgICByZXR1cm47Ci0gIH0KLW5vdGhpbmdfcGVuZGluZzoKLSAgewotICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBiaW4sICJub3RoaW5nIHBlbmRpbmciKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWJpbl9kb19lb3MgKEdzdEJpbiAqIGJpbikKLXsKLSAgZ3VpbnQzMiBzZXFudW0gPSAwOwotICBnYm9vbGVhbiBlb3M7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAvKiBJZiBhbGwgc2lua3MgYXJlIEVPUywgd2UncmUgaW4gUExBWUlORyBhbmQgbm8gc3RhdGUgY2hhbmdlIGlzIHBlbmRpbmcKLSAgICogKG9yIHdlJ3JlIGRvaW5nIHBsYXlpbmcgdG8gcGxheWluZyBhbmQgbm9vbmUgZWxzZSB3aWxsIHRyaWdnZXIgcG9zdGluZwotICAgKiBFT1MgZm9yIHVzKSB3ZSBmb3J3YXJkIHRoZSBFT1MgbWVzc2FnZSB0byB0aGUgcGFyZW50IGJpbiBvciBhcHBsaWNhdGlvbgotICAgKi8KLSAgZW9zID0gR1NUX1NUQVRFIChiaW4pID09IEdTVF9TVEFURV9QTEFZSU5HCi0gICAgICAmJiAoR1NUX1NUQVRFX1BFTkRJTkcgKGJpbikgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyB8fAotICAgICAgR1NUX1NUQVRFX1BFTkRJTkcgKGJpbikgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAmJiBiaW4tPnByaXYtPnBvc3RlZF9wbGF5aW5nICYmIGlzX2VvcyAoYmluLCAmc2VxbnVtKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgaWYgKGVvcwotICAgICAgJiYgZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmYmluLT5wcml2LT5wb3N0ZWRfZW9zLCBGQUxTRSwKLSAgICAgICAgICBUUlVFKSkgewotICAgIEdzdE1lc3NhZ2UgKnRtZXNzYWdlOwotCi0gICAgLyogQ2xlYXIgb3V0IGFueSBmdXJ0aGVyIG1lc3NhZ2VzLCBhbmQgcmVzZXQgcG9zdGVkX2VvcyBzbyB3ZSBjYW4KLSAgICAgICBkZXRlY3QgYW55IG5ldyBFT1MgdGhhdCBoYXBwZW5zIChlZywgYWZ0ZXIgYSBzZWVrKS4gU2luY2UgYWxsCi0gICAgICAgc2lua3MgaGF2ZSBub3cgcG9zdGVkIGFuIEVPUywgdGhlcmUgd2lsbCBiZSBubyBmdXJ0aGVyIEVPUyBldmVudHMKLSAgICAgICBzZWVuIHVubGVzcyB0aGVyZSBpcyBhIG5ldyBsb2dpY2FsIEVPUyAqLwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgICBiaW5fcmVtb3ZlX21lc3NhZ2VzIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX0VPUyk7Ci0gICAgYmluLT5wcml2LT5wb3N0ZWRfZW9zID0gRkFMU0U7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgICB0bWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19lb3MgKEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSk7Ci0gICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAodG1lc3NhZ2UsIHNlcW51bSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLAotICAgICAgICAiYWxsIHNpbmtzIHBvc3RlZCBFT1MsIHBvc3Rpbmcgc2VxbnVtICMlIiBHX0dVSU5UMzJfRk9STUFULCBzZXFudW0pOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgdG1lc3NhZ2UpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChiaW4sICJOb3QgZm9yd2FyZGluZyBFT1MgZHVlIHRvIGluIHByb2dyZXNzIHN0YXRlIGNoYW5nZSwgIgotICAgICAgICAiIG9yIGFscmVhZHkgcG9zdGVkLCBvciB3YWl0aW5nIGZvciBtb3JlIEVPUyIpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1iaW5fZG9fc3RyZWFtX3N0YXJ0IChHc3RCaW4gKiBiaW4pCi17Ci0gIGd1aW50MzIgc2VxbnVtID0gMDsKLSAgZ2Jvb2xlYW4gc3RyZWFtX3N0YXJ0OwotICBnYm9vbGVhbiBoYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gIGd1aW50IGdyb3VwX2lkID0gMDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gIC8qIElmIGFsbCBzaW5rcyBhcmUgU1RSRUFNX1NUQVJUIHdlIGZvcndhcmQgdGhlIFNUUkVBTV9TVEFSVCBtZXNzYWdlCi0gICAqIHRvIHRoZSBwYXJlbnQgYmluIG9yIGFwcGxpY2F0aW9uCi0gICAqLwotICBzdHJlYW1fc3RhcnQgPSBpc19zdHJlYW1fc3RhcnQgKGJpbiwgJnNlcW51bSwgJmhhdmVfZ3JvdXBfaWQsICZncm91cF9pZCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gIGlmIChzdHJlYW1fc3RhcnQpIHsKLSAgICBHc3RNZXNzYWdlICp0bWVzc2FnZTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgICBiaW5fcmVtb3ZlX21lc3NhZ2VzIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgICB0bWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhcnQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSk7Ci0gICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAodG1lc3NhZ2UsIHNlcW51bSk7Ci0gICAgaWYgKGhhdmVfZ3JvdXBfaWQpCi0gICAgICBnc3RfbWVzc2FnZV9zZXRfZ3JvdXBfaWQgKHRtZXNzYWdlLCBncm91cF9pZCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAgICJhbGwgc2lua3MgcG9zdGVkIFNUUkVBTV9TVEFSVCwgcG9zdGluZyBzZXFudW0gIyUiIEdfR1VJTlQzMl9GT1JNQVQsCi0gICAgICAgIHNlcW51bSk7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCB0bWVzc2FnZSk7Ci0gIH0KLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgb2JqZWN0IGxvY2sgYXMgaXQgcG9zdHMgbWVzc2FnZXMgKi8KLXN0YXRpYyB2b2lkCi1iaW5fZG9fbWVzc2FnZV9mb3J3YXJkIChHc3RCaW4gKiBiaW4sIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBpZiAoYmluLT5wcml2LT5tZXNzYWdlX2ZvcndhcmQpIHsKLSAgICBHc3RNZXNzYWdlICpmb3J3YXJkZWQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJwYXNzICVzIG1lc3NhZ2UgdXB3YXJkIiwKLSAgICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSk7Ci0KLSAgICAvKiB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlc2UgbWVzc2FnZXMgdG8gZWxlbWVudCBtZXNzYWdlcyBzbyB0aGF0IG91ciBwYXJlbnQKLSAgICAgKiBiaW4gY2FuIGVhc2lseSBpZ25vcmUgdGhlbSBhbmQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gY2FuIGVhc2lseQotICAgICAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGludGVybmFsbHkgZm9yd2FyZGVkIGFuZCB0aGUgcmVhbCBtZXNzYWdlcy4gKi8KLSAgICBmb3J3YXJkZWQgPSBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoR1NUX09CSkVDVF9DQVNUIChiaW4pLAotICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoIkdzdEJpbkZvcndhcmRlZCIsCi0gICAgICAgICAgICAibWVzc2FnZSIsIEdTVF9UWVBFX01FU1NBR0UsIG1lc3NhZ2UsIE5VTEwpKTsKLQotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgZm9yd2FyZGVkKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jpbl91cGRhdGVfY29udGV4dCAoR3N0QmluICogYmluLCBHc3RDb250ZXh0ICogY29udGV4dCkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICBnc3RfYmluX3VwZGF0ZV9jb250ZXh0X3VubG9ja2VkIChiaW4sIGNvbnRleHQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iaW5fdXBkYXRlX2NvbnRleHRfdW5sb2NrZWQgKEdzdEJpbiAqIGJpbiwgR3N0Q29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGNvbnN0IGdjaGFyICpjb250ZXh0X3R5cGU7Ci0gIEdMaXN0ICpsLCAqKmNvbnRleHRzOwotCi0gIGNvbnRleHRzID0gJkdTVF9FTEVNRU5UX0NBU1QgKGJpbiktPmNvbnRleHRzOwotICBjb250ZXh0X3R5cGUgPSBnc3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlIChjb250ZXh0KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJzZXQgY29udGV4dCAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwgY29udGV4dCwKLSAgICAgIGdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUgKGNvbnRleHQpKTsKLSAgZm9yIChsID0gKmNvbnRleHRzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIEdzdENvbnRleHQgKnRtcCA9IGwtPmRhdGE7Ci0gICAgY29uc3QgZ2NoYXIgKnRtcF90eXBlID0gZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAodG1wKTsKLQotICAgIC8qIEFsd2F5cyBzdG9yZSBuZXdlc3QgY29udGV4dCBidXQgbmV2ZXIgcmVwbGFjZQotICAgICAqIGEgcGVyc2lzdGVudCBvbmUgYnkgYSBub24tcGVyc2lzdGVudCBvbmUgKi8KLSAgICBpZiAoc3RyY21wIChjb250ZXh0X3R5cGUsIHRtcF90eXBlKSA9PSAwICYmCi0gICAgICAgIChnc3RfY29udGV4dF9pc19wZXJzaXN0ZW50IChjb250ZXh0KSB8fAotICAgICAgICAgICAgIWdzdF9jb250ZXh0X2lzX3BlcnNpc3RlbnQgKHRtcCkpKSB7Ci0gICAgICBnc3RfY29udGV4dF9yZXBsYWNlICgoR3N0Q29udGV4dCAqKikgJiBsLT5kYXRhLCBjb250ZXh0KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAvKiBOb3QgZm91bmQ/IEFkZCAqLwotICBpZiAobCA9PSBOVUxMKSB7Ci0gICAgKmNvbnRleHRzID0gZ19saXN0X3ByZXBlbmQgKCpjb250ZXh0cywgZ3N0X2NvbnRleHRfcmVmIChjb250ZXh0KSk7Ci0gIH0KLX0KLQotLyogaGFuZGxlIGNoaWxkIG1lc3NhZ2VzOgotICoKLSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdoZW4gYSBjaGlsZCBwb3N0cyBhIG1lc3NhZ2Ugb24KLSAqIHRoZSBpbnRlcm5hbCBidXMuCi0gKgotICogR1NUX01FU1NBR0VfRU9TOiBUaGlzIG1lc3NhZ2UgaXMgb25seSBwb3N0ZWQgYnkgc2lua3MKLSAqICAgICBpbiB0aGUgUExBWUlORyBzdGF0ZS4gSWYgYWxsIHNpbmtzIHBvc3RlZCB0aGUgRU9TIG1lc3NhZ2UsIHBvc3QKLSAqICAgICBvbmUgdXB3YXJkcy4KLSAqCi0gKiBHU1RfTUVTU0FHRV9TVEFURV9ESVJUWTogRGVwcmVjYXRlZAotICoKLSAqIEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQ6IGp1c3QgY29sbGVjdCwgbmV2ZXIgZm9yd2FyZCB1cHdhcmRzLiBJZiBhbgotICogICAgIGVsZW1lbnQgcG9zdHMgc2VnbWVudF9zdGFydCB0d2ljZSwgb25seSB0aGUgbGFzdCBtZXNzYWdlIGlzIGtlcHQuCi0gKgotICogR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FOiByZXBsYWNlIFNFR01FTlRfU1RBUlQgbWVzc2FnZSBmcm9tIHNhbWUgcG9zdGVyCi0gKiAgICAgd2l0aCB0aGUgc2VnbWVudF9kb25lIG1lc3NhZ2UuIElmIHRoZXJlIGFyZSBubyBtb3JlIHNlZ21lbnRfc3RhcnQKLSAqICAgICBtZXNzYWdlcywgcG9zdCBzZWdtZW50X2RvbmUgbWVzc2FnZSB1cHdhcmRzLgotICoKLSAqIEdTVF9NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQ6IGNsZWFyIGFueSBjYWNoZWQgZHVyYXRpb25zLgotICogICAgIFdoZW5ldmVyIHNvbWVvbmUgcGVyZm9ybXMgYSBkdXJhdGlvbiBxdWVyeSBvbiB0aGUgYmluLCB3ZSBzdG9yZSB0aGUKLSAqICAgICByZXN1bHQgc28gd2UgY2FuIGFuc3dlciBpdCBxdWlja2VyIHRoZSBuZXh0IHRpbWUuIEFueSBlbGVtZW50IHRoYXQKLSAqICAgICBjaGFuZ2VzIGl0cyBkdXJhdGlvbiBtYXJrcyBvdXIgY2FjaGVkIHZhbHVlcyBpbnZhbGlkLgotICogICAgIFRoaXMgbWVzc2FnZSBpcyBhbHNvIHBvc3RlZCB1cHdhcmRzLiBUaGlzIGlzIGN1cnJlbnRseSBkaXNhYmxlZAotICogICAgIGJlY2F1c2UgdG9vIG1hbnkgZWxlbWVudHMgZG9uJ3QgcG9zdCBEVVJBVElPTl9DSEFOR0VEIG1lc3NhZ2VzIHdoZW4KLSAqICAgICB0aGUgZHVyYXRpb24gY2hhbmdlcy4KLSAqCi0gKiBHU1RfTUVTU0FHRV9DTE9DS19MT1NUOiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGFuIGVsZW1lbnQgd2hlbiBpdAotICogICAgIGNhbiBubyBsb25nZXIgcHJvdmlkZSBhIGNsb2NrLiBUaGUgZGVmYXVsdCBiaW4gYmVoYXZpb3VyIGlzIHRvCi0gKiAgICAgY2hlY2sgaWYgdGhlIGxvc3QgY2xvY2sgd2FzIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIGJpbi4gSWYgc28gYW5kCi0gKiAgICAgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgUExBWUlORyBzdGF0ZSwgd2UgZm9yd2FyZCB0aGUgbWVzc2FnZSB0bwotICogICAgIG91ciBwYXJlbnQuCi0gKiAgICAgVGhpcyBtZXNzYWdlIGlzIGFsc28gZ2VuZXJhdGVkIHdoZW4gd2UgcmVtb3ZlIGEgY2xvY2sgcHJvdmlkZXIgZnJvbQotICogICAgIGEgYmluLiBJZiB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBpdCBzaG91bGQKLSAqICAgICBQQVVTRSB0aGUgcGlwZWxpbmUgYW5kIHNldCBpdCBiYWNrIHRvIFBMQVlJTkcgdG8gZm9yY2UgYSBuZXcgY2xvY2sKLSAqICAgICBhbmQgYSBuZXcgYmFzZV90aW1lIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFOiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gZWxlbWVudAotICogICAgIGNhbiBwcm92aWRlIGEgY2xvY2suIFRoaXMgbW9zdGx5IGhhcHBlbnMgd2hlbiB3ZSBhZGQgYSBuZXcgY2xvY2sKLSAqICAgICBwcm92aWRlciB0byB0aGUgYmluLiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGhlIGJpbiBpcyB0byBtYXJrIHRoZQotICogICAgIGN1cnJlbnRseSBzZWxlY3RlZCBjbG9jayBhcyBkaXJ0eSwgd2hpY2ggd2lsbCBwZXJmb3JtIGEgY2xvY2sKLSAqICAgICByZWNhbGN1bGF0aW9uIHRoZSBuZXh0IHRpbWUgd2UgYXJlIGFza2VkIHRvIHByb3ZpZGUgYSBjbG9jay4KLSAqICAgICBUaGlzIG1lc3NhZ2UgaXMgbmV2ZXIgc2VudCB0byB0aGUgYXBwbGljYXRpb24gYnV0IGlzIGZvcndhcmRlZCB0bwotICogICAgIHRoZSBwYXJlbnQuCi0gKgotICogR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQ6IENyZWF0ZSBhbiBpbnRlcm5hbCBFTEVNRU5UIG1lc3NhZ2UgdGhhdCBzdG9yZXMKLSAqICAgICB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnQgYW5kIHRoZSBmYWN0IHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBuZWVkIGEKLSAqICAgICBuZXcgYmFzZV90aW1lLiBUaGlzIG1lc3NhZ2UgaXMgbm90IGZvcndhcmRlZCB0byB0aGUgYXBwbGljYXRpb24uCi0gKgotICogR1NUX01FU1NBR0VfQVNZTkNfRE9ORTogRmluZCB0aGUgaW50ZXJuYWwgRUxFTUVOVCBtZXNzYWdlIHdlIGtlcHQgZm9yIHRoZQotICogICAgIGVsZW1lbnQgd2hlbiBpdCBwb3N0ZWQgQVNZTkNfU1RBUlQuIElmIGFsbCBlbGVtZW50cyBhcmUgZG9uZSwgcG9zdCBhCi0gKiAgICAgQVNZTkNfRE9ORSBtZXNzYWdlIHRvIHRoZSBwYXJlbnQuCi0gKgotICogT1RIRVI6IHBvc3QgdXB3YXJkcy4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9iaW5faGFuZGxlX21lc3NhZ2VfZnVuYyAoR3N0QmluICogYmluLCBHc3RNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgR3N0T2JqZWN0ICpzcmM7Ci0gIEdzdE1lc3NhZ2VUeXBlIHR5cGU7Ci0gIEdzdE1lc3NhZ2UgKnRtZXNzYWdlOwotICBndWludDMyIHNlcW51bTsKLQotICBzcmMgPSBHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpOwotICB0eXBlID0gR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiW21zZyAlcF0gaGFuZGxpbmcgY2hpbGQgJXMgbWVzc2FnZSBvZiB0eXBlICVzIiwKLSAgICAgIG1lc3NhZ2UsIHNyYyA/IEdTVF9FTEVNRU5UX05BTUUgKHNyYykgOiAiKE5VTEwpIiwKLSAgICAgIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSkpOwotCi0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgewotICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAgICAgLyogZmxhZyBlcnJvciAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZ290IEVSUk9SIG1lc3NhZ2UsIHVubG9ja2luZyBzdGF0ZSBjaGFuZ2UiKTsKLSAgICAgIEdTVF9TVEFURV9SRVRVUk4gKGJpbikgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICBHU1RfU1RBVEVfQlJPQURDQVNUIChiaW4pOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgICAgIGdvdG8gZm9yd2FyZDsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgewotCi0gICAgICAvKiBjb2xsZWN0IGFsbCBlb3MgbWVzc2FnZXMgZnJvbSB0aGUgY2hpbGRyZW4gKi8KLSAgICAgIGJpbl9kb19tZXNzYWdlX2ZvcndhcmQgKGJpbiwgbWVzc2FnZSk7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gICAgICAvKiByZWYgbWVzc2FnZSBmb3IgZnV0dXJlIHVzZSAgKi8KLSAgICAgIGJpbl9yZXBsYWNlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSwgR1NUX01FU1NBR0VfRU9TKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gICAgICBiaW5fZG9fZW9zIChiaW4pOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJUOgotICAgIHsKLQotICAgICAgLyogY29sbGVjdCBhbGwgc3RyZWFtX3N0YXJ0IG1lc3NhZ2VzIGZyb20gdGhlIGNoaWxkcmVuICovCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gICAgICAvKiByZWYgbWVzc2FnZSBmb3IgZnV0dXJlIHVzZSAgKi8KLSAgICAgIGJpbl9yZXBsYWNlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSwgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJUKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gICAgICBiaW5fZG9fc3RyZWFtX3N0YXJ0IChiaW4pOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfU1RBVEVfRElSVFk6Ci0gICAgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChiaW4sICJyZWNlaXZlZCBkZXByZWNhdGVkIFNUQVRFX0RJUlRZIG1lc3NhZ2UiKTsKLQotICAgICAgLyogZnJlZSBtZXNzYWdlICovCi0gICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUOnsKLSAgICAgIGdib29sZWFuIHBvc3QgPSBGQUxTRTsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gICAgICBnaW50NjQgcG9zaXRpb247Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQgKG1lc3NhZ2UsICZmb3JtYXQsICZwb3NpdGlvbik7Ci0gICAgICBzZXFudW0gPSBnc3RfbWVzc2FnZV9nZXRfc2VxbnVtIChtZXNzYWdlKTsKLQotICAgICAgYmluX2RvX21lc3NhZ2VfZm9yd2FyZCAoYmluLCBtZXNzYWdlKTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAgICAgLyogaWYgdGhpcyBpcyB0aGUgZmlyc3Qgc2VnbWVudC1zdGFydCwgcG9zdCB0byBwYXJlbnQgYnV0IG5vdCB0byB0aGUKLSAgICAgICAqIGFwcGxpY2F0aW9uICovCi0gICAgICBpZiAoIWZpbmRfbWVzc2FnZSAoYmluLCBOVUxMLCBHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUKSAmJgotICAgICAgICAgIChHU1RfT0JKRUNUX1BBUkVOVCAoYmluKSAhPSBOVUxMKSkgewotICAgICAgICBwb3N0ID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIC8qIHJlcGxhY2UgYW55IHByZXZpb3VzIHNlZ21lbnRfc3RhcnQgbWVzc2FnZSBmcm9tIHRoaXMgc291cmNlCi0gICAgICAgKiB3aXRoIHRoZSBuZXcgc2VnbWVudCBzdGFydCBtZXNzYWdlICovCi0gICAgICBiaW5fcmVwbGFjZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UsIEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0gICAgICBpZiAocG9zdCkgewotICAgICAgICB0bWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKGJpbiksCi0gICAgICAgICAgICBmb3JtYXQsIHBvc2l0aW9uKTsKLSAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAodG1lc3NhZ2UsIHNlcW51bSk7Ci0KLSAgICAgICAgLyogcG9zdCBzZWdtZW50IHN0YXJ0IHdpdGggaW5pdGlhbCBmb3JtYXQgYW5kIHBvc2l0aW9uLiAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJwb3N0aW5nIFNFR01FTlRfU1RBUlQgKCV1KSBidXMgbWVzc2FnZTogJXAiLAotICAgICAgICAgICAgc2VxbnVtLCBtZXNzYWdlKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCB0bWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkU6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gcG9zdCA9IEZBTFNFOwotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgIGdpbnQ2NCBwb3NpdGlvbjsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lIChtZXNzYWdlLCAmZm9ybWF0LCAmcG9zaXRpb24pOwotICAgICAgc2VxbnVtID0gZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bSAobWVzc2FnZSk7Ci0KLSAgICAgIGJpbl9kb19tZXNzYWdlX2ZvcndhcmQgKGJpbiwgbWVzc2FnZSk7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgICAgIGJpbl9yZXBsYWNlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSwgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCk7Ci0gICAgICAvKiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBzZWdtZW50X3N0YXJ0IG1lc3NhZ2VzLCBldmVyeWJvZHkgcG9zdGVkCi0gICAgICAgKiBhIHNlZ21lbnRfZG9uZSBhbmQgd2UgY2FuIHBvc3Qgb25lIG9uIHRoZSBidXMuICovCi0KLSAgICAgIC8qIHdlIGRvbid0IGNhcmUgd2hvIHN0aWxsIGhhcyBhIHBlbmRpbmcgc2VnbWVudCBzdGFydCAqLwotICAgICAgaWYgKCFmaW5kX21lc3NhZ2UgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCkpIHsKLSAgICAgICAgLyogbm90aGluZyBmb3VuZCAqLwotICAgICAgICBwb3N0ID0gVFJVRTsKLSAgICAgICAgLyogcmVtb3ZlIGFsbCBvbGQgc2VnbWVudF9kb25lIG1lc3NhZ2VzICovCi0gICAgICAgIGJpbl9yZW1vdmVfbWVzc2FnZXMgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FKTsKLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgICAgaWYgKHBvc3QpIHsKLSAgICAgICAgdG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHU1RfT0JKRUNUX0NBU1QgKGJpbiksCi0gICAgICAgICAgICBmb3JtYXQsIHBvc2l0aW9uKTsKLSAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAodG1lc3NhZ2UsIHNlcW51bSk7Ci0KLSAgICAgICAgLyogcG9zdCBzZWdtZW50IGRvbmUgd2l0aCBsYXRlc3QgZm9ybWF0IGFuZCBwb3NpdGlvbi4gKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicG9zdGluZyBTRUdNRU5UX0RPTkUgKCV1KSBidXMgbWVzc2FnZTogJXAiLAotICAgICAgICAgICAgc2VxbnVtLCBtZXNzYWdlKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCB0bWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9EVVJBVElPTl9DSEFOR0VEOgotICAgIHsKLSAgICAgIC8qIEZJWE1FOiByZW1vdmUgYWxsIGNhY2hlZCBkdXJhdGlvbnMsIG5leHQgdGltZSBzb21lYm9keSBhc2tzCi0gICAgICAgKiBmb3IgZHVyYXRpb24sIHdlIHdpbGwgcmVjYWxjdWxhdGUuICovCi0jaWYgMAotICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAgICAgYmluX3JlbW92ZV9tZXNzYWdlcyAoYmluLCBOVUxMLCBHU1RfTUVTU0FHRV9EVVJBVElPTl9DSEFOR0VEKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotI2VuZGlmCi0gICAgICBnb3RvIGZvcndhcmQ7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVDoKLSAgICB7Ci0gICAgICBHc3RDbG9jayAqKnByb3ZpZGVkX2Nsb2NrX3A7Ci0gICAgICBHc3RFbGVtZW50ICoqY2xvY2tfcHJvdmlkZXJfcDsKLSAgICAgIGdib29sZWFuIHBsYXlpbmcsIHRvcGxldmVsLCBwcm92aWRlZCwgZm9yd2FyZDsKLSAgICAgIEdzdENsb2NrICpjbG9jazsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdCAobWVzc2FnZSwgJmNsb2NrKTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAgICAgYmluLT5jbG9ja19kaXJ0eSA9IFRSVUU7Ci0gICAgICAvKiBpZiB3ZSBsb3N0IHRoZSBjbG9jayB0aGF0IHdlIHByb3ZpZGVkLCBwb3N0IHRvIHBhcmVudCBidXQKLSAgICAgICAqIG9ubHkgaWYgd2UgYXJlIG5vdCBhIHRvcC1sZXZlbCBiaW4gb3IgUExBWUlORy4KLSAgICAgICAqIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBhcHBsaWNhdGlvbnMgc2hvdWxkIGJlIGFibGUKLSAgICAgICAqIHRvIFBBVVNFL1BMQVkgaWYgdGhleSByZWNlaXZlIHRoaXMgbWVzc2FnZSB3aXRob3V0IHdvcnJ5aW5nCi0gICAgICAgKiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHBpcGVsaW5lLiAqLwotICAgICAgcHJvdmlkZWQgPSAoY2xvY2sgPT0gYmluLT5wcm92aWRlZF9jbG9jayk7Ci0gICAgICBwbGF5aW5nID0gKEdTVF9TVEFURSAoYmluKSA9PSBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICB0b3BsZXZlbCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChiaW4pID09IE5VTEw7Ci0gICAgICBmb3J3YXJkID0gcHJvdmlkZWQgJiYgKHBsYXlpbmcgfHwgIXRvcGxldmVsKTsKLSAgICAgIGlmIChwcm92aWRlZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAgICAgICAiTG9zdCBjbG9jayAlIiBHU1RfUFRSX0ZPUk1BVCAiIHByb3ZpZGVkIGJ5ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgICAgYmluLT5wcm92aWRlZF9jbG9jaywgYmluLT5jbG9ja19wcm92aWRlcik7Ci0gICAgICAgIHByb3ZpZGVkX2Nsb2NrX3AgPSAmYmluLT5wcm92aWRlZF9jbG9jazsKLSAgICAgICAgY2xvY2tfcHJvdmlkZXJfcCA9ICZiaW4tPmNsb2NrX3Byb3ZpZGVyOwotICAgICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIHByb3ZpZGVkX2Nsb2NrX3AsIE5VTEwpOwotICAgICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGNsb2NrX3Byb3ZpZGVyX3AsIE5VTEwpOwotICAgICAgfQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicHJvdmlkZWQgJWQsIHBsYXlpbmcgJWQsIGZvcndhcmQgJWQiLAotICAgICAgICAgIHByb3ZpZGVkLCBwbGF5aW5nLCBmb3J3YXJkKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgZ290byBmb3J3YXJkOwotCi0gICAgICAvKiBmcmVlIG1lc3NhZ2UgKi8KLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREU6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gZm9yd2FyZDsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICAgICAgYmluLT5jbG9ja19kaXJ0eSA9IFRSVUU7Ci0gICAgICAvKiBhIG5ldyBjbG9jayBpcyBhdmFpbGFibGUsIHBvc3QgdG8gcGFyZW50IGJ1dCBub3QKLSAgICAgICAqIHRvIHRoZSBhcHBsaWNhdGlvbiAqLwotICAgICAgZm9yd2FyZCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChiaW4pICE9IE5VTEw7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgIGdvdG8gZm9yd2FyZDsKLQotICAgICAgLyogZnJlZSBtZXNzYWdlICovCi0gICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVDoKLSAgICB7Ci0gICAgICBHc3RTdGF0ZSB0YXJnZXQ7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIkFTWU5DX1NUQVJUIG1lc3NhZ2UgJXAsICVzIiwgbWVzc2FnZSwKLSAgICAgICAgICBzcmMgPyBHU1RfT0JKRUNUX05BTUUgKHNyYykgOiAiKE5VTEwpIik7Ci0KLSAgICAgIGJpbl9kb19tZXNzYWdlX2ZvcndhcmQgKGJpbiwgbWVzc2FnZSk7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgICAgIC8qIHdlIGlnbm9yZSB0aGUgbWVzc2FnZSBpZiB3ZSBhcmUgZ29pbmcgdG8gPD0gUkVBRFkgKi8KLSAgICAgIGlmICgodGFyZ2V0ID0gR1NUX1NUQVRFX1RBUkdFVCAoYmluKSkgPD0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICBnb3RvIGlnbm9yZV9zdGFydF9tZXNzYWdlOwotCi0gICAgICAvKiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UgKi8KLSAgICAgIGJpbl9yZXBsYWNlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSwgR1NUX01FU1NBR0VfQVNZTkNfU1RBUlQpOwotCi0gICAgICBiaW5faGFuZGxlX2FzeW5jX3N0YXJ0IChiaW4pOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0gICAgICBicmVhazsKLQotICAgIGlnbm9yZV9zdGFydF9tZXNzYWdlOgotICAgICAgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJpZ25vcmluZyBtZXNzYWdlLCB0YXJnZXQgJXMiLAotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHRhcmdldCkpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9BU1lOQ19ET05FOgotICAgIHsKLSAgICAgIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWU7Ci0gICAgICBHc3RTdGF0ZSB0YXJnZXQ7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIkFTWU5DX0RPTkUgbWVzc2FnZSAlcCwgJXMiLCBtZXNzYWdlLAotICAgICAgICAgIHNyYyA/IEdTVF9PQkpFQ1RfTkFNRSAoc3JjKSA6ICIoTlVMTCkiKTsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfZG9uZSAobWVzc2FnZSwgJnJ1bm5pbmdfdGltZSk7Ci0KLSAgICAgIGJpbl9kb19tZXNzYWdlX2ZvcndhcmQgKGJpbiwgbWVzc2FnZSk7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgICAgIC8qIGlnbm9yZSBtZXNzYWdlcyBpZiB3ZSBhcmUgc2h1dHRpbmcgZG93biAqLwotICAgICAgaWYgKCh0YXJnZXQgPSBHU1RfU1RBVEVfVEFSR0VUIChiaW4pKSA8PSBHU1RfU1RBVEVfUkVBRFkpCi0gICAgICAgIGdvdG8gaWdub3JlX2RvbmVfbWVzc2FnZTsKLQotICAgICAgYmluX3JlcGxhY2VfbWVzc2FnZSAoYmluLCBtZXNzYWdlLCBHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVCk7Ci0gICAgICAvKiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBBU1lOQ19TVEFSVCBtZXNzYWdlcywgZXZlcnlib2R5IHBvc3RlZAotICAgICAgICogYSBBU1lOQ19ET05FIGFuZCB3ZSBjYW4gcG9zdCBvbmUgb24gdGhlIGJ1cy4gV2hlbiBjaGVja2luZywgd2UKLSAgICAgICAqIGRvbid0IGNhcmUgd2hvIHN0aWxsIGhhcyBhIHBlbmRpbmcgQVNZTkNfU1RBUlQgKi8KLSAgICAgIGlmICghZmluZF9tZXNzYWdlIChiaW4sIE5VTEwsIEdTVF9NRVNTQUdFX0FTWU5DX1NUQVJUKSkgewotICAgICAgICAvKiBub3RoaW5nIGZvdW5kLCByZW1vdmUgYWxsIG9sZCBBU1lOQ19ET05FIG1lc3NhZ2VzICovCi0gICAgICAgIGJpbl9yZW1vdmVfbWVzc2FnZXMgKGJpbiwgTlVMTCwgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiYXN5bmMgZWxlbWVudHMgY29tbWl0ZWQiKTsKLSAgICAgICAgLyogd2hlbiB3ZSBnZXQgYW4gYXN5bmMgZG9uZSBtZXNzYWdlIHdoZW4gYSBzdGF0ZSBjaGFuZ2Ugd2FzIGJ1c3ksIHdlCi0gICAgICAgICAqIG5lZWQgdG8gc2V0IHRoZSBwZW5kaW5nX2RvbmUgZmxhZyBzbyB0aGF0IGF0IHRoZSBlbmQgb2YgdGhlIHN0YXRlCi0gICAgICAgICAqIGNoYW5nZSB3ZSBjYW4gc2VlIGlmIHdlIG5lZWQgdG8gdmVyaWZ5IHBlbmRpbmcgYXN5bmMgZWxlbWVudHMsIGhlbmNlCi0gICAgICAgICAqIHRoZSBUUlVFIGFyZ3VtZW50IGhlcmUuICovCi0gICAgICAgIGJpbl9oYW5kbGVfYXN5bmNfZG9uZSAoYmluLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsIFRSVUUsCi0gICAgICAgICAgICBydW5uaW5nX3RpbWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAidGhlcmUgYXJlIG1vcmUgYXN5bmMgZWxlbWVudHMgcGVuZGluZyIpOwotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0gICAgICBicmVhazsKLQotICAgIGlnbm9yZV9kb25lX21lc3NhZ2U6Ci0gICAgICB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImlnbm9yaW5nIG1lc3NhZ2UsIHRhcmdldCAlcyIsCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAodGFyZ2V0KSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0U6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gYnVzeTsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RydWN0dXJlX2NoYW5nZSAobWVzc2FnZSwgTlVMTCwgTlVMTCwgJmJ1c3kpOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gICAgICBpZiAoYnVzeSkgewotICAgICAgICAvKiB3aGlsZSB0aGUgcGFkIGlzIGJ1c3ksIGF2b2lkIGZvbGxvd2luZyBpdCB3aGVuIGRvaW5nIHN0YXRlIGNoYW5nZXMuCi0gICAgICAgICAqIERvbid0IHVwZGF0ZSB0aGUgY29va2llIHlldCwgd2Ugd2lsbCBkbyB0aGF0IGFmdGVyIHRoZSBzdHJ1Y3R1cmUKLSAgICAgICAgICogY2hhbmdlIGZpbmlzaGVkIGFuZCB3ZSBhcmUgcmVhZHkgdG8gaW5zcGVjdCB0aGUgbmV3IHVwZGF0ZWQKLSAgICAgICAgICogc3RydWN0dXJlLiAqLwotICAgICAgICBiaW5fcmVwbGFjZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UsIEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UpOwotICAgICAgICBtZXNzYWdlID0gTlVMTDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGEgcGFkIGxpbmsvdW5saW5rIGVuZGVkLCBzaWduYWwgdGhlIHN0YXRlIGNoYW5nZSBpdGVyYXRvciB0aGF0IHdlCi0gICAgICAgICAqIG5lZWQgdG8gcmVzeW5jIGJ5IHVwZGF0aW5nIHRoZSBzdHJ1Y3R1cmVfY29va2llLiAqLwotICAgICAgICBiaW5fcmVtb3ZlX21lc3NhZ2VzIChiaW4sIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksCi0gICAgICAgICAgICBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFKTsKLSAgICAgICAgaWYgKCFHU1RfQklOX0lTX05PX1JFU1lOQyAoYmluKSkKLSAgICAgICAgICBiaW4tPnByaXYtPnN0cnVjdHVyZV9jb29raWUrKzsKLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotCi0gICAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQ6ewotICAgICAgY29uc3QgZ2NoYXIgKmNvbnRleHRfdHlwZTsKLSAgICAgIEdMaXN0ICpsLCAqY29udGV4dHM7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZSAobWVzc2FnZSwgJmNvbnRleHRfdHlwZSk7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gICAgICBjb250ZXh0cyA9IEdTVF9FTEVNRU5UX0NBU1QgKGJpbiktPmNvbnRleHRzOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGJpbiwgImdvdCBuZWVkLWNvbnRleHQgbWVzc2FnZSB0eXBlOiAlcyIsIGNvbnRleHRfdHlwZSk7Ci0gICAgICBmb3IgKGwgPSBjb250ZXh0czsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICAgICAgR3N0Q29udGV4dCAqdG1wID0gbC0+ZGF0YTsKLSAgICAgICAgY29uc3QgZ2NoYXIgKnRtcF90eXBlID0gZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAodG1wKTsKLQotICAgICAgICBpZiAoc3RyY21wIChjb250ZXh0X3R5cGUsIHRtcF90eXBlKSA9PSAwKSB7Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQgKEdTVF9FTEVNRU5UIChzcmMpLCBsLT5kYXRhKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgICAgIC8qIEZvcndhcmQgaWYgd2UgY291bGRuJ3QgYW5zd2VyIHRoZSBtZXNzYWdlICovCi0gICAgICBpZiAobCA9PSBOVUxMKSB7Ci0gICAgICAgIGdvdG8gZm9yd2FyZDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgIH0KLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfSEFWRV9DT05URVhUOnsKLSAgICAgIEdzdENvbnRleHQgKmNvbnRleHQ7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dCAobWVzc2FnZSwgJmNvbnRleHQpOwotICAgICAgZ3N0X2Jpbl91cGRhdGVfY29udGV4dCAoYmluLCBjb250ZXh0KTsKLSAgICAgIGdzdF9jb250ZXh0X3VucmVmIChjb250ZXh0KTsKLQotICAgICAgZ290byBmb3J3YXJkOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBnb3RvIGZvcndhcmQ7Ci0gIH0KLSAgcmV0dXJuOwotCi1mb3J3YXJkOgotICB7Ci0gICAgLyogU2VuZCBhbGwgb3RoZXIgbWVzc2FnZXMgdXB3YXJkICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicG9zdGluZyBtZXNzYWdlIHVwd2FyZCIpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgbWVzc2FnZSk7Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLS8qIGdlbmVyaWMgc3RydWN0IHBhc3NlZCB0byBhbGwgcXVlcnkgZm9sZCBtZXRob2RzICovCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdpbnQ2NCBtaW47Ci0gIGdpbnQ2NCBtYXg7Ci0gIGdib29sZWFuIGxpdmU7Ci19IFF1ZXJ5Rm9sZDsKLQotdHlwZWRlZiB2b2lkICgqUXVlcnlJbml0RnVuY3Rpb24pIChHc3RCaW4gKiBiaW4sIFF1ZXJ5Rm9sZCAqIGZvbGQpOwotdHlwZWRlZiB2b2lkICgqUXVlcnlEb25lRnVuY3Rpb24pIChHc3RCaW4gKiBiaW4sIFF1ZXJ5Rm9sZCAqIGZvbGQpOwotCi0vKiBmb3IgZHVyYXRpb24vcG9zaXRpb24gd2UgY29sbGVjdCBhbGwgZHVyYXRpb25zL3Bvc2l0aW9ucyBhbmQgdGFrZQotICogdGhlIE1BWCBvZiBhbGwgdmFsaWQgcmVzdWx0cyAqLwotc3RhdGljIHZvaWQKLWJpbl9xdWVyeV9taW5fbWF4X2luaXQgKEdzdEJpbiAqIGJpbiwgUXVlcnlGb2xkICogZm9sZCkKLXsKLSAgZm9sZC0+bWluID0gMDsKLSAgZm9sZC0+bWF4ID0gLTE7Ci0gIGZvbGQtPmxpdmUgPSBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1iaW5fcXVlcnlfZHVyYXRpb25fZm9sZCAoY29uc3QgR1ZhbHVlICogdml0ZW0sIEdWYWx1ZSAqIHJldCwgUXVlcnlGb2xkICogZm9sZCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdE9iamVjdCAqaXRlbSA9IGdfdmFsdWVfZ2V0X29iamVjdCAodml0ZW0pOwotICBpZiAoR1NUX0lTX1BBRCAoaXRlbSkpCi0gICAgcmVzID0gZ3N0X3BhZF9xdWVyeSAoR1NUX1BBRCAoaXRlbSksIGZvbGQtPnF1ZXJ5KTsKLSAgZWxzZQotICAgIHJlcyA9IGdzdF9lbGVtZW50X3F1ZXJ5IChHU1RfRUxFTUVOVCAoaXRlbSksIGZvbGQtPnF1ZXJ5KTsKLQotICBpZiAocmVzKSB7Ci0gICAgZ2ludDY0IGR1cmF0aW9uOwotCi0gICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAocmV0LCBUUlVFKTsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAoZm9sZC0+cXVlcnksIE5VTEwsICZkdXJhdGlvbik7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChpdGVtLCAiZ290IGR1cmF0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVCwgZHVyYXRpb24pOwotCi0gICAgaWYgKGR1cmF0aW9uID09IC0xKSB7Ci0gICAgICAvKiBkdXJhdGlvbiBxdWVyeSBzdWNjZWVkZWQsIGJ1dCBkdXJhdGlvbiBpcyB1bmtub3duICovCi0gICAgICBmb2xkLT5tYXggPSAtMTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAoZHVyYXRpb24gPiBmb2xkLT5tYXgpCi0gICAgICBmb2xkLT5tYXggPSBkdXJhdGlvbjsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotYmluX3F1ZXJ5X2R1cmF0aW9uX2RvbmUgKEdzdEJpbiAqIGJpbiwgUXVlcnlGb2xkICogZm9sZCkKLXsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKGZvbGQtPnF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLSAgLyogc3RvcmUgbWF4IGluIHF1ZXJ5IHJlc3VsdCAqLwotICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChmb2xkLT5xdWVyeSwgZm9ybWF0LCBmb2xkLT5tYXgpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIm1heCBkdXJhdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQsIGZvbGQtPm1heCk7Ci0KLSAgLyogRklYTUU6IHJlLWltcGxlbWVudCBkdXJhdGlvbiBjYWNoaW5nICovCi0jaWYgMAotICAvKiBhbmQgY2FjaGUgbm93ICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgYmluLT5tZXNzYWdlcyA9IGdfbGlzdF9wcmVwZW5kIChiaW4tPm1lc3NhZ2VzLAotICAgICAgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uIChHU1RfT0JKRUNUX0NBU1QgKGJpbiksIGZvcm1hdCwgZm9sZC0+bWF4KSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiaW4pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotYmluX3F1ZXJ5X3Bvc2l0aW9uX2ZvbGQgKGNvbnN0IEdWYWx1ZSAqIHZpdGVtLCBHVmFsdWUgKiByZXQsIFF1ZXJ5Rm9sZCAqIGZvbGQpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RPYmplY3QgKml0ZW0gPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZpdGVtKTsKLSAgaWYgKEdTVF9JU19QQUQgKGl0ZW0pKQotICAgIHJlcyA9IGdzdF9wYWRfcXVlcnkgKEdTVF9QQUQgKGl0ZW0pLCBmb2xkLT5xdWVyeSk7Ci0gIGVsc2UKLSAgICByZXMgPSBnc3RfZWxlbWVudF9xdWVyeSAoR1NUX0VMRU1FTlQgKGl0ZW0pLCBmb2xkLT5xdWVyeSk7Ci0KLSAgaWYgKHJlcykgewotICAgIGdpbnQ2NCBwb3NpdGlvbjsKLQotICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHJldCwgVFJVRSk7Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKGZvbGQtPnF1ZXJ5LCBOVUxMLCAmcG9zaXRpb24pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoaXRlbSwgImdvdCBwb3NpdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQsIHBvc2l0aW9uKTsKLQotICAgIGlmIChwb3NpdGlvbiA+IGZvbGQtPm1heCkKLSAgICAgIGZvbGQtPm1heCA9IHBvc2l0aW9uOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1iaW5fcXVlcnlfcG9zaXRpb25fZG9uZSAoR3N0QmluICogYmluLCBRdWVyeUZvbGQgKiBmb2xkKQotewotICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAoZm9sZC0+cXVlcnksICZmb3JtYXQsIE5VTEwpOwotICAvKiBzdG9yZSBtYXggaW4gcXVlcnkgcmVzdWx0ICovCi0gIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKGZvbGQtPnF1ZXJ5LCBmb3JtYXQsIGZvbGQtPm1heCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAibWF4IHBvc2l0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVCwgZm9sZC0+bWF4KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1iaW5fcXVlcnlfbGF0ZW5jeV9mb2xkIChjb25zdCBHVmFsdWUgKiB2aXRlbSwgR1ZhbHVlICogcmV0LCBRdWVyeUZvbGQgKiBmb2xkKQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR3N0T2JqZWN0ICppdGVtID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2aXRlbSk7Ci0gIGlmIChHU1RfSVNfUEFEIChpdGVtKSkKLSAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5IChHU1RfUEFEIChpdGVtKSwgZm9sZC0+cXVlcnkpOwotICBlbHNlCi0gICAgcmVzID0gZ3N0X2VsZW1lbnRfcXVlcnkgKEdTVF9FTEVNRU5UIChpdGVtKSwgZm9sZC0+cXVlcnkpOwotICBpZiAocmVzKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIG1pbiwgbWF4OwotICAgIGdib29sZWFuIGxpdmU7Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAoZm9sZC0+cXVlcnksICZsaXZlLCAmbWluLCAmbWF4KTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGl0ZW0sCi0gICAgICAgICJnb3QgbGF0ZW5jeSBtaW4gJSIgR1NUX1RJTUVfRk9STUFUICIsIG1heCAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiwgbGl2ZSAlZCIsIEdTVF9USU1FX0FSR1MgKG1pbiksIEdTVF9USU1FX0FSR1MgKG1heCksIGxpdmUpOwotCi0gICAgLyogZm9yIHRoZSBjb21iaW5lZCBsYXRlbmN5IHdlIGNvbGxlY3QgdGhlIE1BWCBvZiBhbGwgbWluIGxhdGVuY2llcyBhbmQKLSAgICAgKiB0aGUgTUlOIG9mIGFsbCBtYXggbGF0ZW5jaWVzICovCi0gICAgaWYgKGxpdmUpIHsKLSAgICAgIGlmIChtaW4gPiBmb2xkLT5taW4pCi0gICAgICAgIGZvbGQtPm1pbiA9IG1pbjsKLSAgICAgIGlmIChmb2xkLT5tYXggPT0gLTEpCi0gICAgICAgIGZvbGQtPm1heCA9IG1heDsKLSAgICAgIGVsc2UgaWYgKG1heCA8IGZvbGQtPm1heCkKLSAgICAgICAgZm9sZC0+bWF4ID0gbWF4OwotICAgICAgaWYgKCFmb2xkLT5saXZlKQotICAgICAgICBmb2xkLT5saXZlID0gbGl2ZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAocmV0LCBGQUxTRSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaXRlbSwgImZhaWxlZCBxdWVyeSIpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1iaW5fcXVlcnlfbGF0ZW5jeV9kb25lIChHc3RCaW4gKiBiaW4sIFF1ZXJ5Rm9sZCAqIGZvbGQpCi17Ci0gIC8qIHN0b3JlIG1heCBpbiBxdWVyeSByZXN1bHQgKi8KLSAgZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5IChmb2xkLT5xdWVyeSwgZm9sZC0+bGl2ZSwgZm9sZC0+bWluLCBmb2xkLT5tYXgpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwKLSAgICAgICJsYXRlbmN5IG1pbiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgbGl2ZSAlZCIsIEdTVF9USU1FX0FSR1MgKGZvbGQtPm1pbiksIEdTVF9USU1FX0FSR1MgKGZvbGQtPm1heCksCi0gICAgICBmb2xkLT5saXZlKTsKLX0KLQotLyogZ2VuZXJpYyBmb2xkLCByZXR1cm4gZmlyc3QgdmFsaWQgcmVzdWx0ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWJpbl9xdWVyeV9nZW5lcmljX2ZvbGQgKGNvbnN0IEdWYWx1ZSAqIHZpdGVtLCBHVmFsdWUgKiByZXQsIFF1ZXJ5Rm9sZCAqIGZvbGQpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RPYmplY3QgKml0ZW0gPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZpdGVtKTsKLSAgaWYgKEdTVF9JU19QQUQgKGl0ZW0pKQotICAgIHJlcyA9IGdzdF9wYWRfcXVlcnkgKEdTVF9QQUQgKGl0ZW0pLCBmb2xkLT5xdWVyeSk7Ci0gIGVsc2UKLSAgICByZXMgPSBnc3RfZWxlbWVudF9xdWVyeSAoR1NUX0VMRU1FTlQgKGl0ZW0pLCBmb2xkLT5xdWVyeSk7Ci0gIGlmIChyZXMpIHsKLSAgICBnX3ZhbHVlX3NldF9ib29sZWFuIChyZXQsIFRSVUUpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGl0ZW0sICJhbnN3ZXJlZCBxdWVyeSAlcCIsIGZvbGQtPnF1ZXJ5KTsKLSAgfQotCi0gIC8qIGFuZCBzdG9wIGFzIHNvb24gYXMgd2UgaGF2ZSBhIHZhbGlkIHJlc3VsdCAqLwotICByZXR1cm4gIXJlczsKLX0KLQotLyogUGVyZm9ybSBhIHF1ZXJ5IGl0ZXJhdGlvbiBmb3IgdGhlIGdpdmVuIGJpbi4gVGhlIHF1ZXJ5IGlzIHN0b3JlZCBpbgotICogUXVlcnlGb2xkIGFuZCBpdGVyIHNob3VsZCBiZSBlaXRoZXIgYSBHc3RQYWQgaXRlcmF0b3Igb3IgYQotICogR3N0RWxlbWVudCBpdGVyYXRvci4gKi8KLXN0YXRpYyBnYm9vbGVhbgotYmluX2l0ZXJhdGVfZm9sZCAoR3N0QmluICogYmluLCBHc3RJdGVyYXRvciAqIGl0ZXIsIFF1ZXJ5SW5pdEZ1bmN0aW9uIGZvbGRfaW5pdCwKLSAgICBRdWVyeURvbmVGdW5jdGlvbiBmb2xkX2RvbmUsIEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uIGZvbGRfZnVuYywKLSAgICBRdWVyeUZvbGQgKiBmb2xkX2RhdGEsIGdib29sZWFuIGRlZmF1bHRfcmV0dXJuKQotewotICBnYm9vbGVhbiByZXMgPSBkZWZhdWx0X3JldHVybjsKLSAgR1ZhbHVlIHJldCA9IHsgMCB9OwotICAvKiBzZXQgdGhlIHJlc3VsdCBvZiB0aGUgcXVlcnkgdG8gRkFMU0UgaW5pdGlhbGx5ICovCi0gIGdfdmFsdWVfaW5pdCAoJnJldCwgR19UWVBFX0JPT0xFQU4pOwotICBnX3ZhbHVlX3NldF9ib29sZWFuICgmcmV0LCByZXMpOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgR3N0SXRlcmF0b3JSZXN1bHQgaXJlczsKLQotICAgIGlyZXMgPSBnc3RfaXRlcmF0b3JfZm9sZCAoaXRlciwgZm9sZF9mdW5jLCAmcmV0LCBmb2xkX2RhdGEpOwotCi0gICAgc3dpdGNoIChpcmVzKSB7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOwotICAgICAgICBpZiAoZm9sZF9pbml0KQotICAgICAgICAgIGZvbGRfaW5pdCAoYmluLCBmb2xkX2RhdGEpOwotICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICgmcmV0LCByZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgcmVzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAoJnJldCk7Ci0gICAgICAgIGlmIChmb2xkX2RvbmUgIT0gTlVMTCAmJiByZXMpCi0gICAgICAgICAgZm9sZF9kb25lIChiaW4sIGZvbGRfZGF0YSk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQotICB9Ci1kb25lOgotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iaW5fcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RCaW4gKmJpbiA9IEdTVF9CSU5fQ0FTVCAoZWxlbWVudCk7Ci0gIEdzdEl0ZXJhdG9yICppdGVyOwotICBnYm9vbGVhbiBkZWZhdWx0X3JldHVybiA9IEZBTFNFOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gc3JjX3BhZHNfcXVlcnlfcmVzdWx0ID0gRkFMU0U7Ci0gIEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uIGZvbGRfZnVuYzsKLSAgUXVlcnlJbml0RnVuY3Rpb24gZm9sZF9pbml0ID0gTlVMTDsKLSAgUXVlcnlEb25lRnVuY3Rpb24gZm9sZF9kb25lID0gTlVMTDsKLSAgUXVlcnlGb2xkIGZvbGRfZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjoKLSAgICB7Ci0gICAgICAvKiBGSVhNRTogaW1wbGVtZW50IGR1cmF0aW9uIGNhY2hpbmcgaW4gR3N0QmluIGFnYWluICovCi0jaWYgMAotICAgICAgR0xpc3QgKmNhY2hlZDsKLSAgICAgIEdzdEZvcm1hdCBxZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCAmcWZvcm1hdCwgTlVMTCk7Ci0KLSAgICAgIC8qIGZpbmQgY2FjaGVkIGR1cmF0aW9uIHF1ZXJ5ICovCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gICAgICBmb3IgKGNhY2hlZCA9IGJpbi0+bWVzc2FnZXM7IGNhY2hlZDsgY2FjaGVkID0gZ19saXN0X25leHQgKGNhY2hlZCkpIHsKLSAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IChHc3RNZXNzYWdlICopIGNhY2hlZC0+ZGF0YTsKLQotICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRFVSQVRJT05fQ0hBTkdFRCAmJgotICAgICAgICAgICAgR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBHU1RfT0JKRUNUX0NBU1QgKGJpbikpIHsKLSAgICAgICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgICAgIGdpbnQ2NCBkdXJhdGlvbjsKLQotICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2R1cmF0aW9uIChtZXNzYWdlLCAmZm9ybWF0LCAmZHVyYXRpb24pOwotCi0gICAgICAgICAgLyogaWYgY2FjaGVkIHNhbWUgZm9ybWF0LCBjb3B5IGR1cmF0aW9uIGluIHF1ZXJ5IHJlc3VsdCAqLwotICAgICAgICAgIGlmIChmb3JtYXQgPT0gcWZvcm1hdCkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicmV0dXJuIGNhY2hlZCBkdXJhdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgZHVyYXRpb24pOwotICAgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBxZm9ybWF0LCBkdXJhdGlvbik7Ci0gICAgICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0jZWxzZQotICAgICAgR1NUX0ZJWE1FICgiaW1wbGVtZW50IGR1cmF0aW9uIGNhY2hpbmcgaW4gR3N0QmluIGFnYWluIik7Ci0jZW5kaWYKLSAgICAgIC8qIG5vIGNhY2hlZCB2YWx1ZSBmb3VuZCwgaXRlcmF0ZSBhbmQgY29sbGVjdCBkdXJhdGlvbnMgKi8KLSAgICAgIGZvbGRfZnVuYyA9IChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgYmluX3F1ZXJ5X2R1cmF0aW9uX2ZvbGQ7Ci0gICAgICBmb2xkX2luaXQgPSBiaW5fcXVlcnlfbWluX21heF9pbml0OwotICAgICAgZm9sZF9kb25lID0gYmluX3F1ZXJ5X2R1cmF0aW9uX2RvbmU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfUE9TSVRJT046Ci0gICAgewotICAgICAgZm9sZF9mdW5jID0gKEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uKSBiaW5fcXVlcnlfcG9zaXRpb25fZm9sZDsKLSAgICAgIGZvbGRfaW5pdCA9IGJpbl9xdWVyeV9taW5fbWF4X2luaXQ7Ci0gICAgICBmb2xkX2RvbmUgPSBiaW5fcXVlcnlfcG9zaXRpb25fZG9uZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIGZvbGRfZnVuYyA9IChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgYmluX3F1ZXJ5X2xhdGVuY3lfZm9sZDsKLSAgICAgIGZvbGRfaW5pdCA9IGJpbl9xdWVyeV9taW5fbWF4X2luaXQ7Ci0gICAgICBmb2xkX2RvbmUgPSBiaW5fcXVlcnlfbGF0ZW5jeV9kb25lOwotICAgICAgZGVmYXVsdF9yZXR1cm4gPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBmb2xkX2Z1bmMgPSAoR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb24pIGJpbl9xdWVyeV9nZW5lcmljX2ZvbGQ7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGZvbGRfZGF0YS5xdWVyeSA9IHF1ZXJ5OwotCi0gIGl0ZXIgPSBnc3RfYmluX2l0ZXJhdGVfc2lua3MgKGJpbik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgIlNlbmRpbmcgcXVlcnkgJXAgKHR5cGUgJXMpIHRvIHNpbmsgY2hpbGRyZW4iLAotICAgICAgcXVlcnksIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0KLSAgaWYgKGZvbGRfaW5pdCkKLSAgICBmb2xkX2luaXQgKGJpbiwgJmZvbGRfZGF0YSk7Ci0KLSAgcmVzID0KLSAgICAgIGJpbl9pdGVyYXRlX2ZvbGQgKGJpbiwgaXRlciwgZm9sZF9pbml0LCBmb2xkX2RvbmUsIGZvbGRfZnVuYywgJmZvbGRfZGF0YSwKLSAgICAgIGRlZmF1bHRfcmV0dXJuKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOwotCi0gIGlmICghcmVzKSB7Ci0gICAgLyogUXVlcnkgdGhlIHNvdXJjZSBwYWRzIG9mIHRoZSBlbGVtZW50ICovCi0gICAgaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKGVsZW1lbnQpOwotICAgIHNyY19wYWRzX3F1ZXJ5X3Jlc3VsdCA9Ci0gICAgICAgIGJpbl9pdGVyYXRlX2ZvbGQgKGJpbiwgaXRlciwgZm9sZF9pbml0LCBmb2xkX2RvbmUsIGZvbGRfZnVuYywKLSAgICAgICAgJmZvbGRfZGF0YSwgZGVmYXVsdF9yZXR1cm4pOwotICAgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLQotICAgIGlmIChzcmNfcGFkc19xdWVyeV9yZXN1bHQpCi0gICAgICByZXMgPSBUUlVFOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicXVlcnkgJXAgcmVzdWx0ICVkIiwgcXVlcnksIHJlcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9jb250ZXh0IChjb25zdCBHVmFsdWUgKiBpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKGl0ZW0pOwotCi0gIGdzdF9lbGVtZW50X3NldF9jb250ZXh0IChlbGVtZW50LCB1c2VyX2RhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jpbl9zZXRfY29udGV4dCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENvbnRleHQgKiBjb250ZXh0KQotewotICBHc3RCaW4gKmJpbjsKLSAgR3N0SXRlcmF0b3IgKmNoaWxkcmVuOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGVsZW1lbnQpKTsKLQotICBiaW4gPSBHU1RfQklOIChlbGVtZW50KTsKLQotICBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2V0X2NvbnRleHQgKGVsZW1lbnQsIGNvbnRleHQpOwotCi0gIGNoaWxkcmVuID0gZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzIChiaW4pOwotICB3aGlsZSAoZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggKGNoaWxkcmVuLCBzZXRfY29udGV4dCwKLSAgICAgICAgICBjb250ZXh0KSA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGNoaWxkcmVuKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGNoaWxkcmVuKTsKLX0KLQotc3RhdGljIGdpbnQKLWNvbXBhcmVfbmFtZSAoY29uc3QgR1ZhbHVlICogdmVsZW1lbnQsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgZ2ludCBlcTsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmVsZW1lbnQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIGVxID0gc3RyY21wIChHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSwgbmFtZSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICByZXR1cm4gZXE7Ci19Ci0KLS8qKgotICogZ3N0X2Jpbl9nZXRfYnlfbmFtZToKLSAqIEBiaW46IGEgI0dzdEJpbgotICogQG5hbWU6IHRoZSBlbGVtZW50IG5hbWUgdG8gc2VhcmNoIGZvcgotICoKLSAqIEdldHMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBmcm9tIGEgYmluLiBUaGlzCi0gKiBmdW5jdGlvbiByZWN1cnNlcyBpbnRvIGNoaWxkIGJpbnMuCi0gKgotICogUmV0dXJucyAlTlVMTCBpZiBubyBlbGVtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgZm91bmQgaW4gdGhlIGJpbi4KLSAqCi0gKiBNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgcmVmZXJlbmNlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgI0dzdEVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4KLSAqIG5hbWUsIG9yICVOVUxMCi0gKi8KLUdzdEVsZW1lbnQgKgotZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR3N0QmluICogYmluLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdzdEl0ZXJhdG9yICpjaGlsZHJlbjsKLSAgR1ZhbHVlIHJlc3VsdCA9IHsgMCwgfTsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgZ2Jvb2xlYW4gZm91bmQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOwotCi0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQVJFTlRBR0UsICJbJXNdOiBsb29raW5nIHVwIGNoaWxkIGVsZW1lbnQgJXMiLAotICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoYmluKSwgbmFtZSk7Ci0KLSAgY2hpbGRyZW4gPSBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSAoYmluKTsKLSAgZm91bmQgPSBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKGNoaWxkcmVuLAotICAgICAgKEdDb21wYXJlRnVuYykgY29tcGFyZV9uYW1lLCAmcmVzdWx0LCAoZ3BvaW50ZXIpIG5hbWUpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoY2hpbGRyZW4pOwotCi0gIGlmIChmb3VuZCkgewotICAgIGVsZW1lbnQgPSBnX3ZhbHVlX2R1cF9vYmplY3QgKCZyZXN1bHQpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZyZXN1bHQpOwotICB9IGVsc2UgewotICAgIGVsZW1lbnQgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLS8qKgotICogZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwOgotICogQGJpbjogYSAjR3N0QmluCi0gKiBAbmFtZTogdGhlIGVsZW1lbnQgbmFtZSB0byBzZWFyY2ggZm9yCi0gKgotICogR2V0cyB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhpcyBiaW4uIElmIHRoZQotICogZWxlbWVudCBpcyBub3QgZm91bmQsIGEgcmVjdXJzaW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgcGFyZW50IGJpbi4KLSAqCi0gKiBSZXR1cm5zICVOVUxMIGlmOgotICogLSBubyBlbGVtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgZm91bmQgaW4gdGhlIGJpbgotICoKLSAqIE1UIHNhZmUuICBDYWxsZXIgb3ducyByZXR1cm5lZCByZWZlcmVuY2UuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSAjR3N0RWxlbWVudCB3aXRoIHRoZSBnaXZlbgotICogbmFtZSwgb3IgJU5VTEwKLSAqLwotR3N0RWxlbWVudCAqCi1nc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXAgKEdzdEJpbiAqIGJpbiwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RFbGVtZW50ICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKLQotICByZXN1bHQgPSBnc3RfYmluX2dldF9ieV9uYW1lIChiaW4sIG5hbWUpOwotCi0gIGlmICghcmVzdWx0KSB7Ci0gICAgR3N0T2JqZWN0ICpwYXJlbnQ7Ci0KLSAgICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSk7Ci0gICAgaWYgKHBhcmVudCkgewotICAgICAgaWYgKEdTVF9JU19CSU4gKHBhcmVudCkpIHsKLSAgICAgICAgcmVzdWx0ID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZV9yZWN1cnNlX3VwIChHU1RfQklOX0NBU1QgKHBhcmVudCksIG5hbWUpOwotICAgICAgfQotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2ludAotY29tcGFyZV9pbnRlcmZhY2UgKGNvbnN0IEdWYWx1ZSAqIHZlbGVtZW50LCBHVmFsdWUgKiBpbnRlcmZhY2UpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZlbGVtZW50KTsKLSAgR1R5cGUgaW50ZXJmYWNlX3R5cGUgPSAoR1R5cGUpIGdfdmFsdWVfZ2V0X3BvaW50ZXIgKGludGVyZmFjZSk7Ci0gIGdpbnQgcmV0OwotCi0gIGlmIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoZWxlbWVudCwgaW50ZXJmYWNlX3R5cGUpKSB7Ci0gICAgcmV0ID0gMDsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSAxOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2Jpbl9nZXRfYnlfaW50ZXJmYWNlOgotICogQGJpbjogYSAjR3N0QmluCi0gKiBAaWZhY2U6IHRoZSAjR1R5cGUgb2YgYW4gaW50ZXJmYWNlCi0gKgotICogTG9va3MgZm9yIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSBiaW4gdGhhdCBpbXBsZW1lbnRzIHRoZSBnaXZlbgotICogaW50ZXJmYWNlLiBJZiBzdWNoIGFuIGVsZW1lbnQgaXMgZm91bmQsIGl0IHJldHVybnMgdGhlIGVsZW1lbnQuCi0gKiBZb3UgY2FuIGNhc3QgdGhpcyBlbGVtZW50IHRvIHRoZSBnaXZlbiBpbnRlcmZhY2UgYWZ0ZXJ3YXJkcy4gIElmIHlvdSB3YW50Ci0gKiBhbGwgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSwgdXNlCi0gKiBnc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSgpLiBUaGlzIGZ1bmN0aW9uIHJlY3Vyc2VzIGludG8gY2hpbGQgYmlucy4KLSAqCi0gKiBNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgcmVmZXJlbmNlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjR3N0RWxlbWVudCBpbnNpZGUgdGhlIGJpbiBpbXBsZW1lbnRpbmcgdGhlIGludGVyZmFjZQotICovCi1Hc3RFbGVtZW50ICoKLWdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZSAoR3N0QmluICogYmluLCBHVHlwZSBpZmFjZSkKLXsKLSAgR3N0SXRlcmF0b3IgKmNoaWxkcmVuOwotICBHVmFsdWUgcmVzdWx0ID0geyAwLCB9OwotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBnYm9vbGVhbiBmb3VuZDsKLSAgR1ZhbHVlIHZpZmFjZSA9IHsgMCwgfTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1RZUEVfSVNfSU5URVJGQUNFIChpZmFjZSksIE5VTEwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZpZmFjZSwgR19UWVBFX1BPSU5URVIpOwotICBnX3ZhbHVlX3NldF9wb2ludGVyICgmdmlmYWNlLCAoZ3BvaW50ZXIpIGlmYWNlKTsKLQotICBjaGlsZHJlbiA9IGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNlIChiaW4pOwotICBmb3VuZCA9IGdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbSAoY2hpbGRyZW4sIChHQ29tcGFyZUZ1bmMpIGNvbXBhcmVfaW50ZXJmYWNlLAotICAgICAgJnJlc3VsdCwgJnZpZmFjZSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChjaGlsZHJlbik7Ci0KLSAgaWYgKGZvdW5kKSB7Ci0gICAgZWxlbWVudCA9IGdfdmFsdWVfZHVwX29iamVjdCAoJnJlc3VsdCk7Ci0gICAgZ192YWx1ZV91bnNldCAoJnJlc3VsdCk7Ci0gIH0gZWxzZSB7Ci0gICAgZWxlbWVudCA9IE5VTEw7Ci0gIH0KLSAgZ192YWx1ZV91bnNldCAoJnZpZmFjZSk7Ci0KLSAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLS8qKgotICogZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2U6Ci0gKiBAYmluOiBhICNHc3RCaW4KLSAqIEBpZmFjZTogdGhlICNHVHlwZSBvZiBhbiBpbnRlcmZhY2UKLSAqCi0gKiBMb29rcyBmb3IgYWxsIGVsZW1lbnRzIGluc2lkZSB0aGUgYmluIHRoYXQgaW1wbGVtZW50cyB0aGUgZ2l2ZW4KLSAqIGludGVyZmFjZS4gWW91IGNhbiBzYWZlbHkgY2FzdCBhbGwgcmV0dXJuZWQgZWxlbWVudHMgdG8gdGhlIGdpdmVuIGludGVyZmFjZS4KLSAqIFRoZSBmdW5jdGlvbiByZWN1cnNlcyBpbnNpZGUgY2hpbGQgYmlucy4gVGhlIGl0ZXJhdG9yIHdpbGwgeWllbGQgYSBzZXJpZXMKLSAqIG9mICNHc3RFbGVtZW50IHRoYXQgc2hvdWxkIGJlIHVucmVmZmVkIGFmdGVyIHVzZS4KLSAqCi0gKiBNVCBzYWZlLiAgQ2FsbGVyIG93bnMgcmV0dXJuZWQgdmFsdWUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdEl0ZXJhdG9yIG9mICNHc3RFbGVtZW50Ci0gKiAgICAgZm9yIGFsbCBlbGVtZW50cyBpbiB0aGUgYmluIGltcGxlbWVudGluZyB0aGUgZ2l2ZW4gaW50ZXJmYWNlLAotICogICAgIG9yICVOVUxMCi0gKi8KLUdzdEl0ZXJhdG9yICoKLWdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlIChHc3RCaW4gKiBiaW4sIEdUeXBlIGlmYWNlKQotewotICBHc3RJdGVyYXRvciAqY2hpbGRyZW47Ci0gIEdzdEl0ZXJhdG9yICpyZXN1bHQ7Ci0gIEdWYWx1ZSB2aWZhY2UgPSB7IDAsIH07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19UWVBFX0lTX0lOVEVSRkFDRSAoaWZhY2UpLCBOVUxMKTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2aWZhY2UsIEdfVFlQRV9QT0lOVEVSKTsKLSAgZ192YWx1ZV9zZXRfcG9pbnRlciAoJnZpZmFjZSwgKGdwb2ludGVyKSBpZmFjZSk7Ci0KLSAgY2hpbGRyZW4gPSBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZSAoYmluKTsKLSAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZpbHRlciAoY2hpbGRyZW4sIChHQ29tcGFyZUZ1bmMpIGNvbXBhcmVfaW50ZXJmYWNlLAotICAgICAgJnZpZmFjZSk7Ci0KLSAgZ192YWx1ZV91bnNldCAoJnZpZmFjZSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RiaW4uaCBiL2dzdC9nc3RiaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY5OTg4Ni4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0YmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdGJpbi5oOiBIZWFkZXIgZm9yIEdzdEJpbiBjb250YWluZXIgb2JqZWN0Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0JJTl9IX18KLSNkZWZpbmUgX19HU1RfQklOX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGVsZW1lbnQuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0aXRlcmF0b3IuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0YnVzLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9CSU4gICAgICAgICAgICAgKGdzdF9iaW5fZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19CSU4ob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9CSU4pKQotI2RlZmluZSBHU1RfSVNfQklOX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9CSU4pKQotI2RlZmluZSBHU1RfQklOX0dFVF9DTEFTUyhvYmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9CSU4sIEdzdEJpbkNsYXNzKSkKLSNkZWZpbmUgR1NUX0JJTihvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0JJTiwgR3N0QmluKSkKLSNkZWZpbmUgR1NUX0JJTl9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfQklOLCBHc3RCaW5DbGFzcykpCi0jZGVmaW5lIEdTVF9CSU5fQ0FTVChvYmopICAgICAgICAoKEdzdEJpbiopKG9iaikpCi0KLS8qKgotICogR3N0QmluRmxhZ3M6Ci0gKiBAR1NUX0JJTl9GTEFHX05PX1JFU1lOQzogZG9uJ3QgcmVzeW5jIGEgc3RhdGUgY2hhbmdlIHdoZW4gZWxlbWVudHMgYXJlCi0gKiAgICAgICAgICAgICBhZGRlZCBvciBsaW5rZWQgaW4gdGhlIGJpbiAoU2luY2UgMS4wLjUpCi0gKiBAR1NUX0JJTl9GTEFHX1NUUkVBTVNfQVdBUkU6IEluZGljYXRlcyB3aGV0aGVyIHRoZSBiaW4gY2FuIGhhbmRsZSBlbGVtZW50cwotICogICAgICAgICAgICAgdGhhdCBhZGQvcmVtb3ZlIHNvdXJjZSBwYWRzIGF0IGFueSBwb2ludCBpbiB0aW1lIHdpdGhvdXQKLSAqICAgICAgICAgICAgIGZpcnN0IHBvc3RpbmcgYSBuby1tb3JlLXBhZHMgc2lnbmFsIChTaW5jZSAxLjEwKQotICogQEdTVF9CSU5fRkxBR19MQVNUOiB0aGUgbGFzdCBlbnVtIGluIHRoZSBzZXJpZXMgb2YgZmxhZ3MgZm9yIGJpbnMuCi0gKiBEZXJpdmVkIGNsYXNzZXMgY2FuIHVzZSB0aGlzIGFzIGZpcnN0IHZhbHVlIGluIGEgbGlzdCBvZiBmbGFncy4KLSAqCi0gKiBHc3RCaW5GbGFncyBhcmUgYSBzZXQgb2YgZmxhZ3Mgc3BlY2lmaWMgdG8gYmlucy4gTW9zdCBhcmUgc2V0L3VzZWQKLSAqIGludGVybmFsbHkuIFRoZXkgY2FuIGJlIGNoZWNrZWQgdXNpbmcgdGhlIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKCkgbWFjcm8sCi0gKiBhbmQgKHVuKXNldCB1c2luZyBHU1RfT0JKRUNUX0ZMQUdfU0VUICgpIGFuZCBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKCkuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9CSU5fRkxBR19OT19SRVNZTkMJPSAoR1NUX0VMRU1FTlRfRkxBR19MQVNUIDw8IDApLAotICBHU1RfQklOX0ZMQUdfU1RSRUFNU19BV0FSRQk9IChHU1RfRUxFTUVOVF9GTEFHX0xBU1QgPDwgMSksCi0gIC8qIHBhZGRpbmcgKi8KLSAgR1NUX0JJTl9GTEFHX0xBU1QJCT0gKEdTVF9FTEVNRU5UX0ZMQUdfTEFTVCA8PCA1KQotfSBHc3RCaW5GbGFnczsKLQotLyoqCi0gKiBHU1RfQklOX0lTX05PX1JFU1lOQzoKLSAqIEBiaW46IEEgI0dzdEJpbgotICoKLSAqIENoZWNrIGlmIEBiaW4gd2lsbCByZXN5bmMgaXRzIHN0YXRlIGNoYW5nZSB3aGVuIGVsZW1lbnRzIGFyZSBhZGRlZCBhbmQKLSAqIHJlbW92ZWQuCi0gKgotICogU2luY2U6IDEuMC41Ci0gKi8KLSNkZWZpbmUgR1NUX0JJTl9JU19OT19SRVNZTkMoYmluKSAgICAgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQoYmluLEdTVF9CSU5fRkxBR19OT19SRVNZTkMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QmluIEdzdEJpbjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RCaW5DbGFzcyBHc3RCaW5DbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RCaW5Qcml2YXRlIEdzdEJpblByaXZhdGU7Ci0KLS8qKgotICogR1NUX0JJTl9OVU1DSElMRFJFTjoKLSAqIEBiaW46IGEgI0dzdEJpbgotICoKLSAqIEdldHMgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiBhIGJpbi4KLSAqLwotI2RlZmluZSBHU1RfQklOX05VTUNISUxEUkVOKGJpbikJKEdTVF9CSU5fQ0FTVChiaW4pLT5udW1jaGlsZHJlbikKLS8qKgotICogR1NUX0JJTl9DSElMRFJFTjoKLSAqIEBiaW46IGEgI0dzdEJpbgotICoKLSAqIEdldHMgdGhlIGxpc3Qgd2l0aCBjaGlsZHJlbiBpbiBhIGJpbi4KLSAqLwotI2RlZmluZSBHU1RfQklOX0NISUxEUkVOKGJpbikJCShHU1RfQklOX0NBU1QoYmluKS0+Y2hpbGRyZW4pCi0vKioKLSAqIEdTVF9CSU5fQ0hJTERSRU5fQ09PS0lFOgotICogQGJpbjogYSAjR3N0QmluCi0gKgotICogR2V0cyB0aGUgY2hpbGRyZW4gY29va2llIHRoYXQgd2F0Y2hlcyB0aGUgY2hpbGRyZW4gbGlzdC4KLSAqLwotI2RlZmluZSBHU1RfQklOX0NISUxEUkVOX0NPT0tJRShiaW4pCShHU1RfQklOX0NBU1QoYmluKS0+Y2hpbGRyZW5fY29va2llKQotCi0vKioKLSAqIEdzdEJpbjoKLSAqIEBudW1jaGlsZHJlbjogdGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIGJpbgotICogQGNoaWxkcmVuOiAoZWxlbWVudC10eXBlIEdzdC5FbGVtZW50KTogdGhlIGxpc3Qgb2YgY2hpbGRyZW4gaW4gdGhpcyBiaW4KLSAqIEBjaGlsZHJlbl9jb29raWU6IHVwZGF0ZWQgd2hlbmV2ZXIgQGNoaWxkcmVuIGNoYW5nZXMKLSAqIEBjaGlsZF9idXM6IGludGVybmFsIGJ1cyBmb3IgaGFuZGxpbmcgY2hpbGQgbWVzc2FnZXMKLSAqIEBtZXNzYWdlczogKGVsZW1lbnQtdHlwZSBHc3QuTWVzc2FnZSk6IHF1ZXVlZCBhbmQgY2FjaGVkIG1lc3NhZ2VzCi0gKiBAcG9sbGluZzogdGhlIGJpbiBpcyBjdXJyZW50bHkgY2FsY3VsYXRpbmcgaXRzIHN0YXRlCi0gKiBAc3RhdGVfZGlydHk6IHRoZSBiaW4gbmVlZHMgdG8gcmVjYWxjdWxhdGUgaXRzIHN0YXRlIChkZXByZWNhdGVkKQotICogQGNsb2NrX2RpcnR5OiB0aGUgYmluIG5lZWRzIHRvIHNlbGVjdCBhIG5ldyBjbG9jawotICogQHByb3ZpZGVkX2Nsb2NrOiB0aGUgbGFzdCBjbG9jayBzZWxlY3RlZAotICogQGNsb2NrX3Byb3ZpZGVyOiB0aGUgZWxlbWVudCB0aGF0IHByb3ZpZGVkIEBwcm92aWRlZF9jbG9jawotICoKLSAqIFRoZSBHc3RCaW4gYmFzZSBjbGFzcy4gU3ViY2xhc3NlcyBjYW4gYWNjZXNzIHRoZXNlIGZpZWxkcyBwcm92aWRlZAotICogdGhlIExPQ0sgaXMgdGFrZW4uCi0gKi8KLXN0cnVjdCBfR3N0QmluIHsKLSAgR3N0RWxlbWVudAkgZWxlbWVudDsKLQotICAvKjwgcHVibGljID4qLyAvKiB3aXRoIExPQ0sgKi8KLSAgLyogb3VyIGNoaWxkcmVuLCBzdWJjbGFzcyBhcmUgc3VwcG9zZWQgdG8gdXBkYXRlIHRoZXNlCi0gICAqIGZpZWxkcyB0byByZWZsZWN0IHRoZWlyIHN0YXRlIHdpdGggX2l0ZXJhdGVfKigpICovCi0gIGdpbnQJCSBudW1jaGlsZHJlbjsKLSAgR0xpc3QJCSpjaGlsZHJlbjsKLSAgZ3VpbnQzMgkgY2hpbGRyZW5fY29va2llOwotCi0gIEdzdEJ1cyAgICAgICAgKmNoaWxkX2J1czsKLSAgR0xpc3QgICAgICAgICAqbWVzc2FnZXM7Ci0KLSAgZ2Jvb2xlYW4JIHBvbGxpbmc7Ci0gIGdib29sZWFuICAgICAgIHN0YXRlX2RpcnR5OwotCi0gIGdib29sZWFuICAgICAgIGNsb2NrX2RpcnR5OwotICBHc3RDbG9jawkqcHJvdmlkZWRfY2xvY2s7Ci0gIEdzdEVsZW1lbnQgICAgKmNsb2NrX3Byb3ZpZGVyOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RCaW5Qcml2YXRlICpwcml2OwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotLyoqCi0gKiBHc3RCaW5DbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IGJpbiBwYXJlbnQgY2xhc3MKLSAqIEBhZGRfZWxlbWVudDogbWV0aG9kIHRvIGFkZCBhbiBlbGVtZW50IHRvIGEgYmluCi0gKiBAcmVtb3ZlX2VsZW1lbnQ6IG1ldGhvZCB0byByZW1vdmUgYW4gZWxlbWVudCBmcm9tIGEgYmluCi0gKiBAaGFuZGxlX21lc3NhZ2U6IG1ldGhvZCB0byBoYW5kbGUgYSBtZXNzYWdlIGZyb20gdGhlIGNoaWxkcmVuCi0gKgotICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhlIEBhZGRfZWxlbWVudCBhbmQgQHJlbW92ZV9lbGVtZW50IHRvCi0gKiB1cGRhdGUgdGhlIGxpc3Qgb2YgY2hpbGRyZW4gaW4gdGhlIGJpbi4KLSAqCi0gKiBUaGUgQGhhbmRsZV9tZXNzYWdlIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiB0byBpbXBsZW1lbnQgY3VzdG9tCi0gKiBtZXNzYWdlIGhhbmRsaW5nLiAgQGhhbmRsZV9tZXNzYWdlIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbWVzc2FnZSwganVzdCBsaWtlCi0gKiAjZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlLgotICoKLSAqIFRoZSBAZWxlbWVudF9hZGRlZF9kZWVwIHZmdW5jIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBuZXcgZWxlbWVudCBoYXMgYmVlbgotICogYWRkZWQgdG8gYW55IGJpbiBpbnNpZGUgdGhpcyBiaW4sIHNvIGl0IHdpbGwgYWxzbyBiZSBjYWxsZWQgaWYgYSBuZXcgY2hpbGQKLSAqIHdhcyBhZGRlZCB0byBhIHN1Yi1iaW4gb2YgdGhpcyBiaW4uICNHc3RCaW4gaW1wbGVtZW50YXRpb25zIHRoYXQgb3ZlcnJpZGUKLSAqIHRoaXMgbWVzc2FnZSBzaG91bGQgY2hhaW4gdXAgdG8gdGhlIHBhcmVudCBjbGFzcyBpbXBsZW1lbnRhdGlvbiBzbyB0aGUKLSAqIGVsZW1lbnQtYWRkZWQtZGVlcCBzaWduYWwgaXMgZW1pdHRlZCBvbiBhbGwgcGFyZW50cy4KLSAqLwotc3RydWN0IF9Hc3RCaW5DbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdUaHJlYWRQb29sICAqcG9vbDsgLyogZGVwcmVjYXRlZCAqLwotCi0gIC8qIHNpZ25hbHMgKi8KLSAgdm9pZAkJKCplbGVtZW50X2FkZGVkKQkoR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmNoaWxkKTsKLSAgdm9pZAkJKCplbGVtZW50X3JlbW92ZWQpCShHc3RCaW4gKmJpbiwgR3N0RWxlbWVudCAqY2hpbGQpOwotCi0gIC8qPCBwdWJsaWMgPiovCi0gIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLwotICBnYm9vbGVhbgkoKmFkZF9lbGVtZW50KQkJKEdzdEJpbiAqYmluLCBHc3RFbGVtZW50ICplbGVtZW50KTsKLSAgZ2Jvb2xlYW4JKCpyZW1vdmVfZWxlbWVudCkJKEdzdEJpbiAqYmluLCBHc3RFbGVtZW50ICplbGVtZW50KTsKLQotICB2b2lkCQkoKmhhbmRsZV9tZXNzYWdlKQkoR3N0QmluICpiaW4sIEdzdE1lc3NhZ2UgKm1lc3NhZ2UpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICAvKiBzaWduYWwgKi8KLSAgZ2Jvb2xlYW4JKCpkb19sYXRlbmN5KSAgICAgICAgICAgKEdzdEJpbiAqYmluKTsKLQotICAvKjwgcHVibGljID4qLwotICAvKiBzaWduYWwgKi8KLSAgdm9pZCAgICAgICAgICAoKmRlZXBfZWxlbWVudF9hZGRlZCkgICAoR3N0QmluICpiaW4sIEdzdEJpbiAqc3ViX2JpbiwgR3N0RWxlbWVudCAqY2hpbGQpOwotICB2b2lkICAgICAgICAgICgqZGVlcF9lbGVtZW50X3JlbW92ZWQpIChHc3RCaW4gKmJpbiwgR3N0QmluICpzdWJfYmluLCBHc3RFbGVtZW50ICpjaGlsZCk7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkctMl07Ci19OwotCi1HVHlwZQkJZ3N0X2Jpbl9nZXRfdHlwZQkJKHZvaWQpOwotR3N0RWxlbWVudCoJZ3N0X2Jpbl9uZXcJCQkoY29uc3QgZ2NoYXIgKm5hbWUpOwotCi0vKiBhZGQgYW5kIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiaW4gKi8KLWdib29sZWFuCWdzdF9iaW5fYWRkCQkJKEdzdEJpbiAqYmluLCBHc3RFbGVtZW50ICplbGVtZW50KTsKLWdib29sZWFuCWdzdF9iaW5fcmVtb3ZlCQkJKEdzdEJpbiAqYmluLCBHc3RFbGVtZW50ICplbGVtZW50KTsKLQotLyogcmV0cmlldmUgYSBzaW5nbGUgY2hpbGQgKi8KLUdzdEVsZW1lbnQqCWdzdF9iaW5fZ2V0X2J5X25hbWUJCSAoR3N0QmluICpiaW4sIGNvbnN0IGdjaGFyICpuYW1lKTsKLUdzdEVsZW1lbnQqCWdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cAkgKEdzdEJpbiAqYmluLCBjb25zdCBnY2hhciAqbmFtZSk7Ci1Hc3RFbGVtZW50Kglnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UJIChHc3RCaW4gKmJpbiwgR1R5cGUgaWZhY2UpOwotCi0vKiByZXRyaWV2ZSBtdWx0aXBsZSBjaGlsZHJlbiAqLwotR3N0SXRlcmF0b3IqICAgIGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cwkgKEdzdEJpbiAqYmluKTsKLUdzdEl0ZXJhdG9yKiAgICBnc3RfYmluX2l0ZXJhdGVfc29ydGVkCQkgKEdzdEJpbiAqYmluKTsKLUdzdEl0ZXJhdG9yKiAgICBnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZQkJIChHc3RCaW4gKmJpbik7Ci0KLUdzdEl0ZXJhdG9yKglnc3RfYmluX2l0ZXJhdGVfc2lua3MJCSAoR3N0QmluICpiaW4pOwotR3N0SXRlcmF0b3IqCWdzdF9iaW5faXRlcmF0ZV9zb3VyY2VzCQkgKEdzdEJpbiAqYmluKTsKLUdzdEl0ZXJhdG9yKglnc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSAoR3N0QmluICpiaW4sIEdUeXBlIGlmYWNlKTsKLQotLyogbGF0ZW5jeSAqLwotZ2Jvb2xlYW4gICAgICAgIGdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSAgICAgIChHc3RCaW4gKiBiaW4pOwotCi0vKiBzZXQgYW5kIGdldCBzdXBwcmVzc2VkIGZsYWdzICovCi12b2lkICAgICAgICAgICAgZ3N0X2Jpbl9zZXRfc3VwcHJlc3NlZF9mbGFncyAoR3N0QmluICogYmluLCBHc3RFbGVtZW50RmxhZ3MgZmxhZ3MpOwotR3N0RWxlbWVudEZsYWdzIGdzdF9iaW5fZ2V0X3N1cHByZXNzZWRfZmxhZ3MgKEdzdEJpbiAqIGJpbik7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0QmluLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmIC8qIF9fR1NUX0JJTl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RidWZmZXIuYyBiL2dzdC9nc3RidWZmZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhODgyNS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0YnVmZmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDk2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3RidWZmZXIuYzogQnVmZmVyIG9wZXJhdGlvbnMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0YnVmZmVyCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IERhdGEtcGFzc2luZyBidWZmZXIgdHlwZQotICogQHNlZV9hbHNvOiAjR3N0UGFkLCAjR3N0TWluaU9iamVjdCwgI0dzdE1lbW9yeSwgI0dzdE1ldGEsICNHc3RCdWZmZXJQb29sCi0gKgotICogQnVmZmVycyBhcmUgdGhlIGJhc2ljIHVuaXQgb2YgZGF0YSB0cmFuc2ZlciBpbiBHU3RyZWFtZXIuIFRoZXkgY29udGFpbiB0aGUKLSAqIHRpbWluZyBhbmQgb2Zmc2V0IGFsb25nIHdpdGggb3RoZXIgYXJiaXRyYXJ5IG1ldGFkYXRhIHRoYXQgaXMgYXNzb2NpYXRlZAotICogd2l0aCB0aGUgI0dzdE1lbW9yeSBibG9ja3MgdGhhdCB0aGUgYnVmZmVyIGNvbnRhaW5zLgotICoKLSAqIEJ1ZmZlcnMgYXJlIHVzdWFsbHkgY3JlYXRlZCB3aXRoIGdzdF9idWZmZXJfbmV3KCkuIEFmdGVyIGEgYnVmZmVyIGhhcyBiZWVuCi0gKiBjcmVhdGVkIG9uZSB3aWxsIHR5cGljYWxseSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGl0IGFuZCBhZGQgaXQgdG8gdGhlIGJ1ZmZlci4KLSAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVzIGEgYnVmZmVyIHRoYXQgY2FuIGhvbGQgYSBnaXZlbiB2aWRlbyBmcmFtZQotICogd2l0aCBhIGdpdmVuIHdpZHRoLCBoZWlnaHQgYW5kIGJpdHMgcGVyIHBsYW5lLgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqICAgR3N0QnVmZmVyICpidWZmZXI7Ci0gKiAgIEdzdE1lbW9yeSAqbWVtb3J5OwotICogICBnaW50IHNpemUsIHdpZHRoLCBoZWlnaHQsIGJwcDsKLSAqICAgLi4uCi0gKiAgIHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIGJwcDsKLSAqICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gKiAgIG1lbW9yeSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIHNpemUsIE5VTEwpOwotICogICBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkgKGJ1ZmZlciwgLTEsIG1lbW9yeSk7Ci0gKiAgIC4uLgotICogXXwKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB1c2UgZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUoKSB0byBjcmVhdGUgYSBidWZmZXIgd2l0aAotICogcHJlYWxsb2NhdGVkIGRhdGEgb2YgYSBnaXZlbiBzaXplLgotICoKLSAqIEJ1ZmZlcnMgY2FuIGNvbnRhaW4gYSBsaXN0IG9mICNHc3RNZW1vcnkgb2JqZWN0cy4gWW91IGNhbiByZXRyaWV2ZSBob3cgbWFueQotICogbWVtb3J5IG9iamVjdHMgd2l0aCBnc3RfYnVmZmVyX25fbWVtb3J5KCkgYW5kIHlvdSBjYW4gZ2V0IGEgcG9pbnRlcgotICogdG8gbWVtb3J5IHdpdGggZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeSgpCi0gKgotICogQSBidWZmZXIgd2lsbCB1c3VhbGx5IGhhdmUgdGltZXN0YW1wcywgYW5kIGEgZHVyYXRpb24sIGJ1dCBuZWl0aGVyIG9mIHRoZXNlCi0gKiBhcmUgZ3VhcmFudGVlZCAodGhleSBtYXkgYmUgc2V0IHRvICNHU1RfQ0xPQ0tfVElNRV9OT05FKS4gV2hlbmV2ZXIgYQotICogbWVhbmluZ2Z1bCB2YWx1ZSBjYW4gYmUgZ2l2ZW4gZm9yIHRoZXNlLCB0aGV5IHNob3VsZCBiZSBzZXQuIFRoZSB0aW1lc3RhbXBzCi0gKiBhbmQgZHVyYXRpb24gYXJlIG1lYXN1cmVkIGluIG5hbm9zZWNvbmRzICh0aGV5IGFyZSAjR3N0Q2xvY2tUaW1lIHZhbHVlcykuCi0gKgotICogVGhlIGJ1ZmZlciBEVFMgcmVmZXJzIHRvIHRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgYnVmZmVyIHNob3VsZCBiZSBkZWNvZGVkIGFuZAotICogaXMgdXN1YWxseSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuIFRoZSBidWZmZXIgUFRTIHJlZmVycyB0byB0aGUgdGltZXN0YW1wIHdoZW4KLSAqIHRoZSBidWZmZXIgY29udGVudCBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFuZCBpcyBub3QgYWx3YXlzCi0gKiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuCi0gKgotICogQSBidWZmZXIgY2FuIGFsc28gaGF2ZSBvbmUgb3IgYm90aCBvZiBhIHN0YXJ0IGFuZCBhbiBlbmQgb2Zmc2V0LiBUaGVzZSBhcmUKLSAqIG1lZGlhLXR5cGUgc3BlY2lmaWMuIEZvciB2aWRlbyBidWZmZXJzLCB0aGUgc3RhcnQgb2Zmc2V0IHdpbGwgZ2VuZXJhbGx5IGJlCi0gKiB0aGUgZnJhbWUgbnVtYmVyLiBGb3IgYXVkaW8gYnVmZmVycywgaXQgd2lsbCBiZSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMKLSAqIHByb2R1Y2VkIHNvIGZhci4gRm9yIGNvbXByZXNzZWQgZGF0YSwgaXQgY291bGQgYmUgdGhlIGJ5dGUgb2Zmc2V0IGluIGEKLSAqIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBmaWxlLiBMaWtld2lzZSwgdGhlIGVuZCBvZmZzZXQgd2lsbCBiZSB0aGUgb2Zmc2V0IG9mCi0gKiB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFRoZXNlIGNhbiBvbmx5IGJlIG1lYW5pbmdmdWxseSBpbnRlcnByZXRlZCBpZiB5b3UKLSAqIGtub3cgdGhlIG1lZGlhIHR5cGUgb2YgdGhlIGJ1ZmZlciAodGhlIHByZWNlZGluZyBDQVBTIGV2ZW50KS4gRWl0aGVyIG9yIGJvdGgKLSAqIGNhbiBiZSBzZXQgdG8gI0dTVF9CVUZGRVJfT0ZGU0VUX05PTkUuCi0gKgotICogZ3N0X2J1ZmZlcl9yZWYoKSBpcyB1c2VkIHRvIGluY3JlYXNlIHRoZSByZWZjb3VudCBvZiBhIGJ1ZmZlci4gVGhpcyBtdXN0IGJlCi0gKiBkb25lIHdoZW4geW91IHdhbnQgdG8ga2VlcCBhIGhhbmRsZSB0byB0aGUgYnVmZmVyIGFmdGVyIHB1c2hpbmcgaXQgdG8gdGhlCi0gKiBuZXh0IGVsZW1lbnQuIFRoZSBidWZmZXIgcmVmY291bnQgZGV0ZXJtaW5lcyB0aGUgd3JpdGFiaWxpdHkgb2YgdGhlIGJ1ZmZlciwgYQotICogYnVmZmVyIGlzIG9ubHkgd3JpdGFibGUgd2hlbiB0aGUgcmVmY291bnQgaXMgZXhhY3RseSAxLCBpLmUuIHdoZW4gdGhlIGNhbGxlcgotICogaGFzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyLgotICoKLSAqIFRvIGVmZmljaWVudGx5IGNyZWF0ZSBhIHNtYWxsZXIgYnVmZmVyIG91dCBvZiBhbiBleGlzdGluZyBvbmUsIHlvdSBjYW4KLSAqIHVzZSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uKCkuIFRoaXMgbWV0aG9kIHRyaWVzIHRvIHNoYXJlIHRoZSBtZW1vcnkgb2JqZWN0cwotICogYmV0d2VlbiB0aGUgdHdvIGJ1ZmZlcnMuCi0gKgotICogSWYgYSBwbHVnLWluIHdhbnRzIHRvIG1vZGlmeSB0aGUgYnVmZmVyIGRhdGEgb3IgbWV0YWRhdGEgaW4tcGxhY2UsIGl0IHNob3VsZAotICogZmlyc3Qgb2J0YWluIGEgYnVmZmVyIHRoYXQgaXMgc2FmZSB0byBtb2RpZnkgYnkgdXNpbmcKLSAqIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpLiAgVGhpcyBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQgc28gdGhhdCBhIGNvcHkgd2lsbAotICogb25seSBiZSBtYWRlIHdoZW4gaXQgaXMgbmVjZXNzYXJ5LgotICoKLSAqIFNldmVyYWwgZmxhZ3Mgb2YgdGhlIGJ1ZmZlciBjYW4gYmUgc2V0IGFuZCB1bnNldCB3aXRoIHRoZQotICogR1NUX0JVRkZFUl9GTEFHX1NFVCgpIGFuZCBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQoKSBtYWNyb3MuIFVzZQotICogR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCgpIHRvIHRlc3QgaWYgYSBjZXJ0YWluICNHc3RCdWZmZXJGbGFncyBmbGFnIGlzIHNldC4KLSAqCi0gKiBCdWZmZXJzIGNhbiBiZSBlZmZpY2llbnRseSBtZXJnZWQgaW50byBhIGxhcmdlciBidWZmZXIgd2l0aAotICogZ3N0X2J1ZmZlcl9hcHBlbmQoKS4gQ29weWluZyBvZiBtZW1vcnkgd2lsbCBvbmx5IGJlIGRvbmUgd2hlbiBhYnNvbHV0ZWx5Ci0gKiBuZWVkZWQuCi0gKgotICogQXJiaXRyYXJ5IGV4dHJhIG1ldGFkYXRhIGNhbiBiZSBzZXQgb24gYSBidWZmZXIgd2l0aCBnc3RfYnVmZmVyX2FkZF9tZXRhKCkuCi0gKiBNZXRhZGF0YSBjYW4gYmUgcmV0cmlldmVkIHdpdGggZ3N0X2J1ZmZlcl9nZXRfbWV0YSgpLiBTZWUgYWxzbyAjR3N0TWV0YQotICoKLSAqIEFuIGVsZW1lbnQgc2hvdWxkIGVpdGhlciB1bnJlZiB0aGUgYnVmZmVyIG9yIHB1c2ggaXQgb3V0IG9uIGEgc3JjIHBhZAotICogdXNpbmcgZ3N0X3BhZF9wdXNoKCkgKHNlZSAjR3N0UGFkKS4KLSAqCi0gKiBCdWZmZXJzIGFyZSB1c3VhbGx5IGZyZWVkIGJ5IHVucmVmZmluZyB0aGVtIHdpdGggZ3N0X2J1ZmZlcl91bnJlZigpLiBXaGVuCi0gKiB0aGUgcmVmY291bnQgZHJvcHMgdG8gMCwgYW55IG1lbW9yeSBhbmQgbWV0YWRhdGEgcG9pbnRlZCB0byBieSB0aGUgYnVmZmVyIGlzCi0gKiB1bnJlZmZlZCBhcyB3ZWxsLiBCdWZmZXJzIGFsbG9jYXRlZCBmcm9tIGEgI0dzdEJ1ZmZlclBvb2wgd2lsbCBiZSByZXR1cm5lZCB0bwotICogdGhlIHBvb2wgd2hlbiB0aGUgcmVmY291bnQgZHJvcHMgdG8gMC4KLSAqCi0gKiBUaGUgI0dzdFBhcmVudEJ1ZmZlck1ldGEgaXMgYSBtZXRhIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB0byBhICNHc3RCdWZmZXIKLSAqIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBidWZmZXIgdGhhdCBpcyBvbmx5IHJlbGVhc2VkIHdoZW4gdGhlIGNoaWxkCi0gKiAjR3N0QnVmZmVyIGlzIHJlbGVhc2VkLgotICoKLSAqIFR5cGljYWxseSwgI0dzdFBhcmVudEJ1ZmZlck1ldGEgaXMgdXNlZCB3aGVuIHRoZSBjaGlsZCBidWZmZXIgaXMgZGlyZWN0bHkKLSAqIHVzaW5nIHRoZSAjR3N0TWVtb3J5IG9mIHRoZSBwYXJlbnQgYnVmZmVyLCBhbmQgd2FudHMgdG8gcHJldmVudCB0aGUgcGFyZW50Ci0gKiBidWZmZXIgZnJvbSBiZWluZyByZXR1cm5lZCB0byBhIGJ1ZmZlciBwb29sIHVudGlsIHRoZSAjR3N0TWVtb3J5IGlzIGF2YWlsYWJsZQotICogZm9yIHJlLXVzZS4gKFNpbmNlIDEuNikKLSAqCi0gKi8KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotCi0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RidWZmZXIuaCIKLSNpbmNsdWRlICJnc3RidWZmZXJwb29sLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHV0aWxzLmgiCi0jaW5jbHVkZSAiZ3N0dmVyc2lvbi5oIgotCi1HVHlwZSBfZ3N0X2J1ZmZlcl90eXBlID0gMDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1ldGFJdGVtIEdzdE1ldGFJdGVtOwotCi1zdHJ1Y3QgX0dzdE1ldGFJdGVtCi17Ci0gIEdzdE1ldGFJdGVtICpuZXh0OwotICBHc3RNZXRhIG1ldGE7Ci19OwotI2RlZmluZSBJVEVNX1NJWkUoaW5mbykgKChpbmZvKS0+c2l6ZSArIHNpemVvZiAoR3N0TWV0YUl0ZW0pKQotCi0jZGVmaW5lIEdTVF9CVUZGRVJfTUVNX01BWCAgICAgICAgIDE2Ci0KLSNkZWZpbmUgR1NUX0JVRkZFUl9TTElDRV9TSVpFKGIpICAgKCgoR3N0QnVmZmVySW1wbCAqKShiKSktPnNsaWNlX3NpemUpCi0jZGVmaW5lIEdTVF9CVUZGRVJfTUVNX0xFTihiKSAgICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5sZW4pCi0jZGVmaW5lIEdTVF9CVUZGRVJfTUVNX0FSUkFZKGIpICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5tZW0pCi0jZGVmaW5lIEdTVF9CVUZGRVJfTUVNX1BUUihiLGkpICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5tZW1baV0pCi0jZGVmaW5lIEdTVF9CVUZGRVJfQlVGTUVNKGIpICAgICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5idWZtZW0pCi0jZGVmaW5lIEdTVF9CVUZGRVJfTUVUQShiKSAgICAgICAgICgoKEdzdEJ1ZmZlckltcGwgKikoYikpLT5pdGVtKQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RCdWZmZXIgYnVmZmVyOwotCi0gIGdzaXplIHNsaWNlX3NpemU7Ci0KLSAgLyogdGhlIG1lbW9yeSBibG9ja3MgKi8KLSAgZ3VpbnQgbGVuOwotICBHc3RNZW1vcnkgKm1lbVtHU1RfQlVGRkVSX01FTV9NQVhdOwotCi0gIC8qIG1lbW9yeSBvZiB0aGUgYnVmZmVyIHdoZW4gYWxsb2NhdGVkIGZyb20gMSBjaHVuayAqLwotICBHc3RNZW1vcnkgKmJ1Zm1lbTsKLQotICAvKiBGSVhNRSwgbWFrZSBtZXRhZGF0YSBhbGxvY2F0aW9uIG1vcmUgZWZmaWNpZW50IGJ5IHVzaW5nIHBhcnQgb2YgdGhlCi0gICAqIEdzdEJ1ZmZlckltcGwgKi8KLSAgR3N0TWV0YUl0ZW0gKml0ZW07Ci19IEdzdEJ1ZmZlckltcGw7Ci0KLQotc3RhdGljIGdib29sZWFuCi1faXNfc3BhbiAoR3N0TWVtb3J5ICoqIG1lbSwgZ3NpemUgbGVuLCBnc2l6ZSAqIHBvZmZzZXQsIEdzdE1lbW9yeSAqKiBwYXJlbnQpCi17Ci0gIEdzdE1lbW9yeSAqbWN1ciwgKm1wcnY7Ci0gIGdib29sZWFuIGhhdmVfb2Zmc2V0ID0gRkFMU0U7Ci0gIGdzaXplIGk7Ci0KLSAgbWN1ciA9IG1wcnYgPSBOVUxMOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGlmIChtY3VyKQotICAgICAgbXBydiA9IG1jdXI7Ci0gICAgbWN1ciA9IG1lbVtpXTsKLQotICAgIGlmIChtcHJ2ICYmIG1jdXIpIHsKLSAgICAgIGdzaXplIHBvZmZzOwotCi0gICAgICAvKiBjaGVjayBpZiBtZW1vcnkgaXMgY29udGlndW91cyAqLwotICAgICAgaWYgKCFnc3RfbWVtb3J5X2lzX3NwYW4gKG1wcnYsIG1jdXIsICZwb2ZmcykpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgaWYgKCFoYXZlX29mZnNldCkgewotICAgICAgICBpZiAocG9mZnNldCkKLSAgICAgICAgICAqcG9mZnNldCA9IHBvZmZzOwotICAgICAgICBpZiAocGFyZW50KQotICAgICAgICAgICpwYXJlbnQgPSBtcHJ2LT5wYXJlbnQ7Ci0KLSAgICAgICAgaGF2ZV9vZmZzZXQgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gaGF2ZV9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBHc3RNZW1vcnkgKgotX2dldF9tZXJnZWRfbWVtb3J5IChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgZ3VpbnQgbGVuZ3RoKQotewotICBHc3RNZW1vcnkgKiptZW0sICpyZXN1bHQgPSBOVUxMOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0JVRkZFUiwgImJ1ZmZlciAlcCwgaWR4ICV1LCBsZW5ndGggJXUiLCBidWZmZXIsIGlkeCwKLSAgICAgIGxlbmd0aCk7Ci0KLSAgbWVtID0gR1NUX0JVRkZFUl9NRU1fQVJSQVkgKGJ1ZmZlcik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGxlbmd0aCA9PSAwKSkgewotICAgIHJlc3VsdCA9IE5VTEw7Ci0gIH0gZWxzZSBpZiAoR19MSUtFTFkgKGxlbmd0aCA9PSAxKSkgewotICAgIHJlc3VsdCA9IGdzdF9tZW1vcnlfcmVmIChtZW1baWR4XSk7Ci0gIH0gZWxzZSB7Ci0gICAgR3N0TWVtb3J5ICpwYXJlbnQgPSBOVUxMOwotICAgIGdzaXplIHNpemUsIHBvZmZzZXQgPSAwOwotCi0gICAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzX3JhbmdlIChidWZmZXIsIGlkeCwgbGVuZ3RoLCBOVUxMLCBOVUxMKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChfaXNfc3BhbiAobWVtICsgaWR4LCBsZW5ndGgsICZwb2Zmc2V0LCAmcGFyZW50KSkpIHsKLSAgICAgIGlmICghR1NUX01FTU9SWV9JU19OT19TSEFSRSAocGFyZW50KSkKLSAgICAgICAgcmVzdWx0ID0gZ3N0X21lbW9yeV9zaGFyZSAocGFyZW50LCBwb2Zmc2V0LCBzaXplKTsKLSAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEVSRk9STUFOQ0UsICJjb3B5IGZvciBtZXJnZSAlcCIsIHBhcmVudCk7Ci0gICAgICAgIHJlc3VsdCA9IGdzdF9tZW1vcnlfY29weSAocGFyZW50LCBwb2Zmc2V0LCBzaXplKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZ3NpemUgaSwgdG9jb3B5LCBsZWZ0OwotICAgICAgR3N0TWFwSW5mbyBzaW5mbywgZGluZm87Ci0gICAgICBndWludDggKnB0cjsKLQotICAgICAgcmVzdWx0ID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgc2l6ZSwgTlVMTCk7Ci0gICAgICBpZiAocmVzdWx0ID09IE5VTEwgfHwgIWdzdF9tZW1vcnlfbWFwIChyZXN1bHQsICZkaW5mbywgR1NUX01BUF9XUklURSkpIHsKLSAgICAgICAgR1NUX0NBVF9FUlJPUiAoR1NUX0NBVF9CVUZGRVIsICJGYWlsZWQgdG8gbWFwIG1lbW9yeSB3cml0YWJsZSIpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotCi0gICAgICBwdHIgPSBkaW5mby5kYXRhOwotICAgICAgbGVmdCA9IHNpemU7Ci0KLSAgICAgIGZvciAoaSA9IGlkeDsgaSA8IChpZHggKyBsZW5ndGgpICYmIGxlZnQgPiAwOyBpKyspIHsKLSAgICAgICAgaWYgKCFnc3RfbWVtb3J5X21hcCAobWVtW2ldLCAmc2luZm8sIEdTVF9NQVBfUkVBRCkpIHsKLSAgICAgICAgICBHU1RfQ0FUX0VSUk9SIChHU1RfQ0FUX0JVRkZFUiwKLSAgICAgICAgICAgICAgImJ1ZmZlciAlcCwgaWR4ICV1LCBsZW5ndGggJXUgZmFpbGVkIHRvIG1hcCByZWFkYWJsZSIsIGJ1ZmZlciwKLSAgICAgICAgICAgICAgaWR4LCBsZW5ndGgpOwotICAgICAgICAgIGdzdF9tZW1vcnlfdW5tYXAgKHJlc3VsdCwgJmRpbmZvKTsKLSAgICAgICAgICBnc3RfbWVtb3J5X3VucmVmIChyZXN1bHQpOwotICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHRvY29weSA9IE1JTiAoc2luZm8uc2l6ZSwgbGVmdCk7Ci0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEVSRk9STUFOQ0UsCi0gICAgICAgICAgICAibWVtY3B5ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgZm9yIG1lcmdlICVwIGZyb20gbWVtb3J5ICVwIiwKLSAgICAgICAgICAgIHRvY29weSwgcmVzdWx0LCBtZW1baV0pOwotICAgICAgICBtZW1jcHkgKHB0ciwgKGd1aW50OCAqKSBzaW5mby5kYXRhLCB0b2NvcHkpOwotICAgICAgICBsZWZ0IC09IHRvY29weTsKLSAgICAgICAgcHRyICs9IHRvY29weTsKLSAgICAgICAgZ3N0X21lbW9yeV91bm1hcCAobWVtW2ldLCAmc2luZm8pOwotICAgICAgfQotICAgICAgZ3N0X21lbW9yeV91bm1hcCAocmVzdWx0LCAmZGluZm8pOwotICAgIH0KLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotX3JlcGxhY2VfbWVtb3J5IChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGxlbiwgZ3VpbnQgaWR4LCBndWludCBsZW5ndGgsCi0gICAgR3N0TWVtb3J5ICogbWVtKQotewotICBnc2l6ZSBlbmQsIGk7Ci0KLSAgZW5kID0gaWR4ICsgbGVuZ3RoOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0JVRkZFUiwKLSAgICAgICJidWZmZXIgJXAgcmVwbGFjZSAldS0lIiBHX0dTSVpFX0ZPUk1BVCAiIHdpdGggbWVtb3J5ICVwIiwgYnVmZmVyLCBpZHgsCi0gICAgICBlbmQsIG1lbSk7Ci0KLSAgLyogdW5yZWYgb2xkIG1lbW9yeSAqLwotICBmb3IgKGkgPSBpZHg7IGkgPCBlbmQ7IGkrKykgewotICAgIEdzdE1lbW9yeSAqb2xkID0gR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkpOwotCi0gICAgZ3N0X21lbW9yeV91bmxvY2sgKG9sZCwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpOwotICAgIGdzdF9tZW1vcnlfdW5yZWYgKG9sZCk7Ci0gIH0KLQotICBpZiAobWVtICE9IE5VTEwpIHsKLSAgICAvKiByZXBsYWNlIHdpdGggc2luZ2xlIG1lbW9yeSAqLwotICAgIGdzdF9tZW1vcnlfbG9jayAobWVtLCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSk7Ci0gICAgR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGlkeCkgPSBtZW07Ci0gICAgaWR4Kys7Ci0gICAgbGVuZ3RoLS07Ci0gIH0KLQotICBpZiAoZW5kIDwgbGVuKSB7Ci0gICAgbWVtbW92ZSAoJkdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpZHgpLAotICAgICAgICAmR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGVuZCksIChsZW4gLSBlbmQpICogc2l6ZW9mIChncG9pbnRlcikpOwotICB9Ci0gIEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKSA9IGxlbiAtIGxlbmd0aDsKLSAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9nZXRfZmxhZ3M6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKLSAqCi0gKiBHZXQgdGhlICNHc3RCdWZmZXJGbGFncyBmbGFncyBzZXQgb24gdGhpcyBidWZmZXIuCi0gKgotICogUmV0dXJuczogdGhlIGZsYWdzIHNldCBvbiB0aGlzIGJ1ZmZlci4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1Hc3RCdWZmZXJGbGFncwotZ3N0X2J1ZmZlcl9nZXRfZmxhZ3MgKEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgcmV0dXJuIChHc3RCdWZmZXJGbGFncykgR1NUX0JVRkZFUl9GTEFHUyAoYnVmZmVyKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2ZsYWdfaXNfc2V0OgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKiBAZmxhZ3M6IHRoZSAjR3N0QnVmZmVyRmxhZ3MgZmxhZyB0byBjaGVjay4KLSAqCi0gKiBHaXZlcyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgZmxhZyBvbiBhIGJ1ZmZlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBhbGwgZmxhZ3MgaW4gQGZsYWdzIGFyZSBmb3VuZCBvbiBAYnVmZmVyLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLWdib29sZWFuCi1nc3RfYnVmZmVyX2hhc19mbGFncyAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RCdWZmZXJGbGFncyBmbGFncykKLXsKLSAgcmV0dXJuIEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgZmxhZ3MpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfc2V0X2ZsYWdzOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKiBAZmxhZ3M6IHRoZSAjR3N0QnVmZmVyRmxhZ3MgdG8gc2V0LgotICoKLSAqIFNldHMgb25lIG9yIG1vcmUgYnVmZmVyIGZsYWdzIG9uIGEgYnVmZmVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBmbGFncyB3ZXJlIHN1Y2Nlc3NmdWxseSBzZXQgb24gYnVmZmVyLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLWdib29sZWFuCi1nc3RfYnVmZmVyX3NldF9mbGFncyAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RCdWZmZXJGbGFncyBmbGFncykKLXsKLSAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmZmVyLCBmbGFncyk7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfdW5zZXRfZmxhZ3M6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKLSAqIEBmbGFnczogdGhlICNHc3RCdWZmZXJGbGFncyB0byBjbGVhcgotICoKLSAqIENsZWFycyBvbmUgb3IgbW9yZSBidWZmZXIgZmxhZ3MuCi0gKgotICogUmV0dXJuczogdHJ1ZSBpZiBAZmxhZ3MgaXMgc3VjY2Vzc2Z1bGx5IGNsZWFyZWQgZnJvbSBidWZmZXIuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfdW5zZXRfZmxhZ3MgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0QnVmZmVyRmxhZ3MgZmxhZ3MpCi17Ci0gIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAoYnVmZmVyLCBmbGFncyk7Ci0gIHJldHVybiBUUlVFOwotfQotCi0KLQotLyogdHJhbnNmZXIgZnVsbCBmb3IgcmV0dXJuIGFuZCB0cmFuc2ZlciBub25lIGZvciBAbWVtICovCi1zdGF0aWMgaW5saW5lIEdzdE1lbW9yeSAqCi1fbWVtb3J5X2dldF9leGNsdXNpdmVfcmVmZXJlbmNlIChHc3RNZW1vcnkgKiBtZW0pCi17Ci0gIEdzdE1lbW9yeSAqcmV0ID0gTlVMTDsKLQotICBpZiAoZ3N0X21lbW9yeV9sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKSkgewotICAgIHJldCA9IGdzdF9tZW1vcnlfcmVmIChtZW0pOwotICB9IGVsc2UgewotICAgIC8qIHdlIGNhbm5vdCB0YWtlIGFub3RoZXIgZXhjbHVzaXZlIGxvY2sgYXMgdGhlIG1lbW9yeSBpcyBhbHJlYWR5Ci0gICAgICogbG9ja2VkIFdSSVRFICsgRVhDTFVTSVZFIGFjY29yZGluZyB0byBwYXJ0LW1pbmlvYmplY3QudHh0ICovCi0gICAgcmV0ID0gZ3N0X21lbW9yeV9jb3B5IChtZW0sIDAsIC0xKTsKLQotICAgIGlmIChyZXQpIHsKLSAgICAgIGlmICghZ3N0X21lbW9yeV9sb2NrIChyZXQsIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKSkgewotICAgICAgICBnc3RfbWVtb3J5X3VucmVmIChyZXQpOwotICAgICAgICByZXQgPSBOVUxMOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICghcmV0KQotICAgIEdTVF9DQVRfV0FSTklORyAoR1NUX0NBVF9CVUZGRVIsICJGYWlsZWQgdG8gYWNxdWlyZSBhbiBleGNsdXNpdmUgbG9jayBmb3IgIgotICAgICAgICAibWVtb3J5ICVwIiwgbWVtKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9tZW1vcnlfYWRkIChHc3RCdWZmZXIgKiBidWZmZXIsIGdpbnQgaWR4LCBHc3RNZW1vcnkgKiBtZW0pCi17Ci0gIGd1aW50IGksIGxlbiA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKTsKLQotICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9CVUZGRVIsICJidWZmZXIgJXAsIGlkeCAlZCwgbWVtICVwIiwgYnVmZmVyLCBpZHgsIG1lbSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGxlbiA+PSBHU1RfQlVGRkVSX01FTV9NQVgpKSB7Ci0gICAgLyogdG9vIG1hbnkgYnVmZmVyLCBzcGFuIHRoZW0uICovCi0gICAgLyogRklYTUUsIHRoZXJlIGlzIHJvb20gZm9yIGltcHJvdmVtZW50IGhlcmU6IFdlIGNvdWxkIG9ubHkgdHJ5IHRvIG1lcmdlCi0gICAgICogMiBidWZmZXJzIHRvIG1ha2Ugc29tZSByb29tLiBJZiB3ZSBjYW4ndCBlZmZpY2llbnRseSBtZXJnZSAyIGJ1ZmZlcnMgd2UKLSAgICAgKiBjb3VsZCB0cnkgdG8gb25seSBtZXJnZSB0aGUgdHdvIHNtYWxsZXN0IGJ1ZmZlcnMgdG8gYXZvaWQgbWVtY3B5LCBldGMuICovCi0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgIm1lbW9yeSBhcnJheSBvdmVyZmxvdyBpbiBidWZmZXIgJXAiLAotICAgICAgICBidWZmZXIpOwotICAgIF9yZXBsYWNlX21lbW9yeSAoYnVmZmVyLCBsZW4sIDAsIGxlbiwgX2dldF9tZXJnZWRfbWVtb3J5IChidWZmZXIsIDAsIGxlbikpOwotICAgIC8qIHdlIG5vdyBoYXZlIDEgc2luZ2xlIHNwYW5uZWQgYnVmZmVyICovCi0gICAgbGVuID0gMTsKLSAgfQotCi0gIGlmIChpZHggPT0gLTEpCi0gICAgaWR4ID0gbGVuOwotCi0gIGZvciAoaSA9IGxlbjsgaSA+IGlkeDsgaS0tKSB7Ci0gICAgLyogbW92ZSBidWZmZXJzIHRvIGluc2VydCwgRklYTUUsIHdlIG5lZWQgdG8gaW5zZXJ0IGZpcnN0IGFuZCB0aGVuIG1lcmdlICovCi0gICAgR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkpID0gR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkgLSAxKTsKLSAgfQotICAvKiBhbmQgaW5zZXJ0IHRoZSBuZXcgYnVmZmVyICovCi0gIEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpZHgpID0gbWVtOwotICBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcikgPSBsZW4gKyAxOwotCi0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpOwotfQotCi1HU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEUgKEdzdEJ1ZmZlciwgZ3N0X2J1ZmZlcik7Ci0KLXZvaWQKLV9wcml2X2dzdF9idWZmZXJfaW5pdGlhbGl6ZSAodm9pZCkKLXsKLSAgX2dzdF9idWZmZXJfdHlwZSA9IGdzdF9idWZmZXJfZ2V0X3R5cGUgKCk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9nZXRfbWF4X21lbW9yeToKLSAqCi0gKiBHZXQgdGhlIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSBibG9ja3MgdGhhdCBhIGJ1ZmZlciBjYW4gaG9sZC4gVGhpcyBpcyBhCi0gKiBjb21waWxlIHRpbWUgY29uc3RhbnQgdGhhdCBjYW4gYmUgcXVlcmllZCB3aXRoIHRoZSBmdW5jdGlvbi4KLSAqCi0gKiBXaGVuIG1vcmUgbWVtb3J5IGJsb2NrcyBhcmUgYWRkZWQsIGV4aXN0aW5nIG1lbW9yeSBibG9ja3Mgd2lsbCBiZSBtZXJnZWQKLSAqIHRvZ2V0aGVyIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIG5ldyBibG9jay4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IGJsb2NrcyB0aGF0IGEgYnVmZmVyIGNhbiBob2xkLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ3VpbnQKLWdzdF9idWZmZXJfZ2V0X21heF9tZW1vcnkgKHZvaWQpCi17Ci0gIHJldHVybiBHU1RfQlVGRkVSX01FTV9NQVg7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9jb3B5X2ludG86Ci0gKiBAZGVzdDogYSBkZXN0aW5hdGlvbiAjR3N0QnVmZmVyCi0gKiBAc3JjOiBhIHNvdXJjZSAjR3N0QnVmZmVyCi0gKiBAZmxhZ3M6IGZsYWdzIGluZGljYXRpbmcgd2hhdCBtZXRhZGF0YSBmaWVsZHMgc2hvdWxkIGJlIGNvcGllZC4KLSAqIEBvZmZzZXQ6IG9mZnNldCB0byBjb3B5IGZyb20KLSAqIEBzaXplOiB0b3RhbCBzaXplIHRvIGNvcHkuIElmIC0xLCBhbGwgZGF0YSBpcyBjb3BpZWQuCi0gKgotICogQ29waWVzIHRoZSBpbmZvcm1hdGlvbiBmcm9tIEBzcmMgaW50byBAZGVzdC4KLSAqCi0gKiBJZiBAZGVzdCBhbHJlYWR5IGNvbnRhaW5zIG1lbW9yeSBhbmQgQGZsYWdzIGNvbnRhaW5zIEdTVF9CVUZGRVJfQ09QWV9NRU1PUlksCi0gKiB0aGUgbWVtb3J5IGZyb20gQHNyYyB3aWxsIGJlIGFwcGVuZGVkIHRvIEBkZXN0LgotICoKLSAqIEBmbGFncyBpbmRpY2F0ZSB3aGljaCBmaWVsZHMgd2lsbCBiZSBjb3BpZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNvcHlpbmcgc3VjY2VlZGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKEdzdEJ1ZmZlciAqIGRlc3QsIEdzdEJ1ZmZlciAqIHNyYywKLSAgICBHc3RCdWZmZXJDb3B5RmxhZ3MgZmxhZ3MsIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0TWV0YUl0ZW0gKndhbGs7Ci0gIGdzaXplIGJ1ZnNpemU7Ci0gIGdib29sZWFuIHJlZ2lvbiA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNyYyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgLyogbm90aGluZyB0byBjb3B5IGlmIHRoZSBidWZmZXJzIGFyZSB0aGUgc2FtZSAqLwotICBpZiAoR19VTkxJS0VMWSAoZGVzdCA9PSBzcmMpKQotICAgIHJldHVybiBUUlVFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChkZXN0KSwgRkFMU0UpOwotCi0gIGJ1ZnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChzcmMpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmc2l6ZSA+PSBvZmZzZXQsIEZBTFNFKTsKLSAgaWYgKG9mZnNldCA+IDApCi0gICAgcmVnaW9uID0gVFJVRTsKLSAgaWYgKHNpemUgPT0gLTEpCi0gICAgc2l6ZSA9IGJ1ZnNpemUgLSBvZmZzZXQ7Ci0gIGlmIChzaXplIDwgYnVmc2l6ZSkKLSAgICByZWdpb24gPSBUUlVFOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmc2l6ZSA+PSBvZmZzZXQgKyBzaXplLCBGQUxTRSk7Ci0KLSAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLCAiY29weSAlcCB0byAlcCwgb2Zmc2V0ICUiIEdfR1NJWkVfRk9STUFUCi0gICAgICAiLSUiIEdfR1NJWkVfRk9STUFUICIvJSIgR19HU0laRV9GT1JNQVQsIHNyYywgZGVzdCwgb2Zmc2V0LCBzaXplLAotICAgICAgYnVmc2l6ZSk7Ci0KLSAgaWYgKGZsYWdzICYgR1NUX0JVRkZFUl9DT1BZX0ZMQUdTKSB7Ci0gICAgLyogY29weSBmbGFncyAqLwotICAgIGd1aW50IGZsYWdzX21hc2sgPSB+R1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlk7Ci0KLSAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR1MgKGRlc3QpID0KLSAgICAgICAgKEdTVF9NSU5JX09CSkVDVF9GTEFHUyAoc3JjKSAmIGZsYWdzX21hc2spIHwKLSAgICAgICAgKEdTVF9NSU5JX09CSkVDVF9GTEFHUyAoZGVzdCkgJiB+ZmxhZ3NfbWFzayk7Ci0gIH0KLQotICBpZiAoZmxhZ3MgJiBHU1RfQlVGRkVSX0NPUFlfVElNRVNUQU1QUykgewotICAgIGlmIChvZmZzZXQgPT0gMCkgewotICAgICAgR1NUX0JVRkZFUl9QVFMgKGRlc3QpID0gR1NUX0JVRkZFUl9QVFMgKHNyYyk7Ci0gICAgICBHU1RfQlVGRkVSX0RUUyAoZGVzdCkgPSBHU1RfQlVGRkVSX0RUUyAoc3JjKTsKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChkZXN0KSA9IEdTVF9CVUZGRVJfT0ZGU0VUIChzcmMpOwotICAgICAgaWYgKHNpemUgPT0gYnVmc2l6ZSkgewotICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChkZXN0KSA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKHNyYyk7Ci0gICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoZGVzdCkgPSBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKHNyYyk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9CVUZGRVJfUFRTIChkZXN0KSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBHU1RfQlVGRkVSX0RUUyAoZGVzdCkgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoZGVzdCkgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGRlc3QpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoZGVzdCkgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICAgIH0KLSAgfQotCi0gIGlmIChmbGFncyAmIEdTVF9CVUZGRVJfQ09QWV9NRU1PUlkpIHsKLSAgICBnc2l6ZSBza2lwLCBsZWZ0LCBsZW4sIGRlc3RfbGVuLCBpLCBic2l6ZTsKLSAgICBnYm9vbGVhbiBkZWVwOwotCi0gICAgZGVlcCA9IGZsYWdzICYgR1NUX0JVRkZFUl9DT1BZX0RFRVA7Ci0KLSAgICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKHNyYyk7Ci0gICAgZGVzdF9sZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGRlc3QpOwotICAgIGxlZnQgPSBzaXplOwotICAgIHNraXAgPSBvZmZzZXQ7Ci0KLSAgICAvKiBjb3B5IGFuZCBtYWtlIHJlZ2lvbnMgb2YgdGhlIG1lbW9yeSAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW4gJiYgbGVmdCA+IDA7IGkrKykgewotICAgICAgR3N0TWVtb3J5ICptZW0gPSBHU1RfQlVGRkVSX01FTV9QVFIgKHNyYywgaSk7Ci0KLSAgICAgIGJzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgIGlmIChic2l6ZSA8PSBza2lwKSB7Ci0gICAgICAgIC8qIGRvbid0IGNvcHkgYnVmZmVyICovCi0gICAgICAgIHNraXAgLT0gYnNpemU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHc3RNZW1vcnkgKm5ld21lbSA9IE5VTEw7Ci0gICAgICAgIGdzaXplIHRvY29weTsKLQotICAgICAgICB0b2NvcHkgPSBNSU4gKGJzaXplIC0gc2tpcCwgbGVmdCk7Ci0KLSAgICAgICAgaWYgKHRvY29weSA8IGJzaXplICYmICFkZWVwICYmICFHU1RfTUVNT1JZX0lTX05PX1NIQVJFIChtZW0pKSB7Ci0gICAgICAgICAgLyogd2UgbmVlZCB0byBjbGlwIHNvbWV0aGluZyAqLwotICAgICAgICAgIG5ld21lbSA9IGdzdF9tZW1vcnlfc2hhcmUgKG1lbSwgc2tpcCwgdG9jb3B5KTsKLSAgICAgICAgICBpZiAobmV3bWVtKSB7Ci0gICAgICAgICAgICBnc3RfbWVtb3J5X2xvY2sgKG5ld21lbSwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpOwotICAgICAgICAgICAgc2tpcCA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlZXAgfHwgR1NUX01FTU9SWV9JU19OT19TSEFSRSAobWVtKSB8fCAoIW5ld21lbSAmJiB0b2NvcHkgPCBic2l6ZSkpIHsKLSAgICAgICAgICAvKiBkZWVwIGNvcHkgb3Igd2UncmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgdGhpcyBtZW1vcnkKLSAgICAgICAgICAgKiBiZXR3ZWVuIGJ1ZmZlcnMsIGFsd2F5cyBjb3B5IHRoZW4gKi8KLSAgICAgICAgICBuZXdtZW0gPSBnc3RfbWVtb3J5X2NvcHkgKG1lbSwgc2tpcCwgdG9jb3B5KTsKLSAgICAgICAgICBpZiAobmV3bWVtKSB7Ci0gICAgICAgICAgICBnc3RfbWVtb3J5X2xvY2sgKG5ld21lbSwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpOwotICAgICAgICAgICAgc2tpcCA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFuZXdtZW0pIHsKLSAgICAgICAgICBuZXdtZW0gPSBfbWVtb3J5X2dldF9leGNsdXNpdmVfcmVmZXJlbmNlIChtZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFuZXdtZW0pIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2UgKGRlc3QsIGRlc3RfbGVuLCAtMSk7Ci0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgX21lbW9yeV9hZGQgKGRlc3QsIC0xLCBuZXdtZW0pOwotICAgICAgICBsZWZ0IC09IHRvY29weTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGZsYWdzICYgR1NUX0JVRkZFUl9DT1BZX01FUkdFKSB7Ci0gICAgICBHc3RNZW1vcnkgKm1lbTsKLQotICAgICAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChkZXN0KTsKLSAgICAgIG1lbSA9IF9nZXRfbWVyZ2VkX21lbW9yeSAoZGVzdCwgMCwgbGVuKTsKLSAgICAgIGlmICghbWVtKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZSAoZGVzdCwgZGVzdF9sZW4sIC0xKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgICAgX3JlcGxhY2VfbWVtb3J5IChkZXN0LCBsZW4sIDAsIGxlbiwgbWVtKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoZmxhZ3MgJiBHU1RfQlVGRkVSX0NPUFlfTUVUQSkgewotICAgIC8qIE5PVEU6IEdzdEdMU3luY01ldGEgY29weWluZyByZWxpZXMgb24gdGhlIG1ldGEKLSAgICAgKiAgICAgICBiZWluZyBjb3BpZWQgbm93LCBhZnRlciB0aGUgYnVmZmVyIGRhdGEsCi0gICAgICogICAgICAgc28gdGhpcyBoYXMgdG8gaGFwcGVuIGxhc3QgKi8KLSAgICBmb3IgKHdhbGsgPSBHU1RfQlVGRkVSX01FVEEgKHNyYyk7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgICBHc3RNZXRhICptZXRhID0gJndhbGstPm1ldGE7Ci0gICAgICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9IG1ldGEtPmluZm87Ci0KLSAgICAgIC8qIERvbid0IGNvcHkgbWVtb3J5IG1ldGFzIGlmIHdlIG9ubHkgY29waWVkIHBhcnQgb2YgdGhlIGJ1ZmZlciwgZGlkbid0Ci0gICAgICAgKiBjb3B5IG1lbW9yaWVzIG9yIG1lcmdlZCBtZW1vcmllcy4gSW4gYWxsIHRoZXNlIGNhc2VzIHRoZSBtZW1vcnkKLSAgICAgICAqIHN0cnVjdHVyZSBoYXMgY2hhbmdlZCBhbmQgdGhlIG1lbW9yeSBtZXRhIGJlY29tZXMgbWVhbmluZ2xlc3MuCi0gICAgICAgKi8KLSAgICAgIGlmICgocmVnaW9uIHx8ICEoZmxhZ3MgJiBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZKQotICAgICAgICAgICAgICB8fCAoZmxhZ3MgJiBHU1RfQlVGRkVSX0NPUFlfTUVSR0UpKQotICAgICAgICAgICYmIGdzdF9tZXRhX2FwaV90eXBlX2hhc190YWcgKGluZm8tPmFwaSwgX2dzdF9tZXRhX3RhZ19tZW1vcnkpKSB7Ci0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQlVGRkVSLAotICAgICAgICAgICAgImRvbid0IGNvcHkgbWVtb3J5IG1ldGEgJXAgb2YgQVBJIHR5cGUgJXMiLCBtZXRhLAotICAgICAgICAgICAgZ190eXBlX25hbWUgKGluZm8tPmFwaSkpOwotICAgICAgfSBlbHNlIGlmIChpbmZvLT50cmFuc2Zvcm1fZnVuYykgewotICAgICAgICBHc3RNZXRhVHJhbnNmb3JtQ29weSBjb3B5X2RhdGE7Ci0KLSAgICAgICAgY29weV9kYXRhLnJlZ2lvbiA9IHJlZ2lvbjsKLSAgICAgICAgY29weV9kYXRhLm9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgY29weV9kYXRhLnNpemUgPSBzaXplOwotCi0gICAgICAgIGlmICghaW5mby0+dHJhbnNmb3JtX2Z1bmMgKGRlc3QsIG1ldGEsIHNyYywKLSAgICAgICAgICAgICAgICBfZ3N0X21ldGFfdHJhbnNmb3JtX2NvcHksICZjb3B5X2RhdGEpKSB7Ci0gICAgICAgICAgR1NUX0NBVF9FUlJPUiAoR1NUX0NBVF9CVUZGRVIsCi0gICAgICAgICAgICAgICJmYWlsZWQgdG8gY29weSBtZXRhICVwIG9mIEFQSSB0eXBlICVzIiwgbWV0YSwKLSAgICAgICAgICAgICAgZ190eXBlX25hbWUgKGluZm8tPmFwaSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2J1ZmZlcl9jb3B5X3dpdGhfZmxhZ3MgKGNvbnN0IEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0QnVmZmVyQ29weUZsYWdzIGZsYWdzKQotewotICBHc3RCdWZmZXIgKmNvcHk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBOVUxMKTsKLQotICAvKiBjcmVhdGUgYSBmcmVzaCBuZXcgYnVmZmVyICovCi0gIGNvcHkgPSBnc3RfYnVmZmVyX25ldyAoKTsKLQotICAvKiBjb3B5IHdoYXQgdGhlICdmbGFncycgd2FudCBmcm9tIG91ciBwYXJlbnQgKi8KLSAgLyogRklYTUUgd2h5IHdlIGNhbid0IHBhc3MgY29uc3QgdG8gZ3N0X2J1ZmZlcl9jb3B5X2ludG8oKSA/ICovCi0gIGlmICghZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKGNvcHksIChHc3RCdWZmZXIgKikgYnVmZmVyLCBmbGFncywgMCwgLTEpKQotICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJmNvcHksIE5VTEwpOwotCi0gIGlmIChjb3B5KQotICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAoY29weSwgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpOwotCi0gIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLV9nc3RfYnVmZmVyX2NvcHkgKGNvbnN0IEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgcmV0dXJuIGdzdF9idWZmZXJfY29weV93aXRoX2ZsYWdzIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfY29weV9kZWVwOgotICogQGJ1ZjogYSAjR3N0QnVmZmVyLgotICoKLSAqIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gVGhpcyB3aWxsIG1ha2UgYSBuZXdseSBhbGxvY2F0ZWQKLSAqIGNvcHkgb2YgdGhlIGRhdGEgdGhlIHNvdXJjZSBidWZmZXIgY29udGFpbnMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBjb3B5IG9mIEBidWYuCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RCdWZmZXIgKgotZ3N0X2J1ZmZlcl9jb3B5X2RlZXAgKGNvbnN0IEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgcmV0dXJuIGdzdF9idWZmZXJfY29weV93aXRoX2ZsYWdzIChidWZmZXIsCi0gICAgICBHU1RfQlVGRkVSX0NPUFlfQUxMIHwgR1NUX0JVRkZFUl9DT1BZX0RFRVApOwotfQotCi0vKiB0aGUgZGVmYXVsdCBkaXNwb3NlIGZ1bmN0aW9uIHJldml2ZXMgdGhlIGJ1ZmZlciBhbmQgcmV0dXJucyBpdCB0byB0aGUKLSAqIHBvb2wgd2hlbiB0aGVyZSBpcyBhIHBvb2wgKi8KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF9idWZmZXJfZGlzcG9zZSAoR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RCdWZmZXJQb29sICpwb29sOwotCi0gIC8qIG5vIHBvb2wsIGRvIGZyZWUgKi8KLSAgaWYgKChwb29sID0gYnVmZmVyLT5wb29sKSA9PSBOVUxMKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIGtlZXAgdGhlIGJ1ZmZlciBhbGl2ZSAqLwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLSAgLyogcmV0dXJuIHRoZSBidWZmZXIgdG8gdGhlIHBvb2wgKi8KLSAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLCAicmVsZWFzZSAlcCB0byBwb29sICVwIiwgYnVmZmVyLCBwb29sKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyIChwb29sLCBidWZmZXIpOwotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLV9nc3RfYnVmZmVyX2ZyZWUgKEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0TWV0YUl0ZW0gKndhbGssICpuZXh0OwotICBndWludCBpLCBsZW47Ci0gIGdzaXplIG1zaXplOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMKTsKLQotICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9CVUZGRVIsICJmaW5hbGl6ZSAlcCIsIGJ1ZmZlcik7Ci0KLSAgLyogZnJlZSBtZXRhZGF0YSAqLwotICBmb3IgKHdhbGsgPSBHU1RfQlVGRkVSX01FVEEgKGJ1ZmZlcik7IHdhbGs7IHdhbGsgPSBuZXh0KSB7Ci0gICAgR3N0TWV0YSAqbWV0YSA9ICZ3YWxrLT5tZXRhOwotICAgIGNvbnN0IEdzdE1ldGFJbmZvICppbmZvID0gbWV0YS0+aW5mbzsKLQotICAgIC8qIGNhbGwgZnJlZV9mdW5jIGlmIGFueSAqLwotICAgIGlmIChpbmZvLT5mcmVlX2Z1bmMpCi0gICAgICBpbmZvLT5mcmVlX2Z1bmMgKG1ldGEsIGJ1ZmZlcik7Ci0KLSAgICBuZXh0ID0gd2Fsay0+bmV4dDsKLSAgICAvKiBhbmQgZnJlZSB0aGUgc2xpY2UgKi8KLSAgICBnX3NsaWNlX2ZyZWUxIChJVEVNX1NJWkUgKGluZm8pLCB3YWxrKTsKLSAgfQotCi0gIC8qIGdldCB0aGUgc2l6ZSwgd2hlbiB1bnJlZmZpbmcgdGhlIG1lbW9yeSwgd2UgY291bGQgYWxzbyB1bnJlZiB0aGUgYnVmZmVyCi0gICAqIGl0c2VsZiAqLwotICBtc2l6ZSA9IEdTVF9CVUZGRVJfU0xJQ0VfU0laRSAoYnVmZmVyKTsKLQotICAvKiBmcmVlIG91ciBtZW1vcnkgKi8KLSAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBnc3RfbWVtb3J5X3VubG9jayAoR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkpLCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSk7Ci0gICAgZ3N0X21lbW9yeV91bnJlZiAoR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkpKTsKLSAgfQotCi0gIC8qIHdlIHNldCBtc2l6ZSB0byAwIHdoZW4gdGhlIGJ1ZmZlciBpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgYmxvY2sgKi8KLSAgaWYgKG1zaXplKSB7Ci0jaWZkZWYgVVNFX1BPSVNPTklORwotICAgIG1lbXNldCAoYnVmZmVyLCAweGZmLCBtc2l6ZSk7Ci0jZW5kaWYKLSAgICBnX3NsaWNlX2ZyZWUxIChtc2l6ZSwgYnVmZmVyKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfbWVtb3J5X3VucmVmIChHU1RfQlVGRkVSX0JVRk1FTSAoYnVmZmVyKSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9idWZmZXJfaW5pdCAoR3N0QnVmZmVySW1wbCAqIGJ1ZmZlciwgZ3NpemUgc2l6ZSkKLXsKLSAgZ3N0X21pbmlfb2JqZWN0X2luaXQgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWZmZXIpLCAwLCBfZ3N0X2J1ZmZlcl90eXBlLAotICAgICAgKEdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24pIF9nc3RfYnVmZmVyX2NvcHksCi0gICAgICAoR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbikgX2dzdF9idWZmZXJfZGlzcG9zZSwKLSAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBfZ3N0X2J1ZmZlcl9mcmVlKTsKLQotICBHU1RfQlVGRkVSX1NMSUNFX1NJWkUgKGJ1ZmZlcikgPSBzaXplOwotCi0gIEdTVF9CVUZGRVIgKGJ1ZmZlciktPnBvb2wgPSBOVUxMOwotICBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWZmZXIpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLQotICBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcikgPSAwOwotICBHU1RfQlVGRkVSX01FVEEgKGJ1ZmZlcikgPSBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfbmV3OgotICoKLSAqIENyZWF0ZXMgYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHdpdGhvdXQgYW55IGRhdGEuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgI0dzdEJ1ZmZlci4KLSAqLwotR3N0QnVmZmVyICoKLWdzdF9idWZmZXJfbmV3ICh2b2lkKQotewotICBHc3RCdWZmZXJJbXBsICpuZXdidWY7Ci0KLSAgbmV3YnVmID0gZ19zbGljZV9uZXcgKEdzdEJ1ZmZlckltcGwpOwotICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9CVUZGRVIsICJuZXcgJXAiLCBuZXdidWYpOwotCi0gIGdzdF9idWZmZXJfaW5pdCAobmV3YnVmLCBzaXplb2YgKEdzdEJ1ZmZlckltcGwpKTsKLQotICByZXR1cm4gR1NUX0JVRkZFUl9DQVNUIChuZXdidWYpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlOgotICogQGFsbG9jYXRvcjogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlICNHc3RBbGxvY2F0b3IgdG8gdXNlLCBvciAlTlVMTCB0byB1c2UgdGhlCi0gKiAgICAgZGVmYXVsdCBhbGxvY2F0b3IKLSAqIEBzaXplOiB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbmV3IGJ1ZmZlcidzIGRhdGEuCi0gKiBAcGFyYW1zOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBvcHRpb25hbCBwYXJhbWV0ZXJzCi0gKgotICogVHJpZXMgdG8gY3JlYXRlIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciB3aXRoIGRhdGEgb2YgdGhlIGdpdmVuIHNpemUgYW5kCi0gKiBleHRyYSBwYXJhbWV0ZXJzIGZyb20gQGFsbG9jYXRvci4gSWYgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgbWVtb3J5IGNhbid0IGJlCi0gKiBhbGxvY2F0ZWQsICVOVUxMIHdpbGwgYmUgcmV0dXJuZWQuIFRoZSBhbGxvY2F0ZWQgYnVmZmVyIG1lbW9yeSBpcyBub3QgY2xlYXJlZC4KLSAqCi0gKiBXaGVuIEBhbGxvY2F0b3IgaXMgJU5VTEwsIHRoZSBkZWZhdWx0IG1lbW9yeSBhbGxvY2F0b3Igd2lsbCBiZSB1c2VkLgotICoKLSAqIE5vdGUgdGhhdCB3aGVuIEBzaXplID09IDAsIHRoZSBidWZmZXIgd2lsbCBub3QgaGF2ZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0LgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgbmV3ICNHc3RCdWZmZXIsIG9yICVOVUxMIGlmCi0gKiAgICAgdGhlIG1lbW9yeSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQuCi0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLCBnc2l6ZSBzaXplLAotICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCi17Ci0gIEdzdEJ1ZmZlciAqbmV3YnVmOwotICBHc3RNZW1vcnkgKm1lbTsKLSNpZiAwCi0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgYXNpemU7Ci0jZW5kaWYKLQotI2lmIDEKLSAgaWYgKHNpemUgPiAwKSB7Ci0gICAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoYWxsb2NhdG9yLCBzaXplLCBwYXJhbXMpOwotICAgIGlmIChHX1VOTElLRUxZIChtZW0gPT0gTlVMTCkpCi0gICAgICBnb3RvIG5vX21lbW9yeTsKLSAgfSBlbHNlIHsKLSAgICBtZW0gPSBOVUxMOwotICB9Ci0KLSAgbmV3YnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgaWYgKG1lbSAhPSBOVUxMKSB7Ci0gICAgZ3N0X21lbW9yeV9sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKTsKLSAgICBfbWVtb3J5X2FkZCAobmV3YnVmLCAtMSwgbWVtKTsKLSAgfQotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0JVRkZFUiwKLSAgICAgICJuZXcgYnVmZmVyICVwIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiBmcm9tIGFsbG9jYXRvciAlcCIsIG5ld2J1ZiwKLSAgICAgIHNpemUsIGFsbG9jYXRvcik7Ci0jZW5kaWYKLQotI2lmIDAKLSAgYXNpemUgPSBzaXplb2YgKEdzdEJ1ZmZlckltcGwpICsgc2l6ZTsKLSAgZGF0YSA9IGdfc2xpY2VfYWxsb2MgKGFzaXplKTsKLSAgaWYgKEdfVU5MSUtFTFkgKGRhdGEgPT0gTlVMTCkpCi0gICAgZ290byBub19tZW1vcnk7Ci0KLSAgbmV3YnVmID0gR1NUX0JVRkZFUl9DQVNUIChkYXRhKTsKLQotICBnc3RfYnVmZmVyX2luaXQgKChHc3RCdWZmZXJJbXBsICopIGRhdGEsIGFzaXplKTsKLSAgaWYgKHNpemUgPiAwKSB7Ci0gICAgbWVtID0gZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoMCwgZGF0YSArIHNpemVvZiAoR3N0QnVmZmVySW1wbCksIE5VTEwsCi0gICAgICAgIHNpemUsIDAsIHNpemUpOwotICAgIF9tZW1vcnlfYWRkIChuZXdidWYsIC0xLCBtZW0sIFRSVUUpOwotICB9Ci0jZW5kaWYKLQotI2lmIDAKLSAgLyogYWxsb2NhdGUgbWVtb3J5IGFuZCBidWZmZXIsIGl0IG1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIGRvIHRoaXMgYnV0IHRoZXJlCi0gICAqIGFyZSBtYW55IGNvbXBsaWNhdGlvbnMuIFdlIG5lZWQgdG8ga2VlcCB0aGUgbWVtb3J5IG1hcHBlZCB0byBhY2Nlc3MgdGhlCi0gICAqIGJ1ZmZlciBmaWVsZHMgYW5kIHRoZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIgbWlnaHQgYmUganVzdCB2ZXJ5IHNsb3cuIFdlCi0gICAqIGFsc28gbmVlZCB0byBkbyBzb21lIG1vcmUgbWFnaWMgdG8gZ2V0IHRoZSBhbGlnbm1lbnQgcmlnaHQuICovCi0gIGFzaXplID0gc2l6ZW9mIChHc3RCdWZmZXJJbXBsKSArIHNpemU7Ci0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKGFsbG9jYXRvciwgYXNpemUsIGFsaWduKTsKLSAgaWYgKEdfVU5MSUtFTFkgKG1lbSA9PSBOVUxMKSkKLSAgICBnb3RvIG5vX21lbW9yeTsKLQotICAvKiBtYXAgdGhlIGRhdGEgcGFydCBhbmQgaW5pdCB0aGUgYnVmZmVyIGluIGl0LCBzZXQgdGhlIGJ1ZmZlciBzaXplIHRvIDAgc28KLSAgICogdGhhdCBhIGZpbmFsaXplIHdvbid0IGZyZWUgdGhlIGJ1ZmZlciAqLwotICBkYXRhID0gZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmFzaXplLCBOVUxMLCBHU1RfTUFQX1dSSVRFKTsKLSAgZ3N0X2J1ZmZlcl9pbml0ICgoR3N0QnVmZmVySW1wbCAqKSBkYXRhLCAwKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtKTsKLQotICAvKiBzdHJpcCBvZmYgdGhlIGJ1ZmZlciAqLwotICBnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCBzaXplb2YgKEdzdEJ1ZmZlckltcGwpLCBzaXplKTsKLQotICBuZXdidWYgPSBHU1RfQlVGRkVSX0NBU1QgKGRhdGEpOwotICBHU1RfQlVGRkVSX0JVRk1FTSAobmV3YnVmKSA9IG1lbTsKLQotICBpZiAoc2l6ZSA+IDApCi0gICAgX21lbW9yeV9hZGQgKG5ld2J1ZiwgLTEsIGdzdF9tZW1vcnlfcmVmIChtZW0pLCBUUlVFKTsKLSNlbmRpZgotICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG5ld2J1ZiwgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpOwotCi0gIHJldHVybiBuZXdidWY7Ci0KLSAgLyogRVJST1JTICovCi1ub19tZW1vcnk6Ci0gIHsKLSAgICBHU1RfQ0FUX1dBUk5JTkcgKEdTVF9DQVRfQlVGRkVSLAotICAgICAgICAiZmFpbGVkIHRvIGFsbG9jYXRlICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCBzaXplKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbDoKLSAqIEBmbGFnczogI0dzdE1lbW9yeUZsYWdzCi0gKiBAZGF0YTogKGFycmF5IGxlbmd0aD1zaXplKSAoZWxlbWVudC10eXBlIGd1aW50OCkgKHRyYW5zZmVyIG5vbmUpOiBkYXRhIHRvIHdyYXAKLSAqIEBtYXhzaXplOiBhbGxvY2F0ZWQgc2l6ZSBvZiBAZGF0YQotICogQG9mZnNldDogb2Zmc2V0IGluIEBkYXRhCi0gKiBAc2l6ZTogc2l6ZSBvZiB2YWxpZCBkYXRhCi0gKiBAdXNlcl9kYXRhOiAoYWxsb3ctbm9uZSk6IHVzZXJfZGF0YQotICogQG5vdGlmeTogKGFsbG93LW5vbmUpIChzY29wZSBhc3luYykgKGNsb3N1cmUgdXNlcl9kYXRhKTogY2FsbGVkIHdpdGggQHVzZXJfZGF0YSB3aGVuIHRoZSBtZW1vcnkgaXMgZnJlZWQKLSAqCi0gKiBBbGxvY2F0ZSBhIG5ldyBidWZmZXIgdGhhdCB3cmFwcyB0aGUgZ2l2ZW4gbWVtb3J5LiBAZGF0YSBtdXN0IHBvaW50IHRvCi0gKiBAbWF4c2l6ZSBvZiBtZW1vcnksIHRoZSB3cmFwcGVkIGJ1ZmZlciB3aWxsIGhhdmUgdGhlIHJlZ2lvbiBmcm9tIEBvZmZzZXQgYW5kCi0gKiBAc2l6ZSB2aXNpYmxlLgotICoKLSAqIFdoZW4gdGhlIGJ1ZmZlciBpcyBkZXN0cm95ZWQsIEBub3RpZnkgd2lsbCBiZSBjYWxsZWQgd2l0aCBAdXNlcl9kYXRhLgotICoKLSAqIFRoZSBwcmVmaXgvcGFkZGluZyBtdXN0IGJlIGZpbGxlZCB3aXRoIDAgaWYgQGZsYWdzIGNvbnRhaW5zCi0gKiAjR1NUX01FTU9SWV9GTEFHX1pFUk9fUFJFRklYRUQgYW5kICNHU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQgcmVzcGVjdGl2ZWx5LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEJ1ZmZlcgotICovCi1Hc3RCdWZmZXIgKgotZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHc3RNZW1vcnlGbGFncyBmbGFncywgZ3BvaW50ZXIgZGF0YSwKLSAgICBnc2l6ZSBtYXhzaXplLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUsIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpCi17Ci0gIEdzdE1lbW9yeSAqbWVtOwotICBHc3RCdWZmZXIgKm5ld2J1ZjsKLQotICBuZXdidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgbWVtID0KLSAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKGZsYWdzLCBkYXRhLCBtYXhzaXplLCBvZmZzZXQsIHNpemUsIHVzZXJfZGF0YSwKLSAgICAgIG5vdGlmeSk7Ci0gIGdzdF9tZW1vcnlfbG9jayAobWVtLCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSk7Ci0gIF9tZW1vcnlfYWRkIChuZXdidWYsIC0xLCBtZW0pOwotICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG5ld2J1ZiwgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpOwotCi0gIHJldHVybiBuZXdidWY7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZDoKLSAqIEBkYXRhOiAoYXJyYXkgbGVuZ3RoPXNpemUpIChlbGVtZW50LXR5cGUgZ3VpbnQ4KSAodHJhbnNmZXIgZnVsbCk6IGRhdGEgdG8gd3JhcAotICogQHNpemU6IGFsbG9jYXRlZCBzaXplIG9mIEBkYXRhCi0gKgotICogQ3JlYXRlcyBhIG5ldyBidWZmZXIgdGhhdCB3cmFwcyB0aGUgZ2l2ZW4gQGRhdGEuIFRoZSBtZW1vcnkgd2lsbCBiZSBmcmVlZAotICogd2l0aCBnX2ZyZWUgYW5kIHdpbGwgYmUgbWFya2VkIHdyaXRhYmxlLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0QnVmZmVyCi0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfYnVmZmVyX25ld193cmFwcGVkIChncG9pbnRlciBkYXRhLCBnc2l6ZSBzaXplKQotewotICByZXR1cm4gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsICgwLCBkYXRhLCBzaXplLCAwLCBzaXplLCBkYXRhLCBnX2ZyZWUpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfbl9tZW1vcnk6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKgotICogR2V0IHRoZSBhbW91bnQgb2YgbWVtb3J5IGJsb2NrcyB0aGF0IHRoaXMgYnVmZmVyIGhhcy4gVGhpcyBhbW91bnQgaXMgbmV2ZXIKLSAqIGxhcmdlciB0aGFuIHdoYXQgZ3N0X2J1ZmZlcl9nZXRfbWF4X21lbW9yeSgpIHJldHVybnMuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIHRoaXMgYnVmZmVyIGlzIG1hZGUgb2YuCi0gKi8KLWd1aW50Ci1nc3RfYnVmZmVyX25fbWVtb3J5IChHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpLCAwKTsKLQotICByZXR1cm4gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcHJlcGVuZF9tZW1vcnk6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKiBAbWVtOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdE1lbW9yeS4KLSAqCi0gKiBQcmVwZW5kIHRoZSBtZW1vcnkgYmxvY2sgQG1lbSB0byBAYnVmZmVyLiBUaGlzIGZ1bmN0aW9uIHRha2VzCi0gKiBvd25lcnNoaXAgb2YgQG1lbSBhbmQgdGh1cyBkb2Vzbid0IGluY3JlYXNlIGl0cyByZWZjb3VudC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkoKSB3aXRoIGFuIGluZGV4IG9mIDAuCi0gKiBTZWUgZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5KCkgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotdm9pZAotZ3N0X2J1ZmZlcl9wcmVwZW5kX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RNZW1vcnkgKiBtZW0pCi17Ci0gIGdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSAoYnVmZmVyLCAwLCBtZW0pOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqIEBtZW06ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0TWVtb3J5LgotICoKLSAqIEFwcGVuZCB0aGUgbWVtb3J5IGJsb2NrIEBtZW0gdG8gQGJ1ZmZlci4gVGhpcyBmdW5jdGlvbiB0YWtlcwotICogb3duZXJzaGlwIG9mIEBtZW0gYW5kIHRodXMgZG9lc24ndCBpbmNyZWFzZSBpdHMgcmVmY291bnQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5KCkgd2l0aCBhbiBpbmRleCBvZiAtMS4KLSAqIFNlZSBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkoKSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi12b2lkCi1nc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0TWVtb3J5ICogbWVtKQotewotICBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkgKGJ1ZmZlciwgLTEsIG1lbSk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5OgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQGlkeDogdGhlIGluZGV4IHRvIGFkZCB0aGUgbWVtb3J5IGF0LCBvciAtMSB0byBhcHBlbmQgaXQgdG8gdGhlIGVuZAotICogQG1lbTogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RNZW1vcnkuCi0gKgotICogSW5zZXJ0IHRoZSBtZW1vcnkgYmxvY2sgQG1lbSB0byBAYnVmZmVyIGF0IEBpZHguIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwCi0gKiBvZiBAbWVtIGFuZCB0aHVzIGRvZXNuJ3QgaW5jcmVhc2UgaXRzIHJlZmNvdW50LgotICoKLSAqIE9ubHkgZ3N0X2J1ZmZlcl9nZXRfbWF4X21lbW9yeSgpIGNhbiBiZSBhZGRlZCB0byBhIGJ1ZmZlci4gSWYgbW9yZSBtZW1vcnkgaXMKLSAqIGFkZGVkLCBleGlzdGluZyBtZW1vcnkgYmxvY2tzIHdpbGwgYXV0b21hdGljYWxseSBiZSBtZXJnZWQgdG8gbWFrZSByb29tIGZvcgotICogdGhlIG5ldyBtZW1vcnkuCi0gKi8KLXZvaWQKLWdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyLCBnaW50IGlkeCwgR3N0TWVtb3J5ICogbWVtKQotewotICBHc3RNZW1vcnkgKnRtcDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1lbSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoaWR4ID09IC0xIHx8Ci0gICAgICAoaWR4ID49IDAgJiYgaWR4IDw9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKSkpOwotCi0gIHRtcCA9IF9tZW1vcnlfZ2V0X2V4Y2x1c2l2ZV9yZWZlcmVuY2UgKG1lbSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRtcCAhPSBOVUxMKTsKLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLSAgX21lbW9yeV9hZGQgKGJ1ZmZlciwgaWR4LCB0bXApOwotfQotCi1zdGF0aWMgR3N0TWVtb3J5ICoKLV9nZXRfbWFwcGVkIChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgR3N0TWFwSW5mbyAqIGluZm8sCi0gICAgR3N0TWFwRmxhZ3MgZmxhZ3MpCi17Ci0gIEdzdE1lbW9yeSAqbWVtLCAqbWFwcGVkOwotCi0gIG1lbSA9IGdzdF9tZW1vcnlfcmVmIChHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgaWR4KSk7Ci0KLSAgbWFwcGVkID0gZ3N0X21lbW9yeV9tYWtlX21hcHBlZCAobWVtLCBpbmZvLCBmbGFncyk7Ci0KLSAgaWYgKG1hcHBlZCAhPSBtZW0pIHsKLSAgICAvKiBtZW1vcnkgY2hhbmdlZCwgbG9jayBuZXcgbWVtb3J5ICovCi0gICAgZ3N0X21lbW9yeV9sb2NrIChtYXBwZWQsIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKTsKLSAgICBHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgaWR4KSA9IG1hcHBlZDsKLSAgICAvKiB1bmxvY2sgb2xkIG1lbW9yeSAqLwotICAgIGdzdF9tZW1vcnlfdW5sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKTsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZKTsKLSAgfQotICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOwotCi0gIHJldHVybiBtYXBwZWQ7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqIEBpZHg6IGFuIGluZGV4Ci0gKgotICogR2V0IHRoZSBtZW1vcnkgYmxvY2sgYXQgQGlkeCBpbiBAYnVmZmVyLiBUaGUgbWVtb3J5IGJsb2NrIHN0YXlzIHZhbGlkIHVudGlsCi0gKiB0aGUgbWVtb3J5IGJsb2NrIGluIEBidWZmZXIgaXMgcmVtb3ZlZCwgcmVwbGFjZWQgb3IgbWVyZ2VkLCB0eXBpY2FsbHkgd2l0aAotICogYW55IGNhbGwgdGhhdCBtb2RpZmllcyB0aGUgbWVtb3J5IGluIEBidWZmZXIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdE1lbW9yeSBhdCBAaWR4LgotICovCi1Hc3RNZW1vcnkgKgotZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyLCBndWludCBpZHgpCi17Ci0gIGd1aW50IGxlbjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgTlVMTCk7Ci0gIGxlbiA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlkeCA8IGxlbiwgTlVMTCk7Ci0KLSAgcmV0dXJuIEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpZHgpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfZ2V0X21lbW9yeToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqIEBpZHg6IGFuIGluZGV4Ci0gKgotICogR2V0IHRoZSBtZW1vcnkgYmxvY2sgYXQgaW5kZXggQGlkeCBpbiBAYnVmZmVyLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0TWVtb3J5IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgb2YgdGhlCi0gKiBtZW1vcnkgYmxvY2sgYXQgQGlkeC4gVXNlIGdzdF9tZW1vcnlfdW5yZWYgKCkgYWZ0ZXIgdXNhZ2UuCi0gKi8KLUdzdE1lbW9yeSAqCi1nc3RfYnVmZmVyX2dldF9tZW1vcnkgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3VpbnQgaWR4KQotewotICByZXR1cm4gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5X3JhbmdlIChidWZmZXIsIGlkeCwgMSk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9nZXRfYWxsX21lbW9yeToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqCi0gKiBHZXQgYWxsIHRoZSBtZW1vcnkgYmxvY2sgaW4gQGJ1ZmZlci4gVGhlIG1lbW9yeSBibG9ja3Mgd2lsbCBiZSBtZXJnZWQKLSAqIGludG8gb25lIGxhcmdlICNHc3RNZW1vcnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RNZW1vcnkgdGhhdCBjb250YWlucyB0aGUgbWVyZ2VkIG1lbW9yeS4KLSAqIFVzZSBnc3RfbWVtb3J5X3VucmVmICgpIGFmdGVyIHVzYWdlLgotICovCi1Hc3RNZW1vcnkgKgotZ3N0X2J1ZmZlcl9nZXRfYWxsX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyKQotewotICByZXR1cm4gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5X3JhbmdlIChidWZmZXIsIDAsIC0xKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2dldF9tZW1vcnlfcmFuZ2U6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKiBAaWR4OiBhbiBpbmRleAotICogQGxlbmd0aDogYSBsZW5ndGgKLSAqCi0gKiBHZXQgQGxlbmd0aCBtZW1vcnkgYmxvY2tzIGluIEBidWZmZXIgc3RhcnRpbmcgYXQgQGlkeC4gVGhlIG1lbW9yeSBibG9ja3Mgd2lsbAotICogYmUgbWVyZ2VkIGludG8gb25lIGxhcmdlICNHc3RNZW1vcnkuCi0gKgotICogSWYgQGxlbmd0aCBpcyAtMSwgYWxsIG1lbW9yeSBzdGFydGluZyBmcm9tIEBpZHggaXMgbWVyZ2VkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0TWVtb3J5IHRoYXQgY29udGFpbnMgdGhlIG1lcmdlZCBkYXRhIG9mIEBsZW5ndGgKLSAqICAgIGJsb2NrcyBzdGFydGluZyBhdCBAaWR4LiBVc2UgZ3N0X21lbW9yeV91bnJlZiAoKSBhZnRlciB1c2FnZS4KLSAqLwotR3N0TWVtb3J5ICoKLWdzdF9idWZmZXJfZ2V0X21lbW9yeV9yYW5nZSAoR3N0QnVmZmVyICogYnVmZmVyLCBndWludCBpZHgsIGdpbnQgbGVuZ3RoKQotewotICBndWludCBsZW47Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9CVUZGRVIsICJpZHggJXUsIGxlbmd0aCAlZCIsIGlkeCwgbGVuZ3RoKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgTlVMTCk7Ci0gIGxlbiA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKChsZW4gPT0gMCAmJiBpZHggPT0gMCAmJiBsZW5ndGggPT0gLTEpIHx8Ci0gICAgICAobGVuZ3RoID09IC0xICYmIGlkeCA8IGxlbikgfHwgKGxlbmd0aCA+IDAgJiYgbGVuZ3RoICsgaWR4IDw9IGxlbiksIE5VTEwpOwotCi0gIGlmIChsZW5ndGggPT0gLTEpCi0gICAgbGVuZ3RoID0gbGVuIC0gaWR4OwotCi0gIHJldHVybiBfZ2V0X21lcmdlZF9tZW1vcnkgKGJ1ZmZlciwgaWR4LCBsZW5ndGgpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnk6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKiBAaWR4OiBhbiBpbmRleAotICogQG1lbTogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RNZW1vcnkKLSAqCi0gKiBSZXBsYWNlcyB0aGUgbWVtb3J5IGJsb2NrIGF0IGluZGV4IEBpZHggaW4gQGJ1ZmZlciB3aXRoIEBtZW0uCi0gKi8KLXZvaWQKLWdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnkgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3VpbnQgaWR4LCBHc3RNZW1vcnkgKiBtZW0pCi17Ci0gIGdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnlfcmFuZ2UgKGJ1ZmZlciwgaWR4LCAxLCBtZW0pOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcmVwbGFjZV9hbGxfbWVtb3J5OgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQG1lbTogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RNZW1vcnkKLSAqCi0gKiBSZXBsYWNlcyBhbGwgbWVtb3J5IGluIEBidWZmZXIgd2l0aCBAbWVtLgotICovCi12b2lkCi1nc3RfYnVmZmVyX3JlcGxhY2VfYWxsX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RNZW1vcnkgKiBtZW0pCi17Ci0gIGdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnlfcmFuZ2UgKGJ1ZmZlciwgMCwgLTEsIG1lbSk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9yZXBsYWNlX21lbW9yeV9yYW5nZToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqIEBpZHg6IGFuIGluZGV4Ci0gKiBAbGVuZ3RoOiBhIGxlbmd0aCBzaG91bGQgbm90IGJlIDAKLSAqIEBtZW06ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0TWVtb3J5Ci0gKgotICogUmVwbGFjZXMgQGxlbmd0aCBtZW1vcnkgYmxvY2tzIGluIEBidWZmZXIgc3RhcnRpbmcgYXQgQGlkeCB3aXRoIEBtZW0uCi0gKgotICogSWYgQGxlbmd0aCBpcyAtMSwgYWxsIG1lbW9yeSBzdGFydGluZyBmcm9tIEBpZHggd2lsbCBiZSByZW1vdmVkIGFuZAotICogcmVwbGFjZWQgd2l0aCBAbWVtLgotICoKLSAqIEBidWZmZXIgc2hvdWxkIGJlIHdyaXRhYmxlLgotICovCi12b2lkCi1nc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5X3JhbmdlIChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgZ2ludCBsZW5ndGgsCi0gICAgR3N0TWVtb3J5ICogbWVtKQotewotICBndWludCBsZW47Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGJ1ZmZlcikpOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQlVGRkVSLCAiaWR4ICV1LCBsZW5ndGggJWQsICVwIiwgaWR4LCBsZW5ndGgsIG1lbSk7Ci0KLSAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOwotICBnX3JldHVybl9pZl9mYWlsICgobGVuID09IDAgJiYgaWR4ID09IDAgJiYgbGVuZ3RoID09IC0xKSB8fAotICAgICAgKGxlbmd0aCA9PSAtMSAmJiBpZHggPCBsZW4pIHx8IChsZW5ndGggPiAwICYmIGxlbmd0aCArIGlkeCA8PSBsZW4pKTsKLQotICBpZiAobGVuZ3RoID09IC0xKQotICAgIGxlbmd0aCA9IGxlbiAtIGlkeDsKLQotICBfcmVwbGFjZV9tZW1vcnkgKGJ1ZmZlciwgbGVuLCBpZHgsIGxlbmd0aCwgbWVtKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnk6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKiBAaWR4OiBhbiBpbmRleAotICoKLSAqIFJlbW92ZSB0aGUgbWVtb3J5IGJsb2NrIGluIEBiIGF0IGluZGV4IEBpLgotICovCi12b2lkCi1nc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnkgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3VpbnQgaWR4KQotewotICBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2UgKGJ1ZmZlciwgaWR4LCAxKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3JlbW92ZV9hbGxfbWVtb3J5OgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICoKLSAqIFJlbW92ZSBhbGwgdGhlIG1lbW9yeSBibG9ja3MgaW4gQGJ1ZmZlci4KLSAqLwotdm9pZAotZ3N0X2J1ZmZlcl9yZW1vdmVfYWxsX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyKQotewotICBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnlfcmFuZ2UgKGJ1ZmZlciwgMCwgLTEpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqIEBpZHg6IGFuIGluZGV4Ci0gKiBAbGVuZ3RoOiBhIGxlbmd0aAotICoKLSAqIFJlbW92ZSBAbGVuZ3RoIG1lbW9yeSBibG9ja3MgaW4gQGJ1ZmZlciBzdGFydGluZyBmcm9tIEBpZHguCi0gKgotICogQGxlbmd0aCBjYW4gYmUgLTEsIGluIHdoaWNoIGNhc2UgYWxsIG1lbW9yeSBzdGFydGluZyBmcm9tIEBpZHggaXMgcmVtb3ZlZC4KLSAqLwotdm9pZAotZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlIChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgZ2ludCBsZW5ndGgpCi17Ci0gIGd1aW50IGxlbjsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSk7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9CVUZGRVIsICJpZHggJXUsIGxlbmd0aCAlZCIsIGlkeCwgbGVuZ3RoKTsKLQotICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcik7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKChsZW4gPT0gMCAmJiBpZHggPT0gMCAmJiBsZW5ndGggPT0gLTEpIHx8Ci0gICAgICAobGVuZ3RoID09IC0xICYmIGlkeCA8IGxlbikgfHwgbGVuZ3RoICsgaWR4IDw9IGxlbik7Ci0KLSAgaWYgKGxlbmd0aCA9PSAtMSkKLSAgICBsZW5ndGggPSBsZW4gLSBpZHg7Ci0KLSAgX3JlcGxhY2VfbWVtb3J5IChidWZmZXIsIGxlbiwgaWR4LCBsZW5ndGgsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfZmluZF9tZW1vcnk6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKiBAb2Zmc2V0OiBhbiBvZmZzZXQKLSAqIEBzaXplOiBhIHNpemUKLSAqIEBpZHg6IChvdXQpOiBwb2ludGVyIHRvIGluZGV4Ci0gKiBAbGVuZ3RoOiAob3V0KTogcG9pbnRlciB0byBsZW5ndGgKLSAqIEBza2lwOiAob3V0KTogcG9pbnRlciB0byBza2lwCi0gKgotICogRmluZCB0aGUgbWVtb3J5IGJsb2NrcyB0aGF0IHNwYW4gQHNpemUgYnl0ZXMgc3RhcnRpbmcgZnJvbSBAb2Zmc2V0Ci0gKiBpbiBAYnVmZmVyLgotICoKLSAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zICVUUlVFLCBAaWR4IHdpbGwgY29udGFpbiB0aGUgaW5kZXggb2YgdGhlIGZpcnN0Ci0gKiBtZW1vcnkgYmxvY2sgd2hlcmUgdGhlIGJ5dGUgZm9yIEBvZmZzZXQgY2FuIGJlIGZvdW5kIGFuZCBAbGVuZ3RoIGNvbnRhaW5zIHRoZQotICogbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY29udGFpbmluZyB0aGUgQHNpemUgcmVtYWluaW5nIGJ5dGVzLiBAc2tpcCBjb250YWlucwotICogdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwIGluIHRoZSBtZW1vcnkgYmxvY2sgYXQgQGlkeCB0byBnZXQgdG8gdGhlIGJ5dGUKLSAqIGZvciBAb2Zmc2V0LgotICoKLSAqIEBzaXplIGNhbiBiZSAtMSB0byBnZXQgYWxsIHRoZSBtZW1vcnkgYmxvY2tzIGFmdGVyIEBpZHguCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiBAc2l6ZSBieXRlcyBzdGFydGluZyBmcm9tIEBvZmZzZXQgY291bGQgYmUgZm91bmQgaW4KLSAqIEBidWZmZXIgYW5kIEBpZHgsIEBsZW5ndGggYW5kIEBza2lwIHdpbGwgYmUgZmlsbGVkLgotICovCi1nYm9vbGVhbgotZ3N0X2J1ZmZlcl9maW5kX21lbW9yeSAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUsCi0gICAgZ3VpbnQgKiBpZHgsIGd1aW50ICogbGVuZ3RoLCBnc2l6ZSAqIHNraXApCi17Ci0gIGd1aW50IGksIGxlbiwgZm91bmQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlkeCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsZW5ndGggIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2tpcCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOwotCi0gIGZvdW5kID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgR3N0TWVtb3J5ICptZW07Ci0gICAgZ3NpemUgczsKLQotICAgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpKTsKLSAgICBzID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgTlVMTCwgTlVMTCk7Ci0KLSAgICBpZiAocyA8PSBvZmZzZXQpIHsKLSAgICAgIC8qIGJsb2NrIGJlZm9yZSBvZmZzZXQsIG9yIGVtcHR5IGJsb2NrLCBza2lwICovCi0gICAgICBvZmZzZXQgLT0gczsKLSAgICB9IGVsc2UgewotICAgICAgLyogYmxvY2sgYWZ0ZXIgb2Zmc2V0ICovCi0gICAgICBpZiAoZm91bmQgPT0gMCkgewotICAgICAgICAvKiBmaXJzdCBibG9jaywgcmVtZW1iZXIgaW5kZXggYW5kIG9mZnNldCAqLwotICAgICAgICAqaWR4ID0gaTsKLSAgICAgICAgKnNraXAgPSBvZmZzZXQ7Ci0gICAgICAgIGlmIChzaXplID09IC0xKSB7Ci0gICAgICAgICAgLyogcmV0dXJuIHJlbWFpbmluZyBibG9ja3MgKi8KLSAgICAgICAgICAqbGVuZ3RoID0gbGVuIC0gaTsKLSAgICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBzIC09IG9mZnNldDsKLSAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgIH0KLSAgICAgIC8qIGNvdW50IHRoZSBhbW91bnQgb2YgZm91bmQgYnl0ZXMgKi8KLSAgICAgIGZvdW5kICs9IHM7Ci0gICAgICBpZiAoZm91bmQgPj0gc2l6ZSkgewotICAgICAgICAvKiB3ZSBoYXZlIGVub3VnaCBieXRlcyAqLwotICAgICAgICAqbGVuZ3RoID0gaSAtICppZHggKyAxOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQGlkeDogYW4gaW5kZXgKLSAqIEBsZW5ndGg6IGEgbGVuZ3RoIHNob3VsZCBub3QgYmUgMAotICoKLSAqIENoZWNrIGlmIEBsZW5ndGggbWVtb3J5IGJsb2NrcyBpbiBAYnVmZmVyIHN0YXJ0aW5nIGZyb20gQGlkeCBhcmUgd3JpdGFibGUuCi0gKgotICogQGxlbmd0aCBjYW4gYmUgLTEgdG8gY2hlY2sgYWxsIHRoZSBtZW1vcnkgYmxvY2tzIGFmdGVyIEBpZHguCi0gKgotICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgaWYgQGJ1ZmZlciBpcyB3cml0YWJsZSwgdXNlCi0gKiBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkgdG8gY2hlY2sgdGhhdCBpZiBuZWVkZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG1lbW9yeSByYW5nZSBpcyB3cml0YWJsZQotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlIChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgZ2ludCBsZW5ndGgpCi17Ci0gIGd1aW50IGksIGxlbjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgRkFMU0UpOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQlVGRkVSLCAiaWR4ICV1LCBsZW5ndGggJWQiLCBpZHgsIGxlbmd0aCk7Ci0KLSAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGxlbiA9PSAwICYmIGlkeCA9PSAwICYmIGxlbmd0aCA9PSAtMSkgfHwKLSAgICAgIChsZW5ndGggPT0gLTEgJiYgaWR4IDwgbGVuKSB8fCAobGVuZ3RoID4gMCAmJiBsZW5ndGggKyBpZHggPD0gbGVuKSwKLSAgICAgIEZBTFNFKTsKLQotICBpZiAobGVuZ3RoID09IC0xKQotICAgIGxlbiAtPSBpZHg7Ci0gIGVsc2UKLSAgICBsZW4gPSBsZW5ndGg7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgaWYgKCFnc3RfbWVtb3J5X2lzX3dyaXRhYmxlIChHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgaSArIGlkeCkpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfaXNfYWxsX21lbW9yeV93cml0YWJsZToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqCi0gKiBDaGVjayBpZiBhbGwgbWVtb3J5IGJsb2NrcyBpbiBAYnVmZmVyIGFyZSB3cml0YWJsZS4KLSAqCi0gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBpZiBAYnVmZmVyIGlzIHdyaXRhYmxlLCB1c2UKLSAqIGdzdF9idWZmZXJfaXNfd3JpdGFibGUoKSB0byBjaGVjayB0aGF0IGlmIG5lZWRlZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBhbGwgbWVtb3J5IGJsb2NrcyBpbiBAYnVmZmVyIGFyZSB3cml0YWJsZQotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfaXNfYWxsX21lbW9yeV93cml0YWJsZSAoR3N0QnVmZmVyICogYnVmZmVyKQotewotICByZXR1cm4gZ3N0X2J1ZmZlcl9pc19tZW1vcnlfcmFuZ2Vfd3JpdGFibGUgKGJ1ZmZlciwgMCwgLTEpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfZ2V0X3NpemVzOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQG9mZnNldDogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gdGhlIG9mZnNldAotICogQG1heHNpemU6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvIHRoZSBtYXhzaXplCi0gKgotICogR2V0IHRoZSB0b3RhbCBzaXplIG9mIHRoZSBtZW1vcnkgYmxvY2tzIGluIEBiLgotICoKLSAqIFdoZW4gbm90ICVOVUxMLCBAb2Zmc2V0IHdpbGwgY29udGFpbiB0aGUgb2Zmc2V0IG9mIHRoZSBkYXRhIGluIHRoZQotICogZmlyc3QgbWVtb3J5IGJsb2NrIGluIEBidWZmZXIgYW5kIEBtYXhzaXplIHdpbGwgY29udGFpbiB0aGUgc3VtIG9mCi0gKiB0aGUgc2l6ZSBhbmQgQG9mZnNldCBhbmQgdGhlIGFtb3VudCBvZiBleHRyYSBwYWRkaW5nIG9uIHRoZSBsYXN0Ci0gKiBtZW1vcnkgYmxvY2suICBAb2Zmc2V0IGFuZCBAbWF4c2l6ZSBjYW4gYmUgdXNlZCB0byByZXNpemUgdGhlCi0gKiBidWZmZXIgbWVtb3J5IGJsb2NrcyB3aXRoIGdzdF9idWZmZXJfcmVzaXplKCkuCi0gKgotICogUmV0dXJuczogdG90YWwgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrcyBpbiBAYnVmZmVyLgotICovCi1nc2l6ZQotZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3NpemUgKiBvZmZzZXQsIGdzaXplICogbWF4c2l6ZSkKLXsKLSAgcmV0dXJuIGdzdF9idWZmZXJfZ2V0X3NpemVzX3JhbmdlIChidWZmZXIsIDAsIC0xLCBvZmZzZXQsIG1heHNpemUpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfZ2V0X3NpemU6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKgotICogR2V0IHRoZSB0b3RhbCBzaXplIG9mIHRoZSBtZW1vcnkgYmxvY2tzIGluIEBidWZmZXIuCi0gKgotICogUmV0dXJuczogdG90YWwgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrcyBpbiBAYnVmZmVyLgotICovCi1nc2l6ZQotZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoR3N0QnVmZmVyICogYnVmZmVyKQotewotICByZXR1cm4gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXNfcmFuZ2UgKGJ1ZmZlciwgMCwgLTEsIE5VTEwsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfZ2V0X3NpemVzX3JhbmdlOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQGlkeDogYW4gaW5kZXgKLSAqIEBsZW5ndGg6IGEgbGVuZ3RoCi0gKiBAb2Zmc2V0OiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgcG9pbnRlciB0byB0aGUgb2Zmc2V0Ci0gKiBAbWF4c2l6ZTogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gdGhlIG1heHNpemUKLSAqCi0gKiBHZXQgdGhlIHRvdGFsIHNpemUgb2YgQGxlbmd0aCBtZW1vcnkgYmxvY2tzIHN0YXRpbmcgZnJvbSBAaWR4IGluIEBidWZmZXIuCi0gKgotICogV2hlbiBub3QgJU5VTEwsIEBvZmZzZXQgd2lsbCBjb250YWluIHRoZSBvZmZzZXQgb2YgdGhlIGRhdGEgaW4gdGhlCi0gKiBtZW1vcnkgYmxvY2sgaW4gQGJ1ZmZlciBhdCBAaWR4IGFuZCBAbWF4c2l6ZSB3aWxsIGNvbnRhaW4gdGhlIHN1bSBvZiB0aGUgc2l6ZQotICogYW5kIEBvZmZzZXQgYW5kIHRoZSBhbW91bnQgb2YgZXh0cmEgcGFkZGluZyBvbiB0aGUgbWVtb3J5IGJsb2NrIGF0IEBpZHggKwotICogQGxlbmd0aCAtMS4KLSAqIEBvZmZzZXQgYW5kIEBtYXhzaXplIGNhbiBiZSB1c2VkIHRvIHJlc2l6ZSB0aGUgYnVmZmVyIG1lbW9yeSBibG9ja3Mgd2l0aAotICogZ3N0X2J1ZmZlcl9yZXNpemVfcmFuZ2UoKS4KLSAqCi0gKiBSZXR1cm5zOiB0b3RhbCBzaXplIG9mIEBsZW5ndGggbWVtb3J5IGJsb2NrcyBzdGFydGluZyBhdCBAaWR4IGluIEBidWZmZXIuCi0gKi8KLWdzaXplCi1nc3RfYnVmZmVyX2dldF9zaXplc19yYW5nZSAoR3N0QnVmZmVyICogYnVmZmVyLCBndWludCBpZHgsIGdpbnQgbGVuZ3RoLAotICAgIGdzaXplICogb2Zmc2V0LCBnc2l6ZSAqIG1heHNpemUpCi17Ci0gIGd1aW50IGxlbjsKLSAgZ3NpemUgc2l6ZTsKLSAgR3N0TWVtb3J5ICptZW07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIDApOwotICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgobGVuID09IDAgJiYgaWR4ID09IDAgJiYgbGVuZ3RoID09IC0xKSB8fAotICAgICAgKGxlbmd0aCA9PSAtMSAmJiBpZHggPCBsZW4pIHx8IChsZW5ndGggKyBpZHggPD0gbGVuKSwgMCk7Ci0KLSAgaWYgKGxlbmd0aCA9PSAtMSkKLSAgICBsZW5ndGggPSBsZW4gLSBpZHg7Ci0KLSAgaWYgKEdfTElLRUxZIChsZW5ndGggPT0gMSkpIHsKLSAgICAvKiBjb21tb24gY2FzZSAqLwotICAgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpZHgpOwotICAgIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCBvZmZzZXQsIG1heHNpemUpOwotICB9IGVsc2UgewotICAgIGd1aW50IGksIGVuZDsKLSAgICBnc2l6ZSBleHRyYSwgb2ZmczsKLQotICAgIGVuZCA9IGlkeCArIGxlbmd0aDsKLSAgICBzaXplID0gb2ZmcyA9IGV4dHJhID0gMDsKLSAgICBmb3IgKGkgPSBpZHg7IGkgPCBlbmQ7IGkrKykgewotICAgICAgZ3NpemUgcywgbywgbXM7Ci0KLSAgICAgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmZmVyLCBpKTsKLSAgICAgIHMgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmbywgJm1zKTsKLQotICAgICAgaWYgKHMpIHsKLSAgICAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgICAvKiBmaXJzdCBzaXplLCB0YWtlIGFjY3VtdWxhdGVkIGRhdGEgYmVmb3JlIGFzIHRoZSBvZmZzZXQgKi8KLSAgICAgICAgICBvZmZzID0gZXh0cmEgKyBvOwotICAgICAgICAvKiBhZGQgc2l6ZXMgKi8KLSAgICAgICAgc2l6ZSArPSBzOwotICAgICAgICAvKiBzYXZlIHRoZSBhbW91bnQgb2YgZGF0YSBhZnRlciB0aGlzIGJsb2NrICovCi0gICAgICAgIGV4dHJhID0gbXMgLSAobyArIHMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogZW1wdHkgYmxvY2ssIGFkZCBhcyBleHRyYSAqLwotICAgICAgICBleHRyYSArPSBtczsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG9mZnNldCkKLSAgICAgICpvZmZzZXQgPSBvZmZzOwotICAgIGlmIChtYXhzaXplKQotICAgICAgKm1heHNpemUgPSBvZmZzICsgc2l6ZSArIGV4dHJhOwotICB9Ci0gIHJldHVybiBzaXplOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcmVzaXplOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQG9mZnNldDogdGhlIG9mZnNldCBhZGp1c3RtZW50Ci0gKiBAc2l6ZTogdGhlIG5ldyBzaXplIG9yIC0xIHRvIGp1c3QgYWRqdXN0IHRoZSBvZmZzZXQKLSAqCi0gKiBTZXQgdGhlIG9mZnNldCBhbmQgdG90YWwgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrcyBpbiBAYnVmZmVyLgotICovCi12b2lkCi1nc3RfYnVmZmVyX3Jlc2l6ZSAoR3N0QnVmZmVyICogYnVmZmVyLCBnc3NpemUgb2Zmc2V0LCBnc3NpemUgc2l6ZSkKLXsKLSAgZ3N0X2J1ZmZlcl9yZXNpemVfcmFuZ2UgKGJ1ZmZlciwgMCwgLTEsIG9mZnNldCwgc2l6ZSk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9zZXRfc2l6ZToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqIEBzaXplOiB0aGUgbmV3IHNpemUKLSAqCi0gKiBTZXQgdGhlIHRvdGFsIHNpemUgb2YgdGhlIG1lbW9yeSBibG9ja3MgaW4gQGJ1ZmZlci4KLSAqLwotdm9pZAotZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAoR3N0QnVmZmVyICogYnVmZmVyLCBnc3NpemUgc2l6ZSkKLXsKLSAgZ3N0X2J1ZmZlcl9yZXNpemVfcmFuZ2UgKGJ1ZmZlciwgMCwgLTEsIDAsIHNpemUpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcmVzaXplX3JhbmdlOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQGlkeDogYW4gaW5kZXgKLSAqIEBsZW5ndGg6IGEgbGVuZ3RoCi0gKiBAb2Zmc2V0OiB0aGUgb2Zmc2V0IGFkanVzdG1lbnQKLSAqIEBzaXplOiB0aGUgbmV3IHNpemUgb3IgLTEgdG8ganVzdCBhZGp1c3QgdGhlIG9mZnNldAotICoKLSAqIFNldCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgQGxlbmd0aCBtZW1vcnkgYmxvY2tzIHN0YXJ0aW5nIGF0IEBpZHggaW4KLSAqIEBidWZmZXIKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiByZXNpemluZyBzdWNjZWVkZWQsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLWdib29sZWFuCi1nc3RfYnVmZmVyX3Jlc2l6ZV9yYW5nZSAoR3N0QnVmZmVyICogYnVmZmVyLCBndWludCBpZHgsIGdpbnQgbGVuZ3RoLAotICAgIGdzc2l6ZSBvZmZzZXQsIGdzc2l6ZSBzaXplKQotewotICBndWludCBpLCBsZW4sIGVuZDsKLSAgZ3NpemUgYnNpemUsIGJ1ZnNpemUsIGJ1Zm9mZnMsIGJ1Zm1heDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2l6ZSA+PSAtMSwgRkFMU0UpOwotCi0gIGxlbiA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKChsZW4gPT0gMCAmJiBpZHggPT0gMCAmJiBsZW5ndGggPT0gLTEpIHx8Ci0gICAgICAobGVuZ3RoID09IC0xICYmIGlkeCA8IGxlbikgfHwgKGxlbmd0aCArIGlkeCA8PSBsZW4pLCBGQUxTRSk7Ci0KLSAgaWYgKGxlbmd0aCA9PSAtMSkKLSAgICBsZW5ndGggPSBsZW4gLSBpZHg7Ci0KLSAgYnVmc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzX3JhbmdlIChidWZmZXIsIGlkeCwgbGVuZ3RoLCAmYnVmb2ZmcywgJmJ1Zm1heCk7Ci0KLSAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLCAidHJpbSAlcCAlIiBHX0dTU0laRV9GT1JNQVQgIi0lIiBHX0dTU0laRV9GT1JNQVQKLSAgICAgICIgc2l6ZTolIiBHX0dTSVpFX0ZPUk1BVCAiIG9mZnM6JSIgR19HU0laRV9GT1JNQVQgIiBtYXg6JSIKLSAgICAgIEdfR1NJWkVfRk9STUFULCBidWZmZXIsIG9mZnNldCwgc2l6ZSwgYnVmc2l6ZSwgYnVmb2ZmcywgYnVmbWF4KTsKLQotICAvKiB3ZSBjYW4ndCBnbyBiYWNrIGZ1cnRoZXIgdGhhbiB0aGUgY3VycmVudCBvZmZzZXQgb3IgcGFzdCB0aGUgZW5kIG9mIHRoZQotICAgKiBidWZmZXIgKi8KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKChvZmZzZXQgPCAwICYmIGJ1Zm9mZnMgPj0gLW9mZnNldCkgfHwgKG9mZnNldCA+PSAwCi0gICAgICAgICAgJiYgYnVmb2ZmcyArIG9mZnNldCA8PSBidWZtYXgpLCBGQUxTRSk7Ci0gIGlmIChzaXplID09IC0xKSB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZnNpemUgPj0gb2Zmc2V0LCBGQUxTRSk7Ci0gICAgc2l6ZSA9IGJ1ZnNpemUgLSBvZmZzZXQ7Ci0gIH0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1Zm1heCA+PSBidWZvZmZzICsgb2Zmc2V0ICsgc2l6ZSwgRkFMU0UpOwotCi0gIC8qIG5vIGNoYW5nZSAqLwotICBpZiAob2Zmc2V0ID09IDAgJiYgc2l6ZSA9PSBidWZzaXplKQotICAgIHJldHVybiBUUlVFOwotCi0gIGVuZCA9IGlkeCArIGxlbmd0aDsKLSAgLyogY29weSBhbmQgdHJpbSAqLwotICBmb3IgKGkgPSBpZHg7IGkgPCBlbmQ7IGkrKykgewotICAgIEdzdE1lbW9yeSAqbWVtOwotICAgIGdzaXplIGxlZnQsIG5vZmZzOwotCi0gICAgbWVtID0gR1NUX0JVRkZFUl9NRU1fUFRSIChidWZmZXIsIGkpOwotICAgIGJzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgTlVMTCwgTlVMTCk7Ci0KLSAgICBub2ZmcyA9IDA7Ci0gICAgLyogbGFzdCBidWZmZXIgYWx3YXlzIGdldHMgcmVzaXplZCB0byB0aGUgcmVtYWluaW5nIHNpemUgKi8KLSAgICBpZiAoaSArIDEgPT0gZW5kKQotICAgICAgbGVmdCA9IHNpemU7Ci0gICAgLyogc2hyaW5rIGJ1ZmZlcnMgYmVmb3JlIHRoZSBvZmZzZXQgKi8KLSAgICBlbHNlIGlmICgoZ3NzaXplKSBic2l6ZSA8PSBvZmZzZXQpIHsKLSAgICAgIGxlZnQgPSAwOwotICAgICAgbm9mZnMgPSBvZmZzZXQgLSBic2l6ZTsKLSAgICAgIG9mZnNldCA9IDA7Ci0gICAgfQotICAgIC8qIGNsaXAgb3RoZXIgYnVmZmVycyAqLwotICAgIGVsc2UKLSAgICAgIGxlZnQgPSBNSU4gKGJzaXplIC0gb2Zmc2V0LCBzaXplKTsKLQotICAgIGlmIChvZmZzZXQgIT0gMCB8fCBsZWZ0ICE9IGJzaXplKSB7Ci0gICAgICBpZiAoZ3N0X21lbW9yeV9pc193cml0YWJsZSAobWVtKSkgewotICAgICAgICBnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCBvZmZzZXQsIGxlZnQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR3N0TWVtb3J5ICpuZXdtZW0gPSBOVUxMOwotCi0gICAgICAgIGlmICghR1NUX01FTU9SWV9JU19OT19TSEFSRSAobWVtKSkKLSAgICAgICAgICBuZXdtZW0gPSBnc3RfbWVtb3J5X3NoYXJlIChtZW0sIG9mZnNldCwgbGVmdCk7Ci0KLSAgICAgICAgaWYgKCFuZXdtZW0pCi0gICAgICAgICAgbmV3bWVtID0gZ3N0X21lbW9yeV9jb3B5IChtZW0sIG9mZnNldCwgbGVmdCk7Ci0KLSAgICAgICAgaWYgKG5ld21lbSA9PSBOVUxMKQotICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICBnc3RfbWVtb3J5X2xvY2sgKG5ld21lbSwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpOwotICAgICAgICBHU1RfQlVGRkVSX01FTV9QVFIgKGJ1ZmZlciwgaSkgPSBuZXdtZW07Ci0gICAgICAgIGdzdF9tZW1vcnlfdW5sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKTsKLSAgICAgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLQotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBvZmZzZXQgPSBub2ZmczsKLSAgICBzaXplIC09IGxlZnQ7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX21hcDoKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqIEBpbmZvOiAob3V0KTogaW5mbyBhYm91dCB0aGUgbWFwcGluZwotICogQGZsYWdzOiBmbGFncyBmb3IgdGhlIG1hcHBpbmcKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIEBpbmZvIHdpdGggdGhlICNHc3RNYXBJbmZvIG9mIGFsbCBtZXJnZWQgbWVtb3J5Ci0gKiBibG9ja3MgaW4gQGJ1ZmZlci4KLSAqCi0gKiBAZmxhZ3MgZGVzY3JpYmUgdGhlIGRlc2lyZWQgYWNjZXNzIG9mIHRoZSBtZW1vcnkuIFdoZW4gQGZsYWdzIGlzCi0gKiAjR1NUX01BUF9XUklURSwgQGJ1ZmZlciBzaG91bGQgYmUgd3JpdGFibGUgKGFzIHJldHVybmVkIGZyb20KLSAqIGdzdF9idWZmZXJfaXNfd3JpdGFibGUoKSkuCi0gKgotICogV2hlbiBAYnVmZmVyIGlzIHdyaXRhYmxlIGJ1dCB0aGUgbWVtb3J5IGlzbid0LCBhIHdyaXRhYmxlIGNvcHkgd2lsbAotICogYXV0b21hdGljYWxseSBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC4gVGhlIHJlYWRvbmx5IGNvcHkgb2YgdGhlCi0gKiBidWZmZXIgbWVtb3J5IHdpbGwgdGhlbiBhbHNvIGJlIHJlcGxhY2VkIHdpdGggdGhpcyB3cml0YWJsZSBjb3B5LgotICoKLSAqIFRoZSBtZW1vcnkgaW4gQGluZm8gc2hvdWxkIGJlIHVubWFwcGVkIHdpdGggZ3N0X2J1ZmZlcl91bm1hcCgpIGFmdGVyCi0gKiB1c2FnZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgbWFwIHN1Y2NlZWRlZCBhbmQgQGluZm8gY29udGFpbnMgdmFsaWQgZGF0YS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfbWFwIChHc3RCdWZmZXIgKiBidWZmZXIsIEdzdE1hcEluZm8gKiBpbmZvLCBHc3RNYXBGbGFncyBmbGFncykKLXsKLSAgcmV0dXJuIGdzdF9idWZmZXJfbWFwX3JhbmdlIChidWZmZXIsIDAsIC0xLCBpbmZvLCBmbGFncyk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9tYXBfcmFuZ2U6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKiBAaWR4OiBhbiBpbmRleAotICogQGxlbmd0aDogYSBsZW5ndGgKLSAqIEBpbmZvOiAob3V0KTogaW5mbyBhYm91dCB0aGUgbWFwcGluZwotICogQGZsYWdzOiBmbGFncyBmb3IgdGhlIG1hcHBpbmcKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIEBpbmZvIHdpdGggdGhlICNHc3RNYXBJbmZvIG9mIEBsZW5ndGggbWVyZ2VkIG1lbW9yeSBibG9ja3MKLSAqIHN0YXJ0aW5nIGF0IEBpZHggaW4gQGJ1ZmZlci4gV2hlbiBAbGVuZ3RoIGlzIC0xLCBhbGwgbWVtb3J5IGJsb2NrcyBzdGFydGluZwotICogZnJvbSBAaWR4IGFyZSBtZXJnZWQgYW5kIG1hcHBlZC4KLSAqCi0gKiBAZmxhZ3MgZGVzY3JpYmUgdGhlIGRlc2lyZWQgYWNjZXNzIG9mIHRoZSBtZW1vcnkuIFdoZW4gQGZsYWdzIGlzCi0gKiAjR1NUX01BUF9XUklURSwgQGJ1ZmZlciBzaG91bGQgYmUgd3JpdGFibGUgKGFzIHJldHVybmVkIGZyb20KLSAqIGdzdF9idWZmZXJfaXNfd3JpdGFibGUoKSkuCi0gKgotICogV2hlbiBAYnVmZmVyIGlzIHdyaXRhYmxlIGJ1dCB0aGUgbWVtb3J5IGlzbid0LCBhIHdyaXRhYmxlIGNvcHkgd2lsbAotICogYXV0b21hdGljYWxseSBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC4gVGhlIHJlYWRvbmx5IGNvcHkgb2YgdGhlIGJ1ZmZlciBtZW1vcnkKLSAqIHdpbGwgdGhlbiBhbHNvIGJlIHJlcGxhY2VkIHdpdGggdGhpcyB3cml0YWJsZSBjb3B5LgotICoKLSAqIFRoZSBtZW1vcnkgaW4gQGluZm8gc2hvdWxkIGJlIHVubWFwcGVkIHdpdGggZ3N0X2J1ZmZlcl91bm1hcCgpIGFmdGVyIHVzYWdlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBtYXAgc3VjY2VlZGVkIGFuZCBAaW5mbyBjb250YWlucyB2YWxpZAotICogZGF0YS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfbWFwX3JhbmdlIChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGlkeCwgZ2ludCBsZW5ndGgsCi0gICAgR3N0TWFwSW5mbyAqIGluZm8sIEdzdE1hcEZsYWdzIGZsYWdzKQotewotICBHc3RNZW1vcnkgKm1lbSwgKm5tZW07Ci0gIGdib29sZWFuIHdyaXRlLCB3cml0YWJsZTsKLSAgZ3NpemUgbGVuOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvICE9IE5VTEwsIEZBTFNFKTsKLSAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGxlbiA9PSAwICYmIGlkeCA9PSAwICYmIGxlbmd0aCA9PSAtMSkgfHwKLSAgICAgIChsZW5ndGggPT0gLTEgJiYgaWR4IDwgbGVuKSB8fCAobGVuZ3RoID4gMAotICAgICAgICAgICYmIGxlbmd0aCArIGlkeCA8PSBsZW4pLCBGQUxTRSk7Ci0KLSAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLCAiYnVmZmVyICVwLCBpZHggJXUsIGxlbmd0aCAlZCwgZmxhZ3MgJTA0eCIsCi0gICAgICBidWZmZXIsIGlkeCwgbGVuZ3RoLCBmbGFncyk7Ci0KLSAgd3JpdGUgPSAoZmxhZ3MgJiBHU1RfTUFQX1dSSVRFKSAhPSAwOwotICB3cml0YWJsZSA9IGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGJ1ZmZlcik7Ci0KLSAgLyogY2hlY2sgaWYgd2UgY2FuIHdyaXRlIHdoZW4gYXNrZWQgZm9yIHdyaXRlIGFjY2VzcyAqLwotICBpZiAoR19VTkxJS0VMWSAod3JpdGUgJiYgIXdyaXRhYmxlKSkKLSAgICBnb3RvIG5vdF93cml0YWJsZTsKLQotICBpZiAobGVuZ3RoID09IC0xKQotICAgIGxlbmd0aCA9IGxlbiAtIGlkeDsKLQotICBtZW0gPSBfZ2V0X21lcmdlZF9tZW1vcnkgKGJ1ZmZlciwgaWR4LCBsZW5ndGgpOwotICBpZiAoR19VTkxJS0VMWSAobWVtID09IE5VTEwpKQotICAgIGdvdG8gbm9fbWVtb3J5OwotCi0gIC8qIG5vdyB0cnkgdG8gbWFwICovCi0gIG5tZW0gPSBnc3RfbWVtb3J5X21ha2VfbWFwcGVkIChtZW0sIGluZm8sIGZsYWdzKTsKLSAgaWYgKEdfVU5MSUtFTFkgKG5tZW0gPT0gTlVMTCkpCi0gICAgZ290byBjYW5ub3RfbWFwOwotCi0gIC8qIGlmIHdlIG1lcmdlZCBvciB3aGVuIHRoZSBtYXAgcmV0dXJuZWQgYSBkaWZmZXJlbnQgbWVtb3J5LCB3ZSB0cnkgdG8gcmVwbGFjZQotICAgKiB0aGUgbWVtb3J5IGluIHRoZSBidWZmZXIgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGxlbmd0aCA+IDEgfHwgbm1lbSAhPSBtZW0pKSB7Ci0gICAgLyogaWYgdGhlIGJ1ZmZlciBpcyB3cml0YWJsZSwgcmVwbGFjZSB0aGUgbWVtb3J5ICovCi0gICAgaWYgKHdyaXRhYmxlKSB7Ci0gICAgICBfcmVwbGFjZV9tZW1vcnkgKGJ1ZmZlciwgbGVuLCBpZHgsIGxlbmd0aCwgZ3N0X21lbW9yeV9yZWYgKG5tZW0pKTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKGxlbiA+IDEpIHsKLSAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QRVJGT1JNQU5DRSwKLSAgICAgICAgICAgICJ0ZW1wb3JhcnkgbWFwcGluZyBmb3IgbWVtb3J5ICVwIGluIGJ1ZmZlciAlcCIsIG5tZW0sIGJ1ZmZlcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SICovCi1ub3Rfd3JpdGFibGU6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJ1ZmZlciwgIndyaXRlIG1hcCByZXF1ZXN0ZWQgb24gbm9uLXdyaXRhYmxlIGJ1ZmZlciIpOwotICAgIGdfY3JpdGljYWwgKCJ3cml0ZSBtYXAgcmVxdWVzdGVkIG9uIG5vbi13cml0YWJsZSBidWZmZXIiKTsKLSAgICBtZW1zZXQgKGluZm8sIDAsIHNpemVvZiAoR3N0TWFwSW5mbykpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fbWVtb3J5OgotICB7Ci0gICAgLyogZW1wdHkgYnVmZmVyLCB3ZSBuZWVkIHRvIHJldHVybiBOVUxMICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYnVmZmVyLCAiY2FuJ3QgZ2V0IGJ1ZmZlciBtZW1vcnkiKTsKLSAgICBtZW1zZXQgKGluZm8sIDAsIHNpemVvZiAoR3N0TWFwSW5mbykpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci1jYW5ub3RfbWFwOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYnVmZmVyLCAiY2Fubm90IG1hcCBtZW1vcnkiKTsKLSAgICBtZW1zZXQgKGluZm8sIDAsIHNpemVvZiAoR3N0TWFwSW5mbykpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfdW5tYXA6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIuCi0gKiBAaW5mbzogYSAjR3N0TWFwSW5mbwotICoKLSAqIFJlbGVhc2UgdGhlIG1lbW9yeSBwcmV2aW91c2x5IG1hcHBlZCB3aXRoIGdzdF9idWZmZXJfbWFwKCkuCi0gKi8KLXZvaWQKLWdzdF9idWZmZXJfdW5tYXAgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0TWFwSW5mbyAqIGluZm8pCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlcikpOwotICBnX3JldHVybl9pZl9mYWlsIChpbmZvICE9IE5VTEwpOwotCi0gIC8qIHdlIG5lZWQgdG8gY2hlY2sgZm9yIE5VTEwsIGl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgdHJpZWQgdG8gbWFwIGEgYnVmZmVyCi0gICAqIHdpdGhvdXQgbWVtb3J5IGFuZCB3ZSBzaG91bGQgYmUgYWJsZSB0byB1bm1hcCB0aGF0IGZpbmUgKi8KLSAgaWYgKEdfTElLRUxZIChpbmZvLT5tZW1vcnkpKSB7Ci0gICAgZ3N0X21lbW9yeV91bm1hcCAoaW5mby0+bWVtb3J5LCBpbmZvKTsKLSAgICBnc3RfbWVtb3J5X3VucmVmIChpbmZvLT5tZW1vcnkpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9maWxsOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQG9mZnNldDogdGhlIG9mZnNldCB0byBmaWxsCi0gKiBAc3JjOiAoYXJyYXkgbGVuZ3RoPXNpemUpIChlbGVtZW50LXR5cGUgZ3VpbnQ4KTogdGhlIHNvdXJjZSBhZGRyZXNzCi0gKiBAc2l6ZTogdGhlIHNpemUgdG8gZmlsbAotICoKLSAqIENvcHkgQHNpemUgYnl0ZXMgZnJvbSBAc3JjIHRvIEBidWZmZXIgYXQgQG9mZnNldC4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgYW1vdW50IG9mIGJ5dGVzIGNvcGllZC4gVGhpcyB2YWx1ZSBjYW4gYmUgbG93ZXIgdGhhbiBAc2l6ZQotICogICAgd2hlbiBAYnVmZmVyIGRpZCBub3QgY29udGFpbiBlbm91Z2ggZGF0YS4KLSAqLwotZ3NpemUKLWdzdF9idWZmZXJfZmlsbCAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGdjb25zdHBvaW50ZXIgc3JjLAotICAgIGdzaXplIHNpemUpCi17Ci0gIGdzaXplIGksIGxlbiwgbGVmdDsKLSAgY29uc3QgZ3VpbnQ4ICpwdHIgPSBzcmM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzcmMgIT0gTlVMTCB8fCBzaXplID09IDAsIDApOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0JVRkZFUiwKLSAgICAgICJidWZmZXIgJXAsIG9mZnNldCAlIiBHX0dTSVpFX0ZPUk1BVCAiLCBzaXplICUiIEdfR1NJWkVfRk9STUFULCBidWZmZXIsCi0gICAgICBvZmZzZXQsIHNpemUpOwotCi0gIGxlbiA9IEdTVF9CVUZGRVJfTUVNX0xFTiAoYnVmZmVyKTsKLSAgbGVmdCA9IHNpemU7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGxlbiAmJiBsZWZ0ID4gMDsgaSsrKSB7Ci0gICAgR3N0TWFwSW5mbyBpbmZvOwotICAgIGdzaXplIHRvY29weTsKLSAgICBHc3RNZW1vcnkgKm1lbTsKLQotICAgIG1lbSA9IF9nZXRfbWFwcGVkIChidWZmZXIsIGksICZpbmZvLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBpZiAoaW5mby5zaXplID4gb2Zmc2V0KSB7Ci0gICAgICAvKiB3ZSBoYXZlIGVub3VnaCAqLwotICAgICAgdG9jb3B5ID0gTUlOIChpbmZvLnNpemUgLSBvZmZzZXQsIGxlZnQpOwotICAgICAgbWVtY3B5ICgoZ3VpbnQ4ICopIGluZm8uZGF0YSArIG9mZnNldCwgcHRyLCB0b2NvcHkpOwotICAgICAgbGVmdCAtPSB0b2NvcHk7Ci0gICAgICBwdHIgKz0gdG9jb3B5OwotICAgICAgb2Zmc2V0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgLyogb2Zmc2V0IHBhc3QgYnVmZmVyLCBza2lwICovCi0gICAgICBvZmZzZXQgLT0gaW5mby5zaXplOwotICAgIH0KLSAgICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvKTsKLSAgfQotICByZXR1cm4gc2l6ZSAtIGxlZnQ7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9leHRyYWN0OgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQG9mZnNldDogdGhlIG9mZnNldCB0byBleHRyYWN0Ci0gKiBAZGVzdDogdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MKLSAqIEBzaXplOiB0aGUgc2l6ZSB0byBleHRyYWN0Ci0gKgotICogQ29weSBAc2l6ZSBieXRlcyBzdGFydGluZyBmcm9tIEBvZmZzZXQgaW4gQGJ1ZmZlciB0byBAZGVzdC4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgYW1vdW50IG9mIGJ5dGVzIGV4dHJhY3RlZC4gVGhpcyB2YWx1ZSBjYW4gYmUgbG93ZXIgdGhhbiBAc2l6ZQotICogICAgd2hlbiBAYnVmZmVyIGRpZCBub3QgY29udGFpbiBlbm91Z2ggZGF0YS4KLSAqLwotZ3NpemUKLWdzdF9idWZmZXJfZXh0cmFjdCAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGdwb2ludGVyIGRlc3QsIGdzaXplIHNpemUpCi17Ci0gIGdzaXplIGksIGxlbiwgbGVmdDsKLSAgZ3VpbnQ4ICpwdHIgPSBkZXN0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCwgMCk7Ci0KLSAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLAotICAgICAgImJ1ZmZlciAlcCwgb2Zmc2V0ICUiIEdfR1NJWkVfRk9STUFUICIsIHNpemUgJSIgR19HU0laRV9GT1JNQVQsIGJ1ZmZlciwKLSAgICAgIG9mZnNldCwgc2l6ZSk7Ci0KLSAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOwotICBsZWZ0ID0gc2l6ZTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGVuICYmIGxlZnQgPiAwOyBpKyspIHsKLSAgICBHc3RNYXBJbmZvIGluZm87Ci0gICAgZ3NpemUgdG9jb3B5OwotICAgIEdzdE1lbW9yeSAqbWVtOwotCi0gICAgbWVtID0gX2dldF9tYXBwZWQgKGJ1ZmZlciwgaSwgJmluZm8sIEdTVF9NQVBfUkVBRCk7Ci0gICAgaWYgKGluZm8uc2l6ZSA+IG9mZnNldCkgewotICAgICAgLyogd2UgaGF2ZSBlbm91Z2ggKi8KLSAgICAgIHRvY29weSA9IE1JTiAoaW5mby5zaXplIC0gb2Zmc2V0LCBsZWZ0KTsKLSAgICAgIG1lbWNweSAocHRyLCAoZ3VpbnQ4ICopIGluZm8uZGF0YSArIG9mZnNldCwgdG9jb3B5KTsKLSAgICAgIGxlZnQgLT0gdG9jb3B5OwotICAgICAgcHRyICs9IHRvY29weTsKLSAgICAgIG9mZnNldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG9mZnNldCBwYXN0IGJ1ZmZlciwgc2tpcCAqLwotICAgICAgb2Zmc2V0IC09IGluZm8uc2l6ZTsKLSAgICB9Ci0gICAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbyk7Ci0gIH0KLSAgcmV0dXJuIHNpemUgLSBsZWZ0OwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfbWVtY21wOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyLgotICogQG9mZnNldDogdGhlIG9mZnNldCBpbiBAYnVmZmVyCi0gKiBAbWVtOiAoYXJyYXkgbGVuZ3RoPXNpemUpIChlbGVtZW50LXR5cGUgZ3VpbnQ4KTogdGhlIG1lbW9yeSB0byBjb21wYXJlCi0gKiBAc2l6ZTogdGhlIHNpemUgdG8gY29tcGFyZQotICoKLSAqIENvbXBhcmUgQHNpemUgYnl0ZXMgc3RhcnRpbmcgZnJvbSBAb2Zmc2V0IGluIEBidWZmZXIgd2l0aCB0aGUgbWVtb3J5IGluIEBtZW0uCi0gKgotICogUmV0dXJuczogMCBpZiB0aGUgbWVtb3J5IGlzIGVxdWFsLgotICovCi1naW50Ci1nc3RfYnVmZmVyX21lbWNtcCAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGdjb25zdHBvaW50ZXIgbWVtLAotICAgIGdzaXplIHNpemUpCi17Ci0gIGdzaXplIGksIGxlbjsKLSAgY29uc3QgZ3VpbnQ4ICpwdHIgPSBtZW07Ci0gIGdpbnQgcmVzID0gMDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0gIT0gTlVMTCwgMCk7Ci0KLSAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLAotICAgICAgImJ1ZmZlciAlcCwgb2Zmc2V0ICUiIEdfR1NJWkVfRk9STUFUICIsIHNpemUgJSIgR19HU0laRV9GT1JNQVQsIGJ1ZmZlciwKLSAgICAgIG9mZnNldCwgc2l6ZSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPCBvZmZzZXQgKyBzaXplKSkKLSAgICByZXR1cm4gLTE7Ci0KLSAgbGVuID0gR1NUX0JVRkZFUl9NRU1fTEVOIChidWZmZXIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW4gJiYgc2l6ZSA+IDAgJiYgcmVzID09IDA7IGkrKykgewotICAgIEdzdE1hcEluZm8gaW5mbzsKLSAgICBnc2l6ZSB0b2NtcDsKLSAgICBHc3RNZW1vcnkgKm1lbTsKLQotICAgIG1lbSA9IF9nZXRfbWFwcGVkIChidWZmZXIsIGksICZpbmZvLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmIChpbmZvLnNpemUgPiBvZmZzZXQpIHsKLSAgICAgIC8qIHdlIGhhdmUgZW5vdWdoICovCi0gICAgICB0b2NtcCA9IE1JTiAoaW5mby5zaXplIC0gb2Zmc2V0LCBzaXplKTsKLSAgICAgIHJlcyA9IG1lbWNtcCAocHRyLCAoZ3VpbnQ4ICopIGluZm8uZGF0YSArIG9mZnNldCwgdG9jbXApOwotICAgICAgc2l6ZSAtPSB0b2NtcDsKLSAgICAgIHB0ciArPSB0b2NtcDsKLSAgICAgIG9mZnNldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG9mZnNldCBwYXN0IGJ1ZmZlciwgc2tpcCAqLwotICAgICAgb2Zmc2V0IC09IGluZm8uc2l6ZTsKLSAgICB9Ci0gICAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbyk7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX21lbXNldDoKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlci4KLSAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgaW4gQGJ1ZmZlcgotICogQHZhbDogdGhlIHZhbHVlIHRvIHNldAotICogQHNpemU6IHRoZSBzaXplIHRvIHNldAotICoKLSAqIEZpbGwgQGJ1ZiB3aXRoIEBzaXplIGJ5dGVzIHdpdGggQHZhbCBzdGFydGluZyBmcm9tIEBvZmZzZXQuCi0gKgotICogUmV0dXJuczogVGhlIGFtb3VudCBvZiBieXRlcyBmaWxsZWQuIFRoaXMgdmFsdWUgY2FuIGJlIGxvd2VyIHRoYW4gQHNpemUKLSAqICAgIHdoZW4gQGJ1ZmZlciBkaWQgbm90IGNvbnRhaW4gZW5vdWdoIGRhdGEuCi0gKi8KLWdzaXplCi1nc3RfYnVmZmVyX21lbXNldCAoR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBvZmZzZXQsIGd1aW50OCB2YWwsIGdzaXplIHNpemUpCi17Ci0gIGdzaXplIGksIGxlbiwgbGVmdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpLCAwKTsKLQotICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9CVUZGRVIsCi0gICAgICAiYnVmZmVyICVwLCBvZmZzZXQgJSIgR19HU0laRV9GT1JNQVQgIiwgdmFsICUwMngsIHNpemUgJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICBidWZmZXIsIG9mZnNldCwgdmFsLCBzaXplKTsKLQotICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZmZlcik7Ci0gIGxlZnQgPSBzaXplOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW4gJiYgbGVmdCA+IDA7IGkrKykgewotICAgIEdzdE1hcEluZm8gaW5mbzsKLSAgICBnc2l6ZSB0b3NldDsKLSAgICBHc3RNZW1vcnkgKm1lbTsKLQotICAgIG1lbSA9IF9nZXRfbWFwcGVkIChidWZmZXIsIGksICZpbmZvLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBpZiAoaW5mby5zaXplID4gb2Zmc2V0KSB7Ci0gICAgICAvKiB3ZSBoYXZlIGVub3VnaCAqLwotICAgICAgdG9zZXQgPSBNSU4gKGluZm8uc2l6ZSAtIG9mZnNldCwgbGVmdCk7Ci0gICAgICBtZW1zZXQgKChndWludDggKikgaW5mby5kYXRhICsgb2Zmc2V0LCB2YWwsIHRvc2V0KTsKLSAgICAgIGxlZnQgLT0gdG9zZXQ7Ci0gICAgICBvZmZzZXQgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBvZmZzZXQgcGFzdCBidWZmZXIsIHNraXAgKi8KLSAgICAgIG9mZnNldCAtPSBpbmZvLnNpemU7Ci0gICAgfQotICAgIGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgJmluZm8pOwotICB9Ci0gIHJldHVybiBzaXplIC0gbGVmdDsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uOgotICogQHBhcmVudDogYSAjR3N0QnVmZmVyLgotICogQGZsYWdzOiB0aGUgI0dzdEJ1ZmZlckNvcHlGbGFncwotICogQG9mZnNldDogdGhlIG9mZnNldCBpbnRvIHBhcmVudCAjR3N0QnVmZmVyIGF0IHdoaWNoIHRoZSBuZXcgc3ViLWJ1ZmZlcgotICogICAgICAgICAgYmVnaW5zLgotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBuZXcgI0dzdEJ1ZmZlciBzdWItYnVmZmVyLCBpbiBieXRlcy4gSWYgLTEsIGFsbAotICogICAgICAgIGRhdGEgaXMgY29waWVkLgotICoKLSAqIENyZWF0ZXMgYSBzdWItYnVmZmVyIGZyb20gQHBhcmVudCBhdCBAb2Zmc2V0IGFuZCBAc2l6ZS4KLSAqIFRoaXMgc3ViLWJ1ZmZlciB1c2VzIHRoZSBhY3R1YWwgbWVtb3J5IHNwYWNlIG9mIHRoZSBwYXJlbnQgYnVmZmVyLgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGNvcHkgdGhlIG9mZnNldCBhbmQgdGltZXN0YW1wIGZpZWxkcyB3aGVuIHRoZQotICogb2Zmc2V0IGlzIDAuIElmIG5vdCwgdGhleSB3aWxsIGJlIHNldCB0byAjR1NUX0NMT0NLX1RJTUVfTk9ORSBhbmQKLSAqICNHU1RfQlVGRkVSX09GRlNFVF9OT05FLgotICogSWYgQG9mZnNldCBlcXVhbHMgMCBhbmQgQHNpemUgZXF1YWxzIHRoZSB0b3RhbCBzaXplIG9mIEBidWZmZXIsIHRoZQotICogZHVyYXRpb24gYW5kIG9mZnNldCBlbmQgZmllbGRzIGFyZSBhbHNvIGNvcGllZC4gSWYgbm90IHRoZXkgd2lsbCBiZSBzZXQKLSAqIHRvICNHU1RfQ0xPQ0tfVElNRV9OT05FIGFuZCAjR1NUX0JVRkZFUl9PRkZTRVRfTk9ORS4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0QnVmZmVyIG9yICVOVUxMIGlmIHRoZSBhcmd1bWVudHMgd2VyZQotICogICAgIGludmFsaWQuCi0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChHc3RCdWZmZXIgKiBidWZmZXIsIEdzdEJ1ZmZlckNvcHlGbGFncyBmbGFncywKLSAgICBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCi17Ci0gIEdzdEJ1ZmZlciAqY29weTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmZmVyICE9IE5VTEwsIE5VTEwpOwotCi0gIC8qIGNyZWF0ZSB0aGUgbmV3IGJ1ZmZlciAqLwotICBjb3B5ID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQlVGRkVSLCAibmV3IHJlZ2lvbiBjb3B5ICVwIG9mICVwICUiIEdfR1NJWkVfRk9STUFUCi0gICAgICAiLSUiIEdfR1NJWkVfRk9STUFULCBjb3B5LCBidWZmZXIsIG9mZnNldCwgc2l6ZSk7Ci0KLSAgaWYgKCFnc3RfYnVmZmVyX2NvcHlfaW50byAoY29weSwgYnVmZmVyLCBmbGFncywgb2Zmc2V0LCBzaXplKSkKLSAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZjb3B5LCBOVUxMKTsKLQotICByZXR1cm4gY29weTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2FwcGVuZDoKLSAqIEBidWYxOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBmaXJzdCBzb3VyY2UgI0dzdEJ1ZmZlciB0byBhcHBlbmQuCi0gKiBAYnVmMjogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgc2Vjb25kIHNvdXJjZSAjR3N0QnVmZmVyIHRvIGFwcGVuZC4KLSAqCi0gKiBBcHBlbmQgYWxsIHRoZSBtZW1vcnkgZnJvbSBAYnVmMiB0byBAYnVmMS4gVGhlIHJlc3VsdCBidWZmZXIgd2lsbCBjb250YWluIGEKLSAqIGNvbmNhdGVuYXRpb24gb2YgdGhlIG1lbW9yeSBvZiBAYnVmMSBhbmQgQGJ1ZjIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RCdWZmZXIgdGhhdCBjb250YWlucyB0aGUgbWVtb3J5Ci0gKiAgICAgb2YgdGhlIHR3byBzb3VyY2UgYnVmZmVycy4KLSAqLwotR3N0QnVmZmVyICoKLWdzdF9idWZmZXJfYXBwZW5kIChHc3RCdWZmZXIgKiBidWYxLCBHc3RCdWZmZXIgKiBidWYyKQotewotICByZXR1cm4gZ3N0X2J1ZmZlcl9hcHBlbmRfcmVnaW9uIChidWYxLCBidWYyLCAwLCAtMSk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9hcHBlbmRfcmVnaW9uOgotICogQGJ1ZjE6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGZpcnN0IHNvdXJjZSAjR3N0QnVmZmVyIHRvIGFwcGVuZC4KLSAqIEBidWYyOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBzZWNvbmQgc291cmNlICNHc3RCdWZmZXIgdG8gYXBwZW5kLgotICogQG9mZnNldDogdGhlIG9mZnNldCBpbiBAYnVmMgotICogQHNpemU6IHRoZSBzaXplIG9yIC0xIG9mIEBidWYyCi0gKgotICogQXBwZW5kIEBzaXplIGJ5dGVzIGF0IEBvZmZzZXQgZnJvbSBAYnVmMiB0byBAYnVmMS4gVGhlIHJlc3VsdCBidWZmZXIgd2lsbAotICogY29udGFpbiBhIGNvbmNhdGVuYXRpb24gb2YgdGhlIG1lbW9yeSBvZiBAYnVmMSBhbmQgdGhlIHJlcXVlc3RlZCByZWdpb24gb2YKLSAqIEBidWYyLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0QnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIG1lbW9yeQotICogICAgIG9mIHRoZSB0d28gc291cmNlIGJ1ZmZlcnMuCi0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfYnVmZmVyX2FwcGVuZF9yZWdpb24gKEdzdEJ1ZmZlciAqIGJ1ZjEsIEdzdEJ1ZmZlciAqIGJ1ZjIsIGdzc2l6ZSBvZmZzZXQsCi0gICAgZ3NzaXplIHNpemUpCi17Ci0gIGdzaXplIGksIGxlbjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmMSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmMiksIE5VTEwpOwotCi0gIGJ1ZjEgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1ZjEpOwotICBidWYyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWYyKTsKLQotICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmMiwgb2Zmc2V0LCBzaXplKTsKLQotICBsZW4gPSBHU1RfQlVGRkVSX01FTV9MRU4gKGJ1ZjIpOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBHc3RNZW1vcnkgKm1lbTsKLQotICAgIG1lbSA9IEdTVF9CVUZGRVJfTUVNX1BUUiAoYnVmMiwgaSk7Ci0gICAgR1NUX0JVRkZFUl9NRU1fUFRSIChidWYyLCBpKSA9IE5VTEw7Ci0gICAgX21lbW9yeV9hZGQgKGJ1ZjEsIC0xLCBtZW0pOwotICB9Ci0KLSAgR1NUX0JVRkZFUl9NRU1fTEVOIChidWYyKSA9IDA7Ci0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZjIsIEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMik7Ci0KLSAgcmV0dXJuIGJ1ZjE7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9nZXRfbWV0YToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgotICogQGFwaTogdGhlICNHVHlwZSBvZiBhbiBBUEkKLSAqCi0gKiBHZXQgdGhlIG1ldGFkYXRhIGZvciBAYXBpIG9uIGJ1ZmZlci4gV2hlbiB0aGVyZSBpcyBubyBzdWNoIG1ldGFkYXRhLCAlTlVMTCBpcwotICogcmV0dXJuZWQuIElmIG11bHRpcGxlIG1ldGFkYXRhIHdpdGggdGhlIGdpdmVuIEBhcGkgYXJlIGF0dGFjaGVkIHRvIHRoaXMKLSAqIGJ1ZmZlciBvbmx5IHRoZSBmaXJzdCBvbmUgaXMgcmV0dXJuZWQuICBUbyBoYW5kbGUgbXVsdGlwbGUgbWV0YWRhdGEgd2l0aCBhCi0gKiBnaXZlbiBBUEkgdXNlIGdzdF9idWZmZXJfaXRlcmF0ZV9tZXRhKCkgb3IgZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEoKSBpbnN0ZWFkCi0gKiBhbmQgY2hlY2sgdGhlIG1ldGEtPmluZm8uYXBpIG1lbWJlciBmb3IgdGhlIEFQSSB0eXBlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiB0aGUgbWV0YWRhdGEgZm9yIEBhcGkgb24KLSAqIEBidWZmZXIuCi0gKi8KLUdzdE1ldGEgKgotZ3N0X2J1ZmZlcl9nZXRfbWV0YSAoR3N0QnVmZmVyICogYnVmZmVyLCBHVHlwZSBhcGkpCi17Ci0gIEdzdE1ldGFJdGVtICppdGVtOwotICBHc3RNZXRhICpyZXN1bHQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChhcGkgIT0gMCwgTlVMTCk7Ci0KLSAgLyogZmluZCBHc3RNZXRhIG9mIHRoZSByZXF1ZXN0ZWQgQVBJICovCi0gIGZvciAoaXRlbSA9IEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKTsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpIHsKLSAgICBHc3RNZXRhICptZXRhID0gJml0ZW0tPm1ldGE7Ci0gICAgaWYgKG1ldGEtPmluZm8tPmFwaSA9PSBhcGkpIHsKLSAgICAgIHJlc3VsdCA9IG1ldGE7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2FkZF9tZXRhOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKiBAaW5mbzogYSAjR3N0TWV0YUluZm8KLSAqIEBwYXJhbXM6IHBhcmFtcyBmb3IgQGluZm8KLSAqCi0gKiBBZGQgbWV0YWRhdGEgZm9yIEBpbmZvIHRvIEBidWZmZXIgdXNpbmcgdGhlIHBhcmFtZXRlcnMgaW4gQHBhcmFtcy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBtZXRhZGF0YSBmb3IgdGhlIGFwaSBpbiBAaW5mbyBvbiBAYnVmZmVyLgotICovCi1Hc3RNZXRhICoKLWdzdF9idWZmZXJfYWRkX21ldGEgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgY29uc3QgR3N0TWV0YUluZm8gKiBpbmZvLAotICAgIGdwb2ludGVyIHBhcmFtcykKLXsKLSAgR3N0TWV0YUl0ZW0gKml0ZW07Ci0gIEdzdE1ldGEgKnJlc3VsdCA9IE5VTEw7Ci0gIGdzaXplIHNpemU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8gIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpLCBOVUxMKTsKLQotICAvKiBjcmVhdGUgYSBuZXcgc2xpY2UgKi8KLSAgc2l6ZSA9IElURU1fU0laRSAoaW5mbyk7Ci0gIC8qIFdlIHdhcm4gaW4gZ3N0X21ldGFfcmVnaXN0ZXIoKSBhYm91dCBtZXRhcyB3aXRob3V0Ci0gICAqIGluaXQgZnVuY3Rpb24gYnV0IGxldCdzIHBsYXkgc2FmZSBoZXJlIGFuZCBwcmV2ZW50Ci0gICAqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Ci0gICAqLwotICBpZiAoIWluZm8tPmluaXRfZnVuYykKLSAgICBpdGVtID0gZ19zbGljZV9hbGxvYzAgKHNpemUpOwotICBlbHNlCi0gICAgaXRlbSA9IGdfc2xpY2VfYWxsb2MgKHNpemUpOwotICByZXN1bHQgPSAmaXRlbS0+bWV0YTsKLSAgcmVzdWx0LT5pbmZvID0gaW5mbzsKLSAgcmVzdWx0LT5mbGFncyA9IEdTVF9NRVRBX0ZMQUdfTk9ORTsKLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9CVUZGRVIsCi0gICAgICAiYWxsb2MgbWV0YWRhdGEgJXAgKCVzKSBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULCByZXN1bHQsCi0gICAgICBnX3R5cGVfbmFtZSAoaW5mby0+dHlwZSksIGluZm8tPnNpemUpOwotCi0gIC8qIGNhbGwgdGhlIGluaXRfZnVuYyB3aGVuIG5lZWRlZCAqLwotICBpZiAoaW5mby0+aW5pdF9mdW5jKQotICAgIGlmICghaW5mby0+aW5pdF9mdW5jIChyZXN1bHQsIHBhcmFtcywgYnVmZmVyKSkKLSAgICAgIGdvdG8gaW5pdF9mYWlsZWQ7Ci0KLSAgLyogYW5kIGFkZCB0byB0aGUgbGlzdCBvZiBtZXRhZGF0YSAqLwotICBpdGVtLT5uZXh0ID0gR1NUX0JVRkZFUl9NRVRBIChidWZmZXIpOwotICBHU1RfQlVGRkVSX01FVEEgKGJ1ZmZlcikgPSBpdGVtOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLWluaXRfZmFpbGVkOgotICB7Ci0gICAgZ19zbGljZV9mcmVlMSAoc2l6ZSwgaXRlbSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKiBAbWV0YTogYSAjR3N0TWV0YQotICoKLSAqIFJlbW92ZSB0aGUgbWV0YWRhdGEgZm9yIEBtZXRhIG9uIEBidWZmZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG1ldGFkYXRhIGV4aXN0ZWQgYW5kIHdhcyByZW1vdmVkLCAlRkFMU0UgaWYgbm8gc3VjaAotICogbWV0YWRhdGEgd2FzIG9uIEBidWZmZXIuCi0gKi8KLWdib29sZWFuCi1nc3RfYnVmZmVyX3JlbW92ZV9tZXRhIChHc3RCdWZmZXIgKiBidWZmZXIsIEdzdE1ldGEgKiBtZXRhKQotewotICBHc3RNZXRhSXRlbSAqd2FsaywgKnByZXY7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZXRhICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGJ1ZmZlciksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCFHU1RfTUVUQV9GTEFHX0lTX1NFVCAobWV0YSwgR1NUX01FVEFfRkxBR19MT0NLRUQpLAotICAgICAgRkFMU0UpOwotCi0gIC8qIGZpbmQgdGhlIG1ldGFkYXRhIGFuZCBkZWxldGUgKi8KLSAgcHJldiA9IEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKTsKLSAgZm9yICh3YWxrID0gcHJldjsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICBHc3RNZXRhICptID0gJndhbGstPm1ldGE7Ci0gICAgaWYgKG0gPT0gbWV0YSkgewotICAgICAgY29uc3QgR3N0TWV0YUluZm8gKmluZm8gPSBtZXRhLT5pbmZvOwotCi0gICAgICAvKiByZW1vdmUgZnJvbSBsaXN0ICovCi0gICAgICBpZiAoR1NUX0JVRkZFUl9NRVRBIChidWZmZXIpID09IHdhbGspCi0gICAgICAgIEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKSA9IHdhbGstPm5leHQ7Ci0gICAgICBlbHNlCi0gICAgICAgIHByZXYtPm5leHQgPSB3YWxrLT5uZXh0OwotICAgICAgLyogY2FsbCBmcmVlX2Z1bmMgaWYgYW55ICovCi0gICAgICBpZiAoaW5mby0+ZnJlZV9mdW5jKQotICAgICAgICBpbmZvLT5mcmVlX2Z1bmMgKG0sIGJ1ZmZlcik7Ci0KLSAgICAgIC8qIGFuZCBmcmVlIHRoZSBzbGljZSAqLwotICAgICAgZ19zbGljZV9mcmVlMSAoSVRFTV9TSVpFIChpbmZvKSwgd2Fsayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgcHJldiA9IHdhbGs7Ci0gIH0KLSAgcmV0dXJuIHdhbGsgIT0gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgotICogQHN0YXRlOiBhbiBvcGFxdWUgc3RhdGUgcG9pbnRlcgotICoKLSAqIFJldHJpZXZlIHRoZSBuZXh0ICNHc3RNZXRhIGFmdGVyIEBjdXJyZW50LiBJZiBAc3RhdGUgcG9pbnRzCi0gKiB0byAlTlVMTCwgdGhlIGZpcnN0IG1ldGFkYXRhIGlzIHJldHVybmVkLgotICoKLSAqIEBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBhbiBvcGFxdWUgc3RhdGUgcG9pbnRlcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiBUaGUgbmV4dCAjR3N0TWV0YSBvciAlTlVMTAotICogd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcy4KLSAqLwotR3N0TWV0YSAqCi1nc3RfYnVmZmVyX2l0ZXJhdGVfbWV0YSAoR3N0QnVmZmVyICogYnVmZmVyLCBncG9pbnRlciAqIHN0YXRlKQotewotICBHc3RNZXRhSXRlbSAqKm1ldGE7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0YXRlICE9IE5VTEwsIE5VTEwpOwotCi0gIG1ldGEgPSAoR3N0TWV0YUl0ZW0gKiopIHN0YXRlOwotICBpZiAoKm1ldGEgPT0gTlVMTCkKLSAgICAvKiBzdGF0ZSBOVUxMLCBtb3ZlIHRvIGZpcnN0IGl0ZW0gKi8KLSAgICAqbWV0YSA9IEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKTsKLSAgZWxzZQotICAgIC8qIHN0YXRlICFOVUxMLCBtb3ZlIHRvIG5leHQgaXRlbSBpbiBsaXN0ICovCi0gICAgKm1ldGEgPSAoKm1ldGEpLT5uZXh0OwotCi0gIGlmICgqbWV0YSkKLSAgICByZXR1cm4gJigqbWV0YSktPm1ldGE7Ci0gIGVsc2UKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgotICogQGZ1bmM6IChzY29wZSBjYWxsKTogYSAjR3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jIHRvIGNhbGwKLSAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHBhc3NlZCB0byBAZnVuYwotICoKLSAqIENhbGwgQGZ1bmMgd2l0aCBAdXNlcl9kYXRhIGZvciBlYWNoIG1ldGEgaW4gQGJ1ZmZlci4KLSAqCi0gKiBAZnVuYyBjYW4gbW9kaWZ5IHRoZSBwYXNzZWQgbWV0YSBwb2ludGVyIG9yIGl0cyBjb250ZW50cy4gVGhlIHJldHVybiB2YWx1ZQotICogb2YgQGZ1bmMgZGVmaW5lIGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvciBpZiB0aGUgcmVtYWluaW5nIG1ldGFkYXRhIGl0ZW1zCi0gKiBpbiB0aGUgYnVmZmVyIHNob3VsZCBiZSBza2lwcGVkLgotICoKLSAqIFJldHVybnM6ICVGQUxTRSB3aGVuIEBmdW5jIHJldHVybmVkICVGQUxTRSBmb3Igb25lIG9mIHRoZSBtZXRhZGF0YS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfZm9yZWFjaF9tZXRhIChHc3RCdWZmZXIgKiBidWZmZXIsIEdzdEJ1ZmZlckZvcmVhY2hNZXRhRnVuYyBmdW5jLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0TWV0YUl0ZW0gKndhbGssICpwcmV2LCAqbmV4dDsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmZmVyICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZ1bmMgIT0gTlVMTCwgRkFMU0UpOwotCi0gIC8qIGZpbmQgdGhlIG1ldGFkYXRhIGFuZCBkZWxldGUgKi8KLSAgcHJldiA9IEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKTsKLSAgZm9yICh3YWxrID0gcHJldjsgd2Fsazsgd2FsayA9IG5leHQpIHsKLSAgICBHc3RNZXRhICptLCAqbmV3OwotCi0gICAgbSA9IG5ldyA9ICZ3YWxrLT5tZXRhOwotICAgIG5leHQgPSB3YWxrLT5uZXh0OwotCi0gICAgcmVzID0gZnVuYyAoYnVmZmVyLCAmbmV3LCB1c2VyX2RhdGEpOwotCi0gICAgaWYgKG5ldyA9PSBOVUxMKSB7Ci0gICAgICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9IG0tPmluZm87Ci0KLSAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQlVGRkVSLCAicmVtb3ZlIG1ldGFkYXRhICVwICglcykiLCBtLAotICAgICAgICAgIGdfdHlwZV9uYW1lIChpbmZvLT50eXBlKSk7Ci0KLSAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWZmZXIpLCBGQUxTRSk7Ci0gICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoIUdTVF9NRVRBX0ZMQUdfSVNfU0VUIChtLCBHU1RfTUVUQV9GTEFHX0xPQ0tFRCksCi0gICAgICAgICAgRkFMU0UpOwotCi0gICAgICAvKiByZW1vdmUgZnJvbSBsaXN0ICovCi0gICAgICBpZiAoR1NUX0JVRkZFUl9NRVRBIChidWZmZXIpID09IHdhbGspCi0gICAgICAgIEdTVF9CVUZGRVJfTUVUQSAoYnVmZmVyKSA9IG5leHQ7Ci0gICAgICBlbHNlCi0gICAgICAgIHByZXYtPm5leHQgPSBuZXh0OwotCi0gICAgICAvKiBjYWxsIGZyZWVfZnVuYyBpZiBhbnkgKi8KLSAgICAgIGlmIChpbmZvLT5mcmVlX2Z1bmMpCi0gICAgICAgIGluZm8tPmZyZWVfZnVuYyAobSwgYnVmZmVyKTsKLQotICAgICAgLyogYW5kIGZyZWUgdGhlIHNsaWNlICovCi0gICAgICBnX3NsaWNlX2ZyZWUxIChJVEVNX1NJWkUgKGluZm8pLCB3YWxrKTsKLSAgICB9Ci0gICAgaWYgKCFyZXMpCi0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfZXh0cmFjdF9kdXA6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKLSAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgdG8gZXh0cmFjdAotICogQHNpemU6IHRoZSBzaXplIHRvIGV4dHJhY3QKLSAqIEBkZXN0OiAoYXJyYXkgbGVuZ3RoPWRlc3Rfc2l6ZSkgKGVsZW1lbnQtdHlwZSBndWludDgpIChvdXQpOiBBIHBvaW50ZXIgd2hlcmUKLSAqICB0aGUgZGVzdGluYXRpb24gYXJyYXkgd2lsbCBiZSB3cml0dGVuLgotICogQGRlc3Rfc2l6ZTogKG91dCk6IEEgbG9jYXRpb24gd2hlcmUgdGhlIHNpemUgb2YgQGRlc3QgY2FuIGJlIHdyaXR0ZW4KLSAqCi0gKiBFeHRyYWN0cyBhIGNvcHkgb2YgYXQgbW9zdCBAc2l6ZSBieXRlcyB0aGUgZGF0YSBhdCBAb2Zmc2V0IGludG8KLSAqIG5ld2x5LWFsbG9jYXRlZCBtZW1vcnkuIEBkZXN0IG11c3QgYmUgZnJlZWQgdXNpbmcgZ19mcmVlKCkgd2hlbiBkb25lLgotICoKLSAqIFNpbmNlOiAxLjAuMTAKLSAqLwotCi12b2lkCi1nc3RfYnVmZmVyX2V4dHJhY3RfZHVwIChHc3RCdWZmZXIgKiBidWZmZXIsIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSwKLSAgICBncG9pbnRlciAqIGRlc3QsIGdzaXplICogZGVzdF9zaXplKQotewotICBnc2l6ZSByZWFsX3NpemU7Ci0KLSAgcmVhbF9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLQotICAqZGVzdCA9IGdfbWFsbG9jIChNSU4gKHJlYWxfc2l6ZSAtIG9mZnNldCwgc2l6ZSkpOwotCi0gICpkZXN0X3NpemUgPSBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZmZlciwgb2Zmc2V0LCAqZGVzdCwgc2l6ZSk7Ci19Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9wYXJlbnRfYnVmZmVyX21ldGFfZGVidWcpOwotCi0vKioKLSAqIGdzdF9idWZmZXJfYWRkX3BhcmVudF9idWZmZXJfbWV0YToKLSAqIEBidWZmZXI6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0QnVmZmVyCi0gKiBAcmVmOiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEJ1ZmZlciB0byByZWYKLSAqCi0gKiBBZGQgYSAjR3N0UGFyZW50QnVmZmVyTWV0YSB0byBAYnVmZmVyIHRoYXQgaG9sZHMgYSByZWZlcmVuY2Ugb24KLSAqIEByZWYgdW50aWwgdGhlIGJ1ZmZlciBpcyBmcmVlZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IFRoZSAjR3N0UGFyZW50QnVmZmVyTWV0YSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgYnVmZmVyCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RQYXJlbnRCdWZmZXJNZXRhICoKLWdzdF9idWZmZXJfYWRkX3BhcmVudF9idWZmZXJfbWV0YSAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RCdWZmZXIgKiByZWYpCi17Ci0gIEdzdFBhcmVudEJ1ZmZlck1ldGEgKm1ldGE7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKHJlZiksIE5VTEwpOwotCi0gIG1ldGEgPQotICAgICAgKEdzdFBhcmVudEJ1ZmZlck1ldGEgKikgZ3N0X2J1ZmZlcl9hZGRfbWV0YSAoYnVmZmVyLAotICAgICAgR1NUX1BBUkVOVF9CVUZGRVJfTUVUQV9JTkZPLCBOVUxMKTsKLQotICBpZiAoIW1ldGEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgbWV0YS0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYgKHJlZik7Ci0KLSAgcmV0dXJuIG1ldGE7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF9wYXJlbnRfYnVmZmVyX21ldGFfdHJhbnNmb3JtIChHc3RCdWZmZXIgKiBkZXN0LCBHc3RNZXRhICogbWV0YSwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIsIEdRdWFyayB0eXBlLCBncG9pbnRlciBkYXRhKQotewotICBHc3RQYXJlbnRCdWZmZXJNZXRhICpkbWV0YSwgKnNtZXRhOwotCi0gIHNtZXRhID0gKEdzdFBhcmVudEJ1ZmZlck1ldGEgKikgbWV0YTsKLQotICBpZiAoR1NUX01FVEFfVFJBTlNGT1JNX0lTX0NPUFkgKHR5cGUpKSB7Ci0gICAgLyogY29weSBvdmVyIHRoZSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBidWZmZXIuCi0gICAgICogVXN1YWxseSwgdGhpcyBtZXRhIG1lYW5zIHdlIG5lZWQgdG8ga2VlcCB0aGUgcGFyZW50IGJ1ZmZlcgotICAgICAqIGFsaXZlIGJlY2F1c2Ugb25lIG9mIHRoZSBjaGlsZCBtZW1vcmllcyBpcyBpbiB1c2UsIHdoaWNoCi0gICAgICogbWlnaHQgbm90IGJlIHRoZSBjYXNlIGlmIG1lbW9yeSBpcyBkZWVwIGNvcGllZCBvciBzdWItcmVnaW9uZWQsCi0gICAgICogYnV0IHdlIGNhbid0IHRlbGwsIHNvIGtlZXAgdGhlIG1ldGEgKi8KLSAgICBkbWV0YSA9IGdzdF9idWZmZXJfYWRkX3BhcmVudF9idWZmZXJfbWV0YSAoZGVzdCwgc21ldGEtPmJ1ZmZlcik7Ci0gICAgaWYgKCFkbWV0YSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEdTVF9DQVRfREVCVUcgKGdzdF9wYXJlbnRfYnVmZmVyX21ldGFfZGVidWcsCi0gICAgICAgICJjb3B5IGJ1ZmZlciByZWZlcmVuY2UgbWV0YWRhdGEiKTsKLSAgfSBlbHNlIHsKLSAgICAvKiByZXR1cm4gRkFMU0UsIGlmIHRyYW5zZm9ybSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZ3N0X3BhcmVudF9idWZmZXJfbWV0YV9mcmVlIChHc3RQYXJlbnRCdWZmZXJNZXRhICogcGFyZW50X21ldGEsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHU1RfQ0FUX0RFQlVHIChnc3RfcGFyZW50X2J1ZmZlcl9tZXRhX2RlYnVnLAotICAgICAgIkRyb3BwaW5nIHJlZmVyZW5jZSBvbiBidWZmZXIgJXAiLCBwYXJlbnRfbWV0YS0+YnVmZmVyKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAocGFyZW50X21ldGEtPmJ1ZmZlcik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF9wYXJlbnRfYnVmZmVyX21ldGFfaW5pdCAoR3N0UGFyZW50QnVmZmVyTWV0YSAqIHBhcmVudF9tZXRhLAotICAgIGdwb2ludGVyIHBhcmFtcywgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgX2luaXQ7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmX2luaXQpKSB7Ci0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9wYXJlbnRfYnVmZmVyX21ldGFfZGVidWcsICJwYXJlbnRidWZmZXJtZXRhIiwKLSAgICAgICAgMCwgInBhcmVudGJ1ZmZlcm1ldGEiKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJl9pbml0LCAxKTsKLSAgfQotCi0gIHBhcmVudF9tZXRhLT5idWZmZXIgPSBOVUxMOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HVHlwZQotZ3N0X3BhcmVudF9idWZmZXJfbWV0YV9hcGlfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBHVHlwZSB0eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICp0YWdzW10gPSB7IE5VTEwgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZ0eXBlKSkgewotICAgIEdUeXBlIF90eXBlID0gZ3N0X21ldGFfYXBpX3R5cGVfcmVnaXN0ZXIgKCJHc3RQYXJlbnRCdWZmZXJNZXRhQVBJIiwgdGFncyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZ0eXBlLCBfdHlwZSk7Ci0gIH0KLQotICByZXR1cm4gdHlwZTsKLX0KLQotLyoqCi0gKiBnc3RfcGFyZW50X2J1ZmZlcl9tZXRhX2dldF9pbmZvOgotICoKLSAqIEdldCB0aGUgZ2xvYmFsICNHc3RNZXRhSW5mbyBkZXNjcmliaW5nICB0aGUgI0dzdFBhcmVudEJ1ZmZlck1ldGEgbWV0YS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IFRoZSAjR3N0TWV0YUluZm8KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWNvbnN0IEdzdE1ldGFJbmZvICoKLWdzdF9wYXJlbnRfYnVmZmVyX21ldGFfZ2V0X2luZm8gKHZvaWQpCi17Ci0gIHN0YXRpYyBjb25zdCBHc3RNZXRhSW5mbyAqbWV0YV9pbmZvID0gTlVMTDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZtZXRhX2luZm8pKSB7Ci0gICAgY29uc3QgR3N0TWV0YUluZm8gKm1ldGEgPQotICAgICAgICBnc3RfbWV0YV9yZWdpc3RlciAoZ3N0X3BhcmVudF9idWZmZXJfbWV0YV9hcGlfZ2V0X3R5cGUgKCksCi0gICAgICAgICJHc3RQYXJlbnRCdWZmZXJNZXRhIiwKLSAgICAgICAgc2l6ZW9mIChHc3RQYXJlbnRCdWZmZXJNZXRhKSwKLSAgICAgICAgKEdzdE1ldGFJbml0RnVuY3Rpb24pIF9nc3RfcGFyZW50X2J1ZmZlcl9tZXRhX2luaXQsCi0gICAgICAgIChHc3RNZXRhRnJlZUZ1bmN0aW9uKSBfZ3N0X3BhcmVudF9idWZmZXJfbWV0YV9mcmVlLAotICAgICAgICBfZ3N0X3BhcmVudF9idWZmZXJfbWV0YV90cmFuc2Zvcm0pOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmbWV0YV9pbmZvLCBtZXRhKTsKLSAgfQotCi0gIHJldHVybiBtZXRhX2luZm87Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0YnVmZmVyLmggYi9nc3QvZ3N0YnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZGRiYjYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGJ1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjM5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3RidWZmZXIuaDogSGVhZGVyIGZvciBHc3RCdWZmZXIgb2JqZWN0Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0JVRkZFUl9IX18KLSNkZWZpbmUgX19HU1RfQlVGRkVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2xvY2suaD4KLSNpbmNsdWRlIDxnc3QvZ3N0YWxsb2NhdG9yLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X2J1ZmZlcl90eXBlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyIEdzdEJ1ZmZlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXJQb29sIEdzdEJ1ZmZlclBvb2w7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgIChfZ3N0X2J1ZmZlcl90eXBlKQotI2RlZmluZSBHU1RfSVNfQlVGRkVSKG9iaikgICAgICAgICAgICAgICAgICAgICAgKEdTVF9JU19NSU5JX09CSkVDVF9UWVBFKG9iaiwgR1NUX1RZUEVfQlVGRkVSKSkKLSNkZWZpbmUgR1NUX0JVRkZFUl9DQVNUKG9iaikgICAgICAgICAgICAgICAgICAgICgoR3N0QnVmZmVyICopKG9iaikpCi0jZGVmaW5lIEdTVF9CVUZGRVIob2JqKSAgICAgICAgICAgICAgICAgICAgICAgICAoR1NUX0JVRkZFUl9DQVNUKG9iaikpCi0KLS8qKgotICogR1NUX0JVRkZFUl9GTEFHUzoKLSAqIEBidWY6IGEgI0dzdEJ1ZmZlci4KLSAqCi0gKiBBIGZsYWdzIHdvcmQgY29udGFpbmluZyAjR3N0QnVmZmVyRmxhZ3MgZmxhZ3Mgc2V0IG9uIHRoaXMgYnVmZmVyLgotICovCi0jZGVmaW5lIEdTVF9CVUZGRVJfRkxBR1MoYnVmKSAgICAgICAgICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR1MoYnVmKQotLyoqCi0gKiBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUOgotICogQGJ1ZjogYSAjR3N0QnVmZmVyLgotICogQGZsYWc6IHRoZSAjR3N0QnVmZmVyRmxhZ3MgZmxhZyB0byBjaGVjay4KLSAqCi0gKiBHaXZlcyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgZmxhZyBvbiBhIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUKGJ1ZixmbGFnKSAgICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUIChidWYsIGZsYWcpCi0vKioKLSAqIEdTVF9CVUZGRVJfRkxBR19TRVQ6Ci0gKiBAYnVmOiBhICNHc3RCdWZmZXIuCi0gKiBAZmxhZzogdGhlICNHc3RCdWZmZXJGbGFncyBmbGFnIHRvIHNldC4KLSAqCi0gKiBTZXRzIGEgYnVmZmVyIGZsYWcgb24gYSBidWZmZXIuCi0gKi8KLSNkZWZpbmUgR1NUX0JVRkZFUl9GTEFHX1NFVChidWYsZmxhZykgICAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCAoYnVmLCBmbGFnKQotLyoqCi0gKiBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQ6Ci0gKiBAYnVmOiBhICNHc3RCdWZmZXIuCi0gKiBAZmxhZzogdGhlICNHc3RCdWZmZXJGbGFncyBmbGFnIHRvIGNsZWFyLgotICoKLSAqIENsZWFycyBhIGJ1ZmZlciBmbGFnLgotICovCi0jZGVmaW5lIEdTVF9CVUZGRVJfRkxBR19VTlNFVChidWYsZmxhZykgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCAoYnVmLCBmbGFnKQotCi0KLS8qKgotICogR1NUX0JVRkZFUl9QVFM6Ci0gKiBAYnVmOiBhICNHc3RCdWZmZXIuOgotICoKLSAqIFRoZSBwcmVzZW50YXRpb24gdGltZXN0YW1wIChwdHMpIGluIG5hbm9zZWNvbmRzIChhcyBhICNHc3RDbG9ja1RpbWUpCi0gKiBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyLiBUaGlzIGlzIHRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgbWVkaWEgc2hvdWxkIGJlCi0gKiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCi0gKiBWYWx1ZSB3aWxsIGJlICVHU1RfQ0xPQ0tfVElNRV9OT05FIGlmIHRoZSBwdHMgaXMgdW5rbm93bi4KLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX1BUUyhidWYpICAgICAgICAgICAgICAgICAgICAgKEdTVF9CVUZGRVJfQ0FTVChidWYpLT5wdHMpCi0vKioKLSAqIEdTVF9CVUZGRVJfRFRTOgotICogQGJ1ZjogYSAjR3N0QnVmZmVyLjoKLSAqCi0gKiBUaGUgZGVjb2RpbmcgdGltZXN0YW1wIChkdHMpIGluIG5hbm9zZWNvbmRzIChhcyBhICNHc3RDbG9ja1RpbWUpCi0gKiBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyLiBUaGlzIGlzIHRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgbWVkaWEgc2hvdWxkIGJlCi0gKiBkZWNvZGVkIG9yIHByb2Nlc3NlZCBvdGhlcndpc2UuCi0gKiBWYWx1ZSB3aWxsIGJlICVHU1RfQ0xPQ0tfVElNRV9OT05FIGlmIHRoZSBkdHMgaXMgdW5rbm93bi4KLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX0RUUyhidWYpICAgICAgICAgICAgICAgICAgICAgKEdTVF9CVUZGRVJfQ0FTVChidWYpLT5kdHMpCi0vKioKLSAqIEdTVF9CVUZGRVJfRFRTX09SX1BUUzoKLSAqIEBidWY6IGEgI0dzdEJ1ZmZlci46Ci0gKgotICogUmV0dXJucyB0aGUgYnVmZmVyIGRlY29kaW5nIHRpbWVzdGFtcCAoZHRzKSBpZiB2YWxpZCwgZWxzZSB0aGUgYnVmZmVyCi0gKiBwcmVzZW50YXRpb24gdGltZSAocHRzKQotICoKLSAqIFNpbmNlOiAxLjgKLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX0RUU19PUl9QVFMoYnVmKSAgICAgICAgICAgICAgKEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEKGJ1ZikgPyBHU1RfQlVGRkVSX0RUUyhidWYpIDogR1NUX0JVRkZFUl9QVFMgKGJ1ZikpCi0vKioKLSAqIEdTVF9CVUZGRVJfRFVSQVRJT046Ci0gKiBAYnVmOiBhICNHc3RCdWZmZXIuCi0gKgotICogVGhlIGR1cmF0aW9uIGluIG5hbm9zZWNvbmRzIChhcyBhICNHc3RDbG9ja1RpbWUpIG9mIHRoZSBkYXRhIGluIHRoZSBidWZmZXIuCi0gKiBWYWx1ZSB3aWxsIGJlICVHU1RfQ0xPQ0tfVElNRV9OT05FIGlmIHRoZSBkdXJhdGlvbiBpcyB1bmtub3duLgotICovCi0jZGVmaW5lIEdTVF9CVUZGRVJfRFVSQVRJT04oYnVmKSAgICAgICAgICAgICAgICAoR1NUX0JVRkZFUl9DQVNUKGJ1ZiktPmR1cmF0aW9uKQotLyoqCi0gKiBHU1RfQlVGRkVSX09GRlNFVDoKLSAqIEBidWY6IGEgI0dzdEJ1ZmZlci4KLSAqCi0gKiBUaGUgb2Zmc2V0IGluIHRoZSBzb3VyY2UgZmlsZSBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgYnVmZmVyLgotICovCi0jZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUKGJ1ZikgICAgICAgICAgICAgICAgICAoR1NUX0JVRkZFUl9DQVNUKGJ1ZiktPm9mZnNldCkKLS8qKgotICogR1NUX0JVRkZFUl9PRkZTRVRfRU5EOgotICogQGJ1ZjogYSAjR3N0QnVmZmVyLgotICoKLSAqIFRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBmaWxlIG9mIHRoZSBlbmQgb2YgdGhpcyBidWZmZXIuCi0gKi8KLSNkZWZpbmUgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKGJ1ZikgICAgICAgICAgICAgIChHU1RfQlVGRkVSX0NBU1QoYnVmKS0+b2Zmc2V0X2VuZCkKLQotLyoqCi0gKiBHU1RfQlVGRkVSX09GRlNFVF9OT05FOgotICoKLSAqIENvbnN0YW50IGZvciBuby1vZmZzZXQgcmV0dXJuIHJlc3VsdHMuCi0gKi8KLSNkZWZpbmUgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSAgKChndWludDY0KS0xKQotCi0vKioKLSAqIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQ6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKLSAqCi0gKiBUZXN0cyBpZiB0aGUgZHVyYXRpb24gaXMga25vd24uCi0gKi8KLSNkZWZpbmUgR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRChidWZmZXIpICAgIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSkpCi0vKioKLSAqIEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKgotICogVGVzdHMgaWYgdGhlIHB0cyBpcyBrbm93bi4KLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX1BUU19JU19WQUxJRChidWZmZXIpICAgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSkpCi0vKioKLSAqIEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKgotICogVGVzdHMgaWYgdGhlIGR0cyBpcyBrbm93bi4KLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX0RUU19JU19WQUxJRChidWZmZXIpICAgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSkpCi0vKioKLSAqIEdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKgotICogVGVzdHMgaWYgdGhlIHN0YXJ0IG9mZnNldCBpcyBrbm93bi4KLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX09GRlNFVF9JU19WQUxJRChidWZmZXIpICAgICAgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpICE9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpCi0vKioKLSAqIEdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRDoKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgotICoKLSAqIFRlc3RzIGlmIHRoZSBlbmQgb2Zmc2V0IGlzIGtub3duLgotICovCi0jZGVmaW5lIEdTVF9CVUZGRVJfT0ZGU0VUX0VORF9JU19WQUxJRChidWZmZXIpICAoR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpICE9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpCi0vKioKLSAqIEdTVF9CVUZGRVJfSVNfRElTQ09OVDoKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgotICoKLSAqIFRlc3RzIGlmIHRoZSBidWZmZXIgbWFya3MgYSBkaXNjb250aW51aXR5IGluIHRoZSBzdHJlYW0uCi0gKi8KLSNkZWZpbmUgR1NUX0JVRkZFUl9JU19ESVNDT05UKGJ1ZmZlcikgICAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpCi0KLS8qKgotICogR3N0QnVmZmVyRmxhZ3M6Ci0gKiBAR1NUX0JVRkZFUl9GTEFHX0xJVkU6ICAgICAgICB0aGUgYnVmZmVyIGlzIGxpdmUgZGF0YSBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZCBpbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFBBVVNFRCBzdGF0ZS4KLSAqIEBHU1RfQlVGRkVSX0ZMQUdfREVDT0RFX09OTFk6IHRoZSBidWZmZXIgY29udGFpbnMgZGF0YSB0aGF0IHNob3VsZCBiZSBkcm9wcGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGl0IHdpbGwgYmUgY2xpcHBlZCBhZ2FpbnN0IHRoZSBzZWdtZW50Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyaWVzIG9yIGJlY2F1c2UgaXQgZG9lcyBub3QgY29udGFpbiBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBzaG93biB0byB0aGUgdXNlci4KLSAqIEBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVDogICAgIHRoZSBidWZmZXIgbWFya3MgYSBkYXRhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHN0cmVhbS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdHlwaWNhbGx5IG9jY3VycyBhZnRlciBhIHNlZWsgb3IgYSBkcm9wcGVkIGJ1ZmZlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBhIGxpdmUgb3IgbmV0d29yayBzb3VyY2UuCi0gKiBAR1NUX0JVRkZFUl9GTEFHX1JFU1lOQzogICAgICB0aGUgYnVmZmVyIHRpbWVzdGFtcHMgbWlnaHQgaGF2ZSBhIGRpc2NvbnRpbnVpdHkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGlzIGJ1ZmZlciBpcyBhIGdvb2QgcG9pbnQgdG8gcmVzeW5jaHJvbml6ZS4KLSAqIEBHU1RfQlVGRkVSX0ZMQUdfQ09SUlVQVEVEOiAgIHRoZSBidWZmZXIgZGF0YSBpcyBjb3JydXB0ZWQuCi0gKiBAR1NUX0JVRkZFUl9GTEFHX01BUktFUjogICAgICB0aGUgYnVmZmVyIGNvbnRhaW5zIGEgbWVkaWEgc3BlY2lmaWMgbWFya2VyLiBmb3IKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvIHRoaXMgaXMgdHlwaWNhbGx5IHRoZSBlbmQgb2YgYSBmcmFtZSBib3VuZGFyeSwgZm9yIGF1ZGlvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHVzdWFsbHkgdGhlIHN0YXJ0IG9mIGEgdGFsa3NwdXJ0LgotICogQEdTVF9CVUZGRVJfRkxBR19IRUFERVI6ICAgICAgdGhlIGJ1ZmZlciBjb250YWlucyBoZWFkZXIgaW5mb3JtYXRpb24gdGhhdCBpcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkIHRvIGRlY29kZSB0aGUgZm9sbG93aW5nIGRhdGEuCi0gKiBAR1NUX0JVRkZFUl9GTEFHX0dBUDogICAgICAgICB0aGUgYnVmZmVyIGhhcyBiZWVuIGNyZWF0ZWQgdG8gZmlsbCBhIGdhcCBpbiB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSBhbmQgY29udGFpbnMgbWVkaWEgbmV1dHJhbCBkYXRhIChlbGVtZW50cyBjYW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCB0byBvcHRpbWl6ZWQgY29kZSBwYXRoIHRoYXQgaWdub3JlcyB0aGUgYnVmZmVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50KS4KLSAqIEBHU1RfQlVGRkVSX0ZMQUdfRFJPUFBBQkxFOiAgIHRoZSBidWZmZXIgY2FuIGJlIGRyb3BwZWQgd2l0aG91dCBicmVha2luZyB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgZm9yIGV4YW1wbGUgdG8gcmVkdWNlIGJhbmR3aWR0aC4KLSAqIEBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVDogIHRoaXMgdW5pdCBjYW5ub3QgYmUgZGVjb2RlZCBpbmRlcGVuZGVudGx5LgotICogQEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZOiAgdGhpcyBmbGFnIGlzIHNldCB3aGVuIG1lbW9yeSBvZiB0aGUgYnVmZmVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhZGRlZC9yZW1vdmVkCi0gKiBAR1NUX0JVRkZFUl9GTEFHX1NZTkNfQUZURVI6ICBFbGVtZW50cyB3aGljaCB3cml0ZSB0byBkaXNrIG9yIHBlcm1hbmVudAotICogCQkJCSBzdG9yYWdlIHNob3VsZCBlbnN1cmUgdGhlIGRhdGEgaXMgc3luY2VkIGFmdGVyCi0gKiAJCQkJIHdyaXRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYnVmZmVyLiAoU2luY2UgMS42KQotICogQEdTVF9CVUZGRVJfRkxBR19MQVNUOiAgICAgICAgYWRkaXRpb25hbCBtZWRpYSBzcGVjaWZpYyBmbGFncyBjYW4gYmUgYWRkZWQgc3RhcnRpbmcgZnJvbQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmbGFnLgotICoKLSAqIEEgc2V0IG9mIGJ1ZmZlciBmbGFncyB1c2VkIHRvIGRlc2NyaWJlIHByb3BlcnRpZXMgb2YgYSAjR3N0QnVmZmVyLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfQlVGRkVSX0ZMQUdfTElWRSAgICAgICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCAwKSwKLSAgR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMSksCi0gIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UICAgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDIpLAotICBHU1RfQlVGRkVSX0ZMQUdfUkVTWU5DICAgICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCAzKSwKLSAgR1NUX0JVRkZFUl9GTEFHX0NPUlJVUFRFRCAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgNCksCi0gIEdTVF9CVUZGRVJfRkxBR19NQVJLRVIgICAgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDUpLAotICBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSICAgICAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCA2KSwKLSAgR1NUX0JVRkZFUl9GTEFHX0dBUCAgICAgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgNyksCi0gIEdTVF9CVUZGRVJfRkxBR19EUk9QUEFCTEUgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDgpLAotICBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCA5KSwKLSAgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMTApLAotICBHU1RfQlVGRkVSX0ZMQUdfU1lOQ19BRlRFUiAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCAxMSksCi0KLSAgR1NUX0JVRkZFUl9GTEFHX0xBU1QgICAgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMTYpCi19IEdzdEJ1ZmZlckZsYWdzOwotCi0vKioKLSAqIEdzdEJ1ZmZlcjoKLSAqIEBtaW5pX29iamVjdDogdGhlIHBhcmVudCBzdHJ1Y3R1cmUKLSAqIEBwb29sOiBwb2ludGVyIHRvIHRoZSBwb29sIG93bmVyIG9mIHRoZSBidWZmZXIKLSAqIEBwdHM6IHByZXNlbnRhdGlvbiB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciwgY2FuIGJlICNHU1RfQ0xPQ0tfVElNRV9OT05FIHdoZW4gdGhlCi0gKiAgICAgcHRzIGlzIG5vdCBrbm93biBvciByZWxldmFudC4gVGhlIHB0cyBjb250YWlucyB0aGUgdGltZXN0YW1wIHdoZW4gdGhlCi0gKiAgICAgbWVkaWEgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KLSAqIEBkdHM6IGRlY29kaW5nIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyLCBjYW4gYmUgI0dTVF9DTE9DS19USU1FX05PTkUgd2hlbiB0aGUKLSAqICAgICBkdHMgaXMgbm90IGtub3duIG9yIHJlbGV2YW50LiBUaGUgZHRzIGNvbnRhaW5zIHRoZSB0aW1lc3RhbXAgd2hlbiB0aGUKLSAqICAgICBtZWRpYSBzaG91bGQgYmUgcHJvY2Vzc2VkLgotICogQGR1cmF0aW9uOiBkdXJhdGlvbiBpbiB0aW1lIG9mIHRoZSBidWZmZXIgZGF0YSwgY2FuIGJlICNHU1RfQ0xPQ0tfVElNRV9OT05FCi0gKiAgICAgd2hlbiB0aGUgZHVyYXRpb24gaXMgbm90IGtub3duIG9yIHJlbGV2YW50LgotICogQG9mZnNldDogYSBtZWRpYSBzcGVjaWZpYyBvZmZzZXQgZm9yIHRoZSBidWZmZXIgZGF0YS4KLSAqICAgICBGb3IgdmlkZW8gZnJhbWVzLCB0aGlzIGlzIHRoZSBmcmFtZSBudW1iZXIgb2YgdGhpcyBidWZmZXIuCi0gKiAgICAgRm9yIGF1ZGlvIHNhbXBsZXMsIHRoaXMgaXMgdGhlIG9mZnNldCBvZiB0aGUgZmlyc3Qgc2FtcGxlIGluIHRoaXMgYnVmZmVyLgotICogICAgIEZvciBmaWxlIGRhdGEgb3IgY29tcHJlc3NlZCBkYXRhIHRoaXMgaXMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBmaXJzdAotICogICAgICAgYnl0ZSBpbiB0aGlzIGJ1ZmZlci4KLSAqIEBvZmZzZXRfZW5kOiB0aGUgbGFzdCBvZmZzZXQgY29udGFpbmVkIGluIHRoaXMgYnVmZmVyLiBJdCBoYXMgdGhlIHNhbWUKLSAqICAgICBmb3JtYXQgYXMgQG9mZnNldC4KLSAqCi0gKiBUaGUgc3RydWN0dXJlIG9mIGEgI0dzdEJ1ZmZlci4gVXNlIHRoZSBhc3NvY2lhdGVkIG1hY3JvcyB0byBhY2Nlc3MgdGhlIHB1YmxpYwotICogdmFyaWFibGVzLgotICovCi1zdHJ1Y3QgX0dzdEJ1ZmZlciB7Ci0gIEdzdE1pbmlPYmplY3QgICAgICAgICAgbWluaV9vYmplY3Q7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBDT1cgKi8KLSAgR3N0QnVmZmVyUG9vbCAgICAgICAgICpwb29sOwotCi0gIC8qIHRpbWVzdGFtcCAqLwotICBHc3RDbG9ja1RpbWUgICAgICAgICAgIHB0czsKLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgICBkdHM7Ci0gIEdzdENsb2NrVGltZSAgICAgICAgICAgZHVyYXRpb247Ci0KLSAgLyogbWVkaWEgc3BlY2lmaWMgb2Zmc2V0ICovCi0gIGd1aW50NjQgICAgICAgICAgICAgICAgb2Zmc2V0OwotICBndWludDY0ICAgICAgICAgICAgICAgIG9mZnNldF9lbmQ7Ci19OwotCi1HVHlwZSAgICAgICBnc3RfYnVmZmVyX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOwotCi1ndWludCAgICAgICBnc3RfYnVmZmVyX2dldF9tYXhfbWVtb3J5ICAgICAgKHZvaWQpOwotCi0vKiBhbGxvY2F0aW9uICovCi1Hc3RCdWZmZXIgKiBnc3RfYnVmZmVyX25ldyAgICAgICAgICAgICAgICAgKHZvaWQpOwotR3N0QnVmZmVyICogZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgICAgICAgIChHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGdzaXplIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpOwotR3N0QnVmZmVyICogZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsICAgIChHc3RNZW1vcnlGbGFncyBmbGFncywgZ3BvaW50ZXIgZGF0YSwgZ3NpemUgbWF4c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplLCBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSk7Ci1Hc3RCdWZmZXIgKiBnc3RfYnVmZmVyX25ld193cmFwcGVkICAgICAgICAgKGdwb2ludGVyIGRhdGEsIGdzaXplIHNpemUpOwotCi0vKiBtZW1vcnkgYmxvY2tzICovCi1ndWludCAgICAgICBnc3RfYnVmZmVyX25fbWVtb3J5ICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlcik7Ci12b2lkICAgICAgICBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ2ludCBpZHgsIEdzdE1lbW9yeSAqbWVtKTsKLXZvaWQgICAgICAgIGdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnlfcmFuZ2UgKEdzdEJ1ZmZlciAqYnVmZmVyLCBndWludCBpZHgsIGdpbnQgbGVuZ3RoLCBHc3RNZW1vcnkgKm1lbSk7Ci1Hc3RNZW1vcnkgKiBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5ICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3VpbnQgaWR4KTsKLUdzdE1lbW9yeSAqIGdzdF9idWZmZXJfZ2V0X21lbW9yeV9yYW5nZSAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBndWludCBpZHgsIGdpbnQgbGVuZ3RoKTsKLXZvaWQgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21lbW9yeV9yYW5nZSAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBndWludCBpZHgsIGdpbnQgbGVuZ3RoKTsKLQotdm9pZCAgICAgICAgZ3N0X2J1ZmZlcl9wcmVwZW5kX21lbW9yeSAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIEdzdE1lbW9yeSAqbWVtKTsKLXZvaWQgICAgICAgIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBHc3RNZW1vcnkgKm1lbSk7Ci12b2lkICAgICAgICBnc3RfYnVmZmVyX3JlcGxhY2VfbWVtb3J5ICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3VpbnQgaWR4LCBHc3RNZW1vcnkgKm1lbSk7Ci12b2lkICAgICAgICBnc3RfYnVmZmVyX3JlcGxhY2VfYWxsX21lbW9yeSAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgR3N0TWVtb3J5ICptZW0pOwotR3N0TWVtb3J5ICogZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5ICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGd1aW50IGlkeCk7Ci1Hc3RNZW1vcnkgKiBnc3RfYnVmZmVyX2dldF9hbGxfbWVtb3J5ICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlcik7Ci12b2lkICAgICAgICBnc3RfYnVmZmVyX3JlbW92ZV9tZW1vcnkgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3VpbnQgaWR4KTsKLXZvaWQgICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX2FsbF9tZW1vcnkgICAgKEdzdEJ1ZmZlciAqYnVmZmVyKTsKLQotZ2Jvb2xlYW4gICAgZ3N0X2J1ZmZlcl9maW5kX21lbW9yeSAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAqaWR4LCBndWludCAqbGVuZ3RoLCBnc2l6ZSAqc2tpcCk7Ci0KLWdib29sZWFuICAgIGdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlICAoR3N0QnVmZmVyICpidWZmZXIsIGd1aW50IGlkeCwgZ2ludCBsZW5ndGgpOwotZ2Jvb2xlYW4gICAgZ3N0X2J1ZmZlcl9pc19hbGxfbWVtb3J5X3dyaXRhYmxlICAgIChHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0KLWdzaXplICAgICAgIGdzdF9idWZmZXJfZmlsbCAgICAgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzaXplIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBzcmMsIGdzaXplIHNpemUpOwotZ3NpemUgICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0ICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3NpemUgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkZXN0LCBnc2l6ZSBzaXplKTsKLWdpbnQgICAgICAgIGdzdF9idWZmZXJfbWVtY21wICAgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzaXplIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBtZW0sIGdzaXplIHNpemUpOwotZ3NpemUgICAgICAgZ3N0X2J1ZmZlcl9tZW1zZXQgICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3NpemUgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDggdmFsLCBnc2l6ZSBzaXplKTsKLQotZ3NpemUgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZXNfcmFuZ2UgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3VpbnQgaWR4LCBnaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKm9mZnNldCwgZ3NpemUgKm1heHNpemUpOwotZ2Jvb2xlYW4gICAgZ3N0X2J1ZmZlcl9yZXNpemVfcmFuZ2UgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3VpbnQgaWR4LCBnaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIG9mZnNldCwgZ3NzaXplIHNpemUpOwotCi1nc2l6ZSAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplcyAgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBnc2l6ZSAqb2Zmc2V0LCBnc2l6ZSAqbWF4c2l6ZSk7Ci1nc2l6ZSAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplICAgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyKTsKLXZvaWQgICAgICAgIGdzdF9idWZmZXJfcmVzaXplICAgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzc2l6ZSBvZmZzZXQsIGdzc2l6ZSBzaXplKTsKLXZvaWQgICAgICAgIGdzdF9idWZmZXJfc2V0X3NpemUgICAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzc2l6ZSBzaXplKTsKLQotZ2Jvb2xlYW4gICAgZ3N0X2J1ZmZlcl9tYXBfcmFuZ2UgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgZ3VpbnQgaWR4LCBnaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0TWFwSW5mbyAqaW5mbywgR3N0TWFwRmxhZ3MgZmxhZ3MpOwotZ2Jvb2xlYW4gICAgZ3N0X2J1ZmZlcl9tYXAgICAgICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgR3N0TWFwSW5mbyAqaW5mbywgR3N0TWFwRmxhZ3MgZmxhZ3MpOwotCi12b2lkICAgICAgICBnc3RfYnVmZmVyX3VubWFwICAgICAgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBHc3RNYXBJbmZvICppbmZvKTsKLXZvaWQgICAgICAgIGdzdF9idWZmZXJfZXh0cmFjdF9kdXAgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsIGdzaXplIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgc2l6ZSwgZ3BvaW50ZXIgKmRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpkZXN0X3NpemUpOwotCi1Hc3RCdWZmZXJGbGFncyBnc3RfYnVmZmVyX2dldF9mbGFncyAgICAgICAgKEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1nYm9vbGVhbiAgICAgICBnc3RfYnVmZmVyX2hhc19mbGFncyAgICAgICAgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0QnVmZmVyRmxhZ3MgZmxhZ3MpOwotZ2Jvb2xlYW4gICAgICAgZ3N0X2J1ZmZlcl9zZXRfZmxhZ3MgICAgICAgIChHc3RCdWZmZXIgKiBidWZmZXIsIEdzdEJ1ZmZlckZsYWdzIGZsYWdzKTsKLWdib29sZWFuICAgICAgIGdzdF9idWZmZXJfdW5zZXRfZmxhZ3MgICAgICAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RCdWZmZXJGbGFncyBmbGFncyk7Ci0KLQotCi0vKiByZWZjb3VudGluZyAqLwotLyoqCi0gKiBnc3RfYnVmZmVyX3JlZjoKLSAqIEBidWY6IGEgI0dzdEJ1ZmZlci4KLSAqCi0gKiBJbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBnaXZlbiBidWZmZXIgYnkgb25lLgotICoKLSAqIE5vdGUgdGhhdCB0aGUgcmVmY291bnQgYWZmZWN0cyB0aGUgd3JpdGFiaWxpdHkKLSAqIG9mIEBidWYgYW5kIGl0cyBtZXRhZGF0YSwgc2VlIGdzdF9idWZmZXJfaXNfd3JpdGFibGUoKS4KLSAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQga2VlcGluZyBhZGRpdGlvbmFsIHJlZmVyZW5jZXMgdG8KLSAqIEdzdEJ1ZmZlciBpbnN0YW5jZXMgY2FuIHBvdGVudGlhbGx5IGluY3JlYXNlIHRoZSBudW1iZXIKLSAqIG9mIG1lbWNweSBvcGVyYXRpb25zIGluIGEgcGlwZWxpbmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBAYnVmCi0gKi8KLXN0YXRpYyBpbmxpbmUgR3N0QnVmZmVyICoKLWdzdF9idWZmZXJfcmVmIChHc3RCdWZmZXIgKiBidWYpCi17Ci0gIHJldHVybiAoR3N0QnVmZmVyICopIGdzdF9taW5pX29iamVjdF9yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWYpKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3VucmVmOgotICogQGJ1ZjogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCdWZmZXIuCi0gKgotICogRGVjcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgYnVmZmVyLiBJZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUgYnVmZmVyCi0gKiB3aXRoIHRoZSBhc3NvY2lhdGVkIG1ldGFkYXRhIGFuZCBtZW1vcnkgd2lsbCBiZSBmcmVlZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfYnVmZmVyX3VucmVmIChHc3RCdWZmZXIgKiBidWYpCi17Ci0gIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZikpOwotfQotCi0vKiBjb3B5IGJ1ZmZlciAqLwotLyoqCi0gKiBnc3RfYnVmZmVyX2NvcHk6Ci0gKiBAYnVmOiBhICNHc3RCdWZmZXIuCi0gKgotICogQ3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiBUaGlzIHdpbGwgb25seSBjb3B5IHRoZSBidWZmZXIncwotICogZGF0YSB0byBhIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaWYgbmVlZGVkIChpZiB0aGUgdHlwZSBvZiBtZW1vcnkKLSAqIHJlcXVpcmVzIGl0KSwgb3RoZXJ3aXNlIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMganVzdCByZWZlcmVuY2VkLgotICogQ2hlY2sgZ3N0X2J1ZmZlcl9jb3B5X2RlZXAoKSBpZiB5b3Ugd2FudCB0byBmb3JjZSB0aGUgZGF0YQotICogdG8gYmUgY29waWVkIHRvIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBjb3B5IG9mIEBidWYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgR3N0QnVmZmVyICoKLWdzdF9idWZmZXJfY29weSAoY29uc3QgR3N0QnVmZmVyICogYnVmKQotewotICByZXR1cm4gR1NUX0JVRkZFUiAoZ3N0X21pbmlfb2JqZWN0X2NvcHkgKEdTVF9NSU5JX09CSkVDVF9DT05TVF9DQVNUIChidWYpKSk7Ci19Ci0KLUdzdEJ1ZmZlciAqIGdzdF9idWZmZXJfY29weV9kZWVwIChjb25zdCBHc3RCdWZmZXIgKiBidWYpOwotCi0vKioKLSAqIEdzdEJ1ZmZlckNvcHlGbGFnczoKLSAqIEBHU1RfQlVGRkVSX0NPUFlfTk9ORTogY29weSBub3RoaW5nCi0gKiBAR1NUX0JVRkZFUl9DT1BZX0ZMQUdTOiBmbGFnIGluZGljYXRpbmcgdGhhdCBidWZmZXIgZmxhZ3Mgc2hvdWxkIGJlIGNvcGllZAotICogQEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTOiBmbGFnIGluZGljYXRpbmcgdGhhdCBidWZmZXIgcHRzLCBkdHMsCi0gKiAgIGR1cmF0aW9uLCBvZmZzZXQgYW5kIG9mZnNldF9lbmQgc2hvdWxkIGJlIGNvcGllZAotICogQEdTVF9CVUZGRVJfQ09QWV9NRU1PUlk6IGZsYWcgaW5kaWNhdGluZyB0aGF0IGJ1ZmZlciBtZW1vcnkgc2hvdWxkIGJlIHJlZmZlZAotICogICBhbmQgYXBwZW5kZWQgdG8gYWxyZWFkeSBleGlzdGluZyBtZW1vcnkuIFVubGVzcyB0aGUgbWVtb3J5IGlzIG1hcmtlZCBhcwotICogICBOT19TSEFSRSwgbm8gYWN0dWFsIGNvcHkgb2YgdGhlIG1lbW9yeSBpcyBtYWRlIGJ1dCBpdCBpcyBzaW1wbHkgcmVmZmVkLgotICogICBBZGQgQEdTVF9CVUZGRVJfQ09QWV9ERUVQIHRvIGZvcmNlIGEgcmVhbCBjb3B5LgotICogQEdTVF9CVUZGRVJfQ09QWV9NRVJHRTogZmxhZyBpbmRpY2F0aW5nIHRoYXQgYnVmZmVyIG1lbW9yeSBzaG91bGQgYmUKLSAqICAgbWVyZ2VkCi0gKiBAR1NUX0JVRkZFUl9DT1BZX01FVEE6IGZsYWcgaW5kaWNhdGluZyB0aGF0IGJ1ZmZlciBtZXRhIHNob3VsZCBiZQotICogICBjb3BpZWQKLSAqIEBHU1RfQlVGRkVSX0NPUFlfREVFUDogZmxhZyBpbmRpY2F0aW5nIHRoYXQgbWVtb3J5IHNob3VsZCBhbHdheXMgYmUKLSAqICAgY29waWVkIGluc3RlYWQgb2YgcmVmZmVkIChTaW5jZSAxLjIpCi0gKgotICogQSBzZXQgb2YgZmxhZ3MgdGhhdCBjYW4gYmUgcHJvdmlkZWQgdG8gdGhlIGdzdF9idWZmZXJfY29weV9pbnRvKCkKLSAqIGZ1bmN0aW9uIHRvIHNwZWNpZnkgd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGNvcGllZC4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0JVRkZFUl9DT1BZX05PTkUgICAgICAgICAgID0gMCwKLSAgR1NUX0JVRkZFUl9DT1BZX0ZMQUdTICAgICAgICAgID0gKDEgPDwgMCksCi0gIEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTICAgICA9ICgxIDw8IDEpLAotICBHU1RfQlVGRkVSX0NPUFlfTUVUQSAgICAgICAgICAgPSAoMSA8PCAyKSwKLSAgR1NUX0JVRkZFUl9DT1BZX01FTU9SWSAgICAgICAgID0gKDEgPDwgMyksCi0gIEdTVF9CVUZGRVJfQ09QWV9NRVJHRSAgICAgICAgICA9ICgxIDw8IDQpLAotICBHU1RfQlVGRkVSX0NPUFlfREVFUCAgICAgICAgICAgPSAoMSA8PCA1KQotfSBHc3RCdWZmZXJDb3B5RmxhZ3M7Ci0KLS8qKgotICogR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBOgotICoKLSAqIENvbWJpbmF0aW9uIG9mIGFsbCBwb3NzaWJsZSBtZXRhZGF0YSBmaWVsZHMgdGhhdCBjYW4gYmUgY29waWVkIHdpdGgKLSAqIGdzdF9idWZmZXJfY29weV9pbnRvKCkuCi0gKi8KLSNkZWZpbmUgR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBICAgICAgIChHU1RfQlVGRkVSX0NPUFlfRkxBR1MgfCBHU1RfQlVGRkVSX0NPUFlfVElNRVNUQU1QUyB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfQ09QWV9NRVRBKQotCi0vKioKLSAqIEdTVF9CVUZGRVJfQ09QWV9BTEw6Ci0gKgotICogQ29tYmluYXRpb24gb2YgYWxsIHBvc3NpYmxlIGZpZWxkcyB0aGF0IGNhbiBiZSBjb3BpZWQgd2l0aAotICogZ3N0X2J1ZmZlcl9jb3B5X2ludG8oKS4KLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX0NPUFlfQUxMICAoKEdzdEJ1ZmZlckNvcHlGbGFncykoR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBIHwgR1NUX0JVRkZFUl9DT1BZX01FTU9SWSkpCi0KLS8qIGNvcGllcyBtZW1vcnkgb3IgbWV0YWRhdGEgaW50byBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyICovCi1nYm9vbGVhbiAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gICAgICAgICAgICAoR3N0QnVmZmVyICpkZXN0LCBHc3RCdWZmZXIgKnNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXJDb3B5RmxhZ3MgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKLQotLyoqCi0gKiBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlOgotICogQGJ1ZjogYSAjR3N0QnVmZmVyCi0gKgotICogVGVzdHMgaWYgeW91IGNhbiBzYWZlbHkgd3JpdGUgdG8gYSBidWZmZXIncyBtZXRhZGF0YSBvciBpdHMgbWVtb3J5IGFycmF5LgotICogSXQgaXMgb25seSBzYWZlIHRvIGNoYW5nZSBidWZmZXIgbWV0YWRhdGEgd2hlbiB0aGUgY3VycmVudCByZWZlcmVuY2UgaXMKLSAqIHdyaXRhYmxlLCBpLmUuIG5vYm9keSBjYW4gc2VlIHRoZSBtb2RpZmljYXRpb25zIHlvdSB3aWxsIG1ha2UuCi0gKi8KLSNkZWZpbmUgICAgICAgICBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKGJ1ZikgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZikpCi0vKioKLSAqIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZToKLSAqIEBidWY6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVmZmVyCi0gKgotICogUmV0dXJucyBhIHdyaXRhYmxlIGNvcHkgb2YgQGJ1Zi4gSWYgdGhlIHNvdXJjZSBidWZmZXIgaXMKLSAqIGFscmVhZHkgd3JpdGFibGUsIHRoaXMgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBzYW1lIGJ1ZmZlci4KLSAqCi0gKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBhIGJ1ZmZlciBjYW4gYmUgc2FmZWx5IG1vZGlmaWVkIGJlZm9yZQotICogbWFraW5nIGNoYW5nZXMgdG8gaXQsIGluY2x1ZGluZyBjaGFuZ2luZyB0aGUgbWV0YWRhdGEgc3VjaCBhcyBQVFMvRFRTLgotICoKLSAqIElmIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHNvdXJjZSBidWZmZXIgQGJ1ZiBpcyBleGFjdGx5IG9uZSwgdGhlIGNhbGxlcgotICogaXMgdGhlIHNvbGUgb3duZXIgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGJ1ZmZlciBvYmplY3QgdW5jaGFuZ2VkLgotICoKLSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QsIGEgY29weSB3aWxsIGJlIG1hZGUgdXNpbmcKLSAqIGdzdF9idWZmZXJfY29weSgpLiBUaGUgcGFzc2VkLWluIEBidWYgd2lsbCBiZSB1bnJlZmZlZCBpbiB0aGF0IGNhc2UsIGFuZCB0aGUKLSAqIGNhbGxlciB3aWxsIG5vdyBvd24gYSByZWZlcmVuY2UgdG8gdGhlIG5ldyByZXR1cm5lZCBidWZmZXIgb2JqZWN0LiBOb3RlCi0gKiB0aGF0IHRoaXMganVzdCBjb3BpZXMgdGhlIGJ1ZmZlciBzdHJ1Y3R1cmUgaXRzZWxmLCB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXMKLSAqIG5vdCBjb3BpZWQgaWYgaXQgY2FuIGJlIHNoYXJlZCBhbW9uZ3N0IG11bHRpcGxlIGJ1ZmZlcnMuCi0gKgotICogSW4gc2hvcnQsIHRoaXMgZnVuY3Rpb24gdW5yZWZzIHRoZSBidWYgaW4gdGhlIGFyZ3VtZW50IGFuZCByZWZzIHRoZSBidWZmZXIKLSAqIHRoYXQgaXQgcmV0dXJucy4gRG9uJ3QgYWNjZXNzIHRoZSBhcmd1bWVudCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdW5sZXNzCi0gKiB5b3UgaGF2ZSBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byBpdC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgd3JpdGFibGUgYnVmZmVyIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZQotICogICAgIHNhbWUgYXMgQGJ1ZgotICovCi0jZGVmaW5lICAgICAgICAgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKGJ1ZikgICBHU1RfQlVGRkVSX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmKSkpCi0KLS8qKgotICogZ3N0X2J1ZmZlcl9yZXBsYWNlOgotICogQG9idWY6IChpbm91dCkgKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvCi0gKiAgICAgYSAjR3N0QnVmZmVyIHRvIGJlIHJlcGxhY2VkLgotICogQG5idWY6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gYSAjR3N0QnVmZmVyIHRoYXQgd2lsbAotICogICAgIHJlcGxhY2UgdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBvYnVmLgotICoKLSAqIE1vZGlmaWVzIGEgcG9pbnRlciB0byBhICNHc3RCdWZmZXIgdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgI0dzdEJ1ZmZlci4gVGhlCi0gKiBtb2RpZmljYXRpb24gaXMgZG9uZSBhdG9taWNhbGx5IChzbyB0aGlzIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhyZWFkIHNhZmV0eQotICogaW4gc29tZSBjYXNlcyksIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5ICh0aGUgb2xkCi0gKiBidWZmZXIgaXMgdW5yZWZmZWQsIHRoZSBuZXcgaXMgcmVmZmVkKS4KLSAqCi0gKiBFaXRoZXIgQG5idWYgb3IgdGhlICNHc3RCdWZmZXIgcG9pbnRlZCB0byBieSBAb2J1ZiBtYXkgYmUgJU5VTEwuCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiBAb2J1ZiB3YXMgZGlmZmVyZW50IGZyb20gQG5idWYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9idWZmZXJfcmVwbGFjZSAoR3N0QnVmZmVyICoqb2J1ZiwgR3N0QnVmZmVyICpuYnVmKQotewotICByZXR1cm4gZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKChHc3RNaW5pT2JqZWN0ICoqKSBvYnVmLCAoR3N0TWluaU9iamVjdCAqKSBuYnVmKTsKLX0KLQotLyogY3JlYXRpbmcgYSByZWdpb24gKi8KLUdzdEJ1ZmZlciogICAgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uICAgICAgICAgIChHc3RCdWZmZXIgKnBhcmVudCwgR3N0QnVmZmVyQ29weUZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSk7Ci0KLS8qIGFwcGVuZCB0d28gYnVmZmVycyAqLwotR3N0QnVmZmVyKiAgICAgIGdzdF9idWZmZXJfYXBwZW5kX3JlZ2lvbiAgICAgICAgKEdzdEJ1ZmZlciAqYnVmMSwgR3N0QnVmZmVyICpidWYyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBvZmZzZXQsIGdzc2l6ZSBzaXplKTsKLUdzdEJ1ZmZlciogICAgICBnc3RfYnVmZmVyX2FwcGVuZCAgICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZjEsIEdzdEJ1ZmZlciAqYnVmMik7Ci0KLS8qIG1ldGFkYXRhICovCi0jaW5jbHVkZSA8Z3N0L2dzdG1ldGEuaD4KLQotLyoqCi0gKiBHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmM6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKLSAqIEBtZXRhOiAob3V0KSAobnVsbGFibGUpOiBhIHBvaW50ZXIgdG8gYSAjR3N0TWV0YQotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byBnc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YSgpCi0gKgotICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGZyb20gZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEoKS4gVGhlIEBtZXRhCi0gKiBmaWVsZCB3aWxsIHBvaW50IHRvIGEgdGhlIHJlZmVyZW5jZSBvZiB0aGUgbWV0YS4KLSAqCi0gKiBAYnVmZmVyIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZnJvbSB0aGlzIGNhbGxiYWNrLgotICoKLSAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zICVUUlVFLCB0aGUgbmV4dCBtZXRhIHdpbGwgYmUKLSAqIHJldHVybmVkLiBXaGVuICVGQUxTRSBpcyByZXR1cm5lZCwgZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEoKSB3aWxsIHJldHVybi4KLSAqCi0gKiBXaGVuIEBtZXRhIGlzIHNldCB0byAlTlVMTCwgdGhlIGl0ZW0gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGJ1ZmZlci4KLSAqCi0gKiBSZXR1cm5zOiAlRkFMU0Ugd2hlbiBnc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YSgpIHNob3VsZCBzdG9wCi0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHc3RCdWZmZXJGb3JlYWNoTWV0YUZ1bmMpICAgIChHc3RCdWZmZXIgKmJ1ZmZlciwgR3N0TWV0YSAqKm1ldGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotR3N0TWV0YSAqICAgICAgIGdzdF9idWZmZXJfZ2V0X21ldGEgICAgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBHVHlwZSBhcGkpOwotR3N0TWV0YSAqICAgICAgIGdzdF9idWZmZXJfYWRkX21ldGEgICAgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBwYXJhbXMpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9idWZmZXJfcmVtb3ZlX21ldGEgICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBHc3RNZXRhICptZXRhKTsKLQotR3N0TWV0YSAqICAgICAgIGdzdF9idWZmZXJfaXRlcmF0ZV9tZXRhICAgICAgICAgKEdzdEJ1ZmZlciAqYnVmZmVyLCBncG9pbnRlciAqc3RhdGUpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEgICAgICAgICAoR3N0QnVmZmVyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyRm9yZWFjaE1ldGFGdW5jIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBnc3RfdmFsdWVfc2V0X2J1ZmZlcjoKLSAqIEB2OiBhICNHVmFsdWUgdG8gcmVjZWl2ZSB0aGUgZGF0YQotICogQGI6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0QnVmZmVyIHRvIGFzc2lnbiB0byB0aGUgR3N0VmFsdWUKLSAqCi0gKiBTZXRzIEBiIGFzIHRoZSB2YWx1ZSBvZiBAdi4gIENhbGxlciByZXRhaW5zIHJlZmVyZW5jZSB0byBidWZmZXIuCi0gKi8KLSNkZWZpbmUgICAgICAgICBnc3RfdmFsdWVfc2V0X2J1ZmZlcih2LGIpICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKCh2KSwoYikpCi0vKioKLSAqIGdzdF92YWx1ZV90YWtlX2J1ZmZlcjoKLSAqIEB2OiBhICNHVmFsdWUgdG8gcmVjZWl2ZSB0aGUgZGF0YQotICogQGI6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVmZmVyIHRvIGFzc2lnbiB0byB0aGUgR3N0VmFsdWUKLSAqCi0gKiBTZXRzIEBiIGFzIHRoZSB2YWx1ZSBvZiBAdi4gIENhbGxlciBnaXZlcyBhd2F5IHJlZmVyZW5jZSB0byBidWZmZXIuCi0gKi8KLSNkZWZpbmUgICAgICAgICBnc3RfdmFsdWVfdGFrZV9idWZmZXIodixiKSAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCh2LChiKSkKLS8qKgotICogZ3N0X3ZhbHVlX2dldF9idWZmZXI6Ci0gKiBAdjogYSAjR1ZhbHVlIHRvIHF1ZXJ5Ci0gKgotICogUmVjZWl2ZXMgYSAjR3N0QnVmZmVyIGFzIHRoZSB2YWx1ZSBvZiBAdi4gRG9lcyBub3QgcmV0dXJuIGEgcmVmZXJlbmNlIHRvCi0gKiB0aGUgYnVmZmVyLCBzbyB0aGUgcG9pbnRlciBpcyBvbmx5IHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSBjYWxsZXIgb3ducwotICogYSByZWZlcmVuY2UgdG8gQHYuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBidWZmZXIKLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV9nZXRfYnVmZmVyKHYpICAgICAgICAgR1NUX0JVRkZFUl9DQVNUIChnX3ZhbHVlX2dldF9ib3hlZCh2KSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBhcmVudEJ1ZmZlck1ldGEgR3N0UGFyZW50QnVmZmVyTWV0YTsKLQotLyoqCi0gKiBHc3RQYXJlbnRCdWZmZXJNZXRhOgotICogQHBhcmVudDogdGhlIHBhcmVudCAjR3N0TWV0YSBzdHJ1Y3R1cmUKLSAqIEBidWZmZXI6IHRoZSAjR3N0QnVmZmVyIG9uIHdoaWNoIGEgcmVmZXJlbmNlIGlzIGJlaW5nIGhlbGQuCi0gKgotICogVGhlICNHc3RQYXJlbnRCdWZmZXJNZXRhIGlzIGEgI0dzdE1ldGEgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGEgI0dzdEJ1ZmZlcgotICogdG8gaG9sZCBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGJ1ZmZlciB0aGF0IGlzIG9ubHkgcmVsZWFzZWQgd2hlbiB0aGUgY2hpbGQKLSAqICNHc3RCdWZmZXIgaXMgcmVsZWFzZWQuCi0gKgotICogVHlwaWNhbGx5LCAjR3N0UGFyZW50QnVmZmVyTWV0YSBpcyB1c2VkIHdoZW4gdGhlIGNoaWxkIGJ1ZmZlciBpcyBkaXJlY3RseQotICogdXNpbmcgdGhlICNHc3RNZW1vcnkgb2YgdGhlIHBhcmVudCBidWZmZXIsIGFuZCB3YW50cyB0byBwcmV2ZW50IHRoZSBwYXJlbnQKLSAqIGJ1ZmZlciBmcm9tIGJlaW5nIHJldHVybmVkIHRvIGEgYnVmZmVyIHBvb2wgdW50aWwgdGhlICNHc3RNZW1vcnkgaXMgYXZhaWxhYmxlCi0gKiBmb3IgcmUtdXNlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotc3RydWN0IF9Hc3RQYXJlbnRCdWZmZXJNZXRhCi17Ci0gIEdzdE1ldGEgcGFyZW50OwotCi0gIC8qPCBwdWJsaWMgPiovCi0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotfTsKLQotR1R5cGUgZ3N0X3BhcmVudF9idWZmZXJfbWV0YV9hcGlfZ2V0X3R5cGUgKHZvaWQpOwotI2lmbmRlZiBHU1RfRElTQUJMRV9ERVBSRUNBVEVECi0jZGVmaW5lIEdTVF9UWVBFX1BBUkVOVF9CVUZGRVJfTUVUQV9BUElfVFlQRSBHU1RfUEFSRU5UX0JVRkZFUl9NRVRBX0FQSV9UWVBFCi0jZW5kaWYKLSNkZWZpbmUgR1NUX1BBUkVOVF9CVUZGRVJfTUVUQV9BUElfVFlQRSAoZ3N0X3BhcmVudF9idWZmZXJfbWV0YV9hcGlfZ2V0X3R5cGUoKSkKLQotLyoqCi0gKiBnc3RfYnVmZmVyX2dldF9wYXJlbnRfYnVmZmVyX21ldGE6Ci0gKiBAYjogYSAjR3N0QnVmZmVyCi0gKgotICogRmluZCBhbmQgcmV0dXJuIGEgI0dzdFBhcmVudEJ1ZmZlck1ldGEgaWYgb25lIGV4aXN0cyBvbiB0aGUKLSAqIGJ1ZmZlcgotICovCi0jZGVmaW5lIGdzdF9idWZmZXJfZ2V0X3BhcmVudF9idWZmZXJfbWV0YShiKSBcCi0gICgoR3N0UGFyZW50QnVmZmVyTWV0YSopZ3N0X2J1ZmZlcl9nZXRfbWV0YSgoYiksR1NUX1BBUkVOVF9CVUZGRVJfTUVUQV9BUElfVFlQRSkpCi0KLWNvbnN0IEdzdE1ldGFJbmZvICpnc3RfcGFyZW50X2J1ZmZlcl9tZXRhX2dldF9pbmZvICh2b2lkKTsKLSNkZWZpbmUgR1NUX1BBUkVOVF9CVUZGRVJfTUVUQV9JTkZPIChnc3RfcGFyZW50X2J1ZmZlcl9tZXRhX2dldF9pbmZvKCkpCi0KLS8qIGltcGxlbWVudGF0aW9uICovCi1Hc3RQYXJlbnRCdWZmZXJNZXRhICpnc3RfYnVmZmVyX2FkZF9wYXJlbnRfYnVmZmVyX21ldGEgKEdzdEJ1ZmZlciAqYnVmZmVyLAotICAgIEdzdEJ1ZmZlciAqcmVmKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RCdWZmZXIsIGdzdF9idWZmZXJfdW5yZWYpCi0jZW5kaWYKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RCdWZmZXJQb29sLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9CVUZGRVJfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0YnVmZmVybGlzdC5jIGIvZ3N0L2dzdGJ1ZmZlcmxpc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiY2Q2YS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0YnVmZmVybGlzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDA1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IEF4aXMgQ29tbXVuaWNhdGlvbnMgPGRldi1nc3RyZWFtZXIgYXQgYXhpcyBkb3QgY29tPgotICogQGF1dGhvciBKb25hcyBIb2xtYmVyZyA8am9uYXMgZG90IGhvbG1iZXJnIGF0IGF4aXMgZG90IGNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IGNvbT4KLSAqCi0gKiBnc3RidWZmZXJsaXN0LmM6IEJ1ZmZlciBsaXN0Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGJ1ZmZlcmxpc3QKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTGlzdHMgb2YgYnVmZmVycyBmb3IgZGF0YS1wYXNzaW5nCi0gKiBAc2VlX2Fsc286ICNHc3RQYWQsICNHc3RNaW5pT2JqZWN0Ci0gKgotICogQnVmZmVyIGxpc3RzIGFyZSBhbiBvYmplY3QgY29udGFpbmluZyBhIGxpc3Qgb2YgYnVmZmVycy4KLSAqCi0gKiBCdWZmZXIgbGlzdHMgYXJlIGNyZWF0ZWQgd2l0aCBnc3RfYnVmZmVyX2xpc3RfbmV3KCkgYW5kIGZpbGxlZCB3aXRoIGRhdGEKLSAqIHVzaW5nIGEgZ3N0X2J1ZmZlcl9saXN0X2luc2VydCgpLgotICoKLSAqIEJ1ZmZlciBsaXN0cyBjYW4gYmUgcHVzaGVkIG9uIGEgc3JjcGFkIHdpdGggZ3N0X3BhZF9wdXNoX2xpc3QoKS4gVGhpcyBpcwotICogaW50ZXJlc3Rpbmcgd2hlbiBtdWx0aXBsZSBidWZmZXJzIG5lZWQgdG8gYmUgcHVzaGVkIGluIG9uZSBnbyBiZWNhdXNlIGl0Ci0gKiBjYW4gcmVkdWNlIHRoZSBhbW91bnQgb2Ygb3ZlcmhlYWQgZm9yIHB1c2hpbmcgZWFjaCBidWZmZXIgaW5kaXZpZHVhbGx5LgotICovCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdGJ1ZmZlci5oIgotI2luY2x1ZGUgImdzdGJ1ZmZlcmxpc3QuaCIKLSNpbmNsdWRlICJnc3R1dGlscy5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX0JVRkZFUl9MSVNUCi0KLSNkZWZpbmUgR1NUX0JVRkZFUl9MSVNUX0lTX1VTSU5HX0RZTkFNSUNfQVJSQVkobGlzdCkgXAotICAgICgobGlzdCktPmJ1ZmZlcnMgIT0gJihsaXN0KS0+YXJyWzBdKQotCi0vKioKLSAqIEdzdEJ1ZmZlckxpc3Q6Ci0gKgotICogT3BhcXVlIGxpc3Qgb2YgZ3JvdXBlZCBidWZmZXJzLgotICovCi1zdHJ1Y3QgX0dzdEJ1ZmZlckxpc3QKLXsKLSAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKLQotICBHc3RCdWZmZXIgKipidWZmZXJzOwotICBndWludCBuX2J1ZmZlcnM7Ci0gIGd1aW50IG5fYWxsb2NhdGVkOwotCi0gIGdzaXplIHNsaWNlX3NpemU7Ci0KLSAgLyogb25lLWl0ZW0gYXJyYXksIGluIHJlYWxpdHkgbW9yZSBpdGVtcyBhcmUgcHJlLWFsbG9jYXRlZAotICAgKiBhcyBwYXJ0IG9mIHRoZSBHc3RCdWZmZXJMaXN0IHN0cnVjdHVyZSwgYW5kIHRoYXQKLSAgICogcHJlLWFsbG9jYXRlZCBhcnJheSBleHRlbmRzIGJleW9uZCB0aGUgZGVjbGFyZWQgc3RydWN0ICovCi0gIEdzdEJ1ZmZlciAqYXJyWzFdOwotfTsKLQotR1R5cGUgX2dzdF9idWZmZXJfbGlzdF90eXBlID0gMDsKLQotR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RCdWZmZXJMaXN0LCBnc3RfYnVmZmVyX2xpc3QpOwotCi12b2lkCi1fcHJpdl9nc3RfYnVmZmVyX2xpc3RfaW5pdGlhbGl6ZSAodm9pZCkKLXsKLSAgX2dzdF9idWZmZXJfbGlzdF90eXBlID0gZ3N0X2J1ZmZlcl9saXN0X2dldF90eXBlICgpOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyTGlzdCAqCi1fZ3N0X2J1ZmZlcl9saXN0X2NvcHkgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICBHc3RCdWZmZXJMaXN0ICpjb3B5OwotICBndWludCBpLCBsZW47Ci0KLSAgbGVuID0gbGlzdC0+bl9idWZmZXJzOwotICBjb3B5ID0gZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAobGlzdC0+bl9hbGxvY2F0ZWQpOwotCi0gIC8qIGFkZCBhbmQgcmVmIGFsbCBidWZmZXJzIGluIHRoZSBhcnJheSAqLwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgY29weS0+YnVmZmVyc1tpXSA9IGdzdF9idWZmZXJfcmVmIChsaXN0LT5idWZmZXJzW2ldKTsKLQotICBjb3B5LT5uX2J1ZmZlcnMgPSBsZW47Ci0KLSAgcmV0dXJuIGNvcHk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZ3N0X2J1ZmZlcl9saXN0X2ZyZWUgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICBndWludCBpLCBsZW47Ci0KLSAgR1NUX0xPRyAoImZyZWUgJXAiLCBsaXN0KTsKLQotICAvKiB1bnJlZnMgYWxsIGJ1ZmZlcnMgdG9vICovCi0gIGxlbiA9IGxpc3QtPm5fYnVmZmVyczsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGxpc3QtPmJ1ZmZlcnNbaV0pOwotCi0gIGlmIChHU1RfQlVGRkVSX0xJU1RfSVNfVVNJTkdfRFlOQU1JQ19BUlJBWSAobGlzdCkpCi0gICAgZ19mcmVlIChsaXN0LT5idWZmZXJzKTsKLQotICBnX3NsaWNlX2ZyZWUxIChsaXN0LT5zbGljZV9zaXplLCBsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9idWZmZXJfbGlzdF9pbml0IChHc3RCdWZmZXJMaXN0ICogbGlzdCwgZ3VpbnQgbl9hbGxvY2F0ZWQsIGdzaXplIHNsaWNlX3NpemUpCi17Ci0gIGdzdF9taW5pX29iamVjdF9pbml0IChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobGlzdCksIDAsIF9nc3RfYnVmZmVyX2xpc3RfdHlwZSwKLSAgICAgIChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X2J1ZmZlcl9saXN0X2NvcHksIE5VTEwsCi0gICAgICAoR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbikgX2dzdF9idWZmZXJfbGlzdF9mcmVlKTsKLQotICBsaXN0LT5idWZmZXJzID0gJmxpc3QtPmFyclswXTsKLSAgbGlzdC0+bl9idWZmZXJzID0gMDsKLSAgbGlzdC0+bl9hbGxvY2F0ZWQgPSBuX2FsbG9jYXRlZDsKLSAgbGlzdC0+c2xpY2Vfc2l6ZSA9IHNsaWNlX3NpemU7Ci0KLSAgR1NUX0xPRyAoImluaXQgJXAiLCBsaXN0KTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2xpc3RfbmV3X3NpemVkOgotICogQHNpemU6IGFuIGluaXRpYWwgcmVzZXJ2ZWQgc2l6ZQotICoKLSAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5ICNHc3RCdWZmZXJMaXN0LiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcKLSAqIHRoZSByZXR1cm5lZCAjR3N0QnVmZmVyTGlzdC4gVGhlIGxpc3Qgd2lsbCBoYXZlIEBzaXplIHNwYWNlIHByZWFsbG9jYXRlZCBzbwotICogdGhhdCBtZW1vcnkgcmVhbGxvY2F0aW9ucyBjYW4gYmUgYXZvaWRlZC4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX2xpc3RfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgI0dzdEJ1ZmZlckxpc3QuIGdzdF9idWZmZXJfbGlzdF91bnJlZigpCi0gKiAgICAgYWZ0ZXIgdXNhZ2UuCi0gKi8KLUdzdEJ1ZmZlckxpc3QgKgotZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAoZ3VpbnQgc2l6ZSkKLXsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdDsKLSAgZ3NpemUgc2xpY2Vfc2l6ZTsKLSAgZ3VpbnQgbl9hbGxvY2F0ZWQ7Ci0KLSAgbl9hbGxvY2F0ZWQgPSBHU1RfUk9VTkRfVVBfMTYgKHNpemUpOwotCi0gIHNsaWNlX3NpemUgPSBzaXplb2YgKEdzdEJ1ZmZlckxpc3QpICsgKG5fYWxsb2NhdGVkIC0gMSkgKiBzaXplb2YgKGdwb2ludGVyKTsKLQotICBsaXN0ID0gZ19zbGljZV9hbGxvYzAgKHNsaWNlX3NpemUpOwotCi0gIEdTVF9MT0cgKCJuZXcgJXAiLCBsaXN0KTsKLQotICBnc3RfYnVmZmVyX2xpc3RfaW5pdCAobGlzdCwgbl9hbGxvY2F0ZWQsIHNsaWNlX3NpemUpOwotCi0gIHJldHVybiBsaXN0OwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfbGlzdF9uZXc6Ci0gKgotICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgI0dzdEJ1ZmZlckxpc3QuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVucmVmZmluZwotICogdGhlIHJldHVybmVkICNHc3RCdWZmZXJMaXN0LgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfbGlzdF91bnJlZgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0QnVmZmVyTGlzdC4gZ3N0X2J1ZmZlcl9saXN0X3VucmVmKCkKLSAqICAgICBhZnRlciB1c2FnZS4KLSAqLwotR3N0QnVmZmVyTGlzdCAqCi1nc3RfYnVmZmVyX2xpc3RfbmV3ICh2b2lkKQotewotICByZXR1cm4gZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAoOCk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aDoKLSAqIEBsaXN0OiBhICNHc3RCdWZmZXJMaXN0Ci0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gQGxpc3QuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBidWZmZXIgbGlzdAotICovCi1ndWludAotZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAoR3N0QnVmZmVyTGlzdCAqIGxpc3QpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCAwKTsKLQotICByZXR1cm4gbGlzdC0+bl9idWZmZXJzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9idWZmZXJfbGlzdF9yZW1vdmVfcmFuZ2VfaW50ZXJuYWwgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0LCBndWludCBpZHgsCi0gICAgZ3VpbnQgbGVuZ3RoLCBnYm9vbGVhbiB1bnJlZl9vbGQpCi17Ci0gIGd1aW50IGk7Ci0KLSAgaWYgKHVucmVmX29sZCkgewotICAgIGZvciAoaSA9IGlkeDsgaSA8IGlkeCArIGxlbmd0aDsgKytpKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAobGlzdC0+YnVmZmVyc1tpXSk7Ci0gIH0KLQotICBpZiAoaWR4ICsgbGVuZ3RoICE9IGxpc3QtPm5fYnVmZmVycykgewotICAgIG1lbW1vdmUgKCZsaXN0LT5idWZmZXJzW2lkeF0sICZsaXN0LT5idWZmZXJzW2lkeCArIGxlbmd0aF0sCi0gICAgICAgIChsaXN0LT5uX2J1ZmZlcnMgLSAoaWR4ICsgbGVuZ3RoKSkgKiBzaXplb2YgKHZvaWQgKikpOwotICB9Ci0KLSAgbGlzdC0+bl9idWZmZXJzIC09IGxlbmd0aDsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaDoKLSAqIEBsaXN0OiBhICNHc3RCdWZmZXJMaXN0Ci0gKiBAZnVuYzogKHNjb3BlIGNhbGwpOiBhICNHc3RCdWZmZXJMaXN0RnVuYyB0byBjYWxsCi0gKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSBwYXNzZWQgdG8gQGZ1bmMKLSAqCi0gKiBDYWxsIEBmdW5jIHdpdGggQGRhdGEgZm9yIGVhY2ggYnVmZmVyIGluIEBsaXN0LgotICoKLSAqIEBmdW5jIGNhbiBtb2RpZnkgdGhlIHBhc3NlZCBidWZmZXIgcG9pbnRlciBvciBpdHMgY29udGVudHMuIFRoZSByZXR1cm4gdmFsdWUKLSAqIG9mIEBmdW5jIGRlZmluZSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb3IgaWYgdGhlIHJlbWFpbmluZyBidWZmZXJzIGluCi0gKiB0aGUgbGlzdCBzaG91bGQgYmUgc2tpcHBlZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSB3aGVuIEBmdW5jIHJldHVybmVkICVUUlVFIGZvciBlYWNoIGJ1ZmZlciBpbiBAbGlzdCBvciB3aGVuCi0gKiBAbGlzdCBpcyBlbXB0eS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChHc3RCdWZmZXJMaXN0ICogbGlzdCwgR3N0QnVmZmVyTGlzdEZ1bmMgZnVuYywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGd1aW50IGksIGxlbjsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9MSVNUIChsaXN0KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnVuYyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgbGVuID0gbGlzdC0+bl9idWZmZXJzOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOykgewotICAgIEdzdEJ1ZmZlciAqYnVmLCAqYnVmX3JldDsKLQotICAgIGJ1ZiA9IGJ1Zl9yZXQgPSBsaXN0LT5idWZmZXJzW2ldOwotICAgIHJldCA9IGZ1bmMgKCZidWZfcmV0LCBpLCB1c2VyX2RhdGEpOwotCi0gICAgLyogQ2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGJ1ZmZlciAqLwotICAgIGlmIChidWYgIT0gYnVmX3JldCkgewotICAgICAgaWYgKGJ1Zl9yZXQgPT0gTlVMTCkgewotICAgICAgICBnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlX3JhbmdlX2ludGVybmFsIChsaXN0LCBpLCAxLCBGQUxTRSk7Ci0gICAgICAgIC0tbGVuOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbGlzdC0+YnVmZmVyc1tpXSA9IGJ1Zl9yZXQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFyZXQpCi0gICAgICBicmVhazsKLQotICAgIC8qIElmIHRoZSBidWZmZXIgd2FzIG5vdCByZW1vdmVkIGJ5IGZ1bmMgZ28gdG8gdGhlIG5leHQgYnVmZmVyICovCi0gICAgaWYgKGJ1Zl9yZXQgIT0gTlVMTCkKLSAgICAgIGkrKzsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfbGlzdF9nZXQ6Ci0gKiBAbGlzdDogYSAjR3N0QnVmZmVyTGlzdAotICogQGlkeDogdGhlIGluZGV4Ci0gKgotICogR2V0IHRoZSBidWZmZXIgYXQgQGlkeC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKG51bGxhYmxlKTogdGhlIGJ1ZmZlciBhdCBAaWR4IGluIEBncm91cAotICogICAgIG9yICVOVUxMIHdoZW4gdGhlcmUgaXMgbm8gYnVmZmVyLiBUaGUgYnVmZmVyIHJlbWFpbnMgdmFsaWQgYXMKLSAqICAgICBsb25nIGFzIEBsaXN0IGlzIHZhbGlkIGFuZCBidWZmZXIgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4KLSAqLwotR3N0QnVmZmVyICoKLWdzdF9idWZmZXJfbGlzdF9nZXQgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0LCBndWludCBpZHgpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlkeCA8IGxpc3QtPm5fYnVmZmVycywgTlVMTCk7Ci0KLSAgcmV0dXJuIGxpc3QtPmJ1ZmZlcnNbaWR4XTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2xpc3RfYWRkOgotICogQGw6IGEgI0dzdEJ1ZmZlckxpc3QKLSAqIEBiOiBhICNHc3RCdWZmZXIKLSAqCi0gKiBBcHBlbmQgQGIgYXQgdGhlIGVuZCBvZiBAbC4KLSAqLwotLyoqCi0gKiBnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0OgotICogQGxpc3Q6IGEgI0dzdEJ1ZmZlckxpc3QKLSAqIEBpZHg6IHRoZSBpbmRleAotICogQGJ1ZmZlcjogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCdWZmZXIKLSAqCi0gKiBJbnNlcnQgQGJ1ZmZlciBhdCBAaWR4IGluIEBsaXN0LiBPdGhlciBidWZmZXJzIGFyZSBtb3ZlZCB0byBtYWtlIHJvb20gZm9yCi0gKiB0aGlzIG5ldyBidWZmZXIuCi0gKgotICogQSAtMSB2YWx1ZSBmb3IgQGlkeCB3aWxsIGFwcGVuZCB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCi0gKi8KLXZvaWQKLWdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0LCBnaW50IGlkeCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBndWludCB3YW50X2FsbG9jOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfTElTVCAobGlzdCkpOwotICBnX3JldHVybl9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9idWZmZXJfbGlzdF9pc193cml0YWJsZSAobGlzdCkpOwotCi0gIGlmIChpZHggPT0gLTEgJiYgbGlzdC0+bl9idWZmZXJzIDwgbGlzdC0+bl9hbGxvY2F0ZWQpIHsKLSAgICBsaXN0LT5idWZmZXJzW2xpc3QtPm5fYnVmZmVycysrXSA9IGJ1ZmZlcjsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoaWR4ID09IC0xIHx8IGlkeCA+IGxpc3QtPm5fYnVmZmVycykKLSAgICBpZHggPSBsaXN0LT5uX2J1ZmZlcnM7Ci0KLSAgd2FudF9hbGxvYyA9IGxpc3QtPm5fYnVmZmVycyArIDE7Ci0KLSAgaWYgKHdhbnRfYWxsb2MgPiBsaXN0LT5uX2FsbG9jYXRlZCkgewotICAgIHdhbnRfYWxsb2MgPSBNQVggKEdTVF9ST1VORF9VUF8xNiAod2FudF9hbGxvYyksIGxpc3QtPm5fYWxsb2NhdGVkICogMik7Ci0KLSAgICBpZiAoR1NUX0JVRkZFUl9MSVNUX0lTX1VTSU5HX0RZTkFNSUNfQVJSQVkgKGxpc3QpKSB7Ci0gICAgICBsaXN0LT5idWZmZXJzID0gZ19yZW5ldyAoR3N0QnVmZmVyICosIGxpc3QtPmJ1ZmZlcnMsIHdhbnRfYWxsb2MpOwotICAgIH0gZWxzZSB7Ci0gICAgICBsaXN0LT5idWZmZXJzID0gZ19uZXcwIChHc3RCdWZmZXIgKiwgd2FudF9hbGxvYyk7Ci0gICAgICBtZW1jcHkgKGxpc3QtPmJ1ZmZlcnMsICZsaXN0LT5hcnJbMF0sIGxpc3QtPm5fYnVmZmVycyAqIHNpemVvZiAodm9pZCAqKSk7Ci0gICAgICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgImV4Y2VlZGluZyBwcmUtYWxsb2NlZCBhcnJheSIpOwotICAgIH0KLQotICAgIGxpc3QtPm5fYWxsb2NhdGVkID0gd2FudF9hbGxvYzsKLSAgfQotCi0gIGlmIChpZHggPCBsaXN0LT5uX2J1ZmZlcnMpIHsKLSAgICBtZW1tb3ZlICgmbGlzdC0+YnVmZmVyc1tpZHggKyAxXSwgJmxpc3QtPmJ1ZmZlcnNbaWR4XSwKLSAgICAgICAgKGxpc3QtPm5fYnVmZmVycyAtIGlkeCkgKiBzaXplb2YgKHZvaWQgKikpOwotICB9Ci0KLSAgKytsaXN0LT5uX2J1ZmZlcnM7Ci0gIGxpc3QtPmJ1ZmZlcnNbaWR4XSA9IGJ1ZmZlcjsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlOgotICogQGxpc3Q6IGEgI0dzdEJ1ZmZlckxpc3QKLSAqIEBpZHg6IHRoZSBpbmRleAotICogQGxlbmd0aDogdGhlIGFtb3VudCB0byByZW1vdmUKLSAqCi0gKiBSZW1vdmUgQGxlbmd0aCBidWZmZXJzIHN0YXJ0aW5nIGZyb20gQGlkeCBpbiBAbGlzdC4gVGhlIGZvbGxvd2luZyBidWZmZXJzCi0gKiBhcmUgbW92ZWQgdG8gY2xvc2UgdGhlIGdhcC4KLSAqLwotdm9pZAotZ3N0X2J1ZmZlcl9saXN0X3JlbW92ZSAoR3N0QnVmZmVyTGlzdCAqIGxpc3QsIGd1aW50IGlkeCwgZ3VpbnQgbGVuZ3RoKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoaWR4IDwgbGlzdC0+bl9idWZmZXJzKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoaWR4ICsgbGVuZ3RoIDw9IGxpc3QtPm5fYnVmZmVycyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9idWZmZXJfbGlzdF9pc193cml0YWJsZSAobGlzdCkpOwotCi0gIGdzdF9idWZmZXJfbGlzdF9yZW1vdmVfcmFuZ2VfaW50ZXJuYWwgKGxpc3QsIGlkeCwgbGVuZ3RoLCBUUlVFKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2xpc3RfY29weV9kZWVwOgotICogQGxpc3Q6IGEgI0dzdEJ1ZmZlckxpc3QKLSAqCi0gKiBDcmVhdGUgYSBjb3B5IG9mIHRoZSBnaXZlbiBidWZmZXIgbGlzdC4gVGhpcyB3aWxsIG1ha2UgYSBuZXdseSBhbGxvY2F0ZWQKLSAqIGNvcHkgb2YgdGhlIGJ1ZmZlciB0aGF0IHRoZSBzb3VyY2UgYnVmZmVyIGxpc3QgY29udGFpbnMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBjb3B5IG9mIEBsaXN0LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0QnVmZmVyTGlzdCAqCi1nc3RfYnVmZmVyX2xpc3RfY29weV9kZWVwIChjb25zdCBHc3RCdWZmZXJMaXN0ICogbGlzdCkKLXsKLSAgZ3VpbnQgaSwgbGVuOwotICBHc3RCdWZmZXJMaXN0ICpyZXN1bHQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCBOVUxMKTsKLQotICByZXN1bHQgPSBnc3RfYnVmZmVyX2xpc3RfbmV3ICgpOwotCi0gIGxlbiA9IGxpc3QtPm5fYnVmZmVyczsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgR3N0QnVmZmVyICpvbGQgPSBsaXN0LT5idWZmZXJzW2ldOwotICAgIEdzdEJ1ZmZlciAqbmV3ID0gZ3N0X2J1ZmZlcl9jb3B5X2RlZXAgKG9sZCk7Ci0KLSAgICBpZiAoR19MSUtFTFkgKG5ldykpIHsKLSAgICAgIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKHJlc3VsdCwgaSwgbmV3KTsKLSAgICB9IGVsc2UgewotICAgICAgZ193YXJuaW5nCi0gICAgICAgICAgKCJGYWlsZWQgdG8gZGVlcCBjb3B5IGJ1ZmZlciAlcCB3aGlsZSBkZWVwICIKLSAgICAgICAgICAiY29weWluZyBidWZmZXIgbGlzdCAlcC4gQnVmZmVyIGxpc3QgY29weSAiCi0gICAgICAgICAgIndpbGwgYmUgaW5jb21wbGV0ZSIsIG9sZCwgbGlzdCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RidWZmZXJsaXN0LmggYi9nc3QvZ3N0YnVmZmVybGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDMzMTViLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RidWZmZXJsaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXhpcyBDb21tdW5pY2F0aW9ucyA8ZGV2LWdzdHJlYW1lciBhdCBheGlzIGRvdCBjb20+Ci0gKiBAYXV0aG9yIEpvbmFzIEhvbG1iZXJnIDxqb25hcyBkb3QgaG9sbWJlcmcgYXQgYXhpcyBkb3QgY29tPgotICoKLSAqIGdzdGJ1ZmZlcmxpc3QuaDogSGVhZGVyIGZvciBHc3RCdWZmZXJMaXN0IG9iamVjdAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQlVGRkVSX0xJU1RfSF9fCi0jZGVmaW5lIF9fR1NUX0JVRkZFUl9MSVNUX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLUdTVF9FWFBPUlQgR1R5cGUgX2dzdF9idWZmZXJfbGlzdF90eXBlOwotCi0jZGVmaW5lIEdTVF9UWVBFX0JVRkZFUl9MSVNUICAgICAgKF9nc3RfYnVmZmVyX2xpc3RfdHlwZSkKLSNkZWZpbmUgR1NUX0lTX0JVRkZFUl9MSVNUKG9iaikgICAoR1NUX0lTX01JTklfT0JKRUNUX1RZUEUob2JqLCBHU1RfVFlQRV9CVUZGRVJfTElTVCkpCi0jZGVmaW5lIEdTVF9CVUZGRVJfTElTVF9DQVNUKG9iaikgKChHc3RCdWZmZXJMaXN0ICopb2JqKQotI2RlZmluZSBHU1RfQlVGRkVSX0xJU1Qob2JqKSAgICAgIChHU1RfQlVGRkVSX0xJU1RfQ0FTVChvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyTGlzdCBHc3RCdWZmZXJMaXN0OwotCi0vKioKLSAqIEdzdEJ1ZmZlckxpc3RGdW5jOgotICogQGJ1ZmZlcjogKG91dCkgKG51bGxhYmxlKTogcG9pbnRlciB0aGUgYnVmZmVyCi0gKiBAaWR4OiB0aGUgaW5kZXggb2YgQGJ1ZmZlcgotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCgpCi0gKgotICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGZyb20gZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKS4gVGhlIEBidWZmZXIKLSAqIGZpZWxkIHdpbGwgcG9pbnQgdG8gYSB0aGUgcmVmZXJlbmNlIG9mIHRoZSBidWZmZXIgYXQgQGlkeC4KLSAqCi0gKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAlVFJVRSwgdGhlIG5leHQgYnVmZmVyIHdpbGwgYmUKLSAqIHJldHVybmVkLiBXaGVuICVGQUxTRSBpcyByZXR1cm5lZCwgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2goKSB3aWxsIHJldHVybi4KLSAqCi0gKiBXaGVuIEBidWZmZXIgaXMgc2V0IHRvICVOVUxMLCB0aGUgaXRlbSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVmZmVybGlzdC4KLSAqIFdoZW4gQGJ1ZmZlciBoYXMgYmVlbiBtYWRlIHdyaXRhYmxlLCB0aGUgbmV3IGJ1ZmZlciByZWZlcmVuY2UgY2FuIGJlIGFzc2lnbmVkCi0gKiB0byBAYnVmZmVyLiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcgdGhlIG9sZCBidWZmZXIgd2hlbgotICogcmVtb3Zpbmcgb3IgbW9kaWZ5aW5nLgotICoKLSAqIFJldHVybnM6ICVGQUxTRSB3aGVuIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoKCkgc2hvdWxkIHN0b3AKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAgICgqR3N0QnVmZmVyTGlzdEZ1bmMpICAgKEdzdEJ1ZmZlciAqKmJ1ZmZlciwgZ3VpbnQgaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLQotLyogcmVmY291bnRpbmcgKi8KLS8qKgotICogZ3N0X2J1ZmZlcl9saXN0X3JlZjoKLSAqIEBsaXN0OiBhICNHc3RCdWZmZXJMaXN0Ci0gKgotICogSW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZ2l2ZW4gYnVmZmVyIGxpc3QgYnkgb25lLgotICoKLSAqIE5vdGUgdGhhdCB0aGUgcmVmY291bnQgYWZmZWN0cyB0aGUgd3JpdGFiaWxpdHkgb2YgQGxpc3QgYW5kIGl0cyBkYXRhLCBzZWUKLSAqIGdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlKCkuIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQga2VlcGluZwotICogYWRkaXRpb25hbCByZWZlcmVuY2VzIHRvIEdzdEJ1ZmZlckxpc3QgaW5zdGFuY2VzIGNhbiBwb3RlbnRpYWxseSBpbmNyZWFzZQotICogdGhlIG51bWJlciBvZiBtZW1jcHkgb3BlcmF0aW9ucyBpbiBhIHBpcGVsaW5lLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQGxpc3QKLSAqLwotc3RhdGljIGlubGluZSBHc3RCdWZmZXJMaXN0ICoKLWdzdF9idWZmZXJfbGlzdF9yZWYgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICByZXR1cm4gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGdzdF9taW5pX29iamVjdF9yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUICgKLSAgICAgIGxpc3QpKSk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9saXN0X3VucmVmOgotICogQGxpc3Q6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVmZmVyTGlzdAotICoKLSAqIERlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIGJ1ZmZlciBsaXN0LiBJZiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLCB0aGUKLSAqIGJ1ZmZlciBsaXN0IHdpbGwgYmUgZnJlZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChHc3RCdWZmZXJMaXN0ICogbGlzdCkKLXsKLSAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobGlzdCkpOwotfQotCi0vKiBjb3B5ICovCi0vKioKLSAqIGdzdF9idWZmZXJfbGlzdF9jb3B5OgotICogQGxpc3Q6IGEgI0dzdEJ1ZmZlckxpc3QKLSAqCi0gKiBDcmVhdGUgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGdpdmVuIGJ1ZmZlciBsaXN0LiBUaGlzIHdpbGwgbWFrZSBhIG5ld2x5Ci0gKiBhbGxvY2F0ZWQgY29weSBvZiB0aGUgc291cmNlIGxpc3Qgd2l0aCBjb3BpZXMgb2YgYnVmZmVyIHBvaW50ZXJzLiBUaGUKLSAqIHJlZmNvdW50IG9mIGJ1ZmZlcnMgcG9pbnRlZCB0byB3aWxsIGJlIGluY3JlYXNlZCBieSBvbmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBjb3B5IG9mIEBsaXN0LgotICovCi1zdGF0aWMgaW5saW5lIEdzdEJ1ZmZlckxpc3QgKgotZ3N0X2J1ZmZlcl9saXN0X2NvcHkgKGNvbnN0IEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICByZXR1cm4gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGdzdF9taW5pX29iamVjdF9jb3B5IChHU1RfTUlOSV9PQkpFQ1RfQ09OU1RfQ0FTVCAobGlzdCkpKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX2xpc3RfaXNfd3JpdGFibGU6Ci0gKiBAbGlzdDogYSAjR3N0QnVmZmVyTGlzdAotICoKLSAqIFRlc3RzIGlmIHlvdSBjYW4gc2FmZWx5IGFkZCBidWZmZXJzIGFuZCBncm91cHMgaW50byBhIGJ1ZmZlciBsaXN0LgotICovCi0jZGVmaW5lIGdzdF9idWZmZXJfbGlzdF9pc193cml0YWJsZShsaXN0KSBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChsaXN0KSkKLQotLyoqCi0gKiBnc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZToKLSAqIEBsaXN0OiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEJ1ZmZlckxpc3QKLSAqCi0gKiBNYWtlcyBhIHdyaXRhYmxlIGJ1ZmZlciBsaXN0IGZyb20gdGhlIGdpdmVuIGJ1ZmZlciBsaXN0LiBJZiB0aGUgc291cmNlIGJ1ZmZlcgotICogbGlzdCBpcyBhbHJlYWR5IHdyaXRhYmxlLCB0aGlzIHdpbGwgc2ltcGx5IHJldHVybiB0aGUgc2FtZSBidWZmZXIgbGlzdC4gQQotICogY29weSB3aWxsIG90aGVyd2lzZSBiZSBtYWRlIHVzaW5nIGdzdF9idWZmZXJfbGlzdF9jb3B5KCkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHdyaXRhYmxlIGxpc3QsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZQotICogICAgIHNhbWUgYXMgQGxpc3QKLSAqLwotI2RlZmluZSBnc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZShsaXN0KSBHU1RfQlVGRkVSX0xJU1RfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChsaXN0KSkpCi0KLUdUeXBlICAgICAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfZ2V0X3R5cGUgICAgICAgICAgICAgICh2b2lkKTsKLQotLyogYWxsb2NhdGlvbiAqLwotR3N0QnVmZmVyTGlzdCAqICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9uZXcgICAgICAgICAgICAgICAgICAgKHZvaWQpIEdfR05VQ19NQUxMT0M7Ci1Hc3RCdWZmZXJMaXN0ICogICAgICAgICAgZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAgICAgICAgICAgICAoZ3VpbnQgc2l6ZSkgR19HTlVDX01BTExPQzsKLQotZ3VpbnQgICAgICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9sZW5ndGggICAgICAgICAgICAgICAgKEdzdEJ1ZmZlckxpc3QgKmxpc3QpOwotCi1Hc3RCdWZmZXIgKiAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9saXN0X2dldCAgICAgICAgICAgICAgICAgICAoR3N0QnVmZmVyTGlzdCAqbGlzdCwgZ3VpbnQgaWR4KTsKLXZvaWQgICAgICAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0ICAgICAgICAgICAgICAgIChHc3RCdWZmZXJMaXN0ICpsaXN0LCBnaW50IGlkeCwgR3N0QnVmZmVyICpidWZmZXIpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9yZW1vdmUgICAgICAgICAgICAgICAgKEdzdEJ1ZmZlckxpc3QgKmxpc3QsIGd1aW50IGlkeCwgZ3VpbnQgbGVuZ3RoKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoICAgICAgICAgICAgICAgKEdzdEJ1ZmZlckxpc3QgKmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyTGlzdEZ1bmMgZnVuYywKLQkJCQkJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLUdzdEJ1ZmZlckxpc3QgKiAgICAgICAgICBnc3RfYnVmZmVyX2xpc3RfY29weV9kZWVwICAgICAgICAgICAgIChjb25zdCBHc3RCdWZmZXJMaXN0ICogbGlzdCk7Ci0KLSNkZWZpbmUgZ3N0X2J1ZmZlcl9saXN0X2FkZChsLGIpIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQoKGwpLC0xLChiKSk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0QnVmZmVyTGlzdCwgZ3N0X2J1ZmZlcl9saXN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9CVUZGRVJfTElTVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RidWZmZXJwb29sLmMgYi9nc3QvZ3N0YnVmZmVycG9vbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzM4NTlkLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RidWZmZXJwb29sLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzk4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogZ3N0YnVmZmVycG9vbC5jOiBHc3RCdWZmZXJQb29sIGJhc2VjbGFzcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RidWZmZXJwb29sCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFBvb2wgZm9yIGJ1ZmZlcnMKLSAqIEBzZWVfYWxzbzogI0dzdEJ1ZmZlcgotICoKLSAqIEEgI0dzdEJ1ZmZlclBvb2wgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJlLWFsbG9jYXRlIGFuZCByZWN5Y2xlCi0gKiBidWZmZXJzIG9mIHRoZSBzYW1lIHNpemUgYW5kIHdpdGggdGhlIHNhbWUgcHJvcGVydGllcy4KLSAqCi0gKiBBICNHc3RCdWZmZXJQb29sIGlzIGNyZWF0ZWQgd2l0aCBnc3RfYnVmZmVyX3Bvb2xfbmV3KCkuCi0gKgotICogT25jZSBhIHBvb2wgaXMgY3JlYXRlZCwgaXQgbmVlZHMgdG8gYmUgY29uZmlndXJlZC4gQSBjYWxsIHRvCi0gKiBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZygpIHJldHVybnMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZnJvbQotICogdGhlIHBvb2wuIFdpdGggZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zKCkgYW5kCi0gKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9hbGxvY2F0b3IoKSB0aGUgYnVmZmVycG9vbCBwYXJhbWV0ZXJzIGFuZAotICogYWxsb2NhdG9yIGNhbiBiZSBjb25maWd1cmVkLiBPdGhlciBwcm9wZXJ0aWVzIGNhbiBiZSBjb25maWd1cmVkIGluIHRoZSBwb29sCi0gKiBkZXBlbmRpbmcgb24gdGhlIHBvb2wgaW1wbGVtZW50YXRpb24uCi0gKgotICogQSBidWZmZXJwb29sIGNhbiBoYXZlIGV4dHJhIG9wdGlvbnMgdGhhdCBjYW4gYmUgZW5hYmxlZCB3aXRoCi0gKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24oKS4gVGhlIGF2YWlsYWJsZSBvcHRpb25zIGNhbiBiZSByZXRyaWV2ZWQKLSAqIHdpdGggZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zKCkuIFNvbWUgb3B0aW9ucyBhbGxvdyBmb3IgYWRkaXRpb25hbAotICogY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHRvIGJlIHNldC4KLSAqCi0gKiBBZnRlciB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaGFzIGJlZW4gY29uZmlndXJlZCwKLSAqIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnKCkgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgcG9vbC4gVGhpcyBjYW4KLSAqIGZhaWwgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgaXMgbm90IGFjY2VwdGVkLgotICoKLSAqIEFmdGVyIHRoZSBhIHBvb2wgaGFzIGJlZW4gY29uZmlndXJlZCwgaXQgY2FuIGJlIGFjdGl2YXRlZCB3aXRoCi0gKiBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSgpLiBUaGlzIHdpbGwgcHJlYWxsb2NhdGUgdGhlIGNvbmZpZ3VyZWQgcmVzb3VyY2VzCi0gKiBpbiB0aGUgcG9vbC4KLSAqCi0gKiBXaGVuIHRoZSBwb29sIGlzIGFjdGl2ZSwgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCkgY2FuIGJlIHVzZWQgdG8KLSAqIHJldHJpZXZlIGEgYnVmZmVyIGZyb20gdGhlIHBvb2wuCi0gKgotICogQnVmZmVycyBhbGxvY2F0ZWQgZnJvbSBhIGJ1ZmZlcnBvb2wgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJldHVybmVkIHRvIHRoZQotICogcG9vbCB3aXRoIGdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlcigpIHdoZW4gdGhlaXIgcmVmY291bnQgZHJvcHMgdG8gMC4KLSAqCi0gKiBUaGUgYnVmZmVycG9vbCBjYW4gYmUgZGVhY3RpdmF0ZWQgYWdhaW4gd2l0aCBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSgpLgotICogQWxsIGZ1cnRoZXIgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCkgY2FsbHMgd2lsbCByZXR1cm4gYW4gZXJyb3IuIFdoZW4KLSAqIGFsbCBidWZmZXJzIGFyZSByZXR1cm5lZCB0byB0aGUgcG9vbCB0aGV5IHdpbGwgYmUgZnJlZWQuCi0gKgotICogVXNlIGdzdF9vYmplY3RfdW5yZWYoKSB0byByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gYSBidWZmZXJwb29sLiBJZiB0aGUKLSAqIHJlZmNvdW50IG9mIHRoZSBwb29sIHJlYWNoZXMgMCwgdGhlIHBvb2wgd2lsbCBiZSBmcmVlZC4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lmZGVmIEhBVkVfVU5JU1REX0gKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlICJnc3RhdG9taWNxdWV1ZS5oIgotI2luY2x1ZGUgImdzdHBvbGwuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0cXVhcmsuaCIKLSNpbmNsdWRlICJnc3R2YWx1ZS5oIgotCi0jaW5jbHVkZSAiZ3N0YnVmZmVycG9vbC5oIgotCi0jaWZkZWYgR19PU19XSU4zMgotIyAgaWZuZGVmIEVXT1VMREJMT0NLCi0jICBkZWZpbmUgRVdPVUxEQkxPQ0sgRUFHQUlOICAgIC8qIFRoaXMgaXMganVzdCB0byBwbGFjYXRlIGdjYyAqLwotIyAgZW5kaWYKLSNlbmRpZiAvKiBHX09TX1dJTjMyICovCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9idWZmZXJfcG9vbF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYnVmZmVyX3Bvb2xfZGVidWcKLQotI2RlZmluZSBHU1RfQlVGRkVSX1BPT0xfR0VUX1BSSVZBVEUob2JqKSAgXAotICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX0JVRkZFUl9QT09MLCBHc3RCdWZmZXJQb29sUHJpdmF0ZSkpCi0KLSNkZWZpbmUgR1NUX0JVRkZFUl9QT09MX0xPQ0socG9vbCkgICAoZ19yZWNfbXV0ZXhfbG9jaygmcG9vbC0+cHJpdi0+cmVjX2xvY2spKQotI2RlZmluZSBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLKHBvb2wpIChnX3JlY19tdXRleF91bmxvY2soJnBvb2wtPnByaXYtPnJlY19sb2NrKSkKLQotc3RydWN0IF9Hc3RCdWZmZXJQb29sUHJpdmF0ZQotewotICBHc3RBdG9taWNRdWV1ZSAqcXVldWU7Ci0gIEdzdFBvbGwgKnBvbGw7Ci0KLSAgR1JlY011dGV4IHJlY19sb2NrOwotCi0gIGdib29sZWFuIHN0YXJ0ZWQ7Ci0gIGdib29sZWFuIGFjdGl2ZTsKLSAgZ2ludCBvdXRzdGFuZGluZzsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBhcmUgaW4gdXNlICovCi0KLSAgZ2Jvb2xlYW4gY29uZmlndXJlZDsKLSAgR3N0U3RydWN0dXJlICpjb25maWc7Ci0KLSAgZ3VpbnQgc2l6ZTsKLSAgZ3VpbnQgbWluX2J1ZmZlcnM7Ci0gIGd1aW50IG1heF9idWZmZXJzOwotICBndWludCBjdXJfYnVmZmVyczsKLSAgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7Ci0gIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zOwotfTsKLQotc3RhdGljIHZvaWQgZ3N0X2J1ZmZlcl9wb29sX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotR19ERUZJTkVfVFlQRSAoR3N0QnVmZmVyUG9vbCwgZ3N0X2J1ZmZlcl9wb29sLCBHU1RfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZGVmYXVsdF9zdGFydCAoR3N0QnVmZmVyUG9vbCAqIHBvb2wpOwotc3RhdGljIGdib29sZWFuIGRlZmF1bHRfc3RvcCAoR3N0QnVmZmVyUG9vbCAqIHBvb2wpOwotc3RhdGljIGdib29sZWFuIGRlZmF1bHRfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsCi0gICAgR3N0U3RydWN0dXJlICogY29uZmlnKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGRlZmF1bHRfYWxsb2NfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwKLSAgICBHc3RCdWZmZXIgKiogYnVmZmVyLCBHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyAqIHBhcmFtcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBkZWZhdWx0X2FjcXVpcmVfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwKLSAgICBHc3RCdWZmZXIgKiogYnVmZmVyLCBHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyAqIHBhcmFtcyk7Ci1zdGF0aWMgdm9pZCBkZWZhdWx0X3Jlc2V0X2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgdm9pZCBkZWZhdWx0X2ZyZWVfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyB2b2lkIGRlZmF1bHRfcmVsZWFzZV9idWZmZXIgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2J1ZmZlcl9wb29sX2NsYXNzX2luaXQgKEdzdEJ1ZmZlclBvb2xDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0QnVmZmVyUG9vbFByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9idWZmZXJfcG9vbF9maW5hbGl6ZTsKLQotICBrbGFzcy0+c3RhcnQgPSBkZWZhdWx0X3N0YXJ0OwotICBrbGFzcy0+c3RvcCA9IGRlZmF1bHRfc3RvcDsKLSAga2xhc3MtPnNldF9jb25maWcgPSBkZWZhdWx0X3NldF9jb25maWc7Ci0gIGtsYXNzLT5hY3F1aXJlX2J1ZmZlciA9IGRlZmF1bHRfYWNxdWlyZV9idWZmZXI7Ci0gIGtsYXNzLT5yZXNldF9idWZmZXIgPSBkZWZhdWx0X3Jlc2V0X2J1ZmZlcjsKLSAga2xhc3MtPmFsbG9jX2J1ZmZlciA9IGRlZmF1bHRfYWxsb2NfYnVmZmVyOwotICBrbGFzcy0+cmVsZWFzZV9idWZmZXIgPSBkZWZhdWx0X3JlbGVhc2VfYnVmZmVyOwotICBrbGFzcy0+ZnJlZV9idWZmZXIgPSBkZWZhdWx0X2ZyZWVfYnVmZmVyOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfYnVmZmVyX3Bvb2xfZGVidWcsICJidWZmZXJwb29sIiwgMCwKLSAgICAgICJidWZmZXJwb29sIGRlYnVnIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYnVmZmVyX3Bvb2xfaW5pdCAoR3N0QnVmZmVyUG9vbCAqIHBvb2wpCi17Ci0gIEdzdEJ1ZmZlclBvb2xQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSBwb29sLT5wcml2ID0gR1NUX0JVRkZFUl9QT09MX0dFVF9QUklWQVRFIChwb29sKTsKLQotICBnX3JlY19tdXRleF9pbml0ICgmcHJpdi0+cmVjX2xvY2spOwotCi0gIHByaXYtPnBvbGwgPSBnc3RfcG9sbF9uZXdfdGltZXIgKCk7Ci0gIHByaXYtPnF1ZXVlID0gZ3N0X2F0b21pY19xdWV1ZV9uZXcgKDE2KTsKLSAgcG9vbC0+Zmx1c2hpbmcgPSAxOwotICBwcml2LT5hY3RpdmUgPSBGQUxTRTsKLSAgcHJpdi0+Y29uZmlndXJlZCA9IEZBTFNFOwotICBwcml2LT5zdGFydGVkID0gRkFMU0U7Ci0gIHByaXYtPmNvbmZpZyA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5IChHU1RfUVVBUksgKEJVRkZFUl9QT09MX0NPTkZJRykpOwotICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKHByaXYtPmNvbmZpZywgTlVMTCwgMCwgMCwgMCk7Ci0gIHByaXYtPmFsbG9jYXRvciA9IE5VTEw7Ci0gIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0ICgmcHJpdi0+cGFyYW1zKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yIChwcml2LT5jb25maWcsIHByaXYtPmFsbG9jYXRvciwKLSAgICAgICZwcml2LT5wYXJhbXMpOwotICAvKiAxIGNvbnRyb2wgd3JpdGUgZm9yIGZsdXNoaW5nIC0gdGhlIGZsdXNoIHRva2VuICovCi0gIGdzdF9wb2xsX3dyaXRlX2NvbnRyb2wgKHByaXYtPnBvbGwpOwotICAvKiAxIGNvbnRyb2wgd3JpdGUgZm9yIG1hcmtpbmcgdGhhdCB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIHBvbGwgLSB0aGUgd2FpdCB0b2tlbiAqLwotICBnc3RfcG9sbF93cml0ZV9jb250cm9sIChwcml2LT5wb2xsKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwb29sLCAiY3JlYXRlZCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2J1ZmZlcl9wb29sX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBHc3RCdWZmZXJQb29sUHJpdmF0ZSAqcHJpdjsKLQotICBwb29sID0gR1NUX0JVRkZFUl9QT09MX0NBU1QgKG9iamVjdCk7Ci0gIHByaXYgPSBwb29sLT5wcml2OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICIlcCBmaW5hbGl6ZSIsIHBvb2wpOwotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBGQUxTRSk7Ci0gIGdzdF9hdG9taWNfcXVldWVfdW5yZWYgKHByaXYtPnF1ZXVlKTsKLSAgZ3N0X3BvbGxfZnJlZSAocHJpdi0+cG9sbCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHJpdi0+Y29uZmlnKTsKLSAgZ19yZWNfbXV0ZXhfY2xlYXIgKCZwcml2LT5yZWNfbG9jayk7Ci0gIGlmIChwcml2LT5hbGxvY2F0b3IpCi0gICAgZ3N0X29iamVjdF91bnJlZiAocHJpdi0+YWxsb2NhdG9yKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X2J1ZmZlcl9wb29sX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcG9vbF9uZXc6Ci0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0QnVmZmVyUG9vbCBpbnN0YW5jZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZmxvYXRpbmcpOiBhIG5ldyAjR3N0QnVmZmVyUG9vbCBpbnN0YW5jZQotICovCi1Hc3RCdWZmZXJQb29sICoKLWdzdF9idWZmZXJfcG9vbF9uZXcgKHZvaWQpCi17Ci0gIEdzdEJ1ZmZlclBvb2wgKnJlc3VsdDsKLQotICByZXN1bHQgPSBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9CVUZGRVJfUE9PTCwgMCwgTlVMTCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJlc3VsdCwgImNyZWF0ZWQgbmV3IGJ1ZmZlciBwb29sIik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWRlZmF1bHRfYWxsb2NfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICoqIGJ1ZmZlciwKLSAgICBHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyAqIHBhcmFtcykKLXsKLSAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXYgPSBwb29sLT5wcml2OwotCi0gICpidWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKHByaXYtPmFsbG9jYXRvciwgcHJpdi0+c2l6ZSwgJnByaXYtPnBhcmFtcyk7Ci0KLSAgaWYgKCEqYnVmZmVyKQotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotbWFya19tZXRhX3Bvb2xlZCAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RNZXRhICoqIG1ldGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoR1NUX0JVRkZFUl9QT09MICh1c2VyX2RhdGEpLAotICAgICAgIm1hcmtpbmcgbWV0YSAlcCBhcyBQT09MRUQgaW4gYnVmZmVyICVwIiwgKm1ldGEsIGJ1ZmZlcik7Ci0gIEdTVF9NRVRBX0ZMQUdfU0VUICgqbWV0YSwgR1NUX01FVEFfRkxBR19QT09MRUQpOwotICBHU1RfTUVUQV9GTEFHX1NFVCAoKm1ldGEsIEdTVF9NRVRBX0ZMQUdfTE9DS0VEKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWRvX2FsbG9jX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqKiBidWZmZXIsCi0gICAgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgKiBwYXJhbXMpCi17Ci0gIEdzdEJ1ZmZlclBvb2xQcml2YXRlICpwcml2ID0gcG9vbC0+cHJpdjsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQ7Ci0gIGdpbnQgY3VyX2J1ZmZlcnMsIG1heF9idWZmZXJzOwotICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKLQotICBwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIXBjbGFzcy0+YWxsb2NfYnVmZmVyKSkKLSAgICBnb3RvIG5vX2Z1bmN0aW9uOwotCi0gIG1heF9idWZmZXJzID0gcHJpdi0+bWF4X2J1ZmZlcnM7Ci0KLSAgLyogaW5jcmVtZW50IHRoZSBhbGxvY2F0aW9uIGNvdW50ZXIgKi8KLSAgY3VyX2J1ZmZlcnMgPSBnX2F0b21pY19pbnRfYWRkICgmcHJpdi0+Y3VyX2J1ZmZlcnMsIDEpOwotICBpZiAobWF4X2J1ZmZlcnMgJiYgY3VyX2J1ZmZlcnMgPj0gbWF4X2J1ZmZlcnMpCi0gICAgZ290byBtYXhfcmVhY2hlZDsKLQotICByZXN1bHQgPSBwY2xhc3MtPmFsbG9jX2J1ZmZlciAocG9vbCwgYnVmZmVyLCBwYXJhbXMpOwotICBpZiAoR19VTkxJS0VMWSAocmVzdWx0ICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIGFsbG9jX2ZhaWxlZDsKLQotICAvKiBsb2NrIGFsbCBtZXRhZGF0YSBhbmQgbWFyayBhcyBwb29sZWQsIHdlIHdhbnQgdGhpcyB0byByZW1haW4gb24KLSAgICogdGhlIGJ1ZmZlciBhbmQgd2Ugd2FudCB0byByZW1vdmUgYW55IG90aGVyIG1ldGFkYXRhIHRoYXQgZ2V0cyBhZGRlZAotICAgKiBsYXRlciAqLwotICBnc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YSAoKmJ1ZmZlciwgbWFya19tZXRhX3Bvb2xlZCwgcG9vbCk7Ci0KLSAgLyogdW4tdGFnIG1lbW9yeSwgdGhpcyBpcyBob3cgd2UgZXhwZWN0IHRoZSBidWZmZXIgd2hlbiBpdCBpcwotICAgKiByZWxlYXNlZCBhZ2FpbiAqLwotICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKCpidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZKTsKLQotICBHU1RfTE9HX09CSkVDVCAocG9vbCwgImFsbG9jYXRlZCBidWZmZXIgJWQvJWQsICVwIiwgY3VyX2J1ZmZlcnMsCi0gICAgICBtYXhfYnVmZmVycywgKmJ1ZmZlcik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2Z1bmN0aW9uOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgIm5vIGFsbG9jIGZ1bmN0aW9uIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gIH0KLW1heF9yZWFjaGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgIm1heCBidWZmZXJzIHJlYWNoZWQiKTsKLSAgICBnX2F0b21pY19pbnRfYWRkICgmcHJpdi0+Y3VyX2J1ZmZlcnMsIC0xKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci1hbGxvY19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBvb2wsICJhbGxvYyBmdW5jdGlvbiBmYWlsZWQiKTsKLSAgICBnX2F0b21pY19pbnRfYWRkICgmcHJpdi0+Y3VyX2J1ZmZlcnMsIC0xKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19Ci0KLS8qIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBwcmVhbGxvY2F0aW5nIHRoZSBidWZmZXJzIGluIHRoZSBwb29sICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWRlZmF1bHRfc3RhcnQgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKQotewotICBndWludCBpOwotICBHc3RCdWZmZXJQb29sUHJpdmF0ZSAqcHJpdiA9IHBvb2wtPnByaXY7Ci0gIEdzdEJ1ZmZlclBvb2xDbGFzcyAqcGNsYXNzOwotCi0gIHBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOwotCi0gIC8qIHdlIG5lZWQgdG8gcHJlYWxsb2MgYnVmZmVycyAqLwotICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bWluX2J1ZmZlcnM7IGkrKykgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gICAgaWYgKGRvX2FsbG9jX2J1ZmZlciAocG9vbCwgJmJ1ZmZlciwgTlVMTCkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIGFsbG9jX2ZhaWxlZDsKLQotICAgIC8qIHJlbGVhc2UgdG8gdGhlIHF1ZXVlLCB3ZSBjYWxsIHRoZSB2bWV0aG9kIGRpcmVjdGx5LCB3ZSBkb24ndCBuZWVkIHRvIGRvCi0gICAgICogdGhlIG90aGVyIHJlZmNvdW50IGhhbmRsaW5nIHJpZ2h0IG5vdy4gKi8KLSAgICBpZiAoR19MSUtFTFkgKHBjbGFzcy0+cmVsZWFzZV9idWZmZXIpKQotICAgICAgcGNsYXNzLT5yZWxlYXNlX2J1ZmZlciAocG9vbCwgYnVmZmVyKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWFsbG9jX2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocG9vbCwgImZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9jayAqLwotc3RhdGljIGdib29sZWFuCi1kb19zdGFydCAoR3N0QnVmZmVyUG9vbCAqIHBvb2wpCi17Ci0gIEdzdEJ1ZmZlclBvb2xQcml2YXRlICpwcml2ID0gcG9vbC0+cHJpdjsKLQotICBpZiAoIXByaXYtPnN0YXJ0ZWQpIHsKLSAgICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKLQotICAgIHBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJzdGFydGluZyIpOwotICAgIC8qIHN0YXJ0IHRoZSBwb29sLCBzdWJjbGFzc2VzIHNob3VsZCBhbGxvY2F0ZSBidWZmZXJzIGFuZCBwdXQgdGhlbQotICAgICAqIGluIHRoZSBxdWV1ZSAqLwotICAgIGlmIChHX0xJS0VMWSAocGNsYXNzLT5zdGFydCkpIHsKLSAgICAgIGlmICghcGNsYXNzLT5zdGFydCAocG9vbCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgcHJpdi0+c3RhcnRlZCA9IFRSVUU7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWZhdWx0X2ZyZWVfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fZnJlZV9idWZmZXIgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEJ1ZmZlclBvb2xQcml2YXRlICpwcml2OwotICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKLQotICBwcml2ID0gcG9vbC0+cHJpdjsKLSAgcGNsYXNzID0gR1NUX0JVRkZFUl9QT09MX0dFVF9DTEFTUyAocG9vbCk7Ci0KLSAgZ19hdG9taWNfaW50X2FkZCAoJnByaXYtPmN1cl9idWZmZXJzLCAtMSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChwb29sLCAiZnJlZWluZyBidWZmZXIgJXAgKCV1IGxlZnQpIiwgYnVmZmVyLAotICAgICAgcHJpdi0+Y3VyX2J1ZmZlcnMpOwotCi0gIGlmIChHX0xJS0VMWSAocGNsYXNzLT5mcmVlX2J1ZmZlcikpCi0gICAgcGNsYXNzLT5mcmVlX2J1ZmZlciAocG9vbCwgYnVmZmVyKTsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9jayAqLwotc3RhdGljIGdib29sZWFuCi1kZWZhdWx0X3N0b3AgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKQotewotICBHc3RCdWZmZXJQb29sUHJpdmF0ZSAqcHJpdiA9IHBvb2wtPnByaXY7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gIC8qIGNsZWFyIHRoZSBwb29sICovCi0gIHdoaWxlICgoYnVmZmVyID0gZ3N0X2F0b21pY19xdWV1ZV9wb3AgKHByaXYtPnF1ZXVlKSkpIHsKLSAgICB3aGlsZSAoIWdzdF9wb2xsX3JlYWRfY29udHJvbCAocHJpdi0+cG9sbCkpIHsKLSAgICAgIGlmIChlcnJubyA9PSBFV09VTERCTE9DSykgewotICAgICAgICAvKiBXZSBwdXQgdGhlIGJ1ZmZlciBpbnRvIHRoZSBxdWV1ZSBidXQgZGlkIG5vdCBmaW5pc2ggd3JpdGluZyBjb250cm9sCi0gICAgICAgICAqIHlldCwgbGV0J3Mgd2FpdCBhIGJpdCBhbmQgcmV0cnkgKi8KLSAgICAgICAgZ190aHJlYWRfeWllbGQgKCk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogQ3JpdGljYWwgZXJyb3IgYnV0IEdzdFBvbGwgYWxyZWFkeSBjb21wbGFpbmVkICovCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBkb19mcmVlX2J1ZmZlciAocG9vbCwgYnVmZmVyKTsKLSAgfQotICByZXR1cm4gcHJpdi0+Y3VyX2J1ZmZlcnMgPT0gMDsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9jayAqLwotc3RhdGljIGdib29sZWFuCi1kb19zdG9wIChHc3RCdWZmZXJQb29sICogcG9vbCkKLXsKLSAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXYgPSBwb29sLT5wcml2OwotCi0gIGlmIChwcml2LT5zdGFydGVkKSB7Ci0gICAgR3N0QnVmZmVyUG9vbENsYXNzICpwY2xhc3M7Ci0KLSAgICBwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAic3RvcHBpbmciKTsKLSAgICBpZiAoR19MSUtFTFkgKHBjbGFzcy0+c3RvcCkpIHsKLSAgICAgIGlmICghcGNsYXNzLT5zdG9wIChwb29sKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICBwcml2LT5zdGFydGVkID0gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGxvY2sgKi8KLXN0YXRpYyB2b2lkCi1kb19zZXRfZmx1c2hpbmcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBnYm9vbGVhbiBmbHVzaGluZykKLXsKLSAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXYgPSBwb29sLT5wcml2OwotICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKLQotICBwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKLQotICBpZiAoR1NUX0JVRkZFUl9QT09MX0lTX0ZMVVNISU5HIChwb29sKSA9PSBmbHVzaGluZykKLSAgICByZXR1cm47Ci0KLSAgaWYgKGZsdXNoaW5nKSB7Ci0gICAgZ19hdG9taWNfaW50X3NldCAoJnBvb2wtPmZsdXNoaW5nLCAxKTsKLSAgICAvKiBXcml0ZSB0aGUgZmx1c2ggdG9rZW4gdG8gd2FrZSB1cCBhbnkgd2FpdGVycyAqLwotICAgIGdzdF9wb2xsX3dyaXRlX2NvbnRyb2wgKHByaXYtPnBvbGwpOwotCi0gICAgaWYgKHBjbGFzcy0+Zmx1c2hfc3RhcnQpCi0gICAgICBwY2xhc3MtPmZsdXNoX3N0YXJ0IChwb29sKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAocGNsYXNzLT5mbHVzaF9zdG9wKQotICAgICAgcGNsYXNzLT5mbHVzaF9zdG9wIChwb29sKTsKLQotICAgIHdoaWxlICghZ3N0X3BvbGxfcmVhZF9jb250cm9sIChwcml2LT5wb2xsKSkgewotICAgICAgaWYgKGVycm5vID09IEVXT1VMREJMT0NLKSB7Ci0gICAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCByZWFsbHkgaGFwcGVuIHVubGVzcyBmbHVzaGluZyBhbmQgdW5mbHVzaGluZwotICAgICAgICAgKiBoYXBwZW5zIG9uIGRpZmZlcmVudCB0aHJlYWRzLiBMZXQncyB3YWl0IGEgYml0IHRvIGdldCBiYWNrIGZsdXNoCi0gICAgICAgICAqIHRva2VuIGZyb20gdGhlIHRocmVhZCB0aGF0IHdhcyBzZXR0aW5nIGl0IHRvIGZsdXNoaW5nICovCi0gICAgICAgIGdfdGhyZWFkX3lpZWxkICgpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIENyaXRpY2FsIGVycm9yIGJ1dCBHc3RQb2xsIGFscmVhZHkgY29tcGxhaW5lZCAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBnX2F0b21pY19pbnRfc2V0ICgmcG9vbC0+Zmx1c2hpbmcsIDApOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmU6Ci0gKiBAcG9vbDogYSAjR3N0QnVmZmVyUG9vbAotICogQGFjdGl2ZTogdGhlIG5ldyBhY3RpdmUgc3RhdGUKLSAqCi0gKiBDb250cm9sIHRoZSBhY3RpdmUgc3RhdGUgb2YgQHBvb2wuIFdoZW4gdGhlIHBvb2wgaXMgaW5hY3RpdmUsIG5ldyBjYWxscyB0bwotICogZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCkgd2lsbCByZXR1cm4gd2l0aCAlR1NUX0ZMT1dfRkxVU0hJTkcuCi0gKgotICogQWN0aXZhdGluZyB0aGUgYnVmZmVycG9vbCB3aWxsIHByZWFsbG9jYXRlIGFsbCByZXNvdXJjZXMgaW4gdGhlIHBvb2wgYmFzZWQgb24KLSAqIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwb29sLgotICoKLSAqIERlYWN0aXZhdGluZyB3aWxsIGZyZWUgdGhlIHJlc291cmNlcyBhZ2FpbiB3aGVuIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZwotICogYnVmZmVycy4gV2hlbiB0aGVyZSBhcmUgb3V0c3RhbmRpbmcgYnVmZmVycywgdGhleSB3aWxsIGJlIGZyZWVkIGFzIHNvb24gYXMKLSAqIHRoZXkgYXJlIGFsbCByZXR1cm5lZCB0byB0aGUgcG9vbC4KLSAqCi0gKiBSZXR1cm5zOiAlRkFMU0Ugd2hlbiB0aGUgcG9vbCB3YXMgbm90IGNvbmZpZ3VyZWQgb3Igd2hlbiBwcmVhbGxvY2F0aW9uIG9mIHRoZQotICogYnVmZmVycyBmYWlsZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXY7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfUE9PTCAocG9vbCksIEZBTFNFKTsKLQotICBHU1RfTE9HX09CSkVDVCAocG9vbCwgImFjdGl2ZSAlZCIsIGFjdGl2ZSk7Ci0KLSAgcHJpdiA9IHBvb2wtPnByaXY7Ci0KLSAgR1NUX0JVRkZFUl9QT09MX0xPQ0sgKHBvb2wpOwotICAvKiBqdXN0IHJldHVybiBpZiB3ZSBhcmUgYWxyZWFkeSBpbiB0aGUgcmlnaHQgc3RhdGUgKi8KLSAgaWYgKHByaXYtPmFjdGl2ZSA9PSBhY3RpdmUpCi0gICAgZ290byB3YXNfb2s7Ci0KLSAgLyogd2UgbmVlZCB0byBiZSBjb25maWd1cmVkICovCi0gIGlmICghcHJpdi0+Y29uZmlndXJlZCkKLSAgICBnb3RvIG5vdF9jb25maWd1cmVkOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBpZiAoIWRvX3N0YXJ0IChwb29sKSkKLSAgICAgIGdvdG8gc3RhcnRfZmFpbGVkOwotCi0gICAgLyogZmx1c2hfc3RvcCBteSByZWxlYXNlIGJ1ZmZlcnMsIHNldHRpbmcgdG8gYWN0aXZlIHRvIGF2b2lkIHJ1bm5pbmcKLSAgICAgKiBkb19zdG9wIHdoaWxlIGFjdGl2YXRpbmcgdGhlIHBvb2wgKi8KLSAgICBwcml2LT5hY3RpdmUgPSBUUlVFOwotCi0gICAgLyogdW5zZXQgdGhlIGZsdXNoaW5nIHN0YXRlIG5vdyAqLwotICAgIGRvX3NldF9mbHVzaGluZyAocG9vbCwgRkFMU0UpOwotICB9IGVsc2UgewotICAgIGdpbnQgb3V0c3RhbmRpbmc7Ci0KLSAgICAvKiBzZXQgdG8gZmx1c2hpbmcgZmlyc3QgKi8KLSAgICBkb19zZXRfZmx1c2hpbmcgKHBvb2wsIFRSVUUpOwotCi0gICAgLyogd2hlbiBhbGwgYnVmZmVycyBhcmUgaW4gdGhlIHBvb2wsIGZyZWUgdGhlbS4gRWxzZSB0aGV5IHdpbGwgYmUKLSAgICAgKiBmcmVlZCB3aGVuIHRoZXkgYXJlIHJlbGVhc2VkICovCi0gICAgb3V0c3RhbmRpbmcgPSBnX2F0b21pY19pbnRfZ2V0ICgmcHJpdi0+b3V0c3RhbmRpbmcpOwotICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAib3V0c3RhbmRpbmcgYnVmZmVycyAlZCIsIG91dHN0YW5kaW5nKTsKLSAgICBpZiAob3V0c3RhbmRpbmcgPT0gMCkgewotICAgICAgaWYgKCFkb19zdG9wIChwb29sKSkKLSAgICAgICAgZ290byBzdG9wX2ZhaWxlZDsKLSAgICB9Ci0KLSAgICBwcml2LT5hY3RpdmUgPSBGQUxTRTsKLSAgfQotICBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLIChwb29sKTsKLQotICByZXR1cm4gcmVzOwotCi13YXNfb2s6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwb29sLCAicG9vbCB3YXMgaW4gdGhlIHJpZ2h0IHN0YXRlIik7Ci0gICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLW5vdF9jb25maWd1cmVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgInBvb2wgd2FzIG5vdCBjb25maWd1cmVkIik7Ci0gICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1zdGFydF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwb29sLCAic3RhcnQgZmFpbGVkIik7Ci0gICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1zdG9wX2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocG9vbCwgInN0b3AgZmFpbGVkIik7Ci0gICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZToKLSAqIEBwb29sOiBhICNHc3RCdWZmZXJQb29sCi0gKgotICogQ2hlY2sgaWYgQHBvb2wgaXMgYWN0aXZlLiBBIHBvb2wgY2FuIGJlIGFjdGl2YXRlZCB3aXRoIHRoZQotICogZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUoKSBjYWxsLgotICoKLSAqIFJldHVybnM6ICVUUlVFIHdoZW4gdGhlIHBvb2wgaXMgYWN0aXZlLgotICovCi1nYm9vbGVhbgotZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAoR3N0QnVmZmVyUG9vbCAqIHBvb2wpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBHU1RfQlVGRkVSX1BPT0xfTE9DSyAocG9vbCk7Ci0gIHJlcyA9IHBvb2wtPnByaXYtPmFjdGl2ZTsKLSAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1kZWZhdWx0X3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RTdHJ1Y3R1cmUgKiBjb25maWcpCi17Ci0gIEdzdEJ1ZmZlclBvb2xQcml2YXRlICpwcml2ID0gcG9vbC0+cHJpdjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3VpbnQgc2l6ZSwgbWluX2J1ZmZlcnMsIG1heF9idWZmZXJzOwotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci0KLSAgLyogcGFyc2UgdGhlIGNvbmZpZyBhbmQga2VlcCBhcm91bmQgKi8KLSAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9wYXJhbXMgKGNvbmZpZywgJmNhcHMsICZzaXplLCAmbWluX2J1ZmZlcnMsCi0gICAgICAgICAgJm1heF9idWZmZXJzKSkKLSAgICBnb3RvIHdyb25nX2NvbmZpZzsKLQotICBpZiAoIWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X2FsbG9jYXRvciAoY29uZmlnLCAmYWxsb2NhdG9yLCAmcGFyYW1zKSkKLSAgICBnb3RvIHdyb25nX2NvbmZpZzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwb29sLCAiY29uZmlnICUiIEdTVF9QVFJfRk9STUFULCBjb25maWcpOwotCi0gIHByaXYtPnNpemUgPSBzaXplOwotICBwcml2LT5taW5fYnVmZmVycyA9IG1pbl9idWZmZXJzOwotICBwcml2LT5tYXhfYnVmZmVycyA9IG1heF9idWZmZXJzOwotICBwcml2LT5jdXJfYnVmZmVycyA9IDA7Ci0KLSAgaWYgKHByaXYtPmFsbG9jYXRvcikKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwcml2LT5hbGxvY2F0b3IpOwotICBpZiAoKHByaXYtPmFsbG9jYXRvciA9IGFsbG9jYXRvcikpCi0gICAgZ3N0X29iamVjdF9yZWYgKGFsbG9jYXRvcik7Ci0gIHByaXYtPnBhcmFtcyA9IHBhcmFtczsKLQotICByZXR1cm4gVFJVRTsKLQotd3JvbmdfY29uZmlnOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLCAiaW52YWxpZCBjb25maWcgJSIgR1NUX1BUUl9GT1JNQVQsIGNvbmZpZyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWc6Ci0gKiBAcG9vbDogYSAjR3N0QnVmZmVyUG9vbAotICogQGNvbmZpZzogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHBvb2wuIElmIHRoZSBwb29sIGlzIGFscmVhZHkgY29uZmlndXJlZCwgYW5kCi0gKiB0aGUgY29uZmlndXJhdGlvbiBoYXZlbid0IGNoYW5nZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAlVFJVRS4gSWYgdGhlCi0gKiBwb29sIGlzIGFjdGl2ZSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gJUZBTFNFIGFuZCBhY3RpdmUgY29uZmlndXJhdGlvbgotICogd2lsbCByZW1haW4uIEJ1ZmZlcnMgYWxsb2NhdGVkIGZvcm0gdGhpcyBwb29sIG11c3QgYmUgcmV0dXJuZWQgb3IgZWxzZSB0aGlzCi0gKiBmdW5jdGlvbiB3aWxsIGRvIG5vdGhpbmcgYW5kIHJldHVybiAlRkFMU0UuCi0gKgotICogQGNvbmZpZyBpcyBhICNHc3RTdHJ1Y3R1cmUgdGhhdCBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvcgotICogdGhlIHBvb2wuIEEgZGVmYXVsdCBhbmQgbWFuZGF0b3J5IHNldCBvZiBwYXJhbWV0ZXJzIGNhbiBiZSBjb25maWd1cmVkIHdpdGgKLSAqIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcygpLCBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9hbGxvY2F0b3IoKQotICogYW5kIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbigpLgotICoKLSAqIElmIHRoZSBwYXJhbWV0ZXJzIGluIEBjb25maWcgY2FuIG5vdCBiZSBzZXQgZXhhY3RseSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zCi0gKiAlRkFMU0UgYW5kIHdpbGwgdHJ5IHRvIHVwZGF0ZSBhcyBtdWNoIHN0YXRlIGFzIHBvc3NpYmxlLiBUaGUgbmV3IHN0YXRlIGNhbgotICogdGhlbiBiZSByZXRyaWV2ZWQgYW5kIHJlZmluZWQgd2l0aCBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZygpLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIEBjb25maWcuCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBjb3VsZCBiZSBzZXQuCi0gKi8KLWdib29sZWFuCi1nc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKLSAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXY7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfUE9PTCAocG9vbCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcHJpdiA9IHBvb2wtPnByaXY7Ci0KLSAgR1NUX0JVRkZFUl9QT09MX0xPQ0sgKHBvb2wpOwotCi0gIC8qIG5vdGhpbmcgdG8gZG8gaWYgY29uZmlnIGlzIHVuY2hhbmdlZCAqLwotICBpZiAocHJpdi0+Y29uZmlndXJlZCAmJiBnc3Rfc3RydWN0dXJlX2lzX2VxdWFsIChjb25maWcsIHByaXYtPmNvbmZpZykpCi0gICAgZ290byBjb25maWdfdW5jaGFuZ2VkOwotCi0gIC8qIGNhbid0IGNoYW5nZSB0aGUgc2V0dGluZ3Mgd2hlbiBhY3RpdmUgKi8KLSAgaWYgKHByaXYtPmFjdGl2ZSkKLSAgICBnb3RvIHdhc19hY3RpdmU7Ci0KLSAgLyogd2UgY2FuJ3QgY2hhbmdlIHdoZW4gb3V0c3RhbmRpbmcgYnVmZmVycyAqLwotICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnByaXYtPm91dHN0YW5kaW5nKSAhPSAwKQotICAgIGdvdG8gaGF2ZV9vdXRzdGFuZGluZzsKLQotICBwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKLQotICAvKiBzZXQgdGhlIG5ldyBjb25maWcgKi8KLSAgaWYgKEdfTElLRUxZIChwY2xhc3MtPnNldF9jb25maWcpKQotICAgIHJlc3VsdCA9IHBjbGFzcy0+c2V0X2NvbmZpZyAocG9vbCwgY29uZmlnKTsKLSAgZWxzZQotICAgIHJlc3VsdCA9IEZBTFNFOwotCi0gIC8qIHNhdmUgdGhlIGNvbmZpZyByZWdhcmRsZXNzIG9mIHRoZSByZXN1bHQgc28gdXNlciBjYW4gcmVhZCBiYWNrIHRoZQotICAgKiBtb2RpZmllZCBjb25maWcgYW5kIGV2YWx1YXRlIGlmIHRoZSBjaGFuZ2VzIGFyZSBhY2NlcHRhYmxlICovCi0gIGlmIChwcml2LT5jb25maWcpCi0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwcml2LT5jb25maWcpOwotICBwcml2LT5jb25maWcgPSBjb25maWc7Ci0KLSAgaWYgKHJlc3VsdCkgewotICAgIC8qIG5vdyB3ZSBhcmUgY29uZmlndXJlZCAqLwotICAgIHByaXYtPmNvbmZpZ3VyZWQgPSBUUlVFOwotICB9Ci0gIEdTVF9CVUZGRVJfUE9PTF9VTkxPQ0sgKHBvb2wpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLWNvbmZpZ191bmNoYW5nZWQ6Ci0gIHsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGNvbmZpZyk7Ci0gICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgLyogRVJST1JTICovCi13YXNfYWN0aXZlOgotICB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChjb25maWcpOwotICAgIEdTVF9JTkZPX09CSkVDVCAocG9vbCwgImNhbid0IGNoYW5nZSBjb25maWcsIHdlIGFyZSBhY3RpdmUiKTsKLSAgICBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLIChwb29sKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWhhdmVfb3V0c3RhbmRpbmc6Ci0gIHsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGNvbmZpZyk7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLCAiY2FuJ3QgY2hhbmdlIGNvbmZpZywgaGF2ZSBvdXRzdGFuZGluZyBidWZmZXJzIik7Ci0gICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWc6Ci0gKiBAcG9vbDogYSAjR3N0QnVmZmVyUG9vbAotICoKLSAqIEdldCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9vbC4gVGhpcyBjb25maWd1cmF0aW9uCi0gKiBjYW4gZWl0aGVyIGJlIG1vZGlmaWVkIGFuZCB1c2VkIGZvciB0aGUgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcoKSBjYWxsCi0gKiBvciBpdCBtdXN0IGJlIGZyZWVkIGFmdGVyIHVzYWdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgQHBvb2wuIHVzZQotICogZ3N0X3N0cnVjdHVyZV9mcmVlKCkgYWZ0ZXIgdXNhZ2Ugb3IgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcoKS4KLSAqLwotR3N0U3RydWN0dXJlICoKLWdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCkKLXsKLSAgR3N0U3RydWN0dXJlICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfUE9PTCAocG9vbCksIE5VTEwpOwotCi0gIEdTVF9CVUZGRVJfUE9PTF9MT0NLIChwb29sKTsKLSAgcmVzdWx0ID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChwb29sLT5wcml2LT5jb25maWcpOwotICBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLIChwb29sKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmVtcHR5X29wdGlvbltdID0geyBOVUxMIH07Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zOgotICogQHBvb2w6IGEgI0dzdEJ1ZmZlclBvb2wKLSAqCi0gKiBHZXQgYSAlTlVMTCB0ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZyB3aXRoIHN1cHBvcnRlZCBidWZmZXJwb29sIG9wdGlvbnMgZm9yCi0gKiBAcG9vbC4gQW4gb3B0aW9uIHdvdWxkIHR5cGljYWxseSBiZSBlbmFibGVkIHdpdGgKLSAqIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbigpLgotICoKLSAqIFJldHVybnM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKHRyYW5zZmVyIG5vbmUpOiBhICVOVUxMIHRlcm1pbmF0ZWQgYXJyYXkKLSAqICAgICAgICAgIG9mIHN0cmluZ3MuCi0gKi8KLWNvbnN0IGdjaGFyICoqCi1nc3RfYnVmZmVyX3Bvb2xfZ2V0X29wdGlvbnMgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKQotewotICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzczsKLSAgY29uc3QgZ2NoYXIgKipyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVJfUE9PTCAocG9vbCksIE5VTEwpOwotCi0gIHBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOwotCi0gIGlmIChHX0xJS0VMWSAocGNsYXNzLT5nZXRfb3B0aW9ucykpIHsKLSAgICBpZiAoKHJlc3VsdCA9IHBjbGFzcy0+Z2V0X29wdGlvbnMgKHBvb2wpKSA9PSBOVUxMKQotICAgICAgZ290byBpbnZhbGlkX3Jlc3VsdDsKLSAgfSBlbHNlCi0gICAgcmVzdWx0ID0gZW1wdHlfb3B0aW9uOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1IgKi8KLWludmFsaWRfcmVzdWx0OgotICB7Ci0gICAgZ193YXJuaW5nICgiYnVmZmVycG9vbCBzdWJjbGFzcyByZXR1cm5lZCBOVUxMIG9wdGlvbnMiKTsKLSAgICByZXR1cm4gZW1wdHlfb3B0aW9uOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wb29sX2hhc19vcHRpb246Ci0gKiBAcG9vbDogYSAjR3N0QnVmZmVyUG9vbAotICogQG9wdGlvbjogYW4gb3B0aW9uCi0gKgotICogQ2hlY2sgaWYgdGhlIGJ1ZmZlcnBvb2wgc3VwcG9ydHMgQG9wdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgYnVmZmVyIHBvb2wgY29udGFpbnMgQG9wdGlvbi4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uIChHc3RCdWZmZXJQb29sICogcG9vbCwgY29uc3QgZ2NoYXIgKiBvcHRpb24pCi17Ci0gIGd1aW50IGk7Ci0gIGNvbnN0IGdjaGFyICoqb3B0aW9uczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9QT09MIChwb29sKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAob3B0aW9uICE9IE5VTEwsIEZBTFNFKTsKLQotICBvcHRpb25zID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zIChwb29sKTsKLQotICBmb3IgKGkgPSAwOyBvcHRpb25zW2ldOyBpKyspIHsKLSAgICBpZiAoZ19zdHJfZXF1YWwgKG9wdGlvbnNbaV0sIG9wdGlvbikpCi0gICAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zOgotICogQGNvbmZpZzogYSAjR3N0QnVmZmVyUG9vbCBjb25maWd1cmF0aW9uCi0gKiBAY2FwczogY2FwcyBmb3IgdGhlIGJ1ZmZlcnMKLSAqIEBzaXplOiB0aGUgc2l6ZSBvZiBlYWNoIGJ1ZmZlciwgbm90IGluY2x1ZGluZyBwcmVmaXggYW5kIHBhZGRpbmcKLSAqIEBtaW5fYnVmZmVyczogdGhlIG1pbmltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUuCi0gKiBAbWF4X2J1ZmZlcnM6IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBidWZmZXJzIHRvIGFsbG9jYXRlIG9yIDAgZm9yIHVubGltaXRlZC4KLSAqCi0gKiBDb25maWd1cmUgQGNvbmZpZyB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgotICovCi12b2lkCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKEdzdFN0cnVjdHVyZSAqIGNvbmZpZywgR3N0Q2FwcyAqIGNhcHMsCi0gICAgZ3VpbnQgc2l6ZSwgZ3VpbnQgbWluX2J1ZmZlcnMsIGd1aW50IG1heF9idWZmZXJzKQotewotICBnX3JldHVybl9pZl9mYWlsIChjb25maWcgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1heF9idWZmZXJzID09IDAgfHwgbWluX2J1ZmZlcnMgPD0gbWF4X2J1ZmZlcnMpOwotICBnX3JldHVybl9pZl9mYWlsIChjYXBzID09IE5VTEwgfHwgZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoY29uZmlnLAotICAgICAgR1NUX1FVQVJLIChDQVBTKSwgR1NUX1RZUEVfQ0FQUywgY2FwcywKLSAgICAgIEdTVF9RVUFSSyAoU0laRSksIEdfVFlQRV9VSU5ULCBzaXplLAotICAgICAgR1NUX1FVQVJLIChNSU5fQlVGRkVSUyksIEdfVFlQRV9VSU5ULCBtaW5fYnVmZmVycywKLSAgICAgIEdTVF9RVUFSSyAoTUFYX0JVRkZFUlMpLCBHX1RZUEVfVUlOVCwgbWF4X2J1ZmZlcnMsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvcjoKLSAqIEBjb25maWc6IGEgI0dzdEJ1ZmZlclBvb2wgY29uZmlndXJhdGlvbgotICogQGFsbG9jYXRvcjogKGFsbG93LW5vbmUpOiBhICNHc3RBbGxvY2F0b3IKLSAqIEBwYXJhbXM6IChhbGxvdy1ub25lKTogI0dzdEFsbG9jYXRpb25QYXJhbXMKLSAqCi0gKiBTZXQgdGhlIEBhbGxvY2F0b3IgYW5kIEBwYXJhbXMgb24gQGNvbmZpZy4KLSAqCi0gKiBPbmUgb2YgQGFsbG9jYXRvciBhbmQgQHBhcmFtcyBjYW4gYmUgJU5VTEwsIGJ1dCBub3QgYm90aC4gV2hlbiBAYWxsb2NhdG9yCi0gKiBpcyAlTlVMTCwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIG9mIHRoZSBwb29sIHdpbGwgdXNlIHRoZSB2YWx1ZXMgaW4gQHBhcmFtCi0gKiB0byBwZXJmb3JtIGl0cyBhbGxvY2F0aW9uLiBXaGVuIEBwYXJhbSBpcyAlTlVMTCwgdGhlIHBvb2wgd2lsbCB1c2UgdGhlCi0gKiBwcm92aWRlZCBAYWxsb2NhdG9yIHdpdGggaXRzIGRlZmF1bHQgI0dzdEFsbG9jYXRpb25QYXJhbXMuCi0gKgotICogQSBjYWxsIHRvIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnKCkgY2FuIHVwZGF0ZSB0aGUgYWxsb2NhdG9yIGFuZCBwYXJhbXMKLSAqIHdpdGggdGhlIHZhbHVlcyB0aGF0IGl0IGlzIGFibGUgdG8gZG8uIFNvbWUgcG9vbHMgYXJlLCBmb3IgZXhhbXBsZSwgbm90IGFibGUKLSAqIHRvIG9wZXJhdGUgd2l0aCBkaWZmZXJlbnQgYWxsb2NhdG9ycyBvciBjYW5ub3QgYWxsb2NhdGUgd2l0aCB0aGUgdmFsdWVzCi0gKiBzcGVjaWZpZWQgaW4gQHBhcmFtcy4gVXNlIGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnKCkgdG8gZ2V0IHRoZSBjdXJyZW50bHkKLSAqIHVzZWQgdmFsdWVzLgotICovCi12b2lkCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9hbGxvY2F0b3IgKEdzdFN0cnVjdHVyZSAqIGNvbmZpZywKLSAgICBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGNvbnN0IEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoYWxsb2NhdG9yICE9IE5VTEwgfHwgcGFyYW1zICE9IE5VTEwpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChjb25maWcsCi0gICAgICBHU1RfUVVBUksgKEFMTE9DQVRPUiksIEdTVF9UWVBFX0FMTE9DQVRPUiwgYWxsb2NhdG9yLAotICAgICAgR1NUX1FVQVJLIChQQVJBTVMpLCBHU1RfVFlQRV9BTExPQ0FUSU9OX1BBUkFNUywgcGFyYW1zLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb246Ci0gKiBAY29uZmlnOiBhICNHc3RCdWZmZXJQb29sIGNvbmZpZ3VyYXRpb24KLSAqIEBvcHRpb246IGFuIG9wdGlvbiB0byBhZGQKLSAqCi0gKiBFbmFibGVkIHRoZSBvcHRpb24gaW4gQGNvbmZpZy4gVGhpcyB3aWxsIGluc3RydWN0IHRoZSBAYnVmZmVycG9vbCB0byBlbmFibGUKLSAqIHRoZSBzcGVjaWZpZWQgb3B0aW9uIG9uIHRoZSBidWZmZXJzIHRoYXQgaXQgYWxsb2NhdGVzLgotICoKLSAqIFRoZSBzdXBwb3J0ZWQgb3B0aW9ucyBieSBAcG9vbCBjYW4gYmUgcmV0cmlldmVkIHdpdGggZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zKCkuCi0gKi8KLXZvaWQKLWdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoR3N0U3RydWN0dXJlICogY29uZmlnLCBjb25zdCBnY2hhciAqIG9wdGlvbikKLXsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLSAgR1ZhbHVlIG9wdGlvbl92YWx1ZSA9IHsgMCwgfTsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMKTsKLQotICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChjb25maWcsIEdTVF9RVUFSSyAoT1BUSU9OUykpOwotICBpZiAodmFsdWUpIHsKLSAgICBsZW4gPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHZhbHVlKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqbnRoX3ZhbCA9IGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKHZhbHVlLCBpKTsKLQotICAgICAgaWYgKGdfc3RyX2VxdWFsIChvcHRpb24sIGdfdmFsdWVfZ2V0X3N0cmluZyAobnRoX3ZhbCkpKQotICAgICAgICByZXR1cm47Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdWYWx1ZSBuZXdfYXJyYXlfdmFsID0geyAwLCB9OwotCi0gICAgZ192YWx1ZV9pbml0ICgmbmV3X2FycmF5X3ZhbCwgR1NUX1RZUEVfQVJSQVkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAoY29uZmlnLCBHU1RfUVVBUksgKE9QVElPTlMpLCAmbmV3X2FycmF5X3ZhbCk7Ci0gICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoY29uZmlnLCBHU1RfUVVBUksgKE9QVElPTlMpKTsKLSAgfQotICBnX3ZhbHVlX2luaXQgKCZvcHRpb25fdmFsdWUsIEdfVFlQRV9TVFJJTkcpOwotICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZvcHRpb25fdmFsdWUsIG9wdGlvbik7Ci0gIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKChHVmFsdWUgKikgdmFsdWUsICZvcHRpb25fdmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zOgotICogQGNvbmZpZzogYSAjR3N0QnVmZmVyUG9vbCBjb25maWd1cmF0aW9uCi0gKgotICogUmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgb3B0aW9ucyBhcnJheSBvZiB0aGUKLSAqIEBjb25maWcgc3RydWN0dXJlLgotICoKLSAqIFJldHVybnM6IHRoZSBvcHRpb25zIGFycmF5IHNpemUgYXMgYSAjZ3VpbnQuCi0gKi8KLWd1aW50Ci1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX25fb3B0aW9ucyAoR3N0U3RydWN0dXJlICogY29uZmlnKQotewotICBjb25zdCBHVmFsdWUgKnZhbHVlOwotICBndWludCBzaXplID0gMDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29uZmlnICE9IE5VTEwsIDApOwotCi0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGNvbmZpZywgR1NUX1FVQVJLIChPUFRJT05TKSk7Ci0gIGlmICh2YWx1ZSkgewotICAgIHNpemUgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHZhbHVlKTsKLSAgfQotICByZXR1cm4gc2l6ZTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb246Ci0gKiBAY29uZmlnOiBhICNHc3RCdWZmZXJQb29sIGNvbmZpZ3VyYXRpb24KLSAqIEBpbmRleDogcG9zaXRpb24gaW4gdGhlIG9wdGlvbiBhcnJheSB0byByZWFkCi0gKgotICogUGFyc2UgYW4gYXZhaWxhYmxlIEBjb25maWcgYW5kIGdldCB0aGUgb3B0aW9uIGF0IEBpbmRleCBvZiB0aGUgb3B0aW9ucyBBUEkKLSAqIGFycmF5LgotICoKLSAqIFJldHVybnM6IGEgI2djaGFyIG9mIHRoZSBvcHRpb24gYXQgQGluZGV4LgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9vcHRpb24gKEdzdFN0cnVjdHVyZSAqIGNvbmZpZywgZ3VpbnQgaW5kZXgpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0gIGNvbnN0IGdjaGFyICpyZXQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb25maWcgIT0gTlVMTCwgMCk7Ci0KLSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoY29uZmlnLCBHU1RfUVVBUksgKE9QVElPTlMpKTsKLSAgaWYgKHZhbHVlKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpvcHRpb25fdmFsdWU7Ci0KLSAgICBvcHRpb25fdmFsdWUgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlICh2YWx1ZSwgaW5kZXgpOwotICAgIGlmIChvcHRpb25fdmFsdWUpCi0gICAgICByZXQgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKG9wdGlvbl92YWx1ZSk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2hhc19vcHRpb246Ci0gKiBAY29uZmlnOiBhICNHc3RCdWZmZXJQb29sIGNvbmZpZ3VyYXRpb24KLSAqIEBvcHRpb246IGFuIG9wdGlvbgotICoKLSAqIENoZWNrIGlmIEBjb25maWcgY29udGFpbnMgQG9wdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgb3B0aW9ucyBhcnJheSBjb250YWlucyBAb3B0aW9uLgotICovCi1nYm9vbGVhbgotZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uIChHc3RTdHJ1Y3R1cmUgKiBjb25maWcsIGNvbnN0IGdjaGFyICogb3B0aW9uKQotewotICBjb25zdCBHVmFsdWUgKnZhbHVlOwotICBndWludCBpLCBsZW47Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMLCAwKTsKLQotICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChjb25maWcsIEdTVF9RVUFSSyAoT1BUSU9OUykpOwotICBpZiAodmFsdWUpIHsKLSAgICBsZW4gPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHZhbHVlKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqbnRoX3ZhbCA9IGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKHZhbHVlLCBpKTsKLQotICAgICAgaWYgKGdfc3RyX2VxdWFsIChvcHRpb24sIGdfdmFsdWVfZ2V0X3N0cmluZyAobnRoX3ZhbCkpKQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X3BhcmFtczoKLSAqIEBjb25maWc6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0QnVmZmVyUG9vbCBjb25maWd1cmF0aW9uCi0gKiBAY2FwczogKG91dCkgKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlIGNhcHMgb2YgYnVmZmVycwotICogQHNpemU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHNpemUgb2YgZWFjaCBidWZmZXIsIG5vdCBpbmNsdWRpbmcgcHJlZml4IGFuZCBwYWRkaW5nCi0gKiBAbWluX2J1ZmZlcnM6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIG1pbmltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUuCi0gKiBAbWF4X2J1ZmZlcnM6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgb3IgMCBmb3IgdW5saW1pdGVkLgotICoKLSAqIEdldCB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMgZnJvbSBAY29uZmlnLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGNvdWxkIGJlIGZldGNoZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9wYXJhbXMgKEdzdFN0cnVjdHVyZSAqIGNvbmZpZywgR3N0Q2FwcyAqKiBjYXBzLAotICAgIGd1aW50ICogc2l6ZSwgZ3VpbnQgKiBtaW5fYnVmZmVycywgZ3VpbnQgKiBtYXhfYnVmZmVycykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKGNhcHMpIHsKLSAgICAqY2FwcyA9IGdfdmFsdWVfZ2V0X2JveGVkIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoY29uZmlnLAotICAgICAgICAgICAgR1NUX1FVQVJLIChDQVBTKSkpOwotICB9Ci0gIHJldHVybiBnc3Rfc3RydWN0dXJlX2lkX2dldCAoY29uZmlnLAotICAgICAgR1NUX1FVQVJLIChTSVpFKSwgR19UWVBFX1VJTlQsIHNpemUsCi0gICAgICBHU1RfUVVBUksgKE1JTl9CVUZGRVJTKSwgR19UWVBFX1VJTlQsIG1pbl9idWZmZXJzLAotICAgICAgR1NUX1FVQVJLIChNQVhfQlVGRkVSUyksIEdfVFlQRV9VSU5ULCBtYXhfYnVmZmVycywgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfYWxsb2NhdG9yOgotICogQGNvbmZpZzogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RCdWZmZXJQb29sIGNvbmZpZ3VyYXRpb24KLSAqIEBhbGxvY2F0b3I6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEFsbG9jYXRvciwgb3IgJU5VTEwKLSAqIEBwYXJhbXM6IChvdXQpIChhbGxvdy1ub25lKTogI0dzdEFsbG9jYXRpb25QYXJhbXMsIG9yICVOVUxMCi0gKgotICogR2V0IHRoZSBAYWxsb2NhdG9yIGFuZCBAcGFyYW1zIGZyb20gQGNvbmZpZy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgdGhlIHZhbHVlcyBhcmUgc2V0LiAKLSAqLwotZ2Jvb2xlYW4KLWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X2FsbG9jYXRvciAoR3N0U3RydWN0dXJlICogY29uZmlnLAotICAgIEdzdEFsbG9jYXRvciAqKiBhbGxvY2F0b3IsIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb25maWcgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChhbGxvY2F0b3IpCi0gICAgKmFsbG9jYXRvciA9IGdfdmFsdWVfZ2V0X29iamVjdCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGNvbmZpZywKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQUxMT0NBVE9SKSkpOwotICBpZiAocGFyYW1zKSB7Ci0gICAgR3N0QWxsb2NhdGlvblBhcmFtcyAqcDsKLQotICAgIHAgPSBnX3ZhbHVlX2dldF9ib3hlZCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGNvbmZpZywKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoUEFSQU1TKSkpOwotICAgIGlmIChwKSB7Ci0gICAgICAqcGFyYW1zID0gKnA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0IChwYXJhbXMpOwotICAgIH0KLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3ZhbGlkYXRlX3BhcmFtczoKLSAqIEBjb25maWc6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0QnVmZmVyUG9vbCBjb25maWd1cmF0aW9uCi0gKiBAY2FwczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgZXhjZXB0ZWQgY2FwcyBvZiBidWZmZXJzCi0gKiBAc2l6ZTogdGhlIGV4cGVjdGVkIHNpemUgb2YgZWFjaCBidWZmZXIsIG5vdCBpbmNsdWRpbmcgcHJlZml4IGFuZCBwYWRkaW5nCi0gKiBAbWluX2J1ZmZlcnM6IHRoZSBleHBlY3RlZCBtaW5pbXVtIGFtb3VudCBvZiBidWZmZXJzIHRvIGFsbG9jYXRlLgotICogQG1heF9idWZmZXJzOiB0aGUgZXhwZWN0IG1heGltdW0gYW1vdW50IG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgb3IgMCBmb3IgdW5saW1pdGVkLgotICoKLSAqIFZhbGlkYXRlIHRoYXQgY2hhbmdlcyBtYWRlIHRvIEBjb25maWcgYXJlIHN0aWxsIHZhbGlkIGluIHRoZSBjb250ZXh0IG9mIHRoZQotICogZXhwZWN0ZWQgcGFyYW1ldGVycy4gVGhpcyBmdW5jdGlvbiBpcyBhIGhlbHBlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlCi0gKiBjaGFuZ2VzIG1hZGUgYnkgYSBwb29sIHRvIGEgY29uZmlnIHdoZW4gZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcoKQotICogcmV0dXJucyAlRkFMU0UuIFRoaXMgZXhwZWN0cyB0aGF0IEBjYXBzIGhhdmVuJ3QgY2hhbmdlZCBhbmQgdGhhdAotICogQG1pbl9idWZmZXJzIGFyZW4ndCBsb3dlciB0aGVuIHdoYXQgd2UgaW5pdGlhbGx5IGV4cGVjdGVkLgotICogVGhpcyBkb2VzIG5vdCBjaGVjayBpZiBvcHRpb25zIG9yIGFsbG9jYXRvciBwYXJhbWV0ZXJzIGFyZSBzdGlsbCB2YWxpZCwKLSAqIHdvbid0IGNoZWNrIGlmIHNpemUgaGF2ZSBjaGFuZ2VkLCBzaW5jZSBjaGFuZ2luZyB0aGUgc2l6ZSBpcyB2YWxpZCB0byBhZGFwdAotICogcGFkZGluZy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBpbiB0aGlzIGNvbnRleHQuCi0gKi8KLWdib29sZWFuCi1nc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3ZhbGlkYXRlX3BhcmFtcyAoR3N0U3RydWN0dXJlICogY29uZmlnLCBHc3RDYXBzICogY2FwcywKLSAgICBndWludCBzaXplLCBndWludCBtaW5fYnVmZmVycywgR19HTlVDX1VOVVNFRCBndWludCBtYXhfYnVmZmVycykKLXsKLSAgR3N0Q2FwcyAqbmV3Y2FwczsKLSAgZ3VpbnQgbmV3c2l6ZSwgbmV3bWluOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29uZmlnICE9IE5VTEwsIEZBTFNFKTsKLQotICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9wYXJhbXMgKGNvbmZpZywgJm5ld2NhcHMsICZuZXdzaXplLCAmbmV3bWluLCBOVUxMKTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMsIG5ld2NhcHMpICYmIChuZXdzaXplID49IHNpemUpCi0gICAgICAmJiAobmV3bWluID49IG1pbl9idWZmZXJzKSkKLSAgICByZXQgPSBUUlVFOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1kZWZhdWx0X2FjcXVpcmVfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICoqIGJ1ZmZlciwKLSAgICBHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyAqIHBhcmFtcykKLXsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQ7Ci0gIEdzdEJ1ZmZlclBvb2xQcml2YXRlICpwcml2ID0gcG9vbC0+cHJpdjsKLQotICB3aGlsZSAoVFJVRSkgewotICAgIGlmIChHX1VOTElLRUxZIChHU1RfQlVGRkVSX1BPT0xfSVNfRkxVU0hJTkcgKHBvb2wpKSkKLSAgICAgIGdvdG8gZmx1c2hpbmc7Ci0KLSAgICAvKiB0cnkgdG8gZ2V0IGEgYnVmZmVyIGZyb20gdGhlIHF1ZXVlICovCi0gICAgKmJ1ZmZlciA9IGdzdF9hdG9taWNfcXVldWVfcG9wIChwcml2LT5xdWV1ZSk7Ci0gICAgaWYgKEdfTElLRUxZICgqYnVmZmVyKSkgewotICAgICAgd2hpbGUgKCFnc3RfcG9sbF9yZWFkX2NvbnRyb2wgKHByaXYtPnBvbGwpKSB7Ci0gICAgICAgIGlmIChlcnJubyA9PSBFV09VTERCTE9DSykgewotICAgICAgICAgIC8qIFdlIHB1dCB0aGUgYnVmZmVyIGludG8gdGhlIHF1ZXVlIGJ1dCBkaWQgbm90IGZpbmlzaCB3cml0aW5nIGNvbnRyb2wKLSAgICAgICAgICAgKiB5ZXQsIGxldCdzIHdhaXQgYSBiaXQgYW5kIHJldHJ5ICovCi0gICAgICAgICAgZ190aHJlYWRfeWllbGQgKCk7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogQ3JpdGljYWwgZXJyb3IgYnV0IEdzdFBvbGwgYWxyZWFkeSBjb21wbGFpbmVkICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJhY3F1aXJlZCBidWZmZXIgJXAiLCAqYnVmZmVyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8qIG5vIGJ1ZmZlciwgdHJ5IHRvIGFsbG9jYXRlIHNvbWUgbW9yZSAqLwotICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAibm8gYnVmZmVyLCB0cnlpbmcgdG8gYWxsb2NhdGUiKTsKLSAgICByZXN1bHQgPSBkb19hbGxvY19idWZmZXIgKHBvb2wsIGJ1ZmZlciwgcGFyYW1zKTsKLSAgICBpZiAoR19MSUtFTFkgKHJlc3VsdCA9PSBHU1RfRkxPV19PSykpCi0gICAgICAvKiB3ZSBoYXZlIGEgYnVmZmVyLCByZXR1cm4gaXQgKi8KLSAgICAgIGJyZWFrOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJlc3VsdCAhPSBHU1RfRkxPV19FT1MpKQotICAgICAgLyogc29tZXRoaW5nIHdlbnQgd3JvbmcsIHJldHVybiBlcnJvciAqLwotICAgICAgYnJlYWs7Ci0KLSAgICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHdhaXQgKi8KLSAgICBpZiAocGFyYW1zICYmIChwYXJhbXMtPmZsYWdzICYgR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19ET05UV0FJVCkpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAibm8gbW9yZSBidWZmZXJzIik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvKiBub3cgd2UgcmVsZWFzZSB0aGUgY29udHJvbCBzb2NrZXQsIHdlIHdhaXQgZm9yIGEgYnVmZmVyIHJlbGVhc2Ugb3IKLSAgICAgKiBmbHVzaGluZyAqLwotICAgIGlmICghZ3N0X3BvbGxfcmVhZF9jb250cm9sIChwb29sLT5wcml2LT5wb2xsKSkgewotICAgICAgaWYgKGVycm5vID09IEVXT1VMREJMT0NLKSB7Ci0gICAgICAgIC8qIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIHR3byB0aHJlYWRzIHRyeWluZyB0byBhbGxvY2F0ZSBidWZmZXJzCi0gICAgICAgICAqIGFscmVhZHksIGFuZCB0aGUgb3RoZXIgb25lIGFscmVhZHkgZ290IHRoZSB3YWl0IHRva2VuLiBUaGlzCi0gICAgICAgICAqIG1lYW5zIHRoYXQgd2Ugb25seSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBwb2xsIG5vdyBhbmQgbm90IHdyaXRlIHRoZQotICAgICAgICAgKiB0b2tlbiBhZnRlcndhcmRzOiB3ZSB3aWxsIGJlIHdva2VuIHVwIG9uY2UgdGhlIG90aGVyIHRocmVhZCBpcwotICAgICAgICAgKiB3b2tlbiB1cCBhbmQgdGhhdCBvbmUgd2lsbCB3cml0ZSB0aGUgd2FpdCB0b2tlbiBpdCByZW1vdmVkICovCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAid2FpdGluZyBmb3IgZnJlZSBidWZmZXJzIG9yIGZsdXNoaW5nIik7Ci0gICAgICAgIGdzdF9wb2xsX3dhaXQgKHByaXYtPnBvbGwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogVGhpcyBpcyBhIGNyaXRpY2FsIGVycm9yLCBHc3RQb2xsIGFscmVhZHkgZ2F2ZSBhIHdhcm5pbmcgKi8KLSAgICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBXZSdyZSB0aGUgZmlyc3QgdGhyZWFkIHdhaXRpbmcsIHdlIGdvdCB0aGUgd2FpdCB0b2tlbiBhbmQgaGF2ZSB0bwotICAgICAgICogd3JpdGUgaXQgYWdhaW4gbGF0ZXIgCi0gICAgICAgKiBPUgotICAgICAgICogV2UncmUgYSBzZWNvbmQgdGhyZWFkIGFuZCBqdXN0IGNvbnN1bWVkIHRoZSBmbHVzaCB0b2tlbiBhbmQgYmxvY2sgYWxsCi0gICAgICAgKiBvdGhlciB0aHJlYWRzLCBpbiB3aGljaCBjYXNlIHdlIG11c3Qgbm90IHdhaXQgYW5kIGdpdmUgaXQgYmFjawotICAgICAgICogaW1tZWRpYXRlbHkgKi8KLSAgICAgIGlmICghR1NUX0JVRkZFUl9QT09MX0lTX0ZMVVNISU5HIChwb29sKSkgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocG9vbCwgIndhaXRpbmcgZm9yIGZyZWUgYnVmZmVycyBvciBmbHVzaGluZyIpOwotICAgICAgICBnc3RfcG9sbF93YWl0IChwcml2LT5wb2xsLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgICAgIH0KLSAgICAgIGdzdF9wb2xsX3dyaXRlX2NvbnRyb2wgKHBvb2wtPnByaXYtPnBvbGwpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1mbHVzaGluZzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJ3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kZWNfb3V0c3RhbmRpbmcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sKQotewotICBpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCAoJnBvb2wtPnByaXYtPm91dHN0YW5kaW5nKSkgewotICAgIC8qIGFsbCBidWZmZXJzIGFyZSByZXR1cm5lZCB0byB0aGUgcG9vbCwgc2VlIGlmIHdlIG5lZWQgdG8gZnJlZSB0aGVtICovCi0gICAgaWYgKEdTVF9CVUZGRVJfUE9PTF9JU19GTFVTSElORyAocG9vbCkpIHsKLSAgICAgIC8qIHRha2UgdGhlIGxvY2sgc28gdGhhdCBzZXRfYWN0aXZlIGlzIG5vdCBydW4gY29uY3VycmVudGx5ICovCi0gICAgICBHU1RfQlVGRkVSX1BPT0xfTE9DSyAocG9vbCk7Ci0gICAgICAvKiBub3cgdGhhdCB3ZSBoYXZlIHRoZSBsb2NrLCBjaGVjayBpZiB3ZSBoYXZlIGJlZW4gZGUtYWN0aXZhdGVkIHdpdGgKLSAgICAgICAqIG91dHN0YW5kaW5nIGJ1ZmZlcnMgKi8KLSAgICAgIGlmICghcG9vbC0+cHJpdi0+YWN0aXZlKQotICAgICAgICBkb19zdG9wIChwb29sKTsKLQotICAgICAgR1NUX0JVRkZFUl9QT09MX1VOTE9DSyAocG9vbCk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVtb3ZlX21ldGFfdW5wb29sZWQgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0TWV0YSAqKiBtZXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmICghR1NUX01FVEFfRkxBR19JU19TRVQgKCptZXRhLCBHU1RfTUVUQV9GTEFHX1BPT0xFRCkpIHsKLSAgICBHU1RfTUVUQV9GTEFHX1VOU0VUICgqbWV0YSwgR1NUX01FVEFfRkxBR19MT0NLRUQpOwotICAgICptZXRhID0gTlVMTDsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWRlZmF1bHRfcmVzZXRfYnVmZmVyIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHU1RfQlVGRkVSX0ZMQUdTIChidWZmZXIpICY9IEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZOwotCi0gIEdTVF9CVUZGRVJfUFRTIChidWZmZXIpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlcikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotCi0gIC8qIHJlbW92ZSBhbGwgbWV0YWRhdGEgd2l0aG91dCB0aGUgUE9PTEVEIGZsYWcgKi8KLSAgZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEgKGJ1ZmZlciwgcmVtb3ZlX21ldGFfdW5wb29sZWQsIHBvb2wpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcjoKLSAqIEBwb29sOiBhICNHc3RCdWZmZXJQb29sCi0gKiBAYnVmZmVyOiAob3V0KTogYSBsb2NhdGlvbiBmb3IgYSAjR3N0QnVmZmVyCi0gKiBAcGFyYW1zOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBwYXJhbWV0ZXJzLgotICoKLSAqIEFjcXVpcmUgYSBidWZmZXIgZnJvbSBAcG9vbC4gQGJ1ZmZlciBzaG91bGQgcG9pbnQgdG8gYSBtZW1vcnkgbG9jYXRpb24gdGhhdAotICogY2FuIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBuZXcgYnVmZmVyLgotICoKLSAqIEBwYXJhbXMgY2FuIGJlICVOVUxMIG9yIGNvbnRhaW4gb3B0aW9uYWwgcGFyYW1ldGVycyB0byBpbmZsdWVuY2UgdGhlCi0gKiBhbGxvY2F0aW9uLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gc3VjaCBhcyAlR1NUX0ZMT1dfRkxVU0hJTkcgd2hlbiB0aGUgcG9vbCBpcwotICogaW5hY3RpdmUuCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqKiBidWZmZXIsCi0gICAgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgKiBwYXJhbXMpCi17Ci0gIEdzdEJ1ZmZlclBvb2xDbGFzcyAqcGNsYXNzOwotICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9QT09MIChwb29sKSwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmZmVyICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKLQotICAvKiBhc3N1bWUgd2UnbGwgaGF2ZSBvbmUgbW9yZSBvdXRzdGFuZGluZyBidWZmZXIgd2UgbmVlZCB0byBkbyB0aGF0IHNvCi0gICAqIHRoYXQgY29uY3VycmVudCBzZXRfYWN0aXZlIGRvZXNuJ3QgY2xlYXIgdGhlIGJ1ZmZlcnMgKi8KLSAgZ19hdG9taWNfaW50X2luYyAoJnBvb2wtPnByaXYtPm91dHN0YW5kaW5nKTsKLQotICBpZiAoR19MSUtFTFkgKHBjbGFzcy0+YWNxdWlyZV9idWZmZXIpKQotICAgIHJlc3VsdCA9IHBjbGFzcy0+YWNxdWlyZV9idWZmZXIgKHBvb2wsIGJ1ZmZlciwgcGFyYW1zKTsKLSAgZWxzZQotICAgIHJlc3VsdCA9IEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0KLSAgaWYgKEdfTElLRUxZIChyZXN1bHQgPT0gR1NUX0ZMT1dfT0spKSB7Ci0gICAgLyogYWxsIGJ1ZmZlcnMgZnJvbSB0aGUgcG9vbCBwb2ludCB0byB0aGUgcG9vbCBhbmQgaGF2ZSB0aGUgcmVmY291bnQgb2YgdGhlCi0gICAgICogcG9vbCBpbmNyZW1lbnRlZCAqLwotICAgICgqYnVmZmVyKS0+cG9vbCA9IGdzdF9vYmplY3RfcmVmIChwb29sKTsKLSAgfSBlbHNlIHsKLSAgICBkZWNfb3V0c3RhbmRpbmcgKHBvb2wpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLWRlZmF1bHRfcmVsZWFzZV9idWZmZXIgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdTVF9MT0dfT0JKRUNUIChwb29sLCAicmVsZWFzZWQgYnVmZmVyICVwICVkIiwgYnVmZmVyLAotICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdTIChidWZmZXIpKTsKLQotICAvKiBtZW1vcnkgc2hvdWxkIGJlIHVudG91Y2hlZCAqLwotICBpZiAoR19VTkxJS0VMWSAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSkpKQotICAgIGdvdG8gbWVtb3J5X3RhZ2dlZDsKLQotICAvKiBzaXplIHNob3VsZCBoYXZlIGJlZW4gcmVzZXQuIFRoaXMgaXMgbm90IGEgY2F0Y2ggYWxsLCBwb29sIHdpdGgKLSAgICogc2l6ZSByZXF1aXJlbWVudCBwZXIgbWVtb3J5IHNob3VsZCBkbyB0aGVpciBvd24gY2hlY2suICovCi0gIGlmIChHX1VOTElLRUxZIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpICE9IHBvb2wtPnByaXYtPnNpemUpKQotICAgIGdvdG8gc2l6ZV9jaGFuZ2VkOwotCi0gIC8qIGFsbCBtZW1vcnkgc2hvdWxkIGJlIGV4Y2x1c2l2ZSB0byB0aGlzIGJ1ZmZlciAoYW5kIHRodXMgYmUgd3JpdGFibGUpICovCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X2J1ZmZlcl9pc19hbGxfbWVtb3J5X3dyaXRhYmxlIChidWZmZXIpKSkKLSAgICBnb3RvIG5vdF93cml0YWJsZTsKLQotICAvKiBrZWVwIGl0IGFyb3VuZCBpbiBvdXIgcXVldWUgKi8KLSAgZ3N0X2F0b21pY19xdWV1ZV9wdXNoIChwb29sLT5wcml2LT5xdWV1ZSwgYnVmZmVyKTsKLSAgZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAocG9vbC0+cHJpdi0+cG9sbCk7Ci0KLSAgcmV0dXJuOwotCi1tZW1vcnlfdGFnZ2VkOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEVSRk9STUFOQ0UsIHBvb2wsCi0gICAgICAgICJkaXNjYXJkaW5nIGJ1ZmZlciAlcDogbWVtb3J5IHRhZyBzZXQiLCBidWZmZXIpOwotICAgIGdvdG8gZGlzY2FyZDsKLSAgfQotc2l6ZV9jaGFuZ2VkOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEVSRk9STUFOQ0UsIHBvb2wsCi0gICAgICAgICJkaXNjYXJkaW5nIGJ1ZmZlciAlcDogc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiICE9ICV1IiwKLSAgICAgICAgYnVmZmVyLCBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpLCBwb29sLT5wcml2LT5zaXplKTsKLSAgICBnb3RvIGRpc2NhcmQ7Ci0gIH0KLW5vdF93cml0YWJsZToKLSAgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCBwb29sLAotICAgICAgICAiZGlzY2FyZGluZyBidWZmZXIgJXA6IG1lbW9yeSBub3Qgd3JpdGFibGUiLCBidWZmZXIpOwotICAgIGdvdG8gZGlzY2FyZDsKLSAgfQotZGlzY2FyZDoKLSAgewotICAgIGRvX2ZyZWVfYnVmZmVyIChwb29sLCBidWZmZXIpOwotICAgIHJldHVybjsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlcjoKLSAqIEBwb29sOiBhICNHc3RCdWZmZXJQb29sCi0gKiBAYnVmZmVyOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEJ1ZmZlcgotICoKLSAqIFJlbGVhc2UgQGJ1ZmZlciB0byBAcG9vbC4gQGJ1ZmZlciBzaG91bGQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gYWxsb2NhdGVkIGZyb20KLSAqIEBwb29sIHdpdGggZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyKCkuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxhc3QgcmVmIG9uIEBidWZmZXIKLSAqIGRpc2FwcGVhcnMuCi0gKi8KLXZvaWQKLWdzdF9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0QnVmZmVyUG9vbENsYXNzICpwY2xhc3M7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9QT09MIChwb29sKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGJ1ZmZlciAhPSBOVUxMKTsKLQotICAvKiBjaGVjayB0aGF0IHRoZSBidWZmZXIgaXMgb3VycywgYWxsIGJ1ZmZlcnMgcmV0dXJuZWQgdG8gdGhlIHBvb2wgaGF2ZSB0aGUKLSAgICogcG9vbCBtZW1iZXIgc2V0IHRvIE5VTEwgYW5kIHRoZSBwb29sIHJlZmNvdW50IGRlY3JlYXNlZCAqLwotICBpZiAoIWdfYXRvbWljX3BvaW50ZXJfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZidWZmZXItPnBvb2wsIHBvb2wsIE5VTEwpKQotICAgIHJldHVybjsKLQotICBwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfR0VUX0NMQVNTIChwb29sKTsKLQotICAvKiByZXNldCB0aGUgYnVmZmVyIHdoZW4gbmVlZGVkICovCi0gIGlmIChHX0xJS0VMWSAocGNsYXNzLT5yZXNldF9idWZmZXIpKQotICAgIHBjbGFzcy0+cmVzZXRfYnVmZmVyIChwb29sLCBidWZmZXIpOwotCi0gIGlmIChHX0xJS0VMWSAocGNsYXNzLT5yZWxlYXNlX2J1ZmZlcikpCi0gICAgcGNsYXNzLT5yZWxlYXNlX2J1ZmZlciAocG9vbCwgYnVmZmVyKTsKLQotICBkZWNfb3V0c3RhbmRpbmcgKHBvb2wpOwotCi0gIC8qIGRlY3JlYXNlIHRoZSByZWZjb3VudCB0aGF0IHRoZSBidWZmZXIgaGFkIHRvIHVzICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfcG9vbF9zZXRfZmx1c2hpbmc6Ci0gKiBAcG9vbDogYSAjR3N0QnVmZmVyUG9vbAotICogQGZsdXNoaW5nOiB3aGV0aGVyIHRvIHN0YXJ0IG9yIHN0b3AgZmx1c2hpbmcKLSAqCi0gKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZmx1c2hpbmcgc3RhdGUgb2YgYSBAcG9vbCB3aXRob3V0IGZyZWVpbmcgb3IKLSAqIGFsbG9jYXRpbmcgYnVmZmVycy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9idWZmZXJfcG9vbF9zZXRfZmx1c2hpbmcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBnYm9vbGVhbiBmbHVzaGluZykKLXsKLSAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXY7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9QT09MIChwb29sKSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJmbHVzaGluZyAlZCIsIGZsdXNoaW5nKTsKLQotICBwcml2ID0gcG9vbC0+cHJpdjsKLQotICBHU1RfQlVGRkVSX1BPT0xfTE9DSyAocG9vbCk7Ci0KLSAgaWYgKCFwcml2LT5hY3RpdmUpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBvb2wsICJjYW4ndCBjaGFuZ2UgZmx1c2hpbmcgc3RhdGUgb2YgaW5hY3RpdmUgcG9vbCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGRvX3NldF9mbHVzaGluZyAocG9vbCwgZmx1c2hpbmcpOwotCi1kb25lOgotICBHU1RfQlVGRkVSX1BPT0xfVU5MT0NLIChwb29sKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RidWZmZXJwb29sLmggYi9nc3QvZ3N0YnVmZmVycG9vbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGM1OWUyLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RidWZmZXJwb29sLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBnc3RidWZmZXJwb29sLmg6IEhlYWRlciBmb3IgR3N0QnVmZmVyUG9vbCBvYmplY3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfQlVGRkVSX1BPT0xfSF9fCi0jZGVmaW5lIF9fR1NUX0JVRkZFUl9QT09MX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGFkLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXJQb29sUHJpdmF0ZSBHc3RCdWZmZXJQb29sUHJpdmF0ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXJQb29sQ2xhc3MgR3N0QnVmZmVyUG9vbENsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX0JVRkZFUl9QT09MICAgICAgICAgICAgICAgICAoZ3N0X2J1ZmZlcl9wb29sX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JU19CVUZGRVJfUE9PTChvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9CVUZGRVJfUE9PTCkpCi0jZGVmaW5lIEdTVF9JU19CVUZGRVJfUE9PTF9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0JVRkZFUl9QT09MKSkKLSNkZWZpbmUgR1NUX0JVRkZFUl9QT09MX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQlVGRkVSX1BPT0wsIEdzdEJ1ZmZlclBvb2xDbGFzcykpCi0jZGVmaW5lIEdTVF9CVUZGRVJfUE9PTChvYmopICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9CVUZGRVJfUE9PTCwgR3N0QnVmZmVyUG9vbCkpCi0jZGVmaW5lIEdTVF9CVUZGRVJfUE9PTF9DTEFTUyhrbGFzcykgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0JVRkZFUl9QT09MLCBHc3RCdWZmZXJQb29sQ2xhc3MpKQotI2RlZmluZSBHU1RfQlVGRkVSX1BPT0xfQ0FTVChvYmopICAgICAgICAgICAgKChHc3RCdWZmZXJQb29sICopKG9iaikpCi0KLS8qKgotICogR3N0QnVmZmVyUG9vbEFjcXVpcmVGbGFnczoKLSAqIEBHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX05PTkU6IG5vIGZsYWdzCi0gKiBAR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19LRVlfVU5JVDogYnVmZmVyIGlzIGtleWZyYW1lCi0gKiBAR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19ET05UV0FJVDogd2hlbiB0aGUgYnVmZmVycG9vbCBpcyBlbXB0eSwgYWNxdWlyZV9idWZmZXIKLSAqIHdpbGwgYnkgZGVmYXVsdCBibG9jayB1bnRpbCBhIGJ1ZmZlciBpcyByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFnYWluLiBTZXR0aW5nCi0gKiB0aGlzIGZsYWcgbWFrZXMgYWNxdWlyZV9idWZmZXIgcmV0dXJuICNHU1RfRkxPV19FT1MgaW5zdGVhZCBvZiBibG9ja2luZy4KLSAqIEBHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0RJU0NPTlQ6IGJ1ZmZlciBpcyBkaXNjb250Ci0gKiBAR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19MQVNUOiBsYXN0IGZsYWcsIHN1YmNsYXNzZXMgY2FuIHVzZSBwcml2YXRlIGZsYWdzCi0gKiAgICBzdGFydGluZyBmcm9tIHRoaXMgdmFsdWUuCi0gKgotICogQWRkaXRpb25hbCBmbGFncyB0byBjb250cm9sIHRoZSBhbGxvY2F0aW9uIG9mIGEgYnVmZmVyCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfTk9ORSAgICAgPSAwLAotICBHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0tFWV9VTklUID0gKDEgPDwgMCksCi0gIEdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfRE9OVFdBSVQgPSAoMSA8PCAxKSwKLSAgR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19ESVNDT05UICA9ICgxIDw8IDIpLAotICBHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0xBU1QgICAgID0gKDEgPDwgMTYpLAotfSBHc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXM7Ci0KLS8qKgotICogR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXM6Ci0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIEBzdGFydCBhbmQgQHN0b3AKLSAqIEBzdGFydDogdGhlIHN0YXJ0IHBvc2l0aW9uCi0gKiBAc3RvcDogdGhlIHN0b3AgcG9zaXRpb24KLSAqIEBmbGFnczogYWRkaXRpb25hbCBmbGFncwotICoKLSAqIFBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIoKSBmdW5jdGlvbiB0byBjb250cm9sIHRoZQotICogYWxsb2NhdGlvbiBvZiB0aGUgYnVmZmVyLgotICoKLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIEBzdGFydCBhbmQgQHN0b3AgbWVtYmVycyBidXQgb3RoZXIKLSAqIGltcGxlbWVudGF0aW9ucyBjYW4gdXNlIHRoaXMgZXh0cmEgaW5mb3JtYXRpb24gdG8gZGVjaWRlIHdoYXQgYnVmZmVyIHRvCi0gKiByZXR1cm4uCi0gKi8KLXN0cnVjdCBfR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgewotICBHc3RGb3JtYXQgICAgICAgICAgICAgICAgIGZvcm1hdDsKLSAgZ2ludDY0ICAgICAgICAgICAgICAgICAgICBzdGFydDsKLSAgZ2ludDY0ICAgICAgICAgICAgICAgICAgICBzdG9wOwotICBHc3RCdWZmZXJQb29sQWNxdWlyZUZsYWdzIGZsYWdzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLS8qKgotICogR1NUX0JVRkZFUl9QT09MX0lTX0ZMVVNISU5HOgotICogQHBvb2w6IGEgR3N0QnVmZmVyUG9vbAotICoKLSAqIENoZWNrIGlmIHRoZSBidWZmZXJwb29sIGlzIGZsdXNoaW5nLiBTdWJjbGFzc2VzIG1pZ2h0IHdhbnQgdG8gY2hlY2sgdGhlCi0gKiBzdGF0ZSBvZiB0aGUgcG9vbCBpbiB0aGUgYWNxdWlyZSBmdW5jdGlvbi4KLSAqLwotI2RlZmluZSBHU1RfQlVGRkVSX1BPT0xfSVNfRkxVU0hJTkcocG9vbCkgIChnX2F0b21pY19pbnRfZ2V0ICgmcG9vbC0+Zmx1c2hpbmcpKQotCi0vKioKLSAqIEdzdEJ1ZmZlclBvb2w6Ci0gKgotICogVGhlIHN0cnVjdHVyZSBvZiBhICNHc3RCdWZmZXJQb29sLiBVc2UgdGhlIGFzc29jaWF0ZWQgbWFjcm9zIHRvIGFjY2VzcyB0aGUgcHVibGljCi0gKiB2YXJpYWJsZXMuCi0gKi8KLXN0cnVjdCBfR3N0QnVmZmVyUG9vbCB7Ci0gIEdzdE9iamVjdCAgICAgICAgICAgIG9iamVjdDsKLQotICAvKjwgcHJvdGVjdGVkID4qLwotICBnaW50ICAgICAgICAgICAgICAgICBmbHVzaGluZzsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0QnVmZmVyUG9vbFByaXZhdGUgKnByaXY7Ci0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0vKioKLSAqIEdzdEJ1ZmZlclBvb2xDbGFzczoKLSAqIEBvYmplY3RfY2xhc3M6ICBPYmplY3QgcGFyZW50IGNsYXNzCi0gKiBAZ2V0X29wdGlvbnM6IGdldCBhIGxpc3Qgb2Ygb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBwb29sCi0gKiBAc2V0X2NvbmZpZzogYXBwbHkgdGhlIGJ1ZmZlcnBvb2wgY29uZmlndXJhdGlvbi4gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbgotICogICAgICAgICAgICAgIHdpbGwgcGFyc2UgdGhlIGRlZmF1bHQgY29uZmlnIHBhcmFtZXRlcnMKLSAqIEBzdGFydDogc3RhcnQgdGhlIGJ1ZmZlcnBvb2wuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgcHJlYWxsb2NhdGUKLSAqICAgICAgICAgbWluLWJ1ZmZlcnMgYnVmZmVycyBhbmQgcHV0IHRoZW0gaW4gdGhlIHF1ZXVlCi0gKiBAc3RvcDogc3RvcCB0aGUgYnVmZmVycG9vbC4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBmcmVlIHRoZQotICogICAgICAgIHByZWFsbG9jYXRlZCBidWZmZXJzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbCB0aGUgYnVmZmVycyBhcmUKLSAqICAgICAgICByZXR1cm5lZCB0byB0aGUgcG9vbC4KLSAqIEBhY3F1aXJlX2J1ZmZlcjogZ2V0IGEgbmV3IGJ1ZmZlciBmcm9tIHRoZSBwb29sLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotICogICAgICAgIHdpbGwgdGFrZSBhIGJ1ZmZlciBmcm9tIHRoZSBxdWV1ZSBhbmQgb3B0aW9uYWxseSB3YWl0IGZvciBhIGJ1ZmZlciB0bwotICogICAgICAgIGJlIHJlbGVhc2VkIHdoZW4gdGhlcmUgYXJlIG5vIGJ1ZmZlcnMgYXZhaWxhYmxlLgotICogQGFsbG9jX2J1ZmZlcjogYWxsb2NhdGUgYSBidWZmZXIuIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFsbG9jYXRlcwotICogICAgICAgIGJ1ZmZlcnMgZnJvbSB0aGUgY29uZmlndXJlZCBtZW1vcnkgYWxsb2NhdG9yIGFuZCB3aXRoIHRoZSBjb25maWd1cmVkCi0gKiAgICAgICAgcGFyYW1ldGVycy4gQWxsIG1ldGFkYXRhIHRoYXQgaXMgcHJlc2VudCBvbiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB3aWxsCi0gKiAgICAgICAgYmUgbWFya2VkIGFzICNHU1RfTUVUQV9GTEFHX1BPT0xFRCBhbmQgI0dTVF9NRVRBX0ZMQUdfTE9DS0VEIGFuZCB3aWxsCi0gKiAgICAgICAgbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVmZmVyIGluIEByZXNldF9idWZmZXIuIFRoZSBidWZmZXIgc2hvdWxkCi0gKiAgICAgICAgaGF2ZSB0aGUgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkgY2xlYXJlZC4KLSAqIEByZXNldF9idWZmZXI6IHJlc2V0IHRoZSBidWZmZXIgdG8gaXRzIHN0YXRlIHdoZW4gaXQgd2FzIGZyZXNobHkgYWxsb2NhdGVkLgotICogICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY2xlYXIgdGhlIGZsYWdzLCB0aW1lc3RhbXBzIGFuZAotICogICAgICAgIHdpbGwgcmVtb3ZlIHRoZSBtZXRhZGF0YSB3aXRob3V0IHRoZSAjR1NUX01FVEFfRkxBR19QT09MRUQgZmxhZyAoZXZlbgotICogICAgICAgIHRoZSBtZXRhZGF0YSB3aXRoICNHU1RfTUVUQV9GTEFHX0xPQ0tFRCkuIElmIHRoZQotICogICAgICAgICNHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSB3YXMgc2V0LCB0aGlzIGZ1bmN0aW9uIGNhbiBhbHNvIHRyeSB0bwotICogICAgICAgIHJlc3RvcmUgdGhlIG1lbW9yeSBhbmQgY2xlYXIgdGhlICNHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSBhZ2Fpbi4KLSAqIEByZWxlYXNlX2J1ZmZlcjogcmVsZWFzZSBhIGJ1ZmZlciBiYWNrIGluIHRoZSBwb29sLiBUaGUgZGVmYXVsdAotICogICAgICAgIGltcGxlbWVudGF0aW9uIHdpbGwgcHV0IHRoZSBidWZmZXIgYmFjayBpbiB0aGUgcXVldWUgYW5kIG5vdGlmeSBhbnkKLSAqICAgICAgICBibG9ja2luZyBhY3F1aXJlX2J1ZmZlciBjYWxscyB3aGVuIHRoZSAjR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkKLSAqICAgICAgICBpcyBub3Qgc2V0IG9uIHRoZSBidWZmZXIuIElmICNHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSBpcyBzZXQsIHRoZSAKLSAqICAgICAgICBidWZmZXIgd2lsbCBiZSBmcmVlZCB3aXRoIEBmcmVlX2J1ZmZlci4KLSAqIEBmcmVlX2J1ZmZlcjogZnJlZSBhIGJ1ZmZlci4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdW5yZWZzIHRoZSBidWZmZXIuCi0gKiBAZmx1c2hfc3RhcnQ6IGVudGVyIHRoZSBmbHVzaGluZyBzdGF0ZS4gKFNpbmNlIDEuNCkKLSAqIEBmbHVzaF9zdG9wOiBsZWF2ZSB0aGUgZmx1c2hpZ24gc3RhdGUuIChTaW5jZSAxLjQpCi0gKgotICogVGhlIEdzdEJ1ZmZlclBvb2wgY2xhc3MuCi0gKi8KLXN0cnVjdCBfR3N0QnVmZmVyUG9vbENsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICAgb2JqZWN0X2NsYXNzOwotCi0gIC8qPCBwdWJsaWMgPiovCi0gIGNvbnN0IGdjaGFyICoqICgqZ2V0X29wdGlvbnMpICAgIChHc3RCdWZmZXJQb29sICpwb29sKTsKLSAgZ2Jvb2xlYW4gICAgICAgKCpzZXRfY29uZmlnKSAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdFN0cnVjdHVyZSAqY29uZmlnKTsKLQotICBnYm9vbGVhbiAgICAgICAoKnN0YXJ0KSAgICAgICAgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCk7Ci0gIGdib29sZWFuICAgICAgICgqc3RvcCkgICAgICAgICAgIChHc3RCdWZmZXJQb29sICpwb29sKTsKLQotICBHc3RGbG93UmV0dXJuICAoKmFjcXVpcmVfYnVmZmVyKSAoR3N0QnVmZmVyUG9vbCAqcG9vbCwgR3N0QnVmZmVyICoqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgKnBhcmFtcyk7Ci0gIEdzdEZsb3dSZXR1cm4gICgqYWxsb2NfYnVmZmVyKSAgIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RCdWZmZXIgKipidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyAqcGFyYW1zKTsKLSAgdm9pZCAgICAgICAgICAgKCpyZXNldF9idWZmZXIpICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgdm9pZCAgICAgICAgICAgKCpyZWxlYXNlX2J1ZmZlcikgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgdm9pZCAgICAgICAgICAgKCpmcmVlX2J1ZmZlcikgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgdm9pZCAgICAgICAgICAgKCpmbHVzaF9zdGFydCkgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wpOwotICB2b2lkICAgICAgICAgICAoKmZsdXNoX3N0b3ApICAgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCk7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkcgLSAyXTsKLX07Ci0KLUdUeXBlICAgICAgIGdzdF9idWZmZXJfcG9vbF9nZXRfdHlwZSAodm9pZCk7Ci0KLS8qIGFsbG9jYXRpb24gKi8KLUdzdEJ1ZmZlclBvb2wgKiAgZ3N0X2J1ZmZlcl9wb29sX25ldyAgKHZvaWQpOwotCi0vKiBzdGF0ZSBtYW5hZ2VtZW50ICovCi1nYm9vbGVhbiAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlICAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIGdib29sZWFuIGFjdGl2ZSk7Ci1nYm9vbGVhbiAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9pc19hY3RpdmUgICAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wpOwotCi1nYm9vbGVhbiAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnICAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIEdzdFN0cnVjdHVyZSAqY29uZmlnKTsKLUdzdFN0cnVjdHVyZSAqICAgZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgICAgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCk7Ci0KLWNvbnN0IGdjaGFyICoqICAgZ3N0X2J1ZmZlcl9wb29sX2dldF9vcHRpb25zICAgICAoR3N0QnVmZmVyUG9vbCAqcG9vbCk7Ci1nYm9vbGVhbiAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uICAgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIGNvbnN0IGdjaGFyICpvcHRpb24pOwotCi12b2lkICAgICAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfZmx1c2hpbmcgICAgKEdzdEJ1ZmZlclBvb2wgKnBvb2wsIGdib29sZWFuIGZsdXNoaW5nKTsKLQotLyogaGVscGVycyBmb3IgY29uZmlndXJpbmcgdGhlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KLXZvaWQgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zICAgIChHc3RTdHJ1Y3R1cmUgKmNvbmZpZywgR3N0Q2FwcyAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBzaXplLCBndWludCBtaW5fYnVmZmVycywgZ3VpbnQgbWF4X2J1ZmZlcnMpOwotZ2Jvb2xlYW4gICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9wYXJhbXMgICAgKEdzdFN0cnVjdHVyZSAqY29uZmlnLCBHc3RDYXBzICoqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAqc2l6ZSwgZ3VpbnQgKm1pbl9idWZmZXJzLCBndWludCAqbWF4X2J1ZmZlcnMpOwotdm9pZCAgICAgICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9hbGxvY2F0b3IgKEdzdFN0cnVjdHVyZSAqY29uZmlnLCBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RBbGxvY2F0aW9uUGFyYW1zICpwYXJhbXMpOwotZ2Jvb2xlYW4gICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9hbGxvY2F0b3IgKEdzdFN0cnVjdHVyZSAqY29uZmlnLCBHc3RBbGxvY2F0b3IgKiphbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QWxsb2NhdGlvblBhcmFtcyAqcGFyYW1zKTsKLQotLyogb3B0aW9ucyAqLwotZ3VpbnQgICAgICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX25fb3B0aW9ucyAgIChHc3RTdHJ1Y3R1cmUgKmNvbmZpZyk7Ci12b2lkICAgICAgICAgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAgKEdzdFN0cnVjdHVyZSAqY29uZmlnLCBjb25zdCBnY2hhciAqb3B0aW9uKTsKLWNvbnN0IGdjaGFyICogICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfb3B0aW9uICAoR3N0U3RydWN0dXJlICpjb25maWcsIGd1aW50IGluZGV4KTsKLWdib29sZWFuICAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19oYXNfb3B0aW9uICAoR3N0U3RydWN0dXJlICpjb25maWcsIGNvbnN0IGdjaGFyICpvcHRpb24pOwotZ2Jvb2xlYW4gICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3ZhbGlkYXRlX3BhcmFtcyAoR3N0U3RydWN0dXJlICpjb25maWcsIEdzdENhcHMgKmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBzaXplLCBndWludCBtaW5fYnVmZmVycywgZ3VpbnQgbWF4X2J1ZmZlcnMpOwotCi0vKiBidWZmZXIgbWFuYWdlbWVudCAqLwotR3N0Rmxvd1JldHVybiAgICBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RCdWZmZXIgKipidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zICpwYXJhbXMpOwotdm9pZCAgICAgICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIgIChHc3RCdWZmZXJQb29sICpwb29sLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9CVUZGRVJfUE9PTF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RidXMuYyBiL2dzdC9nc3RidXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0YzE4Yy4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0YnVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0YnVzLmM6IEdzdEJ1cyBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0YnVzCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEFzeW5jaHJvbm91cyBtZXNzYWdlIGJ1cyBzdWJzeXN0ZW0KLSAqIEBzZWVfYWxzbzogI0dzdE1lc3NhZ2UsICNHc3RFbGVtZW50Ci0gKgotICogVGhlICNHc3RCdXMgaXMgYW4gb2JqZWN0IHJlc3BvbnNpYmxlIGZvciBkZWxpdmVyaW5nICNHc3RNZXNzYWdlIHBhY2tldHMgaW4KLSAqIGEgZmlyc3QtaW4gZmlyc3Qtb3V0IHdheSBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkcyAoc2VlICNHc3RUYXNrKSB0byB0aGUKLSAqIGFwcGxpY2F0aW9uLgotICoKLSAqIFNpbmNlIHRoZSBhcHBsaWNhdGlvbiB0eXBpY2FsbHkgb25seSB3YW50cyB0byBkZWFsIHdpdGggZGVsaXZlcnkgb2YgdGhlc2UKLSAqIG1lc3NhZ2VzIGZyb20gb25lIHRocmVhZCwgdGhlIEdzdEJ1cyB3aWxsIG1hcnNoYWxsIHRoZSBtZXNzYWdlcyBiZXR3ZWVuCi0gKiBkaWZmZXJlbnQgdGhyZWFkcy4gVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgdGhlIGFjdHVhbCBzdHJlYW1pbmcgb2YgbWVkaWEKLSAqIGlzIGRvbmUgaW4gYW5vdGhlciB0aHJlYWQgdGhhbiB0aGUgYXBwbGljYXRpb24uCi0gKgotICogVGhlIEdzdEJ1cyBwcm92aWRlcyBzdXBwb3J0IGZvciAjR1NvdXJjZSBiYXNlZCBub3RpZmljYXRpb25zLiBUaGlzIG1ha2VzIGl0Ci0gKiBwb3NzaWJsZSB0byBoYW5kbGUgdGhlIGRlbGl2ZXJ5IGluIHRoZSBnbGliIG1haW5sb29wLgotICoKLSAqIFRoZSAjR1NvdXJjZSBjYWxsYmFjayBmdW5jdGlvbiBnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jKCkgY2FuIGJlIHVzZWQgdG8KLSAqIGNvbnZlcnQgYWxsIGJ1cyBtZXNzYWdlcyBpbnRvIHNpZ25hbCBlbWlzc2lvbnMuCi0gKgotICogQSBtZXNzYWdlIGlzIHBvc3RlZCBvbiB0aGUgYnVzIHdpdGggdGhlIGdzdF9idXNfcG9zdCgpIG1ldGhvZC4gV2l0aCB0aGUKLSAqIGdzdF9idXNfcGVlaygpIGFuZCBnc3RfYnVzX3BvcCgpIG1ldGhvZHMgb25lIGNhbiBsb29rIGF0IG9yIHJldHJpZXZlIGEKLSAqIHByZXZpb3VzbHkgcG9zdGVkIG1lc3NhZ2UuCi0gKgotICogVGhlIGJ1cyBjYW4gYmUgcG9sbGVkIHdpdGggdGhlIGdzdF9idXNfcG9sbCgpIG1ldGhvZC4gVGhpcyBtZXRob2RzIGJsb2NrcwotICogdXAgdG8gdGhlIHNwZWNpZmllZCB0aW1lb3V0IHZhbHVlIHVudGlsIG9uZSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2VzIHR5cGVzCi0gKiBpcyBwb3N0ZWQgb24gdGhlIGJ1cy4gVGhlIGFwcGxpY2F0aW9uIGNhbiB0aGVuIGdzdF9idXNfcG9wKCkgdGhlIG1lc3NhZ2VzCi0gKiBmcm9tIHRoZSBidXMgdG8gaGFuZGxlIHRoZW0uCi0gKiBBbHRlcm5hdGl2ZWx5IHRoZSBhcHBsaWNhdGlvbiBjYW4gcmVnaXN0ZXIgYW4gYXN5bmNocm9ub3VzIGJ1cyBmdW5jdGlvbgotICogdXNpbmcgZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbCgpIG9yIGdzdF9idXNfYWRkX3dhdGNoKCkuIFRoaXMgZnVuY3Rpb24gd2lsbAotICogaW5zdGFsbCBhICNHU291cmNlIGluIHRoZSBkZWZhdWx0IGdsaWIgbWFpbiBsb29wIGFuZCB3aWxsIGRlbGl2ZXIgbWVzc2FnZXMKLSAqIGEgc2hvcnQgd2hpbGUgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gcG9zdGVkLiBOb3RlIHRoYXQgdGhlIG1haW4gbG9vcCBzaG91bGQKLSAqIGJlIHJ1bm5pbmcgZm9yIHRoZSBhc3luY2hyb25vdXMgY2FsbGJhY2tzLgotICoKLSAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZ2V0IG1lc3NhZ2VzIGZyb20gdGhlIGJ1cyB3aXRob3V0IGFueSB0aHJlYWQKLSAqIG1hcnNoYWxsaW5nIHdpdGggdGhlIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcigpIG1ldGhvZC4gVGhpcyBtYWtlcyBpdAotICogcG9zc2libGUgdG8gcmVhY3QgdG8gYSBtZXNzYWdlIGluIHRoZSBzYW1lIHRocmVhZCB0aGF0IHBvc3RlZCB0aGUKLSAqIG1lc3NhZ2Ugb24gdGhlIGJ1cy4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhYmxlCi0gKiB0byBkZWFsIHdpdGggbWVzc2FnZXMgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcy4KLSAqCi0gKiBFdmVyeSAjR3N0UGlwZWxpbmUgaGFzIG9uZSBidXMuCi0gKgotICogTm90ZSB0aGF0IGEgI0dzdFBpcGVsaW5lIHdpbGwgc2V0IGl0cyBidXMgaW50byBmbHVzaGluZyBzdGF0ZSB3aGVuIGNoYW5naW5nCi0gKiBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jICBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSAiZ3N0YXRvbWljcXVldWUuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0cG9sbC5oIgotCi0jaW5jbHVkZSAiZ3N0YnVzLmgiCi0jaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jaWZkZWYgR19PU19XSU4zMgotIyAgaWZuZGVmIEVXT1VMREJMT0NLCi0jICBkZWZpbmUgRVdPVUxEQkxPQ0sgRUFHQUlOICAgIC8qIFRoaXMgaXMganVzdCB0byBwbGFjYXRlIGdjYyAqLwotIyAgZW5kaWYKLSNlbmRpZiAvKiBHX09TX1dJTjMyICovCi0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIEdTVF9DQVRfQlVTCi0vKiBidXMgc2lnbmFscyAqLwotZW51bQotewotICBTWU5DX01FU1NBR0UsCi0gIEFTWU5DX01FU1NBR0UsCi0gIC8qIGFkZCBtb3JlIGFib3ZlICovCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfRU5BQkxFX0FTWU5DIChUUlVFKQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9FTkFCTEVfQVNZTkMKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9idXNfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfYnVzX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGd1aW50IGdzdF9idXNfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotc3RydWN0IF9Hc3RCdXNQcml2YXRlCi17Ci0gIEdzdEF0b21pY1F1ZXVlICpxdWV1ZTsKLSAgR011dGV4IHF1ZXVlX2xvY2s7Ci0KLSAgR3N0QnVzU3luY0hhbmRsZXIgc3luY19oYW5kbGVyOwotICBncG9pbnRlciBzeW5jX2hhbmRsZXJfZGF0YTsKLSAgR0Rlc3Ryb3lOb3RpZnkgc3luY19oYW5kbGVyX25vdGlmeTsKLQotICBndWludCBudW1fc2lnbmFsX3dhdGNoZXJzOwotCi0gIGd1aW50IG51bV9zeW5jX21lc3NhZ2VfZW1pdHRlcnM7Ci0gIEdTb3VyY2UgKnNpZ25hbF93YXRjaDsKLQotICBnYm9vbGVhbiBlbmFibGVfYXN5bmM7Ci0gIEdzdFBvbGwgKnBvbGw7Ci0gIEdQb2xsRkQgcG9sbGZkOwotfTsKLQotI2RlZmluZSBnc3RfYnVzX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEJ1cywgZ3N0X2J1cywgR1NUX1RZUEVfT0JKRUNUKTsKLQotc3RhdGljIHZvaWQKLWdzdF9idXNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEJ1cyAqYnVzID0gR1NUX0JVU19DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9FTkFCTEVfQVNZTkM6Ci0gICAgICBidXMtPnByaXYtPmVuYWJsZV9hc3luYyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9idXNfY29uc3RydWN0ZWQgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEJ1cyAqYnVzID0gR1NUX0JVU19DQVNUIChvYmplY3QpOwotCi0gIGlmIChidXMtPnByaXYtPmVuYWJsZV9hc3luYykgewotICAgIGJ1cy0+cHJpdi0+cG9sbCA9IGdzdF9wb2xsX25ld190aW1lciAoKTsKLSAgICBnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkIChidXMtPnByaXYtPnBvbGwsICZidXMtPnByaXYtPnBvbGxmZCk7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X2J1c19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9idXNfY2xhc3NfaW5pdCAoR3N0QnVzQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2J1c19kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9idXNfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9idXNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IGdzdF9idXNfY29uc3RydWN0ZWQ7Ci0KLSAgLyoqCi0gICAqIEdzdEJ1czo6ZW5hYmxlLWFzeW5jOgotICAgKgotICAgKiBFbmFibGUgYXN5bmMgbWVzc2FnZSBkZWxpdmVyeSBzdXBwb3J0IGZvciBidXMgd2F0Y2hlcywKLSAgICogZ3N0X2J1c19wb3AoKSBhbmQgc2ltaWxhciBBUEkuIFdpdGhvdXQgdGhpcyBvbmx5IHRoZQotICAgKiBzeW5jaHJvbm91cyBtZXNzYWdlIGhhbmRsZXJzIGFyZSBjYWxsZWQuCi0gICAqCi0gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBjcmVhdGUgdGhlIGNoaWxkIGVsZW1lbnQgYnVzZXMKLSAgICogaW4gI0dzdEJpbi4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRU5BQkxFX0FTWU5DLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJlbmFibGUtYXN5bmMiLCAiRW5hYmxlIEFzeW5jIiwKLSAgICAgICAgICAiRW5hYmxlIGFzeW5jIG1lc3NhZ2UgZGVsaXZlcnkgZm9yIGJ1cyB3YXRjaGVzIGFuZCBnc3RfYnVzX3BvcCgpIiwKLSAgICAgICAgICBERUZBVUxUX0VOQUJMRV9BU1lOQywKLSAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9XUklUQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0QnVzOjpzeW5jLW1lc3NhZ2U6Ci0gICAqIEBidXM6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAbWVzc2FnZTogdGhlIG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwb3N0ZWQgc3luY2hyb25vdXNseQotICAgKgotICAgKiBBIG1lc3NhZ2UgaGFzIGJlZW4gcG9zdGVkIG9uIHRoZSBidXMuIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgZnJvbSB0aGUKLSAgICogdGhyZWFkIHRoYXQgcG9zdGVkIHRoZSBtZXNzYWdlIHNvIG9uZSBoYXMgdG8gYmUgY2FyZWZ1bCB3aXRoIGxvY2tpbmcuCi0gICAqCi0gICAqIFRoaXMgc2lnbmFsIHdpbGwgbm90IGJlIGVtaXR0ZWQgYnkgZGVmYXVsdCwgeW91IGhhdmUgdG8gY2FsbAotICAgKiBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oKSBiZWZvcmUuCi0gICAqLwotICBnc3RfYnVzX3NpZ25hbHNbU1lOQ19NRVNTQUdFXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJzeW5jLW1lc3NhZ2UiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9ERVRBSUxFRCwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0QnVzQ2xhc3MsIHN5bmNfbWVzc2FnZSksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX01FU1NBR0UpOwotCi0gIC8qKgotICAgKiBHc3RCdXM6Om1lc3NhZ2U6Ci0gICAqIEBidXM6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAbWVzc2FnZTogdGhlIG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwb3N0ZWQgYXN5bmNocm9ub3VzbHkKLSAgICoKLSAgICogQSBtZXNzYWdlIGhhcyBiZWVuIHBvc3RlZCBvbiB0aGUgYnVzLiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGZyb20gYQotICAgKiBHU291cmNlIGFkZGVkIHRvIHRoZSBtYWlubG9vcC4gdGhpcyBzaWduYWwgd2lsbCBvbmx5IGJlIGVtaXR0ZWQgd2hlbgotICAgKiB0aGVyZSBpcyBhIG1haW5sb29wIHJ1bm5pbmcuCi0gICAqLwotICBnc3RfYnVzX3NpZ25hbHNbQVNZTkNfTUVTU0FHRV0gPQotICAgICAgZ19zaWduYWxfbmV3ICgibWVzc2FnZSIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0RFVEFJTEVELAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RCdXNDbGFzcywgbWVzc2FnZSksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX01FU1NBR0UpOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0QnVzUHJpdmF0ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2J1c19pbml0IChHc3RCdXMgKiBidXMpCi17Ci0gIGJ1cy0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoYnVzLCBHU1RfVFlQRV9CVVMsIEdzdEJ1c1ByaXZhdGUpOwotICBidXMtPnByaXYtPmVuYWJsZV9hc3luYyA9IERFRkFVTFRfRU5BQkxFX0FTWU5DOwotICBnX211dGV4X2luaXQgKCZidXMtPnByaXYtPnF1ZXVlX2xvY2spOwotICBidXMtPnByaXYtPnF1ZXVlID0gZ3N0X2F0b21pY19xdWV1ZV9uZXcgKDMyKTsKLQotICAvKiBjbGVhciBmbG9hdGluZyBmbGFnICovCi0gIGdzdF9vYmplY3RfcmVmX3NpbmsgKGJ1cyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAiY3JlYXRlZCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2J1c19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RCdXMgKmJ1cyA9IEdTVF9CVVMgKG9iamVjdCk7Ci0KLSAgaWYgKGJ1cy0+cHJpdi0+cXVldWUpIHsKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gICAgZ19tdXRleF9sb2NrICgmYnVzLT5wcml2LT5xdWV1ZV9sb2NrKTsKLSAgICBkbyB7Ci0gICAgICBtZXNzYWdlID0gZ3N0X2F0b21pY19xdWV1ZV9wb3AgKGJ1cy0+cHJpdi0+cXVldWUpOwotICAgICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICB9IHdoaWxlIChtZXNzYWdlICE9IE5VTEwpOwotICAgIGdzdF9hdG9taWNfcXVldWVfdW5yZWYgKGJ1cy0+cHJpdi0+cXVldWUpOwotICAgIGJ1cy0+cHJpdi0+cXVldWUgPSBOVUxMOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmYnVzLT5wcml2LT5xdWV1ZV9sb2NrKTsKLSAgICBnX211dGV4X2NsZWFyICgmYnVzLT5wcml2LT5xdWV1ZV9sb2NrKTsKLQotICAgIGlmIChidXMtPnByaXYtPnBvbGwpCi0gICAgICBnc3RfcG9sbF9mcmVlIChidXMtPnByaXYtPnBvbGwpOwotICAgIGJ1cy0+cHJpdi0+cG9sbCA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9idXNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEJ1cyAqYnVzID0gR1NUX0JVUyAob2JqZWN0KTsKLQotICBpZiAoYnVzLT5wcml2LT5zeW5jX2hhbmRsZXJfbm90aWZ5KQotICAgIGJ1cy0+cHJpdi0+c3luY19oYW5kbGVyX25vdGlmeSAoYnVzLT5wcml2LT5zeW5jX2hhbmRsZXJfZGF0YSk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKioKLSAqIGdzdF9idXNfbmV3OgotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdEJ1cyBpbnN0YW5jZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RCdXMgaW5zdGFuY2UKLSAqLwotR3N0QnVzICoKLWdzdF9idXNfbmV3ICh2b2lkKQotewotICBHc3RCdXMgKnJlc3VsdDsKLQotICByZXN1bHQgPSBnX29iamVjdF9uZXd2IChnc3RfYnVzX2dldF90eXBlICgpLCAwLCBOVUxMKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocmVzdWx0LCAiY3JlYXRlZCBuZXcgYnVzIik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX3Bvc3Q6Ci0gKiBAYnVzOiBhICNHc3RCdXMgdG8gcG9zdCBvbgotICogQG1lc3NhZ2U6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RNZXNzYWdlIHRvIHBvc3QKLSAqCi0gKiBQb3N0IGEgbWVzc2FnZSBvbiB0aGUgZ2l2ZW4gYnVzLiBPd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UKLSAqIGlzIHRha2VuIGJ5IHRoZSBidXMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG1lc3NhZ2UgY291bGQgYmUgcG9zdGVkLCAlRkFMU0UgaWYgdGhlIGJ1cyBpcyBmbHVzaGluZy4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1nYm9vbGVhbgotZ3N0X2J1c19wb3N0IChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBHc3RCdXNTeW5jUmVwbHkgcmVwbHkgPSBHU1RfQlVTX1BBU1M7Ci0gIEdzdEJ1c1N5bmNIYW5kbGVyIGhhbmRsZXI7Ci0gIGdib29sZWFuIGVtaXRfc3luY19tZXNzYWdlOwotICBncG9pbnRlciBoYW5kbGVyX2RhdGE7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSwgRkFMU0UpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgIlttc2cgJXBdIHBvc3Rpbmcgb24gYnVzICUiIEdTVF9QVFJfRk9STUFULCBtZXNzYWdlLAotICAgICAgbWVzc2FnZSk7Ci0KLSAgLyogY2hlY2sgd2UgZGlkbid0IGFjY2lkZW50YWxseSBhZGQgYSBwdWJsaWMgZmxhZyB0aGF0IG1hcHMgdG8gc2FtZSB2YWx1ZSAqLwotICBnX2Fzc2VydCAoIUdTVF9NSU5JX09CSkVDVF9GTEFHX0lTX1NFVCAobWVzc2FnZSwKLSAgICAgICAgICBHU1RfTUVTU0FHRV9GTEFHX0FTWU5DX0RFTElWRVJZKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChidXMpOwotICAvKiBjaGVjayBpZiB0aGUgYnVzIGlzIGZsdXNoaW5nICovCi0gIGlmIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChidXMsIEdTVF9CVVNfRkxVU0hJTkcpKQotICAgIGdvdG8gaXNfZmx1c2hpbmc7Ci0KLSAgaGFuZGxlciA9IGJ1cy0+cHJpdi0+c3luY19oYW5kbGVyOwotICBoYW5kbGVyX2RhdGEgPSBidXMtPnByaXYtPnN5bmNfaGFuZGxlcl9kYXRhOwotICBlbWl0X3N5bmNfbWVzc2FnZSA9IGJ1cy0+cHJpdi0+bnVtX3N5bmNfbWVzc2FnZV9lbWl0dGVycyA+IDA7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOwotCi0gIC8qIGZpcnN0IGNhbGwgdGhlIHN5bmMgaGFuZGxlciBpZiBpdCBpcyBpbnN0YWxsZWQgKi8KLSAgaWYgKGhhbmRsZXIpCi0gICAgcmVwbHkgPSBoYW5kbGVyIChidXMsIG1lc3NhZ2UsIGhhbmRsZXJfZGF0YSk7Ci0KLSAgLyogZW1pdCBzeW5jLW1lc3NhZ2UgaWYgcmVxdWVzdGVkIHRvIGRvIHNvIHZpYQotICAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24uIHRlcnJpYmxlIGJ1dCBlZmZlY3RpdmUgKi8KLSAgaWYgKGVtaXRfc3luY19tZXNzYWdlICYmIHJlcGx5ICE9IEdTVF9CVVNfRFJPUAotICAgICAgJiYgaGFuZGxlciAhPSBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIpCi0gICAgZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyIChidXMsIG1lc3NhZ2UsIE5VTEwpOwotCi0gIC8qIElmIHRoaXMgaXMgYSBidXMgd2l0aG91dCBhc3luYyBtZXNzYWdlIGRlbGl2ZXJ5Ci0gICAqIGFsd2F5cyBkcm9wIHRoZSBtZXNzYWdlICovCi0gIGlmICghYnVzLT5wcml2LT5wb2xsKQotICAgIHJlcGx5ID0gR1NUX0JVU19EUk9QOwotCi0gIC8qIG5vdyBzZWUgd2hhdCB3ZSBzaG91bGQgZG8gd2l0aCB0aGUgbWVzc2FnZSAqLwotICBzd2l0Y2ggKHJlcGx5KSB7Ci0gICAgY2FzZSBHU1RfQlVTX0RST1A6Ci0gICAgICAvKiBkcm9wIHRoZSBtZXNzYWdlICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJbbXNnICVwXSBkcm9wcGVkIiwgbWVzc2FnZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9CVVNfUEFTUzoKLSAgICAgIC8qIHBhc3MgdGhlIG1lc3NhZ2UgdG8gdGhlIGFzeW5jIHF1ZXVlLCByZWZjb3VudCBwYXNzZWQgaW4gdGhlIHF1ZXVlICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJbbXNnICVwXSBwdXNoaW5nIG9uIGFzeW5jIHF1ZXVlIiwgbWVzc2FnZSk7Ci0gICAgICBnc3RfYXRvbWljX3F1ZXVlX3B1c2ggKGJ1cy0+cHJpdi0+cXVldWUsIG1lc3NhZ2UpOwotICAgICAgZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAoYnVzLT5wcml2LT5wb2xsKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgIlttc2cgJXBdIHB1c2hlZCBvbiBhc3luYyBxdWV1ZSIsIG1lc3NhZ2UpOwotCi0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9CVVNfQVNZTkM6Ci0gICAgewotICAgICAgLyogYXN5bmMgZGVsaXZlcnksIHdlIG5lZWQgYSBtdXRleCBhbmQgYSBjb25kIHRvIGJsb2NrCi0gICAgICAgKiBvbiAqLwotICAgICAgR0NvbmQgKmNvbmQgPSBHU1RfTUVTU0FHRV9HRVRfQ09ORCAobWVzc2FnZSk7Ci0gICAgICBHTXV0ZXggKmxvY2sgPSBHU1RfTUVTU0FHRV9HRVRfTE9DSyAobWVzc2FnZSk7Ci0KLSAgICAgIGdfY29uZF9pbml0IChjb25kKTsKLSAgICAgIGdfbXV0ZXhfaW5pdCAobG9jayk7Ci0KLSAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCAobWVzc2FnZSwgR1NUX01FU1NBR0VfRkxBR19BU1lOQ19ERUxJVkVSWSk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgIlttc2cgJXBdIHdhaXRpbmcgZm9yIGFzeW5jIGRlbGl2ZXJ5IiwgbWVzc2FnZSk7Ci0KLSAgICAgIC8qIG5vdyB3ZSBsb2NrIHRoZSBtZXNzYWdlIG11dGV4LCBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBhc3luYwotICAgICAgICogcXVldWUuIFdoZW4gdGhlIG1lc3NhZ2UgaXMgaGFuZGxlZCBieSB0aGUgYXBwIGFuZCBkZXN0cm95ZWQsCi0gICAgICAgKiB0aGUgY29uZCB3aWxsIGJlIHNpZ25hbGxlZCBhbmQgd2UgY2FuIGNvbnRpbnVlICovCi0gICAgICBnX211dGV4X2xvY2sgKGxvY2spOwotCi0gICAgICBnc3RfYXRvbWljX3F1ZXVlX3B1c2ggKGJ1cy0+cHJpdi0+cXVldWUsIG1lc3NhZ2UpOwotICAgICAgZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAoYnVzLT5wcml2LT5wb2xsKTsKLQotICAgICAgLyogbm93IGJsb2NrIHRpbGwgdGhlIG1lc3NhZ2UgaXMgZnJlZWQgKi8KLSAgICAgIGdfY29uZF93YWl0IChjb25kLCBsb2NrKTsKLQotICAgICAgLyogd2UgYWNxdWlyZWQgYSBuZXcgcmVmIGZyb20gZ3N0X21lc3NhZ2VfZGlzcG9zZSgpIHNvIHdlIGNhbiBjbGVhbiB1cCAqLwotICAgICAgZ19tdXRleF91bmxvY2sgKGxvY2spOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJbbXNnICVwXSBkZWxpdmVyZWQgYXN5bmNocm9ub3VzbHkiLCBtZXNzYWdlKTsKLQotICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfVU5TRVQgKG1lc3NhZ2UsIEdTVF9NRVNTQUdFX0ZMQUdfQVNZTkNfREVMSVZFUlkpOwotCi0gICAgICBnX211dGV4X2NsZWFyIChsb2NrKTsKLSAgICAgIGdfY29uZF9jbGVhciAoY29uZCk7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgZ193YXJuaW5nICgiaW52YWxpZCByZXR1cm4gZnJvbSBidXMgc3luYyBoYW5kbGVyIik7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWlzX2ZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAiYnVzIGlzIGZsdXNoaW5nIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1cyk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2J1c19oYXZlX3BlbmRpbmc6Ci0gKiBAYnVzOiBhICNHc3RCdXMgdG8gY2hlY2sKLSAqCi0gKiBDaGVjayBpZiB0aGVyZSBhcmUgcGVuZGluZyBtZXNzYWdlcyBvbiB0aGUgYnVzIHRoYXQKLSAqIHNob3VsZCBiZSBoYW5kbGVkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZXJlIGFyZSBtZXNzYWdlcyBvbiB0aGUgYnVzIHRvIGJlIGhhbmRsZWQsICVGQUxTRQotICogb3RoZXJ3aXNlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfYnVzX2hhdmVfcGVuZGluZyAoR3N0QnVzICogYnVzKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIEZBTFNFKTsKLQotICAvKiBzZWUgaWYgdGhlcmUgaXMgYSBtZXNzYWdlIG9uIHRoZSBidXMgKi8KLSAgcmVzdWx0ID0gZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGggKGJ1cy0+cHJpdi0+cXVldWUpICE9IDA7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX3NldF9mbHVzaGluZzoKLSAqIEBidXM6IGEgI0dzdEJ1cwotICogQGZsdXNoaW5nOiB3aGV0aGVyIG9yIG5vdCB0byBmbHVzaCB0aGUgYnVzCi0gKgotICogSWYgQGZsdXNoaW5nLCBmbHVzaCBvdXQgYW5kIHVucmVmIGFueSBtZXNzYWdlcyBxdWV1ZWQgaW4gdGhlIGJ1cy4gUmVsZWFzZXMKLSAqIHJlZmVyZW5jZXMgdG8gdGhlIG1lc3NhZ2Ugb3JpZ2luIG9iamVjdHMuIFdpbGwgZmx1c2ggZnV0dXJlIG1lc3NhZ2VzIHVudGlsCi0gKiBnc3RfYnVzX3NldF9mbHVzaGluZygpIHNldHMgQGZsdXNoaW5nIHRvICVGQUxTRS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfYnVzX3NldF9mbHVzaGluZyAoR3N0QnVzICogYnVzLCBnYm9vbGVhbiBmbHVzaGluZykKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR0xpc3QgKm1lc3NhZ2VfbGlzdCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChidXMpOwotCi0gIGlmIChmbHVzaGluZykgewotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGJ1cywgR1NUX0JVU19GTFVTSElORyk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJzZXQgYnVzIGZsdXNoaW5nIik7Ci0KLSAgICB3aGlsZSAoKG1lc3NhZ2UgPSBnc3RfYnVzX3BvcCAoYnVzKSkpCi0gICAgICBtZXNzYWdlX2xpc3QgPSBnX2xpc3RfcHJlcGVuZCAobWVzc2FnZV9saXN0LCBtZXNzYWdlKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJ1bnNldCBidXMgZmx1c2hpbmciKTsKLSAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKGJ1cywgR1NUX0JVU19GTFVTSElORyk7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKLQotICBnX2xpc3RfZnJlZV9mdWxsIChtZXNzYWdlX2xpc3QsIChHRGVzdHJveU5vdGlmeSkgZ3N0X21lc3NhZ2VfdW5yZWYpOwotfQotCi0vKioKLSAqIGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkOgotICogQGJ1czogYSAjR3N0QnVzIHRvIHBvcCBmcm9tCi0gKiBAdGltZW91dDogYSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzLCBvciBHU1RfQ0xPQ0tfVElNRV9OT05FIHRvIHdhaXQgZm9yZXZlcgotICogQHR5cGVzOiBtZXNzYWdlIHR5cGVzIHRvIHRha2UgaW50byBhY2NvdW50LCBHU1RfTUVTU0FHRV9BTlkgZm9yIGFueSB0eXBlCi0gKgotICogR2V0IGEgbWVzc2FnZSBmcm9tIHRoZSBidXMgd2hvc2UgdHlwZSBtYXRjaGVzIHRoZSBtZXNzYWdlIHR5cGUgbWFzayBAdHlwZXMsCi0gKiB3YWl0aW5nIHVwIHRvIHRoZSBzcGVjaWZpZWQgdGltZW91dCAoYW5kIGRpc2NhcmRpbmcgYW55IG1lc3NhZ2VzIHRoYXQgZG8gbm90Ci0gKiBtYXRjaCB0aGUgbWFzayBwcm92aWRlZCkuCi0gKgotICogSWYgQHRpbWVvdXQgaXMgMCwgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgZ3N0X2J1c19wb3BfZmlsdGVyZWQoKS4gSWYKLSAqIEB0aW1lb3V0IGlzICNHU1RfQ0xPQ0tfVElNRV9OT05FLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgZm9yZXZlciB1bnRpbCBhCi0gKiBtYXRjaGluZyBtZXNzYWdlIHdhcyBwb3N0ZWQgb24gdGhlIGJ1cy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSAjR3N0TWVzc2FnZSBtYXRjaGluZyB0aGUKLSAqICAgICBmaWx0ZXIgaW4gQHR5cGVzLCBvciAlTlVMTCBpZiBubyBtYXRjaGluZyBtZXNzYWdlIHdhcyBmb3VuZCBvbgotICogICAgIHRoZSBidXMgdW50aWwgdGhlIHRpbWVvdXQgZXhwaXJlZC4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbQotICogICAgIHRoZSBidXMgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkIHdpdGggZ3N0X21lc3NhZ2VfdW5yZWYoKSBhZnRlcgotICogICAgIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKEdzdEJ1cyAqIGJ1cywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQsCi0gICAgR3N0TWVzc2FnZVR5cGUgdHlwZXMpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdUaW1lVmFsIG5vdywgdGhlbjsKLSAgZ2Jvb2xlYW4gZmlyc3Rfcm91bmQgPSBUUlVFOwotICBHc3RDbG9ja1RpbWUgZWxhcHNlZCA9IDA7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodHlwZXMgIT0gMCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0aW1lb3V0ID09IDAgfHwgYnVzLT5wcml2LT5wb2xsICE9IE5VTEwsIE5VTEwpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmJ1cy0+cHJpdi0+cXVldWVfbG9jayk7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBnaW50IHJldDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChidXMsICJoYXZlICVkIG1lc3NhZ2VzIiwKLSAgICAgICAgZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGggKGJ1cy0+cHJpdi0+cXVldWUpKTsKLQotICAgIHdoaWxlICgobWVzc2FnZSA9IGdzdF9hdG9taWNfcXVldWVfcG9wIChidXMtPnByaXYtPnF1ZXVlKSkpIHsKLSAgICAgIGlmIChidXMtPnByaXYtPnBvbGwpIHsKLSAgICAgICAgd2hpbGUgKCFnc3RfcG9sbF9yZWFkX2NvbnRyb2wgKGJ1cy0+cHJpdi0+cG9sbCkpIHsKLSAgICAgICAgICBpZiAoZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKLSAgICAgICAgICAgIC8qIFJldHJ5LCB0aGlzIGNhbiBoYXBwZW4gaWYgcHVzaGluZyB0byB0aGUgcXVldWUgaGFzIGZpbmlzaGVkLAotICAgICAgICAgICAgICogcG9wcGluZyBoZXJlIHN1Y2NlZWRlZCBidXQgd3JpdGluZyBjb250cm9sIGRpZCBub3QgZmluaXNoCi0gICAgICAgICAgICAgKiBiZWZvcmUgd2UgZ290IHRvIHRoaXMgbGluZS4gKi8KLSAgICAgICAgICAgIC8qIEdpdmUgb3RoZXIgdGhyZWFkcyB0aGUgY2hhbmNlIHRvIGRvIHNvbWV0aGluZyAqLwotICAgICAgICAgICAgZ190aHJlYWRfeWllbGQgKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogVGhpcyBpcyBhIHJlYWwgZXJyb3IgYW5kIG1lYW5zIHRoYXQgZWl0aGVyIHRoZSBidXMgaXMgaW4gYW4KLSAgICAgICAgICAgICAqIGluY29uc2lzdGVudCBzdGF0ZSwgb3IgdGhlIEdzdFBvbGwgaXMgaW52YWxpZC4gR3N0UG9sbCBhbHJlYWR5Ci0gICAgICAgICAgICAgKiBwcmludHMgYSBjcml0aWNhbCB3YXJuaW5nIGFib3V0IHRoaXMsIG5vIG5lZWQgdG8gZG8gdGhhdCBhZ2FpbgotICAgICAgICAgICAgICogb3Vyc2VsdmVzICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAiZ290IG1lc3NhZ2UgJXAsICVzIGZyb20gJXMsIHR5cGUgbWFzayBpcyAldSIsCi0gICAgICAgICAgbWVzc2FnZSwgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSwKLSAgICAgICAgICBHU1RfTUVTU0FHRV9TUkNfTkFNRSAobWVzc2FnZSksIChndWludCkgdHlwZXMpOwotICAgICAgaWYgKChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSAmIHR5cGVzKSAhPSAwKSB7Ci0gICAgICAgIC8qIEV4dHJhIGNoZWNrIHRvIGVuc3VyZSBleHRlbmRlZCB0eXBlcyBkb24ndCBnZXQgbWF0Y2hlZCB1bmxlc3MKLSAgICAgICAgICogYXNrZWQgZm9yICovCi0gICAgICAgIGlmICgoIUdTVF9NRVNTQUdFX1RZUEVfSVNfRVhURU5ERUQgKG1lc3NhZ2UpKQotICAgICAgICAgICAgfHwgKHR5cGVzICYgR1NUX01FU1NBR0VfRVhURU5ERUQpKSB7Ci0gICAgICAgICAgLyogZXhpdCB0aGUgbG9vcCwgd2UgaGF2ZSBhIG1lc3NhZ2UgKi8KLSAgICAgICAgICBnb3RvIGJlYWNoOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgImRpc2NhcmRpbmcgbWVzc2FnZSwgZG9lcyBub3QgbWF0Y2ggbWFzayIpOwotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgICAgbWVzc2FnZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgLyogbm8gbmVlZCB0byB3YWl0LCBleGl0IGxvb3AgKi8KLSAgICBpZiAodGltZW91dCA9PSAwKQotICAgICAgYnJlYWs7Ci0KLSAgICBlbHNlIGlmICh0aW1lb3V0ICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgIGlmIChmaXJzdF9yb3VuZCkgewotICAgICAgICBnX2dldF9jdXJyZW50X3RpbWUgKCZ0aGVuKTsKLSAgICAgICAgZmlyc3Rfcm91bmQgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJm5vdyk7Ci0KLSAgICAgICAgZWxhcHNlZCA9IEdTVF9USU1FVkFMX1RPX1RJTUUgKG5vdykgLSBHU1RfVElNRVZBTF9UT19USU1FICh0aGVuKTsKLQotICAgICAgICBpZiAoZWxhcHNlZCA+IHRpbWVvdXQpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogb25seSBoZXJlIGluIHRpbWVvdXQgY2FzZSAqLwotICAgIGdfYXNzZXJ0IChidXMtPnByaXYtPnBvbGwpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmYnVzLT5wcml2LT5xdWV1ZV9sb2NrKTsKLSAgICByZXQgPSBnc3RfcG9sbF93YWl0IChidXMtPnByaXYtPnBvbGwsIHRpbWVvdXQgLSBlbGFwc2VkKTsKLSAgICBnX211dGV4X2xvY2sgKCZidXMtPnByaXYtPnF1ZXVlX2xvY2spOwotCi0gICAgaWYgKHJldCA9PSAwKSB7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGJ1cywgInRpbWVkIG91dCwgYnJlYWtpbmcgbG9vcCIpOwotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoYnVzLCAid2UgZ290IHdva2VuIHVwLCByZWNoZWNrIGZvciBtZXNzYWdlIik7Ci0gICAgfQotICB9Ci0KLWJlYWNoOgotCi0gIGdfbXV0ZXhfdW5sb2NrICgmYnVzLT5wcml2LT5xdWV1ZV9sb2NrKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotCi0vKioKLSAqIGdzdF9idXNfdGltZWRfcG9wOgotICogQGJ1czogYSAjR3N0QnVzIHRvIHBvcAotICogQHRpbWVvdXQ6IGEgdGltZW91dAotICoKLSAqIEdldCBhIG1lc3NhZ2UgZnJvbSB0aGUgYnVzLCB3YWl0aW5nIHVwIHRvIHRoZSBzcGVjaWZpZWQgdGltZW91dC4KLSAqCi0gKiBJZiBAdGltZW91dCBpcyAwLCB0aGlzIGZ1bmN0aW9uIGJlaGF2ZXMgbGlrZSBnc3RfYnVzX3BvcCgpLiBJZiBAdGltZW91dCBpcwotICogI0dTVF9DTE9DS19USU1FX05PTkUsIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayBmb3JldmVyIHVudGlsIGEgbWVzc2FnZSB3YXMKLSAqIHBvc3RlZCBvbiB0aGUgYnVzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgI0dzdE1lc3NhZ2UgdGhhdCBpcyBvbiB0aGUKLSAqICAgICBidXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0IG9yICVOVUxMIGlmIHRoZSBidXMgaXMgZW1wdHkKLSAqICAgICBhZnRlciB0aGUgdGltZW91dCBleHBpcmVkLiAgVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzCi0gKiAgICAgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkIHdpdGggZ3N0X21lc3NhZ2VfdW5yZWYoKSBhZnRlciB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9idXNfdGltZWRfcG9wIChHc3RCdXMgKiBidXMsIEdzdENsb2NrVGltZSB0aW1lb3V0KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkIChidXMsIHRpbWVvdXQsIEdTVF9NRVNTQUdFX0FOWSk7Ci19Ci0KLS8qKgotICogZ3N0X2J1c19wb3BfZmlsdGVyZWQ6Ci0gKiBAYnVzOiBhICNHc3RCdXMgdG8gcG9wCi0gKiBAdHlwZXM6IG1lc3NhZ2UgdHlwZXMgdG8gdGFrZSBpbnRvIGFjY291bnQKLSAqCi0gKiBHZXQgYSBtZXNzYWdlIG1hdGNoaW5nIEB0eXBlIGZyb20gdGhlIGJ1cy4gIFdpbGwgZGlzY2FyZCBhbGwgbWVzc2FnZXMgb24KLSAqIHRoZSBidXMgdGhhdCBkbyBub3QgbWF0Y2ggQHR5cGUgYW5kIHRoYXQgaGF2ZSBiZWVuIHBvc3RlZCBiZWZvcmUgdGhlIGZpcnN0Ci0gKiBtZXNzYWdlIHRoYXQgZG9lcyBtYXRjaCBAdHlwZS4gIElmIHRoZXJlIGlzIG5vIG1lc3NhZ2UgbWF0Y2hpbmcgQHR5cGUgb24KLSAqIHRoZSBidXMsIGFsbCBtZXNzYWdlcyB3aWxsIGJlIGRpc2NhcmRlZC4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSBtZXNzYWdlCi0gKiBlbnVtcyBiZXlvbmQgI0dTVF9NRVNTQUdFX0VYVEVOREVEIGluIHRoZSBAZXZlbnRzIG1hc2suCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBuZXh0ICNHc3RNZXNzYWdlIG1hdGNoaW5nCi0gKiAgICAgQHR5cGUgdGhhdCBpcyBvbiB0aGUgYnVzLCBvciAlTlVMTCBpZiB0aGUgYnVzIGlzIGVtcHR5IG9yIHRoZXJlCi0gKiAgICAgaXMgbm8gbWVzc2FnZSBtYXRjaGluZyBAdHlwZS4gVGhlIG1lc3NhZ2UgaXMgdGFrZW4gZnJvbSB0aGUgYnVzCi0gKiAgICAgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkIHdpdGggZ3N0X21lc3NhZ2VfdW5yZWYoKSBhZnRlciB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9idXNfcG9wX2ZpbHRlcmVkIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2VUeXBlIHR5cGVzKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0eXBlcyAhPSAwLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKGJ1cywgMCwgdHlwZXMpOwotfQotCi0vKioKLSAqIGdzdF9idXNfcG9wOgotICogQGJ1czogYSAjR3N0QnVzIHRvIHBvcAotICoKLSAqIEdldCBhIG1lc3NhZ2UgZnJvbSB0aGUgYnVzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgI0dzdE1lc3NhZ2UgdGhhdCBpcyBvbiB0aGUKLSAqICAgICBidXMsIG9yICVOVUxMIGlmIHRoZSBidXMgaXMgZW1wdHkuIFRoZSBtZXNzYWdlIGlzIHRha2VuIGZyb20KLSAqICAgICB0aGUgYnVzIGFuZCBuZWVkcyB0byBiZSB1bnJlZmZlZCB3aXRoIGdzdF9tZXNzYWdlX3VucmVmKCkgYWZ0ZXIKLSAqICAgICB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9idXNfcG9wIChHc3RCdXMgKiBidXMpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKGJ1cywgMCwgR1NUX01FU1NBR0VfQU5ZKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX3BlZWs6Ci0gKiBAYnVzOiBhICNHc3RCdXMKLSAqCi0gKiBQZWVrIHRoZSBtZXNzYWdlIG9uIHRoZSB0b3Agb2YgdGhlIGJ1cycgcXVldWUuIFRoZSBtZXNzYWdlIHdpbGwgcmVtYWluCi0gKiBvbiB0aGUgYnVzJyBtZXNzYWdlIHF1ZXVlLiBBIHJlZmVyZW5jZSBpcyByZXR1cm5lZCwgYW5kIG5lZWRzIHRvIGJlIHVucmVmZmVkCi0gKiBieSB0aGUgY2FsbGVyLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgI0dzdE1lc3NhZ2UgdGhhdCBpcyBvbiB0aGUKLSAqICAgICBidXMsIG9yICVOVUxMIGlmIHRoZSBidXMgaXMgZW1wdHkuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfYnVzX3BlZWsgKEdzdEJ1cyAqIGJ1cykKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSwgTlVMTCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmYnVzLT5wcml2LT5xdWV1ZV9sb2NrKTsKLSAgbWVzc2FnZSA9IGdzdF9hdG9taWNfcXVldWVfcGVlayAoYnVzLT5wcml2LT5xdWV1ZSk7Ci0gIGlmIChtZXNzYWdlKQotICAgIGdzdF9tZXNzYWdlX3JlZiAobWVzc2FnZSk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmYnVzLT5wcml2LT5xdWV1ZV9sb2NrKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJwZWVrIG9uIGJ1cywgZ290IG1lc3NhZ2UgJXAiLCBtZXNzYWdlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXI6Ci0gKiBAYnVzOiBhICNHc3RCdXMgdG8gaW5zdGFsbCB0aGUgaGFuZGxlciBvbgotICogQGZ1bmM6IChhbGxvdy1ub25lKTogVGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gaW5zdGFsbAotICogQHVzZXJfZGF0YTogVXNlciBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLgotICogQG5vdGlmeTogY2FsbGVkIHdoZW4gQHVzZXJfZGF0YSBiZWNvbWVzIHVudXNlZAotICoKLSAqIFNldHMgdGhlIHN5bmNocm9ub3VzIGhhbmRsZXIgb24gdGhlIGJ1cy4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCi0gKiBldmVyeSB0aW1lIGEgbmV3IG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24KLSAqIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBzYW1lIHRocmVhZCBjb250ZXh0IGFzIHRoZSBwb3N0aW5nIG9iamVjdC4gVGhpcwotICogZnVuY3Rpb24gaXMgdXN1YWxseSBvbmx5IGNhbGxlZCBieSB0aGUgY3JlYXRvciBvZiB0aGUgYnVzLiBBcHBsaWNhdGlvbnMKLSAqIHNob3VsZCBoYW5kbGUgbWVzc2FnZXMgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhlIGdzdF9idXMgd2F0Y2ggYW5kIHBvbGwKLSAqIGZ1bmN0aW9ucy4KLSAqCi0gKiBZb3UgY2Fubm90IHJlcGxhY2UgYW4gZXhpc3Rpbmcgc3luY19oYW5kbGVyLiBZb3UgY2FuIHBhc3MgJU5VTEwgdG8gdGhpcwotICogZnVuY3Rpb24sIHdoaWNoIHdpbGwgY2xlYXIgdGhlIGV4aXN0aW5nIGhhbmRsZXIuCi0gKi8KLXZvaWQKLWdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RCdXNTeW5jSGFuZGxlciBmdW5jLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQotewotICBHRGVzdHJveU5vdGlmeSBvbGRfbm90aWZ5OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYnVzKTsKLSAgLyogQXNzZXJ0IGlmIHRoZSB1c2VyIGF0dGVtcHRzIHRvIHJlcGxhY2UgYW4gZXhpc3Rpbmcgc3luY19oYW5kbGVyLAotICAgKiBvdGhlciB0aGFuIHRvIGNsZWFyIGl0ICovCi0gIGlmIChmdW5jICE9IE5VTEwgJiYgYnVzLT5wcml2LT5zeW5jX2hhbmRsZXIgIT0gTlVMTCkKLSAgICBnb3RvIG5vX3JlcGxhY2U7Ci0KLSAgaWYgKChvbGRfbm90aWZ5ID0gYnVzLT5wcml2LT5zeW5jX2hhbmRsZXJfbm90aWZ5KSkgewotICAgIGdwb2ludGVyIG9sZF9kYXRhID0gYnVzLT5wcml2LT5zeW5jX2hhbmRsZXJfZGF0YTsKLQotICAgIGJ1cy0+cHJpdi0+c3luY19oYW5kbGVyX2RhdGEgPSBOVUxMOwotICAgIGJ1cy0+cHJpdi0+c3luY19oYW5kbGVyX25vdGlmeSA9IE5VTEw7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1cyk7Ci0KLSAgICBvbGRfbm90aWZ5IChvbGRfZGF0YSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGJ1cyk7Ci0gIH0KLSAgYnVzLT5wcml2LT5zeW5jX2hhbmRsZXIgPSBmdW5jOwotICBidXMtPnByaXYtPnN5bmNfaGFuZGxlcl9kYXRhID0gdXNlcl9kYXRhOwotICBidXMtPnByaXYtPnN5bmNfaGFuZGxlcl9ub3RpZnkgPSBub3RpZnk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOwotCi0gIHJldHVybjsKLQotbm9fcmVwbGFjZToKLSAgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOwotICAgIGdfd2FybmluZyAoImNhbm5vdCByZXBsYWNlIGV4aXN0aW5nIHN5bmMgaGFuZGxlciIpOwotICAgIHJldHVybjsKLSAgfQotfQotCi0vKiBHU291cmNlIGZvciB0aGUgYnVzCi0gKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdTb3VyY2Ugc291cmNlOwotICBHc3RCdXMgKmJ1czsKLX0gR3N0QnVzU291cmNlOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9idXNfc291cmNlX3ByZXBhcmUgKEdTb3VyY2UgKiBzb3VyY2UsIGdpbnQgKiB0aW1lb3V0KQotewotICAqdGltZW91dCA9IC0xOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2J1c19zb3VyY2VfY2hlY2sgKEdTb3VyY2UgKiBzb3VyY2UpCi17Ci0gIEdzdEJ1c1NvdXJjZSAqYnNyYyA9IChHc3RCdXNTb3VyY2UgKikgc291cmNlOwotCi0gIHJldHVybiBic3JjLT5idXMtPnByaXYtPnBvbGxmZC5yZXZlbnRzICYgKEdfSU9fSU4gfCBHX0lPX0hVUCB8IEdfSU9fRVJSKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYnVzX3NvdXJjZV9kaXNwYXRjaCAoR1NvdXJjZSAqIHNvdXJjZSwgR1NvdXJjZUZ1bmMgY2FsbGJhY2ssCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RCdXNGdW5jIGhhbmRsZXIgPSAoR3N0QnVzRnVuYykgY2FsbGJhY2s7Ci0gIEdzdEJ1c1NvdXJjZSAqYnNvdXJjZSA9IChHc3RCdXNTb3VyY2UgKikgc291cmNlOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBnYm9vbGVhbiBrZWVwOwotICBHc3RCdXMgKmJ1czsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnNvdXJjZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgYnVzID0gYnNvdXJjZS0+YnVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCBGQUxTRSk7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9wIChidXMpOwotCi0gIC8qIFRoZSBtZXNzYWdlIHF1ZXVlIG1pZ2h0IGJlIGVtcHR5IGlmIHNvbWUgb3RoZXIgdGhyZWFkIG9yIGNhbGxiYWNrIHNldAotICAgKiB0aGUgYnVzIHRvIGZsdXNoaW5nIGJldHdlZW4gY2hlY2svcHJlcGFyZSBhbmQgZGlzcGF0Y2ggKi8KLSAgaWYgKEdfVU5MSUtFTFkgKG1lc3NhZ2UgPT0gTlVMTCkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKCFoYW5kbGVyKQotICAgIGdvdG8gbm9faGFuZGxlcjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJzb3VyY2UgJXAgY2FsbGluZyBkaXNwYXRjaCB3aXRoICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgc291cmNlLCBtZXNzYWdlKTsKLQotICBrZWVwID0gaGFuZGxlciAoYnVzLCBtZXNzYWdlLCB1c2VyX2RhdGEpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAic291cmNlICVwIGhhbmRsZXIgcmV0dXJucyAlZCIsIHNvdXJjZSwga2VlcCk7Ci0KLSAgcmV0dXJuIGtlZXA7Ci0KLW5vX2hhbmRsZXI6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJHc3RCdXMgd2F0Y2ggZGlzcGF0Y2hlZCB3aXRob3V0IGNhbGxiYWNrXG4iCi0gICAgICAgICJZb3UgbXVzdCBjYWxsIGdfc291cmNlX3NldF9jYWxsYmFjaygpLiIpOwotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9idXNfc291cmNlX2ZpbmFsaXplIChHU291cmNlICogc291cmNlKQotewotICBHc3RCdXNTb3VyY2UgKmJzb3VyY2UgPSAoR3N0QnVzU291cmNlICopIHNvdXJjZTsKLSAgR3N0QnVzICpidXM7Ci0KLSAgYnVzID0gYnNvdXJjZS0+YnVzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgImZpbmFsaXplIHNvdXJjZSAlcCIsIHNvdXJjZSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChidXMpOwotICBpZiAoYnVzLT5wcml2LT5zaWduYWxfd2F0Y2ggPT0gc291cmNlKQotICAgIGJ1cy0+cHJpdi0+c2lnbmFsX3dhdGNoID0gTlVMTDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1cyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnNvdXJjZS0+YnVzKTsKLSAgYnNvdXJjZS0+YnVzID0gTlVMTDsKLX0KLQotc3RhdGljIEdTb3VyY2VGdW5jcyBnc3RfYnVzX3NvdXJjZV9mdW5jcyA9IHsKLSAgZ3N0X2J1c19zb3VyY2VfcHJlcGFyZSwKLSAgZ3N0X2J1c19zb3VyY2VfY2hlY2ssCi0gIGdzdF9idXNfc291cmNlX2Rpc3BhdGNoLAotICBnc3RfYnVzX3NvdXJjZV9maW5hbGl6ZQotfTsKLQotLyoqCi0gKiBnc3RfYnVzX2NyZWF0ZV93YXRjaDoKLSAqIEBidXM6IGEgI0dzdEJ1cyB0byBjcmVhdGUgdGhlIHdhdGNoIGZvcgotICoKLSAqIENyZWF0ZSB3YXRjaCBmb3IgdGhpcyBidXMuIFRoZSBHU291cmNlIHdpbGwgYmUgZGlzcGF0Y2hlZCB3aGVuZXZlcgotICogYSBtZXNzYWdlIGlzIG9uIHRoZSBidXMuIEFmdGVyIHRoZSBHU291cmNlIGlzIGRpc3BhdGNoZWQsIHRoZQotICogbWVzc2FnZSBpcyBwb3BwZWQgb2ZmIHRoZSBidXMgYW5kIHVucmVmZmVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR1NvdXJjZSB0aGF0IGNhbiBiZSBhZGRlZCB0byBhIG1haW5sb29wLgotICovCi1HU291cmNlICoKLWdzdF9idXNfY3JlYXRlX3dhdGNoIChHc3RCdXMgKiBidXMpCi17Ci0gIEdzdEJ1c1NvdXJjZSAqc291cmNlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1cy0+cHJpdi0+cG9sbCAhPSBOVUxMLCBOVUxMKTsKLQotICBzb3VyY2UgPSAoR3N0QnVzU291cmNlICopIGdfc291cmNlX25ldyAoJmdzdF9idXNfc291cmNlX2Z1bmNzLAotICAgICAgc2l6ZW9mIChHc3RCdXNTb3VyY2UpKTsKLQotICBnX3NvdXJjZV9zZXRfbmFtZSAoKEdTb3VyY2UgKikgc291cmNlLCAiR1N0cmVhbWVyIG1lc3NhZ2UgYnVzIHdhdGNoIik7Ci0KLSAgc291cmNlLT5idXMgPSBnc3Rfb2JqZWN0X3JlZiAoYnVzKTsKLSAgZ19zb3VyY2VfYWRkX3BvbGwgKChHU291cmNlICopIHNvdXJjZSwgJmJ1cy0+cHJpdi0+cG9sbGZkKTsKLQotICByZXR1cm4gKEdTb3VyY2UgKikgc291cmNlOwotfQotCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBidXMgT0JKRUNUIExPQ0sgKi8KLXN0YXRpYyBndWludAotZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbF91bmxvY2tlZCAoR3N0QnVzICogYnVzLCBnaW50IHByaW9yaXR5LAotICAgIEdzdEJ1c0Z1bmMgZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnkpCi17Ci0gIEdNYWluQ29udGV4dCAqY3R4OwotICBndWludCBpZDsKLSAgR1NvdXJjZSAqc291cmNlOwotCi0gIGlmIChidXMtPnByaXYtPnNpZ25hbF93YXRjaCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGJ1cywKLSAgICAgICAgIlRyaWVkIHRvIGFkZCBuZXcgd2F0Y2ggd2hpbGUgb25lIHdhcyBhbHJlYWR5IHRoZXJlIik7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBzb3VyY2UgPSBnc3RfYnVzX2NyZWF0ZV93YXRjaCAoYnVzKTsKLSAgaWYgKCFzb3VyY2UpIHsKLSAgICBnX2NyaXRpY2FsICgiQ3JlYXRpbmcgYnVzIHdhdGNoIGZhaWxlZCIpOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKHByaW9yaXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVCkKLSAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkgKHNvdXJjZSwgcHJpb3JpdHkpOwotCi0gIGdfc291cmNlX3NldF9jYWxsYmFjayAoc291cmNlLCAoR1NvdXJjZUZ1bmMpIGZ1bmMsIHVzZXJfZGF0YSwgbm90aWZ5KTsKLQotICBjdHggPSBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQgKCk7Ci0gIGlkID0gZ19zb3VyY2VfYXR0YWNoIChzb3VyY2UsIGN0eCk7Ci0gIGdfc291cmNlX3VucmVmIChzb3VyY2UpOwotCi0gIGlmIChpZCkgewotICAgIGJ1cy0+cHJpdi0+c2lnbmFsX3dhdGNoID0gc291cmNlOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYnVzLCAiTmV3IHNvdXJjZSAlcCB3aXRoIGlkICV1Iiwgc291cmNlLCBpZCk7Ci0gIHJldHVybiBpZDsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX2FkZF93YXRjaF9mdWxsOiAocmVuYW1lLXRvIGdzdF9idXNfYWRkX3dhdGNoKQotICogQGJ1czogYSAjR3N0QnVzIHRvIGNyZWF0ZSB0aGUgd2F0Y2ggZm9yLgotICogQHByaW9yaXR5OiBUaGUgcHJpb3JpdHkgb2YgdGhlIHdhdGNoLgotICogQGZ1bmM6IEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZC4KLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gQGZ1bmMuCi0gKiBAbm90aWZ5OiB0aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzb3VyY2UgaXMgcmVtb3ZlZC4KLSAqCi0gKiBBZGRzIGEgYnVzIHdhdGNoIHRvIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCB3aXRoIHRoZSBnaXZlbiBAcHJpb3JpdHkgKGUuZy4KLSAqICVHX1BSSU9SSVRZX0RFRkFVTFQpLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIG5vbi1kZWZhdWx0ICBtYWluCi0gKiBjb250ZXh0IHNldCB1cCB1c2luZyBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KCkgKGJlZm9yZQotICogb25lIGhhZCB0byBjcmVhdGUgYSBidXMgd2F0Y2ggc291cmNlIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGRlc2lyZWQgbWFpbgotICogY29udGV4dCAnbWFudWFsbHknKS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVjZWl2ZSBhc3luY2hyb25vdXMgbWVzc2FnZXMgaW4gdGhlIG1haW4gbG9vcC4KLSAqIFRoZXJlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGJ1cyB3YXRjaCBwZXIgYnVzLCB5b3UgbXVzdCByZW1vdmUgaXQgYmVmb3JlIHlvdQotICogY2FuIHNldCBhIG5ldyBvbmUuCi0gKgotICogVGhlIGJ1cyB3YXRjaCB3aWxsIG9ubHkgd29yayBpZiBhIEdMaWIgbWFpbiBsb29wIGlzIGJlaW5nIHJ1bi4KLSAqCi0gKiBXaGVuIEBmdW5jIGlzIGNhbGxlZCwgdGhlIG1lc3NhZ2UgYmVsb25ncyB0byB0aGUgY2FsbGVyOyBpZiB5b3Ugd2FudCB0bwotICoga2VlcCBhIGNvcHkgb2YgaXQsIGNhbGwgZ3N0X21lc3NhZ2VfcmVmKCkgYmVmb3JlIGxlYXZpbmcgQGZ1bmMuCi0gKgotICogVGhlIHdhdGNoIGNhbiBiZSByZW1vdmVkIHVzaW5nIGdzdF9idXNfcmVtb3ZlX3dhdGNoKCkgb3IgYnkgcmV0dXJuaW5nICVGQUxTRQotICogZnJvbSBAZnVuYy4gSWYgdGhlIHdhdGNoIHdhcyBhZGRlZCB0byB0aGUgZGVmYXVsdCBtYWluIGNvbnRleHQgaXQgaXMgYWxzbwotICogcG9zc2libGUgdG8gcmVtb3ZlIHRoZSB3YXRjaCB1c2luZyBnX3NvdXJjZV9yZW1vdmUoKS4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IFRoZSBldmVudCBzb3VyY2UgaWQgb3IgMCBpZiBAYnVzIGFscmVhZHkgZ290IGFuIGV2ZW50IHNvdXJjZS4KLSAqLwotZ3VpbnQKLWdzdF9idXNfYWRkX3dhdGNoX2Z1bGwgKEdzdEJ1cyAqIGJ1cywgZ2ludCBwcmlvcml0eSwKLSAgICBHc3RCdXNGdW5jIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQotewotICBndWludCBpZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSwgMCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChidXMpOwotICBpZCA9IGdzdF9idXNfYWRkX3dhdGNoX2Z1bGxfdW5sb2NrZWQgKGJ1cywgcHJpb3JpdHksIGZ1bmMsIHVzZXJfZGF0YSwgbm90aWZ5KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1cyk7Ci0KLSAgcmV0dXJuIGlkOwotfQotCi0vKioKLSAqIGdzdF9idXNfYWRkX3dhdGNoOiAoc2tpcCkKLSAqIEBidXM6IGEgI0dzdEJ1cyB0byBjcmVhdGUgdGhlIHdhdGNoIGZvcgotICogQGZ1bmM6IEEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZC4KLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gQGZ1bmMuCi0gKgotICogQWRkcyBhIGJ1cyB3YXRjaCB0byB0aGUgZGVmYXVsdCBtYWluIGNvbnRleHQgd2l0aCB0aGUgZGVmYXVsdCBwcmlvcml0eQotICogKCVHX1BSSU9SSVRZX0RFRkFVTFQpLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIG5vbi1kZWZhdWx0IG1haW4KLSAqIGNvbnRleHQgc2V0IHVwIHVzaW5nIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQoKSAoYmVmb3JlCi0gKiBvbmUgaGFkIHRvIGNyZWF0ZSBhIGJ1cyB3YXRjaCBzb3VyY2UgYW5kIGF0dGFjaCBpdCB0byB0aGUgZGVzaXJlZCBtYWluCi0gKiBjb250ZXh0ICdtYW51YWxseScpLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWNlaXZlIGFzeW5jaHJvbm91cyBtZXNzYWdlcyBpbiB0aGUgbWFpbiBsb29wLgotICogVGhlcmUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgYnVzIHdhdGNoIHBlciBidXMsIHlvdSBtdXN0IHJlbW92ZSBpdCBiZWZvcmUgeW91Ci0gKiBjYW4gc2V0IGEgbmV3IG9uZS4KLSAqCi0gKiBUaGUgYnVzIHdhdGNoIHdpbGwgb25seSB3b3JrIGlmIGEgR0xpYiBtYWluIGxvb3AgaXMgYmVpbmcgcnVuLgotICoKLSAqIFRoZSB3YXRjaCBjYW4gYmUgcmVtb3ZlZCB1c2luZyBnc3RfYnVzX3JlbW92ZV93YXRjaCgpIG9yIGJ5IHJldHVybmluZyAlRkFMU0UKLSAqIGZyb20gQGZ1bmMuIElmIHRoZSB3YXRjaCB3YXMgYWRkZWQgdG8gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IGl0IGlzIGFsc28KLSAqIHBvc3NpYmxlIHRvIHJlbW92ZSB0aGUgd2F0Y2ggdXNpbmcgZ19zb3VyY2VfcmVtb3ZlKCkuCi0gKgotICogUmV0dXJuczogVGhlIGV2ZW50IHNvdXJjZSBpZCBvciAwIGlmIEBidXMgYWxyZWFkeSBnb3QgYW4gZXZlbnQgc291cmNlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWd1aW50Ci1nc3RfYnVzX2FkZF93YXRjaCAoR3N0QnVzICogYnVzLCBHc3RCdXNGdW5jIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcmV0dXJuIGdzdF9idXNfYWRkX3dhdGNoX2Z1bGwgKGJ1cywgR19QUklPUklUWV9ERUZBVUxULCBmdW5jLAotICAgICAgdXNlcl9kYXRhLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX3JlbW92ZV93YXRjaDoKLSAqIEBidXM6IGEgI0dzdEJ1cyB0byByZW1vdmUgdGhlIHdhdGNoIGZyb20uCi0gKgotICogUmVtb3ZlcyBhbiBpbnN0YWxsZWQgYnVzIHdhdGNoIGZyb20gQGJ1cy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBvbiBzdWNjZXNzIG9yICVGQUxTRSBpZiBAYnVzIGhhcyBubyBldmVudCBzb3VyY2UuCi0gKgotICogU2luY2U6IDEuNgotICoKLSAqLwotZ2Jvb2xlYW4KLWdzdF9idXNfcmVtb3ZlX3dhdGNoIChHc3RCdXMgKiBidXMpCi17Ci0gIEdTb3VyY2UgKndhdGNoX2lkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChidXMpOwotCi0gIGlmIChidXMtPnByaXYtPnNpZ25hbF93YXRjaCA9PSBOVUxMKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoYnVzLCAibm8gYnVzIHdhdGNoIHdhcyBwcmVzZW50Iik7Ci0gICAgZ290byBub193YXRjaDsKLSAgfQotCi0gIHdhdGNoX2lkID0gYnVzLT5wcml2LT5zaWduYWxfd2F0Y2g7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1cyk7Ci0KLSAgZ19zb3VyY2VfZGVzdHJveSAod2F0Y2hfaWQpOwotCi0gIHJldHVybiBUUlVFOwotCi1ub193YXRjaDoKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1cyk7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIGd1aW50IHRpbWVvdXRfaWQ7Ci0gIGdib29sZWFuIHNvdXJjZV9ydW5uaW5nOwotICBHc3RNZXNzYWdlVHlwZSBldmVudHM7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci19IEdzdEJ1c1BvbGxEYXRhOwotCi1zdGF0aWMgdm9pZAotcG9sbF9mdW5jIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RCdXNQb2xsRGF0YSAqIHBvbGxfZGF0YSkKLXsKLSAgR3N0TWVzc2FnZVR5cGUgdHlwZTsKLQotICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmcgKHBvbGxfZGF0YS0+bG9vcCkpIHsKLSAgICBHU1RfREVCVUcgKCJtYWlubG9vcCAlcCBub3QgcnVubmluZyIsIHBvbGxfZGF0YS0+bG9vcCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgdHlwZSA9IEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpOwotCi0gIGlmICh0eXBlICYgcG9sbF9kYXRhLT5ldmVudHMpIHsKLSAgICBnX2Fzc2VydCAocG9sbF9kYXRhLT5tZXNzYWdlID09IE5VTEwpOwotICAgIC8qIGtlZXAgcmVmIHRvIG1lc3NhZ2UgKi8KLSAgICBwb2xsX2RhdGEtPm1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9yZWYgKG1lc3NhZ2UpOwotICAgIEdTVF9ERUJVRyAoIm1haW5sb29wICVwIHF1aXQiLCBwb2xsX2RhdGEtPmxvb3ApOwotICAgIGdfbWFpbl9sb29wX3F1aXQgKHBvbGxfZGF0YS0+bG9vcCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHICgidHlwZSAlMDh4IGRvZXMgbm90IG1hdGNoICUwOHgiLCB0eXBlLCBwb2xsX2RhdGEtPmV2ZW50cyk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1wb2xsX3RpbWVvdXQgKEdzdEJ1c1BvbGxEYXRhICogcG9sbF9kYXRhKQotewotICBHU1RfREVCVUcgKCJtYWlubG9vcCAlcCBxdWl0IiwgcG9sbF9kYXRhLT5sb29wKTsKLSAgZ19tYWluX2xvb3BfcXVpdCAocG9sbF9kYXRhLT5sb29wKTsKLQotICAvKiB3ZSBkb24ndCByZW1vdmUgdGhlIEdTb3VyY2UgYXMgdGhpcyB3b3VsZCBmcmVlIG91ciBwb2xsX2RhdGEsCi0gICAqIHdoaWNoIHdlIHN0aWxsIG5lZWQgKi8KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wb2xsX2Rlc3Ryb3kgKEdzdEJ1c1BvbGxEYXRhICogcG9sbF9kYXRhLCBncG9pbnRlciB1bnVzZWQpCi17Ci0gIHBvbGxfZGF0YS0+c291cmNlX3J1bm5pbmcgPSBGQUxTRTsKLSAgaWYgKCFwb2xsX2RhdGEtPnRpbWVvdXRfaWQpIHsKLSAgICBnX21haW5fbG9vcF91bnJlZiAocG9sbF9kYXRhLT5sb29wKTsKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdEJ1c1BvbGxEYXRhLCBwb2xsX2RhdGEpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wb2xsX2Rlc3Ryb3lfdGltZW91dCAoR3N0QnVzUG9sbERhdGEgKiBwb2xsX2RhdGEpCi17Ci0gIHBvbGxfZGF0YS0+dGltZW91dF9pZCA9IDA7Ci0gIGlmICghcG9sbF9kYXRhLT5zb3VyY2VfcnVubmluZykgewotICAgIGdfbWFpbl9sb29wX3VucmVmIChwb2xsX2RhdGEtPmxvb3ApOwotICAgIGdfc2xpY2VfZnJlZSAoR3N0QnVzUG9sbERhdGEsIHBvbGxfZGF0YSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYnVzX3BvbGw6Ci0gKiBAYnVzOiBhICNHc3RCdXMKLSAqIEBldmVudHM6IGEgbWFzayBvZiAjR3N0TWVzc2FnZVR5cGUsIHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIG1lc3NhZ2UgdHlwZXMgdG8KLSAqIHBvbGwgZm9yIChub3RlIHNwZWNpYWwgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgbWVzc2FnZSB0eXBlcyBiZWxvdykKLSAqIEB0aW1lb3V0OiB0aGUgcG9sbCB0aW1lb3V0LCBhcyBhICNHc3RDbG9ja1RpbWUsIG9yICNHU1RfQ0xPQ0tfVElNRV9OT05FIHRvIHBvbGwKLSAqIGluZGVmaW5pdGVseS4KLSAqCi0gKiBQb2xsIHRoZSBidXMgZm9yIG1lc3NhZ2VzLiBXaWxsIGJsb2NrIHdoaWxlIHdhaXRpbmcgZm9yIG1lc3NhZ2VzIHRvIGNvbWUuCi0gKiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIHRpbWUgdG8gcG9sbCB3aXRoIHRoZSBAdGltZW91dCBwYXJhbWV0ZXIuIElmCi0gKiBAdGltZW91dCBpcyBuZWdhdGl2ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIGluZGVmaW5pdGVseS4KLSAqCi0gKiBBbGwgbWVzc2FnZXMgbm90IGluIEBldmVudHMgd2lsbCBiZSBwb3BwZWQgb2ZmIHRoZSBidXMgYW5kIHdpbGwgYmUgaWdub3JlZC4KLSAqIEl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgbWVzc2FnZSBlbnVtcyBiZXlvbmQgI0dTVF9NRVNTQUdFX0VYVEVOREVEIGluIHRoZQotICogQGV2ZW50cyBtYXNrCi0gKgotICogQmVjYXVzZSBwb2xsIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAibWVzc2FnZSIgc2lnbmFsIGVuYWJsZWQgYnkKLSAqIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCgpLCBjYWxsaW5nIGdzdF9idXNfcG9sbCgpIHdpbGwgY2F1c2UgdGhlICJtZXNzYWdlIgotICogc2lnbmFsIHRvIGJlIGVtaXR0ZWQgZm9yIGV2ZXJ5IG1lc3NhZ2UgdGhhdCBwb2xsIHNlZXMuIFRodXMgYSAibWVzc2FnZSIKLSAqIHNpZ25hbCBoYW5kbGVyIHdpbGwgc2VlIHRoZSBzYW1lIG1lc3NhZ2VzIHRoYXQgdGhpcyBmdW5jdGlvbiBzZWVzIC0tIG5laXRoZXIKLSAqIHdpbGwgc3RlYWwgbWVzc2FnZXMgZnJvbSB0aGUgb3RoZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIHJ1biBhIG1haW4gbG9vcCBmcm9tIHRoZSBkZWZhdWx0IG1haW4gY29udGV4dCB3aGVuCi0gKiBwb2xsaW5nLgotICoKLSAqIFlvdSBzaG91bGQgbmV2ZXIgdXNlIHRoaXMgZnVuY3Rpb24sIHNpbmNlIGl0IGlzIHB1cmUgZXZpbC4gVGhpcyBpcwotICogZXNwZWNpYWxseSB0cnVlIGZvciBHVUkgYXBwbGljYXRpb25zIGJhc2VkIG9uIEd0aysgb3IgUXQsIGJ1dCBhbHNvIGZvciBhbnkKLSAqIG90aGVyIG5vbi10cml2aWFsIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgR0xpYiBtYWluIGxvb3AuIEFzIHRoaXMgZnVuY3Rpb24KLSAqIHJ1bnMgYSBHTGliIG1haW4gbG9vcCwgYW55IGNhbGxiYWNrIGF0dGFjaGVkIHRvIHRoZSBkZWZhdWx0IEdMaWIgbWFpbgotICogY29udGV4dCBtYXkgYmUgaW52b2tlZC4gVGhpcyBjb3VsZCBiZSB0aW1lb3V0cywgR1VJIGV2ZW50cywgSS9PIGV2ZW50cyBldGMuOwotICogZXZlbiBpZiBnc3RfYnVzX3BvbGwoKSBpcyBjYWxsZWQgd2l0aCBhIDAgdGltZW91dC4gQW55IG9mIHRoZXNlIGNhbGxiYWNrcwotICogbWF5IGRvIHRoaW5ncyB5b3UgZG8gbm90IGV4cGVjdCwgZS5nLiBkZXN0cm95IHRoZSBtYWluIGFwcGxpY2F0aW9uIHdpbmRvdyBvcgotICogc29tZSBvdGhlciByZXNvdXJjZTsgY2hhbmdlIG90aGVyIGFwcGxpY2F0aW9uIHN0YXRlOyBkaXNwbGF5IGEgZGlhbG9nIGFuZAotICogcnVuIGFub3RoZXIgbWFpbiBsb29wIHVudGlsIHRoZSB1c2VyIGNsaWNrcyBpdCBhd2F5LiBJbiBzaG9ydCwgdXNpbmcgdGhpcwotICogZnVuY3Rpb24gbWF5IGFkZCBhIGxvdCBvZiBjb21wbGV4aXR5IHRvIHlvdXIgY29kZSB0aHJvdWdoIHVuZXhwZWN0ZWQKLSAqIHJlLWVudHJhbmN5IGFuZCB1bmV4cGVjdGVkIGNoYW5nZXMgdG8geW91ciBhcHBsaWNhdGlvbidzIHN0YXRlLgotICoKLSAqIEZvciAwIHRpbWVvdXRzIHVzZSBnc3RfYnVzX3BvcF9maWx0ZXJlZCgpIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlvbjsgZm9yCi0gKiBvdGhlciBzaG9ydCB0aW1lb3V0cyB1c2UgZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQoKTsgZXZlcnl0aGluZyBlbHNlIGlzCi0gKiBiZXR0ZXIgaGFuZGxlZCBieSBzZXR0aW5nIHVwIGFuIGFzeW5jaHJvbm91cyBidXMgd2F0Y2ggYW5kIGRvaW5nIHRoaW5ncwotICogZnJvbSB0aGVyZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdGhlIG1lc3NhZ2UgdGhhdCB3YXMgcmVjZWl2ZWQsCi0gKiAgICAgb3IgJU5VTEwgaWYgdGhlIHBvbGwgdGltZWQgb3V0LiBUaGUgbWVzc2FnZSBpcyB0YWtlbiBmcm9tIHRoZQotICogICAgIGJ1cyBhbmQgbmVlZHMgdG8gYmUgdW5yZWZmZWQgd2l0aCBnc3RfbWVzc2FnZV91bnJlZigpIGFmdGVyCi0gKiAgICAgdXNhZ2UuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X2J1c19wb2xsIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2VUeXBlIGV2ZW50cywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpCi17Ci0gIEdzdEJ1c1BvbGxEYXRhICpwb2xsX2RhdGE7Ci0gIEdzdE1lc3NhZ2UgKnJldDsKLSAgZ3Vsb25nIGlkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCBOVUxMKTsKLQotICBwb2xsX2RhdGEgPSBnX3NsaWNlX25ldyAoR3N0QnVzUG9sbERhdGEpOwotICBwb2xsX2RhdGEtPnNvdXJjZV9ydW5uaW5nID0gVFJVRTsKLSAgcG9sbF9kYXRhLT5sb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0gIHBvbGxfZGF0YS0+ZXZlbnRzID0gZXZlbnRzOwotICBwb2xsX2RhdGEtPm1lc3NhZ2UgPSBOVUxMOwotCi0gIGlmICh0aW1lb3V0ICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgcG9sbF9kYXRhLT50aW1lb3V0X2lkID0gZ190aW1lb3V0X2FkZF9mdWxsIChHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSwKLSAgICAgICAgdGltZW91dCAvIEdTVF9NU0VDT05ELCAoR1NvdXJjZUZ1bmMpIHBvbGxfdGltZW91dCwgcG9sbF9kYXRhLAotICAgICAgICAoR0Rlc3Ryb3lOb3RpZnkpIHBvbGxfZGVzdHJveV90aW1lb3V0KTsKLSAgZWxzZQotICAgIHBvbGxfZGF0YS0+dGltZW91dF9pZCA9IDA7Ci0KLSAgaWQgPSBnX3NpZ25hbF9jb25uZWN0X2RhdGEgKGJ1cywgIm1lc3NhZ2UiLCBHX0NBTExCQUNLIChwb2xsX2Z1bmMpLCBwb2xsX2RhdGEsCi0gICAgICAoR0Nsb3N1cmVOb3RpZnkpIHBvbGxfZGVzdHJveSwgMCk7Ci0KLSAgLyogdGhlc2UgY2FuIGJlIG5lc3RlZCwgc28gaXQncyBvayAqLwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0KLSAgR1NUX0RFQlVHICgicnVubmluZyBtYWlubG9vcCAlcCIsIHBvbGxfZGF0YS0+bG9vcCk7Ci0gIGdfbWFpbl9sb29wX3J1biAocG9sbF9kYXRhLT5sb29wKTsKLSAgR1NUX0RFQlVHICgibWFpbmxvb3Agc3RvcHBlZCAlcCIsIHBvbGxfZGF0YS0+bG9vcCk7Ci0KLSAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoIChidXMpOwotCi0gIC8qIGhvbGRzIGEgcmVmICovCi0gIHJldCA9IHBvbGxfZGF0YS0+bWVzc2FnZTsKLQotICBpZiAocG9sbF9kYXRhLT50aW1lb3V0X2lkKQotICAgIGdfc291cmNlX3JlbW92ZSAocG9sbF9kYXRhLT50aW1lb3V0X2lkKTsKLQotICAvKiBwb2xsX2RhdGEgd2lsbCBiZSBmcmVlZCBub3cgKi8KLSAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChidXMsIGlkKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChidXMsICJmaW5pc2hlZCBwb2xsIHdpdGggbWVzc2FnZSAlcCIsIHJldCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jOgotICogQGJ1czogYSAjR3N0QnVzCi0gKiBAbWVzc2FnZTogdGhlICNHc3RNZXNzYWdlIHJlY2VpdmVkCi0gKiBAZGF0YTogdXNlciBkYXRhCi0gKgotICogQSBoZWxwZXIgI0dzdEJ1c0Z1bmMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFsbCBhc3luY2hyb25vdXMgbWVzc2FnZXMKLSAqIGludG8gc2lnbmFscy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRQotICovCi1nYm9vbGVhbgotZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYyAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR1F1YXJrIGRldGFpbCA9IDA7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVVMgKGJ1cyksIFRSVUUpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVzc2FnZSAhPSBOVUxMLCBUUlVFKTsKLQotICBkZXRhaWwgPSBnc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSk7Ci0KLSAgZ19zaWduYWxfZW1pdCAoYnVzLCBnc3RfYnVzX3NpZ25hbHNbQVNZTkNfTUVTU0FHRV0sIGRldGFpbCwgbWVzc2FnZSk7Ci0KLSAgLyogd2UgbmV2ZXIgcmVtb3ZlIHRoaXMgc291cmNlIGJhc2VkIG9uIHNpZ25hbCBlbWlzc2lvbiByZXR1cm4gdmFsdWVzICovCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlcjoKLSAqIEBidXM6IGEgI0dzdEJ1cwotICogQG1lc3NhZ2U6IHRoZSAjR3N0TWVzc2FnZSByZWNlaXZlZAotICogQGRhdGE6IHVzZXIgZGF0YQotICoKLSAqIEEgaGVscGVyIEdzdEJ1c1N5bmNIYW5kbGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhbGwgc3luY2hyb25vdXMKLSAqIG1lc3NhZ2VzIGludG8gc2lnbmFscy4KLSAqCi0gKiBSZXR1cm5zOiBHU1RfQlVTX1BBU1MKLSAqLwotR3N0QnVzU3luY1JlcGx5Ci1nc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdRdWFyayBkZXRhaWwgPSAwOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpLCBHU1RfQlVTX0RST1ApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVzc2FnZSAhPSBOVUxMLCBHU1RfQlVTX0RST1ApOwotCi0gIGRldGFpbCA9IGdzdF9tZXNzYWdlX3R5cGVfdG9fcXVhcmsgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKTsKLQotICBnX3NpZ25hbF9lbWl0IChidXMsIGdzdF9idXNfc2lnbmFsc1tTWU5DX01FU1NBR0VdLCBkZXRhaWwsIG1lc3NhZ2UpOwotCi0gIHJldHVybiBHU1RfQlVTX1BBU1M7Ci19Ci0KLS8qKgotICogZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uOgotICogQGJ1czogYSAjR3N0QnVzIG9uIHdoaWNoIHlvdSB3YW50IHRvIHJlY2VpdmUgdGhlICJzeW5jLW1lc3NhZ2UiIHNpZ25hbAotICoKLSAqIEluc3RydWN0cyBHU3RyZWFtZXIgdG8gZW1pdCB0aGUgInN5bmMtbWVzc2FnZSIgc2lnbmFsIGFmdGVyIHJ1bm5pbmcgdGhlIGJ1cydzCi0gKiBzeW5jIGhhbmRsZXIuIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSBzbyB0aGF0IGNvZGUgY2FuIGVuc3VyZSB0aGF0IHRoZXkgY2FuCi0gKiBzeW5jaHJvbm91c2x5IHJlY2VpdmUgbWVzc2FnZXMgd2l0aG91dCBoYXZpbmcgdG8gYWZmZWN0IHdoYXQgdGhlIGJpbidzIHN5bmMKLSAqIGhhbmRsZXIgaXMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBUbyBjbGVhbiB1cCwgdGhlIGNhbGxlciBpcwotICogcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpIGFzIG1hbnkgdGltZXMKLSAqIGFzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgotICoKLSAqIFdoaWxlIHRoaXMgZnVuY3Rpb24gbG9va3Mgc2ltaWxhciB0byBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKSwgaXQgaXMgbm90Ci0gKiBleGFjdGx5IHRoZSBzYW1lIC0tIHRoaXMgZnVuY3Rpb24gZW5hYmxlcyA8ZW1waGFzaXM+c3luY2hyb25vdXM8L2VtcGhhc2lzPiBlbWlzc2lvbiBvZgotICogc2lnbmFscyB3aGVuIG1lc3NhZ2VzIGFycml2ZTsgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKCkgYWRkcyBhbiBpZGxlIGNhbGxiYWNrCi0gKiB0byBwb3AgbWVzc2FnZXMgb2ZmIHRoZSBidXMgPGVtcGhhc2lzPmFzeW5jaHJvbm91c2x5PC9lbXBoYXNpcz4uIFRoZSBzeW5jLW1lc3NhZ2Ugc2lnbmFsCi0gKiBjb21lcyBmcm9tIHRoZSB0aHJlYWQgb2Ygd2hhdGV2ZXIgb2JqZWN0IHBvc3RlZCB0aGUgbWVzc2FnZTsgdGhlICJtZXNzYWdlIgotICogc2lnbmFsIGlzIG1hcnNoYWxsZWQgdG8gdGhlIG1haW4gdGhyZWFkIHZpYSB0aGUgbWFpbiBsb29wLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoR3N0QnVzICogYnVzKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJ1cyk7Ci0gIGJ1cy0+cHJpdi0+bnVtX3N5bmNfbWVzc2FnZV9lbWl0dGVycysrOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX2Rpc2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uOgotICogQGJ1czogYSAjR3N0QnVzIG9uIHdoaWNoIHlvdSBwcmV2aW91c2x5IGNhbGxlZAotICogZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKCkKLSAqCi0gKiBJbnN0cnVjdHMgR1N0cmVhbWVyIHRvIHN0b3AgZW1pdHRpbmcgdGhlICJzeW5jLW1lc3NhZ2UiIHNpZ25hbCBmb3IgdGhpcyBidXMuCi0gKiBTZWUgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogSW4gdGhlIGV2ZW50IHRoYXQgbXVsdGlwbGUgcGllY2VzIG9mIGNvZGUgaGF2ZSBjYWxsZWQKLSAqIGdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpLCB0aGUgc3luYy1tZXNzYWdlIGVtaXNzaW9ucyB3aWxsIG9ubHkKLSAqIGJlIHN0b3BwZWQgYWZ0ZXIgYWxsIGNhbGxzIHRvIGdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbigpIHdlcmUKLSAqICJjYW5jZWxsZWQiIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gSW4gdGhpcyB3YXkgdGhlIHNlbWFudGljcyBhcmUgZXhhY3RseQotICogdGhlIHNhbWUgYXMgZ3N0X29iamVjdF9yZWYoKSB0aGF0IHdoaWNoIGNhbGxzIGVuYWJsZSBzaG91bGQgYWxzbyBjYWxsCi0gKiBkaXNhYmxlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24gKEdzdEJ1cyAqIGJ1cykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGJ1cy0+cHJpdi0+bnVtX3N5bmNfbWVzc2FnZV9lbWl0dGVycyA+IDApOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYnVzKTsKLSAgYnVzLT5wcml2LT5udW1fc3luY19tZXNzYWdlX2VtaXR0ZXJzLS07Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOwotfQotCi0vKioKLSAqIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsOgotICogQGJ1czogYSAjR3N0QnVzIG9uIHdoaWNoIHlvdSB3YW50IHRvIHJlY2VpdmUgdGhlICJtZXNzYWdlIiBzaWduYWwKLSAqIEBwcmlvcml0eTogVGhlIHByaW9yaXR5IG9mIHRoZSB3YXRjaC4KLSAqCi0gKiBBZGRzIGEgYnVzIHNpZ25hbCB3YXRjaCB0byB0aGUgZGVmYXVsdCBtYWluIGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4gQHByaW9yaXR5Ci0gKiAoZS5nLiAlR19QUklPUklUWV9ERUZBVUxUKS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBub24tZGVmYXVsdCBtYWluCi0gKiBjb250ZXh0IHNldCB1cCB1c2luZyBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KCkKLSAqIChiZWZvcmUgb25lIGhhZCB0byBjcmVhdGUgYSBidXMgd2F0Y2ggc291cmNlIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGRlc2lyZWQKLSAqIG1haW4gY29udGV4dCAnbWFudWFsbHknKS4KLSAqCi0gKiBBZnRlciBjYWxsaW5nIHRoaXMgc3RhdGVtZW50LCB0aGUgYnVzIHdpbGwgZW1pdCB0aGUgIm1lc3NhZ2UiIHNpZ25hbCBmb3IgZWFjaAotICogbWVzc2FnZSBwb3N0ZWQgb24gdGhlIGJ1cyB3aGVuIHRoZSBtYWluIGxvb3AgaXMgcnVubmluZy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRvIGNsZWFuIHVwLCB0aGUgY2FsbGVyIGlzCi0gKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2goKSBhcyBtYW55IHRpbWVzIGFzIHRoaXMKLSAqIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCi0gKiBUaGVyZSBjYW4gb25seSBiZSBhIHNpbmdsZSBidXMgd2F0Y2ggcGVyIGJ1cywgeW91IG11c3QgcmVtb3ZlIGFueSBzaWduYWwKLSAqIHdhdGNoIGJlZm9yZSB5b3UgY2FuIHNldCBhbm90aGVyIHR5cGUgb2Ygd2F0Y2guCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwgKEdzdEJ1cyAqIGJ1cywgZ2ludCBwcmlvcml0eSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JVUyAoYnVzKSk7Ci0KLSAgLyogSSBrbm93IHRoZSBjYWxsZWVzIGRvbid0IHRha2UgdGhpcyBsb2NrLCBzbyBnbyBhaGVhZCBhbmQgYWJ1c2UgaXQgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChidXMpOwotCi0gIGlmIChidXMtPnByaXYtPm51bV9zaWduYWxfd2F0Y2hlcnMgPiAwKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiB0aGlzIHNob3VsZCBub3QgZmFpbCBiZWNhdXNlIHRoZSBjb3VudGVyIGFib3ZlIHRha2VzIGNhcmUgb2YgaXQgKi8KLSAgZ19hc3NlcnQgKCFidXMtPnByaXYtPnNpZ25hbF93YXRjaCk7Ci0KLSAgZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbF91bmxvY2tlZCAoYnVzLCBwcmlvcml0eSwgZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYywKLSAgICAgIE5VTEwsIE5VTEwpOwotCi0gIGlmIChHX1VOTElLRUxZICghYnVzLT5wcml2LT5zaWduYWxfd2F0Y2gpKQotICAgIGdvdG8gYWRkX2ZhaWxlZDsKLQotZG9uZToKLQotICBidXMtPnByaXYtPm51bV9zaWduYWxfd2F0Y2hlcnMrKzsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotYWRkX2ZhaWxlZDoKLSAgewotICAgIGdfY3JpdGljYWwgKCJDb3VsZCBub3QgYWRkIHNpZ25hbCB3YXRjaCB0byBidXMgJXMiLCBHU1RfT0JKRUNUX05BTUUgKGJ1cykpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOwotICAgIHJldHVybjsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaDoKLSAqIEBidXM6IGEgI0dzdEJ1cyBvbiB3aGljaCB5b3Ugd2FudCB0byByZWNlaXZlIHRoZSAibWVzc2FnZSIgc2lnbmFsCi0gKgotICogQWRkcyBhIGJ1cyBzaWduYWwgd2F0Y2ggdG8gdGhlIGRlZmF1bHQgbWFpbiBjb250ZXh0IHdpdGggdGhlIGRlZmF1bHQgcHJpb3JpdHkKLSAqICglR19QUklPUklUWV9ERUZBVUxUKS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBub24tZGVmYXVsdAotICogbWFpbiBjb250ZXh0IHNldCB1cCB1c2luZyBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KCkgKGJlZm9yZQotICogb25lIGhhZCB0byBjcmVhdGUgYSBidXMgd2F0Y2ggc291cmNlIGFuZCBhdHRhY2ggaXQgdG8gdGhlIGRlc2lyZWQgbWFpbgotICogY29udGV4dCAnbWFudWFsbHknKS4KLSAqCi0gKiBBZnRlciBjYWxsaW5nIHRoaXMgc3RhdGVtZW50LCB0aGUgYnVzIHdpbGwgZW1pdCB0aGUgIm1lc3NhZ2UiIHNpZ25hbCBmb3IgZWFjaAotICogbWVzc2FnZSBwb3N0ZWQgb24gdGhlIGJ1cy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRvIGNsZWFuIHVwLCB0aGUgY2FsbGVyIGlzCi0gKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2goKSBhcyBtYW55IHRpbWVzIGFzIHRoaXMKLSAqIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKEdzdEJ1cyAqIGJ1cykKLXsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwgKGJ1cywgR19QUklPUklUWV9ERUZBVUxUKTsKLX0KLQotLyoqCi0gKiBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2g6Ci0gKiBAYnVzOiBhICNHc3RCdXMgeW91IHByZXZpb3VzbHkgYWRkZWQgYSBzaWduYWwgd2F0Y2ggdG8KLSAqCi0gKiBSZW1vdmVzIGEgc2lnbmFsIHdhdGNoIHByZXZpb3VzbHkgYWRkZWQgd2l0aCBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2goKS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKEdzdEJ1cyAqIGJ1cykKLXsKLSAgR1NvdXJjZSAqc291cmNlID0gTlVMTDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVTIChidXMpKTsKLQotICAvKiBJIGtub3cgdGhlIGNhbGxlZXMgZG9uJ3QgdGFrZSB0aGlzIGxvY2ssIHNvIGdvIGFoZWFkIGFuZCBhYnVzZSBpdCAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGJ1cyk7Ci0KLSAgaWYgKGJ1cy0+cHJpdi0+bnVtX3NpZ25hbF93YXRjaGVycyA9PSAwKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgYnVzLT5wcml2LT5udW1fc2lnbmFsX3dhdGNoZXJzLS07Ci0KLSAgaWYgKGJ1cy0+cHJpdi0+bnVtX3NpZ25hbF93YXRjaGVycyA+IDApCi0gICAgZ290byBkb25lOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJ1cywgInJlbW92aW5nIHNpZ25hbCB3YXRjaCAldSIsCi0gICAgICBnX3NvdXJjZV9nZXRfaWQgKGJ1cy0+cHJpdi0+c2lnbmFsX3dhdGNoKSk7Ci0KLSAgc291cmNlID0gYnVzLT5wcml2LT5zaWduYWxfd2F0Y2g7Ci0KLWRvbmU6Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChidXMpOwotCi0gIGlmIChzb3VyY2UpCi0gICAgZ19zb3VyY2VfZGVzdHJveSAoc291cmNlKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1lcnJvcjoKLSAgewotICAgIGdfY3JpdGljYWwgKCJCdXMgJXMgaGFzIG5vIHNpZ25hbCB3YXRjaGVzIGF0dGFjaGVkIiwgR1NUX09CSkVDVF9OQU1FIChidXMpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVzKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RidXMuaCBiL2dzdC9nc3RidXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0OWIyZS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0YnVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RidXMuaDogSGVhZGVyIGZvciBHc3RCdXMgc3Vic3lzdGVtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9CVVNfSF9fCi0jZGVmaW5lIF9fR1NUX0JVU19IX18KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1cyBHc3RCdXM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QnVzUHJpdmF0ZSBHc3RCdXNQcml2YXRlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1c0NsYXNzIEdzdEJ1c0NsYXNzOwotCi0jaW5jbHVkZSA8Z3N0L2dzdG1lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2xvY2suaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKiAtLS0gc3RhbmRhcmQgdHlwZSBtYWNyb3MgLS0tICovCi0jZGVmaW5lIEdTVF9UWVBFX0JVUyAgICAgICAgICAgICAgKGdzdF9idXNfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9CVVMoYnVzKSAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgoYnVzKSwgR1NUX1RZUEVfQlVTLCBHc3RCdXMpKQotI2RlZmluZSBHU1RfSVNfQlVTKGJ1cykgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKGJ1cyksIEdTVF9UWVBFX0JVUykpCi0jZGVmaW5lIEdTVF9CVVNfQ0xBU1MoYmNsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoYmNsYXNzKSwgR1NUX1RZUEVfQlVTLCBHc3RCdXNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19CVVNfQ0xBU1MoYmNsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoYmNsYXNzKSwgR1NUX1RZUEVfQlVTKSkKLSNkZWZpbmUgR1NUX0JVU19HRVRfQ0xBU1MoYnVzKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKGJ1cyksIEdTVF9UWVBFX0JVUywgR3N0QnVzQ2xhc3MpKQotI2RlZmluZSBHU1RfQlVTX0NBU1QoYnVzKSAgICAgICAgICgoR3N0QnVzKikoYnVzKSkKLQotLyoqCi0gKiBHc3RCdXNGbGFnczoKLSAqIEBHU1RfQlVTX0ZMVVNISU5HOiBUaGUgYnVzIGlzIGN1cnJlbnRseSBkcm9wcGluZyBhbGwgbWVzc2FnZXMKLSAqIEBHU1RfQlVTX0ZMQUdfTEFTVDogb2Zmc2V0IHRvIGRlZmluZSBtb3JlIGZsYWdzCi0gKgotICogVGhlIHN0YW5kYXJkIGZsYWdzIHRoYXQgYSBidXMgbWF5IGhhdmUuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9CVVNfRkxVU0hJTkcgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAwKSwKLSAgLyogcGFkZGluZyAqLwotICBHU1RfQlVTX0ZMQUdfTEFTVCAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMSkKLX0gR3N0QnVzRmxhZ3M7Ci0KLS8qKgotICogR3N0QnVzU3luY1JlcGx5OgotICogQEdTVF9CVVNfRFJPUDogZHJvcCB0aGUgbWVzc2FnZQotICogQEdTVF9CVVNfUEFTUzogcGFzcyB0aGUgbWVzc2FnZSB0byB0aGUgYXN5bmMgcXVldWUKLSAqIEBHU1RfQlVTX0FTWU5DOiBwYXNzIG1lc3NhZ2UgdG8gYXN5bmMgcXVldWUsIGNvbnRpbnVlIGlmIG1lc3NhZ2UgaXMgaGFuZGxlZAotICoKLSAqIFRoZSByZXN1bHQgdmFsdWVzIGZvciBhIEdzdEJ1c1N5bmNIYW5kbGVyLgotICovCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX0JVU19EUk9QID0gMCwKLSAgR1NUX0JVU19QQVNTID0gMSwKLSAgR1NUX0JVU19BU1lOQyA9IDIKLX0gR3N0QnVzU3luY1JlcGx5OwotCi0vKioKLSAqIEdzdEJ1c1N5bmNIYW5kbGVyOgotICogQGJ1czogdGhlICNHc3RCdXMgdGhhdCBzZW50IHRoZSBtZXNzYWdlCi0gKiBAbWVzc2FnZTogdGhlICNHc3RNZXNzYWdlCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgdGhhdCBoYXMgYmVlbiBnaXZlbiwgd2hlbiByZWdpc3RlcmluZyB0aGUgaGFuZGxlcgotICoKLSAqIEhhbmRsZXIgd2lsbCBiZSBpbnZva2VkIHN5bmNocm9ub3VzbHksIHdoZW4gYSBuZXcgbWVzc2FnZSBoYXMgYmVlbiBpbmplY3RlZAotICogaW50byB0aGUgYnVzLiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VkIGludGVybmFsbHkuIE9ubHkgb25lIHN5bmMgaGFuZGxlcgotICogY2FuIGJlIGF0dGFjaGVkIHRvIGEgZ2l2ZW4gYnVzLgotICoKLSAqIElmIHRoZSBoYW5kbGVyIHJldHVybnMgR1NUX0JVU19EUk9QLCBpdCBzaG91bGQgdW5yZWYgdGhlIG1lc3NhZ2UsIGVsc2UgdGhlCi0gKiBtZXNzYWdlIHNob3VsZCBub3QgYmUgdW5yZWZmZWQgYnkgdGhlIHN5bmMgaGFuZGxlci4KLSAqCi0gKiBSZXR1cm5zOiAjR3N0QnVzU3luY1JlcGx5IHN0YXRpbmcgd2hhdCB0byBkbyB3aXRoIHRoZSBtZXNzYWdlCi0gKi8KLXR5cGVkZWYgR3N0QnVzU3luY1JlcGx5ICgqR3N0QnVzU3luY0hhbmRsZXIpICAgIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIEdzdEJ1c0Z1bmM6Ci0gKiBAYnVzOiB0aGUgI0dzdEJ1cyB0aGF0IHNlbnQgdGhlIG1lc3NhZ2UKLSAqIEBtZXNzYWdlOiB0aGUgI0dzdE1lc3NhZ2UKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSB0aGF0IGhhcyBiZWVuIGdpdmVuLCB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBoYW5kbGVyCi0gKgotICogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGZ1bmN0aW9uIHBhc3NlZCB0byBnc3RfYnVzX2FkZF93YXRjaCgpIG9yCi0gKiBnc3RfYnVzX2FkZF93YXRjaF9mdWxsKCksIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHRoZSBtYWlubG9vcCB3aGVuIGEgbWVzc2FnZQotICogaXMgYXZhaWxhYmxlIG9uIHRoZSBidXMuCi0gKgotICogVGhlIG1lc3NhZ2UgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHVucmVmZmVkIGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGlzCi0gKiBmdW5jdGlvbiBzbyBpdCBzaG91bGQgbm90IGJlIGZyZWVkIGluIHRoZSBmdW5jdGlvbi4KLSAqCi0gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFzIGEgR1NvdXJjZUZ1bmMgd2hpY2ggbWVhbnMgdGhhdCByZXR1cm5pbmcKLSAqICVGQUxTRSB3aWxsIHJlbW92ZSB0aGUgR1NvdXJjZSBmcm9tIHRoZSBtYWlubG9vcC4KLSAqCi0gKiBSZXR1cm5zOiAlRkFMU0UgaWYgdGhlIGV2ZW50IHNvdXJjZSBzaG91bGQgYmUgcmVtb3ZlZC4KLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAgICAgICAgKCpHc3RCdXNGdW5jKSAgICAgICAgICAgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogR3N0QnVzOgotICoKLSAqIFRoZSBvcGFxdWUgI0dzdEJ1cyBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RCdXMKLXsKLSAgR3N0T2JqZWN0ICAgICAgICAgb2JqZWN0OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RCdXNQcml2YXRlICAgICpwcml2OwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3RCdXNDbGFzcwotewotICBHc3RPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyAqLwotICB2b2lkICgqbWVzc2FnZSkgICAgICAgKEdzdEJ1cyAqYnVzLCBHc3RNZXNzYWdlICptZXNzYWdlKTsKLSAgdm9pZCAoKnN5bmNfbWVzc2FnZSkgIChHc3RCdXMgKmJ1cywgR3N0TWVzc2FnZSAqbWVzc2FnZSk7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19nZXRfdHlwZSAgICAgICAgICAgICAgICAodm9pZCk7Ci0KLUdzdEJ1cyogICAgICAgICAgICAgICAgIGdzdF9idXNfbmV3ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfYnVzX3Bvc3QgICAgICAgICAgICAgICAgICAgIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2J1c19oYXZlX3BlbmRpbmcgICAgICAgICAgICAoR3N0QnVzICogYnVzKTsKLUdzdE1lc3NhZ2UgKiAgICAgICAgICAgIGdzdF9idXNfcGVlayAgICAgICAgICAgICAgICAgICAgKEdzdEJ1cyAqIGJ1cyk7Ci1Hc3RNZXNzYWdlICogICAgICAgICAgICBnc3RfYnVzX3BvcCAgICAgICAgICAgICAgICAgICAgIChHc3RCdXMgKiBidXMpOwotR3N0TWVzc2FnZSAqICAgICAgICAgICAgZ3N0X2J1c19wb3BfZmlsdGVyZWQgICAgICAgICAgICAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlVHlwZSB0eXBlcyk7Ci1Hc3RNZXNzYWdlICogICAgICAgICAgICBnc3RfYnVzX3RpbWVkX3BvcCAgICAgICAgICAgICAgIChHc3RCdXMgKiBidXMsIEdzdENsb2NrVGltZSB0aW1lb3V0KTsKLUdzdE1lc3NhZ2UgKiAgICAgICAgICAgIGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICAgICAgKEdzdEJ1cyAqIGJ1cywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQsIEdzdE1lc3NhZ2VUeXBlIHR5cGVzKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9idXNfc2V0X2ZsdXNoaW5nICAgICAgICAgICAgKEdzdEJ1cyAqIGJ1cywgZ2Jvb2xlYW4gZmx1c2hpbmcpOwotCi0vKiBzeW5jaHJvbm91cyBkaXNwYXRjaGluZyAqLwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyICAgICAgICAoR3N0QnVzICogYnVzLCBHc3RCdXNTeW5jSGFuZGxlciBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwotLyogR1NvdXJjZSBiYXNlZCBkaXNwYXRjaGluZyAqLwotR1NvdXJjZSAqICAgICAgICAgICAgICAgZ3N0X2J1c19jcmVhdGVfd2F0Y2ggICAgICAgICAgICAoR3N0QnVzICogYnVzKTsKLWd1aW50ICAgICAgICAgICAgICAgICAgIGdzdF9idXNfYWRkX3dhdGNoX2Z1bGwgICAgICAgICAgKEdzdEJ1cyAqIGJ1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgcHJpb3JpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdXNGdW5jIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwotZ3VpbnQgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19hZGRfd2F0Y2ggICAgICAgICAgICAgICAoR3N0QnVzICogYnVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVzRnVuYyBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9idXNfcmVtb3ZlX3dhdGNoICAgICAgICAgICAgKEdzdEJ1cyAqIGJ1cyk7Ci0KLS8qIHBvbGxpbmcgdGhlIGJ1cyAqLwotR3N0TWVzc2FnZSogICAgICAgICAgICAgZ3N0X2J1c19wb2xsICAgICAgICAgICAgICAgICAgICAoR3N0QnVzICpidXMsIEdzdE1lc3NhZ2VUeXBlIGV2ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSB0aW1lb3V0KTsKLQotLyogc2lnbmFsIGJhc2VkIGRpc3BhdGNoaW5nIGhlbHBlciBmdW5jdGlvbnMuICovCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jICAgICAgIChHc3RCdXMgKmJ1cywgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwotR3N0QnVzU3luY1JlcGx5ICAgICAgICAgZ3N0X2J1c19zeW5jX3NpZ25hbF9oYW5kbGVyICAgICAoR3N0QnVzICpidXMsIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKLQotLyogY29udmVuaWVuY2UgYXBpIHRvIGFkZC9yZW1vdmUgYSBnc291cmNlIHRoYXQgZW1pdHMgdGhlIGFzeW5jIHNpZ25hbHMgKi8KLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAgICAgICAgKEdzdEJ1cyAqIGJ1cyk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCAgIChHc3RCdXMgKiBidXMsIGdpbnQgcHJpb3JpdHkpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoICAgICAoR3N0QnVzICogYnVzKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uIChHc3RCdXMgKiBidXMpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2J1c19kaXNhYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbiAoR3N0QnVzICogYnVzKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RCdXMsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0JVU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RjYXBzLmMgYi9nc3QvZ3N0Y2Fwcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTQ3ZjM3Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RjYXBzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGNhcHMKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogU3RydWN0dXJlIGRlc2NyaWJpbmcgc2V0cyBvZiBtZWRpYSBmb3JtYXRzCi0gKiBAc2VlX2Fsc286ICNHc3RTdHJ1Y3R1cmUsICNHc3RNaW5pT2JqZWN0Ci0gKgotICogQ2FwcyAoY2FwYWJpbGl0aWVzKSBhcmUgbGlnaHR3ZWlnaHQgcmVmY291bnRlZCBvYmplY3RzIGRlc2NyaWJpbmcgbWVkaWEgdHlwZXMuCi0gKiBUaGV5IGFyZSBjb21wb3NlZCBvZiBhbiBhcnJheSBvZiAjR3N0U3RydWN0dXJlLgotICoKLSAqIENhcHMgYXJlIGV4cG9zZWQgb24gI0dzdFBhZFRlbXBsYXRlIHRvIGRlc2NyaWJlIGFsbCBwb3NzaWJsZSB0eXBlcyBhCi0gKiBnaXZlbiBwYWQgY2FuIGhhbmRsZS4gVGhleSBhcmUgYWxzbyBzdG9yZWQgaW4gdGhlICNHc3RSZWdpc3RyeSBhbG9uZyB3aXRoCi0gKiBhIGRlc2NyaXB0aW9uIG9mIHRoZSAjR3N0RWxlbWVudC4KLSAqCi0gKiBDYXBzIGFyZSBleHBvc2VkIG9uIHRoZSBlbGVtZW50IHBhZHMgdXNpbmcgdGhlIGdzdF9wYWRfcXVlcnlfY2FwcygpIHBhZAotICogZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gZGVzY3JpYmVzIHRoZSBwb3NzaWJsZSB0eXBlcyB0aGF0IHRoZSBwYWQgY2FuCi0gKiBoYW5kbGUgb3IgcHJvZHVjZSBhdCBydW50aW1lLgotICoKLSAqIEEgI0dzdENhcHMgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50OgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdyIsCi0gKiAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiSTQyMCIsCi0gKiAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgMjUsIDEsCi0gKiAgICAgICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwgMSwgMSwKLSAqICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgMzIwLAotICogICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjQwLAotICogICAgICBOVUxMKTsKLSAqIF18Ci0gKgotICogQSAjR3N0Q2FwcyBpcyBmaXhlZCB3aGVuIGl0IGhhcyBubyBwcm9wZXJ0aWVzIHdpdGggcmFuZ2VzIG9yIGxpc3RzLiBVc2UKLSAqIGdzdF9jYXBzX2lzX2ZpeGVkKCkgdG8gdGVzdCBmb3IgZml4ZWQgY2Fwcy4gRml4ZWQgY2FwcyBjYW4gYmUgdXNlZCBpbiBhCi0gKiBjYXBzIGV2ZW50IHRvIG5vdGlmeSBkb3duc3RyZWFtIGVsZW1lbnRzIG9mIHRoZSBjdXJyZW50IG1lZGlhIHR5cGUuCi0gKgotICogVmFyaW91cyBtZXRob2RzIGV4aXN0IHRvIHdvcmsgd2l0aCB0aGUgbWVkaWEgdHlwZXMgc3VjaCBhcyBzdWJ0cmFjdGluZwotICogb3IgaW50ZXJzZWN0aW5nLgotICoKLSAqIEJlIGF3YXJlIHRoYXQgdGhlIGN1cnJlbnQgI0dzdENhcHMgLyAjR3N0U3RydWN0dXJlIHNlcmlhbGl6YXRpb24gaW50byBzdHJpbmcKLSAqIGhhcyBsaW1pdGVkIHN1cHBvcnQgZm9yIG5lc3RlZCAjR3N0Q2FwcyAvICNHc3RTdHJ1Y3R1cmUgZmllbGRzLiBJdCBjYW4gb25seQotICogc3VwcG9ydCBvbmUgbGV2ZWwgb2YgbmVzdGluZy4gVXNpbmcgbW9yZSBsZXZlbHMgd2lsbCBsZWFkIHRvIHVuZXhwZWN0ZWQKLSAqIGJlaGF2aW9yIHdoZW4gdXNpbmcgc2VyaWFsaXphdGlvbiBmZWF0dXJlcywgc3VjaCBhcyBnc3RfY2Fwc190b19zdHJpbmcoKSBvcgotICogZ3N0X3ZhbHVlX3NlcmlhbGl6ZSgpIGFuZCB0aGVpciBjb3VudGVycGFydHMuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaD4KLQotI2RlZmluZSBERUJVR19SRUZDT1VOVAotCi10eXBlZGVmIHN0cnVjdCBfR3N0Q2Fwc0FycmF5RWxlbWVudAotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczsKLX0gR3N0Q2Fwc0FycmF5RWxlbWVudDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHNJbXBsCi17Ci0gIEdzdENhcHMgY2FwczsKLQotICBHQXJyYXkgKmFycmF5OwotfSBHc3RDYXBzSW1wbDsKLQotI2RlZmluZSBHU1RfQ0FQU19BUlJBWShjKSAoKChHc3RDYXBzSW1wbCAqKShjKSktPmFycmF5KQotCi0jZGVmaW5lIEdTVF9DQVBTX0xFTihjKSAgIChHU1RfQ0FQU19BUlJBWShjKS0+bGVuKQotCi0jZGVmaW5lIElTX1dSSVRBQkxFKGNhcHMpIFwKLSAgKEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFIChjYXBzKSA9PSAxKQotCi0vKiBzYW1lIGFzIGdzdF9jYXBzX2lzX2FueSAoKSAqLwotI2RlZmluZSBDQVBTX0lTX0FOWShjYXBzKQkJCQlcCi0gICghIShHU1RfQ0FQU19GTEFHUyhjYXBzKSAmIEdTVF9DQVBTX0ZMQUdfQU5ZKSkKLQotLyogc2FtZSBhcyBnc3RfY2Fwc19pc19lbXB0eSAoKSAqLwotI2RlZmluZSBDQVBTX0lTX0VNUFRZKGNhcHMpCQkJCVwKLSAgKCFDQVBTX0lTX0FOWShjYXBzKSAmJiBDQVBTX0lTX0VNUFRZX1NJTVBMRShjYXBzKSkKLQotI2RlZmluZSBDQVBTX0lTX0VNUFRZX1NJTVBMRShjYXBzKQkJCQkJXAotICAoKEdTVF9DQVBTX0FSUkFZIChjYXBzKSA9PSBOVUxMKSB8fCAoR1NUX0NBUFNfTEVOIChjYXBzKSA9PSAwKSkKLQotI2RlZmluZSBnc3RfY2Fwc19mZWF0dXJlc19jb3B5X2NvbmRpdGlvbmFsKGYpICgoZiAmJiAoZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55IChmKSB8fCAhZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGYsIEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZKSkpID8gZ3N0X2NhcHNfZmVhdHVyZXNfY29weSAoZikgOiBOVUxMKQotCi0vKiBxdWljayB3YXkgdG8gZ2V0IGEgY2FwcyBzdHJ1Y3R1cmUgYXQgYW4gaW5kZXggd2l0aG91dCBkb2luZyBhIHR5cGUgb3IgYXJyYXkKLSAqIGxlbmd0aCBjaGVjayAqLwotI2RlZmluZSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZChjYXBzLCBpbmRleCkgXAotICAgICAoZ19hcnJheV9pbmRleCAoR1NUX0NBUFNfQVJSQVkgKGNhcHMpLCBHc3RDYXBzQXJyYXlFbGVtZW50LCAoaW5kZXgpKS5zdHJ1Y3R1cmUpCi0jZGVmaW5lIGdzdF9jYXBzX2dldF9mZWF0dXJlc19zdG9yYWdlX3VuY2hlY2tlZChjYXBzLCBpbmRleCkgXAotICAgICAoJmdfYXJyYXlfaW5kZXggKEdTVF9DQVBTX0FSUkFZIChjYXBzKSwgR3N0Q2Fwc0FycmF5RWxlbWVudCwgKGluZGV4KSkuZmVhdHVyZXMpCi0jZGVmaW5lIGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQoY2FwcywgaW5kZXgpIFwKLSAgICAgKGdfYXRvbWljX3BvaW50ZXJfZ2V0IChnc3RfY2Fwc19nZXRfZmVhdHVyZXNfc3RvcmFnZV91bmNoZWNrZWQgKGNhcHMsIGluZGV4KSkpCi0vKiBxdWljayB3YXkgdG8gYXBwZW5kIGEgc3RydWN0dXJlIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGFyZ3MgKi8KLSNkZWZpbmUgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV91bmNoZWNrZWQoY2FwcywgcywgZikgR19TVE1UX1NUQVJUe1wKLSAgR3N0Q2Fwc0FycmF5RWxlbWVudCBfX2U9e3MsIGZ9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChfX2Uuc3RydWN0dXJlLCAmR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UKGNhcHMpKSAmJiBcCi0gICAgICAoIV9fZS5mZWF0dXJlcyB8fCBnc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50IChfX2UuZmVhdHVyZXMsICZHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoY2FwcykpKSkgICAgICAgICBcCi0gICAgZ19hcnJheV9hcHBlbmRfdmFsIChHU1RfQ0FQU19BUlJBWSAoY2FwcyksIF9fZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19R19TVE1UX0VORAotCi0vKiBsb2NrIHRvIHByb3RlY3QgbXVsdGlwbGUgaW52b2NhdGlvbnMgb2Ygc3RhdGljIGNhcHMgdG8gY2FwcyBjb252ZXJzaW9uICovCi1HX0xPQ0tfREVGSU5FX1NUQVRJQyAoc3RhdGljX2NhcHNfbG9jayk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9jYXBzX3RyYW5zZm9ybV90b19zdHJpbmcgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwKLSAgICBHVmFsdWUgKiBkZXN0X3ZhbHVlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfY2Fwc19mcm9tX3N0cmluZ19pbnBsYWNlIChHc3RDYXBzICogY2FwcywKLSAgICBjb25zdCBnY2hhciAqIHN0cmluZyk7Ci0KLUdUeXBlIF9nc3RfY2Fwc190eXBlID0gMDsKLUdzdENhcHMgKl9nc3RfY2Fwc19hbnk7Ci1Hc3RDYXBzICpfZ3N0X2NhcHNfbm9uZTsKLQotR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RDYXBzLCBnc3RfY2Fwcyk7Ci0KLXZvaWQKLV9wcml2X2dzdF9jYXBzX2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIF9nc3RfY2Fwc190eXBlID0gZ3N0X2NhcHNfZ2V0X3R5cGUgKCk7Ci0KLSAgX2dzdF9jYXBzX2FueSA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gIF9nc3RfY2Fwc19ub25lID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotCi0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKF9nc3RfY2Fwc190eXBlLAotICAgICAgR19UWVBFX1NUUklORywgZ3N0X2NhcHNfdHJhbnNmb3JtX3RvX3N0cmluZyk7Ci19Ci0KLXZvaWQKLV9wcml2X2dzdF9jYXBzX2NsZWFudXAgKHZvaWQpCi17Ci0gIGdzdF9jYXBzX3VucmVmIChfZ3N0X2NhcHNfYW55KTsKLSAgX2dzdF9jYXBzX2FueSA9IE5VTEw7Ci0gIGdzdF9jYXBzX3VucmVmIChfZ3N0X2NhcHNfbm9uZSk7Ci0gIF9nc3RfY2Fwc19ub25lID0gTlVMTDsKLX0KLQotR3N0Q2Fwc0ZlYXR1cmVzICoKLV9fZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY29uc3QgR3N0Q2FwcyAqIGNhcHMsIGd1aW50IGlkeCkKLXsKLSAgcmV0dXJuIGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIGlkeCk7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLV9nc3RfY2Fwc19jb3B5IChjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqbmV3Y2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXM7Ci0gIGd1aW50IGksIG47Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgTlVMTCk7Ci0KLSAgbmV3Y2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgR1NUX0NBUFNfRkxBR1MgKG5ld2NhcHMpID0gR1NUX0NBUFNfRkxBR1MgKGNhcHMpOwotICBuID0gR1NUX0NBUFNfTEVOIChjYXBzKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgY2FwcywgImRvaW5nIGNvcHkgJXAgLT4gJXAiLAotICAgICAgY2FwcywgbmV3Y2Fwcyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICBmZWF0dXJlcyA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIGkpOwotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfZnVsbCAobmV3Y2FwcywgZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpLAotICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19jb3B5X2NvbmRpdGlvbmFsIChmZWF0dXJlcykpOwotICB9Ci0KLSAgcmV0dXJuIG5ld2NhcHM7Ci19Ci0KLS8qIGNyZWF0aW9uL2RlbGV0aW9uICovCi1zdGF0aWMgdm9pZAotX2dzdF9jYXBzX2ZyZWUgKEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIC8qIFRoZSByZWZjb3VudCBtdXN0IGJlIDAsIGJ1dCBzaW5jZSB3ZSdyZSBvbmx5IGNhbGxlZCBieSBnc3RfY2Fwc191bnJlZiwKLSAgICogZG9uJ3QgYm90aGVyIHRlc3RpbmcuICovCi0gIGxlbiA9IEdTVF9DQVBTX0xFTiAoY2Fwcyk7Ci0gIC8qIFRoaXMgY2FuIGJlIHVzZWQgdG8gZ2V0IHN0YXRpc3RpY3MgYWJvdXQgY2FwcyBzaXplcyAqLwotICAvKkdTVF9DQVRfSU5GTyAoR1NUX0NBVF9DQVBTLCAiY2FwcyBzaXplOiAlZCIsIGxlbik7ICovCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwgTlVMTCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOwotICAgIGZlYXR1cmVzID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwcywgaSk7Ci0gICAgaWYgKGZlYXR1cmVzKSB7Ci0gICAgICBnc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50IChmZWF0dXJlcywgTlVMTCk7Ci0gICAgICBnc3RfY2Fwc19mZWF0dXJlc19mcmVlIChmZWF0dXJlcyk7Ci0gICAgfQotICB9Ci0gIGdfYXJyYXlfZnJlZSAoR1NUX0NBUFNfQVJSQVkgKGNhcHMpLCBUUlVFKTsKLQotI2lmZGVmIERFQlVHX1JFRkNPVU5UCi0gIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfQ0FQUywgImZyZWVpbmcgY2FwcyAlcCIsIGNhcHMpOwotI2VuZGlmCi0gIGdfc2xpY2VfZnJlZTEgKHNpemVvZiAoR3N0Q2Fwc0ltcGwpLCBjYXBzKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jYXBzX2luaXQgKEdzdENhcHMgKiBjYXBzKQotewotICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpLCAwLCBfZ3N0X2NhcHNfdHlwZSwKLSAgICAgIChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X2NhcHNfY29weSwgTlVMTCwKLSAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBfZ3N0X2NhcHNfZnJlZSk7Ci0KLSAgLyogdGhlIDMyIGhhcyBiZWVuIGRldGVybWluZWQgYnkgbG9nZ2luZyBjYXBzIHNpemVzIGluIF9nc3RfY2Fwc19mcmVlCi0gICAqIGJ1dCBnX3B0cl9hcnJheSB1c2VzIDE2IGFueXdheSBpZiBpdCBleHBhbmRzIG9uY2UsIHNvIHRoaXMgZG9lcyBub3QgaGVscAotICAgKiBpbiBwcmFjdGljZQotICAgKiBHU1RfQ0FQU19BUlJBWSAoY2FwcykgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcgKDMyKTsKLSAgICovCi0gIEdTVF9DQVBTX0FSUkFZIChjYXBzKSA9Ci0gICAgICBnX2FycmF5X25ldyAoRkFMU0UsIFRSVUUsIHNpemVvZiAoR3N0Q2Fwc0FycmF5RWxlbWVudCkpOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX25ld19lbXB0eToKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHRoYXQgaXMgZW1wdHkuICBUaGF0IGlzLCB0aGUgcmV0dXJuZWQKLSAqICNHc3RDYXBzIGNvbnRhaW5zIG5vIG1lZGlhIGZvcm1hdHMuCi0gKiBUaGUgI0dzdENhcHMgaXMgZ3VhcmFudGVlZCB0byBiZSB3cml0YWJsZS4KLSAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nIHRoZSByZXR1cm5lZCBjYXBzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0Q2FwcwotICovCi1Hc3RDYXBzICoKLWdzdF9jYXBzX25ld19lbXB0eSAodm9pZCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBjYXBzID0gKEdzdENhcHMgKikgZ19zbGljZV9uZXcgKEdzdENhcHNJbXBsKTsKLQotICBnc3RfY2Fwc19pbml0IChjYXBzKTsKLQotI2lmZGVmIERFQlVHX1JFRkNPVU5UCi0gIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfQ0FQUywgImNyZWF0ZWQgY2FwcyAlcCIsIGNhcHMpOwotI2VuZGlmCi0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfbmV3X2FueToKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgY29tcGF0aWJsZSB3aXRoCi0gKiBhbnkgbWVkaWEgZm9ybWF0LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0Q2FwcwotICovCi1Hc3RDYXBzICoKLWdzdF9jYXBzX25ld19hbnkgKHZvaWQpCi17Ci0gIEdzdENhcHMgKmNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgR1NUX0NBUFNfRkxBR19TRVQgKGNhcHMsIEdTVF9DQVBTX0ZMQUdfQU5ZKTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlOgotICogQG1lZGlhX3R5cGU6IHRoZSBtZWRpYSB0eXBlIG9mIHRoZSBzdHJ1Y3R1cmUKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHRoYXQgY29udGFpbnMgb25lICNHc3RTdHJ1Y3R1cmUgd2l0aCBuYW1lCi0gKiBAbWVkaWFfdHlwZS4KLSAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdW5yZWZmaW5nIHRoZSByZXR1cm5lZCBjYXBzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0Q2FwcwotICovCi1Hc3RDYXBzICoKLWdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKGNvbnN0IGNoYXIgKm1lZGlhX3R5cGUpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5IChtZWRpYV90eXBlKTsKLSAgaWYgKHN0cnVjdHVyZSkKLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2Fwcywgc3RydWN0dXJlLCBOVUxMKTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19uZXdfc2ltcGxlOgotICogQG1lZGlhX3R5cGU6IHRoZSBtZWRpYSB0eXBlIG9mIHRoZSBzdHJ1Y3R1cmUKLSAqIEBmaWVsZG5hbWU6IGZpcnN0IGZpZWxkIHRvIHNldAotICogQC4uLjogYWRkaXRpb25hbCBhcmd1bWVudHMKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHRoYXQgY29udGFpbnMgb25lICNHc3RTdHJ1Y3R1cmUuICBUaGUKLSAqIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGJ5IHRoZSBhcmd1bWVudHMsIHdoaWNoIGhhdmUgdGhlIHNhbWUgZm9ybWF0Ci0gKiBhcyBnc3Rfc3RydWN0dXJlX25ldygpLgotICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcgdGhlIHJldHVybmVkIGNhcHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RDYXBzCi0gKi8KLUdzdENhcHMgKgotZ3N0X2NhcHNfbmV3X3NpbXBsZSAoY29uc3QgY2hhciAqbWVkaWFfdHlwZSwgY29uc3QgY2hhciAqZmllbGRuYW1lLCAuLi4pCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICB2YV9saXN0IHZhcl9hcmdzOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgdmFfc3RhcnQgKHZhcl9hcmdzLCBmaWVsZG5hbWUpOwotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld192YWxpc3QgKG1lZGlhX3R5cGUsIGZpZWxkbmFtZSwgdmFyX2FyZ3MpOwotICB2YV9lbmQgKHZhcl9hcmdzKTsKLQotICBpZiAoc3RydWN0dXJlKQotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBzdHJ1Y3R1cmUsIE5VTEwpOwotICBlbHNlCi0gICAgZ3N0X2NhcHNfcmVwbGFjZSAoJmNhcHMsIE5VTEwpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX25ld19mdWxsOgotICogQHN0cnVjdDE6IHRoZSBmaXJzdCBzdHJ1Y3R1cmUgdG8gYWRkCi0gKiBALi4uOiBhZGRpdGlvbmFsIHN0cnVjdHVyZXMgdG8gYWRkCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2FwcyBhbmQgYWRkcyBhbGwgdGhlIHN0cnVjdHVyZXMgbGlzdGVkIGFzCi0gKiBhcmd1bWVudHMuICBUaGUgbGlzdCBtdXN0IGJlICVOVUxMLXRlcm1pbmF0ZWQuICBUaGUgc3RydWN0dXJlcwotICogYXJlIG5vdCBjb3BpZWQ7IHRoZSByZXR1cm5lZCAjR3N0Q2FwcyBvd25zIHRoZSBzdHJ1Y3R1cmVzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0Q2FwcwotICovCi1Hc3RDYXBzICoKLWdzdF9jYXBzX25ld19mdWxsIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3QxLCAuLi4pCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIHZhX2xpc3QgdmFyX2FyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcl9hcmdzLCBzdHJ1Y3QxKTsKLSAgY2FwcyA9IGdzdF9jYXBzX25ld19mdWxsX3ZhbGlzdCAoc3RydWN0MSwgdmFyX2FyZ3MpOwotICB2YV9lbmQgKHZhcl9hcmdzKTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19uZXdfZnVsbF92YWxpc3Q6Ci0gKiBAc3RydWN0dXJlOiB0aGUgZmlyc3Qgc3RydWN0dXJlIHRvIGFkZAotICogQHZhcl9hcmdzOiBhZGRpdGlvbmFsIHN0cnVjdHVyZXMgdG8gYWRkCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2FwcyBhbmQgYWRkcyBhbGwgdGhlIHN0cnVjdHVyZXMgbGlzdGVkIGFzCi0gKiBhcmd1bWVudHMuICBUaGUgbGlzdCBtdXN0IGJlICVOVUxMLXRlcm1pbmF0ZWQuICBUaGUgc3RydWN0dXJlcwotICogYXJlIG5vdCBjb3BpZWQ7IHRoZSByZXR1cm5lZCAjR3N0Q2FwcyBvd25zIHRoZSBzdHJ1Y3R1cmVzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyAjR3N0Q2FwcwotICovCi1Hc3RDYXBzICoKLWdzdF9jYXBzX25ld19mdWxsX3ZhbGlzdCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCB2YV9saXN0IHZhcl9hcmdzKQotewotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgd2hpbGUgKHN0cnVjdHVyZSkgewotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBzdHJ1Y3R1cmUsIE5VTEwpOwotICAgIHN0cnVjdHVyZSA9IHZhX2FyZyAodmFyX2FyZ3MsIEdzdFN0cnVjdHVyZSAqKTsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi1HX0RFRklORV9QT0lOVEVSX1RZUEUgKEdzdFN0YXRpY0NhcHMsIGdzdF9zdGF0aWNfY2Fwcyk7Ci0KLS8qKgotICogZ3N0X3N0YXRpY19jYXBzX2dldDoKLSAqIEBzdGF0aWNfY2FwczogdGhlICNHc3RTdGF0aWNDYXBzIHRvIGNvbnZlcnQKLSAqCi0gKiBDb252ZXJ0cyBhICNHc3RTdGF0aWNDYXBzIHRvIGEgI0dzdENhcHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHBvaW50ZXIgdG8gdGhlICNHc3RDYXBzLiBVbnJlZiBhZnRlciB1c2FnZS4KLSAqICAgICBTaW5jZSB0aGUgY29yZSBob2xkcyBhbiBhZGRpdGlvbmFsIHJlZiB0byB0aGUgcmV0dXJuZWQgY2FwcywKLSAqICAgICB1c2UgZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpIG9uIHRoZSByZXR1cm5lZCBjYXBzIHRvIG1vZGlmeSBpdC4KLSAqLwotR3N0Q2FwcyAqCi1nc3Rfc3RhdGljX2NhcHNfZ2V0IChHc3RTdGF0aWNDYXBzICogc3RhdGljX2NhcHMpCi17Ci0gIEdzdENhcHMgKipjYXBzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdGF0aWNfY2FwcyAhPSBOVUxMLCBOVUxMKTsKLQotICBjYXBzID0gJnN0YXRpY19jYXBzLT5jYXBzOwotCi0gIC8qIHJlZmNvdW50IGlzIDAgd2hlbiB3ZSBuZWVkIHRvIGNvbnZlcnQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCpjYXBzID09IE5VTEwpKSB7Ci0gICAgY29uc3QgY2hhciAqc3RyaW5nOwotCi0gICAgR19MT0NLIChzdGF0aWNfY2Fwc19sb2NrKTsKLSAgICAvKiBjaGVjayBpZiBvdGhlciB0aHJlYWQgYWxyZWFkeSB1cGRhdGVkICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKCpjYXBzICE9IE5VTEwpKQotICAgICAgZ290byBkb25lOwotCi0gICAgc3RyaW5nID0gc3RhdGljX2NhcHMtPnN0cmluZzsKLQotICAgIGlmIChHX1VOTElLRUxZIChzdHJpbmcgPT0gTlVMTCkpCi0gICAgICBnb3RvIG5vX3N0cmluZzsKLQotICAgICpjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKHN0cmluZyk7Ci0KLSAgICAvKiBjb252ZXJ0IHRvIHN0cmluZyAqLwotICAgIGlmIChHX1VOTElLRUxZICgqY2FwcyA9PSBOVUxMKSkgewotICAgICAgZ19jcml0aWNhbCAoIkNvdWxkIG5vdCBjb252ZXJ0IHN0YXRpYyBjYXBzIFwiJXNcIiIsIHN0cmluZyk7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotCi0gICAgLyogQ2FwcyBnZW5lcmF0ZWQgZnJvbSBzdGF0aWMgY2FwcyBhcmUgdXN1YWxseSBsZWFrZWQgKi8KLSAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQgKCpjYXBzLCBHU1RfTUlOSV9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEKTsKLQotICAgIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfQ0FQUywgImNyZWF0ZWQgJXAgZnJvbSBzdHJpbmcgJXMiLCBzdGF0aWNfY2FwcywKLSAgICAgICAgc3RyaW5nKTsKLSAgZG9uZToKLSAgICBHX1VOTE9DSyAoc3RhdGljX2NhcHNfbG9jayk7Ci0gIH0KLSAgLyogcmVmIHRoZSBjYXBzLCBtYWtlcyBpdCBub3Qgd3JpdGFibGUgKi8KLSAgaWYgKEdfTElLRUxZICgqY2FwcyAhPSBOVUxMKSkKLSAgICBnc3RfY2Fwc19yZWYgKCpjYXBzKTsKLQotICByZXR1cm4gKmNhcHM7Ci0KLSAgLyogRVJST1JTICovCi1ub19zdHJpbmc6Ci0gIHsKLSAgICBHX1VOTE9DSyAoc3RhdGljX2NhcHNfbG9jayk7Ci0gICAgZ193YXJuaW5nICgic3RhdGljIGNhcHMgJXAgc3RyaW5nIGlzIE5VTEwiLCBzdGF0aWNfY2Fwcyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3Rfc3RhdGljX2NhcHNfY2xlYW51cDoKLSAqIEBzdGF0aWNfY2FwczogdGhlICNHc3RTdGF0aWNDYXBzIHRvIGNsZWFuCi0gKgotICogQ2xlYW4gdXAgdGhlIGNhY2hlZCBjYXBzIGNvbnRhaW5lZCBpbiBAc3RhdGljX2NhcHMuCi0gKi8KLXZvaWQKLWdzdF9zdGF0aWNfY2Fwc19jbGVhbnVwIChHc3RTdGF0aWNDYXBzICogc3RhdGljX2NhcHMpCi17Ci0gIEdfTE9DSyAoc3RhdGljX2NhcHNfbG9jayk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzdGF0aWNfY2Fwcy0+Y2FwcywgTlVMTCk7Ci0gIEdfVU5MT0NLIChzdGF0aWNfY2Fwc19sb2NrKTsKLX0KLQotLyogbWFuaXB1bGF0aW9uICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmVfYW5kX2ZlYXR1cmVzIChHc3RDYXBzICogY2FwcywgZ3VpbnQgaWR4LAotICAgIEdzdFN0cnVjdHVyZSAqKiBzLCBHc3RDYXBzRmVhdHVyZXMgKiogZikKLXsKLSAgR3N0U3RydWN0dXJlICpzXzsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmXzsKLQotICBzXyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpZHgpOwotICBmXyA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIGlkeCk7Ci0KLSAgLyogZG9uJ3QgdXNlIGluZGV4X2Zhc3QsIGdzdF9jYXBzX3NpbXBsaWZ5IHJlbGllcyBvbiB0aGUgb3JkZXIgKi8KLSAgZ19hcnJheV9yZW1vdmVfaW5kZXggKEdTVF9DQVBTX0FSUkFZIChjYXBzKSwgaWR4KTsKLQotICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHNfLCBOVUxMKTsKLSAgaWYgKGZfKSB7Ci0gICAgZ3N0X2NhcHNfZmVhdHVyZXNfc2V0X3BhcmVudF9yZWZjb3VudCAoZl8sIE5VTEwpOwotICB9Ci0KLSAgKnMgPSBzXzsKLSAgKmYgPSBmXzsKLX0KLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqCi1nc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmUgKEdzdENhcHMgKiBjYXBzLCBndWludCBpZHgpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmOwotCi0gIGdzdF9jYXBzX3JlbW92ZV9hbmRfZ2V0X3N0cnVjdHVyZV9hbmRfZmVhdHVyZXMgKGNhcHMsIGlkeCwgJnMsICZmKTsKLQotICBpZiAoZikKLSAgICBnc3RfY2Fwc19mZWF0dXJlc19mcmVlIChmKTsKLQotICByZXR1cm4gczsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19zdGVhbF9zdHJ1Y3R1cmU6Ci0gKiBAY2FwczogdGhlICNHc3RDYXBzIHRvIHJldHJpZXZlIGZyb20KLSAqIEBpbmRleDogSW5kZXggb2YgdGhlIHN0cnVjdHVyZSB0byByZXRyaWV2ZQotICoKLSAqIFJldHJpZXZlcyB0aGUgc3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIGluZGV4IGZyb20gdGhlIGxpc3Qgb2Ygc3RydWN0dXJlcwotICogY29udGFpbmVkIGluIEBjYXBzLiBUaGUgY2FsbGVyIGJlY29tZXMgdGhlIG93bmVyIG9mIHRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHBvaW50ZXIgdG8gdGhlICNHc3RTdHJ1Y3R1cmUgY29ycmVzcG9uZGluZwotICogICAgIHRvIEBpbmRleC4KLSAqLwotR3N0U3RydWN0dXJlICoKLWdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZSAoR3N0Q2FwcyAqIGNhcHMsIGd1aW50IGluZGV4KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKElTX1dSSVRBQkxFIChjYXBzKSwgTlVMTCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGluZGV4ID49IEdTVF9DQVBTX0xFTiAoY2FwcykpKQotICAgIHJldHVybiBOVUxMOwotCi0gIHJldHVybiBnc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGluZGV4KTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19hcHBlbmQ6Ci0gKiBAY2FwczE6IHRoZSAjR3N0Q2FwcyB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8KLSAqIEBjYXBzMjogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgdG8gYXBwZW5kCi0gKgotICogQXBwZW5kcyB0aGUgc3RydWN0dXJlcyBjb250YWluZWQgaW4gQGNhcHMyIHRvIEBjYXBzMS4gVGhlIHN0cnVjdHVyZXMgaW4KLSAqIEBjYXBzMiBhcmUgbm90IGNvcGllZCAtLSB0aGV5IGFyZSB0cmFuc2ZlcnJlZCB0byBAY2FwczEsIGFuZCB0aGVuIEBjYXBzMiBpcwotICogZnJlZWQuIElmIGVpdGhlciBjYXBzIGlzIEFOWSwgdGhlIHJlc3VsdGluZyBjYXBzIHdpbGwgYmUgQU5ZLgotICovCi12b2lkCi1nc3RfY2Fwc19hcHBlbmQgKEdzdENhcHMgKiBjYXBzMSwgR3N0Q2FwcyAqIGNhcHMyKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczsKLSAgaW50IGk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMxKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzMikpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwczEpKTsKLQotICBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19BTlkgKGNhcHMxKSB8fCBDQVBTX0lTX0FOWSAoY2FwczIpKSkgewotICAgIEdTVF9DQVBTX0ZMQUdTIChjYXBzMSkgfD0gR1NUX0NBUFNfRkxBR19BTlk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLSAgfSBlbHNlIHsKLSAgICBjYXBzMiA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMyKTsKLQotICAgIGZvciAoaSA9IEdTVF9DQVBTX0xFTiAoY2FwczIpOyBpOyBpLS0pIHsKLSAgICAgIGdzdF9jYXBzX3JlbW92ZV9hbmRfZ2V0X3N0cnVjdHVyZV9hbmRfZmVhdHVyZXMgKGNhcHMyLCAwLCAmc3RydWN0dXJlLAotICAgICAgICAgICZmZWF0dXJlcyk7Ci0gICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwczEsIHN0cnVjdHVyZSwgZmVhdHVyZXMpOwotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOyAgICAgLyogZ3VhcmFudGVlZCB0byBmcmVlIGl0ICovCi0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19tZXJnZToKLSAqIEBjYXBzMTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgdGhhdCB3aWxsIHRha2UgdGhlIG5ldyBlbnRyaWVzCi0gKiBAY2FwczI6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDYXBzIHRvIG1lcmdlIGluCi0gKgotICogQXBwZW5kcyB0aGUgc3RydWN0dXJlcyBjb250YWluZWQgaW4gQGNhcHMyIHRvIEBjYXBzMSBpZiB0aGV5IGFyZSBub3QgeWV0Ci0gKiBleHByZXNzZWQgYnkgQGNhcHMxLiBUaGUgc3RydWN0dXJlcyBpbiBAY2FwczIgYXJlIG5vdCBjb3BpZWQgLS0gdGhleSBhcmUKLSAqIHRyYW5zZmVycmVkIHRvIGEgd3JpdGFibGUgY29weSBvZiBAY2FwczEsIGFuZCB0aGVuIEBjYXBzMiBpcyBmcmVlZC4KLSAqIElmIGVpdGhlciBjYXBzIGlzIEFOWSwgdGhlIHJlc3VsdGluZyBjYXBzIHdpbGwgYmUgQU5ZLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG1lcmdlZCBjYXBzLgotICovCi1Hc3RDYXBzICoKLWdzdF9jYXBzX21lcmdlIChHc3RDYXBzICogY2FwczEsIEdzdENhcHMgKiBjYXBzMikKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXM7Ci0gIGludCBpOwotICBHc3RDYXBzICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzMSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMyKSwgTlVMTCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKENBUFNfSVNfQU5ZIChjYXBzMSkpKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLSAgICByZXN1bHQgPSBjYXBzMTsKLSAgfSBlbHNlIGlmIChHX1VOTElLRUxZIChDQVBTX0lTX0FOWSAoY2FwczIpKSkgewotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gICAgcmVzdWx0ID0gY2FwczI7Ci0gIH0gZWxzZSB7Ci0gICAgY2FwczIgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzMik7Ci0KLSAgICBmb3IgKGkgPSBHU1RfQ0FQU19MRU4gKGNhcHMyKTsgaTsgaS0tKSB7Ci0gICAgICBnc3RfY2Fwc19yZW1vdmVfYW5kX2dldF9zdHJ1Y3R1cmVfYW5kX2ZlYXR1cmVzIChjYXBzMiwgMCwgJnN0cnVjdHVyZSwKLSAgICAgICAgICAmZmVhdHVyZXMpOwotICAgICAgY2FwczEgPSBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbCAoY2FwczEsIHN0cnVjdHVyZSwgZmVhdHVyZXMpOwotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICAgIHJlc3VsdCA9IGNhcHMxOwotCi0gICAgLyogdGhpcyBpcyB0b28gbmFpdmUKLSAgICAgICBHc3RDYXBzICpjb20gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGNhcHMxLCBjYXBzMik7Ci0gICAgICAgR3N0Q2FwcyAqYWRkID0gZ3N0X2NhcHNfc3VidHJhY3QgKGNhcHMyLCBjb20pOwotCi0gICAgICAgR1NUX0RFQlVHICgiY29tbW9uIDogJWQiLCBnc3RfY2Fwc19nZXRfc2l6ZSAoY29tKSk7Ci0gICAgICAgR1NUX0RFQlVHICgiYWRkaW5nIDogJWQiLCBnc3RfY2Fwc19nZXRfc2l6ZSAoYWRkKSk7Ci0gICAgICAgZ3N0X2NhcHNfYXBwZW5kIChjYXBzMSwgYWRkKTsKLSAgICAgICBnc3RfY2Fwc191bnJlZiAoY29tKTsKLSAgICAgKi8KLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZToKLSAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvCi0gKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0U3RydWN0dXJlIHRvIGFwcGVuZAotICoKLSAqIEFwcGVuZHMgQHN0cnVjdHVyZSB0byBAY2Fwcy4gIFRoZSBzdHJ1Y3R1cmUgaXMgbm90IGNvcGllZDsgQGNhcHMKLSAqIGJlY29tZXMgdGhlIG93bmVyIG9mIEBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQKLWdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKEdzdENhcHMgKiBjYXBzLCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX1dSSVRBQkxFIChjYXBzKSk7Ci0KLSAgaWYgKEdfTElLRUxZIChzdHJ1Y3R1cmUpKSB7Ci0gICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIHN0cnVjdHVyZSwgTlVMTCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX2Z1bGw6Ci0gKiBAY2FwczogdGhlICNHc3RDYXBzIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0bwotICogQHN0cnVjdHVyZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdFN0cnVjdHVyZSB0byBhcHBlbmQKLSAqIEBmZWF0dXJlczogKHRyYW5zZmVyIGZ1bGwpIChhbGxvdy1ub25lKTogdGhlICNHc3RDYXBzRmVhdHVyZXMgdG8gYXBwZW5kCi0gKgotICogQXBwZW5kcyBAc3RydWN0dXJlIHdpdGggQGZlYXR1cmVzIHRvIEBjYXBzLiAgVGhlIHN0cnVjdHVyZSBpcyBub3QgY29waWVkOyBAY2FwcwotICogYmVjb21lcyB0aGUgb3duZXIgb2YgQHN0cnVjdHVyZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfZnVsbCAoR3N0Q2FwcyAqIGNhcHMsIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoSVNfV1JJVEFCTEUgKGNhcHMpKTsKLQotICBpZiAoR19MSUtFTFkgKHN0cnVjdHVyZSkpIHsKLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2Fwcywgc3RydWN0dXJlLCBmZWF0dXJlcyk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlOgotICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byByZW1vdmUgZnJvbQotICogQGlkeDogSW5kZXggb2YgdGhlIHN0cnVjdHVyZSB0byByZW1vdmUKLSAqCi0gKiByZW1vdmVzIHRoZSBzdHJ1Y3R1cmUgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggZnJvbSB0aGUgbGlzdCBvZiBzdHJ1Y3R1cmVzCi0gKiBjb250YWluZWQgaW4gQGNhcHMuCi0gKi8KLXZvaWQKLWdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmUgKEdzdENhcHMgKiBjYXBzLCBndWludCBpZHgpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGlkeCA8PSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcykpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX3JlbW92ZV9hbmRfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaWR4KTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZToKLSAqIEBjYXBzOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0Q2FwcyB0byBtZXJnZSBpbnRvCi0gKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0U3RydWN0dXJlIHRvIG1lcmdlCi0gKgotICogQXBwZW5kcyBAc3RydWN0dXJlIHRvIEBjYXBzIGlmIGl0cyBub3QgYWxyZWFkeSBleHByZXNzZWQgYnkgQGNhcHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbWVyZ2VkIGNhcHMuCi0gKi8KLUdzdENhcHMgKgotZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChHc3RDYXBzICogY2FwcywgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTE7Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXMxOwotICBpbnQgaTsKLSAgZ2Jvb2xlYW4gdW5pcXVlID0gVFJVRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCBOVUxMKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3RydWN0dXJlID09IE5VTEwpKQotICAgIHJldHVybiBjYXBzOwotCi0gIC8qIGNoZWNrIGVhY2ggc3RydWN0dXJlICovCi0gIGZvciAoaSA9IEdTVF9DQVBTX0xFTiAoY2FwcykgLSAxOyBpID49IDA7IGktLSkgewotICAgIHN0cnVjdHVyZTEgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgaSk7Ci0gICAgZmVhdHVyZXMxID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwcywgaSk7Ci0gICAgaWYgKCFmZWF0dXJlczEpCi0gICAgICBmZWF0dXJlczEgPSBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTsKLQotICAgIC8qIGlmIHN0cnVjdHVyZSBpcyBhIHN1YnNldCBvZiBzdHJ1Y3R1cmUxIGFuZCB0aGUKLSAgICAgKiB0aGVyZSBhcmUgbm8gZXhpc3RpbmcgZmVhdHVyZXMsIHRoZW4gc2tpcCBpdCAqLwotICAgIGlmIChnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbCAoZmVhdHVyZXMxLAotICAgICAgICAgICAgR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlkpCi0gICAgICAgICYmIGdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0IChzdHJ1Y3R1cmUsIHN0cnVjdHVyZTEpKSB7Ci0gICAgICB1bmlxdWUgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBpZiAodW5pcXVlKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBzdHJ1Y3R1cmUsIE5VTEwpOwotICB9IGVsc2UgewotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKLSAgfQotICByZXR1cm4gY2FwczsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbDoKLSAqIEBjYXBzOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0Q2FwcyB0byBtZXJnZSBpbnRvCi0gKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0U3RydWN0dXJlIHRvIG1lcmdlCi0gKiBAZmVhdHVyZXM6ICh0cmFuc2ZlciBmdWxsKSAoYWxsb3ctbm9uZSk6IHRoZSAjR3N0Q2Fwc0ZlYXR1cmVzIHRvIG1lcmdlCi0gKgotICogQXBwZW5kcyBAc3RydWN0dXJlIHdpdGggQGZlYXR1cmVzIHRvIEBjYXBzIGlmIGl0cyBub3QgYWxyZWFkeSBleHByZXNzZWQgYnkgQGNhcHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbWVyZ2VkIGNhcHMuCi0gKgotICogU2luY2U6IDEuMgotICovCi1Hc3RDYXBzICoKLWdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZV9mdWxsIChHc3RDYXBzICogY2FwcywgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTE7Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXMxLCAqZmVhdHVyZXNfdG1wOwotICBpbnQgaTsKLSAgZ2Jvb2xlYW4gdW5pcXVlID0gVFJVRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCBOVUxMKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3RydWN0dXJlID09IE5VTEwpKQotICAgIHJldHVybiBjYXBzOwotCi0gIC8qIFRvIG1ha2UgY29tcGFyaXNvbnMgZWFzaWVyIGJlbG93ICovCi0gIGZlYXR1cmVzX3RtcCA9IGZlYXR1cmVzID8gZmVhdHVyZXMgOiBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTsKLQotICAvKiBjaGVjayBlYWNoIHN0cnVjdHVyZSAqLwotICBmb3IgKGkgPSBHU1RfQ0FQU19MRU4gKGNhcHMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICBzdHJ1Y3R1cmUxID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIGkpOwotICAgIGZlYXR1cmVzMSA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIGkpOwotICAgIGlmICghZmVhdHVyZXMxKQotICAgICAgZmVhdHVyZXMxID0gR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk7Ci0gICAgLyogaWYgc3RydWN0dXJlIGlzIGEgc3Vic2V0IG9mIHN0cnVjdHVyZTEgYW5kIHRoZQotICAgICAqIHRoZSBmZWF0dXJlcyBhcmUgYSBzdWJzZXQsIHRoZW4gc2tpcCBpdCAqLwotICAgIC8qIEZJWE1FOiBXZSBvbmx5IHNraXAgaWYgbm9uZSBvZiB0aGUgZmVhdHVyZXMgYXJlCi0gICAgICogQU5ZIGFuZCBhcmUgc3RpbGwgZXF1YWwuIFRoYXQgd2F5IGFsbCBBTlkgc3RydWN0dXJlcwotICAgICAqIHNob3cgdXAgaW4gdGhlIGNhcHMgYW5kIG5vIG5vbi1BTlkgc3RydWN0dXJlcyBhcmUKLSAgICAgKiBzd2FsbG93ZWQgYnkgQU5ZIHN0cnVjdHVyZXMKLSAgICAgKi8KLSAgICBpZiAoKCghZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55IChmZWF0dXJlc190bXApCi0gICAgICAgICAgICAgICAgfHwgZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55IChmZWF0dXJlczEpKQotICAgICAgICAgICAgJiYgZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGZlYXR1cmVzX3RtcCwgZmVhdHVyZXMxKSkKLSAgICAgICAgJiYgZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKHN0cnVjdHVyZSwgc3RydWN0dXJlMSkpIHsKLSAgICAgIHVuaXF1ZSA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGlmICh1bmlxdWUpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIHN0cnVjdHVyZSwgZmVhdHVyZXMpOwotICB9IGVsc2UgewotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKLSAgICBpZiAoZmVhdHVyZXMpCi0gICAgICBnc3RfY2Fwc19mZWF0dXJlc19mcmVlIChmZWF0dXJlcyk7Ci0gIH0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZ2V0X3NpemU6Ci0gKiBAY2FwczogYSAjR3N0Q2FwcwotICoKLSAqIEdldHMgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIGNvbnRhaW5lZCBpbiBAY2Fwcy4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHN0cnVjdHVyZXMgdGhhdCBAY2FwcyBjb250YWlucwotICovCi1ndWludAotZ3N0X2NhcHNfZ2V0X3NpemUgKGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCAwKTsKLQotICByZXR1cm4gR1NUX0NBUFNfTEVOIChjYXBzKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19nZXRfc3RydWN0dXJlOgotICogQGNhcHM6IGEgI0dzdENhcHMKLSAqIEBpbmRleDogdGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3R1cmUKLSAqCi0gKiBGaW5kcyB0aGUgc3RydWN0dXJlIGluIEBjYXBzIHRoYXQgaGFzIHRoZSBpbmRleCBAaW5kZXgsIGFuZAotICogcmV0dXJucyBpdC4KLSAqCi0gKiBXQVJOSU5HOiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgY29uc3QgR3N0Q2FwcyAqLCBidXQgcmV0dXJucyBhCi0gKiBub24tY29uc3QgR3N0U3RydWN0dXJlICouICBUaGlzIGlzIGZvciBwcm9ncmFtbWluZyBjb252ZW5pZW5jZSAtLQotICogdGhlIGNhbGxlciBzaG91bGQgYmUgYXdhcmUgdGhhdCBzdHJ1Y3R1cmVzIGluc2lkZSBhIGNvbnN0YW50Ci0gKiAjR3N0Q2FwcyBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiBIb3dldmVyLCBpZiB5b3Uga25vdyB0aGUgY2FwcwotICogYXJlIHdyaXRhYmxlLCBlaXRoZXIgYmVjYXVzZSB5b3UgaGF2ZSBqdXN0IGNvcGllZCB0aGVtIG9yIG1hZGUKLSAqIHRoZW0gd3JpdGFibGUgd2l0aCBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCksIHlvdSBtYXkgbW9kaWZ5IHRoZQotICogc3RydWN0dXJlIHJldHVybmVkIGluIHRoZSB1c3VhbCB3YXksIGUuZy4gd2l0aCBmdW5jdGlvbnMgbGlrZQotICogZ3N0X3N0cnVjdHVyZV9zZXQoKS4KLSAqCi0gKiBZb3UgZG8gbm90IG5lZWQgdG8gZnJlZSBvciB1bnJlZiB0aGUgc3RydWN0dXJlIHJldHVybmVkLCBpdAotICogYmVsb25ncyB0byB0aGUgI0dzdENhcHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgdG8gdGhlICNHc3RTdHJ1Y3R1cmUgY29ycmVzcG9uZGluZwotICogICAgIHRvIEBpbmRleAotICovCi1Hc3RTdHJ1Y3R1cmUgKgotZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY29uc3QgR3N0Q2FwcyAqIGNhcHMsIGd1aW50IGluZGV4KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZGV4IDwgR1NUX0NBUFNfTEVOIChjYXBzKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpbmRleCk7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzOgotICogQGNhcHM6IGEgI0dzdENhcHMKLSAqIEBpbmRleDogdGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3R1cmUKLSAqCi0gKiBGaW5kcyB0aGUgZmVhdHVyZXMgaW4gQGNhcHMgdGhhdCBoYXMgdGhlIGluZGV4IEBpbmRleCwgYW5kCi0gKiByZXR1cm5zIGl0LgotICoKLSAqIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBjb25zdCBHc3RDYXBzICosIGJ1dCByZXR1cm5zIGEKLSAqIG5vbi1jb25zdCBHc3RDYXBzRmVhdHVyZXMgKi4gIFRoaXMgaXMgZm9yIHByb2dyYW1taW5nIGNvbnZlbmllbmNlIC0tCi0gKiB0aGUgY2FsbGVyIHNob3VsZCBiZSBhd2FyZSB0aGF0IHN0cnVjdHVyZXMgaW5zaWRlIGEgY29uc3RhbnQKLSAqICNHc3RDYXBzIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuIEhvd2V2ZXIsIGlmIHlvdSBrbm93IHRoZSBjYXBzCi0gKiBhcmUgd3JpdGFibGUsIGVpdGhlciBiZWNhdXNlIHlvdSBoYXZlIGp1c3QgY29waWVkIHRoZW0gb3IgbWFkZQotICogdGhlbSB3cml0YWJsZSB3aXRoIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSwgeW91IG1heSBtb2RpZnkgdGhlCi0gKiBmZWF0dXJlcyByZXR1cm5lZCBpbiB0aGUgdXN1YWwgd2F5LCBlLmcuIHdpdGggZnVuY3Rpb25zIGxpa2UKLSAqIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCgpLgotICoKLSAqIFlvdSBkbyBub3QgbmVlZCB0byBmcmVlIG9yIHVucmVmIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQsIGl0Ci0gKiBiZWxvbmdzIHRvIHRoZSAjR3N0Q2Fwcy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgcG9pbnRlciB0byB0aGUgI0dzdENhcHNGZWF0dXJlcyBjb3JyZXNwb25kaW5nCi0gKiAgICAgdG8gQGluZGV4Ci0gKgotICogU2luY2U6IDEuMgotICovCi1Hc3RDYXBzRmVhdHVyZXMgKgotZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzIChjb25zdCBHc3RDYXBzICogY2FwcywgZ3VpbnQgaW5kZXgpCi17Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmRleCA8IEdTVF9DQVBTX0xFTiAoY2FwcyksIE5VTEwpOwotCi0gIGZlYXR1cmVzID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwcywgaW5kZXgpOwotICBpZiAoIWZlYXR1cmVzKSB7Ci0gICAgR3N0Q2Fwc0ZlYXR1cmVzICoqc3RvcmFnZTsKLQotICAgIC8qIFdlIGhhdmUgdG8gZG8gc29tZSBhdG9taWMgcG9pbnRlciBtYWdpYyBoZXJlIGFzIHRoZSBjYXBzCi0gICAgICogbWlnaHQgbm90IGJlIHdyaXRhYmxlIGFuZCBzb21lb25lIGVsc2UgY2FsbHMgdGhpcyBmdW5jdGlvbgotICAgICAqIGF0IHRoZSB2ZXJ5IHNhbWUgdGltZSAqLwotICAgIGZlYXR1cmVzID0gZ3N0X2NhcHNfZmVhdHVyZXNfY29weSAoR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlkpOwotICAgIGdzdF9jYXBzX2ZlYXR1cmVzX3NldF9wYXJlbnRfcmVmY291bnQgKGZlYXR1cmVzLCAmR1NUX0NBUFNfUkVGQ09VTlQgKGNhcHMpKTsKLQotICAgIHN0b3JhZ2UgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfc3RvcmFnZV91bmNoZWNrZWQgKGNhcHMsIGluZGV4KTsKLSAgICBpZiAoIWdfYXRvbWljX3BvaW50ZXJfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKHN0b3JhZ2UsIE5VTEwsIGZlYXR1cmVzKSkgewotICAgICAgLyogU29tZW9uZSBkaWQgdGhlIHNhbWUgd2UganVzdCB0cmllZCBpbiB0aGUgbWVhbnRpbWUgKi8KLSAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX3NldF9wYXJlbnRfcmVmY291bnQgKGZlYXR1cmVzLCBOVUxMKTsKLSAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUgKGZlYXR1cmVzKTsKLQotICAgICAgZmVhdHVyZXMgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzLCBpbmRleCk7Ci0gICAgICBnX2Fzc2VydCAoZmVhdHVyZXMgIT0gTlVMTCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGZlYXR1cmVzOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX3NldF9mZWF0dXJlczoKLSAqIEBjYXBzOiBhICNHc3RDYXBzCi0gKiBAaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgc3RydWN0dXJlCi0gKiBAZmVhdHVyZXM6IChhbGxvdy1ub25lKSAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0Q2Fwc0ZlYXR1cmVzIHRvIHNldAotICoKLSAqIFNldHMgdGhlICNHc3RDYXBzRmVhdHVyZXMgQGZlYXR1cmVzIGZvciB0aGUgc3RydWN0dXJlIGF0IEBpbmRleC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9jYXBzX3NldF9mZWF0dXJlcyAoR3N0Q2FwcyAqIGNhcHMsIGd1aW50IGluZGV4LCBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcykKLXsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICoqc3RvcmFnZSwgKm9sZDsKLQotICBnX3JldHVybl9pZl9mYWlsIChjYXBzICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChpbmRleCA8PSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcykpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOwotCi0gIHN0b3JhZ2UgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfc3RvcmFnZV91bmNoZWNrZWQgKGNhcHMsIGluZGV4KTsKLSAgLyogTm90IG11Y2ggcHJvYmxlbSBoZXJlIGFzIGNhcHMgYXJlIHdyaXRhYmxlICovCi0gIG9sZCA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0IChzdG9yYWdlKTsKLSAgZ19hdG9taWNfcG9pbnRlcl9zZXQgKHN0b3JhZ2UsIGZlYXR1cmVzKTsKLQotICBpZiAoZmVhdHVyZXMpCi0gICAgZ3N0X2NhcHNfZmVhdHVyZXNfc2V0X3BhcmVudF9yZWZjb3VudCAoZmVhdHVyZXMsICZHU1RfQ0FQU19SRUZDT1VOVCAoY2FwcykpOwotCi0gIGlmIChvbGQpIHsKLSAgICBnc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50IChvbGQsIE5VTEwpOwotICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUgKG9sZCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19jb3B5X250aDoKLSAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdG8gY29weQotICogQG50aDogdGhlIG50aCBzdHJ1Y3R1cmUgdG8gY29weQotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgYW5kIGFwcGVuZHMgYSBjb3B5IG9mIHRoZSBudGggc3RydWN0dXJlCi0gKiBjb250YWluZWQgaW4gQGNhcHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RDYXBzCi0gKi8KLUdzdENhcHMgKgotZ3N0X2NhcHNfY29weV9udGggKGNvbnN0IEdzdENhcHMgKiBjYXBzLCBndWludCBudGgpCi17Ci0gIEdzdENhcHMgKm5ld2NhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcyksIE5VTEwpOwotCi0gIG5ld2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIEdTVF9DQVBTX0ZMQUdTIChuZXdjYXBzKSA9IEdTVF9DQVBTX0ZMQUdTIChjYXBzKTsKLQotICBpZiAoR19MSUtFTFkgKEdTVF9DQVBTX0xFTiAoY2FwcykgPiBudGgpKSB7Ci0gICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIG50aCk7Ci0gICAgZmVhdHVyZXMgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzLCBudGgpOwotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChuZXdjYXBzLAotICAgICAgICBnc3Rfc3RydWN0dXJlX2NvcHkgKHN0cnVjdHVyZSksCi0gICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2NvcHlfY29uZGl0aW9uYWwgKGZlYXR1cmVzKSk7Ci0gIH0KLQotICByZXR1cm4gbmV3Y2FwczsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc190cnVuY2F0ZToKLSAqIEBjYXBzOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0Q2FwcyB0byB0cnVuY2F0ZQotICoKLSAqIERpc2NhcmQgYWxsIGJ1dCB0aGUgZmlyc3Qgc3RydWN0dXJlIGZyb20gQGNhcHMuIFVzZWZ1bCB3aGVuCi0gKiBmaXhhdGluZy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiBAY2FwcyBhbmQgd2lsbCBjYWxsIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKQotICogb24gaXQgaWYgbmVjZXNzYXJ5LCBzbyB5b3UgbXVzdCBub3QgdXNlIEBjYXBzIGFmdGVyd2FyZHMgdW5sZXNzIHlvdSBrZWVwIGFuCi0gKiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byBpdCB3aXRoIGdzdF9jYXBzX3JlZigpLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdHJ1bmNhdGVkIGNhcHMKLSAqLwotR3N0Q2FwcyAqCi1nc3RfY2Fwc190cnVuY2F0ZSAoR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdpbnQgaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMpLCBOVUxMKTsKLQotICBpID0gR1NUX0NBUFNfTEVOIChjYXBzKSAtIDE7Ci0gIGlmIChpID09IDApCi0gICAgcmV0dXJuIGNhcHM7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotICB3aGlsZSAoaSA+IDApCi0gICAgZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZSAoY2FwcywgaS0tKTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19zZXRfdmFsdWU6Ci0gKiBAY2FwczogYSB3cml0YWJsZSBjYXBzCi0gKiBAZmllbGQ6IG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldAotICogQHZhbHVlOiB2YWx1ZSB0byBzZXQgdGhlIGZpZWxkIHRvCi0gKgotICogU2V0cyB0aGUgZ2l2ZW4gQGZpZWxkIG9uIGFsbCBzdHJ1Y3R1cmVzIG9mIEBjYXBzIHRvIHRoZSBnaXZlbiBAdmFsdWUuCi0gKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhbGxpbmcgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUoKSBvbgotICogYWxsIHN0cnVjdHVyZXMgb2YgQGNhcHMuCi0gKiovCi12b2lkCi1nc3RfY2Fwc19zZXRfdmFsdWUgKEdzdENhcHMgKiBjYXBzLCBjb25zdCBjaGFyICpmaWVsZCwgY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGd1aW50IGksIGxlbjsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcykpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOwotICBnX3JldHVybl9pZl9mYWlsIChmaWVsZCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpKTsKLQotICBsZW4gPSBHU1RfQ0FQU19MRU4gKGNhcHMpOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZCwgdmFsdWUpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3Q6Ci0gKiBAY2FwczogdGhlICNHc3RDYXBzIHRvIHNldAotICogQGZpZWxkOiBmaXJzdCBmaWVsZCB0byBzZXQKLSAqIEB2YXJhcmdzOiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMKLSAqCi0gKiBTZXRzIGZpZWxkcyBpbiBhICNHc3RDYXBzLiAgVGhlIGFyZ3VtZW50cyBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgc2FtZQotICogbWFubmVyIGFzIGdzdF9zdHJ1Y3R1cmVfc2V0KCksIGFuZCBiZSAlTlVMTC10ZXJtaW5hdGVkLgotICovCi12b2lkCi1nc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCAoR3N0Q2FwcyAqIGNhcHMsIGNvbnN0IGNoYXIgKmZpZWxkLCB2YV9saXN0IHZhcmFyZ3MpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcykpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOwotCi0gIHdoaWxlIChmaWVsZCkgewotICAgIEdUeXBlIHR5cGU7Ci0gICAgY2hhciAqZXJyOwotCi0gICAgdHlwZSA9IHZhX2FyZyAodmFyYXJncywgR1R5cGUpOwotCi0gICAgR19WQUxVRV9DT0xMRUNUX0lOSVQgKCZ2YWx1ZSwgdHlwZSwgdmFyYXJncywgMCwgJmVycik7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGVycikpIHsKLSAgICAgIGdfY3JpdGljYWwgKCIlcyIsIGVycik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfc2V0X3ZhbHVlIChjYXBzLCBmaWVsZCwgJnZhbHVlKTsKLQotICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci0KLSAgICBmaWVsZCA9IHZhX2FyZyAodmFyYXJncywgY29uc3QgZ2NoYXIgKik7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19zZXRfc2ltcGxlOgotICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byBzZXQKLSAqIEBmaWVsZDogZmlyc3QgZmllbGQgdG8gc2V0Ci0gKiBALi4uOiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMKLSAqCi0gKiBTZXRzIGZpZWxkcyBpbiBhICNHc3RDYXBzLiAgVGhlIGFyZ3VtZW50cyBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgc2FtZQotICogbWFubmVyIGFzIGdzdF9zdHJ1Y3R1cmVfc2V0KCksIGFuZCBiZSAlTlVMTC10ZXJtaW5hdGVkLgotICovCi12b2lkCi1nc3RfY2Fwc19zZXRfc2ltcGxlIChHc3RDYXBzICogY2FwcywgY29uc3QgY2hhciAqZmllbGQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJfYXJnczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcykpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19XUklUQUJMRSAoY2FwcykpOwotCi0gIHZhX3N0YXJ0ICh2YXJfYXJncywgZmllbGQpOwotICBnc3RfY2Fwc19zZXRfc2ltcGxlX3ZhbGlzdCAoY2FwcywgZmllbGQsIHZhcl9hcmdzKTsKLSAgdmFfZW5kICh2YXJfYXJncyk7Ci19Ci0KLS8qIHRlc3RzICovCi0KLS8qKgotICogZ3N0X2NhcHNfaXNfYW55OgotICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byB0ZXN0Ci0gKgotICogRGV0ZXJtaW5lcyBpZiBAY2FwcyByZXByZXNlbnRzIGFueSBtZWRpYSBmb3JtYXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGNhcHMgcmVwcmVzZW50cyBhbnkgZm9ybWF0LgotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfaXNfYW55IChjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgRkFMU0UpOwotCi0gIHJldHVybiAoQ0FQU19JU19BTlkgKGNhcHMpKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19pc19lbXB0eToKLSAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdG8gdGVzdAotICoKLSAqIERldGVybWluZXMgaWYgQGNhcHMgcmVwcmVzZW50cyBubyBtZWRpYSBmb3JtYXRzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBjYXBzIHJlcHJlc2VudHMgbm8gZm9ybWF0cy4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9jYXBzX2lzX2VtcHR5IChjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgRkFMU0UpOwotCi0gIGlmIChDQVBTX0lTX0FOWSAoY2FwcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBDQVBTX0lTX0VNUFRZX1NJTVBMRSAoY2Fwcyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NhcHNfaXNfZml4ZWRfZm9yZWFjaCAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBncG9pbnRlciB1bnVzZWQpCi17Ci0gIHJldHVybiBnc3RfdmFsdWVfaXNfZml4ZWQgKHZhbHVlKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19pc19maXhlZDoKLSAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdG8gdGVzdAotICoKLSAqIEZpeGVkICNHc3RDYXBzIGRlc2NyaWJlIGV4YWN0bHkgb25lIGZvcm1hdCwgdGhhdCBpcywgdGhleSBoYXZlIGV4YWN0bHkKLSAqIG9uZSBzdHJ1Y3R1cmUsIGFuZCBlYWNoIGZpZWxkIGluIHRoZSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgZml4ZWQgdHlwZS4KLSAqIEV4YW1wbGVzIG9mIG5vbi1maXhlZCB0eXBlcyBhcmUgR1NUX1RZUEVfSU5UX1JBTkdFIGFuZCBHU1RfVFlQRV9MSVNULgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBjYXBzIGlzIGZpeGVkCi0gKi8KLWdib29sZWFuCi1nc3RfY2Fwc19pc19maXhlZCAoY29uc3QgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcyksIEZBTFNFKTsKLQotICBpZiAoR1NUX0NBUFNfTEVOIChjYXBzKSAhPSAxKQotICAgIHJldHVybiBGQUxTRTsKLQotICBmZWF0dXJlcyA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIDApOwotICBpZiAoZmVhdHVyZXMgJiYgZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55IChmZWF0dXJlcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCAwKTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzdHJ1Y3R1cmUsIGdzdF9jYXBzX2lzX2ZpeGVkX2ZvcmVhY2gsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkOgotICogQGNhcHMxOiB0aGUgI0dzdENhcHMgdG8gdGVzdAotICogQGNhcHMyOiB0aGUgI0dzdENhcHMgdG8gdGVzdAotICoKLSAqIFRlc3RzIGlmIHR3byAjR3N0Q2FwcyBhcmUgZXF1YWwuICBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3Mgb24gZml4ZWQKLSAqICNHc3RDYXBzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBhcmd1bWVudHMgcmVwcmVzZW50IHRoZSBzYW1lIGZvcm1hdAotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQgKGNvbnN0IEdzdENhcHMgKiBjYXBzMSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMyKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDEsICpzdHJ1Y3QyOwotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzMSwgKmZlYXR1cmVzMjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMxKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMyKSwgRkFMU0UpOwotCi0gIHN0cnVjdDEgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwczEsIDApOwotICBmZWF0dXJlczEgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzMSwgMCk7Ci0gIGlmICghZmVhdHVyZXMxKQotICAgIGZlYXR1cmVzMSA9IEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZOwotICBzdHJ1Y3QyID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMyLCAwKTsKLSAgZmVhdHVyZXMyID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwczIsIDApOwotICBpZiAoIWZlYXR1cmVzMikKLSAgICBmZWF0dXJlczIgPSBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9pc19lcXVhbCAoc3RydWN0MSwgc3RydWN0MikgJiYKLSAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChmZWF0dXJlczEsIGZlYXR1cmVzMik7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGU6Ci0gKiBAY2FwczE6IHRoZSAjR3N0Q2FwcyB0byB0ZXN0Ci0gKiBAY2FwczI6IHRoZSAjR3N0Q2FwcyB0byB0ZXN0Ci0gKgotICogQSBnaXZlbiAjR3N0Q2FwcyBzdHJ1Y3R1cmUgaXMgYWx3YXlzIGNvbXBhdGlibGUgd2l0aCBhbm90aGVyIGlmCi0gKiBldmVyeSBtZWRpYSBmb3JtYXQgdGhhdCBpcyBpbiB0aGUgZmlyc3QgaXMgYWxzbyBjb250YWluZWQgaW4gdGhlCi0gKiBzZWNvbmQuICBUaGF0IGlzLCBAY2FwczEgaXMgYSBzdWJzZXQgb2YgQGNhcHMyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBjYXBzMSBpcyBhIHN1YnNldCBvZiBAY2FwczIuCi0gKi8KLWdib29sZWFuCi1nc3RfY2Fwc19pc19hbHdheXNfY29tcGF0aWJsZSAoY29uc3QgR3N0Q2FwcyAqIGNhcHMxLCBjb25zdCBHc3RDYXBzICogY2FwczIpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczIpLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIGdzdF9jYXBzX2lzX3N1YnNldCAoY2FwczEsIGNhcHMyKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19pc19zdWJzZXQ6Ci0gKiBAc3Vic2V0OiBhICNHc3RDYXBzCi0gKiBAc3VwZXJzZXQ6IGEgcG90ZW50aWFsbHkgZ3JlYXRlciAjR3N0Q2FwcwotICoKLSAqIENoZWNrcyBpZiBhbGwgY2FwcyByZXByZXNlbnRlZCBieSBAc3Vic2V0IGFyZSBhbHNvIHJlcHJlc2VudGVkIGJ5IEBzdXBlcnNldC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAc3Vic2V0IGlzIGEgc3Vic2V0IG9mIEBzdXBlcnNldAotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfaXNfc3Vic2V0IChjb25zdCBHc3RDYXBzICogc3Vic2V0LCBjb25zdCBHc3RDYXBzICogc3VwZXJzZXQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczEsICpzMjsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmMSwgKmYyOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBnaW50IGksIGo7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN1YnNldCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdXBlcnNldCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKENBUFNfSVNfRU1QVFkgKHN1YnNldCkgfHwgQ0FQU19JU19BTlkgKHN1cGVyc2V0KSkKLSAgICByZXR1cm4gVFJVRTsKLSAgaWYgKENBUFNfSVNfQU5ZIChzdWJzZXQpIHx8IENBUFNfSVNfRU1QVFkgKHN1cGVyc2V0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZm9yIChpID0gR1NUX0NBUFNfTEVOIChzdWJzZXQpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICBmb3IgKGogPSBHU1RfQ0FQU19MRU4gKHN1cGVyc2V0KSAtIDE7IGogPj0gMDsgai0tKSB7Ci0gICAgICBzMSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChzdWJzZXQsIGkpOwotICAgICAgZjEgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChzdWJzZXQsIGkpOwotICAgICAgaWYgKCFmMSkKLSAgICAgICAgZjEgPSBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTsKLSAgICAgIHMyID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKHN1cGVyc2V0LCBqKTsKLSAgICAgIGYyID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoc3VwZXJzZXQsIGopOwotICAgICAgaWYgKCFmMikKLSAgICAgICAgZjIgPSBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTsKLSAgICAgIGlmICgoIWdzdF9jYXBzX2ZlYXR1cmVzX2lzX2FueSAoZjEpIHx8IGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2FueSAoZjIpKSAmJgotICAgICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChmMSwgZjIpCi0gICAgICAgICAgJiYgZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKHMxLCBzMikpIHsKLSAgICAgICAgLyogSWYgd2UgZm91bmQgYSBzdXBlcnNldCwgY29udGludWUgd2l0aCB0aGUgbmV4dAotICAgICAgICAgKiBzdWJzZXQgc3RydWN0dXJlICovCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICAvKiBJZiB3ZSBmb3VuZCBubyBzdXBlcnNldCBmb3IgdGhpcyBzdWJzZXQgc3RydWN0dXJlCi0gICAgICogd2UgcmV0dXJuIEZBTFNFIGltbWVkaWF0ZWx5ICovCi0gICAgaWYgKGogPT0gLTEpIHsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlOgotICogQGNhcHM6IGEgI0dzdENhcHMKLSAqIEBzdHJ1Y3R1cmU6IGEgcG90ZW50aWFsICNHc3RTdHJ1Y3R1cmUgc3Vic2V0IG9mIEBjYXBzCi0gKgotICogQ2hlY2tzIGlmIEBzdHJ1Y3R1cmUgaXMgYSBzdWJzZXQgb2YgQGNhcHMuIFNlZSBnc3RfY2Fwc19pc19zdWJzZXQoKQotICogZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQHN0cnVjdHVyZSBpcyBhIHN1YnNldCBvZiBAY2FwcwotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZSAoY29uc3QgR3N0Q2FwcyAqIGNhcHMsCi0gICAgY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGdpbnQgaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChDQVBTX0lTX0FOWSAoY2FwcykpCi0gICAgcmV0dXJuIFRSVUU7Ci0gIGlmIChDQVBTX0lTX0VNUFRZIChjYXBzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZm9yIChpID0gR1NUX0NBUFNfTEVOIChjYXBzKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKHN0cnVjdHVyZSwgcykpIHsKLSAgICAgIC8qIElmIHdlIGZvdW5kIGEgc3VwZXJzZXQgcmV0dXJuIFRSVUUgKi8KLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlX2Z1bGw6Ci0gKiBAY2FwczogYSAjR3N0Q2FwcwotICogQHN0cnVjdHVyZTogYSBwb3RlbnRpYWwgI0dzdFN0cnVjdHVyZSBzdWJzZXQgb2YgQGNhcHMKLSAqIEBmZWF0dXJlczogKGFsbG93LW5vbmUpOiBhICNHc3RDYXBzRmVhdHVyZXMgZm9yIEBzdHJ1Y3R1cmUKLSAqCi0gKiBDaGVja3MgaWYgQHN0cnVjdHVyZSBpcyBhIHN1YnNldCBvZiBAY2Fwcy4gU2VlIGdzdF9jYXBzX2lzX3N1YnNldCgpCi0gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAc3RydWN0dXJlIGlzIGEgc3Vic2V0IG9mIEBjYXBzCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZV9mdWxsIChjb25zdCBHc3RDYXBzICogY2FwcywKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdENhcHNGZWF0dXJlcyAqZjsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjYXBzICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKENBUFNfSVNfQU5ZIChjYXBzKSkKLSAgICByZXR1cm4gVFJVRTsKLSAgaWYgKENBUFNfSVNfRU1QVFkgKGNhcHMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWZlYXR1cmVzKQotICAgIGZlYXR1cmVzID0gR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk7Ci0KLSAgZm9yIChpID0gR1NUX0NBUFNfTEVOIChjYXBzKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICBmID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwcywgaSk7Ci0gICAgaWYgKCFmKQotICAgICAgZiA9IEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZOwotICAgIGlmICgoIWdzdF9jYXBzX2ZlYXR1cmVzX2lzX2FueSAoZmVhdHVyZXMpIHx8IGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2FueSAoZikpCi0gICAgICAgICYmIGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChmZWF0dXJlcywgZikKLSAgICAgICAgJiYgZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKHN0cnVjdHVyZSwgcykpIHsKLSAgICAgIC8qIElmIHdlIGZvdW5kIGEgc3VwZXJzZXQgcmV0dXJuIFRSVUUgKi8KLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19pc19lcXVhbDoKLSAqIEBjYXBzMTogYSAjR3N0Q2FwcwotICogQGNhcHMyOiBhbm90aGVyICNHc3RDYXBzCi0gKgotICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBjYXBzIHJlcHJlc2VudCB0aGUgc2FtZSBzZXQgb2YgY2Fwcy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBib3RoIGNhcHMgYXJlIGVxdWFsLgotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfaXNfZXF1YWwgKGNvbnN0IEdzdENhcHMgKiBjYXBzMSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMxKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NBUFMgKGNhcHMyKSwgRkFMU0UpOwotCi0gIGlmIChHX1VOTElLRUxZIChjYXBzMSA9PSBjYXBzMikpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzMSkgJiYgZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMyKSkpCi0gICAgcmV0dXJuIGdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkIChjYXBzMSwgY2FwczIpOwotCi0gIHJldHVybiBnc3RfY2Fwc19pc19zdWJzZXQgKGNhcHMxLCBjYXBzMikgJiYgZ3N0X2NhcHNfaXNfc3Vic2V0IChjYXBzMiwgY2FwczEpOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2lzX3N0cmljdGx5X2VxdWFsOgotICogQGNhcHMxOiBhICNHc3RDYXBzCi0gKiBAY2FwczI6IGFub3RoZXIgI0dzdENhcHMKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGNhcHMgYXJlIGV4YWN0bHkgdGhlIHNhbWUgc2V0IG9mIGNhcHMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYm90aCBjYXBzIGFyZSBzdHJpY3RseSBlcXVhbC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9jYXBzX2lzX3N0cmljdGx5X2VxdWFsIChjb25zdCBHc3RDYXBzICogY2FwczEsIGNvbnN0IEdzdENhcHMgKiBjYXBzMikKLXsKLSAgaW50IGk7Ci0gIEdzdFN0cnVjdHVyZSAqczEsICpzMjsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmMSwgKmYyOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczIpLCBGQUxTRSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGNhcHMxID09IGNhcHMyKSkKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAoR1NUX0NBUFNfTEVOIChjYXBzMSkgIT0gR1NUX0NBUFNfTEVOIChjYXBzMikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHU1RfQ0FQU19MRU4gKGNhcHMxKTsgaSsrKSB7Ci0gICAgczEgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwczEsIGkpOwotICAgIGYxID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwczEsIGkpOwotICAgIGlmICghZjEpCi0gICAgICBmMSA9IEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZOwotICAgIHMyID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMyLCBpKTsKLSAgICBmMiA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMyLCBpKTsKLSAgICBpZiAoIWYyKQotICAgICAgZjIgPSBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTsKLQotICAgIGlmIChnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGYxKSAhPSBnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGYyKSB8fAotICAgICAgICAhZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGYxLCBmMikgfHwKLSAgICAgICAgIWdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKHMxLCBzMikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogaW50ZXJzZWN0IG9wZXJhdGlvbiAqLwotCi0vKioKLSAqIGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3Q6Ci0gKiBAY2FwczE6IGEgI0dzdENhcHMgdG8gaW50ZXJzZWN0Ci0gKiBAY2FwczI6IGEgI0dzdENhcHMgdG8gaW50ZXJzZWN0Ci0gKgotICogVHJpZXMgaW50ZXJzZWN0aW5nIEBjYXBzMSBhbmQgQGNhcHMyIGFuZCByZXBvcnRzIHdoZXRoZXIgdGhlIHJlc3VsdCB3b3VsZCBub3QKLSAqIGJlIGVtcHR5Ci0gKgotICogUmV0dXJuczogJVRSVUUgaWYgaW50ZXJzZWN0aW9uIHdvdWxkIGJlIG5vdCBlbXB0eQotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoY29uc3QgR3N0Q2FwcyAqIGNhcHMxLCBjb25zdCBHc3RDYXBzICogY2FwczIpCi17Ci0gIGd1aW50NjQgaTsgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4IGNhbiBiZSB1cCB0byAyICogR19NQVhfVUlOVCAqLwotICBndWludCBqLCBrLCBsZW4xLCBsZW4yOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDE7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0MjsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczE7Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXMyOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczIpLCBGQUxTRSk7Ci0KLSAgLyogY2FwcyBhcmUgZXhhY3RseSB0aGUgc2FtZSBwb2ludGVycyAqLwotICBpZiAoR19VTkxJS0VMWSAoY2FwczEgPT0gY2FwczIpKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIGVtcHR5IGNhcHMgb24gZWl0aGVyIHNpZGUsIHJldHVybiBlbXB0eSAqLwotICBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19FTVBUWSAoY2FwczEpIHx8IENBUFNfSVNfRU1QVFkgKGNhcHMyKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIG9uZSBvZiB0aGUgY2FwcyBpcyBhbnkgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKENBUFNfSVNfQU5ZIChjYXBzMSkgfHwgQ0FQU19JU19BTlkgKGNhcHMyKSkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogcnVuIHppZ3phZyBvbiB0b3AgbGluZSB0aGVuIHJpZ2h0IGxpbmUsIHRoaXMgcHJlc2VydmVzIHRoZSBjYXBzIG9yZGVyCi0gICAqIG11Y2ggYmV0dGVyIHRoYW4gYSBzaW1wbGUgbG9vcC4KLSAgICoKLSAgICogVGhpcyBhbGdvcml0aG0gemlnemFncyBvdmVyIHRoZSBjYXBzIHN0cnVjdHVyZXMgYXMgZGVtb25zdHJhdGVkIGluCi0gICAqIHRoZSBmb2xsb3dpbmcgbWF0cml4OgotICAgKgotICAgKiAgICAgICAgICBjYXBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIDEgIDIgIDMKLSAgICogICAgICAgKy0tLS0tLS0tLS0tLS0gICAgIHRvdGFsIGRpc3RhbmNlOiAgKy0tLS0tLS0tLS0tLS0KLSAgICogICAgICAgfCAxICAyICA0ICA3ICAgICAgICAgICAgICAgICAgICAgIDAgfCAwICAxICAyICAzCi0gICAqIGNhcHMyIHwgMyAgNSAgOCAxMCAgICAgICAgICAgICAgICAgICAgICAxIHwgMSAgMiAgMyAgNAotICAgKiAgICAgICB8IDYgIDkgMTEgMTIgICAgICAgICAgICAgICAgICAgICAgMiB8IDIgIDMgIDQgIDUKLSAgICoKLSAgICogRmlyc3Qgd2UgaXRlcmF0ZSBvdmVyIHRoZSBjYXBzMSBzdHJ1Y3R1cmVzICh0b3AgbGluZSkgaW50ZXJzZWN0aW5nCi0gICAqIHRoZSBzdHJ1Y3R1cmVzIGRpYWdvbmFsbHkgZG93biwgdGhlbiB3ZSBpdGVyYXRlIG92ZXIgdGhlIGNhcHMyCi0gICAqIHN0cnVjdHVyZXMuIFRoZSByZXN1bHQgaXMgdGhhdCB0aGUgaW50ZXJzZWN0aW9ucyBhcmUgb3JkZXJlZCBiYXNlZCBvbiB0aGUKLSAgICogc3VtIG9mIHRoZSBpbmRleGVzIGluIHRoZSBsaXN0LgotICAgKi8KLSAgbGVuMSA9IEdTVF9DQVBTX0xFTiAoY2FwczEpOwotICBsZW4yID0gR1NUX0NBUFNfTEVOIChjYXBzMik7Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW4xICsgbGVuMiAtIDE7IGkrKykgewotICAgIC8qIHN1cGVyc2V0IGluZGV4IGdvZXMgZnJvbSAwIHRvIHN1cGVyc2V0LT5zdHJ1Y3RzLT5sZW4tMSAqLwotICAgIGogPSBNSU4gKGksIGxlbjEgLSAxKTsKLSAgICAvKiBzdWJzZXQgaW5kZXggc3RheXMgMCB1bnRpbCBpIHJlYWNoZXMgc3VwZXJzZXQtPnN0cnVjdHMtPmxlbiwgdGhlbiBpdAotICAgICAqIGNvdW50cyB1cCBmcm9tIDEgdG8gc3Vic2V0LT5zdHJ1Y3RzLT5sZW4gLSAxICovCi0gICAgayA9IChpID4gaikgPyAoaSAtIGopIDogMDsgIC8qIE1BWCAoMCwgaSAtIGopICovCi0gICAgLyogbm93IHJ1biB0aGUgZGlhZ29uYWwgbGluZSwgZW5kIGNvbmRpdGlvbiBpcyB0aGUgbGVmdCBvciBib3R0b20KLSAgICAgKiBib3JkZXIgKi8KLSAgICB3aGlsZSAoayA8IGxlbjIpIHsKLSAgICAgIHN0cnVjdDEgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwczEsIGopOwotICAgICAgZmVhdHVyZXMxID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwczEsIGopOwotICAgICAgaWYgKCFmZWF0dXJlczEpCi0gICAgICAgIGZlYXR1cmVzMSA9IEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZOwotICAgICAgc3RydWN0MiA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzMiwgayk7Ci0gICAgICBmZWF0dXJlczIgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzMiwgayk7Ci0gICAgICBpZiAoIWZlYXR1cmVzMikKLSAgICAgICAgZmVhdHVyZXMyID0gR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk7Ci0gICAgICBpZiAoZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGZlYXR1cmVzMSwgZmVhdHVyZXMyKSAmJgotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdCAoc3RydWN0MSwgc3RydWN0MikpIHsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICB9Ci0gICAgICAvKiBtb3ZlIGRvd24gbGVmdCAqLwotICAgICAgaysrOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKGogPT0gMCkpCi0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIHNvIHdlIGRvbid0IHJvbGwgYmFjayB0byBHX01BWFVJTlQgKi8KLSAgICAgIGotLTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9jYXBzX2ludGVyc2VjdF96aWdfemFnIChHc3RDYXBzICogY2FwczEsIEdzdENhcHMgKiBjYXBzMikKLXsKLSAgZ3VpbnQ2NCBpOyAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggY2FuIGJlIHVwIHRvIDIgKiBHX01BWF9VSU5UICovCi0gIGd1aW50IGosIGssIGxlbjEsIGxlbjI7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0MTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3QyOwotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzMTsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczI7Ci0gIEdzdENhcHMgKmRlc3Q7Ci0gIEdzdFN0cnVjdHVyZSAqaXN0cnVjdDsKLQotICAvKiBjYXBzIGFyZSBleGFjdGx5IHRoZSBzYW1lIHBvaW50ZXJzLCBqdXN0IGNvcHkgb25lIGNhcHMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGNhcHMxID09IGNhcHMyKSkKLSAgICByZXR1cm4gZ3N0X2NhcHNfcmVmIChjYXBzMSk7Ci0KLSAgLyogZW1wdHkgY2FwcyBvbiBlaXRoZXIgc2lkZSwgcmV0dXJuIGVtcHR5ICovCi0gIGlmIChHX1VOTElLRUxZIChDQVBTX0lTX0VNUFRZIChjYXBzMSkgfHwgQ0FQU19JU19FTVBUWSAoY2FwczIpKSkKLSAgICByZXR1cm4gZ3N0X2NhcHNfcmVmIChHU1RfQ0FQU19OT05FKTsKLQotICAvKiBvbmUgb2YgdGhlIGNhcHMgaXMgYW55LCBqdXN0IGNvcHkgdGhlIG90aGVyIGNhcHMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKENBUFNfSVNfQU5ZIChjYXBzMSkpKQotICAgIHJldHVybiBnc3RfY2Fwc19yZWYgKGNhcHMyKTsKLQotICBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19BTlkgKGNhcHMyKSkpCi0gICAgcmV0dXJuIGdzdF9jYXBzX3JlZiAoY2FwczEpOwotCi0gIGRlc3QgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIC8qIHJ1biB6aWd6YWcgb24gdG9wIGxpbmUgdGhlbiByaWdodCBsaW5lLCB0aGlzIHByZXNlcnZlcyB0aGUgY2FwcyBvcmRlcgotICAgKiBtdWNoIGJldHRlciB0aGFuIGEgc2ltcGxlIGxvb3AuCi0gICAqCi0gICAqIFRoaXMgYWxnb3JpdGhtIHppZ3phZ3Mgb3ZlciB0aGUgY2FwcyBzdHJ1Y3R1cmVzIGFzIGRlbW9uc3RyYXRlZCBpbgotICAgKiB0aGUgZm9sbG93aW5nIG1hdHJpeDoKLSAgICoKLSAgICogICAgICAgICAgY2FwczEKLSAgICogICAgICAgKy0tLS0tLS0tLS0tLS0KLSAgICogICAgICAgfCAxICAyICA0ICA3Ci0gICAqIGNhcHMyIHwgMyAgNSAgOCAxMAotICAgKiAgICAgICB8IDYgIDkgMTEgMTIKLSAgICoKLSAgICogRmlyc3Qgd2UgaXRlcmF0ZSBvdmVyIHRoZSBjYXBzMSBzdHJ1Y3R1cmVzICh0b3AgbGluZSkgaW50ZXJzZWN0aW5nCi0gICAqIHRoZSBzdHJ1Y3R1cmVzIGRpYWdvbmFsbHkgZG93biwgdGhlbiB3ZSBpdGVyYXRlIG92ZXIgdGhlIGNhcHMyCi0gICAqIHN0cnVjdHVyZXMuCi0gICAqLwotICBsZW4xID0gR1NUX0NBUFNfTEVOIChjYXBzMSk7Ci0gIGxlbjIgPSBHU1RfQ0FQU19MRU4gKGNhcHMyKTsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjEgKyBsZW4yIC0gMTsgaSsrKSB7Ci0gICAgLyogY2FwczEgaW5kZXggZ29lcyBmcm9tIDAgdG8gR1NUX0NBUFNfTEVOIChjYXBzMSktMSAqLwotICAgIGogPSBNSU4gKGksIGxlbjEgLSAxKTsKLSAgICAvKiBjYXBzMiBpbmRleCBzdGF5cyAwIHVudGlsIGkgcmVhY2hlcyBHU1RfQ0FQU19MRU4gKGNhcHMxKSwgdGhlbiBpdCBjb3VudHMKLSAgICAgKiB1cCBmcm9tIDEgdG8gR1NUX0NBUFNfTEVOIChjYXBzMikgLSAxICovCi0gICAgayA9IChpID4gaikgPyAoaSAtIGopIDogMDsgIC8qIE1BWCAoMCwgaSAtIGopICovCi0gICAgLyogbm93IHJ1biB0aGUgZGlhZ29uYWwgbGluZSwgZW5kIGNvbmRpdGlvbiBpcyB0aGUgbGVmdCBvciBib3R0b20KLSAgICAgKiBib3JkZXIgKi8KLSAgICB3aGlsZSAoayA8IGxlbjIpIHsKLSAgICAgIHN0cnVjdDEgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwczEsIGopOwotICAgICAgZmVhdHVyZXMxID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwczEsIGopOwotICAgICAgaWYgKCFmZWF0dXJlczEpCi0gICAgICAgIGZlYXR1cmVzMSA9IEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZOwotICAgICAgc3RydWN0MiA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzMiwgayk7Ci0gICAgICBmZWF0dXJlczIgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzMiwgayk7Ci0gICAgICBpZiAoIWZlYXR1cmVzMikKLSAgICAgICAgZmVhdHVyZXMyID0gR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk7Ci0gICAgICBpZiAoZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGZlYXR1cmVzMSwgZmVhdHVyZXMyKSkgewotICAgICAgICBpc3RydWN0ID0gZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3QgKHN0cnVjdDEsIHN0cnVjdDIpOwotICAgICAgICBpZiAoaXN0cnVjdCkgewotICAgICAgICAgIGlmIChnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGZlYXR1cmVzMSkpCi0gICAgICAgICAgICBkZXN0ID0KLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbCAoZGVzdCwgaXN0cnVjdCwKLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19jb3B5X2NvbmRpdGlvbmFsIChmZWF0dXJlczIpKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZXN0ID0KLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbCAoZGVzdCwgaXN0cnVjdCwKLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19jb3B5X2NvbmRpdGlvbmFsIChmZWF0dXJlczEpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogbW92ZSBkb3duIGxlZnQgKi8KLSAgICAgIGsrKzsKLSAgICAgIGlmIChHX1VOTElLRUxZIChqID09IDApKQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBzbyB3ZSBkb24ndCByb2xsIGJhY2sgdG8gR19NQVhVSU5UICovCi0gICAgICBqLS07Ci0gICAgfQotICB9Ci0gIHJldHVybiBkZXN0OwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2ludGVyc2VjdF9maXJzdDoKLSAqIEBjYXBzMTogYSAjR3N0Q2FwcyB0byBpbnRlcnNlY3QKLSAqIEBjYXBzMjogYSAjR3N0Q2FwcyB0byBpbnRlcnNlY3QKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHRoYXQgY29udGFpbnMgYWxsIHRoZSBmb3JtYXRzIHRoYXQgYXJlIGNvbW1vbgotICogdG8gYm90aCBAY2FwczEgYW5kIEBjYXBzMi4KLSAqCi0gKiBVbmxpa2UgQGdzdF9jYXBzX2ludGVyc2VjdCwgdGhlIHJldHVybmVkIGNhcHMgd2lsbCBiZSBvcmRlcmVkIGluIGEgc2ltaWxhcgotICogZmFzaGlvbiBhcyBAY2FwczEuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RDYXBzCi0gKi8KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9jYXBzX2ludGVyc2VjdF9maXJzdCAoR3N0Q2FwcyAqIGNhcHMxLCBHc3RDYXBzICogY2FwczIpCi17Ci0gIGd1aW50IGk7Ci0gIGd1aW50IGosIGxlbjEsIGxlbjI7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0MTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3QyOwotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzMTsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczI7Ci0gIEdzdENhcHMgKmRlc3Q7Ci0gIEdzdFN0cnVjdHVyZSAqaXN0cnVjdDsKLQotICAvKiBjYXBzIGFyZSBleGFjdGx5IHRoZSBzYW1lIHBvaW50ZXJzLCBqdXN0IGNvcHkgb25lIGNhcHMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGNhcHMxID09IGNhcHMyKSkKLSAgICByZXR1cm4gZ3N0X2NhcHNfcmVmIChjYXBzMSk7Ci0KLSAgLyogZW1wdHkgY2FwcyBvbiBlaXRoZXIgc2lkZSwgcmV0dXJuIGVtcHR5ICovCi0gIGlmIChHX1VOTElLRUxZIChDQVBTX0lTX0VNUFRZIChjYXBzMSkgfHwgQ0FQU19JU19FTVBUWSAoY2FwczIpKSkKLSAgICByZXR1cm4gZ3N0X2NhcHNfcmVmIChHU1RfQ0FQU19OT05FKTsKLQotICAvKiBvbmUgb2YgdGhlIGNhcHMgaXMgYW55LCBqdXN0IGNvcHkgdGhlIG90aGVyIGNhcHMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKENBUFNfSVNfQU5ZIChjYXBzMSkpKQotICAgIHJldHVybiBnc3RfY2Fwc19yZWYgKGNhcHMyKTsKLQotICBpZiAoR19VTkxJS0VMWSAoQ0FQU19JU19BTlkgKGNhcHMyKSkpCi0gICAgcmV0dXJuIGdzdF9jYXBzX3JlZiAoY2FwczEpOwotCi0gIGRlc3QgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGxlbjEgPSBHU1RfQ0FQU19MRU4gKGNhcHMxKTsKLSAgbGVuMiA9IEdTVF9DQVBTX0xFTiAoY2FwczIpOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7Ci0gICAgc3RydWN0MSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzMSwgaSk7Ci0gICAgZmVhdHVyZXMxID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoY2FwczEsIGkpOwotICAgIGlmICghZmVhdHVyZXMxKQotICAgICAgZmVhdHVyZXMxID0gR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk7Ci0gICAgZm9yIChqID0gMDsgaiA8IGxlbjI7IGorKykgewotICAgICAgc3RydWN0MiA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzMiwgaik7Ci0gICAgICBmZWF0dXJlczIgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzMiwgaik7Ci0gICAgICBpZiAoIWZlYXR1cmVzMikKLSAgICAgICAgZmVhdHVyZXMyID0gR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk7Ci0gICAgICBpZiAoZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGZlYXR1cmVzMSwgZmVhdHVyZXMyKSkgewotICAgICAgICBpc3RydWN0ID0gZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3QgKHN0cnVjdDEsIHN0cnVjdDIpOwotICAgICAgICBpZiAoaXN0cnVjdCkgewotICAgICAgICAgIGlmIChnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGZlYXR1cmVzMSkpCi0gICAgICAgICAgICBkZXN0ID0KLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbCAoZGVzdCwgaXN0cnVjdCwKLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19jb3B5X2NvbmRpdGlvbmFsIChmZWF0dXJlczIpKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZXN0ID0KLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbCAoZGVzdCwgaXN0cnVjdCwKLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19jb3B5X2NvbmRpdGlvbmFsIChmZWF0dXJlczEpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBkZXN0OwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsOgotICogQGNhcHMxOiBhICNHc3RDYXBzIHRvIGludGVyc2VjdAotICogQGNhcHMyOiBhICNHc3RDYXBzIHRvIGludGVyc2VjdAotICogQG1vZGU6IFRoZSBpbnRlcnNlY3Rpb24gYWxnb3JpdGhtL21vZGUgdG8gdXNlCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2FwcyB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgZm9ybWF0cyB0aGF0IGFyZSBjb21tb24KLSAqIHRvIGJvdGggQGNhcHMxIGFuZCBAY2FwczIsIHRoZSBvcmRlciBpcyBkZWZpbmVkIGJ5IHRoZSAjR3N0Q2Fwc0ludGVyc2VjdE1vZGUKLSAqIHVzZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3ICNHc3RDYXBzCi0gKi8KLUdzdENhcHMgKgotZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKEdzdENhcHMgKiBjYXBzMSwgR3N0Q2FwcyAqIGNhcHMyLAotICAgIEdzdENhcHNJbnRlcnNlY3RNb2RlIG1vZGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwczEpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzMiksIE5VTEwpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUOgotICAgICAgcmV0dXJuIGdzdF9jYXBzX2ludGVyc2VjdF9maXJzdCAoY2FwczEsIGNhcHMyKTsKLSAgICBkZWZhdWx0OgotICAgICAgZ193YXJuaW5nICgiVW5rbm93biBjYXBzIGludGVyc2VjdCBtb2RlOiAlZCIsIG1vZGUpOwotICAgICAgLyogZmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIEdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHOgotICAgICAgcmV0dXJuIGdzdF9jYXBzX2ludGVyc2VjdF96aWdfemFnIChjYXBzMSwgY2FwczIpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfaW50ZXJzZWN0OgotICogQGNhcHMxOiBhICNHc3RDYXBzIHRvIGludGVyc2VjdAotICogQGNhcHMyOiBhICNHc3RDYXBzIHRvIGludGVyc2VjdAotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgdGhhdCBjb250YWlucyBhbGwgdGhlIGZvcm1hdHMgdGhhdCBhcmUgY29tbW9uCi0gKiB0byBib3RoIEBjYXBzMSBhbmQgQGNhcHMyLiBEZWZhdWx0cyB0byAlR1NUX0NBUFNfSU5URVJTRUNUX1pJR19aQUcgbW9kZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgI0dzdENhcHMKLSAqLwotR3N0Q2FwcyAqCi1nc3RfY2Fwc19pbnRlcnNlY3QgKEdzdENhcHMgKiBjYXBzMSwgR3N0Q2FwcyAqIGNhcHMyKQotewotICByZXR1cm4gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGNhcHMxLCBjYXBzMiwgR1NUX0NBUFNfSU5URVJTRUNUX1pJR19aQUcpOwotfQotCi0vKiBzdWJ0cmFjdCBvcGVyYXRpb24gKi8KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdWJ0cmFjdF9mcm9tOwotICBHU0xpc3QgKnB1dF9pbnRvOwotfSBTdWJ0cmFjdGlvbkVudHJ5OwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jYXBzX3N0cnVjdHVyZV9zdWJ0cmFjdF9maWVsZCAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIFN1YnRyYWN0aW9uRW50cnkgKmUgPSB1c2VyX2RhdGE7Ci0gIEdWYWx1ZSBzdWJ0cmFjdGlvbiA9IHsgMCwgfTsKLSAgY29uc3QgR1ZhbHVlICpvdGhlcjsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgb3RoZXIgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoZS0+c3VidHJhY3RfZnJvbSwgZmllbGRfaWQpOwotCi0gIGlmICghb3RoZXIpIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoIWdzdF92YWx1ZV9zdWJ0cmFjdCAoJnN1YnRyYWN0aW9uLCBvdGhlciwgdmFsdWUpKQotICAgIHJldHVybiBUUlVFOwotCi0gIGlmIChnc3RfdmFsdWVfY29tcGFyZSAoJnN1YnRyYWN0aW9uLCBvdGhlcikgPT0gR1NUX1ZBTFVFX0VRVUFMKSB7Ci0gICAgZ192YWx1ZV91bnNldCAoJnN1YnRyYWN0aW9uKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChlLT5zdWJ0cmFjdF9mcm9tKTsKLSAgICBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfaWQsICZzdWJ0cmFjdGlvbik7Ci0gICAgZS0+cHV0X2ludG8gPSBnX3NsaXN0X3ByZXBlbmQgKGUtPnB1dF9pbnRvLCBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NhcHNfc3RydWN0dXJlX3N1YnRyYWN0IChHU0xpc3QgKiogaW50bywgY29uc3QgR3N0U3RydWN0dXJlICogbWludWVuZCwKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdWJ0cmFoZW5kKQotewotICBTdWJ0cmFjdGlvbkVudHJ5IGU7Ci0gIGdib29sZWFuIHJldDsKLQotICBlLnN1YnRyYWN0X2Zyb20gPSBtaW51ZW5kOwotICBlLnB1dF9pbnRvID0gTlVMTDsKLSAgcmV0ID0gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoICgoR3N0U3RydWN0dXJlICopIHN1YnRyYWhlbmQsCi0gICAgICBnc3RfY2Fwc19zdHJ1Y3R1cmVfc3VidHJhY3RfZmllbGQsICZlKTsKLQotICBpZiAocmV0KSB7Ci0gICAgKmludG8gPSBlLnB1dF9pbnRvOwotICB9IGVsc2UgewotICAgIEdTTGlzdCAqd2FsazsKLQotICAgIGZvciAod2FsayA9IGUucHV0X2ludG87IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHdhbGstPmRhdGEpOwotICAgIH0KLSAgICBnX3NsaXN0X2ZyZWUgKGUucHV0X2ludG8pOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19zdWJ0cmFjdDoKLSAqIEBtaW51ZW5kOiAjR3N0Q2FwcyB0byBzdWJ0cmFjdCBmcm9tCi0gKiBAc3VidHJhaGVuZDogI0dzdENhcHMgdG8gc3VidHJhY3QKLSAqCi0gKiBTdWJ0cmFjdHMgdGhlIEBzdWJ0cmFoZW5kIGZyb20gdGhlIEBtaW51ZW5kLgotICogPG5vdGU+VGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5IGlmIG9wdGlvbmFsIHByb3BlcnRpZXMgZm9yIGNhcHMKLSAqIGFyZSBpbmNsdWRlZCBvbiBvbmUgY2FwcyBhbmQgb21pdHRlZCBvbiB0aGUgb3RoZXIuPC9ub3RlPgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHJlc3VsdGluZyBjYXBzCi0gKi8KLUdzdENhcHMgKgotZ3N0X2NhcHNfc3VidHJhY3QgKEdzdENhcHMgKiBtaW51ZW5kLCBHc3RDYXBzICogc3VidHJhaGVuZCkKLXsKLSAgZ3VpbnQgaSwgaiwgc3VibGVuOwotICBHc3RTdHJ1Y3R1cmUgKm1pbjsKLSAgR3N0U3RydWN0dXJlICpzdWI7Ci0gIEdzdENhcHNGZWF0dXJlcyAqbWluX2YsICpzdWJfZjsKLSAgR3N0Q2FwcyAqZGVzdCA9IE5VTEwsICpzcmM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1pbnVlbmQgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdWJ0cmFoZW5kICE9IE5VTEwsIE5VTEwpOwotCi0gIGlmIChDQVBTX0lTX0VNUFRZIChtaW51ZW5kKSB8fCBDQVBTX0lTX0FOWSAoc3VidHJhaGVuZCkpIHsKLSAgICByZXR1cm4gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICB9Ci0KLSAgaWYgKENBUFNfSVNfRU1QVFlfU0lNUExFIChzdWJ0cmFoZW5kKSkKLSAgICByZXR1cm4gZ3N0X2NhcHNfcmVmIChtaW51ZW5kKTsKLQotICAvKiBGSVhNRTogRG8gd2Ugd2FudCB0aGlzIGhlcmUgb3IgYWJvdmU/Ci0gICAgIFRoZSByZWFzb24gd2UgbmVlZCB0aGlzIGlzIHRoYXQgdGhlcmUgaXMgbm8gZGVmaW5pdGlvbiBhYm91dCB3aGF0Ci0gICAgIEFOWSBtZWFucyBmb3Igc3BlY2lmaWMgdHlwZXMsIHNvIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlZHVjZSBBTlkgcGFydGlhbGx5Ci0gICAgIFlvdSBjYW4gb25seSByZW1vdmUgZXZlcnl0aGluZyBvciBub3RoaW5nIGFuZCB0aGF0IGlzIGRvbmUgYWJvdmUuCi0gICAgIE5vdGU6IHRoZXJlJ3MgYSB0ZXN0IHRoYXQgY2hlY2tzIHRoaXMgYmVoYXZpb3VyLiAqLwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICghQ0FQU19JU19BTlkgKG1pbnVlbmQpLCBOVUxMKTsKLSAgc3VibGVuID0gR1NUX0NBUFNfTEVOIChzdWJ0cmFoZW5kKTsKLSAgZ19hc3NlcnQgKHN1YmxlbiA+IDApOwotCi0gIHNyYyA9IF9nc3RfY2Fwc19jb3B5IChtaW51ZW5kKTsKLSAgZm9yIChpID0gMDsgaSA8IHN1YmxlbjsgaSsrKSB7Ci0gICAgZ3VpbnQgc3JjbGVuOwotCi0gICAgc3ViID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKHN1YnRyYWhlbmQsIGkpOwotICAgIHN1Yl9mID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoc3VidHJhaGVuZCwgaSk7Ci0gICAgaWYgKCFzdWJfZikKLSAgICAgIHN1Yl9mID0gR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk7Ci0gICAgaWYgKGRlc3QpIHsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChzcmMpOwotICAgICAgc3JjID0gZGVzdDsKLSAgICB9Ci0gICAgZGVzdCA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgICBzcmNsZW4gPSBHU1RfQ0FQU19MRU4gKHNyYyk7Ci0gICAgZm9yIChqID0gMDsgaiA8IHNyY2xlbjsgaisrKSB7Ci0gICAgICBtaW4gPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoc3JjLCBqKTsKLSAgICAgIG1pbl9mID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAoc3JjLCBqKTsKLSAgICAgIGlmICghbWluX2YpCi0gICAgICAgIG1pbl9mID0gR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlk7Ci0KLSAgICAgIC8qIFNhbWUgcmVhc29uIGFzIGFib3ZlIGZvciBBTlkgY2FwcyAqLwotICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCFnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKG1pbl9mKSwgTlVMTCk7Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lX2lkIChtaW4pID09IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKHN1YikgJiYKLSAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbCAobWluX2YsIHN1Yl9mKSkgewotICAgICAgICBHU0xpc3QgKmxpc3Q7Ci0KLSAgICAgICAgaWYgKGdzdF9jYXBzX3N0cnVjdHVyZV9zdWJ0cmFjdCAoJmxpc3QsIG1pbiwgc3ViKSkgewotICAgICAgICAgIEdTTGlzdCAqd2FsazsKLQotICAgICAgICAgIGZvciAod2FsayA9IGxpc3Q7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgICAgICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoZGVzdCwKLSAgICAgICAgICAgICAgICAoR3N0U3RydWN0dXJlICopIHdhbGstPmRhdGEsCi0gICAgICAgICAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfY29weV9jb25kaXRpb25hbCAobWluX2YpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ19zbGlzdF9mcmVlIChsaXN0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoZGVzdCwgZ3N0X3N0cnVjdHVyZV9jb3B5IChtaW4pLAotICAgICAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19jb3B5X2NvbmRpdGlvbmFsIChtaW5fZikpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoZGVzdCwgZ3N0X3N0cnVjdHVyZV9jb3B5IChtaW4pLAotICAgICAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfY29weV9jb25kaXRpb25hbCAobWluX2YpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoQ0FQU19JU19FTVBUWV9TSU1QTEUgKGRlc3QpKSB7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoc3JjKTsKLSAgICAgIHJldHVybiBkZXN0OwotICAgIH0KLSAgfQotCi0gIGdzdF9jYXBzX3VucmVmIChzcmMpOwotICBkZXN0ID0gZ3N0X2NhcHNfc2ltcGxpZnkgKGRlc3QpOwotCi0gIHJldHVybiBkZXN0OwotfQotCi0vKiBub3JtYWxpemUvc2ltcGxpZnkgb3BlcmF0aW9ucyAqLwotCi10eXBlZGVmIHN0cnVjdCBfTm9ybWFsaXplRm9yZWFjaAotewotICBHc3RDYXBzICpjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczsKLX0gTm9ybWFsaXplRm9yZWFjaDsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfY2Fwc19ub3JtYWxpemVfZm9yZWFjaCAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3BvaW50ZXIgcHRyKQotewotICBOb3JtYWxpemVGb3JlYWNoICpuZiA9IChOb3JtYWxpemVGb3JlYWNoICopIHB0cjsKLSAgR1ZhbHVlIHZhbCA9IHsgMCB9OwotICBndWludCBpOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9MSVNUKSB7Ci0gICAgZ3VpbnQgbGVuID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHZhbHVlKTsKLQotICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykgewotICAgICAgY29uc3QgR1ZhbHVlICp2ID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICh2YWx1ZSwgaSk7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAobmYtPnN0cnVjdHVyZSk7Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX2lkLCB2KTsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChuZi0+Y2Fwcywgc3RydWN0dXJlLAotICAgICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2NvcHlfY29uZGl0aW9uYWwgKG5mLT5mZWF0dXJlcykpOwotICAgIH0KLQotICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmdmFsLCBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHZhbHVlLCAwKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChuZi0+c3RydWN0dXJlLCBmaWVsZF9pZCwgJnZhbCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfbm9ybWFsaXplOgotICogQGNhcHM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2FwcyB0byBub3JtYWxpemUKLSAqCi0gKiBSZXR1cm5zIGEgI0dzdENhcHMgdGhhdCByZXByZXNlbnRzIHRoZSBzYW1lIHNldCBvZiBmb3JtYXRzIGFzCi0gKiBAY2FwcywgYnV0IGNvbnRhaW5zIG5vIGxpc3RzLiAgRWFjaCBsaXN0IGlzIGV4cGFuZGVkIGludG8gc2VwYXJhdGUKLSAqIEBHc3RTdHJ1Y3R1cmVzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIEBjYXBzIGFuZCB3aWxsIGNhbGwgZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpCi0gKiBvbiBpdCBzbyB5b3UgbXVzdCBub3QgdXNlIEBjYXBzIGFmdGVyd2FyZHMgdW5sZXNzIHlvdSBrZWVwIGFuIGFkZGl0aW9uYWwKLSAqIHJlZmVyZW5jZSB0byBpdCB3aXRoIGdzdF9jYXBzX3JlZigpLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5vcm1hbGl6ZWQgI0dzdENhcHMKLSAqLwotR3N0Q2FwcyAqCi1nc3RfY2Fwc19ub3JtYWxpemUgKEdzdENhcHMgKiBjYXBzKQotewotICBOb3JtYWxpemVGb3JlYWNoIG5mOwotICBndWludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcyksIE5VTEwpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLSAgbmYuY2FwcyA9IGNhcHM7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChuZi5jYXBzKTsgaSsrKSB7Ci0gICAgbmYuc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKG5mLmNhcHMsIGkpOwotICAgIG5mLmZlYXR1cmVzID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzX3VuY2hlY2tlZCAobmYuY2FwcywgaSk7Ci0gICAgd2hpbGUgKCFnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKG5mLnN0cnVjdHVyZSwKLSAgICAgICAgICAgIGdzdF9jYXBzX25vcm1hbGl6ZV9mb3JlYWNoLCAmbmYpKTsKLSAgfQotCi0gIHJldHVybiBuZi5jYXBzOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X2NhcHNfY29tcGFyZV9zdHJ1Y3R1cmVzIChnY29uc3Rwb2ludGVyIG9uZSwgZ2NvbnN0cG9pbnRlciB0d28pCi17Ci0gIGdpbnQgcmV0OwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDEgPSAoKGNvbnN0IEdzdENhcHNBcnJheUVsZW1lbnQgKikgb25lKS0+c3RydWN0dXJlOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDIgPSAoKGNvbnN0IEdzdENhcHNBcnJheUVsZW1lbnQgKikgdHdvKS0+c3RydWN0dXJlOwotCi0gIC8qIEZJWE1FOiB0aGlzIG9yZGVycyBhbHBoYWJldGljYWxseSwgYnV0IG9yZGVyaW5nIHRoZSBxdWFya3MgbWlnaHQgYmUgZmFzdGVyCi0gICAgIFNvIHdoYXQncyB0aGUgYmVzdCB3YXk/ICovCi0gIHJldCA9IHN0cmNtcCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0MSksCi0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3QyKSk7Ci0KLSAgaWYgKHJldCkKLSAgICByZXR1cm4gcmV0OwotCi0gIHJldHVybiBnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzdHJ1Y3QyKSAtIGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHN0cnVjdDEpOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHUXVhcmsgbmFtZTsKLSAgR1ZhbHVlIHZhbHVlOwotICBHc3RTdHJ1Y3R1cmUgKmNvbXBhcmU7Ci19IFVuaW9uRmllbGQ7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NhcHNfc3RydWN0dXJlX2ZpZ3VyZV9vdXRfdW5pb24gKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBVbmlvbkZpZWxkICp1ID0gdXNlcl9kYXRhOwotICBjb25zdCBHVmFsdWUgKnZhbCA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlICh1LT5jb21wYXJlLCBmaWVsZF9pZCk7Ci0KLSAgaWYgKCF2YWwpIHsKLSAgICBpZiAodS0+bmFtZSkKLSAgICAgIGdfdmFsdWVfdW5zZXQgKCZ1LT52YWx1ZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKGdzdF92YWx1ZV9jb21wYXJlICh2YWwsIHZhbHVlKSA9PSBHU1RfVkFMVUVfRVFVQUwpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKHUtPm5hbWUpIHsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdS0+dmFsdWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHUtPm5hbWUgPSBmaWVsZF9pZDsKLSAgZ3N0X3ZhbHVlX3VuaW9uICgmdS0+dmFsdWUsIHZhbCwgdmFsdWUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jYXBzX3N0cnVjdHVyZV9zaW1wbGlmeSAoR3N0U3RydWN0dXJlICoqIHJlc3VsdCwKLSAgICBHc3RTdHJ1Y3R1cmUgKiBzaW1wbGlmeSwgR3N0U3RydWN0dXJlICogY29tcGFyZSkKLXsKLSAgR1NMaXN0ICpsaXN0OwotICBVbmlvbkZpZWxkIGZpZWxkID0geyAwLCB7MCx9LCBOVUxMIH07Ci0KLSAgLyogdHJ5IHRvIHN1YnRyYWN0IHRvIGdldCBhIHJlYWwgc3Vic2V0ICovCi0gIGlmIChnc3RfY2Fwc19zdHJ1Y3R1cmVfc3VidHJhY3QgKCZsaXN0LCBzaW1wbGlmeSwgY29tcGFyZSkpIHsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7ICAgICAgICAgLyogbm8gcmVzdWx0ICovCi0gICAgICAqcmVzdWx0ID0gTlVMTDsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0gZWxzZSBpZiAobGlzdC0+bmV4dCA9PSBOVUxMKSB7ICAgIC8qIG9uZSByZXN1bHQgKi8KLSAgICAgICpyZXN1bHQgPSBsaXN0LT5kYXRhOwotICAgICAgZ19zbGlzdF9mcmVlIChsaXN0KTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aXBsZSByZXN1bHRzICovCi0gICAgICBnX3NsaXN0X2ZvcmVhY2ggKGxpc3QsIChHRnVuYykgZ3N0X3N0cnVjdHVyZV9mcmVlLCBOVUxMKTsKLSAgICAgIGdfc2xpc3RfZnJlZSAobGlzdCk7Ci0gICAgICBsaXN0ID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICAvKiB0cnkgdG8gdW5pb24gYm90aCBzdHJ1Y3RzICovCi0gIGZpZWxkLmNvbXBhcmUgPSBjb21wYXJlOwotICBpZiAoZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzaW1wbGlmeSwKLSAgICAgICAgICBnc3RfY2Fwc19zdHJ1Y3R1cmVfZmlndXJlX291dF91bmlvbiwgJmZpZWxkKSkgewotICAgIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gICAgLyogbm93IHdlIGtub3cgYWxsIG9mIHNpbXBsaWZ5J3MgZmllbGRzIGFyZSB0aGUgc2FtZSBpbiBjb21wYXJlCi0gICAgICogYnV0IGF0IG1vc3Qgb25lIGZpZWxkOiBmaWVsZC5uYW1lICovCi0gICAgaWYgKEdfSVNfVkFMVUUgKCZmaWVsZC52YWx1ZSkpIHsKLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzaW1wbGlmeSkgPT0gZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoY29tcGFyZSkpIHsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChjb21wYXJlLCBmaWVsZC5uYW1lLCAmZmllbGQudmFsdWUpOwotICAgICAgICAqcmVzdWx0ID0gTlVMTDsKLSAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZmaWVsZC52YWx1ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzaW1wbGlmeSkgPD0KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoY29tcGFyZSkpIHsKLSAgICAgIC8qIGNvbXBhcmUgaXMganVzdCBtb3JlIHNwZWNpZmljLCB3aWxsIGJlIG9wdGltaXplZCBhd2F5IGxhdGVyICovCi0gICAgICAvKiBGSVhNRTogZG8gdGhpcyBoZXJlPyAqLwotICAgICAgR1NUX0xPRyAoImZvdW5kIGEgY2FzZSB0aGF0IHdpbGwgYmUgb3B0aW1pemVkIGxhdGVyLiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnY2hhciAqb25lID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHNpbXBsaWZ5KTsKLSAgICAgIGdjaGFyICp0d28gPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoY29tcGFyZSk7Ci0KLSAgICAgIEdTVF9FUlJPUgotICAgICAgICAgICgiY2FwcyBtaXNtYXRjaDogc3RydWN0dXJlcyAlcyBhbmQgJXMgY2xhaW0gdG8gYmUgcG9zc2libGUgdG8gdW5pZnksIGJ1dCBhcmVuJ3QiLAotICAgICAgICAgIG9uZSwgdHdvKTsKLSAgICAgIGdfZnJlZSAob25lKTsKLSAgICAgIGdfZnJlZSAodHdvKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jYXBzX3N3aXRjaF9zdHJ1Y3R1cmVzIChHc3RDYXBzICogY2FwcywgR3N0U3RydWN0dXJlICogb2xkLAotICAgIEdzdFN0cnVjdHVyZSAqIG5ldywgZ2ludCBpKQotewotICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKG9sZCwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAob2xkKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChuZXcsICZHU1RfQ0FQU19SRUZDT1VOVCAoY2FwcykpOwotICBnX2FycmF5X2luZGV4IChHU1RfQ0FQU19BUlJBWSAoY2FwcyksIEdzdENhcHNBcnJheUVsZW1lbnQsIGkpLnN0cnVjdHVyZSA9IG5ldzsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19zaW1wbGlmeToKLSAqIEBjYXBzOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdENhcHMgdG8gc2ltcGxpZnkKLSAqCi0gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gQGNhcHMgaW50byBhIHJlcHJlc2VudGF0aW9uIHRoYXQgcmVwcmVzZW50cyB0aGUKLSAqIHNhbWUgc2V0IG9mIGZvcm1hdHMsIGJ1dCBpbiBhIHNpbXBsZXIgZm9ybS4gIENvbXBvbmVudCBzdHJ1Y3R1cmVzIHRoYXQgYXJlCi0gKiBpZGVudGljYWwgYXJlIG1lcmdlZC4gIENvbXBvbmVudCBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSB2YWx1ZXMgdGhhdCBjYW4gYmUKLSAqIG1lcmdlZCBhcmUgYWxzbyBtZXJnZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgQGNhcHMgYW5kIHdpbGwgY2FsbCBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkKLSAqIG9uIGl0IGlmIG5lY2Vzc2FyeSwgc28geW91IG11c3Qgbm90IHVzZSBAY2FwcyBhZnRlcndhcmRzIHVubGVzcyB5b3Uga2VlcCBhbgotICogYWRkaXRpb25hbCByZWZlcmVuY2UgdG8gaXQgd2l0aCBnc3RfY2Fwc19yZWYoKS4KLSAqCi0gKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgb3JkZXIgb2YgQGNhcHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgc2ltcGxpZmllZCBjYXBzLgotICovCi1Hc3RDYXBzICoKLWdzdF9jYXBzX3NpbXBsaWZ5IChHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzaW1wbGlmeSwgKmNvbXBhcmUsICpyZXN1bHQgPSBOVUxMOwotICBHc3RDYXBzRmVhdHVyZXMgKnNpbXBsaWZ5X2YsICpjb21wYXJlX2Y7Ci0gIGdpbnQgaSwgaiwgc3RhcnQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgTlVMTCk7Ci0KLSAgc3RhcnQgPSBHU1RfQ0FQU19MRU4gKGNhcHMpIC0gMTsKLSAgLyogb25lIGNhcHMsIGFscmVhZHkgYXMgc2ltcGxlIGFzIGNhbiBiZSAqLwotICBpZiAoc3RhcnQgPT0gMCkKLSAgICByZXR1cm4gY2FwczsKLQotICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0KLSAgZ19hcnJheV9zb3J0IChHU1RfQ0FQU19BUlJBWSAoY2FwcyksIGdzdF9jYXBzX2NvbXBhcmVfc3RydWN0dXJlcyk7Ci0KLSAgZm9yIChpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7Ci0gICAgc2ltcGxpZnkgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgaSk7Ci0gICAgc2ltcGxpZnlfZiA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIGkpOwotICAgIGlmICghc2ltcGxpZnlfZikKLSAgICAgIHNpbXBsaWZ5X2YgPSBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTsKLSAgICBjb21wYXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZV91bmNoZWNrZWQgKGNhcHMsIHN0YXJ0KTsKLSAgICBjb21wYXJlX2YgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzLCBzdGFydCk7Ci0gICAgaWYgKCFjb21wYXJlX2YpCi0gICAgICBjb21wYXJlX2YgPSBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWTsKLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZCAoc2ltcGxpZnkpICE9Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKGNvbXBhcmUpIHx8Ci0gICAgICAgICFnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbCAoc2ltcGxpZnlfZiwgY29tcGFyZV9mKSkKLSAgICAgIHN0YXJ0ID0gaTsKLSAgICBmb3IgKGogPSBzdGFydDsgaiA+PSAwOyBqLS0pIHsKLSAgICAgIGlmIChqID09IGkpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgY29tcGFyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBqKTsKLSAgICAgIGNvbXBhcmVfZiA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIGopOwotICAgICAgaWYgKCFjb21wYXJlX2YpCi0gICAgICAgIGNvbXBhcmVfZiA9IEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZOwotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKHNpbXBsaWZ5KSAhPQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgKGNvbXBhcmUpIHx8Ci0gICAgICAgICAgIWdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChzaW1wbGlmeV9mLCBjb21wYXJlX2YpKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKGdzdF9jYXBzX3N0cnVjdHVyZV9zaW1wbGlmeSAoJnJlc3VsdCwgc2ltcGxpZnksIGNvbXBhcmUpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICBnc3RfY2Fwc19zd2l0Y2hfc3RydWN0dXJlcyAoY2Fwcywgc2ltcGxpZnksIHJlc3VsdCwgaSk7Ci0gICAgICAgICAgc2ltcGxpZnkgPSByZXN1bHQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZSAoY2FwcywgaSk7Ci0gICAgICAgICAgc3RhcnQtLTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gY2FwczsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19maXhhdGU6Ci0gKiBAY2FwczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RDYXBzIHRvIGZpeGF0ZQotICoKLSAqIE1vZGlmaWVzIHRoZSBnaXZlbiBAY2FwcyBpbnRvIGEgcmVwcmVzZW50YXRpb24gd2l0aCBvbmx5IGZpeGVkCi0gKiB2YWx1ZXMuIEZpcnN0IHRoZSBjYXBzIHdpbGwgYmUgdHJ1bmNhdGVkIGFuZCB0aGVuIHRoZSBmaXJzdCBzdHJ1Y3R1cmUgd2lsbCBiZQotICogZml4YXRlZCB3aXRoIGdzdF9zdHJ1Y3R1cmVfZml4YXRlKCkuCi0gKgotICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgQGNhcHMgYW5kIHdpbGwgY2FsbCBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKCkKLSAqIG9uIGl0IHNvIHlvdSBtdXN0IG5vdCB1c2UgQGNhcHMgYWZ0ZXJ3YXJkcyB1bmxlc3MgeW91IGtlZXAgYW4gYWRkaXRpb25hbAotICogcmVmZXJlbmNlIHRvIGl0IHdpdGggZ3N0X2NhcHNfcmVmKCkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgZml4YXRlZCBjYXBzCi0gKi8KLUdzdENhcHMgKgotZ3N0X2NhcHNfZml4YXRlIChHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RDYXBzRmVhdHVyZXMgKmY7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgTlVMTCk7Ci0KLSAgLyogZGVmYXVsdCBmaXhhdGlvbiAqLwotICBjYXBzID0gZ3N0X2NhcHNfdHJ1bmNhdGUgKGNhcHMpOwotICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgZ3N0X3N0cnVjdHVyZV9maXhhdGUgKHMpOwotCi0gIC8qIFNldCBmZWF0dXJlcyB0byBzeXNtZW0gaWYgdGhleSdyZSBzdGlsbCBBTlkgKi8KLSAgZiA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIDApOwotICBpZiAoZiAmJiBnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGYpKSB7Ci0gICAgZiA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ld19lbXB0eSAoKTsKLSAgICBnc3RfY2Fwc19zZXRfZmVhdHVyZXMgKGNhcHMsIDAsIGYpOwotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLS8qIHV0aWxpdHkgKi8KLQotLyoqCi0gKiBnc3RfY2Fwc190b19zdHJpbmc6Ci0gKiBAY2FwczogYSAjR3N0Q2FwcwotICoKLSAqIENvbnZlcnRzIEBjYXBzIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAgVGhpcyBzdHJpbmcgcmVwcmVzZW50YXRpb24KLSAqIGNhbiBiZSBjb252ZXJ0ZWQgYmFjayB0byBhICNHc3RDYXBzIGJ5IGdzdF9jYXBzX2Zyb21fc3RyaW5nKCkuCi0gKgotICogRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpdHMgZWFzaWVyIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0gKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgotICogR1NUX0xPRyAoImNhcHMgYXJlICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLSAqIF18Ci0gKiBUaGlzIHByaW50cyB0aGUgY2FwcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtLgotICoKLSAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHNlcmlhbGl6YXRpb24gd2lsbCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cwotICogd2hlbiB0aGVyZSBhcmUgbmVzdGVkICNHc3RDYXBzIC8gI0dzdFN0cnVjdHVyZSBkZWVwZXIgdGhhbiBvbmUgbGV2ZWwuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgcmVwcmVzZW50aW5nIEBjYXBzLgotICovCi1nY2hhciAqCi1nc3RfY2Fwc190b19zdHJpbmcgKGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBndWludCBpLCBzbGVuLCBjbGVuOwotICBHU3RyaW5nICpzOwotCi0gIC8qIE5PVEU6ICBUaGlzIGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IGNhbGxlZCBieSB0aGUgZGVidWcgc3lzdGVtLAotICAgKiBzbyBhbnkgY2FsbHMgdG8gZ3N0X2xvZygpIChhbmQgR1NUX0RFQlVHKCksIEdTVF9MT0coKSwgZXRjLikKLSAgICogc2hvdWxkIGJlIGNhcmVmdWwgdG8gYXZvaWQgcmVjdXJzaW9uLiAgVGhpcyBpbmNsdWRlcyBhbnkgZnVuY3Rpb25zCi0gICAqIGNhbGxlZCBieSBnc3RfY2Fwc190b19zdHJpbmcuICBJbiBwYXJ0aWN1bGFyLCBjYWxscyBzaG91bGQKLSAgICogbm90IHVzZSB0aGUgR1NUX1BUUl9GT1JNQVQgZXh0ZW5zaW9uLiAgKi8KLQotICBpZiAoY2FwcyA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwICgiTlVMTCIpOwotICB9Ci0gIGlmIChDQVBTX0lTX0FOWSAoY2FwcykpIHsKLSAgICByZXR1cm4gZ19zdHJkdXAgKCJBTlkiKTsKLSAgfQotICBpZiAoQ0FQU19JU19FTVBUWV9TSU1QTEUgKGNhcHMpKSB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwICgiRU1QVFkiKTsKLSAgfQotCi0gIC8qIGVzdGltYXRlIGEgcm91Z2ggc3RyaW5nIGxlbmd0aCB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWFsbG9jcyBpbiBHU3RyaW5nICovCi0gIHNsZW4gPSAwOwotICBjbGVuID0gR1NUX0NBUFNfTEVOIChjYXBzKTsKLSAgZm9yIChpID0gMDsgaSA8IGNsZW47IGkrKykgewotICAgIEdzdENhcHNGZWF0dXJlcyAqZjsKLQotICAgIHNsZW4gKz0KLSAgICAgICAgU1RSVUNUVVJFX0VTVElNQVRFRF9TVFJJTkdfTEVOIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZAotICAgICAgICAoY2FwcywgaSkpOwotICAgIGYgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICBpZiAoZikKLSAgICAgIHNsZW4gKz0gRkVBVFVSRVNfRVNUSU1BVEVEX1NUUklOR19MRU4gKGYpOwotICB9Ci0KLSAgcyA9IGdfc3RyaW5nX3NpemVkX25ldyAoc2xlbik7Ci0gIGZvciAoaSA9IDA7IGkgPCBjbGVuOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzOwotCi0gICAgaWYgKGkgPiAwKSB7Ci0gICAgICAvKiAnOycgaXMgbm93IGFkZGVkIGJ5IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nICovCi0gICAgICBnX3N0cmluZ19hcHBlbmRfYyAocywgJyAnKTsKLSAgICB9Ci0KLSAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgaSk7Ci0gICAgZmVhdHVyZXMgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzLCBpKTsKLQotICAgIGdfc3RyaW5nX2FwcGVuZCAocywgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKSk7Ci0gICAgaWYgKGZlYXR1cmVzICYmIChnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGZlYXR1cmVzKQotICAgICAgICAgICAgfHwgIWdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChmZWF0dXJlcywKLSAgICAgICAgICAgICAgICBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWSkpKSB7Ci0gICAgICBnX3N0cmluZ19hcHBlbmRfYyAocywgJygnKTsKLSAgICAgIHByaXZfZ3N0X2NhcHNfZmVhdHVyZXNfYXBwZW5kX3RvX2dzdHJpbmcgKGZlYXR1cmVzLCBzKTsKLSAgICAgIGdfc3RyaW5nX2FwcGVuZF9jIChzLCAnKScpOwotICAgIH0KLSAgICBwcml2X2dzdF9zdHJ1Y3R1cmVfYXBwZW5kX3RvX2dzdHJpbmcgKHN0cnVjdHVyZSwgcyk7Ci0gIH0KLSAgaWYgKHMtPmxlbiAmJiBzLT5zdHJbcy0+bGVuIC0gMV0gPT0gJzsnKSB7Ci0gICAgLyogcmVtb3ZlIGxhdGVzdCAnOycgKi8KLSAgICBzLT5zdHJbLS1zLT5sZW5dID0gJ1wwJzsKLSAgfQotICByZXR1cm4gZ19zdHJpbmdfZnJlZSAocywgRkFMU0UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jYXBzX2Zyb21fc3RyaW5nX2lucGxhY2UgKEdzdENhcHMgKiBjYXBzLCBjb25zdCBnY2hhciAqIHN0cmluZykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdjaGFyICpzLCAqY29weSwgKmVuZCwgKm5leHQsIHNhdmU7Ci0KLSAgaWYgKHN0cmNtcCAoIkFOWSIsIHN0cmluZykgPT0gMCkgewotICAgIEdTVF9DQVBTX0ZMQUdTIChjYXBzKSA9IEdTVF9DQVBTX0ZMQUdfQU5ZOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgaWYgKHN0cmNtcCAoIkVNUFRZIiwgc3RyaW5nKSA9PSAwIHx8IHN0cmNtcCAoIk5PTkUiLCBzdHJpbmcpID09IDApIHsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGNvcHkgPSBzID0gZ19zdHJkdXAgKHN0cmluZyk7Ci0gIGRvIHsKLSAgICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzID0gTlVMTDsKLQotICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKLSAgICAgIHMrKzsKLSAgICBpZiAoKnMgPT0gJ1wwJykgewotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFwcml2X2dzdF9zdHJ1Y3R1cmVfcGFyc2VfbmFtZSAocywgJnMsICZlbmQsICZuZXh0KSkgewotICAgICAgZ19mcmVlIChjb3B5KTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzYXZlID0gKmVuZDsKLSAgICAqZW5kID0gJ1wwJzsKLSAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAocyk7Ci0gICAgKmVuZCA9IHNhdmU7Ci0KLSAgICBpZiAoc3RydWN0dXJlID09IE5VTEwpIHsKLSAgICAgIGdfZnJlZSAoY29weSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgcyA9IG5leHQ7Ci0KLSAgICBpZiAoKnMgPT0gJ1wwJykgewotICAgICAgZ290byBhcHBlbmQ7Ci0gICAgfQotCi0gICAgaWYgKCpzID09ICcoJykgewotICAgICAgcysrOwotICAgICAgZW5kID0gczsKLQotICAgICAgd2hpbGUgKFRSVUUpIHsKLSAgICAgICAgaWYgKCplbmQgPT0gJ1wwJykgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKCplbmQgPT0gJyknKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZW5kKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgc2F2ZSA9ICplbmQ7Ci0gICAgICAqZW5kID0gJ1wwJzsKLSAgICAgIGZlYXR1cmVzID0gZ3N0X2NhcHNfZmVhdHVyZXNfZnJvbV9zdHJpbmcgKHMpOwotICAgICAgaWYgKCFmZWF0dXJlcykgewotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7Ci0gICAgICAgIGdfZnJlZSAoY29weSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICAgICplbmQgPSBzYXZlOwotICAgICAgcyA9IGVuZDsKLSAgICAgIGlmIChzYXZlID09ICcpJykKLSAgICAgICAgcysrOwotICAgIH0KLQotICAgIGlmICgqcyA9PSAnXDAnKSB7Ci0gICAgICBnb3RvIGFwcGVuZDsKLSAgICB9Ci0KLSAgICBpZiAoIXByaXZfZ3N0X3N0cnVjdHVyZV9wYXJzZV9maWVsZHMgKHMsICZzLCBzdHJ1Y3R1cmUpKSB7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7Ci0gICAgICBpZiAoZmVhdHVyZXMpCi0gICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUgKGZlYXR1cmVzKTsKLSAgICAgIGdfZnJlZSAoY29weSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIGFwcGVuZDoKLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2Fwcywgc3RydWN0dXJlLCBmZWF0dXJlcyk7Ci0gICAgZmVhdHVyZXMgPSBOVUxMOwotICAgIGlmICgqcyA9PSAnXDAnKQotICAgICAgYnJlYWs7Ci0gIH0gd2hpbGUgKFRSVUUpOwotCi0gIGdfZnJlZSAoY29weSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZnJvbV9zdHJpbmc6Ci0gKiBAc3RyaW5nOiBhIHN0cmluZyB0byBjb252ZXJ0IHRvICNHc3RDYXBzCi0gKgotICogQ29udmVydHMgQGNhcHMgZnJvbSBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAqCi0gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBzZXJpYWxpemF0aW9uIHdpbGwgbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMKLSAqIHdoZW4gdGhlcmUgYXJlIG5lc3RlZCAjR3N0Q2FwcyAvICNHc3RTdHJ1Y3R1cmUgZGVlcGVyIHRoYW4gb25lIGxldmVsLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBhbGxvY2F0ZWQgI0dzdENhcHMKLSAqLwotR3N0Q2FwcyAqCi1nc3RfY2Fwc19mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHJpbmcpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cmluZywgRkFMU0UpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGlmIChnc3RfY2Fwc19mcm9tX3N0cmluZ19pbnBsYWNlIChjYXBzLCBzdHJpbmcpKSB7Ci0gICAgcmV0dXJuIGNhcHM7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc190cmFuc2Zvcm1fdG9fc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHNyY192YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFIChkZXN0X3ZhbHVlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdfVkFMVUVfSE9MRFMgKHNyY192YWx1ZSwgR1NUX1RZUEVfQ0FQUykpOwotICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX0hPTERTIChkZXN0X3ZhbHVlLCBHX1RZUEVfU1RSSU5HKQotICAgICAgfHwgR19WQUxVRV9IT0xEUyAoZGVzdF92YWx1ZSwgR19UWVBFX1BPSU5URVIpKTsKLQotICBnX3ZhbHVlX3Rha2Vfc3RyaW5nIChkZXN0X3ZhbHVlLAotICAgICAgZ3N0X2NhcHNfdG9fc3RyaW5nIChnc3RfdmFsdWVfZ2V0X2NhcHMgKHNyY192YWx1ZSkpKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19mb3JlYWNoOgotICogQGNhcHM6IGEgI0dzdENhcHMKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IGEgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBmaWVsZAotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiBwcml2YXRlIGRhdGEKLSAqCi0gKiBDYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBzdHJ1Y3R1cmUgYW5kIGNhcHMgZmVhdHVyZSBpbiB0aGUKLSAqICNHc3RDYXBzLiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgbW9kaWZ5IHRoZSBmaWVsZHMuCi0gKiBBbHNvIHNlZSBnc3RfY2Fwc19tYXBfaW5fcGxhY2UoKSBhbmQgZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UoKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gcmV0dXJucyAlVFJVRSBmb3IgZWFjaCBjYWxsLAotICogJUZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfY2Fwc19mb3JlYWNoIChjb25zdCBHc3RDYXBzICogY2FwcywgR3N0Q2Fwc0ZvcmVhY2hGdW5jIGZ1bmMsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBndWludCBpLCBuOwotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcyksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZ1bmMgIT0gTlVMTCwgRkFMU0UpOwotCi0gIG4gPSBHU1RfQ0FQU19MRU4gKGNhcHMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBmZWF0dXJlcyA9IGdzdF9jYXBzX2dldF9mZWF0dXJlc191bmNoZWNrZWQgKGNhcHMsIGkpOwotICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmVfdW5jaGVja2VkIChjYXBzLCBpKTsKLQotICAgIHJldCA9IGZ1bmMgKGZlYXR1cmVzLCBzdHJ1Y3R1cmUsIHVzZXJfZGF0YSk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFyZXQpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfbWFwX2luX3BsYWNlOgotICogQGNhcHM6IGEgI0dzdENhcHMKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IGEgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBmaWVsZAotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiBwcml2YXRlIGRhdGEKLSAqCi0gKiBDYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBzdHJ1Y3R1cmUgYW5kIGNhcHMgZmVhdHVyZSBpbiB0aGUKLSAqICNHc3RDYXBzLiBJbiBjb250cmFzdCB0byBnc3RfY2Fwc19mb3JlYWNoKCksIHRoZSBmdW5jdGlvbiBtYXkgbW9kaWZ5IGJ1dCBub3QKLSAqIGRlbGV0ZSB0aGUgc3RydWN0dXJlcyBhbmQgZmVhdHVyZXMuIFRoZSBjYXBzIG11c3QgYmUgbXV0YWJsZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gcmV0dXJucyAlVFJVRSBmb3IgZWFjaCBjYWxsLAotICogJUZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfY2Fwc19tYXBfaW5fcGxhY2UgKEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzTWFwRnVuYyBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGd1aW50IGksIG47Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2NhcHNfaXNfd3JpdGFibGUgKGNhcHMpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmdW5jICE9IE5VTEwsIEZBTFNFKTsKLQotICBuID0gR1NUX0NBUFNfTEVOIChjYXBzKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgZmVhdHVyZXMgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgaSk7Ci0KLSAgICAvKiBQcm92aWRlIHN5c21lbSBmZWF0dXJlcyBpZiB0aGVyZSBhcmUgbm9uZSB5ZXQgKi8KLSAgICBpZiAoIWZlYXR1cmVzKSB7Ci0gICAgICBmZWF0dXJlcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfY29weSAoR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlkpOwotICAgICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzIChjYXBzLCBpLCBmZWF0dXJlcyk7Ci0gICAgfQotCi0gICAgcmV0ID0gZnVuYyAoZmVhdHVyZXMsIHN0cnVjdHVyZSwgdXNlcl9kYXRhKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoIXJldCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZToKLSAqIEBjYXBzOiBhICNHc3RDYXBzCi0gKiBAZnVuYzogKHNjb3BlIGNhbGwpOiBhIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZmllbGQKLSAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogcHJpdmF0ZSBkYXRhCi0gKgotICogQ2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggc3RydWN0dXJlIGFuZCBjYXBzIGZlYXR1cmUgaW4gdGhlCi0gKiAjR3N0Q2Fwcy4gSW4gY29udHJhc3QgdG8gZ3N0X2NhcHNfZm9yZWFjaCgpLCB0aGUgZnVuY3Rpb24gbWF5IG1vZGlmeSB0aGUKLSAqIHN0cnVjdHVyZSBhbmQgZmVhdHVyZXMuIEluIGNvbnRyYXN0IHRvIGdzdF9jYXBzX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlKCksCi0gKiB0aGUgc3RydWN0dXJlIGFuZCBmZWF0dXJlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjYXBzIGlmICVGQUxTRSBpcyByZXR1cm5lZAotICogZnJvbSB0aGUgZnVuY3Rpb24uCi0gKiBUaGUgY2FwcyBtdXN0IGJlIG11dGFibGUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZSAoR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHNGaWx0ZXJNYXBGdW5jIGZ1bmMsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBndWludCBpLCBuOwotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9jYXBzX2lzX3dyaXRhYmxlIChjYXBzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZ1bmMgIT0gTlVMTCk7Ci0KLSAgbiA9IEdTVF9DQVBTX0xFTiAoY2Fwcyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47KSB7Ci0gICAgZmVhdHVyZXMgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlX3VuY2hlY2tlZCAoY2FwcywgaSk7Ci0KLSAgICAvKiBQcm92aWRlIHN5c21lbSBmZWF0dXJlcyBpZiB0aGVyZSBhcmUgbm9uZSB5ZXQgKi8KLSAgICBpZiAoIWZlYXR1cmVzKSB7Ci0gICAgICBmZWF0dXJlcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfY29weSAoR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlkpOwotICAgICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzIChjYXBzLCBpLCBmZWF0dXJlcyk7Ci0gICAgfQotCi0gICAgcmV0ID0gZnVuYyAoZmVhdHVyZXMsIHN0cnVjdHVyZSwgdXNlcl9kYXRhKTsKLSAgICBpZiAoIXJldCkgewotICAgICAgR1NUX0NBUFNfQVJSQVkgKGNhcHMpID0gZ19hcnJheV9yZW1vdmVfaW5kZXggKEdTVF9DQVBTX0FSUkFZIChjYXBzKSwgaSk7Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoc3RydWN0dXJlLCBOVUxMKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKLSAgICAgIGlmIChmZWF0dXJlcykgewotICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50IChmZWF0dXJlcywgTlVMTCk7Ci0gICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUgKGZlYXR1cmVzKTsKLSAgICAgIH0KLQotICAgICAgbiA9IEdTVF9DQVBTX0xFTiAoY2Fwcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGkrKzsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RjYXBzLmggYi9nc3QvZ3N0Y2Fwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWQwMGRkLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RjYXBzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MTAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9DQVBTX0hfXwotI2RlZmluZSBfX0dTVF9DQVBTX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotI2luY2x1ZGUgPGdzdC9nc3RtaW5pb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHN0cnVjdHVyZS5oPgotI2luY2x1ZGUgPGdzdC9nc3RjYXBzZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxnc3QvZ2xpYi1jb21wYXQuaD4KLQotR19CRUdJTl9ERUNMUwotCi1HU1RfRVhQT1JUIEdUeXBlIF9nc3RfY2Fwc190eXBlOwotCi0jZGVmaW5lIEdTVF9UWVBFX0NBUFMgICAgICAgICAgICAgKF9nc3RfY2Fwc190eXBlKQotI2RlZmluZSBHU1RfSVNfQ0FQUyhvYmopICAgICAgICAgIChHU1RfSVNfTUlOSV9PQkpFQ1RfVFlQRSgob2JqKSwgR1NUX1RZUEVfQ0FQUykpCi0jZGVmaW5lIEdTVF9DQVBTX0NBU1Qob2JqKSAgICAgICAgKChHc3RDYXBzKikob2JqKSkKLSNkZWZpbmUgR1NUX0NBUFMob2JqKSAgICAgICAgICAgICAoR1NUX0NBUFNfQ0FTVChvYmopKQotCi0jZGVmaW5lIEdTVF9UWVBFX1NUQVRJQ19DQVBTICAgICAgKGdzdF9zdGF0aWNfY2Fwc19nZXRfdHlwZSgpKQotCi0vKioKLSAqIEdzdENhcHNGbGFnczoKLSAqIEBHU1RfQ0FQU19GTEFHX0FOWTogQ2FwcyBoYXMgbm8gc3BlY2lmaWMgY29udGVudCwgYnV0IGNhbiBjb250YWluCi0gKiAgICBhbnl0aGluZy4KLSAqCi0gKiBFeHRyYSBmbGFncyBmb3IgYSBjYXBzLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfQ0FQU19GTEFHX0FOWQk9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDApCi19IEdzdENhcHNGbGFnczsKLQotLyoqCi0gKiBHc3RDYXBzSW50ZXJzZWN0TW9kZToKLSAqIEBHU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRyAgOiBaaWctemFncyBvdmVyIGJvdGggY2Fwcy4KLSAqIEBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QgICAgOiBLZWVwcyB0aGUgZmlyc3QgY2FwcyBvcmRlci4KLSAqCi0gKiBNb2RlcyBvZiBjYXBzIGludGVyc2VjdGlvbgotICoKLSAqIEBHU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRyB0cmllcyB0byBwcmVzZXJ2ZSBvdmVyYWxsIG9yZGVyIG9mIGJvdGggY2FwcwotICogYnkgaXRlcmF0aW5nIG9uIHRoZSBjYXBzJyBzdHJ1Y3R1cmVzIGFzIHRoZSBmb2xsb3dpbmcgbWF0cml4IHNob3dzOgotICogfFsKLSAqICAgICAgICAgIGNhcHMxCi0gKiAgICAgICArLS0tLS0tLS0tLS0tLQotICogICAgICAgfCAxICAyICA0ICA3Ci0gKiBjYXBzMiB8IDMgIDUgIDggMTAKLSAqICAgICAgIHwgNiAgOSAxMSAxMgotICogXXwKLSAqIFVzZWQgd2hlbiB0aGVyZSBpcyBubyBleHBsaWNpdCBwcmVjZWRlbmNlIG9mIG9uZSBjYXBzIG92ZXIgdGhlIG90aGVyLiBlLmcuCi0gKiB0ZWUncyBzaW5rIHBhZCBnZXRjYXBzIGZ1bmN0aW9uLCBpdCB3aWxsIHByb2JlIGl0cyBzcmMgcGFkIHBlZXJzJyBmb3IgdGhlaXIKLSAqIGNhcHMgYW5kIGludGVyc2VjdCB0aGVtIHdpdGggdGhpcyBtb2RlLgotICoKLSAqIEBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QgaXMgdXNlZnVsIHdoZW4gYW4gZWxlbWVudCB3YW50cyB0byBwcmVzZXJ2ZQotICogYW5vdGhlciBlbGVtZW50J3MgY2FwcyBwcmlvcml0eSBvcmRlciB3aGVuIGludGVyc2VjdGluZyB3aXRoIGl0cyBvd24gY2Fwcy4KLSAqIEV4YW1wbGU6IElmIGNhcHMxIGlzIFtBLCBCLCBDXSBhbmQgY2FwczIgaXMgW0UsIEIsIEQsIEFdLCB0aGUgcmVzdWx0Ci0gKiB3b3VsZCBiZSBbQSwgQl0sIG1haW50YWluaW5nIHRoZSBmaXJzdCBjYXBzIHByaW9yaXR5IG9uIHRoZSBpbnRlcnNlY3Rpb24uCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9DQVBTX0lOVEVSU0VDVF9aSUdfWkFHICAgICAgICAgICAgPSAgMCwKLSAgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUICAgICAgICAgICAgICA9ICAxCi19IEdzdENhcHNJbnRlcnNlY3RNb2RlOwotCi0vKioKLSAqIEdTVF9DQVBTX0FOWToKLSAqCi0gKiBNZWFucyB0aGF0IHRoZSBlbGVtZW50L3BhZCBjYW4gb3V0cHV0ICdhbnl0aGluZycuIFVzZWZ1bCBmb3IgZWxlbWVudHMKLSAqIHRoYXQgb3V0cHV0IHVua25vd24gbWVkaWEsIHN1Y2ggYXMgZmlsZXNyYy4gVGhpcyBtYWNybyByZXR1cm5zIGEgc2luZ2xldG9uIGFuZAotICogc2hvdWxkIG5vdCBiZSB1bnJlZmZlZC4KLSAqLwotI2RlZmluZSBHU1RfQ0FQU19BTlkgICAgICAgICAgICAgIF9nc3RfY2Fwc19hbnkKLS8qKgotICogR1NUX0NBUFNfTk9ORToKLSAqCi0gKiBUaGUgb3Bwb3NpdGUgb2YgJUdTVF9DQVBTX0FOWTogaXQgbWVhbnMgdGhhdCB0aGUgcGFkL2VsZW1lbnQgb3V0cHV0cyBhbgotICogdW5kZWZpbmVkIG1lZGlhIHR5cGUgdGhhdCBjYW4gbm90IGJlIGRldGVjdGVkLiBUaGlzIG1hY3JvIHJldHVybnMgYSBzaW5nbGV0b24KLSAqIGFuZCBzaG91bGQgbm90IGJlIHVucmVmZmVkLgotICovCi0jZGVmaW5lIEdTVF9DQVBTX05PTkUgICAgICAgICAgICAgX2dzdF9jYXBzX25vbmUKLQotLyoqCi0gKiBHU1RfU1RBVElDX0NBUFNfQU5ZOgotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgc3RhdGljIGNhcHMgdGhhdCBtYXRjaGVzIGFueXRoaW5nLgotICogVGhpcyBjYW4gYmUgdXNlZCBpbiBwYWQgdGVtcGxhdGVzLgotICovCi0jZGVmaW5lIEdTVF9TVEFUSUNfQ0FQU19BTlkgICAgICAgR1NUX1NUQVRJQ19DQVBTKCJBTlkiKQotLyoqCi0gKiBHU1RfU1RBVElDX0NBUFNfTk9ORToKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzIHN0YXRpYyBjYXBzIHRoYXQgbWF0Y2hlcyBub3RoaW5nLgotICogVGhpcyBjYW4gYmUgdXNlZCBpbiBwYWQgdGVtcGxhdGVzLgotICovCi0jZGVmaW5lIEdTVF9TVEFUSUNfQ0FQU19OT05FICAgICAgR1NUX1NUQVRJQ19DQVBTKCJOT05FIikKLQotLyoqCi0gKiBHU1RfQ0FQU19JU19TSU1QTEU6Ci0gKiBAY2FwczogdGhlICNHc3RDYXBzIGluc3RhbmNlIHRvIGNoZWNrCi0gKgotICogQ29udmVuaWVuY2UgbWFjcm8gdGhhdCBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmVzIGluIHRoZSBnaXZlbiBjYXBzCi0gKiBpcyBleGFjdGx5IG9uZS4KLSAqLwotI2RlZmluZSBHU1RfQ0FQU19JU19TSU1QTEUoY2FwcykgKGdzdF9jYXBzX2dldF9zaXplKGNhcHMpID09IDEpCi0KLS8qKgotICogR1NUX1NUQVRJQ19DQVBTOgotICogQHN0cmluZzogdGhlIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjYXBzCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2FwcyBzdGF0aWMgY2FwcyBmcm9tIGFuIGlucHV0IHN0cmluZy4KLSAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gcGFkIHRlbXBsYXRlcy4KLSAqLwotI2RlZmluZSBHU1RfU1RBVElDX0NBUFMoc3RyaW5nKSBcCi17IFwKLSAgLyogY2FwcyAqLyBOVUxMLCBcCi0gIC8qIHN0cmluZyAqLyBzdHJpbmcsIFwKLSAgR1NUX1BBRERJTkdfSU5JVCBcCi19Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RDYXBzIEdzdENhcHM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3RhdGljQ2FwcyBHc3RTdGF0aWNDYXBzOwotCi1HU1RfRVhQT1JUIEdzdENhcHMgKiBfZ3N0X2NhcHNfYW55OwotR1NUX0VYUE9SVCBHc3RDYXBzICogX2dzdF9jYXBzX25vbmU7Ci0vKioKLSAqIEdTVF9DQVBTX0ZMQUdTOgotICogQGNhcHM6IGEgI0dzdENhcHMuCi0gKgotICogQSBmbGFncyB3b3JkIGNvbnRhaW5pbmcgI0dzdENhcHNGbGFncyBmbGFncyBzZXQgb24gdGhpcyBjYXBzLgotICovCi0jZGVmaW5lIEdTVF9DQVBTX0ZMQUdTKGNhcHMpICAgICAgICAgICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR1MoY2FwcykKLQotLyogcmVmY291bnQgKi8KLS8qKgotICogR1NUX0NBUFNfUkVGQ09VTlQ6Ci0gKiBAY2FwczogYSAjR3N0Q2FwcwotICoKLSAqIEdldCBhY2Nlc3MgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmaWVsZCBvZiB0aGUgY2FwcwotICovCi0jZGVmaW5lIEdTVF9DQVBTX1JFRkNPVU5UKGNhcHMpICAgICAgICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoY2FwcykKLS8qKgotICogR1NUX0NBUFNfUkVGQ09VTlRfVkFMVUU6Ci0gKiBAY2FwczogYSAjR3N0Q2FwcwotICoKLSAqIEdldCB0aGUgcmVmZXJlbmNlIGNvdW50IHZhbHVlIG9mIHRoZSBjYXBzLgotICovCi0jZGVmaW5lIEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFKGNhcHMpICAgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUoY2FwcykKLQotLyoqCi0gKiBHU1RfQ0FQU19GTEFHX0lTX1NFVDoKLSAqIEBjYXBzOiBhICNHc3RDYXBzLgotICogQGZsYWc6IHRoZSAjR3N0Q2Fwc0ZsYWdzIHRvIGNoZWNrLgotICoKLSAqIEdpdmVzIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBmbGFnIG9uIGEgY2Fwcy4KLSAqLwotI2RlZmluZSBHU1RfQ0FQU19GTEFHX0lTX1NFVChjYXBzLGZsYWcpICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQgKGNhcHMsIGZsYWcpCi0vKioKLSAqIEdTVF9DQVBTX0ZMQUdfU0VUOgotICogQGNhcHM6IGEgI0dzdENhcHMuCi0gKiBAZmxhZzogdGhlICNHc3RDYXBzRmxhZ3MgdG8gc2V0LgotICoKLSAqIFNldHMgYSBjYXBzIGZsYWcgb24gYSBjYXBzLgotICovCi0jZGVmaW5lIEdTVF9DQVBTX0ZMQUdfU0VUKGNhcHMsZmxhZykgICAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCAoY2FwcywgZmxhZykKLS8qKgotICogR1NUX0NBUFNfRkxBR19VTlNFVDoKLSAqIEBjYXBzOiBhICNHc3RDYXBzLgotICogQGZsYWc6IHRoZSAjR3N0Q2Fwc0ZsYWdzIHRvIGNsZWFyLgotICoKLSAqIENsZWFycyBhIGNhcHMgZmxhZy4KLSAqLwotI2RlZmluZSBHU1RfQ0FQU19GTEFHX1VOU0VUKGNhcHMsZmxhZykgICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCAoY2FwcywgZmxhZykKLQotLyogcmVmY291bnRpbmcgKi8KLS8qKgotICogZ3N0X2NhcHNfcmVmOgotICogQGNhcHM6IHRoZSAjR3N0Q2FwcyB0byByZWZlcmVuY2UKLSAqCi0gKiBBZGQgYSByZWZlcmVuY2UgdG8gYSAjR3N0Q2FwcyBvYmplY3QuCi0gKgotICogRnJvbSB0aGlzIHBvaW50IG9uLCB1bnRpbCB0aGUgY2FsbGVyIGNhbGxzIGdzdF9jYXBzX3VucmVmKCkgb3IKLSAqIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZSBjYXBzIG9iamVjdCB3aWxsIG5vdAotICogY2hhbmdlLiBUaGlzIG1lYW5zIGl0cyBzdHJ1Y3R1cmVzIHdvbid0IGNoYW5nZSwgZXRjLiBUbyB1c2UgYSAjR3N0Q2FwcwotICogb2JqZWN0LCB5b3UgbXVzdCBhbHdheXMgaGF2ZSBhIHJlZmNvdW50IG9uIGl0IC0tIGVpdGhlciB0aGUgb25lIG1hZGUKLSAqIGltcGxpY2l0bHkgYnkgZS5nLiBnc3RfY2Fwc19uZXdfc2ltcGxlKCksIG9yIHZpYSB0YWtpbmcgb25lIGV4cGxpY2l0bHkgd2l0aAotICogdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgc2FtZSAjR3N0Q2FwcyBvYmplY3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgR3N0Q2FwcyAqCi1nc3RfY2Fwc19yZWYgKEdzdENhcHMgKiBjYXBzKQotewotICByZXR1cm4gKEdzdENhcHMgKikgZ3N0X21pbmlfb2JqZWN0X3JlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGNhcHMpKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc191bnJlZjoKLSAqIEBjYXBzOiBhICNHc3RDYXBzLgotICoKLSAqIFVucmVmIGEgI0dzdENhcHMgYW5kIGFuZCBmcmVlIGFsbCBpdHMgc3RydWN0dXJlcyBhbmQgdGhlCi0gKiBzdHJ1Y3R1cmVzJyB2YWx1ZXMgd2hlbiB0aGUgcmVmY291bnQgcmVhY2hlcyAwLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9jYXBzX3VucmVmIChHc3RDYXBzICogY2FwcykKLXsKLSAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoY2FwcykpOwotfQotCi0vKiBjb3B5IGNhcHMgKi8KLS8qKgotICogZ3N0X2NhcHNfY29weToKLSAqIEBjYXBzOiBhICNHc3RDYXBzLgotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHMgYXMgYSBjb3B5IG9mIHRoZSBvbGQgQGNhcHMuIFRoZSBuZXcgY2FwcyB3aWxsIGhhdmUgYQotICogcmVmY291bnQgb2YgMSwgb3duZWQgYnkgdGhlIGNhbGxlci4gVGhlIHN0cnVjdHVyZXMgYXJlIGNvcGllZCBhcyB3ZWxsLgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBzZW1hbnRpYyBlcXVpdmFsZW50IG9mIGEgZ3N0X2NhcHNfcmVmKCkKLSAqIGZvbGxvd2VkIGJ5IGEgZ3N0X2NhcHNfbWFrZV93cml0YWJsZSgpLiBJZiB5b3Ugb25seSB3YW50IHRvIGhvbGQgb24gdG8gYQotICogcmVmZXJlbmNlIHRvIHRoZSBkYXRhLCB5b3Ugc2hvdWxkIHVzZSBnc3RfY2Fwc19yZWYoKS4KLSAqCi0gKiBXaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgY2FwcywgY2FsbCBnc3RfY2Fwc191bnJlZigpIG9uIGl0LgotICoKLSAqIFJldHVybnM6IHRoZSBuZXcgI0dzdENhcHMKLSAqLwotc3RhdGljIGlubGluZSBHc3RDYXBzICoKLWdzdF9jYXBzX2NvcHkgKGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICByZXR1cm4gR1NUX0NBUFMgKGdzdF9taW5pX29iamVjdF9jb3B5IChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoY2FwcykpKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19pc193cml0YWJsZToKLSAqIEBjYXBzOiBhICNHc3RDYXBzCi0gKgotICogVGVzdHMgaWYgeW91IGNhbiBzYWZlbHkgbW9kaWZ5IEBjYXBzLiBJdCBpcyBvbmx5IHNhZmUgdG8gbW9kaWZ5IGNhcHMgd2hlbgotICogdGhlcmUgaXMgb25seSBvbmUgb3duZXIgb2YgdGhlIGNhcHMgLSBpZSwgdGhlIG9iamVjdCBpcyB3cml0YWJsZS4KLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF9jYXBzX2lzX3dyaXRhYmxlKGNhcHMpICAgICBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChjYXBzKSkKLQotLyoqCi0gKiBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlOgotICogQGNhcHM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2FwcwotICoKLSAqIFJldHVybnMgYSB3cml0YWJsZSBjb3B5IG9mIEBjYXBzLgotICoKLSAqIElmIHRoZXJlIGlzIG9ubHkgb25lIHJlZmVyZW5jZSBjb3VudCBvbiBAY2FwcywgdGhlIGNhbGxlciBtdXN0IGJlIHRoZSBvd25lciwKLSAqIGFuZCBzbyB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBjYXBzIG9iamVjdCB1bmNoYW5nZWQuIElmIG9uIHRoZSBvdGhlcgotICogaGFuZCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJlZmVyZW5jZSBvbiB0aGUgb2JqZWN0LCBhIG5ldyBjYXBzIG9iamVjdCB3aWxsCi0gKiBiZSByZXR1cm5lZC4gVGhlIGNhbGxlcidzIHJlZmVyZW5jZSBvbiBAY2FwcyB3aWxsIGJlIHJlbW92ZWQsIGFuZCBpbnN0ZWFkIHRoZQotICogY2FsbGVyIHdpbGwgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZXR1cm5lZCBvYmplY3QuCi0gKgotICogSW4gc2hvcnQsIHRoaXMgZnVuY3Rpb24gdW5yZWZzIHRoZSBjYXBzIGluIHRoZSBhcmd1bWVudCBhbmQgcmVmcyB0aGUgY2FwcwotICogdGhhdCBpdCByZXR1cm5zLiBEb24ndCBhY2Nlc3MgdGhlIGFyZ3VtZW50IGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gU2VlCi0gKiBhbHNvOiBnc3RfY2Fwc19yZWYoKS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgd3JpdGFibGUgY2FwcyB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUKLSAqICAgICBzYW1lIGFzIEBjYXBzCi0gKi8KLSNkZWZpbmUgICAgICAgICBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlKGNhcHMpICAgR1NUX0NBUFNfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChjYXBzKSkpCi0KLS8qKgotICogZ3N0X2NhcHNfcmVwbGFjZToKLSAqIEBvbGRfY2FwczogKGlub3V0KSAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogcG9pbnRlciB0byBhIHBvaW50ZXIKLSAqICAgICB0byBhICNHc3RDYXBzIHRvIGJlIHJlcGxhY2VkLgotICogQG5ld19jYXBzOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBwb2ludGVyIHRvIGEgI0dzdENhcHMgdGhhdCB3aWxsCi0gKiAgICAgcmVwbGFjZSB0aGUgY2FwcyBwb2ludGVkIHRvIGJ5IEBvbGRfY2Fwcy4KLSAqCi0gKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0Q2FwcyB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0Q2Fwcy4gVGhlCi0gKiBtb2RpZmljYXRpb24gaXMgZG9uZSBhdG9taWNhbGx5IChzbyB0aGlzIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhyZWFkIHNhZmV0eQotICogaW4gc29tZSBjYXNlcyksIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5ICh0aGUgb2xkCi0gKiBjYXBzIGlzIHVucmVmZmVkLCB0aGUgbmV3IGlzIHJlZmZlZCkuCi0gKgotICogRWl0aGVyIEBuZXdfY2FwcyBvciB0aGUgI0dzdENhcHMgcG9pbnRlZCB0byBieSBAb2xkX2NhcHMgbWF5IGJlICVOVUxMLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBuZXdfY2FwcyB3YXMgZGlmZmVyZW50IGZyb20gQG9sZF9jYXBzCi0gKi8KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9jYXBzX3JlcGxhY2UgKEdzdENhcHMgKipvbGRfY2FwcywgR3N0Q2FwcyAqbmV3X2NhcHMpCi17Ci0gICAgcmV0dXJuIGdzdF9taW5pX29iamVjdF9yZXBsYWNlICgoR3N0TWluaU9iamVjdCAqKikgb2xkX2NhcHMsIChHc3RNaW5pT2JqZWN0ICopIG5ld19jYXBzKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc190YWtlOgotICogQG9sZF9jYXBzOiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSAjR3N0Q2FwcyB0byBiZQotICogICAgIHJlcGxhY2VkLgotICogQG5ld19jYXBzOiAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiBwb2ludGVyIHRvIGEgI0dzdENhcHMgdGhhdCB3aWxsCi0gKiAgICAgcmVwbGFjZSB0aGUgY2FwcyBwb2ludGVkIHRvIGJ5IEBvbGRfY2Fwcy4KLSAqCi0gKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0Q2FwcyB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0Q2Fwcy4gVGhpcwotICogZnVuY3Rpb24gaXMgc2ltaWxhciB0byBnc3RfY2Fwc19yZXBsYWNlKCkgZXhjZXB0IHRoYXQgaXQgdGFrZXMgb3duZXJzaGlwCi0gKiBvZiBAbmV3X2NhcHMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQG5ld19jYXBzIHdhcyBkaWZmZXJlbnQgZnJvbSBAb2xkX2NhcHMKLSAqLwotc3RhdGljIGlubGluZSBnYm9vbGVhbgotZ3N0X2NhcHNfdGFrZSAoR3N0Q2FwcyAqKm9sZF9jYXBzLCBHc3RDYXBzICpuZXdfY2FwcykKLXsKLSAgICByZXR1cm4gZ3N0X21pbmlfb2JqZWN0X3Rha2UgKChHc3RNaW5pT2JqZWN0ICoqKSBvbGRfY2FwcywgKEdzdE1pbmlPYmplY3QgKikgbmV3X2NhcHMpOwotfQotCi0vKioKLSAqIEdzdENhcHM6Ci0gKiBAbWluaV9vYmplY3Q6IHRoZSBwYXJlbnQgdHlwZQotICoKLSAqIE9iamVjdCBkZXNjcmliaW5nIG1lZGlhIHR5cGVzLgotICovCi1zdHJ1Y3QgX0dzdENhcHMgewotICBHc3RNaW5pT2JqZWN0IG1pbmlfb2JqZWN0OwotfTsKLQotLyoqCi0gKiBHc3RTdGF0aWNDYXBzOgotICogQGNhcHM6IHRoZSBjYWNoZWQgI0dzdENhcHMKLSAqIEBzdHJpbmc6IGEgc3RyaW5nIGRlc2NyaWJpbmcgYSBjYXBzCi0gKgotICogRGF0YXN0cnVjdHVyZSB0byBpbml0aWFsaXplICNHc3RDYXBzIGZyb20gYSBzdHJpbmcgZGVzY3JpcHRpb24gdXN1YWxseQotICogdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIEdTVF9TVEFUSUNfQ0FQUygpIGFuZCBnc3Rfc3RhdGljX2NhcHNfZ2V0KCkgdG8KLSAqIGluc3RhbnRpYXRlIGEgI0dzdENhcHMuCi0gKi8KLXN0cnVjdCBfR3N0U3RhdGljQ2FwcyB7Ci0gIC8qPCBwdWJsaWMgPiovCi0gIEdzdENhcHMgKmNhcHM7Ci0gIGNvbnN0IGNoYXIgKnN0cmluZzsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0vKioKLSAqIEdzdENhcHNGb3JlYWNoRnVuYzoKLSAqIEBmZWF0dXJlczogdGhlICNHc3RDYXBzRmVhdHVyZXMKLSAqIEBzdHJ1Y3R1cmU6IHRoZSAjR3N0U3RydWN0dXJlCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKLSAqCi0gKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gZ3N0X2NhcHNfZm9yZWFjaCgpLiBUaGUgZnVuY3Rpb24gbWF5Ci0gKiBub3QgbW9kaWZ5IEBmZWF0dXJlcyBvciBAc3RydWN0dXJlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBmb3JlYWNoIG9wZXJhdGlvbiBzaG91bGQgY29udGludWUsICVGQUxTRSBpZgotICogdGhlIGZvcmVhY2ggb3BlcmF0aW9uIHNob3VsZCBzdG9wIHdpdGggJUZBTFNFLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAoKkdzdENhcHNGb3JlYWNoRnVuYykgKEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlICAgICpzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICB1c2VyX2RhdGEpOwotCi0vKioKLSAqIEdzdENhcHNNYXBGdW5jOgotICogQGZlYXR1cmVzOiB0aGUgI0dzdENhcHNGZWF0dXJlcwotICogQHN0cnVjdHVyZTogdGhlICNHc3RTdHJ1Y3R1cmUKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YQotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbiBnc3RfY2Fwc19tYXBfaW5fcGxhY2UoKS4gVGhlIGZ1bmN0aW9uCi0gKiBtYXkgbW9kaWZ5IEBmZWF0dXJlcyBhbmQgQHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgbWFwIG9wZXJhdGlvbiBzaG91bGQgY29udGludWUsICVGQUxTRSBpZgotICogdGhlIG1hcCBvcGVyYXRpb24gc2hvdWxkIHN0b3Agd2l0aCAlRkFMU0UuCi0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHc3RDYXBzTWFwRnVuYykgICAgIChHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSAgICAqc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RDYXBzRmlsdGVyTWFwRnVuYzoKLSAqIEBmZWF0dXJlczogdGhlICNHc3RDYXBzRmVhdHVyZXMKLSAqIEBzdHJ1Y3R1cmU6IHRoZSAjR3N0U3RydWN0dXJlCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKLSAqCi0gKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UoKS4KLSAqIFRoZSBmdW5jdGlvbiBtYXkgbW9kaWZ5IEBmZWF0dXJlcyBhbmQgQHN0cnVjdHVyZSwgYW5kIGJvdGggd2lsbCBiZQotICogcmVtb3ZlZCBmcm9tIHRoZSBjYXBzIGlmICVGQUxTRSBpcyByZXR1cm5lZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmVhdHVyZXMgYW5kIHN0cnVjdHVyZSBzaG91bGQgYmUgcHJlc2VydmVkLAotICogJUZBTFNFIGlmIGl0IHNob3VsZCBiZSByZW1vdmVkLgotICovCi10eXBlZGVmIGdib29sZWFuICgqR3N0Q2Fwc0ZpbHRlck1hcEZ1bmMpIChHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlICAgICpzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0KLUdUeXBlICAgICAgICAgICAgIGdzdF9jYXBzX2dldF90eXBlICAgICAgICAgICAgICAgICh2b2lkKTsKLQotR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfbmV3X2VtcHR5ICAgICAgICAgICAgICAgKHZvaWQpOwotR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfbmV3X2FueSAgICAgICAgICAgICAgICAgKHZvaWQpOwotR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAgICAgICAgKGNvbnN0IGNoYXIgICAgKm1lZGlhX3R5cGUpIEdfR05VQ19XQVJOX1VOVVNFRF9SRVNVTFQ7Ci1Hc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICAgICAgICAgICAgICAoY29uc3QgY2hhciAgICAqbWVkaWFfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICpmaWVsZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEIEdfR05VQ19XQVJOX1VOVVNFRF9SRVNVTFQ7Ci1Hc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19uZXdfZnVsbCAgICAgICAgICAgICAgICAoR3N0U3RydWN0dXJlICAqc3RydWN0MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLUdzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX25ld19mdWxsX3ZhbGlzdCAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICpzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgdmFyX2FyZ3MpIEdfR05VQ19XQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLUdUeXBlICAgICAgICAgICAgIGdzdF9zdGF0aWNfY2Fwc19nZXRfdHlwZSAgICAgICAgICh2b2lkKTsKLUdzdENhcHMgKiAgICAgICAgIGdzdF9zdGF0aWNfY2Fwc19nZXQgICAgICAgICAgICAgIChHc3RTdGF0aWNDYXBzICpzdGF0aWNfY2Fwcyk7Ci12b2lkICAgICAgICAgICAgICBnc3Rfc3RhdGljX2NhcHNfY2xlYW51cCAgICAgICAgICAoR3N0U3RhdGljQ2FwcyAqc3RhdGljX2NhcHMpOwotCi0vKiBtYW5pcHVsYXRpb24gKi8KLXZvaWQgICAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZCAgICAgICAgICAgICAgICAgIChHc3RDYXBzICAgICAgICpjYXBzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgICpjYXBzMik7Ci12b2lkICAgICAgICAgICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlICAgICAgICAoR3N0Q2FwcyAgICAgICAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUgICpzdHJ1Y3R1cmUpOwotdm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV9mdWxsICAgKEdzdENhcHMgICAgICAgKmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlICAqc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXMpOwotdm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZSAgICAgICAgKEdzdENhcHMgICAgICAgKmNhcHMsIGd1aW50IGlkeCk7Ci1Hc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19tZXJnZSAgICAgICAgICAgICAgICAgICAoR3N0Q2FwcyAgICAgICAqY2FwczEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAgICAgICAqY2FwczIpIEdfR05VQ19XQVJOX1VOVVNFRF9SRVNVTFQ7Ci1Hc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgICAgICAgICAoR3N0Q2FwcyAgICAgICAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUgICpzdHJ1Y3R1cmUpIEdfR05VQ19XQVJOX1VOVVNFRF9SRVNVTFQ7Ci1Hc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmVfZnVsbCAgICAoR3N0Q2FwcyAgICAgICAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUgICpzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlcykgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLWd1aW50ICAgICAgICAgICAgIGdzdF9jYXBzX2dldF9zaXplICAgICAgICAgICAgICAgIChjb25zdCBHc3RDYXBzICpjYXBzKTsKLUdzdFN0cnVjdHVyZSAqICAgIGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgICAgICAgICAgIChjb25zdCBHc3RDYXBzICpjYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGluZGV4KTsKLUdzdFN0cnVjdHVyZSAqICAgIGdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZSAgICAgICAgIChHc3RDYXBzICAgICAgICpjYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGluZGV4KSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotdm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzICAgICAgICAgICAgKEdzdENhcHMgKmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMpOwotR3N0Q2Fwc0ZlYXR1cmVzICogZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgaW5kZXgpOwotR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfY29weV9udGggICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMsIGd1aW50IG50aCkgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLUdzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX3RydW5jYXRlICAgICAgICAgICAgICAgIChHc3RDYXBzICAgICAgICpjYXBzKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotdm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3ZhbHVlICAgICAgICAgICAgICAgKEdzdENhcHMgICAgICAgKmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAqdmFsdWUpOwotdm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAgICAgICAgICAgICAgKEdzdENhcHMgICAgICAgKmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAqZmllbGQsIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKLXZvaWQgICAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGVfdmFsaXN0ICAgICAgIChHc3RDYXBzICAgICAgICpjYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgKmZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgICAgICAgIHZhcmFyZ3MpOwotCi1nYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19mb3JlYWNoICAgICAgICAgICAgICAgICAoY29uc3QgR3N0Q2FwcyAgICAgICAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzRm9yZWFjaEZ1bmMgICBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHVzZXJfZGF0YSk7Ci0KLWdib29sZWFuICAgICAgICAgIGdzdF9jYXBzX21hcF9pbl9wbGFjZSAgICAgICAgICAgIChHc3RDYXBzICAgICAgICAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzTWFwRnVuYyAgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgdXNlcl9kYXRhKTsKLQotdm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UgKEdzdENhcHMgICAgICAgICAgICAgICpjYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHNGaWx0ZXJNYXBGdW5jICBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2VyX2RhdGEpOwotCi0vKiB0ZXN0cyAqLwotZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfYW55ICAgICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMpOwotZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfZW1wdHkgICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMpOwotZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfZml4ZWQgICAgICAgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMpOwotZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGUgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdENhcHMgKmNhcHMyKTsKLWdib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2lzX3N1YnNldAkJICAgKGNvbnN0IEdzdENhcHMgKnN1YnNldCwKLQkJCQkJCSAgICBjb25zdCBHc3RDYXBzICpzdXBlcnNldCk7Ci1nYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlICAgICAoY29uc3QgR3N0Q2FwcyAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSk7Ci1nYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19pc19zdWJzZXRfc3RydWN0dXJlX2Z1bGwgKGNvbnN0IEdzdENhcHMgKmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzKTsKLWdib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2lzX2VxdWFsCQkgICAoY29uc3QgR3N0Q2FwcyAqY2FwczEsCi0JCQkJCQkgICAgY29uc3QgR3N0Q2FwcyAqY2FwczIpOwotZ2Jvb2xlYW4gICAgICAgICAgZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQgICAgICAgICAgKGNvbnN0IEdzdENhcHMgKmNhcHMxLAotCQkJCQkJICAgIGNvbnN0IEdzdENhcHMgKmNhcHMyKTsKLWdib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgICAgICAgICAgIChjb25zdCBHc3RDYXBzICogY2FwczEsCi0JCQkJCQkgICAgY29uc3QgR3N0Q2FwcyAqIGNhcHMyKTsKLWdib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2lzX3N0cmljdGx5X2VxdWFsCSAgIChjb25zdCBHc3RDYXBzICpjYXBzMSwKLQkJCQkJCSAgICBjb25zdCBHc3RDYXBzICpjYXBzMik7Ci0KLQotLyogb3BlcmF0aW9ucyAqLwotR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0ICAgICAgICAgICAgICAgKEdzdENhcHMgKmNhcHMxLAotCQkJCQkJICAgIEdzdENhcHMgKmNhcHMyKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgICAgICAgICAgKEdzdENhcHMgKmNhcHMxLAotCQkJCQkJICAgIEdzdENhcHMgKmNhcHMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHNJbnRlcnNlY3RNb2RlIG1vZGUpIEdfR05VQ19XQVJOX1VOVVNFRF9SRVNVTFQ7Ci1Hc3RDYXBzICogICAgICAgICBnc3RfY2Fwc19zdWJ0cmFjdAkJICAgKEdzdENhcHMgKm1pbnVlbmQsCi0JCQkJCQkgICAgR3N0Q2FwcyAqc3VidHJhaGVuZCkgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLUdzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX25vcm1hbGl6ZSAgICAgICAgICAgICAgIChHc3RDYXBzICpjYXBzKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotR3N0Q2FwcyAqICAgICAgICAgZ3N0X2NhcHNfc2ltcGxpZnkgICAgICAgICAgICAgICAgKEdzdENhcHMgKmNhcHMpIEdfR05VQ19XQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLUdzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX2ZpeGF0ZSAgICAgICAgICAgICAgICAgIChHc3RDYXBzICpjYXBzKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotCi0vKiB1dGlsaXR5ICovCi1nY2hhciAqICAgICAgICAgICBnc3RfY2Fwc190b19zdHJpbmcgICAgICAgICAgICAgICAoY29uc3QgR3N0Q2FwcyAqY2FwcykgR19HTlVDX01BTExPQzsKLUdzdENhcHMgKiAgICAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nICAgICAgICAgICAgIChjb25zdCBnY2hhciAgICpzdHJpbmcpIEdfR05VQ19XQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0Q2FwcywgZ3N0X2NhcHNfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NBUFNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmMgYi9nc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTRiYWUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGNhcHNmZWF0dXJlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsODcwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCi0gKiAgIEF1dGhvcjogU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGNhcHNmZWF0dXJlcwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIHNldCBvZiBmZWF0dXJlcyBpbiBjYXBzIAotICogQHNlZV9hbHNvOiAjR3N0Q2FwcwotICoKLSAqICNHc3RDYXBzRmVhdHVyZXMgY2FuIG9wdGlvbmFsbHkgYmUgc2V0IG9uIGEgI0dzdENhcHMgdG8gYWRkIHJlcXVpcmVtZW50cwotICogZm9yIGFkZGl0aW9uYWwgZmVhdHVyZXMgZm9yIGEgc3BlY2lmaWMgI0dzdFN0cnVjdHVyZS4gQ2FwcyBzdHJ1Y3R1cmVzIHdpdGgKLSAqIHRoZSBzYW1lIG5hbWUgYnV0IHdpdGggYSBub24tZXF1YWwgc2V0IG9mIGNhcHMgZmVhdHVyZXMgYXJlIG5vdCBjb21wYXRpYmxlLgotICogSWYgYSBwYWQgc3VwcG9ydHMgbXVsdGlwbGUgc2V0cyBvZiBmZWF0dXJlcyBpdCBoYXMgdG8gYWRkIG11bHRpcGxlIGVxdWFsCi0gKiBzdHJ1Y3R1cmVzIHdpdGggZGlmZmVyZW50IGZlYXR1cmUgc2V0cyB0byB0aGUgY2Fwcy4KLSAqCi0gKiBFbXB0eSAjR3N0Q2Fwc0ZlYXR1cmVzIGFyZSBlcXVpdmFsZW50IHdpdGggdGhlICNHc3RDYXBzRmVhdHVyZXMgdGhhdCBvbmx5Ci0gKiBjb250YWluICNHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9TWVNURU1fTUVNT1JZLiBBTlkgI0dzdENhcHNGZWF0dXJlcyBhcwotICogY3JlYXRlZCBieSBnc3RfY2Fwc19mZWF0dXJlc19uZXdfYW55KCkgYXJlIGVxdWFsIHRvIGFueSBvdGhlciAjR3N0Q2Fwc0ZlYXR1cmVzCi0gKiBhbmQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGF0IGFueSAjR3N0Q2Fwc0ZlYXR1cmVzIHdvdWxkIGJlIHN1cHBvcnRlZCwgZS5nLgotICogZm9yIGVsZW1lbnRzIHRoYXQgZG9uJ3QgdG91Y2ggYnVmZmVyIG1lbW9yeS4gI0dzdENhcHMgd2l0aCBBTlkgI0dzdENhcHNGZWF0dXJlcwotICogYXJlIGNvbnNpZGVyZWQgbm9uLWZpeGVkIGFuZCBkdXJpbmcgbmVnb3RpYXRpb24gc29tZSAjR3N0Q2Fwc0ZlYXR1cmVzIGhhdmUKLSAqIHRvIGJlIHNlbGVjdGVkLgotICoKLSAqIEV4YW1wbGVzIGZvciBjYXBzIGZlYXR1cmVzIHdvdWxkIGJlIHRoZSByZXF1aXJlbWVudCBvZiBhIHNwZWNpZmljICNHc3RNZW1vcnkKLSAqIHR5cGVzIG9yIHRoZSByZXF1aXJlbWVudCBvZiBoYXZpbmcgYSBzcGVjaWZpYyAjR3N0TWV0YSBvbiB0aGUgYnVmZmVyLiBGZWF0dXJlcwotICogYXJlIGdpdmVuIGFzIGEgc3RyaW5nIG9mIHRoZSBmb3JtYXQgIm1lbW9yeTpHc3RNZW1vcnlUeXBlTmFtZSIgb3IKLSAqICJtZXRhOkdzdE1ldGFBUElOYW1lIi4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3RjYXBzZmVhdHVyZXMuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9jYXBzX2ZlYXR1cmVzX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9jYXBzX2ZlYXR1cmVzX2RlYnVnCi0KLXN0cnVjdCBfR3N0Q2Fwc0ZlYXR1cmVzCi17Ci0gIEdUeXBlIHR5cGU7Ci0gIGdpbnQgKnBhcmVudF9yZWZjb3VudDsKLSAgR0FycmF5ICphcnJheTsKLSAgZ2Jvb2xlYW4gaXNfYW55OwotfTsKLQotR1R5cGUgX2dzdF9jYXBzX2ZlYXR1cmVzX3R5cGUgPSAwOwotc3RhdGljIGdpbnQgc3RhdGljX2NhcHNfZmVhdHVyZXNfcGFyZW50X3JlZmNvdW50ID0gR19NQVhJTlQ7Ci1Hc3RDYXBzRmVhdHVyZXMgKl9nc3RfY2Fwc19mZWF0dXJlc19hbnkgPSBOVUxMOwotR3N0Q2Fwc0ZlYXR1cmVzICpfZ3N0X2NhcHNfZmVhdHVyZXNfbWVtb3J5X3N5c3RlbV9tZW1vcnkgPSBOVUxMOwotc3RhdGljIEdRdWFyayBfZ3N0X2NhcHNfZmVhdHVyZV9tZW1vcnlfc3lzdGVtX21lbW9yeSA9IDA7Ci0KLUdfREVGSU5FX0JPWEVEX1RZUEUgKEdzdENhcHNGZWF0dXJlcywgZ3N0X2NhcHNfZmVhdHVyZXMsCi0gICAgZ3N0X2NhcHNfZmVhdHVyZXNfY29weSwgZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZSk7Ci0KLSNkZWZpbmUgSVNfTVVUQUJMRShmZWF0dXJlcykgXAotICAgICghZmVhdHVyZXMtPnBhcmVudF9yZWZjb3VudCB8fCBcCi0gICAgIGdfYXRvbWljX2ludF9nZXQgKGZlYXR1cmVzLT5wYXJlbnRfcmVmY291bnQpID09IDEpCi0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc19mZWF0dXJlc190cmFuc2Zvcm1fdG9fc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSk7Ci0KLXZvaWQKLV9wcml2X2dzdF9jYXBzX2ZlYXR1cmVzX2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfY2Fwc19mZWF0dXJlc19kZWJ1ZywgImNhcHMtZmVhdHVyZXMiLCAwLAotICAgICAgIkdzdENhcHNGZWF0dXJlcyBkZWJ1ZyIpOwotCi0gIF9nc3RfY2Fwc19mZWF0dXJlc190eXBlID0gZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3R5cGUgKCk7Ci0gIF9nc3RfY2Fwc19mZWF0dXJlX21lbW9yeV9zeXN0ZW1fbWVtb3J5ID0KLSAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9TWVNURU1fTUVNT1JZKTsKLQotICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChfZ3N0X2NhcHNfZmVhdHVyZXNfdHlwZSwgR19UWVBFX1NUUklORywKLSAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX3RyYW5zZm9ybV90b19zdHJpbmcpOwotCi0gIF9nc3RfY2Fwc19mZWF0dXJlc19hbnkgPSBnc3RfY2Fwc19mZWF0dXJlc19uZXdfYW55ICgpOwotICBnc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50IChfZ3N0X2NhcHNfZmVhdHVyZXNfYW55LAotICAgICAgJnN0YXRpY19jYXBzX2ZlYXR1cmVzX3BhcmVudF9yZWZjb3VudCk7Ci0gIF9nc3RfY2Fwc19mZWF0dXJlc19tZW1vcnlfc3lzdGVtX21lbW9yeSA9Ci0gICAgICBnc3RfY2Fwc19mZWF0dXJlc19uZXdfaWQgKF9nc3RfY2Fwc19mZWF0dXJlX21lbW9yeV9zeXN0ZW1fbWVtb3J5LCAwKTsKLSAgZ3N0X2NhcHNfZmVhdHVyZXNfc2V0X3BhcmVudF9yZWZjb3VudAotICAgICAgKF9nc3RfY2Fwc19mZWF0dXJlc19tZW1vcnlfc3lzdGVtX21lbW9yeSwKLSAgICAgICZzdGF0aWNfY2Fwc19mZWF0dXJlc19wYXJlbnRfcmVmY291bnQpOwotfQotCi12b2lkCi1fcHJpdl9nc3RfY2Fwc19mZWF0dXJlc19jbGVhbnVwICh2b2lkKQotewotICBnc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50IChfZ3N0X2NhcHNfZmVhdHVyZXNfYW55LCBOVUxMKTsKLSAgZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZSAoX2dzdF9jYXBzX2ZlYXR1cmVzX2FueSk7Ci0gIF9nc3RfY2Fwc19mZWF0dXJlc19hbnkgPSBOVUxMOwotICBnc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50Ci0gICAgICAoX2dzdF9jYXBzX2ZlYXR1cmVzX21lbW9yeV9zeXN0ZW1fbWVtb3J5LCBOVUxMKTsKLSAgZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZSAoX2dzdF9jYXBzX2ZlYXR1cmVzX21lbW9yeV9zeXN0ZW1fbWVtb3J5KTsKLSAgX2dzdF9jYXBzX2ZlYXR1cmVzX21lbW9yeV9zeXN0ZW1fbWVtb3J5ID0gTlVMTDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9pc19jYXBzX2ZlYXR1cmVzIChnY29uc3Rwb2ludGVyIG9iaikKLXsKLSAgY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlcyA9IG9iajsKLQotICByZXR1cm4gKG9iaiAhPSBOVUxMICYmIGZlYXR1cmVzLT50eXBlID09IF9nc3RfY2Fwc19mZWF0dXJlc190eXBlKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY2Fwc19mZWF0dXJlX25hbWVfaXNfdmFsaWQgKGNvbnN0IGdjaGFyICogZmVhdHVyZSkKLXsKLSNpZm5kZWYgR19ESVNBQkxFX0NIRUNLUwotICB3aGlsZSAoVFJVRSkgewotICAgIGlmIChnX2FzY2lpX2lzYWxwaGEgKCpmZWF0dXJlKSkKLSAgICAgIGZlYXR1cmUrKzsKLSAgICBlbHNlIGlmICgqZmVhdHVyZSA9PSAnOicpCi0gICAgICBicmVhazsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoKmZlYXR1cmUgIT0gJzonKQotICAgIHJldHVybiBGQUxTRTsKLQotICBmZWF0dXJlKys7Ci0gIGlmICgqZmVhdHVyZSA9PSAnXDAnIHx8ICFnX2FzY2lpX2lzYWxwaGEgKCpmZWF0dXJlKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBpZiAoZ19hc2NpaV9pc2FsbnVtICgqZmVhdHVyZSkpCi0gICAgICBmZWF0dXJlKys7Ci0gICAgZWxzZSBpZiAoKmZlYXR1cmUgPT0gJ1wwJykKLSAgICAgIGJyZWFrOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotI2VuZGlmCi0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2VtcHR5OgotICoKLSAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5ICNHc3RDYXBzRmVhdHVyZXMuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcsIGVtcHR5ICNHc3RDYXBzRmVhdHVyZXMKLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdENhcHNGZWF0dXJlcyAqCi1nc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHkgKHZvaWQpCi17Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXM7Ci0KLSAgZmVhdHVyZXMgPSBnX3NsaWNlX25ldyAoR3N0Q2Fwc0ZlYXR1cmVzKTsKLSAgZmVhdHVyZXMtPnR5cGUgPSBfZ3N0X2NhcHNfZmVhdHVyZXNfdHlwZTsKLSAgZmVhdHVyZXMtPnBhcmVudF9yZWZjb3VudCA9IE5VTEw7Ci0gIGZlYXR1cmVzLT5hcnJheSA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoR1F1YXJrKSk7Ci0gIGZlYXR1cmVzLT5pc19hbnkgPSBGQUxTRTsKLQotICBHU1RfVFJBQ0UgKCJjcmVhdGVkIGNhcHMgZmVhdHVyZXMgJXAiLCBmZWF0dXJlcyk7Ci0KLSAgcmV0dXJuIGZlYXR1cmVzOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2ZlYXR1cmVzX25ld19hbnk6Ci0gKgotICogQ3JlYXRlcyBhIG5ldywgQU5ZICNHc3RDYXBzRmVhdHVyZXMuIFRoaXMgd2lsbCBiZSBlcXVhbAotICogdG8gYW55IG90aGVyICNHc3RDYXBzRmVhdHVyZXMgYnV0IGNhcHMgd2l0aCB0aGVzZSBhcmUKLSAqIHVuZml4ZWQuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcsIEFOWSAjR3N0Q2Fwc0ZlYXR1cmVzCi0gKgotICogU2luY2U6IDEuMgotICovCi1Hc3RDYXBzRmVhdHVyZXMgKgotZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2FueSAodm9pZCkKLXsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczsKLQotICBmZWF0dXJlcyA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ld19lbXB0eSAoKTsKLSAgZmVhdHVyZXMtPmlzX2FueSA9IFRSVUU7Ci0KLSAgcmV0dXJuIGZlYXR1cmVzOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2ZlYXR1cmVzX25ldzoKLSAqIEBmZWF0dXJlMTogbmFtZSBvZiBmaXJzdCBmZWF0dXJlIHRvIHNldAotICogQC4uLjogYWRkaXRpb25hbCBmZWF0dXJlcwotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdENhcHNGZWF0dXJlcyB3aXRoIHRoZSBnaXZlbiBmZWF0dXJlcy4KLSAqIFRoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgJU5VTEwuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcsIGVtcHR5ICNHc3RDYXBzRmVhdHVyZXMKLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdENhcHNGZWF0dXJlcyAqCi1nc3RfY2Fwc19mZWF0dXJlc19uZXcgKGNvbnN0IGdjaGFyICogZmVhdHVyZTEsIC4uLikKLXsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZWF0dXJlMSAhPSBOVUxMLCBOVUxMKTsKLQotICB2YV9zdGFydCAodmFyYXJncywgZmVhdHVyZTEpOwotICBmZWF0dXJlcyA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ld192YWxpc3QgKGZlYXR1cmUxLCB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLQotICByZXR1cm4gZmVhdHVyZXM7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X3ZhbGlzdDoKLSAqIEBmZWF0dXJlMTogbmFtZSBvZiBmaXJzdCBmZWF0dXJlIHRvIHNldAotICogQHZhcmFyZ3M6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzRmVhdHVyZXMgd2l0aCB0aGUgZ2l2ZW4gZmVhdHVyZXMuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcsIGVtcHR5ICNHc3RDYXBzRmVhdHVyZXMKLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdENhcHNGZWF0dXJlcyAqCi1nc3RfY2Fwc19mZWF0dXJlc19uZXdfdmFsaXN0IChjb25zdCBnY2hhciAqIGZlYXR1cmUxLCB2YV9saXN0IHZhcmFyZ3MpCi17Ci0gIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmUxICE9IE5VTEwsIE5VTEwpOwotCi0gIGZlYXR1cmVzID0gZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2VtcHR5ICgpOwotCi0gIHdoaWxlIChmZWF0dXJlMSkgewotICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoZmVhdHVyZXMsIGZlYXR1cmUxKTsKLSAgICBmZWF0dXJlMSA9IHZhX2FyZyAodmFyYXJncywgY29uc3QgZ2NoYXIgKik7Ci0gIH0KLQotICByZXR1cm4gZmVhdHVyZXM7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkOgotICogQGZlYXR1cmUxOiBuYW1lIG9mIGZpcnN0IGZlYXR1cmUgdG8gc2V0Ci0gKiBALi4uOiBhZGRpdGlvbmFsIGZlYXR1cmVzCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0Q2Fwc0ZlYXR1cmVzIHdpdGggdGhlIGdpdmVuIGZlYXR1cmVzLgotICogVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSAwLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3LCBlbXB0eSAjR3N0Q2Fwc0ZlYXR1cmVzCi0gKgotICogU2luY2U6IDEuMgotICovCi1Hc3RDYXBzRmVhdHVyZXMgKgotZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkIChHUXVhcmsgZmVhdHVyZTEsIC4uLikKLXsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZWF0dXJlMSAhPSAwLCBOVUxMKTsKLQotICB2YV9zdGFydCAodmFyYXJncywgZmVhdHVyZTEpOwotICBmZWF0dXJlcyA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ld19pZF92YWxpc3QgKGZlYXR1cmUxLCB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLQotICByZXR1cm4gZmVhdHVyZXM7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkX3ZhbGlzdDoKLSAqIEBmZWF0dXJlMTogbmFtZSBvZiBmaXJzdCBmZWF0dXJlIHRvIHNldAotICogQHZhcmFyZ3M6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RDYXBzRmVhdHVyZXMgd2l0aCB0aGUgZ2l2ZW4gZmVhdHVyZXMuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcsIGVtcHR5ICNHc3RDYXBzRmVhdHVyZXMKLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdENhcHNGZWF0dXJlcyAqCi1nc3RfY2Fwc19mZWF0dXJlc19uZXdfaWRfdmFsaXN0IChHUXVhcmsgZmVhdHVyZTEsIHZhX2xpc3QgdmFyYXJncykKLXsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmZWF0dXJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmVhdHVyZTEgIT0gMCwgTlVMTCk7Ci0KLSAgZmVhdHVyZXMgPSBnc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHkgKCk7Ci0KLSAgd2hpbGUgKGZlYXR1cmUxKSB7Ci0gICAgZ3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkIChmZWF0dXJlcywgZmVhdHVyZTEpOwotICAgIGZlYXR1cmUxID0gdmFfYXJnICh2YXJhcmdzLCBHUXVhcmspOwotICB9Ci0KLSAgcmV0dXJuIGZlYXR1cmVzOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2ZlYXR1cmVzX3NldF9wYXJlbnRfcmVmY291bnQ6Ci0gKiBAZmVhdHVyZXM6IGEgI0dzdENhcHNGZWF0dXJlcwotICogQHJlZmNvdW50OiAoaW4pOiBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCdzIHJlZmNvdW50Ci0gKgotICogU2V0cyB0aGUgcGFyZW50X3JlZmNvdW50IGZpZWxkIG9mICNHc3RDYXBzRmVhdHVyZXMuIFRoaXMgZmllbGQgaXMgdXNlZCB0bwotICogZGV0ZXJtaW5lIHdoZXRoZXIgYSBjYXBzIGZlYXR1cmVzIGlzIG11dGFibGUgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgYnkgY29kZSBpbXBsZW1lbnRpbmcgcGFyZW50IG9iamVjdHMgb2YgI0dzdENhcHNGZWF0dXJlcywgYXMgZGVzY3JpYmVkIGluCi0gKiB0aGUgTVQgUmVmY291bnRpbmcgc2VjdGlvbiBvZiB0aGUgZGVzaWduIGRvY3VtZW50cy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFyZW50IHJlZmNvdW50IGNvdWxkIGJlIHNldC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLWdib29sZWFuCi1nc3RfY2Fwc19mZWF0dXJlc19zZXRfcGFyZW50X3JlZmNvdW50IChHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcywKLSAgICBnaW50ICogcmVmY291bnQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZWF0dXJlcyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgLyogaWYgd2UgaGF2ZSBhIHBhcmVudF9yZWZjb3VudCBhbHJlYWR5LCB3ZSBjYW4gb25seSBjbGVhcgotICAgKiBpZiB3aXRoIGEgTlVMTCByZWZjb3VudCAqLwotICBpZiAoZmVhdHVyZXMtPnBhcmVudF9yZWZjb3VudCkgewotICAgIGlmIChyZWZjb3VudCAhPSBOVUxMKSB7Ci0gICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVmY291bnQgPT0gTlVMTCwgRkFMU0UpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAocmVmY291bnQgPT0gTlVMTCkgewotICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlZmNvdW50ICE9IE5VTEwsIEZBTFNFKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICBmZWF0dXJlcy0+cGFyZW50X3JlZmNvdW50ID0gcmVmY291bnQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfY29weToKLSAqIEBmZWF0dXJlczogYSAjR3N0Q2Fwc0ZlYXR1cmVzIHRvIGR1cGxpY2F0ZQotICoKLSAqIER1cGxpY2F0ZXMgYSAjR3N0Q2Fwc0ZlYXR1cmVzIGFuZCBhbGwgaXRzIHZhbHVlcy4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc19mZWF0dXJlc19mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0Q2Fwc0ZlYXR1cmVzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotR3N0Q2Fwc0ZlYXR1cmVzICoKLWdzdF9jYXBzX2ZlYXR1cmVzX2NvcHkgKGNvbnN0IEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzKQotewotICBHc3RDYXBzRmVhdHVyZXMgKmNvcHk7Ci0gIGd1aW50IGksIG47Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmVzICE9IE5VTEwsIE5VTEwpOwotCi0gIGNvcHkgPSBnc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHkgKCk7Ci0gIG4gPSBnc3RfY2Fwc19mZWF0dXJlc19nZXRfc2l6ZSAoZmVhdHVyZXMpOwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZF9pZCAoY29weSwgZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZCAoZmVhdHVyZXMsIGkpKTsKLSAgY29weS0+aXNfYW55ID0gZmVhdHVyZXMtPmlzX2FueTsKLQotICByZXR1cm4gY29weTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19mZWF0dXJlc19mcmVlOgotICogQGZlYXR1cmVzOiAoaW4pICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDYXBzRmVhdHVyZXMgdG8gZnJlZQotICoKLSAqIEZyZWVzIGEgI0dzdENhcHNGZWF0dXJlcyBhbmQgYWxsIGl0cyB2YWx1ZXMuIFRoZSBjYXBzIGZlYXR1cmVzIG11c3Qgbm90Ci0gKiBoYXZlIGEgcGFyZW50IHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfY2Fwc19mZWF0dXJlc19mcmVlIChHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmVhdHVyZXMgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZlYXR1cmVzLT5wYXJlbnRfcmVmY291bnQgPT0gTlVMTCk7Ci0KLSAgZ19hcnJheV9mcmVlIChmZWF0dXJlcy0+YXJyYXksIFRSVUUpOwotI2lmZGVmIFVTRV9QT0lTT05JTkcKLSAgbWVtc2V0IChmZWF0dXJlcywgMHhmZiwgc2l6ZW9mIChHc3RDYXBzRmVhdHVyZXMpKTsKLSNlbmRpZgotICBHU1RfVFJBQ0UgKCJmcmVlIGNhcHMgZmVhdHVyZXMgJXAiLCBmZWF0dXJlcyk7Ci0KLSAgZ19zbGljZV9mcmVlIChHc3RDYXBzRmVhdHVyZXMsIGZlYXR1cmVzKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19mZWF0dXJlc190b19zdHJpbmc6Ci0gKiBAZmVhdHVyZXM6IGEgI0dzdENhcHNGZWF0dXJlcwotICoKLSAqIENvbnZlcnRzIEBmZWF0dXJlcyB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAqCi0gKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGl0cyBlYXNpZXIgdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKLSAqIHxbPCEtLSBsYW5ndWFnZT0iQyIgLS0+Ci0gKiBHU1RfTE9HICgiZmVhdHVyZXMgaXMgJSIgR1NUX1BUUl9GT1JNQVQsIGZlYXR1cmVzKTsKLSAqIF18Ci0gKiBUaGlzIHByaW50cyB0aGUgZmVhdHVyZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgcG9pbnRlciB0byBzdHJpbmcgYWxsb2NhdGVkIGJ5IGdfbWFsbG9jKCkuCi0gKiAgICAgZ19mcmVlKCkgYWZ0ZXIgdXNhZ2UuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nY2hhciAqCi1nc3RfY2Fwc19mZWF0dXJlc190b19zdHJpbmcgKGNvbnN0IEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzKQotewotICBHU3RyaW5nICpzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZWF0dXJlcyAhPSBOVUxMLCBOVUxMKTsKLQotICBzID0gZ19zdHJpbmdfc2l6ZWRfbmV3IChGRUFUVVJFU19FU1RJTUFURURfU1RSSU5HX0xFTiAoZmVhdHVyZXMpKTsKLQotICBwcml2X2dzdF9jYXBzX2ZlYXR1cmVzX2FwcGVuZF90b19nc3RyaW5nIChmZWF0dXJlcywgcyk7Ci0KLSAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKHMsIEZBTFNFKTsKLX0KLQotdm9pZAotcHJpdl9nc3RfY2Fwc19mZWF0dXJlc19hcHBlbmRfdG9fZ3N0cmluZyAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsCi0gICAgR1N0cmluZyAqIHMpCi17Ci0gIGd1aW50IGksIG47Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZmVhdHVyZXMgIT0gTlVMTCk7Ci0KLSAgaWYgKGZlYXR1cmVzLT5hcnJheS0+bGVuID09IDAgJiYgZmVhdHVyZXMtPmlzX2FueSkgewotICAgIGdfc3RyaW5nX2FwcGVuZCAocywgIkFOWSIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIG4gPSBmZWF0dXJlcy0+YXJyYXktPmxlbjsKLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIEdRdWFyayAqcXVhcmsgPSAmZ19hcnJheV9pbmRleCAoZmVhdHVyZXMtPmFycmF5LCBHUXVhcmssIGkpOwotCi0gICAgZ19zdHJpbmdfYXBwZW5kIChzLCBnX3F1YXJrX3RvX3N0cmluZyAoKnF1YXJrKSk7Ci0gICAgaWYgKGkgKyAxIDwgbikKLSAgICAgIGdfc3RyaW5nX2FwcGVuZCAocywgIiwgIik7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19mZWF0dXJlc19mcm9tX3N0cmluZzoKLSAqIEBmZWF0dXJlczogYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSAjR3N0Q2Fwc0ZlYXR1cmVzLgotICoKLSAqIENyZWF0ZXMgYSAjR3N0Q2Fwc0ZlYXR1cmVzIGZyb20gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhIG5ldyAjR3N0Q2Fwc0ZlYXR1cmVzIG9yCi0gKiAgICAgJU5VTEwgd2hlbiB0aGUgc3RyaW5nIGNvdWxkIG5vdCBiZSBwYXJzZWQuIEZyZWUgd2l0aAotICogICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUoKSBhZnRlciB1c2UuCi0gKgotICogU2luY2U6IDEuMgotICovCi1Hc3RDYXBzRmVhdHVyZXMgKgotZ3N0X2NhcHNfZmVhdHVyZXNfZnJvbV9zdHJpbmcgKGNvbnN0IGdjaGFyICogZmVhdHVyZXMpCi17Ci0gIEdzdENhcHNGZWF0dXJlcyAqcmV0OwotICBnYm9vbGVhbiBlc2NhcGUgPSBGQUxTRTsKLSAgY29uc3QgZ2NoYXIgKmZlYXR1cmVzX29yaWcgPSBmZWF0dXJlczsKLSAgY29uc3QgZ2NoYXIgKmZlYXR1cmU7Ci0KLSAgcmV0ID0gZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2VtcHR5ICgpOwotCi0gIGlmICghZmVhdHVyZXMgfHwgKmZlYXR1cmVzID09ICdcMCcpCi0gICAgcmV0dXJuIHJldDsKLQotICBpZiAoc3RyY21wIChmZWF0dXJlcywgIkFOWSIpID09IDApIHsKLSAgICByZXQtPmlzX2FueSA9IFRSVUU7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8qIFNraXAgdHJhaWxpbmcgc3BhY2VzICovCi0gIHdoaWxlICgqZmVhdHVyZXMgPT0gJyAnKQotICAgIGZlYXR1cmVzKys7Ci0KLSAgZmVhdHVyZSA9IGZlYXR1cmVzOwotICB3aGlsZSAoVFJVRSkgewotICAgIGdjaGFyIGMgPSAqZmVhdHVyZXM7Ci0KLSAgICBpZiAoYyA9PSAnXFwnKSB7Ci0gICAgICBlc2NhcGUgPSBUUlVFOwotICAgICAgZmVhdHVyZXMrKzsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0gZWxzZSBpZiAoKCFlc2NhcGUgJiYgYyA9PSAnLCcpIHx8IGMgPT0gJ1wwJykgewotICAgICAgZ3VpbnQgbGVuID0gZmVhdHVyZXMgLSBmZWF0dXJlICsgMTsKLSAgICAgIGdjaGFyICp0bXA7Ci0gICAgICBnY2hhciAqcDsKLQotICAgICAgaWYgKGxlbiA9PSAxKSB7Ci0gICAgICAgIGdfd2FybmluZyAoIkZhaWxlZCBkZXNlcmlhbGl6ZSBjYXBzIGZlYXR1cmVzICclcyciLCBmZWF0dXJlc19vcmlnKTsKLSAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZSAocmV0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIHRtcCA9IGdfbWFsbG9jIChsZW4pOwotICAgICAgbWVtY3B5ICh0bXAsIGZlYXR1cmUsIGxlbiAtIDEpOwotICAgICAgdG1wW2xlbiAtIDFdID0gJ1wwJzsKLQotICAgICAgcCA9IHRtcCArIGxlbiAtIDE7Ci0gICAgICB3aGlsZSAoKnAgPT0gJyAnKSB7Ci0gICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgcC0tOwotICAgICAgfQotCi0gICAgICBpZiAoc3Ryc3RyICh0bXAsICIgIikgIT0gTlVMTCB8fCAqdG1wID09ICdcMCcpIHsKLSAgICAgICAgZ19mcmVlICh0bXApOwotICAgICAgICBnX3dhcm5pbmcgKCJGYWlsZWQgZGVzZXJpYWxpemUgY2FwcyBmZWF0dXJlcyAnJXMnIiwgZmVhdHVyZXNfb3JpZyk7Ci0gICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUgKHJldCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotCi0gICAgICBnc3RfY2Fwc19mZWF0dXJlc19hZGQgKHJldCwgdG1wKTsKLSAgICAgIGdfZnJlZSAodG1wKTsKLQotICAgICAgaWYgKGMgPT0gJ1wwJykKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIC8qIFNraXAgdG8gdGhlIG5leHQgdmFsdWUgKi8KLSAgICAgIGZlYXR1cmVzKys7Ci0gICAgICB3aGlsZSAoKmZlYXR1cmVzID09ICcgJykKLSAgICAgICAgZmVhdHVyZXMrKzsKLSAgICAgIGZlYXR1cmUgPSBmZWF0dXJlczsKLSAgICB9IGVsc2UgewotICAgICAgZXNjYXBlID0gRkFMU0U7Ci0gICAgICBmZWF0dXJlcysrOwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3NpemU6Ci0gKiBAZmVhdHVyZXM6IGEgI0dzdENhcHNGZWF0dXJlcy4KLSAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmVhdHVyZXMgaW4gQGZlYXR1cmVzLgotICoKLSAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgZmVhdHVyZXMgaW4gQGZlYXR1cmVzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ3VpbnQKLWdzdF9jYXBzX2ZlYXR1cmVzX2dldF9zaXplIChjb25zdCBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmVzICE9IE5VTEwsIDApOwotCi0gIHJldHVybiBmZWF0dXJlcy0+YXJyYXktPmxlbjsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoOgotICogQGZlYXR1cmVzOiBhICNHc3RDYXBzRmVhdHVyZXMuCi0gKiBAaTogaW5kZXggb2YgdGhlIGZlYXR1cmUKLSAqCi0gKiBSZXR1cm5zIHRoZSBAaS10aCBmZWF0dXJlIG9mIEBmZWF0dXJlcy4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgQGktdGggZmVhdHVyZSBvZiBAZmVhdHVyZXMuCi0gKgotICogU2luY2U6IDEuMgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoIChjb25zdCBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcywgZ3VpbnQgaSkKLXsKLSAgY29uc3QgZ2NoYXIgKmZlYXR1cmU7Ci0gIEdRdWFyayBxdWFyazsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmVhdHVyZXMgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcXVhcmsgPSBnc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoX2lkIChmZWF0dXJlcywgaSk7Ci0gIGlmICghcXVhcmspCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZmVhdHVyZSA9IGdfcXVhcmtfdG9fc3RyaW5nIChxdWFyayk7Ci0gIHJldHVybiBmZWF0dXJlOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGhfaWQ6Ci0gKiBAZmVhdHVyZXM6IGEgI0dzdENhcHNGZWF0dXJlcy4KLSAqIEBpOiBpbmRleCBvZiB0aGUgZmVhdHVyZQotICoKLSAqIFJldHVybnMgdGhlIEBpLXRoIGZlYXR1cmUgb2YgQGZlYXR1cmVzLgotICoKLSAqIFJldHVybnM6IFRoZSBAaS10aCBmZWF0dXJlIG9mIEBmZWF0dXJlcy4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdRdWFyawotZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZCAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIGd1aW50IGkpCi17Ci0gIEdRdWFyayAqcXVhcms7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmVzICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaSA8IGZlYXR1cmVzLT5hcnJheS0+bGVuLCAwKTsKLQotICBxdWFyayA9ICZnX2FycmF5X2luZGV4IChmZWF0dXJlcy0+YXJyYXksIEdRdWFyaywgaSk7Ci0KLSAgcmV0dXJuICpxdWFyazsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19mZWF0dXJlc19jb250YWluczoKLSAqIEBmZWF0dXJlczogYSAjR3N0Q2Fwc0ZlYXR1cmVzLgotICogQGZlYXR1cmU6IGEgZmVhdHVyZQotICoKLSAqIENoZWNrIGlmIEBmZWF0dXJlcyBjb250YWlucyBAZmVhdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAZmVhdHVyZXMgY29udGFpbnMgQGZlYXR1cmUuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnMgKGNvbnN0IEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzLAotICAgIGNvbnN0IGdjaGFyICogZmVhdHVyZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmVzICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHJldHVybiBnc3RfY2Fwc19mZWF0dXJlc19jb250YWluc19pZCAoZmVhdHVyZXMsCi0gICAgICBnX3F1YXJrX2Zyb21fc3RyaW5nIChmZWF0dXJlKSk7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnNfaWQ6Ci0gKiBAZmVhdHVyZXM6IGEgI0dzdENhcHNGZWF0dXJlcy4KLSAqIEBmZWF0dXJlOiBhIGZlYXR1cmUKLSAqCi0gKiBDaGVjayBpZiBAZmVhdHVyZXMgY29udGFpbnMgQGZlYXR1cmUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGZlYXR1cmVzIGNvbnRhaW5zIEBmZWF0dXJlLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ2Jvb2xlYW4KLWdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zX2lkIChjb25zdCBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcywgR1F1YXJrIGZlYXR1cmUpCi17Ci0gIGd1aW50IGksIG47Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmVzICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmUgIT0gMCwgRkFMU0UpOwotCi0gIGlmIChmZWF0dXJlcy0+aXNfYW55KQotICAgIHJldHVybiBUUlVFOwotCi0gIG4gPSBmZWF0dXJlcy0+YXJyYXktPmxlbjsKLSAgaWYgKG4gPT0gMCkKLSAgICByZXR1cm4gZmVhdHVyZSA9PSBfZ3N0X2NhcHNfZmVhdHVyZV9tZW1vcnlfc3lzdGVtX21lbW9yeTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgaWYgKGdzdF9jYXBzX2ZlYXR1cmVzX2dldF9udGhfaWQgKGZlYXR1cmVzLCBpKSA9PSBmZWF0dXJlKQotICAgICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWw6Ci0gKiBAZmVhdHVyZXMxOiBhICNHc3RDYXBzRmVhdHVyZXMuCi0gKiBAZmVhdHVyZXMyOiBhICNHc3RDYXBzRmVhdHVyZXMuCi0gKgotICogQ2hlY2sgaWYgQGZlYXR1cmVzMSBhbmQgQGZlYXR1cmVzMiBhcmUgZXF1YWwuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGZlYXR1cmVzMSBhbmQgQGZlYXR1cmVzMiBhcmUgZXF1YWwuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGNvbnN0IEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzMSwKLSAgICBjb25zdCBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlczIpCi17Ci0gIGd1aW50IGksIG47Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmVzMSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZWF0dXJlczIgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChmZWF0dXJlczEtPmlzX2FueSB8fCBmZWF0dXJlczItPmlzX2FueSkKLSAgICByZXR1cm4gVFJVRTsKLQotICAvKiBDaGVjayBmb3IgdGhlIHN5c21lbT09ZW1wdHkgY2FzZSAqLwotICBpZiAoZmVhdHVyZXMxLT5hcnJheS0+bGVuID09IDAgJiYgZmVhdHVyZXMyLT5hcnJheS0+bGVuID09IDApCi0gICAgcmV0dXJuIFRSVUU7Ci0gIGlmIChmZWF0dXJlczEtPmFycmF5LT5sZW4gPT0gMCAmJiBmZWF0dXJlczItPmFycmF5LT5sZW4gPT0gMQotICAgICAgJiYgZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnNfaWQgKGZlYXR1cmVzMiwKLSAgICAgICAgICBfZ3N0X2NhcHNfZmVhdHVyZV9tZW1vcnlfc3lzdGVtX21lbW9yeSkpCi0gICAgcmV0dXJuIFRSVUU7Ci0gIGlmIChmZWF0dXJlczItPmFycmF5LT5sZW4gPT0gMCAmJiBmZWF0dXJlczEtPmFycmF5LT5sZW4gPT0gMQotICAgICAgJiYgZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnNfaWQgKGZlYXR1cmVzMSwKLSAgICAgICAgICBfZ3N0X2NhcHNfZmVhdHVyZV9tZW1vcnlfc3lzdGVtX21lbW9yeSkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKGZlYXR1cmVzMS0+YXJyYXktPmxlbiAhPSBmZWF0dXJlczItPmFycmF5LT5sZW4pCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIG4gPSBmZWF0dXJlczEtPmFycmF5LT5sZW47Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgaWYgKCFnc3RfY2Fwc19mZWF0dXJlc19jb250YWluc19pZCAoZmVhdHVyZXMyLAotICAgICAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZCAoZmVhdHVyZXMxLCBpKSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55OgotICogQGZlYXR1cmVzOiBhICNHc3RDYXBzRmVhdHVyZXMuCi0gKgotICogQ2hlY2sgaWYgQGZlYXR1cmVzIGlzICVHU1RfQ0FQU19GRUFUVVJFU19BTlkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGZlYXR1cmVzIGlzICVHU1RfQ0FQU19GRUFUVVJFU19BTlkuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55IChjb25zdCBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmVzICE9IE5VTEwsIEZBTFNFKTsKLQotICByZXR1cm4gZmVhdHVyZXMtPmlzX2FueTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19mZWF0dXJlc19hZGQ6Ci0gKiBAZmVhdHVyZXM6IGEgI0dzdENhcHNGZWF0dXJlcy4KLSAqIEBmZWF0dXJlOiBhIGZlYXR1cmUuCi0gKgotICogQWRkcyBAZmVhdHVyZSB0byBAZmVhdHVyZXMuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfY2Fwc19mZWF0dXJlc19hZGQgKEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzLCBjb25zdCBnY2hhciAqIGZlYXR1cmUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZlYXR1cmVzICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19NVVRBQkxFIChmZWF0dXJlcykpOwotICBnX3JldHVybl9pZl9mYWlsIChmZWF0dXJlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsICghZmVhdHVyZXMtPmlzX2FueSk7Ci0KLSAgZ3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkIChmZWF0dXJlcywgZ19xdWFya19mcm9tX3N0cmluZyAoZmVhdHVyZSkpOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZF9pZDoKLSAqIEBmZWF0dXJlczogYSAjR3N0Q2Fwc0ZlYXR1cmVzLgotICogQGZlYXR1cmU6IGEgZmVhdHVyZS4KLSAqCi0gKiBBZGRzIEBmZWF0dXJlIHRvIEBmZWF0dXJlcy4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9jYXBzX2ZlYXR1cmVzX2FkZF9pZCAoR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIEdRdWFyayBmZWF0dXJlKQotewotICBnX3JldHVybl9pZl9mYWlsIChmZWF0dXJlcyAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoSVNfTVVUQUJMRSAoZmVhdHVyZXMpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmVhdHVyZSAhPSAwKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoIWZlYXR1cmVzLT5pc19hbnkpOwotCi0gIGlmICghZ3N0X2NhcHNfZmVhdHVyZV9uYW1lX2lzX3ZhbGlkIChnX3F1YXJrX3RvX3N0cmluZyAoZmVhdHVyZSkpKSB7Ci0gICAgZ193YXJuaW5nICgiSW52YWxpZCBjYXBzIGZlYXR1cmUgbmFtZTogJXMiLCBnX3F1YXJrX3RvX3N0cmluZyAoZmVhdHVyZSkpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIElmIGZlYXR1cmVzIGlzIGVtcHR5IGl0IHdpbGwgY29udGFpbiBzeXNtZW0sIGhvd2V2ZXIKLSAgICogd2Ugd2FudCB0byBhZGQgaXQgZXhwbGljaXRlbHkgaWYgaXQgaXMgdHJpZWQgdG8gYmUKLSAgICogYWRkZWQgYXMgZmlyc3QgZmVhdHVyZXMKLSAgICovCi0gIGlmIChmZWF0dXJlcy0+YXJyYXktPmxlbiA+IDAKLSAgICAgICYmIGdzdF9jYXBzX2ZlYXR1cmVzX2NvbnRhaW5zX2lkIChmZWF0dXJlcywgZmVhdHVyZSkpCi0gICAgcmV0dXJuOwotCi0gIGdfYXJyYXlfYXBwZW5kX3ZhbCAoZmVhdHVyZXMtPmFycmF5LCBmZWF0dXJlKTsKLX0KLQotLyoqCi0gKiBnc3RfY2Fwc19mZWF0dXJlc19yZW1vdmU6Ci0gKiBAZmVhdHVyZXM6IGEgI0dzdENhcHNGZWF0dXJlcy4KLSAqIEBmZWF0dXJlOiBhIGZlYXR1cmUuCi0gKgotICogUmVtb3ZlcyBAZmVhdHVyZSBmcm9tIEBmZWF0dXJlcy4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZSAoR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIGNvbnN0IGdjaGFyICogZmVhdHVyZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmVhdHVyZXMgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKGZlYXR1cmVzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZlYXR1cmUgIT0gTlVMTCk7Ci0KLSAgZ3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlX2lkIChmZWF0dXJlcywgZ19xdWFya19mcm9tX3N0cmluZyAoZmVhdHVyZSkpOwotfQotCi0vKioKLSAqIGdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZV9pZDoKLSAqIEBmZWF0dXJlczogYSAjR3N0Q2Fwc0ZlYXR1cmVzLgotICogQGZlYXR1cmU6IGEgZmVhdHVyZS4KLSAqCi0gKiBSZW1vdmVzIEBmZWF0dXJlIGZyb20gQGZlYXR1cmVzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlX2lkIChHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcywgR1F1YXJrIGZlYXR1cmUpCi17Ci0gIGd1aW50IGksIG47Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZmVhdHVyZXMgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKGZlYXR1cmVzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZlYXR1cmUgIT0gMCk7Ci0KLSAgbiA9IGZlYXR1cmVzLT5hcnJheS0+bGVuOwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgR1F1YXJrIHF1YXJrID0gZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZCAoZmVhdHVyZXMsIGkpOwotCi0gICAgaWYgKHF1YXJrID09IGZlYXR1cmUpIHsKLSAgICAgIGdfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKGZlYXR1cmVzLT5hcnJheSwgaSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc19mZWF0dXJlc190cmFuc2Zvcm1fdG9fc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3JjX3ZhbHVlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChkZXN0X3ZhbHVlICE9IE5VTEwpOwotCi0gIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0KLSAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX3RvX3N0cmluZyAoc3JjX3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmggYi9nc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWU1YzUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGNhcHNmZWF0dXJlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KLSAqICAgQXV0aG9yOiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0NBUFNfRkVBVFVSRVNfSF9fCi0jZGVmaW5lIF9fR1NUX0NBUFNfRkVBVFVSRVNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0jaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0Lmg+Ci0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHNGZWF0dXJlcyBHc3RDYXBzRmVhdHVyZXM7Ci0KLUdTVF9FWFBPUlQgR1R5cGUgX2dzdF9jYXBzX2ZlYXR1cmVzX3R5cGU7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfQ0FQU19GRUFUVVJFUyAoX2dzdF9jYXBzX2ZlYXR1cmVzX3R5cGUpCi0jZGVmaW5lIEdTVF9JU19DQVBTX0ZFQVRVUkVTKG9iamVjdCkgICAgICAgKGdzdF9pc19jYXBzX2ZlYXR1cmVzKG9iamVjdCkpCi0jZGVmaW5lIEdTVF9DQVBTX0ZFQVRVUkVTX0NBU1Qob2JqZWN0KSAgICAgKChHc3RDYXBzRmVhdHVyZXMgKikob2JqZWN0KSkKLSNkZWZpbmUgR1NUX0NBUFNfRkVBVFVSRVMob2JqZWN0KSAgICAgICAgICAoR1NUX0NBUFNfRkVBVFVSRVNfQ0FTVChvYmplY3QpKQotCi0jZGVmaW5lIEdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX1NZU1RFTV9NRU1PUlkgIm1lbW9yeTpTeXN0ZW1NZW1vcnkiCi0KLUdTVF9FWFBPUlQgR3N0Q2Fwc0ZlYXR1cmVzICpfZ3N0X2NhcHNfZmVhdHVyZXNfYW55OwotI2RlZmluZSBHU1RfQ0FQU19GRUFUVVJFU19BTlkgKF9nc3RfY2Fwc19mZWF0dXJlc19hbnkpCi0KLUdTVF9FWFBPUlQgR3N0Q2Fwc0ZlYXR1cmVzICpfZ3N0X2NhcHNfZmVhdHVyZXNfbWVtb3J5X3N5c3RlbV9tZW1vcnk7Ci0jZGVmaW5lIEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZIChfZ3N0X2NhcHNfZmVhdHVyZXNfbWVtb3J5X3N5c3RlbV9tZW1vcnkpCi0KLUdUeXBlICAgICAgICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2dldF90eXBlICh2b2lkKTsKLWdib29sZWFuICAgICAgICAgIGdzdF9pc19jYXBzX2ZlYXR1cmVzIChnY29uc3Rwb2ludGVyIG9iaik7Ci0KLUdzdENhcHNGZWF0dXJlcyAqIGdzdF9jYXBzX2ZlYXR1cmVzX25ld19lbXB0eSAodm9pZCk7Ci1Hc3RDYXBzRmVhdHVyZXMgKiBnc3RfY2Fwc19mZWF0dXJlc19uZXdfYW55ICh2b2lkKTsKLUdzdENhcHNGZWF0dXJlcyAqIGdzdF9jYXBzX2ZlYXR1cmVzX25ldyAoY29uc3QgZ2NoYXIgKmZlYXR1cmUxLCAuLi4pOwotR3N0Q2Fwc0ZlYXR1cmVzICogZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X3ZhbGlzdCAoY29uc3QgZ2NoYXIgKmZlYXR1cmUxLCB2YV9saXN0IHZhcmFyZ3MpOwotR3N0Q2Fwc0ZlYXR1cmVzICogZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2lkIChHUXVhcmsgZmVhdHVyZTEsIC4uLik7Ci1Hc3RDYXBzRmVhdHVyZXMgKiBnc3RfY2Fwc19mZWF0dXJlc19uZXdfaWRfdmFsaXN0IChHUXVhcmsgZmVhdHVyZTEsIHZhX2xpc3QgdmFyYXJncyk7Ci0KLWdib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX3NldF9wYXJlbnRfcmVmY291bnQgIChHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzLCBnaW50ICogcmVmY291bnQpOwotCi1Hc3RDYXBzRmVhdHVyZXMgKiBnc3RfY2Fwc19mZWF0dXJlc19jb3B5IChjb25zdCBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcyk7Ci12b2lkICAgICAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19mcmVlIChHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcyk7Ci0KLWdjaGFyICogICAgICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX3RvX3N0cmluZyAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMpOwotR3N0Q2Fwc0ZlYXR1cmVzICogZ3N0X2NhcHNfZmVhdHVyZXNfZnJvbV9zdHJpbmcgKGNvbnN0IGdjaGFyICogZmVhdHVyZXMpOwotCi1ndWludCAgICAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19nZXRfc2l6ZSAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMpOwotY29uc3QgZ2NoYXIgKiAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aCAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIGd1aW50IGkpOwotR1F1YXJrICAgICAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZCAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIGd1aW50IGkpOwotCi1nYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19jb250YWlucyAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIGNvbnN0IGdjaGFyICogZmVhdHVyZSk7Ci1nYm9vbGVhbiAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19jb250YWluc19pZCAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIEdRdWFyayBmZWF0dXJlKTsKLWdib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChjb25zdCBHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlczEsIGNvbnN0IEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzMik7Ci0KLWdib29sZWFuICAgICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2FueSAoY29uc3QgR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMpOwotCi12b2lkICAgICAgICAgICAgICBnc3RfY2Fwc19mZWF0dXJlc19hZGQgKEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzLCBjb25zdCBnY2hhciAqIGZlYXR1cmUpOwotdm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkICggR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIEdRdWFyayBmZWF0dXJlKTsKLQotdm9pZCAgICAgICAgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlIChHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcywgY29uc3QgZ2NoYXIgKiBmZWF0dXJlKTsKLXZvaWQgICAgICAgICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZV9pZCAoR3N0Q2Fwc0ZlYXR1cmVzICogZmVhdHVyZXMsIEdRdWFyayBmZWF0dXJlKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RDYXBzRmVhdHVyZXMsIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NBUFNfRkVBVFVSRVNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0Y2hpbGRwcm94eS5jIGIvZ3N0L2dzdGNoaWxkcHJveHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhMjU5NS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0Y2hpbGRwcm94eS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTY1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3RjaGlsZHByb3h5LmM6IGludGVyZmFjZSBmb3IgbXVsdGkgY2hpbGQgZWxlbWVudHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0Y2hpbGRwcm94eQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBJbnRlcmZhY2UgZm9yIG11bHRpIGNoaWxkIGVsZW1lbnRzLgotICogQHNlZV9hbHNvOiAjR3N0QmluCi0gKgotICogVGhpcyBpbnRlcmZhY2UgYWJzdHJhY3RzIGhhbmRsaW5nIG9mIHByb3BlcnR5IHNldHMgZm9yIGVsZW1lbnRzIHdpdGgKLSAqIGNoaWxkcmVuLiBJbWFnaW5lIGVsZW1lbnRzIHN1Y2ggYXMgbWl4ZXJzIG9yIHBvbHlwaG9uaWMgZ2VuZXJhdG9ycy4gVGhleSBhbGwKLSAqIGhhdmUgbXVsdGlwbGUgI0dzdFBhZCBvciBzb21lIGtpbmQgb2Ygdm9pY2Ugb2JqZWN0cy4gQW5vdGhlciB1c2UgY2FzZSBhcmUKLSAqIGNvbnRhaW5lciBlbGVtZW50cyBsaWtlICNHc3RCaW4uCi0gKiBUaGUgZWxlbWVudCBpbXBsZW1lbnRpbmcgdGhlIGludGVyZmFjZSBhY3RzIGFzIGEgcGFyZW50IGZvciB0aG9zZSBjaGlsZAotICogb2JqZWN0cy4KLSAqCi0gKiBCeSBpbXBsZW1lbnRpbmcgdGhpcyBpbnRlcmZhY2UgdGhlIGNoaWxkIHByb3BlcnRpZXMgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdGhlCi0gKiBwYXJlbnQgZWxlbWVudCBieSB1c2luZyBnc3RfY2hpbGRfcHJveHlfZ2V0KCkgYW5kIGdzdF9jaGlsZF9wcm94eV9zZXQoKS4KLSAqCi0gKiBQcm9wZXJ0eSBuYW1lcyBhcmUgd3JpdHRlbiBhcyAiY2hpbGQtbmFtZTo6cHJvcGVydHktbmFtZSIuIFRoZSB3aG9sZSBuYW1pbmcKLSAqIHNjaGVtZSBpcyByZWN1cnNpdmUuIFRodXMgImNoaWxkMTo6Y2hpbGQyOjpwcm9wZXJ0eSIgaXMgdmFsaWQgdG9vLCBpZgotICogImNoaWxkMSIgYW5kICJjaGlsZDIiIGltcGxlbWVudCB0aGUgI0dzdENoaWxkUHJveHkgaW50ZXJmYWNlLgotICovCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiZ3N0Y2hpbGRwcm94eS5oIgotI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVjdG9yLmg+Ci0KLS8qIHNpZ25hbHMgKi8KLWVudW0KLXsKLSAgQ0hJTERfQURERUQsCi0gIENISUxEX1JFTU9WRUQsCi0gIExBU1RfU0lHTkFMCi19OwotCi1zdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotc3RhdGljIEdPYmplY3QgKgotZ3N0X2NoaWxkX3Byb3h5X2RlZmF1bHRfZ2V0X2NoaWxkX2J5X25hbWUgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBndWludCBjb3VudCwgaTsKLSAgR09iamVjdCAqb2JqZWN0LCAqcmVzdWx0OwotICBnY2hhciAqb2JqZWN0X25hbWU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DSElMRF9QUk9YWSAocGFyZW50KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOwotCi0gIHJlc3VsdCA9IE5VTEw7Ci0KLSAgY291bnQgPSBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50IChwYXJlbnQpOwotICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgIGdib29sZWFuIGVxOwotCi0gICAgaWYgKCEob2JqZWN0ID0gZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAocGFyZW50LCBpKSkpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmICghR1NUX0lTX09CSkVDVCAob2JqZWN0KSkgewotICAgICAgZ290byBuZXh0OwotICAgIH0KLSAgICBvYmplY3RfbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1RfQ0FTVCAob2JqZWN0KSk7Ci0gICAgaWYgKG9iamVjdF9uYW1lID09IE5VTEwpIHsKLSAgICAgIGdfd2FybmluZyAoImNoaWxkICV1IG9mIHBhcmVudCAlcyBoYXMgbm8gbmFtZSIsIGksCi0gICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChwYXJlbnQpKTsKLSAgICAgIGdvdG8gbmV4dDsKLSAgICB9Ci0gICAgZXEgPSBnX3N0cl9lcXVhbCAob2JqZWN0X25hbWUsIG5hbWUpOwotICAgIGdfZnJlZSAob2JqZWN0X25hbWUpOwotCi0gICAgaWYgKGVxKSB7Ci0gICAgICByZXN1bHQgPSBvYmplY3Q7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIG5leHQ6Ci0gICAgZ19vYmplY3RfdW5yZWYgKG9iamVjdCk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vKioKLSAqIGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZToKLSAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgb2JqZWN0IHRvIGdldCB0aGUgY2hpbGQgZnJvbQotICogQG5hbWU6IHRoZSBjaGlsZCdzIG5hbWUKLSAqCi0gKiBMb29rcyB1cCBhIGNoaWxkIGVsZW1lbnQgYnkgdGhlIGdpdmVuIG5hbWUuCi0gKgotICogVGhpcyB2aXJ0dWFsIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyAjR3N0T2JqZWN0Ci0gKiB0b2dldGhlciB3aXRoIGdzdF9vYmplY3RfZ2V0X25hbWUoKS4gSWYgdGhlIGludGVyZmFjZSBpcyB0byBiZSB1c2VkIHdpdGgKLSAqICNHT2JqZWN0cywgdGhpcyBtZXRob2RzIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4uCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBjaGlsZCBvYmplY3Qgb3IgJU5VTEwgaWYKLSAqICAgICBub3QgZm91bmQuIFVucmVmIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdPYmplY3QgKgotZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9uYW1lIChHc3RDaGlsZFByb3h5ICogcGFyZW50LCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0hJTERfUFJPWFkgKHBhcmVudCksIDApOwotCi0gIHJldHVybiAoR1NUX0NISUxEX1BST1hZX0dFVF9JTlRFUkZBQ0UgKHBhcmVudCktPmdldF9jaGlsZF9ieV9uYW1lIChwYXJlbnQsCi0gICAgICAgICAgbmFtZSkpOwotfQotCi0vKioKLSAqIGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXg6Ci0gKiBAcGFyZW50OiB0aGUgcGFyZW50IG9iamVjdCB0byBnZXQgdGhlIGNoaWxkIGZyb20KLSAqIEBpbmRleDogdGhlIGNoaWxkJ3MgcG9zaXRpb24gaW4gdGhlIGNoaWxkIGxpc3QKLSAqCi0gKiBGZXRjaGVzIGEgY2hpbGQgYnkgaXRzIG51bWJlci4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdGhlIGNoaWxkIG9iamVjdCBvciAlTlVMTCBpZgotICogICAgIG5vdCBmb3VuZCAoaW5kZXggdG9vIGhpZ2gpLiBVbnJlZiBhZnRlciB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1HT2JqZWN0ICoKLWdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXggKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsIGd1aW50IGluZGV4KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NISUxEX1BST1hZIChwYXJlbnQpLCBOVUxMKTsKLQotICByZXR1cm4gKEdTVF9DSElMRF9QUk9YWV9HRVRfSU5URVJGQUNFIChwYXJlbnQpLT5nZXRfY2hpbGRfYnlfaW5kZXggKHBhcmVudCwKLSAgICAgICAgICBpbmRleCkpOwotfQotCi0vKioKLSAqIGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQ6Ci0gKiBAcGFyZW50OiB0aGUgcGFyZW50IG9iamVjdAotICoKLSAqIEdldHMgdGhlIG51bWJlciBvZiBjaGlsZCBvYmplY3RzIHRoaXMgcGFyZW50IGNvbnRhaW5zLgotICoKLSAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgY2hpbGQgb2JqZWN0cwotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWd1aW50Ci1nc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50IChHc3RDaGlsZFByb3h5ICogcGFyZW50KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NISUxEX1BST1hZIChwYXJlbnQpLCAwKTsKLQotICByZXR1cm4gKEdTVF9DSElMRF9QUk9YWV9HRVRfSU5URVJGQUNFIChwYXJlbnQpLT5nZXRfY2hpbGRyZW5fY291bnQgKHBhcmVudCkpOwotfQotCi0vKioKLSAqIGdzdF9jaGlsZF9wcm94eV9sb29rdXA6Ci0gKiBAb2JqZWN0OiBjaGlsZCBwcm94eSBvYmplY3QgdG8gbG9va3VwIHRoZSBwcm9wZXJ0eSBpbgotICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGxvb2sgdXAKLSAqIEB0YXJnZXQ6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgZnVsbCk6IHBvaW50ZXIgdG8gYSAjR09iamVjdCB0aGF0Ci0gKiAgICAgdGFrZXMgdGhlIHJlYWwgb2JqZWN0IHRvIHNldCBwcm9wZXJ0eSBvbgotICogQHBzcGVjOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBwb2ludGVyIHRvIHRha2UgdGhlICNHUGFyYW1TcGVjCi0gKiAgICAgZGVzY3JpYmluZyB0aGUgcHJvcGVydHkKLSAqCi0gKiBMb29rcyB1cCB3aGljaCBvYmplY3QgYW5kICNHUGFyYW1TcGVjIHdvdWxkIGJlIGVmZmVjdGVkIGJ5IHRoZSBnaXZlbiBAbmFtZS4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEB0YXJnZXQgYW5kIEBwc3BlYyBjb3VsZCBiZSBmb3VuZC4gJUZBTFNFIG90aGVyd2lzZS4gSW4gdGhhdAotICogY2FzZSB0aGUgdmFsdWVzIGZvciBAcHNwZWMgYW5kIEB0YXJnZXQgYXJlIG5vdCBtb2RpZmllZC4gVW5yZWYgQHRhcmdldCBhZnRlcgotICogdXNhZ2UuIEZvciBwbGFpbiBHT2JqZWN0cyBAdGFyZ2V0IGlzIHRoZSBzYW1lIGFzIEBvYmplY3QuCi0gKi8KLWdib29sZWFuCi1nc3RfY2hpbGRfcHJveHlfbG9va3VwIChHc3RDaGlsZFByb3h5ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIG5hbWUsCi0gICAgR09iamVjdCAqKiB0YXJnZXQsIEdQYXJhbVNwZWMgKiogcHNwZWMpCi17Ci0gIEdPYmplY3QgKm9iajsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIGdjaGFyICoqbmFtZXMsICoqY3VycmVudDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NISUxEX1BST1hZIChvYmplY3QpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICBvYmogPSBnX29iamVjdF9yZWYgKG9iamVjdCk7Ci0KLSAgY3VycmVudCA9IG5hbWVzID0gZ19zdHJzcGxpdCAobmFtZSwgIjo6IiwgLTEpOwotICAvKiBmaW5kIHRoZSBvd25lciBvZiB0aGUgcHJvcGVydHkgKi8KLSAgd2hpbGUgKGN1cnJlbnRbMV0pIHsKLSAgICBHT2JqZWN0ICpuZXh0OwotCi0gICAgaWYgKCFHU1RfSVNfQ0hJTERfUFJPWFkgKG9iaikpIHsKLSAgICAgIEdTVF9JTkZPCi0gICAgICAgICAgKCJvYmplY3QgJXMgaXMgbm90IGEgcGFyZW50LCBzbyB5b3UgY2Fubm90IHJlcXVlc3QgYSBjaGlsZCBieSBuYW1lICVzIiwKLSAgICAgICAgICAoR1NUX0lTX09CSkVDVCAob2JqKSA/IEdTVF9PQkpFQ1RfTkFNRSAob2JqKSA6ICIiKSwgY3VycmVudFswXSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgbmV4dCA9IGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfbmFtZSAoR1NUX0NISUxEX1BST1hZIChvYmopLAotICAgICAgICBjdXJyZW50WzBdKTsKLSAgICBpZiAoIW5leHQpIHsKLSAgICAgIEdTVF9JTkZPICgibm8gc3VjaCBvYmplY3QgJXMiLCBjdXJyZW50WzBdKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBnX29iamVjdF91bnJlZiAob2JqKTsKLSAgICBvYmogPSBuZXh0OwotICAgIGN1cnJlbnQrKzsKLSAgfQotCi0gIC8qIGxvb2sgZm9yIHBzZWMgKi8KLSAgaWYgKGN1cnJlbnRbMV0gPT0gTlVMTCkgewotICAgIEdQYXJhbVNwZWMgKnNwZWMgPQotICAgICAgICBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChHX09CSkVDVF9HRVRfQ0xBU1MgKG9iaiksIGN1cnJlbnRbMF0pOwotICAgIGlmIChzcGVjID09IE5VTEwpIHsKLSAgICAgIEdTVF9JTkZPICgibm8gcGFyYW0gc3BlYyBuYW1lZCAlcyIsIGN1cnJlbnRbMF0pOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAocHNwZWMpCi0gICAgICAgICpwc3BlYyA9IHNwZWM7Ci0gICAgICBpZiAodGFyZ2V0KSB7Ci0gICAgICAgIGdfb2JqZWN0X3JlZiAob2JqKTsKLSAgICAgICAgKnRhcmdldCA9IG9iajsKLSAgICAgIH0KLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgfQotICB9Ci0gIGdfb2JqZWN0X3VucmVmIChvYmopOwotICBnX3N0cmZyZWV2IChuYW1lcyk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eToKLSAqIEBvYmplY3Q6IG9iamVjdCB0byBxdWVyeQotICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5Ci0gKiBAdmFsdWU6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IGEgI0dWYWx1ZSB0aGF0IHNob3VsZCB0YWtlIHRoZSByZXN1bHQuCi0gKgotICogR2V0cyBhIHNpbmdsZSBwcm9wZXJ0eSB1c2luZyB0aGUgR3N0Q2hpbGRQcm94eSBtZWNoYW5pc20uCi0gKiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGl0IGJ5IGNhbGxpbmcgZ192YWx1ZV91bnNldCgpCi0gKi8KLXZvaWQKLWdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkgKEdzdENoaWxkUHJveHkgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogbmFtZSwKLSAgICBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR1BhcmFtU3BlYyAqcHNwZWM7Ci0gIEdPYmplY3QgKnRhcmdldDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0hJTERfUFJPWFkgKG9iamVjdCkpOwotICBnX3JldHVybl9pZl9mYWlsIChuYW1lICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSkpOwotCi0gIGlmICghZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAob2JqZWN0LCBuYW1lLCAmdGFyZ2V0LCAmcHNwZWMpKQotICAgIGdvdG8gbm90X2ZvdW5kOwotCi0gIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAodGFyZ2V0LCBwc3BlYy0+bmFtZSwgdmFsdWUpOwotICBnX29iamVjdF91bnJlZiAodGFyZ2V0KTsKLQotICByZXR1cm47Ci0KLW5vdF9mb3VuZDoKLSAgewotICAgIGdfd2FybmluZyAoIm5vIHByb3BlcnR5ICVzIGluIG9iamVjdCAlcyIsIG5hbWUsCi0gICAgICAgIChHU1RfSVNfT0JKRUNUIChvYmplY3QpID8gR1NUX09CSkVDVF9OQU1FIChvYmplY3QpIDogIiIpKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdDoKLSAqIEBvYmplY3Q6IHRoZSBvYmplY3QgdG8gcXVlcnkKLSAqIEBmaXJzdF9wcm9wZXJ0eV9uYW1lOiBuYW1lIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSB0byBnZXQKLSAqIEB2YXJfYXJnczogcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSBuYW1lL3JldHVybiBsb2NhdGlvbiBwYWlycywgZm9sbG93ZWQgYnkgJU5VTEwKLSAqCi0gKiBHZXRzIHByb3BlcnRpZXMgb2YgdGhlIHBhcmVudCBvYmplY3QgYW5kIGl0cyBjaGlsZHJlbi4KLSAqLwotdm9pZAotZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QgKEdzdENoaWxkUHJveHkgKiBvYmplY3QsCi0gICAgY29uc3QgZ2NoYXIgKiBmaXJzdF9wcm9wZXJ0eV9uYW1lLCB2YV9saXN0IHZhcl9hcmdzKQotewotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgZ2NoYXIgKmVycm9yID0gTlVMTDsKLSAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OwotICBHUGFyYW1TcGVjICpwc3BlYzsKLSAgR09iamVjdCAqdGFyZ2V0OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DSElMRF9QUk9YWSAob2JqZWN0KSk7Ci0KLSAgbmFtZSA9IGZpcnN0X3Byb3BlcnR5X25hbWU7Ci0KLSAgLyogaXRlcmF0ZSBvdmVyIHBhaXJzICovCi0gIHdoaWxlIChuYW1lKSB7Ci0gICAgaWYgKCFnc3RfY2hpbGRfcHJveHlfbG9va3VwIChvYmplY3QsIG5hbWUsICZ0YXJnZXQsICZwc3BlYykpCi0gICAgICBnb3RvIG5vdF9mb3VuZDsKLQotICAgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBwc3BlYy0+dmFsdWVfdHlwZSk7Ci0gICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5ICh0YXJnZXQsIHBzcGVjLT5uYW1lLCAmdmFsdWUpOwotICAgIGdfb2JqZWN0X3VucmVmICh0YXJnZXQpOwotCi0gICAgR19WQUxVRV9MQ09QWSAoJnZhbHVlLCB2YXJfYXJncywgMCwgJmVycm9yKTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICBnb3RvIGNhbnRfY29weTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotICAgIG5hbWUgPSB2YV9hcmcgKHZhcl9hcmdzLCBnY2hhciAqKTsKLSAgfQotICByZXR1cm47Ci0KLW5vdF9mb3VuZDoKLSAgewotICAgIGdfd2FybmluZyAoIm5vIHByb3BlcnR5ICVzIGluIG9iamVjdCAlcyIsIG5hbWUsCi0gICAgICAgIChHU1RfSVNfT0JKRUNUIChvYmplY3QpID8gR1NUX09CSkVDVF9OQU1FIChvYmplY3QpIDogIiIpKTsKLSAgICByZXR1cm47Ci0gIH0KLWNhbnRfY29weToKLSAgewotICAgIGdfd2FybmluZyAoImVycm9yIGNvcHlpbmcgdmFsdWUgJXMgaW4gb2JqZWN0ICVzOiAlcyIsIHBzcGVjLT5uYW1lLAotICAgICAgICAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSA/IEdTVF9PQkpFQ1RfTkFNRSAob2JqZWN0KSA6ICIiKSwgZXJyb3IpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2NoaWxkX3Byb3h5X2dldDoKLSAqIEBvYmplY3Q6IHRoZSBwYXJlbnQgb2JqZWN0Ci0gKiBAZmlyc3RfcHJvcGVydHlfbmFtZTogbmFtZSBvZiB0aGUgZmlyc3QgcHJvcGVydHkgdG8gZ2V0Ci0gKiBALi4uOiByZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBmaXJzdCBwcm9wZXJ0eSwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBtb3JlIG5hbWUvcmV0dXJuIGxvY2F0aW9uIHBhaXJzLCBmb2xsb3dlZCBieSAlTlVMTAotICoKLSAqIEdldHMgcHJvcGVydGllcyBvZiB0aGUgcGFyZW50IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuLgotICovCi12b2lkCi1nc3RfY2hpbGRfcHJveHlfZ2V0IChHc3RDaGlsZFByb3h5ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsCi0gICAgLi4uKQotewotICB2YV9saXN0IHZhcl9hcmdzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DSElMRF9QUk9YWSAob2JqZWN0KSk7Ci0KLSAgdmFfc3RhcnQgKHZhcl9hcmdzLCBmaXJzdF9wcm9wZXJ0eV9uYW1lKTsKLSAgZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QgKG9iamVjdCwgZmlyc3RfcHJvcGVydHlfbmFtZSwgdmFyX2FyZ3MpOwotICB2YV9lbmQgKHZhcl9hcmdzKTsKLX0KLQotLyoqCi0gKiBnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5OgotICogQG9iamVjdDogdGhlIHBhcmVudCBvYmplY3QKLSAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQKLSAqIEB2YWx1ZTogbmV3ICNHVmFsdWUgZm9yIHRoZSBwcm9wZXJ0eQotICoKLSAqIFNldHMgYSBzaW5nbGUgcHJvcGVydHkgdXNpbmcgdGhlIEdzdENoaWxkUHJveHkgbWVjaGFuaXNtLgotICovCi12b2lkCi1nc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5IChHc3RDaGlsZFByb3h5ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIG5hbWUsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIEdQYXJhbVNwZWMgKnBzcGVjOwotICBHT2JqZWN0ICp0YXJnZXQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NISUxEX1BST1hZIChvYmplY3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAobmFtZSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpKTsKLQotICBpZiAoIWdzdF9jaGlsZF9wcm94eV9sb29rdXAgKG9iamVjdCwgbmFtZSwgJnRhcmdldCwgJnBzcGVjKSkKLSAgICBnb3RvIG5vdF9mb3VuZDsKLQotICBnX29iamVjdF9zZXRfcHJvcGVydHkgKHRhcmdldCwgcHNwZWMtPm5hbWUsIHZhbHVlKTsKLSAgZ19vYmplY3RfdW5yZWYgKHRhcmdldCk7Ci0gIHJldHVybjsKLQotbm90X2ZvdW5kOgotICB7Ci0gICAgZ193YXJuaW5nICgiY2Fubm90IHNldCBwcm9wZXJ0eSAlcyBvbiBvYmplY3QgJXMiLCBuYW1lLAotICAgICAgICAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSA/IEdTVF9PQkpFQ1RfTkFNRSAob2JqZWN0KSA6ICIiKSk7Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3Q6Ci0gKiBAb2JqZWN0OiB0aGUgcGFyZW50IG9iamVjdAotICogQGZpcnN0X3Byb3BlcnR5X25hbWU6IG5hbWUgb2YgdGhlIGZpcnN0IHByb3BlcnR5IHRvIHNldAotICogQHZhcl9hcmdzOiB2YWx1ZSBmb3IgdGhlIGZpcnN0IHByb3BlcnR5LCBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IG1vcmUgbmFtZS92YWx1ZSBwYWlycywgZm9sbG93ZWQgYnkgJU5VTEwKLSAqCi0gKiBTZXRzIHByb3BlcnRpZXMgb2YgdGhlIHBhcmVudCBvYmplY3QgYW5kIGl0cyBjaGlsZHJlbi4KLSAqLwotdm9pZAotZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3QgKEdzdENoaWxkUHJveHkgKiBvYmplY3QsCi0gICAgY29uc3QgZ2NoYXIgKiBmaXJzdF9wcm9wZXJ0eV9uYW1lLCB2YV9saXN0IHZhcl9hcmdzKQotewotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgZ2NoYXIgKmVycm9yID0gTlVMTDsKLSAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OwotICBHUGFyYW1TcGVjICpwc3BlYzsKLSAgR09iamVjdCAqdGFyZ2V0OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DSElMRF9QUk9YWSAob2JqZWN0KSk7Ci0KLSAgbmFtZSA9IGZpcnN0X3Byb3BlcnR5X25hbWU7Ci0KLSAgLyogaXRlcmF0ZSBvdmVyIHBhaXJzICovCi0gIHdoaWxlIChuYW1lKSB7Ci0gICAgaWYgKCFnc3RfY2hpbGRfcHJveHlfbG9va3VwIChvYmplY3QsIG5hbWUsICZ0YXJnZXQsICZwc3BlYykpCi0gICAgICBnb3RvIG5vdF9mb3VuZDsKLQotICAgIEdfVkFMVUVfQ09MTEVDVF9JTklUICgmdmFsdWUsIHBzcGVjLT52YWx1ZV90eXBlLCB2YXJfYXJncywKLSAgICAgICAgR19WQUxVRV9OT0NPUFlfQ09OVEVOVFMsICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpCi0gICAgICBnb3RvIGNhbnRfY29weTsKLQotICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAodGFyZ2V0LCBwc3BlYy0+bmFtZSwgJnZhbHVlKTsKLSAgICBnX29iamVjdF91bnJlZiAodGFyZ2V0KTsKLQotICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci0gICAgbmFtZSA9IHZhX2FyZyAodmFyX2FyZ3MsIGdjaGFyICopOwotICB9Ci0gIHJldHVybjsKLQotbm90X2ZvdW5kOgotICB7Ci0gICAgZ193YXJuaW5nICgibm8gcHJvcGVydHkgJXMgaW4gb2JqZWN0ICVzIiwgbmFtZSwKLSAgICAgICAgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCkgPyBHU1RfT0JKRUNUX05BTUUgKG9iamVjdCkgOiAiIikpOwotICAgIHJldHVybjsKLSAgfQotY2FudF9jb3B5OgotICB7Ci0gICAgZ193YXJuaW5nICgiZXJyb3IgY29weWluZyB2YWx1ZSAlcyBpbiBvYmplY3QgJXM6ICVzIiwgcHNwZWMtPm5hbWUsCi0gICAgICAgIChHU1RfSVNfT0JKRUNUIChvYmplY3QpID8gR1NUX09CSkVDVF9OQU1FIChvYmplY3QpIDogIiIpLCBlcnJvcik7Ci0gICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLSAgICBnX29iamVjdF91bnJlZiAodGFyZ2V0KTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2hpbGRfcHJveHlfc2V0OgotICogQG9iamVjdDogdGhlIHBhcmVudCBvYmplY3QKLSAqIEBmaXJzdF9wcm9wZXJ0eV9uYW1lOiBuYW1lIG9mIHRoZSBmaXJzdCBwcm9wZXJ0eSB0byBzZXQKLSAqIEAuLi46IHZhbHVlIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZSBuYW1lL3ZhbHVlIHBhaXJzLCBmb2xsb3dlZCBieSAlTlVMTAotICoKLSAqIFNldHMgcHJvcGVydGllcyBvZiB0aGUgcGFyZW50IG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuLgotICovCi12b2lkCi1nc3RfY2hpbGRfcHJveHlfc2V0IChHc3RDaGlsZFByb3h5ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsCi0gICAgLi4uKQotewotICB2YV9saXN0IHZhcl9hcmdzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DSElMRF9QUk9YWSAob2JqZWN0KSk7Ci0KLSAgdmFfc3RhcnQgKHZhcl9hcmdzLCBmaXJzdF9wcm9wZXJ0eV9uYW1lKTsKLSAgZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3QgKG9iamVjdCwgZmlyc3RfcHJvcGVydHlfbmFtZSwgdmFyX2FyZ3MpOwotICB2YV9lbmQgKHZhcl9hcmdzKTsKLX0KLQotLyoqCi0gKiBnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQ6Ci0gKiBAcGFyZW50OiB0aGUgcGFyZW50IG9iamVjdAotICogQGNoaWxkOiB0aGUgbmV3bHkgYWRkZWQgY2hpbGQKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgbmV3IGNoaWxkCi0gKgotICogRW1pdHMgdGhlICJjaGlsZC1hZGRlZCIgc2lnbmFsLgotICovCi12b2lkCi1nc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsIEdPYmplY3QgKiBjaGlsZCwKLSAgICBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHBhcmVudCwgc2lnbmFsc1tDSElMRF9BRERFRF0sIDAsIGNoaWxkLCBuYW1lKTsKLX0KLQotLyoqCi0gKiBnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZDoKLSAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgb2JqZWN0Ci0gKiBAY2hpbGQ6IHRoZSByZW1vdmVkIGNoaWxkCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIG9sZCBjaGlsZAotICoKLSAqIEVtaXRzIHRoZSAiY2hpbGQtcmVtb3ZlZCIgc2lnbmFsLgotICovCi12b2lkCi1nc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCwgR09iamVjdCAqIGNoaWxkLAotICAgIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgZ19zaWduYWxfZW1pdCAocGFyZW50LCBzaWduYWxzW0NISUxEX1JFTU9WRURdLCAwLCBjaGlsZCwgbmFtZSk7Ci19Ci0KLS8qIGdvYmplY3QgbWV0aG9kcyAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2NoaWxkX3Byb3h5X2NsYXNzX2luaXQgKGdwb2ludGVyIGdfY2xhc3MsIGdwb2ludGVyIGNsYXNzX2RhdGEpCi17Ci0gIEdzdENoaWxkUHJveHlJbnRlcmZhY2UgKmlmYWNlID0gKEdzdENoaWxkUHJveHlJbnRlcmZhY2UgKikgZ19jbGFzczsKLQotICBpZmFjZS0+Z2V0X2NoaWxkX2J5X25hbWUgPSBnc3RfY2hpbGRfcHJveHlfZGVmYXVsdF9nZXRfY2hpbGRfYnlfbmFtZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jaGlsZF9wcm94eV9iYXNlX2luaXQgKGdwb2ludGVyIGdfY2xhc3MpCi17Ci0gIHN0YXRpYyBnYm9vbGVhbiBpbml0aWFsaXplZCA9IEZBTFNFOwotCi0gIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAvKiBjcmVhdGUgaW50ZXJmYWNlIHNpZ25hbHMgYW5kIHByb3BlcnRpZXMgaGVyZS4gKi8KLSAgICAvKioKLSAgICAgKiBHc3RDaGlsZFByb3h5OjpjaGlsZC1hZGRlZDoKLSAgICAgKiBAY2hpbGRfcHJveHk6IHRoZSAjR3N0Q2hpbGRQcm94eQotICAgICAqIEBvYmplY3Q6IHRoZSAjR09iamVjdCB0aGF0IHdhcyBhZGRlZAotICAgICAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgbmV3IGNoaWxkCi0gICAgICoKLSAgICAgKiBXaWxsIGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIEBvYmplY3Qgd2FzIGFkZGVkIHRvIHRoZSBAY2hpbGRfcHJveHkuCi0gICAgICovCi0gICAgc2lnbmFsc1tDSElMRF9BRERFRF0gPQotICAgICAgICBnX3NpZ25hbF9uZXcgKCJjaGlsZC1hZGRlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChnX2NsYXNzKSwKLSAgICAgICAgR19TSUdOQUxfUlVOX0ZJUlNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdENoaWxkUHJveHlJbnRlcmZhY2UsCi0gICAgICAgICAgICBjaGlsZF9hZGRlZCksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwKLSAgICAgICAgMiwgR19UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORyk7Ci0KLSAgICAvKioKLSAgICAgKiBHc3RDaGlsZFByb3h5OjpjaGlsZC1yZW1vdmVkOgotICAgICAqIEBjaGlsZF9wcm94eTogdGhlICNHc3RDaGlsZFByb3h5Ci0gICAgICogQG9iamVjdDogdGhlICNHT2JqZWN0IHRoYXQgd2FzIHJlbW92ZWQKLSAgICAgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIG9sZCBjaGlsZAotICAgICAqCi0gICAgICogV2lsbCBiZSBlbWl0dGVkIGFmdGVyIHRoZSBAb2JqZWN0IHdhcyByZW1vdmVkIGZyb20gdGhlIEBjaGlsZF9wcm94eS4KLSAgICAgKi8KLSAgICBzaWduYWxzW0NISUxEX1JFTU9WRURdID0KLSAgICAgICAgZ19zaWduYWxfbmV3ICgiY2hpbGQtcmVtb3ZlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChnX2NsYXNzKSwKLSAgICAgICAgR19TSUdOQUxfUlVOX0ZJUlNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdENoaWxkUHJveHlJbnRlcmZhY2UsCi0gICAgICAgICAgICBjaGlsZF9yZW1vdmVkKSwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLAotICAgICAgICAyLCBHX1RZUEVfT0JKRUNULCBHX1RZUEVfU1RSSU5HKTsKLQotICAgIGluaXRpYWxpemVkID0gVFJVRTsKLSAgfQotfQotCi1HVHlwZQotZ3N0X2NoaWxkX3Byb3h5X2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdHlwZSkpIHsKLSAgICBHVHlwZSBfdHlwZTsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGluZm8gPSB7Ci0gICAgICBzaXplb2YgKEdzdENoaWxkUHJveHlJbnRlcmZhY2UpLAotICAgICAgZ3N0X2NoaWxkX3Byb3h5X2Jhc2VfaW5pdCwgICAgICAgIC8qIGJhc2VfaW5pdCAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBiYXNlX2ZpbmFsaXplICovCi0gICAgICBnc3RfY2hpbGRfcHJveHlfY2xhc3NfaW5pdCwgICAgICAgLyogY2xhc3NfaW5pdCAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19maW5hbGl6ZSAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19kYXRhICovCi0gICAgICAwLAotICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBuX3ByZWFsbG9jcyAqLwotICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAvKiBpbnN0YW5jZV9pbml0ICovCi0gICAgfTsKLQotICAgIF90eXBlID0KLSAgICAgICAgZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR19UWVBFX0lOVEVSRkFDRSwgIkdzdENoaWxkUHJveHkiLCAmaW5mbywgMCk7Ci0KLSAgICBnX3R5cGVfaW50ZXJmYWNlX2FkZF9wcmVyZXF1aXNpdGUgKF90eXBlLCBHX1RZUEVfT0JKRUNUKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnR5cGUsIChnc2l6ZSkgX3R5cGUpOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNoaWxkcHJveHkuaCBiL2dzdC9nc3RjaGlsZHByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWJhNzUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGNoaWxkcHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0Y2hpbGRwcm94eS5oOiBpbnRlcmZhY2UgaGVhZGVyIGZvciBtdWx0aSBjaGlsZCBlbGVtZW50cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQ0hJTERfUFJPWFlfSF9fCi0jZGVmaW5lIF9fR1NUX0NISUxEX1BST1hZX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotCi0jZGVmaW5lIEdTVF9UWVBFX0NISUxEX1BST1hZICAgICAgICAgICAgICAgKGdzdF9jaGlsZF9wcm94eV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0NISUxEX1BST1hZKG9iaikgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9DSElMRF9QUk9YWSwgR3N0Q2hpbGRQcm94eSkpCi0jZGVmaW5lIEdTVF9JU19DSElMRF9QUk9YWShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfQ0hJTERfUFJPWFkpKQotI2RlZmluZSBHU1RfQ0hJTERfUFJPWFlfR0VUX0lOVEVSRkFDRShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0lOVEVSRkFDRSAoKG9iaiksIEdTVF9UWVBFX0NISUxEX1BST1hZLCBHc3RDaGlsZFByb3h5SW50ZXJmYWNlKSkKLQotLyoqCi0gKiBHc3RDaGlsZFByb3h5OgotICoKLSAqIE9wYXF1ZSAjR3N0Q2hpbGRQcm94eSBkYXRhIHN0cnVjdHVyZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdENoaWxkUHJveHkgR3N0Q2hpbGRQcm94eTsgICAgLyogZHVtbXkgb2JqZWN0ICovCi10eXBlZGVmIHN0cnVjdCBfR3N0Q2hpbGRQcm94eUludGVyZmFjZSBHc3RDaGlsZFByb3h5SW50ZXJmYWNlOwotCi0vKioKLSAqIEdzdENoaWxkUHJveHlJbnRlcmZhY2U6Ci0gKiBAcGFyZW50OiBwYXJlbnQgaW50ZXJmYWNlIHR5cGUuCi0gKiBAZ2V0X2NoaWxkX2J5X25hbWU6ICB2aXJ0dWFsIG1ldGhvZCB0byBmZXRjaCB0aGUgY2hpbGQgYnkgbmFtZQotICogQGdldF9jaGlsZF9ieV9pbmRleDogdmlydHVhbCBtZXRob2QgdG8gZmV0Y2ggdGhlIGNoaWxkIGJ5IGluZGV4Ci0gKiBAZ2V0X2NoaWxkcmVuX2NvdW50OiB2aXJ0dWFsIG1ldGhvZCB0byBnZXQgdGhlIGNoaWxkcmVuIGNvdW50Ci0gKgotICogI0dzdENoaWxkUHJveHkgaW50ZXJmYWNlLgotICovCi1zdHJ1Y3QgX0dzdENoaWxkUHJveHlJbnRlcmZhY2UKLXsKLSAgR1R5cGVJbnRlcmZhY2UgcGFyZW50OwotCi0gIC8qIG1ldGhvZHMgKi8KLSAgR09iamVjdCAqICgqZ2V0X2NoaWxkX2J5X25hbWUpICAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCwgY29uc3QgZ2NoYXIgKiBuYW1lKTsKLSAgR09iamVjdCAqICgqZ2V0X2NoaWxkX2J5X2luZGV4KSAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCwgZ3VpbnQgaW5kZXgpOwotICBndWludCAgICAgKCpnZXRfY2hpbGRyZW5fY291bnQpIChHc3RDaGlsZFByb3h5ICogcGFyZW50KTsKLSAgLyo8IHByaXZhdGUgPiovCi0gIC8qIHNpZ25hbHMgKi8KLSAgdm9pZCAgICAgICgqY2hpbGRfYWRkZWQpICAgICAgICAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCwgR09iamVjdCAqIGNoaWxkLCBjb25zdCBnY2hhciAqIG5hbWUpOwotICB2b2lkICAgICAgKCpjaGlsZF9yZW1vdmVkKSAgICAgIChHc3RDaGlsZFByb3h5ICogcGFyZW50LCBHT2JqZWN0ICogY2hpbGQsIGNvbnN0IGdjaGFyICogbmFtZSk7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotR1R5cGUgICAgIGdzdF9jaGlsZF9wcm94eV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdPYmplY3QgKiBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X25hbWUgIChHc3RDaGlsZFByb3h5ICogcGFyZW50LCBjb25zdCBnY2hhciAqIG5hbWUpOwotCi1ndWludCAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCk7Ci1HT2JqZWN0ICogZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoR3N0Q2hpbGRQcm94eSAqIHBhcmVudCwgZ3VpbnQgaW5kZXgpOwotCi1nYm9vbGVhbiAgZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAgICAgICAgICAgICAoR3N0Q2hpbGRQcm94eSAqb2JqZWN0LCBjb25zdCBnY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHT2JqZWN0ICoqdGFyZ2V0LCBHUGFyYW1TcGVjICoqcHNwZWMpOwotCi12b2lkICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAgICAgICAoR3N0Q2hpbGRQcm94eSAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlICp2YWx1ZSk7Ci12b2lkICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF92YWxpc3QgICAgICAgICAoR3N0Q2hpbGRQcm94eSAqIG9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCB2YXJfYXJncyk7Ci12b2lkICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldCAgICAgICAgICAgICAgICAoR3N0Q2hpbGRQcm94eSAqIG9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOwotCi12b2lkICAgICAgZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSAgICAgICAoR3N0Q2hpbGRQcm94eSAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICp2YWx1ZSk7Ci12b2lkICAgICAgZ3N0X2NoaWxkX3Byb3h5X3NldF92YWxpc3QgICAgICAgICAoR3N0Q2hpbGRQcm94eSogb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZmlyc3RfcHJvcGVydHlfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IHZhcl9hcmdzKTsKLXZvaWQgICAgICBnc3RfY2hpbGRfcHJveHlfc2V0ICAgICAgICAgICAgICAgIChHc3RDaGlsZFByb3h5ICogb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZmlyc3RfcHJvcGVydHlfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci0KLXZvaWQgICAgICBnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQgICAgICAgIChHc3RDaGlsZFByb3h5ICogcGFyZW50LCBHT2JqZWN0ICogY2hpbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWUpOwotdm9pZCAgICAgIGdzdF9jaGlsZF9wcm94eV9jaGlsZF9yZW1vdmVkICAgICAgKEdzdENoaWxkUHJveHkgKiBwYXJlbnQsIEdPYmplY3QgKiBjaGlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbmFtZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9DSElMRF9QUk9YWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RjbG9jay1saW5yZWcuYyBiL2dzdC9nc3RjbG9jay1saW5yZWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc0OTE3Zi4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0Y2xvY2stbGlucmVnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDE1IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIGdzdGNsb2NrLWxpbnJlZy5jOiBMaW5lYXIgcmVncmVzc2lvbiBpbXBsZW1lbnRhdGlvbiwgdXNlZCBpbiBjbG9jayBzbGF2aW5nCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8dGltZS5oPgotCi0jaW5jbHVkZSAiZ3N0Y2xvY2suaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0dXRpbHMuaCIKLSNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCi0KLS8qIENvbXB1dGUgbG9nMiBvZiB0aGUgcGFzc2VkIDY0LWJpdCBudW1iZXIgYnkgZmluZGluZyB0aGUgaGlnaGVzdCBzZXQgYml0ICovCi1zdGF0aWMgZ3VpbnQKLWdzdF9sb2cyIChHc3RDbG9ja1RpbWUgaW4pCi17Ci0gIGNvbnN0IGd1aW50NjQgYltdID0KLSAgICAgIHsgMHgyLCAweEMsIDB4RjAsIDB4RkYwMCwgMHhGRkZGMDAwMCwgMHhGRkZGRkZGRjAwMDAwMDAwTEwgfTsKLSAgY29uc3QgZ3VpbnQ2NCBTW10gPSB7IDEsIDIsIDQsIDgsIDE2LCAzMiB9OwotICBpbnQgaTsKLQotICBndWludCBjb3VudCA9IDA7Ci0gIGZvciAoaSA9IDU7IGkgPj0gMDsgaS0tKSB7Ci0gICAgaWYgKGluICYgYltpXSkgewotICAgICAgaW4gPj49IFNbaV07Ci0gICAgICBjb3VudCB8PSBTW2ldOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBjb3VudDsKLX0KLQotLyogaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9MZWFzdFNxdWFyZXNGaXR0aW5nLmh0bWwKLSAqIHdpdGggU0xBVkVfTE9DSwotICovCi1nYm9vbGVhbgotX3ByaXZfZ3N0X2RvX2xpbmVhcl9yZWdyZXNzaW9uIChHc3RDbG9ja1RpbWUgKiB0aW1lcywgZ3VpbnQgbiwKLSAgICBHc3RDbG9ja1RpbWUgKiBtX251bSwgR3N0Q2xvY2tUaW1lICogbV9kZW5vbSwgR3N0Q2xvY2tUaW1lICogYiwKLSAgICBHc3RDbG9ja1RpbWUgKiB4YmFzZSwgZ2RvdWJsZSAqIHJfc3F1YXJlZCkKLXsKLSAgR3N0Q2xvY2tUaW1lICpuZXd4LCAqbmV3eTsKLSAgR3N0Q2xvY2tUaW1lIHhtaW4sIHltaW4sIHhiYXIsIHliYXIsIHhiYXI0LCB5YmFyNDsKLSAgR3N0Q2xvY2tUaW1lIHhtYXgsIHltYXg7Ci0gIEdzdENsb2NrVGltZURpZmYgc3h4LCBzeHksIHN5eTsKLSAgR3N0Q2xvY2tUaW1lICp4LCAqeTsKLSAgZ2ludCBpLCBqOwotICBnaW50IHBzaGlmdCA9IDA7Ci0gIGdpbnQgbWF4X2JpdHM7Ci0KLSAgeGJhciA9IHliYXIgPSBzeHggPSBzeXkgPSBzeHkgPSAwOwotCi0gIHggPSB0aW1lczsKLSAgeSA9IHRpbWVzICsgMjsKLQotICB4bWluID0geW1pbiA9IEdfTUFYVUlOVDY0OwotICB4bWF4ID0geW1heCA9IDA7Ci0gIGZvciAoaSA9IGogPSAwOyBpIDwgbjsgaSsrLCBqICs9IDQpIHsKLSAgICB4bWluID0gTUlOICh4bWluLCB4W2pdKTsKLSAgICB5bWluID0gTUlOICh5bWluLCB5W2pdKTsKLQotICAgIHhtYXggPSBNQVggKHhtYXgsIHhbal0pOwotICAgIHltYXggPSBNQVggKHltYXgsIHlbal0pOwotICB9Ci0KLSAgbmV3eCA9IHRpbWVzICsgMTsKLSAgbmV3eSA9IHRpbWVzICsgMzsKLQotICAvKiBzdHJpcCBvZmYgdW5uZWNlc3NhcnkgYml0cyBvZiBwcmVjaXNpb24gKi8KLSAgZm9yIChpID0gaiA9IDA7IGkgPCBuOyBpKyssIGogKz0gNCkgewotICAgIG5ld3hbal0gPSB4W2pdIC0geG1pbjsKLSAgICBuZXd5W2pdID0geVtqXSAtIHltaW47Ci0gIH0KLQotI2lmZGVmIERFQlVHR0lOR19FTkFCTEVECi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJyZWR1Y2VkIG51bWJlcnM6Iik7Ci0gIGZvciAoaSA9IGogPSAwOyBpIDwgbjsgaSsrLCBqICs9IDQpCi0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywKLSAgICAgICAgIiAgJSIgR19HVUlOVDY0X0ZPUk1BVCAiICAlIiBHX0dVSU5UNjRfRk9STUFULCBuZXd4W2pdLCBuZXd5W2pdKTsKLSNlbmRpZgotCi0gIC8qIGhhdmUgdG8gZG8gdGhpcyBwcmVjaXNlbHkgb3RoZXJ3aXNlIHRoZSByZXN1bHRzIGFyZSBwcmV0dHkgbXVjaCB1c2VsZXNzLgotICAgKiBzaG91bGQgZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiB0aGVzZSBhY2N1bXVsYXRvcnMgY2FuIG92ZXJmbG93ICovCi0KLSAgLyogcXVhbnRpdGllcyBvbiB0aGUgb3JkZXIgb2YgMWUxMCB0byAxZTEzIC0+IDMwLTM1IGJpdHM7Ci0gICAqIHdpbmRvdyBzaXplIGEgbWF4IG9mIDJeMTAsIHNvCi0gICB0aGlzIGFkZGl0aW9uIGNvdWxkIGVuZCB1cCBhcm91bmQgMl40NSBvciBzbyAtLSBhbXBsZSBoZWFkcm9vbSAqLwotICBmb3IgKGkgPSBqID0gMDsgaSA8IG47IGkrKywgaiArPSA0KSB7Ci0gICAgLyogSnVzdCBpbiBjYXNlIGFzc3VtcHRpb25zIGFib3V0IGhlYWRyb29tIHByb3ZlIGZhbHNlLCBsZXQncyBjaGVjayAqLwotICAgIGlmICgobmV3eFtqXSA+IDAgJiYgR19NQVhVSU5UNjQgLSB4YmFyIDw9IG5ld3hbal0pIHx8Ci0gICAgICAgIChuZXd5W2pdID4gMCAmJiBHX01BWFVJTlQ2NCAtIHliYXIgPD0gbmV3eVtqXSkpIHsKLSAgICAgIEdTVF9DQVRfV0FSTklORyAoR1NUX0NBVF9DTE9DSywKLSAgICAgICAgICAiUmVncmVzc2lvbiBvdmVyZmxvd2VkIGluIGNsb2NrIHNsYXZpbmchIHhiYXIgJSIKLSAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgbmV3eFtqXSAlIiBHX0dVSU5UNjRfRk9STUFUICIgeWJhciAlIgotICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiBuZXd5W2pdICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHhiYXIsIG5ld3hbal0sIHliYXIsCi0gICAgICAgICAgbmV3eVtqXSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgeGJhciArPSBuZXd4W2pdOwotICAgIHliYXIgKz0gbmV3eVtqXTsKLSAgfQotICB4YmFyIC89IG47Ci0gIHliYXIgLz0gbjsKLQotICAvKiBtdWx0aXBseWluZyBkaXJlY3RseSB3b3VsZCBnaXZlIHF1YW50aXRpZXMgb24gdGhlIG9yZGVyIG9mIDFlMjAtMWUyNiAtPgotICAgKiA2MCBiaXRzIHRvIDcwIGJpdHMgdGltZXMgdGhlIHdpbmRvdyBzaXplIHRoYXQncyA4MCB3aGljaCBpcyB0b28gbXVjaC4KLSAgICogSW5zdGVhZCB3ZSAoMSkgc3VidHJhY3Qgb2ZmIHRoZSB4YmFyKnliYXIgaW4gdGhlIGxvb3AgaW5zdGVhZCBvZiBhZnRlciwKLSAgICogdG8gYXZvaWQgYWNjdW11bGF0aW9uOyAoMikgc2hpZnQgb2ZmIHNvbWUgZXN0aW1hdGVkIG51bWJlciBvZiBiaXRzIGZyb20KLSAgICogZWFjaCBtdWx0aXBsaWNhbmQgdG8gbGltaXQgdGhlIGV4cGVjdGVkIGNlaWxpbmcuIEZvciBzdHJhbmdlCi0gICAqIGRpc3RyaWJ1dGlvbnMgb2YgaW5wdXQgdmFsdWVzLCB0aGluZ3MgY2FuIHN0aWxsIG92ZXJmbG93LCBpbiB3aGljaAotICAgKiBjYXNlIHdlIGRyb3AgcHJlY2lzaW9uIGFuZCByZXRyeSAtIGF0IG1vc3QgYSBmZXcgdGltZXMsIGluIHByYWN0aWNlIHJhcmVseQotICAgKi8KLQotICAvKiBHdWVzcyBob3cgbWFueSBiaXRzIHdlIG1pZ2h0IG5lZWQgZm9yIHRoZSB1c3VhbCBkaXN0cmlidXRpb24gb2YgaW5wdXQsCi0gICAqIHdpdGggYSBmYWxsYmFjayBsb29wIHRoYXQgZHJvcHMgcHJlY2lzaW9uIGlmIHRoaW5ncyBnbyBwZWFyLXNoYXBlZCAqLwotICBtYXhfYml0cyA9IGdzdF9sb2cyIChNQVggKHhtYXggLSB4bWluLCB5bWF4IC0geW1pbikpICogNyAvIDggKyBnc3RfbG9nMiAobik7Ci0gIGlmIChtYXhfYml0cyA+IDY0KQotICAgIHBzaGlmdCA9IG1heF9iaXRzIC0gNjQ7Ci0KLSAgaSA9IDA7Ci0gIGRvIHsKLSNpZmRlZiBERUJVR0dJTkdfRU5BQkxFRAotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssCi0gICAgICAgICJSZXN0YXJ0aW5nIHJlZ3Jlc3Npb24gd2l0aCBwcmVjaXNpb24gc2hpZnQgJXUiLCBwc2hpZnQpOwotI2VuZGlmCi0KLSAgICB4YmFyNCA9IHhiYXIgPj4gcHNoaWZ0OwotICAgIHliYXI0ID0geWJhciA+PiBwc2hpZnQ7Ci0gICAgc3h4ID0gc3l5ID0gc3h5ID0gMDsKLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8IG47IGkrKywgaiArPSA0KSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgbmV3eDQsIG5ld3k0OwotICAgICAgR3N0Q2xvY2tUaW1lRGlmZiB0bXA7Ci0KLSAgICAgIG5ld3g0ID0gbmV3eFtqXSA+PiBwc2hpZnQ7Ci0gICAgICBuZXd5NCA9IG5ld3lbal0gPj4gcHNoaWZ0OwotCi0gICAgICB0bXAgPSAobmV3eDQgKyB4YmFyNCkgKiAobmV3eDQgLSB4YmFyNCk7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAodG1wID4gMCAmJiBzeHggPiAwICYmIChHX01BWElOVDY0IC0gc3h4IDw9IHRtcCkpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAvKiBEcm9wIHNvbWUgcHJlY2lzaW9uIGFuZCByZXN0YXJ0ICovCi0gICAgICAgICAgcHNoaWZ0Kys7Ci0gICAgICAgICAgc3h4IC89IDQ7Ci0gICAgICAgICAgdG1wIC89IDQ7Ci0gICAgICAgIH0gd2hpbGUgKEdfTUFYSU5UNjQgLSBzeHggPD0gdG1wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9IGVsc2UgaWYgKEdfVU5MSUtFTFkgKHRtcCA8IDAgJiYgc3h4IDwgMCAmJiAoR19NQVhJTlQ2NCAtIHN4eCA+PSB0bXApKSkgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgLyogRHJvcCBzb21lIHByZWNpc2lvbiBhbmQgcmVzdGFydCAqLwotICAgICAgICAgIHBzaGlmdCsrOwotICAgICAgICAgIHN4eCAvPSA0OwotICAgICAgICAgIHRtcCAvPSA0OwotICAgICAgICB9IHdoaWxlIChHX01JTklOVDY0IC0gc3h4ID49IHRtcCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc3h4ICs9IHRtcDsKLQotICAgICAgdG1wID0gbmV3eTQgKiBuZXd5NCAtIHliYXI0ICogeWJhcjQ7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAodG1wID4gMCAmJiBzeXkgPiAwICYmIChHX01BWElOVDY0IC0gc3l5IDw9IHRtcCkpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICBwc2hpZnQrKzsKLSAgICAgICAgICBzeXkgLz0gNDsKLSAgICAgICAgICB0bXAgLz0gNDsKLSAgICAgICAgfSB3aGlsZSAoR19NQVhJTlQ2NCAtIHN5eSA8PSB0bXApOwotICAgICAgICBicmVhazsKLSAgICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAodG1wIDwgMCAmJiBzeXkgPCAwICYmIChHX01BWElOVDY0IC0gc3l5ID49IHRtcCkpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICBwc2hpZnQrKzsKLSAgICAgICAgICBzeXkgLz0gNDsKLSAgICAgICAgICB0bXAgLz0gNDsKLSAgICAgICAgfSB3aGlsZSAoR19NSU5JTlQ2NCAtIHN5eSA+PSB0bXApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN5eSArPSB0bXA7Ci0KLSAgICAgIHRtcCA9IG5ld3g0ICogbmV3eTQgLSB4YmFyNCAqIHliYXI0OwotICAgICAgaWYgKEdfVU5MSUtFTFkgKHRtcCA+IDAgJiYgc3h5ID4gMCAmJiAoR19NQVhJTlQ2NCAtIHN4eSA8PSB0bXApKSkgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgcHNoaWZ0Kys7Ci0gICAgICAgICAgc3h5IC89IDQ7Ci0gICAgICAgICAgdG1wIC89IDQ7Ci0gICAgICAgIH0gd2hpbGUgKEdfTUFYSU5UNjQgLSBzeHkgPD0gdG1wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9IGVsc2UgaWYgKEdfVU5MSUtFTFkgKHRtcCA8IDAgJiYgc3h5IDwgMCAmJiAoR19NSU5JTlQ2NCAtIHN4eSA+PSB0bXApKSkgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgcHNoaWZ0Kys7Ci0gICAgICAgICAgc3h5IC89IDQ7Ci0gICAgICAgICAgdG1wIC89IDQ7Ci0gICAgICAgIH0gd2hpbGUgKEdfTUlOSU5UNjQgLSBzeHkgPj0gdG1wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzeHkgKz0gdG1wOwotICAgIH0KLSAgfSB3aGlsZSAoaSA8IG4pOwotCi0gIGlmIChHX1VOTElLRUxZIChzeHggPT0gMCkpCi0gICAgZ290byBpbnZhbGlkOwotCi0gICptX251bSA9IHN4eTsKLSAgKm1fZGVub20gPSBzeHg7Ci0gICpiID0gKHltaW4gKyB5YmFyKSAtIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoeGJhciwgKm1fbnVtLCAqbV9kZW5vbSk7Ci0gIC8qIFJlcG9ydCBiYXNlIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgcmVjZW50IG9ic2VydmF0aW9uICovCi0gICp4YmFzZSA9IHhtYXg7Ci0gICpiICs9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoeG1heCAtIHhtaW4sICptX251bSwgKm1fZGVub20pOwotCi0gICpyX3NxdWFyZWQgPSAoKGRvdWJsZSkgc3h5ICogKGRvdWJsZSkgc3h5KSAvICgoZG91YmxlKSBzeHggKiAoZG91YmxlKSBzeXkpOwotCi0jaWZkZWYgREVCVUdHSU5HX0VOQUJMRUQKLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgIiAgbSAgICAgID0gJWciLCAoKGRvdWJsZSkgKm1fbnVtKSAvICptX2Rlbm9tKTsKLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgIiAgYiAgICAgID0gJSIgR19HVUlOVDY0X0ZPUk1BVCwgKmIpOwotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiICB4YmFzZSAgPSAlIiBHX0dVSU5UNjRfRk9STUFULCAqeGJhc2UpOwotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiICByMiAgICAgPSAlZyIsICpyX3NxdWFyZWQpOwotI2VuZGlmCi0KLSAgcmV0dXJuIFRSVUU7Ci0KLWludmFsaWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAic3h4ID09IDAsIHJlZ3Jlc3Npb24gZmFpbGVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0Y2xvY2suYyBiL2dzdC9nc3RjbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTVmZTc2Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RjbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY3OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGNsb2NrLmM6IENsb2NrIHN1YnN5c3RlbSBmb3IgbWFpbnRhaW5pbmcgdGltZSBzeW5jCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGNsb2NrCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEFic3RyYWN0IGNsYXNzIGZvciBnbG9iYWwgY2xvY2tzCi0gKiBAc2VlX2Fsc286ICNHc3RTeXN0ZW1DbG9jaywgI0dzdFBpcGVsaW5lCi0gKgotICogR1N0cmVhbWVyIHVzZXMgYSBnbG9iYWwgY2xvY2sgdG8gc3luY2hyb25pemUgdGhlIHBsdWdpbnMgaW4gYSBwaXBlbGluZS4KLSAqIERpZmZlcmVudCBjbG9jayBpbXBsZW1lbnRhdGlvbnMgYXJlIHBvc3NpYmxlIGJ5IGltcGxlbWVudGluZyB0aGlzIGFic3RyYWN0Ci0gKiBiYXNlIGNsYXNzIG9yLCBtb3JlIGNvbnZlbmllbnRseSwgYnkgc3ViY2xhc3NpbmcgI0dzdFN5c3RlbUNsb2NrLgotICoKLSAqIFRoZSAjR3N0Q2xvY2sgcmV0dXJucyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB0aW1lIHdpdGggdGhlIG1ldGhvZAotICogZ3N0X2Nsb2NrX2dldF90aW1lKCkuIEl0cyBhY2N1cmFjeSBhbmQgYmFzZSB0aW1lIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMKLSAqIGNsb2NrIGltcGxlbWVudGF0aW9uIGJ1dCB0aW1lIGlzIGFsd2F5cyBleHByZXNzZWQgaW4gbmFub3NlY29uZHMuIFNpbmNlIHRoZQotICogYmFzZWxpbmUgb2YgdGhlIGNsb2NrIGlzIHVuZGVmaW5lZCwgdGhlIGNsb2NrIHRpbWUgcmV0dXJuZWQgaXMgbm90Ci0gKiBtZWFuaW5nZnVsIGluIGl0c2VsZiwgd2hhdCBtYXR0ZXJzIGFyZSB0aGUgZGVsdGFzIGJldHdlZW4gdHdvIGNsb2NrIHRpbWVzLgotICogVGhlIHRpbWUgcmV0dXJuZWQgYnkgYSBjbG9jayBpcyBjYWxsZWQgdGhlIGFic29sdXRlIHRpbWUuCi0gKgotICogVGhlIHBpcGVsaW5lIHVzZXMgdGhlIGNsb2NrIHRvIGNhbGN1bGF0ZSB0aGUgcnVubmluZyB0aW1lLiBVc3VhbGx5IGFsbAotICogcmVuZGVyZXJzIHN5bmNocm9uaXplIHRvIHRoZSBnbG9iYWwgY2xvY2sgdXNpbmcgdGhlIGJ1ZmZlciB0aW1lc3RhbXBzLCB0aGUKLSAqIG5ld3NlZ21lbnQgZXZlbnRzIGFuZCB0aGUgZWxlbWVudCdzIGJhc2UgdGltZSwgc2VlICNHc3RQaXBlbGluZS4KLSAqCi0gKiBBIGNsb2NrIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0IHBlcmlvZGljIGFuZCBzaW5nbGUgc2hvdCBjbG9jawotICogbm90aWZpY2F0aW9ucyBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMuCi0gKgotICogT25lIGZpcnN0IG5lZWRzIHRvIGNyZWF0ZSBhICNHc3RDbG9ja0lEIGZvciB0aGUgcGVyaW9kaWMgb3Igc2luZ2xlIHNob3QKLSAqIG5vdGlmaWNhdGlvbiB1c2luZyBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkKCkgb3IKLSAqIGdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQoKS4KLSAqCi0gKiBUbyBwZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBmb3IgdGhlIHNwZWNpZmljIHRpbWUgb2YgdGhlICNHc3RDbG9ja0lEIHVzZSB0aGUKLSAqIGdzdF9jbG9ja19pZF93YWl0KCkuIFRvIHJlY2VpdmUgYSBjYWxsYmFjayB3aGVuIHRoZSBzcGVjaWZpYyB0aW1lIGlzIHJlYWNoZWQKLSAqIGluIHRoZSBjbG9jayB1c2UgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMoKS4gQm90aCB0aGVzZSBjYWxscyBjYW4gYmUKLSAqIGludGVycnVwdGVkIHdpdGggdGhlIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlKCkgY2FsbC4gSWYgdGhlIGJsb2NraW5nIHdhaXQgaXMKLSAqIHVuc2NoZWR1bGVkIGEgcmV0dXJuIHZhbHVlIG9mICNHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQgaXMgcmV0dXJuZWQuCi0gKgotICogUGVyaW9kaWMgY2FsbGJhY2tzIHNjaGVkdWxlZCBhc3luYyB3aWxsIGJlIHJlcGVhdGVkbHkgY2FsbGVkIGF1dG9tYXRpY2FsbHkKLSAqIHVudGlsIGl0IGlzIHVuc2NoZWR1bGVkLiBUbyBzY2hlZHVsZSBhIHN5bmMgcGVyaW9kaWMgY2FsbGJhY2ssCi0gKiBnc3RfY2xvY2tfaWRfd2FpdCgpIHNob3VsZCBiZSBjYWxsZWQgcmVwZWF0ZWRseS4KLSAqCi0gKiBUaGUgYXN5bmMgY2FsbGJhY2tzIGNhbiBoYXBwZW4gZnJvbSBhbnkgdGhyZWFkLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIGNvcmUKLSAqIG9yIGZyb20gYSBzdHJlYW1pbmcgdGhyZWFkLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGlzLgotICoKLSAqIEEgI0dzdENsb2NrSUQgdGhhdCBoYXMgYmVlbiB1bnNjaGVkdWxlZCBjYW5ub3QgYmUgdXNlZCBhZ2FpbiBmb3IgYW55IHdhaXQKLSAqIG9wZXJhdGlvbiwgYSBuZXcgI0dzdENsb2NrSUQgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHRoZSBvbGQgdW5zY2hlZHVsZWQgb25lCi0gKiBzaG91bGQgYmUgZGVzdHJveWVkIHdpdGggZ3N0X2Nsb2NrX2lkX3VucmVmKCkuCi0gKgotICogSXQgaXMgcG9zc2libGUgdG8gcGVyZm9ybSBhIGJsb2NraW5nIHdhaXQgb24gdGhlIHNhbWUgI0dzdENsb2NrSUQgZnJvbQotICogbXVsdGlwbGUgdGhyZWFkcy4gSG93ZXZlciwgcmVnaXN0ZXJpbmcgdGhlIHNhbWUgI0dzdENsb2NrSUQgZm9yIG11bHRpcGxlCi0gKiBhc3luYyBub3RpZmljYXRpb25zIGlzIG5vdCBwb3NzaWJsZSwgdGhlIGNhbGxiYWNrIHdpbGwgb25seSBiZSBjYWxsZWQgZm9yCi0gKiB0aGUgdGhyZWFkIHJlZ2lzdGVyaW5nIHRoZSBlbnRyeSBsYXN0LgotICoKLSAqIE5vbmUgb2YgdGhlIHdhaXQgb3BlcmF0aW9ucyB1bnJlZiB0aGUgI0dzdENsb2NrSUQsIHRoZSBvd25lciBpcyByZXNwb25zaWJsZQotICogZm9yIHVucmVmZmluZyB0aGUgaWRzIGl0c2VsZi4gVGhpcyBob2xkcyBmb3IgYm90aCBwZXJpb2RpYyBhbmQgc2luZ2xlIHNob3QKLSAqIG5vdGlmaWNhdGlvbnMuIFRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgb3duZXIgb2YgdGhlICNHc3RDbG9ja0lEIGhhcyB0bwotICoga2VlcCBhIGhhbmRsZSB0byB0aGUgI0dzdENsb2NrSUQgdG8gdW5ibG9jayB0aGUgd2FpdCBvbiBGTFVTSElORyBldmVudHMgb3IKLSAqIHN0YXRlIGNoYW5nZXMgYW5kIGlmIHRoZSBlbnRyeSB3b3VsZCBiZSB1bnJlZmZlZCBhdXRvbWF0aWNhbGx5LCB0aGUgaGFuZGxlIAotICogbWlnaHQgYmVjb21lIGludmFsaWQgd2l0aG91dCBhbnkgbm90aWZpY2F0aW9uLgotICoKLSAqIFRoZXNlIGNsb2NrIG9wZXJhdGlvbnMgZG8gbm90IG9wZXJhdGUgb24gdGhlIHJ1bm5pbmcgdGltZSwgc28gdGhlIGNhbGxiYWNrcwotICogd2lsbCBhbHNvIG9jY3VyIHdoZW4gbm90IGluIFBMQVlJTkcgc3RhdGUgYXMgaWYgdGhlIGNsb2NrIGp1c3Qga2VlcHMgb24KLSAqIHJ1bm5pbmcuIFNvbWUgY2xvY2tzIGhvd2V2ZXIgZG8gbm90IHByb2dyZXNzIHdoZW4gdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlZAotICogdGhlIGNsb2NrIGlzIG5vdCBQTEFZSU5HLgotICoKLSAqIFdoZW4gYSBjbG9jayBoYXMgdGhlICNHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUiBmbGFnIHNldCwgaXQgY2FuIGJlCi0gKiBzbGF2ZWQgdG8gYW5vdGhlciAjR3N0Q2xvY2sgd2l0aCB0aGUgZ3N0X2Nsb2NrX3NldF9tYXN0ZXIoKS4gVGhlIGNsb2NrIHdpbGwKLSAqIHRoZW4gYXV0b21hdGljYWxseSBiZSBzeW5jaHJvbml6ZWQgdG8gdGhpcyBtYXN0ZXIgY2xvY2sgYnkgcmVwZWF0ZWRseQotICogc2FtcGxpbmcgdGhlIG1hc3RlciBjbG9jayBhbmQgdGhlIHNsYXZlIGNsb2NrIGFuZCByZWNhbGlicmF0aW5nIHRoZSBzbGF2ZQotICogY2xvY2sgd2l0aCBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uKCkuIFRoaXMgZmVhdHVyZSBpcyBtb3N0bHkgdXNlZnVsIGZvcgotICogcGx1Z2lucyB0aGF0IGhhdmUgYW4gaW50ZXJuYWwgY2xvY2sgYnV0IG11c3Qgb3BlcmF0ZSB3aXRoIGFub3RoZXIgY2xvY2sKLSAqIHNlbGVjdGVkIGJ5IHRoZSAjR3N0UGlwZWxpbmUuICBUaGV5IGNhbiB0cmFjayB0aGUgb2Zmc2V0IGFuZCByYXRlIGRpZmZlcmVuY2UKLSAqIG9mIHRoZWlyIGludGVybmFsIGNsb2NrIHJlbGF0aXZlIHRvIHRoZSBtYXN0ZXIgY2xvY2sgYnkgdXNpbmcgdGhlCi0gKiBnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uKCkgZnVuY3Rpb24uIAotICoKLSAqIFRoZSBtYXN0ZXIvc2xhdmUgc3luY2hyb25pc2F0aW9uIGNhbiBiZSB0dW5lZCB3aXRoIHRoZSAjR3N0Q2xvY2s6dGltZW91dCwKLSAqICNHc3RDbG9jazp3aW5kb3ctc2l6ZSBhbmQgI0dzdENsb2NrOndpbmRvdy10aHJlc2hvbGQgcHJvcGVydGllcy4KLSAqIFRoZSAjR3N0Q2xvY2s6dGltZW91dCBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBpbnRlcnZhbCB0byBzYW1wbGUgdGhlIG1hc3RlcgotICogY2xvY2sgYW5kIHJ1biB0aGUgY2FsaWJyYXRpb24gZnVuY3Rpb25zLiAjR3N0Q2xvY2s6d2luZG93LXNpemUgZGVmaW5lcyB0aGUKLSAqIG51bWJlciBvZiBzYW1wbGVzIHRvIHVzZSB3aGVuIGNhbGlicmF0aW5nIGFuZCAjR3N0Q2xvY2s6d2luZG93LXRocmVzaG9sZAotICogZGVmaW5lcyB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyBiZWZvcmUgdGhlIGNhbGlicmF0aW9uIGlzIHBlcmZvcm1lZC4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLSNpbmNsdWRlICJnc3RjbG9jay5oIgotI2luY2x1ZGUgImdzdGluZm8uaCIKLSNpbmNsdWRlICJnc3R1dGlscy5oIgotI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKLQotLyogI2RlZmluZSBERUJVR0dJTkdfRU5BQkxFRCAqLwotCi0jZGVmaW5lIERFRkFVTFRfV0lORE9XX1NJWkUgICAgICAgICAgICAgMzIKLSNkZWZpbmUgREVGQVVMVF9XSU5ET1dfVEhSRVNIT0xEICAgICAgICA0Ci0jZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgICAgICAgICAgICAgICAgR1NUX1NFQ09ORCAvIDEwCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1dJTkRPV19TSVpFLAotICBQUk9QX1dJTkRPV19USFJFU0hPTEQsCi0gIFBST1BfVElNRU9VVAotfTsKLQotZW51bQotewotICBTSUdOQUxfU1lOQ0VELAotICBTSUdOQUxfTEFTVAotfTsKLQotI2RlZmluZSBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyhjbG9jaykgICAgIGdfbXV0ZXhfbG9jayAoJkdTVF9DTE9DS19DQVNUIChjbG9jayktPnByaXYtPnNsYXZlX2xvY2spCi0jZGVmaW5lIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0soY2xvY2spICAgZ19tdXRleF91bmxvY2sgKCZHU1RfQ0xPQ0tfQ0FTVCAoY2xvY2spLT5wcml2LT5zbGF2ZV9sb2NrKQotCi1zdHJ1Y3QgX0dzdENsb2NrUHJpdmF0ZQotewotICBHTXV0ZXggc2xhdmVfbG9jazsgICAgICAgICAgICAvKiBvcmRlcjogU0xBVkVfTE9DSywgT0JKRUNUX0xPQ0sgKi8KLQotICBHQ29uZCBzeW5jX2NvbmQ7Ci0KLSAgLyogd2l0aCBMT0NLICovCi0gIEdzdENsb2NrVGltZSBpbnRlcm5hbF9jYWxpYnJhdGlvbjsKLSAgR3N0Q2xvY2tUaW1lIGV4dGVybmFsX2NhbGlicmF0aW9uOwotICBHc3RDbG9ja1RpbWUgcmF0ZV9udW1lcmF0b3I7Ci0gIEdzdENsb2NrVGltZSByYXRlX2Rlbm9taW5hdG9yOwotICBHc3RDbG9ja1RpbWUgbGFzdF90aW1lOwotCi0gIC8qIHdpdGggTE9DSyAqLwotICBHc3RDbG9ja1RpbWUgcmVzb2x1dGlvbjsKLQotICAvKiBmb3IgbWFzdGVyL3NsYXZlIGNsb2NrcyAqLwotICBHc3RDbG9jayAqbWFzdGVyOwotCi0gIC8qIHdpdGggU0xBVkVfTE9DSyAqLwotICBnYm9vbGVhbiBmaWxsaW5nOwotICBnaW50IHdpbmRvd19zaXplOwotICBnaW50IHdpbmRvd190aHJlc2hvbGQ7Ci0gIGdpbnQgdGltZV9pbmRleDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVvdXQ7Ci0gIEdzdENsb2NrVGltZSAqdGltZXM7Ci0gIEdzdENsb2NrSUQgY2xvY2tpZDsKLQotICBnaW50IHByZV9jb3VudDsKLSAgZ2ludCBwb3N0X2NvdW50OwotCi0gIGdib29sZWFuIHN5bmNlZDsKLX07Ci0KLS8qIHNlcWxvY2tzICovCi0jZGVmaW5lIHJlYWRfc2VxYmVnaW4oY2xvY2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfYXRvbWljX2ludF9nZXQgKCZjbG9jay0+cHJpdi0+cG9zdF9jb3VudCk7Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLXJlYWRfc2VxcmV0cnkgKEdzdENsb2NrICogY2xvY2ssIGdpbnQgc2VxKQotewotICAvKiBubyByZXRyeSBpZiB0aGUgc2VxbnVtIGRpZCBub3QgY2hhbmdlICovCi0gIGlmIChHX0xJS0VMWSAoc2VxID09IGdfYXRvbWljX2ludF9nZXQgKCZjbG9jay0+cHJpdi0+cHJlX2NvdW50KSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIHdhaXQgZm9yIHRoZSB3cml0ZXIgdG8gZmluaXNoIGFuZCByZXRyeSAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNkZWZpbmUgd3JpdGVfc2VxbG9jayhjbG9jaykgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19hdG9taWNfaW50X2luYyAoJmNsb2NrLT5wcml2LT5wcmVfY291bnQpOyAgICAgXAotfSBHX1NUTVRfRU5EOwotCi0jZGVmaW5lIHdyaXRlX3NlcXVubG9jayhjbG9jaykgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX2F0b21pY19pbnRfaW5jICgmY2xvY2stPnByaXYtPnBvc3RfY291bnQpOyAgICBcCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7ICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORDsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLXN0YXRpYyBjb25zdCBnY2hhciAqCi1nc3RfY2xvY2tfcmV0dXJuX2dldF9uYW1lIChHc3RDbG9ja1JldHVybiByZXQpCi17Ci0gIHN3aXRjaCAocmV0KSB7Ci0gICAgY2FzZSBHU1RfQ0xPQ0tfT0s6Ci0gICAgICByZXR1cm4gIm9rIjsKLSAgICBjYXNlIEdTVF9DTE9DS19FQVJMWToKLSAgICAgIHJldHVybiAiZWFybHkiOwotICAgIGNhc2UgR1NUX0NMT0NLX1VOU0NIRURVTEVEOgotICAgICAgcmV0dXJuICJ1bnNjaGVkdWxlZCI7Ci0gICAgY2FzZSBHU1RfQ0xPQ0tfQlVTWToKLSAgICAgIHJldHVybiAiYnVzeSI7Ci0gICAgY2FzZSBHU1RfQ0xPQ0tfQkFEVElNRToKLSAgICAgIHJldHVybiAiYmFkLXRpbWUiOwotICAgIGNhc2UgR1NUX0NMT0NLX0VSUk9SOgotICAgICAgcmV0dXJuICJlcnJvciI7Ci0gICAgY2FzZSBHU1RfQ0xPQ0tfVU5TVVBQT1JURUQ6Ci0gICAgICByZXR1cm4gInVuc3VwcG9ydGVkIjsKLSAgICBjYXNlIEdTVF9DTE9DS19ET05FOgotICAgICAgcmV0dXJuICJkb25lIjsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gInVua25vd24iOwotfQotI2VuZGlmIC8qIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLwotCi1zdGF0aWMgdm9pZCBnc3RfY2xvY2tfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfY2xvY2tfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3RfY2xvY2tfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2Nsb2NrX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGd1aW50IGdzdF9jbG9ja19zaWduYWxzW1NJR05BTF9MQVNUXSA9IHsgMCB9OwotCi1zdGF0aWMgR3N0Q2xvY2tJRAotZ3N0X2Nsb2NrX2VudHJ5X25ldyAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWUsCi0gICAgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBHc3RDbG9ja0VudHJ5VHlwZSB0eXBlKQotewotICBHc3RDbG9ja0VudHJ5ICplbnRyeTsKLQotICBlbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RDbG9ja0VudHJ5KTsKLQotICAvKiBGSVhNRTogYWRkIHRyYWNlciBob29rIGZvciBzdHJ1Y3QgYWxsb2NhdGlvbnMgc3VjaCBhcyBjbG9jayBlbnRyaWVzICovCi0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAotICAgICAgImNyZWF0ZWQgZW50cnkgJXAsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULCBlbnRyeSwgR1NUX1RJTUVfQVJHUyAodGltZSkpOwotCi0gIGVudHJ5LT5yZWZjb3VudCA9IDE7Ci0gIGVudHJ5LT5jbG9jayA9IGNsb2NrOwotICBlbnRyeS0+dHlwZSA9IHR5cGU7Ci0gIGVudHJ5LT50aW1lID0gdGltZTsKLSAgZW50cnktPmludGVydmFsID0gaW50ZXJ2YWw7Ci0gIGVudHJ5LT5zdGF0dXMgPSBHU1RfQ0xPQ0tfT0s7Ci0gIGVudHJ5LT5mdW5jID0gTlVMTDsKLSAgZW50cnktPnVzZXJfZGF0YSA9IE5VTEw7Ci0gIGVudHJ5LT5kZXN0cm95X2RhdGEgPSBOVUxMOwotICBlbnRyeS0+dW5zY2hlZHVsZWQgPSBGQUxTRTsKLSAgZW50cnktPndva2VuX3VwID0gRkFMU0U7Ci0KLSAgcmV0dXJuIChHc3RDbG9ja0lEKSBlbnRyeTsKLX0KLQotLyogV0FSTklORyA6IERvZXMgbm90IG1vZGlmeSB0aGUgcmVmY291bnQKLSAqIFdBUk5JTkcgOiBEbyBub3QgdXNlIGlmIGEgcGVuZGluZyBjbG9jayBvcGVyYXRpb24gaXMgaGFwcGVuaW5nIG9uIHRoYXQgZW50cnkgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Nsb2NrX2VudHJ5X3JlaW5pdCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tFbnRyeSAqIGVudHJ5LAotICAgIEdzdENsb2NrVGltZSB0aW1lLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIEdzdENsb2NrRW50cnlUeXBlIHR5cGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeS0+c3RhdHVzICE9IEdTVF9DTE9DS19CVVNZLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeS0+Y2xvY2sgPT0gY2xvY2ssIEZBTFNFKTsKLQotICBlbnRyeS0+dHlwZSA9IHR5cGU7Ci0gIGVudHJ5LT50aW1lID0gdGltZTsKLSAgZW50cnktPmludGVydmFsID0gaW50ZXJ2YWw7Ci0gIGVudHJ5LT5zdGF0dXMgPSBHU1RfQ0xPQ0tfT0s7Ci0gIGVudHJ5LT51bnNjaGVkdWxlZCA9IEZBTFNFOwotICBlbnRyeS0+d29rZW5fdXAgPSBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0OgotICogQGNsb2NrOiBhICNHc3RDbG9jawotICogQGlkOiBhICNHc3RDbG9ja0lECi0gKiBAdGltZTogVGhlIHJlcXVlc3RlZCB0aW1lLgotICoKLSAqIFJlaW5pdGlhbGl6ZXMgdGhlIHByb3ZpZGVkIHNpbmdsZSBzaG90IEBpZCB0byB0aGUgcHJvdmlkZWQgdGltZS4gRG9lcyBub3QKLSAqIG1vZGlmeSB0aGUgcmVmZXJlbmNlIGNvdW50LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBHc3RDbG9ja0lEIGNvdWxkIGJlIHJlaW5pdGlhbGl6ZWQgdG8gdGhlIHByb3ZpZGVkCi0gKiBAdGltZSwgZWxzZSAlRkFMU0UuCi0gKi8KLWdib29sZWFuCi1nc3RfY2xvY2tfc2luZ2xlX3Nob3RfaWRfcmVpbml0IChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja0lEIGlkLAotICAgIEdzdENsb2NrVGltZSB0aW1lKQotewotICByZXR1cm4gZ3N0X2Nsb2NrX2VudHJ5X3JlaW5pdCAoY2xvY2ssIChHc3RDbG9ja0VudHJ5ICopIGlkLCB0aW1lLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSk7Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX3BlcmlvZGljX2lkX3JlaW5pdDoKLSAqIEBjbG9jazogYSAjR3N0Q2xvY2sKLSAqIEBpZDogYSAjR3N0Q2xvY2tJRAotICogQHN0YXJ0X3RpbWU6IHRoZSByZXF1ZXN0ZWQgc3RhcnQgdGltZQotICogQGludGVydmFsOiB0aGUgcmVxdWVzdGVkIGludGVydmFsCi0gKgotICogUmVpbml0aWFsaXplcyB0aGUgcHJvdmlkZWQgcGVyaW9kaWMgQGlkIHRvIHRoZSBwcm92aWRlZCBzdGFydCB0aW1lIGFuZAotICogaW50ZXJ2YWwuIERvZXMgbm90IG1vZGlmeSB0aGUgcmVmZXJlbmNlIGNvdW50LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBHc3RDbG9ja0lEIGNvdWxkIGJlIHJlaW5pdGlhbGl6ZWQgdG8gdGhlIHByb3ZpZGVkCi0gKiBAdGltZSwgZWxzZSAlRkFMU0UuCi0gKi8KLWdib29sZWFuCi1nc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0IChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja0lEIGlkLAotICAgIEdzdENsb2NrVGltZSBzdGFydF90aW1lLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwpCi17Ci0gIHJldHVybiBnc3RfY2xvY2tfZW50cnlfcmVpbml0IChjbG9jaywgKEdzdENsb2NrRW50cnkgKikgaWQsIHN0YXJ0X3RpbWUsCi0gICAgICBpbnRlcnZhbCwgR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDKTsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfaWRfcmVmOgotICogQGlkOiBUaGUgI0dzdENsb2NrSUQgdG8gcmVmCi0gKgotICogSW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIGdpdmVuIEBpZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBzYW1lICNHc3RDbG9ja0lEIHdpdGggaW5jcmVhc2VkIHJlZmNvdW50LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdENsb2NrSUQKLWdzdF9jbG9ja19pZF9yZWYgKEdzdENsb2NrSUQgaWQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpZCAhPSBOVUxMLCBOVUxMKTsKLQotICBnX2F0b21pY19pbnRfaW5jICgmKChHc3RDbG9ja0VudHJ5ICopIGlkKS0+cmVmY291bnQpOwotCi0gIHJldHVybiBpZDsKLX0KLQotc3RhdGljIHZvaWQKLV9nc3RfY2xvY2tfaWRfZnJlZSAoR3N0Q2xvY2tJRCBpZCkKLXsKLSAgR3N0Q2xvY2tFbnRyeSAqZW50cnk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGlkICE9IE5VTEwpOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJmcmVlZCBlbnRyeSAlcCIsIGlkKTsKLSAgZW50cnkgPSAoR3N0Q2xvY2tFbnRyeSAqKSBpZDsKLSAgaWYgKGVudHJ5LT5kZXN0cm95X2RhdGEpCi0gICAgZW50cnktPmRlc3Ryb3lfZGF0YSAoZW50cnktPnVzZXJfZGF0YSk7Ci0KLSAgLyogRklYTUU6IGFkZCB0cmFjZXIgaG9vayBmb3Igc3RydWN0IGFsbG9jYXRpb25zIHN1Y2ggYXMgY2xvY2sgZW50cmllcyAqLwotCi0gIGdfc2xpY2VfZnJlZSAoR3N0Q2xvY2tFbnRyeSwgaWQpOwotfQotCi0vKioKLSAqIGdzdF9jbG9ja19pZF91bnJlZjoKLSAqIEBpZDogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgI0dzdENsb2NrSUQgdG8gdW5yZWYKLSAqCi0gKiBVbnJlZiBnaXZlbiBAaWQuIFdoZW4gdGhlIHJlZmNvdW50IHJlYWNoZXMgMCB0aGUKLSAqICNHc3RDbG9ja0lEIHdpbGwgYmUgZnJlZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2Nsb2NrX2lkX3VucmVmIChHc3RDbG9ja0lEIGlkKQotewotICBnaW50IHplcm87Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoaWQgIT0gTlVMTCk7Ci0KLSAgemVybyA9IGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCYoKEdzdENsb2NrRW50cnkgKikgaWQpLT5yZWZjb3VudCk7Ci0gIC8qIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHJlZmNvdW50IGF0IHplcm8sIGZyZWUgdGhlIGlkICovCi0gIGlmICh6ZXJvKSB7Ci0gICAgX2dzdF9jbG9ja19pZF9mcmVlIChpZCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkOgotICogQGNsb2NrOiBUaGUgI0dzdENsb2NrSUQgdG8gZ2V0IGEgc2luZ2xlIHNob3Qgbm90aWZpY2F0aW9uIGZyb20KLSAqIEB0aW1lOiB0aGUgcmVxdWVzdGVkIHRpbWUKLSAqCi0gKiBHZXQgYSAjR3N0Q2xvY2tJRCBmcm9tIEBjbG9jayB0byB0cmlnZ2VyIGEgc2luZ2xlIHNob3QKLSAqIG5vdGlmaWNhdGlvbiBhdCB0aGUgcmVxdWVzdGVkIHRpbWUuIFRoZSBzaW5nbGUgc2hvdCBpZCBzaG91bGQgYmUKLSAqIHVucmVmZmVkIGFmdGVyIHVzYWdlLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9jbG9ja19pZF91bnJlZgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2xvY2tJRCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgdGhlCi0gKiAgICAgdGltZSBub3RpZmljYXRpb24uCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0Q2xvY2tJRAotZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9jbG9ja19lbnRyeV9uZXcgKGNsb2NrLAotICAgICAgdGltZSwgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSk7Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZDoKLSAqIEBjbG9jazogVGhlICNHc3RDbG9ja0lEIHRvIGdldCBhIHBlcmlvZGljIG5vdGlmaWNhdGlvbiBpZCBmcm9tCi0gKiBAc3RhcnRfdGltZTogdGhlIHJlcXVlc3RlZCBzdGFydCB0aW1lCi0gKiBAaW50ZXJ2YWw6IHRoZSByZXF1ZXN0ZWQgaW50ZXJ2YWwKLSAqCi0gKiBHZXQgYW4gSUQgZnJvbSBAY2xvY2sgdG8gdHJpZ2dlciBhIHBlcmlvZGljIG5vdGlmaWNhdGlvbi4KLSAqIFRoZSBwZXJpb2RpYyBub3RpZmljYXRpb25zIHdpbGwgc3RhcnQgYXQgdGltZSBAc3RhcnRfdGltZSBhbmQKLSAqIHdpbGwgdGhlbiBiZSBmaXJlZCB3aXRoIHRoZSBnaXZlbiBAaW50ZXJ2YWwuIEBpZCBzaG91bGQgYmUgdW5yZWZmZWQKLSAqIGFmdGVyIHVzYWdlLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9jbG9ja19pZF91bnJlZgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2xvY2tJRCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgdGhlCi0gKiAgICAgdGltZSBub3RpZmljYXRpb24uCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0Q2xvY2tJRAotZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWUsCi0gICAgR3N0Q2xvY2tUaW1lIGludGVydmFsKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jayksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXJ0X3RpbWUpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGludGVydmFsICE9IDAsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGludGVydmFsKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9jbG9ja19lbnRyeV9uZXcgKGNsb2NrLAotICAgICAgc3RhcnRfdGltZSwgaW50ZXJ2YWwsIEdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQyk7Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYzoKLSAqIEBpZDE6IEEgI0dzdENsb2NrSUQKLSAqIEBpZDI6IEEgI0dzdENsb2NrSUQgdG8gY29tcGFyZSB3aXRoCi0gKgotICogQ29tcGFyZXMgdGhlIHR3byAjR3N0Q2xvY2tJRCBpbnN0YW5jZXMuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQKLSAqIGFzIGEgR0NvbXBhcmVGdW5jIHdoZW4gc29ydGluZyBpZHMuCi0gKgotICogUmV0dXJuczogbmVnYXRpdmUgdmFsdWUgaWYgYSA8IGI7IHplcm8gaWYgYSA9IGI7IHBvc2l0aXZlIHZhbHVlIGlmIGEgPiBiCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2ludAotZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBpZDEsIGdjb25zdHBvaW50ZXIgaWQyKQotewotICBHc3RDbG9ja0VudHJ5ICplbnRyeTEsICplbnRyeTI7Ci0KLSAgZW50cnkxID0gKEdzdENsb2NrRW50cnkgKikgaWQxOwotICBlbnRyeTIgPSAoR3N0Q2xvY2tFbnRyeSAqKSBpZDI7Ci0KLSAgaWYgKEdTVF9DTE9DS19FTlRSWV9USU1FIChlbnRyeTEpID4gR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5MikpIHsKLSAgICByZXR1cm4gMTsKLSAgfQotICBpZiAoR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5MSkgPCBHU1RfQ0xPQ0tfRU5UUllfVElNRSAoZW50cnkyKSkgewotICAgIHJldHVybiAtMTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfaWRfZ2V0X3RpbWU6Ci0gKiBAaWQ6IFRoZSAjR3N0Q2xvY2tJRCB0byBxdWVyeQotICoKLSAqIEdldCB0aGUgdGltZSBvZiB0aGUgY2xvY2sgSUQKLSAqCi0gKiBSZXR1cm5zOiB0aGUgdGltZSBvZiB0aGUgZ2l2ZW4gY2xvY2sgaWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0Q2xvY2tUaW1lCi1nc3RfY2xvY2tfaWRfZ2V0X3RpbWUgKEdzdENsb2NrSUQgaWQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpZCAhPSBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICByZXR1cm4gR1NUX0NMT0NLX0VOVFJZX1RJTUUgKChHc3RDbG9ja0VudHJ5ICopIGlkKTsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfaWRfd2FpdDoKLSAqIEBpZDogVGhlICNHc3RDbG9ja0lEIHRvIHdhaXQgb24KLSAqIEBqaXR0ZXI6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBqaXR0ZXIsCi0gKiAgICAgY2FuIGJlICVOVUxMLgotICoKLSAqIFBlcmZvcm0gYSBibG9ja2luZyB3YWl0IG9uIEBpZC4gCi0gKiBAaWQgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCgpCi0gKiBvciBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkKCkgYW5kIHNob3VsZCBub3QgaGF2ZSBiZWVuIHVuc2NoZWR1bGVkCi0gKiB3aXRoIGEgY2FsbCB0byBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpLiAKLSAqCi0gKiBJZiB0aGUgQGppdHRlciBhcmd1bWVudCBpcyBub3QgJU5VTEwgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAjR1NUX0NMT0NLX09LCi0gKiBvciAjR1NUX0NMT0NLX0VBUkxZLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGRpZmZlcmVuY2UKLSAqIGFnYWluc3QgdGhlIGNsb2NrIGFuZCB0aGUgdGltZSBvZiBAaWQgd2hlbiB0aGlzIG1ldGhvZCB3YXMKLSAqIGNhbGxlZC4gCi0gKiBQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgaG93IGxhdGUgQGlkIHdhcyByZWxhdGl2ZSB0byB0aGUgY2xvY2sKLSAqIChpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gI0dTVF9DTE9DS19FQVJMWSkuIAotICogTmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGhvdyBtdWNoIHRpbWUgd2FzIHNwZW50IHdhaXRpbmcgb24gdGhlIGNsb2NrIAotICogYmVmb3JlIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQuCi0gKgotICogUmV0dXJuczogdGhlIHJlc3VsdCBvZiB0aGUgYmxvY2tpbmcgd2FpdC4gI0dTVF9DTE9DS19FQVJMWSB3aWxsIGJlIHJldHVybmVkCi0gKiBpZiB0aGUgY3VycmVudCBjbG9jayB0aW1lIGlzIHBhc3QgdGhlIHRpbWUgb2YgQGlkLCAjR1NUX0NMT0NLX09LIGlmIAotICogQGlkIHdhcyBzY2hlZHVsZWQgaW4gdGltZS4gI0dTVF9DTE9DS19VTlNDSEVEVUxFRCBpZiBAaWQgd2FzIAotICogdW5zY2hlZHVsZWQgd2l0aCBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSgpLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdENsb2NrUmV0dXJuCi1nc3RfY2xvY2tfaWRfd2FpdCAoR3N0Q2xvY2tJRCBpZCwgR3N0Q2xvY2tUaW1lRGlmZiAqIGppdHRlcikKLXsKLSAgR3N0Q2xvY2tFbnRyeSAqZW50cnk7Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tSZXR1cm4gcmVzOwotICBHc3RDbG9ja1RpbWUgcmVxdWVzdGVkOwotICBHc3RDbG9ja0NsYXNzICpjY2xhc3M7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlkICE9IE5VTEwsIEdTVF9DTE9DS19FUlJPUik7Ci0KLSAgZW50cnkgPSAoR3N0Q2xvY2tFbnRyeSAqKSBpZDsKLSAgcmVxdWVzdGVkID0gR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5KTsKLQotICBjbG9jayA9IEdTVF9DTE9DS19FTlRSWV9DTE9DSyAoZW50cnkpOwotCi0gIC8qIGNhbid0IHN5bmMgb24gaW52YWxpZCB0aW1lcyAqLwotICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChyZXF1ZXN0ZWQpKSkKLSAgICBnb3RvIGludmFsaWRfdGltZTsKLQotICBjY2xhc3MgPSBHU1RfQ0xPQ0tfR0VUX0NMQVNTIChjbG9jayk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLCAid2FpdGluZyBvbiBjbG9jayBlbnRyeSAlcCIsIGlkKTsKLQotICAvKiBpZiB3ZSBoYXZlIGEgd2FpdF9qaXR0ZXIgZnVuY3Rpb24sIHVzZSB0aGF0ICovCi0gIGlmIChHX1VOTElLRUxZIChjY2xhc3MtPndhaXQgPT0gTlVMTCkpCi0gICAgZ290byBub3Rfc3VwcG9ydGVkOwotCi0gIHJlcyA9IGNjbGFzcy0+d2FpdCAoY2xvY2ssIGVudHJ5LCBqaXR0ZXIpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKLSAgICAgICJkb25lIHdhaXRpbmcgZW50cnkgJXAsIHJlczogJWQgKCVzKSIsIGlkLCByZXMsCi0gICAgICBnc3RfY2xvY2tfcmV0dXJuX2dldF9uYW1lIChyZXMpKTsKLQotICBpZiAoZW50cnktPnR5cGUgPT0gR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDKQotICAgIGVudHJ5LT50aW1lID0gcmVxdWVzdGVkICsgZW50cnktPmludGVydmFsOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1pbnZhbGlkX3RpbWU6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssCi0gICAgICAgICJpbnZhbGlkIHRpbWUgcmVxdWVzdGVkLCByZXR1cm5pbmcgX0JBRFRJTUUiKTsKLSAgICByZXR1cm4gR1NUX0NMT0NLX0JBRFRJTUU7Ci0gIH0KLW5vdF9zdXBwb3J0ZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssICJjbG9jayB3YWl0IGlzIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICByZXR1cm4gR1NUX0NMT0NLX1VOU1VQUE9SVEVEOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmM6Ci0gKiBAaWQ6IGEgI0dzdENsb2NrSUQgdG8gd2FpdCBvbgotICogQGZ1bmM6IFRoZSBjYWxsYmFjayBmdW5jdGlvbgotICogQHVzZXJfZGF0YTogVXNlciBkYXRhIHBhc3NlZCBpbiB0aGUgY2FsbGJhY2sKLSAqIEBkZXN0cm95X2RhdGE6ICNHRGVzdHJveU5vdGlmeSBmb3IgdXNlcl9kYXRhCi0gKgotICogUmVnaXN0ZXIgYSBjYWxsYmFjayBvbiB0aGUgZ2l2ZW4gI0dzdENsb2NrSUQgQGlkIHdpdGggdGhlIGdpdmVuCi0gKiBmdW5jdGlvbiBhbmQgdXNlcl9kYXRhLiBXaGVuIHBhc3NpbmcgYSAjR3N0Q2xvY2tJRCB3aXRoIGFuIGludmFsaWQKLSAqIHRpbWUgdG8gdGhpcyBmdW5jdGlvbiwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5Ci0gKiB3aXRoICBhIHRpbWUgc2V0IHRvIEdTVF9DTE9DS19USU1FX05PTkUuIFRoZSBjYWxsYmFjayB3aWxsCi0gKiBiZSBjYWxsZWQgd2hlbiB0aGUgdGltZSBvZiBAaWQgaGFzIGJlZW4gcmVhY2hlZC4KLSAqCi0gKiBUaGUgY2FsbGJhY2sgQGZ1bmMgY2FuIGJlIGludm9rZWQgZnJvbSBhbnkgdGhyZWFkLCBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlCi0gKiBjb3JlIG9yIGZyb20gYSBzdHJlYW1pbmcgdGhyZWFkLiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGlzLgotICoKLSAqIFJldHVybnM6IHRoZSByZXN1bHQgb2YgdGhlIG5vbiBibG9ja2luZyB3YWl0LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdENsb2NrUmV0dXJuCi1nc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoR3N0Q2xvY2tJRCBpZCwKLSAgICBHc3RDbG9ja0NhbGxiYWNrIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9kYXRhKQotewotICBHc3RDbG9ja0VudHJ5ICplbnRyeTsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja1JldHVybiByZXM7Ci0gIEdzdENsb2NrQ2xhc3MgKmNjbGFzczsKLSAgR3N0Q2xvY2tUaW1lIHJlcXVlc3RlZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWQgIT0gTlVMTCwgR1NUX0NMT0NLX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZ1bmMgIT0gTlVMTCwgR1NUX0NMT0NLX0VSUk9SKTsKLQotICBlbnRyeSA9IChHc3RDbG9ja0VudHJ5ICopIGlkOwotICByZXF1ZXN0ZWQgPSBHU1RfQ0xPQ0tfRU5UUllfVElNRSAoZW50cnkpOwotICBjbG9jayA9IEdTVF9DTE9DS19FTlRSWV9DTE9DSyAoZW50cnkpOwotCi0gIC8qIGNhbid0IHN5bmMgb24gaW52YWxpZCB0aW1lcyAqLwotICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChyZXF1ZXN0ZWQpKSkKLSAgICBnb3RvIGludmFsaWRfdGltZTsKLQotICBjY2xhc3MgPSBHU1RfQ0xPQ0tfR0VUX0NMQVNTIChjbG9jayk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGNjbGFzcy0+d2FpdF9hc3luYyA9PSBOVUxMKSkKLSAgICBnb3RvIG5vdF9zdXBwb3J0ZWQ7Ci0KLSAgZW50cnktPmZ1bmMgPSBmdW5jOwotICBlbnRyeS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotICBlbnRyeS0+ZGVzdHJveV9kYXRhID0gZGVzdHJveV9kYXRhOwotCi0gIHJlcyA9IGNjbGFzcy0+d2FpdF9hc3luYyAoY2xvY2ssIGVudHJ5KTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF90aW1lOgotICB7Ci0gICAgKGZ1bmMpIChjbG9jaywgR1NUX0NMT0NLX1RJTUVfTk9ORSwgaWQsIHVzZXJfZGF0YSk7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAotICAgICAgICAiaW52YWxpZCB0aW1lIHJlcXVlc3RlZCwgcmV0dXJuaW5nIF9CQURUSU1FIik7Ci0gICAgcmV0dXJuIEdTVF9DTE9DS19CQURUSU1FOwotICB9Ci1ub3Rfc3VwcG9ydGVkOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLCAiY2xvY2sgd2FpdCBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgcmV0dXJuIEdTVF9DTE9DS19VTlNVUFBPUlRFRDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlOgotICogQGlkOiBUaGUgaWQgdG8gdW5zY2hlZHVsZQotICoKLSAqIENhbmNlbCBhbiBvdXRzdGFuZGluZyByZXF1ZXN0IHdpdGggQGlkLiBUaGlzIGNhbiBlaXRoZXIKLSAqIGJlIGFuIG91dHN0YW5kaW5nIGFzeW5jIG5vdGlmaWNhdGlvbiBvciBhIHBlbmRpbmcgc3luYyBub3RpZmljYXRpb24uCi0gKiBBZnRlciB0aGlzIGNhbGwsIEBpZCBjYW5ub3QgYmUgdXNlZCBhbnltb3JlIHRvIHJlY2VpdmUgc3luYyBvcgotICogYXN5bmMgbm90aWZpY2F0aW9ucywgeW91IG5lZWQgdG8gY3JlYXRlIGEgbmV3ICNHc3RDbG9ja0lELgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChHc3RDbG9ja0lEIGlkKQotewotICBHc3RDbG9ja0VudHJ5ICplbnRyeTsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja0NsYXNzICpjY2xhc3M7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoaWQgIT0gTlVMTCk7Ci0KLSAgZW50cnkgPSAoR3N0Q2xvY2tFbnRyeSAqKSBpZDsKLSAgY2xvY2sgPSBlbnRyeS0+Y2xvY2s7Ci0KLSAgY2NsYXNzID0gR1NUX0NMT0NLX0dFVF9DTEFTUyAoY2xvY2spOwotCi0gIGlmIChHX0xJS0VMWSAoY2NsYXNzLT51bnNjaGVkdWxlKSkKLSAgICBjY2xhc3MtPnVuc2NoZWR1bGUgKGNsb2NrLCBlbnRyeSk7Ci19Ci0KLQotLyoKLSAqIEdzdENsb2NrIGFic3RyYWN0IGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24KLSAqLwotI2RlZmluZSBnc3RfY2xvY2tfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfQUJTVFJBQ1RfVFlQRSAoR3N0Q2xvY2ssIGdzdF9jbG9jaywgR1NUX1RZUEVfT0JKRUNUKTsKLQotc3RhdGljIHZvaWQKLWdzdF9jbG9ja19jbGFzc19pbml0IChHc3RDbG9ja0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9jbG9ja19kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9jbG9ja19maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Nsb2NrX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2Nsb2NrX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1dJTkRPV19TSVpFLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIndpbmRvdy1zaXplIiwgIldpbmRvdyBzaXplIiwKLSAgICAgICAgICAiVGhlIHNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIHRvIGNhbGN1bGF0ZSByYXRlIGFuZCBvZmZzZXQiLCAyLCAxMDI0LAotICAgICAgICAgIERFRkFVTFRfV0lORE9XX1NJWkUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1dJTkRPV19USFJFU0hPTEQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgid2luZG93LXRocmVzaG9sZCIsICJXaW5kb3cgdGhyZXNob2xkIiwKLSAgICAgICAgICAiVGhlIHRocmVzaG9sZCB0byBzdGFydCBjYWxjdWxhdGluZyByYXRlIGFuZCBvZmZzZXQiLCAyLCAxMDI0LAotICAgICAgICAgIERFRkFVTFRfV0lORE9XX1RIUkVTSE9MRCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9USU1FT1VULAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInRpbWVvdXQiLCAiVGltZW91dCIsCi0gICAgICAgICAgIlRoZSBhbW91bnQgb2YgdGltZSwgaW4gbmFub3NlY29uZHMsIHRvIHNhbXBsZSBtYXN0ZXIgYW5kIHNsYXZlIGNsb2NrcyIsCi0gICAgICAgICAgMCwgR19NQVhVSU5UNjQsIERFRkFVTFRfVElNRU9VVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0Q2xvY2s6OnN5bmNlZDoKLSAgICogQGNsb2NrOiB0aGUgY2xvY2sKLSAgICogQHN5bmNlZDogaWYgdGhlIGNsb2NrIGlzIHN5bmNlZCBub3cKLSAgICoKLSAgICogU2lnbmFsZWQgb24gY2xvY2tzIHdpdGggR1NUX0NMT0NLX0ZMQUdfTkVFRFNfU1RBUlRVUF9TWU5DIHNldCBvbmNlCi0gICAqIHRoZSBjbG9jayBpcyBzeW5jaHJvbml6ZWQsIG9yIHdoZW4gaXQgY29tcGxldGVseSBsb3N0IHN5bmNocm9uaXphdGlvbi4KLSAgICogVGhpcyBzaWduYWwgd2lsbCBub3QgYmUgZW1pdHRlZCBvbiBjbG9ja3Mgd2l0aG91dCB0aGUgZmxhZy4KLSAgICoKLSAgICogVGhpcyBzaWduYWwgd2lsbCBiZSBlbWl0dGVkIGZyb20gYW4gYXJiaXRyYXJ5IHRocmVhZCwgbW9zdCBsaWtlbHkgbm90Ci0gICAqIHRoZSBhcHBsaWNhdGlvbidzIG1haW4gdGhyZWFkLgotICAgKgotICAgKiBTaW5jZTogMS42Ci0gICAqLwotICBnc3RfY2xvY2tfc2lnbmFsc1tTSUdOQUxfU1lOQ0VEXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJzeW5jZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgIDAsIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9CT09MRUFOKTsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdENsb2NrUHJpdmF0ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Nsb2NrX2luaXQgKEdzdENsb2NrICogY2xvY2spCi17Ci0gIEdzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLQotICBjbG9jay0+cHJpdiA9IHByaXYgPQotICAgICAgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChjbG9jaywgR1NUX1RZUEVfQ0xPQ0ssIEdzdENsb2NrUHJpdmF0ZSk7Ci0KLSAgcHJpdi0+bGFzdF90aW1lID0gMDsKLQotICBwcml2LT5pbnRlcm5hbF9jYWxpYnJhdGlvbiA9IDA7Ci0gIHByaXYtPmV4dGVybmFsX2NhbGlicmF0aW9uID0gMDsKLSAgcHJpdi0+cmF0ZV9udW1lcmF0b3IgPSAxOwotICBwcml2LT5yYXRlX2Rlbm9taW5hdG9yID0gMTsKLQotICBnX211dGV4X2luaXQgKCZwcml2LT5zbGF2ZV9sb2NrKTsKLSAgZ19jb25kX2luaXQgKCZwcml2LT5zeW5jX2NvbmQpOwotICBwcml2LT53aW5kb3dfc2l6ZSA9IERFRkFVTFRfV0lORE9XX1NJWkU7Ci0gIHByaXYtPndpbmRvd190aHJlc2hvbGQgPSBERUZBVUxUX1dJTkRPV19USFJFU0hPTEQ7Ci0gIHByaXYtPmZpbGxpbmcgPSBUUlVFOwotICBwcml2LT50aW1lX2luZGV4ID0gMDsKLSAgcHJpdi0+dGltZW91dCA9IERFRkFVTFRfVElNRU9VVDsKLSAgcHJpdi0+dGltZXMgPSBnX25ldzAgKEdzdENsb2NrVGltZSwgNCAqIHByaXYtPndpbmRvd19zaXplKTsKLQotICAvKiBjbGVhciBmbG9hdGluZyBmbGFnICovCi0gIGdzdF9vYmplY3RfcmVmX3NpbmsgKGNsb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jbG9ja19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RDbG9jayAqY2xvY2sgPSBHU1RfQ0xPQ0sgKG9iamVjdCk7Ci0gIEdzdENsb2NrICoqbWFzdGVyX3A7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChjbG9jayk7Ci0gIG1hc3Rlcl9wID0gJmNsb2NrLT5wcml2LT5tYXN0ZXI7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgbWFzdGVyX3AsIE5VTEwpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Nsb2NrX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RDbG9jayAqY2xvY2sgPSBHU1RfQ0xPQ0sgKG9iamVjdCk7Ci0KLSAgR1NUX0NMT0NLX1NMQVZFX0xPQ0sgKGNsb2NrKTsKLSAgaWYgKGNsb2NrLT5wcml2LT5jbG9ja2lkKSB7Ci0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGNsb2NrLT5wcml2LT5jbG9ja2lkKTsKLSAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrLT5wcml2LT5jbG9ja2lkKTsKLSAgICBjbG9jay0+cHJpdi0+Y2xvY2tpZCA9IE5VTEw7Ci0gIH0KLSAgZ19mcmVlIChjbG9jay0+cHJpdi0+dGltZXMpOwotICBjbG9jay0+cHJpdi0+dGltZXMgPSBOVUxMOwotICBHU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLIChjbG9jayk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJmNsb2NrLT5wcml2LT5zbGF2ZV9sb2NrKTsKLSAgZ19jb25kX2NsZWFyICgmY2xvY2stPnByaXYtPnN5bmNfY29uZCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKioKLSAqIGdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbjoKLSAqIEBjbG9jazogYSAjR3N0Q2xvY2sKLSAqIEByZXNvbHV0aW9uOiBUaGUgcmVzb2x1dGlvbiB0byBzZXQKLSAqCi0gKiBTZXQgdGhlIGFjY3VyYWN5IG9mIHRoZSBjbG9jay4gU29tZSBjbG9ja3MgaGF2ZSB0aGUgcG9zc2liaWxpdHkgdG8gb3BlcmF0ZQotICogd2l0aCBkaWZmZXJlbnQgYWNjdXJhY3kgYXQgdGhlIGV4cGVuc2Ugb2YgbW9yZSByZXNvdXJjZSB1c2FnZS4gVGhlcmUgaXMKLSAqIG5vcm1hbGx5IG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHJlc29sdXRpb24gb2YgYSBjbG9jay4gVGhlIHJlc29sdXRpb24KLSAqIG9mIGEgY2xvY2sgY2FuIG9ubHkgYmUgY2hhbmdlZCBpZiB0aGUgY2xvY2sgaGFzIHRoZQotICogI0dTVF9DTE9DS19GTEFHX0NBTl9TRVRfUkVTT0xVVElPTiBmbGFnIHNldC4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbmV3IHJlc29sdXRpb24gb2YgdGhlIGNsb2NrLgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbiAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHJlc29sdXRpb24pCi17Ci0gIEdzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLSAgR3N0Q2xvY2tDbGFzcyAqY2NsYXNzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZXNvbHV0aW9uICE9IDAsIDApOwotCi0gIGNjbGFzcyA9IEdTVF9DTE9DS19HRVRfQ0xBU1MgKGNsb2NrKTsKLSAgcHJpdiA9IGNsb2NrLT5wcml2OwotCi0gIGlmIChjY2xhc3MtPmNoYW5nZV9yZXNvbHV0aW9uKQotICAgIHByaXYtPnJlc29sdXRpb24gPQotICAgICAgICBjY2xhc3MtPmNoYW5nZV9yZXNvbHV0aW9uIChjbG9jaywgcHJpdi0+cmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7Ci0KLSAgcmV0dXJuIHByaXYtPnJlc29sdXRpb247Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uOgotICogQGNsb2NrOiBhICNHc3RDbG9jawotICoKLSAqIEdldCB0aGUgYWNjdXJhY3kgb2YgdGhlIGNsb2NrLiBUaGUgYWNjdXJhY3kgb2YgdGhlIGNsb2NrIGlzIHRoZSBncmFudWxhcml0eQotICogb2YgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBnc3RfY2xvY2tfZ2V0X3RpbWUoKS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2sgaW4gdW5pdHMgb2YgI0dzdENsb2NrVGltZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9jbG9ja19nZXRfcmVzb2x1dGlvbiAoR3N0Q2xvY2sgKiBjbG9jaykKLXsKLSAgR3N0Q2xvY2tDbGFzcyAqY2NsYXNzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgMCk7Ci0KLSAgY2NsYXNzID0gR1NUX0NMT0NLX0dFVF9DTEFTUyAoY2xvY2spOwotCi0gIGlmIChjY2xhc3MtPmdldF9yZXNvbHV0aW9uKQotICAgIHJldHVybiBjY2xhc3MtPmdldF9yZXNvbHV0aW9uIChjbG9jayk7Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLS8qIEZJWE1FIDIuMDogUmVtb3ZlIGNsb2NrIHBhcmFtZXRlciBiZWxvdyAqLwotLyoqCi0gKiBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb246Ci0gKiBAY2xvY2s6IChhbGxvdy1ub25lKTogYSAjR3N0Q2xvY2sgdG8gdXNlCi0gKiBAaW50ZXJuYWxfdGFyZ2V0OiBhIGNsb2NrIHRpbWUKLSAqIEBjaW50ZXJuYWw6IGEgcmVmZXJlbmNlIGludGVybmFsIHRpbWUKLSAqIEBjZXh0ZXJuYWw6IGEgcmVmZXJlbmNlIGV4dGVybmFsIHRpbWUKLSAqIEBjbnVtOiB0aGUgbnVtZXJhdG9yIG9mIHRoZSByYXRlIG9mIHRoZSBjbG9jayByZWxhdGl2ZSB0byBpdHMKLSAqICAgICAgICBpbnRlcm5hbCB0aW1lCi0gKiBAY2Rlbm9tOiB0aGUgZGVub21pbmF0b3Igb2YgdGhlIHJhdGUgb2YgdGhlIGNsb2NrCi0gKgotICogQ29udmVydHMgdGhlIGdpdmVuIEBpbnRlcm5hbF90YXJnZXQgY2xvY2sgdGltZSB0byB0aGUgZXh0ZXJuYWwgdGltZSwKLSAqIHVzaW5nIHRoZSBwYXNzZWQgY2FsaWJyYXRpb24gcGFyYW1ldGVycy4gVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUKLSAqIHNhbWUgY2FsY3VsYXRpb24gYXMgZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCgpIHdoZW4gY2FsbGVkIHVzaW5nIHRoZQotICogY3VycmVudCBjYWxpYnJhdGlvbiBwYXJhbWV0ZXJzLCBidXQgZG9lc24ndCBlbnN1cmUgYSBtb25vdG9uaWNhbGx5Ci0gKiBpbmNyZWFzaW5nIHJlc3VsdCBhcyBnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkKCkgZG9lcy4KLSAqCi0gKiBOb3RlOiBUaGUgQGNsb2NrIHBhcmFtZXRlciBpcyB1bnVzZWQgYW5kIGNhbiBiZSBOVUxMCi0gKgotICogUmV0dXJuczogdGhlIGNvbnZlcnRlZCB0aW1lIG9mIHRoZSBjbG9jay4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdENsb2NrVGltZQotZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uIChHc3RDbG9jayAqIGNsb2NrLAotICAgIEdzdENsb2NrVGltZSBpbnRlcm5hbF90YXJnZXQsIEdzdENsb2NrVGltZSBjaW50ZXJuYWwsCi0gICAgR3N0Q2xvY2tUaW1lIGNleHRlcm5hbCwgR3N0Q2xvY2tUaW1lIGNudW0sIEdzdENsb2NrVGltZSBjZGVub20pCi17Ci0gIEdzdENsb2NrVGltZSByZXQ7Ci0KLSAgLyogYXZvaWQgZGl2aWRlIGJ5IDAgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGNkZW5vbSA9PSAwKSkKLSAgICBjbnVtID0gY2Rlbm9tID0gMTsKLQotICAvKiBUaGUgZm9ybXVsYSBpcyAoaW50ZXJuYWwgLSBjaW50ZXJuYWwpICogY251bSAvIGNkZW5vbSArIGNleHRlcm5hbAotICAgKgotICAgKiBTaW5jZSB3ZSBkbyBtYXRoIG9uIHVuc2lnbmVkIDY0LWJpdCBpbnRzIHdlIGhhdmUgdG8gc3BlY2lhbCBjYXNlIGZvcgotICAgKiBpbnRlcm5hbCA8IGNpbnRlcm5hbCB0byBnZXQgdGhlIHNpZ24gcmlnaHQuIHRoaXMgY2FzZSBpcyBub3QgdmVyeSBjb21tb24sCi0gICAqIHRob3VnaC4KLSAgICovCi0gIGlmIChHX0xJS0VMWSAoaW50ZXJuYWxfdGFyZ2V0ID49IGNpbnRlcm5hbCkpIHsKLSAgICByZXQgPSBpbnRlcm5hbF90YXJnZXQgLSBjaW50ZXJuYWw7Ci0gICAgcmV0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChyZXQsIGNudW0sIGNkZW5vbSk7Ci0gICAgcmV0ICs9IGNleHRlcm5hbDsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSBjaW50ZXJuYWwgLSBpbnRlcm5hbF90YXJnZXQ7Ci0gICAgcmV0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChyZXQsIGNudW0sIGNkZW5vbSk7Ci0gICAgLyogY2xhbXAgdG8gMCAqLwotICAgIGlmIChHX0xJS0VMWSAoY2V4dGVybmFsID4gcmV0KSkKLSAgICAgIHJldCA9IGNleHRlcm5hbCAtIHJldDsKLSAgICBlbHNlCi0gICAgICByZXQgPSAwOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkOgotICogQGNsb2NrOiBhICNHc3RDbG9jayB0byB1c2UKLSAqIEBpbnRlcm5hbDogYSBjbG9jayB0aW1lCi0gKgotICogQ29udmVydHMgdGhlIGdpdmVuIEBpbnRlcm5hbCBjbG9jayB0aW1lIHRvIHRoZSBleHRlcm5hbCB0aW1lLCBhZGp1c3RpbmcgZm9yIHRoZQotICogcmF0ZSBhbmQgcmVmZXJlbmNlIHRpbWUgc2V0IHdpdGggZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpIGFuZCBtYWtpbmcgc3VyZQotICogdGhhdCB0aGUgcmV0dXJuZWQgdGltZSBpcyBpbmNyZWFzaW5nLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUKLSAqIGNsb2NrJ3MgT0JKRUNUX0xPQ0sgaGVsZCBhbmQgaXMgbWFpbmx5IHVzZWQgYnkgY2xvY2sgc3ViY2xhc3Nlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZXZlcnNlIG9mIGdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCgpLgotICoKLSAqIFJldHVybnM6IHRoZSBjb252ZXJ0ZWQgdGltZSBvZiB0aGUgY2xvY2suCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIGludGVybmFsKQotewotICBHc3RDbG9ja1RpbWUgcmV0LCBjaW50ZXJuYWwsIGNleHRlcm5hbCwgY251bSwgY2Rlbm9tOwotICBHc3RDbG9ja1ByaXZhdGUgKnByaXYgPSBjbG9jay0+cHJpdjsKLQotICAvKiBnZXQgY2FsaWJyYXRpb24gdmFsdWVzIGZvciByZWFkYWJpbGl0eSAqLwotICBjaW50ZXJuYWwgPSBwcml2LT5pbnRlcm5hbF9jYWxpYnJhdGlvbjsKLSAgY2V4dGVybmFsID0gcHJpdi0+ZXh0ZXJuYWxfY2FsaWJyYXRpb247Ci0gIGNudW0gPSBwcml2LT5yYXRlX251bWVyYXRvcjsKLSAgY2Rlbm9tID0gcHJpdi0+cmF0ZV9kZW5vbWluYXRvcjsKLQotICByZXQgPQotICAgICAgZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uIChjbG9jaywgaW50ZXJuYWwsIGNpbnRlcm5hbCwgY2V4dGVybmFsLAotICAgICAgY251bSwgY2Rlbm9tKTsKLQotICAvKiBtYWtlIHN1cmUgdGhlIHRpbWUgaXMgaW5jcmVhc2luZyAqLwotICBwcml2LT5sYXN0X3RpbWUgPSBNQVggKHJldCwgcHJpdi0+bGFzdF90aW1lKTsKLQotICByZXR1cm4gcHJpdi0+bGFzdF90aW1lOwotfQotCi0vKiBGSVhNRSAyLjA6IFJlbW92ZSBjbG9jayBwYXJhbWV0ZXIgYmVsb3cgKi8KLS8qKgotICogZ3N0X2Nsb2NrX3VuYWRqdXN0X3dpdGhfY2FsaWJyYXRpb246Ci0gKiBAY2xvY2s6IChhbGxvdy1ub25lKTogYSAjR3N0Q2xvY2sgdG8gdXNlCi0gKiBAZXh0ZXJuYWxfdGFyZ2V0OiBhIGNsb2NrIHRpbWUKLSAqIEBjaW50ZXJuYWw6IGEgcmVmZXJlbmNlIGludGVybmFsIHRpbWUKLSAqIEBjZXh0ZXJuYWw6IGEgcmVmZXJlbmNlIGV4dGVybmFsIHRpbWUKLSAqIEBjbnVtOiB0aGUgbnVtZXJhdG9yIG9mIHRoZSByYXRlIG9mIHRoZSBjbG9jayByZWxhdGl2ZSB0byBpdHMKLSAqICAgICAgICBpbnRlcm5hbCB0aW1lCi0gKiBAY2Rlbm9tOiB0aGUgZGVub21pbmF0b3Igb2YgdGhlIHJhdGUgb2YgdGhlIGNsb2NrCi0gKgotICogQ29udmVydHMgdGhlIGdpdmVuIEBleHRlcm5hbF90YXJnZXQgY2xvY2sgdGltZSB0byB0aGUgaW50ZXJuYWwgdGltZSwKLSAqIHVzaW5nIHRoZSBwYXNzZWQgY2FsaWJyYXRpb24gcGFyYW1ldGVycy4gVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUKLSAqIHNhbWUgY2FsY3VsYXRpb24gYXMgZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkKCkgd2hlbiBjYWxsZWQgdXNpbmcgdGhlCi0gKiBjdXJyZW50IGNhbGlicmF0aW9uIHBhcmFtZXRlcnMuCi0gKgotICogTm90ZTogVGhlIEBjbG9jayBwYXJhbWV0ZXIgaXMgdW51c2VkIGFuZCBjYW4gYmUgTlVMTAotICoKLSAqIFJldHVybnM6IHRoZSBjb252ZXJ0ZWQgdGltZSBvZiB0aGUgY2xvY2suCi0gKgotICogU2luY2U6IDEuOAotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9jbG9ja191bmFkanVzdF93aXRoX2NhbGlicmF0aW9uIChHc3RDbG9jayAqIGNsb2NrLAotICAgIEdzdENsb2NrVGltZSBleHRlcm5hbF90YXJnZXQsIEdzdENsb2NrVGltZSBjaW50ZXJuYWwsCi0gICAgR3N0Q2xvY2tUaW1lIGNleHRlcm5hbCwgR3N0Q2xvY2tUaW1lIGNudW0sIEdzdENsb2NrVGltZSBjZGVub20pCi17Ci0gIEdzdENsb2NrVGltZSByZXQ7Ci0KLSAgLyogYXZvaWQgZGl2aWRlIGJ5IDAgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGNudW0gPT0gMCkpCi0gICAgY251bSA9IGNkZW5vbSA9IDE7Ci0KLSAgLyogVGhlIGZvcm11bGEgaXMgKGV4dGVybmFsIC0gY2V4dGVybmFsKSAqIGNkZW5vbSAvIGNudW0gKyBjaW50ZXJuYWwgKi8KLSAgaWYgKEdfTElLRUxZIChleHRlcm5hbF90YXJnZXQgPj0gY2V4dGVybmFsKSkgewotICAgIHJldCA9IGV4dGVybmFsX3RhcmdldCAtIGNleHRlcm5hbDsKLSAgICByZXQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHJldCwgY2Rlbm9tLCBjbnVtKTsKLSAgICByZXQgKz0gY2ludGVybmFsOwotICB9IGVsc2UgewotICAgIHJldCA9IGNleHRlcm5hbCAtIGV4dGVybmFsX3RhcmdldDsKLSAgICByZXQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHJldCwgY2Rlbm9tLCBjbnVtKTsKLSAgICBpZiAoR19MSUtFTFkgKGNpbnRlcm5hbCA+IHJldCkpCi0gICAgICByZXQgPSBjaW50ZXJuYWwgLSByZXQ7Ci0gICAgZWxzZQotICAgICAgcmV0ID0gMDsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkOgotICogQGNsb2NrOiBhICNHc3RDbG9jayB0byB1c2UKLSAqIEBleHRlcm5hbDogYW4gZXh0ZXJuYWwgY2xvY2sgdGltZQotICoKLSAqIENvbnZlcnRzIHRoZSBnaXZlbiBAZXh0ZXJuYWwgY2xvY2sgdGltZSB0byB0aGUgaW50ZXJuYWwgdGltZSBvZiBAY2xvY2ssCi0gKiB1c2luZyB0aGUgcmF0ZSBhbmQgcmVmZXJlbmNlIHRpbWUgc2V0IHdpdGggZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpLgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGNsb2NrJ3MgT0JKRUNUX0xPQ0sgaGVsZCBhbmQKLSAqIGlzIG1haW5seSB1c2VkIGJ5IGNsb2NrIHN1YmNsYXNzZXMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgcmV2ZXJzZSBvZiBnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkKCkuCi0gKgotICogUmV0dXJuczogdGhlIGludGVybmFsIHRpbWUgb2YgdGhlIGNsb2NrIGNvcnJlc3BvbmRpbmcgdG8gQGV4dGVybmFsLgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9jbG9ja191bmFkanVzdF91bmxvY2tlZCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIGV4dGVybmFsKQotewotICBHc3RDbG9ja1RpbWUgY2ludGVybmFsLCBjZXh0ZXJuYWwsIGNudW0sIGNkZW5vbTsKLSAgR3N0Q2xvY2tQcml2YXRlICpwcml2ID0gY2xvY2stPnByaXY7Ci0KLSAgLyogZ2V0IGNhbGlicmF0aW9uIHZhbHVlcyBmb3IgcmVhZGFiaWxpdHkgKi8KLSAgY2ludGVybmFsID0gcHJpdi0+aW50ZXJuYWxfY2FsaWJyYXRpb247Ci0gIGNleHRlcm5hbCA9IHByaXYtPmV4dGVybmFsX2NhbGlicmF0aW9uOwotICBjbnVtID0gcHJpdi0+cmF0ZV9udW1lcmF0b3I7Ci0gIGNkZW5vbSA9IHByaXYtPnJhdGVfZGVub21pbmF0b3I7Ci0KLSAgcmV0dXJuIGdzdF9jbG9ja191bmFkanVzdF93aXRoX2NhbGlicmF0aW9uIChjbG9jaywgZXh0ZXJuYWwsIGNpbnRlcm5hbCwKLSAgICAgIGNleHRlcm5hbCwgY251bSwgY2Rlbm9tKTsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWU6Ci0gKiBAY2xvY2s6IGEgI0dzdENsb2NrIHRvIHF1ZXJ5Ci0gKgotICogR2V0cyB0aGUgY3VycmVudCBpbnRlcm5hbCB0aW1lIG9mIHRoZSBnaXZlbiBjbG9jay4gVGhlIHRpbWUgaXMgcmV0dXJuZWQKLSAqIHVuYWRqdXN0ZWQgZm9yIHRoZSBvZmZzZXQgYW5kIHRoZSByYXRlLgotICoKLSAqIFJldHVybnM6IHRoZSBpbnRlcm5hbCB0aW1lIG9mIHRoZSBjbG9jay4gT3IgR1NUX0NMT0NLX1RJTUVfTk9ORSB3aGVuCi0gKiBnaXZlbiBpbnZhbGlkIGlucHV0LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3RDbG9ja1RpbWUgcmV0OwotICBHc3RDbG9ja0NsYXNzICpjY2xhc3M7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DTE9DSyAoY2xvY2spLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoY2xvY2ssCi0gICAgICAgICAgICAgIEdTVF9DTE9DS19GTEFHX05FRURTX1NUQVJUVVBfU1lOQykgJiYgIWNsb2NrLT5wcml2LT5zeW5jZWQpKQotICAgIEdTVF9DQVRfV0FSTklOR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAotICAgICAgICAiY2xvY2sgaXMgbm90IHN5bmNocm9uaXplZCB5ZXQiKTsKLQotICBjY2xhc3MgPSBHU1RfQ0xPQ0tfR0VUX0NMQVNTIChjbG9jayk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGNjbGFzcy0+Z2V0X2ludGVybmFsX3RpbWUgPT0gTlVMTCkpCi0gICAgZ290byBub3Rfc3VwcG9ydGVkOwotCi0gIHJldCA9IGNjbGFzcy0+Z2V0X2ludGVybmFsX3RpbWUgKGNsb2NrKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssICJpbnRlcm5hbCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHJldCkpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1ub3Rfc3VwcG9ydGVkOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAotICAgICAgICAiaW50ZXJuYWwgdGltZSBub3Qgc3VwcG9ydGVkLCByZXR1cm4gMCIpOwotICAgIHJldHVybiBHX0dJTlQ2NF9DT05TVEFOVCAoMCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfZ2V0X3RpbWU6Ci0gKiBAY2xvY2s6IGEgI0dzdENsb2NrIHRvIHF1ZXJ5Ci0gKgotICogR2V0cyB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBnaXZlbiBjbG9jay4gVGhlIHRpbWUgaXMgYWx3YXlzCi0gKiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgYW5kIGFkanVzdGVkIGFjY29yZGluZyB0byB0aGUgY3VycmVudAotICogb2Zmc2V0IGFuZCByYXRlLgotICoKLSAqIFJldHVybnM6IHRoZSB0aW1lIG9mIHRoZSBjbG9jay4gT3IgR1NUX0NMT0NLX1RJTUVfTk9ORSB3aGVuCi0gKiBnaXZlbiBpbnZhbGlkIGlucHV0LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X2Nsb2NrX2dldF90aW1lIChHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3RDbG9ja1RpbWUgcmV0OwotICBnaW50IHNlcTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jayksIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGRvIHsKLSAgICAvKiByZWdldCB0aGUgaW50ZXJuYWwgdGltZSB3aGVuIHdlIHJldHJ5IHRvIGdldCB0aGUgbW9zdCBjdXJyZW50Ci0gICAgICogdGltZXZhbHVlICovCi0gICAgcmV0ID0gZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChjbG9jayk7Ci0KLSAgICBzZXEgPSByZWFkX3NlcWJlZ2luIChjbG9jayk7Ci0gICAgLyogdGhpcyB3aWxsIHNjYWxlIGZvciByYXRlIGFuZCBvZmZzZXQgKi8KLSAgICByZXQgPSBnc3RfY2xvY2tfYWRqdXN0X3VubG9ja2VkIChjbG9jaywgcmV0KTsKLSAgfSB3aGlsZSAocmVhZF9zZXFyZXRyeSAoY2xvY2ssIHNlcSkpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywgImFkanVzdGVkIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAocmV0KSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uOgotICogQGNsb2NrOiBhICNHc3RDbG9jayB0byBjYWxpYnJhdGUKLSAqIEBpbnRlcm5hbDogYSByZWZlcmVuY2UgaW50ZXJuYWwgdGltZQotICogQGV4dGVybmFsOiBhIHJlZmVyZW5jZSBleHRlcm5hbCB0aW1lCi0gKiBAcmF0ZV9udW06IHRoZSBudW1lcmF0b3Igb2YgdGhlIHJhdGUgb2YgdGhlIGNsb2NrIHJlbGF0aXZlIHRvIGl0cwotICogICAgICAgICAgICBpbnRlcm5hbCB0aW1lIAotICogQHJhdGVfZGVub206IHRoZSBkZW5vbWluYXRvciBvZiB0aGUgcmF0ZSBvZiB0aGUgY2xvY2sKLSAqCi0gKiBBZGp1c3RzIHRoZSByYXRlIGFuZCB0aW1lIG9mIEBjbG9jay4gQSByYXRlIG9mIDEvMSBpcyB0aGUgbm9ybWFsIHNwZWVkIG9mCi0gKiB0aGUgY2xvY2suIFZhbHVlcyBiaWdnZXIgdGhhbiAxLzEgbWFrZSB0aGUgY2xvY2sgZ28gZmFzdGVyLgotICoKLSAqIEBpbnRlcm5hbCBhbmQgQGV4dGVybmFsIGFyZSBjYWxpYnJhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgYXJyYW5nZSB0aGF0Ci0gKiBnc3RfY2xvY2tfZ2V0X3RpbWUoKSBzaG91bGQgaGF2ZSBiZWVuIEBleHRlcm5hbCBhdCBpbnRlcm5hbCB0aW1lIEBpbnRlcm5hbC4KLSAqIFRoaXMgaW50ZXJuYWwgdGltZSBzaG91bGQgbm90IGJlIGluIHRoZSBmdXR1cmU7IHRoYXQgaXMsIGl0IHNob3VsZCBiZSBsZXNzCi0gKiB0aGFuIHRoZSB2YWx1ZSBvZiBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUoKSB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgotICoKLSAqIFN1YnNlcXVlbnQgY2FsbHMgdG8gZ3N0X2Nsb2NrX2dldF90aW1lKCkgd2lsbCByZXR1cm4gY2xvY2sgdGltZXMgY29tcHV0ZWQgYXMKLSAqIGZvbGxvd3M6Ci0gKgotICogPHByb2dyYW1saXN0aW5nPgotICogICB0aW1lID0gKGludGVybmFsX3RpbWUgLSBpbnRlcm5hbCkgKiByYXRlX251bSAvIHJhdGVfZGVub20gKyBleHRlcm5hbAotICogPC9wcm9ncmFtbGlzdGluZz4KLSAqCi0gKiBUaGlzIGZvcm11bGEgaXMgaW1wbGVtZW50ZWQgaW4gZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCgpLiBPZiBjb3Vyc2UsIGl0Ci0gKiB0cmllcyB0byBkbyB0aGUgaW50ZWdlciBhcml0aG1ldGljIGFzIHByZWNpc2VseSBhcyBwb3NzaWJsZS4KLSAqCi0gKiBOb3RlIHRoYXQgZ3N0X2Nsb2NrX2dldF90aW1lKCkgYWx3YXlzIHJldHVybnMgaW5jcmVhc2luZyB2YWx1ZXMgc28gd2hlbiB5b3UKLSAqIG1vdmUgdGhlIGNsb2NrIGJhY2t3YXJkcywgZ3N0X2Nsb2NrX2dldF90aW1lKCkgd2lsbCByZXBvcnQgdGhlIHByZXZpb3VzIHZhbHVlCi0gKiB1bnRpbCB0aGUgY2xvY2sgY2F0Y2hlcyB1cC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgaW50ZXJuYWwsIEdzdENsb2NrVGltZQotICAgIGV4dGVybmFsLCBHc3RDbG9ja1RpbWUgcmF0ZV9udW0sIEdzdENsb2NrVGltZSByYXRlX2Rlbm9tKQotewotICBHc3RDbG9ja1ByaXZhdGUgKnByaXY7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jaykpOwotICBnX3JldHVybl9pZl9mYWlsIChyYXRlX251bSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAocmF0ZV9kZW5vbSA+IDAgJiYgcmF0ZV9kZW5vbSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBwcml2ID0gY2xvY2stPnByaXY7Ci0KLSAgd3JpdGVfc2VxbG9jayAoY2xvY2spOwotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssCi0gICAgICAiaW50ZXJuYWwgJSIgR1NUX1RJTUVfRk9STUFUICIgZXh0ZXJuYWwgJSIgR1NUX1RJTUVfRk9STUFUICIgJSIKLSAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIi8lIiBHX0dVSU5UNjRfRk9STUFUICIgPSAlZiIsIEdTVF9USU1FX0FSR1MgKGludGVybmFsKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGV4dGVybmFsKSwgcmF0ZV9udW0sIHJhdGVfZGVub20sCi0gICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChyYXRlX251bSkgLyBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChyYXRlX2Rlbm9tKSk7Ci0KLSAgcHJpdi0+aW50ZXJuYWxfY2FsaWJyYXRpb24gPSBpbnRlcm5hbDsKLSAgcHJpdi0+ZXh0ZXJuYWxfY2FsaWJyYXRpb24gPSBleHRlcm5hbDsKLSAgcHJpdi0+cmF0ZV9udW1lcmF0b3IgPSByYXRlX251bTsKLSAgcHJpdi0+cmF0ZV9kZW5vbWluYXRvciA9IHJhdGVfZGVub207Ci0gIHdyaXRlX3NlcXVubG9jayAoY2xvY2spOwotfQotCi0vKioKLSAqIGdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb246Ci0gKiBAY2xvY2s6IGEgI0dzdENsb2NrIAotICogQGludGVybmFsOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGludGVybmFsIHRpbWUKLSAqIEBleHRlcm5hbDogKG91dCkgKGFsbG93LW5vbmUpOiBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBleHRlcm5hbCB0aW1lCi0gKiBAcmF0ZV9udW06IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcmF0ZSBudW1lcmF0b3IKLSAqIEByYXRlX2Rlbm9tOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIHJhdGUgZGVub21pbmF0b3IKLSAqCi0gKiBHZXRzIHRoZSBpbnRlcm5hbCByYXRlIGFuZCByZWZlcmVuY2UgdGltZSBvZiBAY2xvY2suIFNlZQotICogZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIEBpbnRlcm5hbCwgQGV4dGVybmFsLCBAcmF0ZV9udW0sIGFuZCBAcmF0ZV9kZW5vbSBjYW4gYmUgbGVmdCAlTlVMTCBpZiB0aGUKLSAqIGNhbGxlciBpcyBub3QgaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWVzLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24gKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSAqIGludGVybmFsLAotICAgIEdzdENsb2NrVGltZSAqIGV4dGVybmFsLCBHc3RDbG9ja1RpbWUgKiByYXRlX251bSwgR3N0Q2xvY2tUaW1lICogcmF0ZV9kZW5vbSkKLXsKLSAgZ2ludCBzZXE7Ci0gIEdzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSk7Ci0KLSAgcHJpdiA9IGNsb2NrLT5wcml2OwotCi0gIGRvIHsKLSAgICBzZXEgPSByZWFkX3NlcWJlZ2luIChjbG9jayk7Ci0gICAgaWYgKHJhdGVfbnVtKQotICAgICAgKnJhdGVfbnVtID0gcHJpdi0+cmF0ZV9udW1lcmF0b3I7Ci0gICAgaWYgKHJhdGVfZGVub20pCi0gICAgICAqcmF0ZV9kZW5vbSA9IHByaXYtPnJhdGVfZGVub21pbmF0b3I7Ci0gICAgaWYgKGV4dGVybmFsKQotICAgICAgKmV4dGVybmFsID0gcHJpdi0+ZXh0ZXJuYWxfY2FsaWJyYXRpb247Ci0gICAgaWYgKGludGVybmFsKQotICAgICAgKmludGVybmFsID0gcHJpdi0+aW50ZXJuYWxfY2FsaWJyYXRpb247Ci0gIH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkgKGNsb2NrLCBzZXEpKTsKLX0KLQotLyogd2lsbCBiZSBjYWxsZWQgcmVwZWF0ZWRseSB0byBzYW1wbGUgdGhlIG1hc3RlciBhbmQgc2xhdmUgY2xvY2sKLSAqIHRvIHJlY2FsaWJyYXRlIHRoZSBjbG9jayAgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Nsb2NrX3NsYXZlX2NhbGxiYWNrIChHc3RDbG9jayAqIG1hc3RlciwgR3N0Q2xvY2tUaW1lIHRpbWUsCi0gICAgR3N0Q2xvY2tJRCBpZCwgR3N0Q2xvY2sgKiBjbG9jaykKLXsKLSAgR3N0Q2xvY2tUaW1lIHN0aW1lLCBtdGltZTsKLSAgZ2RvdWJsZSByX3NxdWFyZWQ7Ci0KLSAgaWYgKCFnc3RfY2xvY2tfaXNfc3luY2VkIChjbG9jaykpIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgY2xvY2ssCi0gICAgICAgICJTbGF2ZSBjbG9jayBpcyBub3Qgc3luY2VkIHlldCIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgc3RpbWUgPSBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKGNsb2NrKTsKLSAgbXRpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKG1hc3Rlcik7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAotICAgICAgIm1hc3RlciAlIiBHU1RfVElNRV9GT1JNQVQgIiwgc2xhdmUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAobXRpbWUpLCBHU1RfVElNRV9BUkdTIChzdGltZSkpOwotCi0gIGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gKGNsb2NrLCBzdGltZSwgbXRpbWUsICZyX3NxdWFyZWQpOwotCi0gIC8qIEZJWE1FLCB3ZSBjYW4gdXNlIHRoZSByX3NxdWFyZWQgdmFsdWUgdG8gYWRqdXN0IHRoZSB0aW1lb3V0Ci0gICAqIHZhbHVlIG9mIHRoZSBjbG9ja2lkICovCi0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX3NldF9tYXN0ZXI6Ci0gKiBAY2xvY2s6IGEgI0dzdENsb2NrIAotICogQG1hc3RlcjogKGFsbG93LW5vbmUpOiBhIG1hc3RlciAjR3N0Q2xvY2sgCi0gKgotICogU2V0IEBtYXN0ZXIgYXMgdGhlIG1hc3RlciBjbG9jayBmb3IgQGNsb2NrLiBAY2xvY2sgd2lsbCBiZSBhdXRvbWF0aWNhbGx5Ci0gKiBjYWxpYnJhdGVkIHNvIHRoYXQgZ3N0X2Nsb2NrX2dldF90aW1lKCkgcmVwb3J0cyB0aGUgc2FtZSB0aW1lIGFzIHRoZQotICogbWFzdGVyIGNsb2NrLiAgCi0gKiAKLSAqIEEgY2xvY2sgcHJvdmlkZXIgdGhhdCBzbGF2ZXMgaXRzIGNsb2NrIHRvIGEgbWFzdGVyIGNhbiBnZXQgdGhlIGN1cnJlbnQKLSAqIGNhbGlicmF0aW9uIHZhbHVlcyB3aXRoIGdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24oKS4KLSAqCi0gKiBAbWFzdGVyIGNhbiBiZSAlTlVMTCBpbiB3aGljaCBjYXNlIEBjbG9jayB3aWxsIG5vdCBiZSBzbGF2ZWQgYW55bW9yZS4gSXQgd2lsbAotICogaG93ZXZlciBrZWVwIHJlcG9ydGluZyBpdHMgdGltZSBhZGp1c3RlZCB3aXRoIHRoZSBsYXN0IGNvbmZpZ3VyZWQgcmF0ZSAKLSAqIGFuZCB0aW1lIG9mZnNldHMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNsb2NrIGlzIGNhcGFibGUgb2YgYmVpbmcgc2xhdmVkIHRvIGEgbWFzdGVyIGNsb2NrLiAKLSAqIFRyeWluZyB0byBzZXQgYSBtYXN0ZXIgb24gYSBjbG9jayB3aXRob3V0IHRoZSAKLSAqICNHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUiBmbGFnIHdpbGwgbWFrZSB0aGlzIGZ1bmN0aW9uIHJldHVybiAlRkFMU0UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9jbG9ja19zZXRfbWFzdGVyIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9jayAqIG1hc3RlcikKLXsKLSAgR3N0Q2xvY2sgKiptYXN0ZXJfcDsKLSAgR3N0Q2xvY2tQcml2YXRlICpwcml2OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWFzdGVyICE9IGNsb2NrLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChjbG9jayk7Ci0gIC8qIHdlIGFsd2F5cyBhbGxvdyBzZXR0aW5nIHRoZSBtYXN0ZXIgdG8gTlVMTCAqLwotICBpZiAobWFzdGVyICYmICFHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChjbG9jaywgR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIpKQotICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKLSAgaWYgKG1hc3RlciAmJiAhZ3N0X2Nsb2NrX2lzX3N5bmNlZCAobWFzdGVyKSkKLSAgICBnb3RvIG1hc3Rlcl9ub3Rfc3luY2VkOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKLSAgICAgICJzbGF2aW5nICVwIHRvIG1hc3RlciBjbG9jayAlcCIsIGNsb2NrLCBtYXN0ZXIpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOwotCi0gIHByaXYgPSBjbG9jay0+cHJpdjsKLQotICBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyAoY2xvY2spOwotICBpZiAocHJpdi0+Y2xvY2tpZCkgewotICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChwcml2LT5jbG9ja2lkKTsKLSAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHByaXYtPmNsb2NraWQpOwotICAgIHByaXYtPmNsb2NraWQgPSBOVUxMOwotICB9Ci0gIGlmIChtYXN0ZXIpIHsKLSAgICBwcml2LT5maWxsaW5nID0gVFJVRTsKLSAgICBwcml2LT50aW1lX2luZGV4ID0gMDsKLSAgICAvKiB1c2UgdGhlIG1hc3RlciBwZXJpb2RpYyBpZCB0byBzY2hlZHVsZSBzYW1wbGluZyBhbmQKLSAgICAgKiBjbG9jayBjYWxpYnJhdGlvbi4gKi8KLSAgICBwcml2LT5jbG9ja2lkID0gZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAobWFzdGVyLAotICAgICAgICBnc3RfY2xvY2tfZ2V0X3RpbWUgKG1hc3RlciksIHByaXYtPnRpbWVvdXQpOwotICAgIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChwcml2LT5jbG9ja2lkLAotICAgICAgICAoR3N0Q2xvY2tDYWxsYmFjaykgZ3N0X2Nsb2NrX3NsYXZlX2NhbGxiYWNrLAotICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoY2xvY2spLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwotICB9Ci0gIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKLSAgbWFzdGVyX3AgPSAmcHJpdi0+bWFzdGVyOwotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIG1hc3Rlcl9wLCAoR3N0T2JqZWN0ICopIG1hc3Rlcik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub3Rfc3VwcG9ydGVkOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGNsb2NrLAotICAgICAgICAiY2Fubm90IGJlIHNsYXZlZCB0byBhIG1hc3RlciBjbG9jayIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLW1hc3Rlcl9ub3Rfc3luY2VkOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIG1hc3RlciwKLSAgICAgICAgIm1hc3RlciBjbG9jayBpcyBub3Qgc3luY2VkIHlldCIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX2dldF9tYXN0ZXI6Ci0gKiBAY2xvY2s6IGEgI0dzdENsb2NrIAotICoKLSAqIEdldCB0aGUgbWFzdGVyIGNsb2NrIHRoYXQgQGNsb2NrIGlzIHNsYXZlZCB0byBvciAlTlVMTCB3aGVuIHRoZSBjbG9jayBpcwotICogbm90IHNsYXZlZCB0byBhbnkgbWFzdGVyIGNsb2NrLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhIG1hc3RlciAjR3N0Q2xvY2sgb3IgJU5VTEwKLSAqICAgICB3aGVuIHRoaXMgY2xvY2sgaXMgbm90IHNsYXZlZCB0byBhIG1hc3RlciBjbG9jay4gVW5yZWYgYWZ0ZXIKLSAqICAgICB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RDbG9jayAqCi1nc3RfY2xvY2tfZ2V0X21hc3RlciAoR3N0Q2xvY2sgKiBjbG9jaykKLXsKLSAgR3N0Q2xvY2sgKnJlc3VsdCA9IE5VTEw7Ci0gIEdzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jayksIE5VTEwpOwotCi0gIHByaXYgPSBjbG9jay0+cHJpdjsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKLSAgaWYgKHByaXYtPm1hc3RlcikKLSAgICByZXN1bHQgPSBnc3Rfb2JqZWN0X3JlZiAocHJpdi0+bWFzdGVyKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb246Ci0gKiBAY2xvY2s6IGEgI0dzdENsb2NrIAotICogQHNsYXZlOiBhIHRpbWUgb24gdGhlIHNsYXZlCi0gKiBAbWFzdGVyOiBhIHRpbWUgb24gdGhlIG1hc3RlcgotICogQHJfc3F1YXJlZDogKG91dCk6IGEgcG9pbnRlciB0byBob2xkIHRoZSByZXN1bHQKLSAqCi0gKiBUaGUgdGltZSBAbWFzdGVyIG9mIHRoZSBtYXN0ZXIgY2xvY2sgYW5kIHRoZSB0aW1lIEBzbGF2ZSBvZiB0aGUgc2xhdmUKLSAqIGNsb2NrIGFyZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBvYnNlcnZhdGlvbnMuIElmIGVub3VnaCBvYnNlcnZhdGlvbnMKLSAqIGFyZSBhdmFpbGFibGUsIGEgbGluZWFyIHJlZ3Jlc3Npb24gYWxnb3JpdGhtIGlzIHJ1biBvbiB0aGUKLSAqIG9ic2VydmF0aW9ucyBhbmQgQGNsb2NrIGlzIHJlY2FsaWJyYXRlZC4KLSAqCi0gKiBJZiB0aGlzIGZ1bmN0aW9ucyByZXR1cm5zICVUUlVFLCBAcl9zcXVhcmVkIHdpbGwgY29udGFpbiB0aGUgCi0gKiBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBvZiB0aGUgaW50ZXJwb2xhdGlvbi4gQSB2YWx1ZSBvZiAxLjAKLSAqIG1lYW5zIGEgcGVyZmVjdCByZWdyZXNzaW9uIHdhcyBwZXJmb3JtZWQuIFRoaXMgdmFsdWUgY2FuCi0gKiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBvZiB0aGUgbWFzdGVyIGFuZCBzbGF2ZQotICogY2xvY2tzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGVub3VnaCBvYnNlcnZhdGlvbnMgd2VyZSBhZGRlZCB0byBydW4gdGhlIAotICogcmVncmVzc2lvbiBhbGdvcml0aG0uCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb24gKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSBzbGF2ZSwKLSAgICBHc3RDbG9ja1RpbWUgbWFzdGVyLCBnZG91YmxlICogcl9zcXVhcmVkKQotewotICBHc3RDbG9ja1RpbWUgbV9udW0sIG1fZGVub20sIGIsIHhiYXNlOwotCi0gIGlmICghZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbl91bmFwcGxpZWQgKGNsb2NrLCBzbGF2ZSwgbWFzdGVyLCByX3NxdWFyZWQsCi0gICAgICAgICAgJnhiYXNlLCAmYiwgJm1fbnVtLCAmbV9kZW5vbSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIGlmIHdlIGhhdmUgYSB2YWxpZCByZWdyZXNzaW9uLCBhZGp1c3QgdGhlIGNsb2NrICovCi0gIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKGNsb2NrLCB4YmFzZSwgYiwgbV9udW0sIG1fZGVub20pOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb25fdW5hcHBsaWVkOgotICogQGNsb2NrOiBhICNHc3RDbG9jawotICogQHNsYXZlOiBhIHRpbWUgb24gdGhlIHNsYXZlCi0gKiBAbWFzdGVyOiBhIHRpbWUgb24gdGhlIG1hc3RlcgotICogQHJfc3F1YXJlZDogKG91dCk6IGEgcG9pbnRlciB0byBob2xkIHRoZSByZXN1bHQKLSAqIEBpbnRlcm5hbDogKG91dCkgKGFsbG93LW5vbmUpOiBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBpbnRlcm5hbCB0aW1lCi0gKiBAZXh0ZXJuYWw6IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXh0ZXJuYWwgdGltZQotICogQHJhdGVfbnVtOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgbG9jYXRpb24gdG8gc3RvcmUgdGhlIHJhdGUgbnVtZXJhdG9yCi0gKiBAcmF0ZV9kZW5vbTogKG91dCkgKGFsbG93LW5vbmUpOiBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSByYXRlIGRlbm9taW5hdG9yCi0gKgotICogQWRkIGEgY2xvY2sgb2JzZXJ2YXRpb24gdG8gdGhlIGludGVybmFsIHNsYXZpbmcgYWxnb3JpdGhtIHRoZSBzYW1lIGFzCi0gKiBnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uKCksIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbWFzdGVyIGNsb2NrCi0gKiBlc3RpbWF0aW9uLCB3aXRob3V0IHVwZGF0aW5nIHRoZSBpbnRlcm5hbCBjYWxpYnJhdGlvbi4KLSAqCi0gKiBUaGUgY2FsbGVyIGNhbiB0aGVuIHRha2UgdGhlIHJlc3VsdHMgYW5kIGNhbGwgZ3N0X2Nsb2NrX3NldF9jYWxpYnJhdGlvbigpCi0gKiB3aXRoIHRoZSB2YWx1ZXMsIG9yIHNvbWUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGVtLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb25fdW5hcHBsaWVkIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgc2xhdmUsCi0gICAgR3N0Q2xvY2tUaW1lIG1hc3RlciwgZ2RvdWJsZSAqIHJfc3F1YXJlZCwKLSAgICBHc3RDbG9ja1RpbWUgKiBpbnRlcm5hbCwgR3N0Q2xvY2tUaW1lICogZXh0ZXJuYWwsCi0gICAgR3N0Q2xvY2tUaW1lICogcmF0ZV9udW0sIEdzdENsb2NrVGltZSAqIHJhdGVfZGVub20pCi17Ci0gIEdzdENsb2NrVGltZSBtX251bSwgbV9kZW5vbSwgYiwgeGJhc2U7Ci0gIEdzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLSAgZ3VpbnQgbjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jayksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJfc3F1YXJlZCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcHJpdiA9IGNsb2NrLT5wcml2OwotCi0gIEdTVF9DTE9DS19TTEFWRV9MT0NLIChjbG9jayk7Ci0KLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKLSAgICAgICJhZGRpbmcgb2JzZXJ2YXRpb24gc2xhdmUgJSIgR1NUX1RJTUVfRk9STUFUICIsIG1hc3RlciAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChzbGF2ZSksIEdTVF9USU1FX0FSR1MgKG1hc3RlcikpOwotCi0gIHByaXYtPnRpbWVzWyg0ICogcHJpdi0+dGltZV9pbmRleCldID0gc2xhdmU7Ci0gIHByaXYtPnRpbWVzWyg0ICogcHJpdi0+dGltZV9pbmRleCkgKyAyXSA9IG1hc3RlcjsKLQotICBwcml2LT50aW1lX2luZGV4Kys7Ci0gIGlmIChHX1VOTElLRUxZIChwcml2LT50aW1lX2luZGV4ID09IHByaXYtPndpbmRvd19zaXplKSkgewotICAgIHByaXYtPmZpbGxpbmcgPSBGQUxTRTsKLSAgICBwcml2LT50aW1lX2luZGV4ID0gMDsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZIChwcml2LT5maWxsaW5nICYmIHByaXYtPnRpbWVfaW5kZXggPCBwcml2LT53aW5kb3dfdGhyZXNob2xkKSkKLSAgICBnb3RvIGZpbGxpbmc7Ci0KLSAgbiA9IHByaXYtPmZpbGxpbmcgPyBwcml2LT50aW1lX2luZGV4IDogcHJpdi0+d2luZG93X3NpemU7Ci0gIGlmICghX3ByaXZfZ3N0X2RvX2xpbmVhcl9yZWdyZXNzaW9uIChwcml2LT50aW1lcywgbiwgJm1fbnVtLCAmbV9kZW5vbSwgJmIsCi0gICAgICAgICAgJnhiYXNlLCByX3NxdWFyZWQpKQotICAgIGdvdG8gaW52YWxpZDsKLQotICBHU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLIChjbG9jayk7Ci0KLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX0NMT0NLLCBjbG9jaywKLSAgICAgICJhZGp1c3RpbmcgY2xvY2sgdG8gbT0lIiBHX0dVSU5UNjRfRk9STUFUICIvJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBiPSUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFUICIgKHJzcXVhcmVkPSVnKSIsIG1fbnVtLCBtX2Rlbm9tLCBiLCAqcl9zcXVhcmVkKTsKLQotICBpZiAoaW50ZXJuYWwpCi0gICAgKmludGVybmFsID0geGJhc2U7Ci0gIGlmIChleHRlcm5hbCkKLSAgICAqZXh0ZXJuYWwgPSBiOwotICBpZiAocmF0ZV9udW0pCi0gICAgKnJhdGVfbnVtID0gbV9udW07Ci0gIGlmIChyYXRlX2Rlbm9tKQotICAgICpyYXRlX2Rlbm9tID0gbV9kZW5vbTsKLQotICByZXR1cm4gVFJVRTsKLQotZmlsbGluZzoKLSAgewotICAgIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWQ6Ci0gIHsKLSAgICAvKiBubyB2YWxpZCByZWdyZXNzaW9uIGhhcyBiZWVuIGRvbmUsIGlnbm9yZSB0aGUgcmVzdWx0IHRoZW4gKi8KLSAgICBHU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLIChjbG9jayk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2Nsb2NrX3NldF90aW1lb3V0OgotICogQGNsb2NrOiBhICNHc3RDbG9jawotICogQHRpbWVvdXQ6IGEgdGltZW91dAotICoKLSAqIFNldCB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG5hbm9zZWNvbmRzLCB0byBzYW1wbGUgbWFzdGVyIGFuZCBzbGF2ZQotICogY2xvY2tzCi0gKi8KLXZvaWQKLWdzdF9jbG9ja19zZXRfdGltZW91dCAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DTE9DSyAoY2xvY2spKTsKLQotICBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyAoY2xvY2spOwotICBjbG9jay0+cHJpdi0+dGltZW91dCA9IHRpbWVvdXQ7Ci0gIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfZ2V0X3RpbWVvdXQ6Ci0gKiBAY2xvY2s6IGEgI0dzdENsb2NrCi0gKgotICogR2V0IHRoZSBhbW91bnQgb2YgdGltZSB0aGF0IG1hc3RlciBhbmQgc2xhdmUgY2xvY2tzIGFyZSBzYW1wbGVkLgotICoKLSAqIFJldHVybnM6IHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHNhbXBsZXMuCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X2Nsb2NrX2dldF90aW1lb3V0IChHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3RDbG9ja1RpbWUgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgR1NUX0NMT0NLX1NMQVZFX0xPQ0sgKGNsb2NrKTsKLSAgcmVzdWx0ID0gY2xvY2stPnByaXYtPnRpbWVvdXQ7Ci0gIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLQotICBjbG9jayA9IEdTVF9DTE9DSyAob2JqZWN0KTsKLSAgcHJpdiA9IGNsb2NrLT5wcml2OwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9XSU5ET1dfU0laRToKLSAgICAgIEdTVF9DTE9DS19TTEFWRV9MT0NLIChjbG9jayk7Ci0gICAgICBwcml2LT53aW5kb3dfc2l6ZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgcHJpdi0+d2luZG93X3RocmVzaG9sZCA9IE1JTiAocHJpdi0+d2luZG93X3RocmVzaG9sZCwgcHJpdi0+d2luZG93X3NpemUpOwotICAgICAgcHJpdi0+dGltZXMgPSBnX3JlbmV3IChHc3RDbG9ja1RpbWUsIHByaXYtPnRpbWVzLCA0ICogcHJpdi0+d2luZG93X3NpemUpOwotICAgICAgLyogcmVzdGFydCBjYWxpYnJhdGlvbiAqLwotICAgICAgcHJpdi0+ZmlsbGluZyA9IFRSVUU7Ci0gICAgICBwcml2LT50aW1lX2luZGV4ID0gMDsKLSAgICAgIEdTVF9DTE9DS19TTEFWRV9VTkxPQ0sgKGNsb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9XSU5ET1dfVEhSRVNIT0xEOgotICAgICAgR1NUX0NMT0NLX1NMQVZFX0xPQ0sgKGNsb2NrKTsKLSAgICAgIHByaXYtPndpbmRvd190aHJlc2hvbGQgPSBNSU4gKGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpLCBwcml2LT53aW5kb3dfc2l6ZSk7Ci0gICAgICBHU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLIChjbG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVElNRU9VVDoKLSAgICAgIGdzdF9jbG9ja19zZXRfdGltZW91dCAoY2xvY2ssIGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jbG9ja19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja1ByaXZhdGUgKnByaXY7Ci0KLSAgY2xvY2sgPSBHU1RfQ0xPQ0sgKG9iamVjdCk7Ci0gIHByaXYgPSBjbG9jay0+cHJpdjsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfV0lORE9XX1NJWkU6Ci0gICAgICBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyAoY2xvY2spOwotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcHJpdi0+d2luZG93X3NpemUpOwotICAgICAgR1NUX0NMT0NLX1NMQVZFX1VOTE9DSyAoY2xvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJTkRPV19USFJFU0hPTEQ6Ci0gICAgICBHU1RfQ0xPQ0tfU0xBVkVfTE9DSyAoY2xvY2spOwotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcHJpdi0+d2luZG93X3RocmVzaG9sZCk7Ci0gICAgICBHU1RfQ0xPQ0tfU0xBVkVfVU5MT0NLIChjbG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVElNRU9VVDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGdzdF9jbG9ja19nZXRfdGltZW91dCAoY2xvY2spKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotCi0vKioKLSAqIGdzdF9jbG9ja193YWl0X2Zvcl9zeW5jOgotICogQGNsb2NrOiBhIEdzdENsb2NrCi0gKiBAdGltZW91dDogdGltZW91dCBmb3Igd2FpdGluZyBvciAlR1NUX0NMT0NLX1RJTUVfTk9ORQotICoKLSAqIFdhaXRzIHVudGlsIEBjbG9jayBpcyBzeW5jZWQgZm9yIHJlcG9ydGluZyB0aGUgY3VycmVudCB0aW1lLiBJZiBAdGltZW91dAotICogaXMgJUdTVF9DTE9DS19USU1FX05PTkUgaXQgd2lsbCB3YWl0IGZvcmV2ZXIsIG90aGVyd2lzZSBpdCB3aWxsIHRpbWUgb3V0Ci0gKiBhZnRlciBAdGltZW91dCBuYW5vc2Vjb25kcy4KLSAqCi0gKiBGb3IgYXN5bmNocm9ub3VzIHdhaXRpbmcsIHRoZSBHc3RDbG9jazo6c3luY2VkIHNpZ25hbCBjYW4gYmUgdXNlZC4KLSAqCi0gKgotICogVGhpcyByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggVFJVRSBpZiBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMKLSAqIGlzIG5vdCBzZXQgb24gdGhlIGNsb2NrLCBvciBpZiB0aGUgY2xvY2sgaXMgYWxyZWFkeSBzeW5jZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgd2FpdGluZyB3YXMgc3VjY2Vzc2Z1bCwgb3IgJUZBTFNFIG9uIHRpbWVvdXQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfY2xvY2tfd2FpdF9mb3Jfc3luYyAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpCi17Ci0gIGdib29sZWFuIHRpbWVkX291dCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgRkFMU0UpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOwotICBpZiAoIUdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGNsb2NrLCBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMpCi0gICAgICB8fCBjbG9jay0+cHJpdi0+c3luY2VkKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmICh0aW1lb3V0ICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBnaW50NjQgZW5kX3RpbWUgPSBnX2dldF9tb25vdG9uaWNfdGltZSAoKSArIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAodGltZW91dCwKLSAgICAgICAgR19USU1FX1NQQU5fU0VDT05ELCBHU1RfU0VDT05EKTsKLQotICAgIHdoaWxlICghY2xvY2stPnByaXYtPnN5bmNlZCAmJiAhdGltZWRfb3V0KSB7Ci0gICAgICB0aW1lZF9vdXQgPQotICAgICAgICAgICFnX2NvbmRfd2FpdF91bnRpbCAoJmNsb2NrLT5wcml2LT5zeW5jX2NvbmQsCi0gICAgICAgICAgR1NUX09CSkVDVF9HRVRfTE9DSyAoY2xvY2spLCBlbmRfdGltZSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHRpbWVkX291dCA9IEZBTFNFOwotICAgIHdoaWxlICghY2xvY2stPnByaXYtPnN5bmNlZCkgewotICAgICAgZ19jb25kX3dhaXQgKCZjbG9jay0+cHJpdi0+c3luY19jb25kLCBHU1RfT0JKRUNUX0dFVF9MT0NLIChjbG9jaykpOwotICAgIH0KLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOwotCi0gIHJldHVybiAhdGltZWRfb3V0OwotfQotCi0vKioKLSAqIGdzdF9jbG9ja19pc19zeW5jZWQ6Ci0gKiBAY2xvY2s6IGEgR3N0Q2xvY2sKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGNsb2NrIGlzIGN1cnJlbnRseSBzeW5jZWQuCi0gKgotICogVGhpcyByZXR1cm5zIGlmIEdTVF9DTE9DS19GTEFHX05FRURTX1NUQVJUVVBfU1lOQyBpcyBub3Qgc2V0IG9uIHRoZSBjbG9jay4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2xvY2sgaXMgY3VycmVudGx5IHN5bmNlZAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF9jbG9ja19pc19zeW5jZWQgKEdzdENsb2NrICogY2xvY2spCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0xPQ0sgKGNsb2NrKSwgVFJVRSk7Ci0KLSAgcmV0dXJuICFHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChjbG9jaywgR1NUX0NMT0NLX0ZMQUdfTkVFRFNfU1RBUlRVUF9TWU5DKQotICAgICAgfHwgY2xvY2stPnByaXYtPnN5bmNlZDsKLX0KLQotLyoqCi0gKiBnc3RfY2xvY2tfc2V0X3N5bmNlZDoKLSAqIEBjbG9jazogYSBHc3RDbG9jawotICogQHN5bmNlZDogaWYgdGhlIGNsb2NrIGlzIHN5bmNlZAotICoKLSAqIFNldHMgQGNsb2NrIHRvIHN5bmNlZCBhbmQgZW1pdHMgdGhlIEdzdENsb2NrOjpzeW5jZWQgc2lnbmFsLCBhbmQgd2FrZXMgdXAgYW55Ci0gKiB0aHJlYWQgd2FpdGluZyBpbiBnc3RfY2xvY2tfd2FpdF9mb3Jfc3luYygpLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCBpZiBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMKLSAqIGlzIHNldCBvbiB0aGUgY2xvY2ssIGFuZCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgc3ViY2xhc3NlcyBvbmx5LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2Nsb2NrX3NldF9zeW5jZWQgKEdzdENsb2NrICogY2xvY2ssIGdib29sZWFuIHN5bmNlZCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NMT0NLIChjbG9jaykpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChjbG9jaywKLSAgICAgICAgICBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKLSAgaWYgKGNsb2NrLT5wcml2LT5zeW5jZWQgIT0gISAhc3luY2VkKSB7Ci0gICAgY2xvY2stPnByaXYtPnN5bmNlZCA9ICEgIXN5bmNlZDsKLSAgICBnX2NvbmRfc2lnbmFsICgmY2xvY2stPnByaXYtPnN5bmNfY29uZCk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKLSAgICBnX3NpZ25hbF9lbWl0IChjbG9jaywgZ3N0X2Nsb2NrX3NpZ25hbHNbU0lHTkFMX1NZTkNFRF0sIDAsICEgIXN5bmNlZCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNsb2NrLmggYi9nc3QvZ3N0Y2xvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IwZDZjNC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0Y2xvY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDU5MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGNsb2NrLmg6IEhlYWRlciBmb3IgY2xvY2sgc3Vic3lzdGVtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9DTE9DS19IX18KLSNkZWZpbmUgX19HU1RfQ0xPQ0tfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qIC0tLSBzdGFuZGFyZCB0eXBlIG1hY3JvcyAtLS0gKi8KLSNkZWZpbmUgR1NUX1RZUEVfQ0xPQ0sgICAgICAgICAgICAgICAgICAoZ3N0X2Nsb2NrX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfQ0xPQ0soY2xvY2spICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKGNsb2NrKSwgR1NUX1RZUEVfQ0xPQ0ssIEdzdENsb2NrKSkKLSNkZWZpbmUgR1NUX0lTX0NMT0NLKGNsb2NrKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChjbG9jayksIEdTVF9UWVBFX0NMT0NLKSkKLSNkZWZpbmUgR1NUX0NMT0NLX0NMQVNTKGNjbGFzcykgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChjY2xhc3MpLCBHU1RfVFlQRV9DTE9DSywgR3N0Q2xvY2tDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19DTE9DS19DTEFTUyhjY2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoY2NsYXNzKSwgR1NUX1RZUEVfQ0xPQ0spKQotI2RlZmluZSBHU1RfQ0xPQ0tfR0VUX0NMQVNTKGNsb2NrKSAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgoY2xvY2spLCBHU1RfVFlQRV9DTE9DSywgR3N0Q2xvY2tDbGFzcykpCi0jZGVmaW5lIEdTVF9DTE9DS19DQVNUKGNsb2NrKSAgICAgICAgICAgKChHc3RDbG9jayopKGNsb2NrKSkKLQotLyoqCi0gKiBHc3RDbG9ja1RpbWU6Ci0gKgotICogQSBkYXRhdHlwZSB0byBob2xkIGEgdGltZSwgbWVhc3VyZWQgaW4gbmFub3NlY29uZHMuCi0gKi8KLXR5cGVkZWYgZ3VpbnQ2NCBHc3RDbG9ja1RpbWU7Ci0KLS8qKgotICogR1NUX1RZUEVfQ0xPQ0tfVElNRToKLSAqCi0gKiBUaGUgI0dUeXBlIG9mIGEgI0dzdENsb2NrVGltZS4KLSAqLwotI2RlZmluZSBHU1RfVFlQRV9DTE9DS19USU1FIEdfVFlQRV9VSU5UNjQKLQotLyoqCi0gKiBHc3RDbG9ja1RpbWVEaWZmOgotICoKLSAqIEEgZGF0YXR5cGUgdG8gaG9sZCBhIHRpbWUgZGlmZmVyZW5jZSwgbWVhc3VyZWQgaW4gbmFub3NlY29uZHMuCi0gKi8KLXR5cGVkZWYgZ2ludDY0IEdzdENsb2NrVGltZURpZmY7Ci0vKioKLSAqIEdzdENsb2NrSUQ6Ci0gKgotICogQSBkYXRhdHlwZSB0byBob2xkIHRoZSBoYW5kbGUgdG8gYW4gb3V0c3RhbmRpbmcgc3luYyBvciBhc3luYyBjbG9jayBjYWxsYmFjay4KLSAqLwotdHlwZWRlZiBncG9pbnRlciBHc3RDbG9ja0lEOwotCi0vKioKLSAqIEdTVF9DTE9DS19USU1FX05PTkU6ICh2YWx1ZSAxODQ0Njc0NDA3MzcwOTU1MTYxNSkgKHR5cGUgR3N0Q2xvY2tUaW1lKQotICoKLSAqIENvbnN0YW50IHRvIGRlZmluZSBhbiB1bmRlZmluZWQgY2xvY2sgdGltZS4KLSAqLwotI2RlZmluZSBHU1RfQ0xPQ0tfVElNRV9OT05FICAgICAgICAgICAgICgoR3N0Q2xvY2tUaW1lKSAtMSkKLS8qKgotICogR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQ6Ci0gKiBAdGltZTogY2xvY2sgdGltZSB0byB2YWxpZGF0ZQotICoKLSAqIFRlc3RzIGlmIGEgZ2l2ZW4gI0dzdENsb2NrVGltZSByZXByZXNlbnRzIGEgdmFsaWQgZGVmaW5lZCB0aW1lLgotICovCi0jZGVmaW5lIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEKHRpbWUpICAgKCgoR3N0Q2xvY2tUaW1lKSh0aW1lKSkgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLQotLyoqCi0gKiBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTogKHZhbHVlIC05MjIzMzcyMDM2ODU0Nzc1ODA4KSAodHlwZSBHc3RDbG9ja1RpbWVEaWZmKQotICoKLSAqIENvbnN0YW50IHRvIGRlZmluZSBhbiB1bmRlZmluZWQgY2xvY2sgdGltZS4KLSAqLwotI2RlZmluZSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSAgICAgICAgICAgICBHX01JTklOVDY0Ci0vKioKLSAqIEdTVF9DTE9DS19TVElNRV9JU19WQUxJRDoKLSAqIEB0aW1lOiBzaWduZWQgY2xvY2sgdGltZSB0byB2YWxpZGF0ZQotICoKLSAqIFRlc3RzIGlmIGEgZ2l2ZW4gI0dzdENsb2NrVGltZURpZmYgb2YgI2dpbnQ2NCByZXByZXNlbnRzIGEgdmFsaWQgZGVmaW5lZCB0aW1lLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotI2RlZmluZSBHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQodGltZSkgICAoKChHc3RDbG9ja1RpbWVEaWZmKSh0aW1lKSkgIT0gR1NUX0NMT0NLX1NUSU1FX05PTkUpCi0KLS8qIEZJWE1FOiBzdGlsbCBuZWVkIHRvIGV4cGxpY2l0bHkgZm9yY2UgdHlwZXMgb24gdGhlIGRlZmluZXMgYmVsb3cgKi8KLS8qKgotICogR1NUX1NFQ09ORDogKHZhbHVlIDEwMDAwMDAwMDApICh0eXBlIEdzdENsb2NrVGltZSkKLSAqCi0gKiBDb25zdGFudCB0aGF0IGRlZmluZXMgb25lIEdTdHJlYW1lciBzZWNvbmQuCi0gKi8KLSNkZWZpbmUgR1NUX1NFQ09ORCAgKEdfVVNFQ19QRVJfU0VDICogR19HSU5UNjRfQ09OU1RBTlQgKDEwMDApKQotLyoqCi0gKiBHU1RfTVNFQ09ORDogKHZhbHVlIDEwMDAwMDApICh0eXBlIEdzdENsb2NrVGltZSkKLSAqCi0gKiBDb25zdGFudCB0aGF0IGRlZmluZXMgb25lIEdTdHJlYW1lciBtaWxsaXNlY29uZC4KLSAqLwotI2RlZmluZSBHU1RfTVNFQ09ORCAoR1NUX1NFQ09ORCAvIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwKSkKLS8qKgotICogR1NUX1VTRUNPTkQ6ICh2YWx1ZSAxMDAwKSAodHlwZSBHc3RDbG9ja1RpbWUpCi0gKgotICogQ29uc3RhbnQgdGhhdCBkZWZpbmVzIG9uZSBHU3RyZWFtZXIgbWljcm9zZWNvbmQuCi0gKi8KLSNkZWZpbmUgR1NUX1VTRUNPTkQgKEdTVF9TRUNPTkQgLyBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMDAwMCkpCi0vKioKLSAqIEdTVF9OU0VDT05EOiAodmFsdWUgMSkgKHR5cGUgR3N0Q2xvY2tUaW1lKQotICoKLSAqIENvbnN0YW50IHRoYXQgZGVmaW5lcyBvbmUgR1N0cmVhbWVyIG5hbm9zZWNvbmQKLSAqLwotI2RlZmluZSBHU1RfTlNFQ09ORCAoR1NUX1NFQ09ORCAvIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwMDAwMDAwKSkKLQotCi0vKioKLSAqIEdTVF9USU1FX0FTX1NFQ09ORFM6Ci0gKiBAdGltZTogdGhlIHRpbWUKLSAqCi0gKiBDb252ZXJ0IGEgI0dzdENsb2NrVGltZSB0byBzZWNvbmRzLgotICovCi0jZGVmaW5lIEdTVF9USU1FX0FTX1NFQ09ORFModGltZSkgICgodGltZSkgLyBHU1RfU0VDT05EKQotLyoqCi0gKiBHU1RfVElNRV9BU19NU0VDT05EUzoKLSAqIEB0aW1lOiB0aGUgdGltZQotICoKLSAqIENvbnZlcnQgYSAjR3N0Q2xvY2tUaW1lIHRvIG1pbGxpc2Vjb25kcyAoMS8xMDAwIG9mIGEgc2Vjb25kKS4KLSAqLwotI2RlZmluZSBHU1RfVElNRV9BU19NU0VDT05EUyh0aW1lKSAoKHRpbWUpIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDAwMDApKQotLyoqCi0gKiBHU1RfVElNRV9BU19VU0VDT05EUzoKLSAqIEB0aW1lOiB0aGUgdGltZQotICoKLSAqIENvbnZlcnQgYSAjR3N0Q2xvY2tUaW1lIHRvIG1pY3Jvc2Vjb25kcyAoMS8xMDAwMDAwIG9mIGEgc2Vjb25kKS4KLSAqLwotI2RlZmluZSBHU1RfVElNRV9BU19VU0VDT05EUyh0aW1lKSAoKHRpbWUpIC8gR19HSU5UNjRfQ09OU1RBTlQgKDEwMDApKQotLyoqCi0gKiBHU1RfVElNRV9BU19OU0VDT05EUzoKLSAqIEB0aW1lOiB0aGUgdGltZQotICoKLSAqIENvbnZlcnQgYSAjR3N0Q2xvY2tUaW1lIHRvIG5hbm9zZWNvbmRzICgxLzEwMDAwMDAwMDAgb2YgYSBzZWNvbmQpLgotICovCi0jZGVmaW5lIEdTVF9USU1FX0FTX05TRUNPTkRTKHRpbWUpICh0aW1lKQotCi0vKioKLSAqIEdTVF9DTE9DS19ESUZGOgotICogQHM6IHRoZSBmaXJzdCB0aW1lCi0gKiBAZTogdGhlIHNlY29uZCB0aW1lCi0gKgotICogQ2FsY3VsYXRlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBjbG9jayB0aW1lcyBhcyBhICNHc3RDbG9ja1RpbWVEaWZmLgotICogVGhlIGRpZmZlcmVuY2UgaXMgY2FsY3VsYXRlZCBhcyBAZSAtIEBzLgotICovCi0jZGVmaW5lIEdTVF9DTE9DS19ESUZGKHMsIGUpICAgICAgICAgICAgKEdzdENsb2NrVGltZURpZmYpKChlKSAtIChzKSkKLQotLyoqCi0gKiBHU1RfVElNRVZBTF9UT19USU1FOgotICogQHR2OiB0aGUgdGltZXZhbCB0byBjb252ZXJ0Ci0gKgotICogQ29udmVydCBhICNHVGltZVZhbCB0byBhICNHc3RDbG9ja1RpbWUuCi0gKi8KLSNkZWZpbmUgR1NUX1RJTUVWQUxfVE9fVElNRSh0dikgICAgICAgICAoR3N0Q2xvY2tUaW1lKSgodHYpLnR2X3NlYyAqIEdTVF9TRUNPTkQgKyAodHYpLnR2X3VzZWMgKiBHU1RfVVNFQ09ORCkKLQotLyoqCi0gKiBHU1RfVElNRV9UT19USU1FVkFMOgotICogQHQ6IFRoZSAjR3N0Q2xvY2tUaW1lIHRvIGNvbnZlcnQKLSAqIEB0djogVGhlIHRhcmdldCB0aW1ldmFsCi0gKgotICogQ29udmVydCBhICNHc3RDbG9ja1RpbWUgdG8gYSAjR1RpbWVWYWwKLSAqCi0gKiA8bm90ZT5vbiAzMi1iaXQgc3lzdGVtcywgYSB0aW1ldmFsIGhhcyBhIHJhbmdlIG9mIG9ubHkgMl4zMiAtIDEgc2Vjb25kcywKLSAqIHdoaWNoIGlzIGFib3V0IDY4IHllYXJzLiAgRXhwZWN0IHRyb3VibGUgaWYgeW91IHdhbnQgdG8gc2NoZWR1bGUgc3R1ZmYKLSAqIGluIHlvdXIgcGlwZWxpbmUgZm9yIDIwMzguPC9ub3RlPgotICovCi0jZGVmaW5lIEdTVF9USU1FX1RPX1RJTUVWQUwodCx0dikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19hc3NlcnQgKCJWYWx1ZSBvZiB0aW1lICIgI3QgIiBpcyBvdXQgb2YgdGltZXZhbCdzIHJhbmdlIiAmJiBcCi0gICAgICAoKHQpIC8gR1NUX1NFQ09ORCkgPCBHX01BWExPTkcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAodHYpLnR2X3NlYyAgPSAoZ2xvbmcpICgoKEdzdENsb2NrVGltZSkgKHQpKSAvIEdTVF9TRUNPTkQpOyAgIFwKLSAgKHR2KS50dl91c2VjID0gKGdsb25nKSAoKCgoR3N0Q2xvY2tUaW1lKSAodCkpIC0gICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAoKEdzdENsb2NrVGltZSkgKHR2KS50dl9zZWMpICogR1NUX1NFQ09ORCkgICAgXAotICAgICAgICAgICAgICAgICAvIEdTVF9VU0VDT05EKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0vKioKLSAqIEdTVF9USU1FU1BFQ19UT19USU1FOgotICogQHRzOiB0aGUgdGltZXNwZWMgdG8gY29udmVydAotICoKLSAqIENvbnZlcnQgYSBzdHJ1Y3QgdGltZXNwZWMgKHNlZSBtYW4gcHNlbGVjdCkgdG8gYSAjR3N0Q2xvY2tUaW1lLgotICovCi0jZGVmaW5lIEdTVF9USU1FU1BFQ19UT19USU1FKHRzKSAgICAgICAgKEdzdENsb2NrVGltZSkoKHRzKS50dl9zZWMgKiBHU1RfU0VDT05EICsgKHRzKS50dl9uc2VjICogR1NUX05TRUNPTkQpCi0vKioKLSAqIEdTVF9USU1FX1RPX1RJTUVTUEVDOgotICogQHQ6IFRoZSAjR3N0Q2xvY2tUaW1lIHRvIGNvbnZlcnQKLSAqIEB0czogVGhlIHRhcmdldCB0aW1lc3BlYwotICoKLSAqIENvbnZlcnQgYSAjR3N0Q2xvY2tUaW1lIHRvIGEgc3RydWN0IHRpbWVzcGVjIChzZWUgbWFuIHBzZWxlY3QpCi0gKi8KLSNkZWZpbmUgR1NUX1RJTUVfVE9fVElNRVNQRUModCx0cykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19hc3NlcnQgKCJWYWx1ZSBvZiB0aW1lICIgI3QgIiBpcyBvdXQgb2YgdGltZXNwZWMncyByYW5nZSIgJiYgIFwKLSAgICAgICgodCkgLyBHU1RfU0VDT05EKSA8IEdfTUFYTE9ORyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKHRzKS50dl9zZWMgID0gIChnbG9uZykgKCh0KSAvIEdTVF9TRUNPTkQpOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgKHRzKS50dl9uc2VjID0gKGdsb25nKSAoKCh0KSAtICh0cykudHZfc2VjICogR1NUX1NFQ09ORCkgLyBHU1RfTlNFQ09ORCk7ICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotLyogdGltZXN0YW1wIGRlYnVnZ2luZyBtYWNyb3MgKi8KLS8qKgotICogR1NUX1RJTUVfRk9STUFUOgotICoKLSAqIEEgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gcHJpbnRmLWxpa2UgZm9ybWF0IHN0cmluZ3MgdG8gZGlzcGxheSBhCi0gKiAjR3N0Q2xvY2tUaW1lIHZhbHVlIGluIGg6bTpzIGZvcm1hdC4gIFVzZSBHU1RfVElNRV9BUkdTKCkgdG8gY29uc3RydWN0Ci0gKiB0aGUgbWF0Y2hpbmcgYXJndW1lbnRzLgotICoKLSAqIEV4YW1wbGU6Ci0gKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgotICogcHJpbnRmKCIlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwgR1NUX1RJTUVfQVJHUyh0cykpOwotICogXXwKLSAqLwotI2RlZmluZSBHU1RfVElNRV9GT1JNQVQgInU6JTAydTolMDJ1LiUwOXUiCi0vKioKLSAqIEdTVF9USU1FX0FSR1M6Ci0gKiBAdDogYSAjR3N0Q2xvY2tUaW1lCi0gKgotICogRm9ybWF0IEB0IGZvciB0aGUgI0dTVF9USU1FX0ZPUk1BVCBmb3JtYXQgc3RyaW5nLiBOb3RlOiBAdCB3aWxsIGJlCi0gKiBldmFsdWF0ZWQgbW9yZSB0aGFuIG9uY2UuCi0gKi8KLSNkZWZpbmUgR1NUX1RJTUVfQVJHUyh0KSBcCi0gICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0KSA/IFwKLSAgICAgICAgKGd1aW50KSAoKChHc3RDbG9ja1RpbWUpKHQpKSAvIChHU1RfU0VDT05EICogNjAgKiA2MCkpIDogOTksIFwKLSAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHQpID8gXAotICAgICAgICAoZ3VpbnQpICgoKChHc3RDbG9ja1RpbWUpKHQpKSAvIChHU1RfU0VDT05EICogNjApKSAlIDYwKSA6IDk5LCBcCi0gICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0KSA/IFwKLSAgICAgICAgKGd1aW50KSAoKCgoR3N0Q2xvY2tUaW1lKSh0KSkgLyBHU1RfU0VDT05EKSAlIDYwKSA6IDk5LCBcCi0gICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0KSA/IFwKLSAgICAgICAgKGd1aW50KSAoKChHc3RDbG9ja1RpbWUpKHQpKSAlIEdTVF9TRUNPTkQpIDogOTk5OTk5OTk5Ci0vKioKLSAqIEdTVF9TVElNRV9GT1JNQVQ6Ci0gKgotICogQSBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBwcmludGYtbGlrZSBmb3JtYXQgc3RyaW5ncyB0byBkaXNwbGF5IGEgc2lnbmVkCi0gKiAjR3N0Q2xvY2tUaW1lRGlmZiBvciAjZ2ludDY0IHZhbHVlIGluIGg6bTpzIGZvcm1hdC4gIFVzZSBHU1RfVElNRV9BUkdTKCkgdG8KLSAqIGNvbnN0cnVjdCB0aGUgbWF0Y2hpbmcgYXJndW1lbnRzLgotICoKLSAqIEV4YW1wbGU6Ci0gKiB8WwotICogcHJpbnRmKCIlIiBHU1RfU1RJTUVfRk9STUFUICJcbiIsIEdTVF9TVElNRV9BUkdTKHRzKSk7Ci0gKiBdfAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotI2RlZmluZSBHU1RfU1RJTUVfRk9STUFUICJjJSIgR1NUX1RJTUVfRk9STUFUCi0vKioKLSAqIEdTVF9TVElNRV9BUkdTOgotICogQHQ6IGEgI0dzdENsb2NrVGltZURpZmYgb3IgI2dpbnQ2NAotICoKLSAqIEZvcm1hdCBAdCBmb3IgdGhlICNHU1RfU1RJTUVfRk9STUFUIGZvcm1hdCBzdHJpbmcuIE5vdGU6IEB0IHdpbGwgYmUKLSAqIGV2YWx1YXRlZCBtb3JlIHRoYW4gb25jZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLSNkZWZpbmUgR1NUX1NUSU1FX0FSR1ModCkJCQkJCQlcCi0gICgodCkgPT0gR1NUX0NMT0NLX1NUSU1FX05PTkUgfHwgKHQpID49IDApID8gJysnIDogJy0nLAkJXAotICAgIEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAodCkgPwkJCQkJXAotICAgIChndWludCkgKCgoR3N0Q2xvY2tUaW1lKShBQlModCkpKSAvIChHU1RfU0VDT05EICogNjAgKiA2MCkpIDogOTksCVwKLSAgICBHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKHQpID8JCQkJCVwKLSAgICAoZ3VpbnQpICgoKChHc3RDbG9ja1RpbWUpKEFCUyh0KSkpIC8gKEdTVF9TRUNPTkQgKiA2MCkpICUgNjApIDogOTksCVwKLSAgICBHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKHQpID8JCQkJCVwKLSAgICAoZ3VpbnQpICgoKChHc3RDbG9ja1RpbWUpKEFCUyh0KSkpIC8gR1NUX1NFQ09ORCkgJSA2MCkgOiA5OSwJXAotICAgIEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAodCkgPwkJCQkJXAotICAgIChndWludCkgKCgoR3N0Q2xvY2tUaW1lKShBQlModCkpKSAlIEdTVF9TRUNPTkQpIDogOTk5OTk5OTk5Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RDbG9ja0VudHJ5ICAgR3N0Q2xvY2tFbnRyeTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDbG9jayAgICAgICAgR3N0Q2xvY2s7Ci10eXBlZGVmIHN0cnVjdCBfR3N0Q2xvY2tDbGFzcyAgIEdzdENsb2NrQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0Q2xvY2tQcml2YXRlIEdzdENsb2NrUHJpdmF0ZTsKLQotLyogLS0tIHByb3RvdHlwZSBmb3IgYXN5bmMgY2FsbGJhY2tzIC0tLSAqLwotLyoqCi0gKiBHc3RDbG9ja0NhbGxiYWNrOgotICogQGNsb2NrOiBUaGUgY2xvY2sgdGhhdCB0cmlnZ2VyZWQgdGhlIGNhbGxiYWNrCi0gKiBAdGltZTogVGhlIHRpbWUgaXQgd2FzIHRyaWdnZXJlZAotICogQGlkOiBUaGUgI0dzdENsb2NrSUQgdGhhdCBleHBpcmVkCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIGluIHRoZSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYygpIGZ1bmN0aW9uCi0gKgotICogVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiB0aGUgY2FsbGJhY2suCi0gKgotICogUmV0dXJuczogJVRSVUUgb3IgJUZBTFNFIChjdXJyZW50bHkgdW51c2VkKQotICovCi10eXBlZGVmIGdib29sZWFuICAgICAgICAoKkdzdENsb2NrQ2FsbGJhY2spICAgICAoR3N0Q2xvY2sgKmNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja0lEIGlkLCBncG9pbnRlciB1c2VyX2RhdGEpOwotLyoqCi0gKiBHc3RDbG9ja1JldHVybjoKLSAqIEBHU1RfQ0xPQ0tfT0s6IFRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLgotICogQEdTVF9DTE9DS19FQVJMWTogVGhlIG9wZXJhdGlvbiB3YXMgc2NoZWR1bGVkIHRvbyBsYXRlLgotICogQEdTVF9DTE9DS19VTlNDSEVEVUxFRDogVGhlIGNsb2NrSUQgd2FzIHVuc2NoZWR1bGVkCi0gKiBAR1NUX0NMT0NLX0JVU1k6IFRoZSBDbG9ja0lEIGlzIGJ1c3kKLSAqIEBHU1RfQ0xPQ0tfQkFEVElNRTogQSBiYWQgdGltZSB3YXMgcHJvdmlkZWQgdG8gYSBmdW5jdGlvbi4KLSAqIEBHU1RfQ0xPQ0tfRVJST1I6IEFuIGVycm9yIG9jY3VycmVkCi0gKiBAR1NUX0NMT0NLX1VOU1VQUE9SVEVEOiBPcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICogQEdTVF9DTE9DS19ET05FOiBUaGUgQ2xvY2tJRCBpcyBkb25lIHdhaXRpbmcKLSAqCi0gKiBUaGUgcmV0dXJuIHZhbHVlIG9mIGEgY2xvY2sgb3BlcmF0aW9uLgotICovCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX0NMT0NLX09LICAgICAgICAgID0gIDAsCi0gIEdTVF9DTE9DS19FQVJMWSAgICAgICA9ICAxLAotICBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQgPSAgMiwKLSAgR1NUX0NMT0NLX0JVU1kgICAgICAgID0gIDMsCi0gIEdTVF9DTE9DS19CQURUSU1FICAgICA9ICA0LAotICBHU1RfQ0xPQ0tfRVJST1IgICAgICAgPSAgNSwKLSAgR1NUX0NMT0NLX1VOU1VQUE9SVEVEID0gIDYsCi0gIEdTVF9DTE9DS19ET05FICAgICAgICA9ICA3Ci19IEdzdENsb2NrUmV0dXJuOwotCi0vKioKLSAqIEdzdENsb2NrRW50cnlUeXBlOgotICogQEdTVF9DTE9DS19FTlRSWV9TSU5HTEU6IGEgc2luZ2xlIHNob3QgdGltZW91dAotICogQEdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQzogYSBwZXJpb2RpYyB0aW1lb3V0IHJlcXVlc3QKLSAqCi0gKiBUaGUgdHlwZSBvZiB0aGUgY2xvY2sgZW50cnkKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDCi19IEdzdENsb2NrRW50cnlUeXBlOwotCi0vKioKLSAqIEdTVF9DTE9DS19FTlRSWToKLSAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIGNhc3QKLSAqCi0gKiBDYXN0IHRvIGEgY2xvY2sgZW50cnkKLSAqLwotI2RlZmluZSBHU1RfQ0xPQ0tfRU5UUlkoZW50cnkpICAgICAgICAgICgoR3N0Q2xvY2tFbnRyeSAqKShlbnRyeSkpCi0vKioKLSAqIEdTVF9DTE9DS19FTlRSWV9DTE9DSzoKLSAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSBvd25lciBjbG9jayBvZiB0aGUgZW50cnkKLSAqLwotI2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfQ0xPQ0soZW50cnkpICAgICgoZW50cnkpLT5jbG9jaykKLS8qKgotICogR1NUX0NMT0NLX0VOVFJZX1RZUEU6Ci0gKiBAZW50cnk6IHRoZSBlbnRyeSB0byBxdWVyeQotICoKLSAqIEdldCB0aGUgdHlwZSBvZiB0aGUgY2xvY2sgZW50cnkKLSAqLwotI2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfVFlQRShlbnRyeSkgICAgICgoZW50cnkpLT50eXBlKQotLyoqCi0gKiBHU1RfQ0xPQ0tfRU5UUllfVElNRToKLSAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSByZXF1ZXN0ZWQgdGltZSBvZiB0aGlzIGVudHJ5Ci0gKi8KLSNkZWZpbmUgR1NUX0NMT0NLX0VOVFJZX1RJTUUoZW50cnkpICAgICAoKGVudHJ5KS0+dGltZSkKLS8qKgotICogR1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMOgotICogQGVudHJ5OiB0aGUgZW50cnkgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIGludGVydmFsIG9mIHRoaXMgcGVyaW9kaWMgZW50cnkKLSAqLwotI2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfSU5URVJWQUwoZW50cnkpICgoZW50cnkpLT5pbnRlcnZhbCkKLS8qKgotICogR1NUX0NMT0NLX0VOVFJZX1NUQVRVUzoKLSAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogVGhlIHN0YXR1cyBvZiB0aGUgZW50cnkKLSAqLwotI2RlZmluZSBHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTKGVudHJ5KSAgICgoZW50cnkpLT5zdGF0dXMpCi0KLS8qKgotICogR3N0Q2xvY2tFbnRyeToKLSAqIEByZWZjb3VudDogcmVmZXJlbmNlIGNvdW50ZXIgKHJlYWQtb25seSkKLSAqCi0gKiBBbGwgcGVuZGluZyB0aW1lb3V0cyBvciBwZXJpb2RpYyBub3RpZmllcyBhcmUgY29udmVydGVkIGludG8KLSAqIGFuIGVudHJ5LgotICogTm90ZSB0aGF0IEdzdENsb2NrRW50cnkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gb3BhcXVlIHN0cnVjdHVyZS4gSXQgbXVzdAotICogbm90IGJlIGV4dGVuZGVkIG9yIGFsbG9jYXRlZCB1c2luZyBhIGN1c3RvbSBhbGxvY2F0b3IuCi0gKi8KLXN0cnVjdCBfR3N0Q2xvY2tFbnRyeSB7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICByZWZjb3VudDsKLSAgLyo8IHByb3RlY3RlZCA+Ki8KLSAgR3N0Q2xvY2sgICAgICAgICAgICAgICpjbG9jazsKLSAgR3N0Q2xvY2tFbnRyeVR5cGUgICAgICB0eXBlOwotICBHc3RDbG9ja1RpbWUgICAgICAgICAgIHRpbWU7Ci0gIEdzdENsb2NrVGltZSAgICAgICAgICAgaW50ZXJ2YWw7Ci0gIEdzdENsb2NrUmV0dXJuICAgICAgICAgc3RhdHVzOwotICBHc3RDbG9ja0NhbGxiYWNrICAgICAgIGZ1bmM7Ci0gIGdwb2ludGVyICAgICAgICAgICAgICAgdXNlcl9kYXRhOwotICBHRGVzdHJveU5vdGlmeSAgICAgICAgIGRlc3Ryb3lfZGF0YTsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICB1bnNjaGVkdWxlZDsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICB3b2tlbl91cDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0jaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgotCi0vKioKLSAqIEdzdENsb2NrRmxhZ3M6Ci0gKiBAR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9TWU5DOiBjbG9jayBjYW4gZG8gYSBzaW5nbGUgc3luYyB0aW1lb3V0IHJlcXVlc3QKLSAqIEBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX0FTWU5DOiBjbG9jayBjYW4gZG8gYSBzaW5nbGUgYXN5bmMgdGltZW91dCByZXF1ZXN0Ci0gKiBAR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkM6IGNsb2NrIGNhbiBkbyBzeW5jIHBlcmlvZGljIHRpbWVvdXQgcmVxdWVzdHMKLSAqIEBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfQVNZTkM6IGNsb2NrIGNhbiBkbyBhc3luYyBwZXJpb2RpYyB0aW1lb3V0IGNhbGxiYWNrcwotICogQEdTVF9DTE9DS19GTEFHX0NBTl9TRVRfUkVTT0xVVElPTjogY2xvY2sncyByZXNvbHV0aW9uIGNhbiBiZSBjaGFuZ2VkCi0gKiBAR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVI6IGNsb2NrIGNhbiBiZSBzbGF2ZWQgdG8gYSBtYXN0ZXIgY2xvY2sKLSAqIEBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkM6IGNsb2NrIG5lZWRzIHRvIGJlIHN5bmNlZCBiZWZvcmUgaXQgY2FuIGJlIHVzZWQKLSAqICAgICAoU2luY2UgMS42KQotICogQEdTVF9DTE9DS19GTEFHX0xBU1Q6IHN1YmNsYXNzZXMgY2FuIGFkZCBhZGRpdGlvbmFsIGZsYWdzIHN0YXJ0aW5nIGZyb20gdGhpcyBmbGFnCi0gKgotICogVGhlIGNhcGFiaWxpdGllcyBvZiB0aGlzIGNsb2NrCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfU1lOQyAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCi0gIEdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfQVNZTkMgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMSksCi0gIEdTVF9DTE9DS19GTEFHX0NBTl9ET19QRVJJT0RJQ19TWU5DICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMiksCi0gIEdTVF9DTE9DS19GTEFHX0NBTl9ET19QRVJJT0RJQ19BU1lOQyAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMyksCi0gIEdTVF9DTE9DS19GTEFHX0NBTl9TRVRfUkVTT0xVVElPTiAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgNCksCi0gIEdTVF9DTE9DS19GTEFHX0NBTl9TRVRfTUFTVEVSICAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgNSksCi0gIEdTVF9DTE9DS19GTEFHX05FRURTX1NUQVJUVVBfU1lOQyAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgNiksCi0gIC8qIHBhZGRpbmcgKi8KLSAgR1NUX0NMT0NLX0ZMQUdfTEFTVCAgICAgICAgICAgICAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCA4KQotfSBHc3RDbG9ja0ZsYWdzOwotCi0vKioKLSAqIEdTVF9DTE9DS19GTEFHUzoKLSAqIEBjbG9jazogdGhlIGNsb2NrIHRvIHF1ZXJ5Ci0gKgotICogR2V0cyB0aGUgI0dzdENsb2NrRmxhZ3MgY2xvY2sgZmxhZ3MuCi0gKi8KLSNkZWZpbmUgR1NUX0NMT0NLX0ZMQUdTKGNsb2NrKSAgR1NUX09CSkVDVF9GTEFHUyhjbG9jaykKLQotLyoqCi0gKiBHc3RDbG9jazoKLSAqCi0gKiAjR3N0Q2xvY2sgYmFzZSBzdHJ1Y3R1cmUuIFRoZSB2YWx1ZXMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlCi0gKiBwcm90ZWN0ZWQgZm9yIHN1YmNsYXNzZXMsIHVzZSB0aGUgbWV0aG9kcyB0byB1c2UgdGhlICNHc3RDbG9jay4KLSAqLwotc3RydWN0IF9Hc3RDbG9jayB7Ci0gIEdzdE9iamVjdCAgICAgIG9iamVjdDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0Q2xvY2tQcml2YXRlICpwcml2OwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotLyoqCi0gKiBHc3RDbG9ja0NsYXNzOgotICogQHBhcmVudF9jbGFzczogdGhlIHBhcmVudCBjbGFzcyBzdHJ1Y3R1cmUKLSAqIEBjaGFuZ2VfcmVzb2x1dGlvbjogY2hhbmdlIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBjbG9jay4gTm90IGFsbCB2YWx1ZXMgbWlnaHQKLSAqICAgICAgICAgICAgICAgICAgICAgYmUgYWNjZXB0YWJsZS4gVGhlIG5ldyByZXNvbHV0aW9uIHNob3VsZCBiZSByZXR1cm5lZC4KLSAqIEBnZXRfcmVzb2x1dGlvbjogZ2V0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBjbG9jay4KLSAqIEBnZXRfaW50ZXJuYWxfdGltZTogZ2V0IHRoZSBpbnRlcm5hbCB1bmFkanVzdGVkIHRpbWUgb2YgdGhlIGNsb2NrLgotICogICAgICAgIGltcGxlbWVudCBAd2FpdF9qaXR0ZXIgaW5zdGVhZC4KLSAqIEB3YWl0OiBwZXJmb3JtIGEgYmxvY2tpbmcgd2FpdCBvbiB0aGUgZ2l2ZW4gI0dzdENsb2NrRW50cnkgYW5kIHJldHVybgotICogICAgICAgICAgICAgICB0aGUgaml0dGVyLgotICogQHdhaXRfYXN5bmM6IHBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIHdhaXQgZm9yIHRoZSBnaXZlbiAjR3N0Q2xvY2tFbnRyeS4KLSAqIEB1bnNjaGVkdWxlOiB1bmJsb2NrIGEgYmxvY2tpbmcgb3IgYXN5bmMgd2FpdCBvcGVyYXRpb24uCi0gKgotICogR1N0cmVhbWVyIGNsb2NrIGNsYXNzLiBPdmVycmlkZSB0aGUgdm1ldGhvZHMgdG8gaW1wbGVtZW50IHRoZSBjbG9jawotICogZnVuY3Rpb25hbGl0eS4KLSAqLwotc3RydWN0IF9Hc3RDbG9ja0NsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICAgICAgIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHVibGljID4qLwotICAvKiB2dGFibGUgKi8KLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgICgqY2hhbmdlX3Jlc29sdXRpb24pICAgIChHc3RDbG9jayAqY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIG9sZF9yZXNvbHV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSBuZXdfcmVzb2x1dGlvbik7Ci0gIEdzdENsb2NrVGltZSAgICAgICAgICAoKmdldF9yZXNvbHV0aW9uKSAgICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKLQotICBHc3RDbG9ja1RpbWUgICAgICAgICAgKCpnZXRfaW50ZXJuYWxfdGltZSkgICAgKEdzdENsb2NrICpjbG9jayk7Ci0KLSAgLyogd2FpdGluZyBvbiBhbiBJRCAqLwotICBHc3RDbG9ja1JldHVybiAgICAgICAgKCp3YWl0KSAgICAgICAgICAgICAgICAgKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tFbnRyeSAqZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiAqaml0dGVyKTsKLSAgR3N0Q2xvY2tSZXR1cm4gICAgICAgICgqd2FpdF9hc3luYykgICAgICAgICAgIChHc3RDbG9jayAqY2xvY2ssIEdzdENsb2NrRW50cnkgKmVudHJ5KTsKLSAgdm9pZCAgICAgICAgICAgICAgICAgICgqdW5zY2hlZHVsZSkgICAgICAgICAgIChHc3RDbG9jayAqY2xvY2ssIEdzdENsb2NrRW50cnkgKmVudHJ5KTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSAgICAgICAgICAgICAgICAgICBnc3RfY2xvY2tfZ2V0X3R5cGUgICAgICAgICAgICAgICh2b2lkKTsKLQotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2Nsb2NrX3NldF9yZXNvbHV0aW9uICAgICAgICAoR3N0Q2xvY2sgKmNsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHJlc29sdXRpb24pOwotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uICAgICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKLQotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lICAgICAgICAgICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gICAgICAgKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tUaW1lIGludGVybmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGV4dGVybmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHJhdGVfbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHJhdGVfZGVub20pOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbiAgICAgICAoR3N0Q2xvY2sgKmNsb2NrLCBHc3RDbG9ja1RpbWUgKmludGVybmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICpleHRlcm5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqcmF0ZV9udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnJhdGVfZGVub20pOwotCi0vKiBtYXN0ZXIvc2xhdmUgY2xvY2tzICovCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfY2xvY2tfc2V0X21hc3RlciAgICAgICAgICAgIChHc3RDbG9jayAqY2xvY2ssIEdzdENsb2NrICptYXN0ZXIpOwotR3N0Q2xvY2sqICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX2dldF9tYXN0ZXIgICAgICAgICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX3NldF90aW1lb3V0ICAgICAgICAgICAoR3N0Q2xvY2sgKmNsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpOwotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lb3V0ICAgICAgICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbiAgICAgICAoR3N0Q2xvY2sgKmNsb2NrLCBHc3RDbG9ja1RpbWUgc2xhdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgbWFzdGVyLCBnZG91YmxlICpyX3NxdWFyZWQpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZCAoR3N0Q2xvY2sgKmNsb2NrLCBHc3RDbG9ja1RpbWUgc2xhdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgbWFzdGVyLCBnZG91YmxlICpyX3NxdWFyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKmludGVybmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICpleHRlcm5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqcmF0ZV9udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnJhdGVfZGVub20pOwotCi0vKiBnZXR0aW5nIGFuZCBhZGp1c3RpbmcgaW50ZXJuYWwvZXh0ZXJuYWwgdGltZSAqLwotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lICAgICAoR3N0Q2xvY2sgKmNsb2NrKTsKLUdzdENsb2NrVGltZSAgICAgICAgICAgIGdzdF9jbG9ja19hZGp1c3RfdW5sb2NrZWQgICAgICAgKEdzdENsb2NrICpjbG9jaywgR3N0Q2xvY2tUaW1lIGludGVybmFsKTsKLUdzdENsb2NrVGltZSAgICAgICAgICAgIGdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbiAoR3N0Q2xvY2sgKmNsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGludGVybmFsX3RhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSBjaW50ZXJuYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgY2V4dGVybmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGNudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgY2Rlbm9tKTsKLUdzdENsb2NrVGltZSAgICAgICAgICAgIGdzdF9jbG9ja191bmFkanVzdF93aXRoX2NhbGlicmF0aW9uIChHc3RDbG9jayAqY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgZXh0ZXJuYWxfdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGNpbnRlcm5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSBjZXh0ZXJuYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgY251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSBjZGVub20pOwotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkICAgICAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tUaW1lIGV4dGVybmFsKTsKLQotLyogd2FpdGluZyBmb3IsIHNpZ25hbGxpbmcgYW5kIGNoZWNraW5nIGZvciBzeW5jaHJvbml6YXRpb24gKi8KLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9jbG9ja193YWl0X2Zvcl9zeW5jICAgICAgICAgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSB0aW1lb3V0KTsKLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9jbG9ja19pc19zeW5jZWQgICAgICAgICAgICAgKEdzdENsb2NrICogY2xvY2spOwotCi0vKiB0byBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMgb25seSAqLwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX3NldF9zeW5jZWQgICAgICAgICAgICAoR3N0Q2xvY2sgKiBjbG9jaywgZ2Jvb2xlYW4gc3luY2VkKTsKLQotLyogY3JlYXRpbmcgSURzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2V0IG5vdGlmaWNhdGlvbnMgKi8KLUdzdENsb2NrSUQgICAgICAgICAgICAgIGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgICAgKEdzdENsb2NrICpjbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSB0aW1lKTsKLUdzdENsb2NrSUQgICAgICAgICAgICAgIGdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQgICAgICAgKEdzdENsb2NrICpjbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSBzdGFydF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGludGVydmFsKTsKLQotLyogcmVmZXJlbmNlIGNvdW50aW5nICovCi1Hc3RDbG9ja0lEICAgICAgICAgICAgICBnc3RfY2xvY2tfaWRfcmVmICAgICAgICAgICAgICAgIChHc3RDbG9ja0lEIGlkKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9jbG9ja19pZF91bnJlZiAgICAgICAgICAgICAgKEdzdENsb2NrSUQgaWQpOwotCi0vKiBvcGVyYXRpb25zIG9uIElEcyAqLwotZ2ludCAgICAgICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyAgICAgICAoZ2NvbnN0cG9pbnRlciBpZDEsIGdjb25zdHBvaW50ZXIgaWQyKTsKLQotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2Nsb2NrX2lkX2dldF90aW1lICAgICAgICAgICAoR3N0Q2xvY2tJRCBpZCk7Ci1Hc3RDbG9ja1JldHVybiAgICAgICAgICBnc3RfY2xvY2tfaWRfd2FpdCAgICAgICAgICAgICAgIChHc3RDbG9ja0lEIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiAqaml0dGVyKTsKLUdzdENsb2NrUmV0dXJuICAgICAgICAgIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jICAgICAgICAgKEdzdENsb2NrSUQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja0NhbGxiYWNrIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2RhdGEpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgICAgICAgICAoR3N0Q2xvY2tJRCBpZCk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9jbG9ja19zaW5nbGVfc2hvdF9pZF9yZWluaXQgKEdzdENsb2NrICogY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja0lEIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWUpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX3BlcmlvZGljX2lkX3JlaW5pdCAgICAoR3N0Q2xvY2sgKiBjbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrSUQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSBpbnRlcnZhbCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0Q2xvY2ssIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NMT0NLX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNvbXBhdC5oIGIvZ3N0L2dzdGNvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjExMjQ2Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3Rjb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGNvbXBhdC5oOiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzdHVmZgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEFQSSBjb21wYXRpYmlsaXR5IHN0dWZmICovCi0jaWZuZGVmIF9fR1NUQ09NUEFUX0hfXwotI2RlZmluZSBfX0dTVENPTVBBVF9IX18KLS8qKgotICogU0VDVElPTjpnc3Rjb21wYXQKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRGVwcmVjYXRlZCBBUEkgZW50cmllcwotICoKLSAqIFBsZWFzZSBkbyBub3QgdXNlIHRoZXNlIGluIG5ldyBjb2RlLgotICogVGhlc2Ugc3ltYm9scyBhcmUgb25seSBhdmFpbGFibGUgYnkgZGVmaW5pbmcgR1NUX0RJU0FCTEVfREVQUkVDQVRFRC4KLSAqIFRoaXMgY2FuIGJlIGRvbmUgaW4gQ0ZMQUdTIGZvciBjb21waWxpbmcgb2xkIGNvZGUuCi0gKi8KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGFkLmg+Ci0KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhzKSAgICAgICAgICAgIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKE5VTEwsIHMsIE5VTEwpCi0KLSNkZWZpbmUgR1NUX0JVRkZFUl9USU1FU1RBTVAgICAgICAgICAgR1NUX0JVRkZFUl9QVFMKLSNkZWZpbmUgR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQKLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotZ3N0X3BhZF9zZXRfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjYXBzICE9IE5VTEwgJiYgZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpLCBGQUxTRSk7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpOwotCi0gIGlmIChHU1RfUEFEX0lTX1NSQyAocGFkKSkKLSAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpOwotICBlbHNlCi0gICAgcmVzID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChwYWQsIGV2ZW50KTsKLQotICByZXR1cm4gcmVzOwotfQotCi0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfREVQUkVDQVRFRAotCi0vKiBhZGRlZCB0byBlYXNlIHRoZSB0cmFuc2l0aW9uIHRvIDAuMTEgKi8KLSNkZWZpbmUgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEKLQotI2RlZmluZSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9sb25nbmFtZShmKSAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YShmLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9MT05HTkFNRSkKLSNkZWZpbmUgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfa2xhc3MoZikgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEoZiwgR1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1MpCi0jZGVmaW5lIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2Rlc2NyaXB0aW9uKGYpIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhKGYsIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OKQotI2RlZmluZSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9hdXRob3IoZikgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YShmLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1IpCi0jZGVmaW5lIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2RvY3VtZW50YXRpb25fdXJpKGYpICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YShmLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9ET0NfVVJJKQotI2RlZmluZSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9pY29uX25hbWUoZikgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YShmLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9JQ09OX05BTUUpCi0KLSNkZWZpbmUgZ3N0X3BhZF9nZXRfY2Fwc19yZWZmZWQocCkgICAgICAgICAgICAgZ3N0X3BhZF9nZXRfY2FwcyhwKQotI2RlZmluZSBnc3RfcGFkX3BlZXJfZ2V0X2NhcHNfcmVmZmVkKHApICAgICAgICBnc3RfcGFkX3BlZXJfZ2V0X2NhcHMocCkKLQotI2RlZmluZSBnc3RfYWRhcHRlcl9wcmV2X3RpbWVzdGFtcCAgICBnc3RfYWRhcHRlcl9wcmV2X3B0cwotCi0jZGVmaW5lIGdzdF90YWdfbGlzdF9mcmVlKHRhZ2xpc3QpICAgIGdzdF90YWdfbGlzdF91bnJlZih0YWdsaXN0KQotCi0jZGVmaW5lIEdTVF9NRVNTQUdFX0RVUkFUSU9OIEdTVF9NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQKLSNkZWZpbmUgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uKHNyYyxmbXQsZHVyKSBcCi0gICAgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQoc3JjKQotI2RlZmluZSBnc3RfbWVzc2FnZV9wYXJzZV9kdXJhdGlvbihtc2csZm10LGR1cikgXAotR19TVE1UX1NUQVJUIHsgXAotICBHc3RGb3JtYXQgKnBfZm10ID0gZm10OyBcCi0gIGdpbnQ2NCAqcF9kdXIgPSBkdXI7IFwKLSAgaWYgKHBfZm10KSBcCi0gICAgKnBfZm10ID0gR1NUX0ZPUk1BVF9USU1FOyBcCi0gIGlmIChwX2R1cikgXAotICAgICpwX2R1ciA9IEdTVF9DTE9DS19USU1FX05PTkU7IFwKLX0gR19TVE1UX0VORAotCi0jZW5kaWYgLyogbm90IEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQgKi8KLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUQ09NUEFUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNvbmZpZy5oLmluIGIvZ3N0L2dzdGNvbmZpZy5oLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjk1ZjYxLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3Rjb25maWcuaC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDQsMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGNvbmZpZy5oOiBHU1RfRElTQUJMRV8qIG1hY3JvcyBmb3IgYnVpbGQgY29uZmlndXJhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3Rjb25maWcKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zCi0gKgotICogVGhpcyBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgR1N0cmVhbWVyLiBXaGVuIGJ1aWxkaW5nCi0gKiBHU3RyZWFtZXIgdGhlcmUgYXJlIGEgbG90IG9mIHBhcnRzIChrbm93biBpbnRlcm5hbGx5IGFzICJzdWJzeXN0ZW1zIiApIHRoYXQKLSAqIGNhbiBiZSBkaXNhYmxlZCBmb3IgdmFyaW91cyByZWFzb25zLiBUaGUgbW9zdCBjb21tb24gcmVhc29ucyBhcmUgc3BlZWQgYW5kCi0gKiBzaXplLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBHU3RyZWFtZXIgaXMgZGVzaWduZWQgdG8gcnVuIG9uIGVtYmVkZGVkCi0gKiBzeXN0ZW1zLgotICoKLSAqIElmIGEgc3Vic3lzdGVtIGlzIGRpc2FibGVkLCBtb3N0IG9mIHRoaXMgY2hhbmdlcyBhcmUgZG9uZSBpbiBhbiBBUEkKLSAqIGNvbXBhdGlibGUgd2F5LCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBhZGFwdCB5b3VyIGNvZGUgaW4gbW9zdCBjYXNlcy4gSXQgaXMKLSAqIG5ldmVyIGRvbmUgaW4gYW4gQUJJIGNvbXBhdGlibGUgd2F5IHRob3VnaC4gU28gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBhCi0gKiBzdWJzeXN0ZW0sIHlvdSBoYXZlIHRvIHJlYnVpbGQgYWxsIHByb2dyYW1zIGRlcGVuZGluZyBvbiBHU3RyZWFtZXIsIHRvby4KLSAqCi0gKiBJZiBhIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCBpbiBHU3RyZWFtZXIsIGEgdmFsdWUgaXMgZGVmaW5lZCBpbgotICogJmx0O2dzdC9nc3QuaCZndDsuIFlvdSBjYW4gY2hlY2sgdGhpcyBpZiB5b3UgZG8gc3Vic3lzdGVtLXNwZWNpZmljIHN0dWZmLgotICogPGV4YW1wbGUgaWQ9ImV4YW1wbGUtZ3N0Y29uZmlnIj4KLSAqIDx0aXRsZT5Eb2luZyBzdWJzeXN0ZW0gc3BlY2lmaWMgdGhpbmdzPC90aXRsZT4KLSAqIDxwcm9ncmFtbGlzdGluZz4KLSAqICZoYXNoO2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAqIC8vIGRvIHN0dWZmIHNwZWNpZmljIHRvIHRoZSBkZWJ1Z2dpbmcgc3Vic3lzdGVtCi0gKiAmaGFzaDtlbmRpZiAvLyBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L2V4YW1wbGU+Ci0gKi8KLQotI2lmbmRlZiBfX0dTVF9DT05GSUdfSF9fCi0jZGVmaW5lIF9fR1NUX0NPTkZJR19IX18KLQotLyogdHJpY2sgZ3RrLWRvYyBpbnRvIGJlbGlldmluZyB0aGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkICh5ZXMsIGl0J3MgdWdseSkgKi8KLQotI2lmIDAKLSNkZWZpbmUgR1NUX0RJU0FCTEVfR1NUX0RFQlVHIDEKLSNkZWZpbmUgR1NUX0RJU0FCTEVfUEFSU0UgMQotI2RlZmluZSBHU1RfRElTQUJMRV9SRUdJU1RSWSAxCi0jZGVmaW5lIEdTVF9ESVNBQkxFX1BMVUdJTiAxCi0jZW5kaWYKLQotLyoqKioqIGRlZmF1bHQgcGFkZGluZyBvZiBzdHJ1Y3R1cmVzICoqKioqLwotI2RlZmluZSBHU1RfUEFERElORwkJNAotI2RlZmluZSBHU1RfUEFERElOR19JTklUCXsgTlVMTCB9Ci0KLS8qKioqKiBwYWRkaW5nIGZvciB2ZXJ5IGV4dGVuc2libGUgYmFzZSBjbGFzc2VzICoqKioqLwotI2RlZmluZSBHU1RfUEFERElOR19MQVJHRQkyMAotCi0vKioqKiogZGlzYWJsaW5nIG9mIHN1YnN5c3RlbXMgKioqKiovCi0KLS8qKgotICogR1NUX0RJU0FCTEVfR1NUX0RFQlVHOgotICoKLSAqIENvbmZpZ3VyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGUgZGVidWdnaW5nIHN1YnN5c3RlbQotICovCi1AR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLQotLyoqCi0gKiBHU1RfRElTQUJMRV9QQVJTRToKLSAqCi0gKiBDb25maWd1cmVzIHRoZSBpbmNsdXNpb24gb2YgdGhlIGdzdC1sYXVuY2ggcGFyc2VyCi0gKi8KLUBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi0KLS8qKgotICogR1NUX0RJU0FCTEVfUkVHSVNUUlk6Ci0gKgotICogQ29uZmlndXJlcyB0aGUgdXNlIG9mIHRoZSBwbHVnaW4gcmVnaXN0cnkuCi0gKiBJZiBvbmUgZGlzYWJsZXMgdGhpcywgcmVxdWlyZWQgcGx1Z2lucyBuZWVkIHRvIGJlIGxvYWRlZCBhbmQgcmVnaXN0ZXJlZAotICogbWFudWFsbHkKLSAqLwotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLQotLyogRklYTUU6IHRlc3QgYW5kIGRvY3VtZW50IHRoZXNlISAqLwotLyogQ29uZmlndXJlcyB0aGUgdXNlIG9mIGV4dGVybmFsIHBsdWdpbnMgKi8KLUBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotCi0vKiBXaGV0aGVyIG9yIG5vdCB0aGUgQ1BVIHN1cHBvcnRzIHVuYWxpZ25lZCBhY2Nlc3MKLSAqIFRoZSBtYWNyb3MgdXNlZCBhcmUgZGVmaW5lZCBjb25zaXN0ZW50bHkgYnkgR0NDLCBDbGFuZywgTVNWQywgU3VuLCBhbmQgSUNDCi0gKgotICogUmVmZXJlbmNlczoKLSAqIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3AvcHJlZGVmL3dpa2kvQXJjaGl0ZWN0dXJlcy8KLSAqIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYjAwODRrYXkuYXNweAotICogaHR0cDovL2RvY3Mub3JhY2xlLmNvbS9jZC9FMTkyMDUtMDEvODIwLTQxNTUvYysrX2ZhcS5odG1sI1ZlcnM2Ci0gKiBodHRwczovL3NvZnR3YXJlLmludGVsLmNvbS9lbi11cy9ub2RlLzU4MzQwMgotICovCi0jaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hcmNfXykgfHwgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBkZWZpbmVkKF9fYmZpbikgfHwgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX25pb3MyX18pIHx8IGRlZmluZWQoX19NSUNST0JMQVpFX18pIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX19zaF9fKSB8fCBkZWZpbmVkKF9fU0g0X18pIHx8IGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fc3BhcmMpIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX01fQUxQSEEpIHx8IGRlZmluZWQoX01fQVJNKSB8fCBkZWZpbmVkKF9NX0lBNjQpIHx8IGRlZmluZWQoX194dGVuc2FfXykKLSMgIGRlZmluZSBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTIDAKLSNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX2FtZDY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgZGVmaW5lZChfX202OGtfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkgfHwgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pIHx8IGRlZmluZWQoX196YXJjaF9fKQotIyAgZGVmaW5lIEdTVF9IQVZFX1VOQUxJR05FRF9BQ0NFU1MgMQotI2Vsc2UKLSMgIGVycm9yICJDb3VsZCBub3QgZGV0ZWN0IGFyY2hpdGVjdHVyZTsgZG9uJ3Qga25vdyB3aGV0aGVyIGl0IHN1cHBvcnRzIHVuYWxpZ25lZCBhY2Nlc3MhIFBsZWFzZSBmaWxlIGEgYnVnLiIKLSNlbmRpZgotCi0vKioKLSAqIEdTVF9FWFBPUlQ6Ci0gKgotICogRXhwb3J0IHRoZSBnaXZlbiB2YXJpYWJsZSBmcm9tIHRoZSBidWlsdCBzaGFyZWQgb2JqZWN0LgotICoKLSAqIE9uIFdpbmRvd3MsIHRoaXMgZXhwb3J0cyB0aGUgdmFyaWFibGUgZnJvbSB0aGUgRExMLgotICogT24gb3RoZXIgcGxhdGZvcm1zLCB0aGlzIGdldHMgZGVmaW5lZCB0byAiZXh0ZXJuIi4KLSAqLwotLyoqCi0gKiBHU1RfUExVR0lOX0VYUE9SVDoKLSAqCi0gKiBFeHBvcnQgdGhlIHBsdWdpbidzIGRlZmluaXRpb24uCi0gKgotICogT24gV2luZG93cywgdGhpcyBleHBvcnRzIHRoZSBwbHVnaW4gZGVmaW5pdGlvbiBmcm9tIHRoZSBETEwuCi0gKiBPbiBvdGhlciBwbGF0Zm9ybXMsIHRoaXMgZ2V0cyBkZWZpbmVkIGFzIGEgbm8tb3AuCi0gKi8KLS8qIE9ubHkgdXNlIF9fZGVjbHNwZWMoZGxsZXhwb3J0L2ltcG9ydCkgd2hlbiB3ZSBoYXZlIGJlZW4gYnVpbHQgd2l0aCBNU1ZDIG9yCi0gKiB0aGUgdXNlciBpcyBsaW5raW5nIHRvIHVzIHdpdGggTVNWQy4gVGhlIG9ubHkgcmVtYWluaW5nIGNhc2UgaXMgd2hlbiB3ZSB3ZXJlCi0gKiBidWlsdCB3aXRoIE1pbkdXIGFuZCBhcmUgbGlua2luZyB3aXRoIE1pbkdXIGluIHdoaWNoIGNhc2Ugd2UgcmVseSBvbiB0aGUKLSAqIGxpbmtlciB0byBhdXRvLWV4cG9ydC9pbXBvcnQgc3ltYm9scy4gT2YgY291cnNlIGFsbCB0aGlzIGlzIG9ubHkgdXNlZCB3aGVuCi0gKiBub3QgbGlua2luZyBzdGF0aWNhbGx5LgotICoKLSAqIE5PVEU6IFRvIGxpbmsgdG8gR1N0cmVhbWVyIHN0YXRpY2FsbHkgb24gV2luZG93cywgeW91IG11c3QgZGVmaW5lCi0gKiBHU1RfU1RBVElDX0NPTVBJTEFUSU9OIG9yIHRoZSBwcm90b3R5cGVzIHdpbGwgY2F1c2UgdGhlIGNvbXBpbGVyIHRvIHNlYXJjaAotICogZm9yIHRoZSBzeW1ib2wgaW5zaWRlIGEgRExMLgotICovCi0jaWYgKEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQCB8fCBkZWZpbmVkKF9NU0NfVkVSKSkgJiYgIWRlZmluZWQoR1NUX1NUQVRJQ19DT01QSUxBVElPTikKLSMgZGVmaW5lIEdTVF9QTFVHSU5fRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyBpZmRlZiBHU1RfRVhQT1JUUwotIyAgZGVmaW5lIEdTVF9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jIGVsc2UKLSMgIGRlZmluZSBHU1RfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBleHRlcm4KLSMgZW5kaWYKLSNlbHNlCi0jIGRlZmluZSBHU1RfUExVR0lOX0VYUE9SVAotIyBpZiAoZGVmaW5lZChfX1NVTlBST19DKSAmJiAoX19TVU5QUk9fQyA+PSAweDU5MCkpCi0jICBkZWZpbmUgR1NUX0VYUE9SVCBleHRlcm4gX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotIyBlbHNlCi0jICBkZWZpbmUgR1NUX0VYUE9SVCBleHRlcm4KLSMgZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgLyogX19HU1RfQ09ORklHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNvbnRleHQuYyBiL2dzdC9nc3Rjb250ZXh0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MGJkOWMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGNvbnRleHQuYworKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogICBBdXRob3I6IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBnc3Rjb250ZXh0Lmg6IEhlYWRlciBmb3IgR3N0Q29udGV4dCBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0Y29udGV4dAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBMaWdodHdlaWdodCBvYmplY3RzIHRvIHJlcHJlc2VudCBlbGVtZW50IGNvbnRleHRzCi0gKiBAc2VlX2Fsc286ICNHc3RNaW5pT2JqZWN0LCAjR3N0RWxlbWVudAotICoKLSAqICNHc3RDb250ZXh0IGlzIGEgY29udGFpbmVyIG9iamVjdCB1c2VkIHRvIHN0b3JlIGNvbnRleHRzIGxpa2UgYSBkZXZpY2UKLSAqIGNvbnRleHQsIGEgZGlzcGxheSBzZXJ2ZXIgY29ubmVjdGlvbiBhbmQgc2ltaWxhciBjb25jZXB0cyB0aGF0IHNob3VsZAotICogYmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgZWxlbWVudHMuCi0gKgotICogQXBwbGljYXRpb25zIGNhbiBzZXQgYSBjb250ZXh0IG9uIGEgY29tcGxldGUgcGlwZWxpbmUgYnkgdXNpbmcKLSAqIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KCksIHdoaWNoIHdpbGwgdGhlbiBiZSBwcm9wYWdhdGVkIHRvIGFsbAotICogY2hpbGQgZWxlbWVudHMuIEVsZW1lbnRzIGNhbiBoYW5kbGUgdGhlc2UgaW4gI0dzdEVsZW1lbnRDbGFzcy5zZXRfY29udGV4dCgpCi0gKiBhbmQgbWVyZ2UgdGhlbSB3aXRoIHRoZSBjb250ZXh0IGluZm9ybWF0aW9uIHRoZXkgYWxyZWFkeSBoYXZlLgotICoKLSAqIFdoZW4gYW4gZWxlbWVudCBuZWVkcyBhIGNvbnRleHQgaXQgd2lsbCBkbyB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaW4gdGhpcwotICogb3JkZXIgdW50aWwgb25lIHN0ZXAgc3VjY2VlZHM6Ci0gKiAxLiBDaGVjayBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGhhcyBhIGNvbnRleHQKLSAqIDIuIFF1ZXJ5IGRvd25zdHJlYW0gd2l0aCBHU1RfUVVFUllfQ09OVEVYVCBmb3IgdGhlIGNvbnRleHQKLSAqIDMuIFF1ZXJ5IHVwc3RyZWFtIHdpdGggR1NUX1FVRVJZX0NPTlRFWFQgZm9yIHRoZSBjb250ZXh0Ci0gKiA0LiBQb3N0IGEgR1NUX01FU1NBR0VfTkVFRF9DT05URVhUIG1lc3NhZ2Ugb24gdGhlIGJ1cyB3aXRoIHRoZSByZXF1aXJlZAotICogICAgY29udGV4dCB0eXBlcyBhbmQgYWZ0ZXJ3YXJkcyBjaGVjayBpZiBhIHVzYWJsZSBjb250ZXh0IHdhcyBzZXQgbm93Ci0gKiA1LiBDcmVhdGUgYSBjb250ZXh0IGJ5IGl0c2VsZiBhbmQgcG9zdCBhIEdTVF9NRVNTQUdFX0hBVkVfQ09OVEVYVCBtZXNzYWdlCi0gKiAgICBvbiB0aGUgYnVzLgotICoKLSAqIEJpbnMgd2lsbCBjYXRjaCBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQgbWVzc2FnZXMgYW5kIHdpbGwgc2V0IGFueSBwcmV2aW91c2x5Ci0gKiBrbm93biBjb250ZXh0IG9uIHRoZSBlbGVtZW50IHRoYXQgYXNrcyBmb3IgaXQgaWYgcG9zc2libGUuIE90aGVyd2lzZSB0aGUKLSAqIGFwcGxpY2F0aW9uIHNob3VsZCBwcm92aWRlIG9uZSBpZiBpdCBjYW4uCi0gKgotICogI0dzdENvbnRleHQ8IS0tIC0tPnMgY2FuIGJlIHBlcnNpc3RlbnQuCi0gKiBBIHBlcnNpc3RlbnQgI0dzdENvbnRleHQgaXMga2VwdCBpbiBlbGVtZW50cyB3aGVuIHRoZXkgcmVhY2gKLSAqICVHU1RfU1RBVEVfTlVMTCwgbm9uLXBlcnNpc3RlbnQgb25lcyB3aWxsIGJlIHJlbW92ZWQuCi0gKiBBbHNvLCBhIG5vbi1wZXJzaXN0ZW50IGNvbnRleHQgd29uJ3Qgb3ZlcnJpZGUgYSBwcmV2aW91cyBwZXJzaXN0ZW50Ci0gKiBjb250ZXh0IHNldCB0byBhbiBlbGVtZW50LgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3Rjb250ZXh0LmgiCi0jaW5jbHVkZSAiZ3N0cXVhcmsuaCIKLQotc3RydWN0IF9Hc3RDb250ZXh0Ci17Ci0gIEdzdE1pbmlPYmplY3QgbWluaV9vYmplY3Q7Ci0KLSAgZ2NoYXIgKmNvbnRleHRfdHlwZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdib29sZWFuIHBlcnNpc3RlbnQ7Ci19OwotCi0jZGVmaW5lIEdTVF9DT05URVhUX1NUUlVDVFVSRShjKSAgKCgoR3N0Q29udGV4dCAqKShjKSktPnN0cnVjdHVyZSkKLQotR1R5cGUgX2dzdF9jb250ZXh0X3R5cGUgPSAwOwotR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RDb250ZXh0LCBnc3RfY29udGV4dCk7Ci0KLXZvaWQKLV9wcml2X2dzdF9jb250ZXh0X2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9HU1RfSU5JVCwgImluaXQgY29udGV4dHMiKTsKLQotICAvKiB0aGUgR3N0TWluaU9iamVjdCB0eXBlcyBuZWVkIHRvIGJlIGNsYXNzX3JlZidkIG9uY2UgYmVmb3JlIGl0IGNhbiBiZQotICAgKiBkb25lIGZyb20gbXVsdGlwbGUgdGhyZWFkczsKLSAgICogc2VlIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDU1MSAqLwotICBnc3RfY29udGV4dF9nZXRfdHlwZSAoKTsKLQotICBfZ3N0X2NvbnRleHRfdHlwZSA9IGdzdF9jb250ZXh0X2dldF90eXBlICgpOwotfQotCi1zdGF0aWMgdm9pZAotX2dzdF9jb250ZXh0X2ZyZWUgKEdzdENvbnRleHQgKiBjb250ZXh0KQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChjb250ZXh0ICE9IE5VTEwpOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0NPTlRFWFQsICJmaW5hbGl6ZSBjb250ZXh0ICVwOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIGNvbnRleHQsIEdTVF9DT05URVhUX1NUUlVDVFVSRSAoY29udGV4dCkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9DT05URVhUX1NUUlVDVFVSRSAoY29udGV4dCk7Ci0gIGlmIChzdHJ1Y3R1cmUpIHsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwgTlVMTCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOwotICB9Ci0gIGdfZnJlZSAoY29udGV4dC0+Y29udGV4dF90eXBlKTsKLQotICBnX3NsaWNlX2ZyZWUxIChzaXplb2YgKEdzdENvbnRleHQpLCBjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgZ3N0X2NvbnRleHRfaW5pdCAoR3N0Q29udGV4dCAqIGNvbnRleHQpOwotCi1zdGF0aWMgR3N0Q29udGV4dCAqCi1fZ3N0X2NvbnRleHRfY29weSAoR3N0Q29udGV4dCAqIGNvbnRleHQpCi17Ci0gIEdzdENvbnRleHQgKmNvcHk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0NPTlRFWFQsICJjb3B5IGNvbnRleHQgJXA6ICUiIEdTVF9QVFJfRk9STUFULCBjb250ZXh0LAotICAgICAgR1NUX0NPTlRFWFRfU1RSVUNUVVJFIChjb250ZXh0KSk7Ci0KLSAgY29weSA9IGdfc2xpY2VfbmV3MCAoR3N0Q29udGV4dCk7Ci0KLSAgZ3N0X2NvbnRleHRfaW5pdCAoY29weSk7Ci0KLSAgY29weS0+Y29udGV4dF90eXBlID0gZ19zdHJkdXAgKGNvbnRleHQtPmNvbnRleHRfdHlwZSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX0NPTlRFWFRfU1RSVUNUVVJFIChjb250ZXh0KTsKLSAgR1NUX0NPTlRFWFRfU1RSVUNUVVJFIChjb3B5KSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoc3RydWN0dXJlKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChHU1RfQ09OVEVYVF9TVFJVQ1RVUkUgKGNvcHkpLAotICAgICAgJmNvcHktPm1pbmlfb2JqZWN0LnJlZmNvdW50KTsKLQotICBjb3B5LT5wZXJzaXN0ZW50ID0gY29udGV4dC0+cGVyc2lzdGVudDsKLQotICByZXR1cm4gR1NUX0NPTlRFWFRfQ0FTVCAoY29weSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY29udGV4dF9pbml0IChHc3RDb250ZXh0ICogY29udGV4dCkKLXsKLSAgZ3N0X21pbmlfb2JqZWN0X2luaXQgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChjb250ZXh0KSwgMCwgX2dzdF9jb250ZXh0X3R5cGUsCi0gICAgICAoR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbikgX2dzdF9jb250ZXh0X2NvcHksIE5VTEwsCi0gICAgICAoR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbikgX2dzdF9jb250ZXh0X2ZyZWUpOwotfQotCi0vKioKLSAqIGdzdF9jb250ZXh0X25ldzoKLSAqIEBjb250ZXh0X3R5cGU6IENvbnRleHQgdHlwZQotICogQHBlcnNpc3RlbnQ6IFBlcnNpc3RlbnQgY29udGV4dAotICoKLSAqIENyZWF0ZSBhIG5ldyBjb250ZXh0LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBjb250ZXh0LgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotR3N0Q29udGV4dCAqCi1nc3RfY29udGV4dF9uZXcgKGNvbnN0IGdjaGFyICogY29udGV4dF90eXBlLCBnYm9vbGVhbiBwZXJzaXN0ZW50KQotewotICBHc3RDb250ZXh0ICpjb250ZXh0OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29udGV4dF90eXBlICE9IE5VTEwsIE5VTEwpOwotCi0gIGNvbnRleHQgPSBnX3NsaWNlX25ldzAgKEdzdENvbnRleHQpOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0NPTlRFWFQsICJjcmVhdGluZyBuZXcgY29udGV4dCAlcCIsIGNvbnRleHQpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5IChHU1RfUVVBUksgKENPTlRFWFQpKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChzdHJ1Y3R1cmUsICZjb250ZXh0LT5taW5pX29iamVjdC5yZWZjb3VudCk7Ci0gIGdzdF9jb250ZXh0X2luaXQgKGNvbnRleHQpOwotCi0gIGNvbnRleHQtPmNvbnRleHRfdHlwZSA9IGdfc3RyZHVwIChjb250ZXh0X3R5cGUpOwotICBHU1RfQ09OVEVYVF9TVFJVQ1RVUkUgKGNvbnRleHQpID0gc3RydWN0dXJlOwotICBjb250ZXh0LT5wZXJzaXN0ZW50ID0gcGVyc2lzdGVudDsKLQotICByZXR1cm4gY29udGV4dDsKLX0KLQotLyoqCi0gKiBnc3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlOgotICogQGNvbnRleHQ6IFRoZSAjR3N0Q29udGV4dC4KLSAqCi0gKiBHZXQgdGhlIHR5cGUgb2YgQGNvbnRleHQuCi0gKgotICogUmV0dXJuczogVGhlIHR5cGUgb2YgdGhlIGNvbnRleHQuCi0gKgotICogU2luY2U6IDEuMgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlIChjb25zdCBHc3RDb250ZXh0ICogY29udGV4dCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05URVhUIChjb250ZXh0KSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGNvbnRleHQtPmNvbnRleHRfdHlwZTsKLX0KLQotLyoqCi0gKiBnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlOgotICogQGNvbnRleHQ6IFRoZSAjR3N0Q29udGV4dC4KLSAqIEBjb250ZXh0X3R5cGU6IENvbnRleHQgdHlwZSB0byBjaGVjay4KLSAqCi0gKiBDaGVja3MgaWYgQGNvbnRleHQgaGFzIEBjb250ZXh0X3R5cGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGNvbnRleHQgaGFzIEBjb250ZXh0X3R5cGUuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2NvbnRleHRfaGFzX2NvbnRleHRfdHlwZSAoY29uc3QgR3N0Q29udGV4dCAqIGNvbnRleHQsCi0gICAgY29uc3QgZ2NoYXIgKiBjb250ZXh0X3R5cGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVEVYVCAoY29udGV4dCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbnRleHRfdHlwZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIHN0cmNtcCAoY29udGV4dC0+Y29udGV4dF90eXBlLCBjb250ZXh0X3R5cGUpID09IDA7Ci19Ci0KLS8qKgotICogZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZToKLSAqIEBjb250ZXh0OiBUaGUgI0dzdENvbnRleHQuCi0gKgotICogQWNjZXNzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRleHQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjb250ZXh0LiBUaGUgc3RydWN0dXJlIGlzCi0gKiBzdGlsbCBvd25lZCBieSB0aGUgY29udGV4dCwgd2hpY2ggbWVhbnMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBtb2RpZnkgaXQsCi0gKiBmcmVlIGl0IGFuZCB0aGF0IHRoZSBwb2ludGVyIGJlY29tZXMgaW52YWxpZCB3aGVuIHlvdSBmcmVlIHRoZSBjb250ZXh0LgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotY29uc3QgR3N0U3RydWN0dXJlICoKLWdzdF9jb250ZXh0X2dldF9zdHJ1Y3R1cmUgKGNvbnN0IEdzdENvbnRleHQgKiBjb250ZXh0KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTlRFWFQgKGNvbnRleHQpLCBOVUxMKTsKLQotICByZXR1cm4gR1NUX0NPTlRFWFRfU1RSVUNUVVJFIChjb250ZXh0KTsKLX0KLQotLyoqCi0gKiBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmU6Ci0gKiBAY29udGV4dDogVGhlICNHc3RDb250ZXh0LgotICoKLSAqIEdldCBhIHdyaXRhYmxlIHZlcnNpb24gb2YgdGhlIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjb250ZXh0LiBUaGUgc3RydWN0dXJlIGlzIHN0aWxsCi0gKiBvd25lZCBieSB0aGUgY29udGV4dCwgd2hpY2ggbWVhbnMgdGhhdCB5b3Ugc2hvdWxkIG5vdCBmcmVlIGl0IGFuZAotICogdGhhdCB0aGUgcG9pbnRlciBiZWNvbWVzIGludmFsaWQgd2hlbiB5b3UgZnJlZSB0aGUgY29udGV4dC4KLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIEBjb250ZXh0IGlzIHdyaXRhYmxlLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotR3N0U3RydWN0dXJlICoKLWdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZSAoR3N0Q29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVEVYVCAoY29udGV4dCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2NvbnRleHRfaXNfd3JpdGFibGUgKGNvbnRleHQpLCBOVUxMKTsKLQotICByZXR1cm4gR1NUX0NPTlRFWFRfU1RSVUNUVVJFIChjb250ZXh0KTsKLX0KLQotLyoqCi0gKiBnc3RfY29udGV4dF9pc19wZXJzaXN0ZW50OgotICogQGNvbnRleHQ6IFRoZSAjR3N0Q29udGV4dC4KLSAqCi0gKiBDaGVjayBpZiBAY29udGV4dCBpcyBwZXJzaXN0ZW50LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb250ZXh0IGlzIHBlcnNpc3RlbnQuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2NvbnRleHRfaXNfcGVyc2lzdGVudCAoY29uc3QgR3N0Q29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVEVYVCAoY29udGV4dCksIEZBTFNFKTsKLQotICByZXR1cm4gY29udGV4dC0+cGVyc2lzdGVudDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3Rjb250ZXh0LmggYi9nc3QvZ3N0Y29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGExMjZjLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3Rjb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KLSAqICAgQXV0aG9yOiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogZ3N0Y29udGV4dC5oOiBIZWFkZXIgZm9yIEdzdENvbnRleHQgc3Vic3lzdGVtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9DT05URVhUX0hfXwotI2RlZmluZSBfX0dTVF9DT05URVhUX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RDb250ZXh0IEdzdENvbnRleHQ7Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0bWluaW9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X2NvbnRleHRfdHlwZTsKLQotI2RlZmluZSBHU1RfVFlQRV9DT05URVhUICAgICAgICAgICAgICAgICAgICAgICAgIChfZ3N0X2NvbnRleHRfdHlwZSkKLSNkZWZpbmUgR1NUX0lTX0NPTlRFWFQob2JqKSAgICAgICAgICAgICAgICAgICAgICAoR1NUX0lTX01JTklfT0JKRUNUX1RZUEUgKG9iaiwgR1NUX1RZUEVfQ09OVEVYVCkpCi0jZGVmaW5lIEdTVF9DT05URVhUX0NBU1Qob2JqKSAgICAgICAgICAgICAgICAgICAgKChHc3RDb250ZXh0Kikob2JqKSkKLSNkZWZpbmUgR1NUX0NPTlRFWFQob2JqKSAgICAgICAgICAgICAgICAgICAgICAgICAoR1NUX0NPTlRFWFRfQ0FTVChvYmopKQotCi0KLQotR1R5cGUgICAgICAgICAgIGdzdF9jb250ZXh0X2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOwotCi0KLS8qIHJlZmNvdW50aW5nICovCi0vKioKLSAqIGdzdF9jb250ZXh0X3JlZjoKLSAqIEBjb250ZXh0OiB0aGUgY29udGV4dCB0byByZWYKLSAqCi0gKiBDb252ZW5pZW5jZSBtYWNybyB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBjb250ZXh0LgotICoKLSAqIFJldHVybnM6IEBjb250ZXh0IChmb3IgY29udmVuaWVuY2Ugd2hlbiBkb2luZyBhc3NpZ25tZW50cykKLSAqLwotc3RhdGljIGlubGluZSBHc3RDb250ZXh0ICoKLWdzdF9jb250ZXh0X3JlZiAoR3N0Q29udGV4dCAqIGNvbnRleHQpCi17Ci0gIHJldHVybiAoR3N0Q29udGV4dCAqKSBnc3RfbWluaV9vYmplY3RfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoY29udGV4dCkpOwotfQotCi0vKioKLSAqIGdzdF9jb250ZXh0X3VucmVmOgotICogQGNvbnRleHQ6IHRoZSBjb250ZXh0IHRvIHVucmVmCi0gKgotICogQ29udmVuaWVuY2UgbWFjcm8gdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgY29udGV4dCwgcG9zc2libHkKLSAqIGZyZWVpbmcgaXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X2NvbnRleHRfdW5yZWYgKEdzdENvbnRleHQgKiBjb250ZXh0KQotewotICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChjb250ZXh0KSk7Ci19Ci0KLS8qIGNvcHkgY29udGV4dCAqLwotLyoqCi0gKiBnc3RfY29udGV4dF9jb3B5OgotICogQGNvbnRleHQ6IHRoZSBjb250ZXh0IHRvIGNvcHkKLSAqCi0gKiBDcmVhdGVzIGEgY29weSBvZiB0aGUgY29udGV4dC4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIGNvbnRleHQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBjb3B5IG9mIEBjb250ZXh0LgotICoKLSAqIE1UIHNhZmUKLSAqLwotc3RhdGljIGlubGluZSBHc3RDb250ZXh0ICoKLWdzdF9jb250ZXh0X2NvcHkgKGNvbnN0IEdzdENvbnRleHQgKiBjb250ZXh0KQotewotICByZXR1cm4gR1NUX0NPTlRFWFRfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X2NvcHkgKEdTVF9NSU5JX09CSkVDVF9DT05TVF9DQVNUIChjb250ZXh0KSkpOwotfQotCi0vKioKLSAqIGdzdF9jb250ZXh0X2lzX3dyaXRhYmxlOgotICogQGNvbnRleHQ6IGEgI0dzdENvbnRleHQKLSAqCi0gKiBUZXN0cyBpZiB5b3UgY2FuIHNhZmVseSB3cml0ZSBpbnRvIGEgY29udGV4dCdzIHN0cnVjdHVyZSBvciB2YWxpZGx5Ci0gKiBtb2RpZnkgdGhlIHNlcW51bSBhbmQgdGltZXN0YW1wIGZpZWxkcy4KLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF9jb250ZXh0X2lzX3dyaXRhYmxlKGNvbnRleHQpICAgICBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChjb250ZXh0KSkKLS8qKgotICogZ3N0X2NvbnRleHRfbWFrZV93cml0YWJsZToKLSAqIEBjb250ZXh0OiAodHJhbnNmZXIgZnVsbCk6IHRoZSBjb250ZXh0IHRvIG1ha2Ugd3JpdGFibGUKLSAqCi0gKiBDaGVja3MgaWYgYSBjb250ZXh0IGlzIHdyaXRhYmxlLiBJZiBub3QsIGEgd3JpdGFibGUgY29weSBpcyBtYWRlIGFuZAotICogcmV0dXJuZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIGNvbnRleHQgKHBvc3NpYmx5IGEgZHVwbGljYXRlKSB0aGF0IGlzIHdyaXRhYmxlLgotICoKLSAqIE1UIHNhZmUKLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF9jb250ZXh0X21ha2Vfd3JpdGFibGUoY29udGV4dCkgIEdTVF9DT05URVhUX0NBU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoY29udGV4dCkpKQotLyoqCi0gKiBnc3RfY29udGV4dF9yZXBsYWNlOgotICogQG9sZF9jb250ZXh0OiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSAjR3N0Q29udGV4dAotICogICAgIHRvIGJlIHJlcGxhY2VkLgotICogQG5ld19jb250ZXh0OiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBwb2ludGVyIHRvIGEgI0dzdENvbnRleHQgdGhhdCB3aWxsCi0gKiAgICAgcmVwbGFjZSB0aGUgY29udGV4dCBwb2ludGVkIHRvIGJ5IEBvbGRfY29udGV4dC4KLSAqCi0gKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0Q29udGV4dCB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0Q29udGV4dC4gVGhlCi0gKiBtb2RpZmljYXRpb24gaXMgZG9uZSBhdG9taWNhbGx5IChzbyB0aGlzIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhyZWFkIHNhZmV0eQotICogaW4gc29tZSBjYXNlcyksIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5ICh0aGUgb2xkCi0gKiBjb250ZXh0IGlzIHVucmVmZmVkLCB0aGUgbmV3IG9uZSBpcyByZWZmZWQpLgotICoKLSAqIEVpdGhlciBAbmV3X2NvbnRleHQgb3IgdGhlICNHc3RDb250ZXh0IHBvaW50ZWQgdG8gYnkgQG9sZF9jb250ZXh0IG1heSBiZSAlTlVMTC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmV3X2NvbnRleHQgd2FzIGRpZmZlcmVudCBmcm9tIEBvbGRfY29udGV4dAotICovCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1nc3RfY29udGV4dF9yZXBsYWNlIChHc3RDb250ZXh0ICoqb2xkX2NvbnRleHQsIEdzdENvbnRleHQgKm5ld19jb250ZXh0KQotewotICByZXR1cm4gZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKChHc3RNaW5pT2JqZWN0ICoqKSBvbGRfY29udGV4dCwgKEdzdE1pbmlPYmplY3QgKikgbmV3X2NvbnRleHQpOwotfQotCi1Hc3RDb250ZXh0ICogICAgICAgICAgZ3N0X2NvbnRleHRfbmV3ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBnY2hhciAqIGNvbnRleHRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHBlcnNpc3RlbnQpIEdfR05VQ19NQUxMT0M7Ci0KLWNvbnN0IGdjaGFyICogICAgICAgICBnc3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlICAgICAgICAgKGNvbnN0IEdzdENvbnRleHQgKiBjb250ZXh0KTsKLWdib29sZWFuICAgICAgICAgICAgICBnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlICAgICAgICAgKGNvbnN0IEdzdENvbnRleHQgKiBjb250ZXh0LCBjb25zdCBnY2hhciAqIGNvbnRleHRfdHlwZSk7Ci1jb25zdCBHc3RTdHJ1Y3R1cmUgKiAgZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZSAgICAgICAgICAgIChjb25zdCBHc3RDb250ZXh0ICogY29udGV4dCk7Ci1Hc3RTdHJ1Y3R1cmUgKiAgICAgICAgZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlICAgICAgIChHc3RDb250ZXh0ICogY29udGV4dCk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3RfY29udGV4dF9pc19wZXJzaXN0ZW50ICAgICAgICAgICAgKGNvbnN0IEdzdENvbnRleHQgKiBjb250ZXh0KTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RDb250ZXh0LCBnc3RfY29udGV4dF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQ09OVEVYVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3Rjb250cm9sYmluZGluZy5jIGIvZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NThhZDEuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0Y29udHJvbGJpbmRpbmcuYzogQXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2VzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3Rjb250cm9sYmluZGluZwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBhdHRhY2htZW50IGZvciBjb250cm9sIHNvdXJjZSBzb3VyY2VzCi0gKgotICogQSBiYXNlIGNsYXNzIGZvciB2YWx1ZSBtYXBwaW5nIG9iamVjdHMgdGhhdCBhdHRhY2hlcyBjb250cm9sIHNvdXJjZXMgdG8gZ29iamVjdAotICogcHJvcGVydGllcy4gU3VjaCBhbiBvYmplY3QgaXMgdGFraW5nIG9uZSBvciBtb3JlICNHc3RDb250cm9sU291cmNlIGluc3RhbmNlcywKLSAqIGNvbWJpbmVzIHRoZW0gYW5kIG1hcHMgdGhlIHJlc3VsdGluZyB2YWx1ZSB0byB0aGUgdHlwZSBhbmQgdmFsdWUgcmFuZ2Ugb2YgdGhlCi0gKiBib3VuZCBwcm9wZXJ0eS4KLSAqLwotLyogRklYTUUoZW5zb25pYyk6IHNob3VsZCB3ZSBtYWtlIGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZygpIGludGVybmFsCi0gKiAtIHdlIGNyZWF0ZSB0aGUgY29udHJvbF9iaW5kaW5nIGZvciBhIGNlcnRhaW4gb2JqZWN0IGFueXdheQotICogLSB3ZSBjb3VsZCBjYWxsIGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZygpIGF0IHRoZSBlbmQgb2YKLSAqICAgZ3N0X2NvbnRyb2xfYmluZGluZ19jb25zdHJ1Y3RvcigpCi0gKiAtIHRoZSB3ZWFrLXJlZiBvbiBvYmplY3QgaXMgbm90IG5pY2UsIGFzIGlzIHRoZSBzYW1lIGFzIGdzdF9vYmplY3RfcGFyZW50KCkKLSAqICAgb25jZSB0aGUgb2JqZWN0IGlzIGFkZGVkIHRvIHRoZSBwYXJlbnQKLSAqCi0gKiAtIGFub3RoZXIgb3B0aW9uIHdvdWxkIGJlIHRvIGRlZmVyIHdoYXQgaXMgZG9uZSBpbiBfY29uc3RydWN0b3IgdG8gd2hlbgotICogICB0aGUgcGFyZW50IGlzIHNldCAobmVlZCB0byBsaXN0ZW4gdG8gdGhlIHNpZ25hbCB0aGVuKQotICogICB0aGVuIGJhc2ljYWxseSBJIGNvdWxkCi0gKiAgIGEpIHJlbW92ZSB0aGUgb2JqIGFyZyBhbmQgd2FpdCB0aGUgYmluZGluZyB0byBiZSBhZGRlZCBvcgotICogICBiKSBhZGQgdGhlIGJpbmRpbmcgZnJvbSBjb25zdHJ1Y3RvciwgdW5yZWYgb2JqZWN0IHRoZXJlIGFuZCBtYWtlIG9iagotICogICAgICB3cml0ZW9ubHkKLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAiZ3N0Y29udHJvbGJpbmRpbmcuaCIKLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY29udHJvbF9iaW5kaW5nX2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKEdTVF9DQVRfREVGQVVMVCwgImdzdGNvbnRyb2xiaW5kaW5nIiwgMCwgXAotICAgICAgImR5bmFtaWMgcGFyYW1ldGVyIGNvbnRyb2wgc291cmNlIGF0dGFjaG1lbnQiKTsKLQotc3RhdGljIEdPYmplY3QgKmdzdF9jb250cm9sX2JpbmRpbmdfY29uc3RydWN0b3IgKEdUeXBlIHR5cGUsCi0gICAgZ3VpbnQgbl9jb25zdHJ1Y3RfcGFyYW1zLCBHT2JqZWN0Q29uc3RydWN0UGFyYW0gKiBjb25zdHJ1Y3RfcGFyYW1zKTsKLXN0YXRpYyB2b2lkIGdzdF9jb250cm9sX2JpbmRpbmdfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfY29udHJvbF9iaW5kaW5nX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X2NvbnRyb2xfYmluZGluZ19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLUdfREVGSU5FX0FCU1RSQUNUX1RZUEVfV0lUSF9DT0RFIChHc3RDb250cm9sQmluZGluZywgZ3N0X2NvbnRyb2xfYmluZGluZywKLSAgICBHU1RfVFlQRV9PQkpFQ1QsIF9kb19pbml0KTsKLQotc3RydWN0IF9Hc3RDb250cm9sQmluZGluZ1ByaXZhdGUKLXsKLSAgR1dlYWtSZWYgb2JqZWN0OwotfTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfT0JKRUNULAotICBQUk9QX05BTUUsCi0gIFBST1BfTEFTVAotfTsKLQotc3RhdGljIEdQYXJhbVNwZWMgKnByb3BlcnRpZXNbUFJPUF9MQVNUXTsKLQotc3RhdGljIHZvaWQKLWdzdF9jb250cm9sX2JpbmRpbmdfY2xhc3NfaW5pdCAoR3N0Q29udHJvbEJpbmRpbmdDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0Q29udHJvbEJpbmRpbmdQcml2YXRlKSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+Y29uc3RydWN0b3IgPSBnc3RfY29udHJvbF9iaW5kaW5nX2NvbnN0cnVjdG9yOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfY29udHJvbF9iaW5kaW5nX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfY29udHJvbF9iaW5kaW5nX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2NvbnRyb2xfYmluZGluZ19maW5hbGl6ZTsKLQotICBwcm9wZXJ0aWVzW1BST1BfT0JKRUNUXSA9Ci0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgib2JqZWN0IiwgIk9iamVjdCIsCi0gICAgICAiVGhlIG9iamVjdCBvZiB0aGUgcHJvcGVydHkiLCBHU1RfVFlQRV9PQkpFQ1QsCi0gICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKTsKLQotICBwcm9wZXJ0aWVzW1BST1BfTkFNRV0gPQotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoIm5hbWUiLCAiTmFtZSIsICJUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkiLCBOVUxMLAotICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7Ci0KLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnRpZXMgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFTVCwgcHJvcGVydGllcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY29udHJvbF9iaW5kaW5nX2luaXQgKEdzdENvbnRyb2xCaW5kaW5nICogYmluZGluZykKLXsKLSAgYmluZGluZy0+QUJJLmFiaS5wcml2ID0KLSAgICAgIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoYmluZGluZywgR1NUX1RZUEVfQ09OVFJPTF9CSU5ESU5HLAotICAgICAgR3N0Q29udHJvbEJpbmRpbmdQcml2YXRlKTsKLSAgZ193ZWFrX3JlZl9pbml0ICgmYmluZGluZy0+QUJJLmFiaS5wcml2LT5vYmplY3QsIE5VTEwpOwotfQotCi1zdGF0aWMgR09iamVjdCAqCi1nc3RfY29udHJvbF9iaW5kaW5nX2NvbnN0cnVjdG9yIChHVHlwZSB0eXBlLCBndWludCBuX2NvbnN0cnVjdF9wYXJhbXMsCi0gICAgR09iamVjdENvbnN0cnVjdFBhcmFtICogY29uc3RydWN0X3BhcmFtcykKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmc7Ci0gIEdQYXJhbVNwZWMgKnBzcGVjOwotICBHc3RPYmplY3QgKm9iamVjdDsKLQotICBiaW5kaW5nID0KLSAgICAgIEdTVF9DT05UUk9MX0JJTkRJTkcgKEdfT0JKRUNUX0NMQVNTIChnc3RfY29udHJvbF9iaW5kaW5nX3BhcmVudF9jbGFzcykKLSAgICAgIC0+Y29uc3RydWN0b3IgKHR5cGUsIG5fY29uc3RydWN0X3BhcmFtcywgY29uc3RydWN0X3BhcmFtcykpOwotCi0gIG9iamVjdCA9IGdfd2Vha19yZWZfZ2V0ICgmYmluZGluZy0+QUJJLmFiaS5wcml2LT5vYmplY3QpOwotICBpZiAoIW9iamVjdCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob2JqZWN0LCAibm8gb2JqZWN0IHNldCIpOwotICAgIHJldHVybiAoR09iamVjdCAqKSBiaW5kaW5nOwotICB9Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChvYmplY3QsICJ0cnlpbmcgdG8gcHV0IHByb3BlcnR5ICclcycgdW5kZXIgY29udHJvbCIsCi0gICAgICBiaW5kaW5nLT5uYW1lKTsKLQotICAvKiBjaGVjayBpZiB0aGUgb2JqZWN0IGhhcyBhIHByb3BlcnR5IG9mIHRoYXQgbmFtZSAqLwotICBpZiAoKHBzcGVjID0KLSAgICAgICAgICBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChHX09CSkVDVF9HRVRfQ0xBU1MgKG9iamVjdCksCi0gICAgICAgICAgICAgIGJpbmRpbmctPm5hbWUpKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iamVjdCwgIiAgcHNlYy0+ZmxhZ3MgOiAweCUwOHgiLCBwc3BlYy0+ZmxhZ3MpOwotCi0gICAgLyogY2hlY2sgaWYgdGhpcyBwYXJhbSBpcyB3aXRhYmxlICYmIGNvbnRyb2xhYmxlICYmICFjb25zdHJ1Y3Qtb25seSAqLwotICAgIGlmICgocHNwZWMtPmZsYWdzICYgKEdfUEFSQU1fV1JJVEFCTEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwKLSAgICAgICAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkgPT0KLSAgICAgICAgKEdfUEFSQU1fV1JJVEFCTEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSkgewotICAgICAgYmluZGluZy0+cHNwZWMgPSBwc3BlYzsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmplY3QsCi0gICAgICAgICAgInByb3BlcnR5ICclcycgb24gY2xhc3MgJyVzJyBuZWVkcyB0byAiCi0gICAgICAgICAgImJlIHdyaXRlYWJsZSwgY29udHJvbGFibGUgYW5kIG5vdCBjb25zdHJ1Y3Rfb25seSIsIGJpbmRpbmctPm5hbWUsCi0gICAgICAgICAgR19PQkpFQ1RfVFlQRV9OQU1FIChvYmplY3QpKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmplY3QsICJjbGFzcyAnJXMnIGhhcyBubyBwcm9wZXJ0eSAnJXMnIiwKLSAgICAgICAgR19PQkpFQ1RfVFlQRV9OQU1FIChvYmplY3QpLCBiaW5kaW5nLT5uYW1lKTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdCk7Ci0KLSAgcmV0dXJuIChHT2JqZWN0ICopIGJpbmRpbmc7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY29udHJvbF9iaW5kaW5nX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0NPTlRST0xfQklORElORyAob2JqZWN0KTsKLQotICAvKiB3ZSBkaWQgbm90IHRvb2sgYSByZWZlcmVuY2UgKi8KLSAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlciAoKEdPYmplY3QgKikgc2VsZi0+X19vYmplY3QsCi0gICAgICAoZ3BvaW50ZXIgKikgJiBzZWxmLT5fX29iamVjdCk7Ci0gIHNlbGYtPl9fb2JqZWN0ID0gTlVMTDsKLSAgZ193ZWFrX3JlZl9jbGVhciAoJnNlbGYtPkFCSS5hYmkucHJpdi0+b2JqZWN0KTsKLQotICAoKEdPYmplY3RDbGFzcyAqKSBnc3RfY29udHJvbF9iaW5kaW5nX3BhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY29udHJvbF9iaW5kaW5nX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RDb250cm9sQmluZGluZyAqc2VsZiA9IEdTVF9DT05UUk9MX0JJTkRJTkcgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChzZWxmLT5uYW1lKTsKLQotICAoKEdPYmplY3RDbGFzcyAqKSBnc3RfY29udHJvbF9iaW5kaW5nX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbnRyb2xfYmluZGluZ19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmcgKnNlbGYgPSBHU1RfQ09OVFJPTF9CSU5ESU5HIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9PQkpFQ1Q6Ci0gICAgICAvKiBkbyBub3QgcmVmIHRvIGF2b2lkIGEgcmVmIGN5Y2xlICovCi0gICAgICBzZWxmLT5fX29iamVjdCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmFsdWUpOwotICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlciAoKEdPYmplY3QgKikgc2VsZi0+X19vYmplY3QsCi0gICAgICAgICAgKGdwb2ludGVyICopICYgc2VsZi0+X19vYmplY3QpOwotCi0gICAgICBnX3dlYWtfcmVmX3NldCAoJnNlbGYtPkFCSS5hYmkucHJpdi0+b2JqZWN0LCBzZWxmLT5fX29iamVjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTkFNRToKLSAgICAgIHNlbGYtPm5hbWUgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0NPTlRST0xfQklORElORyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfT0JKRUNUOgotICAgICAgZ192YWx1ZV90YWtlX29iamVjdCAodmFsdWUsIGdfd2Vha19yZWZfZ2V0ICgmc2VsZi0+QUJJLmFiaS5wcml2LT5vYmplY3QpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OQU1FOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2VsZi0+bmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLS8qIGZ1bmN0aW9ucyAqLwotCi0vKioKLSAqIGdzdF9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXM6Ci0gKiBAYmluZGluZzogdGhlIGNvbnRyb2wgYmluZGluZwotICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXMKLSAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZAotICogQGxhc3Rfc3luYzogdGhlIGxhc3QgdGltZSB0aGlzIHdhcyBjYWxsZWQKLSAqCi0gKiBTZXRzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgQG9iamVjdCwgYWNjb3JkaW5nIHRvIHRoZSAjR3N0Q29udHJvbFNvdXJjZXMgdGhhdAotICogaGFuZGxlIHRoZW0gYW5kIGZvciB0aGUgZ2l2ZW4gdGltZXN0YW1wLgotICoKLSAqIElmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIGl0IGlzIG1vc3QgbGlrZWx5IHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIGZhdWx0LgotICogTW9zdCBwcm9iYWJseSB0aGUgY29udHJvbCBzb3VyY2VzIGFyZSBub3Qgc2V0dXAgY29ycmVjdGx5LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb250cm9sbGVyIHZhbHVlIGNvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG9iamVjdAotICogcHJvcGVydHksICVGQUxTRSBvdGhlcndpc2UKLSAqLwotZ2Jvb2xlYW4KLWdzdF9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXMgKEdzdENvbnRyb2xCaW5kaW5nICogYmluZGluZywKLSAgICBHc3RPYmplY3QgKiBvYmplY3QsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBsYXN0X3N5bmMpCi17Ci0gIEdzdENvbnRyb2xCaW5kaW5nQ2xhc3MgKmtsYXNzOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTlRST0xfQklORElORyAoYmluZGluZyksIEZBTFNFKTsKLQotICBpZiAoYmluZGluZy0+ZGlzYWJsZWQpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAga2xhc3MgPSBHU1RfQ09OVFJPTF9CSU5ESU5HX0dFVF9DTEFTUyAoYmluZGluZyk7Ci0KLSAgaWYgKEdfTElLRUxZIChrbGFzcy0+c3luY192YWx1ZXMgIT0gTlVMTCkpIHsKLSAgICByZXQgPSBrbGFzcy0+c3luY192YWx1ZXMgKGJpbmRpbmcsIG9iamVjdCwgdGltZXN0YW1wLCBsYXN0X3N5bmMpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmluZGluZywgIm1pc3Npbmcgc3luY192YWx1ZXMgaW1wbGVtZW50YXRpb24iKTsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlOgotICogQGJpbmRpbmc6IHRoZSBjb250cm9sIGJpbmRpbmcKLSAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lIHRoZSBjb250cm9sLWNoYW5nZSBzaG91bGQgYmUgcmVhZCBmcm9tCi0gKgotICogR2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb250cm9sbGVkIHByb3BlcnR5IGF0IHRoZSByZXF1ZXN0ZWQgdGltZS4KLSAqCi0gKiBSZXR1cm5zOiAobnVsbGFibGUpOiB0aGUgR1ZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhdCB0aGUgZ2l2ZW4gdGltZSwKLSAqIG9yICVOVUxMIGlmIHRoZSBwcm9wZXJ0eSBpc24ndCBjb250cm9sbGVkLgotICovCi1HVmFsdWUgKgotZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWUgKEdzdENvbnRyb2xCaW5kaW5nICogYmluZGluZywKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBHc3RDb250cm9sQmluZGluZ0NsYXNzICprbGFzczsKLSAgR1ZhbHVlICpyZXQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVFJPTF9CSU5ESU5HIChiaW5kaW5nKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSwgTlVMTCk7Ci0KLSAga2xhc3MgPSBHU1RfQ09OVFJPTF9CSU5ESU5HX0dFVF9DTEFTUyAoYmluZGluZyk7Ci0KLSAgaWYgKEdfTElLRUxZIChrbGFzcy0+Z2V0X3ZhbHVlICE9IE5VTEwpKSB7Ci0gICAgcmV0ID0ga2xhc3MtPmdldF92YWx1ZSAoYmluZGluZywgdGltZXN0YW1wKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJpbmRpbmcsICJtaXNzaW5nIGdldF92YWx1ZSBpbXBsZW1lbnRhdGlvbiIpOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXk6IChza2lwKQotICogQGJpbmRpbmc6IHRoZSBjb250cm9sIGJpbmRpbmcKLSAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZAotICogQGludGVydmFsOiB0aGUgdGltZSBzcGFjaW5nIGJldHdlZW4gc3Vic2VxdWVudCB2YWx1ZXMKLSAqIEBuX3ZhbHVlczogdGhlIG51bWJlciBvZiB2YWx1ZXMKLSAqIEB2YWx1ZXM6IChhcnJheSBsZW5ndGg9bl92YWx1ZXMpOiBhcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW4KLSAqCi0gKiBHZXRzIGEgbnVtYmVyIG9mIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGNvbnRyb2xsZWQgcHJvcGVydHkgc3RhcnRpbmcgYXQgdGhlCi0gKiByZXF1ZXN0ZWQgdGltZS4gVGhlIGFycmF5IEB2YWx1ZXMgbmVlZCB0byBob2xkIGVub3VnaCBzcGFjZSBmb3IgQG5fdmFsdWVzIG9mCi0gKiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBvYmplY3RzIHByb3BlcnR5J3MgdHlwZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpZiBvbmUgd2FudHMgdG8gZS5nLiBkcmF3IGEgZ3JhcGggb2YgdGhlIGNvbnRyb2wKLSAqIGN1cnZlIG9yIGFwcGx5IGEgY29udHJvbCBjdXJ2ZSBzYW1wbGUgYnkgc2FtcGxlLgotICoKLSAqIFRoZSB2YWx1ZXMgYXJlIHVuYm94ZWQgYW5kIHJlYWR5IHRvIGJlIHVzZWQuIFRoZSBzaW1pbGFyIGZ1bmN0aW9uIAotICogZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfZ192YWx1ZV9hcnJheSgpIHJldHVybnMgdGhlIGFycmF5IGFzICNHVmFsdWVzIGFuZCBpcwotICogbW9yZSBzdWl0YWJsZSBmb3IgYmluZGluZ3MuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIGFycmF5IGNvdWxkIGJlIGZpbGxlZCwgJUZBTFNFIG90aGVyd2lzZQotICovCi1nYm9vbGVhbgotZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXkgKEdzdENvbnRyb2xCaW5kaW5nICogYmluZGluZywKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLAotICAgIGdwb2ludGVyIHZhbHVlcykKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmdDbGFzcyAqa2xhc3M7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09OVFJPTF9CSU5ESU5HIChiaW5kaW5nKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChpbnRlcnZhbCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlcywgRkFMU0UpOwotCi0gIGtsYXNzID0gR1NUX0NPTlRST0xfQklORElOR19HRVRfQ0xBU1MgKGJpbmRpbmcpOwotCi0gIGlmIChHX0xJS0VMWSAoa2xhc3MtPmdldF92YWx1ZV9hcnJheSAhPSBOVUxMKSkgewotICAgIHJldCA9Ci0gICAgICAgIGtsYXNzLT5nZXRfdmFsdWVfYXJyYXkgKGJpbmRpbmcsIHRpbWVzdGFtcCwgaW50ZXJ2YWwsIG5fdmFsdWVzLCB2YWx1ZXMpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmluZGluZywgIm1pc3NpbmcgZ2V0X3ZhbHVlX2FycmF5IGltcGxlbWVudGF0aW9uIik7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBDT05WRVJUX0FSUkFZKHR5cGUsVFlQRSkgXAoteyBcCi0gIGcjI3R5cGUgKnYgPSBnX25ldyAoZyMjdHlwZSxuX3ZhbHVlcyk7IFwKLSAgcmV0ID0gZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXkgKGJpbmRpbmcsIHRpbWVzdGFtcCwgaW50ZXJ2YWwsIFwKLSAgICAgIG5fdmFsdWVzLCB2KTsgXAotICBpZiAocmV0KSB7IFwKLSAgICBmb3IgKGkgPSAwOyBpIDwgbl92YWx1ZXM7IGkrKykgeyBcCi0gICAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZXNbaV0sIEdfVFlQRV8jI1RZUEUpOyBcCi0gICAgICBnX3ZhbHVlX3NldF8jI3R5cGUgKCZ2YWx1ZXNbaV0sIHZbaV0pOyBcCi0gICAgfSBcCi0gIH0gXAotICBnX2ZyZWUgKHYpOyBcCi19Ci0KLS8qKgotICogZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfZ192YWx1ZV9hcnJheToKLSAqIEBiaW5kaW5nOiB0aGUgY29udHJvbCBiaW5kaW5nCi0gKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQKLSAqIEBpbnRlcnZhbDogdGhlIHRpbWUgc3BhY2luZyBiZXR3ZWVuIHN1YnNlcXVlbnQgdmFsdWVzCi0gKiBAbl92YWx1ZXM6IHRoZSBudW1iZXIgb2YgdmFsdWVzCi0gKiBAdmFsdWVzOiAoYXJyYXkgbGVuZ3RoPW5fdmFsdWVzKTogYXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluCi0gKgotICogR2V0cyBhIG51bWJlciBvZiAjR1ZhbHVlcyBmb3IgdGhlIGdpdmVuIGNvbnRyb2xsZWQgcHJvcGVydHkgc3RhcnRpbmcgYXQgdGhlCi0gKiByZXF1ZXN0ZWQgdGltZS4gVGhlIGFycmF5IEB2YWx1ZXMgbmVlZCB0byBob2xkIGVub3VnaCBzcGFjZSBmb3IgQG5fdmFsdWVzIG9mCi0gKiAjR1ZhbHVlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGlmIG9uZSB3YW50cyB0byBlLmcuIGRyYXcgYSBncmFwaCBvZiB0aGUgY29udHJvbAotICogY3VydmUgb3IgYXBwbHkgYSBjb250cm9sIGN1cnZlIHNhbXBsZSBieSBzYW1wbGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIGFycmF5IGNvdWxkIGJlIGZpbGxlZCwgJUZBTFNFIG90aGVyd2lzZQotICovCi1nYm9vbGVhbgotZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfZ192YWx1ZV9hcnJheSAoR3N0Q29udHJvbEJpbmRpbmcgKiBiaW5kaW5nLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgR1ZhbHVlICogdmFsdWVzKQotewotICBHc3RDb250cm9sQmluZGluZ0NsYXNzICprbGFzczsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MX0JJTkRJTkcgKGJpbmRpbmcpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGludGVydmFsKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWVzLCBGQUxTRSk7Ci0KLSAga2xhc3MgPSBHU1RfQ09OVFJPTF9CSU5ESU5HX0dFVF9DTEFTUyAoYmluZGluZyk7Ci0KLSAgaWYgKEdfTElLRUxZIChrbGFzcy0+Z2V0X2dfdmFsdWVfYXJyYXkgIT0gTlVMTCkpIHsKLSAgICByZXQgPQotICAgICAgICBrbGFzcy0+Z2V0X2dfdmFsdWVfYXJyYXkgKGJpbmRpbmcsIHRpbWVzdGFtcCwgaW50ZXJ2YWwsIG5fdmFsdWVzLAotICAgICAgICB2YWx1ZXMpOwotICB9IGVsc2UgewotICAgIGd1aW50IGk7Ci0gICAgR1R5cGUgdHlwZSwgYmFzZTsKLQotICAgIGJhc2UgPSB0eXBlID0gR19QQVJBTV9TUEVDX1ZBTFVFX1RZUEUgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKGJpbmRpbmcpKTsKLSAgICB3aGlsZSAoKHR5cGUgPSBnX3R5cGVfcGFyZW50ICh0eXBlKSkpCi0gICAgICBiYXNlID0gdHlwZTsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAoYmluZGluZywgIm1pc3NpbmcgZ2V0X2dfdmFsdWVfYXJyYXkgaW1wbGVtZW50YXRpb24sIHdlJ3JlICIKLSAgICAgICAgImVtdWxhdGluZyBpdCIpOwotICAgIHN3aXRjaCAoYmFzZSkgewotICAgICAgY2FzZSBHX1RZUEVfSU5UOgotICAgICAgICBDT05WRVJUX0FSUkFZIChpbnQsIElOVCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfVUlOVDoKLSAgICAgICAgQ09OVkVSVF9BUlJBWSAodWludCwgVUlOVCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfTE9ORzoKLSAgICAgICAgQ09OVkVSVF9BUlJBWSAobG9uZywgTE9ORyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfVUxPTkc6Ci0gICAgICAgIENPTlZFUlRfQVJSQVkgKHVsb25nLCBVTE9ORyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfSU5UNjQ6Ci0gICAgICAgIENPTlZFUlRfQVJSQVkgKGludDY0LCBJTlQ2NCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfVUlOVDY0OgotICAgICAgICBDT05WRVJUX0FSUkFZICh1aW50NjQsIFVJTlQ2NCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfRkxPQVQ6Ci0gICAgICAgIENPTlZFUlRfQVJSQVkgKGZsb2F0LCBGTE9BVCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfRE9VQkxFOgotICAgICAgICBDT05WRVJUX0FSUkFZIChkb3VibGUsIERPVUJMRSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfQk9PTEVBTjoKLSAgICAgICAgQ09OVkVSVF9BUlJBWSAoYm9vbGVhbiwgQk9PTEVBTik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfRU5VTToKLSAgICAgIHsKLSAgICAgICAgZ2ludCAqdiA9IGdfbmV3IChnaW50LCBuX3ZhbHVlcyk7Ci0gICAgICAgIHJldCA9IGdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlX2FycmF5IChiaW5kaW5nLCB0aW1lc3RhbXAsIGludGVydmFsLAotICAgICAgICAgICAgbl92YWx1ZXMsIHYpOwotICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5fdmFsdWVzOyBpKyspIHsKLSAgICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJnZhbHVlc1tpXSwgdHlwZSk7Ci0gICAgICAgICAgICBnX3ZhbHVlX3NldF9lbnVtICgmdmFsdWVzW2ldLCB2W2ldKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZ19mcmVlICh2KTsKLSAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklORyAoImluY29tcGxldGUgaW1wbGVtZW50YXRpb24gZm9yIHBhcmFtc3BlYyB0eXBlICclcyciLAotICAgICAgICAgICAgR19QQVJBTV9TUEVDX1RZUEVfTkFNRSAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoYmluZGluZykpKTsKLSAgICAgICAgR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoYmluZGluZykgPSBOVUxMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfY29udHJvbF9iaW5kaW5nX3NldF9kaXNhYmxlZDoKLSAqIEBiaW5kaW5nOiB0aGUgY29udHJvbCBiaW5kaW5nCi0gKiBAZGlzYWJsZWQ6IGJvb2xlYW4gdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBjb250cm9sbGVyCi0gKiBvciBub3QuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgYSBjb250cm9sIGJpbmRpbmcgZm9yIHNvbWUgdGltZSwgaS5lLgotICogZ3N0X29iamVjdF9zeW5jX3ZhbHVlcygpIHdpbGwgZG8gbm90aGluZy4KLSAqLwotdm9pZAotZ3N0X2NvbnRyb2xfYmluZGluZ19zZXRfZGlzYWJsZWQgKEdzdENvbnRyb2xCaW5kaW5nICogYmluZGluZywKLSAgICBnYm9vbGVhbiBkaXNhYmxlZCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTlRST0xfQklORElORyAoYmluZGluZykpOwotICBiaW5kaW5nLT5kaXNhYmxlZCA9IGRpc2FibGVkOwotfQotCi0vKioKLSAqIGdzdF9jb250cm9sX2JpbmRpbmdfaXNfZGlzYWJsZWQ6Ci0gKiBAYmluZGluZzogdGhlIGNvbnRyb2wgYmluZGluZwotICoKLSAqIENoZWNrIGlmIHRoZSBjb250cm9sIGJpbmRpbmcgaXMgZGlzYWJsZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGJpbmRpbmcgaXMgaW5hY3RpdmUKLSAqLwotZ2Jvb2xlYW4KLWdzdF9jb250cm9sX2JpbmRpbmdfaXNfZGlzYWJsZWQgKEdzdENvbnRyb2xCaW5kaW5nICogYmluZGluZykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MX0JJTkRJTkcgKGJpbmRpbmcpLCBUUlVFKTsKLSAgcmV0dXJuICEgIWJpbmRpbmctPmRpc2FibGVkOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGNvbnRyb2xiaW5kaW5nLmggYi9nc3QvZ3N0Y29udHJvbGJpbmRpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3M2Q0MS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0Y29udHJvbGJpbmRpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3Rjb250cm9sYmluZGluZy5oOiBBdHRhY2htZW50IGZvciBjb250cm9sIHNvdXJjZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0NPTlRST0xfQklORElOR19IX18KLSNkZWZpbmUgX19HU1RfQ09OVFJPTF9CSU5ESU5HX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3Rjb250cm9sc291cmNlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9DT05UUk9MX0JJTkRJTkcgXAotICAoZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQ09OVFJPTF9CSU5ESU5HKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQ09OVFJPTF9CSU5ESU5HLEdzdENvbnRyb2xCaW5kaW5nKSkKLSNkZWZpbmUgR1NUX0NPTlRST0xfQklORElOR19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9DT05UUk9MX0JJTkRJTkcsR3N0Q29udHJvbEJpbmRpbmdDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19DT05UUk9MX0JJTkRJTkcob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9DT05UUk9MX0JJTkRJTkcpKQotI2RlZmluZSBHU1RfSVNfQ09OVFJPTF9CSU5ESU5HX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0NPTlRST0xfQklORElORykpCi0jZGVmaW5lIEdTVF9DT05UUk9MX0JJTkRJTkdfR0VUX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0NPTlRPTF9TT1VSQ0UsIEdzdENvbnRyb2xCaW5kaW5nQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0Q29udHJvbEJpbmRpbmcgR3N0Q29udHJvbEJpbmRpbmc7Ci10eXBlZGVmIHN0cnVjdCBfR3N0Q29udHJvbEJpbmRpbmdDbGFzcyBHc3RDb250cm9sQmluZGluZ0NsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdENvbnRyb2xCaW5kaW5nUHJpdmF0ZSBHc3RDb250cm9sQmluZGluZ1ByaXZhdGU7Ci0KLS8qIEZJWE1FKDIuMCk6IHJlbW92ZSwgdGhpcyBpcyB1bnVzZWQgKi8KLXR5cGVkZWYgdm9pZCAoKiBHc3RDb250cm9sQmluZGluZ0NvbnZlcnQpIChHc3RDb250cm9sQmluZGluZyAqYmluZGluZywgZ2RvdWJsZSBzcmNfdmFsdWUsIEdWYWx1ZSAqZGVzdF92YWx1ZSk7Ci0KLS8qKgotICogR3N0Q29udHJvbEJpbmRpbmc6Ci0gKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgb2YgdGhpcyBiaW5kaW5nCi0gKiBAcHNwZWM6ICNHUGFyYW1TcGVjIGZvciB0aGlzIHByb3BlcnR5Ci0gKgotICogVGhlIGluc3RhbmNlIHN0cnVjdHVyZSBvZiAjR3N0Q29udHJvbEJpbmRpbmcuCi0gKi8KLXN0cnVjdCBfR3N0Q29udHJvbEJpbmRpbmcgewotICBHc3RPYmplY3QgcGFyZW50OwotCi0gIC8qPCBwdWJsaWMgPiovCi0gIGdjaGFyICpuYW1lOwotICBHUGFyYW1TcGVjICpwc3BlYzsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSNpZm5kZWYgR1NUX0RJU0FCTEVfREVQUkVDQVRFRAotICBHc3RPYmplY3QgKm9iamVjdDsgICAgICAgICAgICAvKiBHc3RPYmplY3Qgb3duaW5nIHRoZSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoPT0gcGFyZW50IHdoZW4gYm91bmQpICovCi0jZWxzZQotICBncG9pbnRlciBfX29iamVjdDsKLSNlbmRpZgotICBnYm9vbGVhbiBkaXNhYmxlZDsKLQotICB1bmlvbiB7Ci0gICAgc3RydWN0IHsKLSAgICAgIEdzdENvbnRyb2xCaW5kaW5nUHJpdmF0ZSAqcHJpdjsKLSAgICB9IGFiaTsKLSAgICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLSAgfSBBQkk7Ci19OwotCi0vKioKLSAqIEdzdENvbnRyb2xCaW5kaW5nQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBQYXJlbnQgY2xhc3MKLSAqIEBzeW5jX3ZhbHVlczogaW1wbGVtZW50YXRpb24gZm9yIHVwZGF0aW5nIHRoZSB0YXJnZXQgdmFsdWVzCi0gKiBAZ2V0X3ZhbHVlOiBpbXBsZW1lbnRhdGlvbiB0byBmZXRjaCBhIHNpbmdsZSBjb250cm9sLXZhbHVlCi0gKiBAZ2V0X3ZhbHVlX2FycmF5OiBpbXBsZW1lbnRhdGlvbiB0byBmZXRjaCBhIHNlcmllcyBvZiBjb250cm9sLXZhbHVlcwotICogQGdldF9nX3ZhbHVlX2FycmF5OiBpbXBsZW1lbnRhdGlvbiB0byBmZXRjaCBhIHNlcmllcyBvZiBjb250cm9sLXZhbHVlcwotICogICAgICAgICAgICAgICAgICAgICBhcyBnX3ZhbHVlcwotICoKLSAqIFRoZSBjbGFzcyBzdHJ1Y3R1cmUgb2YgI0dzdENvbnRyb2xCaW5kaW5nLgotICovCi0KLXN0cnVjdCBfR3N0Q29udHJvbEJpbmRpbmdDbGFzcwotewotICBHc3RPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8KLSAgZ2Jvb2xlYW4gKCogc3luY192YWx1ZXMpIChHc3RDb250cm9sQmluZGluZyAqYmluZGluZywgR3N0T2JqZWN0ICpvYmplY3QsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBsYXN0X3N5bmMpOwotICBHVmFsdWUgKiAoKiBnZXRfdmFsdWUpIChHc3RDb250cm9sQmluZGluZyAqYmluZGluZywgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCk7Ci0gIGdib29sZWFuICgqIGdldF92YWx1ZV9hcnJheSkgKEdzdENvbnRyb2xCaW5kaW5nICpiaW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsIGdwb2ludGVyIHZhbHVlcyk7Ci0gIGdib29sZWFuICgqIGdldF9nX3ZhbHVlX2FycmF5KSAoR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmcsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywgR1ZhbHVlICp2YWx1ZXMpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLSNkZWZpbmUgR1NUX0NPTlRST0xfQklORElOR19QU1BFQyhjYikgKCgoR3N0Q29udHJvbEJpbmRpbmcgKikgY2IpLT5wc3BlYykKLQotR1R5cGUgZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdHlwZSAodm9pZCk7Ci0KLS8qIEZ1bmN0aW9ucyAqLwotCi1nYm9vbGVhbiAgICAgICAgICAgIGdzdF9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXMgICAgICAgIChHc3RDb250cm9sQmluZGluZyAqIGJpbmRpbmcsIEdzdE9iamVjdCAqb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGxhc3Rfc3luYyk7Ci1HVmFsdWUgKiAgICAgICAgICAgIGdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlICAgICAgICAgIChHc3RDb250cm9sQmluZGluZyAqYmluZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApOwotZ2Jvb2xlYW4gICAgICAgICAgICBnc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZV9hcnJheSAgICAoR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmcsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLCBncG9pbnRlciB2YWx1ZXMpOwotZ2Jvb2xlYW4gICAgICAgICAgICBnc3RfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5ICAoR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmcsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLCBHVmFsdWUgKnZhbHVlcyk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgZ3N0X2NvbnRyb2xfYmluZGluZ19zZXRfZGlzYWJsZWQgICAgICAgKEdzdENvbnRyb2xCaW5kaW5nICogYmluZGluZywgZ2Jvb2xlYW4gZGlzYWJsZWQpOwotZ2Jvb2xlYW4gICAgICAgICAgICBnc3RfY29udHJvbF9iaW5kaW5nX2lzX2Rpc2FibGVkICAgICAgICAoR3N0Q29udHJvbEJpbmRpbmcgKiBiaW5kaW5nKTsKLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0Q29udHJvbEJpbmRpbmcsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NPTlRST0xfQklORElOR19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3Rjb250cm9sc291cmNlLmMgYi9nc3QvZ3N0Y29udHJvbHNvdXJjZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWIzNWM3Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3Rjb250cm9sc291cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBnc3Rjb250cm9sc291cmNlLmM6IEludGVyZmFjZSBkZWNsYXJhdGlvbiBmb3IgY29udHJvbCBzb3VyY2VzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGNvbnRyb2xzb3VyY2UKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogYmFzZSBjbGFzcyBmb3IgY29udHJvbCBzb3VyY2Ugc291cmNlcwotICoKLSAqIFRoZSAjR3N0Q29udHJvbFNvdXJjZSBpcyBhIGJhc2UgY2xhc3MgZm9yIGNvbnRyb2wgdmFsdWUgc291cmNlcyB0aGF0IGNvdWxkCi0gKiBiZSB1c2VkIHRvIGdldCB0aW1lc3RhbXAtdmFsdWUgcGFpcnMuIEEgY29udHJvbCBzb3VyY2UgZXNzZW50aWFsbHkgaXMgYQotICogZnVuY3Rpb24gb3ZlciB0aW1lLgotICoKLSAqIEEgI0dzdENvbnRyb2xTb3VyY2UgaXMgdXNlZCBieSBmaXJzdCBnZXR0aW5nIGFuIGluc3RhbmNlIG9mIGEgc3BlY2lmaWMKLSAqIGNvbnRyb2wtc291cmNlLCBjcmVhdGluZyBhIGJpbmRpbmcgZm9yIHRoZSBjb250cm9sLXNvdXJjZSB0byB0aGUgdGFyZ2V0IHByb3BlcnR5Ci0gKiBvZiB0aGUgZWxlbWVudCBhbmQgdGhlbiBhZGRpbmcgdGhlIGJpbmRpbmcgdG8gdGhlIGVsZW1lbnQuIFRoZSBiaW5kaW5nIHdpbGwKLSAqIGNvbnZlcnQgdGhlIGRhdGEgdHlwZXMgYW5kIHZhbHVlIHJhbmdlIHRvIGZpdCB0byB0aGUgYm91bmQgcHJvcGVydHkuCi0gKgotICogRm9yIGltcGxlbWVudGluZyBhIG5ldyAjR3N0Q29udHJvbFNvdXJjZSBvbmUgaGFzIHRvIGltcGxlbWVudAotICogI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBhbmQgI0dzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGZ1bmN0aW9ucy4KLSAqIFRoZXNlIGFyZSB0aGVuIHVzZWQgYnkgZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSgpIGFuZAotICogZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSgpIHRvIGdldCB2YWx1ZXMgZm9yIHNwZWNpZmljIHRpbWVzdGFtcHMuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdGNvbnRyb2xzb3VyY2UuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY29udHJvbF9zb3VyY2VfZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoR1NUX0NBVF9ERUZBVUxULCAiZ3N0Y29udHJvbHNvdXJjZSIsIDAsIFwKLSAgICAgICJkeW5hbWljIHBhcmFtZXRlciBjb250cm9sIHNvdXJjZXMiKTsKLQotR19ERUZJTkVfQUJTVFJBQ1RfVFlQRV9XSVRIX0NPREUgKEdzdENvbnRyb2xTb3VyY2UsIGdzdF9jb250cm9sX3NvdXJjZSwKLSAgICBHU1RfVFlQRV9PQkpFQ1QsIF9kb19pbml0KTsKLQotc3RhdGljIEdPYmplY3QgKmdzdF9jb250cm9sX3NvdXJjZV9jb25zdHJ1Y3RvciAoR1R5cGUgdHlwZSwKLSAgICBndWludCBuX2NvbnN0cnVjdF9wYXJhbXMsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSAqIGNvbnN0cnVjdF9wYXJhbXMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbnRyb2xfc291cmNlX2NsYXNzX2luaXQgKEdzdENvbnRyb2xTb3VyY2VDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmNvbnN0cnVjdG9yID0gZ3N0X2NvbnRyb2xfc291cmNlX2NvbnN0cnVjdG9yOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbnRyb2xfc291cmNlX2luaXQgKEdzdENvbnRyb2xTb3VyY2UgKiBzZWxmKQotewotICBzZWxmLT5nZXRfdmFsdWUgPSBOVUxMOwotICBzZWxmLT5nZXRfdmFsdWVfYXJyYXkgPSBOVUxMOwotfQotCi1zdGF0aWMgR09iamVjdCAqCi1nc3RfY29udHJvbF9zb3VyY2VfY29uc3RydWN0b3IgKEdUeXBlIHR5cGUsIGd1aW50IG5fY29uc3RydWN0X3BhcmFtcywKLSAgICBHT2JqZWN0Q29uc3RydWN0UGFyYW0gKiBjb25zdHJ1Y3RfcGFyYW1zKQotewotICBHT2JqZWN0ICpzZWxmOwotCi0gIHNlbGYgPQotICAgICAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9jb250cm9sX3NvdXJjZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RvciAodHlwZSwKLSAgICAgIG5fY29uc3RydWN0X3BhcmFtcywgY29uc3RydWN0X3BhcmFtcyk7Ci0gIGdzdF9vYmplY3RfcmVmX3NpbmsgKHNlbGYpOwotCi0gIHJldHVybiBzZWxmOwotfQotCi0vKioKLSAqIGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWU6IChtZXRob2QpCi0gKiBAc2VsZjogdGhlICNHc3RDb250cm9sU291cmNlIG9iamVjdAotICogQHRpbWVzdGFtcDogdGhlIHRpbWUgZm9yIHdoaWNoIHRoZSB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQKLSAqIEB2YWx1ZTogKG91dCk6IHRoZSB2YWx1ZQotICoKLSAqIEdldHMgdGhlIHZhbHVlIGZvciB0aGlzICNHc3RDb250cm9sU291cmNlIGF0IGEgZ2l2ZW4gdGltZXN0YW1wLgotICoKLSAqIFJldHVybnM6ICVGQUxTRSBpZiB0aGUgdmFsdWUgY291bGRuJ3QgYmUgcmV0dXJuZWQsICVUUlVFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKEdzdENvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAotICAgIGdkb3VibGUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MX1NPVVJDRSAoc2VsZiksIEZBTFNFKTsKLQotICBpZiAoR19MSUtFTFkgKHNlbGYtPmdldF92YWx1ZSkpIHsKLSAgICByZXR1cm4gc2VsZi0+Z2V0X3ZhbHVlIChzZWxmLCB0aW1lc3RhbXAsIHZhbHVlKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfRVJST1IgKCJOb3QgYm91bmQgdG8gYSBzcGVjaWZpYyBwcm9wZXJ0eSB5ZXQhIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheTogKG1ldGhvZCkKLSAqIEBzZWxmOiB0aGUgI0dzdENvbnRyb2xTb3VyY2Ugb2JqZWN0Ci0gKiBAdGltZXN0YW1wOiB0aGUgZmlyc3QgdGltZXN0YW1wCi0gKiBAaW50ZXJ2YWw6IHRoZSB0aW1lIHN0ZXBzCi0gKiBAbl92YWx1ZXM6IHRoZSBudW1iZXIgb2YgdmFsdWVzIHRvIGZldGNoCi0gKiBAdmFsdWVzOiAoYXJyYXkgbGVuZ3RoPW5fdmFsdWVzKTogYXJyYXkgdG8gcHV0IGNvbnRyb2wtdmFsdWVzIGluCi0gKgotICogR2V0cyBhbiBhcnJheSBvZiB2YWx1ZXMgZm9yIGZvciB0aGlzICNHc3RDb250cm9sU291cmNlLiBWYWx1ZXMgdGhhdCBhcmUKLSAqIHVuZGVmaW5lZCBjb250YWluIE5BTnMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIGFycmF5IGNvdWxkIGJlIGZpbGxlZCwgJUZBTFNFIG90aGVyd2lzZQotICovCi1nYm9vbGVhbgotZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoR3N0Q29udHJvbFNvdXJjZSAqIHNlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywKLSAgICBnZG91YmxlICogdmFsdWVzKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTlRST0xfU09VUkNFIChzZWxmKSwgRkFMU0UpOwotCi0gIGlmIChHX0xJS0VMWSAoc2VsZi0+Z2V0X3ZhbHVlX2FycmF5KSkgewotICAgIHJldHVybiBzZWxmLT5nZXRfdmFsdWVfYXJyYXkgKHNlbGYsIHRpbWVzdGFtcCwgaW50ZXJ2YWwsIG5fdmFsdWVzLCB2YWx1ZXMpOwotICB9IGVsc2UgewotICAgIEdTVF9FUlJPUiAoIk5vdCBib3VuZCB0byBhIHNwZWNpZmljIHByb3BlcnR5IHlldCEiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3Rjb250cm9sc291cmNlLmggYi9nc3QvZ3N0Y29udHJvbHNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmQ5ZjVjLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3Rjb250cm9sc291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBnc3Rjb250cm9sc291cmNlLmg6IEludGVyZmFjZSBkZWNsYXJhdGlvbiBmb3IgY29udHJvbCBzb3VyY2VzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9DT05UUk9MX1NPVVJDRV9IX18KLSNkZWZpbmUgX19HU1RfQ09OVFJPTF9TT1VSQ0VfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdGNsb2NrLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9DT05UUk9MX1NPVVJDRSBcCi0gIChnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0NPTlRST0xfU09VUkNFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQ09OVFJPTF9TT1VSQ0UsR3N0Q29udHJvbFNvdXJjZSkpCi0jZGVmaW5lIEdTVF9DT05UUk9MX1NPVVJDRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9DT05UUk9MX1NPVVJDRSxHc3RDb250cm9sU291cmNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQ09OVFJPTF9TT1VSQ0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9DT05UUk9MX1NPVVJDRSkpCi0jZGVmaW5lIEdTVF9JU19DT05UUk9MX1NPVVJDRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9DT05UUk9MX1NPVVJDRSkpCi0jZGVmaW5lIEdTVF9DT05UUk9MX1NPVVJDRV9HRVRfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQ09OVE9MX1NPVVJDRSwgR3N0Q29udHJvbFNvdXJjZUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdENvbnRyb2xTb3VyY2UgR3N0Q29udHJvbFNvdXJjZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDb250cm9sU291cmNlQ2xhc3MgR3N0Q29udHJvbFNvdXJjZUNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRpbWVkVmFsdWUgR3N0VGltZWRWYWx1ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWYWx1ZUFycmF5IEdzdFZhbHVlQXJyYXk7Ci0KLS8qKgotICogR3N0VGltZWRWYWx1ZToKLSAqIEB0aW1lc3RhbXA6IHRpbWVzdGFtcCBvZiB0aGUgdmFsdWUgY2hhbmdlCi0gKiBAdmFsdWU6IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlCi0gKgotICogU3RydWN0dXJlIGZvciBzYXZpbmcgYSB0aW1lc3RhbXAgYW5kIGEgdmFsdWUuCi0gKi8KLXN0cnVjdCBfR3N0VGltZWRWYWx1ZQotewotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBnZG91YmxlICAgICAgdmFsdWU7Ci19OwotCi0vKioKLSAqIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZToKLSAqIEBzZWxmOiB0aGUgI0dzdENvbnRyb2xTb3VyY2UgaW5zdGFuY2UKLSAqIEB0aW1lc3RhbXA6IHRpbWVzdGFtcCBmb3Igd2hpY2ggYSB2YWx1ZSBzaG91bGQgYmUgY2FsY3VsYXRlZAotICogQHZhbHVlOiBhIHZhbHVlIHdoaWNoIHdpbGwgYmUgc2V0IHRvIHRoZSByZXN1bHQuCi0gKgotICogRnVuY3Rpb24gZm9yIHJldHVybmluZyBhIHZhbHVlIGZvciBhIGdpdmVuIHRpbWVzdGFtcC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgd2FzIHN1Y2Nlc3NmdWxseSBjYWxjdWxhdGVkLgotICoKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAoKiBHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIChHc3RDb250cm9sU291cmNlICpzZWxmLCAKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBnZG91YmxlICp2YWx1ZSk7Ci0KLS8qKgotICogR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXk6Ci0gKiBAc2VsZjogdGhlICNHc3RDb250cm9sU291cmNlIGluc3RhbmNlCi0gKiBAdGltZXN0YW1wOiB0aW1lc3RhbXAgZm9yIHdoaWNoIGEgdmFsdWUgc2hvdWxkIGJlIGNhbGN1bGF0ZWQKLSAqIEBpbnRlcnZhbDogdGhlIHRpbWUgc3BhY2luZyBiZXR3ZWVuIHN1YnNlcXVlbnQgdmFsdWVzCi0gKiBAbl92YWx1ZXM6IHRoZSBudW1iZXIgb2YgdmFsdWVzCi0gKiBAdmFsdWVzOiBhcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW4KLSAqCi0gKiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHZhbHVlcyBmb3Igc3RhcnRpbmcgYXQgYSBnaXZlbiB0aW1lc3RhbXAuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlcyB3ZXJlIHN1Y2Nlc3NmdWxseSBjYWxjdWxhdGVkLgotICoKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAoKiBHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgKEdzdENvbnRyb2xTb3VyY2UgKnNlbGYsIAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsIGdkb3VibGUgKnZhbHVlcyk7Ci0KLS8qKgotICogR3N0Q29udHJvbFNvdXJjZToKLSAqIEBnZXRfdmFsdWU6IEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgYSB2YWx1ZSBmb3IgYSBnaXZlbiB0aW1lc3RhbXAKLSAqIEBnZXRfdmFsdWVfYXJyYXk6IEZ1bmN0aW9uIGZvciByZXR1cm5pbmcgYSB2YWx1ZXMgYXJyYXkgZm9yIGEgZ2l2ZW4gdGltZXN0YW1wCi0gKgotICogVGhlIGluc3RhbmNlIHN0cnVjdHVyZSBvZiAjR3N0Q29udHJvbFNvdXJjZS4KLSAqLwotc3RydWN0IF9Hc3RDb250cm9sU291cmNlIHsKLSAgR3N0T2JqZWN0IHBhcmVudDsKLQotICAvKjwgcHVibGljID4qLwotICBHc3RDb250cm9sU291cmNlR2V0VmFsdWUgZ2V0X3ZhbHVlOyAgICAgICAgICAgICAvKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBhdCBhIGdpdmVuIHRpbWVzdGFtcCAqLwotICBHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSBnZXRfdmFsdWVfYXJyYXk7ICAvKiBSZXR1cm5zIHZhbHVlcyBmb3IgYSBwcm9wZXJ0eSBpbiBhIGdpdmVuIHRpbWVzcGFuICovCi0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotLyoqCi0gKiBHc3RDb250cm9sU291cmNlQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBQYXJlbnQgY2xhc3MKLSAqCi0gKiBUaGUgY2xhc3Mgc3RydWN0dXJlIG9mICNHc3RDb250cm9sU291cmNlLgotICovCi0KLXN0cnVjdCBfR3N0Q29udHJvbFNvdXJjZUNsYXNzCi17Ci0gIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi0vKiBGdW5jdGlvbnMgKi8KLWdib29sZWFuICAgICAgIGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgICAgICAgICAgICAgKEdzdENvbnRyb2xTb3VyY2UgKnNlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICp2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgICBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5ICAgICAgIChHc3RDb250cm9sU291cmNlICpzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgKnZhbHVlcyk7Ci0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdENvbnRyb2xTb3VyY2UsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RWYWx1ZUFycmF5LCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9DT05UUk9MX1NPVVJDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RkYXRldGltZS5jIGIvZ3N0L2dzdGRhdGV0aW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2RkNmMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGRhdGV0aW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0ZGF0ZXRpbWUuaCIKLSNpbmNsdWRlICJnc3R2YWx1ZS5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGRhdGV0aW1lCi0gKiBAdGl0bGU6IEdzdERhdGVUaW1lCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEEgZGF0ZSwgdGltZSBhbmQgdGltZXpvbmUgc3RydWN0dXJlCi0gKgotICogU3RydWN0IHRvIHN0b3JlIGRhdGUsIHRpbWUgYW5kIHRpbWV6b25lIGluZm9ybWF0aW9uIGFsdG9nZXRoZXIuCi0gKiAjR3N0RGF0ZVRpbWUgaXMgcmVmY291bnRlZCBhbmQgaW1tdXRhYmxlLgotICoKLSAqIERhdGUgaW5mb3JtYXRpb24gaXMgaGFuZGxlZCB1c2luZyB0aGUgcHJvbGVwdGljIEdyZWdvcmlhbiBjYWxlbmRhci4KLSAqCi0gKiBQcm92aWRlcyBiYXNpYyBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIGFjY2Vzc29yIGZ1bmN0aW9ucyB0byBpdHMgZmllbGRzLgotICovCi0KLXR5cGVkZWYgZW51bQotewotICBHU1RfREFURV9USU1FX0ZJRUxEU19JTlZBTElEID0gMCwKLSAgR1NUX0RBVEVfVElNRV9GSUVMRFNfWSwgICAgICAgLyogaGF2ZSB5ZWFyICAgICAgICAgICAgICAgICovCi0gIEdTVF9EQVRFX1RJTUVfRklFTERTX1lNLCAgICAgIC8qIGhhdmUgeWVhciBhbmQgbW9udGggICAgICAqLwotICBHU1RfREFURV9USU1FX0ZJRUxEU19ZTUQsICAgICAvKiBoYXZlIHllYXIsIG1vbnRoIGFuZCBkYXkgKi8KLSAgR1NUX0RBVEVfVElNRV9GSUVMRFNfWU1EX0hNLAotICBHU1RfREFURV9USU1FX0ZJRUxEU19ZTURfSE1TCi0gICAgICAvKiBOb3RlOiBpZiB3ZSBldmVyIGFkZCBtb3JlIGdyYW51bGFyaXR5IGhlcmUsIGUuZy4gZm9yIG1pY3Jvc2VjcywKLSAgICAgICAqIHRoZSBjb21wYXJlIGZ1bmN0aW9uIHdpbGwgbmVlZCB1cGRhdGluZyAqLwotfSBHc3REYXRlVGltZUZpZWxkczsKLQotc3RydWN0IF9Hc3REYXRlVGltZQotewotICBHc3RNaW5pT2JqZWN0IG1pbmlfb2JqZWN0OwotCi0gIEdEYXRlVGltZSAqZGF0ZXRpbWU7Ci0KLSAgR3N0RGF0ZVRpbWVGaWVsZHMgZmllbGRzOwotfTsKLQotR1R5cGUgX2dzdF9kYXRlX3RpbWVfdHlwZSA9IDA7Ci1HU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEUgKEdzdERhdGVUaW1lLCBnc3RfZGF0ZV90aW1lKTsKLQotc3RhdGljIHZvaWQgZ3N0X2RhdGVfdGltZV9mcmVlIChHc3REYXRlVGltZSAqIGRhdGV0aW1lKTsKLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2dfZGF0ZV90aW1lOgotICogQGR0OiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR0RhdGVUaW1lLiBUaGUgbmV3ICNHc3REYXRlVGltZSB0YWtlcyBvd25lcnNoaXAuCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0RGF0ZVRpbWUgZnJvbSBhICNHRGF0ZVRpbWUgb2JqZWN0LgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSBuZXdseSBjcmVhdGVkICNHc3REYXRlVGltZSwKLSAqIG9yICVOVUxMIG9uIGVycm9yCi0gKi8KLUdzdERhdGVUaW1lICoKLWdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWUgKEdEYXRlVGltZSAqIGR0KQotewotICBHc3REYXRlVGltZSAqZ3N0X2R0OwotCi0gIGlmICghZHQpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZ3N0X2R0ID0gZ19zbGljZV9uZXcgKEdzdERhdGVUaW1lKTsKLQotICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGdzdF9kdCksIDAsIEdTVF9UWVBFX0RBVEVfVElNRSwKLSAgICAgIE5VTEwsIE5VTEwsIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBnc3RfZGF0ZV90aW1lX2ZyZWUpOwotCi0gIGdzdF9kdC0+ZGF0ZXRpbWUgPSBkdDsKLSAgZ3N0X2R0LT5maWVsZHMgPSBHU1RfREFURV9USU1FX0ZJRUxEU19ZTURfSE1TOwotICByZXR1cm4gZ3N0X2R0OwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfdG9fZ19kYXRlX3RpbWU6Ci0gKiBAZGF0ZXRpbWU6IEdzdERhdGVUaW1lLgotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dEYXRlVGltZSBmcm9tIGEgZnVsbHkgZGVmaW5lZCAjR3N0RGF0ZVRpbWUgb2JqZWN0LgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdfZGF0ZV90aW1lX3VucmVmCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgbmV3bHkgY3JlYXRlZCAjR0RhdGVUaW1lLCBvcgotICogJU5VTEwgb24gZXJyb3IKLSAqLwotR0RhdGVUaW1lICoKLWdzdF9kYXRlX3RpbWVfdG9fZ19kYXRlX3RpbWUgKEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCBOVUxMKTsKLQotICBpZiAoZGF0ZXRpbWUtPmZpZWxkcyAhPSBHU1RfREFURV9USU1FX0ZJRUxEU19ZTURfSE1TKQotICAgIHJldHVybiBOVUxMOwotCi0gIHJldHVybiBnX2RhdGVfdGltZV9hZGQgKGRhdGV0aW1lLT5kYXRldGltZSwgMCk7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGVfdGltZV9oYXNfeWVhcjoKLSAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAZGF0ZXRpbWU8IS0tIC0tPidzIHllYXIgZmllbGQgaXMgc2V0ICh3aGljaCBzaG91bGQgYWx3YXlzCi0gKiAgICAgYmUgdGhlIGNhc2UpLCBvdGhlcndpc2UgJUZBTFNFCi0gKi8KLWdib29sZWFuCi1nc3RfZGF0ZV90aW1lX2hhc195ZWFyIChjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGF0ZXRpbWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHJldHVybiAoZGF0ZXRpbWUtPmZpZWxkcyA+PSBHU1RfREFURV9USU1FX0ZJRUxEU19ZKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX2hhc19tb250aDoKLSAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAZGF0ZXRpbWU8IS0tIC0tPidzIG1vbnRoIGZpZWxkIGlzIHNldCwgb3RoZXJ3aXNlICVGQUxTRQotICovCi1nYm9vbGVhbgotZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIChkYXRldGltZS0+ZmllbGRzID49IEdTVF9EQVRFX1RJTUVfRklFTERTX1lNKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX2hhc19kYXk6Ci0gKiBAZGF0ZXRpbWU6IGEgI0dzdERhdGVUaW1lCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGRhdGV0aW1lPCEtLSAtLT4ncyBkYXkgZmllbGQgaXMgc2V0LCBvdGhlcndpc2UgJUZBTFNFCi0gKi8KLWdib29sZWFuCi1nc3RfZGF0ZV90aW1lX2hhc19kYXkgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIChkYXRldGltZS0+ZmllbGRzID49IEdTVF9EQVRFX1RJTUVfRklFTERTX1lNRCk7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGVfdGltZV9oYXNfdGltZToKLSAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAZGF0ZXRpbWU8IS0tIC0tPidzIGhvdXIgYW5kIG1pbnV0ZSBmaWVsZHMgYXJlIHNldCwKLSAqICAgICBvdGhlcndpc2UgJUZBTFNFCi0gKi8KLWdib29sZWFuCi1nc3RfZGF0ZV90aW1lX2hhc190aW1lIChjb25zdCBHc3REYXRlVGltZSAqIGRhdGV0aW1lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGF0ZXRpbWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHJldHVybiAoZGF0ZXRpbWUtPmZpZWxkcyA+PSBHU1RfREFURV9USU1FX0ZJRUxEU19ZTURfSE0pOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZDoKLSAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAZGF0ZXRpbWU8IS0tIC0tPidzIHNlY29uZCBmaWVsZCBpcyBzZXQsIG90aGVyd2lzZSAlRkFMU0UKLSAqLwotZ2Jvb2xlYW4KLWdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICByZXR1cm4gKGRhdGV0aW1lLT5maWVsZHMgPj0gR1NUX0RBVEVfVElNRV9GSUVMRFNfWU1EX0hNUyk7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGVfdGltZV9nZXRfeWVhcjoKLSAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKLSAqCi0gKiBSZXR1cm5zIHRoZSB5ZWFyIG9mIHRoaXMgI0dzdERhdGVUaW1lCi0gKiBDYWxsIGdzdF9kYXRlX3RpbWVfaGFzX3llYXIgYmVmb3JlLCB0byBhdm9pZCB3YXJuaW5ncy4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IFRoZSB5ZWFyIG9mIHRoaXMgI0dzdERhdGVUaW1lCi0gKi8KLWdpbnQKLWdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCAwKTsKLQotICByZXR1cm4gZ19kYXRlX3RpbWVfZ2V0X3llYXIgKGRhdGV0aW1lLT5kYXRldGltZSk7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGVfdGltZV9nZXRfbW9udGg6Ci0gKiBAZGF0ZXRpbWU6IGEgI0dzdERhdGVUaW1lCi0gKgotICogUmV0dXJucyB0aGUgbW9udGggb2YgdGhpcyAjR3N0RGF0ZVRpbWUuIEphbnVhcnkgaXMgMSwgRmVicnVhcnkgaXMgMiwgZXRjLi4KLSAqIENhbGwgZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggYmVmb3JlLCB0byBhdm9pZCB3YXJuaW5ncy4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IFRoZSBtb250aCBvZiB0aGlzICNHc3REYXRlVGltZQotICovCi1naW50Ci1nc3RfZGF0ZV90aW1lX2dldF9tb250aCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGRhdGV0aW1lKSwgMCk7Ci0KLSAgcmV0dXJuIGdfZGF0ZV90aW1lX2dldF9tb250aCAoZGF0ZXRpbWUtPmRhdGV0aW1lKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX2dldF9kYXk6Ci0gKiBAZGF0ZXRpbWU6IGEgI0dzdERhdGVUaW1lCi0gKgotICogUmV0dXJucyB0aGUgZGF5IG9mIHRoZSBtb250aCBvZiB0aGlzICNHc3REYXRlVGltZS4KLSAqIENhbGwgZ3N0X2RhdGVfdGltZV9oYXNfZGF5IGJlZm9yZSwgdG8gYXZvaWQgd2FybmluZ3MuCi0gKgotICogUmV0dXJuIHZhbHVlOiBUaGUgZGF5IG9mIHRoaXMgI0dzdERhdGVUaW1lCi0gKi8KLWdpbnQKLWdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkYXRldGltZSksIDApOwotCi0gIHJldHVybiBnX2RhdGVfdGltZV9nZXRfZGF5X29mX21vbnRoIChkYXRldGltZS0+ZGF0ZXRpbWUpOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXI6Ci0gKiBAZGF0ZXRpbWU6IGEgI0dzdERhdGVUaW1lCi0gKgotICogUmV0cmlldmVzIHRoZSBob3VyIG9mIHRoZSBkYXkgcmVwcmVzZW50ZWQgYnkgQGRhdGV0aW1lIGluIHRoZSBncmVnb3JpYW4KLSAqIGNhbGVuZGFyLiBUaGUgcmV0dXJuIGlzIGluIHRoZSByYW5nZSBvZiAwIHRvIDIzLgotICogQ2FsbCBnc3RfZGF0ZV90aW1lX2hhc19oYXVyIGJlZm9yZSwgdG8gYXZvaWQgd2FybmluZ3MuCi0gKgotICogUmV0dXJuIHZhbHVlOiB0aGUgaG91ciBvZiB0aGUgZGF5Ci0gKi8KLWdpbnQKLWdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGRhdGV0aW1lKSwgMCk7Ci0KLSAgcmV0dXJuIGdfZGF0ZV90aW1lX2dldF9ob3VyIChkYXRldGltZS0+ZGF0ZXRpbWUpOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZToKLSAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIG1pbnV0ZSBvZiB0aGUgaG91ciByZXByZXNlbnRlZCBieSBAZGF0ZXRpbWUgaW4gdGhlIGdyZWdvcmlhbgotICogY2FsZW5kYXIuCi0gKiBDYWxsIGdzdF9kYXRlX3RpbWVfaGFzX21pbnV0ZSBiZWZvcmUsIHRvIGF2b2lkIHdhcm5pbmdzLgotICoKLSAqIFJldHVybiB2YWx1ZTogdGhlIG1pbnV0ZSBvZiB0aGUgaG91cgotICovCi1naW50Ci1nc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGRhdGV0aW1lKSwgMCk7Ci0KLSAgcmV0dXJuIGdfZGF0ZV90aW1lX2dldF9taW51dGUgKGRhdGV0aW1lLT5kYXRldGltZSk7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kOgotICogQGRhdGV0aW1lOiBhICNHc3REYXRlVGltZQotICoKLSAqIFJldHJpZXZlcyB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgcmVwcmVzZW50ZWQgYnkgQGRhdGV0aW1lIGluIHRoZSBncmVnb3JpYW4KLSAqIGNhbGVuZGFyLgotICogQ2FsbCBnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgYmVmb3JlLCB0byBhdm9pZCB3YXJuaW5ncy4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IHRoZSBzZWNvbmQgcmVwcmVzZW50ZWQgYnkgQGRhdGV0aW1lCi0gKi8KLWdpbnQKLWdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIChkYXRldGltZSksIDApOwotCi0gIHJldHVybiBnX2RhdGVfdGltZV9nZXRfc2Vjb25kIChkYXRldGltZS0+ZGF0ZXRpbWUpOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kOgotICogQGRhdGV0aW1lOiBhICNHc3REYXRlVGltZQotICoKLSAqIFJldHJpZXZlcyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBzZWNvbmRzIGluIG1pY3Jvc2Vjb25kcyByZXByZXNlbnRlZCBieQotICogQGRhdGV0aW1lIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIuCi0gKgotICogUmV0dXJuIHZhbHVlOiB0aGUgbWljcm9zZWNvbmQgb2YgdGhlIHNlY29uZAotICovCi1naW50Ci1nc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGV0aW1lICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIChkYXRldGltZSksIDApOwotCi0gIHJldHVybiBnX2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGRhdGV0aW1lLT5kYXRldGltZSk7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldDoKLSAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIG9mZnNldCBmcm9tIFVUQyBpbiBob3VycyB0aGF0IHRoZSB0aW1lem9uZSBzcGVjaWZpZWQKLSAqIGJ5IEBkYXRldGltZSByZXByZXNlbnRzLiBUaW1lem9uZXMgYWhlYWQgKHRvIHRoZSBlYXN0KSBvZiBVVEMgaGF2ZSBwb3NpdGl2ZQotICogdmFsdWVzLCB0aW1lem9uZXMgYmVmb3JlICh0byB0aGUgd2VzdCkgb2YgVVRDIGhhdmUgbmVnYXRpdmUgdmFsdWVzLgotICogSWYgQGRhdGV0aW1lIHJlcHJlc2VudHMgVVRDIHRpbWUsIHRoZW4gdGhlIG9mZnNldCBpcyB6ZXJvLgotICoKLSAqIFJldHVybiB2YWx1ZTogdGhlIG9mZnNldCBmcm9tIFVUQyBpbiBob3VycwotICovCi1nZmxvYXQKLWdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCAwLjApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZGF0ZXRpbWUpLCAwLjApOwotCi0gIHJldHVybiAoZ19kYXRlX3RpbWVfZ2V0X3V0Y19vZmZzZXQgKGRhdGV0aW1lLT5kYXRldGltZSkgLwotICAgICAgR19VU0VDX1BFUl9TRUMpIC8gMzYwMC4wOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfbmV3X3k6Ci0gKiBAeWVhcjogdGhlIGdyZWdvcmlhbiB5ZWFyCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0RGF0ZVRpbWUgdXNpbmcgdGhlIGRhdGUgYW5kIHRpbWVzIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIKLSAqIGluIHRoZSBsb2NhbCB0aW1lem9uZS4KLSAqCi0gKiBAeWVhciBzaG91bGQgYmUgZnJvbSAxIHRvIDk5OTkuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgotICoKLSAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAjR3N0RGF0ZVRpbWUKLSAqLwotR3N0RGF0ZVRpbWUgKgotZ3N0X2RhdGVfdGltZV9uZXdfeSAoZ2ludCB5ZWFyKQotewotICByZXR1cm4gZ3N0X2RhdGVfdGltZV9uZXcgKDAuMCwgeWVhciwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX25ld195bToKLSAqIEB5ZWFyOiB0aGUgZ3JlZ29yaWFuIHllYXIKLSAqIEBtb250aDogdGhlIGdyZWdvcmlhbiBtb250aAotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdERhdGVUaW1lIHVzaW5nIHRoZSBkYXRlIGFuZCB0aW1lcyBpbiB0aGUgZ3JlZ29yaWFuIGNhbGVuZGFyCi0gKiBpbiB0aGUgbG9jYWwgdGltZXpvbmUuCi0gKgotICogQHllYXIgc2hvdWxkIGJlIGZyb20gMSB0byA5OTk5LCBAbW9udGggc2hvdWxkIGJlIGZyb20gMSB0byAxMi4KLSAqCi0gKiBJZiB2YWx1ZSBpcyAtMSB0aGVuIGFsbCBvdmVyIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gRm9yIGV4YW1wbGUKLSAqIGlmIEBtb250aCA9PSAtMSwgdGhlbiAjR3N0RGF0ZVRpbWUgd2lsbCBjcmVhdGVkIG9ubHkgZm9yIEB5ZWFyLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCi0gKi8KLUdzdERhdGVUaW1lICoKLWdzdF9kYXRlX3RpbWVfbmV3X3ltIChnaW50IHllYXIsIGdpbnQgbW9udGgpCi17Ci0gIHJldHVybiBnc3RfZGF0ZV90aW1lX25ldyAoMC4wLCB5ZWFyLCBtb250aCwgLTEsIC0xLCAtMSwgLTEpOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfbmV3X3ltZDoKLSAqIEB5ZWFyOiB0aGUgZ3JlZ29yaWFuIHllYXIKLSAqIEBtb250aDogdGhlIGdyZWdvcmlhbiBtb250aAotICogQGRheTogdGhlIGRheSBvZiB0aGUgZ3JlZ29yaWFuIG1vbnRoCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0RGF0ZVRpbWUgdXNpbmcgdGhlIGRhdGUgYW5kIHRpbWVzIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIKLSAqIGluIHRoZSBsb2NhbCB0aW1lem9uZS4KLSAqCi0gKiBAeWVhciBzaG91bGQgYmUgZnJvbSAxIHRvIDk5OTksIEBtb250aCBzaG91bGQgYmUgZnJvbSAxIHRvIDEyLCBAZGF5IGZyb20KLSAqIDEgdG8gMzEuCi0gKgotICogSWYgdmFsdWUgaXMgLTEgdGhlbiBhbGwgb3ZlciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuIEZvciBleGFtcGxlCi0gKiBpZiBAbW9udGggPT0gLTEsIHRoZW4gI0dzdERhdGVUaW1lIHdpbGwgY3JlYXRlZCBvbmx5IGZvciBAeWVhci4gSWYKLSAqIEBkYXkgPT0gLTEsIHRoZW4gI0dzdERhdGVUaW1lIHdpbGwgY3JlYXRlZCBmb3IgQHllYXIgYW5kIEBtb250aCBhbmQKLSAqIHNvIG9uLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCi0gKi8KLUdzdERhdGVUaW1lICoKLWdzdF9kYXRlX3RpbWVfbmV3X3ltZCAoZ2ludCB5ZWFyLCBnaW50IG1vbnRoLCBnaW50IGRheSkKLXsKLSAgcmV0dXJuIGdzdF9kYXRlX3RpbWVfbmV3ICgwLjAsIHllYXIsIG1vbnRoLCBkYXksIC0xLCAtMSwgLTEpOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lOgotICogQHNlY3M6IHNlY29uZHMgZnJvbSB0aGUgVW5peCBlcG9jaAotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdERhdGVUaW1lIHVzaW5nIHRoZSB0aW1lIHNpbmNlIEphbiAxLCAxOTcwIHNwZWNpZmllZCBieQotICogQHNlY3MuIFRoZSAjR3N0RGF0ZVRpbWUgaXMgaW4gdGhlIGxvY2FsIHRpbWV6b25lLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCi0gKi8KLUdzdERhdGVUaW1lICoKLWdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lIChnaW50NjQgc2VjcykKLXsKLSAgR0RhdGVUaW1lICpkYXRldGltZTsKLQotICBkYXRldGltZSA9IGdfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfbG9jYWwgKHNlY3MpOwotICByZXR1cm4gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nX2RhdGVfdGltZSAoZGF0ZXRpbWUpOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGM6Ci0gKiBAc2Vjczogc2Vjb25kcyBmcm9tIHRoZSBVbml4IGVwb2NoCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0RGF0ZVRpbWUgdXNpbmcgdGhlIHRpbWUgc2luY2UgSmFuIDEsIDE5NzAgc3BlY2lmaWVkIGJ5Ci0gKiBAc2Vjcy4gVGhlICNHc3REYXRlVGltZSBpcyBpbiB0aGUgVVRDIHRpbWV6b25lLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCi0gKi8KLUdzdERhdGVUaW1lICoKLWdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMgKGdpbnQ2NCBzZWNzKQotewotICBHc3REYXRlVGltZSAqZGF0ZXRpbWU7Ci0gIGRhdGV0aW1lID0KLSAgICAgIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWUgKGdfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfdXRjIChzZWNzKSk7Ci0gIHJldHVybiBkYXRldGltZTsKLX0KLQotc3RhdGljIEdzdERhdGVUaW1lRmllbGRzCi1nc3RfZGF0ZV90aW1lX2NoZWNrX2ZpZWxkcyAoZ2ludCAqIHllYXIsIGdpbnQgKiBtb250aCwgZ2ludCAqIGRheSwKLSAgICBnaW50ICogaG91ciwgZ2ludCAqIG1pbnV0ZSwgZ2RvdWJsZSAqIHNlY29uZHMpCi17Ci0gIGlmICgqbW9udGggPT0gLTEpIHsKLSAgICAqbW9udGggPSAqZGF5ID0gMTsKLSAgICAqaG91ciA9ICptaW51dGUgPSAqc2Vjb25kcyA9IDA7Ci0gICAgcmV0dXJuIEdTVF9EQVRFX1RJTUVfRklFTERTX1k7Ci0gIH0gZWxzZSBpZiAoKmRheSA9PSAtMSkgewotICAgICpkYXkgPSAxOwotICAgICpob3VyID0gKm1pbnV0ZSA9ICpzZWNvbmRzID0gMDsKLSAgICByZXR1cm4gR1NUX0RBVEVfVElNRV9GSUVMRFNfWU07Ci0gIH0gZWxzZSBpZiAoKmhvdXIgPT0gLTEpIHsKLSAgICAqaG91ciA9ICptaW51dGUgPSAqc2Vjb25kcyA9IDA7Ci0gICAgcmV0dXJuIEdTVF9EQVRFX1RJTUVfRklFTERTX1lNRDsKLSAgfSBlbHNlIGlmICgqc2Vjb25kcyA9PSAtMSkgewotICAgICpzZWNvbmRzID0gMDsKLSAgICByZXR1cm4gR1NUX0RBVEVfVElNRV9GSUVMRFNfWU1EX0hNOwotICB9IGVsc2UKLSAgICByZXR1cm4gR1NUX0RBVEVfVElNRV9GSUVMRFNfWU1EX0hNUzsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lOgotICogQHllYXI6IHRoZSBncmVnb3JpYW4geWVhcgotICogQG1vbnRoOiB0aGUgZ3JlZ29yaWFuIG1vbnRoLCBvciAtMQotICogQGRheTogdGhlIGRheSBvZiB0aGUgZ3JlZ29yaWFuIG1vbnRoLCBvciAtMQotICogQGhvdXI6IHRoZSBob3VyIG9mIHRoZSBkYXksIG9yIC0xCi0gKiBAbWludXRlOiB0aGUgbWludXRlIG9mIHRoZSBob3VyLCBvciAtMQotICogQHNlY29uZHM6IHRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgb3IgLTEKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3REYXRlVGltZSB1c2luZyB0aGUgZGF0ZSBhbmQgdGltZXMgaW4gdGhlIGdyZWdvcmlhbiBjYWxlbmRhcgotICogaW4gdGhlIGxvY2FsIHRpbWV6b25lLgotICoKLSAqIEB5ZWFyIHNob3VsZCBiZSBmcm9tIDEgdG8gOTk5OSwgQG1vbnRoIHNob3VsZCBiZSBmcm9tIDEgdG8gMTIsIEBkYXkgZnJvbQotICogMSB0byAzMSwgQGhvdXIgZnJvbSAwIHRvIDIzLCBAbWludXRlcyBhbmQgQHNlY29uZHMgZnJvbSAwIHRvIDU5LgotICoKLSAqIElmIEBtb250aCBpcyAtMSwgdGhlbiB0aGUgI0dzdERhdGVUaW1lIGNyZWF0ZWQgd2lsbCBvbmx5IGNvbnRhaW4gQHllYXIsCi0gKiBhbmQgYWxsIG90aGVyIGZpZWxkcyB3aWxsIGJlIGNvbnNpZGVyZWQgbm90IHNldC4KLSAqCi0gKiBJZiBAZGF5IGlzIC0xLCB0aGVuIHRoZSAjR3N0RGF0ZVRpbWUgY3JlYXRlZCB3aWxsIG9ubHkgY29udGFpbiBAeWVhciBhbmQKLSAqIEBtb250aCBhbmQgYWxsIG90aGVyIGZpZWxkcyB3aWxsIGJlIGNvbnNpZGVyZWQgbm90IHNldC4KLSAqCi0gKiBJZiBAaG91ciBpcyAtMSwgdGhlbiB0aGUgI0dzdERhdGVUaW1lIGNyZWF0ZWQgd2lsbCBvbmx5IGNvbnRhaW4gQHllYXIgYW5kCi0gKiBAbW9udGggYW5kIEBkYXksIGFuZCB0aGUgdGltZSBmaWVsZHMgd2lsbCBiZSBjb25zaWRlcmVkIG5vdCBzZXQuIEluIHRoaXMKLSAqIGNhc2UgQG1pbnV0ZSBhbmQgQHNlY29uZHMgc2hvdWxkIGFsc28gYmUgLTEuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgotICoKLSAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAjR3N0RGF0ZVRpbWUKLSAqLwotR3N0RGF0ZVRpbWUgKgotZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZSAoZ2ludCB5ZWFyLCBnaW50IG1vbnRoLCBnaW50IGRheSwgZ2ludCBob3VyLAotICAgIGdpbnQgbWludXRlLCBnZG91YmxlIHNlY29uZHMpCi17Ci0gIEdzdERhdGVUaW1lRmllbGRzIGZpZWxkczsKLSAgR3N0RGF0ZVRpbWUgKmRhdGV0aW1lOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh5ZWFyID4gMCAmJiB5ZWFyIDw9IDk5OTksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKG1vbnRoID4gMCAmJiBtb250aCA8PSAxMikgfHwgbW9udGggPT0gLTEsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGRheSA+IDAgJiYgZGF5IDw9IDMxKSB8fCBkYXkgPT0gLTEsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGhvdXIgPj0gMCAmJiBob3VyIDwgMjQpIHx8IGhvdXIgPT0gLTEsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKG1pbnV0ZSA+PSAwICYmIG1pbnV0ZSA8IDYwKSB8fCBtaW51dGUgPT0gLTEsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKHNlY29uZHMgPj0gMCAmJiBzZWNvbmRzIDwgNjApIHx8IHNlY29uZHMgPT0gLTEsIE5VTEwpOwotCi0gIGZpZWxkcyA9IGdzdF9kYXRlX3RpbWVfY2hlY2tfZmllbGRzICgmeWVhciwgJm1vbnRoLCAmZGF5LAotICAgICAgJmhvdXIsICZtaW51dGUsICZzZWNvbmRzKTsKLQotICBkYXRldGltZSA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWUgKGdfZGF0ZV90aW1lX25ld19sb2NhbCAoeWVhciwKLSAgICAgICAgICBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHMpKTsKLQotICBkYXRldGltZS0+ZmllbGRzID0gZmllbGRzOwotICByZXR1cm4gZGF0ZXRpbWU7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWU6Ci0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0RGF0ZVRpbWUgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgotICoKLSAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAjR3N0RGF0ZVRpbWUgd2hpY2ggc2hvdWxkCi0gKiAgICAgYmUgZnJlZWQgd2l0aCBnc3RfZGF0ZV90aW1lX3VucmVmKCkuCi0gKi8KLUdzdERhdGVUaW1lICoKLWdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICh2b2lkKQotewotICByZXR1cm4gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nX2RhdGVfdGltZSAoZ19kYXRlX3RpbWVfbmV3X25vd19sb2NhbCAoKSk7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YzoKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3REYXRlVGltZSB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaW5zdGFudCBhdCBVbml2ZXJzYWwKLSAqIGNvb3JkaW5hdGVkIHRpbWUuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgotICoKLSAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAjR3N0RGF0ZVRpbWUgd2hpY2ggc2hvdWxkCi0gKiAgIGJlIGZyZWVkIHdpdGggZ3N0X2RhdGVfdGltZV91bnJlZigpLgotICovCi1Hc3REYXRlVGltZSAqCi1nc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjICh2b2lkKQotewotICByZXR1cm4gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nX2RhdGVfdGltZSAoZ19kYXRlX3RpbWVfbmV3X25vd191dGMgKCkpOwotfQotCi1naW50Ci1fX2dzdF9kYXRlX3RpbWVfY29tcGFyZSAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkdDEsIGNvbnN0IEdzdERhdGVUaW1lICogZHQyKQotewotICBnaW50NjQgZGlmZjsKLQotICAvKiB3ZSBhc3N1bWUgaGVyZSB0aGF0IEdTVF9EQVRFX1RJTUVfRklFTERTX1lNRF9ITVMgaXMgdGhlIGhpZ2hlc3QKLSAgICogcmVzb2x1dGlvbiwgYW5kIGlnbm9yZSBtaWNyb3NlY29uZCBkaWZmZXJlbmNlcyBvbiBwdXJwb3NlIGZvciBub3cgKi8KLSAgaWYgKGR0MS0+ZmllbGRzICE9IGR0Mi0+ZmllbGRzKQotICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotCi0gIC8qIFRoaXMgd2lsbCByb3VuZCBkb3duIHRvIG5lYXJlc3Qgc2Vjb25kLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuIFdlJ3JlCi0gICAqIG5vdCBjb21wYXJpbmcgbWljcm9zZWNvbmRzIG9uIHB1cnBvc2UgaGVyZSwgc2luY2Ugd2UncmUgbm90Ci0gICAqIHNlcmlhbGlzaW5nIHRoZW0gd2hlbiBkb2luZyBuZXdfdXRjX25vdygpICsgdG9fc3RyaW5nKCkgKi8KLSAgZGlmZiA9Ci0gICAgICBnX2RhdGVfdGltZV90b191bml4IChkdDEtPmRhdGV0aW1lKSAtIGdfZGF0ZV90aW1lX3RvX3VuaXggKGR0Mi0+ZGF0ZXRpbWUpOwotICBpZiAoZGlmZiA8IDApCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9MRVNTX1RIQU47Ci0gIGVsc2UgaWYgKGRpZmYgPiAwKQotICAgIHJldHVybiBHU1RfVkFMVUVfR1JFQVRFUl9USEFOOwotICBlbHNlCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX25ldzoKLSAqIEB0em9mZnNldDogT2Zmc2V0IGZyb20gVVRDIGluIGhvdXJzLgotICogQHllYXI6IHRoZSBncmVnb3JpYW4geWVhcgotICogQG1vbnRoOiB0aGUgZ3JlZ29yaWFuIG1vbnRoCi0gKiBAZGF5OiB0aGUgZGF5IG9mIHRoZSBncmVnb3JpYW4gbW9udGgKLSAqIEBob3VyOiB0aGUgaG91ciBvZiB0aGUgZGF5Ci0gKiBAbWludXRlOiB0aGUgbWludXRlIG9mIHRoZSBob3VyCi0gKiBAc2Vjb25kczogdGhlIHNlY29uZCBvZiB0aGUgbWludXRlCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0RGF0ZVRpbWUgdXNpbmcgdGhlIGRhdGUgYW5kIHRpbWVzIGluIHRoZSBncmVnb3JpYW4gY2FsZW5kYXIKLSAqIGluIHRoZSBzdXBwbGllZCB0aW1lem9uZS4KLSAqCi0gKiBAeWVhciBzaG91bGQgYmUgZnJvbSAxIHRvIDk5OTksIEBtb250aCBzaG91bGQgYmUgZnJvbSAxIHRvIDEyLCBAZGF5IGZyb20KLSAqIDEgdG8gMzEsIEBob3VyIGZyb20gMCB0byAyMywgQG1pbnV0ZXMgYW5kIEBzZWNvbmRzIGZyb20gMCB0byA1OS4KLSAqCi0gKiBOb3RlIHRoYXQgQHR6b2Zmc2V0IGlzIGEgZmxvYXQgYW5kIHdhcyBjaG9zZW4gc28gZm9yIGJlaW5nIGFibGUgdG8gaGFuZGxlCi0gKiBzb21lIGZyYWN0aW9uYWwgdGltZXpvbmVzLCB3aGlsZSBpdCBzdGlsbCBrZWVwcyB0aGUgcmVhZGFiaWxpdHkgb2YKLSAqIHJlcHJlc2VudGluZyBpdCBpbiBob3VycyBmb3IgbW9zdCB0aW1lem9uZXMuCi0gKgotICogSWYgdmFsdWUgaXMgLTEgdGhlbiBhbGwgb3ZlciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuIEZvciBleGFtcGxlCi0gKiBpZiBAbW9udGggPT0gLTEsIHRoZW4gI0dzdERhdGVUaW1lIHdpbGwgY3JlYXRlZCBvbmx5IGZvciBAeWVhci4gSWYKLSAqIEBkYXkgPT0gLTEsIHRoZW4gI0dzdERhdGVUaW1lIHdpbGwgY3JlYXRlZCBmb3IgQHllYXIgYW5kIEBtb250aCBhbmQKLSAqIHNvIG9uLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lCi0gKi8KLUdzdERhdGVUaW1lICoKLWdzdF9kYXRlX3RpbWVfbmV3IChnZmxvYXQgdHpvZmZzZXQsIGdpbnQgeWVhciwgZ2ludCBtb250aCwgZ2ludCBkYXksIGdpbnQgaG91ciwKLSAgICBnaW50IG1pbnV0ZSwgZ2RvdWJsZSBzZWNvbmRzKQotewotICBHc3REYXRlVGltZUZpZWxkcyBmaWVsZHM7Ci0gIGdjaGFyIGJ1Zls2XTsKLSAgR1RpbWVab25lICp0ejsKLSAgR0RhdGVUaW1lICpkdDsKLSAgR3N0RGF0ZVRpbWUgKmRhdGV0aW1lOwotICBnaW50IHR6aG91ciwgdHptaW51dGU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHllYXIgPiAwICYmIHllYXIgPD0gOTk5OSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgobW9udGggPiAwICYmIG1vbnRoIDw9IDEyKSB8fCBtb250aCA9PSAtMSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgoZGF5ID4gMCAmJiBkYXkgPD0gMzEpIHx8IGRheSA9PSAtMSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgoaG91ciA+PSAwICYmIGhvdXIgPCAyNCkgfHwgaG91ciA9PSAtMSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgobWludXRlID49IDAgJiYgbWludXRlIDwgNjApIHx8IG1pbnV0ZSA9PSAtMSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgoc2Vjb25kcyA+PSAwICYmIHNlY29uZHMgPCA2MCkgfHwgc2Vjb25kcyA9PSAtMSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0em9mZnNldCA+PSAtMTIuMCAmJiB0em9mZnNldCA8PSAxMi4wLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKChob3VyID49IDAgJiYgbWludXRlID49IDApIHx8Ci0gICAgICAoaG91ciA9PSAtMSAmJiBtaW51dGUgPT0gLTEgJiYgc2Vjb25kcyA9PSAtMSAmJiB0em9mZnNldCA9PSAwLjApLCBOVUxMKTsKLQotICB0emhvdXIgPSAoZ2ludCkgQUJTICh0em9mZnNldCk7Ci0gIHR6bWludXRlID0gKGdpbnQpICgoQUJTICh0em9mZnNldCkgLSB0emhvdXIpICogNjApOwotCi0gIGdfc25wcmludGYgKGJ1ZiwgNiwgIiVjJTAyZCUwMmQiLCB0em9mZnNldCA+PSAwID8gJysnIDogJy0nLCB0emhvdXIsCi0gICAgICB0em1pbnV0ZSk7Ci0KLSAgdHogPSBnX3RpbWVfem9uZV9uZXcgKGJ1Zik7Ci0KLSAgZmllbGRzID0gZ3N0X2RhdGVfdGltZV9jaGVja19maWVsZHMgKCZ5ZWFyLCAmbW9udGgsICZkYXksCi0gICAgICAmaG91ciwgJm1pbnV0ZSwgJnNlY29uZHMpOwotCi0gIGR0ID0gZ19kYXRlX3RpbWVfbmV3ICh0eiwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRzKTsKLSAgZ190aW1lX3pvbmVfdW5yZWYgKHR6KTsKLQotICBkYXRldGltZSA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWUgKGR0KTsKLSAgZGF0ZXRpbWUtPmZpZWxkcyA9IGZpZWxkczsKLQotICByZXR1cm4gZGF0ZXRpbWU7Ci19Ci0KLWdjaGFyICoKLV9fZ3N0X2RhdGVfdGltZV9zZXJpYWxpemUgKEdzdERhdGVUaW1lICogZGF0ZXRpbWUsIGdib29sZWFuIHNlcmlhbGl6ZV91c2VjcykKLXsKLSAgR1N0cmluZyAqczsKLSAgZ2Zsb2F0IGdtdF9vZmZzZXQ7Ci0gIGd1aW50IG1zZWNzOwotCi0gIC8qIHdlIGFsd2F5cyBoYXZlIGF0IGxlYXN0IHRoZSB5ZWFyICovCi0gIHMgPSBnX3N0cmluZ19uZXcgKE5VTEwpOwotICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzLCAiJTA0dSIsIGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGRhdGV0aW1lKSk7Ci0KLSAgaWYgKGRhdGV0aW1lLT5maWVsZHMgPT0gR1NUX0RBVEVfVElNRV9GSUVMRFNfWSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogYWRkIG1vbnRoICovCi0gIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHMsICItJTAydSIsIGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkYXRldGltZSkpOwotCi0gIGlmIChkYXRldGltZS0+ZmllbGRzID09IEdTVF9EQVRFX1RJTUVfRklFTERTX1lNKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBhZGQgZGF5IG9mIG1vbnRoICovCi0gIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHMsICItJTAydSIsIGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZGF0ZXRpbWUpKTsKLQotICBpZiAoZGF0ZXRpbWUtPmZpZWxkcyA9PSBHU1RfREFURV9USU1FX0ZJRUxEU19ZTUQpCi0gICAgZ290byBkb25lOwotCi0gIC8qIGFkZCB0aW1lICovCi0gIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHMsICJUJTAydTolMDJ1IiwgZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZGF0ZXRpbWUpLAotICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkYXRldGltZSkpOwotCi0gIGlmIChkYXRldGltZS0+ZmllbGRzID09IEdTVF9EQVRFX1RJTUVfRklFTERTX1lNRF9ITSkKLSAgICBnb3RvIGFkZF90aW1lem9uZTsKLQotICAvKiBhZGQgc2Vjb25kcyAqLwotICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzLCAiOiUwMnUiLCBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGRhdGV0aW1lKSk7Ci0KLSAgLyogYWRkIG1pY3Jvc2Vjb25kcyAqLwotICBpZiAoc2VyaWFsaXplX3VzZWNzKSB7Ci0gICAgbXNlY3MgPSBnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoZGF0ZXRpbWUpOwotICAgIGlmIChtc2VjcyAhPSAwKSB7Ci0gICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzLCAiLiUwNnUiLCBtc2Vjcyk7Ci0gICAgICAvKiB0cmltIHRyYWlsaW5nIDBzICovCi0gICAgICB3aGlsZSAocy0+c3RyW3MtPmxlbiAtIDFdID09ICcwJykKLSAgICAgICAgZ19zdHJpbmdfdHJ1bmNhdGUgKHMsIHMtPmxlbiAtIDEpOwotICAgIH0KLSAgfQotCi0gIC8qIGFkZCB0aW1lem9uZSAqLwotCi1hZGRfdGltZXpvbmU6Ci0KLSAgZ210X29mZnNldCA9IGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGRhdGV0aW1lKTsKLSAgaWYgKGdtdF9vZmZzZXQgPT0gMCkgewotICAgIGdfc3RyaW5nX2FwcGVuZF9jIChzLCAnWicpOwotICB9IGVsc2UgewotICAgIGd1aW50IHR6aG91ciwgdHptaW51dGU7Ci0KLSAgICB0emhvdXIgPSAoZ3VpbnQpIEFCUyAoZ210X29mZnNldCk7Ci0gICAgdHptaW51dGUgPSAoZ3VpbnQpICgoQUJTIChnbXRfb2Zmc2V0KSAtIHR6aG91cikgKiA2MCk7Ci0KLSAgICBnX3N0cmluZ19hcHBlbmRfYyAocywgKGdtdF9vZmZzZXQgPj0gMCkgPyAnKycgOiAnLScpOwotICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHMsICIlMDJ1JTAydSIsIHR6aG91ciwgdHptaW51dGUpOwotICB9Ci0KLWRvbmU6Ci0KLSAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKHMsIEZBTFNFKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX3RvX2lzbzg2MDFfc3RyaW5nOgotICogQGRhdGV0aW1lOiBHc3REYXRlVGltZS4KLSAqCi0gKiBDcmVhdGUgYSBtaW5pbWFsIHN0cmluZyBjb21wYXRpYmxlIHdpdGggSVNPLTg2MDEuIFBvc3NpYmxlIG91dHB1dCBmb3JtYXRzCi0gKiBhcmUgKGZvciBleGFtcGxlKTogMjAxMiwgMjAxMi0wNiwgMjAxMi0wNi0yMywgMjAxMi0wNi0yM1QyMzozMFosCi0gKiAyMDEyLTA2LTIzVDIzOjMwKzAxMDAsIDIwMTItMDYtMjNUMjM6MzA6NTlaLCAyMDEyLTA2LTIzVDIzOjMwOjU5KzAxMDAKLSAqCi0gKiBSZXR1cm5zOiAobnVsbGFibGUpOiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgZm9ybWF0dGVkIGFjY29yZGluZwotICogICAgIHRvIElTTyA4NjAxIGFuZCBvbmx5IGluY2x1ZGluZyB0aGUgZGF0ZXRpbWUgZmllbGRzIHRoYXQgYXJlCi0gKiAgICAgdmFsaWQsIG9yICVOVUxMIGluIGNhc2UgdGhlcmUgd2FzIGFuIGVycm9yLiBUaGUgc3RyaW5nIHNob3VsZAotICogICAgIGJlIGZyZWVkIHdpdGggZ19mcmVlKCkuCi0gKi8KLWdjaGFyICoKLWdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKEdzdERhdGVUaW1lICogZGF0ZXRpbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRldGltZSAhPSBOVUxMLCBOVUxMKTsKLQotICBpZiAoZGF0ZXRpbWUtPmZpZWxkcyA9PSBHU1RfREFURV9USU1FX0ZJRUxEU19JTlZBTElEKQotICAgIHJldHVybiBOVUxMOwotCi0gIHJldHVybiBfX2dzdF9kYXRlX3RpbWVfc2VyaWFsaXplIChkYXRldGltZSwgRkFMU0UpOwotfQotCi0vKioKLSAqIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmc6Ci0gKiBAc3RyaW5nOiBJU08gODYwMS1mb3JtYXR0ZWQgZGF0ZXRpbWUgc3RyaW5nLgotICoKLSAqIFRyaWVzIHRvIHBhcnNlIGNvbW1vbiB2YXJpYW50cyBvZiBJU08tODYwMSBkYXRldGltZSBzdHJpbmdzIGludG8gYQotICogI0dzdERhdGVUaW1lLiBQb3NzaWJsZSBpbnB1dCBmb3JtYXRzIGFyZSAoZm9yIGV4YW1wbGUpOgotICogMjAxMi0wNi0zMFQyMjo0Njo0M1osIDIwMTIsIDIwMTItMDYsIDIwMTItMDYtMzAsIDIwMTItMDYtMzBUMjI6NDY6NDMtMDQzMCwKLSAqIDIwMTItMDYtMzBUMjI6NDZaLCAyMDEyLTA2LTMwVDIyOjQ2LTA0MzAsIDIwMTItMDYtMzAgMjI6NDYsCi0gKiAyMDEyLTA2LTMwIDIyOjQ2OjQzLCAyMDEyLTA2LTAwLCAyMDEyLTAwLTAwLCAyMDEyLTAwLTMwLCAyMjo0Njo0M1osIDIyOjQ2WiwKLSAqIDIyOjQ2OjQzLTA0MzAsIDIyOjQ2LTA0MzAsIDIyOjQ2OjMwLCAyMjo0NgotICogSWYgbm8gZGF0ZSBpcyBwcm92aWRlZCwgaXQgaXMgYXNzdW1lZCB0byBiZSAidG9kYXkiIGluIHRoZSB0aW1lem9uZQotICogcHJvdmlkZWQgKGlmIGFueSksIG90aGVyd2lzZSBVVEMuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhIG5ld2x5IGNyZWF0ZWQgI0dzdERhdGVUaW1lLAotICogb3IgJU5VTEwgb24gZXJyb3IKLSAqLwotR3N0RGF0ZVRpbWUgKgotZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHJpbmcpCi17Ci0gIGdpbnQgeWVhciA9IC0xLCBtb250aCA9IC0xLCBkYXkgPSAtMSwgaG91ciA9IC0xLCBtaW51dGUgPSAtMTsKLSAgZ2ludCBnbXRfb2Zmc2V0X2hvdXIgPSAtOTksIGdtdF9vZmZzZXRfbWluID0gLTk5OwotICBnZG91YmxlIHNlY29uZCA9IC0xLjA7Ci0gIGdmbG9hdCB0em9mZnNldCA9IDAuMDsKLSAgZ3VpbnQ2NCB1c2VjczsKLSAgZ2ludCBsZW4sIHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyaW5nICE9IE5VTEwsIE5VTEwpOwotCi0gIEdTVF9ERUJVRyAoIlBhcnNpbmcgJyVzJyBpbnRvIGEgZGF0ZXRpbWUiLCBzdHJpbmcpOwotCi0gIGxlbiA9IHN0cmxlbiAoc3RyaW5nKTsKLQotICAvKiBUaGUgaW5wdXQgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIHN0YXJ0IGVpdGhlciB3aXRoIGEgeWVhciAoNCBkaWdpdHMpIG9yCi0gICAqIHdpdGggYW4gaG91ciAoMiBkaWdpdHMpLiBIb3VyIG11c3QgYmUgZm9sbG93ZWQgYnkgbWludXRlLiBJbiBhbnkgY2FzZSwKLSAgICogdGhlIHN0cmluZyBtdXN0IGJlIGF0IGxlYXN0IDQgY2hhcmFjdGVycyBsb25nIGFuZCBzdGFydCB3aXRoIDIgZGlnaXRzICovCi0gIGlmIChsZW4gPCA0IHx8ICFnX2FzY2lpX2lzZGlnaXQgKHN0cmluZ1swXSkgfHwgIWdfYXNjaWlfaXNkaWdpdCAoc3RyaW5nWzFdKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBpZiAoZ19hc2NpaV9pc2RpZ2l0IChzdHJpbmdbMl0pICYmIGdfYXNjaWlfaXNkaWdpdCAoc3RyaW5nWzNdKSkgewotICAgIHJldCA9IHNzY2FuZiAoc3RyaW5nLCAiJTA0ZC0lMDJkLSUwMmQiLCAmeWVhciwgJm1vbnRoLCAmZGF5KTsKLQotICAgIGlmIChyZXQgPT0gMCkKLSAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHJldCA9PSAzICYmIGRheSA8PSAwKSB7Ci0gICAgICByZXQgPSAyOwotICAgICAgZGF5ID0gLTE7Ci0gICAgfQotCi0gICAgaWYgKHJldCA+PSAyICYmIG1vbnRoIDw9IDApIHsKLSAgICAgIHJldCA9IDE7Ci0gICAgICBtb250aCA9IGRheSA9IC0xOwotICAgIH0KLQotICAgIGlmIChyZXQgPj0gMSAmJiAoeWVhciA8PSAwIHx8IHllYXIgPiA5OTk5IHx8IG1vbnRoID4gMTIgfHwgZGF5ID4gMzEpKQotICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBlbHNlIGlmIChyZXQgPj0gMSAmJiBsZW4gPCAxNikKLSAgICAgIC8qIFlNRCBpcyAxMCBjaGFycy4gWE1EICsgSE0gd2lsbCBiZSAxNiBjaGFycy4gaWYgaXQgaXMgbGVzcywKLSAgICAgICAqIGl0IG1ha2Ugbm8gc2Vuc2UgdG8gY29udGludWUuIFdlIHdpbGwgc3RheSB3aXRoIFlNRC4gKi8KLSAgICAgIGdvdG8geW1kOwotCi0gICAgc3RyaW5nICs9IDEwOwotICAgIC8qIEV4aXQgaWYgdGhlcmUgaXMgbm8gZXhwZWNldGVkIHZhbHVlIG9uIHRoaXMgc3RhZ2UgKi8KLSAgICBpZiAoISgqc3RyaW5nID09ICdUJyB8fCAqc3RyaW5nID09ICctJyB8fCAqc3RyaW5nID09ICcgJykpCi0gICAgICBnb3RvIHltZDsKLQotICAgIHN0cmluZyArPSAxOwotICB9Ci0gIC8qIGlmIGhvdXIgb3IgbWludXRlIGZhaWxzLCB0aGVuIHdlIHdpbGwgdXNlIG9ubHkgeW1kLiAqLwotICBob3VyID0gZ19hc2NpaV9zdHJ0b3VsbCAoc3RyaW5nLCAoZ2NoYXIgKiopICYgc3RyaW5nLCAxMCk7Ci0gIGlmIChob3VyID4gMjQgfHwgKnN0cmluZyAhPSAnOicpCi0gICAgZ290byB5bWQ7Ci0KLSAgLyogbWludXRlICovCi0gIG1pbnV0ZSA9IGdfYXNjaWlfc3RydG91bGwgKHN0cmluZyArIDEsIChnY2hhciAqKikgJiBzdHJpbmcsIDEwKTsKLSAgaWYgKG1pbnV0ZSA+IDU5KQotICAgIGdvdG8geW1kOwotCi0gIC8qIHNlY29uZCAqLwotICBpZiAoKnN0cmluZyA9PSAnOicpIHsKLSAgICBzZWNvbmQgPSBnX2FzY2lpX3N0cnRvdWxsIChzdHJpbmcgKyAxLCAoZ2NoYXIgKiopICYgc3RyaW5nLCAxMCk7Ci0gICAgLyogaWYgd2UgZmFpbCBoZXJlLCB3ZSBzdGlsbCBjYW4gcmV1c2UgaG91ciBhbmQgbWludXRlLiBXZQotICAgICAqIHdpbGwgc3RpbGwgYXR0ZW1wdCB0byBwYXJzZSBhbnkgdGltZXpvbmUgaW5mb3JtYXRpb24gKi8KLSAgICBpZiAoc2Vjb25kID4gNTkpIHsKLSAgICAgIHNlY29uZCA9IC0xLjA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG1pY3Jvc2Vjb25kcyAqLwotICAgICAgaWYgKCpzdHJpbmcgPT0gJy4nIHx8ICpzdHJpbmcgPT0gJywnKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyICp1c2VjX3N0YXJ0ID0gc3RyaW5nICsgMTsKLSAgICAgICAgZ3VpbnQgZGlnaXRzOwotCi0gICAgICAgIHVzZWNzID0gZ19hc2NpaV9zdHJ0b3VsbCAoc3RyaW5nICsgMSwgKGdjaGFyICoqKSAmIHN0cmluZywgMTApOwotICAgICAgICBpZiAodXNlY3MgIT0gR19NQVhVSU5UNjQgJiYgc3RyaW5nID4gdXNlY19zdGFydCkgewotICAgICAgICAgIGRpZ2l0cyA9IChndWludCkgKHN0cmluZyAtIHVzZWNfc3RhcnQpOwotICAgICAgICAgIHNlY29uZCArPSAoZ2RvdWJsZSkgdXNlY3MgLyBwb3cgKDEwLjAsIGRpZ2l0cyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoKnN0cmluZyA9PSAnWicpCi0gICAgZ290byB5bWRfaG1zOwotICBlbHNlIHsKLSAgICAvKiByZXVzZSBzb21lIGNvZGUgZnJvbSBnc3QtcGx1Z2lucy1iYXNlL2dzdC1saWJzL2dzdC90YWcvZ3N0eG1wdGFnLmMgKi8KLSAgICBnaW50IGdtdF9vZmZzZXQgPSAtMTsKLSAgICBnY2hhciAqcGx1c19wb3MgPSBOVUxMOwotICAgIGdjaGFyICpuZWdfcG9zID0gTlVMTDsKLSAgICBnY2hhciAqcG9zID0gTlVMTDsKLQotICAgIEdTVF9MT0cgKCJDaGVja2luZyBmb3IgdGltZXpvbmUgaW5mb3JtYXRpb24iKTsKLQotICAgIC8qIGNoZWNrIGlmIHRoZXJlIGlzIHRpbWV6b25lIGluZm8gKi8KLSAgICBwbHVzX3BvcyA9IHN0cnJjaHIgKHN0cmluZywgJysnKTsKLSAgICBuZWdfcG9zID0gc3RycmNociAoc3RyaW5nLCAnLScpOwotICAgIGlmIChwbHVzX3BvcykKLSAgICAgIHBvcyA9IHBsdXNfcG9zICsgMTsKLSAgICBlbHNlIGlmIChuZWdfcG9zKQotICAgICAgcG9zID0gbmVnX3BvcyArIDE7Ci0KLSAgICBpZiAocG9zICYmIHN0cmxlbiAocG9zKSA+PSAzKSB7Ci0gICAgICBnaW50IHJldF90ejsKLSAgICAgIGlmIChwb3NbMl0gPT0gJzonKQotICAgICAgICByZXRfdHogPSBzc2NhbmYgKHBvcywgIiVkOiVkIiwgJmdtdF9vZmZzZXRfaG91ciwgJmdtdF9vZmZzZXRfbWluKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0X3R6ID0gc3NjYW5mIChwb3MsICIlMDJkJTAyZCIsICZnbXRfb2Zmc2V0X2hvdXIsICZnbXRfb2Zmc2V0X21pbik7Ci0KLSAgICAgIEdTVF9ERUJVRyAoIlBhcnNpbmcgdGltZXpvbmU6ICVzIiwgcG9zKTsKLQotICAgICAgaWYgKHJldF90eiA9PSAyKSB7Ci0gICAgICAgIGlmIChuZWdfcG9zICE9IE5VTEwgJiYgbmVnX3BvcyArIDEgPT0gcG9zKSB7Ci0gICAgICAgICAgZ210X29mZnNldF9ob3VyICo9IC0xOwotICAgICAgICAgIGdtdF9vZmZzZXRfbWluICo9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGdtdF9vZmZzZXQgPSBnbXRfb2Zmc2V0X2hvdXIgKiA2MCArIGdtdF9vZmZzZXRfbWluOwotCi0gICAgICAgIHR6b2Zmc2V0ID0gZ210X29mZnNldCAvIDYwLjA7Ci0KLSAgICAgICAgR1NUX0xPRyAoIlRpbWV6b25lIG9mZnNldDogJWYgKCVkIG1pbnV0ZXMpIiwgdHpvZmZzZXQsIGdtdF9vZmZzZXQpOwotICAgICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIHBhcnNlIHRpbWV6b25lIGluZm9ybWF0aW9uIik7Ci0gICAgfQotICB9Ci0KLXltZF9obXM6Ci0gIGlmICh5ZWFyID09IC0xIHx8IG1vbnRoID09IC0xIHx8IGRheSA9PSAtMSkgewotICAgIEdEYXRlVGltZSAqbm93X3V0YywgKm5vd19pbl9naXZlbl90ejsKLQotICAgIC8qIE5vIGRhdGUgd2FzIHN1cHBsaWVkOiBtYWtlIGl0IHRvZGF5ICovCi0gICAgbm93X3V0YyA9IGdfZGF0ZV90aW1lX25ld19ub3dfdXRjICgpOwotICAgIGlmICh0em9mZnNldCAhPSAwLjApIHsKLSAgICAgIC8qIElmIGEgdGltZXpvbmUgb2Zmc2V0IHdhcyBzdXBwbGllZCwgZ2V0IHRoZSBkYXRlIG9mIHRoYXQgdGltZXpvbmUgKi8KLSAgICAgIGdfYXNzZXJ0IChnbXRfb2Zmc2V0X21pbiAhPSAtOTkpOwotICAgICAgZ19hc3NlcnQgKGdtdF9vZmZzZXRfaG91ciAhPSAtOTkpOwotICAgICAgbm93X2luX2dpdmVuX3R6ID0KLSAgICAgICAgICBnX2RhdGVfdGltZV9hZGRfbWludXRlcyAobm93X3V0YywKLSAgICAgICAgICAoNjAgKiBnbXRfb2Zmc2V0X2hvdXIpICsgZ210X29mZnNldF9taW4pOwotICAgICAgZ19kYXRlX3RpbWVfdW5yZWYgKG5vd191dGMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBub3dfaW5fZ2l2ZW5fdHogPSBub3dfdXRjOwotICAgIH0KLSAgICBnX2RhdGVfdGltZV9nZXRfeW1kIChub3dfaW5fZ2l2ZW5fdHosICZ5ZWFyLCAmbW9udGgsICZkYXkpOwotICAgIGdfZGF0ZV90aW1lX3VucmVmIChub3dfaW5fZ2l2ZW5fdHopOwotICB9Ci0gIHJldHVybiBnc3RfZGF0ZV90aW1lX25ldyAodHpvZmZzZXQsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKTsKLXltZDoKLSAgaWYgKHllYXIgPT0gLTEpIHsKLSAgICAvKiBObyBkYXRlIHdhcyBzdXBwbGllZCBhbmQgdGltZSBmYWlsZWQgdG8gcGFyc2UgKi8KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICByZXR1cm4gZ3N0X2RhdGVfdGltZV9uZXdfeW1kICh5ZWFyLCBtb250aCwgZGF5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kYXRlX3RpbWVfZnJlZSAoR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKLXsKLSAgZ19kYXRlX3RpbWVfdW5yZWYgKGRhdGV0aW1lLT5kYXRldGltZSk7Ci0gIGdfc2xpY2VfZnJlZSAoR3N0RGF0ZVRpbWUsIGRhdGV0aW1lKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX3JlZjoKLSAqIEBkYXRldGltZTogYSAjR3N0RGF0ZVRpbWUKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAZGF0ZXRpbWUgYnkgb25lLgotICoKLSAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgcmVmZXJlbmNlIEBkYXRldGltZQotICovCi1Hc3REYXRlVGltZSAqCi1nc3RfZGF0ZV90aW1lX3JlZiAoR3N0RGF0ZVRpbWUgKiBkYXRldGltZSkKLXsKLSAgcmV0dXJuIChHc3REYXRlVGltZSAqKSBnc3RfbWluaV9vYmplY3RfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZGF0ZXRpbWUpKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0ZV90aW1lX3VucmVmOgotICogQGRhdGV0aW1lOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdERhdGVUaW1lCi0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgQGRhdGV0aW1lIGJ5IG9uZS4gIFdoZW4gdGhlCi0gKiByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLCB0aGUgc3RydWN0dXJlIGlzIGZyZWVkLgotICovCi12b2lkCi1nc3RfZGF0ZV90aW1lX3VucmVmIChHc3REYXRlVGltZSAqIGRhdGV0aW1lKQotewotICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChkYXRldGltZSkpOwotfQotCi12b2lkCi1fcHJpdl9nc3RfZGF0ZV90aW1lX2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIF9nc3RfZGF0ZV90aW1lX3R5cGUgPSBnc3RfZGF0ZV90aW1lX2dldF90eXBlICgpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGRhdGV0aW1lLmggYi9nc3QvZ3N0ZGF0ZXRpbWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ1NzliOS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0ZGF0ZXRpbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0RBVEVfVElNRV9IX18KLSNkZWZpbmUgX19HU1RfREFURV9USU1FX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotCi0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qKgotICogR3N0RGF0ZVRpbWU6Ci0gKgotICogT3BhcXVlLCBpbW11dGFibGUsIHJlZmNvdW50ZWQgc3RydWN0IHRoYXQgc3RvcmVzIGRhdGUsIHRpbWUgYW5kIHRpbWV6b25lCi0gKiBpbmZvcm1hdGlvbi4gSXQgY3VycmVudGx5IHN1cHBvcnRzIHJhbmdlcyBmcm9tIDAwMDEtMDEtMDEgdG8KLSAqIDk5OTktMTItMzEgaW4gdGhlIEdyZWdvcmlhbiBwcm9sZXB0aWMgY2FsZW5kYXIuCi0gKgotICogVXNlIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBzdG9yZWQgdmFsdWVzLgotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0RGF0ZVRpbWUgR3N0RGF0ZVRpbWU7Ci0KLUdTVF9FWFBPUlQgR1R5cGUgX2dzdF9kYXRlX3RpbWVfdHlwZTsKLQotLyoqCi0gKiBHU1RfVFlQRV9EQVRFX1RJTUU6Ci0gKgotICogYSBib3hlZCAjR1ZhbHVlIHR5cGUgZm9yICNHc3REYXRlVGltZSB0aGF0IHJlcHJlc2VudHMgYSBkYXRlIGFuZCB0aW1lLgotICoKLSAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgR3N0RGF0ZVRpbWUKLSAqLwotCi0jZGVmaW5lIEdTVF9UWVBFX0RBVEVfVElNRSAoX2dzdF9kYXRlX3RpbWVfdHlwZSkKLQotR1R5cGUgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X3R5cGUgKHZvaWQpOwotCi0vKiBxdWVyeSB3aGljaCBmaWVsZHMgYXJlIHNldCAqLwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2RhdGVfdGltZV9oYXNfeWVhciAgICAgICAgICAgICAgICAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggICAgICAgICAgICAgICAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2RhdGVfdGltZV9oYXNfZGF5ICAgICAgICAgICAgICAgICAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAgICAgICAgICAgICAgICAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kICAgICAgICAgICAgICAoY29uc3QgR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7Ci0KLS8qIGZpZWxkIGdldHRlcnMgKi8KLQotZ2ludCAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgICAgICAgICAgICAgICAgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOwotZ2ludCAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoICAgICAgICAgICAgICAgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOwotZ2ludCAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAgICAgICAgICAgICAgICAgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOwotZ2ludCAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgICAgICAgICAgICAgICAgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOwotZ2ludCAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAgICAgICAgICAgICAgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOwotZ2ludCAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAgICAgICAgICAgICAgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOwotZ2ludCAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kICAgICAgICAgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOwotZ2Zsb2F0ICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgICAgKGNvbnN0IEdzdERhdGVUaW1lICogZGF0ZXRpbWUpOwotCi0vKiBjb25zdHJ1Y3RvcnMgKi8KLQotR3N0RGF0ZVRpbWUgKiAgIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lIChnaW50NjQgc2VjcykgR19HTlVDX01BTExPQzsKLQotR3N0RGF0ZVRpbWUgKiAgIGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMgICAoZ2ludDY0IHNlY3MpIEdfR05VQ19NQUxMT0M7Ci0KLUdzdERhdGVUaW1lICogICBnc3RfZGF0ZV90aW1lX25ld19sb2NhbF90aW1lICAgICAgICAgICAgKGdpbnQgeWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbW9udGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgaG91ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbWludXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzZWNvbmRzKSBHX0dOVUNfTUFMTE9DOwotCi1Hc3REYXRlVGltZSAqICAgZ3N0X2RhdGVfdGltZV9uZXdfeSAgICAgICAgICAgICAgICAgICAgIChnaW50IHllYXIpIEdfR05VQ19NQUxMT0M7Ci0KLUdzdERhdGVUaW1lICogICBnc3RfZGF0ZV90aW1lX25ld195bSAgICAgICAgICAgICAgICAgICAgKGdpbnQgeWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbW9udGgpIEdfR05VQ19NQUxMT0M7Ci0KLUdzdERhdGVUaW1lICogICBnc3RfZGF0ZV90aW1lX25ld195bWQgICAgICAgICAgICAgICAgICAgKGdpbnQgeWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbW9udGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRheSkgR19HTlVDX01BTExPQzsKLQotR3N0RGF0ZVRpbWUgKiAgIGdzdF9kYXRlX3RpbWVfbmV3ICAgICAgICAgICAgICAgICAgICAgICAoZ2Zsb2F0IHR6b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCB5ZWFyLCBnaW50IG1vbnRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBkYXksIGdpbnQgaG91ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbWludXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzZWNvbmRzKSBHX0dOVUNfTUFMTE9DOwotCi1Hc3REYXRlVGltZSAqICAgZ3N0X2RhdGVfdGltZV9uZXdfbm93X2xvY2FsX3RpbWUgKHZvaWQpIEdfR05VQ19NQUxMT0M7Ci0KLUdzdERhdGVUaW1lICogICBnc3RfZGF0ZV90aW1lX25ld19ub3dfdXRjICAgICAgICAodm9pZCkgR19HTlVDX01BTExPQzsKLQotCi1nY2hhciAqICAgICAgICAgZ3N0X2RhdGVfdGltZV90b19pc284NjAxX3N0cmluZyAgKEdzdERhdGVUaW1lICogZGF0ZXRpbWUpIEdfR05VQ19NQUxMT0M7Ci1Hc3REYXRlVGltZSAqICAgZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZyAgKGNvbnN0IGdjaGFyICogc3RyaW5nKSBHX0dOVUNfTUFMTE9DOwotCi1HRGF0ZVRpbWUgKiAgICAgZ3N0X2RhdGVfdGltZV90b19nX2RhdGVfdGltZSAgICAgICAoR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7Ci0KLUdzdERhdGVUaW1lICogICBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2dfZGF0ZV90aW1lIChHRGF0ZVRpbWUgKiBkdCk7Ci0KLS8qIHJlZmNvdW50aW5nICovCi0KLUdzdERhdGVUaW1lICogICBnc3RfZGF0ZV90aW1lX3JlZiAgICAgICAgICAgICAgICAoR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfZGF0ZV90aW1lX3VucmVmICAgICAgICAgICAgICAoR3N0RGF0ZVRpbWUgKiBkYXRldGltZSk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0RGF0ZVRpbWUsIGdzdF9kYXRlX3RpbWVfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0RBVEVfVElNRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RkZWJ1Z3V0aWxzLmMgYi9nc3QvZ3N0ZGVidWd1dGlscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTU1YTQ0Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RkZWJ1Z3V0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdGRlYnVndXRpbHMuYzogZGVidWdnaW5nIGFuZCBhbmFseXNpcyB1dGlsbGl0aWVzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qIFRPRE86Ci0gKiBlZGdlIFsgY29uc3RyYWludD1mYWxzZSBdOwotICogICB0aGlzIGNyZWF0ZXMgc3RyYW5nZSBncmFwaHMgKCJtaW5sZW49MCIgaXMgYmV0dGVyKQotICogdHJ5IHB1dGluZyBzcmMvc2luayBnaG9zdHBhZHMgZm9yIGVhY2ggYmluIGludG8gaW52aXNpYmxlIGNsdXN0ZXJzCi0gKgotICogZm9yIG1vcmUgY29tcGFjdCBub2RlcywgdHJ5Ci0gKiAtIGNoYW5naW5nIG5vZGUtc2hhcGUgZnJvbSBib3ggaW50byByZWNvcmQKLSAqIC0gdXNlIGxhYmVscyBsaWtlIDogZWxlbWVudCBbIGxhYmVsPSJ7ZWxlbWVudCB8IDxzcmM+IHNyYyB8IDxzaW5rPiBzaW5rfSJdCi0gKiAtIHBvaW50IHRvIHJlY29yZC1jb25uZWN0b3JzIDogZWxlbWVudDE6c3JjIC0+IGVsZW1lbnQyOnNpbmsKLSAqIC0gd2UgdXNlIGhlYWQvdGFpbCBsYWJlbHMgZm9yIHBhZC1jYXBzIHJpZ2h0IG5vdwotICogICAtIHRoaXMgZG9lcyBub3Qgd29yayB3ZWxsLCBhcyBkb3Qgc2VlbXMgdG8gbm90IGxvb2sgYXQgdGhlaXIgc2l6ZSB3aGVuCi0gKiAgICAgZG9pbmcgdGhlIGxheW91dAotICogICAtIHdlIGNvdWxkIGFkZCB0aGUgY2FwcyB0byB0aGUgcGFkIGl0c2VsZiwgdGhlbiB3ZSBzaG91bGQgdXNlIG9uZSBsaW5lIHBlcgotICogICAgIGNhcHMgKHNpbXBsZSBjYXBzID0gb25lIGxpbmUpCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0ZGVidWd1dGlscy5oIgotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdGJpbi5oIgotI2luY2x1ZGUgImdzdG9iamVjdC5oIgotI2luY2x1ZGUgImdzdGdob3N0cGFkLmgiCi0jaW5jbHVkZSAiZ3N0cGFkLmgiCi0jaW5jbHVkZSAiZ3N0dXRpbHMuaCIKLSNpbmNsdWRlICJnc3R2YWx1ZS5oIgotCi0vKioqIFBJUEVMSU5FIEdSQVBIUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1leHRlcm4gY29uc3QgZ2NoYXIgKnByaXZfZ3N0X2R1bXBfZG90X2RpcjsgICAgICAvKiBOVUxMICovLyogc2V0IGZyb20gZ3N0LmMgKi8KLQotI2RlZmluZSBQQVJBTV9NQVhfTEVOR1RIIDgwCi0KLWNvbnN0IGdjaGFyIHNwYWNlc1tdID0gewotICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIC8qIDMyICovCi0gICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAvKiA2NCAqLwotICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgLyogOTYgKi8KLSAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIC8qIDEyOCAqLwotfTsKLQotI2RlZmluZSBNQUtFX0lOREVOVChpbmRlbnQpIFwKLSAgJnNwYWNlc1tNQVggKHNpemVvZiAoc3BhY2VzKSAtICgxICsgKGluZGVudCkgKiAyKSwgMCldCi0KLXN0YXRpYyBnY2hhciAqCi1kZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdzdE9iamVjdCAqIG9iaikKLXsKLSAgcmV0dXJuIGdfc3RyY2Fub24gKGdfc3RyZHVwX3ByaW50ZiAoIiVzXyVwIiwgR1NUX09CSkVDVF9OQU1FIChvYmopLCBvYmopLAotICAgICAgR19DU0VUX0FfMl9aIEdfQ1NFVF9hXzJfeiBHX0NTRVRfRElHSVRTICJfIiwgJ18nKTsKLX0KLQotc3RhdGljIGdjaGFyICoKLWRlYnVnX2R1bXBfZ2V0X2VsZW1lbnRfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnY2hhciAqc3RhdGVfbmFtZSA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpzdGF0ZV9pY29ucyA9ICJ+MC09PiI7Ci0gIEdzdFN0YXRlIHN0YXRlID0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgcGVuZGluZyA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7Ci0KLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChlbGVtZW50LCAmc3RhdGUsICZwZW5kaW5nLCAwKTsKLSAgaWYgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykgewotICAgIGdib29sZWFuIGlzX2xvY2tlZCA9IGdzdF9lbGVtZW50X2lzX2xvY2tlZF9zdGF0ZSAoZWxlbWVudCk7Ci0gICAgc3RhdGVfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIlxcblslY10lcyIsIHN0YXRlX2ljb25zW3N0YXRlXSwKLSAgICAgICAgKGlzX2xvY2tlZCA/ICIobG9ja2VkKSIgOiAiIikpOwotICB9IGVsc2UgewotICAgIHN0YXRlX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJcXG5bJWNdIC0+IFslY10iLCBzdGF0ZV9pY29uc1tzdGF0ZV0sCi0gICAgICAgIHN0YXRlX2ljb25zW3BlbmRpbmddKTsKLSAgfQotICByZXR1cm4gc3RhdGVfbmFtZTsKLX0KLQotc3RhdGljIGdjaGFyICoKLWRlYnVnX2R1bXBfZ2V0X29iamVjdF9wYXJhbXMgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscywgY29uc3QgY2hhciAqY29uc3QgKmlnbm9yZWRfcHJvcG5hbWVzKQotewotICBnY2hhciAqcGFyYW1fbmFtZSA9IE5VTEw7Ci0gIEdQYXJhbVNwZWMgKipwcm9wZXJ0aWVzLCAqcHJvcGVydHk7Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKLSAgZ3VpbnQgaSwgbnVtYmVyX29mX3Byb3BlcnRpZXM7Ci0gIGdjaGFyICp0bXAsICp2YWx1ZV9zdHI7Ci0gIGNvbnN0IGdjaGFyICplbGxpcHNlczsKLQotICAvKiBnZXQgcGFyYW1zcGVjcyBhbmQgc2hvdyBub24tZGVmYXVsdCBwcm9wZXJ0aWVzICovCi0gIHByb3BlcnRpZXMgPQotICAgICAgZ19vYmplY3RfY2xhc3NfbGlzdF9wcm9wZXJ0aWVzIChHX09CSkVDVF9HRVRfQ0xBU1MgKG9iamVjdCksCi0gICAgICAmbnVtYmVyX29mX3Byb3BlcnRpZXMpOwotICBpZiAocHJvcGVydGllcykgewotICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfcHJvcGVydGllczsgaSsrKSB7Ci0gICAgICBnaW50IGo7Ci0gICAgICBnYm9vbGVhbiBpZ25vcmUgPSBGQUxTRTsKLSAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKLQotICAgICAgLyogc2tpcCBzb21lIHByb3BlcnRpZXMgKi8KLSAgICAgIGlmICghKHByb3BlcnR5LT5mbGFncyAmIEdfUEFSQU1fUkVBREFCTEUpKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGlmICghc3RyY21wIChwcm9wZXJ0eS0+bmFtZSwgIm5hbWUiKSkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGlmIChpZ25vcmVkX3Byb3BuYW1lcykKLSAgICAgICAgZm9yIChqID0gMDsgaWdub3JlZF9wcm9wbmFtZXNbal07IGorKykKLSAgICAgICAgICBpZiAoIWdfc3RyY21wMCAoaWdub3JlZF9wcm9wbmFtZXNbal0sIHByb3BlcnR5LT5uYW1lKSkKLSAgICAgICAgICAgIGlnbm9yZSA9IFRSVUU7Ci0KLSAgICAgIGlmIChpZ25vcmUpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgcHJvcGVydHktPnZhbHVlX3R5cGUpOwotICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAob2JqZWN0KSwgcHJvcGVydHktPm5hbWUsICZ2YWx1ZSk7Ci0gICAgICBpZiAoIShnX3BhcmFtX3ZhbHVlX2RlZmF1bHRzIChwcm9wZXJ0eSwgJnZhbHVlKSkpIHsKLSAgICAgICAgLyogd2UgbmVlZCB0byBzZXJpYWxpc2UgZW51bXMgYW5kIGZsYWdzIG91cnNlbHZlcyB0byBtYWtlIHN1cmUgdGhlCi0gICAgICAgICAqIGVudW0vZmxhZyBuaWNrIGlzIHVzZWQgYW5kIG5vdCB0aGUgZW51bS9mbGFnIG5hbWUsIHdoaWNoIHdvdWxkIGJlIHRoZQotICAgICAgICAgKiBDIGhlYWRlciBlbnVtL2ZsYWcgZm9yIHB1YmxpYyBlbnVtcy9mbGFncywgYnV0IGZvciBlbGVtZW50LXNwZWNpZmljCi0gICAgICAgICAqIGVudW1zL2ZsYWdzIHdlIGFidXNlIHRoZSBuYW1lIGZpZWxkIGZvciB0aGUgcHJvcGVydHkgZGVzY3JpcHRpb24sCi0gICAgICAgICAqIGFuZCB3ZSBkb24ndCB3YW50IHRvIHByaW50IHRoYXQgaW4gdGhlIGRvdCBmaWxlLiBUaGUgbmljayB3aWxsCi0gICAgICAgICAqIGFsd2F5cyB3b3JrLCBhbmQgaXQncyBhbHNvIHNob3J0ZXIuICovCi0gICAgICAgIGlmIChHX1ZBTFVFX0hPTERTX0VOVU0gKCZ2YWx1ZSkpIHsKLSAgICAgICAgICBHRW51bUNsYXNzICplX2NsYXNzID0gZ190eXBlX2NsYXNzX3JlZiAoR19WQUxVRV9UWVBFICgmdmFsdWUpKTsKLSAgICAgICAgICBnaW50IGlkeCwgZV92YWw7Ci0KLSAgICAgICAgICB0bXAgPSBOVUxMOwotICAgICAgICAgIGVfdmFsID0gZ192YWx1ZV9nZXRfZW51bSAoJnZhbHVlKTsKLSAgICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGVfY2xhc3MtPm5fdmFsdWVzOyArK2lkeCkgewotICAgICAgICAgICAgaWYgKGVfY2xhc3MtPnZhbHVlc1tpZHhdLnZhbHVlID09IGVfdmFsKSB7Ci0gICAgICAgICAgICAgIHRtcCA9IGdfc3RyZHVwIChlX2NsYXNzLT52YWx1ZXNbaWR4XS52YWx1ZV9uaWNrKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgewotICAgICAgICAgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0ZMQUdTICgmdmFsdWUpKSB7Ci0gICAgICAgICAgR0ZsYWdzQ2xhc3MgKmZfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKCZ2YWx1ZSkpOwotICAgICAgICAgIEdGbGFnc1ZhbHVlICp2YWxzID0gZl9jbGFzcy0+dmFsdWVzOwotICAgICAgICAgIEdTdHJpbmcgKnMgPSBOVUxMOwotICAgICAgICAgIGd1aW50IGlkeCwgZmxhZ3NfbGVmdDsKLQotICAgICAgICAgIHMgPSBnX3N0cmluZ19uZXcgKE5VTEwpOwotCi0gICAgICAgICAgLyogd2UgYXNzdW1lIHRoZSB2YWx1ZXMgYXJlIHNvcnRlZCBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IHZhbHVlICovCi0gICAgICAgICAgZmxhZ3NfbGVmdCA9IGdfdmFsdWVfZ2V0X2ZsYWdzICgmdmFsdWUpOwotICAgICAgICAgIGlkeCA9IGZfY2xhc3MtPm5fdmFsdWVzOwotICAgICAgICAgIHdoaWxlIChpZHggPiAwKSB7Ci0gICAgICAgICAgICAtLWlkeDsKLSAgICAgICAgICAgIGlmICh2YWxzW2lkeF0udmFsdWUgIT0gMAotICAgICAgICAgICAgICAgICYmIChmbGFnc19sZWZ0ICYgdmFsc1tpZHhdLnZhbHVlKSA9PSB2YWxzW2lkeF0udmFsdWUpIHsKLSAgICAgICAgICAgICAgaWYgKHMtPmxlbiA+IDApCi0gICAgICAgICAgICAgICAgZ19zdHJpbmdfcHJlcGVuZF9jIChzLCAnKycpOwotICAgICAgICAgICAgICBnX3N0cmluZ19wcmVwZW5kIChzLCB2YWxzW2lkeF0udmFsdWVfbmljayk7Ci0gICAgICAgICAgICAgIGZsYWdzX2xlZnQgLT0gdmFsc1tpZHhdLnZhbHVlOwotICAgICAgICAgICAgICBpZiAoZmxhZ3NfbGVmdCA9PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChzLT5sZW4gPT0gMCkKLSAgICAgICAgICAgIGdfc3RyaW5nX2Fzc2lnbiAocywgIihub25lKSIpOwotCi0gICAgICAgICAgdG1wID0gZ19zdHJpbmdfZnJlZSAocywgRkFMU0UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRtcCA9IGdfc3RyZHVwX3ZhbHVlX2NvbnRlbnRzICgmdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHZhbHVlX3N0ciA9IGdfc3RyZXNjYXBlICh0bXAsIE5VTEwpOwotICAgICAgICBnX2ZyZWUgKHRtcCk7Ci0KLSAgICAgICAgLyogdG9vIGxvbmcsIGVsbGlwc2l6ZSAqLwotICAgICAgICBpZiAoIShkZXRhaWxzICYgR1NUX0RFQlVHX0dSQVBIX1NIT1dfRlVMTF9QQVJBTVMpICYmCi0gICAgICAgICAgICBzdHJsZW4gKHZhbHVlX3N0cikgPiBQQVJBTV9NQVhfTEVOR1RIKQotICAgICAgICAgIGVsbGlwc2VzID0gIuKApiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBlbGxpcHNlcyA9ICIiOwotCi0gICAgICAgIGlmIChwYXJhbV9uYW1lKQotICAgICAgICAgIHRtcCA9IHBhcmFtX25hbWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0bXAgPSAoY2hhciAqKSAiIjsKLQotICAgICAgICBpZiAoZGV0YWlscyAmIEdTVF9ERUJVR19HUkFQSF9TSE9XX0ZVTExfUEFSQU1TKSB7Ci0gICAgICAgICAgcGFyYW1fbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzXFxuJXM9JXMiLCB0bXAsIHByb3BlcnR5LT5uYW1lLAotICAgICAgICAgICAgICB2YWx1ZV9zdHIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHBhcmFtX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIlc1xcbiVzPSUuIgotICAgICAgICAgICAgICBHX1NUUklOR0lGWSAoUEFSQU1fTUFYX0xFTkdUSCkgInMlcyIsIHRtcCwgcHJvcGVydHktPm5hbWUsCi0gICAgICAgICAgICAgIHZhbHVlX3N0ciwgZWxsaXBzZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRtcFswXSAhPSAnXDAnKQotICAgICAgICAgIGdfZnJlZSAodG1wKTsKLQotICAgICAgICBnX2ZyZWUgKHZhbHVlX3N0cik7Ci0gICAgICB9Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotICAgIH0KLSAgICBnX2ZyZWUgKHByb3BlcnRpZXMpOwotICB9Ci0gIHJldHVybiBwYXJhbV9uYW1lOwotfQotCi1zdGF0aWMgdm9pZAotZGVidWdfZHVtcF9wYWQgKEdzdFBhZCAqIHBhZCwgY29uc3QgZ2NoYXIgKiBjb2xvcl9uYW1lLAotICAgIGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLCBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzLCBHU3RyaW5nICogc3RyLAotICAgIGNvbnN0IGdpbnQgaW5kZW50KQotewotICBHc3RQYWRUZW1wbGF0ZSAqcGFkX3RlbXBsOwotICBHc3RQYWRQcmVzZW5jZSBwcmVzZW5jZTsKLSAgZ2NoYXIgKnBhZF9uYW1lLCAqcGFyYW1fbmFtZSA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpzdHlsZV9uYW1lOwotICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaWdub3JlX3Byb3BuYW1lc1tdID0KLSAgICAgIHsgInBhcmVudCIsICJkaXJlY3Rpb24iLCAidGVtcGxhdGUiLAotICAgICJjYXBzIiwgTlVMTAotICB9OwotICBjb25zdCBnY2hhciAqc3BjID0gTUFLRV9JTkRFTlQgKGluZGVudCk7Ci0KLSAgcGFkX25hbWUgPSBkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdTVF9PQkpFQ1QgKHBhZCkpOwotCi0gIC8qIHBhZCBhdmFpbGFiaWxpdHkgKi8KLSAgc3R5bGVfbmFtZSA9ICJmaWxsZWQsc29saWQiOwotICBpZiAoKHBhZF90ZW1wbCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZSAocGFkKSkpIHsKLSAgICBwcmVzZW5jZSA9IEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UgKHBhZF90ZW1wbCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkX3RlbXBsKTsKLSAgICBpZiAocHJlc2VuY2UgPT0gR1NUX1BBRF9TT01FVElNRVMpIHsKLSAgICAgIHN0eWxlX25hbWUgPSAiZmlsbGVkLGRvdHRlZCI7Ci0gICAgfSBlbHNlIGlmIChwcmVzZW5jZSA9PSBHU1RfUEFEX1JFUVVFU1QpIHsKLSAgICAgIHN0eWxlX25hbWUgPSAiZmlsbGVkLGRhc2hlZCI7Ci0gICAgfQotICB9Ci0KLSAgcGFyYW1fbmFtZSA9Ci0gICAgICBkZWJ1Z19kdW1wX2dldF9vYmplY3RfcGFyYW1zIChHX09CSkVDVCAocGFkKSwgZGV0YWlscywgaWdub3JlX3Byb3BuYW1lcyk7Ci0gIGlmIChkZXRhaWxzICYgR1NUX0RFQlVHX0dSQVBIX1NIT1dfU1RBVEVTKSB7Ci0gICAgZ2NoYXIgcGFkX2ZsYWdzWzRdOwotICAgIGNvbnN0IGdjaGFyICphY3RpdmF0aW9uX21vZGUgPSAiLT48IjsKLSAgICBjb25zdCBnY2hhciAqdGFza19tb2RlID0gIiI7Ci0gICAgR3N0VGFzayAqdGFzazsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgICB0YXNrID0gR1NUX1BBRF9UQVNLIChwYWQpOwotICAgIGlmICh0YXNrKSB7Ci0gICAgICBzd2l0Y2ggKGdzdF90YXNrX2dldF9zdGF0ZSAodGFzaykpIHsKLSAgICAgICAgY2FzZSBHU1RfVEFTS19TVEFSVEVEOgotICAgICAgICAgIHRhc2tfbW9kZSA9ICJbVF0iOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9UQVNLX1BBVVNFRDoKLSAgICAgICAgICB0YXNrX21vZGUgPSAiW3RdIjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAvKiBJbnZhbGlkIHRhc2sgc3RhdGUsIGlnbm9yaW5nICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gICAgLyogY2hlY2sgaWYgcGFkIGZsYWdzICovCi0gICAgcGFkX2ZsYWdzWzBdID0KLSAgICAgICAgR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfQkxPQ0tFRCkgPyAnQicgOiAnYic7Ci0gICAgcGFkX2ZsYWdzWzFdID0KLSAgICAgICAgR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfRkxVU0hJTkcpID8gJ0YnIDogJ2YnOwotICAgIHBhZF9mbGFnc1syXSA9Ci0gICAgICAgIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0JMT0NLSU5HKSA/ICdCJyA6ICdiJzsKLSAgICBwYWRfZmxhZ3NbM10gPSAnXDAnOwotCi0gICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLAotICAgICAgICAiJXMgICVzXyVzIFtjb2xvcj1ibGFjaywgZmlsbGNvbG9yPVwiJXNcIiwgbGFiZWw9XCIlcyVzXFxuWyVjXVslc10lc1wiLCBoZWlnaHQ9XCIwLjJcIiwgc3R5bGU9XCIlc1wiXTtcbiIsCi0gICAgICAgIHNwYywgZWxlbWVudF9uYW1lLCBwYWRfbmFtZSwgY29sb3JfbmFtZSwgR1NUX09CSkVDVF9OQU1FIChwYWQpLAotICAgICAgICAocGFyYW1fbmFtZSA/IHBhcmFtX25hbWUgOiAiIiksCi0gICAgICAgIGFjdGl2YXRpb25fbW9kZVtwYWQtPm1vZGVdLCBwYWRfZmxhZ3MsIHRhc2tfbW9kZSwgc3R5bGVfbmFtZSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLAotICAgICAgICAiJXMgICVzXyVzIFtjb2xvcj1ibGFjaywgZmlsbGNvbG9yPVwiJXNcIiwgbGFiZWw9XCIlcyVzXCIsIGhlaWdodD1cIjAuMlwiLCBzdHlsZT1cIiVzXCJdO1xuIiwKLSAgICAgICAgc3BjLCBlbGVtZW50X25hbWUsIHBhZF9uYW1lLCBjb2xvcl9uYW1lLCBHU1RfT0JKRUNUX05BTUUgKHBhZCksCi0gICAgICAgIChwYXJhbV9uYW1lID8gcGFyYW1fbmFtZSA6ICIiKSwgc3R5bGVfbmFtZSk7Ci0gIH0KLQotICBnX2ZyZWUgKHBhcmFtX25hbWUpOwotICBnX2ZyZWUgKHBhZF9uYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlYnVnX2R1bXBfZWxlbWVudF9wYWQgKEdzdFBhZCAqIHBhZCwgR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscywgR1N0cmluZyAqIHN0ciwgY29uc3QgZ2ludCBpbmRlbnQpCi17Ci0gIEdzdEVsZW1lbnQgKnRhcmdldF9lbGVtZW50OwotICBHc3RQYWQgKnRhcmdldF9wYWQsICp0bXBfcGFkOwotICBHc3RQYWREaXJlY3Rpb24gZGlyOwotICBnY2hhciAqZWxlbWVudF9uYW1lOwotICBnY2hhciAqdGFyZ2V0X2VsZW1lbnRfbmFtZTsKLSAgY29uc3QgZ2NoYXIgKmNvbG9yX25hbWU7Ci0KLSAgZGlyID0gZ3N0X3BhZF9nZXRfZGlyZWN0aW9uIChwYWQpOwotICBlbGVtZW50X25hbWUgPSBkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKLSAgaWYgKEdTVF9JU19HSE9TVF9QQUQgKHBhZCkpIHsKLSAgICBjb2xvcl9uYW1lID0KLSAgICAgICAgKGRpciA9PSBHU1RfUEFEX1NSQykgPyAiI2ZmZGRkZCIgOiAoKGRpciA9PQotICAgICAgICAgICAgR1NUX1BBRF9TSU5LKSA/ICIjZGRkZGZmIiA6ICIjZmZmZmZmIik7Ci0gICAgLyogb3V0cHV0IHRhcmdldC1wYWQgc28gdGhhdCBpdCBiZWxvbmdzIHRvIHRoaXMgZWxlbWVudCAqLwotICAgIGlmICgodG1wX3BhZCA9IGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAocGFkKSkpKSB7Ci0gICAgICBpZiAoKHRhcmdldF9wYWQgPSBnc3RfcGFkX2dldF9wZWVyICh0bXBfcGFkKSkpIHsKLSAgICAgICAgZ2NoYXIgKnBhZF9uYW1lLCAqdGFyZ2V0X3BhZF9uYW1lOwotICAgICAgICBjb25zdCBnY2hhciAqc3BjID0gTUFLRV9JTkRFTlQgKGluZGVudCk7Ci0KLSAgICAgICAgaWYgKCh0YXJnZXRfZWxlbWVudCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50ICh0YXJnZXRfcGFkKSkpIHsKLSAgICAgICAgICB0YXJnZXRfZWxlbWVudF9uYW1lID0KLSAgICAgICAgICAgICAgZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUICh0YXJnZXRfZWxlbWVudCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRhcmdldF9lbGVtZW50X25hbWUgPSBnX3N0cmR1cCAoIiIpOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnX2R1bXBfcGFkICh0YXJnZXRfcGFkLCBjb2xvcl9uYW1lLCB0YXJnZXRfZWxlbWVudF9uYW1lLCBkZXRhaWxzLAotICAgICAgICAgICAgc3RyLCBpbmRlbnQpOwotICAgICAgICAvKiBzcmMgZ2hvc3RwYWQgcmVsYXRpb25zaGlwICovCi0gICAgICAgIHBhZF9uYW1lID0gZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUIChwYWQpKTsKLSAgICAgICAgdGFyZ2V0X3BhZF9uYW1lID0gZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUICh0YXJnZXRfcGFkKSk7Ci0gICAgICAgIGlmIChkaXIgPT0gR1NUX1BBRF9TUkMpIHsKLSAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsCi0gICAgICAgICAgICAgICIlcyVzXyVzIC0+ICVzXyVzIFtzdHlsZT1kYXNoZWQsIG1pbmxlbj0wXVxuIiwgc3BjLAotICAgICAgICAgICAgICB0YXJnZXRfZWxlbWVudF9uYW1lLCB0YXJnZXRfcGFkX25hbWUsIGVsZW1lbnRfbmFtZSwgcGFkX25hbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwKLSAgICAgICAgICAgICAgIiVzJXNfJXMgLT4gJXNfJXMgW3N0eWxlPWRhc2hlZCwgbWlubGVuPTBdXG4iLCBzcGMsCi0gICAgICAgICAgICAgIGVsZW1lbnRfbmFtZSwgcGFkX25hbWUsIHRhcmdldF9lbGVtZW50X25hbWUsIHRhcmdldF9wYWRfbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19mcmVlICh0YXJnZXRfcGFkX25hbWUpOwotICAgICAgICBnX2ZyZWUgKHRhcmdldF9lbGVtZW50X25hbWUpOwotICAgICAgICBpZiAodGFyZ2V0X2VsZW1lbnQpCi0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0X2VsZW1lbnQpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXRfcGFkKTsKLSAgICAgICAgZ19mcmVlIChwYWRfbmFtZSk7Ci0gICAgICB9Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmICh0bXBfcGFkKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgY29sb3JfbmFtZSA9Ci0gICAgICAgIChkaXIgPT0gR1NUX1BBRF9TUkMpID8gIiNmZmFhYWEiIDogKChkaXIgPT0KLSAgICAgICAgICAgIEdTVF9QQURfU0lOSykgPyAiI2FhYWFmZiIgOiAiI2NjY2NjYyIpOwotICB9Ci0gIC8qIHBhZHMgKi8KLSAgZGVidWdfZHVtcF9wYWQgKHBhZCwgY29sb3JfbmFtZSwgZWxlbWVudF9uYW1lLCBkZXRhaWxzLCBzdHIsIGluZGVudCk7Ci0gIGdfZnJlZSAoZWxlbWVudF9uYW1lKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zdHJpbmdfYXBwZW5kX2ZpZWxkIChHUXVhcmsgZmllbGQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBncG9pbnRlciBwdHIpCi17Ci0gIEdTdHJpbmcgKnN0ciA9IChHU3RyaW5nICopIHB0cjsKLSAgZ2NoYXIgKnZhbHVlX3N0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKHZhbHVlKTsKLSAgZ2NoYXIgKmVzY192YWx1ZV9zdHI7Ci0KLSAgaWYgKHZhbHVlX3N0ciA9PSBOVUxMKSB7Ci0gICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAiICAlMThzOiBOVUxMXFxsIiwgZ19xdWFya190b19zdHJpbmcgKGZpZWxkKSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBzb21lIGVudW1zIGNhbiBiZWNvbWUgcmVhbGx5IGxvbmcgKi8KLSAgaWYgKHN0cmxlbiAodmFsdWVfc3RyKSA+IDI1KSB7Ci0gICAgZ2ludCBwb3MgPSAyNDsKLQotICAgIC8qIHRydW5jYXRlICovCi0gICAgdmFsdWVfc3RyWzI1XSA9ICdcMCc7Ci0KLSAgICAvKiBtaXJyb3IgYW55IGJyYWNrZXRzIGFuZCBxdW90ZXMgKi8KLSAgICBpZiAodmFsdWVfc3RyWzBdID09ICc8JykKLSAgICAgIHZhbHVlX3N0cltwb3MtLV0gPSAnPic7Ci0gICAgaWYgKHZhbHVlX3N0clswXSA9PSAnWycpCi0gICAgICB2YWx1ZV9zdHJbcG9zLS1dID0gJ10nOwotICAgIGlmICh2YWx1ZV9zdHJbMF0gPT0gJygnKQotICAgICAgdmFsdWVfc3RyW3Bvcy0tXSA9ICcpJzsKLSAgICBpZiAodmFsdWVfc3RyWzBdID09ICd7JykKLSAgICAgIHZhbHVlX3N0cltwb3MtLV0gPSAnfSc7Ci0gICAgaWYgKHZhbHVlX3N0clswXSA9PSAnIicpCi0gICAgICB2YWx1ZV9zdHJbcG9zLS1dID0gJyInOwotICAgIGlmIChwb3MgIT0gMjQpCi0gICAgICB2YWx1ZV9zdHJbcG9zLS1dID0gJyAnOwotICAgIC8qIGVsaXBwc2l6ZSAqLwotICAgIHZhbHVlX3N0cltwb3MtLV0gPSAnLic7Ci0gICAgdmFsdWVfc3RyW3Bvcy0tXSA9ICcuJzsKLSAgICB2YWx1ZV9zdHJbcG9zLS1dID0gJy4nOwotICB9Ci0gIGVzY192YWx1ZV9zdHIgPSBnX3N0cmVzY2FwZSAodmFsdWVfc3RyLCBOVUxMKTsKLQotICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIgICUxOHM6ICVzXFxsIiwgZ19xdWFya190b19zdHJpbmcgKGZpZWxkKSwKLSAgICAgIGVzY192YWx1ZV9zdHIpOwotCi0gIGdfZnJlZSAodmFsdWVfc3RyKTsKLSAgZ19mcmVlIChlc2NfdmFsdWVfc3RyKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1kZWJ1Z19kdW1wX2Rlc2NyaWJlX2NhcHMgKEdzdENhcHMgKiBjYXBzLCBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzKQotewotICBnY2hhciAqbWVkaWEgPSBOVUxMOwotCi0gIGlmIChkZXRhaWxzICYgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQ0FQU19ERVRBSUxTKSB7Ci0KLSAgICBpZiAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSB8fCBnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICAgIG1lZGlhID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICBHU3RyaW5nICpzdHIgPSBOVUxMOwotICAgICAgZ3VpbnQgaTsKLSAgICAgIGd1aW50IHNsZW4gPSAwOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOyBpKyspIHsKLSAgICAgICAgc2xlbiArPSAyNSArCi0gICAgICAgICAgICBTVFJVQ1RVUkVfRVNUSU1BVEVEX1NUUklOR19MRU4gKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpKTsKLSAgICAgIH0KLQotICAgICAgc3RyID0gZ19zdHJpbmdfc2l6ZWRfbmV3IChzbGVuKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7IGkrKykgewotICAgICAgICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzID0gX19nc3RfY2Fwc19nZXRfZmVhdHVyZXNfdW5jaGVja2VkIChjYXBzLCBpKTsKLSAgICAgICAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKLQotICAgICAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKSk7Ci0KLSAgICAgICAgaWYgKGZlYXR1cmVzICYmIChnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGZlYXR1cmVzKQotICAgICAgICAgICAgICAgIHx8ICFnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbCAoZmVhdHVyZXMsCi0gICAgICAgICAgICAgICAgICAgIEdTVF9DQVBTX0ZFQVRVUkVTX01FTU9SWV9TWVNURU1fTUVNT1JZKSkpIHsKLSAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfYyAoc3RyLCAnKCcpOwotICAgICAgICAgIHByaXZfZ3N0X2NhcHNfZmVhdHVyZXNfYXBwZW5kX3RvX2dzdHJpbmcgKGZlYXR1cmVzLCBzdHIpOwotICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9jIChzdHIsICcpJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kIChzdHIsICJcXGwiKTsKLQotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKHN0cnVjdHVyZSwgc3RyaW5nX2FwcGVuZF9maWVsZCwgKGdwb2ludGVyKSBzdHIpOwotICAgICAgfQotCi0gICAgICBtZWRpYSA9IGdfc3RyaW5nX2ZyZWUgKHN0ciwgRkFMU0UpOwotICAgIH0KLQotICB9IGVsc2UgewotICAgIGlmIChHU1RfQ0FQU19JU19TSU1QTEUgKGNhcHMpKQotICAgICAgbWVkaWEgPQotICAgICAgICAgIGdfc3RyZHVwIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKSkpOwotICAgIGVsc2UKLSAgICAgIG1lZGlhID0gZ19zdHJkdXAgKCIqIik7Ci0gIH0KLSAgcmV0dXJuIG1lZGlhOwotfQotCi1zdGF0aWMgdm9pZAotZGVidWdfZHVtcF9lbGVtZW50X3BhZF9saW5rIChHc3RQYWQgKiBwYWQsIEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsIEdTdHJpbmcgKiBzdHIsIGNvbnN0IGdpbnQgaW5kZW50KQotewotICBHc3RFbGVtZW50ICpwZWVyX2VsZW1lbnQ7Ci0gIEdzdFBhZCAqcGVlcl9wYWQ7Ci0gIEdzdENhcHMgKmNhcHMsICpwZWVyX2NhcHM7Ci0gIGdjaGFyICptZWRpYSA9IE5VTEw7Ci0gIGdjaGFyICptZWRpYV9zcmMgPSBOVUxMLCAqbWVkaWFfc2luayA9IE5VTEw7Ci0gIGdjaGFyICpwYWRfbmFtZSwgKmVsZW1lbnRfbmFtZTsKLSAgZ2NoYXIgKnBlZXJfcGFkX25hbWUsICpwZWVyX2VsZW1lbnRfbmFtZTsKLSAgY29uc3QgZ2NoYXIgKnNwYyA9IE1BS0VfSU5ERU5UIChpbmRlbnQpOwotCi0gIGlmICgocGVlcl9wYWQgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpKSkgewotICAgIGlmICgoZGV0YWlscyAmIEdTVF9ERUJVR19HUkFQSF9TSE9XX01FRElBX1RZUEUpIHx8Ci0gICAgICAgIChkZXRhaWxzICYgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQ0FQU19ERVRBSUxTKQotICAgICAgICApIHsKLSAgICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7Ci0gICAgICBpZiAoIWNhcHMpCi0gICAgICAgIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgICAgIHBlZXJfY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGVlcl9wYWQpOwotICAgICAgaWYgKCFwZWVyX2NhcHMpCi0gICAgICAgIHBlZXJfY2FwcyA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwZWVyX3BhZCk7Ci0KLSAgICAgIG1lZGlhID0gZGVidWdfZHVtcF9kZXNjcmliZV9jYXBzIChjYXBzLCBkZXRhaWxzKTsKLSAgICAgIC8qIGNoZWNrIGlmIHBlZXIgY2FwcyBhcmUgZGlmZmVyZW50ICovCi0gICAgICBpZiAocGVlcl9jYXBzICYmICFnc3RfY2Fwc19pc19lcXVhbCAoY2FwcywgcGVlcl9jYXBzKSkgewotICAgICAgICBnY2hhciAqdG1wOwotCi0gICAgICAgIHRtcCA9IGRlYnVnX2R1bXBfZGVzY3JpYmVfY2FwcyAocGVlcl9jYXBzLCBkZXRhaWxzKTsKLSAgICAgICAgaWYgKGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkKSA9PSBHU1RfUEFEX1NSQykgewotICAgICAgICAgIG1lZGlhX3NyYyA9IG1lZGlhOwotICAgICAgICAgIG1lZGlhX3NpbmsgPSB0bXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbWVkaWFfc3JjID0gdG1wOwotICAgICAgICAgIG1lZGlhX3NpbmsgPSBtZWRpYTsKLSAgICAgICAgfQotICAgICAgICBtZWRpYSA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBnc3RfY2Fwc191bnJlZiAocGVlcl9jYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICB9Ci0KLSAgICBwYWRfbmFtZSA9IGRlYnVnX2R1bXBfbWFrZV9vYmplY3RfbmFtZSAoR1NUX09CSkVDVCAocGFkKSk7Ci0gICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgIGVsZW1lbnRfbmFtZSA9IGRlYnVnX2R1bXBfbWFrZV9vYmplY3RfbmFtZSAoR1NUX09CSkVDVCAoZWxlbWVudCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBlbGVtZW50X25hbWUgPSBnX3N0cmR1cCAoIiIpOwotICAgIH0KLSAgICBwZWVyX3BhZF9uYW1lID0gZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUIChwZWVyX3BhZCkpOwotICAgIGlmICgocGVlcl9lbGVtZW50ID0gZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKHBlZXJfcGFkKSkpIHsKLSAgICAgIHBlZXJfZWxlbWVudF9uYW1lID0KLSAgICAgICAgICBkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdTVF9PQkpFQ1QgKHBlZXJfZWxlbWVudCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwZWVyX2VsZW1lbnRfbmFtZSA9IGdfc3RyZHVwICgiIik7Ci0gICAgfQotCi0gICAgLyogcGFkIGxpbmsgKi8KLSAgICBpZiAobWVkaWEpIHsKLSAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIiVzJXNfJXMgLT4gJXNfJXMgW2xhYmVsPVwiJXNcIl1cbiIsIHNwYywKLSAgICAgICAgICBlbGVtZW50X25hbWUsIHBhZF9uYW1lLCBwZWVyX2VsZW1lbnRfbmFtZSwgcGVlcl9wYWRfbmFtZSwgbWVkaWEpOwotICAgICAgZ19mcmVlIChtZWRpYSk7Ci0gICAgfSBlbHNlIGlmIChtZWRpYV9zcmMgJiYgbWVkaWFfc2luaykgewotICAgICAgLyogZG90IGhhcyBzb21lIGlzc3VlcyB3aXRoIHBsYWNlbWVudCBvZiBoZWFkIGFuZCB0YWlsbGFiZWxzLAotICAgICAgICogd2UgbmVlZCBhbiBlbXB0eSBsYWJlbCB0byBtYWtlIHNwYWNlICovCi0gICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsCi0gICAgICAgICAgIiVzJXNfJXMgLT4gJXNfJXMgW2xhYmVsZGlzdGFuY2U9XCIxMFwiLCBsYWJlbGFuZ2xlPVwiMFwiLCAiCi0gICAgICAgICAgImxhYmVsPVwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgIgotICAgICAgICAgICJ0YWlsbGFiZWw9XCIlc1wiLCBoZWFkbGFiZWw9XCIlc1wiXVxuIiwKLSAgICAgICAgICBzcGMsIGVsZW1lbnRfbmFtZSwgcGFkX25hbWUsIHBlZXJfZWxlbWVudF9uYW1lLCBwZWVyX3BhZF9uYW1lLAotICAgICAgICAgIG1lZGlhX3NyYywgbWVkaWFfc2luayk7Ci0gICAgICBnX2ZyZWUgKG1lZGlhX3NyYyk7Ci0gICAgICBnX2ZyZWUgKG1lZGlhX3NpbmspOwotICAgIH0gZWxzZSB7Ci0gICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlcyVzXyVzIC0+ICVzXyVzXG4iLCBzcGMsCi0gICAgICAgICAgZWxlbWVudF9uYW1lLCBwYWRfbmFtZSwgcGVlcl9lbGVtZW50X25hbWUsIHBlZXJfcGFkX25hbWUpOwotICAgIH0KLQotICAgIGdfZnJlZSAocGFkX25hbWUpOwotICAgIGdfZnJlZSAoZWxlbWVudF9uYW1lKTsKLSAgICBnX2ZyZWUgKHBlZXJfcGFkX25hbWUpOwotICAgIGdfZnJlZSAocGVlcl9lbGVtZW50X25hbWUpOwotICAgIGlmIChwZWVyX2VsZW1lbnQpCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyX2VsZW1lbnQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXJfcGFkKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVidWdfZHVtcF9lbGVtZW50X3BhZHMgKEdzdEl0ZXJhdG9yICogcGFkX2l0ZXIsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscywgR1N0cmluZyAqIHN0ciwKLSAgICBjb25zdCBnaW50IGluZGVudCwgZ3VpbnQgKiBudW1fcGFkcywgZ2NoYXIgKiBjbHVzdGVyX25hbWUsCi0gICAgZ2NoYXIgKiogZmlyc3RfcGFkX25hbWUpCi17Ci0gIEdWYWx1ZSBpdGVtID0geyAwLCB9OwotICBnYm9vbGVhbiBwYWRzX2RvbmU7Ci0gIGNvbnN0IGdjaGFyICpzcGMgPSBNQUtFX0lOREVOVCAoaW5kZW50KTsKLQotICBwYWRzX2RvbmUgPSBGQUxTRTsKLSAgd2hpbGUgKCFwYWRzX2RvbmUpIHsKLSAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChwYWRfaXRlciwgJml0ZW0pKSB7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLSAgICAgICAgcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmaXRlbSk7Ci0gICAgICAgIGlmICghKm51bV9wYWRzKSB7Ci0gICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAiJXNzdWJncmFwaCBjbHVzdGVyXyVzIHtcbiIsIHNwYywKLSAgICAgICAgICAgICAgY2x1c3Rlcl9uYW1lKTsKLSAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlcyAgbGFiZWw9XCJcIjtcbiIsIHNwYyk7Ci0gICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAiJXMgIHN0eWxlPVwiaW52aXNcIjtcbiIsIHNwYyk7Ci0gICAgICAgICAgKCpmaXJzdF9wYWRfbmFtZSkgPSBkZWJ1Z19kdW1wX21ha2Vfb2JqZWN0X25hbWUgKEdTVF9PQkpFQ1QgKHBhZCkpOwotICAgICAgICB9Ci0gICAgICAgIGRlYnVnX2R1bXBfZWxlbWVudF9wYWQgKHBhZCwgZWxlbWVudCwgZGV0YWlscywgc3RyLCBpbmRlbnQpOwotICAgICAgICAoKm51bV9wYWRzKSsrOwotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChwYWRfaXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBwYWRzX2RvbmUgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKCpudW1fcGFkcykgewotICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIiVzfVxuXG4iLCBzcGMpOwotICB9Ci19Ci0KLS8qCi0gKiBkZWJ1Z19kdW1wX2VsZW1lbnQ6Ci0gKiBAYmluOiB0aGUgYmluIHRoYXQgc2hvdWxkIGJlIGFuYWx5emVkCi0gKiBAb3V0OiBmaWxlIHRvIHdyaXRlIHRvCi0gKiBAaW5kZW50OiBsZXZlbCBvZiBncmFwaCBpbmRlbnRhdGlvbgotICoKLSAqIEhlbHBlciBmb3IgZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSgpIHRvIHJlY3Vyc2l2ZWx5IGR1bXAgYSBwaXBlbGluZS4KLSAqLwotc3RhdGljIHZvaWQKLWRlYnVnX2R1bXBfZWxlbWVudCAoR3N0QmluICogYmluLCBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzLAotICAgIEdTdHJpbmcgKiBzdHIsIGNvbnN0IGdpbnQgaW5kZW50KQotewotICBHc3RJdGVyYXRvciAqZWxlbWVudF9pdGVyLCAqcGFkX2l0ZXI7Ci0gIGdib29sZWFuIGVsZW1lbnRzX2RvbmUsIHBhZHNfZG9uZTsKLSAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07Ci0gIEdWYWx1ZSBpdGVtMiA9IHsgMCwgfTsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR3N0UGFkICpwYWQgPSBOVUxMOwotICBndWludCBzcmNfcGFkcywgc2lua19wYWRzOwotICBnY2hhciAqc3JjX3BhZF9uYW1lID0gTlVMTCwgKnNpbmtfcGFkX25hbWUgPSBOVUxMOwotICBnY2hhciAqZWxlbWVudF9uYW1lOwotICBnY2hhciAqc3RhdGVfbmFtZSA9IE5VTEw7Ci0gIGdjaGFyICpwYXJhbV9uYW1lID0gTlVMTDsKLSAgY29uc3QgZ2NoYXIgKnNwYyA9IE1BS0VfSU5ERU5UIChpbmRlbnQpOwotCi0gIGVsZW1lbnRfaXRlciA9IGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cyAoYmluKTsKLSAgZWxlbWVudHNfZG9uZSA9IEZBTFNFOwotICB3aGlsZSAoIWVsZW1lbnRzX2RvbmUpIHsKLSAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChlbGVtZW50X2l0ZXIsICZpdGVtKSkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICAgIGVsZW1lbnQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKCZpdGVtKTsKLSAgICAgICAgZWxlbWVudF9uYW1lID0gZGVidWdfZHVtcF9tYWtlX29iamVjdF9uYW1lIChHU1RfT0JKRUNUIChlbGVtZW50KSk7Ci0KLSAgICAgICAgaWYgKGRldGFpbHMgJiBHU1RfREVCVUdfR1JBUEhfU0hPV19TVEFURVMpIHsKLSAgICAgICAgICBzdGF0ZV9uYW1lID0gZGVidWdfZHVtcF9nZXRfZWxlbWVudF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGVsZW1lbnQpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGV0YWlscyAmIEdTVF9ERUJVR19HUkFQSF9TSE9XX05PTl9ERUZBVUxUX1BBUkFNUykgewotICAgICAgICAgIHBhcmFtX25hbWUgPSBkZWJ1Z19kdW1wX2dldF9vYmplY3RfcGFyYW1zIChHX09CSkVDVCAoZWxlbWVudCksCi0gICAgICAgICAgICAgIGRldGFpbHMsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIC8qIGVsZW1lbnRzICovCi0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIiVzc3ViZ3JhcGggY2x1c3Rlcl8lcyB7XG4iLCBzcGMsCi0gICAgICAgICAgICBlbGVtZW50X25hbWUpOwotICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlcyAgZm9udG5hbWU9XCJCaXRzdHJlYW0gVmVyYSBTYW5zXCI7XG4iLAotICAgICAgICAgICAgc3BjKTsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAiJXMgIGZvbnRzaXplPVwiOFwiO1xuIiwgc3BjKTsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAiJXMgIHN0eWxlPVwiZmlsbGVkLHJvdW5kZWRcIjtcbiIsIHNwYyk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIiVzICBjb2xvcj1ibGFjaztcbiIsIHNwYyk7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIiVzICBsYWJlbD1cIiVzXFxuJXMlcyVzXCI7XG4iLCBzcGMsCi0gICAgICAgICAgICBHX09CSkVDVF9UWVBFX05BTUUgKGVsZW1lbnQpLCBHU1RfT0JKRUNUX05BTUUgKGVsZW1lbnQpLAotICAgICAgICAgICAgKHN0YXRlX25hbWUgPyBzdGF0ZV9uYW1lIDogIiIpLCAocGFyYW1fbmFtZSA/IHBhcmFtX25hbWUgOiAiIikKLSAgICAgICAgICAgICk7Ci0gICAgICAgIGlmIChzdGF0ZV9uYW1lKSB7Ci0gICAgICAgICAgZ19mcmVlIChzdGF0ZV9uYW1lKTsKLSAgICAgICAgICBzdGF0ZV9uYW1lID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFyYW1fbmFtZSkgewotICAgICAgICAgIGdfZnJlZSAocGFyYW1fbmFtZSk7Ci0gICAgICAgICAgcGFyYW1fbmFtZSA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBzcmNfcGFkcyA9IHNpbmtfcGFkcyA9IDA7Ci0gICAgICAgIGlmICgocGFkX2l0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoZWxlbWVudCkpKSB7Ci0gICAgICAgICAgZ2NoYXIgKmNsdXN0ZXJfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzX3NpbmsiLCBlbGVtZW50X25hbWUpOwotICAgICAgICAgIGRlYnVnX2R1bXBfZWxlbWVudF9wYWRzIChwYWRfaXRlciwgcGFkLCBlbGVtZW50LCBkZXRhaWxzLCBzdHIsCi0gICAgICAgICAgICAgIGluZGVudCArIDEsICZzaW5rX3BhZHMsIGNsdXN0ZXJfbmFtZSwgJnNpbmtfcGFkX25hbWUpOwotICAgICAgICAgIGdfZnJlZSAoY2x1c3Rlcl9uYW1lKTsKLSAgICAgICAgICBnc3RfaXRlcmF0b3JfZnJlZSAocGFkX2l0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgocGFkX2l0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzIChlbGVtZW50KSkpIHsKLSAgICAgICAgICBnY2hhciAqY2x1c3Rlcl9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXNfc3JjIiwgZWxlbWVudF9uYW1lKTsKLSAgICAgICAgICBkZWJ1Z19kdW1wX2VsZW1lbnRfcGFkcyAocGFkX2l0ZXIsIHBhZCwgZWxlbWVudCwgZGV0YWlscywgc3RyLAotICAgICAgICAgICAgICBpbmRlbnQgKyAxLCAmc3JjX3BhZHMsIGNsdXN0ZXJfbmFtZSwgJnNyY19wYWRfbmFtZSk7Ci0gICAgICAgICAgZ19mcmVlIChjbHVzdGVyX25hbWUpOwotICAgICAgICAgIGdzdF9pdGVyYXRvcl9mcmVlIChwYWRfaXRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNpbmtfcGFkcyAmJiBzcmNfcGFkcykgewotICAgICAgICAgIC8qIGFkZCBpbnZpc2libGUgbGluayBmcm9tIGZpcnN0IHNpbmsgdG8gZmlyc3Qgc3JjIHBhZCAqLwotICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwKLSAgICAgICAgICAgICAgIiVzICAlc18lcyAtPiAlc18lcyBbc3R5bGU9XCJpbnZpc1wiXTtcbiIsCi0gICAgICAgICAgICAgIHNwYywgZWxlbWVudF9uYW1lLCBzaW5rX3BhZF9uYW1lLCBlbGVtZW50X25hbWUsIHNyY19wYWRfbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19mcmVlIChzaW5rX3BhZF9uYW1lKTsKLSAgICAgICAgZ19mcmVlIChzcmNfcGFkX25hbWUpOwotICAgICAgICBnX2ZyZWUgKGVsZW1lbnRfbmFtZSk7Ci0gICAgICAgIHNpbmtfcGFkX25hbWUgPSBzcmNfcGFkX25hbWUgPSBOVUxMOwotICAgICAgICBpZiAoR1NUX0lTX0JJTiAoZWxlbWVudCkpIHsKLSAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlcyAgZmlsbGNvbG9yPVwiI2ZmZmZmZlwiO1xuIiwgc3BjKTsKLSAgICAgICAgICAvKiByZWN1cnNlICovCi0gICAgICAgICAgZGVidWdfZHVtcF9lbGVtZW50IChHU1RfQklOIChlbGVtZW50KSwgZGV0YWlscywgc3RyLCBpbmRlbnQgKyAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoc3JjX3BhZHMgJiYgIXNpbmtfcGFkcykKLSAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIiVzICBmaWxsY29sb3I9XCIjZmZhYWFhXCI7XG4iLCBzcGMpOwotICAgICAgICAgIGVsc2UgaWYgKCFzcmNfcGFkcyAmJiBzaW5rX3BhZHMpCi0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlcyAgZmlsbGNvbG9yPVwiI2FhYWFmZlwiO1xuIiwgc3BjKTsKLSAgICAgICAgICBlbHNlIGlmIChzcmNfcGFkcyAmJiBzaW5rX3BhZHMpCi0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlcyAgZmlsbGNvbG9yPVwiI2FhZmZhYVwiO1xuIiwgc3BjKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlcyAgZmlsbGNvbG9yPVwiI2ZmZmZmZlwiO1xuIiwgc3BjKTsKLSAgICAgICAgfQotICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlc31cblxuIiwgc3BjKTsKLSAgICAgICAgaWYgKChwYWRfaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkcyAoZWxlbWVudCkpKSB7Ci0gICAgICAgICAgcGFkc19kb25lID0gRkFMU0U7Ci0gICAgICAgICAgd2hpbGUgKCFwYWRzX2RvbmUpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKHBhZF9pdGVyLCAmaXRlbTIpKSB7Ci0gICAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgotICAgICAgICAgICAgICAgIHBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0yKTsKLSAgICAgICAgICAgICAgICBpZiAoZ3N0X3BhZF9pc19saW5rZWQgKHBhZCkpIHsKLSAgICAgICAgICAgICAgICAgIGlmIChnc3RfcGFkX2dldF9kaXJlY3Rpb24gKHBhZCkgPT0gR1NUX1BBRF9TUkMpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWdfZHVtcF9lbGVtZW50X3BhZF9saW5rIChwYWQsIGVsZW1lbnQsIGRldGFpbHMsIHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudCk7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBHc3RQYWQgKnBlZXJfcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocGVlcl9wYWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoIUdTVF9JU19HSE9TVF9QQUQgKHBlZXJfcGFkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBHU1RfSVNfUFJPWFlfUEFEIChwZWVyX3BhZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2R1bXBfZWxlbWVudF9wYWRfbGluayAocGVlcl9wYWQsIE5VTEwsIGRldGFpbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpbmRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyX3BhZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ192YWx1ZV9yZXNldCAoJml0ZW0yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKHBhZF9pdGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gICAgICAgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Ci0gICAgICAgICAgICAgICAgcGFkc19kb25lID0gVFJVRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZ192YWx1ZV91bnNldCAoJml0ZW0yKTsKLSAgICAgICAgICBnc3RfaXRlcmF0b3JfZnJlZSAocGFkX2l0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGVsZW1lbnRfaXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBlbGVtZW50c19kb25lID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgZ192YWx1ZV91bnNldCAoJml0ZW0pOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoZWxlbWVudF9pdGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlYnVnX2R1bXBfaGVhZGVyIChHc3RCaW4gKiBiaW4sIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsIEdTdHJpbmcgKiBzdHIpCi17Ci0gIGdjaGFyICpzdGF0ZV9uYW1lID0gTlVMTDsKLSAgZ2NoYXIgKnBhcmFtX25hbWUgPSBOVUxMOwotCi0gIGlmIChkZXRhaWxzICYgR1NUX0RFQlVHX0dSQVBIX1NIT1dfU1RBVEVTKSB7Ci0gICAgc3RhdGVfbmFtZSA9IGRlYnVnX2R1bXBfZ2V0X2VsZW1lbnRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pKTsKLSAgfQotICBpZiAoZGV0YWlscyAmIEdTVF9ERUJVR19HUkFQSF9TSE9XX05PTl9ERUZBVUxUX1BBUkFNUykgewotICAgIHBhcmFtX25hbWUgPSBkZWJ1Z19kdW1wX2dldF9vYmplY3RfcGFyYW1zIChHX09CSkVDVCAoYmluKSwgZGV0YWlscywgTlVMTCk7Ci0gIH0KLQotICAvKiB3cml0ZSBoZWFkZXIgKi8KLSAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLAotICAgICAgImRpZ3JhcGggcGlwZWxpbmUge1xuIgotICAgICAgIiAgcmFua2Rpcj1MUjtcbiIKLSAgICAgICIgIGZvbnRuYW1lPVwic2Fuc1wiO1xuIgotICAgICAgIiAgZm9udHNpemU9XCIxMFwiO1xuIgotICAgICAgIiAgbGFiZWxsb2M9dDtcbiIKLSAgICAgICIgIG5vZGVzZXA9LjE7XG4iCi0gICAgICAiICByYW5rc2VwPS4yO1xuIgotICAgICAgIiAgbGFiZWw9XCI8JXM+XFxuJXMlcyVzXCI7XG4iCi0gICAgICAiICBub2RlIFtzdHlsZT1cImZpbGxlZCxyb3VuZGVkXCIsIHNoYXBlPWJveCwgZm9udHNpemU9XCI5XCIsIGZvbnRuYW1lPVwic2Fuc1wiLCBtYXJnaW49XCIwLjAsMC4wXCJdO1xuIgotICAgICAgIiAgZWRnZSBbbGFiZWxmb250c2l6ZT1cIjZcIiwgZm9udHNpemU9XCI5XCIsIGZvbnRuYW1lPVwibW9ub3NwYWNlXCJdO1xuIgotICAgICAgIiAgXG4iCi0gICAgICAiICBsZWdlbmQgW1xuIgotICAgICAgIiAgICBwb3M9XCIwLDAhXCIsXG4iCi0gICAgICAiICAgIG1hcmdpbj1cIjAuMDUsMC4wNVwiLFxuIgotICAgICAgIiAgICBzdHlsZT1cImZpbGxlZFwiLFxuIgotICAgICAgIiAgICBsYWJlbD1cIkxlZ2VuZFxcbEVsZW1lbnQtU3RhdGVzOiBbfl0gdm9pZC1wZW5kaW5nLCBbMF0gbnVsbCwgWy1dIHJlYWR5LCBbPV0gcGF1c2VkLCBbPl0gcGxheWluZ1xcbFBhZC1BY3RpdmF0aW9uOiBbLV0gbm9uZSwgWz5dIHB1c2gsIFs8XSBwdWxsXFxsUGFkLUZsYWdzOiBbYl1sb2NrZWQsIFtmXWx1c2hpbmcsIFtiXWxvY2tpbmc7IHVwcGVyLWNhc2UgaXMgc2V0XFxsUGFkLVRhc2s6IFtUXSBoYXMgc3RhcnRlZCB0YXNrLCBbdF0gaGFzIHBhdXNlZCB0YXNrXFxsXCIsXG4iCi0gICAgICAiICBdOyIKLSAgICAgICJcbiIsIEdfT0JKRUNUX1RZUEVfTkFNRSAoYmluKSwgR1NUX09CSkVDVF9OQU1FIChiaW4pLAotICAgICAgKHN0YXRlX25hbWUgPyBzdGF0ZV9uYW1lIDogIiIpLCAocGFyYW1fbmFtZSA/IHBhcmFtX25hbWUgOiAiIikKLSAgICAgICk7Ci0KLSAgaWYgKHN0YXRlX25hbWUpCi0gICAgZ19mcmVlIChzdGF0ZV9uYW1lKTsKLSAgaWYgKHBhcmFtX25hbWUpCi0gICAgZ19mcmVlIChwYXJhbV9uYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlYnVnX2R1bXBfZm9vdGVyIChHU3RyaW5nICogc3RyKQotewotICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICJ9XG4iKTsKLX0KLQotLyoKLSAqIGdzdF9kZWJ1Z19iaW5fdG9fZG90X2RhdGE6Ci0gKiBAYmluOiB0aGUgdG9wLWxldmVsIHBpcGVsaW5lIHRoYXQgc2hvdWxkIGJlIGFuYWx5emVkCi0gKgotICogVG8gYWlkIGRlYnVnZ2luZyBhcHBsaWNhdGlvbnMgb25lIGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gb2J0YWluIHRoZSB3aG9sZQotICogbmV0d29yayBvZiBnc3RyZWFtZXIgZWxlbWVudHMgdGhhdCBmb3JtIHRoZSBwaXBlbGluZSBpbnRvIGFuIGRvdCBmaWxlLgotICogVGhpcyBkYXRhIGNhbiBiZSBwcm9jZXNzZWQgd2l0aCBncmFwaHZpeiB0byBnZXQgYW4gaW1hZ2UuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwaXBlbGluZSBpbiBncmFwaHZpegotICogZG90IGZvcm1hdC4KLSAqLwotZ2NoYXIgKgotZ3N0X2RlYnVnX2Jpbl90b19kb3RfZGF0YSAoR3N0QmluICogYmluLCBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzKQotewotICBHU3RyaW5nICpzdHI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOwotCi0gIHN0ciA9IGdfc3RyaW5nX25ldyAoTlVMTCk7Ci0KLSAgZGVidWdfZHVtcF9oZWFkZXIgKGJpbiwgZGV0YWlscywgc3RyKTsKLSAgZGVidWdfZHVtcF9lbGVtZW50IChiaW4sIGRldGFpbHMsIHN0ciwgMSk7Ci0gIGRlYnVnX2R1bXBfZm9vdGVyIChzdHIpOwotCi0gIHJldHVybiBnX3N0cmluZ19mcmVlIChzdHIsIEZBTFNFKTsKLX0KLQotLyoKLSAqIGdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGU6Ci0gKiBAYmluOiB0aGUgdG9wLWxldmVsIHBpcGVsaW5lIHRoYXQgc2hvdWxkIGJlIGFuYWx5emVkCi0gKiBAZmlsZV9uYW1lOiBvdXRwdXQgYmFzZSBmaWxlbmFtZSAoZS5nLiAibXlwbGF5ZXIiKQotICoKLSAqIFRvIGFpZCBkZWJ1Z2dpbmcgYXBwbGljYXRpb25zIG9uZSBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIHdyaXRlIG91dCB0aGUgd2hvbGUKLSAqIG5ldHdvcmsgb2YgZ3N0cmVhbWVyIGVsZW1lbnRzIHRoYXQgZm9ybSB0aGUgcGlwZWxpbmUgaW50byBhbiBkb3QgZmlsZS4KLSAqIFRoaXMgZmlsZSBjYW4gYmUgcHJvY2Vzc2VkIHdpdGggZ3JhcGh2aXogdG8gZ2V0IGFuIGltYWdlLgotICogPGluZm9ybWFsZXhhbXBsZT48cHJvZ3JhbWxpc3Rpbmc+Ci0gKiAgZG90IC1UcG5nIC1vaW1hZ2UucG5nIGdyYXBoX2xvd2xldmVsLmRvdAotICogPC9wcm9ncmFtbGlzdGluZz48L2luZm9ybWFsZXhhbXBsZT4KLSAqLwotdm9pZAotZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSAoR3N0QmluICogYmluLCBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzLAotICAgIGNvbnN0IGdjaGFyICogZmlsZV9uYW1lKQotewotICBnY2hhciAqZnVsbF9maWxlX25hbWUgPSBOVUxMOwotICBGSUxFICpvdXQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSk7Ci0KLSAgaWYgKEdfTElLRUxZIChwcml2X2dzdF9kdW1wX2RvdF9kaXIgPT0gTlVMTCkpCi0gICAgcmV0dXJuOwotCi0gIGlmICghZmlsZV9uYW1lKSB7Ci0gICAgZmlsZV9uYW1lID0gZ19nZXRfYXBwbGljYXRpb25fbmFtZSAoKTsKLSAgICBpZiAoIWZpbGVfbmFtZSkKLSAgICAgIGZpbGVfbmFtZSA9ICJ1bm5hbWVkIjsKLSAgfQotCi0gIGZ1bGxfZmlsZV9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXMiIEdfRElSX1NFUEFSQVRPUl9TICIlcy5kb3QiLAotICAgICAgcHJpdl9nc3RfZHVtcF9kb3RfZGlyLCBmaWxlX25hbWUpOwotCi0gIGlmICgob3V0ID0gZm9wZW4gKGZ1bGxfZmlsZV9uYW1lLCAid2IiKSkpIHsKLSAgICBnY2hhciAqYnVmOwotCi0gICAgYnVmID0gZ3N0X2RlYnVnX2Jpbl90b19kb3RfZGF0YSAoYmluLCBkZXRhaWxzKTsKLSAgICBmcHV0cyAoYnVmLCBvdXQpOwotCi0gICAgZ19mcmVlIChidWYpOwotICAgIGZjbG9zZSAob3V0KTsKLQotICAgIEdTVF9JTkZPICgid3JvdGUgYmluIGdyYXBoIHRvIDogJyVzJyIsIGZ1bGxfZmlsZV9uYW1lKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBvcGVuIGZpbGUgJyVzJyBmb3Igd3JpdGluZzogJXMiLCBmdWxsX2ZpbGVfbmFtZSwKLSAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgfQotICBnX2ZyZWUgKGZ1bGxfZmlsZV9uYW1lKTsKLX0KLQotLyoKLSAqIGdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGVfd2l0aF90czoKLSAqIEBiaW46IHRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUgdGhhdCBzaG91bGQgYmUgYW5hbHl6ZWQKLSAqIEBmaWxlX25hbWU6IG91dHB1dCBiYXNlIGZpbGVuYW1lIChlLmcuICJteXBsYXllciIpCi0gKgotICogVGhpcyB3b3JrcyBsaWtlIGdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUoKSwgYnV0IGFkZHMgdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiB0byB0aGUgZmlsZW5hbWUsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gdGFrZSBtdWx0aXBsZSBzbmFwc2hvdHMuCi0gKi8KLXZvaWQKLWdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGVfd2l0aF90cyAoR3N0QmluICogYmluLAotICAgIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsIGNvbnN0IGdjaGFyICogZmlsZV9uYW1lKQotewotICBnY2hhciAqdHNfZmlsZV9uYW1lID0gTlVMTDsKLSAgR3N0Q2xvY2tUaW1lIGVsYXBzZWQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JJTiAoYmluKSk7Ci0KLSAgaWYgKCFmaWxlX25hbWUpIHsKLSAgICBmaWxlX25hbWUgPSBnX2dldF9hcHBsaWNhdGlvbl9uYW1lICgpOwotICAgIGlmICghZmlsZV9uYW1lKQotICAgICAgZmlsZV9uYW1lID0gInVubmFtZWQiOwotICB9Ci0KLSAgLyogYWRkIHRpbWVzdGFtcCAqLwotICBlbGFwc2VkID0gR1NUX0NMT0NLX0RJRkYgKF9wcml2X2dzdF9zdGFydF90aW1lLCBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpKTsKLQotICAvKiB3ZSBkb24ndCB1c2UgR1NUX1RJTUVfRk9STUFUIGFzIHN1Y2ggZmlsZW5hbWVzIHdvdWxkIGZhaWwgb24gc29tZQotICAgKiBmaWxlc3lzdGVtcyBsaWtlIGZhdCAqLwotICB0c19maWxlX25hbWUgPQotICAgICAgZ19zdHJkdXBfcHJpbnRmICgiJXUuJTAydS4lMDJ1LiUwOXUtJXMiLCBHU1RfVElNRV9BUkdTIChlbGFwc2VkKSwKLSAgICAgIGZpbGVfbmFtZSk7Ci0KLSAgZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZSAoYmluLCBkZXRhaWxzLCB0c19maWxlX25hbWUpOwotICBnX2ZyZWUgKHRzX2ZpbGVfbmFtZSk7Ci19Ci0jZWxzZSAvKiAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCi0jaWZuZGVmIEdTVF9SRU1PVkVfRElTQUJMRUQKLXZvaWQKLWdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUgKEdzdEJpbiAqIGJpbiwgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscywKLSAgICBjb25zdCBnY2hhciAqIGZpbGVfbmFtZSkKLXsKLX0KLQotdm9pZAotZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzIChHc3RCaW4gKiBiaW4sIEdzdERlYnVnR3JhcGhEZXRhaWxzIGRldGFpbHMsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCi17Ci19Ci0jZW5kaWYgLyogR1NUX1JFTU9WRV9ESVNBQkxFRCAqLwotI2VuZGlmIC8qIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGRlYnVndXRpbHMuaCBiL2dzdC9nc3RkZWJ1Z3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNjNlMmQuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGRlYnVndXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0ZGVidWd1dGlscy5oOiBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzIHV0aWxsaXRpZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUREVCVUdVVElMU19IX18KLSNkZWZpbmUgX19HU1RERUJVR1VUSUxTX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotI2luY2x1ZGUgPGdzdC9nc3RiaW4uaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKioKLSAqIEdzdERlYnVnR3JhcGhEZXRhaWxzOgotICogQEdTVF9ERUJVR19HUkFQSF9TSE9XX01FRElBX1RZUEU6IHNob3cgY2Fwcy1uYW1lIG9uIGVkZ2VzCi0gKiBAR1NUX0RFQlVHX0dSQVBIX1NIT1dfQ0FQU19ERVRBSUxTOiBzaG93IGNhcHMtZGV0YWlscyBvbiBlZGdlcwotICogQEdTVF9ERUJVR19HUkFQSF9TSE9XX05PTl9ERUZBVUxUX1BBUkFNUzogc2hvdyBtb2RpZmllZCBwYXJhbWV0ZXJzIG9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cwotICogQEdTVF9ERUJVR19HUkFQSF9TSE9XX1NUQVRFUzogc2hvdyBlbGVtZW50IHN0YXRlcwotICogQEdTVF9ERUJVR19HUkFQSF9TSE9XX0ZVTExfUEFSQU1TOiBzaG93IGZ1bGwgZWxlbWVudCBwYXJhbWV0ZXIgdmFsdWVzIGV2ZW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhleSBhcmUgdmVyeSBsb25nCi0gKiBAR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMOiBzaG93IGFsbCB0aGUgdHlwaWNhbCBkZXRhaWxzIHRoYXQgb25lIG1pZ2h0IHdhbnQKLSAqIEBHU1RfREVCVUdfR1JBUEhfU0hPV19WRVJCT1NFOiBzaG93IGFsbCBkZXRhaWxzIHJlZ2FyZGxlc3Mgb2YgaG93IGxhcmdlIG9yCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZSB0aGV5IG1ha2UgdGhlIHJlc3VsdGluZyBvdXRwdXQKLSAqCi0gKiBBdmFpbGFibGUgZGV0YWlscyBmb3IgcGlwZWxpbmUgZ3JhcGhzIHByb2R1Y2VkIGJ5IEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoKQotICogYW5kIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUygpLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfREVCVUdfR1JBUEhfU0hPV19NRURJQV9UWVBFICAgICAgICAgPSAoMTw8MCksCi0gIEdTVF9ERUJVR19HUkFQSF9TSE9XX0NBUFNfREVUQUlMUyAgICAgICA9ICgxPDwxKSwKLSAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfTk9OX0RFRkFVTFRfUEFSQU1TID0gKDE8PDIpLAotICBHU1RfREVCVUdfR1JBUEhfU0hPV19TVEFURVMgICAgICAgICAgICAgPSAoMTw8MyksCi0gIEdTVF9ERUJVR19HUkFQSF9TSE9XX0ZVTExfUEFSQU1TICAgICAgICA9ICgxPDw0KSwKLSAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMICAgICAgICAgICAgICAgID0gKCgxPDw0KS0xKSwKLSAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfVkVSQk9TRSAgICAgICAgICAgID0gKC0xKQotfSBHc3REZWJ1Z0dyYXBoRGV0YWlsczsKLQotCi0vKioqKioqKioqKiBwaXBlbGluZSBncmFwaHMgKioqKioqKioqKi8KLQotZ2NoYXIgKiBnc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhIChHc3RCaW4gKmJpbiwgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscyk7Ci12b2lkIGdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUgKEdzdEJpbiAqYmluLCBHc3REZWJ1Z0dyYXBoRGV0YWlscyBkZXRhaWxzLCBjb25zdCBnY2hhciAqZmlsZV9uYW1lKTsKLXZvaWQgZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzIChHc3RCaW4gKmJpbiwgR3N0RGVidWdHcmFwaERldGFpbHMgZGV0YWlscywgY29uc3QgZ2NoYXIgKmZpbGVfbmFtZSk7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0KLS8qKgotICogR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRToKLSAqIEBiaW46IHRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUgdGhhdCBzaG91bGQgYmUgYW5hbHl6ZWQKLSAqIEBkZXRhaWxzOiBkZXRhaWxzIHRvIHNob3cgaW4gdGhlIGdyYXBoLCBlLmcuICNHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwgb3IKLSAqICAgIG9uZSBvciBtb3JlIG90aGVyICNHc3REZWJ1Z0dyYXBoRGV0YWlscyBmbGFncy4KLSAqIEBmaWxlX25hbWU6IG91dHB1dCBiYXNlIGZpbGVuYW1lIChlLmcuICJteXBsYXllciIpCi0gKgotICogVG8gYWlkIGRlYnVnZ2luZyBhcHBsaWNhdGlvbnMgb25lIGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gd3JpdGUgb3V0IHRoZSB3aG9sZQotICogbmV0d29yayBvZiBnc3RyZWFtZXIgZWxlbWVudHMgdGhhdCBmb3JtIHRoZSBwaXBlbGluZSBpbnRvIGFuIGRvdCBmaWxlLgotICogVGhpcyBmaWxlIGNhbiBiZSBwcm9jZXNzZWQgd2l0aCBncmFwaHZpeiB0byBnZXQgYW4gaW1hZ2UsIGxpa2UgdGhpczoKLSAqIDxpbmZvcm1hbGV4YW1wbGU+PHByb2dyYW1saXN0aW5nPgotICogIGRvdCAtVHBuZyAtb2ltYWdlLnBuZyBncmFwaF9sb3dsZXZlbC5kb3QKLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+Ci0gKiBUaGVyZSBpcyBhbHNvIGEgdXRpbGl0eSBjYWxsZWQgeGRvdCB3aGljaCBhbGxvd3MgeW91IHRvIHZpZXcgdGhlIGRvdCBmaWxlCi0gKiBkaXJlY3RseSB3aXRob3V0IGNvbnZlcnRpbmcgaXQgZmlyc3QuCi0gKgotICogVGhlIG1hY3JvIGlzIG9ubHkgYWN0aXZlIGlmIGdzdHJlYW1lciBpcyBjb25maWd1cmVkIHdpdGgKLSAqICZxdW90Oy0tZ3N0LWVuYWJsZS1nc3QtZGVidWcmcXVvdDsgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotICogR1NUX0RFQlVHX0RVTVBfRE9UX0RJUiBpcyBzZXQgdG8gYSBiYXNlcGF0aCAoZS5nLiAvdG1wKS4KLSAqLwotI2RlZmluZSBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKGJpbiwgZGV0YWlscywgZmlsZV9uYW1lKSBnc3RfZGVidWdfYmluX3RvX2RvdF9maWxlIChiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkKLQotLyoqCi0gKiBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFM6Ci0gKiBAYmluOiB0aGUgdG9wLWxldmVsIHBpcGVsaW5lIHRoYXQgc2hvdWxkIGJlIGFuYWx5emVkCi0gKiBAZGV0YWlsczogZGV0YWlscyB0byBzaG93IGluIHRoZSBncmFwaCwgZS5nLiAjR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMIG9yCi0gKiAgICBvbmUgb3IgbW9yZSBvdGhlciAjR3N0RGVidWdHcmFwaERldGFpbHMgZmxhZ3MuCi0gKiBAZmlsZV9uYW1lOiBvdXRwdXQgYmFzZSBmaWxlbmFtZSAoZS5nLiAibXlwbGF5ZXIiKQotICoKLSAqIFRoaXMgd29ya3MgbGlrZSBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFKCksIGJ1dCBhZGRzIHRoZSBjdXJyZW50IHRpbWVzdGFtcAotICogdG8gdGhlIGZpbGVuYW1lLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIHRha2UgbXVsdGlwbGUgc25hcHNob3RzLgotICovCi0jZGVmaW5lIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkgZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZV93aXRoX3RzIChiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkKLQotCi0jZWxzZSAvKiBHU1RfRElTQUJMRV9HU1RfREVCVUcgKi8KLQotCi0jZGVmaW5lIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUoYmluLCBkZXRhaWxzLCBmaWxlX25hbWUpCi0jZGVmaW5lIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhiaW4sIGRldGFpbHMsIGZpbGVfbmFtZSkKLQotI2VuZGlmIC8qIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RERUJVR1VUSUxTX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvZ3N0ZGV2aWNlLmMgYi9nc3QvZ3N0ZGV2aWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OGZlMTQuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGRldmljZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDA3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLSAqCi0gKiBnc3RkZXZpY2UuYzogRGV2aWNlIGRpc2NvdmVyeQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RkZXZpY2UKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogT2JqZWN0IHJlcHJlc2VudGluZyBhIGRldmljZQotICogQHNlZV9hbHNvOiAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqCi0gKiAjR3N0RGV2aWNlIGFyZSBvYmplY3RzIHJlcHJlc2VudGluZyBhIGRldmljZSwgdGhleSBjb250YWluCi0gKiByZWxldmFudCBtZXRhZGF0YSBhYm91dCB0aGUgZGV2aWNlLCBzdWNoIGFzIGl0cyBjbGFzcyBhbmQgdGhlICNHc3RDYXBzCi0gKiByZXByZXNlbnRpbmcgdGhlIG1lZGlhIHR5cGVzIGl0IGNhbiBwcm9kdWNlIG9yIGhhbmRsZS4KLSAqCi0gKiAjR3N0RGV2aWNlIGFyZSBjcmVhdGVkIGJ5ICNHc3REZXZpY2VQcm92aWRlciBvYmplY3RzIHdoaWNoIGNhbiBiZQotICogYWdncmVnYXRlZCBieSAjR3N0RGV2aWNlTW9uaXRvciBvYmplY3RzLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiZ3N0ZGV2aWNlLmgiCi0KLWVudW0KLXsKLSAgUFJPUF9ESVNQTEFZX05BTUUgPSAxLAotICBQUk9QX0NBUFMsCi0gIFBST1BfREVWSUNFX0NMQVNTLAotICBQUk9QX1BST1BFUlRJRVMKLX07Ci0KLWVudW0KLXsKLSAgUkVNT1ZFRCwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0cnVjdCBfR3N0RGV2aWNlUHJpdmF0ZQotewotICBHc3RDYXBzICpjYXBzOwotICBnY2hhciAqZGV2aWNlX2NsYXNzOwotICBnY2hhciAqZGlzcGxheV9uYW1lOwotICBHc3RTdHJ1Y3R1cmUgKnByb3BlcnRpZXM7Ci19OwotCi0KLXN0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXTsKLQotR19ERUZJTkVfQUJTVFJBQ1RfVFlQRSAoR3N0RGV2aWNlLCBnc3RfZGV2aWNlLCBHU1RfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgdm9pZCBnc3RfZGV2aWNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZGV2aWNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZGV2aWNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotCi1zdGF0aWMgdm9pZAotZ3N0X2RldmljZV9jbGFzc19pbml0IChHc3REZXZpY2VDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3REZXZpY2VQcml2YXRlKSk7Ci0KLSAgb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZGV2aWNlX2dldF9wcm9wZXJ0eTsKLSAgb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZGV2aWNlX3NldF9wcm9wZXJ0eTsKLSAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9kZXZpY2VfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBQUk9QX0RJU1BMQVlfTkFNRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJkaXNwbGF5LW5hbWUiLCAiRGlzcGxheSBOYW1lIiwKLSAgICAgICAgICAiVGhlIHVzZXItZnJpZW5kbHkgbmFtZSBvZiB0aGUgZGV2aWNlIiwgIiIsCi0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChvYmplY3RfY2xhc3MsIFBST1BfQ0FQUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImNhcHMiLCAiRGV2aWNlIENhcHMiLAotICAgICAgICAgICJUaGUgcG9zc2libGUgY2FwcyBvZiBhIGRldmljZSIsIEdTVF9UWVBFX0NBUFMsCi0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFX0NMQVNTLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZS1jbGFzcyIsICJEZXZpY2UgQ2xhc3MiLAotICAgICAgICAgICJUaGUgQ2xhc3Mgb2YgdGhlIGRldmljZSIsICIiLAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBQUk9QX1BST1BFUlRJRVMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJwcm9wZXJ0aWVzIiwgIlByb3BlcnRpZXMiLAotICAgICAgICAgICJUaGUgZXh0cmEgcHJvcGVydGllcyBvZiB0aGUgZGV2aWNlIiwgR1NUX1RZUEVfU1RSVUNUVVJFLAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKLQotICBzaWduYWxzW1JFTU9WRURdID0gZ19zaWduYWxfbmV3ICgicmVtb3ZlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgR19UWVBFX05PTkUsIDApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RldmljZV9pbml0IChHc3REZXZpY2UgKiBkZXZpY2UpCi17Ci0gIGRldmljZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoZGV2aWNlLCBHU1RfVFlQRV9ERVZJQ0UsCi0gICAgICBHc3REZXZpY2VQcml2YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZXZpY2VfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdERldmljZSAqZGV2aWNlID0gR1NUX0RFVklDRSAob2JqZWN0KTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmZGV2aWNlLT5wcml2LT5jYXBzLCBOVUxMKTsKLQotICBpZiAoZGV2aWNlLT5wcml2LT5wcm9wZXJ0aWVzKQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoZGV2aWNlLT5wcml2LT5wcm9wZXJ0aWVzKTsKLSAgZ19mcmVlIChkZXZpY2UtPnByaXYtPmRpc3BsYXlfbmFtZSk7Ci0gIGdfZnJlZSAoZGV2aWNlLT5wcml2LT5kZXZpY2VfY2xhc3MpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfZGV2aWNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RldmljZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RGV2aWNlICpnc3RkZXZpY2U7Ci0KLSAgZ3N0ZGV2aWNlID0gR1NUX0RFVklDRV9DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9ESVNQTEFZX05BTUU6Ci0gICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nICh2YWx1ZSwgZ3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lIChnc3RkZXZpY2UpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQVBTOgotICAgICAgaWYgKGdzdGRldmljZS0+cHJpdi0+Y2FwcykKLSAgICAgICAgZ192YWx1ZV90YWtlX2JveGVkICh2YWx1ZSwgZ3N0X2RldmljZV9nZXRfY2FwcyAoZ3N0ZGV2aWNlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVWSUNFX0NMQVNTOgotICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyAodmFsdWUsIGdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzcyAoZ3N0ZGV2aWNlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJPUEVSVElFUzoKLSAgICAgIGlmIChnc3RkZXZpY2UtPnByaXYtPnByb3BlcnRpZXMpCi0gICAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAodmFsdWUsIGdzdF9kZXZpY2VfZ2V0X3Byb3BlcnRpZXMgKGdzdGRldmljZSkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfZGV2aWNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REZXZpY2UgKmdzdGRldmljZTsKLQotICBnc3RkZXZpY2UgPSBHU1RfREVWSUNFX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RJU1BMQVlfTkFNRToKLSAgICAgIGdzdGRldmljZS0+cHJpdi0+ZGlzcGxheV9uYW1lID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0FQUzoKLSAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZnc3RkZXZpY2UtPnByaXYtPmNhcHMsIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFVklDRV9DTEFTUzoKLSAgICAgIGdzdGRldmljZS0+cHJpdi0+ZGV2aWNlX2NsYXNzID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJPUEVSVElFUzoKLSAgICAgIGlmIChnc3RkZXZpY2UtPnByaXYtPnByb3BlcnRpZXMpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoZ3N0ZGV2aWNlLT5wcml2LT5wcm9wZXJ0aWVzKTsKLSAgICAgIGdzdGRldmljZS0+cHJpdi0+cHJvcGVydGllcyA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9jcmVhdGVfZWxlbWVudDoKLSAqIEBkZXZpY2U6IGEgI0dzdERldmljZQotICogQG5hbWU6IChhbGxvdy1ub25lKTogbmFtZSBvZiBuZXcgZWxlbWVudCwgb3IgJU5VTEwgdG8gYXV0b21hdGljYWxseQotICogY3JlYXRlIGEgdW5pcXVlIG5hbWUuCi0gKgotICogQ3JlYXRlcyB0aGUgZWxlbWVudCB3aXRoIGFsbCBvZiB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBzZXQgdG8gdXNlCi0gKiB0aGlzIGRldmljZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RFbGVtZW50IGNvbmZpZ3VyZWQgdG8gdXNlIHRoaXMgZGV2aWNlCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3RFbGVtZW50ICoKLWdzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnQgKEdzdERldmljZSAqIGRldmljZSwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3REZXZpY2VDbGFzcyAqa2xhc3MgPSBHU1RfREVWSUNFX0dFVF9DTEFTUyAoZGV2aWNlKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRSAoZGV2aWNlKSwgTlVMTCk7Ci0KLSAgaWYgKGtsYXNzLT5jcmVhdGVfZWxlbWVudCkKLSAgICByZXR1cm4ga2xhc3MtPmNyZWF0ZV9lbGVtZW50IChkZXZpY2UsIG5hbWUpOwotICBlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9nZXRfY2FwczoKLSAqIEBkZXZpY2U6IGEgI0dzdERldmljZQotICoKLSAqIEdldHRlciBmb3IgdGhlICNHc3RDYXBzIHRoYXQgdGhpcyBkZXZpY2Ugc3VwcG9ydHMuCi0gKgotICogUmV0dXJuczogVGhlICNHc3RDYXBzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZS4gVW5yZWYgd2l0aAotICogZ3N0X2NhcHNfdW5yZWYoKSB3aGVuIGRvbmUuCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3RDYXBzICoKLWdzdF9kZXZpY2VfZ2V0X2NhcHMgKEdzdERldmljZSAqIGRldmljZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0UgKGRldmljZSksIE5VTEwpOwotCi0gIGlmIChkZXZpY2UtPnByaXYtPmNhcHMpCi0gICAgcmV0dXJuIGdzdF9jYXBzX3JlZiAoZGV2aWNlLT5wcml2LT5jYXBzKTsKLSAgZWxzZQotICAgIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfZ2V0X2Rpc3BsYXlfbmFtZToKLSAqIEBkZXZpY2U6IGEgI0dzdERldmljZQotICoKLSAqIEdldHMgdGhlIHVzZXItZnJpZW5kbHkgbmFtZSBvZiB0aGUgZGV2aWNlLgotICoKLSAqIFJldHVybnM6IFRoZSBkZXZpY2UgbmFtZS4gRnJlZSB3aXRoIGdfZnJlZSgpIGFmdGVyIHVzZS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLWdjaGFyICoKLWdzdF9kZXZpY2VfZ2V0X2Rpc3BsYXlfbmFtZSAoR3N0RGV2aWNlICogZGV2aWNlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRSAoZGV2aWNlKSwgTlVMTCk7Ci0KLSAgcmV0dXJuCi0gICAgICBnX3N0cmR1cCAoZGV2aWNlLT5wcml2LT5kaXNwbGF5X25hbWUgPyBkZXZpY2UtPnByaXYtPmRpc3BsYXlfbmFtZSA6ICIiKTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX2dldF9kZXZpY2VfY2xhc3M6Ci0gKiBAZGV2aWNlOiBhICNHc3REZXZpY2UKLSAqCi0gKiBHZXRzIHRoZSAiY2xhc3MiIG9mIGEgZGV2aWNlLiBUaGlzIGlzIGEgIi8iIHNlcGFyYXRlZCBsaXN0IG9mCi0gKiBjbGFzc2VzIHRoYXQgcmVwcmVzZW50IHRoaXMgZGV2aWNlLiBUaGV5IGFyZSBhIHN1YnNldCBvZiB0aGUKLSAqIGNsYXNzZXMgb2YgdGhlICNHc3REZXZpY2VQcm92aWRlciB0aGF0IHByb2R1Y2VkIHRoaXMgZGV2aWNlLgotICoKLSAqIFJldHVybnM6IFRoZSBkZXZpY2UgY2xhc3MuIEZyZWUgd2l0aCBnX2ZyZWUoKSBhZnRlciB1c2UuCi0gKgotICogU2luY2U6IDEuNAotICovCi1nY2hhciAqCi1nc3RfZGV2aWNlX2dldF9kZXZpY2VfY2xhc3MgKEdzdERldmljZSAqIGRldmljZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0UgKGRldmljZSksIE5VTEwpOwotCi0gIGlmIChkZXZpY2UtPnByaXYtPmRldmljZV9jbGFzcyAhPSBOVUxMKQotICAgIHJldHVybiBnX3N0cmR1cCAoZGV2aWNlLT5wcml2LT5kZXZpY2VfY2xhc3MpOwotICBlbHNlCi0gICAgcmV0dXJuIGdfc3RyZHVwICgiIik7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9nZXRfcHJvcGVydGllczoKLSAqIEBkZXZpY2U6IGEgI0dzdERldmljZQotICoKLSAqIEdldHMgdGhlIGV4dHJhIHByb3BlcnRpZXMgb2YgYSBkZXZpY2UuCi0gKgotICogUmV0dXJuczogVGhlIGV4dHJhIHByb3BlcnRpZXMgb3IgJU5VTEwgd2hlbiB0aGVyZSBhcmUgbm9uZS4KLSAqICAgICAgICAgIEZyZWUgd2l0aCBnc3Rfc3RydWN0dXJlX2ZyZWUoKSBhZnRlciB1c2UuCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RTdHJ1Y3R1cmUgKgotZ3N0X2RldmljZV9nZXRfcHJvcGVydGllcyAoR3N0RGV2aWNlICogZGV2aWNlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRSAoZGV2aWNlKSwgTlVMTCk7Ci0KLSAgaWYgKGRldmljZS0+cHJpdi0+cHJvcGVydGllcyAhPSBOVUxMKQotICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2NvcHkgKGRldmljZS0+cHJpdi0+cHJvcGVydGllcyk7Ci0gIGVsc2UKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQ6Ci0gKiBAZGV2aWNlOiBhICNHc3REZXZpY2UKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50Ci0gKgotICogVHJpZXMgdG8gcmVjb25maWd1cmUgYW4gZXhpc3RpbmcgZWxlbWVudCB0byB1c2UgdGhlIGRldmljZS4gSWYgdGhpcwotICogZnVuY3Rpb24gZmFpbHMsIHRoZW4gb25lIG11c3QgZGVzdHJveSB0aGUgZWxlbWVudCBhbmQgY3JlYXRlIGEgbmV3IG9uZQotICogdXNpbmcgZ3N0X2RldmljZV9jcmVhdGVfZWxlbWVudCgpLgotICoKLSAqIE5vdGU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIGVsZW1lbnRzIGNhbiBjaGFuZ2UgdGhlaXIKLSAqIGRldmljZSBpbiB0aGUgUExBWUlORyBzdGF0ZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZWxlbWVudCBjb3VsZCBiZSByZWNvbmZpZ3VyZWQgdG8gdXNlIHRoaXMgZGV2aWNlLAotICogJUZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLWdib29sZWFuCi1nc3RfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQgKEdzdERldmljZSAqIGRldmljZSwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdERldmljZUNsYXNzICprbGFzcyA9IEdTVF9ERVZJQ0VfR0VUX0NMQVNTIChkZXZpY2UpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREVWSUNFIChkZXZpY2UpLCBGQUxTRSk7Ci0KLSAgaWYgKGtsYXNzLT5yZWNvbmZpZ3VyZV9lbGVtZW50KQotICAgIHJldHVybiBrbGFzcy0+cmVjb25maWd1cmVfZWxlbWVudCAoZGV2aWNlLCBlbGVtZW50KTsKLSAgZWxzZQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX2hhc19jbGFzc2VzdjoKLSAqIEBkZXZpY2U6IGEgI0dzdERldmljZQotICogQGNsYXNzZXM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSk6IGEgJU5VTEwgdGVybWluYXRlZCBhcnJheSBvZiBjbGFzc2VzCi0gKiAgIHRvIG1hdGNoLCBvbmx5IG1hdGNoIGlmIGFsbCBjbGFzc2VzIGFyZSBtYXRjaGVkCi0gKgotICogQ2hlY2sgaWYgQGZhY3RvcnkgbWF0Y2hlcyBhbGwgb2YgdGhlIGdpdmVuIGNsYXNzZXMKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAZGV2aWNlIG1hdGNoZXMuCi0gKgotICogU2luY2U6IDEuNAotICovCi1nYm9vbGVhbgotZ3N0X2RldmljZV9oYXNfY2xhc3Nlc3YgKEdzdERldmljZSAqIGRldmljZSwgZ2NoYXIgKiogY2xhc3NlcykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0UgKGRldmljZSksIEZBTFNFKTsKLQotICBpZiAoIWNsYXNzZXMpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgZm9yICg7IGNsYXNzZXNbMF07IGNsYXNzZXMrKykgewotICAgIGNvbnN0IGdjaGFyICprbGFzcyA9IGNsYXNzZXNbMF07Ci0gICAgY29uc3QgZ2NoYXIgKmZvdW5kOwotICAgIGd1aW50IGxlbjsKLQotICAgIGlmICgqa2xhc3MgPT0gJ1wwJykKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgZm91bmQgPSBzdHJzdHIgKGRldmljZS0+cHJpdi0+ZGV2aWNlX2NsYXNzLCBrbGFzcyk7Ci0KLSAgICBpZiAoIWZvdW5kKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGlmIChmb3VuZCAhPSBkZXZpY2UtPnByaXYtPmRldmljZV9jbGFzcyAmJiAqKGZvdW5kIC0gMSkgIT0gJy8nKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgbGVuID0gc3RybGVuIChrbGFzcyk7Ci0gICAgaWYgKGZvdW5kW2xlbl0gIT0gMCAmJiBmb3VuZFtsZW5dICE9ICcvJykKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfaGFzX2NsYXNzZXM6Ci0gKiBAZGV2aWNlOiBhICNHc3REZXZpY2UKLSAqIEBjbGFzc2VzOiBhICIvIi1zZXBhcmF0ZWQgbGlzdCBvZiBkZXZpY2UgY2xhc3NlcyB0byBtYXRjaCwgb25seSBtYXRjaCBpZgotICogIGFsbCBjbGFzc2VzIGFyZSBtYXRjaGVkCi0gKgotICogQ2hlY2sgaWYgQGRldmljZSBtYXRjaGVzIGFsbCBvZiB0aGUgZ2l2ZW4gY2xhc3NlcwotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBkZXZpY2UgbWF0Y2hlcy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLWdib29sZWFuCi1nc3RfZGV2aWNlX2hhc19jbGFzc2VzIChHc3REZXZpY2UgKiBkZXZpY2UsIGNvbnN0IGdjaGFyICogY2xhc3NlcykKLXsKLSAgZ2NoYXIgKipjbGFzc2VzdjsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREVWSUNFIChkZXZpY2UpLCBGQUxTRSk7Ci0KLSAgaWYgKCFjbGFzc2VzKQotICAgIHJldHVybiBUUlVFOwotCi0gIGNsYXNzZXN2ID0gZ19zdHJzcGxpdCAoY2xhc3NlcywgIi8iLCAwKTsKLQotICByZXMgPSBnc3RfZGV2aWNlX2hhc19jbGFzc2VzdiAoZGV2aWNlLCBjbGFzc2Vzdik7Ci0KLSAgZ19zdHJmcmVldiAoY2xhc3Nlc3YpOwotCi0gIHJldHVybiByZXM7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0ZGV2aWNlLmggYi9nc3QvZ3N0ZGV2aWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MGVmZTIuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGRldmljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLSAqCi0gKiBnc3RkZXZpY2UuYzogRGV2aWNlIGRpc2NvdmVyeQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9ERVZJQ0VfSF9fCi0jZGVmaW5lIF9fR1NUX0RFVklDRV9IX18KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdERldmljZSBHc3REZXZpY2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RGV2aWNlQ2xhc3MgR3N0RGV2aWNlQ2xhc3M7Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgotI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+Ci0KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RGV2aWNlUHJpdmF0ZSBHc3REZXZpY2VQcml2YXRlOwotCi0jZGVmaW5lIEdTVF9UWVBFX0RFVklDRSAgICAgICAgICAgICAgICAgKGdzdF9kZXZpY2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0lTX0RFVklDRShvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9ERVZJQ0UpKQotI2RlZmluZSBHU1RfSVNfREVWSUNFX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfREVWSUNFKSkKLSNkZWZpbmUgR1NUX0RFVklDRV9HRVRfQ0xBU1Mob2JqKSAgICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0RFVklDRSwgR3N0RGV2aWNlQ2xhc3MpKQotI2RlZmluZSBHU1RfREVWSUNFKG9iaikgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0RFVklDRSwgR3N0RGV2aWNlKSkKLSNkZWZpbmUgR1NUX0RFVklDRV9DTEFTUyhrbGFzcykgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0RFVklDRSwgR3N0RGV2aWNlQ2xhc3MpKQotI2RlZmluZSBHU1RfREVWSUNFX0NBU1Qob2JqKSAgICAgICAgICAgICgoR3N0RGV2aWNlICopKG9iaikpCi0KLS8qKgotICogR3N0RGV2aWNlOgotICogQHBhcmVudDogVGhlIHBhcmVudCAjR3N0T2JqZWN0IHN0cnVjdXR1cmUuCi0gKgotICogQSBkZXZpY2Ugb2JqZWN0LgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotCi1zdHJ1Y3QgX0dzdERldmljZSB7Ci0gIEdzdE9iamVjdCAgICAgICAgIHBhcmVudDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0RGV2aWNlUHJpdmF0ZSAqcHJpdjsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLS8qKgotICogR3N0RGV2aWNlQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBUaGUgcGFyZW50ICNHc3RPYmplY3RDbGFzcyBzdHJ1Y3V0dXJlLgotICogQGNyZWF0ZV9lbGVtZW50OiBDcmVhdGVzIHRoZSBmdWxseSBjb25maWd1cmVkIGVsZW1lbnQgdG8gYWNjZXNzIHRoaXMgZGV2aWNlLgotICogIFN1YmNsYXNzZXMgbmVlZCB0byBvdmVycmlkZSB0aGlzIGFuZCByZXR1cm4gYSBuZXcgZWxlbWVudC4KLSAqIEByZWNvbmZpZ3VyZV9lbGVtZW50OiBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyBpZiB0aGUKLSAqICBlbGVtZW50IGNhbiBiZSByZWNvbmZpZ3VyZWQgdG8gdXNlIGEgZGlmZmVyZW50IGRldmljZS4gU2VlIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgZm9yIGdzdF9kZXZpY2VfcmVjb25maWd1cmVfZWxlbWVudCgpLgotICoKLSAqIFRoZSBjbGFzcyBzdHJ1Y3R1cmUgZm9yIGEgI0dzdERldmljZSBvYmplY3QuCi0gKgotICogU2luY2U6IDEuNAotICovCi0KLXN0cnVjdCBfR3N0RGV2aWNlQ2xhc3MgewotICBHc3RPYmplY3RDbGFzcyAgICBwYXJlbnRfY2xhc3M7Ci0KLSAgR3N0RWxlbWVudCAqICgqY3JlYXRlX2VsZW1lbnQpICAgICAgKEdzdERldmljZSAqIGRldmljZSwgY29uc3QgZ2NoYXIgKiBuYW1lKTsKLSAgZ2Jvb2xlYW4gICAgICgqcmVjb25maWd1cmVfZWxlbWVudCkgKEdzdERldmljZSAqIGRldmljZSwgR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlICAgICAgICAgIGdzdF9kZXZpY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1Hc3RFbGVtZW50ICogICBnc3RfZGV2aWNlX2NyZWF0ZV9lbGVtZW50ICAgICAgKEdzdERldmljZSAqIGRldmljZSwgY29uc3QgZ2NoYXIgKiBuYW1lKTsKLQotR3N0Q2FwcyAqICAgICAgZ3N0X2RldmljZV9nZXRfY2FwcyAgICAgICAgICAgIChHc3REZXZpY2UgKiBkZXZpY2UpOwotZ2NoYXIgKiAgICAgICAgZ3N0X2RldmljZV9nZXRfZGlzcGxheV9uYW1lICAgIChHc3REZXZpY2UgKiBkZXZpY2UpOwotZ2NoYXIgKiAgICAgICAgZ3N0X2RldmljZV9nZXRfZGV2aWNlX2NsYXNzICAgIChHc3REZXZpY2UgKiBkZXZpY2UpOwotR3N0U3RydWN0dXJlICogZ3N0X2RldmljZV9nZXRfcHJvcGVydGllcyAgICAgIChHc3REZXZpY2UgKiBkZXZpY2UpOwotZ2Jvb2xlYW4gICAgICAgZ3N0X2RldmljZV9yZWNvbmZpZ3VyZV9lbGVtZW50IChHc3REZXZpY2UgKiBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9kZXZpY2VfaGFzX2NsYXNzZXN2ICAgICAgIChHc3REZXZpY2UgKiBkZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqIGNsYXNzZXMpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2RldmljZV9oYXNfY2xhc3NlcyAgICAgICAgKEdzdERldmljZSAqIGRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBjbGFzc2VzKTsKLQotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdERldmljZSwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfREVWSUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGRldmljZW1vbml0b3IuYyBiL2dzdC9nc3RkZXZpY2Vtb25pdG9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwM2E4MTMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGRldmljZW1vbml0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDkwNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0gKgotICogZ3N0ZGV2aWNlbW9uaXRvci5jOiBkZXZpY2UgbW9uaXRvcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RkZXZpY2Vtb25pdG9yCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEEgZGV2aWNlIG1vbml0b3IgYW5kIHByb2JlcgotICogQHNlZV9hbHNvOiAjR3N0RGV2aWNlLCAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqCi0gKiBBcHBsaWNhdGlvbnMgc2hvdWxkIGNyZWF0ZSBhICNHc3REZXZpY2VNb25pdG9yIHdoZW4gdGhleSB3YW50Ci0gKiB0byBwcm9iZSwgbGlzdCBhbmQgbW9uaXRvciBkZXZpY2VzIG9mIGEgc3BlY2lmaWMgdHlwZS4gVGhlCi0gKiAjR3N0RGV2aWNlTW9uaXRvciB3aWxsIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUKLSAqICNHc3REZXZpY2VQcm92aWRlciBvYmplY3RzIGFuZCBtYW5hZ2UgdGhlbS4gSXQgd2lsbCB0aGVuIHBvc3QKLSAqIG1lc3NhZ2VzIG9uIGl0cyAjR3N0QnVzIGZvciBkZXZpY2VzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGFuZAotICogcmVtb3ZlZC4KLSAqCi0gKiBUaGUgZGV2aWNlIG1vbml0b3Igd2lsbCBtb25pdG9yIGFsbCBkZXZpY2VzIG1hdGNoaW5nIHRoZSBmaWx0ZXJzIHRoYXQKLSAqIHRoZSBhcHBsaWNhdGlvbiBoYXMgc2V0LgotICoKLSAqCi0gKiBUaGUgYmFzaWMgdXNlIHBhdHRlcm4gb2YgYSBkZXZpY2UgbW9uaXRvciBpcyBhcyBmb2xsb3dzOgotICogfFsKLSAqICAgc3RhdGljIGdib29sZWFuCi0gKiAgIG15X2J1c19mdW5jIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpCi0gKiAgIHsKLSAqICAgICAgR3N0RGV2aWNlICpkZXZpY2U7Ci0gKiAgICAgIGdjaGFyICpuYW1lOwotICoKLSAqICAgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICogICAgICAgIGNhc2UgR1NUX01FU1NBR0VfREVWSUNFX0FEREVEOgotICogICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkIChtZXNzYWdlLCAmZGV2aWNlKTsKLSAqICAgICAgICAgIG5hbWUgPSBnc3RfZGV2aWNlX2dldF9kaXNwbGF5X25hbWUgKGRldmljZSk7Ci0gKiAgICAgICAgICBnX3ByaW50KCJEZXZpY2UgYWRkZWQ6ICVzXG4iLCBuYW1lKTsKLSAqICAgICAgICAgIGdfZnJlZSAobmFtZSk7Ci0gKiAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChkZXZpY2UpOwotICogICAgICAgICAgYnJlYWs7Ci0gKiAgICAgICAgY2FzZSBHU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRDoKLSAqICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9yZW1vdmVkIChtZXNzYWdlLCAmZGV2aWNlKTsKLSAqICAgICAgICAgIG5hbWUgPSBnc3RfZGV2aWNlX2dldF9kaXNwbGF5X25hbWUgKGRldmljZSk7Ci0gKiAgICAgICAgICBnX3ByaW50KCJEZXZpY2UgcmVtb3ZlZDogJXNcbiIsIG5hbWUpOwotICogICAgICAgICAgZ19mcmVlIChuYW1lKTsKLSAqICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRldmljZSk7Ci0gKiAgICAgICAgICBicmVhazsKLSAqICAgICAgICBkZWZhdWx0OgotICogICAgICAgICAgYnJlYWs7Ci0gKiAgICAgIH0KLSAqCi0gKiAgICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKLSAqICAgfQotICoKLSAqICAgR3N0RGV2aWNlTW9uaXRvciAqCi0gKiAgIHNldHVwX3Jhd192aWRlb19zb3VyY2VfZGV2aWNlX21vbml0b3IgKHZvaWQpIHsKLSAqICAgICAgR3N0RGV2aWNlTW9uaXRvciAqbW9uaXRvcjsKLSAqICAgICAgR3N0QnVzICpidXM7Ci0gKiAgICAgIEdzdENhcHMgKmNhcHM7Ci0gKgotICogICAgICBtb25pdG9yID0gZ3N0X2RldmljZV9tb25pdG9yX25ldyAoKTsKLSAqCi0gKiAgICAgIGJ1cyA9IGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfYnVzIChtb25pdG9yKTsKLSAqICAgICAgZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgbXlfYnVzX2Z1bmMsIE5VTEwpOwotICogICAgICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICoKLSAqICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LXJhdyIpOwotICogICAgICBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlciAobW9uaXRvciwgIlZpZGVvL1NvdXJjZSIsIGNhcHMpOwotICogICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gKgotICogICAgICBnc3RfZGV2aWNlX21vbml0b3Jfc3RhcnQgKG1vbml0b3IpOwotICoKLSAqICAgICAgcmV0dXJuIG1vbml0b3I7Ci0gKiAgIH0KLSAqIF18Ci0gKgotICogU2luY2U6IDEuNAotICovCi0KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3RkZXZpY2Vtb25pdG9yLmgiCi0KLXN0cnVjdCBfR3N0RGV2aWNlTW9uaXRvclByaXZhdGUKLXsKLSAgZ2Jvb2xlYW4gc3RhcnRlZDsKLQotICBHc3RCdXMgKmJ1czsKLQotICBHUHRyQXJyYXkgKnByb3ZpZGVyczsKLSAgZ3VpbnQgY29va2llOwotCi0gIEdQdHJBcnJheSAqZmlsdGVyczsKLQotICBndWludCBsYXN0X2lkOwotICBHTGlzdCAqaGlkZGVuOwotICBnYm9vbGVhbiBzaG93X2FsbDsKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9TSE9XX0FMTCAgICAgICAgRkFMU0UKLQotZW51bQotewotICBQUk9QX1NIT1dfQUxMID0gMSwKLX07Ci0KLUdfREVGSU5FX1RZUEUgKEdzdERldmljZU1vbml0b3IsIGdzdF9kZXZpY2VfbW9uaXRvciwgR1NUX1RZUEVfT0JKRUNUKTsKLQotc3RhdGljIHZvaWQgZ3N0X2RldmljZV9tb25pdG9yX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdHJ1Y3QgRGV2aWNlRmlsdGVyCi17Ci0gIGd1aW50IGlkOwotCi0gIGdjaGFyICoqY2xhc3Nlc3Y7Ci0gIEdzdENhcHMgKmNhcHM7Ci19OwotCi1zdGF0aWMgdm9pZAotZGV2aWNlX2ZpbHRlcl9mcmVlIChzdHJ1Y3QgRGV2aWNlRmlsdGVyICpmaWx0ZXIpCi17Ci0gIGdfc3RyZnJlZXYgKGZpbHRlci0+Y2xhc3Nlc3YpOwotICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyLT5jYXBzKTsKLQotICBnX3NsaWNlX2ZyZWUgKHN0cnVjdCBEZXZpY2VGaWx0ZXIsIGZpbHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdERldmljZU1vbml0b3IgKm1vbml0b3IgPSBHU1RfREVWSUNFX01PTklUT1IgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NIT1dfQUxMOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsCi0gICAgICAgICAgZ3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzIChtb25pdG9yKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGV2aWNlX21vbml0b3Jfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdERldmljZU1vbml0b3IgKm1vbml0b3IgPSBHU1RfREVWSUNFX01PTklUT1IgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NIT1dfQUxMOgotICAgICAgZ3N0X2RldmljZV9tb25pdG9yX3NldF9zaG93X2FsbF9kZXZpY2VzIChtb25pdG9yLAotICAgICAgICAgIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9kZXZpY2VfbW9uaXRvcl9jbGFzc19pbml0IChHc3REZXZpY2VNb25pdG9yQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0RGV2aWNlTW9uaXRvclByaXZhdGUpKTsKLQotICBvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfcHJvcGVydHk7Ci0gIG9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2RldmljZV9tb25pdG9yX3NldF9wcm9wZXJ0eTsKLSAgb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2RldmljZV9tb25pdG9yX2Rpc3Bvc2U7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBQUk9QX1NIT1dfQUxMLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaG93LWFsbCIsICJTaG93IEFsbCIsCi0gICAgICAgICAgIlNob3cgYWxsIGRldmljZXMsIGV2ZW4gdGhvc2UgZnJvbSBoaWRkZW4gcHJvdmlkZXJzIiwKLSAgICAgICAgICBERUZBVUxUX1NIT1dfQUxMLCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBtb25pdG9yIGxvY2sgKi8KLXN0YXRpYyBnYm9vbGVhbgotaXNfcHJvdmlkZXJfaGlkZGVuIChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvciwgR0xpc3QgKiBoaWRkZW4sCi0gICAgR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcikKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICpmYWN0b3J5OwotCi0gIGlmIChtb25pdG9yLT5wcml2LT5zaG93X2FsbCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZmFjdG9yeSA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2ZhY3RvcnkgKHByb3ZpZGVyKTsKLSAgaWYgKGdfbGlzdF9maW5kX2N1c3RvbSAoaGlkZGVuLCBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpLAotICAgICAgICAgIChHQ29tcGFyZUZ1bmMpIGdfc3RyY21wMCkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIG1vbml0b3IgbG9jayAqLwotc3RhdGljIHZvaWQKLXVwZGF0ZV9oaWRkZW5fcHJvdmlkZXJzX2xpc3QgKEdMaXN0ICoqIGhpZGRlbiwgR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcikKLXsKLSAgZ2NoYXIgKipvYnM7Ci0KLSAgb2JzID0gZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfaGlkZGVuX3Byb3ZpZGVycyAocHJvdmlkZXIpOwotICBpZiAob2JzKSB7Ci0gICAgZ2ludCBpOwotCi0gICAgZm9yIChpID0gMDsgb2JzW2ldOyBpKyspCi0gICAgICAqaGlkZGVuID0gZ19saXN0X3ByZXBlbmQgKCpoaWRkZW4sIG9ic1tpXSk7Ci0KLSAgICBnX2ZyZWUgKG9icyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWJ1c19zeW5jX21lc3NhZ2UgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCi0gICAgR3N0RGV2aWNlTW9uaXRvciAqIG1vbml0b3IpCi17Ci0gIEdzdE1lc3NhZ2VUeXBlIHR5cGUgPSBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKTsKLQotICBpZiAodHlwZSA9PSBHU1RfTUVTU0FHRV9ERVZJQ0VfQURERUQgfHwgdHlwZSA9PSBHU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRCkgewotICAgIGdib29sZWFuIG1hdGNoZXM7Ci0gICAgR3N0RGV2aWNlICpkZXZpY2U7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXIgKnByb3ZpZGVyOwotCi0gICAgaWYgKHR5cGUgPT0gR1NUX01FU1NBR0VfREVWSUNFX0FEREVEKQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkIChtZXNzYWdlLCAmZGV2aWNlKTsKLSAgICBlbHNlCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9kZXZpY2VfcmVtb3ZlZCAobWVzc2FnZSwgJmRldmljZSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKG1vbml0b3IpOwotICAgIHByb3ZpZGVyID0KLSAgICAgICAgR1NUX0RFVklDRV9QUk9WSURFUiAoZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUIChkZXZpY2UpKSk7Ci0gICAgaWYgKGlzX3Byb3ZpZGVyX2hpZGRlbiAobW9uaXRvciwgbW9uaXRvci0+cHJpdi0+aGlkZGVuLCBwcm92aWRlcikpIHsKLSAgICAgIG1hdGNoZXMgPSBGQUxTRTsKLSAgICB9IGVsc2UgaWYgKG1vbml0b3ItPnByaXYtPmZpbHRlcnMtPmxlbikgewotICAgICAgZ3VpbnQgaTsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IG1vbml0b3ItPnByaXYtPmZpbHRlcnMtPmxlbjsgaSsrKSB7Ci0gICAgICAgIHN0cnVjdCBEZXZpY2VGaWx0ZXIgKmZpbHRlciA9Ci0gICAgICAgICAgICBnX3B0cl9hcnJheV9pbmRleCAobW9uaXRvci0+cHJpdi0+ZmlsdGVycywgaSk7Ci0gICAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgICAgY2FwcyA9IGdzdF9kZXZpY2VfZ2V0X2NhcHMgKGRldmljZSk7Ci0gICAgICAgIG1hdGNoZXMgPSBnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChmaWx0ZXItPmNhcHMsIGNhcHMpICYmCi0gICAgICAgICAgICBnc3RfZGV2aWNlX2hhc19jbGFzc2VzdiAoZGV2aWNlLCBmaWx0ZXItPmNsYXNzZXN2KTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgICBpZiAobWF0Y2hlcykKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgbWF0Y2hlcyA9IFRSVUU7Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25pdG9yKTsKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHByb3ZpZGVyKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChkZXZpY2UpOwotCi0gICAgaWYgKG1hdGNoZXMpCi0gICAgICBnc3RfYnVzX3Bvc3QgKG1vbml0b3ItPnByaXYtPmJ1cywgZ3N0X21lc3NhZ2VfcmVmIChtZXNzYWdlKSk7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X2RldmljZV9tb25pdG9yX2luaXQgKEdzdERldmljZU1vbml0b3IgKiBzZWxmKQotewotICBzZWxmLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChzZWxmLAotICAgICAgR1NUX1RZUEVfREVWSUNFX01PTklUT1IsIEdzdERldmljZU1vbml0b3JQcml2YXRlKTsKLQotICBzZWxmLT5wcml2LT5zaG93X2FsbCA9IERFRkFVTFRfU0hPV19BTEw7Ci0KLSAgc2VsZi0+cHJpdi0+YnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChzZWxmLT5wcml2LT5idXMsIFRSVUUpOwotCi0gIHNlbGYtPnByaXYtPnByb3ZpZGVycyA9IGdfcHRyX2FycmF5X25ldyAoKTsKLSAgc2VsZi0+cHJpdi0+ZmlsdGVycyA9IGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyAoCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGRldmljZV9maWx0ZXJfZnJlZSk7Ci0KLSAgc2VsZi0+cHJpdi0+bGFzdF9pZCA9IDE7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9kZXZpY2VfbW9uaXRvcl9yZW1vdmUgKEdzdERldmljZU1vbml0b3IgKiBzZWxmLCBndWludCBpKQotewotICBHc3REZXZpY2VQcm92aWRlciAqcHJvdmlkZXIgPSBnX3B0cl9hcnJheV9pbmRleCAoc2VsZi0+cHJpdi0+cHJvdmlkZXJzLCBpKTsKLSAgR3N0QnVzICpidXM7Ci0KLSAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4IChzZWxmLT5wcml2LT5wcm92aWRlcnMsIGkpOwotCi0gIGJ1cyA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2J1cyAocHJvdmlkZXIpOwotICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKGJ1cywgYnVzX3N5bmNfbWVzc2FnZSwgc2VsZik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocHJvdmlkZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RldmljZV9tb25pdG9yX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdERldmljZU1vbml0b3IgKnNlbGYgPSBHU1RfREVWSUNFX01PTklUT1IgKG9iamVjdCk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoIXNlbGYtPnByaXYtPnN0YXJ0ZWQpOwotCi0gIGlmIChzZWxmLT5wcml2LT5wcm92aWRlcnMpIHsKLSAgICB3aGlsZSAoc2VsZi0+cHJpdi0+cHJvdmlkZXJzLT5sZW4pCi0gICAgICBnc3RfZGV2aWNlX21vbml0b3JfcmVtb3ZlIChzZWxmLCBzZWxmLT5wcml2LT5wcm92aWRlcnMtPmxlbiAtIDEpOwotICAgIGdfcHRyX2FycmF5X3VucmVmIChzZWxmLT5wcml2LT5wcm92aWRlcnMpOwotICAgIHNlbGYtPnByaXYtPnByb3ZpZGVycyA9IE5VTEw7Ci0gIH0KLQotICBpZiAoc2VsZi0+cHJpdi0+ZmlsdGVycykgewotICAgIGdfcHRyX2FycmF5X3VucmVmIChzZWxmLT5wcml2LT5maWx0ZXJzKTsKLSAgICBzZWxmLT5wcml2LT5maWx0ZXJzID0gTlVMTDsKLSAgfQotCi0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiBzZWxmLT5wcml2LT5idXMsIE5VTEwpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfZGV2aWNlX21vbml0b3JfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXM6Ci0gKiBAbW9uaXRvcjogQSAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqCi0gKiBHZXRzIGEgbGlzdCBvZiBkZXZpY2VzIGZyb20gYWxsIG9mIHRoZSByZWxldmFudCBtb25pdG9ycy4gVGhpcyBtYXkgYWN0dWFsbHkKLSAqIHByb2JlIHRoZSBoYXJkd2FyZSBpZiB0aGUgbW9uaXRvciBpcyBub3QgY3VycmVudGx5IHN0YXJ0ZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0RGV2aWNlKTogYSAjR0xpc3Qgb2YKLSAqICAgI0dzdERldmljZQotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotCi1HTGlzdCAqCi1nc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXMgKEdzdERldmljZU1vbml0b3IgKiBtb25pdG9yKQotewotICBHTGlzdCAqZGV2aWNlcyA9IE5VTEwsICpoaWRkZW4gPSBOVUxMOwotICBndWludCBpOwotICBndWludCBjb29raWU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfTU9OSVRPUiAobW9uaXRvciksIE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAobW9uaXRvcik7Ci0KLSAgaWYgKG1vbml0b3ItPnByaXYtPmZpbHRlcnMtPmxlbiA9PSAwKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobW9uaXRvciwgIk5vIGZpbHRlcnMgaGF2ZSBiZWVuIHNldCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChtb25pdG9yLT5wcml2LT5wcm92aWRlcnMtPmxlbiA9PSAwKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobW9uaXRvciwgIk5vIHByb3ZpZGVycyBtYXRjaCB0aGUgY3VycmVudCBmaWx0ZXJzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLWFnYWluOgotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKGRldmljZXMsIGdzdF9vYmplY3RfdW5yZWYpOwotICBnX2xpc3RfZnJlZV9mdWxsIChoaWRkZW4sIGdfZnJlZSk7Ci0gIGRldmljZXMgPSBOVUxMOwotICBoaWRkZW4gPSBOVUxMOwotCi0gIGNvb2tpZSA9IG1vbml0b3ItPnByaXYtPmNvb2tpZTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbW9uaXRvci0+cHJpdi0+cHJvdmlkZXJzLT5sZW47IGkrKykgewotICAgIEdMaXN0ICp0bXBkZXY7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXIgKnByb3ZpZGVyID0KLSAgICAgICAgZ3N0X29iamVjdF9yZWYgKGdfcHRyX2FycmF5X2luZGV4IChtb25pdG9yLT5wcml2LT5wcm92aWRlcnMsIGkpKTsKLSAgICBHTGlzdCAqaXRlbTsKLQotICAgIGlmICghaXNfcHJvdmlkZXJfaGlkZGVuIChtb25pdG9yLCBoaWRkZW4sIHByb3ZpZGVyKSkgewotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotCi0gICAgICB0bXBkZXYgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzIChwcm92aWRlcik7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAobW9uaXRvcik7Ci0gICAgICB1cGRhdGVfaGlkZGVuX3Byb3ZpZGVyc19saXN0ICgmaGlkZGVuLCBwcm92aWRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRtcGRldiA9IE5VTEw7Ci0gICAgfQotCi0KLSAgICBmb3IgKGl0ZW0gPSB0bXBkZXY7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0KSB7Ci0gICAgICBHc3REZXZpY2UgKmRldiA9IEdTVF9ERVZJQ0UgKGl0ZW0tPmRhdGEpOwotICAgICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9kZXZpY2VfZ2V0X2NhcHMgKGRldik7Ci0gICAgICBndWludCBqOwotCi0gICAgICBmb3IgKGogPSAwOyBqIDwgbW9uaXRvci0+cHJpdi0+ZmlsdGVycy0+bGVuOyBqKyspIHsKLSAgICAgICAgc3RydWN0IERldmljZUZpbHRlciAqZmlsdGVyID0KLSAgICAgICAgICAgIGdfcHRyX2FycmF5X2luZGV4IChtb25pdG9yLT5wcml2LT5maWx0ZXJzLCBqKTsKLQotICAgICAgICBpZiAoZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoZmlsdGVyLT5jYXBzLCBjYXBzKSAmJgotICAgICAgICAgICAgZ3N0X2RldmljZV9oYXNfY2xhc3Nlc3YgKGRldiwgZmlsdGVyLT5jbGFzc2VzdikpIHsKLSAgICAgICAgICBkZXZpY2VzID0gZ19saXN0X3ByZXBlbmQgKGRldmljZXMsIGdzdF9vYmplY3RfcmVmIChkZXYpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIH0KLQotICAgIGdfbGlzdF9mcmVlX2Z1bGwgKHRtcGRldiwgZ3N0X29iamVjdF91bnJlZik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocHJvdmlkZXIpOwotCi0gICAgaWYgKG1vbml0b3ItPnByaXYtPmNvb2tpZSAhPSBjb29raWUpCi0gICAgICBnb3RvIGFnYWluOwotICB9Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGhpZGRlbiwgZ19mcmVlKTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAobW9uaXRvcik7Ci0KLSAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlIChkZXZpY2VzKTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX21vbml0b3Jfc3RhcnQ6Ci0gKiBAbW9uaXRvcjogQSAjR3N0RGV2aWNlTW9uaXRvcgotICoKLSAqIFN0YXJ0cyBtb25pdG9yaW5nIHRoZSBkZXZpY2VzLCBvbmUgdGhpcyBoYXMgc3VjY2VlZGVkLCB0aGUKLSAqICVHU1RfTUVTU0FHRV9ERVZJQ0VfQURERUQgYW5kICVHU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRCBtZXNzYWdlcwotICogd2lsbCBiZSBlbWl0dGVkIG9uIHRoZSBidXMgd2hlbiB0aGUgbGlzdCBvZiBkZXZpY2VzIGNoYW5nZXMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGRldmljZSBtb25pdG9yaW5nIGNvdWxkIGJlIHN0YXJ0ZWQKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLQotZ2Jvb2xlYW4KLWdzdF9kZXZpY2VfbW9uaXRvcl9zdGFydCAoR3N0RGV2aWNlTW9uaXRvciAqIG1vbml0b3IpCi17Ci0gIGd1aW50IGNvb2tpZSwgaTsKLSAgR0xpc3QgKnBlbmRpbmcgPSBOVUxMLCAqc3RhcnRlZCA9IE5VTEwsICpyZW1vdmVkID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRV9NT05JVE9SIChtb25pdG9yKSwgRkFMU0UpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAobW9uaXRvcik7Ci0KLSAgaWYgKG1vbml0b3ItPnByaXYtPmZpbHRlcnMtPmxlbiA9PSAwKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobW9uaXRvciwgIk5vIGZpbHRlcnMgaGF2ZSBiZWVuIHNldCwgd2lsbCBleHBvc2UgYWxsICIKLSAgICAgICAgImRldmljZXMgZm91bmQiKTsKLSAgICBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlciAobW9uaXRvciwgTlVMTCwgTlVMTCk7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChtb25pdG9yKTsKLSAgfQotCi0gIGlmIChtb25pdG9yLT5wcml2LT5wcm92aWRlcnMtPmxlbiA9PSAwKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobW9uaXRvciwgIk5vIHByb3ZpZGVycyBtYXRjaCB0aGUgY3VycmVudCBmaWx0ZXJzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKG1vbml0b3ItPnByaXYtPmJ1cywgRkFMU0UpOwotCi1hZ2FpbjoKLSAgY29va2llID0gbW9uaXRvci0+cHJpdi0+Y29va2llOwotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKHBlbmRpbmcsIGdzdF9vYmplY3RfdW5yZWYpOwotICBwZW5kaW5nID0gTlVMTDsKLSAgcmVtb3ZlZCA9IHN0YXJ0ZWQ7Ci0gIHN0YXJ0ZWQgPSBOVUxMOwotCi0gIGZvciAoaSA9IDA7IGkgPCBtb25pdG9yLT5wcml2LT5wcm92aWRlcnMtPmxlbjsgaSsrKSB7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXIgKnByb3ZpZGVyOwotICAgIEdMaXN0ICpmaW5kOwotCi0gICAgcHJvdmlkZXIgPSBnX3B0cl9hcnJheV9pbmRleCAobW9uaXRvci0+cHJpdi0+cHJvdmlkZXJzLCBpKTsKLQotICAgIGZpbmQgPSBnX2xpc3RfZmluZCAocmVtb3ZlZCwgcHJvdmlkZXIpOwotICAgIGlmIChmaW5kKSB7Ci0gICAgICAvKiB0aGlzIHdhcyBhbHJlYWR5IHN0YXJ0ZWQsIG1vdmUgdG8gc3RhcnRlZCBsaXN0ICovCi0gICAgICByZW1vdmVkID0gZ19saXN0X3JlbW92ZV9saW5rIChyZW1vdmVkLCBmaW5kKTsKLSAgICAgIHN0YXJ0ZWQgPSBnX2xpc3RfY29uY2F0IChzdGFydGVkLCBmaW5kKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogbm90IHN0YXJ0ZWQsIGFkZCB0byBwZW5kaW5nIGxpc3QgKi8KLSAgICAgIHBlbmRpbmcgPSBnX2xpc3RfYXBwZW5kIChwZW5kaW5nLCBnc3Rfb2JqZWN0X3JlZiAocHJvdmlkZXIpKTsKLSAgICB9Ci0gIH0KLSAgZ19saXN0X2ZyZWVfZnVsbCAocmVtb3ZlZCwgZ3N0X29iamVjdF91bnJlZik7Ci0gIHJlbW92ZWQgPSBOVUxMOwotCi0gIHdoaWxlIChwZW5kaW5nKSB7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXIgKnByb3ZpZGVyID0gcGVuZGluZy0+ZGF0YTsKLQotICAgIGlmIChnc3RfZGV2aWNlX3Byb3ZpZGVyX2Nhbl9tb25pdG9yIChwcm92aWRlcikpIHsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25pdG9yKTsKLQotICAgICAgaWYgKCFnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0IChwcm92aWRlcikpCi0gICAgICAgIGdvdG8gc3RhcnRfZmFpbGVkOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG1vbml0b3IpOwotICAgIH0KLSAgICBzdGFydGVkID0gZ19saXN0X3ByZXBlbmQgKHN0YXJ0ZWQsIHByb3ZpZGVyKTsKLSAgICBwZW5kaW5nID0gZ19saXN0X2RlbGV0ZV9saW5rIChwZW5kaW5nLCBwZW5kaW5nKTsKLQotICAgIGlmIChtb25pdG9yLT5wcml2LT5jb29raWUgIT0gY29va2llKQotICAgICAgZ290byBhZ2FpbjsKLSAgfQotICBtb25pdG9yLT5wcml2LT5zdGFydGVkID0gVFJVRTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKHN0YXJ0ZWQsIGdzdF9vYmplY3RfdW5yZWYpOwotCi0gIHJldHVybiBUUlVFOwotCi1zdGFydF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKG1vbml0b3IpOwotICAgIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChtb25pdG9yLT5wcml2LT5idXMsIFRSVUUpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25pdG9yKTsKLQotICAgIHdoaWxlIChzdGFydGVkKSB7Ci0gICAgICBHc3REZXZpY2VQcm92aWRlciAqcHJvdmlkZXIgPSBzdGFydGVkLT5kYXRhOwotCi0gICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3AgKHByb3ZpZGVyKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHByb3ZpZGVyKTsKLQotICAgICAgc3RhcnRlZCA9IGdfbGlzdF9kZWxldGVfbGluayAoc3RhcnRlZCwgc3RhcnRlZCk7Ci0gICAgfQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wOgotICogQG1vbml0b3I6IEEgI0dzdERldmljZVByb3ZpZGVyCi0gKgotICogU3RvcHMgbW9uaXRvcmluZyB0aGUgZGV2aWNlcy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wIChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvcikKLXsKLSAgZ3VpbnQgaTsKLSAgR0xpc3QgKnN0YXJ0ZWQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfTU9OSVRPUiAobW9uaXRvcikpOwotCi0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChtb25pdG9yLT5wcml2LT5idXMsIFRSVUUpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAobW9uaXRvcik7Ci0gIGZvciAoaSA9IDA7IGkgPCBtb25pdG9yLT5wcml2LT5wcm92aWRlcnMtPmxlbjsgaSsrKSB7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXIgKnByb3ZpZGVyID0KLSAgICAgICAgZ19wdHJfYXJyYXlfaW5kZXggKG1vbml0b3ItPnByaXYtPnByb3ZpZGVycywgaSk7Ci0KLSAgICBzdGFydGVkID0gZ19saXN0X3ByZXBlbmQgKHN0YXJ0ZWQsIGdzdF9vYmplY3RfcmVmIChwcm92aWRlcikpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25pdG9yKTsKLQotICB3aGlsZSAoc3RhcnRlZCkgewotICAgIEdzdERldmljZVByb3ZpZGVyICpwcm92aWRlciA9IHN0YXJ0ZWQtPmRhdGE7Ci0KLSAgICBpZiAoZ3N0X2RldmljZV9wcm92aWRlcl9jYW5fbW9uaXRvciAocHJvdmlkZXIpKQotICAgICAgZ3N0X2RldmljZV9wcm92aWRlcl9zdG9wIChwcm92aWRlcik7Ci0KLSAgICBzdGFydGVkID0gZ19saXN0X2RlbGV0ZV9saW5rIChzdGFydGVkLCBzdGFydGVkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm92aWRlcik7Ci0gIH0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKG1vbml0b3IpOwotICBtb25pdG9yLT5wcml2LT5zdGFydGVkID0gRkFMU0U7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25pdG9yKTsKLQotfQotCi1zdGF0aWMgdm9pZAotcHJvdmlkZXJfaGlkZGVuIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyLCBjb25zdCBnY2hhciAqIGhpZGRlbiwKLSAgICBHc3REZXZpY2VNb25pdG9yICogbW9uaXRvcikKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChtb25pdG9yKTsKLSAgbW9uaXRvci0+cHJpdi0+aGlkZGVuID0KLSAgICAgIGdfbGlzdF9wcmVwZW5kIChtb25pdG9yLT5wcml2LT5oaWRkZW4sIGdfc3RyZHVwIChoaWRkZW4pKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvdmlkZXJfdW5oaWRkZW4gKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIsIGNvbnN0IGdjaGFyICogaGlkZGVuLAotICAgIEdzdERldmljZU1vbml0b3IgKiBtb25pdG9yKQotewotICBHTGlzdCAqZmluZDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG1vbml0b3IpOwotICBmaW5kID0KLSAgICAgIGdfbGlzdF9maW5kX2N1c3RvbSAobW9uaXRvci0+cHJpdi0+aGlkZGVuLCBoaWRkZW4sCi0gICAgICAoR0NvbXBhcmVGdW5jKSBnX3N0cmNtcDApOwotICBpZiAoZmluZCkgewotICAgIGdfZnJlZSAoZmluZC0+ZGF0YSk7Ci0gICAgbW9uaXRvci0+cHJpdi0+aGlkZGVuID0gZ19saXN0X2RlbGV0ZV9saW5rIChtb25pdG9yLT5wcml2LT5oaWRkZW4sIGZpbmQpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25pdG9yKTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcjoKLSAqIEBtb25pdG9yOiBhIGRldmljZSBtb25pdG9yCi0gKiBAY2xhc3NlczogKGFsbG93LW5vbmUpOiBkZXZpY2UgY2xhc3NlcyB0byB1c2UgYXMgZmlsdGVyIG9yICVOVUxMIGZvciBhbnkgY2xhc3MKLSAqIEBjYXBzOiAoYWxsb3ctbm9uZSk6IHRoZSAjR3N0Q2FwcyB0byBmaWx0ZXIgb3IgJU5VTEwgZm9yIEFOWQotICoKLSAqIEFkZHMgYSBmaWx0ZXIgZm9yIHdoaWNoICNHc3REZXZpY2Ugd2lsbCBiZSBtb25pdG9yZWQsIGFueSBkZXZpY2UgdGhhdCBtYXRjaGVzCi0gKiBhbGwgdGhlc2UgY2xhc3NlcyBhbmQgdGhlICNHc3RDYXBzIHdpbGwgYmUgcmV0dXJuZWQuCi0gKgotICogSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gYWRkIG1vcmUgZmlsdGVycywgZWFjaCB3aWxsIGJlCi0gKiBtYXRjaGVkIGluZGVwZW5kZW50bHkuIFRoYXQgaXMsIGFkZGluZyBtb3JlIGZpbHRlcnMgd2lsbCBub3QgZnVydGhlciByZXN0cmljdAotICogd2hhdCBkZXZpY2VzIGFyZSBtYXRjaGVkLgotICoKLSAqIFRoZSAjR3N0Q2FwcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhcyByZXR1cm5lZCBieSBnc3RfZGV2aWNlX2dldF9jYXBzKCkgYXJlCi0gKiBub3QgaW50ZXJzZWN0ZWQgd2l0aCBjYXBzIGZpbHRlcnMgYWRkZWQgdXNpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBGaWx0ZXJzIG11c3QgYmUgYWRkZWQgYmVmb3JlIHRoZSAjR3N0RGV2aWNlTW9uaXRvciBpcyBzdGFydGVkLgotICoKLSAqIFJldHVybnM6IFRoZSBpZCBvZiB0aGUgbmV3IGZpbHRlciBvciAwIGlmIG5vIHByb3ZpZGVyIG1hdGNoZWQgdGhlIGZpbHRlcidzCi0gKiAgY2xhc3Nlcy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLWd1aW50Ci1nc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlciAoR3N0RGV2aWNlTW9uaXRvciAqIG1vbml0b3IsCi0gICAgY29uc3QgZ2NoYXIgKiBjbGFzc2VzLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR0xpc3QgKmZhY3RvcmllcyA9IE5VTEw7Ci0gIHN0cnVjdCBEZXZpY2VGaWx0ZXIgKmZpbHRlcjsKLSAgZ3VpbnQgaWQgPSAwOwotICBnYm9vbGVhbiBtYXRjaGVkID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfTU9OSVRPUiAobW9uaXRvciksIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoIW1vbml0b3ItPnByaXYtPnN0YXJ0ZWQsIDApOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAobW9uaXRvcik7Ci0KLSAgZmlsdGVyID0gZ19zbGljZV9uZXcwIChzdHJ1Y3QgRGV2aWNlRmlsdGVyKTsKLSAgZmlsdGVyLT5pZCA9IG1vbml0b3ItPnByaXYtPmxhc3RfaWQrKzsKLSAgaWYgKGNhcHMpCi0gICAgZmlsdGVyLT5jYXBzID0gZ3N0X2NhcHNfcmVmIChjYXBzKTsKLSAgZWxzZQotICAgIGZpbHRlci0+Y2FwcyA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gIGlmIChjbGFzc2VzKQotICAgIGZpbHRlci0+Y2xhc3Nlc3YgPSBnX3N0cnNwbGl0IChjbGFzc2VzLCAiLyIsIDApOwotCi0gIGZhY3RvcmllcyA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9saXN0X2dldF9kZXZpY2VfcHJvdmlkZXJzICgxKTsKLQotICB3aGlsZSAoZmFjdG9yaWVzKSB7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICpmYWN0b3J5ID0gZmFjdG9yaWVzLT5kYXRhOwotCi0gICAgaWYgKGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3Nlc3YgKGZhY3RvcnksIGZpbHRlci0+Y2xhc3Nlc3YpKSB7Ci0gICAgICBHc3REZXZpY2VQcm92aWRlciAqcHJvdmlkZXI7Ci0KLSAgICAgIHByb3ZpZGVyID0gZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldCAoZmFjdG9yeSk7Ci0KLSAgICAgIGlmIChwcm92aWRlcikgewotICAgICAgICBndWludCBpOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb25pdG9yLT5wcml2LT5wcm92aWRlcnMtPmxlbjsgaSsrKSB7Ci0gICAgICAgICAgaWYgKGdfcHRyX2FycmF5X2luZGV4IChtb25pdG9yLT5wcml2LT5wcm92aWRlcnMsIGkpID09IHByb3ZpZGVyKSB7Ci0gICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm92aWRlcik7Ci0gICAgICAgICAgICBwcm92aWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBtYXRjaGVkID0gVFJVRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAocHJvdmlkZXIpIHsKLSAgICAgICAgR3N0QnVzICpidXMgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9idXMgKHByb3ZpZGVyKTsKLQotICAgICAgICB1cGRhdGVfaGlkZGVuX3Byb3ZpZGVyc19saXN0ICgmbW9uaXRvci0+cHJpdi0+aGlkZGVuLCBwcm92aWRlcik7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHByb3ZpZGVyLCAicHJvdmlkZXItaGlkZGVuIiwKLSAgICAgICAgICAgIChHQ2FsbGJhY2spIHByb3ZpZGVyX2hpZGRlbiwgbW9uaXRvcik7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHByb3ZpZGVyLCAicHJvdmlkZXItdW5oaWRkZW4iLAotICAgICAgICAgICAgKEdDYWxsYmFjaykgcHJvdmlkZXJfdW5oaWRkZW4sIG1vbml0b3IpOwotCi0gICAgICAgIG1hdGNoZWQgPSBUUlVFOwotICAgICAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24gKGJ1cyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgInN5bmMtbWVzc2FnZSIsCi0gICAgICAgICAgICBHX0NBTExCQUNLIChidXNfc3luY19tZXNzYWdlKSwgbW9uaXRvcik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gICAgICAgIGdfcHRyX2FycmF5X2FkZCAobW9uaXRvci0+cHJpdi0+cHJvdmlkZXJzLCBwcm92aWRlcik7Ci0gICAgICAgIG1vbml0b3ItPnByaXYtPmNvb2tpZSsrOwotICAgICAgfQotICAgIH0KLQotICAgIGZhY3RvcmllcyA9IGdfbGlzdF9yZW1vdmUgKGZhY3RvcmllcywgZmFjdG9yeSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci0gIH0KLQotICAvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbGVhayBoZXJlICovCi0gIGdfYXNzZXJ0IChmYWN0b3JpZXMgPT0gTlVMTCk7Ci0KLSAgaWYgKG1hdGNoZWQpCi0gICAgaWQgPSBmaWx0ZXItPmlkOwotICBnX3B0cl9hcnJheV9hZGQgKG1vbml0b3ItPnByaXYtPmZpbHRlcnMsIGZpbHRlcik7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotCi0gIHJldHVybiBpZDsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX21vbml0b3JfcmVtb3ZlX2ZpbHRlcjoKLSAqIEBtb25pdG9yOiBhIGRldmljZSBtb25pdG9yCi0gKiBAZmlsdGVyX2lkOiB0aGUgaWQgb2YgdGhlIGZpbHRlcgotICoKLSAqIFJlbW92ZXMgYSBmaWx0ZXIgZnJvbSB0aGUgI0dzdERldmljZU1vbml0b3IgdXNpbmcgdGhlIGlkIHRoYXQgd2FzIHJldHVybmVkCi0gKiBieSBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlcigpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIG9mIHRoZSBmaWx0ZXIgaWQgd2FzIHZhbGlkLCAlRkFMU0Ugb3RoZXJ3aXNlCi0gKgotICogU2luY2U6IDEuNAotICovCi1nYm9vbGVhbgotZ3N0X2RldmljZV9tb25pdG9yX3JlbW92ZV9maWx0ZXIgKEdzdERldmljZU1vbml0b3IgKiBtb25pdG9yLCBndWludCBmaWx0ZXJfaWQpCi17Ci0gIGd1aW50IGksIGo7Ci0gIGdib29sZWFuIHJlbW92ZWQgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRV9NT05JVE9SIChtb25pdG9yKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoIW1vbml0b3ItPnByaXYtPnN0YXJ0ZWQsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbHRlcl9pZCA+IDAsIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG1vbml0b3IpOwotICBmb3IgKGkgPSAwOyBpIDwgbW9uaXRvci0+cHJpdi0+ZmlsdGVycy0+bGVuOyBpKyspIHsKLSAgICBzdHJ1Y3QgRGV2aWNlRmlsdGVyICpmaWx0ZXIgPSBnX3B0cl9hcnJheV9pbmRleCAobW9uaXRvci0+cHJpdi0+ZmlsdGVycywgaSk7Ci0KLSAgICBpZiAoZmlsdGVyLT5pZCA9PSBmaWx0ZXJfaWQpIHsKLSAgICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleCAobW9uaXRvci0+cHJpdi0+ZmlsdGVycywgaSk7Ci0gICAgICByZW1vdmVkID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmIChyZW1vdmVkKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IG1vbml0b3ItPnByaXYtPnByb3ZpZGVycy0+bGVuOyBpKyspIHsKLSAgICAgIEdzdERldmljZVByb3ZpZGVyICpwcm92aWRlciA9Ci0gICAgICAgICAgZ19wdHJfYXJyYXlfaW5kZXggKG1vbml0b3ItPnByaXYtPnByb3ZpZGVycywgaSk7Ci0gICAgICBHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKmZhY3RvcnkgPQotICAgICAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2ZhY3RvcnkgKHByb3ZpZGVyKTsKLSAgICAgIGdib29sZWFuIHZhbGlkID0gRkFMU0U7Ci0KLSAgICAgIGZvciAoaiA9IDA7IGogPCBtb25pdG9yLT5wcml2LT5maWx0ZXJzLT5sZW47IGorKykgewotICAgICAgICBzdHJ1Y3QgRGV2aWNlRmlsdGVyICpmaWx0ZXIgPQotICAgICAgICAgICAgZ19wdHJfYXJyYXlfaW5kZXggKG1vbml0b3ItPnByaXYtPmZpbHRlcnMsIGopOwotCi0gICAgICAgIGlmIChnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaGFzX2NsYXNzZXN2IChmYWN0b3J5LAotICAgICAgICAgICAgICAgIGZpbHRlci0+Y2xhc3Nlc3YpKSB7Ci0gICAgICAgICAgdmFsaWQgPSBUUlVFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdmFsaWQpIHsKLSAgICAgICAgbW9uaXRvci0+cHJpdi0+Y29va2llKys7Ci0gICAgICAgIGdzdF9kZXZpY2VfbW9uaXRvcl9yZW1vdmUgKG1vbml0b3IsIGkpOwotICAgICAgICBpLS07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotCi0gIHJldHVybiByZW1vdmVkOwotfQotCi0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX21vbml0b3JfbmV3OgotICoKLSAqIENyZWF0ZSBhIG5ldyAjR3N0RGV2aWNlTW9uaXRvcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgZGV2aWNlIG1vbml0b3IuCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3REZXZpY2VNb25pdG9yICoKLWdzdF9kZXZpY2VfbW9uaXRvcl9uZXcgKHZvaWQpCi17Ci0gIHJldHVybiBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0RFVklDRV9NT05JVE9SLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2J1czoKLSAqIEBtb25pdG9yOiBhICNHc3REZXZpY2VQcm92aWRlcgotICoKLSAqIEdldHMgdGhlICNHc3RCdXMgb2YgdGhpcyAjR3N0RGV2aWNlTW9uaXRvcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVzCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3RCdXMgKgotZ3N0X2RldmljZV9tb25pdG9yX2dldF9idXMgKEdzdERldmljZU1vbml0b3IgKiBtb25pdG9yKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRV9NT05JVE9SIChtb25pdG9yKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9vYmplY3RfcmVmIChtb25pdG9yLT5wcml2LT5idXMpOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfcHJvdmlkZXJzOgotICogQG1vbml0b3I6IGEgI0dzdERldmljZU1vbml0b3IKLSAqCi0gKiBHZXQgYSBsaXN0IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGV2aWNlIHByb3ZpZGVyIGZhY3Rvcmllcy4KLSAqCi0gKiBUaGlzCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSBnY2hhciopOgotICogICAgIEEgbGlzdCBvZiBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBuYW1lcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcKLSAqICAgICBtb25pdG9yZWQgYnkgQG1vbml0b3Igb3IgJU5VTEwgd2hlbiBub3RoaW5nIGlzIGJlaW5nIG1vbml0b3JlZC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdjaGFyICoqCi1nc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Byb3ZpZGVycyAoR3N0RGV2aWNlTW9uaXRvciAqIG1vbml0b3IpCi17Ci0gIGd1aW50IGksIGxlbjsKLSAgZ2NoYXIgKipyZXMgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREVWSUNFX01PTklUT1IgKG1vbml0b3IpLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG1vbml0b3IpOwotICBsZW4gPSBtb25pdG9yLT5wcml2LT5wcm92aWRlcnMtPmxlbjsKLSAgaWYgKGxlbiA9PSAwKQotICAgIGdvdG8gZG9uZTsKLQotICByZXMgPSBnX25ldyAoZ2NoYXIgKiwgbGVuICsgMSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXIgKnByb3ZpZGVyID0KLSAgICAgICAgZ19wdHJfYXJyYXlfaW5kZXggKG1vbml0b3ItPnByaXYtPnByb3ZpZGVycywgaSk7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICpmYWN0b3J5ID0KLSAgICAgICAgZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfZmFjdG9yeSAocHJvdmlkZXIpOwotCi0gICAgcmVzW2ldID0gZ19zdHJkdXAgKEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSkpOwotICB9Ci0gIHJlc1tpXSA9IE5VTEw7Ci0KLWRvbmU6Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25pdG9yKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfbW9uaXRvcl9zZXRfc2hvd19hbGxfZGV2aWNlczoKLSAqIEBtb25pdG9yOiBhICNHc3REZXZpY2VNb25pdG9yCi0gKiBAc2hvd19hbGw6IHNob3cgYWxsIGRldmljZXMKLSAqCi0gKiBTZXQgaWYgYWxsIGRldmljZXMgc2hvdWxkIGJlIHZpc2libGUsIGV2ZW4gdGhvc2UgZGV2aWNlcyBmcm9tIGhpZGRlbgotICogcHJvdmlkZXJzLiBTZXR0aW5nIEBzaG93X2FsbCB0byB0cnVlIG1pZ2h0IHNob3cgc29tZSBkZXZpY2VzIG11bHRpcGxlIHRpbWVzLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2RldmljZV9tb25pdG9yX3NldF9zaG93X2FsbF9kZXZpY2VzIChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvciwKLSAgICBnYm9vbGVhbiBzaG93X2FsbCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0RFVklDRV9NT05JVE9SIChtb25pdG9yKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChtb25pdG9yKTsKLSAgbW9uaXRvci0+cHJpdi0+c2hvd19hbGwgPSBzaG93X2FsbDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbml0b3IpOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfc2hvd19hbGxfZGV2aWNlczoKLSAqIEBtb25pdG9yOiBhICNHc3REZXZpY2VNb25pdG9yCi0gKgotICogR2V0IGlmIEBtb25pdG9yIGlzIGN1cnJldGx5IHNob3dpbmcgYWxsIGRldmljZXMsIGV2ZW4gdGhvc2UgZnJvbSBoaWRkZW4KLSAqIHByb3ZpZGVycy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSB3aGVuIGFsbCBkZXZpY2VzIHdpbGwgYmUgc2hvd24uCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzIChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvcikKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREVWSUNFX01PTklUT1IgKG1vbml0b3IpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChtb25pdG9yKTsKLSAgcmVzID0gbW9uaXRvci0+cHJpdi0+c2hvd19hbGw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25pdG9yKTsKLQotICByZXR1cm4gcmVzOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGRldmljZW1vbml0b3IuaCBiL2dzdC9nc3RkZXZpY2Vtb25pdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NjQxMzAuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGRldmljZW1vbml0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0gKgotICogZ3N0ZGV2aWNlbW9uaXRvci5jOiBEZXZpY2UgbW9uaXRvcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9ERVZJQ0VfTU9OSVRPUl9IX18KLSNkZWZpbmUgX19HU1RfREVWSUNFX01PTklUT1JfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGRldmljZS5oPgotI2luY2x1ZGUgPGdzdC9nc3RkZXZpY2Vwcm92aWRlci5oPgotI2luY2x1ZGUgPGdzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RGV2aWNlTW9uaXRvciBHc3REZXZpY2VNb25pdG9yOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERldmljZU1vbml0b3JQcml2YXRlIEdzdERldmljZU1vbml0b3JQcml2YXRlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERldmljZU1vbml0b3JDbGFzcyBHc3REZXZpY2VNb25pdG9yQ2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfREVWSUNFX01PTklUT1IgICAgICAgICAgICAgICAgIChnc3RfZGV2aWNlX21vbml0b3JfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0lTX0RFVklDRV9NT05JVE9SKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0RFVklDRV9NT05JVE9SKSkKLSNkZWZpbmUgR1NUX0lTX0RFVklDRV9NT05JVE9SX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfREVWSUNFX01PTklUT1IpKQotI2RlZmluZSBHU1RfREVWSUNFX01PTklUT1JfR0VUX0NMQVNTKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9ERVZJQ0VfTU9OSVRPUiwgR3N0RGV2aWNlTW9uaXRvckNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFVklDRV9NT05JVE9SKG9iaikgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0RFVklDRV9NT05JVE9SLCBHc3REZXZpY2VNb25pdG9yKSkKLSNkZWZpbmUgR1NUX0RFVklDRV9NT05JVE9SX0NMQVNTKGtsYXNzKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfREVWSUNFX01PTklUT1IsIEdzdERldmljZU1vbml0b3JDbGFzcykpCi0jZGVmaW5lIEdTVF9ERVZJQ0VfTU9OSVRPUl9DQVNUKG9iaikgICAgICAgICAgICAoKEdzdERldmljZU1vbml0b3IgKikob2JqKSkKLQotLyoqCi0gKiBHc3REZXZpY2VNb25pdG9yOgotICogQHBhcmVudDogdGhlIHBhcmVudCAjR3N0T2JqZWN0IHN0cnVjdHVyZQotICoKLSAqIE9wYXF1ZSBkZXZpY2UgbW9uaXRvciBvYmplY3Qgc3RydWN0dXJlLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotc3RydWN0IF9Hc3REZXZpY2VNb25pdG9yIHsKLSAgR3N0T2JqZWN0ICAgICAgICAgICAgICAgIHBhcmVudDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLQotICBHc3REZXZpY2VNb25pdG9yUHJpdmF0ZSAqcHJpdjsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLS8qKgotICogR3N0RGV2aWNlTW9uaXRvckNsYXNzOgotICogQHBhcmVudF9jbGFzczogdGhlIHBhcmVudCAjR3N0T2JqZWN0Q2xhc3Mgc3RydWN0dXJlCi0gKgotICogT3BhcXVlIGRldmljZSBtb25pdG9yIGNsYXNzIHN0cnVjdHVyZS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXN0cnVjdCBfR3N0RGV2aWNlTW9uaXRvckNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICAgICAgICAgIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSAgICAgZ3N0X2RldmljZV9tb25pdG9yX2dldF90eXBlICh2b2lkKTsKLQotR3N0RGV2aWNlTW9uaXRvciAqIGdzdF9kZXZpY2VfbW9uaXRvcl9uZXcgICh2b2lkKTsKLQotR3N0QnVzICogIGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfYnVzIChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvcik7Ci0KLUdMaXN0ICogICBnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXMgKEdzdERldmljZU1vbml0b3IgKiBtb25pdG9yKTsKLQotCi1nYm9vbGVhbiAgZ3N0X2RldmljZV9tb25pdG9yX3N0YXJ0IChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvcik7Ci0KLXZvaWQgICAgICBnc3RfZGV2aWNlX21vbml0b3Jfc3RvcCAgKEdzdERldmljZU1vbml0b3IgKiBtb25pdG9yKTsKLQotCi1ndWludCAgICAgZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXIgKEdzdERldmljZU1vbml0b3IgKiBtb25pdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogY2xhc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAgICAgICAgICAqIGNhcHMpOwotZ2Jvb2xlYW4gIGdzdF9kZXZpY2VfbW9uaXRvcl9yZW1vdmVfZmlsdGVyIChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgZmlsdGVyX2lkKTsKLQotZ2NoYXIgKiogIGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfcHJvdmlkZXJzIChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvcik7Ci0KLXZvaWQgICAgICBnc3RfZGV2aWNlX21vbml0b3Jfc2V0X3Nob3dfYWxsX2RldmljZXMgKEdzdERldmljZU1vbml0b3IgKiBtb25pdG9yLCBnYm9vbGVhbiBzaG93X2FsbCk7Ci1nYm9vbGVhbiAgZ3N0X2RldmljZV9tb25pdG9yX2dldF9zaG93X2FsbF9kZXZpY2VzIChHc3REZXZpY2VNb25pdG9yICogbW9uaXRvcik7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0RGV2aWNlTW9uaXRvciwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfREVWSUNFX01PTklUT1JfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuYyBiL2dzdC9nc3RkZXZpY2Vwcm92aWRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzk3MmJiLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RkZXZpY2Vwcm92aWRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNzMyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLSAqCi0gKiBnc3RkZXZpY2Vwcm92aWRlci5jOiBEZXZpY2UgcHJvYmluZyBhbmQgbW9uaXRvcmluZwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RkZXZpY2Vwcm92aWRlcgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIGRldmljZSBwcm92aWRlcgotICogQHNlZV9hbHNvOiAjR3N0RGV2aWNlLCAjR3N0RGV2aWNlTW9uaXRvcgotICoKLSAqIEEgI0dzdERldmljZVByb3ZpZGVyIHN1YmNsYXNzIGlzIHByb3ZpZGVkIGJ5IGEgcGx1Z2luIHRoYXQgaGFuZGxlcyBkZXZpY2VzCi0gKiBpZiB0aGVyZSBpcyBhIHdheSB0byBwcm9ncmFtYXRpY2FsbHkgbGlzdCBjb25uZWN0ZWQgZGV2aWNlcy4gSXQgY2FuIGFsc28KLSAqIG9wdGlvbmFsbHkgcHJvdmlkZSB1cGRhdGVzIHRvIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzLgotICoKLSAqIEVhY2ggI0dzdERldmljZVByb3ZpZGVyIHN1YmNsYXNzIGlzIGEgc2luZ2xldG9uLCBhIHBsdWdpbiBzaG91bGQKLSAqIG5vcm1hbGx5IHByb3ZpZGUgYSBzaW5nbGUgc3ViY2xhc3MgZm9yIGFsbCBkZXZpY2VzLgotICoKLSAqIEFwcGxpY2F0aW9ucyB3b3VsZCBub3JtYWxseSB1c2UgYSAjR3N0RGV2aWNlTW9uaXRvciB0byBtb25pdG9yIGRldmljZXMKLSAqIGZyb20gYWxsIHJlbGV2YW50IHByb3ZpZGVycy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdGRldmljZXByb3ZpZGVyLmgiCi0KLSNpbmNsdWRlICJnc3RlbGVtZW50bWV0YWRhdGEuaCIKLSNpbmNsdWRlICJnc3RxdWFyay5oIgotCi1zdHJ1Y3QgX0dzdERldmljZVByb3ZpZGVyUHJpdmF0ZQotewotICBHc3RCdXMgKmJ1czsKLQotICBHTXV0ZXggc3RhcnRfbG9jazsKLQotICBnYm9vbGVhbiBzdGFydGVkX2NvdW50OwotCi0gIEdMaXN0ICpoaWRkZW5fcHJvdmlkZXJzOwotfTsKLQotZW51bQotewotICBQUk9WSURFUl9ISURERU4sCi0gIFBST1ZJREVSX1VOSElEREVOLAotICBMQVNUX1NJR05BTAotfTsKLQotc3RhdGljIGd1aW50IGdzdF9kZXZpY2VfcHJvdmlkZXJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotLyogdGhpcyBpcyB1c2VkIGluIGdzdGVsZW1lbnRmYWN0b3J5LmM6Z3N0X2VsZW1lbnRfcmVnaXN0ZXIoKSAqLwotR1F1YXJrIF9fZ3N0X2RldmljZXByb3ZpZGVyY2xhc3NfZmFjdG9yeSA9IDA7Ci0KLXN0YXRpYyB2b2lkIGdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfaW5pdCAoR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyAqIGtsYXNzKTsKLXN0YXRpYyB2b2lkIGdzdF9kZXZpY2VfcHJvdmlkZXJfaW5pdCAoR3N0RGV2aWNlUHJvdmlkZXIgKiBlbGVtZW50KTsKLXN0YXRpYyB2b2lkIGdzdF9kZXZpY2VfcHJvdmlkZXJfYmFzZV9jbGFzc19pbml0IChncG9pbnRlciBnX2NsYXNzKTsKLXN0YXRpYyB2b2lkIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdwb2ludGVyIGdzdF9kZXZpY2VfcHJvdmlkZXJfcGFyZW50X2NsYXNzID0gTlVMTDsKLQotR1R5cGUKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBnc3RfZGV2aWNlX3Byb3ZpZGVyX3R5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmdzdF9kZXZpY2VfcHJvdmlkZXJfdHlwZSkpIHsKLSAgICBHVHlwZSBfdHlwZTsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGVsZW1lbnRfaW5mbyA9IHsKLSAgICAgIHNpemVvZiAoR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyksCi0gICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2Jhc2VfY2xhc3NfaW5pdCwKLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogYmFzZV9jbGFzc19maW5hbGl6ZSAqLwotICAgICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIHNpemVvZiAoR3N0RGV2aWNlUHJvdmlkZXIpLAotICAgICAgMCwKLSAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X2RldmljZV9wcm92aWRlcl9pbml0LAotICAgICAgTlVMTAotICAgIH07Ci0KLSAgICBfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UWVBFX09CSkVDVCwgIkdzdERldmljZVByb3ZpZGVyIiwKLSAgICAgICAgJmVsZW1lbnRfaW5mbywgR19UWVBFX0ZMQUdfQUJTVFJBQ1QpOwotCi0gICAgX19nc3RfZGV2aWNlcHJvdmlkZXJjbGFzc19mYWN0b3J5ID0KLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJHU1RfREVWSUNFUFJPVklERVJDTEFTU19GQUNUT1JZIik7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZnc3RfZGV2aWNlX3Byb3ZpZGVyX3R5cGUsIF90eXBlKTsKLSAgfQotICByZXR1cm4gZ3N0X2RldmljZV9wcm92aWRlcl90eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RldmljZV9wcm92aWRlcl9iYXNlX2NsYXNzX2luaXQgKGdwb2ludGVyIGdfY2xhc3MpCi17Ci0gIEdzdERldmljZVByb3ZpZGVyQ2xhc3MgKmtsYXNzID0gR1NUX0RFVklDRV9QUk9WSURFUl9DTEFTUyAoZ19jbGFzcyk7Ci0KLSAgLyogQ29weSB0aGUgZWxlbWVudCBkZXRhaWxzIGhlcmUgc28gZWxlbWVudHMgY2FuIGluaGVyaXQgdGhlCi0gICAqIGRldGFpbHMgZnJvbSB0aGVpciBiYXNlIGNsYXNzIGFuZCBjbGFzc2VzIG9ubHkgbmVlZCB0byBzZXQKLSAgICogdGhlIGRldGFpbHMgaW4gY2xhc3NfaW5pdCBpbnN0ZWFkIG9mIGJhc2VfaW5pdCAqLwotICBrbGFzcy0+bWV0YWRhdGEgPQotICAgICAga2xhc3MtPm1ldGFkYXRhID8gZ3N0X3N0cnVjdHVyZV9jb3B5IChrbGFzcy0+bWV0YWRhdGEpIDoKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgibWV0YWRhdGEiKTsKLQotICBrbGFzcy0+ZmFjdG9yeSA9IGdfdHlwZV9nZXRfcWRhdGEgKEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBfX2dzdF9kZXZpY2Vwcm92aWRlcmNsYXNzX2ZhY3RvcnkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19pbml0IChHc3REZXZpY2VQcm92aWRlckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0X2RldmljZV9wcm92aWRlcl9wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdERldmljZVByb3ZpZGVyUHJpdmF0ZSkpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2RldmljZV9wcm92aWRlcl9maW5hbGl6ZTsKLQotICBnc3RfZGV2aWNlX3Byb3ZpZGVyX3NpZ25hbHNbUFJPVklERVJfSElEREVOXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJwcm92aWRlci1oaWRkZW4iLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0ZJUlNULCAwLCBOVUxMLAotICAgICAgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfU1RSSU5HKTsKLQotICBnc3RfZGV2aWNlX3Byb3ZpZGVyX3NpZ25hbHNbUFJPVklERVJfVU5ISURERU5dID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInByb3ZpZGVyLXVuaGlkZGVuIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9GSVJTVCwgMCwgTlVMTCwKLSAgICAgIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX1NUUklORyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2luaXQgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpCi17Ci0gIHByb3ZpZGVyLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChwcm92aWRlciwKLSAgICAgIEdTVF9UWVBFX0RFVklDRV9QUk9WSURFUiwgR3N0RGV2aWNlUHJvdmlkZXJQcml2YXRlKTsKLQotICBnX211dGV4X2luaXQgKCZwcm92aWRlci0+cHJpdi0+c3RhcnRfbG9jayk7Ci0KLSAgcHJvdmlkZXItPnByaXYtPmJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfYnVzX3NldF9mbHVzaGluZyAocHJvdmlkZXItPnByaXYtPmJ1cywgVFJVRSk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXIgKnByb3ZpZGVyID0gR1NUX0RFVklDRV9QUk9WSURFUiAob2JqZWN0KTsKLQotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopICYgcHJvdmlkZXItPnByaXYtPmJ1cywgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwcm92aWRlcik7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKHByb3ZpZGVyLT5kZXZpY2VzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5wYXJlbnQpOwotICBwcm92aWRlci0+ZGV2aWNlcyA9IE5VTEw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwcm92aWRlcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9kZXZpY2VfcHJvdmlkZXJfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdERldmljZVByb3ZpZGVyICpwcm92aWRlciA9IEdTVF9ERVZJQ0VfUFJPVklERVIgKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJnByb3ZpZGVyLT5wcml2LT5zdGFydF9sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X2RldmljZV9wcm92aWRlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2FkZF9tZXRhZGF0YToKLSAqIEBrbGFzczogY2xhc3MgdG8gc2V0IG1ldGFkYXRhIGZvcgotICogQGtleTogdGhlIGtleSB0byBzZXQKLSAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIHNldAotICoKLSAqIFNldCBAa2V5IHdpdGggQHZhbHVlIGFzIG1ldGFkYXRhIGluIEBrbGFzcy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhIChHc3REZXZpY2VQcm92aWRlckNsYXNzICoga2xhc3MsCi0gICAgY29uc3QgZ2NoYXIgKiBrZXksIGNvbnN0IGdjaGFyICogdmFsdWUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVJfQ0xBU1MgKGtsYXNzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGtleSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAodmFsdWUgIT0gTlVMTCk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKChHc3RTdHJ1Y3R1cmUgKikga2xhc3MtPm1ldGFkYXRhLAotICAgICAga2V5LCBHX1RZUEVfU1RSSU5HLCB2YWx1ZSwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhOgotICogQGtsYXNzOiBjbGFzcyB0byBzZXQgbWV0YWRhdGEgZm9yCi0gKiBAa2V5OiB0aGUga2V5IHRvIHNldAotICogQHZhbHVlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSB2YWx1ZSB0byBzZXQKLSAqCi0gKiBTZXQgQGtleSB3aXRoIEB2YWx1ZSBhcyBtZXRhZGF0YSBpbiBAa2xhc3MuCi0gKgotICogU2FtZSBhcyBnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2FkZF9tZXRhZGF0YSgpLCBidXQgQHZhbHVlIG11c3QgYmUgYSBzdGF0aWMgc3RyaW5nCi0gKiBvciBhbiBpbmxpbmVkIHN0cmluZywgYXMgaXQgd2lsbCBub3QgYmUgY29waWVkLiAoR1N0cmVhbWVyIHBsdWdpbnMgd2lsbAotICogYmUgbWFkZSByZXNpZGVudCBvbmNlIGxvYWRlZCwgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBldmVuIGZyb20KLSAqIGR5bmFtaWNhbGx5IGxvYWRlZCBwbHVnaW5zLikKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YSAoR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyAqIGtsYXNzLAotICAgIGNvbnN0IGdjaGFyICoga2V5LCBjb25zdCBnY2hhciAqIHZhbHVlKQotewotICBHVmFsdWUgdmFsID0gR19WQUxVRV9JTklUOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVJfQ0xBU1MgKGtsYXNzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGtleSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAodmFsdWUgIT0gTlVMTCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfU1RSSU5HKTsKLSAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnZhbCwgdmFsdWUpOwotICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKChHc3RTdHJ1Y3R1cmUgKikga2xhc3MtPm1ldGFkYXRhLCBrZXksICZ2YWwpOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X21ldGFkYXRhOgotICogQGtsYXNzOiBjbGFzcyB0byBzZXQgbWV0YWRhdGEgZm9yCi0gKiBAbG9uZ25hbWU6IFRoZSBsb25nIEVuZ2xpc2ggbmFtZSBvZiB0aGUgZGV2aWNlIHByb3ZpZGVyLiBFLmcuICJGaWxlIFNpbmsiCi0gKiBAY2xhc3NpZmljYXRpb246IFN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGRldmljZSBwcm92aWRlciwgYXMgYW4KLSAqICB1bm9yZGVyZWQgbGlzdCBzZXBhcmF0ZWQgd2l0aCBzbGFzaGVzICgnLycpLiBTZWUgZHJhZnQta2xhc3MudHh0IG9mIHRoZQotICogIGRlc2lnbiBkb2NzCi0gKiBmb3IgbW9yZSBkZXRhaWxzIGFuZCBjb21tb24gdHlwZXMuIEUuZzogIlNpbmsvRmlsZSIKLSAqIEBkZXNjcmlwdGlvbjogU2VudGVuY2UgZGVzY3JpYmluZyB0aGUgcHVycG9zZSBvZiB0aGUgZGV2aWNlIHByb3ZpZGVyLgotICogRS5nOiAiV3JpdGUgc3RyZWFtIHRvIGEgZmlsZSIKLSAqIEBhdXRob3I6IE5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgYXV0aG9yKHMpLiBVc2UgXG4gdG8gc2VwYXJhdGUKLSAqIG11bHRpcGxlIGF1dGhvciBtZXRhZGF0YS4gRS5nOiAiSm9lIEJsb2dncyAmbHQ7am9lLmJsb2dzIGF0IGZvby5jb20mZ3Q7IgotICoKLSAqIFNldHMgdGhlIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhICNHc3REZXZpY2VQcm92aWRlckNsYXNzLgotICogPG5vdGU+VGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIGluIF9jbGFzc19pbml0IGZ1bmN0aW9ucyBvbmx5Ljwvbm90ZT4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X21ldGFkYXRhIChHc3REZXZpY2VQcm92aWRlckNsYXNzICoga2xhc3MsCi0gICAgY29uc3QgZ2NoYXIgKiBsb25nbmFtZSwgY29uc3QgZ2NoYXIgKiBjbGFzc2lmaWNhdGlvbiwKLSAgICBjb25zdCBnY2hhciAqIGRlc2NyaXB0aW9uLCBjb25zdCBnY2hhciAqIGF1dGhvcikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0RFVklDRV9QUk9WSURFUl9DTEFTUyAoa2xhc3MpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAobG9uZ25hbWUgIT0gTlVMTCAmJiAqbG9uZ25hbWUgIT0gJ1wwJyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNsYXNzaWZpY2F0aW9uICE9IE5VTEwgJiYgKmNsYXNzaWZpY2F0aW9uICE9ICdcMCcpOwotICBnX3JldHVybl9pZl9mYWlsIChkZXNjcmlwdGlvbiAhPSBOVUxMICYmICpkZXNjcmlwdGlvbiAhPSAnXDAnKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoYXV0aG9yICE9IE5VTEwgJiYgKmF1dGhvciAhPSAnXDAnKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoKEdzdFN0cnVjdHVyZSAqKSBrbGFzcy0+bWV0YWRhdGEsCi0gICAgICBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpLCBHX1RZUEVfU1RSSU5HLCBsb25nbmFtZSwKLSAgICAgIEdTVF9RVUFSSyAoRUxFTUVOVF9NRVRBREFUQV9LTEFTUyksIEdfVFlQRV9TVFJJTkcsIGNsYXNzaWZpY2F0aW9uLAotICAgICAgR1NUX1FVQVJLIChFTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OKSwgR19UWVBFX1NUUklORywgZGVzY3JpcHRpb24sCi0gICAgICBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfQVVUSE9SKSwgR19UWVBFX1NUUklORywgYXV0aG9yLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGE6Ci0gKiBAa2xhc3M6IGNsYXNzIHRvIHNldCBtZXRhZGF0YSBmb3IKLSAqIEBsb25nbmFtZTogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbG9uZyBFbmdsaXNoIG5hbWUgb2YgdGhlIGVsZW1lbnQuIEUuZy4gIkZpbGUgU2luayIKLSAqIEBjbGFzc2lmaWNhdGlvbjogKHRyYW5zZmVyIGZ1bGwpOiBTdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlbGVtZW50LCBhcwotICogYW4gdW5vcmRlcmVkIGxpc3Qgc2VwYXJhdGVkIHdpdGggc2xhc2hlcyAoJy8nKS4gU2VlIGRyYWZ0LWtsYXNzLnR4dCBvZiB0aGUKLSAqIGRlc2lnbiBkb2NzIGZvciBtb3JlIGRldGFpbHMgYW5kIGNvbW1vbiB0eXBlcy4gRS5nOiAiU2luay9GaWxlIgotICogQGRlc2NyaXB0aW9uOiAodHJhbnNmZXIgZnVsbCk6IFNlbnRlbmNlIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlCi0gKiBlbGVtZW50LiAgRS5nOiAiV3JpdGUgc3RyZWFtIHRvIGEgZmlsZSIKLSAqIEBhdXRob3I6ICh0cmFuc2ZlciBmdWxsKTogTmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBhdXRob3IocykuIFVzZSBcbgotICogdG8gc2VwYXJhdGUgbXVsdGlwbGUgYXV0aG9yIG1ldGFkYXRhLiBFLmc6ICJKb2UgQmxvZ2dzICZsdDtqb2UuYmxvZ3MgYXQKLSAqIGZvby5jb20mZ3Q7IgotICoKLSAqIFNldHMgdGhlIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhICNHc3REZXZpY2VQcm92aWRlckNsYXNzLgotICogPG5vdGU+VGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIGluIF9jbGFzc19pbml0IGZ1bmN0aW9ucyBvbmx5Ljwvbm90ZT4KLSAqCi0gKiBTYW1lIGFzIGdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X21ldGFkYXRhKCksIGJ1dCBAbG9uZ25hbWUsIEBjbGFzc2lmaWNhdGlvbiwKLSAqIEBkZXNjcmlwdGlvbiwgYW5kIEBhdXRob3IgbXVzdCBiZSBzdGF0aWMgc3RyaW5ncyBvciBpbmxpbmVkIHN0cmluZ3MsIGFzCi0gKiB0aGV5IHdpbGwgbm90IGJlIGNvcGllZC4gKEdTdHJlYW1lciBwbHVnaW5zIHdpbGwgYmUgbWFkZSByZXNpZGVudCBvbmNlCi0gKiBsb2FkZWQsIHNvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZXZlbiBmcm9tIGR5bmFtaWNhbGx5IGxvYWRlZCBwbHVnaW5zLikKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyAqIGtsYXNzLAotICAgIGNvbnN0IGdjaGFyICogbG9uZ25hbWUsIGNvbnN0IGdjaGFyICogY2xhc3NpZmljYXRpb24sCi0gICAgY29uc3QgZ2NoYXIgKiBkZXNjcmlwdGlvbiwgY29uc3QgZ2NoYXIgKiBhdXRob3IpCi17Ci0gIEdzdFN0cnVjdHVyZSAqcyA9IChHc3RTdHJ1Y3R1cmUgKikga2xhc3MtPm1ldGFkYXRhOwotICBHVmFsdWUgdmFsID0gR19WQUxVRV9JTklUOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVJfQ0xBU1MgKGtsYXNzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGxvbmduYW1lICE9IE5VTEwgJiYgKmxvbmduYW1lICE9ICdcMCcpOwotICBnX3JldHVybl9pZl9mYWlsIChjbGFzc2lmaWNhdGlvbiAhPSBOVUxMICYmICpjbGFzc2lmaWNhdGlvbiAhPSAnXDAnKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZGVzY3JpcHRpb24gIT0gTlVMTCAmJiAqZGVzY3JpcHRpb24gIT0gJ1wwJyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGF1dGhvciAhPSBOVUxMICYmICphdXRob3IgIT0gJ1wwJyk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfU1RSSU5HKTsKLQotICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdmFsLCBsb25nbmFtZSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzLCBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpLCAmdmFsKTsKLQotICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdmFsLCBjbGFzc2lmaWNhdGlvbik7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzLCBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfS0xBU1MpLCAmdmFsKTsKLQotICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdmFsLCBkZXNjcmlwdGlvbik7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzLCBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT04pLAotICAgICAgJnZhbCk7Ci0KLSAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnZhbCwgYXV0aG9yKTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChzLCBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfQVVUSE9SKSwgJnZhbCk7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGE6Ci0gKiBAa2xhc3M6IGNsYXNzIHRvIGdldCBtZXRhZGF0YSBmb3IKLSAqIEBrZXk6IHRoZSBrZXkgdG8gZ2V0Ci0gKgotICogR2V0IG1ldGFkYXRhIHdpdGggQGtleSBpbiBAa2xhc3MuCi0gKgotICogUmV0dXJuczogdGhlIG1ldGFkYXRhIGZvciBAa2V5LgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGEgKEdzdERldmljZVByb3ZpZGVyQ2xhc3MgKiBrbGFzcywKLSAgICBjb25zdCBnY2hhciAqIGtleSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVJfQ0xBU1MgKGtsYXNzKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChrZXkgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoKEdzdFN0cnVjdHVyZSAqKSBrbGFzcy0+bWV0YWRhdGEsIGtleSk7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfZGV2aWNlczoKLSAqIEBwcm92aWRlcjogQSAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqCi0gKiBHZXRzIGEgbGlzdCBvZiBkZXZpY2VzIHRoYXQgdGhpcyBwcm92aWRlciB1bmRlcnN0YW5kcy4gVGhpcyBtYXkgYWN0dWFsbHkKLSAqIHByb2JlIHRoZSBoYXJkd2FyZSBpZiB0aGUgcHJvdmlkZXIgaXMgbm90IGN1cnJlbnRseSBzdGFydGVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIEdzdERldmljZSk6IGEgI0dMaXN0IG9mCi0gKiAgICNHc3REZXZpY2UKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLQotR0xpc3QgKgotZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfZGV2aWNlcyAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcikKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyAqa2xhc3M7Ci0gIEdMaXN0ICpkZXZpY2VzID0gTlVMTDsKLSAgZ2Jvb2xlYW4gc3RhcnRlZDsKLSAgR0xpc3QgKml0ZW07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVIgKHByb3ZpZGVyKSwgTlVMTCk7Ci0gIGtsYXNzID0gR1NUX0RFVklDRV9QUk9WSURFUl9HRVRfQ0xBU1MgKHByb3ZpZGVyKTsKLQotICBnX211dGV4X2xvY2sgKCZwcm92aWRlci0+cHJpdi0+c3RhcnRfbG9jayk7Ci0gIHN0YXJ0ZWQgPSAocHJvdmlkZXItPnByaXYtPnN0YXJ0ZWRfY291bnQgPiAwKTsKLQotICBpZiAoc3RhcnRlZCkgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAocHJvdmlkZXIpOwotICAgIGZvciAoaXRlbSA9IHByb3ZpZGVyLT5kZXZpY2VzOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkKLSAgICAgIGRldmljZXMgPSBnX2xpc3RfcHJlcGVuZCAoZGV2aWNlcywgZ3N0X29iamVjdF9yZWYgKGl0ZW0tPmRhdGEpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocHJvdmlkZXIpOwotICB9IGVsc2UgaWYgKGtsYXNzLT5wcm9iZSkKLSAgICBkZXZpY2VzID0ga2xhc3MtPnByb2JlIChwcm92aWRlcik7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZwcm92aWRlci0+cHJpdi0+c3RhcnRfbG9jayk7Ci0KLSAgcmV0dXJuIGRldmljZXM7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9zdGFydDoKLSAqIEBwcm92aWRlcjogQSAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqCi0gKiBTdGFydHMgcHJvdmlkZXJpbmcgdGhlIGRldmljZXMuIFRoaXMgd2lsbCBjYXVzZSAjR1NUX01FU1NBR0VfREVWSUNFX0FEREVECi0gKiBhbmQgI0dTVF9NRVNTQUdFX0RFVklDRV9SRU1PVkVEIG1lc3NhZ2VzIHRvIGJlIHBvc3RlZCBvbiB0aGUgcHJvdmlkZXIncyBidXMKLSAqIHdoZW4gZGV2aWNlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCi0gKgotICogU2luY2UgdGhlICNHc3REZXZpY2VQcm92aWRlciBpcyBhIHNpbmdsZXRvbiwKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfc3RhcnQoKSBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gY2FsbGVkIGJ5IGFub3RoZXIKLSAqIHVzZXIgb2YgdGhlIG9iamVjdCwgZ3N0X2RldmljZV9wcm92aWRlcl9zdG9wKCkgbmVlZHMgdG8gYmUgY2FsbGVkIHRoZSBzYW1lCi0gKiBudW1iZXIgb2YgdGltZXMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGRldmljZSBwcm92aWRlcmluZyBjb3VsZCBiZSBzdGFydGVkCi0gKgotICogU2luY2U6IDEuNAotICovCi0KLWdib29sZWFuCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0IChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKQotewotICBHc3REZXZpY2VQcm92aWRlckNsYXNzICprbGFzczsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVIgKHByb3ZpZGVyKSwgRkFMU0UpOwotICBrbGFzcyA9IEdTVF9ERVZJQ0VfUFJPVklERVJfR0VUX0NMQVNTIChwcm92aWRlcik7Ci0KLSAgZ19tdXRleF9sb2NrICgmcHJvdmlkZXItPnByaXYtPnN0YXJ0X2xvY2spOwotCi0gIGlmIChwcm92aWRlci0+cHJpdi0+c3RhcnRlZF9jb3VudCA+IDApIHsKLSAgICByZXQgPSBUUlVFOwotICAgIGdvdG8gc3RhcnRlZDsKLSAgfQotCi0gIGlmIChrbGFzcy0+c3RhcnQpCi0gICAgcmV0ID0ga2xhc3MtPnN0YXJ0IChwcm92aWRlcik7Ci0KLSAgaWYgKHJldCkgewotICAgIHByb3ZpZGVyLT5wcml2LT5zdGFydGVkX2NvdW50Kys7Ci0gICAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKHByb3ZpZGVyLT5wcml2LT5idXMsIEZBTFNFKTsKLSAgfQotCi1zdGFydGVkOgotCi0gIGdfbXV0ZXhfdW5sb2NrICgmcHJvdmlkZXItPnByaXYtPnN0YXJ0X2xvY2spOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9zdG9wOgotICogQHByb3ZpZGVyOiBBICNHc3REZXZpY2VQcm92aWRlcgotICoKLSAqIERlY3JlYXNlcyB0aGUgdXNlLWNvdW50IGJ5IG9uZS4gSWYgdGhlIHVzZSBjb3VudCByZWFjaGVzIHplcm8sIHRoaXMKLSAqICNHc3REZXZpY2VQcm92aWRlciB3aWxsIHN0b3AgcHJvdmlkZXJpbmcgdGhlIGRldmljZXMuIFRoaXMgbmVlZHMgdG8gYmUKLSAqIGNhbGxlZCB0aGUgc2FtZSBudW1iZXIgb2YgdGltZXMgdGhhdCBnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0KCkgd2FzIGNhbGxlZC4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLQotdm9pZAotZ3N0X2RldmljZV9wcm92aWRlcl9zdG9wIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKQotewotICBHc3REZXZpY2VQcm92aWRlckNsYXNzICprbGFzczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfREVWSUNFX1BST1ZJREVSIChwcm92aWRlcikpOwotICBrbGFzcyA9IEdTVF9ERVZJQ0VfUFJPVklERVJfR0VUX0NMQVNTIChwcm92aWRlcik7Ci0KLSAgZ19tdXRleF9sb2NrICgmcHJvdmlkZXItPnByaXYtPnN0YXJ0X2xvY2spOwotCi0gIGlmIChwcm92aWRlci0+cHJpdi0+c3RhcnRlZF9jb3VudCA9PSAxKSB7Ci0gICAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKHByb3ZpZGVyLT5wcml2LT5idXMsIFRSVUUpOwotICAgIGlmIChrbGFzcy0+c3RvcCkKLSAgICAgIGtsYXNzLT5zdG9wIChwcm92aWRlcik7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChwcm92aWRlcik7Ci0gICAgZ19saXN0X2ZyZWVfZnVsbCAocHJvdmlkZXItPmRldmljZXMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnBhcmVudCk7Ci0gICAgcHJvdmlkZXItPmRldmljZXMgPSBOVUxMOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwcm92aWRlcik7Ci0gIH0gZWxzZSBpZiAocHJvdmlkZXItPnByaXYtPnN0YXJ0ZWRfY291bnQgPCAxKSB7Ci0gICAgZ19jcml0aWNhbAotICAgICAgICAoIlRyeWluZyB0byBzdG9wIGEgR3N0RGV2aWNlUHJvdmlkZXIgJXMgd2hpY2ggaXMgYWxyZWFkeSBzdG9wcGVkIiwKLSAgICAgICAgR1NUX09CSkVDVF9OQU1FIChwcm92aWRlcikpOwotICB9Ci0KLSAgcHJvdmlkZXItPnByaXYtPnN0YXJ0ZWRfY291bnQtLTsKLSAgZ19tdXRleF91bmxvY2sgKCZwcm92aWRlci0+cHJpdi0+c3RhcnRfbG9jayk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9mYWN0b3J5OgotICogQHByb3ZpZGVyOiBhICNHc3REZXZpY2VQcm92aWRlciB0byByZXF1ZXN0IHRoZSBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBvZi4KLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIGZhY3RvcnkgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhpcyBkZXZpY2UgcHJvdmlkZXIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdERldmljZVByb3ZpZGVyRmFjdG9yeSB1c2VkIGZvcgotICogICAgIGNyZWF0aW5nIHRoaXMgZGV2aWNlIHByb3ZpZGVyLiBubyByZWZjb3VudGluZyBpcyBuZWVkZWQuCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKgotZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfZmFjdG9yeSAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVIgKHByb3ZpZGVyKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIEdTVF9ERVZJQ0VfUFJPVklERVJfR0VUX0NMQVNTIChwcm92aWRlciktPmZhY3Rvcnk7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9jYW5fcHJvdmlkZXI6Ci0gKiBAcHJvdmlkZXI6IGEgI0dzdERldmljZVByb3ZpZGVyCi0gKgotICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zICVUUlVFLCB0aGVuIHRoZSBkZXZpY2UgcHJvdmlkZXIgY2FuIHByb3ZpZGVyIGlmCi0gKiBkZXZpY2VzIGFyZSBhZGRlZCBvciByZW1vdmVkLiBPdGhlcndpc2UsIGl0IGNhbiBvbmx5IGRvIHN0YXRpYyBwcm9iaW5nLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSAjR3N0RGV2aWNlUHJvdmlkZXIgc3VwcG9ydCBwcm92aWRlcmluZywgJUZBTFNFIG90aGVyd2lzZQotICovCi1nYm9vbGVhbgotZ3N0X2RldmljZV9wcm92aWRlcl9jYW5fbW9uaXRvciAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcikKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyAqa2xhc3M7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVIgKHByb3ZpZGVyKSwgRkFMU0UpOwotICBrbGFzcyA9IEdTVF9ERVZJQ0VfUFJPVklERVJfR0VUX0NMQVNTIChwcm92aWRlcik7Ci0KLSAgaWYgKGtsYXNzLT5zdGFydCkKLSAgICByZXR1cm4gVFJVRTsKLSAgZWxzZQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9idXM6Ci0gKiBAcHJvdmlkZXI6IGEgI0dzdERldmljZVByb3ZpZGVyCi0gKgotICogR2V0cyB0aGUgI0dzdEJ1cyBvZiB0aGlzICNHc3REZXZpY2VQcm92aWRlcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVzCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3RCdXMgKgotZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRV9QUk9WSURFUiAocHJvdmlkZXIpLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X29iamVjdF9yZWYgKHByb3ZpZGVyLT5wcml2LT5idXMpOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZDoKLSAqIEBwcm92aWRlcjogYSAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqIEBkZXZpY2U6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0RGV2aWNlIHRoYXQgaGFzIGJlZW4gYWRkZWQKLSAqCi0gKiBQb3N0cyBhIG1lc3NhZ2Ugb24gdGhlIHByb3ZpZGVyJ3MgI0dzdEJ1cyB0byBpbmZvcm0gYXBwbGljYXRpb25zIHRoYXQKLSAqIGEgbmV3IGRldmljZSBoYXMgYmVlbiBhZGRlZC4KLSAqCi0gKiBUaGlzIGlzIGZvciB1c2UgYnkgc3ViY2xhc3Nlcy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZCAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlciwKLSAgICBHc3REZXZpY2UgKiBkZXZpY2UpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0RFVklDRV9QUk9WSURFUiAocHJvdmlkZXIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0RFVklDRSAoZGV2aWNlKSk7Ci0KLSAgaWYgKCFnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKEdTVF9PQkpFQ1QgKGRldmljZSksIEdTVF9PQkpFQ1QgKHByb3ZpZGVyKSkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByb3ZpZGVyLCAiQ291bGQgbm90IHBhcmVudCBkZXZpY2UgJXAgdG8gcHJvdmlkZXIsIgotICAgICAgICAiIGl0IGFscmVhZHkgaGFzIGEgcGFyZW50IiwgZGV2aWNlKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKHByb3ZpZGVyKTsKLSAgcHJvdmlkZXItPmRldmljZXMgPSBnX2xpc3RfcHJlcGVuZCAocHJvdmlkZXItPmRldmljZXMsCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAoZGV2aWNlKSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwcm92aWRlcik7Ci0KLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19kZXZpY2VfYWRkZWQgKEdTVF9PQkpFQ1QgKHByb3ZpZGVyKSwgZGV2aWNlKTsKLSAgZ3N0X2J1c19wb3N0IChwcm92aWRlci0+cHJpdi0+YnVzLCBtZXNzYWdlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZGV2aWNlKTsKLX0KLQotCi0vKioKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX3JlbW92ZToKLSAqIEBwcm92aWRlcjogYSAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqIEBkZXZpY2U6IGEgI0dzdERldmljZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQKLSAqCi0gKiBQb3N0cyBhIG1lc3NhZ2Ugb24gdGhlIHByb3ZpZGVyJ3MgI0dzdEJ1cyB0byBpbmZvcm0gYXBwbGljYXRpb25zIHRoYXQKLSAqIGEgZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQuCi0gKgotICogVGhpcyBpcyBmb3IgdXNlIGJ5IHN1YmNsYXNzZXMuCi0gKgotICogU2luY2U6IDEuNAotICovCi12b2lkCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9yZW1vdmUgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIsCi0gICAgR3N0RGV2aWNlICogZGV2aWNlKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHTGlzdCAqaXRlbTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfREVWSUNFX1BST1ZJREVSIChwcm92aWRlcikpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfREVWSUNFIChkZXZpY2UpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHByb3ZpZGVyKTsKLSAgaXRlbSA9IGdfbGlzdF9maW5kIChwcm92aWRlci0+ZGV2aWNlcywgZGV2aWNlKTsKLSAgaWYgKGl0ZW0pIHsKLSAgICBwcm92aWRlci0+ZGV2aWNlcyA9IGdfbGlzdF9kZWxldGVfbGluayAocHJvdmlkZXItPmRldmljZXMsIGl0ZW0pOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwcm92aWRlcik7Ci0KLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19kZXZpY2VfcmVtb3ZlZCAoR1NUX09CSkVDVCAocHJvdmlkZXIpLCBkZXZpY2UpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKGRldmljZSwgInJlbW92ZWQiKTsKLSAgZ3N0X2J1c19wb3N0IChwcm92aWRlci0+cHJpdi0+YnVzLCBtZXNzYWdlKTsKLSAgaWYgKGl0ZW0pCi0gICAgZ3N0X29iamVjdF91bnBhcmVudCAoR1NUX09CSkVDVCAoZGV2aWNlKSk7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfaGlkZGVuX3Byb3ZpZGVyczoKLSAqIEBwcm92aWRlcjogYSAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqCi0gKiBHZXQgdGhlIHByb3ZpZGVyIGZhY3RvcnkgbmFtZXMgb2YgdGhlICNHc3REZXZpY2VQcm92aWRlciBpbnN0YW5jZXMgdGhhdAotICogYXJlIGhpZGRlbiBieSBAcHJvdmlkZXIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSBnY2hhciopOgotICogICBhIGxpc3Qgb2YgaGlkZGVuIHByb3ZpZGVycyBmYWN0b3J5IG5hbWVzIG9yICVOVUxMIHdoZW4KLSAqICAgbm90aGluZyBpcyBoaWRkZW4gYnkgQHByb3ZpZGVyLiBGcmVlIHdpdGggZ19zdHJmcmVldi4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdjaGFyICoqCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9oaWRkZW5fcHJvdmlkZXJzIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKQotewotICBHTGlzdCAqd2FsazsKLSAgZ3VpbnQgaSwgbGVuOwotICBnY2hhciAqKnJlcyA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVIgKHByb3ZpZGVyKSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwcm92aWRlcik7Ci0gIGxlbiA9IGdfbGlzdF9sZW5ndGggKHByb3ZpZGVyLT5wcml2LT5oaWRkZW5fcHJvdmlkZXJzKTsKLSAgaWYgKGxlbiA9PSAwKQotICAgIGdvdG8gZG9uZTsKLQotICByZXMgPSBnX25ldyAoZ2NoYXIgKiwgbGVuICsgMSk7Ci0gIGZvciAoaSA9IDAsIHdhbGsgPSBwcm92aWRlci0+cHJpdi0+aGlkZGVuX3Byb3ZpZGVyczsgd2FsazsKLSAgICAgIHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsayksIGkrKykKLSAgICByZXNbaV0gPSBnX3N0cmR1cCAod2Fsay0+ZGF0YSk7Ci0gIHJlc1tpXSA9IE5VTEw7Ci0KLWRvbmU6Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwcm92aWRlcik7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXI6Ci0gKiBAcHJvdmlkZXI6IGEgI0dzdERldmljZVByb3ZpZGVyCi0gKiBAbmFtZTogYSBwcm92aWRlciBmYWN0b3J5IG5hbWUKLSAqCi0gKiBNYWtlIEBwcm92aWRlciBoaWRlIHRoZSBkZXZpY2VzIGZyb20gdGhlIGZhY3Rvcnkgd2l0aCBAbmFtZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBAcHJvdmlkZXIgd2lsbCBhbHNvIHByb3ZpZGUgdGhlIGRldmljZXMgcmVwb3J0ZWQKLSAqIGJ5IHByb3ZpZGVyIGZhY3RvcnkgQG5hbWUuIEEgbW9uaXRvciBzaG91bGQgc3RvcCBtb25pdG9yaW5nIHRoZQotICogZGV2aWNlIHByb3ZpZGVyIHdpdGggQG5hbWUgdG8gYXZvaWQgZHVwbGljYXRlIGRldmljZXMuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2hpZGVfcHJvdmlkZXIgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHTGlzdCAqZmluZDsKLSAgY29uc3QgZ2NoYXIgKmhpZGRlbl9uYW1lID0gTlVMTDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfREVWSUNFX1BST1ZJREVSIChwcm92aWRlcikpOwotICBnX3JldHVybl9pZl9mYWlsIChuYW1lICE9IE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocHJvdmlkZXIpOwotICBmaW5kID0KLSAgICAgIGdfbGlzdF9maW5kX2N1c3RvbSAocHJvdmlkZXItPnByaXYtPmhpZGRlbl9wcm92aWRlcnMsIG5hbWUsCi0gICAgICAoR0NvbXBhcmVGdW5jKSBnX3N0cmNtcDApOwotICBpZiAoZmluZCA9PSBOVUxMKSB7Ci0gICAgaGlkZGVuX25hbWUgPSBuYW1lOwotICAgIHByb3ZpZGVyLT5wcml2LT5oaWRkZW5fcHJvdmlkZXJzID0KLSAgICAgICAgZ19saXN0X3ByZXBlbmQgKHByb3ZpZGVyLT5wcml2LT5oaWRkZW5fcHJvdmlkZXJzLCBnX3N0cmR1cCAobmFtZSkpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwcm92aWRlcik7Ci0KLSAgaWYgKGhpZGRlbl9uYW1lKQotICAgIGdfc2lnbmFsX2VtaXQgKHByb3ZpZGVyLCBnc3RfZGV2aWNlX3Byb3ZpZGVyX3NpZ25hbHNbUFJPVklERVJfSElEREVOXSwKLSAgICAgICAgMCwgaGlkZGVuX25hbWUpOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfdW5oaWRlX3Byb3ZpZGVyOgotICogQHByb3ZpZGVyOiBhICNHc3REZXZpY2VQcm92aWRlcgotICogQG5hbWU6IGEgcHJvdmlkZXIgZmFjdG9yeSBuYW1lCi0gKgotICogTWFrZSBAcHJvdmlkZXIgdW5oaWRlIHRoZSBkZXZpY2VzIGZyb20gZmFjdG9yeSBAbmFtZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBAcHJvdmlkZXIgd2lsbCBubyBsb25nZXIgcHJvdmlkZSB0aGUgZGV2aWNlcwotICogcmVwb3J0ZWQgYnkgcHJvdmlkZXIgZmFjdG9yeSBAbmFtZS4gQSBtb25pdG9yIHNob3VsZCBzdGFydAotICogbW9uaXRvcmluZyB0aGUgZGV2aWNlcyBmcm9tIHByb3ZpZGVyIGZhY3RvcnkgQG5hbWUgaW4gb3JkZXIgdG8gc2VlCi0gKiBhbGwgZGV2aWNlcyBhZ2Fpbi4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfdW5oaWRlX3Byb3ZpZGVyIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyLAotICAgIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR0xpc3QgKmZpbmQ7Ci0gIGdjaGFyICp1bmhpZGRlbl9uYW1lID0gTlVMTDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfREVWSUNFX1BST1ZJREVSIChwcm92aWRlcikpOwotICBnX3JldHVybl9pZl9mYWlsICh1bmhpZGRlbl9uYW1lICE9IE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocHJvdmlkZXIpOwotICBmaW5kID0KLSAgICAgIGdfbGlzdF9maW5kX2N1c3RvbSAocHJvdmlkZXItPnByaXYtPmhpZGRlbl9wcm92aWRlcnMsIG5hbWUsCi0gICAgICAoR0NvbXBhcmVGdW5jKSBnX3N0cmNtcDApOwotICBpZiAoZmluZCkgewotICAgIHVuaGlkZGVuX25hbWUgPSBmaW5kLT5kYXRhOwotICAgIHByb3ZpZGVyLT5wcml2LT5oaWRkZW5fcHJvdmlkZXJzID0KLSAgICAgICAgZ19saXN0X2RlbGV0ZV9saW5rIChwcm92aWRlci0+cHJpdi0+aGlkZGVuX3Byb3ZpZGVycywgZmluZCk7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHByb3ZpZGVyKTsKLQotICBpZiAodW5oaWRkZW5fbmFtZSkgewotICAgIGdfc2lnbmFsX2VtaXQgKHByb3ZpZGVyLAotICAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX3NpZ25hbHNbUFJPVklERVJfVU5ISURERU5dLCAwLCB1bmhpZGRlbl9uYW1lKTsKLSAgICBnX2ZyZWUgKHVuaGlkZGVuX25hbWUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuaCBiL2dzdC9nc3RkZXZpY2Vwcm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODM0NDdkLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RkZXZpY2Vwcm92aWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLSAqCi0gKiBnc3RkZXZpY2Vwcm92aWRlci5oOiBEZXZpY2UgcHJvYmluZyBhbmQgbW9uaXRvcmluZwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLQotCi0jaWZuZGVmIF9fR1NUX0RFVklDRV9QUk9WSURFUl9IX18KLSNkZWZpbmUgX19HU1RfREVWSUNFX1BST1ZJREVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGVsZW1lbnQuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RGV2aWNlUHJvdmlkZXIgR3N0RGV2aWNlUHJvdmlkZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyBHc3REZXZpY2VQcm92aWRlckNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERldmljZVByb3ZpZGVyUHJpdmF0ZSBHc3REZXZpY2VQcm92aWRlclByaXZhdGU7Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5Lmg+Ci0KLSNkZWZpbmUgR1NUX1RZUEVfREVWSUNFX1BST1ZJREVSICAgICAgICAgICAgICAgICAoZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSVNfREVWSUNFX1BST1ZJREVSKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0RFVklDRV9QUk9WSURFUikpCi0jZGVmaW5lIEdTVF9JU19ERVZJQ0VfUFJPVklERVJfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVIpKQotI2RlZmluZSBHU1RfREVWSUNFX1BST1ZJREVSX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfREVWSUNFX1BST1ZJREVSLCBHc3REZXZpY2VQcm92aWRlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFVklDRV9QUk9WSURFUihvYmopICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVIsIEdzdERldmljZVByb3ZpZGVyKSkKLSNkZWZpbmUgR1NUX0RFVklDRV9QUk9WSURFUl9DTEFTUyhrbGFzcykgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0RFVklDRV9QUk9WSURFUiwgR3N0RGV2aWNlUHJvdmlkZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9ERVZJQ0VfUFJPVklERVJfQ0FTVChvYmopICAgICAgICAgICAgKChHc3REZXZpY2VQcm92aWRlciAqKShvYmopKQotCi0KLS8qKgotICogR3N0RGV2aWNlUHJvdmlkZXI6Ci0gKiBAcGFyZW50OiBUaGUgcGFyZW50ICNHc3RPYmplY3QKLSAqIEBkZXZpY2VzOiBhICNHTGlzdCBvZiB0aGUgI0dzdERldmljZSBvYmplY3RzCi0gKgotICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgYmFzZSAjR3N0RGV2aWNlUHJvdmlkZXIKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXN0cnVjdCBfR3N0RGV2aWNlUHJvdmlkZXIgewotICBHc3RPYmplY3QgICAgICAgICBwYXJlbnQ7Ci0KLSAgLyogUHJvdGVjdGVkIGJ5IHRoZSBPYmplY3QgbG9jayAqLwotICBHTGlzdCAqZGV2aWNlczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLQotICBHc3REZXZpY2VQcm92aWRlclByaXZhdGUgKnByaXY7Ci0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0vKioKLSAqIEdzdERldmljZVByb3ZpZGVyQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiB0aGUgcGFyZW50ICNHc3RPYmplY3RDbGFzcyBzdHJ1Y3R1cmUKLSAqIEBmYWN0b3J5OiBhIHBvaW50ZXIgdG8gdGhlICNHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoaXMKLSAqICBwcm92aWRlcgotICogQHByb2JlOiBSZXR1cm5zIGEgbGlzdCBvZiBkZXZpY2VzIHRoYXQgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUuCi0gKiAgVGhpcyBzaG91bGQgbmV2ZXIgYmxvY2suCi0gKiBAc3RhcnQ6IFN0YXJ0cyBtb25pdG9yaW5nIGZvciBuZXcgZGV2aWNlcy4gT25seSBzdWJjbGFzc2VzIHRoYXQgY2FuIGtub3cKLSAqICB0aGF0IGRldmljZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAqIEBzdG9wOiBTdG9wcyBtb25pdG9yaW5nIGZvciBuZXcgZGV2aWNlcy4gT25seSBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50Ci0gKiAgdGhlIHN0YXJ0KCkgbWV0aG9kIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICoKLSAqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGJhc2UgI0dzdERldmljZVByb3ZpZGVyQ2xhc3MKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLQotc3RydWN0IF9Hc3REZXZpY2VQcm92aWRlckNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICAgcGFyZW50X2NsYXNzOwotCi0gIEdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAgICAgKmZhY3Rvcnk7Ci0KLSAgR0xpc3QqICAgICAgKCpwcm9iZSkgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpOwotCi0gIGdib29sZWFuICAgICgqc3RhcnQpIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKTsKLSAgdm9pZCAgICAgICAgKCpzdG9wKSAgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBtZXRhZGF0YTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF90eXBlICh2b2lkKTsKLQotCi1HTGlzdCAqICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzICAgIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKTsKLQotZ2Jvb2xlYW4gICAgZ3N0X2RldmljZV9wcm92aWRlcl9zdGFydCAgICAgICAgICAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcik7Ci12b2lkICAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0b3AgICAgICAgICAgIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKTsKLQotZ2Jvb2xlYW4gICAgZ3N0X2RldmljZV9wcm92aWRlcl9jYW5fbW9uaXRvciAgICAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcik7Ci0KLUdzdEJ1cyAqICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2J1cyAgICAgICAgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpOwotCi12b2lkICAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9hZGQgICAgIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGV2aWNlICogZGV2aWNlKTsKLXZvaWQgICAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX3JlbW92ZSAgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3REZXZpY2UgKiBkZXZpY2UpOwotCi1nY2hhciAqKiAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9oaWRkZW5fcHJvdmlkZXJzIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKTsKLXZvaWQgICAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfaGlkZV9wcm92aWRlciAgICAgICAgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAqIG5hbWUpOwotdm9pZCAgICAgICAgZ3N0X2RldmljZV9wcm92aWRlcl91bmhpZGVfcHJvdmlkZXIgICAgICAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICogbmFtZSk7Ci0KLQotLyogZGV2aWNlIHByb3ZpZGVyIGNsYXNzIG1ldGEgZGF0YSAqLwotdm9pZCAgICAgICAgZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfbWV0YWRhdGEgICAgICAgICAoR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyAqa2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKmxvbmduYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICpjbGFzc2lmaWNhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAqZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKmF1dGhvcik7Ci12b2lkICAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgIChHc3REZXZpY2VQcm92aWRlckNsYXNzICprbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAqbG9uZ25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKmNsYXNzaWZpY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICpkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAqYXV0aG9yKTsKLXZvaWQgICAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhICAgICAgICAgKEdzdERldmljZVByb3ZpZGVyQ2xhc3MgKiBrbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICoga2V5LCBjb25zdCBnY2hhciAqIHZhbHVlKTsKLXZvaWQgICAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YSAgKEdzdERldmljZVByb3ZpZGVyQ2xhc3MgKiBrbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICoga2V5LCBjb25zdCBnY2hhciAqIHZhbHVlKTsKLWNvbnN0IGdjaGFyICogZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGEgICAgICAgKEdzdERldmljZVByb3ZpZGVyQ2xhc3MgKiBrbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICoga2V5KTsKLQotLyogZmFjdG9yeSBtYW5hZ2VtZW50ICovCi1Hc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9mYWN0b3J5IChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3REZXZpY2VQcm92aWRlciwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfREVWSUNFX1BST1ZJREVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5jIGIvZ3N0L2dzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODM1Zjk5Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYworKysgL2Rldi9udWxsCkBAIC0xLDU4NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLSAqCi0gKiBnc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuYzogR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5IG9iamVjdCwgc3VwcG9ydCByb3V0aW5lcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQ3JlYXRlIEdzdERldmljZVByb3ZpZGVycyBmcm9tIGEgZmFjdG9yeQotICogQHNlZV9hbHNvOiAjR3N0RGV2aWNlUHJvdmlkZXIsICNHc3RQbHVnaW4sICNHc3RQbHVnaW5GZWF0dXJlLCAjR3N0UGFkVGVtcGxhdGUuCi0gKgotICogI0dzdERldmljZVByb3ZpZGVyRmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgZGV2aWNlIHByb3ZpZGVycy4gQQotICogR3N0RGV2aWNlUHJvdmlkZXJmYWN0b3J5IGNhbiBiZSBhZGRlZCB0byBhICNHc3RQbHVnaW4gYXMgaXQgaXMgYWxzbyBhCi0gKiAjR3N0UGx1Z2luRmVhdHVyZS4KLSAqCi0gKiBVc2UgdGhlIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kKCkgYW5kCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0KCkgZnVuY3Rpb25zIHRvIGNyZWF0ZSBkZXZpY2UKLSAqIHByb3ZpZGVyIGluc3RhbmNlcyBvciB1c2UgZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lKCkgYXMgYQotICogY29udmVuaWVudCBzaG9ydGN1dC4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5oIgotI2luY2x1ZGUgImdzdC5oIgotCi0jaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChkZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBkZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9kZWJ1ZwotCi1zdGF0aWMgdm9pZCBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2NsZWFudXAgKEdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAqCi0gICAgZmFjdG9yeSk7Ci0KLS8qIHN0YXRpYyBndWludCBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3Rvcnlfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KLQotLyogdGhpcyBpcyBkZWZpbmVkIGluIGdzdGVsZW1lbnQuYyAqLwotZXh0ZXJuIEdRdWFyayBfX2dzdF9kZXZpY2Vwcm92aWRlcmNsYXNzX2ZhY3Rvcnk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAoteyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChkZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9kZWJ1ZywgIkdTVF9ERVZJQ0VfUFJPVklERVJfRkFDVE9SWSIsIFwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1dISVRFIHwgR1NUX0RFQlVHX0JHX1JFRCwgXAotICAgICAgImRldmljZSBwcm92aWRlciBmYWN0b3JpZXMga2VlcCBpbmZvcm1hdGlvbiBhYm91dCBpbnN0YWxsZWQgZGV2aWNlIHByb3ZpZGVycyIpOyBcCi19Ci0KLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3REZXZpY2VQcm92aWRlckZhY3RvcnksIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeSwKLSAgICBHU1RfVFlQRV9QTFVHSU5fRkVBVFVSRSwgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2NsYXNzX2luaXQgKEdzdERldmljZVByb3ZpZGVyRmFjdG9yeUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaW5pdCAoR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICogZmFjdG9yeSkKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZIChvYmplY3QpOwotICBHc3REZXZpY2VQcm92aWRlciAqcHJvdmlkZXI7Ci0KLSAgZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2NsZWFudXAgKGZhY3RvcnkpOwotCi0gIHByb3ZpZGVyID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKCZmYWN0b3J5LT5wcm92aWRlcik7Ci0gIGlmIChwcm92aWRlcikKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm92aWRlcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZmluZDoKLSAqIEBuYW1lOiBuYW1lIG9mIGZhY3RvcnkgdG8gZmluZAotICoKLSAqIFNlYXJjaCBmb3IgYW4gZGV2aWNlIHByb3ZpZGVyIGZhY3Rvcnkgb2YgdGhlIGdpdmVuIG5hbWUuIFJlZnMgdGhlIHJldHVybmVkCi0gKiBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeTsgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6ICNHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgaWYKLSAqIGZvdW5kLCAlTlVMTCBvdGhlcndpc2UKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLUdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAqCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZmluZCAoY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOwotCi0gIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCBuYW1lLAotICAgICAgR1NUX1RZUEVfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUlkpOwotICBpZiAoZmVhdHVyZSkKLSAgICByZXR1cm4gR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZIChmZWF0dXJlKTsKLQotICAvKiB0aGlzIGlzbid0IGFuIGVycm9yLCBmb3IgaW5zdGFuY2Ugd2hlbiB5b3UgcXVlcnkgaWYgYW4gZGV2aWNlIHByb3ZpZGVyIGZhY3RvcnkgaXMKLSAgICogcHJlc2VudCAqLwotICBHU1RfTE9HICgibm8gc3VjaCBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBcIiVzXCIiLCBuYW1lKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9jbGVhbnVwIChHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKiBmYWN0b3J5KQotewotICBpZiAoZmFjdG9yeS0+bWV0YWRhdGEpIHsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKChHc3RTdHJ1Y3R1cmUgKikgZmFjdG9yeS0+bWV0YWRhdGEpOwotICAgIGZhY3RvcnktPm1ldGFkYXRhID0gTlVMTDsKLSAgfQotICBpZiAoZmFjdG9yeS0+dHlwZSkgewotICAgIGZhY3RvcnktPnR5cGUgPSBHX1RZUEVfSU5WQUxJRDsKLSAgfQotfQotCi0jZGVmaW5lIENIRUNLX01FVEFEQVRBX0ZJRUxEKGtsYXNzLCBuYW1lLCBrZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjb25zdCBnY2hhciAqbWV0YWZpZWxkID0gZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGEgKGtsYXNzLCBrZXkpOyAgICAgIFwKLSAgICBpZiAoR19VTkxJS0VMWSAobWV0YWZpZWxkID09IE5VTEwgfHwgKm1ldGFmaWVsZCA9PSAnXDAnKSkgeyAgICAgICAgICAgICAgICBcCi0gICAgICBnX3dhcm5pbmcgKCJEZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBtZXRhZGF0YSBmb3IgJyVzJyBoYXMgbm8gdmFsaWQgJXMgZmllbGQiLCBuYW1lLCBrZXkpOyAgICBcCi0gICAgICBnb3RvIGRldGFpbHNlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gXAotICB9IEdfU1RNVF9FTkQ7Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9yZWdpc3RlcjoKLSAqIEBwbHVnaW46IChhbGxvdy1ub25lKTogI0dzdFBsdWdpbiB0byByZWdpc3RlciB0aGUgZGV2aWNlIHByb3ZpZGVyIHdpdGgsIG9yICVOVUxMIGZvcgotICogICAgIGEgc3RhdGljIGRldmljZSBwcm92aWRlci4KLSAqIEBuYW1lOiBuYW1lIG9mIGRldmljZSBwcm92aWRlcnMgb2YgdGhpcyB0eXBlCi0gKiBAcmFuazogcmFuayBvZiBkZXZpY2UgcHJvdmlkZXIgKGhpZ2hlciByYW5rIG1lYW5zIG1vcmUgaW1wb3J0YW5jZSB3aGVuIGF1dG9wbHVnZ2luZykKLSAqIEB0eXBlOiBHVHlwZSBvZiBkZXZpY2UgcHJvdmlkZXIgdG8gcmVnaXN0ZXIKLSAqCi0gKiBDcmVhdGUgYSBuZXcgZGV2aWNlIHByb3ZpZGVyZmFjdG9yeSBjYXBhYmxlIG9mIGluc3RhbnRpYXRpbmcgb2JqZWN0cyBvZiB0aGUKLSAqIEB0eXBlIGFuZCBhZGQgdGhlIGZhY3RvcnkgdG8gQHBsdWdpbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgdGhlIHJlZ2lzdGVyaW5nIHN1Y2NlZWRlZCwgJUZBTFNFIG9uIGVycm9yCi0gKgotICogU2luY2U6IDEuNAotICovCi1nYm9vbGVhbgotZ3N0X2RldmljZV9wcm92aWRlcl9yZWdpc3RlciAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBnY2hhciAqIG5hbWUsCi0gICAgZ3VpbnQgcmFuaywgR1R5cGUgdHlwZSkKLXsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZXhpc3RpbmdfZmVhdHVyZTsKLSAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5OwotICBHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKmZhY3Rvcnk7Ci0gIEdzdERldmljZVByb3ZpZGVyQ2xhc3MgKmtsYXNzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfdHlwZV9pc19hICh0eXBlLCBHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVIpLCBGQUxTRSk7Ci0KLSAgcmVnaXN0cnkgPSBnc3RfcmVnaXN0cnlfZ2V0ICgpOwotCi0gIC8qIGNoZWNrIGlmIGZlYXR1cmUgYWxyZWFkeSBleGlzdHMsIGlmIGl0IGV4aXN0cyB0aGVyZSBpcyBubyBuZWVkIHRvIHVwZGF0ZSBpdAotICAgKiB3aGVuIHRoZSByZWdpc3RyeSBpcyBnZXR0aW5nIHVwZGF0ZWQsIG91dGRhdGVkIHBsdWdpbnMgYW5kIGFsbCB0aGVpcgotICAgKiBmZWF0dXJlcyBhcmUgcmVtb3ZlZCBhbmQgcmVhZGRlZC4KLSAgICovCi0gIGV4aXN0aW5nX2ZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBuYW1lKTsKLSAgaWYgKGV4aXN0aW5nX2ZlYXR1cmUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgInVwZGF0ZSBleGlzdGluZyBmZWF0dXJlICVwICglcykiLAotICAgICAgICBleGlzdGluZ19mZWF0dXJlLCBuYW1lKTsKLSAgICBmYWN0b3J5ID0gR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZX0NBU1QgKGV4aXN0aW5nX2ZlYXR1cmUpOwotICAgIGZhY3RvcnktPnR5cGUgPSB0eXBlOwotICAgIGV4aXN0aW5nX2ZlYXR1cmUtPmxvYWRlZCA9IFRSVUU7Ci0gICAgZ190eXBlX3NldF9xZGF0YSAodHlwZSwgX19nc3RfZGV2aWNlcHJvdmlkZXJjbGFzc19mYWN0b3J5LCBmYWN0b3J5KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChleGlzdGluZ19mZWF0dXJlKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGZhY3RvcnkgPQotICAgICAgR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZX0NBU1QgKGdfb2JqZWN0X25ld3YKLSAgICAgIChHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVJfRkFDVE9SWSwgMCwgTlVMTCkpOwotICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X25hbWUgKEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KSwgbmFtZSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChmYWN0b3J5LCAiQ3JlYXRlZCBuZXcgZGV2aWNlIHByb3ZpZGVyZmFjdG9yeSBmb3IgdHlwZSAlcyIsCi0gICAgICBnX3R5cGVfbmFtZSAodHlwZSkpOwotCi0gIC8qIHByb3ZpZGUgaW5mbyBuZWVkZWQgZHVyaW5nIGNsYXNzIHN0cnVjdHVyZSBzZXR1cCAqLwotICBnX3R5cGVfc2V0X3FkYXRhICh0eXBlLCBfX2dzdF9kZXZpY2Vwcm92aWRlcmNsYXNzX2ZhY3RvcnksIGZhY3RvcnkpOwotICBrbGFzcyA9IEdTVF9ERVZJQ0VfUFJPVklERVJfQ0xBU1MgKGdfdHlwZV9jbGFzc19yZWYgKHR5cGUpKTsKLQotICBDSEVDS19NRVRBREFUQV9GSUVMRCAoa2xhc3MsIG5hbWUsIEdTVF9FTEVNRU5UX01FVEFEQVRBX0xPTkdOQU1FKTsKLSAgQ0hFQ0tfTUVUQURBVEFfRklFTEQgKGtsYXNzLCBuYW1lLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyk7Ci0gIENIRUNLX01FVEFEQVRBX0ZJRUxEIChrbGFzcywgbmFtZSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT04pOwotICBDSEVDS19NRVRBREFUQV9GSUVMRCAoa2xhc3MsIG5hbWUsIEdTVF9FTEVNRU5UX01FVEFEQVRBX0FVVEhPUik7Ci0KLSAgZmFjdG9yeS0+dHlwZSA9IHR5cGU7Ci0gIGZhY3RvcnktPm1ldGFkYXRhID0gZ3N0X3N0cnVjdHVyZV9jb3B5ICgoR3N0U3RydWN0dXJlICopIGtsYXNzLT5tZXRhZGF0YSk7Ci0KLSAgaWYgKHBsdWdpbiAmJiBwbHVnaW4tPmRlc2MubmFtZSkgewotICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luX25hbWUgPSBwbHVnaW4tPmRlc2MubmFtZTsKLSAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbiA9IHBsdWdpbjsKLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyICgoR09iamVjdCAqKSBwbHVnaW4sCi0gICAgICAgIChncG9pbnRlciAqKSAmIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbl9uYW1lID0gIk5VTEwiOwotICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luID0gTlVMTDsKLSAgfQotICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsgKEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KSwgcmFuayk7Ci0gIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+bG9hZGVkID0gVFJVRTsKLQotICBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSkpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotZGV0YWlsc2Vycm9yOgotICB7Ci0gICAgZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2NsZWFudXAgKGZhY3RvcnkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXQ6Ci0gKiBAZmFjdG9yeTogZmFjdG9yeSB0byBpbnN0YW50aWF0ZQotICoKLSAqIFJldHVybnMgdGhlIGRldmljZSBwcm92aWRlciBvZiB0aGUgdHlwZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZpY2UKLSAqIHByb3ZpZGVyZmFjdG9yeS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdGhlICNHc3REZXZpY2VQcm92aWRlciBvciAlTlVMTAotICogaWYgdGhlIGRldmljZSBwcm92aWRlciBjb3VsZG4ndCBiZSBjcmVhdGVkCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3REZXZpY2VQcm92aWRlciAqCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0IChHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKiBmYWN0b3J5KQotewotICBHc3REZXZpY2VQcm92aWRlciAqZGV2aWNlX3Byb3ZpZGVyOwotICBHc3REZXZpY2VQcm92aWRlckNsYXNzICpvY2xhc3M7Ci0gIEdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAqbmV3ZmFjdG9yeTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmFjdG9yeSAhPSBOVUxMLCBOVUxMKTsKLQotICBuZXdmYWN0b3J5ID0KLSAgICAgIEdTVF9ERVZJQ0VfUFJPVklERVJfRkFDVE9SWSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKEdTVF9QTFVHSU5fRkVBVFVSRQotICAgICAgICAgIChmYWN0b3J5KSkpOwotCi0gIGlmIChuZXdmYWN0b3J5ID09IE5VTEwpCi0gICAgZ290byBsb2FkX2ZhaWxlZDsKLQotICBmYWN0b3J5ID0gbmV3ZmFjdG9yeTsKLQotICBHU1RfSU5GTyAoImdldHRpbmcgZGV2aWNlIHByb3ZpZGVyIFwiJXNcIiIsIEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSkpOwotCi0gIGlmIChmYWN0b3J5LT50eXBlID09IDApCi0gICAgZ290byBub190eXBlOwotCi0gIGRldmljZV9wcm92aWRlciA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgmbmV3ZmFjdG9yeS0+cHJvdmlkZXIpOwotICBpZiAoZGV2aWNlX3Byb3ZpZGVyKSB7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci0gICAgcmV0dXJuIGdzdF9vYmplY3RfcmVmIChkZXZpY2VfcHJvdmlkZXIpOwotICB9Ci0KLSAgLyogY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBkZXZpY2UgcHJvdmlkZXIsIGNhc3Qgc28gd2UgZG9uJ3QgYXNzZXJ0IG9uIE5VTEwKLSAgICogYWxzbyBzZXQgbmFtZSBhcyBlYXJseSBhcyB3ZSBjYW4KLSAgICovCi0gIGRldmljZV9wcm92aWRlciA9IEdTVF9ERVZJQ0VfUFJPVklERVJfQ0FTVCAoZ19vYmplY3RfbmV3diAoZmFjdG9yeS0+dHlwZSwgMCwKLSAgICAgICAgICBOVUxMKSk7Ci0gIGlmIChHX1VOTElLRUxZIChkZXZpY2VfcHJvdmlkZXIgPT0gTlVMTCkpCi0gICAgZ290byBub19kZXZpY2VfcHJvdmlkZXI7Ci0KLSAgLyogZmlsbCBpbiB0aGUgcG9pbnRlciB0byB0aGUgZmFjdG9yeSBpbiB0aGUgZGV2aWNlIHByb3ZpZGVyIGNsYXNzLiBUaGUKLSAgICogY2xhc3Mgd2lsbCBub3QgYmUgdW5yZWZmZWQgY3VycmVudGx5LgotICAgKiBCZSB0aHJlYWQgc2FmZSBhcyB0aGVyZSBtaWdodCBiZSAyIHRocmVhZHMgY3JlYXRpbmcgdGhlIGZpcnN0IGluc3RhbmNlIG9mCi0gICAqIGFuIGRldmljZSBwcm92aWRlciBhdCB0aGUgc2FtZSBtb21lbnQKLSAgICovCi0gIG9jbGFzcyA9IEdTVF9ERVZJQ0VfUFJPVklERVJfR0VUX0NMQVNTIChkZXZpY2VfcHJvdmlkZXIpOwotICBpZiAoIWdfYXRvbWljX3BvaW50ZXJfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZvY2xhc3MtPmZhY3RvcnksIE5VTEwsIGZhY3RvcnkpKSB7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogVGhpcyByZWYgd2lsbCBuZXZlciBiZSBkcm9wcGVkIGFzIHRoZSBjbGFzcyBpcyBuZXZlciBkZXN0cm95ZWQgKi8KLSAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChmYWN0b3J5LCBHU1RfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCk7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3JlZl9zaW5rIChkZXZpY2VfcHJvdmlkZXIpOwotCi0gIC8qIFdlIHVzZSBhbiBhdG9taWMgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNyZWF0ZSB0d28gaW4gcGFyYWxsZWwgKi8KLSAgaWYgKCFnX2F0b21pY19wb2ludGVyX2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmbmV3ZmFjdG9yeS0+cHJvdmlkZXIsIE5VTEwsCi0gICAgICAgICAgZGV2aWNlX3Byb3ZpZGVyKSkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKGRldmljZV9wcm92aWRlcik7Ci0KLSAgICBkZXZpY2VfcHJvdmlkZXIgPSBnX2F0b21pY19wb2ludGVyX2dldCAoJm5ld2ZhY3RvcnktPnByb3ZpZGVyKTsKLSAgfQotCi0gIEdTVF9ERUJVRyAoImNyZWF0ZWQgZGV2aWNlIHByb3ZpZGVyIFwiJXNcIiIsIEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSkpOwotCi0gIHJldHVybiBnc3Rfb2JqZWN0X3JlZiAoZGV2aWNlX3Byb3ZpZGVyKTsKLQotICAvKiBFUlJPUlMgKi8KLWxvYWRfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmYWN0b3J5LAotICAgICAgICAibG9hZGluZyBwbHVnaW4gY29udGFpbmluZyBmZWF0dXJlICVzIHJldHVybmVkIE5VTEwhIiwKLSAgICAgICAgR1NUX09CSkVDVF9OQU1FIChmYWN0b3J5KSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX3R5cGU6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZhY3RvcnksICJmYWN0b3J5IGhhcyBubyB0eXBlIik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX2RldmljZV9wcm92aWRlcjoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZmFjdG9yeSwgImNvdWxkIG5vdCBjcmVhdGUgZGV2aWNlIHByb3ZpZGVyIik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2J5X25hbWU6Ci0gKiBAZmFjdG9yeW5hbWU6IGEgbmFtZWQgZmFjdG9yeSB0byBpbnN0YW50aWF0ZQotICoKLSAqIFJldHVybnMgdGhlIGRldmljZSBwcm92aWRlciBvZiB0aGUgdHlwZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZpY2UKLSAqIHByb3ZpZGVyIGZhY3RvcnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdERldmljZVByb3ZpZGVyIG9yICVOVUxMCi0gKiBpZiB1bmFibGUgdG8gY3JlYXRlIGRldmljZSBwcm92aWRlcgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotR3N0RGV2aWNlUHJvdmlkZXIgKgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lIChjb25zdCBnY2hhciAqIGZhY3RvcnluYW1lKQotewotICBHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKmZhY3Rvcnk7Ci0gIEdzdERldmljZVByb3ZpZGVyICpkZXZpY2VfcHJvdmlkZXI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZhY3RvcnluYW1lICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2lzX2luaXRpYWxpemVkICgpLCBOVUxMKTsKLQotICBHU1RfTE9HICgiZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5OiBnZXRfYnlfbmFtZSBcIiVzXCIiLCBmYWN0b3J5bmFtZSk7Ci0KLSAgZmFjdG9yeSA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kIChmYWN0b3J5bmFtZSk7Ci0gIGlmIChmYWN0b3J5ID09IE5VTEwpCi0gICAgZ290byBub19mYWN0b3J5OwotCi0gIEdTVF9MT0dfT0JKRUNUIChmYWN0b3J5LCAiZm91bmQgZmFjdG9yeSAlcCIsIGZhY3RvcnkpOwotICBkZXZpY2VfcHJvdmlkZXIgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0IChmYWN0b3J5KTsKLSAgaWYgKGRldmljZV9wcm92aWRlciA9PSBOVUxMKQotICAgIGdvdG8gY3JlYXRlX2ZhaWxlZDsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLSAgcmV0dXJuIGRldmljZV9wcm92aWRlcjsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2ZhY3Rvcnk6Ci0gIHsKLSAgICBHU1RfSU5GTyAoIm5vIHN1Y2ggZGV2aWNlIHByb3ZpZGVyIGZhY3RvcnkgXCIlc1wiISIsIGZhY3RvcnluYW1lKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotY3JlYXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9JTkZPX09CSkVDVCAoZmFjdG9yeSwgImNvdWxkbid0IGNyZWF0ZSBpbnN0YW5jZSEiKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfZGV2aWNlX3Byb3ZpZGVyX3R5cGU6Ci0gKiBAZmFjdG9yeTogZmFjdG9yeSB0byBnZXQgbWFuYWdlZCAjR1R5cGUgZnJvbQotICoKLSAqIEdldCB0aGUgI0dUeXBlIGZvciBkZXZpY2UgcHJvdmlkZXJzIG1hbmFnZWQgYnkgdGhpcyBmYWN0b3J5LiBUaGUgdHlwZSBjYW4KLSAqIG9ubHkgYmUgcmV0cmlldmVkIGlmIHRoZSBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBpcyBsb2FkZWQsIHdoaWNoIGNhbiBiZQotICogYXNzdXJlZCB3aXRoIGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkKCkuCi0gKgotICogUmV0dXJuczogdGhlICNHVHlwZSBmb3IgZGV2aWNlIHByb3ZpZGVycyBtYW5hZ2VkIGJ5IHRoaXMgZmFjdG9yeS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLUdUeXBlCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2RldmljZV9wcm92aWRlcl90eXBlIChHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKgotICAgIGZhY3RvcnkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUlkgKGZhY3RvcnkpLAotICAgICAgR19UWVBFX0lOVkFMSUQpOwotCi0gIHJldHVybiBmYWN0b3J5LT50eXBlOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGE6Ci0gKiBAZmFjdG9yeTogYSAjR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ci0gKiBAa2V5OiBhIGtleQotICoKLSAqIEdldCB0aGUgbWV0YWRhdGEgb24gQGZhY3Rvcnkgd2l0aCBAa2V5LgotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSk6IHRoZSBtZXRhZGF0YSB3aXRoIEBrZXkgb24gQGZhY3Rvcnkgb3IgJU5VTEwKLSAqIHdoZW4gdGhlcmUgd2FzIG5vIG1ldGFkYXRhIHdpdGggdGhlIGdpdmVuIEBrZXkuCi0gKgotICogU2luY2U6IDEuNAotICovCi1jb25zdCBnY2hhciAqCi1nc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X21ldGFkYXRhIChHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKiBmYWN0b3J5LAotICAgIGNvbnN0IGdjaGFyICoga2V5KQotewotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nICgoR3N0U3RydWN0dXJlICopIGZhY3RvcnktPm1ldGFkYXRhLCBrZXkpOwotfQotCi0vKioKLSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5czoKLSAqIEBmYWN0b3J5OiBhICNHc3REZXZpY2VQcm92aWRlckZhY3RvcnkKLSAqCi0gKiBHZXQgdGhlIGF2YWlsYWJsZSBrZXlzIGZvciB0aGUgbWV0YWRhdGEgb24gQGZhY3RvcnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgdXRmOCkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAobnVsbGFibGUpOgotICogYSAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIGtleSBzdHJpbmdzLCBvciAlTlVMTCB3aGVuIHRoZXJlIGlzIG5vCi0gKiBtZXRhZGF0YS4gRnJlZSB3aXRoIGdfc3RyZnJlZXYoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gKgotICogU2luY2U6IDEuNAotICovCi1nY2hhciAqKgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzIChHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKgotICAgIGZhY3RvcnkpCi17Ci0gIEdzdFN0cnVjdHVyZSAqbWV0YWRhdGE7Ci0gIGdjaGFyICoqYXJyOwotICBnaW50IGksIG51bTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZIChmYWN0b3J5KSwgTlVMTCk7Ci0KLSAgbWV0YWRhdGEgPSAoR3N0U3RydWN0dXJlICopIGZhY3RvcnktPm1ldGFkYXRhOwotICBpZiAobWV0YWRhdGEgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBudW0gPSBnc3Rfc3RydWN0dXJlX25fZmllbGRzIChtZXRhZGF0YSk7Ci0gIGlmIChudW0gPT0gMCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBhcnIgPSBnX25ldyAoZ2NoYXIgKiwgbnVtICsgMSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewotICAgIGFycltpXSA9IGdfc3RyZHVwIChnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lIChtZXRhZGF0YSwgaSkpOwotICB9Ci0gIGFycltpXSA9IE5VTEw7Ci0gIHJldHVybiBhcnI7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzdjoKLSAqIEBmYWN0b3J5OiBhICNHc3REZXZpY2VQcm92aWRlckZhY3RvcnkKLSAqIEBjbGFzc2VzOiAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpIChhbGxvdy1ub25lKTogYSAlTlVMTCB0ZXJtaW5hdGVkIGFycmF5Ci0gKiAgIG9mIGNsYXNzZXMgdG8gbWF0Y2gsIG9ubHkgbWF0Y2ggaWYgYWxsIGNsYXNzZXMgYXJlIG1hdGNoZWQKLSAqCi0gKiBDaGVjayBpZiBAZmFjdG9yeSBtYXRjaGVzIGFsbCBvZiB0aGUgZ2l2ZW4gY2xhc3NlcwotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBmYWN0b3J5IG1hdGNoZXMuCi0gKgotICogU2luY2U6IDEuNAotICovCi1nYm9vbGVhbgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzdiAoR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICogZmFjdG9yeSwKLSAgICBnY2hhciAqKiBjbGFzc2VzKQotewotICBjb25zdCBnY2hhciAqa2xhc3M7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ERVZJQ0VfUFJPVklERVJfRkFDVE9SWSAoZmFjdG9yeSksIEZBTFNFKTsKLQotICBrbGFzcyA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKGZhY3RvcnksCi0gICAgICBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyk7Ci0KLSAgaWYgKGtsYXNzID09IE5VTEwpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChmYWN0b3J5LAotICAgICAgICAiZGV2aWNlIHByb3ZpZGVyIGZhY3RvcnkgaXMgbWlzc2luZyBrbGFzcyBpZGVudGlmaWVycyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGZvciAoOyBjbGFzc2VzICE9IE5VTEwgJiYgY2xhc3Nlc1swXSAhPSBOVUxMOyBjbGFzc2VzKyspIHsKLSAgICBjb25zdCBnY2hhciAqZm91bmQ7Ci0gICAgZ3VpbnQgbGVuOwotCi0gICAgaWYgKGNsYXNzZXNbMF1bMF0gPT0gJ1wwJykKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgZm91bmQgPSBzdHJzdHIgKGtsYXNzLCBjbGFzc2VzWzBdKTsKLQotICAgIGlmICghZm91bmQpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKGZvdW5kICE9IGtsYXNzICYmICooZm91bmQgLSAxKSAhPSAnLycpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBsZW4gPSBzdHJsZW4gKGNsYXNzZXNbMF0pOwotICAgIGlmIChmb3VuZFtsZW5dICE9IDAgJiYgZm91bmRbbGVuXSAhPSAnLycpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaGFzX2NsYXNzZXM6Ci0gKiBAZmFjdG9yeTogYSAjR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ci0gKiBAY2xhc3NlczogKGFsbG93LW5vbmUpOiBhICIvIiBzZXBhcmF0ZSBsaXN0IG9mIGNsYXNzZXMgdG8gbWF0Y2gsIG9ubHkgbWF0Y2gKLSAqICAgICBpZiBhbGwgY2xhc3NlcyBhcmUgbWF0Y2hlZAotICoKLSAqIENoZWNrIGlmIEBmYWN0b3J5IG1hdGNoZXMgYWxsIG9mIHRoZSBnaXZlbiBAY2xhc3NlcwotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBmYWN0b3J5IG1hdGNoZXMgb3IgaWYgQGNsYXNzZXMgaXMgJU5VTEwuCi0gKgotICogU2luY2U6IDEuNAotICovCi1nYm9vbGVhbgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzIChHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKiBmYWN0b3J5LAotICAgIGNvbnN0IGdjaGFyICogY2xhc3NlcykKLXsKLSAgZ2NoYXIgKipjbGFzc2VzdjsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGlmIChjbGFzc2VzID09IE5VTEwpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgY2xhc3Nlc3YgPSBnX3N0cnNwbGl0IChjbGFzc2VzLCAiLyIsIDApOwotCi0gIHJlcyA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3Nlc3YgKGZhY3RvcnksIGNsYXNzZXN2KTsKLQotICBnX3N0cmZyZWV2IChjbGFzc2Vzdik7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1kZXZpY2VfcHJvdmlkZXJfZmlsdGVyIChHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSwgR3N0UmFuayAqIG1pbnJhbmspCi17Ci0gIC8qIHdlIG9ubHkgY2FyZSBhYm91dCBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yaWVzICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0lTX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZIChmZWF0dXJlKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiAoZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmZWF0dXJlKSA+PSAqbWlucmFuayk7Ci19Ci0KLS8qKgotICogZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2xpc3RfZ2V0X2RldmljZV9wcm92aWRlcnM6Ci0gKiBAbWlucmFuazogTWluaW11bSByYW5rCi0gKgotICogR2V0IGEgbGlzdCBvZiBmYWN0b3JpZXMgd2l0aCBhIHJhbmsgZ3JlYXRlciBvciBlcXVhbCB0byBAbWlucmFuay4KLSAqIFRoZSBsaXN0IG9mIGZhY3RvcmllcyBpcyByZXR1cm5lZCBieSBkZWNyZWFzaW5nIHJhbmsuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LkRldmljZVByb3ZpZGVyRmFjdG9yeSk6Ci0gKiBhICNHTGlzdCBvZiAjR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5IGRldmljZSBwcm92aWRlcnMuIFVzZQotICogZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIGFmdGVyIHVzYWdlLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotR0xpc3QgKgotZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2xpc3RfZ2V0X2RldmljZV9wcm92aWRlcnMgKEdzdFJhbmsgbWlucmFuaykKLXsKLSAgR0xpc3QgKnJlc3VsdDsKLQotICAvKiBnZXQgdGhlIGZlYXR1cmUgbGlzdCB1c2luZyB0aGUgZmlsdGVyICovCi0gIHJlc3VsdCA9IGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgIChHc3RQbHVnaW5GZWF0dXJlRmlsdGVyKSBkZXZpY2VfcHJvdmlkZXJfZmlsdGVyLCBGQUxTRSwgJm1pbnJhbmspOwotCi0gIC8qIHNvcnQgb24gcmFuayBhbmQgbmFtZSAqLwotICByZXN1bHQgPSBnX2xpc3Rfc29ydCAocmVzdWx0LCBnc3RfcGx1Z2luX2ZlYXR1cmVfcmFua19jb21wYXJlX2Z1bmMpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmggYi9nc3QvZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjN2UyNGYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGRldmljZXByb3ZpZGVyZmFjdG9yeS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDAwLDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqICAgICAgICAgICAgICAgMjAxMiBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0gKgotICogZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5Lmg6IEhlYWRlciBmb3IgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotCi0KLSNpZm5kZWYgX19HU1RfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUllfSF9fCi0jZGVmaW5lIF9fR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZX0hfXwotCi0vKioKLSAqIEdzdERldmljZVByb3ZpZGVyRmFjdG9yeToKLSAqCi0gKiBUaGUgb3BhcXVlICNHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgZGF0YSBzdHJ1Y3R1cmUuCi0gKgotICogU2luY2U6IDEuNAotICovCi0KLS8qKgotICogR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3M6Ci0gKgotICogVGhlIG9wYXF1ZSAjR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3MgZGF0YSBzdHJ1Y3R1cmUuCi0gKgotICogU2luY2U6IDEuNAotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5IEdzdERldmljZVByb3ZpZGVyRmFjdG9yeTsKLXR5cGVkZWYgc3RydWN0IF9Hc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzcyBHc3REZXZpY2VQcm92aWRlckZhY3RvcnlDbGFzczsKLQotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmZlYXR1cmUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZGV2aWNlcHJvdmlkZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZICAgICAgICAgICAgKGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUlkob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVJfRkFDVE9SWSxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5KSkKLSNkZWZpbmUgR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVJfRkFDVE9SWSxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUlkob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVJfRkFDVE9SWSkpCi0jZGVmaW5lIEdTVF9JU19ERVZJQ0VfUFJPVklERVJfRkFDVE9SWV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUlkpKQotI2RlZmluZSBHU1RfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUllfQ0FTVChvYmopICAgICAgICgoR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICopKG9iaikpCi0KLUdUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfdHlwZSAgICAgICAgICAodm9pZCk7Ci0KLUdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAqIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kICAgICAgICAgICAgKGNvbnN0IGdjaGFyICpuYW1lKTsKLQotR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9kZXZpY2VfcHJvdmlkZXJfdHlwZSAoR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICpmYWN0b3J5KTsKLQotY29uc3QgZ2NoYXIgKiAgICAgICAgICAgZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9tZXRhZGF0YSAgICAgICAoR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICpmYWN0b3J5LCBjb25zdCBnY2hhciAqa2V5KTsKLWdjaGFyICoqICAgICAgICAgICAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5cyAgKEdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAqZmFjdG9yeSk7Ci0KLUdzdERldmljZVByb3ZpZGVyKiAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0ICAgICAgICAgICAgICAgIChHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKmZhY3RvcnkpIEdfR05VQ19NQUxMT0M7Ci1Hc3REZXZpY2VQcm92aWRlciogICAgICAgZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9ieV9uYW1lICAgICAgICAoY29uc3QgZ2NoYXIgKmZhY3RvcnluYW1lKSBHX0dOVUNfTUFMTE9DOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX3JlZ2lzdGVyICAgICAgICAgICAgICAgICAgIChHc3RQbHVnaW4gKnBsdWdpbiwgY29uc3QgZ2NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHJhbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlIHR5cGUpOwotCi1nYm9vbGVhbiAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3Nlc3YgKEdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAqIGZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKiogY2xhc3Nlcyk7Ci0KLWdib29sZWFuICAgICAgZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzIChHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKmZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBjbGFzc2VzKTsKLQotR0xpc3QgKiAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfbGlzdF9nZXRfZGV2aWNlX3Byb3ZpZGVycyAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UmFuayBtaW5yYW5rKSBHX0dOVUNfTUFMTE9DOwotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdERldmljZVByb3ZpZGVyRmFjdG9yeSwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUllfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0ZWxlbWVudC5jIGIvZ3N0L2dzdGVsZW1lbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkZTYxZS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0ZWxlbWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ5OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGVsZW1lbnQuYzogVGhlIGJhc2UgZWxlbWVudCwgYWxsIGVsZW1lbnRzIGRlcml2ZSBmcm9tIHRoaXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0ZWxlbWVudAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbGwgcGlwZWxpbmUgZWxlbWVudHMKLSAqIEBzZWVfYWxzbzogI0dzdEVsZW1lbnRGYWN0b3J5LCAjR3N0UGFkCi0gKgotICogR3N0RWxlbWVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBuZWVkZWQgdG8gY29uc3RydWN0IGFuIGVsZW1lbnQgdGhhdAotICogY2FuIGJlIHVzZWQgaW4gYSBHU3RyZWFtZXIgcGlwZWxpbmUuIFBsZWFzZSByZWZlciB0byB0aGUgcGx1Z2luIHdyaXRlcnMKLSAqIGd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nICNHc3RFbGVtZW50IHN1YmNsYXNzZXMuCi0gKgotICogVGhlIG5hbWUgb2YgYSAjR3N0RWxlbWVudCBjYW4gYmUgZ2V0IHdpdGggZ3N0X2VsZW1lbnRfZ2V0X25hbWUoKSBhbmQgc2V0IHdpdGgKLSAqIGdzdF9lbGVtZW50X3NldF9uYW1lKCkuICBGb3Igc3BlZWQsIEdTVF9FTEVNRU5UX05BTUUoKSBjYW4gYmUgdXNlZCBpbiB0aGUKLSAqIGNvcmUgd2hlbiB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbG9ja2luZy4gRG8gbm90IHVzZSB0aGlzIGluIHBsdWctaW5zIG9yCi0gKiBhcHBsaWNhdGlvbnMgaW4gb3JkZXIgdG8gcmV0YWluIEFCSSBjb21wYXRpYmlsaXR5LgotICoKLSAqIEVsZW1lbnRzIGNhbiBoYXZlIHBhZHMgKG9mIHRoZSB0eXBlICNHc3RQYWQpLiAgVGhlc2UgcGFkcyBsaW5rIHRvIHBhZHMgb24KLSAqIG90aGVyIGVsZW1lbnRzLiAgI0dzdEJ1ZmZlciBmbG93IGJldHdlZW4gdGhlc2UgbGlua2VkIHBhZHMuCi0gKiBBICNHc3RFbGVtZW50IGhhcyBhICNHTGlzdCBvZiAjR3N0UGFkIHN0cnVjdHVyZXMgZm9yIGFsbCB0aGVpciBpbnB1dCAob3Igc2luaykKLSAqIGFuZCBvdXRwdXQgKG9yIHNvdXJjZSkgcGFkcy4KLSAqIENvcmUgYW5kIHBsdWctaW4gd3JpdGVycyBjYW4gYWRkIGFuZCByZW1vdmUgcGFkcyB3aXRoIGdzdF9lbGVtZW50X2FkZF9wYWQoKQotICogYW5kIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQoKS4KLSAqCi0gKiBBbiBleGlzdGluZyBwYWQgb2YgYW4gZWxlbWVudCBjYW4gYmUgcmV0cmlldmVkIGJ5IG5hbWUgd2l0aAotICogZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoKS4gQSBuZXcgZHluYW1pYyBwYWQgY2FuIGJlIGNyZWF0ZWQgdXNpbmcKLSAqIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKCkgd2l0aCBhICNHc3RQYWRUZW1wbGF0ZS4KLSAqIEFuIGl0ZXJhdG9yIG9mIGFsbCBwYWRzIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMoKS4KLSAqCi0gKiBFbGVtZW50cyBjYW4gYmUgbGlua2VkIHRocm91Z2ggdGhlaXIgcGFkcy4KLSAqIElmIHRoZSBsaW5rIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgdXNlIHRoZSBnc3RfZWxlbWVudF9saW5rKCkKLSAqIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxpbmsgdHdvIGVsZW1lbnRzLCBvciBnc3RfZWxlbWVudF9saW5rX21hbnkoKQotICogZm9yIG1vcmUgZWxlbWVudHMgaW4gYSByb3cuCi0gKiBVc2UgZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCgpIHRvIGxpbmsgdHdvIGVsZW1lbnRzIGNvbnN0cmFpbmVkIGJ5Ci0gKiBhIHNwZWNpZmllZCBzZXQgb2YgI0dzdENhcHMuCi0gKiBGb3IgZmluZXIgY29udHJvbCwgdXNlIGdzdF9lbGVtZW50X2xpbmtfcGFkcygpIGFuZAotICogZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkKCkgdG8gc3BlY2lmeSB0aGUgcGFkcyB0byBsaW5rIG9uCi0gKiBlYWNoIGVsZW1lbnQgYnkgbmFtZS4KLSAqCi0gKiBFYWNoIGVsZW1lbnQgaGFzIGEgc3RhdGUgKHNlZSAjR3N0U3RhdGUpLiAgWW91IGNhbiBnZXQgYW5kIHNldCB0aGUgc3RhdGUKLSAqIG9mIGFuIGVsZW1lbnQgd2l0aCBnc3RfZWxlbWVudF9nZXRfc3RhdGUoKSBhbmQgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKCkuCi0gKiBTZXR0aW5nIGEgc3RhdGUgdHJpZ2dlcnMgYSAjR3N0U3RhdGVDaGFuZ2UuIFRvIGdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbgotICogb2YgYSAjR3N0U3RhdGUsIHVzZSBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSgpLgotICoKLSAqIFlvdSBjYW4gZ2V0IGFuZCBzZXQgYSAjR3N0Q2xvY2sgb24gYW4gZWxlbWVudCB1c2luZyBnc3RfZWxlbWVudF9nZXRfY2xvY2soKQotICogYW5kIGdzdF9lbGVtZW50X3NldF9jbG9jaygpLgotICogU29tZSBlbGVtZW50cyBjYW4gcHJvdmlkZSBhIGNsb2NrIGZvciB0aGUgcGlwZWxpbmUgaWYKLSAqIHRoZSAjR1NUX0VMRU1FTlRfRkxBR19QUk9WSURFX0NMT0NLIGZsYWcgaXMgc2V0LiBXaXRoIHRoZQotICogZ3N0X2VsZW1lbnRfcHJvdmlkZV9jbG9jaygpIG1ldGhvZCBvbmUgY2FuIHJldHJpZXZlIHRoZSBjbG9jayBwcm92aWRlZCBieQotICogc3VjaCBhbiBlbGVtZW50LgotICogTm90IGFsbCBlbGVtZW50cyByZXF1aXJlIGEgY2xvY2sgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuIElmIHRoZQotICogI0dTVF9FTEVNRU5UX0ZMQUdfUkVRVUlSRV9DTE9DSygpIGZsYWcgaXMgc2V0LCBhIGNsb2NrIHNob3VsZCBiZSBzZXQgb24gdGhlCi0gKiBlbGVtZW50IHdpdGggZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrKCkuCi0gKgotICogTm90ZSB0aGF0IGNsb2NrIHNlbGVjdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGlzIG5vcm1hbGx5IGhhbmRsZWQgYnkgdGhlCi0gKiB0b3BsZXZlbCAjR3N0UGlwZWxpbmUgc28gdGhlIGNsb2NrIGZ1bmN0aW9ucyBhcmUgb25seSB0byBiZSB1c2VkIGluIHZlcnkKLSAqIHNwZWNpZmljIHNpdHVhdGlvbnMuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPGdvYmplY3QvZ3ZhbHVlY29sbGVjdG9yLmg+Ci0KLSNpbmNsdWRlICJnc3RlbGVtZW50LmgiCi0jaW5jbHVkZSAiZ3N0ZWxlbWVudG1ldGFkYXRhLmgiCi0jaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCi0jaW5jbHVkZSAiZ3N0YnVzLmgiCi0jaW5jbHVkZSAiZ3N0ZXJyb3IuaCIKLSNpbmNsdWRlICJnc3RldmVudC5oIgotI2luY2x1ZGUgImdzdHV0aWxzLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHF1YXJrLmgiCi0jaW5jbHVkZSAiZ3N0dHJhY2VydXRpbHMuaCIKLSNpbmNsdWRlICJnc3R2YWx1ZS5oIgotI2luY2x1ZGUgImdzdC1pMThuLWxpYi5oIgotI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSNpbmNsdWRlICJwcmludGYvcHJpbnRmLmgiCi0jZW5kaWYKLQotLyogRWxlbWVudCBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIFBBRF9BRERFRCwKLSAgUEFEX1JFTU9WRUQsCi0gIE5PX01PUkVfUEFEUywKLSAgLyogYWRkIG1vcmUgYWJvdmUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgQVJHXzAKLSAgICAgIC8qIEZJTEwgTUUgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2NsYXNzX2luaXQgKEdzdEVsZW1lbnRDbGFzcyAqIGtsYXNzKTsKLXN0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2luaXQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLXN0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2Jhc2VfY2xhc3NfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2NvbnN0cnVjdGVkIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X2VsZW1lbnRfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZSAqIHN0YXRlLCBHc3RTdGF0ZSAqIHBlbmRpbmcsIEdzdENsb2NrVGltZSB0aW1lb3V0KTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGUgc3RhdGUpOwotc3RhdGljIGdib29sZWFuIGdzdF9lbGVtZW50X3NldF9jbG9ja19mdW5jIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RDbG9jayAqIGNsb2NrKTsKLXN0YXRpYyB2b2lkIGdzdF9lbGVtZW50X3NldF9idXNfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1cyAqIGJ1cyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlX2RlZmF1bHQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKTsKLXN0YXRpYyB2b2lkIGdzdF9lbGVtZW50X3NldF9jb250ZXh0X2RlZmF1bHQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdENvbnRleHQgKiBjb250ZXh0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9lbGVtZW50X2RlZmF1bHRfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2VsZW1lbnRfZGVmYXVsdF9xdWVyeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyBHc3RQYWRUZW1wbGF0ZQotICAgICogZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3JlcXVlc3RfcGFkX3RlbXBsYXRlIChHc3RFbGVtZW50Q2xhc3MgKgotICAgIGVsZW1lbnRfY2xhc3MsIGNvbnN0IGdjaGFyICogbmFtZSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9lbGVtZW50X2NhbGxfYXN5bmNfZnVuYyAoZ3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotc3RhdGljIEdzdE9iamVjdENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOwotc3RhdGljIGd1aW50IGdzdF9lbGVtZW50X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyBHVGhyZWFkUG9vbCAqZ3N0X2VsZW1lbnRfcG9vbCA9IE5VTEw7Ci0KLS8qIHRoaXMgaXMgdXNlZCBpbiBnc3RlbGVtZW50ZmFjdG9yeS5jOmdzdF9lbGVtZW50X3JlZ2lzdGVyKCkgKi8KLUdRdWFyayBfX2dzdF9lbGVtZW50Y2xhc3NfZmFjdG9yeSA9IDA7Ci0KLUdUeXBlCi1nc3RfZWxlbWVudF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGdzdF9lbGVtZW50X3R5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmdzdF9lbGVtZW50X3R5cGUpKSB7Ci0gICAgR1R5cGUgX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBlbGVtZW50X2luZm8gPSB7Ci0gICAgICBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksCi0gICAgICBnc3RfZWxlbWVudF9iYXNlX2NsYXNzX2luaXQsCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfY2xhc3NfZmluYWxpemUgKi8KLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X2VsZW1lbnRfY2xhc3NfaW5pdCwKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgc2l6ZW9mIChHc3RFbGVtZW50KSwKLSAgICAgIDAsCi0gICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9lbGVtZW50X2luaXQsCi0gICAgICBOVUxMCi0gICAgfTsKLQotICAgIF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfT0JKRUNULCAiR3N0RWxlbWVudCIsCi0gICAgICAgICZlbGVtZW50X2luZm8sIEdfVFlQRV9GTEFHX0FCU1RSQUNUKTsKLQotICAgIF9fZ3N0X2VsZW1lbnRjbGFzc19mYWN0b3J5ID0KLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJHU1RfRUxFTUVOVENMQVNTX0ZBQ1RPUlkiKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmdzdF9lbGVtZW50X3R5cGUsIF90eXBlKTsKLSAgfQotICByZXR1cm4gZ3N0X2VsZW1lbnRfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X3NldHVwX3RocmVhZF9wb29sICh2b2lkKQotewotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHICgiY3JlYXRpbmcgZWxlbWVudCB0aHJlYWQgcG9vbCIpOwotICBnc3RfZWxlbWVudF9wb29sID0KLSAgICAgIGdfdGhyZWFkX3Bvb2xfbmV3ICgoR0Z1bmMpIGdzdF9lbGVtZW50X2NhbGxfYXN5bmNfZnVuYywgTlVMTCwgLTEsIEZBTFNFLAotICAgICAgJmVycik7Ci0gIGlmIChlcnIgIT0gTlVMTCkgewotICAgIGdfY3JpdGljYWwgKCJjb3VsZCBub3QgYWxsb2MgdGhyZWFkcG9vbCAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X2NsYXNzX2luaXQgKEdzdEVsZW1lbnRDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgLyoqCi0gICAqIEdzdEVsZW1lbnQ6OnBhZC1hZGRlZDoKLSAgICogQGdzdGVsZW1lbnQ6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAbmV3X3BhZDogdGhlIHBhZCB0aGF0IGhhcyBiZWVuIGFkZGVkCi0gICAqCi0gICAqIGEgbmV3ICNHc3RQYWQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGVsZW1lbnQuIE5vdGUgdGhhdCB0aGlzIHNpZ25hbCB3aWxsCi0gICAqIHVzdWFsbHkgYmUgZW1pdHRlZCBmcm9tIHRoZSBjb250ZXh0IG9mIHRoZSBzdHJlYW1pbmcgdGhyZWFkLiBBbHNvIGtlZXAgaW4KLSAgICogbWluZCB0aGF0IGlmIHlvdSBhZGQgbmV3IGVsZW1lbnRzIHRvIHRoZSBwaXBlbGluZSBpbiB0aGUgc2lnbmFsIGhhbmRsZXIKLSAgICogeW91IHdpbGwgbmVlZCB0byBzZXQgdGhlbSB0byB0aGUgZGVzaXJlZCB0YXJnZXQgc3RhdGUgd2l0aAotICAgKiBnc3RfZWxlbWVudF9zZXRfc3RhdGUoKSBvciBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KCkuCi0gICAqLwotICBnc3RfZWxlbWVudF9zaWduYWxzW1BBRF9BRERFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicGFkLWFkZGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdEVsZW1lbnRDbGFzcywgcGFkX2FkZGVkKSwgTlVMTCwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfUEFEKTsKLSAgLyoqCi0gICAqIEdzdEVsZW1lbnQ6OnBhZC1yZW1vdmVkOgotICAgKiBAZ3N0ZWxlbWVudDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBvbGRfcGFkOiB0aGUgcGFkIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZAotICAgKgotICAgKiBhICNHc3RQYWQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBlbGVtZW50Ci0gICAqLwotICBnc3RfZWxlbWVudF9zaWduYWxzW1BBRF9SRU1PVkVEXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJwYWQtcmVtb3ZlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RFbGVtZW50Q2xhc3MsIHBhZF9yZW1vdmVkKSwgTlVMTCwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfUEFEKTsKLSAgLyoqCi0gICAqIEdzdEVsZW1lbnQ6Om5vLW1vcmUtcGFkczoKLSAgICogQGdzdGVsZW1lbnQ6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKgotICAgKiBUaGlzIHNpZ25hbHMgdGhhdCB0aGUgZWxlbWVudCB3aWxsIG5vdCBnZW5lcmF0ZSBtb3JlIGR5bmFtaWMgcGFkcy4KLSAgICogTm90ZSB0aGF0IHRoaXMgc2lnbmFsIHdpbGwgdXN1YWxseSBiZSBlbWl0dGVkIGZyb20gdGhlIGNvbnRleHQgb2YKLSAgICogdGhlIHN0cmVhbWluZyB0aHJlYWQuCi0gICAqLwotICBnc3RfZWxlbWVudF9zaWduYWxzW05PX01PUkVfUEFEU10gPQotICAgICAgZ19zaWduYWxfbmV3ICgibm8tbW9yZS1wYWRzIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdEVsZW1lbnRDbGFzcywgbm9fbW9yZV9wYWRzKSwgTlVMTCwKLSAgICAgIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9lbGVtZW50X2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2VsZW1lbnRfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPmNvbnN0cnVjdGVkID0gZ3N0X2VsZW1lbnRfY29uc3RydWN0ZWQ7Ci0KLSAga2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGVfZnVuYyk7Ci0gIGtsYXNzLT5zZXRfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlX2Z1bmMpOwotICBrbGFzcy0+Z2V0X3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9lbGVtZW50X2dldF9zdGF0ZV9mdW5jKTsKLSAga2xhc3MtPnNldF9jbG9jayA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZWxlbWVudF9zZXRfY2xvY2tfZnVuYyk7Ci0gIGtsYXNzLT5zZXRfYnVzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9lbGVtZW50X3NldF9idXNfZnVuYyk7Ci0gIGtsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZWxlbWVudF9kZWZhdWx0X3F1ZXJ5KTsKLSAga2xhc3MtPnNlbmRfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2VsZW1lbnRfZGVmYXVsdF9zZW5kX2V2ZW50KTsKLSAga2xhc3MtPm51bXBhZHRlbXBsYXRlcyA9IDA7Ci0gIGtsYXNzLT5wb3N0X21lc3NhZ2UgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlX2RlZmF1bHQpOwotICBrbGFzcy0+c2V0X2NvbnRleHQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHRfZGVmYXVsdCk7Ci0KLSAga2xhc3MtPmVsZW1lbnRmYWN0b3J5ID0gTlVMTDsKLQotICBnc3RfZWxlbWVudF9zZXR1cF90aHJlYWRfcG9vbCAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X2Jhc2VfY2xhc3NfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGdfY2xhc3MpOwotICBHTGlzdCAqbm9kZSwgKnBhZHRlbXBsYXRlczsKLQotICAvKiBDb3B5IHRoZSBlbGVtZW50IGRldGFpbHMgaGVyZSBzbyBlbGVtZW50cyBjYW4gaW5oZXJpdCB0aGUKLSAgICogZGV0YWlscyBmcm9tIHRoZWlyIGJhc2UgY2xhc3MgYW5kIGNsYXNzZXMgb25seSBuZWVkIHRvIHNldAotICAgKiB0aGUgZGV0YWlscyBpbiBjbGFzc19pbml0IGluc3RlYWQgb2YgYmFzZV9pbml0ICovCi0gIGVsZW1lbnRfY2xhc3MtPm1ldGFkYXRhID0KLSAgICAgIGVsZW1lbnRfY2xhc3MtPm1ldGFkYXRhID8gZ3N0X3N0cnVjdHVyZV9jb3B5IChlbGVtZW50X2NsYXNzLT5tZXRhZGF0YSkgOgotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJtZXRhZGF0YSIpOwotCi0gIC8qIENvcHkgdGhlIHBhZCB0ZW1wbGF0ZXMgc28gZWxlbWVudHMgaW5oZXJpdCB0aGVtCi0gICAqIGZyb20gdGhlaXIgYmFzZSBjbGFzcyBidXQgZWxlbWVudHMgY2FuIGFkZCBwYWQgdGVtcGxhdGVzIGluIGNsYXNzX2luaXQKLSAgICogaW5zdGVhZCBvZiBiYXNlX2luaXQuCi0gICAqLwotICBwYWR0ZW1wbGF0ZXMgPSBnX2xpc3RfY29weSAoZWxlbWVudF9jbGFzcy0+cGFkdGVtcGxhdGVzKTsKLSAgZm9yIChub2RlID0gcGFkdGVtcGxhdGVzOyBub2RlICE9IE5VTEw7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgR3N0UGFkVGVtcGxhdGUgKnRtcGwgPSAoR3N0UGFkVGVtcGxhdGUgKikgbm9kZS0+ZGF0YTsKLSAgICBnc3Rfb2JqZWN0X3JlZiAodG1wbCk7Ci0gIH0KLSAgZWxlbWVudF9jbGFzcy0+cGFkdGVtcGxhdGVzID0gcGFkdGVtcGxhdGVzOwotCi0gIC8qIHNldCB0aGUgZmFjdG9yeSwgc2VlIGdzdF9lbGVtZW50X3JlZ2lzdGVyKCkgKi8KLSAgZWxlbWVudF9jbGFzcy0+ZWxlbWVudGZhY3RvcnkgPQotICAgICAgZ190eXBlX2dldF9xZGF0YSAoR19UWVBFX0ZST01fQ0xBU1MgKGVsZW1lbnRfY2xhc3MpLAotICAgICAgX19nc3RfZWxlbWVudGNsYXNzX2ZhY3RvcnkpOwotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgInR5cGUgJXMgOiBmYWN0b3J5ICVwIiwKLSAgICAgIEdfT0JKRUNUX0NMQVNTX05BTUUgKGVsZW1lbnRfY2xhc3MpLCBlbGVtZW50X2NsYXNzLT5lbGVtZW50ZmFjdG9yeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZWxlbWVudF9pbml0IChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR1NUX1NUQVRFIChlbGVtZW50KSA9IEdTVF9TVEFURV9OVUxMOwotICBHU1RfU1RBVEVfVEFSR0VUIChlbGVtZW50KSA9IEdTVF9TVEFURV9OVUxMOwotICBHU1RfU1RBVEVfTkVYVCAoZWxlbWVudCkgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOwotICBHU1RfU1RBVEVfUEVORElORyAoZWxlbWVudCkgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOwotICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLQotICBnX3JlY19tdXRleF9pbml0ICgmZWxlbWVudC0+c3RhdGVfbG9jayk7Ci0gIGdfY29uZF9pbml0ICgmZWxlbWVudC0+c3RhdGVfY29uZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZWxlbWVudF9jb25zdHJ1Y3RlZCAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR1NUX1RSQUNFUl9FTEVNRU5UX05FVyAoR1NUX0VMRU1FTlRfQ0FTVCAob2JqZWN0KSk7Ci0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBwYWQgb2YuCi0gKiBAcGFkOiB0aGUgI0dzdFBhZCB0byByZWxlYXNlLgotICoKLSAqIE1ha2VzIHRoZSBlbGVtZW50IGZyZWUgdGhlIHByZXZpb3VzbHkgcmVxdWVzdGVkIHBhZCBhcyBvYnRhaW5lZAotICogd2l0aCBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCgpLgotICoKLSAqIFRoaXMgZG9lcyBub3QgdW5yZWYgdGhlIHBhZC4gSWYgdGhlIHBhZCB3YXMgY3JlYXRlZCBieSB1c2luZwotICogZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQoKSwgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpIG5lZWRzIHRvIGJlCi0gKiBmb2xsb3dlZCBieSBnc3Rfb2JqZWN0X3VucmVmKCkgdG8gZnJlZSB0aGUgQHBhZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1BBRF9QQURfVEVNUExBVEUgKHBhZCkgPT0gTlVMTCB8fAotICAgICAgR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSAoR1NUX1BBRF9QQURfVEVNUExBVEUgKHBhZCkpID09Ci0gICAgICBHU1RfUEFEX1JFUVVFU1QpOwotCi0gIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0KLSAgLyogaWYgdGhlIGVsZW1lbnQgaW1wbGVtZW50cyBhIGN1c3RvbSByZWxlYXNlIGZ1bmN0aW9uIHdlIGNhbGwgdGhhdCwgZWxzZSB3ZQotICAgKiBzaW1wbHkgcmVtb3ZlIHRoZSBwYWQgZnJvbSB0aGUgZWxlbWVudCAqLwotICBpZiAob2NsYXNzLT5yZWxlYXNlX3BhZCkKLSAgICBvY2xhc3MtPnJlbGVhc2VfcGFkIChlbGVtZW50LCBwYWQpOwotICBlbHNlCi0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoZWxlbWVudCwgcGFkKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIGNsb2NrIHByb3ZpZGVkIGJ5IHRoZSBnaXZlbiBlbGVtZW50LgotICogPG5vdGU+QW4gZWxlbWVudCBpcyBvbmx5IHJlcXVpcmVkIHRvIHByb3ZpZGUgYSBjbG9jayBpbiB0aGUgUEFVU0VECi0gKiBzdGF0ZS4gU29tZSBlbGVtZW50cyBjYW4gcHJvdmlkZSBhIGNsb2NrIGluIG90aGVyIHN0YXRlcy48L25vdGU+Ci0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBHc3RDbG9jayBwcm92aWRlZCBieSB0aGUKLSAqIGVsZW1lbnQgb3IgJU5VTEwgaWYgbm8gY2xvY2sgY291bGQgYmUgcHJvdmlkZWQuICBVbnJlZiBhZnRlciB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RDbG9jayAqCi1nc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0Q2xvY2sgKnJlc3VsdCA9IE5VTEw7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOwotCi0gIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0KLSAgaWYgKG9jbGFzcy0+cHJvdmlkZV9jbG9jaykKLSAgICByZXN1bHQgPSBvY2xhc3MtPnByb3ZpZGVfY2xvY2sgKGVsZW1lbnQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3RDbG9jayAqKmNsb2NrX3A7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgY2xvY2tfcCA9ICZlbGVtZW50LT5jbG9jazsKLSAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBjbG9ja19wLCAoR3N0T2JqZWN0ICopIGNsb2NrKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3NldF9jbG9jazoKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIHNldCB0aGUgY2xvY2sgZm9yLgotICogQGNsb2NrOiB0aGUgI0dzdENsb2NrIHRvIHNldCBmb3IgdGhlIGVsZW1lbnQuCi0gKgotICogU2V0cyB0aGUgY2xvY2sgZm9yIHRoZSBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIGluY3JlYXNlcyB0aGUKLSAqIHJlZmNvdW50IG9uIHRoZSBjbG9jay4gQW55IHByZXZpb3VzbHkgc2V0IGNsb2NrIG9uIHRoZSBvYmplY3QKLSAqIGlzIHVucmVmZmVkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBlbGVtZW50IGFjY2VwdGVkIHRoZSBjbG9jay4gQW4gZWxlbWVudCBjYW4gcmVmdXNlIGEKLSAqIGNsb2NrIHdoZW4gaXQsIGZvciBleGFtcGxlLCBpcyBub3QgYWJsZSB0byBzbGF2ZSBpdHMgaW50ZXJuYWwgY2xvY2sgdG8gdGhlCi0gKiBAY2xvY2sgb3Igd2hlbiBpdCByZXF1aXJlcyBhIHNwZWNpZmljIGNsb2NrIHRvIG9wZXJhdGUuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X3NldF9jbG9jayAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENsb2NrICogY2xvY2spCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjbG9jayA9PSBOVUxMIHx8IEdTVF9JU19DTE9DSyAoY2xvY2spLCBGQUxTRSk7Ci0KLSAgb2NsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgZWxlbWVudCwgInNldHRpbmcgY2xvY2sgJXAiLCBjbG9jayk7Ci0KLSAgaWYgKG9jbGFzcy0+c2V0X2Nsb2NrKQotICAgIHJlcyA9IG9jbGFzcy0+c2V0X2Nsb2NrIChlbGVtZW50LCBjbG9jayk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9nZXRfY2xvY2s6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBnZXQgdGhlIGNsb2NrIG9mLgotICoKLSAqIEdldHMgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGNsb2NrIG9mIHRoZSBlbGVtZW50LiBUaGlzIGlzIHRoZSBjbG9jayBhcyB3YXMKLSAqIGxhc3Qgc2V0IHdpdGggZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrKCkuCi0gKgotICogRWxlbWVudHMgaW4gYSBwaXBlbGluZSB3aWxsIG9ubHkgaGF2ZSB0aGVpciBjbG9jayBzZXQgd2hlbiB0aGUKLSAqIHBpcGVsaW5lIGlzIGluIHRoZSBQTEFZSU5HIHN0YXRlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDbG9jayBvZiB0aGUgZWxlbWVudC4gdW5yZWYgYWZ0ZXIgdXNhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0Q2xvY2sgKgotZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0Q2xvY2sgKnJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICBpZiAoKHJlc3VsdCA9IGVsZW1lbnQtPmNsb2NrKSkKLSAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZToKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50LgotICogQHRpbWU6IHRoZSBiYXNlIHRpbWUgdG8gc2V0LgotICoKLSAqIFNldCB0aGUgYmFzZSB0aW1lIG9mIGFuIGVsZW1lbnQuIFNlZSBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lKCkuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENsb2NrVGltZSB0aW1lKQotewotICBHc3RDbG9ja1RpbWUgb2xkOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgb2xkID0gZWxlbWVudC0+YmFzZV90aW1lOwotICBlbGVtZW50LT5iYXNlX3RpbWUgPSB0aW1lOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0xPQ0ssIGVsZW1lbnQsCi0gICAgICAic2V0IGJhc2VfdGltZT0lIiBHU1RfVElNRV9GT1JNQVQgIiwgb2xkICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWUpLCBHU1RfVElNRV9BUkdTIChvbGQpKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCi0gKgotICogUmV0dXJucyB0aGUgYmFzZSB0aW1lIG9mIHRoZSBlbGVtZW50LiBUaGUgYmFzZSB0aW1lIGlzIHRoZQotICogYWJzb2x1dGUgdGltZSBvZiB0aGUgY2xvY2sgd2hlbiB0aGlzIGVsZW1lbnQgd2FzIGxhc3QgcHV0IHRvCi0gKiBQTEFZSU5HLiBTdWJ0cmFjdGluZyB0aGUgYmFzZSB0aW1lIGZyb20gdGhlIGNsb2NrIHRpbWUgZ2l2ZXMKLSAqIHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlIGVsZW1lbnQuCi0gKgotICogUmV0dXJuczogdGhlIGJhc2UgdGltZSBvZiB0aGUgZWxlbWVudC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RDbG9ja1RpbWUgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIHJlc3VsdCA9IGVsZW1lbnQtPmJhc2VfdGltZTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWU6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudC4KLSAqIEB0aW1lOiB0aGUgYmFzZSB0aW1lIHRvIHNldC4KLSAqCi0gKiBTZXQgdGhlIHN0YXJ0IHRpbWUgb2YgYW4gZWxlbWVudC4gVGhlIHN0YXJ0IHRpbWUgb2YgdGhlIGVsZW1lbnQgaXMgdGhlCi0gKiBydW5uaW5nIHRpbWUgb2YgdGhlIGVsZW1lbnQgd2hlbiBpdCBsYXN0IHdlbnQgdG8gdGhlIFBBVVNFRCBzdGF0ZS4gSW4gUkVBRFkKLSAqIG9yIGFmdGVyIGEgZmx1c2hpbmcgc2VlaywgaXQgaXMgc2V0IHRvIDAuCi0gKgotICogVG9wbGV2ZWwgZWxlbWVudHMgbGlrZSAjR3N0UGlwZWxpbmUgd2lsbCBtYW5hZ2UgdGhlIHN0YXJ0X3RpbWUgYW5kCi0gKiBiYXNlX3RpbWUgb24gaXRzIGNoaWxkcmVuLiBTZXR0aW5nIHRoZSBzdGFydF90aW1lIHRvICNHU1RfQ0xPQ0tfVElNRV9OT05FCi0gKiBvbiBzdWNoIGEgdG9wbGV2ZWwgZWxlbWVudCB3aWxsIGRpc2FibGUgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgYmFzZV90aW1lIHRvCi0gKiB0aGUgY2hpbGRyZW4gYW5kIGNhbiBiZSB1c2VmdWwgaWYgdGhlIGFwcGxpY2F0aW9uIG1hbmFnZXMgdGhlIGJhc2VfdGltZQotICogaXRzZWxmLCBmb3IgZXhhbXBsZSBpZiB5b3Ugd2FudCB0byBzeW5jaHJvbml6ZSBjYXB0dXJlIGZyb20gbXVsdGlwbGUKLSAqIHBpcGVsaW5lcywgYW5kIHlvdSBjYW4gYWxzbyBlbnN1cmUgdGhhdCB0aGUgcGlwZWxpbmVzIGhhdmUgdGhlIHNhbWUgY2xvY2suCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfc2V0X3N0YXJ0X3RpbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDbG9ja1RpbWUgdGltZSkKLXsKLSAgR3N0Q2xvY2tUaW1lIG9sZDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIG9sZCA9IEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKGVsZW1lbnQpOwotICBHU1RfRUxFTUVOVF9TVEFSVF9USU1FIChlbGVtZW50KSA9IHRpbWU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DTE9DSywgZWxlbWVudCwKLSAgICAgICJzZXQgc3RhcnRfdGltZT0lIiBHU1RfVElNRV9GT1JNQVQgIiwgb2xkICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWUpLCBHU1RfVElNRV9BUkdTIChvbGQpKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZToKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50LgotICoKLSAqIFJldHVybnMgdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIGVsZW1lbnQuIFRoZSBzdGFydCB0aW1lIGlzIHRoZQotICogcnVubmluZyB0aW1lIG9mIHRoZSBjbG9jayB3aGVuIHRoaXMgZWxlbWVudCB3YXMgbGFzdCBwdXQgdG8gUEFVU0VELgotICoKLSAqIFVzdWFsbHkgdGhlIHN0YXJ0X3RpbWUgaXMgbWFuYWdlZCBieSBhIHRvcGxldmVsIGVsZW1lbnQgc3VjaCBhcwotICogI0dzdFBpcGVsaW5lLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIGVsZW1lbnQuCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RDbG9ja1RpbWUgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIHJlc3VsdCA9IEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKGVsZW1lbnQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmIDAKLS8qKgotICogZ3N0X2VsZW1lbnRfc2V0X2luZGV4OgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCi0gKiBAaW5kZXg6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0SW5kZXguCi0gKgotICogU2V0IEBpbmRleCBvbiB0aGUgZWxlbWVudC4gVGhlIHJlZmNvdW50IG9mIHRoZSBpbmRleAotICogd2lsbCBiZSBpbmNyZWFzZWQsIGFueSBwcmV2aW91c2x5IHNldCBpbmRleCBpcyB1bnJlZmZlZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfZWxlbWVudF9zZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RJbmRleCAqIGluZGV4KQotewotICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOwotICBnX3JldHVybl9pZl9mYWlsIChpbmRleCA9PSBOVUxMIHx8IEdTVF9JU19JTkRFWCAoaW5kZXgpKTsKLQotICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotCi0gIGlmIChvY2xhc3MtPnNldF9pbmRleCkKLSAgICBvY2xhc3MtPnNldF9pbmRleCAoZWxlbWVudCwgaW5kZXgpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2dldF9pbmRleDoKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50LgotICoKLSAqIEdldHMgdGhlIGluZGV4IGZyb20gdGhlIGVsZW1lbnQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdEluZGV4IG9yICVOVUxMIHdoZW4gbm8KLSAqIGluZGV4IHdhcyBzZXQgb24gdGhlIGVsZW1lbnQuIHVucmVmIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdEluZGV4ICoKLWdzdF9lbGVtZW50X2dldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOwotICBHc3RJbmRleCAqcmVzdWx0ID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKLQotICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotCi0gIGlmIChvY2xhc3MtPmdldF9pbmRleCkKLSAgICByZXN1bHQgPSBvY2xhc3MtPmdldF9pbmRleCAoZWxlbWVudCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9lbGVtZW50X2FkZF9wYWQ6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBhZGQgdGhlIHBhZCB0by4KLSAqIEBwYWQ6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RQYWQgdG8gYWRkIHRvIHRoZSBlbGVtZW50LgotICoKLSAqIEFkZHMgYSBwYWQgKGxpbmsgcG9pbnQpIHRvIEBlbGVtZW50LiBAcGFkJ3MgcGFyZW50IHdpbGwgYmUgc2V0IHRvIEBlbGVtZW50OwotICogc2VlIGdzdF9vYmplY3Rfc2V0X3BhcmVudCgpIGZvciByZWZjb3VudGluZyBpbmZvcm1hdGlvbi4KLSAqCi0gKiBQYWRzIGFyZSBub3QgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQgc28gZWxlbWVudHMgc2hvdWxkIHBlcmZvcm0gdGhlIG5lZWRlZAotICogc3RlcHMgdG8gYWN0aXZhdGUgdGhlIHBhZCBpbiBjYXNlIHRoaXMgcGFkIGlzIGFkZGVkIGluIHRoZSBQQVVTRUQgb3IgUExBWUlORwotICogc3RhdGUuIFNlZSBnc3RfcGFkX3NldF9hY3RpdmUoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhY3RpdmF0aW5nIHBhZHMuCi0gKgotICogVGhlIHBhZCBhbmQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHVubG9ja2VkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IHRoZSAjR3N0RWxlbWVudDo6cGFkLWFkZGVkIHNpZ25hbCBvbiB0aGUgZWxlbWVudC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIGNvdWxkIGJlIGFkZGVkLiBUaGlzIGZ1bmN0aW9uIGNhbiBmYWlsIHdoZW4KLSAqIGEgcGFkIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0ZWQgb3IgdGhlIHBhZCBhbHJlYWR5IGhhZCBhbm90aGVyCi0gKiBwYXJlbnQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X2FkZF9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCi17Ci0gIGdjaGFyICpwYWRfbmFtZTsKLSAgZ2Jvb2xlYW4gYWN0aXZlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLQotICAvKiBsb2NraW5nIHBhZCB0byBsb29rIGF0IHRoZSBuYW1lICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgcGFkX25hbWUgPSBnX3N0cmR1cCAoR1NUX1BBRF9OQU1FIChwYWQpKTsKLSAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsIGVsZW1lbnQsICJhZGRpbmcgcGFkICclcyciLAotICAgICAgR1NUX1NUUl9OVUxMIChwYWRfbmFtZSkpOwotICBhY3RpdmUgPSBHU1RfUEFEX0lTX0FDVElWRSAocGFkKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAvKiB0aGVuIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFscmVhZHkgYSBwYWQgYnkgdGhhdCBuYW1lIGhlcmUgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MgKGVsZW1lbnQtPnBhZHMsIHBhZF9uYW1lKSkpCi0gICAgZ290byBuYW1lX2V4aXN0czsKLQotICAvKiB0cnkgdG8gc2V0IHRoZSBwYWQncyBwYXJlbnQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSwKLSAgICAgICAgICAgICAgR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSkpKQotICAgIGdvdG8gaGFkX3BhcmVudDsKLQotICAvKiBjaGVjayBmb3IgYWN0aXZlIHBhZHMgKi8KLSAgaWYgKCFhY3RpdmUgJiYgKEdTVF9TVEFURSAoZWxlbWVudCkgPiBHU1RfU1RBVEVfUkVBRFkgfHwKLSAgICAgICAgICBHU1RfU1RBVEVfTkVYVCAoZWxlbWVudCkgPT0gR1NUX1NUQVRFX1BBVVNFRCkpIHsKLSAgICBnX3dhcm5pbmcgKCJhZGRpbmcgaW5hY3RpdmUgcGFkICclcycgdG8gcnVubmluZyBlbGVtZW50ICclcycsIHlvdSBuZWVkIHRvICIKLSAgICAgICAgInVzZSBnc3RfcGFkX3NldF9hY3RpdmUocGFkLFRSVUUpIGJlZm9yZSBhZGRpbmcgaXQuIiwKLSAgICAgICAgR1NUX1NUUl9OVUxMIChwYWRfbmFtZSksIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7Ci0gIH0KLQotICBnX2ZyZWUgKHBhZF9uYW1lKTsKLQotICAvKiBhZGQgaXQgdG8gdGhlIGxpc3QgKi8KLSAgc3dpdGNoIChnc3RfcGFkX2dldF9kaXJlY3Rpb24gKHBhZCkpIHsKLSAgICBjYXNlIEdTVF9QQURfU1JDOgotICAgICAgZWxlbWVudC0+c3JjcGFkcyA9IGdfbGlzdF9hcHBlbmQgKGVsZW1lbnQtPnNyY3BhZHMsIHBhZCk7Ci0gICAgICBlbGVtZW50LT5udW1zcmNwYWRzKys7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9QQURfU0lOSzoKLSAgICAgIGVsZW1lbnQtPnNpbmtwYWRzID0gZ19saXN0X2FwcGVuZCAoZWxlbWVudC0+c2lua3BhZHMsIHBhZCk7Ci0gICAgICBlbGVtZW50LT5udW1zaW5rcGFkcysrOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdvdG8gbm9fZGlyZWN0aW9uOwotICB9Ci0gIGVsZW1lbnQtPnBhZHMgPSBnX2xpc3RfYXBwZW5kIChlbGVtZW50LT5wYWRzLCBwYWQpOwotICBlbGVtZW50LT5udW1wYWRzKys7Ci0gIGVsZW1lbnQtPnBhZHNfY29va2llKys7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICAvKiBlbWl0IHRoZSBQQURfQURERUQgc2lnbmFsICovCi0gIGdfc2lnbmFsX2VtaXQgKGVsZW1lbnQsIGdzdF9lbGVtZW50X3NpZ25hbHNbUEFEX0FEREVEXSwgMCwgcGFkKTsKLSAgR1NUX1RSQUNFUl9FTEVNRU5UX0FERF9QQUQgKGVsZW1lbnQsIHBhZCk7Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SIGNhc2VzICovCi1uYW1lX2V4aXN0czoKLSAgewotICAgIGdfY3JpdGljYWwgKCJQYWRuYW1lICVzIGlzIG5vdCB1bmlxdWUgaW4gZWxlbWVudCAlcywgbm90IGFkZGluZyIsCi0gICAgICAgIHBhZF9uYW1lLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotICAgIGdfZnJlZSAocGFkX25hbWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaGFkX3BhcmVudDoKLSAgewotICAgIGdfY3JpdGljYWwKLSAgICAgICAgKCJQYWQgJXMgYWxyZWFkeSBoYXMgcGFyZW50IHdoZW4gdHJ5aW5nIHRvIGFkZCB0byBlbGVtZW50ICVzIiwKLSAgICAgICAgcGFkX25hbWUsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0gICAgZ19mcmVlIChwYWRfbmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19kaXJlY3Rpb246Ci0gIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgZ19jcml0aWNhbAotICAgICAgICAoIlRyeWluZyB0byBhZGQgcGFkICVzIHRvIGVsZW1lbnQgJXMsIGJ1dCBpdCBoYXMgbm8gZGlyZWN0aW9uIiwKLSAgICAgICAgR1NUX09CSkVDVF9OQU1FIChwYWQpLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQ6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byByZW1vdmUgcGFkIGZyb20uCi0gKiBAcGFkOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0UGFkIHRvIHJlbW92ZSBmcm9tIHRoZSBlbGVtZW50LgotICoKLSAqIFJlbW92ZXMgQHBhZCBmcm9tIEBlbGVtZW50LiBAcGFkIHdpbGwgYmUgZGVzdHJveWVkIGlmIGl0IGhhcyBub3QgYmVlbgotICogcmVmZXJlbmNlZCBlbHNld2hlcmUgdXNpbmcgZ3N0X29iamVjdF91bnBhcmVudCgpLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBwbHVnaW4gZGV2ZWxvcGVycyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCi0gKiBieSBhcHBsaWNhdGlvbnMuIFBhZHMgdGhhdCB3ZXJlIGR5bmFtaWNhbGx5IHJlcXVlc3RlZCBmcm9tIGVsZW1lbnRzCi0gKiB3aXRoIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKCkgc2hvdWxkIGJlIHJlbGVhc2VkIHdpdGggdGhlCi0gKiBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKCkgZnVuY3Rpb24gaW5zdGVhZC4KLSAqCi0gKiBQYWRzIGFyZSBub3QgYXV0b21hdGljYWxseSBkZWFjdGl2YXRlZCBzbyBlbGVtZW50cyBzaG91bGQgcGVyZm9ybSB0aGUgbmVlZGVkCi0gKiBzdGVwcyB0byBkZWFjdGl2YXRlIHRoZSBwYWQgaW4gY2FzZSB0aGlzIHBhZCBpcyByZW1vdmVkIGluIHRoZSBQQVVTRUQgb3IKLSAqIFBMQVlJTkcgc3RhdGUuIFNlZSBnc3RfcGFkX3NldF9hY3RpdmUoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAotICogZGVhY3RpdmF0aW5nIHBhZHMuCi0gKgotICogVGhlIHBhZCBhbmQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHVubG9ja2VkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IHRoZSAjR3N0RWxlbWVudDo6cGFkLXJlbW92ZWQgc2lnbmFsIG9uIHRoZSBlbGVtZW50LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWQgY291bGQgYmUgcmVtb3ZlZC4gQ2FuIHJldHVybiAlRkFMU0UgaWYgdGhlCi0gKiBwYWQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBwcm92aWRlZCBlbGVtZW50LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotICBHc3RQYWQgKnBlZXI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOwotCi0gIC8qIGxvY2tpbmcgcGFkIHRvIGxvb2sgYXQgdGhlIG5hbWUgYW5kIHBhcmVudCAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCBlbGVtZW50LCAicmVtb3ZpbmcgcGFkICclcyciLAotICAgICAgR1NUX1NUUl9OVUxMIChHU1RfUEFEX05BTUUgKHBhZCkpKTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9QQVJFTlQgKHBhZCkgIT0gZWxlbWVudCkpCi0gICAgZ290byBub3Rfb3VyX3BhZDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgLyogdW5saW5rICovCi0gIGlmICgocGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCkpKSB7Ci0gICAgLyogd2luZG93IGZvciBNVCB1bnNhZmVuZXNzLCBzb21lb25lIGVsc2UgY291bGQgdW5saW5rIGhlcmUKLSAgICAgKiBhbmQgdGhlbiB3ZSBjYWxsIHVubGluayB3aXRoIHdyb25nIHBhZHMuIFRoZSB1bmxpbmsKLSAgICAgKiBmdW5jdGlvbiB3b3VsZCBjYXRjaCB0aGlzIGFuZCBzYWZlbHkgcmV0dXJuIGZhaWxlZC4gKi8KLSAgICBpZiAoR1NUX1BBRF9JU19TUkMgKHBhZCkpCi0gICAgICBnc3RfcGFkX3VubGluayAocGFkLCBwZWVyKTsKLSAgICBlbHNlCi0gICAgICBnc3RfcGFkX3VubGluayAocGVlciwgcGFkKTsKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgLyogcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KLSAgc3dpdGNoIChnc3RfcGFkX2dldF9kaXJlY3Rpb24gKHBhZCkpIHsKLSAgICBjYXNlIEdTVF9QQURfU1JDOgotICAgICAgZWxlbWVudC0+c3JjcGFkcyA9IGdfbGlzdF9yZW1vdmUgKGVsZW1lbnQtPnNyY3BhZHMsIHBhZCk7Ci0gICAgICBlbGVtZW50LT5udW1zcmNwYWRzLS07Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9QQURfU0lOSzoKLSAgICAgIGVsZW1lbnQtPnNpbmtwYWRzID0gZ19saXN0X3JlbW92ZSAoZWxlbWVudC0+c2lua3BhZHMsIHBhZCk7Ci0gICAgICBlbGVtZW50LT5udW1zaW5rcGFkcy0tOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfY3JpdGljYWwgKCJSZW1vdmluZyBwYWQgd2l0aG91dCBkaXJlY3Rpb24/Pz8iKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIGVsZW1lbnQtPnBhZHMgPSBnX2xpc3RfcmVtb3ZlIChlbGVtZW50LT5wYWRzLCBwYWQpOwotICBlbGVtZW50LT5udW1wYWRzLS07Ci0gIGVsZW1lbnQtPnBhZHNfY29va2llKys7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICAvKiBlbWl0IHRoZSBQQURfUkVNT1ZFRCBzaWduYWwgYmVmb3JlIHVucGFyZW50aW5nIGFuZCBsb3NpbmcgdGhlIGxhc3QgcmVmLiAqLwotICBnX3NpZ25hbF9lbWl0IChlbGVtZW50LCBnc3RfZWxlbWVudF9zaWduYWxzW1BBRF9SRU1PVkVEXSwgMCwgcGFkKTsKLSAgR1NUX1RSQUNFUl9FTEVNRU5UX1JFTU9WRV9QQUQgKGVsZW1lbnQsIHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub3Rfb3VyX3BhZDoKLSAgewotICAgIC8qIGxvY2tpbmcgb3JkZXIgaXMgZWxlbWVudCA+IHBhZCAqLwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgZ19jcml0aWNhbCAoIlBhZG5hbWUgJXM6JXMgZG9lcyBub3QgYmVsb25nIHRvIGVsZW1lbnQgJXMgd2hlbiByZW1vdmluZyIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHM6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudAotICoKLSAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNpZ25hbCB0aGF0IHRoZSBlbGVtZW50IGRvZXMgbm90IGV4cGVjdCBhbnkgbW9yZSBwYWRzCi0gKiB0byBzaG93IHVwIGluIHRoZSBjdXJyZW50IHBpcGVsaW5lLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIKLSAqIHBhZHMgaGF2ZSBiZWVuIGFkZGVkIGJ5IHRoZSBlbGVtZW50IGl0c2VsZi4gRWxlbWVudHMgd2l0aCAjR1NUX1BBRF9TT01FVElNRVMKLSAqIHBhZCB0ZW1wbGF0ZXMgdXNlIHRoaXMgaW4gY29tYmluYXRpb24gd2l0aCBhdXRvcGx1Z2dlcnMgdG8gZmlndXJlIG91dCB0aGF0Ci0gKiB0aGUgZWxlbWVudCBpcyBkb25lIGluaXRpYWxpemluZyBpdHMgcGFkcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGVtaXRzIHRoZSAjR3N0RWxlbWVudDo6bm8tbW9yZS1wYWRzIHNpZ25hbC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOwotCi0gIGdfc2lnbmFsX2VtaXQgKGVsZW1lbnQsIGdzdF9lbGVtZW50X3NpZ25hbHNbTk9fTU9SRV9QQURTXSwgMCk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1wYWRfY29tcGFyZV9uYW1lIChHc3RQYWQgKiBwYWQxLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIGdpbnQgcmVzdWx0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkMSk7Ci0gIHJlc3VsdCA9IHN0cmNtcCAoR1NUX1BBRF9OQU1FIChwYWQxKSwgbmFtZSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQxKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gZmluZCBhIHN0YXRpYyBwYWQgb2YuCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHN0YXRpYyAjR3N0UGFkIHRvIHJldHJpZXZlLgotICoKLSAqIFJldHJpZXZlcyBhIHBhZCBmcm9tIEBlbGVtZW50IGJ5IG5hbWUuIFRoaXMgdmVyc2lvbiBvbmx5IHJldHJpZXZlcwotICogYWxyZWFkeS1leGlzdGluZyAoaS5lLiAnc3RhdGljJykgcGFkcy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdGhlIHJlcXVlc3RlZCAjR3N0UGFkIGlmCi0gKiAgICAgZm91bmQsIG90aGVyd2lzZSAlTlVMTC4gIHVucmVmIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdFBhZCAqCi1nc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR0xpc3QgKmZpbmQ7Ci0gIEdzdFBhZCAqcmVzdWx0ID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgZmluZCA9Ci0gICAgICBnX2xpc3RfZmluZF9jdXN0b20gKGVsZW1lbnQtPnBhZHMsIG5hbWUsIChHQ29tcGFyZUZ1bmMpIHBhZF9jb21wYXJlX25hbWUpOwotICBpZiAoZmluZCkgewotICAgIHJlc3VsdCA9IEdTVF9QQURfQ0FTVCAoZmluZC0+ZGF0YSk7Ci0gICAgZ3N0X29iamVjdF9yZWYgKHJlc3VsdCk7Ci0gIH0KLQotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAibm8gc3VjaCBwYWQgJyVzJyBpbiBlbGVtZW50IFwiJXNcIiIsCi0gICAgICAgIG5hbWUsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiZm91bmQgcGFkICVzOiVzIiwKLSAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCksIG5hbWUpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgR3N0UGFkICoKLV9nc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UGFkICpuZXdwYWQgPSBOVUxMOwotICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKLQotICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotCi0jaWZuZGVmIEdfRElTQUJMRV9DSEVDS1MKLSAgLyogU29tZSBzYW5pdHkgY2hlY2tpbmcgaGVyZSAqLwotICBpZiAobmFtZSkgewotICAgIEdzdFBhZCAqcGFkOwotCi0gICAgLyogSXMgdGhpcyB0aGUgdGVtcGxhdGUgbmFtZT8gKi8KLSAgICBpZiAoc3Ryc3RyIChuYW1lLCAiJSIpIHx8ICFzdHJjaHIgKHRlbXBsLT5uYW1lX3RlbXBsYXRlLCAnJScpKSB7Ci0gICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyY21wIChuYW1lLCB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSkgPT0gMCwgTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNvbnN0IGdjaGFyICpzdHIsICpkYXRhOwotICAgICAgZ2NoYXIgKmVuZHB0cjsKLQotICAgICAgLyogT3RoZXJ3aXNlIGNoZWNrIGlmIGl0J3MgYSB2YWxpZCBuYW1lIGZvciB0aGUgbmFtZSB0ZW1wbGF0ZSAqLwotICAgICAgc3RyID0gc3RyY2hyICh0ZW1wbC0+bmFtZV90ZW1wbGF0ZSwgJyUnKTsKLSAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHIgIT0gTlVMTCwgTlVMTCk7Ci0gICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RybmNtcCAodGVtcGwtPm5hbWVfdGVtcGxhdGUsIG5hbWUsCi0gICAgICAgICAgICAgIHN0ciAtIHRlbXBsLT5uYW1lX3RlbXBsYXRlKSA9PSAwLCBOVUxMKTsKLSAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJsZW4gKG5hbWUpID4gc3RyIC0gdGVtcGwtPm5hbWVfdGVtcGxhdGUsIE5VTEwpOwotCi0gICAgICBkYXRhID0gbmFtZSArIChzdHIgLSB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSk7Ci0KLSAgICAgIC8qIENhbiBlaXRoZXIgYmUgJXMgb3IgJWQgb3IgJXUsIGRvIHNhbml0eSBjaGVja2luZyBmb3IgJWQgKi8KLSAgICAgIGlmICgqKHN0ciArIDEpID09ICdkJykgewotICAgICAgICBnaW50NjQgdG1wOwotCi0gICAgICAgIC8qIGl0J3MgYW4gaW50ICovCi0gICAgICAgIHRtcCA9IGdfYXNjaWlfc3RydG9sbCAoZGF0YSwgJmVuZHB0ciwgMTApOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAodG1wID49IEdfTUlOSU5UICYmIHRtcCA8PSBHX01BWElOVAotICAgICAgICAgICAgJiYgKmVuZHB0ciA9PSAnXDAnLCBOVUxMKTsKLSAgICAgIH0gZWxzZSBpZiAoKihzdHIgKyAxKSA9PSAndScpIHsKLSAgICAgICAgZ3VpbnQ2NCB0bXA7Ci0KLSAgICAgICAgLyogaXQncyBhbiBpbnQgKi8KLSAgICAgICAgdG1wID0gZ19hc2NpaV9zdHJ0b3VsbCAoZGF0YSwgJmVuZHB0ciwgMTApOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAodG1wIDw9IEdfTUFYVUlOVCAmJiAqZW5kcHRyID09ICdcMCcsIE5VTEwpOwotICAgICAgfQotICAgIH0KLQotICAgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCBuYW1lKTsKLSAgICBpZiAocGFkKSB7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICAgICAgLyogRklYTUUgMi4wOiBDaGFuZ2UgdGhpcyB0byBnX3JldHVybl92YWxfaWZfZmFpbCgpICovCi0gICAgICBnX2NyaXRpY2FsICgiRWxlbWVudCAlcyBhbHJlYWR5IGhhcyBhIHBhZCBuYW1lZCAlcywgdGhlIGJlaGF2aW91ciBvZiAiCi0gICAgICAgICAgIiBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKSBmb3IgZXhpc3RpbmcgcGFkcyBpcyB1bmRlZmluZWQhIiwKLSAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSwgbmFtZSk7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICBpZiAob2NsYXNzLT5yZXF1ZXN0X25ld19wYWQpCi0gICAgbmV3cGFkID0gKG9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkKSAoZWxlbWVudCwgdGVtcGwsIG5hbWUsIGNhcHMpOwotCi0gIGlmIChuZXdwYWQpCi0gICAgZ3N0X29iamVjdF9yZWYgKG5ld3BhZCk7Ci0KLSAgcmV0dXJuIG5ld3BhZDsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQ6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBmaW5kIGEgcmVxdWVzdCBwYWQgb2YuCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHJlcXVlc3QgI0dzdFBhZCB0byByZXRyaWV2ZS4KLSAqCi0gKiBSZXRyaWV2ZXMgYSBwYWQgZnJvbSB0aGUgZWxlbWVudCBieSBuYW1lIChlLmcuICJzcmNfXCVkIikuIFRoaXMgdmVyc2lvbiBvbmx5Ci0gKiByZXRyaWV2ZXMgcmVxdWVzdCBwYWRzLiBUaGUgcGFkIHNob3VsZCBiZSByZWxlYXNlZCB3aXRoCi0gKiBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKCkuCi0gKgotICogVGhpcyBtZXRob2QgaXMgc2xvd2VyIHRoYW4gbWFudWFsbHkgZ2V0dGluZyB0aGUgcGFkIHRlbXBsYXRlIGFuZCBjYWxsaW5nCi0gKiBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCgpIGlmIHRoZSBwYWRzIHNob3VsZCBoYXZlIGEgc3BlY2lmaWMgbmFtZSAoZS5nLgotICogQG5hbWUgaXMgInNyY18xIiBpbnN0ZWFkIG9mICJzcmNfXCV1IikuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHJlcXVlc3RlZCAjR3N0UGFkIGlmIGZvdW5kLAotICogICAgIG90aGVyd2lzZSAlTlVMTC4gIFJlbGVhc2UgYWZ0ZXIgdXNhZ2UuCi0gKi8KLUdzdFBhZCAqCi1nc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbCA9IE5VTEw7Ci0gIEdzdFBhZCAqcGFkOwotICBjb25zdCBnY2hhciAqcmVxX25hbWUgPSBOVUxMOwotICBnYm9vbGVhbiB0ZW1wbF9mb3VuZCA9IEZBTFNFOwotICBHTGlzdCAqbGlzdDsKLSAgY29uc3QgZ2NoYXIgKmRhdGE7Ci0gIGdjaGFyICpzdHIsICplbmRwdHIgPSBOVUxMOwotICBHc3RFbGVtZW50Q2xhc3MgKmNsYXNzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKLQotICBjbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0KLSAgLyogaWYgdGhlIG5hbWUgY29udGFpbnMgYSAlLCB3ZSBhc3N1bWUgaXQncyB0aGUgY29tcGxldGUgdGVtcGxhdGUgbmFtZS4gR2V0Ci0gICAqIHRoZSB0ZW1wbGF0ZSBhbmQgdHJ5IHRvIGdldCBhIHBhZCAqLwotICBpZiAoc3Ryc3RyIChuYW1lLCAiJSIpKSB7Ci0gICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcmVxdWVzdF9wYWRfdGVtcGxhdGUgKGNsYXNzLCBuYW1lKTsKLSAgICByZXFfbmFtZSA9IE5VTEw7Ci0gICAgaWYgKHRlbXBsKQotICAgICAgdGVtcGxfZm91bmQgPSBUUlVFOwotICB9IGVsc2UgewotICAgIC8qIHRoZXJlIGlzIG5vICUgaW4gdGhlIG5hbWUsIHRyeSB0byBmaW5kIGEgbWF0Y2hpbmcgdGVtcGxhdGUgKi8KLSAgICBsaXN0ID0gY2xhc3MtPnBhZHRlbXBsYXRlczsKLSAgICB3aGlsZSAoIXRlbXBsX2ZvdW5kICYmIGxpc3QpIHsKLSAgICAgIHRlbXBsID0gKEdzdFBhZFRlbXBsYXRlICopIGxpc3QtPmRhdGE7Ci0gICAgICBpZiAodGVtcGwtPnByZXNlbmNlID09IEdTVF9QQURfUkVRVUVTVCkgewotICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BBRFMsICJjb21wYXJpbmcgJXMgdG8gJXMiLCBuYW1lLAotICAgICAgICAgICAgdGVtcGwtPm5hbWVfdGVtcGxhdGUpOwotICAgICAgICAvKiBzZWUgaWYgd2UgZmluZCBhbiBleGFjdCBtYXRjaCAqLwotICAgICAgICBpZiAoc3RyY21wIChuYW1lLCB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSkgPT0gMCkgewotICAgICAgICAgIHRlbXBsX2ZvdW5kID0gVFJVRTsKLSAgICAgICAgICByZXFfbmFtZSA9IG5hbWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLyogQmVjYXVzZSBvZiBzYW5pdHkgY2hlY2tzIGluIGdzdF9wYWRfdGVtcGxhdGVfbmV3KCksIHdlIGtub3cgdGhhdCAlcwotICAgICAgICAgICBhbmQgJWQgYW5kICV1LCBvY2N1cnJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgbmFtZV90ZW1wbGF0ZSwgYXJlIHRoZSBvbmx5Ci0gICAgICAgICAgIHBvc3NpYmlsaXRpZXMuICovCi0gICAgICAgIGVsc2UgaWYgKChzdHIgPSBzdHJjaHIgKHRlbXBsLT5uYW1lX3RlbXBsYXRlLCAnJScpKQotICAgICAgICAgICAgJiYgc3RybmNtcCAodGVtcGwtPm5hbWVfdGVtcGxhdGUsIG5hbWUsCi0gICAgICAgICAgICAgICAgc3RyIC0gdGVtcGwtPm5hbWVfdGVtcGxhdGUpID09IDAKLSAgICAgICAgICAgICYmIHN0cmxlbiAobmFtZSkgPiBzdHIgLSB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSkgewotICAgICAgICAgIGRhdGEgPSBuYW1lICsgKHN0ciAtIHRlbXBsLT5uYW1lX3RlbXBsYXRlKTsKLSAgICAgICAgICBpZiAoKihzdHIgKyAxKSA9PSAnZCcpIHsKLSAgICAgICAgICAgIGdsb25nIHRtcDsKLQotICAgICAgICAgICAgLyogaXQncyBhbiBpbnQgKi8KLSAgICAgICAgICAgIHRtcCA9IHN0cnRvbCAoZGF0YSwgJmVuZHB0ciwgMTApOwotICAgICAgICAgICAgaWYgKHRtcCAhPSBHX01JTkxPTkcgJiYgdG1wICE9IEdfTUFYTE9ORyAmJiBlbmRwdHIgJiYKLSAgICAgICAgICAgICAgICAqZW5kcHRyID09ICdcMCcpIHsKLSAgICAgICAgICAgICAgdGVtcGxfZm91bmQgPSBUUlVFOwotICAgICAgICAgICAgICByZXFfbmFtZSA9IG5hbWU7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSBpZiAoKihzdHIgKyAxKSA9PSAndScpIHsKLSAgICAgICAgICAgIGd1bG9uZyB0bXA7Ci0KLSAgICAgICAgICAgIC8qIGl0J3MgYW4gaW50ICovCi0gICAgICAgICAgICB0bXAgPSBzdHJ0b3VsIChkYXRhLCAmZW5kcHRyLCAxMCk7Ci0gICAgICAgICAgICBpZiAodG1wICE9IEdfTUFYVUxPTkcgJiYgZW5kcHRyICYmICplbmRwdHIgPT0gJ1wwJykgewotICAgICAgICAgICAgICB0ZW1wbF9mb3VuZCA9IFRSVUU7Ci0gICAgICAgICAgICAgIHJlcV9uYW1lID0gbmFtZTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGl0J3MgYSBzdHJpbmcgKi8KLSAgICAgICAgICAgIHRlbXBsX2ZvdW5kID0gVFJVRTsKLSAgICAgICAgICAgIHJlcV9uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCF0ZW1wbF9mb3VuZCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBwYWQgPSBfZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKGVsZW1lbnQsIHRlbXBsLCByZXFfbmFtZSwgTlVMTCk7Ci0KLSAgcmV0dXJuIHBhZDsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZDogKHZpcnR1YWwgcmVxdWVzdF9uZXdfcGFkKQotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gZmluZCBhIHJlcXVlc3QgcGFkIG9mLgotICogQHRlbXBsOiBhICNHc3RQYWRUZW1wbGF0ZSBvZiB3aGljaCB3ZSB3YW50IGEgcGFkIG9mLgotICogQG5hbWU6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0ICNHc3RQYWQKLSAqIHRvIHJldHJpZXZlLiBDYW4gYmUgJU5VTEwuCi0gKiBAY2FwczogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlIGNhcHMgb2YgdGhlIHBhZCB3ZSB3YW50IHRvCi0gKiByZXF1ZXN0LiBDYW4gYmUgJU5VTEwuCi0gKgotICogUmV0cmlldmVzIGEgcmVxdWVzdCBwYWQgZnJvbSB0aGUgZWxlbWVudCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIHRlbXBsYXRlLgotICogUGFkIHRlbXBsYXRlcyBjYW4gYmUgbG9va2VkIHVwIHVzaW5nCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcygpLgotICoKLSAqIFRoZSBwYWQgc2hvdWxkIGJlIHJlbGVhc2VkIHdpdGggZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiByZXF1ZXN0ZWQgI0dzdFBhZCBpZiBmb3VuZCwKLSAqICAgICBvdGhlcndpc2UgJU5VTEwuICBSZWxlYXNlIGFmdGVyIHVzYWdlLgotICovCi1Hc3RQYWQgKgotZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGVtcGwgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0ZW1wbC0+cHJlc2VuY2UgPT0gR1NUX1BBRF9SRVFVRVNULCBOVUxMKTsKLQotICByZXR1cm4gX2dzdF9lbGVtZW50X3JlcXVlc3RfcGFkIChlbGVtZW50LCB0ZW1wbCwgbmFtZSwgY2Fwcyk7Ci19Ci0KLXN0YXRpYyBHc3RJdGVyYXRvciAqCi1nc3RfZWxlbWVudF9pdGVyYXRlX3BhZF9saXN0IChHc3RFbGVtZW50ICogZWxlbWVudCwgR0xpc3QgKiogcGFkbGlzdCkKLXsKLSAgR3N0SXRlcmF0b3IgKnJlc3VsdDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICByZXN1bHQgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdTVF9UWVBFX1BBRCwKLSAgICAgIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKGVsZW1lbnQpLAotICAgICAgJmVsZW1lbnQtPnBhZHNfY29va2llLCBwYWRsaXN0LCAoR09iamVjdCAqKSBlbGVtZW50LCBOVUxMKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gaXRlcmF0ZSBwYWRzIG9mLgotICoKLSAqIFJldHJpZXZlcyBhbiBpdGVyYXRvciBvZiBAZWxlbWVudCdzIHBhZHMuIFRoZSBpdGVyYXRvciBzaG91bGQKLSAqIGJlIGZyZWVkIGFmdGVyIHVzYWdlLiBBbHNvIG1vcmUgc3BlY2lhbGl6ZWQgaXRlcmF0b3JzIGV4aXN0cyBzdWNoIGFzCi0gKiBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzKCkgb3IgZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMoKS4KLSAqCi0gKiBUaGUgb3JkZXIgb2YgcGFkcyByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3Igd2lsbCBiZSB0aGUgb3JkZXIgaW4gd2hpY2gKLSAqIHRoZSBwYWRzIHdlcmUgYWRkZWQgdG8gdGhlIGVsZW1lbnQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEl0ZXJhdG9yIG9mICNHc3RQYWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0SXRlcmF0b3IgKgotZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkX2xpc3QgKGVsZW1lbnQsICZlbGVtZW50LT5wYWRzKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCi0gKgotICogUmV0cmlldmVzIGFuIGl0ZXJhdG9yIG9mIEBlbGVtZW50J3Mgc291cmNlIHBhZHMuCi0gKgotICogVGhlIG9yZGVyIG9mIHBhZHMgcmV0dXJuZWQgYnkgdGhlIGl0ZXJhdG9yIHdpbGwgYmUgdGhlIG9yZGVyIGluIHdoaWNoCi0gKiB0aGUgcGFkcyB3ZXJlIGFkZGVkIHRvIHRoZSBlbGVtZW50LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RJdGVyYXRvciBvZiAjR3N0UGFkLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdEl0ZXJhdG9yICoKLWdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRfbGlzdCAoZWxlbWVudCwgJmVsZW1lbnQtPnNyY3BhZHMpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCi0gKgotICogUmV0cmlldmVzIGFuIGl0ZXJhdG9yIG9mIEBlbGVtZW50J3Mgc2luayBwYWRzLgotICoKLSAqIFRoZSBvcmRlciBvZiBwYWRzIHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvciB3aWxsIGJlIHRoZSBvcmRlciBpbiB3aGljaAotICogdGhlIHBhZHMgd2VyZSBhZGRlZCB0byB0aGUgZWxlbWVudC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0SXRlcmF0b3Igb2YgI0dzdFBhZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RJdGVyYXRvciAqCi1nc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOwotCi0gIHJldHVybiBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZF9saXN0IChlbGVtZW50LCAmZWxlbWVudC0+c2lua3BhZHMpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGU6Ci0gKiBAa2xhc3M6IHRoZSAjR3N0RWxlbWVudENsYXNzIHRvIGFkZCB0aGUgcGFkIHRlbXBsYXRlIHRvLgotICogQHRlbXBsOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdFBhZFRlbXBsYXRlIHRvIGFkZCB0byB0aGUgZWxlbWVudCBjbGFzcy4KLSAqCi0gKiBBZGRzIGEgcGFkdGVtcGxhdGUgdG8gYW4gZWxlbWVudCBjbGFzcy4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbiB0aGUgX2NsYXNzX2luaXQKLSAqIGZ1bmN0aW9ucyBvZiBjbGFzc2VzLiBJZiBhIHBhZCB0ZW1wbGF0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gYWxyZWFkeQotICogZXhpc3Rpbmcgb25lIGlzIGFkZGVkIHRoZSBvbGQgb25lIGlzIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lLgotICoKLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoR3N0RWxlbWVudENsYXNzICoga2xhc3MsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKLXsKLSAgR0xpc3QgKnRlbXBsYXRlX2xpc3QgPSBrbGFzcy0+cGFkdGVtcGxhdGVzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0NMQVNTIChrbGFzcykpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEX1RFTVBMQVRFICh0ZW1wbCkpOwotCi0gIC8qIElmIHdlIGFscmVhZHkgaGF2ZSBhIHBhZCB0ZW1wbGF0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgcmVwbGFjZSB0aGUKLSAgICogb2xkIG9uZS4gKi8KLSAgd2hpbGUgKHRlbXBsYXRlX2xpc3QpIHsKLSAgICBHc3RQYWRUZW1wbGF0ZSAqcGFkdGVtcGwgPSAoR3N0UGFkVGVtcGxhdGUgKikgdGVtcGxhdGVfbGlzdC0+ZGF0YTsKLQotICAgIC8qIEZvdW5kIHBhZCB3aXRoIHRoZSBzYW1lIG5hbWUsIHJlcGxhY2UgYW5kIHJldHVybiAqLwotICAgIGlmIChzdHJjbXAgKHRlbXBsLT5uYW1lX3RlbXBsYXRlLCBwYWR0ZW1wbC0+bmFtZV90ZW1wbGF0ZSkgPT0gMCkgewotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFkdGVtcGwpOwotICAgICAgdGVtcGxhdGVfbGlzdC0+ZGF0YSA9IHRlbXBsOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0ZW1wbGF0ZV9saXN0ID0gZ19saXN0X25leHQgKHRlbXBsYXRlX2xpc3QpOwotICB9Ci0KLSAgLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGZsb2F0aW5nIHJlZiAqLwotICBnc3Rfb2JqZWN0X3JlZl9zaW5rICh0ZW1wbCk7Ci0KLSAga2xhc3MtPnBhZHRlbXBsYXRlcyA9IGdfbGlzdF9hcHBlbmQgKGtsYXNzLT5wYWR0ZW1wbGF0ZXMsIHRlbXBsKTsKLSAga2xhc3MtPm51bXBhZHRlbXBsYXRlcysrOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlOgotICogQGtsYXNzOiB0aGUgI0dzdEVsZW1lbnRDbGFzcyB0byBhZGQgdGhlIHBhZCB0ZW1wbGF0ZSB0by4KLSAqIEBzdGF0aWNfdGVtcGw6ICNHc3RTdGF0aWNQYWRUZW1wbGF0ZSB0byBhZGQgYXMgcGFkIHRlbXBsYXRlIHRvIHRoZSBlbGVtZW50IGNsYXNzLgotICoKLSAqIEFkZHMgYSBwYWQgdGVtcGxhdGUgdG8gYW4gZWxlbWVudCBjbGFzcyBiYXNlZCBvbiB0aGUgc3RhdGljIHBhZCB0ZW1wbGF0ZQotICogQHRlbXBsLiBUaGlzIGlzIG1haW5seSB1c2VkIGluIHRoZSBfY2xhc3NfaW5pdCBmdW5jdGlvbnMgb2YgZWxlbWVudAotICogaW1wbGVtZW50YXRpb25zLiBJZiBhIHBhZCB0ZW1wbGF0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsCi0gKiB0aGUgb2xkIG9uZSBpcyByZXBsYWNlZCBieSB0aGUgbmV3IG9uZS4KLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLXZvaWQKLWdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHN0YXRpY190ZW1wbCkKLXsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoa2xhc3MsCi0gICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKHN0YXRpY190ZW1wbCkpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YToKLSAqIEBrbGFzczogY2xhc3MgdG8gc2V0IG1ldGFkYXRhIGZvcgotICogQGtleTogdGhlIGtleSB0byBzZXQKLSAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIHNldAotICoKLSAqIFNldCBAa2V5IHdpdGggQHZhbHVlIGFzIG1ldGFkYXRhIGluIEBrbGFzcy4KLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX21ldGFkYXRhIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywKLSAgICBjb25zdCBnY2hhciAqIGtleSwgY29uc3QgZ2NoYXIgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGtleSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAodmFsdWUgIT0gTlVMTCk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKChHc3RTdHJ1Y3R1cmUgKikga2xhc3MtPm1ldGFkYXRhLAotICAgICAga2V5LCBHX1RZUEVfU1RSSU5HLCB2YWx1ZSwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YToKLSAqIEBrbGFzczogY2xhc3MgdG8gc2V0IG1ldGFkYXRhIGZvcgotICogQGtleTogdGhlIGtleSB0byBzZXQKLSAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIHNldAotICoKLSAqIFNldCBAa2V5IHdpdGggQHZhbHVlIGFzIG1ldGFkYXRhIGluIEBrbGFzcy4KLSAqCi0gKiBTYW1lIGFzIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9tZXRhZGF0YSgpLCBidXQgQHZhbHVlIG11c3QgYmUgYSBzdGF0aWMgc3RyaW5nCi0gKiBvciBhbiBpbmxpbmVkIHN0cmluZywgYXMgaXQgd2lsbCBub3QgYmUgY29waWVkLiAoR1N0cmVhbWVyIHBsdWdpbnMgd2lsbAotICogYmUgbWFkZSByZXNpZGVudCBvbmNlIGxvYWRlZCwgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBldmVuIGZyb20KLSAqIGR5bmFtaWNhbGx5IGxvYWRlZCBwbHVnaW5zLikKLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YSAoR3N0RWxlbWVudENsYXNzICoga2xhc3MsCi0gICAgY29uc3QgZ2NoYXIgKiBrZXksIGNvbnN0IGdjaGFyICogdmFsdWUpCi17Ci0gIEdWYWx1ZSB2YWwgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGtleSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAodmFsdWUgIT0gTlVMTCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfU1RSSU5HKTsKLSAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnZhbCwgdmFsdWUpOwotICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKChHc3RTdHJ1Y3R1cmUgKikga2xhc3MtPm1ldGFkYXRhLCBrZXksICZ2YWwpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YToKLSAqIEBrbGFzczogY2xhc3MgdG8gc2V0IG1ldGFkYXRhIGZvcgotICogQGxvbmduYW1lOiBUaGUgbG9uZyBFbmdsaXNoIG5hbWUgb2YgdGhlIGVsZW1lbnQuIEUuZy4gIkZpbGUgU2luayIKLSAqIEBjbGFzc2lmaWNhdGlvbjogU3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgZWxlbWVudCwgYXMgYW4gdW5vcmRlcmVkIGxpc3QKLSAqIHNlcGFyYXRlZCB3aXRoIHNsYXNoZXMgKCcvJykuIFNlZSBkcmFmdC1rbGFzcy50eHQgb2YgdGhlIGRlc2lnbiBkb2NzCi0gKiBmb3IgbW9yZSBkZXRhaWxzIGFuZCBjb21tb24gdHlwZXMuIEUuZzogIlNpbmsvRmlsZSIKLSAqIEBkZXNjcmlwdGlvbjogU2VudGVuY2UgZGVzY3JpYmluZyB0aGUgcHVycG9zZSBvZiB0aGUgZWxlbWVudC4KLSAqIEUuZzogIldyaXRlIHN0cmVhbSB0byBhIGZpbGUiCi0gKiBAYXV0aG9yOiBOYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGF1dGhvcihzKS4gVXNlIFxuIHRvIHNlcGFyYXRlCi0gKiBtdWx0aXBsZSBhdXRob3IgbWV0YWRhdGEuIEUuZzogIkpvZSBCbG9nZ3MgJmx0O2pvZS5ibG9ncyBhdCBmb28uY29tJmd0OyIKLSAqCi0gKiBTZXRzIHRoZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgYSAjR3N0RWxlbWVudENsYXNzLgotICogPG5vdGU+VGhpcyBmdW5jdGlvbiBpcyBmb3IgdXNlIGluIF9jbGFzc19pbml0IGZ1bmN0aW9ucyBvbmx5Ljwvbm90ZT4KLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywKLSAgICBjb25zdCBnY2hhciAqIGxvbmduYW1lLCBjb25zdCBnY2hhciAqIGNsYXNzaWZpY2F0aW9uLAotICAgIGNvbnN0IGdjaGFyICogZGVzY3JpcHRpb24sIGNvbnN0IGdjaGFyICogYXV0aG9yKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9DTEFTUyAoa2xhc3MpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAobG9uZ25hbWUgIT0gTlVMTCAmJiAqbG9uZ25hbWUgIT0gJ1wwJyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNsYXNzaWZpY2F0aW9uICE9IE5VTEwgJiYgKmNsYXNzaWZpY2F0aW9uICE9ICdcMCcpOwotICBnX3JldHVybl9pZl9mYWlsIChkZXNjcmlwdGlvbiAhPSBOVUxMICYmICpkZXNjcmlwdGlvbiAhPSAnXDAnKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoYXV0aG9yICE9IE5VTEwgJiYgKmF1dGhvciAhPSAnXDAnKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoKEdzdFN0cnVjdHVyZSAqKSBrbGFzcy0+bWV0YWRhdGEsCi0gICAgICBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpLCBHX1RZUEVfU1RSSU5HLCBsb25nbmFtZSwKLSAgICAgIEdTVF9RVUFSSyAoRUxFTUVOVF9NRVRBREFUQV9LTEFTUyksIEdfVFlQRV9TVFJJTkcsIGNsYXNzaWZpY2F0aW9uLAotICAgICAgR1NUX1FVQVJLIChFTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OKSwgR19UWVBFX1NUUklORywgZGVzY3JpcHRpb24sCi0gICAgICBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfQVVUSE9SKSwgR19UWVBFX1NUUklORywgYXV0aG9yLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhOgotICogQGtsYXNzOiBjbGFzcyB0byBzZXQgbWV0YWRhdGEgZm9yCi0gKiBAbG9uZ25hbWU6IFRoZSBsb25nIEVuZ2xpc2ggbmFtZSBvZiB0aGUgZWxlbWVudC4gRS5nLiAiRmlsZSBTaW5rIgotICogQGNsYXNzaWZpY2F0aW9uOiBTdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlbGVtZW50LCBhcyBhbiB1bm9yZGVyZWQgbGlzdAotICogc2VwYXJhdGVkIHdpdGggc2xhc2hlcyAoJy8nKS4gU2VlIGRyYWZ0LWtsYXNzLnR4dCBvZiB0aGUgZGVzaWduIGRvY3MKLSAqIGZvciBtb3JlIGRldGFpbHMgYW5kIGNvbW1vbiB0eXBlcy4gRS5nOiAiU2luay9GaWxlIgotICogQGRlc2NyaXB0aW9uOiBTZW50ZW5jZSBkZXNjcmliaW5nIHRoZSBwdXJwb3NlIG9mIHRoZSBlbGVtZW50LgotICogRS5nOiAiV3JpdGUgc3RyZWFtIHRvIGEgZmlsZSIKLSAqIEBhdXRob3I6IE5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgYXV0aG9yKHMpLiBVc2UgXG4gdG8gc2VwYXJhdGUKLSAqIG11bHRpcGxlIGF1dGhvciBtZXRhZGF0YS4gRS5nOiAiSm9lIEJsb2dncyAmbHQ7am9lLmJsb2dzIGF0IGZvby5jb20mZ3Q7IgotICoKLSAqIFNldHMgdGhlIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhICNHc3RFbGVtZW50Q2xhc3MuCi0gKiA8bm90ZT5UaGlzIGZ1bmN0aW9uIGlzIGZvciB1c2UgaW4gX2NsYXNzX2luaXQgZnVuY3Rpb25zIG9ubHkuPC9ub3RlPgotICoKLSAqIFNhbWUgYXMgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhKCksIGJ1dCBAbG9uZ25hbWUsIEBjbGFzc2lmaWNhdGlvbiwKLSAqIEBkZXNjcmlwdGlvbiwgYW5kIEBhdXRob3IgbXVzdCBiZSBzdGF0aWMgc3RyaW5ncyBvciBpbmxpbmVkIHN0cmluZ3MsIGFzCi0gKiB0aGV5IHdpbGwgbm90IGJlIGNvcGllZC4gKEdTdHJlYW1lciBwbHVnaW5zIHdpbGwgYmUgbWFkZSByZXNpZGVudCBvbmNlCi0gKiBsb2FkZWQsIHNvIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZXZlbiBmcm9tIGR5bmFtaWNhbGx5IGxvYWRlZCBwbHVnaW5zLikKLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoR3N0RWxlbWVudENsYXNzICoga2xhc3MsCi0gICAgY29uc3QgZ2NoYXIgKiBsb25nbmFtZSwgY29uc3QgZ2NoYXIgKiBjbGFzc2lmaWNhdGlvbiwKLSAgICBjb25zdCBnY2hhciAqIGRlc2NyaXB0aW9uLCBjb25zdCBnY2hhciAqIGF1dGhvcikKLXsKLSAgR3N0U3RydWN0dXJlICpzID0gKEdzdFN0cnVjdHVyZSAqKSBrbGFzcy0+bWV0YWRhdGE7Ci0gIEdWYWx1ZSB2YWwgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGxvbmduYW1lICE9IE5VTEwgJiYgKmxvbmduYW1lICE9ICdcMCcpOwotICBnX3JldHVybl9pZl9mYWlsIChjbGFzc2lmaWNhdGlvbiAhPSBOVUxMICYmICpjbGFzc2lmaWNhdGlvbiAhPSAnXDAnKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZGVzY3JpcHRpb24gIT0gTlVMTCAmJiAqZGVzY3JpcHRpb24gIT0gJ1wwJyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGF1dGhvciAhPSBOVUxMICYmICphdXRob3IgIT0gJ1wwJyk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfU1RSSU5HKTsKLQotICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdmFsLCBsb25nbmFtZSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzLCBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpLCAmdmFsKTsKLQotICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdmFsLCBjbGFzc2lmaWNhdGlvbik7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzLCBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfS0xBU1MpLCAmdmFsKTsKLQotICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdmFsLCBkZXNjcmlwdGlvbik7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzLCBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT04pLAotICAgICAgJnZhbCk7Ci0KLSAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnZhbCwgYXV0aG9yKTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChzLCBHU1RfUVVBUksgKEVMRU1FTlRfTUVUQURBVEFfQVVUSE9SKSwgJnZhbCk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhOgotICogQGtsYXNzOiBjbGFzcyB0byBnZXQgbWV0YWRhdGEgZm9yCi0gKiBAa2V5OiB0aGUga2V5IHRvIGdldAotICoKLSAqIEdldCBtZXRhZGF0YSB3aXRoIEBrZXkgaW4gQGtsYXNzLgotICoKLSAqIFJldHVybnM6IHRoZSBtZXRhZGF0YSBmb3IgQGtleS4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhIChHc3RFbGVtZW50Q2xhc3MgKiBrbGFzcywgY29uc3QgZ2NoYXIgKiBrZXkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9DTEFTUyAoa2xhc3MpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGtleSAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nICgoR3N0U3RydWN0dXJlICopIGtsYXNzLT5tZXRhZGF0YSwga2V5KTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3Q6Ci0gKiBAZWxlbWVudF9jbGFzczogYSAjR3N0RWxlbWVudENsYXNzIHRvIGdldCBwYWQgdGVtcGxhdGVzIG9mLgotICoKLSAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgdGhlIHBhZCB0ZW1wbGF0ZXMgYXNzb2NpYXRlZCB3aXRoIEBlbGVtZW50X2NsYXNzLiBUaGUKLSAqIGxpc3QgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxpbmcgY29kZS4KLSAqIDxub3RlPklmIHlvdSB1c2UgdGhpcyBmdW5jdGlvbiBpbiB0aGUgI0dJbnN0YW5jZUluaXRGdW5jIG9mIGFuIG9iamVjdCBjbGFzcwotICogdGhhdCBoYXMgc3ViY2xhc3NlcywgbWFrZSBzdXJlIHRvIHBhc3MgdGhlIGdfY2xhc3MgcGFyYW1ldGVyIG9mIHRoZQotICogI0dJbnN0YW5jZUluaXRGdW5jIGhlcmUuPC9ub3RlPgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoZWxlbWVudC10eXBlIEdzdC5QYWRUZW1wbGF0ZSk6IHRoZSAjR0xpc3Qgb2YKLSAqICAgICBwYWQgdGVtcGxhdGVzLgotICovCi1HTGlzdCAqCi1nc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKEdzdEVsZW1lbnRDbGFzcyAqIGVsZW1lbnRfY2xhc3MpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9DTEFTUyAoZWxlbWVudF9jbGFzcyksIE5VTEwpOwotCi0gIHJldHVybiBlbGVtZW50X2NsYXNzLT5wYWR0ZW1wbGF0ZXM7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZToKLSAqIEBlbGVtZW50X2NsYXNzOiBhICNHc3RFbGVtZW50Q2xhc3MgdG8gZ2V0IHRoZSBwYWQgdGVtcGxhdGUgb2YuCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlICNHc3RQYWRUZW1wbGF0ZSB0byBnZXQuCi0gKgotICogUmV0cmlldmVzIGEgcGFkdGVtcGxhdGUgZnJvbSBAZWxlbWVudF9jbGFzcyB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICogPG5vdGU+SWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSAjR0luc3RhbmNlSW5pdEZ1bmMgb2YgYW4gb2JqZWN0IGNsYXNzCi0gKiB0aGF0IGhhcyBzdWJjbGFzc2VzLCBtYWtlIHN1cmUgdG8gcGFzcyB0aGUgZ19jbGFzcyBwYXJhbWV0ZXIgb2YgdGhlCi0gKiAjR0luc3RhbmNlSW5pdEZ1bmMgaGVyZS48L25vdGU+Ci0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChudWxsYWJsZSk6IHRoZSAjR3N0UGFkVGVtcGxhdGUgd2l0aCB0aGUKLSAqICAgICBnaXZlbiBuYW1lLCBvciAlTlVMTCBpZiBub25lIHdhcyBmb3VuZC4gTm8gdW5yZWZlcmVuY2luZyBpcwotICogICAgIG5lY2Vzc2FyeS4KLSAqLwotR3N0UGFkVGVtcGxhdGUgKgotZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoR3N0RWxlbWVudENsYXNzICoKLSAgICBlbGVtZW50X2NsYXNzLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdMaXN0ICpwYWRsaXN0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9DTEFTUyAoZWxlbWVudF9jbGFzcyksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKLQotICBwYWRsaXN0ID0gZWxlbWVudF9jbGFzcy0+cGFkdGVtcGxhdGVzOwotCi0gIHdoaWxlIChwYWRsaXN0KSB7Ci0gICAgR3N0UGFkVGVtcGxhdGUgKnBhZHRlbXBsID0gKEdzdFBhZFRlbXBsYXRlICopIHBhZGxpc3QtPmRhdGE7Ci0KLSAgICBpZiAoc3RyY21wIChwYWR0ZW1wbC0+bmFtZV90ZW1wbGF0ZSwgbmFtZSkgPT0gMCkKLSAgICAgIHJldHVybiBwYWR0ZW1wbDsKLQotICAgIHBhZGxpc3QgPSBnX2xpc3RfbmV4dCAocGFkbGlzdCk7Ci0gIH0KLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIEdzdFBhZFRlbXBsYXRlICoKLWdzdF9lbGVtZW50X2NsYXNzX2dldF9yZXF1ZXN0X3BhZF90ZW1wbGF0ZSAoR3N0RWxlbWVudENsYXNzICoKLSAgICBlbGVtZW50X2NsYXNzLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICp0bXBsOwotCi0gIHRtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCBuYW1lKTsKLSAgaWYgKHRtcGwgIT0gTlVMTCAmJiB0bXBsLT5wcmVzZW5jZSA9PSBHU1RfUEFEX1JFUVVFU1QpCi0gICAgcmV0dXJuIHRtcGw7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGdldCBhIHJhbmRvbSBwYWQgb24gZWxlbWVudCBvZiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgotICogVGhlIHBhZCBpcyByYW5kb20gaW4gYSBzZW5zZSB0aGF0IGl0IGlzIHRoZSBmaXJzdCBwYWQgdGhhdCBpcyAob3B0aW9uYWx5KSBsaW5rZWQuCi0gKi8KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X2VsZW1lbnRfZ2V0X3JhbmRvbV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIGdib29sZWFuIG5lZWRfbGlua2VkLCBHc3RQYWREaXJlY3Rpb24gZGlyKQotewotICBHc3RQYWQgKnJlc3VsdCA9IE5VTEw7Ci0gIEdMaXN0ICpwYWRzOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiZ2V0dGluZyBhIHJhbmRvbSBwYWQiKTsKLQotICBzd2l0Y2ggKGRpcikgewotICAgIGNhc2UgR1NUX1BBRF9TUkM6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICAgICAgcGFkcyA9IGVsZW1lbnQtPnNyY3BhZHM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9QQURfU0lOSzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gICAgICBwYWRzID0gZWxlbWVudC0+c2lua3BhZHM7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ290byB3cm9uZ19kaXJlY3Rpb247Ci0gIH0KLSAgZm9yICg7IHBhZHM7IHBhZHMgPSBnX2xpc3RfbmV4dCAocGFkcykpIHsKLSAgICBHc3RQYWQgKnBhZCA9IEdTVF9QQURfQ0FTVCAocGFkcy0+ZGF0YSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJjaGVja2luZyBwYWQgJXM6JXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gICAgaWYgKG5lZWRfbGlua2VkICYmICFHU1RfUEFEX0lTX0xJTktFRCAocGFkKSkgewotICAgICAgLyogaWYgd2UgcmVxdWlyZSBhIGxpbmtlZCBwYWQsIGFuZCBpdCBpcyBub3QgbGlua2VkLCBjb250aW51ZSB0aGUKLSAgICAgICAqIHNlYXJjaCAqLwotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJwYWQgJXM6JXMgaXMgbm90IGxpbmtlZCIsCi0gICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgICAgY29udGludWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGZvdW5kIGEgcGFkLCBzdG9wIHNlYXJjaCAqLwotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJmb3VuZCBwYWQgJXM6JXMiLAotICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICAgIHJlc3VsdCA9IHBhZDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBpZiAocmVzdWx0KQotICAgIGdzdF9vYmplY3RfcmVmIChyZXN1bHQpOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SIGhhbmRsaW5nICovCi13cm9uZ19kaXJlY3Rpb246Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJ1bmtub3duIHBhZCBkaXJlY3Rpb24gJWQiLCBkaXIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2VsZW1lbnRfZGVmYXVsdF9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0gIEdzdFBhZCAqcGFkOwotCi0gIHBhZCA9IEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkgPwotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3JhbmRvbV9wYWQgKGVsZW1lbnQsIFRSVUUsIEdTVF9QQURfU0lOSykgOgotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3JhbmRvbV9wYWQgKGVsZW1lbnQsIFRSVUUsIEdTVF9QQURfU1JDKTsKLQotICBpZiAocGFkKSB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCi0gICAgICAgICJwdXNoaW5nICVzIGV2ZW50IHRvIHJhbmRvbSAlcyBwYWQgJXM6JXMiLAotICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksCi0gICAgICAgIChHU1RfUEFEX0RJUkVDVElPTiAocGFkKSA9PSBHU1RfUEFEX1NSQyA/ICJzcmMiIDogInNpbmsiKSwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLQotICAgIHJlc3VsdCA9IGdzdF9wYWRfc2VuZF9ldmVudCAocGFkLCBldmVudCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiY2FuJ3Qgc2VuZCAlcyBldmVudCBvbiBlbGVtZW50ICVzIiwKLSAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9zZW5kX2V2ZW50OgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gKiBAZXZlbnQ6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RFdmVudCB0byBzZW5kIHRvIHRoZSBlbGVtZW50LgotICoKLSAqIFNlbmRzIGFuIGV2ZW50IHRvIGFuIGVsZW1lbnQuIElmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGFuCi0gKiBldmVudCBoYW5kbGVyLCB0aGUgZXZlbnQgd2lsbCBiZSBwdXNoZWQgb24gYSByYW5kb20gbGlua2VkIHNpbmsgcGFkIGZvcgotICogZG93bnN0cmVhbSBldmVudHMgb3IgYSByYW5kb20gbGlua2VkIHNvdXJjZSBwYWQgZm9yIHVwc3RyZWFtIGV2ZW50cy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQgc28geW91IHNob3VsZAotICogZ3N0X2V2ZW50X3JlZigpIGl0IGlmIHlvdSB3YW50IHRvIHJldXNlIHRoZSBldmVudCBhZnRlciB0aGlzIGNhbGwuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQuIEV2ZW50cyB0aGF0IHRyaWdnZXIgYSBwcmVyb2xsIChzdWNoCi0gKiBhcyBmbHVzaGluZyBzZWVrcyBhbmQgc3RlcHMpIHdpbGwgZW1pdCAlR1NUX01FU1NBR0VfQVNZTkNfRE9ORS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXZlbnQgIT0gTlVMTCwgRkFMU0UpOwotCi0gIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0KLSAgR1NUX1NUQVRFX0xPQ0sgKGVsZW1lbnQpOwotICBpZiAob2NsYXNzLT5zZW5kX2V2ZW50KSB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJzZW5kICVzIGV2ZW50IG9uIGVsZW1lbnQgJXMiLAotICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgICByZXN1bHQgPSBvY2xhc3MtPnNlbmRfZXZlbnQgKGVsZW1lbnQsIGV2ZW50KTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgfQotICBHU1RfU1RBVEVfVU5MT0NLIChlbGVtZW50KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3NlZWs6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBzZW5kIHRoZSBldmVudCB0by4KLSAqIEByYXRlOiBUaGUgbmV3IHBsYXliYWNrIHJhdGUKLSAqIEBmb3JtYXQ6IFRoZSBmb3JtYXQgb2YgdGhlIHNlZWsgdmFsdWVzCi0gKiBAZmxhZ3M6IFRoZSBvcHRpb25hbCBzZWVrIGZsYWdzLgotICogQHN0YXJ0X3R5cGU6IFRoZSB0eXBlIGFuZCBmbGFncyBmb3IgdGhlIG5ldyBzdGFydCBwb3NpdGlvbgotICogQHN0YXJ0OiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBzdGFydCBwb3NpdGlvbgotICogQHN0b3BfdHlwZTogVGhlIHR5cGUgYW5kIGZsYWdzIGZvciB0aGUgbmV3IHN0b3AgcG9zaXRpb24KLSAqIEBzdG9wOiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBzdG9wIHBvc2l0aW9uCi0gKgotICogU2VuZHMgYSBzZWVrIGV2ZW50IHRvIGFuIGVsZW1lbnQuIFNlZSBnc3RfZXZlbnRfbmV3X3NlZWsoKSBmb3IgdGhlIGRldGFpbHMgb2YKLSAqIHRoZSBwYXJhbWV0ZXJzLiBUaGUgc2VlayBldmVudCBpcyBzZW50IHRvIHRoZSBlbGVtZW50IHVzaW5nCi0gKiBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KCkuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQuIEZsdXNoaW5nIHNlZWtzIHdpbGwgdHJpZ2dlciBhCi0gKiBwcmVyb2xsLCB3aGljaCB3aWxsIGVtaXQgJUdTVF9NRVNTQUdFX0FTWU5DX0RPTkUuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9zZWVrIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ2RvdWJsZSByYXRlLCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIEdzdFNlZWtGbGFncyBmbGFncywgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgZ2ludDY0IHN0YXJ0LAotICAgIEdzdFNlZWtUeXBlIHN0b3BfdHlwZSwgZ2ludDY0IHN0b3ApCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKLQotICBldmVudCA9Ci0gICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgKHJhdGUsIGZvcm1hdCwgZmxhZ3MsIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsCi0gICAgICBzdG9wKTsKLSAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoZWxlbWVudCwgZXZlbnQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2VsZW1lbnRfZGVmYXVsdF9xdWVyeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotICBHc3RQYWQgKnBhZDsKLQotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmFuZG9tX3BhZCAoZWxlbWVudCwgRkFMU0UsIEdTVF9QQURfU1JDKTsKLSAgaWYgKHBhZCkgewotICAgIHJlc3VsdCA9IGdzdF9wYWRfcXVlcnkgKHBhZCwgcXVlcnkpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgfSBlbHNlIHsKLSAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmFuZG9tX3BhZCAoZWxlbWVudCwgVFJVRSwgR1NUX1BBRF9TSU5LKTsKLSAgICBpZiAocGFkKSB7Ci0gICAgICBHc3RQYWQgKnBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOwotCi0gICAgICBpZiAocGVlcikgewotICAgICAgICByZXN1bHQgPSBnc3RfcGFkX3F1ZXJ5IChwZWVyLCBxdWVyeSk7Ci0KLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gICAgICB9Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICAgIH0KLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3F1ZXJ5OgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gcGVyZm9ybSB0aGUgcXVlcnkgb24uCi0gKiBAcXVlcnk6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RRdWVyeS4KLSAqCi0gKiBQZXJmb3JtcyBhIHF1ZXJ5IG9uIHRoZSBnaXZlbiBlbGVtZW50LgotICoKLSAqIEZvciBlbGVtZW50cyB0aGF0IGRvbid0IGltcGxlbWVudCBhIHF1ZXJ5IGhhbmRsZXIsIHRoaXMgZnVuY3Rpb24KLSAqIGZvcndhcmRzIHRoZSBxdWVyeSB0byBhIHJhbmRvbSBzcmNwYWQgb3IgdG8gdGhlIHBlZXIgb2YgYQotICogcmFuZG9tIGxpbmtlZCBzaW5rcGFkIG9mIHRoaXMgZWxlbWVudC4KLSAqCi0gKiBQbGVhc2Ugbm90ZSB0aGF0IHNvbWUgcXVlcmllcyBtaWdodCBuZWVkIGEgcnVubmluZyBwaXBlbGluZSB0byB3b3JrLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X3F1ZXJ5IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAocXVlcnkgIT0gTlVMTCwgRkFMU0UpOwotCi0gIEdTVF9UUkFDRVJfRUxFTUVOVF9RVUVSWV9QUkUgKGVsZW1lbnQsIHF1ZXJ5KTsKLQotICBrbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0gIGlmIChrbGFzcy0+cXVlcnkpIHsKLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgInNlbmQgcXVlcnkgb24gZWxlbWVudCAlcyIsCi0gICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgICByZXMgPSBrbGFzcy0+cXVlcnkgKGVsZW1lbnQsIHF1ZXJ5KTsKLSAgfQotCi0gIEdTVF9UUkFDRVJfRUxFTUVOVF9RVUVSWV9QT1NUIChlbGVtZW50LCBxdWVyeSwgcmVzKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZWxlbWVudF9wb3N0X21lc3NhZ2VfZGVmYXVsdCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBHc3RCdXMgKmJ1czsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVzc2FnZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgYnVzID0gZWxlbWVudC0+YnVzOwotCi0gIGlmIChHX1VOTElLRUxZIChidXMgPT0gTlVMTCkpCi0gICAgZ290byBub19idXM7Ci0KLSAgZ3N0X29iamVjdF9yZWYgKGJ1cyk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICAvKiB3ZSByZWxlYXNlIHRoZSBlbGVtZW50IGxvY2sgd2hlbiBwb3N0aW5nIHRoZSBtZXNzYWdlIHNvIHRoYXQgYW55Ci0gICAqIChzeW5jaHJvbm91cykgbWVzc2FnZSBoYW5kbGVycyBjYW4gb3BlcmF0ZSBvbiB0aGUgZWxlbWVudCAqLwotICByZXN1bHQgPSBnc3RfYnVzX3Bvc3QgKGJ1cywgbWVzc2FnZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2J1czoKLSAgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX01FU1NBR0UsIGVsZW1lbnQsCi0gICAgICAgICJub3QgcG9zdGluZyBtZXNzYWdlICVwOiBubyBidXMiLCBtZXNzYWdlKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZToKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHBvc3RpbmcgdGhlIG1lc3NhZ2UKLSAqIEBtZXNzYWdlOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdE1lc3NhZ2UgdG8gcG9zdAotICoKLSAqIFBvc3QgYSBtZXNzYWdlIG9uIHRoZSBlbGVtZW50J3MgI0dzdEJ1cy4gVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlCi0gKiBtZXNzYWdlOyBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGhlIG1lc3NhZ2UgYWZ0ZXIgdGhpcyBjYWxsLCB5b3Ugc2hvdWxkIGFkZCBhbgotICogYWRkaXRpb25hbCByZWZlcmVuY2UgYmVmb3JlIGNhbGxpbmcuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG1lc3NhZ2Ugd2FzIHN1Y2Nlc3NmdWxseSBwb3N0ZWQuIFRoZSBmdW5jdGlvbiByZXR1cm5zCi0gKiAlRkFMU0UgaWYgdGhlIGVsZW1lbnQgZGlkIG5vdCBoYXZlIGEgYnVzLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVzc2FnZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgR1NUX1RSQUNFUl9FTEVNRU5UX1BPU1RfTUVTU0FHRV9QUkUgKGVsZW1lbnQsIG1lc3NhZ2UpOwotCi0gIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLSAgaWYgKGtsYXNzLT5wb3N0X21lc3NhZ2UpCi0gICAgcmVzID0ga2xhc3MtPnBvc3RfbWVzc2FnZSAoZWxlbWVudCwgbWVzc2FnZSk7Ci0gIGVsc2UKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgR1NUX1RSQUNFUl9FTEVNRU5UX1BPU1RfTUVTU0FHRV9QT1NUIChlbGVtZW50LCByZXMpOwotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGY6Ci0gKiBAZm9ybWF0OiAoYWxsb3ctbm9uZSk6IHRoZSBwcmludGYtbGlrZSBmb3JtYXQgdG8gdXNlLCBvciAlTlVMTAotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIGludGVybmFsbHkgYnkgdGhlIGdzdF9lbGVtZW50X2Vycm9yKCkgbWFjcm8uCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZywgb3IKLSAqICAgICAlTlVMTCBpZiB0aGUgZm9ybWF0IHdhcyAlTlVMTCBvciAiIgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdjaGFyICoKLV9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgKGNvbnN0IGdjaGFyICogZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgZ2NoYXIgKmJ1ZmZlcjsKLSAgaW50IGxlbjsKLQotICBpZiAoZm9ybWF0ID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGlmIChmb3JtYXRbMF0gPT0gMCkKLSAgICByZXR1cm4gTlVMTDsKLQotICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKLQotICBsZW4gPSBfX2dzdF92YXNwcmludGYgKCZidWZmZXIsIGZvcm1hdCwgYXJncyk7Ci0KLSAgdmFfZW5kIChhcmdzKTsKLQotICBpZiAobGVuIDwgMCkKLSAgICBidWZmZXIgPSBOVUxMOwotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsX3dpdGhfZGV0YWlsczoKLSAqIEBlbGVtZW50OiAgYSAjR3N0RWxlbWVudCB0byBzZW5kIG1lc3NhZ2UgZnJvbQotICogQHR5cGU6ICAgICB0aGUgI0dzdE1lc3NhZ2VUeXBlCi0gKiBAZG9tYWluOiAgIHRoZSBHU3RyZWFtZXIgR0Vycm9yIGRvbWFpbiB0aGlzIG1lc3NhZ2UgYmVsb25ncyB0bwotICogQGNvZGU6ICAgICB0aGUgR0Vycm9yIGNvZGUgYmVsb25naW5nIHRvIHRoZSBkb21haW4KLSAqIEB0ZXh0OiAgICAgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogYW4gYWxsb2NhdGVkIHRleHQgc3RyaW5nIHRvIGJlIHVzZWQKLSAqICAgICAgICAgICAgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgbWVzc2FnZSBjb25uZWN0ZWQgdG8gY29kZSwKLSAqICAgICAgICAgICAgb3IgJU5VTEwKLSAqIEBkZWJ1ZzogICAgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogYW4gYWxsb2NhdGVkIGRlYnVnIG1lc3NhZ2UgdG8gYmUKLSAqICAgICAgICAgICAgdXNlZCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgZGVmYXVsdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sCi0gKiAgICAgICAgICAgIG9yICVOVUxMCi0gKiBAZmlsZTogICAgIHRoZSBzb3VyY2UgY29kZSBmaWxlIHdoZXJlIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkCi0gKiBAZnVuY3Rpb246IHRoZSBzb3VyY2UgY29kZSBmdW5jdGlvbiB3aGVyZSB0aGUgZXJyb3Igd2FzIGdlbmVyYXRlZAotICogQGxpbmU6ICAgICB0aGUgc291cmNlIGNvZGUgbGluZSB3aGVyZSB0aGUgZXJyb3Igd2FzIGdlbmVyYXRlZAotICogQHN0cnVjdHVyZToodHJhbnNmZXIgZnVsbCk6IG9wdGlvbmFsIGRldGFpbHMgc3RydWN0dXJlCi0gKgotICogUG9zdCBhbiBlcnJvciwgd2FybmluZyBvciBpbmZvIG1lc3NhZ2Ugb24gdGhlIGJ1cyBmcm9tIGluc2lkZSBhbiBlbGVtZW50LgotICoKLSAqIEB0eXBlIG11c3QgYmUgb2YgI0dTVF9NRVNTQUdFX0VSUk9SLCAjR1NUX01FU1NBR0VfV0FSTklORyBvcgotICogI0dTVF9NRVNTQUdFX0lORk8uCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZCBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzCi0gICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RNZXNzYWdlVHlwZSB0eXBlLAotICAgIEdRdWFyayBkb21haW4sIGdpbnQgY29kZSwgZ2NoYXIgKiB0ZXh0LAotICAgIGdjaGFyICogZGVidWcsIGNvbnN0IGdjaGFyICogZmlsZSwgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwgZ2ludCBsaW5lLAotICAgIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKLXsKLSAgR0Vycm9yICpnZXJyb3IgPSBOVUxMOwotICBnY2hhciAqbmFtZTsKLSAgZ2NoYXIgKnNlbnRfdGV4dDsKLSAgZ2NoYXIgKnNlbnRfZGVidWc7Ci0gIGdib29sZWFuIGhhc19kZWJ1ZyA9IFRSVUU7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOwotCi0gIC8qIGNoZWNrcyAqLwotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9NRVNTQUdFLCBlbGVtZW50LCAic3RhcnQiKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoKHR5cGUgPT0gR1NUX01FU1NBR0VfRVJST1IpIHx8Ci0gICAgICAodHlwZSA9PSBHU1RfTUVTU0FHRV9XQVJOSU5HKSB8fCAodHlwZSA9PSBHU1RfTUVTU0FHRV9JTkZPKSk7Ci0KLSAgLyogY2hlY2sgaWYgd2Ugc2VuZCB0aGUgZ2l2ZW4gdGV4dCBvciB0aGUgZGVmYXVsdCBlcnJvciB0ZXh0ICovCi0gIGlmICgodGV4dCA9PSBOVUxMKSB8fCAodGV4dFswXSA9PSAwKSkgewotICAgIC8qIHRleHQgY291bGQgaGF2ZSBjb21lIGZyb20gZ19zdHJkdXBfcHJpbnRmICgiIik7ICovCi0gICAgZ19mcmVlICh0ZXh0KTsKLSAgICBzZW50X3RleHQgPSBnc3RfZXJyb3JfZ2V0X21lc3NhZ2UgKGRvbWFpbiwgY29kZSk7Ci0gIH0gZWxzZQotICAgIHNlbnRfdGV4dCA9IHRleHQ7Ci0KLSAgLyogY29uc3RydWN0IGEgc2VudF9kZWJ1ZyB3aXRoIGV4dHJhIGluZm9ybWF0aW9uIGZyb20gc291cmNlICovCi0gIGlmICgoZGVidWcgPT0gTlVMTCkgfHwgKGRlYnVnWzBdID09IDApKSB7Ci0gICAgLyogZGVidWcgY291bGQgaGF2ZSBjb21lIGZyb20gZ19zdHJkdXBfcHJpbnRmICgiIik7ICovCi0gICAgaGFzX2RlYnVnID0gRkFMU0U7Ci0gIH0KLQotICBuYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCkpOwotICBpZiAoaGFzX2RlYnVnKQotICAgIHNlbnRfZGVidWcgPSBnX3N0cmR1cF9wcmludGYgKCIlcyglZCk6ICVzICgpOiAlczpcbiVzIiwKLSAgICAgICAgZmlsZSwgbGluZSwgZnVuY3Rpb24sIG5hbWUsIGRlYnVnKTsKLSAgZWxzZQotICAgIHNlbnRfZGVidWcgPSBnX3N0cmR1cF9wcmludGYgKCIlcyglZCk6ICVzICgpOiAlcyIsCi0gICAgICAgIGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBuYW1lKTsKLSAgZ19mcmVlIChuYW1lKTsKLSAgZ19mcmVlIChkZWJ1Zyk7Ci0KLSAgLyogY3JlYXRlIGdlcnJvciBhbmQgcG9zdCBtZXNzYWdlICovCi0gIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfRVJST1JfU1lTVEVNLCBlbGVtZW50LCAicG9zdGluZyBtZXNzYWdlOiAlcyIsCi0gICAgICBzZW50X3RleHQpOwotICBnZXJyb3IgPSBnX2Vycm9yX25ld19saXRlcmFsIChkb21haW4sIGNvZGUsIHNlbnRfdGV4dCk7Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICAgIG1lc3NhZ2UgPQotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19lcnJvcl93aXRoX2RldGFpbHMgKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksIGdlcnJvciwKLSAgICAgICAgICBzZW50X2RlYnVnLCBzdHJ1Y3R1cmUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgotICAgICAgbWVzc2FnZSA9Ci0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmdfd2l0aF9kZXRhaWxzIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLAotICAgICAgICAgIGdlcnJvciwgc2VudF9kZWJ1Zywgc3RydWN0dXJlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01FU1NBR0VfSU5GTzoKLSAgICAgIG1lc3NhZ2UgPQotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19pbmZvX3dpdGhfZGV0YWlscyAoR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSwgZ2Vycm9yLAotICAgICAgICAgIHNlbnRfZGVidWcsIHN0cnVjdHVyZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoZWxlbWVudCwgbWVzc2FnZSk7Ci0KLSAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FUlJPUl9TWVNURU0sIGVsZW1lbnQsICJwb3N0ZWQgJXMgbWVzc2FnZTogJXMiLAotICAgICAgKHR5cGUgPT0gR1NUX01FU1NBR0VfRVJST1IgPyAiZXJyb3IiIDogIndhcm5pbmciKSwgc2VudF90ZXh0KTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKLSAgZ19mcmVlIChzZW50X2RlYnVnKTsKLSAgZ19mcmVlIChzZW50X3RleHQpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbDoKLSAqIEBlbGVtZW50OiAgYSAjR3N0RWxlbWVudCB0byBzZW5kIG1lc3NhZ2UgZnJvbQotICogQHR5cGU6ICAgICB0aGUgI0dzdE1lc3NhZ2VUeXBlCi0gKiBAZG9tYWluOiAgIHRoZSBHU3RyZWFtZXIgR0Vycm9yIGRvbWFpbiB0aGlzIG1lc3NhZ2UgYmVsb25ncyB0bwotICogQGNvZGU6ICAgICB0aGUgR0Vycm9yIGNvZGUgYmVsb25naW5nIHRvIHRoZSBkb21haW4KLSAqIEB0ZXh0OiAgICAgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogYW4gYWxsb2NhdGVkIHRleHQgc3RyaW5nIHRvIGJlIHVzZWQKLSAqICAgICAgICAgICAgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgbWVzc2FnZSBjb25uZWN0ZWQgdG8gY29kZSwKLSAqICAgICAgICAgICAgb3IgJU5VTEwKLSAqIEBkZWJ1ZzogICAgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogYW4gYWxsb2NhdGVkIGRlYnVnIG1lc3NhZ2UgdG8gYmUKLSAqICAgICAgICAgICAgdXNlZCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgZGVmYXVsdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sCi0gKiAgICAgICAgICAgIG9yICVOVUxMCi0gKiBAZmlsZTogICAgIHRoZSBzb3VyY2UgY29kZSBmaWxlIHdoZXJlIHRoZSBlcnJvciB3YXMgZ2VuZXJhdGVkCi0gKiBAZnVuY3Rpb246IHRoZSBzb3VyY2UgY29kZSBmdW5jdGlvbiB3aGVyZSB0aGUgZXJyb3Igd2FzIGdlbmVyYXRlZAotICogQGxpbmU6ICAgICB0aGUgc291cmNlIGNvZGUgbGluZSB3aGVyZSB0aGUgZXJyb3Igd2FzIGdlbmVyYXRlZAotICoKLSAqIFBvc3QgYW4gZXJyb3IsIHdhcm5pbmcgb3IgaW5mbyBtZXNzYWdlIG9uIHRoZSBidXMgZnJvbSBpbnNpZGUgYW4gZWxlbWVudC4KLSAqCi0gKiBAdHlwZSBtdXN0IGJlIG9mICNHU1RfTUVTU0FHRV9FUlJPUiwgI0dTVF9NRVNTQUdFX1dBUk5JTkcgb3IKLSAqICNHU1RfTUVTU0FHRV9JTkZPLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQgZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsCi0gICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RNZXNzYWdlVHlwZSB0eXBlLAotICAgIEdRdWFyayBkb21haW4sIGdpbnQgY29kZSwgZ2NoYXIgKiB0ZXh0LAotICAgIGdjaGFyICogZGVidWcsIGNvbnN0IGdjaGFyICogZmlsZSwgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwgZ2ludCBsaW5lKQotewotICBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzIChlbGVtZW50LCB0eXBlLCBkb21haW4sIGNvZGUsIHRleHQsCi0gICAgICBkZWJ1ZywgZmlsZSwgZnVuY3Rpb24sIGxpbmUsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2lzX2xvY2tlZF9zdGF0ZToKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50LgotICoKLSAqIENoZWNrcyBpZiB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBpcyBsb2NrZWQuCi0gKiBJZiB0aGUgc3RhdGUgb2YgYW4gZWxlbWVudCBpcyBsb2NrZWQsIHN0YXRlIGNoYW5nZXMgb2YgdGhlIHBhcmVudCBkb24ndAotICogYWZmZWN0IHRoZSBlbGVtZW50LgotICogVGhpcyB3YXkgeW91IGNhbiBsZWF2ZSBjdXJyZW50bHkgdW51c2VkIGVsZW1lbnRzIGluc2lkZSBiaW5zLiBKdXN0IGxvY2sgdGhlaXIKLSAqIHN0YXRlIGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RhdGUgZnJvbSAjR1NUX1NUQVRFX05VTEwuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgdGhlIGVsZW1lbnQncyBzdGF0ZSBpcyBsb2NrZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9pc19sb2NrZWRfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIHJlc3VsdCA9IEdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURSAoZWxlbWVudCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGU6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudAotICogQGxvY2tlZF9zdGF0ZTogJVRSVUUgdG8gbG9jayB0aGUgZWxlbWVudCdzIHN0YXRlCi0gKgotICogTG9ja3MgdGhlIHN0YXRlIG9mIGFuIGVsZW1lbnQsIHNvIHN0YXRlIGNoYW5nZXMgb2YgdGhlIHBhcmVudCBkb24ndCBhZmZlY3QKLSAqIHRoaXMgZWxlbWVudCBhbnltb3JlLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN0YXRlIHdhcyBjaGFuZ2VkLCAlRkFMU0UgaWYgYmFkIHBhcmFtZXRlcnMgd2VyZSBnaXZlbgotICogb3IgdGhlIGVsZW1lbnRzIHN0YXRlLWxvY2tpbmcgbmVlZGVkIG5vIGNoYW5nZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBnYm9vbGVhbiBsb2NrZWRfc3RhdGUpCi17Ci0gIGdib29sZWFuIG9sZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgb2xkID0gR1NUX0VMRU1FTlRfSVNfTE9DS0VEX1NUQVRFIChlbGVtZW50KTsKLQotICBpZiAoR19VTkxJS0VMWSAob2xkID09IGxvY2tlZF9zdGF0ZSkpCi0gICAgZ290byB3YXNfb2s7Ci0KLSAgaWYgKGxvY2tlZF9zdGF0ZSkgewotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfU1RBVEVTLCAibG9ja2luZyBzdGF0ZSBvZiBlbGVtZW50ICVzIiwKLSAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGVsZW1lbnQsIEdTVF9FTEVNRU5UX0ZMQUdfTE9DS0VEX1NUQVRFKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1NUQVRFUywgInVubG9ja2luZyBzdGF0ZSBvZiBlbGVtZW50ICVzIiwKLSAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAoZWxlbWVudCwgR1NUX0VMRU1FTlRfRkxBR19MT0NLRURfU1RBVEUpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICByZXR1cm4gVFJVRTsKLQotd2FzX29rOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9TVEFURVMsCi0gICAgICAgICJlbGVtZW50cyAlcyB3YXMgYWxyZWFkeSBpbiBsb2NrZWQgc3RhdGUgJWQiLAotICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSwgb2xkKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50OgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCi0gKgotICogVHJpZXMgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudCB0byB0aGUgc2FtZSBhcyBpdHMgcGFyZW50LgotICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zICVGQUxTRSwgdGhlIHN0YXRlIG9mIGVsZW1lbnQgaXMgdW5kZWZpbmVkLgotICoKLSAqIFJldHVybnM6ICVUUlVFLCBpZiB0aGUgZWxlbWVudCdzIHN0YXRlIGNvdWxkIGJlIHN5bmNlZCB0byB0aGUgcGFyZW50J3Mgc3RhdGUuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RFbGVtZW50ICpwYXJlbnQ7Ci0gIEdzdFN0YXRlIHRhcmdldDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKLQotICBpZiAoKHBhcmVudCA9IEdTVF9FTEVNRU5UX0NBU1QgKGdzdF9lbGVtZW50X2dldF9wYXJlbnQgKGVsZW1lbnQpKSkpIHsKLSAgICBHc3RTdGF0ZSBwYXJlbnRfY3VycmVudCwgcGFyZW50X3BlbmRpbmc7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhcmVudCk7Ci0gICAgcGFyZW50X2N1cnJlbnQgPSBHU1RfU1RBVEUgKHBhcmVudCk7Ci0gICAgcGFyZW50X3BlbmRpbmcgPSBHU1RfU1RBVEVfUEVORElORyAocGFyZW50KTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyZW50KTsKLQotICAgIC8qIHNldCB0byBwZW5kaW5nIGlmIHRoZXJlIGlzIG9uZSwgZWxzZSB3ZSBzZXQgaXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YKLSAgICAgKiB0aGUgcGFyZW50ICovCi0gICAgaWYgKHBhcmVudF9wZW5kaW5nICE9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpCi0gICAgICB0YXJnZXQgPSBwYXJlbnRfcGVuZGluZzsKLSAgICBlbHNlCi0gICAgICB0YXJnZXQgPSBwYXJlbnRfY3VycmVudDsKLQotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgInN5bmNpbmcgc3RhdGUgKCVzKSB0byBwYXJlbnQgJXMgJXMgKCVzLCAlcykiLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoR1NUX1NUQVRFIChlbGVtZW50KSksCi0gICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKHBhcmVudCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lICh0YXJnZXQpLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGFyZW50X2N1cnJlbnQpLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGFyZW50X3BlbmRpbmcpKTsKLQotICAgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgdGFyZ2V0KTsKLSAgICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICAgIGdvdG8gZmFpbGVkOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLQotICAgIHJldHVybiBUUlVFOwotICB9IGVsc2UgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwgImVsZW1lbnQgaGFzIG5vIHBhcmVudCIpOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLQotICAvKiBFUlJPUiAqLwotZmFpbGVkOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgICAic3luY2luZyBzdGF0ZSBmYWlsZWQgKCVzKSIsCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKHJldCkpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIE1UIHNhZmUgKi8KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlICogc3RhdGUsIEdzdFN0YXRlICogcGVuZGluZywgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgR3N0U3RhdGUgb2xkX3BlbmRpbmc7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiZ2V0dGluZyBzdGF0ZSwgdGltZW91dCAlIgotICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0aW1lb3V0KSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgcmV0ID0gR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCk7Ci0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwgIlJFVFVSTiBpcyAlcyIsCi0gICAgICBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lIChyZXQpKTsKLQotICAvKiB3ZSBnb3QgYW4gZXJyb3IsIHJlcG9ydCBpbW1lZGlhdGVseSAqLwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogd2UgZ290IG5vX3ByZXJvbGwsIHJlcG9ydCBpbW1lZGlhdGVseSAqLwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogbm8gbmVlZCB0byB3YWl0IGFzeW5jIGlmIHdlIGFyZSBub3QgYXN5bmMgKi8KLSAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQotICAgIGdvdG8gZG9uZTsKLQotICBvbGRfcGVuZGluZyA9IEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KTsKLSAgaWYgKG9sZF9wZW5kaW5nICE9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpIHsKLSAgICBnYm9vbGVhbiBzaWduYWxlZDsKLSAgICBndWludDMyIGNvb2tpZTsKLQotICAgIC8qIGdldCBjb29raWUgdG8gZGV0ZWN0IHN0YXRlIGNoYW5nZXMgZHVyaW5nIHdhaXRpbmcgKi8KLSAgICBjb29raWUgPSBlbGVtZW50LT5zdGF0ZV9jb29raWU7Ci0KLSAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgIndhaXRpbmcgZm9yIGVsZW1lbnQgdG8gY29tbWl0IHN0YXRlIik7Ci0KLSAgICAvKiB3ZSBoYXZlIGEgcGVuZGluZyBzdGF0ZSBjaGFuZ2UsIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlICovCi0gICAgaWYgKHRpbWVvdXQgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgZ2ludDY0IGVuZF90aW1lOwotICAgICAgLyogbWFrZSB0aW1lb3V0IGFic29sdXRlICovCi0gICAgICBlbmRfdGltZSA9IGdfZ2V0X21vbm90b25pY190aW1lICgpICsgKHRpbWVvdXQgLyAxMDAwKTsKLSAgICAgIHNpZ25hbGVkID0gR1NUX1NUQVRFX1dBSVRfVU5USUwgKGVsZW1lbnQsIGVuZF90aW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1NUQVRFX1dBSVQgKGVsZW1lbnQpOwotICAgICAgc2lnbmFsZWQgPSBUUlVFOwotICAgIH0KLQotICAgIGlmICghc2lnbmFsZWQpIHsKLSAgICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAidGltZWQgb3V0Iik7Ci0gICAgICAvKiB0aW1lb3V0IHRyaWdnZXJlZCAqLwotICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKGNvb2tpZSAhPSBlbGVtZW50LT5zdGF0ZV9jb29raWUpCi0gICAgICAgIGdvdG8gaW50ZXJydXB0ZWQ7Ci0KLSAgICAgIC8qIGNvdWxkIGJlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSAqLwotICAgICAgaWYgKG9sZF9wZW5kaW5nID09IEdTVF9TVEFURSAoZWxlbWVudCkpIHsKLSAgICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiZ290IHN1Y2Nlc3MiKTsKLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiZ290IGZhaWx1cmUiKTsKLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgfQotICAgIH0KLSAgICAvKiBpZiBub3RoaW5nIGlzIHBlbmRpbmcgYW55bW9yZSB3ZSBjYW4gcmV0dXJuIFNVQ0NFU1MgKi8KLSAgICBpZiAoR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpIHsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJub3RoaW5nIHBlbmRpbmciKTsKLSAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgaWYgKHN0YXRlKQotICAgICpzdGF0ZSA9IEdTVF9TVEFURSAoZWxlbWVudCk7Ci0gIGlmIChwZW5kaW5nKQotICAgICpwZW5kaW5nID0gR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICJzdGF0ZSBjdXJyZW50OiAlcywgcGVuZGluZzogJXMsIHJlc3VsdDogJXMiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKEdTVF9TVEFURSAoZWxlbWVudCkpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KSksCi0gICAgICBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lIChyZXQpKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldHVybiByZXQ7Ci0KLWludGVycnVwdGVkOgotICB7Ci0gICAgaWYgKHN0YXRlKQotICAgICAgKnN0YXRlID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLSAgICBpZiAocGVuZGluZykKLSAgICAgICpwZW5kaW5nID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLQotICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiaW50ZXJydXBlZCIpOwotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2dldF9zdGF0ZToKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIGdldCB0aGUgc3RhdGUgb2YuCi0gKiBAc3RhdGU6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvICNHc3RTdGF0ZSB0byBob2xkIHRoZSBzdGF0ZS4KLSAqICAgICBDYW4gYmUgJU5VTEwuCi0gKiBAcGVuZGluZzogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gI0dzdFN0YXRlIHRvIGhvbGQgdGhlIHBlbmRpbmcKLSAqICAgICBzdGF0ZS4gQ2FuIGJlICVOVUxMLgotICogQHRpbWVvdXQ6IGEgI0dzdENsb2NrVGltZSB0byBzcGVjaWZ5IHRoZSB0aW1lb3V0IGZvciBhbiBhc3luYwotICogICAgICAgICAgIHN0YXRlIGNoYW5nZSBvciAlR1NUX0NMT0NLX1RJTUVfTk9ORSBmb3IgaW5maW5pdGUgdGltZW91dC4KLSAqCi0gKiBHZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudC4KLSAqCi0gKiBGb3IgZWxlbWVudHMgdGhhdCBwZXJmb3JtZWQgYW4gQVNZTkMgc3RhdGUgY2hhbmdlLCBhcyByZXBvcnRlZCBieQotICogZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKCksIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1cCB0byB0aGUKLSAqIHNwZWNpZmllZCB0aW1lb3V0IHZhbHVlIGZvciB0aGUgc3RhdGUgY2hhbmdlIHRvIGNvbXBsZXRlLgotICogSWYgdGhlIGVsZW1lbnQgY29tcGxldGVzIHRoZSBzdGF0ZSBjaGFuZ2Ugb3IgZ29lcyBpbnRvCi0gKiBhbiBlcnJvciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggYSByZXR1cm4gdmFsdWUgb2YKLSAqICVHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1Mgb3IgJUdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSByZXNwZWN0aXZlbHkuCi0gKgotICogRm9yIGVsZW1lbnRzIHRoYXQgZGlkIG5vdCByZXR1cm4gJUdTVF9TVEFURV9DSEFOR0VfQVNZTkMsIHRoaXMgZnVuY3Rpb24KLSAqIHJldHVybnMgdGhlIGN1cnJlbnQgYW5kIHBlbmRpbmcgc3RhdGUgaW1tZWRpYXRlbHkuCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICVHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwgaWYgdGhlIGVsZW1lbnQKLSAqIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIGl0cyBzdGF0ZSBidXQgaXMgbm90IGFibGUgdG8gcHJvdmlkZSBkYXRhIHlldC4KLSAqIFRoaXMgbW9zdGx5IGhhcHBlbnMgZm9yIGxpdmUgc291cmNlcyB0aGF0IG9ubHkgcHJvZHVjZSBkYXRhIGluCi0gKiAlR1NUX1NUQVRFX1BMQVlJTkcuIFdoaWxlIHRoZSBzdGF0ZSBjaGFuZ2UgcmV0dXJuIGlzIGVxdWl2YWxlbnQgdG8KLSAqICVHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsIGl0IGlzIHJldHVybmVkIHRvIHRoZSBhcHBsaWNhdGlvbiB0byBzaWduYWwgdGhhdAotICogc29tZSBzaW5rIGVsZW1lbnRzIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGNvbXBsZXRlIHRoZWlyIHN0YXRlIGNoYW5nZSBiZWNhdXNlCi0gKiBhbiBlbGVtZW50IGlzIG5vdCBwcm9kdWNpbmcgZGF0YSB0byBjb21wbGV0ZSB0aGUgcHJlcm9sbC4gV2hlbiBzZXR0aW5nIHRoZQotICogZWxlbWVudCB0byBwbGF5aW5nLCB0aGUgcHJlcm9sbCB3aWxsIGNvbXBsZXRlIGFuZCBwbGF5YmFjayB3aWxsIHN0YXJ0LgotICoKLSAqIFJldHVybnM6ICVHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgaWYgdGhlIGVsZW1lbnQgaGFzIG5vIG1vcmUgcGVuZGluZyBzdGF0ZQotICogICAgICAgICAgYW5kIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSBzdWNjZWVkZWQsICVHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DIGlmIHRoZQotICogICAgICAgICAgZWxlbWVudCBpcyBzdGlsbCBwZXJmb3JtaW5nIGEgc3RhdGUgY2hhbmdlIG9yCi0gKiAgICAgICAgICAlR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIGlmIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSBmYWlsZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGUgKiBzdGF0ZSwgR3N0U3RhdGUgKiBwZW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZW91dCkKLXsKLSAgR3N0RWxlbWVudENsYXNzICpvY2xhc3M7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlc3VsdCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0KLSAgaWYgKG9jbGFzcy0+Z2V0X3N0YXRlKQotICAgIHJlc3VsdCA9IChvY2xhc3MtPmdldF9zdGF0ZSkgKGVsZW1lbnQsIHN0YXRlLCBwZW5kaW5nLCB0aW1lb3V0KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2Fib3J0X3N0YXRlOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gYWJvcnQgdGhlIHN0YXRlIG9mLgotICoKLSAqIEFib3J0IHRoZSBzdGF0ZSBjaGFuZ2Ugb2YgdGhlIGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZAotICogYnkgZWxlbWVudHMgdGhhdCBkbyBhc3luY2hyb25vdXMgc3RhdGUgY2hhbmdlcyBhbmQgZmluZCBvdXQKLSAqIHNvbWV0aGluZyBpcyB3cm9uZy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgU1RBVEVfTE9DSyBoZWxkLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9lbGVtZW50X2Fib3J0X3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0U3RhdGUgcGVuZGluZzsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgR3N0U3RhdGUgb2xkX3N0YXRlOwotI2VuZGlmCi0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICBwZW5kaW5nID0gR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpOwotCi0gIGlmIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcgfHwKLSAgICAgIEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICBnb3RvIG5vdGhpbmdfYWJvcnRlZDsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgb2xkX3N0YXRlID0gR1NUX1NUQVRFIChlbGVtZW50KTsKLQotICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICJhYm9ydGluZyBzdGF0ZSBmcm9tICVzIHRvICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZF9zdGF0ZSksCi0gICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGVuZGluZykpOwotI2VuZGlmCi0KLSAgLyogZmxhZyBlcnJvciAqLwotICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLQotICBHU1RfU1RBVEVfQlJPQURDQVNUIChlbGVtZW50KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldHVybjsKLQotbm90aGluZ19hYm9ydGVkOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotICAgIHJldHVybjsKLSAgfQotfQotCi0vKiBOb3Qgc3RhdGljIGJlY2F1c2UgR3N0QmluIGhhcyBtYW51YWwgc3RhdGUgaGFuZGxpbmcgdG9vICovCi12b2lkCi1fcHJpdl9nc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGUgb2xkc3RhdGUsCi0gICAgR3N0U3RhdGUgbmV3c3RhdGUsIEdzdFN0YXRlIHBlbmRpbmcpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgIm5vdGlmeWluZyBhYm91dCBzdGF0ZS1jaGFuZ2VkICVzIHRvICVzICglcyBwZW5kaW5nKSIsCi0gICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkc3RhdGUpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5ld3N0YXRlKSwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChwZW5kaW5nKSk7Ci0KLSAgaWYgKGtsYXNzLT5zdGF0ZV9jaGFuZ2VkKQotICAgIGtsYXNzLT5zdGF0ZV9jaGFuZ2VkIChlbGVtZW50LCBvbGRzdGF0ZSwgbmV3c3RhdGUsIHBlbmRpbmcpOwotCi0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCAoR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSwKLSAgICAgIG9sZHN0YXRlLCBuZXdzdGF0ZSwgcGVuZGluZyk7Ci0gIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoZWxlbWVudCwgbWVzc2FnZSk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGU6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBjb250aW51ZSB0aGUgc3RhdGUgY2hhbmdlIG9mLgotICogQHJldDogVGhlIHByZXZpb3VzIHN0YXRlIHJldHVybiB2YWx1ZQotICoKLSAqIENvbW1pdCB0aGUgc3RhdGUgY2hhbmdlIG9mIHRoZSBlbGVtZW50IGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0Ci0gKiBwZW5kaW5nIHN0YXRlIGlmIGFueS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkCi0gKiBieSBlbGVtZW50cyB0aGF0IGRvIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLgotICogVGhlIGNvcmUgd2lsbCBub3JtYWxseSBjYWxsIHRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgd2hlbiBhbgotICogZWxlbWVudCByZXR1cm5lZCAlR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTIGZyb20gdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbi4KLSAqCi0gKiBJZiBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHRoZSBlbGVtZW50IHN0aWxsIGhhcyBub3QgcmVhY2hlZAotICogdGhlIHBlbmRpbmcgc3RhdGUsIHRoZSBuZXh0IHN0YXRlIGNoYW5nZSBpcyBwZXJmb3JtZWQuCi0gKgotICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBzaG91bGQgbm9ybWFsbHkgbm90IGJlIGNhbGxlZCBieSBwbHVnaW5zCi0gKiBvciBhcHBsaWNhdGlvbnMuCi0gKgotICogUmV0dXJuczogVGhlIHJlc3VsdCBvZiB0aGUgY29tbWl0IHN0YXRlIGNoYW5nZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIG9sZF9yZXQ7Ci0gIEdzdFN0YXRlIG9sZF9zdGF0ZSwgb2xkX25leHQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIG5leHQsIHBlbmRpbmc7Ci0gIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb247Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgb2xkX3JldCA9IEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpOwotICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IHJldDsKLSAgcGVuZGluZyA9IEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KTsKLQotICAvKiBjaGVjayBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdG8gY29tbWl0ICovCi0gIGlmIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpCi0gICAgZ290byBub3RoaW5nX3BlbmRpbmc7Ci0KLSAgb2xkX3N0YXRlID0gR1NUX1NUQVRFIChlbGVtZW50KTsKLSAgLyogdGhpcyBpcyB0aGUgc3RhdGUgd2Ugc2hvdWxkIGdvIHRvIG5leHQgKi8KLSAgb2xkX25leHQgPSBHU1RfU1RBVEVfTkVYVCAoZWxlbWVudCk7Ci0gIC8qIHVwZGF0ZSBjdXJyZW50IHN0YXRlICovCi0gIGN1cnJlbnQgPSBHU1RfU1RBVEUgKGVsZW1lbnQpID0gb2xkX25leHQ7Ci0KLSAgLyogc2VlIGlmIHdlIHJlYWNoZWQgdGhlIGZpbmFsIHN0YXRlICovCi0gIGlmIChwZW5kaW5nID09IGN1cnJlbnQpCi0gICAgZ290byBjb21wbGV0ZTsKLQotICBuZXh0ID0gR1NUX1NUQVRFX0dFVF9ORVhUIChjdXJyZW50LCBwZW5kaW5nKTsKLSAgdHJhbnNpdGlvbiA9IChHc3RTdGF0ZUNoYW5nZSkgR1NUX1NUQVRFX1RSQU5TSVRJT04gKGN1cnJlbnQsIG5leHQpOwotCi0gIEdTVF9TVEFURV9ORVhUIChlbGVtZW50KSA9IG5leHQ7Ci0gIC8qIG1hcmsgYnVzeSAqLwotICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICJjb21taXR0aW5nIHN0YXRlIGZyb20gJXMgdG8gJXMsIHBlbmRpbmcgJXMsIG5leHQgJXMiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZF9zdGF0ZSksCi0gICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX25leHQpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHBlbmRpbmcpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV4dCkpOwotCi0gIF9wcml2X2dzdF9lbGVtZW50X3N0YXRlX2NoYW5nZWQgKGVsZW1lbnQsIG9sZF9zdGF0ZSwgb2xkX25leHQsIHBlbmRpbmcpOwotCi0gIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgImNvbnRpbnVlIHN0YXRlIGNoYW5nZSAlcyB0byAlcywgZmluYWwgJXMiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKGN1cnJlbnQpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5leHQpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGVuZGluZykpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgcmV0dXJuIHJldDsKLQotbm90aGluZ19wZW5kaW5nOgotICB7Ci0gICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsICJub3RoaW5nIHBlbmRpbmciKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotY29tcGxldGU6Ci0gIHsKLSAgICBHU1RfU1RBVEVfUEVORElORyAoZWxlbWVudCkgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOwotICAgIEdTVF9TVEFURV9ORVhUIChlbGVtZW50KSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7Ci0KLSAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgImNvbXBsZXRlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAocGVuZGluZykpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICAgIC8qIGRvbid0IHBvc3Qgc2lsbHkgbWVzc2FnZXMgd2l0aCB0aGUgc2FtZSBzdGF0ZS4gVGhpcyBjYW4gaGFwcGVuCi0gICAgICogd2hlbiBhbiBlbGVtZW50IHN0YXRlIGlzIGNoYW5nZWQgdG8gd2hhdCBpdCBhbHJlYWR5IHdhcy4gRm9yIGJpbnMKLSAgICAgKiB0aGlzIGNhbiBiZSB0aGUgcmVzdWx0IG9mIGEgbG9zdCBzdGF0ZSwgd2hpY2ggd2UgY2hlY2sgd2l0aCB0aGUKLSAgICAgKiBwcmV2aW91cyByZXR1cm4gdmFsdWUuCi0gICAgICogV2UgZG8gc2lnbmFsIHRoZSBjb25kIHRob3VnaCBhcyBhIF9nZXRfc3RhdGUoKSBtaWdodCBiZSBibG9ja2luZwotICAgICAqIG9uIGl0LiAqLwotICAgIGlmIChvbGRfc3RhdGUgIT0gb2xkX25leHQgfHwgb2xkX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQotICAgICAgX3ByaXZfZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlZCAoZWxlbWVudCwgb2xkX3N0YXRlLCBvbGRfbmV4dCwKLSAgICAgICAgICBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKTsKLQotICAgIEdTVF9TVEFURV9CUk9BRENBU1QgKGVsZW1lbnQpOwotCi0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2xvc3Rfc3RhdGU6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0aGUgc3RhdGUgaXMgbG9zdCBvZgotICoKLSAqIEJyaW5ncyB0aGUgZWxlbWVudCB0byB0aGUgbG9zdCBzdGF0ZS4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCi0gKiBlbGVtZW50IGlzIGNvcGllZCB0byB0aGUgcGVuZGluZyBzdGF0ZSBzbyB0aGF0IGFueSBjYWxsIHRvCi0gKiBnc3RfZWxlbWVudF9nZXRfc3RhdGUoKSB3aWxsIHJldHVybiAlR1NUX1NUQVRFX0NIQU5HRV9BU1lOQy4KLSAqCi0gKiBBbiBBU1lOQ19TVEFSVCBtZXNzYWdlIGlzIHBvc3RlZC4gSWYgdGhlIGVsZW1lbnQgd2FzIFBMQVlJTkcsIGl0IHdpbGwKLSAqIGdvIHRvIFBBVVNFRC4gVGhlIGVsZW1lbnQgd2lsbCBiZSByZXN0b3JlZCB0byBpdHMgUExBWUlORyBzdGF0ZSBieQotICogdGhlIHBhcmVudCBwaXBlbGluZSB3aGVuIGl0IHByZXJvbGxzIGFnYWluLgotICoKLSAqIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yIGVsZW1lbnRzIHRoYXQgbG9zdCB0aGVpciBwcmVyb2xsIGJ1ZmZlcgotICogaW4gdGhlICVHU1RfU1RBVEVfUEFVU0VEIG9yICVHU1RfU1RBVEVfUExBWUlORyBzdGF0ZSBhZnRlciBhIGZsdXNoLAotICogdGhleSB3aWxsIGdvIHRvIHRoZWlyIHBlbmRpbmcgc3RhdGUgYWdhaW4gd2hlbiBhIG5ldyBwcmVyb2xsIGJ1ZmZlciBpcwotICogcXVldWVkLiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGN1cnJlbnRseQotICogbm90IGluIGVycm9yIG9yIGFuIGFzeW5jIHN0YXRlIGNoYW5nZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSBhbmQgc2hvdWxkIG5vcm1hbGx5IG5vdCBiZSBjYWxsZWQgZnJvbQotICogcGx1Z2lucyBvciBhcHBsaWNhdGlvbnMuCi0gKi8KLXZvaWQKLWdzdF9lbGVtZW50X2xvc3Rfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RTdGF0ZSBvbGRfc3RhdGUsIG5ld19zdGF0ZTsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIGlmIChHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgZ290byBub3RoaW5nX2xvc3Q7Ci0KLSAgaWYgKEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKQotICAgIGdvdG8gb25seV9hc3luY19zdGFydDsKLQotICBvbGRfc3RhdGUgPSBHU1RfU1RBVEUgKGVsZW1lbnQpOwotCi0gIC8qIHdoZW4gd2Ugd2VyZSBQTEFZSU5HLCB0aGUgbmV3IHN0YXRlIGlzIFBBVVNFRC4gV2Ugd2lsbCBhbHNvIG5vdAotICAgKiBhdXRvbWF0aWNhbGx5IGdvIHRvIFBMQVlJTkcgYnV0IGxldCB0aGUgcGFyZW50IGJpbihzKSBzZXQgdXMgdG8gUExBWUlORwotICAgKiB3aGVuIHdlIHByZXJvbGwuICovCi0gIGlmIChvbGRfc3RhdGUgPiBHU1RfU1RBVEVfUEFVU0VEKQotICAgIG5ld19zdGF0ZSA9IEdTVF9TVEFURV9QQVVTRUQ7Ci0gIGVsc2UKLSAgICBuZXdfc3RhdGUgPSBvbGRfc3RhdGU7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgImxvc3Qgc3RhdGUgb2YgJXMgdG8gJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkX3N0YXRlKSwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXdfc3RhdGUpKTsKLQotICBHU1RfU1RBVEUgKGVsZW1lbnQpID0gbmV3X3N0YXRlOwotICBHU1RfU1RBVEVfTkVYVCAoZWxlbWVudCkgPSBuZXdfc3RhdGU7Ci0gIEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KSA9IG5ld19zdGF0ZTsKLSAgR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCkgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgX3ByaXZfZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlZCAoZWxlbWVudCwgbmV3X3N0YXRlLCBuZXdfc3RhdGUsIG5ld19zdGF0ZSk7Ci0KLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAoR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSk7Ci0gIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoZWxlbWVudCwgbWVzc2FnZSk7Ci0KLSAgcmV0dXJuOwotCi1ub3RoaW5nX2xvc3Q6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0gICAgcmV0dXJuOwotICB9Ci1vbmx5X2FzeW5jX3N0YXJ0OgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAoR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSk7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LCBtZXNzYWdlKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9zZXRfc3RhdGU6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBjaGFuZ2Ugc3RhdGUgb2YuCi0gKiBAc3RhdGU6IHRoZSBlbGVtZW50J3MgbmV3ICNHc3RTdGF0ZS4KLSAqCi0gKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBzZXQgdGhlCi0gKiByZXF1ZXN0ZWQgc3RhdGUgYnkgZ29pbmcgdGhyb3VnaCBhbGwgdGhlIGludGVybWVkaWFyeSBzdGF0ZXMgYW5kIGNhbGxpbmcKLSAqIHRoZSBjbGFzcydzIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBmb3IgZWFjaC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gI0dTVF9TVEFURV9DSEFOR0VfQVNZTkMsIGluIHdoaWNoIGNhc2UgdGhlCi0gKiBlbGVtZW50IHdpbGwgcGVyZm9ybSB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdGF0ZSBjaGFuZ2UgYXN5bmNocm9ub3VzbHkgaW4KLSAqIGFub3RoZXIgdGhyZWFkLgotICogQW4gYXBwbGljYXRpb24gY2FuIHVzZSBnc3RfZWxlbWVudF9nZXRfc3RhdGUoKSB0byB3YWl0IGZvciB0aGUgY29tcGxldGlvbgotICogb2YgdGhlIHN0YXRlIGNoYW5nZSBvciBpdCBjYW4gd2FpdCBmb3IgYSAlR1NUX01FU1NBR0VfQVNZTkNfRE9ORSBvcgotICogJUdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgb24gdGhlIGJ1cy4KLSAqCi0gKiBTdGF0ZSBjaGFuZ2VzIHRvICVHU1RfU1RBVEVfUkVBRFkgb3IgJUdTVF9TVEFURV9OVUxMIG5ldmVyIHJldHVybgotICogI0dTVF9TVEFURV9DSEFOR0VfQVNZTkMuCi0gKgotICogUmV0dXJuczogUmVzdWx0IG9mIHRoZSBzdGF0ZSBjaGFuZ2UgdXNpbmcgI0dzdFN0YXRlQ2hhbmdlUmV0dXJuLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZSBzdGF0ZSkKLXsKLSAgR3N0RWxlbWVudENsYXNzICpvY2xhc3M7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlc3VsdCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIG9jbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0KLSAgaWYgKG9jbGFzcy0+c2V0X3N0YXRlKQotICAgIHJlc3VsdCA9IChvY2xhc3MtPnNldF9zdGF0ZSkgKGVsZW1lbnQsIHN0YXRlKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogZGVmYXVsdCBzZXQgc3RhdGUgZnVuY3Rpb24sIGNhbGN1bGF0ZXMgdGhlIG5leHQgc3RhdGUgYmFzZWQKLSAqIG9uIGN1cnJlbnQgc3RhdGUgYW5kIGNhbGxzIHRoZSBjaGFuZ2Vfc3RhdGUgZnVuY3Rpb24KLSAqLwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfZWxlbWVudF9zZXRfc3RhdGVfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlIHN0YXRlKQotewotICBHc3RTdGF0ZSBjdXJyZW50LCBuZXh0LCBvbGRfcGVuZGluZzsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBvbGRfcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAic2V0X3N0YXRlIHRvICVzIiwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChzdGF0ZSkpOwotCi0gIC8qIHN0YXRlIGxvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCB0aGUgc2V0X3N0YXRlKCkgYW5kIGdldF9zdGF0ZSgpCi0gICAqIHByb2NlZHVyZXMsIGl0IGRvZXMgbm90IGxvY2sgYW55IHZhcmlhYmxlcy4gKi8KLSAgR1NUX1NUQVRFX0xPQ0sgKGVsZW1lbnQpOwotCi0gIC8qIG5vdyBjYWxjdWxhdGUgaG93IHRvIGdldCB0byB0aGUgbmV3IHN0YXRlICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIG9sZF9yZXQgPSBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KTsKLSAgLyogcHJldmlvdXMgc3RhdGUgY2hhbmdlIHJldHVybmVkIGFuIGVycm9yLCByZW1vdmUgYWxsIHBlbmRpbmcKLSAgICogYW5kIG5leHQgc3RhdGVzICovCi0gIGlmIChvbGRfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgewotICAgIEdTVF9TVEFURV9ORVhUIChlbGVtZW50KSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7Ci0gICAgR1NUX1NUQVRFX1BFTkRJTkcgKGVsZW1lbnQpID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLSAgICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgfQotCi0gIGN1cnJlbnQgPSBHU1RfU1RBVEUgKGVsZW1lbnQpOwotICBuZXh0ID0gR1NUX1NUQVRFX05FWFQgKGVsZW1lbnQpOwotICBvbGRfcGVuZGluZyA9IEdTVF9TVEFURV9QRU5ESU5HIChlbGVtZW50KTsKLQotICAvKiB0aGlzIGlzIHRoZSAobmV3KSBzdGF0ZSB3ZSBzaG91bGQgZ28gdG8uIFRBUkdFVCBpcyB0aGUgbGFzdCBzdGF0ZSB3ZSBzZXQgb24KLSAgICogdGhlIGVsZW1lbnQuICovCi0gIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfVEFSR0VUIChlbGVtZW50KSkgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgInNldHRpbmcgdGFyZ2V0IHN0YXRlIHRvICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHN0YXRlKSk7Ci0gICAgR1NUX1NUQVRFX1RBUkdFVCAoZWxlbWVudCkgPSBzdGF0ZTsKLSAgICAvKiBpbmNyZW1lbnQgc3RhdGUgY29va2llIHNvIHRoYXQgd2UgY2FuIHRyYWNrIGVhY2ggc3RhdGUgY2hhbmdlLiBXZSBvbmx5IGRvCi0gICAgICogdGhpcyBpZiB0aGlzIGlzIGFjdHVhbGx5IGEgbmV3IHN0YXRlIGNoYW5nZS4gKi8KLSAgICBlbGVtZW50LT5zdGF0ZV9jb29raWUrKzsKLSAgfQotICBHU1RfU1RBVEVfUEVORElORyAoZWxlbWVudCkgPSBzdGF0ZTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCi0gICAgICAiY3VycmVudCAlcywgb2xkX3BlbmRpbmcgJXMsIG5leHQgJXMsIG9sZCByZXR1cm4gJXMiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKGN1cnJlbnQpLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZF9wZW5kaW5nKSwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKG9sZF9yZXQpKTsKLQotICAvKiBpZiB0aGUgZWxlbWVudCB3YXMgYnVzeSBkb2luZyBhIHN0YXRlIGNoYW5nZSwgd2UganVzdCB1cGRhdGUgdGhlCi0gICAqIHRhcmdldCBzdGF0ZSwgaXQnbGwgZ2V0IHRvIGl0IGFzeW5jIHRoZW4uICovCi0gIGlmIChvbGRfcGVuZGluZyAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKSB7Ci0gICAgLyogdXB3YXJkcyBzdGF0ZSBjaGFuZ2Ugd2lsbCBoYXBwZW4gQVNZTkMgKi8KLSAgICBpZiAob2xkX3BlbmRpbmcgPD0gc3RhdGUpCi0gICAgICBnb3RvIHdhc19idXN5OwotICAgIC8qIGVsZW1lbnQgaXMgZ29pbmcgdG8gdGhpcyBzdGF0ZSBhbHJlYWR5ICovCi0gICAgZWxzZSBpZiAobmV4dCA9PSBzdGF0ZSkKLSAgICAgIGdvdG8gd2FzX2J1c3k7Ci0gICAgLyogZWxlbWVudCB3YXMgcGVyZm9ybWluZyBhbiBBU1lOQyB1cHdhcmQgc3RhdGUgY2hhbmdlIGFuZAotICAgICAqIHdlIHJlcXVlc3QgdG8gZ28gZG93bndhcmQgYWdhaW4uIFN0YXJ0IGZyb20gdGhlIG5leHQgcGVuZGluZwotICAgICAqIHN0YXRlIHRoZW4uICovCi0gICAgZWxzZSBpZiAobmV4dCA+IHN0YXRlCi0gICAgICAgICYmIEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpIHsKLSAgICAgIGN1cnJlbnQgPSBuZXh0OwotICAgIH0KLSAgfQotICBuZXh0ID0gR1NUX1NUQVRFX0dFVF9ORVhUIChjdXJyZW50LCBzdGF0ZSk7Ci0gIC8qIG5vdyB3ZSBzdG9yZSB0aGUgbmV4dCBzdGF0ZSAqLwotICBHU1RfU1RBVEVfTkVYVCAoZWxlbWVudCkgPSBuZXh0OwotICAvKiBtYXJrIGJ1c3ksIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGVyZSBpcyBhY3R1YWxseSBhIHN0YXRlIGNoYW5nZQotICAgKiB0byBiZSBkb25lIGVsc2Ugd2UgY291bGQgYWNjaWRlbnRhbGx5IG92ZXJyaWRlIFNVQ0NFU1MvTk9fUFJFUk9MTCBhbmQKLSAgICogdGhlIGRlZmF1bHQgZWxlbWVudCBjaGFuZ2Vfc3RhdGUgZnVuY3Rpb24gaGFzIG5vIHdheSB0byBrbm93IHdoYXQgdGhlCi0gICAqIG9sZCB2YWx1ZSB3YXMuLi4gY291bGQgY29uc2lkZXIgdGhpcyBhIEZJWE1FLi4uKi8KLSAgaWYgKGN1cnJlbnQgIT0gbmV4dCkKLSAgICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7Ci0KLSAgdHJhbnNpdGlvbiA9IChHc3RTdGF0ZUNoYW5nZSkgR1NUX1NUQVRFX1RSQU5TSVRJT04gKGN1cnJlbnQsIG5leHQpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICIlczogc2V0dGluZyBzdGF0ZSBmcm9tICVzIHRvICVzIiwKLSAgICAgIChuZXh0ICE9IHN0YXRlID8gImludGVybWVkaWF0ZSIgOiAiZmluYWwiKSwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChjdXJyZW50KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5leHQpKTsKLQotICAvKiBub3cgc2lnbmFsIGFueSB3YWl0ZXJzLCB0aGV5IHdpbGwgZXJyb3Igc2luY2UgdGhlIGNvb2tpZSB3YXMgaW5jcmVtZW50ZWQgKi8KLSAgR1NUX1NUQVRFX0JST0FEQ0FTVCAoZWxlbWVudCk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgR1NUX1NUQVRFX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAicmV0dXJuZWQgJXMiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAocmV0KSk7Ci0KLSAgcmV0dXJuIHJldDsKLQotd2FzX2J1c3k6Ci0gIHsKLSAgICBHU1RfU1RBVEVfUkVUVVJOIChlbGVtZW50KSA9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgICAiZWxlbWVudCB3YXMgYnVzeSB3aXRoIGFzeW5jIHN0YXRlIGNoYW5nZSIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICAgIEdTVF9TVEFURV9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGU6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudAotICogQHRyYW5zaXRpb246IHRoZSByZXF1ZXN0ZWQgdHJhbnNpdGlvbgotICoKLSAqIFBlcmZvcm0gQHRyYW5zaXRpb24gb24gQGVsZW1lbnQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIFNUQVRFX0xPQ0sgaGVsZCBhbmQgaXMgbWFpbmx5IHVzZWQKLSAqIGludGVybmFsbHkuCi0gKgotICogUmV0dXJuczogdGhlICNHc3RTdGF0ZUNoYW5nZVJldHVybiBvZiB0aGUgc3RhdGUgdHJhbnNpdGlvbi4KLSAqLwotR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqb2NsYXNzOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0KLSAgb2NsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLQotICBHU1RfVFJBQ0VSX0VMRU1FTlRfQ0hBTkdFX1NUQVRFX1BSRSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgLyogY2FsbCB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHNvIGl0IGNhbiBzZXQgdGhlIHN0YXRlICovCi0gIGlmIChvY2xhc3MtPmNoYW5nZV9zdGF0ZSkKLSAgICByZXQgPSAob2NsYXNzLT5jaGFuZ2Vfc3RhdGUpIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgZWxzZQotICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLQotICBHU1RfVFJBQ0VSX0VMRU1FTlRfQ0hBTkdFX1NUQVRFX1BPU1QgKGVsZW1lbnQsIHRyYW5zaXRpb24sIHJldCk7Ci0KLSAgc3dpdGNoIChyZXQpIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRToKLSAgICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgICAgICJoYXZlIEZBSUxVUkUgY2hhbmdlX3N0YXRlIHJldHVybiIpOwotICAgICAgLyogc3RhdGUgY2hhbmdlIGZhaWx1cmUgKi8KLSAgICAgIGdzdF9lbGVtZW50X2Fib3J0X3N0YXRlIChlbGVtZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKLSAgICB7Ci0gICAgICBHc3RTdGF0ZSB0YXJnZXQ7Ci0KLSAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgICAiZWxlbWVudCB3aWxsIGNoYW5nZSBzdGF0ZSBBU1lOQyIpOwotCi0gICAgICB0YXJnZXQgPSBHU1RfU1RBVEVfVEFSR0VUIChlbGVtZW50KTsKLQotICAgICAgaWYgKHRhcmdldCA+IEdTVF9TVEFURV9SRUFEWSkKLSAgICAgICAgZ290byBhc3luYzsKLQotICAgICAgLyogZWxzZSB3ZSBqdXN0IGNvbnRpbnVlIHRoZSBzdGF0ZSBjaGFuZ2UgZG93bndhcmRzICovCi0gICAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1NUQVRFUywgZWxlbWVudCwKLSAgICAgICAgICAiZm9yY2luZyBjb21taXQgc3RhdGUgJXMgPD0gJXMiLAotICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lICh0YXJnZXQpLAotICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChHU1RfU1RBVEVfUkVBRFkpKTsKLQotICAgICAgcmV0ID0gZ3N0X2VsZW1lbnRfY29udGludWVfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6Ci0gICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCi0gICAgICAgICAgImVsZW1lbnQgY2hhbmdlZCBzdGF0ZSBTVUNDRVNTIik7Ci0gICAgICAvKiB3ZSBjYW4gY29tbWl0IHRoZSBzdGF0ZSBub3cgd2hpY2ggd2lsbCBwcm9jZWVlZCB0bwotICAgICAgICogdGhlIG5leHQgc3RhdGUgKi8KLSAgICAgIHJldCA9IGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlIChlbGVtZW50LCByZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Ci0gICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCi0gICAgICAgICAgImVsZW1lbnQgY2hhbmdlZCBzdGF0ZSBOT19QUkVST0xMIik7Ci0gICAgICAvKiB3ZSBjYW4gY29tbWl0IHRoZSBzdGF0ZSBub3cgd2hpY2ggd2lsbCBwcm9jZWVlZCB0bwotICAgICAgICogdGhlIG5leHQgc3RhdGUgKi8KLSAgICAgIHJldCA9IGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlIChlbGVtZW50LCByZXQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdvdG8gaW52YWxpZF9yZXR1cm47Ci0gIH0KLQotICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiZXhpdCBzdGF0ZSBjaGFuZ2UgJWQiLCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci0KLWFzeW5jOgotICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LCAiZXhpdCBhc3luYyBzdGF0ZSBjaGFuZ2UgJWQiLAotICAgICAgcmV0KTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SICovCi1pbnZhbGlkX3JldHVybjoKLSAgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gICAgLyogc29tZWJvZHkgYWRkZWQgYSBHU1RfU1RBVEVfIGFuZCBmb3Jnb3QgdG8gZG8gc3R1ZmYgaGVyZSAhICovCi0gICAgZ19jcml0aWNhbCAoIiVzOiB1bmtub3duIHJldHVybiB2YWx1ZSAlZCBmcm9tIGEgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIiwKLSAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCksIHJldCk7Ci0KLSAgICAvKiB3ZSBhcmUgaW4gZXJyb3Igbm93ICovCi0gICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgIEdTVF9TVEFURV9SRVRVUk4gKGVsZW1lbnQpID0gcmV0OwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotLyogZ3N0X2l0ZXJhdG9yX2ZvbGQgZnVuY3Rpb25zIGZvciBwYWRzX2FjdGl2YXRlCi0gKiBTdG9wIHRoZSBpdGVyYXRvciBpZiBhY3RpdmF0aW5nIG9uZSBwYWQgZmFpbGVkLCBidXQgb25seSBpZiB0aGF0IHBhZAotICogaGFzIG5vdCBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZWxlbWVudC4gKi8KLXN0YXRpYyBnYm9vbGVhbgotYWN0aXZhdGVfcGFkcyAoY29uc3QgR1ZhbHVlICogdnBhZCwgR1ZhbHVlICogcmV0LCBnYm9vbGVhbiAqIGFjdGl2ZSkKLXsKLSAgR3N0UGFkICpwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZwYWQpOwotICBnYm9vbGVhbiBjb250ID0gVFJVRTsKLQotICBpZiAoIWdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCAqYWN0aXZlKSkgewotICAgIGlmIChHU1RfUEFEX1BBUkVOVCAocGFkKSAhPSBOVUxMKSB7Ci0gICAgICBjb250ID0gRkFMU0U7Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuIChyZXQsIEZBTFNFKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gY29udDsKLX0KLQotLyogcmV0dXJucyBmYWxzZSBvbiBlcnJvciBvciBlYXJseSBjdXRvdXQgb2YgdGhlIGZvbGQsIHRydWUgaWYgYWxsCi0gKiBwYWRzIGluIEBpdGVyIHdlcmUgKGRlKWFjdGl2YXRlZCBzdWNjZXNzZnVsbHkuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWl0ZXJhdG9yX2FjdGl2YXRlX2ZvbGRfd2l0aF9yZXN5bmMgKEdzdEl0ZXJhdG9yICogaXRlciwKLSAgICBHc3RJdGVyYXRvckZvbGRGdW5jdGlvbiBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEl0ZXJhdG9yUmVzdWx0IGlyZXM7Ci0gIEdWYWx1ZSByZXQgPSB7IDAgfTsKLQotICAvKiBubyBuZWVkIHRvIHVuc2V0IHRoaXMgbGF0ZXIsIGl0J3MganVzdCBhIGJvb2xlYW4gKi8KLSAgZ192YWx1ZV9pbml0ICgmcmV0LCBHX1RZUEVfQk9PTEVBTik7Ci0gIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZyZXQsIFRSVUUpOwotCi0gIHdoaWxlICgxKSB7Ci0gICAgaXJlcyA9IGdzdF9pdGVyYXRvcl9mb2xkIChpdGVyLCBmdW5jLCAmcmV0LCB1c2VyX2RhdGEpOwotICAgIHN3aXRjaCAoaXJlcykgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICAvKiBuZWVkIHRvIHJlc2V0IHRoZSByZXN1bHQgYWdhaW4gKi8KLSAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAoJnJldCwgVFJVRSk7Ci0gICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Ci0gICAgICAgIC8qIGFsbCBwYWRzIGl0ZXJhdGVkLCByZXR1cm4gY29sbGVjdGVkIHZhbHVlICovCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIGl0ZXJhdG9yIHJldHVybmVkIF9FUlJPUiBvciBwcmVtYXR1cmUgZW5kIHdpdGggX09LLAotICAgICAgICAgKiBtYXJrIGFuIGVycm9yIGFuZCBleGl0ICovCi0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZyZXQsIEZBTFNFKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgfQotZG9uZToKLSAgLyogcmV0dXJuIGNvbGxlY3RlZCB2YWx1ZSAqLwotICByZXR1cm4gZ192YWx1ZV9nZXRfYm9vbGVhbiAoJnJldCk7Ci19Ci0KLS8qIGlzIGNhbGxlZCB3aXRoIFNUQVRFX0xPQ0sKLSAqCi0gKiBQYWRzIGFyZSBhY3RpdmF0ZWQgZnJvbSBzb3VyY2UgcGFkcyB0byBzaW5rcGFkcy4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBHc3RJdGVyYXRvciAqaXRlcjsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgZWxlbWVudCwKLSAgICAgICIlcyBwYWRzIiwgYWN0aXZlID8gImFjdGl2YXRlIiA6ICJkZWFjdGl2YXRlIik7Ci0KLSAgaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKGVsZW1lbnQpOwotICByZXMgPQotICAgICAgaXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyAoaXRlciwKLSAgICAgIChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgYWN0aXZhdGVfcGFkcywgJmFjdGl2ZSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLSAgaWYgKEdfVU5MSUtFTFkgKCFyZXMpKQotICAgIGdvdG8gc3JjX2ZhaWxlZDsKLQotICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgKGVsZW1lbnQpOwotICByZXMgPQotICAgICAgaXRlcmF0b3JfYWN0aXZhdGVfZm9sZF93aXRoX3Jlc3luYyAoaXRlciwKLSAgICAgIChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgYWN0aXZhdGVfcGFkcywgJmFjdGl2ZSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLSAgaWYgKEdfVU5MSUtFTFkgKCFyZXMpKQotICAgIGdvdG8gc2lua19mYWlsZWQ7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCBlbGVtZW50LAotICAgICAgInBhZCAlc2FjdGl2YXRpb24gc3VjY2Vzc2Z1bCIsIGFjdGl2ZSA/ICIiIDogImRlIik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1zcmNfZmFpbGVkOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCBlbGVtZW50LAotICAgICAgICAicGFkICVzYWN0aXZhdGlvbiBmYWlsZWQiLCBhY3RpdmUgPyAiIiA6ICJkZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotc2lua19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsIGVsZW1lbnQsCi0gICAgICAgICJzaW5rIHBhZHNfYWN0aXZhdGUgZmFpbGVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIGlzIGNhbGxlZCB3aXRoIFNUQVRFX0xPQ0sgKi8KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlX2Z1bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZSBzdGF0ZSwgbmV4dDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgc3RhdGUgPSAoR3N0U3RhdGUpIEdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQgKHRyYW5zaXRpb24pOwotICBuZXh0ID0gR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCAodHJhbnNpdGlvbik7Ci0KLSAgLyogaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBpcyBpbiB0aGUgZ2l2ZW4gc3RhdGUsIHdlIGp1c3QgcmV0dXJuIHN1Y2Nlc3MgKi8KLSAgaWYgKG5leHQgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyB8fCBzdGF0ZSA9PSBuZXh0KQotICAgIGdvdG8gd2FzX29rOwotCi0gIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TVEFURVMsIGVsZW1lbnQsCi0gICAgICAiZGVmYXVsdCBoYW5kbGVyIHRyaWVzIHNldHRpbmcgc3RhdGUgZnJvbSAlcyB0byAlcyAoJTA0eCkiLAotICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHN0YXRlKSwKLSAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXh0KSwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgaWYgKCFnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlIChlbGVtZW50LCBUUlVFKSkgewotICAgICAgICByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOnsKLSAgICAgIEdMaXN0ICpsOwotCi0gICAgICAvKiBkZWFjdGl2YXRlIHBhZHMgaW4gYm90aCBjYXNlcywgc2luY2UgdGhleSBhcmUgYWN0aXZhdGVkIG9uCi0gICAgICAgICByZWFkeS0+cGF1c2VkIGJ1dCB0aGUgZWxlbWVudCBtaWdodCBub3QgaGF2ZSBtYWRlIGl0IHRvIHBhdXNlZCAqLwotICAgICAgaWYgKCFnc3RfZWxlbWVudF9wYWRzX2FjdGl2YXRlIChlbGVtZW50LCBGQUxTRSkpIHsKLSAgICAgICAgcmVzdWx0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgfQotCi0gICAgICAvKiBSZW1vdmUgYWxsIG5vbi1wZXJzaXN0ZW50IGNvbnRleHRzICovCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICAgICAgZm9yIChsID0gZWxlbWVudC0+Y29udGV4dHM7IGw7KSB7Ci0gICAgICAgIEdzdENvbnRleHQgKmNvbnRleHQgPSBsLT5kYXRhOwotCi0gICAgICAgIGlmICghZ3N0X2NvbnRleHRfaXNfcGVyc2lzdGVudCAoY29udGV4dCkpIHsKLSAgICAgICAgICBHTGlzdCAqbmV4dDsKLQotICAgICAgICAgIGdzdF9jb250ZXh0X3VucmVmIChjb250ZXh0KTsKLSAgICAgICAgICBuZXh0ID0gbC0+bmV4dDsKLSAgICAgICAgICBlbGVtZW50LT5jb250ZXh0cyA9IGdfbGlzdF9kZWxldGVfbGluayAoZWxlbWVudC0+Y29udGV4dHMsIGwpOwotICAgICAgICAgIGwgPSBuZXh0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGwgPSBsLT5uZXh0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHRoaXMgd2lsbCBjYXRjaCByZWFsIGJ1dCB1bmhhbmRsZWQgc3RhdGUgY2hhbmdlczsKLSAgICAgICAqIGNhbiBvbmx5IGJlIGNhdXNlZCBieToKLSAgICAgICAqIC0gYSBuZXcgc3RhdGUgd2FzIGFkZGVkCi0gICAgICAgKiAtIHNvbWVob3cgdGhlIGVsZW1lbnQgd2FzIGFza2VkIHRvIGp1bXAgYWNyb3NzIGFuIGludGVybWVkaWF0ZSBzdGF0ZQotICAgICAgICovCi0gICAgICBnX3dhcm5pbmcgKCJVbmhhbmRsZWQgc3RhdGUgY2hhbmdlIGZyb20gJXMgdG8gJXMiLAotICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChzdGF0ZSksCi0gICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5leHQpKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci0KLXdhc19vazoKLSAgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gICAgcmVzdWx0ID0gR1NUX1NUQVRFX1JFVFVSTiAoZWxlbWVudCk7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU1RBVEVTLCBlbGVtZW50LAotICAgICAgICAiZWxlbWVudCBpcyBhbHJlYWR5IGluIHRoZSAlcyBzdGF0ZSIsCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChzdGF0ZSkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeToKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIHJlcXVlc3QgdGhlIGVsZW1lbnQgZmFjdG9yeSBvZi4KLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIGZhY3RvcnkgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhpcyBlbGVtZW50LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RFbGVtZW50RmFjdG9yeSB1c2VkIGZvciBjcmVhdGluZyB0aGlzCi0gKiAgICAgZWxlbWVudC4gbm8gcmVmY291bnRpbmcgaXMgbmVlZGVkLgotICovCi1Hc3RFbGVtZW50RmFjdG9yeSAqCi1nc3RfZWxlbWVudF9nZXRfZmFjdG9yeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOwotCi0gIHJldHVybiBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpLT5lbGVtZW50ZmFjdG9yeTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBHU1RfRUxFTUVOVF9DQVNUIChvYmplY3QpOwotICBHc3RDbG9jayAqKmNsb2NrX3A7Ci0gIEdzdEJ1cyAqKmJ1c19wOwotICBHc3RFbGVtZW50Q2xhc3MgKm9jbGFzczsKLSAgR0xpc3QgKndhbGs7Ci0KLSAgb2NsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLQotICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBlbGVtZW50LCAiJXAgZGlzcG9zZSIsIGVsZW1lbnQpOwotCi0gIGlmIChHU1RfU1RBVEUgKGVsZW1lbnQpICE9IEdTVF9TVEFURV9OVUxMKQotICAgIGdvdG8gbm90X251bGw7Ci0KLSAgLyogc3RhcnQgYnkgcmVsZWFzaW5nIGFsbCByZXF1ZXN0IHBhZHMsIHRoaXMgbWlnaHQgYWxzbyByZW1vdmUgc29tZSBkeW5hbWljCi0gICAqIHBhZHMgKi8KLSAgd2FsayA9IGVsZW1lbnQtPnBhZHM7Ci0gIHdoaWxlICh3YWxrKSB7Ci0gICAgR3N0UGFkICpwYWQgPSBHU1RfUEFEX0NBU1QgKHdhbGstPmRhdGEpOwotCi0gICAgd2FsayA9IHdhbGstPm5leHQ7Ci0KLSAgICBpZiAob2NsYXNzLT5yZWxlYXNlX3BhZCAmJiBHU1RfUEFEX1BBRF9URU1QTEFURSAocGFkKSAmJgotICAgICAgICBHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFIChHU1RfUEFEX1BBRF9URU1QTEFURSAocGFkKSkKLSAgICAgICAgPT0gR1NUX1BBRF9SRVFVRVNUKSB7Ci0gICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsIGVsZW1lbnQsCi0gICAgICAgICAgInJlbW92aW5nIHJlcXVlc3QgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICAgIG9jbGFzcy0+cmVsZWFzZV9wYWQgKGVsZW1lbnQsIHBhZCk7Ci0KLSAgICAgIC8qIGluIGNhc2UgdGhlIHJlbGVhc2VfcGFkIGZ1bmN0aW9uIHJlbW92ZWQgdGhlIG5leHQgcGFkIHRvbyAqLwotICAgICAgaWYgKHdhbGsgJiYgZ19saXN0X3Bvc2l0aW9uIChlbGVtZW50LT5wYWRzLCB3YWxrKSA9PSAtMSkKLSAgICAgICAgd2FsayA9IGVsZW1lbnQtPnBhZHM7Ci0gICAgfQotICB9Ci0gIC8qIHJlbW92ZSB0aGUgcmVtYWluaW5nIHBhZHMgKi8KLSAgd2hpbGUgKGVsZW1lbnQtPnBhZHMpIHsKLSAgICBHc3RQYWQgKnBhZCA9IEdTVF9QQURfQ0FTVCAoZWxlbWVudC0+cGFkcy0+ZGF0YSk7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCBlbGVtZW50LAotICAgICAgICAicmVtb3ZpbmcgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICBpZiAoIWdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGVsZW1lbnQsIHBhZCkpIHsKLSAgICAgIC8qIG9ubHkgaGFwcGVucyB3aGVuIHNvbWVvbmUgdW5wYXJlbnRlZCBvdXIgcGFkLi4gKi8KLSAgICAgIGdfY3JpdGljYWwgKCJmYWlsZWQgdG8gcmVtb3ZlIHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICBjbG9ja19wID0gJmVsZW1lbnQtPmNsb2NrOwotICBidXNfcCA9ICZlbGVtZW50LT5idXM7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgY2xvY2tfcCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgYnVzX3AsIE5VTEwpOwotICBnX2xpc3RfZnJlZV9mdWxsIChlbGVtZW50LT5jb250ZXh0cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY29udGV4dF91bnJlZik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBlbGVtZW50LCAiJXAgcGFyZW50IGNsYXNzIGRpc3Bvc2UiLAotICAgICAgZWxlbWVudCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotbm90X251bGw6Ci0gIHsKLSAgICBnYm9vbGVhbiBpc19sb2NrZWQ7Ci0KLSAgICBpc19sb2NrZWQgPSBHU1RfRUxFTUVOVF9JU19MT0NLRURfU1RBVEUgKGVsZW1lbnQpOwotICAgIGdfY3JpdGljYWwKLSAgICAgICAgKCJcblRyeWluZyB0byBkaXNwb3NlIGVsZW1lbnQgJXMsIGJ1dCBpdCBpcyBpbiAlcyVzIGluc3RlYWQgb2YgdGhlIE5VTEwiCi0gICAgICAgICIgc3RhdGUuXG4iCi0gICAgICAgICJZb3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBlbGVtZW50cyB0byB0aGUgTlVMTCBzdGF0ZSBiZWZvcmVcbiIKLSAgICAgICAgImRyb3BwaW5nIHRoZSBmaW5hbCByZWZlcmVuY2UsIHRvIGFsbG93IHRoZW0gdG8gY2xlYW4gdXAuXG4iCi0gICAgICAgICJUaGlzIHByb2JsZW0gbWF5IGFsc28gYmUgY2F1c2VkIGJ5IGEgcmVmY291bnRpbmcgYnVnIGluIHRoZVxuIgotICAgICAgICAiYXBwbGljYXRpb24gb3Igc29tZSBlbGVtZW50LlxuIiwKLSAgICAgICAgR1NUX09CSkVDVF9OQU1FIChlbGVtZW50KSwKLSAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKEdTVF9TVEFURSAoZWxlbWVudCkpLAotICAgICAgICBpc19sb2NrZWQgPyAiIChsb2NrZWQpIiA6ICIiKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAob2JqZWN0KTsKLQotICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBlbGVtZW50LCAiJXAgZmluYWxpemUiLCBlbGVtZW50KTsKLQotICBnX2NvbmRfY2xlYXIgKCZlbGVtZW50LT5zdGF0ZV9jb25kKTsKLSAgZ19yZWNfbXV0ZXhfY2xlYXIgKCZlbGVtZW50LT5zdGF0ZV9sb2NrKTsKLQotICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBlbGVtZW50LCAiJXAgZmluYWxpemUgcGFyZW50IiwKLSAgICAgIGVsZW1lbnQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X3NldF9idXNfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1cyAqIGJ1cykKLXsKLSAgR3N0QnVzICoqYnVzX3A7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQVJFTlRBR0UsIGVsZW1lbnQsICJzZXR0aW5nIGJ1cyB0byAlcCIsIGJ1cyk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgYnVzX3AgPSAmR1NUX0VMRU1FTlRfQlVTIChlbGVtZW50KTsKLSAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBidXNfcCwgR1NUX09CSkVDVF9DQVNUIChidXMpKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3NldF9idXM6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBzZXQgdGhlIGJ1cyBvZi4KLSAqIEBidXM6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RCdXMgdG8gc2V0LgotICoKLSAqIFNldHMgdGhlIGJ1cyBvZiB0aGUgZWxlbWVudC4gSW5jcmVhc2VzIHRoZSByZWZjb3VudCBvbiB0aGUgYnVzLgotICogRm9yIGludGVybmFsIHVzZSBvbmx5LCB1bmxlc3MgeW91J3JlIHRlc3RpbmcgZWxlbWVudHMuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfc2V0X2J1cyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1cyAqIGJ1cykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpvY2xhc3M7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpKTsKLQotICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotCi0gIGlmIChvY2xhc3MtPnNldF9idXMpCi0gICAgb2NsYXNzLT5zZXRfYnVzIChlbGVtZW50LCBidXMpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2dldF9idXM6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBnZXQgdGhlIGJ1cyBvZi4KLSAqCi0gKiBSZXR1cm5zIHRoZSBidXMgb2YgdGhlIGVsZW1lbnQuIE5vdGUgdGhhdCBvbmx5IGEgI0dzdFBpcGVsaW5lIHdpbGwgcHJvdmlkZSBhCi0gKiBidXMgZm9yIHRoZSBhcHBsaWNhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBlbGVtZW50J3MgI0dzdEJ1cy4gdW5yZWYgYWZ0ZXIgdXNhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0QnVzICoKLWdzdF9lbGVtZW50X2dldF9idXMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RCdXMgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgcmVzdWx0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICBpZiAoKHJlc3VsdCA9IEdTVF9FTEVNRU5UX0JVUyAoZWxlbWVudCkpKQotICAgIGdzdF9vYmplY3RfcmVmIChyZXN1bHQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQlVTLCBlbGVtZW50LCAiZ290IGJ1cyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIHJlc3VsdCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X3NldF9jb250ZXh0X2RlZmF1bHQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDb250ZXh0ICogY29udGV4dCkKLXsKLSAgY29uc3QgZ2NoYXIgKmNvbnRleHRfdHlwZTsKLSAgR0xpc3QgKmw7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTlRFWFQgKGNvbnRleHQpKTsKLSAgY29udGV4dF90eXBlID0gZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAoY29udGV4dCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNvbnRleHRfdHlwZSAhPSBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICBmb3IgKGwgPSBlbGVtZW50LT5jb250ZXh0czsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RDb250ZXh0ICp0bXAgPSBsLT5kYXRhOwotICAgIGNvbnN0IGdjaGFyICp0bXBfdHlwZSA9IGdzdF9jb250ZXh0X2dldF9jb250ZXh0X3R5cGUgKHRtcCk7Ci0KLSAgICAvKiBBbHdheXMgc3RvcmUgbmV3ZXN0IGNvbnRleHQgYnV0IG5ldmVyIHJlcGxhY2UKLSAgICAgKiBhIHBlcnNpc3RlbnQgb25lIGJ5IGEgbm9uLXBlcnNpc3RlbnQgb25lICovCi0gICAgaWYgKGdfc3RyY21wMCAoY29udGV4dF90eXBlLCB0bXBfdHlwZSkgPT0gMCAmJgotICAgICAgICAoZ3N0X2NvbnRleHRfaXNfcGVyc2lzdGVudCAoY29udGV4dCkgfHwKLSAgICAgICAgICAgICFnc3RfY29udGV4dF9pc19wZXJzaXN0ZW50ICh0bXApKSkgewotICAgICAgZ3N0X2NvbnRleHRfcmVwbGFjZSAoKEdzdENvbnRleHQgKiopICYgbC0+ZGF0YSwgY29udGV4dCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgLyogTm90IGZvdW5kPyBBZGQgKi8KLSAgaWYgKGwgPT0gTlVMTCkgewotICAgIGVsZW1lbnQtPmNvbnRleHRzID0KLSAgICAgICAgZ19saXN0X3ByZXBlbmQgKGVsZW1lbnQtPmNvbnRleHRzLCBnc3RfY29udGV4dF9yZWYgKGNvbnRleHQpKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQ6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBzZXQgdGhlIGNvbnRleHQgb2YuCi0gKiBAY29udGV4dDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdENvbnRleHQgdG8gc2V0LgotICoKLSAqIFNldHMgdGhlIGNvbnRleHQgb2YgdGhlIGVsZW1lbnQuIEluY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIGNvbnRleHQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDb250ZXh0ICogY29udGV4dCkKLXsKLSAgR3N0RWxlbWVudENsYXNzICpvY2xhc3M7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTlRFWFQgKGNvbnRleHQpKTsKLQotICBvY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NPTlRFWFQsIGVsZW1lbnQsCi0gICAgICAic2V0IGNvbnRleHQgJXAgJSIgR1NUX1BUUl9GT1JNQVQsIGNvbnRleHQsCi0gICAgICBnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlIChjb250ZXh0KSk7Ci0KLSAgaWYgKG9jbGFzcy0+c2V0X2NvbnRleHQpCi0gICAgb2NsYXNzLT5zZXRfY29udGV4dCAoZWxlbWVudCwgY29udGV4dCk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRzOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gc2V0IHRoZSBjb250ZXh0IG9mLgotICoKLSAqIEdldHMgdGhlIGNvbnRleHRzIHNldCBvbiB0aGUgZWxlbWVudC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IChlbGVtZW50LXR5cGUgR3N0LkNvbnRleHQpICh0cmFuc2ZlciBmdWxsKTogTGlzdCBvZiAjR3N0Q29udGV4dAotICoKLSAqIFNpbmNlOiAxLjgKLSAqLwotR0xpc3QgKgotZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRzIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR0xpc3QgKnJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICByZXQgPSBnX2xpc3RfY29weV9kZWVwIChlbGVtZW50LT5jb250ZXh0cywgKEdDb3B5RnVuYykgZ3N0X2NvbnRleHRfcmVmLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnaW50Ci1fbWF0Y2hfY29udGV4dF90eXBlIChHc3RDb250ZXh0ICogYzEsIGNvbnN0IGdjaGFyICogY29udGV4dF90eXBlKQotewotICBjb25zdCBnY2hhciAqYzFfdHlwZTsKLQotICBjMV90eXBlID0gZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAoYzEpOwotCi0gIHJldHVybiBnX3N0cmNtcDAgKGMxX3R5cGUsIGNvbnRleHRfdHlwZSk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRfdW5sb2NrZWQ6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBnZXQgdGhlIGNvbnRleHQgb2YuCi0gKiBAY29udGV4dF90eXBlOiBhIG5hbWUgb2YgYSBjb250ZXh0IHRvIHJldHJpZXZlCi0gKgotICogR2V0cyB0aGUgY29udGV4dCB3aXRoIEBjb250ZXh0X3R5cGUgc2V0IG9uIHRoZSBlbGVtZW50IG9yIE5VTEwuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNHc3RDb250ZXh0IG9yIE5VTEwKLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLUdzdENvbnRleHQgKgotZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRfdW5sb2NrZWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIGNvbnN0IGdjaGFyICogY29udGV4dF90eXBlKQotewotICBHc3RDb250ZXh0ICpyZXQgPSBOVUxMOwotICBHTGlzdCAqbm9kZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKLQotICBub2RlID0KLSAgICAgIGdfbGlzdF9maW5kX2N1c3RvbSAoZWxlbWVudC0+Y29udGV4dHMsIGNvbnRleHRfdHlwZSwKLSAgICAgIChHQ29tcGFyZUZ1bmMpIF9tYXRjaF9jb250ZXh0X3R5cGUpOwotICBpZiAobm9kZSAmJiBub2RlLT5kYXRhKQotICAgIHJldCA9IGdzdF9jb250ZXh0X3JlZiAobm9kZS0+ZGF0YSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9nZXRfY29udGV4dDoKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIGdldCB0aGUgY29udGV4dCBvZi4KLSAqIEBjb250ZXh0X3R5cGU6IGEgbmFtZSBvZiBhIGNvbnRleHQgdG8gcmV0cmlldmUKLSAqCi0gKiBHZXRzIHRoZSBjb250ZXh0IHdpdGggQGNvbnRleHRfdHlwZSBzZXQgb24gdGhlIGVsZW1lbnQgb3IgTlVMTC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjR3N0Q29udGV4dCBvciBOVUxMCi0gKgotICogU2luY2U6IDEuOAotICovCi1Hc3RDb250ZXh0ICoKLWdzdF9lbGVtZW50X2dldF9jb250ZXh0IChHc3RFbGVtZW50ICogZWxlbWVudCwgY29uc3QgZ2NoYXIgKiBjb250ZXh0X3R5cGUpCi17Ci0gIEdzdENvbnRleHQgKnJldCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHRfdW5sb2NrZWQgKGVsZW1lbnQsIGNvbnRleHRfdHlwZSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2VsZW1lbnRfcHJvcGVydHlfcG9zdF9ub3RpZnlfbXNnIChHc3RFbGVtZW50ICogZWxlbWVudCwgR09iamVjdCAqIG9iaiwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMsIGdib29sZWFuIGluY2x1ZGVfdmFsdWUpCi17Ci0gIEdWYWx1ZSB2YWwgPSBHX1ZBTFVFX0lOSVQ7Ci0gIEdWYWx1ZSAqdjsKLQotICBHU1RfTE9HX09CSkVDVCAoZWxlbWVudCwgInByb3BlcnR5ICclcycgb2Ygb2JqZWN0ICUiIEdTVF9QVFJfRk9STUFUICIgaGFzICIKLSAgICAgICJjaGFuZ2VkLCBwb3N0aW5nIG1lc3NhZ2Ugd2l0aCVzIHZhbHVlIiwgcHNwZWMtPm5hbWUsIG9iaiwKLSAgICAgIGluY2x1ZGVfdmFsdWUgPyAiIiA6ICJvdXQiKTsKLQotICBpZiAoaW5jbHVkZV92YWx1ZSAmJiAocHNwZWMtPmZsYWdzICYgR19QQVJBTV9SRUFEQUJMRSkgIT0gMCkgewotICAgIGdfdmFsdWVfaW5pdCAoJnZhbCwgcHNwZWMtPnZhbHVlX3R5cGUpOwotICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAob2JqLCBwc3BlYy0+bmFtZSwgJnZhbCk7Ci0gICAgdiA9ICZ2YWw7Ci0gIH0gZWxzZSB7Ci0gICAgdiA9IE5VTEw7Ci0gIH0KLSAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LAotICAgICAgZ3N0X21lc3NhZ2VfbmV3X3Byb3BlcnR5X25vdGlmeSAoR1NUX09CSkVDVF9DQVNUIChvYmopLCBwc3BlYy0+bmFtZSwgdikpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2VsZW1lbnRfcHJvcGVydHlfZGVlcF9ub3RpZnlfY2IgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHT2JqZWN0ICogcHJvcF9vYmosCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdib29sZWFuIGluY2x1ZGVfdmFsdWUgPSBHUE9JTlRFUl9UT19JTlQgKHVzZXJfZGF0YSk7Ci0KLSAgZ3N0X2VsZW1lbnRfcHJvcGVydHlfcG9zdF9ub3RpZnlfbXNnIChlbGVtZW50LCBwcm9wX29iaiwgcHNwZWMsCi0gICAgICBpbmNsdWRlX3ZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X3Byb3BlcnR5X25vdGlmeV9jYiAoR09iamVjdCAqIG9iaiwgR1BhcmFtU3BlYyAqIHBzcGVjLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gaW5jbHVkZV92YWx1ZSA9IEdQT0lOVEVSX1RPX0lOVCAodXNlcl9kYXRhKTsKLQotICBnc3RfZWxlbWVudF9wcm9wZXJ0eV9wb3N0X25vdGlmeV9tc2cgKEdTVF9FTEVNRU5UX0NBU1QgKG9iaiksIG9iaiwgcHNwZWMsCi0gICAgICBpbmNsdWRlX3ZhbHVlKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNoOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gd2F0Y2ggZm9yIHByb3BlcnR5IGNoYW5nZXMKLSAqIEBwcm9wZXJ0eV9uYW1lOiAoYWxsb3ctbm9uZSk6IG5hbWUgb2YgcHJvcGVydHkgdG8gd2F0Y2ggZm9yIGNoYW5nZXMsIG9yCi0gKiAgICAgTlVMTCB0byB3YXRjaCBhbGwgcHJvcGVydGllcwotICogQGluY2x1ZGVfdmFsdWU6IHdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgbmV3IHByb3BlcnR5IHZhbHVlIGluIHRoZSBtZXNzYWdlCi0gKgotICogUmV0dXJuczogYSB3YXRjaCBpZCwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoCi0gKiAgICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3Byb3BlcnR5X25vdGlmeV93YXRjaCgpIHRvIHJlbW92ZSB0aGUgd2F0Y2ggYWdhaW4uCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotZ3Vsb25nCi1nc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNoIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBjb25zdCBnY2hhciAqIHByb3BlcnR5X25hbWUsIGdib29sZWFuIGluY2x1ZGVfdmFsdWUpCi17Ci0gIGNvbnN0IGdjaGFyICpzZXA7Ci0gIGdjaGFyICpzaWduYWxfbmFtZTsKLSAgZ3Vsb25nIGlkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIDApOwotCi0gIHNlcCA9IChwcm9wZXJ0eV9uYW1lICE9IE5VTEwpID8gIjo6IiA6IE5VTEw7Ci0gIHNpZ25hbF9uYW1lID0gZ19zdHJjb25jYXQgKCJub3RpZnkiLCBzZXAsIHByb3BlcnR5X25hbWUsIE5VTEwpOwotICBpZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKGVsZW1lbnQsIHNpZ25hbF9uYW1lLAotICAgICAgR19DQUxMQkFDSyAoZ3N0X2VsZW1lbnRfcHJvcGVydHlfbm90aWZ5X2NiKSwKLSAgICAgIEdJTlRfVE9fUE9JTlRFUiAoaW5jbHVkZV92YWx1ZSkpOwotICBnX2ZyZWUgKHNpZ25hbF9uYW1lKTsKLQotICByZXR1cm4gaWQ7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNoOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gd2F0Y2ggKHJlY3Vyc2l2ZWx5KSBmb3IgcHJvcGVydHkgY2hhbmdlcwotICogQHByb3BlcnR5X25hbWU6IChhbGxvdy1ub25lKTogbmFtZSBvZiBwcm9wZXJ0eSB0byB3YXRjaCBmb3IgY2hhbmdlcywgb3IKLSAqICAgICBOVUxMIHRvIHdhdGNoIGFsbCBwcm9wZXJ0aWVzCi0gKiBAaW5jbHVkZV92YWx1ZTogd2hldGhlciB0byBpbmNsdWRlIHRoZSBuZXcgcHJvcGVydHkgdmFsdWUgaW4gdGhlIG1lc3NhZ2UKLSAqCi0gKiBSZXR1cm5zOiBhIHdhdGNoIGlkLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGgKLSAqICAgICBnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoKCkgdG8gcmVtb3ZlIHRoZSB3YXRjaCBhZ2Fpbi4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1ndWxvbmcKLWdzdF9lbGVtZW50X2FkZF9wcm9wZXJ0eV9kZWVwX25vdGlmeV93YXRjaCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLCBnYm9vbGVhbiBpbmNsdWRlX3ZhbHVlKQotewotICBjb25zdCBnY2hhciAqc2VwOwotICBnY2hhciAqc2lnbmFsX25hbWU7Ci0gIGd1bG9uZyBpZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCAwKTsKLQotICBzZXAgPSAocHJvcGVydHlfbmFtZSAhPSBOVUxMKSA/ICI6OiIgOiBOVUxMOwotICBzaWduYWxfbmFtZSA9IGdfc3RyY29uY2F0ICgiZGVlcC1ub3RpZnkiLCBzZXAsIHByb3BlcnR5X25hbWUsIE5VTEwpOwotICBpZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKGVsZW1lbnQsIHNpZ25hbF9uYW1lLAotICAgICAgR19DQUxMQkFDSyAoZ3N0X2VsZW1lbnRfcHJvcGVydHlfZGVlcF9ub3RpZnlfY2IpLAotICAgICAgR0lOVF9UT19QT0lOVEVSIChpbmNsdWRlX3ZhbHVlKSk7Ci0gIGdfZnJlZSAoc2lnbmFsX25hbWUpOwotCi0gIHJldHVybiBpZDsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgYmVpbmcgd2F0Y2hlZCBmb3IgcHJvcGVydHkgY2hhbmdlcwotICogQHdhdGNoX2lkOiB3YXRjaCBpZCB0byByZW1vdmUKLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi12b2lkCi1nc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ3Vsb25nIHdhdGNoX2lkKQotewotICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGVsZW1lbnQsIHdhdGNoX2lkKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR3N0RWxlbWVudENhbGxBc3luY0Z1bmMgZnVuYzsKLSAgZ3BvaW50ZXIgdXNlcl9kYXRhOwotICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X25vdGlmeTsKLX0gR3N0RWxlbWVudENhbGxBc3luY0RhdGE7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZWxlbWVudF9jYWxsX2FzeW5jX2Z1bmMgKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudENhbGxBc3luY0RhdGEgKmFzeW5jX2RhdGEgPSBkYXRhOwotCi0gIGFzeW5jX2RhdGEtPmZ1bmMgKGFzeW5jX2RhdGEtPmVsZW1lbnQsIGFzeW5jX2RhdGEtPnVzZXJfZGF0YSk7Ci0gIGlmIChhc3luY19kYXRhLT5kZXN0cm95X25vdGlmeSkKLSAgICBhc3luY19kYXRhLT5kZXN0cm95X25vdGlmeSAoYXN5bmNfZGF0YS0+dXNlcl9kYXRhKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYXN5bmNfZGF0YS0+ZWxlbWVudCk7Ci0gIGdfZnJlZSAoYXN5bmNfZGF0YSk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfY2FsbF9hc3luYzoKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50Ci0gKiBAZnVuYzogRnVuY3Rpb24gdG8gY2FsbCBhc3luY2hyb25vdXNseSBmcm9tIGFub3RoZXIgdGhyZWFkCi0gKiBAdXNlcl9kYXRhOiBEYXRhIHRvIHBhc3MgdG8gQGZ1bmMKLSAqIEBkZXN0cm95X25vdGlmeTogR0Rlc3Ryb3lOb3RpZnkgZm9yIEB1c2VyX2RhdGEKLSAqCi0gKiBDYWxscyBAZnVuYyBmcm9tIGFub3RoZXIgdGhyZWFkIGFuZCBwYXNzZXMgQHVzZXJfZGF0YSB0byBpdC4gVGhpcyBpcyB0byBiZQotICogdXNlZCBmb3IgY2FzZXMgd2hlbiBhIHN0YXRlIGNoYW5nZSBoYXMgdG8gYmUgcGVyZm9ybWVkIGZyb20gYSBzdHJlYW1pbmcKLSAqIHRocmVhZCwgZGlyZWN0bHkgdmlhIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpIG9yIGluZGlyZWN0bHkgZS5nLiB2aWEgU0VFSwotICogZXZlbnRzLgotICoKLSAqIENhbGxpbmcgdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5IGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgd2lsbCBjYXVzZQotICogZGVhZGxvY2tzIGluIG1hbnkgc2l0dWF0aW9ucywgYXMgdGhleSBtaWdodCBpbnZvbHZlIHdhaXRpbmcgZm9yIHRoZQotICogc3RyZWFtaW5nIHRocmVhZCB0byBzaHV0IGRvd24gZnJvbSB0aGlzIHZlcnkgc3RyZWFtaW5nIHRocmVhZC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLXZvaWQKLWdzdF9lbGVtZW50X2NhbGxfYXN5bmMgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RFbGVtZW50Q2FsbEFzeW5jRnVuYyBmdW5jLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9ub3RpZnkpCi17Ci0gIEdzdEVsZW1lbnRDYWxsQXN5bmNEYXRhICphc3luY19kYXRhOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSk7Ci0KLSAgYXN5bmNfZGF0YSA9IGdfbmV3MCAoR3N0RWxlbWVudENhbGxBc3luY0RhdGEsIDEpOwotICBhc3luY19kYXRhLT5lbGVtZW50ID0gZ3N0X29iamVjdF9yZWYgKGVsZW1lbnQpOwotICBhc3luY19kYXRhLT5mdW5jID0gZnVuYzsKLSAgYXN5bmNfZGF0YS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotICBhc3luY19kYXRhLT5kZXN0cm95X25vdGlmeSA9IGRlc3Ryb3lfbm90aWZ5OwotCi0gIGdfdGhyZWFkX3Bvb2xfcHVzaCAoZ3N0X2VsZW1lbnRfcG9vbCwgYXN5bmNfZGF0YSwgTlVMTCk7Ci19Ci0KLXZvaWQKLV9wcml2X2dzdF9lbGVtZW50X2NsZWFudXAgKHZvaWQpCi17Ci0gIGlmIChnc3RfZWxlbWVudF9wb29sKSB7Ci0gICAgZ190aHJlYWRfcG9vbF9mcmVlIChnc3RfZWxlbWVudF9wb29sLCBGQUxTRSwgVFJVRSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0dXBfdGhyZWFkX3Bvb2wgKCk7Ci0gIH0KLX0KLQotR3N0U3RydWN0dXJlICoKLWdzdF9tYWtlX2VsZW1lbnRfbWVzc2FnZV9kZXRhaWxzIChjb25zdCBjaGFyICpuYW1lLCAuLi4pCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICB2YV9zdGFydCAodmFyYXJncywgbmFtZSk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdCAoImRldGFpbHMiLCBuYW1lLCB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLQotICByZXR1cm4gc3RydWN0dXJlOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGVsZW1lbnQuaCBiL2dzdC9nc3RlbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYWU1MTAuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGVsZW1lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDAsMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGVsZW1lbnQuaDogSGVhZGVyIGZvciBHc3RFbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0VMRU1FTlRfSF9fCi0jZGVmaW5lIF9fR1NUX0VMRU1FTlRfSF9fCi0KLS8qIGdzdGVsZW1lbnQuaCBhbmQgZ3N0ZWxlbWVudGZhY3RvcnkuaCBpbmNsdWRlIGVhY2hvdGhlciAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50Q2xhc3MgR3N0RWxlbWVudENsYXNzOwotCi0vKiBnc3RtZXNzYWdlLmggbmVlZHMgU3RhdGUgKi8KLS8qKgotICogR3N0U3RhdGU6Ci0gKiBAR1NUX1NUQVRFX1ZPSURfUEVORElORzogbm8gcGVuZGluZyBzdGF0ZS4KLSAqIEBHU1RfU1RBVEVfTlVMTCAgICAgICAgOiB0aGUgTlVMTCBzdGF0ZSBvciBpbml0aWFsIHN0YXRlIG9mIGFuIGVsZW1lbnQuCi0gKiBAR1NUX1NUQVRFX1JFQURZICAgICAgIDogdGhlIGVsZW1lbnQgaXMgcmVhZHkgdG8gZ28gdG8gUEFVU0VELgotICogQEdTVF9TVEFURV9QQVVTRUQgICAgICA6IHRoZSBlbGVtZW50IGlzIFBBVVNFRCwgaXQgaXMgcmVhZHkgdG8gYWNjZXB0IGFuZAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgZGF0YS4gU2luayBlbGVtZW50cyBob3dldmVyIG9ubHkgYWNjZXB0IG9uZQotICogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBhbmQgdGhlbiBibG9jay4KLSAqIEBHU1RfU1RBVEVfUExBWUlORyAgICAgOiB0aGUgZWxlbWVudCBpcyBQTEFZSU5HLCB0aGUgI0dzdENsb2NrIGlzIHJ1bm5pbmcgYW5kCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGEgaXMgZmxvd2luZy4KLSAqCi0gKiBUaGUgcG9zc2libGUgc3RhdGVzIGFuIGVsZW1lbnQgY2FuIGJlIGluLiBTdGF0ZXMgY2FuIGJlIGNoYW5nZWQgdXNpbmcKLSAqIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpIGFuZCBjaGVja2VkIHVzaW5nIGdzdF9lbGVtZW50X2dldF9zdGF0ZSgpLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HICAgICAgICA9IDAsCi0gIEdTVF9TVEFURV9OVUxMICAgICAgICAgICAgICAgID0gMSwKLSAgR1NUX1NUQVRFX1JFQURZICAgICAgICAgICAgICAgPSAyLAotICBHU1RfU1RBVEVfUEFVU0VEICAgICAgICAgICAgICA9IDMsCi0gIEdTVF9TVEFURV9QTEFZSU5HICAgICAgICAgICAgID0gNAotfSBHc3RTdGF0ZTsKLQotCi0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGFkLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGJ1cy5oPgotI2luY2x1ZGUgPGdzdC9nc3RjbG9jay5oPgotI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50ZmFjdG9yeS5oPgotI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW4uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luZmVhdHVyZS5oPgotI2luY2x1ZGUgPGdzdC9nc3RpdGVyYXRvci5oPgotI2luY2x1ZGUgPGdzdC9nc3RtZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHF1ZXJ5Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRhZ2xpc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0VMRU1FTlQgICAgICAgICAgICAgICAgKGdzdF9lbGVtZW50X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVNfRUxFTUVOVChvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0VMRU1FTlQpKQotI2RlZmluZSBHU1RfSVNfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfRUxFTUVOVCkpCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9FTEVNRU5ULCBHc3RFbGVtZW50Q2xhc3MpKQotI2RlZmluZSBHU1RfRUxFTUVOVChvYmopICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0VMRU1FTlQsIEdzdEVsZW1lbnQpKQotI2RlZmluZSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfRUxFTUVOVCwgR3N0RWxlbWVudENsYXNzKSkKLSNkZWZpbmUgR1NUX0VMRU1FTlRfQ0FTVChvYmopICAgICAgICAgICAoKEdzdEVsZW1lbnQqKShvYmopKQotCi0vKioKLSAqIEdzdFN0YXRlQ2hhbmdlUmV0dXJuOgotICogQEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSAgIDogdGhlIHN0YXRlIGNoYW5nZSBmYWlsZWQKLSAqIEBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgICA6IHRoZSBzdGF0ZSBjaGFuZ2Ugc3VjY2VlZGVkCi0gKiBAR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyAgICAgOiB0aGUgc3RhdGUgY2hhbmdlIHdpbGwgaGFwcGVuIGFzeW5jaHJvbm91c2x5Ci0gKiBAR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOiB0aGUgc3RhdGUgY2hhbmdlIHN1Y2NlZWRlZCBidXQgdGhlIGVsZW1lbnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm5vdCBwcm9kdWNlIGRhdGEgaW4gJUdTVF9TVEFURV9QQVVTRUQuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdpdGggbGl2ZSBzb3VyY2VzLgotICoKLSAqIFRoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGZyb20gYSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gc3VjaCBhcyAKLSAqIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpLiBPbmx5IEBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUgaXMgYSByZWFsIGZhaWx1cmUuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSAgICAgICAgICAgICA9IDAsCi0gIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAgICAgICAgICAgICA9IDEsCi0gIEdTVF9TVEFURV9DSEFOR0VfQVNZTkMgICAgICAgICAgICAgICA9IDIsCi0gIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCAgICAgICAgICA9IDMKLX0gR3N0U3RhdGVDaGFuZ2VSZXR1cm47Ci0KLS8qIE5PVEU6IHRoaXMgcHJvYmFibHkgc2hvdWxkIGJlIGRvbmUgd2l0aCBhbiAjaWZkZWYgdG8gZGVjaWRlCi0gKiB3aGV0aGVyIHRvIHNhZmUtY2FzdCBvciB0byBqdXN0IGRvIHRoZSBub24tY2hlY2tpbmcgY2FzdC4KLSAqLwotCi0vKioKLSAqIEdTVF9TVEFURToKLSAqIEBlbGVtOiBhICNHc3RFbGVtZW50IHRvIHJldHVybiBzdGF0ZSBmb3IuCi0gKgotICogVGhpcyBtYWNybyByZXR1cm5zIHRoZSBjdXJyZW50ICNHc3RTdGF0ZSBvZiB0aGUgZWxlbWVudC4KLSAqLwotI2RlZmluZSBHU1RfU1RBVEUoZWxlbSkgICAgICAgICAgICAgICAgIChHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLT5jdXJyZW50X3N0YXRlKQotCi0vKioKLSAqIEdTVF9TVEFURV9ORVhUOgotICogQGVsZW06IGEgI0dzdEVsZW1lbnQgdG8gcmV0dXJuIHRoZSBuZXh0IHN0YXRlIGZvci4KLSAqCi0gKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIG5leHQgI0dzdFN0YXRlIG9mIHRoZSBlbGVtZW50LgotICovCi0jZGVmaW5lIEdTVF9TVEFURV9ORVhUKGVsZW0pICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPm5leHRfc3RhdGUpCi0KLS8qKgotICogR1NUX1NUQVRFX1BFTkRJTkc6Ci0gKiBAZWxlbTogYSAjR3N0RWxlbWVudCB0byByZXR1cm4gdGhlIHBlbmRpbmcgc3RhdGUgZm9yLgotICoKLSAqIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgY3VycmVudGx5IHBlbmRpbmcgI0dzdFN0YXRlIG9mIHRoZSBlbGVtZW50LgotICovCi0jZGVmaW5lIEdTVF9TVEFURV9QRU5ESU5HKGVsZW0pICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPnBlbmRpbmdfc3RhdGUpCi0KLS8qKgotICogR1NUX1NUQVRFX1RBUkdFVDoKLSAqIEBlbGVtOiBhICNHc3RFbGVtZW50IHRvIHJldHVybiB0aGUgdGFyZ2V0IHN0YXRlIGZvci4KLSAqCi0gKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIHRhcmdldCAjR3N0U3RhdGUgb2YgdGhlIGVsZW1lbnQuCi0gKi8KLSNkZWZpbmUgR1NUX1NUQVRFX1RBUkdFVChlbGVtKSAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0+dGFyZ2V0X3N0YXRlKQotCi0vKioKLSAqIEdTVF9TVEFURV9SRVRVUk46Ci0gKiBAZWxlbTogYSAjR3N0RWxlbWVudCB0byByZXR1cm4gdGhlIGxhc3Qgc3RhdGUgcmVzdWx0IGZvci4KLSAqCi0gKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIGxhc3QgI0dzdFN0YXRlQ2hhbmdlUmV0dXJuIHZhbHVlLgotICovCi0jZGVmaW5lIEdTVF9TVEFURV9SRVRVUk4oZWxlbSkgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPmxhc3RfcmV0dXJuKQotCi0jZGVmaW5lIF9fR1NUX1NJR04odmFsKSAgICAgICAgICAgICAgICAgKCh2YWwpIDwgMCA/IC0xIDogKCh2YWwpID4gMCA/IDEgOiAwKSkKLS8qKgotICogR1NUX1NUQVRFX0dFVF9ORVhUOgotICogQGN1cjogQSBzdGFydGluZyAjR3N0U3RhdGUKLSAqIEBwZW5kaW5nOiBBIHRhcmdldCAjR3N0U3RhdGUKLSAqCi0gKiBHaXZlbiBhIGN1cnJlbnQgc3RhdGUgQGN1ciBhbmQgYSB0YXJnZXQgc3RhdGUgQHBlbmRpbmcsIGNhbGN1bGF0ZSB0aGUgbmV4dCAoaW50ZXJtZWRpYXRlKQotICogI0dzdFN0YXRlLgotICovCi0jZGVmaW5lIEdTVF9TVEFURV9HRVRfTkVYVChjdXIscGVuZGluZykgICAgICAgICAoKEdzdFN0YXRlKSgoY3VyKSArIF9fR1NUX1NJR04gKChnaW50KShwZW5kaW5nKSAtIChnaW50KShjdXIpKSkpCi0vKioKLSAqIEdTVF9TVEFURV9UUkFOU0lUSU9OOgotICogQGN1cjogQSBjdXJyZW50IHN0YXRlCi0gKiBAbmV4dDogQSBuZXh0IHN0YXRlCi0gKgotICogR2l2ZW4gYSBjdXJyZW50IHN0YXRlIEBjdXIgYW5kIGEgbmV4dCBzdGF0ZSBAbmV4dCwgY2FsY3VsYXRlIHRoZSBhc3NvY2lhdGVkCi0gKiAjR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbi4KLSAqLwotI2RlZmluZSBHU1RfU1RBVEVfVFJBTlNJVElPTihjdXIsbmV4dCkgICAgICAgICAgKChHc3RTdGF0ZUNoYW5nZSkoKChjdXIpPDwzKXwobmV4dCkpKQotLyoqCi0gKiBHU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UOgotICogQHRyYW5zOiBBICNHc3RTdGF0ZUNoYW5nZQotICoKLSAqIEdpdmVuIGEgc3RhdGUgdHJhbnNpdGlvbiBAdHJhbnMsIGV4dHJhY3QgdGhlIGN1cnJlbnQgI0dzdFN0YXRlLgotICovCi0jZGVmaW5lIEdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQodHJhbnMpICAgICAoKEdzdFN0YXRlKSgodHJhbnMpPj4zKSkKLS8qKgotICogR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVDoKLSAqIEB0cmFuczogQSAjR3N0U3RhdGVDaGFuZ2UKLSAqCi0gKiBHaXZlbiBhIHN0YXRlIHRyYW5zaXRpb24gQHRyYW5zLCBleHRyYWN0IHRoZSBuZXh0ICNHc3RTdGF0ZS4KLSAqLwotI2RlZmluZSBHU1RfU1RBVEVfVFJBTlNJVElPTl9ORVhUKHRyYW5zKSAgICAgICAgKChHc3RTdGF0ZSkoKHRyYW5zKSYweDcpKQotCi0vKioKLSAqIEdzdFN0YXRlQ2hhbmdlOgotICogQEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWSAgICA6IHN0YXRlIGNoYW5nZSBmcm9tIE5VTEwgdG8gUkVBRFkuCi0gKiA8aXRlbWl6ZWRsaXN0PgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgVGhlIGVsZW1lbnQgbXVzdCBjaGVjayBpZiB0aGUgcmVzb3VyY2VzIGl0IG5lZWRzIGFyZSBhdmFpbGFibGUuIERldmljZQotICogICAgIHNpbmtzIGFuZCAtc291cmNlcyB0eXBpY2FsbHkgdHJ5IHRvIHByb2JlIHRoZSBkZXZpY2UgdG8gY29uc3RyYWluIHRoZWlyCi0gKiAgICAgY2Fwcy4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBUaGUgZWxlbWVudCBvcGVucyB0aGUgZGV2aWNlIChpbiBjYXNlIGZlYXR1cmUgbmVlZCB0byBiZSBwcm9iZWQpLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqIDwvaXRlbWl6ZWRsaXN0PgotICogQEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEICA6IHN0YXRlIGNoYW5nZSBmcm9tIFJFQURZIHRvIFBBVVNFRC4KLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBUaGUgZWxlbWVudCBwYWRzIGFyZSBhY3RpdmF0ZWQgaW4gb3JkZXIgdG8gcmVjZWl2ZSBkYXRhIGluIFBBVVNFRC4KLSAqICAgICBTdHJlYW1pbmcgdGhyZWFkcyBhcmUgc3RhcnRlZC4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBTb21lIGVsZW1lbnRzIG1pZ2h0IG5lZWQgdG8gcmV0dXJuICVHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DIGFuZCBjb21wbGV0ZQotICogICAgIHRoZSBzdGF0ZSBjaGFuZ2Ugd2hlbiB0aGV5IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uLiBJdCBpcyBhIHJlcXVpcmVtZW50Ci0gKiAgICAgZm9yIHNpbmtzIHRvIHJldHVybiAlR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyBhbmQgY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZQotICogICAgIHdoZW4gdGhleSByZWNlaXZlIHRoZSBmaXJzdCBidWZmZXIgb3IgJUdTVF9FVkVOVF9FT1MgKHByZXJvbGwpLgotICogICAgIFNpbmtzIGFsc28gYmxvY2sgdGhlIGRhdGFmbG93IHdoZW4gaW4gUEFVU0VELgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIEEgcGlwZWxpbmUgcmVzZXRzIHRoZSBydW5uaW5nX3RpbWUgdG8gMC4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBMaXZlIHNvdXJjZXMgcmV0dXJuICVHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwgYW5kIGRvbid0IGdlbmVyYXRlIGRhdGEuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKiBAR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzogc3RhdGUgY2hhbmdlIGZyb20gUEFVU0VEIHRvIFBMQVlJTkcuCi0gKiA8aXRlbWl6ZWRsaXN0PgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgTW9zdCBlbGVtZW50cyBpZ25vcmUgdGhpcyBzdGF0ZSBjaGFuZ2UuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgVGhlIHBpcGVsaW5lIHNlbGVjdHMgYSAjR3N0Q2xvY2sgYW5kIGRpc3RyaWJ1dGVzIHRoaXMgdG8gYWxsIHRoZSBjaGlsZHJlbgotICogICAgIGJlZm9yZSBzZXR0aW5nIHRoZW0gdG8gUExBWUlORy4gVGhpcyBtZWFucyB0aGF0IGl0IGlzIG9ubHkgYWxsb3dlZCB0bwotICogICAgIHN5bmNocm9uaXplIG9uIHRoZSAjR3N0Q2xvY2sgaW4gdGhlIFBMQVlJTkcgc3RhdGUuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgVGhlIHBpcGVsaW5lIHVzZXMgdGhlICNHc3RDbG9jayBhbmQgdGhlIHJ1bm5pbmdfdGltZSB0byBjYWxjdWxhdGUgdGhlCi0gKiAgICAgYmFzZV90aW1lLiBUaGUgYmFzZV90aW1lIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCBjaGlsZHJlbiB3aGVuIHBlcmZvcm1pbmcKLSAqICAgICB0aGUgc3RhdGUgY2hhbmdlLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIFNpbmsgZWxlbWVudHMgc3RvcCBibG9ja2luZyBvbiB0aGUgcHJlcm9sbCBidWZmZXIgb3IgZXZlbnQgYW5kIHN0YXJ0Ci0gKiAgICAgcmVuZGVyaW5nIHRoZSBkYXRhLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIFNpbmtzIGNhbiBwb3N0ICVHU1RfTUVTU0FHRV9FT1MgaW4gdGhlIFBMQVlJTkcgc3RhdGUuIEl0IGlzIG5vdCBhbGxvd2VkCi0gKiAgICAgdG8gcG9zdCAlR1NUX01FU1NBR0VfRU9TIHdoZW4gbm90IGluIHRoZSBQTEFZSU5HIHN0YXRlLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIFdoaWxlIHN0cmVhbWluZyBpbiBQQVVTRUQgb3IgUExBWUlORyBlbGVtZW50cyBjYW4gY3JlYXRlIGFuZCByZW1vdmUKLSAqICAgICBzb21ldGltZXMgcGFkcy4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBMaXZlIHNvdXJjZXMgc3RhcnQgZ2VuZXJhdGluZyBkYXRhIGFuZCByZXR1cm4gJUdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUy4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqIEBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOiBzdGF0ZSBjaGFuZ2UgZnJvbSBQTEFZSU5HIHRvIFBBVVNFRC4KLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBNb3N0IGVsZW1lbnRzIGlnbm9yZSB0aGlzIHN0YXRlIGNoYW5nZS4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBUaGUgcGlwZWxpbmUgY2FsY3VsYXRlcyB0aGUgcnVubmluZ190aW1lIGJhc2VkIG9uIHRoZSBsYXN0IHNlbGVjdGVkCi0gKiAgICAgI0dzdENsb2NrIGFuZCB0aGUgYmFzZV90aW1lLiBJdCBzdG9yZXMgdGhpcyBpbmZvcm1hdGlvbiB0byBjb250aW51ZQotICogICAgIHBsYXliYWNrIHdoZW4gZ29pbmcgYmFjayB0byB0aGUgUExBWUlORyBzdGF0ZS4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBTaW5rcyB1bmJsb2NrIGFueSAjR3N0Q2xvY2sgd2FpdCBjYWxscy4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBXaGVuIGEgc2luayBkb2VzIG5vdCBoYXZlIGEgcGVuZGluZyBidWZmZXIgdG8gcGxheSwgaXQgcmV0dXJucwotICogICAgICVHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DIGZyb20gdGhpcyBzdGF0ZSBjaGFuZ2UgYW5kIGNvbXBsZXRlcyB0aGUgc3RhdGUKLSAqICAgICBjaGFuZ2Ugd2hlbiBpdCByZWNlaXZlcyBhIG5ldyBidWZmZXIgb3IgYW4gJUdTVF9FVkVOVF9FT1MuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgQW55IHF1ZXVlZCAlR1NUX01FU1NBR0VfRU9TIGl0ZW1zIGFyZSByZW1vdmVkIHNpbmNlIHRoZXkgd2lsbCBiZSByZXBvc3RlZAotICogICAgIHdoZW4gZ29pbmcgYmFjayB0byB0aGUgUExBWUlORyBzdGF0ZS4gVGhlIEVPUyBtZXNzYWdlcyBhcmUgcXVldWVkIGluCi0gKiAgICAgI0dzdEJpbiBjb250YWluZXJzLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIExpdmUgc291cmNlcyBzdG9wIGdlbmVyYXRpbmcgZGF0YSBhbmQgcmV0dXJuICVHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKiBAR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFkgIDogc3RhdGUgY2hhbmdlIGZyb20gUEFVU0VEIHRvIFJFQURZLgotICogPGl0ZW1pemVkbGlzdD4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIFNpbmtzIHVuYmxvY2sgYW55IHdhaXRzIGluIHRoZSBwcmVyb2xsLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIEVsZW1lbnRzIHVuYmxvY2sgYW55IHdhaXRzIG9uIGRldmljZXMKLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBDaGFpbiBvciBnZXRfcmFuZ2UgZnVuY3Rpb25zIHJldHVybiAlR1NUX0ZMT1dfRkxVU0hJTkcuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgVGhlIGVsZW1lbnQgcGFkcyBhcmUgZGVhY3RpdmF0ZWQgc28gdGhhdCBzdHJlYW1pbmcgYmVjb21lcyBpbXBvc3NpYmxlIGFuZAotICogICAgIGFsbCBzdHJlYW1pbmcgdGhyZWFkcyBhcmUgc3RvcHBlZC4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBUaGUgc2luayBmb3JnZXRzIGFsbCBuZWdvdGlhdGVkIGZvcm1hdHMKLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBFbGVtZW50cyByZW1vdmUgYWxsIHNvbWV0aW1lcyBwYWRzCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKiBAR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMICAgIDogc3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gTlVMTC4KLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBFbGVtZW50cyBjbG9zZSBkZXZpY2VzCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgRWxlbWVudHMgcmVzZXQgYW55IGludGVybmFsIHN0YXRlLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqIDwvaXRlbWl6ZWRsaXN0PgotICoKLSAqIFRoZXNlIGFyZSB0aGUgZGlmZmVyZW50IHN0YXRlIGNoYW5nZXMgYW4gZWxlbWVudCBnb2VzIHRocm91Z2guCi0gKiAlR1NUX1NUQVRFX05VTEwgJnJBcnI7ICVHU1RfU1RBVEVfUExBWUlORyBpcyBjYWxsZWQgYW4gdXB3YXJkcyBzdGF0ZSBjaGFuZ2UKLSAqIGFuZCAlR1NUX1NUQVRFX1BMQVlJTkcgJnJBcnI7ICVHU1RfU1RBVEVfTlVMTCBhIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2UuCi0gKi8KLXR5cGVkZWYgZW51bSAvKjwgZmxhZ3M9MCA+Ki8KLXsKLSAgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZICAgICAgICA9IChHU1RfU1RBVEVfTlVMTDw8MykgfCBHU1RfU1RBVEVfUkVBRFksCi0gIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEICAgICAgPSAoR1NUX1NUQVRFX1JFQURZPDwzKSB8IEdTVF9TVEFURV9QQVVTRUQsCi0gIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkcgICAgPSAoR1NUX1NUQVRFX1BBVVNFRDw8MykgfCBHU1RfU1RBVEVfUExBWUlORywKLSAgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRCAgICA9IChHU1RfU1RBVEVfUExBWUlORzw8MykgfCBHU1RfU1RBVEVfUEFVU0VELAotICBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSAgICAgID0gKEdTVF9TVEFURV9QQVVTRUQ8PDMpIHwgR1NUX1NUQVRFX1JFQURZLAotICBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEwgICAgICAgID0gKEdTVF9TVEFURV9SRUFEWTw8MykgfCBHU1RfU1RBVEVfTlVMTAotfSBHc3RTdGF0ZUNoYW5nZTsKLQotLyoqCi0gKiBHc3RFbGVtZW50RmxhZ3M6Ci0gKiBAR1NUX0VMRU1FTlRfRkxBR19MT0NLRURfU1RBVEU6IGlnbm9yZSBzdGF0ZSBjaGFuZ2VzIGZyb20gcGFyZW50Ci0gKiBAR1NUX0VMRU1FTlRfRkxBR19TSU5LOiB0aGUgZWxlbWVudCBpcyBhIHNpbmsKLSAqIEBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRTogdGhlIGVsZW1lbnQgaXMgYSBzb3VyY2UuCi0gKiBAR1NUX0VMRU1FTlRfRkxBR19QUk9WSURFX0NMT0NLOiB0aGUgZWxlbWVudCBjYW4gcHJvdmlkZSBhIGNsb2NrCi0gKiBAR1NUX0VMRU1FTlRfRkxBR19SRVFVSVJFX0NMT0NLOiB0aGUgZWxlbWVudCByZXF1aXJlcyBhIGNsb2NrCi0gKiBAR1NUX0VMRU1FTlRfRkxBR19JTkRFWEFCTEU6IHRoZSBlbGVtZW50IGNhbiB1c2UgYW4gaW5kZXgKLSAqIEBHU1RfRUxFTUVOVF9GTEFHX0xBU1Q6IG9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncwotICoKLSAqIFRoZSBzdGFuZGFyZCBmbGFncyB0aGF0IGFuIGVsZW1lbnQgbWF5IGhhdmUuCi0gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfRUxFTUVOVF9GTEFHX0xPQ0tFRF9TVEFURSAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDApLAotICBHU1RfRUxFTUVOVF9GTEFHX1NJTksgICAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDEpLAotICBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDIpLAotICBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0sgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDMpLAotICBHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0sgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDQpLAotICBHU1RfRUxFTUVOVF9GTEFHX0lOREVYQUJMRSAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDUpLAotICAvKiBwYWRkaW5nICovCi0gIEdTVF9FTEVNRU5UX0ZMQUdfTEFTVCAgICAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMTApCi19IEdzdEVsZW1lbnRGbGFnczsKLQotLyoqCi0gKiBHU1RfRUxFTUVOVF9JU19MT0NLRURfU1RBVEU6Ci0gKiBAZWxlbTogQSAjR3N0RWxlbWVudCB0byBxdWVyeQotICoKLSAqIENoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBsb2NrZWQgc3RhdGUgYW5kIHRoZXJlZm9yZSB3aWxsIGlnbm9yZSBzdGF0ZQotICogY2hhbmdlcyBmcm9tIGl0cyBwYXJlbnQgb2JqZWN0LgotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0lTX0xPQ0tFRF9TVEFURShlbGVtKSAgICAgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQoZWxlbSxHU1RfRUxFTUVOVF9GTEFHX0xPQ0tFRF9TVEFURSkpCi0KLS8qKgotICogR1NUX0VMRU1FTlRfTkFNRToKLSAqIEBlbGVtOiBBICNHc3RFbGVtZW50IHRvIHF1ZXJ5Ci0gKgotICogR2V0cyB0aGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQuIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlIGJ5IGRlZmF1bHQKLSAqIChpLmUuIHlvdSB3aWxsIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBvYmplY3QgbG9jayBpcyB0YWtlbiB5b3Vyc2VsZikuCi0gKiBJZiBpbiBkb3VidCB1c2UgZ3N0X2VsZW1lbnRfZ2V0X25hbWUoKSBpbnN0ZWFkLgotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX05BTUUoZWxlbSkgICAgICAgICAgICAgICAgICAoR1NUX09CSkVDVF9OQU1FKGVsZW0pKQotCi0vKioKLSAqIEdTVF9FTEVNRU5UX1BBUkVOVDoKLSAqIEBlbGVtOiBBICNHc3RFbGVtZW50IHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoaXMgZWxlbWVudC4gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUgYnkgZGVmYXVsdAotICogKGkuZS4geW91IHdpbGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG9iamVjdCBsb2NrIGlzIHRha2VuIHlvdXJzZWxmKS4KLSAqIElmIGluIGRvdWJ0IHVzZSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQoKSBpbnN0ZWFkLgotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX1BBUkVOVChlbGVtKSAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChHU1RfT0JKRUNUX1BBUkVOVChlbGVtKSkpCi0KLS8qKgotICogR1NUX0VMRU1FTlRfQlVTOgotICogQGVsZW06IEEgI0dzdEVsZW1lbnQgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIG1lc3NhZ2UgYnVzIG9mIHRoaXMgZWxlbWVudC4gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUgYnkgZGVmYXVsdAotICogKGkuZS4geW91IHdpbGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG9iamVjdCBsb2NrIGlzIHRha2VuIHlvdXJzZWxmKS4KLSAqIElmIGluIGRvdWJ0IHVzZSBnc3RfZWxlbWVudF9nZXRfYnVzKCkgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBHU1RfRUxFTUVOVF9CVVMoZWxlbSkgICAgICAgICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPmJ1cykKLQotLyoqCi0gKiBHU1RfRUxFTUVOVF9DTE9DSzoKLSAqIEBlbGVtOiBBICNHc3RFbGVtZW50IHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSBjbG9jayBvZiB0aGlzIGVsZW1lbnQuVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUgYnkgZGVmYXVsdAotICogKGkuZS4geW91IHdpbGwgaGF2ZSB0byBtYWtlIHN1cmUgaXQgaXMgc2FmZSB5b3Vyc2VsZikuCi0gKiBJZiBpbiBkb3VidCB1c2UgZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrKCkgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBHU1RfRUxFTUVOVF9DTE9DSyhlbGVtKSAgICAgICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPmNsb2NrKQotCi0vKioKLSAqIEdTVF9FTEVNRU5UX1BBRFM6Ci0gKiBAZWxlbTogQSAjR3N0RWxlbWVudCB0byBxdWVyeQotICoKLSAqIEdldCB0aGUgcGFkcyBvZiB0aGlzIGVsZW1lbnRzLgotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX1BBRFMoZWxlbSkgICAgICAgICAgICAgICAgICAoR1NUX0VMRU1FTlRfQ0FTVChlbGVtKS0+cGFkcykKLQotLyoqCi0gKiBHU1RfRUxFTUVOVF9TVEFSVF9USU1FOgotICogQGVsZW06IGEgI0dzdEVsZW1lbnQgdG8gcmV0dXJuIHRoZSBzdGFydCB0aW1lIGZvci4KLSAqCi0gKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIHN0YXJ0X3RpbWUgb2YgdGhlIEBlbGVtLiBUaGUgc3RhcnRfdGltZSBpcyB0aGUKLSAqIHJ1bm5pbmdfdGltZSBvZiB0aGUgcGlwZWxpbmUgd2hlbiB0aGUgZWxlbWVudCB3ZW50IHRvIFBBVVNFRC4KLSAqLwotI2RlZmluZSBHU1RfRUxFTUVOVF9TVEFSVF9USU1FKGVsZW0pICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPnN0YXJ0X3RpbWUpCi0KLUdzdFN0cnVjdHVyZSAqZ3N0X21ha2VfZWxlbWVudF9tZXNzYWdlX2RldGFpbHMgKGNvbnN0IGNoYXIgKm5hbWUsIC4uLik7Ci0jZGVmaW5lIEdTVF9FTEVNRU5UX01FU1NBR0VfTUFLRV9ERVRBSUxTKGFyZ3MpIGdzdF9tYWtlX2VsZW1lbnRfbWVzc2FnZV9kZXRhaWxzIGFyZ3MKLQotLyoqCi0gKiBHU1RfRUxFTUVOVF9GTE9XX0VSUk9SOgotICogQGVsOiAgICAgICAgICAgdGhlIGVsZW1lbnQgdGhhdCBnZW5lcmF0ZXMgdGhlIGVycm9yCi0gKiBAZmxvd19yZXR1cm46ICB0aGUgR3N0Rmxvd1JldHVybiBsZWFkaW5nIHRvIHRoYXQgRVJST1IgbWVzc2FnZQotICoKLSAqIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBlbGVtZW50cyBjYW4gdXNlIGluIGNhc2UgdGhleSBlbmNvdW50ZXJlZCBhIGZhdGFsCi0gKiBkYXRhIHByb2Nlc3NpbmcgZXJyb3IgZHVlIHRvIHdyb25nIGZsb3cgcHJvY2Vzc2luZy4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IoZWwsZmxvd19yZXR1cm4pICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdTVF9FTEVNRU5UX0VSUk9SX1dJVEhfREVUQUlMUyAoZWwsIFNUUkVBTSwgRkFJTEVELCBcCi0gICAgICAoIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIpLCBcCi0gICAgICAoInN0cmVhbWluZyBzdG9wcGVkLCByZWFzb24gJXMgKCVkKSIsIGdzdF9mbG93X2dldF9uYW1lIChmbG93X3JldHVybiksIGZsb3dfcmV0dXJuKSwgXAotICAgICAgKCJmbG93LXJldHVybiIsIEdfVFlQRV9JTlQsIGZsb3dfcmV0dXJuLCBOVUxMKSk7XAotfSBHX1NUTVRfRU5ECi0KLS8qKgotICogR1NUX0VMRU1FTlRfRVJST1JfV0lUSF9ERVRBSUxTOgotICogQGVsOiAgICAgdGhlIGVsZW1lbnQgdGhhdCBnZW5lcmF0ZXMgdGhlIGVycm9yCi0gKiBAZG9tYWluOiBsaWtlIENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTSAoc2VlICNnc3RyZWFtZXItR3N0R0Vycm9yKQotICogQGNvZGU6ICAgZXJyb3IgY29kZSBkZWZpbmVkIGZvciB0aGF0IGRvbWFpbiAoc2VlICNnc3RyZWFtZXItR3N0R0Vycm9yKQotICogQHRleHQ6ICAgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncyBlbmNsb3NlZCBpbgotICAgICAgICAgICAgcGFyZW50aGVzZXMpCi0gKiBAZGVidWc6ICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBtZXNzYWdlIChmb3JtYXQgc3RyaW5nIGFuZCBhcmdzCi0gICAgICAgICAgICBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcykKLSAqIEBhcmdzICAgIG9wdGlvbmFsIG5hbWUsIHR5cGUsIHZhbHVlIHRyaXBsZXRzLCB3aGljaCB3aWxsIGJlIHN0b3JlZAotICogICAgICAgICAgaW4gdGhlIGFzc29jaWF0ZWQgR3N0U3RydWN0dXJlLiBOVUxMIHRlcm1pbmF0b3IgcmVxdWlyZWQuCi0gKiAgICAgICAgICBNdXN0IGJlIGVuY2xvc2VkIHdpdGhpbiBwYXJlbnRoZXNlcy4KLSAqCi0gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgZWxlbWVudHMgY2FuIHVzZSBpbiBjYXNlIHRoZXkgZW5jb3VudGVyZWQgYSBmYXRhbAotICogZGF0YSBwcm9jZXNzaW5nIGVycm9yLiBUaGUgcGlwZWxpbmUgd2lsbCBwb3N0IGFuIGVycm9yIG1lc3NhZ2UgYW5kIHRoZQotICogYXBwbGljYXRpb24gd2lsbCBiZSByZXF1ZXN0ZWQgdG8gc3RvcCBmdXJ0aGVyIG1lZGlhIHByb2Nlc3NpbmcuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotI2RlZmluZSBHU1RfRUxFTUVOVF9FUlJPUl9XSVRIX0RFVEFJTFMoZWwsZG9tYWluLGNvZGUsdGV4dCxkZWJ1ZyxhcmdzKSAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnY2hhciAqX190eHQgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIHRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnY2hhciAqX19kYmcgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIGRlYnVnOyAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoX190eHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJlcnJvcjogJXMiLCBfX3R4dCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoX19kYmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJlcnJvcjogJXMiLCBfX2RiZyk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzIChHU1RfRUxFTUVOVChlbCksICAgICAgICAgICAgICAgXAotICAgIEdTVF9NRVNTQUdFX0VSUk9SLCBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgR1NUXyAjIyBkb21haW4gIyMgX0VSUk9SXyAjIyBjb2RlLCBfX3R4dCwgX19kYmcsIF9fRklMRV9fLCAgICAgICAgXAotICAgICAgR1NUX0ZVTkNUSU9OLCBfX0xJTkVfXywgR1NUX0VMRU1FTlRfTUVTU0FHRV9NQUtFX0RFVEFJTFMoYXJncykpOyAgXAotfSBHX1NUTVRfRU5ECi0KLS8qKgotICogR1NUX0VMRU1FTlRfRVJST1I6Ci0gKiBAZWw6ICAgICB0aGUgZWxlbWVudCB0aGF0IGdlbmVyYXRlcyB0aGUgZXJyb3IKLSAqIEBkb21haW46IGxpa2UgQ09SRSwgTElCUkFSWSwgUkVTT1VSQ0Ugb3IgU1RSRUFNIChzZWUgI2dzdHJlYW1lci1Hc3RHRXJyb3IpCi0gKiBAY29kZTogICBlcnJvciBjb2RlIGRlZmluZWQgZm9yIHRoYXQgZG9tYWluIChzZWUgI2dzdHJlYW1lci1Hc3RHRXJyb3IpCi0gKiBAdGV4dDogICB0aGUgbWVzc2FnZSB0byBkaXNwbGF5IChmb3JtYXQgc3RyaW5nIGFuZCBhcmdzIGVuY2xvc2VkIGluCi0gICAgICAgICAgICBwYXJlbnRoZXNlcykKLSAqIEBkZWJ1ZzogIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MKLSAgICAgICAgICAgIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzKQotICoKLSAqIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBlbGVtZW50cyBjYW4gdXNlIGluIGNhc2UgdGhleSBlbmNvdW50ZXJlZCBhIGZhdGFsCi0gKiBkYXRhIHByb2Nlc3NpbmcgZXJyb3IuIFRoZSBwaXBlbGluZSB3aWxsIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSBhbmQgdGhlCi0gKiBhcHBsaWNhdGlvbiB3aWxsIGJlIHJlcXVlc3RlZCB0byBzdG9wIGZ1cnRoZXIgbWVkaWEgcHJvY2Vzc2luZy4KLSAqLwotI2RlZmluZSBHU1RfRUxFTUVOVF9FUlJPUihlbCxkb21haW4sY29kZSx0ZXh0LGRlYnVnKSAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnY2hhciAqX190eHQgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIHRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnY2hhciAqX19kYmcgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIGRlYnVnOyAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoX190eHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJlcnJvcjogJXMiLCBfX3R4dCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoX19kYmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJlcnJvcjogJXMiLCBfX2RiZyk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwgKEdTVF9FTEVNRU5UKGVsKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9NRVNTQUdFX0VSUk9SLCBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgR1NUXyAjIyBkb21haW4gIyMgX0VSUk9SXyAjIyBjb2RlLCBfX3R4dCwgX19kYmcsIF9fRklMRV9fLCAgICAgICAgXAotICAgICAgR1NUX0ZVTkNUSU9OLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLS8qKgotICogR1NUX0VMRU1FTlRfV0FSTklOR19XSVRIX0RFVEFJTFM6Ci0gKiBAZWw6ICAgICB0aGUgZWxlbWVudCB0aGF0IGdlbmVyYXRlcyB0aGUgd2FybmluZwotICogQGRvbWFpbjogbGlrZSBDT1JFLCBMSUJSQVJZLCBSRVNPVVJDRSBvciBTVFJFQU0gKHNlZSAjZ3N0cmVhbWVyLUdzdEdFcnJvcikKLSAqIEBjb2RlOiAgIGVycm9yIGNvZGUgZGVmaW5lZCBmb3IgdGhhdCBkb21haW4gKHNlZSAjZ3N0cmVhbWVyLUdzdEdFcnJvcikKLSAqIEB0ZXh0OiAgIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MgZW5jbG9zZWQgaW4KLSAgICAgICAgICAgIHBhcmVudGhlc2VzKQotICogQGRlYnVnOiAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgbWVzc2FnZSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncwotICAgICAgICAgICAgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMpCi0gKiBAYXJncyAgICBvcHRpb25hbCBuYW1lLCB0eXBlLCB2YWx1ZSB0cmlwbGV0cywgd2hpY2ggd2lsbCBiZSBzdG9yZWQKLSAqICAgICAgICAgIGluIHRoZSBhc3NvY2lhdGVkIEdzdFN0cnVjdHVyZS4gTlVMTCB0ZXJtaW5hdG9yIHJlcXVpcmVkLgotICogICAgICAgICAgTXVzdCBiZSBlbmNsb3NlZCB3aXRoaW4gcGFyZW50aGVzZXMuCi0gKgotICogVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGVsZW1lbnRzIGNhbiB1c2UgaW4gY2FzZSB0aGV5IGVuY291bnRlcmVkIGEgbm9uLWZhdGFsCi0gKiBkYXRhIHByb2Nlc3NpbmcgcHJvYmxlbS4gVGhlIHBpcGVsaW5lIHdpbGwgcG9zdCBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgdGhlCi0gKiBhcHBsaWNhdGlvbiB3aWxsIGJlIGluZm9ybWVkLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfV0FSTklOR19XSVRIX0RFVEFJTFMoZWwsIGRvbWFpbiwgY29kZSwgdGV4dCwgZGVidWcsIGFyZ3MpXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnY2hhciAqX190eHQgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIHRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnY2hhciAqX19kYmcgPSBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmIGRlYnVnOyAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoX190eHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJ3YXJuaW5nOiAlcyIsIF9fdHh0KTsgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoX19kYmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJ3YXJuaW5nOiAlcyIsIF9fZGJnKTsgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzIChHU1RfRUxFTUVOVChlbCksICAgICAgICAgICAgICAgXAotICAgIEdTVF9NRVNTQUdFX1dBUk5JTkcsIEdTVF8gIyMgZG9tYWluICMjIF9FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF8gIyMgZG9tYWluICMjIF9FUlJPUl8gIyMgY29kZSwgX190eHQsIF9fZGJnLCBfX0ZJTEVfXywgICAgICAgICAgXAotICAgIEdTVF9GVU5DVElPTiwgX19MSU5FX18sIEdTVF9FTEVNRU5UX01FU1NBR0VfTUFLRV9ERVRBSUxTKGFyZ3MpKTsgICAgXAotfSBHX1NUTVRfRU5ECi0KLS8qKgotICogR1NUX0VMRU1FTlRfV0FSTklORzoKLSAqIEBlbDogICAgIHRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSB3YXJuaW5nCi0gKiBAZG9tYWluOiBsaWtlIENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTSAoc2VlICNnc3RyZWFtZXItR3N0R0Vycm9yKQotICogQGNvZGU6ICAgZXJyb3IgY29kZSBkZWZpbmVkIGZvciB0aGF0IGRvbWFpbiAoc2VlICNnc3RyZWFtZXItR3N0R0Vycm9yKQotICogQHRleHQ6ICAgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncyBlbmNsb3NlZCBpbgotICAgICAgICAgICAgcGFyZW50aGVzZXMpCi0gKiBAZGVidWc6ICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBtZXNzYWdlIChmb3JtYXQgc3RyaW5nIGFuZCBhcmdzCi0gICAgICAgICAgICBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcykKLSAqCi0gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgZWxlbWVudHMgY2FuIHVzZSBpbiBjYXNlIHRoZXkgZW5jb3VudGVyZWQgYSBub24tZmF0YWwKLSAqIGRhdGEgcHJvY2Vzc2luZyBwcm9ibGVtLiBUaGUgcGlwZWxpbmUgd2lsbCBwb3N0IGEgd2FybmluZyBtZXNzYWdlIGFuZCB0aGUKLSAqIGFwcGxpY2F0aW9uIHdpbGwgYmUgaW5mb3JtZWQuCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfV0FSTklORyhlbCwgZG9tYWluLCBjb2RlLCB0ZXh0LCBkZWJ1ZykgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ2NoYXIgKl9fdHh0ID0gX2dzdF9lbGVtZW50X2Vycm9yX3ByaW50ZiB0ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ2NoYXIgKl9fZGJnID0gX2dzdF9lbGVtZW50X2Vycm9yX3ByaW50ZiBkZWJ1ZzsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKF9fdHh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVsLCAid2FybmluZzogJXMiLCBfX3R4dCk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKF9fZGJnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVsLCAid2FybmluZzogJXMiLCBfX2RiZyk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsIChHU1RfRUxFTUVOVChlbCksICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfTUVTU0FHRV9XQVJOSU5HLCBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1IsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1JfICMjIGNvZGUsIF9fdHh0LCBfX2RiZywgX19GSUxFX18sICAgICAgICAgIFwKLSAgICBHU1RfRlVOQ1RJT04sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0vKioKLSAqIEdTVF9FTEVNRU5UX0lORk9fV0lUSF9ERVRBSUxTOgotICogQGVsOiAgICAgdGhlIGVsZW1lbnQgdGhhdCBnZW5lcmF0ZXMgdGhlIGluZm9ybWF0aW9uCi0gKiBAZG9tYWluOiBsaWtlIENPUkUsIExJQlJBUlksIFJFU09VUkNFIG9yIFNUUkVBTSAoc2VlICNnc3RyZWFtZXItR3N0R0Vycm9yKQotICogQGNvZGU6ICAgZXJyb3IgY29kZSBkZWZpbmVkIGZvciB0aGF0IGRvbWFpbiAoc2VlICNnc3RyZWFtZXItR3N0R0Vycm9yKQotICogQHRleHQ6ICAgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheSAoZm9ybWF0IHN0cmluZyBhbmQgYXJncyBlbmNsb3NlZCBpbgotICAgICAgICAgICAgcGFyZW50aGVzZXMpCi0gKiBAZGVidWc6ICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBtZXNzYWdlIChmb3JtYXQgc3RyaW5nIGFuZCBhcmdzCi0gICAgICAgICAgICBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcykKLSAqIEBhcmdzICAgIG9wdGlvbmFsIG5hbWUsIHR5cGUsIHZhbHVlIHRyaXBsZXRzLCB3aGljaCB3aWxsIGJlIHN0b3JlZAotICogICAgICAgICAgaW4gdGhlIGFzc29jaWF0ZWQgR3N0U3RydWN0dXJlLiBOVUxMIHRlcm1pbmF0b3IgcmVxdWlyZWQuCi0gKiAgICAgICAgICBNdXN0IGJlIGVuY2xvc2VkIHdpdGhpbiBwYXJlbnRoZXNlcy4KLSAqCi0gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgZWxlbWVudHMgY2FuIHVzZSBpbiBjYXNlIHRoZXkgd2FudCB0byBpbmZvcm0KLSAqIHRoZSBhcHBsaWNhdGlvbiBvZiBzb21ldGhpbmcgbm90ZXdvcnRoeSB0aGF0IGlzIG5vdCBhbiBlcnJvci4KLSAqIFRoZSBwaXBlbGluZSB3aWxsIHBvc3QgYSBpbmZvIG1lc3NhZ2UgYW5kIHRoZQotICogYXBwbGljYXRpb24gd2lsbCBiZSBpbmZvcm1lZC4KLSAqIE9wdGlvbmFsIG5hbWUsIHR5cGUsIHZhbHVlIHRyaXBsZXRzIG1heSBiZSBzdXBwbGllZCwgYW5kIHdpbGwgYmUgc3RvcmVkCi0gKiBpbiB0aGUgYXNzb2NpYXRlZCBHc3RTdHJ1Y3R1cmUuIE5VTEwgdGVybWluYXRvciByZXF1aXJlZC4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0lORk9fV0lUSF9ERVRBSUxTKGVsLCBkb21haW4sIGNvZGUsIHRleHQsIGRlYnVnLCBhcmdzKSAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ2NoYXIgKl9fdHh0ID0gX2dzdF9lbGVtZW50X2Vycm9yX3ByaW50ZiB0ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ2NoYXIgKl9fZGJnID0gX2dzdF9lbGVtZW50X2Vycm9yX3ByaW50ZiBkZWJ1ZzsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKF9fdHh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGVsLCAiaW5mbzogJXMiLCBfX3R4dCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKF9fZGJnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGVsLCAiaW5mbzogJXMiLCBfX2RiZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsX3dpdGhfZGV0YWlscyAoR1NUX0VMRU1FTlQoZWwpLCAgICAgICAgICAgICAgIFwKLSAgICBHU1RfTUVTU0FHRV9JTkZPLCBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1JfICMjIGNvZGUsIF9fdHh0LCBfX2RiZywgX19GSUxFX18sICAgICAgICAgIFwKLSAgICBHU1RfRlVOQ1RJT04sIF9fTElORV9fLCBHU1RfRUxFTUVOVF9NRVNTQUdFX01BS0VfREVUQUlMUyhhcmdzKSk7ICAgIFwKLX0gR19TVE1UX0VORAotCi0vKioKLSAqIEdTVF9FTEVNRU5UX0lORk86Ci0gKiBAZWw6ICAgICB0aGUgZWxlbWVudCB0aGF0IGdlbmVyYXRlcyB0aGUgaW5mb3JtYXRpb24KLSAqIEBkb21haW46IGxpa2UgQ09SRSwgTElCUkFSWSwgUkVTT1VSQ0Ugb3IgU1RSRUFNIChzZWUgI2dzdHJlYW1lci1Hc3RHRXJyb3IpCi0gKiBAY29kZTogICBlcnJvciBjb2RlIGRlZmluZWQgZm9yIHRoYXQgZG9tYWluIChzZWUgI2dzdHJlYW1lci1Hc3RHRXJyb3IpCi0gKiBAdGV4dDogICB0aGUgbWVzc2FnZSB0byBkaXNwbGF5IChmb3JtYXQgc3RyaW5nIGFuZCBhcmdzIGVuY2xvc2VkIGluCi0gICAgICAgICAgICBwYXJlbnRoZXNlcykKLSAqIEBkZWJ1ZzogIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKGZvcm1hdCBzdHJpbmcgYW5kIGFyZ3MKLSAgICAgICAgICAgIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzKQotICoKLSAqIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBlbGVtZW50cyBjYW4gdXNlIGluIGNhc2UgdGhleSB3YW50IHRvIGluZm9ybQotICogdGhlIGFwcGxpY2F0aW9uIG9mIHNvbWV0aGluZyBub3Rld29ydGh5IHRoYXQgaXMgbm90IGFuIGVycm9yLgotICogVGhlIHBpcGVsaW5lIHdpbGwgcG9zdCBhIGluZm8gbWVzc2FnZSBhbmQgdGhlCi0gKiBhcHBsaWNhdGlvbiB3aWxsIGJlIGluZm9ybWVkLgotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0lORk8oZWwsIGRvbWFpbiwgY29kZSwgdGV4dCwgZGVidWcpICAgICAgICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdjaGFyICpfX3R4dCA9IF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgdGV4dDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdjaGFyICpfX2RiZyA9IF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgZGVidWc7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChfX3R4dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR1NUX0lORk9fT0JKRUNUIChlbCwgImluZm86ICVzIiwgX190eHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChfX2RiZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR1NUX0lORk9fT0JKRUNUIChlbCwgImluZm86ICVzIiwgX19kYmcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCAoR1NUX0VMRU1FTlQoZWwpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR1NUX01FU1NBR0VfSU5GTywgR1NUXyAjIyBkb21haW4gIyMgX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR1NUXyAjIyBkb21haW4gIyMgX0VSUk9SXyAjIyBjb2RlLCBfX3R4dCwgX19kYmcsIF9fRklMRV9fLCAgICAgICAgICBcCi0gICAgR1NUX0ZVTkNUSU9OLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotLyogdGhlIHN0YXRlIGNoYW5nZSBtdXRleGVzIGFuZCBjb25kcyAqLwotLyoqCi0gKiBHU1RfU1RBVEVfR0VUX0xPQ0s6Ci0gKiBAZWxlbTogICBhICNHc3RFbGVtZW50Ci0gKgotICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzdGF0ZSBsb2NrIG9mIEBlbGVtLgotICogVGhpcyBsb2NrIGlzIHVzZWQgYnkgdGhlIGNvcmUuICBJdCBpcyB0YWtlbiB3aGlsZSBnZXR0aW5nIG9yIHNldHRpbmcKLSAqIHRoZSBzdGF0ZSwgZHVyaW5nIHN0YXRlIGNoYW5nZXMsIGFuZCB3aGlsZSBmaW5hbGl6aW5nLgotICovCi0jZGVmaW5lIEdTVF9TVEFURV9HRVRfTE9DSyhlbGVtKSAgICAgICAgICAgICAgICgmKEdTVF9FTEVNRU5UX0NBU1QoZWxlbSktPnN0YXRlX2xvY2spKQotLyoqCi0gKiBHU1RfU1RBVEVfR0VUX0NPTkQ6Ci0gKiBAZWxlbTogYSAjR3N0RWxlbWVudAotICoKLSAqIEdldCB0aGUgY29uZGl0aW9uYWwgdXNlZCB0byBzaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgYSBzdGF0ZSBjaGFuZ2UuCi0gKi8KLSNkZWZpbmUgR1NUX1NUQVRFX0dFVF9DT05EKGVsZW0pICAgICAgICAgICAgICAgKCZHU1RfRUxFTUVOVF9DQVNUKGVsZW0pLT5zdGF0ZV9jb25kKQotCi0jZGVmaW5lIEdTVF9TVEFURV9MT0NLKGVsZW0pICAgICAgICAgICAgICAgICAgIGdfcmVjX211dGV4X2xvY2soR1NUX1NUQVRFX0dFVF9MT0NLKGVsZW0pKQotI2RlZmluZSBHU1RfU1RBVEVfVFJZTE9DSyhlbGVtKSAgICAgICAgICAgICAgICBnX3JlY19tdXRleF90cnlsb2NrKEdTVF9TVEFURV9HRVRfTE9DSyhlbGVtKSkKLSNkZWZpbmUgR1NUX1NUQVRFX1VOTE9DSyhlbGVtKSAgICAgICAgICAgICAgICAgZ19yZWNfbXV0ZXhfdW5sb2NrKEdTVF9TVEFURV9HRVRfTE9DSyhlbGVtKSkKLSNkZWZpbmUgR1NUX1NUQVRFX1dBSVQoZWxlbSkgICAgICAgICAgICAgICAgICAgZ19jb25kX3dhaXQgKEdTVF9TVEFURV9HRVRfQ09ORCAoZWxlbSksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX09CSkVDVF9HRVRfTE9DSyAoZWxlbSkpCi0jZGVmaW5lIEdTVF9TVEFURV9XQUlUX1VOVElMKGVsZW0sIGVuZF90aW1lKSAgIGdfY29uZF93YWl0X3VudGlsIChHU1RfU1RBVEVfR0VUX0NPTkQgKGVsZW0pLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKGVsZW0pLCBlbmRfdGltZSkKLSNkZWZpbmUgR1NUX1NUQVRFX1NJR05BTChlbGVtKSAgICAgICAgICAgICAgICAgZ19jb25kX3NpZ25hbCAoR1NUX1NUQVRFX0dFVF9DT05EIChlbGVtKSk7Ci0jZGVmaW5lIEdTVF9TVEFURV9CUk9BRENBU1QoZWxlbSkgICAgICAgICAgICAgIGdfY29uZF9icm9hZGNhc3QgKEdTVF9TVEFURV9HRVRfQ09ORCAoZWxlbSkpOwotCi0vKioKLSAqIEdzdEVsZW1lbnQ6Ci0gKiBAc3RhdGVfbG9jazogVXNlZCB0byBzZXJpYWxpemUgZXhlY3V0aW9uIG9mIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpCi0gKiBAc3RhdGVfY29uZDogVXNlZCB0byBzaWduYWwgY29tcGxldGlvbiBvZiBhIHN0YXRlIGNoYW5nZQotICogQHN0YXRlX2Nvb2tpZTogVXNlZCB0byBkZXRlY3QgY29uY3VycmVudCBleGVjdXRpb24gb2YKLSAqIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpIGFuZCBnc3RfZWxlbWVudF9nZXRfc3RhdGUoKQotICogQHRhcmdldF9zdGF0ZTogdGhlIHRhcmdldCBzdGF0ZSBvZiBhbiBlbGVtZW50IGFzIHNldCBieSB0aGUgYXBwbGljYXRpb24KLSAqIEBjdXJyZW50X3N0YXRlOiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbGVtZW50Ci0gKiBAbmV4dF9zdGF0ZTogdGhlIG5leHQgc3RhdGUgb2YgYW4gZWxlbWVudCwgY2FuIGJlICNHU1RfU1RBVEVfVk9JRF9QRU5ESU5HIGlmCi0gKiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZS4KLSAqIEBwZW5kaW5nX3N0YXRlOiB0aGUgZmluYWwgc3RhdGUgdGhlIGVsZW1lbnQgc2hvdWxkIGdvIHRvLCBjYW4gYmUKLSAqICNHU1RfU1RBVEVfVk9JRF9QRU5ESU5HIGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlCi0gKiBAbGFzdF9yZXR1cm46IHRoZSBsYXN0IHJldHVybiB2YWx1ZSBvZiBhbiBlbGVtZW50IHN0YXRlIGNoYW5nZQotICogQGJ1czogdGhlIGJ1cyBvZiB0aGUgZWxlbWVudC4gVGhpcyBidXMgaXMgcHJvdmlkZWQgdG8gdGhlIGVsZW1lbnQgYnkgdGhlCi0gKiBwYXJlbnQgZWxlbWVudCBvciB0aGUgYXBwbGljYXRpb24uIEEgI0dzdFBpcGVsaW5lIGhhcyBhIGJ1cyBvZiBpdHMgb3duLgotICogQGNsb2NrOiB0aGUgY2xvY2sgb2YgdGhlIGVsZW1lbnQuIFRoaXMgY2xvY2sgaXMgdXN1YWxseSBwcm92aWRlZCB0byB0aGUKLSAqIGVsZW1lbnQgYnkgdGhlIHRvcGxldmVsICNHc3RQaXBlbGluZS4KLSAqIEBiYXNlX3RpbWU6IHRoZSB0aW1lIG9mIHRoZSBjbG9jayByaWdodCBiZWZvcmUgdGhlIGVsZW1lbnQgaXMgc2V0IHRvCi0gKiBQTEFZSU5HLiBTdWJ0cmFjdGluZyBAYmFzZV90aW1lIGZyb20gdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBpbiB0aGUgUExBWUlORwotICogc3RhdGUgd2lsbCB5aWVsZCB0aGUgcnVubmluZ190aW1lIGFnYWluc3QgdGhlIGNsb2NrLgotICogQHN0YXJ0X3RpbWU6IHRoZSBydW5uaW5nX3RpbWUgb2YgdGhlIGxhc3QgUEFVU0VEIHN0YXRlCi0gKiBAbnVtcGFkczogbnVtYmVyIG9mIHBhZHMgb2YgdGhlIGVsZW1lbnQsIGluY2x1ZGVzIGJvdGggc291cmNlIGFuZCBzaW5rIHBhZHMuCi0gKiBAcGFkczogKGVsZW1lbnQtdHlwZSBHc3QuUGFkKTogbGlzdCBvZiBwYWRzCi0gKiBAbnVtc3JjcGFkczogbnVtYmVyIG9mIHNvdXJjZSBwYWRzIG9mIHRoZSBlbGVtZW50LgotICogQHNyY3BhZHM6IChlbGVtZW50LXR5cGUgR3N0LlBhZCk6IGxpc3Qgb2Ygc291cmNlIHBhZHMKLSAqIEBudW1zaW5rcGFkczogbnVtYmVyIG9mIHNpbmsgcGFkcyBvZiB0aGUgZWxlbWVudC4KLSAqIEBzaW5rcGFkczogKGVsZW1lbnQtdHlwZSBHc3QuUGFkKTogbGlzdCBvZiBzaW5rIHBhZHMKLSAqIEBwYWRzX2Nvb2tpZTogdXBkYXRlZCB3aGVuZXZlciB0aGUgYSBwYWQgaXMgYWRkZWQgb3IgcmVtb3ZlZAotICoKLSAqIEdTdHJlYW1lciBlbGVtZW50IGFic3RyYWN0IGJhc2UgY2xhc3MuCi0gKi8KLXN0cnVjdCBfR3N0RWxlbWVudAotewotICBHc3RPYmplY3QgICAgICAgICAgICAgb2JqZWN0OwotCi0gIC8qPCBwdWJsaWMgPiovIC8qIHdpdGggTE9DSyAqLwotICBHUmVjTXV0ZXggICAgICAgICAgICAgc3RhdGVfbG9jazsKLQotICAvKiBlbGVtZW50IHN0YXRlICovCi0gIEdDb25kICAgICAgICAgICAgICAgICBzdGF0ZV9jb25kOwotICBndWludDMyICAgICAgICAgICAgICAgc3RhdGVfY29va2llOwotICBHc3RTdGF0ZSAgICAgICAgICAgICAgdGFyZ2V0X3N0YXRlOwotICBHc3RTdGF0ZSAgICAgICAgICAgICAgY3VycmVudF9zdGF0ZTsKLSAgR3N0U3RhdGUgICAgICAgICAgICAgIG5leHRfc3RhdGU7Ci0gIEdzdFN0YXRlICAgICAgICAgICAgICBwZW5kaW5nX3N0YXRlOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiAgbGFzdF9yZXR1cm47Ci0KLSAgR3N0QnVzICAgICAgICAgICAgICAgKmJ1czsKLQotICAvKiBhbGxvY2F0ZWQgY2xvY2sgKi8KLSAgR3N0Q2xvY2sgICAgICAgICAgICAgKmNsb2NrOwotICBHc3RDbG9ja1RpbWVEaWZmICAgICAgYmFzZV90aW1lOyAvKiBOVUxML1JFQURZOiAwIC0gUEFVU0VEOiBjdXJyZW50IHRpbWUgLSBQTEFZSU5HOiBkaWZmZXJlbmNlIHRvIGNsb2NrICovCi0gIEdzdENsb2NrVGltZSAgICAgICAgICBzdGFydF90aW1lOwotCi0gIC8qIGVsZW1lbnQgcGFkcywgdGhlc2UgbGlzdHMgY2FuIG9ubHkgYmUgaXRlcmF0ZWQgd2hpbGUgaG9sZGluZwotICAgKiB0aGUgTE9DSyBvciBjaGVja2luZyB0aGUgY29va2llIGFmdGVyIGVhY2ggTE9DSy4gKi8KLSAgZ3VpbnQxNiAgICAgICAgICAgICAgIG51bXBhZHM7Ci0gIEdMaXN0ICAgICAgICAgICAgICAgICpwYWRzOwotICBndWludDE2ICAgICAgICAgICAgICAgbnVtc3JjcGFkczsKLSAgR0xpc3QgICAgICAgICAgICAgICAgKnNyY3BhZHM7Ci0gIGd1aW50MTYgICAgICAgICAgICAgICBudW1zaW5rcGFkczsKLSAgR0xpc3QgICAgICAgICAgICAgICAgKnNpbmtwYWRzOwotICBndWludDMyICAgICAgICAgICAgICAgcGFkc19jb29raWU7Ci0KLSAgLyogd2l0aCBvYmplY3QgTE9DSyAqLwotICBHTGlzdCAgICAgICAgICAgICAgICAqY29udGV4dHM7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkctMV07Ci19OwotCi0vKioKLSAqIEdzdEVsZW1lbnRDbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IHRoZSBwYXJlbnQgY2xhc3Mgc3RydWN0dXJlCi0gKiBAbWV0YWRhdGE6IG1ldGFkYXRhIGZvciBlbGVtZW50cyBvZiB0aGlzIGNsYXNzCi0gKiBAZWxlbWVudGZhY3Rvcnk6IHRoZSAjR3N0RWxlbWVudEZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZXNlIGVsZW1lbnRzCi0gKiBAcGFkdGVtcGxhdGVzOiBhICNHTGlzdCBvZiAjR3N0UGFkVGVtcGxhdGUKLSAqIEBudW1wYWR0ZW1wbGF0ZXM6IHRoZSBudW1iZXIgb2YgcGFkdGVtcGxhdGVzCi0gKiBAcGFkX3RlbXBsX2Nvb2tpZTogY2hhbmdlZCB3aGVuZXZlciB0aGUgcGFkdGVtcGxhdGVzIGNoYW5nZQotICogQHJlcXVlc3RfbmV3X3BhZDogY2FsbGVkIHdoZW4gYSBuZXcgcGFkIGlzIHJlcXVlc3RlZAotICogQHJlbGVhc2VfcGFkOiBjYWxsZWQgd2hlbiBhIHJlcXVlc3QgcGFkIGlzIHRvIGJlIHJlbGVhc2VkCi0gKiBAZ2V0X3N0YXRlOiBnZXQgdGhlIHN0YXRlIG9mIHRoZSBlbGVtZW50Ci0gKiBAc2V0X3N0YXRlOiBzZXQgYSBuZXcgc3RhdGUgb24gdGhlIGVsZW1lbnQKLSAqIEBjaGFuZ2Vfc3RhdGU6IGNhbGxlZCBieSBAc2V0X3N0YXRlIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50YWwgc3RhdGUgY2hhbmdlCi0gKiBAc2V0X2J1czogc2V0IGEgI0dzdEJ1cyBvbiB0aGUgZWxlbWVudAotICogQHByb3ZpZGVfY2xvY2s6IGdldHMgdGhlICNHc3RDbG9jayBwcm92aWRlZCBieSB0aGUgZWxlbWVudAotICogQHNldF9jbG9jazogc2V0IHRoZSAjR3N0Q2xvY2sgb24gdGhlIGVsZW1lbnQKLSAqIEBzZW5kX2V2ZW50OiBzZW5kIGEgI0dzdEV2ZW50IHRvIHRoZSBlbGVtZW50Ci0gKiBAcXVlcnk6IHBlcmZvcm0gYSAjR3N0UXVlcnkgb24gdGhlIGVsZW1lbnQKLSAqIEBzdGF0ZV9jaGFuZ2VkOiBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBuZXcgc3RhdGUgd2FzIHNldC4KLSAqIEBwb3N0X21lc3NhZ2U6IGNhbGxlZCB3aGVuIGEgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGVsZW1lbnQuIENoYWluIHVwIHRvCi0gKiAgICAgICAgICAgICAgICB0aGUgcGFyZW50IGNsYXNzJyBoYW5kbGVyIHRvIGhhdmUgaXQgcG9zdGVkIG9uIHRoZSBidXMuCi0gKiBAc2V0X2NvbnRleHQ6IHNldCBhICNHc3RDb250ZXh0IG9uIHRoZSBlbGVtZW50Ci0gKgotICogR1N0cmVhbWVyIGVsZW1lbnQgY2xhc3MuIE92ZXJyaWRlIHRoZSB2bWV0aG9kcyB0byBpbXBsZW1lbnQgdGhlIGVsZW1lbnQKLSAqIGZ1bmN0aW9uYWxpdHkuCi0gKi8KLXN0cnVjdCBfR3N0RWxlbWVudENsYXNzCi17Ci0gIEdzdE9iamVjdENsYXNzICAgICAgICAgcGFyZW50X2NsYXNzOwotCi0gIC8qPCBwdWJsaWMgPiovCi0gIC8qIHRoZSBlbGVtZW50IG1ldGFkYXRhICovCi0gIGdwb2ludGVyCQkgbWV0YWRhdGE7Ci0KLSAgLyogZmFjdG9yeSB0aGF0IHRoZSBlbGVtZW50IHdhcyBjcmVhdGVkIGZyb20gKi8KLSAgR3N0RWxlbWVudEZhY3RvcnkgICAgICplbGVtZW50ZmFjdG9yeTsKLQotICAvKiB0ZW1wbGF0ZXMgZm9yIG91ciBwYWRzICovCi0gIEdMaXN0ICAgICAgICAgICAgICAgICAqcGFkdGVtcGxhdGVzOwotICBnaW50ICAgICAgICAgICAgICAgICAgIG51bXBhZHRlbXBsYXRlczsKLSAgZ3VpbnQzMiAgICAgICAgICAgICAgICBwYWRfdGVtcGxfY29va2llOwotCi0gIC8qPCBwcml2YXRlID4qLwotICAvKiBzaWduYWwgY2FsbGJhY2tzICovCi0gIHZvaWQgKCpwYWRfYWRkZWQpICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkICpwYWQpOwotICB2b2lkICgqcGFkX3JlbW92ZWQpICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKTsKLSAgdm9pZCAoKm5vX21vcmVfcGFkcykgIChHc3RFbGVtZW50ICplbGVtZW50KTsKLQotICAvKjwgcHVibGljID4qLwotICAvKiB2aXJ0dWFsIG1ldGhvZHMgZm9yIHN1YmNsYXNzZXMgKi8KLQotICAvKiByZXF1ZXN0L3JlbGVhc2UgcGFkcyAqLwotICAvKiBGSVhNRSAyLjAgaGFybW9uaXplIG5hbWluZyB3aXRoIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICovCi0gIEdzdFBhZCogICAgICAgICAgICAgICAoKnJlcXVlc3RfbmV3X3BhZCkgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKnRlbXBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBHc3RDYXBzICpjYXBzKTsKLQotICB2b2lkICAgICAgICAgICAgICAgICAgKCpyZWxlYXNlX3BhZCkgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKTsKLQotICAvKiBzdGF0ZSBjaGFuZ2VzICovCi0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuICgqZ2V0X3N0YXRlKSAgICAgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlICogc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGUgKiBwZW5kaW5nLCBHc3RDbG9ja1RpbWUgdGltZW91dCk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuICgqc2V0X3N0YXRlKSAgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0U3RhdGUgc3RhdGUpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiAoKmNoYW5nZV9zdGF0ZSkgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotICB2b2lkICAgICAgICAgICAgICAgICAoKnN0YXRlX2NoYW5nZWQpICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlIG9sZHN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0YXRlIG5ld3N0YXRlLCBHc3RTdGF0ZSBwZW5kaW5nKTsKLQotICAvKiBidXMgKi8KLSAgdm9pZCAgICAgICAgICAgICAgICAgICgqc2V0X2J1cykgICAgICAgICAgICAgIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVzICogYnVzKTsKLQotICAvKiBzZXQvZ2V0IGNsb2NrcyAqLwotICBHc3RDbG9jayogICAgICAgICAgICAgKCpwcm92aWRlX2Nsb2NrKSAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgKCpzZXRfY2xvY2spICAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdENsb2NrICpjbG9jayk7Ci0KLSAgLyogcXVlcnkgZnVuY3Rpb25zICovCi0gIGdib29sZWFuICAgICAgICAgICAgICAoKnNlbmRfZXZlbnQpICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0RXZlbnQgKmV2ZW50KTsKLQotICBnYm9vbGVhbiAgICAgICAgICAgICAgKCpxdWVyeSkgICAgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFF1ZXJ5ICpxdWVyeSk7Ci0KLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICgqcG9zdF9tZXNzYWdlKSAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RNZXNzYWdlICptZXNzYWdlKTsKLQotICB2b2lkICAgICAgICAgICAgICAgICAgKCpzZXRfY29udGV4dCkgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdENvbnRleHQgKmNvbnRleHQpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HX0xBUkdFLTJdOwotfTsKLQotLyogZWxlbWVudCBjbGFzcyBwYWQgdGVtcGxhdGVzICovCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlICAgICAgKEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MsIEdzdFBhZFRlbXBsYXRlICp0ZW1wbCk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChHc3RFbGVtZW50Q2xhc3MgKmtsYXNzLCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqc3RhdGljX3RlbXBsKTsKLQotR3N0UGFkVGVtcGxhdGUqICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAgICAgIChHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MsIGNvbnN0IGdjaGFyICpuYW1lKTsKLUdMaXN0KiAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdCAoR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzKTsKLQotLyogZWxlbWVudCBjbGFzcyBtZXRhIGRhdGEgKi8KLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAgICAgICAgICAoR3N0RWxlbWVudENsYXNzICprbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICpsb25nbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICpjbGFzc2lmaWNhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICpkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICphdXRob3IpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAgIChHc3RFbGVtZW50Q2xhc3MgKmtsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKmxvbmduYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKmNsYXNzaWZpY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKmRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKmF1dGhvcik7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfbWV0YWRhdGEgICAgICAgICAgKEdzdEVsZW1lbnRDbGFzcyAqIGtsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGtleSwgY29uc3QgZ2NoYXIgKiB2YWx1ZSk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhICAgKEdzdEVsZW1lbnRDbGFzcyAqIGtsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGtleSwgY29uc3QgZ2NoYXIgKiB2YWx1ZSk7Ci1jb25zdCBnY2hhciAqICAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfbWV0YWRhdGEgICAgICAgICAgKEdzdEVsZW1lbnRDbGFzcyAqIGtsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGtleSk7Ci0KLQotLyogZWxlbWVudCBpbnN0YW5jZSAqLwotR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7Ci0KLS8qIGJhc2ljIG5hbWUgYW5kIHBhcmVudGFnZSBzdHVmZiBmcm9tIEdzdE9iamVjdCAqLwotCi0vKioKLSAqIGdzdF9lbGVtZW50X2dldF9uYW1lOgotICogQGVsZW06IGEgI0dzdEVsZW1lbnQgdG8gZ2V0IHRoZSBuYW1lIG9mIEBlbGVtLgotICoKLSAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBuYW1lIG9mIEBlbGVtLgotICogQ2FsbGVyIHNob3VsZCBnX2ZyZWUoKSB0aGUgcmV0dXJuIHZhbHVlIGFmdGVyIHVzYWdlLgotICogRm9yIGEgbmFtZWxlc3MgZWxlbWVudCwgdGhpcyByZXR1cm5zICVOVUxMLCB3aGljaCB5b3UgY2FuIHNhZmVseSBnX2ZyZWUoKQotICogYXMgd2VsbC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdGhlIG5hbWUgb2YgQGVsZW0uIGdfZnJlZSgpCi0gKiBhZnRlciB1c2FnZS4gTVQgc2FmZS4KLSAqCi0gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9uYW1lKGVsZW0pICAgICAgZ3N0X29iamVjdF9nZXRfbmFtZShHU1RfT0JKRUNUX0NBU1QoZWxlbSkpCi0KLS8qKgotICogZ3N0X2VsZW1lbnRfc2V0X25hbWU6Ci0gKiBAZWxlbTogYSAjR3N0RWxlbWVudCB0byBzZXQgdGhlIG5hbWUgb2YuCi0gKiBAbmFtZTogdGhlIG5ldyBuYW1lCi0gKgotICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCwgZ2V0dGluZyByaWQgb2YgdGhlIG9sZCBuYW1lIGlmIHRoZXJlIHdhcyBvbmUuCi0gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9uYW1lKGVsZW0sbmFtZSkgZ3N0X29iamVjdF9zZXRfbmFtZShHU1RfT0JKRUNUX0NBU1QoZWxlbSksbmFtZSkKLQotLyoqCi0gKiBnc3RfZWxlbWVudF9nZXRfcGFyZW50OgotICogQGVsZW06IGEgI0dzdEVsZW1lbnQgdG8gZ2V0IHRoZSBwYXJlbnQgb2YuCi0gKgotICogR2V0IHRoZSBwYXJlbnQgb2YgYW4gZWxlbWVudC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBwYXJlbnQgb2YgYW4gZWxlbWVudC4KLSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChlbGVtKSAgICBnc3Rfb2JqZWN0X2dldF9wYXJlbnQoR1NUX09CSkVDVF9DQVNUKGVsZW0pKQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3NldF9wYXJlbnQ6Ci0gKiBAZWxlbTogYSAjR3N0RWxlbWVudCB0byBzZXQgdGhlIHBhcmVudCBvZi4KLSAqIEBwYXJlbnQ6IHRoZSBuZXcgcGFyZW50ICNHc3RPYmplY3Qgb2YgdGhlIGVsZW1lbnQuCi0gKgotICogU2V0cyB0aGUgcGFyZW50IG9mIGFuIGVsZW1lbnQuCi0gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9wYXJlbnQoZWxlbSxwYXJlbnQpICAgICBnc3Rfb2JqZWN0X3NldF9wYXJlbnQoR1NUX09CSkVDVF9DQVNUKGVsZW0pLHBhcmVudCkKLQotLyogY2xvY2tpbmcgKi8KLUdzdENsb2NrKiAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2sgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOwotR3N0Q2xvY2sqICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY2xvY2sgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RDbG9jayAqY2xvY2spOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2Jhc2VfdGltZSAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0Q2xvY2tUaW1lIHRpbWUpOwotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RDbG9ja1RpbWUgdGltZSk7Ci1Hc3RDbG9ja1RpbWUgICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAgICAgIChHc3RFbGVtZW50ICplbGVtZW50KTsKLQotLyogYnVzICovCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfYnVzICAgICAgICAgICAgIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVzICogYnVzKTsKLUdzdEJ1cyAqICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9idXMgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLQotLyogY29udGV4dCAqLwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENvbnRleHQgKiBjb250ZXh0KTsKLUdMaXN0ICogICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9jb250ZXh0cyAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLUdzdENvbnRleHQgKiAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9jb250ZXh0ICAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBjb25zdCBnY2hhciAqIGNvbnRleHRfdHlwZSk7Ci1Hc3RDb250ZXh0ICogICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfY29udGV4dF91bmxvY2tlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGNvbnN0IGdjaGFyICogY29udGV4dF90eXBlKTsKLQotLyogcGFkIG1hbmFnZW1lbnQgKi8KLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKTsKLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQpOwotCi1Hc3RQYWQqICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBjb25zdCBnY2hhciAqbmFtZSk7Ci1Hc3RQYWQqICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBjb25zdCBnY2hhciAqbmFtZSk7Ci1Hc3RQYWQqICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwsCi0JCQkJCQkJIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqY2Fwcyk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RQYWQgKnBhZCk7Ci0KLUdzdEl0ZXJhdG9yICogICAgICAgICAgIGdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkcyAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLUdzdEl0ZXJhdG9yICogICAgICAgICAgIGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLUdzdEl0ZXJhdG9yICogICAgICAgICAgIGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLQotLyogZXZlbnQvcXVlcnkvZm9ybWF0IHN0dWZmICovCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50ICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RFdmVudCAqZXZlbnQpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2VlayAgICAgICAgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgZ2RvdWJsZSByYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgR3N0U2Vla0ZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgZ2ludDY0IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2Vla1R5cGUgc3RvcF90eXBlLCBnaW50NjQgc3RvcCk7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9xdWVyeSAgICAgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RRdWVyeSAqcXVlcnkpOwotCi0vKiBtZXNzYWdlcyAqLwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKTsKLQotLyogZXJyb3IgaGFuZGxpbmcgKi8KLS8qIGdjYyB2ZXJzaW9ucyA8IDMuMyB3YXJuIGFib3V0IE5VTEwgYmVpbmcgcGFzc2VkIGFzIGZvcm1hdCB0byBwcmludGYgKi8KLSNpZiAoIWRlZmluZWQoX19HTlVDX18pIHx8IChfX0dOVUNfXyA8IDMpIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fIDwgMykpCi1nY2hhciAqICAgICAgICAgICAgICAgICBfZ3N0X2VsZW1lbnRfZXJyb3JfcHJpbnRmICAgICAgIChjb25zdCBnY2hhciAqZm9ybWF0LCAuLi4pOwotI2Vsc2UKLWdjaGFyICogICAgICAgICAgICAgICAgIF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgICAgICAgKGNvbnN0IGdjaGFyICpmb3JtYXQsIC4uLikgR19HTlVDX1BSSU5URiAoMSwgMik7Ci0jZW5kaWYKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X21lc3NhZ2VfZnVsbCAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RNZXNzYWdlVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1F1YXJrIGRvbWFpbiwgZ2ludCBjb2RlLCBnY2hhciAqIHRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAqIGRlYnVnLCBjb25zdCBnY2hhciAqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGZ1bmN0aW9uLCBnaW50IGxpbmUpOwotCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGxfd2l0aF9kZXRhaWxzIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0TWVzc2FnZVR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayBkb21haW4sIGdpbnQgY29kZSwgZ2NoYXIgKiB0ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKiBkZWJ1ZywgY29uc3QgZ2NoYXIgKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwgZ2ludCBsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKTsKLQotLyogc3RhdGUgbWFuYWdlbWVudCAqLwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBnYm9vbGVhbiBsb2NrZWRfc3RhdGUpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoR3N0RWxlbWVudCAqZWxlbWVudCk7Ci0KLUdzdFN0YXRlQ2hhbmdlUmV0dXJuICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAgICAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGUgKiBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0YXRlICogcGVuZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSB0aW1lb3V0KTsKLUdzdFN0YXRlQ2hhbmdlUmV0dXJuICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAgICAgICAgICAgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlIHN0YXRlKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotR3N0U3RhdGVDaGFuZ2VSZXR1cm4gICAgZ3N0X2VsZW1lbnRfY2hhbmdlX3N0YXRlICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLUdzdFN0YXRlQ2hhbmdlUmV0dXJuICAgIGdzdF9lbGVtZW50X2NvbnRpbnVlX3N0YXRlICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0KTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUgICAgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLQotdHlwZWRlZiB2b2lkICAgICAgICAgICgqR3N0RWxlbWVudENhbGxBc3luY0Z1bmMpICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgdXNlcl9kYXRhKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfY2FsbF9hc3luYyAgICAgICAgICAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50Q2FsbEFzeW5jRnVuYyBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X25vdGlmeSk7Ci0KLS8qIGZhY3RvcnkgbWFuYWdlbWVudCAqLwotR3N0RWxlbWVudEZhY3RvcnkqICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7Ci0KLS8qIHV0aWxpdHkgZnVuY3Rpb25zICovCi1ndWxvbmcgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNoIChHc3RFbGVtZW50ICAqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHByb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgIGluY2x1ZGVfdmFsdWUpOwotCi1ndWxvbmcgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2ggKEdzdEVsZW1lbnQgICogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgIGluY2x1ZGVfdmFsdWUpOwotCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1bG9uZyAgICAgICB3YXRjaF9pZCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0RWxlbWVudCwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRUxFTUVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIGIvZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYzRkYzYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4ODEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDMgQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0gKgotICogZ3N0ZWxlbWVudGZhY3RvcnkuYzogR3N0RWxlbWVudEZhY3Rvcnkgb2JqZWN0LCBzdXBwb3J0IHJvdXRpbmVzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGVsZW1lbnRmYWN0b3J5Ci0gKiBAc2hvcnRfZGVzY3JpcHRpb246IENyZWF0ZSBHc3RFbGVtZW50cyBmcm9tIGEgZmFjdG9yeQotICogQHNlZV9hbHNvOiAjR3N0RWxlbWVudCwgI0dzdFBsdWdpbiwgI0dzdFBsdWdpbkZlYXR1cmUsICNHc3RQYWRUZW1wbGF0ZS4KLSAqCi0gKiAjR3N0RWxlbWVudEZhY3RvcnkgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIGVsZW1lbnRzLiBBCi0gKiBHc3RFbGVtZW50RmFjdG9yeSBjYW4gYmUgYWRkZWQgdG8gYSAjR3N0UGx1Z2luIGFzIGl0IGlzIGFsc28gYQotICogI0dzdFBsdWdpbkZlYXR1cmUuCi0gKgotICogVXNlIHRoZSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoKSBhbmQgZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUoKQotICogZnVuY3Rpb25zIHRvIGNyZWF0ZSBlbGVtZW50IGluc3RhbmNlcyBvciB1c2UgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCkgYXMgYQotICogY29udmVuaWVudCBzaG9ydGN1dC4KLSAqCi0gKiBUaGUgZm9sbG93aW5nIGNvZGUgZXhhbXBsZSBzaG93cyB5b3UgaG93IHRvIGNyZWF0ZSBhIEdzdEZpbGVTcmMgZWxlbWVudC4KLSAqCi0gKiA8ZXhhbXBsZT4KLSAqIDx0aXRsZT5Vc2luZyBhbiBlbGVtZW50IGZhY3Rvcnk8L3RpdGxlPgotICogPHByb2dyYW1saXN0aW5nIGxhbmd1YWdlPSJjIj4KLSAqICAgI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLSAqCi0gKiAgIEdzdEVsZW1lbnQgKnNyYzsKLSAqICAgR3N0RWxlbWVudEZhY3RvcnkgKnNyY2ZhY3Rvcnk7Ci0gKgotICogICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotICoKLSAqICAgc3JjZmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoImZpbGVzcmMiKTsKLSAqICAgZ19yZXR1cm5faWZfZmFpbCAoc3JjZmFjdG9yeSAhPSBOVUxMKTsKLSAqICAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgKHNyY2ZhY3RvcnksICJzcmMiKTsKLSAqICAgZ19yZXR1cm5faWZfZmFpbCAoc3JjICE9IE5VTEwpOwotICogICAuLi4KLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L2V4YW1wbGU+Ci0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlICJnc3RlbGVtZW50LmgiCi0jaW5jbHVkZSAiZ3N0ZWxlbWVudG1ldGFkYXRhLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHVyaS5oIgotI2luY2x1ZGUgImdzdHJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiZ3N0LmgiCi0KLSNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGVsZW1lbnRfZmFjdG9yeV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBlbGVtZW50X2ZhY3RvcnlfZGVidWcKLQotc3RhdGljIHZvaWQgZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfZWxlbWVudF9mYWN0b3J5X2NsZWFudXAgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSk7Ci0KLS8qIHN0YXRpYyBndWludCBnc3RfZWxlbWVudF9mYWN0b3J5X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07ICovCi0KLS8qIHRoaXMgaXMgZGVmaW5lZCBpbiBnc3RlbGVtZW50LmMgKi8KLWV4dGVybiBHUXVhcmsgX19nc3RfZWxlbWVudGNsYXNzX2ZhY3Rvcnk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAoteyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChlbGVtZW50X2ZhY3RvcnlfZGVidWcsICJHU1RfRUxFTUVOVF9GQUNUT1JZIiwgXAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfUkVELCBcCi0gICAgICAiZWxlbWVudCBmYWN0b3JpZXMga2VlcCBpbmZvcm1hdGlvbiBhYm91dCBpbnN0YWxsZWQgZWxlbWVudHMiKTsgXAotfQotCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RWxlbWVudEZhY3RvcnksIGdzdF9lbGVtZW50X2ZhY3RvcnksCi0gICAgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X2ZhY3RvcnlfY2xhc3NfaW5pdCAoR3N0RWxlbWVudEZhY3RvcnlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X2ZhY3RvcnlfaW5pdCAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXMgPSBOVUxMOwotICBmYWN0b3J5LT5udW1wYWR0ZW1wbGF0ZXMgPSAwOwotCi0gIGZhY3RvcnktPnVyaV90eXBlID0gR1NUX1VSSV9VTktOT1dOOwotICBmYWN0b3J5LT51cmlfcHJvdG9jb2xzID0gTlVMTDsKLQotICBmYWN0b3J5LT5pbnRlcmZhY2VzID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X2ZhY3RvcnlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWSAob2JqZWN0KTsKLQotICBnc3RfZWxlbWVudF9mYWN0b3J5X2NsZWFudXAgKGZhY3RvcnkpOwotICBHX09CSkVDVF9DTEFTUyAoZ3N0X2VsZW1lbnRfZmFjdG9yeV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQ6Ci0gKiBAbmFtZTogbmFtZSBvZiBmYWN0b3J5IHRvIGZpbmQKLSAqCi0gKiBTZWFyY2ggZm9yIGFuIGVsZW1lbnQgZmFjdG9yeSBvZiB0aGUgZ2l2ZW4gbmFtZS4gUmVmcyB0aGUgcmV0dXJuZWQKLSAqIGVsZW1lbnQgZmFjdG9yeTsgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6ICNHc3RFbGVtZW50RmFjdG9yeSBpZiBmb3VuZCwKLSAqICVOVUxMIG90aGVyd2lzZQotICovCi1Hc3RFbGVtZW50RmFjdG9yeSAqCi1nc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKLQotICBmZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZSAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwgbmFtZSwKLSAgICAgIEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSk7Ci0gIGlmIChmZWF0dXJlKQotICAgIHJldHVybiBHU1RfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKTsKLQotICAvKiB0aGlzIGlzbid0IGFuIGVycm9yLCBmb3IgaW5zdGFuY2Ugd2hlbiB5b3UgcXVlcnkgaWYgYW4gZWxlbWVudCBmYWN0b3J5IGlzCi0gICAqIHByZXNlbnQgKi8KLSAgR1NUX0xPRyAoIm5vIHN1Y2ggZWxlbWVudCBmYWN0b3J5IFwiJXNcIiIsIG5hbWUpOwotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lbGVtZW50X2ZhY3RvcnlfY2xlYW51cCAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBHTGlzdCAqaXRlbTsKLQotICBpZiAoZmFjdG9yeS0+bWV0YWRhdGEpIHsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKChHc3RTdHJ1Y3R1cmUgKikgZmFjdG9yeS0+bWV0YWRhdGEpOwotICAgIGZhY3RvcnktPm1ldGFkYXRhID0gTlVMTDsKLSAgfQotICBpZiAoZmFjdG9yeS0+dHlwZSkgewotICAgIGZhY3RvcnktPnR5cGUgPSBHX1RZUEVfSU5WQUxJRDsKLSAgfQotCi0gIGZvciAoaXRlbSA9IGZhY3RvcnktPnN0YXRpY3BhZHRlbXBsYXRlczsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpIHsKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGwgPSBpdGVtLT5kYXRhOwotCi0gICAgZ3N0X3N0YXRpY19jYXBzX2NsZWFudXAgKCZ0ZW1wbC0+c3RhdGljX2NhcHMpOwotICAgIGdfc2xpY2VfZnJlZSAoR3N0U3RhdGljUGFkVGVtcGxhdGUsIHRlbXBsKTsKLSAgfQotICBnX2xpc3RfZnJlZSAoZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzKTsKLSAgZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzID0gTlVMTDsKLSAgZmFjdG9yeS0+bnVtcGFkdGVtcGxhdGVzID0gMDsKLSAgZmFjdG9yeS0+dXJpX3R5cGUgPSBHU1RfVVJJX1VOS05PV047Ci0gIGlmIChmYWN0b3J5LT51cmlfcHJvdG9jb2xzKSB7Ci0gICAgZ19zdHJmcmVldiAoZmFjdG9yeS0+dXJpX3Byb3RvY29scyk7Ci0gICAgZmFjdG9yeS0+dXJpX3Byb3RvY29scyA9IE5VTEw7Ci0gIH0KLQotICBnX2xpc3RfZnJlZSAoZmFjdG9yeS0+aW50ZXJmYWNlcyk7Ci0gIGZhY3RvcnktPmludGVyZmFjZXMgPSBOVUxMOwotfQotCi0jZGVmaW5lIENIRUNLX01FVEFEQVRBX0ZJRUxEKGtsYXNzLCBuYW1lLCBrZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjb25zdCBnY2hhciAqbWV0YWZpZWxkID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhIChrbGFzcywga2V5KTsgICAgICBcCi0gICAgaWYgKEdfVU5MSUtFTFkgKG1ldGFmaWVsZCA9PSBOVUxMIHx8ICptZXRhZmllbGQgPT0gJ1wwJykpIHsgICAgICAgICAgICAgICAgXAotICAgICAgZ193YXJuaW5nICgiRWxlbWVudCBmYWN0b3J5IG1ldGFkYXRhIGZvciAnJXMnIGhhcyBubyB2YWxpZCAlcyBmaWVsZCIsIG5hbWUsIGtleSk7ICAgIFwKLSAgICAgIGdvdG8gZGV0YWlsc2Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSBcCi0gIH0gR19TVE1UX0VORDsKLQotLyoqCi0gKiBnc3RfZWxlbWVudF9yZWdpc3RlcjoKLSAqIEBwbHVnaW46IChhbGxvdy1ub25lKTogI0dzdFBsdWdpbiB0byByZWdpc3RlciB0aGUgZWxlbWVudCB3aXRoLCBvciAlTlVMTCBmb3IKLSAqICAgICBhIHN0YXRpYyBlbGVtZW50LgotICogQG5hbWU6IG5hbWUgb2YgZWxlbWVudHMgb2YgdGhpcyB0eXBlCi0gKiBAcmFuazogcmFuayBvZiBlbGVtZW50IChoaWdoZXIgcmFuayBtZWFucyBtb3JlIGltcG9ydGFuY2Ugd2hlbiBhdXRvcGx1Z2dpbmcpCi0gKiBAdHlwZTogR1R5cGUgb2YgZWxlbWVudCB0byByZWdpc3RlcgotICoKLSAqIENyZWF0ZSBhIG5ldyBlbGVtZW50ZmFjdG9yeSBjYXBhYmxlIG9mIGluc3RhbnRpYXRpbmcgb2JqZWN0cyBvZiB0aGUKLSAqIEB0eXBlIGFuZCBhZGQgdGhlIGZhY3RvcnkgdG8gQHBsdWdpbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgdGhlIHJlZ2lzdGVyaW5nIHN1Y2NlZWRlZCwgJUZBTFNFIG9uIGVycm9yCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9yZWdpc3RlciAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBnY2hhciAqIG5hbWUsIGd1aW50IHJhbmssCi0gICAgR1R5cGUgdHlwZSkKLXsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZXhpc3RpbmdfZmVhdHVyZTsKLSAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5OwotICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKLSAgR1R5cGUgKmludGVyZmFjZXM7Ci0gIGd1aW50IG5faW50ZXJmYWNlcywgaTsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgR0xpc3QgKml0ZW07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ190eXBlX2lzX2EgKHR5cGUsIEdTVF9UWVBFX0VMRU1FTlQpLCBGQUxTRSk7Ci0KLSAgcmVnaXN0cnkgPSBnc3RfcmVnaXN0cnlfZ2V0ICgpOwotCi0gIC8qIGNoZWNrIGlmIGZlYXR1cmUgYWxyZWFkeSBleGlzdHMsIGlmIGl0IGV4aXN0cyB0aGVyZSBpcyBubyBuZWVkIHRvIHVwZGF0ZSBpdAotICAgKiB3aGVuIHRoZSByZWdpc3RyeSBpcyBnZXR0aW5nIHVwZGF0ZWQsIG91dGRhdGVkIHBsdWdpbnMgYW5kIGFsbCB0aGVpcgotICAgKiBmZWF0dXJlcyBhcmUgcmVtb3ZlZCBhbmQgcmVhZGRlZC4KLSAgICovCi0gIGV4aXN0aW5nX2ZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBuYW1lKTsKLSAgaWYgKGV4aXN0aW5nX2ZlYXR1cmUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgInVwZGF0ZSBleGlzdGluZyBmZWF0dXJlICVwICglcykiLAotICAgICAgICBleGlzdGluZ19mZWF0dXJlLCBuYW1lKTsKLSAgICBmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUIChleGlzdGluZ19mZWF0dXJlKTsKLSAgICBmYWN0b3J5LT50eXBlID0gdHlwZTsKLSAgICBleGlzdGluZ19mZWF0dXJlLT5sb2FkZWQgPSBUUlVFOwotICAgIGdfdHlwZV9zZXRfcWRhdGEgKHR5cGUsIF9fZ3N0X2VsZW1lbnRjbGFzc19mYWN0b3J5LCBmYWN0b3J5KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChleGlzdGluZ19mZWF0dXJlKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGZhY3RvcnkgPQotICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUIChnX29iamVjdF9uZXd2IChHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlksIDAsCi0gICAgICAgICAgTlVMTCkpOwotICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X25hbWUgKEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KSwgbmFtZSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChmYWN0b3J5LCAiQ3JlYXRlZCBuZXcgZWxlbWVudGZhY3RvcnkgZm9yIHR5cGUgJXMiLAotICAgICAgZ190eXBlX25hbWUgKHR5cGUpKTsKLQotICAvKiBwcm92aWRlIGluZm8gbmVlZGVkIGR1cmluZyBjbGFzcyBzdHJ1Y3R1cmUgc2V0dXAgKi8KLSAgZ190eXBlX3NldF9xZGF0YSAodHlwZSwgX19nc3RfZWxlbWVudGNsYXNzX2ZhY3RvcnksIGZhY3RvcnkpOwotICBrbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnX3R5cGVfY2xhc3NfcmVmICh0eXBlKSk7Ci0KLSAgQ0hFQ0tfTUVUQURBVEFfRklFTEQgKGtsYXNzLCBuYW1lLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9MT05HTkFNRSk7Ci0gIENIRUNLX01FVEFEQVRBX0ZJRUxEIChrbGFzcywgbmFtZSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1MpOwotICBDSEVDS19NRVRBREFUQV9GSUVMRCAoa2xhc3MsIG5hbWUsIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OKTsKLSAgQ0hFQ0tfTUVUQURBVEFfRklFTEQgKGtsYXNzLCBuYW1lLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1IpOwotCi0gIGZhY3RvcnktPnR5cGUgPSB0eXBlOwotICBmYWN0b3J5LT5tZXRhZGF0YSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoKEdzdFN0cnVjdHVyZSAqKSBrbGFzcy0+bWV0YWRhdGEpOwotCi0gIGZvciAoaXRlbSA9IGtsYXNzLT5wYWR0ZW1wbGF0ZXM7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0KSB7Ci0gICAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsID0gaXRlbS0+ZGF0YTsKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqbmV3dDsKLSAgICBnY2hhciAqY2Fwc19zdHJpbmcgPSBnc3RfY2Fwc190b19zdHJpbmcgKHRlbXBsLT5jYXBzKTsKLQotICAgIG5ld3QgPSBnX3NsaWNlX25ldyAoR3N0U3RhdGljUGFkVGVtcGxhdGUpOwotICAgIG5ld3QtPm5hbWVfdGVtcGxhdGUgPSBnX2ludGVybl9zdHJpbmcgKHRlbXBsLT5uYW1lX3RlbXBsYXRlKTsKLSAgICBuZXd0LT5kaXJlY3Rpb24gPSB0ZW1wbC0+ZGlyZWN0aW9uOwotICAgIG5ld3QtPnByZXNlbmNlID0gdGVtcGwtPnByZXNlbmNlOwotICAgIG5ld3QtPnN0YXRpY19jYXBzLmNhcHMgPSBOVUxMOwotICAgIG5ld3QtPnN0YXRpY19jYXBzLnN0cmluZyA9IGdfaW50ZXJuX3N0cmluZyAoY2Fwc19zdHJpbmcpOwotICAgIGZhY3RvcnktPnN0YXRpY3BhZHRlbXBsYXRlcyA9Ci0gICAgICAgIGdfbGlzdF9hcHBlbmQgKGZhY3RvcnktPnN0YXRpY3BhZHRlbXBsYXRlcywgbmV3dCk7Ci0KLSAgICBnX2ZyZWUgKGNhcHNfc3RyaW5nKTsKLSAgfQotICBmYWN0b3J5LT5udW1wYWR0ZW1wbGF0ZXMgPSBrbGFzcy0+bnVtcGFkdGVtcGxhdGVzOwotCi0gIC8qIHNwZWNpYWwgc3R1ZmYgZm9yIFVSSSBoYW5kbGluZyAqLwotICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdTVF9UWVBFX1VSSV9IQU5ETEVSKSkgewotICAgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKmlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKikKLSAgICAgICAgZ190eXBlX2ludGVyZmFjZV9wZWVrIChrbGFzcywgR1NUX1RZUEVfVVJJX0hBTkRMRVIpOwotCi0gICAgaWYgKCFpZmFjZSB8fCAhaWZhY2UtPmdldF90eXBlIHx8ICFpZmFjZS0+Z2V0X3Byb3RvY29scykKLSAgICAgIGdvdG8gdXJpZXJyb3I7Ci0gICAgaWYgKGlmYWNlLT5nZXRfdHlwZSkKLSAgICAgIGZhY3RvcnktPnVyaV90eXBlID0gaWZhY2UtPmdldF90eXBlIChmYWN0b3J5LT50eXBlKTsKLSAgICBpZiAoIUdTVF9VUklfVFlQRV9JU19WQUxJRCAoZmFjdG9yeS0+dXJpX3R5cGUpKQotICAgICAgZ290byB1cmllcnJvcjsKLSAgICBpZiAoaWZhY2UtPmdldF9wcm90b2NvbHMpIHsKLSAgICAgIGNvbnN0IGdjaGFyICpjb25zdCAqcHJvdG9jb2xzOwotCi0gICAgICBwcm90b2NvbHMgPSBpZmFjZS0+Z2V0X3Byb3RvY29scyAoZmFjdG9yeS0+dHlwZSk7Ci0gICAgICBmYWN0b3J5LT51cmlfcHJvdG9jb2xzID0gZ19zdHJkdXB2ICgoZ2NoYXIgKiopIHByb3RvY29scyk7Ci0gICAgfQotICAgIGlmICghZmFjdG9yeS0+dXJpX3Byb3RvY29scykKLSAgICAgIGdvdG8gdXJpZXJyb3I7Ci0gIH0KLQotICBpbnRlcmZhY2VzID0gZ190eXBlX2ludGVyZmFjZXMgKHR5cGUsICZuX2ludGVyZmFjZXMpOwotICBmb3IgKGkgPSAwOyBpIDwgbl9pbnRlcmZhY2VzOyBpKyspIHsKLSAgICBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX2ludGVyZmFjZSAoZmFjdG9yeSwgZ190eXBlX25hbWUgKGludGVyZmFjZXNbaV0pKTsKLSAgfQotICBnX2ZyZWUgKGludGVyZmFjZXMpOwotCi0gIGlmIChwbHVnaW4gJiYgcGx1Z2luLT5kZXNjLm5hbWUpIHsKLSAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbl9uYW1lID0gcGx1Z2luLT5kZXNjLm5hbWU7Ci0gICAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5wbHVnaW4gPSBwbHVnaW47Ci0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlciAoKEdPYmplY3QgKikgcGx1Z2luLAotICAgICAgICAoZ3BvaW50ZXIgKikgJiBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5wbHVnaW5fbmFtZSA9ICJOVUxMIjsKLSAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbiA9IE5VTEw7Ci0gIH0KLSAgZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9yYW5rIChHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSksIHJhbmspOwotICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPmxvYWRlZCA9IFRSVUU7Ci0KLSAgZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlIChyZWdpc3RyeSwgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXVyaWVycm9yOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmYWN0b3J5LCAiZXJyb3Igd2l0aCB1cmkgaGFuZGxlciEiKTsKLSAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2NsZWFudXAgKGZhY3RvcnkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi1kZXRhaWxzZXJyb3I6Ci0gIHsKLSAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2NsZWFudXAgKGZhY3RvcnkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlOgotICogQGZhY3Rvcnk6IGZhY3RvcnkgdG8gaW5zdGFudGlhdGUKLSAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IG5hbWUgb2YgbmV3IGVsZW1lbnQsIG9yICVOVUxMIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlCi0gKiAgICBhIHVuaXF1ZSBuYW1lCi0gKgotICogQ3JlYXRlIGEgbmV3IGVsZW1lbnQgb2YgdGhlIHR5cGUgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZWxlbWVudGZhY3RvcnkuCi0gKiBJdCB3aWxsIGJlIGdpdmVuIHRoZSBuYW1lIHN1cHBsaWVkLCBzaW5jZSBhbGwgZWxlbWVudHMgcmVxdWlyZSBhIG5hbWUgYXMKLSAqIHRoZWlyIGZpcnN0IGFyZ3VtZW50LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmbG9hdGluZykgKG51bGxhYmxlKTogbmV3ICNHc3RFbGVtZW50IG9yICVOVUxMCi0gKiAgICAgaWYgdGhlIGVsZW1lbnQgY291bGRuJ3QgYmUgY3JlYXRlZAotICovCi1Hc3RFbGVtZW50ICoKLWdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnksIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR3N0RWxlbWVudENsYXNzICpvY2xhc3M7Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICpuZXdmYWN0b3J5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmYWN0b3J5ICE9IE5VTEwsIE5VTEwpOwotCi0gIG5ld2ZhY3RvcnkgPQotICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKEdTVF9QTFVHSU5fRkVBVFVSRQotICAgICAgICAgIChmYWN0b3J5KSkpOwotCi0gIGlmIChuZXdmYWN0b3J5ID09IE5VTEwpCi0gICAgZ290byBsb2FkX2ZhaWxlZDsKLQotICBmYWN0b3J5ID0gbmV3ZmFjdG9yeTsKLQotICBpZiAobmFtZSkKLSAgICBHU1RfSU5GTyAoImNyZWF0aW5nIGVsZW1lbnQgXCIlc1wiIG5hbWVkIFwiJXNcIiIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSksIEdTVF9TVFJfTlVMTCAobmFtZSkpOwotICBlbHNlCi0gICAgR1NUX0lORk8gKCJjcmVhdGluZyBlbGVtZW50IFwiJXNcIiIsIEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSkpOwotCi0gIGlmIChmYWN0b3J5LT50eXBlID09IDApCi0gICAgZ290byBub190eXBlOwotCi0gIC8qIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgZWxlbWVudCwgY2FzdCBzbyB3ZSBkb24ndCBhc3NlcnQgb24gTlVMTAotICAgKiBhbHNvIHNldCBuYW1lIGFzIGVhcmx5IGFzIHdlIGNhbgotICAgKi8KLSAgaWYgKG5hbWUpCi0gICAgZWxlbWVudCA9Ci0gICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKGdfb2JqZWN0X25ldyAoZmFjdG9yeS0+dHlwZSwgIm5hbWUiLCBuYW1lLCBOVUxMKSk7Ci0gIGVsc2UKLSAgICBlbGVtZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAoZ19vYmplY3RfbmV3diAoZmFjdG9yeS0+dHlwZSwgMCwgTlVMTCkpOwotICBpZiAoR19VTkxJS0VMWSAoZWxlbWVudCA9PSBOVUxMKSkKLSAgICBnb3RvIG5vX2VsZW1lbnQ7Ci0KLSAgLyogZmlsbCBpbiB0aGUgcG9pbnRlciB0byB0aGUgZmFjdG9yeSBpbiB0aGUgZWxlbWVudCBjbGFzcy4gVGhlCi0gICAqIGNsYXNzIHdpbGwgbm90IGJlIHVucmVmZmVkIGN1cnJlbnRseS4KLSAgICogQmUgdGhyZWFkIHNhZmUgYXMgdGhlcmUgbWlnaHQgYmUgMiB0aHJlYWRzIGNyZWF0aW5nIHRoZSBmaXJzdCBpbnN0YW5jZSBvZgotICAgKiBhbiBlbGVtZW50IGF0IHRoZSBzYW1lIG1vbWVudAotICAgKi8KLSAgb2NsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLSAgaWYgKCFnX2F0b21pY19wb2ludGVyX2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmb2NsYXNzLT5lbGVtZW50ZmFjdG9yeSwgTlVMTCwKLSAgICAgICAgICBmYWN0b3J5KSkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLSAgZWxzZQotICAgIC8qIFRoaXMgcmVmIHdpbGwgbmV2ZXIgYmUgZHJvcHBlZCBhcyB0aGUgY2xhc3MgaXMgbmV2ZXIgZGVzdHJveWVkICovCi0gICAgR1NUX09CSkVDVF9GTEFHX1NFVCAoZmFjdG9yeSwgR1NUX09CSkVDVF9GTEFHX01BWV9CRV9MRUFLRUQpOwotCi0gIEdTVF9ERUJVRyAoImNyZWF0ZWQgZWxlbWVudCBcIiVzXCIiLCBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpKTsKLQotICByZXR1cm4gZWxlbWVudDsKLQotICAvKiBFUlJPUlMgKi8KLWxvYWRfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmYWN0b3J5LAotICAgICAgICAibG9hZGluZyBwbHVnaW4gY29udGFpbmluZyBmZWF0dXJlICVzIHJldHVybmVkIE5VTEwhIiwgbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX3R5cGU6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZhY3RvcnksICJmYWN0b3J5IGhhcyBubyB0eXBlIik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX2VsZW1lbnQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZhY3RvcnksICJjb3VsZCBub3QgY3JlYXRlIGVsZW1lbnQiKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZToKLSAqIEBmYWN0b3J5bmFtZTogYSBuYW1lZCBmYWN0b3J5IHRvIGluc3RhbnRpYXRlCi0gKiBAbmFtZTogKGFsbG93LW5vbmUpOiBuYW1lIG9mIG5ldyBlbGVtZW50LCBvciAlTlVMTCB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZQotICogICAgYSB1bmlxdWUgbmFtZQotICoKLSAqIENyZWF0ZSBhIG5ldyBlbGVtZW50IG9mIHRoZSB0eXBlIGRlZmluZWQgYnkgdGhlIGdpdmVuIGVsZW1lbnQgZmFjdG9yeS4KLSAqIElmIG5hbWUgaXMgJU5VTEwsIHRoZW4gdGhlIGVsZW1lbnQgd2lsbCByZWNlaXZlIGEgZ3VhcmFudGVlZCB1bmlxdWUgbmFtZSwKLSAqIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnQgZmFjdG9yeSBuYW1lIGFuZCBhIG51bWJlci4KLSAqIElmIG5hbWUgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgZ2l2ZW4gdGhlIG5hbWUgc3VwcGxpZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZsb2F0aW5nKSAobnVsbGFibGUpOiBuZXcgI0dzdEVsZW1lbnQgb3IgJU5VTEwKLSAqIGlmIHVuYWJsZSB0byBjcmVhdGUgZWxlbWVudAotICovCi1Hc3RFbGVtZW50ICoKLWdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoY29uc3QgZ2NoYXIgKiBmYWN0b3J5bmFtZSwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmFjdG9yeW5hbWUgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfaXNfaW5pdGlhbGl6ZWQgKCksIE5VTEwpOwotCi0gIEdTVF9MT0cgKCJnc3RlbGVtZW50ZmFjdG9yeTogbWFrZSBcIiVzXCIgXCIlc1wiIiwKLSAgICAgIGZhY3RvcnluYW1lLCBHU1RfU1RSX05VTEwgKG5hbWUpKTsKLQotICBmYWN0b3J5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kIChmYWN0b3J5bmFtZSk7Ci0gIGlmIChmYWN0b3J5ID09IE5VTEwpCi0gICAgZ290byBub19mYWN0b3J5OwotCi0gIEdTVF9MT0dfT0JKRUNUIChmYWN0b3J5LCAiZm91bmQgZmFjdG9yeSAlcCIsIGZhY3RvcnkpOwotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgKGZhY3RvcnksIG5hbWUpOwotICBpZiAoZWxlbWVudCA9PSBOVUxMKQotICAgIGdvdG8gY3JlYXRlX2ZhaWxlZDsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLQotICByZXR1cm4gZWxlbWVudDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2ZhY3Rvcnk6Ci0gIHsKLSAgICBHU1RfSU5GTyAoIm5vIHN1Y2ggZWxlbWVudCBmYWN0b3J5IFwiJXNcIiEiLCBmYWN0b3J5bmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWNyZWF0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGZhY3RvcnksICJjb3VsZG4ndCBjcmVhdGUgaW5zdGFuY2UhIik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotdm9pZAotX19nc3RfZWxlbWVudF9mYWN0b3J5X2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnksCi0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0ZW1wbCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmFjdG9yeSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAodGVtcGwgIT0gTlVMTCk7Ci0KLSAgZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGZhY3RvcnktPnN0YXRpY3BhZHRlbXBsYXRlcywgdGVtcGwpOwotICBmYWN0b3J5LT5udW1wYWR0ZW1wbGF0ZXMrKzsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGU6Ci0gKiBAZmFjdG9yeTogZmFjdG9yeSB0byBnZXQgbWFuYWdlZCAjR1R5cGUgZnJvbQotICoKLSAqIEdldCB0aGUgI0dUeXBlIGZvciBlbGVtZW50cyBtYW5hZ2VkIGJ5IHRoaXMgZmFjdG9yeS4gVGhlIHR5cGUgY2FuCi0gKiBvbmx5IGJlIHJldHJpZXZlZCBpZiB0aGUgZWxlbWVudCBmYWN0b3J5IGlzIGxvYWRlZCwgd2hpY2ggY2FuIGJlCi0gKiBhc3N1cmVkIHdpdGggZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQoKS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgI0dUeXBlIGZvciBlbGVtZW50cyBtYW5hZ2VkIGJ5IHRoaXMgZmFjdG9yeSBvciAwIGlmCi0gKiB0aGUgZmFjdG9yeSBpcyBub3QgbG9hZGVkLgotICovCi1HVHlwZQotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmYWN0b3J5KSwgMCk7Ci0KLSAgcmV0dXJuIGZhY3RvcnktPnR5cGU7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGE6Ci0gKiBAZmFjdG9yeTogYSAjR3N0RWxlbWVudEZhY3RvcnkKLSAqIEBrZXk6IGEga2V5Ci0gKgotICogR2V0IHRoZSBtZXRhZGF0YSBvbiBAZmFjdG9yeSB3aXRoIEBrZXkuCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogdGhlIG1ldGFkYXRhIHdpdGggQGtleSBvbiBAZmFjdG9yeSBvciAlTlVMTAotICogd2hlbiB0aGVyZSB3YXMgbm8gbWV0YWRhdGEgd2l0aCB0aGUgZ2l2ZW4gQGtleS4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKLSAgICBjb25zdCBnY2hhciAqIGtleSkKLXsKLSAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoKEdzdFN0cnVjdHVyZSAqKSBmYWN0b3J5LT5tZXRhZGF0YSwga2V5KTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzOgotICogQGZhY3Rvcnk6IGEgI0dzdEVsZW1lbnRGYWN0b3J5Ci0gKgotICogR2V0IHRoZSBhdmFpbGFibGUga2V5cyBmb3IgdGhlIG1ldGFkYXRhIG9uIEBmYWN0b3J5LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIHV0ZjgpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKG51bGxhYmxlKToKLSAqIGEgJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBrZXkgc3RyaW5ncywgb3IgJU5VTEwgd2hlbiB0aGVyZSBpcyBubwotICogbWV0YWRhdGEuIEZyZWUgd2l0aCBnX3N0cmZyZWV2KCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICovCi1nY2hhciAqKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGFfa2V5cyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBHc3RTdHJ1Y3R1cmUgKm1ldGFkYXRhOwotICBnY2hhciAqKmFycjsKLSAgZ2ludCBpLCBudW07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZhY3RvcnkpLCBOVUxMKTsKLQotICBtZXRhZGF0YSA9IChHc3RTdHJ1Y3R1cmUgKikgZmFjdG9yeS0+bWV0YWRhdGE7Ci0gIGlmIChtZXRhZGF0YSA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIG51bSA9IGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKG1ldGFkYXRhKTsKLSAgaWYgKG51bSA9PSAwKQotICAgIHJldHVybiBOVUxMOwotCi0gIGFyciA9IGdfbmV3IChnY2hhciAqLCBudW0gKyAxKTsKLSAgZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgYXJyW2ldID0gZ19zdHJkdXAgKGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgKG1ldGFkYXRhLCBpKSk7Ci0gIH0KLSAgYXJyW2ldID0gTlVMTDsKLSAgcmV0dXJuIGFycjsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9udW1fcGFkX3RlbXBsYXRlczoKLSAqIEBmYWN0b3J5OiBhICNHc3RFbGVtZW50RmFjdG9yeQotICoKLSAqIEdldHMgdGhlIG51bWJlciBvZiBwYWRfdGVtcGxhdGVzIGluIHRoaXMgZmFjdG9yeS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHBhZF90ZW1wbGF0ZXMKLSAqLwotZ3VpbnQKLWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X251bV9wYWRfdGVtcGxhdGVzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmYWN0b3J5KSwgMCk7Ci0KLSAgcmV0dXJuIGZhY3RvcnktPm51bXBhZHRlbXBsYXRlczsKLX0KLQotLyoqCi0gKiBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX2ludGVyZmFjZToKLSAqIEBlbGVtZW50ZmFjdG9yeTogVGhlIGVsZW1lbnRmYWN0b3J5IHRvIGFkZCB0aGUgaW50ZXJmYWNlIHRvCi0gKiBAaW50ZXJmYWNlbmFtZTogTmFtZSBvZiB0aGUgaW50ZXJmYWNlCi0gKgotICogQWRkcyB0aGUgZ2l2ZW4gaW50ZXJmYWNlbmFtZSB0byB0aGUgbGlzdCBvZiBpbXBsZW1lbnRlZCBpbnRlcmZhY2VzIG9mIHRoZQotICogZWxlbWVudC4KLSAqLwotdm9pZAotX19nc3RfZWxlbWVudF9mYWN0b3J5X2FkZF9pbnRlcmZhY2UgKEdzdEVsZW1lbnRGYWN0b3J5ICogZWxlbWVudGZhY3RvcnksCi0gICAgY29uc3QgZ2NoYXIgKiBpbnRlcmZhY2VuYW1lKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChlbGVtZW50ZmFjdG9yeSkpOwotICBnX3JldHVybl9pZl9mYWlsIChpbnRlcmZhY2VuYW1lICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChpbnRlcmZhY2VuYW1lWzBdICE9ICdcMCcpOyAgLyogbm8gZW1wdHkgc3RyaW5nICovCi0KLSAgZWxlbWVudGZhY3RvcnktPmludGVyZmFjZXMgPQotICAgICAgZ19saXN0X3ByZXBlbmQgKGVsZW1lbnRmYWN0b3J5LT5pbnRlcmZhY2VzLAotICAgICAgKGdwb2ludGVyKSBnX2ludGVybl9zdHJpbmcgKGludGVyZmFjZW5hbWUpKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlczoKLSAqIEBmYWN0b3J5OiBhICNHc3RFbGVtZW50RmFjdG9yeQotICoKLSAqIEdldHMgdGhlICNHTGlzdCBvZiAjR3N0U3RhdGljUGFkVGVtcGxhdGUgZm9yIHRoaXMgZmFjdG9yeS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKGVsZW1lbnQtdHlwZSBHc3QuU3RhdGljUGFkVGVtcGxhdGUpOiB0aGUKLSAqICAgICBzdGF0aWMgcGFkIHRlbXBsYXRlcwotICovCi1jb25zdCBHTGlzdCAqCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmFjdG9yeSksIE5VTEwpOwotCi0gIHJldHVybiBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXM7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGU6Ci0gKiBAZmFjdG9yeTogYSAjR3N0RWxlbWVudEZhY3RvcnkKLSAqCi0gKiBHZXRzIHRoZSB0eXBlIG9mIFVSSXMgdGhlIGVsZW1lbnQgc3VwcG9ydHMgb3IgI0dTVF9VUklfVU5LTk9XTiBpZiBub25lLgotICoKLSAqIFJldHVybnM6IHR5cGUgb2YgVVJJcyB0aGlzIGVsZW1lbnQgc3VwcG9ydHMKLSAqLwotR3N0VVJJVHlwZQotZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3R5cGUgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZhY3RvcnkpLCBHU1RfVVJJX1VOS05PV04pOwotCi0gIHJldHVybiBmYWN0b3J5LT51cmlfdHlwZTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzOgotICogQGZhY3Rvcnk6IGEgI0dzdEVsZW1lbnRGYWN0b3J5Ci0gKgotICogR2V0cyBhICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgcHJvdG9jb2xzIHRoaXMgZWxlbWVudCBzdXBwb3J0cyBvciAlTlVMTCBpZgotICogbm8gcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQuIFlvdSBtYXkgbm90IGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIHJldHVybmVkCi0gKiBhcnJheSwgYXMgaXQgaXMgc3RpbGwgb3duZWQgYnkgdGhlIGVsZW1lbnQgZmFjdG9yeS4gVXNlIGdfc3RyZHVwdigpIHRvCi0gKiBtYWtlIGEgY29weSBvZiB0aGUgcHJvdG9jb2wgc3RyaW5nIGFycmF5IGlmIHlvdSBuZWVkIHRvLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiB0aGUgc3VwcG9ydGVkIHByb3RvY29scwotICogICAgIG9yICVOVUxMCi0gKi8KLWNvbnN0IGdjaGFyICpjb25zdCAqCi1nc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfcHJvdG9jb2xzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmYWN0b3J5KSwgTlVMTCk7Ci0KLSAgcmV0dXJuIChjb25zdCBnY2hhciAqIGNvbnN0ICopIGZhY3RvcnktPnVyaV9wcm90b2NvbHM7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfZmFjdG9yeV9oYXNfaW50ZXJmYWNlOgotICogQGZhY3Rvcnk6IGEgI0dzdEVsZW1lbnRGYWN0b3J5Ci0gKiBAaW50ZXJmYWNlbmFtZTogYW4gaW50ZXJmYWNlIG5hbWUKLSAqCi0gKiBDaGVjayBpZiBAZmFjdG9yeSBpbXBsZW1lbnRzIHRoZSBpbnRlcmZhY2Ugd2l0aCBuYW1lIEBpbnRlcmZhY2VuYW1lLgotICoKLSAqIFJldHVybnM6ICVUUlVFIHdoZW4gQGZhY3RvcnkgaW1wbGVtZW50IHRoZSBpbnRlcmZhY2UuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9mYWN0b3J5X2hhc19pbnRlcmZhY2UgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKLSAgICBjb25zdCBnY2hhciAqIGludGVyZmFjZW5hbWUpCi17Ci0gIEdMaXN0ICp3YWxrOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmYWN0b3J5KSwgRkFMU0UpOwotCi0gIGZvciAod2FsayA9IGZhY3RvcnktPmludGVyZmFjZXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBnY2hhciAqaW5hbWUgPSAoZ2NoYXIgKikgd2Fsay0+ZGF0YTsKLQotICAgIGlmICghc3RyY21wIChpbmFtZSwgaW50ZXJmYWNlbmFtZSkpCi0gICAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSB0eXBlOwotICBHc3RSYW5rIG1pbnJhbms7Ci19IEZpbHRlckRhdGE7Ci0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfaXNfdHlwZToKLSAqIEBmYWN0b3J5OiBhICNHc3RFbGVtZW50RmFjdG9yeQotICogQHR5cGU6IGEgI0dzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUKLSAqCi0gKiBDaGVjayBpZiBAZmFjdG9yeSBpcyBvZiB0aGUgZ2l2ZW4gdHlwZXMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGZhY3RvcnkgaXMgb2YgQHR5cGUuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfaXNfdHlwZSAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LAotICAgIEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUgdHlwZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIGNvbnN0IGdjaGFyICprbGFzczsKLQotICBrbGFzcyA9Ci0gICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1MpOwotCi0gIGlmIChrbGFzcyA9PSBOVUxMKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZmFjdG9yeSwgImVsZW1lbnQgZmFjdG9yeSBpcyBtaXNzaW5nIGtsYXNzIGlkZW50aWZpZXJzIik7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIEZpbHRlciBieSBlbGVtZW50IHR5cGUgZmlyc3QsIGFzIHNvb24gYXMgaXQgbWF0Y2hlcwotICAgKiBvbmUgdHlwZSwgd2Ugc2tpcCBhbGwgb3RoZXIgdGVzdHMgKi8KLSAgaWYgKCFyZXMgJiYgKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU0lOSykpCi0gICAgcmVzID0gKHN0cnN0ciAoa2xhc3MsICJTaW5rIikgIT0gTlVMTCk7Ci0KLSAgaWYgKCFyZXMgJiYgKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU1JDKSkKLSAgICByZXMgPSAoc3Ryc3RyIChrbGFzcywgIlNvdXJjZSIpICE9IE5VTEwpOwotCi0gIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIpKQotICAgIHJlcyA9IChzdHJzdHIgKGtsYXNzLCAiRGVjb2RlciIpICE9IE5VTEwpOwotCi0gIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ09ERVIpKQotICAgIHJlcyA9IChzdHJzdHIgKGtsYXNzLCAiRW5jb2RlciIpICE9IE5VTEwpOwotCi0gIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01VWEVSKSkKLSAgICByZXMgPSAoc3Ryc3RyIChrbGFzcywgIk11eGVyIikgIT0gTlVMTCk7Ci0KLSAgaWYgKCFyZXMgJiYgKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUikpCi0gICAgcmVzID0gKHN0cnN0ciAoa2xhc3MsICJEZW11eCIpICE9IE5VTEwpOwotCi0gIC8qIEZJWE1FIDogV2UncmUgYWN0dWFsbHkgcGFyc2luZyB0d28gQ2xhc3NlcyBoZXJlLi4uICovCi0gIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1BBUlNFUikpCi0gICAgcmVzID0gKChzdHJzdHIgKGtsYXNzLCAiUGFyc2VyIikgIT0gTlVMTCkKLSAgICAgICAgJiYgKHN0cnN0ciAoa2xhc3MsICJDb2RlYyIpICE9IE5VTEwpKTsKLQotICBpZiAoIXJlcyAmJiAodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERVBBWUxPQURFUikpCi0gICAgcmVzID0gKHN0cnN0ciAoa2xhc3MsICJEZXBheWxvYWRlciIpICE9IE5VTEwpOwotCi0gIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1BBWUxPQURFUikpCi0gICAgcmVzID0gKHN0cnN0ciAoa2xhc3MsICJQYXlsb2FkZXIiKSAhPSBOVUxMKTsKLQotICBpZiAoIXJlcyAmJiAodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9GT1JNQVRURVIpKQotICAgIHJlcyA9IChzdHJzdHIgKGtsYXNzLCAiRm9ybWF0dGVyIikgIT0gTlVMTCk7Ci0KLSAgaWYgKCFyZXMgJiYgKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDUllQVE9SKSkKLSAgICByZXMgPSAoc3Ryc3RyIChrbGFzcywgIkRlY3J5cHRvciIpICE9IE5VTEwpOwotCi0gIGlmICghcmVzICYmICh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0VOQ1JZUFRPUikpCi0gICAgcmVzID0gKHN0cnN0ciAoa2xhc3MsICJFbmNyeXB0b3IiKSAhPSBOVUxMKTsKLQotICAvKiBGaWx0ZXIgYnkgbWVkaWEgdHlwZSBub3csIHdlIG9ubHkgdGVzdCBpZiBpdAotICAgKiBtYXRjaGVkIGFueSBvZiB0aGUgdHlwZXMgYWJvdmUgb3Igb25seSBjaGVja2luZyB0aGUgbWVkaWEKLSAgICogdHlwZSB3YXMgcmVxdWVzdGVkLiAqLwotICBpZiAoKHJlcyB8fCAhKHR5cGUgJiAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01BWF9FTEVNRU5UUyAtIDEpKSkKLSAgICAgICYmICh0eXBlICYgKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTyB8Ci0gICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTyB8Ci0gICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRSB8Ci0gICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRSB8Ci0gICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9NRVRBREFUQSkpKQotICAgIHJlcyA9ICgodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTykKLSAgICAgICAgJiYgKHN0cnN0ciAoa2xhc3MsICJBdWRpbyIpICE9IE5VTEwpKQotICAgICAgICB8fCAoKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8pCi0gICAgICAgICYmIChzdHJzdHIgKGtsYXNzLCAiVmlkZW8iKSAhPSBOVUxMKSkKLSAgICAgICAgfHwgKCh0eXBlICYgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFKQotICAgICAgICAmJiAoc3Ryc3RyIChrbGFzcywgIkltYWdlIikgIT0gTlVMTCkpIHx8Ci0gICAgICAgICgodHlwZSAmIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9TVUJUSVRMRSkKLSAgICAgICAgJiYgKHN0cnN0ciAoa2xhc3MsICJTdWJ0aXRsZSIpICE9IE5VTEwpKSB8fAotICAgICAgICAoKHR5cGUgJiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEEpCi0gICAgICAgICYmIChzdHJzdHIgKGtsYXNzLCAiTWV0YWRhdGEiKSAhPSBOVUxMKSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1lbGVtZW50X2ZpbHRlciAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsIEZpbHRlckRhdGEgKiBkYXRhKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgLyogd2Ugb25seSBjYXJlIGFib3V0IGVsZW1lbnQgZmFjdG9yaWVzICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXMgPSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmZWF0dXJlKSA+PSBkYXRhLT5taW5yYW5rKSAmJgotICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUgKEdTVF9FTEVNRU5UX0ZBQ1RPUllfQ0FTVCAoZmVhdHVyZSksCi0gICAgICBkYXRhLT50eXBlKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHM6Ci0gKiBAdHlwZTogYSAjR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZQotICogQG1pbnJhbms6IE1pbmltdW0gcmFuawotICoKLSAqIEdldCBhIGxpc3Qgb2YgZmFjdG9yaWVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIEB0eXBlLiBPbmx5IGVsZW1lbnRzCi0gKiB3aXRoIGEgcmFuayBncmVhdGVyIG9yIGVxdWFsIHRvIEBtaW5yYW5rIHdpbGwgYmUgcmV0dXJuZWQuCi0gKiBUaGUgbGlzdCBvZiBmYWN0b3JpZXMgaXMgcmV0dXJuZWQgYnkgZGVjcmVhc2luZyByYW5rLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoZWxlbWVudC10eXBlIEdzdC5FbGVtZW50RmFjdG9yeSk6IGEgI0dMaXN0IG9mCi0gKiAgICAgI0dzdEVsZW1lbnRGYWN0b3J5IGVsZW1lbnRzLiBVc2UgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIGFmdGVyCi0gKiAgICAgdXNhZ2UuCi0gKi8KLUdMaXN0ICoKLWdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMgKEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUgdHlwZSwKLSAgICBHc3RSYW5rIG1pbnJhbmspCi17Ci0gIEdMaXN0ICpyZXN1bHQ7Ci0gIEZpbHRlckRhdGEgZGF0YTsKLQotICAvKiBwcmVwYXJlIHR5cGUgKi8KLSAgZGF0YS50eXBlID0gdHlwZTsKLSAgZGF0YS5taW5yYW5rID0gbWlucmFuazsKLQotICAvKiBnZXQgdGhlIGZlYXR1cmUgbGlzdCB1c2luZyB0aGUgZmlsdGVyICovCi0gIHJlc3VsdCA9IGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgIChHc3RQbHVnaW5GZWF0dXJlRmlsdGVyKSBlbGVtZW50X2ZpbHRlciwgRkFMU0UsICZkYXRhKTsKLQotICAvKiBzb3J0IG9uIHJhbmsgYW5kIG5hbWUgKi8KLSAgcmVzdWx0ID0gZ19saXN0X3NvcnQgKHJlc3VsdCwgZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXI6Ci0gKiBAbGlzdDogKHRyYW5zZmVyIG5vbmUpIChlbGVtZW50LXR5cGUgR3N0LkVsZW1lbnRGYWN0b3J5KTogYSAjR0xpc3Qgb2YKLSAqICAgICAjR3N0RWxlbWVudEZhY3RvcnkgdG8gZmlsdGVyCi0gKiBAY2FwczogYSAjR3N0Q2FwcwotICogQGRpcmVjdGlvbjogYSAjR3N0UGFkRGlyZWN0aW9uIHRvIGZpbHRlciBvbgotICogQHN1YnNldG9ubHk6IHdoZXRoZXIgdG8gZmlsdGVyIG9uIGNhcHMgc3Vic2V0cyBvciBub3QuCi0gKgotICogRmlsdGVyIG91dCBhbGwgdGhlIGVsZW1lbnRmYWN0b3JpZXMgaW4gQGxpc3QgdGhhdCBjYW4gaGFuZGxlIEBjYXBzIGluCi0gKiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgotICoKLSAqIElmIEBzdWJzZXRvbmx5IGlzICVUUlVFLCB0aGVuIG9ubHkgdGhlIGVsZW1lbnRzIHdob3NlIHBhZHMgdGVtcGxhdGVzCi0gKiBhcmUgYSBjb21wbGV0ZSBzdXBlcnNldCBvZiBAY2FwcyB3aWxsIGJlIHJldHVybmVkLiBFbHNlIGFueSBlbGVtZW50Ci0gKiB3aG9zZSBwYWQgdGVtcGxhdGVzIGNhcHMgY2FuIGludGVyc2VjdCB3aXRoIEBjYXBzIHdpbGwgYmUgcmV0dXJuZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LkVsZW1lbnRGYWN0b3J5KTogYSAjR0xpc3Qgb2YKLSAqICAgICAjR3N0RWxlbWVudEZhY3RvcnkgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcmVxdWlzaXRlcy4KLSAqICAgICBVc2UgI2dzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgYWZ0ZXIgdXNhZ2UuCi0gKi8KLUdMaXN0ICoKLWdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIgKEdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBHc3RDYXBzICogY2FwcywgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgZ2Jvb2xlYW4gc3Vic2V0b25seSkKLXsKLSAgR1F1ZXVlIHJlc3VsdHMgPSBHX1FVRVVFX0lOSVQ7Ci0KLSAgR1NUX0RFQlVHICgiZmluZGluZyBmYWN0b3JpZXMiKTsKLQotICAvKiBsb29wIG92ZXIgYWxsIHRoZSBmYWN0b3JpZXMgKi8KLSAgZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7Ci0gICAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7Ci0gICAgY29uc3QgR0xpc3QgKnRlbXBsYXRlczsKLSAgICBHTGlzdCAqd2FsazsKLQotICAgIGZhY3RvcnkgPSAoR3N0RWxlbWVudEZhY3RvcnkgKikgbGlzdC0+ZGF0YTsKLQotICAgIEdTVF9ERUJVRyAoIlRyeWluZyAlcyIsCi0gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoKEdzdFBsdWdpbkZlYXR1cmUgKikgZmFjdG9yeSkpOwotCi0gICAgLyogZ2V0IHRoZSB0ZW1wbGF0ZXMgZnJvbSB0aGUgZWxlbWVudCBmYWN0b3J5ICovCi0gICAgdGVtcGxhdGVzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMgKGZhY3RvcnkpOwotICAgIGZvciAod2FsayA9IChHTGlzdCAqKSB0ZW1wbGF0ZXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbCA9IHdhbGstPmRhdGE7Ci0KLSAgICAgIC8qIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgc2luayB0ZW1wbGF0ZXMgKi8KLSAgICAgIGlmICh0ZW1wbC0+ZGlyZWN0aW9uID09IGRpcmVjdGlvbikgewotICAgICAgICBHc3RDYXBzICp0bXBsX2NhcHM7Ci0KLSAgICAgICAgLyogdHJ5IHRvIGludGVyc2VjdCB0aGUgY2FwcyB3aXRoIHRoZSBjYXBzIG9mIHRoZSB0ZW1wbGF0ZSAqLwotICAgICAgICB0bXBsX2NhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmdGVtcGwtPnN0YXRpY19jYXBzKTsKLQotICAgICAgICAvKiBGSVhNRSwgaW50ZXJzZWN0IGlzIG5vdCB0aGUgcmlnaHQgbWV0aG9kLCB3ZSBpZGVhbGx5IHdhbnQgdG8gY2hlY2sKLSAgICAgICAgICogZm9yIGEgc3Vic2V0IGhlcmUgKi8KLQotICAgICAgICAvKiBjaGVjayBpZiB0aGUgaW50ZXJzZWN0aW9uIGlzIGVtcHR5ICovCi0gICAgICAgIGlmICgoc3Vic2V0b25seSAmJiBnc3RfY2Fwc19pc19zdWJzZXQgKGNhcHMsIHRtcGxfY2FwcykpIHx8Ci0gICAgICAgICAgICAoIXN1YnNldG9ubHkgJiYgZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoY2FwcywgdG1wbF9jYXBzKSkpIHsKLSAgICAgICAgICAvKiBub24gZW1wdHkgaW50ZXJzZWN0aW9uLCB3ZSBjYW4gdXNlIHRoaXMgZWxlbWVudCAqLwotICAgICAgICAgIGdfcXVldWVfcHVzaF90YWlsICgmcmVzdWx0cywgZ3N0X29iamVjdF9yZWYgKGZhY3RvcnkpKTsKLSAgICAgICAgICBnc3RfY2Fwc191bnJlZiAodG1wbF9jYXBzKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBnc3RfY2Fwc191bnJlZiAodG1wbF9jYXBzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdHMuaGVhZDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RlbGVtZW50ZmFjdG9yeS5oIGIvZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OGYxYzcuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDAwLDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RlbGVtZW50Lmg6IEhlYWRlciBmb3IgR3N0RWxlbWVudAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9FTEVNRU5UX0ZBQ1RPUllfSF9fCi0jZGVmaW5lIF9fR1NUX0VMRU1FTlRfRkFDVE9SWV9IX18KLQotLyoqCi0gKiBHc3RFbGVtZW50RmFjdG9yeToKLSAqCi0gKiBUaGUgb3BhcXVlICNHc3RFbGVtZW50RmFjdG9yeSBkYXRhIHN0cnVjdHVyZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnRGYWN0b3J5IEdzdEVsZW1lbnRGYWN0b3J5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnRGYWN0b3J5Q2xhc3MgR3N0RWxlbWVudEZhY3RvcnlDbGFzczsKLQotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgotI2luY2x1ZGUgPGdzdC9nc3RwYWQuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmZlYXR1cmUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dXJpLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlkgICAgICAgICAgICAgICAgKGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWShvYmopICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlksXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnRGYWN0b3J5KSkKLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RWxlbWVudEZhY3RvcnlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZKSkKLSNkZWZpbmUgR1NUX0lTX0VMRU1FTlRfRkFDVE9SWV9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSkpCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfQ0FTVChvYmopICAgICAgICAgICAoKEdzdEVsZW1lbnRGYWN0b3J5ICopKG9iaikpCi0KLUdUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7Ci0KLUdzdEVsZW1lbnRGYWN0b3J5ICogICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKm5hbWUpOwotCi1HVHlwZSAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgICAgKEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5KTsKLQotY29uc3QgZ2NoYXIgKiAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgICAgICAgIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSwgY29uc3QgZ2NoYXIgKmtleSk7Ci1nY2hhciAqKiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzICAgKEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5KTsKLQotZ3VpbnQgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbnVtX3BhZF90ZW1wbGF0ZXMgKEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5KTsKLWNvbnN0IEdMaXN0ICogICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSk7Ci0KLUdzdFVSSVR5cGUgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV90eXBlICAgICAgICAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnkpOwotY29uc3QgZ2NoYXIgKiBjb25zdCAqICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdXJpX3Byb3RvY29scyAgIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZSAgICAgICAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICppbnRlcmZhY2VuYW1lKTsKLQotR3N0RWxlbWVudCogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgICAgICAgICAgICAgIChHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWUpIEdfR05VQ19NQUxMT0M7Ci1Hc3RFbGVtZW50KiAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICpmYWN0b3J5bmFtZSwgY29uc3QgZ2NoYXIgKm5hbWUpIEdfR05VQ19NQUxMT0M7Ci0KLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAoR3N0UGx1Z2luICpwbHVnaW4sIGNvbnN0IGdjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCByYW5rLCBHVHlwZSB0eXBlKTsKLQotLyogRmFjdG9yeSBsaXN0IGZ1bmN0aW9ucyAqLwotCi0vKioKLSAqIEdzdEZhY3RvcnlMaXN0VHlwZToKLSAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUjogRGVjb2RlciBlbGVtZW50cwotICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNPREVSOiBFbmNvZGVyIGVsZW1lbnRzCi0gKiBAR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTks6IFNpbmsgZWxlbWVudHMKLSAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU1JDOiBTb3VyY2UgZWxlbWVudHMKLSAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTVVYRVI6IE11eGVyIGVsZW1lbnRzCi0gKiBAR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVI6IERlbXV4ZXIgZWxlbWVudHMKLSAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFSU0VSOiBQYXJzZXIgZWxlbWVudHMKLSAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFZTE9BREVSOiBQYXlsb2FkZXIgZWxlbWVudHMKLSAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVQQVlMT0FERVI6IERlcGF5bG9hZGVyIGVsZW1lbnRzCi0gKiBAR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ1JZUFRPUjogRWxlbWVudHMgaGFuZGxpbmcgZGVjcnlwdGlvbiAoU2luY2UgMS42KQotICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNSWVBUT1I6IEVsZW1lbnRzIGhhbmRsaW5nIGVuY3J5cHRpb24gKFNpbmNlIDEuNikKLSAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUFYX0VMRU1FTlRTOiBQcml2YXRlLCBkbyBub3QgdXNlCi0gKiBAR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPOiBFbGVtZW50cyBoYW5kbGluZyB2aWRlbyBtZWRpYSB0eXBlcwotICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTzogRWxlbWVudHMgaGFuZGxpbmcgYXVkaW8gbWVkaWEgdHlwZXMKLSAqIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0U6IEVsZW1lbnRzIGhhbmRsaW5nIGltYWdlIG1lZGlhIHR5cGVzCi0gKiBAR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1NVQlRJVExFOiBFbGVtZW50cyBoYW5kbGluZyBzdWJ0aXRsZSBtZWRpYSB0eXBlcwotICogQEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9NRVRBREFUQTogRWxlbWVudHMgaGFuZGxpbmcgbWV0YWRhdGEgbWVkaWEgdHlwZXMKLSAqCi0gKiBUaGUgdHlwZSBvZiAjR3N0RWxlbWVudEZhY3RvcnkgdG8gZmlsdGVyLgotICoKLSAqIEFsbCBAR3N0RmFjdG9yeUxpc3RUeXBlIHVwIHRvIEBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUFYX0VMRU1FTlRTIGFyZSBleGNsdXNpdmUuCi0gKgotICogSWYgb25lIG9yIG1vcmUgb2YgdGhlIE1FRElBIHR5cGVzIGFyZSBzcGVjaWZpZWQsIHRoZW4gb25seSBlbGVtZW50cwotICogbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBtZWRpYSB0eXBlcyB3aWxsIGJlIHNlbGVjdGVkLgotICovCi0KLXR5cGVkZWYgZ3VpbnQ2NCBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlOwotCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgMCkKLSNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNPREVSICAgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCAxKQotI2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1NJTksgICAgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDIpCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfU1JDICAgICAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgMykKLSNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NVVhFUiAgICAgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA0KQotI2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIgICAgICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDUpCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFSU0VSICAgICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNikKLSNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9QQVlMT0FERVIgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCA3KQotI2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSICAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDgpCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRk9STUFUVEVSICAgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgOSkKLSNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNSWVBUT1IgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCAxMCkKLSNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNSWVBUT1IgICAgICAoR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCAxMSkKLQotI2RlZmluZSAgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01BWF9FTEVNRU5UUyAgIChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDQ4KQotCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8gICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNDkpCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8gICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNTApCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfSU1BR0UgICAgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNTEpCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfU1VCVElUTEUgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNTIpCi0jZGVmaW5lICBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfTUVUQURBVEEgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNTMpCi0KLS8qKgotICogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FOWTogKHZhbHVlIDU2Mjk0OTk1MzQyMTMxMSkgKHR5cGUgR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSkKLSAqCi0gKiBFbGVtZW50cyBvZiBhbnkgb2YgdGhlIGRlZmluZWQgR1NUX0VMRU1FTlRfRkFDVE9SWV9MSVNUIHR5cGVzCi0gKi8KLSNkZWZpbmUgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BTlkgKChHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDQ5KSAtIDEpCi0KLS8qKgotICogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FOWTogKHZhbHVlIDE4NDQ2NDYyNTk4NzMyODQwOTYwKSAodHlwZSBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlKQotICoKLSAqIEVsZW1lbnRzIG1hdGNoaW5nIGFueSBvZiB0aGUgZGVmaW5lZCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUEgdHlwZXMKLSAqCi0gKiBOb3RlOiBEbyBub3QgdXNlIHRoaXMgaWYgeW91IHdpc2ggdG8gbm90IGZpbHRlciBhZ2FpbnN0IGFueSBvZiB0aGUgZGVmaW5lZAotICogbWVkaWEgdHlwZXMuIElmIHlvdSB3aXNoIHRvIGRvIHRoaXMsIHNpbXBseSBkb24ndCBzcGVjaWZ5IGFueQotICogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBIGZsYWcuCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FOWSAofkdfR1VJTlQ2NF9DT05TVEFOVCAoMCkgPDwgNDgpCi0KLS8qKgotICogR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1ZJREVPX0VOQ09ERVI6ICh2YWx1ZSAyODE0NzQ5NzY3MTA2NTYyKSAodHlwZSBHc3RFbGVtZW50RmFjdG9yeUxpc3RUeXBlKQotICoKLSAqIEFsbCBlbmNvZGVycyBoYW5kbGluZyB2aWRlbyBvciBpbWFnZSBtZWRpYSB0eXBlcwotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9WSURFT19FTkNPREVSIChHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfRU5DT0RFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTyB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9JTUFHRSkKLQotLyoqCi0gKiBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfQVVESU9fRU5DT0RFUjogKHZhbHVlIDExMjU4OTk5MDY4NDI2MjYpICh0eXBlIEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUpCi0gKgotICogQWxsIGVuY29kZXJzIGhhbmRsaW5nIGF1ZGlvIG1lZGlhIHR5cGVzCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPX0VOQ09ERVIgKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9FTkNPREVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPKQotCi0vKioKLSAqIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9BVURJT1ZJREVPX1NJTktTOiAodmFsdWUgMzk0MDY0OTY3Mzk0OTE4OCkgKHR5cGUgR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSkKLSAqCi0gKiBBbGwgc2lua3MgaGFuZGxpbmcgYXVkaW8sIHZpZGVvIG9yIGltYWdlIG1lZGlhIHR5cGVzCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0FVRElPVklERU9fU0lOS1MgKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9TSU5LIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0FVRElPIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX0lNQUdFKQotCi0vKioKLSAqIEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREFCTEU6ICh2YWx1ZSAzNTMpICh0eXBlIEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUpCi0gKgotICogQWxsIGVsZW1lbnRzIHVzZWQgdG8gJ2RlY29kZScgc3RyZWFtcyAoZGVjb2RlcnMsIGRlbXV4ZXJzLCBwYXJzZXJzLCBkZXBheWxvYWRlcnMpCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09EQUJMRSBcCi0gIChHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFUEFZTE9BREVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1BBUlNFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNSWVBUT1IpCi0KLS8qIEVsZW1lbnQga2xhc3MgZGVmaW5lcyAqLwotI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFQ09ERVIgICAgICAgICAgICAgICAiRGVjb2RlciIKLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19FTkNPREVSICAgICAgICAgICAgICAgIkVuY29kZXIiCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfU0lOSyAgICAgICAgICAgICAgICAgICJTaW5rIgotI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX1NSQyAgICAgICAgICAgICAgICAgICAiU291cmNlIgotI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01VWEVSICAgICAgICAgICAgICAgICAiTXV4ZXIiCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVNVVhFUiAgICAgICAgICAgICAgICJEZW11eGVyIgotI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX1BBUlNFUiAgICAgICAgICAgICAgICAiUGFyc2VyIgotI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX1BBWUxPQURFUiAgICAgICAgICAgICAiUGF5bG9hZGVyIgotI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX0RFUEFZTE9BREVSICAgICAgICAgICAiRGVwYXlsb2FkZXIiCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfRk9STUFUVEVSICAgICAgICAgICAgICJGb3JtYXR0ZXIiCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVDUllQVE9SICAgICAgICAgICAgICJEZWNyeXB0b3IiCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfRU5DUllQVE9SICAgICAgICAgICAgICJFbmNyeXB0b3IiCi0KLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9WSURFTyAgICAgICAgICAgIlZpZGVvIgotI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01FRElBX0FVRElPICAgICAgICAgICAiQXVkaW8iCi0jZGVmaW5lIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfTUVESUFfSU1BR0UgICAgICAgICAgICJJbWFnZSIKLSNkZWZpbmUgR1NUX0VMRU1FTlRfRkFDVE9SWV9LTEFTU19NRURJQV9TVUJUSVRMRSAgICAgICAgIlN1YnRpdGxlIgotI2RlZmluZSBHU1RfRUxFTUVOVF9GQUNUT1JZX0tMQVNTX01FRElBX01FVEFEQVRBICAgICAgICAiTWV0YWRhdGEiCi0KLWdib29sZWFuICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUgICAgICAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnRGYWN0b3J5TGlzdFR5cGUgdHlwZSk7Ci0KLUdMaXN0ICogICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyAoR3N0RWxlbWVudEZhY3RvcnlMaXN0VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RSYW5rIG1pbnJhbmspIEdfR05VQ19NQUxMT0M7Ci0KLQotR0xpc3QgKiAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyICAgICAgIChHTGlzdCAqbGlzdCwgY29uc3QgR3N0Q2FwcyAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gc3Vic2V0b25seSkgR19HTlVDX01BTExPQzsKLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0RWxlbWVudEZhY3RvcnksIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0VMRU1FTlRfRkFDVE9SWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RlbGVtZW50bWV0YWRhdGEuaCBiL2dzdC9nc3RlbGVtZW50bWV0YWRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhMGMwNC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0ZWxlbWVudG1ldGFkYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDAsMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGVsZW1lbnRtZXRhZGF0YS5oOiBNZXRhZGF0YSBmb3IgR3N0RWxlbWVudCBjbGFzc2VzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9FTEVNRU5UX01FVEFEQVRBX0hfXwotI2RlZmluZSBfX0dTVF9FTEVNRU5UX01FVEFEQVRBX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qKgotICogR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUU6Ci0gKgotICogVGhlIGxvbmcgRW5nbGlzaCBuYW1lIG9mIHRoZSBlbGVtZW50LiBFLmcuICJGaWxlIFNpbmsiCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUgICAgICAibG9uZy1uYW1lIgotLyoqCi0gKiBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUzoKLSAqCi0gKiBTdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBlbGVtZW50LCBhcyBhbiB1bm9yZGVyZWQgbGlzdAotICogc2VwYXJhdGVkIHdpdGggc2xhc2hlcyAoJy8nKS4gU2VlIGRyYWZ0LWtsYXNzLnR4dCBvZiB0aGUgZGVzaWduIGRvY3MKLSAqIGZvciBtb3JlIGRldGFpbHMgYW5kIGNvbW1vbiB0eXBlcy4gRS5nOiAiU2luay9GaWxlIgotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTICAgICAgICAgImtsYXNzIgotCi0vKioKLSAqIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OOgotICoKLSAqIFNlbnRlbmNlIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGVsZW1lbnQuCi0gKiBFLmc6ICJXcml0ZSBzdHJlYW0gdG8gYSBmaWxlIgotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RFU0NSSVBUSU9OICAgImRlc2NyaXB0aW9uIgotLyoqCi0gKiBHU1RfRUxFTUVOVF9NRVRBREFUQV9BVVRIT1I6Ci0gKgotICogTmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBhdXRob3IocykuIFVzZSBcbiB0byBzZXBhcmF0ZQotICogbXVsdGlwbGUgYXV0aG9yIGRldGFpbHMuCi0gKiBFLmc6ICJKb2UgQmxvZ2dzICZsdDtqb2UuYmxvZ3MgYXQgZm9vLmNvbSZndDsiCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SICAgICAgICAiYXV0aG9yIgotCi0vKioKLSAqIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RPQ19VUkk6Ci0gKgotICogU2V0IHVyaSBwb2ludGluZyB0byB1c2VyIGRvY3VtZW50YXRpb24uIEFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoaXMgdG8gc2hvdwotICogaGVscCBmb3IgZS5nLiBlZmZlY3RzIHRvIHVzZXJzLgotICovCi0jZGVmaW5lIEdTVF9FTEVNRU5UX01FVEFEQVRBX0RPQ19VUkkgICAgICAgImRvYy11cmkiCi0vKioKLSAqIEdTVF9FTEVNRU5UX01FVEFEQVRBX0lDT05fTkFNRToKLSAqCi0gKiBFbGVtZW50cyB0aGF0IGJyaWRnZSB0byBjZXJ0YWluIG90aGVyIHByb2R1Y3RzIGNhbiBpbmNsdWRlIGFuIGljb24gb2YgdGhhdAotICogdXNlZCBwcm9kdWN0LiBBcHBsaWNhdGlvbiBjYW4gc2hvdyB0aGUgaWNvbiBpbiBtZW51cy9zZWxlY3RvcnMgdG8gaGVscAotICogaWRlbnRpZnlpbmcgc3BlY2lmaWMgZWxlbWVudHMuCi0gKi8KLSNkZWZpbmUgR1NUX0VMRU1FTlRfTUVUQURBVEFfSUNPTl9OQU1FICAgICAiaWNvbi1uYW1lIgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRUxFTUVOVF9NRVRBREFUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RlcnJvci5jIGIvZ3N0L2dzdGVycm9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMGVmNzcuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGVycm9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0ZXJyb3IKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQ2F0ZWdvcml6ZWQgZXJyb3IgbWVzc2FnZXMKLSAqIEBzZWVfYWxzbzogI0dzdE1lc3NhZ2UKLSAqCi0gKiBHU3RyZWFtZXIgZWxlbWVudHMgY2FuIHRocm93IG5vbi1mYXRhbCB3YXJuaW5ncyBhbmQgZmF0YWwgZXJyb3JzLgotICogSGlnaGVyLWxldmVsIGVsZW1lbnRzIGFuZCBhcHBsaWNhdGlvbnMgY2FuIHByb2dyYW1tYXRpY2FsbHkgZmlsdGVyCi0gKiB0aGUgb25lcyB0aGV5IGFyZSBpbnRlcmVzdGVkIGluIG9yIGNhbiByZWNvdmVyIGZyb20sCi0gKiBhbmQgaGF2ZSBhIGRlZmF1bHQgaGFuZGxlciBoYW5kbGUgdGhlIHJlc3Qgb2YgdGhlbS4KLSAqCi0gKiBUaGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24gd2lsbCB1c2UgdGhlIHRlcm0gPHF1b3RlPmVycm9yPC9xdW90ZT4KLSAqIHRvIG1lYW4gYm90aCAobm9uLWZhdGFsKSB3YXJuaW5ncyBhbmQgKGZhdGFsKSBlcnJvcnM7IHRoZXkgYXJlIHRyZWF0ZWQKLSAqIHNpbWlsYXJseS4KLSAqCi0gKiBFcnJvcnMgZnJvbSBlbGVtZW50cyBhcmUgdGhlIGNvbWJpbmF0aW9uIG9mIGEgI0dFcnJvciBhbmQgYSBkZWJ1ZyBzdHJpbmcuCi0gKiBUaGUgI0dFcnJvciBjb250YWluczoKLSAqIC0gYSBkb21haW4gdHlwZTogQ09SRSwgTElCUkFSWSwgUkVTT1VSQ0Ugb3IgU1RSRUFNCi0gKiAtIGEgY29kZTogYW4gZW51bSB2YWx1ZSBzcGVjaWZpYyB0byB0aGUgZG9tYWluCi0gKiAtIGEgdHJhbnNsYXRlZCwgaHVtYW4tcmVhZGFibGUgbWVzc2FnZQotICogLSBhIG5vbi10cmFuc2xhdGVkIGFkZGl0aW9uYWwgZGVidWcgc3RyaW5nLCB3aGljaCBhbHNvIGNvbnRhaW5zCi0gKiAtIGZpbGUgYW5kIGxpbmUgaW5mb3JtYXRpb24KLSAqCi0gKiBFbGVtZW50cyBkbyBub3QgaGF2ZSB0aGUgY29udGV4dCByZXF1aXJlZCB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoCi0gKiBlcnJvcnMuICBBcyBzdWNoLCB0aGV5IHNob3VsZCBvbmx5IGluZm9ybSBhYm91dCBlcnJvcnMsIGFuZCBzdG9wIHRoZWlyCi0gKiBwcm9jZXNzaW5nLiAgSW4gc2hvcnQsIGFuIGVsZW1lbnQgZG9lc24ndCBrbm93IHdoYXQgaXQgaXMgYmVpbmcgdXNlZCBmb3IuCi0gKgotICogSXQgaXMgdGhlIGFwcGxpY2F0aW9uIG9yIGNvbXBvdW5kIGVsZW1lbnQgdXNpbmcgdGhlIGdpdmVuIGVsZW1lbnQgdGhhdAotICogaGFzIG1vcmUgY29udGV4dCBhYm91dCB0aGUgdXNlIG9mIHRoZSBlbGVtZW50LiBFcnJvcnMgY2FuIGJlIHJlY2VpdmVkIGJ5Ci0gKiBsaXN0ZW5pbmcgdG8gdGhlICNHc3RCdXMgb2YgdGhlIGVsZW1lbnQvcGlwZWxpbmUgZm9yICNHc3RNZXNzYWdlIG9iamVjdHMgd2l0aAotICogdGhlIHR5cGUgJUdTVF9NRVNTQUdFX0VSUk9SIG9yICVHU1RfTUVTU0FHRV9XQVJOSU5HLiBUaGUgdGhyb3duIGVycm9ycyBzaG91bGQKLSAqIGJlIGluc3BlY3RlZCwgYW5kIGZpbHRlcmVkIGlmIGFwcHJvcHJpYXRlLgotICoKLSAqIEFuIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvLCBieSBkZWZhdWx0LCBwcmVzZW50IHRoZSB1c2VyIHdpdGggYQotICogZGlhbG9nIGJveCAob3IgYW4gZXF1aXZhbGVudCkgc2hvd2luZyB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZSBkaWFsb2cKLSAqIHNob3VsZCBhbHNvIGFsbG93IGEgd2F5IHRvIGdldCBhdCB0aGUgYWRkaXRpb25hbCBkZWJ1ZyBpbmZvcm1hdGlvbiwKLSAqIHNvIHRoZSB1c2VyIGNhbiBwcm92aWRlIGJ1ZyByZXBvcnRpbmcgaW5mb3JtYXRpb24uCi0gKgotICogQSBjb21wb3VuZCBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGZvcndhcmQgZXJyb3JzIGJ5IGRlZmF1bHQgaGlnaGVyIHVwCi0gKiB0aGUgaGllcmFyY2h5OyB0aGlzIGlzIGRvbmUgYnkgZGVmYXVsdCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIG90aGVyIHR5cGVzCi0gKiBvZiAjR3N0TWVzc2FnZS4KLSAqCi0gKiBXaGVuIGFwcGxpY2F0aW9ucyBvciBjb21wb3VuZCBlbGVtZW50cyB0cmlnZ2VyIGVycm9ycyB0aGF0IHRoZXkgY2FuCi0gKiByZWNvdmVyIGZyb20sIHRoZXkgY2FuIGZpbHRlciBvdXQgdGhlc2UgZXJyb3JzIGFuZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KLSAqIEZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbiB0aGF0IGdldHMgYW4gZXJyb3IgZnJvbSB4dmltYWdlc2luawotICogdGhhdCBpbmRpY2F0ZXMgYWxsIFhWaWRlbyBwb3J0cyBhcmUgdGFrZW4sIHRoZSBhcHBsaWNhdGlvbiBjYW4gYXR0ZW1wdAotICogdG8gdXNlIGFub3RoZXIgc2luayBpbnN0ZWFkLgotICoKLSAqIEVsZW1lbnRzIHRocm93IGVycm9ycyB1c2luZyB0aGUgI0dTVF9FTEVNRU5UX0VSUk9SIGNvbnZlbmllbmNlIG1hY3JvOgotICoKLSAqIDxleGFtcGxlPgotICogPHRpdGxlPlRocm93aW5nIGFuIGVycm9yPC90aXRsZT4KLSAqICAgPHByb2dyYW1saXN0aW5nPgotICogICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBOT1RfRk9VTkQsCi0gKiAgICAgICAoXygiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iKSksIChOVUxMKSk7Ci0gKiAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L2V4YW1wbGU+Ci0gKgotICogVGhpbmdzIHRvIGtlZXAgaW4gbWluZDoKLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5Eb24ndCBnbyBvZmYgaW52ZW50aW5nIG5ldyBlcnJvciBjb2Rlcy4gIFRoZSBvbmVzCi0gKiAgICAgY3VycmVudGx5IHByb3ZpZGVkIHNob3VsZCBiZSBlbm91Z2guICBJZiB5b3UgZmluZCB5b3VyIHR5cGUgb2YgZXJyb3IKLSAqICAgICBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgY29kZXMsIHlvdSBzaG91bGQgdXNlIEZBSUxFRC48L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPkRvbid0IHByb3ZpZGUgYSBtZXNzYWdlIGlmIHRoZSBkZWZhdWx0IG9uZSBzdWZmaWNlcy4KLSAqICAgICB0aGlzIGtlZXBzIG1lc3NhZ2VzIG1vcmUgdW5pZm9ybS4gIFVzZSAoJU5VTEwpIC0gbm90IGZvcmdldHRpbmcgdGhlCi0gKiAgICAgcGFyZW50aGVzZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3UgZG8gc3VwcGx5IGEgY3VzdG9tIG1lc3NhZ2UsIGl0IHNob3VsZCBiZQotICogICAgIG1hcmtlZCBmb3IgdHJhbnNsYXRpb24uICBUaGUgbWVzc2FnZSBzaG91bGQgc3RhcnQgd2l0aCBhIGNhcGl0YWwKLSAqICAgICBhbmQgZW5kIHdpdGggYSBwZXJpb2QuICBUaGUgbWVzc2FnZSBzaG91bGQgZGVzY3JpYmUgdGhlIGVycm9yIGluIHNob3J0LAotICogICAgIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybSwgYW5kIHdpdGhvdXQgYW55IGNvbXBsZXggdGVjaG5pY2FsIHRlcm1zLgotICogICAgIEEgdXNlciBpbnRlcmZhY2Ugd2lsbCBwcmVzZW50IHRoaXMgbWVzc2FnZSBhcyB0aGUgZmlyc3QgdGhpbmcgYSB1c2VyCi0gKiAgICAgc2Vlcy4gIERldGFpbHMsIHRlY2huaWNhbCBpbmZvLCAuLi4gc2hvdWxkIGdvIGluIHRoZSBkZWJ1ZyBzdHJpbmcuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRlYnVnIHN0cmluZyBjYW4gYmUgYXMgeW91IGxpa2UuICBBZ2FpbiwgdXNlICglTlVMTCkKLSAqICAgICBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gYWRkIC0gZmlsZSBhbmQgbGluZSBudW1iZXIgd2lsbCBzdGlsbCBiZQotICogICAgIHBhc3NlZC4gICNHU1RfRVJST1JfU1lTVEVNIGNhbiBiZSB1c2VkIGFzIGEgc2hvcnRjdXQgdG8gZ2l2ZQotICogICAgIGRlYnVnIGluZm9ybWF0aW9uIG9uIGEgc3lzdGVtIGNhbGwgZXJyb3IuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqLwotCi0vKiBGSVhNRSAyLjA6IHRoZSBlbnRpcmUgZXJyb3Igc3lzdGVtIG5lZWRzIGFuIG92ZXJoYXVsIC0gaXQncyBub3QgdmVyeQotICogdXNlZnVsIHRoZSB3YXkgaXQgaXMuIEFsc28sIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGFkZGl0aW9uYWwKLSAqICdkZXRhaWxzJyBmb3IgZXJyb3JzIChlLmcuIGRpc2svZmlsZS9yZXNvdXJjZSBlcnJvciAtPiBvdXQtb2Ytc3BhY2U7IG9yCi0gKiBwdXQgdGhlIHVybC9maWxlbmFtZS9kZXZpY2UgbmFtZSB0aGF0IGNhdXNlZCB0aGUgZXJyb3Igc29tZXdoZXJlKQotICogd2l0aG91dCBoYXZpbmcgdG8gYWRkIGVudW1zIGZvciBldmVyeSBsaXR0bGUgdGhpbmcuCi0gKgotICogRklYTUUgMi4wOiBnZXQgcmlkIG9mIEdTVF97Q09SRSxMSUJSQVJZLFJFU09VUkNFLFNUUkVBTX1fRVJST1JfTlVNX0VSUk9SUy4KLSAqIE1heWJlIGFsc28gcmVwbGFjZSBfcXVhcmsoKSBmdW5jdGlvbnMgd2l0aCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZygpPwotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3QtaTE4bi1saWIuaCIKLQotI2RlZmluZSBRVUFSS19GVU5DKHN0cmluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR1F1YXJrIGdzdF8gIyMgc3RyaW5nICMjIF9lcnJvcl9xdWFyayAodm9pZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgR1F1YXJrIHF1YXJrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoIXF1YXJrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJnc3QtIiAjIHN0cmluZyAiLWVycm9yLXF1YXJrIik7IFwKLSAgcmV0dXJuIHF1YXJrOyB9Ci0KLSNkZWZpbmUgRklMRV9BX0JVRyAiICBQbGVhc2UgZmlsZSBhIGJ1ZyBhdCAiIFBBQ0tBR0VfQlVHUkVQT1JUICIuIgotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKgotZ3N0X2Vycm9yX2dldF9jb3JlX2Vycm9yIChHc3RDb3JlRXJyb3IgY29kZSkKLXsKLSAgc3dpdGNoIChjb2RlKSB7Ci0gICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9GQUlMRUQ6Ci0gICAgICByZXR1cm4gXygiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIik7Ci0gICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9UT09fTEFaWToKLSAgICAgIHJldHVybiBfKCJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlICIKLSAgICAgICAgICAidG8gdGhpcyBlcnJvci4iIEZJTEVfQV9CVUcpOwotICAgIGNhc2UgR1NUX0NPUkVfRVJST1JfTk9UX0lNUExFTUVOVEVEOgotICAgICAgcmV0dXJuIF8oIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIiBGSUxFX0FfQlVHKTsKLSAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX1NUQVRFX0NIQU5HRToKLSAgICAgIHJldHVybiBfKCJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgIgotICAgICAgICAgICJ0byBwb3N0IGEgcHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iKTsKLSAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX1BBRDoKLSAgICAgIHJldHVybiBfKCJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIgRklMRV9BX0JVRyk7Ci0gICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9USFJFQUQ6Ci0gICAgICByZXR1cm4gXygiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iIEZJTEVfQV9CVUcpOwotICAgIGNhc2UgR1NUX0NPUkVfRVJST1JfTkVHT1RJQVRJT046Ci0gICAgICByZXR1cm4gXygiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIpOwotICAgIGNhc2UgR1NUX0NPUkVfRVJST1JfRVZFTlQ6Ci0gICAgICByZXR1cm4gXygiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIgRklMRV9BX0JVRyk7Ci0gICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9TRUVLOgotICAgICAgcmV0dXJuIF8oIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIgRklMRV9BX0JVRyk7Ci0gICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9DQVBTOgotICAgICAgcmV0dXJuIF8oIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIgRklMRV9BX0JVRyk7Ci0gICAgY2FzZSBHU1RfQ09SRV9FUlJPUl9UQUc6Ci0gICAgICByZXR1cm4gXygiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iIEZJTEVfQV9CVUcpOwotICAgIGNhc2UgR1NUX0NPUkVfRVJST1JfTUlTU0lOR19QTFVHSU46Ci0gICAgICByZXR1cm4gXygiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIpOwotICAgIGNhc2UgR1NUX0NPUkVfRVJST1JfQ0xPQ0s6Ci0gICAgICByZXR1cm4gXygiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIpOwotICAgIGNhc2UgR1NUX0NPUkVfRVJST1JfRElTQUJMRUQ6Ci0gICAgICByZXR1cm4gXygiVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5ICIKLSAgICAgICAgICAidGhhdCBoYXMgYmVlbiBkaXNhYmxlZC4iKTsKLSAgICBjYXNlIEdTVF9DT1JFX0VSUk9SX05VTV9FUlJPUlM6Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKgotZ3N0X2Vycm9yX2dldF9saWJyYXJ5X2Vycm9yIChHc3RMaWJyYXJ5RXJyb3IgY29kZSkKLXsKLSAgc3dpdGNoIChjb2RlKSB7Ci0gICAgY2FzZSBHU1RfTElCUkFSWV9FUlJPUl9GQUlMRUQ6Ci0gICAgICByZXR1cm4gXygiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIik7Ci0gICAgY2FzZSBHU1RfTElCUkFSWV9FUlJPUl9UT09fTEFaWToKLSAgICAgIHJldHVybiBfKCJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlICIKLSAgICAgICAgICAidG8gdGhpcyBlcnJvci4iIEZJTEVfQV9CVUcpOwotICAgIGNhc2UgR1NUX0xJQlJBUllfRVJST1JfSU5JVDoKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIik7Ci0gICAgY2FzZSBHU1RfTElCUkFSWV9FUlJPUl9TSFVURE9XTjoKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIpOwotICAgIGNhc2UgR1NUX0xJQlJBUllfRVJST1JfU0VUVElOR1M6Ci0gICAgICByZXR1cm4gXygiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIik7Ci0gICAgY2FzZSBHU1RfTElCUkFSWV9FUlJPUl9FTkNPREU6Ci0gICAgICByZXR1cm4gXygiRW5jb2RpbmcgZXJyb3IuIik7Ci0gICAgY2FzZSBHU1RfTElCUkFSWV9FUlJPUl9OVU1fRVJST1JTOgotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICoKLWdzdF9lcnJvcl9nZXRfcmVzb3VyY2VfZXJyb3IgKEdzdFJlc291cmNlRXJyb3IgY29kZSkKLXsKLSAgc3dpdGNoIChjb2RlKSB7Ci0gICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfRkFJTEVEOgotICAgICAgcmV0dXJuIF8oIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIik7Ci0gICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfVE9PX0xBWlk6Ci0gICAgICByZXR1cm4gXygiR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSAiCi0gICAgICAgICAgInRvIHRoaXMgZXJyb3IuIiBGSUxFX0FfQlVHKTsKLSAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQ6Ci0gICAgICByZXR1cm4gXygiUmVzb3VyY2Ugbm90IGZvdW5kLiIpOwotICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX0JVU1k6Ci0gICAgICByZXR1cm4gXygiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIpOwotICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRDoKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iKTsKLSAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1dSSVRFOgotICAgICAgcmV0dXJuIF8oIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIpOwotICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRF9XUklURToKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iKTsKLSAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9DTE9TRToKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIik7Ci0gICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfUkVBRDoKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIpOwotICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX1dSSVRFOgotICAgICAgcmV0dXJuIF8oIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iKTsKLSAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9TRUVLOgotICAgICAgcmV0dXJuIF8oIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIik7Ci0gICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfU1lOQzoKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIik7Ci0gICAgY2FzZSBHU1RfUkVTT1VSQ0VfRVJST1JfU0VUVElOR1M6Ci0gICAgICByZXR1cm4gXygiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iKTsKLSAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9OT19TUEFDRV9MRUZUOgotICAgICAgcmV0dXJuIF8oIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIpOwotICAgIGNhc2UgR1NUX1JFU09VUkNFX0VSUk9SX05PVF9BVVRIT1JJWkVEOgotICAgICAgcmV0dXJuIF8oIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iKTsKLSAgICBjYXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9OVU1fRVJST1JTOgotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICoKLWdzdF9lcnJvcl9nZXRfc3RyZWFtX2Vycm9yIChHc3RTdHJlYW1FcnJvciBjb2RlKQotewotICBzd2l0Y2ggKGNvZGUpIHsKLSAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEOgotICAgICAgcmV0dXJuIF8oIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIpOwotICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9UT09fTEFaWToKLSAgICAgIHJldHVybiBfKCJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlICIKLSAgICAgICAgICAidG8gdGhpcyBlcnJvci4iIEZJTEVfQV9CVUcpOwotICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9OT1RfSU1QTEVNRU5URUQ6Ci0gICAgICByZXR1cm4gXygiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gIgotICAgICAgICAgICJQbGVhc2UgZmlsZSBhIGJ1Zy4iKTsKLSAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfVFlQRV9OT1RfRk9VTkQ6Ci0gICAgICByZXR1cm4gXygiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iKTsKLSAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfV1JPTkdfVFlQRToKLSAgICAgIHJldHVybiBfKCJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgIgotICAgICAgICAgICJlbGVtZW50LiIpOwotICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQ6Ci0gICAgICByZXR1cm4gXygiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIik7Ci0gICAgY2FzZSBHU1RfU1RSRUFNX0VSUk9SX0RFQ09ERToKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iKTsKLSAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfRU5DT0RFOgotICAgICAgcmV0dXJuIF8oIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIpOwotICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9ERU1VWDoKLSAgICAgIHJldHVybiBfKCJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIpOwotICAgIGNhc2UgR1NUX1NUUkVBTV9FUlJPUl9NVVg6Ci0gICAgICByZXR1cm4gXygiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIik7Ci0gICAgY2FzZSBHU1RfU1RSRUFNX0VSUk9SX0ZPUk1BVDoKLSAgICAgIHJldHVybiBfKCJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIik7Ci0gICAgY2FzZSBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQ6Ci0gICAgICByZXR1cm4gXygiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKLSAgICBjYXNlIEdTVF9TVFJFQU1fRVJST1JfREVDUllQVF9OT0tFWToKLSAgICAgIHJldHVybiBfKCJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gIgotICAgICAgICAgICJzdWl0YWJsZSBrZXkgaGFzIGJlZW4gc3VwcGxpZWQuIik7Ci0gICAgY2FzZSBHU1RfU1RSRUFNX0VSUk9SX05VTV9FUlJPUlM6Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLVFVQVJLX0ZVTkMgKGNvcmUpOwotUVVBUktfRlVOQyAobGlicmFyeSk7Ci1RVUFSS19GVU5DIChyZXNvdXJjZSk7Ci1RVUFSS19GVU5DIChzdHJlYW0pOwotCi0vKioKLSAqIGdzdF9lcnJvcl9nZXRfbWVzc2FnZToKLSAqIEBkb21haW46IHRoZSBHU3RyZWFtZXIgZXJyb3IgZG9tYWluIHRoaXMgZXJyb3IgYmVsb25ncyB0by4KLSAqIEBjb2RlOiB0aGUgZXJyb3IgY29kZSBiZWxvbmdpbmcgdG8gdGhlIGRvbWFpbi4KLSAqCi0gKiBHZXQgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IgbWVzc2FnZSBpbiB0aGUgY3VycmVudCBsb2NhbGUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgZGVzY3JpYmluZwotICogICAgIHRoZSBlcnJvciBtZXNzYWdlIChpbiBVVEYtOCBlbmNvZGluZykKLSAqLwotZ2NoYXIgKgotZ3N0X2Vycm9yX2dldF9tZXNzYWdlIChHUXVhcmsgZG9tYWluLCBnaW50IGNvZGUpCi17Ci0gIGNvbnN0IGdjaGFyICptZXNzYWdlID0gTlVMTDsKLQotICBpZiAoZG9tYWluID09IEdTVF9DT1JFX0VSUk9SKQotICAgIG1lc3NhZ2UgPSBnc3RfZXJyb3JfZ2V0X2NvcmVfZXJyb3IgKChHc3RDb3JlRXJyb3IpIGNvZGUpOwotICBlbHNlIGlmIChkb21haW4gPT0gR1NUX0xJQlJBUllfRVJST1IpCi0gICAgbWVzc2FnZSA9IGdzdF9lcnJvcl9nZXRfbGlicmFyeV9lcnJvciAoKEdzdExpYnJhcnlFcnJvcikgY29kZSk7Ci0gIGVsc2UgaWYgKGRvbWFpbiA9PSBHU1RfUkVTT1VSQ0VfRVJST1IpCi0gICAgbWVzc2FnZSA9IGdzdF9lcnJvcl9nZXRfcmVzb3VyY2VfZXJyb3IgKChHc3RSZXNvdXJjZUVycm9yKSBjb2RlKTsKLSAgZWxzZSBpZiAoZG9tYWluID09IEdTVF9TVFJFQU1fRVJST1IpCi0gICAgbWVzc2FnZSA9IGdzdF9lcnJvcl9nZXRfc3RyZWFtX2Vycm9yICgoR3N0U3RyZWFtRXJyb3IpIGNvZGUpOwotICBlbHNlIHsKLSAgICBnX3dhcm5pbmcgKCJObyBlcnJvciBtZXNzYWdlcyBmb3IgZG9tYWluICVzIiwgZ19xdWFya190b19zdHJpbmcgKGRvbWFpbikpOwotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKF8oIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iKSwKLSAgICAgICAgZ19xdWFya190b19zdHJpbmcgKGRvbWFpbikpOwotICB9Ci0gIGlmIChtZXNzYWdlKQotICAgIHJldHVybiBnX3N0cmR1cCAobWVzc2FnZSk7Ci0gIGVsc2UKLSAgICByZXR1cm4KLSAgICAgICAgZ19zdHJkdXBfcHJpbnRmIChfCi0gICAgICAgICgiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIpLAotICAgICAgICBnX3F1YXJrX3RvX3N0cmluZyAoZG9tYWluKSwgY29kZSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0ZXJyb3IuaCBiL2dzdC9nc3RlcnJvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTE4MTQ5Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RlcnJvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0VSUk9SX0hfXwotI2RlZmluZSBfX0dTVF9FUlJPUl9IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLUdfQkVHSU5fREVDTFMKLS8qCi0gKiB3ZSBkZWZpbmUgRklYTUUgZXJyb3IgZG9tYWluczoKLSAqIEdTVF9DT1JFX0VSUk9SCi0gKiBHU1RfTElCUkFSWV9FUlJPUgotICogR1NUX1JFU09VUkNFX0VSUk9SCi0gKiBHU1RfU1RSRUFNX0VSUk9SCi0gKgotICogQ2hlY2sgR0Vycm9yIEFQSSBkb2NzIGZvciByYXRpb25hbGUgZm9yIG5hbWluZy4KLSAqLwotLyoqCi0gKiBHc3RDb3JlRXJyb3I6Ci0gKiBAR1NUX0NPUkVfRVJST1JfRkFJTEVEOiBhIGdlbmVyYWwgZXJyb3Igd2hpY2ggZG9lc24ndCBmaXQgaW4gYW55IG90aGVyCi0gKiBjYXRlZ29yeS4gIE1ha2Ugc3VyZSB5b3UgYWRkIGEgY3VzdG9tIG1lc3NhZ2UgdG8gdGhlIGVycm9yIGNhbGwuCi0gKiBAR1NUX0NPUkVfRVJST1JfVE9PX0xBWlk6IGRvIG5vdCB1c2UgdGhpcyBleGNlcHQgYXMgYSBwbGFjZWhvbGRlciBmb3IKLSAqIGRlY2lkaW5nIHdoZXJlIHRvIGdvIHdoaWxlIGRldmVsb3BpbmcgY29kZS4KLSAqIEBHU1RfQ09SRV9FUlJPUl9OT1RfSU1QTEVNRU5URUQ6IHVzZSB0aGlzIHdoZW4geW91IGRvIG5vdCB3YW50IHRvIGltcGxlbWVudAotICogdGhpcyBmdW5jdGlvbmFsaXR5IHlldC4KLSAqIEBHU1RfQ09SRV9FUlJPUl9TVEFURV9DSEFOR0U6IHVzZWQgZm9yIHN0YXRlIGNoYW5nZSBlcnJvcnMuCi0gKiBAR1NUX0NPUkVfRVJST1JfUEFEOiB1c2VkIGZvciBwYWQtcmVsYXRlZCBlcnJvcnMuCi0gKiBAR1NUX0NPUkVfRVJST1JfVEhSRUFEOiB1c2VkIGZvciB0aHJlYWQtcmVsYXRlZCBlcnJvcnMuCi0gKiBAR1NUX0NPUkVfRVJST1JfTkVHT1RJQVRJT046IHVzZWQgZm9yIG5lZ290aWF0aW9uLXJlbGF0ZWQgZXJyb3JzLgotICogQEdTVF9DT1JFX0VSUk9SX0VWRU5UOiB1c2VkIGZvciBldmVudC1yZWxhdGVkIGVycm9ycy4KLSAqIEBHU1RfQ09SRV9FUlJPUl9TRUVLOiB1c2VkIGZvciBzZWVrLXJlbGF0ZWQgZXJyb3JzLgotICogQEdTVF9DT1JFX0VSUk9SX0NBUFM6IHVzZWQgZm9yIGNhcHMtcmVsYXRlZCBlcnJvcnMuCi0gKiBAR1NUX0NPUkVfRVJST1JfVEFHOiB1c2VkIGZvciBuZWdvdGlhdGlvbi1yZWxhdGVkIGVycm9ycy4KLSAqIEBHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTjogdXNlZCBpZiBhIHBsdWdpbiBpcyBtaXNzaW5nLgotICogQEdTVF9DT1JFX0VSUk9SX0NMT0NLOiB1c2VkIGZvciBjbG9jayByZWxhdGVkIGVycm9ycy4KLSAqIEBHU1RfQ09SRV9FUlJPUl9ESVNBQkxFRDogdXNlZCBpZiBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGRpc2FibGVkIGF0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUgdGltZS4KLSAqIEBHU1RfQ09SRV9FUlJPUl9OVU1fRVJST1JTOiB0aGUgbnVtYmVyIG9mIGNvcmUgZXJyb3IgdHlwZXMuCi0gKgotICogQ29yZSBlcnJvcnMgYXJlIGVycm9ycyBpbnNpZGUgdGhlIGNvcmUgR1N0cmVhbWVyIGxpYnJhcnkuCi0gKi8KLS8qIEZJWE1FOiBzaG91bGQgd2UgZGl2aWRlIGluIG51bWVyaWNhbCBibG9ja3Mgc28gd2UgY2FuIGVhc2lseSBhZGQKLSAgICAgICAgICBmb3IgZXhhbXBsZSBQQUQgZXJyb3JzIGxhdGVyID8gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfQ09SRV9FUlJPUl9GQUlMRUQgPSAxLAotICBHU1RfQ09SRV9FUlJPUl9UT09fTEFaWSwKLSAgR1NUX0NPUkVfRVJST1JfTk9UX0lNUExFTUVOVEVELAotICBHU1RfQ09SRV9FUlJPUl9TVEFURV9DSEFOR0UsCi0gIEdTVF9DT1JFX0VSUk9SX1BBRCwKLSAgR1NUX0NPUkVfRVJST1JfVEhSRUFELAotICBHU1RfQ09SRV9FUlJPUl9ORUdPVElBVElPTiwKLSAgR1NUX0NPUkVfRVJST1JfRVZFTlQsCi0gIEdTVF9DT1JFX0VSUk9SX1NFRUssCi0gIEdTVF9DT1JFX0VSUk9SX0NBUFMsCi0gIEdTVF9DT1JFX0VSUk9SX1RBRywKLSAgR1NUX0NPUkVfRVJST1JfTUlTU0lOR19QTFVHSU4sCi0gIEdTVF9DT1JFX0VSUk9SX0NMT0NLLAotICBHU1RfQ09SRV9FUlJPUl9ESVNBQkxFRCwKLSAgR1NUX0NPUkVfRVJST1JfTlVNX0VSUk9SUwotfSBHc3RDb3JlRXJyb3I7Ci0KLS8qKgotICogR3N0TGlicmFyeUVycm9yOgotICogQEdTVF9MSUJSQVJZX0VSUk9SX0ZBSUxFRDogYSBnZW5lcmFsIGVycm9yIHdoaWNoIGRvZXNuJ3QgZml0IGluIGFueSBvdGhlcgotICogY2F0ZWdvcnkuICBNYWtlIHN1cmUgeW91IGFkZCBhIGN1c3RvbSBtZXNzYWdlIHRvIHRoZSBlcnJvciBjYWxsLgotICogQEdTVF9MSUJSQVJZX0VSUk9SX1RPT19MQVpZOiBkbyBub3QgdXNlIHRoaXMgZXhjZXB0IGFzIGEgcGxhY2Vob2xkZXIgZm9yCi0gKiBkZWNpZGluZyB3aGVyZSB0byBnbyB3aGlsZSBkZXZlbG9waW5nIGNvZGUuCi0gKiBAR1NUX0xJQlJBUllfRVJST1JfSU5JVDogdXNlZCB3aGVuIHRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBvcGVuZWQuCi0gKiBAR1NUX0xJQlJBUllfRVJST1JfU0hVVERPV046IHVzZWQgd2hlbiB0aGUgbGlicmFyeSBjb3VsZCBub3QgYmUgY2xvc2VkLgotICogQEdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTOiB1c2VkIHdoZW4gdGhlIGxpYnJhcnkgZG9lc24ndCBhY2NlcHQgc2V0dGluZ3MuCi0gKiBAR1NUX0xJQlJBUllfRVJST1JfRU5DT0RFOiB1c2VkIHdoZW4gdGhlIGxpYnJhcnkgZ2VuZXJhdGVkIGFuIGVuY29kaW5nIGVycm9yLgotICogQEdTVF9MSUJSQVJZX0VSUk9SX05VTV9FUlJPUlM6IHRoZSBudW1iZXIgb2YgbGlicmFyeSBlcnJvciB0eXBlcy4KLSAqCi0gKiBMaWJyYXJ5IGVycm9ycyBhcmUgZm9yIGVycm9ycyBmcm9tIHRoZSBsaWJyYXJ5IGJlaW5nIHVzZWQgYnkgZWxlbWVudHMKLSAqIChpbml0aWFsaXppbmcsIGZpbmFsaXppbmcsIHNldHRpbmdzLCAuLi4pCi0gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfTElCUkFSWV9FUlJPUl9GQUlMRUQgPSAxLAotICBHU1RfTElCUkFSWV9FUlJPUl9UT09fTEFaWSwKLSAgR1NUX0xJQlJBUllfRVJST1JfSU5JVCwKLSAgR1NUX0xJQlJBUllfRVJST1JfU0hVVERPV04sCi0gIEdTVF9MSUJSQVJZX0VSUk9SX1NFVFRJTkdTLAotICBHU1RfTElCUkFSWV9FUlJPUl9FTkNPREUsCi0gIEdTVF9MSUJSQVJZX0VSUk9SX05VTV9FUlJPUlMKLX0gR3N0TGlicmFyeUVycm9yOwotCi0vKioKLSAqIEdzdFJlc291cmNlRXJyb3I6Ci0gKiBAR1NUX1JFU09VUkNFX0VSUk9SX0ZBSUxFRDogYSBnZW5lcmFsIGVycm9yIHdoaWNoIGRvZXNuJ3QgZml0IGluIGFueSBvdGhlcgotICogY2F0ZWdvcnkuICBNYWtlIHN1cmUgeW91IGFkZCBhIGN1c3RvbSBtZXNzYWdlIHRvIHRoZSBlcnJvciBjYWxsLgotICogQEdTVF9SRVNPVVJDRV9FUlJPUl9UT09fTEFaWTogZG8gbm90IHVzZSB0aGlzIGV4Y2VwdCBhcyBhIHBsYWNlaG9sZGVyIGZvcgotICogZGVjaWRpbmcgd2hlcmUgdG8gZ28gd2hpbGUgZGV2ZWxvcGluZyBjb2RlLgotICogQEdTVF9SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQ6IHVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kLgotICogQEdTVF9SRVNPVVJDRV9FUlJPUl9CVVNZOiB1c2VkIHdoZW4gcmVzb3VyY2UgaXMgYnVzeS4KLSAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9SRUFEOiB1c2VkIHdoZW4gcmVzb3VyY2UgZmFpbHMgdG8gb3BlbiBmb3IgcmVhZGluZy4KLSAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9XUklURTogdXNlZCB3aGVuIHJlc291cmNlIGZhaWxzIHRvIG9wZW4gZm9yIHdyaXRpbmcuCi0gKiBAR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRF9XUklURTogdXNlZCB3aGVuIHJlc291cmNlIGNhbm5vdCBiZSBvcGVuZWQgZm9yCi0gKiBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcsIG9yIGVpdGhlciAoYnV0IHVuc3BlY2lmaWVkIHdoaWNoKS4KLSAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfQ0xPU0U6IHVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgY2FuJ3QgYmUgY2xvc2VkLgotICogQEdTVF9SRVNPVVJDRV9FUlJPUl9SRUFEOiB1c2VkIHdoZW4gdGhlIHJlc291cmNlIGNhbid0IGJlIHJlYWQgZnJvbS4KLSAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfV1JJVEU6IHVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgY2FuJ3QgYmUgd3JpdHRlbiB0by4KLSAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfU0VFSzogdXNlZCB3aGVuIGEgc2VlayBvbiB0aGUgcmVzb3VyY2UgZmFpbHMuCi0gKiBAR1NUX1JFU09VUkNFX0VSUk9SX1NZTkM6IHVzZWQgd2hlbiBhIHN5bmNocm9uaXplIG9uIHRoZSByZXNvdXJjZSBmYWlscy4KLSAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfU0VUVElOR1M6IHVzZWQgd2hlbiBzZXR0aW5ncyBjYW4ndCBiZSBtYW5pcHVsYXRlZCBvbi4KLSAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVDogdXNlZCB3aGVuIHRoZSByZXNvdXJjZSBoYXMgbm8gc3BhY2UgbGVmdC4KLSAqIEBHU1RfUkVTT1VSQ0VfRVJST1JfTk9UX0FVVEhPUklaRUQ6IHVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgY2FuJ3QgYmUgb3BlbmVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gbWlzc2luZyBhdXRob3JpemF0aW9uLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNpbmNlIDEuMi40KQotICogQEdTVF9SRVNPVVJDRV9FUlJPUl9OVU1fRVJST1JTOiB0aGUgbnVtYmVyIG9mIHJlc291cmNlIGVycm9yIHR5cGVzLgotICoKLSAqIFJlc291cmNlIGVycm9ycyBhcmUgZm9yIGFueSByZXNvdXJjZSB1c2VkIGJ5IGFuIGVsZW1lbnQ6Ci0gKiBtZW1vcnksIGZpbGVzLCBuZXR3b3JrIGNvbm5lY3Rpb25zLCBwcm9jZXNzIHNwYWNlLCAuLi4KLSAqIFRoZXkncmUgdHlwaWNhbGx5IHVzZWQgYnkgc291cmNlIGFuZCBzaW5rIGVsZW1lbnRzLgotICovCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX1JFU09VUkNFX0VSUk9SX0ZBSUxFRCA9IDEsCi0gIEdTVF9SRVNPVVJDRV9FUlJPUl9UT09fTEFaWSwKLSAgR1NUX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCwKLSAgR1NUX1JFU09VUkNFX0VSUk9SX0JVU1ksCi0gIEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQUQsCi0gIEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1dSSVRFLAotICBHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9SRUFEX1dSSVRFLAotICBHU1RfUkVTT1VSQ0VfRVJST1JfQ0xPU0UsCi0gIEdTVF9SRVNPVVJDRV9FUlJPUl9SRUFELAotICBHU1RfUkVTT1VSQ0VfRVJST1JfV1JJVEUsCi0gIEdTVF9SRVNPVVJDRV9FUlJPUl9TRUVLLAotICBHU1RfUkVTT1VSQ0VfRVJST1JfU1lOQywKLSAgR1NUX1JFU09VUkNFX0VSUk9SX1NFVFRJTkdTLAotICBHU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVCwKLSAgR1NUX1JFU09VUkNFX0VSUk9SX05PVF9BVVRIT1JJWkVELAotICBHU1RfUkVTT1VSQ0VfRVJST1JfTlVNX0VSUk9SUwotfSBHc3RSZXNvdXJjZUVycm9yOwotCi0vKioKLSAqIEdzdFN0cmVhbUVycm9yOgotICogQEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEOiBhIGdlbmVyYWwgZXJyb3Igd2hpY2ggZG9lc24ndCBmaXQgaW4gYW55IG90aGVyCi0gKiBjYXRlZ29yeS4gIE1ha2Ugc3VyZSB5b3UgYWRkIGEgY3VzdG9tIG1lc3NhZ2UgdG8gdGhlIGVycm9yIGNhbGwuCi0gKiBAR1NUX1NUUkVBTV9FUlJPUl9UT09fTEFaWTogZG8gbm90IHVzZSB0aGlzIGV4Y2VwdCBhcyBhIHBsYWNlaG9sZGVyIGZvcgotICogZGVjaWRpbmcgd2hlcmUgdG8gZ28gd2hpbGUgZGV2ZWxvcGluZyBjb2RlLgotICogQEdTVF9TVFJFQU1fRVJST1JfTk9UX0lNUExFTUVOVEVEOiB1c2UgdGhpcyB3aGVuIHlvdSBkbyBub3Qgd2FudCB0byBpbXBsZW1lbnQKLSAqIHRoaXMgZnVuY3Rpb25hbGl0eSB5ZXQuCi0gKiBAR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORDogdXNlZCB3aGVuIHRoZSBlbGVtZW50IGRvZXNuJ3Qga25vdyB0aGUKLSAqIHN0cmVhbSdzIHR5cGUuCi0gKiBAR1NUX1NUUkVBTV9FUlJPUl9XUk9OR19UWVBFOiB1c2VkIHdoZW4gdGhlIGVsZW1lbnQgZG9lc24ndCBoYW5kbGUgdGhpcyB0eXBlCi0gKiBvZiBzdHJlYW0uCi0gKiBAR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQ6IHVzZWQgd2hlbiB0aGVyZSdzIG5vIGNvZGVjIHRvIGhhbmRsZSB0aGUKLSAqIHN0cmVhbSdzIHR5cGUuCi0gKiBAR1NUX1NUUkVBTV9FUlJPUl9ERUNPREU6IHVzZWQgd2hlbiBkZWNvZGluZyBmYWlscy4KLSAqIEBHU1RfU1RSRUFNX0VSUk9SX0VOQ09ERTogdXNlZCB3aGVuIGVuY29kaW5nIGZhaWxzLgotICogQEdTVF9TVFJFQU1fRVJST1JfREVNVVg6IHVzZWQgd2hlbiBkZW11eGluZyBmYWlscy4KLSAqIEBHU1RfU1RSRUFNX0VSUk9SX01VWDogdXNlZCB3aGVuIG11eGluZyBmYWlscy4KLSAqIEBHU1RfU1RSRUFNX0VSUk9SX0ZPUk1BVDogdXNlZCB3aGVuIHRoZSBzdHJlYW0gaXMgb2YgdGhlIHdyb25nIGZvcm1hdAotICogKGZvciBleGFtcGxlLCB3cm9uZyBjYXBzKS4KLSAqIEBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQ6IHVzZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUKLSAqIGRlY3J5cHRlZCBiZWNhdXNlIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZWxlbWVudC4KLSAqIEBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFRfTk9LRVk6IHVzZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQKLSAqIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBpcyBhdmFpbGFibGUuCi0gKiBAR1NUX1NUUkVBTV9FUlJPUl9OVU1fRVJST1JTOiB0aGUgbnVtYmVyIG9mIHN0cmVhbSBlcnJvciB0eXBlcy4KLSAqCi0gKiBTdHJlYW0gZXJyb3JzIGFyZSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgc3RyZWFtIGJlaW5nIHByb2Nlc3NlZDoKLSAqIGZvcm1hdCBlcnJvcnMsIG1lZGlhIHR5cGUgZXJyb3JzLCAuLi4KLSAqIFRoZXkncmUgdHlwaWNhbGx5IHVzZWQgYnkgZGVjb2RlcnMsIGRlbXV4ZXJzLCBjb252ZXJ0ZXJzLCAuLi4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEID0gMSwKLSAgR1NUX1NUUkVBTV9FUlJPUl9UT09fTEFaWSwKLSAgR1NUX1NUUkVBTV9FUlJPUl9OT1RfSU1QTEVNRU5URUQsCi0gIEdTVF9TVFJFQU1fRVJST1JfVFlQRV9OT1RfRk9VTkQsCi0gIEdTVF9TVFJFQU1fRVJST1JfV1JPTkdfVFlQRSwKLSAgR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQsCi0gIEdTVF9TVFJFQU1fRVJST1JfREVDT0RFLAotICBHU1RfU1RSRUFNX0VSUk9SX0VOQ09ERSwKLSAgR1NUX1NUUkVBTV9FUlJPUl9ERU1VWCwKLSAgR1NUX1NUUkVBTV9FUlJPUl9NVVgsCi0gIEdTVF9TVFJFQU1fRVJST1JfRk9STUFULAotICBHU1RfU1RSRUFNX0VSUk9SX0RFQ1JZUFQsCi0gIEdTVF9TVFJFQU1fRVJST1JfREVDUllQVF9OT0tFWSwKLSAgR1NUX1NUUkVBTV9FUlJPUl9OVU1fRVJST1JTCi19IEdzdFN0cmVhbUVycm9yOwotCi0vKioKLSAqIEdTVF9MSUJSQVJZX0VSUk9SOgotICoKLSAqIEVycm9yIGRvbWFpbiBmb3IgbGlicmFyeSBsb2FkaW5nLiBFcnJvcnMgaW4gdGhpcyBkb21haW4gd2lsbAotICogYmUgZnJvbSB0aGUgI0dzdExpYnJhcnlFcnJvciBlbnVtZXJhdGlvbi4KLSAqIFNlZSAjR0Vycm9yIGZvciBpbmZvcm1hdGlvbiBvbiBlcnJvciBkb21haW5zLgotICovCi0jZGVmaW5lIEdTVF9MSUJSQVJZX0VSUk9SICAgZ3N0X2xpYnJhcnlfZXJyb3JfcXVhcmsgKCkKLS8qKgotICogR1NUX1JFU09VUkNFX0VSUk9SOgotICoKLSAqIEVycm9yIGRvbWFpbiBmb3IgcmVzb3VyY2UgaGFuZGxpbmcuIEVycm9ycyBpbiB0aGlzIGRvbWFpbiB3aWxsCi0gKiBiZSBmcm9tIHRoZSAjR3N0UmVzb3VyY2VFcnJvciBlbnVtZXJhdGlvbi4KLSAqIFNlZSAjR0Vycm9yIGZvciBpbmZvcm1hdGlvbiBvbiBlcnJvciBkb21haW5zLgotICovCi0jZGVmaW5lIEdTVF9SRVNPVVJDRV9FUlJPUiAgZ3N0X3Jlc291cmNlX2Vycm9yX3F1YXJrICgpCi0vKioKLSAqIEdTVF9DT1JFX0VSUk9SOgotICoKLSAqIEVycm9yIGRvbWFpbiBmb3IgY29yZSBzeXN0ZW0uIEVycm9ycyBpbiB0aGlzIGRvbWFpbiB3aWxsCi0gKiBiZSBmcm9tIHRoZSAjR3N0Q29yZUVycm9yIGVudW1lcmF0aW9uLgotICogU2VlICNHRXJyb3IgZm9yIGluZm9ybWF0aW9uIG9uIGVycm9yIGRvbWFpbnMuCi0gKi8KLSNkZWZpbmUgR1NUX0NPUkVfRVJST1IgICAgICBnc3RfY29yZV9lcnJvcl9xdWFyayAoKQotLyoqCi0gKiBHU1RfU1RSRUFNX0VSUk9SOgotICoKLSAqIEVycm9yIGRvbWFpbiBmb3IgbWVkaWEgc3RyZWFtIHByb2Nlc3NpbmcuIEVycm9ycyBpbiB0aGlzIGRvbWFpbiB3aWxsCi0gKiBiZSBmcm9tIHRoZSAjR3N0U3RyZWFtRXJyb3IgZW51bWVyYXRpb24uCi0gKiBTZWUgI0dFcnJvciBmb3IgaW5mb3JtYXRpb24gb24gZXJyb3IgZG9tYWlucy4KLSAqLwotI2RlZmluZSBHU1RfU1RSRUFNX0VSUk9SICAgIGdzdF9zdHJlYW1fZXJyb3JfcXVhcmsgKCkKLQotLyoqCi0gKiBHU1RfRVJST1JfU1lTVEVNOgotICoKLSAqIEJ1aWxkcyBhIHN0cmluZyB1c2luZyBlcnJubyBkZXNjcmliaW5nIHRoZSBwcmV2aW91c2x5IGZhaWxlZCBzeXN0ZW0KLSAqIGNhbGwuICBUbyBiZSB1c2VkIGFzIHRoZSBkZWJ1ZyBhcmd1bWVudCBpbiAjR1NUX0VMRU1FTlRfRVJST1IuCi0gKi8KLSNkZWZpbmUgR1NUX0VSUk9SX1NZU1RFTSAgICAoInN5c3RlbSBlcnJvcjogJXMiLCBnX3N0cmVycm9yIChlcnJubykpCi0KLWdjaGFyICpnc3RfZXJyb3JfZ2V0X21lc3NhZ2UgKEdRdWFyayBkb21haW4sIGdpbnQgY29kZSk7Ci1HUXVhcmsgZ3N0X3N0cmVhbV9lcnJvcl9xdWFyayAodm9pZCk7Ci1HUXVhcmsgZ3N0X2NvcmVfZXJyb3JfcXVhcmsgKHZvaWQpOwotR1F1YXJrIGdzdF9yZXNvdXJjZV9lcnJvcl9xdWFyayAodm9pZCk7Ci1HUXVhcmsgZ3N0X2xpYnJhcnlfZXJyb3JfcXVhcmsgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX0VSUk9SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGV2ZW50LmMgYi9nc3QvZ3N0ZXZlbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5MWRmYi4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0ZXZlbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMDEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0ZXZlbnQuYzogR3N0RXZlbnQgc3Vic3lzdGVtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGV2ZW50Ci0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFN0cnVjdHVyZSBkZXNjcmliaW5nIGV2ZW50cyB0aGF0IGFyZSBwYXNzZWQgdXAgYW5kIGRvd24KLSAqICAgICAgICAgICAgICAgICAgICAgYSBwaXBlbGluZQotICogQHNlZV9hbHNvOiAjR3N0UGFkLCAjR3N0RWxlbWVudAotICoKLSAqIFRoZSBldmVudCBjbGFzcyBwcm92aWRlcyBmYWN0b3J5IG1ldGhvZHMgdG8gY29uc3RydWN0IGV2ZW50cyBmb3Igc2VuZGluZwotICogYW5kIGZ1bmN0aW9ucyB0byBxdWVyeSAocGFyc2UpIHJlY2VpdmVkIGV2ZW50cy4KLSAqCi0gKiBFdmVudHMgYXJlIHVzdWFsbHkgY3JlYXRlZCB3aXRoIGdzdF9ldmVudF9uZXdfKigpIHdoaWNoIHRha2VzIGV2ZW50LXR5cGUKLSAqIHNwZWNpZmljIHBhcmFtZXRlcnMgYXMgYXJndW1lbnRzLgotICogVG8gc2VuZCBhbiBldmVudCBhcHBsaWNhdGlvbiB3aWxsIHVzdWFsbHkgdXNlIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQoKSBhbmQKLSAqIGVsZW1lbnRzIHdpbGwgdXNlIGdzdF9wYWRfc2VuZF9ldmVudCgpIG9yIGdzdF9wYWRfcHVzaF9ldmVudCgpLgotICogVGhlIGV2ZW50IHNob3VsZCBiZSB1bnJlZmZlZCB3aXRoIGdzdF9ldmVudF91bnJlZigpIGlmIGl0IGhhcyBub3QgYmVlbiBzZW50LgotICoKLSAqIEV2ZW50cyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBjYW4gYmUgcGFyc2VkIHdpdGggdGhlaXIgcmVzcGVjdGl2ZQotICogZ3N0X2V2ZW50X3BhcnNlXyooKSBmdW5jdGlvbnMuIEl0IGlzIHZhbGlkIHRvIHBhc3MgJU5VTEwgZm9yIHVud2FudGVkIGRldGFpbHMuCi0gKgotICogRXZlbnRzIGFyZSBwYXNzZWQgYmV0d2VlbiBlbGVtZW50cyBpbiBwYXJhbGxlbCB0byB0aGUgZGF0YSBzdHJlYW0uIFNvbWUgZXZlbnRzCi0gKiBhcmUgc2VyaWFsaXplZCB3aXRoIGJ1ZmZlcnMsIG90aGVycyBhcmUgbm90LiBTb21lIGV2ZW50cyBvbmx5IHRyYXZlbCBkb3duc3RyZWFtLAotICogb3RoZXJzIG9ubHkgdXBzdHJlYW0uIFNvbWUgZXZlbnRzIGNhbiB0cmF2ZWwgYm90aCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbS4KLSAqCi0gKiBUaGUgZXZlbnRzIGFyZSB1c2VkIHRvIHNpZ25hbCBzcGVjaWFsIGNvbmRpdGlvbnMgaW4gdGhlIGRhdGFzdHJlYW0gc3VjaCBhcwotICogRU9TIChlbmQgb2Ygc3RyZWFtKSBvciB0aGUgc3RhcnQgb2YgYSBuZXcgc3RyZWFtLXNlZ21lbnQuCi0gKiBFdmVudHMgYXJlIGFsc28gdXNlZCB0byBmbHVzaCB0aGUgcGlwZWxpbmUgb2YgYW55IHBlbmRpbmcgZGF0YS4KLSAqCi0gKiBNb3N0IG9mIHRoZSBldmVudCBBUEkgaXMgdXNlZCBpbnNpZGUgcGx1Z2lucy4gQXBwbGljYXRpb25zIHVzdWFsbHkgb25seQotICogY29uc3RydWN0IGFuZCB1c2Ugc2VlayBldmVudHMuCi0gKiBUbyBkbyB0aGF0IGdzdF9ldmVudF9uZXdfc2VlaygpIGlzIHVzZWQgdG8gY3JlYXRlIGEgc2VlayBldmVudC4gSXQgdGFrZXMKLSAqIHRoZSBuZWVkZWQgcGFyYW1ldGVycyB0byBzcGVjaWZ5IHNlZWtpbmcgdGltZSBhbmQgbW9kZS4KLSAqIHxbPCEtLSBsYW5ndWFnZT0iQyIgLS0+Ci0gKiAgIEdzdEV2ZW50ICpldmVudDsKLSAqICAgZ2Jvb2xlYW4gcmVzdWx0OwotICogICAuLi4KLSAqICAgLy8gY29uc3RydWN0IGEgc2VlayBldmVudCB0byBwbGF5IHRoZSBtZWRpYSBmcm9tIHNlY29uZCAyIHRvIDUsIGZsdXNoCi0gKiAgIC8vIHRoZSBwaXBlbGluZSB0byBkZWNyZWFzZSBsYXRlbmN5LgotICogICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VlayAoMS4wLCAKLSAqICAgICAgR1NUX0ZPUk1BVF9USU1FLCAKLSAqICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAqICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDIgKiBHU1RfU0VDT05ELAotICogICAgICBHU1RfU0VFS19UWVBFX1NFVCwgNSAqIEdTVF9TRUNPTkQpOwotICogICAuLi4KLSAqICAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAocGlwZWxpbmUsIGV2ZW50KTsKLSAqICAgaWYgKCFyZXN1bHQpCi0gKiAgICAgZ193YXJuaW5nICgic2VlayBmYWlsZWQiKTsKLSAqICAgLi4uCi0gKiBdfAotICovCi0KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAgIC8qIG1lbWNweSAqLwotCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdGV2ZW50LmgiCi0jaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCi0jaW5jbHVkZSAiZ3N0dXRpbHMuaCIKLSNpbmNsdWRlICJnc3RxdWFyay5oIgotI2luY2x1ZGUgImdzdHZhbHVlLmgiCi0KLUdUeXBlIF9nc3RfZXZlbnRfdHlwZSA9IDA7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEV2ZW50IGV2ZW50OwotCi0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50NjQgcnVubmluZ190aW1lX29mZnNldDsKLX0gR3N0RXZlbnRJbXBsOwotCi0jZGVmaW5lIEdTVF9FVkVOVF9TVFJVQ1RVUkUoZSkgICgoKEdzdEV2ZW50SW1wbCAqKShlKSktPnN0cnVjdHVyZSkKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgY29uc3QgZ2ludCB0eXBlOwotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgR1F1YXJrIHF1YXJrOwotfSBHc3RFdmVudFF1YXJrczsKLQotc3RhdGljIEdzdEV2ZW50UXVhcmtzIGV2ZW50X3F1YXJrc1tdID0gewotICB7R1NUX0VWRU5UX1VOS05PV04sICJ1bmtub3duIiwgMH0sCi0gIHtHU1RfRVZFTlRfRkxVU0hfU1RBUlQsICJmbHVzaC1zdGFydCIsIDB9LAotICB7R1NUX0VWRU5UX0ZMVVNIX1NUT1AsICJmbHVzaC1zdG9wIiwgMH0sCi0gIHtHU1RfRVZFTlRfU0VMRUNUX1NUUkVBTVMsICJzZWxlY3Qtc3RyZWFtcyIsIDB9LAotICB7R1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgInN0cmVhbS1zdGFydCIsIDB9LAotICB7R1NUX0VWRU5UX1NUUkVBTV9DT0xMRUNUSU9OLCAic3RyZWFtLWNvbGxlY3Rpb24iLCAwfSwKLSAge0dTVF9FVkVOVF9DQVBTLCAiY2FwcyIsIDB9LAotICB7R1NUX0VWRU5UX1NFR01FTlQsICJzZWdtZW50IiwgMH0sCi0gIHtHU1RfRVZFTlRfVEFHLCAidGFnIiwgMH0sCi0gIHtHU1RfRVZFTlRfVE9DLCAidG9jIiwgMH0sCi0gIHtHU1RfRVZFTlRfUFJPVEVDVElPTiwgInByb3RlY3Rpb24iLCAwfSwKLSAge0dTVF9FVkVOVF9CVUZGRVJTSVpFLCAiYnVmZmVyc2l6ZSIsIDB9LAotICB7R1NUX0VWRU5UX1NJTktfTUVTU0FHRSwgInNpbmstbWVzc2FnZSIsIDB9LAotICB7R1NUX0VWRU5UX0VPUywgImVvcyIsIDB9LAotICB7R1NUX0VWRU5UX1NFR01FTlRfRE9ORSwgInNlZ21lbnQtZG9uZSIsIDB9LAotICB7R1NUX0VWRU5UX0dBUCwgImdhcCIsIDB9LAotICB7R1NUX0VWRU5UX1FPUywgInFvcyIsIDB9LAotICB7R1NUX0VWRU5UX1NFRUssICJzZWVrIiwgMH0sCi0gIHtHU1RfRVZFTlRfTkFWSUdBVElPTiwgIm5hdmlnYXRpb24iLCAwfSwKLSAge0dTVF9FVkVOVF9MQVRFTkNZLCAibGF0ZW5jeSIsIDB9LAotICB7R1NUX0VWRU5UX1NURVAsICJzdGVwIiwgMH0sCi0gIHtHU1RfRVZFTlRfUkVDT05GSUdVUkUsICJyZWNvbmZpZ3VyZSIsIDB9LAotICB7R1NUX0VWRU5UX1RPQ19TRUxFQ1QsICJ0b2Mtc2VsZWN0IiwgMH0sCi0gIHtHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLCAiY3VzdG9tLXVwc3RyZWFtIiwgMH0sCi0gIHtHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU0sICJjdXN0b20tZG93bnN0cmVhbSIsIDB9LAotICB7R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgImN1c3RvbS1kb3duc3RyZWFtLW9vYiIsIDB9LAotICB7R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWSwgImN1c3RvbS1kb3duc3RyZWFtLXN0aWNreSIsIDB9LAotICB7R1NUX0VWRU5UX0NVU1RPTV9CT1RILCAiY3VzdG9tLWJvdGgiLCAwfSwKLSAge0dTVF9FVkVOVF9DVVNUT01fQk9USF9PT0IsICJjdXN0b20tYm90aC1vb2IiLCAwfSwKLSAge0dTVF9FVkVOVF9TVFJFQU1fR1JPVVBfRE9ORSwgInN0cmVhbS1ncm91cC1kb25lIiwgMH0sCi0KLSAgezAsIE5VTEwsIDB9Ci19OwotCi1HU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEUgKEdzdEV2ZW50LCBnc3RfZXZlbnQpOwotCi12b2lkCi1fcHJpdl9nc3RfZXZlbnRfaW5pdGlhbGl6ZSAodm9pZCkKLXsKLSAgZ2ludCBpOwotCi0gIF9nc3RfZXZlbnRfdHlwZSA9IGdzdF9ldmVudF9nZXRfdHlwZSAoKTsKLQotICBnX3R5cGVfY2xhc3NfcmVmIChnc3Rfc2Vla19mbGFnc19nZXRfdHlwZSAoKSk7Ci0gIGdfdHlwZV9jbGFzc19yZWYgKGdzdF9zZWVrX3R5cGVfZ2V0X3R5cGUgKCkpOwotCi0gIGZvciAoaSA9IDA7IGV2ZW50X3F1YXJrc1tpXS5uYW1lOyBpKyspIHsKLSAgICBldmVudF9xdWFya3NbaV0ucXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoZXZlbnRfcXVhcmtzW2ldLm5hbWUpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWU6Ci0gKiBAdHlwZTogdGhlIGV2ZW50IHR5cGUKLSAqCi0gKiBHZXQgYSBwcmludGFibGUgbmFtZSBmb3IgdGhlIGdpdmVuIGV2ZW50IHR5cGUuIERvIG5vdCBtb2RpZnkgb3IgZnJlZS4KLSAqCi0gKiBSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byB0aGUgc3RhdGljIG5hbWUgb2YgdGhlIGV2ZW50LgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAoR3N0RXZlbnRUeXBlIHR5cGUpCi17Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBldmVudF9xdWFya3NbaV0ubmFtZTsgaSsrKSB7Ci0gICAgaWYgKHR5cGUgPT0gZXZlbnRfcXVhcmtzW2ldLnR5cGUpCi0gICAgICByZXR1cm4gZXZlbnRfcXVhcmtzW2ldLm5hbWU7Ci0gIH0KLSAgcmV0dXJuICJ1bmtub3duIjsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfdHlwZV90b19xdWFyazoKLSAqIEB0eXBlOiB0aGUgZXZlbnQgdHlwZQotICoKLSAqIEdldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gZXZlbnQgdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcXVhcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCB0eXBlCi0gKi8KLUdRdWFyawotZ3N0X2V2ZW50X3R5cGVfdG9fcXVhcmsgKEdzdEV2ZW50VHlwZSB0eXBlKQotewotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgZXZlbnRfcXVhcmtzW2ldLm5hbWU7IGkrKykgewotICAgIGlmICh0eXBlID09IGV2ZW50X3F1YXJrc1tpXS50eXBlKQotICAgICAgcmV0dXJuIGV2ZW50X3F1YXJrc1tpXS5xdWFyazsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3M6Ci0gKiBAdHlwZTogYSAjR3N0RXZlbnRUeXBlCi0gKgotICogR2V0cyB0aGUgI0dzdEV2ZW50VHlwZUZsYWdzIGFzc29jaWF0ZWQgd2l0aCBAdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RFdmVudFR5cGVGbGFncy4KLSAqLwotR3N0RXZlbnRUeXBlRmxhZ3MKLWdzdF9ldmVudF90eXBlX2dldF9mbGFncyAoR3N0RXZlbnRUeXBlIHR5cGUpCi17Ci0gIEdzdEV2ZW50VHlwZUZsYWdzIHJldDsKLQotICByZXQgPSB0eXBlICYgKCgxIDw8IEdTVF9FVkVOVF9OVU1fU0hJRlQpIC0gMSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLV9nc3RfZXZlbnRfZnJlZSAoR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSk7Ci0KLSAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfRVZFTlQsICJmcmVlaW5nIGV2ZW50ICVwIHR5cGUgJXMiLCBldmVudCwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgcyA9IEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KTsKLQotICBpZiAocykgewotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAocywgTlVMTCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgfQotCi0gIGdfc2xpY2VfZnJlZTEgKHNpemVvZiAoR3N0RXZlbnRJbXBsKSwgZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBnc3RfZXZlbnRfaW5pdCAoR3N0RXZlbnRJbXBsICogZXZlbnQsIEdzdEV2ZW50VHlwZSB0eXBlKTsKLQotc3RhdGljIEdzdEV2ZW50ICoKLV9nc3RfZXZlbnRfY29weSAoR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0RXZlbnRJbXBsICpjb3B5OwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgY29weSA9IGdfc2xpY2VfbmV3MCAoR3N0RXZlbnRJbXBsKTsKLQotICBnc3RfZXZlbnRfaW5pdCAoY29weSwgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSk7Ci0KLSAgR1NUX0VWRU5UX1RJTUVTVEFNUCAoY29weSkgPSBHU1RfRVZFTlRfVElNRVNUQU1QIChldmVudCk7Ci0gIEdTVF9FVkVOVF9TRVFOVU0gKGNvcHkpID0gR1NUX0VWRU5UX1NFUU5VTSAoZXZlbnQpOwotCi0gIHMgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7Ci0gIGlmIChzKSB7Ci0gICAgR1NUX0VWRU5UX1NUUlVDVFVSRSAoY29weSkgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHMpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoR1NUX0VWRU5UX1NUUlVDVFVSRSAoY29weSksCi0gICAgICAgICZjb3B5LT5ldmVudC5taW5pX29iamVjdC5yZWZjb3VudCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0VWRU5UX1NUUlVDVFVSRSAoY29weSkgPSBOVUxMOwotICB9Ci0KLSAgKChHc3RFdmVudEltcGwgKikgY29weSktPnJ1bm5pbmdfdGltZV9vZmZzZXQgPQotICAgICAgKChHc3RFdmVudEltcGwgKikgZXZlbnQpLT5ydW5uaW5nX3RpbWVfb2Zmc2V0OwotCi0gIHJldHVybiBHU1RfRVZFTlRfQ0FTVCAoY29weSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZXZlbnRfaW5pdCAoR3N0RXZlbnRJbXBsICogZXZlbnQsIEdzdEV2ZW50VHlwZSB0eXBlKQotewotICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2ZW50KSwgMCwgX2dzdF9ldmVudF90eXBlLAotICAgICAgKEdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24pIF9nc3RfZXZlbnRfY29weSwgTlVMTCwKLSAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBfZ3N0X2V2ZW50X2ZyZWUpOwotCi0gIEdTVF9FVkVOVF9UWVBFIChldmVudCkgPSB0eXBlOwotICBHU1RfRVZFTlRfVElNRVNUQU1QIChldmVudCkgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHU1RfRVZFTlRfU0VRTlVNIChldmVudCkgPSBnc3RfdXRpbF9zZXFudW1fbmV4dCAoKTsKLSAgZXZlbnQtPnJ1bm5pbmdfdGltZV9vZmZzZXQgPSAwOwotfQotCi0KLS8qKgotICogZ3N0X2V2ZW50X25ld19jdXN0b206Ci0gKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIG5ldyBldmVudAotICogQHN0cnVjdHVyZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgc3RydWN0dXJlIGZvciB0aGUgZXZlbnQuIFRoZSBldmVudCB3aWxsCi0gKiAgICAgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZS4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgY3VzdG9tLXR5cGVkIGV2ZW50LiBUaGlzIGNhbiBiZSB1c2VkIGZvciBhbnl0aGluZyBub3QKLSAqIGhhbmRsZWQgYnkgb3RoZXIgZXZlbnQtc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHBhc3MgYW4gZXZlbnQgdG8gYW5vdGhlcgotICogZWxlbWVudC4KLSAqCi0gKiBNYWtlIHN1cmUgdG8gYWxsb2NhdGUgYW4gZXZlbnQgdHlwZSB3aXRoIHRoZSAjR1NUX0VWRU5UX01BS0VfVFlQRSBtYWNybywKLSAqIGFzc2lnbmluZyBhIGZyZWUgbnVtYmVyIGFuZCBmaWxsaW5nIGluIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBhbmQKLSAqIHNlcmlhbGl6YXRpb24gZmxhZ3MuCi0gKgotICogTmV3IGN1c3RvbSBldmVudHMgY2FuIGFsc28gYmUgY3JlYXRlZCBieSBzdWJjbGFzc2luZyB0aGUgZXZlbnQgdHlwZSBpZgotICogbmVlZGVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBjdXN0b20gZXZlbnQuCi0gKi8KLUdzdEV2ZW50ICoKLWdzdF9ldmVudF9uZXdfY3VzdG9tIChHc3RFdmVudFR5cGUgdHlwZSwgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQotewotICBHc3RFdmVudEltcGwgKmV2ZW50OwotCi0gIGV2ZW50ID0gZ19zbGljZV9uZXcwIChHc3RFdmVudEltcGwpOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRVZFTlQsICJjcmVhdGluZyBuZXcgZXZlbnQgJXAgJXMgJWQiLCBldmVudCwKLSAgICAgIGdzdF9ldmVudF90eXBlX2dldF9uYW1lICh0eXBlKSwgdHlwZSk7Ci0KLSAgaWYgKHN0cnVjdHVyZSkgewotICAgIC8qIHN0cnVjdHVyZSBtdXN0IG5vdCBoYXZlIGEgcGFyZW50ICovCi0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgICZldmVudC0+ZXZlbnQubWluaV9vYmplY3QucmVmY291bnQpKQotICAgICAgZ290byBoYWRfcGFyZW50OwotCi0gIH0KLSAgZ3N0X2V2ZW50X2luaXQgKGV2ZW50LCB0eXBlKTsKLQotICBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCkgPSBzdHJ1Y3R1cmU7Ci0KLSAgcmV0dXJuIEdTVF9FVkVOVF9DQVNUIChldmVudCk7Ci0KLSAgLyogRVJST1JTICovCi1oYWRfcGFyZW50OgotICB7Ci0gICAgZ19zbGljZV9mcmVlMSAoc2l6ZW9mIChHc3RFdmVudEltcGwpLCBldmVudCk7Ci0gICAgZ193YXJuaW5nICgic3RydWN0dXJlIGlzIGFscmVhZHkgb3duZWQgYnkgYW5vdGhlciBvYmplY3QiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9ldmVudF9nZXRfc3RydWN0dXJlOgotICogQGV2ZW50OiBUaGUgI0dzdEV2ZW50LgotICoKLSAqIEFjY2VzcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBldmVudC4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgc3RydWN0dXJlIG9mIHRoZSBldmVudC4gVGhlIHN0cnVjdHVyZSBpcyBzdGlsbAotICogb3duZWQgYnkgdGhlIGV2ZW50LCB3aGljaCBtZWFucyB0aGF0IHlvdSBzaG91bGQgbm90IGZyZWUgaXQgYW5kCi0gKiB0aGF0IHRoZSBwb2ludGVyIGJlY29tZXMgaW52YWxpZCB3aGVuIHlvdSBmcmVlIHRoZSBldmVudC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1jb25zdCBHc3RTdHJ1Y3R1cmUgKgotZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSwgTlVMTCk7Ci0KLSAgcmV0dXJuIEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KTsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlOgotICogQGV2ZW50OiBUaGUgI0dzdEV2ZW50LgotICoKLSAqIEdldCBhIHdyaXRhYmxlIHZlcnNpb24gb2YgdGhlIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGV2ZW50LiBUaGUgc3RydWN0dXJlCi0gKiBpcyBzdGlsbCBvd25lZCBieSB0aGUgZXZlbnQsIHdoaWNoIG1lYW5zIHRoYXQgeW91IHNob3VsZCBub3QgZnJlZQotICogaXQgYW5kIHRoYXQgdGhlIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIHdoZW4geW91IGZyZWUgdGhlIGV2ZW50LgotICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgQGV2ZW50IGlzIHdyaXRhYmxlIGFuZCB3aWxsIG5ldmVyIHJldHVybgotICogJU5VTEwuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0U3RydWN0dXJlICoKLWdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfZXZlbnRfaXNfd3JpdGFibGUgKGV2ZW50KSwgTlVMTCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOwotCi0gIGlmIChzdHJ1Y3R1cmUgPT0gTlVMTCkgewotICAgIHN0cnVjdHVyZSA9Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5IChnc3RfZXZlbnRfdHlwZV90b19xdWFyayAoR1NUX0VWRU5UX1RZUEUKLSAgICAgICAgICAgIChldmVudCkpKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwgJmV2ZW50LT5taW5pX29iamVjdC5yZWZjb3VudCk7Ci0gICAgR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpID0gc3RydWN0dXJlOwotICB9Ci0gIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X2hhc19uYW1lOgotICogQGV2ZW50OiBUaGUgI0dzdEV2ZW50LgotICogQG5hbWU6IG5hbWUgdG8gY2hlY2sKLSAqCi0gKiBDaGVja3MgaWYgQGV2ZW50IGhhcyB0aGUgZ2l2ZW4gQG5hbWUuIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSB1c2VkIHRvCi0gKiBjaGVjayB0aGUgbmFtZSBvZiBhIGN1c3RvbSBldmVudC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmFtZSBtYXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBldmVudCBzdHJ1Y3R1cmUuCi0gKi8KLWdib29sZWFuCi1nc3RfZXZlbnRfaGFzX25hbWUgKEdzdEV2ZW50ICogZXZlbnQsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpLCBGQUxTRSk7Ci0KLSAgaWYgKEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KSA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpLCBuYW1lKTsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfZ2V0X3NlcW51bToKLSAqIEBldmVudDogQSAjR3N0RXZlbnQuCi0gKgotICogUmV0cmlldmUgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhIGV2ZW50LgotICoKLSAqIEV2ZW50cyBoYXZlIGV2ZXItaW5jcmVtZW50aW5nIHNlcXVlbmNlIG51bWJlcnMsIHdoaWNoIG1heSBhbHNvIGJlIHNldAotICogZXhwbGljaXRseSB2aWEgZ3N0X2V2ZW50X3NldF9zZXFudW0oKS4gU2VxdWVuY2UgbnVtYmVycyBhcmUgdHlwaWNhbGx5IHVzZWQgdG8KLSAqIGluZGljYXRlIHRoYXQgYSBldmVudCBjb3JyZXNwb25kcyB0byBzb21lIG90aGVyIHNldCBvZiBldmVudHMgb3IgbWVzc2FnZXMsCi0gKiBmb3IgZXhhbXBsZSBhbiBFT1MgZXZlbnQgY29ycmVzcG9uZGluZyB0byBhIFNFRUsgZXZlbnQuIEl0IGlzIGNvbnNpZGVyZWQgZ29vZAotICogcHJhY3RpY2UgdG8gbWFrZSB0aGlzIGNvcnJlc3BvbmRlbmNlIHdoZW4gcG9zc2libGUsIHRob3VnaCBpdCBpcyBub3QKLSAqIHJlcXVpcmVkLgotICoKLSAqIE5vdGUgdGhhdCBldmVudHMgYW5kIG1lc3NhZ2VzIHNoYXJlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRvcjsKLSAqIHR3byBldmVudHMgb3IgbWVzc2FnZXMgd2lsbCBuZXZlciBoYXZlIHRoZSBzYW1lIHNlcXVlbmNlIG51bWJlciB1bmxlc3MKLSAqIHRoYXQgY29ycmVzcG9uZGVuY2Ugd2FzIG1hZGUgZXhwbGljaXRseS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgZXZlbnQncyBzZXF1ZW5jZSBudW1iZXIuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ3VpbnQzMgotZ3N0X2V2ZW50X2dldF9zZXFudW0gKEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSwgLTEpOwotCi0gIHJldHVybiBHU1RfRVZFTlRfU0VRTlVNIChldmVudCk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X3NldF9zZXFudW06Ci0gKiBAZXZlbnQ6IEEgI0dzdEV2ZW50LgotICogQHNlcW51bTogQSBzZXF1ZW5jZSBudW1iZXIuCi0gKgotICogU2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgYSBldmVudC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCBieSB0aGUgY3JlYXRvciBvZiBhIGV2ZW50IHRvIGluZGljYXRlIHRoYXQgdGhlCi0gKiBldmVudCByZWxhdGVzIHRvIG90aGVyIGV2ZW50cyBvciBtZXNzYWdlcy4gU2VlIGdzdF9ldmVudF9nZXRfc2VxbnVtKCkgZm9yCi0gKiBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9ldmVudF9zZXRfc2VxbnVtIChHc3RFdmVudCAqIGV2ZW50LCBndWludDMyIHNlcW51bSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOwotCi0gIEdTVF9FVkVOVF9TRVFOVU0gKGV2ZW50KSA9IHNlcW51bTsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfZ2V0X3J1bm5pbmdfdGltZV9vZmZzZXQ6Ci0gKiBAZXZlbnQ6IEEgI0dzdEV2ZW50LgotICoKLSAqIFJldHJpZXZlIHRoZSBhY2N1bXVsYXRlZCBydW5uaW5nIHRpbWUgb2Zmc2V0IG9mIHRoZSBldmVudC4KLSAqCi0gKiBFdmVudHMgcGFzc2luZyB0aHJvdWdoICNHc3RQYWRzIHRoYXQgaGF2ZSBhIHJ1bm5pbmcgdGltZQotICogb2Zmc2V0IHNldCB2aWEgZ3N0X3BhZF9zZXRfb2Zmc2V0KCkgd2lsbCBnZXQgdGhlaXIgb2Zmc2V0Ci0gKiBhZGp1c3RlZCBhY2NvcmRpbmcgdG8gdGhlIHBhZCdzIG9mZnNldC4KLSAqCi0gKiBJZiB0aGUgZXZlbnQgY29udGFpbnMgYW55IGluZm9ybWF0aW9uIHRoYXQgcmVsYXRlZCB0byB0aGUKLSAqIHJ1bm5pbmcgdGltZSwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZAotICogYmVmb3JlIHVzYWdlIHdpdGggdGhpcyBvZmZzZXQuCi0gKgotICogUmV0dXJuczogVGhlIGV2ZW50J3MgcnVubmluZyB0aW1lIG9mZnNldAotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNAotICovCi1naW50NjQKLWdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldCAoR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpLCAwKTsKLQotICByZXR1cm4gKChHc3RFdmVudEltcGwgKikgZXZlbnQpLT5ydW5uaW5nX3RpbWVfb2Zmc2V0OwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9zZXRfcnVubmluZ190aW1lX29mZnNldDoKLSAqIEBldmVudDogQSAjR3N0RXZlbnQuCi0gKiBAb2Zmc2V0OiBBIHRoZSBuZXcgcnVubmluZyB0aW1lIG9mZnNldAotICoKLSAqIFNldCB0aGUgcnVubmluZyB0aW1lIG9mZnNldCBvZiBhIGV2ZW50LiBTZWUKLSAqIGdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldCgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNAotICovCi12b2lkCi1nc3RfZXZlbnRfc2V0X3J1bm5pbmdfdGltZV9vZmZzZXQgKEdzdEV2ZW50ICogZXZlbnQsIGdpbnQ2NCBvZmZzZXQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLQotICAoKEdzdEV2ZW50SW1wbCAqKSBldmVudCktPnJ1bm5pbmdfdGltZV9vZmZzZXQgPSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydDoKLSAqCi0gKiBBbGxvY2F0ZSBhIG5ldyBmbHVzaCBzdGFydCBldmVudC4gVGhlIGZsdXNoIHN0YXJ0IGV2ZW50IGNhbiBiZSBzZW50Ci0gKiB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBhbmQgdHJhdmVscyBvdXQtb2YtYm91bmRzIHdpdGggdGhlIGRhdGFmbG93LgotICoKLSAqIEl0IG1hcmtzIHBhZHMgYXMgYmVpbmcgZmx1c2hpbmcgYW5kIHdpbGwgbWFrZSB0aGVtIHJldHVybgotICogI0dTVF9GTE9XX0ZMVVNISU5HIHdoZW4gdXNlZCBmb3IgZGF0YSBmbG93IHdpdGggZ3N0X3BhZF9wdXNoKCksCi0gKiBnc3RfcGFkX2NoYWluKCksIGdzdF9wYWRfZ2V0X3JhbmdlKCkgYW5kIGdzdF9wYWRfcHVsbF9yYW5nZSgpLgotICogQW55IGV2ZW50IChleGNlcHQgYSAjR1NUX0VWRU5UX0ZMVVNIX1NUT1ApIHJlY2VpdmVkCi0gKiBvbiBhIGZsdXNoaW5nIHBhZCB3aWxsIHJldHVybiAlRkFMU0UgaW1tZWRpYXRlbHkuCi0gKgotICogRWxlbWVudHMgc2hvdWxkIHVubG9jayBhbnkgYmxvY2tpbmcgZnVuY3Rpb25zIGFuZCBleGl0IHRoZWlyIHN0cmVhbWluZwotICogZnVuY3Rpb25zIGFzIGZhc3QgYXMgcG9zc2libGUgd2hlbiB0aGlzIGV2ZW50IGlzIHJlY2VpdmVkLgotICoKLSAqIFRoaXMgZXZlbnQgaXMgdHlwaWNhbGx5IGdlbmVyYXRlZCBhZnRlciBhIHNlZWsgdG8gZmx1c2ggb3V0IGFsbCBxdWV1ZWQgZGF0YQotICogaW4gdGhlIHBpcGVsaW5lIHNvIHRoYXQgdGhlIG5ldyBtZWRpYSBpcyBwbGF5ZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGZsdXNoIHN0YXJ0IGV2ZW50LgotICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICh2b2lkKQotewotICByZXR1cm4gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9GTFVTSF9TVEFSVCwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wOgotICogQHJlc2V0X3RpbWU6IGlmIHRpbWUgc2hvdWxkIGJlIHJlc2V0Ci0gKgotICogQWxsb2NhdGUgYSBuZXcgZmx1c2ggc3RvcCBldmVudC4gVGhlIGZsdXNoIHN0b3AgZXZlbnQgY2FuIGJlIHNlbnQKLSAqIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGFuZCB0cmF2ZWxzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgZGF0YWZsb3cuCi0gKiBJdCBpcyB0eXBpY2FsbHkgc2VudCBhZnRlciBzZW5kaW5nIGEgRkxVU0hfU1RBUlQgZXZlbnQgdG8gbWFrZSB0aGUKLSAqIHBhZHMgYWNjZXB0IGRhdGEgYWdhaW4uCi0gKgotICogRWxlbWVudHMgY2FuIHByb2Nlc3MgdGhpcyBldmVudCBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgZGF0YWZsb3cgc2luY2UKLSAqIHRoZSBwcmVjZWRpbmcgRkxVU0hfU1RBUlQgZXZlbnQgc3RvcHBlZCB0aGUgZGF0YWZsb3cuCi0gKgotICogVGhpcyBldmVudCBpcyB0eXBpY2FsbHkgZ2VuZXJhdGVkIHRvIGNvbXBsZXRlIGEgc2VlayBhbmQgdG8gcmVzdW1lCi0gKiBkYXRhZmxvdy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGZsdXNoIHN0b3AgZXZlbnQuCi0gKi8KLUdzdEV2ZW50ICoKLWdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoZ2Jvb2xlYW4gcmVzZXRfdGltZSkKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotCi0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9FVkVOVCwgImNyZWF0aW5nIGZsdXNoIHN0b3AgJWQiLCByZXNldF90aW1lKTsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfRkxVU0hfU1RPUCwKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKEVWRU5UX0ZMVVNIX1NUT1ApLAotICAgICAgICAgIEdTVF9RVUFSSyAoUkVTRVRfVElNRSksIEdfVFlQRV9CT09MRUFOLCByZXNldF90aW1lLCBOVUxMKSk7Ci0KLSAgcmV0dXJuIGV2ZW50OwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wOgotICogQGV2ZW50OiBUaGUgZXZlbnQgdG8gcGFyc2UKLSAqIEByZXNldF90aW1lOiAob3V0KTogaWYgdGltZSBzaG91bGQgYmUgcmVzZXQKLSAqCi0gKiBQYXJzZSB0aGUgRkxVU0hfU1RPUCBldmVudCBhbmQgcmV0cmlldmUgdGhlIEByZXNldF90aW1lIG1lbWJlci4KLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AgKEdzdEV2ZW50ICogZXZlbnQsIGdib29sZWFuICogcmVzZXRfdGltZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9GTFVTSF9TVE9QKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7Ci0gIGlmIChHX0xJS0VMWSAocmVzZXRfdGltZSkpCi0gICAgKnJlc2V0X3RpbWUgPQotICAgICAgICBnX3ZhbHVlX2dldF9ib29sZWFuIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChSRVNFVF9USU1FKSkpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXM6Ci0gKiBAc3RyZWFtczogKGVsZW1lbnQtdHlwZSBnY2hhcikgKHRyYW5zZmVyIG5vbmUpOiB0aGUgbGlzdCBvZiBzdHJlYW1zIHRvCi0gKiBhY3RpdmF0ZQotICoKLSAqIEFsbG9jYXRlIGEgbmV3IHNlbGVjdC1zdHJlYW1zIGV2ZW50LgotICoKLSAqIFRoZSBzZWxlY3Qtc3RyZWFtcyBldmVudCByZXF1ZXN0cyB0aGUgc3BlY2lmaWVkIEBzdHJlYW1zIHRvIGJlIGFjdGl2YXRlZC4KLSAqCi0gKiBUaGUgbGlzdCBvZiBAc3RyZWFtcyBjb3JyZXNwb25kcyB0byB0aGUgIlN0cmVhbSBJRCIgb2YgZWFjaCBzdHJlYW0gdG8gYmUKLSAqIGFjdGl2YXRlZC4gVGhvc2UgSUQgY2FuIGJlIG9idGFpbmVkIHZpYSB0aGUgI0dzdFN0cmVhbSBvYmplY3RzIHByZXNlbnQKLSAqIGluICNHU1RfRVZFTlRfU1RSRUFNX1NUQVJULCAjR1NUX0VWRU5UX1NUUkVBTV9DT0xMRUNUSU9OIG9yIAotICogI0dTVF9NRVNTU0FHRV9TVFJFQU1fQ09MTEVDVElPTi4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHNlbGVjdC1zdHJlYW1zIGV2ZW50LgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLUdzdEV2ZW50ICoKLWdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMgKEdMaXN0ICogc3RyZWFtcykKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHVmFsdWUgdmFsID0gR19WQUxVRV9JTklUOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjOwotICBHTGlzdCAqdG1wbDsKLQotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsICJDcmVhdGluZyBuZXcgc2VsZWN0LXN0cmVhbXMgZXZlbnQiKTsKLSAgc3RydWMgPSBnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eSAoR1NUX1FVQVJLIChFVkVOVF9TRUxFQ1RfU1RSRUFNUykpOwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX0xJU1QpOwotICAvKiBGaWxsIHN0cnVjIHdpdGggc3RyZWFtcyAqLwotICBmb3IgKHRtcGwgPSBzdHJlYW1zOyB0bXBsOyB0bXBsID0gdG1wbC0+bmV4dCkgewotICAgIEdWYWx1ZSBzdHJ2YWwgPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgY29uc3QgZ2NoYXIgKnN0ciA9IChjb25zdCBnY2hhciAqKSB0bXBsLT5kYXRhOwotICAgIGdfdmFsdWVfaW5pdCAoJnN0cnZhbCwgR19UWVBFX1NUUklORyk7Ci0gICAgZ192YWx1ZV9zZXRfc3RyaW5nICgmc3RydmFsLCBzdHIpOwotICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF9hbmRfdGFrZV92YWx1ZSAoJnZhbCwgJnN0cnZhbCk7Ci0gIH0KLSAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChzdHJ1YywgR1NUX1FVQVJLIChTVFJFQU1TKSwgJnZhbCk7Ci0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9TRUxFQ1RfU1RSRUFNUywgc3RydWMpOwotCi0gIHJldHVybiBldmVudDsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfcGFyc2Vfc2VsZWN0X3N0cmVhbXM6Ci0gKiBAZXZlbnQ6IFRoZSBldmVudCB0byBwYXJzZQotICogQHN0cmVhbXM6IChvdXQpIChlbGVtZW50LXR5cGUgZ2NoYXIpICh0cmFuc2ZlciBmdWxsKTogdGhlIHN0cmVhbXMKLSAqCi0gKiBQYXJzZSB0aGUgU0VMRUNUX1NUUkVBTVMgZXZlbnQgYW5kIHJldHJpZXZlIHRoZSBjb250YWluZWQgc3RyZWFtcy4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi12b2lkCi1nc3RfZXZlbnRfcGFyc2Vfc2VsZWN0X3N0cmVhbXMgKEdzdEV2ZW50ICogZXZlbnQsIEdMaXN0ICoqIHN0cmVhbXMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHTGlzdCAqcmVzID0gTlVMTDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NFTEVDVF9TVFJFQU1TKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7Ci0gIGlmIChHX0xJS0VMWSAoc3RyZWFtcykpIHsKLSAgICBjb25zdCBHVmFsdWUgKnZsaXN0ID0KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChTVFJFQU1TKSk7Ci0gICAgZ3VpbnQgaSwgc3ogPSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodmxpc3QpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzejsgaSsrKSB7Ci0gICAgICBjb25zdCBHVmFsdWUgKnN0cnYgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHZsaXN0LCBpKTsKLSAgICAgIHJlcyA9IGdfbGlzdF9hcHBlbmQgKHJlcywgZ192YWx1ZV9kdXBfc3RyaW5nIChzdHJ2KSk7Ci0gICAgfQotICAgICpzdHJlYW1zID0gcmVzOwotICB9Ci19Ci0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X3N0cmVhbV9ncm91cF9kb25lOgotICogQGdyb3VwX2lkOiB0aGUgZ3JvdXAgaWQgb2YgdGhlIHN0cmVhbSBncm91cCB3aGljaCBpcyBlbmRpbmcKLSAqCi0gKiBDcmVhdGUgYSBuZXcgU3RyZWFtIEdyb3VwIERvbmUgZXZlbnQuIFRoZSBzdHJlYW0tZ3JvdXAtZG9uZSBldmVudCBjYW4KLSAqIG9ubHkgdHJhdmVsIGRvd25zdHJlYW0gc3luY2hyb25pemVkIHdpdGggdGhlIGJ1ZmZlciBmbG93LiBFbGVtZW50cwotICogdGhhdCByZWNlaXZlIHRoZSBldmVudCBvbiBhIHBhZCBzaG91bGQgaGFuZGxlIGl0IG1vc3RseSBsaWtlIEVPUywKLSAqIGFuZCBlbWl0IGFueSBkYXRhIG9yIHBlbmRpbmcgYnVmZmVycyB0aGF0IHdvdWxkIGRlcGVuZCBvbiBtb3JlIGRhdGEKLSAqIGFycml2aW5nIGFuZCB1bmJsb2NrLCBzaW5jZSB0aGVyZSB3b24ndCBiZSBhbnkgbW9yZSBkYXRhLgotICoKLSAqIFRoaXMgZXZlbnQgaXMgZm9sbG93ZWQgYnkgRU9TIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgYW5kIGlzCi0gKiBnZW5lcmFsbHkgdXNlZCB3aGVuIHN3aXRjaGluZyBwYWRzIC0gdG8gdW5ibG9jayBkb3duc3RyZWFtIHNvIHRoYXQKLSAqIG5ldyBwYWRzIGNhbiBiZSBleHBvc2VkIGJlZm9yZSBzZW5kaW5nIEVPUyBvbiB0aGUgZXhpc3RpbmcgcGFkcy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgc3RyZWFtLWdyb3VwLWRvbmUgZXZlbnQuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0RXZlbnQgKgotZ3N0X2V2ZW50X25ld19zdHJlYW1fZ3JvdXBfZG9uZSAoZ3VpbnQgZ3JvdXBfaWQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoRVZFTlRfU1RSRUFNX0dST1VQX0RPTkUpLAotICAgICAgR1NUX1FVQVJLIChHUk9VUF9JRCksIEdfVFlQRV9VSU5ULCBncm91cF9pZCwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfU1RSRUFNX0dST1VQX0RPTkUsIHMpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZToKLSAqIEBldmVudDogYSBzdHJlYW0tZ3JvdXAtZG9uZSBldmVudC4KLSAqIEBncm91cF9pZDogKG91dCk6IGFkZHJlc3Mgb2YgdmFyaWFibGUgdG8gc3RvcmUgdGhlIGdyb3VwIGlkIGludG8KLSAqCi0gKiBQYXJzZSBhIHN0cmVhbS1ncm91cC1kb25lIEBldmVudCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4KLSAqIEBncm91cF9pZCBsb2NhdGlvbi4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi12b2lkCi1nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2dyb3VwX2RvbmUgKEdzdEV2ZW50ICogZXZlbnQsIGd1aW50ICogZ3JvdXBfaWQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TVFJFQU1fR1JPVVBfRE9ORSk7Ci0KLSAgaWYgKGdyb3VwX2lkKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KSwKLSAgICAgICAgR1NUX1FVQVJLIChHUk9VUF9JRCksIEdfVFlQRV9VSU5ULCBncm91cF9pZCwgTlVMTCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X2VvczoKLSAqCi0gKiBDcmVhdGUgYSBuZXcgRU9TIGV2ZW50LiBUaGUgZW9zIGV2ZW50IGNhbiBvbmx5IHRyYXZlbCBkb3duc3RyZWFtCi0gKiBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cuIEVsZW1lbnRzIHRoYXQgcmVjZWl2ZSB0aGUgRU9TCi0gKiBldmVudCBvbiBhIHBhZCBjYW4gcmV0dXJuICNHU1RfRkxPV19FT1MgYXMgYSAjR3N0Rmxvd1JldHVybgotICogd2hlbiBkYXRhIGFmdGVyIHRoZSBFT1MgZXZlbnQgYXJyaXZlcy4KLSAqCi0gKiBUaGUgRU9TIGV2ZW50IHdpbGwgdHJhdmVsIGRvd24gdG8gdGhlIHNpbmsgZWxlbWVudHMgaW4gdGhlIHBpcGVsaW5lCi0gKiB3aGljaCB3aWxsIHRoZW4gcG9zdCB0aGUgI0dTVF9NRVNTQUdFX0VPUyBvbiB0aGUgYnVzIGFmdGVyIHRoZXkgaGF2ZQotICogZmluaXNoZWQgcGxheWluZyBhbnkgYnVmZmVyZWQgZGF0YS4KLSAqCi0gKiBXaGVuIGFsbCBzaW5rcyBoYXZlIHBvc3RlZCBhbiBFT1MgbWVzc2FnZSwgYW4gRU9TIG1lc3NhZ2UgaXMKLSAqIGZvcndhcmRlZCB0byB0aGUgYXBwbGljYXRpb24uCi0gKgotICogVGhlIEVPUyBldmVudCBpdHNlbGYgd2lsbCBub3QgY2F1c2UgYW55IHN0YXRlIHRyYW5zaXRpb25zIG9mIHRoZSBwaXBlbGluZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgRU9TIGV2ZW50LgotICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X2VvcyAodm9pZCkKLXsKLSAgcmV0dXJuIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfRU9TLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X2dhcDoKLSAqIEB0aW1lc3RhbXA6IHRoZSBzdGFydCB0aW1lIChwdHMpIG9mIHRoZSBnYXAKLSAqIEBkdXJhdGlvbjogdGhlIGR1cmF0aW9uIG9mIHRoZSBnYXAKLSAqCi0gKiBDcmVhdGUgYSBuZXcgR0FQIGV2ZW50LiBBIGdhcCBldmVudCBjYW4gYmUgdGhvdWdodCBvZiBhcyBjb25jZXB0dWFsbHkKLSAqIGVxdWl2YWxlbnQgdG8gYSBidWZmZXIgdG8gc2lnbmFsIHRoYXQgdGhlcmUgaXMgbm8gZGF0YSBmb3IgYSBjZXJ0YWluCi0gKiBhbW91bnQgb2YgdGltZS4gVGhpcyBpcyB1c2VmdWwgdG8gc2lnbmFsIGEgZ2FwIHRvIGRvd25zdHJlYW0gZWxlbWVudHMKLSAqIHdoaWNoIG1heSB3YWl0IGZvciBkYXRhLCBzdWNoIGFzIG11eGVycyBvciBtaXhlcnMgb3Igb3ZlcmxheXMsIGVzcGVjaWFsbHkKLSAqIGZvciBzcGFyc2Ugc3RyZWFtcyBzdWNoIGFzIHN1YnRpdGxlIHN0cmVhbXMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IEdBUCBldmVudC4KLSAqLwotR3N0RXZlbnQgKgotZ3N0X2V2ZW50X25ld19nYXAgKEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBkdXJhdGlvbikKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSwgTlVMTCk7Ci0KLSAgR1NUX0NBVF9UUkFDRSAoR1NUX0NBVF9FVkVOVCwgImNyZWF0aW5nIGdhcCAlIiBHU1RfVElNRV9GT1JNQVQgIiAtICIKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiAoZHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXAgKyBkdXJhdGlvbiksCi0gICAgICBHU1RfVElNRV9BUkdTIChkdXJhdGlvbikpOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9HQVAsCi0gICAgICBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChFVkVOVF9HQVApLAotICAgICAgICAgIEdTVF9RVUFSSyAoVElNRVNUQU1QKSwgR1NUX1RZUEVfQ0xPQ0tfVElNRSwgdGltZXN0YW1wLAotICAgICAgICAgIEdTVF9RVUFSSyAoRFVSQVRJT04pLCBHU1RfVFlQRV9DTE9DS19USU1FLCBkdXJhdGlvbiwgTlVMTCkpOwotCi0gIHJldHVybiBldmVudDsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfcGFyc2VfZ2FwOgotICogQGV2ZW50OiBhICNHc3RFdmVudCBvZiB0eXBlICNHU1RfRVZFTlRfR0FQCi0gKiBAdGltZXN0YW1wOiAob3V0KSAoYWxsb3ctbm9uZSk6IGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZQotICogICAgIHN0YXJ0IHRpbWUgKHB0cykgb2YgdGhlIGdhcCwgb3IgJU5VTEwKLSAqIEBkdXJhdGlvbjogKG91dCkgKGFsbG93LW5vbmUpOiBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSB0aGUgZHVyYXRpb24gb2YKLSAqICAgICB0aGUgZ2FwLCBvciAlTlVMTAotICoKLSAqIEV4dHJhY3QgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiBmcm9tIGEgbmV3IEdBUCBldmVudC4KLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX2dhcCAoR3N0RXZlbnQgKiBldmVudCwgR3N0Q2xvY2tUaW1lICogdGltZXN0YW1wLAotICAgIEdzdENsb2NrVGltZSAqIGR1cmF0aW9uKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0dBUCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOwotICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChUSU1FU1RBTVApLCBHU1RfVFlQRV9DTE9DS19USU1FLCB0aW1lc3RhbXAsCi0gICAgICBHU1RfUVVBUksgKERVUkFUSU9OKSwgR1NUX1RZUEVfQ0xPQ0tfVElNRSwgZHVyYXRpb24sIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9uZXdfY2FwczoKLSAqIEBjYXBzOiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdENhcHMKLSAqCi0gKiBDcmVhdGUgYSBuZXcgQ0FQUyBldmVudCBmb3IgQGNhcHMuIFRoZSBjYXBzIGV2ZW50IGNhbiBvbmx5IHRyYXZlbCBkb3duc3RyZWFtCi0gKiBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cgYW5kIGNvbnRhaW5zIHRoZSBmb3JtYXQgb2YgdGhlIGJ1ZmZlcnMKLSAqIHRoYXQgd2lsbCBmb2xsb3cgYWZ0ZXIgdGhlIGV2ZW50LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBDQVBTIGV2ZW50LgotICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X2NhcHMgKEdzdENhcHMgKiBjYXBzKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfY2Fwc19pc19maXhlZCAoY2FwcyksIE5VTEwpOwotCi0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9FVkVOVCwgImNyZWF0aW5nIGNhcHMgZXZlbnQgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DQVBTLAotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoRVZFTlRfQ0FQUyksCi0gICAgICAgICAgR1NUX1FVQVJLIChDQVBTKSwgR1NUX1RZUEVfQ0FQUywgY2FwcywgTlVMTCkpOwotCi0gIHJldHVybiBldmVudDsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfcGFyc2VfY2FwczoKLSAqIEBldmVudDogVGhlIGV2ZW50IHRvIHBhcnNlCi0gKiBAY2FwczogKG91dCkgKHRyYW5zZmVyIG5vbmUpOiBBIHBvaW50ZXIgdG8gdGhlIGNhcHMKLSAqCi0gKiBHZXQgdGhlIGNhcHMgZnJvbSBAZXZlbnQuIFRoZSBjYXBzIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcyBAZXZlbnQgcmVtYWlucwotICogdmFsaWQuCi0gKi8KLXZvaWQKLWdzdF9ldmVudF9wYXJzZV9jYXBzIChHc3RFdmVudCAqIGV2ZW50LCBHc3RDYXBzICoqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQ0FQUyk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOwotICBpZiAoR19MSUtFTFkgKGNhcHMpKQotICAgICpjYXBzID0KLSAgICAgICAgZ192YWx1ZV9nZXRfYm94ZWQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKENBUFMpKSk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X25ld19zZWdtZW50OgotICogQHNlZ21lbnQ6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0U2VnbWVudAotICoKLSAqIENyZWF0ZSBhIG5ldyBTRUdNRU5UIGV2ZW50IGZvciBAc2VnbWVudC4gVGhlIHNlZ21lbnQgZXZlbnQgY2FuIG9ubHkgdHJhdmVsCi0gKiBkb3duc3RyZWFtIHN5bmNocm9uaXplZCB3aXRoIHRoZSBidWZmZXIgZmxvdyBhbmQgY29udGFpbnMgdGltaW5nIGluZm9ybWF0aW9uCi0gKiBhbmQgcGxheWJhY2sgcHJvcGVydGllcyBmb3IgdGhlIGJ1ZmZlcnMgdGhhdCB3aWxsIGZvbGxvdy4KLSAqCi0gKiBUaGUgc2VnbWVudCBldmVudCBtYXJrcyB0aGUgcmFuZ2Ugb2YgYnVmZmVycyB0byBiZSBwcm9jZXNzZWQuIEFsbAotICogZGF0YSBub3Qgd2l0aGluIHRoZSBzZWdtZW50IHJhbmdlIGlzIG5vdCB0byBiZSBwcm9jZXNzZWQuIFRoaXMgY2FuIGJlCi0gKiB1c2VkIGludGVsbGlnZW50bHkgYnkgcGx1Z2lucyB0byBhcHBseSBtb3JlIGVmZmljaWVudCBtZXRob2RzIG9mIHNraXBwaW5nCi0gKiB1bm5lZWRlZCBkYXRhLiBUaGUgdmFsaWQgcmFuZ2UgaXMgZXhwcmVzc2VkIHdpdGggdGhlIEBzdGFydCBhbmQgQHN0b3AKLSAqIHZhbHVlcy4KLSAqCi0gKiBUaGUgdGltZSB2YWx1ZSBvZiB0aGUgc2VnbWVudCBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHN0YXJ0Ci0gKiB2YWx1ZSB0byBjb252ZXJ0IHRoZSBidWZmZXIgdGltZXN0YW1wcyBpbnRvIHRoZSBzdHJlYW0gdGltZS4gVGhpcyBpcwotICogdXN1YWxseSBkb25lIGluIHNpbmtzIHRvIHJlcG9ydCB0aGUgY3VycmVudCBzdHJlYW1fdGltZS4KLSAqIEB0aW1lIHJlcHJlc2VudHMgdGhlIHN0cmVhbV90aW1lIG9mIGEgYnVmZmVyIGNhcnJ5aW5nIGEgdGltZXN0YW1wIG9mCi0gKiBAc3RhcnQuIEB0aW1lIGNhbm5vdCBiZSAtMS4KLSAqCi0gKiBAc3RhcnQgY2Fubm90IGJlIC0xLCBAc3RvcCBjYW4gYmUgLTEuIElmIHRoZXJlCi0gKiBpcyBhIHZhbGlkIEBzdG9wIGdpdmVuLCBpdCBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhlIEBzdGFydCwgaW5jbHVkaW5nCi0gKiB3aGVuIHRoZSBpbmRpY2F0ZWQgcGxheWJhY2sgQHJhdGUgaXMgPCAwLgotICoKLSAqIFRoZSBAYXBwbGllZF9yYXRlIHZhbHVlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGFueSByYXRlIGFkanVzdG1lbnQgdGhhdAotICogaGFzIGFscmVhZHkgYmVlbiBtYWRlIHRvIHRoZSB0aW1lc3RhbXBzIGFuZCBjb250ZW50IG9uIHRoZSBidWZmZXJzIG9mIHRoZQotICogc3RyZWFtLiAoQHJhdGUgKiBAYXBwbGllZF9yYXRlKSBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSByYXRlIHRoYXQgaGFzIGJlZW4KLSAqIHJlcXVlc3RlZCBmb3IgcGxheWJhY2suIEZvciBleGFtcGxlLCBpZiBhbiBlbGVtZW50IGhhcyBhbiBpbnB1dCBzZWdtZW50Ci0gKiB3aXRoIGludGVuZGVkIHBsYXliYWNrIEByYXRlIG9mIDIuMCBhbmQgYXBwbGllZF9yYXRlIG9mIDEuMCwgaXQgY2FuIGFkanVzdAotICogaW5jb21pbmcgdGltZXN0YW1wcyBhbmQgYnVmZmVyIGNvbnRlbnQgYnkgaGFsZiBhbmQgb3V0cHV0IGEgc2VnbWVudCBldmVudAotICogd2l0aCBAcmF0ZSBvZiAxLjAgYW5kIEBhcHBsaWVkX3JhdGUgb2YgMi4wCi0gKgotICogQWZ0ZXIgYSBzZWdtZW50IGV2ZW50LCB0aGUgYnVmZmVyIHN0cmVhbSB0aW1lIGlzIGNhbGN1bGF0ZWQgd2l0aDoKLSAqCi0gKiAgIHRpbWUgKyAoVElNRVNUQU1QKGJ1ZikgLSBzdGFydCkgKiBBQlMgKHJhdGUgKiBhcHBsaWVkX3JhdGUpCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IFNFR01FTlQgZXZlbnQuCi0gKi8KLUdzdEV2ZW50ICoKLWdzdF9ldmVudF9uZXdfc2VnbWVudCAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQpCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudCAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQtPnJhdGUgIT0gMC4wLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQtPmFwcGxpZWRfcmF0ZSAhPSAwLjAsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudC0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVELCBOVUxMKTsKLQotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsICJjcmVhdGluZyBzZWdtZW50IGV2ZW50ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgIHNlZ21lbnQpOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9TRUdNRU5ULAotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoRVZFTlRfU0VHTUVOVCksCi0gICAgICAgICAgR1NUX1FVQVJLIChTRUdNRU5UKSwgR1NUX1RZUEVfU0VHTUVOVCwgc2VnbWVudCwgTlVMTCkpOwotCi0gIHJldHVybiBldmVudDsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudDoKLSAqIEBldmVudDogVGhlIGV2ZW50IHRvIHBhcnNlCi0gKiBAc2VnbWVudDogKG91dCkgKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgdG8gYSAjR3N0U2VnbWVudAotICoKLSAqIFBhcnNlcyBhIHNlZ21lbnQgQGV2ZW50IGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gQHNlZ21lbnQgbG9jYXRpb24uCi0gKiBAc2VnbWVudCByZW1haW5zIHZhbGlkIG9ubHkgdW50aWwgdGhlIEBldmVudCBpcyBmcmVlZC4gRG9uJ3QgbW9kaWZ5IHRoZSBzZWdtZW50Ci0gKiBhbmQgbWFrZSBhIGNvcHkgaWYgeW91IHdhbnQgdG8gbW9kaWZ5IGl0IG9yIHN0b3JlIGl0IGZvciBsYXRlciB1c2UuCi0gKi8KLXZvaWQKLWdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChHc3RFdmVudCAqIGV2ZW50LCBjb25zdCBHc3RTZWdtZW50ICoqIHNlZ21lbnQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCk7Ci0KLSAgaWYgKHNlZ21lbnQpIHsKLSAgICBzdHJ1Y3R1cmUgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7Ci0gICAgKnNlZ21lbnQgPSBnX3ZhbHVlX2dldF9ib3hlZCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoU0VHTUVOVCkpKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQ6Ci0gKiBAZXZlbnQ6IFRoZSBldmVudCB0byBwYXJzZQotICogQHNlZ21lbnQ6IGEgcG9pbnRlciB0byBhICNHc3RTZWdtZW50Ci0gKgotICogUGFyc2VzIGEgc2VnbWVudCBAZXZlbnQgYW5kIGNvcGllcyB0aGUgI0dzdFNlZ21lbnQgaW50byB0aGUgbG9jYXRpb24KLSAqIGdpdmVuIGJ5IEBzZWdtZW50LgotICovCi12b2lkCi1nc3RfZXZlbnRfY29weV9zZWdtZW50IChHc3RFdmVudCAqIGV2ZW50LCBHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgY29uc3QgR3N0U2VnbWVudCAqc3JjOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCk7Ci0KLSAgaWYgKHNlZ21lbnQpIHsKLSAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzcmMpOwotICAgIGdzdF9zZWdtZW50X2NvcHlfaW50byAoc3JjLCBzZWdtZW50KTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9ldmVudF9uZXdfdGFnOgotICogQHRhZ2xpc3Q6ICh0cmFuc2ZlciBmdWxsKTogbWV0YWRhdGEgbGlzdC4gVGhlIGV2ZW50IHdpbGwgdGFrZSBvd25lcnNoaXAKLSAqICAgICBvZiB0aGUgdGFnbGlzdC4KLSAqCi0gKiBHZW5lcmF0ZXMgYSBtZXRhZGF0YSB0YWcgZXZlbnQgZnJvbSB0aGUgZ2l2ZW4gQHRhZ2xpc3QuCi0gKgotICogVGhlIHNjb3BlIG9mIHRoZSB0YWdsaXN0IHNwZWNpZmllcyBpZiB0aGUgdGFnbGlzdCBhcHBsaWVzIHRvIHRoZQotICogY29tcGxldGUgbWVkaXVtIG9yIG9ubHkgdG8gdGhpcyBzcGVjaWZpYyBzdHJlYW0uIEFzIHRoZSB0YWcgZXZlbnQKLSAqIGlzIGEgc3RpY2t5IGV2ZW50LCBlbGVtZW50cyBzaG91bGQgbWVyZ2UgdGFncyByZWNlaXZlZCBmcm9tCi0gKiB1cHN0cmVhbSB3aXRoIGEgZ2l2ZW4gc2NvcGUgd2l0aCB0aGVpciBvd24gdGFncyB3aXRoIHRoZSBzYW1lCi0gKiBzY29wZSBhbmQgY3JlYXRlIGEgbmV3IHRhZyBldmVudCBmcm9tIGl0LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEV2ZW50Ci0gKi8KLUdzdEV2ZW50ICoKLWdzdF9ldmVudF9uZXdfdGFnIChHc3RUYWdMaXN0ICogdGFnbGlzdCkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHVmFsdWUgdmFsID0gR19WQUxVRV9JTklUOwotICBjb25zdCBnY2hhciAqbmFtZXNbXSA9IHsgIkdzdFRhZ0xpc3Qtc3RyZWFtIiwgIkdzdFRhZ0xpc3QtZ2xvYmFsIiB9OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWdsaXN0ICE9IE5VTEwsIE5VTEwpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAobmFtZXNbZ3N0X3RhZ19saXN0X2dldF9zY29wZSAodGFnbGlzdCldKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9UQUdfTElTVCk7Ci0gIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnZhbCwgdGFnbGlzdCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAocywgR1NUX1FVQVJLIChUQUdMSVNUKSwgJnZhbCk7Ci0gIHJldHVybiBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1RBRywgcyk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X3BhcnNlX3RhZzoKLSAqIEBldmVudDogYSB0YWcgZXZlbnQKLSAqIEB0YWdsaXN0OiAob3V0KSAodHJhbnNmZXIgbm9uZSk6IHBvaW50ZXIgdG8gbWV0YWRhdGEgbGlzdAotICoKLSAqIFBhcnNlcyBhIHRhZyBAZXZlbnQgYW5kIHN0b3JlcyB0aGUgcmVzdWx0cyBpbiB0aGUgZ2l2ZW4gQHRhZ2xpc3QgbG9jYXRpb24uCi0gKiBObyByZWZlcmVuY2UgdG8gdGhlIHRhZ2xpc3Qgd2lsbCBiZSByZXR1cm5lZCwgaXQgcmVtYWlucyB2YWxpZCBvbmx5IHVudGlsCi0gKiB0aGUgQGV2ZW50IGlzIGZyZWVkLiBEb24ndCBtb2RpZnkgb3IgZnJlZSB0aGUgdGFnbGlzdCwgbWFrZSBhIGNvcHkgaWYgeW91Ci0gKiB3YW50IHRvIG1vZGlmeSBpdCBvciBzdG9yZSBpdCBmb3IgbGF0ZXIgdXNlLgotICovCi12b2lkCi1nc3RfZXZlbnRfcGFyc2VfdGFnIChHc3RFdmVudCAqIGV2ZW50LCBHc3RUYWdMaXN0ICoqIHRhZ2xpc3QpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfVEFHKTsKLQotICB2YWwgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpLAotICAgICAgR1NUX1FVQVJLIChUQUdMSVNUKSk7Ci0KLSAgaWYgKHRhZ2xpc3QpCi0gICAgKnRhZ2xpc3QgPSAoR3N0VGFnTGlzdCAqKSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsKTsKLX0KLQotLyogYnVmZmVyc2l6ZSBldmVudCAqLwotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplOgotICogQGZvcm1hdDogYnVmZmVyIGZvcm1hdAotICogQG1pbnNpemU6IG1pbmltdW0gYnVmZmVyIHNpemUKLSAqIEBtYXhzaXplOiBtYXhpbXVtIGJ1ZmZlciBzaXplCi0gKiBAYXN5bmM6IHRocmVhZCBiZWhhdmlvcgotICoKLSAqIENyZWF0ZSBhIG5ldyBidWZmZXJzaXplIGV2ZW50LiBUaGUgZXZlbnQgaXMgc2VudCBkb3duc3RyZWFtIGFuZCBub3RpZmllcwotICogZWxlbWVudHMgdGhhdCB0aGV5IHNob3VsZCBwcm92aWRlIGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4KLSAqCi0gKiBXaGVuIHRoZSBAYXN5bmMgZmxhZyBpcyBzZXQsIGEgdGhyZWFkIGJvdW5kYXJ5IGlzIHByZWZlcnJlZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RFdmVudAotICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X2J1ZmZlcl9zaXplIChHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgbWluc2l6ZSwKLSAgICBnaW50NjQgbWF4c2l6ZSwgZ2Jvb2xlYW4gYXN5bmMpCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULAotICAgICAgImNyZWF0aW5nIGJ1ZmZlcnNpemUgZm9ybWF0ICVzLCBtaW5zaXplICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgIiwgbWF4c2l6ZSAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgYXN5bmMgJWQiLCBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpLAotICAgICAgbWluc2l6ZSwgbWF4c2l6ZSwgYXN5bmMpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKEVWRU5UX0JVRkZFUl9TSVpFKSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKE1JTlNJWkUpLCBHX1RZUEVfSU5UNjQsIG1pbnNpemUsCi0gICAgICBHU1RfUVVBUksgKE1BWFNJWkUpLCBHX1RZUEVfSU5UNjQsIG1heHNpemUsCi0gICAgICBHU1RfUVVBUksgKEFTWU5DKSwgR19UWVBFX0JPT0xFQU4sIGFzeW5jLCBOVUxMKTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0JVRkZFUlNJWkUsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIGV2ZW50OwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZToKLSAqIEBldmVudDogVGhlIGV2ZW50IHRvIHF1ZXJ5Ci0gKiBAZm9ybWF0OiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBmb3JtYXQgaW4KLSAqIEBtaW5zaXplOiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBtaW5zaXplIGluCi0gKiBAbWF4c2l6ZTogKG91dCk6IEEgcG9pbnRlciB0byBzdG9yZSB0aGUgbWF4c2l6ZSBpbgotICogQGFzeW5jOiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBhc3luYy1mbGFnIGluCi0gKgotICogR2V0IHRoZSBmb3JtYXQsIG1pbnNpemUsIG1heHNpemUgYW5kIGFzeW5jLWZsYWcgaW4gdGhlIGJ1ZmZlcnNpemUgZXZlbnQuCi0gKi8KLXZvaWQKLWdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZSAoR3N0RXZlbnQgKiBldmVudCwgR3N0Rm9ybWF0ICogZm9ybWF0LAotICAgIGdpbnQ2NCAqIG1pbnNpemUsIGdpbnQ2NCAqIG1heHNpemUsIGdib29sZWFuICogYXN5bmMpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQlVGRkVSU0laRSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOwotICBpZiAoZm9ybWF0KQotICAgICpmb3JtYXQgPSAoR3N0Rm9ybWF0KQotICAgICAgICBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChGT1JNQVQpKSk7Ci0gIGlmIChtaW5zaXplKQotICAgICptaW5zaXplID0KLSAgICAgICAgZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKE1JTlNJWkUpKSk7Ci0gIGlmIChtYXhzaXplKQotICAgICptYXhzaXplID0KLSAgICAgICAgZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKE1BWFNJWkUpKSk7Ci0gIGlmIChhc3luYykKLSAgICAqYXN5bmMgPQotICAgICAgICBnX3ZhbHVlX2dldF9ib29sZWFuIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChBU1lOQykpKTsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X3FvczoKLSAqIEB0eXBlOiB0aGUgUW9TIHR5cGUKLSAqIEBwcm9wb3J0aW9uOiB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgcW9zIG1lc3NhZ2UKLSAqIEBkaWZmOiBUaGUgdGltZSBkaWZmZXJlbmNlIG9mIHRoZSBsYXN0IENsb2NrIHN5bmMKLSAqIEB0aW1lc3RhbXA6IFRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlcgotICoKLSAqIEFsbG9jYXRlIGEgbmV3IHFvcyBldmVudCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXMuCi0gKiBUaGUgUU9TIGV2ZW50IGlzIGdlbmVyYXRlZCBpbiBhbiBlbGVtZW50IHRoYXQgd2FudHMgYW4gdXBzdHJlYW0KLSAqIGVsZW1lbnQgdG8gZWl0aGVyIHJlZHVjZSBvciBpbmNyZWFzZSBpdHMgcmF0ZSBiZWNhdXNlIG9mCi0gKiBoaWdoL2xvdyBDUFUgbG9hZCBvciBvdGhlciByZXNvdXJjZSB1c2FnZSBzdWNoIGFzIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3IKLSAqIHRocm90dGxpbmcuIFR5cGljYWxseSBzaW5rcyBnZW5lcmF0ZSB0aGVzZSBldmVudHMgZm9yIGVhY2ggYnVmZmVyCi0gKiB0aGV5IHJlY2VpdmUuCi0gKgotICogQHR5cGUgaW5kaWNhdGVzIHRoZSByZWFzb24gZm9yIHRoZSBRb1MgZXZlbnQuICNHU1RfUU9TX1RZUEVfT1ZFUkZMT1cgaXMKLSAqIHVzZWQgd2hlbiBhIGJ1ZmZlciBhcnJpdmVkIGluIHRpbWUgb3Igd2hlbiB0aGUgc2luayBjYW5ub3Qga2VlcCB1cCB3aXRoCi0gKiB0aGUgdXBzdHJlYW0gZGF0YXJhdGUuICNHU1RfUU9TX1RZUEVfVU5ERVJGTE9XIGlzIHdoZW4gdGhlIHNpbmsgaXMgbm90Ci0gKiByZWNlaXZpbmcgYnVmZmVycyBmYXN0IGVub3VnaCBhbmQgdGh1cyBoYXMgdG8gZHJvcCBsYXRlIGJ1ZmZlcnMuIAotICogI0dTVF9RT1NfVFlQRV9USFJPVFRMRSBpcyB1c2VkIHdoZW4gdGhlIGRhdGFyYXRlIGlzIGFydGlmaWNpYWxseSBsaW1pdGVkCi0gKiBieSB0aGUgYXBwbGljYXRpb24sIGZvciBleGFtcGxlIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4KLSAqCi0gKiBAcHJvcG9ydGlvbiBpbmRpY2F0ZXMgdGhlIHJlYWwtdGltZSBwZXJmb3JtYW5jZSBvZiB0aGUgc3RyZWFtaW5nIGluIHRoZQotICogZWxlbWVudCB0aGF0IGdlbmVyYXRlZCB0aGUgUW9TIGV2ZW50ICh1c3VhbGx5IHRoZSBzaW5rKS4gVGhlIHZhbHVlIGlzCi0gKiBnZW5lcmFsbHkgY29tcHV0ZWQgYmFzZWQgb24gbW9yZSBsb25nIHRlcm0gc3RhdGlzdGljcyBhYm91dCB0aGUgc3RyZWFtcwotICogdGltZXN0YW1wcyBjb21wYXJlZCB0byB0aGUgY2xvY2suCi0gKiBBIHZhbHVlIDwgMS4wIGluZGljYXRlcyB0aGF0IHRoZSB1cHN0cmVhbSBlbGVtZW50IGlzIHByb2R1Y2luZyBkYXRhIGZhc3RlcgotICogdGhhbiByZWFsLXRpbWUuIEEgdmFsdWUgPiAxLjAgaW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIGVsZW1lbnQgaXMgbm90Ci0gKiBwcm9kdWNpbmcgZGF0YSBmYXN0IGVub3VnaC4gMS4wIGlzIHRoZSBpZGVhbCBAcHJvcG9ydGlvbiB2YWx1ZS4gVGhlCi0gKiBwcm9wb3J0aW9uIHZhbHVlIGNhbiBzYWZlbHkgYmUgdXNlZCB0byBsb3dlciBvciBpbmNyZWFzZSB0aGUgcXVhbGl0eSBvZgotICogdGhlIGVsZW1lbnQuCi0gKgotICogQGRpZmYgaXMgdGhlIGRpZmZlcmVuY2UgYWdhaW5zdCB0aGUgY2xvY2sgaW4gcnVubmluZyB0aW1lIG9mIHRoZSBsYXN0Ci0gKiBidWZmZXIgdGhhdCBjYXVzZWQgdGhlIGVsZW1lbnQgdG8gZ2VuZXJhdGUgdGhlIFFPUyBldmVudC4gQSBuZWdhdGl2ZSB2YWx1ZQotICogbWVhbnMgdGhhdCB0aGUgYnVmZmVyIHdpdGggQHRpbWVzdGFtcCBhcnJpdmVkIGluIHRpbWUuIEEgcG9zaXRpdmUgdmFsdWUKLSAqIGluZGljYXRlcyBob3cgbGF0ZSB0aGUgYnVmZmVyIHdpdGggQHRpbWVzdGFtcCB3YXMuIFdoZW4gdGhyb3R0bGluZyBpcwotICogZW5hYmxlZCwgQGRpZmYgd2lsbCBiZSBzZXQgdG8gdGhlIHJlcXVlc3RlZCB0aHJvdHRsaW5nIGludGVydmFsLgotICoKLSAqIEB0aW1lc3RhbXAgaXMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBidWZmZXIgdGhhdCBjYXVzZSB0aGUgZWxlbWVudAotICogdG8gZ2VuZXJhdGUgdGhlIFFPUyBldmVudC4gSXQgaXMgZXhwcmVzc2VkIGluIHJ1bm5pbmcgdGltZSBhbmQgdGh1cyBhbiBldmVyCi0gKiBpbmNyZWFzaW5nIHZhbHVlLgotICoKLSAqIFRoZSB1cHN0cmVhbSBlbGVtZW50IGNhbiB1c2UgdGhlIEBkaWZmIGFuZCBAdGltZXN0YW1wIHZhbHVlcyB0byBkZWNpZGUKLSAqIHdoZXRoZXIgdG8gcHJvY2VzcyBtb3JlIGJ1ZmZlcnMuIEZvciBwb3NpdGl2ZSBAZGlmZiwgYWxsIGJ1ZmZlcnMgd2l0aAotICogdGltZXN0YW1wIDw9IEB0aW1lc3RhbXAgKyBAZGlmZiB3aWxsIGNlcnRhaW5seSBhcnJpdmUgbGF0ZSBpbiB0aGUgc2luawotICogYXMgd2VsbC4gQSAobmVnYXRpdmUpIEBkaWZmIHZhbHVlIHNvIHRoYXQgQHRpbWVzdGFtcCArIEBkaWZmIHdvdWxkIHlpZWxkIGEKLSAqIHJlc3VsdCBzbWFsbGVyIHRoYW4gMCBpcyBub3QgYWxsb3dlZC4KLSAqCi0gKiBUaGUgYXBwbGljYXRpb24gY2FuIHVzZSBnZW5lcmFsIGV2ZW50IHByb2JlcyB0byBpbnRlcmNlcHQgdGhlIFFvUwotICogZXZlbnQgYW5kIGltcGxlbWVudCBjdXN0b20gYXBwbGljYXRpb24gc3BlY2lmaWMgUW9TIGhhbmRsaW5nLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgUU9TIGV2ZW50LgotICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X3FvcyAoR3N0UU9TVHlwZSB0eXBlLCBnZG91YmxlIHByb3BvcnRpb24sCi0gICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIC8qIGRpZmYgbXVzdCBiZSBwb3NpdGl2ZSBvciB0aW1lc3RhbXAgKyBkaWZmIG11c3QgYmUgcG9zaXRpdmUgKi8KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRpZmYgPj0gMCB8fCAtZGlmZiA8PSB0aW1lc3RhbXAsIE5VTEwpOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0VWRU5ULAotICAgICAgImNyZWF0aW5nIHFvcyB0eXBlICVkLCBwcm9wb3J0aW9uICVsZiwgZGlmZiAlIiBHX0dJTlQ2NF9GT1JNQVQKLSAgICAgICIsIHRpbWVzdGFtcCAlIiBHU1RfVElNRV9GT1JNQVQsIHR5cGUsIHByb3BvcnRpb24sCi0gICAgICBkaWZmLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChFVkVOVF9RT1MpLAotICAgICAgR1NUX1FVQVJLIChUWVBFKSwgR1NUX1RZUEVfUU9TX1RZUEUsIHR5cGUsCi0gICAgICBHU1RfUVVBUksgKFBST1BPUlRJT04pLCBHX1RZUEVfRE9VQkxFLCBwcm9wb3J0aW9uLAotICAgICAgR1NUX1FVQVJLIChESUZGKSwgR19UWVBFX0lOVDY0LCBkaWZmLAotICAgICAgR1NUX1FVQVJLIChUSU1FU1RBTVApLCBHX1RZUEVfVUlOVDY0LCB0aW1lc3RhbXAsIE5VTEwpOwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfUU9TLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBldmVudDsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfcGFyc2VfcW9zOgotICogQGV2ZW50OiBUaGUgZXZlbnQgdG8gcXVlcnkKLSAqIEB0eXBlOiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBRb1MgdHlwZSBpbgotICogQHByb3BvcnRpb246IChvdXQpOiBBIHBvaW50ZXIgdG8gc3RvcmUgdGhlIHByb3BvcnRpb24gaW4KLSAqIEBkaWZmOiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBkaWZmIGluCi0gKiBAdGltZXN0YW1wOiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSB0aW1lc3RhbXAgaW4KLSAqCi0gKiBHZXQgdGhlIHR5cGUsIHByb3BvcnRpb24sIGRpZmYgYW5kIHRpbWVzdGFtcCBpbiB0aGUgcW9zIGV2ZW50LiBTZWUKLSAqIGdzdF9ldmVudF9uZXdfcW9zKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRpZmZlcmVudCBRb1MgdmFsdWVzLgotICoKLSAqIEB0aW1lc3RhbXAgd2lsbCBiZSBhZGp1c3RlZCBmb3IgYW55IHBhZCBvZmZzZXRzIG9mIHBhZHMgaXQgd2FzIHBhc3NpbmcgdGhyb3VnaC4KLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX3FvcyAoR3N0RXZlbnQgKiBldmVudCwgR3N0UU9TVHlwZSAqIHR5cGUsCi0gICAgZ2RvdWJsZSAqIHByb3BvcnRpb24sIEdzdENsb2NrVGltZURpZmYgKiBkaWZmLCBHc3RDbG9ja1RpbWUgKiB0aW1lc3RhbXApCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfUU9TKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7Ci0gIGlmICh0eXBlKQotICAgICp0eXBlID0gKEdzdFFPU1R5cGUpCi0gICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFRZUEUpKSk7Ci0gIGlmIChwcm9wb3J0aW9uKQotICAgICpwcm9wb3J0aW9uID0KLSAgICAgICAgZ192YWx1ZV9nZXRfZG91YmxlIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChQUk9QT1JUSU9OKSkpOwotICBpZiAoZGlmZikKLSAgICAqZGlmZiA9Ci0gICAgICAgIGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChESUZGKSkpOwotICBpZiAodGltZXN0YW1wKSB7Ci0gICAgZ2ludDY0IG9mZnNldCA9IGdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldCAoZXZlbnQpOwotICAgIEdzdENsb2NrVGltZURpZmYgZGlmZl8gPQotICAgICAgICBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoRElGRikpKTsKLQotICAgICp0aW1lc3RhbXAgPQotICAgICAgICBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFRJTUVTVEFNUCkpKTsKLSAgICAvKiBDYXRjaCB1bmRlcmZsb3dzICovCi0gICAgaWYgKCp0aW1lc3RhbXAgPiAtb2Zmc2V0KQotICAgICAgKnRpbWVzdGFtcCArPSBvZmZzZXQ7Ci0gICAgZWxzZQotICAgICAgKnRpbWVzdGFtcCA9IDA7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aW1lc3RhbXAgKyBkaWZmIGlzIGFsd2F5cyA+PSAwLiBCZWNhdXNlCi0gICAgICogb2YgdGhlIHJ1bm5pbmcgdGltZSBvZmZzZXQgdGhpcyBtaWdodCBub3QgYmUgdHJ1ZSAqLwotICAgIGlmIChkaWZmXyA8IDAgJiYgKnRpbWVzdGFtcCA8IC1kaWZmXykKLSAgICAgICp0aW1lc3RhbXAgPSAoR3N0Q2xvY2tUaW1lKSAtIGRpZmZfOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X25ld19zZWVrOgotICogQHJhdGU6IFRoZSBuZXcgcGxheWJhY2sgcmF0ZQotICogQGZvcm1hdDogVGhlIGZvcm1hdCBvZiB0aGUgc2VlayB2YWx1ZXMKLSAqIEBmbGFnczogVGhlIG9wdGlvbmFsIHNlZWsgZmxhZ3MKLSAqIEBzdGFydF90eXBlOiBUaGUgdHlwZSBhbmQgZmxhZ3MgZm9yIHRoZSBuZXcgc3RhcnQgcG9zaXRpb24KLSAqIEBzdGFydDogVGhlIHZhbHVlIG9mIHRoZSBuZXcgc3RhcnQgcG9zaXRpb24KLSAqIEBzdG9wX3R5cGU6IFRoZSB0eXBlIGFuZCBmbGFncyBmb3IgdGhlIG5ldyBzdG9wIHBvc2l0aW9uCi0gKiBAc3RvcDogVGhlIHZhbHVlIG9mIHRoZSBuZXcgc3RvcCBwb3NpdGlvbgotICoKLSAqIEFsbG9jYXRlIGEgbmV3IHNlZWsgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KLSAqCi0gKiBUaGUgc2VlayBldmVudCBjb25maWd1cmVzIHBsYXliYWNrIG9mIHRoZSBwaXBlbGluZSBiZXR3ZWVuIEBzdGFydCB0byBAc3RvcAotICogYXQgdGhlIHNwZWVkIGdpdmVuIGluIEByYXRlLCBhbHNvIGNhbGxlZCBhIHBsYXliYWNrIHNlZ21lbnQuCi0gKiBUaGUgQHN0YXJ0IGFuZCBAc3RvcCB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBpbiBAZm9ybWF0LgotICoKLSAqIEEgQHJhdGUgb2YgMS4wIG1lYW5zIG5vcm1hbCBwbGF5YmFjayByYXRlLCAyLjAgbWVhbnMgZG91YmxlIHNwZWVkLgotICogTmVnYXRpdmVzIHZhbHVlcyBtZWFucyBiYWNrd2FyZHMgcGxheWJhY2suIEEgdmFsdWUgb2YgMC4wIGZvciB0aGUKLSAqIHJhdGUgaXMgbm90IGFsbG93ZWQgYW5kIHNob3VsZCBiZSBhY2NvbXBsaXNoZWQgaW5zdGVhZCBieSBQQVVTSU5HIHRoZQotICogcGlwZWxpbmUuCi0gKgotICogQSBwaXBlbGluZSBoYXMgYSBkZWZhdWx0IHBsYXliYWNrIHNlZ21lbnQgY29uZmlndXJlZCB3aXRoIGEgc3RhcnQKLSAqIHBvc2l0aW9uIG9mIDAsIGEgc3RvcCBwb3NpdGlvbiBvZiAtMSBhbmQgYSByYXRlIG9mIDEuMC4gVGhlIGN1cnJlbnRseQotICogY29uZmlndXJlZCBwbGF5YmFjayBzZWdtZW50IGNhbiBiZSBxdWVyaWVkIHdpdGggI0dTVF9RVUVSWV9TRUdNRU5ULiAKLSAqCi0gKiBAc3RhcnRfdHlwZSBhbmQgQHN0b3BfdHlwZSBzcGVjaWZ5IGhvdyB0byBhZGp1c3QgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIAotICogc3RhcnQgYW5kIHN0b3AgZmllbGRzIGluIHBsYXliYWNrIHNlZ21lbnQuIEFkanVzdG1lbnRzIGNhbiBiZSBtYWRlIHJlbGF0aXZlCi0gKiBvciBhYnNvbHV0ZSB0byB0aGUgbGFzdCBjb25maWd1cmVkIHZhbHVlcy4gQSB0eXBlIG9mICNHU1RfU0VFS19UWVBFX05PTkUKLSAqIG1lYW5zIHRoYXQgdGhlIHBvc2l0aW9uIHNob3VsZCBub3QgYmUgdXBkYXRlZC4KLSAqCi0gKiBXaGVuIHRoZSByYXRlIGlzIHBvc2l0aXZlIGFuZCBAc3RhcnQgaGFzIGJlZW4gdXBkYXRlZCwgcGxheWJhY2sgd2lsbCBzdGFydAotICogZnJvbSB0aGUgbmV3bHkgY29uZmlndXJlZCBzdGFydCBwb3NpdGlvbi4gCi0gKgotICogRm9yIG5lZ2F0aXZlIHJhdGVzLCBwbGF5YmFjayB3aWxsIHN0YXJ0IGZyb20gdGhlIG5ld2x5IGNvbmZpZ3VyZWQgc3RvcAotICogcG9zaXRpb24gKGlmIGFueSkuIElmIHRoZSBzdG9wIHBvc2l0aW9uIGlzIHVwZGF0ZWQsIGl0IG11c3QgYmUgZGlmZmVyZW50IGZyb20KLSAqIC0xICgjR1NUX0NMT0NLX1RJTUVfTk9ORSkgZm9yIG5lZ2F0aXZlIHJhdGVzLgotICoKLSAqIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLCB0byBkbwotICogdGhpcywgUEFVU0UgdGhlIHBpcGVsaW5lLCBxdWVyeSB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiB3aXRoCi0gKiAjR1NUX1FVRVJZX1BPU0lUSU9OIGFuZCB1cGRhdGUgdGhlIHBsYXliYWNrIHNlZ21lbnQgY3VycmVudCBwb3NpdGlvbiB3aXRoIGEKLSAqICNHU1RfU0VFS19UWVBFX1NFVCB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHNlZWsgZXZlbnQuCi0gKi8KLUdzdEV2ZW50ICoKLWdzdF9ldmVudF9uZXdfc2VlayAoZ2RvdWJsZSByYXRlLCBHc3RGb3JtYXQgZm9ybWF0LCBHc3RTZWVrRmxhZ3MgZmxhZ3MsCi0gICAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgZ2ludDY0IHN0YXJ0LCBHc3RTZWVrVHlwZSBzdG9wX3R5cGUsIGdpbnQ2NCBzdG9wKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyYXRlICE9IDAuMCwgTlVMTCk7Ci0KLSAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsCi0gICAgICAgICJjcmVhdGluZyBzZWVrIHJhdGUgJWxmLCBmb3JtYXQgVElNRSwgZmxhZ3MgJWQsICIKLSAgICAgICAgInN0YXJ0X3R5cGUgJWQsIHN0YXJ0ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCAiCi0gICAgICAgICJzdG9wX3R5cGUgJWQsIHN0b3AgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICByYXRlLCBmbGFncywgc3RhcnRfdHlwZSwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLAotICAgICAgICBzdG9wX3R5cGUsIEdTVF9USU1FX0FSR1MgKHN0b3ApKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsCi0gICAgICAgICJjcmVhdGluZyBzZWVrIHJhdGUgJWxmLCBmb3JtYXQgJXMsIGZsYWdzICVkLCAiCi0gICAgICAgICJzdGFydF90eXBlICVkLCBzdGFydCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgIgotICAgICAgICAic3RvcF90eXBlICVkLCBzdG9wICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgcmF0ZSwgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSwgZmxhZ3MsIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsCi0gICAgICAgIHN0b3ApOwotICB9Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoRVZFTlRfU0VFSyksCi0gICAgICBHU1RfUVVBUksgKFJBVEUpLCBHX1RZUEVfRE9VQkxFLCByYXRlLAotICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKLSAgICAgIEdTVF9RVUFSSyAoRkxBR1MpLCBHU1RfVFlQRV9TRUVLX0ZMQUdTLCBmbGFncywKLSAgICAgIEdTVF9RVUFSSyAoQ1VSX1RZUEUpLCBHU1RfVFlQRV9TRUVLX1RZUEUsIHN0YXJ0X3R5cGUsCi0gICAgICBHU1RfUVVBUksgKENVUiksIEdfVFlQRV9JTlQ2NCwgc3RhcnQsCi0gICAgICBHU1RfUVVBUksgKFNUT1BfVFlQRSksIEdTVF9UWVBFX1NFRUtfVFlQRSwgc3RvcF90eXBlLAotICAgICAgR1NUX1FVQVJLIChTVE9QKSwgR19UWVBFX0lOVDY0LCBzdG9wLCBOVUxMKTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1NFRUssIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIGV2ZW50OwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9zZWVrOgotICogQGV2ZW50OiBhIHNlZWsgZXZlbnQKLSAqIEByYXRlOiAob3V0KTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcmF0ZQotICogQGZvcm1hdDogKG91dCk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHN0cmVhbSBmb3JtYXQKLSAqIEBmbGFnczogIChvdXQpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSAjR3N0U2Vla0ZsYWdzCi0gKiBAc3RhcnRfdHlwZTogKG91dCk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlICNHc3RTZWVrVHlwZSBvZiB0aGUgc3RhcnQgcG9zaXRpb24KLSAqIEBzdGFydDogKG91dCk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHN0YXJ0IHBvc2l0aW9uIGV4cHJlc3NlZCBpbiBAZm9ybWF0Ci0gKiBAc3RvcF90eXBlOiAgKG91dCk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlICNHc3RTZWVrVHlwZSBvZiB0aGUgc3RvcCBwb3NpdGlvbgotICogQHN0b3A6IChvdXQpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBzdG9wIHBvc2l0aW9uIGV4cHJlc3NlZCBpbiBAZm9ybWF0Ci0gKgotICogUGFyc2VzIGEgc2VlayBAZXZlbnQgYW5kIHN0b3JlcyB0aGUgcmVzdWx0cyBpbiB0aGUgZ2l2ZW4gcmVzdWx0IGxvY2F0aW9ucy4KLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKEdzdEV2ZW50ICogZXZlbnQsIGdkb3VibGUgKiByYXRlLAotICAgIEdzdEZvcm1hdCAqIGZvcm1hdCwgR3N0U2Vla0ZsYWdzICogZmxhZ3MsIEdzdFNlZWtUeXBlICogc3RhcnRfdHlwZSwKLSAgICBnaW50NjQgKiBzdGFydCwgR3N0U2Vla1R5cGUgKiBzdG9wX3R5cGUsIGdpbnQ2NCAqIHN0b3ApCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VFSyk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOwotICBpZiAocmF0ZSkKLSAgICAqcmF0ZSA9Ci0gICAgICAgIGdfdmFsdWVfZ2V0X2RvdWJsZSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoUkFURSkpKTsKLSAgaWYgKGZvcm1hdCkKLSAgICAqZm9ybWF0ID0gKEdzdEZvcm1hdCkKLSAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOwotICBpZiAoZmxhZ3MpCi0gICAgKmZsYWdzID0gKEdzdFNlZWtGbGFncykKLSAgICAgICAgZ192YWx1ZV9nZXRfZmxhZ3MgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEZMQUdTKSkpOwotICBpZiAoc3RhcnRfdHlwZSkKLSAgICAqc3RhcnRfdHlwZSA9IChHc3RTZWVrVHlwZSkKLSAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQ1VSX1RZUEUpKSk7Ci0gIGlmIChzdGFydCkKLSAgICAqc3RhcnQgPQotICAgICAgICBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQ1VSKSkpOwotICBpZiAoc3RvcF90eXBlKQotICAgICpzdG9wX3R5cGUgPSAoR3N0U2Vla1R5cGUpCi0gICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFNUT1BfVFlQRSkpKTsKLSAgaWYgKHN0b3ApCi0gICAgKnN0b3AgPQotICAgICAgICBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoU1RPUCkpKTsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X25hdmlnYXRpb246Ci0gKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCk6IGRlc2NyaXB0aW9uIG9mIHRoZSBldmVudC4gVGhlIGV2ZW50IHdpbGwgdGFrZQotICogICAgIG93bmVyc2hpcCBvZiB0aGUgc3RydWN0dXJlLgotICoKLSAqIENyZWF0ZSBhIG5ldyBuYXZpZ2F0aW9uIGV2ZW50IGZyb20gdGhlIGdpdmVuIGRlc2NyaXB0aW9uLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEV2ZW50Ci0gKi8KLUdzdEV2ZW50ICoKLWdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbiAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX05BVklHQVRJT04sIHN0cnVjdHVyZSk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X25ld19sYXRlbmN5OgotICogQGxhdGVuY3k6IHRoZSBuZXcgbGF0ZW5jeSB2YWx1ZQotICoKLSAqIENyZWF0ZSBhIG5ldyBsYXRlbmN5IGV2ZW50LiBUaGUgZXZlbnQgaXMgc2VudCB1cHN0cmVhbSBmcm9tIHRoZSBzaW5rcyBhbmQKLSAqIG5vdGlmaWVzIGVsZW1lbnRzIHRoYXQgdGhleSBzaG91bGQgYWRkIGFuIGFkZGl0aW9uYWwgQGxhdGVuY3kgdG8gdGhlCi0gKiBydW5uaW5nIHRpbWUgYmVmb3JlIHN5bmNocm9uaXNpbmcgYWdhaW5zdCB0aGUgY2xvY2suCi0gKgotICogVGhlIGxhdGVuY3kgaXMgbW9zdGx5IHVzZWQgaW4gbGl2ZSBzaW5rcyBhbmQgaXMgYWx3YXlzIGV4cHJlc3NlZCBpbgotICogdGhlIHRpbWUgZm9ybWF0LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEV2ZW50Ci0gKi8KLUdzdEV2ZW50ICoKLWdzdF9ldmVudF9uZXdfbGF0ZW5jeSAoR3N0Q2xvY2tUaW1lIGxhdGVuY3kpCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULAotICAgICAgImNyZWF0aW5nIGxhdGVuY3kgZXZlbnQgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChsYXRlbmN5KSk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoRVZFTlRfTEFURU5DWSksCi0gICAgICBHU1RfUVVBUksgKExBVEVOQ1kpLCBHX1RZUEVfVUlOVDY0LCBsYXRlbmN5LCBOVUxMKTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0xBVEVOQ1ksIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIGV2ZW50OwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9sYXRlbmN5OgotICogQGV2ZW50OiBUaGUgZXZlbnQgdG8gcXVlcnkKLSAqIEBsYXRlbmN5OiAob3V0KTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSBsYXRlbmN5IGluLgotICoKLSAqIEdldCB0aGUgbGF0ZW5jeSBpbiB0aGUgbGF0ZW5jeSBldmVudC4KLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kgKEdzdEV2ZW50ICogZXZlbnQsIEdzdENsb2NrVGltZSAqIGxhdGVuY3kpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfTEFURU5DWSk7Ci0KLSAgaWYgKGxhdGVuY3kpCi0gICAgKmxhdGVuY3kgPQotICAgICAgICBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChHU1RfRVZFTlRfU1RSVUNUVVJFCi0gICAgICAgICAgICAoZXZlbnQpLCBHU1RfUVVBUksgKExBVEVOQ1kpKSk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X25ld19zdGVwOgotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiBAYW1vdW50Ci0gKiBAYW1vdW50OiB0aGUgYW1vdW50IG9mIGRhdGEgdG8gc3RlcAotICogQHJhdGU6IHRoZSBzdGVwIHJhdGUKLSAqIEBmbHVzaDogZmx1c2hpbmcgc3RlcHMKLSAqIEBpbnRlcm1lZGlhdGU6IGludGVybWVkaWF0ZSBzdGVwcwotICoKLSAqIENyZWF0ZSBhIG5ldyBzdGVwIGV2ZW50LiBUaGUgcHVycG9zZSBvZiB0aGUgc3RlcCBldmVudCBpcyB0byBpbnN0cnVjdCBhIHNpbmsKLSAqIHRvIHNraXAgQGFtb3VudCAoZXhwcmVzc2VkIGluIEBmb3JtYXQpIG9mIG1lZGlhLiBJdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQKLSAqIHN0ZXBwaW5nIHRocm91Z2ggdGhlIHZpZGVvIGZyYW1lIGJ5IGZyYW1lIG9yIGZvciBkb2luZyBmYXN0IHRyaWNrIG1vZGVzLgotICoKLSAqIEEgcmF0ZSBvZiA8PSAwLjAgaXMgbm90IGFsbG93ZWQuIFBhdXNlIHRoZSBwaXBlbGluZSwgZm9yIHRoZSBlZmZlY3Qgb2YgcmF0ZQotICogPSAwLjAgb3IgZmlyc3QgcmV2ZXJzZSB0aGUgZGlyZWN0aW9uIG9mIHBsYXliYWNrIHVzaW5nIGEgc2VlayBldmVudCB0byBnZXQKLSAqIHRoZSBzYW1lIGVmZmVjdCBhcyByYXRlIDwgMC4wLgotICoKLSAqIFRoZSBAZmx1c2ggZmxhZyB3aWxsIGNsZWFyIGFueSBwZW5kaW5nIGRhdGEgaW4gdGhlIHBpcGVsaW5lIGJlZm9yZSBzdGFydGluZwotICogdGhlIHN0ZXAgb3BlcmF0aW9uLgotICoKLSAqIFRoZSBAaW50ZXJtZWRpYXRlIGZsYWcgaW5zdHJ1Y3RzIHRoZSBwaXBlbGluZSB0aGF0IHRoaXMgc3RlcCBvcGVyYXRpb24gaXMKLSAqIHBhcnQgb2YgYSBsYXJnZXIgc3RlcCBvcGVyYXRpb24uCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0RXZlbnQKLSAqLwotR3N0RXZlbnQgKgotZ3N0X2V2ZW50X25ld19zdGVwIChHc3RGb3JtYXQgZm9ybWF0LCBndWludDY0IGFtb3VudCwgZ2RvdWJsZSByYXRlLAotICAgIGdib29sZWFuIGZsdXNoLCBnYm9vbGVhbiBpbnRlcm1lZGlhdGUpCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJhdGUgPiAwLjAsIE5VTEwpOwotCi0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9FVkVOVCwgImNyZWF0aW5nIHN0ZXAgZXZlbnQiKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChFVkVOVF9TVEVQKSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKEFNT1VOVCksIEdfVFlQRV9VSU5UNjQsIGFtb3VudCwKLSAgICAgIEdTVF9RVUFSSyAoUkFURSksIEdfVFlQRV9ET1VCTEUsIHJhdGUsCi0gICAgICBHU1RfUVVBUksgKEZMVVNIKSwgR19UWVBFX0JPT0xFQU4sIGZsdXNoLAotICAgICAgR1NUX1FVQVJLIChJTlRFUk1FRElBVEUpLCBHX1RZUEVfQk9PTEVBTiwgaW50ZXJtZWRpYXRlLCBOVUxMKTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1NURVAsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIGV2ZW50OwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9zdGVwOgotICogQGV2ZW50OiBUaGUgZXZlbnQgdG8gcXVlcnkKLSAqIEBmb3JtYXQ6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBmb3JtYXQgaW4KLSAqIEBhbW91bnQ6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvIHN0b3JlIHRoZSBhbW91bnQgaW4KLSAqIEByYXRlOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmF0ZSBpbgotICogQGZsdXNoOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgZmx1c2ggYm9vbGVhbiBpbgotICogQGludGVybWVkaWF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGludGVybWVkaWF0ZQotICogICAgIGJvb2xlYW4gaW4KLSAqCi0gKiBQYXJzZSB0aGUgc3RlcCBldmVudC4KLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX3N0ZXAgKEdzdEV2ZW50ICogZXZlbnQsIEdzdEZvcm1hdCAqIGZvcm1hdCwgZ3VpbnQ2NCAqIGFtb3VudCwKLSAgICBnZG91YmxlICogcmF0ZSwgZ2Jvb2xlYW4gKiBmbHVzaCwgZ2Jvb2xlYW4gKiBpbnRlcm1lZGlhdGUpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU1RFUCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpOwotICBpZiAoZm9ybWF0KQotICAgICpmb3JtYXQgPQotICAgICAgICAoR3N0Rm9ybWF0KSBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChGT1JNQVQpKSk7Ci0gIGlmIChhbW91bnQpCi0gICAgKmFtb3VudCA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQU1PVU5UKSkpOwotICBpZiAocmF0ZSkKLSAgICAqcmF0ZSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoUkFURSkpKTsKLSAgaWYgKGZsdXNoKQotICAgICpmbHVzaCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEZMVVNIKSkpOwotICBpZiAoaW50ZXJtZWRpYXRlKQotICAgICppbnRlcm1lZGlhdGUgPSBnX3ZhbHVlX2dldF9ib29sZWFuIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChJTlRFUk1FRElBVEUpKSk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZToKLQotICogQ3JlYXRlIGEgbmV3IHJlY29uZmlndXJlIGV2ZW50LiBUaGUgcHVycG9zZSBvZiB0aGUgcmVjb25maWd1cmUgZXZlbnQgaXMKLSAqIHRvIHRyYXZlbCB1cHN0cmVhbSBhbmQgbWFrZSBlbGVtZW50cyByZW5lZ290aWF0ZSB0aGVpciBjYXBzIG9yIHJlY29uZmlndXJlCi0gKiB0aGVpciBidWZmZXIgcG9vbHMuIFRoaXMgaXMgdXNlZnVsIHdoZW4gY2hhbmdpbmcgcHJvcGVydGllcyBvbiBlbGVtZW50cwotICogb3IgY2hhbmdpbmcgdGhlIHRvcG9sb2d5IG9mIHRoZSBwaXBlbGluZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RFdmVudAotICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICh2b2lkKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULCAiY3JlYXRpbmcgcmVjb25maWd1cmUgZXZlbnQiKTsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfUkVDT05GSUdVUkUsIE5VTEwpOwotCi0gIHJldHVybiBldmVudDsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZToKLSAqIEBuYW1lOiBhIG5hbWUgZm9yIHRoZSBldmVudAotICogQG1zZzogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdE1lc3NhZ2UgdG8gYmUgcG9zdGVkCi0gKgotICogQ3JlYXRlIGEgbmV3IHNpbmstbWVzc2FnZSBldmVudC4gVGhlIHB1cnBvc2Ugb2YgdGhlIHNpbmstbWVzc2FnZSBldmVudCBpcwotICogdG8gaW5zdHJ1Y3QgYSBzaW5rIHRvIHBvc3QgdGhlIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBldmVudCBzeW5jaHJvbml6ZWQKLSAqIHdpdGggdGhlIHN0cmVhbS4KLSAqCi0gKiBAbmFtZSBpcyB1c2VkIHRvIHN0b3JlIG11bHRpcGxlIHN0aWNreSBldmVudHMgb24gb25lIHBhZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RFdmVudAotICovCi0vKiBGSVhNRSAyLjA6IHRha2Ugb3duZXJzaGlwIG9mIG1zZyBmb3IgY29uc2lzdGVuY3k/ICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X3NpbmtfbWVzc2FnZSAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RNZXNzYWdlICogbXNnKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtc2cgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VWRU5ULCAiY3JlYXRpbmcgc2luay1tZXNzYWdlIGV2ZW50Iik7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKGdfcXVhcmtfZnJvbV9zdHJpbmcgKG5hbWUpLAotICAgICAgR1NUX1FVQVJLIChNRVNTQUdFKSwgR1NUX1RZUEVfTUVTU0FHRSwgbXNnLCBOVUxMKTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1NJTktfTUVTU0FHRSwgc3RydWN0dXJlKTsKLQotICByZXR1cm4gZXZlbnQ7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZToKLSAqIEBldmVudDogVGhlIGV2ZW50IHRvIHF1ZXJ5Ci0gKiBAbXNnOiAob3V0KSAodHJhbnNmZXIgZnVsbCk6IGEgcG9pbnRlciB0byBzdG9yZSB0aGUgI0dzdE1lc3NhZ2UgaW4uCi0gKgotICogUGFyc2UgdGhlIHNpbmstbWVzc2FnZSBldmVudC4gVW5yZWYgQG1zZyBhZnRlciB1c2FnZS4KLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZSAoR3N0RXZlbnQgKiBldmVudCwgR3N0TWVzc2FnZSAqKiBtc2cpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0lOS19NRVNTQUdFKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCk7Ci0gIGlmIChtc2cpCi0gICAgKm1zZyA9Ci0gICAgICAgIEdTVF9NRVNTQUdFIChnX3ZhbHVlX2R1cF9ib3hlZCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUKLSAgICAgICAgICAgIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoTUVTU0FHRSkpKSk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQ6Ci0gKiBAc3RyZWFtX2lkOiBJZGVudGlmaWVyIGZvciB0aGlzIHN0cmVhbQotICoKLSAqIENyZWF0ZSBhIG5ldyBTVFJFQU1fU1RBUlQgZXZlbnQuIFRoZSBzdHJlYW0gc3RhcnQgZXZlbnQgY2FuIG9ubHkKLSAqIHRyYXZlbCBkb3duc3RyZWFtIHN5bmNocm9uaXplZCB3aXRoIHRoZSBidWZmZXIgZmxvdy4gSXQgaXMgZXhwZWN0ZWQKLSAqIHRvIGJlIHRoZSBmaXJzdCBldmVudCB0aGF0IGlzIHNlbnQgZm9yIGEgbmV3IHN0cmVhbS4KLSAqCi0gKiBTb3VyY2UgZWxlbWVudHMsIGRlbXV4ZXJzIGFuZCBvdGhlciBlbGVtZW50cyB0aGF0IGNyZWF0ZSBuZXcgc3RyZWFtcwotICogYXJlIHN1cHBvc2VkIHRvIHNlbmQgdGhpcyBldmVudCBhcyB0aGUgZmlyc3QgZXZlbnQgb2YgYSBuZXcgc3RyZWFtLiBJdAotICogc2hvdWxkIG5vdCBiZSBzZW50IGFmdGVyIGEgZmx1c2hpbmcgc2VlayBvciBpbiBzaW1pbGFyIHNpdHVhdGlvbnMKLSAqIGFuZCBpcyB1c2VkIHRvIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBsb2dpY2FsIHN0cmVhbS4gRWxlbWVudHMKLSAqIGNvbWJpbmluZyBtdWx0aXBsZSBzdHJlYW1zIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBldmVudCBpcyBvbmx5IGZvcndhcmRlZAotICogZG93bnN0cmVhbSBvbmNlIGFuZCBub3QgZm9yIGV2ZXJ5IHNpbmdsZSBpbnB1dCBzdHJlYW0uCi0gKgotICogVGhlIEBzdHJlYW1faWQgc2hvdWxkIGJlIGEgdW5pcXVlIHN0cmluZyB0aGF0IGNvbnNpc3RzIG9mIHRoZSB1cHN0cmVhbQotICogc3RyZWFtLWlkLCAvIGFzIHNlcGFyYXRvciBhbmQgYSB1bmlxdWUgc3RyZWFtLWlkIGZvciB0aGlzIHNwZWNpZmljCi0gKiBzdHJlYW0uIEEgbmV3IHN0cmVhbS1pZCBzaG91bGQgb25seSBiZSBjcmVhdGVkIGZvciBhIHN0cmVhbSBpZiB0aGUgdXBzdHJlYW0KLSAqIHN0cmVhbSBpcyBzcGxpdCBpbnRvIChwb3RlbnRpYWxseSkgbXVsdGlwbGUgbmV3IHN0cmVhbXMsIGUuZy4gaW4gYSBkZW11eGVyLAotICogYnV0IG5vdCBmb3IgZXZlcnkgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIHBpcGVsaW5lLgotICogZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkKCkgb3IgZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZigpIGNhbiBiZQotICogdXNlZCB0byBjcmVhdGUgYSBzdHJlYW0taWQuICBUaGVyZSBhcmUgbm8gcGFydGljdWxhciBzZW1hbnRpY3MgZm9yIHRoZQotICogc3RyZWFtLWlkLCB0aG91Z2ggaXQgc2hvdWxkIGJlIGRldGVybWluaXN0aWMgKHRvIHN1cHBvcnQgc3RyZWFtIG1hdGNoaW5nKQotICogYW5kIGl0IG1pZ2h0IGJlIHVzZWQgdG8gb3JkZXIgc3RyZWFtcyAoYmVzaWRlcyBhbnkgaW5mb3JtYXRpb24gY29udmV5ZWQgYnkKLSAqIHN0cmVhbSBmbGFncykuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IFNUUkVBTV9TVEFSVCBldmVudC4KLSAqLwotR3N0RXZlbnQgKgotZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKGNvbnN0IGdjaGFyICogc3RyZWFtX2lkKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cmVhbV9pZCAhPSBOVUxMLCBOVUxMKTsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoRVZFTlRfU1RSRUFNX1NUQVJUKSwKLSAgICAgIEdTVF9RVUFSSyAoU1RSRUFNX0lEKSwgR19UWVBFX1NUUklORywgc3RyZWFtX2lkLAotICAgICAgR1NUX1FVQVJLIChGTEFHUyksIEdTVF9UWVBFX1NUUkVBTV9GTEFHUywgR1NUX1NUUkVBTV9GTEFHX05PTkUsIE5VTEwpOwotCi0gIHJldHVybiBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgcyk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydDoKLSAqIEBldmVudDogYSBzdHJlYW0tc3RhcnQgZXZlbnQuCi0gKiBAc3RyZWFtX2lkOiAob3V0KSAodHJhbnNmZXIgbm9uZSk6IHBvaW50ZXIgdG8gc3RvcmUgdGhlIHN0cmVhbS1pZAotICoKLSAqIFBhcnNlIGEgc3RyZWFtLWlkIEBldmVudCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gQHN0cmVhbV9pZAotICogbG9jYXRpb24uIFRoZSBzdHJpbmcgc3RvcmVkIGluIEBzdHJlYW1faWQgbXVzdCBub3QgYmUgbW9kaWZpZWQgYW5kIHdpbGwKLSAqIHJlbWFpbiB2YWxpZCBvbmx5IHVudGlsIEBldmVudCBnZXRzIGZyZWVkLiBNYWtlIGEgY29weSBpZiB5b3Ugd2FudCB0bwotICogbW9kaWZ5IGl0IG9yIHN0b3JlIGl0IGZvciBsYXRlciB1c2UuCi0gKi8KLXZvaWQKLWdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQgKEdzdEV2ZW50ICogZXZlbnQsIGNvbnN0IGdjaGFyICoqIHN0cmVhbV9pZCkKLXsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gIHZhbCA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoU1RSRUFNX0lEKSk7Ci0KLSAgaWYgKHN0cmVhbV9pZCkKLSAgICAqc3RyZWFtX2lkID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2YWwpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9zZXRfc3RyZWFtOgotICogQGV2ZW50OiBhIHN0cmVhbS1zdGFydCBldmVudAotICogQHN0cmVhbTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgc3RyZWFtIG9iamVjdCB0byBzZXQKLSAqCi0gKiBTZXQgdGhlIEBzdHJlYW0gb24gdGhlIHN0cmVhbS1zdGFydCBAZXZlbnQgCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZAotZ3N0X2V2ZW50X3NldF9zdHJlYW0gKEdzdEV2ZW50ICogZXZlbnQsIEdzdFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZXZlbnQgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9ldmVudF9pc193cml0YWJsZSAoZXZlbnQpKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoR1NUX0VWRU5UX1NUUlVDVFVSRSAoZXZlbnQpLAotICAgICAgR1NUX1FVQVJLIChTVFJFQU0pLCBHU1RfVFlQRV9TVFJFQU0sIHN0cmVhbSwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbToKLSAqIEBldmVudDogYSBzdHJlYW0tc3RhcnQgZXZlbnQKLSAqIEBzdHJlYW06IChvdXQpICh0cmFuc2ZlciBmdWxsKTogYWRyZXNzIG9mIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBzdHJlYW0KLSAqCi0gKiBQYXJzZSBhIHN0cmVhbS1zdGFydCBAZXZlbnQgYW5kIGV4dHJhY3QgdGhlICNHc3RTdHJlYW0gZnJvbSBpdC4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi12b2lkCi1nc3RfZXZlbnRfcGFyc2Vfc3RyZWFtIChHc3RFdmVudCAqIGV2ZW50LCBHc3RTdHJlYW0gKiogc3RyZWFtKQotewotICBnX3JldHVybl9pZl9mYWlsIChldmVudCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUKTsKLQotICBpZiAoc3RyZWFtKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KSwKLSAgICAgICAgR1NUX1FVQVJLIChTVFJFQU0pLCBHU1RfVFlQRV9TVFJFQU0sIHN0cmVhbSwgTlVMTCk7Ci0gIH0KLQotfQotCi0vKioKLSAqIGdzdF9ldmVudF9zZXRfc3RyZWFtX2ZsYWdzOgotICogQGV2ZW50OiBhIHN0cmVhbS1zdGFydCBldmVudAotICogQGZsYWdzOiB0aGUgc3RyZWFtIGZsYWdzIHRvIHNldAotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X2V2ZW50X3NldF9zdHJlYW1fZmxhZ3MgKEdzdEV2ZW50ICogZXZlbnQsIEdzdFN0cmVhbUZsYWdzIGZsYWdzKQotewotICBnX3JldHVybl9pZl9mYWlsIChldmVudCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2V2ZW50X2lzX3dyaXRhYmxlIChldmVudCkpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChHU1RfRVZFTlRfU1RSVUNUVVJFIChldmVudCksCi0gICAgICBHU1RfUVVBUksgKEZMQUdTKSwgR1NUX1RZUEVfU1RSRUFNX0ZMQUdTLCBmbGFncywgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9mbGFnczoKLSAqIEBldmVudDogYSBzdHJlYW0tc3RhcnQgZXZlbnQKLSAqIEBmbGFnczogKG91dCk6IGFkZHJlc3Mgb2YgdmFyaWFibGUgd2hlcmUgdG8gc3RvcmUgdGhlIHN0cmVhbSBmbGFncwotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9mbGFncyAoR3N0RXZlbnQgKiBldmVudCwgR3N0U3RyZWFtRmxhZ3MgKiBmbGFncykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZXZlbnQgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCk7Ci0KLSAgaWYgKGZsYWdzKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KSwKLSAgICAgICAgR1NUX1FVQVJLIChGTEFHUyksIEdTVF9UWVBFX1NUUkVBTV9GTEFHUywgZmxhZ3MsIE5VTEwpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2V2ZW50X3NldF9ncm91cF9pZDoKLSAqIEBldmVudDogYSBzdHJlYW0tc3RhcnQgZXZlbnQKLSAqIEBncm91cF9pZDogdGhlIGdyb3VwIGlkIHRvIHNldAotICoKLSAqIEFsbCBzdHJlYW1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBncm91cCBpZCBhcmUgc3VwcG9zZWQgdG8gYmUgcGxheWVkCi0gKiB0b2dldGhlciwgaS5lLiBhbGwgc3RyZWFtcyBpbnNpZGUgYSBjb250YWluZXIgZmlsZSBzaG91bGQgaGF2ZSB0aGUKLSAqIHNhbWUgZ3JvdXAgaWQgYnV0IGRpZmZlcmVudCBzdHJlYW0gaWRzLiBUaGUgZ3JvdXAgaWQgc2hvdWxkIGNoYW5nZQotICogZWFjaCB0aW1lIHRoZSBzdHJlYW0gaXMgc3RhcnRlZCwgcmVzdWx0aW5nIGluIGRpZmZlcmVudCBncm91cCBpZHMKLSAqIGVhY2ggdGltZSBhIGZpbGUgaXMgcGxheWVkIGZvciBleGFtcGxlLgotICoKLSAqIFVzZSBnc3RfdXRpbF9ncm91cF9pZF9uZXh0KCkgdG8gZ2V0IGEgbmV3IGdyb3VwIGlkLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X2V2ZW50X3NldF9ncm91cF9pZCAoR3N0RXZlbnQgKiBldmVudCwgZ3VpbnQgZ3JvdXBfaWQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfZXZlbnRfaXNfd3JpdGFibGUgKGV2ZW50KSk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KSwKLSAgICAgIEdTVF9RVUFSSyAoR1JPVVBfSUQpLCBHX1RZUEVfVUlOVCwgZ3JvdXBfaWQsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9ncm91cF9pZDoKLSAqIEBldmVudDogYSBzdHJlYW0tc3RhcnQgZXZlbnQKLSAqIEBncm91cF9pZDogKG91dCk6IGFkZHJlc3Mgb2YgdmFyaWFibGUgd2hlcmUgdG8gc3RvcmUgdGhlIGdyb3VwIGlkCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYSBncm91cCBpZCB3YXMgc2V0IG9uIHRoZSBldmVudCBhbmQgY291bGQgYmUgcGFyc2VkLAotICogICAlRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ2Jvb2xlYW4KLWdzdF9ldmVudF9wYXJzZV9ncm91cF9pZCAoR3N0RXZlbnQgKiBldmVudCwgZ3VpbnQgKiBncm91cF9pZCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwKLSAgICAgIEZBTFNFKTsKLQotICBpZiAoZ3JvdXBfaWQpIHsKLSAgICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9FVkVOVF9TVFJVQ1RVUkUgKGV2ZW50KSwKLSAgICAgICAgR1NUX1FVQVJLIChHUk9VUF9JRCksIEdfVFlQRV9VSU5ULCBncm91cF9pZCwgTlVMTCk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X3N0cmVhbV9jb2xsZWN0aW9uOgotICogQGNvbGxlY3Rpb246IEFjdGl2ZSBjb2xsZWN0aW9uIGZvciB0aGlzIGRhdGEgZmxvdwotICoKLSAqIENyZWF0ZSBhIG5ldyBTVFJFQU1fQ09MTEVDVElPTiBldmVudC4gVGhlIHN0cmVhbSBjb2xsZWN0aW9uIGV2ZW50IGNhbiBvbmx5Ci0gKiB0cmF2ZWwgZG93bnN0cmVhbSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYnVmZmVyIGZsb3cuCi0gKgotICogU291cmNlIGVsZW1lbnRzLCBkZW11eGVycyBhbmQgb3RoZXIgZWxlbWVudHMgdGhhdCBtYW5hZ2UgY29sbGVjdGlvbnMKLSAqIG9mIHN0cmVhbXMgYW5kIHBvc3QgI0dzdFN0cmVhbUNvbGxlY3Rpb24gbWVzc2FnZXMgb24gdGhlIGJ1cyBhbHNvIHNlbmQKLSAqIHRoaXMgZXZlbnQgZG93bnN0cmVhbSBvbiBlYWNoIHBhZCBpbnZvbHZlZCBpbiB0aGUgY29sbGVjdGlvbiwgc28gdGhhdAotICogYWN0aXZhdGlvbiBvZiBhIG5ldyBjb2xsZWN0aW9uIGNhbiBiZSB0cmFja2VkIHRocm91Z2ggdGhlIGRvd25zdHJlYW0KLSAqIGRhdGEgZmxvdy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgU1RSRUFNX0NPTExFQ1RJT04gZXZlbnQuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0RXZlbnQgKgotZ3N0X2V2ZW50X25ld19zdHJlYW1fY29sbGVjdGlvbiAoR3N0U3RyZWFtQ29sbGVjdGlvbiAqIGNvbGxlY3Rpb24pCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29sbGVjdGlvbiAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJFQU1fQ09MTEVDVElPTiAoY29sbGVjdGlvbiksIE5VTEwpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChFVkVOVF9TVFJFQU1fQ09MTEVDVElPTiksCi0gICAgICBHU1RfUVVBUksgKENPTExFQ1RJT04pLCBHU1RfVFlQRV9TVFJFQU1fQ09MTEVDVElPTiwgY29sbGVjdGlvbiwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfU1RSRUFNX0NPTExFQ1RJT04sIHMpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbjoKLSAqIEBldmVudDogYSBzdHJlYW0tY29sbGVjdGlvbiBldmVudAotICogQGNvbGxlY3Rpb246IChvdXQpOiBwb2ludGVyIHRvIHN0b3JlIHRoZSBjb2xsZWN0aW9uCi0gKgotICogUmV0cmlldmUgbmV3ICNHc3RTdHJlYW1Db2xsZWN0aW9uIGZyb20gU1RSRUFNX0NPTExFQ1RJT04gZXZlbnQgQGV2ZW50LgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLXZvaWQKLWdzdF9ldmVudF9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbiAoR3N0RXZlbnQgKiBldmVudCwKLSAgICBHc3RTdHJlYW1Db2xsZWN0aW9uICoqIGNvbGxlY3Rpb24pCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TVFJFQU1fQ09MTEVDVElPTik7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLQotICBpZiAoY29sbGVjdGlvbikgewotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChzdHJ1Y3R1cmUsCi0gICAgICAgIEdTVF9RVUFSSyAoQ09MTEVDVElPTiksIEdTVF9UWVBFX1NUUkVBTV9DT0xMRUNUSU9OLCBjb2xsZWN0aW9uLCBOVUxMKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9ldmVudF9uZXdfdG9jOgotICogQHRvYzogKHRyYW5zZmVyIG5vbmUpOiAjR3N0VG9jIHN0cnVjdHVyZS4KLSAqIEB1cGRhdGVkOiB3aGV0aGVyIEB0b2Mgd2FzIHVwZGF0ZWQgb3Igbm90LgotICoKLSAqIEdlbmVyYXRlIGEgVE9DIGV2ZW50IGZyb20gdGhlIGdpdmVuIEB0b2MuIFRoZSBwdXJwb3NlIG9mIHRoZSBUT0MgZXZlbnQgaXMgdG8KLSAqIGluZm9ybSBlbGVtZW50cyB0aGF0IHNvbWUga2luZCBvZiB0aGUgVE9DIHdhcyBmb3VuZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RFdmVudC4KLSAqLwotR3N0RXZlbnQgKgotZ3N0X2V2ZW50X25ld190b2MgKEdzdFRvYyAqIHRvYywgZ2Jvb2xlYW4gdXBkYXRlZCkKLXsKLSAgR3N0U3RydWN0dXJlICp0b2Nfc3RydWN0OwotICBHUXVhcmsgaWQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRvYyAhPSBOVUxMLCBOVUxMKTsKLQotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsICJjcmVhdGluZyB0b2MgZXZlbnQiKTsKLQotICAvKiBuZWVkIGRpZmZlcmVudCBzdHJ1Y3R1cmUgbmFtZXMgc28gc3RpY2t5X211bHRpIGV2ZW50IHN0dWZmIG9uIHBhZHMKLSAgICogd29ya3MsIGkuZS4gYm90aCBUT0MgZXZlbnRzIGFyZSBrZXB0IGFyb3VuZCAqLwotICBpZiAoZ3N0X3RvY19nZXRfc2NvcGUgKHRvYykgPT0gR1NUX1RPQ19TQ09QRV9HTE9CQUwpCi0gICAgaWQgPSBHU1RfUVVBUksgKEVWRU5UX1RPQ19HTE9CQUwpOwotICBlbHNlCi0gICAgaWQgPSBHU1RfUVVBUksgKEVWRU5UX1RPQ19DVVJSRU5UKTsKLQotICB0b2Nfc3RydWN0ID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKGlkLAotICAgICAgR1NUX1FVQVJLIChUT0MpLCBHU1RfVFlQRV9UT0MsIHRvYywKLSAgICAgIEdTVF9RVUFSSyAoVVBEQVRFRCksIEdfVFlQRV9CT09MRUFOLCB1cGRhdGVkLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9UT0MsIHRvY19zdHJ1Y3QpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV90b2M6Ci0gKiBAZXZlbnQ6IGEgVE9DIGV2ZW50LgotICogQHRvYzogKG91dCkgKHRyYW5zZmVyIGZ1bGwpOiBwb2ludGVyIHRvICNHc3RUb2Mgc3RydWN0dXJlLgotICogQHVwZGF0ZWQ6IChvdXQpOiBwb2ludGVyIHRvIHN0b3JlIFRPQyB1cGRhdGVkIGZsYWcuCi0gKgotICogUGFyc2UgYSBUT0MgQGV2ZW50IGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUgZ2l2ZW4gQHRvYyBhbmQgQHVwZGF0ZWQgbG9jYXRpb25zLgotICovCi12b2lkCi1nc3RfZXZlbnRfcGFyc2VfdG9jIChHc3RFdmVudCAqIGV2ZW50LCBHc3RUb2MgKiogdG9jLCBnYm9vbGVhbiAqIHVwZGF0ZWQpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9UT0MpOwotICBnX3JldHVybl9pZl9mYWlsICh0b2MgIT0gTlVMTCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChUT0MpLCBHU1RfVFlQRV9UT0MsIHRvYywKLSAgICAgIEdTVF9RVUFSSyAoVVBEQVRFRCksIEdfVFlQRV9CT09MRUFOLCB1cGRhdGVkLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X3RvY19zZWxlY3Q6Ci0gKiBAdWlkOiBVSUQgaW4gdGhlIFRPQyB0byBzdGFydCBwbGF5YmFjayBmcm9tLgotICoKLSAqIEdlbmVyYXRlIGEgVE9DIHNlbGVjdCBldmVudCB3aXRoIHRoZSBnaXZlbiBAdWlkLiBUaGUgcHVycG9zZSBvZiB0aGUKLSAqIFRPQyBzZWxlY3QgZXZlbnQgaXMgdG8gc3RhcnQgcGxheWJhY2sgYmFzZWQgb24gdGhlIFRPQydzIGVudHJ5IHdpdGggdGhlCi0gKiBnaXZlbiBAdWlkLgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNHc3RFdmVudC4KLSAqLwotR3N0RXZlbnQgKgotZ3N0X2V2ZW50X25ld190b2Nfc2VsZWN0IChjb25zdCBnY2hhciAqIHVpZCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVpZCAhPSBOVUxMLCBOVUxMKTsKLQotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsICJjcmVhdGluZyB0b2Mgc2VsZWN0IGV2ZW50IGZvciBVSUQ6ICVzIiwgdWlkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChFVkVOVF9UT0NfU0VMRUNUKSwKLSAgICAgIEdTVF9RVUFSSyAoVUlEKSwgR19UWVBFX1NUUklORywgdWlkLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9UT0NfU0VMRUNULCBzdHJ1Y3R1cmUpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV90b2Nfc2VsZWN0OgotICogQGV2ZW50OiBhIFRPQyBzZWxlY3QgZXZlbnQuCi0gKiBAdWlkOiAob3V0KSAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiBzdG9yYWdlIGZvciB0aGUgc2VsZWN0aW9uIFVJRC4KLSAqCi0gKiBQYXJzZSBhIFRPQyBzZWxlY3QgQGV2ZW50IGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUgZ2l2ZW4gQHVpZCBsb2NhdGlvbi4KLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3QgKEdzdEV2ZW50ICogZXZlbnQsIGdjaGFyICoqIHVpZCkKLXsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9UT0NfU0VMRUNUKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICB2YWwgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKFVJRCkpOwotCi0gIGlmICh1aWQgIT0gTlVMTCkKLSAgICAqdWlkID0gZ19zdHJkdXAgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsKSk7Ci0KLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb246Ci0gKiBAc3lzdGVtX2lkOiAodHJhbnNmZXIgbm9uZSk6IGEgc3RyaW5nIGhvbGRpbmcgYSBVVUlEIHRoYXQgdW5pcXVlbHkKLSAqIGlkZW50aWZpZXMgYSBwcm90ZWN0aW9uIHN5c3RlbS4KLSAqIEBkYXRhOiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEJ1ZmZlciBob2xkaW5nIHByb3RlY3Rpb24gc3lzdGVtIHNwZWNpZmljCi0gKiBpbmZvcm1hdGlvbi4gVGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgYnVmZmVyIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgb25lLgotICogQG9yaWdpbjogYSBzdHJpbmcgaW5kaWNhdGluZyB3aGVyZSB0aGUgcHJvdGVjdGlvbgotICogaW5mb3JtYXRpb24gY2FycmllZCBpbiB0aGUgZXZlbnQgd2FzIGV4dHJhY3RlZCBmcm9tLiBUaGUgYWxsb3dlZCB2YWx1ZXMKLSAqIG9mIHRoaXMgc3RyaW5nIHdpbGwgZGVwZW5kIHVwb24gdGhlIHByb3RlY3Rpb24gc2NoZW1lLgotICoKLSAqIENyZWF0ZXMgYSBuZXcgZXZlbnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKLSAqIHByb3RlY3Rpb24gc3lzdGVtICh1bmlxdWVseSBpZGVudGlmaWVkIGJ5IEBzeXN0ZW1faWQpLCBieSB3aGljaCB0aGF0Ci0gKiBwcm90ZWN0aW9uIHN5c3RlbSBjYW4gYWNxdWlyZSBrZXkocykgdG8gZGVjcnlwdCBhIHByb3RlY3RlZCBzdHJlYW0uCi0gKgotICogSW4gb3JkZXIgZm9yIGEgZGVjcnlwdGlvbiBlbGVtZW50IHRvIGRlY3J5cHQgbWVkaWEKLSAqIHByb3RlY3RlZCB1c2luZyBhIHNwZWNpZmljIHN5c3RlbSwgaXQgZmlyc3QgbmVlZHMgYWxsIHRoZQotICogcHJvdGVjdGlvbiBzeXN0ZW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGFjcXVpcmUgdGhlIGRlY3J5cHRpb24KLSAqIGtleShzKSBmb3IgdGhhdCBzdHJlYW0uIFRoZSBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGVuYWJsZSB0aGlzIGluZm9ybWF0aW9uCi0gKiB0byBiZSBwYXNzZWQgaW4gZXZlbnRzIGZyb20gZWxlbWVudHMgdGhhdCBleHRyYWN0IGl0Ci0gKiAoZS5nLiwgSVNPQk1GRiBkZW11eGVycywgTVBFRyBEQVNIIGRlbXV4ZXJzKSB0byBwcm90ZWN0aW9uIGRlY3J5cHRlcgotICogZWxlbWVudHMgdGhhdCB1c2UgaXQuCi0gKgotICogRXZlbnRzIGNvbnRhaW5pbmcgcHJvdGVjdGlvbiBzeXN0ZW0gc3BlY2lmaWMgaW5mb3JtYXRpb24gYXJlIGNyZWF0ZWQgdXNpbmcKLSAqICNnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24sIGFuZCB0aGV5IGNhbiBiZSBwYXJzZWQgYnkgZG93bnN0cmVhbSBlbGVtZW50cwotICogdXNpbmcgI2dzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uLgotICoKLSAqIEluIENvbW1vbiBFbmNyeXB0aW9uLCBwcm90ZWN0aW9uIHN5c3RlbSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBtYXkgYmUgbG9jYXRlZAotICogd2l0aGluIElTT0JNRkYgZmlsZXMsIGJvdGggaW4gbW92aWUgKG1vb3YpIGJveGVzIGFuZCBtb3ZpZSBmcmFnbWVudCAobW9vZikKLSAqIGJveGVzOyBpdCBtYXkgYWxzbyBiZSBjb250YWluZWQgaW4gQ29udGVudFByb3RlY3Rpb24gZWxlbWVudHMgd2l0aGluIE1QRUcKLSAqIERBU0ggTVBEcy4gVGhlIGV2ZW50cyBjcmVhdGVkIGJ5ICNnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24gY29udGFpbiBkYXRhCi0gKiBpZGVudGlmeWluZyBmcm9tIHdoaWNoIG9mIHRoZXNlIGxvY2F0aW9ucyB0aGUgZW5jYXBzdWxhdGVkIHByb3RlY3Rpb24gc3lzdGVtCi0gKiBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvcmlnaW5hdGVkLiBUaGlzIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCBhcwotICogc29tZSBwcm90ZWN0aW9uIHN5c3RlbXMgdXNlIGRpZmZlcmVudCBlbmNvZGluZ3MgZGVwZW5kaW5nIHVwb24gd2hlcmUgdGhlCi0gKiBpbmZvcm1hdGlvbiBvcmlnaW5hdGVzLgotICoKLSAqIFRoZSBldmVudHMgcmV0dXJuZWQgYnkgZ3N0X2V2ZW50X25ld19wcm90ZWN0aW9uKCkgYXJlIGltcGxlbWVudGVkCi0gKiBpbiBzdWNoIGEgd2F5IGFzIHRvIGVuc3VyZSB0aGF0IHRoZSBtb3N0IHJlY2VudGx5LXB1c2hlZCBwcm90ZWN0aW9uIGluZm8KLSAqIGV2ZW50IG9mIGEgcGFydGljdWxhciBAb3JpZ2luIGFuZCBAc3lzdGVtX2lkIHdpbGwKLSAqIGJlIHN0dWNrIHRvIHRoZSBvdXRwdXQgcGFkIG9mIHRoZSBzZW5kaW5nIGVsZW1lbnQuCi0gKgotICogUmV0dXJuczogYSAjR1NUX0VWRU5UX1BST1RFQ1RJT04gZXZlbnQsIGlmIHN1Y2Nlc3NmdWw7ICVOVUxMCi0gKiBpZiB1bnN1Y2Nlc3NmdWwuCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24gKGNvbnN0IGdjaGFyICogc3lzdGVtX2lkLAotICAgIEdzdEJ1ZmZlciAqIGRhdGEsIGNvbnN0IGdjaGFyICogb3JpZ2luKQotewotICBnY2hhciAqZXZlbnRfbmFtZTsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN5c3RlbV9pZCAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGEgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZXZlbnRfbmFtZSA9Ci0gICAgICBnX3N0cmNvbmNhdCAoIkdzdFByb3RlY3Rpb25FdmVudCIsIG9yaWdpbiA/ICItIiA6ICIiLAotICAgICAgb3JpZ2luID8gb3JpZ2luIDogIiIsICItIiwgc3lzdGVtX2lkLCBOVUxMKTsKLQotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRVZFTlQsICJjcmVhdGluZyBwcm90ZWN0aW9uIGV2ZW50ICVzIiwgZXZlbnRfbmFtZSk7Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3IChldmVudF9uYW1lLCAiZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgZGF0YSwKLSAgICAgICJzeXN0ZW1faWQiLCBHX1RZUEVfU1RSSU5HLCBzeXN0ZW1faWQsIE5VTEwpOwotICBpZiAob3JpZ2luKQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAib3JpZ2luIiwgR19UWVBFX1NUUklORywgb3JpZ2luLCBOVUxMKTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX1BST1RFQ1RJT04sIHMpOwotCi0gIGdfZnJlZSAoZXZlbnRfbmFtZSk7Ci0gIHJldHVybiBldmVudDsKLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbjoKLSAqIEBldmVudDogYSAjR1NUX0VWRU5UX1BST1RFQ1RJT04gZXZlbnQuCi0gKiBAc3lzdGVtX2lkOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBwb2ludGVyIHRvIHN0b3JlIHRoZSBVVUlECi0gKiBzdHJpbmcgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYSBjb250ZW50IHByb3RlY3Rpb24gc3lzdGVtLgotICogQGRhdGE6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgbm9uZSk6IHBvaW50ZXIgdG8gc3RvcmUgYSAjR3N0QnVmZmVyCi0gKiBob2xkaW5nIHByb3RlY3Rpb24gc3lzdGVtIHNwZWNpZmljIGluZm9ybWF0aW9uLgotICogQG9yaWdpbjogKGFsbG93LW5vbmUpICh0cmFuc2ZlciBub25lKTogcG9pbnRlciB0byBzdG9yZSBhIHZhbHVlIHRoYXQKLSAqIGluZGljYXRlcyB3aGVyZSB0aGUgcHJvdGVjdGlvbiBpbmZvcm1hdGlvbiBjYXJyaWVkIGJ5IEBldmVudCB3YXMgZXh0cmFjdGVkCi0gKiBmcm9tLgotICoKLSAqIFBhcnNlcyBhbiBldmVudCBjb250YWluaW5nIHByb3RlY3Rpb24gc3lzdGVtIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBzdG9yZXMKLSAqIHRoZSByZXN1bHRzIGluIEBzeXN0ZW1faWQsIEBkYXRhIGFuZCBAb3JpZ2luLiBUaGUgZGF0YSBzdG9yZWQgaW4gQHN5c3RlbV9pZCwKLSAqIEBvcmlnaW4gYW5kIEBkYXRhIGFyZSB2YWxpZCB1bnRpbCBAZXZlbnQgaXMgcmVsZWFzZWQuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbiAoR3N0RXZlbnQgKiBldmVudCwgY29uc3QgZ2NoYXIgKiogc3lzdGVtX2lkLAotICAgIEdzdEJ1ZmZlciAqKiBkYXRhLCBjb25zdCBnY2hhciAqKiBvcmlnaW4pCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLQotICBnX3JldHVybl9pZl9mYWlsIChldmVudCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9QUk9URUNUSU9OKTsKLQotICBzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLQotICBpZiAob3JpZ2luKQotICAgICpvcmlnaW4gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJvcmlnaW4iKTsKLQotICBpZiAoc3lzdGVtX2lkKQotICAgICpzeXN0ZW1faWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJzeXN0ZW1faWQiKTsKLQotICBpZiAoZGF0YSkgewotICAgIGNvbnN0IEdWYWx1ZSAqdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImRhdGEiKTsKLSAgICAqZGF0YSA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZToKLSAqIEBmb3JtYXQ6IFRoZSBmb3JtYXQgb2YgdGhlIHBvc2l0aW9uIGJlaW5nIGRvbmUKLSAqIEBwb3NpdGlvbjogVGhlIHBvc2l0aW9uIG9mIHRoZSBzZWdtZW50IGJlaW5nIGRvbmUKLSAqCi0gKiBDcmVhdGUgYSBuZXcgc2VnbWVudC1kb25lIGV2ZW50LiBUaGlzIGV2ZW50IGlzIHNlbnQgYnkgZWxlbWVudHMgdGhhdAotICogZmluaXNoIHBsYXliYWNrIG9mIGEgc2VnbWVudCBhcyBhIHJlc3VsdCBvZiBhIHNlZ21lbnQgc2Vlay4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RFdmVudAotICovCi1Hc3RFdmVudCAqCi1nc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZSAoR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHBvc2l0aW9uKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9FVkVOVCwgImNyZWF0aW5nIHNlZ21lbnQtZG9uZSBldmVudCIpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKEVWRU5UX1NFR01FTlRfRE9ORSksCi0gICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChQT1NJVElPTiksIEdfVFlQRV9JTlQ2NCwgcG9zaXRpb24sIE5VTEwpOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9TRUdNRU5UX0RPTkUsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIGV2ZW50OwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50X2RvbmU6Ci0gKiBAZXZlbnQ6IEEgdmFsaWQgI0dzdEV2ZW50IG9mIHR5cGUgR1NUX0VWRU5UX1NFR01FTlRfRE9ORS4KLSAqIEBmb3JtYXQ6IChvdXQpIChhbGxvdy1ub25lKTogUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZm9ybWF0LCBvciAlTlVMTAotICogQHBvc2l0aW9uOiAob3V0KSAoYWxsb3ctbm9uZSk6IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0aW9uLCBvciAlTlVMTAotICoKLSAqIEV4dHJhY3RzIHRoZSBwb3NpdGlvbiBhbmQgZm9ybWF0IGZyb20gdGhlIHNlZ21lbnQgZG9uZSBtZXNzYWdlLgotICoKLSAqLwotdm9pZAotZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnRfZG9uZSAoR3N0RXZlbnQgKiBldmVudCwgR3N0Rm9ybWF0ICogZm9ybWF0LAotICAgIGdpbnQ2NCAqIHBvc2l0aW9uKQotewotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgY29uc3QgR1ZhbHVlICp2YWw7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZXZlbnQgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NFR01FTlRfRE9ORSk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLQotICB2YWwgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKEZPUk1BVCkpOwotICBpZiAoZm9ybWF0ICE9IE5VTEwpCi0gICAgKmZvcm1hdCA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbCk7Ci0KLSAgdmFsID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChQT1NJVElPTikpOwotICBpZiAocG9zaXRpb24gIT0gTlVMTCkKLSAgICAqcG9zaXRpb24gPSBnX3ZhbHVlX2dldF9pbnQ2NCAodmFsKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RldmVudC5oIGIvZ3N0L2dzdGV2ZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZGJiMjUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGV2ZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0ZXZlbnQuaDogSGVhZGVyIGZvciBHc3RFdmVudCBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfRVZFTlRfSF9fCi0jZGVmaW5lIF9fR1NUX0VWRU5UX0hfXwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RXZlbnQgR3N0RXZlbnQ7Ci0KLS8qKgotICogR3N0RXZlbnRUeXBlRmxhZ3M6Ci0gKiBAR1NUX0VWRU5UX1RZUEVfVVBTVFJFQU06ICAgICBTZXQgaWYgdGhlIGV2ZW50IGNhbiB0cmF2ZWwgdXBzdHJlYW0uCi0gKiBAR1NUX0VWRU5UX1RZUEVfRE9XTlNUUkVBTTogICBTZXQgaWYgdGhlIGV2ZW50IGNhbiB0cmF2ZWwgZG93bnN0cmVhbS4KLSAqIEBHU1RfRVZFTlRfVFlQRV9TRVJJQUxJWkVEOiAgIFNldCBpZiB0aGUgZXZlbnQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93LgotICogQEdTVF9FVkVOVF9UWVBFX1NUSUNLWTogICAgICAgU2V0IGlmIHRoZSBldmVudCBpcyBzdGlja3kgb24gdGhlIHBhZHMuCi0gKiBAR1NUX0VWRU5UX1RZUEVfU1RJQ0tZX01VTFRJOiBNdWx0aXBsZSBzdGlja3kgZXZlbnRzIGNhbiBiZSBvbiBhIHBhZCwgZWFjaAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllZCBieSB0aGUgZXZlbnQgbmFtZS4KLSAqCi0gKiAjR3N0RXZlbnRUeXBlRmxhZ3MgaW5kaWNhdGUgdGhlIGFzcGVjdHMgb2YgdGhlIGRpZmZlcmVudCAjR3N0RXZlbnRUeXBlCi0gKiB2YWx1ZXMuIFlvdSBjYW4gZ2V0IHRoZSB0eXBlIGZsYWdzIG9mIGEgI0dzdEV2ZW50VHlwZSB3aXRoIHRoZQotICogZ3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzKCkgZnVuY3Rpb24uCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9FVkVOVF9UWVBFX1VQU1RSRUFNICAgICAgID0gMSA8PCAwLAotICBHU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNICAgICA9IDEgPDwgMSwKLSAgR1NUX0VWRU5UX1RZUEVfU0VSSUFMSVpFRCAgICAgPSAxIDw8IDIsCi0gIEdTVF9FVkVOVF9UWVBFX1NUSUNLWSAgICAgICAgID0gMSA8PCAzLAotICBHU1RfRVZFTlRfVFlQRV9TVElDS1lfTVVMVEkgICA9IDEgPDwgNAotfSBHc3RFdmVudFR5cGVGbGFnczsKLQotLyoqCi0gKiBHU1RfRVZFTlRfVFlQRV9CT1RIOgotICoKLSAqIFRoZSBzYW1lIHRoaW5nIGFzICNHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSB8ICNHU1RfRVZFTlRfVFlQRV9ET1dOU1RSRUFNLgotICovCi0jZGVmaW5lIEdTVF9FVkVOVF9UWVBFX0JPVEggXAotICAgIChHU1RfRVZFTlRfVFlQRV9VUFNUUkVBTSB8IEdTVF9FVkVOVF9UWVBFX0RPV05TVFJFQU0pCi0KLSNkZWZpbmUgR1NUX0VWRU5UX05VTV9TSElGVCAgICAgKDgpCi0KLS8qKgotICogR1NUX0VWRU5UX01BS0VfVFlQRToKLSAqIEBudW06IHRoZSBldmVudCBudW1iZXIgdG8gY3JlYXRlCi0gKiBAZmxhZ3M6IHRoZSBldmVudCBmbGFncwotICoKLSAqIHdoZW4gbWFraW5nIGN1c3RvbSBldmVudCB0eXBlcywgdXNlIHRoaXMgbWFjcm8gd2l0aCB0aGUgbnVtIGFuZAotICogdGhlIGdpdmVuIGZsYWdzCi0gKi8KLSNkZWZpbmUgR1NUX0VWRU5UX01BS0VfVFlQRShudW0sZmxhZ3MpIFwKLSAgICAoKChudW0pIDw8IEdTVF9FVkVOVF9OVU1fU0hJRlQpIHwgKGZsYWdzKSkKLQotI2RlZmluZSBGTEFHKG5hbWUpIEdTVF9FVkVOVF9UWVBFXyMjbmFtZQotCi0vKioKLSAqIEdzdEV2ZW50VHlwZToKLSAqIEBHU1RfRVZFTlRfVU5LTk9XTjogdW5rbm93biBldmVudC4KLSAqIEBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6IFN0YXJ0IGEgZmx1c2ggb3BlcmF0aW9uLiBUaGlzIGV2ZW50IGNsZWFycyBhbGwgZGF0YQotICogICAgICAgICAgICAgICAgIGZyb20gdGhlIHBpcGVsaW5lIGFuZCB1bmJsb2NrIGFsbCBzdHJlYW1pbmcgdGhyZWFkcy4KLSAqIEBHU1RfRVZFTlRfRkxVU0hfU1RPUDogU3RvcCBhIGZsdXNoIG9wZXJhdGlvbi4gVGhpcyBldmVudCByZXNldHMgdGhlCi0gKiAgICAgICAgICAgICAgICAgcnVubmluZy10aW1lIG9mIHRoZSBwaXBlbGluZS4KLSAqIEBHU1RfRVZFTlRfU0VMRUNUX1NUUkVBTVM6IEEgcmVxdWVzdCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgc3RyZWFtcyAoU2luY2UgMS4xMCkKLSAqIEBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOiBFdmVudCB0byBtYXJrIHRoZSBzdGFydCBvZiBhIG5ldyBzdHJlYW0uIFNlbnQgYmVmb3JlIGFueQotICogICAgICAgICAgICAgICAgIG90aGVyIHNlcmlhbGl6ZWQgZXZlbnQgYW5kIG9ubHkgc2VudCBhdCB0aGUgc3RhcnQgb2YgYSBuZXcgc3RyZWFtLAotICogICAgICAgICAgICAgICAgIG5vdCBhZnRlciBmbHVzaGluZyBzZWVrcy4KLSAqIEBHU1RfRVZFTlRfQ0FQUzogI0dzdENhcHMgZXZlbnQuIE5vdGlmeSB0aGUgcGFkIG9mIGEgbmV3IG1lZGlhIHR5cGUuCi0gKiBAR1NUX0VWRU5UX1NFR01FTlQ6IEEgbmV3IG1lZGlhIHNlZ21lbnQgZm9sbG93cyBpbiB0aGUgZGF0YWZsb3cuIFRoZQotICogICAgICAgICAgICAgICAgIHNlZ21lbnQgZXZlbnRzIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZvciBjbGlwcGluZyBidWZmZXJzIGFuZAotICogICAgICAgICAgICAgICAgIGNvbnZlcnRpbmcgYnVmZmVyIHRpbWVzdGFtcHMgdG8gcnVubmluZy10aW1lIGFuZAotICogICAgICAgICAgICAgICAgIHN0cmVhbS10aW1lLgotICogQEdTVF9FVkVOVF9TVFJFQU1fQ09MTEVDVElPTjogQSBuZXcgI0dzdFN0cmVhbUNvbGxlY3Rpb24gaXMgYXZhaWxhYmxlIChTaW5jZSAxLjEwKQotICogQEdTVF9FVkVOVF9UQUc6IEEgbmV3IHNldCBvZiBtZXRhZGF0YSB0YWdzIGhhcyBiZWVuIGZvdW5kIGluIHRoZSBzdHJlYW0uCi0gKiBAR1NUX0VWRU5UX0JVRkZFUlNJWkU6IE5vdGlmaWNhdGlvbiBvZiBidWZmZXJpbmcgcmVxdWlyZW1lbnRzLiBDdXJyZW50bHkgbm90Ci0gKiAgICAgICAgICAgICAgICAgdXNlZCB5ZXQuCi0gKiBAR1NUX0VWRU5UX1NJTktfTUVTU0FHRTogQW4gZXZlbnQgdGhhdCBzaW5rcyB0dXJuIGludG8gYSBtZXNzYWdlLiBVc2VkIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCBtZXNzYWdlcyB0aGF0IHNob3VsZCBiZSBlbWl0dGVkIGluIHN5bmMgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmluZy4KLSAqIEBHU1RfRVZFTlRfU1RSRUFNX0dST1VQX0RPTkU6IEluZGljYXRlcyB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgZGF0YSBmb3IKLSAqICAgICAgICAgICAgICAgICB0aGUgc3RyZWFtIGdyb3VwIElEIGluIHRoZSBtZXNzYWdlLiBTZW50IGJlZm9yZSBFT1MKLSAqICAgICAgICAgICAgICAgICBpbiBzb21lIGluc3RhbmNlcyBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgbW9zdGx5IHRoZSBzYW1lLiAoU2luY2UgMS4xMCkKLSAqIEBHU1RfRVZFTlRfRU9TOiBFbmQtT2YtU3RyZWFtLiBObyBtb3JlIGRhdGEgaXMgdG8gYmUgZXhwZWN0ZWQgdG8gZm9sbG93Ci0gKiAgICAgICAgICAgICAgICAgd2l0aG91dCBlaXRoZXIgYSBTVFJFQU1fU1RBUlQgZXZlbnQsIG9yIGEgRkxVU0hfU1RPUCBhbmQgYSBTRUdNRU5UCi0gKiAgICAgICAgICAgICAgICAgZXZlbnQuCi0gKiBAR1NUX0VWRU5UX1NFR01FTlRfRE9ORTogTWFya3MgdGhlIGVuZCBvZiBhIHNlZ21lbnQgcGxheWJhY2suCi0gKiBAR1NUX0VWRU5UX0dBUDogTWFya3MgYSBnYXAgaW4gdGhlIGRhdGFzdHJlYW0uCi0gKiBAR1NUX0VWRU5UX1RPQzogQW4gZXZlbnQgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYSBuZXcgdGFibGUgb2YgY29udGVudHMgKFRPQykKLSAqICAgICAgICAgICAgICAgICB3YXMgZm91bmQgb3IgdXBkYXRlZC4KLSAqIEBHU1RfRVZFTlRfUFJPVEVDVElPTjogQW4gZXZlbnQgd2hpY2ggaW5kaWNhdGVzIHRoYXQgbmV3IG9yIHVwZGF0ZWQKLSAqICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uIGluZm9ybWF0aW9uIGhhcyBiZWVuIGZvdW5kIGluIHRoZSBzdHJlYW0uCi0gKiBAR1NUX0VWRU5UX1FPUzogQSBxdWFsaXR5IG1lc3NhZ2UuIFVzZWQgdG8gaW5kaWNhdGUgdG8gdXBzdHJlYW0gZWxlbWVudHMKLSAqICAgICAgICAgICAgICAgICB0aGF0IHRoZSBkb3duc3RyZWFtIGVsZW1lbnRzIHNob3VsZCBhZGp1c3QgdGhlaXIgcHJvY2Vzc2luZwotICogICAgICAgICAgICAgICAgIHJhdGUuCi0gKiBAR1NUX0VWRU5UX1NFRUs6IEEgcmVxdWVzdCBmb3IgYSBuZXcgcGxheWJhY2sgcG9zaXRpb24gYW5kIHJhdGUuCi0gKiBAR1NUX0VWRU5UX05BVklHQVRJT046IE5hdmlnYXRpb24gZXZlbnRzIGFyZSB1c3VhbGx5IHVzZWQgZm9yIGNvbW11bmljYXRpbmcKLSAqICAgICAgICAgICAgICAgICAgICAgICAgdXNlciByZXF1ZXN0cywgc3VjaCBhcyBtb3VzZSBvciBrZXlib2FyZCBtb3ZlbWVudHMsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVwc3RyZWFtIGVsZW1lbnRzLgotICogQEdTVF9FVkVOVF9MQVRFTkNZOiBOb3RpZmljYXRpb24gb2YgbmV3IGxhdGVuY3kgYWRqdXN0bWVudC4gU2lua3Mgd2lsbCB1c2UKLSAqICAgICAgICAgICAgICAgICAgICAgdGhlIGxhdGVuY3kgaW5mb3JtYXRpb24gdG8gYWRqdXN0IHRoZWlyIHN5bmNocm9uaXNhdGlvbi4KLSAqIEBHU1RfRVZFTlRfU1RFUDogQSByZXF1ZXN0IGZvciBzdGVwcGluZyB0aHJvdWdoIHRoZSBtZWRpYS4gU2lua3Mgd2lsbCB1c3VhbGx5Ci0gKiAgICAgICAgICAgICAgICAgIGV4ZWN1dGUgdGhlIHN0ZXAgb3BlcmF0aW9uLgotICogQEdTVF9FVkVOVF9SRUNPTkZJR1VSRTogQSByZXF1ZXN0IGZvciB1cHN0cmVhbSByZW5lZ290aWF0aW5nIGNhcHMgYW5kIHJlY29uZmlndXJpbmcuCi0gKiBAR1NUX0VWRU5UX1RPQ19TRUxFQ1Q6IEEgcmVxdWVzdCBmb3IgYSBuZXcgcGxheWJhY2sgcG9zaXRpb24gYmFzZWQgb24gVE9DCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5J3MgVUlELgotICogQEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU06IFVwc3RyZWFtIGN1c3RvbSBldmVudAotICogQEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTTogRG93bnN0cmVhbSBjdXN0b20gZXZlbnQgdGhhdCB0cmF2ZWxzIGluIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICBkYXRhIGZsb3cuCi0gKiBAR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQjogQ3VzdG9tIG91dC1vZi1iYW5kIGRvd25zdHJlYW0gZXZlbnQuCi0gKiBAR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWTogQ3VzdG9tIHN0aWNreSBkb3duc3RyZWFtIGV2ZW50LgotICogQEdTVF9FVkVOVF9DVVNUT01fQk9USDogQ3VzdG9tIHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gZXZlbnQuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBJbi1iYW5kIHdoZW4gdHJhdmVsbGluZyBkb3duc3RyZWFtLgotICogQEdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0I6IEN1c3RvbSB1cHN0cmVhbSBvciBkb3duc3RyZWFtIG91dC1vZi1iYW5kIGV2ZW50LgotICoKLSAqICNHc3RFdmVudFR5cGUgbGlzdHMgdGhlIHN0YW5kYXJkIGV2ZW50IHR5cGVzIHRoYXQgY2FuIGJlIHNlbnQgaW4gYSBwaXBlbGluZS4KLSAqCi0gKiBUaGUgY3VzdG9tIGV2ZW50IHR5cGVzIGNhbiBiZSB1c2VkIGZvciBwcml2YXRlIG1lc3NhZ2VzIGJldHdlZW4gZWxlbWVudHMKLSAqIHRoYXQgY2FuJ3QgYmUgZXhwcmVzc2VkIHVzaW5nIG5vcm1hbAotICogR1N0cmVhbWVyIGJ1ZmZlciBwYXNzaW5nIHNlbWFudGljcy4gQ3VzdG9tIGV2ZW50cyBjYXJyeSBhbiBhcmJpdHJhcnkKLSAqICNHc3RTdHJ1Y3R1cmUuCi0gKiBTcGVjaWZpYyBjdXN0b20gZXZlbnRzIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUuCi0gKi8KLS8qIE5PVEU6IGtlZXAgaW4gc3luYyB3aXRoIHF1YXJrIHJlZ2lzdHJhdGlvbiBpbiBnc3RldmVudC5jICovCi10eXBlZGVmIGVudW0gewotICBHU1RfRVZFTlRfVU5LTk9XTiAgICAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMCwgMCksCi0KLSAgLyogYmlkaXJlY3Rpb25hbCBldmVudHMgKi8KLSAgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDEwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX0VWRU5UX0ZMVVNIX1NUT1AgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDIwLCBGTEFHKEJPVEgpIHwgRkxBRyhTRVJJQUxJWkVEKSksCi0KLSAgLyogZG93bnN0cmVhbSBzZXJpYWxpemVkIGV2ZW50cyAqLwotICBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoNDAsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpKSwKLSAgR1NUX0VWRU5UX0NBUFMgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDUwLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSksCi0gIEdTVF9FVkVOVF9TRUdNRU5UICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICg3MCwgRkxBRyhET1dOU1RSRUFNKSB8IEZMQUcoU0VSSUFMSVpFRCkgfCBGTEFHKFNUSUNLWSkpLAotICBHU1RfRVZFTlRfU1RSRUFNX0NPTExFQ1RJT04gICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoNzUsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpIHwgRkxBRyhTVElDS1lfTVVMVEkpKSwKLSAgR1NUX0VWRU5UX1RBRyAgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDgwLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSB8IEZMQUcoU1RJQ0tZX01VTFRJKSksCi0gIEdTVF9FVkVOVF9CVUZGRVJTSVpFICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICg5MCwgRkxBRyhET1dOU1RSRUFNKSB8IEZMQUcoU0VSSUFMSVpFRCkgfCBGTEFHKFNUSUNLWSkpLAotICBHU1RfRVZFTlRfU0lOS19NRVNTQUdFICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMTAwLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSB8IEZMQUcoU1RJQ0tZX01VTFRJKSksCi0gIEdTVF9FVkVOVF9TVFJFQU1fR1JPVVBfRE9ORSAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgxMDUsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpKSwKLSAgR1NUX0VWRU5UX0VPUyAgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDExMCwgRkxBRyhET1dOU1RSRUFNKSB8IEZMQUcoU0VSSUFMSVpFRCkgfCBGTEFHKFNUSUNLWSkpLAotICBHU1RfRVZFTlRfVE9DICAgICAgICAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMTIwLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSB8IEZMQUcoU1RJQ0tZKSB8IEZMQUcoU1RJQ0tZX01VTFRJKSksCi0gIEdTVF9FVkVOVF9QUk9URUNUSU9OICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgxMzAsIEZMQUcgKERPV05TVFJFQU0pIHwgRkxBRyAoU0VSSUFMSVpFRCkgfCBGTEFHIChTVElDS1kpIHwgRkxBRyAoU1RJQ0tZX01VTFRJKSksCi0KLSAgLyogbm9uLXN0aWNreSBkb3duc3RyZWFtIHNlcmlhbGl6ZWQgKi8KLSAgR1NUX0VWRU5UX1NFR01FTlRfRE9ORSAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDE1MCwgRkxBRyhET1dOU1RSRUFNKSB8IEZMQUcoU0VSSUFMSVpFRCkpLAotICBHU1RfRVZFTlRfR0FQICAgICAgICAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMTYwLCBGTEFHKERPV05TVFJFQU0pIHwgRkxBRyhTRVJJQUxJWkVEKSksCi0KLSAgLyogdXBzdHJlYW0gZXZlbnRzICovCi0gIEdTVF9FVkVOVF9RT1MgICAgICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgxOTAsIEZMQUcoVVBTVFJFQU0pKSwKLSAgR1NUX0VWRU5UX1NFRUsgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDIwMCwgRkxBRyhVUFNUUkVBTSkpLAotICBHU1RfRVZFTlRfTkFWSUdBVElPTiAgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMjEwLCBGTEFHKFVQU1RSRUFNKSksCi0gIEdTVF9FVkVOVF9MQVRFTkNZICAgICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgyMjAsIEZMQUcoVVBTVFJFQU0pKSwKLSAgR1NUX0VWRU5UX1NURVAgICAgICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDIzMCwgRkxBRyhVUFNUUkVBTSkpLAotICBHU1RfRVZFTlRfUkVDT05GSUdVUkUgICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMjQwLCBGTEFHKFVQU1RSRUFNKSksCi0gIEdTVF9FVkVOVF9UT0NfU0VMRUNUICAgICAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgyNTAsIEZMQUcoVVBTVFJFQU0pKSwKLSAgR1NUX0VWRU5UX1NFTEVDVF9TVFJFQU1TICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDI2MCwgRkxBRyhVUFNUUkVBTSkpLAotCi0gIC8qIGN1c3RvbSBldmVudHMgc3RhcnQgaGVyZSAqLwotICBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMjcwLCBGTEFHKFVQU1RSRUFNKSksCi0gIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTSAgICAgICAgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgyODAsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpKSwKLSAgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDI5MCwgRkxBRyhET1dOU1RSRUFNKSksCi0gIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9TVElDS1kgPSBHU1RfRVZFTlRfTUFLRV9UWVBFICgzMDAsIEZMQUcoRE9XTlNUUkVBTSkgfCBGTEFHKFNFUklBTElaRUQpIHwgRkxBRyhTVElDS1kpIHwgRkxBRyhTVElDS1lfTVVMVEkpKSwKLSAgR1NUX0VWRU5UX0NVU1RPTV9CT1RIICAgICAgICAgICAgICA9IEdTVF9FVkVOVF9NQUtFX1RZUEUgKDMxMCwgRkxBRyhCT1RIKSB8IEZMQUcoU0VSSUFMSVpFRCkpLAotICBHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09CICAgICAgICAgID0gR1NUX0VWRU5UX01BS0VfVFlQRSAoMzIwLCBGTEFHKEJPVEgpKQotfSBHc3RFdmVudFR5cGU7Ci0jdW5kZWYgRkxBRwotCi0vKioKLSAqIEdzdFN0cmVhbUZsYWdzOgotICogQEdTVF9TVFJFQU1fRkxBR19OT05FOiBUaGlzIHN0cmVhbSBoYXMgbm8gc3BlY2lhbCBhdHRyaWJ1dGVzCi0gKiBAR1NUX1NUUkVBTV9GTEFHX1NQQVJTRTogVGhpcyBzdHJlYW0gaXMgYSBzcGFyc2Ugc3RyZWFtIChlLmcuIGEgc3VidGl0bGUKLSAqICAgIHN0cmVhbSksIGRhdGEgbWF5IGZsb3cgb25seSBpbiBpcnJlZ3VsYXIgaW50ZXJ2YWxzIHdpdGggbGFyZ2UgZ2FwcyBpbgotICogICAgYmV0d2Vlbi4KLSAqIEBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUOiBUaGlzIHN0cmVhbSBzaG91bGQgYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC4gVGhpcwotICogICAgZmxhZyBtYXkgYmUgdXNlZCBieSBkZW11eGVycyB0byBzaWduYWwgdGhhdCBhIHN0cmVhbSBzaG91bGQgYmUgc2VsZWN0ZWQKLSAqICAgIGJ5IGRlZmF1bHQgaW4gYSBwbGF5YmFjayBzY2VuYXJpby4KLSAqIEBHU1RfU1RSRUFNX0ZMQUdfVU5TRUxFQ1Q6IFRoaXMgc3RyZWFtIHNob3VsZCBub3QgYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC4KLSAqICAgIFRoaXMgZmxhZyBtYXkgYmUgdXNlZCBieSBkZW11eGVycyB0byBzaWduYWwgdGhhdCBhIHN0cmVhbSBzaG91bGQgbm90Ci0gKiAgICBiZSBzZWxlY3RlZCBieSBkZWZhdWx0IGluIGEgcGxheWJhY2sgc2NlbmFyaW8sIGJ1dCBvbmx5IGlmIGV4cGxpY2l0bHkKLSAqICAgIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIChlLmcuIGFuIGF1ZGlvIHRyYWNrIGZvciB0aGUgaGFyZCBvZiBoZWFyaW5nIG9yCi0gKiAgICBhIGRpcmVjdG9yJ3MgY29tbWVudGFyeSB0cmFjaykuCi0gKgotICogU2luY2U6IDEuMgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfU1RSRUFNX0ZMQUdfTk9ORSwKLSAgR1NUX1NUUkVBTV9GTEFHX1NQQVJTRSAgICAgICA9ICgxIDw8IDApLAotICBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUICAgICAgID0gKDEgPDwgMSksCi0gIEdTVF9TVFJFQU1fRkxBR19VTlNFTEVDVCAgICAgPSAoMSA8PCAyKQotfSBHc3RTdHJlYW1GbGFnczsKLQotI2luY2x1ZGUgPGdzdC9nc3RtaW5pb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGZvcm1hdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2xvY2suaD4KLSNpbmNsdWRlIDxnc3QvZ3N0c3RydWN0dXJlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRhZ2xpc3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0c2VnbWVudC5oPgotI2luY2x1ZGUgPGdzdC9nc3RtZXNzYWdlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGNvbnRleHQuaD4KLQotR19CRUdJTl9ERUNMUwotCi1HU1RfRVhQT1JUIEdUeXBlIF9nc3RfZXZlbnRfdHlwZTsKLQotI2RlZmluZSBHU1RfVFlQRV9FVkVOVCAgICAgICAgICAgICAgICAgIChfZ3N0X2V2ZW50X3R5cGUpCi0jZGVmaW5lIEdTVF9JU19FVkVOVChvYmopICAgICAgICAgICAgICAgKEdTVF9JU19NSU5JX09CSkVDVF9UWVBFIChvYmosIEdTVF9UWVBFX0VWRU5UKSkKLSNkZWZpbmUgR1NUX0VWRU5UX0NBU1Qob2JqKSAgICAgICAgICAgICAoKEdzdEV2ZW50ICopKG9iaikpCi0jZGVmaW5lIEdTVF9FVkVOVChvYmopICAgICAgICAgICAgICAgICAgKEdTVF9FVkVOVF9DQVNUKG9iaikpCi0KLS8qKgotICogR1NUX0VWRU5UX1RZUEU6Ci0gKiBAZXZlbnQ6IHRoZSBldmVudCB0byBxdWVyeQotICoKLSAqIEdldCB0aGUgI0dzdEV2ZW50VHlwZSBvZiB0aGUgZXZlbnQuCi0gKi8KLSNkZWZpbmUgR1NUX0VWRU5UX1RZUEUoZXZlbnQpICAgICAgICAgICAoR1NUX0VWRU5UX0NBU1QoZXZlbnQpLT50eXBlKQotCi0vKioKLSAqIEdTVF9FVkVOVF9UWVBFX05BTUU6Ci0gKiBAZXZlbnQ6IHRoZSBldmVudCB0byBxdWVyeQotICoKLSAqIEdldCBhIGNvbnN0YW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgI0dzdEV2ZW50VHlwZSBvZiB0aGUgZXZlbnQuCi0gKi8KLSNkZWZpbmUgR1NUX0VWRU5UX1RZUEVfTkFNRShldmVudCkgICAgICAoZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUoR1NUX0VWRU5UX1RZUEUoZXZlbnQpKSkKLQotLyoqCi0gKiBHU1RfRVZFTlRfVElNRVNUQU1QOgotICogQGV2ZW50OiB0aGUgZXZlbnQgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlICNHc3RDbG9ja1RpbWUgdGltZXN0YW1wIG9mIHRoZSBldmVudC4gVGhpcyBpcyB0aGUgdGltZSB3aGVuIHRoZSBldmVudAotICogd2FzIGNyZWF0ZWQuCi0gKi8KLSNkZWZpbmUgR1NUX0VWRU5UX1RJTUVTVEFNUChldmVudCkgICAgICAoR1NUX0VWRU5UX0NBU1QoZXZlbnQpLT50aW1lc3RhbXApCi0KLS8qKgotICogR1NUX0VWRU5UX1NFUU5VTToKLSAqIEBldmVudDogdGhlIGV2ZW50IHRvIHF1ZXJ5Ci0gKgotICogVGhlIHNlcXVlbmNlIG51bWJlciBvZiBAZXZlbnQuCi0gKi8KLSNkZWZpbmUgR1NUX0VWRU5UX1NFUU5VTShldmVudCkgICAgICAgICAoR1NUX0VWRU5UX0NBU1QoZXZlbnQpLT5zZXFudW0pCi0KLS8qKgotICogR1NUX0VWRU5UX0lTX1VQU1RSRUFNOgotICogQGV2OiB0aGUgZXZlbnQgdG8gcXVlcnkKLSAqCi0gKiBDaGVjayBpZiBhbiBldmVudCBjYW4gdHJhdmVsIHVwc3RyZWFtLgotICovCi0jZGVmaW5lIEdTVF9FVkVOVF9JU19VUFNUUkVBTShldikgICAgICAgISEoR1NUX0VWRU5UX1RZUEUgKGV2KSAmIEdTVF9FVkVOVF9UWVBFX1VQU1RSRUFNKQotLyoqCi0gKiBHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTToKLSAqIEBldjogdGhlIGV2ZW50IHRvIHF1ZXJ5Ci0gKgotICogQ2hlY2sgaWYgYW4gZXZlbnQgY2FuIHRyYXZlbCBkb3duc3RyZWFtLgotICovCi0jZGVmaW5lIEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNKGV2KSAgICAgISEoR1NUX0VWRU5UX1RZUEUgKGV2KSAmIEdTVF9FVkVOVF9UWVBFX0RPV05TVFJFQU0pCi0vKioKLSAqIEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEOgotICogQGV2OiB0aGUgZXZlbnQgdG8gcXVlcnkKLSAqCi0gKiBDaGVjayBpZiBhbiBldmVudCBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGRhdGEgc3RyZWFtLgotICovCi0jZGVmaW5lIEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEKGV2KSAgICAgISEoR1NUX0VWRU5UX1RZUEUgKGV2KSAmIEdTVF9FVkVOVF9UWVBFX1NFUklBTElaRUQpCi0vKioKLSAqIEdTVF9FVkVOVF9JU19TVElDS1k6Ci0gKiBAZXY6IHRoZSBldmVudCB0byBxdWVyeQotICoKLSAqIENoZWNrIGlmIGFuIGV2ZW50IGlzIHN0aWNreSBvbiB0aGUgcGFkcy4KLSAqLwotI2RlZmluZSBHU1RfRVZFTlRfSVNfU1RJQ0tZKGV2KSAgICAgISEoR1NUX0VWRU5UX1RZUEUgKGV2KSAmIEdTVF9FVkVOVF9UWVBFX1NUSUNLWSkKLQotLyoqCi0gKiBnc3RfZXZlbnRfaXNfd3JpdGFibGU6Ci0gKiBAZXY6IGEgI0dzdEV2ZW50Ci0gKgotICogVGVzdHMgaWYgeW91IGNhbiBzYWZlbHkgd3JpdGUgZGF0YSBpbnRvIGEgZXZlbnQncyBzdHJ1Y3R1cmUgb3IgdmFsaWRseQotICogbW9kaWZ5IHRoZSBzZXFudW0gYW5kIHRpbWVzdGFtcCBmaWVsZC4KLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF9ldmVudF9pc193cml0YWJsZShldikgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2KSkKLS8qKgotICogZ3N0X2V2ZW50X21ha2Vfd3JpdGFibGU6Ci0gKiBAZXY6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0RXZlbnQKLSAqCi0gKiBNYWtlcyBhIHdyaXRhYmxlIGV2ZW50IGZyb20gdGhlIGdpdmVuIGV2ZW50LiBJZiB0aGUgc291cmNlIGV2ZW50IGlzCi0gKiBhbHJlYWR5IHdyaXRhYmxlLCB0aGlzIHdpbGwgc2ltcGx5IHJldHVybiB0aGUgc2FtZSBldmVudC4gQSBjb3B5IHdpbGwKLSAqIG90aGVyd2lzZSBiZSBtYWRlIHVzaW5nIGdzdF9ldmVudF9jb3B5KCkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHdyaXRhYmxlIGV2ZW50IHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHRoZQotICogICAgIHNhbWUgYXMgQGV2Ci0gKi8KLSNkZWZpbmUgICAgICAgICBnc3RfZXZlbnRfbWFrZV93cml0YWJsZShldikgICBHU1RfRVZFTlRfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChldikpKQotLyoqCi0gKiBnc3RfZXZlbnRfcmVwbGFjZToKLSAqIEBvbGRfZXZlbnQ6IChpbm91dCkgKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHBvaW50ZXIgdG8gYQotICogICAgIHBvaW50ZXIgdG8gYSAjR3N0RXZlbnQgdG8gYmUgcmVwbGFjZWQuCi0gKiBAbmV3X2V2ZW50OiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBwb2ludGVyIHRvIGEgI0dzdEV2ZW50IHRoYXQgd2lsbAotICogICAgIHJlcGxhY2UgdGhlIGV2ZW50IHBvaW50ZWQgdG8gYnkgQG9sZF9ldmVudC4KLSAqCi0gKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0RXZlbnQgdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgI0dzdEV2ZW50LiBUaGUKLSAqIG1vZGlmaWNhdGlvbiBpcyBkb25lIGF0b21pY2FsbHkgKHNvIHRoaXMgaXMgdXNlZnVsIGZvciBlbnN1cmluZyB0aHJlYWQgc2FmZXR5Ci0gKiBpbiBzb21lIGNhc2VzKSwgYW5kIHRoZSByZWZlcmVuY2UgY291bnRzIGFyZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgKHRoZSBvbGQKLSAqIGV2ZW50IGlzIHVucmVmZmVkLCB0aGUgbmV3IG9uZSBpcyByZWZmZWQpLgotICoKLSAqIEVpdGhlciBAbmV3X2V2ZW50IG9yIHRoZSAjR3N0RXZlbnQgcG9pbnRlZCB0byBieSBAb2xkX2V2ZW50IG1heSBiZSAlTlVMTC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmV3X2V2ZW50IHdhcyBkaWZmZXJlbnQgZnJvbSBAb2xkX2V2ZW50Ci0gKi8KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9ldmVudF9yZXBsYWNlIChHc3RFdmVudCAqKm9sZF9ldmVudCwgR3N0RXZlbnQgKm5ld19ldmVudCkKLXsKLSAgcmV0dXJuIGdzdF9taW5pX29iamVjdF9yZXBsYWNlICgoR3N0TWluaU9iamVjdCAqKikgb2xkX2V2ZW50LCAoR3N0TWluaU9iamVjdCAqKSBuZXdfZXZlbnQpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF9zdGVhbDoKLSAqIEBvbGRfZXZlbnQ6IChpbm91dCkgKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHBvaW50ZXIgdG8gYQotICogICAgIHBvaW50ZXIgdG8gYSAjR3N0RXZlbnQgdG8gYmUgc3RvbGVuLgotICoKLSAqIEF0b21pY2FsbHkgcmVwbGFjZSB0aGUgI0dzdEV2ZW50IHBvaW50ZWQgdG8gYnkgQG9sZF9ldmVudCB3aXRoICVOVUxMIGFuZAotICogcmV0dXJuIHRoZSBvcmlnaW5hbCBldmVudC4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgI0dzdEV2ZW50IHRoYXQgd2FzIGluIEBvbGRfZXZlbnQKLSAqLwotc3RhdGljIGlubGluZSBHc3RFdmVudCAqCi1nc3RfZXZlbnRfc3RlYWwgKEdzdEV2ZW50ICoqb2xkX2V2ZW50KQotewotICByZXR1cm4gR1NUX0VWRU5UX0NBU1QgKGdzdF9taW5pX29iamVjdF9zdGVhbCAoKEdzdE1pbmlPYmplY3QgKiopIG9sZF9ldmVudCkpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF90YWtlOgotICogQG9sZF9ldmVudDogKGlub3V0KSAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogcG9pbnRlciB0byBhCi0gKiAgICAgcG9pbnRlciB0byBhICNHc3RFdmVudCB0byBiZSBzdG9sZW4uCi0gKiBAbmV3X2V2ZW50OiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBwb2ludGVyIHRvIGEgI0dzdEV2ZW50IHRoYXQgd2lsbAotICogICAgIHJlcGxhY2UgdGhlIGV2ZW50IHBvaW50ZWQgdG8gYnkgQG9sZF9ldmVudC4KLSAqCi0gKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0RXZlbnQgdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgI0dzdEV2ZW50LiBUaGlzCi0gKiBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGdzdF9ldmVudF9yZXBsYWNlKCkgZXhjZXB0IHRoYXQgaXQgdGFrZXMgb3duZXJzaGlwIG9mCi0gKiBAbmV3X2V2ZW50LgotICoKLSAqIEVpdGhlciBAbmV3X2V2ZW50IG9yIHRoZSAjR3N0RXZlbnQgcG9pbnRlZCB0byBieSBAb2xkX2V2ZW50IG1heSBiZSAlTlVMTC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmV3X2V2ZW50IHdhcyBkaWZmZXJlbnQgZnJvbSBAb2xkX2V2ZW50Ci0gKi8KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9ldmVudF90YWtlIChHc3RFdmVudCAqKm9sZF9ldmVudCwgR3N0RXZlbnQgKm5ld19ldmVudCkKLXsKLSAgcmV0dXJuIGdzdF9taW5pX29iamVjdF90YWtlICgoR3N0TWluaU9iamVjdCAqKikgb2xkX2V2ZW50LCAoR3N0TWluaU9iamVjdCAqKSBuZXdfZXZlbnQpOwotfQotCi0vKioKLSAqIEdzdFFPU1R5cGU6Ci0gKiBAR1NUX1FPU19UWVBFX09WRVJGTE9XOiBUaGUgUW9TIGV2ZW50IHR5cGUgdGhhdCBpcyBwcm9kdWNlZCB3aGVuIHVwc3RyZWFtCi0gKiAgICBlbGVtZW50cyBhcmUgcHJvZHVjaW5nIGRhdGEgdG9vIHF1aWNrbHkgYW5kIHRoZSBlbGVtZW50IGNhbid0IGtlZXAgdXAKLSAqICAgIHByb2Nlc3NpbmcgdGhlIGRhdGEuIFVwc3RyZWFtIHNob3VsZCByZWR1Y2UgdGhlaXIgcHJvZHVjdGlvbiByYXRlLiBUaGlzCi0gKiAgICB0eXBlIGlzIGFsc28gdXNlZCB3aGVuIGJ1ZmZlcnMgYXJyaXZlIGVhcmx5IG9yIGluIHRpbWUuCi0gKiBAR1NUX1FPU19UWVBFX1VOREVSRkxPVzogVGhlIFFvUyBldmVudCB0eXBlIHRoYXQgaXMgcHJvZHVjZWQgd2hlbiB1cHN0cmVhbQotICogICAgZWxlbWVudHMgYXJlIHByb2R1Y2luZyBkYXRhIHRvbyBzbG93bHkgYW5kIG5lZWQgdG8gc3BlZWQgdXAgdGhlaXIKLSAqICAgIHByb2R1Y3Rpb24gcmF0ZS4KLSAqIEBHU1RfUU9TX1RZUEVfVEhST1RUTEU6IFRoZSBRb1MgZXZlbnQgdHlwZSB0aGF0IGlzIHByb2R1Y2VkIHdoZW4gdGhlCi0gKiAgICBhcHBsaWNhdGlvbiBlbmFibGVkIHRocm90dGxpbmcgdG8gbGltaXQgdGhlIGRhdGEgcmF0ZS4KLSAqCi0gKiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIFFvUyBldmVudHMgdGhhdCBjYW4gYmUgZ2l2ZW4gdG8gdGhlCi0gKiBnc3RfZXZlbnRfbmV3X3FvcygpIG1ldGhvZC4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1FPU19UWVBFX09WRVJGTE9XICAgICAgICA9IDAsCi0gIEdTVF9RT1NfVFlQRV9VTkRFUkZMT1cgICAgICAgPSAxLAotICBHU1RfUU9TX1RZUEVfVEhST1RUTEUgICAgICAgID0gMgotfSBHc3RRT1NUeXBlOwotCi0KLS8qKgotICogR3N0RXZlbnQ6Ci0gKiBAbWluaV9vYmplY3Q6IHRoZSBwYXJlbnQgc3RydWN0dXJlCi0gKiBAdHlwZTogdGhlICNHc3RFdmVudFR5cGUgb2YgdGhlIGV2ZW50Ci0gKiBAdGltZXN0YW1wOiB0aGUgdGltZXN0YW1wIG9mIHRoZSBldmVudAotICogQHNlcW51bTogdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgZXZlbnQKLSAqCi0gKiBBICNHc3RFdmVudC4KLSAqLwotc3RydWN0IF9Hc3RFdmVudCB7Ci0gIEdzdE1pbmlPYmplY3QgbWluaV9vYmplY3Q7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBDT1cgKi8KLSAgR3N0RXZlbnRUeXBlICB0eXBlOwotICBndWludDY0ICAgICAgIHRpbWVzdGFtcDsKLSAgZ3VpbnQzMiAgICAgICBzZXFudW07Ci19OwotCi1jb25zdCBnY2hhciogICAgZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUgICAgICAgICAoR3N0RXZlbnRUeXBlIHR5cGUpOwotR1F1YXJrICAgICAgICAgIGdzdF9ldmVudF90eXBlX3RvX3F1YXJrICAgICAgICAgKEdzdEV2ZW50VHlwZSB0eXBlKTsKLUdzdEV2ZW50VHlwZUZsYWdzCi0gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3R5cGVfZ2V0X2ZsYWdzICAgICAgICAoR3N0RXZlbnRUeXBlIHR5cGUpOwotCi0KLS8qIHJlZmNvdW50aW5nICovCi0vKioKLSAqIGdzdF9ldmVudF9yZWY6Ci0gKiBAZXZlbnQ6IFRoZSBldmVudCB0byByZWZjb3VudAotICoKLSAqIEluY3JlYXNlIHRoZSByZWZjb3VudCBvZiB0aGlzIGV2ZW50LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQGV2ZW50IChmb3IgY29udmVuaWVuY2Ugd2hlbiBkb2luZyBhc3NpZ25tZW50cykKLSAqLwotc3RhdGljIGlubGluZSBHc3RFdmVudCAqCi1nc3RfZXZlbnRfcmVmIChHc3RFdmVudCAqIGV2ZW50KQotewotICByZXR1cm4gKEdzdEV2ZW50ICopIGdzdF9taW5pX29iamVjdF9yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChldmVudCkpOwotfQotCi0vKioKLSAqIGdzdF9ldmVudF91bnJlZjoKLSAqIEBldmVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgZXZlbnQgdG8gcmVmY291bnQKLSAqCi0gKiBEZWNyZWFzZSB0aGUgcmVmY291bnQgb2YgYW4gZXZlbnQsIGZyZWVpbmcgaXQgaWYgdGhlIHJlZmNvdW50IHJlYWNoZXMgMC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfZXZlbnRfdW5yZWYgKEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2ZW50KSk7Ci19Ci0KLS8qIGNvcHkgZXZlbnQgKi8KLS8qKgotICogZ3N0X2V2ZW50X2NvcHk6Ci0gKiBAZXZlbnQ6IFRoZSBldmVudCB0byBjb3B5Ci0gKgotICogQ29weSB0aGUgZXZlbnQgdXNpbmcgdGhlIGV2ZW50IHNwZWNpZmljIGNvcHkgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IGV2ZW50Ci0gKi8KLXN0YXRpYyBpbmxpbmUgR3N0RXZlbnQgKgotZ3N0X2V2ZW50X2NvcHkgKGNvbnN0IEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIHJldHVybiBHU1RfRVZFTlRfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X2NvcHkgKEdTVF9NSU5JX09CSkVDVF9DT05TVF9DQVNUIChldmVudCkpKTsKLX0KLQotR1R5cGUgICAgICAgICAgIGdzdF9ldmVudF9nZXRfdHlwZSAgICAgICAgICAgICAgKHZvaWQpOwotCi0vKiBjdXN0b20gZXZlbnQgKi8KLUdzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAgICAgICAgICAgIChHc3RFdmVudFR5cGUgdHlwZSwgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUpIEdfR05VQ19NQUxMT0M7Ci0KLWNvbnN0IEdzdFN0cnVjdHVyZSAqCi0gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50KTsKLUdzdFN0cnVjdHVyZSAqICBnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlICAgIChHc3RFdmVudCAqZXZlbnQpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2V2ZW50X2hhc19uYW1lICAgICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBjb25zdCBnY2hhciAqbmFtZSk7Ci0KLS8qIGlkZW50aWZpZXJzIGZvciBldmVudHMgYW5kIG1lc3NhZ2VzICovCi1ndWludDMyICAgICAgICAgZ3N0X2V2ZW50X2dldF9zZXFudW0gICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50KTsKLXZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAgICAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIGd1aW50MzIgc2VxbnVtKTsKLQotLyogYWNjdW11bGF0ZWQgcGFkIG9mZnNldHMgZm9yIHRoZSBldmVudCAqLwotZ2ludDY0ICAgICAgICAgIGdzdF9ldmVudF9nZXRfcnVubmluZ190aW1lX29mZnNldCAoR3N0RXZlbnQgKmV2ZW50KTsKLXZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfc2V0X3J1bm5pbmdfdGltZV9vZmZzZXQgKEdzdEV2ZW50ICpldmVudCwgZ2ludDY0IG9mZnNldCk7Ci0KLS8qIFN0cmVhbSBzdGFydCBldmVudCAqLwotR3N0RXZlbnQgKiAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICAgICAgKGNvbnN0IGdjaGFyICpzdHJlYW1faWQpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydCAgICAoR3N0RXZlbnQgKmV2ZW50LCBjb25zdCBnY2hhciAqKnN0cmVhbV9pZCk7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3NldF9zdHJlYW0JCShHc3RFdmVudCAqZXZlbnQsIEdzdFN0cmVhbSAqc3RyZWFtKTsKLXZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtCQkoR3N0RXZlbnQgKmV2ZW50LCBHc3RTdHJlYW0gKipzdHJlYW0pOwotCi12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3NldF9zdHJlYW1fZmxhZ3MgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBHc3RTdHJlYW1GbGFncyBmbGFncyk7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9mbGFncyAgICAoR3N0RXZlbnQgKmV2ZW50LCBHc3RTdHJlYW1GbGFncyAqZmxhZ3MpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3NldF9ncm91cF9pZCAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBndWludCBncm91cF9pZCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX2dyb3VwX2lkICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBndWludCAqZ3JvdXBfaWQpOwotCi0vKiBmbHVzaCBldmVudHMgKi8KLUdzdEV2ZW50ICogICAgICBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICAgICAgICh2b2lkKSBHX0dOVUNfTUFMTE9DOwotCi1Hc3RFdmVudCAqICAgICAgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wICAgICAgICAoZ2Jvb2xlYW4gcmVzZXRfdGltZSkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfZmx1c2hfc3RvcCAgICAgIChHc3RFdmVudCAqZXZlbnQsIGdib29sZWFuICpyZXNldF90aW1lKTsKLQotLyogU3RyZWFtIGNvbGxlY3Rpb24gZXZlbnQgKi8KLUdzdEV2ZW50ICogICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9jb2xsZWN0aW9uICAgKEdzdFN0cmVhbUNvbGxlY3Rpb24gKmNvbGxlY3Rpb24pIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uIChHc3RFdmVudCAqZXZlbnQsIEdzdFN0cmVhbUNvbGxlY3Rpb24gKipjb2xsZWN0aW9uKTsKLQotLyogc2VsZWN0IHN0cmVhbXMgZXZlbnQgKi8KLUdzdEV2ZW50ICogICAgICBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zICAgIChHTGlzdCAqc3RyZWFtcyk7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlbGVjdF9zdHJlYW1zICAoR3N0RXZlbnQgKmV2ZW50LCBHTGlzdCAqKnN0cmVhbXMpOwotCi0vKiBzdHJlYW0tZ3JvdXAtZG9uZSBldmVudCAqLwotR3N0RXZlbnQgKiAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX2dyb3VwX2RvbmUgKGNvbnN0IGd1aW50IGdyb3VwX2lkKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZ3JvdXBfZG9uZSAoR3N0RXZlbnQgKmV2ZW50LCBndWludCAqZ3JvdXBfaWQpOwotCi0vKiBFT1MgZXZlbnQgKi8KLUdzdEV2ZW50ICogICAgICBnc3RfZXZlbnRfbmV3X2VvcyAgICAgICAgICAgICAgICh2b2lkKSBHX0dOVUNfTUFMTE9DOwotCi0vKiBHQVAgZXZlbnQgKi8KLUdzdEV2ZW50ICogICAgICBnc3RfZXZlbnRfbmV3X2dhcCAgICAgICAgICAgICAgIChHc3RDbG9ja1RpbWUgICB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICAgZHVyYXRpb24pIEdfR05VQ19NQUxMT0M7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfZ2FwICAgICAgICAgICAgIChHc3RFdmVudCAgICAgKiBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKiB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICogZHVyYXRpb24pOwotCi0vKiBDYXBzIGV2ZW50cyAqLwotR3N0RXZlbnQgKiAgICAgIGdzdF9ldmVudF9uZXdfY2FwcyAgICAgICAgICAgICAgKEdzdENhcHMgKmNhcHMpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBHc3RDYXBzICoqY2Fwcyk7Ci0KLS8qIHNlZ21lbnQgZXZlbnQgKi8KLUdzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgICAgICAgICAgIChjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50KSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50ICAgICAgICAgKEdzdEV2ZW50ICpldmVudCwgY29uc3QgR3N0U2VnbWVudCAqKnNlZ21lbnQpOwotdm9pZCAgICAgICAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgICAgICAgICAgKEdzdEV2ZW50ICpldmVudCwgR3N0U2VnbWVudCAqc2VnbWVudCk7Ci0KLS8qIHRhZyBldmVudCAqLwotR3N0RXZlbnQqICAgICAgIGdzdF9ldmVudF9uZXdfdGFnICAgICAgICAgICAgICAgKEdzdFRhZ0xpc3QgKnRhZ2xpc3QpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAgICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBHc3RUYWdMaXN0ICoqdGFnbGlzdCk7Ci0KLS8qIFRPQyBldmVudCAqLwotR3N0RXZlbnQqICAgICAgZ3N0X2V2ZW50X25ld190b2MgICAgICAgICAgICAgICAgKEdzdFRvYyAqdG9jLCBnYm9vbGVhbiB1cGRhdGVkKTsKLXZvaWQgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV90b2MgICAgICAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIEdzdFRvYyAqKnRvYywgZ2Jvb2xlYW4gKnVwZGF0ZWQpOwotCi0vKiBQcm90ZWN0aW9uIGV2ZW50ICovCi1Hc3RFdmVudCAqICAgICBnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24gICAgICAgICAoY29uc3QgZ2NoYXIgKiBzeXN0ZW1faWQsIEdzdEJ1ZmZlciAqIGRhdGEsIGNvbnN0IGdjaGFyICogb3JpZ2luKTsKLQotdm9pZCAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24gICAgICAgKEdzdEV2ZW50ICogZXZlbnQsIGNvbnN0IGdjaGFyICoqIHN5c3RlbV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKiogZGF0YSwgY29uc3QgZ2NoYXIgKiogb3JpZ2luKTsKLQotLyogYnVmZmVyICovCi1Hc3RFdmVudCAqICAgICAgZ3N0X2V2ZW50X25ld19idWZmZXJfc2l6ZSAgICAgICAoR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IG1pbnNpemUsIGdpbnQ2NCBtYXhzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGFzeW5jKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZSAgICAgKEdzdEV2ZW50ICpldmVudCwgR3N0Rm9ybWF0ICpmb3JtYXQsIGdpbnQ2NCAqbWluc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgKm1heHNpemUsIGdib29sZWFuICphc3luYyk7Ci0KLS8qIHNpbmsgbWVzc2FnZSAqLwotR3N0RXZlbnQqICAgICAgIGdzdF9ldmVudF9uZXdfc2lua19tZXNzYWdlICAgICAgKGNvbnN0IGdjaGFyICpuYW1lLCBHc3RNZXNzYWdlICptc2cpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZSAgICAoR3N0RXZlbnQgKmV2ZW50LCBHc3RNZXNzYWdlICoqbXNnKTsKLQotLyogUU9TIGV2ZW50cyAqLwotR3N0RXZlbnQqICAgICAgIGdzdF9ldmVudF9uZXdfcW9zICAgICAgICAgICAgICAgKEdzdFFPU1R5cGUgdHlwZSwgZ2RvdWJsZSBwcm9wb3J0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcW9zICAgICAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIEdzdFFPU1R5cGUgKnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAqcHJvcG9ydGlvbiwgR3N0Q2xvY2tUaW1lRGlmZiAqZGlmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgKnRpbWVzdGFtcCk7Ci0vKiBzZWVrIGV2ZW50ICovCi1Hc3RFdmVudCogICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICAgICAgICAgICAgICAoZ2RvdWJsZSByYXRlLCBHc3RGb3JtYXQgZm9ybWF0LCBHc3RTZWVrRmxhZ3MgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgZ2ludDY0IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZWtUeXBlIHN0b3BfdHlwZSwgZ2ludDY0IHN0b3ApIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgICAgICAgICAgICAoR3N0RXZlbnQgKmV2ZW50LCBnZG91YmxlICpyYXRlLCBHc3RGb3JtYXQgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTZWVrRmxhZ3MgKmZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZWtUeXBlICpzdGFydF90eXBlLCBnaW50NjQgKnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZWtUeXBlICpzdG9wX3R5cGUsIGdpbnQ2NCAqc3RvcCk7Ci0KLS8qIG5hdmlnYXRpb24gZXZlbnQgKi8KLUdzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X25hdmlnYXRpb24gICAgICAgIChHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSkgR19HTlVDX01BTExPQzsKLQotLyogbGF0ZW5jeSBldmVudCAqLwotR3N0RXZlbnQqICAgICAgIGdzdF9ldmVudF9uZXdfbGF0ZW5jeSAgICAgICAgICAgKEdzdENsb2NrVGltZSBsYXRlbmN5KSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9sYXRlbmN5ICAgICAgICAgKEdzdEV2ZW50ICpldmVudCwgR3N0Q2xvY2tUaW1lICpsYXRlbmN5KTsKLQotLyogc3RlcCBldmVudCAqLwotR3N0RXZlbnQqICAgICAgIGdzdF9ldmVudF9uZXdfc3RlcCAgICAgICAgICAgICAgKEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgYW1vdW50LCBnZG91YmxlIHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZmx1c2gsIGdib29sZWFuIGludGVybWVkaWF0ZSkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RlcCAgICAgICAgICAgIChHc3RFdmVudCAqZXZlbnQsIEdzdEZvcm1hdCAqZm9ybWF0LCBndWludDY0ICphbW91bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAqcmF0ZSwgZ2Jvb2xlYW4gKmZsdXNoLCBnYm9vbGVhbiAqaW50ZXJtZWRpYXRlKTsKLQotLyogcmVuZWdvdGlhdGUgZXZlbnQgKi8KLUdzdEV2ZW50KiAgICAgICBnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICAgICAgICh2b2lkKSBHX0dOVUNfTUFMTE9DOwotCi0vKiBUT0Mgc2VsZWN0IGV2ZW50ICovCi1Hc3RFdmVudCogICAgICAgZ3N0X2V2ZW50X25ld190b2Nfc2VsZWN0ICAgICAgICAoY29uc3QgZ2NoYXIgKnVpZCkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfdG9jX3NlbGVjdCAgICAgIChHc3RFdmVudCAqZXZlbnQsIGdjaGFyICoqdWlkKTsKLQotLyogc2VnbWVudC1kb25lIGV2ZW50ICovCi1Hc3RFdmVudCogICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50X2RvbmUgICAgICAoR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHBvc2l0aW9uKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50X2RvbmUgICAgKEdzdEV2ZW50ICpldmVudCwgR3N0Rm9ybWF0ICpmb3JtYXQsIGdpbnQ2NCAqcG9zaXRpb24pOwotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdEV2ZW50LCBnc3RfZXZlbnRfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0VWRU5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGZvcm1hdC5jIGIvZ3N0L2dzdGZvcm1hdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWFlNmM2Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3Rmb3JtYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3Rmb3JtYXQuYzogR3N0Rm9ybWF0IHJlZ2lzdHJhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3Rmb3JtYXQKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRHluYW1pY2FsbHkgcmVnaXN0ZXIgbmV3IGRhdGEgZm9ybWF0cwotICogQHNlZV9hbHNvOiAjR3N0UGFkLCAjR3N0RWxlbWVudAotICoKLSAqIEdzdEZvcm1hdHMgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHJlZ2lzdGVyIGEgbmV3IGZvcm1hdCB0byB0aGUgZ3N0cmVhbWVyCi0gKiBjb3JlLiAgRm9ybWF0cyBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHNlZWtpbmcgb3IgY29udmVyc2lvbnMvcXVlcnkKLSAqIG9wZXJhdGlvbnMuCi0gKi8KLQotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3Rmb3JtYXQuaCIKLSNpbmNsdWRlICJnc3RlbnVtdHlwZXMuaCIKLQotc3RhdGljIEdNdXRleCBtdXRleDsKLXN0YXRpYyBHTGlzdCAqX2dzdF9mb3JtYXRzID0gTlVMTDsKLXN0YXRpYyBHSGFzaFRhYmxlICpfbmlja190b19mb3JtYXQgPSBOVUxMOwotc3RhdGljIEdIYXNoVGFibGUgKl9mb3JtYXRfdG9fbmljayA9IE5VTEw7Ci1zdGF0aWMgZ3VpbnQzMiBfbl92YWx1ZXMgPSAxOyAgIC8qIHdlIHN0YXJ0IGZyb20gMSBiZWNhdXNlIDAgcmVzZXJ2ZWQgZm9yIFVOREVGSU5FRCAqLwotCi1zdGF0aWMgR3N0Rm9ybWF0RGVmaW5pdGlvbiBzdGFuZGFyZF9kZWZpbml0aW9uc1tdID0gewotICB7R1NUX0ZPUk1BVF9ERUZBVUxULCAiZGVmYXVsdCIsICJEZWZhdWx0IGZvcm1hdCBmb3IgdGhlIG1lZGlhIHR5cGUiLCAwfSwKLSAge0dTVF9GT1JNQVRfQllURVMsICJieXRlcyIsICJCeXRlcyIsIDB9LAotICB7R1NUX0ZPUk1BVF9USU1FLCAidGltZSIsICJUaW1lIiwgMH0sCi0gIHtHU1RfRk9STUFUX0JVRkZFUlMsICJidWZmZXJzIiwgIkJ1ZmZlcnMiLCAwfSwKLSAge0dTVF9GT1JNQVRfUEVSQ0VOVCwgInBlcmNlbnQiLCAiUGVyY2VudCIsIDB9LAotICB7R1NUX0ZPUk1BVF9VTkRFRklORUQsIE5VTEwsIE5VTEwsIDB9Ci19OwotCi12b2lkCi1fcHJpdl9nc3RfZm9ybWF0X2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIEdzdEZvcm1hdERlZmluaXRpb24gKnN0YW5kYXJkcyA9IHN0YW5kYXJkX2RlZmluaXRpb25zOwotCi0gIGdfbXV0ZXhfbG9jayAoJm11dGV4KTsKLSAgaWYgKF9uaWNrX3RvX2Zvcm1hdCA9PSBOVUxMKSB7Ci0gICAgX25pY2tfdG9fZm9ybWF0ID0gZ19oYXNoX3RhYmxlX25ldyAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOwotICAgIF9mb3JtYXRfdG9fbmljayA9IGdfaGFzaF90YWJsZV9uZXcgKE5VTEwsIE5VTEwpOwotICB9Ci0KLSAgd2hpbGUgKHN0YW5kYXJkcy0+bmljaykgewotICAgIHN0YW5kYXJkcy0+cXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoc3RhbmRhcmRzLT5uaWNrKTsKLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChfbmlja190b19mb3JtYXQsIChncG9pbnRlcikgc3RhbmRhcmRzLT5uaWNrLAotICAgICAgICBzdGFuZGFyZHMpOwotICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKF9mb3JtYXRfdG9fbmljaywgR0lOVF9UT19QT0lOVEVSIChzdGFuZGFyZHMtPnZhbHVlKSwKLSAgICAgICAgc3RhbmRhcmRzKTsKLQotICAgIF9nc3RfZm9ybWF0cyA9IGdfbGlzdF9hcHBlbmQgKF9nc3RfZm9ybWF0cywgc3RhbmRhcmRzKTsKLSAgICBzdGFuZGFyZHMrKzsKLSAgICBfbl92YWx1ZXMrKzsKLSAgfQotICAvKiBnZXR0aW5nIHRoZSB0eXBlIHJlZ2lzdGVycyB0aGUgZW51bSAqLwotICBnX3R5cGVfY2xhc3NfcmVmIChnc3RfZm9ybWF0X2dldF90eXBlICgpKTsKLSAgZ19tdXRleF91bmxvY2sgKCZtdXRleCk7Ci19Ci0KLS8qKgotICogZ3N0X2Zvcm1hdF9nZXRfbmFtZToKLSAqIEBmb3JtYXQ6IGEgI0dzdEZvcm1hdAotICoKLSAqIEdldCBhIHByaW50YWJsZSBuYW1lIGZvciB0aGUgZ2l2ZW4gZm9ybWF0LiBEbyBub3QgbW9kaWZ5IG9yIGZyZWUuCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogYSByZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBuYW1lIG9mIHRoZSBmb3JtYXQKLSAqIG9yICVOVUxMIGlmIHRoZSBmb3JtYXQgaXMgdW5rbm93bi4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoR3N0Rm9ybWF0IGZvcm1hdCkKLXsKLSAgY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZGVmOwotICBjb25zdCBnY2hhciAqcmVzdWx0OwotCi0gIGlmICgoZGVmID0gZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoZm9ybWF0KSkgIT0gTlVMTCkKLSAgICByZXN1bHQgPSBkZWYtPm5pY2s7Ci0gIGVsc2UKLSAgICByZXN1bHQgPSBOVUxMOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2Zvcm1hdF90b19xdWFyazoKLSAqIEBmb3JtYXQ6IGEgI0dzdEZvcm1hdAotICoKLSAqIEdldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gZm9ybWF0LgotICoKLSAqIFJldHVybnM6IHRoZSBxdWFyayBhc3NvY2lhdGVkIHdpdGggdGhlIGZvcm1hdCBvciAwIGlmIHRoZSBmb3JtYXQKLSAqIGlzIHVua25vd24uCi0gKi8KLUdRdWFyawotZ3N0X2Zvcm1hdF90b19xdWFyayAoR3N0Rm9ybWF0IGZvcm1hdCkKLXsKLSAgY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZGVmOwotICBHUXVhcmsgcmVzdWx0OwotCi0gIGlmICgoZGVmID0gZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoZm9ybWF0KSkgIT0gTlVMTCkKLSAgICByZXN1bHQgPSBkZWYtPnF1YXJrOwotICBlbHNlCi0gICAgcmVzdWx0ID0gMDsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9mb3JtYXRfcmVnaXN0ZXI6Ci0gKiBAbmljazogVGhlIG5pY2sgb2YgdGhlIG5ldyBmb3JtYXQKLSAqIEBkZXNjcmlwdGlvbjogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBuZXcgZm9ybWF0Ci0gKgotICogQ3JlYXRlIGEgbmV3IEdzdEZvcm1hdCBiYXNlZCBvbiB0aGUgbmljayBvciByZXR1cm4gYW4KLSAqIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3JtYXQgd2l0aCB0aGF0IG5pY2suCi0gKgotICogUmV0dXJuczogQSBuZXcgR3N0Rm9ybWF0IG9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3JtYXQKLSAqIHdpdGggdGhlIHNhbWUgbmljay4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RGb3JtYXQKLWdzdF9mb3JtYXRfcmVnaXN0ZXIgKGNvbnN0IGdjaGFyICogbmljaywgY29uc3QgZ2NoYXIgKiBkZXNjcmlwdGlvbikKLXsKLSAgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZm9ybWF0OwotICBHc3RGb3JtYXQgcXVlcnk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5pY2sgIT0gTlVMTCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzY3JpcHRpb24gIT0gTlVMTCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotCi0gIHF1ZXJ5ID0gZ3N0X2Zvcm1hdF9nZXRfYnlfbmljayAobmljayk7Ci0gIGlmIChxdWVyeSAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCkKLSAgICByZXR1cm4gcXVlcnk7Ci0KLSAgZ19tdXRleF9sb2NrICgmbXV0ZXgpOwotICBmb3JtYXQgPSBnX3NsaWNlX25ldyAoR3N0Rm9ybWF0RGVmaW5pdGlvbik7Ci0gIGZvcm1hdC0+dmFsdWUgPSAoR3N0Rm9ybWF0KSBfbl92YWx1ZXM7Ci0gIGZvcm1hdC0+bmljayA9IGdfc3RyZHVwIChuaWNrKTsKLSAgZm9ybWF0LT5kZXNjcmlwdGlvbiA9IGdfc3RyZHVwIChkZXNjcmlwdGlvbik7Ci0gIGZvcm1hdC0+cXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoZm9ybWF0LT5uaWNrKTsKLQotICBnX2hhc2hfdGFibGVfaW5zZXJ0IChfbmlja190b19mb3JtYXQsIChncG9pbnRlcikgZm9ybWF0LT5uaWNrLCBmb3JtYXQpOwotICBnX2hhc2hfdGFibGVfaW5zZXJ0IChfZm9ybWF0X3RvX25pY2ssIEdJTlRfVE9fUE9JTlRFUiAoZm9ybWF0LT52YWx1ZSksCi0gICAgICBmb3JtYXQpOwotICBfZ3N0X2Zvcm1hdHMgPSBnX2xpc3RfYXBwZW5kIChfZ3N0X2Zvcm1hdHMsIGZvcm1hdCk7Ci0gIF9uX3ZhbHVlcysrOwotICBnX211dGV4X3VubG9jayAoJm11dGV4KTsKLQotICByZXR1cm4gZm9ybWF0LT52YWx1ZTsKLX0KLQotLyoqCi0gKiBnc3RfZm9ybWF0X2dldF9ieV9uaWNrOgotICogQG5pY2s6IFRoZSBuaWNrIG9mIHRoZSBmb3JtYXQKLSAqCi0gKiBSZXR1cm4gdGhlIGZvcm1hdCByZWdpc3RlcmVkIHdpdGggdGhlIGdpdmVuIG5pY2suCi0gKgotICogUmV0dXJuczogVGhlIGZvcm1hdCB3aXRoIEBuaWNrIG9yIEdTVF9GT1JNQVRfVU5ERUZJTkVECi0gKiBpZiB0aGUgZm9ybWF0IHdhcyBub3QgcmVnaXN0ZXJlZC4KLSAqLwotR3N0Rm9ybWF0Ci1nc3RfZm9ybWF0X2dldF9ieV9uaWNrIChjb25zdCBnY2hhciAqIG5pY2spCi17Ci0gIEdzdEZvcm1hdERlZmluaXRpb24gKmZvcm1hdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmljayAhPSBOVUxMLCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmbXV0ZXgpOwotICBmb3JtYXQgPSBnX2hhc2hfdGFibGVfbG9va3VwIChfbmlja190b19mb3JtYXQsIG5pY2spOwotICBnX211dGV4X3VubG9jayAoJm11dGV4KTsKLQotICBpZiAoZm9ybWF0ICE9IE5VTEwpCi0gICAgcmV0dXJuIGZvcm1hdC0+dmFsdWU7Ci0gIGVsc2UKLSAgICByZXR1cm4gR1NUX0ZPUk1BVF9VTkRFRklORUQ7Ci19Ci0KLS8qKgotICogZ3N0X2Zvcm1hdHNfY29udGFpbnM6Ci0gKiBAZm9ybWF0czogKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogVGhlIGZvcm1hdCBhcnJheSB0byBzZWFyY2gKLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgdG8gZmluZAotICoKLSAqIFNlZSBpZiB0aGUgZ2l2ZW4gZm9ybWF0IGlzIGluc2lkZSB0aGUgZm9ybWF0IGFycmF5LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBmb3JtYXQgaXMgZm91bmQgaW5zaWRlIHRoZSBhcnJheQotICovCi1nYm9vbGVhbgotZ3N0X2Zvcm1hdHNfY29udGFpbnMgKGNvbnN0IEdzdEZvcm1hdCAqIGZvcm1hdHMsIEdzdEZvcm1hdCBmb3JtYXQpCi17Ci0gIGlmICghZm9ybWF0cykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgd2hpbGUgKCpmb3JtYXRzKSB7Ci0gICAgaWYgKCpmb3JtYXRzID09IGZvcm1hdCkKLSAgICAgIHJldHVybiBUUlVFOwotCi0gICAgZm9ybWF0cysrOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotCi0vKioKLSAqIGdzdF9mb3JtYXRfZ2V0X2RldGFpbHM6Ci0gKiBAZm9ybWF0OiBUaGUgZm9ybWF0IHRvIGdldCBkZXRhaWxzIG9mCi0gKgotICogR2V0IGRldGFpbHMgYWJvdXQgdGhlIGdpdmVuIGZvcm1hdC4KLSAqCi0gKiBSZXR1cm5zOiAobnVsbGFibGUpOiBUaGUgI0dzdEZvcm1hdERlZmluaXRpb24gZm9yIEBmb3JtYXQgb3IgJU5VTEwKLSAqIG9uIGZhaWx1cmUuCi0gKgotICogTVQgc2FmZS4KLSAqLwotY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqCi1nc3RfZm9ybWF0X2dldF9kZXRhaWxzIChHc3RGb3JtYXQgZm9ybWF0KQotewotICBjb25zdCBHc3RGb3JtYXREZWZpbml0aW9uICpyZXN1bHQ7Ci0KLSAgZ19tdXRleF9sb2NrICgmbXV0ZXgpOwotICByZXN1bHQgPSBnX2hhc2hfdGFibGVfbG9va3VwIChfZm9ybWF0X3RvX25pY2ssIEdJTlRfVE9fUE9JTlRFUiAoZm9ybWF0KSk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zOgotICoKLSAqIEl0ZXJhdGUgYWxsIHRoZSByZWdpc3RlcmVkIGZvcm1hdHMuIFRoZSBmb3JtYXQgZGVmaW5pdGlvbiBpcyByZWFkCi0gKiBvbmx5LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBHc3RJdGVyYXRvciBvZiAjR3N0Rm9ybWF0RGVmaW5pdGlvbi4KLSAqLwotR3N0SXRlcmF0b3IgKgotZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zICh2b2lkKQotewotICBHc3RJdGVyYXRvciAqcmVzdWx0OwotCi0gIGdfbXV0ZXhfbG9jayAoJm11dGV4KTsKLSAgLyogRklYTUU6IHJlZ2lzdGVyIGEgYm94ZWQgdHlwZSBmb3IgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqLwotICByZXN1bHQgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdfVFlQRV9QT0lOVEVSLAotICAgICAgJm11dGV4LCAmX25fdmFsdWVzLCAmX2dzdF9mb3JtYXRzLCBOVUxMLCBOVUxMKTsKLSAgZ19tdXRleF91bmxvY2sgKCZtdXRleCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3Rmb3JtYXQuaCBiL2dzdC9nc3Rmb3JtYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1OGVhMS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0Zm9ybWF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KLSAqCi0gKiBnc3Rmb3JtYXQuaDogSGVhZGVyIGZvciBHc3RGb3JtYXQgdHlwZXMgdXNlZCBpbiBxdWVyaWVzIGFuZAotICogICAgICAgICAgICAgIHNlZWtpbmcuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0ZPUk1BVF9IX18KLSNkZWZpbmUgX19HU1RfRk9STUFUX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdGl0ZXJhdG9yLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotLyoqCi0gKiBHc3RGb3JtYXQ6Ci0gKiBAR1NUX0ZPUk1BVF9VTkRFRklORUQ6IHVuZGVmaW5lZCBmb3JtYXQKLSAqIEBHU1RfRk9STUFUX0RFRkFVTFQ6IHRoZSBkZWZhdWx0IGZvcm1hdCBvZiB0aGUgcGFkL2VsZW1lbnQuIFRoaXMgY2FuIGJlCi0gKiAgICBzYW1wbGVzIGZvciByYXcgYXVkaW8sIGZyYW1lcy9maWVsZHMgZm9yIHJhdyB2aWRlbyAoc29tZSwgYnV0IG5vdCBhbGwsCi0gKiAgICBlbGVtZW50cyBzdXBwb3J0IHRoaXM7IHVzZSBAR1NUX0ZPUk1BVF9USU1FIGlmIHlvdSBkb24ndCBoYXZlIGEgZ29vZAotICogICAgcmVhc29uIHRvIHF1ZXJ5IGZvciBzYW1wbGVzL2ZyYW1lcykKLSAqIEBHU1RfRk9STUFUX0JZVEVTOiBieXRlcwotICogQEdTVF9GT1JNQVRfVElNRTogdGltZSBpbiBuYW5vc2Vjb25kcwotICogQEdTVF9GT1JNQVRfQlVGRkVSUzogYnVmZmVycyAoZmV3LCBpZiBhbnksIGVsZW1lbnRzIGltcGxlbWVudCB0aGlzIGFzIG9mCi0gKiAgICAgTWF5IDIwMDkpCi0gKiBAR1NUX0ZPUk1BVF9QRVJDRU5UOiBwZXJjZW50YWdlIG9mIHN0cmVhbSAoZmV3LCBpZiBhbnksIGVsZW1lbnRzIGltcGxlbWVudAotICogICAgIHRoaXMgYXMgb2YgTWF5IDIwMDkpCi0gKgotICogU3RhbmRhcmQgcHJlZGVmaW5lZCBmb3JtYXRzCi0gKi8KLS8qIE5PVEU6IGRvbid0IGZvcmdldCB0byB1cGRhdGUgdGhlIHRhYmxlIGluIGdzdGZvcm1hdC5jIHdoZW4gY2hhbmdpbmcKLSAqIHRoaXMgZW51bSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0ZPUk1BVF9VTkRFRklORUQgID0gIDAsIC8qIG11c3QgYmUgZmlyc3QgaW4gbGlzdCAqLwotICBHU1RfRk9STUFUX0RFRkFVTFQgICAgPSAgMSwKLSAgR1NUX0ZPUk1BVF9CWVRFUyAgICAgID0gIDIsCi0gIEdTVF9GT1JNQVRfVElNRSAgICAgICA9ICAzLAotICBHU1RfRk9STUFUX0JVRkZFUlMgICAgPSAgNCwKLSAgR1NUX0ZPUk1BVF9QRVJDRU5UICAgID0gIDUKLX0gR3N0Rm9ybWF0OwotCi0vKiBhIHBlcmNlbnRhZ2UgaXMgYWx3YXlzIHJlbGF0aXZlIHRvIDEwMDAwMDAgKi8KLS8qKgotICogR1NUX0ZPUk1BVF9QRVJDRU5UX01BWDoKLSAqCi0gKiBUaGUgUEVSQ0VOVCBmb3JtYXQgaXMgYmV0d2VlbiAwIGFuZCB0aGlzIHZhbHVlCi0gKi8KLSNkZWZpbmUgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCAgICAgICAgICBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMDAwMCkKLS8qKgotICogR1NUX0ZPUk1BVF9QRVJDRU5UX1NDQUxFOgotICoKLSAqIFRoZSB2YWx1ZSB1c2VkIHRvIHNjYWxlIGRvd24gdGhlIHJlcG9ydGVkIFBFUkNFTlQgZm9ybWF0IHZhbHVlIHRvCi0gKiBpdHMgcmVhbCB2YWx1ZS4KLSAqLwotI2RlZmluZSBHU1RfRk9STUFUX1BFUkNFTlRfU0NBTEUgICAgICAgIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwMCkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEZvcm1hdERlZmluaXRpb24gR3N0Rm9ybWF0RGVmaW5pdGlvbjsKLQotLyoqCi0gKiBHc3RGb3JtYXREZWZpbml0aW9uOgotICogQHZhbHVlOiBUaGUgdW5pcXVlIGlkIG9mIHRoaXMgZm9ybWF0Ci0gKiBAbmljazogQSBzaG9ydCBuaWNrIG9mIHRoZSBmb3JtYXQKLSAqIEBkZXNjcmlwdGlvbjogQSBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdAotICogQHF1YXJrOiBBIHF1YXJrIGZvciB0aGUgbmljawotICoKLSAqIEEgZm9ybWF0IGRlZmluaXRpb24KLSAqLwotc3RydWN0IF9Hc3RGb3JtYXREZWZpbml0aW9uCi17Ci0gIEdzdEZvcm1hdCAgICB2YWx1ZTsKLSAgY29uc3QgZ2NoYXIgKm5pY2s7Ci0gIGNvbnN0IGdjaGFyICpkZXNjcmlwdGlvbjsKLSAgR1F1YXJrICAgICAgIHF1YXJrOwotfTsKLQotY29uc3QgZ2NoYXIqICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgICAgICAgICAgICAgKEdzdEZvcm1hdCBmb3JtYXQpOwotR1F1YXJrICAgICAgICAgIGdzdF9mb3JtYXRfdG9fcXVhcmsgICAgICAgICAgICAgKEdzdEZvcm1hdCBmb3JtYXQpOwotCi0vKiByZWdpc3RlciBhIG5ldyBmb3JtYXQgKi8KLUdzdEZvcm1hdCAgICAgICBnc3RfZm9ybWF0X3JlZ2lzdGVyICAgICAgICAgICAgIChjb25zdCBnY2hhciAqbmljaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZGVzY3JpcHRpb24pOwotR3N0Rm9ybWF0ICAgICAgIGdzdF9mb3JtYXRfZ2V0X2J5X25pY2sgICAgICAgICAgKGNvbnN0IGdjaGFyICpuaWNrKTsKLQotLyogY2hlY2sgaWYgYSBmb3JtYXQgaXMgaW4gYW4gYXJyYXkgb2YgZm9ybWF0cyAqLwotZ2Jvb2xlYW4gICAgICAgIGdzdF9mb3JtYXRzX2NvbnRhaW5zICAgICAgICAgICAgKGNvbnN0IEdzdEZvcm1hdCAqZm9ybWF0cywgR3N0Rm9ybWF0IGZvcm1hdCk7Ci0KLS8qIHF1ZXJ5IGZvciBmb3JtYXQgZGV0YWlscyAqLwotY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbioKLSAgICAgICAgICAgICAgICBnc3RfZm9ybWF0X2dldF9kZXRhaWxzICAgICAgICAgIChHc3RGb3JtYXQgZm9ybWF0KTsKLUdzdEl0ZXJhdG9yKiAgICBnc3RfZm9ybWF0X2l0ZXJhdGVfZGVmaW5pdGlvbnMgICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZPUk1BVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RnaG9zdHBhZC5jIGIvZ3N0L2dzdGdob3N0cGFkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ODk0MzIuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGdob3N0cGFkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4ODQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICoJCSAgICAgIDIwMDYgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLSAqCi0gKiBnc3RnaG9zdHBhZC5jOiBQcm94eSBwYWRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGdob3N0cGFkCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFBzZXVkbyBsaW5rIHBhZHMKLSAqIEBzZWVfYWxzbzogI0dzdFBhZAotICoKLSAqIEdob3N0UGFkcyBhcmUgdXNlZnVsIHdoZW4gb3JnYW5pemluZyBwaXBlbGluZXMgd2l0aCAjR3N0QmluIGxpa2UgZWxlbWVudHMuCi0gKiBUaGUgaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBoaWVyYXJjaGljYWwgZWxlbWVudCBncmFwaHMuIFRoZSBiaW4gZWxlbWVudAotICogY29udGFpbnMgYSBzdWItZ3JhcGguIE5vdyBvbmUgd291bGQgbGlrZSB0byB0cmVhdCB0aGUgYmluLWVsZW1lbnQgbGlrZSBhbnkKLSAqIG90aGVyICNHc3RFbGVtZW50LiBUaGlzIGlzIHdoZXJlIEdob3N0UGFkcyBjb21lIGludG8gcGxheS4gQSBHaG9zdFBhZCBhY3RzIGFzCi0gKiBhIHByb3h5IGZvciBhbm90aGVyIHBhZC4gVGh1cyB0aGUgYmluIGNhbiBoYXZlIHNpbmsgYW5kIHNvdXJjZSBnaG9zdC1wYWRzCi0gKiB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggc2luayBhbmQgc291cmNlIHBhZHMgb2YgdGhlIGNoaWxkIGVsZW1lbnRzLgotICoKLSAqIElmIHRoZSB0YXJnZXQgcGFkIGlzIGtub3duIGF0IGNyZWF0aW9uIHRpbWUsIGdzdF9naG9zdF9wYWRfbmV3KCkgaXMgdGhlCi0gKiBmdW5jdGlvbiB0byB1c2UgdG8gZ2V0IGEgZ2hvc3QtcGFkLiBPdGhlcndpc2Ugb25lIGNhbiB1c2UgZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0KCkKLSAqIHRvIGNyZWF0ZSB0aGUgZ2hvc3QtcGFkIGFuZCB1c2UgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KCkgdG8gZXN0YWJsaXNoIHRoZQotICogYXNzb2NpYXRpb24gbGF0ZXIgb24uCi0gKgotICogTm90ZSB0aGF0IEdob3N0UGFkcyBhZGQgb3ZlcmhlYWQgdG8gdGhlIGRhdGEgcHJvY2Vzc2luZyBvZiBhIHBpcGVsaW5lLgotICovCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdzdGluZm8uaCIKLQotI2luY2x1ZGUgImdzdGdob3N0cGFkLmgiCi0jaW5jbHVkZSAiZ3N0LmgiCi0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIEdTVF9DQVRfUEFEUwotCi0jZGVmaW5lIEdTVF9QUk9YWV9QQURfQ0FTVChvYmopICAgICAgICAgKChHc3RQcm94eVBhZCAqKW9iaikKLSNkZWZpbmUgR1NUX1BST1hZX1BBRF9QUklWQVRFKG9iaikgICAgICAoR1NUX1BST1hZX1BBRF9DQVNUIChvYmopLT5wcml2KQotI2RlZmluZSBHU1RfUFJPWFlfUEFEX1RBUkdFVChwYWQpICAgICAgIChHU1RfUEFEX1BFRVIgKEdTVF9QUk9YWV9QQURfSU5URVJOQUwgKHBhZCkpKQotI2RlZmluZSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMKHBhZCkgICAgIChHU1RfUFJPWFlfUEFEX1BSSVZBVEUgKHBhZCktPmludGVybmFsKQotCi0jZGVmaW5lIEdTVF9QUk9YWV9QQURfQUNRVUlSRV9JTlRFUk5BTChwYWQsIGludGVybmFsLCByZXR2YWwpICAgICAgICAgICBcCi0gIGludGVybmFsID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBHU1RfUEFEX0NBU1QgKGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsIChHU1RfUFJPWFlfUEFEX0NBU1QgKHBhZCkpKTsgXAotICBpZiAoaW50ZXJuYWwgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiByZXR2YWw7Ci0KLSNkZWZpbmUgR1NUX1BST1hZX1BBRF9SRUxFQVNFX0lOVEVSTkFMKGludGVybmFsKSBnc3Rfb2JqZWN0X3VucmVmIChpbnRlcm5hbCk7Ci0KLXN0cnVjdCBfR3N0UHJveHlQYWRQcml2YXRlCi17Ci0gIEdzdFBhZCAqaW50ZXJuYWw7Ci19OwotCi1HX0RFRklORV9UWVBFIChHc3RQcm94eVBhZCwgZ3N0X3Byb3h5X3BhZCwgR1NUX1RZUEVfUEFEKTsKLQotc3RhdGljIEdzdFBhZCAqZ3N0X3Byb3h5X3BhZF9nZXRfdGFyZ2V0IChHc3RQYWQgKiBwYWQpOwotCi0vKioKLSAqIGdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0OgotICogQHBhZDogdGhlICNHc3RQYWQgdG8gZ2V0IHRoZSBpbnRlcm5hbCBsaW5rcyBvZi4KLSAqIEBwYXJlbnQ6IChhbGxvdy1ub25lKTogdGhlIHBhcmVudCBvZiBAcGFkIG9yICVOVUxMCi0gKgotICogSW52b2tlIHRoZSBkZWZhdWx0IGl0ZXJhdGUgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb24gb2YgdGhlIHByb3h5IHBhZC4KLSAqCi0gKiBSZXR1cm5zOiAobnVsbGFibGUpOiBhICNHc3RJdGVyYXRvciBvZiAjR3N0UGFkLCBvciAlTlVMTCBpZiBAcGFkCi0gKiBoYXMgbm8gcGFyZW50LiBVbnJlZiBlYWNoIHJldHVybmVkIHBhZCB3aXRoIGdzdF9vYmplY3RfdW5yZWYoKS4KLSAqLwotR3N0SXRlcmF0b3IgKgotZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50KQotewotICBHc3RJdGVyYXRvciAqcmVzID0gTlVMTDsKLSAgR3N0UGFkICppbnRlcm5hbDsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QUk9YWV9QQUQgKHBhZCksIE5VTEwpOwotCi0gIEdTVF9QUk9YWV9QQURfQUNRVUlSRV9JTlRFUk5BTCAocGFkLCBpbnRlcm5hbCwgTlVMTCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR1NUX1RZUEVfUEFEKTsKLSAgZ192YWx1ZV90YWtlX29iamVjdCAoJnYsIGludGVybmFsKTsKLSAgcmVzID0gZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgKEdTVF9UWVBFX1BBRCwgJnYpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQ6Ci0gKiBAcGFkOiBhIHNpbmsgI0dzdFBhZCwgcmV0dXJucyBHU1RfRkxPV19FUlJPUiBpZiBub3QuCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZCBvciAlTlVMTAotICogQGJ1ZmZlcjogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEJ1ZmZlciB0byBzZW5kLCByZXR1cm4gR1NUX0ZMT1dfRVJST1IKLSAqICAgICBpZiBub3QuCi0gKgotICogSW52b2tlIHRoZSBkZWZhdWx0IGNoYWluIGZ1bmN0aW9uIG9mIHRoZSBwcm94eSBwYWQuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwYWQuCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0UGFkICppbnRlcm5hbDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIEdTVF9QUk9YWV9QQURfQUNRVUlSRV9JTlRFUk5BTCAocGFkLCBpbnRlcm5hbCwgR1NUX0ZMT1dfTk9UX0xJTktFRCk7Ci0gIHJlcyA9IGdzdF9wYWRfcHVzaCAoaW50ZXJuYWwsIGJ1ZmZlcik7Ci0gIEdTVF9QUk9YWV9QQURfUkVMRUFTRV9JTlRFUk5BTCAoaW50ZXJuYWwpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X3Byb3h5X3BhZF9jaGFpbl9saXN0X2RlZmF1bHQ6Ci0gKiBAcGFkOiBhIHNpbmsgI0dzdFBhZCwgcmV0dXJucyBHU1RfRkxPV19FUlJPUiBpZiBub3QuCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZCBvciAlTlVMTAotICogQGxpc3Q6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RCdWZmZXJMaXN0IHRvIHNlbmQsIHJldHVybiBHU1RfRkxPV19FUlJPUgotICogICAgIGlmIG5vdC4KLSAqCi0gKiBJbnZva2UgdGhlIGRlZmF1bHQgY2hhaW4gbGlzdCBmdW5jdGlvbiBvZiB0aGUgcHJveHkgcGFkLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gZnJvbSB0aGUgcGFkLgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyTGlzdCAqIGxpc3QpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RQYWQgKmludGVybmFsOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJPWFlfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX1BST1hZX1BBRF9BQ1FVSVJFX0lOVEVSTkFMIChwYWQsIGludGVybmFsLCBHU1RfRkxPV19OT1RfTElOS0VEKTsKLSAgcmVzID0gZ3N0X3BhZF9wdXNoX2xpc3QgKGludGVybmFsLCBsaXN0KTsKLSAgR1NUX1BST1hZX1BBRF9SRUxFQVNFX0lOVEVSTkFMIChpbnRlcm5hbCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcHJveHlfcGFkX2dldHJhbmdlX2RlZmF1bHQ6Ci0gKiBAcGFkOiBhIHNyYyAjR3N0UGFkLCByZXR1cm5zICNHU1RfRkxPV19FUlJPUiBpZiBub3QuCi0gKiBAcGFyZW50OiB0aGUgcGFyZW50IG9mIEBwYWQKLSAqIEBvZmZzZXQ6IFRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIGJ1ZmZlcgotICogQHNpemU6IFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcgotICogQGJ1ZmZlcjogKG91dCBjYWxsZWUtYWxsb2NhdGVzKTogYSBwb2ludGVyIHRvIGhvbGQgdGhlICNHc3RCdWZmZXIsCi0gKiAgICAgcmV0dXJucyAjR1NUX0ZMT1dfRVJST1IgaWYgJU5VTEwuCi0gKgotICogSW52b2tlIHRoZSBkZWZhdWx0IGdldHJhbmdlIGZ1bmN0aW9uIG9mIHRoZSBwcm94eSBwYWQuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwYWQuCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsIEdzdEJ1ZmZlciAqKiBidWZmZXIpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RQYWQgKmludGVybmFsOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJPWFlfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIEdTVF9QUk9YWV9QQURfQUNRVUlSRV9JTlRFUk5BTCAocGFkLCBpbnRlcm5hbCwgR1NUX0ZMT1dfTk9UX0xJTktFRCk7Ci0gIHJlcyA9IGdzdF9wYWRfcHVsbF9yYW5nZSAoaW50ZXJuYWwsIG9mZnNldCwgc2l6ZSwgYnVmZmVyKTsKLSAgR1NUX1BST1hZX1BBRF9SRUxFQVNFX0lOVEVSTkFMIChpbnRlcm5hbCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3RfcHJveHlfcGFkX2dldF90YXJnZXQgKEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0UGFkICp0YXJnZXQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICB0YXJnZXQgPSBnc3RfcGFkX2dldF9wZWVyIChHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChwYWQpKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIHRhcmdldDsKLX0KLQotLyoqCi0gKiBnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbDoKLSAqIEBwYWQ6IHRoZSAjR3N0UHJveHlQYWQKLSAqCi0gKiBHZXQgdGhlIGludGVybmFsIHBhZCBvZiBAcGFkLiBVbnJlZiB0YXJnZXQgcGFkIGFmdGVyIHVzYWdlLgotICoKLSAqIFRoZSBpbnRlcm5hbCBwYWQgb2YgYSAjR3N0R2hvc3RQYWQgaXMgdGhlIGludGVybmFsbHkgdXNlZAotICogcGFkIG9mIG9wcG9zaXRlIGRpcmVjdGlvbiwgd2hpY2ggaXMgdXNlZCB0byBsaW5rIHRvIHRoZSB0YXJnZXQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSB0YXJnZXQgI0dzdFByb3h5UGFkLCBjYW4KLSAqIGJlICVOVUxMLiAgVW5yZWYgdGFyZ2V0IHBhZCBhZnRlciB1c2FnZS4KLSAqLwotR3N0UHJveHlQYWQgKgotZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwgKEdzdFByb3h5UGFkICogcGFkKQotewotICBHc3RQYWQgKmludGVybmFsOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJPWFlfUEFEIChwYWQpLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIGludGVybmFsID0gR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAocGFkKTsKLSAgaWYgKGludGVybmFsKQotICAgIGdzdF9vYmplY3RfcmVmIChpbnRlcm5hbCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIHJldHVybiBHU1RfUFJPWFlfUEFEX0NBU1QgKGludGVybmFsKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wcm94eV9wYWRfY2xhc3NfaW5pdCAoR3N0UHJveHlQYWRDbGFzcyAqIGtsYXNzKQotewotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdFByb3h5UGFkUHJpdmF0ZSkpOwotCi0gIC8qIFJlZ2lzdGVyIGNvbW1vbiBmdW5jdGlvbiBwb2ludGVyIGRlc2NyaXB0aW9ucyAqLwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3Byb3h5X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQpOwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3Byb3h5X3BhZF9jaGFpbl9kZWZhdWx0KTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0KTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHJveHlfcGFkX2luaXQgKEdzdFByb3h5UGFkICogcHBhZCkKLXsKLSAgR3N0UGFkICpwYWQgPSAoR3N0UGFkICopIHBwYWQ7Ci0KLSAgR1NUX1BST1hZX1BBRF9QUklWQVRFIChwcGFkKSA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAocHBhZCwKLSAgICAgIEdTVF9UWVBFX1BST1hZX1BBRCwgR3N0UHJveHlQYWRQcml2YXRlKTsKLQotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChwYWQsCi0gICAgICBnc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCk7Ci0KLSAgR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUyAocGFkKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfU0NIRURVTElORyAocGFkKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQUxMT0NBVElPTiAocGFkKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdob3N0IHBhZHMsIGltcGxlbWVudGVkIGFzIGEgcGFpciBvZiBwcm94eSBwYWRzIChzb3J0IG9mKQotICovCi0KLQotI2RlZmluZSBHU1RfR0hPU1RfUEFEX1BSSVZBVEUob2JqKQkoR1NUX0dIT1NUX1BBRF9DQVNUIChvYmopLT5wcml2KQotCi1zdHJ1Y3QgX0dzdEdob3N0UGFkUHJpdmF0ZQotewotICAvKiB3aXRoIFBST1hZX0xPQ0sgKi8KLSAgZ2Jvb2xlYW4gY29uc3RydWN0ZWQ7Ci19OwotCi1HX0RFRklORV9UWVBFIChHc3RHaG9zdFBhZCwgZ3N0X2dob3N0X3BhZCwgR1NUX1RZUEVfUFJPWFlfUEFEKTsKLQotc3RhdGljIHZvaWQgZ3N0X2dob3N0X3BhZF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdFBhZCAqb3RoZXI7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIiVzYWN0aXZhdGUgcHVzaCBvbiAlczolcywgd2UncmUgb2siLAotICAgICAgKGFjdGl2ZSA/ICIiIDogImRlIiksIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgLyogaW4gYm90aCBjYXNlcyAoU1JDIGFuZCBTSU5LKSB3ZSBhY3RpdmF0ZSBqdXN0IHRoZSBpbnRlcm5hbCBwYWQuIFRoZSB0YXJnZXRzCi0gICAqIHdpbGwgYmUgYWN0aXZhdGVkIGxhdGVyIChvciBhbHJlYWR5IGluIGNhc2Ugb2YgYSBnaG9zdCBzaW5rcGFkKS4gKi8KLSAgR1NUX1BST1hZX1BBRF9BQ1FVSVJFX0lOVEVSTkFMIChwYWQsIG90aGVyLCBGQUxTRSk7Ci0gIHJldCA9IGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAob3RoZXIsIEdTVF9QQURfTU9ERV9QVVNILCBhY3RpdmUpOwotICBHU1RfUFJPWFlfUEFEX1JFTEVBU0VfSU5URVJOQUwgKG90aGVyKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfcHVsbF9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0UGFkICpvdGhlcjsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiJXNhY3RpdmF0ZSBwdWxsIG9uICVzOiVzIiwgKGFjdGl2ZSA/ICIiIDogImRlIiksCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGlmIChHU1RfUEFEX0RJUkVDVElPTiAocGFkKSA9PSBHU1RfUEFEX1NSQykgewotICAgIC8qIHdlIGFyZSBhY3RpdmF0ZWQgaW4gcHVsbCBtb2RlIGJ5IG91ciBwZWVyIGVsZW1lbnQsIHdoaWNoIGlzIGEgc2lua3BhZAotICAgICAqIHRoYXQgd2FudHMgdG8gb3BlcmF0ZSBpbiBwdWxsIG1vZGUuIFRoaXMgYWN0aXZhdGlvbiBoYXMgdG8gcHJvcGFnYXRlCi0gICAgICogdXBzdHJlYW0gdGhyb3VnaCB0aGUgcGlwZWxpbmUuIFdlIGNhbGwgdGhlIGludGVybmFsIGFjdGl2YXRpb24gZnVuY3Rpb24sCi0gICAgICogd2hpY2ggd2lsbCB0cmlnZ2VyIGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVsbF9kZWZhdWx0LCB3aGljaCBwcm9wYWdhdGVzIGV2ZW4KLSAgICAgKiBmdXJ0aGVyIHVwc3RyZWFtICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInBhZCBpcyBzcmMsIGFjdGl2YXRlIGludGVybmFsIik7Ci0gICAgR1NUX1BST1hZX1BBRF9BQ1FVSVJFX0lOVEVSTkFMIChwYWQsIG90aGVyLCBGQUxTRSk7Ci0gICAgcmV0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChvdGhlciwgR1NUX1BBRF9NT0RFX1BVTEwsIGFjdGl2ZSk7Ci0gICAgR1NUX1BST1hZX1BBRF9SRUxFQVNFX0lOVEVSTkFMIChvdGhlcik7Ci0gIH0gZWxzZSBpZiAoR19MSUtFTFkgKChvdGhlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCkpKSkgewotICAgIC8qIFdlIGFyZSBTSU5LLCB0aGUgZ2hvc3RwYWQgaXMgU1JDLCB3ZSBwcm9wYWdhdGUgdGhlIGFjdGl2YXRpb24gdXBzdHJlYW0KLSAgICAgKiBzaW5jZSB3ZSBob2xkIGEgcG9pbnRlciB0byB0aGUgdXBzdHJlYW0gcGVlci4gKi8KLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiYWN0aXZhdGluZyBwZWVyIik7Ci0gICAgcmV0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChvdGhlciwgR1NUX1BBRF9NT0RFX1BVTEwsIGFjdGl2ZSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAob3RoZXIpOwotICB9IGVsc2UgaWYgKGFjdGl2ZSkgewotICAgIC8qIHRoaXMgaXMgZmFpbHVyZSwgd2UgY2FuJ3QgYWN0aXZhdGUgcHVsbCBpZiB0aGVyZSBpcyBubyBwZWVyICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIm5vdCBzcmMgYW5kIG5vIHBlZXIsIGZhaWxpbmciKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiZGVhY3RpdmF0aW5nIHB1bGwsIHdpdGggbm8gcGVlciAtIGFsbG93aW5nIik7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHQ6Ci0gKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlLgotICogQHBhcmVudDogKGFsbG93LW5vbmUpOiB0aGUgcGFyZW50IG9mIEBwYWQgb3IgJU5VTEwKLSAqIEBtb2RlOiB0aGUgcmVxdWVzdGVkIGFjdGl2YXRpb24gbW9kZQotICogQGFjdGl2ZTogd2hldGhlciB0aGUgcGFkIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90LgotICoKLSAqIEludm9rZSB0aGUgZGVmYXVsdCBhY3RpdmF0ZSBtb2RlIGZ1bmN0aW9uIG9mIGEgcHJveHkgcGFkIHRoYXQgaXMKLSAqIG93bmVkIGJ5IGEgZ2hvc3QgcGFkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gKi8KLWdib29sZWFuCi1nc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX21vZGVfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BST1hZX1BBRCAocGFkKSwgRkFMU0UpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICByZXMgPSBnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX3B1bGxfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGFjdGl2ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVVNIOgotICAgICAgcmVzID0gZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9wdXNoX2RlZmF1bHQgKHBhZCwgcGFyZW50LCBhY3RpdmUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJ1bmtub3duIGFjdGl2YXRpb24gbW9kZSAlZCIsIG1vZGUpOwotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVzaF9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0UGFkICpvdGhlcjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0dIT1NUX1BBRCAocGFkKSwgRkFMU0UpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICIlc2FjdGl2YXRlIHB1c2ggb24gJXM6JXMsIHByb3h5IGludGVybmFsIiwKLSAgICAgIChhY3RpdmUgPyAiIiA6ICJkZSIpLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIC8qIGp1c3QgYWN0aXZhdGUgdGhlIGludGVybmFsIHBhZCAqLwotICBHU1RfUFJPWFlfUEFEX0FDUVVJUkVfSU5URVJOQUwgKHBhZCwgb3RoZXIsIEZBTFNFKTsKLSAgcmV0ID0gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChvdGhlciwgR1NUX1BBRF9NT0RFX1BVU0gsIGFjdGl2ZSk7Ci0gIEdTVF9QUk9YWV9QQURfUkVMRUFTRV9JTlRFUk5BTCAob3RoZXIpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9wdWxsX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RQYWQgKm90aGVyOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICIlc2FjdGl2YXRlIHB1bGwgb24gJXM6JXMiLCAoYWN0aXZlID8gIiIgOiAiZGUiKSwKLSAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgaWYgKEdTVF9QQURfRElSRUNUSU9OIChwYWQpID09IEdTVF9QQURfU1JDKSB7Ci0gICAgLyogdGhlIGdob3N0cGFkIGlzIFNSQyBhbmQgYWN0aXZhdGVkIGluIHB1bGwgbW9kZSBieSBpdHMgcGVlciwgY2FsbCB0aGUKLSAgICAgKiBhY3RpdmF0aW9uIGZ1bmN0aW9uIG9mIHRoZSBpbnRlcm5hbCBwYWQgdG8gcHJvcGFnYXRlIHRoZSBhY3RpdmF0aW9uCi0gICAgICogdXBzdHJlYW0gKi8KLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAicGFkIGlzIHNyYywgYWN0aXZhdGUgaW50ZXJuYWwiKTsKLSAgICBHU1RfUFJPWFlfUEFEX0FDUVVJUkVfSU5URVJOQUwgKHBhZCwgb3RoZXIsIEZBTFNFKTsKLSAgICByZXQgPSBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKG90aGVyLCBHU1RfUEFEX01PREVfUFVMTCwgYWN0aXZlKTsKLSAgICBHU1RfUFJPWFlfUEFEX1JFTEVBU0VfSU5URVJOQUwgKG90aGVyKTsKLSAgfSBlbHNlIGlmIChHX0xJS0VMWSAoKG90aGVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKSkpKSB7Ci0gICAgLyogV2UgYXJlIFNJTksgYW5kIGFjdGl2YXRlZCBieSB0aGUgaW50ZXJuYWwgcGFkLCBwcm9wYWdhdGUgYWN0aXZhdGlvbgotICAgICAqIHVwc3RyZWFtIGJlY2F1c2Ugd2UgaG9sZCBhIHJlZiB0byB0aGUgdXBzdHJlYW0gcGVlciAqLwotICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJhY3RpdmF0aW5nIHBlZXIiKTsKLSAgICByZXQgPSBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKG90aGVyLCBHU1RfUEFEX01PREVfUFVMTCwgYWN0aXZlKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvdGhlcik7Ci0gIH0gZWxzZSBpZiAoYWN0aXZlKSB7Ci0gICAgLyogdGhpcyBpcyBmYWlsdXJlLCB3ZSBjYW4ndCBhY3RpdmF0ZSBwdWxsIGlmIHRoZXJlIGlzIG5vIHBlZXIgKi8KLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAibm90IHNyYyBhbmQgbm8gcGVlciwgZmFpbGluZyIpOwotICAgIHJldCA9IEZBTFNFOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJkZWFjdGl2YXRpbmcgcHVsbCwgd2l0aCBubyBwZWVyIC0gYWxsb3dpbmciKTsKLSAgICByZXQgPSBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX21vZGVfZGVmYXVsdDoKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUuCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZCBvciAlTlVMTAotICogQG1vZGU6IHRoZSByZXF1ZXN0ZWQgYWN0aXZhdGlvbiBtb2RlCi0gKiBAYWN0aXZlOiB3aGV0aGVyIHRoZSBwYWQgc2hvdWxkIGJlIGFjdGl2ZSBvciBub3QuCi0gKgotICogSW52b2tlIHRoZSBkZWZhdWx0IGFjdGl2YXRlIG1vZGUgZnVuY3Rpb24gb2YgYSBnaG9zdCBwYWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9naG9zdF9wYWRfYWN0aXZhdGVfbW9kZV9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfR0hPU1RfUEFEIChwYWQpLCBGQUxTRSk7Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVMTDoKLSAgICAgIHJlcyA9IGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVsbF9kZWZhdWx0IChwYWQsIHBhcmVudCwgYWN0aXZlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICByZXMgPSBnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX3B1c2hfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGFjdGl2ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInVua25vd24gYWN0aXZhdGlvbiBtb2RlICVkIiwgbW9kZSk7Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZ2hvc3RfcGFkX2NsYXNzX2luaXQgKEdzdEdob3N0UGFkQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdEdob3N0UGFkUHJpdmF0ZSkpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfZ2hvc3RfcGFkX2Rpc3Bvc2U7Ci0KLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVsbF9kZWZhdWx0KTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9naG9zdF9wYWRfYWN0aXZhdGVfcHVzaF9kZWZhdWx0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9naG9zdF9wYWRfaW5pdCAoR3N0R2hvc3RQYWQgKiBwYWQpCi17Ci0gIEdTVF9HSE9TVF9QQURfUFJJVkFURSAocGFkKSA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAocGFkLAotICAgICAgR1NUX1RZUEVfR0hPU1RfUEFELCBHc3RHaG9zdFBhZFByaXZhdGUpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAoR1NUX1BBRF9DQVNUIChwYWQpLAotICAgICAgZ3N0X2dob3N0X3BhZF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2dob3N0X3BhZF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RQYWQgKnBhZDsKLSAgR3N0UGFkICppbnRlcm5hbDsKLSAgR3N0UGFkICpwZWVyOwotCi0gIHBhZCA9IEdTVF9QQUQgKG9iamVjdCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGlzcG9zZSIpOwotCi0gIGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAocGFkKSwgTlVMTCk7Ci0KLSAgLyogVW5saW5rIGhlcmUgc28gdGhhdCBnc3RfcGFkX2Rpc3Bvc2UgZG9lc24ndC4gVGhhdCB3b3VsZCBsZWFkIHRvIGEgY2FsbCB0bwotICAgKiBnc3RfZ2hvc3RfcGFkX3VubGlua19kZWZhdWx0IHdoZW4gdGhlIGdob3N0IHBhZCBpcyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgKi8KLSAgcGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCk7Ci0gIGlmIChwZWVyKSB7Ci0gICAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpKQotICAgICAgZ3N0X3BhZF91bmxpbmsgKHBhZCwgcGVlcik7Ci0gICAgZWxzZQotICAgICAgZ3N0X3BhZF91bmxpbmsgKHBlZXIsIHBhZCk7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgaW50ZXJuYWwgPSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChwYWQpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAoaW50ZXJuYWwsIE5VTEwpOwotCi0gIC8qIGRpc3Bvc2VzIG9mIHRoZSBpbnRlcm5hbCBwYWQsIHNpbmNlIHRoZSBnaG9zdHBhZCBpcyB0aGUgb25seSBwb3NzaWJsZSBvYmplY3QKLSAgICogdGhhdCBoYXMgYSByZWZjb3VudCBvbiB0aGUgaW50ZXJuYWwgcGFkLiAqLwotICBnc3Rfb2JqZWN0X3VucGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKGludGVybmFsKSk7Ci0gIEdTVF9QUk9YWV9QQURfSU5URVJOQUwgKHBhZCkgPSBOVUxMOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfZ2hvc3RfcGFkX3BhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLS8qKgotICogZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3Q6Ci0gKiBAZ3BhZDogdGhlIG5ld2x5IGFsbG9jYXRlZCBnaG9zdCBwYWQKLSAqCi0gKiBGaW5pc2ggaW5pdGlhbGl6YXRpb24gb2YgYSBuZXdseSBhbGxvY2F0ZWQgZ2hvc3QgcGFkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgbW9zdCB1c2VmdWwgaW4gbGFuZ3VhZ2UgYmluZGluZ3MgYW5kIHdoZW4gc3ViY2xhc3NpbmcKLSAqICNHc3RHaG9zdFBhZDsgcGx1Z2luIGFuZCBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIG5vcm1hbGx5IHdpbGwgbm90IGNhbGwgdGhpcwotICogZnVuY3Rpb24uIENhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBhZnRlciBhIGNhbGwgdG8gZ19vYmplY3RfbmV3Ci0gKiAoR1NUX1RZUEVfR0hPU1RfUEFELCAiZGlyZWN0aW9uIiwgQGRpciwgLi4uLCBOVUxMKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY29uc3RydWN0aW9uIHN1Y2NlZWRzLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QgKEdzdEdob3N0UGFkICogZ3BhZCkKLXsKLSAgR3N0UGFkRGlyZWN0aW9uIGRpciwgb3RoZXJkaXI7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLSAgR3N0UGFkICpwYWQsICppbnRlcm5hbDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0dIT1NUX1BBRCAoZ3BhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCFHU1RfR0hPU1RfUEFEX1BSSVZBVEUgKGdwYWQpLT5jb25zdHJ1Y3RlZCwgRkFMU0UpOwotCi0gIGdfb2JqZWN0X2dldCAoZ3BhZCwgImRpcmVjdGlvbiIsICZkaXIsICJ0ZW1wbGF0ZSIsICZ0ZW1wbCwgTlVMTCk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRpciAhPSBHU1RfUEFEX1VOS05PV04sIEZBTFNFKTsKLQotICBwYWQgPSBHU1RfUEFEIChncGFkKTsKLQotICAvKiBTZXQgZGlyZWN0aW9uYWwgcGFkZnVuY3Rpb25zIGZvciBnaG9zdHBhZCAqLwotICBpZiAoZGlyID09IEdTVF9QQURfU0lOSykgewotICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChwYWQsIGdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCk7Ci0gICAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAocGFkLCBnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24gKHBhZCwgZ3N0X3Byb3h5X3BhZF9nZXRyYW5nZV9kZWZhdWx0KTsKLSAgfQotCi0gIC8qIElOVEVSTkFMIFBBRCwgaXQgYWx3YXlzIGV4aXN0cyBhbmQgaXMgY2hpbGQgb2YgdGhlIGdob3N0cGFkICovCi0gIG90aGVyZGlyID0gKGRpciA9PSBHU1RfUEFEX1NSQykgPyBHU1RfUEFEX1NJTksgOiBHU1RfUEFEX1NSQzsKLSAgaWYgKHRlbXBsKSB7Ci0gICAgaW50ZXJuYWwgPQotICAgICAgICBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1BST1hZX1BBRCwgIm5hbWUiLCBOVUxMLAotICAgICAgICAiZGlyZWN0aW9uIiwgb3RoZXJkaXIsICJ0ZW1wbGF0ZSIsIHRlbXBsLCBOVUxMKTsKLSAgICAvKiByZWxlYXNlIHJlZiBvYnRhaW5lZCB2aWEgZ19vYmplY3RfZ2V0ICovCi0gICAgZ3N0X29iamVjdF91bnJlZiAodGVtcGwpOwotICB9IGVsc2UgewotICAgIGludGVybmFsID0KLSAgICAgICAgZ19vYmplY3RfbmV3IChHU1RfVFlQRV9QUk9YWV9QQUQsICJuYW1lIiwgTlVMTCwKLSAgICAgICAgImRpcmVjdGlvbiIsIG90aGVyZGlyLCBOVUxMKTsKLSAgfQotICBHU1RfUEFEX1VOU0VUX0ZMVVNISU5HIChpbnRlcm5hbCk7Ci0KLSAgLyogU2V0IGRpcmVjdGlvbmFsIHBhZGZ1bmN0aW9ucyBmb3IgaW50ZXJuYWwgcGFkICovCi0gIGlmIChkaXIgPT0gR1NUX1BBRF9TUkMpIHsKLSAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoaW50ZXJuYWwsIGdzdF9wcm94eV9wYWRfY2hhaW5fZGVmYXVsdCk7Ci0gICAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAoaW50ZXJuYWwsCi0gICAgICAgIGdzdF9wcm94eV9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0KTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoaW50ZXJuYWwsIGdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdCk7Ci0gIH0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0KLSAgLyogbm93IG1ha2UgdGhlIGdob3N0cGFkIGEgcGFyZW50IG9mIHRoZSBpbnRlcm5hbCBwYWQgKi8KLSAgaWYgKCFnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoaW50ZXJuYWwpLAotICAgICAgICAgIEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSkpCi0gICAgZ290byBwYXJlbnRfZmFpbGVkOwotCi0gIC8qIFRoZSBnaG9zdHBhZCBpcyB0aGUgcGFyZW50IG9mIHRoZSBpbnRlcm5hbCBwYWQgYW5kIGlzIHRoZSBvbmx5IG9iamVjdCB0aGF0Ci0gICAqIGNhbiBoYXZlIGEgcmVmY291bnQgb24gdGhlIGludGVybmFsIHBhZC4KLSAgICogQXQgdGhpcyBwb2ludCwgdGhlIEdzdEdob3N0UGFkIGhhcyBhIHJlZmNvdW50IG9mIDEsIGFuZCB0aGUgaW50ZXJuYWwgcGFkIGhhcwotICAgKiBhIHJlZmNvdW50IG9mIDEuCi0gICAqIFdoZW4gdGhlIHJlZmNvdW50IG9mIHRoZSBHc3RHaG9zdFBhZCBkcm9wcyB0byAwLCB0aGUgZ2hvc3RwYWQgd2lsbCBkaXNwb3NlCi0gICAqIGl0cyByZWZjb3VudCBvbiB0aGUgaW50ZXJuYWwgcGFkIGluIHRoZSBkaXNwb3NlIG1ldGhvZCBieSB1bi1wYXJlbnRpbmcgaXQuCi0gICAqIFRoaXMgaXMgd2h5IHdlIGRvbid0IHRha2UgZXh0cmEgcmVmY291bnRzIGluIHRoZSBhc3NpZ25tZW50cyBiZWxvdwotICAgKi8KLSAgR1NUX1BST1hZX1BBRF9JTlRFUk5BTCAocGFkKSA9IGludGVybmFsOwotICBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChpbnRlcm5hbCkgPSBwYWQ7Ci0KLSAgLyogc3BlY2lhbCBhY3RpdmF0aW9uIGZ1bmN0aW9ucyBmb3IgdGhlIGludGVybmFsIHBhZCAqLwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKGludGVybmFsLAotICAgICAgZ3N0X2dob3N0X3BhZF9pbnRlcm5hbF9hY3RpdmF0ZV9tb2RlX2RlZmF1bHQpOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIEdTVF9HSE9TVF9QQURfUFJJVkFURSAoZ3BhZCktPmNvbnN0cnVjdGVkID0gVFJVRTsKLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1wYXJlbnRfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChncGFkLCAiQ291bGQgbm90IHNldCBpbnRlcm5hbCBwYWQgJXM6JXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGludGVybmFsKSk7Ci0gICAgZ19jcml0aWNhbCAoIkNvdWxkIG5vdCBzZXQgaW50ZXJuYWwgcGFkICVzOiVzIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChpbnRlcm5hbCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGludGVybmFsKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3RfZ2hvc3RfcGFkX25ld19mdWxsIChjb25zdCBnY2hhciAqIG5hbWUsIEdzdFBhZERpcmVjdGlvbiBkaXIsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKLXsKLSAgR3N0R2hvc3RQYWQgKnJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGlyICE9IEdTVF9QQURfVU5LTk9XTiwgTlVMTCk7Ci0KLSAgLyogT0JKRUNUIENSRUFUSU9OICovCi0gIGlmICh0ZW1wbCkgewotICAgIHJldCA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfR0hPU1RfUEFELCAibmFtZSIsIG5hbWUsCi0gICAgICAgICJkaXJlY3Rpb24iLCBkaXIsICJ0ZW1wbGF0ZSIsIHRlbXBsLCBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0dIT1NUX1BBRCwgIm5hbWUiLCBuYW1lLAotICAgICAgICAiZGlyZWN0aW9uIiwgZGlyLCBOVUxMKTsKLSAgfQotCi0gIGlmICghZ3N0X2dob3N0X3BhZF9jb25zdHJ1Y3QgKHJldCkpCi0gICAgZ290byBjb25zdHJ1Y3RfZmFpbGVkOwotCi0gIHJldHVybiBHU1RfUEFEX0NBU1QgKHJldCk7Ci0KLWNvbnN0cnVjdF9mYWlsZWQ6Ci0gIC8qIGFscmVhZHkgbG9nZ2VkICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHJldCk7Ci0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldDoKLSAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLCBvciAlTlVMTCB0byBhc3NpZ24gYSBkZWZhdWx0IG5hbWUuCi0gKiBAZGlyOiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBnaG9zdHBhZAotICoKLSAqIENyZWF0ZSBhIG5ldyBnaG9zdHBhZCB3aXRob3V0IGEgdGFyZ2V0IHdpdGggdGhlIGdpdmVuIGRpcmVjdGlvbi4KLSAqIEEgdGFyZ2V0IGNhbiBiZSBzZXQgb24gdGhlIGdob3N0cGFkIGxhdGVyIHdpdGggdGhlCi0gKiBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQoKSBmdW5jdGlvbi4KLSAqCi0gKiBUaGUgY3JlYXRlZCBnaG9zdHBhZCB3aWxsIG5vdCBoYXZlIGEgcGFkdGVtcGxhdGUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgbmV3ICNHc3RQYWQsIG9yICVOVUxMIGluCi0gKiBjYXNlIG9mIGFuIGVycm9yLgotICovCi1Hc3RQYWQgKgotZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0IChjb25zdCBnY2hhciAqIG5hbWUsIEdzdFBhZERpcmVjdGlvbiBkaXIpCi17Ci0gIEdzdFBhZCAqcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkaXIgIT0gR1NUX1BBRF9VTktOT1dOLCBOVUxMKTsKLQotICBHU1RfTE9HICgibmFtZTolcywgZGlyZWN0aW9uOiVkIiwgR1NUX1NUUl9OVUxMIChuYW1lKSwgZGlyKTsKLQotICByZXQgPSBnc3RfZ2hvc3RfcGFkX25ld19mdWxsIChuYW1lLCBkaXIsIE5VTEwpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2dob3N0X3BhZF9uZXc6Ci0gKiBAbmFtZTogKGFsbG93LW5vbmUpOiB0aGUgbmFtZSBvZiB0aGUgbmV3IHBhZCwgb3IgJU5VTEwgdG8gYXNzaWduIGEgZGVmYXVsdCBuYW1lCi0gKiBAdGFyZ2V0OiAodHJhbnNmZXIgbm9uZSk6IHRoZSBwYWQgdG8gZ2hvc3QuCi0gKgotICogQ3JlYXRlIGEgbmV3IGdob3N0cGFkIHdpdGggQHRhcmdldCBhcyB0aGUgdGFyZ2V0LiBUaGUgZGlyZWN0aW9uIHdpbGwgYmUgdGFrZW4KLSAqIGZyb20gdGhlIHRhcmdldCBwYWQuIEB0YXJnZXQgbXVzdCBiZSB1bmxpbmtlZC4KLSAqCi0gKiBXaWxsIHJlZiB0aGUgdGFyZ2V0LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmbG9hdGluZykgKG51bGxhYmxlKTogYSBuZXcgI0dzdFBhZCwgb3IgJU5VTEwgaW4KLSAqIGNhc2Ugb2YgYW4gZXJyb3IuCi0gKi8KLUdzdFBhZCAqCi1nc3RfZ2hvc3RfcGFkX25ldyAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RQYWQgKiB0YXJnZXQpCi17Ci0gIEdzdFBhZCAqcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEICh0YXJnZXQpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCFnc3RfcGFkX2lzX2xpbmtlZCAodGFyZ2V0KSwgTlVMTCk7Ci0KLSAgR1NUX0xPRyAoIm5hbWU6JXMsIHRhcmdldDolczolcyIsIEdTVF9TVFJfTlVMTCAobmFtZSksCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHRhcmdldCkpOwotCi0gIGlmICgocmV0ID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0IChuYW1lLCBHU1RfUEFEX0RJUkVDVElPTiAodGFyZ2V0KSkpKQotICAgIGlmICghZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEX0NBU1QgKHJldCksIHRhcmdldCkpCi0gICAgICBnb3RvIHNldF90YXJnZXRfZmFpbGVkOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1zZXRfdGFyZ2V0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocmV0LCAiZmFpbGVkIHRvIHNldCB0YXJnZXQgJXM6JXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHRhcmdldCkpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJldCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlOgotICogQG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlIG5ldyBwYWQsIG9yICVOVUxMIHRvIGFzc2lnbiBhIGRlZmF1bHQgbmFtZS4KLSAqIEB0YXJnZXQ6ICh0cmFuc2ZlciBub25lKTogdGhlIHBhZCB0byBnaG9zdC4KLSAqIEB0ZW1wbDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdFBhZFRlbXBsYXRlIHRvIHVzZSBvbiB0aGUgZ2hvc3RwYWQuCi0gKgotICogQ3JlYXRlIGEgbmV3IGdob3N0cGFkIHdpdGggQHRhcmdldCBhcyB0aGUgdGFyZ2V0LiBUaGUgZGlyZWN0aW9uIHdpbGwgYmUgdGFrZW4KLSAqIGZyb20gdGhlIHRhcmdldCBwYWQuIFRoZSB0ZW1wbGF0ZSB1c2VkIG9uIHRoZSBnaG9zdHBhZCB3aWxsIGJlIEB0ZW1wbGF0ZS4KLSAqCi0gKiBXaWxsIHJlZiB0aGUgdGFyZ2V0LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhIG5ldyAjR3N0UGFkLCBvciAlTlVMTCBpbgotICogY2FzZSBvZiBhbiBlcnJvci4KLSAqLwotCi1Hc3RQYWQgKgotZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RQYWQgKiB0YXJnZXQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKLXsKLSAgR3N0UGFkICpyZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHRhcmdldCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoIWdzdF9wYWRfaXNfbGlua2VkICh0YXJnZXQpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT04gKHRlbXBsKSA9PQotICAgICAgR1NUX1BBRF9ESVJFQ1RJT04gKHRhcmdldCksIE5VTEwpOwotCi0gIEdTVF9MT0cgKCJuYW1lOiVzLCB0YXJnZXQ6JXM6JXMsIHRlbXBsOiVwIiwgR1NUX1NUUl9OVUxMIChuYW1lKSwKLSAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAodGFyZ2V0KSwgdGVtcGwpOwotCi0gIGlmICgocmV0ID0gZ3N0X2dob3N0X3BhZF9uZXdfZnVsbCAobmFtZSwgR1NUX1BBRF9ESVJFQ1RJT04gKHRhcmdldCksIHRlbXBsKSkpCi0gICAgaWYgKCFnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKEdTVF9HSE9TVF9QQURfQ0FTVCAocmV0KSwgdGFyZ2V0KSkKLSAgICAgIGdvdG8gc2V0X3RhcmdldF9mYWlsZWQ7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXNldF90YXJnZXRfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChyZXQsICJmYWlsZWQgdG8gc2V0IHRhcmdldCAlczolcyIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAodGFyZ2V0KSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocmV0KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlOgotICogQG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlIG5ldyBwYWQsIG9yICVOVUxMIHRvIGFzc2lnbiBhIGRlZmF1bHQgbmFtZQotICogQHRlbXBsOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0UGFkVGVtcGxhdGUgdG8gY3JlYXRlIHRoZSBnaG9zdHBhZCBmcm9tLgotICoKLSAqIENyZWF0ZSBhIG5ldyBnaG9zdHBhZCBiYXNlZCBvbiBAdGVtcGwsIHdpdGhvdXQgc2V0dGluZyBhIHRhcmdldC4gVGhlCi0gKiBkaXJlY3Rpb24gd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBAdGVtcGwuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgbmV3ICNHc3RQYWQsIG9yICVOVUxMIGluCi0gKiBjYXNlIG9mIGFuIGVycm9yLgotICovCi1Hc3RQYWQgKgotZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUgKGNvbnN0IGdjaGFyICogbmFtZSwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsKQotewotICBHc3RQYWQgKnJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGVtcGwgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0ID0KLSAgICAgIGdzdF9naG9zdF9wYWRfbmV3X2Z1bGwgKG5hbWUsIEdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OICh0ZW1wbCksIHRlbXBsKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldDoKLSAqIEBncGFkOiB0aGUgI0dzdEdob3N0UGFkCi0gKgotICogR2V0IHRoZSB0YXJnZXQgcGFkIG9mIEBncGFkLiBVbnJlZiB0YXJnZXQgcGFkIGFmdGVyIHVzYWdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgdGFyZ2V0ICNHc3RQYWQsIGNhbiBiZQotICogJU5VTEwgaWYgdGhlIGdob3N0cGFkIGhhcyBubyB0YXJnZXQgc2V0LiBVbnJlZiB0YXJnZXQgcGFkIGFmdGVyCi0gKiB1c2FnZS4KLSAqLwotR3N0UGFkICoKLWdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR3N0R2hvc3RQYWQgKiBncGFkKQotewotICBHc3RQYWQgKnJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0dIT1NUX1BBRCAoZ3BhZCksIE5VTEwpOwotCi0gIHJldCA9IGdzdF9wcm94eV9wYWRfZ2V0X3RhcmdldCAoR1NUX1BBRF9DQVNUIChncGFkKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZ3BhZCwgImdldCB0YXJnZXQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHJldCkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0OgotICogQGdwYWQ6IHRoZSAjR3N0R2hvc3RQYWQKLSAqIEBuZXd0YXJnZXQ6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSBuZXcgcGFkIHRhcmdldAotICoKLSAqIFNldCB0aGUgbmV3IHRhcmdldCBvZiB0aGUgZ2hvc3RwYWQgQGdwYWQuIEFueSBleGlzdGluZyB0YXJnZXQKLSAqIGlzIHVubGlua2VkIGFuZCBsaW5rcyB0byB0aGUgbmV3IHRhcmdldCBhcmUgZXN0YWJsaXNoZWQuIGlmIEBuZXd0YXJnZXQgaXMKLSAqICVOVUxMIHRoZSB0YXJnZXQgd2lsbCBiZSBjbGVhcmVkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBuZXcgdGFyZ2V0IGNvdWxkIGJlIHNldC4gVGhpcyBmdW5jdGlvbgotICogICAgIGNhbiByZXR1cm4gJUZBTFNFIHdoZW4gdGhlIGludGVybmFsIHBhZHMgY291bGQgbm90IGJlIGxpbmtlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoR3N0R2hvc3RQYWQgKiBncGFkLCBHc3RQYWQgKiBuZXd0YXJnZXQpCi17Ci0gIEdzdFBhZCAqaW50ZXJuYWw7Ci0gIEdzdFBhZCAqb2xkdGFyZ2V0OwotICBHc3RQYWRMaW5rUmV0dXJuIGxyZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19HSE9TVF9QQUQgKGdwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0NBU1QgKGdwYWQpICE9IG5ld3RhcmdldCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmV3dGFyZ2V0ICE9IEdTVF9QUk9YWV9QQURfSU5URVJOQUwgKGdwYWQpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChncGFkKTsKLSAgaW50ZXJuYWwgPSBHU1RfUFJPWFlfUEFEX0lOVEVSTkFMIChncGFkKTsKLQotICBpZiAobmV3dGFyZ2V0KQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGdwYWQsICJzZXQgdGFyZ2V0ICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChuZXd0YXJnZXQpKTsKLSAgZWxzZQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGdwYWQsICJjbGVhcmluZyB0YXJnZXQiKTsKLQotICAvKiBjbGVhciBvbGQgdGFyZ2V0ICovCi0gIGlmICgob2xkdGFyZ2V0ID0gZ3N0X3BhZF9nZXRfcGVlciAoaW50ZXJuYWwpKSkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChncGFkKTsKLQotICAgIC8qIHVubGluayBpbnRlcm5hbCBwYWQgKi8KLSAgICBpZiAoR1NUX1BBRF9JU19TUkMgKGludGVybmFsKSkKLSAgICAgIGdzdF9wYWRfdW5saW5rIChpbnRlcm5hbCwgb2xkdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICBnc3RfcGFkX3VubGluayAob2xkdGFyZ2V0LCBpbnRlcm5hbCk7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGR0YXJnZXQpOwotICB9IGVsc2UgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChncGFkKTsKLSAgfQotCi0gIGlmIChuZXd0YXJnZXQpIHsKLSAgICAvKiBhbmQgbGluayB0byBpbnRlcm5hbCBwYWQgd2l0aG91dCBhbnkgY2hlY2tzICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZ3BhZCwgImNvbm5lY3RpbmcgaW50ZXJuYWwgcGFkIHRvIHRhcmdldCAlIgotICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgbmV3dGFyZ2V0KTsKLQotICAgIGlmIChHU1RfUEFEX0lTX1NSQyAoaW50ZXJuYWwpKQotICAgICAgbHJldCA9Ci0gICAgICAgICAgZ3N0X3BhZF9saW5rX2Z1bGwgKGludGVybmFsLCBuZXd0YXJnZXQsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgICBlbHNlCi0gICAgICBscmV0ID0KLSAgICAgICAgICBnc3RfcGFkX2xpbmtfZnVsbCAobmV3dGFyZ2V0LCBpbnRlcm5hbCwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotCi0gICAgaWYgKGxyZXQgIT0gR1NUX1BBRF9MSU5LX09LKQotICAgICAgZ290byBsaW5rX2ZhaWxlZDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbGlua19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGdwYWQsICJjb3VsZCBub3QgbGluayBpbnRlcm5hbCBhbmQgdGFyZ2V0LCByZWFzb246JXMiLAotICAgICAgICBnc3RfcGFkX2xpbmtfZ2V0X25hbWUgKGxyZXQpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RnaG9zdHBhZC5oIGIvZ3N0L2dzdGdob3N0cGFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNTllYzAuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGdob3N0cGFkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqCi0gKiBnc3RnaG9zdHBhZC5oOiBQcm94eSBwYWRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0dIT1NUX1BBRF9IX18KLSNkZWZpbmUgX19HU1RfR0hPU1RfUEFEX0hfXwotCi0KLSNpbmNsdWRlIDxnc3QvZ3N0cGFkLmg+Ci0KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1BST1hZX1BBRCAgICAgICAgICAgICAgKGdzdF9wcm94eV9wYWRfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19QUk9YWV9QQUQob2JqKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfUFJPWFlfUEFEKSkKLSNkZWZpbmUgR1NUX0lTX1BST1hZX1BBRF9DTEFTUyhrbGFzcykgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1BST1hZX1BBRCkpCi0jZGVmaW5lIEdTVF9QUk9YWV9QQUQob2JqKSAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfUFJPWFlfUEFELCBHc3RQcm94eVBhZCkpCi0jZGVmaW5lIEdTVF9QUk9YWV9QQURfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9QUk9YWV9QQUQsIEdzdFByb3h5UGFkQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UHJveHlQYWQgR3N0UHJveHlQYWQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UHJveHlQYWRQcml2YXRlIEdzdFByb3h5UGFkUHJpdmF0ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQcm94eVBhZENsYXNzIEdzdFByb3h5UGFkQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0UHJveHlQYWQKLXsKLSAgR3N0UGFkIHBhZDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0UHJveHlQYWRQcml2YXRlICpwcml2OwotfTsKLQotc3RydWN0IF9Hc3RQcm94eVBhZENsYXNzCi17Ci0gIEdzdFBhZENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFsxXTsKLX07Ci0KLUdUeXBlIGdzdF9wcm94eV9wYWRfZ2V0X3R5cGUgKHZvaWQpOwotCi1Hc3RQcm94eVBhZCogICAgIGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsICAgICAoR3N0UHJveHlQYWQgKnBhZCk7Ci0KLQotR3N0SXRlcmF0b3IqICAgICAgICBnc3RfcHJveHlfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZGVmYXVsdCAoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50KSBHX0dOVUNfTUFMTE9DOwotR3N0Rmxvd1JldHVybiAgICAgICBnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQgICAgICAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpidWZmZXIpOwotR3N0Rmxvd1JldHVybiAgICAgICBnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyTGlzdCAqbGlzdCk7Ci1Hc3RGbG93UmV0dXJuICAgICAgIGdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdCAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0T2JqZWN0ICpwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqKmJ1ZmZlcik7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfR0hPU1RfUEFEICAgICAgICAgICAgICAoZ3N0X2dob3N0X3BhZF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0lTX0dIT1NUX1BBRChvYmopICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9HSE9TVF9QQUQpKQotI2RlZmluZSBHU1RfSVNfR0hPU1RfUEFEX0NMQVNTKGtsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfR0hPU1RfUEFEKSkKLSNkZWZpbmUgR1NUX0dIT1NUX1BBRChvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9HSE9TVF9QQUQsIEdzdEdob3N0UGFkKSkKLSNkZWZpbmUgR1NUX0dIT1NUX1BBRF9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0dIT1NUX1BBRCwgR3N0R2hvc3RQYWRDbGFzcykpCi0jZGVmaW5lIEdTVF9HSE9TVF9QQURfQ0FTVChvYmopICAgICAgICAgKChHc3RHaG9zdFBhZCopKG9iaikpCi0KLS8qKgotICogR3N0R2hvc3RQYWQ6Ci0gKgotICogT3BhcXVlICNHc3RHaG9zdFBhZCBzdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RHaG9zdFBhZCBHc3RHaG9zdFBhZDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RHaG9zdFBhZFByaXZhdGUgR3N0R2hvc3RQYWRQcml2YXRlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdob3N0UGFkQ2xhc3MgR3N0R2hvc3RQYWRDbGFzczsKLQotc3RydWN0IF9Hc3RHaG9zdFBhZAotewotICBHc3RQcm94eVBhZCBwYWQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdEdob3N0UGFkUHJpdmF0ZSAqcHJpdjsKLX07Ci0KLXN0cnVjdCBfR3N0R2hvc3RQYWRDbGFzcwotewotICBHc3RQcm94eVBhZENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0KLUdUeXBlICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF9nZXRfdHlwZSAgICAgICAgICAodm9pZCk7Ci0KLUdzdFBhZCogICAgICAgICAgZ3N0X2dob3N0X3BhZF9uZXcgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKm5hbWUsIEdzdFBhZCAqdGFyZ2V0KSBHX0dOVUNfTUFMTE9DOwotR3N0UGFkKiAgICAgICAgICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgICAgIChjb25zdCBnY2hhciAqbmFtZSwgR3N0UGFkRGlyZWN0aW9uIGRpcikgR19HTlVDX01BTExPQzsKLQotR3N0UGFkKiAgICAgICAgICBnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChjb25zdCBnY2hhciAqbmFtZSwgR3N0UGFkICogdGFyZ2V0LCBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsKSBHX0dOVUNfTUFMTE9DOwotR3N0UGFkKiAgICAgICAgICBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSAoY29uc3QgZ2NoYXIgKm5hbWUsIEdzdFBhZFRlbXBsYXRlICogdGVtcGwpIEdfR05VQ19NQUxMT0M7Ci0KLUdzdFBhZCogICAgICAgICAgZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0ICAgICAgICAoR3N0R2hvc3RQYWQgKmdwYWQpOwotZ2Jvb2xlYW4gICAgICAgICBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgICAgICAgIChHc3RHaG9zdFBhZCAqZ3BhZCwgR3N0UGFkICpuZXd0YXJnZXQpOwotCi1nYm9vbGVhbiAgICAgICAgIGdzdF9naG9zdF9wYWRfY29uc3RydWN0ICAgICAgICAgKEdzdEdob3N0UGFkICpncGFkKTsKLQotZ2Jvb2xlYW4gICAgICAgICBnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX21vZGVfZGVmYXVsdCAgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKTsKLQotZ2Jvb2xlYW4gICAgICAgICBnc3RfZ2hvc3RfcGFkX2ludGVybmFsX2FjdGl2YXRlX21vZGVfZGVmYXVsdCAgIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdEdob3N0UGFkLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0UHJveHlQYWQsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0dIT1NUX1BBRF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RpbmZvLmMgYi9nc3QvZ3N0aW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWI1ZTRjLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDE1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBnc3RpbmZvLmM6IGRlYnVnZ2luZyBmdW5jdGlvbnMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0aW5mbwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgZmFjaWxpdGllcwotICogQHNlZV9hbHNvOiAjZ3N0LXJ1bm5pbmcgZm9yIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCi0gKiBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYWZmZWN0IHRoZSBkZWJ1Z2dpbmcgb3V0cHV0LgotICoKLSAqIEdTdHJlYW1lcidzIGRlYnVnZ2luZyBzdWJzeXN0ZW0gaXMgYW4gZWFzeSB3YXkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHdoYXQKLSAqIHRoZSBhcHBsaWNhdGlvbiBpcyBkb2luZy4gIEl0IGlzIG5vdCBtZWFudCBmb3IgcHJvZ3JhbW1pbmcgZXJyb3JzLiBVc2UgR0xpYgotICogbWV0aG9kcyAoZ193YXJuaW5nIGFuZCBmcmllbmRzKSBmb3IgdGhhdC4KLSAqCi0gKiBUaGUgZGVidWdnaW5nIHN1YnN5c3RlbSB3b3JrcyBvbmx5IGFmdGVyIEdTdHJlYW1lciBoYXMgYmVlbiBpbml0aWFsaXplZAotICogLSBmb3IgZXhhbXBsZSBieSBjYWxsaW5nIGdzdF9pbml0KCkuCi0gKgotICogVGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW0gaXMgdXNlZCB0byBsb2cgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB3aGlsZSB0aGUKLSAqIGFwcGxpY2F0aW9uIHJ1bnMuICBFYWNoIG1lc3NhZ2VzIGhhcyBzb21lIHByb3BlcnRpZXMgYXR0YWNoZWQgdG8gaXQuIEFtb25nCi0gKiB0aGVzZSBwcm9wZXJ0aWVzIGFyZSB0aGUgZGVidWdnaW5nIGNhdGVnb3J5LCB0aGUgc2V2ZXJpdHkgKGNhbGxlZCAibGV2ZWwiCi0gKiBoZXJlKSBhbmQgYW4gb3B0aW9uYWwgI0dPYmplY3QgaXQgYmVsb25ncyB0by4gRWFjaCBvZiB0aGVzZSBtZXNzYWdlcyBpcyBzZW50Ci0gKiB0byBhbGwgcmVnaXN0ZXJlZCBkZWJ1Z2dpbmcgaGFuZGxlcnMsIHdoaWNoIHRoZW4gaGFuZGxlIHRoZSBtZXNzYWdlcy4KLSAqIEdTdHJlYW1lciBhdHRhY2hlcyBhIGRlZmF1bHQgaGFuZGxlciBvbiBzdGFydHVwLCB3aGljaCBvdXRwdXRzIHJlcXVlc3RlZAotICogbWVzc2FnZXMgdG8gc3RkZXJyLgotICoKLSAqIE1lc3NhZ2VzIGFyZSBvdXRwdXQgYnkgdXNpbmcgc2hvcnRjdXQgbWFjcm9zIGxpa2UgI0dTVF9ERUJVRywKLSAqICNHU1RfQ0FUX0VSUk9SX09CSkVDVCBvciBzaW1pbGFyLiBUaGVzZSBhbGwgZXhwYW5kIHRvIGNhbGxpbmcgZ3N0X2RlYnVnX2xvZygpCi0gKiB3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXJzLgotICogVGhlIG9ubHkgdGhpbmcgYSBkZXZlbG9wZXIgd2lsbCBwcm9iYWJseSB3YW50IHRvIGRvIGlzIGRlZmluZSBoaXMgb3duCi0gKiBjYXRlZ29yaWVzLiBUaGlzIGlzIGVhc2lseSBkb25lIHdpdGggMyBsaW5lcy4gQXQgdGhlIHRvcCBvZiB5b3VyIGNvZGUsCi0gKiBkZWNsYXJlCi0gKiB0aGUgdmFyaWFibGVzIGFuZCBzZXQgdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCi0gKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgotICogICBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChteV9jYXRlZ29yeSk7ICAvLyBkZWZpbmUgY2F0ZWdvcnkgKHN0YXRpY2FsbHkpCi0gKiAgICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIG15X2NhdGVnb3J5ICAgICAgIC8vIHNldCBhcyBkZWZhdWx0Ci0gKiBdfAotICogQWZ0ZXIgdGhhdCB5b3Ugb25seSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGNhdGVnb3J5LgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG15X2NhdGVnb3J5LCAibXkgY2F0ZWdvcnkiLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgIlRoaXMgaXMgbXkgdmVyeSBvd24iKTsKLSAqIF18Ci0gKiBJbml0aWFsaXphdGlvbiBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBjYXRlZ29yeSBpcyB1c2VkIGZpcnN0LgotICogUGx1Z2lucyBkbyB0aGlzCi0gKiBpbiB0aGVpciBwbHVnaW5faW5pdCBmdW5jdGlvbiwgbGlicmFyaWVzIGFuZCBhcHBsaWNhdGlvbnMgc2hvdWxkIGRvIHRoYXQKLSAqIGR1cmluZyB0aGVpciBpbml0aWFsaXphdGlvbi4KLSAqCi0gKiBUaGUgd2hvbGUgZGVidWdnaW5nIHN1YnN5c3RlbSBjYW4gYmUgZGlzYWJsZWQgYXQgYnVpbGQgdGltZSB3aXRoIHBhc3NpbmcgdGhlCi0gKiAtLWRpc2FibGUtZ3N0LWRlYnVnIHN3aXRjaCB0byBjb25maWd1cmUuIElmIHRoaXMgaXMgZG9uZSwgZXZlcnkgZnVuY3Rpb24sCi0gKiBtYWNybyBhbmQgZXZlbiBzdHJ1Y3RzIGRlc2NyaWJlZCBpbiB0aGlzIGZpbGUgZXZhbHVhdGUgdG8gZGVmYXVsdCB2YWx1ZXMgb3IKLSAqIG5vdGhpbmcgYXQgYWxsLgotICogU28gZG9uJ3QgdGFrZSBhZGRyZXNzZXMgb2YgdGhlc2UgZnVuY3Rpb25zIG9yIHVzZSBvdGhlciB0cmlja3MuCi0gKiBJZiB5b3UgbXVzdCBkbyB0aGF0IGZvciBzb21lIHJlYXNvbiwgdGhlcmUgaXMgc3RpbGwgYW4gb3B0aW9uLgotICogSWYgdGhlIGRlYnVnZ2luZwotICogc3Vic3lzdGVtIHdhcyBjb21waWxlZCBvdXQsICNHU1RfRElTQUJMRV9HU1RfREVCVUcgaXMgZGVmaW5lZCBpbgotICogJmx0O2dzdC9nc3QuaCZndDssCi0gKiBzbyB5b3UgY2FuIGNoZWNrIHRoYXQgYmVmb3JlIGRvaW5nIHlvdXIgdHJpY2suCi0gKiBEaXNhYmxpbmcgdGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW0gd2lsbCBnaXZlIHlvdSBhIHNsaWdodCAocmVhZDogdW5ub3RpY2VhYmxlKQotICogc3BlZWQgaW5jcmVhc2UgYW5kIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHlvdXIgY29tcGlsZWQgY29kZS4gVGhlIEdTdHJlYW1lcgotICogbGlicmFyeSBpdHNlbGYgYmVjb21lcyBhcm91bmQgMTAlIHNtYWxsZXIuCi0gKgotICogUGxlYXNlIG5vdGUgdGhhdCB0aGVyZSBhcmUgbmFtaW5nIGNvbnZlbnRpb25zIGZvciB0aGUgbmFtZXMgb2YgZGVidWdnaW5nCi0gKiBjYXRlZ29yaWVzLiBUaGVzZSBhcmUgZXhwbGFpbmVkIGF0IEdTVF9ERUJVR19DQVRFR09SWV9JTklUKCkuCi0gKi8KLQotI2RlZmluZSBHU1RfSU5GT19DCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0KLSN1bmRlZiBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbgotI3VuZGVmIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uCi0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0KLSNpZmRlZiBIQVZFX0RMRkNOX0gKLSMgIGluY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgICAgLyogZnByaW50ZiAqLwotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgIC8qIGdldHBpZCBvbiBVTklYICovCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1BST0NFU1NfSAotIyAgaW5jbHVkZSA8cHJvY2Vzcy5oPiAgICAgICAgICAvKiBnZXRwaWQgb24gd2luMzIgKi8KLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAvKiBHX1ZBX0NPUFkgKi8KLSNpZmRlZiBHX09TX1dJTjMyCi0jICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAgIC8qIHByZXZlbnRzIGZyb20gaW5jbHVkaW5nIHRvbyBtYW55IHRoaW5ncyAqLwotIyAgaW5jbHVkZSA8d2luZG93cy5oPiAgICAgICAgICAvKiBHZXRTdGRIYW5kbGUsIHdpbmRvd3MgY29uc29sZSAqLwotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdzdHV0aWxzLmgiCi0jaW5jbHVkZSAiZ3N0cXVhcmsuaCIKLSNpbmNsdWRlICJnc3RzZWdtZW50LmgiCi0jaW5jbHVkZSAiZ3N0dmFsdWUuaCIKLSNpbmNsdWRlICJnc3RjYXBzZmVhdHVyZXMuaCIKLQotI2lmZGVmIEhBVkVfVkFMR1JJTkRfVkFMR1JJTkRfSAotIyAgaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPiAgICAgICAvKiBnX3NwcmludGYgKi8KLQotLyogb3VyIG93biBwcmludGYgaW1wbGVtZW50YXRpb24gd2l0aCBjdXN0b20gZXh0ZW5zaW9ucyB0byAlcCBmb3IgY2FwcyBldGMuICovCi0jaW5jbHVkZSAicHJpbnRmL3ByaW50Zi5oIgotI2luY2x1ZGUgInByaW50Zi9wcmludGYtZXh0ZW5zaW9uLmgiCi0KLXN0YXRpYyBjaGFyICpnc3RfaW5mb19wcmludGZfcG9pbnRlcl9leHRlbnNpb25fZnVuYyAoY29uc3QgY2hhciAqZm9ybWF0LAotICAgIHZvaWQgKnB0cik7Ci0KLSNlbmRpZiAvKiAhR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCi0KLWV4dGVybiBnYm9vbGVhbiBnc3RfaXNfaW5pdGlhbGl6ZWQgKHZvaWQpOwotCi0vKiB3ZSB3YW50IHRoZXNlIHN5bWJvbHMgZXhwb3J0ZWQgZXZlbiBpZiBkZWJ1ZyBpcyBkaXNhYmxlZCwgdG8gbWFpbnRhaW4KLSAqIEFCSSBjb21wYXRpYmlsaXR5LiBVbmxlc3MgR1NUX1JFTU9WRV9ESVNBQkxFRCBpcyBkZWZpbmVkLiAqLwotI2lmICFkZWZpbmVkKEdTVF9ESVNBQkxFX0dTVF9ERUJVRykgfHwgIWRlZmluZWQoR1NUX1JFTU9WRV9ESVNBQkxFRCkKLQotLyogZGlzYWJsZWQgYnkgZGVmYXVsdCwgYXMgc29vbiBhcyBzb21lIHRocmVzaG9sZCBpcyBzZXQgPiBOT05FLAotICogaXQgYmVjb21lcyBlbmFibGVkLiAqLwotZ2Jvb2xlYW4gX2dzdF9kZWJ1Z19lbmFibGVkID0gRkFMU0U7Ci1Hc3REZWJ1Z0xldmVsIF9nc3RfZGVidWdfbWluID0gR1NUX0xFVkVMX05PTkU7Ci0KLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfREVGQVVMVCA9IE5VTEw7Ci0KLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfR1NUX0lOSVQgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9NRU1PUlkgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QQVJFTlRBR0UgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9TVEFURVMgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9TQ0hFRFVMSU5HID0gTlVMTDsKLQotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9CVUZGRVIgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9CVUZGRVJfTElTVCA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0JVUyA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0NBUFMgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9DTE9DSyA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0VMRU1FTlRfUEFEUyA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BBRFMgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QRVJGT1JNQU5DRSA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BJUEVMSU5FID0gTlVMTDsKLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUExVR0lOX0xPQURJTkcgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9QTFVHSU5fSU5GTyA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BST1BFUlRJRVMgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9ORUdPVElBVElPTiA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1JFRkNPVU5USU5HID0gTlVMTDsKLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfRVJST1JfU1lTVEVNID0gTlVMTDsKLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfRVZFTlQgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9NRVNTQUdFID0gTlVMTDsKLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUEFSQU1TID0gTlVMTDsKLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfQ0FMTF9UUkFDRSA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1NJR05BTCA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX1BST0JFID0gTlVMTDsKLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfUkVHSVNUUlkgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9RT1MgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqX3ByaXZfR1NUX0NBVF9QT0xMID0gTlVMTDsKLUdzdERlYnVnQ2F0ZWdvcnkgKkdTVF9DQVRfTUVUQSA9IE5VTEw7Ci1Hc3REZWJ1Z0NhdGVnb3J5ICpHU1RfQ0FUX0xPQ0tJTkcgPSBOVUxMOwotR3N0RGVidWdDYXRlZ29yeSAqR1NUX0NBVF9DT05URVhUID0gTlVMTDsKLUdzdERlYnVnQ2F0ZWdvcnkgKl9wcml2X0dTVF9DQVRfUFJPVEVDVElPTiA9IE5VTEw7Ci0KLQotI2VuZGlmIC8qICFkZWZpbmVkKEdTVF9ESVNBQkxFX0dTVF9ERUJVRykgfHwgIWRlZmluZWQoR1NUX1JFTU9WRV9ESVNBQkxFRCkgKi8KLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLQotLyogdW5kZXJzY29yZSBpcyB0byBwcmV2ZW50IGNvbmZsaWN0IHdpdGggR1NUX0NBVF9ERUJVRyBkZWZpbmUgKi8KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKF9HU1RfQ0FUX0RFQlVHKTsKLQotI2lmIDAKLSNpZiBkZWZpbmVkIF9fc2dpX18KLSNpbmNsdWRlIDxybGRfaW50ZXJmYWNlLmg+Ci10eXBlZGVmIHN0cnVjdCBETF9JTkZPCi17Ci0gIGNvbnN0IGNoYXIgKmRsaV9mbmFtZTsKLSAgdm9pZCAqZGxpX2ZiYXNlOwotICBjb25zdCBjaGFyICpkbGlfc25hbWU7Ci0gIHZvaWQgKmRsaV9zYWRkcjsKLSAgaW50IGRsaV92ZXJzaW9uOwotICBpbnQgZGxpX3Jlc2VydmVkMTsKLSAgbG9uZyBkbGlfcmVzZXJ2ZWRbNF07Ci19Ci1EbF9pbmZvOwotCi0jZGVmaW5lIF9STERfRExBRERSICAgICAgICAgICAgIDE0Ci1pbnQgZGxhZGRyICh2b2lkICphZGRyZXNzLCBEbF9pbmZvICogZGwpOwotCi1pbnQKLWRsYWRkciAodm9pZCAqYWRkcmVzcywgRGxfaW5mbyAqIGRsKQotewotICB2b2lkICp2OwotCi0gIHYgPSBfcmxkX25ld19pbnRlcmZhY2UgKF9STERfRExBRERSLCBhZGRyZXNzLCBkbCk7Ci0gIHJldHVybiAoaW50KSB2OwotfQotI2VuZGlmIC8qIF9fc2dpX18gKi8KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBnc3RfZGVidWdfcmVzZXRfdGhyZXNob2xkIChncG9pbnRlciBjYXRlZ29yeSwgZ3BvaW50ZXIgdW51c2VkKTsKLXN0YXRpYyB2b2lkIGdzdF9kZWJ1Z19yZXNldF9hbGxfdGhyZXNob2xkcyAodm9pZCk7Ci0KLXN0cnVjdCBfR3N0RGVidWdNZXNzYWdlCi17Ci0gIGdjaGFyICptZXNzYWdlOwotICBjb25zdCBnY2hhciAqZm9ybWF0OwotICB2YV9saXN0IGFyZ3VtZW50czsKLX07Ci0KLS8qIGxpc3Qgb2YgYWxsIG5hbWUvbGV2ZWwgcGFpcnMgZnJvbSAtLWdzdC1kZWJ1ZyBhbmQgR1NUX0RFQlVHICovCi1zdGF0aWMgR011dGV4IF9fbGV2ZWxfbmFtZV9tdXRleDsKLXN0YXRpYyBHU0xpc3QgKl9fbGV2ZWxfbmFtZSA9IE5VTEw7Ci10eXBlZGVmIHN0cnVjdAotewotICBHUGF0dGVyblNwZWMgKnBhdDsKLSAgR3N0RGVidWdMZXZlbCBsZXZlbDsKLX0KLUxldmVsTmFtZUVudHJ5OwotCi0vKiBsaXN0IG9mIGFsbCBjYXRlZ29yaWVzICovCi1zdGF0aWMgR011dGV4IF9fY2F0X211dGV4Owotc3RhdGljIEdTTGlzdCAqX19jYXRlZ29yaWVzID0gTlVMTDsKLQotc3RhdGljIEdzdERlYnVnQ2F0ZWdvcnkgKl9nc3RfZGVidWdfZ2V0X2NhdGVnb3J5X2xvY2tlZCAoY29uc3QgZ2NoYXIgKiBuYW1lKTsKLQotCi0vKiBhbGwgcmVnaXN0ZXJlZCBkZWJ1ZyBoYW5kbGVycyAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0TG9nRnVuY3Rpb24gZnVuYzsKLSAgZ3BvaW50ZXIgdXNlcl9kYXRhOwotICBHRGVzdHJveU5vdGlmeSBub3RpZnk7Ci19Ci1Mb2dGdW5jRW50cnk7Ci1zdGF0aWMgR011dGV4IF9fbG9nX2Z1bmNfbXV0ZXg7Ci1zdGF0aWMgR1NMaXN0ICpfX2xvZ19mdW5jdGlvbnMgPSBOVUxMOwotCi0vKiB3aGV0aGVyIHRvIGFkZCB0aGUgZGVmYXVsdCBsb2cgZnVuY3Rpb24gaW4gZ3N0X2luaXQoKSAqLwotc3RhdGljIGdib29sZWFuIGFkZF9kZWZhdWx0X2xvZ19mdW5jID0gVFJVRTsKLQotI2RlZmluZSBQUkVUVFlfVEFHU19ERUZBVUxUICBUUlVFCi1zdGF0aWMgZ2Jvb2xlYW4gcHJldHR5X3RhZ3MgPSBQUkVUVFlfVEFHU19ERUZBVUxUOwotCi1zdGF0aWMgdm9sYXRpbGUgZ2ludCBHX0dOVUNfTUFZX0FMSUFTIF9fZGVmYXVsdF9sZXZlbCA9IEdTVF9MRVZFTF9ERUZBVUxUOwotc3RhdGljIHZvbGF0aWxlIGdpbnQgR19HTlVDX01BWV9BTElBUyBfX3VzZV9jb2xvciA9IEdTVF9ERUJVR19DT0xPUl9NT0RFX09OOwotCi0vKiBGSVhNRTogZXhwb3J0IHRoaXM/ICovCi1nYm9vbGVhbgotX3ByaXZfZ3N0X2luX3ZhbGdyaW5kICh2b2lkKQotewotICBzdGF0aWMgZW51bQotICB7Ci0gICAgR1NUX1ZHX1VOQ0hFQ0tFRCwKLSAgICBHU1RfVkdfTk9fVkFMR1JJTkQsCi0gICAgR1NUX1ZHX0lOU0lERQotICB9Ci0gIGluX3ZhbGdyaW5kID0gR1NUX1ZHX1VOQ0hFQ0tFRDsKLQotICBpZiAoaW5fdmFsZ3JpbmQgPT0gR1NUX1ZHX1VOQ0hFQ0tFRCkgewotI2lmZGVmIEhBVkVfVkFMR1JJTkRfVkFMR1JJTkRfSAotICAgIGlmIChSVU5OSU5HX09OX1ZBTEdSSU5EKSB7Ci0gICAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfR1NUX0lOSVQsICJ3ZSdyZSBydW5uaW5nIGluc2lkZSB2YWxncmluZCIpOwotICAgICAgaW5fdmFsZ3JpbmQgPSBHU1RfVkdfSU5TSURFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9HU1RfSU5JVCwgIm5vdCBkb2luZyBleHRyYSB2YWxncmluZCBzdHVmZiIpOwotICAgICAgaW5fdmFsZ3JpbmQgPSBHU1RfVkdfTk9fVkFMR1JJTkQ7Ci0gICAgfQotI2Vsc2UKLSAgICBpbl92YWxncmluZCA9IEdTVF9WR19OT19WQUxHUklORDsKLSNlbmRpZgotICAgIGdfYXNzZXJ0IChpbl92YWxncmluZCA9PSBHU1RfVkdfTk9fVkFMR1JJTkQgfHwKLSAgICAgICAgaW5fdmFsZ3JpbmQgPT0gR1NUX1ZHX0lOU0lERSk7Ci0gIH0KLSAgcmV0dXJuIChpbl92YWxncmluZCA9PSBHU1RfVkdfSU5TSURFKTsKLX0KLQotLyogSW5pdGlhbGl6ZSB0aGUgZGVidWdnaW5nIHN5c3RlbSAqLwotdm9pZAotX3ByaXZfZ3N0X2RlYnVnX2luaXQgKHZvaWQpCi17Ci0gIGNvbnN0IGdjaGFyICplbnY7Ci0gIEZJTEUgKmxvZ19maWxlOwotCi0gIGlmIChhZGRfZGVmYXVsdF9sb2dfZnVuYykgewotICAgIGVudiA9IGdfZ2V0ZW52ICgiR1NUX0RFQlVHX0ZJTEUiKTsKLSAgICBpZiAoZW52ICE9IE5VTEwgJiYgKmVudiAhPSAnXDAnKSB7Ci0gICAgICBpZiAoc3RyY21wIChlbnYsICItIikgPT0gMCkgewotICAgICAgICBsb2dfZmlsZSA9IHN0ZG91dDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGxvZ19maWxlID0gZ19mb3BlbiAoZW52LCAidyIpOwotICAgICAgICBpZiAobG9nX2ZpbGUgPT0gTlVMTCkgewotICAgICAgICAgIGdfcHJpbnRlcnIgKCJDb3VsZCBub3Qgb3BlbiBsb2cgZmlsZSAnJXMnIGZvciB3cml0aW5nOiAlc1xuIiwgZW52LAotICAgICAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgICAgIGxvZ19maWxlID0gc3RkZXJyOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGxvZ19maWxlID0gc3RkZXJyOwotICAgIH0KLQotICAgIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uIChnc3RfZGVidWdfbG9nX2RlZmF1bHQsIGxvZ19maWxlLCBOVUxMKTsKLSAgfQotCi0gIF9fZ3N0X3ByaW50Zl9wb2ludGVyX2V4dGVuc2lvbl9zZXRfZnVuYwotICAgICAgKGdzdF9pbmZvX3ByaW50Zl9wb2ludGVyX2V4dGVuc2lvbl9mdW5jKTsKLQotICAvKiBkbyBOT1QgdXNlIGEgc2luZ2xlIGRlYnVnIGZ1bmN0aW9uIGJlZm9yZSB0aGlzIGxpbmUgaGFzIGJlZW4gcnVuICovCi0gIEdTVF9DQVRfREVGQVVMVCA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiZGVmYXVsdCIsCi0gICAgICBHU1RfREVCVUdfVU5ERVJMSU5FLCBOVUxMKTsKLSAgX0dTVF9DQVRfREVCVUcgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9ERUJVRyIsCi0gICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19ZRUxMT1csICJkZWJ1Z2dpbmcgc3Vic3lzdGVtIik7Ci0KLSAgLyogRklYTUU6IGFkZCBkZXNjcmlwdGlvbnMgaGVyZSAqLwotICBHU1RfQ0FUX0dTVF9JTklUID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfSU5JVCIsCi0gICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19SRUQsIE5VTEwpOwotICBHU1RfQ0FUX01FTU9SWSA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX01FTU9SWSIsCi0gICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19CTFVFLCAibWVtb3J5Iik7Ci0gIEdTVF9DQVRfUEFSRU5UQUdFID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfUEFSRU5UQUdFIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1dISVRFIHwgR1NUX0RFQlVHX0JHX1JFRCwgTlVMTCk7Ci0gIEdTVF9DQVRfU1RBVEVTID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfU1RBVEVTIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1JFRCwgTlVMTCk7Ci0gIEdTVF9DQVRfU0NIRURVTElORyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1NDSEVEVUxJTkciLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfTUFHRU5UQSwgTlVMTCk7Ci0gIEdTVF9DQVRfQlVGRkVSID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfQlVGRkVSIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0JHX0dSRUVOLCBOVUxMKTsKLSAgR1NUX0NBVF9CVUZGRVJfTElTVCA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX0JVRkZFUl9MSVNUIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0JHX0dSRUVOLCBOVUxMKTsKLSAgR1NUX0NBVF9CVVMgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9CVVMiLCBHU1RfREVCVUdfQkdfWUVMTE9XLCBOVUxMKTsKLSAgR1NUX0NBVF9DQVBTID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfQ0FQUyIsCi0gICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19CTFVFLCBOVUxMKTsKLSAgR1NUX0NBVF9DTE9DSyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX0NMT0NLIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1lFTExPVywgTlVMTCk7Ci0gIEdTVF9DQVRfRUxFTUVOVF9QQURTID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfRUxFTUVOVF9QQURTIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1dISVRFIHwgR1NUX0RFQlVHX0JHX1JFRCwgTlVMTCk7Ci0gIEdTVF9DQVRfUEFEUyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1BBRFMiLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfUkVEIHwgR1NUX0RFQlVHX0JHX1JFRCwgTlVMTCk7Ci0gIEdTVF9DQVRfUEVSRk9STUFOQ0UgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QRVJGT1JNQU5DRSIsCi0gICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19XSElURSB8IEdTVF9ERUJVR19CR19SRUQsIE5VTEwpOwotICBHU1RfQ0FUX1BJUEVMSU5FID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfUElQRUxJTkUiLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfUkVELCBOVUxMKTsKLSAgR1NUX0NBVF9QTFVHSU5fTE9BRElORyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1BMVUdJTl9MT0FESU5HIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX0NZQU4sIE5VTEwpOwotICBHU1RfQ0FUX1BMVUdJTl9JTkZPID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfUExVR0lOX0lORk8iLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfQ1lBTiwgTlVMTCk7Ci0gIEdTVF9DQVRfUFJPUEVSVElFUyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1BST1BFUlRJRVMiLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfQkxVRSwgTlVMTCk7Ci0gIEdTVF9DQVRfTkVHT1RJQVRJT04gPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9ORUdPVElBVElPTiIsCi0gICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19CTFVFLCBOVUxMKTsKLSAgR1NUX0NBVF9SRUZDT1VOVElORyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1JFRkNPVU5USU5HIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1JFRCB8IEdTVF9ERUJVR19CR19CTFVFLCBOVUxMKTsKLSAgR1NUX0NBVF9FUlJPUl9TWVNURU0gPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9FUlJPUl9TWVNURU0iLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfUkVEIHwgR1NUX0RFQlVHX0JHX1dISVRFLCBOVUxMKTsKLQotICBHU1RfQ0FUX0VWRU5UID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfRVZFTlQiLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfQkxVRSwgTlVMTCk7Ci0gIEdTVF9DQVRfTUVTU0FHRSA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX01FU1NBR0UiLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfUkVELCBOVUxMKTsKLSAgR1NUX0NBVF9QQVJBTVMgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QQVJBTVMiLAotICAgICAgR1NUX0RFQlVHX0JPTEQgfCBHU1RfREVCVUdfRkdfQkxBQ0sgfCBHU1RfREVCVUdfQkdfWUVMTE9XLCBOVUxMKTsKLSAgR1NUX0NBVF9DQUxMX1RSQUNFID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfQ0FMTF9UUkFDRSIsCi0gICAgICBHU1RfREVCVUdfQk9MRCwgTlVMTCk7Ci0gIEdTVF9DQVRfU0lHTkFMID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfU0lHTkFMIiwKLSAgICAgIEdTVF9ERUJVR19CT0xEIHwgR1NUX0RFQlVHX0ZHX1dISVRFIHwgR1NUX0RFQlVHX0JHX1JFRCwgTlVMTCk7Ci0gIEdTVF9DQVRfUFJPQkUgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QUk9CRSIsCi0gICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19HUkVFTiwgInBhZCBwcm9iZXMiKTsKLSAgR1NUX0NBVF9SRUdJU1RSWSA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX1JFR0lTVFJZIiwgMCwgInJlZ2lzdHJ5Iik7Ci0gIEdTVF9DQVRfUU9TID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfUU9TIiwgMCwgIlFvUyIpOwotICBfcHJpdl9HU1RfQ0FUX1BPTEwgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QT0xMIiwgMCwgInBvbGwiKTsKLSAgR1NUX0NBVF9NRVRBID0gX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKCJHU1RfTUVUQSIsIDAsICJtZXRhIik7Ci0gIEdTVF9DQVRfTE9DS0lORyA9IF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3ICgiR1NUX0xPQ0tJTkciLCAwLCAibG9ja2luZyIpOwotICBHU1RfQ0FUX0NPTlRFWFQgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9DT05URVhUIiwgMCwgTlVMTCk7Ci0gIF9wcml2X0dTVF9DQVRfUFJPVEVDVElPTiA9Ci0gICAgICBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAoIkdTVF9QUk9URUNUSU9OIiwgMCwgInByb3RlY3Rpb24iKTsKLQotICAvKiBwcmludCBvdXQgdGhlIHZhbGdyaW5kIG1lc3NhZ2UgaWYgd2UncmUgaW4gdmFsZ3JpbmQgKi8KLSAgX3ByaXZfZ3N0X2luX3ZhbGdyaW5kICgpOwotCi0gIGVudiA9IGdfZ2V0ZW52ICgiR1NUX0RFQlVHX09QVElPTlMiKTsKLSAgaWYgKGVudiAhPSBOVUxMKSB7Ci0gICAgaWYgKHN0cnN0ciAoZW52LCAiZnVsbF90YWdzIikgfHwgc3Ryc3RyIChlbnYsICJmdWxsLXRhZ3MiKSkKLSAgICAgIHByZXR0eV90YWdzID0gRkFMU0U7Ci0gICAgZWxzZSBpZiAoc3Ryc3RyIChlbnYsICJwcmV0dHlfdGFncyIpIHx8IHN0cnN0ciAoZW52LCAicHJldHR5LXRhZ3MiKSkKLSAgICAgIHByZXR0eV90YWdzID0gVFJVRTsKLSAgfQotCi0gIGlmIChnX2dldGVudiAoIkdTVF9ERUJVR19OT19DT0xPUiIpICE9IE5VTEwpCi0gICAgZ3N0X2RlYnVnX3NldF9jb2xvcl9tb2RlIChHU1RfREVCVUdfQ09MT1JfTU9ERV9PRkYpOwotICBlbnYgPSBnX2dldGVudiAoIkdTVF9ERUJVR19DT0xPUl9NT0RFIik7Ci0gIGlmIChlbnYpCi0gICAgZ3N0X2RlYnVnX3NldF9jb2xvcl9tb2RlX2Zyb21fc3RyaW5nIChlbnYpOwotCi0gIGVudiA9IGdfZ2V0ZW52ICgiR1NUX0RFQlVHIik7Ci0gIGlmIChlbnYpIHsKLSAgICBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZyAoZW52LCBGQUxTRSk7Ci0gIH0KLX0KLQotLyogd2UgY2FuJ3QgZG8gdGhpcyBmdXJ0aGVyIGFib3ZlLCBiZWNhdXNlIHdlIGluaXRpYWxpemUgdGhlIEdTVF9DQVRfREVGQVVMVCBzdHJ1Y3QgKi8KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIF9HU1RfQ0FUX0RFQlVHCi0KLS8qKgotICogZ3N0X2RlYnVnX2xvZzoKLSAqIEBjYXRlZ29yeTogY2F0ZWdvcnkgdG8gbG9nCi0gKiBAbGV2ZWw6IGxldmVsIG9mIHRoZSBtZXNzYWdlIGlzIGluCi0gKiBAZmlsZTogdGhlIGZpbGUgdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlLCB1c3VhbGx5IHRoZSBfX0ZJTEVfXyBpZGVudGlmaWVyCi0gKiBAZnVuY3Rpb246IHRoZSBmdW5jdGlvbiB0aGF0IGVtaXR0ZWQgdGhlIG1lc3NhZ2UKLSAqIEBsaW5lOiB0aGUgbGluZSBmcm9tIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQsIHVzdWFsbHkgX19MSU5FX18KLSAqIEBvYmplY3Q6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSBvYmplY3QgdGhpcyBtZXNzYWdlIHJlbGF0ZXMgdG8sCi0gKiAgICAgb3IgJU5VTEwgaWYgbm9uZQotICogQGZvcm1hdDogYSBwcmludGYgc3R5bGUgZm9ybWF0IHN0cmluZwotICogQC4uLjogb3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgZm9ybWF0Ci0gKgotICogTG9ncyB0aGUgZ2l2ZW4gbWVzc2FnZSB1c2luZyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgZGVidWdnaW5nIGhhbmRsZXJzLgotICovCi12b2lkCi1nc3RfZGVidWdfbG9nIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWxlLCBjb25zdCBnY2hhciAqIGZ1bmN0aW9uLCBnaW50IGxpbmUsCi0gICAgR09iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJfYXJnczsKLQotICB2YV9zdGFydCAodmFyX2FyZ3MsIGZvcm1hdCk7Ci0gIGdzdF9kZWJ1Z19sb2dfdmFsaXN0IChjYXRlZ29yeSwgbGV2ZWwsIGZpbGUsIGZ1bmN0aW9uLCBsaW5lLCBvYmplY3QsIGZvcm1hdCwKLSAgICAgIHZhcl9hcmdzKTsKLSAgdmFfZW5kICh2YXJfYXJncyk7Ci19Ci0KLS8qIGJhc2VkIG9uIGdfYmFzZW5hbWUoKSwgd2hpY2ggd2UgY2FuJ3QgdXNlIGJlY2F1c2UgaXQgd2FzIGRlcHJlY2F0ZWQgKi8KLXN0YXRpYyBpbmxpbmUgY29uc3QgZ2NoYXIgKgotZ3N0X3BhdGhfYmFzZW5hbWUgKGNvbnN0IGdjaGFyICogZmlsZV9uYW1lKQotewotICByZWdpc3RlciBjb25zdCBnY2hhciAqYmFzZTsKLQotICBiYXNlID0gc3RycmNociAoZmlsZV9uYW1lLCBHX0RJUl9TRVBBUkFUT1IpOwotCi0gIHsKLSAgICBjb25zdCBnY2hhciAqcSA9IHN0cnJjaHIgKGZpbGVfbmFtZSwgJy8nKTsKLSAgICBpZiAoYmFzZSA9PSBOVUxMIHx8IChxICE9IE5VTEwgJiYgcSA+IGJhc2UpKQotICAgICAgYmFzZSA9IHE7Ci0gIH0KLQotICBpZiAoYmFzZSkKLSAgICByZXR1cm4gYmFzZSArIDE7Ci0KLSAgaWYgKGdfYXNjaWlfaXNhbHBoYSAoZmlsZV9uYW1lWzBdKSAmJiBmaWxlX25hbWVbMV0gPT0gJzonKQotICAgIHJldHVybiBmaWxlX25hbWUgKyAyOwotCi0gIHJldHVybiBmaWxlX25hbWU7Ci19Ci0KLS8qKgotICogZ3N0X2RlYnVnX2xvZ192YWxpc3Q6Ci0gKiBAY2F0ZWdvcnk6IGNhdGVnb3J5IHRvIGxvZwotICogQGxldmVsOiBsZXZlbCBvZiB0aGUgbWVzc2FnZSBpcyBpbgotICogQGZpbGU6IHRoZSBmaWxlIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZSwgdXN1YWxseSB0aGUgX19GSUxFX18gaWRlbnRpZmllcgotICogQGZ1bmN0aW9uOiB0aGUgZnVuY3Rpb24gdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlCi0gKiBAbGluZTogdGhlIGxpbmUgZnJvbSB0aGF0IHRoZSBtZXNzYWdlIHdhcyBlbWl0dGVkLCB1c3VhbGx5IF9fTElORV9fCi0gKiBAb2JqZWN0OiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiB0aGUgb2JqZWN0IHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLAotICogICAgIG9yICVOVUxMIGlmIG5vbmUKLSAqIEBmb3JtYXQ6IGEgcHJpbnRmIHN0eWxlIGZvcm1hdCBzdHJpbmcKLSAqIEBhcmdzOiBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQKLSAqCi0gKiBMb2dzIHRoZSBnaXZlbiBtZXNzYWdlIHVzaW5nIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBkZWJ1Z2dpbmcgaGFuZGxlcnMuCi0gKi8KLXZvaWQKLWdzdF9kZWJ1Z19sb2dfdmFsaXN0IChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWxlLCBjb25zdCBnY2hhciAqIGZ1bmN0aW9uLCBnaW50IGxpbmUsCi0gICAgR09iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgR3N0RGVidWdNZXNzYWdlIG1lc3NhZ2U7Ci0gIExvZ0Z1bmNFbnRyeSAqZW50cnk7Ci0gIEdTTGlzdCAqaGFuZGxlcjsKLQotICBnX3JldHVybl9pZl9mYWlsIChjYXRlZ29yeSAhPSBOVUxMKTsKLQotICBpZiAobGV2ZWwgPiBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoY2F0ZWdvcnkpKQotICAgIHJldHVybjsKLQotICBnX3JldHVybl9pZl9mYWlsIChmaWxlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChmdW5jdGlvbiAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZm9ybWF0ICE9IE5VTEwpOwotCi0gIG1lc3NhZ2UubWVzc2FnZSA9IE5VTEw7Ci0gIG1lc3NhZ2UuZm9ybWF0ID0gZm9ybWF0OwotICBHX1ZBX0NPUFkgKG1lc3NhZ2UuYXJndW1lbnRzLCBhcmdzKTsKLQotICBoYW5kbGVyID0gX19sb2dfZnVuY3Rpb25zOwotICB3aGlsZSAoaGFuZGxlcikgewotICAgIGVudHJ5ID0gaGFuZGxlci0+ZGF0YTsKLSAgICBoYW5kbGVyID0gZ19zbGlzdF9uZXh0IChoYW5kbGVyKTsKLSAgICBlbnRyeS0+ZnVuYyAoY2F0ZWdvcnksIGxldmVsLCBmaWxlLCBmdW5jdGlvbiwgbGluZSwgb2JqZWN0LCAmbWVzc2FnZSwKLSAgICAgICAgZW50cnktPnVzZXJfZGF0YSk7Ci0gIH0KLSAgZ19mcmVlIChtZXNzYWdlLm1lc3NhZ2UpOwotICB2YV9lbmQgKG1lc3NhZ2UuYXJndW1lbnRzKTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfbWVzc2FnZV9nZXQ6Ci0gKiBAbWVzc2FnZTogYSBkZWJ1ZyBtZXNzYWdlCi0gKgotICogR2V0cyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgI0dzdERlYnVnTWVzc2FnZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkCi0gKiBpbiBkZWJ1ZyBoYW5kbGVycyB0byBleHRyYWN0IHRoZSBtZXNzYWdlLgotICoKLSAqIFJldHVybnM6IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSAjR3N0RGVidWdNZXNzYWdlLgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfZGVidWdfbWVzc2FnZV9nZXQgKEdzdERlYnVnTWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci0gIGlmIChtZXNzYWdlLT5tZXNzYWdlID09IE5VTEwpIHsKLSAgICBpbnQgbGVuOwotCi0gICAgbGVuID0gX19nc3RfdmFzcHJpbnRmICgmbWVzc2FnZS0+bWVzc2FnZSwgbWVzc2FnZS0+Zm9ybWF0LAotICAgICAgICBtZXNzYWdlLT5hcmd1bWVudHMpOwotCi0gICAgaWYgKGxlbiA8IDApCi0gICAgICBtZXNzYWdlLT5tZXNzYWdlID0gTlVMTDsKLSAgfQotICByZXR1cm4gbWVzc2FnZS0+bWVzc2FnZTsKLX0KLQotI2RlZmluZSBNQVhfQlVGRkVSX0RVTVBfU1RSSU5HX0xFTiAgMTAwCi0KLS8qIHN0cnVjdHVyZV90b19wcmV0dHlfc3RyaW5nOgotICogQHN0cjogYSBzZXJpYWxpemVkICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBJZiB0aGUgc2VyaWFsaXplZCBzdHJ1Y3R1cmUgY29udGFpbnMgbGFyZ2UgYnVmZmVycyBzdWNoIGFzIGltYWdlcyB0aGUgaGV4Ci0gKiByZXByZXNlbnRhdGlvbiBvZiB0aG9zZSBidWZmZXJzIHdpbGwgYmUgc2hvcnRlbmVkIHNvIHRoYXQgdGhlIHN0cmluZyByZW1haW5zCi0gKiByZWFkYWJsZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgZmlsdGVyZWQgc3RyaW5nCi0gKi8KLXN0YXRpYyBnY2hhciAqCi1wcmV0dGlmeV9zdHJ1Y3R1cmVfc3RyaW5nIChnY2hhciAqIHN0cikKLXsKLSAgZ2NoYXIgKnBvcyA9IHN0ciwgKmVuZDsKLQotICB3aGlsZSAoKHBvcyA9IHN0cnN0ciAocG9zLCAiKGJ1ZmZlcikiKSkpIHsKLSAgICBndWludCBjb3VudCA9IDA7Ci0KLSAgICBwb3MgKz0gc3RybGVuICgiKGJ1ZmZlcikiKTsKLSAgICBmb3IgKGVuZCA9IHBvczsgKmVuZCAhPSAnXDAnICYmICplbmQgIT0gJzsnICYmICplbmQgIT0gJyAnOyArK2VuZCkKLSAgICAgICsrY291bnQ7Ci0gICAgaWYgKGNvdW50ID4gTUFYX0JVRkZFUl9EVU1QX1NUUklOR19MRU4pIHsKLSAgICAgIG1lbWNweSAocG9zICsgTUFYX0JVRkZFUl9EVU1QX1NUUklOR19MRU4gLSA2LCAiLi4iLCAyKTsKLSAgICAgIG1lbWNweSAocG9zICsgTUFYX0JVRkZFUl9EVU1QX1NUUklOR19MRU4gLSA0LCBwb3MgKyBjb3VudCAtIDQsIDQpOwotICAgICAgbWVtbW92ZSAocG9zICsgTUFYX0JVRkZFUl9EVU1QX1NUUklOR19MRU4sIHBvcyArIGNvdW50LAotICAgICAgICAgIHN0cmxlbiAocG9zICsgY291bnQpICsgMSk7Ci0gICAgICBwb3MgKz0gTUFYX0JVRkZFUl9EVU1QX1NUUklOR19MRU47Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHN0cjsKLX0KLQotc3RhdGljIGlubGluZSBnY2hhciAqCi1nc3RfaW5mb19zdHJ1Y3R1cmVfdG9fc3RyaW5nIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBpZiAoR19MSUtFTFkgKHMpKSB7Ci0gICAgZ2NoYXIgKnN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgICBpZiAoR19VTkxJS0VMWSAocHJldHR5X3RhZ3MgJiYgcy0+bmFtZSA9PSBHU1RfUVVBUksgKFRBR0xJU1QpKSkKLSAgICAgIHJldHVybiBwcmV0dGlmeV9zdHJ1Y3R1cmVfc3RyaW5nIChzdHIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBzdHI7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIgKgotZ3N0X2luZm9fZGVzY3JpYmVfYnVmZmVyIChHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIGNvbnN0IGdjaGFyICpvZmZzZXRfc3RyID0gIm5vbmUiOwotICBjb25zdCBnY2hhciAqb2Zmc2V0X2VuZF9zdHIgPSAibm9uZSI7Ci0gIGdjaGFyIG9mZnNldF9idWZbMzJdLCBvZmZzZXRfZW5kX2J1ZlszMl07Ci0KLSAgaWYgKEdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEIChidWZmZXIpKSB7Ci0gICAgZ19zbnByaW50ZiAob2Zmc2V0X2J1Ziwgc2l6ZW9mIChvZmZzZXRfYnVmKSwgIiUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpKTsKLSAgICBvZmZzZXRfc3RyID0gb2Zmc2V0X2J1ZjsKLSAgfQotICBpZiAoR1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEIChidWZmZXIpKSB7Ci0gICAgZ19zbnByaW50ZiAob2Zmc2V0X2VuZF9idWYsIHNpemVvZiAob2Zmc2V0X2VuZF9idWYpLCAiJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpKTsKLSAgICBvZmZzZXRfZW5kX3N0ciA9IG9mZnNldF9lbmRfYnVmOwotICB9Ci0KLSAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoImJ1ZmZlcjogJXAsIHB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZHRzICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQgIiwgZHVyICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzaXplICUiIEdfR1NJWkVfRk9STUFUCi0gICAgICAiLCBvZmZzZXQgJXMsIG9mZnNldF9lbmQgJXMsIGZsYWdzIDB4JXgiLCBidWZmZXIsCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpKSwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlciksIG9mZnNldF9zdHIsIG9mZnNldF9lbmRfc3RyLAotICAgICAgR1NUX0JVRkZFUl9GTEFHUyAoYnVmZmVyKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIgKgotZ3N0X2luZm9fZGVzY3JpYmVfYnVmZmVyX2xpc3QgKEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICBHc3RDbG9ja1RpbWUgcHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR3N0Q2xvY2tUaW1lIGR0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGdzaXplIHRvdGFsX3NpemUgPSAwOwotICBndWludCBuLCBpOwotCi0gIG4gPSBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0KTsKLSAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgaSk7Ci0KLSAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICBwdHMgPSBHU1RfQlVGRkVSX1BUUyAoYnVmKTsKLSAgICAgIGR0cyA9IEdTVF9CVUZGRVJfRFRTIChidWYpOwotICAgIH0KLQotICAgIHRvdGFsX3NpemUgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgfQotCi0gIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJidWZmZXJsaXN0OiAlcCwgJXUgYnVmZmVycywgcHRzICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgZHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzaXplICUiIEdfR1NJWkVfRk9STUFULCBsaXN0LCBuLAotICAgICAgR1NUX1RJTUVfQVJHUyAocHRzKSwgR1NUX1RJTUVfQVJHUyAoZHRzKSwgdG90YWxfc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIgKgotZ3N0X2luZm9fZGVzY3JpYmVfZXZlbnQgKEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdjaGFyICpzLCAqcmV0OwotCi0gIHMgPSBnc3RfaW5mb19zdHJ1Y3R1cmVfdG9fc3RyaW5nIChnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpKTsKLSAgcmV0ID0gZ19zdHJkdXBfcHJpbnRmICgiJXMgZXZlbnQ6ICVwLCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgc2VxLW51bSAlZCwgJXMiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksIGV2ZW50LAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0VWRU5UX1RJTUVTVEFNUCAoZXZlbnQpKSwgR1NUX0VWRU5UX1NFUU5VTSAoZXZlbnQpLAotICAgICAgKHMgPyBzIDogIihOVUxMKSIpKTsKLSAgZ19mcmVlIChzKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBnY2hhciAqCi1nc3RfaW5mb19kZXNjcmliZV9tZXNzYWdlIChHc3RNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgZ2NoYXIgKnMsICpyZXQ7Ci0KLSAgcyA9IGdzdF9pbmZvX3N0cnVjdHVyZV90b19zdHJpbmcgKGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpKTsKLSAgcmV0ID0gZ19zdHJkdXBfcHJpbnRmICgiJXMgbWVzc2FnZTogJXAsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiLCBzZXEtbnVtICVkLCBlbGVtZW50ICclcycsICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSwKLSAgICAgIG1lc3NhZ2UsIEdTVF9USU1FX0FSR1MgKEdTVF9NRVNTQUdFX1RJTUVTVEFNUCAobWVzc2FnZSkpLAotICAgICAgR1NUX01FU1NBR0VfU0VRTlVNIChtZXNzYWdlKSwKLSAgICAgICgobWVzc2FnZS0+c3JjKSA/IEdTVF9FTEVNRU5UX05BTUUgKG1lc3NhZ2UtPnNyYykgOiAiKE5VTEwpIiksCi0gICAgICAocyA/IHMgOiAiKE5VTEwpIikpOwotICBnX2ZyZWUgKHMpOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGdjaGFyICoKLWdzdF9pbmZvX2Rlc2NyaWJlX3F1ZXJ5IChHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBnY2hhciAqcywgKnJldDsKLQotICBzID0gZ3N0X2luZm9fc3RydWN0dXJlX3RvX3N0cmluZyAoZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUgKHF1ZXJ5KSk7Ci0gIHJldCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzIHF1ZXJ5OiAlcCwgJXMiLCBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSksCi0gICAgICBxdWVyeSwgKHMgPyBzIDogIihOVUxMKSIpKTsKLSAgZ19mcmVlIChzKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF9kZWJ1Z19wcmludF9vYmplY3QgKGdwb2ludGVyIHB0cikKLXsKLSAgR09iamVjdCAqb2JqZWN0ID0gKEdPYmplY3QgKikgcHRyOwotCi0jaWZkZWYgdW51c2VkCi0gIC8qIFRoaXMgaXMgYSBjdXRlIHRyaWNrIHRvIGRldGVjdCB1bm1hcHBlZCBtZW1vcnksIGJ1dCBpcyB1bnBvcnRhYmxlLAotICAgKiBzbG93LCBzY3Jld3MgYXJvdW5kIHdpdGggbWFkdmlzZSwgYW5kIG5vdCBhY3R1YWxseSB0aGF0IHVzZWZ1bC4gKi8KLSAgewotICAgIGludCByZXQ7Ci0KLSAgICByZXQgPSBtYWR2aXNlICgodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpIHB0ciAmICh+MHhmZmYpKSwgNDA5NiwgMCk7Ci0gICAgaWYgKHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9NRU0pIHsKLSAgICAgIGJ1ZmZlciA9IGdfc3RyZHVwX3ByaW50ZiAoIiVwICh1bm1hcHBlZCBtZW1vcnkpIiwgcHRyKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIC8qIG5pY2VseSBwcmludGVkIG9iamVjdCAqLwotICBpZiAob2JqZWN0ID09IE5VTEwpIHsKLSAgICByZXR1cm4gZ19zdHJkdXAgKCIoTlVMTCkiKTsKLSAgfQotICBpZiAoR1NUX0lTX0NBUFMgKHB0cikpIHsKLSAgICByZXR1cm4gZ3N0X2NhcHNfdG9fc3RyaW5nICgoY29uc3QgR3N0Q2FwcyAqKSBwdHIpOwotICB9Ci0gIGlmIChHU1RfSVNfU1RSVUNUVVJFIChwdHIpKSB7Ci0gICAgcmV0dXJuIGdzdF9pbmZvX3N0cnVjdHVyZV90b19zdHJpbmcgKChjb25zdCBHc3RTdHJ1Y3R1cmUgKikgcHRyKTsKLSAgfQotICBpZiAoKihHVHlwZSAqKSBwdHIgPT0gR1NUX1RZUEVfQ0FQU19GRUFUVVJFUykgewotICAgIHJldHVybiBnc3RfY2Fwc19mZWF0dXJlc190b19zdHJpbmcgKChjb25zdCBHc3RDYXBzRmVhdHVyZXMgKikgcHRyKTsKLSAgfQotICBpZiAoR1NUX0lTX1RBR19MSVNUIChwdHIpKSB7Ci0gICAgZ2NoYXIgKnN0ciA9IGdzdF90YWdfbGlzdF90b19zdHJpbmcgKChHc3RUYWdMaXN0ICopIHB0cik7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHByZXR0eV90YWdzKSkKLSAgICAgIHJldHVybiBwcmV0dGlmeV9zdHJ1Y3R1cmVfc3RyaW5nIChzdHIpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBzdHI7Ci0gIH0KLSAgaWYgKCooR1R5cGUgKikgcHRyID09IEdTVF9UWVBFX0RBVEVfVElNRSkgewotICAgIHJldHVybiBfX2dzdF9kYXRlX3RpbWVfc2VyaWFsaXplICgoR3N0RGF0ZVRpbWUgKikgcHRyLCBUUlVFKTsKLSAgfQotICBpZiAoR1NUX0lTX0JVRkZFUiAocHRyKSkgewotICAgIHJldHVybiBnc3RfaW5mb19kZXNjcmliZV9idWZmZXIgKEdTVF9CVUZGRVJfQ0FTVCAocHRyKSk7Ci0gIH0KLSAgaWYgKEdTVF9JU19CVUZGRVJfTElTVCAocHRyKSkgewotICAgIHJldHVybiBnc3RfaW5mb19kZXNjcmliZV9idWZmZXJfbGlzdCAoR1NUX0JVRkZFUl9MSVNUX0NBU1QgKHB0cikpOwotICB9Ci0jaWZkZWYgVVNFX1BPSVNPTklORwotICBpZiAoKihndWludDMyICopIHB0ciA9PSAweGZmZmZmZmZmKSB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIjxwb2lzb25lZEAlcD4iLCBwdHIpOwotICB9Ci0jZW5kaWYKLSAgaWYgKEdTVF9JU19NRVNTQUdFIChvYmplY3QpKSB7Ci0gICAgcmV0dXJuIGdzdF9pbmZvX2Rlc2NyaWJlX21lc3NhZ2UgKEdTVF9NRVNTQUdFX0NBU1QgKG9iamVjdCkpOwotICB9Ci0gIGlmIChHU1RfSVNfUVVFUlkgKG9iamVjdCkpIHsKLSAgICByZXR1cm4gZ3N0X2luZm9fZGVzY3JpYmVfcXVlcnkgKEdTVF9RVUVSWV9DQVNUIChvYmplY3QpKTsKLSAgfQotICBpZiAoR1NUX0lTX0VWRU5UIChvYmplY3QpKSB7Ci0gICAgcmV0dXJuIGdzdF9pbmZvX2Rlc2NyaWJlX2V2ZW50IChHU1RfRVZFTlRfQ0FTVCAob2JqZWN0KSk7Ci0gIH0KLSAgaWYgKEdTVF9JU19DT05URVhUIChvYmplY3QpKSB7Ci0gICAgR3N0Q29udGV4dCAqY29udGV4dCA9IEdTVF9DT05URVhUX0NBU1QgKG9iamVjdCk7Ci0gICAgZ2NoYXIgKnMsICpyZXQ7Ci0gICAgY29uc3QgZ2NoYXIgKnR5cGU7Ci0gICAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgICB0eXBlID0gZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAoY29udGV4dCk7Ci0gICAgc3RydWN0dXJlID0gZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZSAoY29udGV4dCk7Ci0KLSAgICBzID0gZ3N0X2luZm9fc3RydWN0dXJlX3RvX3N0cmluZyAoc3RydWN0dXJlKTsKLQotICAgIHJldCA9IGdfc3RyZHVwX3ByaW50ZiAoImNvbnRleHQgJyVzJz0nJXMnIiwgdHlwZSwgcyk7Ci0gICAgZ19mcmVlIChzKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0gIGlmIChHU1RfSVNfUEFEIChvYmplY3QpICYmIEdTVF9PQkpFQ1RfTkFNRSAob2JqZWN0KSkgewotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCI8JXM6JXM+IiwgR1NUX0RFQlVHX1BBRF9OQU1FIChvYmplY3QpKTsKLSAgfQotICBpZiAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSAmJiBHU1RfT0JKRUNUX05BTUUgKG9iamVjdCkpIHsKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiPCVzPiIsIEdTVF9PQkpFQ1RfTkFNRSAob2JqZWN0KSk7Ci0gIH0KLSAgaWYgKEdfSVNfT0JKRUNUIChvYmplY3QpKSB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIjwlc0AlcD4iLCBHX09CSkVDVF9UWVBFX05BTUUgKG9iamVjdCksIG9iamVjdCk7Ci0gIH0KLQotICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiJXAiLCBwdHIpOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X2RlYnVnX3ByaW50X3NlZ21lbnQgKGdwb2ludGVyIHB0cikKLXsKLSAgR3N0U2VnbWVudCAqc2VnbWVudCA9IChHc3RTZWdtZW50ICopIHB0cjsKLQotICAvKiBuaWNlbHkgcHJpbnRlZCBzZWdtZW50ICovCi0gIGlmIChzZWdtZW50ID09IE5VTEwpIHsKLSAgICByZXR1cm4gZ19zdHJkdXAgKCIoTlVMTCkiKTsKLSAgfQotCi0gIHN3aXRjaCAoc2VnbWVudC0+Zm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfRk9STUFUX1VOREVGSU5FRDp7Ci0gICAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiVU5ERUZJTkVEIHNlZ21lbnQiKTsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6ewotICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInRpbWUgc2VnbWVudCBzdGFydD0lIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAiLCBvZmZzZXQ9JSIgR1NUX1RJTUVfRk9STUFUICIsIHN0b3A9JSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgIiwgcmF0ZT0lZiwgYXBwbGllZF9yYXRlPSVmIiAiLCBmbGFncz0weCUwMngsIHRpbWU9JSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgIiwgYmFzZT0lIiBHU1RfVElNRV9GT1JNQVQgIiwgcG9zaXRpb24gJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzZWdtZW50LT5zdGFydCksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC0+b2Zmc2V0KSwgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC0+c3RvcCksCi0gICAgICAgICAgc2VnbWVudC0+cmF0ZSwgc2VnbWVudC0+YXBwbGllZF9yYXRlLCAoZ3VpbnQpIHNlZ21lbnQtPmZsYWdzLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNlZ21lbnQtPnRpbWUpLCBHU1RfVElNRV9BUkdTIChzZWdtZW50LT5iYXNlKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LT5wb3NpdGlvbiksIEdTVF9USU1FX0FSR1MgKHNlZ21lbnQtPmR1cmF0aW9uKSk7Ci0gICAgfQotICAgIGRlZmF1bHQ6ewotICAgICAgY29uc3QgZ2NoYXIgKmZvcm1hdF9uYW1lOwotCi0gICAgICBmb3JtYXRfbmFtZSA9IGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNlZ21lbnQtPmZvcm1hdCk7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoZm9ybWF0X25hbWUgPT0gTlVMTCkpCi0gICAgICAgIGZvcm1hdF9uYW1lID0gIihVTktOT1dOIEZPUk1BVCkiOwotICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIiVzIHNlZ21lbnQgc3RhcnQ9JSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICAgIiwgb2Zmc2V0PSUiIEdfR0lOVDY0X0ZPUk1BVCAiLCBzdG9wPSUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICIsIHJhdGU9JWYsIGFwcGxpZWRfcmF0ZT0lZiIgIiwgZmxhZ3M9MHglMDJ4LCB0aW1lPSUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICIsIGJhc2U9JSIgR19HSU5UNjRfRk9STUFUICIsIHBvc2l0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICIsIGR1cmF0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVCwgZm9ybWF0X25hbWUsIHNlZ21lbnQtPnN0YXJ0LAotICAgICAgICAgIHNlZ21lbnQtPm9mZnNldCwgc2VnbWVudC0+c3RvcCwgc2VnbWVudC0+cmF0ZSwgc2VnbWVudC0+YXBwbGllZF9yYXRlLAotICAgICAgICAgIChndWludCkgc2VnbWVudC0+ZmxhZ3MsIHNlZ21lbnQtPnRpbWUsIHNlZ21lbnQtPmJhc2UsCi0gICAgICAgICAgc2VnbWVudC0+cG9zaXRpb24sIHNlZ21lbnQtPmR1cmF0aW9uKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIGNoYXIgKgotZ3N0X2luZm9fcHJpbnRmX3BvaW50ZXJfZXh0ZW5zaW9uX2Z1bmMgKGNvbnN0IGNoYXIgKmZvcm1hdCwgdm9pZCAqcHRyKQotewotICBjaGFyICpzID0gTlVMTDsKLQotICBpZiAoZm9ybWF0WzBdID09ICdwJyAmJiBmb3JtYXRbMV0gPT0gJ1xhJykgewotICAgIHN3aXRjaCAoZm9ybWF0WzJdKSB7Ci0gICAgICBjYXNlICdBJzogICAgICAgICAgICAgICAgLyogR1NUX1BUUl9GT1JNQVQgICAgICovCi0gICAgICAgIHMgPSBnc3RfZGVidWdfcHJpbnRfb2JqZWN0IChwdHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ0InOiAgICAgICAgICAgICAgICAvKiBHU1RfU0VHTUVOVF9GT1JNQVQgKi8KLSAgICAgICAgcyA9IGdzdF9kZWJ1Z19wcmludF9zZWdtZW50IChwdHIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ2EnOiAgICAgICAgICAgICAgICAvKiBHU1RfV1JBUFBFRF9QVFJfRk9STUFUICovCi0gICAgICAgIHMgPSBwcml2X2dzdF9zdHJpbmdfdGFrZV9hbmRfd3JhcCAoZ3N0X2RlYnVnX3ByaW50X29iamVjdCAocHRyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLyogbXVzdCBoYXZlIGJlZW4gY29tcGlsZWQgYWdhaW5zdCBhIG5ld2VyIHZlcnNpb24gd2l0aCBhbiBleHRlbnNpb24KLSAgICAgICAgICogd2UgZG9uJ3Qga25vd24gYWJvdXQgeWV0IC0ganVzdCBpZ25vcmUgYW5kIGZhbGxiYWNrIHRvICVwIGJlbG93ICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBpZiAocyA9PSBOVUxMKQotICAgIHMgPSBnX3N0cmR1cF9wcmludGYgKCIlcCIsIHB0cik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLS8qKgotICogZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yOgotICogQGNvbG9yaW5mbzogdGhlIGNvbG9yIGluZm8KLSAqCi0gKiBDb25zdHJ1Y3RzIGEgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGdldHRpbmcgdGhlIGRlc2lyZWQgY29sb3IgaW4gY29sb3IKLSAqIHRlcm1pbmFscy4KLSAqIFlvdSBuZWVkIHRvIGZyZWUgdGhlIHN0cmluZyBhZnRlciB1c2UuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpICh0eXBlIGdjaGFyKik6IGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbG9yCi0gKiAgICAgZGVmaW5pdGlvbgotICovCi1nY2hhciAqCi1nc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3IgKGd1aW50IGNvbG9yaW5mbykKLXsKLSAgR1N0cmluZyAqY29sb3I7Ci0KLSAgY29sb3IgPSBnX3N0cmluZ19uZXcgKCJcMDMzWzAwIik7Ci0KLSAgaWYgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19CT0xEKSB7Ci0gICAgZ19zdHJpbmdfYXBwZW5kX2xlbiAoY29sb3IsICI7MDEiLCAzKTsKLSAgfQotICBpZiAoY29sb3JpbmZvICYgR1NUX0RFQlVHX1VOREVSTElORSkgewotICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKGNvbG9yLCAiOzA0IiwgMyk7Ci0gIH0KLSAgaWYgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19GR19NQVNLKSB7Ci0gICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoY29sb3IsICI7MyUxZCIsIGNvbG9yaW5mbyAmIEdTVF9ERUJVR19GR19NQVNLKTsKLSAgfQotICBpZiAoY29sb3JpbmZvICYgR1NUX0RFQlVHX0JHX01BU0spIHsKLSAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChjb2xvciwgIjs0JTFkIiwKLSAgICAgICAgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19CR19NQVNLKSA+PiA0KTsKLSAgfQotICBnX3N0cmluZ19hcHBlbmRfYyAoY29sb3IsICdtJyk7Ci0KLSAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKGNvbG9yLCBGQUxTRSk7Ci19Ci0KLS8qKgotICogZ3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3I6Ci0gKiBAY29sb3JpbmZvOiB0aGUgY29sb3IgaW5mbwotICoKLSAqIENvbnN0cnVjdHMgYW4gaW50ZWdlciB0aGF0IGNhbiBiZSB1c2VkIGZvciBnZXR0aW5nIHRoZSBkZXNpcmVkIGNvbG9yIGluCi0gKiB3aW5kb3dzJyB0ZXJtaW5hbHMgKGNtZC5leGUpLiBBcyB0aGVyZSBpcyBubyBtZWFuIHRvIHVuZGVybGluZSwgd2Ugc2ltcGx5Ci0gKiBpZ25vcmUgdGhpcyBhdHRyaWJ1dGUuCi0gKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgb24gbm9uLXdpbmRvd3MgbWFjaGluZXMuCi0gKgotICogUmV0dXJuczogYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBjb2xvciBkZWZpbml0aW9uCi0gKi8KLWdpbnQKLWdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yIChndWludCBjb2xvcmluZm8pCi17Ci0gIGdpbnQgY29sb3IgPSAwOwotI2lmZGVmIEdfT1NfV0lOMzIKLSAgc3RhdGljIGNvbnN0IGd1Y2hhciBhbnNpX3RvX3dpbl9mZ1s4XSA9IHsKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxhY2sgICAqLwotICAgIEZPUkVHUk9VTkRfUkVELCAgICAgICAgICAgICAvKiByZWQgICAgICovCi0gICAgRk9SRUdST1VORF9HUkVFTiwgICAgICAgICAgIC8qIGdyZWVuICAgKi8KLSAgICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4sICAvKiB5ZWxsb3cgICovCi0gICAgRk9SRUdST1VORF9CTFVFLCAgICAgICAgICAgIC8qIGJsdWUgICAgKi8KLSAgICBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfQkxVRSwgICAvKiBtYWdlbnRhICovCi0gICAgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSwgLyogY3lhbiAgICAqLwotICAgIEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSAvKiB3aGl0ZSAgICovCi0gIH07Ci0gIHN0YXRpYyBjb25zdCBndWNoYXIgYW5zaV90b193aW5fYmdbOF0gPSB7Ci0gICAgMCwKLSAgICBCQUNLR1JPVU5EX1JFRCwKLSAgICBCQUNLR1JPVU5EX0dSRUVOLAotICAgIEJBQ0tHUk9VTkRfUkVEIHwgQkFDS0dST1VORF9HUkVFTiwKLSAgICBCQUNLR1JPVU5EX0JMVUUsCi0gICAgQkFDS0dST1VORF9SRUQgfCBCQUNLR1JPVU5EX0JMVUUsCi0gICAgQkFDS0dST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSwKLSAgICBCQUNLR1JPVU5EX1JFRCB8IEJBQ0tHUk9VTkRfR1JFRU4gfCBCQUNLR1JPVU5EX0JMVUUKLSAgfTsKLQotICAvKiB3ZSBkcmF3IGJsYWNrIGFzIHdoaXRlLCBhcyBjbWQuZXhlIGNhbiBvbmx5IGhhdmUgYmxhY2sgYmcgKi8KLSAgaWYgKChjb2xvcmluZm8gJiAoR1NUX0RFQlVHX0ZHX01BU0sgfCBHU1RfREVCVUdfQkdfTUFTSykpID09IDApIHsKLSAgICBjb2xvciA9IGFuc2lfdG9fd2luX2ZnWzddOwotICB9Ci0gIGlmIChjb2xvcmluZm8gJiBHU1RfREVCVUdfVU5ERVJMSU5FKSB7Ci0gICAgY29sb3IgfD0gQkFDS0dST1VORF9JTlRFTlNJVFk7Ci0gIH0KLSAgaWYgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19CT0xEKSB7Ci0gICAgY29sb3IgfD0gRk9SRUdST1VORF9JTlRFTlNJVFk7Ci0gIH0KLSAgaWYgKGNvbG9yaW5mbyAmIEdTVF9ERUJVR19GR19NQVNLKSB7Ci0gICAgY29sb3IgfD0gYW5zaV90b193aW5fZmdbY29sb3JpbmZvICYgR1NUX0RFQlVHX0ZHX01BU0tdOwotICB9Ci0gIGlmIChjb2xvcmluZm8gJiBHU1RfREVCVUdfQkdfTUFTSykgewotICAgIGNvbG9yIHw9IGFuc2lfdG9fd2luX2JnWyhjb2xvcmluZm8gJiBHU1RfREVCVUdfQkdfTUFTSykgPj4gNF07Ci0gIH0KLSNlbmRpZgotICByZXR1cm4gY29sb3I7Ci19Ci0KLS8qIHdpZHRoIG9mICVwIHZhcmllcyBkZXBlbmRpbmcgb24gYWN0dWFsIHZhbHVlIG9mIHBvaW50ZXIsIHdoaWNoIGNhbiBtYWtlCi0gKiBvdXRwdXQgdW5ldmVubHkgYWxpZ25lZCBpZiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBpbnZvbHZlZCwgaGVuY2UgdGhlICUxNHAKLSAqIChzaG91bGQgcmVhbGx5IGJlICUxOHAsIGJ1dCAlMTRwIHNlZW1zIGEgZ29vZCBjb21wcm9taXNlIGJldHdlZW4gdG9vIG1hbnkKLSAqIHdoaXRlIHNwYWNlcyBhbmQgbGlrZWx5IHVuYWxpZ25tZW50IG9uIG15IHN5c3RlbSkgKi8KLSNpZiBkZWZpbmVkIChHTElCX1NJWkVPRl9WT0lEX1ApICYmIEdMSUJfU0laRU9GX1ZPSURfUCA9PSA4Ci0jZGVmaW5lIFBUUl9GTVQgIiUxNHAiCi0jZWxzZQotI2RlZmluZSBQVFJfRk1UICIlMTBwIgotI2VuZGlmCi0jZGVmaW5lIFBJRF9GTVQgIiU1ZCIKLSNkZWZpbmUgQ0FUX0ZNVCAiJTIwcyAlczolZDolczolcyIKLQotI2lmZGVmIEdfT1NfV0lOMzIKLXN0YXRpYyBjb25zdCBndWNoYXIgbGV2ZWxjb2xvcm1hcF93MzJbR1NUX0xFVkVMX0NPVU5UXSA9IHsKLSAgLyogR1NUX0xFVkVMX05PTkUgKi8KLSAgRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFLAotICAvKiBHU1RfTEVWRUxfRVJST1IgKi8KLSAgRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0lOVEVOU0lUWSwKLSAgLyogR1NUX0xFVkVMX1dBUk5JTkcgKi8KLSAgRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9JTlRFTlNJVFksCi0gIC8qIEdTVF9MRVZFTF9JTkZPICovCi0gIEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0lOVEVOU0lUWSwKLSAgLyogR1NUX0xFVkVMX0RFQlVHICovCi0gIEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX0JMVUUsCi0gIC8qIEdTVF9MRVZFTF9MT0cgKi8KLSAgRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFLAotICAvKiBHU1RfTEVWRUxfRklYTUUgKi8KLSAgRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOLAotICAvKiBHU1RfTEVWRUxfVFJBQ0UgKi8KLSAgRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFLAotICAvKiBwbGFjZWhvbGRlciBmb3IgbG9nIGxldmVsIDggKi8KLSAgMCwKLSAgLyogR1NUX0xFVkVMX01FTURVTVAgKi8KLSAgRk9SRUdST1VORF9SRUQgfCBGT1JFR1JPVU5EX0dSRUVOIHwgRk9SRUdST1VORF9CTFVFCi19OwotCi1zdGF0aWMgY29uc3QgZ3VjaGFyIGF2YWlsYWJsZV9jb2xvcnNbXSA9IHsKLSAgRk9SRUdST1VORF9SRUQsIEZPUkVHUk9VTkRfR1JFRU4sIEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTiwKLSAgRk9SRUdST1VORF9CTFVFLCBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfQkxVRSwKLSAgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSwKLX07Ci0jZW5kaWYgLyogR19PU19XSU4zMiAqLwotc3RhdGljIGNvbnN0IGdjaGFyICpsZXZlbGNvbG9ybWFwW0dTVF9MRVZFTF9DT1VOVF0gPSB7Ci0gICJcMDMzWzM3bSIsICAgICAgICAgICAgICAgICAgIC8qIEdTVF9MRVZFTF9OT05FICovCi0gICJcMDMzWzMxOzAxbSIsICAgICAgICAgICAgICAgIC8qIEdTVF9MRVZFTF9FUlJPUiAqLwotICAiXDAzM1szMzswMW0iLCAgICAgICAgICAgICAgICAvKiBHU1RfTEVWRUxfV0FSTklORyAqLwotICAiXDAzM1szMjswMW0iLCAgICAgICAgICAgICAgICAvKiBHU1RfTEVWRUxfSU5GTyAqLwotICAiXDAzM1szNm0iLCAgICAgICAgICAgICAgICAgICAvKiBHU1RfTEVWRUxfREVCVUcgKi8KLSAgIlwwMzNbMzdtIiwgICAgICAgICAgICAgICAgICAgLyogR1NUX0xFVkVMX0xPRyAqLwotICAiXDAzM1szMzswMW0iLCAgICAgICAgICAgICAgICAvKiBHU1RfTEVWRUxfRklYTUUgKi8KLSAgIlwwMzNbMzdtIiwgICAgICAgICAgICAgICAgICAgLyogR1NUX0xFVkVMX1RSQUNFICovCi0gICJcMDMzWzM3bSIsICAgICAgICAgICAgICAgICAgIC8qIHBsYWNlaG9sZGVyIGZvciBsb2cgbGV2ZWwgOCAqLwotICAiXDAzM1szN20iICAgICAgICAgICAgICAgICAgICAvKiBHU1RfTEVWRUxfTUVNRFVNUCAqLwotfTsKLQotLyoqCi0gKiBnc3RfZGVidWdfbG9nX2RlZmF1bHQ6Ci0gKiBAY2F0ZWdvcnk6IGNhdGVnb3J5IHRvIGxvZwotICogQGxldmVsOiBsZXZlbCBvZiB0aGUgbWVzc2FnZQotICogQGZpbGU6IHRoZSBmaWxlIHRoYXQgZW1pdHRlZCB0aGUgbWVzc2FnZSwgdXN1YWxseSB0aGUgX19GSUxFX18gaWRlbnRpZmllcgotICogQGZ1bmN0aW9uOiB0aGUgZnVuY3Rpb24gdGhhdCBlbWl0dGVkIHRoZSBtZXNzYWdlCi0gKiBAbGluZTogdGhlIGxpbmUgZnJvbSB0aGF0IHRoZSBtZXNzYWdlIHdhcyBlbWl0dGVkLCB1c3VhbGx5IF9fTElORV9fCi0gKiBAbWVzc2FnZTogdGhlIGFjdHVhbCBtZXNzYWdlCi0gKiBAb2JqZWN0OiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiB0aGUgb2JqZWN0IHRoaXMgbWVzc2FnZSByZWxhdGVzIHRvLAotICogICAgIG9yICVOVUxMIGlmIG5vbmUKLSAqIEB1c2VyX2RhdGE6IHRoZSBGSUxFKiB0byBsb2cgdG8KLSAqCi0gKiBUaGUgZGVmYXVsdCBsb2dnaW5nIGhhbmRsZXIgdXNlZCBieSBHU3RyZWFtZXIuIExvZ2dpbmcgZnVuY3Rpb25zIGdldCBjYWxsZWQKLSAqIHdoZW5ldmVyIGEgbWFjcm8gbGlrZSBHU1RfREVCVUcgb3Igc2ltaWxhciBpcyB1c2VkLiBCeSBkZWZhdWx0IHRoaXMgZnVuY3Rpb24KLSAqIGlzIHNldHVwIHRvIG91dHB1dCB0aGUgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBpbmZvIHRvIHN0ZGVyciAob3IgdGhlIGxvZyBmaWxlCi0gKiBzcGVjaWZpZWQgdmlhIHRoZSBHU1RfREVCVUdfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZSkgYXMgcmVjZWl2ZWQgdmlhCi0gKiBAdXNlcl9kYXRhLgotICoKLSAqIFlvdSBjYW4gYWRkIG90aGVyIGhhbmRsZXJzIGJ5IHVzaW5nIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKCkuCi0gKiBBbmQgeW91IGNhbiByZW1vdmUgdGhpcyBoYW5kbGVyIGJ5IGNhbGxpbmcKLSAqIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk7Ci0gKi8KLXZvaWQKLWdzdF9kZWJ1Z19sb2dfZGVmYXVsdCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LCBHc3REZWJ1Z0xldmVsIGxldmVsLAotICAgIGNvbnN0IGdjaGFyICogZmlsZSwgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwgZ2ludCBsaW5lLAotICAgIEdPYmplY3QgKiBvYmplY3QsIEdzdERlYnVnTWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2ludCBwaWQ7Ci0gIEdzdENsb2NrVGltZSBlbGFwc2VkOwotICBnY2hhciAqb2JqID0gTlVMTDsKLSAgR3N0RGVidWdDb2xvck1vZGUgY29sb3JfbW9kZTsKLSAgRklMRSAqbG9nX2ZpbGUgPSB1c2VyX2RhdGEgPyB1c2VyX2RhdGEgOiBzdGRlcnI7Ci0gIGdjaGFyIGM7Ci0KLSAgLyogX19GSUxFX18gbWlnaHQgYmUgYSBmaWxlIG5hbWUgb3IgYW4gYWJzb2x1dGUgcGF0aCBvciBhCi0gICAqIHJlbGF0aXZlIHBhdGgsIGlycmVzcGVjdGl2ZSBvZiB0aGUgZXhhY3QgY29tcGlsZXIgdXNlZCwKLSAgICogaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIHNob3J0ZW4gaXQgdG8gdGhlIGZpbGVuYW1lIGZvcgotICAgKiByZWFkYWJpbGl0eS4gKi8KLSAgYyA9IGZpbGVbMF07Ci0gIGlmIChjID09ICcuJyB8fCBjID09ICcvJyB8fCBjID09ICdcXCcgfHwgKGMgIT0gJ1wwJyAmJiBmaWxlWzFdID09ICc6JykpIHsKLSAgICBmaWxlID0gZ3N0X3BhdGhfYmFzZW5hbWUgKGZpbGUpOwotICB9Ci0KLSAgcGlkID0gZ2V0cGlkICgpOwotICBjb2xvcl9tb2RlID0gZ3N0X2RlYnVnX2dldF9jb2xvcl9tb2RlICgpOwotCi0gIGlmIChvYmplY3QpIHsKLSAgICBvYmogPSBnc3RfZGVidWdfcHJpbnRfb2JqZWN0IChvYmplY3QpOwotICB9IGVsc2UgewotICAgIG9iaiA9IChnY2hhciAqKSAiIjsKLSAgfQotCi0gIGVsYXBzZWQgPSBHU1RfQ0xPQ0tfRElGRiAoX3ByaXZfZ3N0X3N0YXJ0X3RpbWUsIGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCkpOwotCi0gIGlmIChjb2xvcl9tb2RlICE9IEdTVF9ERUJVR19DT0xPUl9NT0RFX09GRikgewotI2lmZGVmIEdfT1NfV0lOMzIKLSAgICAvKiBXZSB0YWtlIGEgbG9jayB0byBrZWVwIGNvbG9ycyBhbmQgY29udGVudCB0b2dldGhlci4KLSAgICAgKiBNYXliZSB0aGVyZSBpcyBhIGJldHRlciB3YXkgYnV0IGZvciBub3cgdGhpcyB3aWxsIGRvIHRoZSByaWdodAotICAgICAqIHRoaW5nLiAqLwotICAgIHN0YXRpYyBHTXV0ZXggd2luX3ByaW50X211dGV4OwotICAgIGdfbXV0ZXhfbG9jayAoJndpbl9wcmludF9tdXRleCk7Ci0gICAgaWYgKGNvbG9yX21vZGUgPT0gR1NUX0RFQlVHX0NPTE9SX01PREVfVU5JWCkgewotI2VuZGlmCi0gICAgICAvKiBjb2xvcnMsIG5vbi13aW5kb3dzICovCi0gICAgICBnY2hhciAqY29sb3IgPSBOVUxMOwotICAgICAgY29uc3QgZ2NoYXIgKmNsZWFyOwotICAgICAgZ2NoYXIgcGlkY29sb3JbMTBdOwotICAgICAgY29uc3QgZ2NoYXIgKmxldmVsY29sb3I7Ci0KLSAgICAgIGNvbG9yID0gZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yCi0gICAgICAgICAgKGNhdGVnb3J5KSk7Ci0gICAgICBjbGVhciA9ICJcMDMzWzAwbSI7Ci0gICAgICBnX3NwcmludGYgKHBpZGNvbG9yLCAiXDAzM1szJTFkbSIsIHBpZCAlIDYgKyAzMSk7Ci0gICAgICBsZXZlbGNvbG9yID0gbGV2ZWxjb2xvcm1hcFtsZXZlbF07Ci0KLSNkZWZpbmUgUFJJTlRfRk1UICIgJXMiUElEX0ZNVCIlcyAiUFRSX0ZNVCIgJXMlcyVzICVzIkNBVF9GTVQiJXMgJXNcbiIKLSAgICAgIGZwcmludGYgKGxvZ19maWxlLCAiJSIgR1NUX1RJTUVfRk9STUFUIFBSSU5UX0ZNVCwgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCksCi0gICAgICAgICAgcGlkY29sb3IsIHBpZCwgY2xlYXIsIGdfdGhyZWFkX3NlbGYgKCksIGxldmVsY29sb3IsCi0gICAgICAgICAgZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lIChsZXZlbCksIGNsZWFyLCBjb2xvciwKLSAgICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUgKGNhdGVnb3J5KSwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIG9iaiwKLSAgICAgICAgICBjbGVhciwgZ3N0X2RlYnVnX21lc3NhZ2VfZ2V0IChtZXNzYWdlKSk7Ci0gICAgICBmZmx1c2ggKGxvZ19maWxlKTsKLSN1bmRlZiBQUklOVF9GTVQKLSAgICAgIGdfZnJlZSAoY29sb3IpOwotI2lmZGVmIEdfT1NfV0lOMzIKLSAgICB9IGVsc2UgewotICAgICAgLyogY29sb3JzLCB3aW5kb3dzLiAqLwotICAgICAgY29uc3QgZ2ludCBjbGVhciA9IEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRTsKLSNkZWZpbmUgU0VUX0NPTE9SKGMpIEdfU1RNVF9TVEFSVCB7IFwKLSAgaWYgKGxvZ19maWxlID09IHN0ZGVycikgXAotICAgIFNldENvbnNvbGVUZXh0QXR0cmlidXRlIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpLCAoYykpOyBcCi0gIH0gR19TVE1UX0VORAotICAgICAgLyogdGltZXN0YW1wICovCi0gICAgICBmcHJpbnRmIChsb2dfZmlsZSwgIiUiIEdTVF9USU1FX0ZPUk1BVCAiICIsIEdTVF9USU1FX0FSR1MgKGVsYXBzZWQpKTsKLSAgICAgIGZmbHVzaCAobG9nX2ZpbGUpOwotICAgICAgLyogcGlkICovCi0gICAgICBTRVRfQ09MT1IgKGF2YWlsYWJsZV9jb2xvcnNbcGlkICUgR19OX0VMRU1FTlRTIChhdmFpbGFibGVfY29sb3JzKV0pOwotICAgICAgZnByaW50ZiAobG9nX2ZpbGUsIFBJRF9GTVQsIHBpZCk7Ci0gICAgICBmZmx1c2ggKGxvZ19maWxlKTsKLSAgICAgIC8qIHRocmVhZCAqLwotICAgICAgU0VUX0NPTE9SIChjbGVhcik7Ci0gICAgICBmcHJpbnRmIChsb2dfZmlsZSwgIiAiIFBUUl9GTVQgIiAiLCBnX3RocmVhZF9zZWxmICgpKTsKLSAgICAgIGZmbHVzaCAobG9nX2ZpbGUpOwotICAgICAgLyogbGV2ZWwgKi8KLSAgICAgIFNFVF9DT0xPUiAobGV2ZWxjb2xvcm1hcF93MzJbbGV2ZWxdKTsKLSAgICAgIGZwcmludGYgKGxvZ19maWxlLCAiJXMgIiwgZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lIChsZXZlbCkpOwotICAgICAgZmZsdXNoIChsb2dfZmlsZSk7Ci0gICAgICAvKiBjYXRlZ29yeSAqLwotICAgICAgU0VUX0NPTE9SIChnc3RfZGVidWdfY29uc3RydWN0X3dpbl9jb2xvciAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9jb2xvcgotICAgICAgICAgICAgICAoY2F0ZWdvcnkpKSk7Ci0gICAgICBmcHJpbnRmIChsb2dfZmlsZSwgQ0FUX0ZNVCwgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lIChjYXRlZ29yeSksCi0gICAgICAgICAgZmlsZSwgbGluZSwgZnVuY3Rpb24sIG9iaik7Ci0gICAgICBmZmx1c2ggKGxvZ19maWxlKTsKLSAgICAgIC8qIG1lc3NhZ2UgKi8KLSAgICAgIFNFVF9DT0xPUiAoY2xlYXIpOwotICAgICAgZnByaW50ZiAobG9nX2ZpbGUsICIgJXNcbiIsIGdzdF9kZWJ1Z19tZXNzYWdlX2dldCAobWVzc2FnZSkpOwotICAgICAgZmZsdXNoIChsb2dfZmlsZSk7Ci0gICAgfQotICAgIGdfbXV0ZXhfdW5sb2NrICgmd2luX3ByaW50X211dGV4KTsKLSNlbmRpZgotICB9IGVsc2UgewotICAgIC8qIG5vIGNvbG9yLCBhbGwgcGxhdGZvcm1zICovCi0jZGVmaW5lIFBSSU5UX0ZNVCAiICJQSURfRk1UIiAiUFRSX0ZNVCIgJXMgIkNBVF9GTVQiICVzXG4iCi0gICAgZnByaW50ZiAobG9nX2ZpbGUsICIlIiBHU1RfVElNRV9GT1JNQVQgUFJJTlRfRk1ULCBHU1RfVElNRV9BUkdTIChlbGFwc2VkKSwKLSAgICAgICAgcGlkLCBnX3RocmVhZF9zZWxmICgpLCBnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUgKGxldmVsKSwKLSAgICAgICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lIChjYXRlZ29yeSksIGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBvYmosCi0gICAgICAgIGdzdF9kZWJ1Z19tZXNzYWdlX2dldCAobWVzc2FnZSkpOwotICAgIGZmbHVzaCAobG9nX2ZpbGUpOwotI3VuZGVmIFBSSU5UX0ZNVAotICB9Ci0KLSAgaWYgKG9iamVjdCAhPSBOVUxMKQotICAgIGdfZnJlZSAob2JqKTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWU6Ci0gKiBAbGV2ZWw6IHRoZSBsZXZlbCB0byBnZXQgdGhlIG5hbWUgZm9yCi0gKgotICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkZWJ1Z2dpbmcgbGV2ZWwKLSAqCi0gKiBSZXR1cm5zOiB0aGUgbmFtZQotICovCi1jb25zdCBnY2hhciAqCi1nc3RfZGVidWdfbGV2ZWxfZ2V0X25hbWUgKEdzdERlYnVnTGV2ZWwgbGV2ZWwpCi17Ci0gIHN3aXRjaCAobGV2ZWwpIHsKLSAgICBjYXNlIEdTVF9MRVZFTF9OT05FOgotICAgICAgcmV0dXJuICIiOwotICAgIGNhc2UgR1NUX0xFVkVMX0VSUk9SOgotICAgICAgcmV0dXJuICJFUlJPUiAgIjsKLSAgICBjYXNlIEdTVF9MRVZFTF9XQVJOSU5HOgotICAgICAgcmV0dXJuICJXQVJOICAgIjsKLSAgICBjYXNlIEdTVF9MRVZFTF9JTkZPOgotICAgICAgcmV0dXJuICJJTkZPICAgIjsKLSAgICBjYXNlIEdTVF9MRVZFTF9ERUJVRzoKLSAgICAgIHJldHVybiAiREVCVUcgICI7Ci0gICAgY2FzZSBHU1RfTEVWRUxfTE9HOgotICAgICAgcmV0dXJuICJMT0cgICAgIjsKLSAgICBjYXNlIEdTVF9MRVZFTF9GSVhNRToKLSAgICAgIHJldHVybiAiRklYTUUgICI7Ci0gICAgY2FzZSBHU1RfTEVWRUxfVFJBQ0U6Ci0gICAgICByZXR1cm4gIlRSQUNFICAiOwotICAgIGNhc2UgR1NUX0xFVkVMX01FTURVTVA6Ci0gICAgICByZXR1cm4gIk1FTURVTVAiOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX3dhcm5pbmcgKCJpbnZhbGlkIGxldmVsIHNwZWNpZmllZCBmb3IgZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lIik7Ci0gICAgICByZXR1cm4gIiI7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbjoKLSAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gdG8gdXNlCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKLSAqIEBub3RpZnk6IGNhbGxlZCB3aGVuIEB1c2VyX2RhdGEgaXMgbm90IHVzZWQgYW55bW9yZQotICoKLSAqIEFkZHMgdGhlIGxvZ2dpbmcgZnVuY3Rpb24gdG8gdGhlIGxpc3Qgb2YgbG9nZ2luZyBmdW5jdGlvbnMuCi0gKiBCZSBzdXJlIHRvIHVzZSAjR19HTlVDX05PX0lOU1RSVU1FTlQgb24gdGhhdCBmdW5jdGlvbiwgaXQgaXMgbmVlZGVkLgotICovCi12b2lkCi1nc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbiAoR3N0TG9nRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKLXsKLSAgTG9nRnVuY0VudHJ5ICplbnRyeTsKLSAgR1NMaXN0ICpsaXN0OwotCi0gIGlmIChmdW5jID09IE5VTEwpCi0gICAgZnVuYyA9IGdzdF9kZWJ1Z19sb2dfZGVmYXVsdDsKLQotICBlbnRyeSA9IGdfc2xpY2VfbmV3IChMb2dGdW5jRW50cnkpOwotICBlbnRyeS0+ZnVuYyA9IGZ1bmM7Ci0gIGVudHJ5LT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIGVudHJ5LT5ub3RpZnkgPSBub3RpZnk7Ci0gIC8qIEZJWE1FOiB3ZSBsZWFrIHRoZSBvbGQgbGlzdCBoZXJlIC0gb3RoZXIgdGhyZWFkcyBtaWdodCBhY2Nlc3MgaXQgcmlnaHQgbm93Ci0gICAqIGluIGdzdF9kZWJ1Z19sb2d2LiBBbm90aGVyIHNvbHV0aW9uIGlzIHRvIGxvY2sgdGhlIG11dGV4IGluIGdzdF9kZWJ1Z19sb2d2LAotICAgKiBidXQgdGhhdCBpcyB3YWFheSBjb3N0bHkuCi0gICAqIEl0J2QgcHJvYmFibHkgYmUgY2xldmVyIHRvIHVzZSBzb21lIGtpbmQgb2YgUkNVIGhlcmUsIGJ1dCBJIGRvbid0IGtub3cKLSAgICogYW55dGhpbmcgYWJvdXQgdGhhdC4KLSAgICovCi0gIGdfbXV0ZXhfbG9jayAoJl9fbG9nX2Z1bmNfbXV0ZXgpOwotICBsaXN0ID0gZ19zbGlzdF9jb3B5IChfX2xvZ19mdW5jdGlvbnMpOwotICBfX2xvZ19mdW5jdGlvbnMgPSBnX3NsaXN0X3ByZXBlbmQgKGxpc3QsIGVudHJ5KTsKLSAgZ19tdXRleF91bmxvY2sgKCZfX2xvZ19mdW5jX211dGV4KTsKLQotICBpZiAoZ3N0X2lzX2luaXRpYWxpemVkICgpKQotICAgIEdTVF9ERUJVRyAoInByZXBlbmRlZCBsb2cgZnVuY3Rpb24gJXAgKHVzZXIgZGF0YSAlcCkgdG8gbG9nIGZ1bmN0aW9ucyIsCi0gICAgICAgIGZ1bmMsIHVzZXJfZGF0YSk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfZGVidWdfY29tcGFyZV9sb2dfZnVuY3Rpb25fYnlfZnVuYyAoZ2NvbnN0cG9pbnRlciBlbnRyeSwgZ2NvbnN0cG9pbnRlciBmdW5jKQotewotICBncG9pbnRlciBlbnRyeWZ1bmMgPSAoZ3BvaW50ZXIpICgoKExvZ0Z1bmNFbnRyeSAqKSBlbnRyeSktPmZ1bmMpOwotCi0gIHJldHVybiAoZW50cnlmdW5jIDwgZnVuYykgPyAtMSA6IChlbnRyeWZ1bmMgPiBmdW5jKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X2RlYnVnX2NvbXBhcmVfbG9nX2Z1bmN0aW9uX2J5X2RhdGEgKGdjb25zdHBvaW50ZXIgZW50cnksIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgZ3BvaW50ZXIgZW50cnlkYXRhID0gKChMb2dGdW5jRW50cnkgKikgZW50cnkpLT51c2VyX2RhdGE7Ci0KLSAgcmV0dXJuIChlbnRyeWRhdGEgPCBkYXRhKSA/IC0xIDogKGVudHJ5ZGF0YSA+IGRhdGEpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X2RlYnVnX3JlbW92ZV93aXRoX2NvbXBhcmVfZnVuYyAoR0NvbXBhcmVGdW5jIGZ1bmMsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdTTGlzdCAqZm91bmQ7Ci0gIEdTTGlzdCAqbmV3LCAqY2xlYW51cCA9IE5VTEw7Ci0gIGd1aW50IHJlbW92YWxzID0gMDsKLQotICBnX211dGV4X2xvY2sgKCZfX2xvZ19mdW5jX211dGV4KTsKLSAgbmV3ID0gX19sb2dfZnVuY3Rpb25zOwotICBjbGVhbnVwID0gTlVMTDsKLSAgd2hpbGUgKChmb3VuZCA9IGdfc2xpc3RfZmluZF9jdXN0b20gKG5ldywgZGF0YSwgZnVuYykpKSB7Ci0gICAgaWYgKG5ldyA9PSBfX2xvZ19mdW5jdGlvbnMpIHsKLSAgICAgIC8qIG1ha2UgYSBjb3B5IHdoZW4gd2UgaGF2ZSB0aGUgZmlyc3QgaGl0LCBzbyB0aGF0IHdlIG1vZGlmeSB0aGUgY29weSBhbmQKLSAgICAgICAqIG1ha2UgdGhhdCB0aGUgbmV3IGxpc3QgbGF0ZXIgKi8KLSAgICAgIG5ldyA9IGdfc2xpc3RfY29weSAobmV3KTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBjbGVhbnVwID0gZ19zbGlzdF9wcmVwZW5kIChjbGVhbnVwLCBmb3VuZC0+ZGF0YSk7Ci0gICAgbmV3ID0gZ19zbGlzdF9kZWxldGVfbGluayAobmV3LCBmb3VuZCk7Ci0gICAgcmVtb3ZhbHMrKzsKLSAgfQotICAvKiBGSVhNRTogV2UgbGVhayB0aGUgb2xkIGxpc3QgaGVyZS4gU2VlIF9hZGRfbG9nX2Z1bmN0aW9uIGZvciB3aHkuICovCi0gIF9fbG9nX2Z1bmN0aW9ucyA9IG5ldzsKLSAgZ19tdXRleF91bmxvY2sgKCZfX2xvZ19mdW5jX211dGV4KTsKLQotICB3aGlsZSAoY2xlYW51cCkgewotICAgIExvZ0Z1bmNFbnRyeSAqZW50cnkgPSBjbGVhbnVwLT5kYXRhOwotCi0gICAgaWYgKGVudHJ5LT5ub3RpZnkpCi0gICAgICBlbnRyeS0+bm90aWZ5IChlbnRyeS0+dXNlcl9kYXRhKTsKLQotICAgIGdfc2xpY2VfZnJlZSAoTG9nRnVuY0VudHJ5LCBlbnRyeSk7Ci0gICAgY2xlYW51cCA9IGdfc2xpc3RfZGVsZXRlX2xpbmsgKGNsZWFudXAsIGNsZWFudXApOwotICB9Ci0gIHJldHVybiByZW1vdmFsczsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbjoKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCkgKGFsbG93LW5vbmUpOiB0aGUgbG9nIGZ1bmN0aW9uIHRvIHJlbW92ZSwgb3IgJU5VTEwgdG8KLSAqICAgICByZW1vdmUgdGhlIGRlZmF1bHQgbG9nIGZ1bmN0aW9uCi0gKgotICogUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBpbnN0YW5jZXMgb2YgdGhlIGdpdmVuIGxvZ2dpbmcgZnVuY3Rpb25zLgotICoKLSAqIFJldHVybnM6IEhvdyBtYW55IGluc3RhbmNlcyBvZiB0aGUgZnVuY3Rpb24gd2VyZSByZW1vdmVkCi0gKi8KLWd1aW50Ci1nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoR3N0TG9nRnVuY3Rpb24gZnVuYykKLXsKLSAgZ3VpbnQgcmVtb3ZhbHM7Ci0KLSAgaWYgKGZ1bmMgPT0gTlVMTCkKLSAgICBmdW5jID0gZ3N0X2RlYnVnX2xvZ19kZWZhdWx0OwotCi0gIHJlbW92YWxzID0KLSAgICAgIGdzdF9kZWJ1Z19yZW1vdmVfd2l0aF9jb21wYXJlX2Z1bmMKLSAgICAgIChnc3RfZGVidWdfY29tcGFyZV9sb2dfZnVuY3Rpb25fYnlfZnVuYywgKGdwb2ludGVyKSBmdW5jKTsKLQotICBpZiAoZ3N0X2lzX2luaXRpYWxpemVkICgpKSB7Ci0gICAgR1NUX0RFQlVHICgicmVtb3ZlZCBsb2cgZnVuY3Rpb24gJXAgJWQgdGltZXMgZnJvbSBsb2cgZnVuY3Rpb24gbGlzdCIsIGZ1bmMsCi0gICAgICAgIHJlbW92YWxzKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBJZiB0aGUgZGVmYXVsdCBsb2cgZnVuY3Rpb24gaXMgcmVtb3ZlZCBiZWZvcmUgZ3N0X2luaXQoKSB3YXMgY2FsbGVkLAotICAgICAqIHNldCBhIGZsYWcgc28gd2UgZG9uJ3QgYWRkIGl0IGluIGdzdF9pbml0KCkgbGF0ZXIgKi8KLSAgICBpZiAoZnVuYyA9PSBnc3RfZGVidWdfbG9nX2RlZmF1bHQpIHsKLSAgICAgIGFkZF9kZWZhdWx0X2xvZ19mdW5jID0gRkFMU0U7Ci0gICAgICArK3JlbW92YWxzOwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZW1vdmFsczsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhOgotICogQGRhdGE6IHVzZXIgZGF0YSBvZiB0aGUgbG9nIGZ1bmN0aW9uIHRvIHJlbW92ZQotICoKLSAqIFJlbW92ZXMgYWxsIHJlZ2lzdGVyZWQgaW5zdGFuY2VzIG9mIGxvZyBmdW5jdGlvbnMgd2l0aCB0aGUgZ2l2ZW4gdXNlciBkYXRhLgotICoKLSAqIFJldHVybnM6IEhvdyBtYW55IGluc3RhbmNlcyBvZiB0aGUgZnVuY3Rpb24gd2VyZSByZW1vdmVkCi0gKi8KLWd1aW50Ci1nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhIChncG9pbnRlciBkYXRhKQotewotICBndWludCByZW1vdmFsczsKLQotICByZW1vdmFscyA9Ci0gICAgICBnc3RfZGVidWdfcmVtb3ZlX3dpdGhfY29tcGFyZV9mdW5jCi0gICAgICAoZ3N0X2RlYnVnX2NvbXBhcmVfbG9nX2Z1bmN0aW9uX2J5X2RhdGEsIGRhdGEpOwotCi0gIGlmIChnc3RfaXNfaW5pdGlhbGl6ZWQgKCkpCi0gICAgR1NUX0RFQlVHCi0gICAgICAgICgicmVtb3ZlZCAlZCBsb2cgZnVuY3Rpb25zIHdpdGggdXNlciBkYXRhICVwIGZyb20gbG9nIGZ1bmN0aW9uIGxpc3QiLAotICAgICAgICByZW1vdmFscywgZGF0YSk7Ci0KLSAgcmV0dXJuIHJlbW92YWxzOwotfQotCi0vKioKLSAqIGdzdF9kZWJ1Z19zZXRfY29sb3JlZDoKLSAqIEBjb2xvcmVkOiBXaGV0aGVyIHRvIHVzZSBjb2xvcmVkIG91dHB1dCBvciBub3QKLSAqCi0gKiBTZXRzIG9yIHVuc2V0cyB0aGUgdXNlIG9mIGNvbG91cmVkIGRlYnVnZ2luZyBvdXRwdXQuCi0gKiBTYW1lIGFzIGdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZSAoKSB3aXRoIHRoZSBhcmd1bWVudCBiZWluZwotICogYmVpbmcgR1NUX0RFQlVHX0NPTE9SX01PREVfT04gb3IgR1NUX0RFQlVHX0NPTE9SX01PREVfT0ZGLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBiZWZvcmUgZ3N0X2luaXQoKS4KLSAqLwotdm9pZAotZ3N0X2RlYnVnX3NldF9jb2xvcmVkIChnYm9vbGVhbiBjb2xvcmVkKQotewotICBHc3REZWJ1Z0NvbG9yTW9kZSBuZXdfbW9kZTsKLSAgbmV3X21vZGUgPSBjb2xvcmVkID8gR1NUX0RFQlVHX0NPTE9SX01PREVfT04gOiBHU1RfREVCVUdfQ09MT1JfTU9ERV9PRkY7Ci0gIGdfYXRvbWljX2ludF9zZXQgKCZfX3VzZV9jb2xvciwgKGdpbnQpIG5ld19tb2RlKTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfc2V0X2NvbG9yX21vZGU6Ci0gKiBAbW9kZTogVGhlIGNvbG9yaW5nIG1vZGUgZm9yIGRlYnVnIG91dHB1dC4gU2VlIEBHc3REZWJ1Z0NvbG9yTW9kZS4KLSAqCi0gKiBDaGFuZ2VzIHRoZSBjb2xvcmluZyBtb2RlIGZvciBkZWJ1ZyBvdXRwdXQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJlZm9yZSBnc3RfaW5pdCgpLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X2RlYnVnX3NldF9jb2xvcl9tb2RlIChHc3REZWJ1Z0NvbG9yTW9kZSBtb2RlKQotewotICBnX2F0b21pY19pbnRfc2V0ICgmX191c2VfY29sb3IsIG1vZGUpOwotfQotCi0vKioKLSAqIGdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZzoKLSAqIEBtb2RlOiBUaGUgY29sb3JpbmcgbW9kZSBmb3IgZGVidWcgb3V0cHV0LiBPbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAqICJvbiIsICJhdXRvIiwgIm9mZiIsICJkaXNhYmxlIiwgInVuaXgiLgotICoKLSAqIENoYW5nZXMgdGhlIGNvbG9yaW5nIG1vZGUgZm9yIGRlYnVnIG91dHB1dC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYmVmb3JlIGdzdF9pbml0KCkuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfZGVidWdfc2V0X2NvbG9yX21vZGVfZnJvbV9zdHJpbmcgKGNvbnN0IGdjaGFyICogbW9kZSkKLXsKLSAgaWYgKChzdHJjbXAgKG1vZGUsICJvbiIpID09IDApIHx8IChzdHJjbXAgKG1vZGUsICJhdXRvIikgPT0gMCkpCi0gICAgZ3N0X2RlYnVnX3NldF9jb2xvcl9tb2RlIChHU1RfREVCVUdfQ09MT1JfTU9ERV9PTik7Ci0gIGVsc2UgaWYgKChzdHJjbXAgKG1vZGUsICJvZmYiKSA9PSAwKSB8fCAoc3RyY21wIChtb2RlLCAiZGlzYWJsZSIpID09IDApKQotICAgIGdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZSAoR1NUX0RFQlVHX0NPTE9SX01PREVfT0ZGKTsKLSAgZWxzZSBpZiAoc3RyY21wIChtb2RlLCAidW5peCIpID09IDApCi0gICAgZ3N0X2RlYnVnX3NldF9jb2xvcl9tb2RlIChHU1RfREVCVUdfQ09MT1JfTU9ERV9VTklYKTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfaXNfY29sb3JlZDoKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGRlYnVnZ2luZyBvdXRwdXQgc2hvdWxkIGJlIGNvbG9yZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIHRoZSBkZWJ1ZyBvdXRwdXQgc2hvdWxkIGJlIGNvbG9yZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfZGVidWdfaXNfY29sb3JlZCAodm9pZCkKLXsKLSAgR3N0RGVidWdDb2xvck1vZGUgbW9kZSA9IGdfYXRvbWljX2ludF9nZXQgKCZfX3VzZV9jb2xvcik7Ci0gIHJldHVybiAobW9kZSA9PSBHU1RfREVCVUdfQ09MT1JfTU9ERV9VTklYIHx8IG1vZGUgPT0gR1NUX0RFQlVHX0NPTE9SX01PREVfT04pOwotfQotCi0vKioKLSAqIGdzdF9kZWJ1Z19nZXRfY29sb3JfbW9kZToKLSAqCi0gKiBDaGFuZ2VzIHRoZSBjb2xvcmluZyBtb2RlIGZvciBkZWJ1ZyBvdXRwdXQuCi0gKgotICogUmV0dXJuczogc2VlIEBHc3REZWJ1Z0NvbG9yTW9kZSBmb3IgcG9zc2libGUgdmFsdWVzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotR3N0RGVidWdDb2xvck1vZGUKLWdzdF9kZWJ1Z19nZXRfY29sb3JfbW9kZSAodm9pZCkKLXsKLSAgcmV0dXJuIGdfYXRvbWljX2ludF9nZXQgKCZfX3VzZV9jb2xvcik7Ci19Ci0KLS8qKgotICogZ3N0X2RlYnVnX3NldF9hY3RpdmU6Ci0gKiBAYWN0aXZlOiBXaGV0aGVyIHRvIHVzZSBkZWJ1Z2dpbmcgb3V0cHV0IG9yIG5vdAotICoKLSAqIElmIGFjdGl2YXRlZCwgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZSBkZWJ1Z2dpbmcKLSAqIGhhbmRsZXJzLgotICogSXQgbWFrZXMgc2Vuc2UgdG8gZGVhY3RpdmF0ZSBpdCBmb3Igc3BlZWQgaXNzdWVzLgotICogPG5vdGU+PHBhcmE+VGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkc2FmZS4gSXQgbWFrZXMgc2Vuc2UgdG8gb25seSBjYWxsIGl0Ci0gKiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uPC9wYXJhPjwvbm90ZT4KLSAqLwotdm9pZAotZ3N0X2RlYnVnX3NldF9hY3RpdmUgKGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgX2dzdF9kZWJ1Z19lbmFibGVkID0gYWN0aXZlOwotICBpZiAoYWN0aXZlKQotICAgIF9nc3RfZGVidWdfbWluID0gR1NUX0xFVkVMX0NPVU5UOwotICBlbHNlCi0gICAgX2dzdF9kZWJ1Z19taW4gPSBHU1RfTEVWRUxfTk9ORTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfaXNfYWN0aXZlOgotICoKLSAqIENoZWNrcyBpZiBkZWJ1Z2dpbmcgb3V0cHV0IGlzIGFjdGl2YXRlZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgZGVidWdnaW5nIGlzIGFjdGl2YXRlZAotICovCi1nYm9vbGVhbgotZ3N0X2RlYnVnX2lzX2FjdGl2ZSAodm9pZCkKLXsKLSAgcmV0dXJuIF9nc3RfZGVidWdfZW5hYmxlZDsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkOgotICogQGxldmVsOiBsZXZlbCB0byBzZXQKLSAqCi0gKiBTZXRzIHRoZSBkZWZhdWx0IHRocmVzaG9sZCB0byB0aGUgZ2l2ZW4gbGV2ZWwgYW5kIHVwZGF0ZXMgYWxsIGNhdGVnb3JpZXMgdG8KLSAqIHVzZSB0aGlzIHRocmVzaG9sZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYmVmb3JlIGdzdF9pbml0KCkuCi0gKi8KLXZvaWQKLWdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdzdERlYnVnTGV2ZWwgbGV2ZWwpCi17Ci0gIGdfYXRvbWljX2ludF9zZXQgKCZfX2RlZmF1bHRfbGV2ZWwsIGxldmVsKTsKLSAgZ3N0X2RlYnVnX3Jlc2V0X2FsbF90aHJlc2hvbGRzICgpOwotfQotCi0vKioKLSAqIGdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQ6Ci0gKgotICogUmV0dXJucyB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgdGhhdCBpcyB1c2VkIGZvciBuZXcgY2F0ZWdvcmllcy4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgZGVmYXVsdCB0aHJlc2hvbGQgbGV2ZWwKLSAqLwotR3N0RGVidWdMZXZlbAotZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZCAodm9pZCkKLXsKLSAgcmV0dXJuIChHc3REZWJ1Z0xldmVsKSBnX2F0b21pY19pbnRfZ2V0ICgmX19kZWZhdWx0X2xldmVsKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWJ1Z19yZXNldF90aHJlc2hvbGQgKGdwb2ludGVyIGNhdGVnb3J5LCBncG9pbnRlciB1bnVzZWQpCi17Ci0gIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IChHc3REZWJ1Z0NhdGVnb3J5ICopIGNhdGVnb3J5OwotICBHU0xpc3QgKndhbGs7Ci0KLSAgZ19tdXRleF9sb2NrICgmX19sZXZlbF9uYW1lX211dGV4KTsKLSAgd2FsayA9IF9fbGV2ZWxfbmFtZTsKLSAgd2hpbGUgKHdhbGspIHsKLSAgICBMZXZlbE5hbWVFbnRyeSAqZW50cnkgPSB3YWxrLT5kYXRhOwotCi0gICAgd2FsayA9IGdfc2xpc3RfbmV4dCAod2Fsayk7Ci0gICAgaWYgKGdfcGF0dGVybl9tYXRjaF9zdHJpbmcgKGVudHJ5LT5wYXQsIGNhdC0+bmFtZSkpIHsKLSAgICAgIGlmIChnc3RfaXNfaW5pdGlhbGl6ZWQgKCkpCi0gICAgICAgIEdTVF9MT0cgKCJjYXRlZ29yeSAlcyBtYXRjaGVzIHBhdHRlcm4gJXAgLSBnZXRzIHNldCB0byBsZXZlbCAlZCIsCi0gICAgICAgICAgICBjYXQtPm5hbWUsIGVudHJ5LT5wYXQsIGVudHJ5LT5sZXZlbCk7Ci0gICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCAoY2F0LCBlbnRyeS0+bGV2ZWwpOwotICAgICAgZ290byBleGl0OwotICAgIH0KLSAgfQotICBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCAoY2F0LCBnc3RfZGVidWdfZ2V0X2RlZmF1bHRfdGhyZXNob2xkICgpKTsKLQotZXhpdDoKLSAgZ19tdXRleF91bmxvY2sgKCZfX2xldmVsX25hbWVfbXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlYnVnX3Jlc2V0X2FsbF90aHJlc2hvbGRzICh2b2lkKQotewotICBnX211dGV4X2xvY2sgKCZfX2NhdF9tdXRleCk7Ci0gIGdfc2xpc3RfZm9yZWFjaCAoX19jYXRlZ29yaWVzLCBnc3RfZGVidWdfcmVzZXRfdGhyZXNob2xkLCBOVUxMKTsKLSAgZ19tdXRleF91bmxvY2sgKCZfX2NhdF9tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mb3JfZWFjaF90aHJlc2hvbGRfYnlfZW50cnkgKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RGVidWdDYXRlZ29yeSAqY2F0ID0gKEdzdERlYnVnQ2F0ZWdvcnkgKikgZGF0YTsKLSAgTGV2ZWxOYW1lRW50cnkgKmVudHJ5ID0gKExldmVsTmFtZUVudHJ5ICopIHVzZXJfZGF0YTsKLQotICBpZiAoZ19wYXR0ZXJuX21hdGNoX3N0cmluZyAoZW50cnktPnBhdCwgY2F0LT5uYW1lKSkgewotICAgIGlmIChnc3RfaXNfaW5pdGlhbGl6ZWQgKCkpCi0gICAgICBHU1RfTE9HICgiY2F0ZWdvcnkgJXMgbWF0Y2hlcyBwYXR0ZXJuICVwIC0gZ2V0cyBzZXQgdG8gbGV2ZWwgJWQiLAotICAgICAgICAgIGNhdC0+bmFtZSwgZW50cnktPnBhdCwgZW50cnktPmxldmVsKTsKLSAgICBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCAoY2F0LCBlbnRyeS0+bGV2ZWwpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWU6Ci0gKiBAbmFtZTogbmFtZSBvZiB0aGUgY2F0ZWdvcmllcyB0byBzZXQKLSAqIEBsZXZlbDogbGV2ZWwgdG8gc2V0IHRoZW0gdG8KLSAqCi0gKiBTZXRzIGFsbCBjYXRlZ29yaWVzIHdoaWNoIG1hdGNoIHRoZSBnaXZlbiBnbG9iIHN0eWxlIHBhdHRlcm4gdG8gdGhlIGdpdmVuCi0gKiBsZXZlbC4KLSAqLwotdm9pZAotZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUgKGNvbnN0IGdjaGFyICogbmFtZSwgR3N0RGVidWdMZXZlbCBsZXZlbCkKLXsKLSAgR1BhdHRlcm5TcGVjICpwYXQ7Ci0gIExldmVsTmFtZUVudHJ5ICplbnRyeTsKLQotICBnX3JldHVybl9pZl9mYWlsIChuYW1lICE9IE5VTEwpOwotCi0gIHBhdCA9IGdfcGF0dGVybl9zcGVjX25ldyAobmFtZSk7Ci0gIGVudHJ5ID0gZ19zbGljZV9uZXcgKExldmVsTmFtZUVudHJ5KTsKLSAgZW50cnktPnBhdCA9IHBhdDsKLSAgZW50cnktPmxldmVsID0gbGV2ZWw7Ci0gIGdfbXV0ZXhfbG9jayAoJl9fbGV2ZWxfbmFtZV9tdXRleCk7Ci0gIF9fbGV2ZWxfbmFtZSA9IGdfc2xpc3RfcHJlcGVuZCAoX19sZXZlbF9uYW1lLCBlbnRyeSk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmX19sZXZlbF9uYW1lX211dGV4KTsKLSAgZ19tdXRleF9sb2NrICgmX19jYXRfbXV0ZXgpOwotICBnX3NsaXN0X2ZvcmVhY2ggKF9fY2F0ZWdvcmllcywgZm9yX2VhY2hfdGhyZXNob2xkX2J5X2VudHJ5LCBlbnRyeSk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmX19jYXRfbXV0ZXgpOwotfQotCi0vKioKLSAqIGdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWU6Ci0gKiBAbmFtZTogbmFtZSBvZiB0aGUgY2F0ZWdvcmllcyB0byBzZXQKLSAqCi0gKiBSZXNldHMgYWxsIGNhdGVnb3JpZXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBiYWNrIHRvIHRoZSBkZWZhdWx0IGxldmVsLgotICovCi12b2lkCi1nc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lIChjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdTTGlzdCAqd2FsazsKLSAgR1BhdHRlcm5TcGVjICpwYXQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAobmFtZSAhPSBOVUxMKTsKLQotICBwYXQgPSBnX3BhdHRlcm5fc3BlY19uZXcgKG5hbWUpOwotICBnX211dGV4X2xvY2sgKCZfX2xldmVsX25hbWVfbXV0ZXgpOwotICB3YWxrID0gX19sZXZlbF9uYW1lOwotICAvKiBpbXByb3ZlIHRoaXMgaWYgeW91IHdhbnQsIGl0J3MgbWlnaHR5IHNsb3cgKi8KLSAgd2hpbGUgKHdhbGspIHsKLSAgICBMZXZlbE5hbWVFbnRyeSAqZW50cnkgPSB3YWxrLT5kYXRhOwotCi0gICAgaWYgKGdfcGF0dGVybl9zcGVjX2VxdWFsIChlbnRyeS0+cGF0LCBwYXQpKSB7Ci0gICAgICBfX2xldmVsX25hbWUgPSBnX3NsaXN0X3JlbW92ZV9saW5rIChfX2xldmVsX25hbWUsIHdhbGspOwotICAgICAgZ19wYXR0ZXJuX3NwZWNfZnJlZSAoZW50cnktPnBhdCk7Ci0gICAgICBnX3NsaWNlX2ZyZWUgKExldmVsTmFtZUVudHJ5LCBlbnRyeSk7Ci0gICAgICBnX3NsaXN0X2ZyZWVfMSAod2Fsayk7Ci0gICAgICB3YWxrID0gX19sZXZlbF9uYW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKTsKLSAgICB9Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZfX2xldmVsX25hbWVfbXV0ZXgpOwotICBnX3BhdHRlcm5fc3BlY19mcmVlIChwYXQpOwotICBnc3RfZGVidWdfcmVzZXRfYWxsX3RocmVzaG9sZHMgKCk7Ci19Ci0KLUdzdERlYnVnQ2F0ZWdvcnkgKgotX2dzdF9kZWJ1Z19jYXRlZ29yeV9uZXcgKGNvbnN0IGdjaGFyICogbmFtZSwgZ3VpbnQgY29sb3IsCi0gICAgY29uc3QgZ2NoYXIgKiBkZXNjcmlwdGlvbikKLXsKLSAgR3N0RGVidWdDYXRlZ29yeSAqY2F0LCAqY2F0Zm91bmQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgY2F0ID0gZ19zbGljZV9uZXcgKEdzdERlYnVnQ2F0ZWdvcnkpOwotICBjYXQtPm5hbWUgPSBnX3N0cmR1cCAobmFtZSk7Ci0gIGNhdC0+Y29sb3IgPSBjb2xvcjsKLSAgaWYgKGRlc2NyaXB0aW9uICE9IE5VTEwpIHsKLSAgICBjYXQtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAgKGRlc2NyaXB0aW9uKTsKLSAgfSBlbHNlIHsKLSAgICBjYXQtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAgKCJubyBkZXNjcmlwdGlvbiIpOwotICB9Ci0gIGdfYXRvbWljX2ludF9zZXQgKCZjYXQtPnRocmVzaG9sZCwgMCk7Ci0gIGdzdF9kZWJ1Z19yZXNldF90aHJlc2hvbGQgKGNhdCwgTlVMTCk7Ci0KLSAgLyogYWRkIHRvIGNhdGVnb3J5IGxpc3QgKi8KLSAgZ19tdXRleF9sb2NrICgmX19jYXRfbXV0ZXgpOwotICBjYXRmb3VuZCA9IF9nc3RfZGVidWdfZ2V0X2NhdGVnb3J5X2xvY2tlZCAobmFtZSk7Ci0gIGlmIChjYXRmb3VuZCkgewotICAgIGdfZnJlZSAoKGdwb2ludGVyKSBjYXQtPm5hbWUpOwotICAgIGdfZnJlZSAoKGdwb2ludGVyKSBjYXQtPmRlc2NyaXB0aW9uKTsKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdERlYnVnQ2F0ZWdvcnksIGNhdCk7Ci0gICAgY2F0ID0gY2F0Zm91bmQ7Ci0gIH0gZWxzZSB7Ci0gICAgX19jYXRlZ29yaWVzID0gZ19zbGlzdF9wcmVwZW5kIChfX2NhdGVnb3JpZXMsIGNhdCk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZfX2NhdF9tdXRleCk7Ci0KLSAgcmV0dXJuIGNhdDsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfY2F0ZWdvcnlfZnJlZToKLSAqIEBjYXRlZ29yeTogI0dzdERlYnVnQ2F0ZWdvcnkgdG8gZnJlZS4KLSAqCi0gKiBSZW1vdmVzIGFuZCBmcmVlcyB0aGUgY2F0ZWdvcnkgYW5kIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KLSAqLwotdm9pZAotZ3N0X2RlYnVnX2NhdGVnb3J5X2ZyZWUgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSkKLXsKLSAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIC8qIHJlbW92ZSBmcm9tIGNhdGVnb3J5IGxpc3QgKi8KLSAgZ19tdXRleF9sb2NrICgmX19jYXRfbXV0ZXgpOwotICBfX2NhdGVnb3JpZXMgPSBnX3NsaXN0X3JlbW92ZSAoX19jYXRlZ29yaWVzLCBjYXRlZ29yeSk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmX19jYXRfbXV0ZXgpOwotCi0gIGdfZnJlZSAoKGdwb2ludGVyKSBjYXRlZ29yeS0+bmFtZSk7Ci0gIGdfZnJlZSAoKGdwb2ludGVyKSBjYXRlZ29yeS0+ZGVzY3JpcHRpb24pOwotICBnX3NsaWNlX2ZyZWUgKEdzdERlYnVnQ2F0ZWdvcnksIGNhdGVnb3J5KTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZDoKLSAqIEBjYXRlZ29yeTogYSAjR3N0RGVidWdDYXRlZ29yeSB0byBzZXQgdGhyZXNob2xkIG9mLgotICogQGxldmVsOiB0aGUgI0dzdERlYnVnTGV2ZWwgdGhyZXNob2xkIHRvIHNldC4KLSAqCi0gKiBTZXRzIHRoZSB0aHJlc2hvbGQgb2YgdGhlIGNhdGVnb3J5IHRvIHRoZSBnaXZlbiBsZXZlbC4gRGVidWcgaW5mb3JtYXRpb24gd2lsbAotICogb25seSBiZSBvdXRwdXQgaWYgdGhlIHRocmVzaG9sZCBpcyBsb3dlciBvciBlcXVhbCB0byB0aGUgbGV2ZWwgb2YgdGhlCi0gKiBkZWJ1Z2dpbmcgbWVzc2FnZS4KLSAqIDxub3RlPjxwYXJhPgotICogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGluIHByb2R1Y3Rpb24gY29kZSwgYmVjYXVzZSBvdGhlciBmdW5jdGlvbnMgbWF5Ci0gKiBjaGFuZ2UgdGhlIHRocmVzaG9sZCBvZiBjYXRlZ29yaWVzIGFzIHNpZGUgZWZmZWN0LiBJdCBpcyBob3dldmVyIGEgbmljZQotICogZnVuY3Rpb24gdG8gdXNlIHdoZW4gZGVidWdnaW5nIChldmVuIGZyb20gZ2RiKS4KLSAqIDwvcGFyYT48L25vdGU+Ci0gKi8KLXZvaWQKLWdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksCi0gICAgR3N0RGVidWdMZXZlbCBsZXZlbCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY2F0ZWdvcnkgIT0gTlVMTCk7Ci0KLSAgaWYgKGxldmVsID4gX2dzdF9kZWJ1Z19taW4pIHsKLSAgICBfZ3N0X2RlYnVnX2VuYWJsZWQgPSBUUlVFOwotICAgIF9nc3RfZGVidWdfbWluID0gbGV2ZWw7Ci0gIH0KLQotICBnX2F0b21pY19pbnRfc2V0ICgmY2F0ZWdvcnktPnRocmVzaG9sZCwgbGV2ZWwpOwotfQotCi0vKioKLSAqIGdzdF9kZWJ1Z19jYXRlZ29yeV9yZXNldF90aHJlc2hvbGQ6Ci0gKiBAY2F0ZWdvcnk6IGEgI0dzdERlYnVnQ2F0ZWdvcnkgdG8gcmVzZXQgdGhyZXNob2xkIG9mLgotICoKLSAqIFJlc2V0cyB0aGUgdGhyZXNob2xkIG9mIHRoZSBjYXRlZ29yeSB0byB0aGUgZGVmYXVsdCBsZXZlbC4gRGVidWcgaW5mb3JtYXRpb24KLSAqIHdpbGwgb25seSBiZSBvdXRwdXQgaWYgdGhlIHRocmVzaG9sZCBpcyBsb3dlciBvciBlcXVhbCB0byB0aGUgbGV2ZWwgb2YgdGhlCi0gKiBkZWJ1Z2dpbmcgbWVzc2FnZS4KLSAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNldCB0aGUgdGhyZXNob2xkIGJhY2sgdG8gd2hlcmUgaXQgd2FzIGFmdGVyIHVzaW5nCi0gKiBnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZCgpLgotICovCi12b2lkCi1nc3RfZGVidWdfY2F0ZWdvcnlfcmVzZXRfdGhyZXNob2xkIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCi17Ci0gIGdzdF9kZWJ1Z19yZXNldF90aHJlc2hvbGQgKGNhdGVnb3J5LCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZDoKLSAqIEBjYXRlZ29yeTogYSAjR3N0RGVidWdDYXRlZ29yeSB0byBnZXQgdGhyZXNob2xkIG9mLgotICoKLSAqIFJldHVybnMgdGhlIHRocmVzaG9sZCBvZiBhICNHc3REZWJ1Z0NhdGVnb3J5LgotICoKLSAqIFJldHVybnM6IHRoZSAjR3N0RGVidWdMZXZlbCB0aGF0IGlzIHVzZWQgYXMgdGhyZXNob2xkLgotICovCi1Hc3REZWJ1Z0xldmVsCi1nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQotewotICByZXR1cm4gKEdzdERlYnVnTGV2ZWwpIGdfYXRvbWljX2ludF9nZXQgKCZjYXRlZ29yeS0+dGhyZXNob2xkKTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWU6Ci0gKiBAY2F0ZWdvcnk6IGEgI0dzdERlYnVnQ2F0ZWdvcnkgdG8gZ2V0IG5hbWUgb2YuCi0gKgotICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGRlYnVnIGNhdGVnb3J5LgotICoKLSAqIFJldHVybnM6IHRoZSBuYW1lIG9mIHRoZSBjYXRlZ29yeS4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCi17Ci0gIHJldHVybiBjYXRlZ29yeS0+bmFtZTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yOgotICogQGNhdGVnb3J5OiBhICNHc3REZWJ1Z0NhdGVnb3J5IHRvIGdldCB0aGUgY29sb3Igb2YuCi0gKgotICogUmV0dXJucyB0aGUgY29sb3Igb2YgYSBkZWJ1ZyBjYXRlZ29yeSB1c2VkIHdoZW4gcHJpbnRpbmcgb3V0cHV0IGluIHRoaXMKLSAqIGNhdGVnb3J5LgotICoKLSAqIFJldHVybnM6IHRoZSBjb2xvciBvZiB0aGUgY2F0ZWdvcnkuCi0gKi8KLWd1aW50Ci1nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCi17Ci0gIHJldHVybiBjYXRlZ29yeS0+Y29sb3I7Ci19Ci0KLS8qKgotICogZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbjoKLSAqIEBjYXRlZ29yeTogYSAjR3N0RGVidWdDYXRlZ29yeSB0byBnZXQgdGhlIGRlc2NyaXB0aW9uIG9mLgotICoKLSAqIFJldHVybnMgdGhlIGRlc2NyaXB0aW9uIG9mIGEgZGVidWcgY2F0ZWdvcnkuCi0gKgotICogUmV0dXJuczogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeS4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9kZXNjcmlwdGlvbiAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQotewotICByZXR1cm4gY2F0ZWdvcnktPmRlc2NyaXB0aW9uOwotfQotCi0vKioKLSAqIGdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXM6Ci0gKgotICogUmV0dXJucyBhIHNuYXBzaG90IG9mIGEgYWxsIGNhdGVnb3JpZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIHVzZSAuIFRoaXMgbGlzdAotICogbWF5IGNoYW5nZSBhbnl0aW1lLgotICogVGhlIGNhbGxlciBoYXMgdG8gZnJlZSB0aGUgbGlzdCBhZnRlciB1c2UuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGNvbnRhaW5lcikgKGVsZW1lbnQtdHlwZSBHc3QuRGVidWdDYXRlZ29yeSk6IHRoZSBsaXN0IG9mCi0gKiAgICAgZGVidWcgY2F0ZWdvcmllcwotICovCi1HU0xpc3QgKgotZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllcyAodm9pZCkKLXsKLSAgR1NMaXN0ICpyZXQ7Ci0KLSAgZ19tdXRleF9sb2NrICgmX19jYXRfbXV0ZXgpOwotICByZXQgPSBnX3NsaXN0X2NvcHkgKF9fY2F0ZWdvcmllcyk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmX19jYXRfbXV0ZXgpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3REZWJ1Z0NhdGVnb3J5ICoKLV9nc3RfZGVidWdfZ2V0X2NhdGVnb3J5X2xvY2tlZCAoY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3REZWJ1Z0NhdGVnb3J5ICpyZXQgPSBOVUxMOwotICBHU0xpc3QgKm5vZGU7Ci0KLSAgZm9yIChub2RlID0gX19jYXRlZ29yaWVzOyBub2RlOyBub2RlID0gZ19zbGlzdF9uZXh0IChub2RlKSkgewotICAgIHJldCA9IChHc3REZWJ1Z0NhdGVnb3J5ICopIG5vZGUtPmRhdGE7Ci0gICAgaWYgKCFzdHJjbXAgKG5hbWUsIHJldC0+bmFtZSkpIHsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1Hc3REZWJ1Z0NhdGVnb3J5ICoKLV9nc3RfZGVidWdfZ2V0X2NhdGVnb3J5IChjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdzdERlYnVnQ2F0ZWdvcnkgKnJldDsKLQotICBnX211dGV4X2xvY2sgKCZfX2NhdF9tdXRleCk7Ci0gIHJldCA9IF9nc3RfZGVidWdfZ2V0X2NhdGVnb3J5X2xvY2tlZCAobmFtZSk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmX19jYXRfbXV0ZXgpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGFyc2VfZGVidWdfY2F0ZWdvcnkgKGdjaGFyICogc3RyLCBjb25zdCBnY2hhciAqKiBjYXRlZ29yeSkKLXsKLSAgaWYgKCFzdHIpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIHdvcmtzIGluIHBsYWNlICovCi0gIGdfc3Ryc3RyaXAgKHN0cik7Ci0KLSAgaWYgKHN0clswXSAhPSAnXDAnKSB7Ci0gICAgKmNhdGVnb3J5ID0gc3RyOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBhcnNlX2RlYnVnX2xldmVsIChnY2hhciAqIHN0ciwgR3N0RGVidWdMZXZlbCAqIGxldmVsKQotewotICBpZiAoIXN0cikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogd29ya3MgaW4gcGxhY2UgKi8KLSAgZ19zdHJzdHJpcCAoc3RyKTsKLQotICBpZiAoZ19hc2NpaV9pc2RpZ2l0IChzdHJbMF0pKSB7Ci0gICAgdW5zaWduZWQgbG9uZyBsOwotICAgIGNoYXIgKmVuZHB0cjsKLSAgICBsID0gc3RydG91bCAoc3RyLCAmZW5kcHRyLCAxMCk7Ci0gICAgaWYgKGVuZHB0ciA+IHN0ciAmJiBlbmRwdHJbMF0gPT0gMCkgewotICAgICAgKmxldmVsID0gKEdzdERlYnVnTGV2ZWwpIGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChzdHIsICJFUlJPUiIpID09IDApIHsKLSAgICAqbGV2ZWwgPSBHU1RfTEVWRUxfRVJST1I7Ci0gIH0gZWxzZSBpZiAoc3RybmNtcCAoc3RyLCAiV0FSTiIsIDQpID09IDApIHsKLSAgICAqbGV2ZWwgPSBHU1RfTEVWRUxfV0FSTklORzsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKHN0ciwgIkZJWE1FIikgPT0gMCkgewotICAgICpsZXZlbCA9IEdTVF9MRVZFTF9GSVhNRTsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKHN0ciwgIklORk8iKSA9PSAwKSB7Ci0gICAgKmxldmVsID0gR1NUX0xFVkVMX0lORk87Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChzdHIsICJERUJVRyIpID09IDApIHsKLSAgICAqbGV2ZWwgPSBHU1RfTEVWRUxfREVCVUc7Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChzdHIsICJMT0ciKSA9PSAwKSB7Ci0gICAgKmxldmVsID0gR1NUX0xFVkVMX0xPRzsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKHN0ciwgIlRSQUNFIikgPT0gMCkgewotICAgICpsZXZlbCA9IEdTVF9MRVZFTF9UUkFDRTsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKHN0ciwgIk1FTURVTVAiKSA9PSAwKSB7Ci0gICAgKmxldmVsID0gR1NUX0xFVkVMX01FTURVTVA7Ci0gIH0gZWxzZQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZzoKLSAqIEBsaXN0OiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiAiY2F0ZWdvcnk6bGV2ZWwiIHBhaXJzIHRvIGJlIHVzZWQKLSAqICAgICBhcyBkZWJ1ZyBsb2dnaW5nIGxldmVscwotICogQHJlc2V0OiAlVFJVRSB0byBjbGVhciBhbGwgcHJldmlvdXNseS1zZXQgZGVidWcgbGV2ZWxzIGJlZm9yZSBzZXR0aW5nCi0gKiAgICAgbmV3IHRocmVzaG9sZHMKLSAqICVGQUxTRSBpZiBhZGRpbmcgdGhlIHRocmVzaG9sZCBkZXNjcmliZWQgYnkgQGxpc3QgdG8gdGhlIG9uZSBhbHJlYWR5IHNldC4KLSAqCi0gKiBTZXRzIHRoZSBkZWJ1ZyBsb2dnaW5nIHdhbnRlZCBpbiB0aGUgc2FtZSBmb3JtIGFzIHdpdGggdGhlIEdTVF9ERUJVRwotICogZW52aXJvbm1lbnQgdmFyaWFibGUuIFlvdSBjYW4gdXNlIHdpbGRjYXJkcyBzdWNoIGFzICcqJywgYnV0IG5vdGUgdGhhdAotICogdGhlIG9yZGVyIG1hdHRlcnMgd2hlbiB5b3UgdXNlIHdpbGQgY2FyZHMsIGUuZy4gImZvb3NyYzo2LCpzcmM6MywqOjIiIHNldHMKLSAqIGV2ZXJ5dGhpbmcgdG8gbG9nIGxldmVsIDIuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBsaXN0LCBnYm9vbGVhbiByZXNldCkKLXsKLSAgZ2NoYXIgKipzcGxpdDsKLSAgZ2NoYXIgKip3YWxrOwotCi0gIGdfYXNzZXJ0IChsaXN0KTsKLQotICBpZiAocmVzZXQpCi0gICAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoMCk7Ci0KLSAgc3BsaXQgPSBnX3N0cnNwbGl0IChsaXN0LCAiLCIsIDApOwotCi0gIGZvciAod2FsayA9IHNwbGl0OyAqd2Fsazsgd2FsaysrKSB7Ci0gICAgaWYgKHN0cmNociAoKndhbGssICc6JykpIHsKLSAgICAgIGdjaGFyICoqdmFsdWVzID0gZ19zdHJzcGxpdCAoKndhbGssICI6IiwgMik7Ci0KLSAgICAgIGlmICh2YWx1ZXNbMF0gJiYgdmFsdWVzWzFdKSB7Ci0gICAgICAgIEdzdERlYnVnTGV2ZWwgbGV2ZWw7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpjYXRlZ29yeTsKLQotICAgICAgICBpZiAocGFyc2VfZGVidWdfY2F0ZWdvcnkgKHZhbHVlc1swXSwgJmNhdGVnb3J5KQotICAgICAgICAgICAgJiYgcGFyc2VfZGVidWdfbGV2ZWwgKHZhbHVlc1sxXSwgJmxldmVsKSkKLSAgICAgICAgICBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoY2F0ZWdvcnksIGxldmVsKTsKLSAgICAgIH0KLQotICAgICAgZ19zdHJmcmVldiAodmFsdWVzKTsKLSAgICB9IGVsc2UgewotICAgICAgR3N0RGVidWdMZXZlbCBsZXZlbDsKLQotICAgICAgaWYgKHBhcnNlX2RlYnVnX2xldmVsICgqd2FsaywgJmxldmVsKSkKLSAgICAgICAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAobGV2ZWwpOwotICAgIH0KLSAgfQotCi0gIGdfc3RyZnJlZXYgKHNwbGl0KTsKLX0KLQotLyoqKiBGVU5DVElPTiBQT0lOVEVSUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIEdIYXNoVGFibGUgKl9fZ3N0X2Z1bmN0aW9uX3BvaW50ZXJzOyAgICAgLyogTlVMTCAqLwotc3RhdGljIEdNdXRleCBfX2RiZ19mdW5jdGlvbnNfbXV0ZXg7Ci0KLS8qIFRoaXMgZnVuY3Rpb24gTVVTVCBOT1QgcmV0dXJuIE5VTEwgKi8KLWNvbnN0IGdjaGFyICoKLV9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIgKEdzdERlYnVnRnVuY1B0ciBmdW5jKQotewotICBnY2hhciAqcHRybmFtZTsKLQotI2lmZGVmIEhBVkVfRExBRERSCi0gIERsX2luZm8gZGxfaW5mbzsKLSNlbmRpZgotCi0gIGlmIChHX1VOTElLRUxZIChmdW5jID09IE5VTEwpKQotICAgIHJldHVybiAiKE5VTEwpIjsKLQotICBnX211dGV4X2xvY2sgKCZfX2RiZ19mdW5jdGlvbnNfbXV0ZXgpOwotICBpZiAoR19MSUtFTFkgKF9fZ3N0X2Z1bmN0aW9uX3BvaW50ZXJzKSkgewotICAgIHB0cm5hbWUgPSBnX2hhc2hfdGFibGVfbG9va3VwIChfX2dzdF9mdW5jdGlvbl9wb2ludGVycywgKGdwb2ludGVyKSBmdW5jKTsKLSAgICBnX211dGV4X3VubG9jayAoJl9fZGJnX2Z1bmN0aW9uc19tdXRleCk7Ci0gICAgaWYgKEdfTElLRUxZIChwdHJuYW1lKSkKLSAgICAgIHJldHVybiBwdHJuYW1lOwotICB9IGVsc2UgewotICAgIGdfbXV0ZXhfdW5sb2NrICgmX19kYmdfZnVuY3Rpb25zX211dGV4KTsKLSAgfQotICAvKiB3ZSBuZWVkIHRvIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSBmb3IgdGhpcyBvbmUgc28gd2UgZG9uJ3QgbGVhawotICAgKiB0aGUgbmFtZSAqLwotI2lmZGVmIEhBVkVfRExBRERSCi0gIGlmIChkbGFkZHIgKChncG9pbnRlcikgZnVuYywgJmRsX2luZm8pICYmIGRsX2luZm8uZGxpX3NuYW1lKSB7Ci0gICAgZ2NoYXIgKm5hbWUgPSBnX3N0cmR1cCAoZGxfaW5mby5kbGlfc25hbWUpOwotCi0gICAgX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyIChmdW5jLCBuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLSAgfSBlbHNlCi0jZW5kaWYKLSAgewotICAgIGdjaGFyICpuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXAiLCAoZ3BvaW50ZXIpIGZ1bmMpOwotCi0gICAgX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyIChmdW5jLCBuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKLSAgfQotfQotCi12b2lkCi1fZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIgKEdzdERlYnVnRnVuY1B0ciBmdW5jLCBjb25zdCBnY2hhciAqIHB0cm5hbWUpCi17Ci0gIGdwb2ludGVyIHB0ciA9IChncG9pbnRlcikgZnVuYzsKLQotICBnX211dGV4X2xvY2sgKCZfX2RiZ19mdW5jdGlvbnNfbXV0ZXgpOwotCi0gIGlmICghX19nc3RfZnVuY3Rpb25fcG9pbnRlcnMpCi0gICAgX19nc3RfZnVuY3Rpb25fcG9pbnRlcnMgPSBnX2hhc2hfdGFibGVfbmV3IChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCk7Ci0gIGlmICghZ19oYXNoX3RhYmxlX2xvb2t1cCAoX19nc3RfZnVuY3Rpb25fcG9pbnRlcnMsIHB0cikpCi0gICAgZ19oYXNoX3RhYmxlX2luc2VydCAoX19nc3RfZnVuY3Rpb25fcG9pbnRlcnMsIHB0ciwgKGdwb2ludGVyKSBwdHJuYW1lKTsKLQotICBnX211dGV4X3VubG9jayAoJl9fZGJnX2Z1bmN0aW9uc19tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5mb19kdW1wX21lbV9saW5lIChnY2hhciAqIGxpbmVidWYsIGdzaXplIGxpbmVidWZfc2l6ZSwKLSAgICBjb25zdCBndWludDggKiBtZW0sIGdzaXplIG1lbV9vZmZzZXQsIGdzaXplIG1lbV9zaXplKQotewotICBnY2hhciBoZXhzdHJbNTBdLCBhc2NzdHJbMThdLCBkaWdpdHN0cls0XTsKLQotICBpZiAobWVtX3NpemUgPiAxNikKLSAgICBtZW1fc2l6ZSA9IDE2OwotCi0gIGhleHN0clswXSA9ICdcMCc7Ci0gIGFzY3N0clswXSA9ICdcMCc7Ci0KLSAgaWYgKG1lbSAhPSBOVUxMKSB7Ci0gICAgZ3VpbnQgaSA9IDA7Ci0KLSAgICBtZW0gKz0gbWVtX29mZnNldDsKLSAgICB3aGlsZSAoaSA8IG1lbV9zaXplKSB7Ci0gICAgICBhc2NzdHJbaV0gPSAoZ19hc2NpaV9pc3ByaW50IChtZW1baV0pKSA/IG1lbVtpXSA6ICcuJzsKLSAgICAgIGdfc25wcmludGYgKGRpZ2l0c3RyLCBzaXplb2YgKGRpZ2l0c3RyKSwgIiUwMnggIiwgbWVtW2ldKTsKLSAgICAgIGdfc3RybGNhdCAoaGV4c3RyLCBkaWdpdHN0ciwgc2l6ZW9mIChoZXhzdHIpKTsKLSAgICAgICsraTsKLSAgICB9Ci0gICAgYXNjc3RyW2ldID0gJ1wwJzsKLSAgfQotCi0gIGdfc25wcmludGYgKGxpbmVidWYsIGxpbmVidWZfc2l6ZSwgIiUwOHg6ICUtNDguNDhzICUtMTYuMTZzIiwKLSAgICAgIChndWludCkgbWVtX29mZnNldCwgaGV4c3RyLCBhc2NzdHIpOwotfQotCi12b2lkCi1fZ3N0X2RlYnVnX2R1bXBfbWVtIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBnY2hhciAqIGZpbGUsCi0gICAgY29uc3QgZ2NoYXIgKiBmdW5jLCBnaW50IGxpbmUsIEdPYmplY3QgKiBvYmosIGNvbnN0IGdjaGFyICogbXNnLAotICAgIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IGxlbmd0aCkKLXsKLSAgZ3VpbnQgb2ZmID0gMDsKLQotICBnc3RfZGVidWdfbG9nICgoY2F0KSwgR1NUX0xFVkVMX01FTURVTVAsIGZpbGUsIGZ1bmMsIGxpbmUsIG9iaiwgIi0tLS0tLS0tIgotICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQotICBpZiAobXNnICE9IE5VTEwgJiYgKm1zZyAhPSAnXDAnKSB7Ci0gICAgZ3N0X2RlYnVnX2xvZyAoKGNhdCksIEdTVF9MRVZFTF9NRU1EVU1QLCBmaWxlLCBmdW5jLCBsaW5lLCBvYmosICIlcyIsIG1zZyk7Ci0gIH0KLQotICB3aGlsZSAob2ZmIDwgbGVuZ3RoKSB7Ci0gICAgZ2NoYXIgYnVmWzEyOF07Ci0KLSAgICAvKiBnc3RfaW5mb19kdW1wX21lbV9saW5lIHdpbGwgcHJvY2VzcyAxNiBieXRlcyBhdCBtb3N0ICovCi0gICAgZ3N0X2luZm9fZHVtcF9tZW1fbGluZSAoYnVmLCBzaXplb2YgKGJ1ZiksIGRhdGEsIG9mZiwgbGVuZ3RoIC0gb2ZmKTsKLSAgICBnc3RfZGVidWdfbG9nIChjYXQsIEdTVF9MRVZFTF9NRU1EVU1QLCBmaWxlLCBmdW5jLCBsaW5lLCBvYmosICIlcyIsIGJ1Zik7Ci0gICAgb2ZmICs9IDE2OwotICB9Ci0KLSAgZ3N0X2RlYnVnX2xvZyAoKGNhdCksIEdTVF9MRVZFTF9NRU1EVU1QLCBmaWxlLCBmdW5jLCBsaW5lLCBvYmosICItLS0tLS0tLSIKLSAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci19Ci0KLSNlbHNlIC8qICFHU1RfRElTQUJMRV9HU1RfREVCVUcgKi8KLSNpZm5kZWYgR1NUX1JFTU9WRV9ESVNBQkxFRAotCi1Hc3REZWJ1Z0NhdGVnb3J5ICoKLV9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsIGd1aW50IGNvbG9yLAotICAgIGNvbnN0IGdjaGFyICogZGVzY3JpcHRpb24pCi17Ci0gIHJldHVybiBOVUxMOwotfQotCi12b2lkCi1fZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIgKEdzdERlYnVnRnVuY1B0ciBmdW5jLCBjb25zdCBnY2hhciAqIHB0cm5hbWUpCi17Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gTVVTVCBOT1QgcmV0dXJuIE5VTEwgKi8KLWNvbnN0IGdjaGFyICoKLV9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIgKEdzdERlYnVnRnVuY1B0ciBmdW5jKQotewotICByZXR1cm4gIihOVUxMKSI7Ci19Ci0KLXZvaWQKLWdzdF9kZWJ1Z19sb2cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKLSAgICBjb25zdCBnY2hhciAqIGZpbGUsIGNvbnN0IGdjaGFyICogZnVuY3Rpb24sIGdpbnQgbGluZSwKLSAgICBHT2JqZWN0ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIGZvcm1hdCwgLi4uKQotewotfQotCi12b2lkCi1nc3RfZGVidWdfbG9nX3ZhbGlzdCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LCBHc3REZWJ1Z0xldmVsIGxldmVsLAotICAgIGNvbnN0IGdjaGFyICogZmlsZSwgY29uc3QgZ2NoYXIgKiBmdW5jdGlvbiwgZ2ludCBsaW5lLAotICAgIEdPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogZm9ybWF0LCB2YV9saXN0IGFyZ3MpCi17Ci19Ci0KLWNvbnN0IGdjaGFyICoKLWdzdF9kZWJ1Z19tZXNzYWdlX2dldCAoR3N0RGVidWdNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgcmV0dXJuICIiOwotfQotCi12b2lkCi1nc3RfZGVidWdfbG9nX2RlZmF1bHQgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKLSAgICBjb25zdCBnY2hhciAqIGZpbGUsIGNvbnN0IGdjaGFyICogZnVuY3Rpb24sIGdpbnQgbGluZSwKLSAgICBHT2JqZWN0ICogb2JqZWN0LCBHc3REZWJ1Z01lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciB1bnVzZWQpCi17Ci19Ci0KLWNvbnN0IGdjaGFyICoKLWdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZSAoR3N0RGVidWdMZXZlbCBsZXZlbCkKLXsKLSAgcmV0dXJuICJOT05FIjsKLX0KLQotdm9pZAotZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKEdzdExvZ0Z1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpCi17Ci19Ci0KLWd1aW50Ci1nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoR3N0TG9nRnVuY3Rpb24gZnVuYykKLXsKLSAgcmV0dXJuIDA7Ci19Ci0KLWd1aW50Ci1nc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhIChncG9pbnRlciBkYXRhKQotewotICByZXR1cm4gMDsKLX0KLQotdm9pZAotZ3N0X2RlYnVnX3NldF9hY3RpdmUgKGdib29sZWFuIGFjdGl2ZSkKLXsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9kZWJ1Z19pc19hY3RpdmUgKHZvaWQpCi17Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZAotZ3N0X2RlYnVnX3NldF9jb2xvcmVkIChnYm9vbGVhbiBjb2xvcmVkKQotewotfQotCi12b2lkCi1nc3RfZGVidWdfc2V0X2NvbG9yX21vZGUgKEdzdERlYnVnQ29sb3JNb2RlIG1vZGUpCi17Ci19Ci0KLXZvaWQKLWdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHIpCi17Ci19Ci0KLWdib29sZWFuCi1nc3RfZGVidWdfaXNfY29sb3JlZCAodm9pZCkKLXsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1Hc3REZWJ1Z0NvbG9yTW9kZQotZ3N0X2RlYnVnX2dldF9jb2xvcl9tb2RlICh2b2lkKQotewotICByZXR1cm4gR1NUX0RFQlVHX0NPTE9SX01PREVfT0ZGOwotfQotCi12b2lkCi1nc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBsaXN0LCBnYm9vbGVhbiByZXNldCkKLXsKLX0KLQotdm9pZAotZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR3N0RGVidWdMZXZlbCBsZXZlbCkKLXsKLX0KLQotR3N0RGVidWdMZXZlbAotZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZCAodm9pZCkKLXsKLSAgcmV0dXJuIEdTVF9MRVZFTF9OT05FOwotfQotCi12b2lkCi1nc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3REZWJ1Z0xldmVsIGxldmVsKQotewotfQotCi12b2lkCi1nc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lIChjb25zdCBnY2hhciAqIG5hbWUpCi17Ci19Ci0KLXZvaWQKLWdzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCi17Ci19Ci0KLXZvaWQKLWdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksCi0gICAgR3N0RGVidWdMZXZlbCBsZXZlbCkKLXsKLX0KLQotdm9pZAotZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQotewotfQotCi1Hc3REZWJ1Z0xldmVsCi1nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQotewotICByZXR1cm4gR1NUX0xFVkVMX05PTkU7Ci19Ci0KLWNvbnN0IGdjaGFyICoKLWdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfbmFtZSAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5KQotewotICByZXR1cm4gIiI7Ci19Ci0KLWd1aW50Ci1nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCi17Ci0gIHJldHVybiAwOwotfQotCi1jb25zdCBnY2hhciAqCi1nc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnkpCi17Ci0gIHJldHVybiAiIjsKLX0KLQotR1NMaXN0ICoKLWdzdF9kZWJ1Z19nZXRfYWxsX2NhdGVnb3JpZXMgKHZvaWQpCi17Ci0gIHJldHVybiBOVUxMOwotfQotCi1Hc3REZWJ1Z0NhdGVnb3J5ICoKLV9nc3RfZGVidWdfZ2V0X2NhdGVnb3J5IChjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIHJldHVybiBOVUxMOwotfQotCi1nY2hhciAqCi1nc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3IgKGd1aW50IGNvbG9yaW5mbykKLXsKLSAgcmV0dXJuIGdfc3RyZHVwICgiMDAiKTsKLX0KLQotZ2ludAotZ3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3IgKGd1aW50IGNvbG9yaW5mbykKLXsKLSAgcmV0dXJuIDA7Ci19Ci0KLWdib29sZWFuCi1fcHJpdl9nc3RfaW5fdmFsZ3JpbmQgKHZvaWQpCi17Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZAotX2dzdF9kZWJ1Z19kdW1wX21lbSAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgZ2NoYXIgKiBmaWxlLAotICAgIGNvbnN0IGdjaGFyICogZnVuYywgZ2ludCBsaW5lLCBHT2JqZWN0ICogb2JqLCBjb25zdCBnY2hhciAqIG1zZywKLSAgICBjb25zdCBndWludDggKiBkYXRhLCBndWludCBsZW5ndGgpCi17Ci19Ci0jZW5kaWYgLyogR1NUX1JFTU9WRV9ESVNBQkxFRCAqLwotI2VuZGlmIC8qIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLwotCi0vKiBOZWVkIHRoaXMgZm9yIF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgZXZlbiBpZiBHU1RfUkVNT1ZFX0RJU0FCTEVEIGlzIHNldDoKLSAqIGZhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgY2xlYW5zIHVwIHRoZSBmb3JtYXQgc3RyaW5nIGFuZCByZXBsYWNlcyBhbGwgcG9pbnRlcgotICogZXh0ZW5zaW9uIGZvcm1hdHMgd2l0aCBwbGFpbiAlcC4gKi8KLSNpZmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSNpbmNsdWRlIDxnbGliL2dwcmludGYuaD4KLWludAotX19nc3RfaW5mb19mYWxsYmFja192YXNwcmludGYgKGNoYXIgKipyZXN1bHQsIGNoYXIgY29uc3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotICBnY2hhciAqY2xlYW5fZm9ybWF0LCAqYzsKLSAgZ3NpemUgbGVuOwotCi0gIGlmIChmb3JtYXQgPT0gTlVMTCkKLSAgICByZXR1cm4gLTE7Ci0KLSAgY2xlYW5fZm9ybWF0ID0gZ19zdHJkdXAgKGZvcm1hdCk7Ci0gIGMgPSBjbGVhbl9mb3JtYXQ7Ci0gIHdoaWxlICgoYyA9IHN0cnN0ciAoYywgIiVwXGEiKSkpIHsKLSAgICBpZiAoY1szXSA8ICdBJyB8fCBjWzNdID4gJ1onKSB7Ci0gICAgICBjICs9IDM7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgbGVuID0gc3RybGVuIChjICsgNCk7Ci0gICAgbWVtbW92ZSAoYyArIDIsIGMgKyA0LCBsZW4gKyAxKTsKLSAgICBjICs9IDI7Ci0gIH0KLSAgd2hpbGUgKChjID0gc3Ryc3RyIChjbGVhbl9mb3JtYXQsICIlUCIpKSkgICAgIC8qIG9sZCBHU1RfUFRSX0ZPUk1BVCAqLwotICAgIGNbMV0gPSAncCc7Ci0gIHdoaWxlICgoYyA9IHN0cnN0ciAoY2xlYW5fZm9ybWF0LCAiJVEiKSkpICAgICAvKiBvbGQgR1NUX1NFR01FTlRfRk9STUFUICovCi0gICAgY1sxXSA9ICdwJzsKLQotICBsZW4gPSBnX3Zhc3ByaW50ZiAocmVzdWx0LCBjbGVhbl9mb3JtYXQsIGFyZ3MpOwotCi0gIGdfZnJlZSAoY2xlYW5fZm9ybWF0KTsKLQotICBpZiAoKnJlc3VsdCA9PSBOVUxMKQotICAgIHJldHVybiAtMTsKLQotICByZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KLS8qKgotICogZ3N0X2luZm9fdmFzcHJpbnRmOgotICogQHJlc3VsdDogKG91dCk6IHRoZSByZXN1bHRpbmcgc3RyaW5nCi0gKiBAZm9ybWF0OiBhIHByaW50ZiBzdHlsZSBmb3JtYXQgc3RyaW5nCi0gKiBAYXJnczogdGhlIHZhX2xpc3Qgb2YgcHJpbnRmIGFyZ3VtZW50cyBmb3IgQGZvcm1hdAotICoKLSAqIEFsbG9jYXRlcyBhbmQgZmlsbHMgYSBzdHJpbmcgbGFyZ2UgZW5vdWdoIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwKLSAqIGJ5dGUpIHRvIGhvbGQgdGhlIHNwZWNpZmllZCBwcmludGYgc3R5bGUgQGZvcm1hdCBhbmQgQGFyZ3MuCi0gKgotICogVGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIHRoZSBHU3RyZWFtZXIgc3BlY2lmaWMgcHJpbnRmIHNwZWNpZmllcnMKLSAqICNHU1RfUFRSX0ZPUk1BVCBhbmQgI0dTVF9TRUdNRU5UX0ZPUk1BVC4gIElmIHlvdSBkbyBub3QgaGF2ZSB0aGVzZSBzcGVjaWZpZXJzCi0gKiBpbiB5b3VyIEBmb3JtYXQgc3RyaW5nLCB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gYW5kIGNhbiB1c2UKLSAqIGFsdGVybmF0aXZlcyBzdWNoIGFzIGdfdmFzcHJpbnRmKCkuCi0gKgotICogRnJlZSBAcmVzdWx0IHdpdGggZ19mcmVlKCkuCi0gKgotICogUmV0dXJuczogdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFsbG9jYXRlZCBpbnRvIEByZXN1bHQgb3IgLTEgb24gYW55IGVycm9yCi0gKgotICogU2luY2U6IDEuOAotICovCi1naW50Ci1nc3RfaW5mb192YXNwcmludGYgKGdjaGFyICoqIHJlc3VsdCwgY29uc3QgZ2NoYXIgKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgLyogVGhpcyB3aWxsIGZhbGxiYWNrIHRvIF9fZ3N0X2luZm9fZmFsbGJhY2tfdmFzcHJpbnRmKCkgdmlhIGEgI2RlZmluZSBpbgotICAgKiBnc3RfcHJpdmF0ZS5oIGlmIHRoZSBkZWJ1ZyBzeXN0ZW0gaXMgZGlzYWJsZWQgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGdzdAotICAgKiBzcGVjaWZpYyBwcmludGYgZm9ybWF0IHNwZWNpZmllcnMgKi8KLSAgcmV0dXJuIF9fZ3N0X3Zhc3ByaW50ZiAocmVzdWx0LCBmb3JtYXQsIGFyZ3MpOwotfQotCi0vKioKLSAqIGdzdF9pbmZvX3N0cmR1cF92cHJpbnRmOgotICogQGZvcm1hdDogYSBwcmludGYgc3R5bGUgZm9ybWF0IHN0cmluZwotICogQGFyZ3M6IHRoZSB2YV9saXN0IG9mIHByaW50ZiBhcmd1bWVudHMgZm9yIEBmb3JtYXQKLSAqCi0gKiBBbGxvY2F0ZXMsIGZpbGxzIGFuZCByZXR1cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSBwcmludGYgc3R5bGUKLSAqIEBmb3JtYXQgc3RyaW5nIGFuZCBAYXJncy4KLSAqCi0gKiBTZWUgZ3N0X2luZm9fdmFzcHJpbnRmKCkgZm9yIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZC4KLSAqCi0gKiBGcmVlIHdpdGggZ19mcmVlKCkuCi0gKgotICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBvciAlTlVMTCBvbiBhbnkgZXJyb3IKLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLWdjaGFyICoKLWdzdF9pbmZvX3N0cmR1cF92cHJpbnRmIChjb25zdCBnY2hhciAqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotICBnY2hhciAqcmV0OwotCi0gIGlmIChnc3RfaW5mb192YXNwcmludGYgKCZyZXQsIGZvcm1hdCwgYXJncykgPCAwKQotICAgIHJldCA9IE5VTEw7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfaW5mb19zdHJkdXBfcHJpbnRmOgotICogQGZvcm1hdDogYSBwcmludGYgc3R5bGUgZm9ybWF0IHN0cmluZwotICogQC4uLjogdGhlIHByaW50ZiBhcmd1bWVudHMgZm9yIEBmb3JtYXQKLSAqCi0gKiBBbGxvY2F0ZXMsIGZpbGxzIGFuZCByZXR1cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHRoZSBwcmludGYgc3R5bGUKLSAqIEBmb3JtYXQgc3RyaW5nIGFuZCBjb3JyZXNwb25kaW5nIGFyZ3VtZW50cy4KLSAqCi0gKiBTZWUgZ3N0X2luZm9fdmFzcHJpbnRmKCkgZm9yIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZC4KLSAqCi0gKiBGcmVlIHdpdGggZ19mcmVlKCkuCi0gKgotICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBvciAlTlVMTCBvbiBhbnkgZXJyb3IKLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLWdjaGFyICoKLWdzdF9pbmZvX3N0cmR1cF9wcmludGYgKGNvbnN0IGdjaGFyICogZm9ybWF0LCAuLi4pCi17Ci0gIGdjaGFyICpyZXQ7Ci0gIHZhX2xpc3QgYXJnczsKLQotICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKLSAgcmV0ID0gZ3N0X2luZm9fc3RyZHVwX3ZwcmludGYgKGZvcm1hdCwgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIEdTVF9FTkFCTEVfRlVOQ19JTlNUUlVNRU5UQVRJT04KLS8qIEZJWE1FIG1ha2UgdGhpcyB0aHJlYWQgc3BlY2lmaWMgKi8KLXN0YXRpYyBHU0xpc3QgKnN0YWNrX3RyYWNlID0gTlVMTDsKLQotdm9pZAotX19jeWdfcHJvZmlsZV9mdW5jX2VudGVyICh2b2lkICp0aGlzX2ZuLCB2b2lkICpjYWxsX3NpdGUpCi0gICAgR19HTlVDX05PX0lOU1RSVU1FTlQ7Ci0gICAgIHZvaWQgX19jeWdfcHJvZmlsZV9mdW5jX2VudGVyICh2b2lkICp0aGlzX2ZuLCB2b2lkICpjYWxsX3NpdGUpCi17Ci0gIGdjaGFyICpuYW1lID0gX2dzdF9kZWJ1Z19uYW1lb2ZfZnVuY3B0ciAodGhpc19mbik7Ci0gIGdjaGFyICpzaXRlID0gX2dzdF9kZWJ1Z19uYW1lb2ZfZnVuY3B0ciAoY2FsbF9zaXRlKTsKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBTExfVFJBQ0UsICJlbnRlcmluZyBmdW5jdGlvbiAlcyBmcm9tICVzIiwgbmFtZSwKLSAgICAgIHNpdGUpOwotICBzdGFja190cmFjZSA9Ci0gICAgICBnX3NsaXN0X3ByZXBlbmQgKHN0YWNrX3RyYWNlLCBnX3N0cmR1cF9wcmludGYgKCIlOHAgaW4gJXMgZnJvbSAlcCAoJXMpIiwKLSAgICAgICAgICB0aGlzX2ZuLCBuYW1lLCBjYWxsX3NpdGUsIHNpdGUpKTsKLQotICBnX2ZyZWUgKG5hbWUpOwotICBnX2ZyZWUgKHNpdGUpOwotfQotCi12b2lkCi1fX2N5Z19wcm9maWxlX2Z1bmNfZXhpdCAodm9pZCAqdGhpc19mbiwgdm9pZCAqY2FsbF9zaXRlKQotICAgIEdfR05VQ19OT19JTlNUUlVNRU5UOwotICAgICB2b2lkIF9fY3lnX3Byb2ZpbGVfZnVuY19leGl0ICh2b2lkICp0aGlzX2ZuLCB2b2lkICpjYWxsX3NpdGUpCi17Ci0gIGdjaGFyICpuYW1lID0gX2dzdF9kZWJ1Z19uYW1lb2ZfZnVuY3B0ciAodGhpc19mbik7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DQUxMX1RSQUNFLCAibGVhdmluZyBmdW5jdGlvbiAlcyIsIG5hbWUpOwotICBnX2ZyZWUgKHN0YWNrX3RyYWNlLT5kYXRhKTsKLSAgc3RhY2tfdHJhY2UgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChzdGFja190cmFjZSwgc3RhY2tfdHJhY2UpOwotCi0gIGdfZnJlZSAobmFtZSk7Ci19Ci0KLS8qKgotICogZ3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlOgotICoKLSAqIElmIEdTVF9FTkFCTEVfRlVOQ19JTlNUUlVNRU5UQVRJT04gaXMgZGVmaW5lZCBhIHN0YWNrdHJhY2UgaXMgYXZhaWxhYmxlIGZvcgotICogZ3N0cmVhbWVyIGNvZGUsIHdoaWNoIGNhbiBiZSBwcmludGVkIHdpdGggdGhpcyBmdW5jdGlvbi4KLSAqLwotdm9pZAotZ3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlICh2b2lkKQotewotICBHU0xpc3QgKndhbGsgPSBzdGFja190cmFjZTsKLSAgZ2ludCBjb3VudCA9IDA7Ci0KLSAgaWYgKHdhbGspCi0gICAgd2FsayA9IGdfc2xpc3RfbmV4dCAod2Fsayk7Ci0KLSAgd2hpbGUgKHdhbGspIHsKLSAgICBnY2hhciAqbmFtZSA9IChnY2hhciAqKSB3YWxrLT5kYXRhOwotCi0gICAgZ19wcmludCAoIiMlLTJkICVzXG4iLCBjb3VudCsrLCBuYW1lKTsKLQotICAgIHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspOwotICB9Ci19Ci0jZWxzZQotdm9pZAotZ3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlICh2b2lkKQotewotICAvKiBub3RoaW5nIGJlY2F1c2UgaXQncyBjb21waWxlZCBvdXQgKi8KLX0KLQotI2VuZGlmIC8qIEdTVF9FTkFCTEVfRlVOQ19JTlNUUlVNRU5UQVRJT04gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RpbmZvLmggYi9nc3QvZ3N0aW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGI0MTkxLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RpbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotICoKLSAqIGdzdGluZm8uaDogZGVidWdnaW5nIGZ1bmN0aW9ucwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RJTkZPX0hfXwotI2RlZmluZSBfX0dTVElORk9fSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotLyoqCi0gKiBHc3REZWJ1Z0xldmVsOgotICogQEdTVF9MRVZFTF9OT05FOiBObyBkZWJ1Z2dpbmcgbGV2ZWwgc3BlY2lmaWVkIG9yIGRlc2lyZWQuIFVzZWQgdG8gZGVhY3RpdmF0ZQotICogIGRlYnVnZ2luZyBvdXRwdXQuCi0gKiBAR1NUX0xFVkVMX0VSUk9SOiBFcnJvciBtZXNzYWdlcyBhcmUgdG8gYmUgdXNlZCBvbmx5IHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQKLSAqICB0aGF0IHN0b3BzIHRoZSBhcHBsaWNhdGlvbiBmcm9tIGtlZXBpbmcgd29ya2luZyBjb3JyZWN0bHkuCi0gKiAgQW4gZXhhbXBsZXMgaXMgZ3N0X2VsZW1lbnRfZXJyb3IsIHdoaWNoIG91dHB1dHMgYSBtZXNzYWdlIHdpdGggdGhpcyBwcmlvcml0eS4KLSAqICBJdCBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzIHRlcm1pbmF0aW5nIGFzIHdpdGggZ19lcnJvci4KLSAqIEBHU1RfTEVWRUxfV0FSTklORzogV2FybmluZyBtZXNzYWdlcyBhcmUgdG8gaW5mb3JtIGFib3V0IGFibm9ybWFsIGJlaGF2aW91cgotICogIHRoYXQgY291bGQgbGVhZCB0byBwcm9ibGVtcyBvciB3ZWlyZCBiZWhhdmlvdXIgbGF0ZXIgb24uIEFuIGV4YW1wbGUgb2YgdGhpcwotICogIHdvdWxkIGJlIGNsb2NraW5nIGlzc3VlcyAoInlvdXIgY29tcHV0ZXIgaXMgcHJldHR5IHNsb3ciKSBvciBicm9rZW4gaW5wdXQKLSAqICBkYXRhICgiQ2FuJ3Qgc3luY2hyb25pemUgdG8gc3RyZWFtLiIpCi0gKiBAR1NUX0xFVkVMX0ZJWE1FOiBGaXhtZSBtZXNzYWdlcyBhcmUgbWVzc2FnZXMgdGhhdCBpbmRpY2F0ZSB0aGF0IHNvbWV0aGluZwotICogIGluIHRoZSBleGVjdXRlZCBjb2RlIHBhdGggaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIG9yIGhhbmRsZWQgeWV0LiBOb3RlCi0gKiAgdGhhdCB0aGlzIGRvZXMgbm90IHJlcGxhY2UgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGluIGFueSB3YXksIHRoZSBwdXJwb3NlCi0gKiAgb2YgdGhpcyBtZXNzYWdlIGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwb3QgaW5jb21wbGV0ZS91bmZpbmlzaGVkIHBpZWNlcwotICogIG9mIGNvZGUgd2hlbiByZWFkaW5nIHRoZSBkZWJ1ZyBsb2cuCi0gKiBAR1NUX0xFVkVMX0lORk86IEluZm9ybWF0aW9uYWwgbWVzc2FnZXMgc2hvdWxkIGJlIHVzZWQgdG8ga2VlcCB0aGUgZGV2ZWxvcGVyCi0gKiAgdXBkYXRlZCBhYm91dCB3aGF0IGlzIGhhcHBlbmluZy4KLSAqICBFeGFtcGxlcyB3aGVyZSB0aGlzIHNob3VsZCBiZSB1c2VkIGFyZSB3aGVuIGEgdHlwZWZpbmQgZnVuY3Rpb24gaGFzCi0gKiAgc3VjY2Vzc2Z1bGx5IGRldGVybWluZWQgdGhlIHR5cGUgb2YgdGhlIHN0cmVhbSBvciB3aGVuIGFuIG1wMyBwbHVnaW4gZGV0ZWN0cwotICogIHRoZSBmb3JtYXQgdG8gYmUgdXNlZC4gKCJUaGlzIGZpbGUgaGFzIG1vbm8gc291bmQuIikKLSAqIEBHU1RfTEVWRUxfREVCVUc6IERlYnVnZ2luZyBtZXNzYWdlcyBzaG91bGQgYmUgdXNlZCB3aGVuIHNvbWV0aGluZyBjb21tb24KLSAqICBoYXBwZW5zIHRoYXQgaXMgbm90IHRoZSBleHBlY3RlZCBkZWZhdWx0IGJlaGF2aW9yLCBvciBzb21ldGhpbmcgdGhhdCdzCi0gKiAgdXNlZnVsIHRvIGtub3cgYnV0IGRvZXNuJ3QgaGFwcGVuIGFsbCB0aGUgdGltZSAoaWUuIHBlciBsb29wIGl0ZXJhdGlvbiBvcgotICogIGJ1ZmZlciBwcm9jZXNzZWQgb3IgZXZlbnQgaGFuZGxlZCkuCi0gKiAgQW4gZXhhbXBsZSB3b3VsZCBiZSBub3RpZmljYXRpb25zIGFib3V0IHN0YXRlIGNoYW5nZXMgb3IgcmVjZWl2aW5nL3NlbmRpbmcKLSAqICBvZiBldmVudHMuCi0gKiBAR1NUX0xFVkVMX0xPRzogTG9nIG1lc3NhZ2VzIGFyZSBtZXNzYWdlcyB0aGF0IGFyZSB2ZXJ5IGNvbW1vbiBidXQgbWlnaHQgYmUKLSAqICB1c2VmdWwgdG8ga25vdy4gQXMgYSBydWxlIG9mIHRodW1iIGEgcGlwZWxpbmUgdGhhdCBpcyBydW5uaW5nIGFzIGV4cGVjdGVkCi0gKiAgc2hvdWxkIG5ldmVyIG91dHB1dCBhbnl0aGluZyBlbHNlIGJ1dCBMT0cgbWVzc2FnZXMgd2hpbHN0IHByb2Nlc3NpbmcgZGF0YS4KLSAqICBVc2UgdGhpcyBsb2cgbGV2ZWwgdG8gbG9nIHJlY3VycmluZyBpbmZvcm1hdGlvbiBpbiBjaGFpbiBmdW5jdGlvbnMgYW5kCi0gKiAgbG9vcCBmdW5jdGlvbnMsIGZvciBleGFtcGxlLgotICogQEdTVF9MRVZFTF9UUkFDRTogVHJhY2luZy1yZWxhdGVkIG1lc3NhZ2VzLgotICogIEV4YW1wbGVzIGZvciB0aGlzIGFyZSByZWZlcmVuY2luZy9kZXJlZmVyZW5jaW5nIG9mIG9iamVjdHMuCi0gKiBAR1NUX0xFVkVMX01FTURVTVA6IG1lbW9yeSBkdW1wIG1lc3NhZ2VzIGFyZSB1c2VkIHRvIGxvZyAoc21hbGwpIGNodW5rcyBvZgotICogIGRhdGEgYXMgbWVtb3J5IGR1bXBzIGluIHRoZSBsb2cuIFRoZXkgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgaGV4ZHVtcCB3aXRoCi0gKiAgQVNDSUkgY2hhcmFjdGVycy4KLSAqIEBHU1RfTEVWRUxfQ09VTlQ6IFRoZSBudW1iZXIgb2YgZGVmaW5lZCBkZWJ1Z2dpbmcgbGV2ZWxzLgotICoKLSAqIFRoZSBsZXZlbCBkZWZpbmVzIHRoZSBpbXBvcnRhbmNlIG9mIGEgZGVidWdnaW5nIG1lc3NhZ2UuIFRoZSBtb3JlIGltcG9ydGFudCBhCi0gKiBtZXNzYWdlIGlzLCB0aGUgZ3JlYXRlciB0aGUgcHJvYmFiaWxpdHkgdGhhdCB0aGUgZGVidWdnaW5nIHN5c3RlbSBvdXRwdXRzIGl0LgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfTEVWRUxfTk9ORSA9IDAsCi0gIEdTVF9MRVZFTF9FUlJPUiA9IDEsCi0gIEdTVF9MRVZFTF9XQVJOSU5HID0gMiwKLSAgR1NUX0xFVkVMX0ZJWE1FID0gMywKLSAgR1NUX0xFVkVMX0lORk8gPSA0LAotICBHU1RfTEVWRUxfREVCVUcgPSA1LAotICBHU1RfTEVWRUxfTE9HID0gNiwKLSAgR1NUX0xFVkVMX1RSQUNFID0gNywKLSAgLyogYWRkIG1vcmUgKi8KLSAgR1NUX0xFVkVMX01FTURVTVAgPSA5LAotICAvKiBhZGQgbW9yZSAqLwotICBHU1RfTEVWRUxfQ09VTlQKLX0gR3N0RGVidWdMZXZlbDsKLQotLyoqCi0gKiBHU1RfTEVWRUxfREVGQVVMVDoKLSAqCi0gKiBEZWZpbmVzIHRoZSBkZWZhdWx0IGRlYnVnZ2luZyBsZXZlbCB0byBiZSB1c2VkIHdpdGggR1N0cmVhbWVyLiBJdCBpcyBub3JtYWxseQotICogc2V0IHRvICNHU1RfTEVWRUxfTk9ORSBzbyBub3RoaW5nIGdldCBwcmludGVkLgotICogQXMgaXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLCBkZXZlbG9wZXIgYnVpbGRzIG1heSBjaG9zZSB0bwotICogb3ZlcnJpZGUgdGhhdCB0aG91Z2guCi0gKiBZb3UgY2FuIHVzZSB0aGlzIGFzIGFuIGFyZ3VtZW50IHRvIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQoKSB0bwotICogcmVzZXQgdGhlIGRlYnVnZ2luZyBvdXRwdXQgdG8gZGVmYXVsdCBiZWhhdmlvdXIuCi0gKi8KLSNpZm5kZWYgR1NUX0xFVkVMX0RFRkFVTFQKLSNkZWZpbmUgR1NUX0xFVkVMX0RFRkFVTFQgR1NUX0xFVkVMX05PTkUKLSNlbmRpZgotCi0vKioKLSAqIEdTVF9MRVZFTF9NQVg6Ci0gKgotICogRGVmaW5lcyB0aGUgbWF4aW11bSBkZWJ1Z2dpbmcgbGV2ZWwgdG8gYmUgZW5hYmxlZCBhdCBjb21waWxhdGlvbiB0aW1lLiBCeSBkZWZhdWx0Ci0gKiBpdCBpcyBzZXQgc3VjaCB0aGF0IGFsbCBkZWJ1Z2dpbmcgc3RhdGVtZW50cyB3aWxsIGJlIGVuYWJsZWQuCi0gKgotICogSWYgeW91IHdpc2ggdG8gY29tcGlsZSBHU3RyZWFtZXIgYW5kIHBsdWdpbnMgd2l0aCBvbmx5IHNvbWUgZGVidWdnaW5nIHN0YXRlbWVudHMKLSAqIChTdWNoIGFzIGp1c3Qgd2FybmluZ3MgYW5kIGVycm9ycyksIHlvdSBjYW4gZGVmaW5lIGl0IGF0IGNvbXBpbGUgdGltZSB0byB0aGUKLSAqIG1heGltdW0gZGVidWcgbGV2ZWwuIEFueSBkZWJ1ZyBzdGF0ZW1lbnRzIGFib3ZlIHRoYXQgbGV2ZWwgd2lsbCBiZSBjb21waWxlZCBvdXQuCi0gKgotICogU2luY2U6IDEuNgotICovCi0jaWZuZGVmIEdTVF9MRVZFTF9NQVgKLSNkZWZpbmUgR1NUX0xFVkVMX01BWCBHU1RfTEVWRUxfQ09VTlQKLSNlbmRpZgotCi0vKiBkZWZpbmVzIGZvciBmb3JtYXQgKGNvbG9ycyBldGMpCi0gKiBkb24ndCBjaGFuZ2UgdGhlbSBhcm91bmQsIGl0IHVzZXMgdGVybWluYWwgbGF5b3V0Ci0gKiBUZXJtaW5hbCBjb2xvciBzdHJpbmdzOgotICogMDA9bm9uZSAwMT1ib2xkIDA0PXVuZGVyc2NvcmUgMDU9YmxpbmsgMDc9cmV2ZXJzZSAwOD1jb25jZWFsZWQKLSAqIFRleHQgY29sb3IgY29kZXM6Ci0gKiAzMD1ibGFjayAzMT1yZWQgMzI9Z3JlZW4gMzM9eWVsbG93IDM0PWJsdWUgMzU9bWFnZW50YSAzNj1jeWFuIDM3PXdoaXRlCi0gKiBCYWNrZ3JvdW5kIGNvbG9yIGNvZGVzOgotICogNDA9YmxhY2sgNDE9cmVkIDQyPWdyZWVuIDQzPXllbGxvdyA0ND1ibHVlIDQ1PW1hZ2VudGEgNDY9Y3lhbiA0Nz13aGl0ZQotICovCi0vKioKLSAqIEdzdERlYnVnQ29sb3JGbGFnczoKLSAqIEBHU1RfREVCVUdfRkdfQkxBQ0s6IFVzZSBibGFjayBhcyBmb3JlZ3JvdW5kIGNvbG9yLgotICogQEdTVF9ERUJVR19GR19SRUQ6IFVzZSByZWQgYXMgZm9yZWdyb3VuZCBjb2xvci4KLSAqIEBHU1RfREVCVUdfRkdfR1JFRU46IFVzZSBncmVlbiBhcyBmb3JlZ3JvdW5kIGNvbG9yLgotICogQEdTVF9ERUJVR19GR19ZRUxMT1c6IFVzZSB5ZWxsb3cgYXMgZm9yZWdyb3VuZCBjb2xvci4KLSAqIEBHU1RfREVCVUdfRkdfQkxVRTogVXNlIGJsdWUgYXMgZm9yZWdyb3VuZCBjb2xvci4KLSAqIEBHU1RfREVCVUdfRkdfTUFHRU5UQTogVXNlIG1hZ2VudGEgYXMgZm9yZWdyb3VuZCBjb2xvci4KLSAqIEBHU1RfREVCVUdfRkdfQ1lBTjogVXNlIGN5YW4gYXMgZm9yZWdyb3VuZCBjb2xvci4KLSAqIEBHU1RfREVCVUdfRkdfV0hJVEU6IFVzZSB3aGl0ZSBhcyBmb3JlZ3JvdW5kIGNvbG9yLgotICogQEdTVF9ERUJVR19CR19CTEFDSzogVXNlIGJsYWNrIGFzIGJhY2tncm91bmQgY29sb3IuCi0gKiBAR1NUX0RFQlVHX0JHX1JFRDogVXNlIHJlZCBhcyBiYWNrZ3JvdW5kIGNvbG9yLgotICogQEdTVF9ERUJVR19CR19HUkVFTjogVXNlIGdyZWVuIGFzIGJhY2tncm91bmQgY29sb3IuCi0gKiBAR1NUX0RFQlVHX0JHX1lFTExPVzogVXNlIHllbGxvdyBhcyBiYWNrZ3JvdW5kIGNvbG9yLgotICogQEdTVF9ERUJVR19CR19CTFVFOiBVc2UgYmx1ZSBhcyBiYWNrZ3JvdW5kIGNvbG9yLgotICogQEdTVF9ERUJVR19CR19NQUdFTlRBOiBVc2UgbWFnZW50YSBhcyBiYWNrZ3JvdW5kIGNvbG9yLgotICogQEdTVF9ERUJVR19CR19DWUFOOiBVc2UgY3lhbiBhcyBiYWNrZ3JvdW5kIGNvbG9yLgotICogQEdTVF9ERUJVR19CR19XSElURTogVXNlIHdoaXRlIGFzIGJhY2tncm91bmQgY29sb3IuCi0gKiBAR1NUX0RFQlVHX0JPTEQ6IE1ha2UgdGhlIG91dHB1dCBib2xkLgotICogQEdTVF9ERUJVR19VTkRFUkxJTkU6IFVuZGVybGluZSB0aGUgb3V0cHV0LgotICoKLSAqIFRoZXNlIGFyZSBzb21lIHRlcm1pbmFsIHN0eWxlIGZsYWdzIHlvdSBjYW4gdXNlIHdoZW4gY3JlYXRpbmcgeW91cgotICogZGVidWdnaW5nIGNhdGVnb3JpZXMgdG8gbWFrZSB0aGVtIHN0YW5kIG91dCBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgotICovCi10eXBlZGVmIGVudW0gewotICAvKiBjb2xvcnMgKi8KLSAgR1NUX0RFQlVHX0ZHX0JMQUNLCQk9IDB4MDAwMCwKLSAgR1NUX0RFQlVHX0ZHX1JFRAkJPSAweDAwMDEsCi0gIEdTVF9ERUJVR19GR19HUkVFTgkJPSAweDAwMDIsCi0gIEdTVF9ERUJVR19GR19ZRUxMT1cJCT0gMHgwMDAzLAotICBHU1RfREVCVUdfRkdfQkxVRQkJPSAweDAwMDQsCi0gIEdTVF9ERUJVR19GR19NQUdFTlRBCQk9IDB4MDAwNSwKLSAgR1NUX0RFQlVHX0ZHX0NZQU4JCT0gMHgwMDA2LAotICBHU1RfREVCVUdfRkdfV0hJVEUJCT0gMHgwMDA3LAotICAvKiBiYWNrZ3JvdW5kIGNvbG9ycyAqLwotICBHU1RfREVCVUdfQkdfQkxBQ0sJCT0gMHgwMDAwLAotICBHU1RfREVCVUdfQkdfUkVECQk9IDB4MDAxMCwKLSAgR1NUX0RFQlVHX0JHX0dSRUVOCQk9IDB4MDAyMCwKLSAgR1NUX0RFQlVHX0JHX1lFTExPVwkJPSAweDAwMzAsCi0gIEdTVF9ERUJVR19CR19CTFVFCQk9IDB4MDA0MCwKLSAgR1NUX0RFQlVHX0JHX01BR0VOVEEJCT0gMHgwMDUwLAotICBHU1RfREVCVUdfQkdfQ1lBTgkJPSAweDAwNjAsCi0gIEdTVF9ERUJVR19CR19XSElURQkJPSAweDAwNzAsCi0gIC8qIG90aGVyIGZvcm1hdHMgKi8KLSAgR1NUX0RFQlVHX0JPTEQJCT0gMHgwMTAwLAotICBHU1RfREVCVUdfVU5ERVJMSU5FCQk9IDB4MDIwMAotfSBHc3REZWJ1Z0NvbG9yRmxhZ3M7Ci0KLS8qKgotICogR3N0RGVidWdDb2xvck1vZGU6Ci0gKiBAR1NUX0RFQlVHX0NPTE9SX01PREVfT0ZGOiBEbyBub3QgdXNlIGNvbG9ycyBpbiBsb2dzLgotICogQEdTVF9ERUJVR19DT0xPUl9NT0RFX09OOiBQYWludCBsb2dzIGluIGEgcGxhdGZvcm0tc3BlY2lmaWMgd2F5LgotICogQEdTVF9ERUJVR19DT0xPUl9NT0RFX1VOSVg6IFBhaW50IGxvZ3Mgd2l0aCBVTklYIHRlcm1pbmFsIGNvbG9yIGNvZGVzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gbWF0dGVyIHdoYXQgcGxhdGZvcm0gR1N0cmVhbWVyIGlzIHJ1bm5pbmcgb24uCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9ERUJVR19DT0xPUl9NT0RFX09GRiAgPSAwLAotICBHU1RfREVCVUdfQ09MT1JfTU9ERV9PTiAgID0gMSwKLSAgR1NUX0RFQlVHX0NPTE9SX01PREVfVU5JWCA9IDIKLX0gR3N0RGVidWdDb2xvck1vZGU7Ci0KLQotI2RlZmluZSBHU1RfREVCVUdfRkdfTUFTSwkoMHgwMDBGKQotI2RlZmluZSBHU1RfREVCVUdfQkdfTUFTSwkoMHgwMEYwKQotI2RlZmluZSBHU1RfREVCVUdfRk9STUFUX01BU0sJKDB4RkYwMCkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdERlYnVnQ2F0ZWdvcnkgR3N0RGVidWdDYXRlZ29yeTsKLS8qKgotICogR3N0RGVidWdDYXRlZ29yeToKLSAqCi0gKiBUaGlzIGlzIHRoZSBzdHJ1Y3QgdGhhdCBkZXNjcmliZXMgdGhlIGNhdGVnb3JpZXMuIE9uY2UgaW5pdGlhbGl6ZWQgd2l0aAotICogI0dTVF9ERUJVR19DQVRFR09SWV9JTklULCBpdHMgdmFsdWVzIGNhbid0IGJlIGNoYW5nZWQgYW55bW9yZS4KLSAqLwotc3RydWN0IF9Hc3REZWJ1Z0NhdGVnb3J5IHsKLSAgLyo8IHByaXZhdGUgPiovCi0gIGdpbnQgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ7Ci0gIGd1aW50CQkJY29sb3I7CQkvKiBzZWUgZGVmaW5lcyBhYm92ZSAqLwotCi0gIGNvbnN0IGdjaGFyICoJCW5hbWU7Ci0gIGNvbnN0IGdjaGFyICoJCWRlc2NyaXB0aW9uOwotfTsKLQotLyoqKioqKioqKiogc29tZSBjb252ZW5pZW5jZSBtYWNyb3MgZm9yIGRlYnVnZ2luZyAqKioqKioqKioqLwotCi0vKioKLSAqIEdTVF9TVFJfTlVMTDoKLSAqIEBzdHI6IChhbGxvdy1ub25lKTogVGhlIHN0cmluZyB0byBjaGVjay4KLSAqCi0gKiBNYWNybyB0byB1c2Ugd2hlbiBhIHN0cmluZyBtdXN0IG5vdCBiZSAlTlVMTCwgYnV0IG1heSBiZSAlTlVMTC4gSWYgdGhlIHN0cmluZwotICogaXMgJU5VTEwsICIoTlVMTCkiIGlzIHByaW50ZWQgaW5zdGVhZC4KLSAqIEluIEdTdHJlYW1lciBwcmludGYgc3RyaW5nIGFyZ3VtZW50cyBtYXkgbm90IGJlICVOVUxMLCBiZWNhdXNlIG9uIHNvbWUKLSAqIHBsYXRmb3JtcyAoaWUgU29sYXJpcykgdGhlIGxpYmMgY3Jhc2hlcyBpbiB0aGF0IGNhc2UuIFRoaXMgaW5jbHVkZXMgZGVidWdnaW5nCi0gKiBzdHJpbmdzLgotICovCi0jZGVmaW5lIEdTVF9TVFJfTlVMTChzdHIpICgoc3RyKSA/IChzdHIpIDogIihOVUxMKSIpCi0KLS8qIEZJWE1FLCBub3QgTVQgc2FmZSAqLwotLyoqCi0gKiBHU1RfREVCVUdfUEFEX05BTUU6Ci0gKiBAcGFkOiBUaGUgcGFkIHRvIGRlYnVnLgotICoKLSAqIEV2YWx1YXRlcyB0byAyIHN0cmluZ3MsIHRoYXQgZGVzY3JpYmUgdGhlIHBhZC4gT2Z0ZW4gdXNlZCBpbiBkZWJ1Z2dpbmcKLSAqIHN0YXRlbWVudHMuCi0gKi8KLSNkZWZpbmUgR1NUX0RFQlVHX1BBRF9OQU1FKHBhZCkgXAotICAocGFkICE9IE5VTEwpID8gIFwKLSAgKChHU1RfT0JKRUNUX1BBUkVOVChwYWQpICE9IE5VTEwpID8gXAotICBHU1RfU1RSX05VTEwgKEdTVF9PQkpFQ1RfTkFNRSAoR1NUX09CSkVDVF9QQVJFTlQocGFkKSkpIDogXAotICAiJyciICkgOiAiJyciLCBcCi0gIChwYWQgIT0gTlVMTCkgPyBHU1RfU1RSX05VTEwgKEdTVF9PQkpFQ1RfTkFNRSAocGFkKSkgOiAiJyciCi0KLS8qKgotICogR1NUX0ZVTkNUSU9OOgotICoKLSAqIFRoaXMgbWFjcm8gc2hvdWxkIGV2YWx1YXRlIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFuZCBiZSBzaG91bGQKLSAqIGJlIGRlZmluZWQgd2hlbiBjb25maWd1cmluZyB5b3VyIHByb2plY3QsIGFzIGl0IGlzIGNvbXBpbGVyIGRlcGVuZGFudC4gSWYgaXQKLSAqIGlzIG5vdCBkZWZpbmVkLCBzb21lIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4gSXQgaXMgdXNlZCB0byBwcm92aWRlIGRlYnVnZ2luZwotICogb3V0cHV0IHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgb2YgdGhlIG1lc3NhZ2UuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gR19TVFJGVU5DIGFzIHdlIGRvIG5vdCB3YW50IHRoZSBmdWxsCi0gKiBmdW5jdGlvbiBzaWduYXR1cmUgaW4gQysrIGNvZGUuCi0gKi8KLSNpZm5kZWYgR1NUX0ZVTkNUSU9OCi0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotIyAgZGVmaW5lIEdTVF9GVU5DVElPTiAgICAgKChjb25zdCBjaGFyKikgKF9fZnVuY19fKSkKLSNlbGlmIGRlZmluZWQgKF9fR05VQ19fKSB8fCAoZGVmaW5lZCAoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDEzMDApCi0jICBkZWZpbmUgR1NUX0ZVTkNUSU9OICAgICAoKGNvbnN0IGNoYXIqKSAoX19GVU5DVElPTl9fKSkKLSNlbHNlCi0jICBkZWZpbmUgR1NUX0ZVTkNUSU9OICAgICAoKGNvbnN0IGNoYXIqKSAoIj8/PyIpKQotI2VuZGlmCi0jZW5kaWYgLyogaWZuZGVmIEdTVF9GVU5DVElPTiAqLwotCi0vKioKLSAqIEdTVF9QVFJfRk9STUFUOgotICoKLSAqIHByaW50ZiBmb3JtYXQgdHlwZSB1c2VkIHRvIGRlYnVnIEdTdHJlYW1lciB0eXBlcy4gWW91IGNhbiB1c2UgdGhpcyBpbgotICogY29tYmluYXRpb24gd2l0aCBHU3RyZWFtZXIncyBkZWJ1ZyBsb2dnaW5nIHN5c3RlbSBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvbnMKLSAqIGdzdF9pbmZvX3Zhc3ByaW50ZigpLCBnc3RfaW5mb19zdHJkdXBfdnByaW50ZigpIGFuZCBnc3RfaW5mb19zdHJkdXBfcHJpbnRmKCkKLSAqIHRvIHByZXR0eS1wcmludCB0aGUgZm9sbG93aW5nIHR5cGVzOiAjR3N0Q2FwcywgI0dzdFN0cnVjdHVyZSwKLSAqICNHc3RDYXBzRmVhdHVyZXMsICNHc3RUYWdMaXN0LCAjR3N0RGF0ZVRpbWUsICNHc3RCdWZmZXIsICNHc3RCdWZmZXJMaXN0LAotICogI0dzdE1lc3NhZ2UsICNHc3RFdmVudCwgI0dzdFF1ZXJ5LCAjR3N0Q29udGV4dCwgI0dzdFBhZCwgI0dzdE9iamVjdC4gQWxsCi0gKiAjR09iamVjdCB0eXBlcyB3aWxsIGJlIHByaW50ZWQgYXMgdHlwZW5hbWUgcGx1cyBwb2ludGVyLCBhbmQgZXZlcnl0aGluZwotICogZWxzZSB3aWxsIHNpbXBseSBiZSBwcmludGVkIGFzIHBvaW50ZXIgYWRkcmVzcy4KLSAqCi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgb24gdHlwZXMgd2hvc2Ugc2l6ZSBpcyA+PSBzaXplb2YoZ3BvaW50ZXIpLgotICovCi0jZGVmaW5lIEdTVF9QVFJfRk9STUFUICAgICAicFxhQSIKLQotLyoqCi0gKiBHU1RfU0VHTUVOVF9GT1JNQVQ6Ci0gKgotICogcHJpbnRmIGZvcm1hdCB0eXBlIHVzZWQgdG8gZGVidWcgR1N0cmVhbWVyIHNlZ21lbnRzLiBZb3UgY2FuIHVzZSB0aGlzIGluCi0gKiBjb21iaW5hdGlvbiB3aXRoIEdTdHJlYW1lcidzIGRlYnVnIGxvZ2dpbmcgc3lzdGVtIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9ucwotICogZ3N0X2luZm9fdmFzcHJpbnRmKCksIGdzdF9pbmZvX3N0cmR1cF92cHJpbnRmKCkgYW5kIGdzdF9pbmZvX3N0cmR1cF9wcmludGYoKQotICogdG8gcHJldHR5LXByaW50ICNHc3RTZWdtZW50IHN0cnVjdHVyZXMuCi0gKiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgb24gcG9pbnRlcnMgdG8gR3N0U2VnbWVudCBzdHJ1Y3R1cmVzLgotICovCi0jZGVmaW5lIEdTVF9TRUdNRU5UX0ZPUk1BVCAicFxhQiIKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdERlYnVnTWVzc2FnZSBHc3REZWJ1Z01lc3NhZ2U7Ci0KLS8qKgotICogR3N0TG9nRnVuY3Rpb246Ci0gKiBAY2F0ZWdvcnk6IGEgI0dzdERlYnVnQ2F0ZWdvcnkKLSAqIEBsZXZlbDogYSAjR3N0RGVidWdMZXZlbAotICogQGZpbGU6IGZpbGUgbmFtZQotICogQGZ1bmN0aW9uOiBmdW5jdGlvbiBuYW1lCi0gKiBAbGluZTogbGluZSBudW1iZXIKLSAqIEBvYmplY3Q6IGEgI0dPYmplY3QKLSAqIEBtZXNzYWdlOiB0aGUgbWVzc2FnZQotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIGZvciB0aGUgbG9nIGZ1bmN0aW9uCi0gKgotICogRnVuY3Rpb24gcHJvdG90eXBlIGZvciBhIGxvZ2dpbmcgZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZCB3aXRoCi0gKiBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbigpLgotICogVXNlIEdfR05VQ19OT19JTlNUUlVNRU5UIG9uIHRoYXQgZnVuY3Rpb24uCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdExvZ0Z1bmN0aW9uKSAgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdERlYnVnTGV2ZWwgICAgICBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgIGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHT2JqZWN0ICAgICAgICAgICogb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGVidWdNZXNzYWdlICAqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgdXNlcl9kYXRhKTsKLQotdm9pZAkJICAgIGdzdF9kZWJ1Z19sb2cgICAgICAgICAgICAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGVidWdMZXZlbCAgICAgIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPYmplY3QgICAgICAgICAgKiBvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBHX0dOVUNfUFJJTlRGICg3LCA4KSBHX0dOVUNfTk9fSU5TVFJVTUVOVDsKLQotdm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19sb2dfdmFsaXN0ICAgICAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGVidWdMZXZlbCAgICAgIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50CSAgICAgICAgICAgICAgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdPYmplY3QgICAgICAgICAgKiBvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgICAgIGFyZ3MpIEdfR05VQ19OT19JTlNUUlVNRU5UOwotCi0vKiBkbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgbWFjcm8gKi8KLUdzdERlYnVnQ2F0ZWdvcnkgKl9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICBjb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGRlc2NyaXB0aW9uKTsKLS8qIGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiwgdXNlIHRoZSBHU1RfREVCVUdfQ0FURUdPUllfR0VUIG1hY3JvICovCi1Hc3REZWJ1Z0NhdGVnb3J5ICpfZ3N0X2RlYnVnX2dldF9jYXRlZ29yeSAoY29uc3QgZ2NoYXIgKm5hbWUpOwotCi0KLS8qIGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiwgdXNlIHRoZSBHU1RfQ0FUX01FTURVTVBfKiBtYWNyb3MgKi8KLXZvaWQgX2dzdF9kZWJ1Z19kdW1wX21lbSAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgZ2NoYXIgKiBmaWxlLAotICAgIGNvbnN0IGdjaGFyICogZnVuYywgZ2ludCBsaW5lLCBHT2JqZWN0ICogb2JqLCBjb25zdCBnY2hhciAqIG1zZywKLSAgICBjb25zdCBndWludDggKiBkYXRhLCBndWludCBsZW5ndGgpOwotCi0vKiB3ZSBkZWZpbmUgdGhpcyB0byBhdm9pZCBhIGNvbXBpbGVyIHdhcm5pbmcgcmVnYXJkaW5nIGEgY2FzdCBmcm9tIGEgZnVuY3Rpb24KLSAqIHBvaW50ZXIgdG8gYSB2b2lkIHBvaW50ZXIKLSAqIChzZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTMwOTI1MykKLSAqLwotdHlwZWRlZgl2b2lkICgqIEdzdERlYnVnRnVuY1B0cikJKHZvaWQpOwotCi0vKiBkbyBubyB1c2UgdGhlc2UgZnVuY3Rpb25zLCB1c2UgdGhlIEdTVF9ERUJVRypfRlVOQ1BUUiBtYWNyb3MgKi8KLXZvaWQJX2dzdF9kZWJ1Z19yZWdpc3Rlcl9mdW5jcHRyCShHc3REZWJ1Z0Z1bmNQdHIJZnVuYywKLQkJCQkJIGNvbnN0IGdjaGFyICoJCXB0cm5hbWUpOwotY29uc3QgZ2NoYXIgKgotCV9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIJKEdzdERlYnVnRnVuY1B0cglmdW5jKSBHX0dOVUNfTk9fSU5TVFJVTUVOVDsKLQotCi1jb25zdCBnY2hhciAgICogZ3N0X2RlYnVnX21lc3NhZ2VfZ2V0ICAgIChHc3REZWJ1Z01lc3NhZ2UgICogbWVzc2FnZSk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfZGVidWdfbG9nX2RlZmF1bHQgICAgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdERlYnVnTGV2ZWwgICAgICBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiBmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgIGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHT2JqZWN0ICAgICAgICAgICogb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGVidWdNZXNzYWdlICAqIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgdXNlcl9kYXRhKSBHX0dOVUNfTk9fSU5TVFJVTUVOVDsKLQotY29uc3QgZ2NoYXIgKiAgIGdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZSAoR3N0RGVidWdMZXZlbCBsZXZlbCk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbiAgICAgICAgICAgIChHc3RMb2dGdW5jdGlvbiBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwotCi1ndWludCAgICAgICAgICAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gICAgICAgICAoR3N0TG9nRnVuY3Rpb24gZnVuYyk7Ci1ndWludCAgICAgICAgICAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb25fYnlfZGF0YSAoZ3BvaW50ZXIgICAgICAgZGF0YSk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfZGVidWdfc2V0X2FjdGl2ZSAgKGdib29sZWFuIGFjdGl2ZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2RlYnVnX2lzX2FjdGl2ZSAgICh2b2lkKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19zZXRfY29sb3JlZCAoZ2Jvb2xlYW4gY29sb3JlZCk7Ci12b2lkICAgICAgICAgICAgZ3N0X2RlYnVnX3NldF9jb2xvcl9tb2RlICAgKEdzdERlYnVnQ29sb3JNb2RlIG1vZGUpOwotdm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBtb2RlKTsKLWdib29sZWFuICAgICAgICBnc3RfZGVidWdfaXNfY29sb3JlZCAgKHZvaWQpOwotR3N0RGVidWdDb2xvck1vZGUgZ3N0X2RlYnVnX2dldF9jb2xvcl9tb2RlICh2b2lkKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgICAgICAoR3N0RGVidWdMZXZlbCBsZXZlbCk7Ci1Hc3REZWJ1Z0xldmVsICAgZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZCAgICAgICh2b2lkKTsKLXZvaWQgICAgICAgICAgICBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAgICAgKGNvbnN0IGdjaGFyICogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdERlYnVnTGV2ZWwgbGV2ZWwpOwotdm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zyb21fc3RyaW5nICAoY29uc3QgZ2NoYXIgKiBsaXN0LCBnYm9vbGVhbiByZXNldCk7Ci12b2lkICAgICAgICAgICAgZ3N0X2RlYnVnX3Vuc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAgIChjb25zdCBnY2hhciAqIG5hbWUpOwotCi0KLXZvaWQgICAgICAgICAgICBnc3RfZGVidWdfY2F0ZWdvcnlfZnJlZSAgICAgICAgICAgICAgKEdzdERlYnVnQ2F0ZWdvcnkgKgljYXRlZ29yeSk7Ci12b2lkCSAgICAgICAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9zZXRfdGhyZXNob2xkICAgICAoR3N0RGVidWdDYXRlZ29yeSAqCWNhdGVnb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RGVidWdMZXZlbAkJbGV2ZWwpOwotdm9pZCAgICAgICAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9yZXNldF90aHJlc2hvbGQgICAoR3N0RGVidWdDYXRlZ29yeSAqCWNhdGVnb3J5KTsKLUdzdERlYnVnTGV2ZWwgICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAgICAgKEdzdERlYnVnQ2F0ZWdvcnkgKgljYXRlZ29yeSk7Ci1jb25zdCBnY2hhciAqICAgZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lICAgICAgICAgIChHc3REZWJ1Z0NhdGVnb3J5ICoJY2F0ZWdvcnkpOwotZ3VpbnQgICAgICAgICAgIGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfY29sb3IgICAgICAgICAoR3N0RGVidWdDYXRlZ29yeSAqCWNhdGVnb3J5KTsKLWNvbnN0IGdjaGFyICogICBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uICAgKEdzdERlYnVnQ2F0ZWdvcnkgKgljYXRlZ29yeSk7Ci1HU0xpc3QgKiAgICAgICAgZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllcwkodm9pZCk7Ci0KLQotZ2NoYXIgKiBnc3RfZGVidWdfY29uc3RydWN0X3Rlcm1fY29sb3IgKGd1aW50IGNvbG9yaW5mbyk7Ci1naW50ICAgIGdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yICAoZ3VpbnQgY29sb3JpbmZvKTsKLQotZ2ludCAgICBnc3RfaW5mb192YXNwcmludGYgICAgICAgICAgICAgIChnY2hhciAqKiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIEdfR05VQ19QUklOVEYgKDIsIDApOwotZ2NoYXIgKiBnc3RfaW5mb19zdHJkdXBfdnByaW50ZiAgICAgICAgIChjb25zdCBnY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpIEdfR05VQ19QUklOVEYgKDEsIDApOwotZ2NoYXIgKiBnc3RfaW5mb19zdHJkdXBfcHJpbnRmICAgICAgICAgIChjb25zdCBnY2hhciAqZm9ybWF0LCAuLi4pIEdfR05VQ19QUklOVEYgKDEsIDIpOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotCi0vKiBjYXN0IHRvIHZvaWQgKiBhdm9pZHMgYSB3YXJuaW5nIHdpdGggZ2NjIDYKLSAqIHNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0NTI2ICovCi0jZGVmaW5lIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKGZ1bmMsZGF0YSxub3RpZnkpIFwKLUdfU1RNVF9TVEFSVHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoKGZ1bmMpID09ICh2b2lkICopIGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCkgeyAgICBcCi0gICAgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24oTlVMTCxkYXRhLG5vdGlmeSk7ICAgIFwKLSAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKGZ1bmMsZGF0YSxub3RpZnkpOyAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX1HX1NUTVRfRU5ECi0KLSNkZWZpbmUgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24oZnVuYykgICAgICAgICAgXAotICAgICgoZnVuYykgPT0gKHZvaWQgKikgZ3N0X2RlYnVnX2xvZ19kZWZhdWx0KSA/ICAgICBcCi0gICAgICAgIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uKE5VTEwpIDogICAgICAgIFwKLSAgICAgICAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24oZnVuYykKLQotLyoqCi0gKiBHU1RfREVCVUdfQ0FURUdPUlk6Ci0gKiBAY2F0OiB0aGUgY2F0ZWdvcnkKLSAqCi0gKiBEZWZpbmVzIGEgR3N0RGVidWdDYXRlZ29yeSB2YXJpYWJsZS4KLSAqIFRoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KLSAqLwotI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUlkoY2F0KSBHc3REZWJ1Z0NhdGVnb3J5ICpjYXQgPSBOVUxMCi0vKioKLSAqIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk46Ci0gKiBAY2F0OiB0aGUgY2F0ZWdvcnkKLSAqCi0gKiBEZWNsYXJlcyBhIEdzdERlYnVnQ2F0ZWdvcnkgdmFyaWFibGUgYXMgZXh0ZXJuLiBVc2UgaW4gaGVhZGVyIGZpbGVzLgotICogVGhpcyBtYWNybyBleHBhbmRzIHRvIG5vdGhpbmcgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkLgotICovCi0jZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4oY2F0KSBleHRlcm4gR3N0RGVidWdDYXRlZ29yeSAqY2F0Ci0KLS8qKgotICogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQzoKLSAqIEBjYXQ6IHRoZSBjYXRlZ29yeQotICoKLSAqIERlZmluZXMgYSBzdGF0aWMgR3N0RGVidWdDYXRlZ29yeSB2YXJpYWJsZS4KLSAqIFRoaXMgbWFjcm8gZXhwYW5kcyB0byBub3RoaW5nIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZC4KLSAqLwotI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKGNhdCkgc3RhdGljIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IE5VTEwKLQotLyoqCi0gKiBHU1RfREVCVUdfQ0FURUdPUllfSU5JVDoKLSAqIEBjYXQ6IHRoZSBjYXRlZ29yeSB0byBpbml0aWFsaXplLgotICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBjYXRlZ29yeS4KLSAqIEBjb2xvcjogdGhlIGNvbG9ycyB0byB1c2UgZm9yIGEgY29sb3IgcmVwcmVzZW50YXRpb24gb3IgMCBmb3Igbm8gY29sb3IuCi0gKiBAZGVzY3JpcHRpb246IG9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXRlZ29yeS4KLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyAjR3N0RGVidWdDYXRlZ29yeSB3aXRoIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIGFuZCBzZXQgdG8KLSAqIHRoZSBkZWZhdWx0IHRocmVzaG9sZC4KLSAqCi0gKiA8bm90ZT4KLSAqIDxwYXJhPgotICogVGhpcyBtYWNybyBleHBhbmRzIHRvIG5vdGhpbmcgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkLgotICogPC9wYXJhPgotICogPHBhcmE+Ci0gKiBXaGVuIG5hbWluZyB5b3VyIGNhdGVnb3J5LCBwbGVhc2UgZm9sbG93IHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMgdG8gZW5zdXJlCi0gKiB0aGF0IHRoZSBwYXR0ZXJuIG1hdGNoaW5nIGZvciBjYXRlZ29yaWVzIHdvcmtzIGFzIGV4cGVjdGVkLiBJdCBpcyBub3QKLSAqIGVhcnRoLXNoYXR0ZXJpbmcgaWYgeW91IGRvbid0IGZvbGxvdyB0aGVzZSBjb252ZW50aW9ucywgYnV0IGl0IHdvdWxkIGJlIG5pY2UKLSAqIGZvciBldmVyeW9uZS4KLSAqIDwvcGFyYT4KLSAqIDxwYXJhPgotICogSWYgeW91IGRlZmluZSBhIGNhdGVnb3J5IGZvciBhIHBsdWdpbiBvciBhIGZlYXR1cmUgb2YgaXQsIG5hbWUgdGhlIGNhdGVnb3J5Ci0gKiBsaWtlIHRoZSBmZWF0dXJlLiBTbyBpZiB5b3Ugd2FudGVkIHRvIHdyaXRlIGEgImZpbGVzcmMiIGVsZW1lbnQsIHlvdSB3b3VsZAotICogbmFtZSB0aGUgY2F0ZWdvcnkgImZpbGVzcmMiLiBVc2UgbG93ZXJjYXNlIGxldHRlcnMgb25seS4KLSAqIElmIHlvdSBkZWZpbmUgbW9yZSB0aGFuIG9uZSBjYXRlZ29yeSBmb3IgdGhlIHNhbWUgZWxlbWVudCwgYXBwZW5kIGFuCi0gKiB1bmRlcnNjb3JlIGFuZCBhbiBpZGVudGlmaWVyIHRvIHlvdXIgY2F0ZWdvcmllcywgbGlrZSB0aGlzOiAiZmlsZXNyY19jYWNoZSIKLSAqIDwvcGFyYT4KLSAqIDxwYXJhPgotICogSWYgeW91IGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gYXBwbGljYXRpb24gdXNpbmcgZGVidWdnaW5nIGNhdGVnb3JpZXMsIHVzZSBhCi0gKiBjb21tb24gcHJlZml4IGZvbGxvd2VkIGJ5IGFuIHVuZGVyc2NvcmUgZm9yIGFsbCB5b3VyIGNhdGVnb3JpZXMuIEdTdHJlYW1lcgotICogdXNlcyB0aGUgR1NUIHByZWZpeCBzbyBHU3RyZWFtZXIgY2F0ZWdvcmllcyBsb29rIGxpa2UgIkdTVF9TVEFURVMiLiBCZSBzdXJlCi0gKiB0byBpbmNsdWRlIHVwcGVyY2FzZSBsZXR0ZXJzLgotICogPC9wYXJhPgotICogPC9ub3RlPgotICovCi0jZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKGNhdCxuYW1lLGNvbG9yLGRlc2NyaXB0aW9uKSBHX1NUTVRfU1RBUlR7XAotICBpZiAoY2F0ID09IE5VTEwpCQkJCQkJCVwKLSAgICBjYXQgPSBfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldyAobmFtZSxjb2xvcixkZXNjcmlwdGlvbik7CQlcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdTVF9ERUJVR19DQVRFR09SWV9HRVQ6Ci0gKiBAY2F0OiB0aGUgY2F0ZWdvcnkgdG8gaW5pdGlhbGl6ZS4KLSAqIEBuYW1lOiBsb2cgY2F0ZWdvcnkgbmFtZQotICoKLSAqIExvb2tzIHVwIGFuIGV4aXN0aW5nICNHc3REZWJ1Z0NhdGVnb3J5IGJ5IGl0cyBAbmFtZSBhbmQgc2V0cyBAY2F0LiBJZiB0aGUKLSAqIGNhdGVnb3J5IGlzIG5vdCBmb3VuZCwgYnV0IEdTVF9DQVRfREVGQVVMVCBpcyBkZWZpbmVkLCB0aGF0IGlzIGFzc2lnbmVkIHRvCi0gKiBAY2F0LiBPdGhlcndpc2UgQGNhdCB3aWxsIGJlICVOVUxMLgotICoKLSAqIHxbPCEtLSBsYW5ndWFnZT0iQyIgLS0+Ci0gKiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfbXlwbHVnaW5fZGVidWcpOwotICogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X215cGx1Z2luX2RlYnVnCi0gKiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX1BFUkZPUk1BTkNFKTsKLSAqIC4uLgotICogR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9teXBsdWdpbl9kZWJ1ZywgIm15cGx1Z2luIiwgMCwgIm5pY2UgZWxlbWVudCIpOwotICogR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgIkdTVF9QRVJGT1JNQU5DRSIpOwotICogXXwKLSAqLwotI2lmZGVmIEdTVF9DQVRfREVGQVVMVAotI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUllfR0VUKGNhdCxuYW1lKSAgR19TVE1UX1NUQVJUe1wKLSAgY2F0ID0gX2dzdF9kZWJ1Z19nZXRfY2F0ZWdvcnkgKG5hbWUpOwkJCVwKLSAgaWYgKCFjYXQpIHsJCQkJCQlcCi0gICAgY2F0ID0gR1NUX0NBVF9ERUZBVUxUOwkJCQlcCi0gIH0JCQkJCQkJXAotfUdfU1RNVF9FTkQKLSNlbHNlCi0jZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9HRVQoY2F0LG5hbWUpICBHX1NUTVRfU1RBUlR7XAotICBjYXQgPSBfZ3N0X2RlYnVnX2dldF9jYXRlZ29yeSAobmFtZSk7CQkJXAotfUdfU1RNVF9FTkQKLSNlbmRpZgotCi0vKioKLSAqIEdTVF9DQVRfREVGQVVMVDoKLSAqCi0gKiBEZWZhdWx0IGdzdHJlYW1lciBjb3JlIGRlYnVnIGxvZyBjYXRlZ29yeS4gUGxlYXNlIGRlZmluZSB5b3VyIG93bi4KLSAqLwotR1NUX0VYUE9SVCBHc3REZWJ1Z0NhdGVnb3J5ICoJR1NUX0NBVF9ERUZBVUxUOwotLyogdGhpcyBzeW1ib2wgbWF5IG5vdCBiZSB1c2VkICovCi1HU1RfRVhQT1JUIGdib29sZWFuCQkJX2dzdF9kZWJ1Z19lbmFibGVkOwotCi0vKiB0aGUgbWluIGRlYnVnIGxldmVsLCB1c2VkIGZvciBxdWlja2x5IGRpc2NhcmRpbmcgZGVidWcKLSAqIG1lc3NhZ2VzIHRoYXQgZmFsbCB1bmRlciB0aGUgdGhyZXNob2xkLiAqLwotR1NUX0VYUE9SVCBHc3REZWJ1Z0xldmVsICAgICAgICAgICAgX2dzdF9kZWJ1Z19taW47Ci0KLS8qKgotICogR1NUX0NBVF9MRVZFTF9MT0c6Ci0gKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKLSAqIEBsZXZlbDogdGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlCi0gKiBAb2JqZWN0OiAoYWxsb3ctbm9uZSk6IHRoZSAjR09iamVjdCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvIG9yICVOVUxMIGlmIG5vbmUKLSAqIEAuLi46IEEgcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0cyBhIGRlYnVnZ2luZyBtZXNzYWdlLiBUaGlzIGlzIHRoZSBtb3N0IGdlbmVyYWwgbWFjcm8gZm9yIG91dHB1dHRpbmcKLSAqIGRlYnVnZ2luZyBtZXNzYWdlcy4gWW91IHdpbGwgcHJvYmFibHkgd2FudCB0byB1c2Ugb25lIG9mIHRoZSBvbmVzIGRlc2NyaWJlZAotICogYmVsb3cuCi0gKi8KLSNpZmRlZiBHX0hBVkVfSVNPX1ZBUkFSR1MKLSNkZWZpbmUgR1NUX0NBVF9MRVZFTF9MT0coY2F0LGxldmVsLG9iamVjdCwuLi4pIEdfU1RNVF9TVEFSVHsJCVwKLSAgaWYgKEdfVU5MSUtFTFkgKChsZXZlbCkgPD0gR1NUX0xFVkVMX01BWCAmJiAobGV2ZWwpIDw9IF9nc3RfZGVidWdfbWluKSkgewkJCQkJCVwKLSAgICBnc3RfZGVidWdfbG9nICgoY2F0KSwgKGxldmVsKSwgX19GSUxFX18sIEdTVF9GVU5DVElPTiwgX19MSU5FX18sCVwKLSAgICAgICAgKEdPYmplY3QgKikgKG9iamVjdCksIF9fVkFfQVJHU19fKTsJCQkJXAotICB9CQkJCQkJCQkJXAotfUdfU1RNVF9FTkQKLSNlbHNlIC8qIEdfSEFWRV9HTlVDX1ZBUkFSR1MgKi8KLSNpZmRlZiBHX0hBVkVfR05VQ19WQVJBUkdTCi0jZGVmaW5lIEdTVF9DQVRfTEVWRUxfTE9HKGNhdCxsZXZlbCxvYmplY3QsYXJncy4uLikgR19TVE1UX1NUQVJUewlcCi0gIGlmIChHX1VOTElLRUxZICgobGV2ZWwpIDw9IEdTVF9MRVZFTF9NQVggJiYgKGxldmVsKSA8PSBfZ3N0X2RlYnVnX21pbikpIHsJCQkJCQlcCi0gICAgZ3N0X2RlYnVnX2xvZyAoKGNhdCksIChsZXZlbCksIF9fRklMRV9fLCBHU1RfRlVOQ1RJT04sIF9fTElORV9fLAlcCi0gICAgICAgIChHT2JqZWN0ICopIChvYmplY3QpLCAjI2FyZ3MgKTsJCQkJCVwKLSAgfQkJCQkJCQkJCVwKLX1HX1NUTVRfRU5ECi0jZWxzZSAvKiBubyB2YXJpYWRpYyBtYWNyb3MsIHVzZSBpbmxpbmUgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LAotICAgIEdzdERlYnVnTGV2ZWwgbGV2ZWwsIGdwb2ludGVyIG9iamVjdCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmFyZ3MpCi17Ci0gIGlmIChHX1VOTElLRUxZICgobGV2ZWwpIDw9IEdTVF9MRVZFTF9NQVggJiYgKGxldmVsKSA8PSBfZ3N0X2RlYnVnX21pbikpIHsKLSAgICBnc3RfZGVidWdfbG9nX3ZhbGlzdCAoY2F0LCBsZXZlbCwgIiIsICIiLCAwLCAoR09iamVjdCAqKSBvYmplY3QsIGZvcm1hdCwKLSAgICAgICAgdmFyYXJncyk7Ci0gIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfQ0FUX0xFVkVMX0xPRyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgR3N0RGVidWdMZXZlbCBsZXZlbCwKLSAgICBncG9pbnRlciBvYmplY3QsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoY2F0LCBsZXZlbCwgb2JqZWN0LCBmb3JtYXQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotI2VuZGlmCi0jZW5kaWYgLyogR19IQVZFX0lTT19WQVJBUkdTICovCi0KLS8qIFRoaXMgb25lIGRvZXNuJ3QgaGF2ZSB2YXJhcmdzIGluIHRoZSBtYWNybywgc28gaXQncyBkaWZmZXJlbnQgdGhhbiBhbGwgdGhlCi0gKiBvdGhlciBtYWNyb3MgYW5kIGhlbmNlIGluIGEgc2VwYXJhdGUgYmxvY2sgcmlnaHQgaGVyZS4gRG9jcyBjaHVua3MgYXJlCi0gKiB3aXRoIHRoZSBvdGhlciBkb2MgY2h1bmtzIGJlbG93IHRob3VnaC4gKi8KLSNkZWZpbmUgX19HU1RfQ0FUX01FTURVTVBfTE9HKGNhdCxvYmplY3QsbXNnLGRhdGEsbGVuZ3RoKSBHX1NUTVRfU1RBUlR7ICAgICAgIFwKLSAgICBpZiAoR19VTkxJS0VMWSAoR1NUX0xFVkVMX01FTURVTVAgPD0gR1NUX0xFVkVMX01BWCAmJgkJICAgICAgXAotCQkgICAgR1NUX0xFVkVMX01FTURVTVAgPD0gX2dzdF9kZWJ1Z19taW4pKSB7CQkgICAgICBcCi0gICAgX2dzdF9kZWJ1Z19kdW1wX21lbSAoKGNhdCksIF9fRklMRV9fLCBHU1RfRlVOQ1RJT04sIF9fTElORV9fLCAgICAgICAgICAgICBcCi0gICAgICAgIChHT2JqZWN0ICopIChvYmplY3QpLCAobXNnKSwgKGRhdGEpLCAobGVuZ3RoKSk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19R19TVE1UX0VORAotCi0jZGVmaW5lIEdTVF9DQVRfTUVNRFVNUF9PQkpFQ1QoY2F0LG9iaixtc2csZGF0YSxsZW5ndGgpICBcCi0gICAgX19HU1RfQ0FUX01FTURVTVBfTE9HKGNhdCxvYmosbXNnLGRhdGEsbGVuZ3RoKQotI2RlZmluZSBHU1RfQ0FUX01FTURVTVAoY2F0LG1zZyxkYXRhLGxlbmd0aCkgICAgICAgICAgICAgXAotICAgIF9fR1NUX0NBVF9NRU1EVU1QX0xPRyhjYXQsTlVMTCxtc2csZGF0YSxsZW5ndGgpCi0jZGVmaW5lIEdTVF9NRU1EVU1QX09CSkVDVChvYmosbXNnLGRhdGEsbGVuZ3RoKSAgICAgICAgICBcCi0gICAgX19HU1RfQ0FUX01FTURVTVBfTE9HKEdTVF9DQVRfREVGQVVMVCxvYmosbXNnLGRhdGEsbGVuZ3RoKQotI2RlZmluZSBHU1RfTUVNRFVNUChtc2csZGF0YSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9fR1NUX0NBVF9NRU1EVU1QX0xPRyhHU1RfQ0FUX0RFRkFVTFQsTlVMTCxtc2csZGF0YSxsZW5ndGgpCi0KLS8qKgotICogR1NUX0NBVF9FUlJPUl9PQkpFQ1Q6Ci0gKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKLSAqIEBvYmo6IHRoZSAjR09iamVjdCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvCi0gKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKLSAqCi0gKiBPdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0NBVF9XQVJOSU5HX09CSkVDVDoKLSAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQotICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0NBVF9JTkZPX09CSkVDVDoKLSAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQotICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGdpdmVuCi0gKiBjYXRlZ29yeS4KLSAqLwotLyoqCi0gKiBHU1RfQ0FUX0RFQlVHX09CSkVDVDoKLSAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQotICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhbiBkZWJ1Z2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0NBVF9MT0dfT0JKRUNUOgotICogQGNhdDogY2F0ZWdvcnkgdG8gdXNlCi0gKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bwotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGFuIGxvZ2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0NBVF9GSVhNRV9PQkpFQ1Q6Ci0gKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKLSAqIEBvYmo6IHRoZSAjR09iamVjdCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvCi0gKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKLSAqCi0gKiBPdXRwdXQgYSBmaXhtZSBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KLSAqLwotLyoqCi0gKiBHU1RfQ0FUX1RSQUNFX09CSkVDVDoKLSAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQotICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhIHRyYWNpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZ2l2ZW4KLSAqIGNhdGVnb3J5LgotICovCi0vKioKLSAqIEdTVF9DQVRfTUVNRFVNUF9PQkpFQ1Q6Ci0gKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKLSAqIEBvYmo6IHRoZSAjR09iamVjdCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvCi0gKiBAbXNnOiBtZXNzYWdlIHN0cmluZyB0byBsb2cgd2l0aCB0aGUgZGF0YQotICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gb3V0cHV0Ci0gKiBAbGVuZ3RoOiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGEgaGV4ZHVtcCBvZiBAZGF0YSByZWxhdGluZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBnaXZlbgotICogY2F0ZWdvcnkuCi0gKi8KLQotCi0vKioKLSAqIEdTVF9DQVRfRVJST1I6Ci0gKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KLSAqLwotLyoqCi0gKiBHU1RfQ0FUX1dBUk5JTkc6Ci0gKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhbiB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgotICovCi0vKioKLSAqIEdTVF9DQVRfSU5GTzoKLSAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZSBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0NBVF9ERUJVRzoKLSAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGFuIGRlYnVnZ2luZyBtZXNzYWdlIGluIHRoZSBnaXZlbiBjYXRlZ29yeS4KLSAqLwotLyoqCi0gKiBHU1RfQ0FUX0xPRzoKLSAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGFuIGxvZ2dpbmcgbWVzc2FnZSBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0NBVF9GSVhNRToKLSAqIEBjYXQ6IGNhdGVnb3J5IHRvIHVzZQotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGFuIGZpeG1lIG1lc3NhZ2UgaW4gdGhlIGdpdmVuIGNhdGVnb3J5LgotICovCi0vKioKLSAqIEdTVF9DQVRfVFJBQ0U6Ci0gKiBAY2F0OiBjYXRlZ29yeSB0byB1c2UKLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhIHRyYWNpbmcgbWVzc2FnZSBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0NBVF9NRU1EVU1QOgotICogQGNhdDogY2F0ZWdvcnkgdG8gdXNlCi0gKiBAbXNnOiBtZXNzYWdlIHN0cmluZyB0byBsb2cgd2l0aCB0aGUgZGF0YQotICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gb3V0cHV0Ci0gKiBAbGVuZ3RoOiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGEgaGV4ZHVtcCBvZiBAZGF0YSBpbiB0aGUgZ2l2ZW4gY2F0ZWdvcnkuCi0gKi8KLQotCi0vKioKLSAqIEdTVF9FUlJPUl9PQkpFQ1Q6Ci0gKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bwotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgYmVsb25naW5nIHRvIHRoZSBnaXZlbiBvYmplY3QgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX1dBUk5JTkdfT0JKRUNUOgotICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KLSAqLwotLyoqCi0gKiBHU1RfSU5GT19PQkpFQ1Q6Ci0gKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bwotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdAotICogY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0RFQlVHX09CSkVDVDoKLSAqIEBvYmo6IHRoZSAjR09iamVjdCB0aGUgbWVzc2FnZSBiZWxvbmdzIHRvCi0gKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKLSAqCi0gKiBPdXRwdXQgYSBkZWJ1Z2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdAotICogY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0xPR19PQkpFQ1Q6Ci0gKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bwotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGEgbG9nZ2luZyBtZXNzYWdlIGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gb2JqZWN0IGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgotICovCi0vKioKLSAqIEdTVF9GSVhNRV9PQkpFQ1Q6Ci0gKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bwotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGEgZml4bWUgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KLSAqLwotLyoqCi0gKiBHU1RfVFJBQ0VfT0JKRUNUOgotICogQG9iajogdGhlICNHT2JqZWN0IHRoZSBtZXNzYWdlIGJlbG9uZ3MgdG8KLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhIHRyYWNpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KLSAqLwotLyoqCi0gKiBHU1RfTUVNRFVNUF9PQkpFQ1Q6Ci0gKiBAb2JqOiB0aGUgI0dPYmplY3QgdGhlIG1lc3NhZ2UgYmVsb25ncyB0bwotICogQG1zZzogbWVzc2FnZSBzdHJpbmcgdG8gbG9nIHdpdGggdGhlIGRhdGEKLSAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIG91dHB1dAotICogQGxlbmd0aDogbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhIGxvZ2dpbmcgbWVzc2FnZSBiZWxvbmdpbmcgdG8gdGhlIGdpdmVuIG9iamVjdCBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KLSAqLwotCi0KLS8qKgotICogR1NUX0VSUk9SOgotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX1dBUk5JTkc6Ci0gKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKLSAqCi0gKiBPdXRwdXQgYSB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0lORk86Ci0gKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKLSAqCi0gKiBPdXRwdXQgYW4gaW5mb3JtYXRpb25hbCBtZXNzYWdlIGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgotICovCi0vKioKLSAqIEdTVF9ERUJVRzoKLSAqIEAuLi46IHByaW50Zi1zdHlsZSBtZXNzYWdlIHRvIG91dHB1dAotICoKLSAqIE91dHB1dCBhIGRlYnVnZ2luZyBtZXNzYWdlIGluIHRoZSBkZWZhdWx0IGNhdGVnb3J5LgotICovCi0vKioKLSAqIEdTVF9MT0c6Ci0gKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKLSAqCi0gKiBPdXRwdXQgYSBsb2dnaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX0ZJWE1FOgotICogQC4uLjogcHJpbnRmLXN0eWxlIG1lc3NhZ2UgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGEgZml4bWUgbWVzc2FnZSBpbiB0aGUgZGVmYXVsdCBjYXRlZ29yeS4KLSAqLwotLyoqCi0gKiBHU1RfVFJBQ0U6Ci0gKiBALi4uOiBwcmludGYtc3R5bGUgbWVzc2FnZSB0byBvdXRwdXQKLSAqCi0gKiBPdXRwdXQgYSB0cmFjaW5nIG1lc3NhZ2UgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCi0gKi8KLS8qKgotICogR1NUX01FTURVTVA6Ci0gKiBAbXNnOiBtZXNzYWdlIHN0cmluZyB0byBsb2cgd2l0aCB0aGUgZGF0YQotICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gb3V0cHV0Ci0gKiBAbGVuZ3RoOiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gb3V0cHV0Ci0gKgotICogT3V0cHV0IGEgaGV4ZHVtcCBvZiBAZGF0YS4KLSAqLwotCi0jaWZkZWYgR19IQVZFX0lTT19WQVJBUkdTCi0KLSNkZWZpbmUgR1NUX0NBVF9FUlJPUl9PQkpFQ1QoY2F0LG9iaiwuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9FUlJPUiwgICBvYmosICBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgR1NUX0NBVF9XQVJOSU5HX09CSkVDVChjYXQsb2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfQ0FUX0lORk9fT0JKRUNUKGNhdCxvYmosLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfSU5GTywgICAgb2JqLCAgX19WQV9BUkdTX18pCi0jZGVmaW5lIEdTVF9DQVRfREVCVUdfT0JKRUNUKGNhdCxvYmosLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfREVCVUcsICAgb2JqLCAgX19WQV9BUkdTX18pCi0jZGVmaW5lIEdTVF9DQVRfTE9HX09CSkVDVChjYXQsb2JqLC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9MT0csICAgICBvYmosICBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgR1NUX0NBVF9GSVhNRV9PQkpFQ1QoY2F0LG9iaiwuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgICBvYmosICBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgR1NUX0NBVF9UUkFDRV9PQkpFQ1QoY2F0LG9iaiwuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9UUkFDRSwgICBvYmosICBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBHU1RfQ0FUX0VSUk9SKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0VSUk9SLCAgIE5VTEwsIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfQ0FUX1dBUk5JTkcoY2F0LC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9XQVJOSU5HLCBOVUxMLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgR1NUX0NBVF9JTkZPKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0lORk8sICAgIE5VTEwsIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfQ0FUX0RFQlVHKGNhdCwuLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0RFQlVHLCAgIE5VTEwsIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfQ0FUX0xPRyhjYXQsLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9MT0csICAgICBOVUxMLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgR1NUX0NBVF9GSVhNRShjYXQsLi4uKQkJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgICBOVUxMLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgR1NUX0NBVF9UUkFDRShjYXQsLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIEdTVF9FUlJPUl9PQkpFQ1Qob2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCAgIG9iaiwgIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfV0FSTklOR19PQkpFQ1Qob2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfSU5GT19PQkpFQ1Qob2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0lORk8sICAgIG9iaiwgIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfREVCVUdfT0JKRUNUKG9iaiwuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9ERUJVRywgICBvYmosICBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgR1NUX0xPR19PQkpFQ1Qob2JqLC4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9MT0csICAgICBvYmosICBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgR1NUX0ZJWE1FX09CSkVDVChvYmosLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfRklYTUUsICAgb2JqLCAgX19WQV9BUkdTX18pCi0jZGVmaW5lIEdTVF9UUkFDRV9PQkpFQ1Qob2JqLC4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1RSQUNFLCAgIG9iaiwgIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIEdTVF9FUlJPUiguLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCAgIE5VTEwsIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfV0FSTklORyguLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfV0FSTklORywgTlVMTCwgX19WQV9BUkdTX18pCi0jZGVmaW5lIEdTVF9JTkZPKC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfSU5GTywgICAgTlVMTCwgX19WQV9BUkdTX18pCi0jZGVmaW5lIEdTVF9ERUJVRyguLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0RFQlVHLCAgIE5VTEwsIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfTE9HKC4uLikJCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfTE9HLCAgICAgTlVMTCwgX19WQV9BUkdTX18pCi0jZGVmaW5lIEdTVF9GSVhNRSguLi4pCQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0ZJWE1FLCAgIE5VTEwsIF9fVkFfQVJHU19fKQotI2RlZmluZSBHU1RfVFJBQ0UoLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsIF9fVkFfQVJHU19fKQotCi0jZWxzZQotI2lmZGVmIEdfSEFWRV9HTlVDX1ZBUkFSR1MKLQotI2RlZmluZSBHU1RfQ0FUX0VSUk9SX09CSkVDVChjYXQsb2JqLGFyZ3MuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9FUlJPUiwgICBvYmosICAjI2FyZ3MgKQotI2RlZmluZSBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKGNhdCxvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgICMjYXJncyApCi0jZGVmaW5lIEdTVF9DQVRfSU5GT19PQkpFQ1QoY2F0LG9iaixhcmdzLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfSU5GTywgICAgb2JqLCAgIyNhcmdzICkKLSNkZWZpbmUgR1NUX0NBVF9ERUJVR19PQkpFQ1QoY2F0LG9iaixhcmdzLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfREVCVUcsICAgb2JqLCAgIyNhcmdzICkKLSNkZWZpbmUgR1NUX0NBVF9MT0dfT0JKRUNUKGNhdCxvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0xPRywgICAgIG9iaiwgICMjYXJncyApCi0jZGVmaW5lIEdTVF9DQVRfRklYTUVfT0JKRUNUKGNhdCxvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0ZJWE1FLCAgIG9iaiwgICMjYXJncyApCi0jZGVmaW5lIEdTVF9DQVRfVFJBQ0VfT0JKRUNUKGNhdCxvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCAgIG9iaiwgICMjYXJncyApCi0KLSNkZWZpbmUgR1NUX0NBVF9FUlJPUihjYXQsYXJncy4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9FUlJPUiwgICBOVUxMLCAjI2FyZ3MgKQotI2RlZmluZSBHU1RfQ0FUX1dBUk5JTkcoY2F0LGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfV0FSTklORywgTlVMTCwgIyNhcmdzICkKLSNkZWZpbmUgR1NUX0NBVF9JTkZPKGNhdCxhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX0lORk8sICAgIE5VTEwsICMjYXJncyApCi0jZGVmaW5lIEdTVF9DQVRfREVCVUcoY2F0LGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfREVCVUcsICAgTlVMTCwgIyNhcmdzICkKLSNkZWZpbmUgR1NUX0NBVF9MT0coY2F0LGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoY2F0LCBHU1RfTEVWRUxfTE9HLCAgICAgTlVMTCwgIyNhcmdzICkKLSNkZWZpbmUgR1NUX0NBVF9GSVhNRShjYXQsYXJncy4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgICBOVUxMLCAjI2FyZ3MgKQotI2RlZmluZSBHU1RfQ0FUX1RSQUNFKGNhdCxhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsICMjYXJncyApCi0KLSNkZWZpbmUgR1NUX0VSUk9SX09CSkVDVChvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCAgIG9iaiwgICMjYXJncyApCi0jZGVmaW5lIEdTVF9XQVJOSU5HX09CSkVDVChvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1dBUk5JTkcsIG9iaiwgICMjYXJncyApCi0jZGVmaW5lIEdTVF9JTkZPX09CSkVDVChvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0lORk8sICAgIG9iaiwgICMjYXJncyApCi0jZGVmaW5lIEdTVF9ERUJVR19PQkpFQ1Qob2JqLGFyZ3MuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9ERUJVRywgICBvYmosICAjI2FyZ3MgKQotI2RlZmluZSBHU1RfTE9HX09CSkVDVChvYmosYXJncy4uLikJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0xPRywgICAgIG9iaiwgICMjYXJncyApCi0jZGVmaW5lIEdTVF9GSVhNRV9PQkpFQ1Qob2JqLGFyZ3MuLi4pCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9GSVhNRSwgICBvYmosICAjI2FyZ3MgKQotI2RlZmluZSBHU1RfVFJBQ0VfT0JKRUNUKG9iaixhcmdzLi4uKQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfVFJBQ0UsICAgb2JqLCAgIyNhcmdzICkKLQotI2RlZmluZSBHU1RfRVJST1IoYXJncy4uLikJCUdTVF9DQVRfTEVWRUxfTE9HIChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9FUlJPUiwgICBOVUxMLCAjI2FyZ3MgKQotI2RlZmluZSBHU1RfV0FSTklORyhhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1dBUk5JTkcsIE5VTEwsICMjYXJncyApCi0jZGVmaW5lIEdTVF9JTkZPKGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfSU5GTywgICAgTlVMTCwgIyNhcmdzICkKLSNkZWZpbmUgR1NUX0RFQlVHKGFyZ3MuLi4pCQlHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfREVCVUcsICAgTlVMTCwgIyNhcmdzICkKLSNkZWZpbmUgR1NUX0xPRyhhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0xPRywgICAgIE5VTEwsICMjYXJncyApCi0jZGVmaW5lIEdTVF9GSVhNRShhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0ZJWE1FLCAgIE5VTEwsICMjYXJncyApCi0jZGVmaW5lIEdTVF9UUkFDRShhcmdzLi4uKQkJR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX1RSQUNFLCAgIE5VTEwsICMjYXJncyApCi0KLSNlbHNlCi0vKiBubyB2YXJpYWRpYyBtYWNyb3MsIHVzZSBpbmxpbmUgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9FUlJPUl9PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAotICAgIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX0VSUk9SLCBvYmosIGZvcm1hdCwgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9XQVJOSU5HX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLAotICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoY2F0LCBHU1RfTEVWRUxfV0FSTklORywgb2JqLCBmb3JtYXQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfSU5GT19PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAotICAgIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX0lORk8sIG9iaiwgZm9ybWF0LCB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfQ0FUX0RFQlVHX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoY2F0LCBHU1RfTEVWRUxfREVCVUcsIG9iaiwgZm9ybWF0LCB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfQ0FUX0xPR19PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAotICAgIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX0xPRywgb2JqLCBmb3JtYXQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfRklYTUVfT0JKRUNUIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgb2JqLCBmb3JtYXQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfVFJBQ0VfT0JKRUNUIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9UUkFDRSwgb2JqLCBmb3JtYXQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfRVJST1IgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoY2F0LCBHU1RfTEVWRUxfRVJST1IsIE5VTEwsIGZvcm1hdCwgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9XQVJOSU5HIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX1dBUk5JTkcsIE5VTEwsIGZvcm1hdCwgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9JTkZPIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX0lORk8sIE5VTEwsIGZvcm1hdCwgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9ERUJVRyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9ERUJVRywgTlVMTCwgZm9ybWF0LCB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfQ0FUX0xPRyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9MT0csIE5VTEwsIGZvcm1hdCwgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9GSVhNRSAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChjYXQsIEdTVF9MRVZFTF9GSVhNRSwgTlVMTCwgZm9ybWF0LCB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfQ0FUX1RSQUNFIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCBOVUxMLCBmb3JtYXQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9FUlJPUl9PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9FUlJPUiwgb2JqLCBmb3JtYXQsCi0gICAgICB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfV0FSTklOR19PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9XQVJOSU5HLCBvYmosIGZvcm1hdCwKLSAgICAgIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9JTkZPX09CSkVDVCAoZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0lORk8sIG9iaiwgZm9ybWF0LAotICAgICAgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0RFQlVHX09CSkVDVCAoZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0RFQlVHLCBvYmosIGZvcm1hdCwKLSAgICAgIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9MT0dfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfTE9HLCBvYmosIGZvcm1hdCwKLSAgICAgIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9GSVhNRV9PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9GSVhNRSwgb2JqLCBmb3JtYXQsCi0gICAgICB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfVFJBQ0VfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfVFJBQ0UsIG9iaiwgZm9ybWF0LAotICAgICAgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0VSUk9SIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKEdTVF9DQVRfREVGQVVMVCwgR1NUX0xFVkVMX0VSUk9SLCBOVUxMLCBmb3JtYXQsCi0gICAgICB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfV0FSTklORyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9XQVJOSU5HLCBOVUxMLCBmb3JtYXQsCi0gICAgICB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfSU5GTyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9JTkZPLCBOVUxMLCBmb3JtYXQsCi0gICAgICB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfREVCVUcgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfREVCVUcsIE5VTEwsIGZvcm1hdCwKLSAgICAgIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9MT0cgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfTE9HLCBOVUxMLAotICAgICAgZm9ybWF0LCB2YXJhcmdzKTsKLSAgdmFfZW5kICh2YXJhcmdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfRklYTUUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIEdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfRklYTUUsIE5VTEwsIGZvcm1hdCwKLSAgICAgIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9UUkFDRSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgR1NUX0NBVF9MRVZFTF9MT0dfdmFsaXN0IChHU1RfQ0FUX0RFRkFVTFQsIEdTVF9MRVZFTF9UUkFDRSwgTlVMTCwgZm9ybWF0LAotICAgICAgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi0KLS8qKioqKioqKioqIGZ1bmN0aW9uIHBvaW50ZXIgc3R1ZmYgKioqKioqKioqKi8KLQotLyoqCi0gKiBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUjoKLSAqIEBwdHI6IHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyCi0gKgotICogUmVnaXN0ZXIgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2l0aCBpdHMgbmFtZSwgc28gaXQgY2FuIGxhdGVyIGJlIHVzZWQgYnkKLSAqIEdTVF9ERUJVR19GVU5DUFRSX05BTUUoKS4KLSAqCi0gKiBVc2UgdGhpcyB2YXJpYW50IG9mICNHU1RfREVCVUdfRlVOQ1BUUiBpZiB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIEBwdHIuCi0gKi8KLSNkZWZpbmUgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIocHRyKSBcCi0gIF9nc3RfZGVidWdfcmVnaXN0ZXJfZnVuY3B0cigoR3N0RGVidWdGdW5jUHRyKShwdHIpLCAjcHRyKQotLyoqCi0gKiBHU1RfREVCVUdfRlVOQ1BUUjoKLSAqIEBwdHI6IHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyCi0gKgotICogUmVnaXN0ZXIgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2l0aCBpdHMgbmFtZSwgc28gaXQgY2FuIGxhdGVyIGJlIHVzZWQgYnkKLSAqIEdTVF9ERUJVR19GVU5DUFRSX05BTUUoKS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgdmFsdWUgcGFzc2VkIHRvIEBwdHIuCi0gKi8KLSNkZWZpbmUgR1NUX0RFQlVHX0ZVTkNQVFIocHRyKSBcCi0gIChfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIoKEdzdERlYnVnRnVuY1B0cikocHRyKSwgI3B0cikgLCBwdHIpCi0KLS8qKgotICogR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRToKLSAqIEBwdHI6IGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIG9mIHdoaWNoIHRvIGxvb2sgdXAgdGhlIG5hbWUKLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBpZiBpdCB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGgKLSAqIEdTVF9ERUJVR19GVU5DUFRSKCkuIElmIG5vdCwgaXQgcmV0dXJucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwb2ludGVyLgotICoKLSAqIFRoaXMgbWFjcm8gcmV0dXJucyBhIGNvbnN0YW50IHN0cmluZyB3aGljaCBtdXN0IG5vdCBiZSBtb2RpZmllZCBvcgotICogZnJlZWQgYnkgdGhlIGNhbGxlci4KLSAqLwotI2RlZmluZSBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FKHB0cikgXAotICBfZ3N0X2RlYnVnX25hbWVvZl9mdW5jcHRyKChHc3REZWJ1Z0Z1bmNQdHIpcHRyKQotCi0KLSNlbHNlIC8qIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLwotCi0KLSNpZm5kZWYgR1NUX0lORk9fQwotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwotIyAgcHJhZ21hIEdDQyBwb2lzb24gZ3N0X2RlYnVnX2xvZwotIyAgcHJhZ21hIEdDQyBwb2lzb24gZ3N0X2RlYnVnX2xvZ192YWxpc3QKLSMgIHByYWdtYSBHQ0MgcG9pc29uIF9nc3RfZGVidWdfY2F0ZWdvcnlfbmV3Ci0jZW5kaWYKLQotI2RlZmluZSBfZ3N0X2RlYnVnX21pbiBHU1RfTEVWRUxfTk9ORQotCi0jZGVmaW5lIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQobGV2ZWwpCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIGdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQoKQkJKEdTVF9MRVZFTF9OT05FKQotCi0jZGVmaW5lIGdzdF9kZWJ1Z19sZXZlbF9nZXRfbmFtZShsZXZlbCkJCQkJKCJOT05FIikKLSNkZWZpbmUgZ3N0X2RlYnVnX21lc3NhZ2VfZ2V0KG1lc3NhZ2UpICAJCQkoIiIpCi0jZGVmaW5lIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uKGZ1bmMsZGF0YSxub3RpZnkpICAgIEdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgZ3N0X2RlYnVnX3NldF9hY3RpdmUoYWN0aXZlKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgZ3N0X2RlYnVnX2lzX2FjdGl2ZSgpCQkJCShGQUxTRSkKLSNkZWZpbmUgZ3N0X2RlYnVnX3NldF9jb2xvcmVkKGNvbG9yZWQpCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBnc3RfZGVidWdfc2V0X2NvbG9yX21vZGUobW9kZSkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIGdzdF9kZWJ1Z19zZXRfY29sb3JfbW9kZV9mcm9tX3N0cmluZyhtb2RlKQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIGdzdF9kZWJ1Z19pc19jb2xvcmVkKCkJCQkJKEZBTFNFKQotI2RlZmluZSBnc3RfZGVidWdfZ2V0X2NvbG9yX21vZGUoKQkJCShHU1RfREVCVUdfQ09MT1JfTU9ERV9PRkYpCi0jZGVmaW5lIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQobGV2ZWwpCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIGdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQoKQkJKEdTVF9MRVZFTF9OT05FKQotI2RlZmluZSBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZShuYW1lLGxldmVsKQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIGdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUobmFtZSkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotCi0vKiB3ZSBhcmUgdXNpbmcgZHVtbXkgZnVuY3Rpb24gcHJvdG90eXBlcyBoZXJlIHRvIGVhdCAnOycgYXMgdGhlc2UgbWFjcm9zIGFyZQotICogdXNlZCBvdXRzaWRlIG9mIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUlkodmFyKQkJCQl2b2lkIF9nc3RfZGVidWdfZHVtbXlfIyN2YXIgKHZvaWQpCi0jZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4odmFyKQkJCXZvaWQgX2dzdF9kZWJ1Z19kdW1teV9leHRlcm5fIyN2YXIgKHZvaWQpCi0jZGVmaW5lIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUModmFyKQkJCXZvaWQgX2dzdF9kZWJ1Z19kdW1teV9zdGF0aWNfIyN2YXIgKHZvaWQpCi0KLSNkZWZpbmUgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQodmFyLG5hbWUsY29sb3IsZGVzYykJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfREVCVUdfQ0FURUdPUllfR0VUKHZhcixuYW1lKQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZnJlZShjYXRlZ29yeSkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgZ3N0X2RlYnVnX2NhdGVnb3J5X3NldF90aHJlc2hvbGQoY2F0ZWdvcnksbGV2ZWwpIEdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgZ3N0X2RlYnVnX2NhdGVnb3J5X3Jlc2V0X3RocmVzaG9sZChjYXRlZ29yeSkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZChjYXRlZ29yeSkJKEdTVF9MRVZFTF9OT05FKQotI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUoY2F0KQkJKCIiKQotI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2NvbG9yKGNhdCkJCSgwKQotI2RlZmluZSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uKGNhdCkJCSgiIikKLSNkZWZpbmUgZ3N0X2RlYnVnX2dldF9hbGxfY2F0ZWdvcmllcygpCQkJKE5VTEwpCi0jZGVmaW5lIGdzdF9kZWJ1Z19jb25zdHJ1Y3RfdGVybV9jb2xvcihjb2xvcmluZm8pCShnX3N0cmR1cCAoIjAwIikpCi0jZGVmaW5lIGdzdF9kZWJ1Z19jb25zdHJ1Y3Rfd2luX2NvbG9yKGNvbG9yaW5mbykJKDApCi0KLSNlbmRpZiAvKiAhR1NUX0lORk9fQyAqLwotCi0jaWZkZWYgR19IQVZFX0lTT19WQVJBUkdTCi0KLSNkZWZpbmUgR1NUX0NBVF9MRVZFTF9MT0coY2F0LGxldmVsLC4uLikJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfQ0FUX0VSUk9SX09CSkVDVCguLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUKC4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9DQVRfSU5GT19PQkpFQ1QoLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NBVF9ERUJVR19PQkpFQ1QoLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NBVF9MT0dfT0JKRUNUKC4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX0ZJWE1FX09CSkVDVCguLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX1RSQUNFX09CSkVDVCguLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotCi0jZGVmaW5lIEdTVF9DQVRfRVJST1IoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9DQVRfV0FSTklORyguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NBVF9JTkZPKC4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX0RFQlVHKC4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX0xPRyguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NBVF9GSVhNRSguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NBVF9UUkFDRSguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfRVJST1JfT0JKRUNUKC4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfV0FSTklOR19PQkpFQ1QoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9JTkZPX09CSkVDVCguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0RFQlVHX09CSkVDVCguLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0xPR19PQkpFQ1QoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9GSVhNRV9PQkpFQ1QoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9UUkFDRV9PQkpFQ1QoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0KLSNkZWZpbmUgR1NUX0VSUk9SKC4uLikJCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX1dBUk5JTkcoLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9JTkZPKC4uLikJCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0RFQlVHKC4uLikJCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0xPRyguLi4pCQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9GSVhNRSguLi4pCQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9UUkFDRSguLi4pCQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0KLSNlbHNlIC8qICFHX0hBVkVfSVNPX1ZBUkFSR1MgKi8KLSNpZmRlZiBHX0hBVkVfR05VQ19WQVJBUkdTCi0KLSNkZWZpbmUgR1NUX0NBVF9MRVZFTF9MT0coY2F0LGxldmVsLGFyZ3MuLi4pCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0KLSNkZWZpbmUgR1NUX0NBVF9FUlJPUl9PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9DQVRfV0FSTklOR19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9DQVRfSU5GT19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9DQVRfREVCVUdfT0JKRUNUKGFyZ3MuLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX0xPR19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9DQVRfRklYTUVfT0JKRUNUKGFyZ3MuLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX1RSQUNFX09CSkVDVChhcmdzLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfQ0FUX0VSUk9SKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NBVF9XQVJOSU5HKGFyZ3MuLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX0lORk8oYXJncy4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX0RFQlVHKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NBVF9MT0coYXJncy4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX0ZJWE1FKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NBVF9UUkFDRShhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0KLSNkZWZpbmUgR1NUX0VSUk9SX09CSkVDVChhcmdzLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX1dBUk5JTkdfT0JKRUNUKGFyZ3MuLi4pCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfSU5GT19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9ERUJVR19PQkpFQ1QoYXJncy4uLikJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9MT0dfT0JKRUNUKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0ZJWE1FX09CSkVDVChhcmdzLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX1RSQUNFX09CSkVDVChhcmdzLi4uKQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfRVJST1IoYXJncy4uLikJCQkJR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfV0FSTklORyhhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9JTkZPKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0RFQlVHKGFyZ3MuLi4pCQkJCUdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0xPRyhhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9GSVhNRShhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9UUkFDRShhcmdzLi4uKQkJCQlHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0KLSNlbHNlIC8qICFHX0hBVkVfR05VQ19WQVJBUkdTICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfTEVWRUxfTE9HX3ZhbGlzdCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwKLSAgICBHc3REZWJ1Z0xldmVsIGxldmVsLCBncG9pbnRlciBvYmplY3QsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJhcmdzKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfRVJST1JfT0JKRUNUIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICAuLi4pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9XQVJOSU5HX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLAotICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfSU5GT19PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAotICAgIC4uLikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfQ0FUX0RFQlVHX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfTE9HX09CSkVDVCAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfRklYTUVfT0JKRUNUIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICAuLi4pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9UUkFDRV9PQkpFQ1QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LAotICAgIC4uLikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfQ0FUX0VSUk9SIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfQ0FUX1dBUk5JTkcgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfSU5GTyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9ERUJVRyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0NBVF9MT0cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfRklYTUUgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9DQVRfVFJBQ0UgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9FUlJPUl9PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX1dBUk5JTkdfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9JTkZPX09CSkVDVCAoZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfREVCVUdfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9MT0dfT0JKRUNUIChncG9pbnRlciBvYmosIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9GSVhNRV9PQkpFQ1QgKGdwb2ludGVyIG9iaiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX1RSQUNFX09CSkVDVCAoZ3BvaW50ZXIgb2JqLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfRVJST1IgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9XQVJOSU5HIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfSU5GTyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX0RFQlVHIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfTE9HIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfRklYTUUgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9UUkFDRSAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci19Ci0KLSNlbmRpZiAvKiBHX0hBVkVfR05VQ19WQVJBUkdTICovCi0jZW5kaWYgLyogR19IQVZFX0lTT19WQVJBUkdTICovCi0KLSNkZWZpbmUgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIocHRyKSBHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9ERUJVR19GVU5DUFRSKHB0cikgKHB0cikKLSNkZWZpbmUgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRShwdHIpIChnX3N0cmR1cF9wcmludGYgKCIlcCIsIHB0cikpCi0KLSNkZWZpbmUgR1NUX0NBVF9NRU1EVU1QX09CSkVDVChjYXQsb2JqLG1zZyxkYXRhLGxlbmd0aCkgR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotI2RlZmluZSBHU1RfQ0FUX01FTURVTVAoY2F0LG1zZyxkYXRhLGxlbmd0aCkgICAgICAgICAgICBHX1NUTVRfU1RBUlR7IH1HX1NUTVRfRU5ECi0jZGVmaW5lIEdTVF9NRU1EVU1QX09CSkVDVChvYmosbXNnLGRhdGEsbGVuZ3RoKSAgICAgICAgIEdfU1RNVF9TVEFSVHsgfUdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX01FTURVTVAobXNnLGRhdGEsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgR19TVE1UX1NUQVJUeyB9R19TVE1UX0VORAotCi0jZW5kaWYgLyogR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCi0KLQotdm9pZCBnc3RfZGVidWdfcHJpbnRfc3RhY2tfdHJhY2UgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RJTkZPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdGl0ZXJhdG9yLmMgYi9nc3QvZ3N0aXRlcmF0b3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1YjIwMi4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0aXRlcmF0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDgzNiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDExIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIGdzdGl0ZXJhdG9yLmg6IEJhc2UgY2xhc3MgZm9yIGl0ZXJhdGluZyBkYXRhc3RydWN0dXJlcy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0aXRlcmF0b3IKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogT2JqZWN0IHRvIHJldHJpZXZlIG11bHRpcGxlIGVsZW1lbnRzIGluIGEgdGhyZWFkc2FmZQotICogd2F5LgotICogQHNlZV9hbHNvOiAjR3N0RWxlbWVudCwgI0dzdEJpbgotICoKLSAqIEEgR3N0SXRlcmF0b3IgaXMgdXNlZCB0byByZXRyaWV2ZSBtdWx0aXBsZSBvYmplY3RzIGZyb20gYW5vdGhlciBvYmplY3QgaW4KLSAqIGEgdGhyZWFkc2FmZSB3YXkuCi0gKgotICogVmFyaW91cyBHU3RyZWFtZXIgb2JqZWN0cyBwcm92aWRlIGFjY2VzcyB0byB0aGVpciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHVzaW5nCi0gKiBhbiBpdGVyYXRvci4KLSAqCi0gKiBOb3RlIHRoYXQgaWYgY2FsbGluZyBhIEdzdEl0ZXJhdG9yIGZ1bmN0aW9uIHJlc3VsdHMgaW4geW91ciBjb2RlIHJlY2VpdmluZwotICogYSByZWZjb3VudGVkIG9iamVjdCAod2l0aCwgc2F5LCBnX3ZhbHVlX2dldF9vYmplY3QoKSksIHRoZSByZWZjb3VudCBmb3IgdGhhdAotICogb2JqZWN0IHdpbGwgbm90IGJlIGluY3JlYXNlZC4gWW91ciBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgYSByZWZlcmVuY2UKLSAqIGlmIGl0IHdhbnRzIHRvIGNvbnRpbnVlIHVzaW5nIGl0IGxhdGVyLgotICoKLSAqIFRoZSBiYXNpYyB1c2UgcGF0dGVybiBvZiBhbiBpdGVyYXRvciBpcyBhcyBmb2xsb3dzOgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqICAgR3N0SXRlcmF0b3IgKml0ID0gX2dldF9pdGVyYXRvcihvYmplY3QpOwotICogICBHVmFsdWUgaXRlbSA9IEdfVkFMVUVfSU5JVDsKLSAqICAgZG9uZSA9IEZBTFNFOwotICogICB3aGlsZSAoIWRvbmUpIHsKLSAqICAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJmFtcDtpdGVtKSkgewotICogICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gKiAgICAgICAgIC4uLmdldC91c2UvY2hhbmdlIGl0ZW0gaGVyZS4uLgotICogICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmYW1wO2l0ZW0pOwotICogICAgICAgICBicmVhazsKLSAqICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKLSAqICAgICAgICAgLi4ucm9sbGJhY2sgY2hhbmdlcyB0byBpdGVtcy4uLgotICogICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdCk7Ci0gKiAgICAgICAgIGJyZWFrOwotICogICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gKiAgICAgICAgIC4uLndyb25nIHBhcmFtZXRlcnMgd2VyZSBnaXZlbi4uLgotICogICAgICAgICBkb25lID0gVFJVRTsKLSAqICAgICAgICAgYnJlYWs7Ci0gKiAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICogICAgICAgICBkb25lID0gVFJVRTsKLSAqICAgICAgICAgYnJlYWs7Ci0gKiAgICAgfQotICogICB9Ci0gKiAgIGdfdmFsdWVfdW5zZXQgKCZhbXA7aXRlbSk7Ci0gKiAgIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci0gKiBdfAotICovCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPGdzdC9nc3RpdGVyYXRvci5oPgotCi0vKioKLSAqIGdzdF9pdGVyYXRvcl9jb3B5OgotICogQGl0OiBhICNHc3RJdGVyYXRvcgotICoKLSAqIENvcHkgdGhlIGl0ZXJhdG9yIGFuZCBpdHMgc3RhdGUuCi0gKgotICogUmV0dXJuczogYSBuZXcgY29weSBvZiBAaXQuCi0gKi8KLUdzdEl0ZXJhdG9yICoKLWdzdF9pdGVyYXRvcl9jb3B5IChjb25zdCBHc3RJdGVyYXRvciAqIGl0KQotewotICBHc3RJdGVyYXRvciAqY29weTsKLQotICBjb3B5ID0gZ19zbGljZV9jb3B5IChpdC0+c2l6ZSwgaXQpOwotICBpZiAoaXQtPmNvcHkpCi0gICAgaXQtPmNvcHkgKGl0LCBjb3B5KTsKLQotICByZXR1cm4gY29weTsKLX0KLQotR19ERUZJTkVfQk9YRURfVFlQRSAoR3N0SXRlcmF0b3IsIGdzdF9pdGVyYXRvciwKLSAgICAoR0JveGVkQ29weUZ1bmMpIGdzdF9pdGVyYXRvcl9jb3B5LCAoR0JveGVkRnJlZUZ1bmMpIGdzdF9pdGVyYXRvcl9mcmVlKTsKLQotc3RhdGljIHZvaWQKLWdzdF9pdGVyYXRvcl9pbml0IChHc3RJdGVyYXRvciAqIGl0LAotICAgIGd1aW50IHNpemUsCi0gICAgR1R5cGUgdHlwZSwKLSAgICBHTXV0ZXggKiBsb2NrLAotICAgIGd1aW50MzIgKiBtYXN0ZXJfY29va2llLAotICAgIEdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uIGNvcHksCi0gICAgR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24gbmV4dCwKLSAgICBHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiBpdGVtLAotICAgIEdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24gcmVzeW5jLCBHc3RJdGVyYXRvckZyZWVGdW5jdGlvbiBmcmVlKQotewotICBpdC0+c2l6ZSA9IHNpemU7Ci0gIGl0LT50eXBlID0gdHlwZTsKLSAgaXQtPmxvY2sgPSBsb2NrOwotICBpdC0+bWFzdGVyX2Nvb2tpZSA9IG1hc3Rlcl9jb29raWU7Ci0gIGl0LT5jb29raWUgPSAqbWFzdGVyX2Nvb2tpZTsKLSAgaXQtPmNvcHkgPSBjb3B5OwotICBpdC0+bmV4dCA9IG5leHQ7Ci0gIGl0LT5pdGVtID0gaXRlbTsKLSAgaXQtPnJlc3luYyA9IHJlc3luYzsKLSAgaXQtPmZyZWUgPSBmcmVlOwotICBpdC0+cHVzaGVkID0gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3RfaXRlcmF0b3JfbmV3OiAoc2tpcCkKLSAqIEBzaXplOiB0aGUgc2l6ZSBvZiB0aGUgaXRlcmF0b3Igc3RydWN0dXJlCi0gKiBAdHlwZTogI0dUeXBlIG9mIGNoaWxkcmVuCi0gKiBAbG9jazogcG9pbnRlciB0byBhICNHTXV0ZXguCi0gKiBAbWFzdGVyX2Nvb2tpZTogcG9pbnRlciB0byBhIGd1aW50MzIgdGhhdCBpcyBjaGFuZ2VkIHdoZW4gdGhlIGl0ZW1zIGluIHRoZQotICogICAgaXRlcmF0b3IgY2hhbmdlZC4KLSAqIEBjb3B5OiBjb3B5IGZ1bmN0aW9uCi0gKiBAbmV4dDogZnVuY3Rpb24gdG8gZ2V0IG5leHQgaXRlbQotICogQGl0ZW06IGZ1bmN0aW9uIHRvIGNhbGwgb24gZWFjaCBpdGVtIHJldHJpZXZlZAotICogQHJlc3luYzogZnVuY3Rpb24gdG8gcmVzeW5jIHRoZSBpdGVyYXRvcgotICogQGZyZWU6IGZ1bmN0aW9uIHRvIGZyZWUgdGhlIGl0ZXJhdG9yCi0gKgotICogQ3JlYXRlIGEgbmV3IGl0ZXJhdG9yLiBUaGlzIGZ1bmN0aW9uIGlzIG1haW5seSB1c2VkIGZvciBvYmplY3RzCi0gKiBpbXBsZW1lbnRpbmcgdGhlIG5leHQvcmVzeW5jL2ZyZWUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBhIGRhdGEgc3RydWN0dXJlLgotICoKLSAqIEZvciBlYWNoIGl0ZW0gcmV0cmlldmVkLCB0aGUgQGl0ZW0gZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sKLSAqIGhlbGQuIFRoZSBAZnJlZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgaXRlcmF0b3IgaXMgZnJlZWQuCi0gKgotICogUmV0dXJuczogdGhlIG5ldyAjR3N0SXRlcmF0b3IuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0SXRlcmF0b3IgKgotZ3N0X2l0ZXJhdG9yX25ldyAoZ3VpbnQgc2l6ZSwKLSAgICBHVHlwZSB0eXBlLAotICAgIEdNdXRleCAqIGxvY2ssCi0gICAgZ3VpbnQzMiAqIG1hc3Rlcl9jb29raWUsCi0gICAgR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24gY29weSwKLSAgICBHc3RJdGVyYXRvck5leHRGdW5jdGlvbiBuZXh0LAotICAgIEdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uIGl0ZW0sCi0gICAgR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiByZXN5bmMsIEdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIGZyZWUpCi17Ci0gIEdzdEl0ZXJhdG9yICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpemUgPj0gc2l6ZW9mIChHc3RJdGVyYXRvciksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ190eXBlX3FuYW1lICh0eXBlKSAhPSAwLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1hc3Rlcl9jb29raWUgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuZXh0ICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzeW5jICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnJlZSAhPSBOVUxMLCBOVUxMKTsKLQotICByZXN1bHQgPSBnX3NsaWNlX2FsbG9jMCAoc2l6ZSk7Ci0gIGdzdF9pdGVyYXRvcl9pbml0IChyZXN1bHQsIHNpemUsIHR5cGUsIGxvY2ssIG1hc3Rlcl9jb29raWUsIGNvcHksIG5leHQsIGl0ZW0sCi0gICAgICByZXN5bmMsIGZyZWUpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBsaXN0IGl0ZXJhdG9yCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RMaXN0SXRlcmF0b3IKLXsKLSAgR3N0SXRlcmF0b3IgaXRlcmF0b3I7Ci0gIEdPYmplY3QgKm93bmVyOwotICBHTGlzdCAqKm9yaWc7Ci0gIEdMaXN0ICpsaXN0OyAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgaW4gbGlzdCAqLwotCi0gIHZvaWQgKCpzZXRfdmFsdWUpIChHVmFsdWUgKiB2YWx1ZSwgZ3BvaW50ZXIgaXRlbSk7Ci19IEdzdExpc3RJdGVyYXRvcjsKLQotc3RhdGljIHZvaWQKLWdzdF9saXN0X2l0ZXJhdG9yX2NvcHkgKGNvbnN0IEdzdExpc3RJdGVyYXRvciAqIGl0LCBHc3RMaXN0SXRlcmF0b3IgKiBjb3B5KQotewotICBpZiAoY29weS0+b3duZXIpCi0gICAgZ19vYmplY3RfcmVmIChjb3B5LT5vd25lcik7Ci19Ci0KLXN0YXRpYyBHc3RJdGVyYXRvclJlc3VsdAotZ3N0X2xpc3RfaXRlcmF0b3JfbmV4dCAoR3N0TGlzdEl0ZXJhdG9yICogaXQsIEdWYWx1ZSAqIGVsZW0pCi17Ci0gIGdwb2ludGVyIGRhdGE7Ci0KLSAgaWYgKGl0LT5saXN0ID09IE5VTEwpCi0gICAgcmV0dXJuIEdTVF9JVEVSQVRPUl9ET05FOwotCi0gIGRhdGEgPSBpdC0+bGlzdC0+ZGF0YTsKLSAgaXQtPmxpc3QgPSBnX2xpc3RfbmV4dCAoaXQtPmxpc3QpOwotCi0gIGl0LT5zZXRfdmFsdWUgKGVsZW0sIGRhdGEpOwotCi0gIHJldHVybiBHU1RfSVRFUkFUT1JfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbGlzdF9pdGVyYXRvcl9yZXN5bmMgKEdzdExpc3RJdGVyYXRvciAqIGl0KQotewotICBpdC0+bGlzdCA9ICppdC0+b3JpZzsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9saXN0X2l0ZXJhdG9yX2ZyZWUgKEdzdExpc3RJdGVyYXRvciAqIGl0KQotewotICBpZiAoaXQtPm93bmVyKQotICAgIGdfb2JqZWN0X3VucmVmIChpdC0+b3duZXIpOwotfQotCi0vKioKLSAqIGdzdF9pdGVyYXRvcl9uZXdfbGlzdDogKHNraXApCi0gKiBAdHlwZTogI0dUeXBlIG9mIGVsZW1lbnRzCi0gKiBAbG9jazogcG9pbnRlciB0byBhICNHTXV0ZXggcHJvdGVjdGluZyB0aGUgbGlzdC4KLSAqIEBtYXN0ZXJfY29va2llOiBwb2ludGVyIHRvIGEgZ3VpbnQzMiB0aGF0IGlzIGluY3JlbWVudGVkIHdoZW4gdGhlIGxpc3QKLSAqICAgICBpcyBjaGFuZ2VkLgotICogQGxpc3Q6IHBvaW50ZXIgdG8gdGhlIGxpc3QKLSAqIEBvd25lcjogb2JqZWN0IG93bmluZyB0aGUgbGlzdAotICogQGl0ZW06IGZ1bmN0aW9uIHRvIGNhbGwgb24gZWFjaCBpdGVtIHJldHJpZXZlZAotICoKLSAqIENyZWF0ZSBhIG5ldyBpdGVyYXRvciBkZXNpZ25lZCBmb3IgaXRlcmF0aW5nIEBsaXN0LgotICoKLSAqIFRoZSBsaXN0IHlvdSBpdGVyYXRlIGlzIHVzdWFsbHkgcGFydCBvZiBhIGRhdGEgc3RydWN0dXJlIEBvd25lciBhbmQgaXMKLSAqIHByb3RlY3RlZCB3aXRoIEBsb2NrLiAKLSAqCi0gKiBUaGUgaXRlcmF0b3Igd2lsbCB1c2UgQGxvY2sgdG8gcmV0cmlldmUgdGhlIG5leHQgaXRlbSBvZiB0aGUgbGlzdCBhbmQgaXQKLSAqIHdpbGwgdGhlbiBjYWxsIHRoZSBAaXRlbSBmdW5jdGlvbiBiZWZvcmUgcmVsZWFzaW5nIEBsb2NrIGFnYWluLgotICoKLSAqIFdoZW4gYSBjb25jdXJyZW50IHVwZGF0ZSB0byB0aGUgbGlzdCBpcyBwZXJmb3JtZWQsIHVzdWFsbHkgYnkgQG93bmVyIHdoaWxlCi0gKiBob2xkaW5nIEBsb2NrLCBAbWFzdGVyX2Nvb2tpZSB3aWxsIGJlIHVwZGF0ZWQuIFRoZSBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbgotICogd2lsbCBub3RpY2UgdGhlIHVwZGF0ZSBvZiB0aGUgY29va2llIGFuZCB3aWxsIHJldHVybiAlR1NUX0lURVJBVE9SX1JFU1lOQyB0bwotICogdGhlIHVzZXIgb2YgdGhlIGl0ZXJhdG9yIGluIHRoZSBuZXh0IGNhbGwgdG8gZ3N0X2l0ZXJhdG9yX25leHQoKS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbmV3ICNHc3RJdGVyYXRvciBmb3IgQGxpc3QuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0SXRlcmF0b3IgKgotZ3N0X2l0ZXJhdG9yX25ld19saXN0IChHVHlwZSB0eXBlLAotICAgIEdNdXRleCAqIGxvY2ssIGd1aW50MzIgKiBtYXN0ZXJfY29va2llLCBHTGlzdCAqKiBsaXN0LCBHT2JqZWN0ICogb3duZXIsCi0gICAgR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24gaXRlbSkKLXsKLSAgR3N0TGlzdEl0ZXJhdG9yICpyZXN1bHQ7Ci0gIGdwb2ludGVyIHNldF92YWx1ZTsKLQotICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9PQkpFQ1QpKSB7Ci0gICAgc2V0X3ZhbHVlID0gZ192YWx1ZV9zZXRfb2JqZWN0OwotICB9IGVsc2UgaWYgKGdfdHlwZV9pc19hICh0eXBlLCBHX1RZUEVfQk9YRUQpKSB7Ci0gICAgc2V0X3ZhbHVlID0gZ192YWx1ZV9zZXRfYm94ZWQ7Ci0gIH0gZWxzZSBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9QT0lOVEVSKSkgewotICAgIHNldF92YWx1ZSA9IGdfdmFsdWVfc2V0X3BvaW50ZXI7Ci0gIH0gZWxzZSBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9TVFJJTkcpKSB7Ci0gICAgc2V0X3ZhbHVlID0gZ192YWx1ZV9zZXRfc3RyaW5nOwotICB9IGVsc2UgewotICAgIGdfY3JpdGljYWwgKCJMaXN0IGl0ZXJhdG9ycyBjYW4gb25seSBiZSBjcmVhdGVkIGZvciBsaXN0cyBjb250YWluaW5nICIKLSAgICAgICAgImluc3RhbmNlcyBvZiBHT2JqZWN0LCBib3hlZCB0eXBlcywgcG9pbnRlciB0eXBlcyBhbmQgc3RyaW5ncyIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLyogbm8gbmVlZCB0byBsb2NrLCBub3RoaW5nIGNhbiBjaGFuZ2UgaGVyZSAqLwotICByZXN1bHQgPSAoR3N0TGlzdEl0ZXJhdG9yICopIGdzdF9pdGVyYXRvcl9uZXcgKHNpemVvZiAoR3N0TGlzdEl0ZXJhdG9yKSwKLSAgICAgIHR5cGUsCi0gICAgICBsb2NrLAotICAgICAgbWFzdGVyX2Nvb2tpZSwKLSAgICAgIChHc3RJdGVyYXRvckNvcHlGdW5jdGlvbikgZ3N0X2xpc3RfaXRlcmF0b3JfY29weSwKLSAgICAgIChHc3RJdGVyYXRvck5leHRGdW5jdGlvbikgZ3N0X2xpc3RfaXRlcmF0b3JfbmV4dCwKLSAgICAgIChHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbikgaXRlbSwKLSAgICAgIChHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uKSBnc3RfbGlzdF9pdGVyYXRvcl9yZXN5bmMsCi0gICAgICAoR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24pIGdzdF9saXN0X2l0ZXJhdG9yX2ZyZWUpOwotCi0gIHJlc3VsdC0+b3duZXIgPSBvd25lciA/IGdfb2JqZWN0X3JlZiAob3duZXIpIDogTlVMTDsKLSAgcmVzdWx0LT5vcmlnID0gbGlzdDsKLSAgcmVzdWx0LT5saXN0ID0gKmxpc3Q7Ci0gIHJlc3VsdC0+c2V0X3ZhbHVlID0gc2V0X3ZhbHVlOwotCi0gIHJldHVybiBHU1RfSVRFUkFUT1IgKHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaXRlcmF0b3JfcG9wIChHc3RJdGVyYXRvciAqIGl0KQotewotICBpZiAoaXQtPnB1c2hlZCkgewotICAgIGdzdF9pdGVyYXRvcl9mcmVlIChpdC0+cHVzaGVkKTsKLSAgICBpdC0+cHVzaGVkID0gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9pdGVyYXRvcl9uZXh0OgotICogQGl0OiBUaGUgI0dzdEl0ZXJhdG9yIHRvIGl0ZXJhdGUKLSAqIEBlbGVtOiAob3V0IGNhbGxlci1hbGxvY2F0ZXMpOiBwb2ludGVyIHRvIGhvbGQgbmV4dCBlbGVtZW50Ci0gKgotICogR2V0IHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgaXRlcmF0b3IgaW4gQGVsZW0uIAotICoKLSAqIE9ubHkgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgJUdTVF9JVEVSQVRPUl9PSywgQGVsZW0gd2lsbCBjb250YWluIGEgdmFsaWQKLSAqIHZhbHVlLiBAZWxlbSBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byB0aGUgdHlwZSBvZiB0aGUgaXRlcmF0b3Igb3IKLSAqIGluaXRpYWxpemVkIHRvIHplcm9lcyB3aXRoIGdfdmFsdWVfdW5zZXQoKS4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKLSAqIHVuc2V0dGluZyBvciByZXNldHRpbmcgQGVsZW0gd2l0aCBnX3ZhbHVlX3Vuc2V0KCkgb3IgZ192YWx1ZV9yZXNldCgpCi0gKiBhZnRlciB1c2FnZS4KLSAqCi0gKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAlR1NUX0lURVJBVE9SX0RPTkUsIG5vIG1vcmUgZWxlbWVudHMgY2FuIGJlCi0gKiByZXRyaWV2ZWQgZnJvbSBAaXQuCi0gKgotICogQSByZXR1cm4gdmFsdWUgb2YgJUdTVF9JVEVSQVRPUl9SRVNZTkMgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbGlzdCB3YXMKLSAqIGNvbmN1cnJlbnRseSB1cGRhdGVkLiBUaGUgdXNlciBvZiBAaXQgc2hvdWxkIGNhbGwgZ3N0X2l0ZXJhdG9yX3Jlc3luYygpIHRvCi0gKiBnZXQgdGhlIG5ld2x5IHVwZGF0ZWQgbGlzdC4gCi0gKgotICogQSByZXR1cm4gdmFsdWUgb2YgJUdTVF9JVEVSQVRPUl9FUlJPUiBpbmRpY2F0ZXMgYW4gdW5yZWNvdmVyYWJsZSBmYXRhbCBlcnJvci4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgcmVzdWx0IG9mIHRoZSBpdGVyYXRpb24uIFVuc2V0IEBlbGVtIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdEl0ZXJhdG9yUmVzdWx0Ci1nc3RfaXRlcmF0b3JfbmV4dCAoR3N0SXRlcmF0b3IgKiBpdCwgR1ZhbHVlICogZWxlbSkKLXsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpdCAhPSBOVUxMLCBHU1RfSVRFUkFUT1JfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZWxlbSAhPSBOVUxMLCBHU1RfSVRFUkFUT1JfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19WQUxVRV9UWVBFIChlbGVtKSA9PSBHX1RZUEVfSU5WQUxJRAotICAgICAgfHwgR19WQUxVRV9IT0xEUyAoZWxlbSwgaXQtPnR5cGUpLCBHU1RfSVRFUkFUT1JfRVJST1IpOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKGVsZW0pID09IEdfVFlQRV9JTlZBTElEKQotICAgIGdfdmFsdWVfaW5pdCAoZWxlbSwgaXQtPnR5cGUpOwotCi1yZXN0YXJ0OgotICBpZiAoaXQtPnB1c2hlZCkgewotICAgIHJlc3VsdCA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdC0+cHVzaGVkLCBlbGVtKTsKLSAgICBpZiAocmVzdWx0ID09IEdTVF9JVEVSQVRPUl9ET05FKSB7Ci0gICAgICAvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgaXRlcmF0b3IsIHBvcCBpdCBhbmQKLSAgICAgICAqIGZhbGx0aHJvdWdoIGl0ZXJhdGluZyB0aGUgbWFpbiBpdGVyYXRvciBhZ2Fpbi4gKi8KLSAgICAgIGdzdF9pdGVyYXRvcl9wb3AgKGl0KTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKGl0LT5sb2NrKSkKLSAgICBnX211dGV4X2xvY2sgKGl0LT5sb2NrKTsKLQotICBpZiAoR19VTkxJS0VMWSAoKml0LT5tYXN0ZXJfY29va2llICE9IGl0LT5jb29raWUpKSB7Ci0gICAgcmVzdWx0ID0gR1NUX0lURVJBVE9SX1JFU1lOQzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICByZXN1bHQgPSBpdC0+bmV4dCAoaXQsIGVsZW0pOwotICBpZiAocmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSyAmJiBpdC0+aXRlbSkgewotICAgIEdzdEl0ZXJhdG9ySXRlbSBpdGVtcmVzOwotCi0gICAgaXRlbXJlcyA9IGl0LT5pdGVtIChpdCwgZWxlbSk7Ci0gICAgc3dpdGNoIChpdGVtcmVzKSB7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9JVEVNX1NLSVA6Ci0gICAgICAgIGlmIChHX0xJS0VMWSAoaXQtPmxvY2spKQotICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrIChpdC0+bG9jayk7Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKGVsZW0pOwotICAgICAgICBnb3RvIHJlc3RhcnQ7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9JVEVNX0VORDoKLSAgICAgICAgcmVzdWx0ID0gR1NUX0lURVJBVE9SX0RPTkU7Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKGVsZW0pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0lURU1fUEFTUzoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLWRvbmU6Ci0gIGlmIChHX0xJS0VMWSAoaXQtPmxvY2spKQotICAgIGdfbXV0ZXhfdW5sb2NrIChpdC0+bG9jayk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfaXRlcmF0b3JfcmVzeW5jOgotICogQGl0OiBUaGUgI0dzdEl0ZXJhdG9yIHRvIHJlc3luYwotICoKLSAqIFJlc3luYyB0aGUgaXRlcmF0b3IuIHRoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IGNhbGxlZAotICogYWZ0ZXIgZ3N0X2l0ZXJhdG9yX25leHQoKSByZXR1cm5lZCAlR1NUX0lURVJBVE9SX1JFU1lOQy4KLSAqCi0gKiBXaGVuIGFuIGl0ZXJhdG9yIHdhcyBwdXNoZWQgb24gQGl0LCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcG9wcGVkIGFnYWluCi0gKiB3aXRoIHRoaXMgZnVuY3Rpb24uCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoR3N0SXRlcmF0b3IgKiBpdCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoaXQgIT0gTlVMTCk7Ci0KLSAgZ3N0X2l0ZXJhdG9yX3BvcCAoaXQpOwotCi0gIGlmIChHX0xJS0VMWSAoaXQtPmxvY2spKQotICAgIGdfbXV0ZXhfbG9jayAoaXQtPmxvY2spOwotICBpdC0+cmVzeW5jIChpdCk7Ci0gIGl0LT5jb29raWUgPSAqaXQtPm1hc3Rlcl9jb29raWU7Ci0gIGlmIChHX0xJS0VMWSAoaXQtPmxvY2spKQotICAgIGdfbXV0ZXhfdW5sb2NrIChpdC0+bG9jayk7Ci19Ci0KLS8qKgotICogZ3N0X2l0ZXJhdG9yX2ZyZWU6Ci0gKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gZnJlZQotICoKLSAqIEZyZWUgdGhlIGl0ZXJhdG9yLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9pdGVyYXRvcl9mcmVlIChHc3RJdGVyYXRvciAqIGl0KQotewotICBnX3JldHVybl9pZl9mYWlsIChpdCAhPSBOVUxMKTsKLQotICBnc3RfaXRlcmF0b3JfcG9wIChpdCk7Ci0KLSAgaXQtPmZyZWUgKGl0KTsKLQotICBnX3NsaWNlX2ZyZWUxIChpdC0+c2l6ZSwgaXQpOwotfQotCi0vKioKLSAqIGdzdF9pdGVyYXRvcl9wdXNoOgotICogQGl0OiBUaGUgI0dzdEl0ZXJhdG9yIHRvIHVzZQotICogQG90aGVyOiBUaGUgI0dzdEl0ZXJhdG9yIHRvIHB1c2gKLSAqCi0gKiBQdXNoZXMgQG90aGVyIGl0ZXJhdG9yIG9udG8gQGl0LiBBbGwgY2FsbHMgcGVyZm9ybWVkIG9uIEBpdCBhcmUKLSAqIGZvcndhcmRlZCB0byBAb3RoZXIuIElmIEBvdGhlciByZXR1cm5zICVHU1RfSVRFUkFUT1JfRE9ORSwgaXQgaXMKLSAqIHBvcHBlZCBhZ2FpbiBhbmQgY2FsbHMgYXJlIGhhbmRsZWQgYnkgQGl0IGFnYWluLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IHVzZWQgYnkgb2JqZWN0cyBpbXBsZW1lbnRpbmcgdGhlIGl0ZXJhdG9yCi0gKiBuZXh0IGZ1bmN0aW9uIHRvIHJlY3Vyc2UgaW50byBzdWJzdHJ1Y3R1cmVzLgotICoKLSAqIFdoZW4gZ3N0X2l0ZXJhdG9yX3Jlc3luYygpIGlzIGNhbGxlZCBvbiBAaXQsIEBvdGhlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKLSAqIHBvcHBlZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfaXRlcmF0b3JfcHVzaCAoR3N0SXRlcmF0b3IgKiBpdCwgR3N0SXRlcmF0b3IgKiBvdGhlcikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoaXQgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG90aGVyICE9IE5VTEwpOwotCi0gIGl0LT5wdXNoZWQgPSBvdGhlcjsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEl0ZXJhdG9yRmlsdGVyCi17Ci0gIEdzdEl0ZXJhdG9yIGl0ZXJhdG9yOwotICBHc3RJdGVyYXRvciAqc2xhdmU7Ci0KLSAgR011dGV4ICptYXN0ZXJfbG9jazsKLSAgR0NvbXBhcmVGdW5jIGZ1bmM7Ci0gIEdWYWx1ZSB1c2VyX2RhdGE7Ci0gIGdib29sZWFuIGhhdmVfdXNlcl9kYXRhOwotfSBHc3RJdGVyYXRvckZpbHRlcjsKLQotc3RhdGljIEdzdEl0ZXJhdG9yUmVzdWx0Ci1maWx0ZXJfbmV4dCAoR3N0SXRlcmF0b3JGaWx0ZXIgKiBpdCwgR1ZhbHVlICogZWxlbSkKLXsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzdWx0ID0gR1NUX0lURVJBVE9SX0VSUk9SOwotICBnYm9vbGVhbiBkb25lID0gRkFMU0U7Ci0gIEdWYWx1ZSBpdGVtID0geyAwLCB9OwotCi0gIHdoaWxlIChHX0xJS0VMWSAoIWRvbmUpKSB7Ci0gICAgcmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0LT5zbGF2ZSwgJml0ZW0pOwotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLSAgICAgICAgaWYgKEdfTElLRUxZIChpdC0+bWFzdGVyX2xvY2spKQotICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrIChpdC0+bWFzdGVyX2xvY2spOwotICAgICAgICBpZiAoaXQtPmZ1bmMgKCZpdGVtLCAmaXQtPnVzZXJfZGF0YSkgPT0gMCkgewotICAgICAgICAgIGdfdmFsdWVfY29weSAoJml0ZW0sIGVsZW0pOwotICAgICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgICAgaWYgKEdfTElLRUxZIChpdC0+bWFzdGVyX2xvY2spKQotICAgICAgICAgIGdfbXV0ZXhfbG9jayAoaXQtPm1hc3Rlcl9sb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLWZpbHRlcl9jb3B5IChjb25zdCBHc3RJdGVyYXRvckZpbHRlciAqIGl0LCBHc3RJdGVyYXRvckZpbHRlciAqIGNvcHkpCi17Ci0gIGNvcHktPnNsYXZlID0gZ3N0X2l0ZXJhdG9yX2NvcHkgKGl0LT5zbGF2ZSk7Ci0gIGNvcHktPm1hc3Rlcl9sb2NrID0gY29weS0+c2xhdmUtPmxvY2sgPyBjb3B5LT5zbGF2ZS0+bG9jayA6IGl0LT5tYXN0ZXJfbG9jazsKLSAgY29weS0+c2xhdmUtPmxvY2sgPSBOVUxMOwotCi0gIGlmIChpdC0+aGF2ZV91c2VyX2RhdGEpIHsKLSAgICBtZW1zZXQgKCZjb3B5LT51c2VyX2RhdGEsIDAsIHNpemVvZiAoY29weS0+dXNlcl9kYXRhKSk7Ci0gICAgZ192YWx1ZV9pbml0ICgmY29weS0+dXNlcl9kYXRhLCBHX1ZBTFVFX1RZUEUgKCZpdC0+dXNlcl9kYXRhKSk7Ci0gICAgZ192YWx1ZV9jb3B5ICgmaXQtPnVzZXJfZGF0YSwgJmNvcHktPnVzZXJfZGF0YSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWZpbHRlcl9yZXN5bmMgKEdzdEl0ZXJhdG9yRmlsdGVyICogaXQpCi17Ci0gIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0LT5zbGF2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1maWx0ZXJfZnJlZSAoR3N0SXRlcmF0b3JGaWx0ZXIgKiBpdCkKLXsKLSAgaWYgKGl0LT5oYXZlX3VzZXJfZGF0YSkKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmaXQtPnVzZXJfZGF0YSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdC0+c2xhdmUpOwotfQotCi0vKioKLSAqIGdzdF9pdGVyYXRvcl9maWx0ZXI6Ci0gKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gZmlsdGVyCi0gKiBAZnVuYzogKHNjb3BlIGNhbGwpOiB0aGUgY29tcGFyZSBmdW5jdGlvbiB0byBzZWxlY3QgZWxlbWVudHMKLSAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY29tcGFyZSBmdW5jdGlvbgotICoKLSAqIENyZWF0ZSBhIG5ldyBpdGVyYXRvciBmcm9tIGFuIGV4aXN0aW5nIGl0ZXJhdG9yLiBUaGUgbmV3IGl0ZXJhdG9yCi0gKiB3aWxsIG9ubHkgcmV0dXJuIHRob3NlIGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNvbXBhcmUgZnVuY3Rpb24gQGZ1bmMuCi0gKiBUaGUgZmlyc3QgcGFyYW1ldGVyIHRoYXQgaXMgcGFzc2VkIHRvIEBmdW5jIGlzIHRoZSAjR1ZhbHVlIG9mIHRoZSBjdXJyZW50Ci0gKiBpdGVyYXRvciBlbGVtZW50IGFuZCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBAdXNlcl9kYXRhLiBAZnVuYyBzaG91bGQKLSAqIHJldHVybiAwIGZvciBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgZmlsdGVyZWQgaXRlcmF0b3IuCi0gKgotICogV2hlbiB0aGlzIGl0ZXJhdG9yIGlzIGZyZWVkLCBAaXQgd2lsbCBhbHNvIGJlIGZyZWVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEl0ZXJhdG9yLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdEl0ZXJhdG9yICoKLWdzdF9pdGVyYXRvcl9maWx0ZXIgKEdzdEl0ZXJhdG9yICogaXQsIEdDb21wYXJlRnVuYyBmdW5jLAotICAgIGNvbnN0IEdWYWx1ZSAqIHVzZXJfZGF0YSkKLXsKLSAgR3N0SXRlcmF0b3JGaWx0ZXIgKnJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaXQgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmdW5jICE9IE5VTEwsIE5VTEwpOwotCi0gIHJlc3VsdCA9IChHc3RJdGVyYXRvckZpbHRlciAqKSBnc3RfaXRlcmF0b3JfbmV3IChzaXplb2YgKEdzdEl0ZXJhdG9yRmlsdGVyKSwKLSAgICAgIGl0LT50eXBlLCBpdC0+bG9jaywgaXQtPm1hc3Rlcl9jb29raWUsCi0gICAgICAoR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24pIGZpbHRlcl9jb3B5LAotICAgICAgKEdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uKSBmaWx0ZXJfbmV4dCwKLSAgICAgIChHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbikgTlVMTCwKLSAgICAgIChHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uKSBmaWx0ZXJfcmVzeW5jLAotICAgICAgKEdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uKSBmaWx0ZXJfZnJlZSk7Ci0KLSAgcmVzdWx0LT5tYXN0ZXJfbG9jayA9IGl0LT5sb2NrOwotICBpdC0+bG9jayA9IE5VTEw7Ci0gIHJlc3VsdC0+ZnVuYyA9IGZ1bmM7Ci0gIGlmICh1c2VyX2RhdGEpIHsKLSAgICBnX3ZhbHVlX2luaXQgKCZyZXN1bHQtPnVzZXJfZGF0YSwgR19WQUxVRV9UWVBFICh1c2VyX2RhdGEpKTsKLSAgICBnX3ZhbHVlX2NvcHkgKHVzZXJfZGF0YSwgJnJlc3VsdC0+dXNlcl9kYXRhKTsKLSAgICByZXN1bHQtPmhhdmVfdXNlcl9kYXRhID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHQtPmhhdmVfdXNlcl9kYXRhID0gRkFMU0U7Ci0gIH0KLSAgcmVzdWx0LT5zbGF2ZSA9IGl0OwotCi0gIHJldHVybiBHU1RfSVRFUkFUT1IgKHJlc3VsdCk7Ci19Ci0KLS8qKgotICogZ3N0X2l0ZXJhdG9yX2ZvbGQ6Ci0gKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gZm9sZCBvdmVyCi0gKiBAZnVuYzogKHNjb3BlIGNhbGwpOiB0aGUgZm9sZCBmdW5jdGlvbgotICogQHJldDogdGhlIHNlZWQgdmFsdWUgcGFzc2VkIHRvIHRoZSBmb2xkIGZ1bmN0aW9uCi0gKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZvbGQgZnVuY3Rpb24KLSAqCi0gKiBGb2xkcyBAZnVuYyBvdmVyIHRoZSBlbGVtZW50cyBvZiBAaXRlci4gVGhhdCBpcyB0byBzYXksIEBmdW5jIHdpbGwgYmUgY2FsbGVkCi0gKiBhcyBAZnVuYyAob2JqZWN0LCBAcmV0LCBAdXNlcl9kYXRhKSBmb3IgZWFjaCBvYmplY3QgaW4gQGl0LiBUaGUgbm9ybWFsIHVzZQotICogb2YgdGhpcyBwcm9jZWR1cmUgaXMgdG8gYWNjdW11bGF0ZSB0aGUgcmVzdWx0cyBvZiBvcGVyYXRpbmcgb24gdGhlIG9iamVjdHMgaW4KLSAqIEByZXQuCi0gKgotICogVGhpcyBwcm9jZWR1cmUgY2FuIGJlIHVzZWQgKGFuZCBpcyB1c2VkIGludGVybmFsbHkpIHRvIGltcGxlbWVudCB0aGUKLSAqIGdzdF9pdGVyYXRvcl9mb3JlYWNoKCkgYW5kIGdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbSgpIG9wZXJhdGlvbnMuCi0gKgotICogVGhlIGZvbGQgd2lsbCBwcm9jZWVkIGFzIGxvbmcgYXMgQGZ1bmMgcmV0dXJucyAlVFJVRS4gV2hlbiB0aGUgaXRlcmF0b3IgaGFzIG5vCi0gKiBtb3JlIGFyZ3VtZW50cywgJUdTVF9JVEVSQVRPUl9ET05FIHdpbGwgYmUgcmV0dXJuZWQuIElmIEBmdW5jIHJldHVybnMgJUZBTFNFLAotICogdGhlIGZvbGQgd2lsbCBzdG9wLCBhbmQgJUdTVF9JVEVSQVRPUl9PSyB3aWxsIGJlIHJldHVybmVkLiBFcnJvcnMgb3IgcmVzeW5jcwotICogd2lsbCBjYXVzZSBmb2xkIHRvIHJldHVybiAlR1NUX0lURVJBVE9SX0VSUk9SIG9yICVHU1RfSVRFUkFUT1JfUkVTWU5DIGFzCi0gKiBhcHByb3ByaWF0ZS4KLSAqCi0gKiBUaGUgaXRlcmF0b3Igd2lsbCBub3QgYmUgZnJlZWQuCi0gKgotICogUmV0dXJuczogQSAjR3N0SXRlcmF0b3JSZXN1bHQsIGFzIGRlc2NyaWJlZCBhYm92ZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RJdGVyYXRvclJlc3VsdAotZ3N0X2l0ZXJhdG9yX2ZvbGQgKEdzdEl0ZXJhdG9yICogaXQsIEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uIGZ1bmMsCi0gICAgR1ZhbHVlICogcmV0LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdWYWx1ZSBpdGVtID0geyAwLCB9OwotICBHc3RJdGVyYXRvclJlc3VsdCByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGl0ICE9IE5VTEwsIEdTVF9JVEVSQVRPUl9FUlJPUik7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICByZXN1bHQgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKTsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICAgIGlmICghZnVuYyAoJml0ZW0sIHJldCwgdXNlcl9kYXRhKSkKLSAgICAgICAgICBnb3RvIGZvbGRfZG9uZTsKLQotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gICAgICAgIGdvdG8gZm9sZF9kb25lOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZ290byBmb2xkX2RvbmU7Ci0gICAgfQotICB9Ci0KLWZvbGRfZG9uZToKLQotI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTiAoMiwgNDgsIDApCi0gIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKLSNlbHNlCi0gIGlmIChpdGVtLmdfdHlwZSAhPSAwKQotICAgIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKLSNlbmRpZgotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uIGZ1bmM7Ci0gIGdwb2ludGVyIHVzZXJfZGF0YTsKLX0gRm9yZWFjaEZvbGREYXRhOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcmVhY2hfZm9sZF9mdW5jIChjb25zdCBHVmFsdWUgKiBpdGVtLCBHVmFsdWUgKiB1bnVzZWQsIEZvcmVhY2hGb2xkRGF0YSAqIGRhdGEpCi17Ci0gIGRhdGEtPmZ1bmMgKGl0ZW0sIGRhdGEtPnVzZXJfZGF0YSk7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9pdGVyYXRvcl9mb3JlYWNoOgotICogQGl0OiBUaGUgI0dzdEl0ZXJhdG9yIHRvIGl0ZXJhdGUKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IHRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVsZW1lbnQuCi0gKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCi0gKgotICogSXRlcmF0ZSBvdmVyIGFsbCBlbGVtZW50IG9mIEBpdCBhbmQgY2FsbCB0aGUgZ2l2ZW4gZnVuY3Rpb24gQGZ1bmMgZm9yCi0gKiBlYWNoIGVsZW1lbnQuCi0gKgotICogUmV0dXJuczogdGhlIHJlc3VsdCBjYWxsIHRvIGdzdF9pdGVyYXRvcl9mb2xkKCkuIFRoZSBpdGVyYXRvciB3aWxsIG5vdCBiZQotICogZnJlZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0SXRlcmF0b3JSZXN1bHQKLWdzdF9pdGVyYXRvcl9mb3JlYWNoIChHc3RJdGVyYXRvciAqIGl0LCBHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbiBmdW5jLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgRm9yZWFjaEZvbGREYXRhIGRhdGE7Ci0KLSAgZGF0YS5mdW5jID0gZnVuYzsKLSAgZGF0YS51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0KLSAgcmV0dXJuIGdzdF9pdGVyYXRvcl9mb2xkIChpdCwgKEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uKSBmb3JlYWNoX2ZvbGRfZnVuYywKLSAgICAgIE5VTEwsICZkYXRhKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR0NvbXBhcmVGdW5jIGZ1bmM7Ci0gIGdwb2ludGVyIHVzZXJfZGF0YTsKLSAgZ2Jvb2xlYW4gZm91bmQ7Ci19IEZpbmRDdXN0b21Gb2xkRGF0YTsKLQotc3RhdGljIGdib29sZWFuCi1maW5kX2N1c3RvbV9mb2xkX2Z1bmMgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHJldCwKLSAgICBGaW5kQ3VzdG9tRm9sZERhdGEgKiBkYXRhKQotewotICBpZiAoZGF0YS0+ZnVuYyAoaXRlbSwgZGF0YS0+dXNlcl9kYXRhKSA9PSAwKSB7Ci0gICAgZGF0YS0+Zm91bmQgPSBUUlVFOwotICAgIGdfdmFsdWVfY29weSAoaXRlbSwgcmV0KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b206Ci0gKiBAaXQ6IFRoZSAjR3N0SXRlcmF0b3IgdG8gaXRlcmF0ZQotICogQGZ1bmM6IChzY29wZSBjYWxsKTogdGhlIGNvbXBhcmUgZnVuY3Rpb24gdG8gdXNlCi0gKiBAZWxlbTogKG91dCk6IHBvaW50ZXIgdG8gYSAjR1ZhbHVlIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY29tcGFyZSBmdW5jdGlvbgotICoKLSAqIEZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gQGl0IHRoYXQgbWF0Y2hlcyB0aGUgY29tcGFyZSBmdW5jdGlvbiBAZnVuYy4KLSAqIEBmdW5jIHNob3VsZCByZXR1cm4gMCB3aGVuIHRoZSBlbGVtZW50IGlzIGZvdW5kLiBUaGUgZmlyc3QgcGFyYW1ldGVyCi0gKiB0byBAZnVuYyB3aWxsIGJlIHRoZSBjdXJyZW50IGVsZW1lbnQgb2YgdGhlIGl0ZXJhdG9yIGFuZCB0aGUKLSAqIHNlY29uZCBwYXJhbWV0ZXIgd2lsbCBiZSBAdXNlcl9kYXRhLgotICogVGhlIHJlc3VsdCB3aWxsIGJlIHN0b3JlZCBpbiBAZWxlbSBpZiBhIHJlc3VsdCBpcyBmb3VuZC4KLSAqCi0gKiBUaGUgaXRlcmF0b3Igd2lsbCBub3QgYmUgZnJlZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAlRkFMU0UgaWYgYW4gZXJyb3IgaGFwcGVuZWQgdG8gdGhlIGl0ZXJhdG9yCi0gKiBvciBpZiB0aGUgZWxlbWVudCB3YXNuJ3QgZm91bmQuCi0gKgotICogUmV0dXJuczogUmV0dXJucyAlVFJVRSBpZiB0aGUgZWxlbWVudCB3YXMgZm91bmQsIGVsc2UgJUZBTFNFLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKEdzdEl0ZXJhdG9yICogaXQsIEdDb21wYXJlRnVuYyBmdW5jLAotICAgIEdWYWx1ZSAqIGVsZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzOwotICBGaW5kQ3VzdG9tRm9sZERhdGEgZGF0YTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19WQUxVRV9UWVBFIChlbGVtKSA9PSBHX1RZUEVfSU5WQUxJRAotICAgICAgfHwgR19WQUxVRV9IT0xEUyAoZWxlbSwgaXQtPnR5cGUpLCBHU1RfSVRFUkFUT1JfRVJST1IpOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKGVsZW0pID09IEdfVFlQRV9JTlZBTElEKQotICAgIGdfdmFsdWVfaW5pdCAoZWxlbSwgaXQtPnR5cGUpOwotCi0gIGRhdGEuZnVuYyA9IGZ1bmM7Ci0gIGRhdGEudXNlcl9kYXRhID0gdXNlcl9kYXRhOwotICBkYXRhLmZvdW5kID0gRkFMU0U7Ci0KLSAgZG8gewotICAgIHJlcyA9Ci0gICAgICAgIGdzdF9pdGVyYXRvcl9mb2xkIChpdCwgKEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uKSBmaW5kX2N1c3RvbV9mb2xkX2Z1bmMsCi0gICAgICAgIGVsZW0sICZkYXRhKTsKLSAgICBpZiAocmVzID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCi0gICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdCk7Ci0gIH0gd2hpbGUgKHJlcyA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKLQotICBpZiAoIWRhdGEuZm91bmQpCi0gICAgZ192YWx1ZV91bnNldCAoZWxlbSk7Ci0KLSAgcmV0dXJuIGRhdGEuZm91bmQ7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEl0ZXJhdG9yIHBhcmVudDsKLSAgR1ZhbHVlIG9iamVjdDsKLSAgZ2Jvb2xlYW4gdmlzaXRlZDsKLSAgZ2Jvb2xlYW4gZW1wdHk7Ci19IEdzdFNpbmdsZU9iamVjdEl0ZXJhdG9yOwotCi1zdGF0aWMgZ3VpbnQzMiBfc2luZ2xlX29iamVjdF9kdW1teV9jb29raWUgPSAwOwotCi1zdGF0aWMgdm9pZAotZ3N0X3NpbmdsZV9vYmplY3RfaXRlcmF0b3JfY29weSAoY29uc3QgR3N0U2luZ2xlT2JqZWN0SXRlcmF0b3IgKiBpdCwKLSAgICBHc3RTaW5nbGVPYmplY3RJdGVyYXRvciAqIGNvcHkpCi17Ci0gIGlmICghaXQtPmVtcHR5KSB7Ci0gICAgbWVtc2V0ICgmY29weS0+b2JqZWN0LCAwLCBzaXplb2YgKGNvcHktPm9iamVjdCkpOwotICAgIGdfdmFsdWVfaW5pdCAoJmNvcHktPm9iamVjdCwgaXQtPnBhcmVudC50eXBlKTsKLSAgICBnX3ZhbHVlX2NvcHkgKCZpdC0+b2JqZWN0LCAmY29weS0+b2JqZWN0KTsKLSAgfQotfQotCi1zdGF0aWMgR3N0SXRlcmF0b3JSZXN1bHQKLWdzdF9zaW5nbGVfb2JqZWN0X2l0ZXJhdG9yX25leHQgKEdzdFNpbmdsZU9iamVjdEl0ZXJhdG9yICogaXQsIEdWYWx1ZSAqIHJlc3VsdCkKLXsKLSAgaWYgKGl0LT52aXNpdGVkIHx8IGl0LT5lbXB0eSkKLSAgICByZXR1cm4gR1NUX0lURVJBVE9SX0RPTkU7Ci0KLSAgZ192YWx1ZV9jb3B5ICgmaXQtPm9iamVjdCwgcmVzdWx0KTsKLSAgaXQtPnZpc2l0ZWQgPSBUUlVFOwotCi0gIHJldHVybiBHU1RfSVRFUkFUT1JfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2luZ2xlX29iamVjdF9pdGVyYXRvcl9yZXN5bmMgKEdzdFNpbmdsZU9iamVjdEl0ZXJhdG9yICogaXQpCi17Ci0gIGl0LT52aXNpdGVkID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2luZ2xlX29iamVjdF9pdGVyYXRvcl9mcmVlIChHc3RTaW5nbGVPYmplY3RJdGVyYXRvciAqIGl0KQotewotICBpZiAoIWl0LT5lbXB0eSkKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmaXQtPm9iamVjdCk7Ci19Ci0KLS8qKgotICogZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGU6Ci0gKiBAdHlwZTogI0dUeXBlIG9mIHRoZSBwYXNzZWQgb2JqZWN0Ci0gKiBAb2JqZWN0OiBvYmplY3QgdGhhdCB0aGlzIGl0ZXJhdG9yIHNob3VsZCByZXR1cm4KLSAqCi0gKiBUaGlzICNHc3RJdGVyYXRvciBpcyBhIGNvbnZlbmllbnQgaXRlcmF0b3IgZm9yIHRoZSBjb21tb24KLSAqIGNhc2Ugd2hlcmUgYSAjR3N0SXRlcmF0b3IgbmVlZHMgdG8gYmUgcmV0dXJuZWQgYnV0IG9ubHkKLSAqIGEgc2luZ2xlIG9iamVjdCBoYXMgdG8gYmUgY29uc2lkZXJlZC4gVGhpcyBoYXBwZW5zIG9mdGVuCi0gKiBmb3IgdGhlICNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uLgotICoKLSAqIFJldHVybnM6IHRoZSBuZXcgI0dzdEl0ZXJhdG9yIGZvciBAb2JqZWN0LgotICovCi1Hc3RJdGVyYXRvciAqCi1nc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoR1R5cGUgdHlwZSwgY29uc3QgR1ZhbHVlICogb2JqZWN0KQotewotICBHc3RTaW5nbGVPYmplY3RJdGVyYXRvciAqcmVzdWx0OwotCi0gIHJlc3VsdCA9IChHc3RTaW5nbGVPYmplY3RJdGVyYXRvciAqKQotICAgICAgZ3N0X2l0ZXJhdG9yX25ldyAoc2l6ZW9mIChHc3RTaW5nbGVPYmplY3RJdGVyYXRvciksCi0gICAgICB0eXBlLCBOVUxMLCAmX3NpbmdsZV9vYmplY3RfZHVtbXlfY29va2llLAotICAgICAgKEdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uKSBnc3Rfc2luZ2xlX29iamVjdF9pdGVyYXRvcl9jb3B5LAotICAgICAgKEdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uKSBnc3Rfc2luZ2xlX29iamVjdF9pdGVyYXRvcl9uZXh0LAotICAgICAgKEdzdEl0ZXJhdG9ySXRlbUZ1bmN0aW9uKSBOVUxMLAotICAgICAgKEdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24pIGdzdF9zaW5nbGVfb2JqZWN0X2l0ZXJhdG9yX3Jlc3luYywKLSAgICAgIChHc3RJdGVyYXRvckZyZWVGdW5jdGlvbikgZ3N0X3NpbmdsZV9vYmplY3RfaXRlcmF0b3JfZnJlZSk7Ci0KLSAgaWYgKG9iamVjdCkgewotICAgIGdfdmFsdWVfaW5pdCAoJnJlc3VsdC0+b2JqZWN0LCB0eXBlKTsKLSAgICBnX3ZhbHVlX2NvcHkgKG9iamVjdCwgJnJlc3VsdC0+b2JqZWN0KTsKLSAgICByZXN1bHQtPmVtcHR5ID0gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0LT5lbXB0eSA9IFRSVUU7Ci0gIH0KLSAgcmVzdWx0LT52aXNpdGVkID0gRkFMU0U7Ci0KLSAgcmV0dXJuIEdTVF9JVEVSQVRPUiAocmVzdWx0KTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RpdGVyYXRvci5oIGIvZ3N0L2dzdGl0ZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ODU2NzIuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdGl0ZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBnc3RpdGVyYXRvci5oOiBIZWFkZXIgZm9yIEdzdEl0ZXJhdG9yCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9JVEVSQVRPUl9IX18KLSNkZWZpbmUgX19HU1RfSVRFUkFUT1JfSF9fCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPiAvKiBmb3IgR1ZhbHVlIGluIHRoZSBmb2xkICovCi0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfSVRFUkFUT1IgKGdzdF9pdGVyYXRvcl9nZXRfdHlwZSAoKSkKLQotLyoqCi0gKiBHc3RJdGVyYXRvclJlc3VsdDoKLSAqIEBHU1RfSVRFUkFUT1JfRE9ORTogICBObyBtb3JlIGl0ZW1zIGluIHRoZSBpdGVyYXRvcgotICogQEdTVF9JVEVSQVRPUl9PSzogICAgIEFuIGl0ZW0gd2FzIHJldHJpZXZlZAotICogQEdTVF9JVEVSQVRPUl9SRVNZTkM6IERhdGFzdHJ1Y3R1cmUgY2hhbmdlZCB3aGlsZSBpdGVyYXRpbmcKLSAqIEBHU1RfSVRFUkFUT1JfRVJST1I6ICBBbiBlcnJvciBoYXBwZW5lZAotICoKLSAqIFRoZSByZXN1bHQgb2YgZ3N0X2l0ZXJhdG9yX25leHQoKS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lURVJBVE9SX0RPTkUgICAgID0gMCwKLSAgR1NUX0lURVJBVE9SX09LICAgICAgID0gMSwKLSAgR1NUX0lURVJBVE9SX1JFU1lOQyAgID0gMiwKLSAgR1NUX0lURVJBVE9SX0VSUk9SICAgID0gMwotfSBHc3RJdGVyYXRvclJlc3VsdDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEl0ZXJhdG9yIEdzdEl0ZXJhdG9yOwotCi0vKioKLSAqIEdzdEl0ZXJhdG9ySXRlbToKLSAqIEBHU1RfSVRFUkFUT1JfSVRFTV9TS0lQOiAgU2tpcCB0aGlzIGl0ZW0KLSAqIEBHU1RfSVRFUkFUT1JfSVRFTV9QQVNTOiAgUmV0dXJuIGl0ZW0KLSAqIEBHU1RfSVRFUkFUT1JfSVRFTV9FTkQ6ICAgU3RvcCBhZnRlciB0aGlzIGl0ZW0uCi0gKgotICogVGhlIHJlc3VsdCBvZiBhICNHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbi4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lURVJBVE9SX0lURU1fU0tJUCAgICAgICAgPSAwLAotICBHU1RfSVRFUkFUT1JfSVRFTV9QQVNTICAgICAgICA9IDEsCi0gIEdTVF9JVEVSQVRPUl9JVEVNX0VORCAgICAgICAgID0gMgotfSBHc3RJdGVyYXRvckl0ZW07Ci0KLS8qKgotICogR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb246Ci0gKiBAaXQ6IFRoZSBvcmlnaW5hbCBpdGVyYXRvcgotICogQGNvcHk6IFRoZSBjb3BpZWQgaXRlcmF0b3IKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBjb3B5IG9mIEBpdCBhbmQgc2hvdWxkCi0gKiBjcmVhdGUgYSBjb3B5IG9mIGFsbCBjdXN0b20gaXRlcmF0b3IgZmllbGRzIG9yIGluY3JlYXNlIHRoZWlyCi0gKiByZWZlcmVuY2UgY291bnRzLgotICovCi10eXBlZGVmIHZvaWQgICAgICAgICAgICAgICgqR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24pIChjb25zdCBHc3RJdGVyYXRvciAqaXQsIEdzdEl0ZXJhdG9yICpjb3B5KTsKLQotLyoqCi0gKiBHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbjoKLSAqIEBpdDogdGhlIGl0ZXJhdG9yCi0gKiBAaXRlbTogdGhlIGl0ZW0gYmVpbmcgcmV0cmlldmVkLgotICoKLSAqIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBuZXh0IGl0ZW0gb2YgdGhlIGl0ZXJhdG9yCi0gKiBoYXMgYmVlbiByZXRyaWV2ZWQuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2tpcCBpdGVtcyBvciBzdG9wCi0gKiB0aGUgaXRlcmF0b3IuCi0gKgotICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCi0gKi8KLXR5cGVkZWYgR3N0SXRlcmF0b3JJdGVtICAgKCpHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbikgICAgKEdzdEl0ZXJhdG9yICppdCwgY29uc3QgR1ZhbHVlICogaXRlbSk7Ci0KLS8qKgotICogR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb246Ci0gKiBAaXQ6IHRoZSBpdGVyYXRvcgotICogQHJlc3VsdDogYSBwb2ludGVyIHRvIGhvbGQgdGhlIG5leHQgaXRlbQotICoKLSAqIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgaXRlcmF0b3IKLSAqIHNob3VsZCBiZSByZXRyaWV2ZWQuCi0gKgotICogSW1wbGVtZW50b3JzIG9mIGEgI0dzdEl0ZXJhdG9yIHNob3VsZCBpbXBsZW1lbnQgdGhpcwotICogZnVuY3Rpb24gYW5kIHBhc3MgaXQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjdXN0b20gaXRlcmF0b3IuCi0gKiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgaXRlcmF0b3IgbG9jayBoZWxkLgotICoKLSAqIFJldHVybnM6IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KLSAqLwotdHlwZWRlZiBHc3RJdGVyYXRvclJlc3VsdCAoKkdzdEl0ZXJhdG9yTmV4dEZ1bmN0aW9uKSAgICAoR3N0SXRlcmF0b3IgKml0LCBHVmFsdWUgKnJlc3VsdCk7Ci0vKioKLSAqIEdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb246Ci0gKiBAaXQ6IHRoZSBpdGVyYXRvcgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBjb25jdXJyZW50IHVwZGF0ZSBoYXBwZW5lZAotICogdG8gdGhlIGl0ZXJhdGVkIGRhdGFzdHJ1Y3R1cmUuIFRoZSBpbXBsZW1lbnRvciBvZiB0aGUgaXRlcmF0b3Igc2hvdWxkCi0gKiByZXN0YXJ0IHRoZSBpdGVyYXRvciBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGNsZWFuIHVwIGFueSBzdGF0ZSBpdCBtaWdodAotICogaGF2ZS4KLSAqCi0gKiBJbXBsZW1lbnRvcnMgb2YgYSAjR3N0SXRlcmF0b3Igc2hvdWxkIGltcGxlbWVudCB0aGlzCi0gKiBmdW5jdGlvbiBhbmQgcGFzcyBpdCB0byB0aGUgY29uc3RydWN0b3Igb2YgdGhlIGN1c3RvbSBpdGVyYXRvci4KLSAqIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpdGVyYXRvciBsb2NrIGhlbGQuCi0gKi8KLXR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgKCpHc3RJdGVyYXRvclJlc3luY0Z1bmN0aW9uKSAgKEdzdEl0ZXJhdG9yICppdCk7Ci0vKioKLSAqIEdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uOgotICogQGl0OiB0aGUgaXRlcmF0b3IKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGl0ZXJhdG9yIGlzIGZyZWVkLgotICoKLSAqIEltcGxlbWVudG9ycyBvZiBhICNHc3RJdGVyYXRvciBzaG91bGQgaW1wbGVtZW50IHRoaXMKLSAqIGZ1bmN0aW9uIGFuZCBwYXNzIGl0IHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY3VzdG9tIGl0ZXJhdG9yLgotICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGl0ZXJhdG9yIGxvY2sgaGVsZC4KLSAqLwotdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAoKkdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uKSAgICAoR3N0SXRlcmF0b3IgKml0KTsKLQotLyoqCi0gKiBHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbjoKLSAqIEBpdGVtOiBUaGUgaXRlbQotICogQHVzZXJfZGF0YTogVXNlciBkYXRhCi0gKgotICogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBieSBnc3RfaXRlcmF0b3JfZm9yZWFjaCgpIGZvciBldmVyeSBlbGVtZW50LgotICovCi10eXBlZGVmIHZvaWQgICAgICAgICAoKkdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uKSAgICAgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogR3N0SXRlcmF0b3JGb2xkRnVuY3Rpb246Ci0gKiBAaXRlbTogdGhlIGl0ZW0gdG8gZm9sZAotICogQHJldDogYSAjR1ZhbHVlIGNvbGxlY3RpbmcgdGhlIHJlc3VsdAotICogQHVzZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gZ3N0X2l0ZXJhdG9yX2ZvbGQoKQotICoKLSAqIEEgZnVuY3Rpb24gdG8gYmUgcGFzc2VkIHRvIGdzdF9pdGVyYXRvcl9mb2xkKCkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGZvbGQgc2hvdWxkIGNvbnRpbnVlLCAlRkFMU0UgaWYgaXQgc2hvdWxkIHN0b3AuCi0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gICAgICAgICAgKCpHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgICAgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHJldCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHU1RfSVRFUkFUT1I6Ci0gKiBAaXQ6IHRoZSAjR3N0SXRlcmF0b3IgdmFsdWUKLSAqCi0gKiBNYWNybyB0byBjYXN0IHRvIGEgI0dzdEl0ZXJhdG9yCi0gKi8KLSNkZWZpbmUgR1NUX0lURVJBVE9SKGl0KSAgICAgICAgICAgICAgICAoKEdzdEl0ZXJhdG9yKikoaXQpKQotLyoqCi0gKiBHU1RfSVRFUkFUT1JfTE9DSzoKLSAqIEBpdDogdGhlICNHc3RJdGVyYXRvciB0byBnZXQgdGhlIGxvY2sgb2YKLSAqCi0gKiBNYWNybyB0byBnZXQgdGhlIGxvY2sgcHJvdGVjdGluZyB0aGUgZGF0YXN0cnVjdHVyZSBiZWluZyBpdGVyYXRlZC4KLSAqLwotI2RlZmluZSBHU1RfSVRFUkFUT1JfTE9DSyhpdCkgICAgICAgICAgIChHU1RfSVRFUkFUT1IoaXQpLT5sb2NrKQotLyoqCi0gKiBHU1RfSVRFUkFUT1JfQ09PS0lFOgotICogQGl0OiB0aGUgI0dzdEl0ZXJhdG9yIHRvIGdldCB0aGUgY29va2llIG9mCi0gKgotICogTWFjcm8gdG8gZ2V0IHRoZSBjb29raWUgb2YgYSAjR3N0SXRlcmF0b3IuIFRoZSBjb29raWUgb2YgdGhlCi0gKiBpdGVyYXRvciBpcyB0aGUgdmFsdWUgb2YgdGhlIG1hc3RlciBjb29raWUgd2hlbiB0aGUgaXRlcmF0b3IKLSAqIHdhcyBjcmVhdGVkLgotICogV2hlbmV2ZXIgdGhlIGl0ZXJhdG9yIGlzIGl0ZXJhdGVkLCB0aGUgdmFsdWUgaXMgY29tcGFyZWQgdG8gdGhlCi0gKiB2YWx1ZSBvZiB0aGUgbWFzdGVyIGNvb2tpZS4gSWYgdGhleSBhcmUgZGlmZmVyZW50LCBhIGNvbmN1cnJlbnQKLSAqIG1vZGlmaWNhdGlvbiBoYXBwZW5lZCB0byB0aGUgaXRlcmF0b3IgYW5kIGEgcmVzeW5jIGlzIG5lZWRlZC4KLSAqLwotI2RlZmluZSBHU1RfSVRFUkFUT1JfQ09PS0lFKGl0KSAgICAgICAgIChHU1RfSVRFUkFUT1IoaXQpLT5jb29raWUpCi0vKioKLSAqIEdTVF9JVEVSQVRPUl9PUklHX0NPT0tJRToKLSAqIEBpdDogdGhlICNHc3RJdGVyYXRvciB0byBnZXQgdGhlIG1hc3RlciBjb29raWUgb2YKLSAqCi0gKiBNYWNybyB0byBnZXQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBtYXN0ZXIgY29va2llIGlzIHN0b3JlZC4gVGhlCi0gKiBtYXN0ZXIgY29va2llIHByb3RlY3RzIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgaXRlcmF0ZWQgYW5kIGdldHMgdXBkYXRlZAotICogd2hlbmV2ZXIgdGhlIGRhdGFzdHJ1Y3R1cmUgY2hhbmdlcy4KLSAqLwotI2RlZmluZSBHU1RfSVRFUkFUT1JfT1JJR19DT09LSUUoaXQpICAgIChHU1RfSVRFUkFUT1IoaXQpLT5tYXN0ZXJfY29va2llKQotCi0vKioKLSAqIEdzdEl0ZXJhdG9yOgotICogQGNvcHk6IFRoZSBmdW5jdGlvbiB0byBjb3B5IHRoZSBpdGVyYXRvcgotICogQG5leHQ6IFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIG5leHQgaXRlbSBpbiB0aGUgaXRlcmF0b3IKLSAqIEBpdGVtOiBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGl0ZW0gcmV0cmlldmVkCi0gKiBAcmVzeW5jOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgcmVzeW5jIGlzIG5lZWRlZC4KLSAqIEBmcmVlOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBpdGVyYXRvciBpcyBmcmVlZAotICogQHB1c2hlZDogVGhlIGl0ZXJhdG9yIHRoYXQgaXMgY3VycmVudGx5IHB1c2hlZCB3aXRoIGdzdF9pdGVyYXRvcl9wdXNoKCkKLSAqIEB0eXBlOiBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0IHRoYXQgdGhpcyBpdGVyYXRvciB3aWxsIHJldHVybgotICogQGxvY2s6IFRoZSBsb2NrIHByb3RlY3RpbmcgdGhlIGRhdGEgc3RydWN0dXJlIGFuZCB0aGUgY29va2llLgotICogQGNvb2tpZTogVGhlIGNvb2tpZTsgdGhlIHZhbHVlIG9mIHRoZSBtYXN0ZXJfY29va2llIHdoZW4gdGhpcyBpdGVyYXRvciB3YXMKLSAqICAgICAgICAgIGNyZWF0ZWQuCi0gKiBAbWFzdGVyX2Nvb2tpZTogQSBwb2ludGVyIHRvIHRoZSBtYXN0ZXIgY29va2llLgotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBpdGVyYXRvcgotICoKLSAqICNHc3RJdGVyYXRvciBiYXNlIHN0cnVjdHVyZS4gVGhlIHZhbHVlcyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUKLSAqIHByb3RlY3RlZCBmb3Igc3ViY2xhc3NlcywgdXNlIHRoZSBtZXRob2RzIHRvIHVzZSB0aGUgI0dzdEl0ZXJhdG9yLgotICovCi1zdHJ1Y3QgX0dzdEl0ZXJhdG9yIHsKLSAgLyo8IHByb3RlY3RlZCA+Ki8KLSAgR3N0SXRlcmF0b3JDb3B5RnVuY3Rpb24gY29weTsKLSAgR3N0SXRlcmF0b3JOZXh0RnVuY3Rpb24gbmV4dDsKLSAgR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24gaXRlbTsKLSAgR3N0SXRlcmF0b3JSZXN5bmNGdW5jdGlvbiByZXN5bmM7Ci0gIEdzdEl0ZXJhdG9yRnJlZUZ1bmN0aW9uIGZyZWU7Ci0KLSAgR3N0SXRlcmF0b3IgKnB1c2hlZDsgICAgICAgICAgLyogcHVzaGVkIGl0ZXJhdG9yICovCi0KLSAgR1R5cGUgICAgIHR5cGU7Ci0gIEdNdXRleCAgICpsb2NrOwotICBndWludDMyICAgY29va2llOyAgICAgICAgICAgICAvKiBjb29raWUgb2YgdGhlIGl0ZXJhdG9yICovCi0gIGd1aW50MzIgICptYXN0ZXJfY29va2llOyAgICAgIC8qIHBvaW50ZXIgdG8gZ3VpbnQzMiBob2xkaW5nIHRoZSBjb29raWUgd2hlbiB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIHdhcyBjcmVhdGVkICovCi0gIGd1aW50ICAgICBzaXplOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9nZXRfdHlwZSAgICAgICAgICAgKHZvaWQpOwotCi0vKiBjcmVhdGluZyBpdGVyYXRvcnMgKi8KLUdzdEl0ZXJhdG9yKiAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9uZXcgICAgICAgICAgICAgICAgKGd1aW50IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR011dGV4ICpsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAqbWFzdGVyX2Nvb2tpZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEl0ZXJhdG9yQ29weUZ1bmN0aW9uIGNvcHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJdGVyYXRvck5leHRGdW5jdGlvbiBuZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SXRlcmF0b3JJdGVtRnVuY3Rpb24gaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEl0ZXJhdG9yUmVzeW5jRnVuY3Rpb24gcmVzeW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SXRlcmF0b3JGcmVlRnVuY3Rpb24gZnJlZSkgR19HTlVDX01BTExPQzsKLQotR3N0SXRlcmF0b3IqICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX25ld19saXN0ICAgICAgICAgICAoR1R5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdNdXRleCAqbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgKm1hc3Rlcl9jb29raWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAqKmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHT2JqZWN0ICogb3duZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJdGVyYXRvckl0ZW1GdW5jdGlvbiBpdGVtKSBHX0dOVUNfTUFMTE9DOwotCi1Hc3RJdGVyYXRvciogICAgICAgICAgICBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAgICAgICAgIChHVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICogb2JqZWN0KSBHX0dOVUNfTUFMTE9DOwotCi1Hc3RJdGVyYXRvciogICAgICAgICAgICBnc3RfaXRlcmF0b3JfY29weSAgICAgICAgICAgICAgIChjb25zdCBHc3RJdGVyYXRvciAqaXQpIEdfR05VQ19NQUxMT0M7Ci0KLS8qIHVzaW5nIGl0ZXJhdG9ycyAqLwotR3N0SXRlcmF0b3JSZXN1bHQgICAgICAgZ3N0X2l0ZXJhdG9yX25leHQgICAgICAgICAgICAgICAoR3N0SXRlcmF0b3IgKml0LCBHVmFsdWUgKiBlbGVtKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgICAgICAgICAgICAgKEdzdEl0ZXJhdG9yICppdCk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfZnJlZSAgICAgICAgICAgICAgIChHc3RJdGVyYXRvciAqaXQpOwotCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcHVzaCAgICAgICAgICAgICAgIChHc3RJdGVyYXRvciAqaXQsIEdzdEl0ZXJhdG9yICpvdGhlcik7Ci0KLS8qIGhpZ2hlci1vcmRlciBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIGl0ZXJhdG9ycyAqLwotR3N0SXRlcmF0b3IqICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX2ZpbHRlciAgICAgICAgICAgICAoR3N0SXRlcmF0b3IgKml0LCBHQ29tcGFyZUZ1bmMgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqIHVzZXJfZGF0YSkgR19HTlVDX01BTExPQzsKLUdzdEl0ZXJhdG9yUmVzdWx0ICAgICAgIGdzdF9pdGVyYXRvcl9mb2xkICAgICAgICAgICAgICAgKEdzdEl0ZXJhdG9yICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVmFsdWUgKnJldCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLUdzdEl0ZXJhdG9yUmVzdWx0ICAgICAgIGdzdF9pdGVyYXRvcl9mb3JlYWNoICAgICAgICAgICAgKEdzdEl0ZXJhdG9yICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gICAgICAgIChHc3RJdGVyYXRvciAqaXQsIEdDb21wYXJlRnVuYyBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlICplbGVtLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdEl0ZXJhdG9yLCBnc3RfaXRlcmF0b3JfZnJlZSkKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfSVRFUkFUT1JfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0bWFjcm9zLmggYi9nc3QvZ3N0bWFjcm9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzY2Y2Y2YuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdG1hY3Jvcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9fR1NUX01BQ1JPU19IX18KLSNkZWZpbmUgX19HU1RfTUFDUk9TX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPiA0KQotIyBkZWZpbmUgR1NUX0dOVUNfQ09OU1RSVUNUT1IgXAotICBfX2F0dHJpYnV0ZV9fICgoY29uc3RydWN0b3IpKQotI2Vsc2UgIC8qICFfX0dOVUNfXyAqLwotIyBkZWZpbmUgR1NUX0dOVUNfQ09OU1RSVUNUT1IKLSNlbmRpZiAvKiAhX19HTlVDX18gKi8KLQotI2lmIGRlZmluZWQgKF9fR05VQ19fKSAmJiAhZGVmaW5lZCAoR1NUX0lNUExFTUVOVF9JTkxJTkVTKQotIyBkZWZpbmUgR1NUX0lOTElORV9GVU5DIGV4dGVybiBfX2lubGluZV9fCi0jIGRlZmluZSBHU1RfQ0FOX0lOTElORSAxCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyBkZWZpbmUgR1NUX0lOTElORV9GVU5DIGV4dGVybiBfX2lubGluZQotIyBkZWZpbmUgR1NUX0NBTl9JTkxJTkUgMQotI2Vsc2UKLSMgZGVmaW5lIEdTVF9JTkxJTkVfRlVOQyBleHRlcm4KLSMgdW5kZWYgR1NUX0NBTl9JTkxJTkUKLSNlbmRpZgotCi0jaWYgKCFkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pIHx8IF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMKSAmJiAhZGVmaW5lZChyZXN0cmljdCkKLSMgIGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDQKLSMgICAgZGVmaW5lIHJlc3RyaWN0IF9fcmVzdHJpY3RfXwotIyAgZWxzZQotIyAgICBkZWZpbmUgcmVzdHJpY3QKLSMgIGVuZGlmCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX01BQ1JPU19IX18gKi8KLQotCmRpZmYgLS1naXQgYS9nc3QvZ3N0bWVtb3J5LmMgYi9nc3QvZ3N0bWVtb3J5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YzQyOWYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdG1lbW9yeS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDExIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5iZT4KLSAqCi0gKiBnc3RtZW1vcnkuYzogbWVtb3J5IGJsb2NrIGhhbmRsaW5nCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdG1lbW9yeQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiByZWZjb3VudGVkIHdyYXBwZXIgZm9yIG1lbW9yeSBibG9ja3MKLSAqIEBzZWVfYWxzbzogI0dzdEJ1ZmZlcgotICoKLSAqIEdzdE1lbW9yeSBpcyBhIGxpZ2h0d2VpZ2h0IHJlZmNvdW50ZWQgb2JqZWN0IHRoYXQgd3JhcHMgYSByZWdpb24gb2YgbWVtb3J5LgotICogVGhleSBhcmUgdHlwaWNhbGx5IHVzZWQgdG8gbWFuYWdlIHRoZSBkYXRhIG9mIGEgI0dzdEJ1ZmZlci4KLSAqCi0gKiBBIEdzdE1lbW9yeSBvYmplY3QgaGFzIGFuIGFsbG9jYXRlZCByZWdpb24gb2YgbWVtb3J5IG9mIG1heHNpemUuIFRoZSBtYXhpbXVtCi0gKiBzaXplIGRvZXMgbm90IGNoYW5nZSBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSBtZW1vcnkgb2JqZWN0LiBUaGUgbWVtb3J5Ci0gKiBhbHNvIGhhcyBhbiBvZmZzZXQgYW5kIHNpemUgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbGlkIHJhbmdlIG9mIG1lbW9yeQotICogaW4gdGhlIGFsbG9jYXRlZCByZWdpb24uCi0gKgotICogTWVtb3J5IGlzIHVzdWFsbHkgY3JlYXRlZCBieSBhbGxvY2F0b3JzIHdpdGggYSBnc3RfYWxsb2NhdG9yX2FsbG9jKCkKLSAqIG1ldGhvZCBjYWxsLiBXaGVuICVOVUxMIGlzIHVzZWQgYXMgdGhlIGFsbG9jYXRvciwgdGhlIGRlZmF1bHQgYWxsb2NhdG9yIHdpbGwKLSAqIGJlIHVzZWQuCi0gKgotICogTmV3IGFsbG9jYXRvcnMgY2FuIGJlIHJlZ2lzdGVyZWQgd2l0aCBnc3RfYWxsb2NhdG9yX3JlZ2lzdGVyKCkuCi0gKiBBbGxvY2F0b3JzIGFyZSBpZGVudGlmaWVkIGJ5IG5hbWUgYW5kIGNhbiBiZSByZXRyaWV2ZWQgd2l0aAotICogZ3N0X2FsbG9jYXRvcl9maW5kKCkuIGdzdF9hbGxvY2F0b3Jfc2V0X2RlZmF1bHQoKSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlCi0gKiBkZWZhdWx0IGFsbG9jYXRvci4KLSAqCi0gKiBOZXcgbWVtb3J5IGNhbiBiZSBjcmVhdGVkIHdpdGggZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCgpIHRoYXQgd3JhcHMgdGhlIG1lbW9yeQotICogYWxsb2NhdGVkIGVsc2V3aGVyZS4KLSAqCi0gKiBSZWZjb3VudGluZyBvZiB0aGUgbWVtb3J5IGJsb2NrIGlzIHBlcmZvcm1lZCB3aXRoIGdzdF9tZW1vcnlfcmVmKCkgYW5kCi0gKiBnc3RfbWVtb3J5X3VucmVmKCkuCi0gKgotICogVGhlIHNpemUgb2YgdGhlIG1lbW9yeSBjYW4gYmUgcmV0cmlldmVkIGFuZCBjaGFuZ2VkIHdpdGgKLSAqIGdzdF9tZW1vcnlfZ2V0X3NpemVzKCkgYW5kIGdzdF9tZW1vcnlfcmVzaXplKCkgcmVzcGVjdGl2ZWx5LgotICoKLSAqIEdldHRpbmcgYWNjZXNzIHRvIHRoZSBkYXRhIG9mIHRoZSBtZW1vcnkgaXMgcGVyZm9ybWVkIHdpdGggZ3N0X21lbW9yeV9tYXAoKS4KLSAqIFRoZSBjYWxsIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byBvZmZzZXQgYnl0ZXMgaW50byB0aGUgcmVnaW9uIG9mIG1lbW9yeS4KLSAqIEFmdGVyIHRoZSBtZW1vcnkgYWNjZXNzIGlzIGNvbXBsZXRlZCwgZ3N0X21lbW9yeV91bm1hcCgpIHNob3VsZCBiZSBjYWxsZWQuCi0gKgotICogTWVtb3J5IGNhbiBiZSBjb3BpZWQgd2l0aCBnc3RfbWVtb3J5X2NvcHkoKSwgd2hpY2ggd2lsbCByZXR1cm4gYSB3cml0YWJsZQotICogY29weS4gZ3N0X21lbW9yeV9zaGFyZSgpIHdpbGwgY3JlYXRlIGEgbmV3IG1lbW9yeSBibG9jayB0aGF0IHNoYXJlcyB0aGUKLSAqIG1lbW9yeSB3aXRoIGFuIGV4aXN0aW5nIG1lbW9yeSBibG9jayBhdCBhIGN1c3RvbSBvZmZzZXQgYW5kIHdpdGggYSBjdXN0b20KLSAqIHNpemUuCi0gKgotICogTWVtb3J5IGNhbiBiZSBlZmZpY2llbnRseSBtZXJnZWQgd2hlbiBnc3RfbWVtb3J5X2lzX3NwYW4oKSByZXR1cm5zICVUUlVFLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0bWVtb3J5LmgiCi0KLUdUeXBlIF9nc3RfbWVtb3J5X3R5cGUgPSAwOwotR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RNZW1vcnksIGdzdF9tZW1vcnkpOwotCi1zdGF0aWMgR3N0TWVtb3J5ICoKLV9nc3RfbWVtb3J5X2NvcHkgKEdzdE1lbW9yeSAqIG1lbSkKLXsKLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9NRU1PUlksICJjb3B5IG1lbW9yeSAlcCIsIG1lbSk7Ci0gIHJldHVybiBnc3RfbWVtb3J5X2NvcHkgKG1lbSwgMCwgLTEpOwotfQotCi1zdGF0aWMgdm9pZAotX2dzdF9tZW1vcnlfZnJlZSAoR3N0TWVtb3J5ICogbWVtKQotewotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX01FTU9SWSwgImZyZWUgbWVtb3J5ICVwIiwgbWVtKTsKLQotICBpZiAobWVtLT5wYXJlbnQpIHsKLSAgICBnc3RfbWVtb3J5X3VubG9jayAobWVtLT5wYXJlbnQsIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKTsKLSAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0tPnBhcmVudCk7Ci0gIH0KLQotICBhbGxvY2F0b3IgPSBtZW0tPmFsbG9jYXRvcjsKLQotICBnc3RfYWxsb2NhdG9yX2ZyZWUgKGFsbG9jYXRvciwgbWVtKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYWxsb2NhdG9yKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVtb3J5X2luaXQ6IChza2lwKQotICogQG1lbTogYSAjR3N0TWVtb3J5Ci0gKiBAZmxhZ3M6ICNHc3RNZW1vcnlGbGFncwotICogQGFsbG9jYXRvcjogdGhlICNHc3RBbGxvY2F0b3IKLSAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgb2YgQG1lbQotICogQG1heHNpemU6IHRoZSB0b3RhbCBzaXplIG9mIHRoZSBtZW1vcnkKLSAqIEBhbGlnbjogdGhlIGFsaWdubWVudCBvZiB0aGUgbWVtb3J5Ci0gKiBAb2Zmc2V0OiBUaGUgb2Zmc2V0IGluIHRoZSBtZW1vcnkKLSAqIEBzaXplOiB0aGUgc2l6ZSBvZiB2YWxpZCBkYXRhIGluIHRoZSBtZW1vcnkKLQotICogSW5pdGlhbGl6ZXMgYSBuZXdseSBhbGxvY2F0ZWQgQG1lbSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiBUaGlzIGZ1bmN0aW9uCi0gKiB3aWxsIGNhbGwgZ3N0X21pbmlfb2JqZWN0X2luaXQoKSB3aXRoIHRoZSBkZWZhdWx0IG1lbW9yeSBwYXJhbWV0ZXJzLgotICovCi12b2lkCi1nc3RfbWVtb3J5X2luaXQgKEdzdE1lbW9yeSAqIG1lbSwgR3N0TWVtb3J5RmxhZ3MgZmxhZ3MsCi0gICAgR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLCBHc3RNZW1vcnkgKiBwYXJlbnQsIGdzaXplIG1heHNpemUsIGdzaXplIGFsaWduLAotICAgIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKLXsKLSAgZ3N0X21pbmlfb2JqZWN0X2luaXQgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtZW0pLAotICAgICAgZmxhZ3MgfCBHU1RfTUlOSV9PQkpFQ1RfRkxBR19MT0NLQUJMRSwgR1NUX1RZUEVfTUVNT1JZLAotICAgICAgKEdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24pIF9nc3RfbWVtb3J5X2NvcHksIE5VTEwsCi0gICAgICAoR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbikgX2dzdF9tZW1vcnlfZnJlZSk7Ci0KLSAgbWVtLT5hbGxvY2F0b3IgPSBnc3Rfb2JqZWN0X3JlZiAoYWxsb2NhdG9yKTsKLSAgaWYgKHBhcmVudCkgewotICAgIC8qIEZJWE1FIDIuMDogdGhpcyBjYW4gZmFpbCBpZiB0aGUgbWVtb3J5IGlzIGFscmVhZHkgd3JpdGUgbG9ja2VkICovCi0gICAgZ3N0X21lbW9yeV9sb2NrIChwYXJlbnQsIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKTsKLSAgICBnc3RfbWVtb3J5X3JlZiAocGFyZW50KTsKLSAgfQotICBtZW0tPnBhcmVudCA9IHBhcmVudDsKLSAgbWVtLT5tYXhzaXplID0gbWF4c2l6ZTsKLSAgbWVtLT5hbGlnbiA9IGFsaWduOwotICBtZW0tPm9mZnNldCA9IG9mZnNldDsKLSAgbWVtLT5zaXplID0gc2l6ZTsKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX01FTU9SWSwgIm5ldyBtZW1vcnkgJXAsIG1heHNpemU6JSIgR19HU0laRV9GT1JNQVQKLSAgICAgICIgb2Zmc2V0OiUiIEdfR1NJWkVfRk9STUFUICIgc2l6ZTolIiBHX0dTSVpFX0ZPUk1BVCwgbWVtLCBtYXhzaXplLAotICAgICAgb2Zmc2V0LCBzaXplKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVtb3J5X2lzX3R5cGU6Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkKLSAqIEBtZW1fdHlwZTogYSBtZW1vcnkgdHlwZQotICoKLSAqIENoZWNrIGlmIEBtZW0gaWYgYWxsb2NhdGVkIHdpdGggYW4gYWxsb2NhdG9yIGZvciBAbWVtX3R5cGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQG1lbSB3YXMgYWxsb2NhdGVkIGZyb20gYW4gYWxsb2NhdG9yIGZvciBAbWVtX3R5cGUuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X21lbW9yeV9pc190eXBlIChHc3RNZW1vcnkgKiBtZW0sIGNvbnN0IGdjaGFyICogbWVtX3R5cGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0gIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVtLT5hbGxvY2F0b3IgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVtX3R5cGUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHJldHVybiAoZ19zdHJjbXAwIChtZW0tPmFsbG9jYXRvci0+bWVtX3R5cGUsIG1lbV90eXBlKSA9PSAwKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVtb3J5X2dldF9zaXplczoKLSAqIEBtZW06IGEgI0dzdE1lbW9yeQotICogQG9mZnNldDogcG9pbnRlciB0byBvZmZzZXQKLSAqIEBtYXhzaXplOiBwb2ludGVyIHRvIG1heHNpemUKLSAqCi0gKiBHZXQgdGhlIGN1cnJlbnQgQHNpemUsIEBvZmZzZXQgYW5kIEBtYXhzaXplIG9mIEBtZW0uCi0gKgotICogUmV0dXJuczogdGhlIGN1cnJlbnQgc2l6ZXMgb2YgQG1lbQotICovCi1nc2l6ZQotZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKEdzdE1lbW9yeSAqIG1lbSwgZ3NpemUgKiBvZmZzZXQsIGdzaXplICogbWF4c2l6ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1lbSAhPSBOVUxMLCAwKTsKLQotICBpZiAob2Zmc2V0KQotICAgICpvZmZzZXQgPSBtZW0tPm9mZnNldDsKLSAgaWYgKG1heHNpemUpCi0gICAgKm1heHNpemUgPSBtZW0tPm1heHNpemU7Ci0KLSAgcmV0dXJuIG1lbS0+c2l6ZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVtb3J5X3Jlc2l6ZToKLSAqIEBtZW06IGEgI0dzdE1lbW9yeQotICogQG9mZnNldDogYSBuZXcgb2Zmc2V0Ci0gKiBAc2l6ZTogYSBuZXcgc2l6ZQotICoKLSAqIFJlc2l6ZSB0aGUgbWVtb3J5IHJlZ2lvbi4gQG1lbSBzaG91bGQgYmUgd3JpdGFibGUgYW5kIG9mZnNldCArIHNpemUgc2hvdWxkIGJlCi0gKiBsZXNzIHRoYW4gdGhlIG1heHNpemUgb2YgQG1lbS4KLSAqCi0gKiAjR1NUX01FTU9SWV9GTEFHX1pFUk9fUFJFRklYRUQgYW5kICNHU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQgd2lsbCBiZQotICogY2xlYXJlZCB3aGVuIG9mZnNldCBvciBwYWRkaW5nIGlzIGluY3JlYXNlZCByZXNwZWN0aXZlbHkuCi0gKi8KLXZvaWQKLWdzdF9tZW1vcnlfcmVzaXplIChHc3RNZW1vcnkgKiBtZW0sIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1lbSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X21lbW9yeV9pc193cml0YWJsZSAobWVtKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG9mZnNldCA+PSAwIHx8IG1lbS0+b2Zmc2V0ID49IC1vZmZzZXQpOwotICBnX3JldHVybl9pZl9mYWlsIChzaXplICsgbWVtLT5vZmZzZXQgKyBvZmZzZXQgPD0gbWVtLT5tYXhzaXplKTsKLQotICAvKiBpZiB3ZSBpbmNyZWFzZSB0aGUgcHJlZml4LCB3ZSBjYW4ndCBndWFyYW50ZWUgaXQgaXMgc3RpbGwgMCBmaWxsZWQgKi8KLSAgaWYgKChvZmZzZXQgPiAwKSAmJiBHU1RfTUVNT1JZX0lTX1pFUk9fUFJFRklYRUQgKG1lbSkpCi0gICAgR1NUX01FTU9SWV9GTEFHX1VOU0VUIChtZW0sIEdTVF9NRU1PUllfRkxBR19aRVJPX1BSRUZJWEVEKTsKLQotICAvKiBpZiB3ZSBpbmNyZWFzZSB0aGUgcGFkZGluZywgd2UgY2FuJ3QgZ3VhcmFudGVlIGl0IGlzIHN0aWxsIDAgZmlsbGVkICovCi0gIGlmICgob2Zmc2V0ICsgc2l6ZSA8IG1lbS0+c2l6ZSkgJiYgR1NUX01FTU9SWV9JU19aRVJPX1BBRERFRCAobWVtKSkKLSAgICBHU1RfTUVNT1JZX0ZMQUdfVU5TRVQgKG1lbSwgR1NUX01FTU9SWV9GTEFHX1pFUk9fUEFEREVEKTsKLQotICBtZW0tPm9mZnNldCArPSBvZmZzZXQ7Ci0gIG1lbS0+c2l6ZSA9IHNpemU7Ci19Ci0KLS8qKgotICogZ3N0X21lbW9yeV9tYWtlX21hcHBlZDoKLSAqIEBtZW06ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0TWVtb3J5Ci0gKiBAaW5mbzogKG91dCk6IHBvaW50ZXIgZm9yIGluZm8KLSAqIEBmbGFnczogbWFwcGluZyBmbGFncwotICoKLSAqIENyZWF0ZSBhICNHc3RNZW1vcnkgb2JqZWN0IHRoYXQgaXMgbWFwcGVkIHdpdGggQGZsYWdzLiBJZiBAbWVtIGlzIG1hcHBhYmxlCi0gKiB3aXRoIEBmbGFncywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtYXBwZWQgQG1lbSBkaXJlY3RseS4gT3RoZXJ3aXNlIGEKLSAqIG1hcHBlZCBjb3B5IG9mIEBtZW0gaXMgcmV0dXJuZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2Ygb2xkIEBtZW0gYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gYSBuZXcKLSAqICNHc3RNZW1vcnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdE1lbW9yeSBvYmplY3QgbWFwcGVkCi0gKiB3aXRoIEBmbGFncyBvciAlTlVMTCB3aGVuIGEgbWFwcGluZyBpcyBub3QgcG9zc2libGUuCi0gKi8KLUdzdE1lbW9yeSAqCi1nc3RfbWVtb3J5X21ha2VfbWFwcGVkIChHc3RNZW1vcnkgKiBtZW0sIEdzdE1hcEluZm8gKiBpbmZvLCBHc3RNYXBGbGFncyBmbGFncykKLXsKLSAgR3N0TWVtb3J5ICpyZXN1bHQ7Ci0KLSAgaWYgKGdzdF9tZW1vcnlfbWFwIChtZW0sIGluZm8sIGZsYWdzKSkgewotICAgIHJlc3VsdCA9IG1lbTsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHQgPSBnc3RfbWVtb3J5X2NvcHkgKG1lbSwgMCwgLTEpOwotICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICBnb3RvIGNhbm5vdF9jb3B5OwotCi0gICAgaWYgKCFnc3RfbWVtb3J5X21hcCAocmVzdWx0LCBpbmZvLCBmbGFncykpCi0gICAgICBnb3RvIGNhbm5vdF9tYXA7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLWNhbm5vdF9jb3B5OgotICB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9NRU1PUlksICJjYW5ub3QgY29weSBtZW1vcnkgJXAiLCBtZW0pOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1jYW5ub3RfbWFwOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9NRU1PUlksICJjYW5ub3QgbWFwIG1lbW9yeSAlcCB3aXRoIGZsYWdzICVkIiwgbWVtLAotICAgICAgICBmbGFncyk7Ci0gICAgZ3N0X21lbW9yeV91bnJlZiAocmVzdWx0KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9tZW1vcnlfbWFwOgotICogQG1lbTogYSAjR3N0TWVtb3J5Ci0gKiBAaW5mbzogKG91dCk6IHBvaW50ZXIgZm9yIGluZm8KLSAqIEBmbGFnczogbWFwcGluZyBmbGFncwotICoKLSAqIEZpbGwgQGluZm8gd2l0aCB0aGUgcG9pbnRlciBhbmQgc2l6ZXMgb2YgdGhlIG1lbW9yeSBpbiBAbWVtIHRoYXQgY2FuIGJlCi0gKiBhY2Nlc3NlZCBhY2NvcmRpbmcgdG8gQGZsYWdzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiAlRkFMU0UgZm9yIHZhcmlvdXMgcmVhc29uczoKLSAqIC0gdGhlIG1lbW9yeSBiYWNrZWQgYnkgQG1lbSBpcyBub3QgYWNjZXNzaWJsZSB3aXRoIHRoZSBnaXZlbiBAZmxhZ3MuCi0gKiAtIHRoZSBtZW1vcnkgd2FzIGFscmVhZHkgbWFwcGVkIHdpdGggYSBkaWZmZXJlbnQgbWFwcGluZy4KLSAqCi0gKiBAaW5mbyBhbmQgaXRzIGNvbnRlbnRzIHJlbWFpbiB2YWxpZCBmb3IgYXMgbG9uZyBhcyBAbWVtIGlzIHZhbGlkIGFuZAotICogdW50aWwgZ3N0X21lbW9yeV91bm1hcCgpIGlzIGNhbGxlZC4KLSAqCi0gKiBGb3IgZWFjaCBnc3RfbWVtb3J5X21hcCgpIGNhbGwsIGEgY29ycmVzcG9uZGluZyBnc3RfbWVtb3J5X3VubWFwKCkgY2FsbAotICogc2hvdWxkIGJlIGRvbmUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG1hcCBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gKi8KLWdib29sZWFuCi1nc3RfbWVtb3J5X21hcCAoR3N0TWVtb3J5ICogbWVtLCBHc3RNYXBJbmZvICogaW5mbywgR3N0TWFwRmxhZ3MgZmxhZ3MpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0gIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5mbyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKCFnc3RfbWVtb3J5X2xvY2sgKG1lbSwgKEdzdExvY2tGbGFncykgZmxhZ3MpKQotICAgIGdvdG8gbG9ja19mYWlsZWQ7Ci0KLSAgaW5mby0+ZmxhZ3MgPSBmbGFnczsKLSAgaW5mby0+bWVtb3J5ID0gbWVtOwotICBpbmZvLT5zaXplID0gbWVtLT5zaXplOwotICBpbmZvLT5tYXhzaXplID0gbWVtLT5tYXhzaXplIC0gbWVtLT5vZmZzZXQ7Ci0KLSAgaWYgKG1lbS0+YWxsb2NhdG9yLT5tZW1fbWFwX2Z1bGwpCi0gICAgaW5mby0+ZGF0YSA9IG1lbS0+YWxsb2NhdG9yLT5tZW1fbWFwX2Z1bGwgKG1lbSwgaW5mbywgbWVtLT5tYXhzaXplKTsKLSAgZWxzZQotICAgIGluZm8tPmRhdGEgPSBtZW0tPmFsbG9jYXRvci0+bWVtX21hcCAobWVtLCBtZW0tPm1heHNpemUsIGZsYWdzKTsKLQotICBpZiAoR19VTkxJS0VMWSAoaW5mby0+ZGF0YSA9PSBOVUxMKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGluZm8tPmRhdGEgPSBpbmZvLT5kYXRhICsgbWVtLT5vZmZzZXQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1sb2NrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfTUVNT1JZLCAibWVtICVwOiBsb2NrICVkIGZhaWxlZCIsIG1lbSwgZmxhZ3MpOwotICAgIG1lbXNldCAoaW5mbywgMCwgc2l6ZW9mIChHc3RNYXBJbmZvKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1lcnJvcjoKLSAgewotICAgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nLCByZXN0b3JlIHRoZSBvcmdpbmFsIHN0YXRlIGFnYWluICovCi0gICAgR1NUX0NBVF9FUlJPUiAoR1NUX0NBVF9NRU1PUlksICJtZW0gJXA6IHN1YmNsYXNzIG1hcCBmYWlsZWQiLCBtZW0pOwotICAgIGdzdF9tZW1vcnlfdW5sb2NrIChtZW0sIChHc3RMb2NrRmxhZ3MpIGZsYWdzKTsKLSAgICBtZW1zZXQgKGluZm8sIDAsIHNpemVvZiAoR3N0TWFwSW5mbykpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9tZW1vcnlfdW5tYXA6Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkKLSAqIEBpbmZvOiBhICNHc3RNYXBJbmZvCi0gKgotICogUmVsZWFzZSB0aGUgbWVtb3J5IG9idGFpbmVkIHdpdGggZ3N0X21lbW9yeV9tYXAoKQotICovCi12b2lkCi1nc3RfbWVtb3J5X3VubWFwIChHc3RNZW1vcnkgKiBtZW0sIEdzdE1hcEluZm8gKiBpbmZvKQotewotICBnX3JldHVybl9pZl9mYWlsIChtZW0gIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGluZm8gIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGluZm8tPm1lbW9yeSA9PSBtZW0pOwotCi0gIGlmIChtZW0tPmFsbG9jYXRvci0+bWVtX3VubWFwX2Z1bGwpCi0gICAgbWVtLT5hbGxvY2F0b3ItPm1lbV91bm1hcF9mdWxsIChtZW0sIGluZm8pOwotICBlbHNlCi0gICAgbWVtLT5hbGxvY2F0b3ItPm1lbV91bm1hcCAobWVtKTsKLSAgZ3N0X21lbW9yeV91bmxvY2sgKG1lbSwgKEdzdExvY2tGbGFncykgaW5mby0+ZmxhZ3MpOwotfQotCi0vKioKLSAqIGdzdF9tZW1vcnlfY29weToKLSAqIEBtZW06IGEgI0dzdE1lbW9yeQotICogQG9mZnNldDogb2Zmc2V0IHRvIGNvcHkgZnJvbQotICogQHNpemU6IHNpemUgdG8gY29weSwgb3IgLTEgdG8gY29weSB0byB0aGUgZW5kIG9mIHRoZSBtZW1vcnkgcmVnaW9uCi0gKgotICogUmV0dXJuIGEgY29weSBvZiBAc2l6ZSBieXRlcyBmcm9tIEBtZW0gc3RhcnRpbmcgZnJvbSBAb2Zmc2V0LiBUaGlzIGNvcHkgaXMKLSAqIGd1YXJhbnRlZWQgdG8gYmUgd3JpdGFibGUuIEBzaXplIGNhbiBiZSBzZXQgdG8gLTEgdG8gcmV0dXJuIGEgY29weQotICogZnJvbSBAb2Zmc2V0IHRvIHRoZSBlbmQgb2YgdGhlIG1lbW9yeSByZWdpb24uCi0gKgotICogUmV0dXJuczogYSBuZXcgI0dzdE1lbW9yeS4KLSAqLwotR3N0TWVtb3J5ICoKLWdzdF9tZW1vcnlfY29weSAoR3N0TWVtb3J5ICogbWVtLCBnc3NpemUgb2Zmc2V0LCBnc3NpemUgc2l6ZSkKLXsKLSAgR3N0TWVtb3J5ICpjb3B5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtZW0gIT0gTlVMTCwgTlVMTCk7Ci0KLSAgY29weSA9IG1lbS0+YWxsb2NhdG9yLT5tZW1fY29weSAobWVtLCBvZmZzZXQsIHNpemUpOwotCi0gIHJldHVybiBjb3B5OwotfQotCi0vKioKLSAqIGdzdF9tZW1vcnlfc2hhcmU6Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkKLSAqIEBvZmZzZXQ6IG9mZnNldCB0byBzaGFyZSBmcm9tCi0gKiBAc2l6ZTogc2l6ZSB0byBzaGFyZSwgb3IgLTEgdG8gc2hhcmUgdG8gdGhlIGVuZCBvZiB0aGUgbWVtb3J5IHJlZ2lvbgotICoKLSAqIFJldHVybiBhIHNoYXJlZCBjb3B5IG9mIEBzaXplIGJ5dGVzIGZyb20gQG1lbSBzdGFydGluZyBmcm9tIEBvZmZzZXQuIE5vCi0gKiBtZW1vcnkgY29weSBpcyBwZXJmb3JtZWQgYW5kIHRoZSBtZW1vcnkgcmVnaW9uIGlzIHNpbXBseSBzaGFyZWQuIFRoZSByZXN1bHQKLSAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9uLXdyaXRhYmxlLiBAc2l6ZSBjYW4gYmUgc2V0IHRvIC0xIHRvIHJldHVybiBhIHNoYXJlZAotICogY29weSBmcm9tIEBvZmZzZXQgdG8gdGhlIGVuZCBvZiB0aGUgbWVtb3J5IHJlZ2lvbi4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyAjR3N0TWVtb3J5LgotICovCi1Hc3RNZW1vcnkgKgotZ3N0X21lbW9yeV9zaGFyZSAoR3N0TWVtb3J5ICogbWVtLCBnc3NpemUgb2Zmc2V0LCBnc3NpemUgc2l6ZSkKLXsKLSAgR3N0TWVtb3J5ICpzaGFyZWQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1lbSAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKCFHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUIChtZW0sIEdTVF9NRU1PUllfRkxBR19OT19TSEFSRSksCi0gICAgICBOVUxMKTsKLQotICAvKiB3aGV0aGVyIHdlIGNhbiBsb2NrIHRoZSBtZW1vcnkgZXhjbHVzaXZlbHkgKi8KLSAgLyogaW4gb3JkZXIgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYnkgbm90IHJlcXVpcmluZyBzdWJjbGFzc2VzCi0gICAqIHRvIGxvY2sgdGhlIG1lbW9yeSB0aGVtc2VsdmVzIGFuZCBwcm9wYWdhdGUgdGhlIHBvc3NpYmxlIGZhaWx1cmUgaW4gdGhlaXIKLSAgICogbWVtX3NoYXJlIGltcGxlbWVudGF0aW9uICovCi0gIC8qIEZJWE1FIDIuMDogcmVtb3ZlIGFuZCBmaXggZ3N0X21lbW9yeV9pbml0KCkgYW5kL29yIGFsbCBtZW1vcnkgc3ViY2xhc3NlcwotICAgKiB0byBwcm9wYWdhdGUgdGhpcyBmYWlsdXJlIGNhc2UgKi8KLSAgaWYgKCFnc3RfbWVtb3J5X2xvY2sgKG1lbSwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIGRvdWJsZSBsb2NrIHRvIGVuc3VyZSB3ZSBhcmUgbm90IG1hcHBlZCB3cml0YWJsZSB3aXRob3V0IGFuCi0gICAqIGV4Y2x1c2l2ZSBsb2NrLiAqLwotICBpZiAoIWdzdF9tZW1vcnlfbG9jayAobWVtLCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSkpIHsKLSAgICBnc3RfbWVtb3J5X3VubG9jayAobWVtLCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBzaGFyZWQgPSBtZW0tPmFsbG9jYXRvci0+bWVtX3NoYXJlIChtZW0sIG9mZnNldCwgc2l6ZSk7Ci0KLSAgLyogdW5sb2NraW5nIGJlZm9yZSBjYWxsaW5nIHRoZSBzdWJjbGFzcyB3b3VsZCBiZSByYWN5ICovCi0gIGdzdF9tZW1vcnlfdW5sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKTsKLSAgZ3N0X21lbW9yeV91bmxvY2sgKG1lbSwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpOwotCi0gIHJldHVybiBzaGFyZWQ7Ci19Ci0KLS8qKgotICogZ3N0X21lbW9yeV9pc19zcGFuOgotICogQG1lbTE6IGEgI0dzdE1lbW9yeQotICogQG1lbTI6IGEgI0dzdE1lbW9yeQotICogQG9mZnNldDogYSBwb2ludGVyIHRvIGEgcmVzdWx0IG9mZnNldAotICoKLSAqIENoZWNrIGlmIEBtZW0xIGFuZCBtZW0yIHNoYXJlIHRoZSBtZW1vcnkgd2l0aCBhIGNvbW1vbiBwYXJlbnQgbWVtb3J5IG9iamVjdAotICogYW5kIHRoYXQgdGhlIG1lbW9yeSBpcyBjb250aWd1b3VzLgotICoKLSAqIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSBtZW1vcnkgb2YgQG1lbTEgYW5kIEBtZW0yIGNhbiBiZSBtZXJnZWQKLSAqIGVmZmljaWVudGx5IGJ5IHBlcmZvcm1pbmcgZ3N0X21lbW9yeV9zaGFyZSgpIG9uIHRoZSBwYXJlbnQgb2JqZWN0IGZyb20KLSAqIHRoZSByZXR1cm5lZCBAb2Zmc2V0LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBtZW1vcnkgaXMgY29udGlndW91cyBhbmQgb2YgYSBjb21tb24gcGFyZW50LgotICovCi1nYm9vbGVhbgotZ3N0X21lbW9yeV9pc19zcGFuIChHc3RNZW1vcnkgKiBtZW0xLCBHc3RNZW1vcnkgKiBtZW0yLCBnc2l6ZSAqIG9mZnNldCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1lbTEgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWVtMiAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgLyogbmVlZCB0byBoYXZlIHRoZSBzYW1lIGFsbG9jYXRvcnMgKi8KLSAgaWYgKG1lbTEtPmFsbG9jYXRvciAhPSBtZW0yLT5hbGxvY2F0b3IpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSBwYXJlbnQgKi8KLSAgaWYgKG1lbTEtPnBhcmVudCA9PSBOVUxMIHx8IG1lbTEtPnBhcmVudCAhPSBtZW0yLT5wYXJlbnQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIGFuZCBtZW1vcnkgaXMgY29udGlndW91cyAqLwotICBpZiAoIW1lbTEtPmFsbG9jYXRvci0+bWVtX2lzX3NwYW4gKG1lbTEsIG1lbTIsIG9mZnNldCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi12b2lkCi1fcHJpdl9nc3RfbWVtb3J5X2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIF9nc3RfbWVtb3J5X3R5cGUgPSBnc3RfbWVtb3J5X2dldF90eXBlICgpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdG1lbW9yeS5oIGIvZ3N0L2dzdG1lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWExZmE2Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RtZW1vcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuYmU+Ci0gKgotICogZ3N0bWVtb3J5Lmg6IEhlYWRlciBmb3IgbWVtb3J5IGJsb2NrcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9NRU1PUllfSF9fCi0jZGVmaW5lIF9fR1NUX01FTU9SWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi1HU1RfRVhQT1JUIEdUeXBlIF9nc3RfbWVtb3J5X3R5cGU7Ci0jZGVmaW5lIEdTVF9UWVBFX01FTU9SWSAoX2dzdF9tZW1vcnlfdHlwZSkKLUdUeXBlIGdzdF9tZW1vcnlfZ2V0X3R5cGUodm9pZCk7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNZW1vcnkgR3N0TWVtb3J5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFsbG9jYXRvciBHc3RBbGxvY2F0b3I7Ci0KLSNkZWZpbmUgR1NUX01FTU9SWV9DQVNUKG1lbSkgICAoKEdzdE1lbW9yeSAqKShtZW0pKQotCi0vKioKLSAqIEdzdE1lbW9yeUZsYWdzOgotICogQEdTVF9NRU1PUllfRkxBR19SRUFET05MWTogbWVtb3J5IGlzIHJlYWRvbmx5LiBJdCBpcyBub3QgYWxsb3dlZCB0byBtYXAgdGhlCi0gKiBtZW1vcnkgd2l0aCAjR1NUX01BUF9XUklURS4KLSAqIEBHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkU6IG1lbW9yeSBtdXN0IG5vdCBiZSBzaGFyZWQuIENvcGllcyB3aWxsIGhhdmUgdG8gYmUKLSAqIG1hZGUgd2hlbiB0aGlzIG1lbW9yeSBuZWVkcyB0byBiZSBzaGFyZWQgYmV0d2VlbiBidWZmZXJzLgotICogQEdTVF9NRU1PUllfRkxBR19aRVJPX1BSRUZJWEVEOiB0aGUgbWVtb3J5IHByZWZpeCBpcyBmaWxsZWQgd2l0aCAwIGJ5dGVzCi0gKiBAR1NUX01FTU9SWV9GTEFHX1pFUk9fUEFEREVEOiB0aGUgbWVtb3J5IHBhZGRpbmcgaXMgZmlsbGVkIHdpdGggMCBieXRlcwotICogQEdTVF9NRU1PUllfRkxBR19QSFlTSUNBTExZX0NPTlRJR1VPVVM6IHRoZSBtZW1vcnkgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzLiAoU2luY2UgMS4yKQotICogQEdTVF9NRU1PUllfRkxBR19OT1RfTUFQUEFCTEU6IHRoZSBtZW1vcnkgY2FuJ3QgYmUgbWFwcGVkIHZpYSBnc3RfbWVtb3J5X21hcCgpIHdpdGhvdXQgYW55IHByZWNvbmRpdGlvbnMuIChTaW5jZSAxLjIpCi0gKiBAR1NUX01FTU9SWV9GTEFHX0xBU1Q6IGZpcnN0IGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3VzdG9tIHB1cnBvc2VzCi0gKgotICogRmxhZ3MgZm9yIHdyYXBwZWQgbWVtb3J5LgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkgICAgICA9IEdTVF9NSU5JX09CSkVDVF9GTEFHX0xPQ0tfUkVBRE9OTFksCi0gIEdTVF9NRU1PUllfRkxBR19OT19TSEFSRSAgICAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCi0gIEdTVF9NRU1PUllfRkxBR19aRVJPX1BSRUZJWEVEID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMSksCi0gIEdTVF9NRU1PUllfRkxBR19aRVJPX1BBRERFRCAgID0gKEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgPDwgMiksCi0gIEdTVF9NRU1PUllfRkxBR19QSFlTSUNBTExZX0NPTlRJR1VPVVMgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCAzKSwKLSAgR1NUX01FTU9SWV9GTEFHX05PVF9NQVBQQUJMRSAgPSAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCA8PCA0KSwKLQotICBHU1RfTUVNT1JZX0ZMQUdfTEFTVCAgICAgICAgICA9IChHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIDw8IDE2KQotfSBHc3RNZW1vcnlGbGFnczsKLQotLyoqCi0gKiBHU1RfTUVNT1JZX0ZMQUdTOgotICogQG1lbTogYSAjR3N0TWVtb3J5LgotICoKLSAqIEEgZmxhZ3Mgd29yZCBjb250YWluaW5nICNHc3RNZW1vcnlGbGFncyBmbGFncyBzZXQgb24gQG1lbQotICovCi0jZGVmaW5lIEdTVF9NRU1PUllfRkxBR1MobWVtKSAgR1NUX01JTklfT0JKRUNUX0ZMQUdTIChtZW0pCi0vKioKLSAqIEdTVF9NRU1PUllfRkxBR19JU19TRVQ6Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkuCi0gKiBAZmxhZzogdGhlICNHc3RNZW1vcnlGbGFncyB0byBjaGVjay4KLSAqCi0gKiBHaXZlcyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgZmxhZyBvbiBhIEBtZW0uCi0gKi8KLSNkZWZpbmUgR1NUX01FTU9SWV9GTEFHX0lTX1NFVChtZW0sZmxhZykgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQgKG1lbSxmbGFnKQotLyoqCi0gKiBHU1RfTUVNT1JZX0ZMQUdfVU5TRVQ6Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkuCi0gKiBAZmxhZzogdGhlICNHc3RNZW1vcnlGbGFncyB0byBjbGVhci4KLSAqCi0gKiBDbGVhciBhIHNwZWNpZmljIGZsYWcgb24gYSBAbWVtLgotICovCi0jZGVmaW5lIEdTVF9NRU1PUllfRkxBR19VTlNFVChtZW0sZmxhZykgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVCAobWVtLCBmbGFnKQotCi0vKioKLSAqIEdTVF9NRU1PUllfSVNfUkVBRE9OTFk6Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkuCi0gKgotICogQ2hlY2sgaWYgQG1lbSBpcyByZWFkb25seS4KLSAqLwotI2RlZmluZSBHU1RfTUVNT1JZX0lTX1JFQURPTkxZKG1lbSkgICAgICAgIEdTVF9NRU1PUllfRkxBR19JU19TRVQobWVtLEdTVF9NRU1PUllfRkxBR19SRUFET05MWSkKLS8qKgotICogR1NUX01FTU9SWV9JU19OT19TSEFSRToKLSAqIEBtZW06IGEgI0dzdE1lbW9yeS4KLSAqCi0gKiBDaGVjayBpZiBAbWVtIGNhbm5vdCBiZSBzaGFyZWQgYmV0d2VlbiBidWZmZXJzCi0gKi8KLSNkZWZpbmUgR1NUX01FTU9SWV9JU19OT19TSEFSRShtZW0pICAgICAgICBHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKG1lbSxHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUpCi0vKioKLSAqIEdTVF9NRU1PUllfSVNfWkVST19QUkVGSVhFRDoKLSAqIEBtZW06IGEgI0dzdE1lbW9yeS4KLSAqCi0gKiBDaGVjayBpZiB0aGUgcHJlZml4IGluIEBtZW0gaXMgMCBmaWxsZWQuCi0gKi8KLSNkZWZpbmUgR1NUX01FTU9SWV9JU19aRVJPX1BSRUZJWEVEKG1lbSkgICBHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKG1lbSxHU1RfTUVNT1JZX0ZMQUdfWkVST19QUkVGSVhFRCkKLS8qKgotICogR1NUX01FTU9SWV9JU19aRVJPX1BBRERFRDoKLSAqIEBtZW06IGEgI0dzdE1lbW9yeS4KLSAqCi0gKiBDaGVjayBpZiB0aGUgcGFkZGluZyBpbiBAbWVtIGlzIDAgZmlsbGVkLgotICovCi0jZGVmaW5lIEdTVF9NRU1PUllfSVNfWkVST19QQURERUQobWVtKSAgICAgR1NUX01FTU9SWV9GTEFHX0lTX1NFVChtZW0sR1NUX01FTU9SWV9GTEFHX1pFUk9fUEFEREVEKQotCi0vKioKLSAqIEdTVF9NRU1PUllfSVNfUEhZU0lDQUxMWV9DT05USUdVT1VTOgotICogQG1lbTogYSAjR3N0TWVtb3J5LgotICoKLSAqIENoZWNrIGlmIEBtZW0gaXMgcGh5c2ljYWxseSBjb250aWd1b3VzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotI2RlZmluZSBHU1RfTUVNT1JZX0lTX1BIWVNJQ0FMTFlfQ09OVElHVU9VUyhtZW0pICAgICBHU1RfTUVNT1JZX0ZMQUdfSVNfU0VUKG1lbSxHU1RfTUVNT1JZX0ZMQUdfUEhZU0lDQUxMWV9DT05USUdVT1VTKQotCi0vKioKLSAqIEdTVF9NRU1PUllfSVNfTk9UX01BUFBBQkxFOgotICogQG1lbTogYSAjR3N0TWVtb3J5LgotICoKLSAqIENoZWNrIGlmIEBtZW0gY2FuJ3QgYmUgbWFwcGVkIHZpYSBnc3RfbWVtb3J5X21hcCgpIHdpdGhvdXQgYW55IHByZWNvbmRpdGlvbnMKLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLSNkZWZpbmUgR1NUX01FTU9SWV9JU19OT1RfTUFQUEFCTEUobWVtKSAgICAgR1NUX01FTU9SWV9GTEFHX0lTX1NFVChtZW0sR1NUX01FTU9SWV9GTEFHX05PVF9NQVBQQUJMRSkKLQotLyoqCi0gKiBHc3RNZW1vcnk6Ci0gKiBAbWluaV9vYmplY3Q6IHBhcmVudCBzdHJ1Y3R1cmUKLSAqIEBhbGxvY2F0b3I6IHBvaW50ZXIgdG8gdGhlICNHc3RBbGxvY2F0b3IKLSAqIEBwYXJlbnQ6IHBhcmVudCBtZW1vcnkgYmxvY2sKLSAqIEBtYXhzaXplOiB0aGUgbWF4aW11bSBzaXplIGFsbG9jYXRlZAotICogQGFsaWduOiB0aGUgYWxpZ25tZW50IG9mIHRoZSBtZW1vcnkKLSAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgd2hlcmUgdmFsaWQgZGF0YSBzdGFydHMKLSAqIEBzaXplOiB0aGUgc2l6ZSBvZiB2YWxpZCBkYXRhCi0gKgotICogQmFzZSBzdHJ1Y3R1cmUgZm9yIG1lbW9yeSBpbXBsZW1lbnRhdGlvbnMuIEN1c3RvbSBtZW1vcnkgd2lsbCBwdXQgdGhpcyBzdHJ1Y3R1cmUKLSAqIGFzIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlaXIgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdE1lbW9yeSB7Ci0gIEdzdE1pbmlPYmplY3QgICBtaW5pX29iamVjdDsKLQotICBHc3RBbGxvY2F0b3IgICAqYWxsb2NhdG9yOwotCi0gIEdzdE1lbW9yeSAgICAgICpwYXJlbnQ7Ci0gIGdzaXplICAgICAgICAgICBtYXhzaXplOwotICBnc2l6ZSAgICAgICAgICAgYWxpZ247Ci0gIGdzaXplICAgICAgICAgICBvZmZzZXQ7Ci0gIGdzaXplICAgICAgICAgICBzaXplOwotfTsKLQotLyoqCi0gKiBHc3RNYXBGbGFnczoKLSAqIEBHU1RfTUFQX1JFQUQ6IG1hcCBmb3IgcmVhZCBhY2Nlc3MKLSAqIEBHU1RfTUFQX1dSSVRFOiBtYXAgZm9yIHdyaXRlIGFjY2VzcwotICogQEdTVF9NQVBfRkxBR19MQVNUOiBmaXJzdCBmbGFnIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGN1c3RvbSBwdXJwb3NlcwotICoKLSAqIEZsYWdzIHVzZWQgd2hlbiBtYXBwaW5nIG1lbW9yeQotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfTUFQX1JFQUQgICAgICA9IEdTVF9MT0NLX0ZMQUdfUkVBRCwKLSAgR1NUX01BUF9XUklURSAgICAgPSBHU1RfTE9DS19GTEFHX1dSSVRFLAotCi0gIEdTVF9NQVBfRkxBR19MQVNUID0gKDEgPDwgMTYpCi19IEdzdE1hcEZsYWdzOwotCi0vKioKLSAqIEdTVF9NQVBfUkVBRFdSSVRFOgotICoKLSAqIEdzdE1hcEZsYWdzIHZhbHVlIGFsaWFzIGZvciBHU1RfTUFQX1JFQUQgfCBHU1RfTUFQX1dSSVRFCi0gKi8KLSNkZWZpbmUgR1NUX01BUF9SRUFEV1JJVEUgICAgICAoR1NUX01BUF9SRUFEIHwgR1NUX01BUF9XUklURSkKLQotCi0vKioKLSAqIEdzdE1hcEluZm86Ci0gKiBAbWVtb3J5OiBhIHBvaW50ZXIgdG8gdGhlIG1hcHBlZCBtZW1vcnkKLSAqIEBmbGFnczogZmxhZ3MgdXNlZCB3aGVuIG1hcHBpbmcgdGhlIG1lbW9yeQotICogQGRhdGE6IChhcnJheSBsZW5ndGg9c2l6ZSk6IGEgcG9pbnRlciB0byB0aGUgbWFwcGVkIGRhdGEKLSAqIEBzaXplOiB0aGUgdmFsaWQgc2l6ZSBpbiBAZGF0YQotICogQG1heHNpemU6IHRoZSBtYXhpbXVtIGJ5dGVzIGluIEBkYXRhCi0gKiBAdXNlcl9kYXRhOiBleHRyYSBwcml2YXRlIHVzZXJfZGF0YSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWVtb3J5Ci0gKiAgICAgICAgICAgICBjYW4gdXNlIHRvIHN0b3JlIGV4dHJhIGluZm8uCi0gKgotICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGEgbWFwIG9wZXJhdGlvbiBzdWNoIGFzCi0gKiBnc3RfbWVtb3J5X21hcCgpLiBJdCBjb250YWlucyB0aGUgZGF0YSBhbmQgc2l6ZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBHc3RNZW1vcnkgKm1lbW9yeTsKLSAgR3N0TWFwRmxhZ3MgZmxhZ3M7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3NpemUgbWF4c2l6ZTsKLSAgLyo8IHByb3RlY3RlZCA+Ki8KLSAgZ3BvaW50ZXIgdXNlcl9kYXRhWzRdOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX0gR3N0TWFwSW5mbzsKLQotLyoqCi0gKiBHU1RfTUFQX0lORk9fSU5JVDoKLSAqCi0gKiBJbml0aWFsaXplciBmb3IgI0dzdE1hcEluZm8KLSAqLwotI2RlZmluZSBHU1RfTUFQX0lORk9fSU5JVCB7IE5VTEwsIChHc3RNYXBGbGFncykgMCwgTlVMTCwgMCwgMCwgeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9fQotCi0vKioKLSAqIEdzdE1lbW9yeU1hcEZ1bmN0aW9uOgotICogQG1lbTogYSAjR3N0TWVtb3J5Ci0gKiBAbWF4c2l6ZTogc2l6ZSB0byBtYXAKLSAqIEBmbGFnczogYWNjZXNzIG1vZGUgZm9yIHRoZSBtZW1vcnkKLSAqCi0gKiBHZXQgdGhlIG1lbW9yeSBvZiBAbWVtIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFjY29yZGluZyB0byB0aGUgbW9kZSBzcGVjaWZpZWQKLSAqIGluIEBmbGFncy4gVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSBwb2ludGVyIHRoYXQgY29udGFpbnMgYXQgbGVhc3QKLSAqIEBtYXhzaXplIGJ5dGVzLgotICoKLSAqIFJldHVybnM6IGEgcG9pbnRlciB0byBtZW1vcnkgb2Ygd2hpY2ggYXQgbGVhc3QgQG1heHNpemUgYnl0ZXMgY2FuIGJlCi0gKiBhY2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIGFjY2VzcyBwYXR0ZXJuIGluIEBmbGFncy4KLSAqLwotdHlwZWRlZiBncG9pbnRlciAgICAoKkdzdE1lbW9yeU1hcEZ1bmN0aW9uKSAgICAgICAoR3N0TWVtb3J5ICptZW0sIGdzaXplIG1heHNpemUsIEdzdE1hcEZsYWdzIGZsYWdzKTsKLQotLyoqCi0gKiBHc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb246Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkKLSAqIEBpbmZvOiB0aGUgI0dzdE1hcEluZm8gdG8gbWFwIHdpdGgKLSAqIEBtYXhzaXplOiBzaXplIHRvIG1hcAotICoKLSAqIEdldCB0aGUgbWVtb3J5IG9mIEBtZW0gdGhhdCBjYW4gYmUgYWNjZXNzZWQgYWNjb3JkaW5nIHRvIHRoZSBtb2RlIHNwZWNpZmllZAotICogaW4gQGluZm8ncyBmbGFncy4gVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSBwb2ludGVyIHRoYXQgY29udGFpbnMgYXQgbGVhc3QKLSAqIEBtYXhzaXplIGJ5dGVzLgotICoKLSAqIFJldHVybnM6IGEgcG9pbnRlciB0byBtZW1vcnkgb2Ygd2hpY2ggYXQgbGVhc3QgQG1heHNpemUgYnl0ZXMgY2FuIGJlCi0gKiBhY2Nlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIGFjY2VzcyBwYXR0ZXJuIGluIEBpbmZvJ3MgZmxhZ3MuCi0gKi8KLXR5cGVkZWYgZ3BvaW50ZXIgICAgKCpHc3RNZW1vcnlNYXBGdWxsRnVuY3Rpb24pICAgICAgIChHc3RNZW1vcnkgKm1lbSwgR3N0TWFwSW5mbyAqIGluZm8sIGdzaXplIG1heHNpemUpOwotCi0vKioKLSAqIEdzdE1lbW9yeVVubWFwRnVuY3Rpb246Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkKLSAqCi0gKiBSZXR1cm4gdGhlIHBvaW50ZXIgcHJldmlvdXNseSByZXRyaWV2ZWQgd2l0aCBnc3RfbWVtb3J5X21hcCgpLgotICovCi10eXBlZGVmIHZvaWQgICAgICAgICgqR3N0TWVtb3J5VW5tYXBGdW5jdGlvbikgICAgIChHc3RNZW1vcnkgKm1lbSk7Ci0KLS8qKgotICogR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb246Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkKLSAqIEBpbmZvOiBhICNHc3RNYXBJbmZvCi0gKgotICogUmV0dXJuIHRoZSBwb2ludGVyIHByZXZpb3VzbHkgcmV0cmlldmVkIHdpdGggZ3N0X21lbW9yeV9tYXAoKSB3aXRoIEBpbmZvLgotICovCi10eXBlZGVmIHZvaWQgICAgICAgICgqR3N0TWVtb3J5VW5tYXBGdWxsRnVuY3Rpb24pICAgICAoR3N0TWVtb3J5ICptZW0sIEdzdE1hcEluZm8gKiBpbmZvKTsKLQotLyoqCi0gKiBHc3RNZW1vcnlDb3B5RnVuY3Rpb246Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkKLSAqIEBvZmZzZXQ6IGFuIG9mZnNldAotICogQHNpemU6IGEgc2l6ZSBvciAtMQotICoKLSAqIENvcHkgQHNpemUgYnl0ZXMgZnJvbSBAbWVtIHN0YXJ0aW5nIGF0IEBvZmZzZXQgYW5kIHJldHVybiB0aGVtIHdyYXBwZWQgaW4gYQotICogbmV3IEdzdE1lbW9yeSBvYmplY3QuCi0gKiBJZiBAc2l6ZSBpcyBzZXQgdG8gLTEsIGFsbCBieXRlcyBzdGFydGluZyBhdCBAb2Zmc2V0IGFyZSBjb3BpZWQuCi0gKgotICogUmV0dXJuczogYSBuZXcgI0dzdE1lbW9yeSBvYmplY3Qgd3JhcHBpbmcgYSBjb3B5IG9mIHRoZSByZXF1ZXN0ZWQgcmVnaW9uIGluCi0gKiBAbWVtLgotICovCi10eXBlZGVmIEdzdE1lbW9yeSAqICgqR3N0TWVtb3J5Q29weUZ1bmN0aW9uKSAgICAgIChHc3RNZW1vcnkgKm1lbSwgZ3NzaXplIG9mZnNldCwgZ3NzaXplIHNpemUpOwotCi0vKioKLSAqIEdzdE1lbW9yeVNoYXJlRnVuY3Rpb246Ci0gKiBAbWVtOiBhICNHc3RNZW1vcnkKLSAqIEBvZmZzZXQ6IGFuIG9mZnNldAotICogQHNpemU6IGEgc2l6ZSBvciAtMQotICoKLSAqIFNoYXJlIEBzaXplIGJ5dGVzIGZyb20gQG1lbSBzdGFydGluZyBhdCBAb2Zmc2V0IGFuZCByZXR1cm4gdGhlbSB3cmFwcGVkIGluIGEKLSAqIG5ldyBHc3RNZW1vcnkgb2JqZWN0LiBJZiBAc2l6ZSBpcyBzZXQgdG8gLTEsIGFsbCBieXRlcyBzdGFydGluZyBhdCBAb2Zmc2V0IGFyZQotICogc2hhcmVkLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1ha2UgYSBjb3B5IG9mIHRoZSBieXRlcyBpbiBAbWVtLgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNHc3RNZW1vcnkgb2JqZWN0IHNoYXJpbmcgdGhlIHJlcXVlc3RlZCByZWdpb24gaW4gQG1lbS4KLSAqLwotdHlwZWRlZiBHc3RNZW1vcnkgKiAoKkdzdE1lbW9yeVNoYXJlRnVuY3Rpb24pICAgICAoR3N0TWVtb3J5ICptZW0sIGdzc2l6ZSBvZmZzZXQsIGdzc2l6ZSBzaXplKTsKLQotLyoqCi0gKiBHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbjoKLSAqIEBtZW0xOiBhICNHc3RNZW1vcnkKLSAqIEBtZW0yOiBhICNHc3RNZW1vcnkKLSAqIEBvZmZzZXQ6IGEgcmVzdWx0IG9mZnNldAotICoKLSAqIENoZWNrIGlmIEBtZW0xIGFuZCBAbWVtMiBvY2N1cHkgY29udGlndW91cyBtZW1vcnkgYW5kIHJldHVybiB0aGUgb2Zmc2V0IG9mCi0gKiBAbWVtMSBpbiB0aGUgcGFyZW50IGJ1ZmZlciBpbiBAb2Zmc2V0LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBtZW0xIGFuZCBAbWVtMiBhcmUgaW4gY29udGlndW91cyBtZW1vcnkuCi0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gICAgKCpHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbikgICAgKEdzdE1lbW9yeSAqbWVtMSwgR3N0TWVtb3J5ICptZW0yLCBnc2l6ZSAqb2Zmc2V0KTsKLQotdm9pZCAgICAgICAgICAgZ3N0X21lbW9yeV9pbml0ICAgICAgICAgKEdzdE1lbW9yeSAqbWVtLCBHc3RNZW1vcnlGbGFncyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvciwgR3N0TWVtb3J5ICpwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgbWF4c2l6ZSwgZ3NpemUgYWxpZ24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKTsKLQotZ2Jvb2xlYW4gICAgICAgZ3N0X21lbW9yeV9pc190eXBlICAgICAgKEdzdE1lbW9yeSAqbWVtLCBjb25zdCBnY2hhciAqbWVtX3R5cGUpOwotCi0vKiByZWZjb3VudGluZyAqLwotLyoqCi0gKiBnc3RfbWVtb3J5X3JlZjoKLSAqIEBtZW1vcnk6IFRoZSBtZW1vcnkgdG8gcmVmY291bnQKLSAqCi0gKiBJbmNyZWFzZSB0aGUgcmVmY291bnQgb2YgdGhpcyBtZW1vcnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBAbWVtb3J5IChmb3IgY29udmVuaWVuY2Ugd2hlbiBkb2luZyBhc3NpZ25tZW50cykKLSAqLwotc3RhdGljIGlubGluZSBHc3RNZW1vcnkgKgotZ3N0X21lbW9yeV9yZWYgKEdzdE1lbW9yeSAqIG1lbW9yeSkKLXsKLSAgcmV0dXJuIChHc3RNZW1vcnkgKikgZ3N0X21pbmlfb2JqZWN0X3JlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG1lbW9yeSkpOwotfQotCi0vKioKLSAqIGdzdF9tZW1vcnlfdW5yZWY6Ci0gKiBAbWVtb3J5OiAodHJhbnNmZXIgZnVsbCk6IHRoZSBtZW1vcnkgdG8gcmVmY291bnQKLSAqCi0gKiBEZWNyZWFzZSB0aGUgcmVmY291bnQgb2YgYW4gbWVtb3J5LCBmcmVlaW5nIGl0IGlmIHRoZSByZWZjb3VudCByZWFjaGVzIDAuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X21lbW9yeV91bnJlZiAoR3N0TWVtb3J5ICogbWVtb3J5KQotewotICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtZW1vcnkpKTsKLX0KLQotLyogZ2V0dGluZy9zZXR0aW5nIG1lbW9yeSBwcm9wZXJ0aWVzICovCi1nc2l6ZSAgICAgICAgICBnc3RfbWVtb3J5X2dldF9zaXplcyAgICAoR3N0TWVtb3J5ICptZW0sIGdzaXplICpvZmZzZXQsIGdzaXplICptYXhzaXplKTsKLXZvaWQgICAgICAgICAgIGdzdF9tZW1vcnlfcmVzaXplICAgICAgIChHc3RNZW1vcnkgKm1lbSwgZ3NzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSk7Ci0KLSNkZWZpbmUgICAgICAgIGdzdF9tZW1vcnlfbG9jayhtLGYpICAgICAgICBnc3RfbWluaV9vYmplY3RfbG9jayAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG0pLCAoZikpCi0jZGVmaW5lICAgICAgICBnc3RfbWVtb3J5X3VubG9jayhtLGYpICAgICAgZ3N0X21pbmlfb2JqZWN0X3VubG9jayAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG0pLCAoZikpCi0jZGVmaW5lICAgICAgICBnc3RfbWVtb3J5X2lzX3dyaXRhYmxlKG0pICAgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobSkpCi0jZGVmaW5lICAgICAgICBnc3RfbWVtb3J5X21ha2Vfd3JpdGFibGUobSkgR1NUX01FTU9SWV9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG0pKSkKLQotLyogcmV0cmlldmluZyBkYXRhICovCi1Hc3RNZW1vcnkgKiAgICBnc3RfbWVtb3J5X21ha2VfbWFwcGVkICAoR3N0TWVtb3J5ICptZW0sIEdzdE1hcEluZm8gKmluZm8sIEdzdE1hcEZsYWdzIGZsYWdzKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotZ2Jvb2xlYW4gICAgICAgZ3N0X21lbW9yeV9tYXAgICAgICAgICAgKEdzdE1lbW9yeSAqbWVtLCBHc3RNYXBJbmZvICppbmZvLCBHc3RNYXBGbGFncyBmbGFncyk7Ci12b2lkICAgICAgICAgICBnc3RfbWVtb3J5X3VubWFwICAgICAgICAoR3N0TWVtb3J5ICptZW0sIEdzdE1hcEluZm8gKmluZm8pOwotCi0vKiBjb3B5IGFuZCBzdWJyZWdpb25zICovCi1Hc3RNZW1vcnkgKiAgICBnc3RfbWVtb3J5X2NvcHkgICAgICAgICAoR3N0TWVtb3J5ICptZW0sIGdzc2l6ZSBvZmZzZXQsIGdzc2l6ZSBzaXplKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotR3N0TWVtb3J5ICogICAgZ3N0X21lbW9yeV9zaGFyZSAgICAgICAgKEdzdE1lbW9yeSAqbWVtLCBnc3NpemUgb2Zmc2V0LCBnc3NpemUgc2l6ZSkgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLQotLyogc3BhbiBtZW1vcnkgKi8KLWdib29sZWFuICAgICAgIGdzdF9tZW1vcnlfaXNfc3BhbiAgICAgIChHc3RNZW1vcnkgKm1lbTEsIEdzdE1lbW9yeSAqbWVtMiwgZ3NpemUgKm9mZnNldCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0TWVtb3J5LCBnc3RfbWVtb3J5X3VucmVmKQotI2VuZGlmCi0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0QWxsb2NhdG9yLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9NRU1PUllfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0bWVzc2FnZS5jIGIvZ3N0L2dzdG1lc3NhZ2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFkMGQyNi4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0bWVzc2FnZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE2MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdG1lc3NhZ2UuYzogR3N0TWVzc2FnZSBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0bWVzc2FnZQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBMaWdodHdlaWdodCBvYmplY3RzIHRvIHNpZ25hbCB0aGUgYXBwbGljYXRpb24gb2YKLSAqICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmUgZXZlbnRzCi0gKiBAc2VlX2Fsc286ICNHc3RCdXMsICNHc3RNaW5pT2JqZWN0LCAjR3N0RWxlbWVudAotICoKLSAqIE1lc3NhZ2VzIGFyZSBpbXBsZW1lbnRlZCBhcyBhIHN1YmNsYXNzIG9mICNHc3RNaW5pT2JqZWN0IHdpdGggYSBnZW5lcmljCi0gKiAjR3N0U3RydWN0dXJlIGFzIHRoZSBjb250ZW50LiBUaGlzIGFsbG93cyBmb3Igd3JpdGluZyBjdXN0b20gbWVzc2FnZXMgd2l0aG91dAotICogcmVxdWlyaW5nIGFuIEFQSSBjaGFuZ2Ugd2hpbGUgYWxsb3dpbmcgYSB3aWRlIHJhbmdlIG9mIGRpZmZlcmVudCB0eXBlcwotICogb2YgbWVzc2FnZXMuCi0gKgotICogTWVzc2FnZXMgYXJlIHBvc3RlZCBieSBvYmplY3RzIGluIHRoZSBwaXBlbGluZSBhbmQgYXJlIHBhc3NlZCB0byB0aGUKLSAqIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSAjR3N0QnVzLgotICoKLSAqIFRoZSBiYXNpYyB1c2UgcGF0dGVybiBvZiBwb3N0aW5nIGEgbWVzc2FnZSBvbiBhICNHc3RCdXMgaXMgYXMgZm9sbG93czoKLSAqIHxbPCEtLSBsYW5ndWFnZT0iQyIgLS0+Ci0gKiAgIGdzdF9idXNfcG9zdCAoYnVzLCBnc3RfbWVzc2FnZV9uZXdfZW9zKCkpOwotICogXXwKLSAqCi0gKiBBICNHc3RFbGVtZW50IHVzdWFsbHkgcG9zdHMgbWVzc2FnZXMgb24gdGhlIGJ1cyBwcm92aWRlZCBieSB0aGUgcGFyZW50Ci0gKiBjb250YWluZXIgdXNpbmcgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKCkuCi0gKi8KLQotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAgICAgLyogbWVtY3B5ICovCi0jaW5jbHVkZSAiZ3N0ZXJyb3IuaCIKLSNpbmNsdWRlICJnc3RlbnVtdHlwZXMuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0bWVzc2FnZS5oIgotI2luY2x1ZGUgImdzdHRhZ2xpc3QuaCIKLSNpbmNsdWRlICJnc3R1dGlscy5oIgotI2luY2x1ZGUgImdzdHF1YXJrLmgiCi0jaW5jbHVkZSAiZ3N0dmFsdWUuaCIKLQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RNZXNzYWdlIG1lc3NhZ2U7Ci0KLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci19IEdzdE1lc3NhZ2VJbXBsOwotCi0jZGVmaW5lIEdTVF9NRVNTQUdFX1NUUlVDVFVSRShtKSAgKCgoR3N0TWVzc2FnZUltcGwgKikobSkpLT5zdHJ1Y3R1cmUpCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGdpbnQgdHlwZTsKLSAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gIEdRdWFyayBxdWFyazsKLX0gR3N0TWVzc2FnZVF1YXJrczsKLQotc3RhdGljIEdzdE1lc3NhZ2VRdWFya3MgbWVzc2FnZV9xdWFya3NbXSA9IHsKLSAge0dTVF9NRVNTQUdFX1VOS05PV04sICJ1bmtub3duIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9FT1MsICJlb3MiLCAwfSwKLSAge0dTVF9NRVNTQUdFX0VSUk9SLCAiZXJyb3IiLCAwfSwKLSAge0dTVF9NRVNTQUdFX1dBUk5JTkcsICJ3YXJuaW5nIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9JTkZPLCAiaW5mbyIsIDB9LAotICB7R1NUX01FU1NBR0VfVEFHLCAidGFnIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9CVUZGRVJJTkcsICJidWZmZXJpbmciLCAwfSwKLSAge0dTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsICJzdGF0ZS1jaGFuZ2VkIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9TVEFURV9ESVJUWSwgInN0YXRlLWRpcnR5IiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9TVEVQX0RPTkUsICJzdGVwLWRvbmUiLCAwfSwKLSAge0dTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUsICJjbG9jay1wcm92aWRlIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9DTE9DS19MT1NULCAiY2xvY2stbG9zdCIsIDB9LAotICB7R1NUX01FU1NBR0VfTkVXX0NMT0NLLCAibmV3LWNsb2NrIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFLCAic3RydWN0dXJlLWNoYW5nZSIsIDB9LAotICB7R1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUywgInN0cmVhbS1zdGF0dXMiLCAwfSwKLSAge0dTVF9NRVNTQUdFX0FQUExJQ0FUSU9OLCAiYXBwbGljYXRpb24iLCAwfSwKLSAge0dTVF9NRVNTQUdFX0VMRU1FTlQsICJlbGVtZW50IiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJULCAic2VnbWVudC1zdGFydCIsIDB9LAotICB7R1NUX01FU1NBR0VfU0VHTUVOVF9ET05FLCAic2VnbWVudC1kb25lIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9EVVJBVElPTl9DSEFOR0VELCAiZHVyYXRpb24tY2hhbmdlZCIsIDB9LAotICB7R1NUX01FU1NBR0VfTEFURU5DWSwgImxhdGVuY3kiLCAwfSwKLSAge0dTVF9NRVNTQUdFX0FTWU5DX1NUQVJULCAiYXN5bmMtc3RhcnQiLCAwfSwKLSAge0dTVF9NRVNTQUdFX0FTWU5DX0RPTkUsICJhc3luYy1kb25lIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFLCAicmVxdWVzdC1zdGF0ZSIsIDB9LAotICB7R1NUX01FU1NBR0VfU1RFUF9TVEFSVCwgInN0ZXAtc3RhcnQiLCAwfSwKLSAge0dTVF9NRVNTQUdFX1FPUywgInFvcyIsIDB9LAotICB7R1NUX01FU1NBR0VfUFJPR1JFU1MsICJwcm9ncmVzcyIsIDB9LAotICB7R1NUX01FU1NBR0VfVE9DLCAidG9jIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9SRVNFVF9USU1FLCAicmVzZXQtdGltZSIsIDB9LAotICB7R1NUX01FU1NBR0VfU1RSRUFNX1NUQVJULCAic3RyZWFtLXN0YXJ0IiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQsICJuZWVkLWNvbnRleHQiLCAwfSwKLSAge0dTVF9NRVNTQUdFX0hBVkVfQ09OVEVYVCwgImhhdmUtY29udGV4dCIsIDB9LAotICB7R1NUX01FU1NBR0VfREVWSUNFX0FEREVELCAiZGV2aWNlLWFkZGVkIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRCwgImRldmljZS1yZW1vdmVkIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9QUk9QRVJUWV9OT1RJRlksICJwcm9wZXJ0eS1ub3RpZnkiLCAwfSwKLSAge0dTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OLCAic3RyZWFtLWNvbGxlY3Rpb24iLCAwfSwKLSAge0dTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQsICJzdHJlYW1zLXNlbGVjdGVkIiwgMH0sCi0gIHtHU1RfTUVTU0FHRV9SRURJUkVDVCwgInJlZGlyZWN0IiwgMH0sCi0gIHswLCBOVUxMLCAwfQotfTsKLQotc3RhdGljIEdRdWFyayBkZXRhaWxzX3F1YXJrID0gMDsKLQotR1R5cGUgX2dzdF9tZXNzYWdlX3R5cGUgPSAwOwotR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RNZXNzYWdlLCBnc3RfbWVzc2FnZSk7Ci0KLXZvaWQKLV9wcml2X2dzdF9tZXNzYWdlX2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIGdpbnQgaTsKLQotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfR1NUX0lOSVQsICJpbml0IG1lc3NhZ2VzIik7Ci0KLSAgZm9yIChpID0gMDsgbWVzc2FnZV9xdWFya3NbaV0ubmFtZTsgaSsrKSB7Ci0gICAgbWVzc2FnZV9xdWFya3NbaV0ucXVhcmsgPQotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAobWVzc2FnZV9xdWFya3NbaV0ubmFtZSk7Ci0gIH0KLSAgZGV0YWlsc19xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZGV0YWlscyIpOwotCi0gIF9nc3RfbWVzc2FnZV90eXBlID0gZ3N0X21lc3NhZ2VfZ2V0X3R5cGUgKCk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZToKLSAqIEB0eXBlOiB0aGUgbWVzc2FnZSB0eXBlCi0gKgotICogR2V0IGEgcHJpbnRhYmxlIG5hbWUgZm9yIHRoZSBnaXZlbiBtZXNzYWdlIHR5cGUuIERvIG5vdCBtb2RpZnkgb3IgZnJlZS4KLSAqCi0gKiBSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byB0aGUgc3RhdGljIG5hbWUgb2YgdGhlIG1lc3NhZ2UuCi0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKEdzdE1lc3NhZ2VUeXBlIHR5cGUpCi17Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBtZXNzYWdlX3F1YXJrc1tpXS5uYW1lOyBpKyspIHsKLSAgICBpZiAodHlwZSA9PSBtZXNzYWdlX3F1YXJrc1tpXS50eXBlKQotICAgICAgcmV0dXJuIG1lc3NhZ2VfcXVhcmtzW2ldLm5hbWU7Ci0gIH0KLSAgcmV0dXJuICJ1bmtub3duIjsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrOgotICogQHR5cGU6IHRoZSBtZXNzYWdlIHR5cGUKLSAqCi0gKiBHZXQgdGhlIHVuaXF1ZSBxdWFyayBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UgdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcXVhcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlIHR5cGUKLSAqLwotR1F1YXJrCi1nc3RfbWVzc2FnZV90eXBlX3RvX3F1YXJrIChHc3RNZXNzYWdlVHlwZSB0eXBlKQotewotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgbWVzc2FnZV9xdWFya3NbaV0ubmFtZTsgaSsrKSB7Ci0gICAgaWYgKHR5cGUgPT0gbWVzc2FnZV9xdWFya3NbaV0udHlwZSkKLSAgICAgIHJldHVybiBtZXNzYWdlX3F1YXJrc1tpXS5xdWFyazsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fZ3N0X21lc3NhZ2VfZGlzcG9zZSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci0gIGdib29sZWFuIGRvX2ZyZWUgPSBUUlVFOwotCi0gIGlmIChHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQgKG1lc3NhZ2UsIEdTVF9NRVNTQUdFX0ZMQUdfQVNZTkNfREVMSVZFUlkpKSB7Ci0gICAgLyogcmV2aXZlIG1lc3NhZ2UsIHNvIGJ1cyBjYW4gZmluaXNoIHdpdGggaXQgYW5kIGNsZWFuIGl0IHVwICovCi0gICAgZ3N0X21lc3NhZ2VfcmVmIChtZXNzYWdlKTsKLQotICAgIEdTVF9JTkZPICgiW21zZyAlcF0gc2lnbmFsbGluZyBhc3luYyBmcmVlIiwgbWVzc2FnZSk7Ci0KLSAgICBHU1RfTUVTU0FHRV9MT0NLIChtZXNzYWdlKTsKLSAgICBHU1RfTUVTU0FHRV9TSUdOQUwgKG1lc3NhZ2UpOwotICAgIEdTVF9NRVNTQUdFX1VOTE9DSyAobWVzc2FnZSk7Ci0KLSAgICAvKiBkb24ndCBmcmVlIGl0IHlldCwgbGV0IGJ1cyBmaW5pc2ggd2l0aCBpdCBmaXJzdCAqLwotICAgIGRvX2ZyZWUgPSBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBkb19mcmVlOwotfQotCi1zdGF0aWMgdm9pZAotX2dzdF9tZXNzYWdlX2ZyZWUgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChtZXNzYWdlICE9IE5VTEwpOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX01FU1NBR0UsICJmaW5hbGl6ZSBtZXNzYWdlICVwLCAlcyBmcm9tICVzIiwgbWVzc2FnZSwKLSAgICAgIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSksIEdTVF9NRVNTQUdFX1NSQ19OQU1FIChtZXNzYWdlKSk7Ci0KLSAgaWYgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKLSAgICBHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID0gTlVMTDsKLSAgfQotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGlmIChzdHJ1Y3R1cmUpIHsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHN0cnVjdHVyZSwgTlVMTCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOwotICB9Ci0KLSAgZ19zbGljZV9mcmVlMSAoc2l6ZW9mIChHc3RNZXNzYWdlSW1wbCksIG1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21lc3NhZ2VfaW5pdCAoR3N0TWVzc2FnZUltcGwgKiBtZXNzYWdlLCBHc3RNZXNzYWdlVHlwZSB0eXBlLAotICAgIEdzdE9iamVjdCAqIHNyYyk7Ci0KLXN0YXRpYyBHc3RNZXNzYWdlICoKLV9nc3RfbWVzc2FnZV9jb3B5IChHc3RNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgR3N0TWVzc2FnZUltcGwgKmNvcHk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX01FU1NBR0UsICJjb3B5IG1lc3NhZ2UgJXAsICVzIGZyb20gJXMiLCBtZXNzYWdlLAotICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSwKLSAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSkpOwotCi0gIGNvcHkgPSBnX3NsaWNlX25ldzAgKEdzdE1lc3NhZ2VJbXBsKTsKLQotICBnc3RfbWVzc2FnZV9pbml0IChjb3B5LCBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSwKLSAgICAgIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpOwotCi0gIEdTVF9NRVNTQUdFX1RJTUVTVEFNUCAoY29weSkgPSBHU1RfTUVTU0FHRV9USU1FU1RBTVAgKG1lc3NhZ2UpOwotICBHU1RfTUVTU0FHRV9TRVFOVU0gKGNvcHkpID0gR1NUX01FU1NBR0VfU0VRTlVNIChtZXNzYWdlKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotICBpZiAoc3RydWN0dXJlKSB7Ci0gICAgR1NUX01FU1NBR0VfU1RSVUNUVVJFIChjb3B5KSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoc3RydWN0dXJlKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAoY29weSksCi0gICAgICAgICZjb3B5LT5tZXNzYWdlLm1pbmlfb2JqZWN0LnJlZmNvdW50KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKGNvcHkpID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBHU1RfTUVTU0FHRV9DQVNUIChjb3B5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZXNzYWdlX2luaXQgKEdzdE1lc3NhZ2VJbXBsICogbWVzc2FnZSwgR3N0TWVzc2FnZVR5cGUgdHlwZSwKLSAgICBHc3RPYmplY3QgKiBzcmMpCi17Ci0gIGdzdF9taW5pX29iamVjdF9pbml0IChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobWVzc2FnZSksIDAsIF9nc3RfbWVzc2FnZV90eXBlLAotICAgICAgKEdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24pIF9nc3RfbWVzc2FnZV9jb3B5LAotICAgICAgKEdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24pIF9nc3RfbWVzc2FnZV9kaXNwb3NlLAotICAgICAgKEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24pIF9nc3RfbWVzc2FnZV9mcmVlKTsKLQotICBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9IHR5cGU7Ci0gIGlmIChzcmMpCi0gICAgZ3N0X29iamVjdF9yZWYgKHNyYyk7Ci0gIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPSBzcmM7Ci0gIEdTVF9NRVNTQUdFX1RJTUVTVEFNUCAobWVzc2FnZSkgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHU1RfTUVTU0FHRV9TRVFOVU0gKG1lc3NhZ2UpID0gZ3N0X3V0aWxfc2VxbnVtX25leHQgKCk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tOgotICogQHR5cGU6IFRoZSAjR3N0TWVzc2FnZVR5cGUgdG8gZGlzdGluZ3Vpc2ggbWVzc2FnZXMKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiB0aGUgc3RydWN0dXJlIGZvciB0aGUKLSAqICAgICBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBzdHJ1Y3R1cmUuCi0gKgotICogQ3JlYXRlIGEgbmV3IGN1c3RvbS10eXBlZCBtZXNzYWdlLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBhbnl0aGluZyBub3QKLSAqIGhhbmRsZWQgYnkgb3RoZXIgbWVzc2FnZS1zcGVjaWZpYyBmdW5jdGlvbnMgdG8gcGFzcyBhIG1lc3NhZ2UgdG8gdGhlCi0gKiBhcHAuIFRoZSBzdHJ1Y3R1cmUgZmllbGQgY2FuIGJlICVOVUxMLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR3N0TWVzc2FnZVR5cGUgdHlwZSwgR3N0T2JqZWN0ICogc3JjLAotICAgIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKLXsKLSAgR3N0TWVzc2FnZUltcGwgKm1lc3NhZ2U7Ci0KLSAgbWVzc2FnZSA9IGdfc2xpY2VfbmV3MCAoR3N0TWVzc2FnZUltcGwpOwotCi0gIEdTVF9DQVRfTE9HIChHU1RfQ0FUX01FU1NBR0UsICJzb3VyY2UgJXM6IGNyZWF0aW5nIG5ldyBtZXNzYWdlICVwICVzIiwKLSAgICAgIChzcmMgPyBHU1RfT0JKRUNUX05BTUUgKHNyYykgOiAiTlVMTCIpLCBtZXNzYWdlLAotICAgICAgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAodHlwZSkpOwotCi0gIGlmIChzdHJ1Y3R1cmUpIHsKLSAgICAvKiBzdHJ1Y3R1cmUgbXVzdCBub3QgaGF2ZSBhIHBhcmVudCAqLwotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAmbWVzc2FnZS0+bWVzc2FnZS5taW5pX29iamVjdC5yZWZjb3VudCkpCi0gICAgICBnb3RvIGhhZF9wYXJlbnQ7Ci0gIH0KLSAgZ3N0X21lc3NhZ2VfaW5pdCAobWVzc2FnZSwgdHlwZSwgc3JjKTsKLQotICBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpID0gc3RydWN0dXJlOwotCi0gIHJldHVybiBHU1RfTUVTU0FHRV9DQVNUIChtZXNzYWdlKTsKLQotICAvKiBFUlJPUlMgKi8KLWhhZF9wYXJlbnQ6Ci0gIHsKLSAgICBnX3NsaWNlX2ZyZWUxIChzaXplb2YgKEdzdE1lc3NhZ2VJbXBsKSwgbWVzc2FnZSk7Ci0gICAgZ193YXJuaW5nICgic3RydWN0dXJlIGlzIGFscmVhZHkgb3duZWQgYnkgYW5vdGhlciBvYmplY3QiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX2dldF9zZXFudW06Ci0gKiBAbWVzc2FnZTogQSAjR3N0TWVzc2FnZS4KLSAqCi0gKiBSZXRyaWV2ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIGEgbWVzc2FnZS4KLSAqCi0gKiBNZXNzYWdlcyBoYXZlIGV2ZXItaW5jcmVtZW50aW5nIHNlcXVlbmNlIG51bWJlcnMsIHdoaWNoIG1heSBhbHNvIGJlIHNldAotICogZXhwbGljaXRseSB2aWEgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSgpLiBTZXF1ZW5jZSBudW1iZXJzIGFyZSB0eXBpY2FsbHkgdXNlZAotICogdG8gaW5kaWNhdGUgdGhhdCBhIG1lc3NhZ2UgY29ycmVzcG9uZHMgdG8gc29tZSBvdGhlciBzZXQgb2YgbWVzc2FnZXMgb3IKLSAqIGV2ZW50cywgZm9yIGV4YW1wbGUgYSBTRUdNRU5UX0RPTkUgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvIGEgU0VFSyBldmVudC4gSXQKLSAqIGlzIGNvbnNpZGVyZWQgZ29vZCBwcmFjdGljZSB0byBtYWtlIHRoaXMgY29ycmVzcG9uZGVuY2Ugd2hlbiBwb3NzaWJsZSwgdGhvdWdoCi0gKiBpdCBpcyBub3QgcmVxdWlyZWQuCi0gKgotICogTm90ZSB0aGF0IGV2ZW50cyBhbmQgbWVzc2FnZXMgc2hhcmUgdGhlIHNhbWUgc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudG9yOwotICogdHdvIGV2ZW50cyBvciBtZXNzYWdlcyB3aWxsIG5ldmVyIGhhdmUgdGhlIHNhbWUgc2VxdWVuY2UgbnVtYmVyIHVubGVzcwotICogdGhhdCBjb3JyZXNwb25kZW5jZSB3YXMgbWFkZSBleHBsaWNpdGx5LgotICoKLSAqIFJldHVybnM6IFRoZSBtZXNzYWdlJ3Mgc2VxdWVuY2UgbnVtYmVyLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWd1aW50MzIKLWdzdF9tZXNzYWdlX2dldF9zZXFudW0gKEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpLCAtMSk7Ci0KLSAgcmV0dXJuIEdTVF9NRVNTQUdFX1NFUU5VTSAobWVzc2FnZSk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bToKLSAqIEBtZXNzYWdlOiBBICNHc3RNZXNzYWdlLgotICogQHNlcW51bTogQSBzZXF1ZW5jZSBudW1iZXIuCi0gKgotICogU2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgYSBtZXNzYWdlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIGJ5IHRoZSBjcmVhdG9yIG9mIGEgbWVzc2FnZSB0byBpbmRpY2F0ZSB0aGF0Ci0gKiB0aGUgbWVzc2FnZSByZWxhdGVzIHRvIG90aGVyIG1lc3NhZ2VzIG9yIGV2ZW50cy4gU2VlIGdzdF9tZXNzYWdlX2dldF9zZXFudW0oKQotICogZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGd1aW50MzIgc2VxbnVtKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotCi0gIEdTVF9NRVNTQUdFX1NFUU5VTSAobWVzc2FnZSkgPSBzZXFudW07Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X2VvczoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKgotICogQ3JlYXRlIGEgbmV3IGVvcyBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkIGFuZCBwb3N0ZWQgaW4KLSAqIHRoZSBzaW5rIGVsZW1lbnRzIG9mIGEgR3N0QmluLiBUaGUgYmluIHdpbGwgb25seSBmb3J3YXJkIHRoZSBFT1MKLSAqIG1lc3NhZ2UgdG8gdGhlIGFwcGxpY2F0aW9uIGlmIGFsbCBzaW5rcyBoYXZlIHBvc3RlZCBhbiBFT1MgbWVzc2FnZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgZW9zIG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfZW9zIChHc3RPYmplY3QgKiBzcmMpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0VPUywgc3JjLCBOVUxMKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfZXJyb3Jfd2l0aF9kZXRhaWxzOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBlcnJvcjogKHRyYW5zZmVyIG5vbmUpOiBUaGUgR0Vycm9yIGZvciB0aGlzIG1lc3NhZ2UuCi0gKiBAZGVidWc6IEEgZGVidWdnaW5nIHN0cmluZy4KLSAqIEBkZXRhaWxzOiAodHJhbnNmZXIgZnVsbCk6IChhbGxvdy1ub25lKTogQSBHc3RTdHJ1Y3R1cmUgd2l0aCBkZXRhaWxzCi0gKgotICogQ3JlYXRlIGEgbmV3IGVycm9yIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgY29weSBAZXJyb3IgYW5kCi0gKiBAZGVidWcuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudCB3aGVuIGEgZmF0YWwgZXZlbnQKLSAqIG9jY3VycmVkLiBUaGUgcGlwZWxpbmUgd2lsbCBwcm9iYWJseSAocGFydGlhbGx5KSBzdG9wLiBUaGUgYXBwbGljYXRpb24KLSAqIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2Ugc2hvdWxkIHN0b3AgdGhlIHBpcGVsaW5lLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBlcnJvciBtZXNzYWdlLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2Vycm9yX3dpdGhfZGV0YWlscyAoR3N0T2JqZWN0ICogc3JjLCBHRXJyb3IgKiBlcnJvciwKLSAgICBjb25zdCBnY2hhciAqIGRlYnVnLCBHc3RTdHJ1Y3R1cmUgKiBkZXRhaWxzKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBpZiAoIWdfdXRmOF92YWxpZGF0ZSAoZGVidWcsIC0xLCBOVUxMKSkgewotICAgIGRlYnVnID0gTlVMTDsKLSAgICBnX3dhcm5pbmcgKCJUcnlpbmcgdG8gc2V0IGRlYnVnIGZpZWxkIG9mIGVycm9yIG1lc3NhZ2UsIGJ1dCAiCi0gICAgICAgICJzdHJpbmcgaXMgbm90IHZhbGlkIFVURi04LiBQbGVhc2UgZmlsZSBhIGJ1Zy4iKTsKLSAgfQotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKE1FU1NBR0VfRVJST1IpLAotICAgICAgR1NUX1FVQVJLIChHRVJST1IpLCBHX1RZUEVfRVJST1IsIGVycm9yLAotICAgICAgR1NUX1FVQVJLIChERUJVRyksIEdfVFlQRV9TVFJJTkcsIGRlYnVnLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0VSUk9SLCBzcmMsIHN0cnVjdHVyZSk7Ci0gIGlmIChkZXRhaWxzKSB7Ci0gICAgR1ZhbHVlIHYgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ2LCBHU1RfVFlQRV9TVFJVQ1RVUkUpOwotICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnYsIGRldGFpbHMpOwotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAoR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKSwgZGV0YWlsc19xdWFyaywKLSAgICAgICAgJnYpOwotICB9Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X2Vycm9yOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBlcnJvcjogKHRyYW5zZmVyIG5vbmUpOiBUaGUgR0Vycm9yIGZvciB0aGlzIG1lc3NhZ2UuCi0gKiBAZGVidWc6IEEgZGVidWdnaW5nIHN0cmluZy4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgZXJyb3IgbWVzc2FnZS4gVGhlIG1lc3NhZ2Ugd2lsbCBjb3B5IEBlcnJvciBhbmQKLSAqIEBkZWJ1Zy4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50IHdoZW4gYSBmYXRhbCBldmVudAotICogb2NjdXJyZWQuIFRoZSBwaXBlbGluZSB3aWxsIHByb2JhYmx5IChwYXJ0aWFsbHkpIHN0b3AuIFRoZSBhcHBsaWNhdGlvbgotICogcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSBzaG91bGQgc3RvcCB0aGUgcGlwZWxpbmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IGVycm9yIG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfZXJyb3IgKEdzdE9iamVjdCAqIHNyYywgR0Vycm9yICogZXJyb3IsIGNvbnN0IGdjaGFyICogZGVidWcpCi17Ci0gIHJldHVybiBnc3RfbWVzc2FnZV9uZXdfZXJyb3Jfd2l0aF9kZXRhaWxzIChzcmMsIGVycm9yLCBkZWJ1ZywgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3JfZGV0YWlsczoKLSAqIEBtZXNzYWdlOiBUaGUgbWVzc2FnZSBvYmplY3QKLSAqIEBzdHJ1Y3R1cmU6IChvdXQpOiBBIHBvaW50ZXIgdG8gdGhlIHJldHVybmVkIGRldGFpbHMKLSAqCi0gKiBSZXR1cm5zIHRoZSBvcHRpb25hbCBkZXRhaWxzIHN0cnVjdHVyZSwgbWF5IGJlIE5VTEwgaWYgbm9uZS4KLSAqIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgZnJlZWQuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3JfZGV0YWlscyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCi0gICAgY29uc3QgR3N0U3RydWN0dXJlICoqIHN0cnVjdHVyZSkKLXsKLSAgY29uc3QgR1ZhbHVlICp2OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOwotCi0gICpzdHJ1Y3R1cmUgPSBOVUxMOwotICB2ID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSksCi0gICAgICBkZXRhaWxzX3F1YXJrKTsKLSAgaWYgKHYpIHsKLSAgICAqc3RydWN0dXJlID0gZ192YWx1ZV9nZXRfYm94ZWQgKHYpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmdfd2l0aF9kZXRhaWxzOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBlcnJvcjogKHRyYW5zZmVyIG5vbmUpOiBUaGUgR0Vycm9yIGZvciB0aGlzIG1lc3NhZ2UuCi0gKiBAZGVidWc6IEEgZGVidWdnaW5nIHN0cmluZy4KLSAqIEBkZXRhaWxzOiAodHJhbnNmZXIgZnVsbCk6IChhbGxvdy1ub25lKTogQSBHc3RTdHJ1Y3R1cmUgd2l0aCBkZXRhaWxzCi0gKgotICogQ3JlYXRlIGEgbmV3IHdhcm5pbmcgbWVzc2FnZS4gVGhlIG1lc3NhZ2Ugd2lsbCBtYWtlIGNvcGllcyBvZiBAZXJyb3IgYW5kCi0gKiBAZGVidWcuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHdhcm5pbmcgbWVzc2FnZS4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld193YXJuaW5nX3dpdGhfZGV0YWlscyAoR3N0T2JqZWN0ICogc3JjLCBHRXJyb3IgKiBlcnJvciwKLSAgICBjb25zdCBnY2hhciAqIGRlYnVnLCBHc3RTdHJ1Y3R1cmUgKiBkZXRhaWxzKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBpZiAoIWdfdXRmOF92YWxpZGF0ZSAoZGVidWcsIC0xLCBOVUxMKSkgewotICAgIGRlYnVnID0gTlVMTDsKLSAgICBnX3dhcm5pbmcgKCJUcnlpbmcgdG8gc2V0IGRlYnVnIGZpZWxkIG9mIHdhcm5pbmcgbWVzc2FnZSwgYnV0ICIKLSAgICAgICAgInN0cmluZyBpcyBub3QgdmFsaWQgVVRGLTguIFBsZWFzZSBmaWxlIGEgYnVnLiIpOwotICB9Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoTUVTU0FHRV9XQVJOSU5HKSwKLSAgICAgIEdTVF9RVUFSSyAoR0VSUk9SKSwgR19UWVBFX0VSUk9SLCBlcnJvciwKLSAgICAgIEdTVF9RVUFSSyAoREVCVUcpLCBHX1RZUEVfU1RSSU5HLCBkZWJ1ZywgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9XQVJOSU5HLCBzcmMsIHN0cnVjdHVyZSk7Ci0gIGlmIChkZXRhaWxzKSB7Ci0gICAgR1ZhbHVlIHYgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ2LCBHU1RfVFlQRV9TVFJVQ1RVUkUpOwotICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnYsIGRldGFpbHMpOwotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAoR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKSwgZGV0YWlsc19xdWFyaywKLSAgICAgICAgJnYpOwotICB9Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmc6Ci0gKiBAc3JjOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgotICogQGVycm9yOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBHRXJyb3IgZm9yIHRoaXMgbWVzc2FnZS4KLSAqIEBkZWJ1ZzogQSBkZWJ1Z2dpbmcgc3RyaW5nLgotICoKLSAqIENyZWF0ZSBhIG5ldyB3YXJuaW5nIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgbWFrZSBjb3BpZXMgb2YgQGVycm9yIGFuZAotICogQGRlYnVnLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyB3YXJuaW5nIG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfd2FybmluZyAoR3N0T2JqZWN0ICogc3JjLCBHRXJyb3IgKiBlcnJvciwgY29uc3QgZ2NoYXIgKiBkZWJ1ZykKLXsKLSAgcmV0dXJuIGdzdF9tZXNzYWdlX25ld193YXJuaW5nX3dpdGhfZGV0YWlscyAoc3JjLCBlcnJvciwgZGVidWcsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmdfZGV0YWlsczoKLSAqIEBtZXNzYWdlOiBUaGUgbWVzc2FnZSBvYmplY3QKLSAqIEBzdHJ1Y3R1cmU6IChvdXQpOiBBIHBvaW50ZXIgdG8gdGhlIHJldHVybmVkIGRldGFpbHMgc3RydWN0dXJlCi0gKgotICogUmV0dXJucyB0aGUgb3B0aW9uYWwgZGV0YWlscyBzdHJ1Y3R1cmUsIG1heSBiZSBOVUxMIGlmIG5vbmUKLSAqIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgZnJlZWQuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZ19kZXRhaWxzIChHc3RNZXNzYWdlICogbWVzc2FnZSwKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiogc3RydWN0dXJlKQotewotICBjb25zdCBHVmFsdWUgKnY7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfV0FSTklORyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKLQotICAqc3RydWN0dXJlID0gTlVMTDsKLSAgdiA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpLAotICAgICAgZGV0YWlsc19xdWFyayk7Ci0gIGlmICh2KSB7Ci0gICAgKnN0cnVjdHVyZSA9IGdfdmFsdWVfZ2V0X2JveGVkICh2KTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19pbmZvX3dpdGhfZGV0YWlsczoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAZXJyb3I6ICh0cmFuc2ZlciBub25lKTogVGhlIEdFcnJvciBmb3IgdGhpcyBtZXNzYWdlLgotICogQGRlYnVnOiBBIGRlYnVnZ2luZyBzdHJpbmcuCi0gKiBAZGV0YWlsczogKHRyYW5zZmVyIGZ1bGwpOiAoYWxsb3ctbm9uZSk6IEEgR3N0U3RydWN0dXJlIHdpdGggZGV0YWlscwotICoKLSAqIENyZWF0ZSBhIG5ldyBpbmZvIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgbWFrZSBjb3BpZXMgb2YgQGVycm9yIGFuZAotICogQGRlYnVnLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyB3YXJuaW5nIG1lc3NhZ2UuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfaW5mb193aXRoX2RldGFpbHMgKEdzdE9iamVjdCAqIHNyYywgR0Vycm9yICogZXJyb3IsCi0gICAgY29uc3QgZ2NoYXIgKiBkZWJ1ZywgR3N0U3RydWN0dXJlICogZGV0YWlscykKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgaWYgKCFnX3V0ZjhfdmFsaWRhdGUgKGRlYnVnLCAtMSwgTlVMTCkpIHsKLSAgICBkZWJ1ZyA9IE5VTEw7Ci0gICAgZ193YXJuaW5nICgiVHJ5aW5nIHRvIHNldCBkZWJ1ZyBmaWVsZCBvZiBpbmZvIG1lc3NhZ2UsIGJ1dCAiCi0gICAgICAgICJzdHJpbmcgaXMgbm90IHZhbGlkIFVURi04LiBQbGVhc2UgZmlsZSBhIGJ1Zy4iKTsKLSAgfQotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKE1FU1NBR0VfSU5GTyksCi0gICAgICBHU1RfUVVBUksgKEdFUlJPUiksIEdfVFlQRV9FUlJPUiwgZXJyb3IsCi0gICAgICBHU1RfUVVBUksgKERFQlVHKSwgR19UWVBFX1NUUklORywgZGVidWcsIE5VTEwpOwotICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfSU5GTywgc3JjLCBzdHJ1Y3R1cmUpOwotICBpZiAoZGV0YWlscykgewotICAgIEdWYWx1ZSB2ID0gR19WQUxVRV9JTklUOwotCi0gICAgZ192YWx1ZV9pbml0ICgmdiwgR1NUX1RZUEVfU1RSVUNUVVJFKTsKLSAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKCZ2LCBkZXRhaWxzKTsKLSAgICBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSksIGRldGFpbHNfcXVhcmssCi0gICAgICAgICZ2KTsKLSAgfQotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19pbmZvOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBlcnJvcjogKHRyYW5zZmVyIG5vbmUpOiBUaGUgR0Vycm9yIGZvciB0aGlzIG1lc3NhZ2UuCi0gKiBAZGVidWc6IEEgZGVidWdnaW5nIHN0cmluZy4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgaW5mbyBtZXNzYWdlLiBUaGUgbWVzc2FnZSB3aWxsIG1ha2UgY29waWVzIG9mIEBlcnJvciBhbmQKLSAqIEBkZWJ1Zy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgaW5mbyBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2luZm8gKEdzdE9iamVjdCAqIHNyYywgR0Vycm9yICogZXJyb3IsIGNvbnN0IGdjaGFyICogZGVidWcpCi17Ci0gIHJldHVybiBnc3RfbWVzc2FnZV9uZXdfaW5mb193aXRoX2RldGFpbHMgKHNyYywgZXJyb3IsIGRlYnVnLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9pbmZvX2RldGFpbHM6Ci0gKiBAbWVzc2FnZTogVGhlIG1lc3NhZ2Ugb2JqZWN0Ci0gKiBAc3RydWN0dXJlOiAob3V0KTogQSBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBkZXRhaWxzIHN0cnVjdHVyZQotICoKLSAqIFJldHVybnMgdGhlIG9wdGlvbmFsIGRldGFpbHMgc3RydWN0dXJlLCBtYXkgYmUgTlVMTCBpZiBub25lCi0gKiBUaGUgcmV0dXJuZWQgc3RydWN0dXJlIG11c3Qgbm90IGJlIGZyZWVkLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX2luZm9fZGV0YWlscyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCi0gICAgY29uc3QgR3N0U3RydWN0dXJlICoqIHN0cnVjdHVyZSkKLXsKLSAgY29uc3QgR1ZhbHVlICp2OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0lORk8pOwotICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0KLSAgKnN0cnVjdHVyZSA9IE5VTEw7Ci0gIHYgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKSwKLSAgICAgIGRldGFpbHNfcXVhcmspOwotICBpZiAodikgewotICAgICpzdHJ1Y3R1cmUgPSBnX3ZhbHVlX2dldF9ib3hlZCAodik7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfdGFnOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEB0YWdfbGlzdDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgdGFnIGxpc3QgZm9yIHRoZSBtZXNzYWdlLgotICoKLSAqIENyZWF0ZSBhIG5ldyB0YWcgbWVzc2FnZS4gVGhlIG1lc3NhZ2Ugd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgdGFnIGxpc3QuCi0gKiBUaGUgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudHMgdGhhdCBkaXNjb3ZlcmVkIGEgbmV3IHRhZ2xpc3QuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHRhZyBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X3RhZyAoR3N0T2JqZWN0ICogc3JjLCBHc3RUYWdMaXN0ICogdGFnX2xpc3QpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR1ZhbHVlIHZhbCA9IEdfVkFMVUVfSU5JVDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUICh0YWdfbGlzdCksIE5VTEwpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eSAoR1NUX1FVQVJLIChNRVNTQUdFX1RBRykpOwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX1RBR19MSVNUKTsKLSAgZ192YWx1ZV90YWtlX2JveGVkICgmdmFsLCB0YWdfbGlzdCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAocywgR1NUX1FVQVJLIChUQUdMSVNUKSwgJnZhbCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9UQUcsIHNyYywgcyk7Ci0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmc6Ci0gKiBAc3JjOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgotICogQHBlcmNlbnQ6IFRoZSBidWZmZXJpbmcgcGVyY2VudAotICoKLSAqIENyZWF0ZSBhIG5ldyBidWZmZXJpbmcgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGNhbiBiZSBwb3N0ZWQgYnkgYW4gZWxlbWVudCB0aGF0Ci0gKiBuZWVkcyB0byBidWZmZXIgZGF0YSBiZWZvcmUgaXQgY2FuIGNvbnRpbnVlIHByb2Nlc3NpbmcuIEBwZXJjZW50IHNob3VsZCBiZSBhCi0gKiB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC4gQSB2YWx1ZSBvZiAxMDAgbWVhbnMgdGhhdCB0aGUgYnVmZmVyaW5nIGNvbXBsZXRlZC4KLSAqCi0gKiBXaGVuIEBwZXJjZW50IGlzIDwgMTAwIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgUEFVU0UgYSBQTEFZSU5HIHBpcGVsaW5lLiBXaGVuCi0gKiBAcGVyY2VudCBpcyAxMDAsIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2V0IHRoZSBwaXBlbGluZSAoYmFjaykgdG8gUExBWUlORy4KLSAqIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGJlIHByZXBhcmVkIHRvIHJlY2VpdmUgQlVGRkVSSU5HIG1lc3NhZ2VzIGluIHRoZQotICogUFJFUk9MTElORyBzdGF0ZSBhbmQgbWF5IG9ubHkgc2V0IHRoZSBwaXBlbGluZSB0byBQTEFZSU5HIGFmdGVyIHJlY2VpdmluZyBhCi0gKiBtZXNzYWdlIHdpdGggQHBlcmNlbnQgc2V0IHRvIDEwMCwgd2hpY2ggY2FuIGhhcHBlbiBhZnRlciB0aGUgcGlwZWxpbmUKLSAqIGNvbXBsZXRlZCBwcmVyb2xsaW5nLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IGJ1ZmZlcmluZyBtZXNzYWdlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgKEdzdE9iamVjdCAqIHNyYywgZ2ludCBwZXJjZW50KQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2ludDY0IGJ1ZmZlcmluZ19sZWZ0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwZXJjZW50ID49IDAgJiYgcGVyY2VudCA8PSAxMDAsIE5VTEwpOwotCi0gIGJ1ZmZlcmluZ19sZWZ0ID0gKHBlcmNlbnQgPT0gMTAwID8gMCA6IC0xKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX0JVRkZFUklORyksCi0gICAgICBHU1RfUVVBUksgKEJVRkZFUl9QRVJDRU5UKSwgR19UWVBFX0lOVCwgcGVyY2VudCwKLSAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX01PREUpLCBHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgR1NUX0JVRkZFUklOR19TVFJFQU0sCi0gICAgICBHU1RfUVVBUksgKEFWR19JTl9SQVRFKSwgR19UWVBFX0lOVCwgLTEsCi0gICAgICBHU1RfUVVBUksgKEFWR19PVVRfUkFURSksIEdfVFlQRV9JTlQsIC0xLAotICAgICAgR1NUX1FVQVJLIChCVUZGRVJJTkdfTEVGVCksIEdfVFlQRV9JTlQ2NCwgYnVmZmVyaW5nX2xlZnQsIE5VTEwpOwotICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfQlVGRkVSSU5HLCBzcmMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQ6Ci0gKiBAc3JjOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgotICogQG9sZHN0YXRlOiB0aGUgcHJldmlvdXMgc3RhdGUKLSAqIEBuZXdzdGF0ZTogdGhlIG5ldyAoY3VycmVudCkgc3RhdGUKLSAqIEBwZW5kaW5nOiB0aGUgcGVuZGluZyAodGFyZ2V0KSBzdGF0ZQotICoKLSAqIENyZWF0ZSBhIHN0YXRlIGNoYW5nZSBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW5ldmVyIGFuIGVsZW1lbnQKLSAqIGNoYW5nZWQgaXRzIHN0YXRlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBzdGF0ZSBjaGFuZ2UgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkIChHc3RPYmplY3QgKiBzcmMsCi0gICAgR3N0U3RhdGUgb2xkc3RhdGUsIEdzdFN0YXRlIG5ld3N0YXRlLCBHc3RTdGF0ZSBwZW5kaW5nKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX1NUQVRFX0NIQU5HRUQpLAotICAgICAgR1NUX1FVQVJLIChPTERfU1RBVEUpLCBHU1RfVFlQRV9TVEFURSwgKGdpbnQpIG9sZHN0YXRlLAotICAgICAgR1NUX1FVQVJLIChORVdfU1RBVEUpLCBHU1RfVFlQRV9TVEFURSwgKGdpbnQpIG5ld3N0YXRlLAotICAgICAgR1NUX1FVQVJLIChQRU5ESU5HX1NUQVRFKSwgR1NUX1RZUEVfU1RBVEUsIChnaW50KSBwZW5kaW5nLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfc3RhdGVfZGlydHk6Ci0gKiBAc3JjOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlCi0gKgotICogQ3JlYXRlIGEgc3RhdGUgZGlydHkgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciBhbiBlbGVtZW50Ci0gKiBjaGFuZ2VkIGl0cyBzdGF0ZSBhc3luY2hyb25vdXNseSBhbmQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIHVwZGF0ZSB0aGUKLSAqIHN0YXRlcyBvZiBjb250YWluZXIgb2JqZWN0cy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgc3RhdGUgZGlydHkgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eSAoR3N0T2JqZWN0ICogc3JjKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9TVEFURV9ESVJUWSwgc3JjLCBOVUxMKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfY2xvY2tfcHJvdmlkZToKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAY2xvY2s6ICh0cmFuc2ZlciBub25lKTogdGhlIGNsb2NrIGl0IHByb3ZpZGVzCi0gKiBAcmVhZHk6ICVUUlVFIGlmIHRoZSBzZW5kZXIgY2FuIHByb3ZpZGUgYSBjbG9jawotICoKLSAqIENyZWF0ZSBhIGNsb2NrIHByb3ZpZGUgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuZXZlciBhbgotICogZWxlbWVudCBpcyByZWFkeSB0byBwcm92aWRlIGEgY2xvY2sgb3IgbG9zdCBpdHMgYWJpbGl0eSB0byBwcm92aWRlCi0gKiBhIGNsb2NrIChtYXliZSBiZWNhdXNlIGl0IHBhdXNlZCBvciBiZWNhbWUgRU9TKS4KLSAqCi0gKiBUaGlzIG1lc3NhZ2UgaXMgbWFpbmx5IHVzZWQgaW50ZXJuYWxseSB0byBtYW5hZ2UgdGhlIGNsb2NrCi0gKiBzZWxlY3Rpb24uCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHByb3ZpZGUgY2xvY2sgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlIChHc3RPYmplY3QgKiBzcmMsIEdzdENsb2NrICogY2xvY2ssCi0gICAgZ2Jvb2xlYW4gcmVhZHkpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKE1FU1NBR0VfQ0xPQ0tfUFJPVklERSksCi0gICAgICBHU1RfUVVBUksgKENMT0NLKSwgR1NUX1RZUEVfQ0xPQ0ssIGNsb2NrLAotICAgICAgR1NUX1FVQVJLIChSRUFEWSksIEdfVFlQRV9CT09MRUFOLCByZWFkeSwgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFLCBzcmMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3Q6Ci0gKiBAc3JjOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgotICogQGNsb2NrOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjbG9jayB0aGF0IHdhcyBsb3N0Ci0gKgotICogQ3JlYXRlIGEgY2xvY2sgbG9zdCBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW5ldmVyIHRoZQotICogY2xvY2sgaXMgbm90IHZhbGlkIGFueW1vcmUuCi0gKgotICogSWYgdGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSB0aGUgcGlwZWxpbmUsIHRoZSBwaXBlbGluZSB3aWxsCi0gKiBzZWxlY3QgYSBuZXcgY2xvY2sgYWdhaW4gd2hlbiBpdCBnb2VzIHRvIFBMQVlJTkcuIEl0IG1pZ2h0IHRoZXJlZm9yZQotICogYmUgbmVlZGVkIHRvIHNldCB0aGUgcGlwZWxpbmUgdG8gUEFVU0VEIGFuZCBQTEFZSU5HIGFnYWluLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBjbG9jayBsb3N0IG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfY2xvY2tfbG9zdCAoR3N0T2JqZWN0ICogc3JjLCBHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX0NMT0NLX0xPU1QpLAotICAgICAgR1NUX1FVQVJLIChDTE9DSyksIEdTVF9UWVBFX0NMT0NLLCBjbG9jaywgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9DTE9DS19MT1NULCBzcmMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X25ld19jbG9jazoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAY2xvY2s6ICh0cmFuc2ZlciBub25lKTogdGhlIG5ldyBzZWxlY3RlZCBjbG9jawotICoKLSAqIENyZWF0ZSBhIG5ldyBjbG9jayBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIHdoZW5ldmVyIHRoZQotICogcGlwZWxpbmUgc2VsZWN0cyBhIG5ldyBjbG9jayBmb3IgdGhlIHBpcGVsaW5lLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBuZXcgY2xvY2sgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2sgKEdzdE9iamVjdCAqIHNyYywgR3N0Q2xvY2sgKiBjbG9jaykKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoTUVTU0FHRV9ORVdfQ0xPQ0spLAotICAgICAgR1NUX1FVQVJLIChDTE9DSyksIEdTVF9UWVBFX0NMT0NLLCBjbG9jaywgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9ORVdfQ0xPQ0ssIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZToKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAdHlwZTogVGhlIGNoYW5nZSB0eXBlLgotICogQG93bmVyOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBvd25lciBlbGVtZW50IG9mIEBzcmMuCi0gKiBAYnVzeTogV2hldGhlciB0aGUgc3RydWN0dXJlIGNoYW5nZSBpcyBidXN5LgotICoKLSAqIENyZWF0ZSBhIG5ldyBzdHJ1Y3R1cmUgY2hhbmdlIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbiB0aGUKLSAqIHN0cnVjdHVyZSBvZiBhIHBpcGVsaW5lIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNoYW5nZWQsIGZvciBleGFtcGxlCi0gKiB3aGVuIHBhZHMgYXJlIGxpbmtlZCBvciB1bmxpbmtlZC4KLSAqCi0gKiBAc3JjIHNob3VsZCBiZSB0aGUgc2lua3BhZCB0aGF0IHVubGlua2VkIG9yIGxpbmtlZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgc3RydWN0dXJlIGNoYW5nZSBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgKEdzdE9iamVjdCAqIHNyYywgR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSB0eXBlLAotICAgIEdzdEVsZW1lbnQgKiBvd25lciwgZ2Jvb2xlYW4gYnVzeSkKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHNyYyksIE5VTEwpOwotICAvKiBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9ESVJFQ1RJT04gKHNyYykgPT0gR1NUX1BBRF9TSU5LLCBOVUxMKTsgKi8KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChvd25lciksIE5VTEwpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKE1FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRSksCi0gICAgICBHU1RfUVVBUksgKFRZUEUpLCBHU1RfVFlQRV9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEUsIHR5cGUsCi0gICAgICBHU1RfUVVBUksgKE9XTkVSKSwgR1NUX1RZUEVfRUxFTUVOVCwgb3duZXIsCi0gICAgICBHU1RfUVVBUksgKEJVU1kpLCBHX1RZUEVfQk9PTEVBTiwgYnVzeSwgTlVMTCk7Ci0KLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UsIHNyYywKLSAgICAgIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQ6Ci0gKiBAc3JjOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgotICogQGZvcm1hdDogVGhlIGZvcm1hdCBvZiB0aGUgcG9zaXRpb24gYmVpbmcgcGxheWVkCi0gKiBAcG9zaXRpb246IFRoZSBwb3NpdGlvbiBvZiB0aGUgc2VnbWVudCBiZWluZyBwbGF5ZWQKLSAqCi0gKiBDcmVhdGUgYSBuZXcgc2VnbWVudCBtZXNzYWdlLiBUaGlzIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzIHRoYXQKLSAqIHN0YXJ0IHBsYXliYWNrIG9mIGEgc2VnbWVudCBhcyBhIHJlc3VsdCBvZiBhIHNlZ21lbnQgc2Vlay4gVGhpcyBtZXNzYWdlCi0gKiBpcyBub3QgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJ1dCBpcyB1c2VkIGZvciBtYWludGVuYW5jZSByZWFzb25zIGluCi0gKiBjb250YWluZXIgZWxlbWVudHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHNlZ21lbnQgc3RhcnQgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0IChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ2ludDY0IHBvc2l0aW9uKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX1NFR01FTlRfU1RBUlQpLAotICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKLSAgICAgIEdTVF9RVUFSSyAoUE9TSVRJT04pLCBHX1RZUEVfSU5UNjQsIHBvc2l0aW9uLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQsIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBmb3JtYXQ6IFRoZSBmb3JtYXQgb2YgdGhlIHBvc2l0aW9uIGJlaW5nIGRvbmUKLSAqIEBwb3NpdGlvbjogVGhlIHBvc2l0aW9uIG9mIHRoZSBzZWdtZW50IGJlaW5nIGRvbmUKLSAqCi0gKiBDcmVhdGUgYSBuZXcgc2VnbWVudCBkb25lIG1lc3NhZ2UuIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudHMgdGhhdAotICogZmluaXNoIHBsYXliYWNrIG9mIGEgc2VnbWVudCBhcyBhIHJlc3VsdCBvZiBhIHNlZ21lbnQgc2Vlay4gVGhpcyBtZXNzYWdlCi0gKiBpcyByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb24gYWZ0ZXIgYWxsIGVsZW1lbnRzIHRoYXQgcG9zdGVkIGEgc2VnbWVudF9zdGFydAotICogaGF2ZSBwb3N0ZWQgdGhlIHNlZ21lbnRfZG9uZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgc2VnbWVudCBkb25lIG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ2ludDY0IHBvc2l0aW9uKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX1NFR01FTlRfRE9ORSksCi0gICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChQT1NJVElPTiksIEdfVFlQRV9JTlQ2NCwgcG9zaXRpb24sIE5VTEwpOwotICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FLCBzcmMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBzdHJ1Y3R1cmU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHN0cnVjdHVyZSBmb3IgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlCi0gKiAgICAgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgc3RydWN0dXJlLgotICoKLSAqIENyZWF0ZSBhIG5ldyBhcHBsaWNhdGlvbi10eXBlZCBtZXNzYWdlLiBHU3RyZWFtZXIgd2lsbCBuZXZlciBjcmVhdGUgdGhlc2UKLSAqIG1lc3NhZ2VzOyB0aGV5IGFyZSBhIGdpZnQgZnJvbSB1cyB0byB5b3UuIEVuam95LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBhcHBsaWNhdGlvbiBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfQVBQTElDQVRJT04sIHNyYywgc3RydWN0dXJlKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudDoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAc3RydWN0dXJlOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBzdHJ1Y3R1cmUgZm9yIHRoZQotICogICAgIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZS4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgZWxlbWVudC1zcGVjaWZpYyBtZXNzYWdlLiBUaGlzIGlzIG1lYW50IGFzIGEgZ2VuZXJpYyB3YXkgb2YKLSAqIGFsbG93aW5nIG9uZS13YXkgY29tbXVuaWNhdGlvbiBmcm9tIGFuIGVsZW1lbnQgdG8gYW4gYXBwbGljYXRpb24sIGZvciBleGFtcGxlCi0gKiAidGhlIGZpcmV3aXJlIGNhYmxlIHdhcyB1bnBsdWdnZWQiLiBUaGUgZm9ybWF0IG9mIHRoZSBtZXNzYWdlIHNob3VsZCBiZQotICogZG9jdW1lbnRlZCBpbiB0aGUgZWxlbWVudCdzIGRvY3VtZW50YXRpb24uIFRoZSBzdHJ1Y3R1cmUgZmllbGQgY2FuIGJlICVOVUxMLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBlbGVtZW50IG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoR3N0T2JqZWN0ICogc3JjLCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0VMRU1FTlQsIHNyYywgc3RydWN0dXJlKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZDoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKgotICogQ3JlYXRlIGEgbmV3IGR1cmF0aW9uIGNoYW5nZWQgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cwotICogdGhhdCBrbm93IHRoZSBkdXJhdGlvbiBvZiBhIHN0cmVhbSB3aGVuIHRoZSBkdXJhdGlvbiBjaGFuZ2VzLiBUaGlzIG1lc3NhZ2UKLSAqIGlzIHJlY2VpdmVkIGJ5IGJpbnMgYW5kIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiBhCi0gKiBwaXBlbGluZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgZHVyYXRpb24tY2hhbmdlZCBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQgKEdzdE9iamVjdCAqIHNyYykKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfRFVSQVRJT05fQ0hBTkdFRCwgc3JjLAotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfaWRfZW1wdHkgKEdTVF9RVUFSSyAoTUVTU0FHRV9EVVJBVElPTl9DSEFOR0VEKSkpOwotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydDoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKgotICogVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgc3RhcnQgYW4gQVNZTkMgc3RhdGUgY2hhbmdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBhc3luY19zdGFydCBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0IChHc3RPYmplY3QgKiBzcmMpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0FTWU5DX1NUQVJULCBzcmMsIE5VTEwpOwotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19hc3luY19kb25lOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBydW5uaW5nX3RpbWU6IHRoZSBkZXNpcmVkIHJ1bm5pbmdfdGltZQotICoKLSAqIFRoZSBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIGVsZW1lbnRzIGNvbXBsZXRlZCBhbiBBU1lOQyBzdGF0ZSBjaGFuZ2UuCi0gKiBAcnVubmluZ190aW1lIGNvbnRhaW5zIHRoZSB0aW1lIG9mIHRoZSBkZXNpcmVkIHJ1bm5pbmdfdGltZSB3aGVuIHRoaXMKLSAqIGVsZW1lbnRzIGdvZXMgdG8gUExBWUlORy4gQSB2YWx1ZSBvZiAjR1NUX0NMT0NLX1RJTUVfTk9ORSBmb3IgQHJ1bm5pbmdfdGltZQotICogbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBoYXMgbm8gY2xvY2sgaW50ZXJhY3Rpb24gYW5kIHRodXMgZG9lc24ndCBjYXJlIGFib3V0Ci0gKiB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBwaXBlbGluZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgYXN5bmNfZG9uZSBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmUgKEdzdE9iamVjdCAqIHNyYywgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZSkKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoTUVTU0FHRV9BU1lOQ19ET05FKSwKLSAgICAgIEdTVF9RVUFSSyAoUlVOTklOR19USU1FKSwgR19UWVBFX1VJTlQ2NCwgcnVubmluZ190aW1lLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUsIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeToKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKgotICogVGhpcyBtZXNzYWdlIGNhbiBiZSBwb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGVpciBsYXRlbmN5IHJlcXVpcmVtZW50cyBoYXZlCi0gKiBjaGFuZ2VkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBsYXRlbmN5IG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSAoR3N0T2JqZWN0ICogc3JjKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9MQVRFTkNZLCBzcmMsIE5VTEwpOwotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBzdGF0ZTogVGhlIG5ldyByZXF1ZXN0ZWQgc3RhdGUKLSAqCi0gKiBUaGlzIG1lc3NhZ2UgY2FuIGJlIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgd2FudCB0byBoYXZlIHRoZWlyIHN0YXRlCi0gKiBjaGFuZ2VkLiBBIHR5cGljYWwgdXNlIGNhc2Ugd291bGQgYmUgYW4gYXVkaW8gc2VydmVyIHRoYXQgd2FudHMgdG8gcGF1c2UgdGhlCi0gKiBwaXBlbGluZSBiZWNhdXNlIGEgaGlnaGVyIHByaW9yaXR5IHN0cmVhbSBpcyBiZWluZyBwbGF5ZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHJlcXVlc3Qgc3RhdGUgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0YXRlIHN0YXRlKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX1JFUVVFU1RfU1RBVEUpLAotICAgICAgR1NUX1FVQVJLIChORVdfU1RBVEUpLCBHU1RfVFlQRV9TVEFURSwgKGdpbnQpIHN0YXRlLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUsIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlOgotICogQG1lc3NhZ2U6IFRoZSAjR3N0TWVzc2FnZS4KLSAqCi0gKiBBY2Nlc3MgdGhlIHN0cnVjdHVyZSBvZiB0aGUgbWVzc2FnZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1lc3NhZ2UuIFRoZSBzdHJ1Y3R1cmUgaXMKLSAqIHN0aWxsIG93bmVkIGJ5IHRoZSBtZXNzYWdlLCB3aGljaCBtZWFucyB0aGF0IHlvdSBzaG91bGQgbm90IGZyZWUgaXQgYW5kCi0gKiB0aGF0IHRoZSBwb2ludGVyIGJlY29tZXMgaW52YWxpZCB3aGVuIHlvdSBmcmVlIHRoZSBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWNvbnN0IEdzdFN0cnVjdHVyZSAqCi1nc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChHc3RNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfaGFzX25hbWU6Ci0gKiBAbWVzc2FnZTogVGhlICNHc3RNZXNzYWdlLgotICogQG5hbWU6IG5hbWUgdG8gY2hlY2sKLSAqCi0gKiBDaGVja3MgaWYgQG1lc3NhZ2UgaGFzIHRoZSBnaXZlbiBAbmFtZS4gVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IHVzZWQgdG8KLSAqIGNoZWNrIHRoZSBuYW1lIG9mIGEgY3VzdG9tIG1lc3NhZ2UuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQG5hbWUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgbWVzc2FnZSBzdHJ1Y3R1cmUuCi0gKi8KLWdib29sZWFuCi1nc3RfbWVzc2FnZV9oYXNfbmFtZSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSwgRkFMU0UpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGlmIChzdHJ1Y3R1cmUgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgbmFtZSk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfdGFnOgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9UQUcuCi0gKiBAdGFnX2xpc3Q6IChvdXQgY2FsbGVlLWFsbG9jYXRlcyk6IHJldHVybiBsb2NhdGlvbiBmb3IgdGhlIHRhZy1saXN0LgotICoKLSAqIEV4dHJhY3RzIHRoZSB0YWcgbGlzdCBmcm9tIHRoZSBHc3RNZXNzYWdlLiBUaGUgdGFnIGxpc3QgcmV0dXJuZWQgaW4gdGhlCi0gKiBvdXRwdXQgYXJndW1lbnQgaXMgYSBjb3B5OyB0aGUgY2FsbGVyIG11c3QgZnJlZSBpdCB3aGVuIGRvbmUuCi0gKgotICogVHlwaWNhbCB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlOgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqICAgLi4uCi0gKiAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICogICAgIGNhc2UgR1NUX01FU1NBR0VfVEFHOiB7Ci0gKiAgICAgICBHc3RUYWdMaXN0ICp0YWdzID0gTlVMTDsKLSAqICAgICAgIAotICogICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfdGFnIChtc2csICZhbXA7dGFncyk7Ci0gKiAgICAgICBnX3ByaW50ICgiR290IHRhZ3MgZnJvbSBlbGVtZW50ICVzXG4iLCBHU1RfT0JKRUNUX05BTUUgKG1zZy0+c3JjKSk7Ci0gKiAgICAgICBoYW5kbGVfdGFncyAodGFncyk7Ci0gKiAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotICogICAgICAgYnJlYWs7Ci0gKiAgICAgfQotICogICAgIC4uLgotICogICB9Ci0gKiAgIC4uLgotICogXXwKLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV90YWcgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RUYWdMaXN0ICoqIHRhZ19saXN0KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9UQUcpOwotICBnX3JldHVybl9pZl9mYWlsICh0YWdfbGlzdCAhPSBOVUxMKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKSwKLSAgICAgIEdTVF9RVUFSSyAoVEFHTElTVCksIEdTVF9UWVBFX1RBR19MSVNULCB0YWdfbGlzdCwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nOgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcuCi0gKiBAcGVyY2VudDogKG91dCkgKGFsbG93LW5vbmUpOiBSZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBwZXJjZW50LgotICoKLSAqIEV4dHJhY3RzIHRoZSBidWZmZXJpbmcgcGVyY2VudCBmcm9tIHRoZSBHc3RNZXNzYWdlLiBzZWUgYWxzbwotICogZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZygpLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdpbnQgKiBwZXJjZW50KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcpOwotCi0gIGlmIChwZXJjZW50KQotICAgICpwZXJjZW50ID0KLSAgICAgICAgZ192YWx1ZV9nZXRfaW50IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoR1NUX01FU1NBR0VfU1RSVUNUVVJFCi0gICAgICAgICAgICAobWVzc2FnZSksIEdTVF9RVUFSSyAoQlVGRkVSX1BFUkNFTlQpKSk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0czoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfQlVGRkVSSU5HLgotICogQG1vZGU6IGEgYnVmZmVyaW5nIG1vZGUgCi0gKiBAYXZnX2luOiB0aGUgYXZlcmFnZSBpbnB1dCByYXRlCi0gKiBAYXZnX291dDogdGhlIGF2ZXJhZ2Ugb3V0cHV0IHJhdGUKLSAqIEBidWZmZXJpbmdfbGVmdDogYW1vdW50IG9mIGJ1ZmZlcmluZyB0aW1lIGxlZnQgaW4gbWlsbGlzZWNvbmRzCi0gKgotICogQ29uZmlndXJlcyB0aGUgYnVmZmVyaW5nIHN0YXRzIHZhbHVlcyBpbiBAbWVzc2FnZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZSwKLSAgICBnaW50IGF2Z19pbiwgZ2ludCBhdmdfb3V0LCBnaW50NjQgYnVmZmVyaW5nX2xlZnQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0JVRkZFUklORyk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSksCi0gICAgICBHU1RfUVVBUksgKEJVRkZFUklOR19NT0RFKSwgR1NUX1RZUEVfQlVGRkVSSU5HX01PREUsIG1vZGUsCi0gICAgICBHU1RfUVVBUksgKEFWR19JTl9SQVRFKSwgR19UWVBFX0lOVCwgYXZnX2luLAotICAgICAgR1NUX1FVQVJLIChBVkdfT1VUX1JBVEUpLCBHX1RZUEVfSU5ULCBhdmdfb3V0LAotICAgICAgR1NUX1FVQVJLIChCVUZGRVJJTkdfTEVGVCksIEdfVFlQRV9JTlQ2NCwgYnVmZmVyaW5nX2xlZnQsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0czoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfQlVGRkVSSU5HLgotICogQG1vZGU6IChvdXQpIChhbGxvdy1ub25lKTogYSBidWZmZXJpbmcgbW9kZSwgb3IgJU5VTEwKLSAqIEBhdmdfaW46IChvdXQpIChhbGxvdy1ub25lKTogdGhlIGF2ZXJhZ2UgaW5wdXQgcmF0ZSwgb3IgJU5VTEwKLSAqIEBhdmdfb3V0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBhdmVyYWdlIG91dHB1dCByYXRlLCBvciAlTlVMTAotICogQGJ1ZmZlcmluZ19sZWZ0OiAob3V0KSAoYWxsb3ctbm9uZSk6IGFtb3VudCBvZiBidWZmZXJpbmcgdGltZSBsZWZ0IGluCi0gKiAgICAgbWlsbGlzZWNvbmRzLCBvciAlTlVMTAotICoKLSAqIEV4dHJhY3RzIHRoZSBidWZmZXJpbmcgc3RhdHMgdmFsdWVzIGZyb20gQG1lc3NhZ2UuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCi0gICAgR3N0QnVmZmVyaW5nTW9kZSAqIG1vZGUsIGdpbnQgKiBhdmdfaW4sIGdpbnQgKiBhdmdfb3V0LAotICAgIGdpbnQ2NCAqIGJ1ZmZlcmluZ19sZWZ0KQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9CVUZGRVJJTkcpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGlmIChtb2RlKQotICAgICptb2RlID0gKEdzdEJ1ZmZlcmluZ01vZGUpCi0gICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEJVRkZFUklOR19NT0RFKSkpOwotICBpZiAoYXZnX2luKQotICAgICphdmdfaW4gPSBnX3ZhbHVlX2dldF9pbnQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEFWR19JTl9SQVRFKSkpOwotICBpZiAoYXZnX291dCkKLSAgICAqYXZnX291dCA9IGdfdmFsdWVfZ2V0X2ludCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQVZHX09VVF9SQVRFKSkpOwotICBpZiAoYnVmZmVyaW5nX2xlZnQpCi0gICAgKmJ1ZmZlcmluZ19sZWZ0ID0KLSAgICAgICAgZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEJVRkZFUklOR19MRUZUKSkpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQ6Ci0gKiBAbWVzc2FnZTogYSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQKLSAqIEBvbGRzdGF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgcHJldmlvdXMgc3RhdGUsIG9yICVOVUxMCi0gKiBAbmV3c3RhdGU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIG5ldyAoY3VycmVudCkgc3RhdGUsIG9yICVOVUxMCi0gKiBAcGVuZGluZzogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgcGVuZGluZyAodGFyZ2V0KSBzdGF0ZSwgb3IgJU5VTEwKLSAqCi0gKiBFeHRyYWN0cyB0aGUgb2xkIGFuZCBuZXcgc3RhdGVzIGZyb20gdGhlIEdzdE1lc3NhZ2UuCi0gKgotICogVHlwaWNhbCB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlOgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqICAgLi4uCi0gKiAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICogICAgIGNhc2UgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDogewotICogICAgICAgR3N0U3RhdGUgb2xkX3N0YXRlLCBuZXdfc3RhdGU7Ci0gKiAgICAgICAKLSAqICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1zZywgJmFtcDtvbGRfc3RhdGUsICZhbXA7bmV3X3N0YXRlLCBOVUxMKTsKLSAqICAgICAgIGdfcHJpbnQgKCJFbGVtZW50ICVzIGNoYW5nZWQgc3RhdGUgZnJvbSAlcyB0byAlcy5cbiIsCi0gKiAgICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChtc2ctPnNyYyksCi0gKiAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZF9zdGF0ZSksCi0gKiAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5ld19zdGF0ZSkpOwotICogICAgICAgYnJlYWs7Ci0gKiAgICAgfQotICogICAgIC4uLgotICogICB9Ci0gKiAgIC4uLgotICogXXwKLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChHc3RNZXNzYWdlICogbWVzc2FnZSwKLSAgICBHc3RTdGF0ZSAqIG9sZHN0YXRlLCBHc3RTdGF0ZSAqIG5ld3N0YXRlLCBHc3RTdGF0ZSAqIHBlbmRpbmcpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGlmIChvbGRzdGF0ZSkKLSAgICAqb2xkc3RhdGUgPSAoR3N0U3RhdGUpCi0gICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKE9MRF9TVEFURSkpKTsKLSAgaWYgKG5ld3N0YXRlKQotICAgICpuZXdzdGF0ZSA9IChHc3RTdGF0ZSkKLSAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoTkVXX1NUQVRFKSkpOwotICBpZiAocGVuZGluZykKLSAgICAqcGVuZGluZyA9IChHc3RTdGF0ZSkKLSAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoUEVORElOR19TVEFURSkpKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlOgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFLgotICogQGNsb2NrOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgdG8gIGhvbGQgYSBjbG9jawotICogICAgIG9iamVjdCwgb3IgJU5VTEwKLSAqIEByZWFkeTogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gaG9sZCB0aGUgcmVhZHkgZmxhZywgb3IgJU5VTEwKLSAqCi0gKiBFeHRyYWN0cyB0aGUgY2xvY2sgYW5kIHJlYWR5IGZsYWcgZnJvbSB0aGUgR3N0TWVzc2FnZS4KLSAqIFRoZSBjbG9jayBvYmplY3QgcmV0dXJuZWQgcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUgbWVzc2FnZSBpcyBmcmVlZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Q2xvY2sgKiogY2xvY2ssCi0gICAgZ2Jvb2xlYW4gKiByZWFkeSkKLXsKLSAgY29uc3QgR1ZhbHVlICpjbG9ja19ndmFsdWU7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGNsb2NrX2d2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQ0xPQ0spKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY2xvY2tfZ3ZhbHVlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGNsb2NrX2d2YWx1ZSkgPT0gR1NUX1RZUEVfQ0xPQ0spOwotCi0gIGlmIChyZWFkeSkKLSAgICAqcmVhZHkgPQotICAgICAgICBnX3ZhbHVlX2dldF9ib29sZWFuIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChSRUFEWSkpKTsKLSAgaWYgKGNsb2NrKQotICAgICpjbG9jayA9IChHc3RDbG9jayAqKSBnX3ZhbHVlX2dldF9vYmplY3QgKGNsb2NrX2d2YWx1ZSk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdDoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVC4KLSAqIEBjbG9jazogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBub25lKTogYSBwb2ludGVyIHRvIGhvbGQgdGhlIGxvc3QgY2xvY2sKLSAqCi0gKiBFeHRyYWN0cyB0aGUgbG9zdCBjbG9jayBmcm9tIHRoZSBHc3RNZXNzYWdlLgotICogVGhlIGNsb2NrIG9iamVjdCByZXR1cm5lZCByZW1haW5zIHZhbGlkIHVudGlsIHRoZSBtZXNzYWdlIGlzIGZyZWVkLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3QgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RDbG9jayAqKiBjbG9jaykKLXsKLSAgY29uc3QgR1ZhbHVlICpjbG9ja19ndmFsdWU7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0NMT0NLX0xPU1QpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGNsb2NrX2d2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQ0xPQ0spKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY2xvY2tfZ3ZhbHVlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGNsb2NrX2d2YWx1ZSkgPT0gR1NUX1RZUEVfQ0xPQ0spOwotCi0gIGlmIChjbG9jaykKLSAgICAqY2xvY2sgPSAoR3N0Q2xvY2sgKikgZ192YWx1ZV9nZXRfb2JqZWN0IChjbG9ja19ndmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jazoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfTkVXX0NMT0NLLgotICogQGNsb2NrOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgdG8gaG9sZCB0aGUgc2VsZWN0ZWQKLSAqICAgICBuZXcgY2xvY2sKLSAqCi0gKiBFeHRyYWN0cyB0aGUgbmV3IGNsb2NrIGZyb20gdGhlIEdzdE1lc3NhZ2UuCi0gKiBUaGUgY2xvY2sgb2JqZWN0IHJldHVybmVkIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIG1lc3NhZ2UgaXMgZnJlZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2VfbmV3X2Nsb2NrIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Q2xvY2sgKiogY2xvY2spCi17Ci0gIGNvbnN0IEdWYWx1ZSAqY2xvY2tfZ3ZhbHVlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0spOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGNsb2NrX2d2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQ0xPQ0spKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY2xvY2tfZ3ZhbHVlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGNsb2NrX2d2YWx1ZSkgPT0gR1NUX1RZUEVfQ0xPQ0spOwotCi0gIGlmIChjbG9jaykKLSAgICAqY2xvY2sgPSAoR3N0Q2xvY2sgKikgZ192YWx1ZV9nZXRfb2JqZWN0IChjbG9ja19ndmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2U6Ci0gKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UuCi0gKiBAdHlwZTogKG91dCk6IEEgcG9pbnRlciB0byBob2xkIHRoZSBjaGFuZ2UgdHlwZQotICogQG93bmVyOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBUaGUgb3duZXIgZWxlbWVudCBvZiB0aGUKLSAqICAgICBtZXNzYWdlIHNvdXJjZQotICogQGJ1c3k6IChvdXQpIChhbGxvdy1ub25lKTogYSBwb2ludGVyIHRvIGhvbGQgd2hldGhlciB0aGUgY2hhbmdlIGlzIGluCi0gKiAgICAgcHJvZ3Jlc3Mgb3IgaGFzIGJlZW4gY29tcGxldGVkCi0gKgotICogRXh0cmFjdHMgdGhlIGNoYW5nZSB0eXBlIGFuZCBjb21wbGV0aW9uIHN0YXR1cyBmcm9tIHRoZSBHc3RNZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2UgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLAotICAgIEdzdFN0cnVjdHVyZUNoYW5nZVR5cGUgKiB0eXBlLCBHc3RFbGVtZW50ICoqIG93bmVyLCBnYm9vbGVhbiAqIGJ1c3kpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqb3duZXJfZ3ZhbHVlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotICBvd25lcl9ndmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE9XTkVSKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG93bmVyX2d2YWx1ZSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19WQUxVRV9UWVBFIChvd25lcl9ndmFsdWUpID09IEdTVF9UWVBFX0VMRU1FTlQpOwotCi0gIGlmICh0eXBlKQotICAgICp0eXBlID0gKEdzdFN0cnVjdHVyZUNoYW5nZVR5cGUpCi0gICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFRZUEUpKSk7Ci0gIGlmIChvd25lcikKLSAgICAqb3duZXIgPSAoR3N0RWxlbWVudCAqKSBnX3ZhbHVlX2dldF9vYmplY3QgKG93bmVyX2d2YWx1ZSk7Ci0gIGlmIChidXN5KQotICAgICpidXN5ID0KLSAgICAgICAgZ192YWx1ZV9nZXRfYm9vbGVhbiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQlVTWSkpKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcjoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfRVJST1IuCi0gKiBAZ2Vycm9yOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBsb2NhdGlvbiBmb3IgdGhlIEdFcnJvcgotICogQGRlYnVnOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBsb2NhdGlvbiBmb3IgdGhlIGRlYnVnIG1lc3NhZ2UsCi0gKiAgICAgb3IgJU5VTEwKLSAqCi0gKiBFeHRyYWN0cyB0aGUgR0Vycm9yIGFuZCBkZWJ1ZyBzdHJpbmcgZnJvbSB0aGUgR3N0TWVzc2FnZS4gVGhlIHZhbHVlcyByZXR1cm5lZAotICogaW4gdGhlIG91dHB1dCBhcmd1bWVudHMgYXJlIGNvcGllczsgdGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlbSB3aGVuIGRvbmUuCi0gKgotICogVHlwaWNhbCB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlOgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqICAgLi4uCi0gKiAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICogICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKLSAqICAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAqICAgICAgIGdjaGFyICpkYmdfaW5mbyA9IE5VTEw7Ci0gKiAgICAgICAKLSAqICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZhbXA7ZXJyLCAmYW1wO2RiZ19pbmZvKTsKLSAqICAgICAgIGdfcHJpbnRlcnIgKCJFUlJPUiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iLAotICogICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAobXNnLT5zcmMpLCBlcnItPm1lc3NhZ2UpOwotICogICAgICAgZ19wcmludGVyciAoIkRlYnVnZ2luZyBpbmZvOiAlc1xuIiwgKGRiZ19pbmZvKSA/IGRiZ19pbmZvIDogIm5vbmUiKTsKLSAqICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAqICAgICAgIGdfZnJlZSAoZGJnX2luZm8pOwotICogICAgICAgYnJlYWs7Ci0gKiAgICAgfQotICogICAgIC4uLgotICogICB9Ci0gKiAgIC4uLgotICogXXwKLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdFcnJvciAqKiBnZXJyb3IsIGdjaGFyICoqIGRlYnVnKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FUlJPUik7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSksCi0gICAgICBHU1RfUVVBUksgKEdFUlJPUiksIEdfVFlQRV9FUlJPUiwgZ2Vycm9yLAotICAgICAgR1NUX1FVQVJLIChERUJVRyksIEdfVFlQRV9TVFJJTkcsIGRlYnVnLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nOgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9XQVJOSU5HLgotICogQGdlcnJvcjogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSBHRXJyb3IKLSAqIEBkZWJ1ZzogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSBkZWJ1ZyBtZXNzYWdlLAotICogICAgIG9yICVOVUxMCi0gKgotICogRXh0cmFjdHMgdGhlIEdFcnJvciBhbmQgZGVidWcgc3RyaW5nIGZyb20gdGhlIEdzdE1lc3NhZ2UuIFRoZSB2YWx1ZXMgcmV0dXJuZWQKLSAqIGluIHRoZSBvdXRwdXQgYXJndW1lbnRzIGFyZSBjb3BpZXM7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZW0gd2hlbiBkb25lLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHRXJyb3IgKiogZ2Vycm9yLAotICAgIGdjaGFyICoqIGRlYnVnKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9XQVJOSU5HKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKSwKLSAgICAgIEdTVF9RVUFSSyAoR0VSUk9SKSwgR19UWVBFX0VSUk9SLCBnZXJyb3IsCi0gICAgICBHU1RfUVVBUksgKERFQlVHKSwgR19UWVBFX1NUUklORywgZGVidWcsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX2luZm86Ci0gKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX0lORk8uCi0gKiBAZ2Vycm9yOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBsb2NhdGlvbiBmb3IgdGhlIEdFcnJvcgotICogQGRlYnVnOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBsb2NhdGlvbiBmb3IgdGhlIGRlYnVnIG1lc3NhZ2UsCi0gKiAgICAgb3IgJU5VTEwKLSAqCi0gKiBFeHRyYWN0cyB0aGUgR0Vycm9yIGFuZCBkZWJ1ZyBzdHJpbmcgZnJvbSB0aGUgR3N0TWVzc2FnZS4gVGhlIHZhbHVlcyByZXR1cm5lZAotICogaW4gdGhlIG91dHB1dCBhcmd1bWVudHMgYXJlIGNvcGllczsgdGhlIGNhbGxlciBtdXN0IGZyZWUgdGhlbSB3aGVuIGRvbmUuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdFcnJvciAqKiBnZXJyb3IsIGdjaGFyICoqIGRlYnVnKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9JTkZPKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKSwKLSAgICAgIEdTVF9RVUFSSyAoR0VSUk9SKSwgR19UWVBFX0VSUk9SLCBnZXJyb3IsCi0gICAgICBHU1RfUVVBUksgKERFQlVHKSwgR19UWVBFX1NUUklORywgZGVidWcsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfc3RhcnQ6Ci0gKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQuCi0gKiBAZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGZvcm1hdCwgb3IgJU5VTEwKLSAqIEBwb3NpdGlvbjogKG91dCkgKGFsbG93LW5vbmUpOiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBwb3NpdGlvbiwgb3IgJU5VTEwKLSAqCi0gKiBFeHRyYWN0cyB0aGUgcG9zaXRpb24gYW5kIGZvcm1hdCBmcm9tIHRoZSBzZWdtZW50IHN0YXJ0IG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydCAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEZvcm1hdCAqIGZvcm1hdCwKLSAgICBnaW50NjQgKiBwb3NpdGlvbikKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKLSAgaWYgKGZvcm1hdCkKLSAgICAqZm9ybWF0ID0gKEdzdEZvcm1hdCkKLSAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOwotICBpZiAocG9zaXRpb24pCi0gICAgKnBvc2l0aW9uID0KLSAgICAgICAgZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFBPU0lUSU9OKSkpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX3NlZ21lbnRfZG9uZToKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FLgotICogQGZvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBmb3JtYXQsIG9yICVOVUxMCi0gKiBAcG9zaXRpb246IChvdXQpIChhbGxvdy1ub25lKTogUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24sIG9yICVOVUxMCi0gKgotICogRXh0cmFjdHMgdGhlIHBvc2l0aW9uIGFuZCBmb3JtYXQgZnJvbSB0aGUgc2VnbWVudCBkb25lIG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Rm9ybWF0ICogZm9ybWF0LAotICAgIGdpbnQ2NCAqIHBvc2l0aW9uKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGlmIChmb3JtYXQpCi0gICAgKmZvcm1hdCA9IChHc3RGb3JtYXQpCi0gICAgICAgIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKTsKLSAgaWYgKHBvc2l0aW9uKQotICAgICpwb3NpdGlvbiA9Ci0gICAgICAgIGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChQT1NJVElPTikpKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9hc3luY19kb25lOgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9BU1lOQ19ET05FLgotICogQHJ1bm5pbmdfdGltZTogKG91dCkgKGFsbG93LW5vbmUpOiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBydW5uaW5nX3RpbWUgb3IgJU5VTEwKLSAqCi0gKiBFeHRyYWN0IHRoZSBydW5uaW5nX3RpbWUgZnJvbSB0aGUgYXN5bmNfZG9uZSBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX2FzeW5jX2RvbmUgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RDbG9ja1RpbWUgKiBydW5uaW5nX3RpbWUpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGlmIChydW5uaW5nX3RpbWUpCi0gICAgKnJ1bm5pbmdfdGltZSA9Ci0gICAgICAgIGdfdmFsdWVfZ2V0X3VpbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoUlVOTklOR19USU1FKSkpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGU6Ci0gKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUuCi0gKiBAc3RhdGU6IChvdXQpIChhbGxvdy1ub25lKTogUmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgcmVxdWVzdGVkIHN0YXRlIG9yICVOVUxMCi0gKgotICogRXh0cmFjdCB0aGUgcmVxdWVzdGVkIHN0YXRlIGZyb20gdGhlIHJlcXVlc3Rfc3RhdGUgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0U3RhdGUgKiBzdGF0ZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKLSAgaWYgKHN0YXRlKQotICAgICpzdGF0ZSA9IChHc3RTdGF0ZSkKLSAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoTkVXX1NUQVRFKSkpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzOgotICogQHNyYzogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEB0eXBlOiBUaGUgc3RyZWFtIHN0YXR1cyB0eXBlLgotICogQG93bmVyOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBvd25lciBlbGVtZW50IG9mIEBzcmMuCi0gKgotICogQ3JlYXRlIGEgbmV3IHN0cmVhbSBzdGF0dXMgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIGEgc3RyZWFtaW5nCi0gKiB0aHJlYWQgaXMgY3JlYXRlZC9kZXN0cm95ZWQgb3Igd2hlbiB0aGUgc3RhdGUgY2hhbmdlZC4KLSAqIAotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHN0cmVhbSBzdGF0dXMgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cmVhbVN0YXR1c1R5cGUgdHlwZSwKLSAgICBHc3RFbGVtZW50ICogb3duZXIpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKE1FU1NBR0VfU1RSRUFNX1NUQVRVUyksCi0gICAgICBHU1RfUVVBUksgKFRZUEUpLCBHU1RfVFlQRV9TVFJFQU1fU1RBVFVTX1RZUEUsIChnaW50KSB0eXBlLAotICAgICAgR1NUX1FVQVJLIChPV05FUiksIEdTVF9UWVBFX0VMRU1FTlQsIG93bmVyLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMsIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzOgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLgotICogQHR5cGU6IChvdXQpOiBBIHBvaW50ZXIgdG8gaG9sZCB0aGUgc3RhdHVzIHR5cGUKLSAqIEBvd25lcjogKG91dCkgKHRyYW5zZmVyIG5vbmUpOiBUaGUgb3duZXIgZWxlbWVudCBvZiB0aGUgbWVzc2FnZSBzb3VyY2UKLSAqCi0gKiBFeHRyYWN0cyB0aGUgc3RyZWFtIHN0YXR1cyB0eXBlIGFuZCBvd25lciB0aGUgR3N0TWVzc2FnZS4gVGhlIHJldHVybmVkCi0gKiBvd25lciByZW1haW5zIHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZSByZWZlcmVuY2UgdG8gQG1lc3NhZ2UgaXMgdmFsaWQgYW5kCi0gKiBzaG91bGQgdGh1cyBub3QgYmUgdW5yZWZmZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX3N0YXR1cyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCi0gICAgR3N0U3RyZWFtU3RhdHVzVHlwZSAqIHR5cGUsIEdzdEVsZW1lbnQgKiogb3duZXIpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqb3duZXJfZ3ZhbHVlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotICBvd25lcl9ndmFsdWUgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE9XTkVSKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG93bmVyX2d2YWx1ZSAhPSBOVUxMKTsKLQotICBpZiAodHlwZSkKLSAgICAqdHlwZSA9IChHc3RTdHJlYW1TdGF0dXNUeXBlKQotICAgICAgICBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChUWVBFKSkpOwotICBpZiAob3duZXIpCi0gICAgKm93bmVyID0gKEdzdEVsZW1lbnQgKikgZ192YWx1ZV9nZXRfb2JqZWN0IChvd25lcl9ndmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdDoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUy4KLSAqIEBvYmplY3Q6IHRoZSBvYmplY3QgY29udHJvbGxpbmcgdGhlIHN0cmVhbWluZwotICoKLSAqIENvbmZpZ3VyZXMgdGhlIG9iamVjdCBoYW5kbGluZyB0aGUgc3RyZWFtaW5nIHRocmVhZC4gVGhpcyBpcyB1c3VhbGx5IGEKLSAqIEdzdFRhc2sgb2JqZWN0IGJ1dCBvdGhlciBvYmplY3RzIG1pZ2h0IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdCAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCi0gICAgY29uc3QgR1ZhbHVlICogb2JqZWN0KQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE9CSkVDVCksIG9iamVjdCk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0OgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLgotICoKLSAqIEV4dHJhY3RzIHRoZSBvYmplY3QgbWFuYWdpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQgZnJvbSBAbWVzc2FnZS4KLSAqCi0gKiBSZXR1cm5zOiBhIEdWYWx1ZSBjb250YWluaW5nIHRoZSBvYmplY3QgdGhhdCBtYW5hZ2VzIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgotICogVGhpcyBvYmplY3QgaXMgdXN1YWxseSBvZiB0eXBlIEdzdFRhc2sgYnV0IG90aGVyIHR5cGVzIGNhbiBiZSBhZGRlZCBpbiB0aGUKLSAqIGZ1dHVyZS4gVGhlIG9iamVjdCByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMgQG1lc3NhZ2UgaXMgdmFsaWQuCi0gKi8KLWNvbnN0IEdWYWx1ZSAqCi1nc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBjb25zdCBHVmFsdWUgKnJlc3VsdDsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLAotICAgICAgTlVMTCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKLSAgcmVzdWx0ID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChPQkpFQ1QpKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmU6Ci0gKiBAc3JjOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiBAYW1vdW50Ci0gKiBAYW1vdW50OiB0aGUgYW1vdW50IG9mIHN0ZXBwZWQgZGF0YQotICogQHJhdGU6IHRoZSByYXRlIG9mIHRoZSBzdGVwcGVkIGFtb3VudAotICogQGZsdXNoOiBpcyB0aGlzIGFuIGZsdXNoaW5nIHN0ZXAKLSAqIEBpbnRlcm1lZGlhdGU6IGlzIHRoaXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAKLSAqIEBkdXJhdGlvbjogdGhlIGR1cmF0aW9uIG9mIHRoZSBkYXRhCi0gKiBAZW9zOiB0aGUgc3RlcCBjYXVzZWQgRU9TCi0gKgotICogVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZXkgY29tcGxldGUgYSBwYXJ0LCB3aGVuIEBpbnRlcm1lZGlhdGUgc2V0Ci0gKiB0byAlVFJVRSwgb3IgYSBjb21wbGV0ZSBzdGVwIG9wZXJhdGlvbi4KLSAqCi0gKiBAZHVyYXRpb24gd2lsbCBjb250YWluIHRoZSBhbW91bnQgb2YgdGltZSAoaW4gR1NUX0ZPUk1BVF9USU1FKSBvZiB0aGUgc3RlcHBlZAotICogQGFtb3VudCBvZiBtZWRpYSBpbiBmb3JtYXQgQGZvcm1hdC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgc3RlcF9kb25lIG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lIChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgYW1vdW50LAotICAgIGdkb3VibGUgcmF0ZSwgZ2Jvb2xlYW4gZmx1c2gsIGdib29sZWFuIGludGVybWVkaWF0ZSwgZ3VpbnQ2NCBkdXJhdGlvbiwKLSAgICBnYm9vbGVhbiBlb3MpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKE1FU1NBR0VfU1RFUF9ET05FKSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKEFNT1VOVCksIEdfVFlQRV9VSU5UNjQsIGFtb3VudCwKLSAgICAgIEdTVF9RVUFSSyAoUkFURSksIEdfVFlQRV9ET1VCTEUsIHJhdGUsCi0gICAgICBHU1RfUVVBUksgKEZMVVNIKSwgR19UWVBFX0JPT0xFQU4sIGZsdXNoLAotICAgICAgR1NUX1FVQVJLIChJTlRFUk1FRElBVEUpLCBHX1RZUEVfQk9PTEVBTiwgaW50ZXJtZWRpYXRlLAotICAgICAgR1NUX1FVQVJLIChEVVJBVElPTiksIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLAotICAgICAgR1NUX1FVQVJLIChFT1MpLCBHX1RZUEVfQk9PTEVBTiwgZW9zLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1NURVBfRE9ORSwgc3JjLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX3N0ZXBfZG9uZToKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfU1RFUF9ET05FLgotICogQGZvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBmb3JtYXQKLSAqIEBhbW91bnQ6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgYW1vdW50Ci0gKiBAcmF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSByYXRlCi0gKiBAZmx1c2g6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZmx1c2ggZmxhZwotICogQGludGVybWVkaWF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBpbnRlcm1lZGlhdGUgZmxhZwotICogQGR1cmF0aW9uOiAob3V0KSAoYWxsb3ctbm9uZSk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIGR1cmF0aW9uCi0gKiBAZW9zOiAob3V0KSAoYWxsb3ctbm9uZSk6IHJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlIEVPUyBmbGFnCi0gKgotICogRXh0cmFjdCB0aGUgdmFsdWVzIHRoZSBzdGVwX2RvbmUgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmUgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RGb3JtYXQgKiBmb3JtYXQsCi0gICAgZ3VpbnQ2NCAqIGFtb3VudCwgZ2RvdWJsZSAqIHJhdGUsIGdib29sZWFuICogZmx1c2gsIGdib29sZWFuICogaW50ZXJtZWRpYXRlLAotICAgIGd1aW50NjQgKiBkdXJhdGlvbiwgZ2Jvb2xlYW4gKiBlb3MpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NURVBfRE9ORSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKEFNT1VOVCksIEdfVFlQRV9VSU5UNjQsIGFtb3VudCwKLSAgICAgIEdTVF9RVUFSSyAoUkFURSksIEdfVFlQRV9ET1VCTEUsIHJhdGUsCi0gICAgICBHU1RfUVVBUksgKEZMVVNIKSwgR19UWVBFX0JPT0xFQU4sIGZsdXNoLAotICAgICAgR1NUX1FVQVJLIChJTlRFUk1FRElBVEUpLCBHX1RZUEVfQk9PTEVBTiwgaW50ZXJtZWRpYXRlLAotICAgICAgR1NUX1FVQVJLIChEVVJBVElPTiksIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLAotICAgICAgR1NUX1FVQVJLIChFT1MpLCBHX1RZUEVfQk9PTEVBTiwgZW9zLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfc3RlcF9zdGFydDoKLSAqIEBzcmM6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAYWN0aXZlOiBpZiB0aGUgc3RlcCBpcyBhY3RpdmUgb3IgcXVldWVkCi0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIEBhbW91bnQKLSAqIEBhbW91bnQ6IHRoZSBhbW91bnQgb2Ygc3RlcHBlZCBkYXRhCi0gKiBAcmF0ZTogdGhlIHJhdGUgb2YgdGhlIHN0ZXBwZWQgYW1vdW50Ci0gKiBAZmx1c2g6IGlzIHRoaXMgYW4gZmx1c2hpbmcgc3RlcAotICogQGludGVybWVkaWF0ZTogaXMgdGhpcyBhbiBpbnRlcm1lZGlhdGUgc3RlcAotICoKLSAqIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IGFjY2VwdCBvciBhY3RpdmF0ZSBhIG5ldyBzdGVwCi0gKiBldmVudCBmb3IgQGFtb3VudCBpbiBAZm9ybWF0LiAKLSAqCi0gKiBAYWN0aXZlIGlzIHNldCB0byAlRkFMU0Ugd2hlbiB0aGUgZWxlbWVudCBhY2NlcHRlZCB0aGUgbmV3IHN0ZXAgZXZlbnQgYW5kIGhhcwotICogcXVldWVkIGl0IGZvciBleGVjdXRpb24gaW4gdGhlIHN0cmVhbWluZyB0aHJlYWRzLgotICoKLSAqIEBhY3RpdmUgaXMgc2V0IHRvICVUUlVFIHdoZW4gdGhlIGVsZW1lbnQgaGFzIGFjdGl2YXRlZCB0aGUgc3RlcCBvcGVyYXRpb24gYW5kCi0gKiBpcyBub3cgcmVhZHkgdG8gc3RhcnQgZXhlY3V0aW5nIHRoZSBzdGVwIGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkLiBBZnRlciB0aGlzCi0gKiBtZXNzYWdlIGlzIGVtaXR0ZWQsIHRoZSBhcHBsaWNhdGlvbiBjYW4gcXVldWUgYSBuZXcgc3RlcCBvcGVyYXRpb24gaW4gdGhlCi0gKiBlbGVtZW50LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBzdGVwX3N0YXJ0IG1lc3NhZ2UuIAotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X3N0ZXBfc3RhcnQgKEdzdE9iamVjdCAqIHNyYywgZ2Jvb2xlYW4gYWN0aXZlLCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIGd1aW50NjQgYW1vdW50LCBnZG91YmxlIHJhdGUsIGdib29sZWFuIGZsdXNoLCBnYm9vbGVhbiBpbnRlcm1lZGlhdGUpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKE1FU1NBR0VfU1RFUF9TVEFSVCksCi0gICAgICBHU1RfUVVBUksgKEFDVElWRSksIEdfVFlQRV9CT09MRUFOLCBhY3RpdmUsCi0gICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChBTU9VTlQpLCBHX1RZUEVfVUlOVDY0LCBhbW91bnQsCi0gICAgICBHU1RfUVVBUksgKFJBVEUpLCBHX1RZUEVfRE9VQkxFLCByYXRlLAotICAgICAgR1NUX1FVQVJLIChGTFVTSCksIEdfVFlQRV9CT09MRUFOLCBmbHVzaCwKLSAgICAgIEdTVF9RVUFSSyAoSU5URVJNRURJQVRFKSwgR19UWVBFX0JPT0xFQU4sIGludGVybWVkaWF0ZSwgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9TVEVQX1NUQVJULCBzcmMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9zdGFydDoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfU1RFUF9ET05FLgotICogQGFjdGl2ZTogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBhY3RpdmUgZmxhZwotICogQGZvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBmb3JtYXQKLSAqIEBhbW91bnQ6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgYW1vdW50Ci0gKiBAcmF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSByYXRlCi0gKiBAZmx1c2g6IChvdXQpIChhbGxvdy1ub25lKTogcmVzdWx0IGxvY2F0aW9uIGZvciB0aGUgZmx1c2ggZmxhZwotICogQGludGVybWVkaWF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiByZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBpbnRlcm1lZGlhdGUgZmxhZwotICoKLSAqIEV4dHJhY3QgdGhlIHZhbHVlcyBmcm9tIHN0ZXBfc3RhcnQgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0IChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2Jvb2xlYW4gKiBhY3RpdmUsCi0gICAgR3N0Rm9ybWF0ICogZm9ybWF0LCBndWludDY0ICogYW1vdW50LCBnZG91YmxlICogcmF0ZSwgZ2Jvb2xlYW4gKiBmbHVzaCwKLSAgICBnYm9vbGVhbiAqIGludGVybWVkaWF0ZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RFUF9TVEFSVCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoQUNUSVZFKSwgR19UWVBFX0JPT0xFQU4sIGFjdGl2ZSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKEFNT1VOVCksIEdfVFlQRV9VSU5UNjQsIGFtb3VudCwKLSAgICAgIEdTVF9RVUFSSyAoUkFURSksIEdfVFlQRV9ET1VCTEUsIHJhdGUsCi0gICAgICBHU1RfUVVBUksgKEZMVVNIKSwgR19UWVBFX0JPT0xFQU4sIGZsdXNoLAotICAgICAgR1NUX1FVQVJLIChJTlRFUk1FRElBVEUpLCBHX1RZUEVfQk9PTEVBTiwgaW50ZXJtZWRpYXRlLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfcW9zOgotICogQHNyYzogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBsaXZlOiBpZiB0aGUgbWVzc2FnZSB3YXMgZ2VuZXJhdGVkIGJ5IGEgbGl2ZSBlbGVtZW50Ci0gKiBAcnVubmluZ190aW1lOiB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKLSAqIEBzdHJlYW1fdGltZTogdGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKLSAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKLSAqIEBkdXJhdGlvbjogdGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIgdGhhdCBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKLSAqCi0gKiBBIFFPUyBtZXNzYWdlIGlzIHBvc3RlZCBvbiB0aGUgYnVzIHdoZW5ldmVyIGFuIGVsZW1lbnQgZGVjaWRlcyB0byBkcm9wIGEKLSAqIGJ1ZmZlciBiZWNhdXNlIG9mIFFvUyByZWFzb25zIG9yIHdoZW5ldmVyIGl0IGNoYW5nZXMgaXRzIHByb2Nlc3Npbmcgc3RyYXRlZ3kKLSAqIGJlY2F1c2Ugb2YgUW9TIHJlYXNvbnMgKHF1YWxpdHkgYWRqdXN0bWVudHMgc3VjaCBhcyBwcm9jZXNzaW5nIGF0IGxvd2VyCi0gKiBhY2N1cmFjeSkuCi0gKgotICogVGhpcyBtZXNzYWdlIGNhbiBiZSBwb3N0ZWQgYnkgYW4gZWxlbWVudCB0aGF0IHBlcmZvcm1zIHN5bmNocm9uaXNhdGlvbiBhZ2FpbnN0IHRoZQotICogY2xvY2sgKGxpdmUpIG9yIGl0IGNvdWxkIGJlIGRyb3BwZWQgYnkgYW4gZWxlbWVudCB0aGF0IHBlcmZvcm1zIFFvUyBiZWNhdXNlIG9mIFFPUwotICogZXZlbnRzIHJlY2VpdmVkIGZyb20gYSBkb3duc3RyZWFtIGVsZW1lbnQgKCFsaXZlKS4KLSAqCi0gKiBAcnVubmluZ190aW1lLCBAc3RyZWFtX3RpbWUsIEB0aW1lc3RhbXAsIEBkdXJhdGlvbiBzaG91bGQgYmUgc2V0IHRvIHRoZQotICogcmVzcGVjdGl2ZSBydW5uaW5nLXRpbWUsIHN0cmVhbS10aW1lLCB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uIG9mIHRoZSAoZHJvcHBlZCkKLSAqIGJ1ZmZlciB0aGF0IGdlbmVyYXRlZCB0aGUgUW9TIGV2ZW50LiBWYWx1ZXMgY2FuIGJlIGxlZnQgdG8KLSAqIEdTVF9DTE9DS19USU1FX05PTkUgd2hlbiB1bmtub3duLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBxb3MgbWVzc2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19xb3MgKEdzdE9iamVjdCAqIHNyYywgZ2Jvb2xlYW4gbGl2ZSwgZ3VpbnQ2NCBydW5uaW5nX3RpbWUsCi0gICAgZ3VpbnQ2NCBzdHJlYW1fdGltZSwgZ3VpbnQ2NCB0aW1lc3RhbXAsIGd1aW50NjQgZHVyYXRpb24pCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKE1FU1NBR0VfUU9TKSwKLSAgICAgIEdTVF9RVUFSSyAoTElWRSksIEdfVFlQRV9CT09MRUFOLCBsaXZlLAotICAgICAgR1NUX1FVQVJLIChSVU5OSU5HX1RJTUUpLCBHX1RZUEVfVUlOVDY0LCBydW5uaW5nX3RpbWUsCi0gICAgICBHU1RfUVVBUksgKFNUUkVBTV9USU1FKSwgR19UWVBFX1VJTlQ2NCwgc3RyZWFtX3RpbWUsCi0gICAgICBHU1RfUVVBUksgKFRJTUVTVEFNUCksIEdfVFlQRV9VSU5UNjQsIHRpbWVzdGFtcCwKLSAgICAgIEdTVF9RVUFSSyAoRFVSQVRJT04pLCBHX1RZUEVfVUlOVDY0LCBkdXJhdGlvbiwKLSAgICAgIEdTVF9RVUFSSyAoSklUVEVSKSwgR19UWVBFX0lOVDY0LCAoZ2ludDY0KSAwLAotICAgICAgR1NUX1FVQVJLIChQUk9QT1JUSU9OKSwgR19UWVBFX0RPVUJMRSwgKGdkb3VibGUpIDEuMCwKLSAgICAgIEdTVF9RVUFSSyAoUVVBTElUWSksIEdfVFlQRV9JTlQsIChnaW50KSAxMDAwMDAwLAotICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIEdTVF9GT1JNQVRfVU5ERUZJTkVELAotICAgICAgR1NUX1FVQVJLIChQUk9DRVNTRUQpLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgLSAxLAotICAgICAgR1NUX1FVQVJLIChEUk9QUEVEKSwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIC0gMSwgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9RT1MsIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlczoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfUU9TLgotICogQGppdHRlcjogVGhlIGRpZmZlcmVuY2Ugb2YgdGhlIHJ1bm5pbmctdGltZSBhZ2FpbnN0IHRoZSBkZWFkbGluZS4KLSAqIEBwcm9wb3J0aW9uOiBMb25nIHRlcm0gcHJlZGljdGlvbiBvZiB0aGUgaWRlYWwgcmF0ZSByZWxhdGl2ZSB0byBub3JtYWwgcmF0ZQotICogdG8gZ2V0IG9wdGltYWwgcXVhbGl0eS4KLSAqIEBxdWFsaXR5OiBBbiBlbGVtZW50IGRlcGVuZGVudCBpbnRlZ2VyIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHRoZSBjdXJyZW50Ci0gKiBxdWFsaXR5IGxldmVsIG9mIHRoZSBlbGVtZW50LiBUaGUgZGVmYXVsdCBtYXhpbXVtIHF1YWxpdHkgaXMgMTAwMDAwMC4KLSAqCi0gKiBTZXQgdGhlIFFvUyB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gY2FsY3VsYXRlZC9hbmFseXNlZCBmcm9tIHRoZSBRb1MgZGF0YQotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzIChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2ludDY0IGppdHRlciwKLSAgICBnZG91YmxlIHByb3BvcnRpb24sIGdpbnQgcXVhbGl0eSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUU9TKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChKSVRURVIpLCBHX1RZUEVfSU5UNjQsIGppdHRlciwKLSAgICAgIEdTVF9RVUFSSyAoUFJPUE9SVElPTiksIEdfVFlQRV9ET1VCTEUsIHByb3BvcnRpb24sCi0gICAgICBHU1RfUVVBUksgKFFVQUxJVFkpLCBHX1RZUEVfSU5ULCBxdWFsaXR5LCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9zZXRfcW9zX3N0YXRzOgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9RT1MuCi0gKiBAZm9ybWF0OiBVbml0cyBvZiB0aGUgJ3Byb2Nlc3NlZCcgYW5kICdkcm9wcGVkJyBmaWVsZHMuIFZpZGVvIHNpbmtzIGFuZCB2aWRlbwotICogZmlsdGVycyB3aWxsIHVzZSBHU1RfRk9STUFUX0JVRkZFUlMgKGZyYW1lcykuIEF1ZGlvIHNpbmtzIGFuZCBhdWRpbyBmaWx0ZXJzCi0gKiB3aWxsIGxpa2VseSB1c2UgR1NUX0ZPUk1BVF9ERUZBVUxUIChzYW1wbGVzKS4KLSAqIEBwcm9jZXNzZWQ6IFRvdGFsIG51bWJlciBvZiB1bml0cyBjb3JyZWN0bHkgcHJvY2Vzc2VkIHNpbmNlIHRoZSBsYXN0IHN0YXRlCi0gKiBjaGFuZ2UgdG8gUkVBRFkgb3IgYSBmbHVzaGluZyBvcGVyYXRpb24uCi0gKiBAZHJvcHBlZDogVG90YWwgbnVtYmVyIG9mIHVuaXRzIGRyb3BwZWQgc2luY2UgdGhlIGxhc3Qgc3RhdGUgY2hhbmdlIHRvIFJFQURZCi0gKiBvciBhIGZsdXNoaW5nIG9wZXJhdGlvbi4KLSAqCi0gKiBTZXQgdGhlIFFvUyBzdGF0cyByZXByZXNlbnRpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIGN1cnJlbnQgY29udGludW91cyBwaXBlbGluZQotICogcGxheWJhY2sgcGVyaW9kLgotICoKLSAqIFdoZW4gQGZvcm1hdCBpcyBAR1NUX0ZPUk1BVF9VTkRFRklORUQgYm90aCBAZHJvcHBlZCBhbmQgQHByb2Nlc3NlZCBhcmUKLSAqIGludmFsaWQuIFZhbHVlcyBvZiAtMSBmb3IgZWl0aGVyIEBwcm9jZXNzZWQgb3IgQGRyb3BwZWQgbWVhbiB1bmtub3duIHZhbHVlcy4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9zZXRfcW9zX3N0YXRzIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Rm9ybWF0IGZvcm1hdCwKLSAgICBndWludDY0IHByb2Nlc3NlZCwgZ3VpbnQ2NCBkcm9wcGVkKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9RT1MpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChQUk9DRVNTRUQpLCBHX1RZUEVfVUlOVDY0LCBwcm9jZXNzZWQsCi0gICAgICBHU1RfUVVBUksgKERST1BQRUQpLCBHX1RZUEVfVUlOVDY0LCBkcm9wcGVkLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9xb3M6Ci0gKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1FPUy4KLSAqIEBsaXZlOiAob3V0KSAoYWxsb3ctbm9uZSk6IGlmIHRoZSBtZXNzYWdlIHdhcyBnZW5lcmF0ZWQgYnkgYSBsaXZlIGVsZW1lbnQKLSAqIEBydW5uaW5nX3RpbWU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHJ1bm5pbmcgdGltZSBvZiB0aGUgYnVmZmVyIHRoYXQKLSAqICAgICBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKLSAqIEBzdHJlYW1fdGltZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RyZWFtIHRpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0Ci0gKiAgICAgZ2VuZXJhdGVkIHRoZSBtZXNzYWdlCi0gKiBAdGltZXN0YW1wOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXIgdGhhdAotICogICAgIGdlbmVyYXRlZCB0aGUgbWVzc2FnZQotICogQGR1cmF0aW9uOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIHRoYXQKLSAqICAgICBnZW5lcmF0ZWQgdGhlIG1lc3NhZ2UKLSAqCi0gKiBFeHRyYWN0IHRoZSB0aW1lc3RhbXBzIGFuZCBsaXZlIHN0YXR1cyBmcm9tIHRoZSBRb1MgbWVzc2FnZS4KLSAqCi0gKiBUaGUgcmV0dXJuZWQgdmFsdWVzIGdpdmUgdGhlIHJ1bm5pbmdfdGltZSwgc3RyZWFtX3RpbWUsIHRpbWVzdGFtcCBhbmQKLSAqIGR1cmF0aW9uIG9mIHRoZSBkcm9wcGVkIGJ1ZmZlci4gVmFsdWVzIG9mIEdTVF9DTE9DS19USU1FX05PTkUgbWVhbiB1bmtub3duCi0gKiB2YWx1ZXMuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2VfcW9zIChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2Jvb2xlYW4gKiBsaXZlLAotICAgIGd1aW50NjQgKiBydW5uaW5nX3RpbWUsIGd1aW50NjQgKiBzdHJlYW1fdGltZSwgZ3VpbnQ2NCAqIHRpbWVzdGFtcCwKLSAgICBndWludDY0ICogZHVyYXRpb24pCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1FPUyk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoTElWRSksIEdfVFlQRV9CT09MRUFOLCBsaXZlLAotICAgICAgR1NUX1FVQVJLIChSVU5OSU5HX1RJTUUpLCBHX1RZUEVfVUlOVDY0LCBydW5uaW5nX3RpbWUsCi0gICAgICBHU1RfUVVBUksgKFNUUkVBTV9USU1FKSwgR19UWVBFX1VJTlQ2NCwgc3RyZWFtX3RpbWUsCi0gICAgICBHU1RfUVVBUksgKFRJTUVTVEFNUCksIEdfVFlQRV9VSU5UNjQsIHRpbWVzdGFtcCwKLSAgICAgIEdTVF9RVUFSSyAoRFVSQVRJT04pLCBHX1RZUEVfVUlOVDY0LCBkdXJhdGlvbiwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlczoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfUU9TLgotICogQGppdHRlcjogKG91dCkgKGFsbG93LW5vbmUpOiBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgcnVubmluZy10aW1lIGFnYWluc3QKLSAqICAgICB0aGUgZGVhZGxpbmUuCi0gKiBAcHJvcG9ydGlvbjogKG91dCkgKGFsbG93LW5vbmUpOiBMb25nIHRlcm0gcHJlZGljdGlvbiBvZiB0aGUgaWRlYWwgcmF0ZQotICogICAgIHJlbGF0aXZlIHRvIG5vcm1hbCByYXRlIHRvIGdldCBvcHRpbWFsIHF1YWxpdHkuCi0gKiBAcXVhbGl0eTogKG91dCkgKGFsbG93LW5vbmUpOiBBbiBlbGVtZW50IGRlcGVuZGVudCBpbnRlZ2VyIHZhbHVlIHRoYXQKLSAqICAgICBzcGVjaWZpZXMgdGhlIGN1cnJlbnQgcXVhbGl0eSBsZXZlbCBvZiB0aGUgZWxlbWVudC4gVGhlIGRlZmF1bHQKLSAqICAgICBtYXhpbXVtIHF1YWxpdHkgaXMgMTAwMDAwMC4KLSAqCi0gKiBFeHRyYWN0IHRoZSBRb1MgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQvYW5hbHlzZWQgZnJvbSB0aGUgUW9TIGRhdGEKLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzIChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2ludDY0ICogaml0dGVyLAotICAgIGdkb3VibGUgKiBwcm9wb3J0aW9uLCBnaW50ICogcXVhbGl0eSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUU9TKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChKSVRURVIpLCBHX1RZUEVfSU5UNjQsIGppdHRlciwKLSAgICAgIEdTVF9RVUFSSyAoUFJPUE9SVElPTiksIEdfVFlQRV9ET1VCTEUsIHByb3BvcnRpb24sCi0gICAgICBHU1RfUVVBUksgKFFVQUxJVFkpLCBHX1RZUEVfSU5ULCBxdWFsaXR5LCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHM6Ci0gKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1FPUy4KLSAqIEBmb3JtYXQ6IChvdXQpIChhbGxvdy1ub25lKTogVW5pdHMgb2YgdGhlICdwcm9jZXNzZWQnIGFuZCAnZHJvcHBlZCcgZmllbGRzLgotICogICAgIFZpZGVvIHNpbmtzIGFuZCB2aWRlbyBmaWx0ZXJzIHdpbGwgdXNlIEdTVF9GT1JNQVRfQlVGRkVSUyAoZnJhbWVzKS4KLSAqICAgICBBdWRpbyBzaW5rcyBhbmQgYXVkaW8gZmlsdGVycyB3aWxsIGxpa2VseSB1c2UgR1NUX0ZPUk1BVF9ERUZBVUxUCi0gKiAgICAgKHNhbXBsZXMpLgotICogQHByb2Nlc3NlZDogKG91dCkgKGFsbG93LW5vbmUpOiBUb3RhbCBudW1iZXIgb2YgdW5pdHMgY29ycmVjdGx5IHByb2Nlc3NlZAotICogICAgIHNpbmNlIHRoZSBsYXN0IHN0YXRlIGNoYW5nZSB0byBSRUFEWSBvciBhIGZsdXNoaW5nIG9wZXJhdGlvbi4KLSAqIEBkcm9wcGVkOiAob3V0KSAoYWxsb3ctbm9uZSk6IFRvdGFsIG51bWJlciBvZiB1bml0cyBkcm9wcGVkIHNpbmNlIHRoZSBsYXN0Ci0gKiAgICAgc3RhdGUgY2hhbmdlIHRvIFJFQURZIG9yIGEgZmx1c2hpbmcgb3BlcmF0aW9uLgotICoKLSAqIEV4dHJhY3QgdGhlIFFvUyBzdGF0cyByZXByZXNlbnRpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIGN1cnJlbnQgY29udGludW91cwotICogcGlwZWxpbmUgcGxheWJhY2sgcGVyaW9kLgotICoKLSAqIFdoZW4gQGZvcm1hdCBpcyBAR1NUX0ZPUk1BVF9VTkRFRklORUQgYm90aCBAZHJvcHBlZCBhbmQgQHByb2Nlc3NlZCBhcmUKLSAqIGludmFsaWQuIFZhbHVlcyBvZiAtMSBmb3IgZWl0aGVyIEBwcm9jZXNzZWQgb3IgQGRyb3BwZWQgbWVhbiB1bmtub3duIHZhbHVlcy4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RGb3JtYXQgKiBmb3JtYXQsCi0gICAgZ3VpbnQ2NCAqIHByb2Nlc3NlZCwgZ3VpbnQ2NCAqIGRyb3BwZWQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1FPUyk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKFBST0NFU1NFRCksIEdfVFlQRV9VSU5UNjQsIHByb2Nlc3NlZCwKLSAgICAgIEdTVF9RVUFSSyAoRFJPUFBFRCksIEdfVFlQRV9VSU5UNjQsIGRyb3BwZWQsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19wcm9ncmVzczoKLSAqIEBzcmM6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAdHlwZTogYSAjR3N0UHJvZ3Jlc3NUeXBlCi0gKiBAY29kZTogYSBwcm9ncmVzcyBjb2RlCi0gKiBAdGV4dDogZnJlZSwgdXNlciB2aXNpYmxlIHRleHQgZGVzY3JpYmluZyB0aGUgcHJvZ3Jlc3MKLSAqCi0gKiBQcm9ncmVzcyBtZXNzYWdlcyBhcmUgcG9zdGVkIGJ5IGVsZW1lbnRzIHdoZW4gdGhleSB1c2UgYW4gYXN5bmNocm9ub3VzIHRhc2sKLSAqIHRvIHBlcmZvcm0gYWN0aW9ucyB0cmlnZ2VyZWQgYnkgYSBzdGF0ZSBjaGFuZ2UuCi0gKgotICogQGNvZGUgY29udGFpbnMgYSB3ZWxsIGRlZmluZWQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGFjdGlvbi4KLSAqIEB0ZXh0IHNob3VsZCBjb250YWluIGEgdXNlciB2aXNpYmxlIHN0cmluZyBkZXRhaWxpbmcgdGhlIGN1cnJlbnQgYWN0aW9uLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBxb3MgbWVzc2FnZS4KLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfcHJvZ3Jlc3MgKEdzdE9iamVjdCAqIHNyYywgR3N0UHJvZ3Jlc3NUeXBlIHR5cGUsCi0gICAgY29uc3QgZ2NoYXIgKiBjb2RlLCBjb25zdCBnY2hhciAqIHRleHQpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50IHBlcmNlbnQgPSAxMDAsIHRpbWVvdXQgPSAtMTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29kZSAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRleHQgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgaWYgKHR5cGUgPT0gR1NUX1BST0dSRVNTX1RZUEVfU1RBUlQgfHwgdHlwZSA9PSBHU1RfUFJPR1JFU1NfVFlQRV9DT05USU5VRSkKLSAgICBwZXJjZW50ID0gMDsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX1BST0dSRVNTKSwKLSAgICAgIEdTVF9RVUFSSyAoVFlQRSksIEdTVF9UWVBFX1BST0dSRVNTX1RZUEUsIHR5cGUsCi0gICAgICBHU1RfUVVBUksgKENPREUpLCBHX1RZUEVfU1RSSU5HLCBjb2RlLAotICAgICAgR1NUX1FVQVJLIChURVhUKSwgR19UWVBFX1NUUklORywgdGV4dCwKLSAgICAgIEdTVF9RVUFSSyAoUEVSQ0VOVCksIEdfVFlQRV9JTlQsIHBlcmNlbnQsCi0gICAgICBHU1RfUVVBUksgKFRJTUVPVVQpLCBHX1RZUEVfSU5ULCB0aW1lb3V0LCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1BST0dSRVNTLCBzcmMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3M6Ci0gKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1BST0dSRVNTLgotICogQHR5cGU6IChvdXQpIChhbGxvdy1ub25lKTogbG9jYXRpb24gZm9yIHRoZSB0eXBlCi0gKiBAY29kZTogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSBjb2RlCi0gKiBAdGV4dDogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSB0ZXh0Ci0gKgotICogUGFyc2VzIHRoZSBwcm9ncmVzcyBAdHlwZSwgQGNvZGUgYW5kIEB0ZXh0LgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzcyAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdFByb2dyZXNzVHlwZSAqIHR5cGUsCi0gICAgZ2NoYXIgKiogY29kZSwgZ2NoYXIgKiogdGV4dCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUFJPR1JFU1MpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKFRZUEUpLCBHU1RfVFlQRV9QUk9HUkVTU19UWVBFLCB0eXBlLAotICAgICAgR1NUX1FVQVJLIChDT0RFKSwgR19UWVBFX1NUUklORywgY29kZSwKLSAgICAgIEdTVF9RVUFSSyAoVEVYVCksIEdfVFlQRV9TVFJJTkcsIHRleHQsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld190b2M6Ci0gKiBAc3JjOiB0aGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgotICogQHRvYzogKHRyYW5zZmVyIG5vbmUpOiAjR3N0VG9jIHN0cnVjdHVyZSBmb3IgdGhlIG1lc3NhZ2UuCi0gKiBAdXBkYXRlZDogd2hldGhlciBUT0Mgd2FzIHVwZGF0ZWQgb3Igbm90LgotICoKLSAqIENyZWF0ZSBhIG5ldyBUT0MgbWVzc2FnZS4gVGhlIG1lc3NhZ2UgaXMgcG9zdGVkIGJ5IGVsZW1lbnRzCi0gKiB0aGF0IGRpc2NvdmVyZWQgb3IgdXBkYXRlZCBhIFRPQy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IFRPQyBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X3RvYyAoR3N0T2JqZWN0ICogc3JjLCBHc3RUb2MgKiB0b2MsIGdib29sZWFuIHVwZGF0ZWQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqdG9jX3N0cnVjdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodG9jICE9IE5VTEwsIE5VTEwpOwotCi0gIHRvY19zdHJ1Y3QgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX1RPQyksCi0gICAgICBHU1RfUVVBUksgKFRPQyksIEdTVF9UWVBFX1RPQywgdG9jLAotICAgICAgR1NUX1FVQVJLIChVUERBVEVEKSwgR19UWVBFX0JPT0xFQU4sIHVwZGF0ZWQsIE5VTEwpOwotCi0gIHJldHVybiBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9UT0MsIHNyYywgdG9jX3N0cnVjdCk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfdG9jOgotICogQG1lc3NhZ2U6IGEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9UT0MuCi0gKiBAdG9jOiAob3V0KSAodHJhbnNmZXIgZnVsbCk6IHJldHVybiBsb2NhdGlvbiBmb3IgdGhlIFRPQy4KLSAqIEB1cGRhdGVkOiAob3V0KTogcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgdXBkYXRlZCBmbGFnLgotICoKLSAqIEV4dHJhY3QgdGhlIFRPQyBmcm9tIHRoZSAjR3N0TWVzc2FnZS4gVGhlIFRPQyByZXR1cm5lZCBpbiB0aGUKLSAqIG91dHB1dCBhcmd1bWVudCBpcyBhIGNvcHk7IHRoZSBjYWxsZXIgbXVzdCBmcmVlIGl0IHdpdGgKLSAqIGdzdF90b2NfdW5yZWYoKSB3aGVuIGRvbmUuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2VfdG9jIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0VG9jICoqIHRvYywgZ2Jvb2xlYW4gKiB1cGRhdGVkKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9UT0MpOwotICBnX3JldHVybl9pZl9mYWlsICh0b2MgIT0gTlVMTCk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSksCi0gICAgICBHU1RfUVVBUksgKFRPQyksIEdTVF9UWVBFX1RPQywgdG9jLAotICAgICAgR1NUX1FVQVJLIChVUERBVEVEKSwgR19UWVBFX0JPT0xFQU4sIHVwZGF0ZWQsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19yZXNldF90aW1lOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogVGhlIG9iamVjdCBvcmlnaW5hdGluZyB0aGUgbWVzc2FnZS4KLSAqIEBydW5uaW5nX3RpbWU6IHRoZSByZXF1ZXN0ZWQgcnVubmluZy10aW1lCi0gKgotICogVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIHRoZSBwaXBlbGluZSBydW5uaW5nLXRpbWUgc2hvdWxkIGJlIHJlc2V0IHRvCi0gKiBAcnVubmluZ190aW1lLCBsaWtlIGFmdGVyIGEgZmx1c2hpbmcgc2Vlay4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgcmVzZXRfdGltZSBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X3Jlc2V0X3RpbWUgKEdzdE9iamVjdCAqIHNyYywgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZSkKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoTUVTU0FHRV9SRVNFVF9USU1FKSwKLSAgICAgIEdTVF9RVUFSSyAoUlVOTklOR19USU1FKSwgR19UWVBFX1VJTlQ2NCwgcnVubmluZ190aW1lLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX1JFU0VUX1RJTUUsIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9yZXNldF90aW1lOgotICogQG1lc3NhZ2U6IEEgdmFsaWQgI0dzdE1lc3NhZ2Ugb2YgdHlwZSBHU1RfTUVTU0FHRV9SRVNFVF9USU1FLgotICogQHJ1bm5pbmdfdGltZTogKG91dCkgKGFsbG93LW5vbmUpOiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBydW5uaW5nX3RpbWUgb3IKLSAqICAgICAgJU5VTEwKLSAqCi0gKiBFeHRyYWN0IHRoZSBydW5uaW5nLXRpbWUgZnJvbSB0aGUgUkVTRVRfVElNRSBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX3Jlc2V0X3RpbWUgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RDbG9ja1RpbWUgKiBydW5uaW5nX3RpbWUpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1JFU0VUX1RJTUUpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0gIGlmIChydW5uaW5nX3RpbWUpCi0gICAgKnJ1bm5pbmdfdGltZSA9Ci0gICAgICAgIGdfdmFsdWVfZ2V0X3VpbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoUlVOTklOR19USU1FKSkpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhcnQ6Ci0gKiBAc3JjOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBUaGUgb2JqZWN0IG9yaWdpbmF0aW5nIHRoZSBtZXNzYWdlLgotICoKLSAqIENyZWF0ZSBhIG5ldyBzdHJlYW1fc3RhcnQgbWVzc2FnZS4gVGhpcyBtZXNzYWdlIGlzIGdlbmVyYXRlZCBhbmQgcG9zdGVkIGluCi0gKiB0aGUgc2luayBlbGVtZW50cyBvZiBhIEdzdEJpbi4gVGhlIGJpbiB3aWxsIG9ubHkgZm9yd2FyZCB0aGUgU1RSRUFNX1NUQVJUCi0gKiBtZXNzYWdlIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiBhbGwgc2lua3MgaGF2ZSBwb3N0ZWQgYW4gU1RSRUFNX1NUQVJUIG1lc3NhZ2UuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgbmV3IHN0cmVhbV9zdGFydCBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGFydCAoR3N0T2JqZWN0ICogc3JjKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5IChHU1RfUVVBUksgKE1FU1NBR0VfU1RSRUFNX1NUQVJUKSk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9TVFJFQU1fU1RBUlQsIHNyYywgcyk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9zZXRfZ3JvdXBfaWQ6Ci0gKiBAbWVzc2FnZTogdGhlIG1lc3NhZ2UKLSAqIEBncm91cF9pZDogdGhlIGdyb3VwIGlkCi0gKgotICogU2V0cyB0aGUgZ3JvdXAgaWQgb24gdGhlIHN0cmVhbS1zdGFydCBtZXNzYWdlLgotICoKLSAqIEFsbCBzdHJlYW1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBncm91cCBpZCBhcmUgc3VwcG9zZWQgdG8gYmUgcGxheWVkCi0gKiB0b2dldGhlciwgaS5lLiBhbGwgc3RyZWFtcyBpbnNpZGUgYSBjb250YWluZXIgZmlsZSBzaG91bGQgaGF2ZSB0aGUKLSAqIHNhbWUgZ3JvdXAgaWQgYnV0IGRpZmZlcmVudCBzdHJlYW0gaWRzLiBUaGUgZ3JvdXAgaWQgc2hvdWxkIGNoYW5nZQotICogZWFjaCB0aW1lIHRoZSBzdHJlYW0gaXMgc3RhcnRlZCwgcmVzdWx0aW5nIGluIGRpZmZlcmVudCBncm91cCBpZHMKLSAqIGVhY2ggdGltZSBhIGZpbGUgaXMgcGxheWVkIGZvciBleGFtcGxlLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9zZXRfZ3JvdXBfaWQgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBndWludCBncm91cF9pZCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJUKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X21lc3NhZ2VfaXNfd3JpdGFibGUgKG1lc3NhZ2UpKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLCBHU1RfUVVBUksgKEdST1VQX0lEKSwgR19UWVBFX1VJTlQsIGdyb3VwX2lkLAotICAgICAgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfZ3JvdXBfaWQ6Ci0gKiBAbWVzc2FnZTogQSB2YWxpZCAjR3N0TWVzc2FnZSBvZiB0eXBlIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVC4KLSAqIEBncm91cF9pZDogKG91dCkgKGFsbG93LW5vbmUpOiBSZXN1bHQgbG9jYXRpb24gZm9yIHRoZSBncm91cCBpZCBvcgotICogICAgICAlTlVMTAotICoKLSAqIEV4dHJhY3QgdGhlIGdyb3VwIGZyb20gdGhlIFNUUkVBTV9TVEFSVCBtZXNzYWdlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBtZXNzYWdlIGhhZCBhIGdyb3VwIGlkIHNldCwgJUZBTFNFIG90aGVyd2lzZQotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X21lc3NhZ2VfcGFyc2VfZ3JvdXBfaWQgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBndWludCAqIGdyb3VwX2lkKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgY29uc3QgR1ZhbHVlICp2OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCwKLSAgICAgIEZBTFNFKTsKLQotICBpZiAoIWdyb3VwX2lkKQotICAgIHJldHVybiBUUlVFOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0KLSAgdiA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoR1JPVVBfSUQpKTsKLSAgaWYgKCF2KQotICAgIHJldHVybiBGQUxTRTsKLQotICAqZ3JvdXBfaWQgPSBnX3ZhbHVlX2dldF91aW50ICh2KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dDoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAY29udGV4dF90eXBlOiBUaGUgY29udGV4dCB0eXBlIHRoYXQgaXMgbmVlZGVkCi0gKgotICogVGhpcyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIGFuIGVsZW1lbnQgbmVlZHMgYSBzcGVjaWZpYyAjR3N0Q29udGV4dC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgbmVlZC1jb250ZXh0IG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dCAoR3N0T2JqZWN0ICogc3JjLCBjb25zdCBnY2hhciAqIGNvbnRleHRfdHlwZSkKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbnRleHRfdHlwZSAhPSBOVUxMLCBOVUxMKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX05FRURfQ09OVEVYVCksCi0gICAgICBHU1RfUVVBUksgKENPTlRFWFRfVFlQRSksIEdfVFlQRV9TVFJJTkcsIGNvbnRleHRfdHlwZSwgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQsIHNyYywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGU6Ci0gKiBAbWVzc2FnZTogYSBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQgdHlwZSBtZXNzYWdlCi0gKiBAY29udGV4dF90eXBlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBjb250ZXh0IHR5cGUsIG9yICVOVUxMCi0gKgotICogUGFyc2UgYSBjb250ZXh0IHR5cGUgZnJvbSBhbiBleGlzdGluZyBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQgbWVzc2FnZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNnYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBwYXJzaW5nIHN1Y2NlZWRlZC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLWdib29sZWFuCi1nc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGUgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLAotICAgIGNvbnN0IGdjaGFyICoqIGNvbnRleHRfdHlwZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCwKLSAgICAgIEZBTFNFKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotCi0gIGlmIChjb250ZXh0X3R5cGUpIHsKLSAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQ09OVEVYVF9UWVBFKSk7Ci0gICAgKmNvbnRleHRfdHlwZSA9IGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X2hhdmVfY29udGV4dDoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IFRoZSBvYmplY3Qgb3JpZ2luYXRpbmcgdGhlIG1lc3NhZ2UuCi0gKiBAY29udGV4dDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgY29udGV4dAotICoKLSAqIFRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQgd2hlbiBhbiBlbGVtZW50IGhhcyBhIG5ldyBsb2NhbCAjR3N0Q29udGV4dC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBuZXcgaGF2ZS1jb250ZXh0IG1lc3NhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2hhdmVfY29udGV4dCAoR3N0T2JqZWN0ICogc3JjLCBHc3RDb250ZXh0ICogY29udGV4dCkKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoTUVTU0FHRV9IQVZFX0NPTlRFWFQpLAotICAgICAgR1NUX1FVQVJLIChDT05URVhUKSwgR1NUX1RZUEVfQ09OVEVYVCwgY29udGV4dCwgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9IQVZFX0NPTlRFWFQsIHNyYywgc3RydWN0dXJlKTsKLSAgZ3N0X2NvbnRleHRfdW5yZWYgKGNvbnRleHQpOwotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dDoKLSAqIEBtZXNzYWdlOiBBIHZhbGlkICNHc3RNZXNzYWdlIG9mIHR5cGUgR1NUX01FU1NBR0VfSEFWRV9DT05URVhULgotICogQGNvbnRleHQ6IChvdXQpICh0cmFuc2ZlciBmdWxsKSAoYWxsb3ctbm9uZSk6IFJlc3VsdCBsb2NhdGlvbiBmb3IgdGhlCi0gKiAgICAgIGNvbnRleHQgb3IgJU5VTEwKLSAqCi0gKiBFeHRyYWN0IHRoZSBjb250ZXh0IGZyb20gdGhlIEhBVkVfQ09OVEVYVCBtZXNzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9oYXZlX2NvbnRleHQgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RDb250ZXh0ICoqIGNvbnRleHQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0hBVkVfQ09OVEVYVCk7Ci0KLSAgaWYgKGNvbnRleHQpCi0gICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSksCi0gICAgICAgIEdTVF9RVUFSSyAoQ09OVEVYVCksIEdTVF9UWVBFX0NPTlRFWFQsIGNvbnRleHQsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19kZXZpY2VfYWRkZWQ6Ci0gKiBAc3JjOiBUaGUgI0dzdE9iamVjdCB0aGF0IGNyZWF0ZWQgdGhlIG1lc3NhZ2UKLSAqIEBkZXZpY2U6ICh0cmFuc2ZlciBub25lKTogVGhlIG5ldyAjR3N0RGV2aWNlCi0gKgotICogQ3JlYXRlcyBhIG5ldyBkZXZpY2UtYWRkZWQgbWVzc2FnZS4gVGhlIGRldmljZS1hZGRlZCBtZXNzYWdlIGlzIHByb2R1Y2VkIGJ5Ci0gKiAjR3N0RGV2aWNlUHJvdmlkZXIgb3IgYSAjR3N0RGV2aWNlTW9uaXRvci4gVGhleSBhbm5vdW5jZSB0aGUgYXBwZWFyYW5jZQotICogb2YgbW9uaXRvcmVkIGRldmljZXMuCi0gKgotICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgI0dzdE1lc3NhZ2UKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X2RldmljZV9hZGRlZCAoR3N0T2JqZWN0ICogc3JjLCBHc3REZXZpY2UgKiBkZXZpY2UpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXZpY2UgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREVWSUNFIChkZXZpY2UpLCBOVUxMKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX0RFVklDRV9BRERFRCksCi0gICAgICBHU1RfUVVBUksgKERFVklDRSksIEdTVF9UWVBFX0RFVklDRSwgZGV2aWNlLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0RFVklDRV9BRERFRCwgc3JjLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9hZGRlZDoKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlIG9mIHR5cGUgJUdTVF9NRVNTQUdFX0RFVklDRV9BRERFRAotICogQGRldmljZTogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogQSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSBhCi0gKiAgcG9pbnRlciB0byB0aGUgbmV3ICNHc3REZXZpY2UsIG9yICVOVUxMCi0gKiAKLSAqIFBhcnNlcyBhIGRldmljZS1hZGRlZCBtZXNzYWdlLiBUaGUgZGV2aWNlLWFkZGVkIG1lc3NhZ2UgaXMgcHJvZHVjZWQgYnkKLSAqICNHc3REZXZpY2VQcm92aWRlciBvciBhICNHc3REZXZpY2VNb25pdG9yLiBJdCBhbm5vdW5jZXMgdGhlIGFwcGVhcmFuY2UKLSAqIG9mIG1vbml0b3JlZCBkZXZpY2VzLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0RGV2aWNlICoqIGRldmljZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfREVWSUNFX0FEREVEKTsKLQotICBpZiAoZGV2aWNlKQotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpLAotICAgICAgICBHU1RfUVVBUksgKERFVklDRSksIEdTVF9UWVBFX0RFVklDRSwgZGV2aWNlLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfZGV2aWNlX3JlbW92ZWQ6Ci0gKiBAc3JjOiBUaGUgI0dzdE9iamVjdCB0aGF0IGNyZWF0ZWQgdGhlIG1lc3NhZ2UKLSAqIEBkZXZpY2U6ICh0cmFuc2ZlciBub25lKTogVGhlIHJlbW92ZWQgI0dzdERldmljZQotICoKLSAqIENyZWF0ZXMgYSBuZXcgZGV2aWNlLXJlbW92ZWQgbWVzc2FnZS4gVGhlIGRldmljZS1yZW1vdmVkIG1lc3NhZ2UgaXMgcHJvZHVjZWQKLSAqIGJ5ICNHc3REZXZpY2VQcm92aWRlciBvciBhICNHc3REZXZpY2VNb25pdG9yLiBUaGV5IGFubm91bmNlIHRoZQotICogZGlzYXBwZWFyYW5jZSBvZiBtb25pdG9yZWQgZGV2aWNlcy4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ld2x5IGFsbG9jYXRlZCAjR3N0TWVzc2FnZQotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfZGV2aWNlX3JlbW92ZWQgKEdzdE9iamVjdCAqIHNyYywgR3N0RGV2aWNlICogZGV2aWNlKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGV2aWNlICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RFVklDRSAoZGV2aWNlKSwgTlVMTCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRCksCi0gICAgICBHU1RfUVVBUksgKERFVklDRSksIEdTVF9UWVBFX0RFVklDRSwgZGV2aWNlLCBOVUxMKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0RFVklDRV9SRU1PVkVELCBzcmMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX3JlbW92ZWQ6Ci0gKiBAbWVzc2FnZTogYSAjR3N0TWVzc2FnZSBvZiB0eXBlICVHU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRAotICogQGRldmljZTogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogQSBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSBhCi0gKiAgcG9pbnRlciB0byB0aGUgcmVtb3ZlZCAjR3N0RGV2aWNlLCBvciAlTlVMTAotICoKLSAqIFBhcnNlcyBhIGRldmljZS1yZW1vdmVkIG1lc3NhZ2UuIFRoZSBkZXZpY2UtcmVtb3ZlZCBtZXNzYWdlIGlzIHByb2R1Y2VkIGJ5Ci0gKiAjR3N0RGV2aWNlUHJvdmlkZXIgb3IgYSAjR3N0RGV2aWNlTW9uaXRvci4gSXQgYW5ub3VuY2VzIHRoZQotICogZGlzYXBwZWFyYW5jZSBvZiBtb25pdG9yZWQgZGV2aWNlcy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9yZW1vdmVkIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0RGV2aWNlICoqIGRldmljZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfREVWSUNFX1JFTU9WRUQpOwotCi0gIGlmIChkZXZpY2UpCi0gICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSksCi0gICAgICAgIEdTVF9RVUFSSyAoREVWSUNFKSwgR1NUX1RZUEVfREVWSUNFLCBkZXZpY2UsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX25ld19wcm9wZXJ0eV9ub3RpZnk6Ci0gKiBAc3JjOiBUaGUgI0dzdE9iamVjdCB3aG9zZSBwcm9wZXJ0eSBjaGFuZ2VkIChtYXkgb3IgbWF5IG5vdCBiZSBhICNHc3RFbGVtZW50KQotICogQHByb3BlcnR5X25hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY2hhbmdlZAotICogQHZhbDogKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogbmV3IHByb3BlcnR5IHZhbHVlLCBvciAlTlVMTAotICoKLSAqIFJldHVybnM6IGEgbmV3bHkgYWxsb2NhdGVkICNHc3RNZXNzYWdlCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfcHJvcGVydHlfbm90aWZ5IChHc3RPYmplY3QgKiBzcmMsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwKLSAgICBHVmFsdWUgKiB2YWwpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHVmFsdWUgbmFtZV92YWwgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByb3BlcnR5X25hbWUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWRfZW1wdHkgKEdTVF9RVUFSSyAoTUVTU0FHRV9QUk9QRVJUWV9OT1RJRlkpKTsKLSAgZ192YWx1ZV9pbml0ICgmbmFtZV92YWwsIEdfVFlQRV9TVFJJTkcpOwotICAvKiBzaG91bGQgYWxyZWFkeSBiZSBpbnRlcm5lZCwgYnV0IGxldCdzIG1ha2Ugc3VyZSAqLwotICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmbmFtZV92YWwsIGdfaW50ZXJuX3N0cmluZyAocHJvcGVydHlfbmFtZSkpOwotICBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChQUk9QRVJUWV9OQU1FKSwgJm5hbWVfdmFsKTsKLSAgaWYgKHZhbCAhPSBOVUxMKQotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKFBST1BFUlRZX1ZBTFVFKSwgdmFsKTsKLQotICByZXR1cm4gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZLCBzcmMsIHN0cnVjdHVyZSk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5OgotICogQG1lc3NhZ2U6IGEgI0dzdE1lc3NhZ2Ugb2YgdHlwZSAlR1NUX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZCi0gKiBAb2JqZWN0OiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBsb2NhdGlvbiB3aGVyZSB0byBzdG9yZSBhCi0gKiAgICAgcG9pbnRlciB0byB0aGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IGdvdCBjaGFuZ2VkLCBvciAlTlVMTAotICogQHByb3BlcnR5X25hbWU6IChvdXQpIChhbGxvdy1ub25lKTogcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgbmFtZSBvZiB0aGUKLSAqICAgICBwcm9wZXJ0eSB0aGF0IGdvdCBjaGFuZ2VkLCBvciAlTlVMTAotICogQHByb3BlcnR5X3ZhbHVlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHJldHVybiBsb2NhdGlvbiBmb3IgdGhlIG5ldyB2YWx1ZSBvZgotICogICAgIHRoZSBwcm9wZXJ0eSB0aGF0IGdvdCBjaGFuZ2VkLCBvciAlTlVMTC4gVGhpcyB3aWxsIG9ubHkgYmUgc2V0IGlmIHRoZQotICogICAgIHByb3BlcnR5IG5vdGlmeSB3YXRjaCB3YXMgdG9sZCB0byBpbmNsdWRlIHRoZSB2YWx1ZSB3aGVuIGl0IHdhcyBzZXQgdXAKLSAqCi0gKiBQYXJzZXMgYSBwcm9wZXJ0eS1ub3RpZnkgbWVzc2FnZS4gVGhlc2Ugd2lsbCBiZSBwb3N0ZWQgb24gdGhlIGJ1cyBvbmx5Ci0gKiB3aGVuIHNldCB1cCB3aXRoIGdzdF9lbGVtZW50X2FkZF9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2goKSBvcgotICogZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNoKCkuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5IChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0T2JqZWN0ICoqIG9iamVjdCwKLSAgICBjb25zdCBnY2hhciAqKiBwcm9wZXJ0eV9uYW1lLCBjb25zdCBHVmFsdWUgKiogcHJvcGVydHlfdmFsdWUpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZKTsKLQotICBpZiAob2JqZWN0KQotICAgICpvYmplY3QgPSBHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpOwotCi0gIGlmIChwcm9wZXJ0eV9uYW1lKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpuYW1lX3ZhbHVlOwotCi0gICAgbmFtZV92YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzLCBHU1RfUVVBUksgKFBST1BFUlRZX05BTUUpKTsKLSAgICAqcHJvcGVydHlfbmFtZSA9IGdfdmFsdWVfZ2V0X3N0cmluZyAobmFtZV92YWx1ZSk7Ci0gIH0KLQotICBpZiAocHJvcGVydHlfdmFsdWUpCi0gICAgKnByb3BlcnR5X3ZhbHVlID0KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHMsIEdTVF9RVUFSSyAoUFJPUEVSVFlfVkFMVUUpKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb246Ci0gKiBAc3JjOiBUaGUgI0dzdE9iamVjdCB0aGF0IGNyZWF0ZWQgdGhlIG1lc3NhZ2UKLSAqIEBjb2xsZWN0aW9uOiAodHJhbnNmZXIgbm9uZSk6IFRoZSAjR3N0U3RyZWFtQ29sbGVjdGlvbgotICoKLSAqIENyZWF0ZXMgYSBuZXcgc3RyZWFtLWNvbGxlY3Rpb24gbWVzc2FnZS4gVGhlIG1lc3NhZ2UgaXMgdXNlZCB0byBhbm5vdW5jZSBuZXcKLSAqICNHc3RTdHJlYW1Db2xsZWN0aW9uCi0gKgotICogUmV0dXJuczogYSBuZXdseSBhbGxvY2F0ZWQgI0dzdE1lc3NhZ2UKLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1Hc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX25ld19zdHJlYW1fY29sbGVjdGlvbiAoR3N0T2JqZWN0ICogc3JjLAotICAgIEdzdFN0cmVhbUNvbGxlY3Rpb24gKiBjb2xsZWN0aW9uKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29sbGVjdGlvbiAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJFQU1fQ09MTEVDVElPTiAoY29sbGVjdGlvbiksIE5VTEwpOwotCi0gIHN0cnVjdHVyZSA9Ci0gICAgICBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChNRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OKSwKLSAgICAgIEdTVF9RVUFSSyAoQ09MTEVDVElPTiksIEdTVF9UWVBFX1NUUkVBTV9DT0xMRUNUSU9OLCBjb2xsZWN0aW9uLCBOVUxMKTsKLSAgbWVzc2FnZSA9Ci0gICAgICBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiwgc3JjLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi0vKioKLSAqIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uOgotICogQG1lc3NhZ2U6IGEgI0dzdE1lc3NhZ2Ugb2YgdHlwZSAlR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04KLSAqIEBjb2xsZWN0aW9uOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBBIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIGEKLSAqICBwb2ludGVyIHRvIHRoZSAjR3N0U3RyZWFtQ29sbGVjdGlvbiwgb3IgJU5VTEwKLSAqCi0gKiBQYXJzZXMgYSBzdHJlYW0tY29sbGVjdGlvbiBtZXNzYWdlLiAKLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi12b2lkCi1nc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbiAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsCi0gICAgR3N0U3RyZWFtQ29sbGVjdGlvbiAqKiBjb2xsZWN0aW9uKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfTUVTU0FHRSAobWVzc2FnZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PQotICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04pOwotCi0gIGlmIChjb2xsZWN0aW9uKQotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpLAotICAgICAgICBHU1RfUVVBUksgKENPTExFQ1RJT04pLCBHU1RfVFlQRV9TVFJFQU1fQ09MTEVDVElPTiwgY29sbGVjdGlvbiwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbXNfc2VsZWN0ZWQ6Ci0gKiBAc3JjOiBUaGUgI0dzdE9iamVjdCB0aGF0IGNyZWF0ZWQgdGhlIG1lc3NhZ2UKLSAqIEBjb2xsZWN0aW9uOiAodHJhbnNmZXIgbm9uZSk6IFRoZSAjR3N0U3RyZWFtQ29sbGVjdGlvbgotICoKLSAqIENyZWF0ZXMgYSBuZXcgc3RlYW1zLXNlbGVjdGVkIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIGlzIHVzZWQgdG8gYW5ub3VuY2UKLSAqIHRoYXQgYW4gYXJyYXkgb2Ygc3RyZWFtcyBoYXMgYmVlbiBzZWxlY3RlZC4gVGhpcyBpcyBnZW5lcmFsbHkgaW4gcmVzcG9uc2UKLSAqIHRvIGEgI0dTVF9FVkVOVF9TRUxFQ1RfU1RSRUFNUyBldmVudCwgb3Igd2hlbiBhbiBlbGVtZW50IChzdWNoIGFzIGRlY29kZWJpbjMpCi0gKiBtYWtlcyBhbiBpbml0aWFsIHNlbGVjdGlvbiBvZiBzdHJlYW1zLgotICoKLSAqIFRoZSBtZXNzYWdlIGFsc28gY29udGFpbnMgdGhlICNHc3RTdHJlYW1Db2xsZWN0aW9uIHRvIHdoaWNoIHRoZSB2YXJpb3VzIHN0cmVhbXMKLSAqIGJlbG9uZyB0by4KLSAqCi0gKiBVc2VycyBvZiBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtc19zZWxlY3RlZCgpIGNhbiBhZGQgdGhlIHNlbGVjdGVkIHN0cmVhbXMgd2l0aAotICogZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9hZGQoKS4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ld2x5IGFsbG9jYXRlZCAjR3N0TWVzc2FnZQotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLUdzdE1lc3NhZ2UgKgotZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbXNfc2VsZWN0ZWQgKEdzdE9iamVjdCAqIHNyYywKLSAgICBHc3RTdHJlYW1Db2xsZWN0aW9uICogY29sbGVjdGlvbikKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdWYWx1ZSB2YWwgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbGxlY3Rpb24gIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSRUFNX0NPTExFQ1RJT04gKGNvbGxlY3Rpb24pLCBOVUxMKTsKLQotICBzdHJ1Y3R1cmUgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEKSwKLSAgICAgIEdTVF9RVUFSSyAoQ09MTEVDVElPTiksIEdTVF9UWVBFX1NUUkVBTV9DT0xMRUNUSU9OLCBjb2xsZWN0aW9uLCBOVUxMKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9BUlJBWSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKFNUUkVBTVMpLCAmdmFsKTsKLSAgbWVzc2FnZSA9Ci0gICAgICBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVELCBzcmMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc2l6ZToKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlIG9mIHR5cGUgJUdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQKLSAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RyZWFtcyBjb250YWluZWQgaW4gdGhlIEBtZXNzYWdlLgotICoKLSAqIFJldHVybnM6IFRoZSBudW1iZXIgb2Ygc3RyZWFtcyBjb250YWluZWQgd2l0aGluLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLWd1aW50Ci1nc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplIChHc3RNZXNzYWdlICogbXNnKQotewotICBjb25zdCBHVmFsdWUgKnZhbDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1zZyksIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVELAotICAgICAgMCk7Ci0KLSAgdmFsID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1zZyksCi0gICAgICBHU1RfUVVBUksgKFNUUkVBTVMpKTsKLSAgcmV0dXJuIGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAodmFsKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2FkZDoKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlIG9mIHR5cGUgJUdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQKLSAqIEBzdHJlYW06ICh0cmFuc2ZlciBub25lKTogYSAjR3N0U3RyZWFtIHRvIGFkZCB0byBAbWVzc2FnZQotICoKLSAqIEFkZHMgdGhlIEBzdHJlYW0gdG8gdGhlIEBtZXNzYWdlLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfYWRkIChHc3RNZXNzYWdlICogbXNnLCBHc3RTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIEdWYWx1ZSAqdmFsOwotICBHVmFsdWUgdG9fYWRkID0gR19WQUxVRV9JTklUOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtc2cpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1NUUkVBTSAoc3RyZWFtKSk7Ci0KLSAgdmFsID0KLSAgICAgIChHVmFsdWUgKikgZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobXNnKSwKLSAgICAgIEdTVF9RVUFSSyAoU1RSRUFNUykpOwotICBnX3ZhbHVlX2luaXQgKCZ0b19hZGQsIEdTVF9UWVBFX1NUUkVBTSk7Ci0gIGdfdmFsdWVfc2V0X29iamVjdCAoJnRvX2FkZCwgc3RyZWFtKTsKLSAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF9hbmRfdGFrZV92YWx1ZSAodmFsLCAmdG9fYWRkKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zdHJlYW06Ci0gKiBAbWVzc2FnZTogYSAjR3N0TWVzc2FnZSBvZiB0eXBlICVHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVECi0gKiBAaWR4OiBJbmRleCBvZiB0aGUgc3RyZWFtIHRvIHJldHJpZXZlCi0gKgotICogUmV0cmlldmVzIHRoZSAjR3N0U3RyZWFtIHdpdGggaW5kZXggQGluZGV4IGZyb20gdGhlIEBtZXNzYWdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjR3N0U3RyZWFtCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0U3RyZWFtICoKLWdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbSAoR3N0TWVzc2FnZSAqIG1zZywgZ3VpbnQgaWR4KQotewotICBjb25zdCBHVmFsdWUgKnN0cmVhbXMsICp2YWw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtc2cpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfU1RSRUFNU19TRUxFQ1RFRCwKLSAgICAgIE5VTEwpOwotCi0gIHN0cmVhbXMgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobXNnKSwKLSAgICAgIEdTVF9RVUFSSyAoU1RSRUFNUykpOwotICB2YWwgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlIChzdHJlYW1zLCBpZHgpOwotICBpZiAodmFsKSB7Ci0gICAgcmV0dXJuIChHc3RTdHJlYW0gKikgZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWwpOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3RlZDoKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlIG9mIHR5cGUgJUdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQKLSAqIEBjb2xsZWN0aW9uOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBBIGxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIGEKLSAqICBwb2ludGVyIHRvIHRoZSAjR3N0U3RyZWFtQ29sbGVjdGlvbiwgb3IgJU5VTEwKLSAqCi0gKiBQYXJzZXMgYSBzdHJlYW1zLXNlbGVjdGVkIG1lc3NhZ2UuIAotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLXZvaWQKLWdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbXNfc2VsZWN0ZWQgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLAotICAgIEdzdFN0cmVhbUNvbGxlY3Rpb24gKiogY29sbGVjdGlvbikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNU19TRUxFQ1RFRCk7Ci0KLSAgaWYgKGNvbGxlY3Rpb24pCi0gICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKEdTVF9NRVNTQUdFX1NUUlVDVFVSRSAobWVzc2FnZSksCi0gICAgICAgIEdTVF9RVUFSSyAoQ09MTEVDVElPTiksIEdTVF9UWVBFX1NUUkVBTV9DT0xMRUNUSU9OLCBjb2xsZWN0aW9uLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9uZXdfcmVkaXJlY3Q6Ci0gKiBAc3JjOiBUaGUgI0dzdE9iamVjdCB3aG9zZSBwcm9wZXJ0eSBjaGFuZ2VkIChtYXkgb3IgbWF5IG5vdCBiZSBhICNHc3RFbGVtZW50KQotICogQGxvY2F0aW9uOiAodHJhbnNmZXIgbm9uZSk6IGxvY2F0aW9uIHN0cmluZyBmb3IgdGhlIG5ldyBlbnRyeQotICogQHRhZ19saXN0OiAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiB0YWcgbGlzdCBmb3IgdGhlIG5ldyBlbnRyeQotICogQGVudHJ5X3N0cnVjdDogKHRyYW5zZmVyIGZ1bGwpIChhbGxvdy1ub25lKTogc3RydWN0dXJlIGZvciB0aGUgbmV3IGVudHJ5Ci0gKgotICogQ3JlYXRlcyBhIG5ldyByZWRpcmVjdCBtZXNzYWdlIGFuZCBhZGRzIGEgbmV3IGVudHJ5IHRvIGl0LiBSZWRpcmVjdCBtZXNzYWdlcwotICogYXJlIHBvc3RlZCB3aGVuIGFuIGVsZW1lbnQgZGV0ZWN0cyB0aGF0IHRoZSBhY3R1YWwgZGF0YSBoYXMgdG8gYmUgcmV0cmlldmVkCi0gKiBmcm9tIGEgZGlmZmVyZW50IGxvY2F0aW9uLiBUaGlzIGlzIHVzZWZ1bCBpZiBzdWNoIGEgcmVkaXJlY3Rpb24gY2Fubm90IGJlCi0gKiBoYW5kbGVkIGluc2lkZSBhIHNvdXJjZSBlbGVtZW50LCBmb3IgZXhhbXBsZSB3aGVuIEhUVFAgMzAyLzMwMyByZWRpcmVjdHMKLSAqIHJldHVybiBhIG5vbi1IVFRQIFVSTC4KLSAqCi0gKiBUaGUgcmVkaXJlY3QgbWVzc2FnZSBjYW4gaG9sZCBtdWx0aXBsZSBlbnRyaWVzLiBUaGUgZmlyc3Qgb25lIGlzIGFkZGVkCi0gKiB3aGVuIHRoZSByZWRpcmVjdCBtZXNzYWdlIGlzIGNyZWF0ZWQsIHdpdGggdGhlIGdpdmVuIGxvY2F0aW9uLCB0YWdfbGlzdCwKLSAqIGVudHJ5X3N0cnVjdCBhcmd1bWVudHMuIFVzZSBnc3RfbWVzc2FnZV9hZGRfcmVkaXJlY3RfZW50cnkoKSB0byBhZGQgbW9yZQotICogZW50cmllcy4KLSAqCi0gKiBFYWNoIGVudHJ5IGhhcyBhIGxvY2F0aW9uLCBhIHRhZyBsaXN0LCBhbmQgYSBzdHJ1Y3R1cmUuIEFsbCBvZiB0aGVzZSBhcmUKLSAqIG9wdGlvbmFsLiBUaGUgdGFnIGxpc3QgYW5kIHN0cnVjdHVyZSBhcmUgdXNlZnVsIGZvciBhZGRpdGlvbmFsIG1ldGFkYXRhLAotICogc3VjaCBhcyBiaXRyYXRlIHN0YXRpc3RpY3MgZm9yIHRoZSBnaXZlbiBsb2NhdGlvbi4KLSAqCi0gKiBCeSBkZWZhdWx0LCBtZXNzYWdlIHJlY2lwaWVudHMgc2hvdWxkIHRyZWF0IGVudHJpZXMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlCi0gKiBzdG9yZWQuIFRoZSByZWNpcGllbnQgc2hvdWxkIHRoZXJlZm9yZSB0cnkgZW50cnkgIzAgZmlyc3QsIGFuZCBpZiB0aGlzCi0gKiBlbnRyeSBpcyBub3QgYWNjZXB0YWJsZSBvciB3b3JraW5nLCB0cnkgZW50cnkgIzEgZXRjLiBTZW5kZXJzIG11c3QgbWFrZQotICogc3VyZSB0aGF0IHRoZXkgYWRkIGVudHJpZXMgaW4gdGhpcyBvcmRlci4gSG93ZXZlciwgcmVjaXBpZW50cyBhcmUgZnJlZSB0bwotICogaWdub3JlIHRoZSBvcmRlciBhbmQgcGljayBhbiBlbnRyeSB0aGF0IGlzICJiZXN0IiBmb3IgdGhlbS4gT25lIGV4YW1wbGUKLSAqIHdvdWxkIGJlIGEgcmVjaXBpZW50IHRoYXQgc2NhbnMgdGhlIGVudHJpZXMgZm9yIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdAotICogYml0cmF0ZSB0YWcuCi0gKgotICogVGhlIHNwZWNpZmllZCBsb2NhdGlvbiBzdHJpbmcgaXMgY29waWVkLiBIb3dldmVyLCBvd25lcnNoaXAgb3ZlciB0aGUgdGFnCi0gKiBsaXN0IGFuZCBzdHJ1Y3R1cmUgYXJlIHRyYW5zZmVycmVkIHRvIHRoZSBtZXNzYWdlLgotICoKLSAqIFJldHVybnM6IGEgbmV3bHkgYWxsb2NhdGVkICNHc3RNZXNzYWdlCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9uZXdfcmVkaXJlY3QgKEdzdE9iamVjdCAqIHNyYywgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbiwKLSAgICBHc3RUYWdMaXN0ICogdGFnX2xpc3QsIGNvbnN0IEdzdFN0cnVjdHVyZSAqIGVudHJ5X3N0cnVjdCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdWYWx1ZSBlbnRyeV9sb2NhdGlvbnNfZ3ZhbHVlID0gR19WQUxVRV9JTklUOwotICBHVmFsdWUgZW50cnlfdGFnbGlzdHNfZ3ZhbHVlID0gR19WQUxVRV9JTklUOwotICBHVmFsdWUgZW50cnlfc3RydWN0dXJlc19ndmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxvY2F0aW9uICE9IE5VTEwsIE5VTEwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJmVudHJ5X2xvY2F0aW9uc19ndmFsdWUsIEdTVF9UWVBFX0xJU1QpOwotICBnX3ZhbHVlX2luaXQgKCZlbnRyeV90YWdsaXN0c19ndmFsdWUsIEdTVF9UWVBFX0xJU1QpOwotICBnX3ZhbHVlX2luaXQgKCZlbnRyeV9zdHJ1Y3R1cmVzX2d2YWx1ZSwgR1NUX1RZUEVfTElTVCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWRfZW1wdHkgKEdTVF9RVUFSSyAoTUVTU0FHRV9SRURJUkVDVCkpOwotICBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChSRURJUkVDVF9FTlRSWV9MT0NBVElPTlMpLAotICAgICAgJmVudHJ5X2xvY2F0aW9uc19ndmFsdWUpOwotICBnc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChSRURJUkVDVF9FTlRSWV9UQUdMSVNUUyksCi0gICAgICAmZW50cnlfdGFnbGlzdHNfZ3ZhbHVlKTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoUkVESVJFQ1RfRU5UUllfU1RSVUNUVVJFUyksCi0gICAgICAmZW50cnlfc3RydWN0dXJlc19ndmFsdWUpOwotCi0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfY3VzdG9tIChHU1RfTUVTU0FHRV9SRURJUkVDVCwgc3JjLCBzdHJ1Y3R1cmUpOwotICBnX2Fzc2VydCAobWVzc2FnZSAhPSBOVUxMKTsKLQotICBnc3RfbWVzc2FnZV9hZGRfcmVkaXJlY3RfZW50cnkgKG1lc3NhZ2UsIGxvY2F0aW9uLCB0YWdfbGlzdCwgZW50cnlfc3RydWN0KTsKLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9hZGRfcmVkaXJlY3RfZW50cnk6Ci0gKiBAbWVzc2FnZTogYSAjR3N0TWVzc2FnZSBvZiB0eXBlICVHU1RfTUVTU0FHRV9SRURJUkVDVAotICogQGxvY2F0aW9uOiAodHJhbnNmZXIgbm9uZSk6IGxvY2F0aW9uIHN0cmluZyBmb3IgdGhlIG5ldyBlbnRyeQotICogQHRhZ19saXN0OiAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiB0YWcgbGlzdCBmb3IgdGhlIG5ldyBlbnRyeQotICogQGVudHJ5X3N0cnVjdDogKHRyYW5zZmVyIGZ1bGwpIChhbGxvdy1ub25lKTogc3RydWN0dXJlIGZvciB0aGUgbmV3IGVudHJ5Ci0gKgotICogQ3JlYXRlcyBhbmQgYXBwZW5kcyBhIG5ldyBlbnRyeS4KLSAqCi0gKiBUaGUgc3BlY2lmaWVkIGxvY2F0aW9uIHN0cmluZyBpcyBjb3BpZWQuIEhvd2V2ZXIsIG93bmVyc2hpcCBvdmVyIHRoZSB0YWcKLSAqIGxpc3QgYW5kIHN0cnVjdHVyZSBhcmUgdHJhbnNmZXJyZWQgdG8gdGhlIG1lc3NhZ2UuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfYWRkX3JlZGlyZWN0X2VudHJ5IChHc3RNZXNzYWdlICogbWVzc2FnZSwgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbiwKLSAgICBHc3RUYWdMaXN0ICogdGFnX2xpc3QsIGNvbnN0IEdzdFN0cnVjdHVyZSAqIGVudHJ5X3N0cnVjdCkKLXsKLSAgR1ZhbHVlIHZhbCA9IEdfVkFMVUVfSU5JVDsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdWYWx1ZSAqZW50cnlfbG9jYXRpb25zX2d2YWx1ZTsKLSAgR1ZhbHVlICplbnRyeV90YWdsaXN0c19ndmFsdWU7Ci0gIEdWYWx1ZSAqZW50cnlfc3RydWN0dXJlc19ndmFsdWU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAobG9jYXRpb24gIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1JFRElSRUNUKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotCi0gIGVudHJ5X2xvY2F0aW9uc19ndmFsdWUgPQotICAgICAgKEdWYWx1ZSAqKSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChSRURJUkVDVF9FTlRSWV9MT0NBVElPTlMpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKGVudHJ5X2xvY2F0aW9uc19ndmFsdWUpKTsKLSAgZW50cnlfdGFnbGlzdHNfZ3ZhbHVlID0KLSAgICAgIChHVmFsdWUgKikgZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoUkVESVJFQ1RfRU5UUllfVEFHTElTVFMpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKGVudHJ5X3RhZ2xpc3RzX2d2YWx1ZSkpOwotICBlbnRyeV9zdHJ1Y3R1cmVzX2d2YWx1ZSA9Ci0gICAgICAoR1ZhbHVlICopIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKFJFRElSRUNUX0VOVFJZX1NUUlVDVFVSRVMpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKGVudHJ5X3N0cnVjdHVyZXNfZ3ZhbHVlKSk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfU1RSSU5HKTsKLSAgaWYgKGxvY2F0aW9uKQotICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZhbCwgbG9jYXRpb24pOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKGVudHJ5X2xvY2F0aW9uc19ndmFsdWUsICZ2YWwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfVEFHX0xJU1QpOwotICBpZiAodGFnX2xpc3QpCi0gICAgZ192YWx1ZV90YWtlX2JveGVkICgmdmFsLCB0YWdfbGlzdCk7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF9hbmRfdGFrZV92YWx1ZSAoZW50cnlfdGFnbGlzdHNfZ3ZhbHVlLCAmdmFsKTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX1NUUlVDVFVSRSk7Ci0gIGlmIChlbnRyeV9zdHJ1Y3QpCi0gICAgZ192YWx1ZV90YWtlX2JveGVkICgmdmFsLCBlbnRyeV9zdHJ1Y3QpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKGVudHJ5X3N0cnVjdHVyZXNfZ3ZhbHVlLCAmdmFsKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV9yZWRpcmVjdF9lbnRyeToKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlIG9mIHR5cGUgJUdTVF9NRVNTQUdFX1JFRElSRUNUCi0gKiBAZW50cnlfaW5kZXg6IGluZGV4IG9mIHRoZSBlbnRyeSB0byBwYXJzZQotICogQGxvY2F0aW9uOiAob3V0KSAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiByZXR1cm4gbG9jYXRpb24gZm9yCi0gKiAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIGVudHJ5J3MgbG9jYXRpb24gc3RyaW5nLCBvciAlTlVMTAotICogQHRhZ19saXN0OiAob3V0KSAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiByZXR1cm4gbG9jYXRpb24gZm9yCi0gKiAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIGVudHJ5J3MgdGFnIGxpc3QsIG9yICVOVUxMCi0gKiBAZW50cnlfc3RydWN0OiAob3V0KSAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiByZXR1cm4gbG9jYXRpb24KLSAqICAgICBmb3IgdGhlIHBvaW50ZXIgdG8gdGhlIGVudHJ5J3Mgc3RydWN0dXJlLCBvciAlTlVMTAotICoKLSAqIFBhcnNlcyB0aGUgbG9jYXRpb24gYW5kL29yIHN0cnVjdHVyZSBmcm9tIHRoZSBlbnRyeSB3aXRoIHRoZSBnaXZlbiBpbmRleC4KLSAqIFRoZSBpbmRleCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgZ3N0X21lc3NhZ2VfZ2V0X251bV9yZWRpcmVjdF9lbnRyaWVzKCkgLSAxLgotICogUmV0dXJuZWQgcG9pbnRlcnMgYXJlIHZhbGlkIGZvciBhcyBsb25nIGFzIHRoaXMgbWVzc2FnZSBleGlzdHMuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZAotZ3N0X21lc3NhZ2VfcGFyc2VfcmVkaXJlY3RfZW50cnkgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBnc2l6ZSBlbnRyeV9pbmRleCwKLSAgICBjb25zdCBnY2hhciAqKiBsb2NhdGlvbiwgR3N0VGFnTGlzdCAqKiB0YWdfbGlzdCwKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiogZW50cnlfc3RydWN0KQotewotICBjb25zdCBHVmFsdWUgKnZhbDsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IEdWYWx1ZSAqZW50cnlfbG9jYXRpb25zX2d2YWx1ZTsKLSAgY29uc3QgR1ZhbHVlICplbnRyeV90YWdsaXN0c19ndmFsdWU7Ci0gIGNvbnN0IEdWYWx1ZSAqZW50cnlfc3RydWN0dXJlc19ndmFsdWU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01FU1NBR0UgKG1lc3NhZ2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUkVESVJFQ1QpOwotCi0gIGlmIChHX1VOTElLRUxZICghbG9jYXRpb24gJiYgIXRhZ19saXN0ICYmICFlbnRyeV9zdHJ1Y3QpKQotICAgIHJldHVybjsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfTUVTU0FHRV9TVFJVQ1RVUkUgKG1lc3NhZ2UpOwotCi0gIGVudHJ5X2xvY2F0aW9uc19ndmFsdWUgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoUkVESVJFQ1RfRU5UUllfTE9DQVRJT05TKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19MSVNUIChlbnRyeV9sb2NhdGlvbnNfZ3ZhbHVlKSk7Ci0gIGVudHJ5X3RhZ2xpc3RzX2d2YWx1ZSA9Ci0gICAgICBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChSRURJUkVDVF9FTlRSWV9UQUdMSVNUUykpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfTElTVCAoZW50cnlfdGFnbGlzdHNfZ3ZhbHVlKSk7Ci0gIGVudHJ5X3N0cnVjdHVyZXNfZ3ZhbHVlID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKFJFRElSRUNUX0VOVFJZX1NUUlVDVFVSRVMpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKGVudHJ5X3N0cnVjdHVyZXNfZ3ZhbHVlKSk7Ci0KLSAgaWYgKGxvY2F0aW9uKSB7Ci0gICAgdmFsID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChlbnRyeV9sb2NhdGlvbnNfZ3ZhbHVlLCBlbnRyeV9pbmRleCk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCAodmFsICE9IE5VTEwpOwotICAgICpsb2NhdGlvbiA9IGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsKTsKLSAgfQotCi0gIGlmICh0YWdfbGlzdCkgewotICAgIHZhbCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoZW50cnlfdGFnbGlzdHNfZ3ZhbHVlLCBlbnRyeV9pbmRleCk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCAodmFsICE9IE5VTEwpOwotICAgICp0YWdfbGlzdCA9IChHc3RUYWdMaXN0ICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWwpOwotICB9Ci0KLSAgaWYgKGVudHJ5X3N0cnVjdCkgewotICAgIHZhbCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoZW50cnlfc3RydWN0dXJlc19ndmFsdWUsIGVudHJ5X2luZGV4KTsKLSAgICBnX3JldHVybl9pZl9mYWlsICh2YWwgIT0gTlVMTCk7Ci0gICAgKmVudHJ5X3N0cnVjdCA9IChjb25zdCBHc3RTdHJ1Y3R1cmUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9nZXRfbnVtX3JlZGlyZWN0X2VudHJpZXM6Ci0gKiBAbWVzc2FnZTogYSAjR3N0TWVzc2FnZSBvZiB0eXBlICVHU1RfTUVTU0FHRV9SRURJUkVDVAotICoKLSAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgZW50cmllcyBzdG9yZWQgaW4gdGhlIG1lc3NhZ2UKLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1nc2l6ZQotZ3N0X21lc3NhZ2VfZ2V0X251bV9yZWRpcmVjdF9lbnRyaWVzIChHc3RNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IEdWYWx1ZSAqZW50cnlfbG9jYXRpb25zX2d2YWx1ZTsKLSAgY29uc3QgR1ZhbHVlICplbnRyeV90YWdsaXN0c19ndmFsdWU7Ci0gIGNvbnN0IEdWYWx1ZSAqZW50cnlfc3RydWN0dXJlc19ndmFsdWU7Ci0gIGdzaXplIHNpemU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19NRVNTQUdFIChtZXNzYWdlKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9SRURJUkVDVCwgMCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX01FU1NBR0VfU1RSVUNUVVJFIChtZXNzYWdlKTsKLQotICBlbnRyeV9sb2NhdGlvbnNfZ3ZhbHVlID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKFJFRElSRUNUX0VOVFJZX0xPQ0FUSU9OUykpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKGVudHJ5X2xvY2F0aW9uc19ndmFsdWUpLCAwKTsKLSAgZW50cnlfdGFnbGlzdHNfZ3ZhbHVlID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKFJFRElSRUNUX0VOVFJZX1RBR0xJU1RTKSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfTElTVCAoZW50cnlfdGFnbGlzdHNfZ3ZhbHVlKSwgMCk7Ci0gIGVudHJ5X3N0cnVjdHVyZXNfZ3ZhbHVlID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKFJFRElSRUNUX0VOVFJZX1NUUlVDVFVSRVMpKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19MSVNUIChlbnRyeV9zdHJ1Y3R1cmVzX2d2YWx1ZSksIDApOwotCi0gIHNpemUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoZW50cnlfbG9jYXRpb25zX2d2YWx1ZSk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKChzaXplID09Ci0gICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKGVudHJ5X3N0cnVjdHVyZXNfZ3ZhbHVlKSkKLSAgICAgICYmIChzaXplID09IGdzdF92YWx1ZV9saXN0X2dldF9zaXplIChlbnRyeV90YWdsaXN0c19ndmFsdWUpKSwgMCk7Ci0KLSAgcmV0dXJuIHNpemU7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0bWVzc2FnZS5oIGIvZ3N0L2dzdG1lc3NhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkNDcxZC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0bWVzc2FnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0bWVzc2FnZS5oOiBIZWFkZXIgZm9yIEdzdE1lc3NhZ2Ugc3Vic3lzdGVtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9NRVNTQUdFX0hfXwotI2RlZmluZSBfX0dTVF9NRVNTQUdFX0hfXwotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNZXNzYWdlIEdzdE1lc3NhZ2U7Ci0KLS8qKgotICogR3N0TWVzc2FnZVR5cGU6Ci0gKiBAR1NUX01FU1NBR0VfVU5LTk9XTjogYW4gdW5kZWZpbmVkIG1lc3NhZ2UKLSAqIEBHU1RfTUVTU0FHRV9FT1M6IGVuZC1vZi1zdHJlYW0gcmVhY2hlZCBpbiBhIHBpcGVsaW5lLiBUaGUgYXBwbGljYXRpb24gd2lsbAotICogb25seSByZWNlaXZlIHRoaXMgbWVzc2FnZSBpbiB0aGUgUExBWUlORyBzdGF0ZSBhbmQgZXZlcnkgdGltZSBpdCBzZXRzIGEKLSAqIHBpcGVsaW5lIHRvIFBMQVlJTkcgdGhhdCBpcyBpbiB0aGUgRU9TIHN0YXRlLiBUaGUgYXBwbGljYXRpb24gY2FuIHBlcmZvcm0gYQotICogZmx1c2hpbmcgc2VlayBpbiB0aGUgcGlwZWxpbmUsIHdoaWNoIHdpbGwgdW5kbyB0aGUgRU9TIHN0YXRlIGFnYWluLgotICogQEdTVF9NRVNTQUdFX0VSUk9SOiBhbiBlcnJvciBvY2N1cnJlZC4gV2hlbiB0aGUgYXBwbGljYXRpb24gcmVjZWl2ZXMgYW4gZXJyb3IKLSAqIG1lc3NhZ2UgaXQgc2hvdWxkIHN0b3AgcGxheWJhY2sgb2YgdGhlIHBpcGVsaW5lIGFuZCBub3QgYXNzdW1lIHRoYXQgbW9yZQotICogZGF0YSB3aWxsIGJlIHBsYXllZC4KLSAqIEBHU1RfTUVTU0FHRV9XQVJOSU5HOiBhIHdhcm5pbmcgb2NjdXJyZWQuCi0gKiBAR1NUX01FU1NBR0VfSU5GTzogYW4gaW5mbyBtZXNzYWdlIG9jY3VycmVkCi0gKiBAR1NUX01FU1NBR0VfVEFHOiBhIHRhZyB3YXMgZm91bmQuCi0gKiBAR1NUX01FU1NBR0VfQlVGRkVSSU5HOiB0aGUgcGlwZWxpbmUgaXMgYnVmZmVyaW5nLiBXaGVuIHRoZSBhcHBsaWNhdGlvbgotICogcmVjZWl2ZXMgYSBidWZmZXJpbmcgbWVzc2FnZSBpbiB0aGUgUExBWUlORyBzdGF0ZSBmb3IgYSBub24tbGl2ZSBwaXBlbGluZSBpdAotICogbXVzdCBQQVVTRSB0aGUgcGlwZWxpbmUgdW50aWwgdGhlIGJ1ZmZlcmluZyBjb21wbGV0ZXMsIHdoZW4gdGhlIHBlcmNlbnRhZ2UKLSAqIGZpZWxkIGluIHRoZSBtZXNzYWdlIGlzIDEwMCUuIEZvciBsaXZlIHBpcGVsaW5lcywgbm8gYWN0aW9uIG11c3QgYmUKLSAqIHBlcmZvcm1lZCBhbmQgdGhlIGJ1ZmZlcmluZyBwZXJjZW50YWdlIGNhbiBiZSB1c2VkIHRvIGluZm9ybSB0aGUgdXNlciBhYm91dAotICogdGhlIHByb2dyZXNzLgotICogQEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQ6IGEgc3RhdGUgY2hhbmdlIGhhcHBlbmVkCi0gKiBAR1NUX01FU1NBR0VfU1RBVEVfRElSVFk6IGFuIGVsZW1lbnQgY2hhbmdlZCBzdGF0ZSBpbiBhIHN0cmVhbWluZyB0aHJlYWQuCi0gKiBUaGlzIG1lc3NhZ2UgaXMgZGVwcmVjYXRlZC4KLSAqIEBHU1RfTUVTU0FHRV9TVEVQX0RPTkU6IGEgc3RlcHBpbmcgb3BlcmF0aW9uIGZpbmlzaGVkLgotICogQEdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREU6IGFuIGVsZW1lbnQgbm90aWZpZXMgaXRzIGNhcGFiaWxpdHkgb2YgcHJvdmlkaW5nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjbG9jay4gVGhpcyBtZXNzYWdlIGlzIHVzZWQgaW50ZXJuYWxseSBhbmQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXZlciBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgotICogQEdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q6IFRoZSBjdXJyZW50IGNsb2NrIGFzIHNlbGVjdGVkIGJ5IHRoZSBwaXBlbGluZSBiZWNhbWUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bnVzYWJsZS4gVGhlIHBpcGVsaW5lIHdpbGwgc2VsZWN0IGEgbmV3IGNsb2NrIG9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5leHQgUExBWUlORyBzdGF0ZSBjaGFuZ2UuIFRoZSBhcHBsaWNhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBzZXQgdGhlIHBpcGVsaW5lIHRvIFBBVVNFRCBhbmQgYmFjayB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgIFBMQVlJTkcgd2hlbiB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCi0gKiBAR1NUX01FU1NBR0VfTkVXX0NMT0NLOiBhIG5ldyBjbG9jayB3YXMgc2VsZWN0ZWQgaW4gdGhlIHBpcGVsaW5lLgotICogQEdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0U6IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHBpcGVsaW5lIGNoYW5nZWQuIFRoaXMKLSAqIG1lc3NhZ2UgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBuZXZlciBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgotICogQEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVM6IHN0YXR1cyBhYm91dCBhIHN0cmVhbSwgZW1pdHRlZCB3aGVuIGl0IHN0YXJ0cywKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcywgZXJyb3JzLCBldGMuLgotICogQEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OOiBtZXNzYWdlIHBvc3RlZCBieSB0aGUgYXBwbGljYXRpb24sIHBvc3NpYmx5Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpYSBhbiBhcHBsaWNhdGlvbi1zcGVjaWZpYyBlbGVtZW50LgotICogQEdTVF9NRVNTQUdFX0VMRU1FTlQ6IGVsZW1lbnQtc3BlY2lmaWMgbWVzc2FnZSwgc2VlIHRoZSBzcGVjaWZpYyBlbGVtZW50J3MKLSAqICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uCi0gKiBAR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVDogcGlwZWxpbmUgc3RhcnRlZCBwbGF5YmFjayBvZiBhIHNlZ21lbnQuIFRoaXMKLSAqIG1lc3NhZ2UgaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBuZXZlciBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgotICogQEdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORTogcGlwZWxpbmUgY29tcGxldGVkIHBsYXliYWNrIG9mIGEgc2VnbWVudC4gVGhpcwotICogbWVzc2FnZSBpcyBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGFmdGVyIGFsbCBlbGVtZW50cyB0aGF0IHBvc3RlZAotICogQEdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQgcG9zdGVkIGEgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FIG1lc3NhZ2UuCi0gKiBAR1NUX01FU1NBR0VfRFVSQVRJT05fQ0hBTkdFRDogVGhlIGR1cmF0aW9uIG9mIGEgcGlwZWxpbmUgY2hhbmdlZC4gVGhlCi0gKiBhcHBsaWNhdGlvbiBjYW4gZ2V0IHRoZSBuZXcgZHVyYXRpb24gd2l0aCBhIGR1cmF0aW9uIHF1ZXJ5LgotICogQEdTVF9NRVNTQUdFX0FTWU5DX1NUQVJUOiBQb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IHN0YXJ0IGFuIEFTWU5DCi0gKiAjR3N0U3RhdGVDaGFuZ2UuIFRoaXMgbWVzc2FnZSBpcyBub3QgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbiBidXQgaXMgdXNlZAotICogaW50ZXJuYWxseS4KLSAqIEBHU1RfTUVTU0FHRV9BU1lOQ19ET05FOiBQb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IGNvbXBsZXRlIGFuIEFTWU5DCi0gKiAjR3N0U3RhdGVDaGFuZ2UuIFRoZSBhcHBsaWNhdGlvbiB3aWxsIG9ubHkgcmVjZWl2ZSB0aGlzIG1lc3NhZ2UgZnJvbSB0aGUgdG9wbGV2ZWwKLSAqIHBpcGVsaW5lLgotICogQEdTVF9NRVNTQUdFX0xBVEVOQ1k6IFBvc3RlZCBieSBlbGVtZW50cyB3aGVuIHRoZWlyIGxhdGVuY3kgY2hhbmdlcy4gVGhlCi0gKiBhcHBsaWNhdGlvbiBzaG91bGQgcmVjYWxjdWxhdGUgYW5kIGRpc3RyaWJ1dGUgYSBuZXcgbGF0ZW5jeS4KLSAqIEBHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFOiBQb3N0ZWQgYnkgZWxlbWVudHMgd2hlbiB0aGV5IHdhbnQgdGhlIHBpcGVsaW5lIHRvCi0gKiBjaGFuZ2Ugc3RhdGUuIFRoaXMgbWVzc2FnZSBpcyBhIHN1Z2dlc3Rpb24gdG8gdGhlIGFwcGxpY2F0aW9uIHdoaWNoIGNhbgotICogZGVjaWRlIHRvIHBlcmZvcm0gdGhlIHN0YXRlIGNoYW5nZSBvbiAocGFydCBvZikgdGhlIHBpcGVsaW5lLgotICogQEdTVF9NRVNTQUdFX1NURVBfU1RBUlQ6IEEgc3RlcHBpbmcgb3BlcmF0aW9uIHdhcyBzdGFydGVkLgotICogQEdTVF9NRVNTQUdFX1FPUzogQSBidWZmZXIgd2FzIGRyb3BwZWQgb3IgYW4gZWxlbWVudCBjaGFuZ2VkIGl0cyBwcm9jZXNzaW5nCi0gKiBzdHJhdGVneSBmb3IgUXVhbGl0eSBvZiBTZXJ2aWNlIHJlYXNvbnMuCi0gKiBAR1NUX01FU1NBR0VfUFJPR1JFU1M6IEEgcHJvZ3Jlc3MgbWVzc2FnZS4KLSAqIEBHU1RfTUVTU0FHRV9UT0M6IEEgbmV3IHRhYmxlIG9mIGNvbnRlbnRzIChUT0MpIHdhcyBmb3VuZCBvciBwcmV2aW91c2x5IGZvdW5kIFRPQwotICogd2FzIHVwZGF0ZWQuCi0gKiBAR1NUX01FU1NBR0VfUkVTRVRfVElNRTogTWVzc2FnZSB0byByZXF1ZXN0IHJlc2V0dGluZyB0aGUgcGlwZWxpbmUncwotICogICAgIHJ1bm5pbmcgdGltZSBmcm9tIHRoZSBwaXBlbGluZS4gVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXNzYWdlIHdoaWNoCi0gKiAgICAgYXBwbGljYXRpb25zIHdpbGwgbGlrZWx5IG5ldmVyIHJlY2VpdmUuCi0gKiBAR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJUOiBNZXNzYWdlIGluZGljYXRpbmcgc3RhcnQgb2YgYSBuZXcgc3RyZWFtLiBVc2VmdWwKLSAqICAgICBlLmcuIHdoZW4gdXNpbmcgcGxheWJpbiBpbiBnYXBsZXNzIHBsYXliYWNrIG1vZGUsIHRvIGdldCBub3RpZmllZCB3aGVuCi0gKiAgICAgdGhlIG5leHQgdGl0bGUgYWN0dWFsbHkgc3RhcnRzIHBsYXlpbmcgKHdoaWNoIHdpbGwgYmUgc29tZSB0aW1lIGFmdGVyCi0gKiAgICAgdGhlIFVSSSBmb3IgdGhlIG5leHQgdGl0bGUgaGFzIGJlZW4gc2V0KS4KLSAqIEBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQ6IE1lc3NhZ2UgaW5kaWNhdGluZyB0aGF0IGFuIGVsZW1lbnQgd2FudHMgYSBzcGVjaWZpYyBjb250ZXh0IChTaW5jZSAxLjIpCi0gKiBAR1NUX01FU1NBR0VfSEFWRV9DT05URVhUOiBNZXNzYWdlIGluZGljYXRpbmcgdGhhdCBhbiBlbGVtZW50IGNyZWF0ZWQgYSBjb250ZXh0IChTaW5jZSAxLjIpCi0gKiBAR1NUX01FU1NBR0VfRVhURU5ERUQ6IE1lc3NhZ2UgaXMgYW4gZXh0ZW5kZWQgbWVzc2FnZSB0eXBlIChzZWUgYmVsb3cpLgotICogICAgIFRoZXNlIGV4dGVuZGVkIG1lc3NhZ2UgSURzIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgd2l0aCBtYXNrLWJhc2VkIEFQSQotICogICAgIGxpa2UgZ3N0X2J1c19wb2xsKCkgb3IgZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQoKSwgYnV0IHlvdSBjYW4gc3RpbGwKLSAqICAgICBmaWx0ZXIgZm9yIEdTVF9NRVNTQUdFX0VYVEVOREVEIGFuZCB0aGVuIGNoZWNrIHRoZSByZXN1bHQgZm9yIHRoZQotICogICAgIHNwZWNpZmljIHR5cGUuIChTaW5jZSAxLjQpCi0gKiBAR1NUX01FU1NBR0VfREVWSUNFX0FEREVEOiBNZXNzYWdlIGluZGljYXRpbmcgYSAjR3N0RGV2aWNlIHdhcyBhZGRlZCB0bwotICogICAgIGEgI0dzdERldmljZVByb3ZpZGVyIChTaW5jZSAxLjQpCi0gKiBAR1NUX01FU1NBR0VfREVWSUNFX1JFTU9WRUQ6IE1lc3NhZ2UgaW5kaWNhdGluZyBhICNHc3REZXZpY2Ugd2FzIHJlbW92ZWQKLSAqICAgICBmcm9tIGEgI0dzdERldmljZVByb3ZpZGVyIChTaW5jZSAxLjQpCi0gKiBAR1NUX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZOiBNZXNzYWdlIGluZGljYXRpbmcgYSAjR09iamVjdCBwcm9wZXJ0eSBoYXMKLSAqICAgICBjaGFuZ2VkIChTaW5jZSAxLjEwKQotICogQEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OOiBNZXNzYWdlIGluZGljYXRpbmcgYSBuZXcgI0dzdFN0cmVhbUNvbGxlY3Rpb24KLSAqICAgICBpcyBhdmFpbGFibGUgKFNpbmNlIDEuMTApCi0gKiBAR1NUX01FU1NBR0VfU1RSRUFNU19TRUxFQ1RFRDogTWVzc2FnZSBpbmRpY2F0aW5nIHRoZSBhY3RpdmUgc2VsZWN0aW9uIG9mCi0gKiAgICAgI0dzdFN0cmVhbXMgaGFzIGNoYW5nZWQgKFNpbmNlIDEuMTApCi0gKiBAR1NUX01FU1NBR0VfUkVESVJFQ1Q6IE1lc3NhZ2UgaW5kaWNhdGluZyB0byByZXF1ZXN0IHRoZSBhcHBsaWNhdGlvbiB0bwotICogICAgIHRyeSB0byBwbGF5IHRoZSBnaXZlbiBVUkwocykuIFVzZWZ1bCBpZiBmb3IgZXhhbXBsZSBhIEhUVFAgMzAyLzMwMwotICogICAgIHJlc3BvbnNlIGlzIHJlY2VpdmVkIHdpdGggYSBub24tSFRUUCBVUkwgaW5zaWRlLiAoU2luY2UgMS4xMCkKLSAqIEBHU1RfTUVTU0FHRV9BTlk6IG1hc2sgZm9yIGFsbCBvZiB0aGUgYWJvdmUgbWVzc2FnZXMuCi0gKgotICogVGhlIGRpZmZlcmVudCBtZXNzYWdlIHR5cGVzIHRoYXQgYXJlIGF2YWlsYWJsZS4KLSAqLwotLyogTk9URToga2VlcCBpbiBzeW5jIHdpdGggcXVhcmsgcmVnaXN0cmF0aW9uIGluIGdzdG1lc3NhZ2UuYwotICogTk9URToga2VlcCBHU1RfTUVTU0FHRV9BTlkgYSB2YWxpZCBnaW50IHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgotICovCi0vKiBGSVhNRTogMi4wOiBNYWtlIGl0IE5PVCBmbGFncywganVzdCBhIHJlZ3VsYXIgMSwyLDMsNC4uIGVudW1lcmF0aW9uICovCi0vKiBGSVhNRTogRm9yIEdTVF9NRVNTQUdFX0FOWSB+MCAtPiAweGZmZmZmZmZmIHNlZQotICogICAgICAgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI2MzMKLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9NRVNTQUdFX1VOS05PV04gICAgICAgICAgID0gMCwKLSAgR1NUX01FU1NBR0VfRU9TICAgICAgICAgICAgICAgPSAoMSA8PCAwKSwKLSAgR1NUX01FU1NBR0VfRVJST1IgICAgICAgICAgICAgPSAoMSA8PCAxKSwKLSAgR1NUX01FU1NBR0VfV0FSTklORyAgICAgICAgICAgPSAoMSA8PCAyKSwKLSAgR1NUX01FU1NBR0VfSU5GTyAgICAgICAgICAgICAgPSAoMSA8PCAzKSwKLSAgR1NUX01FU1NBR0VfVEFHICAgICAgICAgICAgICAgPSAoMSA8PCA0KSwKLSAgR1NUX01FU1NBR0VfQlVGRkVSSU5HICAgICAgICAgPSAoMSA8PCA1KSwKLSAgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCAgICAgPSAoMSA8PCA2KSwKLSAgR1NUX01FU1NBR0VfU1RBVEVfRElSVFkgICAgICAgPSAoMSA8PCA3KSwKLSAgR1NUX01FU1NBR0VfU1RFUF9ET05FICAgICAgICAgPSAoMSA8PCA4KSwKLSAgR1NUX01FU1NBR0VfQ0xPQ0tfUFJPVklERSAgICAgPSAoMSA8PCA5KSwKLSAgR1NUX01FU1NBR0VfQ0xPQ0tfTE9TVCAgICAgICAgPSAoMSA8PCAxMCksCi0gIEdTVF9NRVNTQUdFX05FV19DTE9DSyAgICAgICAgID0gKDEgPDwgMTEpLAotICBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFICA9ICgxIDw8IDEyKSwKLSAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyAgICAgPSAoMSA8PCAxMyksCi0gIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OICAgICAgID0gKDEgPDwgMTQpLAotICBHU1RfTUVTU0FHRV9FTEVNRU5UICAgICAgICAgICA9ICgxIDw8IDE1KSwKLSAgR1NUX01FU1NBR0VfU0VHTUVOVF9TVEFSVCAgICAgPSAoMSA8PCAxNiksCi0gIEdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSAgICAgID0gKDEgPDwgMTcpLAotICBHU1RfTUVTU0FHRV9EVVJBVElPTl9DSEFOR0VEICA9ICgxIDw8IDE4KSwKLSAgR1NUX01FU1NBR0VfTEFURU5DWSAgICAgICAgICAgPSAoMSA8PCAxOSksCi0gIEdTVF9NRVNTQUdFX0FTWU5DX1NUQVJUICAgICAgID0gKDEgPDwgMjApLAotICBHU1RfTUVTU0FHRV9BU1lOQ19ET05FICAgICAgICA9ICgxIDw8IDIxKSwKLSAgR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURSAgICAgPSAoMSA8PCAyMiksCi0gIEdTVF9NRVNTQUdFX1NURVBfU1RBUlQgICAgICAgID0gKDEgPDwgMjMpLAotICBHU1RfTUVTU0FHRV9RT1MgICAgICAgICAgICAgICA9ICgxIDw8IDI0KSwKLSAgR1NUX01FU1NBR0VfUFJPR1JFU1MgICAgICAgICAgPSAoMSA8PCAyNSksCi0gIEdTVF9NRVNTQUdFX1RPQyAgICAgICAgICAgICAgID0gKDEgPDwgMjYpLAotICBHU1RfTUVTU0FHRV9SRVNFVF9USU1FICAgICAgICA9ICgxIDw8IDI3KSwKLSAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJUICAgICAgPSAoMSA8PCAyOCksCi0gIEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCAgICAgID0gKDEgPDwgMjkpLAotICBHU1RfTUVTU0FHRV9IQVZFX0NPTlRFWFQgICAgICA9ICgxIDw8IDMwKSwKLSAgR1NUX01FU1NBR0VfRVhURU5ERUQgICAgICAgICAgPSAoZ2ludCkgKDF1IDw8IDMxKSwKLSAgR1NUX01FU1NBR0VfREVWSUNFX0FEREVEICAgICAgPSBHU1RfTUVTU0FHRV9FWFRFTkRFRCArIDEsCi0gIEdTVF9NRVNTQUdFX0RFVklDRV9SRU1PVkVEICAgID0gR1NUX01FU1NBR0VfRVhURU5ERUQgKyAyLAotICBHU1RfTUVTU0FHRV9QUk9QRVJUWV9OT1RJRlkgICA9IEdTVF9NRVNTQUdFX0VYVEVOREVEICsgMywKLSAgR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04gPSBHU1RfTUVTU0FHRV9FWFRFTkRFRCArIDQsCi0gIEdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQgID0gR1NUX01FU1NBR0VfRVhURU5ERUQgKyA1LAotICBHU1RfTUVTU0FHRV9SRURJUkVDVCAgICAgICAgICA9IEdTVF9NRVNTQUdFX0VYVEVOREVEICsgNiwKLSAgR1NUX01FU1NBR0VfQU5ZICAgICAgICAgICAgICAgPSAoZ2ludCkgKDB4ZmZmZmZmZmYpCi19IEdzdE1lc3NhZ2VUeXBlOwotCi0jaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGVsZW1lbnQuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dGFnbGlzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cXVlcnkuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dG9jLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGRldmljZS5oPgotI2luY2x1ZGUgPGdzdC9nc3RzdHJlYW1jb2xsZWN0aW9uLmg+Ci0KLUdTVF9FWFBPUlQgR1R5cGUgX2dzdF9tZXNzYWdlX3R5cGU7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfTUVTU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAoX2dzdF9tZXNzYWdlX3R5cGUpCi0jZGVmaW5lIEdTVF9JU19NRVNTQUdFKG9iaikgICAgICAgICAgICAgICAgICAgICAgKEdTVF9JU19NSU5JX09CSkVDVF9UWVBFIChvYmosIEdTVF9UWVBFX01FU1NBR0UpKQotI2RlZmluZSBHU1RfTUVTU0FHRV9DQVNUKG9iaikgICAgICAgICAgICAgICAgICAgICgoR3N0TWVzc2FnZSopKG9iaikpCi0jZGVmaW5lIEdTVF9NRVNTQUdFKG9iaikgICAgICAgICAgICAgICAgICAgICAgICAgKEdTVF9NRVNTQUdFX0NBU1Qob2JqKSkKLQotLyogdGhlIGxvY2sgaXMgdXNlZCB0byBoYW5kbGUgdGhlIHN5bmNocm9ub3VzIGhhbmRsaW5nIG9mIG1lc3NhZ2VzLAotICogdGhlIGVtaXRpbmcgdGhyZWFkIGlzIGJsb2NrIHVudGlsIHRoZSBoYW5kbGluZyB0aHJlYWQgcHJvY2Vzc2VkCi0gKiB0aGUgbWVzc2FnZSB1c2luZyB0aGlzIG11dGV4L2NvbmQgcGFpciAqLwotI2RlZmluZSBHU1RfTUVTU0FHRV9HRVRfTE9DSyhtZXNzYWdlKSAgICgmR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0+bG9jaykKLSNkZWZpbmUgR1NUX01FU1NBR0VfTE9DSyhtZXNzYWdlKSAgICAgICBnX211dGV4X2xvY2soR1NUX01FU1NBR0VfR0VUX0xPQ0sobWVzc2FnZSkpCi0jZGVmaW5lIEdTVF9NRVNTQUdFX1VOTE9DSyhtZXNzYWdlKSAgICAgZ19tdXRleF91bmxvY2soR1NUX01FU1NBR0VfR0VUX0xPQ0sobWVzc2FnZSkpCi0jZGVmaW5lIEdTVF9NRVNTQUdFX0dFVF9DT05EKG1lc3NhZ2UpICAgKCZHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLT5jb25kKQotI2RlZmluZSBHU1RfTUVTU0FHRV9XQUlUKG1lc3NhZ2UpICAgICAgIGdfY29uZF93YWl0KEdTVF9NRVNTQUdFX0dFVF9DT05EKG1lc3NhZ2UpLEdTVF9NRVNTQUdFX0dFVF9MT0NLKG1lc3NhZ2UpKQotI2RlZmluZSBHU1RfTUVTU0FHRV9TSUdOQUwobWVzc2FnZSkgICAgIGdfY29uZF9zaWduYWwoR1NUX01FU1NBR0VfR0VUX0NPTkQobWVzc2FnZSkpCi0KLS8qKgotICogR1NUX01FU1NBR0VfVFlQRToKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlCi0gKgotICogR2V0IHRoZSAjR3N0TWVzc2FnZVR5cGUgb2YgQG1lc3NhZ2UuCi0gKi8KLSNkZWZpbmUgR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAgICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0+dHlwZSkKLS8qKgotICogR1NUX01FU1NBR0VfVFlQRV9JU19FWFRFTkRFRDoKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlCi0gKgotICogQ2hlY2sgaWYgdGhlIG1lc3NhZ2UgaXMgaW4gdGhlIGV4dGVuZGVkIG1lc3NhZ2UgZ3JvdXAKLSAqIFNpbmNlOiAxLjQKLSAqLwotI2RlZmluZSBHU1RfTUVTU0FHRV9UWVBFX0lTX0VYVEVOREVEKG1lc3NhZ2UpICAgICAgICghIShHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLT50eXBlICYgR1NUX01FU1NBR0VfRVhURU5ERUQpKQotCi0vKioKLSAqIEdTVF9NRVNTQUdFX1RZUEVfTkFNRToKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlCi0gKgotICogR2V0IGEgY29uc3RhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSAjR3N0TWVzc2FnZVR5cGUgb2YgQG1lc3NhZ2UuCi0gKi8KLSNkZWZpbmUgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpICBnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpCi0vKioKLSAqIEdTVF9NRVNTQUdFX1RJTUVTVEFNUDoKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlCi0gKgotICogR2V0IHRoZSB0aW1lc3RhbXAgb2YgQG1lc3NhZ2UuIFRoaXMgaXMgdGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBtZXNzYWdlCi0gKiB3YXMgY3JlYXRlZC4KLSAqLwotI2RlZmluZSBHU1RfTUVTU0FHRV9USU1FU1RBTVAobWVzc2FnZSkgIChHU1RfTUVTU0FHRV9DQVNUKG1lc3NhZ2UpLT50aW1lc3RhbXApCi0vKioKLSAqIEdTVF9NRVNTQUdFX1NSQzoKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlCi0gKgotICogR2V0IHRoZSBvYmplY3QgdGhhdCBwb3N0ZWQgQG1lc3NhZ2UuCi0gKi8KLSNkZWZpbmUgR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpICAgICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0+c3JjKQotCi0vKioKLSAqIEdTVF9NRVNTQUdFX1NFUU5VTToKLSAqIEBtZXNzYWdlOiBhICNHc3RNZXNzYWdlCi0gKgotICogR2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgQG1lc3NhZ2UuCi0gKi8KLSNkZWZpbmUgR1NUX01FU1NBR0VfU0VRTlVNKG1lc3NhZ2UpICAgICAoR1NUX01FU1NBR0VfQ0FTVChtZXNzYWdlKS0+c2VxbnVtKQotCi0vKioKLSAqIEdTVF9NRVNTQUdFX1NSQ19OQU1FOgotICogQG1lc3NhZ2U6IGEgI0dzdE1lc3NhZ2UKLSAqCi0gKiBHZXQgdGhlIG5hbWUgb2YgdGhlIG9iamVjdCB0aGF0IHBvc3RlZCBAbWVzc2FnZS4gUmV0dXJucyAiKE5VTEwpIiBpZgotICogdGhlIG1lc3NhZ2UgaGFzIG5vIHNvdXJjZSBvYmplY3Qgc2V0LgotICovCi0jZGVmaW5lIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpICAgKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSA/IFwKLSAgICBHU1RfT0JKRUNUX05BTUUgKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSkgOiAiKE5VTEwpIikKLQotLyoqCi0gKiBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlOgotICogQEdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX0xJTks6IFBhZCBsaW5raW5nIGlzIHN0YXJ0aW5nIG9yIGRvbmUuCi0gKiBAR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfVU5MSU5LOiBQYWQgdW5saW5raW5nIGlzIHN0YXJ0aW5nIG9yIGRvbmUuCi0gKgotICogVGhlIHR5cGUgb2YgYSAlR1NUX01FU1NBR0VfU1RSVUNUVVJFX0NIQU5HRS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfTElOSyAgID0gMCwKLSAgR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfVU5MSU5LID0gMQotfSBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlOwotCi0vKioKLSAqIEdzdFN0cmVhbVN0YXR1c1R5cGU6Ci0gKiBAR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9DUkVBVEU6IEEgbmV3IHRocmVhZCBuZWVkIHRvIGJlIGNyZWF0ZWQuCi0gKiBAR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUjogYSB0aHJlYWQgZW50ZXJlZCBpdHMgbG9vcCBmdW5jdGlvbgotICogQEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfTEVBVkU6IGEgdGhyZWFkIGxlZnQgaXRzIGxvb3AgZnVuY3Rpb24KLSAqIEBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0RFU1RST1k6IGEgdGhyZWFkIGlzIGRlc3Ryb3llZAotICogQEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RBUlQ6IGEgdGhyZWFkIGlzIHN0YXJ0ZWQKLSAqIEBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1BBVVNFOiBhIHRocmVhZCBpcyBwYXVzZWQKLSAqIEBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUT1A6IGEgdGhyZWFkIGlzIHN0b3BwZWQKLSAqCi0gKiBUaGUgdHlwZSBvZiBhICVHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTLiBUaGUgc3RyZWFtIHN0YXR1cyBtZXNzYWdlcyBpbmZvcm0gdGhlCi0gKiBhcHBsaWNhdGlvbiBvZiBuZXcgc3RyZWFtaW5nIHRocmVhZHMgYW5kIHRoZWlyIHN0YXR1cy4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9DUkVBVEUgICA9IDAsCi0gIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfRU5URVIgICAgPSAxLAotICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0xFQVZFICAgID0gMiwKLSAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9ERVNUUk9ZICA9IDMsCi0KLSAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9TVEFSVCAgICA9IDgsCi0gIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfUEFVU0UgICAgPSA5LAotICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUT1AgICAgID0gMTAKLX0gR3N0U3RyZWFtU3RhdHVzVHlwZTsKLQotLyoqCi0gKiBHc3RQcm9ncmVzc1R5cGU6Ci0gKiBAR1NUX1BST0dSRVNTX1RZUEVfU1RBUlQ6IEEgbmV3IHRhc2sgc3RhcnRlZC4KLSAqIEBHU1RfUFJPR1JFU1NfVFlQRV9DT05USU5VRTogQSB0YXNrIGNvbXBsZXRlZCBhbmQgYSBuZXcgb25lIGNvbnRpbnVlcy4KLSAqIEBHU1RfUFJPR1JFU1NfVFlQRV9DT01QTEVURTogQSB0YXNrIGNvbXBsZXRlZC4KLSAqIEBHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRDogQSB0YXNrIHdhcyBjYW5jZWxlZC4KLSAqIEBHU1RfUFJPR1JFU1NfVFlQRV9FUlJPUjogQSB0YXNrIGNhdXNlZCBhbiBlcnJvci4gQW4gZXJyb3IgbWVzc2FnZSBpcyBhbHNvCi0gKiAgICAgICAgICBwb3N0ZWQgb24gdGhlIGJ1cy4KLSAqCi0gKiBUaGUgdHlwZSBvZiBhICVHU1RfTUVTU0FHRV9QUk9HUkVTUy4gVGhlIHByb2dyZXNzIG1lc3NhZ2VzIGluZm9ybSB0aGUKLSAqIGFwcGxpY2F0aW9uIG9mIHRoZSBzdGF0dXMgb2YgYXN5bmNocm9ub3VzIHRhc2tzLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCAgICA9IDAsCi0gIEdTVF9QUk9HUkVTU19UWVBFX0NPTlRJTlVFID0gMSwKLSAgR1NUX1BST0dSRVNTX1RZUEVfQ09NUExFVEUgPSAyLAotICBHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRCA9IDMsCi0gIEdTVF9QUk9HUkVTU19UWVBFX0VSUk9SICAgID0gNAotfSBHc3RQcm9ncmVzc1R5cGU7Ci0KLS8qKgotICogR3N0TWVzc2FnZToKLSAqIEBtaW5pX29iamVjdDogdGhlIHBhcmVudCBzdHJ1Y3R1cmUKLSAqIEB0eXBlOiB0aGUgI0dzdE1lc3NhZ2VUeXBlIG9mIHRoZSBtZXNzYWdlCi0gKiBAdGltZXN0YW1wOiB0aGUgdGltZXN0YW1wIG9mIHRoZSBtZXNzYWdlCi0gKiBAc3JjOiB0aGUgc3JjIG9mIHRoZSBtZXNzYWdlCi0gKiBAc2VxbnVtOiB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBtZXNzYWdlCi0gKgotICogQSAjR3N0TWVzc2FnZS4KLSAqLwotc3RydWN0IF9Hc3RNZXNzYWdlCi17Ci0gIEdzdE1pbmlPYmplY3QgICBtaW5pX29iamVjdDsKLQotICAvKjwgcHVibGljID4gKi8vKiB3aXRoIENPVyAqLwotICBHc3RNZXNzYWdlVHlwZSAgdHlwZTsKLSAgZ3VpbnQ2NCAgICAgICAgIHRpbWVzdGFtcDsKLSAgR3N0T2JqZWN0ICAgICAgKnNyYzsKLSAgZ3VpbnQzMiAgICAgICAgIHNlcW51bTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8vKiB3aXRoIE1FU1NBR0VfTE9DSyAqLwotICBHTXV0ZXggICAgICAgICAgbG9jazsgICAgICAgICAgICAgICAgIC8qIGxvY2sgYW5kIGNvbmQgZm9yIGFzeW5jIGRlbGl2ZXJ5ICovCi0gIEdDb25kICAgICAgICAgICBjb25kOwotfTsKLQotR1R5cGUgICAgICAgICAgIGdzdF9tZXNzYWdlX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOwotCi1jb25zdCBnY2hhciogICAgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAgICAgICAoR3N0TWVzc2FnZVR5cGUgdHlwZSk7Ci1HUXVhcmsgICAgICAgICAgZ3N0X21lc3NhZ2VfdHlwZV90b19xdWFyayAgICAgICAoR3N0TWVzc2FnZVR5cGUgdHlwZSk7Ci0KLS8qIHJlZmNvdW50aW5nICovCi0vKioKLSAqIGdzdF9tZXNzYWdlX3JlZjoKLSAqIEBtc2c6IHRoZSBtZXNzYWdlIHRvIHJlZgotICoKLSAqIENvbnZlbmllbmNlIG1hY3JvIHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG1lc3NhZ2UuCi0gKgotICogUmV0dXJuczogQG1zZyAoZm9yIGNvbnZlbmllbmNlIHdoZW4gZG9pbmcgYXNzaWdubWVudHMpCi0gKi8KLXN0YXRpYyBpbmxpbmUgR3N0TWVzc2FnZSAqCi1nc3RfbWVzc2FnZV9yZWYgKEdzdE1lc3NhZ2UgKiBtc2cpCi17Ci0gIHJldHVybiAoR3N0TWVzc2FnZSAqKSBnc3RfbWluaV9vYmplY3RfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAobXNnKSk7Ci19Ci0KLS8qKgotICogZ3N0X21lc3NhZ2VfdW5yZWY6Ci0gKiBAbXNnOiB0aGUgbWVzc2FnZSB0byB1bnJlZgotICoKLSAqIENvbnZlbmllbmNlIG1hY3JvIHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG1lc3NhZ2UsIHBvc3NpYmx5Ci0gKiBmcmVlaW5nIGl0LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9tZXNzYWdlX3VucmVmIChHc3RNZXNzYWdlICogbXNnKQotewotICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtc2cpKTsKLX0KLQotLyogY29weSBtZXNzYWdlICovCi0vKioKLSAqIGdzdF9tZXNzYWdlX2NvcHk6Ci0gKiBAbXNnOiB0aGUgbWVzc2FnZSB0byBjb3B5Ci0gKgotICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIG1lc3NhZ2UuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtZXNzYWdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgY29weSBvZiBAbXNnLgotICoKLSAqIE1UIHNhZmUKLSAqLwotc3RhdGljIGlubGluZSBHc3RNZXNzYWdlICoKLWdzdF9tZXNzYWdlX2NvcHkgKGNvbnN0IEdzdE1lc3NhZ2UgKiBtc2cpCi17Ci0gIHJldHVybiBHU1RfTUVTU0FHRV9DQVNUIChnc3RfbWluaV9vYmplY3RfY29weSAoR1NUX01JTklfT0JKRUNUX0NPTlNUX0NBU1QgKG1zZykpKTsKLX0KLQotLyoqCi0gKiBnc3RfbWVzc2FnZV9pc193cml0YWJsZToKLSAqIEBtc2c6IGEgI0dzdE1lc3NhZ2UKLSAqCi0gKiBUZXN0cyBpZiB5b3UgY2FuIHNhZmVseSB3cml0ZSBpbnRvIGEgbWVzc2FnZSdzIHN0cnVjdHVyZSBvciB2YWxpZGx5Ci0gKiBtb2RpZnkgdGhlIHNlcW51bSBhbmQgdGltZXN0YW1wIGZpZWxkcy4KLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF9tZXNzYWdlX2lzX3dyaXRhYmxlKG1zZykgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG1zZykpCi0vKioKLSAqIGdzdF9tZXNzYWdlX21ha2Vfd3JpdGFibGU6Ci0gKiBAbXNnOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBtZXNzYWdlIHRvIG1ha2Ugd3JpdGFibGUKLSAqCi0gKiBDaGVja3MgaWYgYSBtZXNzYWdlIGlzIHdyaXRhYmxlLiBJZiBub3QsIGEgd3JpdGFibGUgY29weSBpcyBtYWRlIGFuZAotICogcmV0dXJuZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG1lc3NhZ2UgKHBvc3NpYmx5IGEgZHVwbGljYXRlKSB0aGF0IGlzIHdyaXRhYmxlLgotICoKLSAqIE1UIHNhZmUKLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF9tZXNzYWdlX21ha2Vfd3JpdGFibGUobXNnKSAgR1NUX01FU1NBR0VfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChtc2cpKSkKLS8qKgotICogZ3N0X21lc3NhZ2VfcmVwbGFjZToKLSAqIEBvbGRfbWVzc2FnZTogKGlub3V0KSAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogcG9pbnRlciB0byBhCi0gKiAgICAgcG9pbnRlciB0byBhICNHc3RNZXNzYWdlIHRvIGJlIHJlcGxhY2VkLgotICogQG5ld19tZXNzYWdlOiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiBwb2ludGVyIHRvIGEgI0dzdE1lc3NhZ2UgdGhhdCB3aWxsCi0gKiAgICAgcmVwbGFjZSB0aGUgbWVzc2FnZSBwb2ludGVkIHRvIGJ5IEBvbGRfbWVzc2FnZS4KLSAqCi0gKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gYSAjR3N0TWVzc2FnZSB0byBwb2ludCB0byBhIGRpZmZlcmVudCAjR3N0TWVzc2FnZS4gVGhlCi0gKiBtb2RpZmljYXRpb24gaXMgZG9uZSBhdG9taWNhbGx5IChzbyB0aGlzIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhyZWFkIHNhZmV0eQotICogaW4gc29tZSBjYXNlcyksIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5ICh0aGUgb2xkCi0gKiBtZXNzYWdlIGlzIHVucmVmZmVkLCB0aGUgbmV3IG9uZSBpcyByZWZmZWQpLgotICoKLSAqIEVpdGhlciBAbmV3X21lc3NhZ2Ugb3IgdGhlICNHc3RNZXNzYWdlIHBvaW50ZWQgdG8gYnkgQG9sZF9tZXNzYWdlIG1heSBiZSAlTlVMTC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmV3X21lc3NhZ2Ugd2FzIGRpZmZlcmVudCBmcm9tIEBvbGRfbWVzc2FnZQotICovCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1nc3RfbWVzc2FnZV9yZXBsYWNlIChHc3RNZXNzYWdlICoqb2xkX21lc3NhZ2UsIEdzdE1lc3NhZ2UgKm5ld19tZXNzYWdlKQotewotICByZXR1cm4gZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKChHc3RNaW5pT2JqZWN0ICoqKSBvbGRfbWVzc2FnZSwgKEdzdE1pbmlPYmplY3QgKikgbmV3X21lc3NhZ2UpOwotfQotCi0KLS8qIGN1c3RvbSBtZXNzYWdlcyAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19jdXN0b20gICAgICAgICAgKEdzdE1lc3NhZ2VUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0T2JqZWN0ICAgICogc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkgR19HTlVDX01BTExPQzsKLWNvbnN0IEdzdFN0cnVjdHVyZSAqCi0gICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSk7Ci0KLWdib29sZWFuICAgICAgICBnc3RfbWVzc2FnZV9oYXNfbmFtZSAgICAgICAgICAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBjb25zdCBnY2hhciAqbmFtZSk7Ci0KLS8qIGlkZW50aWZpZXJzIGZvciBldmVudHMgYW5kIG1lc3NhZ2VzICovCi1ndWludDMyICAgICAgICAgZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bSAgICAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSk7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAgICAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgZ3VpbnQzMiBzZXFudW0pOwotCi0vKiBFT1MgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfZW9zICAgICAgICAgICAgIChHc3RPYmplY3QgKiBzcmMpIEdfR05VQ19NQUxMT0M7Ci0KLS8qIEVSUk9SICovCi0KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfZXJyb3IgICAgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdFcnJvciAqIGVycm9yLCBjb25zdCBnY2hhciAqIGRlYnVnKSBHX0dOVUNfTUFMTE9DOwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19lcnJvcl93aXRoX2RldGFpbHMgKEdzdE9iamVjdCAqIHNyYywgR0Vycm9yICogZXJyb3IsIGNvbnN0IGdjaGFyICogZGVidWcsIEdzdFN0cnVjdHVyZSAqIGRldGFpbHMpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgICAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR0Vycm9yICoqZ2Vycm9yLCBnY2hhciAqKmRlYnVnKTsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcl9kZXRhaWxzIChHc3RNZXNzYWdlICptZXNzYWdlLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKipzdHJ1Y3R1cmUpOwotCi0vKiBXQVJOSU5HICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcgICAgICAgICAoR3N0T2JqZWN0ICogc3JjLCBHRXJyb3IgKiBlcnJvciwgY29uc3QgZ2NoYXIgKiBkZWJ1ZykgR19HTlVDX01BTExPQzsKLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfd2FybmluZ193aXRoX2RldGFpbHMgKEdzdE9iamVjdCAqIHNyYywgR0Vycm9yICogZXJyb3IsIGNvbnN0IGdjaGFyICogZGVidWcsIEdzdFN0cnVjdHVyZSAqIGRldGFpbHMpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR0Vycm9yICoqZ2Vycm9yLCBnY2hhciAqKmRlYnVnKTsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nX2RldGFpbHMgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IEdzdFN0cnVjdHVyZSAqKnN0cnVjdHVyZSk7Ci0KLS8qIElORk8gKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfaW5mbyAgICAgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdFcnJvciAqIGVycm9yLCBjb25zdCBnY2hhciAqIGRlYnVnKSBHX0dOVUNfTUFMTE9DOwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19pbmZvX3dpdGhfZGV0YWlscyAoR3N0T2JqZWN0ICogc3JjLCBHRXJyb3IgKiBlcnJvciwgY29uc3QgZ2NoYXIgKiBkZWJ1ZywgR3N0U3RydWN0dXJlICogZGV0YWlscykgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9pbmZvICAgICAgICAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHRXJyb3IgKipnZXJyb3IsIGdjaGFyICoqZGVidWcpOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2luZm9fZGV0YWlscyAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IEdzdFN0cnVjdHVyZSAqKnN0cnVjdHVyZSk7Ci0KLS8qIFRBRyAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld190YWcgICAgICAgICAgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0VGFnTGlzdCAqIHRhZ19saXN0KSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RhZyAgICAgICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdFRhZ0xpc3QgKip0YWdfbGlzdCk7Ci0KLS8qIEJVRkZFUklORyAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgICAgICAgICAoR3N0T2JqZWN0ICogc3JjLCBnaW50IHBlcmNlbnQpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nICAgICAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBnaW50ICpwZXJjZW50KTsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfYnVmZmVyaW5nX3N0YXRzICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgYXZnX2luLCBnaW50IGF2Z19vdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgYnVmZmVyaW5nX2xlZnQpOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0QnVmZmVyaW5nTW9kZSAqbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKmF2Z19pbiwgZ2ludCAqYXZnX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAqYnVmZmVyaW5nX2xlZnQpOwotCi0vKiBTVEFURV9DSEFOR0VEICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQgICAoR3N0T2JqZWN0ICogc3JjLCBHc3RTdGF0ZSBvbGRzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0ZSBuZXdzdGF0ZSwgR3N0U3RhdGUgcGVuZGluZykgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RTdGF0ZSAqb2xkc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGUgKm5ld3N0YXRlLCBHc3RTdGF0ZSAqcGVuZGluZyk7Ci0KLS8qIFNUQVRFX0RJUlRZICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2RpcnR5ICAgICAoR3N0T2JqZWN0ICogc3JjKSBHX0dOVUNfTUFMTE9DOwotCi0vKiBTVEVQX0RPTkUgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfc3RlcF9kb25lICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgYW1vdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgcmF0ZSwgZ2Jvb2xlYW4gZmx1c2gsIGdib29sZWFuIGludGVybWVkaWF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0IGR1cmF0aW9uLCBnYm9vbGVhbiBlb3MpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9kb25lICAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEZvcm1hdCAqZm9ybWF0LCBndWludDY0ICphbW91bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAqcmF0ZSwgZ2Jvb2xlYW4gKmZsdXNoLCBnYm9vbGVhbiAqaW50ZXJtZWRpYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKmR1cmF0aW9uLCBnYm9vbGVhbiAqZW9zKTsKLS8qIENMT0NLX1BST1ZJREUgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfY2xvY2tfcHJvdmlkZSAgIChHc3RPYmplY3QgKiBzcmMsIEdzdENsb2NrICpjbG9jaywgZ2Jvb2xlYW4gcmVhZHkpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfcHJvdmlkZSAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0Q2xvY2sgKipjbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAqcmVhZHkpOwotCi0vKiBDTE9DS19MT1NUICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3QgICAgICAoR3N0T2JqZWN0ICogc3JjLCBHc3RDbG9jayAqY2xvY2spIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfY2xvY2tfbG9zdCAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0Q2xvY2sgKipjbG9jayk7Ci0KLS8qIE5FV19DTE9DSyAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2sgICAgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0Q2xvY2sgKmNsb2NrKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX25ld19jbG9jayAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdENsb2NrICoqY2xvY2spOwotCi0vKiBBUFBMSUNBVElPTiAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbiAgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKSBHX0dOVUNfTUFMTE9DOwotCi0vKiBFTEVNRU5UICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgICAgICAgICAoR3N0T2JqZWN0ICogc3JjLCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpIEdfR05VQ19NQUxMT0M7Ci0KLS8qIFNFR01FTlRfU1RBUlQgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAgIChHc3RPYmplY3QgKiBzcmMsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBwb3NpdGlvbikgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zZWdtZW50X3N0YXJ0IChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RGb3JtYXQgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgKnBvc2l0aW9uKTsKLQotLyogU0VHTUVOVF9ET05FICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAgICAoR3N0T2JqZWN0ICogc3JjLCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgcG9zaXRpb24pIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0Rm9ybWF0ICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICpwb3NpdGlvbik7Ci0KLS8qIERVUkFUSU9OX0NIQU5HRUQgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZCAoR3N0T2JqZWN0ICogc3JjKSBHX0dOVUNfTUFMTE9DOwotCi0vKiBMQVRFTkNZICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kgICAgICAgICAoR3N0T2JqZWN0ICogc3JjKSBHX0dOVUNfTUFMTE9DOwotCi0vKiBBU1lOQ19TVEFSVCAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAgICAgKEdzdE9iamVjdCAqIHNyYykgR19HTlVDX01BTExPQzsKLQotLyogQVNZTkNfRE9ORSAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19kb25lICAgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZSkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9hc3luY19kb25lICAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RDbG9ja1RpbWUgKnJ1bm5pbmdfdGltZSk7Ci0KLS8qIFNUUlVDVFVSRSBDSEFOR0UgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfc3RydWN0dXJlX2NoYW5nZSAgIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cnVjdHVyZUNoYW5nZVR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICpvd25lciwgZ2Jvb2xlYW4gYnVzeSkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJ1Y3R1cmVfY2hhbmdlIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RTdHJ1Y3R1cmVDaGFuZ2VUeXBlICp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKipvd25lciwgZ2Jvb2xlYW4gKmJ1c3kpOwotCi0vKiBTVFJFQU0gU1RBVFVTICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIEdzdFN0cmVhbVN0YXR1c1R5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKm93bmVyKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0U3RyZWFtU3RhdHVzVHlwZSAqdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKipvd25lcik7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0IChHc3RNZXNzYWdlICptZXNzYWdlLCBjb25zdCBHVmFsdWUgKm9iamVjdCk7Ci1jb25zdCBHVmFsdWUgKiAgZ3N0X21lc3NhZ2VfZ2V0X3N0cmVhbV9zdGF0dXNfb2JqZWN0IChHc3RNZXNzYWdlICptZXNzYWdlKTsKLQotLyogUkVRVUVTVF9TVEFURSAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlICAgKEdzdE9iamVjdCAqIHNyYywgR3N0U3RhdGUgc3RhdGUpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcmVxdWVzdF9zdGF0ZSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdFN0YXRlICpzdGF0ZSk7Ci0KLS8qIFNURVBfU1RBUlQgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfc3RlcF9zdGFydCAgICAgIChHc3RPYmplY3QgKiBzcmMsIGdib29sZWFuIGFjdGl2ZSwgR3N0Rm9ybWF0IGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0IGFtb3VudCwgZ2RvdWJsZSByYXRlLCBnYm9vbGVhbiBmbHVzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBpbnRlcm1lZGlhdGUpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9zdGFydCAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdib29sZWFuICphY3RpdmUsIEdzdEZvcm1hdCAqZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKmFtb3VudCwgZ2RvdWJsZSAqcmF0ZSwgZ2Jvb2xlYW4gKmZsdXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICppbnRlcm1lZGlhdGUpOwotCi0vKiBRT1MgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfcW9zICAgICAgICAgICAgIChHc3RPYmplY3QgKiBzcmMsIGdib29sZWFuIGxpdmUsIGd1aW50NjQgcnVubmluZ190aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgc3RyZWFtX3RpbWUsIGd1aW50NjQgdGltZXN0YW1wLCBndWludDY0IGR1cmF0aW9uKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzICAgICAgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBnaW50NjQgaml0dGVyLCBnZG91YmxlIHByb3BvcnRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBxdWFsaXR5KTsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3N0YXRzICAgICAgIChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0Rm9ybWF0IGZvcm1hdCwgZ3VpbnQ2NCBwcm9jZXNzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCBkcm9wcGVkKTsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9xb3MgICAgICAgICAgIChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2Jvb2xlYW4gKiBsaXZlLCBndWludDY0ICogcnVubmluZ190aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKiBzdHJlYW1fdGltZSwgZ3VpbnQ2NCAqIHRpbWVzdGFtcCwgZ3VpbnQ2NCAqIGR1cmF0aW9uKTsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9xb3NfdmFsdWVzICAgIChHc3RNZXNzYWdlICogbWVzc2FnZSwgZ2ludDY0ICogaml0dGVyLCBnZG91YmxlICogcHJvcG9ydGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICogcXVhbGl0eSk7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3N0YXRzICAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEZvcm1hdCAqIGZvcm1hdCwgZ3VpbnQ2NCAqIHByb2Nlc3NlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICogZHJvcHBlZCk7Ci0vKiBQUk9HUkVTUyAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19wcm9ncmVzcyAgICAgICAgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0UHJvZ3Jlc3NUeXBlIHR5cGUsIGNvbnN0IGdjaGFyICpjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0ZXh0KSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Byb2dyZXNzICAgICAgICAgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RQcm9ncmVzc1R5cGUgKiB0eXBlLCBnY2hhciAqKiBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqIHRleHQpOwotCi0vKiBUT0MgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfdG9jICAgICAgICAgICAgIChHc3RPYmplY3QgKnNyYywgR3N0VG9jICp0b2MsIGdib29sZWFuIHVwZGF0ZWQpOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RvYyAgICAgICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdFRvYyAqKnRvYywgZ2Jvb2xlYW4gKnVwZGF0ZWQpOwotCi0vKiBSRVNFVF9USU1FICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3Jlc2V0X3RpbWUgICAgICAoR3N0T2JqZWN0ICogc3JjLCBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Jlc2V0X3RpbWUgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIEdzdENsb2NrVGltZSAqcnVubmluZ190aW1lKTsKLQotLyogU1RSRUFNX1NUQVJUICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGFydCAgICAoR3N0T2JqZWN0ICogc3JjKSBHX0dOVUNfTUFMTE9DOwotCi12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X2dyb3VwX2lkICAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgZ3VpbnQgZ3JvdXBfaWQpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2dyb3VwX2lkICAgICAgKEdzdE1lc3NhZ2UgKm1lc3NhZ2UsIGd1aW50ICpncm91cF9pZCk7Ci0KLS8qIE5FRURfQ09OVEVYVCAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19uZWVkX2NvbnRleHQgICAgKEdzdE9iamVjdCAqIHNyYywgY29uc3QgZ2NoYXIgKiBjb250ZXh0X3R5cGUpIEdfR05VQ19NQUxMT0M7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGNvbnN0IGdjaGFyICoqIGNvbnRleHRfdHlwZSk7Ci0KLS8qIEhBVkVfQ09OVEVYVCAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19oYXZlX2NvbnRleHQgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0Q29udGV4dCAqY29udGV4dCkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9oYXZlX2NvbnRleHQgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RDb250ZXh0ICoqY29udGV4dCk7Ci0KLS8qIERFVklDRV9BRERFRCAqLwotR3N0TWVzc2FnZSAqICAgIGdzdF9tZXNzYWdlX25ld19kZXZpY2VfYWRkZWQgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0RGV2aWNlICogZGV2aWNlKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9hZGRlZCAgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3REZXZpY2UgKiogZGV2aWNlKTsKLQotLyogREVWSUNFX1JFTU9WRUQgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfZGV2aWNlX3JlbW92ZWQgICAgKEdzdE9iamVjdCAqIHNyYywgR3N0RGV2aWNlICogZGV2aWNlKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9yZW1vdmVkICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdERldmljZSAqKiBkZXZpY2UpOwotCi0vKiBQUk9QRVJUWV9OT1RJRlkgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfcHJvcGVydHlfbm90aWZ5ICAgKEdzdE9iamVjdCAqIHNyYywgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLCBHVmFsdWUgKiB2YWwpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5IChHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0T2JqZWN0ICoqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiogcHJvcGVydHlfbmFtZSwgY29uc3QgR1ZhbHVlICoqIHByb3BlcnR5X3ZhbHVlKTsKLQotLyogU1RSRUFNX0NPTExFQ1RJT04gKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb24gICAoR3N0T2JqZWN0ICogc3JjLCBHc3RTdHJlYW1Db2xsZWN0aW9uICogY29sbGVjdGlvbikgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbiAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0U3RyZWFtQ29sbGVjdGlvbiAqKmNvbGxlY3Rpb24pOwotCi0vKiBTVFJFQU1TX1NFTEVDVEVEICovCi1Hc3RNZXNzYWdlICogICAgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbXNfc2VsZWN0ZWQgKEdzdE9iamVjdCAqc3JjLCBHc3RTdHJlYW1Db2xsZWN0aW9uICpjb2xsZWN0aW9uKTsKLXZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2FkZCAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0U3RyZWFtICpzdHJlYW0pOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbXNfc2VsZWN0ZWQgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RTdHJlYW1Db2xsZWN0aW9uICoqY29sbGVjdGlvbik7Ci1ndWludCAgICAgICAgICAgZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc2l6ZSAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UpOwotR3N0U3RyZWFtICAgICAgKmdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbSAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgZ3VpbnQgaWR4KTsKLQotLyogUkVESVJFQ1QgKi8KLUdzdE1lc3NhZ2UgKiAgICBnc3RfbWVzc2FnZV9uZXdfcmVkaXJlY3QgICAgICAgICAgICAgKEdzdE9iamVjdCAqIHNyYywgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbiwgR3N0VGFnTGlzdCAqIHRhZ19saXN0LCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBlbnRyeV9zdHJ1Y3QpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfYWRkX3JlZGlyZWN0X2VudHJ5ICAgICAgIChHc3RNZXNzYWdlICogbWVzc2FnZSwgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbiwgR3N0VGFnTGlzdCAqIHRhZ19saXN0LCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBlbnRyeV9zdHJ1Y3QpOwotdm9pZCAgICAgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3JlZGlyZWN0X2VudHJ5ICAgICAoR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdzaXplIGVudHJ5X2luZGV4LCBjb25zdCBnY2hhciAqKiBsb2NhdGlvbiwgR3N0VGFnTGlzdCAqKiB0YWdfbGlzdCwgY29uc3QgR3N0U3RydWN0dXJlICoqIGVudHJ5X3N0cnVjdCk7Ci1nc2l6ZSAgICAgICAgICAgZ3N0X21lc3NhZ2VfZ2V0X251bV9yZWRpcmVjdF9lbnRyaWVzIChHc3RNZXNzYWdlICogbWVzc2FnZSk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0TWVzc2FnZSwgZ3N0X21lc3NhZ2VfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX01FU1NBR0VfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0bWV0YS5jIGIvZ3N0L2dzdG1ldGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFhMjZjYS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0bWV0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDExIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogZ3N0bWV0YS5jOiBtZXRhZGF0YSBvcGVyYXRpb25zCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdG1ldGEKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQnVmZmVyIG1ldGFkYXRhCi0gKgotICogVGhlICNHc3RNZXRhIHN0cnVjdHVyZSBzaG91bGQgYmUgaW5jbHVkZWQgYXMgdGhlIGZpcnN0IG1lbWJlciBvZiBhICNHc3RCdWZmZXIKLSAqIG1ldGFkYXRhIHN0cnVjdHVyZS4gVGhlIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBBUEkgb2YgdGhlIG1ldGFkYXRhIGFuZCBzaG91bGQKLSAqIGJlIGFjY2Vzc2libGUgdG8gYWxsIGVsZW1lbnRzIHVzaW5nIHRoZSBtZXRhZGF0YS4KLSAqCi0gKiBBIG1ldGFkYXRhIEFQSSBpcyByZWdpc3RlcmVkIHdpdGggZ3N0X21ldGFfYXBpX3R5cGVfcmVnaXN0ZXIoKSB3aGljaCB0YWtlcyBhCi0gKiBuYW1lIGZvciB0aGUgbWV0YWRhdGEgQVBJIGFuZCBzb21lIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXRhZGF0YS4KLSAqIFdpdGggZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZygpIG9uZSBjYW4gY2hlY2sgaWYgYSBjZXJ0YWluIG1ldGFkYXRhIEFQSQotICogY29udGFpbnMgYSBnaXZlbiB0YWcuCi0gKgotICogTXVsdGlwbGUgaW1wbGVtZW50YXRpb25zIG9mIGEgbWV0YWRhdGEgQVBJIGNhbiBiZSByZWdpc3RlcmVkLgotICogVG8gaW1wbGVtZW50IGEgbWV0YWRhdGEgQVBJLCBnc3RfbWV0YV9yZWdpc3RlcigpIHNob3VsZCBiZSB1c2VkLiBUaGlzCi0gKiBmdW5jdGlvbiB0YWtlcyBhbGwgcGFyYW1ldGVycyBuZWVkZWQgdG8gY3JlYXRlLCBmcmVlIGFuZCB0cmFuc2Zvcm0gbWV0YWRhdGEKLSAqIGFsb25nIHdpdGggdGhlIHNpemUgb2YgdGhlIG1ldGFkYXRhLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhICNHc3RNZXRhSW5mbwotICogc3RydWN0dXJlIHRoYXQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSS4KLSAqCi0gKiBBIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZXRyaWV2ZWQgYnkgbmFtZSB3aXRoIGdzdF9tZXRhX2dldF9pbmZvKCkuCi0gKgotICogU2VlICNHc3RCdWZmZXIgZm9yIGhvdyB0aGUgbWV0YWRhdGEgY2FuIGJlIGFkZGVkLCByZXRyaWV2ZWQgYW5kIHJlbW92ZWQgZnJvbQotICogYnVmZmVycy4KLSAqLwotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlICJnc3RidWZmZXIuaCIKLSNpbmNsdWRlICJnc3RtZXRhLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHV0aWxzLmgiCi0KLXN0YXRpYyBHSGFzaFRhYmxlICptZXRhaW5mbyA9IE5VTEw7Ci1zdGF0aWMgR1JXTG9jayBsb2NrOwotCi1HUXVhcmsgX2dzdF9tZXRhX3RyYW5zZm9ybV9jb3B5OwotR1F1YXJrIF9nc3RfbWV0YV90YWdfbWVtb3J5OwotCi12b2lkCi1fcHJpdl9nc3RfbWV0YV9pbml0aWFsaXplICh2b2lkKQotewotICBnX3J3X2xvY2tfaW5pdCAoJmxvY2spOwotICBtZXRhaW5mbyA9IGdfaGFzaF90YWJsZV9uZXcgKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsKTsKLQotICBfZ3N0X21ldGFfdHJhbnNmb3JtX2NvcHkgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImdzdC1jb3B5Iik7Ci0gIF9nc3RfbWV0YV90YWdfbWVtb3J5ID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJtZW1vcnkiKTsKLX0KLQotLyoqCi0gKiBnc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlcjoKLSAqIEBhcGk6IGFuIEFQSSB0byByZWdpc3RlcgotICogQHRhZ3M6IHRhZ3MgZm9yIEBhcGkKLSAqCi0gKiBSZWdpc3RlciBhbmQgcmV0dXJuIGEgR1R5cGUgZm9yIHRoZSBAYXBpIGFuZCBhc3NvY2lhdGUgaXQgd2l0aAotICogQHRhZ3MuCi0gKgotICogUmV0dXJuczogYSB1bmlxdWUgR1R5cGUgZm9yIEBhcGkuCi0gKi8KLUdUeXBlCi1nc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlciAoY29uc3QgZ2NoYXIgKiBhcGksIGNvbnN0IGdjaGFyICoqIHRhZ3MpCi17Ci0gIEdUeXBlIHR5cGU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFwaSAhPSBOVUxMLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZ3MgIT0gTlVMTCwgMCk7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9NRVRBLCAicmVnaXN0ZXIgQVBJIFwiJXNcIiIsIGFwaSk7Ci0gIHR5cGUgPSBnX3BvaW50ZXJfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKGFwaSk7Ci0KLSAgaWYgKHR5cGUgIT0gMCkgewotICAgIGdpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IHRhZ3NbaV07IGkrKykgewotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9NRVRBLCAiICBhZGRpbmcgdGFnIFwiJXNcIiIsIHRhZ3NbaV0pOwotICAgICAgZ190eXBlX3NldF9xZGF0YSAodHlwZSwgZ19xdWFya19mcm9tX3N0cmluZyAodGFnc1tpXSksCi0gICAgICAgICAgR0lOVF9UT19QT0lOVEVSIChUUlVFKSk7Ci0gICAgfQotICB9Ci0KLSAgZ190eXBlX3NldF9xZGF0YSAodHlwZSwgZ19xdWFya19mcm9tX3N0cmluZyAoInRhZ3MiKSwKLSAgICAgIGdfc3RyZHVwdiAoKGdjaGFyICoqKSB0YWdzKSk7Ci0KLSAgcmV0dXJuIHR5cGU7Ci19Ci0KLS8qKgotICogZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZzoKLSAqIEBhcGk6IGFuIEFQSQotICogQHRhZzogdGhlIHRhZyB0byBjaGVjawotICoKLSAqIENoZWNrIGlmIEBhcGkgd2FzIHJlZ2lzdGVyZWQgd2l0aCBAdGFnLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBhcGkgd2FzIHJlZ2lzdGVyZWQgd2l0aCBAdGFnLgotICovCi1nYm9vbGVhbgotZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZyAoR1R5cGUgYXBpLCBHUXVhcmsgdGFnKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYXBpICE9IDAsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSAwLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIGdfdHlwZV9nZXRfcWRhdGEgKGFwaSwgdGFnKSAhPSBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzOgotICogQGFwaTogYW4gQVBJCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSB1dGY4KTogYW4gYXJyYXkgb2YgdGFncyBhcyBzdHJpbmdzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotY29uc3QgZ2NoYXIgKmNvbnN0ICoKLWdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzIChHVHlwZSBhcGkpCi17Ci0gIGNvbnN0IGdjaGFyICoqdGFnczsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFwaSAhPSAwLCBGQUxTRSk7Ci0KLSAgdGFncyA9IGdfdHlwZV9nZXRfcWRhdGEgKGFwaSwgZ19xdWFya19mcm9tX3N0cmluZyAoInRhZ3MiKSk7Ci0KLSAgaWYgKCF0YWdzWzBdKQotICAgIHJldHVybiBOVUxMOwotCi0gIHJldHVybiAoY29uc3QgZ2NoYXIgKiBjb25zdCAqKSB0YWdzOwotfQotCi0vKioKLSAqIGdzdF9tZXRhX3JlZ2lzdGVyOgotICogQGFwaTogdGhlIHR5cGUgb2YgdGhlICNHc3RNZXRhIEFQSQotICogQGltcGw6IHRoZSBuYW1lIG9mIHRoZSAjR3N0TWV0YSBpbXBsZW1lbnRhdGlvbgotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSAjR3N0TWV0YSBzdHJ1Y3R1cmUKLSAqIEBpbml0X2Z1bmM6IChzY29wZSBhc3luYyk6IGEgI0dzdE1ldGFJbml0RnVuY3Rpb24KLSAqIEBmcmVlX2Z1bmM6IChzY29wZSBhc3luYyk6IGEgI0dzdE1ldGFGcmVlRnVuY3Rpb24KLSAqIEB0cmFuc2Zvcm1fZnVuYzogKHNjb3BlIGFzeW5jKTogYSAjR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uCi0gKgotICogUmVnaXN0ZXIgYSBuZXcgI0dzdE1ldGEgaW1wbGVtZW50YXRpb24uCi0gKgotICogVGhlIHNhbWUgQGluZm8gY2FuIGJlIHJldHJpZXZlZCBsYXRlciB3aXRoIGdzdF9tZXRhX2dldF9pbmZvKCkgYnkgdXNpbmcKLSAqIEBpbXBsIGFzIHRoZSBrZXkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RNZXRhSW5mbyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBtZXRhZGF0YS4KLSAqLwotCi1jb25zdCBHc3RNZXRhSW5mbyAqCi1nc3RfbWV0YV9yZWdpc3RlciAoR1R5cGUgYXBpLCBjb25zdCBnY2hhciAqIGltcGwsIGdzaXplIHNpemUsCi0gICAgR3N0TWV0YUluaXRGdW5jdGlvbiBpbml0X2Z1bmMsIEdzdE1ldGFGcmVlRnVuY3Rpb24gZnJlZV9mdW5jLAotICAgIEdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiB0cmFuc2Zvcm1fZnVuYykKLXsKLSAgR3N0TWV0YUluZm8gKmluZm87Ci0gIEdUeXBlIHR5cGU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFwaSAhPSAwLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGltcGwgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaXplICE9IDAsIE5VTEwpOwotCi0gIGlmIChpbml0X2Z1bmMgPT0gTlVMTCkKLSAgICBnX2NyaXRpY2FsICgiUmVnaXN0ZXJpbmcgbWV0YSBpbXBsZW1lbnRhdGlvbiAnJXMnIHdpdGhvdXQgaW5pdCBmdW5jdGlvbiIsCi0gICAgICAgIGltcGwpOwotCi0gIC8qIGZpcnN0IHRyeSB0byByZWdpc3RlciB0aGUgaW1wbGVtZW50YXRpb24gbmFtZS4gSXQncyBwb3NzaWJsZQotICAgKiB0aGF0IHRoaXMgZmFpbHMgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSByZWdpc3RlcmVkLiBEb24ndCB3YXJuLAotICAgKiBnbGliIGRpZCB0aGlzIGZvciB1cyBhbHJlYWR5LiAqLwotICB0eXBlID0gZ19wb2ludGVyX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChpbXBsKTsKLSAgaWYgKHR5cGUgPT0gMCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBpbmZvID0gZ19zbGljZV9uZXcgKEdzdE1ldGFJbmZvKTsKLSAgaW5mby0+YXBpID0gYXBpOwotICBpbmZvLT50eXBlID0gdHlwZTsKLSAgaW5mby0+c2l6ZSA9IHNpemU7Ci0gIGluZm8tPmluaXRfZnVuYyA9IGluaXRfZnVuYzsKLSAgaW5mby0+ZnJlZV9mdW5jID0gZnJlZV9mdW5jOwotICBpbmZvLT50cmFuc2Zvcm1fZnVuYyA9IHRyYW5zZm9ybV9mdW5jOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfTUVUQSwKLSAgICAgICJyZWdpc3RlciBcIiVzXCIgaW1wbGVtZW50aW5nIFwiJXNcIiBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULCBpbXBsLAotICAgICAgZ190eXBlX25hbWUgKGFwaSksIHNpemUpOwotCi0gIGdfcndfbG9ja193cml0ZXJfbG9jayAoJmxvY2spOwotICBnX2hhc2hfdGFibGVfaW5zZXJ0IChtZXRhaW5mbywgKGdwb2ludGVyKSBpbXBsLCAoZ3BvaW50ZXIpIGluZm8pOwotICBnX3J3X2xvY2tfd3JpdGVyX3VubG9jayAoJmxvY2spOwotCi0gIHJldHVybiBpbmZvOwotfQotCi0vKioKLSAqIGdzdF9tZXRhX2dldF9pbmZvOgotICogQGltcGw6IHRoZSBuYW1lCi0gKgotICogTG9va3VwIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG1ldGEgaW5mbyBzdHJ1Y3R1cmUgYnkgaXRzIGltcGxlbWVudGF0aW9uIG5hbWUKLSAqIEBpbXBsLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiBhICNHc3RNZXRhSW5mbyB3aXRoIEBpbXBsLCBvcgotICogJU5VTEwgd2hlbiBubyBzdWNoIG1ldGFpbmZvIGV4aXN0cy4KLSAqLwotY29uc3QgR3N0TWV0YUluZm8gKgotZ3N0X21ldGFfZ2V0X2luZm8gKGNvbnN0IGdjaGFyICogaW1wbCkKLXsKLSAgR3N0TWV0YUluZm8gKmluZm87Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGltcGwgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZ19yd19sb2NrX3JlYWRlcl9sb2NrICgmbG9jayk7Ci0gIGluZm8gPSBnX2hhc2hfdGFibGVfbG9va3VwIChtZXRhaW5mbywgaW1wbCk7Ci0gIGdfcndfbG9ja19yZWFkZXJfdW5sb2NrICgmbG9jayk7Ci0KLSAgcmV0dXJuIGluZm87Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0bWV0YS5oIGIvZ3N0L2dzdG1ldGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVkYjFkNS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0bWV0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5iZT4KLSAqCi0gKiBnc3RtZXRhLmg6IEhlYWRlciBmb3IgTWV0YWRhdGEgc3RydWN0dXJlcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9NRVRBX0hfXwotI2RlZmluZSBfX0dTVF9NRVRBX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3RidWZmZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0TWV0YSBHc3RNZXRhOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1ldGFJbmZvIEdzdE1ldGFJbmZvOwotCi0jZGVmaW5lIEdTVF9NRVRBX0NBU1QobWV0YSkgICAoKEdzdE1ldGEgKikobWV0YSkpCi0KLS8qKgotICogR3N0TWV0YUZsYWdzOgotICogQEdTVF9NRVRBX0ZMQUdfTk9ORTogbm8gZmxhZ3MKLSAqIEBHU1RfTUVUQV9GTEFHX1JFQURPTkxZOiBtZXRhZGF0YSBzaG91bGQgbm90IGJlIG1vZGlmaWVkCi0gKiBAR1NUX01FVEFfRkxBR19QT09MRUQ6IG1ldGFkYXRhIGlzIG1hbmFnZWQgYnkgYSBidWZmZXJwb29sCi0gKiBAR1NUX01FVEFfRkxBR19MT0NLRUQ6IG1ldGFkYXRhIHNob3VsZCBub3QgYmUgcmVtb3ZlZAotICogQEdTVF9NRVRBX0ZMQUdfTEFTVDogYWRkaXRpb25hbCBmbGFncyBjYW4gYmUgYWRkZWQgc3RhcnRpbmcgZnJvbSB0aGlzIGZsYWcuCi0gKgotICogRXh0cmEgbWV0YWRhdGEgZmxhZ3MuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9NRVRBX0ZMQUdfTk9ORSAgICAgICAgPSAwLAotICBHU1RfTUVUQV9GTEFHX1JFQURPTkxZICAgID0gKDEgPDwgMCksCi0gIEdTVF9NRVRBX0ZMQUdfUE9PTEVEICAgICAgPSAoMSA8PCAxKSwKLSAgR1NUX01FVEFfRkxBR19MT0NLRUQgICAgICA9ICgxIDw8IDIpLAotCi0gIEdTVF9NRVRBX0ZMQUdfTEFTVCAgICAgICAgPSAoMSA8PCAxNikKLX0gR3N0TWV0YUZsYWdzOwotCi0vKioKLSAqIEdTVF9NRVRBX0ZMQUdTOgotICogQG1ldGE6IGEgI0dzdE1ldGEuCi0gKgotICogQSBmbGFncyB3b3JkIGNvbnRhaW5pbmcgI0dzdE1ldGFGbGFncyBmbGFncyBzZXQgb24gQG1ldGEKLSAqLwotI2RlZmluZSBHU1RfTUVUQV9GTEFHUyhtZXRhKSAgKEdTVF9NRVRBX0NBU1QgKG1ldGEpLT5mbGFncykKLS8qKgotICogR1NUX01FVEFfRkxBR19JU19TRVQ6Ci0gKiBAbWV0YTogYSAjR3N0TWV0YS4KLSAqIEBmbGFnOiB0aGUgI0dzdE1ldGFGbGFncyB0byBjaGVjay4KLSAqCi0gKiBHaXZlcyB0aGUgc3RhdHVzIG9mIGEgc3BlY2lmaWMgZmxhZyBvbiBhIG1ldGFkYXRhLgotICovCi0jZGVmaW5lIEdTVF9NRVRBX0ZMQUdfSVNfU0VUKG1ldGEsZmxhZykgICAgICAgICEhKEdTVF9NRVRBX0ZMQUdTIChtZXRhKSAmIChmbGFnKSkKLS8qKgotICogR1NUX01FVEFfRkxBR19TRVQ6Ci0gKiBAbWV0YTogYSAjR3N0TWV0YS4KLSAqIEBmbGFnOiB0aGUgI0dzdE1ldGFGbGFncyB0byBzZXQuCi0gKgotICogU2V0cyBhIG1ldGFkYXRhIGZsYWcgb24gYSBtZXRhZGF0YS4KLSAqLwotI2RlZmluZSBHU1RfTUVUQV9GTEFHX1NFVChtZXRhLGZsYWcpICAgICAgICAgICAoR1NUX01FVEFfRkxBR1MgKG1ldGEpIHw9IChmbGFnKSkKLS8qKgotICogR1NUX01FVEFfRkxBR19VTlNFVDoKLSAqIEBtZXRhOiBhICNHc3RNZXRhLgotICogQGZsYWc6IHRoZSAjR3N0TWV0YUZsYWdzIHRvIGNsZWFyLgotICoKLSAqIENsZWFycyBhIG1ldGFkYXRhIGZsYWcuCi0gKi8KLSNkZWZpbmUgR1NUX01FVEFfRkxBR19VTlNFVChtZXRhLGZsYWcpICAgICAgICAgKEdTVF9NRVRBX0ZMQUdTIChtZXRhKSAmPSB+KGZsYWcpKQotCi0vKioKLSAqIEdTVF9NRVRBX1RBR19NRU1PUllfU1RSOgotICoKLSAqIFRoaXMgbWV0YWRhdGEgc3RheXMgcmVsZXZhbnQgYXMgbG9uZyBhcyBtZW1vcnkgbGF5b3V0IGlzIHVuY2hhbmdlZC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLSNkZWZpbmUgR1NUX01FVEFfVEFHX01FTU9SWV9TVFIgIm1lbW9yeSIKLQotLyoqCi0gKiBHc3RNZXRhOgotICogQGZsYWdzOiBleHRyYSBmbGFncyBmb3IgdGhlIG1ldGFkYXRhCi0gKiBAaW5mbzogcG9pbnRlciB0byB0aGUgI0dzdE1ldGFJbmZvCi0gKgotICogQmFzZSBzdHJ1Y3R1cmUgZm9yIG1ldGFkYXRhLiBDdXN0b20gbWV0YWRhdGEgd2lsbCBwdXQgdGhpcyBzdHJ1Y3R1cmUKLSAqIGFzIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlaXIgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdE1ldGEgewotICBHc3RNZXRhRmxhZ3MgICAgICAgZmxhZ3M7Ci0gIGNvbnN0IEdzdE1ldGFJbmZvICppbmZvOwotfTsKLQotLyoqCi0gKiBHc3RNZXRhSW5pdEZ1bmN0aW9uOgotICogQG1ldGE6IGEgI0dzdE1ldGEKLSAqIEBwYXJhbXM6IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBpbml0IGZ1bmN0aW9uCi0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKLSAqCi0gKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiBAbWV0YSBpcyBpbml0aWFsaXplZCBpbiBAYnVmZmVyLgotICovCi10eXBlZGVmIGdib29sZWFuICgqR3N0TWV0YUluaXRGdW5jdGlvbikgKEdzdE1ldGEgKm1ldGEsIGdwb2ludGVyIHBhcmFtcywgR3N0QnVmZmVyICpidWZmZXIpOwotCi0vKioKLSAqIEdzdE1ldGFGcmVlRnVuY3Rpb246Ci0gKiBAbWV0YTogYSAjR3N0TWV0YQotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKgotICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gQG1ldGEgaXMgZnJlZWQgaW4gQGJ1ZmZlci4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0TWV0YUZyZWVGdW5jdGlvbikgICAgIChHc3RNZXRhICptZXRhLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0KLS8qKgotICogZ3N0X21ldGFfdHJhbnNmb3JtX2NvcHk6Ci0gKgotICogR1F1YXJrIGZvciB0aGUgImdzdC1jb3B5IiB0cmFuc2Zvcm0uCi0gKi8KLUdTVF9FWFBPUlQgR1F1YXJrIF9nc3RfbWV0YV90cmFuc2Zvcm1fY29weTsKLQotLyoqCi0gKiBHU1RfTUVUQV9UUkFOU0ZPUk1fSVNfQ09QWToKLSAqIEB0eXBlOiBhIHRyYW5zZm9ybSB0eXBlCi0gKgotICogQ2hlY2sgaWYgdGhlIHRyYW5zZm9ybSB0eXBlIGlzIGEgY29weSB0cmFuc2Zvcm0KLSAqLwotI2RlZmluZSBHU1RfTUVUQV9UUkFOU0ZPUk1fSVNfQ09QWSh0eXBlKSAoKHR5cGUpID09IF9nc3RfbWV0YV90cmFuc2Zvcm1fY29weSkKLQotLyoqCi0gKiBHc3RNZXRhVHJhbnNmb3JtQ29weToKLSAqIEByZWdpb246ICVUUlVFIGlmIG9ubHkgcmVnaW9uIGlzIGNvcGllZAotICogQG9mZnNldDogdGhlIG9mZnNldCB0byBjb3B5LCAwIGlmIEByZWdpb24gaXMgJUZBTFNFLCBvdGhlcndpc2UgPiAwCi0gKiBAc2l6ZTogdGhlIHNpemUgdG8gY29weSwgLTEgb3IgdGhlIGJ1ZmZlciBzaXplIHdoZW4gQHJlZ2lvbiBpcyAlRkFMU0UKLSAqCi0gKiBFeHRyYSBkYXRhIHBhc3NlZCB0byBhICJnc3QtY29weSIgdHJhbnNmb3JtICNHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24uCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgZ2Jvb2xlYW4gcmVnaW9uOwotICBnc2l6ZSBvZmZzZXQ7Ci0gIGdzaXplIHNpemU7Ci19IEdzdE1ldGFUcmFuc2Zvcm1Db3B5OwotCi0vKioKLSAqIEdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbjoKLSAqIEB0cmFuc2J1ZjogYSAjR3N0QnVmZmVyCi0gKiBAbWV0YTogYSAjR3N0TWV0YQotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKiBAdHlwZTogdGhlIHRyYW5zZm9ybSB0eXBlCi0gKiBAZGF0YTogdHJhbnNmb3JtIHNwZWNpZmljIGRhdGEuCi0gKgotICogRnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIEBtZXRhIGluIEBidWZmZXIgYXMgYSByZXN1bHQgb2YgcGVyZm9ybWluZyBhCi0gKiB0cmFuc2Zvcm1hdGlvbiBvbiBAdHJhbnNidWYuIEFkZGl0aW9uYWwgQHR5cGUgc3BlY2lmaWMgdHJhbnNmb3JtIGRhdGEKLSAqIGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXMgQGRhdGEuCi0gKgotICogSW1wbGVtZW50YXRpb25zIHNob3VsZCBjaGVjayB0aGUgQHR5cGUgb2YgdGhlIHRyYW5zZm9ybSBhbmQgcGFyc2UKLSAqIGFkZGl0aW9uYWwgdHlwZSBzcGVjaWZpYyBmaWVsZHMgaW4gQGRhdGEgdGhhdCBzaG91bGQgYmUgdXNlZCB0byB1cGRhdGUKLSAqIHRoZSBtZXRhZGF0YSBvbiBAdHJhbnNidWYuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHRyYW5zZm9ybSBjb3VsZCBiZSBwZXJmb3JtZWQKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAoKkdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbikgKEdzdEJ1ZmZlciAqdHJhbnNidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0TWV0YSAqbWV0YSwgR3N0QnVmZmVyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1F1YXJrIHR5cGUsIGdwb2ludGVyIGRhdGEpOwotCi0vKioKLSAqIEdzdE1ldGFJbmZvOgotICogQGFwaTogdGFnIGlkZW50aWZ5aW5nIHRoZSBtZXRhZGF0YSBzdHJ1Y3R1cmUgYW5kIGFwaQotICogQHR5cGU6IHR5cGUgaWRlbnRpZnlpbmcgdGhlIGltcGxlbWVudG9yIG9mIHRoZSBhcGkKLSAqIEBzaXplOiBzaXplIG9mIHRoZSBtZXRhZGF0YQotICogQGluaXRfZnVuYzogZnVuY3Rpb24gZm9yIGluaXRpYWxpemluZyB0aGUgbWV0YWRhdGEKLSAqIEBmcmVlX2Z1bmM6IGZ1bmN0aW9uIGZvciBmcmVlaW5nIHRoZSBtZXRhZGF0YQotICogQHRyYW5zZm9ybV9mdW5jOiBmdW5jdGlvbiBmb3IgdHJhbnNmb3JtaW5nIHRoZSBtZXRhZGF0YQotICoKLSAqIFRoZSAjR3N0TWV0YUluZm8gcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBtZXRhZGF0YQotICogc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdE1ldGFJbmZvIHsKLSAgR1R5cGUgICAgICAgICAgICAgICAgICAgICAgYXBpOwotICBHVHlwZSAgICAgICAgICAgICAgICAgICAgICB0eXBlOwotICBnc2l6ZSAgICAgICAgICAgICAgICAgICAgICBzaXplOwotCi0gIEdzdE1ldGFJbml0RnVuY3Rpb24gICAgICAgIGluaXRfZnVuYzsKLSAgR3N0TWV0YUZyZWVGdW5jdGlvbiAgICAgICAgZnJlZV9mdW5jOwotICBHc3RNZXRhVHJhbnNmb3JtRnVuY3Rpb24gICB0cmFuc2Zvcm1fZnVuYzsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSAgICAgICAgICAgICAgICBnc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlciAoY29uc3QgZ2NoYXIgKmFwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqKnRhZ3MpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZyAgKEdUeXBlIGFwaSwgR1F1YXJrIHRhZyk7Ci0KLWNvbnN0IEdzdE1ldGFJbmZvICogIGdzdF9tZXRhX3JlZ2lzdGVyICAgICAgICAgIChHVHlwZSBhcGksIGNvbnN0IGdjaGFyICppbXBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0TWV0YUluaXRGdW5jdGlvbiAgICAgIGluaXRfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RNZXRhRnJlZUZ1bmN0aW9uICAgICAgZnJlZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1ldGFUcmFuc2Zvcm1GdW5jdGlvbiB0cmFuc2Zvcm1fZnVuYyk7Ci1jb25zdCBHc3RNZXRhSW5mbyAqICBnc3RfbWV0YV9nZXRfaW5mbyAgICAgICAgICAoY29uc3QgZ2NoYXIgKiBpbXBsKTsKLWNvbnN0IGdjaGFyKiBjb25zdCogIGdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzIChHVHlwZSBhcGkpOwotCi0vKiBzb21lIGRlZmF1bHQgdGFncyAqLwotR1NUX0VYUE9SVCBHUXVhcmsgX2dzdF9tZXRhX3RhZ19tZW1vcnk7Ci0KLS8qKgotICogR1NUX01FVEFfVEFHX01FTU9SWToKLSAqCi0gKiBNZXRhZGF0YSB0YWdnZWQgd2l0aCB0aGlzIHRhZyBkZXBlbmRzIG9uIHRoZSBwYXJ0aWN1bGFyIG1lbW9yeQotICogb3IgYnVmZmVyIHRoYXQgaXQgaXMgb24uCi0gKgotICogRGVwcmVjYXRlZDogVGhlIEdRdWFya3MgYXJlIG5vdCBleHBvcnRlZCBieSBhbnkgcHVibGljIEFQSSwgdXNlCi0gKiAgIEdTVF9NRVRBX1RBR19NRU1PUllfU1RSIGluc3RlYWQuCi0gKi8KLSNpZm5kZWYgR1NUX0RJU0FCTEVfREVQUkVDQVRFRAotI2RlZmluZSBHU1RfTUVUQV9UQUdfTUVNT1JZIChfZ3N0X21ldGFfdGFnX21lbW9yeSkKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTUVUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RtaW5pb2JqZWN0LmMgYi9nc3QvZ3N0bWluaW9iamVjdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjU3MWFiLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RtaW5pb2JqZWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKgotICogZ3N0bWluaW9iamVjdC5oOiBIZWFkZXIgZm9yIEdzdE1pbmlPYmplY3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmdzdG1pbmlvYmplY3QKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTGlnaHR3ZWlnaHQgYmFzZSBjbGFzcyBmb3IgdGhlIEdTdHJlYW1lciBvYmplY3QgaGllcmFyY2h5Ci0gKgotICogI0dzdE1pbmlPYmplY3QgaXMgYSBzaW1wbGUgc3RydWN0dXJlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHJlZmNvdW50ZWQKLSAqIHR5cGVzLgotICoKLSAqIFN1YmNsYXNzZXMgd2lsbCBpbmNsdWRlICNHc3RNaW5pT2JqZWN0IGFzIHRoZSBmaXJzdCBtZW1iZXIgaW4gdGhlaXIgc3RydWN0dXJlCi0gKiBhbmQgdGhlbiBjYWxsIGdzdF9taW5pX29iamVjdF9pbml0KCkgdG8gaW5pdGlhbGl6ZSB0aGUgI0dzdE1pbmlPYmplY3QgZmllbGRzLgotICoKLSAqIGdzdF9taW5pX29iamVjdF9yZWYoKSBhbmQgZ3N0X21pbmlfb2JqZWN0X3VucmVmKCkgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgdGhlCi0gKiByZWZjb3VudCByZXNwZWN0aXZlbHkuIFdoZW4gdGhlIHJlZmNvdW50IG9mIGEgbWluaS1vYmplY3QgcmVhY2hlcyAwLCB0aGUKLSAqIGRpc3Bvc2UgZnVuY3Rpb24gaXMgY2FsbGVkIGZpcnN0IGFuZCB3aGVuIHRoaXMgcmV0dXJucyAlVFJVRSwgdGhlIGZyZWUKLSAqIGZ1bmN0aW9uIG9mIHRoZSBtaW5pb2JqZWN0IGlzIGNhbGxlZC4KLSAqCi0gKiBBIGNvcHkgY2FuIGJlIG1hZGUgd2l0aCBnc3RfbWluaV9vYmplY3RfY29weSgpLgotICoKLSAqIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSgpIHdpbGwgcmV0dXJuICVUUlVFIHdoZW4gdGhlIHJlZmNvdW50IG9mIHRoZQotICogb2JqZWN0IGlzIGV4YWN0bHkgMSwgbWVhbmluZyB0aGUgY3VycmVudCBjYWxsZXIgaGFzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byB0aGUKLSAqIG9iamVjdC4gZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUoKSB3aWxsIHJldHVybiBhIHdyaXRhYmxlIHZlcnNpb24gb2YgdGhlCi0gKiBvYmplY3QsIHdoaWNoIG1pZ2h0IGJlIGEgbmV3IGNvcHkgd2hlbiB0aGUgcmVmY291bnQgd2FzIG5vdCAxLgotICoKLSAqIE9wYXF1ZSBkYXRhIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSAjR3N0TWluaU9iamVjdCB3aXRoCi0gKiBnc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhKCkgYW5kIGdzdF9taW5pX29iamVjdF9nZXRfcWRhdGEoKS4gVGhlIGRhdGEgaXMKLSAqIG1lYW50IHRvIGJlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIG9iamVjdCBhbmQgaXMgbm90IGF1dG9tYXRpY2FsbHkgY29waWVkCi0gKiB3aXRoIGdzdF9taW5pX29iamVjdF9jb3B5KCkgb3Igc2ltaWxhciBtZXRob2RzLgotICoKLSAqIEEgd2VhayByZWZlcmVuY2UgY2FuIGJlIGFkZGVkIGFuZCByZW1vdmUgd2l0aCBnc3RfbWluaV9vYmplY3Rfd2Vha19yZWYoKQotICogYW5kIGdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmKCkgcmVzcGVjdGl2ZWx5LgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3QvZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3QvZ3N0bWluaW9iamVjdC5oIgotI2luY2x1ZGUgImdzdC9nc3RpbmZvLmgiCi0jaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaD4KLQotLyogTXV0ZXggdXNlZCBmb3Igd2VhayByZWZlcmVuY2luZyAqLwotR19MT0NLX0RFRklORV9TVEFUSUMgKHFkYXRhX211dGV4KTsKLXN0YXRpYyBHUXVhcmsgd2Vha19yZWZfcXVhcms7Ci0KLSNkZWZpbmUgU0hBUkVfT05FICgxIDw8IDE2KQotI2RlZmluZSBTSEFSRV9UV08gKDIgPDwgMTYpCi0jZGVmaW5lIFNIQVJFX01BU0sgKH4oU0hBUkVfT05FIC0gMSkpCi0jZGVmaW5lIElTX1NIQVJFRChzdGF0ZSkgKHN0YXRlID49IFNIQVJFX1RXTykKLSNkZWZpbmUgTE9DS19PTkUgKEdTVF9MT0NLX0ZMQUdfTEFTVCkKLSNkZWZpbmUgRkxBR19NQVNLIChHU1RfTE9DS19GTEFHX0xBU1QgLSAxKQotI2RlZmluZSBMT0NLX01BU0sgKChTSEFSRV9PTkUgLSAxKSAtIEZMQUdfTUFTSykKLSNkZWZpbmUgTE9DS19GTEFHX01BU0sgKFNIQVJFX09ORSAtIDEpCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdRdWFyayBxdWFyazsKLSAgR3N0TWluaU9iamVjdE5vdGlmeSBub3RpZnk7Ci0gIGdwb2ludGVyIGRhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Ci19IEdzdFFEYXRhOwotCi0jZGVmaW5lIFFEQVRBKG8saSkgICAgICAgICAgKChHc3RRRGF0YSAqKShvKS0+cWRhdGEpWyhpKV0KLSNkZWZpbmUgUURBVEFfUVVBUksobyxpKSAgICAoUURBVEEobyxpKS5xdWFyaykKLSNkZWZpbmUgUURBVEFfTk9USUZZKG8saSkgICAoUURBVEEobyxpKS5ub3RpZnkpCi0jZGVmaW5lIFFEQVRBX0RBVEEobyxpKSAgICAgKFFEQVRBKG8saSkuZGF0YSkKLSNkZWZpbmUgUURBVEFfREVTVFJPWShvLGkpICAoUURBVEEobyxpKS5kZXN0cm95KQotCi12b2lkCi1fcHJpdl9nc3RfbWluaV9vYmplY3RfaW5pdGlhbGl6ZSAodm9pZCkKLXsKLSAgd2Vha19yZWZfcXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoIkdzdE1pbmlPYmplY3RXZWFrUmVmUXVhcmsiKTsKLX0KLQotLyoqCi0gKiBnc3RfbWluaV9vYmplY3RfaW5pdDogKHNraXApCi0gKiBAbWluaV9vYmplY3Q6IGEgI0dzdE1pbmlPYmplY3QKLSAqIEBmbGFnczogaW5pdGlhbCAjR3N0TWluaU9iamVjdEZsYWdzCi0gKiBAdHlwZTogdGhlICNHVHlwZSBvZiB0aGUgbWluaS1vYmplY3QgdG8gY3JlYXRlCi0gKiBAY29weV9mdW5jOiAoYWxsb3ctbm9uZSk6IHRoZSBjb3B5IGZ1bmN0aW9uLCBvciAlTlVMTAotICogQGRpc3Bvc2VfZnVuYzogKGFsbG93LW5vbmUpOiB0aGUgZGlzcG9zZSBmdW5jdGlvbiwgb3IgJU5VTEwKLSAqIEBmcmVlX2Z1bmM6IChhbGxvdy1ub25lKTogdGhlIGZyZWUgZnVuY3Rpb24gb3IgJU5VTEwKLSAqCi0gKiBJbml0aWFsaXplcyBhIG1pbmktb2JqZWN0IHdpdGggdGhlIGRlc2lyZWQgdHlwZSBhbmQgY29weS9kaXNwb3NlL2ZyZWUKLSAqIGZ1bmN0aW9ucy4KLSAqLwotdm9pZAotZ3N0X21pbmlfb2JqZWN0X2luaXQgKEdzdE1pbmlPYmplY3QgKiBtaW5pX29iamVjdCwgZ3VpbnQgZmxhZ3MsIEdUeXBlIHR5cGUsCi0gICAgR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiBjb3B5X2Z1bmMsCi0gICAgR3N0TWluaU9iamVjdERpc3Bvc2VGdW5jdGlvbiBkaXNwb3NlX2Z1bmMsCi0gICAgR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiBmcmVlX2Z1bmMpCi17Ci0gIG1pbmlfb2JqZWN0LT50eXBlID0gdHlwZTsKLSAgbWluaV9vYmplY3QtPnJlZmNvdW50ID0gMTsKLSAgbWluaV9vYmplY3QtPmxvY2tzdGF0ZSA9IDA7Ci0gIG1pbmlfb2JqZWN0LT5mbGFncyA9IGZsYWdzOwotCi0gIG1pbmlfb2JqZWN0LT5jb3B5ID0gY29weV9mdW5jOwotICBtaW5pX29iamVjdC0+ZGlzcG9zZSA9IGRpc3Bvc2VfZnVuYzsKLSAgbWluaV9vYmplY3QtPmZyZWUgPSBmcmVlX2Z1bmM7Ci0KLSAgbWluaV9vYmplY3QtPm5fcWRhdGEgPSAwOwotICBtaW5pX29iamVjdC0+cWRhdGEgPSBOVUxMOwotCi0gIEdTVF9UUkFDRVJfTUlOSV9PQkpFQ1RfQ1JFQVRFRCAobWluaV9vYmplY3QpOwotfQotCi0vKioKLSAqIGdzdF9taW5pX29iamVjdF9jb3B5OiAoc2tpcCkKLSAqIEBtaW5pX29iamVjdDogdGhlIG1pbmktb2JqZWN0IHRvIGNvcHkKLSAqCi0gKiBDcmVhdGVzIGEgY29weSBvZiB0aGUgbWluaS1vYmplY3QuCi0gKgotICogTVQgc2FmZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ldyBtaW5pLW9iamVjdC4KLSAqLwotR3N0TWluaU9iamVjdCAqCi1nc3RfbWluaV9vYmplY3RfY29weSAoY29uc3QgR3N0TWluaU9iamVjdCAqIG1pbmlfb2JqZWN0KQotewotICBHc3RNaW5pT2JqZWN0ICpjb3B5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW5pX29iamVjdCAhPSBOVUxMLCBOVUxMKTsKLQotICBpZiAobWluaV9vYmplY3QtPmNvcHkpCi0gICAgY29weSA9IG1pbmlfb2JqZWN0LT5jb3B5IChtaW5pX29iamVjdCk7Ci0gIGVsc2UKLSAgICBjb3B5ID0gTlVMTDsKLQotICByZXR1cm4gY29weTsKLX0KLQotLyoqCi0gKiBnc3RfbWluaV9vYmplY3RfbG9jazoKLSAqIEBvYmplY3Q6IHRoZSBtaW5pLW9iamVjdCB0byBsb2NrCi0gKiBAZmxhZ3M6ICNHc3RMb2NrRmxhZ3MKLSAqCi0gKiBMb2NrIHRoZSBtaW5pLW9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgYWNjZXNzIG1vZGUgaW4gQGZsYWdzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBvYmplY3QgY291bGQgYmUgbG9ja2VkLgotICovCi1nYm9vbGVhbgotZ3N0X21pbmlfb2JqZWN0X2xvY2sgKEdzdE1pbmlPYmplY3QgKiBvYmplY3QsIEdzdExvY2tGbGFncyBmbGFncykKLXsKLSAgZ2ludCBhY2Nlc3NfbW9kZSwgc3RhdGUsIG5ld3N0YXRlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX01JTklfT0JKRUNUX0lTX0xPQ0tBQkxFIChvYmplY3QpLCBGQUxTRSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG9iamVjdC0+ZmxhZ3MgJiBHU1RfTUlOSV9PQkpFQ1RfRkxBR19MT0NLX1JFQURPTkxZICYmCi0gICAgICAgICAgZmxhZ3MgJiBHU1RfTE9DS19GTEFHX1dSSVRFKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZG8gewotICAgIGFjY2Vzc19tb2RlID0gZmxhZ3MgJiBGTEFHX01BU0s7Ci0gICAgbmV3c3RhdGUgPSBzdGF0ZSA9IGdfYXRvbWljX2ludF9nZXQgKCZvYmplY3QtPmxvY2tzdGF0ZSk7Ci0KLSAgICBHU1RfQ0FUX1RSQUNFIChHU1RfQ0FUX0xPQ0tJTkcsICJsb2NrICVwOiBzdGF0ZSAlMDh4LCBhY2Nlc3NfbW9kZSAlZCIsCi0gICAgICAgIG9iamVjdCwgc3RhdGUsIGFjY2Vzc19tb2RlKTsKLQotICAgIGlmIChhY2Nlc3NfbW9kZSAmIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKSB7Ci0gICAgICAvKiBzaGFyZWQgcmVmICovCi0gICAgICBuZXdzdGF0ZSArPSBTSEFSRV9PTkU7Ci0gICAgICBhY2Nlc3NfbW9kZSAmPSB+R1NUX0xPQ0tfRkxBR19FWENMVVNJVkU7Ci0gICAgfQotCi0gICAgLyogc2hhcmVkIGNvdW50ZXIgPiAxIGFuZCB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQgKi8KLSAgICBpZiAoKChzdGF0ZSAmIEdTVF9MT0NLX0ZMQUdfV1JJVEUpICE9IDAKLSAgICAgICAgICAgIHx8IChhY2Nlc3NfbW9kZSAmIEdTVF9MT0NLX0ZMQUdfV1JJVEUpICE9IDApCi0gICAgICAgICYmIElTX1NIQVJFRCAobmV3c3RhdGUpKQotICAgICAgZ290byBsb2NrX2ZhaWxlZDsKLQotICAgIGlmIChhY2Nlc3NfbW9kZSkgewotICAgICAgaWYgKChzdGF0ZSAmIExPQ0tfRkxBR19NQVNLKSA9PSAwKSB7Ci0gICAgICAgIC8qIG5vdGhpbmcgbWFwcGVkLCBzZXQgYWNjZXNzX21vZGUgKi8KLSAgICAgICAgbmV3c3RhdGUgfD0gYWNjZXNzX21vZGU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBhY2Nlc3NfbW9kZSBtdXN0IG1hdGNoICovCi0gICAgICAgIGlmICgoc3RhdGUgJiBhY2Nlc3NfbW9kZSkgIT0gYWNjZXNzX21vZGUpCi0gICAgICAgICAgZ290byBsb2NrX2ZhaWxlZDsKLSAgICAgIH0KLSAgICAgIC8qIGluY3JlYXNlIHJlZmNvdW50ICovCi0gICAgICBuZXdzdGF0ZSArPSBMT0NLX09ORTsKLSAgICB9Ci0gIH0gd2hpbGUgKCFnX2F0b21pY19pbnRfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZvYmplY3QtPmxvY2tzdGF0ZSwgc3RhdGUsCi0gICAgICAgICAgbmV3c3RhdGUpKTsKLQotICByZXR1cm4gVFJVRTsKLQotbG9ja19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0xPQ0tJTkcsCi0gICAgICAgICJsb2NrIGZhaWxlZCAlcDogc3RhdGUgJTA4eCwgYWNjZXNzX21vZGUgJWQiLCBvYmplY3QsIHN0YXRlLAotICAgICAgICBhY2Nlc3NfbW9kZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X21pbmlfb2JqZWN0X3VubG9jazoKLSAqIEBvYmplY3Q6IHRoZSBtaW5pLW9iamVjdCB0byB1bmxvY2sKLSAqIEBmbGFnczogI0dzdExvY2tGbGFncwotICoKLSAqIFVubG9jayB0aGUgbWluaS1vYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGFjY2VzcyBtb2RlIGluIEBmbGFncy4KLSAqLwotdm9pZAotZ3N0X21pbmlfb2JqZWN0X3VubG9jayAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwgR3N0TG9ja0ZsYWdzIGZsYWdzKQotewotICBnaW50IGFjY2Vzc19tb2RlLCBzdGF0ZSwgbmV3c3RhdGU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAob2JqZWN0ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUlOSV9PQkpFQ1RfSVNfTE9DS0FCTEUgKG9iamVjdCkpOwotCi0gIGRvIHsKLSAgICBhY2Nlc3NfbW9kZSA9IGZsYWdzICYgRkxBR19NQVNLOwotICAgIG5ld3N0YXRlID0gc3RhdGUgPSBnX2F0b21pY19pbnRfZ2V0ICgmb2JqZWN0LT5sb2Nrc3RhdGUpOwotCi0gICAgR1NUX0NBVF9UUkFDRSAoR1NUX0NBVF9MT0NLSU5HLCAidW5sb2NrICVwOiBzdGF0ZSAlMDh4LCBhY2Nlc3NfbW9kZSAlZCIsCi0gICAgICAgIG9iamVjdCwgc3RhdGUsIGFjY2Vzc19tb2RlKTsKLQotICAgIGlmIChhY2Nlc3NfbW9kZSAmIEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKSB7Ci0gICAgICAvKiBzaGFyZWQgY291bnRlciAqLwotICAgICAgZ19yZXR1cm5faWZfZmFpbCAoc3RhdGUgPj0gU0hBUkVfT05FKTsKLSAgICAgIG5ld3N0YXRlIC09IFNIQVJFX09ORTsKLSAgICAgIGFjY2Vzc19tb2RlICY9IH5HU1RfTE9DS19GTEFHX0VYQ0xVU0lWRTsKLSAgICB9Ci0KLSAgICBpZiAoYWNjZXNzX21vZGUpIHsKLSAgICAgIGdfcmV0dXJuX2lmX2ZhaWwgKChzdGF0ZSAmIGFjY2Vzc19tb2RlKSA9PSBhY2Nlc3NfbW9kZSk7Ci0gICAgICAvKiBkZWNyZWFzZSB0aGUgcmVmY291bnQgKi8KLSAgICAgIG5ld3N0YXRlIC09IExPQ0tfT05FOwotICAgICAgLyogbGFzdCByZWZjb3VudCwgdW5zZXQgYWNjZXNzX21vZGUgKi8KLSAgICAgIGlmICgobmV3c3RhdGUgJiBMT0NLX0ZMQUdfTUFTSykgPT0gYWNjZXNzX21vZGUpCi0gICAgICAgIG5ld3N0YXRlICY9IH5MT0NLX0ZMQUdfTUFTSzsKLSAgICB9Ci0gIH0gd2hpbGUgKCFnX2F0b21pY19pbnRfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZvYmplY3QtPmxvY2tzdGF0ZSwgc3RhdGUsCi0gICAgICAgICAgbmV3c3RhdGUpKTsKLX0KLQotLyoqCi0gKiBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGU6Ci0gKiBAbWluaV9vYmplY3Q6IHRoZSBtaW5pLW9iamVjdCB0byBjaGVjawotICoKLSAqIElmIEBtaW5pX29iamVjdCBoYXMgdGhlIExPQ0tBQkxFIGZsYWcgc2V0LCBjaGVjayBpZiB0aGUgY3VycmVudCBFWENMVVNJVkUKLSAqIGxvY2sgb24gQG9iamVjdCBpcyB0aGUgb25seSBvbmUsIHRoaXMgbWVhbnMgdGhhdCBjaGFuZ2VzIHRvIHRoZSBvYmplY3Qgd2lsbAotICogbm90IGJlIHZpc2libGUgdG8gYW55IG90aGVyIG9iamVjdC4KLSAqCi0gKiBJZiB0aGUgTE9DS0FCTEUgZmxhZyBpcyBub3Qgc2V0LCBjaGVjayBpZiB0aGUgcmVmY291bnQgb2YgQG1pbmlfb2JqZWN0IGlzCi0gKiBleGFjdGx5IDEsIG1lYW5pbmcgdGhhdCBubyBvdGhlciByZWZlcmVuY2UgZXhpc3RzIHRvIHRoZSBvYmplY3QgYW5kIHRoYXQgdGhlCi0gKiBvYmplY3QgaXMgdGhlcmVmb3JlIHdyaXRhYmxlLgotICoKLSAqIE1vZGlmaWNhdGlvbiBvZiBhIG1pbmktb2JqZWN0IHNob3VsZCBvbmx5IGJlIGRvbmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgaXQKLSAqIGlzIHdyaXRhYmxlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBvYmplY3QgaXMgd3JpdGFibGUuCi0gKi8KLWdib29sZWFuCi1nc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKGNvbnN0IEdzdE1pbmlPYmplY3QgKiBtaW5pX29iamVjdCkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW5pX29iamVjdCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKEdTVF9NSU5JX09CSkVDVF9JU19MT0NLQUJMRSAobWluaV9vYmplY3QpKSB7Ci0gICAgcmVzdWx0ID0gIUlTX1NIQVJFRCAoZ19hdG9taWNfaW50X2dldCAoJm1pbmlfb2JqZWN0LT5sb2Nrc3RhdGUpKTsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHQgPSAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChtaW5pX29iamVjdCkgPT0gMSk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZTogKHNraXApCi0gKiBAbWluaV9vYmplY3Q6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG1pbmktb2JqZWN0IHRvIG1ha2Ugd3JpdGFibGUKLSAqCi0gKiBDaGVja3MgaWYgYSBtaW5pLW9iamVjdCBpcyB3cml0YWJsZS4gIElmIG5vdCwgYSB3cml0YWJsZSBjb3B5IGlzIG1hZGUgYW5kCi0gKiByZXR1cm5lZC4gIFRoaXMgZ2l2ZXMgYXdheSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBtaW5pIG9iamVjdCwKLSAqIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXcgb2JqZWN0LgotICoKLSAqIE1UIHNhZmUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbWluaS1vYmplY3QgKHBvc3NpYmx5IHRoZSBzYW1lIHBvaW50ZXIpIHRoYXQKLSAqICAgICBpcyB3cml0YWJsZS4KLSAqLwotR3N0TWluaU9iamVjdCAqCi1nc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR3N0TWluaU9iamVjdCAqIG1pbmlfb2JqZWN0KQotewotICBHc3RNaW5pT2JqZWN0ICpyZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1pbmlfb2JqZWN0ICE9IE5VTEwsIE5VTEwpOwotCi0gIGlmIChnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKG1pbmlfb2JqZWN0KSkgewotICAgIHJldCA9IG1pbmlfb2JqZWN0OwotICB9IGVsc2UgewotICAgIHJldCA9IGdzdF9taW5pX29iamVjdF9jb3B5IChtaW5pX29iamVjdCk7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgImNvcHkgJXMgbWluaW9iamVjdCAlcCAtPiAlcCIsCi0gICAgICAgIGdfdHlwZV9uYW1lIChHU1RfTUlOSV9PQkpFQ1RfVFlQRSAobWluaV9vYmplY3QpKSwgbWluaV9vYmplY3QsIHJldCk7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChtaW5pX29iamVjdCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9taW5pX29iamVjdF9yZWY6IChza2lwKQotICogQG1pbmlfb2JqZWN0OiB0aGUgbWluaS1vYmplY3QKLSAqCi0gKiBJbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBtaW5pLW9iamVjdC4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlIHJlZmNvdW50IGFmZmVjdHMgdGhlIHdyaXRhYmlsaXR5Ci0gKiBvZiBAbWluaS1vYmplY3QsIHNlZSBnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUoKS4gSXQgaXMKLSAqIGltcG9ydGFudCB0byBub3RlIHRoYXQga2VlcGluZyBhZGRpdGlvbmFsIHJlZmVyZW5jZXMgdG8KLSAqIEdzdE1pbmlPYmplY3QgaW5zdGFuY2VzIGNhbiBwb3RlbnRpYWxseSBpbmNyZWFzZSB0aGUgbnVtYmVyCi0gKiBvZiBtZW1jcHkgb3BlcmF0aW9ucyBpbiBhIHBpcGVsaW5lLCBlc3BlY2lhbGx5IGlmIHRoZSBtaW5pb2JqZWN0Ci0gKiBpcyBhICNHc3RCdWZmZXIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbWluaS1vYmplY3QuCi0gKi8KLUdzdE1pbmlPYmplY3QgKgotZ3N0X21pbmlfb2JqZWN0X3JlZiAoR3N0TWluaU9iamVjdCAqIG1pbmlfb2JqZWN0KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWluaV9vYmplY3QgIT0gTlVMTCwgTlVMTCk7Ci0gIC8qIHdlIGNhbid0IGFzc2VydCB0aGF0IHRoZSByZWZjb3VudCA+IDAgc2luY2UgdGhlIF9mcmVlIGZ1bmN0aW9ucwotICAgKiBpbmNyZW1lbnRzIHRoZSByZWZjb3VudCBmcm9tIDAgdG8gMSBhZ2FpbiB0byBhbGxvdyByZXN1cmVjdGluZwotICAgKiB0aGUgb2JqZWN0Ci0gICBnX3JldHVybl92YWxfaWZfZmFpbCAobWluaV9vYmplY3QtPnJlZmNvdW50ID4gMCwgTlVMTCk7Ci0gICAqLwotCi0gIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfUkVGQ09VTlRJTkcsICIlcCByZWYgJWQtPiVkIiwgbWluaV9vYmplY3QsCi0gICAgICBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKG1pbmlfb2JqZWN0KSwKLSAgICAgIEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAobWluaV9vYmplY3QpICsgMSk7Ci0KLSAgZ19hdG9taWNfaW50X2luYyAoJm1pbmlfb2JqZWN0LT5yZWZjb3VudCk7Ci0KLSAgcmV0dXJuIG1pbmlfb2JqZWN0OwotfQotCi1zdGF0aWMgZ2ludAotZmluZF9ub3RpZnkgKEdzdE1pbmlPYmplY3QgKiBvYmplY3QsIEdRdWFyayBxdWFyaywgZ2Jvb2xlYW4gbWF0Y2hfbm90aWZ5LAotICAgIEdzdE1pbmlPYmplY3ROb3RpZnkgbm90aWZ5LCBncG9pbnRlciBkYXRhKQotewotICBndWludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBvYmplY3QtPm5fcWRhdGE7IGkrKykgewotICAgIGlmIChRREFUQV9RVUFSSyAob2JqZWN0LCBpKSA9PSBxdWFyaykgewotICAgICAgLyogY2hlY2sgaWYgd2UgbmVlZCB0byBtYXRjaCB0aGUgY2FsbGJhY2sgdG9vICovCi0gICAgICBpZiAoIW1hdGNoX25vdGlmeSB8fCAoUURBVEFfTk9USUZZIChvYmplY3QsIGkpID09IG5vdGlmeSAmJgotICAgICAgICAgICAgICBRREFUQV9EQVRBIChvYmplY3QsIGkpID09IGRhdGEpKQotICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX25vdGlmeSAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwgZ2ludCBpbmRleCkKLXsKLSAgLyogcmVtb3ZlIGl0ZW0gKi8KLSAgaWYgKC0tb2JqZWN0LT5uX3FkYXRhID09IDApIHsKLSAgICAvKiB3ZSBkb24ndCBzaHJpbmsgYnV0IGZyZWUgd2hlbiBldmVyeXRoaW5nIGlzIGdvbmUgKi8KLSAgICBnX2ZyZWUgKG9iamVjdC0+cWRhdGEpOwotICAgIG9iamVjdC0+cWRhdGEgPSBOVUxMOwotICB9IGVsc2UgaWYgKGluZGV4ICE9IG9iamVjdC0+bl9xZGF0YSkKLSAgICBRREFUQSAob2JqZWN0LCBpbmRleCkgPSBRREFUQSAob2JqZWN0LCBvYmplY3QtPm5fcWRhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X25vdGlmeSAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwgZ2ludCBpbmRleCwgR1F1YXJrIHF1YXJrLAotICAgIEdzdE1pbmlPYmplY3ROb3RpZnkgbm90aWZ5LCBncG9pbnRlciBkYXRhLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95KQotewotICBpZiAoaW5kZXggPT0gLTEpIHsKLSAgICAvKiBhZGQgaXRlbSAqLwotICAgIGluZGV4ID0gb2JqZWN0LT5uX3FkYXRhKys7Ci0gICAgb2JqZWN0LT5xZGF0YSA9Ci0gICAgICAgIGdfcmVhbGxvYyAob2JqZWN0LT5xZGF0YSwgc2l6ZW9mIChHc3RRRGF0YSkgKiBvYmplY3QtPm5fcWRhdGEpOwotICB9Ci0gIFFEQVRBX1FVQVJLIChvYmplY3QsIGluZGV4KSA9IHF1YXJrOwotICBRREFUQV9OT1RJRlkgKG9iamVjdCwgaW5kZXgpID0gbm90aWZ5OwotICBRREFUQV9EQVRBIChvYmplY3QsIGluZGV4KSA9IGRhdGE7Ci0gIFFEQVRBX0RFU1RST1kgKG9iamVjdCwgaW5kZXgpID0gZGVzdHJveTsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGxfZmluYWxpemVfbm90aWZ5IChHc3RNaW5pT2JqZWN0ICogb2JqKQotewotICBndWludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBvYmotPm5fcWRhdGE7IGkrKykgewotICAgIGlmIChRREFUQV9RVUFSSyAob2JqLCBpKSA9PSB3ZWFrX3JlZl9xdWFyaykKLSAgICAgIFFEQVRBX05PVElGWSAob2JqLCBpKSAoUURBVEFfREFUQSAob2JqLCBpKSwgb2JqKTsKLSAgICBpZiAoUURBVEFfREVTVFJPWSAob2JqLCBpKSkKLSAgICAgIFFEQVRBX0RFU1RST1kgKG9iaiwgaSkgKFFEQVRBX0RBVEEgKG9iaiwgaSkpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X21pbmlfb2JqZWN0X3VucmVmOiAoc2tpcCkKLSAqIEBtaW5pX29iamVjdDogdGhlIG1pbmktb2JqZWN0Ci0gKgotICogRGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG1pbmktb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nCi0gKiB0aGUgbWluaS1vYmplY3QuCi0gKi8KLXZvaWQKLWdzdF9taW5pX29iamVjdF91bnJlZiAoR3N0TWluaU9iamVjdCAqIG1pbmlfb2JqZWN0KQotewotICBnX3JldHVybl9pZl9mYWlsIChtaW5pX29iamVjdCAhPSBOVUxMKTsKLQotICBHU1RfQ0FUX1RSQUNFIChHU1RfQ0FUX1JFRkNPVU5USU5HLCAiJXAgdW5yZWYgJWQtPiVkIiwKLSAgICAgIG1pbmlfb2JqZWN0LAotICAgICAgR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChtaW5pX29iamVjdCksCi0gICAgICBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKG1pbmlfb2JqZWN0KSAtIDEpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1pbmlfb2JqZWN0LT5yZWZjb3VudCA+IDApOwotCi0gIGlmIChHX1VOTElLRUxZIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmbWluaV9vYmplY3QtPnJlZmNvdW50KSkpIHsKLSAgICBnYm9vbGVhbiBkb19mcmVlOwotCi0gICAgaWYgKG1pbmlfb2JqZWN0LT5kaXNwb3NlKQotICAgICAgZG9fZnJlZSA9IG1pbmlfb2JqZWN0LT5kaXNwb3NlIChtaW5pX29iamVjdCk7Ci0gICAgZWxzZQotICAgICAgZG9fZnJlZSA9IFRSVUU7Ci0KLSAgICAvKiBpZiB0aGUgc3ViY2xhc3MgcmVjeWNsZWQgdGhlIG9iamVjdCAoYW5kIHJldHVybmVkIEZBTFNFKSB3ZSBkb24ndAotICAgICAqIHdhbnQgdG8gZnJlZSB0aGUgaW5zdGFuY2UgYW55bW9yZSAqLwotICAgIGlmIChHX0xJS0VMWSAoZG9fZnJlZSkpIHsKLSAgICAgIC8qIHRoZXJlIHNob3VsZCBiZSBubyBvdXRzdGFuZGluZyBsb2NrcyAqLwotICAgICAgZ19yZXR1cm5faWZfZmFpbCAoKGdfYXRvbWljX2ludF9nZXQgKCZtaW5pX29iamVjdC0+bG9ja3N0YXRlKSAmIExPQ0tfTUFTSykKLSAgICAgICAgICA8IDQpOwotCi0gICAgICBpZiAobWluaV9vYmplY3QtPm5fcWRhdGEpIHsKLSAgICAgICAgY2FsbF9maW5hbGl6ZV9ub3RpZnkgKG1pbmlfb2JqZWN0KTsKLSAgICAgICAgZ19mcmVlIChtaW5pX29iamVjdC0+cWRhdGEpOwotICAgICAgfQotICAgICAgR1NUX1RSQUNFUl9NSU5JX09CSkVDVF9ERVNUUk9ZRUQgKG1pbmlfb2JqZWN0KTsKLSAgICAgIGlmIChtaW5pX29iamVjdC0+ZnJlZSkKLSAgICAgICAgbWluaV9vYmplY3QtPmZyZWUgKG1pbmlfb2JqZWN0KTsKLSAgICB9Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfbWluaV9vYmplY3RfcmVwbGFjZToKLSAqIEBvbGRkYXRhOiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBwb2ludGVyIHRvIGEgcG9pbnRlciB0byBhCi0gKiAgICAgbWluaS1vYmplY3QgdG8gYmUgcmVwbGFjZWQKLSAqIEBuZXdkYXRhOiAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gbmV3IG1pbmktb2JqZWN0Ci0gKgotICogQXRvbWljYWxseSBtb2RpZmllcyBhIHBvaW50ZXIgdG8gcG9pbnQgdG8gYSBuZXcgbWluaS1vYmplY3QuCi0gKiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIEBvbGRkYXRhIGlzIGRlY3JlYXNlZCBhbmQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZgotICogQG5ld2RhdGEgaXMgaW5jcmVhc2VkLgotICoKLSAqIEVpdGhlciBAbmV3ZGF0YSBhbmQgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgQG9sZGRhdGEgbWF5IGJlICVOVUxMLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBuZXdkYXRhIHdhcyBkaWZmZXJlbnQgZnJvbSBAb2xkZGF0YQotICovCi1nYm9vbGVhbgotZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgKEdzdE1pbmlPYmplY3QgKiogb2xkZGF0YSwgR3N0TWluaU9iamVjdCAqIG5ld2RhdGEpCi17Ci0gIEdzdE1pbmlPYmplY3QgKm9sZGRhdGFfdmFsOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvbGRkYXRhICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfQ0FUX1RSQUNFIChHU1RfQ0FUX1JFRkNPVU5USU5HLCAicmVwbGFjZSAlcCAoJWQpIHdpdGggJXAgKCVkKSIsCi0gICAgICAqb2xkZGF0YSwgKm9sZGRhdGEgPyAoKm9sZGRhdGEpLT5yZWZjb3VudCA6IDAsCi0gICAgICBuZXdkYXRhLCBuZXdkYXRhID8gbmV3ZGF0YS0+cmVmY291bnQgOiAwKTsKLQotICBvbGRkYXRhX3ZhbCA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgoZ3BvaW50ZXIgKikgb2xkZGF0YSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG9sZGRhdGFfdmFsID09IG5ld2RhdGEpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAobmV3ZGF0YSkKLSAgICBnc3RfbWluaV9vYmplY3RfcmVmIChuZXdkYXRhKTsKLQotICB3aGlsZSAoR19VTkxJS0VMWSAoIWdfYXRvbWljX3BvaW50ZXJfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKChncG9pbnRlciAqKQotICAgICAgICAgICAgICBvbGRkYXRhLCBvbGRkYXRhX3ZhbCwgbmV3ZGF0YSkpKSB7Ci0gICAgb2xkZGF0YV92YWwgPSBnX2F0b21pY19wb2ludGVyX2dldCAoKGdwb2ludGVyICopIG9sZGRhdGEpOwotICAgIGlmIChHX1VOTElLRUxZIChvbGRkYXRhX3ZhbCA9PSBuZXdkYXRhKSkKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKG9sZGRhdGFfdmFsKQotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAob2xkZGF0YV92YWwpOwotCi0gIHJldHVybiBvbGRkYXRhX3ZhbCAhPSBuZXdkYXRhOwotfQotCi0vKioKLSAqIGdzdF9taW5pX29iamVjdF9zdGVhbDogKHNraXApCi0gKiBAb2xkZGF0YTogKGlub3V0KSAodHJhbnNmZXIgZnVsbCk6IHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIGEgbWluaS1vYmplY3QgdG8KLSAqICAgICBiZSBzdG9sZW4KLSAqCi0gKiBSZXBsYWNlIHRoZSBjdXJyZW50ICNHc3RNaW5pT2JqZWN0IHBvaW50ZXIgdG8gYnkgQG9sZGRhdGEgd2l0aCAlTlVMTCBhbmQKLSAqIHJldHVybiB0aGUgb2xkIHZhbHVlLgotICoKLSAqIFJldHVybnM6IHRoZSAjR3N0TWluaU9iamVjdCBhdCBAb2xkYXRhCi0gKi8KLUdzdE1pbmlPYmplY3QgKgotZ3N0X21pbmlfb2JqZWN0X3N0ZWFsIChHc3RNaW5pT2JqZWN0ICoqIG9sZGRhdGEpCi17Ci0gIEdzdE1pbmlPYmplY3QgKm9sZGRhdGFfdmFsOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvbGRkYXRhICE9IE5VTEwsIE5VTEwpOwotCi0gIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfUkVGQ09VTlRJTkcsICJzdGVhbCAlcCAoJWQpIiwKLSAgICAgICpvbGRkYXRhLCAqb2xkZGF0YSA/ICgqb2xkZGF0YSktPnJlZmNvdW50IDogMCk7Ci0KLSAgZG8gewotICAgIG9sZGRhdGFfdmFsID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKChncG9pbnRlciAqKSBvbGRkYXRhKTsKLSAgICBpZiAob2xkZGF0YV92YWwgPT0gTlVMTCkKLSAgICAgIGJyZWFrOwotICB9IHdoaWxlIChHX1VOTElLRUxZICghZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoKGdwb2ludGVyICopCi0gICAgICAgICAgICAgIG9sZGRhdGEsIG9sZGRhdGFfdmFsLCBOVUxMKSkpOwotCi0gIHJldHVybiBvbGRkYXRhX3ZhbDsKLX0KLQotLyoqCi0gKiBnc3RfbWluaV9vYmplY3RfdGFrZToKLSAqIEBvbGRkYXRhOiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKTogcG9pbnRlciB0byBhIHBvaW50ZXIgdG8gYSBtaW5pLW9iamVjdCB0bwotICogICAgIGJlIHJlcGxhY2VkCi0gKiBAbmV3ZGF0YTogcG9pbnRlciB0byBuZXcgbWluaS1vYmplY3QKLSAqCi0gKiBNb2RpZmllcyBhIHBvaW50ZXIgdG8gcG9pbnQgdG8gYSBuZXcgbWluaS1vYmplY3QuIFRoZSBtb2RpZmljYXRpb24KLSAqIGlzIGRvbmUgYXRvbWljYWxseS4gVGhpcyB2ZXJzaW9uIGlzIHNpbWlsYXIgdG8gZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UoKQotICogZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIHJlZmNvdW50IG9mIEBuZXdkYXRhIGFuZCB0aHVzCi0gKiB0YWtlcyBvd25lcnNoaXAgb2YgQG5ld2RhdGEuCi0gKgotICogRWl0aGVyIEBuZXdkYXRhIGFuZCB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBAb2xkZGF0YSBtYXkgYmUgJU5VTEwuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQG5ld2RhdGEgd2FzIGRpZmZlcmVudCBmcm9tIEBvbGRkYXRhCi0gKi8KLWdib29sZWFuCi1nc3RfbWluaV9vYmplY3RfdGFrZSAoR3N0TWluaU9iamVjdCAqKiBvbGRkYXRhLCBHc3RNaW5pT2JqZWN0ICogbmV3ZGF0YSkKLXsKLSAgR3N0TWluaU9iamVjdCAqb2xkZGF0YV92YWw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9sZGRhdGEgIT0gTlVMTCwgRkFMU0UpOwotCi0gIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfUkVGQ09VTlRJTkcsICJ0YWtlICVwICglZCkgd2l0aCAlcCAoJWQpIiwKLSAgICAgICpvbGRkYXRhLCAqb2xkZGF0YSA/ICgqb2xkZGF0YSktPnJlZmNvdW50IDogMCwKLSAgICAgIG5ld2RhdGEsIG5ld2RhdGEgPyBuZXdkYXRhLT5yZWZjb3VudCA6IDApOwotCi0gIGRvIHsKLSAgICBvbGRkYXRhX3ZhbCA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgoZ3BvaW50ZXIgKikgb2xkZGF0YSk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKG9sZGRhdGFfdmFsID09IG5ld2RhdGEpKQotICAgICAgYnJlYWs7Ci0gIH0gd2hpbGUgKEdfVU5MSUtFTFkgKCFnX2F0b21pY19wb2ludGVyX2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgoZ3BvaW50ZXIgKikKLSAgICAgICAgICAgICAgb2xkZGF0YSwgb2xkZGF0YV92YWwsIG5ld2RhdGEpKSk7Ci0KLSAgaWYgKG9sZGRhdGFfdmFsKQotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAob2xkZGF0YV92YWwpOwotCi0gIHJldHVybiBvbGRkYXRhX3ZhbCAhPSBuZXdkYXRhOwotfQotCi0vKioKLSAqIGdzdF9taW5pX29iamVjdF93ZWFrX3JlZjogKHNraXApCi0gKiBAb2JqZWN0OiAjR3N0TWluaU9iamVjdCB0byByZWZlcmVuY2Ugd2Vha2x5Ci0gKiBAbm90aWZ5OiBjYWxsYmFjayB0byBpbnZva2UgYmVmb3JlIHRoZSBtaW5pIG9iamVjdCBpcyBmcmVlZAotICogQGRhdGE6IGV4dHJhIGRhdGEgdG8gcGFzcyB0byBub3RpZnkKLSAqCi0gKiBBZGRzIGEgd2VhayByZWZlcmVuY2UgY2FsbGJhY2sgdG8gYSBtaW5pIG9iamVjdC4gV2VhayByZWZlcmVuY2VzIGFyZQotICogdXNlZCBmb3Igbm90aWZpY2F0aW9uIHdoZW4gYSBtaW5pIG9iamVjdCBpcyBmaW5hbGl6ZWQuIFRoZXkgYXJlIGNhbGxlZAotICogIndlYWsgcmVmZXJlbmNlcyIgYmVjYXVzZSB0aGV5IGFsbG93IHlvdSB0byBzYWZlbHkgaG9sZCBhIHBvaW50ZXIKLSAqIHRvIHRoZSBtaW5pIG9iamVjdCB3aXRob3V0IGNhbGxpbmcgZ3N0X21pbmlfb2JqZWN0X3JlZigpCi0gKiAoZ3N0X21pbmlfb2JqZWN0X3JlZigpIGFkZHMgYSBzdHJvbmcgcmVmZXJlbmNlLCB0aGF0IGlzLCBmb3JjZXMgdGhlIG9iamVjdAotICogdG8gc3RheSBhbGl2ZSkuCi0gKi8KLXZvaWQKLWdzdF9taW5pX29iamVjdF93ZWFrX3JlZiAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwKLSAgICBHc3RNaW5pT2JqZWN0Tm90aWZ5IG5vdGlmeSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAob2JqZWN0ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChub3RpZnkgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAob2JqZWN0KSA+PSAxKTsKLQotICBHX0xPQ0sgKHFkYXRhX211dGV4KTsKLSAgc2V0X25vdGlmeSAob2JqZWN0LCAtMSwgd2Vha19yZWZfcXVhcmssIG5vdGlmeSwgZGF0YSwgTlVMTCk7Ci0gIEdfVU5MT0NLIChxZGF0YV9tdXRleCk7Ci19Ci0KLS8qKgotICogZ3N0X21pbmlfb2JqZWN0X3dlYWtfdW5yZWY6IChza2lwKQotICogQG9iamVjdDogI0dzdE1pbmlPYmplY3QgdG8gcmVtb3ZlIGEgd2VhayByZWZlcmVuY2UgZnJvbQotICogQG5vdGlmeTogY2FsbGJhY2sgdG8gc2VhcmNoIGZvcgotICogQGRhdGE6IGRhdGEgdG8gc2VhcmNoIGZvcgotICoKLSAqIFJlbW92ZXMgYSB3ZWFrIHJlZmVyZW5jZSBjYWxsYmFjayBmcm9tIGEgbWluaSBvYmplY3QuCi0gKi8KLXZvaWQKLWdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmIChHc3RNaW5pT2JqZWN0ICogb2JqZWN0LAotICAgIEdzdE1pbmlPYmplY3ROb3RpZnkgbm90aWZ5LCBncG9pbnRlciBkYXRhKQotewotICBnaW50IGk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAob2JqZWN0ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChub3RpZnkgIT0gTlVMTCk7Ci0KLSAgR19MT0NLIChxZGF0YV9tdXRleCk7Ci0gIGlmICgoaSA9IGZpbmRfbm90aWZ5IChvYmplY3QsIHdlYWtfcmVmX3F1YXJrLCBUUlVFLCBub3RpZnksIGRhdGEpKSAhPSAtMSkgewotICAgIHJlbW92ZV9ub3RpZnkgKG9iamVjdCwgaSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ193YXJuaW5nICgiJXM6IGNvdWxkbid0IGZpbmQgd2VhayByZWYgJXAgKG9iamVjdDolcCBkYXRhOiVwKSIsIEdfU1RSRlVOQywKLSAgICAgICAgbm90aWZ5LCBvYmplY3QsIGRhdGEpOwotICB9Ci0gIEdfVU5MT0NLIChxZGF0YV9tdXRleCk7Ci19Ci0KLS8qKgotICogZ3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YToKLSAqIEBvYmplY3Q6IGEgI0dzdE1pbmlPYmplY3QKLSAqIEBxdWFyazogQSAjR1F1YXJrLCBuYW1pbmcgdGhlIHVzZXIgZGF0YSBwb2ludGVyCi0gKiBAZGF0YTogQW4gb3BhcXVlIHVzZXIgZGF0YSBwb2ludGVyCi0gKiBAZGVzdHJveTogRnVuY3Rpb24gdG8gaW52b2tlIHdpdGggQGRhdGEgYXMgYXJndW1lbnQsIHdoZW4gQGRhdGEKLSAqICAgICAgICAgICBuZWVkcyB0byBiZSBmcmVlZAotICoKLSAqIFRoaXMgc2V0cyBhbiBvcGFxdWUsIG5hbWVkIHBvaW50ZXIgb24gYSBtaW5pb2JqZWN0LgotICogVGhlIG5hbWUgaXMgc3BlY2lmaWVkIHRocm91Z2ggYSAjR1F1YXJrIChyZXRyaWV2ZWQgZS5nLiB2aWEKLSAqIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCkpLCBhbmQgdGhlIHBvaW50ZXIKLSAqIGNhbiBiZSBnb3R0ZW4gYmFjayBmcm9tIHRoZSBAb2JqZWN0IHdpdGggZ3N0X21pbmlfb2JqZWN0X2dldF9xZGF0YSgpCi0gKiB1bnRpbCB0aGUgQG9iamVjdCBpcyBkaXNwb3NlZC4KLSAqIFNldHRpbmcgYSBwcmV2aW91c2x5IHNldCB1c2VyIGRhdGEgcG9pbnRlciwgb3ZlcnJpZGVzIChmcmVlcykKLSAqIHRoZSBvbGQgcG9pbnRlciBzZXQsIHVzaW5nICVOVUxMIGFzIHBvaW50ZXIgZXNzZW50aWFsbHkKLSAqIHJlbW92ZXMgdGhlIGRhdGEgc3RvcmVkLgotICoKLSAqIEBkZXN0cm95IG1heSBiZSBzcGVjaWZpZWQgd2hpY2ggaXMgY2FsbGVkIHdpdGggQGRhdGEgYXMgYXJndW1lbnQKLSAqIHdoZW4gdGhlIEBvYmplY3QgaXMgZGlzcG9zZWQsIG9yIHRoZSBkYXRhIGlzIGJlaW5nIG92ZXJ3cml0dGVuIGJ5Ci0gKiBhIGNhbGwgdG8gZ3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YSgpIHdpdGggdGhlIHNhbWUgQHF1YXJrLgotICovCi12b2lkCi1nc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhIChHc3RNaW5pT2JqZWN0ICogb2JqZWN0LCBHUXVhcmsgcXVhcmssCi0gICAgZ3BvaW50ZXIgZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveSkKLXsKLSAgZ2ludCBpOwotICBncG9pbnRlciBvbGRfZGF0YSA9IE5VTEw7Ci0gIEdEZXN0cm95Tm90aWZ5IG9sZF9ub3RpZnkgPSBOVUxMOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAocXVhcmsgPiAwKTsKLQotICBHX0xPQ0sgKHFkYXRhX211dGV4KTsKLSAgaWYgKChpID0gZmluZF9ub3RpZnkgKG9iamVjdCwgcXVhcmssIEZBTFNFLCBOVUxMLCBOVUxMKSkgIT0gLTEpIHsKLQotICAgIG9sZF9kYXRhID0gUURBVEFfREFUQSAob2JqZWN0LCBpKTsKLSAgICBvbGRfbm90aWZ5ID0gUURBVEFfREVTVFJPWSAob2JqZWN0LCBpKTsKLQotICAgIGlmIChkYXRhID09IE5VTEwpCi0gICAgICByZW1vdmVfbm90aWZ5IChvYmplY3QsIGkpOwotICB9Ci0gIGlmIChkYXRhICE9IE5VTEwpCi0gICAgc2V0X25vdGlmeSAob2JqZWN0LCBpLCBxdWFyaywgTlVMTCwgZGF0YSwgZGVzdHJveSk7Ci0gIEdfVU5MT0NLIChxZGF0YV9tdXRleCk7Ci0KLSAgaWYgKG9sZF9ub3RpZnkpCi0gICAgb2xkX25vdGlmeSAob2xkX2RhdGEpOwotfQotCi0vKioKLSAqIGdzdF9taW5pX29iamVjdF9nZXRfcWRhdGE6Ci0gKiBAb2JqZWN0OiBUaGUgR3N0TWluaU9iamVjdCB0byBnZXQgYSBzdG9yZWQgdXNlciBkYXRhIHBvaW50ZXIgZnJvbQotICogQHF1YXJrOiBBICNHUXVhcmssIG5hbWluZyB0aGUgdXNlciBkYXRhIHBvaW50ZXIKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgYmFjayB1c2VyIGRhdGEgcG9pbnRlcnMgc3RvcmVkIHZpYQotICogZ3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YSgpLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiBUaGUgdXNlciBkYXRhIHBvaW50ZXIgc2V0LCBvcgotICogJU5VTEwKLSAqLwotZ3BvaW50ZXIKLWdzdF9taW5pX29iamVjdF9nZXRfcWRhdGEgKEdzdE1pbmlPYmplY3QgKiBvYmplY3QsIEdRdWFyayBxdWFyaykKLXsKLSAgZ3VpbnQgaTsKLSAgZ3BvaW50ZXIgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChxdWFyayA+IDAsIE5VTEwpOwotCi0gIEdfTE9DSyAocWRhdGFfbXV0ZXgpOwotICBpZiAoKGkgPSBmaW5kX25vdGlmeSAob2JqZWN0LCBxdWFyaywgRkFMU0UsIE5VTEwsIE5VTEwpKSAhPSAtMSkKLSAgICByZXN1bHQgPSBRREFUQV9EQVRBIChvYmplY3QsIGkpOwotICBlbHNlCi0gICAgcmVzdWx0ID0gTlVMTDsKLSAgR19VTkxPQ0sgKHFkYXRhX211dGV4KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9taW5pX29iamVjdF9zdGVhbF9xZGF0YToKLSAqIEBvYmplY3Q6IFRoZSBHc3RNaW5pT2JqZWN0IHRvIGdldCBhIHN0b3JlZCB1c2VyIGRhdGEgcG9pbnRlciBmcm9tCi0gKiBAcXVhcms6IEEgI0dRdWFyaywgbmFtaW5nIHRoZSB1c2VyIGRhdGEgcG9pbnRlcgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBiYWNrIHVzZXIgZGF0YSBwb2ludGVycyBzdG9yZWQgdmlhIGdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEoKQotICogYW5kIHJlbW92ZXMgdGhlIGRhdGEgZnJvbSBAb2JqZWN0IHdpdGhvdXQgaW52b2tpbmcgaXRzIGRlc3Ryb3koKSBmdW5jdGlvbiAoaWYKLSAqIGFueSB3YXMgc2V0KS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogVGhlIHVzZXIgZGF0YSBwb2ludGVyIHNldCwgb3IKLSAqICVOVUxMCi0gKi8KLWdwb2ludGVyCi1nc3RfbWluaV9vYmplY3Rfc3RlYWxfcWRhdGEgKEdzdE1pbmlPYmplY3QgKiBvYmplY3QsIEdRdWFyayBxdWFyaykKLXsKLSAgZ3VpbnQgaTsKLSAgZ3BvaW50ZXIgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChxdWFyayA+IDAsIE5VTEwpOwotCi0gIEdfTE9DSyAocWRhdGFfbXV0ZXgpOwotICBpZiAoKGkgPSBmaW5kX25vdGlmeSAob2JqZWN0LCBxdWFyaywgRkFMU0UsIE5VTEwsIE5VTEwpKSAhPSAtMSkgewotICAgIHJlc3VsdCA9IFFEQVRBX0RBVEEgKG9iamVjdCwgaSk7Ci0gICAgcmVtb3ZlX25vdGlmeSAob2JqZWN0LCBpKTsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHQgPSBOVUxMOwotICB9Ci0gIEdfVU5MT0NLIChxZGF0YV9tdXRleCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RtaW5pb2JqZWN0LmggYi9nc3QvZ3N0bWluaW9iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGViMDgwLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RtaW5pb2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKgotICogZ3N0bWluaW9iamVjdC5oOiBIZWFkZXIgZm9yIEdzdE1pbmlPYmplY3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfTUlOSV9PQkpFQ1RfSF9fCi0jZGVmaW5lIF9fR1NUX01JTklfT0JKRUNUX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9JU19NSU5JX09CSkVDVF9UWVBFKG9iaix0eXBlKSAgKChvYmopICYmIEdTVF9NSU5JX09CSkVDVF9UWVBFKG9iaikgPT0gKHR5cGUpKQotI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopICAgICAgICAgICgoR3N0TWluaU9iamVjdCopKG9iaikpCi0jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9DT05TVF9DQVNUKG9iaikgICAgKChjb25zdCBHc3RNaW5pT2JqZWN0Kikob2JqKSkKLSNkZWZpbmUgR1NUX01JTklfT0JKRUNUKG9iaikgICAgICAgICAgICAgICAoR1NUX01JTklfT0JKRUNUX0NBU1Qob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1pbmlPYmplY3QgR3N0TWluaU9iamVjdDsKLQotLyoqCi0gKiBHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uOgotICogQG9iajogTWluaU9iamVjdCB0byBjb3B5Ci0gKgotICogRnVuY3Rpb24gcHJvdG90eXBlIGZvciBtZXRob2RzIHRvIGNyZWF0ZSBjb3BpZXMgb2YgaW5zdGFuY2VzLgotICoKLSAqIFJldHVybnM6IHJlZmVyZW5jZSB0byBjbG9uZWQgaW5zdGFuY2UuCi0gKi8KLXR5cGVkZWYgR3N0TWluaU9iamVjdCAqICgqR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbikgKGNvbnN0IEdzdE1pbmlPYmplY3QgKm9iaik7Ci0vKioKLSAqIEdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb246Ci0gKiBAb2JqOiBNaW5pT2JqZWN0IHRvIGRpc3Bvc2UKLSAqCi0gKiBGdW5jdGlvbiBwcm90b3R5cGUgZm9yIHdoZW4gYSBtaW5pb2JqZWN0IGhhcyBsb3N0IGl0cyBsYXN0IHJlZmNvdW50LgotICogSW1wbGVtZW50YXRpb24gb2YgdGhlIG1pbmkgb2JqZWN0IGFyZSBhbGxvd2VkIHRvIHJldml2ZSB0aGUKLSAqIHBhc3NlZCBvYmplY3QgYnkgZG9pbmcgYSBnc3RfbWluaV9vYmplY3RfcmVmKCkuIElmIHRoZSBvYmplY3QgaXMgbm90Ci0gKiByZXZpdmVkIGFmdGVyIHRoZSBkaXNwb3NlIGZ1bmN0aW9uLCB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiAlVFJVRQotICogYW5kIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgaXMgZnJlZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgY2xlYW5lZCB1cC4KLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAoKkdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24pIChHc3RNaW5pT2JqZWN0ICpvYmopOwotLyoqCi0gKiBHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uOgotICogQG9iajogTWluaU9iamVjdCB0byBmcmVlCi0gKgotICogVmlydHVhbCBmdW5jdGlvbiBwcm90b3R5cGUgZm9yIG1ldGhvZHMgdG8gZnJlZSByZXNvdXJjZXMgdXNlZCBieQotICogbWluaS1vYmplY3RzLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSAoR3N0TWluaU9iamVjdCAqb2JqKTsKLQotIC8qKgotICogR3N0TWluaU9iamVjdE5vdGlmeToKLSAqIEB1c2VyX2RhdGE6IGRhdGEgdGhhdCB3YXMgcHJvdmlkZWQgd2hlbiB0aGUgbm90aWZ5IHdhcyBhZGRlZAotICogQG9iajogdGhlIG1pbmkgb2JqZWN0Ci0gKgotICogQSAjR3N0TWluaU9iamVjdE5vdGlmeSBmdW5jdGlvbiBjYW4gYmUgYWRkZWQgdG8gYSBtaW5pIG9iamVjdCBhcyBhCi0gKiBjYWxsYmFjayB0aGF0IGdldHMgdHJpZ2dlcmVkIHdoZW4gZ3N0X21pbmlfb2JqZWN0X3VucmVmKCkgZHJvcHMgdGhlCi0gKiBsYXN0IHJlZiBhbmQgQG9iaiBpcyBhYm91dCB0byBiZSBmcmVlZC4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0TWluaU9iamVjdE5vdGlmeSkgKGdwb2ludGVyIHVzZXJfZGF0YSwgR3N0TWluaU9iamVjdCAqIG9iaik7Ci0KLS8qKgotICogR1NUX01JTklfT0JKRUNUX1RZUEU6Ci0gKiBAb2JqOiBNaW5pT2JqZWN0IHRvIHJldHVybiB0eXBlIGZvci4KLSAqCi0gKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIHR5cGUgb2YgdGhlIG1pbmktb2JqZWN0LgotICovCi0jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9UWVBFKG9iaikgIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopLT50eXBlKQotCi0vKioKLSAqIEdTVF9NSU5JX09CSkVDVF9GTEFHUzoKLSAqIEBvYmo6IE1pbmlPYmplY3QgdG8gcmV0dXJuIGZsYWdzIGZvci4KLSAqCi0gKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIGVudGlyZSBzZXQgb2YgZmxhZ3MgZm9yIHRoZSBtaW5pLW9iamVjdC4KLSAqLwotI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfRkxBR1Mob2JqKSAgKEdTVF9NSU5JX09CSkVDVF9DQVNUKG9iaiktPmZsYWdzKQotLyoqCi0gKiBHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQ6Ci0gKiBAb2JqOiBNaW5pT2JqZWN0IHRvIGNoZWNrIGZvciBmbGFncy4KLSAqIEBmbGFnOiBGbGFnIHRvIGNoZWNrIGZvcgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gZmxhZyBpcyBzZXQuCi0gKi8KLSNkZWZpbmUgR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUKG9iaixmbGFnKSAgICAgICAgISEoR1NUX01JTklfT0JKRUNUX0ZMQUdTIChvYmopICYgKGZsYWcpKQotLyoqCi0gKiBHU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQ6Ci0gKiBAb2JqOiBNaW5pT2JqZWN0IHRvIHNldCBmbGFnIGluLgotICogQGZsYWc6IEZsYWcgdG8gc2V0LCBjYW4gYnkgYW55IG51bWJlciBvZiBiaXRzIGluIGd1aW50MzIuCi0gKgotICogVGhpcyBtYWNybyBzZXRzIHRoZSBnaXZlbiBiaXRzLgotICovCi0jZGVmaW5lIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVChvYmosZmxhZykgICAgICAgICAgIChHU1RfTUlOSV9PQkpFQ1RfRkxBR1MgKG9iaikgfD0gKGZsYWcpKQotLyoqCi0gKiBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVDoKLSAqIEBvYmo6IE1pbmlPYmplY3QgdG8gdW5zZXQgZmxhZyBpbi4KLSAqIEBmbGFnOiBGbGFnIHRvIHNldCwgbXVzdCBiZSBhIHNpbmdsZSBiaXQgaW4gZ3VpbnQzMi4KLSAqCi0gKiBUaGlzIG1hY3JvIHVuc2V0cyB0aGUgZ2l2ZW4gYml0cy4KLSAqLwotI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfRkxBR19VTlNFVChvYmosZmxhZykgICAgICAgICAoR1NUX01JTklfT0JKRUNUX0ZMQUdTIChvYmopICY9IH4oZmxhZykpCi0KLS8qKgotICogR3N0TWluaU9iamVjdEZsYWdzOgotICogQEdTVF9NSU5JX09CSkVDVF9GTEFHX0xPQ0tBQkxFOiB0aGUgb2JqZWN0IGNhbiBiZSBsb2NrZWQgYW5kIHVubG9ja2VkIHdpdGgKLSAqIGdzdF9taW5pX29iamVjdF9sb2NrKCkgYW5kIGdzdF9taW5pX29iamVjdF91bmxvY2soKS4KLSAqIEBHU1RfTUlOSV9PQkpFQ1RfRkxBR19MT0NLX1JFQURPTkxZOiB0aGUgb2JqZWN0IGlzIHBlcm1hbmVudGx5IGxvY2tlZCBpbgotICogUkVBRE9OTFkgbW9kZS4gT25seSByZWFkIGxvY2tzIGNhbiBiZSBwZXJmb3JtZWQgb24gdGhlIG9iamVjdC4KLSAqIEBHU1RfTUlOSV9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEOiB0aGUgb2JqZWN0IGlzIGV4cGVjdGVkIHRvIHN0YXkgYWxpdmUKLSAqIGV2ZW4gYWZ0ZXIgZ3N0X2RlaW5pdCgpIGhhcyBiZWVuIGNhbGxlZCBhbmQgc28gc2hvdWxkIGJlIGlnbm9yZWQgYnkgbGVhawotICogZGV0ZWN0aW9uIHRvb2xzLiAoU2luY2UgMS4xMCkKLSAqIEBHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUOiBmaXJzdCBmbGFnIHRoYXQgY2FuIGJlIHVzZWQgYnkgc3ViY2xhc3Nlcy4KLSAqCi0gKiBGbGFncyBmb3IgdGhlIG1pbmkgb2JqZWN0Ci0gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19MT0NLQUJMRSAgICAgID0gKDEgPDwgMCksCi0gIEdTVF9NSU5JX09CSkVDVF9GTEFHX0xPQ0tfUkVBRE9OTFkgPSAoMSA8PCAxKSwKLSAgR1NUX01JTklfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCA9ICgxIDw8IDIpLAotICAvKiBwYWRkaW5nICovCi0gIEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QgICAgICAgICAgPSAoMSA8PCA0KQotfSBHc3RNaW5pT2JqZWN0RmxhZ3M7Ci0KLS8qKgotICogR1NUX01JTklfT0JKRUNUX0lTX0xPQ0tBQkxFOgotICogQG9iajogYSAjR3N0TWluaU9iamVjdAotICoKLSAqIENoZWNrIGlmIEBvYmogaXMgbG9ja2FibGUuIEEgbG9ja2FibGUgb2JqZWN0IGNhbiBiZSBsb2NrZWQgYW5kIHVubG9ja2VkIHdpdGgKLSAqIGdzdF9taW5pX29iamVjdF9sb2NrKCkgYW5kIGdzdF9taW5pX29iamVjdF91bmxvY2soKS4KLSAqLwotI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfSVNfTE9DS0FCTEUob2JqKSAgR1NUX01JTklfT0JKRUNUX0ZMQUdfSVNfU0VUKG9iaiwgR1NUX01JTklfT0JKRUNUX0ZMQUdfTE9DS0FCTEUpCi0KLS8qKgotICogR3N0TG9ja0ZsYWdzOgotICogQEdTVF9MT0NLX0ZMQUdfUkVBRDogbG9jayBmb3IgcmVhZCBhY2Nlc3MKLSAqIEBHU1RfTE9DS19GTEFHX1dSSVRFOiBsb2NrIGZvciB3cml0ZSBhY2Nlc3MKLSAqIEBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRTogbG9jayBmb3IgZXhjbHVzaXZlIGFjY2VzcwotICogQEdTVF9MT0NLX0ZMQUdfTEFTVDogZmlyc3QgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXMKLSAqCi0gKiBGbGFncyB1c2VkIHdoZW4gbG9ja2luZyBtaW5pb2JqZWN0cwotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfTE9DS19GTEFHX1JFQUQgICAgICA9ICgxIDw8IDApLAotICBHU1RfTE9DS19GTEFHX1dSSVRFICAgICA9ICgxIDw8IDEpLAotICBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSA9ICgxIDw8IDIpLAotCi0gIEdTVF9MT0NLX0ZMQUdfTEFTVCAgICAgID0gKDEgPDwgOCkKLX0gR3N0TG9ja0ZsYWdzOwotCi0vKioKLSAqIEdTVF9MT0NLX0ZMQUdfUkVBRFdSSVRFOgotICoKLSAqIEdzdExvY2tGbGFncyB2YWx1ZSBhbGlhcyBmb3IgR1NUX0xPQ0tfRkxBR19SRUFEIHwgR1NUX0xPQ0tfRkxBR19XUklURQotICovCi0jZGVmaW5lIEdTVF9MT0NLX0ZMQUdfUkVBRFdSSVRFICAoR1NUX0xPQ0tfRkxBR19SRUFEIHwgR1NUX0xPQ0tfRkxBR19XUklURSkKLQotLyoqCi0gKiBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQ6Ci0gKiBAb2JqOiBhICNHc3RNaW5pT2JqZWN0Ci0gKgotICogR2V0IGFjY2VzcyB0byB0aGUgcmVmZXJlbmNlIGNvdW50IGZpZWxkIG9mIHRoZSBtaW5pLW9iamVjdC4KLSAqLwotI2RlZmluZSBHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlQob2JqKSAgICAgICAgICAgKChHU1RfTUlOSV9PQkpFQ1RfQ0FTVChvYmopKS0+cmVmY291bnQpCi0vKioKLSAqIEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRToKLSAqIEBvYmo6IGEgI0dzdE1pbmlPYmplY3QKLSAqCi0gKiBHZXQgdGhlIHJlZmVyZW5jZSBjb3VudCB2YWx1ZSBvZiB0aGUgbWluaS1vYmplY3QuCi0gKi8KLSNkZWZpbmUgR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFKG9iaikgICAgIChnX2F0b21pY19pbnRfZ2V0ICgmKEdTVF9NSU5JX09CSkVDVF9DQVNUKG9iaikpLT5yZWZjb3VudCkpCi0KLS8qKgotICogR3N0TWluaU9iamVjdDogKHJlZi1mdW5jIGdzdF9taW5pX29iamVjdF9yZWYpICh1bnJlZi1mdW5jIGdzdF9taW5pX29iamVjdF91bnJlZikgKHNldC12YWx1ZS1mdW5jIGdfdmFsdWVfc2V0X2JveGVkKSAoZ2V0LXZhbHVlLWZ1bmMgZ192YWx1ZV9nZXRfYm94ZWQpCi0gKiBAdHlwZTogdGhlIEdUeXBlIG9mIHRoZSBvYmplY3QKLSAqIEByZWZjb3VudDogYXRvbWljIHJlZmNvdW50Ci0gKiBAbG9ja3N0YXRlOiBhdG9taWMgc3RhdGUgb2YgdGhlIGxvY2tzCi0gKiBAZmxhZ3M6IGV4dHJhIGZsYWdzLgotICogQGNvcHk6IGEgY29weSBmdW5jdGlvbgotICogQGRpc3Bvc2U6IGEgZGlzcG9zZSBmdW5jdGlvbgotICogQGZyZWU6IHRoZSBmcmVlIGZ1bmN0aW9uCi0gKgotICogQmFzZSBjbGFzcyBmb3IgcmVmY291bnRlZCBsaWdodHdlaWdodCBvYmplY3RzLgotICovCi1zdHJ1Y3QgX0dzdE1pbmlPYmplY3QgewotICBHVHlwZSAgIHR5cGU7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8gLyogd2l0aCBDT1cgKi8KLSAgZ2ludCAgICByZWZjb3VudDsKLSAgZ2ludCAgICBsb2Nrc3RhdGU7Ci0gIGd1aW50ICAgZmxhZ3M7Ci0KLSAgR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbiBjb3B5OwotICBHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIGRpc3Bvc2U7Ci0gIEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24gZnJlZTsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2VhayByZWYgbm90aWZpZXMgYW5kIHFkYXRhICovCi0gIGd1aW50IG5fcWRhdGE7Ci0gIGdwb2ludGVyIHFkYXRhOwotfTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9taW5pX29iamVjdF9pbml0IChHc3RNaW5pT2JqZWN0ICptaW5pX29iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgZmxhZ3MsIEdUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24gY29weV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RNaW5pT2JqZWN0RGlzcG9zZUZ1bmN0aW9uIGRpc3Bvc2VfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbiBmcmVlX2Z1bmMpOwotCi0KLS8qIHJlZmNvdW50aW5nICovCi1Hc3RNaW5pT2JqZWN0ICogZ3N0X21pbmlfb2JqZWN0X3JlZgkJKEdzdE1pbmlPYmplY3QgKm1pbmlfb2JqZWN0KTsKLXZvaWQgICAgICAgICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYJCShHc3RNaW5pT2JqZWN0ICptaW5pX29iamVjdCk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfbWluaV9vYmplY3Rfd2Vha19yZWYgICAgICAgIChHc3RNaW5pT2JqZWN0ICpvYmplY3QsCi0JCQkJCSAgICAgICAgIEdzdE1pbmlPYmplY3ROb3RpZnkgbm90aWZ5LAotCQkJCQkgICAgICAgICBncG9pbnRlciBkYXRhKTsKLXZvaWQgICAgICAgICAgICBnc3RfbWluaV9vYmplY3Rfd2Vha191bnJlZgkoR3N0TWluaU9iamVjdCAqb2JqZWN0LAotCQkJCQkgICAgICAgICBHc3RNaW5pT2JqZWN0Tm90aWZ5IG5vdGlmeSwKLQkJCQkJICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7Ci0KLS8qIGxvY2tpbmcgKi8KLWdib29sZWFuICAgICAgICBnc3RfbWluaV9vYmplY3RfbG9jayAgICAgICAgICAgIChHc3RNaW5pT2JqZWN0ICpvYmplY3QsIEdzdExvY2tGbGFncyBmbGFncyk7Ci12b2lkICAgICAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3VubG9jayAgICAgICAgICAoR3N0TWluaU9iamVjdCAqb2JqZWN0LCBHc3RMb2NrRmxhZ3MgZmxhZ3MpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlICAgICAoY29uc3QgR3N0TWluaU9iamVjdCAqbWluaV9vYmplY3QpOwotR3N0TWluaU9iamVjdCAqIGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlCShHc3RNaW5pT2JqZWN0ICptaW5pX29iamVjdCkgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLQotLyogY29weSAqLwotR3N0TWluaU9iamVjdCAqIGdzdF9taW5pX29iamVjdF9jb3B5CQkoY29uc3QgR3N0TWluaU9iamVjdCAqbWluaV9vYmplY3QpIEdfR05VQ19NQUxMT0MgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLQotCi12b2lkICAgICAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3NldF9xZGF0YSAgICAgICAoR3N0TWluaU9iamVjdCAqb2JqZWN0LCBHUXVhcmsgcXVhcmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveSk7Ci1ncG9pbnRlciAgICAgICAgZ3N0X21pbmlfb2JqZWN0X2dldF9xZGF0YSAgICAgICAoR3N0TWluaU9iamVjdCAqb2JqZWN0LCBHUXVhcmsgcXVhcmspOwotZ3BvaW50ZXIgICAgICAgIGdzdF9taW5pX29iamVjdF9zdGVhbF9xZGF0YSAgICAgKEdzdE1pbmlPYmplY3QgKm9iamVjdCwgR1F1YXJrIHF1YXJrKTsKLQotCi1nYm9vbGVhbiAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3JlcGxhY2UgICAgICAgICAoR3N0TWluaU9iamVjdCAqKm9sZGRhdGEsIEdzdE1pbmlPYmplY3QgKm5ld2RhdGEpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9taW5pX29iamVjdF90YWtlICAgICAgICAgICAgKEdzdE1pbmlPYmplY3QgKipvbGRkYXRhLCBHc3RNaW5pT2JqZWN0ICpuZXdkYXRhKTsKLUdzdE1pbmlPYmplY3QgKiBnc3RfbWluaV9vYmplY3Rfc3RlYWwgICAgICAgICAgIChHc3RNaW5pT2JqZWN0ICoqb2xkZGF0YSkgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLQotLyoqCi0gKiBHU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEU6Ci0gKiBAVHlwZU5hbWU6IG5hbWUgb2YgdGhlIG5ldyB0eXBlIGluIENhbWVsQ2FzZQotICogQHR5cGVfbmFtZTogbmFtZSBvZiB0aGUgbmV3IHR5cGUKLSAqCi0gKiBEZWZpbmUgYSBuZXcgbWluaS1vYmplY3QgdHlwZSB3aXRoIHRoZSBnaXZlbiBuYW1lCi0gKi8KLSNkZWZpbmUgR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFKFR5cGVOYW1lLHR5cGVfbmFtZSkgXAotICAgR19ERUZJTkVfQk9YRURfVFlQRShUeXBlTmFtZSx0eXBlX25hbWUsICAgICAgICAgICAgICBcCi0gICAgICAgKEdCb3hlZENvcHlGdW5jKSBnc3RfbWluaV9vYmplY3RfcmVmLCAgICAgICAgICAgIFwKLSAgICAgICAoR0JveGVkRnJlZUZ1bmMpIGdzdF9taW5pX29iamVjdF91bnJlZikKLQotR19FTkRfREVDTFMKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2dzdC9nc3RvYmplY3QuYyBiL2dzdC9nc3RvYmplY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM1YzkwYS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0b2JqZWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDc0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0b2JqZWN0LmM6IEZ1bmRhbWVudGFsIGNsYXNzIHVzZWQgZm9yIGFsbCBvZiBHU3RyZWFtZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0b2JqZWN0Ci0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIHRoZSBHU3RyZWFtZXIgb2JqZWN0IGhpZXJhcmNoeQotICoKLSAqICNHc3RPYmplY3QgcHJvdmlkZXMgYSByb290IGZvciB0aGUgb2JqZWN0IGhpZXJhcmNoeSB0cmVlIGZpbGVkIGluIGJ5IHRoZQotICogR1N0cmVhbWVyIGxpYnJhcnkuICBJdCBpcyBjdXJyZW50bHkgYSB0aGluIHdyYXBwZXIgb24gdG9wIG9mCi0gKiAjR0luaXRpYWxseVVub3duZWQuIEl0IGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgaXMgbm90IHZlcnkgdXNhYmxlIG9uIGl0cyBvd24uCi0gKgotICogI0dzdE9iamVjdCBnaXZlcyB1cyBiYXNpYyByZWZjb3VudGluZywgcGFyZW50aW5nIGZ1bmN0aW9uYWxpdHkgYW5kIGxvY2tpbmcuCi0gKiBNb3N0IG9mIHRoZSBmdW5jdGlvbnMgYXJlIGp1c3QgZXh0ZW5kZWQgZm9yIHNwZWNpYWwgR1N0cmVhbWVyIG5lZWRzIGFuZCBjYW4gYmUKLSAqIGZvdW5kIHVuZGVyIHRoZSBzYW1lIG5hbWUgaW4gdGhlIGJhc2UgY2xhc3Mgb2YgI0dzdE9iamVjdCB3aGljaCBpcyAjR09iamVjdAotICogKGUuZy4gZ19vYmplY3RfcmVmKCkgYmVjb21lcyBnc3Rfb2JqZWN0X3JlZigpKS4KLSAqCi0gKiBTaW5jZSAjR3N0T2JqZWN0IGRlcml2ZXMgZnJvbSAjR0luaXRpYWxseVVub3duZWQsIGl0IGFsc28gaW5oZXJpdHMgdGhlCi0gKiBmbG9hdGluZyByZWZlcmVuY2UuIEJlIGF3YXJlIHRoYXQgZnVuY3Rpb25zIHN1Y2ggYXMgZ3N0X2Jpbl9hZGQoKSBhbmQKLSAqIGdzdF9lbGVtZW50X2FkZF9wYWQoKSB0YWtlIG93bmVyc2hpcCBvZiB0aGUgZmxvYXRpbmcgcmVmZXJlbmNlLgotICoKLSAqIEluIGNvbnRyYXN0IHRvICNHT2JqZWN0IGluc3RhbmNlcywgI0dzdE9iamVjdCBhZGRzIGEgbmFtZSBwcm9wZXJ0eS4gVGhlIGZ1bmN0aW9ucwotICogZ3N0X29iamVjdF9zZXRfbmFtZSgpIGFuZCBnc3Rfb2JqZWN0X2dldF9uYW1lKCkgYXJlIHVzZWQgdG8gc2V0L2dldCB0aGUgbmFtZQotICogb2YgdGhlIG9iamVjdC4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+Y29udHJvbGxlZCBwcm9wZXJ0aWVzPC90aXRsZT4KLSAqIDxwYXJhPgotICogQ29udHJvbGxlZCBwcm9wZXJ0aWVzIG9mZmVycyBhIGxpZ2h0d2VpZ2h0IHdheSB0byBhZGp1c3QgZ29iamVjdCBwcm9wZXJ0aWVzCi0gKiBvdmVyIHN0cmVhbS10aW1lLiBJdCB3b3JrcyBieSB1c2luZyB0aW1lLXN0YW1wZWQgdmFsdWUgcGFpcnMgdGhhdCBhcmUgcXVldWVkCi0gKiBmb3IgZWxlbWVudC1wcm9wZXJ0aWVzLiBBdCBydW4tdGltZSB0aGUgZWxlbWVudHMgY29udGludW91c2x5IHB1bGwgdmFsdWUKLSAqIGNoYW5nZXMgZm9yIHRoZSBjdXJyZW50IHN0cmVhbS10aW1lLgotICoKLSAqIFdoYXQgbmVlZHMgdG8gYmUgY2hhbmdlZCBpbiBhICNHc3RFbGVtZW50PwotICogVmVyeSBsaXR0bGUgLSBpdCBpcyBqdXN0IHR3byBzdGVwcyB0byBtYWtlIGEgcGx1Z2luIGNvbnRyb2xsYWJsZSEKLSAqIDxvcmRlcmVkbGlzdD4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIG1hcmsgZ29iamVjdC1wcm9wZXJ0aWVzIHBhcmFtc3BlY3MgdGhhdCBtYWtlIHNlbnNlIHRvIGJlIGNvbnRyb2xsZWQsCi0gKiAgICAgYnkgR1NUX1BBUkFNX0NPTlRST0xMQUJMRS4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICB3aGVuIHByb2Nlc3NpbmcgZGF0YSAoZ2V0LCBjaGFpbiwgbG9vcCBmdW5jdGlvbikgYXQgdGhlIGJlZ2lubmluZyBjYWxsCi0gKiAgICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyhlbGVtZW50LHRpbWVzdGFtcCkuCi0gKiAgICAgVGhpcyB3aWxsIG1ha2UgdGhlIGNvbnRyb2xsZXIgdXBkYXRlIGFsbCBHT2JqZWN0IHByb3BlcnRpZXMgdGhhdCBhcmUKLSAqICAgICB1bmRlciBpdHMgY29udHJvbCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlcyBiYXNlZCBvbiB0aGUgdGltZXN0YW1wLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqIDwvb3JkZXJlZGxpc3Q+Ci0gKgotICogV2hhdCBuZWVkcyB0byBiZSBkb25lIGluIGFwcGxpY2F0aW9ucz8KLSAqIEFnYWluIGl0J3Mgbm90IGEgbG90IHRvIGNoYW5nZS4KLSAqIDxvcmRlcmVkbGlzdD4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIGNyZWF0ZSBhICNHc3RDb250cm9sU291cmNlLgotICogICAgIGNzb3VyY2UgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gKiAgICAgZ19vYmplY3Rfc2V0IChjc291cmNlLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSLCBOVUxMKTsKLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBBdHRhY2ggdGhlICNHc3RDb250cm9sU291cmNlIG9uIHRoZSBjb250cm9sbGVyIHRvIGEgcHJvcGVydHkuCi0gKiAgICAgZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChvYmplY3QsIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAob2JqZWN0LCAicHJvcDEiLCBjc291cmNlKSk7Ci0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgU2V0IHRoZSBjb250cm9sIHZhbHVlcwotICogICAgIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKWNzb3VyY2UsMCAqIEdTVF9TRUNPTkQsIHZhbHVlMSk7Ci0gKiAgICAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAoKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopY3NvdXJjZSwxICogR1NUX1NFQ09ORCwgdmFsdWUyKTsKLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBzdGFydCB5b3VyIHBpcGVsaW5lCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogPC9vcmRlcmVkbGlzdD4KLSAqIDwvcGFyYT4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiZ3N0b2JqZWN0LmgiCi0jaW5jbHVkZSAiZ3N0Y2xvY2suaCIKLSNpbmNsdWRlICJnc3Rjb250cm9sYmluZGluZy5oIgotI2luY2x1ZGUgImdzdGNvbnRyb2xzb3VyY2UuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0cGFyYW1zcGVjcy5oIgotI2luY2x1ZGUgImdzdHV0aWxzLmgiCi0KLSNkZWZpbmUgREVCVUdfUkVGQ09VTlQKLQotLyogT2JqZWN0IHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgREVFUF9OT1RJRlksCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9OQU1FLAotICBQUk9QX1BBUkVOVCwKLSAgUFJPUF9MQVNUCi19OwotCi1lbnVtCi17Ci0gIFNPX09CSkVDVF9MT0FERUQsCi0gIFNPX0xBU1RfU0lHTkFMCi19OwotCi0vKiBtYXBzIHR5cGUgbmFtZSBxdWFyayA9PiBjb3VudCAqLwotc3RhdGljIEdEYXRhICpvYmplY3RfbmFtZV9jb3VudHMgPSBOVUxMOwotCi1HX0xPQ0tfREVGSU5FX1NUQVRJQyAob2JqZWN0X25hbWVfbXV0ZXgpOwotCi1zdGF0aWMgdm9pZCBnc3Rfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9vYmplY3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZCBnc3Rfb2JqZWN0X2Rpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZCAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBuX3BzcGVjcywgR1BhcmFtU3BlYyAqKiBwc3BlY3MpOwotCi1zdGF0aWMgdm9pZCBnc3Rfb2JqZWN0X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X29iamVjdF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb2JqZWN0X3NldF9uYW1lX2RlZmF1bHQgKEdzdE9iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBndWludCBnc3Rfb2JqZWN0X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyBHUGFyYW1TcGVjICpwcm9wZXJ0aWVzW1BST1BfTEFTVF07Ci0KLUdfREVGSU5FX0FCU1RSQUNUX1RZUEUgKEdzdE9iamVjdCwgZ3N0X29iamVjdCwgR19UWVBFX0lOSVRJQUxMWV9VTk9XTkVEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9vYmplY3RfY29uc3RydWN0ZWQgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdTVF9UUkFDRVJfT0JKRUNUX0NSRUFURUQgKEdTVF9PQkpFQ1RfQ0FTVCAob2JqZWN0KSk7Ci0KLSAgKChHT2JqZWN0Q2xhc3MgKikgZ3N0X29iamVjdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vYmplY3RfY2xhc3NfaW5pdCAoR3N0T2JqZWN0Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfb2JqZWN0X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X29iamVjdF9nZXRfcHJvcGVydHk7Ci0KLSAgcHJvcGVydGllc1tQUk9QX05BTUVdID0KLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJuYW1lIiwgIk5hbWUiLCAiVGhlIG5hbWUgb2YgdGhlIG9iamVjdCIsIE5VTEwsCi0gICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7Ci0KLSAgLyoqCi0gICAqIEdzdE9iamVjdDpwYXJlbnQ6Ci0gICAqCi0gICAqIFRoZSBwYXJlbnQgb2YgdGhlIG9iamVjdC4gUGxlYXNlIG5vdGUsIHRoYXQgd2hlbiBjaGFuZ2luZyB0aGUgJ3BhcmVudCcKLSAgICogcHJvcGVydHksIHdlIGRvbid0IGVtaXQgI0dPYmplY3Q6Om5vdGlmeSBhbmQgI0dzdE9iamVjdDo6ZGVlcC1ub3RpZnkKLSAgICogc2lnbmFscyBkdWUgdG8gbG9ja2luZyBpc3N1ZXMuIEluIHNvbWUgY2FzZXMgb25lIGNhbiB1c2UKLSAgICogI0dzdEJpbjo6ZWxlbWVudC1hZGRlZCBvciAjR3N0QmluOjplbGVtZW50LXJlbW92ZWQgc2lnbmFscyBvbiB0aGUgcGFyZW50IHRvCi0gICAqIGFjaGlldmUgYSBzaW1pbGFyIGVmZmVjdC4KLSAgICovCi0gIHByb3BlcnRpZXNbUFJPUF9QQVJFTlRdID0KLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJwYXJlbnQiLCAiUGFyZW50IiwgIlRoZSBwYXJlbnQgb2YgdGhlIG9iamVjdCIsCi0gICAgICBHU1RfVFlQRV9PQkpFQ1QsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0aWVzIChnb2JqZWN0X2NsYXNzLCBQUk9QX0xBU1QsIHByb3BlcnRpZXMpOwotCi0gIC8qKgotICAgKiBHc3RPYmplY3Q6OmRlZXAtbm90aWZ5OgotICAgKiBAZ3N0b2JqZWN0OiBhICNHc3RPYmplY3QKLSAgICogQHByb3Bfb2JqZWN0OiB0aGUgb2JqZWN0IHRoYXQgb3JpZ2luYXRlZCB0aGUgc2lnbmFsCi0gICAqIEBwcm9wOiB0aGUgcHJvcGVydHkgdGhhdCBjaGFuZ2VkCi0gICAqCi0gICAqIFRoZSBkZWVwIG5vdGlmeSBzaWduYWwgaXMgdXNlZCB0byBiZSBub3RpZmllZCBvZiBwcm9wZXJ0eSBjaGFuZ2VzLiBJdCBpcwotICAgKiB0eXBpY2FsbHkgYXR0YWNoZWQgdG8gdGhlIHRvcGxldmVsIGJpbiB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgZnJvbSBhbGwKLSAgICogdGhlIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGF0IGJpbi4KLSAgICovCi0gIGdzdF9vYmplY3Rfc2lnbmFsc1tERUVQX05PVElGWV0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiZGVlcC1ub3RpZnkiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0ZJUlNUIHwgR19TSUdOQUxfTk9fUkVDVVJTRSB8IEdfU0lHTkFMX0RFVEFJTEVEIHwKLSAgICAgIEdfU0lHTkFMX05PX0hPT0tTLCBHX1NUUlVDVF9PRkZTRVQgKEdzdE9iamVjdENsYXNzLCBkZWVwX25vdGlmeSksIE5VTEwsCi0gICAgICBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsIEdTVF9UWVBFX09CSkVDVCwKLSAgICAgIEdfVFlQRV9QQVJBTSk7Ci0KLSAga2xhc3MtPnBhdGhfc3RyaW5nX3NlcGFyYXRvciA9ICIvIjsKLQotICAvKiBzZWUgdGhlIGNvbW1lbnRzIGF0IGdzdF9vYmplY3RfZGlzcGF0Y2hfcHJvcGVydGllc19jaGFuZ2VkICovCi0gIGdvYmplY3RfY2xhc3MtPmRpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZAotICAgICAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29iamVjdF9kaXNwYXRjaF9wcm9wZXJ0aWVzX2NoYW5nZWQpOwotCi0gIGdvYmplY3RfY2xhc3MtPmNvbnN0cnVjdGVkID0gZ3N0X29iamVjdF9jb25zdHJ1Y3RlZDsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9vYmplY3RfZGlzcG9zZTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfb2JqZWN0X2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29iamVjdF9pbml0IChHc3RPYmplY3QgKiBvYmplY3QpCi17Ci0gIGdfbXV0ZXhfaW5pdCAoJm9iamVjdC0+bG9jayk7Ci0gIG9iamVjdC0+cGFyZW50ID0gTlVMTDsKLSAgb2JqZWN0LT5uYW1lID0gTlVMTDsKLSAgR1NUX0NBVF9UUkFDRV9PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIG9iamVjdCwgIiVwIG5ldyIsIG9iamVjdCk7Ci0KLSAgb2JqZWN0LT5mbGFncyA9IDA7Ci0KLSAgb2JqZWN0LT5jb250cm9sX3JhdGUgPSAxMDAgKiBHU1RfTVNFQ09ORDsKLSAgb2JqZWN0LT5sYXN0X3N5bmMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotfQotCi0vKioKLSAqIGdzdF9vYmplY3RfcmVmOgotICogQG9iamVjdDogKHR5cGUgR3N0Lk9iamVjdCk6IGEgI0dzdE9iamVjdCB0byByZWZlcmVuY2UKLSAqCi0gKiBJbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb24gQG9iamVjdC4gVGhpcyBmdW5jdGlvbgotICogZG9lcyBub3QgdGFrZSB0aGUgbG9jayBvbiBAb2JqZWN0IGJlY2F1c2UgaXQgcmVsaWVzIG9uCi0gKiBhdG9taWMgcmVmY291bnRpbmcuCi0gKgotICogVGhpcyBvYmplY3QgcmV0dXJucyB0aGUgaW5wdXQgcGFyYW1ldGVyIHRvIGVhc2Ugd3JpdGluZwotICogY29uc3RydWN0cyBsaWtlIDoKLSAqICByZXN1bHQgPSBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0LT5wYXJlbnQpOwotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAodHlwZSBHc3QuT2JqZWN0KTogQSBwb2ludGVyIHRvIEBvYmplY3QKLSAqLwotZ3BvaW50ZXIKLWdzdF9vYmplY3RfcmVmIChncG9pbnRlciBvYmplY3QpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCwgTlVMTCk7Ci0KLSNpZmRlZiBERUJVR19SRUZDT1VOVAotICBHU1RfQ0FUX1RSQUNFX09CSkVDVCAoR1NUX0NBVF9SRUZDT1VOVElORywgb2JqZWN0LCAiJXAgcmVmICVkLT4lZCIsIG9iamVjdCwKLSAgICAgICgoR09iamVjdCAqKSBvYmplY3QpLT5yZWZfY291bnQsICgoR09iamVjdCAqKSBvYmplY3QpLT5yZWZfY291bnQgKyAxKTsKLSNlbmRpZgotICBnX29iamVjdF9yZWYgKG9iamVjdCk7Ci0KLSAgcmV0dXJuIG9iamVjdDsKLX0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X3VucmVmOgotICogQG9iamVjdDogKHR5cGUgR3N0Lk9iamVjdCk6IGEgI0dzdE9iamVjdCB0byB1bnJlZmVyZW5jZQotICoKLSAqIERlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiBAb2JqZWN0LiAgSWYgcmVmZXJlbmNlIGNvdW50IGhpdHMKLSAqIHplcm8sIGRlc3Ryb3kgQG9iamVjdC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZSBsb2NrCi0gKiBvbiBAb2JqZWN0IGFzIGl0IHJlbGllcyBvbiBhdG9taWMgcmVmY291bnRpbmcuCi0gKgotICogVGhlIHVucmVmIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGggdGhlIExPQ0sgaGVsZCBzaW5jZQotICogdGhpcyBtaWdodCBkZWFkbG9jayB0aGUgZGlzcG9zZSBmdW5jdGlvbi4KLSAqLwotdm9pZAotZ3N0X29iamVjdF91bnJlZiAoZ3BvaW50ZXIgb2JqZWN0KQotewotICBnX3JldHVybl9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKCgoR09iamVjdCAqKSBvYmplY3QpLT5yZWZfY291bnQgPiAwKTsKLQotI2lmZGVmIERFQlVHX1JFRkNPVU5UCi0gIEdTVF9DQVRfVFJBQ0VfT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBvYmplY3QsICIlcCB1bnJlZiAlZC0+JWQiLCBvYmplY3QsCi0gICAgICAoKEdPYmplY3QgKikgb2JqZWN0KS0+cmVmX2NvdW50LCAoKEdPYmplY3QgKikgb2JqZWN0KS0+cmVmX2NvdW50IC0gMSk7Ci0jZW5kaWYKLSAgZ19vYmplY3RfdW5yZWYgKG9iamVjdCk7Ci19Ci0KLS8qKgotICogZ3N0X29iamVjdF9yZWZfc2luazogKHNraXApCi0gKiBAb2JqZWN0OiBhICNHc3RPYmplY3QgdG8gc2luawotICoKLSAqIEluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgQG9iamVjdCwgYW5kIHBvc3NpYmx5IHJlbW92ZSB0aGUgZmxvYXRpbmcKLSAqIHJlZmVyZW5jZSwgaWYgQG9iamVjdCBoYXMgYSBmbG9hdGluZyByZWZlcmVuY2UuCi0gKgotICogSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBvYmplY3QgaXMgZmxvYXRpbmcsIHRoZW4gdGhpcyBjYWxsICJhc3N1bWVzIG93bmVyc2hpcCIKLSAqIG9mIHRoZSBmbG9hdGluZyByZWZlcmVuY2UsIGNvbnZlcnRpbmcgaXQgdG8gYSBub3JtYWwgcmVmZXJlbmNlIGJ5IGNsZWFyaW5nCi0gKiB0aGUgZmxvYXRpbmcgZmxhZyB3aGlsZSBsZWF2aW5nIHRoZSByZWZlcmVuY2UgY291bnQgdW5jaGFuZ2VkLiBJZiB0aGUgb2JqZWN0Ci0gKiBpcyBub3QgZmxvYXRpbmcsIHRoZW4gdGhpcyBjYWxsIGFkZHMgYSBuZXcgbm9ybWFsIHJlZmVyZW5jZSBpbmNyZWFzaW5nIHRoZQotICogcmVmZXJlbmNlIGNvdW50IGJ5IG9uZS4KLSAqLwotZ3BvaW50ZXIKLWdzdF9vYmplY3RfcmVmX3NpbmsgKGdwb2ludGVyIG9iamVjdCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMLCBOVUxMKTsKLQotI2lmZGVmIERFQlVHX1JFRkNPVU5UCi0gIEdTVF9DQVRfVFJBQ0VfT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBvYmplY3QsICIlcCByZWZfc2luayAlZC0+JWQiLAotICAgICAgb2JqZWN0LCAoKEdPYmplY3QgKikgb2JqZWN0KS0+cmVmX2NvdW50LAotICAgICAgKChHT2JqZWN0ICopIG9iamVjdCktPnJlZl9jb3VudCArIDEpOwotI2VuZGlmCi0gIHJldHVybiBnX29iamVjdF9yZWZfc2luayAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X3JlcGxhY2U6Ci0gKiBAb2xkb2JqOiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBwb2ludGVyIHRvIGEgcGxhY2Ugb2YKLSAqICAgICBhICNHc3RPYmplY3QgdG8gcmVwbGFjZQotICogQG5ld29iajogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogYSBuZXcgI0dzdE9iamVjdAotICoKLSAqIEF0b21pY2FsbHkgbW9kaWZpZXMgYSBwb2ludGVyIHRvIHBvaW50IHRvIGEgbmV3IG9iamVjdC4KLSAqIFRoZSByZWZlcmVuY2UgY291bnQgb2YgQG9sZG9iaiBpcyBkZWNyZWFzZWQgYW5kIHRoZSByZWZlcmVuY2UgY291bnQgb2YKLSAqIEBuZXdvYmogaXMgaW5jcmVhc2VkLgotICoKLSAqIEVpdGhlciBAbmV3b2JqIGFuZCB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBAb2xkb2JqIG1heSBiZSAlTlVMTC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmV3b2JqIHdhcyBkaWZmZXJlbnQgZnJvbSBAb2xkb2JqCi0gKi8KLWdib29sZWFuCi1nc3Rfb2JqZWN0X3JlcGxhY2UgKEdzdE9iamVjdCAqKiBvbGRvYmosIEdzdE9iamVjdCAqIG5ld29iaikKLXsKLSAgR3N0T2JqZWN0ICpvbGRwdHI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9sZG9iaiAhPSBOVUxMLCBGQUxTRSk7Ci0KLSNpZmRlZiBERUJVR19SRUZDT1VOVAotICBHU1RfQ0FUX1RSQUNFIChHU1RfQ0FUX1JFRkNPVU5USU5HLCAicmVwbGFjZSAlcCAlcyAoJWQpIHdpdGggJXAgJXMgKCVkKSIsCi0gICAgICAqb2xkb2JqLCAqb2xkb2JqID8gR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKCpvbGRvYmopKSA6ICIoTk9ORSkiLAotICAgICAgKm9sZG9iaiA/IEdfT0JKRUNUICgqb2xkb2JqKS0+cmVmX2NvdW50IDogMCwKLSAgICAgIG5ld29iaiwgbmV3b2JqID8gR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKG5ld29iaikpIDogIihOT05FKSIsCi0gICAgICBuZXdvYmogPyBHX09CSkVDVCAobmV3b2JqKS0+cmVmX2NvdW50IDogMCk7Ci0jZW5kaWYKLQotICBvbGRwdHIgPSBnX2F0b21pY19wb2ludGVyX2dldCAoKGdwb2ludGVyICopIG9sZG9iaik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG9sZHB0ciA9PSBuZXdvYmopKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAobmV3b2JqKQotICAgIGdzdF9vYmplY3RfcmVmIChuZXdvYmopOwotCi0gIHdoaWxlIChHX1VOTElLRUxZICghZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoKGdwb2ludGVyICopCi0gICAgICAgICAgICAgIG9sZG9iaiwgb2xkcHRyLCBuZXdvYmopKSkgewotICAgIG9sZHB0ciA9IGdfYXRvbWljX3BvaW50ZXJfZ2V0ICgoZ3BvaW50ZXIgKikgb2xkb2JqKTsKLSAgICBpZiAoR19VTkxJS0VMWSAob2xkcHRyID09IG5ld29iaikpCi0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChvbGRwdHIpCi0gICAgZ3N0X29iamVjdF91bnJlZiAob2xkcHRyKTsKLQotICByZXR1cm4gb2xkcHRyICE9IG5ld29iajsKLX0KLQotLyogZGlzcG9zZSBpcyBjYWxsZWQgd2hlbiB0aGUgb2JqZWN0IGhhcyB0byByZWxlYXNlIGFsbCBsaW5rcwotICogdG8gb3RoZXIgb2JqZWN0cyAqLwotc3RhdGljIHZvaWQKLWdzdF9vYmplY3RfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0T2JqZWN0ICpzZWxmID0gKEdzdE9iamVjdCAqKSBvYmplY3Q7Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotCi0gIEdTVF9DQVRfVFJBQ0VfT0JKRUNUIChHU1RfQ0FUX1JFRkNPVU5USU5HLCBvYmplY3QsICIlcCBkaXNwb3NlIiwgb2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gIGlmICgocGFyZW50ID0gR1NUX09CSkVDVF9QQVJFTlQgKG9iamVjdCkpKQotICAgIGdvdG8gaGF2ZV9wYXJlbnQ7Ci0gIEdTVF9PQkpFQ1RfUEFSRU5UIChvYmplY3QpID0gTlVMTDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0KLSAgaWYgKHNlbGYtPmNvbnRyb2xfYmluZGluZ3MpIHsKLSAgICBHTGlzdCAqbm9kZTsKLQotICAgIGZvciAobm9kZSA9IHNlbGYtPmNvbnRyb2xfYmluZGluZ3M7IG5vZGU7IG5vZGUgPSBnX2xpc3RfbmV4dCAobm9kZSkpIHsKLSAgICAgIGdzdF9vYmplY3RfdW5wYXJlbnQgKG5vZGUtPmRhdGEpOwotICAgIH0KLSAgICBnX2xpc3RfZnJlZSAoc2VsZi0+Y29udHJvbF9iaW5kaW5ncyk7Ci0gICAgc2VsZi0+Y29udHJvbF9iaW5kaW5ncyA9IE5VTEw7Ci0gIH0KLQotICAoKEdPYmplY3RDbGFzcyAqKSBnc3Rfb2JqZWN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotaGF2ZV9wYXJlbnQ6Ci0gIHsKLSAgICBnX2NyaXRpY2FsICgiXG5UcnlpbmcgdG8gZGlzcG9zZSBvYmplY3QgXCIlc1wiLCBidXQgaXQgc3RpbGwgaGFzIGEgIgotICAgICAgICAicGFyZW50IFwiJXNcIi5cbllvdSBuZWVkIHRvIGxldCB0aGUgcGFyZW50IG1hbmFnZSB0aGUgIgotICAgICAgICAib2JqZWN0IGluc3RlYWQgb2YgdW5yZWZmaW5nIHRoZSBvYmplY3QgZGlyZWN0bHkuXG4iLAotICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG9iamVjdCksIEdTVF9PQkpFQ1RfTkFNRSAocGFyZW50KSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0gICAgLyogcmVmIHRoZSBvYmplY3QgYWdhaW4gdG8gcmV2aXZlIGl0IGluIHRoaXMgZXJyb3IgY2FzZSAqLwotICAgIGdzdF9vYmplY3RfcmVmIChvYmplY3QpOwotICAgIHJldHVybjsKLSAgfQotfQotCi0vKiBmaW5hbGl6ZSBpcyBjYWxsZWQgd2hlbiB0aGUgb2JqZWN0IGhhcyB0byBmcmVlIGl0cyByZXNvdXJjZXMgKi8KLXN0YXRpYyB2b2lkCi1nc3Rfb2JqZWN0X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RPYmplY3QgKmdzdG9iamVjdCA9IEdTVF9PQkpFQ1RfQ0FTVCAob2JqZWN0KTsKLQotICBHU1RfQ0FUX1RSQUNFX09CSkVDVCAoR1NUX0NBVF9SRUZDT1VOVElORywgb2JqZWN0LCAiJXAgZmluYWxpemUiLCBvYmplY3QpOwotCi0gIGdfc2lnbmFsX2hhbmRsZXJzX2Rlc3Ryb3kgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChnc3RvYmplY3QtPm5hbWUpOwotICBnX211dGV4X2NsZWFyICgmZ3N0b2JqZWN0LT5sb2NrKTsKLQotICBHU1RfVFJBQ0VSX09CSkVDVF9ERVNUUk9ZRUQgKGdzdG9iamVjdCk7Ci0KLSAgKChHT2JqZWN0Q2xhc3MgKikgZ3N0X29iamVjdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotLyogQ2hhbmdpbmcgYSBHT2JqZWN0IHByb3BlcnR5IG9mIGEgR3N0T2JqZWN0IHdpbGwgcmVzdWx0IGluICJkZWVwLW5vdGlmeSIKLSAqIHNpZ25hbHMgYmVpbmcgZW1pdHRlZCBieSB0aGUgb2JqZWN0IGl0c2VsZiwgYXMgd2VsbCBhcyBpbiBlYWNoIHBhcmVudAotICogb2JqZWN0LiBUaGlzIGlzIHNvIHRoYXQgYW4gYXBwbGljYXRpb24gY2FuIGNvbm5lY3QgYSBsaXN0ZW5lciB0byB0aGUKLSAqIHRvcC1sZXZlbCBiaW4gdG8gY2F0Y2ggcHJvcGVydHktY2hhbmdlIG5vdGlmaWNhdGlvbnMgZm9yIGFsbCBjb250YWluZWQKLSAqIGVsZW1lbnRzLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3Rfb2JqZWN0X2Rpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZCAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBuX3BzcGVjcywgR1BhcmFtU3BlYyAqKiBwc3BlY3MpCi17Ci0gIEdzdE9iamVjdCAqZ3N0X29iamVjdCwgKnBhcmVudCwgKm9sZF9wYXJlbnQ7Ci0gIGd1aW50IGk7Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBnY2hhciAqbmFtZSA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpkZWJ1Z19uYW1lOwotI2VuZGlmCi0KLSAgLyogZG8gdGhlIHN0YW5kYXJkIGRpc3BhdGNoaW5nICovCi0gICgoR09iamVjdENsYXNzICopCi0gICAgICBnc3Rfb2JqZWN0X3BhcmVudF9jbGFzcyktPmRpc3BhdGNoX3Byb3BlcnRpZXNfY2hhbmdlZCAob2JqZWN0LCBuX3BzcGVjcywKLSAgICAgIHBzcGVjcyk7Ci0KLSAgZ3N0X29iamVjdCA9IEdTVF9PQkpFQ1RfQ0FTVCAob2JqZWN0KTsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIGlmIChHX1VOTElLRUxZIChfZ3N0X2RlYnVnX21pbiA+PSBHU1RfTEVWRUxfTE9HKSkgewotICAgIG5hbWUgPSBnc3Rfb2JqZWN0X2dldF9uYW1lIChnc3Rfb2JqZWN0KTsKLSAgICBkZWJ1Z19uYW1lID0gR1NUX1NUUl9OVUxMIChuYW1lKTsKLSAgfSBlbHNlCi0gICAgZGVidWdfbmFtZSA9ICIiOwotI2VuZGlmCi0KLSAgLyogbm93IGxldCB0aGUgcGFyZW50IGRpc3BhdGNoIHRob3NlLCB0b28gKi8KLSAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChnc3Rfb2JqZWN0KTsKLSAgd2hpbGUgKHBhcmVudCkgewotICAgIGZvciAoaSA9IDA7IGkgPCBuX3BzcGVjczsgaSsrKSB7Ci0gICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfUFJPUEVSVElFUywgcGFyZW50LAotICAgICAgICAgICJkZWVwIG5vdGlmaWNhdGlvbiBmcm9tICVzICglcykiLCBkZWJ1Z19uYW1lLCBwc3BlY3NbaV0tPm5hbWUpOwotCi0gICAgICBnX3NpZ25hbF9lbWl0IChwYXJlbnQsIGdzdF9vYmplY3Rfc2lnbmFsc1tERUVQX05PVElGWV0sCi0gICAgICAgICAgZ19xdWFya19mcm9tX3N0cmluZyAocHNwZWNzW2ldLT5uYW1lKSwgZ3N0X29iamVjdCwgcHNwZWNzW2ldKTsKLSAgICB9Ci0KLSAgICBvbGRfcGFyZW50ID0gcGFyZW50OwotICAgIHBhcmVudCA9IGdzdF9vYmplY3RfZ2V0X3BhcmVudCAob2xkX3BhcmVudCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAob2xkX3BhcmVudCk7Ci0gIH0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIGdfZnJlZSAobmFtZSk7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X2RlZmF1bHRfZGVlcF9ub3RpZnk6Ci0gKiBAb2JqZWN0OiB0aGUgI0dPYmplY3QgdGhhdCBzaWduYWxsZWQgdGhlIG5vdGlmeS4KLSAqIEBvcmlnOiBhICNHc3RPYmplY3QgdGhhdCBpbml0aWF0ZWQgdGhlIG5vdGlmeS4KLSAqIEBwc3BlYzogYSAjR1BhcmFtU3BlYyBvZiB0aGUgcHJvcGVydHkuCi0gKiBAZXhjbHVkZWRfcHJvcHM6IChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSBnY2hhciopIChhbGxvdy1ub25lKToKLSAqICAgICBhIHNldCBvZiB1c2VyLXNwZWNpZmllZCBwcm9wZXJ0aWVzIHRvIGV4Y2x1ZGUgb3IgJU5VTEwgdG8gc2hvdwotICogICAgIGFsbCBjaGFuZ2VzLgotICoKLSAqIEEgZGVmYXVsdCBkZWVwX25vdGlmeSBzaWduYWwgY2FsbGJhY2sgZm9yIGFuIG9iamVjdC4gVGhlIHVzZXIgZGF0YQotICogc2hvdWxkIGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQKLSAqIGZyb20gdGhlIG5vdGlmeS4gVGhlIGRlZmF1bHQgaGFuZGxlciB3aWxsIHByaW50IHRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5Ci0gKiB1c2luZyBnX3ByaW50LgotICoKLSAqIE1UIHNhZmUuIFRoaXMgZnVuY3Rpb24gZ3JhYnMgYW5kIHJlbGVhc2VzIEBvYmplY3QncyBMT0NLIGZvciBnZXR0aW5nIGl0cwotICogICAgICAgICAgcGF0aCBzdHJpbmcuCi0gKi8KLXZvaWQKLWdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeSAoR09iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogb3JpZywKLSAgICBHUGFyYW1TcGVjICogcHNwZWMsIGdjaGFyICoqIGV4Y2x1ZGVkX3Byb3BzKQotewotICBHVmFsdWUgdmFsdWUgPSB7IDAsIH07ICAgICAgICAvKiB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdmFsdWUudHlwZSA9IDAgKi8KLSAgZ2NoYXIgKnN0ciA9IE5VTEw7Ci0gIGdjaGFyICpuYW1lID0gTlVMTDsKLQotICBpZiAocHNwZWMtPmZsYWdzICYgR19QQVJBTV9SRUFEQUJMRSkgewotICAgIC8qIGxldCdzIG5vdCBwcmludCB0aGVzZSBvdXQgZm9yIGV4Y2x1ZGVkIHByb3BlcnRpZXMuLi4gKi8KLSAgICB3aGlsZSAoZXhjbHVkZWRfcHJvcHMgIT0gTlVMTCAmJiAqZXhjbHVkZWRfcHJvcHMgIT0gTlVMTCkgewotICAgICAgaWYgKHN0cmNtcCAocHNwZWMtPm5hbWUsICpleGNsdWRlZF9wcm9wcykgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgZXhjbHVkZWRfcHJvcHMrKzsKLSAgICB9Ci0gICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIHBzcGVjLT52YWx1ZV90eXBlKTsKLSAgICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUIChvcmlnKSwgcHNwZWMtPm5hbWUsICZ2YWx1ZSk7Ci0KLSAgICBpZiAoR19WQUxVRV9IT0xEU19TVFJJTkcgKCZ2YWx1ZSkpCi0gICAgICBzdHIgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKCZ2YWx1ZSk7Ci0gICAgZWxzZQotICAgICAgc3RyID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnZhbHVlKTsKLSAgICBuYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKG9yaWcpOwotICAgIGdfcHJpbnQgKCIlczogJXMgPSAlc1xuIiwgbmFtZSwgcHNwZWMtPm5hbWUsIHN0cik7Ci0gICAgZ19mcmVlIChuYW1lKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLSAgfSBlbHNlIHsKLSAgICBuYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKG9yaWcpOwotICAgIGdfd2FybmluZyAoIlBhcmFtZXRlciAlcyBub3QgcmVhZGFibGUgaW4gJXMuIiwgcHNwZWMtPm5hbWUsIG5hbWUpOwotICAgIGdfZnJlZSAobmFtZSk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb2JqZWN0X3NldF9uYW1lX2RlZmF1bHQgKEdzdE9iamVjdCAqIG9iamVjdCkKLXsKLSAgY29uc3QgZ2NoYXIgKnR5cGVfbmFtZTsKLSAgZ2ludCBjb3VudDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIEdRdWFyayBxOwotICBndWludCBpLCBsOwotCi0gIC8qIHRvIGVuc3VyZSBndWFyYW50ZWVkIHVuaXF1ZW5lc3MgYWNyb3NzIHRocmVhZHMsIG9ubHkgb25lIHRocmVhZAotICAgKiBtYXkgZXZlciBhc3NpZ24gYSBuYW1lICovCi0gIEdfTE9DSyAob2JqZWN0X25hbWVfbXV0ZXgpOwotCi0gIGlmICghb2JqZWN0X25hbWVfY291bnRzKSB7Ci0gICAgZ19kYXRhbGlzdF9pbml0ICgmb2JqZWN0X25hbWVfY291bnRzKTsKLSAgfQotCi0gIHEgPSBnX3R5cGVfcW5hbWUgKEdfT0JKRUNUX1RZUEUgKG9iamVjdCkpOwotICBjb3VudCA9IEdQT0lOVEVSX1RPX0lOVCAoZ19kYXRhbGlzdF9pZF9nZXRfZGF0YSAoJm9iamVjdF9uYW1lX2NvdW50cywgcSkpOwotICBnX2RhdGFsaXN0X2lkX3NldF9kYXRhICgmb2JqZWN0X25hbWVfY291bnRzLCBxLCBHSU5UX1RPX1BPSU5URVIgKGNvdW50ICsgMSkpOwotCi0gIEdfVU5MT0NLIChvYmplY3RfbmFtZV9tdXRleCk7Ci0KLSAgLyogR3N0Rm9vU2luayAtPiBmb29zaW5rPE4+ICovCi0gIHR5cGVfbmFtZSA9IGdfcXVhcmtfdG9fc3RyaW5nIChxKTsKLSAgaWYgKHN0cm5jbXAgKHR5cGVfbmFtZSwgIkdzdCIsIDMpID09IDApCi0gICAgdHlwZV9uYW1lICs9IDM7Ci0gIC8qIGdpdmUgdGhlIDIwdGggInF1ZXVlIiBlbGVtZW50IGFuZCB0aGUgZmlyc3QgInF1ZXVlMiIgZGlmZmVyZW50IG5hbWVzICovCi0gIGwgPSBzdHJsZW4gKHR5cGVfbmFtZSk7Ci0gIGlmIChsID4gMCAmJiBnX2FzY2lpX2lzZGlnaXQgKHR5cGVfbmFtZVtsIC0gMV0pKSB7Ci0gICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzLSVkIiwgdHlwZV9uYW1lLCBjb3VudCk7Ci0gIH0gZWxzZSB7Ci0gICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzJWQiLCB0eXBlX25hbWUsIGNvdW50KTsKLSAgfQotCi0gIGwgPSBzdHJsZW4gKG5hbWUpOwotICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKQotICAgIG5hbWVbaV0gPSBnX2FzY2lpX3RvbG93ZXIgKG5hbWVbaV0pOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKLSAgaWYgKEdfVU5MSUtFTFkgKG9iamVjdC0+cGFyZW50ICE9IE5VTEwpKQotICAgIGdvdG8gaGFkX3BhcmVudDsKLQotICBnX2ZyZWUgKG9iamVjdC0+bmFtZSk7Ci0gIG9iamVjdC0+bmFtZSA9IG5hbWU7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWhhZF9wYXJlbnQ6Ci0gIHsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIEdTVF9XQVJOSU5HICgicGFyZW50ZWQgb2JqZWN0cyBjYW4ndCBiZSByZW5hbWVkIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X29iamVjdF9zZXRfbmFtZToKLSAqIEBvYmplY3Q6IGEgI0dzdE9iamVjdAotICogQG5hbWU6IChhbGxvdy1ub25lKTogbmV3IG5hbWUgb2Ygb2JqZWN0Ci0gKgotICogU2V0cyB0aGUgbmFtZSBvZiBAb2JqZWN0LCBvciBnaXZlcyBAb2JqZWN0IGEgZ3VhcmFudGVlZCB1bmlxdWUKLSAqIG5hbWUgKGlmIEBuYW1lIGlzICVOVUxMKS4KLSAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIHRoZSBwcm92aWRlZCBuYW1lLCBzbyB0aGUgY2FsbGVyCi0gKiByZXRhaW5zIG93bmVyc2hpcCBvZiB0aGUgbmFtZSBpdCBzZW50LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBuYW1lIGNvdWxkIGJlIHNldC4gU2luY2UgT2JqZWN0cyB0aGF0IGhhdmUKLSAqIGEgcGFyZW50IGNhbm5vdCBiZSByZW5hbWVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgJUZBTFNFIGluIHRob3NlCi0gKiBjYXNlcy4KLSAqCi0gKiBNVCBzYWZlLiAgVGhpcyBmdW5jdGlvbiBncmFicyBhbmQgcmVsZWFzZXMgQG9iamVjdCdzIExPQ0suCi0gKi8KLWdib29sZWFuCi1nc3Rfb2JqZWN0X3NldF9uYW1lIChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmplY3QpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOwotCi0gIC8qIHBhcmVudGVkIG9iamVjdHMgY2Fubm90IGJlIHJlbmFtZWQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKG9iamVjdC0+cGFyZW50ICE9IE5VTEwpKQotICAgIGdvdG8gaGFkX3BhcmVudDsKLQotICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgZ19mcmVlIChvYmplY3QtPm5hbWUpOwotICAgIG9iamVjdC0+bmFtZSA9IGdfc3RyZHVwIChuYW1lKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLSAgICByZXN1bHQgPSBUUlVFOwotICB9IGVsc2UgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICAgIHJlc3VsdCA9IGdzdF9vYmplY3Rfc2V0X25hbWVfZGVmYXVsdCAob2JqZWN0KTsKLSAgfQotCi0gIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKG9iamVjdCksICJuYW1lIik7Ci0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogZXJyb3IgKi8KLWhhZF9wYXJlbnQ6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoInBhcmVudGVkIG9iamVjdHMgY2FuJ3QgYmUgcmVuYW1lZCIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9vYmplY3RfZ2V0X25hbWU6Ci0gKiBAb2JqZWN0OiBhICNHc3RPYmplY3QKLSAqCi0gKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbmFtZSBvZiBAb2JqZWN0LgotICogQ2FsbGVyIHNob3VsZCBnX2ZyZWUoKSB0aGUgcmV0dXJuIHZhbHVlIGFmdGVyIHVzYWdlLgotICogRm9yIGEgbmFtZWxlc3Mgb2JqZWN0LCB0aGlzIHJldHVybnMgJU5VTEwsIHdoaWNoIHlvdSBjYW4gc2FmZWx5IGdfZnJlZSgpCi0gKiBhcyB3ZWxsLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgbmFtZSBvZiBAb2JqZWN0LiBnX2ZyZWUoKQotICogYWZ0ZXIgdXNhZ2UuCi0gKgotICogTVQgc2FmZS4gVGhpcyBmdW5jdGlvbiBncmFicyBhbmQgcmVsZWFzZXMgQG9iamVjdCdzIExPQ0suCi0gKi8KLWdjaGFyICoKLWdzdF9vYmplY3RfZ2V0X25hbWUgKEdzdE9iamVjdCAqIG9iamVjdCkKLXsKLSAgZ2NoYXIgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKLSAgcmVzdWx0ID0gZ19zdHJkdXAgKG9iamVjdC0+bmFtZSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X29iamVjdF9zZXRfcGFyZW50OgotICogQG9iamVjdDogYSAjR3N0T2JqZWN0Ci0gKiBAcGFyZW50OiBuZXcgcGFyZW50IG9mIG9iamVjdAotICoKLSAqIFNldHMgdGhlIHBhcmVudCBvZiBAb2JqZWN0IHRvIEBwYXJlbnQuIFRoZSBvYmplY3QncyByZWZlcmVuY2UgY291bnQgd2lsbAotICogYmUgaW5jcmVtZW50ZWQsIGFuZCBhbnkgZmxvYXRpbmcgcmVmZXJlbmNlIHdpbGwgYmUgcmVtb3ZlZCAoc2VlIGdzdF9vYmplY3RfcmVmX3NpbmsoKSkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQHBhcmVudCBjb3VsZCBiZSBzZXQgb3IgJUZBTFNFIHdoZW4gQG9iamVjdAotICogYWxyZWFkeSBoYWQgYSBwYXJlbnQgb3IgQG9iamVjdCBhbmQgQHBhcmVudCBhcmUgdGhlIHNhbWUuCi0gKgotICogTVQgc2FmZS4gR3JhYnMgYW5kIHJlbGVhc2VzIEBvYmplY3QncyBMT0NLLgotICovCi1nYm9vbGVhbgotZ3N0X29iamVjdF9zZXRfcGFyZW50IChHc3RPYmplY3QgKiBvYmplY3QsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKHBhcmVudCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG9iamVjdCAhPSBwYXJlbnQsIEZBTFNFKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9SRUZDT1VOVElORywgb2JqZWN0LAotICAgICAgInNldCBwYXJlbnQgKHJlZiBhbmQgc2luaykiKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gIGlmIChHX1VOTElLRUxZIChvYmplY3QtPnBhcmVudCAhPSBOVUxMKSkKLSAgICBnb3RvIGhhZF9wYXJlbnQ7Ci0KLSAgb2JqZWN0LT5wYXJlbnQgPSBwYXJlbnQ7Ci0gIGdzdF9vYmplY3RfcmVmX3NpbmsgKG9iamVjdCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotCi0gIC8qIEZJWE1FLTIuMDogdGhpcyBkb2VzIG5vdCB3b3JrLCB0aGUgZGVlcCBub3RpZnkgdGFrZXMgdGhlIGxvY2sgZnJvbSB0aGUKLSAgICogcGFyZW50IG9iamVjdCBhbmQgZGVhZGxvY2tzIHdoZW4gdGhlIHBhcmVudCBob2xkcyBpdHMgbG9jayB3aGVuIGNhbGxpbmcKLSAgICogdGhpcyBmdW5jdGlvbiAobGlrZSBfZWxlbWVudF9hZGRfcGFkKCkpLCB3ZSBuZWVkIHRvIHVzZSBhIEdSZWNNdXRleAotICAgKiBmb3IgbG9ja2luZyB0aGUgcGFyZW50IGluc3RlYWQuCi0gICAqLwotICAvKiBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopb2JqZWN0LCBwcm9wZXJ0aWVzW1BST1BfUEFSRU5UXSk7ICovCi0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1IgaGFuZGxpbmcgKi8KLWhhZF9wYXJlbnQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9SRUZDT1VOVElORywgb2JqZWN0LAotICAgICAgICAic2V0IHBhcmVudCBmYWlsZWQsIG9iamVjdCBhbHJlYWR5IGhhZCBhIHBhcmVudCIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9vYmplY3RfZ2V0X3BhcmVudDoKLSAqIEBvYmplY3Q6IGEgI0dzdE9iamVjdAotICoKLSAqIFJldHVybnMgdGhlIHBhcmVudCBvZiBAb2JqZWN0LiBUaGlzIGZ1bmN0aW9uIGluY3JlYXNlcyB0aGUgcmVmY291bnQKLSAqIG9mIHRoZSBwYXJlbnQgb2JqZWN0IHNvIHlvdSBzaG91bGQgZ3N0X29iamVjdF91bnJlZigpIGl0IGFmdGVyIHVzYWdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBwYXJlbnQgb2YgQG9iamVjdCwgdGhpcyBjYW4gYmUKLSAqICAgJU5VTEwgaWYgQG9iamVjdCBoYXMgbm8gcGFyZW50LiB1bnJlZiBhZnRlciB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgQG9iamVjdCdzIExPQ0suCi0gKi8KLUdzdE9iamVjdCAqCi1nc3Rfb2JqZWN0X2dldF9wYXJlbnQgKEdzdE9iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmplY3QpLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gIHJlc3VsdCA9IG9iamVjdC0+cGFyZW50OwotICBpZiAoR19MSUtFTFkgKHJlc3VsdCkpCi0gICAgZ3N0X29iamVjdF9yZWYgKHJlc3VsdCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X29iamVjdF91bnBhcmVudDoKLSAqIEBvYmplY3Q6IGEgI0dzdE9iamVjdCB0byB1bnBhcmVudAotICoKLSAqIENsZWFyIHRoZSBwYXJlbnQgb2YgQG9iamVjdCwgcmVtb3ZpbmcgdGhlIGFzc29jaWF0ZWQgcmVmZXJlbmNlLgotICogVGhpcyBmdW5jdGlvbiBkZWNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIEBvYmplY3QuCi0gKgotICogTVQgc2FmZS4gR3JhYnMgYW5kIHJlbGVhc2VzIEBvYmplY3QncyBsb2NrLgotICovCi12b2lkCi1nc3Rfb2JqZWN0X3VucGFyZW50IChHc3RPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKLSAgcGFyZW50ID0gb2JqZWN0LT5wYXJlbnQ7Ci0KLSAgaWYgKEdfTElLRUxZIChwYXJlbnQgIT0gTlVMTCkpIHsKLSAgICBHU1RfQ0FUX1RSQUNFX09CSkVDVCAoR1NUX0NBVF9SRUZDT1VOVElORywgb2JqZWN0LCAidW5wYXJlbnQiKTsKLSAgICBvYmplY3QtPnBhcmVudCA9IE5VTEw7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0KLSAgICAvKiBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopb2JqZWN0LCBwcm9wZXJ0aWVzW1BST1BfUEFSRU5UXSk7ICovCi0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3QpOwotICB9IGVsc2UgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X29iamVjdF9oYXNfYXNfcGFyZW50OgotICogQG9iamVjdDogYSAjR3N0T2JqZWN0IHRvIGNoZWNrCi0gKiBAcGFyZW50OiBhICNHc3RPYmplY3QgdG8gY2hlY2sgYXMgcGFyZW50Ci0gKgotICogQ2hlY2sgaWYgQHBhcmVudCBpcyB0aGUgcGFyZW50IG9mIEBvYmplY3QuCi0gKiBFLmcuIGEgI0dzdEVsZW1lbnQgY2FuIGNoZWNrIGlmIGl0IG93bnMgYSBnaXZlbiAjR3N0UGFkLgotICoKLSAqIFJldHVybnM6ICVGQUxTRSBpZiBlaXRoZXIgQG9iamVjdCBvciBAcGFyZW50IGlzICVOVUxMLiAlVFJVRSBpZiBAcGFyZW50IGlzCi0gKiAgICAgICAgICB0aGUgcGFyZW50IG9mIEBvYmplY3QuIE90aGVyd2lzZSAlRkFMU0UuCi0gKgotICogTVQgc2FmZS4gR3JhYnMgYW5kIHJlbGVhc2VzIEBvYmplY3QncyBsb2Nrcy4KLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RPYmplY3QgKiBwYXJlbnQpCi17Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotCi0gIGlmIChHX0xJS0VMWSAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSAmJiBHU1RfSVNfT0JKRUNUIChwYXJlbnQpKSkgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKLSAgICByZXN1bHQgPSBHU1RfT0JKRUNUX1BBUkVOVCAob2JqZWN0KSA9PSBwYXJlbnQ7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9yOgotICogQG9iamVjdDogYSAjR3N0T2JqZWN0IHRvIGNoZWNrCi0gKiBAYW5jZXN0b3I6IGEgI0dzdE9iamVjdCB0byBjaGVjayBhcyBhbmNlc3RvcgotICoKLSAqIENoZWNrIGlmIEBvYmplY3QgaGFzIGFuIGFuY2VzdG9yIEBhbmNlc3RvciBzb21ld2hlcmUgdXAgaW4KLSAqIHRoZSBoaWVyYXJjaHkuIE9uZSBjYW4gZS5nLiBjaGVjayBpZiBhICNHc3RFbGVtZW50IGlzIGluc2lkZSBhICNHc3RQaXBlbGluZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAYW5jZXN0b3IgaXMgYW4gYW5jZXN0b3Igb2YgQG9iamVjdC4KLSAqCi0gKiBNVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgQG9iamVjdCdzIGxvY2tzLgotICovCi1nYm9vbGVhbgotZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IgKEdzdE9iamVjdCAqIG9iamVjdCwgR3N0T2JqZWN0ICogYW5jZXN0b3IpCi17Ci0gIEdzdE9iamVjdCAqcGFyZW50LCAqdG1wOwotCi0gIGlmICghYW5jZXN0b3IgfHwgIW9iamVjdCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcGFyZW50ID0gZ3N0X29iamVjdF9yZWYgKG9iamVjdCk7Ci0gIGRvIHsKLSAgICBpZiAocGFyZW50ID09IGFuY2VzdG9yKSB7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgdG1wID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChwYXJlbnQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7Ci0gICAgcGFyZW50ID0gdG1wOwotICB9IHdoaWxlIChwYXJlbnQpOwotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X2hhc19hbmNlc3RvcjoKLSAqIEBvYmplY3Q6IGEgI0dzdE9iamVjdCB0byBjaGVjawotICogQGFuY2VzdG9yOiBhICNHc3RPYmplY3QgdG8gY2hlY2sgYXMgYW5jZXN0b3IKLSAqCi0gKiBDaGVjayBpZiBAb2JqZWN0IGhhcyBhbiBhbmNlc3RvciBAYW5jZXN0b3Igc29tZXdoZXJlIHVwIGluCi0gKiB0aGUgaGllcmFyY2h5LiBPbmUgY2FuIGUuZy4gY2hlY2sgaWYgYSAjR3N0RWxlbWVudCBpcyBpbnNpZGUgYSAjR3N0UGlwZWxpbmUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGFuY2VzdG9yIGlzIGFuIGFuY2VzdG9yIG9mIEBvYmplY3QuCi0gKgotICogRGVwcmVjYXRlZDogVXNlIGdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9yKCkgaW5zdGVhZC4KLSAqCi0gKiBNVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgQG9iamVjdCdzIGxvY2tzLgotICovCi0vKiBGSVhNRSAyLjA6IHJlbW92ZSAqLwotI2lmbmRlZiBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQKLSNpZmRlZiBHU1RfRElTQUJMRV9ERVBSRUNBVEVECi1nYm9vbGVhbiBnc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RPYmplY3QgKiBhbmNlc3Rvcik7Ci0jZW5kaWYKLWdib29sZWFuCi1nc3Rfb2JqZWN0X2hhc19hbmNlc3RvciAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RPYmplY3QgKiBhbmNlc3RvcikKLXsKLSAgcmV0dXJuIGdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9yIChvYmplY3QsIGFuY2VzdG9yKTsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9vYmplY3RfY2hlY2tfdW5pcXVlbmVzczoKLSAqIEBsaXN0OiAodHJhbnNmZXIgbm9uZSkgKGVsZW1lbnQtdHlwZSBHc3QuT2JqZWN0KTogYSBsaXN0IG9mICNHc3RPYmplY3QgdG8KLSAqICAgICAgY2hlY2sgdGhyb3VnaAotICogQG5hbWU6IHRoZSBuYW1lIHRvIHNlYXJjaCBmb3IKLSAqCi0gKiBDaGVja3MgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBvYmplY3QgbmFtZWQgQG5hbWUgaW4gQGxpc3QuIFRoaXMgZnVuY3Rpb24KLSAqIGRvZXMgbm90IGRvIGFueSBsb2NraW5nIG9mIGFueSBraW5kLiBZb3UgbWlnaHQgd2FudCB0byBwcm90ZWN0IHRoZQotICogcHJvdmlkZWQgbGlzdCB3aXRoIHRoZSBsb2NrIG9mIHRoZSBvd25lciBvZiB0aGUgbGlzdC4gVGhpcyBmdW5jdGlvbgotICogd2lsbCBsb2NrIGVhY2ggI0dzdE9iamVjdCBpbiB0aGUgbGlzdCB0byBjb21wYXJlIHRoZSBuYW1lLCBzbyBiZQotICogY2FyZWZ1bCB3aGVuIHBhc3NpbmcgYSBsaXN0IHdpdGggYSBsb2NrZWQgb2JqZWN0LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGEgI0dzdE9iamVjdCBuYW1lZCBAbmFtZSBkb2VzIG5vdCBhcHBlYXIgaW4gQGxpc3QsCi0gKiAlRkFMU0UgaWYgaXQgZG9lcy4KLSAqCi0gKiBNVCBzYWZlLiBHcmFicyBhbmQgcmVsZWFzZXMgdGhlIExPQ0sgb2YgZWFjaCBvYmplY3QgaW4gdGhlIGxpc3QuCi0gKi8KLWdib29sZWFuCi1nc3Rfb2JqZWN0X2NoZWNrX3VuaXF1ZW5lc3MgKEdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICBmb3IgKDsgbGlzdDsgbGlzdCA9IGdfbGlzdF9uZXh0IChsaXN0KSkgewotICAgIEdzdE9iamVjdCAqY2hpbGQ7Ci0gICAgZ2Jvb2xlYW4gZXE7Ci0KLSAgICBjaGlsZCA9IEdTVF9PQkpFQ1RfQ0FTVCAobGlzdC0+ZGF0YSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGNoaWxkKTsKLSAgICBlcSA9IHN0cmNtcCAoR1NUX09CSkVDVF9OQU1FIChjaGlsZCksIG5hbWUpID09IDA7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNoaWxkKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChlcSkpIHsKLSAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9vYmplY3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9iamVjdCAqZ3N0b2JqZWN0OwotCi0gIGdzdG9iamVjdCA9IEdTVF9PQkpFQ1RfQ0FTVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTkFNRToKLSAgICAgIGdzdF9vYmplY3Rfc2V0X25hbWUgKGdzdG9iamVjdCwgZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BBUkVOVDoKLSAgICAgIGdzdF9vYmplY3Rfc2V0X3BhcmVudCAoZ3N0b2JqZWN0LCBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RPYmplY3QgKmdzdG9iamVjdDsKLQotICBnc3RvYmplY3QgPSBHU1RfT0JKRUNUX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX05BTUU6Ci0gICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nICh2YWx1ZSwgZ3N0X29iamVjdF9nZXRfbmFtZSAoZ3N0b2JqZWN0KSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUEFSRU5UOgotICAgICAgZ192YWx1ZV90YWtlX29iamVjdCAodmFsdWUsIGdzdF9vYmplY3RfZ2V0X3BhcmVudCAoZ3N0b2JqZWN0KSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmc6Ci0gKiBAb2JqZWN0OiBhICNHc3RPYmplY3QKLSAqCi0gKiBHZW5lcmF0ZXMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcGF0aCBvZiBAb2JqZWN0IGluCi0gKiB0aGUgb2JqZWN0IGhpZXJhcmNoeS4gT25seSB1c2VmdWwgKG9yIHVzZWQpIGZvciBkZWJ1Z2dpbmcuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBwYXRoIG9mIEBvYmplY3QuIFlvdSBtdXN0Ci0gKiAgICAgICAgICBnX2ZyZWUoKSB0aGUgc3RyaW5nIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuIEdyYWJzIGFuZCByZWxlYXNlcyB0aGUgI0dzdE9iamVjdCdzIExPQ0sgZm9yIGFsbCBvYmplY3RzCi0gKiAgICAgICAgICBpbiB0aGUgaGllcmFyY2h5LgotICovCi1nY2hhciAqCi1nc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoR3N0T2JqZWN0ICogb2JqZWN0KQotewotICBHU0xpc3QgKnBhcmVudGFnZTsKLSAgR1NMaXN0ICpwYXJlbnRzOwotICB2b2lkICpwYXJlbnQ7Ci0gIGdjaGFyICpwcmV2cGF0aCwgKnBhdGg7Ci0gIGNvbnN0IGdjaGFyICp0eXBlbmFtZTsKLSAgZ2NoYXIgKmNvbXBvbmVudDsKLSAgY29uc3QgZ2NoYXIgKnNlcGFyYXRvcjsKLQotICAvKiByZWYgb2JqZWN0IGJlZm9yZSBhZGRpbmcgdG8gbGlzdCAqLwotICBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0KTsKLSAgcGFyZW50YWdlID0gZ19zbGlzdF9wcmVwZW5kIChOVUxMLCBvYmplY3QpOwotCi0gIHBhdGggPSBnX3N0cmR1cCAoIiIpOwotCi0gIC8qIGZpcnN0IHdhbGsgdGhlIG9iamVjdCBoaWVyYXJjaHkgdG8gYnVpbGQgYSBsaXN0IG9mIHRoZSBwYXJlbnRzLAotICAgKiBiZSBjYXJlZnVsIGhlcmUgd2l0aCByZWZjb3VudGluZy4gKi8KLSAgZG8gewotICAgIGlmIChHU1RfSVNfT0JKRUNUIChvYmplY3QpKSB7Ci0gICAgICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKG9iamVjdCk7Ci0gICAgICAvKiBhZGQgcGFyZW50cyB0byBsaXN0LCByZWZjb3VudCByZW1haW5zIGluY3JlYXNlZCB3aGlsZQotICAgICAgICogd2UgaGFuZGxlIHRoZSBvYmplY3QgKi8KLSAgICAgIGlmIChwYXJlbnQpCi0gICAgICAgIHBhcmVudGFnZSA9IGdfc2xpc3RfcHJlcGVuZCAocGFyZW50YWdlLCBwYXJlbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgb2JqZWN0ID0gcGFyZW50OwotICB9IHdoaWxlIChvYmplY3QgIT0gTlVMTCk7Ci0KLSAgLyogdGhlbiB3YWxrIHRoZSBwYXJlbnQgbGlzdCBhbmQgcHJpbnQgdGhlbSBvdXQuIHdlIG5lZWQgdG8KLSAgICogZGVjcmVhc2UgdGhlIHJlZmNvdW50aW5nIG9uIGVhY2ggZWxlbWVudCBhZnRlciB3ZSBoYW5kbGVkCi0gICAqIGl0LiAqLwotICBmb3IgKHBhcmVudHMgPSBwYXJlbnRhZ2U7IHBhcmVudHM7IHBhcmVudHMgPSBnX3NsaXN0X25leHQgKHBhcmVudHMpKSB7Ci0gICAgaWYgKEdfSVNfT0JKRUNUIChwYXJlbnRzLT5kYXRhKSkgewotICAgICAgdHlwZW5hbWUgPSBHX09CSkVDVF9UWVBFX05BTUUgKHBhcmVudHMtPmRhdGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0eXBlbmFtZSA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChHU1RfSVNfT0JKRUNUIChwYXJlbnRzLT5kYXRhKSkgewotICAgICAgR3N0T2JqZWN0ICppdGVtID0gR1NUX09CSkVDVF9DQVNUIChwYXJlbnRzLT5kYXRhKTsKLSAgICAgIEdzdE9iamVjdENsYXNzICpvY2xhc3MgPSBHU1RfT0JKRUNUX0dFVF9DTEFTUyAoaXRlbSk7Ci0gICAgICBnY2hhciAqb2JqbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKGl0ZW0pOwotCi0gICAgICBjb21wb25lbnQgPSBnX3N0cmR1cF9wcmludGYgKCIlczolcyIsIHR5cGVuYW1lLCBvYmpuYW1lKTsKLSAgICAgIHNlcGFyYXRvciA9IG9jbGFzcy0+cGF0aF9zdHJpbmdfc2VwYXJhdG9yOwotICAgICAgLyogYW5kIHVucmVmIG5vdyAqLwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoaXRlbSk7Ci0gICAgICBnX2ZyZWUgKG9iam5hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAodHlwZW5hbWUpIHsKLSAgICAgICAgY29tcG9uZW50ID0gZ19zdHJkdXBfcHJpbnRmICgiJXM6JXAiLCB0eXBlbmFtZSwgcGFyZW50cy0+ZGF0YSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjb21wb25lbnQgPSBnX3N0cmR1cF9wcmludGYgKCIlcCIsIHBhcmVudHMtPmRhdGEpOwotICAgICAgfQotICAgICAgc2VwYXJhdG9yID0gIi8iOwotICAgIH0KLQotICAgIHByZXZwYXRoID0gcGF0aDsKLSAgICBwYXRoID0gZ19zdHJqb2luIChzZXBhcmF0b3IsIHByZXZwYXRoLCBjb21wb25lbnQsIE5VTEwpOwotICAgIGdfZnJlZSAocHJldnBhdGgpOwotICAgIGdfZnJlZSAoY29tcG9uZW50KTsKLSAgfQotCi0gIGdfc2xpc3RfZnJlZSAocGFyZW50YWdlKTsKLQotICByZXR1cm4gcGF0aDsKLX0KLQotLyogY29udHJvbGxlciBoZWxwZXIgZnVuY3Rpb25zICovCi0KLS8qCi0gKiBnc3Rfb2JqZWN0X2ZpbmRfY29udHJvbF9iaW5kaW5nOgotICogQHNlbGY6IHRoZSBnb2JqZWN0IHRvIHNlYXJjaCBmb3IgYSBwcm9wZXJ0eSBpbgotICogQG5hbWU6IHRoZSBnb2JqZWN0IHByb3BlcnR5IG5hbWUgdG8gbG9vayBmb3IKLSAqCi0gKiBTZWFyY2hlcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHVuZGVyIGNvbnRyb2wuCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogYSAjR3N0Q29udHJvbEJpbmRpbmcgb3IgJU5VTEwgaWYgdGhlIHByb3BlcnR5Ci0gKiBpcyBub3QgYmVpbmcgY29udHJvbGxlZC4KLSAqLwotc3RhdGljIEdzdENvbnRyb2xCaW5kaW5nICoKLWdzdF9vYmplY3RfZmluZF9jb250cm9sX2JpbmRpbmcgKEdzdE9iamVjdCAqIHNlbGYsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmc7Ci0gIEdMaXN0ICpub2RlOwotCi0gIGZvciAobm9kZSA9IHNlbGYtPmNvbnRyb2xfYmluZGluZ3M7IG5vZGU7IG5vZGUgPSBnX2xpc3RfbmV4dCAobm9kZSkpIHsKLSAgICBiaW5kaW5nID0gbm9kZS0+ZGF0YTsKLSAgICAvKiBGSVhNRTogZXZlbnR1YWxseSB1c2UgR1F1YXJrIHRvIHNwZWVkIGl0IHVwICovCi0gICAgaWYgKCFzdHJjbXAgKGJpbmRpbmctPm5hbWUsIG5hbWUpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiZm91bmQgY29udHJvbCBiaW5kaW5nIGZvciBwcm9wZXJ0eSAnJXMnIiwgbmFtZSk7Ci0gICAgICByZXR1cm4gYmluZGluZzsKLSAgICB9Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImNvbnRyb2xsZXIgZG9lcyBub3QgbWFuYWdlIHByb3BlcnR5ICclcyciLCBuYW1lKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotLyogY29udHJvbGxlciBmdW5jdGlvbnMgKi8KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jOgotICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXMKLSAqCi0gKiBSZXR1cm5zIGEgc3VnZ2VzdGlvbiBmb3IgdGltZXN0YW1wcyB3aGVyZSBidWZmZXJzIHNob3VsZCBiZSBzcGxpdAotICogdG8gZ2V0IGJlc3QgY29udHJvbGxlciByZXN1bHRzLgotICoKLSAqIFJldHVybnM6IFJldHVybnMgdGhlIHN1Z2dlc3RlZCB0aW1lc3RhbXAgb3IgJUdTVF9DTE9DS19USU1FX05PTkUKLSAqIGlmIG5vIGNvbnRyb2wtcmF0ZSB3YXMgc2V0LgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmMgKEdzdE9iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvYmplY3QtPmNvbnRyb2xfcmF0ZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOwotCi0gIC8qIFRPRE86IEltcGxlbWVudCBtb3JlIGxvZ2ljLCBkZXBlbmRpbmcgb24gaW50ZXJwb2xhdGlvbiBtb2RlIGFuZCBjb250cm9sCi0gICAqIHBvaW50cwotICAgKiBGSVhNRTogd2UgbmVlZCBwbGF5YmFjayBkaXJlY3Rpb24KLSAgICovCi0gIHJldCA9IG9iamVjdC0+bGFzdF9zeW5jICsgb2JqZWN0LT5jb250cm9sX3JhdGU7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzOgotICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXMKLSAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZAotICoKLSAqIFNldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCwgYWNjb3JkaW5nIHRvIHRoZSAjR3N0Q29udHJvbFNvdXJjZXMgdGhhdAotICogKG1heWJlKSBoYW5kbGUgdGhlbSBhbmQgZm9yIHRoZSBnaXZlbiB0aW1lc3RhbXAuCi0gKgotICogSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgaXQgaXMgbW9zdCBsaWtlbHkgdGhlIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgZmF1bHQuCi0gKiBNb3N0IHByb2JhYmx5IHRoZSBjb250cm9sIHNvdXJjZXMgYXJlIG5vdCBzZXR1cCBjb3JyZWN0bHkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNvbnRyb2xsZXIgdmFsdWVzIGNvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIG9iamVjdAotICogcHJvcGVydGllcywgJUZBTFNFIG90aGVyd2lzZQotICovCi1nYm9vbGVhbgotZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBHTGlzdCAqbm9kZTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCksIEZBTFNFKTsKLQotICBHU1RfTE9HX09CSkVDVCAob2JqZWN0LCAic3luY192YWx1ZXMiKTsKLSAgaWYgKCFvYmplY3QtPmNvbnRyb2xfYmluZGluZ3MpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRklYTUU6IHRoaXMgZGVhZGxvY2tzICovCi0gIC8qIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsgKi8KLSAgZ19vYmplY3RfZnJlZXplX25vdGlmeSAoKEdPYmplY3QgKikgb2JqZWN0KTsKLSAgZm9yIChub2RlID0gb2JqZWN0LT5jb250cm9sX2JpbmRpbmdzOyBub2RlOyBub2RlID0gZ19saXN0X25leHQgKG5vZGUpKSB7Ci0gICAgcmV0ICY9IGdzdF9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXMgKChHc3RDb250cm9sQmluZGluZyAqKSBub2RlLT5kYXRhLAotICAgICAgICBvYmplY3QsIHRpbWVzdGFtcCwgb2JqZWN0LT5sYXN0X3N5bmMpOwotICB9Ci0gIG9iamVjdC0+bGFzdF9zeW5jID0gdGltZXN0YW1wOwotICBnX29iamVjdF90aGF3X25vdGlmeSAoKEdPYmplY3QgKikgb2JqZWN0KTsKLSAgLyogR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7ICovCi0KLSAgcmV0dXJuIHJldDsKLX0KLQotCi0vKioKLSAqIGdzdF9vYmplY3RfaGFzX2FjdGl2ZV9jb250cm9sX2JpbmRpbmdzOgotICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXMKLSAqCi0gKiBDaGVjayBpZiB0aGUgQG9iamVjdCBoYXMgYWN0aXZlIGNvbnRyb2xsZWQgcHJvcGVydGllcy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgb2JqZWN0IGhhcyBhY3RpdmUgY29udHJvbGxlZCBwcm9wZXJ0aWVzCi0gKi8KLWdib29sZWFuCi1nc3Rfb2JqZWN0X2hhc19hY3RpdmVfY29udHJvbF9iaW5kaW5ncyAoR3N0T2JqZWN0ICogb2JqZWN0KQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR0xpc3QgKm5vZGU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gIGZvciAobm9kZSA9IG9iamVjdC0+Y29udHJvbF9iaW5kaW5nczsgbm9kZTsgbm9kZSA9IGdfbGlzdF9uZXh0IChub2RlKSkgewotICAgIHJlcyB8PSAhZ3N0X2NvbnRyb2xfYmluZGluZ19pc19kaXNhYmxlZCAoKEdzdENvbnRyb2xCaW5kaW5nICopIG5vZGUtPmRhdGEpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfYmluZGluZ3NfZGlzYWJsZWQ6Ci0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllcwotICogQGRpc2FibGVkOiBib29sZWFuIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgY29udHJvbGxlcgotICogb3Igbm90LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGFsbCBjb250cm9sbGVkIHByb3BlcnRpZXMgb2YgdGhlIEBvYmplY3QgZm9yCi0gKiBzb21lIHRpbWUsIGkuZS4gZ3N0X29iamVjdF9zeW5jX3ZhbHVlcygpIHdpbGwgZG8gbm90aGluZy4KLSAqLwotdm9pZAotZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nc19kaXNhYmxlZCAoR3N0T2JqZWN0ICogb2JqZWN0LCBnYm9vbGVhbiBkaXNhYmxlZCkKLXsKLSAgR0xpc3QgKm5vZGU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX09CSkVDVCAob2JqZWN0KSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOwotICBmb3IgKG5vZGUgPSBvYmplY3QtPmNvbnRyb2xfYmluZGluZ3M7IG5vZGU7IG5vZGUgPSBnX2xpc3RfbmV4dCAobm9kZSkpIHsKLSAgICBnc3RfY29udHJvbF9iaW5kaW5nX3NldF9kaXNhYmxlZCAoKEdzdENvbnRyb2xCaW5kaW5nICopIG5vZGUtPmRhdGEsCi0gICAgICAgIGRpc2FibGVkKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdfZGlzYWJsZWQ6Ci0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllcwotICogQHByb3BlcnR5X25hbWU6IHByb3BlcnR5IHRvIGRpc2FibGUKLSAqIEBkaXNhYmxlZDogYm9vbGVhbiB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc2FibGUgdGhlIGNvbnRyb2xsZXIKLSAqIG9yIG5vdC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzYWJsZSB0aGUgY29udHJvbCBiaW5kaW5ncyBvbiBhIHByb3BlcnR5IGZvcgotICogc29tZSB0aW1lLCBpLmUuIGdzdF9vYmplY3Rfc3luY192YWx1ZXMoKSB3aWxsIGRvIG5vdGhpbmcgZm9yIHRoZQotICogcHJvcGVydHkuCi0gKi8KLXZvaWQKLWdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfYmluZGluZ19kaXNhYmxlZCAoR3N0T2JqZWN0ICogb2JqZWN0LAotICAgIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwgZ2Jvb2xlYW4gZGlzYWJsZWQpCi17Ci0gIEdzdENvbnRyb2xCaW5kaW5nICpiaW5kaW5nOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCkpOwotICBnX3JldHVybl9pZl9mYWlsIChwcm9wZXJ0eV9uYW1lKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gIGlmICgoYmluZGluZyA9IGdzdF9vYmplY3RfZmluZF9jb250cm9sX2JpbmRpbmcgKG9iamVjdCwgcHJvcGVydHlfbmFtZSkpKSB7Ci0gICAgZ3N0X2NvbnRyb2xfYmluZGluZ19zZXRfZGlzYWJsZWQgKGJpbmRpbmcsIGRpc2FibGVkKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLX0KLQotCi0vKioKLSAqIGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZzoKLSAqIEBvYmplY3Q6IHRoZSBjb250cm9sbGVyIG9iamVjdAotICogQGJpbmRpbmc6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDb250cm9sQmluZGluZyB0aGF0IHNob3VsZCBiZSB1c2VkCi0gKgotICogQXR0YWNoIHRoZSAjR3N0Q29udHJvbEJpbmRpbmcgdG8gdGhlIG9iamVjdC4gSWYgdGhlcmUgYWxyZWFkeSB3YXMgYQotICogI0dzdENvbnRyb2xCaW5kaW5nIGZvciB0aGlzIHByb3BlcnR5IGl0IHdpbGwgYmUgcmVwbGFjZWQuCi0gKgotICogVGhlIEBvYmplY3Qgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgQGJpbmRpbmcuCi0gKgotICogUmV0dXJuczogJUZBTFNFIGlmIHRoZSBnaXZlbiBAYmluZGluZyBoYXMgbm90IGJlZW4gc2V0dXAgZm9yIHRoaXMgb2JqZWN0IG9yCi0gKiBoYXMgYmVlbiBzZXR1cCBmb3IgYSBub24gc3VpdGFibGUgcHJvcGVydHksICVUUlVFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RDb250cm9sQmluZGluZyAqIGJpbmRpbmcpCi17Ci0gIEdzdENvbnRyb2xCaW5kaW5nICpvbGQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MX0JJTkRJTkcgKGJpbmRpbmcpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChiaW5kaW5nLT5wc3BlYywgRkFMU0UpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKLSAgaWYgKChvbGQgPSBnc3Rfb2JqZWN0X2ZpbmRfY29udHJvbF9iaW5kaW5nIChvYmplY3QsIGJpbmRpbmctPm5hbWUpKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iamVjdCwgImNvbnRyb2xsZWQgcHJvcGVydHkgJXMgcmVtb3ZlZCIsIG9sZC0+bmFtZSk7Ci0gICAgb2JqZWN0LT5jb250cm9sX2JpbmRpbmdzID0gZ19saXN0X3JlbW92ZSAob2JqZWN0LT5jb250cm9sX2JpbmRpbmdzLCBvbGQpOwotICAgIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAob2xkKSk7Ci0gIH0KLSAgb2JqZWN0LT5jb250cm9sX2JpbmRpbmdzID0gZ19saXN0X3ByZXBlbmQgKG9iamVjdC0+Y29udHJvbF9iaW5kaW5ncywgYmluZGluZyk7Ci0gIGdzdF9vYmplY3Rfc2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChiaW5kaW5nKSwgb2JqZWN0KTsKLSAgR1NUX0RFQlVHX09CSkVDVCAob2JqZWN0LCAiY29udHJvbGxlZCBwcm9wZXJ0eSAlcyBhZGRlZCIsIGJpbmRpbmctPm5hbWUpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X2dldF9jb250cm9sX2JpbmRpbmc6Ci0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0Ci0gKiBAcHJvcGVydHlfbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkKLSAqCi0gKiBHZXRzIHRoZSBjb3JyZXNwb25kaW5nICNHc3RDb250cm9sQmluZGluZyBmb3IgdGhlIHByb3BlcnR5LiBUaGlzIHNob3VsZCBiZQotICogdW5yZWZlcmVuY2VkIGFnYWluIGFmdGVyIHVzZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdGhlICNHc3RDb250cm9sQmluZGluZyBmb3IKLSAqIEBwcm9wZXJ0eV9uYW1lIG9yICVOVUxMIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgY29udHJvbGxlZC4KLSAqLwotR3N0Q29udHJvbEJpbmRpbmcgKgotZ3N0X29iamVjdF9nZXRfY29udHJvbF9iaW5kaW5nIChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSkKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmc7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAocHJvcGVydHlfbmFtZSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOwotICBpZiAoKGJpbmRpbmcgPSBnc3Rfb2JqZWN0X2ZpbmRfY29udHJvbF9iaW5kaW5nIChvYmplY3QsIHByb3BlcnR5X25hbWUpKSkgewotICAgIGdzdF9vYmplY3RfcmVmIChiaW5kaW5nKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLQotICByZXR1cm4gYmluZGluZzsKLX0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X3JlbW92ZV9jb250cm9sX2JpbmRpbmc6Ci0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0Ci0gKiBAYmluZGluZzogdGhlIGJpbmRpbmcKLSAqCi0gKiBSZW1vdmVzIHRoZSBjb3JyZXNwb25kaW5nICNHc3RDb250cm9sQmluZGluZy4gSWYgaXQgd2FzIHRoZQotICogbGFzdCByZWYgb2YgdGhlIGJpbmRpbmcsIGl0IHdpbGwgYmUgZGlzcG9zZWQuICAKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgYmluZGluZyBjb3VsZCBiZSByZW1vdmVkLgotICovCi1nYm9vbGVhbgotZ3N0X29iamVjdF9yZW1vdmVfY29udHJvbF9iaW5kaW5nIChHc3RPYmplY3QgKiBvYmplY3QsCi0gICAgR3N0Q29udHJvbEJpbmRpbmcgKiBiaW5kaW5nKQotewotICBHTGlzdCAqbm9kZTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT05UUk9MX0JJTkRJTkcgKGJpbmRpbmcpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOwotICBpZiAoKG5vZGUgPSBnX2xpc3RfZmluZCAob2JqZWN0LT5jb250cm9sX2JpbmRpbmdzLCBiaW5kaW5nKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChvYmplY3QsICJjb250cm9sbGVkIHByb3BlcnR5ICVzIHJlbW92ZWQiLCBiaW5kaW5nLT5uYW1lKTsKLSAgICBvYmplY3QtPmNvbnRyb2xfYmluZGluZ3MgPQotICAgICAgICBnX2xpc3RfZGVsZXRlX2xpbmsgKG9iamVjdC0+Y29udHJvbF9iaW5kaW5ncywgbm9kZSk7Ci0gICAgZ3N0X29iamVjdF91bnBhcmVudCAoR1NUX09CSkVDVF9DQVNUIChiaW5kaW5nKSk7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9vYmplY3RfZ2V0X3ZhbHVlOgotICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXMKLSAqIEBwcm9wZXJ0eV9uYW1lOiB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0Ci0gKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGUgY29udHJvbC1jaGFuZ2Ugc2hvdWxkIGJlIHJlYWQgZnJvbQotICoKLSAqIEdldHMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29udHJvbGxlZCBwcm9wZXJ0eSBhdCB0aGUgcmVxdWVzdGVkIHRpbWUuCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogdGhlIEdWYWx1ZSBvZiB0aGUgcHJvcGVydHkgYXQgdGhlIGdpdmVuIHRpbWUsCi0gKiBvciAlTlVMTCBpZiB0aGUgcHJvcGVydHkgaXNuJ3QgY29udHJvbGxlZC4KLSAqLwotR1ZhbHVlICoKLWdzdF9vYmplY3RfZ2V0X3ZhbHVlIChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBHc3RDb250cm9sQmluZGluZyAqYmluZGluZzsKLSAgR1ZhbHVlICp2YWwgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmplY3QpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByb3BlcnR5X25hbWUsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCksIE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKLSAgaWYgKChiaW5kaW5nID0gZ3N0X29iamVjdF9maW5kX2NvbnRyb2xfYmluZGluZyAob2JqZWN0LCBwcm9wZXJ0eV9uYW1lKSkpIHsKLSAgICB2YWwgPSBnc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZSAoYmluZGluZywgdGltZXN0YW1wKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLQotICByZXR1cm4gdmFsOwotfQotCi0vKioKLSAqIGdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5OgotICogQG9iamVjdDogdGhlIG9iamVjdCB0aGF0IGhhcyBjb250cm9sbGVkIHByb3BlcnRpZXMKLSAqIEBwcm9wZXJ0eV9uYW1lOiB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0Ci0gKiBAdGltZXN0YW1wOiB0aGUgdGltZSB0aGF0IHNob3VsZCBiZSBwcm9jZXNzZWQKLSAqIEBpbnRlcnZhbDogdGhlIHRpbWUgc3BhY2luZyBiZXR3ZWVuIHN1YnNlcXVlbnQgdmFsdWVzCi0gKiBAbl92YWx1ZXM6IHRoZSBudW1iZXIgb2YgdmFsdWVzCi0gKiBAdmFsdWVzOiBhcnJheSB0byBwdXQgY29udHJvbC12YWx1ZXMgaW4KLSAqCi0gKiBHZXRzIGEgbnVtYmVyIG9mIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGNvbnRyb2xsZWQgcHJvcGVydHkgc3RhcnRpbmcgYXQgdGhlCi0gKiByZXF1ZXN0ZWQgdGltZS4gVGhlIGFycmF5IEB2YWx1ZXMgbmVlZCB0byBob2xkIGVub3VnaCBzcGFjZSBmb3IgQG5fdmFsdWVzIG9mCi0gKiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBvYmplY3RzIHByb3BlcnR5J3MgdHlwZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpZiBvbmUgd2FudHMgdG8gZS5nLiBkcmF3IGEgZ3JhcGggb2YgdGhlIGNvbnRyb2wKLSAqIGN1cnZlIG9yIGFwcGx5IGEgY29udHJvbCBjdXJ2ZSBzYW1wbGUgYnkgc2FtcGxlLgotICoKLSAqIFRoZSB2YWx1ZXMgYXJlIHVuYm94ZWQgYW5kIHJlYWR5IHRvIGJlIHVzZWQuIFRoZSBzaW1pbGFyIGZ1bmN0aW9uIAotICogZ3N0X29iamVjdF9nZXRfZ192YWx1ZV9hcnJheSgpIHJldHVybnMgdGhlIGFycmF5IGFzICNHVmFsdWVzIGFuZCBpcwotICogYmV0dGVyIHN1aXRlcyBmb3IgYmluZGluZ3MuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIGFycmF5IGNvdWxkIGJlIGZpbGxlZCwgJUZBTFNFIG90aGVyd2lzZQotICovCi1nYm9vbGVhbgotZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgZ3BvaW50ZXIgdmFsdWVzKQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmc7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByb3BlcnR5X25hbWUsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoaW50ZXJ2YWwpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZXMsIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gIGlmICgoYmluZGluZyA9IGdzdF9vYmplY3RfZmluZF9jb250cm9sX2JpbmRpbmcgKG9iamVjdCwgcHJvcGVydHlfbmFtZSkpKSB7Ci0gICAgcmVzID0gZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXkgKGJpbmRpbmcsIHRpbWVzdGFtcCwgaW50ZXJ2YWwsCi0gICAgICAgIG5fdmFsdWVzLCB2YWx1ZXMpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXk6Ci0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllcwotICogQHByb3BlcnR5X25hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQKLSAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lIHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZAotICogQGludGVydmFsOiB0aGUgdGltZSBzcGFjaW5nIGJldHdlZW4gc3Vic2VxdWVudCB2YWx1ZXMKLSAqIEBuX3ZhbHVlczogdGhlIG51bWJlciBvZiB2YWx1ZXMKLSAqIEB2YWx1ZXM6IGFycmF5IHRvIHB1dCBjb250cm9sLXZhbHVlcyBpbgotICoKLSAqIEdldHMgYSBudW1iZXIgb2YgI0dWYWx1ZXMgZm9yIHRoZSBnaXZlbiBjb250cm9sbGVkIHByb3BlcnR5IHN0YXJ0aW5nIGF0IHRoZQotICogcmVxdWVzdGVkIHRpbWUuIFRoZSBhcnJheSBAdmFsdWVzIG5lZWQgdG8gaG9sZCBlbm91Z2ggc3BhY2UgZm9yIEBuX3ZhbHVlcyBvZgotICogI0dWYWx1ZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpZiBvbmUgd2FudHMgdG8gZS5nLiBkcmF3IGEgZ3JhcGggb2YgdGhlIGNvbnRyb2wKLSAqIGN1cnZlIG9yIGFwcGx5IGEgY29udHJvbCBjdXJ2ZSBzYW1wbGUgYnkgc2FtcGxlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBnaXZlbiBhcnJheSBjb3VsZCBiZSBmaWxsZWQsICVGQUxTRSBvdGhlcndpc2UKLSAqLwotZ2Jvb2xlYW4KLWdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgR1ZhbHVlICogdmFsdWVzKQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR3N0Q29udHJvbEJpbmRpbmcgKmJpbmRpbmc7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByb3BlcnR5X25hbWUsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoaW50ZXJ2YWwpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZXMsIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gIGlmICgoYmluZGluZyA9IGdzdF9vYmplY3RfZmluZF9jb250cm9sX2JpbmRpbmcgKG9iamVjdCwgcHJvcGVydHlfbmFtZSkpKSB7Ci0gICAgcmVzID0gZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfZ192YWx1ZV9hcnJheSAoYmluZGluZywgdGltZXN0YW1wLCBpbnRlcnZhbCwKLSAgICAgICAgbl92YWx1ZXMsIHZhbHVlcyk7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLQotLyoqCi0gKiBnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGU6Ci0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0IHRoYXQgaGFzIGNvbnRyb2xsZWQgcHJvcGVydGllcwotICoKLSAqIE9idGFpbiB0aGUgY29udHJvbC1yYXRlIGZvciB0aGlzIEBvYmplY3QuIEF1ZGlvIHByb2Nlc3NpbmcgI0dzdEVsZW1lbnQKLSAqIG9iamVjdHMgd2lsbCB1c2UgdGhpcyByYXRlIHRvIHN1Yi1kaXZpZGUgdGhlaXIgcHJvY2Vzc2luZyBsb29wIGFuZCBjYWxsCi0gKiBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCkgaW5iZXR3ZWVuLiBUaGUgbGVuZ3RoIG9mIHRoZSBwcm9jZXNzaW5nIHNlZ21lbnQKLSAqIHNob3VsZCBiZSB1cCB0byBAY29udHJvbC1yYXRlIG5hbm9zZWNvbmRzLgotICoKLSAqIElmIHRoZSBAb2JqZWN0IGlzIG5vdCB1bmRlciBwcm9wZXJ0eSBjb250cm9sLCB0aGlzIHdpbGwgcmV0dXJuCi0gKiAlR1NUX0NMT0NLX1RJTUVfTk9ORS4gVGhpcyBhbGxvd3MgdGhlIGVsZW1lbnQgdG8gYXZvaWQgdGhlIHN1Yi1kaXZpZGluZy4KLSAqCi0gKiBUaGUgY29udHJvbC1yYXRlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UgaWYgdGhlIGVsZW1lbnQgaXMgaW4KLSAqICVHU1RfU1RBVEVfUEFVU0VEIG9yICVHU1RfU1RBVEVfUExBWUlORy4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgY29udHJvbCByYXRlIGluIG5hbm9zZWNvbmRzCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X29iamVjdF9nZXRfY29udHJvbF9yYXRlIChHc3RPYmplY3QgKiBvYmplY3QpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmplY3QpLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIG9iamVjdC0+Y29udHJvbF9yYXRlOwotfQotCi0vKioKLSAqIGdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZToKLSAqIEBvYmplY3Q6IHRoZSBvYmplY3QgdGhhdCBoYXMgY29udHJvbGxlZCBwcm9wZXJ0aWVzCi0gKiBAY29udHJvbF9yYXRlOiB0aGUgbmV3IGNvbnRyb2wtcmF0ZSBpbiBuYW5vc2Vjb25kcy4KLSAqCi0gKiBDaGFuZ2UgdGhlIGNvbnRyb2wtcmF0ZSBmb3IgdGhpcyBAb2JqZWN0LiBBdWRpbyBwcm9jZXNzaW5nICNHc3RFbGVtZW50Ci0gKiBvYmplY3RzIHdpbGwgdXNlIHRoaXMgcmF0ZSB0byBzdWItZGl2aWRlIHRoZWlyIHByb2Nlc3NpbmcgbG9vcCBhbmQgY2FsbAotICogZ3N0X29iamVjdF9zeW5jX3ZhbHVlcygpIGluYmV0d2Vlbi4gVGhlIGxlbmd0aCBvZiB0aGUgcHJvY2Vzc2luZyBzZWdtZW50Ci0gKiBzaG91bGQgYmUgdXAgdG8gQGNvbnRyb2wtcmF0ZSBuYW5vc2Vjb25kcy4KLSAqCi0gKiBUaGUgY29udHJvbC1yYXRlIHNob3VsZCBub3QgY2hhbmdlIGlmIHRoZSBlbGVtZW50IGlzIGluICVHU1RfU1RBVEVfUEFVU0VEIG9yCi0gKiAlR1NUX1NUQVRFX1BMQVlJTkcuCi0gKi8KLXZvaWQKLWdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZSAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RDbG9ja1RpbWUgY29udHJvbF9yYXRlKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmplY3QpKTsKLQotICBvYmplY3QtPmNvbnRyb2xfcmF0ZSA9IGNvbnRyb2xfcmF0ZTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RvYmplY3QuaCBiL2dzdC9nc3RvYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNhNjA2My4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0b2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RvYmplY3QuaDogSGVhZGVyIGZvciBiYXNlIEdzdE9iamVjdAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfT0JKRUNUX0hfXwotI2RlZmluZSBfX0dTVF9PQkpFQ1RfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfT0JKRUNUCQkJKGdzdF9vYmplY3RfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19PQkpFQ1Qob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfT0JKRUNUKSkKLSNkZWZpbmUgR1NUX0lTX09CSkVDVF9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9PQkpFQ1QpKQotI2RlZmluZSBHU1RfT0JKRUNUX0dFVF9DTEFTUyhvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfT0JKRUNULCBHc3RPYmplY3RDbGFzcykpCi0jZGVmaW5lIEdTVF9PQkpFQ1Qob2JqKQkJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX09CSkVDVCwgR3N0T2JqZWN0KSkKLSNkZWZpbmUgR1NUX09CSkVDVF9DTEFTUyhrbGFzcykJCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfT0JKRUNULCBHc3RPYmplY3RDbGFzcykpCi0jZGVmaW5lIEdTVF9PQkpFQ1RfQ0FTVChvYmopICAgICAgICAgICAgKChHc3RPYmplY3QqKShvYmopKQotI2RlZmluZSBHU1RfT0JKRUNUX0NMQVNTX0NBU1Qoa2xhc3MpICAgICgoR3N0T2JqZWN0Q2xhc3MqKShrbGFzcykpCi0KLS8qKgotICogR3N0T2JqZWN0RmxhZ3M6Ci0gKiBAR1NUX09CSkVDVF9GTEFHX01BWV9CRV9MRUFLRUQ6IHRoZSBvYmplY3QgaXMgZXhwZWN0ZWQgdG8gc3RheSBhbGl2ZSBldmVuCi0gKiBhZnRlciBnc3RfZGVpbml0KCkgaGFzIGJlZW4gY2FsbGVkIGFuZCBzbyBzaG91bGQgYmUgaWdub3JlZCBieSBsZWFrCi0gKiBkZXRlY3Rpb24gdG9vbHMuIChTaW5jZSAxLjEwKQotICogQEdTVF9PQkpFQ1RfRkxBR19MQVNUOiBzdWJjbGFzc2VzIGNhbiBhZGQgYWRkaXRpb25hbCBmbGFncyBzdGFydGluZyBmcm9tIHRoaXMgZmxhZwotICoKLSAqIFRoZSBzdGFuZGFyZCBmbGFncyB0aGF0IGFuIGdzdG9iamVjdCBtYXkgaGF2ZS4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEID0gKDEgPDwgMCksCi0gIC8qIHBhZGRpbmcgKi8KLSAgR1NUX09CSkVDVF9GTEFHX0xBU1QgPSAoMTw8NCkKLX0gR3N0T2JqZWN0RmxhZ3M7Ci0KLS8qKgotICogR1NUX09CSkVDVF9SRUZDT1VOVDoKLSAqIEBvYmo6IGEgI0dzdE9iamVjdAotICoKLSAqIEdldCBhY2Nlc3MgdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBmaWVsZCBvZiB0aGUgb2JqZWN0LgotICovCi0jZGVmaW5lIEdTVF9PQkpFQ1RfUkVGQ09VTlQob2JqKSAgICAgICAgICAgICAgICAoKChHT2JqZWN0Kikob2JqKSktPnJlZl9jb3VudCkKLS8qKgotICogR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRToKLSAqIEBvYmo6IGEgI0dzdE9iamVjdAotICoKLSAqIEdldCB0aGUgcmVmZXJlbmNlIGNvdW50IHZhbHVlIG9mIHRoZSBvYmplY3QuCi0gKi8KLSNkZWZpbmUgR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRShvYmopICAgICAgICAgIGdfYXRvbWljX2ludF9nZXQgKChnaW50ICopICZHU1RfT0JKRUNUX1JFRkNPVU5UKG9iaikpCi0KLS8qIHdlIGRvIGEgR1NUX09CSkVDVF9DQVNUIHRvIGF2b2lkIHR5cGUgY2hlY2tpbmcsIGJldHRlciBjYWxsIHRoZXNlCi0gKiBmdW5jdGlvbiB3aXRoIGEgdmFsaWQgb2JqZWN0ISAqLwotCi0vKioKLSAqIEdTVF9PQkpFQ1RfR0VUX0xPQ0s6Ci0gKiBAb2JqOiBhICNHc3RPYmplY3QKLSAqCi0gKiBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIHRoZSBtdXRleCBvZiB0aGlzIG9iamVjdC4KLSAqLwotI2RlZmluZSBHU1RfT0JKRUNUX0dFVF9MT0NLKG9iaikgICAgICAgICAgICAgICAoJkdTVF9PQkpFQ1RfQ0FTVChvYmopLT5sb2NrKQotLyoqCi0gKiBHU1RfT0JKRUNUX0xPQ0s6Ci0gKiBAb2JqOiBhICNHc3RPYmplY3QgdG8gbG9jawotICoKLSAqIFRoaXMgbWFjcm8gd2lsbCBvYnRhaW4gYSBsb2NrIG9uIHRoZSBvYmplY3QsIG1ha2luZyBzZXJpYWxpemF0aW9uIHBvc3NpYmxlLgotICogSXQgYmxvY2tzIHVudGlsIHRoZSBsb2NrIGNhbiBiZSBvYnRhaW5lZC4KLSAqLwotI2RlZmluZSBHU1RfT0JKRUNUX0xPQ0sob2JqKSAgICAgICAgICAgICAgICAgICBnX211dGV4X2xvY2soR1NUX09CSkVDVF9HRVRfTE9DSyhvYmopKQotLyoqCi0gKiBHU1RfT0JKRUNUX1RSWUxPQ0s6Ci0gKiBAb2JqOiBhICNHc3RPYmplY3QuCi0gKgotICogVGhpcyBtYWNybyB3aWxsIHRyeSB0byBvYnRhaW4gYSBsb2NrIG9uIHRoZSBvYmplY3QsIGJ1dCB3aWxsIHJldHVybiB3aXRoCi0gKiAlRkFMU0UgaWYgaXQgY2FuJ3QgZ2V0IGl0IGltbWVkaWF0ZWx5LgotICovCi0jZGVmaW5lIEdTVF9PQkpFQ1RfVFJZTE9DSyhvYmopICAgICAgICAgICAgICAgIGdfbXV0ZXhfdHJ5bG9jayhHU1RfT0JKRUNUX0dFVF9MT0NLKG9iaikpCi0vKioKLSAqIEdTVF9PQkpFQ1RfVU5MT0NLOgotICogQG9iajogYSAjR3N0T2JqZWN0IHRvIHVubG9jay4KLSAqCi0gKiBUaGlzIG1hY3JvIHJlbGVhc2VzIGEgbG9jayBvbiB0aGUgb2JqZWN0LgotICovCi0jZGVmaW5lIEdTVF9PQkpFQ1RfVU5MT0NLKG9iaikgICAgICAgICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrKEdTVF9PQkpFQ1RfR0VUX0xPQ0sob2JqKSkKLQotCi0vKioKLSAqIEdTVF9PQkpFQ1RfTkFNRToKLSAqIEBvYmo6IGEgI0dzdE9iamVjdAotICoKLSAqIEdldCB0aGUgbmFtZSBvZiB0aGlzIG9iamVjdC4gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUgYnkgZGVmYXVsdAotICogKGkuZS4geW91IHdpbGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG9iamVjdCBsb2NrIGlzIHRha2VuIHlvdXJzZWxmKS4KLSAqIElmIGluIGRvdWJ0IHVzZSBnc3Rfb2JqZWN0X2dldF9uYW1lKCkgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBHU1RfT0JKRUNUX05BTUUob2JqKSAgICAgICAgICAgIChHU1RfT0JKRUNUX0NBU1Qob2JqKS0+bmFtZSkKLS8qKgotICogR1NUX09CSkVDVF9QQVJFTlQ6Ci0gKiBAb2JqOiBhICNHc3RPYmplY3QKLSAqCi0gKiBHZXQgdGhlIHBhcmVudCBvZiB0aGlzIG9iamVjdC4gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUgYnkgZGVmYXVsdAotICogKGkuZS4geW91IHdpbGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIG9iamVjdCBsb2NrIGlzIHRha2VuIHlvdXJzZWxmKS4KLSAqIElmIGluIGRvdWJ0IHVzZSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQoKSBpbnN0ZWFkLgotICovCi0jZGVmaW5lIEdTVF9PQkpFQ1RfUEFSRU5UKG9iaikgICAgICAgICAgKEdTVF9PQkpFQ1RfQ0FTVChvYmopLT5wYXJlbnQpCi0KLQotLyoqCi0gKiBHU1RfT0JKRUNUX0ZMQUdTOgotICogQG9iajogYSAjR3N0T2JqZWN0Ci0gKgotICogVGhpcyBtYWNybyByZXR1cm5zIHRoZSBlbnRpcmUgc2V0IG9mIGZsYWdzIGZvciB0aGUgb2JqZWN0LgotICovCi0jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR1Mob2JqKSAgICAgICAgICAgICAgICAgIChHU1RfT0JKRUNUX0NBU1QgKG9iaiktPmZsYWdzKQotLyoqCi0gKiBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUOgotICogQG9iajogYSAjR3N0T2JqZWN0Ci0gKiBAZmxhZzogRmxhZyB0byBjaGVjayBmb3IKLSAqCi0gKiBUaGlzIG1hY3JvIGNoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIGZsYWcgaXMgc2V0LgotICovCi0jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQob2JqLGZsYWcpICAgICAgICgoR1NUX09CSkVDVF9GTEFHUyAob2JqKSAmIChmbGFnKSkgPT0gKGZsYWcpKQotLyoqCi0gKiBHU1RfT0JKRUNUX0ZMQUdfU0VUOgotICogQG9iajogYSAjR3N0T2JqZWN0Ci0gKiBAZmxhZzogRmxhZyB0byBzZXQKLSAqCi0gKiBUaGlzIG1hY3JvIHNldHMgdGhlIGdpdmVuIGJpdHMuCi0gKi8KLSNkZWZpbmUgR1NUX09CSkVDVF9GTEFHX1NFVChvYmosZmxhZykgICAgICAgICAgKEdTVF9PQkpFQ1RfRkxBR1MgKG9iaikgfD0gKGZsYWcpKQotLyoqCi0gKiBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQ6Ci0gKiBAb2JqOiBhICNHc3RPYmplY3QKLSAqIEBmbGFnOiBGbGFnIHRvIHNldAotICoKLSAqIFRoaXMgbWFjcm8gdW5zZXRzIHRoZSBnaXZlbiBiaXRzLgotICovCi0jZGVmaW5lIEdTVF9PQkpFQ1RfRkxBR19VTlNFVChvYmosZmxhZykgICAgICAgIChHU1RfT0JKRUNUX0ZMQUdTIChvYmopICY9IH4oZmxhZykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RPYmplY3QgR3N0T2JqZWN0OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9iamVjdENsYXNzIEdzdE9iamVjdENsYXNzOwotCi0vKioKLSAqIEdzdE9iamVjdDoKLSAqIEBsb2NrOiBvYmplY3QgTE9DSwotICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvYmplY3QKLSAqIEBwYXJlbnQ6IHRoaXMgb2JqZWN0J3MgcGFyZW50LCB3ZWFrIHJlZgotICogQGZsYWdzOiBmbGFncyBmb3IgdGhpcyBvYmplY3QKLSAqCi0gKiBHU3RyZWFtZXIgYmFzZSBvYmplY3QgY2xhc3MuCi0gKi8KLXN0cnVjdCBfR3N0T2JqZWN0IHsKLSAgR0luaXRpYWxseVVub3duZWQgb2JqZWN0OwotCi0gIC8qPCBwdWJsaWMgPiovIC8qIHdpdGggTE9DSyAqLwotICBHTXV0ZXggICAgICAgICBsb2NrOyAgICAgICAgLyogb2JqZWN0IExPQ0sgKi8KLSAgZ2NoYXIgICAgICAgICAqbmFtZTsgICAgICAgIC8qIG9iamVjdCBuYW1lICovCi0gIEdzdE9iamVjdCAgICAgKnBhcmVudDsgICAgICAvKiB0aGlzIG9iamVjdCdzIHBhcmVudCwgd2VhayByZWYgKi8KLSAgZ3VpbnQzMiAgICAgICAgZmxhZ3M7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdMaXN0ICAgICAgICAgKmNvbnRyb2xfYmluZGluZ3M7ICAvKiBMaXN0IG9mIEdzdENvbnRyb2xCaW5kaW5nICovCi0gIGd1aW50NjQgICAgICAgIGNvbnRyb2xfcmF0ZTsKLSAgZ3VpbnQ2NCAgICAgICAgbGFzdF9zeW5jOwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWQ7Ci19OwotCi0vKioKLSAqIEdzdE9iamVjdENsYXNzOgotICogQHBhcmVudF9jbGFzczogcGFyZW50Ci0gKiBAcGF0aF9zdHJpbmdfc2VwYXJhdG9yOiBzZXBhcmF0b3IgdXNlZCBieSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZygpCi0gKiBAZGVlcF9ub3RpZnk6IGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIKLSAqCi0gKiBHU3RyZWFtZXIgYmFzZSBvYmplY3QgY2xhc3MuCi0gKi8KLXN0cnVjdCBfR3N0T2JqZWN0Q2xhc3MgewotICBHSW5pdGlhbGx5VW5vd25lZENsYXNzIHBhcmVudF9jbGFzczsKLQotICBjb25zdCBnY2hhcgkqcGF0aF9zdHJpbmdfc2VwYXJhdG9yOwotCi0gIC8qIHNpZ25hbHMgKi8KLSAgdm9pZCAgICAgICAgICAoKmRlZXBfbm90aWZ5KSAgICAgIChHc3RPYmplY3QgKiBvYmplY3QsIEdzdE9iamVjdCAqIG9yaWcsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8KLSAgLyogdmlydHVhbCBtZXRob2RzIGZvciBzdWJjbGFzc2VzICovCi0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotLyogbm9ybWFsIEdPYmplY3Qgc3R1ZmYgKi8KLUdUeXBlCQlnc3Rfb2JqZWN0X2dldF90eXBlCQkodm9pZCk7Ci0KLS8qIG5hbWUgcm91dGluZXMgKi8KLWdib29sZWFuCWdzdF9vYmplY3Rfc2V0X25hbWUJCShHc3RPYmplY3QgKm9iamVjdCwgY29uc3QgZ2NoYXIgKm5hbWUpOwotZ2NoYXIqCQlnc3Rfb2JqZWN0X2dldF9uYW1lCQkoR3N0T2JqZWN0ICpvYmplY3QpOwotCi0vKiBwYXJlbnRhZ2Ugcm91dGluZXMgKi8KLWdib29sZWFuCWdzdF9vYmplY3Rfc2V0X3BhcmVudAkJKEdzdE9iamVjdCAqb2JqZWN0LCBHc3RPYmplY3QgKnBhcmVudCk7Ci1Hc3RPYmplY3QqCWdzdF9vYmplY3RfZ2V0X3BhcmVudAkJKEdzdE9iamVjdCAqb2JqZWN0KTsKLXZvaWQJCWdzdF9vYmplY3RfdW5wYXJlbnQJCShHc3RPYmplY3QgKm9iamVjdCk7Ci1nYm9vbGVhbglnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQJCShHc3RPYmplY3QgKm9iamVjdCwgR3N0T2JqZWN0ICpwYXJlbnQpOwotZ2Jvb2xlYW4JZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IJKEdzdE9iamVjdCAqb2JqZWN0LCBHc3RPYmplY3QgKmFuY2VzdG9yKTsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfREVQUkVDQVRFRAotZ2Jvb2xlYW4JZ3N0X29iamVjdF9oYXNfYW5jZXN0b3IJCShHc3RPYmplY3QgKm9iamVjdCwgR3N0T2JqZWN0ICphbmNlc3Rvcik7Ci0jZW5kaWYKLQotdm9pZCAgICAgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeSAgKEdPYmplY3QgKm9iamVjdCwgR3N0T2JqZWN0ICpvcmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQYXJhbVNwZWMgKnBzcGVjLCBnY2hhciAqKmV4Y2x1ZGVkX3Byb3BzKTsKLQotLyogcmVmY291bnRpbmcgKyBsaWZlIGN5Y2xlICovCi1ncG9pbnRlcglnc3Rfb2JqZWN0X3JlZgkJCShncG9pbnRlciBvYmplY3QpOwotdm9pZAkJZ3N0X29iamVjdF91bnJlZgkJKGdwb2ludGVyIG9iamVjdCk7Ci1ncG9pbnRlciAgICAgICAgZ3N0X29iamVjdF9yZWZfc2luawkJKGdwb2ludGVyIG9iamVjdCk7Ci0KLS8qIHJlcGxhY2Ugb2JqZWN0IHBvaW50ZXIgKi8KLWdib29sZWFuICAgICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UJCShHc3RPYmplY3QgKipvbGRvYmosIEdzdE9iamVjdCAqbmV3b2JqKTsKLQotLyogcHJpbnRpbmcgb3V0IHRoZSAncGF0aCcgb2YgdGhlIG9iamVjdCAqLwotZ2NoYXIgKgkJZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcJKEdzdE9iamVjdCAqb2JqZWN0KTsKLQotLyogbWlzYyB1dGlscyAqLwotZ2Jvb2xlYW4JZ3N0X29iamVjdF9jaGVja191bmlxdWVuZXNzCShHTGlzdCAqbGlzdCwgY29uc3QgZ2NoYXIgKm5hbWUpOwotCi0vKiBjb250cm9sbGVyIGZ1bmN0aW9ucyAqLwotI2luY2x1ZGUgPGdzdC9nc3Rjb250cm9sYmluZGluZy5oPgotI2luY2x1ZGUgPGdzdC9nc3Rjb250cm9sc291cmNlLmg+Ci0KLUdzdENsb2NrVGltZSAgICBnc3Rfb2JqZWN0X3N1Z2dlc3RfbmV4dF9zeW5jICAgICAgKEdzdE9iamVjdCAqIG9iamVjdCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAgICAgICAgICAgIChHc3RPYmplY3QgKiBvYmplY3QsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X29iamVjdF9oYXNfYWN0aXZlX2NvbnRyb2xfYmluZGluZ3MgICAoR3N0T2JqZWN0ICpvYmplY3QpOwotdm9pZCAgICAgICAgICAgIGdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfYmluZGluZ3NfZGlzYWJsZWQgKEdzdE9iamVjdCAqb2JqZWN0LCBnYm9vbGVhbiBkaXNhYmxlZCk7Ci12b2lkICAgICAgICAgICAgZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nX2Rpc2FibGVkICAoR3N0T2JqZWN0ICpvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGRpc2FibGVkKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAgICAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RDb250cm9sQmluZGluZyAqIGJpbmRpbmcpOwotR3N0Q29udHJvbEJpbmRpbmcgKgotICAgICAgICAgICAgICAgIGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfYmluZGluZyAgICAoR3N0T2JqZWN0ICpvYmplY3QsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X29iamVjdF9yZW1vdmVfY29udHJvbF9iaW5kaW5nIChHc3RPYmplY3QgKiBvYmplY3QsIEdzdENvbnRyb2xCaW5kaW5nICogYmluZGluZyk7Ci0KLUdWYWx1ZSAqICAgICAgICBnc3Rfb2JqZWN0X2dldF92YWx1ZSAgICAgICAgICAgICAgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkgICAgICAgIChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IG5fdmFsdWVzLCBncG9pbnRlciB2YWx1ZXMpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkgICAgICAoR3N0T2JqZWN0ICogb2JqZWN0LCBjb25zdCBnY2hhciAqIHByb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBuX3ZhbHVlcywgR1ZhbHVlICp2YWx1ZXMpOwotCi1Hc3RDbG9ja1RpbWUgICAgZ3N0X29iamVjdF9nZXRfY29udHJvbF9yYXRlICAgICAgIChHc3RPYmplY3QgKiBvYmplY3QpOwotdm9pZCAgICAgICAgICAgIGdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfcmF0ZSAgICAgICAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RDbG9ja1RpbWUgY29udHJvbF9yYXRlKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RPYmplY3QsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX09CSkVDVF9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHBhZC5jIGIvZ3N0L2dzdHBhZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzdmYzQ0Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RwYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDYyMjEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdHBhZC5jOiBQYWRzIGZvciBsaW5raW5nIGVsZW1lbnRzIHRvZ2V0aGVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3RwYWQKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogT2JqZWN0IGNvbnRhaW5lZCBieSBlbGVtZW50cyB0aGF0IGFsbG93cyBsaW5rcyB0bwotICogICAgICAgICAgICAgICAgICAgICBvdGhlciBlbGVtZW50cwotICogQHNlZV9hbHNvOiAjR3N0UGFkVGVtcGxhdGUsICNHc3RFbGVtZW50LCAjR3N0RXZlbnQsICNHc3RRdWVyeSwgI0dzdEJ1ZmZlcgotICoKLSAqIEEgI0dzdEVsZW1lbnQgaXMgbGlua2VkIHRvIG90aGVyIGVsZW1lbnRzIHZpYSAicGFkcyIsIHdoaWNoIGFyZSBleHRyZW1lbHkKLSAqIGxpZ2h0LXdlaWdodCBnZW5lcmljIGxpbmsgcG9pbnRzLgotICoKLSAqIFBhZHMgaGF2ZSBhICNHc3RQYWREaXJlY3Rpb24sIHNvdXJjZSBwYWRzIHByb2R1Y2UgZGF0YSwgc2luayBwYWRzIGNvbnN1bWUKLSAqIGRhdGEuCi0gKgotICogUGFkcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgZnJvbSBhICNHc3RQYWRUZW1wbGF0ZSB3aXRoCi0gKiBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlKCkgYW5kIGFyZSB0aGVuIGFkZGVkIHRvIGEgI0dzdEVsZW1lbnQuIFRoaXMgdXN1YWxseQotICogaGFwcGVucyB3aGVuIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgYnV0IGl0IGNhbiBhbHNvIGhhcHBlbiBkeW5hbWljYWxseSBiYXNlZAotICogb24gdGhlIGRhdGEgdGhhdCB0aGUgZWxlbWVudCBpcyBwcm9jZXNzaW5nIG9yIGJhc2VkIG9uIHRoZSBwYWRzIHRoYXQgdGhlCi0gKiBhcHBsaWNhdGlvbiByZXF1ZXN0cy4KLSAqCi0gKiBQYWRzIHdpdGhvdXQgcGFkIHRlbXBsYXRlcyBjYW4gYmUgY3JlYXRlZCB3aXRoIGdzdF9wYWRfbmV3KCksCi0gKiB3aGljaCB0YWtlcyBhIGRpcmVjdGlvbiBhbmQgYSBuYW1lIGFzIGFuIGFyZ3VtZW50LiAgSWYgdGhlIG5hbWUgaXMgJU5VTEwsCi0gKiB0aGVuIGEgZ3VhcmFudGVlZCB1bmlxdWUgbmFtZSB3aWxsIGJlIGFzc2lnbmVkIHRvIGl0LgotICoKLSAqIEEgI0dzdEVsZW1lbnQgY3JlYXRpbmcgYSBwYWQgd2lsbCB0eXBpY2FsbHkgdXNlIHRoZSB2YXJpb3VzCi0gKiBnc3RfcGFkX3NldF8qX2Z1bmN0aW9uKCkgY2FsbHMgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBldmVudHMsIHF1ZXJpZXMgb3IKLSAqIGRhdGFmbG93IG9uIHRoZSBwYWRzLgotICoKLSAqIGdzdF9wYWRfZ2V0X3BhcmVudCgpIHdpbGwgcmV0cmlldmUgdGhlICNHc3RFbGVtZW50IHRoYXQgb3ducyB0aGUgcGFkLgotICoKLSAqIEFmdGVyIHR3byBwYWRzIGFyZSByZXRyaWV2ZWQgZnJvbSBhbiBlbGVtZW50IGJ5IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKCksCi0gKiB0aGUgcGFkcyBjYW4gYmUgbGlua2VkIHdpdGggZ3N0X3BhZF9saW5rKCkuIChGb3IgcXVpY2sgbGlua3MsCi0gKiB5b3UgY2FuIGFsc28gdXNlIGdzdF9lbGVtZW50X2xpbmsoKSwgd2hpY2ggd2lsbCBtYWtlIHRoZSBvYnZpb3VzCi0gKiBsaW5rIGZvciB5b3UgaWYgaXQncyBzdHJhaWdodGZvcndhcmQuKS4gUGFkcyBjYW4gYmUgdW5saW5rZWQgYWdhaW4gd2l0aAotICogZ3N0X3BhZF91bmxpbmsoKS4gZ3N0X3BhZF9nZXRfcGVlcigpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoYXQgdGhlIHBhZCBpcwotICogbGlua2VkIHRvLgotICoKLSAqIEJlZm9yZSBkYXRhZmxvdyBpcyBwb3NzaWJsZSBvbiB0aGUgcGFkcywgdGhleSBuZWVkIHRvIGJlIGFjdGl2YXRlZCB3aXRoCi0gKiBnc3RfcGFkX3NldF9hY3RpdmUoKS4KLSAqCi0gKiBnc3RfcGFkX3F1ZXJ5KCkgYW5kIGdzdF9wYWRfcGVlcl9xdWVyeSgpIGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IHZhcmlvdXMKLSAqIHByb3BlcnRpZXMgb2YgdGhlIHBhZCBhbmQgdGhlIHN0cmVhbS4KLSAqCi0gKiBUbyBzZW5kIGEgI0dzdEV2ZW50IG9uIGEgcGFkLCB1c2UgZ3N0X3BhZF9zZW5kX2V2ZW50KCkgYW5kCi0gKiBnc3RfcGFkX3B1c2hfZXZlbnQoKS4gU29tZSBldmVudHMgd2lsbCBiZSBzdGlja3kgb24gdGhlIHBhZCwgbWVhbmluZyB0aGF0Ci0gKiBhZnRlciB0aGV5IHBhc3Mgb24gdGhlIHBhZCB0aGV5IGNhbiBiZSBxdWVyaWVkIGxhdGVyIHdpdGgKLSAqIGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCgpIGFuZCBnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCgpLgotICogZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgYW5kIGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcygpIGFyZSBjb252ZW5pZW5jZQotICogZnVuY3Rpb25zIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHN0aWNreSBDQVBTIGV2ZW50IG9uIGEgcGFkLgotICoKLSAqIEdzdEVsZW1lbnRzIHdpbGwgdXNlIGdzdF9wYWRfcHVzaCgpIGFuZCBnc3RfcGFkX3B1bGxfcmFuZ2UoKSB0byBwdXNoIG91dAotICogb3IgcHVsbCBpbiBhIGJ1ZmZlci4KLSAqCi0gKiBUaGUgZGF0YWZsb3csIGV2ZW50cyBhbmQgcXVlcmllcyB0aGF0IGhhcHBlbiBvbiBhIHBhZCBjYW4gYmUgbW9uaXRvcmVkIHdpdGgKLSAqIHByb2JlcyB0aGF0IGNhbiBiZSBpbnN0YWxsZWQgd2l0aCBnc3RfcGFkX2FkZF9wcm9iZSgpLiBnc3RfcGFkX2lzX2Jsb2NrZWQoKQotICogY2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgYSBibG9jayBwcm9iZSBpcyBpbnN0YWxsZWQgb24gdGhlIHBhZC4KLSAqIGdzdF9wYWRfaXNfYmxvY2tpbmcoKSBjaGVja3MgaWYgdGhlIGJsb2NraW5nIHByb2JlIGlzIGN1cnJlbnRseSBibG9ja2luZyB0aGUKLSAqIHBhZC4gZ3N0X3BhZF9yZW1vdmVfcHJvYmUoKSBpcyB1c2VkIHRvIHJlbW92ZSBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIHByb2JlCi0gKiBhbmQgdW5ibG9jayBibG9ja2luZyBwcm9iZXMgaWYgYW55LgotICoKLSAqIFBhZCBoYXZlIGFuIG9mZnNldCB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBnc3RfcGFkX2dldF9vZmZzZXQoKS4gVGhpcwotICogb2Zmc2V0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcnVubmluZ190aW1lIG9mIGFsbCBkYXRhIHBhc3Npbmcgb3ZlciB0aGUgcGFkLgotICogZ3N0X3BhZF9zZXRfb2Zmc2V0KCkgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBvZmZzZXQuCi0gKgotICogQ29udmVuaWVuY2UgZnVuY3Rpb25zIGV4aXN0IHRvIHN0YXJ0LCBwYXVzZSBhbmQgc3RvcCB0aGUgdGFzayBvbiBhIHBhZCB3aXRoCi0gKiBnc3RfcGFkX3N0YXJ0X3Rhc2soKSwgZ3N0X3BhZF9wYXVzZV90YXNrKCkgYW5kIGdzdF9wYWRfc3RvcF90YXNrKCkKLSAqIHJlc3BlY3RpdmVseS4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdHBhZC5oIgotI2luY2x1ZGUgImdzdHBhZHRlbXBsYXRlLmgiCi0jaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCi0jaW5jbHVkZSAiZ3N0dXRpbHMuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0ZXJyb3IuaCIKLSNpbmNsdWRlICJnc3R0cmFjZXJ1dGlscy5oIgotI2luY2x1ZGUgImdzdHZhbHVlLmgiCi0jaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChkZWJ1Z19kYXRhZmxvdyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1BBRFMKLQotLyogUGFkIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgUEFEX0xJTktFRCwKLSAgUEFEX1VOTElOS0VELAotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBBRF9QUk9QXzAsCi0gIFBBRF9QUk9QX0NBUFMsCi0gIFBBRF9QUk9QX0RJUkVDVElPTiwKLSAgUEFEX1BST1BfVEVNUExBVEUsCi0gIFBBRF9QUk9QX09GRlNFVAotICAgICAgLyogRklMTCBNRSAqLwotfTsKLQotI2RlZmluZSBHU1RfUEFEX0dFVF9QUklWQVRFKG9iaikgIFwKLSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9QQUQsIEdzdFBhZFByaXZhdGUpKQotCi0jZGVmaW5lIF9QQURfUFJPQkVfVFlQRV9BTExfQk9USF9BTkRfRkxVU0ggKEdTVF9QQURfUFJPQkVfVFlQRV9BTExfQk9USCB8IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCkKLQotLyogd2UgaGF2ZSBhIHBlbmRpbmcgYW5kIGFuIGFjdGl2ZSBldmVudCBvbiB0aGUgcGFkLiBPbiBzb3VyY2UgcGFkcyBvbmx5IHRoZQotICogYWN0aXZlIGV2ZW50IGlzIHVzZWQuIE9uIHNpbmtwYWRzLCBldmVudHMgYXJlIGNvcGllZCB0byB0aGUgcGVuZGluZyBlbnRyeSBhbmQKLSAqIG1vdmVkIHRvIHRoZSBhY3RpdmUgZXZlbnQgd2hlbiB0aGUgZXZlbnRmdW5jIHJldHVybmVkICVUUlVFLiAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ2Jvb2xlYW4gcmVjZWl2ZWQ7Ci0gIEdzdEV2ZW50ICpldmVudDsKLX0gUGFkRXZlbnQ7Ci0KLXN0cnVjdCBfR3N0UGFkUHJpdmF0ZQotewotICBndWludCBldmVudHNfY29va2llOwotICBHQXJyYXkgKmV2ZW50czsKLSAgZ3VpbnQgbGFzdF9jb29raWU7Ci0KLSAgZ2ludCB1c2luZzsKLSAgZ3VpbnQgcHJvYmVfbGlzdF9jb29raWU7Ci0gIGd1aW50IHByb2JlX2Nvb2tpZTsKLQotICAvKiBjb3VudGVyIG9mIGhvdyBtYW55IGlkbGUgcHJvYmVzIGFyZSBydW5uaW5nIGRpcmVjdGx5IGZyb20gdGhlIGFkZF9wcm9iZQotICAgKiBjYWxsLiBVc2VkIHRvIGJsb2NrIGFueSBkYXRhIGZsb3dpbmcgaW4gdGhlIHBhZCB3aGlsZSB0aGUgaWRsZSBjYWxsYmFjawotICAgKiBEb2Vzbid0IGZpbmlzaCBpdHMgd29yayAqLwotICBnaW50IGlkbGVfcnVubmluZzsKLX07Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdIb29rIGhvb2s7Ci0gIGd1aW50IGNvb2tpZTsKLX0gR3N0UHJvYmU7Ci0KLSNkZWZpbmUgUFJPQkVfQ09PS0lFKGgpICgoKEdzdFByb2JlICopKGgpKS0+Y29va2llKQotI2RlZmluZSBHU1RfUEFEX0lTX1JVTk5JTkdfSURMRV9QUk9CRShwKSBcCi0gICAgKCgoR3N0UGFkICopKHApKS0+cHJpdi0+aWRsZV9ydW5uaW5nID4gMCkKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdzdFBhZFByb2JlSW5mbyAqaW5mbzsKLSAgZ2Jvb2xlYW4gZHJvcHBlZDsKLSAgZ2Jvb2xlYW4gcGFzczsKLSAgZ2Jvb2xlYW4gaGFuZGxlZDsKLSAgZ2Jvb2xlYW4gbWFyc2hhbGxlZDsKLSAgZ3VpbnQgY29va2llOwotfSBQcm9iZU1hcnNoYWxsOwotCi1zdGF0aWMgdm9pZCBnc3RfcGFkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3BhZF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfcGFkX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9wYWRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZCBnc3RfcGFkX3NldF9wYWRfdGVtcGxhdGUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3BhZF9hY3RpdmF0ZV9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcGFkX2NoYWluX2xpc3RfZGVmYXVsdCAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyTGlzdCAqIGxpc3QpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcGFkX3NlbmRfZXZlbnRfdW5jaGVja2VkIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCwgR3N0UGFkUHJvYmVUeXBlIHR5cGUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3BhZF9wdXNoX2V2ZW50X3VuY2hlY2tlZCAoR3N0UGFkICogcGFkLAotICAgIEdzdEV2ZW50ICogZXZlbnQsIEdzdFBhZFByb2JlVHlwZSB0eXBlKTsKLQotc3RhdGljIGdib29sZWFuIGFjdGl2YXRlX21vZGVfaW50ZXJuYWwgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKTsKLQotc3RhdGljIGd1aW50IGdzdF9wYWRfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotc3RhdGljIEdQYXJhbVNwZWMgKnBzcGVjX2NhcHMgPSBOVUxMOwotCi0vKiBxdWFya3MgZm9yIHByb2JlIHNpZ25hbHMgKi8KLXN0YXRpYyBHUXVhcmsgYnVmZmVyX3F1YXJrOwotc3RhdGljIEdRdWFyayBidWZmZXJfbGlzdF9xdWFyazsKLXN0YXRpYyBHUXVhcmsgZXZlbnRfcXVhcms7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGdpbnQgcmV0OwotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgR1F1YXJrIHF1YXJrOwotfSBHc3RGbG93UXVhcmtzOwotCi1zdGF0aWMgR3N0Rmxvd1F1YXJrcyBmbG93X3F1YXJrc1tdID0gewotICB7R1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1MsICJjdXN0b20tc3VjY2VzcyIsIDB9LAotICB7R1NUX0ZMT1dfT0ssICJvayIsIDB9LAotICB7R1NUX0ZMT1dfTk9UX0xJTktFRCwgIm5vdC1saW5rZWQiLCAwfSwKLSAge0dTVF9GTE9XX0ZMVVNISU5HLCAiZmx1c2hpbmciLCAwfSwKLSAge0dTVF9GTE9XX0VPUywgImVvcyIsIDB9LAotICB7R1NUX0ZMT1dfTk9UX05FR09USUFURUQsICJub3QtbmVnb3RpYXRlZCIsIDB9LAotICB7R1NUX0ZMT1dfRVJST1IsICJlcnJvciIsIDB9LAotICB7R1NUX0ZMT1dfTk9UX1NVUFBPUlRFRCwgIm5vdC1zdXBwb3J0ZWQiLCAwfSwKLSAge0dTVF9GTE9XX0NVU1RPTV9FUlJPUiwgImN1c3RvbS1lcnJvciIsIDB9Ci19OwotCi0vKioKLSAqIGdzdF9mbG93X2dldF9uYW1lOgotICogQHJldDogYSAjR3N0Rmxvd1JldHVybiB0byBnZXQgdGhlIG5hbWUgb2YuCi0gKgotICogR2V0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGZsb3cgcmV0dXJuLgotICoKLSAqIFJldHVybnM6IGEgc3RhdGljIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmbG93IHJldHVybi4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2Zsb3dfZ2V0X25hbWUgKEdzdEZsb3dSZXR1cm4gcmV0KQotewotICBnaW50IGk7Ci0KLSAgcmV0ID0gQ0xBTVAgKHJldCwgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SLCBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZmxvd19xdWFya3MpOyBpKyspIHsKLSAgICBpZiAocmV0ID09IGZsb3dfcXVhcmtzW2ldLnJldCkKLSAgICAgIHJldHVybiBmbG93X3F1YXJrc1tpXS5uYW1lOwotICB9Ci0gIHJldHVybiAidW5rbm93biI7Ci19Ci0KLS8qKgotICogZ3N0X2Zsb3dfdG9fcXVhcms6Ci0gKiBAcmV0OiBhICNHc3RGbG93UmV0dXJuIHRvIGdldCB0aGUgcXVhcmsgb2YuCi0gKgotICogR2V0IHRoZSB1bmlxdWUgcXVhcmsgZm9yIHRoZSBnaXZlbiBHc3RGbG93UmV0dXJuLgotICoKLSAqIFJldHVybnM6IHRoZSBxdWFyayBhc3NvY2lhdGVkIHdpdGggdGhlIGZsb3cgcmV0dXJuIG9yIDAgaWYgYW4KLSAqIGludmFsaWQgcmV0dXJuIHdhcyBzcGVjaWZpZWQuCi0gKi8KLUdRdWFyawotZ3N0X2Zsb3dfdG9fcXVhcmsgKEdzdEZsb3dSZXR1cm4gcmV0KQotewotICBnaW50IGk7Ci0KLSAgcmV0ID0gQ0xBTVAgKHJldCwgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SLCBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZmxvd19xdWFya3MpOyBpKyspIHsKLSAgICBpZiAocmV0ID09IGZsb3dfcXVhcmtzW2ldLnJldCkKLSAgICAgIHJldHVybiBmbG93X3F1YXJrc1tpXS5xdWFyazsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2xpbmtfZ2V0X25hbWU6Ci0gKiBAcmV0OiBhICNHc3RQYWRMaW5rUmV0dXJuIHRvIGdldCB0aGUgbmFtZSBvZi4KLSAqCi0gKiBHZXRzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gcGFkLWxpbmsgcmV0dXJuLgotICoKLSAqIFJldHVybnM6IGEgc3RhdGljIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBwYWQtbGluayByZXR1cm4uCi0gKgotICogU2luY2U6IDEuNAotICovCi1jb25zdCBnY2hhciAqCi1nc3RfcGFkX2xpbmtfZ2V0X25hbWUgKEdzdFBhZExpbmtSZXR1cm4gcmV0KQotewotICBzd2l0Y2ggKHJldCkgewotICAgIGNhc2UgR1NUX1BBRF9MSU5LX09LOgotICAgICAgcmV0dXJuICJvayI7Ci0gICAgY2FzZSBHU1RfUEFEX0xJTktfV1JPTkdfSElFUkFSQ0hZOgotICAgICAgcmV0dXJuICJ3cm9uZyBoaWVyYXJjaHkiOwotICAgIGNhc2UgR1NUX1BBRF9MSU5LX1dBU19MSU5LRUQ6Ci0gICAgICByZXR1cm4gIndhcyBsaW5rZWQiOwotICAgIGNhc2UgR1NUX1BBRF9MSU5LX1dST05HX0RJUkVDVElPTjoKLSAgICAgIHJldHVybiAid3JvbmcgZGlyZWN0aW9uIjsKLSAgICBjYXNlIEdTVF9QQURfTElOS19OT0ZPUk1BVDoKLSAgICAgIHJldHVybiAibm8gY29tbW9uIGZvcm1hdCI7Ci0gICAgY2FzZSBHU1RfUEFEX0xJTktfTk9TQ0hFRDoKLSAgICAgIHJldHVybiAiaW5jb21wYXRpYmxlIHNjaGVkdWxpbmciOwotICAgIGNhc2UgR1NUX1BBRF9MSU5LX1JFRlVTRUQ6Ci0gICAgICByZXR1cm4gInJlZnVzZWQiOwotICB9Ci0gIGdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkICgidW5rbm93biIpOwotfQotCi0jZGVmaW5lIF9kb19pbml0IFwKLXsgXAotICBnaW50IGk7IFwKLSAgXAotICBidWZmZXJfcXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImJ1ZmZlciIpOyBcCi0gIGJ1ZmZlcl9saXN0X3F1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJidWZmZXJsaXN0Iik7IFwKLSAgZXZlbnRfcXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImV2ZW50Iik7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChmbG93X3F1YXJrcyk7IGkrKykgewkJCVwKLSAgICBmbG93X3F1YXJrc1tpXS5xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChmbG93X3F1YXJrc1tpXS5uYW1lKTsgXAotICB9IFwKLSAgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZGVidWdfZGF0YWZsb3csICJHU1RfREFUQUZMT1ciLCBcCi0gICAgICBHU1RfREVCVUdfQk9MRCB8IEdTVF9ERUJVR19GR19HUkVFTiwgImRhdGFmbG93IGluc2lkZSBwYWRzIik7IFwKLX0KLQotI2RlZmluZSBnc3RfcGFkX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RQYWQsIGdzdF9wYWQsIEdTVF9UWVBFX09CSkVDVCwgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3BhZF9jbGFzc19pbml0IChHc3RQYWRDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdE9iamVjdENsYXNzICpnc3RvYmplY3RfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIGdzdG9iamVjdF9jbGFzcyA9IEdTVF9PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdFBhZFByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3BhZF9kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9wYWRfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9wYWRfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcGFkX2dldF9wcm9wZXJ0eTsKLQotICAvKioKLSAgICogR3N0UGFkOjpsaW5rZWQ6Ci0gICAqIEBwYWQ6IHRoZSBwYWQgdGhhdCBlbWl0dGVkIHRoZSBzaWduYWwKLSAgICogQHBlZXI6IHRoZSBwZWVyIHBhZCB0aGF0IGhhcyBiZWVuIGNvbm5lY3RlZAotICAgKgotICAgKiBTaWduYWxzIHRoYXQgYSBwYWQgaGFzIGJlZW4gbGlua2VkIHRvIHRoZSBwZWVyIHBhZC4KLSAgICovCi0gIGdzdF9wYWRfc2lnbmFsc1tQQURfTElOS0VEXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJsaW5rZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0UGFkQ2xhc3MsIGxpbmtlZCksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX1BBRCk7Ci0gIC8qKgotICAgKiBHc3RQYWQ6OnVubGlua2VkOgotICAgKiBAcGFkOiB0aGUgcGFkIHRoYXQgZW1pdHRlZCB0aGUgc2lnbmFsCi0gICAqIEBwZWVyOiB0aGUgcGVlciBwYWQgdGhhdCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQKLSAgICoKLSAgICogU2lnbmFscyB0aGF0IGEgcGFkIGhhcyBiZWVuIHVubGlua2VkIGZyb20gdGhlIHBlZXIgcGFkLgotICAgKi8KLSAgZ3N0X3BhZF9zaWduYWxzW1BBRF9VTkxJTktFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgidW5saW5rZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0UGFkQ2xhc3MsIHVubGlua2VkKSwgTlVMTCwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfUEFEKTsKLQotICBwc3BlY19jYXBzID0gZ19wYXJhbV9zcGVjX2JveGVkICgiY2FwcyIsICJDYXBzIiwKLSAgICAgICJUaGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwYWQiLCBHU1RfVFlQRV9DQVBTLAotICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQQURfUFJPUF9DQVBTLCBwc3BlY19jYXBzKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQQURfUFJPUF9ESVJFQ1RJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImRpcmVjdGlvbiIsICJEaXJlY3Rpb24iLCAiVGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFkIiwKLSAgICAgICAgICBHU1RfVFlQRV9QQURfRElSRUNUSU9OLCBHU1RfUEFEX1VOS05PV04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qIEZJWE1FLCBNYWtlIEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgd2hlbiB3ZSBmaXggZ2hvc3RwYWRzLiAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQQURfUFJPUF9URU1QTEFURSwKLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJ0ZW1wbGF0ZSIsICJUZW1wbGF0ZSIsCi0gICAgICAgICAgIlRoZSBHc3RQYWRUZW1wbGF0ZSBvZiB0aGlzIHBhZCIsIEdTVF9UWVBFX1BBRF9URU1QTEFURSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UGFkOm9mZnNldDoKLSAgICoKLSAgICogVGhlIG9mZnNldCB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBwYWQuCi0gICAqCi0gICAqIFNpbmNlOiAxLjYKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBBRF9QUk9QX09GRlNFVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQ2NCAoIm9mZnNldCIsICJPZmZzZXQiLAotICAgICAgICAgICJUaGUgcnVubmluZyB0aW1lIG9mZnNldCBvZiB0aGUgcGFkIiwgMCwgR19NQVhJTlQ2NCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RvYmplY3RfY2xhc3MtPnBhdGhfc3RyaW5nX3NlcGFyYXRvciA9ICIuIjsKLQotICAvKiBSZWdpc3RlciBjb21tb24gZnVuY3Rpb24gcG9pbnRlciBkZXNjcmlwdGlvbnMgKi8KLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wYWRfYWN0aXZhdGVfZGVmYXVsdCk7Ci0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcGFkX2V2ZW50X2RlZmF1bHQpOwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3BhZF9xdWVyeV9kZWZhdWx0KTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0KTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wYWRfaW5pdCAoR3N0UGFkICogcGFkKQotewotICBwYWQtPnByaXYgPSBHU1RfUEFEX0dFVF9QUklWQVRFIChwYWQpOwotCi0gIEdTVF9QQURfRElSRUNUSU9OIChwYWQpID0gR1NUX1BBRF9VTktOT1dOOwotCi0gIEdTVF9QQURfQUNUSVZBVEVGVU5DIChwYWQpID0gZ3N0X3BhZF9hY3RpdmF0ZV9kZWZhdWx0OwotICBHU1RfUEFEX0VWRU5URlVOQyAocGFkKSA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdDsKLSAgR1NUX1BBRF9RVUVSWUZVTkMgKHBhZCkgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQ7Ci0gIEdTVF9QQURfSVRFUklOVExJTktGVU5DIChwYWQpID0gZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQ7Ci0gIEdTVF9QQURfQ0hBSU5MSVNURlVOQyAocGFkKSA9IGdzdF9wYWRfY2hhaW5fbGlzdF9kZWZhdWx0OwotCi0gIEdTVF9QQURfU0VUX0ZMVVNISU5HIChwYWQpOwotCi0gIGdfcmVjX211dGV4X2luaXQgKCZwYWQtPnN0cmVhbV9yZWNfbG9jayk7Ci0KLSAgZ19jb25kX2luaXQgKCZwYWQtPmJsb2NrX2NvbmQpOwotCi0gIGdfaG9va19saXN0X2luaXQgKCZwYWQtPnByb2Jlcywgc2l6ZW9mIChHc3RQcm9iZSkpOwotCi0gIHBhZC0+cHJpdi0+ZXZlbnRzID0gZ19hcnJheV9zaXplZF9uZXcgKEZBTFNFLCBUUlVFLCBzaXplb2YgKFBhZEV2ZW50KSwgMTYpOwotICBwYWQtPnByaXYtPmV2ZW50c19jb29raWUgPSAwOwotICBwYWQtPnByaXYtPmxhc3RfY29va2llID0gLTE7Ci0gIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLX0KLQotLyogY2FsbGVkIHdoZW4gc2V0dGluZyB0aGUgcGFkIGluYWN0aXZlLiBJdCByZW1vdmVzIGFsbCBzdGlja3kgZXZlbnRzIGZyb20KLSAqIHRoZSBwYWQuIG11c3QgYmUgY2FsbGVkIHdpdGggb2JqZWN0IGxvY2sgKi8KLXN0YXRpYyB2b2lkCi1yZW1vdmVfZXZlbnRzIChHc3RQYWQgKiBwYWQpCi17Ci0gIGd1aW50IGksIGxlbjsKLSAgR0FycmF5ICpldmVudHM7Ci0gIGdib29sZWFuIG5vdGlmeSA9IEZBTFNFOwotCi0gIGV2ZW50cyA9IHBhZC0+cHJpdi0+ZXZlbnRzOwotCi0gIGxlbiA9IGV2ZW50cy0+bGVuOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBQYWRFdmVudCAqZXYgPSAmZ19hcnJheV9pbmRleCAoZXZlbnRzLCBQYWRFdmVudCwgaSk7Ci0gICAgR3N0RXZlbnQgKmV2ZW50ID0gZXYtPmV2ZW50OwotCi0gICAgZXYtPmV2ZW50ID0gTlVMTDsKLQotICAgIGlmIChldmVudCAmJiBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9DQVBTKQotICAgICAgbm90aWZ5ID0gVFJVRTsKLQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUyk7Ci0gIGdfYXJyYXlfc2V0X3NpemUgKGV2ZW50cywgMCk7Ci0gIHBhZC0+cHJpdi0+ZXZlbnRzX2Nvb2tpZSsrOwotCi0gIGlmIChub3RpZnkpIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5vdGlmeSBjYXBzIik7Ci0gICAgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjICgoR09iamVjdCAqKSBwYWQsIHBzcGVjX2NhcHMpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICB9Ci19Ci0KLS8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBvYmplY3QgbG9jayAqLwotc3RhdGljIFBhZEV2ZW50ICoKLWZpbmRfZXZlbnRfYnlfdHlwZSAoR3N0UGFkICogcGFkLCBHc3RFdmVudFR5cGUgdHlwZSwgZ3VpbnQgaWR4KQotewotICBndWludCBpLCBsZW47Ci0gIEdBcnJheSAqZXZlbnRzOwotICBQYWRFdmVudCAqZXY7Ci0KLSAgZXZlbnRzID0gcGFkLT5wcml2LT5ldmVudHM7Ci0gIGxlbiA9IGV2ZW50cy0+bGVuOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGV2ID0gJmdfYXJyYXlfaW5kZXggKGV2ZW50cywgUGFkRXZlbnQsIGkpOwotICAgIGlmIChldi0+ZXZlbnQgPT0gTlVMTCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKEdTVF9FVkVOVF9UWVBFIChldi0+ZXZlbnQpID09IHR5cGUpIHsKLSAgICAgIGlmIChpZHggPT0gMCkKLSAgICAgICAgZ290byBmb3VuZDsKLSAgICAgIGlkeC0tOwotICAgIH0gZWxzZSBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2LT5ldmVudCkgPiB0eXBlKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZXYgPSBOVUxMOwotZm91bmQ6Ci0gIHJldHVybiBldjsKLX0KLQotLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIE9CSkVDVCBsb2NrICovCi1zdGF0aWMgUGFkRXZlbnQgKgotZmluZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBndWludCBpLCBsZW47Ci0gIEdBcnJheSAqZXZlbnRzOwotICBQYWRFdmVudCAqZXY7Ci0KLSAgZXZlbnRzID0gcGFkLT5wcml2LT5ldmVudHM7Ci0gIGxlbiA9IGV2ZW50cy0+bGVuOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGV2ID0gJmdfYXJyYXlfaW5kZXggKGV2ZW50cywgUGFkRXZlbnQsIGkpOwotICAgIGlmIChldmVudCA9PSBldi0+ZXZlbnQpCi0gICAgICBnb3RvIGZvdW5kOwotICAgIGVsc2UgaWYgKEdTVF9FVkVOVF9UWVBFIChldi0+ZXZlbnQpID4gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkKLSAgICAgIGJyZWFrOwotICB9Ci0gIGV2ID0gTlVMTDsKLWZvdW5kOgotICByZXR1cm4gZXY7Ci19Ci0KLS8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBPQkpFQ1QgbG9jayAqLwotc3RhdGljIHZvaWQKLXJlbW92ZV9ldmVudF9ieV90eXBlIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50VHlwZSB0eXBlKQotewotICBndWludCBpLCBsZW47Ci0gIEdBcnJheSAqZXZlbnRzOwotICBQYWRFdmVudCAqZXY7Ci0KLSAgZXZlbnRzID0gcGFkLT5wcml2LT5ldmVudHM7Ci0gIGxlbiA9IGV2ZW50cy0+bGVuOwotCi0gIGkgPSAwOwotICB3aGlsZSAoaSA8IGxlbikgewotICAgIGV2ID0gJmdfYXJyYXlfaW5kZXggKGV2ZW50cywgUGFkRXZlbnQsIGkpOwotICAgIGlmIChldi0+ZXZlbnQgPT0gTlVMTCkKLSAgICAgIGdvdG8gbmV4dDsKLQotICAgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXYtPmV2ZW50KSA+IHR5cGUpCi0gICAgICBicmVhazsKLSAgICBlbHNlIGlmIChHU1RfRVZFTlRfVFlQRSAoZXYtPmV2ZW50KSAhPSB0eXBlKQotICAgICAgZ290byBuZXh0OwotCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldi0+ZXZlbnQpOwotICAgIGdfYXJyYXlfcmVtb3ZlX2luZGV4IChldmVudHMsIGkpOwotICAgIGxlbi0tOwotICAgIHBhZC0+cHJpdi0+ZXZlbnRzX2Nvb2tpZSsrOwotICAgIGNvbnRpbnVlOwotCi0gIG5leHQ6Ci0gICAgaSsrOwotICB9Ci19Ci0KLS8qIGNoZWNrIGFsbCBldmVudHMgb24gc3JjcGFkIGFnYWluc3QgdGhvc2Ugb24gc2lua3BhZC4gQWxsIGV2ZW50cyB0aGF0IGFyZSBub3QKLSAqIG9uIHNpbmtwYWQgYXJlIG1hcmtlZCBhcyByZWNlaXZlZD0lRkFMU0UgYW5kIHRoZSBQRU5ESU5HX0VWRU5UUyBpcyBzZXQgb24gdGhlCi0gKiBzcmNwYWQgc28gdGhhdCB0aGUgZXZlbnRzIHdpbGwgYmUgc2VudCBuZXh0IHRpbWUgKi8KLS8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBzcmNwYWQgYW5kIHNpbmtwYWQgTE9DS1MgKi8KLXN0YXRpYyB2b2lkCi1zY2hlZHVsZV9ldmVudHMgKEdzdFBhZCAqIHNyY3BhZCwgR3N0UGFkICogc2lua3BhZCkKLXsKLSAgZ2ludCBpLCBsZW47Ci0gIEdBcnJheSAqZXZlbnRzOwotICBQYWRFdmVudCAqZXY7Ci0gIGdib29sZWFuIHBlbmRpbmcgPSBGQUxTRTsKLQotICBldmVudHMgPSBzcmNwYWQtPnByaXYtPmV2ZW50czsKLSAgbGVuID0gZXZlbnRzLT5sZW47Ci0KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgZXYgPSAmZ19hcnJheV9pbmRleCAoZXZlbnRzLCBQYWRFdmVudCwgaSk7Ci0gICAgaWYgKGV2LT5ldmVudCA9PSBOVUxMKQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAoc2lua3BhZCA9PSBOVUxMIHx8ICFmaW5kX2V2ZW50IChzaW5rcGFkLCBldi0+ZXZlbnQpKSB7Ci0gICAgICBldi0+cmVjZWl2ZWQgPSBGQUxTRTsKLSAgICAgIHBlbmRpbmcgPSBUUlVFOwotICAgIH0KLSAgfQotICBpZiAocGVuZGluZykKLSAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzcmNwYWQsIEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUyk7Ci19Ci0KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpQYWRFdmVudEZ1bmN0aW9uKSAoR3N0UGFkICogcGFkLCBQYWRFdmVudCAqIGV2LAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWQgTE9DSyAqLwotc3RhdGljIHZvaWQKLWV2ZW50c19mb3JlYWNoIChHc3RQYWQgKiBwYWQsIFBhZEV2ZW50RnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBndWludCBpLCBsZW47Ci0gIEdBcnJheSAqZXZlbnRzOwotICBnYm9vbGVhbiByZXQ7Ci0gIGd1aW50IGNvb2tpZTsKLQotICBldmVudHMgPSBwYWQtPnByaXYtPmV2ZW50czsKLQotcmVzdGFydDoKLSAgY29va2llID0gcGFkLT5wcml2LT5ldmVudHNfY29va2llOwotICBpID0gMDsKLSAgbGVuID0gZXZlbnRzLT5sZW47Ci0gIHdoaWxlIChpIDwgbGVuKSB7Ci0gICAgUGFkRXZlbnQgKmV2LCBldl9yZXQ7Ci0KLSAgICBldiA9ICZnX2FycmF5X2luZGV4IChldmVudHMsIFBhZEV2ZW50LCBpKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoZXYtPmV2ZW50ID09IE5VTEwpKQotICAgICAgZ290byBuZXh0OwotCi0gICAgLyogdGFrZSBhZGl0aW9uYWwgcmVmLCBmdW5jIG1pZ2h0IHJlbGVhc2UgdGhlIGxvY2sgKi8KLSAgICBldl9yZXQuZXZlbnQgPSBnc3RfZXZlbnRfcmVmIChldi0+ZXZlbnQpOwotICAgIGV2X3JldC5yZWNlaXZlZCA9IGV2LT5yZWNlaXZlZDsKLQotICAgIHJldCA9IGZ1bmMgKHBhZCwgJmV2X3JldCwgdXNlcl9kYXRhKTsKLQotICAgIC8qIHJlY2hlY2sgdGhlIGNvb2tpZSwgbG9jayBtaWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYW5kIHRoZSBsaXN0IGNvdWxkIGhhdmUKLSAgICAgKiBjaGFuZ2VkICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKGNvb2tpZSAhPSBwYWQtPnByaXYtPmV2ZW50c19jb29raWUpKSB7Ci0gICAgICBpZiAoR19MSUtFTFkgKGV2X3JldC5ldmVudCkpCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZfcmV0LmV2ZW50KTsKLSAgICAgIGdvdG8gcmVzdGFydDsKLSAgICB9Ci0KLSAgICAvKiBzdG9yZSB0aGUgcmVjZWl2ZWQgc3RhdGUgKi8KLSAgICBldi0+cmVjZWl2ZWQgPSBldl9yZXQucmVjZWl2ZWQ7Ci0KLSAgICAvKiBpZiB0aGUgZXZlbnQgY2hhbmdlZCwgd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoZXYtPmV2ZW50ICE9IGV2X3JldC5ldmVudCkpIHsKLSAgICAgIGlmIChHX1VOTElLRUxZIChldl9yZXQuZXZlbnQgPT0gTlVMTCkpIHsKLSAgICAgICAgLyogZnVuY3Rpb24gdW5yZWZmZWQgYW5kIHNldCB0aGUgZXZlbnQgdG8gTlVMTCwgcmVtb3ZlIGl0ICovCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXYtPmV2ZW50KTsKLSAgICAgICAgZ19hcnJheV9yZW1vdmVfaW5kZXggKGV2ZW50cywgaSk7Ci0gICAgICAgIGxlbi0tOwotICAgICAgICBjb29raWUgPSArK3BhZC0+cHJpdi0+ZXZlbnRzX2Nvb2tpZTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBmdW5jdGlvbiBnYXZlIGEgbmV3IGV2ZW50IGZvciB1cyAqLwotICAgICAgICBnc3RfZXZlbnRfdGFrZSAoJmV2LT5ldmVudCwgZXZfcmV0LmV2ZW50KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyoganVzdCB1bnJlZiwgbm90aGluZyBjaGFuZ2VkICovCi0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2X3JldC5ldmVudCk7Ci0gICAgfQotICAgIGlmICghcmV0KQotICAgICAgYnJlYWs7Ci0gIG5leHQ6Ci0gICAgaSsrOwotICB9Ci19Ci0KLS8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBMT0NLICovCi1zdGF0aWMgR3N0RXZlbnQgKgotX2FwcGx5X3BhZF9vZmZzZXQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCwgZ2Jvb2xlYW4gdXBzdHJlYW0pCi17Ci0gIGdpbnQ2NCBvZmZzZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYXBwbHkgcGFkIG9mZnNldCAlIiBHU1RfU1RJTUVfRk9STUFULAotICAgICAgR1NUX1NUSU1FX0FSR1MgKHBhZC0+b2Zmc2V0KSk7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NFR01FTlQpIHsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgICBnX2Fzc2VydCAoIXVwc3RyZWFtKTsKLQotICAgIC8qIGNvcHkgc2VnbWVudCB2YWx1ZXMgKi8KLSAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlZ21lbnQpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gICAgZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIHNlZ21lbnQuZm9ybWF0LCBwYWQtPm9mZnNldCk7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLSAgfQotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X21ha2Vfd3JpdGFibGUgKGV2ZW50KTsKLSAgb2Zmc2V0ID0gZ3N0X2V2ZW50X2dldF9ydW5uaW5nX3RpbWVfb2Zmc2V0IChldmVudCk7Ci0gIGlmICh1cHN0cmVhbSkKLSAgICBvZmZzZXQgLT0gcGFkLT5vZmZzZXQ7Ci0gIGVsc2UKLSAgICBvZmZzZXQgKz0gcGFkLT5vZmZzZXQ7Ci0gIGdzdF9ldmVudF9zZXRfcnVubmluZ190aW1lX29mZnNldCAoZXZlbnQsIG9mZnNldCk7Ci0KLSAgcmV0dXJuIGV2ZW50OwotfQotCi1zdGF0aWMgaW5saW5lIEdzdEV2ZW50ICoKLWFwcGx5X3BhZF9vZmZzZXQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCwgZ2Jvb2xlYW4gdXBzdHJlYW0pCi17Ci0gIGlmIChHX1VOTElLRUxZIChwYWQtPm9mZnNldCAhPSAwKSkKLSAgICByZXR1cm4gX2FwcGx5X3BhZF9vZmZzZXQgKHBhZCwgZXZlbnQsIHVwc3RyZWFtKTsKLSAgcmV0dXJuIGV2ZW50OwotfQotCi0KLS8qIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgT0JKRUNUX0xPQ0sgKi8KLXN0YXRpYyBHc3RDYXBzICoKLWdldF9wYWRfY2FwcyAoR3N0UGFkICogcGFkKQotewotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgUGFkRXZlbnQgKmV2OwotCi0gIGV2ID0gZmluZF9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9DQVBTLCAwKTsKLSAgaWYgKGV2ICYmIGV2LT5ldmVudCkKLSAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXYtPmV2ZW50LCAmY2Fwcyk7Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcGFkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFBhZCAqcGFkID0gR1NUX1BBRF9DQVNUIChvYmplY3QpOwotICBHc3RQYWQgKnBlZXI7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIHBhZCwgIiVwIGRpc3Bvc2UiLCBwYWQpOwotCi0gIC8qIHVubGluayB0aGUgcGVlciBwYWQgKi8KLSAgaWYgKChwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKSkpIHsKLSAgICAvKiB3aW5kb3cgZm9yIE1UIHVuc2FmZW5lc3MsIHNvbWVvbmUgZWxzZSBjb3VsZCB1bmxpbmsgaGVyZQotICAgICAqIGFuZCB0aGVuIHdlIGNhbGwgdW5saW5rIHdpdGggd3JvbmcgcGFkcy4gVGhlIHVubGluawotICAgICAqIGZ1bmN0aW9uIHdvdWxkIGNhdGNoIHRoaXMgYW5kIHNhZmVseSByZXR1cm4gZmFpbGVkLiAqLwotICAgIGlmIChHU1RfUEFEX0lTX1NSQyAocGFkKSkKLSAgICAgIGdzdF9wYWRfdW5saW5rIChwYWQsIHBlZXIpOwotICAgIGVsc2UKLSAgICAgIGdzdF9wYWRfdW5saW5rIChwZWVyLCBwYWQpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gIH0KLQotICBnc3RfcGFkX3NldF9wYWRfdGVtcGxhdGUgKHBhZCwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICByZW1vdmVfZXZlbnRzIChwYWQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICBnX2hvb2tfbGlzdF9jbGVhciAoJnBhZC0+cHJvYmVzKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wYWRfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFBhZCAqcGFkID0gR1NUX1BBRF9DQVNUIChvYmplY3QpOwotICBHc3RUYXNrICp0YXNrOwotCi0gIC8qIGluIGNhc2UgdGhlIHRhc2sgaXMgc3RpbGwgYXJvdW5kLCBjbGVhbiBpdCB1cCAqLwotICBpZiAoKHRhc2sgPSBHU1RfUEFEX1RBU0sgKHBhZCkpKSB7Ci0gICAgZ3N0X3Rhc2tfam9pbiAodGFzayk7Ci0gICAgR1NUX1BBRF9UQVNLIChwYWQpID0gTlVMTDsKLSAgICBnc3Rfb2JqZWN0X3VucmVmICh0YXNrKTsKLSAgfQotCi0gIGlmIChwYWQtPmFjdGl2YXRlbm90aWZ5KQotICAgIHBhZC0+YWN0aXZhdGVub3RpZnkgKHBhZC0+YWN0aXZhdGVkYXRhKTsKLSAgaWYgKHBhZC0+YWN0aXZhdGVtb2Rlbm90aWZ5KQotICAgIHBhZC0+YWN0aXZhdGVtb2Rlbm90aWZ5IChwYWQtPmFjdGl2YXRlbW9kZWRhdGEpOwotICBpZiAocGFkLT5saW5rbm90aWZ5KQotICAgIHBhZC0+bGlua25vdGlmeSAocGFkLT5saW5rZGF0YSk7Ci0gIGlmIChwYWQtPnVubGlua25vdGlmeSkKLSAgICBwYWQtPnVubGlua25vdGlmeSAocGFkLT51bmxpbmtkYXRhKTsKLSAgaWYgKHBhZC0+Y2hhaW5ub3RpZnkpCi0gICAgcGFkLT5jaGFpbm5vdGlmeSAocGFkLT5jaGFpbmRhdGEpOwotICBpZiAocGFkLT5jaGFpbmxpc3Rub3RpZnkpCi0gICAgcGFkLT5jaGFpbmxpc3Rub3RpZnkgKHBhZC0+Y2hhaW5saXN0ZGF0YSk7Ci0gIGlmIChwYWQtPmdldHJhbmdlbm90aWZ5KQotICAgIHBhZC0+Z2V0cmFuZ2Vub3RpZnkgKHBhZC0+Z2V0cmFuZ2VkYXRhKTsKLSAgaWYgKHBhZC0+ZXZlbnRub3RpZnkpCi0gICAgcGFkLT5ldmVudG5vdGlmeSAocGFkLT5ldmVudGRhdGEpOwotICBpZiAocGFkLT5xdWVyeW5vdGlmeSkKLSAgICBwYWQtPnF1ZXJ5bm90aWZ5IChwYWQtPnF1ZXJ5ZGF0YSk7Ci0gIGlmIChwYWQtPml0ZXJpbnRsaW5rbm90aWZ5KQotICAgIHBhZC0+aXRlcmludGxpbmtub3RpZnkgKHBhZC0+aXRlcmludGxpbmtkYXRhKTsKLQotICBnX3JlY19tdXRleF9jbGVhciAoJnBhZC0+c3RyZWFtX3JlY19sb2NrKTsKLSAgZ19jb25kX2NsZWFyICgmcGFkLT5ibG9ja19jb25kKTsKLSAgZ19hcnJheV9mcmVlIChwYWQtPnByaXYtPmV2ZW50cywgVFJVRSk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BhZF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAob2JqZWN0KSk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQQURfUFJPUF9ESVJFQ1RJT046Ci0gICAgICBHU1RfUEFEX0RJUkVDVElPTiAob2JqZWN0KSA9IChHc3RQYWREaXJlY3Rpb24pIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUEFEX1BST1BfVEVNUExBVEU6Ci0gICAgICBnc3RfcGFkX3NldF9wYWRfdGVtcGxhdGUgKEdTVF9QQURfQ0FTVCAob2JqZWN0KSwKLSAgICAgICAgICAoR3N0UGFkVGVtcGxhdGUgKikgZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQQURfUFJPUF9PRkZTRVQ6Ci0gICAgICBnc3RfcGFkX3NldF9vZmZzZXQgKEdTVF9QQURfQ0FTVCAob2JqZWN0KSwgZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcGFkX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChvYmplY3QpKTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBBRF9QUk9QX0NBUFM6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIGdldF9wYWRfY2FwcyAoR1NUX1BBRF9DQVNUIChvYmplY3QpKSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUEFEX1BST1BfRElSRUNUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIEdTVF9QQURfRElSRUNUSU9OIChvYmplY3QpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUEFEX1BST1BfVEVNUExBVEU6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBHU1RfUEFEX1BBRF9URU1QTEFURSAob2JqZWN0KSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBBRF9QUk9QX09GRlNFVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgZ3N0X3BhZF9nZXRfb2Zmc2V0IChHU1RfUEFEX0NBU1QgKG9iamVjdCkpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfcGFkX25ldzoKLSAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSBuZXcgcGFkLgotICogQGRpcmVjdGlvbjogdGhlICNHc3RQYWREaXJlY3Rpb24gb2YgdGhlIHBhZC4KLSAqCi0gKiBDcmVhdGVzIGEgbmV3IHBhZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCi0gKiBJZiBuYW1lIGlzICVOVUxMLCBhIGd1YXJhbnRlZWQgdW5pcXVlIG5hbWUgKGFjcm9zcyBhbGwgcGFkcykKLSAqIHdpbGwgYmUgYXNzaWduZWQuCi0gKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZiB0aGUgbmFtZSBzbyB5b3UgY2FuIHNhZmVseSBmcmVlIHRoZSBuYW1lLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmbG9hdGluZykgKG51bGxhYmxlKTogYSBuZXcgI0dzdFBhZCwgb3IgJU5VTEwgaW4KLSAqIGNhc2Ugb2YgYW4gZXJyb3IuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0UGFkICoKLWdzdF9wYWRfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gIHJldHVybiBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1BBRCwKLSAgICAgICJuYW1lIiwgbmFtZSwgImRpcmVjdGlvbiIsIGRpcmVjdGlvbiwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZToKLSAqIEB0ZW1wbDogdGhlIHBhZCB0ZW1wbGF0ZSB0byB1c2UKLSAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IHRoZSBuYW1lIG9mIHRoZSBwYWQKLSAqCi0gKiBDcmVhdGVzIGEgbmV3IHBhZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGdpdmVuIHRlbXBsYXRlLgotICogSWYgbmFtZSBpcyAlTlVMTCwgYSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIChhY3Jvc3MgYWxsIHBhZHMpCi0gKiB3aWxsIGJlIGFzc2lnbmVkLgotICogVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIG5hbWUgc28geW91IGNhbiBzYWZlbHkgZnJlZSB0aGUgbmFtZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZmxvYXRpbmcpIChudWxsYWJsZSk6IGEgbmV3ICNHc3RQYWQsIG9yICVOVUxMIGluCi0gKiBjYXNlIG9mIGFuIGVycm9yLgotICovCi1Hc3RQYWQgKgotZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRF9URU1QTEFURSAodGVtcGwpLCBOVUxMKTsKLQotICByZXR1cm4gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9QQUQsCi0gICAgICAibmFtZSIsIG5hbWUsICJkaXJlY3Rpb24iLCB0ZW1wbC0+ZGlyZWN0aW9uLCAidGVtcGxhdGUiLCB0ZW1wbCwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGU6Ci0gKiBAdGVtcGw6IHRoZSAjR3N0U3RhdGljUGFkVGVtcGxhdGUgdG8gdXNlCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHBhZAotICoKLSAqIENyZWF0ZXMgYSBuZXcgcGFkIHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGUgZ2l2ZW4gc3RhdGljIHRlbXBsYXRlLgotICogSWYgbmFtZSBpcyAlTlVMTCwgYSBndWFyYW50ZWVkIHVuaXF1ZSBuYW1lIChhY3Jvc3MgYWxsIHBhZHMpCi0gKiB3aWxsIGJlIGFzc2lnbmVkLgotICogVGhpcyBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIG5hbWUgc28geW91IGNhbiBzYWZlbHkgZnJlZSB0aGUgbmFtZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZmxvYXRpbmcpIChudWxsYWJsZSk6IGEgbmV3ICNHc3RQYWQsIG9yICVOVUxMIGluCi0gKiBjYXNlIG9mIGFuIGVycm9yLgotICovCi1Hc3RQYWQgKgotZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdGVtcGwsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RQYWQgKnBhZDsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsYXRlOwotCi0gIHRlbXBsYXRlID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICh0ZW1wbCk7Ci0gIHBhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsYXRlLCBuYW1lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGVtcGxhdGUpOwotICByZXR1cm4gcGFkOwotfQotCi0jZGVmaW5lIEFDUVVJUkVfUEFSRU5UKHBhZCwgcGFyZW50LCBsYWJlbCkgICAgICAgICAgICAgICAgICAgICAgXAotICBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoR19MSUtFTFkgKChwYXJlbnQgPSBHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSkpKSAgICAgICAgICBcCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAocGFyZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKEdfTElLRUxZIChHU1RfUEFEX05FRURTX1BBUkVOVCAocGFkKSkpICAgICAgICAgICAgIFwKLSAgICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gR19TVE1UX0VORAotCi0jZGVmaW5lIFJFTEVBU0VfUEFSRU5UKHBhcmVudCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoR19MSUtFTFkgKHBhcmVudCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IEdfU1RNVF9FTkQKLQotLyoqCi0gKiBnc3RfcGFkX2dldF9kaXJlY3Rpb246Ci0gKiBAcGFkOiBhICNHc3RQYWQgdG8gZ2V0IHRoZSBkaXJlY3Rpb24gb2YuCi0gKgotICogR2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQuIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCBpcwotICogZGVjaWRlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBzbyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UKLSAqIHRoZSBMT0NLLgotICoKLSAqIFJldHVybnM6IHRoZSAjR3N0UGFkRGlyZWN0aW9uIG9mIHRoZSBwYWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0UGFkRGlyZWN0aW9uCi1nc3RfcGFkX2dldF9kaXJlY3Rpb24gKEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0UGFkRGlyZWN0aW9uIHJlc3VsdDsKLQotICAvKiBQQURfVU5LTk9XTiBpcyBhIGxpdHRsZSBzaWxseSBidXQgd2UgbmVlZCBzb21lIHNvcnQgb2YKLSAgICogZXJyb3IgcmV0dXJuIHZhbHVlICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBHU1RfUEFEX1VOS05PV04pOwotCi0gIHJlc3VsdCA9IEdTVF9QQURfRElSRUNUSU9OIChwYWQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BhZF9hY3RpdmF0ZV9kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLQotICByZXR1cm4gYWN0aXZhdGVfbW9kZV9pbnRlcm5hbCAocGFkLCBwYXJlbnQsIEdTVF9QQURfTU9ERV9QVVNILCBUUlVFKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX21vZGVfZ2V0X25hbWU6Ci0gKiBAbW9kZTogdGhlIHBhZCBtb2RlCi0gKgotICogUmV0dXJuIHRoZSBuYW1lIG9mIGEgcGFkIG1vZGUsIGZvciB1c2UgaW4gZGVidWcgbWVzc2FnZXMgbW9zdGx5LgotICoKLSAqIFJldHVybnM6IHNob3J0IG1uZW1vbmljIGZvciBwYWQgbW9kZSBAbW9kZQotICovCi1jb25zdCBnY2hhciAqCi1nc3RfcGFkX21vZGVfZ2V0X25hbWUgKEdzdFBhZE1vZGUgbW9kZSkKLXsKLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfTk9ORToKLSAgICAgIHJldHVybiAibm9uZSI7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIHJldHVybiAicHVzaCI7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVMTDoKLSAgICAgIHJldHVybiAicHVsbCI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiAidW5rbm93biI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmVfYWN0aXZhdGUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkTW9kZSBuZXdfbW9kZSkKLXsKLSAgc3dpdGNoIChuZXdfbW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX05PTkU6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJzZXR0aW5nIFBBRF9NT0RFIE5PTkUsIHNldCBmbHVzaGluZyIpOwotICAgICAgR1NUX1BBRF9TRVRfRkxVU0hJTkcgKHBhZCk7Ci0gICAgICBwYWQtPkFCSS5hYmkubGFzdF9mbG93cmV0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICBHU1RfUEFEX01PREUgKHBhZCkgPSBuZXdfbW9kZTsKLSAgICAgIC8qIHVubG9jayBibG9ja2VkIHBhZHMgc28gZWxlbWVudCBjYW4gcmVzdW1lIGFuZCBzdG9wICovCi0gICAgICBHU1RfUEFEX0JMT0NLX0JST0FEQ0FTVCAocGFkKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVUxMOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAic2V0dGluZyBwYWQgaW50byAlcyBtb2RlLCB1bnNldCBmbHVzaGluZyIsCi0gICAgICAgICAgZ3N0X3BhZF9tb2RlX2dldF9uYW1lIChuZXdfbW9kZSkpOwotICAgICAgR1NUX1BBRF9VTlNFVF9GTFVTSElORyAocGFkKTsKLSAgICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgIEdTVF9QQURfTU9ERSAocGFkKSA9IG5ld19tb2RlOwotICAgICAgaWYgKEdTVF9QQURfSVNfU0lOSyAocGFkKSkgewotICAgICAgICBHc3RQYWQgKnBlZXI7Ci0gICAgICAgIC8qIG1ha2Ugc3VyZSB0aGUgcGVlciBzcmMgcGFkIHNlbmRzIHVzIGFsbCBldmVudHMgKi8KLSAgICAgICAgaWYgKChwZWVyID0gR1NUX1BBRF9QRUVSIChwYWQpKSkgewotICAgICAgICAgIGdzdF9vYmplY3RfcmVmIChwZWVyKTsKLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlc2NoZWR1bGUgZXZlbnRzIG9uIHBlZXIgJXM6JXMiLAotICAgICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBlZXIpKTsKLQotICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGVlcik7Ci0gICAgICAgICAgc2NoZWR1bGVfZXZlbnRzIChwZWVyLCBOVUxMKTsKLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGVlcik7Ci0KLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcG9zdF9hY3RpdmF0ZSAoR3N0UGFkICogcGFkLCBHc3RQYWRNb2RlIG5ld19tb2RlKQotewotICBzd2l0Y2ggKG5ld19tb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfTk9ORToKLSAgICAgIC8qIGVuc3VyZXMgdGhhdCBzdHJlYW1pbmcgc3RvcHMgKi8KLSAgICAgIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHBhZCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJzdG9wcGVkIHN0cmVhbWluZyIpOwotICAgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICAgICAgcmVtb3ZlX2V2ZW50cyAocGFkKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVUxMOgotICAgICAgLyogTk9QICovCi0gICAgICBicmVhazsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfc2V0X2FjdGl2ZToKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUuCi0gKiBAYWN0aXZlOiB3aGV0aGVyIG9yIG5vdCB0aGUgcGFkIHNob3VsZCBiZSBhY3RpdmUuCi0gKgotICogQWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIHRoZSBnaXZlbiBwYWQuCi0gKiBOb3JtYWxseSBjYWxsZWQgZnJvbSB3aXRoaW4gY29yZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zLgotICoKLSAqIElmIEBhY3RpdmUsIG1ha2VzIHN1cmUgdGhlIHBhZCBpcyBhY3RpdmUuIElmIGl0IGlzIGFscmVhZHkgYWN0aXZlLCBlaXRoZXIgaW4KLSAqIHB1c2ggb3IgcHVsbCBtb2RlLCBqdXN0IHJldHVybi4gT3RoZXJ3aXNlIGRpc3BhdGNoZXMgdG8gdGhlIHBhZCdzIGFjdGl2YXRlCi0gKiBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgYWN0aXZhdGlvbi4KLSAqCi0gKiBJZiBub3QgQGFjdGl2ZSwgY2FsbHMgZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlKCkgd2l0aCB0aGUgcGFkJ3MgY3VycmVudCBtb2RlCi0gKiBhbmQgYSAlRkFMU0UgYXJndW1lbnQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9zZXRfYWN0aXZlIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgR3N0T2JqZWN0ICpwYXJlbnQ7Ci0gIEdzdFBhZE1vZGUgb2xkOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgb2xkID0gR1NUX1BBRF9NT0RFIChwYWQpOwotICBBQ1FVSVJFX1BBUkVOVCAocGFkLCBwYXJlbnQsIG5vX3BhcmVudCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBpZiAob2xkID09IEdTVF9QQURfTU9ERV9OT05FKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhY3RpdmF0aW5nIHBhZCBmcm9tIG5vbmUiKTsKLSAgICAgIHJldCA9IChHU1RfUEFEX0FDVElWQVRFRlVOQyAocGFkKSkgKHBhZCwgcGFyZW50KTsKLSAgICAgIGlmIChyZXQpCi0gICAgICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19PSzsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicGFkIHdhcyBhY3RpdmUgaW4gJXMgbW9kZSIsCi0gICAgICAgICAgZ3N0X3BhZF9tb2RlX2dldF9uYW1lIChvbGQpKTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmIChvbGQgPT0gR1NUX1BBRF9NT0RFX05PTkUpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCB3YXMgaW5hY3RpdmUiKTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImRlYWN0aXZhdGluZyBwYWQgZnJvbSAlcyBtb2RlIiwKLSAgICAgICAgICBnc3RfcGFkX21vZGVfZ2V0X25hbWUgKG9sZCkpOwotICAgICAgcmV0ID0gYWN0aXZhdGVfbW9kZV9pbnRlcm5hbCAocGFkLCBwYXJlbnQsIG9sZCwgRkFMU0UpOwotICAgICAgaWYgKHJldCkKLSAgICAgICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIH0KLSAgfQotCi0gIFJFTEVBU0VfUEFSRU5UIChwYXJlbnQpOwotCi0gIGlmIChHX1VOTElLRUxZICghcmV0KSkKLSAgICBnb3RvIGZhaWxlZDsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotbm9fcGFyZW50OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gcGFyZW50Iik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgaWYgKCFhY3RpdmUpIHsKLSAgICAgIGdfY3JpdGljYWwgKCJGYWlsZWQgdG8gZGVhY3RpdmF0ZSBwYWQgJXM6JXMsIHZlcnkgYmFkIiwKLSAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhZCwgIkZhaWxlZCB0byBhY3RpdmF0ZSBwYWQiKTsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotYWN0aXZhdGVfbW9kZV9pbnRlcm5hbCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFBhZE1vZGUgbW9kZSwKLSAgICBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RQYWRNb2RlIG9sZCwgbmV3OwotICBHc3RQYWREaXJlY3Rpb24gZGlyOwotICBHc3RQYWQgKnBlZXI7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBvbGQgPSBHU1RfUEFEX01PREUgKHBhZCk7Ci0gIGRpciA9IEdTVF9QQURfRElSRUNUSU9OIChwYWQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICBuZXcgPSBhY3RpdmUgPyBtb2RlIDogR1NUX1BBRF9NT0RFX05PTkU7Ci0KLSAgaWYgKG9sZCA9PSBuZXcpCi0gICAgZ290byB3YXNfb2s7Ci0KLSAgaWYgKGFjdGl2ZSAmJiBvbGQgIT0gbW9kZSAmJiBvbGQgIT0gR1NUX1BBRF9NT0RFX05PTkUpIHsKLSAgICAvKiBwYWQgd2FzIGFjdGl2YXRlIGluIHRoZSB3cm9uZyBkaXJlY3Rpb24sIGRlYWN0aXZhdGUgaXQKLSAgICAgKiBhbmQgcmVhY3RpdmF0ZSBpdCBpbiB0aGUgcmVxdWVzdGVkIG1vZGUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkZWFjdGl2YXRpbmcgcGFkIGZyb20gJXMgbW9kZSIsCi0gICAgICAgIGdzdF9wYWRfbW9kZV9nZXRfbmFtZSAob2xkKSk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIWFjdGl2YXRlX21vZGVfaW50ZXJuYWwgKHBhZCwgcGFyZW50LCBvbGQsIEZBTFNFKSkpCi0gICAgICBnb3RvIGRlYWN0aXZhdGVfZmFpbGVkOwotICAgIG9sZCA9IEdTVF9QQURfTU9ERV9OT05FOwotICB9Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVMTDoKLSAgICB7Ci0gICAgICBpZiAoZGlyID09IEdTVF9QQURfU0lOSykgewotICAgICAgICBpZiAoKHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpKSkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImNhbGxpbmcgcGVlciIpOwotICAgICAgICAgIGlmIChHX1VOTElLRUxZICghZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChwZWVyLCBtb2RlLCBhY3RpdmUpKSkKLSAgICAgICAgICAgIGdvdG8gcGVlcl9mYWlsZWQ7Ci0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogdGhlcmUgaXMgbm8gcGVlciwgdGhpcyBpcyBvbmx5IGZhdGFsIHdoZW4gd2UgYWN0aXZhdGUuIFdoZW4gd2UKLSAgICAgICAgICAgKiBkZWFjdGl2YXRlLCB3ZSBtdXN0IGFzc3VtZSB0aGUgYXBwbGljYXRpb24gaGFzIHVubGlua2VkIHRoZSBwZWVyIGFuZAotICAgICAgICAgICAqIHdpbGwgZGVhY3RpdmF0ZSBpdCBldmVudHVhbGx5LiAqLwotICAgICAgICAgIGlmIChhY3RpdmUpCi0gICAgICAgICAgICBnb3RvIG5vdF9saW5rZWQ7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGVhY3RpdmF0aW5nIHVubGlua2VkIHBhZCIpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9HRVRSQU5HRUZVTkMgKHBhZCkgPT0gTlVMTCkpCi0gICAgICAgICAgZ290byBmYWlsdXJlOyAgICAgICAgIC8qIENhbid0IGFjdGl2YXRlIHB1bGwgb24gYSBzcmMgd2l0aG91dCBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHJhbmdlIGZ1bmN0aW9uICovCi0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogTWFyayBwYWQgYXMgbmVlZGluZyByZWNvbmZpZ3VyYXRpb24gKi8KLSAgaWYgKGFjdGl2ZSkKLSAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19ORUVEX1JFQ09ORklHVVJFKTsKLSAgcHJlX2FjdGl2YXRlIChwYWQsIG5ldyk7Ci0KLSAgaWYgKEdTVF9QQURfQUNUSVZBVEVNT0RFRlVOQyAocGFkKSkgewotICAgIGlmIChHX1VOTElLRUxZICghR1NUX1BBRF9BQ1RJVkFURU1PREVGVU5DIChwYWQpIChwYWQsIHBhcmVudCwgbW9kZSwKLSAgICAgICAgICAgICAgICBhY3RpdmUpKSkKLSAgICAgIGdvdG8gZmFpbHVyZTsKLSAgfSBlbHNlIHsKLSAgICAvKiBjYW4gaGFwcGVuIGZvciBzaW5rcyBvZiBwYXNzdGhyb3VnaCBlbGVtZW50cyAqLwotICB9Ci0KLSAgcG9zdF9hY3RpdmF0ZSAocGFkLCBuZXcpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgIiVzIGluICVzIG1vZGUiLAotICAgICAgYWN0aXZlID8gImFjdGl2YXRlZCIgOiAiZGVhY3RpdmF0ZWQiLCBnc3RfcGFkX21vZGVfZ2V0X25hbWUgKG1vZGUpKTsKLQotZXhpdF9zdWNjZXNzOgotICByZXMgPSBUUlVFOwotCi0gIC8qIENsZWFyIHN0aWNreSBmbGFncyBvbiBkZWFjdGl2YXRpb24gKi8KLSAgaWYgKCFhY3RpdmUpIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19ORUVEX1JFQ09ORklHVVJFKTsKLSAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0VPUyk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gIH0KLQotZXhpdDoKLSAgcmV0dXJuIHJlczsKLQotd2FzX29rOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAiYWxyZWFkeSAlcyBpbiAlcyBtb2RlIiwKLSAgICAgICAgYWN0aXZlID8gImFjdGl2YXRlZCIgOiAiZGVhY3RpdmF0ZWQiLCBnc3RfcGFkX21vZGVfZ2V0X25hbWUgKG1vZGUpKTsKLSAgICBnb3RvIGV4aXRfc3VjY2VzczsKLSAgfQotZGVhY3RpdmF0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsCi0gICAgICAgICJmYWlsZWQgdG8gJXMgaW4gc3dpdGNoIHRvICVzIG1vZGUgZnJvbSAlcyBtb2RlIiwKLSAgICAgICAgKGFjdGl2ZSA/ICJhY3RpdmF0ZSIgOiAiZGVhY3RpdmF0ZSIpLCBnc3RfcGFkX21vZGVfZ2V0X25hbWUgKG1vZGUpLAotICAgICAgICBnc3RfcGFkX21vZGVfZ2V0X25hbWUgKG9sZCkpOwotICAgIGdvdG8gZXhpdDsKLSAgfQotcGVlcl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBlZXIpOwotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwKLSAgICAgICAgImFjdGl2YXRlX21vZGUgb24gcGVlciAoJXM6JXMpIGZhaWxlZCIsIEdTVF9ERUJVR19QQURfTkFNRSAocGVlcikpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwZWVyKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLW5vdF9saW5rZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImNhbid0IGFjdGl2YXRlIHVubGlua2VkIHNpbmsgIgotICAgICAgICAicGFkIGluIHB1bGwgbW9kZSIpOwotICAgIGdvdG8gZXhpdDsKLSAgfQotZmFpbHVyZToKLSAgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImZhaWxlZCB0byAlcyBpbiAlcyBtb2RlIiwKLSAgICAgICAgYWN0aXZlID8gImFjdGl2YXRlIiA6ICJkZWFjdGl2YXRlIiwgZ3N0X3BhZF9tb2RlX2dldF9uYW1lIChtb2RlKSk7Ci0gICAgR1NUX1BBRF9TRVRfRkxVU0hJTkcgKHBhZCk7Ci0gICAgR1NUX1BBRF9NT0RFIChwYWQpID0gb2xkOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIGdvdG8gZXhpdDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfYWN0aXZhdGVfbW9kZToKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUuCi0gKiBAbW9kZTogdGhlIHJlcXVlc3RlZCBhY3RpdmF0aW9uIG1vZGUKLSAqIEBhY3RpdmU6IHdoZXRoZXIgb3Igbm90IHRoZSBwYWQgc2hvdWxkIGJlIGFjdGl2ZS4KLSAqCi0gKiBBY3RpdmF0ZXMgb3IgZGVhY3RpdmF0ZXMgdGhlIGdpdmVuIHBhZCBpbiBAbW9kZSB2aWEgZGlzcGF0Y2hpbmcgdG8gdGhlCi0gKiBwYWQncyBhY3RpdmF0ZW1vZGVmdW5jLiBGb3IgdXNlIGZyb20gd2l0aGluIHBhZCBhY3RpdmF0aW9uIGZ1bmN0aW9ucyBvbmx5LgotICoKLSAqIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcywgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCBpdC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIEFDUVVJUkVfUEFSRU5UIChwYWQsIHBhcmVudCwgbm9fcGFyZW50KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmVzID0gYWN0aXZhdGVfbW9kZV9pbnRlcm5hbCAocGFkLCBwYXJlbnQsIG1vZGUsIGFjdGl2ZSk7Ci0KLSAgUkVMRUFTRV9QQVJFTlQgKHBhcmVudCk7Ci0KLSAgcmV0dXJuIHJlczsKLQotbm9fcGFyZW50OgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWQsICJubyBwYXJlbnQiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfcGFkX2lzX2FjdGl2ZToKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHF1ZXJ5Ci0gKgotICogUXVlcnkgaWYgYSBwYWQgaXMgYWN0aXZlCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhZCBpcyBhY3RpdmUuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfaXNfYWN0aXZlIChHc3RQYWQgKiBwYWQpCi17Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICByZXN1bHQgPSBHU1RfUEFEX0lTX0FDVElWRSAocGFkKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfaG9vayAoR3N0UGFkICogcGFkLCBHSG9vayAqIGhvb2spCi17Ci0gIEdzdFBhZFByb2JlVHlwZSB0eXBlOwotCi0gIGlmICghR19IT09LX0lTX1ZBTElEIChob29rKSkKLSAgICByZXR1cm47Ci0KLSAgdHlwZSA9IChob29rLT5mbGFncykgPj4gR19IT09LX0ZMQUdfVVNFUl9TSElGVDsKLQotICBpZiAodHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS0lORykgewotICAgIC8qIHVuYmxvY2sgd2hlbiB3ZSByZW1vdmUgdGhlIGxhc3QgYmxvY2tpbmcgcHJvYmUgKi8KLSAgICBwYWQtPm51bV9ibG9ja2VkLS07Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicmVtb3ZlIGJsb2NraW5nIHByb2JlLCBub3cgJWQgbGVmdCIsCi0gICAgICAgIHBhZC0+bnVtX2Jsb2NrZWQpOwotCi0gICAgLyogTWlnaHQgaGF2ZSBuZXcgcHJvYmVzIG5vdyB0aGF0IHdhbnQgdG8gYmUgY2FsbGVkICovCi0gICAgR1NUX1BBRF9CTE9DS19CUk9BRENBU1QgKHBhZCk7Ci0KLSAgICBpZiAocGFkLT5udW1fYmxvY2tlZCA9PSAwKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJsYXN0IGJsb2NraW5nIHByb2JlIHJlbW92ZWQsIHVuYmxvY2tpbmciKTsKLSAgICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX0ZMQUdfQkxPQ0tFRCk7Ci0gICAgfQotICB9Ci0gIGdfaG9va19kZXN0cm95X2xpbmsgKCZwYWQtPnByb2JlcywgaG9vayk7Ci0gIHBhZC0+bnVtX3Byb2Jlcy0tOwotfQotCi0vKioKLSAqIGdzdF9wYWRfYWRkX3Byb2JlOgotICogQHBhZDogdGhlICNHc3RQYWQgdG8gYWRkIHRoZSBwcm9iZSB0bwotICogQG1hc2s6IHRoZSBwcm9iZSBtYXNrCi0gKiBAY2FsbGJhY2s6ICNHc3RQYWRQcm9iZUNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBub3RpZmljYXRpb25zIG9mCi0gKiAgICAgICAgICAgdGhlIHBhZCBzdGF0ZQotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBjYWxsYmFjawotICogQGRlc3Ryb3lfZGF0YTogI0dEZXN0cm95Tm90aWZ5IGZvciB1c2VyX2RhdGEKLSAqCi0gKiBCZSBub3RpZmllZCBvZiBkaWZmZXJlbnQgc3RhdGVzIG9mIHBhZHMuIFRoZSBwcm92aWRlZCBjYWxsYmFjayBpcyBjYWxsZWQgZm9yCi0gKiBldmVyeSBzdGF0ZSB0aGF0IG1hdGNoZXMgQG1hc2suCi0gKgotICogUHJvYmVzIGFyZSBjYWxsZWQgaW4gZ3JvdXBzOiBGaXJzdCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0sgcHJvYmVzIGFyZQotICogY2FsbGVkLCB0aGVuIG90aGVycywgdGhlbiBmaW5hbGx5IEdTVF9QQURfUFJPQkVfVFlQRV9JRExFLiBUaGUgb25seQotICogZXhjZXB0aW9uIGhlcmUgYXJlIEdTVF9QQURfUFJPQkVfVFlQRV9JRExFIHByb2JlcyB0aGF0IGFyZSBjYWxsZWQKLSAqIGltbWVkaWF0ZWx5IGlmIHRoZSBwYWQgaXMgYWxyZWFkeSBpZGxlIHdoaWxlIGNhbGxpbmcgZ3N0X3BhZF9hZGRfcHJvYmUoKS4KLSAqIEluIGVhY2ggb2YgdGhlIGdyb3VwcywgcHJvYmVzIGFyZSBjYWxsZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZQotICogYWRkZWQuCi0gKgotICogUmV0dXJuczogYW4gaWQgb3IgMCBpZiBubyBwcm9iZSBpcyBwZW5kaW5nLiBUaGUgaWQgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZQotICogcHJvYmUgd2l0aCBnc3RfcGFkX3JlbW92ZV9wcm9iZSgpLiBXaGVuIHVzaW5nIEdTVF9QQURfUFJPQkVfVFlQRV9JRExFIGl0IGNhbgotICogaGFwcGVuIHRoYXQgdGhlIHByb2JlIGNhbiBiZSBydW4gaW1tZWRpYXRlbHkgYW5kIGlmIHRoZSBwcm9iZSByZXR1cm5zCi0gKiBHU1RfUEFEX1BST0JFX1JFTU9WRSB0aGlzIGZ1bmN0aW9ucyByZXR1cm5zIDAuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ3Vsb25nCi1nc3RfcGFkX2FkZF9wcm9iZSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZVR5cGUgbWFzaywKLSAgICBHc3RQYWRQcm9iZUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9kYXRhKQotewotICBHSG9vayAqaG9vazsKLSAgZ3Vsb25nIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtYXNrICE9IDAsIDApOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLQotICAvKiBtYWtlIGEgbmV3IHByb2JlICovCi0gIGhvb2sgPSBnX2hvb2tfYWxsb2MgKCZwYWQtPnByb2Jlcyk7Ci0KLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwgImFkZGluZyBwcm9iZSBmb3IgbWFzayAweCUwOHgiLAotICAgICAgbWFzayk7Ci0KLSAgLyogd2hlbiBubyBjb250cmFpbnRzIGFyZSBnaXZlbiBmb3IgdGhlIHR5cGVzLCBhc3N1bWUgYWxsIHR5cGVzIGFyZQotICAgKiBhY2NlcHRhYmxlICovCi0gIGlmICgobWFzayAmIF9QQURfUFJPQkVfVFlQRV9BTExfQk9USF9BTkRfRkxVU0gpID09IDApCi0gICAgbWFzayB8PSBHU1RfUEFEX1BST0JFX1RZUEVfQUxMX0JPVEg7Ci0gIGlmICgobWFzayAmIEdTVF9QQURfUFJPQkVfVFlQRV9TQ0hFRFVMSU5HKSA9PSAwKQotICAgIG1hc2sgfD0gR1NUX1BBRF9QUk9CRV9UWVBFX1NDSEVEVUxJTkc7Ci0KLSAgLyogc3RvcmUgb3VyIGZsYWdzIGFuZCBvdGhlciBmaWVsZHMgKi8KLSAgaG9vay0+ZmxhZ3MgfD0gKG1hc2sgPDwgR19IT09LX0ZMQUdfVVNFUl9TSElGVCk7Ci0gIGhvb2stPmZ1bmMgPSBjYWxsYmFjazsKLSAgaG9vay0+ZGF0YSA9IHVzZXJfZGF0YTsKLSAgaG9vay0+ZGVzdHJveSA9IGRlc3Ryb3lfZGF0YTsKLSAgUFJPQkVfQ09PS0lFIChob29rKSA9IChwYWQtPnByaXYtPnByb2JlX2Nvb2tpZSAtIDEpOwotCi0gIC8qIGFkZCB0aGUgcHJvYmUgKi8KLSAgZ19ob29rX2FwcGVuZCAoJnBhZC0+cHJvYmVzLCBob29rKTsKLSAgcGFkLT5udW1fcHJvYmVzKys7Ci0gIC8qIGluY3JlbWVuZW50IGNvb2tpZSBzbyB0aGF0IHRoZSBuZXcgaG9vayBnZXQncyBjYWxsZWQgKi8KLSAgcGFkLT5wcml2LT5wcm9iZV9saXN0X2Nvb2tpZSsrOwotCi0gIC8qIGdldCB0aGUgaWQgb2YgdGhlIGhvb2ssIHdlIHJldHVybiB0aGlzIGFuZCBpdCBjYW4gYmUgdXNlZCB0byByZW1vdmUgdGhlCi0gICAqIHByb2JlIGxhdGVyICovCi0gIHJlcyA9IGhvb2stPmhvb2tfaWQ7Ci0KLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwgImdvdCBwcm9iZSBpZCAlbHUiLCByZXMpOwotCi0gIGlmIChtYXNrICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLSU5HKSB7Ci0gICAgLyogd2UgaGF2ZSBhIGJsb2NrIHByb2JlICovCi0gICAgcGFkLT5udW1fYmxvY2tlZCsrOwotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0JMT0NLRUQpOwotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsICJhZGRlZCBibG9ja2luZyBwcm9iZSwgIgotICAgICAgICAibm93ICVkIGJsb2NraW5nIHByb2JlcyIsIHBhZC0+bnVtX2Jsb2NrZWQpOwotCi0gICAgLyogTWlnaHQgaGF2ZSBuZXcgcHJvYmVzIG5vdyB0aGF0IHdhbnQgdG8gYmUgY2FsbGVkICovCi0gICAgR1NUX1BBRF9CTE9DS19CUk9BRENBU1QgKHBhZCk7Ci0gIH0KLQotICAvKiBjYWxsIHRoZSBjYWxsYmFjayBpZiB3ZSBuZWVkIHRvIGJlIGNhbGxlZCBmb3IgaWRsZSBjYWxsYmFja3MgKi8KLSAgaWYgKChtYXNrICYgR1NUX1BBRF9QUk9CRV9UWVBFX0lETEUpICYmIChjYWxsYmFjayAhPSBOVUxMKSkgewotICAgIGlmIChwYWQtPnByaXYtPnVzaW5nID4gMCkgewotICAgICAgLyogdGhlIHBhZCBpcyBpbiB1c2UsIHdlIGNhbid0IHNpZ25hbCB0aGUgaWRsZSBjYWxsYmFjayB5ZXQuIFNpbmNlIHdlIHNldCB0aGUKLSAgICAgICAqIGZsYWcgYWJvdmUsIHRoZSBsYXN0IHRocmVhZCB0byBsZWF2ZSB0aGUgcHVzaCB3aWxsIGRvIHRoZSBjYWxsYmFjay4gTmV3Ci0gICAgICAgKiB0aHJlYWRzIGdvaW5nIGludG8gdGhlIHB1c2ggd2lsbCBibG9jay4gKi8KLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAgICAgInBhZCBpcyBpbiB1c2UsIGRlbGF5IGlkbGUgY2FsbGJhY2siKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHc3RQYWRQcm9iZUluZm8gaW5mbyA9IHsgR1NUX1BBRF9QUk9CRV9UWVBFX0lETEUsIHJlcywgfTsKLSAgICAgIEdzdFBhZFByb2JlUmV0dXJuIHJldDsKLQotICAgICAgLyogS2VlcCBhbm90aGVyIHJlZiwgdGhlIGNhbGxiYWNrIGNvdWxkIGRlc3Ryb3kgdGhlIHBhZCAqLwotICAgICAgZ3N0X29iamVjdF9yZWYgKHBhZCk7Ci0gICAgICBwYWQtPnByaXYtPmlkbGVfcnVubmluZysrOwotCi0gICAgICAvKiB0aGUgcGFkIGlzIGlkbGUgbm93LCB3ZSBjYW4gc2lnbmFsIHRoZSBpZGxlIGNhbGxiYWNrIG5vdyAqLwotICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgICAicGFkIGlzIGlkbGUsIHRyaWdnZXIgaWRsZSBjYWxsYmFjayIpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgICAgIHJldCA9IGNhbGxiYWNrIChwYWQsICZpbmZvLCB1c2VyX2RhdGEpOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgICBzd2l0Y2ggKHJldCkgewotICAgICAgICBjYXNlIEdTVF9QQURfUFJPQkVfUkVNT1ZFOgotICAgICAgICAgIC8qIHJlbW92ZSB0aGUgcHJvYmUgKi8KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhc2tlZCB0byByZW1vdmUgaG9vayIpOwotICAgICAgICAgIGNsZWFudXBfaG9vayAocGFkLCBob29rKTsKLSAgICAgICAgICByZXMgPSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9QQURfUFJPQkVfRFJPUDoKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhc2tlZCB0byBkcm9wIGl0ZW0iKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfUEFEX1BST0JFX1BBU1M6Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYXNrZWQgdG8gcGFzcyBpdGVtIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1BBRF9QUk9CRV9PSzoKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwcm9iZSByZXR1cm5lZCBPSyIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9QQURfUFJPQkVfSEFORExFRDoKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwcm9iZSBoYW5kbGVkIHRoZSBkYXRhIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicHJvYmUgcmV0dXJuZWQgJWQiLCByZXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgcGFkLT5wcml2LT5pZGxlX3J1bm5pbmctLTsKLSAgICAgIGlmIChwYWQtPnByaXYtPmlkbGVfcnVubmluZyA9PSAwKSB7Ci0gICAgICAgIEdTVF9QQURfQkxPQ0tfQlJPQURDQVNUIChwYWQpOwotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9yZW1vdmVfcHJvYmU6Ci0gKiBAcGFkOiB0aGUgI0dzdFBhZCB3aXRoIHRoZSBwcm9iZQotICogQGlkOiB0aGUgcHJvYmUgaWQgdG8gcmVtb3ZlCi0gKgotICogUmVtb3ZlIHRoZSBwcm9iZSB3aXRoIEBpZCBmcm9tIEBwYWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKEdzdFBhZCAqIHBhZCwgZ3Vsb25nIGlkKQotewotICBHSG9vayAqaG9vazsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0KLSAgaG9vayA9IGdfaG9va19nZXQgKCZwYWQtPnByb2JlcywgaWQpOwotICBpZiAoaG9vayA9PSBOVUxMKQotICAgIGdvdG8gbm90X2ZvdW5kOwotCi0gIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsICJyZW1vdmluZyBob29rICVsZCIsCi0gICAgICBob29rLT5ob29rX2lkKTsKLSAgY2xlYW51cF9ob29rIChwYWQsIGhvb2spOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm47Ci0KLW5vdF9mb3VuZDoKLSAgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIGdfd2FybmluZyAoIiVzOiBwYWQgYCVwJyBoYXMgbm8gcHJvYmUgd2l0aCBpZCBgJWx1JyIsIEdfU1RSTE9DLCBwYWQsIGlkKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfcGFkX2lzX2Jsb2NrZWQ6Ci0gKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBxdWVyeQotICoKLSAqIENoZWNrcyBpZiB0aGUgcGFkIGlzIGJsb2NrZWQgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlCi0gKiBsYXN0IHJlcXVlc3RlZCBzdGF0ZSBvZiB0aGUgcGFkLiBJdCBpcyBub3QgY2VydGFpbiB0aGF0IHRoZSBwYWQKLSAqIGlzIGFjdHVhbGx5IGJsb2NraW5nIGF0IHRoaXMgcG9pbnQgKHNlZSBnc3RfcGFkX2lzX2Jsb2NraW5nKCkpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWQgaXMgYmxvY2tlZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9pc19ibG9ja2VkIChHc3RQYWQgKiBwYWQpCi17Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCByZXN1bHQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgcmVzdWx0ID0gR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfQkxPQ0tFRCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9pc19ibG9ja2luZzoKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHF1ZXJ5Ci0gKgotICogQ2hlY2tzIGlmIHRoZSBwYWQgaXMgYmxvY2tpbmcgb3Igbm90LiBUaGlzIGlzIGEgZ3VhcmFudGVlZCBzdGF0ZQotICogb2Ygd2hldGhlciB0aGUgcGFkIGlzIGFjdHVhbGx5IGJsb2NraW5nIG9uIGEgI0dzdEJ1ZmZlciBvciBhICNHc3RFdmVudC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIGlzIGJsb2NraW5nLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX2lzX2Jsb2NraW5nIChHc3RQYWQgKiBwYWQpCi17Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCByZXN1bHQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgLyogdGhlIGJsb2NraW5nIGZsYWcgaXMgb25seSB2YWxpZCBpZiB0aGUgcGFkIGlzIG5vdCBmbHVzaGluZyAqLwotICByZXN1bHQgPSBHU1RfUEFEX0lTX0JMT0NLSU5HIChwYWQpICYmICFHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9wYWRfbmVlZHNfcmVjb25maWd1cmU6Ci0gKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBjaGVjawotICoKLSAqIENoZWNrIHRoZSAjR1NUX1BBRF9GTEFHX05FRURfUkVDT05GSUdVUkUgZmxhZyBvbiBAcGFkIGFuZCByZXR1cm4gJVRSVUUKLSAqIGlmIHRoZSBmbGFnIHdhcyBzZXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaXMgdGhlIEdTVF9QQURfRkxBR19ORUVEX1JFQ09ORklHVVJFIGZsYWcgaXMgc2V0IG9uIEBwYWQuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX25lZWRzX3JlY29uZmlndXJlIChHc3RQYWQgKiBwYWQpCi17Ci0gIGdib29sZWFuIHJlY29uZmlndXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICByZWNvbmZpZ3VyZSA9IEdTVF9QQURfTkVFRFNfUkVDT05GSUdVUkUgKHBhZCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBlZWtpbmcgUkVDT05GSUdVUkUgZmxhZyAlZCIsIHJlY29uZmlndXJlKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIHJlY29uZmlndXJlOwotfQotCi0vKioKLSAqIGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmU6Ci0gKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBjaGVjawotICoKLSAqIENoZWNrIGFuZCBjbGVhciB0aGUgI0dTVF9QQURfRkxBR19ORUVEX1JFQ09ORklHVVJFIGZsYWcgb24gQHBhZCBhbmQgcmV0dXJuICVUUlVFCi0gKiBpZiB0aGUgZmxhZyB3YXMgc2V0LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlzIHRoZSBHU1RfUEFEX0ZMQUdfTkVFRF9SRUNPTkZJR1VSRSBmbGFnIHdhcyBzZXQgb24gQHBhZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKEdzdFBhZCAqIHBhZCkKLXsKLSAgZ2Jvb2xlYW4gcmVjb25maWd1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIHJlY29uZmlndXJlID0gR1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRSAocGFkKTsKLSAgaWYgKHJlY29uZmlndXJlKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicmVtb3ZlIFJFQ09ORklHVVJFIGZsYWciKTsKLSAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX05FRURfUkVDT05GSUdVUkUpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIHJldHVybiByZWNvbmZpZ3VyZTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX21hcmtfcmVjb25maWd1cmU6Ci0gKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBtYXJrCi0gKgotICogTWFyayBhIHBhZCBmb3IgbmVlZGluZyByZWNvbmZpZ3VyYXRpb24uIFRoZSBuZXh0IGNhbGwgdG8KLSAqIGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUoKSB3aWxsIHJldHVybiAlVFJVRSBhZnRlciB0aGlzIGNhbGwuCi0gKi8KLXZvaWQKLWdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZSAoR3N0UGFkICogcGFkKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX05FRURfUkVDT05GSUdVUkUpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbjoKLSAqIEBwOiBhICNHc3RQYWQuCi0gKiBAZjogdGhlICNHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIHRvIHNldC4KLSAqCi0gKiBDYWxscyBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxsKCkgd2l0aCAlTlVMTCBmb3IgdGhlIHVzZXJfZGF0YSBhbmQKLSAqIG5vdGlmeS4KLSAqLwotLyoqCi0gKiBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxsOgotICogQHBhZDogYSAjR3N0UGFkLgotICogQGFjdGl2YXRlOiB0aGUgI0dzdFBhZEFjdGl2YXRlRnVuY3Rpb24gdG8gc2V0LgotICogQHVzZXJfZGF0YTogdXNlcl9kYXRhIHBhc3NlZCB0byBAbm90aWZ5Ci0gKiBAbm90aWZ5OiBub3RpZnkgY2FsbGVkIHdoZW4gQGFjdGl2YXRlIHdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS4KLSAqCi0gKiBTZXRzIHRoZSBnaXZlbiBhY3RpdmF0ZSBmdW5jdGlvbiBmb3IgQHBhZC4gVGhlIGFjdGl2YXRlIGZ1bmN0aW9uIHdpbGwKLSAqIGRpc3BhdGNoIHRvIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSgpIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBhY3RpdmF0aW9uLgotICogT25seSBtYWtlcyBzZW5zZSB0byBzZXQgb24gc2luayBwYWRzLgotICoKLSAqIENhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3VyIHNpbmsgcGFkIGNhbiBzdGFydCBhIHB1bGwtYmFzZWQgdGFzay4KLSAqLwotdm9pZAotZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb25fZnVsbCAoR3N0UGFkICogcGFkLAotICAgIEdzdFBhZEFjdGl2YXRlRnVuY3Rpb24gYWN0aXZhdGUsIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLQotICBpZiAocGFkLT5hY3RpdmF0ZW5vdGlmeSkKLSAgICBwYWQtPmFjdGl2YXRlbm90aWZ5IChwYWQtPmFjdGl2YXRlZGF0YSk7Ci0gIEdTVF9QQURfQUNUSVZBVEVGVU5DIChwYWQpID0gYWN0aXZhdGU7Ci0gIHBhZC0+YWN0aXZhdGVkYXRhID0gdXNlcl9kYXRhOwotICBwYWQtPmFjdGl2YXRlbm90aWZ5ID0gbm90aWZ5OwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImFjdGl2YXRlZnVuYyBzZXQgdG8gJXMiLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoYWN0aXZhdGUpKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb246Ci0gKiBAcDogYSAjR3N0UGFkLgotICogQGY6IHRoZSAjR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gdG8gc2V0LgotICoKLSAqIENhbGxzIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbl9mdWxsKCkgd2l0aCAlTlVMTCBmb3IgdGhlIHVzZXJfZGF0YSBhbmQKLSAqIG5vdGlmeS4KLSAqLwotLyoqCi0gKiBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb25fZnVsbDoKLSAqIEBwYWQ6IGEgI0dzdFBhZC4KLSAqIEBhY3RpdmF0ZW1vZGU6IHRoZSAjR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gdG8gc2V0LgotICogQHVzZXJfZGF0YTogdXNlcl9kYXRhIHBhc3NlZCB0byBAbm90aWZ5Ci0gKiBAbm90aWZ5OiBub3RpZnkgY2FsbGVkIHdoZW4gQGFjdGl2YXRlbW9kZSB3aWxsIG5vdCBiZSB1c2VkIGFueW1vcmUuCi0gKgotICogU2V0cyB0aGUgZ2l2ZW4gYWN0aXZhdGVfbW9kZSBmdW5jdGlvbiBmb3IgdGhlIHBhZC4gQW4gYWN0aXZhdGVfbW9kZSBmdW5jdGlvbgotICogcHJlcGFyZXMgdGhlIGVsZW1lbnQgZm9yIGRhdGEgcGFzc2luZy4KLSAqLwotdm9pZAotZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uX2Z1bGwgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiBhY3RpdmF0ZW1vZGUsIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCkpOwotCi0gIGlmIChwYWQtPmFjdGl2YXRlbW9kZW5vdGlmeSkKLSAgICBwYWQtPmFjdGl2YXRlbW9kZW5vdGlmeSAocGFkLT5hY3RpdmF0ZW1vZGVkYXRhKTsKLSAgR1NUX1BBRF9BQ1RJVkFURU1PREVGVU5DIChwYWQpID0gYWN0aXZhdGVtb2RlOwotICBwYWQtPmFjdGl2YXRlbW9kZWRhdGEgPSB1c2VyX2RhdGE7Ci0gIHBhZC0+YWN0aXZhdGVtb2Rlbm90aWZ5ID0gbm90aWZ5OwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImFjdGl2YXRlbW9kZWZ1bmMgc2V0IHRvICVzIiwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGFjdGl2YXRlbW9kZSkpOwotfQotCi0vKioKLSAqIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uOgotICogQHA6IGEgc2luayAjR3N0UGFkLgotICogQGY6IHRoZSAjR3N0UGFkQ2hhaW5GdW5jdGlvbiB0byBzZXQuCi0gKgotICogQ2FsbHMgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb25fZnVsbCgpIHdpdGggJU5VTEwgZm9yIHRoZSB1c2VyX2RhdGEgYW5kCi0gKiBub3RpZnkuCi0gKi8KLS8qKgotICogZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb25fZnVsbDoKLSAqIEBwYWQ6IGEgc2luayAjR3N0UGFkLgotICogQGNoYWluOiB0aGUgI0dzdFBhZENoYWluRnVuY3Rpb24gdG8gc2V0LgotICogQHVzZXJfZGF0YTogdXNlcl9kYXRhIHBhc3NlZCB0byBAbm90aWZ5Ci0gKiBAbm90aWZ5OiBub3RpZnkgY2FsbGVkIHdoZW4gQGNoYWluIHdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS4KLSAqCi0gKiBTZXRzIHRoZSBnaXZlbiBjaGFpbiBmdW5jdGlvbiBmb3IgdGhlIHBhZC4gVGhlIGNoYWluIGZ1bmN0aW9uIGlzIGNhbGxlZCB0bwotICogcHJvY2VzcyBhICNHc3RCdWZmZXIgaW5wdXQgYnVmZmVyLiBzZWUgI0dzdFBhZENoYWluRnVuY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotdm9pZAotZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb25fZnVsbCAoR3N0UGFkICogcGFkLCBHc3RQYWRDaGFpbkZ1bmN0aW9uIGNoYWluLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1BBRF9JU19TSU5LIChwYWQpKTsKLQotICBpZiAocGFkLT5jaGFpbm5vdGlmeSkKLSAgICBwYWQtPmNoYWlubm90aWZ5IChwYWQtPmNoYWluZGF0YSk7Ci0gIEdTVF9QQURfQ0hBSU5GVU5DIChwYWQpID0gY2hhaW47Ci0gIHBhZC0+Y2hhaW5kYXRhID0gdXNlcl9kYXRhOwotICBwYWQtPmNoYWlubm90aWZ5ID0gbm90aWZ5OwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImNoYWluZnVuYyBzZXQgdG8gJXMiLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoY2hhaW4pKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uOgotICogQHA6IGEgc2luayAjR3N0UGFkLgotICogQGY6IHRoZSAjR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gdG8gc2V0LgotICoKLSAqIENhbGxzIGdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb25fZnVsbCgpIHdpdGggJU5VTEwgZm9yIHRoZSB1c2VyX2RhdGEgYW5kCi0gKiBub3RpZnkuCi0gKi8KLS8qKgotICogZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxsOgotICogQHBhZDogYSBzaW5rICNHc3RQYWQuCi0gKiBAY2hhaW5saXN0OiB0aGUgI0dzdFBhZENoYWluTGlzdEZ1bmN0aW9uIHRvIHNldC4KLSAqIEB1c2VyX2RhdGE6IHVzZXJfZGF0YSBwYXNzZWQgdG8gQG5vdGlmeQotICogQG5vdGlmeTogbm90aWZ5IGNhbGxlZCB3aGVuIEBjaGFpbmxpc3Qgd2lsbCBub3QgYmUgdXNlZCBhbnltb3JlLgotICoKLSAqIFNldHMgdGhlIGdpdmVuIGNoYWluIGxpc3QgZnVuY3Rpb24gZm9yIHRoZSBwYWQuIFRoZSBjaGFpbmxpc3QgZnVuY3Rpb24gaXMKLSAqIGNhbGxlZCB0byBwcm9jZXNzIGEgI0dzdEJ1ZmZlckxpc3QgaW5wdXQgYnVmZmVyIGxpc3QuIFNlZQotICogI0dzdFBhZENoYWluTGlzdEZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLXZvaWQKLWdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb25fZnVsbCAoR3N0UGFkICogcGFkLAotICAgIEdzdFBhZENoYWluTGlzdEZ1bmN0aW9uIGNoYWlubGlzdCwgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9QQURfSVNfU0lOSyAocGFkKSk7Ci0KLSAgaWYgKHBhZC0+Y2hhaW5saXN0bm90aWZ5KQotICAgIHBhZC0+Y2hhaW5saXN0bm90aWZ5IChwYWQtPmNoYWlubGlzdGRhdGEpOwotICBHU1RfUEFEX0NIQUlOTElTVEZVTkMgKHBhZCkgPSBjaGFpbmxpc3Q7Ci0gIHBhZC0+Y2hhaW5saXN0ZGF0YSA9IHVzZXJfZGF0YTsKLSAgcGFkLT5jaGFpbmxpc3Rub3RpZnkgPSBub3RpZnk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAiY2hhaW5saXN0ZnVuYyBzZXQgdG8gJXMiLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoY2hhaW5saXN0KSk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb246Ci0gKiBAcDogYSBzb3VyY2UgI0dzdFBhZC4KLSAqIEBmOiB0aGUgI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24gdG8gc2V0LgotICoKLSAqIENhbGxzIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uX2Z1bGwoKSB3aXRoICVOVUxMIGZvciB0aGUgdXNlcl9kYXRhIGFuZAotICogbm90aWZ5LgotICovCi0vKioKLSAqIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uX2Z1bGw6Ci0gKiBAcGFkOiBhIHNvdXJjZSAjR3N0UGFkLgotICogQGdldDogdGhlICNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIHRvIHNldC4KLSAqIEB1c2VyX2RhdGE6IHVzZXJfZGF0YSBwYXNzZWQgdG8gQG5vdGlmeQotICogQG5vdGlmeTogbm90aWZ5IGNhbGxlZCB3aGVuIEBnZXQgd2lsbCBub3QgYmUgdXNlZCBhbnltb3JlLgotICoKLSAqIFNldHMgdGhlIGdpdmVuIGdldHJhbmdlIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBUaGUgZ2V0cmFuZ2UgZnVuY3Rpb24gaXMKLSAqIGNhbGxlZCB0byBwcm9kdWNlIGEgbmV3ICNHc3RCdWZmZXIgdG8gc3RhcnQgdGhlIHByb2Nlc3NpbmcgcGlwZWxpbmUuIHNlZQotICogI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGdldHJhbmdlIGZ1bmN0aW9uLgotICovCi12b2lkCi1nc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbl9mdWxsIChHc3RQYWQgKiBwYWQsIEdzdFBhZEdldFJhbmdlRnVuY3Rpb24gZ2V0LAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1BBRF9JU19TUkMgKHBhZCkpOwotCi0gIGlmIChwYWQtPmdldHJhbmdlbm90aWZ5KQotICAgIHBhZC0+Z2V0cmFuZ2Vub3RpZnkgKHBhZC0+Z2V0cmFuZ2VkYXRhKTsKLSAgR1NUX1BBRF9HRVRSQU5HRUZVTkMgKHBhZCkgPSBnZXQ7Ci0gIHBhZC0+Z2V0cmFuZ2VkYXRhID0gdXNlcl9kYXRhOwotICBwYWQtPmdldHJhbmdlbm90aWZ5ID0gbm90aWZ5OwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImdldHJhbmdlZnVuYyBzZXQgdG8gJXMiLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoZ2V0KSk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb246Ci0gKiBAcDogYSAjR3N0UGFkIG9mIGVpdGhlciBkaXJlY3Rpb24uCi0gKiBAZjogdGhlICNHc3RQYWRFdmVudEZ1bmN0aW9uIHRvIHNldC4KLSAqCi0gKiBDYWxscyBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbl9mdWxsKCkgd2l0aCAlTlVMTCBmb3IgdGhlIHVzZXJfZGF0YSBhbmQKLSAqIG5vdGlmeS4KLSAqLwotLyoqCi0gKiBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbl9mdWxsOgotICogQHBhZDogYSAjR3N0UGFkIG9mIGVpdGhlciBkaXJlY3Rpb24uCi0gKiBAZXZlbnQ6IHRoZSAjR3N0UGFkRXZlbnRGdW5jdGlvbiB0byBzZXQuCi0gKiBAdXNlcl9kYXRhOiB1c2VyX2RhdGEgcGFzc2VkIHRvIEBub3RpZnkKLSAqIEBub3RpZnk6IG5vdGlmeSBjYWxsZWQgd2hlbiBAZXZlbnQgd2lsbCBub3QgYmUgdXNlZCBhbnltb3JlLgotICoKLSAqIFNldHMgdGhlIGdpdmVuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBwYWQuCi0gKi8KLXZvaWQKLWdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uX2Z1bGwgKEdzdFBhZCAqIHBhZCwgR3N0UGFkRXZlbnRGdW5jdGlvbiBldmVudCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7Ci0KLSAgaWYgKHBhZC0+ZXZlbnRub3RpZnkpCi0gICAgcGFkLT5ldmVudG5vdGlmeSAocGFkLT5ldmVudGRhdGEpOwotICBHU1RfUEFEX0VWRU5URlVOQyAocGFkKSA9IGV2ZW50OwotICBwYWQtPmV2ZW50ZGF0YSA9IHVzZXJfZGF0YTsKLSAgcGFkLT5ldmVudG5vdGlmeSA9IG5vdGlmeTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsICJldmVudGZ1bmMgZm9yIHNldCB0byAlcyIsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChldmVudCkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWV2ZW50X3dyYXAgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICByZXQgPSBHU1RfUEFEX0VWRU5URlVMTEZVTkMgKHBhZCkgKHBhZCwgb2JqZWN0LCBldmVudCk7Ci0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIFRSVUU7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uOgotICogQHA6IGEgI0dzdFBhZCBvZiBlaXRoZXIgZGlyZWN0aW9uLgotICogQGY6IHRoZSAjR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb24gdG8gc2V0LgotICoKLSAqIENhbGxzIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb25fZnVsbCgpIHdpdGggJU5VTEwgZm9yIHRoZSB1c2VyX2RhdGEgYW5kCi0gKiBub3RpZnkuCi0gKi8KLS8qKgotICogZ3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbl9mdWxsOgotICogQHBhZDogYSAjR3N0UGFkIG9mIGVpdGhlciBkaXJlY3Rpb24uCi0gKiBAZXZlbnQ6IHRoZSAjR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb24gdG8gc2V0LgotICogQHVzZXJfZGF0YTogdXNlcl9kYXRhIHBhc3NlZCB0byBAbm90aWZ5Ci0gKiBAbm90aWZ5OiBub3RpZnkgY2FsbGVkIHdoZW4gQGV2ZW50IHdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS4KLSAqCi0gKiBTZXRzIHRoZSBnaXZlbiBldmVudCBoYW5kbGVyIGZvciB0aGUgcGFkLgotICoKLSAqIFNpbmNlOiAxLjgKLSAqLwotdm9pZAotZ3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbl9mdWxsIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb24gZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLQotICBpZiAocGFkLT5ldmVudG5vdGlmeSkKLSAgICBwYWQtPmV2ZW50bm90aWZ5IChwYWQtPmV2ZW50ZGF0YSk7Ci0gIEdTVF9QQURfRVZFTlRGVUxMRlVOQyAocGFkKSA9IGV2ZW50OwotICBHU1RfUEFEX0VWRU5URlVOQyAocGFkKSA9IGV2ZW50X3dyYXA7Ci0gIHBhZC0+ZXZlbnRkYXRhID0gdXNlcl9kYXRhOwotICBwYWQtPmV2ZW50bm90aWZ5ID0gbm90aWZ5OwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImV2ZW50ZnVsbGZ1bmMgZm9yIHNldCB0byAlcyIsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChldmVudCkpOwotfQotCi0vKioKLSAqIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uOgotICogQHA6IGEgI0dzdFBhZCBvZiBlaXRoZXIgZGlyZWN0aW9uLgotICogQGY6IHRoZSAjR3N0UGFkUXVlcnlGdW5jdGlvbiB0byBzZXQuCi0gKgotICogQ2FsbHMgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb25fZnVsbCgpIHdpdGggJU5VTEwgZm9yIHRoZSB1c2VyX2RhdGEgYW5kCi0gKiBub3RpZnkuCi0gKi8KLS8qKgotICogZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb25fZnVsbDoKLSAqIEBwYWQ6IGEgI0dzdFBhZCBvZiBlaXRoZXIgZGlyZWN0aW9uLgotICogQHF1ZXJ5OiB0aGUgI0dzdFBhZFF1ZXJ5RnVuY3Rpb24gdG8gc2V0LgotICogQHVzZXJfZGF0YTogdXNlcl9kYXRhIHBhc3NlZCB0byBAbm90aWZ5Ci0gKiBAbm90aWZ5OiBub3RpZnkgY2FsbGVkIHdoZW4gQHF1ZXJ5IHdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS4KLSAqCi0gKiBTZXQgdGhlIGdpdmVuIHF1ZXJ5IGZ1bmN0aW9uIGZvciB0aGUgcGFkLgotICovCi12b2lkCi1nc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbl9mdWxsIChHc3RQYWQgKiBwYWQsIEdzdFBhZFF1ZXJ5RnVuY3Rpb24gcXVlcnksCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnkpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCkpOwotCi0gIGlmIChwYWQtPnF1ZXJ5bm90aWZ5KQotICAgIHBhZC0+cXVlcnlub3RpZnkgKHBhZC0+cXVlcnlkYXRhKTsKLSAgR1NUX1BBRF9RVUVSWUZVTkMgKHBhZCkgPSBxdWVyeTsKLSAgcGFkLT5xdWVyeWRhdGEgPSB1c2VyX2RhdGE7Ci0gIHBhZC0+cXVlcnlub3RpZnkgPSBub3RpZnk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAicXVlcnlmdW5jIHNldCB0byAlcyIsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChxdWVyeSkpOwotfQotCi0vKioKLSAqIGdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb246Ci0gKiBAcDogYSAjR3N0UGFkIG9mIGVpdGhlciBkaXJlY3Rpb24uCi0gKiBAZjogdGhlICNHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIHRvIHNldC4KLSAqCi0gKiBDYWxscyBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uX2Z1bGwoKSB3aXRoICVOVUxMCi0gKiBmb3IgdGhlIHVzZXJfZGF0YSBhbmQgbm90aWZ5LgotICovCi0vKioKLSAqIGdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb25fZnVsbDoKLSAqIEBwYWQ6IGEgI0dzdFBhZCBvZiBlaXRoZXIgZGlyZWN0aW9uLgotICogQGl0ZXJpbnRsaW5rOiB0aGUgI0dzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24gdG8gc2V0LgotICogQHVzZXJfZGF0YTogdXNlcl9kYXRhIHBhc3NlZCB0byBAbm90aWZ5Ci0gKiBAbm90aWZ5OiBub3RpZnkgY2FsbGVkIHdoZW4gQGl0ZXJpbnRsaW5rIHdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS4KLSAqCi0gKiBTZXRzIHRoZSBnaXZlbiBpbnRlcm5hbCBsaW5rIGl0ZXJhdG9yIGZ1bmN0aW9uIGZvciB0aGUgcGFkLgotICovCi12b2lkCi1nc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uX2Z1bGwgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uIGl0ZXJpbnRsaW5rLCBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLQotICBpZiAocGFkLT5pdGVyaW50bGlua25vdGlmeSkKLSAgICBwYWQtPml0ZXJpbnRsaW5rbm90aWZ5IChwYWQtPml0ZXJpbnRsaW5rZGF0YSk7Ci0gIEdTVF9QQURfSVRFUklOVExJTktGVU5DIChwYWQpID0gaXRlcmludGxpbms7Ci0gIHBhZC0+aXRlcmludGxpbmtkYXRhID0gdXNlcl9kYXRhOwotICBwYWQtPml0ZXJpbnRsaW5rbm90aWZ5ID0gbm90aWZ5OwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwgImludGVybmFsIGxpbmsgaXRlcmF0b3Igc2V0IHRvICVzIiwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGl0ZXJpbnRsaW5rKSk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbjoKLSAqIEBwOiBhICNHc3RQYWQuCi0gKiBAZjogdGhlICNHc3RQYWRMaW5rRnVuY3Rpb24gdG8gc2V0LgotICoKLSAqIENhbGxzIGdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb25fZnVsbCgpIHdpdGggJU5VTEwKLSAqIGZvciB0aGUgdXNlcl9kYXRhIGFuZCBub3RpZnkuCi0gKi8KLS8qKgotICogZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbl9mdWxsOgotICogQHBhZDogYSAjR3N0UGFkLgotICogQGxpbms6IHRoZSAjR3N0UGFkTGlua0Z1bmN0aW9uIHRvIHNldC4KLSAqIEB1c2VyX2RhdGE6IHVzZXJfZGF0YSBwYXNzZWQgdG8gQG5vdGlmeQotICogQG5vdGlmeTogbm90aWZ5IGNhbGxlZCB3aGVuIEBsaW5rIHdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS4KLSAqCi0gKiBTZXRzIHRoZSBnaXZlbiBsaW5rIGZ1bmN0aW9uIGZvciB0aGUgcGFkLiBJdCB3aWxsIGJlIGNhbGxlZCB3aGVuCi0gKiB0aGUgcGFkIGlzIGxpbmtlZCB3aXRoIGFub3RoZXIgcGFkLgotICoKLSAqIFRoZSByZXR1cm4gdmFsdWUgI0dTVF9QQURfTElOS19PSyBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGNhbiBiZQotICogbWFkZS4KLSAqCi0gKiBUaGUgcmV0dXJuIHZhbHVlICNHU1RfUEFEX0xJTktfUkVGVVNFRCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZSBjb25uZWN0aW9uCi0gKiBjYW5ub3QgYmUgbWFkZSBmb3Igc29tZSByZWFzb24uCi0gKgotICogSWYgQGxpbmsgaXMgaW5zdGFsbGVkIG9uIGEgc291cmNlIHBhZCwgaXQgc2hvdWxkIGNhbGwgdGhlICNHc3RQYWRMaW5rRnVuY3Rpb24KLSAqIG9mIHRoZSBwZWVyIHNpbmsgcGFkLCBpZiBwcmVzZW50LgotICovCi12b2lkCi1nc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uX2Z1bGwgKEdzdFBhZCAqIHBhZCwgR3N0UGFkTGlua0Z1bmN0aW9uIGxpbmssCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnkpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCkpOwotCi0gIGlmIChwYWQtPmxpbmtub3RpZnkpCi0gICAgcGFkLT5saW5rbm90aWZ5IChwYWQtPmxpbmtkYXRhKTsKLSAgR1NUX1BBRF9MSU5LRlVOQyAocGFkKSA9IGxpbms7Ci0gIHBhZC0+bGlua2RhdGEgPSB1c2VyX2RhdGE7Ci0gIHBhZC0+bGlua25vdGlmeSA9IG5vdGlmeTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsICJsaW5rZnVuYyBzZXQgdG8gJXMiLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAobGluaykpOwotfQotCi0vKioKLSAqIGdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbjoKLSAqIEBwOiBhICNHc3RQYWQuCi0gKiBAZjogdGhlICNHc3RQYWRVbmxpbmtGdW5jdGlvbiB0byBzZXQuCi0gKgotICogQ2FsbHMgZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uX2Z1bGwoKSB3aXRoICVOVUxMCi0gKiBmb3IgdGhlIHVzZXJfZGF0YSBhbmQgbm90aWZ5LgotICovCi0vKioKLSAqIGdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbl9mdWxsOgotICogQHBhZDogYSAjR3N0UGFkLgotICogQHVubGluazogdGhlICNHc3RQYWRVbmxpbmtGdW5jdGlvbiB0byBzZXQuCi0gKiBAdXNlcl9kYXRhOiB1c2VyX2RhdGEgcGFzc2VkIHRvIEBub3RpZnkKLSAqIEBub3RpZnk6IG5vdGlmeSBjYWxsZWQgd2hlbiBAdW5saW5rIHdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS4KLSAqCi0gKiBTZXRzIHRoZSBnaXZlbiB1bmxpbmsgZnVuY3Rpb24gZm9yIHRoZSBwYWQuIEl0IHdpbGwgYmUgY2FsbGVkCi0gKiB3aGVuIHRoZSBwYWQgaXMgdW5saW5rZWQuCi0gKi8KLXZvaWQKLWdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbl9mdWxsIChHc3RQYWQgKiBwYWQsIEdzdFBhZFVubGlua0Z1bmN0aW9uIHVubGluaywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7Ci0KLSAgaWYgKHBhZC0+dW5saW5rbm90aWZ5KQotICAgIHBhZC0+dW5saW5rbm90aWZ5IChwYWQtPnVubGlua2RhdGEpOwotICBHU1RfUEFEX1VOTElOS0ZVTkMgKHBhZCkgPSB1bmxpbms7Ci0gIHBhZC0+dW5saW5rZGF0YSA9IHVzZXJfZGF0YTsKLSAgcGFkLT51bmxpbmtub3RpZnkgPSBub3RpZnk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAidW5saW5rZnVuYyBzZXQgdG8gJXMiLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAodW5saW5rKSk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF91bmxpbms6Ci0gKiBAc3JjcGFkOiB0aGUgc291cmNlICNHc3RQYWQgdG8gdW5saW5rLgotICogQHNpbmtwYWQ6IHRoZSBzaW5rICNHc3RQYWQgdG8gdW5saW5rLgotICoKLSAqIFVubGlua3MgdGhlIHNvdXJjZSBwYWQgZnJvbSB0aGUgc2luayBwYWQuIFdpbGwgZW1pdCB0aGUgI0dzdFBhZDo6dW5saW5rZWQKLSAqIHNpZ25hbCBvbiBib3RoIHBhZHMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhZHMgd2VyZSB1bmxpbmtlZC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zICVGQUxTRSBpZgotICogdGhlIHBhZHMgd2VyZSBub3QgbGlua2VkIHRvZ2V0aGVyLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX3VubGluayAoR3N0UGFkICogc3JjcGFkLCBHc3RQYWQgKiBzaW5rcGFkKQotewotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLSAgR3N0RWxlbWVudCAqcGFyZW50ID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAoc3JjcGFkKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TUkMgKHNyY3BhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHNpbmtwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHNpbmtwYWQpLCBGQUxTRSk7Ci0KLSAgR1NUX1RSQUNFUl9QQURfVU5MSU5LX1BSRSAoc3JjcGFkLCBzaW5rcGFkKTsKLQotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAidW5saW5raW5nICVzOiVzKCVwKSBhbmQgJXM6JXMoJXApIiwKLSAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgc3JjcGFkLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSwgc2lua3BhZCk7Ci0KLSAgLyogV2UgbmVlZCB0byBub3RpZnkgdGhlIHBhcmVudCBiZWZvcmUgdGFraW5nIGFueSBwYWQgbG9ja3MgYXMgdGhlIGJpbiBpbgotICAgKiBxdWVzdGlvbiBtaWdodCBiZSB3YWl0aW5nIGZvciBhIGxvY2sgb24gdGhlIHBhZCB3aGlsZSBob2xkaW5nIGl0cyBsb2NrCi0gICAqIHRoYXQgb3VyIG1lc3NhZ2Ugd2lsbCB0cnkgdG8gdGFrZS4gKi8KLSAgaWYgKChwYXJlbnQgPSBHU1RfRUxFTUVOVF9DQVNUIChnc3RfcGFkX2dldF9wYXJlbnQgKHNyY3BhZCkpKSkgewotICAgIGlmIChHU1RfSVNfRUxFTUVOVCAocGFyZW50KSkgewotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChwYXJlbnQsCi0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgKEdTVF9PQkpFQ1RfQ0FTVCAoc2lua3BhZCksCi0gICAgICAgICAgICAgIEdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX1VOTElOSywgcGFyZW50LCBUUlVFKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7Ci0gICAgICBwYXJlbnQgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjcGFkKTsKLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rcGFkKTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9QRUVSIChzcmNwYWQpICE9IHNpbmtwYWQpKQotICAgIGdvdG8gbm90X2xpbmtlZF90b2dldGhlcjsKLQotICBpZiAoR1NUX1BBRF9VTkxJTktGVU5DIChzcmNwYWQpKSB7Ci0gICAgR3N0T2JqZWN0ICp0bXBwYXJlbnQ7Ci0KLSAgICBBQ1FVSVJFX1BBUkVOVCAoc3JjcGFkLCB0bXBwYXJlbnQsIG5vX3NyY19wYXJlbnQpOwotCi0gICAgR1NUX1BBRF9VTkxJTktGVU5DIChzcmNwYWQpIChzcmNwYWQsIHRtcHBhcmVudCk7Ci0gICAgUkVMRUFTRV9QQVJFTlQgKHRtcHBhcmVudCk7Ci0gIH0KLW5vX3NyY19wYXJlbnQ6Ci0gIGlmIChHU1RfUEFEX1VOTElOS0ZVTkMgKHNpbmtwYWQpKSB7Ci0gICAgR3N0T2JqZWN0ICp0bXBwYXJlbnQ7Ci0KLSAgICBBQ1FVSVJFX1BBUkVOVCAoc2lua3BhZCwgdG1wcGFyZW50LCBub19zaW5rX3BhcmVudCk7Ci0KLSAgICBHU1RfUEFEX1VOTElOS0ZVTkMgKHNpbmtwYWQpIChzaW5rcGFkLCB0bXBwYXJlbnQpOwotICAgIFJFTEVBU0VfUEFSRU5UICh0bXBwYXJlbnQpOwotICB9Ci1ub19zaW5rX3BhcmVudDoKLQotICAvKiBmaXJzdCBjbGVhciBwZWVycyAqLwotICBHU1RfUEFEX1BFRVIgKHNyY3BhZCkgPSBOVUxMOwotICBHU1RfUEFEX1BFRVIgKHNpbmtwYWQpID0gTlVMTDsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOwotCi0gIC8qIGZpcmUgb2ZmIGEgc2lnbmFsIHRvIGVhY2ggb2YgdGhlIHBhZHMgdGVsbGluZyB0aGVtCi0gICAqIHRoYXQgdGhleSd2ZSBiZWVuIHVubGlua2VkICovCi0gIGdfc2lnbmFsX2VtaXQgKHNyY3BhZCwgZ3N0X3BhZF9zaWduYWxzW1BBRF9VTkxJTktFRF0sIDAsIHNpbmtwYWQpOwotICBnX3NpZ25hbF9lbWl0IChzaW5rcGFkLCBnc3RfcGFkX3NpZ25hbHNbUEFEX1VOTElOS0VEXSwgMCwgc3JjcGFkKTsKLQotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAidW5saW5rZWQgJXM6JXMgYW5kICVzOiVzIiwKLSAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSk7Ci0KLSAgcmVzdWx0ID0gVFJVRTsKLQotZG9uZToKLSAgaWYgKHBhcmVudCAhPSBOVUxMKSB7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChwYXJlbnQsCi0gICAgICAgIGdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlIChHU1RfT0JKRUNUX0NBU1QgKHNpbmtwYWQpLAotICAgICAgICAgICAgR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfVU5MSU5LLCBwYXJlbnQsIEZBTFNFKSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLSAgfQotICBHU1RfVFJBQ0VSX1BBRF9VTkxJTktfUE9TVCAoc3JjcGFkLCBzaW5rcGFkLCByZXN1bHQpOwotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotbm90X2xpbmtlZF90b2dldGhlcjoKLSAgewotICAgIC8qIHdlIGRvIG5vdCBlbWl0IGEgd2FybmluZyBpbiB0aGlzIGNhc2UgYmVjYXVzZSB1bmxpbmtpbmcgY2Fubm90Ci0gICAgICogYmUgbWFkZSBNVCBzYWZlLiovCi0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmtwYWQpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfaXNfbGlua2VkOgotICogQHBhZDogcGFkIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIGEgQHBhZCBpcyBsaW5rZWQgdG8gYW5vdGhlciBwYWQgb3Igbm90LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWQgaXMgbGlua2VkLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX2lzX2xpbmtlZCAoR3N0UGFkICogcGFkKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIHJlc3VsdCA9IChHU1RfUEFEX1BFRVIgKHBhZCkgIT0gTlVMTCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGdldCB0aGUgY2FwcyBmcm9tIGJvdGggcGFkcyBhbmQgc2VlIGlmIHRoZSBpbnRlcnNlY3Rpb24KLSAqIGlzIG5vdCBlbXB0eS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgcGFkIExPQ0sgb24gYm90aAotICogcGFkcwotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wYWRfbGlua19jaGVja19jb21wYXRpYmxlX3VubG9ja2VkIChHc3RQYWQgKiBzcmMsIEdzdFBhZCAqIHNpbmssCi0gICAgR3N0UGFkTGlua0NoZWNrIGZsYWdzKQotewotICBHc3RDYXBzICpzcmNjYXBzID0gTlVMTDsKLSAgR3N0Q2FwcyAqc2lua2NhcHMgPSBOVUxMOwotICBnYm9vbGVhbiBjb21wYXRpYmxlID0gRkFMU0U7Ci0KLSAgaWYgKCEoZmxhZ3MgJiAoR1NUX1BBRF9MSU5LX0NIRUNLX0NBUFMgfCBHU1RfUEFEX0xJTktfQ0hFQ0tfVEVNUExBVEVfQ0FQUykpKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIERvaW5nIHRoZSBleHBlbnNpdmUgY2FwcyBjaGVja2luZyB0YWtlcyBwcmlvcml0eSBvdmVyIG9ubHkgY2hlY2tpbmcgdGhlIHRlbXBsYXRlIGNhcHMgKi8KLSAgaWYgKGZsYWdzICYgR1NUX1BBRF9MSU5LX0NIRUNLX0NBUFMpIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgICBzcmNjYXBzID0gZ3N0X3BhZF9xdWVyeV9jYXBzIChzcmMsIE5VTEwpOwotICAgIHNpbmtjYXBzID0gZ3N0X3BhZF9xdWVyeV9jYXBzIChzaW5rLCBOVUxMKTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICB9IGVsc2UgewotICAgIC8qIElmIG9uZSBvZiB0aGUgdHdvIHBhZHMgZG9lc24ndCBoYXZlIGEgdGVtcGxhdGUsIGNvbnNpZGVyIHRoZSBpbnRlcnNlY3Rpb24KLSAgICAgKiBhcyB2YWxpZC4qLwotICAgIGlmIChHX1VOTElLRUxZICgoR1NUX1BBRF9QQURfVEVNUExBVEUgKHNyYykgPT0gTlVMTCkKLSAgICAgICAgICAgIHx8IChHU1RfUEFEX1BBRF9URU1QTEFURSAoc2luaykgPT0gTlVMTCkpKSB7Ci0gICAgICBjb21wYXRpYmxlID0gVFJVRTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgc3JjY2FwcyA9IGdzdF9jYXBzX3JlZiAoR1NUX1BBRF9URU1QTEFURV9DQVBTIChHU1RfUEFEX1BBRF9URU1QTEFURSAoc3JjKSkpOwotICAgIHNpbmtjYXBzID0KLSAgICAgICAgZ3N0X2NhcHNfcmVmIChHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKEdTVF9QQURfUEFEX1RFTVBMQVRFIChzaW5rKSkpOwotICB9Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgc3JjLCAic3JjIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBzcmNjYXBzKTsKLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgc2luaywgInNpbmsgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIHNpbmtjYXBzKTsKLQotICAvKiBpZiB3ZSBoYXZlIGNhcHMgb24gYm90aCBwYWRzIHdlIGNhbiBjaGVjayB0aGUgaW50ZXJzZWN0aW9uLiBJZiBvbmUKLSAgICogb2YgdGhlIGNhcHMgaXMgJU5VTEwsIHdlIHJldHVybiAlVFJVRS4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHNyY2NhcHMgPT0gTlVMTCB8fCBzaW5rY2FwcyA9PSBOVUxMKSkgewotICAgIGlmIChzcmNjYXBzKQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICAgIGlmIChzaW5rY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChzaW5rY2Fwcyk7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgY29tcGF0aWJsZSA9IGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKHNyY2NhcHMsIHNpbmtjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc2lua2NhcHMpOwotCi1kb25lOgotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBUFMsICJjYXBzIGFyZSAlc2NvbXBhdGlibGUiLAotICAgICAgKGNvbXBhdGlibGUgPyAiIiA6ICJub3QgIikpOwotCi0gIHJldHVybiBjb21wYXRpYmxlOwotfQotCi0vKiBjaGVjayBpZiB0aGUgZ3JhbmRwYXJlbnRzIG9mIGJvdGggcGFkcyBhcmUgdGhlIHNhbWUuCi0gKiBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGxpbmsKLSAqIHBhZHMgZnJvbSBlbGVtZW50cyBpbiBkaWZmZXJlbnQgYmlucyB3aXRob3V0IGdob3N0cGFkcy4KLSAqCi0gKiBUaGUgTE9DSyBzaG91bGQgYmUgaGVsZCBvbiBib3RoIHBhZHMKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcGFkX2xpbmtfY2hlY2tfaGllcmFyY2h5IChHc3RQYWQgKiBzcmMsIEdzdFBhZCAqIHNpbmspCi17Ci0gIEdzdE9iamVjdCAqcHNyYywgKnBzaW5rOwotCi0gIHBzcmMgPSBHU1RfT0JKRUNUX1BBUkVOVCAoc3JjKTsKLSAgcHNpbmsgPSBHU1RfT0JKRUNUX1BBUkVOVCAoc2luayk7Ci0KLSAgLyogaWYgb25lIG9mIHRoZSBwYWRzIGhhcyBubyBwYXJlbnQsIHdlIGFsbG93IHRoZSBsaW5rICovCi0gIGlmIChHX1VOTElLRUxZIChwc3JjID09IE5VTEwgfHwgcHNpbmsgPT0gTlVMTCkpCi0gICAgZ290byBub19wYXJlbnQ7Ci0KLSAgLyogb25seSBjYXJlIGFib3V0IHBhcmVudHMgdGhhdCBhcmUgZWxlbWVudHMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfSVNfRUxFTUVOVCAocHNyYykgfHwgIUdTVF9JU19FTEVNRU5UIChwc2luaykpKQotICAgIGdvdG8gbm9fZWxlbWVudF9wYXJlbnQ7Ci0KLSAgLyogaWYgdGhlIHBhcmVudHMgYXJlIHRoZSBzYW1lLCB3ZSBoYXZlIGEgbG9vcCAqLwotICBpZiAoR19VTkxJS0VMWSAocHNyYyA9PSBwc2luaykpCi0gICAgZ290byBzYW1lX3BhcmVudHM7Ci0KLSAgLyogaWYgdGhleSBib3RoIGhhdmUgYSBwYXJlbnQsIHdlIGNoZWNrIHRoZSBncmFuZHBhcmVudHMuIFdlIGNhbiBub3QgbG9jawotICAgKiB0aGUgcGFyZW50IGJlY2F1c2Ugd2UgaG9sZCBvbiB0aGUgY2hpbGQgKHBhZCkgYW5kIHRoZSBsb2NraW5nIG9yZGVyIGlzCi0gICAqIHBhcmVudCA+PiBjaGlsZC4gKi8KLSAgcHNyYyA9IEdTVF9PQkpFQ1RfUEFSRU5UIChwc3JjKTsKLSAgcHNpbmsgPSBHU1RfT0JKRUNUX1BBUkVOVCAocHNpbmspOwotCi0gIC8qIGlmIHRoZXkgaGF2ZSBncmFuZHBhcmVudHMgYnV0IHRoZXkgYXJlIG5vdCB0aGUgc2FtZSAqLwotICBpZiAoR19VTkxJS0VMWSAocHNyYyAhPSBwc2luaykpCi0gICAgZ290byB3cm9uZ19ncmFuZHBhcmVudHM7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19wYXJlbnQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBUFMsCi0gICAgICAgICJvbmUgb2YgdGhlIHBhZHMgaGFzIG5vIHBhcmVudCAlIiBHU1RfUFRSX0ZPUk1BVCAiIGFuZCAlIgotICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgcHNyYywgcHNpbmspOwotICAgIHJldHVybiBUUlVFOwotICB9Ci1ub19lbGVtZW50X3BhcmVudDoKLSAgewotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0FQUywKLSAgICAgICAgIm9uZSBvZiB0aGUgcGFkcyBoYXMgbm8gZWxlbWVudCBwYXJlbnQgJSIgR1NUX1BUUl9GT1JNQVQgIiBhbmQgJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsIHBzcmMsIHBzaW5rKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotc2FtZV9wYXJlbnRzOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DQVBTLCAicGFkcyBoYXZlIHNhbWUgcGFyZW50ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICBwc3JjKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2dyYW5kcGFyZW50czoKLSAgewotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0FQUywKLSAgICAgICAgInBhZHMgaGF2ZSBkaWZmZXJlbnQgZ3JhbmRwYXJlbnRzICUiIEdTVF9QVFJfRk9STUFUICIgYW5kICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBwc3JjLCBwc2luayk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIEZJWE1FIGxlZnRvdmVyIGZyb20gYW4gYXR0ZW1wdCBhdCByZWZhY3RvcmluZy4uLiAqLwotLyogY2FsbCB3aXRoIHRoZSB0d28gcGFkcyB1bmxvY2tlZCwgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgR1NUX1BBRF9MSU5LX09LLAotICogdGhlIHR3byBwYWRzIHdpbGwgYmUgbG9ja2VkIGluIHRoZSBzcmNwYWQsIHNpbmtwYWQgb3JkZXIuICovCi1zdGF0aWMgR3N0UGFkTGlua1JldHVybgotZ3N0X3BhZF9saW5rX3ByZXBhcmUgKEdzdFBhZCAqIHNyY3BhZCwgR3N0UGFkICogc2lua3BhZCwgR3N0UGFkTGlua0NoZWNrIGZsYWdzKQotewotICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgInRyeWluZyB0byBsaW5rICVzOiVzIGFuZCAlczolcyIsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksIEdTVF9ERUJVR19QQURfTkFNRSAoc2lua3BhZCkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjcGFkKTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9QRUVSIChzcmNwYWQpICE9IE5VTEwpKQotICAgIGdvdG8gc3JjX3dhc19saW5rZWQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rcGFkKTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9QRUVSIChzaW5rcGFkKSAhPSBOVUxMKSkKLSAgICBnb3RvIHNpbmtfd2FzX2xpbmtlZDsKLQotICAvKiBjaGVjayBoaWVyYXJjaHksIHBhZHMgY2FuIG9ubHkgYmUgbGlua2VkIGlmIHRoZSBncmFuZHBhcmVudHMKLSAgICogYXJlIHRoZSBzYW1lLiAqLwotICBpZiAoKGZsYWdzICYgR1NUX1BBRF9MSU5LX0NIRUNLX0hJRVJBUkNIWSkKLSAgICAgICYmICFnc3RfcGFkX2xpbmtfY2hlY2tfaGllcmFyY2h5IChzcmNwYWQsIHNpbmtwYWQpKQotICAgIGdvdG8gd3JvbmdfaGllcmFyY2h5OwotCi0gIC8qIGNoZWNrIHBhZCBjYXBzIGZvciBub24tZW1wdHkgaW50ZXJzZWN0aW9uICovCi0gIGlmICghZ3N0X3BhZF9saW5rX2NoZWNrX2NvbXBhdGlibGVfdW5sb2NrZWQgKHNyY3BhZCwgc2lua3BhZCwgZmxhZ3MpKQotICAgIGdvdG8gbm9fZm9ybWF0OwotCi0gIC8qIEZJWE1FIGNoZWNrIHBhZCBzY2hlZHVsaW5nIGZvciBub24tZW1wdHkgaW50ZXJzZWN0aW9uICovCi0KLSAgcmV0dXJuIEdTVF9QQURfTElOS19PSzsKLQotc3JjX3dhc19saW5rZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgInNyYyAlczolcyB3YXMgYWxyZWFkeSBsaW5rZWQgdG8gJXM6JXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoR1NUX1BBRF9QRUVSIChzcmNwYWQpKSk7Ci0gICAgLyogd2UgZG8gbm90IGVtaXQgYSB3YXJuaW5nIGluIHRoaXMgY2FzZSBiZWNhdXNlIHVubGlua2luZyBjYW5ub3QKLSAgICAgKiBiZSBtYWRlIE1UIHNhZmUuKi8KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjcGFkKTsKLSAgICByZXR1cm4gR1NUX1BBRF9MSU5LX1dBU19MSU5LRUQ7Ci0gIH0KLXNpbmtfd2FzX2xpbmtlZDoKLSAgewotICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAic2luayAlczolcyB3YXMgYWxyZWFkeSBsaW5rZWQgdG8gJXM6JXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmtwYWQpLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKEdTVF9QQURfUEVFUiAoc2lua3BhZCkpKTsKLSAgICAvKiB3ZSBkbyBub3QgZW1pdCBhIHdhcm5pbmcgaW4gdGhpcyBjYXNlIGJlY2F1c2UgdW5saW5raW5nIGNhbm5vdAotICAgICAqIGJlIG1hZGUgTVQgc2FmZS4qLwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rcGFkKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjcGFkKTsKLSAgICByZXR1cm4gR1NUX1BBRF9MSU5LX1dBU19MSU5LRUQ7Ci0gIH0KLXdyb25nX2hpZXJhcmNoeToKLSAgewotICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAicGFkcyBoYXZlIHdyb25nIGhpZXJhcmNoeSIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rcGFkKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjcGFkKTsKLSAgICByZXR1cm4gR1NUX1BBRF9MSU5LX1dST05HX0hJRVJBUkNIWTsKLSAgfQotbm9fZm9ybWF0OgotICB7Ci0gICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJjYXBzIGFyZSBpbmNvbXBhdGlibGUiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyY3BhZCk7Ci0gICAgcmV0dXJuIEdTVF9QQURfTElOS19OT0ZPUk1BVDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfY2FuX2xpbms6Ci0gKiBAc3JjcGFkOiB0aGUgc291cmNlICNHc3RQYWQuCi0gKiBAc2lua3BhZDogdGhlIHNpbmsgI0dzdFBhZC4KLSAqCi0gKiBDaGVja3MgaWYgdGhlIHNvdXJjZSBwYWQgYW5kIHRoZSBzaW5rIHBhZCBhcmUgY29tcGF0aWJsZSBzbyB0aGV5IGNhbiBiZQotICogbGlua2VkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWRzIGNhbiBiZSBsaW5rZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX2Nhbl9saW5rIChHc3RQYWQgKiBzcmNwYWQsIEdzdFBhZCAqIHNpbmtwYWQpCi17Ci0gIEdzdFBhZExpbmtSZXR1cm4gcmVzdWx0OwotCi0gIC8qIGdlbmVyaWMgY2hlY2tzICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChzcmNwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChzaW5rcGFkKSwgRkFMU0UpOwotCi0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiY2hlY2sgaWYgJXM6JXMgY2FuIGxpbmsgd2l0aCAlczolcyIsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksIEdTVF9ERUJVR19QQURfTkFNRSAoc2lua3BhZCkpOwotCi0gIC8qIGdzdF9wYWRfbGlua19wcmVwYXJlIGRvZXMgZXZlcnl0aGluZyBmb3IgdXMsIHdlIG9ubHkgcmVsZWFzZSB0aGUgbG9ja3MKLSAgICogb24gdGhlIHBhZHMgdGhhdCBpdCBnZXRzIHVzLiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgIU9LIHRoZSBsb2NrcyBhcmUgbm90Ci0gICAqIHRha2VuIGFueW1vcmUuICovCi0gIHJlc3VsdCA9IGdzdF9wYWRfbGlua19wcmVwYXJlIChzcmNwYWQsIHNpbmtwYWQsIEdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUKTsKLSAgaWYgKHJlc3VsdCAhPSBHU1RfUEFEX0xJTktfT0spCi0gICAgZ290byBkb25lOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2lua3BhZCk7Ci0KLWRvbmU6Ci0gIHJldHVybiByZXN1bHQgPT0gR1NUX1BBRF9MSU5LX09LOwotfQotCi0vKioKLSAqIGdzdF9wYWRfbGlua19mdWxsOgotICogQHNyY3BhZDogdGhlIHNvdXJjZSAjR3N0UGFkIHRvIGxpbmsuCi0gKiBAc2lua3BhZDogdGhlIHNpbmsgI0dzdFBhZCB0byBsaW5rLgotICogQGZsYWdzOiB0aGUgY2hlY2tzIHRvIHZhbGlkYXRlIHdoZW4gbGlua2luZwotICoKLSAqIExpbmtzIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQuCi0gKgotICogVGhpcyB2YXJpYW50IG9mICNnc3RfcGFkX2xpbmsgcHJvdmlkZXMgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgb24gdGhlCi0gKiBjaGVja3MgYmVpbmcgZG9uZSB3aGVuIGxpbmtpbmcuIFdoaWxlIHByb3ZpZGluZyBzb21lIGNvbnNpZGVyYWJsZSBzcGVlZHVwcwotICogdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtdXN0IGJlIGF3YXJlIHRoYXQgd3JvbmcgdXNhZ2Ugb2YgdGhvc2UgZmxhZ3MKLSAqIGNhbiBjYXVzZSBzZXZlcmUgaXNzdWVzLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiAjR3N0UGFkTGlua0NoZWNrCi0gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBNVCBTYWZlLgotICoKLSAqIFJldHVybnM6IEEgcmVzdWx0IGNvZGUgaW5kaWNhdGluZyBpZiB0aGUgY29ubmVjdGlvbiB3b3JrZWQgb3IKLSAqICAgICAgICAgIHdoYXQgd2VudCB3cm9uZy4KLSAqLwotR3N0UGFkTGlua1JldHVybgotZ3N0X3BhZF9saW5rX2Z1bGwgKEdzdFBhZCAqIHNyY3BhZCwgR3N0UGFkICogc2lua3BhZCwgR3N0UGFkTGlua0NoZWNrIGZsYWdzKQotewotICBHc3RQYWRMaW5rUmV0dXJuIHJlc3VsdDsKLSAgR3N0RWxlbWVudCAqcGFyZW50OwotICBHc3RQYWRMaW5rRnVuY3Rpb24gc3JjZnVuYywgc2lua2Z1bmM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHNyY3BhZCksIEdTVF9QQURfTElOS19SRUZVU0VEKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfSVNfU1JDIChzcmNwYWQpLCBHU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHNpbmtwYWQpLCBHU1RfUEFEX0xJTktfUkVGVVNFRCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHNpbmtwYWQpLAotICAgICAgR1NUX1BBRF9MSU5LX1dST05HX0RJUkVDVElPTik7Ci0KLSAgR1NUX1RSQUNFUl9QQURfTElOS19QUkUgKHNyY3BhZCwgc2lua3BhZCk7Ci0KLSAgLyogTm90aWZ5IHRoZSBwYXJlbnQgZWFybHkuIFNlZSBnc3RfcGFkX3VubGluayBmb3IgZGV0YWlscy4gKi8KLSAgaWYgKEdfTElLRUxZICgocGFyZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAoZ3N0X3BhZF9nZXRfcGFyZW50IChzcmNwYWQpKSkpKSB7Ci0gICAgaWYgKEdfTElLRUxZIChHU1RfSVNfRUxFTUVOVCAocGFyZW50KSkpIHsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAocGFyZW50LAotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zdHJ1Y3R1cmVfY2hhbmdlIChHU1RfT0JKRUNUX0NBU1QgKHNpbmtwYWQpLAotICAgICAgICAgICAgICBHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9MSU5LLCBwYXJlbnQsIFRSVUUpKTsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLSAgICAgIHBhcmVudCA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgLyogcHJlcGFyZSB3aWxsIGFsc28gbG9jayB0aGUgdHdvIHBhZHMgKi8KLSAgcmVzdWx0ID0gZ3N0X3BhZF9saW5rX3ByZXBhcmUgKHNyY3BhZCwgc2lua3BhZCwgZmxhZ3MpOwotCi0gIGlmIChHX1VOTElLRUxZIChyZXN1bHQgIT0gR1NUX1BBRF9MSU5LX09LKSkgewotICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAibGluayBiZXR3ZWVuICVzOiVzIGFuZCAlczolcyBmYWlsZWQ6ICVzIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpLCBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmtwYWQpLAotICAgICAgICBnc3RfcGFkX2xpbmtfZ2V0X25hbWUgKHJlc3VsdCkpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIG11c3Qgc2V0IHBlZXJzIGJlZm9yZSBjYWxsaW5nIHRoZSBsaW5rIGZ1bmN0aW9uICovCi0gIEdTVF9QQURfUEVFUiAoc3JjcGFkKSA9IHNpbmtwYWQ7Ci0gIEdTVF9QQURfUEVFUiAoc2lua3BhZCkgPSBzcmNwYWQ7Ci0KLSAgLyogY2hlY2sgZXZlbnRzLCB3aGVuIHNvbWV0aGluZyBpcyBkaWZmZXJlbnQsIG1hcmsgcGVuZGluZyAqLwotICBzY2hlZHVsZV9ldmVudHMgKHNyY3BhZCwgc2lua3BhZCk7Ci0KLSAgLyogZ2V0IHRoZSBsaW5rIGZ1bmN0aW9ucyAqLwotICBzcmNmdW5jID0gR1NUX1BBRF9MSU5LRlVOQyAoc3JjcGFkKTsKLSAgc2lua2Z1bmMgPSBHU1RfUEFEX0xJTktGVU5DIChzaW5rcGFkKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3JjZnVuYyB8fCBzaW5rZnVuYykpIHsKLSAgICAvKiBjdXN0b20gbGluayBmdW5jdGlvbnMsIGV4ZWN1dGUgdGhlbSAqLwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rcGFkKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjcGFkKTsKLQotICAgIGlmIChzcmNmdW5jKSB7Ci0gICAgICBHc3RPYmplY3QgKnRtcHBhcmVudDsKLQotICAgICAgQUNRVUlSRV9QQVJFTlQgKHNyY3BhZCwgdG1wcGFyZW50LCBub19wYXJlbnQpOwotICAgICAgLyogdGhpcyBvbmUgd2lsbCBjYWxsIHRoZSBwZWVyIGxpbmsgZnVuY3Rpb24gKi8KLSAgICAgIHJlc3VsdCA9IHNyY2Z1bmMgKHNyY3BhZCwgdG1wcGFyZW50LCBzaW5rcGFkKTsKLSAgICAgIFJFTEVBU0VfUEFSRU5UICh0bXBwYXJlbnQpOwotICAgIH0gZWxzZSBpZiAoc2lua2Z1bmMpIHsKLSAgICAgIEdzdE9iamVjdCAqdG1wcGFyZW50OwotCi0gICAgICBBQ1FVSVJFX1BBUkVOVCAoc2lua3BhZCwgdG1wcGFyZW50LCBub19wYXJlbnQpOwotICAgICAgLyogaWYgbm8gc291cmNlIGxpbmsgZnVuY3Rpb24sIHdlIG5lZWQgdG8gY2FsbCB0aGUgc2luayBsaW5rCi0gICAgICAgKiBmdW5jdGlvbiBvdXJzZWx2ZXMuICovCi0gICAgICByZXN1bHQgPSBzaW5rZnVuYyAoc2lua3BhZCwgdG1wcGFyZW50LCBzcmNwYWQpOwotICAgICAgUkVMRUFTRV9QQVJFTlQgKHRtcHBhcmVudCk7Ci0gICAgfQotICBub19wYXJlbnQ6Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyY3BhZCk7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChzaW5rcGFkKTsKLQotICAgIC8qIHdlIHJlbGVhc2VkIHRoZSBsb2NrLCBjaGVjayBpZiB0aGUgc2FtZSBwYWRzIGFyZSBsaW5rZWQgc3RpbGwgKi8KLSAgICBpZiAoR1NUX1BBRF9QRUVSIChzcmNwYWQpICE9IHNpbmtwYWQgfHwgR1NUX1BBRF9QRUVSIChzaW5rcGFkKSAhPSBzcmNwYWQpCi0gICAgICBnb3RvIGNvbmN1cnJlbnRfbGluazsKLQotICAgIGlmIChHX1VOTElLRUxZIChyZXN1bHQgIT0gR1NUX1BBRF9MSU5LX09LKSkKLSAgICAgIGdvdG8gbGlua19mYWlsZWQ7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmtwYWQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjcGFkKTsKLQotICAvKiBmaXJlIG9mZiBhIHNpZ25hbCB0byBlYWNoIG9mIHRoZSBwYWRzIHRlbGxpbmcgdGhlbQotICAgKiB0aGF0IHRoZXkndmUgYmVlbiBsaW5rZWQgKi8KLSAgZ19zaWduYWxfZW1pdCAoc3JjcGFkLCBnc3RfcGFkX3NpZ25hbHNbUEFEX0xJTktFRF0sIDAsIHNpbmtwYWQpOwotICBnX3NpZ25hbF9lbWl0IChzaW5rcGFkLCBnc3RfcGFkX3NpZ25hbHNbUEFEX0xJTktFRF0sIDAsIHNyY3BhZCk7Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJsaW5rZWQgJXM6JXMgYW5kICVzOiVzLCBzdWNjZXNzZnVsIiwKLSAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSk7Ci0KLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfcmVjb25maWd1cmUgKCkpOwotCi1kb25lOgotICBpZiAoR19MSUtFTFkgKHBhcmVudCkpIHsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKHBhcmVudCwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UgKEdTVF9PQkpFQ1RfQ0FTVCAoc2lua3BhZCksCi0gICAgICAgICAgICBHU1RfU1RSVUNUVVJFX0NIQU5HRV9UWVBFX1BBRF9MSU5LLCBwYXJlbnQsIEZBTFNFKSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLSAgfQotCi0gIEdTVF9UUkFDRVJfUEFEX0xJTktfUE9TVCAoc3JjcGFkLCBzaW5rcGFkLCByZXN1bHQpOwotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotY29uY3VycmVudF9saW5rOgotICB7Ci0gICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJjb25jdXJyZW50IGxpbmsgYmV0d2VlbiAlczolcyBhbmQgJXM6JXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksIEdTVF9ERUJVR19QQURfTkFNRSAoc2lua3BhZCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rcGFkKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjcGFkKTsKLQotICAgIC8qIFRoZSBvdGhlciBsaW5rIG9wZXJhdGlvbiBzdWNjZWVkZWQgZmlyc3QgKi8KLSAgICByZXN1bHQgPSBHU1RfUEFEX0xJTktfV0FTX0xJTktFRDsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLWxpbmtfZmFpbGVkOgotICB7Ci0gICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJsaW5rIGJldHdlZW4gJXM6JXMgYW5kICVzOiVzIGZhaWxlZDogJXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksIEdTVF9ERUJVR19QQURfTkFNRSAoc2lua3BhZCksCi0gICAgICAgIGdzdF9wYWRfbGlua19nZXRfbmFtZSAocmVzdWx0KSk7Ci0KLSAgICBHU1RfUEFEX1BFRVIgKHNyY3BhZCkgPSBOVUxMOwotICAgIEdTVF9QQURfUEVFUiAoc2lua3BhZCkgPSBOVUxMOwotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmtwYWQpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmNwYWQpOwotCi0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9saW5rOgotICogQHNyY3BhZDogdGhlIHNvdXJjZSAjR3N0UGFkIHRvIGxpbmsuCi0gKiBAc2lua3BhZDogdGhlIHNpbmsgI0dzdFBhZCB0byBsaW5rLgotICoKLSAqIExpbmtzIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQuCi0gKgotICogUmV0dXJuczogQSByZXN1bHQgY29kZSBpbmRpY2F0aW5nIGlmIHRoZSBjb25uZWN0aW9uIHdvcmtlZCBvcgotICogICAgICAgICAgd2hhdCB3ZW50IHdyb25nLgotICoKLSAqIE1UIFNhZmUuCi0gKi8KLUdzdFBhZExpbmtSZXR1cm4KLWdzdF9wYWRfbGluayAoR3N0UGFkICogc3JjcGFkLCBHc3RQYWQgKiBzaW5rcGFkKQotewotICByZXR1cm4gZ3N0X3BhZF9saW5rX2Z1bGwgKHNyY3BhZCwgc2lua3BhZCwgR1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BhZF9zZXRfcGFkX3RlbXBsYXRlIChHc3RQYWQgKiBwYWQsIEdzdFBhZFRlbXBsYXRlICogdGVtcGwpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICoqdGVtcGxhdGVfcDsKLQotICAvKiB0aGlzIGZ1bmN0aW9uIHdvdWxkIG5lZWQgY2hlY2tzIGlmIGl0IHdlcmVuJ3Qgc3RhdGljICovCi0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICB0ZW1wbGF0ZV9wID0gJnBhZC0+cGFkdGVtcGxhdGU7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgdGVtcGxhdGVfcCwgKEdzdE9iamVjdCAqKSB0ZW1wbCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIGlmICh0ZW1wbCkKLSAgICBnc3RfcGFkX3RlbXBsYXRlX3BhZF9jcmVhdGVkICh0ZW1wbCwgcGFkKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGU6Ci0gKiBAcGFkOiBhICNHc3RQYWQuCi0gKgotICogR2V0cyB0aGUgdGVtcGxhdGUgZm9yIEBwYWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSAjR3N0UGFkVGVtcGxhdGUgZnJvbSB3aGljaAotICogICAgIHRoaXMgcGFkIHdhcyBpbnN0YW50aWF0ZWQsIG9yICVOVUxMIGlmIHRoaXMgcGFkIGhhcyBubwotICogICAgIHRlbXBsYXRlLiBVbnJlZiBhZnRlciB1c2FnZS4KLSAqLwotR3N0UGFkVGVtcGxhdGUgKgotZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7Ci0KLSAgdGVtcGwgPSBHU1RfUEFEX1BBRF9URU1QTEFURSAocGFkKTsKLQotICByZXR1cm4gKHRlbXBsID8gZ3N0X29iamVjdF9yZWYgKHRlbXBsKSA6IE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwczoKLSAqIEBwYWQ6IGEgICNHc3RQYWQgdG8gY2hlY2sKLSAqCi0gKiBDaGVjayBpZiBAcGFkIGhhcyBjYXBzIHNldCBvbiBpdCB3aXRoIGEgI0dTVF9FVkVOVF9DQVBTIGV2ZW50LgotICoKLSAqIFJldHVybnM6ICVUUlVFIHdoZW4gQHBhZCBoYXMgY2FwcyBhc3NvY2lhdGVkIHdpdGggaXQuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKEdzdFBhZCAqIHBhZCkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotICBHc3RDYXBzICpjYXBzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBjYXBzID0gZ2V0X3BhZF9jYXBzIChwYWQpOwotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsCi0gICAgICAiY2hlY2sgY3VycmVudCBwYWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gIHJlc3VsdCA9IChjYXBzICE9IE5VTEwpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwczoKLSAqIEBwYWQ6IGEgICNHc3RQYWQgdG8gZ2V0IHRoZSBjdXJyZW50IGNhcGFiaWxpdGllcyBvZi4KLSAqCi0gKiBHZXRzIHRoZSBjYXBhYmlsaXRpZXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgb24gQHBhZCB3aXRoIHRoZSBsYXN0Ci0gKiAjR1NUX0VWRU5UX0NBUFMgZXZlbnQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBjdXJyZW50IGNhcHMgb2YgdGhlIHBhZCB3aXRoCi0gKiBpbmNyZW1lbnRlZCByZWYtY291bnQgb3IgJU5VTEwgd2hlbiBwYWQgaGFzIG5vIGNhcHMuIFVucmVmIGFmdGVyIHVzYWdlLgotICovCi1Hc3RDYXBzICoKLWdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoR3N0UGFkICogcGFkKQotewotICBHc3RDYXBzICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgaWYgKChyZXN1bHQgPSBnZXRfcGFkX2NhcHMgKHBhZCkpKQotICAgIGdzdF9jYXBzX3JlZiAocmVzdWx0KTsKLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLAotICAgICAgImdldCBjdXJyZW50IHBhZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzOgotICogQHBhZDogYSAjR3N0UGFkIHRvIGdldCB0aGUgdGVtcGxhdGUgY2FwYWJpbGl0aWVzIGZyb20uCi0gKgotICogR2V0cyB0aGUgY2FwYWJpbGl0aWVzIGZvciBAcGFkJ3MgdGVtcGxhdGUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdENhcHMgb2YgdGhpcyBwYWQgdGVtcGxhdGUuCi0gKiBVbnJlZiBhZnRlciB1c2FnZS4KLSAqLwotR3N0Q2FwcyAqCi1nc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR3N0UGFkICogcGFkKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7Ci0KLSAgaWYgKEdTVF9QQURfUEFEX1RFTVBMQVRFIChwYWQpKQotICAgIHJldHVybiBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzIChHU1RfUEFEX1BBRF9URU1QTEFURSAocGFkKSk7Ci0KLSAgcmV0dXJuIGdzdF9jYXBzX3JlZiAoR1NUX0NBUFNfQU5ZKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2dldF9wZWVyOgotICogQHBhZDogYSAjR3N0UGFkIHRvIGdldCB0aGUgcGVlciBvZi4KLSAqCi0gKiBHZXRzIHRoZSBwZWVyIG9mIEBwYWQuIFRoaXMgZnVuY3Rpb24gcmVmcyB0aGUgcGVlciBwYWQgc28KLSAqIHlvdSBuZWVkIHRvIHVucmVmIGl0IGFmdGVyIHVzZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBwZWVyICNHc3RQYWQuIFVucmVmIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdFBhZCAqCi1nc3RfcGFkX2dldF9wZWVyIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFBhZCAqcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIHJlc3VsdCA9IEdTVF9QQURfUEVFUiAocGFkKTsKLSAgaWYgKHJlc3VsdCkKLSAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHM6Ci0gKiBAcGFkOiBhICNHc3RQYWQuCi0gKgotICogR2V0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBhbGxvd2VkIG1lZGlhIHR5cGVzIHRoYXQgY2FuIGZsb3cgdGhyb3VnaAotICogQHBhZCBhbmQgaXRzIHBlZXIuCi0gKgotICogVGhlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcmVzdWx0cyBvZgotICogY2FsbGluZyBnc3RfcGFkX3F1ZXJ5X2NhcHMoKSBvbiBAcGFkIGFuZCBpdHMgcGVlci4gVGhlIGNhbGxlciBvd25zIGEgcmVmZXJlbmNlCi0gKiBvbiB0aGUgcmVzdWx0aW5nIGNhcHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBhbGxvd2VkICNHc3RDYXBzIG9mIHRoZQotICogICAgIHBhZCBsaW5rLiBVbnJlZiB0aGUgY2FwcyB3aGVuIHlvdSBubyBsb25nZXIgbmVlZCBpdC4gVGhpcwotICogICAgIGZ1bmN0aW9uIHJldHVybnMgJU5VTEwgd2hlbiBAcGFkIGhhcyBubyBwZWVyLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdENhcHMgKgotZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdENhcHMgKm15Y2FwczsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9QRUVSIChwYWQpID09IE5VTEwpKQotICAgIGdvdG8gbm9fcGVlcjsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUFJPUEVSVElFUywgcGFkLCAiZ2V0dGluZyBhbGxvd2VkIGNhcHMiKTsKLQotICBteWNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHBhZCwgTlVMTCk7Ci0KLSAgLyogUXVlcnkgcGVlciBjYXBzICovCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19jYXBzIChteWNhcHMpOwotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSkpIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsICJDYXBzIHF1ZXJ5IGZhaWxlZCIpOwotICAgIGdvdG8gZW5kOwotICB9Ci0KLSAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHNfcmVzdWx0IChxdWVyeSwgJmNhcHMpOwotICBpZiAoY2FwcyA9PSBOVUxMKSB7Ci0gICAgZ193YXJuX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCk7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLSAgZ3N0X2NhcHNfcmVmIChjYXBzKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsICJhbGxvd2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBjYXBzKTsKLQotZW5kOgotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKG15Y2Fwcyk7Ci0KLSAgcmV0dXJuIGNhcHM7Ci0KLW5vX3BlZXI6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QUk9QRVJUSUVTLCBwYWQsICJubyBwZWVyIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0OgotICogQHBhZDogdGhlICNHc3RQYWQgdG8gZ2V0IHRoZSBpbnRlcm5hbCBsaW5rcyBvZi4KLSAqIEBwYXJlbnQ6IChhbGxvdy1ub25lKTogdGhlIHBhcmVudCBvZiBAcGFkIG9yICVOVUxMCi0gKgotICogSXRlcmF0ZSB0aGUgbGlzdCBvZiBwYWRzIHRvIHdoaWNoIHRoZSBnaXZlbiBwYWQgaXMgbGlua2VkIHRvIGluc2lkZSBvZgotICogdGhlIHBhcmVudCBlbGVtZW50LgotICogVGhpcyBpcyB0aGUgZGVmYXVsdCBoYW5kbGVyLCBhbmQgdGh1cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIGFsbCBvZiB0aGUKLSAqIHBhZHMgaW5zaWRlIHRoZSBwYXJlbnQgZWxlbWVudCB3aXRoIG9wcG9zaXRlIGRpcmVjdGlvbi4KLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgZnJlZSB0aGlzIGl0ZXJhdG9yIGFmdGVyIHVzZSB3aXRoIGdzdF9pdGVyYXRvcl9mcmVlKCkuCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogYSAjR3N0SXRlcmF0b3Igb2YgI0dzdFBhZCwgb3IgJU5VTEwgaWYgQHBhZAotICogaGFzIG5vIHBhcmVudC4gVW5yZWYgZWFjaCByZXR1cm5lZCBwYWQgd2l0aCBnc3Rfb2JqZWN0X3VucmVmKCkuCi0gKi8KLUdzdEl0ZXJhdG9yICoKLWdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgR3N0SXRlcmF0b3IgKnJlczsKLSAgR0xpc3QgKipwYWRsaXN0OwotICBndWludDMyICpjb29raWU7Ci0gIEdNdXRleCAqbG9jazsKLSAgZ3BvaW50ZXIgb3duZXI7Ci0gIEdzdEVsZW1lbnQgKmVwYXJlbnQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOwotCi0gIGlmIChwYXJlbnQgIT0gTlVMTCAmJiBHU1RfSVNfRUxFTUVOVCAocGFyZW50KSkgewotICAgIGVwYXJlbnQgPSBHU1RfRUxFTUVOVF9DQVNUIChnc3Rfb2JqZWN0X3JlZiAocGFyZW50KSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICAgIGVwYXJlbnQgPSBHU1RfUEFEX1BBUkVOVCAocGFkKTsKLSAgICBpZiAoIWVwYXJlbnQgfHwgIUdTVF9JU19FTEVNRU5UIChlcGFyZW50KSkKLSAgICAgIGdvdG8gbm9fcGFyZW50OwotCi0gICAgZ3N0X29iamVjdF9yZWYgKGVwYXJlbnQpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICB9Ci0KLSAgaWYgKHBhZC0+ZGlyZWN0aW9uID09IEdTVF9QQURfU1JDKQotICAgIHBhZGxpc3QgPSAmZXBhcmVudC0+c2lua3BhZHM7Ci0gIGVsc2UKLSAgICBwYWRsaXN0ID0gJmVwYXJlbnQtPnNyY3BhZHM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiTWFraW5nIGl0ZXJhdG9yIik7Ci0KLSAgY29va2llID0gJmVwYXJlbnQtPnBhZHNfY29va2llOwotICBvd25lciA9IGVwYXJlbnQ7Ci0gIGxvY2sgPSBHU1RfT0JKRUNUX0dFVF9MT0NLIChlcGFyZW50KTsKLQotICByZXMgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdTVF9UWVBFX1BBRCwKLSAgICAgIGxvY2ssIGNvb2tpZSwgcGFkbGlzdCwgKEdPYmplY3QgKikgb3duZXIsIE5VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG93bmVyKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fcGFyZW50OgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gcGFyZW50IGVsZW1lbnQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rczoKLSAqIEBwYWQ6IHRoZSBHc3RQYWQgdG8gZ2V0IHRoZSBpbnRlcm5hbCBsaW5rcyBvZi4KLSAqCi0gKiBHZXRzIGFuIGl0ZXJhdG9yIGZvciB0aGUgcGFkcyB0byB3aGljaCB0aGUgZ2l2ZW4gcGFkIGlzIGxpbmtlZCB0byBpbnNpZGUKLSAqIG9mIHRoZSBwYXJlbnQgZWxlbWVudC4KLSAqCi0gKiBFYWNoICNHc3RQYWQgZWxlbWVudCB5aWVsZGVkIGJ5IHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgaXRzIHJlZmNvdW50IGluY3JlYXNlZCwKLSAqIHNvIHVucmVmIGFmdGVyIHVzZS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfaXRlcmF0b3JfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhIG5ldyAjR3N0SXRlcmF0b3Igb2YgI0dzdFBhZAotICogICAgIG9yICVOVUxMIHdoZW4gdGhlIHBhZCBkb2VzIG5vdCBoYXZlIGFuIGl0ZXJhdG9yIGZ1bmN0aW9uCi0gKiAgICAgY29uZmlndXJlZC4gVXNlIGdzdF9pdGVyYXRvcl9mcmVlKCkgYWZ0ZXIgdXNhZ2UuCi0gKi8KLUdzdEl0ZXJhdG9yICoKLWdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoR3N0UGFkICogcGFkKQotewotICBHc3RJdGVyYXRvciAqcmVzID0gTlVMTDsKLSAgR3N0T2JqZWN0ICpwYXJlbnQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgQUNRVUlSRV9QQVJFTlQgKHBhZCwgcGFyZW50LCBub19wYXJlbnQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICBpZiAoR1NUX1BBRF9JVEVSSU5UTElOS0ZVTkMgKHBhZCkpCi0gICAgcmVzID0gR1NUX1BBRF9JVEVSSU5UTElOS0ZVTkMgKHBhZCkgKHBhZCwgcGFyZW50KTsKLQotICBSRUxFQVNFX1BBUkVOVCAocGFyZW50KTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fcGFyZW50OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gcGFyZW50Iik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfcGFkX2ZvcndhcmQ6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqIEBmb3J3YXJkOiAoc2NvcGUgY2FsbCk6IGEgI0dzdFBhZEZvcndhcmRGdW5jdGlvbgotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byBAZm9yd2FyZAotICoKLSAqIENhbGxzIEBmb3J3YXJkIGZvciBhbGwgaW50ZXJuYWxseSBsaW5rZWQgcGFkcyBvZiBAcGFkLiBUaGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGgKLSAqIGR5bmFtaWNhbGx5IGNoYW5naW5nIGludGVybmFsIHBhZHMgYW5kIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIEBmb3J3YXJkCi0gKiBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbmNlIGZvciBlYWNoIHBhZC4KLSAqCi0gKiBXaGVuIEBmb3J3YXJkIHJldHVybnMgJVRSVUUsIG5vIGZ1cnRoZXIgcGFkcyB3aWxsIGJlIHByb2Nlc3NlZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBvbmUgb2YgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb25zIHJldHVybmVkICVUUlVFLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9mb3J3YXJkIChHc3RQYWQgKiBwYWQsIEdzdFBhZEZvcndhcmRGdW5jdGlvbiBmb3J3YXJkLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0gIEdzdEl0ZXJhdG9yICppdGVyOwotICBnYm9vbGVhbiBkb25lID0gRkFMU0U7Ci0gIEdWYWx1ZSBpdGVtID0geyAwLCB9OwotICBHTGlzdCAqcHVzaGVkX3BhZHMgPSBOVUxMOwotCi0gIGl0ZXIgPSBnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MgKHBhZCk7Ci0KLSAgaWYgKCFpdGVyKQotICAgIGdvdG8gbm9faXRlcjsKLQotICB3aGlsZSAoIWRvbmUpIHsKLSAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdGVyLCAmaXRlbSkpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgotICAgICAgewotICAgICAgICBHc3RQYWQgKmludHBhZDsKLQotICAgICAgICBpbnRwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKCZpdGVtKTsKLQotICAgICAgICAvKiBpZiBhbHJlYWR5IHB1c2hlZCwgc2tpcC4gRklYTUUsIGZpbmQgc29tZXRoaW5nIGZhc3RlciB0byB0YWcgcGFkcyAqLwotICAgICAgICBpZiAoaW50cGFkID09IE5VTEwgfHwgZ19saXN0X2ZpbmQgKHB1c2hlZF9wYWRzLCBpbnRwYWQpKSB7Ci0gICAgICAgICAgZ192YWx1ZV9yZXNldCAoJml0ZW0pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImNhbGxpbmcgZm9yd2FyZCBmdW5jdGlvbiBvbiBwYWQgJXM6JXMiLAotICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChpbnRwYWQpKTsKLSAgICAgICAgZG9uZSA9IHJlc3VsdCA9IGZvcndhcmQgKGludHBhZCwgdXNlcl9kYXRhKTsKLQotICAgICAgICBwdXNoZWRfcGFkcyA9IGdfbGlzdF9wcmVwZW5kIChwdXNoZWRfcGFkcywgaW50cGFkKTsKLQotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICAvKiBXZSBkb24ndCByZXNldCB0aGUgcmVzdWx0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBwdXNoIHRoZSBldmVudAotICAgICAgICAgKiBhZ2FpbiBvbiBwYWRzIHRoYXQgZ290IHRoZSBldmVudCBhbHJlYWR5IGFuZCBiZWNhdXNlIHdlIG5lZWQKLSAgICAgICAgICogdG8gY29uc2lkZXIgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgcHVzaGVzICovCi0gICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChwYWQsICJDb3VsZCBub3QgaXRlcmF0ZSBvdmVyIGludGVybmFsbHkgbGlua2VkIHBhZHMiKTsKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBnX3ZhbHVlX3Vuc2V0ICgmaXRlbSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLQotICBnX2xpc3RfZnJlZSAocHVzaGVkX3BhZHMpOwotCi1ub19pdGVyOgotICByZXR1cm4gcmVzdWx0OwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdib29sZWFuIHJlc3VsdDsKLSAgZ2Jvb2xlYW4gZGlzcGF0Y2hlZDsKLX0gRXZlbnREYXRhOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWV2ZW50X2ZvcndhcmRfZnVuYyAoR3N0UGFkICogcGFkLCBFdmVudERhdGEgKiBkYXRhKQotewotICAvKiBmb3IgZWFjaCBwYWQgd2Ugc2VuZCB0bywgd2Ugc2hvdWxkIHJlZiB0aGUgZXZlbnQ7IGl0J3MgdXAKLSAgICogdG8gZG93bnN0cmVhbSB0byB1bnJlZiBhZ2FpbiB3aGVuIGhhbmRsZWQuICovCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJSZWZmaW5nIGFuZCBwdXNoaW5nIGV2ZW50ICVwICglcykgdG8gJXM6JXMiLAotICAgICAgZGF0YS0+ZXZlbnQsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGRhdGEtPmV2ZW50KSwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLQotICBkYXRhLT5yZXN1bHQgfD0gZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9yZWYgKGRhdGEtPmV2ZW50KSk7Ci0KLSAgZGF0YS0+ZGlzcGF0Y2hlZCA9IFRSVUU7Ci0KLSAgLyogZG9uJ3Qgc3RvcCAqLwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9ldmVudF9kZWZhdWx0OgotICogQHBhZDogYSAjR3N0UGFkIHRvIGNhbGwgdGhlIGRlZmF1bHQgZXZlbnQgaGFuZGxlciBvbi4KLSAqIEBwYXJlbnQ6IChhbGxvdy1ub25lKTogdGhlIHBhcmVudCBvZiBAcGFkIG9yICVOVUxMCi0gKiBAZXZlbnQ6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RFdmVudCB0byBoYW5kbGUuCi0gKgotICogSW52b2tlcyB0aGUgZGVmYXVsdCBldmVudCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gcGFkLgotICoKLSAqIFRoZSBFT1MgZXZlbnQgd2lsbCBwYXVzZSB0aGUgdGFzayBhc3NvY2lhdGVkIHdpdGggQHBhZCBiZWZvcmUgaXQgaXMgZm9yd2FyZGVkCi0gKiB0byBhbGwgaW50ZXJuYWxseSBsaW5rZWQgcGFkcywKLSAqCi0gKiBUaGUgZXZlbnQgaXMgc2VudCB0byBhbGwgcGFkcyBpbnRlcm5hbGx5IGxpbmtlZCB0byBAcGFkLiBUaGlzIGZ1bmN0aW9uCi0gKiB0YWtlcyBvd25lcnNoaXAgb2YgQGV2ZW50LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBldmVudCB3YXMgc2VudCBzdWNjZXNzZnVsbHkuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX2V2ZW50X2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXN1bHQsIGZvcndhcmQgPSBUUlVFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChldmVudCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImRlZmF1bHQgZXZlbnQgaGFuZGxlciBmb3IgZXZlbnQgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICAgIGZvcndhcmQgPSBHU1RfUEFEX0lTX1BST1hZX0NBUFMgKHBhZCk7Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGZvcndhcmQpIHsKLSAgICBFdmVudERhdGEgZGF0YTsKLQotICAgIGRhdGEuZXZlbnQgPSBldmVudDsKLSAgICBkYXRhLmRpc3BhdGNoZWQgPSBGQUxTRTsKLSAgICBkYXRhLnJlc3VsdCA9IEZBTFNFOwotCi0gICAgZ3N0X3BhZF9mb3J3YXJkIChwYWQsIChHc3RQYWRGb3J3YXJkRnVuY3Rpb24pIGV2ZW50X2ZvcndhcmRfZnVuYywgJmRhdGEpOwotCi0gICAgLyogZm9yIHNpbmtwYWRzIHdpdGhvdXQgYSBwYXJlbnQgZWxlbWVudCBvciB3aXRob3V0IGludGVybmFsIGxpbmtzLCBub3RoaW5nCi0gICAgICogd2lsbCBiZSBkaXNwYXRjaGVkIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHJldHVybiBUUlVFLiAqLwotICAgIGlmIChkYXRhLmRpc3BhdGNoZWQpCi0gICAgICByZXN1bHQgPSBkYXRhLnJlc3VsdDsKLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSBUUlVFOwotICB9Ci0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogRGVmYXVsdCBhY2NlcHQgY2FwcyBpbXBsZW1lbnRhdGlvbiBqdXN0IGNoZWNrcyBhZ2FpbnN0Ci0gKiB0aGUgYWxsb3dlZCBjYXBzIGZvciB0aGUgcGFkICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHNfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICAvKiBnZXQgdGhlIGNhcHMgYW5kIHNlZSBpZiBpdCBpbnRlcnNlY3RzIHRvIHNvbWV0aGluZyBub3QgZW1wdHkgKi8KLSAgR3N0Q2FwcyAqY2FwcywgKmFsbG93ZWQgPSBOVUxMOwotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicXVlcnkgYWNjZXB0LWNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHF1ZXJ5KTsKLQotICAvKiBmaXJzdCBmb3J3YXJkIHRoZSBxdWVyeSB0byBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzIHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aAotICAgKiBhIFBST1hZIENBUFMgKi8KLSAgaWYgKEdTVF9QQURfSVNfUFJPWFlfQ0FQUyAocGFkKSkgewotICAgIHJlc3VsdCA9IGdzdF9wYWRfcHJveHlfcXVlcnlfYWNjZXB0X2NhcHMgKHBhZCwgcXVlcnkpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICBhbGxvd2VkID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0gICAgZWxzZQotICAgICAgZ290byBkb25lOwotICB9Ci0KLSAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzIChxdWVyeSwgJmNhcHMpOwotICBpZiAoIWFsbG93ZWQpIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgcGFkLAotICAgICAgICAiZmFsbGJhY2sgQUNDRVBUX0NBUFMgcXVlcnksIGNvbnNpZGVyIGltcGxlbWVudGluZyBhIHNwZWNpYWxpemVkIHZlcnNpb24iKTsKLSAgICBpZiAoR1NUX1BBRF9JU19BQ0NFUFRfVEVNUExBVEUgKHBhZCkpCi0gICAgICBhbGxvd2VkID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0gICAgZWxzZQotICAgICAgYWxsb3dlZCA9IGdzdF9wYWRfcXVlcnlfY2FwcyAocGFkLCBjYXBzKTsKLSAgfQotCi0gIGlmIChhbGxvd2VkKSB7Ci0gICAgaWYgKEdTVF9QQURfSVNfQUNDRVBUX0lOVEVSU0VDVCAocGFkKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLAotICAgICAgICAgICJhbGxvd2VkIGNhcHMgaW50ZXJzZWN0ICUiIEdTVF9QVFJfRk9STUFUICIsIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgYWxsb3dlZCwgY2Fwcyk7Ci0gICAgICByZXN1bHQgPSBnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChjYXBzLCBhbGxvd2VkKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYWxsb3dlZCBjYXBzIHN1YnNldCAlIiBHU1RfUFRSX0ZPUk1BVCAiLCBjYXBzICUiCi0gICAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGFsbG93ZWQsIGNhcHMpOwotICAgICAgcmVzdWx0ID0gZ3N0X2NhcHNfaXNfc3Vic2V0IChjYXBzLCBhbGxvd2VkKTsKLSAgICB9Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGFsbG93ZWQpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5vIGNvbXBhdGlibGUgY2FwcyBhbGxvd2VkIG9uIHRoZSBwYWQiKTsKLSAgICByZXN1bHQgPSBGQUxTRTsKLSAgfQotICBnc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksIHJlc3VsdCk7Ci0KLWRvbmU6Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBEZWZhdWx0IGNhcHMgaW1wbGVtZW50YXRpb24gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BhZF9xdWVyeV9jYXBzX2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0Q2FwcyAqcmVzdWx0ID0gTlVMTCwgKmZpbHRlcjsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotICBnYm9vbGVhbiBmaXhlZF9jYXBzOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwgInF1ZXJ5IGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBxdWVyeSk7Ci0KLSAgLyogZmlyc3QgdHJ5IHRvIHByb3h5IGlmIHdlIG11c3QgKi8KLSAgaWYgKEdTVF9QQURfSVNfUFJPWFlfQ0FQUyAocGFkKSkgewotICAgIGlmICgoZ3N0X3BhZF9wcm94eV9xdWVyeV9jYXBzIChwYWQsIHF1ZXJ5KSkpIHsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gIH0KLQotICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZmaWx0ZXIpOwotCi0gIC8qIG5vIHByb3h5IG9yIGl0IGZhaWxlZCwgZG8gZGVmYXVsdCBoYW5kbGluZyAqLwotICBmaXhlZF9jYXBzID0gR1NUX1BBRF9JU19GSVhFRF9DQVBTIChwYWQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgaWYgKGZpeGVkX2NhcHMpIHsKLSAgICAvKiBmaXhlZCBjYXBzLCB0cnkgdGhlIG5lZ290aWF0ZWQgY2FwcyBmaXJzdCAqLwotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwgImZpeGVkIHBhZCBjYXBzOiB0cnlpbmcgcGFkIGNhcHMiKTsKLSAgICBpZiAoKHJlc3VsdCA9IGdldF9wYWRfY2FwcyAocGFkKSkpCi0gICAgICBnb3RvIGZpbHRlcl9kb25lX3VubG9jazsKLSAgfQotCi0gIGlmICgodGVtcGwgPSBHU1RfUEFEX1BBRF9URU1QTEFURSAocGFkKSkpIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsICJ0cnlpbmcgcGFkIHRlbXBsYXRlIGNhcHMiKTsKLSAgICBpZiAoKHJlc3VsdCA9IEdTVF9QQURfVEVNUExBVEVfQ0FQUyAodGVtcGwpKSkKLSAgICAgIGdvdG8gZmlsdGVyX2RvbmVfdW5sb2NrOwotICB9Ci0KLSAgaWYgKCFmaXhlZF9jYXBzKSB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLAotICAgICAgICAibm9uLWZpeGVkIHBhZCBjYXBzOiB0cnlpbmcgcGFkIGNhcHMiKTsKLSAgICAvKiBub24gZml4ZWQgY2FwcywgdHJ5IHRoZSBuZWdvdGlhdGVkIGNhcHMgKi8KLSAgICBpZiAoKHJlc3VsdCA9IGdldF9wYWRfY2FwcyAocGFkKSkpCi0gICAgICBnb3RvIGZpbHRlcl9kb25lX3VubG9jazsKLSAgfQotCi0gIC8qIHRoaXMgYWxtb3N0IG5ldmVyIGhhcHBlbnMgKi8KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLCAicGFkIGhhcyBubyBjYXBzIik7Ci0gIHJlc3VsdCA9IEdTVF9DQVBTX0FOWTsKLQotZmlsdGVyX2RvbmVfdW5sb2NrOgotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAvKiBydW4gdGhlIGZpbHRlciBvbiB0aGUgcmVzdWx0ICovCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsCi0gICAgICAgICJ1c2luZyBjYXBzICVwICUiIEdTVF9QVFJfRk9STUFUICIgd2l0aCBmaWx0ZXIgJXAgJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCwgcmVzdWx0LCBmaWx0ZXIsIGZpbHRlcik7Ci0gICAgcmVzdWx0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmVzdWx0LCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwgInJlc3VsdCAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgcmVzdWx0LCByZXN1bHQpOwotICB9IGVsc2UgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwKLSAgICAgICAgInVzaW5nIGNhcHMgJXAgJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCwgcmVzdWx0KTsKLSAgICByZXN1bHQgPSBnc3RfY2Fwc19yZWYgKHJlc3VsdCk7Ci0gIH0KLSAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIHJlc3VsdCk7Ci0gIGdzdF9jYXBzX3VucmVmIChyZXN1bHQpOwotCi1kb25lOgotICByZXR1cm4gVFJVRTsKLX0KLQotLyogRGVmYXVsdCBsYXRlbmN5IGltcGxlbWVudGF0aW9uICovCi10eXBlZGVmIHN0cnVjdAotewotICBndWludCBjb3VudDsKLSAgZ2Jvb2xlYW4gbGl2ZTsKLSAgR3N0Q2xvY2tUaW1lIG1pbiwgbWF4OwotfSBMYXRlbmN5Rm9sZERhdGE7Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXVlcnlfbGF0ZW5jeV9kZWZhdWx0X2ZvbGQgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHJldCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0IChpdGVtKSwgKnBlZXI7Ci0gIExhdGVuY3lGb2xkRGF0YSAqZm9sZF9kYXRhID0gdXNlcl9kYXRhOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19sYXRlbmN5ICgpOwotCi0gIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOwotICBpZiAocGVlcikgewotICAgIHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIk5vIHBlZXIgcGFkIGZvdW5kLCBpZ25vcmluZyB0aGlzIHBhZCIpOwotICB9Ci0KLSAgaWYgKHJlcykgewotICAgIGdib29sZWFuIGxpdmU7Ci0gICAgR3N0Q2xvY2tUaW1lIG1pbiwgbWF4OwotCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKHF1ZXJ5LCAmbGl2ZSwgJm1pbiwgJm1heCk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiZ290IGxhdGVuY3kgbGl2ZTolcyBtaW46JSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICIgbWF4OiUiIEdfR0lOVDY0X0ZPUk1BVCwgbGl2ZSA/ICJ0cnVlIiA6ICJmYWxzZSIsIG1pbiwgbWF4KTsKLQotICAgIC8qIEZJWE1FIDogV2h5IGRvIHdlIG9ubHkgdGFrZSB2YWx1ZXMgaW50byBhY2NvdW50IGlmIGl0J3MgbGl2ZSA/ICovCi0gICAgaWYgKGxpdmUgfHwgZm9sZF9kYXRhLT5jb3VudCA9PSAwKSB7Ci0gICAgICBpZiAobWluID4gZm9sZF9kYXRhLT5taW4pCi0gICAgICAgIGZvbGRfZGF0YS0+bWluID0gbWluOwotCi0gICAgICBpZiAoZm9sZF9kYXRhLT5tYXggPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgZm9sZF9kYXRhLT5tYXggPSBtYXg7Ci0gICAgICBlbHNlIGlmIChtYXggPCBmb2xkX2RhdGEtPm1heCkKLSAgICAgICAgZm9sZF9kYXRhLT5tYXggPSBtYXg7Ci0KLSAgICAgIGZvbGRfZGF0YS0+bGl2ZSA9IGxpdmU7Ci0gICAgfQotICAgIGZvbGRfZGF0YS0+Y291bnQgKz0gMTsKLSAgfSBlbHNlIGlmIChwZWVyKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibGF0ZW5jeSBxdWVyeSBmYWlsZWQiKTsKLSAgICBnX3ZhbHVlX3NldF9ib29sZWFuIChyZXQsIEZBTFNFKTsKLSAgfQotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICBpZiAocGVlcikKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcGFkX3F1ZXJ5X2xhdGVuY3lfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RJdGVyYXRvciAqaXQ7Ci0gIEdzdEl0ZXJhdG9yUmVzdWx0IHJlczsKLSAgR1ZhbHVlIHJldCA9IEdfVkFMVUVfSU5JVDsKLSAgZ2Jvb2xlYW4gcXVlcnlfcmV0OwotICBMYXRlbmN5Rm9sZERhdGEgZm9sZF9kYXRhOwotCi0gIGl0ID0gZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzIChwYWQpOwotICBpZiAoIWl0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiQ2FuJ3QgaXRlcmF0ZSBpbnRlcm5hbCBsaW5rcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGdfdmFsdWVfaW5pdCAoJnJldCwgR19UWVBFX0JPT0xFQU4pOwotCi1yZXRyeToKLSAgZm9sZF9kYXRhLmNvdW50ID0gMDsKLSAgZm9sZF9kYXRhLmxpdmUgPSBGQUxTRTsKLSAgZm9sZF9kYXRhLm1pbiA9IDA7Ci0gIGZvbGRfZGF0YS5tYXggPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKCZyZXQsIFRSVUUpOwotICByZXMgPSBnc3RfaXRlcmF0b3JfZm9sZCAoaXQsIHF1ZXJ5X2xhdGVuY3lfZGVmYXVsdF9mb2xkLCAmcmV0LCAmZm9sZF9kYXRhKTsKLSAgc3dpdGNoIChyZXMpIHsKLSAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAoJnJldCwgRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICAgICAgZ290byByZXRyeTsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIHF1ZXJ5X3JldCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKCZyZXQpOwotICBpZiAocXVlcnlfcmV0KSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImdvdCBsYXRlbmN5IGxpdmU6JXMgbWluOiUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAiIG1heDolIiBHX0dJTlQ2NF9GT1JNQVQsIGZvbGRfZGF0YS5saXZlID8gInRydWUiIDogImZhbHNlIiwKLSAgICAgICAgZm9sZF9kYXRhLm1pbiwgZm9sZF9kYXRhLm1heCk7Ci0KLSAgICBpZiAoZm9sZF9kYXRhLm1pbiA+IGZvbGRfZGF0YS5tYXgpIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhZCwgIm1pbmltdW0gbGF0ZW5jeSBiaWdnZXIgdGhhbiBtYXhpbXVtIGxhdGVuY3kiKTsKLSAgICB9Ci0KLSAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKHF1ZXJ5LCBmb2xkX2RhdGEubGl2ZSwgZm9sZF9kYXRhLm1pbiwgZm9sZF9kYXRhLm1heCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImxhdGVuY3kgcXVlcnkgZmFpbGVkIik7Ci0gIH0KLQotICByZXR1cm4gcXVlcnlfcmV0OwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHJlc3VsdDsKLSAgZ2Jvb2xlYW4gZGlzcGF0Y2hlZDsKLX0gUXVlcnlEYXRhOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF1ZXJ5X2ZvcndhcmRfZnVuYyAoR3N0UGFkICogcGFkLCBRdWVyeURhdGEgKiBkYXRhKQotewotICBHU1RfTE9HX09CSkVDVCAocGFkLCAicXVlcnkgcGVlciAlcCAoJXMpIG9mICVzOiVzIiwKLSAgICAgIGRhdGEtPnF1ZXJ5LCBHU1RfUVVFUllfVFlQRV9OQU1FIChkYXRhLT5xdWVyeSksIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgZGF0YS0+cmVzdWx0IHw9IGdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBkYXRhLT5xdWVyeSk7Ci0KLSAgZGF0YS0+ZGlzcGF0Y2hlZCA9IFRSVUU7Ci0KLSAgLyogc3RvcCBvbiBmaXJzdCBzdWNjZXNzZnVsIHJlcGx5ICovCi0gIHJldHVybiBkYXRhLT5yZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9xdWVyeV9kZWZhdWx0OgotICogQHBhZDogYSAjR3N0UGFkIHRvIGNhbGwgdGhlIGRlZmF1bHQgcXVlcnkgaGFuZGxlciBvbi4KLSAqIEBwYXJlbnQ6IChhbGxvdy1ub25lKTogdGhlIHBhcmVudCBvZiBAcGFkIG9yICVOVUxMCi0gKiBAcXVlcnk6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RRdWVyeSB0byBoYW5kbGUuCi0gKgotICogSW52b2tlcyB0aGUgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gcGFkLgotICogVGhlIHF1ZXJ5IGlzIHNlbnQgdG8gYWxsIHBhZHMgaW50ZXJuYWxseSBsaW5rZWQgdG8gQHBhZC4gTm90ZSB0aGF0Ci0gKiBpZiB0aGVyZSBhcmUgbWFueSBwb3NzaWJsZSBzaW5rIHBhZHMgdGhhdCBhcmUgaW50ZXJuYWxseSBsaW5rZWQgdG8KLSAqIEBwYWQsIG9ubHkgb25lIHdpbGwgYmUgc2VudCB0aGUgcXVlcnkuCi0gKiBNdWx0aS1zaW5rcGFkIGVsZW1lbnRzIHNob3VsZCBpbXBsZW1lbnQgY3VzdG9tIHF1ZXJ5IGhhbmRsZXJzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBxdWVyeSB3YXMgcGVyZm9ybWVkIHN1Y2Nlc3NmdWxseS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfcXVlcnlfZGVmYXVsdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIGZvcndhcmQsIHJldCA9IEZBTFNFOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1NDSEVEVUxJTkc6Ci0gICAgICBmb3J3YXJkID0gR1NUX1BBRF9JU19QUk9YWV9TQ0hFRFVMSU5HIChwYWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVVFUllfQUxMT0NBVElPTjoKLSAgICAgIGZvcndhcmQgPSBHU1RfUEFEX0lTX1BST1hZX0FMTE9DQVRJT04gKHBhZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUzoKLSAgICAgIHJldCA9IGdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHNfZGVmYXVsdCAocGFkLCBxdWVyeSk7Ci0gICAgICBmb3J3YXJkID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgICAgcmV0ID0gZ3N0X3BhZF9xdWVyeV9jYXBzX2RlZmF1bHQgKHBhZCwgcXVlcnkpOwotICAgICAgZm9yd2FyZCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVVFUllfTEFURU5DWToKLSAgICAgIHJldCA9IGdzdF9wYWRfcXVlcnlfbGF0ZW5jeV9kZWZhdWx0IChwYWQsIHF1ZXJ5KTsKLSAgICAgIGZvcndhcmQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIGNhc2UgR1NUX1FVRVJZX1NFRUtJTkc6Ci0gICAgY2FzZSBHU1RfUVVFUllfRk9STUFUUzoKLSAgICBjYXNlIEdTVF9RVUVSWV9KSVRURVI6Ci0gICAgY2FzZSBHU1RfUVVFUllfUkFURToKLSAgICBjYXNlIEdTVF9RVUVSWV9DT05WRVJUOgotICAgIGRlZmF1bHQ6Ci0gICAgICBmb3J3YXJkID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiJXNmb3J3YXJkaW5nICVwICglcykgcXVlcnkiLCAoZm9yd2FyZCA/ICIiIDogIm5vdCAiKSwKLSAgICAgIHF1ZXJ5LCBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSkpOwotCi0gIGlmIChmb3J3YXJkKSB7Ci0gICAgUXVlcnlEYXRhIGRhdGE7Ci0KLSAgICBkYXRhLnF1ZXJ5ID0gcXVlcnk7Ci0gICAgZGF0YS5kaXNwYXRjaGVkID0gRkFMU0U7Ci0gICAgZGF0YS5yZXN1bHQgPSBGQUxTRTsKLQotICAgIGdzdF9wYWRfZm9yd2FyZCAocGFkLCAoR3N0UGFkRm9yd2FyZEZ1bmN0aW9uKSBxdWVyeV9mb3J3YXJkX2Z1bmMsICZkYXRhKTsKLQotICAgIGlmIChkYXRhLmRpc3BhdGNoZWQpIHsKLSAgICAgIHJldCA9IGRhdGEucmVzdWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBub3RoaW5nIGRpc3BhdGNoZWQsIGFzc3VtZSBkcmFpbmVkICovCi0gICAgICBpZiAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfRFJBSU4pCi0gICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldCA9IEZBTFNFOwotICAgIH0KLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotcHJvYmVfaG9va19tYXJzaGFsIChHSG9vayAqIGhvb2ssIFByb2JlTWFyc2hhbGwgKiBkYXRhKQotewotICBHc3RQYWQgKnBhZCA9IGRhdGEtPnBhZDsKLSAgR3N0UGFkUHJvYmVJbmZvICppbmZvID0gZGF0YS0+aW5mbzsKLSAgR3N0UGFkUHJvYmVUeXBlIHR5cGUsIGZsYWdzOwotICBHc3RQYWRQcm9iZUNhbGxiYWNrIGNhbGxiYWNrOwotICBHc3RQYWRQcm9iZVJldHVybiByZXQ7Ci0gIGdwb2ludGVyIG9yaWdpbmFsX2RhdGE7Ci0KLSAgLyogaWYgd2UgaGF2ZSBjYWxsZWQgdGhpcyBjYWxsYmFjaywgZG8gbm90aGluZyAqLwotICBpZiAoUFJPQkVfQ09PS0lFIChob29rKSA9PSBkYXRhLT5jb29raWUpIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAotICAgICAgICAiaG9vayAlbHUsIGNvb2tpZSAldSBhbHJlYWR5IGNhbGxlZCIsIGhvb2stPmhvb2tfaWQsCi0gICAgICAgIFBST0JFX0NPT0tJRSAoaG9vaykpOwotICAgIHJldHVybjsKLSAgfQotCi0gIFBST0JFX0NPT0tJRSAoaG9vaykgPSBkYXRhLT5jb29raWU7Ci0KLSAgZmxhZ3MgPSBob29rLT5mbGFncyA+PiBHX0hPT0tfRkxBR19VU0VSX1NISUZUOwotICB0eXBlID0gaW5mby0+dHlwZTsKLSAgb3JpZ2luYWxfZGF0YSA9IGluZm8tPmRhdGE7Ci0KLSAgLyogb25lIG9mIHRoZSBzY2hlZHVsaW5nIHR5cGVzICovCi0gIGlmICgoZmxhZ3MgJiBHU1RfUEFEX1BST0JFX1RZUEVfU0NIRURVTElORyAmIHR5cGUpID09IDApCi0gICAgZ290byBub19tYXRjaDsKLQotICBpZiAodHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIKSB7Ci0gICAgLyogb25lIG9mIHRoZSBkYXRhIHR5cGVzIGZvciBub24taWRsZSBwcm9iZXMgKi8KLSAgICBpZiAoKHR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfSURMRSkgPT0gMAotICAgICAgICAmJiAoZmxhZ3MgJiBfUEFEX1BST0JFX1RZUEVfQUxMX0JPVEhfQU5EX0ZMVVNIICYgdHlwZSkgPT0gMCkKLSAgICAgIGdvdG8gbm9fbWF0Y2g7Ci0gIH0gZWxzZSBpZiAodHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9QVUxMKSB7Ci0gICAgLyogb25lIG9mIHRoZSBkYXRhIHR5cGVzIGZvciBub24taWRsZSBwcm9iZXMgKi8KLSAgICBpZiAoKHR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tJTkcpID09IDAKLSAgICAgICAgJiYgKGZsYWdzICYgX1BBRF9QUk9CRV9UWVBFX0FMTF9CT1RIX0FORF9GTFVTSCAmIHR5cGUpID09IDApCi0gICAgICBnb3RvIG5vX21hdGNoOwotICB9IGVsc2UgewotICAgIC8qIFR5cGUgbXVzdCBoYXZlIFBVTEwgb3IgUFVTSCBwcm9iZSB0eXBlcyAqLwotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0KLSAgLyogb25lIG9mIHRoZSBibG9ja2luZyB0eXBlcyBtdXN0IG1hdGNoICovCi0gIGlmICgodHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS0lORykgJiYKLSAgICAgIChmbGFncyAmIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS0lORyAmIHR5cGUpID09IDApCi0gICAgZ290byBub19tYXRjaDsKLSAgaWYgKCh0eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLSU5HKSA9PSAwICYmCi0gICAgICAoZmxhZ3MgJiBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tJTkcpKQotICAgIGdvdG8gbm9fbWF0Y2g7Ci0gIC8qIG9ubHkgcHJvYmVzIHRoYXQgaGF2ZSBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0ggc2V0ICovCi0gIGlmICgodHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCkgJiYKLSAgICAgIChmbGFncyAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCAmIHR5cGUpID09IDApCi0gICAgZ290byBub19tYXRjaDsKLQotICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAotICAgICAgImhvb2sgJWx1LCBjb29raWUgJXUgd2l0aCBmbGFncyAweCUwOHggbWF0Y2hlcyIsIGhvb2stPmhvb2tfaWQsCi0gICAgICBQUk9CRV9DT09LSUUgKGhvb2spLCBmbGFncyk7Ci0KLSAgZGF0YS0+bWFyc2hhbGxlZCA9IFRSVUU7Ci0KLSAgY2FsbGJhY2sgPSAoR3N0UGFkUHJvYmVDYWxsYmFjaykgaG9vay0+ZnVuYzsKLSAgaWYgKGNhbGxiYWNrID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIGluZm8tPmlkID0gaG9vay0+aG9va19pZDsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXQgPSBjYWxsYmFjayAocGFkLCBpbmZvLCBob29rLT5kYXRhKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0KLSAgaWYgKG9yaWdpbmFsX2RhdGEgIT0gTlVMTCAmJiBpbmZvLT5kYXRhID09IE5VTEwpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkYXRhIGl0ZW0gaW4gcGFkIHByb2JlIGluZm8gd2FzIGRyb3BwZWQiKTsKLSAgICBpbmZvLT50eXBlID0gR1NUX1BBRF9QUk9CRV9UWVBFX0lOVkFMSUQ7Ci0gICAgZGF0YS0+ZHJvcHBlZCA9IFRSVUU7Ci0gIH0KLQotICBzd2l0Y2ggKHJldCkgewotICAgIGNhc2UgR1NUX1BBRF9QUk9CRV9SRU1PVkU6Ci0gICAgICAvKiByZW1vdmUgdGhlIHByb2JlICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhc2tlZCB0byByZW1vdmUgaG9vayIpOwotICAgICAgY2xlYW51cF9ob29rIChwYWQsIGhvb2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX1BST0JFX0RST1A6Ci0gICAgICAvKiBuZWVkIHRvIGRyb3AgdGhlIGRhdGEsIG1ha2Ugc3VyZSBvdGhlciBwcm9iZXMgZG9uJ3QgZ2V0IGNhbGxlZAotICAgICAgICogYW55bW9yZSAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYXNrZWQgdG8gZHJvcCBpdGVtIik7Ci0gICAgICBpbmZvLT50eXBlID0gR1NUX1BBRF9QUk9CRV9UWVBFX0lOVkFMSUQ7Ci0gICAgICBkYXRhLT5kcm9wcGVkID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9QUk9CRV9IQU5ETEVEOgotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicHJvYmUgaGFuZGxlZCBkYXRhIik7Ci0gICAgICBkYXRhLT5oYW5kbGVkID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9QUk9CRV9QQVNTOgotICAgICAgLyogaW5mb3JtIHRoZSBwYWQgYmxvY2sgdG8gbGV0IHRoaW5ncyBwYXNzICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhc2tlZCB0byBwYXNzIGl0ZW0iKTsKLSAgICAgIGRhdGEtPnBhc3MgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX1BST0JFX09LOgotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicHJvYmUgcmV0dXJuZWQgT0siKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwcm9iZSByZXR1cm5lZCAlZCIsIHJldCk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm47Ci0KLW5vX21hdGNoOgotICB7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgImhvb2sgJWx1LCBjb29raWUgJXUgd2l0aCBmbGFncyAweCUwOHggZG9lcyBub3QgbWF0Y2ggJTA4eCIsCi0gICAgICAgIGhvb2stPmhvb2tfaWQsIFBST0JFX0NPT0tJRSAoaG9vayksIGZsYWdzLCBpbmZvLT50eXBlKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyogYSBwcm9iZSB0aGF0IGRvZXMgbm90IHRha2Ugb3IgcmV0dXJuIGFueSBkYXRhICovCi0jZGVmaW5lIFBST0JFX05PX0RBVEEocGFkLG1hc2ssbGFiZWwsZGVmYXVsdHZhbCkgICAgICAgICAgICAgICAgXAotICBHX1NUTVRfU1RBUlQgewkJCQkJCVwKLSAgICBpZiAoR19VTkxJS0VMWSAocGFkLT5udW1fcHJvYmVzKSkgewkJCQlcCi0gICAgICBHc3RGbG93UmV0dXJuIHB2YWwgPSBkZWZhdWx0dmFsOwkJCQlcCi0gICAgICAvKiBwYXNzIE5VTEwgYXMgdGhlIGRhdGEgaXRlbSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgR3N0UGFkUHJvYmVJbmZvIGluZm8gPSB7IG1hc2ssIDAsIE5VTEwsIDAsIDAgfTsJCVwKLSAgICAgIGluZm8uQUJJLmFiaS5mbG93X3JldCA9IGRlZmF1bHR2YWw7CQkJXAotICAgICAgcmV0ID0gZG9fcHJvYmVfY2FsbGJhY2tzIChwYWQsICZpbmZvLCBkZWZhdWx0dmFsKTsJXAotICAgICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBwdmFsICYmIHJldCAhPSBHU1RfRkxPV19PSykpCVwKLSAgICAgICAgZ290byBsYWJlbDsJCQkJCQlcCi0gICAgfQkJCQkJCQkJXAotICB9IEdfU1RNVF9FTkQKLQotI2RlZmluZSBQUk9CRV9GVUxMKHBhZCxtYXNrLGRhdGEsb2ZmcyxzaXplLGxhYmVsLGhhbmRsZWFibGUsaGFuZGxlX2xhYmVsKSBcCi0gIEdfU1RNVF9TVEFSVCB7CQkJCQkJCVwKLSAgICBpZiAoR19VTkxJS0VMWSAocGFkLT5udW1fcHJvYmVzKSkgewkJCQkJXAotICAgICAgLyogcGFzcyB0aGUgZGF0YSBpdGVtICovCQkJCQkJXAotICAgICAgR3N0UGFkUHJvYmVJbmZvIGluZm8gPSB7IG1hc2ssIDAsIGRhdGEsIG9mZnMsIHNpemUgfTsJCVwKLSAgICAgIGluZm8uQUJJLmFiaS5mbG93X3JldCA9IEdTVF9GTE9XX09LOwkJCQlcCi0gICAgICByZXQgPSBkb19wcm9iZV9jYWxsYmFja3MgKHBhZCwgJmluZm8sIEdTVF9GTE9XX09LKTsJCVwKLSAgICAgIC8qIHN0b3JlIHRoZSBwb3NzaWJseSB1cGRhdGVkIGRhdGEgaXRlbSAqLwkJCVwKLSAgICAgIGRhdGEgPSBHU1RfUEFEX1BST0JFX0lORk9fREFUQSAoJmluZm8pOwkJCQlcCi0gICAgICAvKiBpZiBzb21ldGhpbmcgd2VudCB3cm9uZywgZXhpdCAqLwkJCQlcCi0gICAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkgewkJCQlcCi0JaWYgKGhhbmRsZWFibGUgJiYgcmV0ID09IEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEpIHsJCVwKLQkgIHJldCA9IGluZm8uQUJJLmFiaS5mbG93X3JldDsJCQkJCQlcCi0JICBnb3RvIGhhbmRsZV9sYWJlbDsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCWdvdG8gbGFiZWw7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgUFJPQkVfUFVTSChwYWQsbWFzayxkYXRhLGxhYmVsKQkJXAotICBQUk9CRV9GVUxMKHBhZCwgbWFzaywgZGF0YSwgLTEsIC0xLCBsYWJlbCwgRkFMU0UsIGxhYmVsKTsKLSNkZWZpbmUgUFJPQkVfSEFORExFKHBhZCxtYXNrLGRhdGEsbGFiZWwsaGFuZGxlX2xhYmVsKQlcCi0gIFBST0JFX0ZVTEwocGFkLCBtYXNrLCBkYXRhLCAtMSwgLTEsIGxhYmVsLCBUUlVFLCBoYW5kbGVfbGFiZWwpOwotI2RlZmluZSBQUk9CRV9QVUxMKHBhZCxtYXNrLGRhdGEsb2ZmcyxzaXplLGxhYmVsKQkJXAotICBQUk9CRV9GVUxMKHBhZCwgbWFzaywgZGF0YSwgb2Zmcywgc2l6ZSwgbGFiZWwsIEZBTFNFLCBsYWJlbCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1kb19wYWRfaWRsZV9wcm9iZV93YWl0IChHc3RQYWQgKiBwYWQpCi17Ci0gIHdoaWxlIChHU1RfUEFEX0lTX1JVTk5JTkdfSURMRV9QUk9CRSAocGFkKSkgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAgICJ3YWl0aW5nIGlkbGUgcHJvYmUgdG8gYmUgcmVtb3ZlZCIpOwotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0JMT0NLSU5HKTsKLSAgICBHU1RfUEFEX0JMT0NLX1dBSVQgKHBhZCk7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19CTE9DS0lORyk7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwgIldlIGdvdCB1bmJsb2NrZWQiKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKLSAgICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgfQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLSNkZWZpbmUgUFJPQkVfVFlQRV9JU19TRVJJQUxJWkVEKGkpIFwKLSAgICAoIFwKLSAgICAgICggXAotICAgICAgICAoKChpKS0+dHlwZSAmIChHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSB8IFwKLSAgICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSkgJiYgXAotICAgICAgICBHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoKGkpLT5kYXRhKSkgXAotICAgICAgKSB8fCAoIFwKLSAgICAgICAgKCgoaSktPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTSkgJiYgXAotICAgICAgICBHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCAoKGkpLT5kYXRhKSkgXAotICAgICAgKSB8fCAoIFwKLSAgICAgICAgKChpKS0+dHlwZSAmIChHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSIHwgXAotICAgICAgICBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSX0xJU1QpKSAgXAotICAgICAgKSBcCi0gICAgKQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZG9fcHJvYmVfY2FsbGJhY2tzIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sCi0gICAgR3N0Rmxvd1JldHVybiBkZWZhdWx0dmFsKQotewotICBQcm9iZU1hcnNoYWxsIGRhdGE7Ci0gIGd1aW50IGNvb2tpZTsKLSAgZ2Jvb2xlYW4gaXNfYmxvY2s7Ci0KLSAgZGF0YS5wYWQgPSBwYWQ7Ci0gIGRhdGEuaW5mbyA9IGluZm87Ci0gIGRhdGEucGFzcyA9IEZBTFNFOwotICBkYXRhLmhhbmRsZWQgPSBGQUxTRTsKLSAgZGF0YS5tYXJzaGFsbGVkID0gRkFMU0U7Ci0gIGRhdGEuZHJvcHBlZCA9IEZBTFNFOwotICBkYXRhLmNvb2tpZSA9ICsrcGFkLT5wcml2LT5wcm9iZV9jb29raWU7Ci0KLSAgaXNfYmxvY2sgPQotICAgICAgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0spID09IEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSzsKLQotICBpZiAoaXNfYmxvY2sgJiYgUFJPQkVfVFlQRV9JU19TRVJJQUxJWkVEIChpbmZvKSkgewotICAgIGlmIChkb19wYWRfaWRsZV9wcm9iZV93YWl0IChwYWQpID09IEdTVF9GTE9XX0ZMVVNISU5HKQotICAgICAgZ290byBmbHVzaGluZzsKLSAgfQotCi1hZ2FpbjoKLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICJkbyBwcm9iZXMgY29va2llICV1IiwgZGF0YS5jb29raWUpOwotICBjb29raWUgPSBwYWQtPnByaXYtPnByb2JlX2xpc3RfY29va2llOwotCi0gIGdfaG9va19saXN0X21hcnNoYWwgKCZwYWQtPnByb2JlcywgVFJVRSwKLSAgICAgIChHSG9va01hcnNoYWxsZXIpIHByb2JlX2hvb2tfbWFyc2hhbCwgJmRhdGEpOwotCi0gIC8qIGlmIHRoZSBsaXN0IGNoYW5nZWQsIGNhbGwgdGhlIG5ldyBjYWxsYmFja3MgKHRoZXkgd2lsbCBub3QgaGF2ZSB0aGVpcgotICAgKiBjb29raWUgc2V0IHRvIGRhdGEuY29va2llICovCi0gIGlmIChjb29raWUgIT0gcGFkLT5wcml2LT5wcm9iZV9saXN0X2Nvb2tpZSkgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAgICJwcm9iZSBsaXN0IGNoYW5nZWQsIHJlc3RhcnRpbmciKTsKLSAgICBnb3RvIGFnYWluOwotICB9Ci0KLSAgLyogdGhlIGZpcnN0IGl0ZW0gdGhhdCBkcm9wcGVkIHdpbGwgc3RvcCB0aGUgaG9va3MgYW5kIHRoZW4gd2UgZHJvcCBoZXJlICovCi0gIGlmIChkYXRhLmRyb3BwZWQpCi0gICAgZ290byBkcm9wcGVkOwotCi0gIC8qIElmIG9uZSBoYW5kbGVyIHRvb2sgY2FyZSBvZiBpdCwgbGV0IHRoZSB0aGUgaXRlbSBwYXNzICovCi0gIGlmIChkYXRhLmhhbmRsZWQpIHsKLSAgICBnb3RvIGhhbmRsZWQ7Ci0gIH0KLQotICAvKiBpZiBubyBoYW5kbGVyIG1hdGNoZWQgYW5kIHdlIGFyZSBibG9ja2luZywgbGV0IHRoZSBpdGVtIHBhc3MgKi8KLSAgaWYgKCFkYXRhLm1hcnNoYWxsZWQgJiYgaXNfYmxvY2spCi0gICAgZ290byBwYXNzZWQ7Ci0KLSAgLyogQXQgdGhpcyBwb2ludCwgYWxsIGhhbmRsZXJzIHJldHVybmVkIGVpdGhlciBPSyBvciBQQVNTLiBJZiBvbmUgaGFuZGxlcgotICAgKiByZXR1cm5lZCBQQVNTLCBsZXQgdGhlIGl0ZW0gcGFzcyAqLwotICBpZiAoZGF0YS5wYXNzKQotICAgIGdvdG8gcGFzc2VkOwotCi0gIGlmIChpc19ibG9jaykgewotICAgIHdoaWxlIChHU1RfUEFEX0lTX0JMT0NLRUQgKHBhZCkpIHsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAgICAgIndlIGFyZSBibG9ja2VkICVkIHRpbWVzIiwgcGFkLT5udW1fYmxvY2tlZCk7Ci0KLSAgICAgIC8qIHdlIG1pZ2h0IGhhdmUgcmVsZWFzZWQgdGhlIGxvY2sgKi8KLSAgICAgIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKLSAgICAgICAgZ290byBmbHVzaGluZzsKLQotICAgICAgLyogbm93IHdlIGJsb2NrIHRoZSBzdHJlYW1pbmcgdGhyZWFkLiBJdCBjYW4gYmUgdW5sb2NrZWQgd2hlbiB3ZQotICAgICAgICogZGVhY3RpdmF0ZSB0aGUgcGFkICh3aGljaCB3aWxsIGFsc28gc2V0IHRoZSBGTFVTSElORyBmbGFnKSBvcgotICAgICAgICogd2hlbiB0aGUgcGFkIGlzIHVuYmxvY2tlZC4gQSBmbHVzaGluZyBldmVudCB3aWxsIGFsc28gdW5ibG9jawotICAgICAgICogdGhlIHBhZCBhZnRlciBzZXR0aW5nIHRoZSBGTFVTSElORyBmbGFnLiAqLwotICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgICAiV2FpdGluZyB0byBiZSB1bmJsb2NrZWQgb3Igc2V0IGZsdXNoaW5nIik7Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19CTE9DS0lORyk7Ci0gICAgICBHU1RfUEFEX0JMT0NLX1dBSVQgKHBhZCk7Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0JMT0NLSU5HKTsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsICJXZSBnb3QgdW5ibG9ja2VkIik7Ci0KLSAgICAgIC8qIGlmIHRoZSBsaXN0IGNoYW5nZWQsIGNhbGwgdGhlIG5ldyBjYWxsYmFja3MgKHRoZXkgd2lsbCBub3QgaGF2ZSB0aGVpcgotICAgICAgICogY29va2llIHNldCB0byBkYXRhLmNvb2tpZSAqLwotICAgICAgaWYgKGNvb2tpZSAhPSBwYWQtPnByaXYtPnByb2JlX2xpc3RfY29va2llKSB7Ci0gICAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAgICAgICAicHJvYmUgbGlzdCBjaGFuZ2VkLCByZXN0YXJ0aW5nIik7Ci0gICAgICAgIGdvdG8gYWdhaW47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKLSAgICAgICAgZ290byBmbHVzaGluZzsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gZGVmYXVsdHZhbDsKLQotICAvKiBFUlJPUlMgKi8KLWZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicGFkIGlzIGZsdXNoaW5nIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1kcm9wcGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGF0YSBpcyBkcm9wcGVkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTOwotICB9Ci1wYXNzZWQ6Ci0gIHsKLSAgICAvKiBGSVhNRSA6IFNob3VsZCB3ZSByZXR1cm4gRkxPV19PSyBvciB0aGUgZGVmYXVsdHZhbCA/PyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImRhdGEgaXMgcGFzc2VkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1oYW5kbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGF0YSB3YXMgaGFuZGxlZCIpOwotICAgIHJldHVybiBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xOwotICB9Ci19Ci0KLS8qIHBhZCBvZmZzZXRzICovCi0KLS8qKgotICogZ3N0X3BhZF9nZXRfb2Zmc2V0OgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSBvZmZzZXQgYXBwbGllZCB0byB0aGUgcnVubmluZyB0aW1lIG9mIEBwYWQuIEBwYWQgaGFzIHRvIGJlIGEgc291cmNlCi0gKiBwYWQuCi0gKgotICogUmV0dXJuczogdGhlIG9mZnNldC4KLSAqLwotZ2ludDY0Ci1nc3RfcGFkX2dldF9vZmZzZXQgKEdzdFBhZCAqIHBhZCkKLXsKLSAgZ2ludDY0IHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgMCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICByZXN1bHQgPSBwYWQtPm9mZnNldDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tYXJrX2V2ZW50X25vdF9yZWNlaXZlZCAoR3N0UGFkICogcGFkLCBQYWRFdmVudCAqIGV2LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGV2LT5yZWNlaXZlZCA9IEZBTFNFOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3NldF9vZmZzZXQ6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQKLSAqCi0gKiBTZXQgdGhlIG9mZnNldCB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcnVubmluZyB0aW1lIG9mIEBwYWQuCi0gKi8KLXZvaWQKLWdzdF9wYWRfc2V0X29mZnNldCAoR3N0UGFkICogcGFkLCBnaW50NjQgb2Zmc2V0KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIC8qIGlmIG5vdGhpbmcgY2hhbmdlZCwgZG8gbm90aGluZyAqLwotICBpZiAocGFkLT5vZmZzZXQgPT0gb2Zmc2V0KQotICAgIGdvdG8gZG9uZTsKLQotICBwYWQtPm9mZnNldCA9IG9mZnNldDsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiY2hhbmdlZCBvZmZzZXQgdG8gJSIgR1NUX1NUSU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9TVElNRV9BUkdTIChvZmZzZXQpKTsKLQotICAvKiByZXNlbmQgYWxsIHN0aWNreSBldmVudHMgd2l0aCB1cGRhdGVkIG9mZnNldCBvbiBuZXh0IGJ1ZmZlciBwdXNoICovCi0gIGV2ZW50c19mb3JlYWNoIChwYWQsIG1hcmtfZXZlbnRfbm90X3JlY2VpdmVkLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUEVORElOR19FVkVOVFMpOwotCi1kb25lOgotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgLyogSWYgVFJVRSBhbmQgcmV0IGlzIG5vdCBPSyB0aGlzIG1lYW5zCi0gICAqIHRoYXQgcHVzaGluZyB0aGUgRU9TIGV2ZW50IGZhaWxlZAotICAgKi8KLSAgZ2Jvb2xlYW4gd2FzX2VvczsKLQotICAvKiBJZiBjYWxsZWQgZm9yIGFuIGV2ZW50IHRoaXMgaXMKLSAgICogdGhlIGV2ZW50IHRoYXQgd291bGQgYmUgcHVzaGVkCi0gICAqIG5leHQuIERvbid0IGZvcndhcmQgc3RpY2t5IGV2ZW50cwotICAgKiB0aGF0IHdvdWxkIGNvbWUgYWZ0ZXIgdGhhdCAqLwotICBHc3RFdmVudCAqZXZlbnQ7Ci19IFB1c2hTdGlja3lEYXRhOwotCi0vKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFkIExPQ0sgKi8KLXN0YXRpYyBnYm9vbGVhbgotcHVzaF9zdGlja3kgKEdzdFBhZCAqIHBhZCwgUGFkRXZlbnQgKiBldiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBQdXNoU3RpY2t5RGF0YSAqZGF0YSA9IHVzZXJfZGF0YTsKLSAgR3N0RXZlbnQgKmV2ZW50ID0gZXYtPmV2ZW50OwotCi0gIGlmIChldi0+cmVjZWl2ZWQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJldmVudCAlcyB3YXMgYWxyZWFkeSByZWNlaXZlZCIsCi0gICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBJZiB3ZSdyZSBjYWxsZWQgYmVjYXVzZSBvZiBhbiBzdGlja3kgZXZlbnQsIG9ubHkgZm9yd2FyZAotICAgKiBldmVudHMgdGhhdCB3b3VsZCBjb21lIGJlZm9yZSB0aGlzIG5ldyBldmVudCBhbmQgdGhlCi0gICAqIGV2ZW50IGl0c2VsZiAqLwotICBpZiAoZGF0YS0+ZXZlbnQgJiYgR1NUX0VWRU5UX0lTX1NUSUNLWSAoZGF0YS0+ZXZlbnQpICYmCi0gICAgICBHU1RfRVZFTlRfVFlQRSAoZGF0YS0+ZXZlbnQpIDw9IEdTVF9FVkVOVF9TRUdNRU5UICYmCi0gICAgICBHU1RfRVZFTlRfVFlQRSAoZGF0YS0+ZXZlbnQpIDwgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGRhdGEtPnJldCA9IEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzE7Ci0gIH0gZWxzZSB7Ci0gICAgZGF0YS0+cmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50X3VuY2hlY2tlZCAocGFkLCBnc3RfZXZlbnRfcmVmIChldmVudCksCi0gICAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNKTsKLSAgfQotCi0gIHN3aXRjaCAoZGF0YS0+cmV0KSB7Ci0gICAgY2FzZSBHU1RfRkxPV19PSzoKLSAgICAgIGV2LT5yZWNlaXZlZCA9IFRSVUU7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJldmVudCAlcyBtYXJrZWQgcmVjZWl2ZWQiLAotICAgICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTOgotICAgICAgLyogd2UgY2FuJ3QgYXNzdW1lIHRoZSBldmVudCBpcyByZWNlaXZlZCB3aGVuIGl0IHdhcyBkcm9wcGVkICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJldmVudCAlcyB3YXMgZHJvcHBlZCwgbWFyayBwZW5kaW5nIiwKLSAgICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotICAgICAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUEVORElOR19FVkVOVFMpOwotICAgICAgZGF0YS0+cmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzE6Ci0gICAgICAvKiBldmVudCB3YXMgaWdub3JlZCBhbmQgc2hvdWxkIGJlIHNlbnQgbGF0ZXIgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImV2ZW50ICVzIHdhcyBpZ25vcmVkLCBtYXJrIHBlbmRpbmciLAotICAgICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUyk7Ci0gICAgICBkYXRhLT5yZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0ZMT1dfTk9UX0xJTktFRDoKLSAgICAgIC8qIG5vdCBsaW5rZWQgaXMgbm90IGEgcHJvYmxlbSwgd2UgYXJlIHN0aWNreSBzbyB0aGUgZXZlbnQgd2lsbCBiZQotICAgICAgICogcmVzY2hlZHVsZWQgdG8gYmUgc2VudCBsYXRlciBvbiByZS1saW5rLCBidXQgb25seSBmb3Igbm9uLUVPUyBldmVudHMgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCB3YXMgbm90IGxpbmtlZCwgbWFyayBwZW5kaW5nIik7Ci0gICAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSAhPSBHU1RfRVZFTlRfRU9TKSB7Ci0gICAgICAgIGRhdGEtPnJldCA9IEdTVF9GTE9XX09LOwotICAgICAgICBldi0+cmVjZWl2ZWQgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlc3VsdCAlcywgbWFyayBwZW5kaW5nIGV2ZW50cyIsCi0gICAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKGRhdGEtPnJldCkpOwotICAgICAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUEVORElOR19FVkVOVFMpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoZGF0YS0+cmV0ICE9IEdTVF9GTE9XX09LICYmIEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0VPUykKLSAgICBkYXRhLT53YXNfZW9zID0gVFJVRTsKLQotICByZXR1cm4gZGF0YS0+cmV0ID09IEdTVF9GTE9XX09LOwotfQotCi0vKiBjaGVjayBzdGlja3kgZXZlbnRzIGFuZCBwdXNoIHRoZW0gd2hlbiBuZWVkZWQuIHNob3VsZCBiZSBjYWxsZWQKLSAqIHdpdGggcGFkIExPQ0sgKi8KLXN0YXRpYyBpbmxpbmUgR3N0Rmxvd1JldHVybgotY2hlY2tfc3RpY2t5IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIFB1c2hTdGlja3lEYXRhIGRhdGEgPSB7IEdTVF9GTE9XX09LLCBGQUxTRSwgZXZlbnQgfTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9IQVNfUEVORElOR19FVkVOVFMgKHBhZCkpKSB7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUyk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwdXNoaW5nIGFsbCBzdGlja3kgZXZlbnRzIik7Ci0gICAgZXZlbnRzX2ZvcmVhY2ggKHBhZCwgcHVzaF9zdGlja3ksICZkYXRhKTsKLQotICAgIC8qIElmIHRoZXJlJ3MgYW4gRU9TIGV2ZW50IHdlIG11c3QgcHVzaCBpdCBkb3duc3RyZWFtCi0gICAgICogZXZlbiBpZiBzZW5kaW5nIGEgcHJldmlvdXMgc3RpY2t5IGV2ZW50IGZhaWxlZC4KLSAgICAgKiBPdGhlcndpc2UgdGhlIHBpcGVsaW5lIG1pZ2h0IHdhaXQgZm9yZXZlciBmb3IgRU9TLgotICAgICAqCi0gICAgICogT25seSBkbyB0aGlzIGlmIHB1c2hpbmcgYW5vdGhlciBldmVudCB0aGFuIHRoZSBFT1MKLSAgICAgKiBldmVudCBmYWlsZWQuCi0gICAgICovCi0gICAgaWYgKGRhdGEucmV0ICE9IEdTVF9GTE9XX09LICYmICFkYXRhLndhc19lb3MpIHsKLSAgICAgIFBhZEV2ZW50ICpldiA9IGZpbmRfZXZlbnRfYnlfdHlwZSAocGFkLCBHU1RfRVZFTlRfRU9TLCAwKTsKLQotICAgICAgaWYgKGV2ICYmICFldi0+cmVjZWl2ZWQpIHsKLSAgICAgICAgZGF0YS5yZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnRfdW5jaGVja2VkIChwYWQsIGdzdF9ldmVudF9yZWYgKGV2LT5ldmVudCksCi0gICAgICAgICAgICBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSk7Ci0gICAgICAgIC8qIHRoZSBldmVudCBjb3VsZCBoYXZlIGJlZW4gZHJvcHBlZC4gQmVjYXVzZSB0aGlzIGNhbiBvbmx5Ci0gICAgICAgICAqIGhhcHBlbiBpZiB0aGUgdXNlciBhc2tlZCBmb3IgaXQsIGl0J3Mgbm90IGFuIGVycm9yICovCi0gICAgICAgIGlmIChkYXRhLnJldCA9PSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUykKLSAgICAgICAgICBkYXRhLnJldCA9IEdTVF9GTE9XX09LOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gZGF0YS5yZXQ7Ci19Ci0KLQotLyoqCi0gKiBnc3RfcGFkX3F1ZXJ5OgotICogQHBhZDogYSAjR3N0UGFkIHRvIGludm9rZSB0aGUgZGVmYXVsdCBxdWVyeSBvbi4KLSAqIEBxdWVyeTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdFF1ZXJ5IHRvIHBlcmZvcm0uCi0gKgotICogRGlzcGF0Y2hlcyBhIHF1ZXJ5IHRvIGEgcGFkLiBUaGUgcXVlcnkgc2hvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYnkgdGhlCi0gKiBjYWxsZXIgdmlhIG9uZSBvZiB0aGUgdHlwZS1zcGVjaWZpYyBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gVGhlIGVsZW1lbnQgdGhhdAotICogdGhlIHBhZCBiZWxvbmdzIHRvIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIHRoZSBxdWVyeSB3aXRoIGFuIGFwcHJvcHJpYXRlCi0gKiByZXNwb25zZSwgd2hpY2ggc2hvdWxkIHRoZW4gYmUgcGFyc2VkIHdpdGggYSB0eXBlLXNwZWNpZmljIHF1ZXJ5IHBhcnNpbmcKLSAqIGZ1bmN0aW9uLgotICoKLSAqIEFnYWluLCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBib3RoIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YKLSAqIHRoZSBxdWVyeSBzdHJ1Y3R1cmUuCi0gKgotICogUGxlYXNlIGFsc28gbm90ZSB0aGF0IHNvbWUgcXVlcmllcyBtaWdodCBuZWVkIGEgcnVubmluZyBwaXBlbGluZSB0byB3b3JrLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotICBnYm9vbGVhbiByZXMsIHNlcmlhbGl6ZWQ7Ci0gIEdzdFBhZFF1ZXJ5RnVuY3Rpb24gZnVuYzsKLSAgR3N0UGFkUHJvYmVUeXBlIHR5cGU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUVVFUlkgKHF1ZXJ5KSwgRkFMU0UpOwotCi0gIGlmIChHU1RfUEFEX0lTX1NSQyAocGFkKSkgewotICAgIGlmIChHX1VOTElLRUxZICghR1NUX1FVRVJZX0lTX1VQU1RSRUFNIChxdWVyeSkpKQotICAgICAgZ290byB3cm9uZ19kaXJlY3Rpb247Ci0gICAgdHlwZSA9IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9VUFNUUkVBTTsKLSAgfSBlbHNlIGlmIChHU1RfUEFEX0lTX1NJTksgKHBhZCkpIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9RVUVSWV9JU19ET1dOU1RSRUFNIChxdWVyeSkpKQotICAgICAgZ290byB3cm9uZ19kaXJlY3Rpb247Ci0gICAgdHlwZSA9IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNOwotICB9IGVsc2UKLSAgICBnb3RvIHVua25vd25fZGlyZWN0aW9uOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImRvaW5nIHF1ZXJ5ICVwICglcykiLCBxdWVyeSwKLSAgICAgIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0gIEdTVF9UUkFDRVJfUEFEX1FVRVJZX1BSRSAocGFkLCBxdWVyeSk7Ci0KLSAgc2VyaWFsaXplZCA9IEdTVF9RVUVSWV9JU19TRVJJQUxJWkVEIChxdWVyeSk7Ci0gIGlmIChHX1VOTElLRUxZIChzZXJpYWxpemVkKSkKLSAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYWQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgUFJPQkVfUFVTSCAocGFkLCB0eXBlIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0ggfAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLLCBxdWVyeSwgcHJvYmVfc3RvcHBlZCk7Ci0gIFBST0JFX1BVU0ggKHBhZCwgdHlwZSB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNILCBxdWVyeSwgcHJvYmVfc3RvcHBlZCk7Ci0KLSAgQUNRVUlSRV9QQVJFTlQgKHBhZCwgcGFyZW50LCBub19wYXJlbnQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICBpZiAoKGZ1bmMgPSBHU1RfUEFEX1FVRVJZRlVOQyAocGFkKSkgPT0gTlVMTCkKLSAgICBnb3RvIG5vX2Z1bmM7Ci0KLSAgcmVzID0gZnVuYyAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLQotICBSRUxFQVNFX1BBUkVOVCAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJzZW50IHF1ZXJ5ICVwICglcyksIHJlc3VsdCAlZCIsIHF1ZXJ5LAotICAgICAgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpLCByZXMpOwotICBHU1RfVFJBQ0VSX1BBRF9RVUVSWV9QT1NUIChwYWQsIHF1ZXJ5LCByZXMpOwotCi0gIGlmIChyZXMgIT0gVFJVRSkKLSAgICBnb3RvIHF1ZXJ5X2ZhaWxlZDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIFBST0JFX1BVU0ggKHBhZCwgdHlwZSB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVUxMLCBxdWVyeSwgcHJvYmVfc3RvcHBlZCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIGlmIChHX1VOTElLRUxZIChzZXJpYWxpemVkKSkKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX2RpcmVjdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoInBhZCAlczolcyBxdWVyeSAlcyBpbiB3cm9uZyBkaXJlY3Rpb24iLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCksIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci11bmtub3duX2RpcmVjdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoInBhZCAlczolcyBoYXMgaW52YWxpZCBkaXJlY3Rpb24iLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fcGFyZW50OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaGFkIG5vIHBhcmVudCIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIGlmIChHX1VOTElLRUxZIChzZXJpYWxpemVkKSkKLSAgICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2Z1bmM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJoYWQgbm8gcXVlcnkgZnVuY3Rpb24iKTsKLSAgICBSRUxFQVNFX1BBUkVOVCAocGFyZW50KTsKLSAgICBpZiAoR19VTkxJS0VMWSAoc2VyaWFsaXplZCkpCi0gICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1xdWVyeV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJxdWVyeSBmYWlsZWQiKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoc2VyaWFsaXplZCkpCi0gICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1wcm9iZV9zdG9wcGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicHJvYmUgc3RvcHBlZDogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHNlcmlhbGl6ZWQpKQotICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotCi0gICAgLyogaWYgYSBwcm9iZSBkcm9wcGVkIHdpdGhvdXQgaGFuZGxpbmcsIHdlIGRvbid0IHNlbnQgaXQgZnVydGhlciBidXQgYXNzdW1lCi0gICAgICogdGhhdCB0aGUgcHJvYmUgZGlkIG5vdCBhbnN3ZXIgdGhlIHF1ZXJ5IGFuZCByZXR1cm4gRkFMU0UgKi8KLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEpCi0gICAgICByZXMgPSBGQUxTRTsKLSAgICBlbHNlCi0gICAgICByZXMgPSBUUlVFOwotCi0gICAgcmV0dXJuIHJlczsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfcGVlcl9xdWVyeToKLSAqIEBwYWQ6IGEgI0dzdFBhZCB0byBpbnZva2UgdGhlIHBlZXIgcXVlcnkgb24uCi0gKiBAcXVlcnk6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RRdWVyeSB0byBwZXJmb3JtLgotICoKLSAqIFBlcmZvcm1zIGdzdF9wYWRfcXVlcnkoKSBvbiB0aGUgcGVlciBvZiBAcGFkLgotICoKLSAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGJvdGggdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZgotICogdGhlIHF1ZXJ5IHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJUZBTFNFCi0gKiBpZiBAcGFkIGhhcyBubyBwZWVyLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9wZWVyX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFBhZCAqcGVlcnBhZDsKLSAgR3N0UGFkUHJvYmVUeXBlIHR5cGU7Ci0gIGdib29sZWFuIHJlcywgc2VyaWFsaXplZDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19RVUVSWSAocXVlcnkpLCBGQUxTRSk7Ci0KLSAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfUVVFUllfSVNfRE9XTlNUUkVBTSAocXVlcnkpKSkKLSAgICAgIGdvdG8gd3JvbmdfZGlyZWN0aW9uOwotICAgIHR5cGUgPSBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTTsKLSAgfSBlbHNlIGlmIChHU1RfUEFEX0lTX1NJTksgKHBhZCkpIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9RVUVSWV9JU19VUFNUUkVBTSAocXVlcnkpKSkKLSAgICAgIGdvdG8gd3JvbmdfZGlyZWN0aW9uOwotICAgIHR5cGUgPSBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfVVBTVFJFQU07Ci0gIH0gZWxzZQotICAgIGdvdG8gdW5rbm93bl9kaXJlY3Rpb247Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicGVlciBxdWVyeSAlcCAoJXMpIiwgcXVlcnksCi0gICAgICBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSkpOwotCi0gIHNlcmlhbGl6ZWQgPSBHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCAocXVlcnkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpICYmIHNlcmlhbGl6ZWQpIHsKLSAgICAvKiBhbGwgc2VyaWFsaXplZCBxdWVyaWVzIG9uIHRoZSBzcmNwYWQgdHJpZ2dlciBwdXNoIG9mCi0gICAgICogc3RpY2t5IGV2ZW50cyAqLwotICAgIGlmIChjaGVja19zdGlja3kgKHBhZCwgTlVMTCkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIHN0aWNreV9mYWlsZWQ7Ci0gIH0KLQotICBQUk9CRV9QVVNIIChwYWQsIHR5cGUgfCBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCB8Ci0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0ssIHF1ZXJ5LCBwcm9iZV9zdG9wcGVkKTsKLSAgUFJPQkVfUFVTSCAocGFkLCB0eXBlIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0gsIHF1ZXJ5LCBwcm9iZV9zdG9wcGVkKTsKLQotICBwZWVycGFkID0gR1NUX1BBRF9QRUVSIChwYWQpOwotICBpZiAoR19VTkxJS0VMWSAocGVlcnBhZCA9PSBOVUxMKSkKLSAgICBnb3RvIG5vX3BlZXI7Ci0KLSAgZ3N0X29iamVjdF9yZWYgKHBlZXJwYWQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXMgPSBnc3RfcGFkX3F1ZXJ5IChwZWVycGFkLCBxdWVyeSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcnBhZCk7Ci0KLSAgaWYgKHJlcyAhPSBUUlVFKQotICAgIGdvdG8gcXVlcnlfZmFpbGVkOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgUFJPQkVfUFVTSCAocGFkLCB0eXBlIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwsIHF1ZXJ5LCBwcm9iZV9zdG9wcGVkKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX2RpcmVjdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoInBhZCAlczolcyBxdWVyeSAlcyBpbiB3cm9uZyBkaXJlY3Rpb24iLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCksIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci11bmtub3duX2RpcmVjdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoInBhZCAlczolcyBoYXMgaW52YWxpZCBkaXJlY3Rpb24iLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotc3RpY2t5X2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFkLCAiY291bGQgbm90IHNlbmQgc3RpY2t5IGV2ZW50cyIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fcGVlcjoKLSAgewotICAgIEdTVF9JTkZPX09CSkVDVCAocGFkLCAicGFkIGhhcyBubyBwZWVyIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1xdWVyeV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJxdWVyeSBmYWlsZWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXByb2JlX3N0b3BwZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwcm9iZSBzdG9wcGVkOiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAgIC8qIGlmIGEgcHJvYmUgZHJvcHBlZCB3aXRob3V0IGhhbmRsaW5nLCB3ZSBkb24ndCBzZW50IGl0IGZ1cnRoZXIgYnV0Ci0gICAgICogYXNzdW1lIHRoYXQgdGhlIHByb2JlIGRpZCBub3QgYW5zd2VyIHRoZSBxdWVyeSBhbmQgcmV0dXJuIEZBTFNFICovCi0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xKQotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgZWxzZQotICAgICAgcmVzID0gVFJVRTsKLQotICAgIHJldHVybiByZXM7Ci0gIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERhdGEgcGFzc2luZyBmdW5jdGlvbnMKLSAqLwotCi0vKiB0aGlzIGlzIHRoZSBjaGFpbiBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHBlcmZvcm0gdGhlIGFkZGl0aW9uYWwgYXJndW1lbnQKLSAqIGNoZWNraW5nIGZvciB0aGF0IGxpdHRsZSBleHRyYSBzcGVlZC4KLSAqLwotc3RhdGljIGlubGluZSBHc3RGbG93UmV0dXJuCi1nc3RfcGFkX2NoYWluX2RhdGFfdW5jaGVja2VkIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlVHlwZSB0eXBlLCB2b2lkICpkYXRhKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0T2JqZWN0ICpwYXJlbnQ7Ci0gIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKLQotICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYWQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQotICAgIGdvdG8gZmx1c2hpbmc7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRU9TIChwYWQpKSkKLSAgICBnb3RvIGVvczsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9NT0RFIChwYWQpICE9IEdTVF9QQURfTU9ERV9QVVNIKSkKLSAgICBnb3RvIHdyb25nX21vZGU7Ci0KLSNpZmRlZiBHU1RfRU5BQkxFX0VYVFJBX0NIRUNLUwotICBpZiAoR19VTkxJS0VMWSAocGFkLT5wcml2LT5sYXN0X2Nvb2tpZSAhPSBwYWQtPnByaXYtPmV2ZW50c19jb29raWUpKSB7Ci0gICAgaWYgKCFmaW5kX2V2ZW50X2J5X3R5cGUgKHBhZCwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCkpIHsKLSAgICAgIGdfd2FybmluZyAoR19TVFJMT0MKLSAgICAgICAgICAiOiVzOjwlczolcz4gR290IGRhdGEgZmxvdyBiZWZvcmUgc3RyZWFtLXN0YXJ0IGV2ZW50IiwKLSAgICAgICAgICBHX1NUUkZVTkMsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgfQotICAgIGlmICghZmluZF9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9TRUdNRU5ULCAwKSkgewotICAgICAgZ193YXJuaW5nIChHX1NUUkxPQwotICAgICAgICAgICI6JXM6PCVzOiVzPiBHb3QgZGF0YSBmbG93IGJlZm9yZSBzZWdtZW50IGV2ZW50IiwKLSAgICAgICAgICBHX1NUUkZVTkMsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgfQotICAgIHBhZC0+cHJpdi0+bGFzdF9jb29raWUgPSBwYWQtPnByaXYtPmV2ZW50c19jb29raWU7Ci0gIH0KLSNlbmRpZgotCi0gIFBST0JFX0hBTkRMRSAocGFkLCB0eXBlIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLLCBkYXRhLCBwcm9iZV9zdG9wcGVkLAotICAgICAgcHJvYmVfaGFuZGxlZCk7Ci0KLSAgUFJPQkVfSEFORExFIChwYWQsIHR5cGUsIGRhdGEsIHByb2JlX3N0b3BwZWQsIHByb2JlX2hhbmRsZWQpOwotCi0gIEFDUVVJUkVfUEFSRU5UIChwYWQsIHBhcmVudCwgbm9fcGFyZW50KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgLyogTk9URTogd2UgcmVhZCB0aGUgY2hhaW5mdW5jIHVubG9ja2VkLgotICAgKiB3ZSBjYW5ub3QgaG9sZCB0aGUgbG9jayBmb3IgdGhlIHBhZCBzbyB3ZSBtaWdodCBzZW5kCi0gICAqIHRoZSBkYXRhIHRvIHRoZSB3cm9uZyBmdW5jdGlvbi4gVGhpcyBpcyBub3QgcmVhbGx5IGEKLSAgICogcHJvYmxlbSBzaW5jZSBmdW5jdGlvbnMgYXJlIGFzc2lnbmVkIGF0IGNyZWF0aW9uIHRpbWUKLSAgICogYW5kIGRvbid0IGNoYW5nZSB0aGF0IG9mdGVuLi4uICovCi0gIGlmIChHX0xJS0VMWSAodHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIpKSB7Ci0gICAgR3N0UGFkQ2hhaW5GdW5jdGlvbiBjaGFpbmZ1bmM7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoKGNoYWluZnVuYyA9IEdTVF9QQURfQ0hBSU5GVU5DIChwYWQpKSA9PSBOVUxMKSkKLSAgICAgIGdvdG8gbm9fZnVuY3Rpb247Ci0KLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAgICJjYWxsaW5nIGNoYWluZnVuY3Rpb24gJiVzIHdpdGggYnVmZmVyICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChjaGFpbmZ1bmMpLCBHU1RfQlVGRkVSIChkYXRhKSk7Ci0KLSAgICByZXQgPSBjaGFpbmZ1bmMgKHBhZCwgcGFyZW50LCBHU1RfQlVGRkVSX0NBU1QgKGRhdGEpKTsKLQotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgImNhbGxlZCBjaGFpbmZ1bmN0aW9uICYlcyB3aXRoIGJ1ZmZlciAlcCwgcmV0dXJuZWQgJXMiLAotICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChjaGFpbmZ1bmMpLCBkYXRhLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gIH0gZWxzZSB7Ci0gICAgR3N0UGFkQ2hhaW5MaXN0RnVuY3Rpb24gY2hhaW5saXN0ZnVuYzsKLQotICAgIGlmIChHX1VOTElLRUxZICgoY2hhaW5saXN0ZnVuYyA9IEdTVF9QQURfQ0hBSU5MSVNURlVOQyAocGFkKSkgPT0gTlVMTCkpCi0gICAgICBnb3RvIG5vX2Z1bmN0aW9uOwotCi0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAotICAgICAgICAiY2FsbGluZyBjaGFpbmxpc3RmdW5jdGlvbiAmJXMiLAotICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChjaGFpbmxpc3RmdW5jKSk7Ci0KLSAgICByZXQgPSBjaGFpbmxpc3RmdW5jIChwYWQsIHBhcmVudCwgR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGRhdGEpKTsKLQotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgImNhbGxlZCBjaGFpbmxpc3RmdW5jdGlvbiAmJXMsIHJldHVybmVkICVzIiwKLSAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoY2hhaW5saXN0ZnVuYyksIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgfQotCi0gIFJFTEVBU0VfUEFSRU5UIChwYXJlbnQpOwotCi0gIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAotICAgICAgICAiY2hhaW5pbmcsIGJ1dCBwYWQgd2FzIGZsdXNoaW5nIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLWVvczoKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsICJjaGFpbmluZywgYnV0IHBhZCB3YXMgRU9TIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci13cm9uZ19tb2RlOgotICB7Ci0gICAgZ19jcml0aWNhbCAoImNoYWluIG9uIHBhZCAlczolcyBidXQgaXQgd2FzIG5vdCBpbiBwdXNoIG1vZGUiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChkYXRhKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1wcm9iZV9oYW5kbGVkOgotICBoYW5kbGVkID0gVFJVRTsKLSAgLyogUEFTU1RIUk9VR0ggKi8KLXByb2JlX3N0b3BwZWQ6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgLyogV2UgdW5yZWYgdGhlIGJ1ZmZlciwgZXhjZXB0IGlmIHRoZSBwcm9iZSBoYW5kbGVkIGl0IChDVVNUT01fU1VDQ0VTU18xKSAqLwotICAgIGlmICghaGFuZGxlZCkKLSAgICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLQotICAgIHN3aXRjaCAocmV0KSB7Ci0gICAgICBjYXNlIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTOgotICAgICAgY2FzZSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkcm9wcGVkIG9yIGhhbmRsZWQgYnVmZmVyIik7Ci0gICAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImFuIGVycm9yIG9jY3VycmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotbm9fcGFyZW50OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiTm8gcGFyZW50IHdoZW4gY2hhaW5pbmcgJSIgR1NUX1BUUl9GT1JNQVQsIGRhdGEpOwotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1ub19mdW5jdGlvbjoKLSAgewotICAgIFJFTEVBU0VfUEFSRU5UIChwYXJlbnQpOwotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLSAgICBnX2NyaXRpY2FsICgiY2hhaW4gb24gcGFkICVzOiVzIGJ1dCBpdCBoYXMgbm8gY2hhaW5mdW5jdGlvbiIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9jaGFpbjoKLSAqIEBwYWQ6IGEgc2luayAjR3N0UGFkLCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIGlmIG5vdC4KLSAqIEBidWZmZXI6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RCdWZmZXIgdG8gc2VuZCwgcmV0dXJuIEdTVF9GTE9XX0VSUk9SCi0gKiAgICAgaWYgbm90LgotICoKLSAqIENoYWluIGEgYnVmZmVyIHRvIEBwYWQuCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgI0dTVF9GTE9XX0ZMVVNISU5HIGlmIHRoZSBwYWQgd2FzIGZsdXNoaW5nLgotICoKLSAqIElmIHRoZSBidWZmZXIgdHlwZSBpcyBub3QgYWNjZXB0YWJsZSBmb3IgQHBhZCAoYXMgbmVnb3RpYXRlZCB3aXRoIGEKLSAqIHByZWNlZGluZyBHU1RfRVZFTlRfQ0FQUyBldmVudCksIHRoaXMgZnVuY3Rpb24gcmV0dXJucwotICogI0dTVF9GTE9XX05PVF9ORUdPVElBVEVELgotICoKLSAqIFRoZSBmdW5jdGlvbiBwcm9jZWVkcyBjYWxsaW5nIHRoZSBjaGFpbiBmdW5jdGlvbiBpbnN0YWxsZWQgb24gQHBhZCAoc2VlCi0gKiBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbigpKSBhbmQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uIGlzCi0gKiByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiAjR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRCBpcyByZXR1cm5lZCBpZiBAcGFkIGhhcyBubwotICogY2hhaW4gZnVuY3Rpb24uCi0gKgotICogSW4gYWxsIGNhc2VzLCBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZSBjYWxsZXIgbG9zZXMgaXRzIHJlZmVyZW5jZSB0byBAYnVmZmVyCi0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwYWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X3BhZF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHBhZCksIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIEdTVF9GTE9XX0VSUk9SKTsKLQotICByZXR1cm4gZ3N0X3BhZF9jaGFpbl9kYXRhX3VuY2hlY2tlZCAocGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNILCBidWZmZXIpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3BhZF9jaGFpbl9saXN0X2RlZmF1bHQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICBndWludCBpLCBsZW47Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHBhZCwgImNoYWluaW5nIGVhY2ggYnVmZmVyIGluIGxpc3QgaW5kaXZpZHVhbGx5Iik7Ci0KLSAgbGVuID0gZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCk7Ci0KLSAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIGkpOwotICAgIHJldCA9Ci0gICAgICAgIGdzdF9wYWRfY2hhaW5fZGF0YV91bmNoZWNrZWQgKHBhZCwKLSAgICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNILAotICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSk7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotICB9Ci0gIGdzdF9idWZmZXJfbGlzdF91bnJlZiAobGlzdCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2NoYWluX2xpc3Q6Ci0gKiBAcGFkOiBhIHNpbmsgI0dzdFBhZCwgcmV0dXJucyBHU1RfRkxPV19FUlJPUiBpZiBub3QuCi0gKiBAbGlzdDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEJ1ZmZlckxpc3QgdG8gc2VuZCwgcmV0dXJuIEdTVF9GTE9XX0VSUk9SCi0gKiAgICAgaWYgbm90LgotICoKLSAqIENoYWluIGEgYnVmZmVybGlzdCB0byBAcGFkLgotICoKLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zICNHU1RfRkxPV19GTFVTSElORyBpZiB0aGUgcGFkIHdhcyBmbHVzaGluZy4KLSAqCi0gKiBJZiBAcGFkIHdhcyBub3QgbmVnb3RpYXRlZCBwcm9wZXJseSB3aXRoIGEgQ0FQUyBldmVudCwgdGhpcyBmdW5jdGlvbgotICogcmV0dXJucyAjR1NUX0ZMT1dfTk9UX05FR09USUFURUQuCi0gKgotICogVGhlIGZ1bmN0aW9uIHByb2NlZWRzIGNhbGxpbmcgdGhlIGNoYWlubGlzdCBmdW5jdGlvbiBpbnN0YWxsZWQgb24gQHBhZCAoc2VlCi0gKiBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uKCkpIGFuZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24gaXMKLSAqIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuICNHU1RfRkxPV19OT1RfU1VQUE9SVEVEIGlzIHJldHVybmVkIGlmIEBwYWQgaGFzIG5vCi0gKiBjaGFpbmxpc3QgZnVuY3Rpb24uCi0gKgotICogSW4gYWxsIGNhc2VzLCBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZSBjYWxsZXIgbG9zZXMgaXRzIHJlZmVyZW5jZSB0byBAbGlzdAotICogYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwYWQuCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9wYWRfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXJMaXN0ICogbGlzdCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfSVNfU0lOSyAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUl9MSVNUIChsaXN0KSwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIHJldHVybiBnc3RfcGFkX2NoYWluX2RhdGFfdW5jaGVja2VkIChwYWQsCi0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSX0xJU1QgfCBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCwgbGlzdCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcGFkX3B1c2hfZGF0YSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZVR5cGUgdHlwZSwgdm9pZCAqZGF0YSkKLXsKLSAgR3N0UGFkICpwZWVyOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQotICAgIGdvdG8gZmx1c2hpbmc7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRU9TIChwYWQpKSkKLSAgICBnb3RvIGVvczsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9NT0RFIChwYWQpICE9IEdTVF9QQURfTU9ERV9QVVNIKSkKLSAgICBnb3RvIHdyb25nX21vZGU7Ci0KLSNpZmRlZiBHU1RfRU5BQkxFX0VYVFJBX0NIRUNLUwotICBpZiAoR19VTkxJS0VMWSAocGFkLT5wcml2LT5sYXN0X2Nvb2tpZSAhPSBwYWQtPnByaXYtPmV2ZW50c19jb29raWUpKSB7Ci0gICAgaWYgKCFmaW5kX2V2ZW50X2J5X3R5cGUgKHBhZCwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCkpIHsKLSAgICAgIGdfd2FybmluZyAoR19TVFJMT0MKLSAgICAgICAgICAiOiVzOjwlczolcz4gR290IGRhdGEgZmxvdyBiZWZvcmUgc3RyZWFtLXN0YXJ0IGV2ZW50IiwKLSAgICAgICAgICBHX1NUUkZVTkMsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgfQotICAgIGlmICghZmluZF9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9TRUdNRU5ULCAwKSkgewotICAgICAgZ193YXJuaW5nIChHX1NUUkxPQwotICAgICAgICAgICI6JXM6PCVzOiVzPiBHb3QgZGF0YSBmbG93IGJlZm9yZSBzZWdtZW50IGV2ZW50IiwKLSAgICAgICAgICBHX1NUUkZVTkMsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgfQotICAgIHBhZC0+cHJpdi0+bGFzdF9jb29raWUgPSBwYWQtPnByaXYtPmV2ZW50c19jb29raWU7Ci0gIH0KLSNlbmRpZgotCi0gIGlmIChHX1VOTElLRUxZICgocmV0ID0gY2hlY2tfc3RpY2t5IChwYWQsIE5VTEwpKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBldmVudHNfZXJyb3I7Ci0KLSAgLyogZG8gYmxvY2sgcHJvYmVzICovCi0gIFBST0JFX0hBTkRMRSAocGFkLCB0eXBlIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLLCBkYXRhLCBwcm9iZV9zdG9wcGVkLAotICAgICAgcHJvYmVfaGFuZGxlZCk7Ci0KLSAgLyogcmVjaGVjayBzdGlja3kgZXZlbnRzIGJlY2F1c2UgdGhlIHByb2JlIG1pZ2h0IGhhdmUgY2F1c2UgYSByZWxpbmsgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKChyZXQgPSBjaGVja19zdGlja3kgKHBhZCwgTlVMTCkpKSAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIGV2ZW50c19lcnJvcjsKLQotICAvKiBkbyBwb3N0LWJsb2NraW5nIHByb2JlcyAqLwotICBQUk9CRV9IQU5ETEUgKHBhZCwgdHlwZSwgZGF0YSwgcHJvYmVfc3RvcHBlZCwgcHJvYmVfaGFuZGxlZCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKChwZWVyID0gR1NUX1BBRF9QRUVSIChwYWQpKSA9PSBOVUxMKSkKLSAgICBnb3RvIG5vdF9saW5rZWQ7Ci0KLSAgLyogdGFrZSByZWYgdG8gcGVlciBwYWQgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jayAqLwotICBnc3Rfb2JqZWN0X3JlZiAocGVlcik7Ci0gIHBhZC0+cHJpdi0+dXNpbmcrKzsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9jaGFpbl9kYXRhX3VuY2hlY2tlZCAocGVlciwgdHlwZSwgZGF0YSk7Ci0gIGRhdGEgPSBOVUxMOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IHJldDsKLSAgcGFkLT5wcml2LT51c2luZy0tOwotICBpZiAocGFkLT5wcml2LT51c2luZyA9PSAwKSB7Ci0gICAgLyogcGFkIGlzIG5vdCBhY3RpdmUgYW55bW9yZSwgdHJpZ2dlciBpZGxlIGNhbGxiYWNrcyAqLwotICAgIFBST0JFX05PX0RBVEEgKHBhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUEFEX1BST0JFX1RZUEVfSURMRSwKLSAgICAgICAgcHJvYmVfc3RvcHBlZCwgcmV0KTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SIHJlY292ZXJ5IGhlcmUgKi8KLSAgLyogRVJST1JTICovCi1mbHVzaGluZzoKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAgICJwdXNoaW5nLCBidXQgcGFkIHdhcyBmbHVzaGluZyIpOwotICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChkYXRhKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1lb3M6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLCAicHVzaGluZywgYnV0IHBhZCB3YXMgRU9TIik7Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IEdTVF9GTE9XX0VPUzsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChkYXRhKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotd3JvbmdfbW9kZToKLSAgewotICAgIGdfY3JpdGljYWwgKCJwdXNoaW5nIG9uIHBhZCAlczolcyBidXQgaXQgd2FzIG5vdCBhY3RpdmF0ZWQgaW4gcHVzaCBtb2RlIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICBwYWQtPkFCSS5hYmkubGFzdF9mbG93cmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZGF0YSkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotZXZlbnRzX2Vycm9yOgotICB7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgImVycm9yIHB1c2hpbmcgZXZlbnRzLCByZXR1cm4gJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IHJldDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChkYXRhKSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotcHJvYmVfaGFuZGxlZDoKLSAgaGFuZGxlZCA9IFRSVUU7Ci0gIC8qIFBBU1NUSFJPVUdIICovCi1wcm9iZV9zdG9wcGVkOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgaWYgKGRhdGEgIT0gTlVMTCAmJiAhaGFuZGxlZCkKLSAgICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLQotICAgIHN3aXRjaCAocmV0KSB7Ci0gICAgICBjYXNlIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTOgotICAgICAgY2FzZSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkcm9wcGVkIG9yIGhhbmRsZWQgYnVmZmVyIik7Ci0gICAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImFuIGVycm9yIG9jY3VycmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IHJldDsKLSAgICByZXR1cm4gcmV0OwotICB9Ci1ub3RfbGlua2VkOgotICB7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgInB1c2hpbmcsIGJ1dCBpdCB3YXMgbm90IGxpbmtlZCIpOwotICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19OT1RfTElOS0VEOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX0xJTktFRDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfcHVzaDoKLSAqIEBwYWQ6IGEgc291cmNlICNHc3RQYWQsIHJldHVybnMgI0dTVF9GTE9XX0VSUk9SIGlmIG5vdC4KLSAqIEBidWZmZXI6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RCdWZmZXIgdG8gcHVzaCByZXR1cm5zIEdTVF9GTE9XX0VSUk9SCi0gKiAgICAgaWYgbm90LgotICoKLSAqIFB1c2hlcyBhIGJ1ZmZlciB0byB0aGUgcGVlciBvZiBAcGFkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIGluc3RhbGxlZCBibG9jayBwcm9iZXMgYmVmb3JlIHRyaWdnZXJpbmcgYW55Ci0gKiBpbnN0YWxsZWQgZGF0YSBwcm9iZXMuCi0gKgotICogVGhlIGZ1bmN0aW9uIHByb2NlZWRzIGNhbGxpbmcgZ3N0X3BhZF9jaGFpbigpIG9uIHRoZSBwZWVyIHBhZCBhbmQgcmV0dXJucwotICogdGhlIHZhbHVlIGZyb20gdGhhdCBmdW5jdGlvbi4gSWYgQHBhZCBoYXMgbm8gcGVlciwgI0dTVF9GTE9XX05PVF9MSU5LRUQgd2lsbAotICogYmUgcmV0dXJuZWQuCi0gKgotICogSW4gYWxsIGNhc2VzLCBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZSBjYWxsZXIgbG9zZXMgaXRzIHJlZmVyZW5jZSB0byBAYnVmZmVyCi0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwZWVyIHBhZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfcGFkX3B1c2ggKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TUkMgKHBhZCksIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIEdTVF9GTE9XX0VSUk9SKTsKLQotICBHU1RfVFJBQ0VSX1BBRF9QVVNIX1BSRSAocGFkLCBidWZmZXIpOwotICByZXMgPSBnc3RfcGFkX3B1c2hfZGF0YSAocGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNILCBidWZmZXIpOwotICBHU1RfVFJBQ0VSX1BBRF9QVVNIX1BPU1QgKHBhZCwgcmVzKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3B1c2hfbGlzdDoKLSAqIEBwYWQ6IGEgc291cmNlICNHc3RQYWQsIHJldHVybnMgI0dTVF9GTE9XX0VSUk9SIGlmIG5vdC4KLSAqIEBsaXN0OiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0QnVmZmVyTGlzdCB0byBwdXNoIHJldHVybnMgR1NUX0ZMT1dfRVJST1IKLSAqICAgICBpZiBub3QuCi0gKgotICogUHVzaGVzIGEgYnVmZmVyIGxpc3QgdG8gdGhlIHBlZXIgb2YgQHBhZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCBpbnN0YWxsZWQgYmxvY2sgcHJvYmVzIGJlZm9yZSB0cmlnZ2VyaW5nIGFueQotICogaW5zdGFsbGVkIGRhdGEgcHJvYmVzLgotICoKLSAqIFRoZSBmdW5jdGlvbiBwcm9jZWVkcyBjYWxsaW5nIHRoZSBjaGFpbiBmdW5jdGlvbiBvbiB0aGUgcGVlciBwYWQgYW5kIHJldHVybnMKLSAqIHRoZSB2YWx1ZSBmcm9tIHRoYXQgZnVuY3Rpb24uIElmIEBwYWQgaGFzIG5vIHBlZXIsICNHU1RfRkxPV19OT1RfTElOS0VEIHdpbGwKLSAqIGJlIHJldHVybmVkLiBJZiB0aGUgcGVlciBwYWQgZG9lcyBub3QgaGF2ZSBhbnkgaW5zdGFsbGVkIGNoYWlubGlzdCBmdW5jdGlvbgotICogZXZlcnkgZ3JvdXAgYnVmZmVyIG9mIHRoZSBsaXN0IHdpbGwgYmUgbWVyZ2VkIGludG8gYSBub3JtYWwgI0dzdEJ1ZmZlciBhbmQKLSAqIGNoYWluZWQgdmlhIGdzdF9wYWRfY2hhaW4oKS4KLSAqCi0gKiBJbiBhbGwgY2FzZXMsIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgdGhlIGNhbGxlciBsb3NlcyBpdHMgcmVmZXJlbmNlIHRvIEBsaXN0Ci0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwZWVyIHBhZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfcGFkX3B1c2hfbGlzdCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXJMaXN0ICogbGlzdCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfSVNfU1JDIChwYWQpLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX1RSQUNFUl9QQURfUFVTSF9MSVNUX1BSRSAocGFkLCBsaXN0KTsKLSAgcmVzID0gZ3N0X3BhZF9wdXNoX2RhdGEgKHBhZCwKLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVJfTElTVCB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNILCBsaXN0KTsKLSAgR1NUX1RSQUNFUl9QQURfUFVTSF9MSVNUX1BPU1QgKHBhZCwgcmVzKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9wYWRfZ2V0X3JhbmdlX3VuY2hlY2tlZCAoR3N0UGFkICogcGFkLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwKLSAgICBHc3RCdWZmZXIgKiogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiBnZXRyYW5nZWZ1bmM7Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotICBHc3RCdWZmZXIgKnJlc19idWY7Ci0KLSAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX01PREUgKHBhZCkgIT0gR1NUX1BBRF9NT0RFX1BVTEwpKQotICAgIGdvdG8gd3JvbmdfbW9kZTsKLQotICBpZiAoR19VTkxJS0VMWSAoKHJldCA9IGNoZWNrX3N0aWNreSAocGFkLCBOVUxMKSkpICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gZXZlbnRzX2Vycm9yOwotCi0gIHJlc19idWYgPSAqYnVmZmVyOwotCi0gIC8qIHdoZW4gb25lIG9mIHRoZSBwcm9iZXMgcmV0dXJucyBEUk9QUEVELCBwcm9iZV9zdG9wcGVkIHdpbGwgYmUgY2FsbGVkCi0gICAqIGFuZCB3ZSBza2lwIGNhbGxpbmcgdGhlIGdldHJhbmdlIGZ1bmN0aW9uLCByZXNfYnVmIHNob3VsZCB0aGVuIGNvbnRhaW4gYQotICAgKiB2YWxpZCByZXN1bHQgYnVmZmVyICovCi0gIFBST0JFX1BVTEwgKHBhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwgfCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0ssCi0gICAgICByZXNfYnVmLCBvZmZzZXQsIHNpemUsIHByb2JlX3N0b3BwZWQpOwotCi0gIC8qIHJlY2hlY2sgc3RpY2t5IGV2ZW50cyBiZWNhdXNlIHRoZSBwcm9iZSBtaWdodCBoYXZlIGNhdXNlIGEgcmVsaW5rICovCi0gIGlmIChHX1VOTElLRUxZICgocmV0ID0gY2hlY2tfc3RpY2t5IChwYWQsIE5VTEwpKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBldmVudHNfZXJyb3I7Ci0KLSAgQUNRVUlSRV9QQVJFTlQgKHBhZCwgcGFyZW50LCBub19wYXJlbnQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICBpZiAoR19VTkxJS0VMWSAoKGdldHJhbmdlZnVuYyA9IEdTVF9QQURfR0VUUkFOR0VGVU5DIChwYWQpKSA9PSBOVUxMKSkKLSAgICBnb3RvIG5vX2Z1bmN0aW9uOwotCi0gIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAiY2FsbGluZyBnZXRyYW5nZWZ1bmMgJXMsIG9mZnNldCAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLCBzaXplICV1IiwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGdldHJhbmdlZnVuYyksIG9mZnNldCwgc2l6ZSk7Ci0KLSAgcmV0ID0gZ2V0cmFuZ2VmdW5jIChwYWQsIHBhcmVudCwgb2Zmc2V0LCBzaXplLCAmcmVzX2J1Zik7Ci0KLSAgUkVMRUFTRV9QQVJFTlQgKHBhcmVudCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIGdldF9yYW5nZV9mYWlsZWQ7Ci0KLSAgLyogY2FuIG9ubHkgZmlyZSB0aGUgc2lnbmFsIGlmIHdlIGhhdmUgYSB2YWxpZCBidWZmZXIgKi8KLXByb2JlZF9kYXRhOgotICBQUk9CRV9QVUxMIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9QVUxMIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwKLSAgICAgIHJlc19idWYsIG9mZnNldCwgc2l6ZSwgcHJvYmVfc3RvcHBlZF91bnJlZik7Ci0gIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSByZXQ7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLQotICAqYnVmZmVyID0gcmVzX2J1ZjsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAotICAgICAgICAiZ2V0cmFuZ2UsIGJ1dCBwYWQgd2FzIGZsdXNoaW5nIik7Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLXdyb25nX21vZGU6Ci0gIHsKLSAgICBnX2NyaXRpY2FsICgiZ2V0cmFuZ2Ugb24gcGFkICVzOiVzIGJ1dCBpdCB3YXMgbm90IGFjdGl2YXRlZCBpbiBwdWxsIG1vZGUiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1ldmVudHNfZXJyb3I6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLCAiZXJyb3IgcHVzaGluZyBldmVudHMiKTsKLSAgICBwYWQtPkFCSS5hYmkubGFzdF9mbG93cmV0ID0gcmV0OwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci1ub19wYXJlbnQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJubyBwYXJlbnQiKTsKLSAgICBwYWQtPkFCSS5hYmkubGFzdF9mbG93cmV0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgfQotbm9fZnVuY3Rpb246Ci0gIHsKLSAgICBnX2NyaXRpY2FsICgiZ2V0cmFuZ2Ugb24gcGFkICVzOiVzIGJ1dCBpdCBoYXMgbm8gZ2V0cmFuZ2VmdW5jdGlvbiIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgUkVMRUFTRV9QQVJFTlQgKHBhcmVudCk7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICB9Ci1wcm9iZV9zdG9wcGVkOgotICB7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgInByb2JlIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1MpIHsKLSAgICAgIGlmIChyZXNfYnVmKSB7Ci0gICAgICAgIC8qIHRoZSBwcm9iZSBmaWxsZWQgdGhlIGJ1ZmZlciBhbmQgYXNrcyB1cyB0byBub3QgY2FsbCB0aGUgZ2V0cmFuZ2UKLSAgICAgICAgICogYW55bW9yZSwgd2UgY29udGludWUgd2l0aCB0aGUgcG9zdCBwcm9iZXMgdGhlbi4gKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaGFuZGxlZCBidWZmZXIiKTsKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICAgIGdvdG8gcHJvYmVkX2RhdGE7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBubyBidWZmZXIsIHdlIGFyZSBFT1MgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gYnVmZmVyLCByZXR1cm4gRU9TIik7Ci0gICAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IHJldDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0KLSAgICByZXR1cm4gcmV0OwotICB9Ci1wcm9iZV9zdG9wcGVkX3VucmVmOgotICB7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1NDSEVEVUxJTkcsIHBhZCwKLSAgICAgICAgInByb2JlIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIC8qIGlmIHdlIGRyb3AgaGVyZSwgaXQgc2lnbmFscyBFT1MgKi8KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTKQotICAgICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSByZXQ7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgIGlmICgqYnVmZmVyID09IE5VTEwpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChyZXNfYnVmKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci1nZXRfcmFuZ2VfZmFpbGVkOgotICB7Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IHJldDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgR1NUX0NBVF9MRVZFTF9MT0cgKEdTVF9DQVRfU0NIRURVTElORywKLSAgICAgICAgKHJldCA+PSBHU1RfRkxPV19FT1MpID8gR1NUX0xFVkVMX0lORk8gOiBHU1RfTEVWRUxfV0FSTklORywKLSAgICAgICAgcGFkLCAiZ2V0cmFuZ2UgZmFpbGVkLCBmbG93OiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9nZXRfcmFuZ2U6Ci0gKiBAcGFkOiBhIHNyYyAjR3N0UGFkLCByZXR1cm5zICNHU1RfRkxPV19FUlJPUiBpZiBub3QuCi0gKiBAb2Zmc2V0OiBUaGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBidWZmZXIKLSAqIEBzaXplOiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIKLSAqIEBidWZmZXI6IChvdXQgY2FsbGVlLWFsbG9jYXRlcyk6IGEgcG9pbnRlciB0byBob2xkIHRoZSAjR3N0QnVmZmVyLAotICogICAgIHJldHVybnMgI0dTVF9GTE9XX0VSUk9SIGlmICVOVUxMLgotICoKLSAqIFdoZW4gQHBhZCBpcyBmbHVzaGluZyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgI0dTVF9GTE9XX0ZMVVNISU5HCi0gKiBpbW1lZGlhdGVseSBhbmQgQGJ1ZmZlciBpcyAlTlVMTC4KLSAqCi0gKiBDYWxscyB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24gb2YgQHBhZCwgc2VlICNHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uIGZvciBhCi0gKiBkZXNjcmlwdGlvbiBvZiBhIGdldHJhbmdlIGZ1bmN0aW9uLiBJZiBAcGFkIGhhcyBubyBnZXRyYW5nZSBmdW5jdGlvbgotICogaW5zdGFsbGVkIChzZWUgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24oKSkgdGhpcyBmdW5jdGlvbiByZXR1cm5zCi0gKiAjR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRC4KLSAqCi0gKiBJZiBAYnVmZmVyIHBvaW50cyB0byBhIHZhcmlhYmxlIGhvbGRpbmcgJU5VTEwsIGEgdmFsaWQgbmV3ICNHc3RCdWZmZXIgd2lsbCBiZQotICogcGxhY2VkIGluIEBidWZmZXIgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgI0dTVF9GTE9XX09LLiBUaGUgbmV3IGJ1ZmZlcgotICogbXVzdCBiZSBmcmVlZCB3aXRoIGdzdF9idWZmZXJfdW5yZWYoKSBhZnRlciB1c2FnZS4KLSAqCi0gKiBXaGVuIEBidWZmZXIgcG9pbnRzIHRvIGEgdmFyaWFibGUgdGhhdCBwb2ludHMgdG8gYSB2YWxpZCAjR3N0QnVmZmVyLCB0aGUKLSAqIGJ1ZmZlciB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSByZXN1bHQgZGF0YSB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucwotICogI0dTVF9GTE9XX09LLiBJZiB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlciB0aGFuIEBzaXplLCBvbmx5Ci0gKiBAc2l6ZSBieXRlcyB3aWxsIGJlIGZpbGxlZCBpbiB0aGUgcmVzdWx0IGJ1ZmZlciBhbmQgaXRzIHNpemUgd2lsbCBiZSB1cGRhdGVkCi0gKiBhY2NvcmRpbmdseS4KLSAqCi0gKiBOb3RlIHRoYXQgbGVzcyB0aGFuIEBzaXplIGJ5dGVzIGNhbiBiZSByZXR1cm5lZCBpbiBAYnVmZmVyIHdoZW4sIGZvciBleGFtcGxlLAotICogYW4gRU9TIGNvbmRpdGlvbiBpcyBuZWFyIG9yIHdoZW4gQGJ1ZmZlciBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgQHNpemUKLSAqIGJ5dGVzLiBUaGUgY2FsbGVyIHNob3VsZCBjaGVjayB0aGUgcmVzdWx0IGJ1ZmZlciBzaXplIHRvIGdldCB0aGUgcmVzdWx0IHNpemUuCi0gKgotICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW55IG90aGVyIHJlc3VsdCB2YWx1ZSB0aGFuICNHU1RfRkxPV19PSywgQGJ1ZmZlcgotICogd2lsbCBiZSB1bmNoYW5nZWQuCi0gKgotICogVGhpcyBpcyBhIGxvd2xldmVsIGZ1bmN0aW9uLiBVc3VhbGx5IGdzdF9wYWRfcHVsbF9yYW5nZSgpIGlzIHVzZWQuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiBmcm9tIHRoZSBwYWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X3BhZF9nZXRfcmFuZ2UgKEdzdFBhZCAqIHBhZCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCi0gICAgR3N0QnVmZmVyICoqIGJ1ZmZlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9QQURfSVNfU1JDIChwYWQpLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKmJ1ZmZlciA9PSBOVUxMIHx8IChHU1RfSVNfQlVGRkVSICgqYnVmZmVyKQotICAgICAgICAgICYmIGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWZmZXIpID49IHNpemUpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgcmV0dXJuIGdzdF9wYWRfZ2V0X3JhbmdlX3VuY2hlY2tlZCAocGFkLCBvZmZzZXQsIHNpemUsIGJ1ZmZlcik7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9wdWxsX3JhbmdlOgotICogQHBhZDogYSBzaW5rICNHc3RQYWQsIHJldHVybnMgR1NUX0ZMT1dfRVJST1IgaWYgbm90LgotICogQG9mZnNldDogVGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgYnVmZmVyCi0gKiBAc2l6ZTogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyCi0gKiBAYnVmZmVyOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpOiBhIHBvaW50ZXIgdG8gaG9sZCB0aGUgI0dzdEJ1ZmZlciwgcmV0dXJucwotICogICAgIEdTVF9GTE9XX0VSUk9SIGlmICVOVUxMLgotICoKLSAqIFB1bGxzIGEgQGJ1ZmZlciBmcm9tIHRoZSBwZWVyIHBhZCBvciBmaWxscyB1cCBhIHByb3ZpZGVkIGJ1ZmZlci4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgdHJpZ2dlciB0aGUgcGFkIGJsb2NrIHNpZ25hbCBpZiBpdCB3YXMKLSAqIGluc3RhbGxlZC4KLSAqCi0gKiBXaGVuIEBwYWQgaXMgbm90IGxpbmtlZCAjR1NUX0ZMT1dfTk9UX0xJTktFRCBpcyByZXR1cm5lZCBlbHNlIHRoaXMKLSAqIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlc3VsdCBvZiBnc3RfcGFkX2dldF9yYW5nZSgpIG9uIHRoZSBwZWVyIHBhZC4KLSAqIFNlZSBnc3RfcGFkX2dldF9yYW5nZSgpIGZvciBhIGxpc3Qgb2YgcmV0dXJuIHZhbHVlcyBhbmQgZm9yIHRoZQotICogc2VtYW50aWNzIG9mIHRoZSBhcmd1bWVudHMgb2YgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBJZiBAYnVmZmVyIHBvaW50cyB0byBhIHZhcmlhYmxlIGhvbGRpbmcgJU5VTEwsIGEgdmFsaWQgbmV3ICNHc3RCdWZmZXIgd2lsbCBiZQotICogcGxhY2VkIGluIEBidWZmZXIgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgI0dTVF9GTE9XX09LLiBUaGUgbmV3IGJ1ZmZlcgotICogbXVzdCBiZSBmcmVlZCB3aXRoIGdzdF9idWZmZXJfdW5yZWYoKSBhZnRlciB1c2FnZS4gV2hlbiB0aGlzIGZ1bmN0aW9uCi0gKiByZXR1cm5zIGFueSBvdGhlciByZXN1bHQgdmFsdWUsIEBidWZmZXIgd2lsbCBzdGlsbCBwb2ludCB0byAlTlVMTC4KLSAqCi0gKiBXaGVuIEBidWZmZXIgcG9pbnRzIHRvIGEgdmFyaWFibGUgdGhhdCBwb2ludHMgdG8gYSB2YWxpZCAjR3N0QnVmZmVyLCB0aGUKLSAqIGJ1ZmZlciB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSByZXN1bHQgZGF0YSB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucwotICogI0dTVF9GTE9XX09LLiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbnkgb3RoZXIgcmVzdWx0IHZhbHVlLAotICogQGJ1ZmZlciB3aWxsIGJlIHVuY2hhbmdlZC4gSWYgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiBAc2l6ZSwgb25seQotICogQHNpemUgYnl0ZXMgd2lsbCBiZSBmaWxsZWQgaW4gdGhlIHJlc3VsdCBidWZmZXIgYW5kIGl0cyBzaXplIHdpbGwgYmUgdXBkYXRlZAotICogYWNjb3JkaW5nbHkuCi0gKgotICogTm90ZSB0aGF0IGxlc3MgdGhhbiBAc2l6ZSBieXRlcyBjYW4gYmUgcmV0dXJuZWQgaW4gQGJ1ZmZlciB3aGVuLCBmb3IgZXhhbXBsZSwKLSAqIGFuIEVPUyBjb25kaXRpb24gaXMgbmVhciBvciB3aGVuIEBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIEBzaXplCi0gKiBieXRlcy4gVGhlIGNhbGxlciBzaG91bGQgY2hlY2sgdGhlIHJlc3VsdCBidWZmZXIgc2l6ZSB0byBnZXQgdGhlIHJlc3VsdCBzaXplLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gZnJvbSB0aGUgcGVlciBwYWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X3BhZF9wdWxsX3JhbmdlIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLAotICAgIEdzdEJ1ZmZlciAqKiBidWZmZXIpCi17Ci0gIEdzdFBhZCAqcGVlcjsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdEJ1ZmZlciAqcmVzX2J1ZjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9JU19TSU5LIChwYWQpLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKmJ1ZmZlciA9PSBOVUxMIHx8IChHU1RfSVNfQlVGRkVSICgqYnVmZmVyKQotICAgICAgICAgICYmIGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWZmZXIpID49IHNpemUpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX1RSQUNFUl9QQURfUFVMTF9SQU5HRV9QUkUgKHBhZCwgb2Zmc2V0LCBzaXplKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX01PREUgKHBhZCkgIT0gR1NUX1BBRF9NT0RFX1BVTEwpKQotICAgIGdvdG8gd3JvbmdfbW9kZTsKLQotICByZXNfYnVmID0gKmJ1ZmZlcjsKLQotICAvKiB3aGVuIG9uZSBvZiB0aGUgcHJvYmVzIHJldHVybnMgRFJPUFBFRCwgcHJvYmVfc3RvcHBlZCB3aWxsIGJlCi0gICAqIGNhbGxlZCBhbmQgd2Ugc2tpcCBjYWxsaW5nIHRoZSBwZWVyIGdldHJhbmdlIGZ1bmN0aW9uLiAqYnVmZmVyIHNob3VsZCB0aGVuCi0gICAqIGNvbnRhaW4gYSB2YWxpZCBidWZmZXIgKi8KLSAgUFJPQkVfUFVMTCAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfUFVMTCB8IEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSywKLSAgICAgIHJlc19idWYsIG9mZnNldCwgc2l6ZSwgcHJvYmVfc3RvcHBlZCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKChwZWVyID0gR1NUX1BBRF9QRUVSIChwYWQpKSA9PSBOVUxMKSkKLSAgICBnb3RvIG5vdF9saW5rZWQ7Ci0KLSAgZ3N0X29iamVjdF9yZWYgKHBlZXIpOwotICBwYWQtPnByaXYtPnVzaW5nKys7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIHJldCA9IGdzdF9wYWRfZ2V0X3JhbmdlX3VuY2hlY2tlZCAocGVlciwgb2Zmc2V0LCBzaXplLCAmcmVzX2J1Zik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBwYWQtPnByaXYtPnVzaW5nLS07Ci0gIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSByZXQ7Ci0gIGlmIChwYWQtPnByaXYtPnVzaW5nID09IDApIHsKLSAgICAvKiBwYWQgaXMgbm90IGFjdGl2ZSBhbnltb3JlLCB0cmlnZ2VyIGlkbGUgY2FsbGJhY2tzICovCi0gICAgUFJPQkVfTk9fREFUQSAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfUFVMTCB8IEdTVF9QQURfUFJPQkVfVFlQRV9JRExFLAotICAgICAgICBwcm9iZV9zdG9wcGVkX3VucmVmLCByZXQpOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgZ290byBwdWxsX3JhbmdlX2ZhaWxlZDsKLQotcHJvYmVkX2RhdGE6Ci0gIFBST0JFX1BVTEwgKHBhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwgfCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLAotICAgICAgcmVzX2J1Ziwgb2Zmc2V0LCBzaXplLCBwcm9iZV9zdG9wcGVkX3VucmVmKTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAqYnVmZmVyID0gcmVzX2J1ZjsKLQotICBHU1RfVFJBQ0VSX1BBRF9QVUxMX1JBTkdFX1BPU1QgKHBhZCwgKmJ1ZmZlciwgcmV0KTsKLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUiByZWNvdmVyeSBoZXJlICovCi1mbHVzaGluZzoKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9TQ0hFRFVMSU5HLCBwYWQsCi0gICAgICAgICJwdWxscmFuZ2UsIGJ1dCBwYWQgd2FzIGZsdXNoaW5nIik7Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIHJldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIGdvdG8gZG9uZTsKLSAgfQotd3JvbmdfbW9kZToKLSAgewotICAgIGdfY3JpdGljYWwgKCJwdWxscmFuZ2Ugb24gcGFkICVzOiVzIGJ1dCBpdCB3YXMgbm90IGFjdGl2YXRlZCBpbiBwdWxsIG1vZGUiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXByb2JlX3N0b3BwZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLCAicHJlIHByb2JlIHJldHVybmVkICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1MpIHsKLSAgICAgIGlmIChyZXNfYnVmKSB7Ci0gICAgICAgIC8qIHRoZSBwcm9iZSBmaWxsZWQgdGhlIGJ1ZmZlciBhbmQgYXNrcyB1cyB0byBub3QgZm9yd2FyZCB0byB0aGUgcGVlcgotICAgICAgICAgKiBhbnltb3JlLCB3ZSBjb250aW51ZSB3aXRoIHRoZSBwb3N0IHByb2JlcyB0aGVuICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImhhbmRsZWQgYnVmZmVyIik7Ci0gICAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgICAgICBnb3RvIHByb2JlZF9kYXRhOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogbm8gYnVmZmVyLCB3ZSBhcmUgRU9TIHRoZW4gKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gYnVmZmVyLCByZXR1cm4gRU9TIik7Ci0gICAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgIH0KLSAgICB9Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IHJldDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLW5vdF9saW5rZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAotICAgICAgICAicHVsbGluZyByYW5nZSwgYnV0IGl0IHdhcyBub3QgbGlua2VkIik7Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IEdTVF9GTE9XX05PVF9MSU5LRUQ7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXB1bGxfcmFuZ2VfZmFpbGVkOgotICB7Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IHJldDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBHU1RfQ0FUX0xFVkVMX0xPRyAoR1NUX0NBVF9TQ0hFRFVMSU5HLAotICAgICAgICAocmV0ID49IEdTVF9GTE9XX0VPUykgPyBHU1RfTEVWRUxfSU5GTyA6IEdTVF9MRVZFTF9XQVJOSU5HLAotICAgICAgICBwYWQsICJwdWxscmFuZ2UgZmFpbGVkLCBmbG93OiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXByb2JlX3N0b3BwZWRfdW5yZWY6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfU0NIRURVTElORywgcGFkLAotICAgICAgICAicG9zdCBwcm9iZSByZXR1cm5lZCAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLQotICAgIC8qIGlmIHdlIGRyb3AgaGVyZSwgaXQgc2lnbmFscyBFT1MgKi8KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTKQotICAgICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotCi0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IHJldDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAgIGlmICgqYnVmZmVyID09IE5VTEwpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChyZXNfYnVmKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLWRvbmU6Ci0gIEdTVF9UUkFDRVJfUEFEX1BVTExfUkFOR0VfUE9TVCAocGFkLCBOVUxMLCByZXQpOwotICByZXR1cm4gcmV0OwotfQotCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHBhZCBvYmplY3QgbG9jayAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLXN0b3JlX3N0aWNreV9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBndWludCBpLCBsZW47Ci0gIEdzdEV2ZW50VHlwZSB0eXBlOwotICBHQXJyYXkgKmV2ZW50czsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIGNvbnN0IGdjaGFyICpuYW1lID0gTlVMTDsKLSAgZ2Jvb2xlYW4gaW5zZXJ0ID0gVFJVRTsKLQotICB0eXBlID0gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KTsKLQotICAvKiBTdG9yZSBhbGwgc3RpY2t5IGV2ZW50cyBleGNlcHQgU0VHTUVOVC9FT1Mgd2hlbiB3ZSdyZSBmbHVzaGluZywKLSAgICogb3RoZXJ3aXNlIHRoZXkgY2FuIGJlIGRyb3BwZWQgYW5kIG5vdGhpbmcgd291bGQgZXZlciByZXNlbmQgdGhlbS4KLSAgICogT25seSBkbyB0aGF0IGZvciBhY3RpdmF0ZWQgcGFkcyB0aG91Z2gsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIGJ1ZyEKLSAgICovCi0gIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX01PREUgKHBhZCkgPT0gR1NUX1BBRF9NT0RFX05PTkUKLSAgICAgICAgICB8fCAoR1NUX1BBRF9JU19GTFVTSElORyAocGFkKSAmJiAodHlwZSA9PSBHU1RfRVZFTlRfU0VHTUVOVAotICAgICAgICAgICAgICAgICAgfHwgdHlwZSA9PSBHU1RfRVZFTlRfRU9TKSkpKQotICAgIGdvdG8gZmx1c2hlZDsKLQotICAvKiBVbnNldCB0aGUgRU9TIGZsYWcgd2hlbiByZWNlaXZlZCBTVFJFQU1fU1RBUlQgZXZlbnQsIHNvIHBhZCBjYW4KLSAgICogc3RvcmUgc3RpY2t5IGV2ZW50IGFuZCB0aGVuIHB1c2ggaXQgbGF0ZXIgKi8KLSAgaWYgKHR5cGUgPT0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJSZW1vdmluZyBwZW5kaW5nIEVPUyBhbmQgU3RyZWFtR3JvdXBEb25lIGV2ZW50cyIpOwotICAgIHJlbW92ZV9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9FT1MpOwotICAgIHJlbW92ZV9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9TVFJFQU1fR1JPVVBfRE9ORSk7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19FT1MpOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRU9TIChwYWQpKSkKLSAgICBnb3RvIGVvczsKLQotICBpZiAodHlwZSAmIEdTVF9FVkVOVF9UWVBFX1NUSUNLWV9NVUxUSSkKLSAgICBuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KSk7Ci0KLSAgZXZlbnRzID0gcGFkLT5wcml2LT5ldmVudHM7Ci0gIGxlbiA9IGV2ZW50cy0+bGVuOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIFBhZEV2ZW50ICpldiA9ICZnX2FycmF5X2luZGV4IChldmVudHMsIFBhZEV2ZW50LCBpKTsKLQotICAgIGlmIChldi0+ZXZlbnQgPT0gTlVMTCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKHR5cGUgPT0gR1NUX0VWRU5UX1RZUEUgKGV2LT5ldmVudCkpIHsKLSAgICAgIC8qIG1hdGNoaW5nIHR5cGVzLCBjaGVjayBtYXRjaGluZyBuYW1lIGlmIG5lZWRlZCAqLwotICAgICAgaWYgKG5hbWUgJiYgIWdzdF9ldmVudF9oYXNfbmFtZSAoZXYtPmV2ZW50LCBuYW1lKSkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIC8qIG92ZXJ3cml0ZSAqLwotICAgICAgaWYgKChyZXMgPSBnc3RfZXZlbnRfcmVwbGFjZSAoJmV2LT5ldmVudCwgZXZlbnQpKSkKLSAgICAgICAgZXYtPnJlY2VpdmVkID0gRkFMU0U7Ci0KLSAgICAgIGluc2VydCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPCBHU1RfRVZFTlRfVFlQRSAoZXYtPmV2ZW50KSB8fCAodHlwZSAhPSBHU1RfRVZFTlRfVFlQRSAoZXYtPmV2ZW50KQotICAgICAgICAgICAgJiYgR1NUX0VWRU5UX1RZUEUgKGV2LT5ldmVudCkgPT0gR1NUX0VWRU5UX0VPUykpIHsKLSAgICAgIC8qIFNUUkVBTV9TVEFSVCwgQ0FQUyBhbmQgU0VHTUVOVCBtdXN0IGJlIGRlbGl2ZXJlZCBpbiB0aGlzIG9yZGVyLiBCeQotICAgICAgICogc3RvcmluZyB0aGUgc3RpY2t5IG9yZGVyZWQgd2UgY2FuIGNoZWNrIHRoYXQgdGhpcyBpcyByZXNwZWN0ZWQuICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAoR1NUX0VWRU5UX1RZUEUgKGV2LT5ldmVudCkgPD0gR1NUX0VWRU5UX1NFR01FTlQKLSAgICAgICAgICAgICAgfHwgR1NUX0VWRU5UX1RZUEUgKGV2LT5ldmVudCkgPT0gR1NUX0VWRU5UX0VPUykpCi0gICAgICAgIGdfd2FybmluZyAoR19TVFJMT0MKLSAgICAgICAgICAgICI6JXM6PCVzOiVzPiBTdGlja3kgZXZlbnQgbWlzb3JkZXJpbmcsIGdvdCAnJXMnIGJlZm9yZSAnJXMnIiwKLSAgICAgICAgICAgIEdfU1RSRlVOQywgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLAotICAgICAgICAgICAgZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUgKEdTVF9FVkVOVF9UWVBFIChldi0+ZXZlbnQpKSwKLSAgICAgICAgICAgIGdzdF9ldmVudF90eXBlX2dldF9uYW1lICh0eXBlKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKGluc2VydCkgewotICAgIFBhZEV2ZW50IGV2OwotICAgIGV2LmV2ZW50ID0gZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotICAgIGV2LnJlY2VpdmVkID0gRkFMU0U7Ci0gICAgZ19hcnJheV9pbnNlcnRfdmFsIChldmVudHMsIGksIGV2KTsKLSAgICByZXMgPSBUUlVFOwotICB9Ci0KLSAgaWYgKHJlcykgewotICAgIHBhZC0+cHJpdi0+ZXZlbnRzX2Nvb2tpZSsrOwotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BFTkRJTkdfRVZFTlRTKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJzdG9yZWQgc3RpY2t5IGV2ZW50ICVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm90aWZ5IGNhcHMiKTsKLSAgICAgICAgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjICgoR09iamVjdCAqKSBwYWQsIHBzcGVjX2NhcHMpOwotCi0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKHR5cGUgPT0gR1NUX0VWRU5UX0VPUykgewotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0VPUyk7Ci0gICAgcGFkLT5BQkkuYWJpLmxhc3RfZmxvd3JldCA9IEdTVF9GTE9XX0VPUzsKLSAgfQotCi0gIHJldHVybiBHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpID8gR1NUX0ZMT1dfRkxVU0hJTkcgOiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLWZsdXNoZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwYWQgaXMgZmx1c2hpbmciKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLWVvczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCBpcyBFT1MiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQ6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqIEBldmVudDogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RFdmVudAotICoKLSAqIFN0b3JlIHRoZSBzdGlja3kgQGV2ZW50IG9uIEBwYWQKLSAqCi0gKiBSZXR1cm5zOiAjR1NUX0ZMT1dfT0sgb24gc3VjY2VzcywgI0dTVF9GTE9XX0ZMVVNISU5HIHdoZW4gdGhlIHBhZAotICogd2FzIGZsdXNoaW5nIG9yICNHU1RfRkxPV19FT1Mgd2hlbiB0aGUgcGFkIHdhcyBFT1MuCi0gKgotICogU2luY2U6IDEuMgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VWRU5UIChldmVudCksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIHJldCA9IHN0b3JlX3N0aWNreV9ldmVudCAocGFkLCBldmVudCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc3RpY2t5X2NoYW5nZWQgKEdzdFBhZCAqIHBhZCwgUGFkRXZlbnQgKiBldiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBQdXNoU3RpY2t5RGF0YSAqZGF0YSA9IHVzZXJfZGF0YTsKLQotICAvKiBGb3J3YXJkIGFsbCBzdGlja3kgZXZlbnRzIGJlZm9yZSBvdXIgY3VycmVudCBvbmUgdGhhdCBhcmUgcGVuZGluZyAqLwotICBpZiAoZXYtPmV2ZW50ICE9IGRhdGEtPmV2ZW50Ci0gICAgICAmJiBHU1RfRVZFTlRfVFlQRSAoZXYtPmV2ZW50KSA8IEdTVF9FVkVOVF9UWVBFIChkYXRhLT5ldmVudCkpCi0gICAgcmV0dXJuIHB1c2hfc3RpY2t5IChwYWQsIGV2LCBkYXRhKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHBhZCBMT0NLICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3BhZF9wdXNoX2V2ZW50X3VuY2hlY2tlZCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50LAotICAgIEdzdFBhZFByb2JlVHlwZSB0eXBlKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0UGFkICpwZWVycGFkOwotICBHc3RFdmVudFR5cGUgZXZlbnRfdHlwZTsKLQotICAvKiBwYXNzIHRoZSBhZGp1c3RlZCBldmVudCBvbi4gV2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYKLSAgICogdGhlcmUgaXMgbm8gcGVlciBwYWQgYmVjYXVzZSBvZiB0aGUgcHJvYmVzLiAqLwotICBldmVudCA9IGFwcGx5X3BhZF9vZmZzZXQgKHBhZCwgZXZlbnQsIEdTVF9QQURfSVNfU0lOSyAocGFkKSk7Ci0KLSAgLyogVHdvIGNoZWNrcyB0byBiZSBtYWRlOgotICAgKiAuICh1bilzZXQgdGhlIEZMVVNISU5HIGZsYWcgZm9yIGZsdXNoaW5nIGV2ZW50cywKLSAgICogLiBoYW5kbGUgcGFkIGJsb2NraW5nICovCi0gIGV2ZW50X3R5cGUgPSBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpOwotICBzd2l0Y2ggKGV2ZW50X3R5cGUpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICAgIEdTVF9QQURfU0VUX0ZMVVNISU5HIChwYWQpOwotCi0gICAgICBHU1RfUEFEX0JMT0NLX0JST0FEQ0FTVCAocGFkKTsKLSAgICAgIHR5cGUgfD0gR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGlmIChHX1VOTElLRUxZICghR1NUX1BBRF9JU19BQ1RJVkUgKHBhZCkpKQotICAgICAgICBnb3RvIGluYWN0aXZlOwotCi0gICAgICBHU1RfUEFEX1VOU0VUX0ZMVVNISU5HIChwYWQpOwotCi0gICAgICAvKiBSZW1vdmUgc3RpY2t5IEVPUyBldmVudHMgKi8KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJSZW1vdmluZyBwZW5kaW5nIEVPUyBldmVudHMiKTsKLSAgICAgIHJlbW92ZV9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9FT1MpOwotICAgICAgcmVtb3ZlX2V2ZW50X2J5X3R5cGUgKHBhZCwgR1NUX0VWRU5UX1NUUkVBTV9HUk9VUF9ET05FKTsKLSAgICAgIHJlbW92ZV9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9TRUdNRU5UKTsKLSAgICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX0ZMQUdfRU9TKTsKLSAgICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19PSzsKLQotICAgICAgdHlwZSB8PSBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0g7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgIHsKLSAgICAgIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0lTX0ZMVVNISU5HIChwYWQpKSkKLSAgICAgICAgZ290byBmbHVzaGVkOwotCi0gICAgICAvKiBObyBuZWVkIHRvIGNoZWNrIGZvciBFT1MgaGVyZSBhcyBlaXRoZXIgdGhlIGNhbGxlciAoZ3N0X3BhZF9wdXNoX2V2ZW50KCkpCi0gICAgICAgKiBjaGVja2VkIGFscmVhZHkgb3IgdGhpcyBpcyBjYWxsZWQgYXMgcGFydCBvZiBwdXNoaW5nIHN0aWNreSBldmVudHMsCi0gICAgICAgKiBpbiB3aGljaCBjYXNlIHdlIHN0aWxsIHdhbnQgdG8gZm9yd2FyZCB0aGUgRU9TIGV2ZW50IGRvd25zdHJlYW0uCi0gICAgICAgKi8KLQotICAgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgICAgIGNhc2UgR1NUX0VWRU5UX1JFQ09ORklHVVJFOgotICAgICAgICAgIGlmIChHU1RfUEFEX0lTX1NJTksgKHBhZCkpCi0gICAgICAgICAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19ORUVEX1JFQ09ORklHVVJFKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIFBST0JFX1BVU0ggKHBhZCwgdHlwZSB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIIHwKLSAgICAgICAgICBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0ssIGV2ZW50LCBwcm9iZV9zdG9wcGVkKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8qIHNlbmQgcHJvYmVzIGFmdGVyIG1vZGlmeWluZyB0aGUgZXZlbnRzIGFib3ZlICovCi0gIFBST0JFX1BVU0ggKHBhZCwgdHlwZSB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNILCBldmVudCwgcHJvYmVfc3RvcHBlZCk7Ci0KLSAgLyogcmVjaGVjayBzdGlja3kgZXZlbnRzIGJlY2F1c2UgdGhlIHByb2JlIG1pZ2h0IGhhdmUgY2F1c2UgYSByZWxpbmsgKi8KLSAgaWYgKEdTVF9QQURfSEFTX1BFTkRJTkdfRVZFTlRTIChwYWQpICYmIEdTVF9QQURfSVNfU1JDIChwYWQpCi0gICAgICAmJiAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KQotICAgICAgICAgIHx8IEdTVF9FVkVOVF9JU19TVElDS1kgKGV2ZW50KSkpIHsKLSAgICBQdXNoU3RpY2t5RGF0YSBkYXRhID0geyBHU1RfRkxPV19PSywgRkFMU0UsIGV2ZW50IH07Ci0gICAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUyk7Ci0KLSAgICAvKiBQdXNoIGFsbCBzdGlja3kgZXZlbnRzIGJlZm9yZSBvdXIgY3VycmVudCBvbmUKLSAgICAgKiB0aGF0IGhhdmUgY2hhbmdlZCAqLwotICAgIGV2ZW50c19mb3JlYWNoIChwYWQsIHN0aWNreV9jaGFuZ2VkLCAmZGF0YSk7Ci0gIH0KLQotICAvKiBub3cgY2hlY2sgdGhlIHBlZXIgcGFkICovCi0gIHBlZXJwYWQgPSBHU1RfUEFEX1BFRVIgKHBhZCk7Ci0gIGlmIChwZWVycGFkID09IE5VTEwpCi0gICAgZ290byBub3RfbGlua2VkOwotCi0gIGdzdF9vYmplY3RfcmVmIChwZWVycGFkKTsKLSAgcGFkLT5wcml2LT51c2luZysrOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAic2VuZGluZyBldmVudCAlcCAoJXMpIHRvIHBlZXJwYWQgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBldmVudCwgZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUgKGV2ZW50X3R5cGUpLCBwZWVycGFkKTsKLQotICByZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnRfdW5jaGVja2VkIChwZWVycGFkLCBldmVudCwgdHlwZSk7Ci0KLSAgLyogTm90ZTogd2UgZ2F2ZSBhd2F5IG93bmVyc2hpcCBvZiB0aGUgZXZlbnQgYXQgdGhpcyBwb2ludCBidXQgd2UgY2FuIHN0aWxsCi0gICAqIHByaW50IHRoZSBvbGQgcG9pbnRlciAqLwotICBHU1RfTE9HX09CSkVDVCAocGFkLAotICAgICAgInNlbnQgZXZlbnQgJXAgKCVzKSB0byBwZWVycGFkICUiIEdTVF9QVFJfRk9STUFUICIsIHJldCAlcyIsIGV2ZW50LAotICAgICAgZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUgKGV2ZW50X3R5cGUpLCBwZWVycGFkLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcnBhZCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBwYWQtPnByaXYtPnVzaW5nLS07Ci0gIGlmIChwYWQtPnByaXYtPnVzaW5nID09IDApIHsKLSAgICAvKiBwYWQgaXMgbm90IGFjdGl2ZSBhbnltb3JlLCB0cmlnZ2VyIGlkbGUgY2FsbGJhY2tzICovCi0gICAgUFJPQkVfTk9fREFUQSAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCB8IEdTVF9QQURfUFJPQkVfVFlQRV9JRExFLAotICAgICAgICBpZGxlX3Byb2JlX3N0b3BwZWQsIHJldCk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUiBoYW5kbGluZyAqLwotZmx1c2hlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIldlJ3JlIGZsdXNoaW5nIik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1pbmFjdGl2ZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImZsdXNoLXN0b3Agb24gaW5hY3RpdmUgcGFkIik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1wcm9iZV9zdG9wcGVkOgotICB7Ci0gICAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUEVORElOR19FVkVOVFMpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMSkKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gICAgc3dpdGNoIChyZXQpIHsKLSAgICAgIGNhc2UgR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMToKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaGFuZGxlZCBldmVudCIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1M6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImRyb3BwZWQgZXZlbnQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhbiBlcnJvciBvY2N1cnJlZCAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci0gIH0KLW5vdF9saW5rZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJEcm9wcGluZyBldmVudCAlcyBiZWNhdXNlIHBhZCBpcyBub3QgbGlua2VkIiwKLSAgICAgICAgZ3N0X2V2ZW50X3R5cGVfZ2V0X25hbWUgKEdTVF9FVkVOVF9UWVBFIChldmVudCkpKTsKLSAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUyk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgICAvKiB1bmxpbmtlZCBwYWRzIHNob3VsZCBub3QgaW5mbHVlbmNlIGxhdGVuY3kgY29uZmlndXJhdGlvbiAqLwotICAgIGlmIChldmVudF90eXBlID09IEdTVF9FVkVOVF9MQVRFTkNZKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9MSU5LRUQ7Ci0gIH0KLWlkbGVfcHJvYmVfc3RvcHBlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIklkbGUgcHJvYmUgcmV0dXJuZWQgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfcHVzaF9ldmVudDoKLSAqIEBwYWQ6IGEgI0dzdFBhZCB0byBwdXNoIHRoZSBldmVudCB0by4KLSAqIEBldmVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEV2ZW50IHRvIHNlbmQgdG8gdGhlIHBhZC4KLSAqCi0gKiBTZW5kcyB0aGUgZXZlbnQgdG8gdGhlIHBlZXIgb2YgdGhlIGdpdmVuIHBhZC4gVGhpcyBmdW5jdGlvbiBpcwotICogbWFpbmx5IHVzZWQgYnkgZWxlbWVudHMgdG8gc2VuZCBldmVudHMgdG8gdGhlaXIgcGVlcgotICogZWxlbWVudHMuCi0gKgotICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIGV2ZW50IHNvIHlvdSBzaG91bGQKLSAqIGdzdF9ldmVudF9yZWYoKSBpdCBpZiB5b3Ugd2FudCB0byByZXVzZSB0aGUgZXZlbnQgYWZ0ZXIgdGhpcyBjYWxsLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9wdXNoX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RQYWRQcm9iZVR5cGUgdHlwZTsKLSAgZ2Jvb2xlYW4gc3RpY2t5LCBzZXJpYWxpemVkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRVZFTlQgKGV2ZW50KSwgRkFMU0UpOwotCi0gIEdTVF9UUkFDRVJfUEFEX1BVU0hfRVZFTlRfUFJFIChwYWQsIGV2ZW50KTsKLQotICBpZiAoR1NUX1BBRF9JU19TUkMgKHBhZCkpIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpKQotICAgICAgZ290byB3cm9uZ19kaXJlY3Rpb247Ci0gICAgdHlwZSA9IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNOwotICB9IGVsc2UgaWYgKEdTVF9QQURfSVNfU0lOSyAocGFkKSkgewotICAgIGlmIChHX1VOTElLRUxZICghR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpKQotICAgICAgZ290byB3cm9uZ19kaXJlY3Rpb247Ci0gICAgLyogZXZlbnRzIHB1c2hlZCBvbiBzaW5rcGFkIG5ldmVyIGFyZSBzdGlja3kgKi8KLSAgICB0eXBlID0gR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX1VQU1RSRUFNOwotICB9IGVsc2UKLSAgICBnb3RvIHVua25vd25fZGlyZWN0aW9uOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgc3RpY2t5ID0gR1NUX0VWRU5UX0lTX1NUSUNLWSAoZXZlbnQpOwotICBzZXJpYWxpemVkID0gR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KTsKLQotICBpZiAoc3RpY2t5KSB7Ci0gICAgLyogc3JjcGFkIHN0aWNreSBldmVudHMgYXJlIHN0b3JlZCBpbW1lZGlhdGVseSwgdGhlIHJlY2VpdmVkIGZsYWcgaXMgc2V0Ci0gICAgICogdG8gRkFMU0UgYW5kIHdpbGwgYmUgc2V0IHRvIFRSVUUgd2hlbiB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IHB1c2ggdGhlCi0gICAgICogZXZlbnQgdG8gdGhlIHBlZXIgcGFkICovCi0gICAgc3dpdGNoIChzdG9yZV9zdGlja3lfZXZlbnQgKHBhZCwgZXZlbnQpKSB7Ci0gICAgICBjYXNlIEdTVF9GTE9XX0ZMVVNISU5HOgotICAgICAgICBnb3RvIGZsdXNoZWQ7Ci0gICAgICBjYXNlIEdTVF9GTE9XX0VPUzoKLSAgICAgICAgZ290byBlb3M7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpICYmIChzZXJpYWxpemVkIHx8IHN0aWNreSkpIHsKLSAgICAvKiBhbGwgc2VyaWFsaXplZCBvciBzdGlja3kgZXZlbnRzIG9uIHRoZSBzcmNwYWQgdHJpZ2dlciBwdXNoIG9mCi0gICAgICogc3RpY2t5IGV2ZW50cyAqLwotICAgIHJlcyA9IChjaGVja19zdGlja3kgKHBhZCwgZXZlbnQpID09IEdTVF9GTE9XX09LKTsKLSAgfQotICBpZiAoIXN0aWNreSkgewotICAgIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gICAgLyogb3RoZXIgZXZlbnRzIGFyZSBwdXNoZWQgcmlnaHQgYXdheSAqLwotICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudF91bmNoZWNrZWQgKHBhZCwgZXZlbnQsIHR5cGUpOwotICAgIC8qIGRyb3BwZWQgZXZlbnRzIGJ5IGEgcHJvYmUgYXJlIG5vdCBhbiBlcnJvciAqLwotICAgIHJlcyA9IChyZXQgPT0gR1NUX0ZMT1dfT0sgfHwgcmV0ID09IEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTCi0gICAgICAgIHx8IHJldCA9PSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBFcnJvcnMgaW4gc3RpY2t5IGV2ZW50IHB1c2hpbmcgYXJlIG5vIHByb2JsZW0gYW5kIGlnbm9yZWQgaGVyZQotICAgICAqIGFzIHRoZXkgd2lsbCBjYXVzZSBtb3JlIG1lYW5pbmdmdWwgZXJyb3JzIGR1cmluZyBkYXRhIGZsb3cuCi0gICAgICogRm9yIEVPUyBldmVudHMsIHRoYXQgYXJlIG5vdCBmb2xsb3dlZCBieSBkYXRhIGZsb3csIHdlIHN0aWxsCi0gICAgICogcmV0dXJuIEZBTFNFIGhlcmUgdGhvdWdoLgotICAgICAqLwotICAgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpICE9IEdTVF9FVkVOVF9FT1MpCi0gICAgICByZXMgPSBUUlVFOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIEdTVF9UUkFDRVJfUEFEX1BVU0hfRVZFTlRfUE9TVCAocGFkLCByZXMpOwotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SIGhhbmRsaW5nICovCi13cm9uZ19kaXJlY3Rpb246Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJwYWQgJXM6JXMgcHVzaGluZyAlcyBldmVudCBpbiB3cm9uZyBkaXJlY3Rpb24iLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCksIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgZ290byBkb25lOwotICB9Ci11bmtub3duX2RpcmVjdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoInBhZCAlczolcyBoYXMgaW52YWxpZCBkaXJlY3Rpb24iLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotZmx1c2hlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIldlJ3JlIGZsdXNoaW5nIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgZ290byBkb25lOwotICB9Ci1lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJXZSdyZSBFT1MiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLWRvbmU6Ci0gIEdTVF9UUkFDRVJfUEFEX1BVU0hfRVZFTlRfUE9TVCAocGFkLCBGQUxTRSk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyogQ2hlY2sgaWYgd2UgY2FuIGNhbGwgdGhlIGV2ZW50IGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIGV2ZW50ICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotcHJlX2V2ZW50ZnVuY19jaGVjayAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RDYXBzICpjYXBzOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZSBmb3IgY2FwcyAqLwotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0KLSAgICAgIGlmICghZ3N0X3BhZF9xdWVyeV9hY2NlcHRfY2FwcyAocGFkLCBjYXBzKSkKLSAgICAgICAgZ290byBub3RfYWNjZXB0ZWQ7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9hY2NlcHRlZDoKLSAgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwKLSAgICAgICAgImNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiBub3QgYWNjZXB0ZWQiLCBjYXBzKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9wYWRfc2VuZF9ldmVudF91bmNoZWNrZWQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCwKLSAgICBHc3RQYWRQcm9iZVR5cGUgdHlwZSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdEV2ZW50VHlwZSBldmVudF90eXBlOwotICBnYm9vbGVhbiBzZXJpYWxpemVkLCBuZWVkX3VubG9jayA9IEZBTFNFLCBzdGlja3k7Ci0gIEdzdFBhZEV2ZW50RnVuY3Rpb24gZXZlbnRmdW5jOwotICBHc3RQYWRFdmVudEZ1bGxGdW5jdGlvbiBldmVudGZ1bGxmdW5jID0gTlVMTDsKLSAgR3N0T2JqZWN0ICpwYXJlbnQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotCi0gIGV2ZW50ID0gYXBwbHlfcGFkX29mZnNldCAocGFkLCBldmVudCwgR1NUX1BBRF9JU19TUkMgKHBhZCkpOwotCi0gIGlmIChHU1RfUEFEX0lTX1NJTksgKHBhZCkpCi0gICAgc2VyaWFsaXplZCA9IEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCk7Ci0gIGVsc2UKLSAgICBzZXJpYWxpemVkID0gRkFMU0U7Ci0gIHN0aWNreSA9IEdTVF9FVkVOVF9JU19TVElDS1kgKGV2ZW50KTsKLSAgZXZlbnRfdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7Ci0gIHN3aXRjaCAoZXZlbnRfdHlwZSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRVZFTlQsIHBhZCwKLSAgICAgICAgICAiaGF2ZSBldmVudCB0eXBlICVkIChGTFVTSF9TVEFSVCkiLCBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKTsKLQotICAgICAgLyogY2FuJ3QgZXZlbiBhY2NlcHQgYSBmbHVzaCBiZWdpbiBldmVudCB3aGVuIGZsdXNoaW5nICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9JU19GTFVTSElORyAocGFkKSkpCi0gICAgICAgIGdvdG8gZmx1c2hpbmc7Ci0KLSAgICAgIEdTVF9QQURfU0VUX0ZMVVNISU5HIChwYWQpOwotICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfRVZFTlQsIHBhZCwgInNldCBmbHVzaCBmbGFnIik7Ci0gICAgICBHU1RfUEFEX0JMT0NLX0JST0FEQ0FTVCAocGFkKTsKLSAgICAgIHR5cGUgfD0gR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIC8qIHdlIGNhbid0IGFjY2VwdCBmbHVzaC1zdG9wIG9uIGluYWN0aXZlIHBhZHMgZWxzZSB0aGUgZmx1c2hpbmcgZmxhZwotICAgICAgICogd291bGQgYmUgY2xlYXJlZCBhbmQgaXQgd291bGQgbG9vayBsaWtlIHRoZSBwYWQgY2FuIGFjY2VwdCBkYXRhLgotICAgICAgICogQWxzbywgc29tZSBlbGVtZW50cyByZXN0YXJ0IGEgc3RyZWFtaW5nIHRocmVhZCBpbiBmbHVzaC1zdG9wIHdoaWNoIHdlCi0gICAgICAgKiBjYW4ndCBhbGxvdyBvbiBpbmFjdGl2ZSBwYWRzICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9QQURfSVNfQUNUSVZFIChwYWQpKSkKLSAgICAgICAgZ290byBpbmFjdGl2ZTsKLQotICAgICAgR1NUX1BBRF9VTlNFVF9GTFVTSElORyAocGFkKTsKLSAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0VWRU5ULCBwYWQsICJjbGVhcmVkIGZsdXNoIGZsYWciKTsKLSAgICAgIC8qIFJlbW92ZSBwZW5kaW5nIEVPUyBldmVudHMgKi8KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJSZW1vdmluZyBwZW5kaW5nIEVPUyBhbmQgU0VHTUVOVCBldmVudHMiKTsKLSAgICAgIHJlbW92ZV9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9FT1MpOwotICAgICAgcmVtb3ZlX2V2ZW50X2J5X3R5cGUgKHBhZCwgR1NUX0VWRU5UX1NUUkVBTV9HUk9VUF9ET05FKTsKLSAgICAgIHJlbW92ZV9ldmVudF9ieV90eXBlIChwYWQsIEdTVF9FVkVOVF9TRUdNRU5UKTsKLSAgICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX0ZMQUdfRU9TKTsKLSAgICAgIHBhZC0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQgPSBHU1RfRkxPV19PSzsKLQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgICAvKiBncmFiIHN0cmVhbSBsb2NrICovCi0gICAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYWQpOwotICAgICAgbmVlZF91bmxvY2sgPSBUUlVFOwotICAgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQotICAgICAgICBnb3RvIGZsdXNoaW5nOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfUkVDT05GSUdVUkU6Ci0gICAgICBpZiAoR1NUX1BBRF9JU19TUkMgKHBhZCkpCi0gICAgICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX05FRURfUkVDT05GSUdVUkUpOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9FVkVOVCwgcGFkLAotICAgICAgICAgICJoYXZlIGV2ZW50IHR5cGUgJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50KTsKLQotICAgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQotICAgICAgICBnb3RvIGZsdXNoaW5nOwotCi0gICAgICBzd2l0Y2ggKGV2ZW50X3R5cGUpIHsKLSAgICAgICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOgotICAgICAgICAgIC8qIFJlbW92ZSBzdGlja3kgRU9TIGV2ZW50cyAqLwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJSZW1vdmluZyBwZW5kaW5nIEVPUyBldmVudHMiKTsKLSAgICAgICAgICByZW1vdmVfZXZlbnRfYnlfdHlwZSAocGFkLCBHU1RfRVZFTlRfRU9TKTsKLSAgICAgICAgICByZW1vdmVfZXZlbnRfYnlfdHlwZSAocGFkLCBHU1RfRVZFTlRfU1RSRUFNX0dST1VQX0RPTkUpOwotICAgICAgICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX0ZMQUdfRU9TKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYgKHNlcmlhbGl6ZWQpIHsKLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9QQURfSVNfRU9TIChwYWQpKSkKLSAgICAgICAgICBnb3RvIGVvczsKLQotICAgICAgICAvKiBsb2NrIG9yZGVyOiBTVFJFQU1fTE9DSywgTE9DSywgcmVjaGVjayBmbHVzaGluZy4gKi8KLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgICAgIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHBhZCk7Ci0gICAgICAgIG5lZWRfdW5sb2NrID0gVFJVRTsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICAgICAgICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9JU19GTFVTSElORyAocGFkKSkpCi0gICAgICAgICAgZ290byBmbHVzaGluZzsKLQotICAgICAgICBpZiAoR19VTkxJS0VMWSAoR1NUX1BBRF9JU19FT1MgKHBhZCkpKQotICAgICAgICAgIGdvdG8gZW9zOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBub3cgZG8gdGhlIHByb2JlICovCi0gIFBST0JFX1BVU0ggKHBhZCwKLSAgICAgIHR5cGUgfCBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCB8Ci0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0ssIGV2ZW50LCBwcm9iZV9zdG9wcGVkKTsKLQotICBQUk9CRV9QVVNIIChwYWQsIHR5cGUgfCBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCwgZXZlbnQsIHByb2JlX3N0b3BwZWQpOwotCi0gIGV2ZW50ZnVsbGZ1bmMgPSBHU1RfUEFEX0VWRU5URlVMTEZVTkMgKHBhZCk7Ci0gIGV2ZW50ZnVuYyA9IEdTVF9QQURfRVZFTlRGVU5DIChwYWQpOwotICBpZiAoR19VTkxJS0VMWSAoZXZlbnRmdW5jID09IE5VTEwgJiYgZXZlbnRmdWxsZnVuYyA9PSBOVUxMKSkKLSAgICBnb3RvIG5vX2Z1bmN0aW9uOwotCi0gIEFDUVVJUkVfUEFSRU5UIChwYWQsIHBhcmVudCwgbm9fcGFyZW50KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0ID0gcHJlX2V2ZW50ZnVuY19jaGVjayAocGFkLCBldmVudCk7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gcHJlY2hlY2tfZmFpbGVkOwotCi0gIGlmIChzdGlja3kpCi0gICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotCi0gIGlmIChldmVudGZ1bGxmdW5jKSB7Ci0gICAgcmV0ID0gZXZlbnRmdWxsZnVuYyAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgfSBlbHNlIGlmIChldmVudGZ1bmMgKHBhZCwgcGFyZW50LCBldmVudCkpIHsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgfSBlbHNlIHsKLSAgICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyAqLwotICAgIHN3aXRjaCAoZXZlbnRfdHlwZSkgewotICAgICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBSRUxFQVNFX1BBUkVOVCAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJzZW50IGV2ZW50LCByZXQgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0KLSAgaWYgKHN0aWNreSkgewotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgICAgIC8qIGFmdGVyIHRoZSBldmVudCBmdW5jdGlvbiBhY2NlcHRlZCB0aGUgZXZlbnQsIHdlIGNhbiBzdG9yZSB0aGUgc3RpY2t5Ci0gICAgICAgKiBldmVudCBvbiB0aGUgcGFkICovCi0gICAgICBzd2l0Y2ggKHN0b3JlX3N0aWNreV9ldmVudCAocGFkLCBldmVudCkpIHsKLSAgICAgICAgY2FzZSBHU1RfRkxPV19GTFVTSElORzoKLSAgICAgICAgICBnb3RvIGZsdXNoaW5nOwotICAgICAgICBjYXNlIEdTVF9GTE9XX0VPUzoKLSAgICAgICAgICBnb3RvIGVvczsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIH0KLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgfQotCi0gIGlmIChuZWVkX3VubG9jaykKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUiBoYW5kbGluZyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBpZiAobmVlZF91bmxvY2spCi0gICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgR1NUX0NBVF9JTkZPX09CSkVDVCAoR1NUX0NBVF9FVkVOVCwgcGFkLAotICAgICAgICAiUmVjZWl2ZWQgZXZlbnQgb24gZmx1c2hpbmcgcGFkLiBEaXNjYXJkaW5nIik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1pbmFjdGl2ZToKLSAgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIGlmIChuZWVkX3VubG9jaykKLSAgICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLSAgICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX0VWRU5ULCBwYWQsCi0gICAgICAgICJSZWNlaXZlZCBmbHVzaC1zdG9wIG9uIGluYWN0aXZlIHBhZC4gRGlzY2FyZGluZyIpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgfQotZW9zOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgaWYgKG5lZWRfdW5sb2NrKQotICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgIEdTVF9DQVRfSU5GT19PQkpFQ1QgKEdTVF9DQVRfRVZFTlQsIHBhZCwKLSAgICAgICAgIlJlY2VpdmVkIGV2ZW50IG9uIEVPUyBwYWQuIERpc2NhcmRpbmciKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci1wcm9iZV9zdG9wcGVkOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgaWYgKG5lZWRfdW5sb2NrKQotICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotICAgIC8qIE9ubHkgdW5yZWYgaWYgdW5oYW5kbGVkICovCi0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xKQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgICBzd2l0Y2ggKHJldCkgewotICAgICAgY2FzZSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xOgotICAgICAgY2FzZSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUzoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZHJvcHBlZCBvciBoYW5kbGVkIGV2ZW50Iik7Ci0gICAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImFuIGVycm9yIG9jY3VycmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotbm9fZnVuY3Rpb246Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJwYWQgJXM6JXMgaGFzIG5vIGV2ZW50IGhhbmRsZXIsIGZpbGUgYSBidWcuIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBpZiAobmVlZF91bmxvY2spCi0gICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gIH0KLW5vX3BhcmVudDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5vIHBhcmVudCIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIGlmIChuZWVkX3VubG9jaykKLSAgICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLXByZWNoZWNrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInByZSBldmVudCBjaGVjayBmYWlsZWQiKTsKLSAgICBSRUxFQVNFX1BBUkVOVCAocGFyZW50KTsKLSAgICBpZiAobmVlZF91bmxvY2spCi0gICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfc2VuZF9ldmVudDoKLSAqIEBwYWQ6IGEgI0dzdFBhZCB0byBzZW5kIHRoZSBldmVudCB0by4KLSAqIEBldmVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEV2ZW50IHRvIHNlbmQgdG8gdGhlIHBhZC4KLSAqCi0gKiBTZW5kcyB0aGUgZXZlbnQgdG8gdGhlIHBhZC4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZAotICogYnkgYXBwbGljYXRpb25zIHRvIHNlbmQgZXZlbnRzIGluIHRoZSBwaXBlbGluZS4KLSAqCi0gKiBJZiBAcGFkIGlzIGEgc291cmNlIHBhZCwgQGV2ZW50IHNob3VsZCBiZSBhbiB1cHN0cmVhbSBldmVudC4gSWYgQHBhZCBpcyBhCi0gKiBzaW5rIHBhZCwgQGV2ZW50IHNob3VsZCBiZSBhIGRvd25zdHJlYW0gZXZlbnQuIEZvciBleGFtcGxlLCB5b3Ugd291bGQgbm90Ci0gKiBzZW5kIGEgI0dTVF9FVkVOVF9FT1Mgb24gYSBzcmMgcGFkOyBFT1MgZXZlbnRzIG9ubHkgcHJvcGFnYXRlIGRvd25zdHJlYW0uCi0gKiBGdXJ0aGVybW9yZSwgc29tZSBkb3duc3RyZWFtIGV2ZW50cyBoYXZlIHRvIGJlIHNlcmlhbGl6ZWQgd2l0aCBkYXRhIGZsb3csCi0gKiBsaWtlIEVPUywgd2hpbGUgc29tZSBjYW4gdHJhdmVsIG91dC1vZi1iYW5kLCBsaWtlICNHU1RfRVZFTlRfRkxVU0hfU1RBUlQuIElmCi0gKiB0aGUgZXZlbnQgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCB3aXRoIGRhdGEgZmxvdywgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgdGhlCi0gKiBwYWQncyBzdHJlYW0gbG9jayB3aGlsZSBjYWxsaW5nIGl0cyBldmVudCBmdW5jdGlvbi4KLSAqCi0gKiBUbyBmaW5kIG91dCB3aGV0aGVyIGFuIGV2ZW50IHR5cGUgaXMgdXBzdHJlYW0sIGRvd25zdHJlYW0sIG9yIGRvd25zdHJlYW0gYW5kCi0gKiBzZXJpYWxpemVkLCBzZWUgI0dzdEV2ZW50VHlwZUZsYWdzLCBnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MoKSwKLSAqICNHU1RfRVZFTlRfSVNfVVBTVFJFQU0sICNHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSwgYW5kCi0gKiAjR1NUX0VWRU5UX0lTX1NFUklBTElaRUQuIE5vdGUgdGhhdCBpbiBwcmFjdGljZSB0aGF0IGFuIGFwcGxpY2F0aW9uIG9yCi0gKiBwbHVnaW4gZG9lc24ndCBuZWVkIHRvIGJvdGhlciBpdHNlbGYgd2l0aCB0aGlzIGluZm9ybWF0aW9uOyB0aGUgY29yZSBoYW5kbGVzCi0gKiBhbGwgbmVjZXNzYXJ5IGxvY2tzIGFuZCBjaGVja3MuCi0gKgotICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIGV2ZW50IHNvIHlvdSBzaG91bGQKLSAqIGdzdF9ldmVudF9yZWYoKSBpdCBpZiB5b3Ugd2FudCB0byByZXVzZSB0aGUgZXZlbnQgYWZ0ZXIgdGhpcyBjYWxsLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfc2VuZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0gIEdzdFBhZFByb2JlVHlwZSB0eXBlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChldmVudCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKEdTVF9QQURfSVNfU0lOSyAocGFkKSkgewotICAgIGlmIChHX1VOTElLRUxZICghR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0gKGV2ZW50KSkpCi0gICAgICBnb3RvIHdyb25nX2RpcmVjdGlvbjsKLSAgICB0eXBlID0gR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU07Ci0gIH0gZWxzZSBpZiAoR1NUX1BBRF9JU19TUkMgKHBhZCkpIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9FVkVOVF9JU19VUFNUUkVBTSAoZXZlbnQpKSkKLSAgICAgIGdvdG8gd3JvbmdfZGlyZWN0aW9uOwotICAgIHR5cGUgPSBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfVVBTVFJFQU07Ci0gIH0gZWxzZQotICAgIGdvdG8gdW5rbm93bl9kaXJlY3Rpb247Ci0KLSAgaWYgKGdzdF9wYWRfc2VuZF9ldmVudF91bmNoZWNrZWQgKHBhZCwgZXZlbnQsIHR5cGUpICE9IEdTVF9GTE9XX09LKQotICAgIHJlc3VsdCA9IEZBTFNFOwotICBlbHNlCi0gICAgcmVzdWx0ID0gVFJVRTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SIGhhbmRsaW5nICovCi13cm9uZ19kaXJlY3Rpb246Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJwYWQgJXM6JXMgc2VuZGluZyAlcyBldmVudCBpbiB3cm9uZyBkaXJlY3Rpb24iLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCksIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci11bmtub3duX2RpcmVjdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoInBhZCAlczolcyBoYXMgaW52YWxpZCBkaXJlY3Rpb24iLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZToKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHNldCB0aGUgcHJpdmF0ZSBkYXRhIG9mLgotICogQHByaXY6IFRoZSBwcml2YXRlIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBwYWQuCi0gKgotICogU2V0IHRoZSBnaXZlbiBwcml2YXRlIGRhdGEgZ3BvaW50ZXIgb24gdGhlIHBhZC4KLSAqIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBieSB0aGUgZWxlbWVudCB0aGF0IG93bnMgdGhlIHBhZC4KLSAqIE5vIGxvY2tpbmcgaXMgcGVyZm9ybWVkIGluIHRoaXMgZnVuY3Rpb24uCi0gKi8KLXZvaWQKLWdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAoR3N0UGFkICogcGFkLCBncG9pbnRlciBwcml2KQotewotICBwYWQtPmVsZW1lbnRfcHJpdmF0ZSA9IHByaXY7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlOgotICogQHBhZDogdGhlICNHc3RQYWQgdG8gZ2V0IHRoZSBwcml2YXRlIGRhdGEgb2YuCi0gKgotICogR2V0cyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGEgcGFkLgotICogTm8gbG9ja2luZyBpcyBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI2dwb2ludGVyIHRvIHRoZSBwcml2YXRlIGRhdGEuCi0gKi8KLWdwb2ludGVyCi1nc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKEdzdFBhZCAqIHBhZCkKLXsKLSAgcmV0dXJuIHBhZC0+ZWxlbWVudF9wcml2YXRlOwotfQotCi0vKioKLSAqIGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudDoKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGdldCB0aGUgZXZlbnQgZnJvbS4KLSAqIEBldmVudF90eXBlOiB0aGUgI0dzdEV2ZW50VHlwZSB0aGF0IHNob3VsZCBiZSByZXRyaWV2ZWQuCi0gKiBAaWR4OiB0aGUgaW5kZXggb2YgdGhlIGV2ZW50Ci0gKgotICogUmV0dXJucyBhIG5ldyByZWZlcmVuY2Ugb2YgdGhlIHN0aWNreSBldmVudCBvZiB0eXBlIEBldmVudF90eXBlCi0gKiBmcm9tIHRoZSBldmVudC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSAjR3N0RXZlbnQgb2YgdHlwZQotICogQGV2ZW50X3R5cGUgb3IgJU5VTEwgd2hlbiBubyBldmVudCBvZiBAZXZlbnRfdHlwZSB3YXMgb24KLSAqIEBwYWQuIFVucmVmIGFmdGVyIHVzYWdlLgotICovCi1Hc3RFdmVudCAqCi1nc3RfcGFkX2dldF9zdGlja3lfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnRUeXBlIGV2ZW50X3R5cGUsIGd1aW50IGlkeCkKLXsKLSAgR3N0RXZlbnQgKmV2ZW50ID0gTlVMTDsKLSAgUGFkRXZlbnQgKmV2OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKChldmVudF90eXBlICYgR1NUX0VWRU5UX1RZUEVfU1RJQ0tZKSAhPSAwLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIGV2ID0gZmluZF9ldmVudF9ieV90eXBlIChwYWQsIGV2ZW50X3R5cGUsIGlkeCk7Ci0gIGlmIChldiAmJiAoZXZlbnQgPSBldi0+ZXZlbnQpKQotICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcmV0dXJuIGV2ZW50OwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24gZnVuYzsKLSAgZ3BvaW50ZXIgdXNlcl9kYXRhOwotfSBGb3JlYWNoRGlzcGF0Y2g7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yZWFjaF9kaXNwYXRjaF9mdW5jdGlvbiAoR3N0UGFkICogcGFkLCBQYWRFdmVudCAqIGV2LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEZvcmVhY2hEaXNwYXRjaCAqZGF0YSA9IHVzZXJfZGF0YTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBpZiAoZXYtPmV2ZW50KSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgICByZXQgPSBkYXRhLT5mdW5jIChwYWQsICZldi0+ZXZlbnQsIGRhdGEtPnVzZXJfZGF0YSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoOgotICogQHBhZDogdGhlICNHc3RQYWQgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgaXRlcmF0aW9uLgotICogQGZvcmVhY2hfZnVuYzogKHNjb3BlIGNhbGwpOiB0aGUgI0dzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiB0aGF0Ci0gKiAgICAgICAgICAgICAgICBzaG91bGQgYmUgY2FsbGVkIGZvciBldmVyeSBldmVudC4KLSAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIG9wdGlvbmFsIHVzZXIgZGF0YS4KLSAqCi0gKiBJdGVyYXRlcyBhbGwgc3RpY2t5IGV2ZW50cyBvbiBAcGFkIGFuZCBjYWxscyBAZm9yZWFjaF9mdW5jIGZvciBldmVyeQotICogZXZlbnQuIElmIEBmb3JlYWNoX2Z1bmMgcmV0dXJucyAlRkFMU0UgdGhlIGl0ZXJhdGlvbiBpcyBpbW1lZGlhdGVseSBzdG9wcGVkLgotICovCi12b2lkCi1nc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAoR3N0UGFkICogcGFkLAotICAgIEdzdFBhZFN0aWNreUV2ZW50c0ZvcmVhY2hGdW5jdGlvbiBmb3JlYWNoX2Z1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgRm9yZWFjaERpc3BhdGNoIGRhdGE7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZvcmVhY2hfZnVuYyAhPSBOVUxMKTsKLQotICBkYXRhLmZ1bmMgPSBmb3JlYWNoX2Z1bmM7Ci0gIGRhdGEudXNlcl9kYXRhID0gdXNlcl9kYXRhOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgZXZlbnRzX2ZvcmVhY2ggKHBhZCwgZm9yZWFjaF9kaXNwYXRjaF9mdW5jdGlvbiwgJmRhdGEpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3N0cmVhbV9zdGF0dXMgKEdzdFBhZCAqIHBhZCwgR3N0U3RyZWFtU3RhdHVzVHlwZSB0eXBlLAotICAgIEdUaHJlYWQgKiB0aHJlYWQsIEdzdFRhc2sgKiB0YXNrKQotewotICBHc3RFbGVtZW50ICpwYXJlbnQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZG9pbmcgc3RyZWFtLXN0YXR1cyAlZCIsIHR5cGUpOwotCi0gIGlmICgocGFyZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKSkpIHsKLSAgICBpZiAoR1NUX0lTX0VMRU1FTlQgKHBhcmVudCkpIHsKLSAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gICAgICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKLQotICAgICAgaWYgKHR5cGUgPT0gR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUikgewotICAgICAgICBnY2hhciAqdG5hbWUsICplbmFtZSwgKnBuYW1lOwotCi0gICAgICAgIC8qIGNyZWF0ZSBhIGdvb2QgdGFzayBuYW1lICovCi0gICAgICAgIGVuYW1lID0gZ3N0X2VsZW1lbnRfZ2V0X25hbWUgKHBhcmVudCk7Ci0gICAgICAgIHBuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAocGFkKTsKLSAgICAgICAgdG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIlczolcyIsIGVuYW1lLCBwbmFtZSk7Ci0gICAgICAgIGdfZnJlZSAoZW5hbWUpOwotICAgICAgICBnX2ZyZWUgKHBuYW1lKTsKLQotICAgICAgICBnc3Rfb2JqZWN0X3NldF9uYW1lIChHU1RfT0JKRUNUX0NBU1QgKHRhc2spLCB0bmFtZSk7Ci0gICAgICAgIGdfZnJlZSAodG5hbWUpOwotICAgICAgfQotCi0gICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSwKLSAgICAgICAgICB0eXBlLCBwYXJlbnQpOwotCi0gICAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfVEFTSyk7Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKCZ2YWx1ZSwgdGFzayk7Ci0gICAgICBnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKG1lc3NhZ2UsICZ2YWx1ZSk7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwb3N0aW5nIHN0cmVhbS1zdGF0dXMgJWQiLCB0eXBlKTsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAocGFyZW50LCBtZXNzYWdlKTsKLSAgICB9Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcGFkX2VudGVyX3RocmVhZCAoR3N0VGFzayAqIHRhc2ssIEdUaHJlYWQgKiB0aHJlYWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZG9fc3RyZWFtX3N0YXR1cyAoR1NUX1BBRF9DQVNUICh1c2VyX2RhdGEpLCBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSLAotICAgICAgdGhyZWFkLCB0YXNrKTsKLX0KLQotc3RhdGljIHZvaWQKLXBhZF9sZWF2ZV90aHJlYWQgKEdzdFRhc2sgKiB0YXNrLCBHVGhyZWFkICogdGhyZWFkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGRvX3N0cmVhbV9zdGF0dXMgKEdTVF9QQURfQ0FTVCAodXNlcl9kYXRhKSwgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9MRUFWRSwKLSAgICAgIHRocmVhZCwgdGFzayk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9zdGFydF90YXNrOgotICogQHBhZDogdGhlICNHc3RQYWQgdG8gc3RhcnQgdGhlIHRhc2sgb2YKLSAqIEBmdW5jOiB0aGUgdGFzayBmdW5jdGlvbiB0byBjYWxsCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSB0YXNrIGZ1bmN0aW9uCi0gKiBAbm90aWZ5OiBjYWxsZWQgd2hlbiBAdXNlcl9kYXRhIGlzIG5vIGxvbmdlciByZWZlcmVuY2VkCi0gKgotICogU3RhcnRzIGEgdGFzayB0aGF0IHJlcGVhdGVkbHkgY2FsbHMgQGZ1bmMgd2l0aCBAdXNlcl9kYXRhLiBUaGlzIGZ1bmN0aW9uCi0gKiBpcyBtb3N0bHkgdXNlZCBpbiBwYWQgYWN0aXZhdGlvbiBmdW5jdGlvbnMgdG8gc3RhcnQgdGhlIGRhdGFmbG93LgotICogVGhlICNHU1RfUEFEX1NUUkVBTV9MT0NLIG9mIEBwYWQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFjcXVpcmVkCi0gKiBiZWZvcmUgQGZ1bmMgaXMgY2FsbGVkLgotICoKLSAqIFJldHVybnM6IGEgJVRSVUUgaWYgdGhlIHRhc2sgY291bGQgYmUgc3RhcnRlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfc3RhcnRfdGFzayAoR3N0UGFkICogcGFkLCBHc3RUYXNrRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKLXsKLSAgR3N0VGFzayAqdGFzazsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmdW5jICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJzdGFydCB0YXNrIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICB0YXNrID0gR1NUX1BBRF9UQVNLIChwYWQpOwotICBpZiAodGFzayA9PSBOVUxMKSB7Ci0gICAgdGFzayA9IGdzdF90YXNrX25ldyAoZnVuYywgdXNlcl9kYXRhLCBub3RpZnkpOwotICAgIGdzdF90YXNrX3NldF9sb2NrICh0YXNrLCBHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyAocGFkKSk7Ci0gICAgZ3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrICh0YXNrLCBwYWRfZW50ZXJfdGhyZWFkLCBwYWQsIE5VTEwpOwotICAgIGdzdF90YXNrX3NldF9sZWF2ZV9jYWxsYmFjayAodGFzaywgcGFkX2xlYXZlX3RocmVhZCwgcGFkLCBOVUxMKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHBhZCwgImNyZWF0ZWQgdGFzayAlcCIsIHRhc2spOwotICAgIEdTVF9QQURfVEFTSyAocGFkKSA9IHRhc2s7Ci0gICAgZ3N0X29iamVjdF9yZWYgKHRhc2spOwotICAgIC8qIHJlbGVhc2UgbG9jayB0byBwb3N0IHRoZSBtZXNzYWdlICovCi0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgICBkb19zdHJlYW1fc3RhdHVzIChwYWQsIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFLCBOVUxMLCB0YXNrKTsKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhc2spOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICAgIC8qIG5vYm9keSBlbHNlIGlzIHN1cHBvc2VkIHRvIGhhdmUgY2hhbmdlZCB0aGUgcGFkIG5vdyAqLwotICAgIGlmIChHU1RfUEFEX1RBU0sgKHBhZCkgIT0gdGFzaykKLSAgICAgIGdvdG8gY29uY3VycmVudF9zdG9wOwotICB9Ci0gIHJlcyA9IGdzdF90YXNrX3NldF9zdGF0ZSAodGFzaywgR1NUX1RBU0tfU1RBUlRFRCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1jb25jdXJyZW50X3N0b3A6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wYWRfcGF1c2VfdGFzazoKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIHBhdXNlIHRoZSB0YXNrIG9mCi0gKgotICogUGF1c2UgdGhlIHRhc2sgb2YgQHBhZC4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gd2FpdCB1bnRpbCB0aGUKLSAqIGZ1bmN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSB0YXNrIGlzIGZpbmlzaGVkIGlmIHRoaXMgZnVuY3Rpb24gaXMgbm90Ci0gKiBjYWxsZWQgZnJvbSB0aGUgdGFzayBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBhICVUUlVFIGlmIHRoZSB0YXNrIGNvdWxkIGJlIHBhdXNlZCBvciAlRkFMU0Ugd2hlbiB0aGUgcGFkCi0gKiBoYXMgbm8gdGFzay4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfcGF1c2VfdGFzayAoR3N0UGFkICogcGFkKQotewotICBHc3RUYXNrICp0YXNrOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJwYXVzZSB0YXNrIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICB0YXNrID0gR1NUX1BBRF9UQVNLIChwYWQpOwotICBpZiAodGFzayA9PSBOVUxMKQotICAgIGdvdG8gbm9fdGFzazsKLSAgcmVzID0gZ3N0X3Rhc2tfc2V0X3N0YXRlICh0YXNrLCBHU1RfVEFTS19QQVVTRUQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAvKiB3YWl0IGZvciB0YXNrIGZ1bmN0aW9uIHRvIGZpbmlzaCwgdGhpcyBsb2NrIGlzIHJlY3Vyc2l2ZSBzbyBpdCBkb2VzIG5vdGhpbmcKLSAgICogd2hlbiB0aGUgcGF1c2UgaXMgY2FsbGVkIGZyb20gdGhlIHRhc2sgaXRzZWxmICovCi0gIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHBhZCk7Ci0gIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm4gcmVzOwotCi1ub190YXNrOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicGFkIGhhcyBubyB0YXNrIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9zdG9wX3Rhc2s6Ci0gKiBAcGFkOiB0aGUgI0dzdFBhZCB0byBzdG9wIHRoZSB0YXNrIG9mCi0gKgotICogU3RvcCB0aGUgdGFzayBvZiBAcGFkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUKLSAqIGZ1bmN0aW9uIGV4ZWN1dGVkIGJ5IHRoZSB0YXNrIHdpbGwgZWZmZWN0aXZlbHkgc3RvcCBpZiBub3QgY2FsbGVkCi0gKiBmcm9tIHRoZSBHc3RUYXNrRnVuY3Rpb24uCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGRlYWRsb2NrIGlmIGNhbGxlZCBmcm9tIHRoZSBHc3RUYXNrRnVuY3Rpb24gb2YKLSAqIHRoZSB0YXNrLiBVc2UgZ3N0X3Rhc2tfcGF1c2UoKSBpbnN0ZWFkLgotICoKLSAqIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcGFkIGhhcyBhIHRhc2ssIHRoZSBzdHJlYW0gbG9jayBpcyBhY3F1aXJlZCBhbmQKLSAqIHJlbGVhc2VkIHNvIGFzIHRvIGVuc3VyZSB0aGF0IHN0cmVhbWluZyB0aHJvdWdoIHRoaXMgcGFkIGhhcyBmaW5pc2hlZC4KLSAqCi0gKiBSZXR1cm5zOiBhICVUUlVFIGlmIHRoZSB0YXNrIGNvdWxkIGJlIHN0b3BwZWQgb3IgJUZBTFNFIG9uIGVycm9yLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9zdG9wX3Rhc2sgKEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0VGFzayAqdGFzazsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAic3RvcCB0YXNrIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICB0YXNrID0gR1NUX1BBRF9UQVNLIChwYWQpOwotICBpZiAodGFzayA9PSBOVUxMKQotICAgIGdvdG8gbm9fdGFzazsKLSAgR1NUX1BBRF9UQVNLIChwYWQpID0gTlVMTDsKLSAgcmVzID0gZ3N0X3Rhc2tfc2V0X3N0YXRlICh0YXNrLCBHU1RfVEFTS19TVE9QUEVEKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKLSAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotCi0gIGlmICghZ3N0X3Rhc2tfam9pbiAodGFzaykpCi0gICAgZ290byBqb2luX2ZhaWxlZDsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0YXNrKTsKLQotICByZXR1cm4gcmVzOwotCi1ub190YXNrOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAibm8gdGFzayIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0KLSAgICAvKiB0aGlzIGlzIG5vdCBhbiBlcnJvciAqLwotICAgIHJldHVybiBUUlVFOwotICB9Ci1qb2luX2ZhaWxlZDoKLSAgewotICAgIC8qIHRoaXMgaXMgYmFkLCBwb3NzaWJseSB0aGUgYXBwbGljYXRpb24gdHJpZWQgdG8gam9pbiB0aGUgdGFzayBmcm9tCi0gICAgICogdGhlIHRhc2sncyB0aHJlYWQuIFdlIGluc3RhbGwgdGhlIHRhc2sgYWdhaW4gc28gdGhhdCBpdCB3aWxsIGJlIHN0b3BwZWQKLSAgICAgKiBhZ2FpbiBmcm9tIHRoZSByaWdodCB0aHJlYWQgbmV4dCB0aW1lIGhvcGVmdWxseS4gKi8KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiam9pbiBmYWlsZWQiKTsKLSAgICAvKiB3ZSBjYW4gb25seSBpbnN0YWxsIHRoaXMgdGFzayBpZiB0aGVyZSB3YXMgbm8gb3RoZXIgdGFzayAqLwotICAgIGlmIChHU1RfUEFEX1RBU0sgKHBhZCkgPT0gTlVMTCkKLSAgICAgIEdTVF9QQURfVEFTSyAocGFkKSA9IHRhc2s7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2V2ZW50OgotICogQGluZm86IGEgI0dzdFBhZFByb2JlSW5mbwotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogVGhlICNHc3RFdmVudCBmcm9tIHRoZSBwcm9iZQotICovCi0KLUdzdEV2ZW50ICoKLWdzdF9wYWRfcHJvYmVfaW5mb19nZXRfZXZlbnQgKEdzdFBhZFByb2JlSW5mbyAqIGluZm8pCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvLT50eXBlICYgKEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNIHwKLSAgICAgICAgICBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfVVBTVFJFQU0pLCBOVUxMKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UIChpbmZvKTsKLX0KLQotCi0vKioKLSAqIGdzdF9wYWRfcHJvYmVfaW5mb19nZXRfcXVlcnk6Ci0gKiBAaW5mbzogYSAjR3N0UGFkUHJvYmVJbmZvCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBUaGUgI0dzdFF1ZXJ5IGZyb20gdGhlIHByb2JlCi0gKi8KLQotR3N0UXVlcnkgKgotZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9xdWVyeSAoR3N0UGFkUHJvYmVJbmZvICogaW5mbykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8tPnR5cGUgJiAoR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0gfAotICAgICAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9VUFNUUkVBTSksIE5VTEwpOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX0lORk9fUVVFUlkgKGluZm8pOwotfQotCi0vKioKLSAqIGdzdF9wYWRfcHJvYmVfaW5mb19nZXRfYnVmZmVyOgotICogQGluZm86IGEgI0dzdFBhZFByb2JlSW5mbwotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogVGhlICNHc3RCdWZmZXIgZnJvbSB0aGUgcHJvYmUKLSAqLwotCi1Hc3RCdWZmZXIgKgotZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXIgKEdzdFBhZFByb2JlSW5mbyAqIGluZm8pCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvLT50eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwgTlVMTCk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIgKGluZm8pOwotfQotCi0vKioKLSAqIGdzdF9wYWRfcHJvYmVfaW5mb19nZXRfYnVmZmVyX2xpc3Q6Ci0gKiBAaW5mbzogYSAjR3N0UGFkUHJvYmVJbmZvCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBUaGUgI0dzdEJ1ZmZlckxpc3QgZnJvbSB0aGUgcHJvYmUKLSAqLwotCi1Hc3RCdWZmZXJMaXN0ICoKLWdzdF9wYWRfcHJvYmVfaW5mb19nZXRfYnVmZmVyX2xpc3QgKEdzdFBhZFByb2JlSW5mbyAqIGluZm8pCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvLT50eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNULCBOVUxMKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUl9MSVNUIChpbmZvKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuOgotICogQHBhZDogdGhlICNHc3RQYWQKLSAqCi0gKiBHZXRzIHRoZSAjR3N0Rmxvd1JldHVybiByZXR1cm4gZnJvbSB0aGUgbGFzdCBkYXRhIHBhc3NlZCBieSB0aGlzIHBhZC4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4gKEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICByZXQgPSBHU1RfUEFEX0xBU1RfRkxPV19SRVRVUk4gKHBhZCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0cGFkLmggYi9nc3QvZ3N0cGFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxN2FlNDguLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHBhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgotICoKLSAqIGdzdHBhZC5oOiBIZWFkZXIgZm9yIEdzdFBhZCBvYmplY3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfUEFEX0hfXwotI2RlZmluZSBfX0dTVF9QQURfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQYWQgR3N0UGFkOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBhZFByaXZhdGUgR3N0UGFkUHJpdmF0ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQYWRDbGFzcyBHc3RQYWRDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQYWRQcm9iZUluZm8gR3N0UGFkUHJvYmVJbmZvOwotCi0vKioKLSAqIEdzdFBhZERpcmVjdGlvbjoKLSAqIEBHU1RfUEFEX1VOS05PV046IGRpcmVjdGlvbiBpcyB1bmtub3duLgotICogQEdTVF9QQURfU1JDOiB0aGUgcGFkIGlzIGEgc291cmNlIHBhZC4KLSAqIEBHU1RfUEFEX1NJTks6IHRoZSBwYWQgaXMgYSBzaW5rIHBhZC4KLSAqCi0gKiBUaGUgZGlyZWN0aW9uIG9mIGEgcGFkLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfUEFEX1VOS05PV04sCi0gIEdTVF9QQURfU1JDLAotICBHU1RfUEFEX1NJTksKLX0gR3N0UGFkRGlyZWN0aW9uOwotCi0vKioKLSAqIEdzdFBhZE1vZGU6Ci0gKiBAR1NUX1BBRF9NT0RFX05PTkU6IFBhZCB3aWxsIG5vdCBoYW5kbGUgZGF0YWZsb3cKLSAqIEBHU1RfUEFEX01PREVfUFVTSDogUGFkIGhhbmRsZXMgZGF0YWZsb3cgaW4gZG93bnN0cmVhbSBwdXNoIG1vZGUKLSAqIEBHU1RfUEFEX01PREVfUFVMTDogUGFkIGhhbmRsZXMgZGF0YWZsb3cgaW4gdXBzdHJlYW0gcHVsbCBtb2RlCi0gKgotICogVGhlIHN0YXR1cyBvZiBhIEdzdFBhZC4gQWZ0ZXIgYWN0aXZhdGluZyBhIHBhZCwgd2hpY2ggdXN1YWxseSBoYXBwZW5zIHdoZW4gdGhlCi0gKiBwYXJlbnQgZWxlbWVudCBnb2VzIGZyb20gUkVBRFkgdG8gUEFVU0VELCB0aGUgR3N0UGFkTW9kZSBkZWZpbmVzIGlmIHRoZQotICogcGFkIG9wZXJhdGVzIGluIHB1c2ggb3IgcHVsbCBtb2RlLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfUEFEX01PREVfTk9ORSwKLSAgR1NUX1BBRF9NT0RFX1BVU0gsCi0gIEdTVF9QQURfTU9ERV9QVUxMCi19IEdzdFBhZE1vZGU7Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLWNvbnN0IGdjaGFyICAgKiBnc3RfcGFkX21vZGVfZ2V0X25hbWUgKEdzdFBhZE1vZGUgbW9kZSk7Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9nc3RidWZmZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGNhcHMuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGFkdGVtcGxhdGUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZXZlbnQuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cXVlcnkuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dGFzay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qCi0gKiBQYWQgYmFzZSBjbGFzcwotICovCi0jZGVmaW5lIEdTVF9UWVBFX1BBRAkJCShnc3RfcGFkX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVNfUEFEKG9iaikJCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9QQUQpKQotI2RlZmluZSBHU1RfSVNfUEFEX0NMQVNTKGtsYXNzKQkJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9QQUQpKQotI2RlZmluZSBHU1RfUEFEKG9iaikJCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9QQUQsIEdzdFBhZCkpCi0jZGVmaW5lIEdTVF9QQURfQ0xBU1Moa2xhc3MpCQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1BBRCwgR3N0UGFkQ2xhc3MpKQotI2RlZmluZSBHU1RfUEFEX0NBU1Qob2JqKQkJKChHc3RQYWQqKShvYmopKQotCi0KLQotLyoqCi0gKiBHc3RQYWRMaW5rUmV0dXJuOgotICogQEdTVF9QQURfTElOS19PSwkJOiBsaW5rIHN1Y2NlZWRlZAotICogQEdTVF9QQURfTElOS19XUk9OR19ISUVSQVJDSFk6IHBhZHMgaGF2ZSBubyBjb21tb24gZ3JhbmRwYXJlbnQKLSAqIEBHU1RfUEFEX0xJTktfV0FTX0xJTktFRAk6IHBhZCB3YXMgYWxyZWFkeSBsaW5rZWQKLSAqIEBHU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OOiBwYWRzIGhhdmUgd3JvbmcgZGlyZWN0aW9uCi0gKiBAR1NUX1BBRF9MSU5LX05PRk9STUFUCTogcGFkcyBkbyBub3QgaGF2ZSBjb21tb24gZm9ybWF0Ci0gKiBAR1NUX1BBRF9MSU5LX05PU0NIRUQJOiBwYWRzIGNhbm5vdCBjb29wZXJhdGUgaW4gc2NoZWR1bGluZwotICogQEdTVF9QQURfTElOS19SRUZVU0VECTogcmVmdXNlZCBmb3Igc29tZSByZWFzb24KLSAqCi0gKiBSZXN1bHQgdmFsdWVzIGZyb20gZ3N0X3BhZF9saW5rIGFuZCBmcmllbmRzLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfUEFEX0xJTktfT0sgICAgICAgICAgICAgICA9ICAwLAotICBHU1RfUEFEX0xJTktfV1JPTkdfSElFUkFSQ0hZICA9IC0xLAotICBHU1RfUEFEX0xJTktfV0FTX0xJTktFRCAgICAgICA9IC0yLAotICBHU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OICA9IC0zLAotICBHU1RfUEFEX0xJTktfTk9GT1JNQVQgICAgICAgICA9IC00LAotICBHU1RfUEFEX0xJTktfTk9TQ0hFRCAgICAgICAgICA9IC01LAotICBHU1RfUEFEX0xJTktfUkVGVVNFRCAgICAgICAgICA9IC02Ci19IEdzdFBhZExpbmtSZXR1cm47Ci0KLS8qKgotICogR1NUX1BBRF9MSU5LX0ZBSUxFRDoKLSAqIEByZXQ6IHRoZSAjR3N0UGFkTGlua1JldHVybiB2YWx1ZQotICoKLSAqIE1hY3JvIHRvIHRlc3QgaWYgdGhlIGdpdmVuICNHc3RQYWRMaW5rUmV0dXJuIHZhbHVlIGluZGljYXRlcyBhIGZhaWxlZAotICogbGluayBzdGVwLgotICovCi0jZGVmaW5lIEdTVF9QQURfTElOS19GQUlMRUQocmV0KSAoKHJldCkgPCBHU1RfUEFEX0xJTktfT0spCi0KLS8qKgotICogR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUw6Ci0gKiBAcmV0OiB0aGUgI0dzdFBhZExpbmtSZXR1cm4gdmFsdWUKLSAqCi0gKiBNYWNybyB0byB0ZXN0IGlmIHRoZSBnaXZlbiAjR3N0UGFkTGlua1JldHVybiB2YWx1ZSBpbmRpY2F0ZXMgYSBzdWNjZXNzZnVsCi0gKiBsaW5rIHN0ZXAuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwocmV0KSAoKHJldCkgPj0gR1NUX1BBRF9MSU5LX09LKQotCi0vKioKLSAqIEdzdEZsb3dSZXR1cm46Ci0gKiBAR1NUX0ZMT1dfT0s6CQkgRGF0YSBwYXNzaW5nIHdhcyBvay4KLSAqIEBHU1RfRkxPV19OT1RfTElOS0VEOgkgUGFkIGlzIG5vdCBsaW5rZWQuCi0gKiBAR1NUX0ZMT1dfRkxVU0hJTkc6CSAgICAgICAgIFBhZCBpcyBmbHVzaGluZy4KLSAqIEBHU1RfRkxPV19FT1M6ICAgICAgICAgICAgICAgIFBhZCBpcyBFT1MuCi0gKiBAR1NUX0ZMT1dfTk9UX05FR09USUFURUQ6CSBQYWQgaXMgbm90IG5lZ290aWF0ZWQuCi0gKiBAR1NUX0ZMT1dfRVJST1I6CQkgU29tZSAoZmF0YWwpIGVycm9yIG9jY3VycmVkLiBFbGVtZW50IGdlbmVyYXRpbmcKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZXJyb3Igc2hvdWxkIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSB3aXRoIG1vcmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuCi0gKiBAR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDoJIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gKiBAR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1M6CSBFbGVtZW50cyBjYW4gdXNlIHZhbHVlcyBzdGFydGluZyBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIChhbmQgaGlnaGVyKSB0byBkZWZpbmUgY3VzdG9tIHN1Y2Nlc3MKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzLgotICogQEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzE6CSBQcmUtZGVmaW5lZCBjdXN0b20gc3VjY2VzcyBjb2RlIChkZWZpbmUgeW91cgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tIHN1Y2Nlc3MgY29kZSB0byB0aGlzIHRvIGF2b2lkIGNvbXBpbGVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncykuCi0gKiBAR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMjoJIFByZS1kZWZpbmVkIGN1c3RvbSBzdWNjZXNzIGNvZGUuCi0gKiBAR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SOgkgRWxlbWVudHMgY2FuIHVzZSB2YWx1ZXMgc3RhcnRpbmcgZnJvbQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyAoYW5kIGxvd2VyKSB0byBkZWZpbmUgY3VzdG9tIGVycm9yIGNvZGVzLgotICogQEdTVF9GTE9XX0NVU1RPTV9FUlJPUl8xOgkgUHJlLWRlZmluZWQgY3VzdG9tIGVycm9yIGNvZGUgKGRlZmluZSB5b3VyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gZXJyb3IgY29kZSB0byB0aGlzIHRvIGF2b2lkIGNvbXBpbGVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncykuCi0gKiBAR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzI6CSBQcmUtZGVmaW5lZCBjdXN0b20gZXJyb3IgY29kZS4KLSAqCi0gKiBUaGUgcmVzdWx0IG9mIHBhc3NpbmcgZGF0YSB0byBhIHBhZC4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlIGN1c3RvbSByZXR1cm4gdmFsdWVzIHNob3VsZCBub3QgYmUgZXhwb3NlZCBvdXRzaWRlIG9mIHRoZQotICogZWxlbWVudCBzY29wZS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgLyogY3VzdG9tIHN1Y2Nlc3Mgc3RhcnRzIGhlcmUgKi8KLSAgR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMiA9IDEwMiwKLSAgR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMSA9IDEwMSwKLSAgR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1MgPSAxMDAsCi0KLSAgLyogY29yZSBwcmVkZWZpbmVkICovCi0gIEdTVF9GTE9XX09LCQkgID0gIDAsCi0gIC8qIGV4cGVjdGVkIGZhaWx1cmVzICovCi0gIEdTVF9GTE9XX05PVF9MSU5LRUQgICAgID0gLTEsCi0gIEdTVF9GTE9XX0ZMVVNISU5HICAgICAgID0gLTIsCi0gIC8qIGVycm9yIGNhc2VzICovCi0gIEdTVF9GTE9XX0VPUyAgICAgICAgICAgID0gLTMsCi0gIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEID0gLTQsCi0gIEdTVF9GTE9XX0VSUk9SCSAgPSAtNSwKLSAgR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRCAgPSAtNiwKLQotICAvKiBjdXN0b20gZXJyb3Igc3RhcnRzIGhlcmUgKi8KLSAgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SICAgPSAtMTAwLAotICBHU1RfRkxPV19DVVNUT01fRVJST1JfMSA9IC0xMDEsCi0gIEdTVF9GTE9XX0NVU1RPTV9FUlJPUl8yID0gLTEwMgotfSBHc3RGbG93UmV0dXJuOwotCi1jb25zdCBnY2hhcioJICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAoR3N0Rmxvd1JldHVybiByZXQpOwotR1F1YXJrCQkJICAgICAgICAgIGdzdF9mbG93X3RvX3F1YXJrIChHc3RGbG93UmV0dXJuIHJldCk7Ci1jb25zdCBnY2hhciogICAgICAgICAgZ3N0X3BhZF9saW5rX2dldF9uYW1lIChHc3RQYWRMaW5rUmV0dXJuIHJldCk7Ci0KLS8qKgotICogR3N0UGFkTGlua0NoZWNrOgotICogQEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HOiBEb24ndCBjaGVjayBoaWVyYXJjaHkgb3IgY2FwcyBjb21wYXRpYmlsaXR5LgotICogQEdTVF9QQURfTElOS19DSEVDS19ISUVSQVJDSFk6IENoZWNrIHRoZSBwYWRzIGhhdmUgc2FtZSBwYXJlbnRzL2dyYW5kcGFyZW50cy4KLSAqICAgQ291bGQgYmUgb21pdHRlZCBpZiBpdCBpcyBhbHJlYWR5IGtub3duIHRoYXQgdGhlIHR3byBlbGVtZW50cyB0aGF0IG93biB0aGUKLSAqICAgcGFkcyBhcmUgaW4gdGhlIHNhbWUgYmluLgotICogQEdTVF9QQURfTElOS19DSEVDS19URU1QTEFURV9DQVBTOiBDaGVjayBpZiB0aGUgcGFkcyBhcmUgY29tcGF0aWJsZSBieSB1c2luZwotICogICB0aGVpciB0ZW1wbGF0ZSBjYXBzLiBUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gQEdTVF9QQURfTElOS19DSEVDS19DQVBTLCBidXQKLSAqICAgd291bGQgYmUgdW5zYWZlIGUuZy4gaWYgb25lIHBhZCBoYXMgJUdTVF9DQVBTX0FOWS4KLSAqIEBHU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUzogQ2hlY2sgaWYgdGhlIHBhZHMgYXJlIGNvbXBhdGlibGUgYnkgY29tcGFyaW5nIHRoZQotICogICBjYXBzIHJldHVybmVkIGJ5IGdzdF9wYWRfcXVlcnlfY2FwcygpLgotICogQEdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUOiBUaGUgZGVmYXVsdCBjaGVja3MgZG9uZSB3aGVuIGxpbmtpbmcKLSAqICAgcGFkcyAoaS5lLiB0aGUgb25lcyB1c2VkIGJ5IGdzdF9wYWRfbGluaygpKS4KLSAqCi0gKiBUaGUgYW1vdW50IG9mIGNoZWNraW5nIHRvIGJlIGRvbmUgd2hlbiBsaW5raW5nIHBhZHMuIEBHU1RfUEFEX0xJTktfQ0hFQ0tfQ0FQUwotICogYW5kIEBHU1RfUEFEX0xJTktfQ0hFQ0tfVEVNUExBVEVfQ0FQUyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBJZiBib3RoIGFyZQotICogc3BlY2lmaWVkLCBleHBlbnNpdmUgYnV0IHNhZmUgQEdTVF9QQURfTElOS19DSEVDS19DQVBTIGFyZSBwZXJmb3JtZWQuCi0gKgotICogPHdhcm5pbmc+PHBhcmE+Ci0gKiBPbmx5IGRpc2FibGUgc29tZSBvZiB0aGUgY2hlY2tzIGlmIHlvdSBhcmUgMTAwJSBjZXJ0YWluIHlvdSBrbm93IHRoZSBsaW5rCi0gKiB3aWxsIG5vdCBmYWlsIGJlY2F1c2Ugb2YgaGllcmFyY2h5L2NhcHMgY29tcGF0aWJpbGl0eSBmYWlsdXJlcy4gSWYgdW5jZXJ0YWluLAotICogdXNlIHRoZSBkZWZhdWx0IGNoZWNrcyAoJUdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUKSBvciB0aGUgcmVndWxhciBtZXRob2RzCi0gKiBmb3IgbGlua2luZyB0aGUgcGFkcy4KLSAqIDwvcGFyYT48L3dhcm5pbmc+Ci0gKi8KLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcgICAgICAgPSAwLAotICBHU1RfUEFEX0xJTktfQ0hFQ0tfSElFUkFSQ0hZICAgICA9IDEgPDwgMCwKLSAgR1NUX1BBRF9MSU5LX0NIRUNLX1RFTVBMQVRFX0NBUFMgPSAxIDw8IDEsCi0gIEdTVF9QQURfTElOS19DSEVDS19DQVBTICAgICAgICAgID0gMSA8PCAyLAotCi0gIEdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUICAgICAgID0gR1NUX1BBRF9MSU5LX0NIRUNLX0hJRVJBUkNIWSB8IEdTVF9QQURfTElOS19DSEVDS19DQVBTCi19IEdzdFBhZExpbmtDaGVjazsKLQotLyogcGFkIHN0YXRlcyAqLwotLyoqCi0gKiBHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uOgotICogQHBhZDogYSAjR3N0UGFkCi0gKiBAcGFyZW50OiB0aGUgcGFyZW50IG9mIEBwYWQKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBwYWQgaXMgYWN0aXZhdGVkIGR1cmluZyB0aGUgZWxlbWVudAotICogUkVBRFkgdG8gUEFVU0VEIHN0YXRlIGNoYW5nZS4gQnkgZGVmYXVsdCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUKLSAqIGFjdGl2YXRlIGZ1bmN0aW9uIHRoYXQgcHV0cyB0aGUgcGFkIGluIHB1c2ggbW9kZSBidXQgZWxlbWVudHMgY2FuCi0gKiBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGFjdGl2YXRlIHRoZSBwYWQgaW4gcHVsbCBtb2RlIGlmIHRoZXkgd2lzaC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIGNvdWxkIGJlIGFjdGl2YXRlZC4KLSAqLwotdHlwZWRlZiBnYm9vbGVhbgkJKCpHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uKQkoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50KTsKLS8qKgotICogR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb246Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqIEBwYXJlbnQ6IHRoZSBwYXJlbnQgb2YgQHBhZAotICogQG1vZGU6IHRoZSByZXF1ZXN0ZWQgYWN0aXZhdGlvbiBtb2RlIG9mIEBwYWQKLSAqIEBhY3RpdmU6IGFjdGl2YXRlIG9yIGRlYWN0aXZhdGUgdGhlIHBhZC4KLSAqCi0gKiBUaGUgcHJvdG90eXBlIG9mIHRoZSBwdXNoIGFuZCBwdWxsIGFjdGl2YXRlIGZ1bmN0aW9ucy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIGNvdWxkIGJlIGFjdGl2YXRlZCBvciBkZWFjdGl2YXRlZC4KLSAqLwotdHlwZWRlZiBnYm9vbGVhbgkJKCpHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbikJKEdzdFBhZCAqcGFkLCBHc3RPYmplY3QgKnBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotCi0KLS8qIGRhdGEgcGFzc2luZyAqLwotLyoqCi0gKiBHc3RQYWRDaGFpbkZ1bmN0aW9uOgotICogQHBhZDogdGhlIHNpbmsgI0dzdFBhZCB0aGF0IHBlcmZvcm1lZCB0aGUgY2hhaW4uCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZC4gSWYgdGhlICNHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQKLSAqICAgICAgICAgIGZsYWcgaXMgc2V0LCBAcGFyZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LSVOVUxMIGFuZCByZW1haW4gdmFsaWQKLSAqICAgICAgICAgIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCi0gKiBAYnVmZmVyOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0QnVmZmVyIHRoYXQgaXMgY2hhaW5lZCwgbm90ICVOVUxMLgotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBzaW5rcGFkcyB3aGVuIGNoYWluaW5nIGJ1ZmZlcnMuCi0gKiBUaGUgZnVuY3Rpb24gdHlwaWNhbGx5IHByb2Nlc3NlcyB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlIGJ1ZmZlciBhbmQKLSAqIGVpdGhlciBjb25zdW1lcyB0aGUgZGF0YSBvciBwYXNzZXMgaXQgb24gdG8gdGhlIGludGVybmFsbHkgbGlua2VkIHBhZChzKS4KLSAqCi0gKiBUaGUgaW1wbGVtZW50ZXIgb2YgdGhpcyBmdW5jdGlvbiByZWNlaXZlcyBhIHJlZmNvdW50IHRvIEBidWZmZXIgYW5kIHNob3VsZAotICogZ3N0X2J1ZmZlcl91bnJlZigpIHdoZW4gdGhlIGJ1ZmZlciBpcyBubyBsb25nZXIgbmVlZGVkLgotICoKLSAqIFdoZW4gYSBjaGFpbiBmdW5jdGlvbiBkZXRlY3RzIGFuIGVycm9yIGluIHRoZSBkYXRhIHN0cmVhbSwgaXQgbXVzdCBwb3N0IGFuCi0gKiBlcnJvciBvbiB0aGUgYnVzIGFuZCByZXR1cm4gYW4gYXBwcm9wcmlhdGUgI0dzdEZsb3dSZXR1cm4gdmFsdWUuCi0gKgotICogUmV0dXJuczogI0dTVF9GTE9XX09LIGZvciBzdWNjZXNzCi0gKi8KLXR5cGVkZWYgR3N0Rmxvd1JldHVybgkJKCpHc3RQYWRDaGFpbkZ1bmN0aW9uKQkJKEdzdFBhZCAqcGFkLCBHc3RPYmplY3QgKnBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpidWZmZXIpOwotCi0vKioKLSAqIEdzdFBhZENoYWluTGlzdEZ1bmN0aW9uOgotICogQHBhZDogdGhlIHNpbmsgI0dzdFBhZCB0aGF0IHBlcmZvcm1lZCB0aGUgY2hhaW4uCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZC4gSWYgdGhlICNHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQKLSAqICAgICAgICAgIGZsYWcgaXMgc2V0LCBAcGFyZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LSVOVUxMIGFuZCByZW1haW4gdmFsaWQKLSAqICAgICAgICAgIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCi0gKiBAbGlzdDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEJ1ZmZlckxpc3QgdGhhdCBpcyBjaGFpbmVkLCBub3QgJU5VTEwuCi0gKgotICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIHNpbmtwYWRzIHdoZW4gY2hhaW5pbmcgYnVmZmVyIGxpc3RzLgotICogVGhlIGZ1bmN0aW9uIHR5cGljYWxseSBwcm9jZXNzZXMgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBidWZmZXIgbGlzdCBhbmQKLSAqIGVpdGhlciBjb25zdW1lcyB0aGUgZGF0YSBvciBwYXNzZXMgaXQgb24gdG8gdGhlIGludGVybmFsbHkgbGlua2VkIHBhZChzKS4KLSAqCi0gKiBUaGUgaW1wbGVtZW50ZXIgb2YgdGhpcyBmdW5jdGlvbiByZWNlaXZlcyBhIHJlZmNvdW50IHRvIEBsaXN0IGFuZAotICogc2hvdWxkIGdzdF9idWZmZXJfbGlzdF91bnJlZigpIHdoZW4gdGhlIGxpc3QgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLSAqCi0gKiBXaGVuIGEgY2hhaW5saXN0IGZ1bmN0aW9uIGRldGVjdHMgYW4gZXJyb3IgaW4gdGhlIGRhdGEgc3RyZWFtLCBpdCBtdXN0Ci0gKiBwb3N0IGFuIGVycm9yIG9uIHRoZSBidXMgYW5kIHJldHVybiBhbiBhcHByb3ByaWF0ZSAjR3N0Rmxvd1JldHVybiB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiAjR1NUX0ZMT1dfT0sgZm9yIHN1Y2Nlc3MKLSAqLwotdHlwZWRlZiBHc3RGbG93UmV0dXJuCQkoKkdzdFBhZENoYWluTGlzdEZ1bmN0aW9uKQkoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXJMaXN0ICpsaXN0KTsKLQotLyoqCi0gKiBHc3RQYWRHZXRSYW5nZUZ1bmN0aW9uOgotICogQHBhZDogdGhlIHNyYyAjR3N0UGFkIHRvIHBlcmZvcm0gdGhlIGdldHJhbmdlIG9uLgotICogQHBhcmVudDogKGFsbG93LW5vbmUpOiB0aGUgcGFyZW50IG9mIEBwYWQuIElmIHRoZSAjR1NUX1BBRF9GTEFHX05FRURfUEFSRU5UCi0gKiAgICAgICAgICBmbGFnIGlzIHNldCwgQHBhcmVudCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vdC0lTlVMTCBhbmQgcmVtYWluIHZhbGlkCi0gKiAgICAgICAgICBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgotICogQG9mZnNldDogdGhlIG9mZnNldCBvZiB0aGUgcmFuZ2UKLSAqIEBsZW5ndGg6IHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlCi0gKiBAYnVmZmVyOiBhIG1lbW9yeSBsb2NhdGlvbiB0byBob2xkIHRoZSByZXN1bHQgYnVmZmVyLCBjYW5ub3QgYmUgJU5VTEwuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbiBzb3VyY2UgcGFkcyB3aGVuIGEgcGVlciBlbGVtZW50Ci0gKiByZXF1ZXN0IGEgYnVmZmVyIGF0IHRoZSBzcGVjaWZpZWQgQG9mZnNldCBhbmQgQGxlbmd0aC4gSWYgdGhpcyBmdW5jdGlvbgotICogcmV0dXJucyAjR1NUX0ZMT1dfT0ssIHRoZSByZXN1bHQgYnVmZmVyIHdpbGwgYmUgc3RvcmVkIGluIEBidWZmZXIuIFRoZQotICogY29udGVudHMgb2YgQGJ1ZmZlciBpcyBpbnZhbGlkIGZvciBhbnkgb3RoZXIgcmV0dXJuIHZhbHVlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgaW5zdGFsbGVkIG9uIGEgc291cmNlIHBhZCB3aXRoCi0gKiBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbigpIGFuZCBjYW4gb25seSBiZSBjYWxsZWQgb24gc291cmNlIHBhZHMgYWZ0ZXIKLSAqIHRoZXkgYXJlIHN1Y2Nlc3NmdWxseSBhY3RpdmF0ZWQgd2l0aCBnc3RfcGFkX2FjdGl2YXRlX21vZGUoKSB3aXRoIHRoZQotICogI0dTVF9QQURfTU9ERV9QVUxMLgotICoKLSAqIEBvZmZzZXQgYW5kIEBsZW5ndGggYXJlIGFsd2F5cyBnaXZlbiBpbiBieXRlIHVuaXRzLiBAb2Zmc2V0IG11c3Qgbm9ybWFsbHkgYmUgYSB2YWx1ZQotICogYmV0d2VlbiAwIGFuZCB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIGF2YWlsYWJsZSBvbiBAcGFkLiBUaGUKLSAqIGxlbmd0aCAoZHVyYXRpb24gaW4gYnl0ZXMpIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBhICNHU1RfUVVFUllfRFVSQVRJT04gb3Igd2l0aCBhCi0gKiAjR1NUX1FVRVJZX1NFRUtJTkcuCi0gKgotICogQW55IEBvZmZzZXQgbGFyZ2VyIG9yIGVxdWFsIHRoYW4gdGhlIGxlbmd0aCB3aWxsIG1ha2UgdGhlIGZ1bmN0aW9uIHJldHVybgotICogI0dTVF9GTE9XX0VPUywgd2hpY2ggY29ycmVzcG9uZHMgdG8gRU9TLiBJbiB0aGlzIGNhc2UgQGJ1ZmZlciBkb2VzIG5vdAotICogY29udGFpbiBhIHZhbGlkIGJ1ZmZlci4KLSAqCi0gKiBUaGUgYnVmZmVyIHNpemUgb2YgQGJ1ZmZlciB3aWxsIG9ubHkgYmUgc21hbGxlciB0aGFuIEBsZW5ndGggd2hlbiBAb2Zmc2V0IGlzCi0gKiBuZWFyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4gSW4gYWxsIG90aGVyIGNhc2VzLCB0aGUgc2l6ZSBvZiBAYnVmZmVyIG11c3QgYmUKLSAqIGV4YWN0bHkgdGhlIHJlcXVlc3RlZCBzaXplLgotICoKLSAqIEl0IGlzIGFsbG93ZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYSAwIEBsZW5ndGggYW5kIHZhbGlkIEBvZmZzZXQsIGluCi0gKiB3aGljaCBjYXNlIEBidWZmZXIgd2lsbCBjb250YWluIGEgMC1zaXplZCBidWZmZXIgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zCi0gKiAjR1NUX0ZMT1dfT0suCi0gKgotICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgLTEgQG9mZnNldCwgdGhlIHNlcXVlbnRpYWxseSBuZXh0IGJ1ZmZlcgotICogb2YgbGVuZ3RoIEBsZW5ndGggaW4gdGhlIHN0cmVhbSBpcyByZXR1cm5lZC4KLSAqCi0gKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSAtMSBAbGVuZ3RoLCBhIGJ1ZmZlciB3aXRoIGEgZGVmYXVsdAotICogb3B0aW1hbCBsZW5ndGggaXMgcmV0dXJuZWQgaW4gQGJ1ZmZlci4gVGhlIGxlbmd0aCBtaWdodCBkZXBlbmQgb24gdGhlIHZhbHVlCi0gKiBvZiBAb2Zmc2V0LgotICoKLSAqIFJldHVybnM6ICNHU1RfRkxPV19PSyBmb3Igc3VjY2VzcyBhbmQgYSB2YWxpZCBidWZmZXIgaW4gQGJ1ZmZlci4gQW55IG90aGVyCi0gKiByZXR1cm4gdmFsdWUgbGVhdmVzIEBidWZmZXIgdW5kZWZpbmVkLgotICovCi10eXBlZGVmIEdzdEZsb3dSZXR1cm4JCSgqR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbikJKEdzdFBhZCAqcGFkLCBHc3RPYmplY3QgKnBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICoqYnVmZmVyKTsKLQotLyoqCi0gKiBHc3RQYWRFdmVudEZ1bmN0aW9uOgotICogQHBhZDogdGhlICNHc3RQYWQgdG8gaGFuZGxlIHRoZSBldmVudC4KLSAqIEBwYXJlbnQ6IChhbGxvdy1ub25lKTogdGhlIHBhcmVudCBvZiBAcGFkLiBJZiB0aGUgI0dTVF9QQURfRkxBR19ORUVEX1BBUkVOVAotICogICAgICAgICAgZmxhZyBpcyBzZXQsIEBwYXJlbnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub3QtJU5VTEwgYW5kIHJlbWFpbiB2YWxpZAotICogICAgICAgICAgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KLSAqIEBldmVudDogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEV2ZW50IHRvIGhhbmRsZS4KLSAqCi0gKiBGdW5jdGlvbiBzaWduYXR1cmUgdG8gaGFuZGxlIGFuIGV2ZW50IGZvciB0aGUgcGFkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWQgY291bGQgaGFuZGxlIHRoZSBldmVudC4KLSAqLwotdHlwZWRlZiBnYm9vbGVhbgkJKCpHc3RQYWRFdmVudEZ1bmN0aW9uKQkJKEdzdFBhZCAqcGFkLCBHc3RPYmplY3QgKnBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RXZlbnQgKmV2ZW50KTsKLQotLyoqCi0gKiBHc3RQYWRFdmVudEZ1bGxGdW5jdGlvbjoKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRvIGhhbmRsZSB0aGUgZXZlbnQuCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZC4gSWYgdGhlICNHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQKLSAqICAgICAgICAgIGZsYWcgaXMgc2V0LCBAcGFyZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LSVOVUxMIGFuZCByZW1haW4gdmFsaWQKLSAqICAgICAgICAgIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCi0gKiBAZXZlbnQ6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RFdmVudCB0byBoYW5kbGUuCi0gKgotICogRnVuY3Rpb24gc2lnbmF0dXJlIHRvIGhhbmRsZSBhbiBldmVudCBmb3IgdGhlIHBhZC4KLSAqCi0gKiBUaGlzIHZhcmlhbnQgaXMgZm9yIHNwZWNpZmljIGVsZW1lbnRzIHRoYXQgd2lsbCB0YWtlIGludG8gYWNjb3VudCB0aGUKLSAqIGxhc3QgZG93bnN0cmVhbSBmbG93IHJldHVybiAoZnJvbSBhIHBhZCBwdXNoKSwgaW4gd2hpY2ggY2FzZSB0aGV5IGNhbgotICogcmV0dXJuIGl0LgotICoKLSAqIFJldHVybnM6ICVHU1RfRkxPV19PSyBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQgcHJvcGVybHksIG9yIGFueSBvdGhlcgotICogI0dzdEZsb3dSZXR1cm4gZGVwZW5kZW50IG9uIGRvd25zdHJlYW0gc3RhdGUuCi0gKgotICogU2luY2U6IDEuOAotICovCi10eXBlZGVmIEdzdEZsb3dSZXR1cm4JCSgqR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb24pCShHc3RQYWQgKnBhZCwgR3N0T2JqZWN0ICpwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEV2ZW50ICpldmVudCk7Ci0KLQotLyogaW50ZXJuYWwgbGlua3MgKi8KLS8qKgotICogR3N0UGFkSXRlckludExpbmtGdW5jdGlvbjoKLSAqIEBwYWQ6IFRoZSAjR3N0UGFkIHRvIHF1ZXJ5LgotICogQHBhcmVudDogKGFsbG93LW5vbmUpOiB0aGUgcGFyZW50IG9mIEBwYWQuIElmIHRoZSAjR1NUX1BBRF9GTEFHX05FRURfUEFSRU5UCi0gKiAgICAgICAgICBmbGFnIGlzIHNldCwgQHBhcmVudCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vdC0lTlVMTCBhbmQgcmVtYWluIHZhbGlkCi0gKiAgICAgICAgICBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIFRoZSBzaWduYXR1cmUgb2YgdGhlIGludGVybmFsIHBhZCBsaW5rIGl0ZXJhdG9yIGZ1bmN0aW9uLgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNHc3RJdGVyYXRvciB0aGF0IHdpbGwgaXRlcmF0ZSBvdmVyIGFsbCBwYWRzIHRoYXQgYXJlCi0gKiBsaW5rZWQgdG8gdGhlIGdpdmVuIHBhZCBvbiB0aGUgaW5zaWRlIG9mIHRoZSBwYXJlbnQgZWxlbWVudC4KLSAqCi0gKiB0aGUgY2FsbGVyIG11c3QgY2FsbCBnc3RfaXRlcmF0b3JfZnJlZSgpIGFmdGVyIHVzYWdlLgotICovCi10eXBlZGVmIEdzdEl0ZXJhdG9yKiAgICAgICAgICAgKCpHc3RQYWRJdGVySW50TGlua0Z1bmN0aW9uKSAgICAoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50KTsKLQotLyogZ2VuZXJpYyBxdWVyeSBmdW5jdGlvbiAqLwotLyoqCi0gKiBHc3RQYWRRdWVyeUZ1bmN0aW9uOgotICogQHBhZDogdGhlICNHc3RQYWQgdG8gcXVlcnkuCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZC4gSWYgdGhlICNHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQKLSAqICAgICAgICAgIGZsYWcgaXMgc2V0LCBAcGFyZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LSVOVUxMIGFuZCByZW1haW4gdmFsaWQKLSAqICAgICAgICAgIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCi0gKiBAcXVlcnk6IHRoZSAjR3N0UXVlcnkgb2JqZWN0IHRvIGV4ZWN1dGUKLSAqCi0gKiBUaGUgc2lnbmF0dXJlIG9mIHRoZSBxdWVyeSBmdW5jdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgotICovCi10eXBlZGVmIGdib29sZWFuCQkoKkdzdFBhZFF1ZXJ5RnVuY3Rpb24pCQkoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAqcXVlcnkpOwotCi0KLS8qIGxpbmtpbmcgKi8KLS8qKgotICogR3N0UGFkTGlua0Z1bmN0aW9uOgotICogQHBhZDogdGhlICNHc3RQYWQgdGhhdCBpcyBsaW5rZWQuCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZC4gSWYgdGhlICNHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQKLSAqICAgICAgICAgIGZsYWcgaXMgc2V0LCBAcGFyZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LSVOVUxMIGFuZCByZW1haW4gdmFsaWQKLSAqICAgICAgICAgIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCi0gKiBAcGVlcjogdGhlIHBlZXIgI0dzdFBhZCBvZiB0aGUgbGluawotICoKLSAqIEZ1bmN0aW9uIHNpZ25hdHVyZSB0byBoYW5kbGUgYSBuZXcgbGluayBvbiB0aGUgcGFkLgotICoKLSAqIFJldHVybnM6IHRoZSByZXN1bHQgb2YgdGhlIGxpbmsgd2l0aCB0aGUgc3BlY2lmaWVkIHBlZXIuCi0gKi8KLXR5cGVkZWYgR3N0UGFkTGlua1JldHVybgkoKkdzdFBhZExpbmtGdW5jdGlvbikJCShHc3RQYWQgKnBhZCwgR3N0T2JqZWN0ICpwYXJlbnQsIEdzdFBhZCAqcGVlcik7Ci0vKioKLSAqIEdzdFBhZFVubGlua0Z1bmN0aW9uOgotICogQHBhZDogdGhlICNHc3RQYWQgdGhhdCBpcyBsaW5rZWQuCi0gKiBAcGFyZW50OiAoYWxsb3ctbm9uZSk6IHRoZSBwYXJlbnQgb2YgQHBhZC4gSWYgdGhlICNHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQKLSAqICAgICAgICAgIGZsYWcgaXMgc2V0LCBAcGFyZW50IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm90LSVOVUxMIGFuZCByZW1haW4gdmFsaWQKLSAqICAgICAgICAgIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCi0gKgotICogRnVuY3Rpb24gc2lnbmF0dXJlIHRvIGhhbmRsZSBhIHVubGlua2luZyB0aGUgcGFkIHByb20gaXRzIHBlZXIuCi0gKi8KLXR5cGVkZWYgdm9pZAkJCSgqR3N0UGFkVW5saW5rRnVuY3Rpb24pCQkoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50KTsKLQotCi0vKiBtaXNjICovCi0vKioKLSAqIEdzdFBhZEZvcndhcmRGdW5jdGlvbjoKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRoYXQgaXMgZm9yd2FyZGVkLgotICogQHVzZXJfZGF0YTogdGhlIGdwb2ludGVyIHRvIG9wdGlvbmFsIHVzZXIgZGF0YS4KLSAqCi0gKiBBIGZvcndhcmQgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbGwgaW50ZXJuYWxseSBsaW5rZWQgcGFkcywgc2VlCi0gKiBnc3RfcGFkX2ZvcndhcmQoKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZGlzcGF0Y2hpbmcgcHJvY2VkdXJlIGhhcyB0byBiZSBzdG9wcGVkLgotICovCi10eXBlZGVmIGdib29sZWFuCQkoKkdzdFBhZEZvcndhcmRGdW5jdGlvbikJKEdzdFBhZCAqcGFkLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIEdzdFBhZFByb2JlVHlwZToKLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfSU5WQUxJRDogaW52YWxpZCBwcm9iZSB0eXBlCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX0lETEU6IHByb2JlIGlkbGUgcGFkcyBhbmQgYmxvY2sgd2hpbGUgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZAotICogQEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSzogcHJvYmUgYW5kIGJsb2NrIHBhZHMKLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSOiBwcm9iZSBidWZmZXJzCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNUOiBwcm9iZSBidWZmZXIgbGlzdHMKLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTTogcHJvYmUgZG93bnN0cmVhbSBldmVudHMKLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfVVBTVFJFQU06IHByb2JlIHVwc3RyZWFtIGV2ZW50cwotICogQEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSDogcHJvYmUgZmx1c2ggZXZlbnRzLiBUaGlzIHByb2JlIGhhcyB0byBiZQotICogICAgIGV4cGxpY2l0bHkgZW5hYmxlZCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoZQotICogICAgIEBAR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0gb3IKLSAqICAgICBAQEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9VUFNUUkVBTSBwcm9iZSB0eXBlcy4KLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTTogcHJvYmUgZG93bnN0cmVhbSBxdWVyaWVzCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX1VQU1RSRUFNOiBwcm9iZSB1cHN0cmVhbSBxdWVyaWVzCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0g6IHByb2JlIHB1c2gKLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfUFVMTDogcHJvYmUgcHVsbAotICogQEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS0lORzogcHJvYmUgYW5kIGJsb2NrIGF0IHRoZSBuZXh0IG9wcG9ydHVuaXR5LCBhdCBkYXRhIGZsb3cgb3Igd2hlbiBpZGxlCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfRE9XTlNUUkVBTTogcHJvYmUgZG93bnN0cmVhbSBkYXRhIChidWZmZXJzLCBidWZmZXIgbGlzdHMsIGFuZCBldmVudHMpCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfVVBTVFJFQU06IHByb2JlIHVwc3RyZWFtIGRhdGEgKGV2ZW50cykKLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9CT1RIOiBwcm9iZSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBkYXRhIChidWZmZXJzLCBidWZmZXIgbGlzdHMsIGFuZCBldmVudHMpCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLX0RPV05TVFJFQU06IHByb2JlIGFuZCBibG9jayBkb3duc3RyZWFtIGRhdGEgKGJ1ZmZlcnMsIGJ1ZmZlciBsaXN0cywgYW5kIGV2ZW50cykKLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfVVBTVFJFQU06IHByb2JlIGFuZCBibG9jayB1cHN0cmVhbSBkYXRhIChldmVudHMpCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEg6IHByb2JlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGV2ZW50cwotICogQEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RIOiBwcm9iZSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBxdWVyaWVzCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX0FMTF9CT1RIOiBwcm9iZSB1cHN0cmVhbSBldmVudHMgYW5kIHF1ZXJpZXMgYW5kIGRvd25zdHJlYW0gYnVmZmVycywgYnVmZmVyIGxpc3RzLCBldmVudHMgYW5kIHF1ZXJpZXMKLSAqIEBHU1RfUEFEX1BST0JFX1RZUEVfU0NIRURVTElORzogcHJvYmUgcHVzaCBhbmQgcHVsbAotICoKLSAqIFRoZSBkaWZmZXJlbnQgcHJvYmluZyB0eXBlcyB0aGF0IGNhbiBvY2N1ci4gV2hlbiBlaXRoZXIgb25lIG9mCi0gKiBAR1NUX1BBRF9QUk9CRV9UWVBFX0lETEUgb3IgQEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSyBpcyB1c2VkLCB0aGUgcHJvYmUgd2lsbCBiZSBhCi0gKiBibG9ja2luZyBwcm9iZS4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9QQURfUFJPQkVfVFlQRV9JTlZBTElEICAgICAgICAgID0gMCwKLSAgLyogZmxhZ3MgdG8gY29udHJvbCBibG9ja2luZyAqLwotICBHU1RfUEFEX1BST0JFX1RZUEVfSURMRSAgICAgICAgICAgICA9ICgxIDw8IDApLAotICBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0sgICAgICAgICAgICA9ICgxIDw8IDEpLAotICAvKiBmbGFncyB0byBzZWxlY3QgZGF0YXR5cGVzICovCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIgICAgICAgICAgID0gKDEgPDwgNCksCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVJfTElTVCAgICAgID0gKDEgPDwgNSksCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNID0gKDEgPDwgNiksCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9VUFNUUkVBTSAgID0gKDEgPDwgNyksCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCAgICAgID0gKDEgPDwgOCksCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNID0gKDEgPDwgOSksCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9VUFNUUkVBTSAgID0gKDEgPDwgMTApLAotICAvKiBmbGFncyB0byBzZWxlY3Qgc2NoZWR1bGluZyBtb2RlICovCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIICAgICAgICAgICAgID0gKDEgPDwgMTIpLAotICBHU1RfUEFEX1BST0JFX1RZUEVfUFVMTCAgICAgICAgICAgICA9ICgxIDw8IDEzKSwKLQotICAvKiBmbGFnIGNvbWJpbmF0aW9ucyAqLwotICBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tJTkcgICAgICAgICA9IEdTVF9QQURfUFJPQkVfVFlQRV9JRExFIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLLAotICBHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9ET1dOU1RSRUFNICA9IEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIgfCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSX0xJU1QgfCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwKLSAgR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfVVBTVFJFQU0gICAgPSBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfVVBTVFJFQU0sCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0JPVEggICAgICAgID0gR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfRE9XTlNUUkVBTSB8IEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX1VQU1RSRUFNLAotICBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSA9IEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSyB8IEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0RPV05TVFJFQU0sCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS19VUFNUUkVBTSAgID0gR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfVVBTVFJFQU0sCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9CT1RIICAgICAgID0gR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0gfCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfVVBTVFJFQU0sCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RIICAgICAgID0gR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0gfCBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfVVBTVFJFQU0sCi0gIEdTVF9QQURfUFJPQkVfVFlQRV9BTExfQk9USCAgICAgICAgID0gR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfQk9USCB8IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RILAotICBHU1RfUEFEX1BST0JFX1RZUEVfU0NIRURVTElORyAgICAgICA9IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwKLX0gR3N0UGFkUHJvYmVUeXBlOwotCi0KLS8qKgotICogR3N0UGFkUHJvYmVSZXR1cm46Ci0gKiBAR1NUX1BBRF9QUk9CRV9PSzogbm9ybWFsIHByb2JlIHJldHVybiB2YWx1ZS4gVGhpcyBsZWF2ZXMgdGhlIHByb2JlIGluCi0gKiAgICAgICAgcGxhY2UsIGFuZCBkZWZlcnMgZGVjaXNpb25zIGFib3V0IGRyb3BwaW5nIG9yIHBhc3NpbmcgZGF0YSB0byBvdGhlcgotICogICAgICAgIHByb2JlcywgaWYgYW55LiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgcHJvYmVzLCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKLSAqICAgICAgICBmb3IgdGhlIHByb2JlIHR5cGUgYXBwbGllcyAoYmxvY2sgZm9yIGJsb2NraW5nIHByb2JlcywgYW5kIHBhc3MgZm9yCi0gKiAgICAgICAgbm9uLWJsb2NraW5nIHByb2JlcykuCi0gKiBAR1NUX1BBRF9QUk9CRV9EUk9QOiBkcm9wIGRhdGEgaW4gZGF0YSBwcm9iZXMuIEZvciBwdXNoIG1vZGUgdGhpcyBtZWFucyB0aGF0Ci0gKiAgICAgICAgdGhlIGRhdGEgaXRlbSBpcyBub3Qgc2VudCBkb3duc3RyZWFtLiBGb3IgcHVsbCBtb2RlLCBpdCBtZWFucyB0aGF0Ci0gKiAgICAgICAgdGhlIGRhdGEgaXRlbSBpcyBub3QgcGFzc2VkIHVwc3RyZWFtLiBJbiBib3RoIGNhc2VzLCBubyBtb3JlIHByb2JlcwotICogICAgICAgIGFyZSBjYWxsZWQgYW5kICNHU1RfRkxPV19PSyBvciAlVFJVRSBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgotICogQEdTVF9QQURfUFJPQkVfUkVNT1ZFOiByZW1vdmUgdGhpcyBwcm9iZS4KLSAqIEBHU1RfUEFEX1BST0JFX1BBU1M6IHBhc3MgdGhlIGRhdGEgaXRlbSBpbiB0aGUgYmxvY2sgcHJvYmUgYW5kIGJsb2NrIG9uIHRoZQotICogICAgICAgIG5leHQgaXRlbS4KLSAqIEBHU1RfUEFEX1BST0JFX0hBTkRMRUQ6IERhdGEgaGFzIGJlZW4gaGFuZGxlZCBpbiB0aGUgcHJvYmUgYW5kIHdpbGwgbm90IGJlCi0gKiAgICAgICAgZm9yd2FyZGVkIGZ1cnRoZXIuIEZvciBldmVudHMgYW5kIGJ1ZmZlcnMgdGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMKLSAqICAgICAgICBAR1NUX1BBRF9QUk9CRV9EUk9QIChleGNlcHQgdGhhdCBpbiB0aGlzIGNhc2UgeW91IG5lZWQgdG8gdW5yZWYgdGhlIGJ1ZmZlcgotICogICAgICAgIG9yIGV2ZW50IHlvdXJzZWxmKS4gRm9yIHF1ZXJpZXMgaXQgd2lsbCBhbHNvIHJldHVybiAlVFJVRSB0byB0aGUgY2FsbGVyLgotICogICAgICAgIFRoZSBwcm9iZSBjYW4gYWxzbyBtb2RpZnkgdGhlICNHc3RGbG93UmV0dXJuIHZhbHVlIGJ5IHVzaW5nIHRoZQotICogICAgICAgICNHU1RfUEFEX1BST0JFX0lORk9fRkxPV19SRVRVUk4oKSBhY2Nlc3Nvci4KLSAqICAgICAgICBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyBxdWVyeSBtdXN0IGNvbnRhaW4gdmFsaWQgZW50cmllcy4KLSAqICAgICAgICBTaW5jZTogMS42Ci0gKgotICogRGlmZmVyZW50IHJldHVybiB2YWx1ZXMgZm9yIHRoZSAjR3N0UGFkUHJvYmVDYWxsYmFjay4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9QQURfUFJPQkVfRFJPUCwKLSAgR1NUX1BBRF9QUk9CRV9PSywKLSAgR1NUX1BBRF9QUk9CRV9SRU1PVkUsCi0gIEdTVF9QQURfUFJPQkVfUEFTUywKLSAgR1NUX1BBRF9QUk9CRV9IQU5ETEVECi19IEdzdFBhZFByb2JlUmV0dXJuOwotCi0KLS8qKgotICogR3N0UGFkUHJvYmVJbmZvOgotICogQHR5cGU6IHRoZSBjdXJyZW50IHByb2JlIHR5cGUKLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBwcm9iZQotICogQGRhdGE6IChhbGxvdy1ub25lKTogdHlwZSBzcGVjaWZpYyBkYXRhLCBjaGVjayB0aGUgQHR5cGUgZmllbGQgdG8ga25vdyB0aGUKLSAqICAgIGRhdGF0eXBlLiAgVGhpcyBmaWVsZCBjYW4gYmUgJU5VTEwuCi0gKiBAb2Zmc2V0OiBvZmZzZXQgb2YgcHVsbCBwcm9iZSwgdGhpcyBmaWVsZCBpcyB2YWxpZCB3aGVuIEB0eXBlIGNvbnRhaW5zCi0gKiAgICAjR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwKLSAqIEBzaXplOiBzaXplIG9mIHB1bGwgcHJvYmUsIHRoaXMgZmllbGQgaXMgdmFsaWQgd2hlbiBAdHlwZSBjb250YWlucwotICogICAgI0dTVF9QQURfUFJPQkVfVFlQRV9QVUxMCi0gKgotICogSW5mbyBwYXNzZWQgaW4gdGhlICNHc3RQYWRQcm9iZUNhbGxiYWNrLgotICovCi1zdHJ1Y3QgX0dzdFBhZFByb2JlSW5mbwotewotICBHc3RQYWRQcm9iZVR5cGUgdHlwZTsKLSAgZ3Vsb25nIGlkOwotICBncG9pbnRlciBkYXRhOwotICBndWludDY0IG9mZnNldDsKLSAgZ3VpbnQgc2l6ZTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgdW5pb24gewotICAgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotICAgIHN0cnVjdCB7Ci0gICAgICBHc3RGbG93UmV0dXJuIGZsb3dfcmV0OwotICAgIH0gYWJpOwotICB9IEFCSTsKLX07Ci0KLSNkZWZpbmUgR1NUX1BBRF9QUk9CRV9JTkZPX1RZUEUoZCkgICAgICAgICAoKGQpLT50eXBlKQotI2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fSUQoZCkgICAgICAgICAgICgoZCktPmlkKQotI2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fREFUQShkKSAgICAgICAgICgoZCktPmRhdGEpCi0jZGVmaW5lIEdTVF9QQURfUFJPQkVfSU5GT19GTE9XX1JFVFVSTihkKSAgKChkKS0+QUJJLmFiaS5mbG93X3JldCkKLQotI2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSKGQpICAgICAgIEdTVF9CVUZGRVJfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShkKSkKLSNkZWZpbmUgR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUl9MSVNUKGQpICBHU1RfQlVGRkVSX0xJU1RfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShkKSkKLSNkZWZpbmUgR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UKGQpICAgICAgICBHU1RfRVZFTlRfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShkKSkKLSNkZWZpbmUgR1NUX1BBRF9QUk9CRV9JTkZPX1FVRVJZKGQpICAgICAgICBHU1RfUVVFUllfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShkKSkKLQotI2RlZmluZSBHU1RfUEFEX1BST0JFX0lORk9fT0ZGU0VUKGQpICAgICAgICgoZCktPm9mZnNldCkKLSNkZWZpbmUgR1NUX1BBRF9QUk9CRV9JTkZPX1NJWkUoZCkgICAgICAgICAoKGQpLT5zaXplKQotCi1Hc3RFdmVudCogICAgICBnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2V2ZW50ICAgICAgIChHc3RQYWRQcm9iZUluZm8gKiBpbmZvKTsKLUdzdFF1ZXJ5KiAgICAgIGdzdF9wYWRfcHJvYmVfaW5mb19nZXRfcXVlcnkgICAgICAgKEdzdFBhZFByb2JlSW5mbyAqIGluZm8pOwotR3N0QnVmZmVyKiAgICAgZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXIgICAgICAoR3N0UGFkUHJvYmVJbmZvICogaW5mbyk7Ci1Hc3RCdWZmZXJMaXN0KiBnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2J1ZmZlcl9saXN0IChHc3RQYWRQcm9iZUluZm8gKiBpbmZvKTsKLQotLyoqCi0gKiBHc3RQYWRQcm9iZUNhbGxiYWNrOgotICogQHBhZDogdGhlICNHc3RQYWQgdGhhdCBpcyBibG9ja2VkCi0gKiBAaW5mbzogI0dzdFBhZFByb2JlSW5mbwotICogQHVzZXJfZGF0YTogdGhlIGdwb2ludGVyIHRvIG9wdGlvbmFsIHVzZXIgZGF0YS4KLSAqCi0gKiBDYWxsYmFjayB1c2VkIGJ5IGdzdF9wYWRfYWRkX3Byb2JlKCkuIEdldHMgY2FsbGVkIHRvIG5vdGlmeSBhYm91dCB0aGUgY3VycmVudAotICogYmxvY2tpbmcgdHlwZS4KLSAqCi0gKiBUaGUgY2FsbGJhY2sgaXMgYWxsb3dlZCB0byBtb2RpZnkgdGhlIGRhdGEgcG9pbnRlciBpbiBAaW5mby4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RQYWRQcm9iZVJldHVybgotICovCi10eXBlZGVmIEdzdFBhZFByb2JlUmV0dXJuICAgKCpHc3RQYWRQcm9iZUNhbGxiYWNrKSAgIChHc3RQYWQgKnBhZCwgR3N0UGFkUHJvYmVJbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb246Ci0gKiBAcGFkOiB0aGUgI0dzdFBhZC4KLSAqIEBldmVudDogKGFsbG93LW5vbmUpOiBhIHN0aWNreSAjR3N0RXZlbnQuCi0gKiBAdXNlcl9kYXRhOiB0aGUgI2dwb2ludGVyIHRvIG9wdGlvbmFsIHVzZXIgZGF0YS4KLSAqCi0gKiBDYWxsYmFjayB1c2VkIGJ5IGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoKCkuCi0gKgotICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgJVRSVUUsIHRoZSBuZXh0IGV2ZW50IHdpbGwgYmUKLSAqIHJldHVybmVkLiBXaGVuICVGQUxTRSBpcyByZXR1cm5lZCwgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2goKSB3aWxsIHJldHVybi4KLSAqCi0gKiBXaGVuIEBldmVudCBpcyBzZXQgdG8gJU5VTEwsIHRoZSBpdGVtIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mIHN0aWNreSBldmVudHMuCi0gKiBAZXZlbnQgY2FuIGJlIHJlcGxhY2VkIGJ5IGFzc2lnbmluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcgdGhlIG9sZCBldmVudCB3aGVuCi0gKiByZW1vdmluZyBvciBtb2RpZnlpbmcuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGl0ZXJhdGlvbiBzaG91bGQgY29udGludWUKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAgKCpHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24pIChHc3RQYWQgKnBhZCwgR3N0RXZlbnQgKipldmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RQYWRGbGFnczoKLSAqIEBHU1RfUEFEX0ZMQUdfQkxPQ0tFRDogaXMgZGF0YWZsb3cgb24gYSBwYWQgYmxvY2tlZAotICogQEdTVF9QQURfRkxBR19GTFVTSElORzogaXMgcGFkIGZsdXNoaW5nCi0gKiBAR1NUX1BBRF9GTEFHX0VPUzogaXMgcGFkIGluIEVPUyBzdGF0ZQotICogQEdTVF9QQURfRkxBR19CTE9DS0lORzogaXMgcGFkIGN1cnJlbnRseSBibG9ja2luZyBvbiBhIGJ1ZmZlciBvciBldmVudAotICogQEdTVF9QQURfRkxBR19ORUVEX1BBUkVOVDogZW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBwYXJlbnQgb2JqZWN0IGJlZm9yZSBjYWxsaW5nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgcGFkIGNhbGxiYWNrcy4KLSAqIEBHU1RfUEFEX0ZMQUdfTkVFRF9SRUNPTkZJR1VSRTogdGhlIHBhZCBzaG91bGQgYmUgcmVjb25maWd1cmVkL3JlbmVnb3RpYXRlZC4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmbGFnIGhhcyB0byBiZSB1bnNldCBtYW51YWxseSBhZnRlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb25maWd1cmF0aW9uIGhhcHBlbmVkLgotICogQEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUzogdGhlIHBhZCBoYXMgcGVuZGluZyBldmVudHMKLSAqIEBHU1RfUEFEX0ZMQUdfRklYRURfQ0FQUzogdGhlIHBhZCBpcyB1c2luZyBmaXhlZCBjYXBzLiBUaGlzIG1lYW5zIHRoYXQKLSAqICAgICBvbmNlIHRoZSBjYXBzIGFyZSBzZXQgb24gdGhlIHBhZCwgdGhlIGRlZmF1bHQgY2FwcyBxdWVyeSBmdW5jdGlvbgotICogICAgIHdpbGwgb25seSByZXR1cm4gdGhvc2UgY2Fwcy4KLSAqIEBHU1RfUEFEX0ZMQUdfUFJPWFlfQ0FQUzogdGhlIGRlZmF1bHQgZXZlbnQgYW5kIHF1ZXJ5IGhhbmRsZXIgd2lsbCBmb3J3YXJkCi0gKiAgICAgICAgICAgICAgICAgICAgICBhbGwgZXZlbnRzIGFuZCBxdWVyaWVzIHRvIHRoZSBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzCi0gKiAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgdGhlbS4KLSAqIEBHU1RfUEFEX0ZMQUdfUFJPWFlfQUxMT0NBVElPTjogdGhlIGRlZmF1bHQgcXVlcnkgaGFuZGxlciB3aWxsIGZvcndhcmQKLSAqICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24gcXVlcmllcyB0byB0aGUgaW50ZXJuYWxseSBsaW5rZWQgcGFkcwotICogICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBkaXNjYXJkaW5nIHRoZW0uCi0gKiBAR1NUX1BBRF9GTEFHX1BST1hZX1NDSEVEVUxJTkc6IHRoZSBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIgd2lsbCBmb3J3YXJkCi0gKiAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsaW5nIHF1ZXJpZXMgdG8gdGhlIGludGVybmFsbHkgbGlua2VkIHBhZHMKLSAqICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgZGlzY2FyZGluZyB0aGVtLgotICogQEdTVF9QQURfRkxBR19BQ0NFUFRfSU5URVJTRUNUOiB0aGUgZGVmYXVsdCBhY2NlcHQtY2FwcyBoYW5kbGVyIHdpbGwgY2hlY2sKLSAqICAgICAgICAgICAgICAgICAgICAgIGl0IHRoZSBjYXBzIGludGVyc2VjdCB0aGUgcXVlcnktY2FwcyByZXN1bHQgaW5zdGVhZAotICogICAgICAgICAgICAgICAgICAgICAgb2YgY2hlY2tpbmcgZm9yIGEgc3Vic2V0LiBUaGlzIGlzIGludGVyZXN0aW5nIGZvcgotICogICAgICAgICAgICAgICAgICAgICAgcGFyc2VycyB0aGF0IGNhbiBhY2NlcHQgaW5jb21wbGV0ZWx5IHNwZWNpZmllZCBjYXBzLgotICogQEdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEU6IHRoZSBkZWZhdWx0IGFjY2VwdC1jYXBzIGhhbmRsZXIgd2lsbCB1c2UKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoZSB0ZW1wbGF0ZSBwYWQgY2FwcyBpbnN0ZWFkIG9mIHF1ZXJ5IGNhcHMgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgd2l0aCB0aGUgYWNjZXB0IGNhcHMuIFVzZSB0aGlzIGluIGNvbWJpbmF0aW9uCi0gKiAgICAgICAgICAgICAgICAgICAgICB3aXRoICVHU1RfUEFEX0ZMQUdfQUNDRVBUX0lOVEVSU0VDVC4gKFNpbmNlIDEuNikKLSAqIEBHU1RfUEFEX0ZMQUdfTEFTVDogb2Zmc2V0IHRvIGRlZmluZSBtb3JlIGZsYWdzCi0gKgotICogUGFkIHN0YXRlIGZsYWdzCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9QQURfRkxBR19CTE9DS0VEICAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDApLAotICBHU1RfUEFEX0ZMQUdfRkxVU0hJTkcgICAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAxKSwKLSAgR1NUX1BBRF9GTEFHX0VPUyAgICAgICAgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMiksCi0gIEdTVF9QQURfRkxBR19CTE9DS0lORyAgICAgICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDMpLAotICBHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCA0KSwKLSAgR1NUX1BBRF9GTEFHX05FRURfUkVDT05GSUdVUkUgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgNSksCi0gIEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUyAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDYpLAotICBHU1RfUEFEX0ZMQUdfRklYRURfQ0FQUyAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCA3KSwKLSAgR1NUX1BBRF9GTEFHX1BST1hZX0NBUFMgICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgOCksCi0gIEdTVF9QQURfRkxBR19QUk9YWV9BTExPQ0FUSU9OID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDkpLAotICBHU1RfUEFEX0ZMQUdfUFJPWFlfU0NIRURVTElORyA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAxMCksCi0gIEdTVF9QQURfRkxBR19BQ0NFUFRfSU5URVJTRUNUID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDExKSwKLSAgR1NUX1BBRF9GTEFHX0FDQ0VQVF9URU1QTEFURSAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMTIpLAotICAvKiBwYWRkaW5nICovCi0gIEdTVF9QQURfRkxBR19MQVNUICAgICAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAxNikKLX0gR3N0UGFkRmxhZ3M7Ci0KLS8qKgotICogR3N0UGFkOgotICogQGVsZW1lbnRfcHJpdmF0ZTogcHJpdmF0ZSBkYXRhIG93bmVkIGJ5IHRoZSBwYXJlbnQgZWxlbWVudAotICogQHBhZHRlbXBsYXRlOiBwYWR0ZW1wbGF0ZSBmb3IgdGhpcyBwYWQKLSAqIEBkaXJlY3Rpb246IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhZCwgY2Fubm90IGNoYW5nZSBhZnRlciBjcmVhdGluZwotICogICAgICAgICAgICAgdGhlIHBhZC4KLSAqCi0gKiBUaGUgI0dzdFBhZCBzdHJ1Y3R1cmUuIFVzZSB0aGUgZnVuY3Rpb25zIHRvIHVwZGF0ZSB0aGUgdmFyaWFibGVzLgotICovCi1zdHJ1Y3QgX0dzdFBhZCB7Ci0gIEdzdE9iamVjdCAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8KLSAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfcHJpdmF0ZTsKLQotICBHc3RQYWRUZW1wbGF0ZSAgICAgICAgICAgICAgICAqcGFkdGVtcGxhdGU7Ci0KLSAgR3N0UGFkRGlyZWN0aW9uICAgICAgICAgICAgICAgIGRpcmVjdGlvbjsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgLyogc3RyZWFtaW5nIHJlY19sb2NrICovCi0gIEdSZWNNdXRleAkJICAgICAgICAgc3RyZWFtX3JlY19sb2NrOwotICBHc3RUYXNrCQkJKnRhc2s7Ci0KLSAgLyogYmxvY2sgY29uZCwgbXV0ZXggaXMgZnJvbSB0aGUgb2JqZWN0ICovCi0gIEdDb25kCQkJCSBibG9ja19jb25kOwotICBHSG9va0xpc3QgICAgICAgICAgICAgICAgICAgICAgcHJvYmVzOwotCi0gIEdzdFBhZE1vZGUJCSAgICAgICAgIG1vZGU7Ci0gIEdzdFBhZEFjdGl2YXRlRnVuY3Rpb24JIGFjdGl2YXRlZnVuYzsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlZGF0YTsKLSAgR0Rlc3Ryb3lOb3RpZnkgICAgICAgICAgICAgICAgIGFjdGl2YXRlbm90aWZ5OwotICBHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbgkgYWN0aXZhdGVtb2RlZnVuYzsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlbW9kZWRhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5ICAgICAgICAgICAgICAgICBhY3RpdmF0ZW1vZGVub3RpZnk7Ci0KLSAgLyogcGFkIGxpbmsgKi8KLSAgR3N0UGFkCQkJKnBlZXI7Ci0gIEdzdFBhZExpbmtGdW5jdGlvbgkJIGxpbmtmdW5jOwotICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgbGlua2RhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5ICAgICAgICAgICAgICAgICBsaW5rbm90aWZ5OwotICBHc3RQYWRVbmxpbmtGdW5jdGlvbgkJIHVubGlua2Z1bmM7Ci0gIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtkYXRhOwotICBHRGVzdHJveU5vdGlmeSAgICAgICAgICAgICAgICAgdW5saW5rbm90aWZ5OwotCi0gIC8qIGRhdGEgdHJhbnNwb3J0IGZ1bmN0aW9ucyAqLwotICBHc3RQYWRDaGFpbkZ1bmN0aW9uCQkgY2hhaW5mdW5jOwotICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgY2hhaW5kYXRhOwotICBHRGVzdHJveU5vdGlmeSAgICAgICAgICAgICAgICAgY2hhaW5ub3RpZnk7Ci0gIEdzdFBhZENoYWluTGlzdEZ1bmN0aW9uICAgICAgICBjaGFpbmxpc3RmdW5jOwotICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgY2hhaW5saXN0ZGF0YTsKLSAgR0Rlc3Ryb3lOb3RpZnkgICAgICAgICAgICAgICAgIGNoYWlubGlzdG5vdGlmeTsKLSAgR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbgkgZ2V0cmFuZ2VmdW5jOwotICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgZ2V0cmFuZ2VkYXRhOwotICBHRGVzdHJveU5vdGlmeSAgICAgICAgICAgICAgICAgZ2V0cmFuZ2Vub3RpZnk7Ci0gIEdzdFBhZEV2ZW50RnVuY3Rpb24JCSBldmVudGZ1bmM7Ci0gIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICBldmVudGRhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5ICAgICAgICAgICAgICAgICBldmVudG5vdGlmeTsKLQotICAvKiBwYWQgb2Zmc2V0ICovCi0gIGdpbnQ2NCAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7Ci0KLSAgLyogZ2VuZXJpYyBxdWVyeSBtZXRob2QgKi8KLSAgR3N0UGFkUXVlcnlGdW5jdGlvbgkJIHF1ZXJ5ZnVuYzsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ZGF0YTsKLSAgR0Rlc3Ryb3lOb3RpZnkgICAgICAgICAgICAgICAgIHF1ZXJ5bm90aWZ5OwotCi0gIC8qIGludGVybmFsIGxpbmtzICovCi0gIEdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24gICAgICBpdGVyaW50bGlua2Z1bmM7Ci0gIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICBpdGVyaW50bGlua2RhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5ICAgICAgICAgICAgICAgICBpdGVyaW50bGlua25vdGlmeTsKLQotICAvKiBjb3VudHMgbnVtYmVyIG9mIHByb2JlcyBhdHRhY2hlZC4gKi8KLSAgZ2ludAkJCQkgbnVtX3Byb2JlczsKLSAgZ2ludAkJCQkgbnVtX2Jsb2NrZWQ7Ci0KLSAgR3N0UGFkUHJpdmF0ZSAgICAgICAgICAgICAgICAgKnByaXY7Ci0KLSAgdW5pb24gewotICAgIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotICAgIHN0cnVjdCB7Ci0gICAgICBHc3RGbG93UmV0dXJuIGxhc3RfZmxvd3JldDsKLSAgICAgIEdzdFBhZEV2ZW50RnVsbEZ1bmN0aW9uIGV2ZW50ZnVsbGZ1bmM7Ci0gICAgfSBhYmk7Ci0gIH0gQUJJOwotfTsKLQotc3RydWN0IF9Hc3RQYWRDbGFzcyB7Ci0gIEdzdE9iamVjdENsYXNzCXBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWwgY2FsbGJhY2tzICovCi0gIHZvaWQJCSgqbGlua2VkKQkJKEdzdFBhZCAqcGFkLCBHc3RQYWQgKnBlZXIpOwotICB2b2lkCQkoKnVubGlua2VkKQkJKEdzdFBhZCAqcGFkLCBHc3RQYWQgKnBlZXIpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLQotLyoqKioqIGhlbHBlciBtYWNyb3MgKioqKiovCi0vKiBHc3RQYWQgKi8KLQotLyoqCi0gKiBHU1RfUEFEX05BTUU6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBHZXQgbmFtZSBvZiB0aGUgZ2l2ZW4gcGFkLgotICogTm8gbG9ja2luZyBpcyBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbiwgdXNlIGdzdF9wYWRfZ2V0X25hbWUoKSBpbnN0ZWFkLgotICovCi0jZGVmaW5lIEdTVF9QQURfTkFNRShwYWQpCQkoR1NUX09CSkVDVF9OQU1FKHBhZCkpCi0vKioKLSAqIEdTVF9QQURfUEFSRU5UOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSBAcGFkIHBhcmVudC4KLSAqIE5vIGxvY2tpbmcgaXMgcGVyZm9ybWVkIGluIHRoaXMgZnVuY3Rpb24sIHVzZSBnc3RfcGFkX2dldF9wYXJlbnQoKSBpbnN0ZWFkLgotICovCi0jZGVmaW5lIEdTVF9QQURfUEFSRU5UKHBhZCkJCShHU1RfRUxFTUVOVF9DQVNUKEdTVF9PQkpFQ1RfUEFSRU5UKHBhZCkpKQotLyoqCi0gKiBHU1RfUEFEX0VMRU1FTlRfUFJJVkFURToKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIEdldCB0aGUgcHJpdmF0ZSBkYXRhIG9mIEBwYWQsIHdoaWNoIGlzIHVzdWFsbHkgc29tZSBwYWQtIG9yIHN0cmVhbS1zcGVjaWZpYwotICogc3RydWN0dXJlIGNyZWF0ZWQgYnkgdGhlIGVsZW1lbnQgYW5kIHNldCBvbiB0aGUgcGFkIHdoZW4gY3JlYXRpbmcgaXQuCi0gKiBObyBsb2NraW5nIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGZ1bmN0aW9uLgotICovCi0jZGVmaW5lIEdTVF9QQURfRUxFTUVOVF9QUklWQVRFKHBhZCkgICAgKEdTVF9QQURfQ0FTVChwYWQpLT5lbGVtZW50X3ByaXZhdGUpCi0vKioKLSAqIEdTVF9QQURfUEFEX1RFTVBMQVRFOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSBAcGFkICNHc3RQYWRUZW1wbGF0ZS4gSXQgZGVzY3JpYmVzIHRoZSBwb3NzaWJsZSBtZWRpYSB0eXBlcwotICogYSBAcGFkIG9yIGFuIGVsZW1lbnQgZmFjdG9yeSBjYW4gaGFuZGxlLgotICovCi0jZGVmaW5lIEdTVF9QQURfUEFEX1RFTVBMQVRFKHBhZCkJKEdTVF9QQURfQ0FTVChwYWQpLT5wYWR0ZW1wbGF0ZSkKLS8qKgotICogR1NUX1BBRF9ESVJFQ1RJT046Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBHZXQgdGhlICNHc3RQYWREaXJlY3Rpb24gb2YgdGhlIGdpdmVuIEBwYWQuIEFjY2Vzc29yIG1hY3JvLCB1c2UKLSAqIGdzdF9wYWRfZ2V0X2RpcmVjdGlvbigpIGluc3RlYWQuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9ESVJFQ1RJT04ocGFkKQkJKEdTVF9QQURfQ0FTVChwYWQpLT5kaXJlY3Rpb24pCi0vKioKLSAqIEdTVF9QQURfVEFTSzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIEdldCB0aGUgI0dzdFRhc2sgb2YgQHBhZC4gQWNjZXNzb3IgbWFjcm8gdXNlZCBieSBHU3RyZWFtZXIuIFVzZSB0aGUKLSAqIGdzdF9wYWRfc3RhcnRfdGFzaygpLCBnc3RfcGFkX3N0b3BfdGFzaygpIGFuZCBnc3RfcGFkX3BhdXNlX3Rhc2soKQotICogZnVuY3Rpb25zIGluc3RlYWQuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9UQVNLKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0+dGFzaykKLS8qKgotICogR1NUX1BBRF9NT0RFOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSAjR3N0UGFkTW9kZSBvZiBwYWQsIHdoaWNoIHdpbGwgYmUgR1NUX1BBRF9NT0RFX05PTkUgaWYgdGhlIHBhZAotICogaGFzIG5vdCBiZWVuIGFjdGl2YXRlZCB5ZXQsIGFuZCBvdGhlcndpc2UgZWl0aGVyIEdTVF9QQURfTU9ERV9QVVNIIG9yCi0gKiBHU1RfUEFEX01PREVfUFVMTCBkZXBlbmRpbmcgb24gd2hpY2ggbW9kZSB0aGUgcGFkIHdhcyBhY3RpdmF0ZWQgaW4uCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9NT0RFKHBhZCkJICAgICAgICAoR1NUX1BBRF9DQVNUKHBhZCktPm1vZGUpCi0vKioKLSAqIEdTVF9QQURfQUNUSVZBVEVGVU5DOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSAjR3N0UGFkQWN0aXZhdGVGdW5jdGlvbiBmcm9tIEBwYWQuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9BQ1RJVkFURUZVTkMocGFkKQkoR1NUX1BBRF9DQVNUKHBhZCktPmFjdGl2YXRlZnVuYykKLS8qKgotICogR1NUX1BBRF9BQ1RJVkFURU1PREVGVU5DOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSAjR3N0UGFkQWN0aXZhdGVNb2RlRnVuY3Rpb24gZnJvbSB0aGUgZ2l2ZW4gQHBhZC4KLSAqLwotI2RlZmluZSBHU1RfUEFEX0FDVElWQVRFTU9ERUZVTkMocGFkKQkoR1NUX1BBRF9DQVNUKHBhZCktPmFjdGl2YXRlbW9kZWZ1bmMpCi0vKioKLSAqIEdTVF9QQURfQ0hBSU5GVU5DOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSAjR3N0UGFkQ2hhaW5GdW5jdGlvbiBmcm9tIHRoZSBnaXZlbiBAcGFkLgotICovCi0jZGVmaW5lIEdTVF9QQURfQ0hBSU5GVU5DKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0+Y2hhaW5mdW5jKQotLyoqCi0gKiBHU1RfUEFEX0NIQUlOTElTVEZVTkM6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBHZXQgdGhlICNHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiBmcm9tIHRoZSBnaXZlbiBAcGFkLgotICovCi0jZGVmaW5lIEdTVF9QQURfQ0hBSU5MSVNURlVOQyhwYWQpICAgICAgKEdTVF9QQURfQ0FTVChwYWQpLT5jaGFpbmxpc3RmdW5jKQotLyoqCi0gKiBHU1RfUEFEX0dFVFJBTkdFRlVOQzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIEdldCB0aGUgI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24gZnJvbSB0aGUgZ2l2ZW4gQHBhZC4KLSAqLwotI2RlZmluZSBHU1RfUEFEX0dFVFJBTkdFRlVOQyhwYWQpCShHU1RfUEFEX0NBU1QocGFkKS0+Z2V0cmFuZ2VmdW5jKQotLyoqCi0gKiBHU1RfUEFEX0VWRU5URlVOQzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIEdldCB0aGUgI0dzdFBhZEV2ZW50RnVuY3Rpb24gZnJvbSB0aGUgZ2l2ZW4gQHBhZCwgd2hpY2gKLSAqIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZXZlbnRzIG9uIHRoZSBwYWQuIFlvdSBjYW4KLSAqIHVzZSB0aGlzIHRvIHNldCB5b3VyIG93biBldmVudCBoYW5kbGluZyBmdW5jdGlvbiBvbiBhIHBhZAotICogYWZ0ZXIgeW91IGNyZWF0ZSBpdC4gIElmIHlvdXIgZWxlbWVudCBkZXJpdmVzIGZyb20gYSBiYXNlCi0gKiBjbGFzcywgdXNlIHRoZSBiYXNlIGNsYXNzJ3MgdmlydHVhbCBmdW5jdGlvbnMgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBHU1RfUEFEX0VWRU5URlVOQyhwYWQpCQkoR1NUX1BBRF9DQVNUKHBhZCktPmV2ZW50ZnVuYykKLS8qKgotICogR1NUX1BBRF9FVkVOVEZVTExGVU5DOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSAjR3N0UGFkRXZlbnRGdWxsRnVuY3Rpb24gZnJvbSB0aGUgZ2l2ZW4gQHBhZCwgd2hpY2gKLSAqIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZXZlbnRzIG9uIHRoZSBwYWQuIFlvdSBjYW4KLSAqIHVzZSB0aGlzIHRvIHNldCB5b3VyIG93biBldmVudCBoYW5kbGluZyBmdW5jdGlvbiBvbiBhIHBhZAotICogYWZ0ZXIgeW91IGNyZWF0ZSBpdC4gIElmIHlvdXIgZWxlbWVudCBkZXJpdmVzIGZyb20gYSBiYXNlCi0gKiBjbGFzcywgdXNlIHRoZSBiYXNlIGNsYXNzJ3MgdmlydHVhbCBmdW5jdGlvbnMgaW5zdGVhZC4KLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLSNkZWZpbmUgR1NUX1BBRF9FVkVOVEZVTExGVU5DKHBhZCkJKEdTVF9QQURfQ0FTVChwYWQpLT5BQkkuYWJpLmV2ZW50ZnVsbGZ1bmMpCi0vKioKLSAqIEdTVF9QQURfUVVFUllGVU5DOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSAjR3N0UGFkUXVlcnlGdW5jdGlvbiBmcm9tIEBwYWQsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbgotICogdGhhdCBoYW5kbGVzIHF1ZXJpZXMgb24gdGhlIHBhZC4gWW91IGNhbiAgdXNlIHRoaXMgdG8gc2V0IHlvdXIKLSAqIG93biBxdWVyeSBoYW5kbGluZyBmdW5jdGlvbiBvbiBhIHBhZCBhZnRlciB5b3UgY3JlYXRlIGl0LiBJZiB5b3VyCi0gKiBlbGVtZW50IGRlcml2ZXMgZnJvbSBhIGJhc2UgY2xhc3MsIHVzZSB0aGUgYmFzZSBjbGFzcydzIHZpcnR1YWwKLSAqIGZ1bmN0aW9ucyBpbnN0ZWFkLgotICovCi0jZGVmaW5lIEdTVF9QQURfUVVFUllGVU5DKHBhZCkJCShHU1RfUEFEX0NBU1QocGFkKS0+cXVlcnlmdW5jKQotLyoqCi0gKiBHU1RfUEFEX0lURVJJTlRMSU5LRlVOQzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIEdldCB0aGUgI0dzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24gZnJvbSB0aGUgZ2l2ZW4gQHBhZC4KLSAqLwotI2RlZmluZSBHU1RfUEFEX0lURVJJTlRMSU5LRlVOQyhwYWQpICAgIChHU1RfUEFEX0NBU1QocGFkKS0+aXRlcmludGxpbmtmdW5jKQotLyoqCi0gKiBHU1RfUEFEX1BFRVI6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBSZXR1cm4gdGhlIHBhZCdzIHBlZXIgbWVtYmVyLiBUaGlzIG1lbWJlciBpcyBhIHBvaW50ZXIgdG8gdGhlIGxpbmtlZCBAcGFkLgotICogTm8gbG9ja2luZyBpcyBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbiwgdXNlIGdzdF9wYWRfZ2V0X3BlZXIoKSBpbnN0ZWFkLgotICovCi0jZGVmaW5lIEdTVF9QQURfUEVFUihwYWQpCQkoR1NUX1BBRF9DQVNUKHBhZCktPnBlZXIpCi0vKioKLSAqIEdTVF9QQURfTElOS0ZVTkM6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBHZXQgdGhlICNHc3RQYWRMaW5rRnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBAcGFkLgotICovCi0jZGVmaW5lIEdTVF9QQURfTElOS0ZVTkMocGFkKQkJKEdTVF9QQURfQ0FTVChwYWQpLT5saW5rZnVuYykKLS8qKgotICogR1NUX1BBRF9VTkxJTktGVU5DOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSAjR3N0UGFkVW5saW5rRnVuY3Rpb24gZnJvbSB0aGUgZ2l2ZW4gQHBhZC4KLSAqLwotI2RlZmluZSBHU1RfUEFEX1VOTElOS0ZVTkMocGFkKQkJKEdTVF9QQURfQ0FTVChwYWQpLT51bmxpbmtmdW5jKQotLyoqCi0gKiBHU1RfUEFEX0lTX1NSQzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWQgaXMgYSBzb3VyY2UgcGFkIChpLmUuIHByb2R1Y2VzIGRhdGEpLgotICovCi0jZGVmaW5lIEdTVF9QQURfSVNfU1JDKHBhZCkJCShHU1RfUEFEX0RJUkVDVElPTihwYWQpID09IEdTVF9QQURfU1JDKQotLyoqCi0gKiBHU1RfUEFEX0lTX1NJTks6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIGlzIGEgc2luayBwYWQgKGkuZS4gY29uc3VtZXMgZGF0YSkuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9JU19TSU5LKHBhZCkJCShHU1RfUEFEX0RJUkVDVElPTihwYWQpID09IEdTVF9QQURfU0lOSykKLS8qKgotICogR1NUX1BBRF9JU19MSU5LRUQ6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIGlzIGxpbmtlZCB0byBhbm90aGVyIHBhZC4gVXNlIGdzdF9wYWRfaXNfbGlua2VkKCkKLSAqIGluc3RlYWQuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9JU19MSU5LRUQocGFkKQkJKEdTVF9QQURfUEVFUihwYWQpICE9IE5VTEwpCi0vKioKLSAqIEdTVF9QQURfSVNfQUNUSVZFOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhZCBoYXMgYmVlbiBhY3RpdmF0ZWQuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9JU19BQ1RJVkUocGFkKSAgICAgICAgICAoR1NUX1BBRF9NT0RFKHBhZCkgIT0gR1NUX1BBRF9NT0RFX05PTkUpCi0vKioKLSAqIEdTVF9QQURfSVNfQkxPQ0tFRDoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIENoZWNrIGlmIHRoZSBkYXRhZmxvdyBvbiBhIEBwYWQgaXMgYmxvY2tlZC4gVXNlIGdzdF9wYWRfaXNfYmxvY2tlZCgpIGluc3RlYWQuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9JU19CTE9DS0VEKHBhZCkJCShHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfRkxBR19CTE9DS0VEKSkKLS8qKgotICogR1NUX1BBRF9JU19CTE9DS0lORzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIENoZWNrIGlmIHRoZSBAcGFkIGlzIGN1cnJlbnRseSBibG9ja2luZyBvbiBhIGJ1ZmZlciBvciBldmVudC4gVXNlCi0gKiBnc3RfcGFkX2lzX2Jsb2NraW5nKCkgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBHU1RfUEFEX0lTX0JMT0NLSU5HKHBhZCkJKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0JMT0NLSU5HKSkKLS8qKgotICogR1NUX1BBRF9JU19GTFVTSElORzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIENoZWNrIGlmIHRoZSBnaXZlbiBAcGFkIGlzIGZsdXNoaW5nLgotICovCi0jZGVmaW5lIEdTVF9QQURfSVNfRkxVU0hJTkcocGFkKQkoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfRkxVU0hJTkcpKQotLyoqCi0gKiBHU1RfUEFEX1NFVF9GTFVTSElORzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIFNldCB0aGUgZ2l2ZW4gQHBhZCB0byBmbHVzaGluZyBzdGF0ZSwgd2hpY2ggbWVhbnMgaXQgd2lsbCBub3QgYWNjZXB0IGFueQotICogbW9yZSBldmVudHMsIHF1ZXJpZXMgb3IgYnVmZmVycywgYW5kIHJldHVybiBHU1RfRkxPV19GTFVTSElORyBpZiBhbnkgYnVmZmVycwotICogYXJlIHB1c2hlZCBvbiBpdC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiB0aGUgcGFkIGlzIHNodXQgZG93biBvciB3aGVuCi0gKiBhIGZsdXNoaW5nIHNlZWsgaGFwcGVucy4gVGhpcyBpcyB1c2VkIGluc2lkZSBHU3RyZWFtZXIgd2hlbiBmbHVzaCBzdGFydC9zdG9wCi0gKiBldmVudHMgcGFzcyB0aHJvdWdoIHBhZHMsIG9yIHdoZW4gYW4gZWxlbWVudCBzdGF0ZSBpcyBjaGFuZ2VkIGFuZCBwYWRzIGFyZQotICogYWN0aXZhdGVkIG9yIGRlYWN0aXZhdGVkLgotICovCi0jZGVmaW5lIEdTVF9QQURfU0VUX0ZMVVNISU5HKHBhZCkJKEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0ZMVVNISU5HKSkKLS8qKgotICogR1NUX1BBRF9VTlNFVF9GTFVTSElORzoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIFVuc2V0IHRoZSBmbHVzaGluZyBmbGFnLgotICovCi0jZGVmaW5lIEdTVF9QQURfVU5TRVRfRkxVU0hJTkcocGFkKQkoR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19GTFVTSElORykpCi0vKioKLSAqIEdTVF9QQURfSVNfRU9TOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogQ2hlY2sgaWYgdGhlIEBwYWQgaXMgaW4gRU9TIHN0YXRlLgotICovCi0jZGVmaW5lIEdTVF9QQURfSVNfRU9TKHBhZCkJICAgICAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfRU9TKSkKLS8qKgotICogR1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRToKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIENoZWNrIGlmIHRoZSBAcGFkIHNob3VsZCBiZSByZWNvbmZpZ3VyZWQvcmVuZWdvdGlhdGVkLgotICogVGhlIGZsYWcgaGFzIHRvIGJlIHVuc2V0IG1hbnVhbGx5IGFmdGVyIHJlY29uZmlndXJhdGlvbiBoYXBwZW5lZC4KLSAqIFVzZSBnc3RfcGFkX25lZWRzX3JlY29uZmlndXJlKCkgb3IgZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSgpIGluc3RlYWQuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9ORUVEU19SRUNPTkZJR1VSRShwYWQpICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfTkVFRF9SRUNPTkZJR1VSRSkpCi0vKioKLSAqIEdTVF9QQURfSEFTX1BFTkRJTkdfRVZFTlRTOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogQ2hlY2sgaWYgdGhlIGdpdmVuIEBwYWQgaGFzIHBlbmRpbmcgZXZlbnRzLiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieQotICogR1N0cmVhbWVyLgotICovCi0jZGVmaW5lIEdTVF9QQURfSEFTX1BFTkRJTkdfRVZFTlRTKHBhZCkgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BFTkRJTkdfRVZFTlRTKSkKLS8qKgotICogR1NUX1BBRF9JU19GSVhFRF9DQVBTOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogQ2hlY2sgaWYgdGhlIGdpdmVuIEBwYWQgaXMgdXNpbmcgZml4ZWQgY2Fwcywgd2hpY2ggbWVhbnMgdGhhdAotICogb25jZSB0aGUgY2FwcyBhcmUgc2V0IG9uIHRoZSBAcGFkLCB0aGUgY2FwcyBxdWVyeSBmdW5jdGlvbiB3aWxsCi0gKiBvbmx5IHJldHVybiB0aG9zZSBjYXBzLiBTZWUgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcygpLgotICovCi0jZGVmaW5lIEdTVF9QQURfSVNfRklYRURfQ0FQUyhwYWQpCShHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfRkxBR19GSVhFRF9DQVBTKSkKLS8qKgotICogR1NUX1BBRF9ORUVEU19QQVJFTlQ6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBDaGVjayBpZiB0aGVyZSBpcyBhIHBhcmVudCBvYmplY3QgYmVmb3JlIGNhbGxpbmcgaW50byB0aGUgQHBhZCBjYWxsYmFja3MuCi0gKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBHU3RyZWFtZXIuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9ORUVEU19QQVJFTlQocGFkKSAgICAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfTkVFRF9QQVJFTlQpKQotLyoqCi0gKiBHU1RfUEFEX0lTX1BST1hZX0NBUFM6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gQHBhZCBpcyBzZXQgdG8gcHJveHkgY2Fwcy4gVGhpcyBtZWFucyB0aGF0IHRoZSBkZWZhdWx0Ci0gKiBldmVudCBhbmQgcXVlcnkgaGFuZGxlciB3aWxsIGZvcndhcmQgYWxsIGV2ZW50cyBhbmQgcXVlcmllcyB0byB0aGUKLSAqIGludGVybmFsbHkgbGlua2VkIEBwYWRzIGluc3RlYWQgb2YgZGlzY2FyZGluZyB0aGVtLgotICovCi0jZGVmaW5lIEdTVF9QQURfSVNfUFJPWFlfQ0FQUyhwYWQpICAgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0NBUFMpKQotLyoqCi0gKiBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogU2V0IEBwYWQgdG8gcHJveHkgY2Fwcywgc28gdGhhdCBhbGwgY2Fwcy1yZWxhdGVkIGV2ZW50cyBhbmQgcXVlcmllcyBhcmUKLSAqIHByb3hpZWQgZG93bi0gb3IgdXBzdHJlYW0gdG8gdGhlIG90aGVyIHNpZGUgb2YgdGhlIGVsZW1lbnQgYXV0b21hdGljYWxseS4KLSAqIFNldCB0aGlzIGlmIHRoZSBlbGVtZW50IGFsd2F5cyBvdXRwdXRzIGRhdGEgaW4gdGhlIGV4YWN0IHNhbWUgZm9ybWF0IGFzIGl0Ci0gKiByZWNlaXZlcyBhcyBpbnB1dC4gVGhpcyBpcyBqdXN0IGZvciBjb252ZW5pZW5jZSB0byBhdm9pZCBpbXBsZW1lbnRpbmcgc29tZQotICogc3RhbmRhcmQgZXZlbnQgYW5kIHF1ZXJ5IGhhbmRsaW5nIGNvZGUgaW4gYW4gZWxlbWVudC4KLSAqLwotI2RlZmluZSBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTKHBhZCkgICAgIChHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKSkKLS8qKgotICogR1NUX1BBRF9VTlNFVF9QUk9YWV9DQVBTOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogVW5zZXQgcHJveHkgY2FwcyBmbGFnLgotICovCi0jZGVmaW5lIEdTVF9QQURfVU5TRVRfUFJPWFlfQ0FQUyhwYWQpICAgKEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUFJPWFlfQ0FQUykpCi0vKioKLSAqIEdTVF9QQURfSVNfUFJPWFlfQUxMT0NBVElPTjoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIENoZWNrIGlmIHRoZSBnaXZlbiBAcGFkIGlzIHNldCBhcyBwcm94eSBhbGxvY2F0aW9uIHdoaWNoIG1lYW5zCi0gKiB0aGF0IHRoZSBkZWZhdWx0IHF1ZXJ5IGhhbmRsZXIgd2lsbCBmb3J3YXJkIGFsbG9jYXRpb24gcXVlcmllcyB0byB0aGUKLSAqIGludGVybmFsbHkgbGlua2VkIEBwYWRzIGluc3RlYWQgb2YgZGlzY2FyZGluZyB0aGVtLgotICovCi0jZGVmaW5lIEdTVF9QQURfSVNfUFJPWFlfQUxMT0NBVElPTihwYWQpICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9BTExPQ0FUSU9OKSkKLS8qKgotICogR1NUX1BBRF9TRVRfUFJPWFlfQUxMT0NBVElPTjoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIFNldCBAcGFkIHRvIHByb3h5IGFsbG9jYXRpb24gcXVlcmllcywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBxdWVyeQotICogaGFuZGxlciB3aWxsIGZvcndhcmQgYWxsb2NhdGlvbiBxdWVyaWVzIHRvIHRoZSBpbnRlcm5hbGx5IGxpbmtlZCBAcGFkcwotICogaW5zdGVhZCBvZiBkaXNjYXJkaW5nIHRoZW0uCi0gKiBTZXQgdGhpcyBpZiB0aGUgZWxlbWVudCBhbHdheXMgb3V0cHV0cyBkYXRhIGluIHRoZSBleGFjdCBzYW1lIGZvcm1hdCBhcyBpdAotICogcmVjZWl2ZXMgYXMgaW5wdXQuIFRoaXMgaXMganVzdCBmb3IgY29udmVuaWVuY2UgdG8gYXZvaWQgaW1wbGVtZW50aW5nIHNvbWUKLSAqIHN0YW5kYXJkIHF1ZXJ5IGhhbmRsaW5nIGNvZGUgaW4gYW4gZWxlbWVudC4KLSAqLwotI2RlZmluZSBHU1RfUEFEX1NFVF9QUk9YWV9BTExPQ0FUSU9OKHBhZCkgICAoR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUFJPWFlfQUxMT0NBVElPTikpCi0vKioKLSAqIEdTVF9QQURfVU5TRVRfUFJPWFlfQUxMT0NBVElPTjoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIFVuc2V0IHByb3h5IGFsbG9jYXRpb24gZmxhZy4KLSAqLwotI2RlZmluZSBHU1RfUEFEX1VOU0VUX1BST1hZX0FMTE9DQVRJT04ocGFkKSAoR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9BTExPQ0FUSU9OKSkKLS8qKgotICogR1NUX1BBRF9JU19QUk9YWV9TQ0hFRFVMSU5HOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogQ2hlY2sgaWYgdGhlIGdpdmVuIEBwYWQgaXMgc2V0IHRvIHByb3h5IHNjaGVkdWxpbmcgcXVlcmllcywgd2hpY2ggbWVhbnMgdGhhdAotICogdGhlIGRlZmF1bHQgcXVlcnkgaGFuZGxlciB3aWxsIGZvcndhcmQgc2NoZWR1bGluZyBxdWVyaWVzIHRvIHRoZSBpbnRlcm5hbGx5Ci0gKiBsaW5rZWQgQHBhZHMgaW5zdGVhZCBvZiBkaXNjYXJkaW5nIHRoZW0uCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9JU19QUk9YWV9TQ0hFRFVMSU5HKHBhZCkgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BST1hZX1NDSEVEVUxJTkcpKQotLyoqCi0gKiBHU1RfUEFEX1NFVF9QUk9YWV9TQ0hFRFVMSU5HOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogU2V0IEBwYWQgdG8gcHJveHkgc2NoZWR1bGluZyBxdWVyaWVzLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkZWZhdWx0IHF1ZXJ5Ci0gKiBoYW5kbGVyIHdpbGwgZm9yd2FyZCBzY2hlZHVsaW5nIHF1ZXJpZXMgdG8gdGhlIGludGVybmFsbHkgbGlua2VkIEBwYWRzCi0gKiBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgdGhlbS4gWW91IHdpbGwgdXN1YWxseSB3YW50IHRvIGhhbmRsZSBzY2hlZHVsaW5nCi0gKiBxdWVyaWVzIGV4cGxpY2l0bHkgaWYgeW91ciBlbGVtZW50IHN1cHBvcnRzIG11bHRpcGxlIHNjaGVkdWxpbmcgbW9kZXMuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9TRVRfUFJPWFlfU0NIRURVTElORyhwYWQpICAgKEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX1BST1hZX1NDSEVEVUxJTkcpKQotLyoqCi0gKiBHU1RfUEFEX1VOU0VUX1BST1hZX1NDSEVEVUxJTkc6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBVbnNldCBwcm94eSBzY2hlZHVsaW5nIGZsYWcuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9VTlNFVF9QUk9YWV9TQ0hFRFVMSU5HKHBhZCkgKEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGFkLCBHU1RfUEFEX0ZMQUdfUFJPWFlfU0NIRURVTElORykpCi0vKioKLSAqIEdTVF9QQURfSVNfQUNDRVBUX0lOVEVSU0VDVDoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIENoZWNrIGlmIHRoZSBwYWQncyBhY2NlcHQgaW50ZXJzZWN0IGZsYWcgaXMgc2V0LiBUaGUgZGVmYXVsdCBhY2NlcHQtY2FwcwotICogaGFuZGxlciB3aWxsIGNoZWNrIGlmIHRoZSBjYXBzIGludGVyc2VjdCB0aGUgcXVlcnktY2FwcyByZXN1bHQgaW5zdGVhZCBvZgotICogY2hlY2tpbmcgZm9yIGEgc3Vic2V0LiBUaGlzIGlzIGludGVyZXN0aW5nIGZvciBwYXJzZXIgZWxlbWVudHMgdGhhdCBjYW4KLSAqIGFjY2VwdCBpbmNvbXBsZXRlbHkgc3BlY2lmaWVkIGNhcHMuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9JU19BQ0NFUFRfSU5URVJTRUNUKHBhZCkgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0FDQ0VQVF9JTlRFUlNFQ1QpKQotLyoqCi0gKiBHU1RfUEFEX1NFVF9BQ0NFUFRfSU5URVJTRUNUOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogU2V0IEBwYWQgdG8gYnkgZGVmYXVsdCBhY2NlcHQgY2FwcyBieSBpbnRlcnNlY3RpbmcgdGhlIHJlc3VsdCBpbnN0ZWFkIG9mCi0gKiBjaGVja2luZyBmb3IgYSBzdWJzZXQuIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIHBhcnNlciBlbGVtZW50cyB0aGF0IGNhbgotICogYWNjZXB0IGluY29tcGxldGVseSBzcGVjaWZpZWQgY2Fwcy4KLSAqLwotI2RlZmluZSBHU1RfUEFEX1NFVF9BQ0NFUFRfSU5URVJTRUNUKHBhZCkgICAoR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfQUNDRVBUX0lOVEVSU0VDVCkpCi0vKioKLSAqIEdTVF9QQURfVU5TRVRfQUNDRVBUX0lOVEVSU0VDVDoKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIFVuc2V0IGFjY2VwdCBpbnRlcnNlY3QgZmxhZy4KLSAqLwotI2RlZmluZSBHU1RfUEFEX1VOU0VUX0FDQ0VQVF9JTlRFUlNFQ1QocGFkKSAoR1NUX09CSkVDVF9GTEFHX1VOU0VUIChwYWQsIEdTVF9QQURfRkxBR19BQ0NFUFRfSU5URVJTRUNUKSkKLS8qKgotICogR1NUX1BBRF9JU19BQ0NFUFRfVEVNUExBVEU6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBDaGVjayBpZiB0aGUgcGFkJ3MgYWNjZXB0IGNhcHMgb3BlcmF0aW9uIHdpbGwgdXNlIHRoZSBwYWQgdGVtcGxhdGUgY2Fwcy4KLSAqIFRoZSBkZWZhdWx0IGFjY2VwdC1jYXBzIHdpbGwgZG8gYSBxdWVyeSBjYXBzIHRvIGdldCB0aGUgY2Fwcywgd2hpY2ggbWlnaHQKLSAqIGJlIHF1ZXJ5aW5nIGRvd25zdHJlYW0gY2F1c2luZyB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8KLSAqIGltcGxlbWVudCBhIHByb3BlciBhY2NlcHQtY2FwcyBxdWVyeSBoYW5kbGVyIG9yIHRvIHVzZSB0aGlzIGZsYWcgdG8gcHJldmVudAotICogcmVjdXJzaXZlIGFjY2VwdC1jYXBzIGhhbmRsaW5nLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotI2RlZmluZSBHU1RfUEFEX0lTX0FDQ0VQVF9URU1QTEFURShwYWQpICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwYWQsIEdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEUpKQotLyoqCi0gKiBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEU6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBTZXQgQHBhZCB0byBieSBkZWZhdWx0IHVzZSB0aGUgcGFkIHRlbXBsYXRlIGNhcHMgdG8gY29tcGFyZSB3aXRoCi0gKiB0aGUgYWNjZXB0IGNhcHMgaW5zdGVhZCBvZiB1c2luZyBhIGNhcHMgcXVlcnkgcmVzdWx0LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotI2RlZmluZSBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUocGFkKSAgIChHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYWQsIEdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEUpKQotLyoqCi0gKiBHU1RfUEFEX1VOU0VUX0FDQ0VQVF9URU1QTEFURToKLSAqIEBwYWQ6IGEgI0dzdFBhZAotICoKLSAqIFVuc2V0IGFjY2VwdCB0ZW1wbGF0ZSBmbGFnLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotI2RlZmluZSBHU1RfUEFEX1VOU0VUX0FDQ0VQVF9URU1QTEFURShwYWQpIChHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBhZCwgR1NUX1BBRF9GTEFHX0FDQ0VQVF9URU1QTEFURSkpCi0vKioKLSAqIEdTVF9QQURfR0VUX1NUUkVBTV9MT0NLOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0IHRoZSBzdHJlYW0gbG9jayBvZiBAcGFkLiBUaGUgc3RyZWFtIGxvY2sgaXMgcHJvdGVjdGluZyB0aGUKLSAqIHJlc291cmNlcyB1c2VkIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb25zIG9mIEBwYWQuIEFjY2Vzc29yCi0gKiBtYWNybywgdXNlIEdTVF9QQURfU1RSRUFNX0xPQ0soKSBhbmQgR1NUX1BBRF9TVFJFQU1fVU5MT0NLKCkgaW5zdGVhZAotICogdG8gdGFrZS9yZWxlYXNlIHRoZSBwYWQncyBzdHJlYW0gbG9jay4KLSAqLwotI2RlZmluZSBHU1RfUEFEX0dFVF9TVFJFQU1fTE9DSyhwYWQpICAgICgmKEdTVF9QQURfQ0FTVChwYWQpLT5zdHJlYW1fcmVjX2xvY2spKQotLyoqCi0gKiBHU1RfUEFEX1NUUkVBTV9MT0NLOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogVGFrZSB0aGUgcGFkJ3Mgc3RyZWFtIGxvY2suIFRoZSBzdHJlYW0gbG9jayBpcyByZWN1cnNpdmUgYW5kIHdpbGwgYmUgdGFrZW4KLSAqIHdoZW4gYnVmZmVycyBvciBzZXJpYWxpemVkIGRvd25zdHJlYW0gZXZlbnRzIGFyZSBwdXNoZWQgb24gYSBwYWQuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9TVFJFQU1fTE9DSyhwYWQpICAgICAgICBnX3JlY19tdXRleF9sb2NrKEdTVF9QQURfR0VUX1NUUkVBTV9MT0NLKHBhZCkpCi0vKioKLSAqIEdTVF9QQURfU1RSRUFNX1RSWUxPQ0s6Ci0gKiBAcGFkOiBhICNHc3RQYWQKLSAqCi0gKiBUcnkgdG8gdGFrZSB0aGUgcGFkJ3Mgc3RyZWFtIGxvY2ssIGFuZCByZXR1cm4gJVRSVUUgaWYgdGhlIGxvY2sgY291bGQgYmUKLSAqIHRha2VuLCBhbmQgb3RoZXJ3aXNlICVGQUxTRS4KLSAqLwotI2RlZmluZSBHU1RfUEFEX1NUUkVBTV9UUllMT0NLKHBhZCkgICAgIGdfcmVjX211dGV4X3RyeWxvY2soR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSkKLS8qKgotICogR1NUX1BBRF9TVFJFQU1fVU5MT0NLOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogUmVsZWFzZSB0aGUgcGFkJ3Mgc3RyZWFtIGxvY2suCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9TVFJFQU1fVU5MT0NLKHBhZCkgICAgICBnX3JlY19tdXRleF91bmxvY2soR1NUX1BBRF9HRVRfU1RSRUFNX0xPQ0socGFkKSkKLS8qKgotICogR1NUX1BBRF9MQVNUX0ZMT1dfUkVUVVJOOgotICogQHBhZDogYSAjR3N0UGFkCi0gKgotICogR2V0cyB0aGUgbGFzdCBmbG93IHJldHVybiBvbiB0aGlzIHBhZAotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotI2RlZmluZSBHU1RfUEFEX0xBU1RfRkxPV19SRVRVUk4ocGFkKSAgIChHU1RfUEFEX0NBU1QocGFkKS0+QUJJLmFiaS5sYXN0X2Zsb3dyZXQpCi0KLSNkZWZpbmUgR1NUX1BBRF9CTE9DS19HRVRfQ09ORChwYWQpICAgICAoJkdTVF9QQURfQ0FTVChwYWQpLT5ibG9ja19jb25kKQotI2RlZmluZSBHU1RfUEFEX0JMT0NLX1dBSVQocGFkKSAgICAgICAgIChnX2NvbmRfd2FpdChHU1RfUEFEX0JMT0NLX0dFVF9DT05EIChwYWQpLCBHU1RfT0JKRUNUX0dFVF9MT0NLIChwYWQpKSkKLSNkZWZpbmUgR1NUX1BBRF9CTE9DS19TSUdOQUwocGFkKSAgICAgICAoZ19jb25kX3NpZ25hbChHU1RfUEFEX0JMT0NLX0dFVF9DT05EIChwYWQpKSkKLSNkZWZpbmUgR1NUX1BBRF9CTE9DS19CUk9BRENBU1QocGFkKSAgICAoZ19jb25kX2Jyb2FkY2FzdChHU1RfUEFEX0JMT0NLX0dFVF9DT05EIChwYWQpKSkKLQotR1R5cGUJCQlnc3RfcGFkX2dldF90eXBlCQkJKHZvaWQpOwotCi0vKiBjcmVhdGluZyBwYWRzICovCi1Hc3RQYWQqCQkJZ3N0X3BhZF9uZXcJCQkJKGNvbnN0IGdjaGFyICpuYW1lLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uKTsKLUdzdFBhZCoJCQlnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlCQkoR3N0UGFkVGVtcGxhdGUgKnRlbXBsLCBjb25zdCBnY2hhciAqbmFtZSk7Ci1Hc3RQYWQqCQkJZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUJKEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbCwgY29uc3QgZ2NoYXIgKm5hbWUpOwotCi0KLS8qKgotICogZ3N0X3BhZF9nZXRfbmFtZToKLSAqIEBwYWQ6IHRoZSBwYWQgdG8gZ2V0IHRoZSBuYW1lIGZyb20KLSAqCi0gKiBHZXQgYSBjb3B5IG9mIHRoZSBuYW1lIG9mIHRoZSBwYWQuIGdfZnJlZSgpIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLSNkZWZpbmUgZ3N0X3BhZF9nZXRfbmFtZShwYWQpIGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkKSkKLS8qKgotICogZ3N0X3BhZF9nZXRfcGFyZW50OgotICogQHBhZDogdGhlIHBhZCB0byBnZXQgdGhlIHBhcmVudCBvZgotICoKLSAqIEdldCB0aGUgcGFyZW50IG9mIEBwYWQuIFRoaXMgZnVuY3Rpb24gaW5jcmVhc2VzIHRoZSByZWZjb3VudAotICogb2YgdGhlIHBhcmVudCBvYmplY3Qgc28geW91IHNob3VsZCBnc3Rfb2JqZWN0X3VucmVmKCkgaXQgYWZ0ZXIgdXNhZ2UuCi0gKiBDYW4gcmV0dXJuICVOVUxMIGlmIHRoZSBwYWQgZGlkIG5vdCBoYXZlIGEgcGFyZW50LgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogdGhlIHBhcmVudAotICovCi0jZGVmaW5lIGdzdF9wYWRfZ2V0X3BhcmVudChwYWQpIGdzdF9vYmplY3RfZ2V0X3BhcmVudCAoR1NUX09CSkVDVF9DQVNUIChwYWQpKQotCi1Hc3RQYWREaXJlY3Rpb24JCWdzdF9wYWRfZ2V0X2RpcmVjdGlvbgkJCShHc3RQYWQgKnBhZCk7Ci0KLWdib29sZWFuCQlnc3RfcGFkX3NldF9hY3RpdmUJCQkoR3N0UGFkICpwYWQsIGdib29sZWFuIGFjdGl2ZSk7Ci1nYm9vbGVhbgkJZ3N0X3BhZF9pc19hY3RpdmUJCQkoR3N0UGFkICpwYWQpOwotZ2Jvb2xlYW4JCWdzdF9wYWRfYWN0aXZhdGVfbW9kZQkJCShHc3RQYWQgKnBhZCwgR3N0UGFkTW9kZSBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBhY3RpdmUpOwotCi1ndWxvbmcgICAgICAgICAgICAgICAgICBnc3RfcGFkX2FkZF9wcm9iZSAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkLAotCQkJCQkJCQkgR3N0UGFkUHJvYmVUeXBlIG1hc2ssCi0JCQkJCQkJCSBHc3RQYWRQcm9iZUNhbGxiYWNrIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfZGF0YSk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAgICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkLCBndWxvbmcgaWQpOwotCi1nYm9vbGVhbgkJZ3N0X3BhZF9pc19ibG9ja2VkCQkJKEdzdFBhZCAqcGFkKTsKLWdib29sZWFuCQlnc3RfcGFkX2lzX2Jsb2NraW5nCQkJKEdzdFBhZCAqcGFkKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9tYXJrX3JlY29uZmlndXJlICAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCk7Ci1nYm9vbGVhbgkJZ3N0X3BhZF9uZWVkc19yZWNvbmZpZ3VyZSAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCk7Ci1nYm9vbGVhbgkJZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCk7Ci0KLXZvaWQJCQlnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUJCShHc3RQYWQgKnBhZCwgZ3BvaW50ZXIgcHJpdik7Ci1ncG9pbnRlcgkJZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlCQkoR3N0UGFkICpwYWQpOwotCi1Hc3RQYWRUZW1wbGF0ZSoJCWdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZQkJKEdzdFBhZCAqcGFkKTsKLQotR3N0Rmxvd1JldHVybiAgICAgICAgICAgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0RXZlbnQgKmV2ZW50KTsKLUdzdEV2ZW50KiAgICAgICAgICAgICAgIGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAgICAgICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdEV2ZW50VHlwZSBldmVudF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBpZHgpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0UGFkU3RpY2t5RXZlbnRzRm9yZWFjaEZ1bmN0aW9uIGZvcmVhY2hfZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyogZGF0YSBwYXNzaW5nIHNldHVwIGZ1bmN0aW9ucyAqLwotdm9pZAkJCWdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uX2Z1bGwJKEdzdFBhZCAqcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRBY3RpdmF0ZUZ1bmN0aW9uIGFjdGl2YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSk7Ci12b2lkCQkJZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uX2Z1bGwJKEdzdFBhZCAqcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRBY3RpdmF0ZU1vZGVGdW5jdGlvbiBhY3RpdmF0ZW1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKLS8qIGRhdGEgcGFzc2luZyBmdW5jdGlvbnMgKi8KLXZvaWQJCQlnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbl9mdWxsCQkoR3N0UGFkICpwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZENoYWluRnVuY3Rpb24gY2hhaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKLXZvaWQJCQlnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uX2Z1bGwJKEdzdFBhZCAqcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRDaGFpbkxpc3RGdW5jdGlvbiBjaGFpbmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKLXZvaWQJCQlnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbl9mdWxsCShHc3RQYWQgKnBhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkR2V0UmFuZ2VGdW5jdGlvbiBnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKLXZvaWQJCQlnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbl9mdWxsCQkoR3N0UGFkICpwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZEV2ZW50RnVuY3Rpb24gZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKLXZvaWQJCQlnc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uX2Z1bGwJKEdzdFBhZCAqcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRFdmVudEZ1bGxGdW5jdGlvbiBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwotCi0jZGVmaW5lIGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uKHAsZikgICAgICBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbl9mdWxsKChwKSwoZiksTlVMTCxOVUxMKQotI2RlZmluZSBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24ocCxmKSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uX2Z1bGwoKHApLChmKSxOVUxMLE5VTEwpCi0jZGVmaW5lIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uKHAsZikgICAgICAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbl9mdWxsKChwKSwoZiksTlVMTCxOVUxMKQotI2RlZmluZSBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uKHAsZikgICAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbl9mdWxsKChwKSwoZiksTlVMTCxOVUxMKQotI2RlZmluZSBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbihwLGYpICAgICAgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb25fZnVsbCgocCksKGYpLE5VTEwsTlVMTCkKLSNkZWZpbmUgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24ocCxmKSAgICAgICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uX2Z1bGwoKHApLChmKSxOVUxMLE5VTEwpCi0jZGVmaW5lIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bGxfZnVuY3Rpb24ocCxmKSAgICBnc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uX2Z1bGwoKHApLChmKSxOVUxMLE5VTEwpCi0KLS8qIHBhZCBsaW5rcyAqLwotdm9pZAkJCWdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb25fZnVsbAkJKEdzdFBhZCAqcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRMaW5rRnVuY3Rpb24gbGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwotdm9pZAkJCWdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbl9mdWxsICAgICAgICAoR3N0UGFkICpwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZFVubGlua0Z1bmN0aW9uIHVubGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwotCi0jZGVmaW5lIGdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb24ocCxmKSAgICAgICAgICBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uX2Z1bGwoKHApLChmKSxOVUxMLE5VTEwpCi0jZGVmaW5lIGdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbihwLGYpICAgICAgICBnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb25fZnVsbCgocCksKGYpLE5VTEwsTlVMTCkKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9jYW5fbGluayAgICAgICAgICAgICAgICAgICAgICAgIChHc3RQYWQgKnNyY3BhZCwgR3N0UGFkICpzaW5rcGFkKTsKLUdzdFBhZExpbmtSZXR1cm4gICAgICAgIGdzdF9wYWRfbGluawkJCQkoR3N0UGFkICpzcmNwYWQsIEdzdFBhZCAqc2lua3BhZCk7Ci1Hc3RQYWRMaW5rUmV0dXJuICAgICAgICBnc3RfcGFkX2xpbmtfZnVsbAkJCShHc3RQYWQgKnNyY3BhZCwgR3N0UGFkICpzaW5rcGFkLCBHc3RQYWRMaW5rQ2hlY2sgZmxhZ3MpOwotZ2Jvb2xlYW4JCWdzdF9wYWRfdW5saW5rCQkJCShHc3RQYWQgKnNyY3BhZCwgR3N0UGFkICpzaW5rcGFkKTsKLWdib29sZWFuCQlnc3RfcGFkX2lzX2xpbmtlZAkJCShHc3RQYWQgKnBhZCk7Ci0KLUdzdFBhZCoJCQlnc3RfcGFkX2dldF9wZWVyCQkJKEdzdFBhZCAqcGFkKTsKLQotR3N0Q2FwcyogICAgICAgICAgICAgICAgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMJCShHc3RQYWQgKnBhZCk7Ci0KLS8qIGNhcHNuZWdvIGZ1bmN0aW9uIGZvciBsaW5rZWQvdW5saW5rZWQgcGFkcyAqLwotR3N0Q2FwcyAqCQlnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgICAgICAgICAgICAgICAgKEdzdFBhZCAqIHBhZCk7Ci1nYm9vbGVhbgkJZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzICAgICAgICAgICAgICAgIChHc3RQYWQgKiBwYWQpOwotCi0vKiBjYXBzbmVnbyBmb3IgbGlua2VkIHBhZHMgKi8KLUdzdENhcHMgKgkJZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzCQkoR3N0UGFkICogcGFkKTsKLQotLyogcGFkIG9mZnNldHMgKi8KLWdpbnQ2NCAgICAgICAgICAgICAgICAgIGdzdF9wYWRfZ2V0X29mZnNldCAgICAgICAgICAgICAgICAgICAgICAoR3N0UGFkICpwYWQpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9zZXRfb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCwgZ2ludDY0IG9mZnNldCk7Ci0KLS8qIGRhdGEgcGFzc2luZyBmdW5jdGlvbnMgdG8gcGVlciAqLwotR3N0Rmxvd1JldHVybgkJZ3N0X3BhZF9wdXNoCQkJCShHc3RQYWQgKnBhZCwgR3N0QnVmZmVyICpidWZmZXIpOwotR3N0Rmxvd1JldHVybgkJZ3N0X3BhZF9wdXNoX2xpc3QJCQkoR3N0UGFkICpwYWQsIEdzdEJ1ZmZlckxpc3QgKmxpc3QpOwotR3N0Rmxvd1JldHVybgkJZ3N0X3BhZF9wdWxsX3JhbmdlCQkJKEdzdFBhZCAqcGFkLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwKLQkJCQkJCQkJIEdzdEJ1ZmZlciAqKmJ1ZmZlcik7Ci1nYm9vbGVhbgkJZ3N0X3BhZF9wdXNoX2V2ZW50CQkJKEdzdFBhZCAqcGFkLCBHc3RFdmVudCAqZXZlbnQpOwotZ2Jvb2xlYW4JCWdzdF9wYWRfZXZlbnRfZGVmYXVsdAkJCShHc3RQYWQgKnBhZCwgR3N0T2JqZWN0ICpwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEV2ZW50ICpldmVudCk7Ci1Hc3RGbG93UmV0dXJuICAgICAgICAgICBnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuICAgICAgICAgICAgKEdzdFBhZCAqcGFkKTsKLQotLyogZGF0YSBwYXNzaW5nIGZ1bmN0aW9ucyBvbiBwYWQgKi8KLUdzdEZsb3dSZXR1cm4JCWdzdF9wYWRfY2hhaW4JCQkJKEdzdFBhZCAqcGFkLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci1Hc3RGbG93UmV0dXJuCQlnc3RfcGFkX2NoYWluX2xpc3QgICAgICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RCdWZmZXJMaXN0ICpsaXN0KTsKLUdzdEZsb3dSZXR1cm4JCWdzdF9wYWRfZ2V0X3JhbmdlCQkJKEdzdFBhZCAqcGFkLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwKLQkJCQkJCQkJIEdzdEJ1ZmZlciAqKmJ1ZmZlcik7Ci1nYm9vbGVhbgkJZ3N0X3BhZF9zZW5kX2V2ZW50CQkJKEdzdFBhZCAqcGFkLCBHc3RFdmVudCAqZXZlbnQpOwotCi0vKiBwYWQgdGFza3MgKi8KLWdib29sZWFuCQlnc3RfcGFkX3N0YXJ0X3Rhc2sJCQkoR3N0UGFkICpwYWQsIEdzdFRhc2tGdW5jdGlvbiBmdW5jLAotCQkJCQkJCQkgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwotZ2Jvb2xlYW4JCWdzdF9wYWRfcGF1c2VfdGFzawkJCShHc3RQYWQgKnBhZCk7Ci1nYm9vbGVhbgkJZ3N0X3BhZF9zdG9wX3Rhc2sJCQkoR3N0UGFkICpwYWQpOwotCi0vKiBpbnRlcm5hbCBsaW5rcyAqLwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbl9mdWxsIChHc3RQYWQgKiBwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZEl0ZXJJbnRMaW5rRnVuY3Rpb24gaXRlcmludGxpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKLUdzdEl0ZXJhdG9yICogICAgICAgICAgIGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAgICAgICAgICAoR3N0UGFkICogcGFkKTsKLUdzdEl0ZXJhdG9yICogICAgICAgICAgIGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0ICAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKnBhcmVudCk7Ci0KLSNkZWZpbmUgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbihwLGYpIGdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb25fZnVsbCgocCksKGYpLE5VTEwsTlVMTCkKLQotLyogZ2VuZXJpYyBxdWVyeSBmdW5jdGlvbiAqLwotZ2Jvb2xlYW4JCWdzdF9wYWRfcXVlcnkJCQkJKEdzdFBhZCAqcGFkLCBHc3RRdWVyeSAqcXVlcnkpOwotZ2Jvb2xlYW4JCWdzdF9wYWRfcGVlcl9xdWVyeQkJCShHc3RQYWQgKnBhZCwgR3N0UXVlcnkgKnF1ZXJ5KTsKLXZvaWQJCQlnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbl9mdWxsCQkoR3N0UGFkICpwYWQsIEdzdFBhZFF1ZXJ5RnVuY3Rpb24gcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKLWdib29sZWFuCQlnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQJCQkoR3N0UGFkICpwYWQsIEdzdE9iamVjdCAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAqcXVlcnkpOwotCi0jZGVmaW5lIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uKHAsZikgICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbl9mdWxsKChwKSwoZiksTlVMTCxOVUxMKQotCi0vKiBtaXNjIGhlbHBlciBmdW5jdGlvbnMgKi8KLWdib29sZWFuCQlnc3RfcGFkX2ZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RQYWRGb3J3YXJkRnVuY3Rpb24gZm9yd2FyZCwKLQkJCQkJCQkJIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0UGFkLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9QQURfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0cGFkdGVtcGxhdGUuYyBiL2dzdC9nc3RwYWR0ZW1wbGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDcyNjMwLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RwYWR0ZW1wbGF0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3RwYWR0ZW1wbGF0ZS5jOiBUZW1wbGF0ZXMgZm9yIHBhZCBjcmVhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RwYWR0ZW1wbGF0ZQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBEZXNjcmliZSB0aGUgbWVkaWEgdHlwZSBvZiBhIHBhZC4KLSAqIEBzZWVfYWxzbzogI0dzdFBhZCwgI0dzdEVsZW1lbnRGYWN0b3J5Ci0gKgotICogUGFkdGVtcGxhdGVzIGRlc2NyaWJlIHRoZSBwb3NzaWJsZSBtZWRpYSB0eXBlcyBhIHBhZCBvciBhbiBlbGVtZW50ZmFjdG9yeSBjYW4KLSAqIGhhbmRsZS4gVGhpcyBhbGxvd3MgZm9yIGJvdGggaW5zcGVjdGlvbiBvZiBoYW5kbGVkIHR5cGVzIGJlZm9yZSBsb2FkaW5nIHRoZQotICogZWxlbWVudCBwbHVnaW4gYXMgd2VsbCBhcyBpZGVudGlmeWluZyBwYWRzIG9uIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCB5ZXQKLSAqIGNyZWF0ZWQgKHJlcXVlc3Qgb3Igc29tZXRpbWVzIHBhZHMpLgotICoKLSAqIFBhZCBhbmQgUGFkVGVtcGxhdGVzIGhhdmUgI0dzdENhcHMgYXR0YWNoZWQgdG8gaXQgdG8gZGVzY3JpYmUgdGhlIG1lZGlhIHR5cGUKLSAqIHRoZXkgYXJlIGNhcGFibGUgb2YgZGVhbGluZyB3aXRoLiBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzKCkgb3IKLSAqIEdTVF9QQURfVEVNUExBVEVfQ0FQUygpIGFyZSB1c2VkIHRvIGdldCB0aGUgY2FwcyBvZiBhIHBhZHRlbXBsYXRlLiBJdCdzIG5vdAotICogcG9zc2libGUgdG8gbW9kaWZ5IHRoZSBjYXBzIG9mIGEgcGFkdGVtcGxhdGUgYWZ0ZXIgY3JlYXRpb24uCi0gKgotICogUGFkVGVtcGxhdGVzIGhhdmUgYSAjR3N0UGFkUHJlc2VuY2UgcHJvcGVydHkgd2hpY2ggaWRlbnRpZmllcyB0aGUgbGlmZXRpbWUKLSAqIG9mIHRoZSBwYWQgYW5kIHRoYXQgY2FuIGJlIHJldHJpZXZlZCB3aXRoIEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UoKS4gQWxzbwotICogdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFkIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgI0dzdFBhZFRlbXBsYXRlIHdpdGgKLSAqIEdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OKCkuCi0gKgotICogVGhlIEdTVF9QQURfVEVNUExBVEVfTkFNRV9URU1QTEFURSAoKSBpcyBpbXBvcnRhbnQgZm9yIEdTVF9QQURfUkVRVUVTVCBwYWRzCi0gKiBiZWNhdXNlIGl0IGhhcyB0byBiZSB1c2VkIGFzIHRoZSBuYW1lIGluIHRoZSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQoKQotICogY2FsbCB0byBpbnN0YW50aWF0ZSBhIHBhZCBmcm9tIHRoaXMgdGVtcGxhdGUuCi0gKgotICogUGFkdGVtcGxhdGVzIGNhbiBiZSBjcmVhdGVkIHdpdGggZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSBvciB3aXRoCi0gKiBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCksIHdoaWNoIGNyZWF0ZXMgYSAjR3N0UGFkVGVtcGxhdGUgZnJvbSBhCi0gKiAjR3N0U3RhdGljUGFkVGVtcGxhdGUgdGhhdCBjYW4gYmUgZmlsbGVkIHdpdGggdGhlCi0gKiBjb252ZW5pZW50IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCkgbWFjcm8uCi0gKgotICogQSBwYWR0ZW1wbGF0ZSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBwYWQgKHNlZSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlKCkKLSAqIG9yIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgpKSBvciB0byBhZGQgdG8gYW4gZWxlbWVudCBjbGFzcwotICogKHNlZSBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoKSkuCi0gKgotICogVGhlIGZvbGxvd2luZyBjb2RlIGV4YW1wbGUgc2hvd3MgdGhlIGNvZGUgdG8gY3JlYXRlIGEgcGFkIGZyb20gYSBwYWR0ZW1wbGF0ZS4KLSAqIHxbPCEtLSBsYW5ndWFnZT0iQyIgLS0+Ci0gKiAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlIG15X3RlbXBsYXRlID0KLSAqICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKAotICogICAgICJzaW5rIiwgICAgICAgICAgLy8gdGhlIG5hbWUgb2YgdGhlIHBhZAotICogICAgIEdTVF9QQURfU0lOSywgICAgLy8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFkCi0gKiAgICAgR1NUX1BBRF9BTFdBWVMsICAvLyB3aGVuIHRoaXMgcGFkIHdpbGwgYmUgcHJlc2VudAotICogICAgIEdTVF9TVEFUSUNfQ0FQUyAoICAgICAgICAvLyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwYWR0ZW1wbGF0ZQotICogICAgICAgImF1ZGlvL3gtcmF3LCAiCi0gKiAgICAgICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgNiBdIgotICogICAgICkKLSAqICAgKTsKLSAqICAgdm9pZAotICogICBteV9tZXRob2QgKHZvaWQpCi0gKiAgIHsKLSAqICAgICBHc3RQYWQgKnBhZDsKLSAqICAgICBwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmFtcDtteV90ZW1wbGF0ZSwgInNpbmsiKTsKLSAqICAgICAuLi4KLSAqICAgfQotICogXXwKLSAqCi0gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgeW91IGhvdyB0byBhZGQgdGhlIHBhZHRlbXBsYXRlIHRvIGFuCi0gKiBlbGVtZW50IGNsYXNzLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSBpbiB0aGUgY2xhc3NfaW5pdCBvZiB0aGUgY2xhc3M6Ci0gKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgotICogICBzdGF0aWMgdm9pZAotICogICBteV9lbGVtZW50X2NsYXNzX2luaXQgKEdzdE15RWxlbWVudENsYXNzICprbGFzcykKLSAqICAgewotICogICAgIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gKgotICogICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmYW1wO215X3RlbXBsYXRlKTsKLSAqICAgfQotICogXXwKLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdHBhZC5oIgotI2luY2x1ZGUgImdzdHBhZHRlbXBsYXRlLmgiCi0jaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCi0jaW5jbHVkZSAiZ3N0dXRpbHMuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0ZXJyb3IuaCIKLSNpbmNsdWRlICJnc3R2YWx1ZS5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBHU1RfQ0FUX1BBRFMKLQotZW51bQotewotICBQUk9QX05BTUVfVEVNUExBVEUgPSAxLAotICBQUk9QX0RJUkVDVElPTiwKLSAgUFJPUF9QUkVTRU5DRSwKLSAgUFJPUF9DQVBTCi19OwotCi1lbnVtCi17Ci0gIFRFTVBMX1BBRF9DUkVBVEVELAotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1zdGF0aWMgZ3VpbnQgZ3N0X3BhZF90ZW1wbGF0ZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi1zdGF0aWMgdm9pZCBnc3RfcGFkX3RlbXBsYXRlX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3BhZF90ZW1wbGF0ZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcGFkX3RlbXBsYXRlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotI2RlZmluZSBnc3RfcGFkX3RlbXBsYXRlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFBhZFRlbXBsYXRlLCBnc3RfcGFkX3RlbXBsYXRlLCBHU1RfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3BhZF90ZW1wbGF0ZV9jbGFzc19pbml0IChHc3RQYWRUZW1wbGF0ZUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0T2JqZWN0Q2xhc3MgKmdzdG9iamVjdF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0b2JqZWN0X2NsYXNzID0gKEdzdE9iamVjdENsYXNzICopIGtsYXNzOwotCi0gIC8qKgotICAgKiBHc3RQYWRUZW1wbGF0ZTo6cGFkLWNyZWF0ZWQ6Ci0gICAqIEBwYWRfdGVtcGxhdGU6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbC4KLSAgICogQHBhZDogdGhlIHBhZCB0aGF0IHdhcyBjcmVhdGVkLgotICAgKgotICAgKiBUaGlzIHNpZ25hbCBpcyBmaXJlZCB3aGVuIGFuIGVsZW1lbnQgY3JlYXRlcyBhIHBhZCBmcm9tIHRoaXMgdGVtcGxhdGUuCi0gICAqLwotICBnc3RfcGFkX3RlbXBsYXRlX3NpZ25hbHNbVEVNUExfUEFEX0NSRUFURURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInBhZC1jcmVhdGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdFBhZFRlbXBsYXRlQ2xhc3MsIHBhZF9jcmVhdGVkKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfUEFEKTsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3BhZF90ZW1wbGF0ZV9kaXNwb3NlOwotCi0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9wYWRfdGVtcGxhdGVfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcGFkX3RlbXBsYXRlX3NldF9wcm9wZXJ0eTsKLQotICAvKioKLSAgICogR3N0UGFkVGVtcGxhdGU6bmFtZS10ZW1wbGF0ZToKLSAgICoKLSAgICogVGhlIG5hbWUgdGVtcGxhdGUgb2YgdGhlIHBhZCB0ZW1wbGF0ZS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTkFNRV9URU1QTEFURSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJuYW1lLXRlbXBsYXRlIiwgIk5hbWUgdGVtcGxhdGUiLAotICAgICAgICAgICJUaGUgbmFtZSB0ZW1wbGF0ZSBvZiB0aGUgcGFkIHRlbXBsYXRlIiwgTlVMTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFBhZFRlbXBsYXRlOmRpcmVjdGlvbjoKLSAgICoKLSAgICogVGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFkIGRlc2NyaWJlZCBieSB0aGUgcGFkIHRlbXBsYXRlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ESVJFQ1RJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImRpcmVjdGlvbiIsICJEaXJlY3Rpb24iLAotICAgICAgICAgICJUaGUgZGlyZWN0aW9uIG9mIHRoZSBwYWQgZGVzY3JpYmVkIGJ5IHRoZSBwYWQgdGVtcGxhdGUiLAotICAgICAgICAgIEdTVF9UWVBFX1BBRF9ESVJFQ1RJT04sIEdTVF9QQURfVU5LTk9XTiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFBhZFRlbXBsYXRlOnByZXNlbmNlOgotICAgKgotICAgKiBXaGVuIHRoZSBwYWQgZGVzY3JpYmVkIGJ5IHRoZSBwYWQgdGVtcGxhdGUgd2lsbCBiZWNvbWUgYXZhaWxhYmxlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QUkVTRU5DRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgicHJlc2VuY2UiLCAiUHJlc2VuY2UiLAotICAgICAgICAgICJXaGVuIHRoZSBwYWQgZGVzY3JpYmVkIGJ5IHRoZSBwYWQgdGVtcGxhdGUgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIiwKLSAgICAgICAgICBHU1RfVFlQRV9QQURfUFJFU0VOQ0UsIEdTVF9QQURfQUxXQVlTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UGFkVGVtcGxhdGU6Y2FwczoKLSAgICoKLSAgICogVGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGFkIGRlc2NyaWJlZCBieSB0aGUgcGFkIHRlbXBsYXRlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQVBTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgiY2FwcyIsICJDYXBzIiwKLSAgICAgICAgICAiVGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGFkIGRlc2NyaWJlZCBieSB0aGUgcGFkIHRlbXBsYXRlIiwKLSAgICAgICAgICBHU1RfVFlQRV9DQVBTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RvYmplY3RfY2xhc3MtPnBhdGhfc3RyaW5nX3NlcGFyYXRvciA9ICIqIjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wYWRfdGVtcGxhdGVfaW5pdCAoR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKLXsKLSAgLyogR3N0UGFkVGVtcGxhdGUgb2JqZWN0cyBhcmUgdXN1YWxseSBsZWFrZWQgKi8KLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAodGVtcGwsIEdTVF9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wYWRfdGVtcGxhdGVfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsID0gR1NUX1BBRF9URU1QTEFURSAob2JqZWN0KTsKLQotICBnX2ZyZWUgKEdTVF9QQURfVEVNUExBVEVfTkFNRV9URU1QTEFURSAodGVtcGwpKTsKLSAgaWYgKEdTVF9QQURfVEVNUExBVEVfQ0FQUyAodGVtcGwpKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKEdTVF9QQURfVEVNUExBVEVfQ0FQUyAodGVtcGwpKTsKLSAgfQotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi0vKiBBTFdBWVMgcGFkdGVtcGxhdGVzIGNhbm5vdCBoYXZlIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbnMgKGxpa2Ugc3JjXyVkKSwKLSAqIHNpbmNlIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZS4KLSAqIFNPTUVUSU1FUyBwYWR0ZW1wbGF0ZXMgY2FuIGRvIHdoYXRldmVyIHRoZXkgd2FudCwgdGhleSBhcmUgcHJvdmlkZWQgYnkgdGhlCi0gKiBlbGVtZW50LgotICogUkVRVUVTVCBwYWR0ZW1wbGF0ZXMgY2FuIGJlIHJldmVyc2UtcGFyc2VkICh0aGUgdXNlciBhc2tzIGZvciAnc2luazEnLCB0aGUKLSAqICdzaW5rJWQnIHRlbXBsYXRlIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQpLCBzbyB3ZSBuZWVkIHRvIHJlc3RyaWN0IHRoZWlyCi0gKiBuYW1pbmcuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotbmFtZV9pc192YWxpZCAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RQYWRQcmVzZW5jZSBwcmVzZW5jZSkKLXsKLSAgY29uc3QgZ2NoYXIgKnN0cjsKLQotICBpZiAocHJlc2VuY2UgPT0gR1NUX1BBRF9BTFdBWVMpIHsKLSAgICBpZiAoc3RyY2hyIChuYW1lLCAnJScpKSB7Ci0gICAgICBnX3dhcm5pbmcgKCJpbnZhbGlkIG5hbWUgdGVtcGxhdGUgJXM6IGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCIKLSAgICAgICAgICAiIGFsbG93ZWQgZm9yIEdTVF9QQURfQUxXQVlTIHBhZHRlbXBsYXRlcyIsIG5hbWUpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIGlmIChwcmVzZW5jZSA9PSBHU1RfUEFEX1JFUVVFU1QpIHsKLSAgICBpZiAoKHN0ciA9IHN0cmNociAobmFtZSwgJyUnKSkgJiYgc3RyY2hyIChzdHIgKyAxLCAnJScpKSB7Ci0gICAgICBnX3dhcm5pbmcgKCJpbnZhbGlkIG5hbWUgdGVtcGxhdGUgJXM6IG9ubHkgb25lIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbiIKLSAgICAgICAgICAiIGFsbG93ZWQgaW4gR1NUX1BBRF9SRVFVRVNUIHBhZHRlbXBsYXRlIiwgbmFtZSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIGlmIChzdHIgJiYgKCooc3RyICsgMSkgIT0gJ3MnICYmICooc3RyICsgMSkgIT0gJ2QnICYmICooc3RyICsgMSkgIT0gJ3UnKSkgewotICAgICAgZ193YXJuaW5nICgiaW52YWxpZCBuYW1lIHRlbXBsYXRlICVzOiBjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gbXVzdCBiZSBvZiIKLSAgICAgICAgICAiIHR5cGUgJyUlZCcsICclJXUnIG9yICclJXMnIGZvciBHU1RfUEFEX1JFUVVFU1QgcGFkdGVtcGxhdGUiLCBuYW1lKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgaWYgKHN0ciAmJiAoKihzdHIgKyAyKSAhPSAnXDAnKSkgewotICAgICAgZ193YXJuaW5nICgiaW52YWxpZCBuYW1lIHRlbXBsYXRlICVzOiBjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gbXVzdCIKLSAgICAgICAgICAiIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBHU1RfUEFEX1JFUVVFU1QgcGFkdGVtcGxhdGUgbmFtZSIsIG5hbWUpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1HX0RFRklORV9QT0lOVEVSX1RZUEUgKEdzdFN0YXRpY1BhZFRlbXBsYXRlLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZSk7Ci0KLS8qKgotICogZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0OgotICogQHBhZF90ZW1wbGF0ZTogdGhlIHN0YXRpYyBwYWQgdGVtcGxhdGUKLSAqCi0gKiBDb252ZXJ0cyBhICNHc3RTdGF0aWNQYWRUZW1wbGF0ZSBpbnRvIGEgI0dzdFBhZFRlbXBsYXRlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFBhZFRlbXBsYXRlLgotICovCi0vKiBGSVhNRTAuMTE6IHJlbmFtZSB0byBnc3RfcGFkX3RlbXBsYXRlX25ld19mcm9tX3N0YXRpY19wYWRfdGVtcGxhdGUoKSAqLwotR3N0UGFkVGVtcGxhdGUgKgotZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0IChHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHBhZF90ZW1wbGF0ZSkKLXsKLSAgR3N0UGFkVGVtcGxhdGUgKm5ldzsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBpZiAoIW5hbWVfaXNfdmFsaWQgKHBhZF90ZW1wbGF0ZS0+bmFtZV90ZW1wbGF0ZSwgcGFkX3RlbXBsYXRlLT5wcmVzZW5jZSkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgY2FwcyA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZwYWRfdGVtcGxhdGUtPnN0YXRpY19jYXBzKTsKLQotICBuZXcgPSBnX29iamVjdF9uZXcgKGdzdF9wYWRfdGVtcGxhdGVfZ2V0X3R5cGUgKCksCi0gICAgICAibmFtZSIsIHBhZF90ZW1wbGF0ZS0+bmFtZV90ZW1wbGF0ZSwKLSAgICAgICJuYW1lLXRlbXBsYXRlIiwgcGFkX3RlbXBsYXRlLT5uYW1lX3RlbXBsYXRlLAotICAgICAgImRpcmVjdGlvbiIsIHBhZF90ZW1wbGF0ZS0+ZGlyZWN0aW9uLAotICAgICAgInByZXNlbmNlIiwgcGFkX3RlbXBsYXRlLT5wcmVzZW5jZSwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgcmV0dXJuIG5ldzsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3RlbXBsYXRlX25ldzoKLSAqIEBuYW1lX3RlbXBsYXRlOiB0aGUgbmFtZSB0ZW1wbGF0ZS4KLSAqIEBkaXJlY3Rpb246IHRoZSAjR3N0UGFkRGlyZWN0aW9uIG9mIHRoZSB0ZW1wbGF0ZS4KLSAqIEBwcmVzZW5jZTogdGhlICNHc3RQYWRQcmVzZW5jZSBvZiB0aGUgcGFkLgotICogQGNhcHM6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0Q2FwcyBzZXQgZm9yIHRoZSB0ZW1wbGF0ZS4KLSAqCi0gKiBDcmVhdGVzIGEgbmV3IHBhZCB0ZW1wbGF0ZSB3aXRoIGEgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHRlbXBsYXRlCi0gKiBhbmQgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmbG9hdGluZyk6IGEgbmV3ICNHc3RQYWRUZW1wbGF0ZS4KLSAqLwotR3N0UGFkVGVtcGxhdGUgKgotZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKGNvbnN0IGdjaGFyICogbmFtZV90ZW1wbGF0ZSwKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RQYWRQcmVzZW5jZSBwcmVzZW5jZSwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICpuZXc7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWVfdGVtcGxhdGUgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjYXBzICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGlyZWN0aW9uID09IEdTVF9QQURfU1JDCi0gICAgICB8fCBkaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByZXNlbmNlID09IEdTVF9QQURfQUxXQVlTCi0gICAgICB8fCBwcmVzZW5jZSA9PSBHU1RfUEFEX1NPTUVUSU1FUyB8fCBwcmVzZW5jZSA9PSBHU1RfUEFEX1JFUVVFU1QsIE5VTEwpOwotCi0gIGlmICghbmFtZV9pc192YWxpZCAobmFtZV90ZW1wbGF0ZSwgcHJlc2VuY2UpKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBuZXcgPSBnX29iamVjdF9uZXcgKGdzdF9wYWRfdGVtcGxhdGVfZ2V0X3R5cGUgKCksCi0gICAgICAibmFtZSIsIG5hbWVfdGVtcGxhdGUsICJuYW1lLXRlbXBsYXRlIiwgbmFtZV90ZW1wbGF0ZSwKLSAgICAgICJkaXJlY3Rpb24iLCBkaXJlY3Rpb24sICJwcmVzZW5jZSIsIHByZXNlbmNlLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotCi0gIHJldHVybiBuZXc7Ci19Ci0KLS8qKgotICogZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHM6Ci0gKiBAdGVtcGw6IGEgI0dzdFN0YXRpY1BhZFRlbXBsYXRlIHRvIGdldCBjYXBhYmlsaXRpZXMgb2YuCi0gKgotICogR2V0cyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBzdGF0aWMgcGFkIHRlbXBsYXRlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDYXBzIG9mIHRoZSBzdGF0aWMgcGFkIHRlbXBsYXRlLgotICogVW5yZWYgYWZ0ZXIgdXNhZ2UuIFNpbmNlIHRoZSBjb3JlIGhvbGRzIGFuIGFkZGl0aW9uYWwKLSAqIHJlZiB0byB0aGUgcmV0dXJuZWQgY2FwcywgdXNlIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKQotICogb24gdGhlIHJldHVybmVkIGNhcHMgdG8gbW9kaWZ5IGl0LgotICovCi1Hc3RDYXBzICoKLWdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRlbXBsKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGVtcGwsIE5VTEwpOwotCi0gIHJldHVybiBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmdGVtcGwtPnN0YXRpY19jYXBzKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzOgotICogQHRlbXBsOiBhICNHc3RQYWRUZW1wbGF0ZSB0byBnZXQgY2FwYWJpbGl0aWVzIG9mLgotICoKLSAqIEdldHMgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgcGFkIHRlbXBsYXRlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RDYXBzIG9mIHRoZSBwYWQgdGVtcGxhdGUuCi0gKiBVbnJlZiBhZnRlciB1c2FnZS4KLSAqLwotR3N0Q2FwcyAqCi1nc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzIChHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsKQotewotICBHc3RDYXBzICpjYXBzOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRF9URU1QTEFURSAodGVtcGwpLCBOVUxMKTsKLQotICBjYXBzID0gR1NUX1BBRF9URU1QTEFURV9DQVBTICh0ZW1wbCk7Ci0KLSAgcmV0dXJuIChjYXBzID8gZ3N0X2NhcHNfcmVmIChjYXBzKSA6IE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9wYWRfdGVtcGxhdGVfcGFkX2NyZWF0ZWQ6Ci0gKiBAdGVtcGw6IGEgI0dzdFBhZFRlbXBsYXRlIHRoYXQgaGFzIGJlZW4gY3JlYXRlZAotICogQHBhZDogICB0aGUgI0dzdFBhZCB0aGF0IGNyZWF0ZWQgaXQKLSAqCi0gKiBFbWl0IHRoZSBwYWQtY3JlYXRlZCBzaWduYWwgZm9yIHRoaXMgdGVtcGxhdGUgd2hlbiBjcmVhdGVkIGJ5IHRoaXMgcGFkLgotICovCi12b2lkCi1nc3RfcGFkX3RlbXBsYXRlX3BhZF9jcmVhdGVkIChHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBHc3RQYWQgKiBwYWQpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHRlbXBsLCBnc3RfcGFkX3RlbXBsYXRlX3NpZ25hbHNbVEVNUExfUEFEX0NSRUFURURdLCAwLCBwYWQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BhZF90ZW1wbGF0ZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgLyogdGhlc2UgcHJvcGVydGllcyBhcmUgYWxsIGNvbnN0cnVjdC1vbmx5ICovCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9OQU1FX1RFTVBMQVRFOgotICAgICAgR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFIChvYmplY3QpID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRElSRUNUSU9OOgotICAgICAgR1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT04gKG9iamVjdCkgPQotICAgICAgICAgIChHc3RQYWREaXJlY3Rpb24pIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUkVTRU5DRToKLSAgICAgIEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UgKG9iamVjdCkgPQotICAgICAgICAgIChHc3RQYWRQcmVzZW5jZSkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBUFM6Ci0gICAgICBHU1RfUEFEX1RFTVBMQVRFX0NBUFMgKG9iamVjdCkgPSBnX3ZhbHVlX2R1cF9ib3hlZCAodmFsdWUpOwotICAgICAgaWYgKEdTVF9QQURfVEVNUExBVEVfQ0FQUyAob2JqZWN0KSAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIEdzdFBhZFRlbXBsYXRlIGFyZSB1c3VhbGx5IGxlYWtlZCBzbyBhcmUgdGhlaXIgY2FwcyAqLwotICAgICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19TRVQgKEdTVF9QQURfVEVNUExBVEVfQ0FQUyAob2JqZWN0KSwKLSAgICAgICAgICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX01BWV9CRV9MRUFLRUQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgLyogdGhlc2UgcHJvcGVydGllcyBhcmUgYWxsIGNvbnN0cnVjdC1vbmx5ICovCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9OQU1FX1RFTVBMQVRFOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFIChvYmplY3QpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ESVJFQ1RJT046Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgR1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT04gKG9iamVjdCkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BSRVNFTkNFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UgKG9iamVjdCkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBUFM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIEdTVF9QQURfVEVNUExBVEVfQ0FQUyAob2JqZWN0KSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0cGFkdGVtcGxhdGUuaCBiL2dzdC9nc3RwYWR0ZW1wbGF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDkxNjQ3Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RwYWR0ZW1wbGF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+Ci0gKgotICogZ3N0cGFkdGVtcGxhdGUuaDogSGVhZGVyIGZvciBHc3RQYWRUZW1wbGF0ZSBvYmplY3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfUEFEX1RFTVBMQVRFX0hfXwotI2RlZmluZSBfX0dTVF9QQURfVEVNUExBVEVfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQYWRUZW1wbGF0ZSBHc3RQYWRUZW1wbGF0ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQYWRUZW1wbGF0ZUNsYXNzIEdzdFBhZFRlbXBsYXRlQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3RhdGljUGFkVGVtcGxhdGUgR3N0U3RhdGljUGFkVGVtcGxhdGU7Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGV2ZW50Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHF1ZXJ5Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRhc2suaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1NUQVRJQ19QQURfVEVNUExBVEUJKGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF90eXBlICgpKQotCi0jZGVmaW5lIEdTVF9UWVBFX1BBRF9URU1QTEFURQkJKGdzdF9wYWRfdGVtcGxhdGVfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9QQURfVEVNUExBVEUob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfUEFEX1RFTVBMQVRFLEdzdFBhZFRlbXBsYXRlKSkKLSNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9QQURfVEVNUExBVEUsR3N0UGFkVGVtcGxhdGVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19QQURfVEVNUExBVEUob2JqKQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9QQURfVEVNUExBVEUpKQotI2RlZmluZSBHU1RfSVNfUEFEX1RFTVBMQVRFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1BBRF9URU1QTEFURSkpCi0KLS8qKgotICogR3N0UGFkUHJlc2VuY2U6Ci0gKiBAR1NUX1BBRF9BTFdBWVM6IHRoZSBwYWQgaXMgYWx3YXlzIGF2YWlsYWJsZQotICogQEdTVF9QQURfU09NRVRJTUVTOiB0aGUgcGFkIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBkZXBlbmRpbmcgb24gdGhlIG1lZGlhIHN0cmVhbQotICogQEdTVF9QQURfUkVRVUVTVDogdGhlIHBhZCBpcyBvbmx5IGF2YWlsYWJsZSBvbiByZXF1ZXN0IHdpdGgKLSAqICBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCgpLgotICoKLSAqIEluZGljYXRlcyB3aGVuIHRoaXMgcGFkIHdpbGwgYmVjb21lIGF2YWlsYWJsZS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1BBRF9BTFdBWVMsCi0gIEdTVF9QQURfU09NRVRJTUVTLAotICBHU1RfUEFEX1JFUVVFU1QKLX0gR3N0UGFkUHJlc2VuY2U7Ci0KLS8qKgotICogR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFOgotICogQHRlbXBsOiB0aGUgdGVtcGxhdGUgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIG5hbWV0ZW1wbGF0ZSBvZiB0aGUgcGFkdGVtcGxhdGUuCi0gKi8KLSNkZWZpbmUgR1NUX1BBRF9URU1QTEFURV9OQU1FX1RFTVBMQVRFKHRlbXBsKQkoKChHc3RQYWRUZW1wbGF0ZSAqKSh0ZW1wbCkpLT5uYW1lX3RlbXBsYXRlKQotCi0vKioKLSAqIEdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OOgotICogQHRlbXBsOiB0aGUgdGVtcGxhdGUgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlICNHc3RQYWREaXJlY3Rpb24gb2YgdGhlIHBhZHRlbXBsYXRlLgotICovCi0jZGVmaW5lIEdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OKHRlbXBsKQkoKChHc3RQYWRUZW1wbGF0ZSAqKSh0ZW1wbCkpLT5kaXJlY3Rpb24pCi0KLS8qKgotICogR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRToKLSAqIEB0ZW1wbDogdGhlIHRlbXBsYXRlIHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSAjR3N0UGFkUHJlc2VuY2Ugb2YgdGhlIHBhZHRlbXBsYXRlLgotICovCi0jZGVmaW5lIEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UodGVtcGwpCSgoKEdzdFBhZFRlbXBsYXRlICopKHRlbXBsKSktPnByZXNlbmNlKQotCi0vKioKLSAqIEdTVF9QQURfVEVNUExBVEVfQ0FQUzoKLSAqIEB0ZW1wbDogdGhlIHRlbXBsYXRlIHRvIHF1ZXJ5Ci0gKgotICogR2V0IGEgaGFuZGxlIHRvIHRoZSBwYWR0ZW1wbGF0ZSAjR3N0Q2FwcwotICovCi0jZGVmaW5lIEdTVF9QQURfVEVNUExBVEVfQ0FQUyh0ZW1wbCkJCSgoKEdzdFBhZFRlbXBsYXRlICopKHRlbXBsKSktPmNhcHMpCi0KLS8qKgotICogR3N0UGFkVGVtcGxhdGVGbGFnczoKLSAqIEBHU1RfUEFEX1RFTVBMQVRFX0ZMQUdfTEFTVDogZmlyc3QgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMuCi0gKgotICogRmxhZ3MgZm9yIHRoZSBwYWR0ZW1wbGF0ZQotICovCi10eXBlZGVmIGVudW0gewotICAvKiBwYWRkaW5nICovCi0gIEdTVF9QQURfVEVNUExBVEVfRkxBR19MQVNUICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDQpCi19IEdzdFBhZFRlbXBsYXRlRmxhZ3M7Ci0KLS8qKgotICogR1NUX1BBRF9URU1QTEFURV9JU19GSVhFRDoKLSAqIEB0ZW1wbDogdGhlIHRlbXBsYXRlIHRvIHF1ZXJ5Ci0gKgotICogQ2hlY2sgaWYgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBhZHRlbXBsYXRlIGFyZSBmaXhlZAotICovCi0jZGVmaW5lIEdTVF9QQURfVEVNUExBVEVfSVNfRklYRUQodGVtcGwpCShHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUKHRlbXBsLCBHU1RfUEFEX1RFTVBMQVRFX0ZJWEVEKSkKLQotLyoqCi0gKiBHc3RQYWRUZW1wbGF0ZToKLSAqCi0gKiBUaGUgcGFkdGVtcGxhdGUgb2JqZWN0LgotICovCi1zdHJ1Y3QgX0dzdFBhZFRlbXBsYXRlIHsKLSAgR3N0T2JqZWN0CSAgIG9iamVjdDsKLQotICBnY2hhciAgICAgICAgICAgKm5hbWVfdGVtcGxhdGU7Ci0gIEdzdFBhZERpcmVjdGlvbiAgZGlyZWN0aW9uOwotICBHc3RQYWRQcmVzZW5jZSAgIHByZXNlbmNlOwotICBHc3RDYXBzCSAgKmNhcHM7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3RQYWRUZW1wbGF0ZUNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgICBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFsIGNhbGxiYWNrcyAqLwotICB2b2lkICgqcGFkX2NyZWF0ZWQpCShHc3RQYWRUZW1wbGF0ZSAqdGVtcGwsIEdzdFBhZCAqcGFkKTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0vKioKLSAqIEdzdFN0YXRpY1BhZFRlbXBsYXRlOgotICogQG5hbWVfdGVtcGxhdGU6IHRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZQotICogQGRpcmVjdGlvbjogdGhlIGRpcmVjdGlvbiBvZiB0aGUgdGVtcGxhdGUKLSAqIEBwcmVzZW5jZTogdGhlIHByZXNlbmNlIG9mIHRoZSB0ZW1wbGF0ZQotICogQHN0YXRpY19jYXBzOiB0aGUgY2FwcyBvZiB0aGUgdGVtcGxhdGUuCi0gKgotICogU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlICNHc3RTdGF0aWNQYWRUZW1wbGF0ZS4KLSAqLwotc3RydWN0IF9Hc3RTdGF0aWNQYWRUZW1wbGF0ZSB7Ci0gIGNvbnN0IGdjaGFyICAgICAqbmFtZV90ZW1wbGF0ZTsKLSAgR3N0UGFkRGlyZWN0aW9uICBkaXJlY3Rpb247Ci0gIEdzdFBhZFByZXNlbmNlICAgcHJlc2VuY2U7Ci0gIEdzdFN0YXRpY0NhcHMgICAgc3RhdGljX2NhcHM7Ci19OwotCi0vKioKLSAqIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFOgotICogQHBhZG5hbWU6IHRoZSBuYW1lIHRlbXBsYXRlIG9mIHRoZSBwYWQKLSAqIEBkaXI6IHRoZSBHc3RQYWREaXJlY3Rpb24gb2YgdGhlIHBhZAotICogQHByZXM6IHRoZSBHc3RQYWRQcmVzZW5jZSBvZiB0aGUgcGFkCi0gKiBAY2FwczogdGhlIEdzdFN0YXRpY0NhcHMgb2YgdGhlIHBhZAotICoKLSAqIENvbnZlbmllbmNlIG1hY3JvIHRvIGZpbGwgdGhlIHZhbHVlcyBvZiBhIEdzdFN0YXRpY1BhZFRlbXBsYXRlCi0gKiBzdHJ1Y3R1cmUuCi0gKi8KLSNkZWZpbmUgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUocGFkbmFtZSwgZGlyLCBwcmVzLCBjYXBzKSBcCi17IFwKLSAgLyogbmFtZV90ZW1wbGF0ZSAqLyAgICBwYWRuYW1lLCBcCi0gIC8qIGRpcmVjdGlvbiAqLyAgICAgICAgZGlyLCBcCi0gIC8qIHByZXNlbmNlICovICAgICAgICAgcHJlcywgXAotICAvKiBjYXBzICovICAgICAgICAgICAgIGNhcHMgXAotfQotCi0vKiB0ZW1wbGF0ZXMgYW5kIGZhY3RvcmllcyAqLwotR1R5cGUJCQlnc3RfcGFkX3RlbXBsYXRlX2dldF90eXBlCQkodm9pZCk7Ci1HVHlwZQkJCWdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF90eXBlCSh2b2lkKTsKLQotR3N0UGFkVGVtcGxhdGUqCQlnc3RfcGFkX3RlbXBsYXRlX25ldwkJCShjb25zdCBnY2hhciAqbmFtZV90ZW1wbGF0ZSwKLQkJCQkJCQkJIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdFBhZFByZXNlbmNlIHByZXNlbmNlLAotCQkJCQkJCQkgR3N0Q2FwcyAqY2FwcykgR19HTlVDX01BTExPQzsKLQotR3N0UGFkVGVtcGxhdGUgKglnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgICAgICAgICAgICAgKEdzdFN0YXRpY1BhZFRlbXBsYXRlICpwYWRfdGVtcGxhdGUpOwotR3N0Q2FwcyoJCWdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzCShHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGwpOwotR3N0Q2FwcyoJCWdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMJCShHc3RQYWRUZW1wbGF0ZSAqdGVtcGwpOwotCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfcGFkX3RlbXBsYXRlX3BhZF9jcmVhdGVkICAgICAgICAgICAgKEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIEdzdFBhZCAqIHBhZCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0UGFkVGVtcGxhdGUsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1BBRF9URU1QTEFURV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHBhcmFtc3BlY3MuYyBiL2dzdC9nc3RwYXJhbXNwZWNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MjVlMTguLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHBhcmFtc3BlY3MuYworKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKiBHU3RyZWFtZXIgLSBHUGFyYW1TcGVjcyBmb3Igc29tZSBvZiBvdXIgdHlwZXMKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmdzdHBhcmFtc3BlYwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBHUGFyYW1TcGVjIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYwotICogdG8gR1N0cmVhbWVyCi0gKgotICogR1BhcmFtU3BlYyBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWMgdG8gR1N0cmVhbWVyLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdzdHBhcmFtc3BlY3MuaCIKLQotLyogLS0tIEdzdFBhcmFtU3BlY0ZyYWN0aW9uIC0tLSAqLwotCi1zdGF0aWMgdm9pZAotX2dzdF9wYXJhbV9mcmFjdGlvbl9pbml0IChHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFBhcmFtU3BlY0ZyYWN0aW9uICpmc3BlYyA9IEdTVF9QQVJBTV9TUEVDX0ZSQUNUSU9OIChwc3BlYyk7Ci0KLSAgZnNwZWMtPm1pbl9udW0gPSAwOwotICBmc3BlYy0+bWluX2RlbiA9IDE7Ci0gIGZzcGVjLT5tYXhfbnVtID0gR19NQVhJTlQ7Ci0gIGZzcGVjLT5tYXhfZGVuID0gMTsKLSAgZnNwZWMtPmRlZl9udW0gPSAxOwotICBmc3BlYy0+ZGVmX2RlbiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZ3N0X3BhcmFtX2ZyYWN0aW9uX3NldF9kZWZhdWx0IChHUGFyYW1TcGVjICogcHNwZWMsIEdWYWx1ZSAqIHZhbHVlKQotewotICB2YWx1ZS0+ZGF0YVswXS52X2ludCA9IEdTVF9QQVJBTV9TUEVDX0ZSQUNUSU9OIChwc3BlYyktPmRlZl9udW07Ci0gIHZhbHVlLT5kYXRhWzFdLnZfaW50ID0gR1NUX1BBUkFNX1NQRUNfRlJBQ1RJT04gKHBzcGVjKS0+ZGVmX2RlbjsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fZ3N0X3BhcmFtX2ZyYWN0aW9uX3ZhbGlkYXRlIChHUGFyYW1TcGVjICogcHNwZWMsIEdWYWx1ZSAqIHZhbHVlKQotewotICBHc3RQYXJhbVNwZWNGcmFjdGlvbiAqZnNwZWMgPSBHU1RfUEFSQU1fU1BFQ19GUkFDVElPTiAocHNwZWMpOwotICBnYm9vbGVhbiB3aXRoaW5fcmFuZ2UgPSBGQUxTRTsKLSAgR1ZhbHVlIGZfdGhpcyA9IHsgMCwgfTsKLSAgR1ZhbHVlIGZfbWluID0geyAwLCB9OwotICBHVmFsdWUgZl9tYXggPSB7IDAsIH07Ci0gIGdpbnQgcmVzOwotCi0gIGdfdmFsdWVfaW5pdCAoJmZfdGhpcywgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZl90aGlzLCB2YWx1ZS0+ZGF0YVswXS52X2ludCwgdmFsdWUtPmRhdGFbMV0udl9pbnQpOwotCi0gIGdfdmFsdWVfaW5pdCAoJmZfbWluLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZmX21pbiwgZnNwZWMtPm1pbl9udW0sIGZzcGVjLT5taW5fZGVuKTsKLQotICBnX3ZhbHVlX2luaXQgKCZmX21heCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZl9tYXgsIGZzcGVjLT5tYXhfbnVtLCBmc3BlYy0+bWF4X2Rlbik7Ci0KLSAgcmVzID0gZ3N0X3ZhbHVlX2NvbXBhcmUgKCZmX21pbiwgJmZfdGhpcyk7Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBHU1RfTE9HICgiY29tcGFyaW5nICVkLyVkIHRvICVkLyVkLCByZXN1bHQgPSAlZCIsIGZzcGVjLT5taW5fbnVtLAotICAgICAgZnNwZWMtPm1pbl9kZW4sIHZhbHVlLT5kYXRhWzBdLnZfaW50LCB2YWx1ZS0+ZGF0YVsxXS52X2ludCwgcmVzKTsKLSNlbmRpZgotICBpZiAocmVzICE9IEdTVF9WQUxVRV9MRVNTX1RIQU4gJiYgcmVzICE9IEdTVF9WQUxVRV9FUVVBTCkKLSAgICBnb3RvIG91dDsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgR1NUX0xPRyAoImNvbXBhcmluZyAlZC8lZCB0byAlZC8lZCwgcmVzdWx0ID0gJWQiLCB2YWx1ZS0+ZGF0YVswXS52X2ludCwKLSAgICAgIHZhbHVlLT5kYXRhWzFdLnZfaW50LCBmc3BlYy0+bWF4X251bSwgZnNwZWMtPm1heF9kZW4sIHJlcyk7Ci0jZW5kaWYKLSAgcmVzID0gZ3N0X3ZhbHVlX2NvbXBhcmUgKCZmX3RoaXMsICZmX21heCk7Ci0gIGlmIChyZXMgIT0gR1NUX1ZBTFVFX0xFU1NfVEhBTiAmJiByZXMgIT0gR1NUX1ZBTFVFX0VRVUFMKQotICAgIGdvdG8gb3V0OwotCi0gIHdpdGhpbl9yYW5nZSA9IFRSVUU7Ci0KLW91dDoKLQotICBnX3ZhbHVlX3Vuc2V0ICgmZl9taW4pOwotICBnX3ZhbHVlX3Vuc2V0ICgmZl9tYXgpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZl90aGlzKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgR1NUX0xPRyAoIiVzd2l0aGluIHJhbmdlIiwgKHdpdGhpbl9yYW5nZSkgPyAiIiA6ICJub3QgIik7Ci0jZW5kaWYKLQotICAvKiByZXR1cm4gRkFMU0UgaWYgZXZlcnl0aGluZyBvaywgb3RoZXJ3aXNlIFRSVUUgKi8KLSAgcmV0dXJuICF3aXRoaW5fcmFuZ2U7Ci19Ci0KLXN0YXRpYyBnaW50Ci1fZ3N0X3BhcmFtX2ZyYWN0aW9uX3ZhbHVlc19jbXAgKEdQYXJhbVNwZWMgKiBwc3BlYywgY29uc3QgR1ZhbHVlICogdmFsdWUxLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgZ2ludCByZXM7Ci0KLSAgcmVzID0gZ3N0X3ZhbHVlX2NvbXBhcmUgKHZhbHVlMSwgdmFsdWUyKTsKLQotICBnX2Fzc2VydCAocmVzICE9IEdTVF9WQUxVRV9VTk9SREVSRUQpOwotCi0gIC8qIEdTVF9WQUxVRV9MRVNTX1RIQU4gaXMgLTEsIEVRVUFMIGlzIDAsIGFuZCBHUkVBVEVSX1RIQU4gaXMgMSAqLwotICByZXR1cm4gcmVzOwotfQotCi1HVHlwZQotZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb25fZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSB0eXBlOyAgICAgICAgICAgIC8qIDAgKi8KLQotICAvKiByZWdpc3RlciBHU1RfVFlQRV9QQVJBTV9GUkFDVElPTiAqLwotICBpZiAodHlwZSA9PSAwKSB7Ci0gICAgc3RhdGljIEdQYXJhbVNwZWNUeXBlSW5mbyBwc3BlY19pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RQYXJhbVNwZWNGcmFjdGlvbiksICAgIC8qIGluc3RhbmNlX3NpemUgICAgICovCi0gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5fcHJlYWxsb2NzICAgICAgICovCi0gICAgICBfZ3N0X3BhcmFtX2ZyYWN0aW9uX2luaXQsIC8qIGluc3RhbmNlX2luaXQgICAgICovCi0gICAgICBHX1RZUEVfSU5WQUxJRCwgICAgICAgICAgIC8qIHZhbHVlX3R5cGUgICAgICAgICovCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGZpbmFsaXplICAgICAgICAgICovCi0gICAgICBfZ3N0X3BhcmFtX2ZyYWN0aW9uX3NldF9kZWZhdWx0LCAgLyogdmFsdWVfc2V0X2RlZmF1bHQgKi8KLSAgICAgIF9nc3RfcGFyYW1fZnJhY3Rpb25fdmFsaWRhdGUsICAgICAvKiB2YWx1ZV92YWxpZGF0ZSAgICAqLwotICAgICAgX2dzdF9wYXJhbV9mcmFjdGlvbl92YWx1ZXNfY21wLCAgIC8qIHZhbHVlc19jbXAgICAgICAgICovCi0gICAgfTsKLSAgICBwc3BlY19pbmZvLnZhbHVlX3R5cGUgPSBHU1RfVFlQRV9GUkFDVElPTjsKLSAgICB0eXBlID0gZ19wYXJhbV90eXBlX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhcmFtRnJhY3Rpb24iLCAmcHNwZWNfaW5mbyk7Ci0gIH0KLSAgcmV0dXJuIHR5cGU7Ci19Ci0KLS8qKgotICogZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb246Ci0gKiBAbmFtZTogY2Fub25pY2FsIG5hbWUgb2YgdGhlIHByb3BlcnR5IHNwZWNpZmllZAotICogQG5pY2s6IG5pY2sgbmFtZSBmb3IgdGhlIHByb3BlcnR5IHNwZWNpZmllZAotICogQGJsdXJiOiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc3BlY2lmaWVkCi0gKiBAbWluX251bTogbWluaW11bSB2YWx1ZSAoZnJhY3Rpb24gbnVtZXJhdG9yKQotICogQG1pbl9kZW5vbTogbWluaW11bSB2YWx1ZSAoZnJhY3Rpb24gZGVub21pbmF0b3IpCi0gKiBAbWF4X251bTogbWF4aW11bSB2YWx1ZSAoZnJhY3Rpb24gbnVtZXJhdG9yKQotICogQG1heF9kZW5vbTogbWF4aW11bSB2YWx1ZSAoZnJhY3Rpb24gZGVub21pbmF0b3IpCi0gKiBAZGVmYXVsdF9udW06IGRlZmF1bHQgdmFsdWUgKGZyYWN0aW9uIG51bWVyYXRvcikKLSAqIEBkZWZhdWx0X2Rlbm9tOiBkZWZhdWx0IHZhbHVlIChmcmFjdGlvbiBkZW5vbWluYXRvcikKLSAqIEBmbGFnczogZmxhZ3MgZm9yIHRoZSBwcm9wZXJ0eSBzcGVjaWZpZWQKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBmcmFjdGlvbiBHUGFyYW1TcGVjIGZvciB1c2UgYnkgb2JqZWN0cy9lbGVtZW50cwotICogdGhhdCB3YW50IHRvIGV4cG9zZSBwcm9wZXJ0aWVzIG9mIGZyYWN0aW9uIHR5cGUuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5Ci0gKiB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KCkgaW4gYSBHT2JqZWN0cydzCi0gKiBpbnN0YW5jZV9pbml0IGZ1bmN0aW9uLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXdseSBjcmVhdGVkIHBhcmFtZXRlciBzcGVjaWZpY2F0aW9uCi0gKi8KLUdQYXJhbVNwZWMgKgotZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb24gKGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgZ2NoYXIgKiBuaWNrLAotICAgIGNvbnN0IGdjaGFyICogYmx1cmIsIGdpbnQgbWluX251bSwgZ2ludCBtaW5fZGVub20sIGdpbnQgbWF4X251bSwKLSAgICBnaW50IG1heF9kZW5vbSwgZ2ludCBkZWZhdWx0X251bSwgZ2ludCBkZWZhdWx0X2Rlbm9tLCBHUGFyYW1GbGFncyBmbGFncykKLXsKLSAgR3N0UGFyYW1TcGVjRnJhY3Rpb24gKmZzcGVjOwotICBHUGFyYW1TcGVjICpwc3BlYzsKLSAgR1ZhbHVlIGRlZmF1bHRfdmFsID0geyAwLCB9OwotCi0gIGZzcGVjID0KLSAgICAgIGdfcGFyYW1fc3BlY19pbnRlcm5hbCAoR1NUX1RZUEVfUEFSQU1fRlJBQ1RJT04sIG5hbWUsIG5pY2ssIGJsdXJiLCBmbGFncyk7Ci0KLSAgZnNwZWMtPm1pbl9udW0gPSBtaW5fbnVtOwotICBmc3BlYy0+bWluX2RlbiA9IG1pbl9kZW5vbTsKLSAgZnNwZWMtPm1heF9udW0gPSBtYXhfbnVtOwotICBmc3BlYy0+bWF4X2RlbiA9IG1heF9kZW5vbTsKLSAgZnNwZWMtPmRlZl9udW0gPSBkZWZhdWx0X251bTsKLSAgZnNwZWMtPmRlZl9kZW4gPSBkZWZhdWx0X2Rlbm9tOwotCi0gIHBzcGVjID0gR19QQVJBTV9TUEVDIChmc3BlYyk7Ci0KLSAgLyogY2hlY2sgdGhhdCBtaW4gPD0gZGVmYXVsdCA8PSBtYXggKi8KLSAgZ192YWx1ZV9pbml0ICgmZGVmYXVsdF92YWwsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmRlZmF1bHRfdmFsLCBkZWZhdWx0X251bSwgZGVmYXVsdF9kZW5vbSk7Ci0gIC8qIHZhbGlkYXRlIHJldHVybnMgVFJVRSBpZiB0aGUgdmFsaWRhdGlvbiBmYWlscyAqLwotICBpZiAoX2dzdF9wYXJhbV9mcmFjdGlvbl92YWxpZGF0ZSAocHNwZWMsICZkZWZhdWx0X3ZhbCkpIHsKLSAgICBnX2NyaXRpY2FsICgiR3N0UGFyYW1TcGVjIG9mIHR5cGUgJ2ZyYWN0aW9uJyBmb3IgcHJvcGVydHkgJyVzJyBoYXMgYSAiCi0gICAgICAgICJkZWZhdWx0IHZhbHVlIG9mICVkLyVkLCB3aGljaCBpcyBub3Qgd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlIG9mICIKLSAgICAgICAgIiVkLyVkIHRvICVkLyVkIiwgbmFtZSwgZGVmYXVsdF9udW0sIGRlZmF1bHRfZGVub20sIG1pbl9udW0sCi0gICAgICAgIG1pbl9kZW5vbSwgbWF4X251bSwgbWF4X2Rlbm9tKTsKLSAgICBnX3BhcmFtX3NwZWNfcmVmIChwc3BlYyk7Ci0gICAgZ19wYXJhbV9zcGVjX3NpbmsgKHBzcGVjKTsKLSAgICBnX3BhcmFtX3NwZWNfdW5yZWYgKHBzcGVjKTsKLSAgICBwc3BlYyA9IE5VTEw7Ci0gIH0KLSAgZ192YWx1ZV91bnNldCAoJmRlZmF1bHRfdmFsKTsKLQotICByZXR1cm4gcHNwZWM7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0cGFyYW1zcGVjcy5oIGIvZ3N0L2dzdHBhcmFtc3BlY3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQzNzdkYy4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cGFyYW1zcGVjcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qIEdTdHJlYW1lciAtIEdQYXJhbVNwZWNzIGZvciBzb21lIG9mIG91ciB0eXBlcwotICogQ29weXJpZ2h0IChDKSAyMDA3IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUEFSQU1TUEVDU19IX18KLSNkZWZpbmUgX19HU1RfUEFSQU1TUEVDU19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3R2YWx1ZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qIC0tLSBwYXJhbXNwZWMgZmxhZ3MgKi8KLQotLyoqCi0gKiBHU1RfUEFSQU1fQ09OVFJPTExBQkxFOgotICoKLSAqIFVzZSB0aGlzIGZsYWcgb24gR09iamVjdCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCB0aGV5IGNhbiBtYWtlIHNlbnNlIHRvIGJlLgotICogY29udHJvbGxlZCBvdmVyIHRpbWUuIFRoaXMgaGludCBpcyB1c2VkIGJ5IHRoZSBHc3RDb250cm9sbGVyLgotICovCi0jZGVmaW5lCUdTVF9QQVJBTV9DT05UUk9MTEFCTEUJKDEgPDwgKEdfUEFSQU1fVVNFUl9TSElGVCArIDEpKQotCi0vKioKLSAqIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZOgotICoKLSAqIFVzZSB0aGlzIGZsYWcgb24gR09iamVjdCBwcm9wZXJ0aWVzIG9mIEdzdEVsZW1lbnRzIHRvIGluZGljYXRlIHRoYXQKLSAqIHRoZXkgY2FuIGJlIGNoYW5nZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgUkVBRFkgb3IgbG93ZXIgc3RhdGUuCi0gKi8KLSNkZWZpbmUgR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkgICgxIDw8IChHX1BBUkFNX1VTRVJfU0hJRlQgKyAyKSkKLQotLyoqCi0gKiBHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQ6Ci0gKgotICogVXNlIHRoaXMgZmxhZyBvbiBHT2JqZWN0IHByb3BlcnRpZXMgb2YgR3N0RWxlbWVudHMgdG8gaW5kaWNhdGUgdGhhdAotICogdGhleSBjYW4gYmUgY2hhbmdlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluIHRoZSBQQVVTRUQgb3IgbG93ZXIgc3RhdGUuCi0gKiBUaGlzIGZsYWcgaW1wbGllcyBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWS4KLSAqLwotI2RlZmluZSBHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQgICgxIDw8IChHX1BBUkFNX1VTRVJfU0hJRlQgKyAzKSkKLQotLyoqCi0gKiBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HOgotICoKLSAqIFVzZSB0aGlzIGZsYWcgb24gR09iamVjdCBwcm9wZXJ0aWVzIG9mIEdzdEVsZW1lbnRzIHRvIGluZGljYXRlIHRoYXQKLSAqIHRoZXkgY2FuIGJlIGNoYW5nZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgUExBWUlORyBvciBsb3dlciBzdGF0ZS4KLSAqIFRoaXMgZmxhZyBpbXBsaWVzIEdTVF9QQVJBTV9NVVRBQkxFX1BBVVNFRC4KLSAqLwotI2RlZmluZSBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HICAoMSA8PCAoR19QQVJBTV9VU0VSX1NISUZUICsgNCkpCi0KLS8qKgotICogR1NUX1BBUkFNX1VTRVJfU0hJRlQ6Ci0gKgotICogQml0cyBiYXNlZCBvbiBHU1RfUEFSQU1fVVNFUl9TSElGVCBjYW4gYmUgdXNlZCBieSAzcmQgcGFydHkgYXBwbGljYXRpb25zLgotICovCi0jZGVmaW5lCUdTVF9QQVJBTV9VU0VSX1NISUZUCSgxIDw8IChHX1BBUkFNX1VTRVJfU0hJRlQgKyA4KSkKLQotCi0vKiAtLS0gdHlwZSBtYWNyb3MgLS0tICovCi0KLSNkZWZpbmUgR1NUX1RZUEVfUEFSQU1fRlJBQ1RJT04gICAgICAgICAgIChnc3RfcGFyYW1fc3BlY19mcmFjdGlvbl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0lTX1BBUkFNX1NQRUNfRlJBQ1RJT04ocHNwZWMpIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKHBzcGVjKSwgR1NUX1RZUEVfUEFSQU1fRlJBQ1RJT04pKQotI2RlZmluZSBHU1RfUEFSQU1fU1BFQ19GUkFDVElPTihwc3BlYykgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgocHNwZWMpLCBHU1RfVFlQRV9QQVJBTV9GUkFDVElPTiwgR3N0UGFyYW1TcGVjRnJhY3Rpb24pKQotCi0KLS8qIC0tLSBnZXRfdHlwZSBmdW5jdGlvbnMgLS0tICovCi0KLUdUeXBlICBnc3RfcGFyYW1fc3BlY19mcmFjdGlvbl9nZXRfdHlwZSAodm9pZCk7Ci0KLQotLyogLS0tIHR5cGVkZWZzICYgc3RydWN0dXJlcyAtLS0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBhcmFtU3BlY0ZyYWN0aW9uIEdzdFBhcmFtU3BlY0ZyYWN0aW9uOwotCi0vKioKLSAqIEdzdFBhcmFtU3BlY0ZyYWN0aW9uOgotICogQHBhcmVudF9pbnN0YW5jZTogc3VwZXIgY2xhc3MKLSAqIEBtaW5fbnVtOiBtaW5pbWFsIG51bWVyYXRvcgotICogQG1pbl9kZW46IG1pbmltYWwgZGVub21pbmF0b3IKLSAqIEBtYXhfbnVtOiBtYXhpbWFsIG51bWVyYXRvcgotICogQG1heF9kZW46IG1heGltYWwgZGVub21pbmF0b3IKLSAqIEBkZWZfbnVtOiBkZWZhdWx0IG51bWVyYXRvcgotICogQGRlZl9kZW46IGRlZmF1bHQgZGVub21pbmF0b3IKLSAqCi0gKiBBIEdQYXJhbVNwZWMgZGVyaXZlZCBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyB0aGUgbWV0YSBkYXRhIGZvciBmcmFjdGlvbmFsCi0gKiBwcm9wZXJ0aWVzLgotICovCi1zdHJ1Y3QgX0dzdFBhcmFtU3BlY0ZyYWN0aW9uIHsKLSAgR1BhcmFtU3BlYyAgICBwYXJlbnRfaW5zdGFuY2U7Ci0KLSAgZ2ludCAgICAgICAgICBtaW5fbnVtLCBtaW5fZGVuOwotICBnaW50ICAgICAgICAgIG1heF9udW0sIG1heF9kZW47Ci0gIGdpbnQgICAgICAgICAgZGVmX251bSwgZGVmX2RlbjsKLX07Ci0KLQotLyogLS0tIEdQYXJhbVNwZWMgcHJvdG90eXBlcyAtLS0gKi8KLQotR1BhcmFtU3BlYyAgKiBnc3RfcGFyYW1fc3BlY19mcmFjdGlvbiAoY29uc3QgZ2NoYXIgKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBuaWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBibHVyYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbWluX251bSwgZ2ludCBtaW5fZGVub20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IG1heF9udW0sIGdpbnQgbWF4X2Rlbm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBkZWZhdWx0X251bSwgZ2ludCBkZWZhdWx0X2Rlbm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BhcmFtRmxhZ3MgZmxhZ3MpIEdfR05VQ19NQUxMT0M7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9QQVJBTVNQRUNTX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvZ3N0cGFyc2UuYyBiL2dzdC9nc3RwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjk1NzhlLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RwYXJzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAyIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA4IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogZ3N0cGFyc2UuYzogZ2V0IGEgcGlwZWxpbmUgZnJvbSBhIHRleHQgcGlwZWxpbmUgZGVzY3JpcHRpb24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0cGFyc2UKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogR2V0IGEgcGlwZWxpbmUgZnJvbSBhIHRleHQgcGlwZWxpbmUgZGVzY3JpcHRpb24KLSAqCi0gKiBUaGVzZSBmdW5jdGlvbiBhbGxvdyB0byBjcmVhdGUgYSBwaXBlbGluZSBiYXNlZCBvbiB0aGUgc3ludGF4IHVzZWQgaW4gdGhlCi0gKiBnc3QtbGF1bmNoLTEuMCB1dGlsaXR5IChzZWUgbWFuLXBhZ2UgZm9yIHN5bnRheCBkb2N1bWVudGF0aW9uKS4KLSAqCi0gKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB0YWtlIHNldmVyYWwgbWVhc3VyZXMgdG8gY3JlYXRlCi0gKiBzb21ld2hhdCBkeW5hbWljIHBpcGVsaW5lcy4gRHVlIHRvIHRoYXQgc3VjaCBwaXBlbGluZXMgYXJlIG5vdCBhbHdheXMKLSAqIHJldXNhYmxlIChzZXQgdGhlIHN0YXRlIHRvIE5VTEwgYW5kIGJhY2sgdG8gUExBWUlORykuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RwYXJzZS5oIgotI2luY2x1ZGUgImdzdGVycm9yLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQotI2luY2x1ZGUgInBhcnNlL3R5cGVzLmgiCi0jZW5kaWYKLQotc3RhdGljIEdzdFBhcnNlQ29udGV4dCAqCi1nc3RfcGFyc2VfY29udGV4dF9jb3B5IChjb25zdCBHc3RQYXJzZUNvbnRleHQgKiBjb250ZXh0KQotewotICBHc3RQYXJzZUNvbnRleHQgKnJldCA9IE5VTEw7Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCi0KLSAgcmV0ID0gZ3N0X3BhcnNlX2NvbnRleHRfbmV3ICgpOwotICBpZiAoY29udGV4dCkgewotICAgIEdRdWV1ZSBtaXNzaW5nX2NvcHkgPSBHX1FVRVVFX0lOSVQ7Ci0gICAgR0xpc3QgKmw7Ci0KLSAgICBmb3IgKGwgPSBjb250ZXh0LT5taXNzaW5nX2VsZW1lbnRzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KQotICAgICAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZtaXNzaW5nX2NvcHksIGdfc3RyZHVwICgoY29uc3QgZ2NoYXIgKikgbC0+ZGF0YSkpOwotCi0gICAgcmV0LT5taXNzaW5nX2VsZW1lbnRzID0gbWlzc2luZ19jb3B5LmhlYWQ7Ci0gIH0KLSNlbmRpZgotICByZXR1cm4gcmV0OwotfQotCi1HX0RFRklORV9CT1hFRF9UWVBFIChHc3RQYXJzZUNvbnRleHQsIGdzdF9wYXJzZV9jb250ZXh0LAotICAgIChHQm94ZWRDb3B5RnVuYykgZ3N0X3BhcnNlX2NvbnRleHRfY29weSwKLSAgICAoR0JveGVkRnJlZUZ1bmMpIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUpOwotCi0vKioKLSAqIGdzdF9wYXJzZV9lcnJvcl9xdWFyazoKLSAqCi0gKiBHZXQgdGhlIGVycm9yIHF1YXJrIHVzZWQgYnkgdGhlIHBhcnNpbmcgc3Vic3lzdGVtLgotICoKLSAqIFJldHVybnM6IHRoZSBxdWFyayBvZiB0aGUgcGFyc2UgZXJyb3JzLgotICovCi1HUXVhcmsKLWdzdF9wYXJzZV9lcnJvcl9xdWFyayAodm9pZCkKLXsKLSAgc3RhdGljIEdRdWFyayBxdWFyayA9IDA7Ci0KLSAgaWYgKCFxdWFyaykKLSAgICBxdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZ3N0X3BhcnNlX2Vycm9yIik7Ci0gIHJldHVybiBxdWFyazsKLX0KLQotCi0vKioKLSAqIGdzdF9wYXJzZV9jb250ZXh0X25ldzoKLSAqCi0gKiBBbGxvY2F0ZXMgYSBwYXJzZSBjb250ZXh0IGZvciB1c2Ugd2l0aCBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwoKSBvcgotICogZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCgpLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3bHktYWxsb2NhdGVkIHBhcnNlIGNvbnRleHQuIEZyZWUgd2l0aAotICogICAgIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gKi8KLUdzdFBhcnNlQ29udGV4dCAqCi1nc3RfcGFyc2VfY29udGV4dF9uZXcgKHZvaWQpCi17Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCi0gIEdzdFBhcnNlQ29udGV4dCAqY3R4OwotCi0gIGN0eCA9IGdfc2xpY2VfbmV3IChHc3RQYXJzZUNvbnRleHQpOwotICBjdHgtPm1pc3NpbmdfZWxlbWVudHMgPSBOVUxMOwotCi0gIHJldHVybiBjdHg7Ci0jZWxzZQotICByZXR1cm4gTlVMTDsKLSNlbmRpZgotfQotCi0vKioKLSAqIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWU6Ci0gKiBAY29udGV4dDogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RQYXJzZUNvbnRleHQKLSAqCi0gKiBGcmVlcyBhIHBhcnNlIGNvbnRleHQgcHJldmlvdXNseSBhbGxvY2F0ZWQgd2l0aCBnc3RfcGFyc2VfY29udGV4dF9uZXcoKS4KLSAqLwotdm9pZAotZ3N0X3BhcnNlX2NvbnRleHRfZnJlZSAoR3N0UGFyc2VDb250ZXh0ICogY29udGV4dCkKLXsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfUEFSU0UKLSAgaWYgKGNvbnRleHQpIHsKLSAgICBnX2xpc3RfZm9yZWFjaCAoY29udGV4dC0+bWlzc2luZ19lbGVtZW50cywgKEdGdW5jKSBnX2ZyZWUsIE5VTEwpOwotICAgIGdfbGlzdF9mcmVlIChjb250ZXh0LT5taXNzaW5nX2VsZW1lbnRzKTsKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdFBhcnNlQ29udGV4dCwgY29udGV4dCk7Ci0gIH0KLSNlbmRpZgotfQotCi0vKioKLSAqIGdzdF9wYXJzZV9jb250ZXh0X2dldF9taXNzaW5nX2VsZW1lbnRzOgotICogQGNvbnRleHQ6IGEgI0dzdFBhcnNlQ29udGV4dAotICoKLSAqIFJldHJpZXZlIG1pc3NpbmcgZWxlbWVudHMgZnJvbSBhIHByZXZpb3VzIHJ1biBvZiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwoKQotICogb3IgZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCgpLiBXaWxsIG9ubHkgcmV0dXJuIHJlc3VsdHMgaWYgYW4gZXJyb3IgY29kZQotICogb2YgJUdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQgd2FzIHJldHVybmVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpIChlbGVtZW50LXR5cGUgZ2NoYXIqKTogYQotICogICAgICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgZWxlbWVudCBmYWN0b3J5IG5hbWUgc3RyaW5ncyBvZiBtaXNzaW5nCi0gKiAgICAgZWxlbWVudHMuIEZyZWUgd2l0aCBnX3N0cmZyZWV2KCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICovCi1nY2hhciAqKgotZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHMgKEdzdFBhcnNlQ29udGV4dCAqIGNvbnRleHQpCi17Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCi0gIGdjaGFyICoqYXJyOwotICBHTGlzdCAqbDsKLSAgZ3VpbnQgbGVuLCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb250ZXh0ICE9IE5VTEwsIE5VTEwpOwotCi0gIGxlbiA9IGdfbGlzdF9sZW5ndGggKGNvbnRleHQtPm1pc3NpbmdfZWxlbWVudHMpOwotCi0gIGlmIChHX1VOTElLRUxZIChsZW4gPT0gMCkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgYXJyID0gZ19uZXcgKGdjaGFyICosIGxlbiArIDEpOwotCi0gIGZvciAoaSA9IDAsIGwgPSBjb250ZXh0LT5taXNzaW5nX2VsZW1lbnRzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0LCArK2kpCi0gICAgYXJyW2ldID0gZ19zdHJkdXAgKGwtPmRhdGEpOwotCi0gIGFycltpXSA9IE5VTEw7Ci0KLSAgcmV0dXJuIGFycjsKLSNlbHNlCi0gIHJldHVybiBOVUxMOwotI2VuZGlmCi19Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfUEFSU0UKLXN0YXRpYyBnY2hhciAqCi1fZ3N0X3BhcnNlX2VzY2FwZSAoY29uc3QgZ2NoYXIgKiBzdHIpCi17Ci0gIEdTdHJpbmcgKmdzdHIgPSBOVUxMOwotICBnYm9vbGVhbiBpbl9xdW90ZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0ciAhPSBOVUxMLCBOVUxMKTsKLQotICBnc3RyID0gZ19zdHJpbmdfc2l6ZWRfbmV3IChzdHJsZW4gKHN0cikpOwotCi0gIGluX3F1b3RlcyA9IEZBTFNFOwotCi0gIHdoaWxlICgqc3RyKSB7Ci0gICAgaWYgKCpzdHIgPT0gJyInICYmICghaW5fcXVvdGVzIHx8IChpbl9xdW90ZXMgJiYgKihzdHIgLSAxKSAhPSAnXFwnKSkpCi0gICAgICBpbl9xdW90ZXMgPSAhaW5fcXVvdGVzOwotCi0gICAgaWYgKCpzdHIgPT0gJyAnICYmICFpbl9xdW90ZXMpCi0gICAgICBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0ciwgJ1xcJyk7Ci0KLSAgICBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0ciwgKnN0cik7Ci0gICAgc3RyKys7Ci0gIH0KLQotICByZXR1cm4gZ19zdHJpbmdfZnJlZSAoZ3N0ciwgRkFMU0UpOwotfQotI2VuZGlmIC8qICFHU1RfRElTQUJMRV9QQVJTRSAqLwotCi0vKioKLSAqIGdzdF9wYXJzZV9sYXVuY2h2OgotICogQGFyZ3Y6IChpbikgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIGFyZ3VtZW50cwotICogQGVycm9yOiBwb2ludGVyIHRvIGEgI0dFcnJvcgotICoKLSAqIENyZWF0ZSBhIG5ldyBlbGVtZW50IGJhc2VkIG9uIGNvbW1hbmQgbGluZSBzeW50YXguCi0gKiBAZXJyb3Igd2lsbCBjb250YWluIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb25lb3VzIHBpcGVsaW5lIGlzIHNwZWNpZmllZC4KLSAqIEFuIGVycm9yIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmbG9hdGluZyk6IGEgbmV3IGVsZW1lbnQgb24gc3VjY2VzcyBhbmQgJU5VTEwgb24gZmFpbHVyZS4KLSAqLwotR3N0RWxlbWVudCAqCi1nc3RfcGFyc2VfbGF1bmNodiAoY29uc3QgZ2NoYXIgKiogYXJndiwgR0Vycm9yICoqIGVycm9yKQotewotICByZXR1cm4gZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCAoYXJndiwgTlVMTCwgR1NUX1BBUlNFX0ZMQUdfTk9ORSwgZXJyb3IpOwotfQotCi0vKioKLSAqIGdzdF9wYXJzZV9sYXVuY2h2X2Z1bGw6Ci0gKiBAYXJndjogKGluKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBudWxsLXRlcm1pbmF0ZWQgYXJyYXkgb2YgYXJndW1lbnRzCi0gKiBAY29udGV4dDogKGFsbG93LW5vbmUpOiBhIHBhcnNlIGNvbnRleHQgYWxsb2NhdGVkIHdpdGgKLSAqICAgICBnc3RfcGFyc2VfY29udGV4dF9uZXcoKSwgb3IgJU5VTEwKLSAqIEBmbGFnczogcGFyc2luZyBvcHRpb25zLCBvciAjR1NUX1BBUlNFX0ZMQUdfTk9ORQotICogQGVycm9yOiBwb2ludGVyIHRvIGEgI0dFcnJvciAod2hpY2ggbXVzdCBiZSBpbml0aWFsaXNlZCB0byAlTlVMTCkKLSAqCi0gKiBDcmVhdGUgYSBuZXcgZWxlbWVudCBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3ludGF4LgotICogQGVycm9yIHdpbGwgY29udGFpbiBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGVycm9uZW91cyBwaXBlbGluZSBpcyBzcGVjaWZpZWQuCi0gKiBBbiBlcnJvciBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZmxvYXRpbmcpOiBhIG5ldyBlbGVtZW50IG9uIHN1Y2Nlc3M7IG9uIGZhaWx1cmUsIGVpdGhlciAlTlVMTAotICogICBvciBhIHBhcnRpYWxseS1jb25zdHJ1Y3RlZCBiaW4gb3IgZWxlbWVudCB3aWxsIGJlIHJldHVybmVkIGFuZCBAZXJyb3Igd2lsbAotICogICBiZSBzZXQgKHVubGVzcyB5b3UgcGFzc2VkICNHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMgaW4gQGZsYWdzLCB0aGVuCi0gKiAgICVOVUxMIHdpbGwgYWx3YXlzIGJlIHJldHVybmVkIG9uIGZhaWx1cmUpCi0gKi8KLUdzdEVsZW1lbnQgKgotZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCAoY29uc3QgZ2NoYXIgKiogYXJndiwgR3N0UGFyc2VDb250ZXh0ICogY29udGV4dCwKLSAgICBHc3RQYXJzZUZsYWdzIGZsYWdzLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCi0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdTdHJpbmcgKnN0cjsKLSAgY29uc3QgZ2NoYXIgKiphcmd2cCwgKmFyZzsKLSAgZ2NoYXIgKnRtcDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYXJndiAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVycm9yID09IE5VTEwgfHwgKmVycm9yID09IE5VTEwsIE5VTEwpOwotCi0gIC8qIGxldCdzIGdpdmUgaXQgYSBuaWNlIHNpemUuICovCi0gIHN0ciA9IGdfc3RyaW5nX3NpemVkX25ldyAoMTAyNCk7Ci0KLSAgYXJndnAgPSBhcmd2OwotICB3aGlsZSAoKmFyZ3ZwKSB7Ci0gICAgYXJnID0gKmFyZ3ZwOwotICAgIEdTVF9ERUJVRyAoImVzY2FwaW5nIGFyZ3VtZW50ICVzIiwgYXJnKTsKLSAgICB0bXAgPSBfZ3N0X3BhcnNlX2VzY2FwZSAoYXJnKTsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwgdG1wKTsKLSAgICBnX2ZyZWUgKHRtcCk7Ci0gICAgZ19zdHJpbmdfYXBwZW5kX2MgKHN0ciwgJyAnKTsKLSAgICBhcmd2cCsrOwotICB9Ci0KLSAgZWxlbWVudCA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoc3RyLT5zdHIsIGNvbnRleHQsIGZsYWdzLCBlcnJvcik7Ci0KLSAgZ19zdHJpbmdfZnJlZSAoc3RyLCBUUlVFKTsKLQotICByZXR1cm4gZWxlbWVudDsKLSNlbHNlCi0gIC8qIGdzdF9wYXJzZV9sYXVuY2hfZnVsbCgpIHdpbGwgc2V0IGEgR1NUX0NPUkVfRVJST1JfRElTQUJMRUQgZXJyb3IgZm9yIHVzICovCi0gIHJldHVybiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKCIiLCBOVUxMLCAwLCBlcnJvcik7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBnc3RfcGFyc2VfbGF1bmNoOgotICogQHBpcGVsaW5lX2Rlc2NyaXB0aW9uOiB0aGUgY29tbWFuZCBsaW5lIGRlc2NyaWJpbmcgdGhlIHBpcGVsaW5lCi0gKiBAZXJyb3I6IHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb25lb3VzIHBpcGVsaW5lLgotICoKLSAqIENyZWF0ZSBhIG5ldyBwaXBlbGluZSBiYXNlZCBvbiBjb21tYW5kIGxpbmUgc3ludGF4LgotICogUGxlYXNlIG5vdGUgdGhhdCB5b3UgbWlnaHQgZ2V0IGEgcmV0dXJuIHZhbHVlIHRoYXQgaXMgbm90ICVOVUxMIGV2ZW4gdGhvdWdoCi0gKiB0aGUgQGVycm9yIGlzIHNldC4gSW4gdGhpcyBjYXNlIHRoZXJlIHdhcyBhIHJlY292ZXJhYmxlIHBhcnNpbmcgZXJyb3IgYW5kIHlvdQotICogY2FuIHRyeSB0byBwbGF5IHRoZSBwaXBlbGluZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZmxvYXRpbmcpOiBhIG5ldyBlbGVtZW50IG9uIHN1Y2Nlc3MsICVOVUxMIG9uIGZhaWx1cmUuIElmCi0gKiAgICBtb3JlIHRoYW4gb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkIGJ5IHRoZSBAcGlwZWxpbmVfZGVzY3JpcHRpb24sCi0gKiAgIGFsbCBlbGVtZW50cyBhcmUgcHV0IGludG8gYSAjR3N0UGlwZWxpbmUsIHdoaWNoIHRoYW4gaXMgcmV0dXJuZWQuCi0gKi8KLUdzdEVsZW1lbnQgKgotZ3N0X3BhcnNlX2xhdW5jaCAoY29uc3QgZ2NoYXIgKiBwaXBlbGluZV9kZXNjcmlwdGlvbiwgR0Vycm9yICoqIGVycm9yKQotewotICByZXR1cm4gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsIChwaXBlbGluZV9kZXNjcmlwdGlvbiwgTlVMTCwgR1NUX1BBUlNFX0ZMQUdfTk9ORSwKLSAgICAgIGVycm9yKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGw6Ci0gKiBAcGlwZWxpbmVfZGVzY3JpcHRpb246IHRoZSBjb21tYW5kIGxpbmUgZGVzY3JpYmluZyB0aGUgcGlwZWxpbmUKLSAqIEBjb250ZXh0OiAoYWxsb3ctbm9uZSk6IGEgcGFyc2UgY29udGV4dCBhbGxvY2F0ZWQgd2l0aAotICogICAgICBnc3RfcGFyc2VfY29udGV4dF9uZXcoKSwgb3IgJU5VTEwKLSAqIEBmbGFnczogcGFyc2luZyBvcHRpb25zLCBvciAjR1NUX1BBUlNFX0ZMQUdfTk9ORQotICogQGVycm9yOiB0aGUgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIGFuIGVycm9uZW91cyBwaXBlbGluZS4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgcGlwZWxpbmUgYmFzZWQgb24gY29tbWFuZCBsaW5lIHN5bnRheC4KLSAqIFBsZWFzZSBub3RlIHRoYXQgeW91IG1pZ2h0IGdldCBhIHJldHVybiB2YWx1ZSB0aGF0IGlzIG5vdCAlTlVMTCBldmVuIHRob3VnaAotICogdGhlIEBlcnJvciBpcyBzZXQuIEluIHRoaXMgY2FzZSB0aGVyZSB3YXMgYSByZWNvdmVyYWJsZSBwYXJzaW5nIGVycm9yIGFuZCB5b3UKLSAqIGNhbiB0cnkgdG8gcGxheSB0aGUgcGlwZWxpbmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZsb2F0aW5nKTogYSBuZXcgZWxlbWVudCBvbiBzdWNjZXNzLCAlTlVMTCBvbiBmYWlsdXJlLiBJZgotICogICAgbW9yZSB0aGFuIG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCBieSB0aGUgQHBpcGVsaW5lX2Rlc2NyaXB0aW9uLAotICogICAgYWxsIGVsZW1lbnRzIGFyZSBwdXQgaW50byBhICNHc3RQaXBlbGluZSwgd2hpY2ggdGhlbiBpcyByZXR1cm5lZCAodW5sZXNzCi0gKiAgICB0aGUgR1NUX1BBUlNFX0ZMQUdfUExBQ0VfSU5fQklOIGZsYWcgaXMgc2V0LCBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIHB1dAotICogICAgaW4gYSAjR3N0QmluIGluc3RlYWQpLgotICovCi1Hc3RFbGVtZW50ICoKLWdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoY29uc3QgZ2NoYXIgKiBwaXBlbGluZV9kZXNjcmlwdGlvbiwKLSAgICBHc3RQYXJzZUNvbnRleHQgKiBjb250ZXh0LCBHc3RQYXJzZUZsYWdzIGZsYWdzLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCi0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdFcnJvciAqbXllcnJvciA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBpcGVsaW5lX2Rlc2NyaXB0aW9uICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXJyb3IgPT0gTlVMTCB8fCAqZXJyb3IgPT0gTlVMTCwgTlVMTCk7Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BJUEVMSU5FLCAicGFyc2luZyBwaXBlbGluZSBkZXNjcmlwdGlvbiAnJXMnIiwKLSAgICAgIHBpcGVsaW5lX2Rlc2NyaXB0aW9uKTsKLQotICBlbGVtZW50ID0gcHJpdl9nc3RfcGFyc2VfbGF1bmNoIChwaXBlbGluZV9kZXNjcmlwdGlvbiwgJm15ZXJyb3IsIGNvbnRleHQsCi0gICAgICBmbGFncyk7Ci0KLSAgLyogZG9uJ3QgcmV0dXJuIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBwaXBlbGluZSBpZiBGQVRBTF9FUlJPUlMgd2FzIGdpdmVuICovCi0gIGlmIChHX1VOTElLRUxZIChteWVycm9yICE9IE5VTEwgJiYgZWxlbWVudCAhPSBOVUxMKSkgewotICAgIGlmICgoZmxhZ3MgJiBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMpKSB7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKLSAgICAgIGVsZW1lbnQgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGlmIChteWVycm9yKQotICAgIGdfcHJvcGFnYXRlX2Vycm9yIChlcnJvciwgbXllcnJvcik7Ci0KLSAgcmV0dXJuIGVsZW1lbnQ7Ci0jZWxzZQotICBnY2hhciAqbXNnOwotCi0gIEdTVF9XQVJOSU5HICgiRGlzYWJsZWQgQVBJIGNhbGxlZCIpOwotCi0gIG1zZyA9IGdzdF9lcnJvcl9nZXRfbWVzc2FnZSAoR1NUX0NPUkVfRVJST1IsIEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEKTsKLSAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfQ09SRV9FUlJPUiwgR1NUX0NPUkVfRVJST1JfRElTQUJMRUQsICIlcyIsIG1zZyk7Ci0gIGdfZnJlZSAobXNnKTsKLQotICByZXR1cm4gTlVMTDsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHBhcnNlLmggYi9nc3QvZ3N0cGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmMjhlYi4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKgotICogZ3N0cGFyc2UuaDogZ2V0IGEgcGlwZWxpbmUgZnJvbSBhIHRleHQgcGlwZWxpbmUgZGVzY3JpcHRpb24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1BBUlNFX0hfXwotI2RlZmluZSBfX0dTVF9QQVJTRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotR1F1YXJrIGdzdF9wYXJzZV9lcnJvcl9xdWFyayAodm9pZCk7Ci0vKioKLSAqIEdTVF9QQVJTRV9FUlJPUjoKLSAqCi0gKiBHZXQgYWNjZXNzIHRvIHRoZSBlcnJvciBxdWFyayBvZiB0aGUgcGFyc2Ugc3Vic3lzdGVtLgotICovCi0jZGVmaW5lIEdTVF9QQVJTRV9FUlJPUiBnc3RfcGFyc2VfZXJyb3JfcXVhcmsgKCkKLQotLyogRklYTUUgMi4wOiByZW5hbWUgdG8gR3N0UGFyc2VMYXVuY2hFcnJvciwgdGhpcyBpcyBub3Qgb25seSByZWxhdGVkIHRvCi0gKnBhcnNpbmcgKi8KLS8qKgotICogR3N0UGFyc2VFcnJvcjoKLSAqIEBHU1RfUEFSU0VfRVJST1JfU1lOVEFYOiBBIHN5bnRheCBlcnJvciBvY2N1cnJlZC4KLSAqIEBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5UOiBUaGUgZGVzY3JpcHRpb24gY29udGFpbmVkIGFuIHVua25vd24gZWxlbWVudAotICogQEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX1BST1BFUlRZOiBBbiBlbGVtZW50IGRpZCBub3QgaGF2ZSBhIHNwZWNpZmllZCBwcm9wZXJ0eQotICogQEdTVF9QQVJTRV9FUlJPUl9MSU5LOiBUaGVyZSB3YXMgYW4gZXJyb3IgbGlua2luZyB0d28gcGFkcy4KLSAqIEBHU1RfUEFSU0VfRVJST1JfQ09VTERfTk9UX1NFVF9QUk9QRVJUWTogVGhlcmUgd2FzIGFuIGVycm9yIHNldHRpbmcgYSBwcm9wZXJ0eQotICogQEdTVF9QQVJTRV9FUlJPUl9FTVBUWV9CSU46IEFuIGVtcHR5IGJpbiB3YXMgc3BlY2lmaWVkLgotICogQEdTVF9QQVJTRV9FUlJPUl9FTVBUWTogQW4gZW1wdHkgZGVzY3JpcHRpb24gd2FzIHNwZWNpZmllZAotICogQEdTVF9QQVJTRV9FUlJPUl9ERUxBWUVEX0xJTks6IEEgZGVsYXllZCBsaW5rIGRpZCBub3QgZ2V0IHJlc29sdmVkLgotICoKLSAqIFRoZSBkaWZmZXJlbnQgcGFyc2luZyBlcnJvcnMgdGhhdCBjYW4gb2NjdXIuCi0gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfUEFSU0VfRVJST1JfU1lOVEFYLAotICBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5ULAotICBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9QUk9QRVJUWSwKLSAgR1NUX1BBUlNFX0VSUk9SX0xJTkssCi0gIEdTVF9QQVJTRV9FUlJPUl9DT1VMRF9OT1RfU0VUX1BST1BFUlRZLAotICBHU1RfUEFSU0VfRVJST1JfRU1QVFlfQklOLAotICBHU1RfUEFSU0VfRVJST1JfRU1QVFksCi0gIEdTVF9QQVJTRV9FUlJPUl9ERUxBWUVEX0xJTksKLX0gR3N0UGFyc2VFcnJvcjsKLQotLyoqCi0gKiBHc3RQYXJzZUZsYWdzOgotICogQEdTVF9QQVJTRV9GTEFHX05PTkU6IERvIG5vdCB1c2UgYW55IHNwZWNpYWwgcGFyc2luZyBvcHRpb25zLgotICogQEdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUzogQWx3YXlzIHJldHVybiAlTlVMTCB3aGVuIGFuIGVycm9yIG9jY3VycwotICogICAgIChkZWZhdWx0IGJlaGF2aW91ciBpcyB0byByZXR1cm4gcGFydGlhbGx5IGNvbnN0cnVjdGVkIGJpbnMgb3IgZWxlbWVudHMKLSAqICAgICAgaW4gc29tZSBjYXNlcykKLSAqIEBHU1RfUEFSU0VfRkxBR19OT19TSU5HTEVfRUxFTUVOVF9CSU5TOiBJZiBhIGJpbiBvbmx5IGhhcyBhIHNpbmdsZSBlbGVtZW50LAotICogICAgIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50LgotICogQEdTVF9QQVJTRV9GTEFHX1BMQUNFX0lOX0JJTjogSWYgbW9yZSB0aGFuIG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIGRlc2NyaWJlZAotICogICAgIGJ5IHRoZSBwaXBlbGluZSBkZXNjcmlwdGlvbiBzdHJpbmcsIHB1dCB0aGVtIGluIGEgI0dzdEJpbiBpbnN0ZWFkIG9mIGEKLSAqICAgICAjR3N0UGlwZWxpbmUuIChTaW5jZSAxLjEwKQotICoKLSAqIFBhcnNpbmcgb3B0aW9ucy4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9QQVJTRV9GTEFHX05PTkUgPSAwLAotICBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMgPSAoMSA8PCAwKSwKLSAgR1NUX1BBUlNFX0ZMQUdfTk9fU0lOR0xFX0VMRU1FTlRfQklOUyA9ICgxIDw8IDEpLAotICBHU1RfUEFSU0VfRkxBR19QTEFDRV9JTl9CSU4gPSAoMSA8PCAyKQotfSBHc3RQYXJzZUZsYWdzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1BBUlNFX0NPTlRFWFQgKGdzdF9wYXJzZV9jb250ZXh0X2dldF90eXBlKCkpCi0KLS8qKgotICogR3N0UGFyc2VDb250ZXh0OgotICoKLSAqIE9wYXF1ZSBzdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RQYXJzZUNvbnRleHQgR3N0UGFyc2VDb250ZXh0OwotCi0vKiBjcmVhdGUsIHByb2Nlc3MgYW5kIGZyZWUgYSBwYXJzZSBjb250ZXh0ICovCi0KLUdUeXBlICAgICAgICAgICAgIGdzdF9wYXJzZV9jb250ZXh0X2dldF90eXBlICh2b2lkKTsKLUdzdFBhcnNlQ29udGV4dCAqIGdzdF9wYXJzZV9jb250ZXh0X25ldyAodm9pZCkgR19HTlVDX01BTExPQzsKLQotZ2NoYXIgICAgICAgICAgKiogZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHMgKEdzdFBhcnNlQ29udGV4dCAqIGNvbnRleHQpIEdfR05VQ19NQUxMT0M7Ci0KLXZvaWQgICAgICAgICAgICAgIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUgKEdzdFBhcnNlQ29udGV4dCAqIGNvbnRleHQpOwotCi0KLS8qIHBhcnNlIGZ1bmN0aW9ucyAqLwotCi1Hc3RFbGVtZW50ICAgICAgKiBnc3RfcGFyc2VfbGF1bmNoICAgICAgIChjb25zdCBnY2hhciAgICAgICogcGlwZWxpbmVfZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgKiogZXJyb3IpIEdfR05VQ19NQUxMT0M7Ci0KLUdzdEVsZW1lbnQgICAgICAqIGdzdF9wYXJzZV9sYXVuY2h2ICAgICAgKGNvbnN0IGdjaGFyICAgICAqKiBhcmd2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICoqIGVycm9yKSBHX0dOVUNfTUFMTE9DOwotCi1Hc3RFbGVtZW50ICAgICAgKiBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgIChjb25zdCBnY2hhciAgICAgICogcGlwZWxpbmVfZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYXJzZUNvbnRleHQgICogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhcnNlRmxhZ3MgICAgICBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAqKiBlcnJvcikgR19HTlVDX01BTExPQzsKLQotR3N0RWxlbWVudCAgICAgICogZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbCAoY29uc3QgZ2NoYXIgICAgICoqIGFyZ3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYXJzZUNvbnRleHQgICogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhcnNlRmxhZ3MgICAgICBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAqKiBlcnJvcikgR19HTlVDX01BTExPQzsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RQYXJzZUNvbnRleHQsIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1BBUlNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHBpcGVsaW5lLmMgYi9nc3QvZ3N0cGlwZWxpbmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU0ZmY2ZS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cGlwZWxpbmUuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMTUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDQsMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdHBpcGVsaW5lLmM6IE92ZXJhbGwgcGlwZWxpbmUgbWFuYWdlbWVudCBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHBpcGVsaW5lCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFRvcC1sZXZlbCBiaW4gd2l0aCBjbG9ja2luZyBhbmQgYnVzIG1hbmFnZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eS4KLSAqIEBzZWVfYWxzbzogI0dzdEVsZW1lbnQsICNHc3RCaW4sICNHc3RDbG9jaywgI0dzdEJ1cwotICoKLSAqIEEgI0dzdFBpcGVsaW5lIGlzIGEgc3BlY2lhbCAjR3N0QmluIHVzZWQgYXMgdGhlIHRvcGxldmVsIGNvbnRhaW5lciBmb3IKLSAqIHRoZSBmaWx0ZXIgZ3JhcGguIFRoZSAjR3N0UGlwZWxpbmUgd2lsbCBtYW5hZ2UgdGhlIHNlbGVjdGlvbiBhbmQKLSAqIGRpc3RyaWJ1dGlvbiBvZiBhIGdsb2JhbCAjR3N0Q2xvY2sgYXMgd2VsbCBhcyBwcm92aWRlIGEgI0dzdEJ1cyB0byB0aGUKLSAqIGFwcGxpY2F0aW9uLgotICoKLSAqIGdzdF9waXBlbGluZV9uZXcoKSBpcyB1c2VkIHRvIGNyZWF0ZSBhIHBpcGVsaW5lLiB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoCi0gKiB0aGUgcGlwZWxpbmUsIHVzZSBnc3Rfb2JqZWN0X3VucmVmKCkgdG8gZnJlZSBpdHMgcmVzb3VyY2VzIGluY2x1ZGluZyBhbGwKLSAqIGFkZGVkICNHc3RFbGVtZW50IG9iamVjdHMgKGlmIG5vdCBvdGhlcndpc2UgcmVmZXJlbmNlZCkuCi0gKgotICogRWxlbWVudHMgYXJlIGFkZGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5lIHVzaW5nIHRoZSAjR3N0QmluCi0gKiBtZXRob2RzIGxpa2UgZ3N0X2Jpbl9hZGQoKSBhbmQgZ3N0X2Jpbl9yZW1vdmUoKSAoc2VlICNHc3RCaW4pLgotICoKLSAqIEJlZm9yZSBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlICNHc3RQaXBlbGluZSAoc2VlICNHc3RFbGVtZW50KSBhICNHc3RCdXMKLSAqIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBnc3RfcGlwZWxpbmVfZ2V0X2J1cygpLiBUaGlzIGJ1cyBjYW4gdGhlbiBiZQotICogdXNlZCB0byByZWNlaXZlICNHc3RNZXNzYWdlIGZyb20gdGhlIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZS4KLSAqCi0gKiBCeSBkZWZhdWx0LCBhICNHc3RQaXBlbGluZSB3aWxsIGF1dG9tYXRpY2FsbHkgZmx1c2ggdGhlIHBlbmRpbmcgI0dzdEJ1cwotICogbWVzc2FnZXMgd2hlbiBnb2luZyB0byB0aGUgTlVMTCBzdGF0ZSB0byBlbnN1cmUgdGhhdCBubyBjaXJjdWxhcgotICogcmVmZXJlbmNlcyBleGlzdCB3aGVuIG5vIG1lc3NhZ2VzIGFyZSByZWFkIGZyb20gdGhlICNHc3RCdXMuIFRoaXMKLSAqIGJlaGF2aW91ciBjYW4gYmUgY2hhbmdlZCB3aXRoIGdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMoKS4KLSAqCi0gKiBXaGVuIHRoZSAjR3N0UGlwZWxpbmUgcGVyZm9ybXMgdGhlIFBBVVNFRCB0byBQTEFZSU5HIHN0YXRlIGNoYW5nZSBpdCB3aWxsCi0gKiBzZWxlY3QgYSBjbG9jayBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgY2xvY2sgc2VsZWN0aW9uIGFsZ29yaXRobSB3aWxsIGJ5Ci0gKiBkZWZhdWx0IHNlbGVjdCBhIGNsb2NrIHByb3ZpZGVkIGJ5IGFuIGVsZW1lbnQgdGhhdCBpcyBtb3N0IHVwc3RyZWFtCi0gKiAoY2xvc2VzdCB0byB0aGUgc291cmNlKS4gRm9yIGxpdmUgcGlwZWxpbmVzIChvbmVzIHRoYXQgcmV0dXJuCi0gKiAjR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMIGZyb20gdGhlIGdzdF9lbGVtZW50X3NldF9zdGF0ZSgpIGNhbGwpIHRoaXMKLSAqIHdpbGwgc2VsZWN0IHRoZSBjbG9jayBwcm92aWRlZCBieSB0aGUgbGl2ZSBzb3VyY2UuIEZvciBub3JtYWwgcGlwZWxpbmVzCi0gKiB0aGlzIHdpbGwgc2VsZWN0IGEgY2xvY2sgcHJvdmlkZWQgYnkgdGhlIHNpbmtzIChtb3N0IGxpa2VseSB0aGUgYXVkaW8KLSAqIHNpbmspLiBJZiBubyBlbGVtZW50IHByb3ZpZGVzIGEgY2xvY2ssIGEgZGVmYXVsdCAjR3N0U3lzdGVtQ2xvY2sgaXMgdXNlZC4KLSAqCi0gKiBUaGUgY2xvY2sgc2VsZWN0aW9uIGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIGdzdF9waXBlbGluZV91c2VfY2xvY2soKQotICogbWV0aG9kLCB3aGljaCB3aWxsIGVuZm9yY2UgYSBnaXZlbiBjbG9jayBvbiB0aGUgcGlwZWxpbmUuIFdpdGgKLSAqIGdzdF9waXBlbGluZV9hdXRvX2Nsb2NrKCkgdGhlIGRlZmF1bHQgY2xvY2sgc2VsZWN0aW9uIGFsZ29yaXRobSBjYW4gYmUKLSAqIHJlc3RvcmVkLgotICoKLSAqIEEgI0dzdFBpcGVsaW5lIG1haW50YWlucyBhIHJ1bm5pbmcgdGltZSBmb3IgdGhlIGVsZW1lbnRzLiBUaGUgcnVubmluZwotICogdGltZSBpcyBkZWZpbmVkIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBhbmQKLSAqIHRoZSBiYXNlIHRpbWUuIFdoZW4gdGhlIHBpcGVsaW5lIGdvZXMgdG8gUkVBRFkgb3IgYSBmbHVzaGluZyBzZWVrIGlzCi0gKiBwZXJmb3JtZWQgb24gaXQsIHRoZSBydW5uaW5nIHRpbWUgaXMgcmVzZXQgdG8gMC4gV2hlbiB0aGUgcGlwZWxpbmUgaXMKLSAqIHNldCBmcm9tIFBMQVlJTkcgdG8gUEFVU0VELCB0aGUgY3VycmVudCBjbG9jayB0aW1lIGlzIHNhbXBsZWQgYW5kIHVzZWQgdG8KLSAqIGNvbmZpZ3VyZSB0aGUgYmFzZSB0aW1lIGZvciB0aGUgZWxlbWVudHMgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0Ci0gKiB0byBQTEFZSU5HIGFnYWluLiBUaGUgZWZmZWN0IGlzIHRoYXQgdGhlIHJ1bm5pbmcgdGltZSAoYXMgdGhlIGRpZmZlcmVuY2UKLSAqIGJldHdlZW4gdGhlIGNsb2NrIHRpbWUgYW5kIHRoZSBiYXNlIHRpbWUpIHdpbGwgY291bnQgaG93IG11Y2ggdGltZSB3YXMgc3BlbnQKLSAqIGluIHRoZSBQTEFZSU5HIHN0YXRlLiBUaGlzIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlCi0gKiBnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSgpIG1ldGhvZC4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3RlcnJvci5oIgotI2luY2x1ZGUgImdzdC1pMThuLWxpYi5oIgotCi0jaW5jbHVkZSAiZ3N0cGlwZWxpbmUuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0c3lzdGVtY2xvY2suaCIKLSNpbmNsdWRlICJnc3R1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChwaXBlbGluZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBwaXBlbGluZV9kZWJ1ZwotCi0vKiBQaXBlbGluZSBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9ERUxBWSAgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX0FVVE9fRkxVU0hfQlVTICBUUlVFCi0jZGVmaW5lIERFRkFVTFRfTEFURU5DWSAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfREVMQVksCi0gIFBST1BfQVVUT19GTFVTSF9CVVMsCi0gIFBST1BfTEFURU5DWQotfTsKLQotI2RlZmluZSBHU1RfUElQRUxJTkVfR0VUX1BSSVZBVEUob2JqKSAgXAotICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX1BJUEVMSU5FLCBHc3RQaXBlbGluZVByaXZhdGUpKQotCi1zdHJ1Y3QgX0dzdFBpcGVsaW5lUHJpdmF0ZQotewotICAvKiB3aXRoIExPQ0sgKi8KLSAgZ2Jvb2xlYW4gYXV0b19mbHVzaF9idXM7Ci0KLSAgLyogd2hlbiB3ZSBuZWVkIHRvIHVwZGF0ZSBzdHJlYW1fdGltZSBvciBjbG9jayB3aGVuIGdvaW5nIGJhY2sgdG8KLSAgICogUExBWUlORyovCi0gIEdzdENsb2NrVGltZSBsYXN0X3N0YXJ0X3RpbWU7Ci0gIGdib29sZWFuIHVwZGF0ZV9jbG9jazsKLQotICBHc3RDbG9ja1RpbWUgbGF0ZW5jeTsKLX07Ci0KLQotc3RhdGljIHZvaWQgZ3N0X3BpcGVsaW5lX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3BpcGVsaW5lX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9waXBlbGluZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDbG9jayAqZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZCBnc3RfcGlwZWxpbmVfaGFuZGxlX21lc3NhZ2UgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1lc3NhZ2UpOwotc3RhdGljIGdib29sZWFuIGdzdF9waXBlbGluZV9kb19sYXRlbmN5IChHc3RCaW4gKiBiaW4pOwotCi0vKiBzdGF0aWMgZ3VpbnQgZ3N0X3BpcGVsaW5lX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07ICovCi0KLSNkZWZpbmUgX2RvX2luaXQgXAoteyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChwaXBlbGluZV9kZWJ1ZywgInBpcGVsaW5lIiwgR1NUX0RFQlVHX0JPTEQsIFwKLSAgICAgICJkZWJ1Z2dpbmcgaW5mbyBmb3IgdGhlICdwaXBlbGluZScgY29udGFpbmVyIGVsZW1lbnQiKTsgXAotfQotCi0jZGVmaW5lIGdzdF9waXBlbGluZV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0UGlwZWxpbmUsIGdzdF9waXBlbGluZSwgR1NUX1RZUEVfQklOLCBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcGlwZWxpbmVfY2xhc3NfaW5pdCAoR3N0UGlwZWxpbmVDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHc3RCaW5DbGFzcyAqZ3N0YmluX2NsYXNzID0gR1NUX0JJTl9DTEFTUyAoa2xhc3MpOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0UGlwZWxpbmVQcml2YXRlKSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3BpcGVsaW5lX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3BpcGVsaW5lX2dldF9wcm9wZXJ0eTsKLQotICAvKioKLSAgICogR3N0UGlwZWxpbmU6ZGVsYXk6Ci0gICAqCi0gICAqIFRoZSBleHBlY3RlZCBkZWxheSBuZWVkZWQgZm9yIGVsZW1lbnRzIHRvIHNwaW4gdXAgdG8gdGhlCi0gICAqIFBMQVlJTkcgc3RhdGUgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzLgotICAgKiBzZWUgZ3N0X3BpcGVsaW5lX3NldF9kZWxheSgpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgb3B0aW9uLgotICAgKiovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVMQVksCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgiZGVsYXkiLCAiRGVsYXkiLAotICAgICAgICAgICJFeHBlY3RlZCBkZWxheSBuZWVkZWQgZm9yIGVsZW1lbnRzICIKLSAgICAgICAgICAidG8gc3BpbiB1cCB0byBQTEFZSU5HIGluIG5hbm9zZWNvbmRzIiwgMCwgR19NQVhVSU5UNjQsIERFRkFVTFRfREVMQVksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFBpcGVsaW5lOmF1dG8tZmx1c2gtYnVzOgotICAgKgotICAgKiBXaGV0aGVyIG9yIG5vdCB0byBhdXRvbWF0aWNhbGx5IGZsdXNoIGFsbCBtZXNzYWdlcyBvbiB0aGUKLSAgICogcGlwZWxpbmUncyBidXMgd2hlbiBnb2luZyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUuIFBsZWFzZSBzZWUKLSAgICogZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cygpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgb3B0aW9uLgotICAgKiovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQVVUT19GTFVTSF9CVVMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImF1dG8tZmx1c2gtYnVzIiwgIkF1dG8gRmx1c2ggQnVzIiwKLSAgICAgICAgICAiV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGZsdXNoIHRoZSBwaXBlbGluZSdzIGJ1cyB3aGVuIGdvaW5nICIKLSAgICAgICAgICAiZnJvbSBSRUFEWSBpbnRvIE5VTEwgc3RhdGUiLCBERUZBVUxUX0FVVE9fRkxVU0hfQlVTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RQaXBlbGluZTpsYXRlbmN5OgotICAgKgotICAgKiBMYXRlbmN5IHRvIGNvbmZpZ3VyZSBvbiB0aGUgcGlwZWxpbmUuIFNlZSBnc3RfcGlwZWxpbmVfc2V0X2xhdGVuY3koKS4KLSAgICoKLSAgICogU2luY2U6IDEuNgotICAgKiovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFURU5DWSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJsYXRlbmN5IiwgIkxhdGVuY3kiLAotICAgICAgICAgICJMYXRlbmN5IHRvIGNvbmZpZ3VyZSBvbiB0aGUgcGlwZWxpbmUiLCAwLCBHX01BWFVJTlQ2NCwKLSAgICAgICAgICBERUZBVUxUX0xBVEVOQ1ksIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfcGlwZWxpbmVfZGlzcG9zZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUGlwZWxpbmUgb2JqZWN0IiwKLSAgICAgICJHZW5lcmljL0JpbiIsCi0gICAgICAiQ29tcGxldGUgcGlwZWxpbmUgb2JqZWN0IiwKLSAgICAgICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiwgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUpOwotICBnc3RlbGVtZW50X2NsYXNzLT5wcm92aWRlX2Nsb2NrID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcGlwZWxpbmVfcHJvdmlkZV9jbG9ja19mdW5jKTsKLSAgZ3N0YmluX2NsYXNzLT5oYW5kbGVfbWVzc2FnZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3BpcGVsaW5lX2hhbmRsZV9tZXNzYWdlKTsKLSAgZ3N0YmluX2NsYXNzLT5kb19sYXRlbmN5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9waXBlbGluZV9kb19sYXRlbmN5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9waXBlbGluZV9pbml0IChHc3RQaXBlbGluZSAqIHBpcGVsaW5lKQotewotICBHc3RCdXMgKmJ1czsKLQotICBwaXBlbGluZS0+cHJpdiA9IEdTVF9QSVBFTElORV9HRVRfUFJJVkFURSAocGlwZWxpbmUpOwotCi0gIC8qIHNldCBkZWZhdWx0IHByb3BlcnR5IHZhbHVlcyAqLwotICBwaXBlbGluZS0+cHJpdi0+YXV0b19mbHVzaF9idXMgPSBERUZBVUxUX0FVVE9fRkxVU0hfQlVTOwotICBwaXBlbGluZS0+ZGVsYXkgPSBERUZBVUxUX0RFTEFZOwotICBwaXBlbGluZS0+cHJpdi0+bGF0ZW5jeSA9IERFRkFVTFRfTEFURU5DWTsKLQotICAvKiBjcmVhdGUgYW5kIHNldCBhIGRlZmF1bHQgYnVzICovCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotI2lmIDAKLSAgLyogRklYTUUsIGRpc2FibGVkIGZvciAwLjEwLjUgcmVsZWFzZSBhcyBpdCBjYXVzZWQgdG8gbWFueSByZWdyZXNzaW9ucyAqLwotICAvKiBTdGFydCBvdXIgYnVzIGluIGZsdXNoaW5nIGlmIGFwcHJvcHJpYXRlICovCi0gIGlmIChwaXBlbGluZS0+cHJpdi0+YXV0b19mbHVzaF9idXMpCi0gICAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0jZW5kaWYKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzIChHU1RfRUxFTUVOVF9DQVNUIChwaXBlbGluZSksIGJ1cyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAic2V0IGJ1cyAlIiBHU1RfUFRSX0ZPUk1BVCAiIG9uIHBpcGVsaW5lIiwgYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9waXBlbGluZV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RQaXBlbGluZSAqcGlwZWxpbmUgPSBHU1RfUElQRUxJTkUgKG9iamVjdCk7Ci0gIEdzdENsb2NrICoqY2xvY2tfcCA9ICZwaXBlbGluZS0+Zml4ZWRfY2xvY2s7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUkVGQ09VTlRJTkcsIHBpcGVsaW5lLCAiJXAgZGlzcG9zZSIsIHBpcGVsaW5lKTsKLQotICAvKiBjbGVhciBhbmQgdW5yZWYgYW55IGZpeGVkIGNsb2NrICovCi0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgY2xvY2tfcCwgTlVMTCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcGlwZWxpbmVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFBpcGVsaW5lICpwaXBlbGluZSA9IEdTVF9QSVBFTElORSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVMQVk6Ci0gICAgICBnc3RfcGlwZWxpbmVfc2V0X2RlbGF5IChwaXBlbGluZSwgZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FVVE9fRkxVU0hfQlVTOgotICAgICAgZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cyAocGlwZWxpbmUsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTEFURU5DWToKLSAgICAgIGdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeSAocGlwZWxpbmUsIGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9waXBlbGluZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UGlwZWxpbmUgKnBpcGVsaW5lID0gR1NUX1BJUEVMSU5FIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9ERUxBWToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGdzdF9waXBlbGluZV9nZXRfZGVsYXkgKHBpcGVsaW5lKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT19GTFVTSF9CVVM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cyAocGlwZWxpbmUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MQVRFTkNZOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgZ3N0X3BpcGVsaW5lX2dldF9sYXRlbmN5IChwaXBlbGluZSkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKiBzZXQgdGhlIHN0YXJ0X3RpbWUgdG8gMCwgdGhpcyB3aWxsIGNhdXNlIHVzIHRvIHNlbGVjdCBhIG5ldyBiYXNlX3RpbWUgYW5kCi0gKiBtYWtlIHRoZSBydW5uaW5nX3RpbWUgc3RhcnQgZnJvbSAwIGFnYWluLiAqLwotc3RhdGljIHZvaWQKLXJlc2V0X3N0YXJ0X3RpbWUgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUsIEdzdENsb2NrVGltZSBzdGFydF90aW1lKQotewotICBHU1RfT0JKRUNUX0xPQ0sgKHBpcGVsaW5lKTsKLSAgaWYgKEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKHBpcGVsaW5lKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGlwZWxpbmUsICJyZXNldCBzdGFydF90aW1lIHRvIDAiKTsKLSAgICBHU1RfRUxFTUVOVF9TVEFSVF9USU1FIChwaXBlbGluZSkgPSBzdGFydF90aW1lOwotICAgIHBpcGVsaW5lLT5wcml2LT5sYXN0X3N0YXJ0X3RpbWUgPSAtMTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwaXBlbGluZSwgImFwcGxpY2F0aW9uIGFza2VkIHRvIG5vdCByZXNldCBzdHJlYW1fdGltZSIpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7Ci19Ci0KLS8qKgotICogZ3N0X3BpcGVsaW5lX25ldzoKLSAqIEBuYW1lOiAoYWxsb3ctbm9uZSk6IG5hbWUgb2YgbmV3IHBpcGVsaW5lCi0gKgotICogQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZsb2F0aW5nKTogbmV3bHkgY3JlYXRlZCBHc3RQaXBlbGluZQotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdEVsZW1lbnQgKgotZ3N0X3BpcGVsaW5lX25ldyAoY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBuYW1lKTsKLX0KLQotLyogdGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBwaXBlbGluZSBhbmQgc3RvcmUgdGhpcyBhcyB0aGUKLSAqIGVsZW1lbnQgc3RhcnRfdGltZS4gVGhpcyBpcyB0aGUgdGltZSB3ZSB3aWxsIHNldCBhcyB0aGUgcnVubmluZ190aW1lIG9mIHRoZQotICogcGlwZWxpbmUgd2hlbiB3ZSBnbyB0byBQTEFZSU5HIG5leHQuICovCi1zdGF0aWMgdm9pZAotcGlwZWxpbmVfdXBkYXRlX3N0YXJ0X3RpbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RQaXBlbGluZSAqcGlwZWxpbmUgPSBHU1RfUElQRUxJTkVfQ0FTVCAoZWxlbWVudCk7Ci0gIEdzdENsb2NrICpjbG9jazsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICBpZiAoKGNsb2NrID0gZWxlbWVudC0+Y2xvY2spKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIG5vdzsKLQotICAgIGdzdF9vYmplY3RfcmVmIChjbG9jayk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gICAgLyogY2FsY3VsYXRlIHRoZSB0aW1lIHdoZW4gd2Ugc3RvcHBlZCAqLwotICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gICAgLyogc3RvcmUgdGhlIGN1cnJlbnQgcnVubmluZyB0aW1lICovCi0gICAgaWYgKEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKHBpcGVsaW5lKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICBpZiAobm93ICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICAgIEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKHBpcGVsaW5lKSA9IG5vdyAtIGVsZW1lbnQtPmJhc2VfdGltZTsKLSAgICAgIGVsc2UKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbGVtZW50LAotICAgICAgICAgICAgIkNsb2NrICVzIHJldHVybmVkIGludmFsaWQgdGltZSwgY2FuJ3QgY2FsY3VsYXRlICIKLSAgICAgICAgICAgICJydW5uaW5nX3RpbWUgd2hlbiBnb2luZyB0byB0aGUgUEFVU0VEIHN0YXRlIiwKLSAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKTsKLQotICAgICAgLyogd2Ugd2VudCB0byBQQVVTRUQsIHdoZW4gZ29pbmcgdG8gUExBWUlORyBzZWxlY3QgY2xvY2sgYW5kIG5ldwotICAgICAgICogYmFzZV90aW1lICovCi0gICAgICBwaXBlbGluZS0+cHJpdi0+dXBkYXRlX2Nsb2NrID0gVFJVRTsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwKLSAgICAgICAgInN0YXJ0X3RpbWU9JSIgR1NUX1RJTUVfRk9STUFUICIsIG5vdz0lIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiwgYmFzZV90aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAocGlwZWxpbmUpKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAobm93KSwgR1NUX1RJTUVfQVJHUyAoZWxlbWVudC0+YmFzZV90aW1lKSk7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotfQotCi0vKiBNVCBzYWZlICovCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9waXBlbGluZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0gIEdzdFBpcGVsaW5lICpwaXBlbGluZSA9IEdTVF9QSVBFTElORV9DQVNUIChlbGVtZW50KTsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgICAgIGlmIChlbGVtZW50LT5idXMpCi0gICAgICAgIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChlbGVtZW50LT5idXMsIEZBTFNFKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICAgICAgcGlwZWxpbmUtPnByaXYtPnVwZGF0ZV9jbG9jayA9IFRSVUU7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgICAgIC8qIFJFQURZIHRvIFBBVVNFRCBzdGFydHMgcnVubmluZ190aW1lIGZyb20gMCAqLwotICAgICAgcmVzZXRfc3RhcnRfdGltZSAocGlwZWxpbmUsIDApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgIHsKLSAgICAgIEdzdENsb2NrVGltZSBub3csIHN0YXJ0X3RpbWUsIGxhc3Rfc3RhcnRfdGltZSwgZGVsYXk7Ci0gICAgICBnYm9vbGVhbiB1cGRhdGVfY2xvY2s7Ci0gICAgICBHc3RDbG9jayAqY3VyX2Nsb2NrOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAic2VsZWN0aW5nIGNsb2NrIGFuZCBiYXNlX3RpbWUiKTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgICAgIGN1cl9jbG9jayA9IGVsZW1lbnQtPmNsb2NrOwotICAgICAgaWYgKGN1cl9jbG9jaykKLSAgICAgICAgZ3N0X29iamVjdF9yZWYgKGN1cl9jbG9jayk7Ci0gICAgICAvKiBnZXQgdGhlIGRlc2lyZWQgcnVubmluZ190aW1lIG9mIHRoZSBmaXJzdCBidWZmZXIgYWthIHRoZSBzdGFydF90aW1lICovCi0gICAgICBzdGFydF90aW1lID0gR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAocGlwZWxpbmUpOwotICAgICAgbGFzdF9zdGFydF90aW1lID0gcGlwZWxpbmUtPnByaXYtPmxhc3Rfc3RhcnRfdGltZTsKLSAgICAgIHBpcGVsaW5lLT5wcml2LT5sYXN0X3N0YXJ0X3RpbWUgPSBzdGFydF90aW1lOwotICAgICAgLyogc2VlIGlmIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjbG9jayAqLwotICAgICAgdXBkYXRlX2Nsb2NrID0gcGlwZWxpbmUtPnByaXYtPnVwZGF0ZV9jbG9jazsKLSAgICAgIHBpcGVsaW5lLT5wcml2LT51cGRhdGVfY2xvY2sgPSBGQUxTRTsKLSAgICAgIGRlbGF5ID0gcGlwZWxpbmUtPmRlbGF5OwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gICAgICAvKiBydW5uaW5nIHRpbWUgY2hhbmdlZCwgZWl0aGVyIHdpdGggYSBQQVVTRUQgb3IgYSBmbHVzaCwgd2UgbmVlZCB0byBjaGVjawotICAgICAgICogaWYgdGhlcmUgaXMgYSBuZXcgY2xvY2sgJiB1cGRhdGUgdGhlIGJhc2UgdGltZSAqLwotICAgICAgLyogb25seSBkbyB0aGlzIGZvciB0b3AtbGV2ZWwsIGhvd2V2ZXIgKi8KLSAgICAgIGlmIChHU1RfT0JKRUNUX1BBUkVOVCAoZWxlbWVudCkgPT0gTlVMTCAmJgotICAgICAgICAgICh1cGRhdGVfY2xvY2sgfHwgbGFzdF9zdGFydF90aW1lICE9IHN0YXJ0X3RpbWUpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAiTmVlZCB0byB1cGRhdGUgc3RhcnRfdGltZSIpOwotCi0gICAgICAgIC8qIHdoZW4gZ29pbmcgdG8gUExBWUlORywgc2VsZWN0IGEgY2xvY2sgd2hlbiBuZWVkZWQuIElmIHdlIGp1c3QgZ290Ci0gICAgICAgICAqIGZsdXNoZWQsIHdlIGRvbid0IHJlc2VsZWN0IHRoZSBjbG9jay4gKi8KLSAgICAgICAgaWYgKHVwZGF0ZV9jbG9jaykgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAiTmVlZCB0byB1cGRhdGUgY2xvY2suIik7Ci0gICAgICAgICAgY2xvY2sgPSBnc3RfZWxlbWVudF9wcm92aWRlX2Nsb2NrIChlbGVtZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwaXBlbGluZSwKLSAgICAgICAgICAgICAgIkRvbid0IG5lZWQgdG8gdXBkYXRlIGNsb2NrLCB1c2luZyBvbGQgY2xvY2suIik7Ci0gICAgICAgICAgLyogb25seSB0cnkgdG8gcmVmIGlmIGN1cl9jbG9jayBpcyBub3QgTlVMTCAqLwotICAgICAgICAgIGlmIChjdXJfY2xvY2spCi0gICAgICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoY3VyX2Nsb2NrKTsKLSAgICAgICAgICBjbG9jayA9IGN1cl9jbG9jazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjbG9jaykgewotICAgICAgICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAibm8gY2xvY2ssIHVzaW5nIGJhc2UgdGltZSBvZiBOT05FIik7Ci0gICAgICAgICAgbm93ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjbG9jayAhPSBjdXJfY2xvY2spIHsKLSAgICAgICAgICAvKiBub3cgZGlzdHJpYnV0ZSB0aGUgY2xvY2sgKHdoaWNoIGNvdWxkIGJlIE5VTEwpLiBJZiBzb21lCi0gICAgICAgICAgICogZWxlbWVudCByZWZ1c2VzIHRoZSBjbG9jaywgdGhpcyB3aWxsIHJldHVybiBGQUxTRSBhbmQKLSAgICAgICAgICAgKiB3ZSBlZmZlY3RpdmVseSBmYWlsIHRoZSBzdGF0ZSBjaGFuZ2UuICovCi0gICAgICAgICAgaWYgKCFnc3RfZWxlbWVudF9zZXRfY2xvY2sgKGVsZW1lbnQsIGNsb2NrKSkKLSAgICAgICAgICAgIGdvdG8gaW52YWxpZF9jbG9jazsKLQotICAgICAgICAgIC8qIGlmIHdlIHNlbGVjdGVkIGFuZCBkaXN0cmlidXRlZCBhIG5ldyBjbG9jaywgbGV0IHRoZSBhcHAKLSAgICAgICAgICAgKiBrbm93IGFib3V0IGl0ICovCi0gICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LAotICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfbmV3X2Nsb2NrIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLCBjbG9jaykpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNsb2NrKQotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICAgICAgICBpZiAoc3RhcnRfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmIG5vdyAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICAgICAgR3N0Q2xvY2tUaW1lIG5ld19iYXNlX3RpbWUgPSBub3cgLSBzdGFydF90aW1lICsgZGVsYXk7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwKLSAgICAgICAgICAgICAgInN0YXJ0X3RpbWU9JSIgR1NUX1RJTUVfRk9STUFUICIsIG5vdz0lIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAgICAgIiwgYmFzZV90aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3RhcnRfdGltZSksIEdTVF9USU1FX0FSR1MgKG5vdyksCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG5ld19iYXNlX3RpbWUpKTsKLQotICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9iYXNlX3RpbWUgKGVsZW1lbnQsIG5ld19iYXNlX3RpbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLAotICAgICAgICAgICAgICAiTk9UIGFkanVzdGluZyBiYXNlX3RpbWUgYmVjYXVzZSBzdGFydF90aW1lIGlzIE5PTkUiKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGlwZWxpbmUsCi0gICAgICAgICAgICAiTk9UIGFkanVzdGluZyBiYXNlX3RpbWUgYmVjYXVzZSB3ZSBzZWxlY3RlZCBvbmUgYmVmb3JlIik7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjdXJfY2xvY2spCi0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGN1cl9jbG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgIHsKLSAgICAgIC8qIHdlIHRha2UgYSBzdGFydF90aW1lIHNuYXBzaG90IGJlZm9yZSBjYWxsaW5nIHRoZSBjaGlsZHJlbiBzdGF0ZSBjaGFuZ2VzCi0gICAgICAgKiBzbyB0aGF0IHRoZXkga25vdyBhYm91dCB3aGVuIHRoZSBwaXBlbGluZSBQQVVTRUQuICovCi0gICAgICBwaXBlbGluZV91cGRhdGVfc3RhcnRfdGltZSAoZWxlbWVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIHJlc2V0X3N0YXJ0X3RpbWUgKHBpcGVsaW5lLCAwKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXN1bHQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgewotICAgICAgLyogVGFrZSBhIG5ldyBzbmFwc2hvdCBvZiB0aGUgc3RhcnRfdGltZSBhZnRlciBjYWxsaW5nIHRoZSBzdGF0ZSBjaGFuZ2Ugb24KLSAgICAgICAqIGFsbCBjaGlsZHJlbi4gVGhpcyB3aWxsIGJlIHRoZSBydW5uaW5nX3RpbWUgb2YgdGhlIHBpcGVsaW5lIHdoZW4gd2UgZ28KLSAgICAgICAqIGJhY2sgdG8gUExBWUlORyAqLwotICAgICAgcGlwZWxpbmVfdXBkYXRlX3N0YXJ0X3RpbWUgKGVsZW1lbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICB7Ci0gICAgICBHc3RCdXMgKmJ1czsKLSAgICAgIGdib29sZWFuIGF1dG9fZmx1c2g7Ci0KLSAgICAgIC8qIGdyYWIgc29tZSBzdHVmZiBiZWZvcmUgd2UgcmVsZWFzZSB0aGUgbG9jayB0byBmbHVzaCBvdXQgdGhlIGJ1cyAqLwotICAgICAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgICAgIGlmICgoYnVzID0gZWxlbWVudC0+YnVzKSkKLSAgICAgICAgZ3N0X29iamVjdF9yZWYgKGJ1cyk7Ci0gICAgICBhdXRvX2ZsdXNoID0gcGlwZWxpbmUtPnByaXYtPmF1dG9fZmx1c2hfYnVzOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotCi0gICAgICBpZiAoYnVzKSB7Ci0gICAgICAgIGlmIChhdXRvX2ZsdXNoKSB7Ci0gICAgICAgICAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAibm90IGZsdXNoaW5nIGJ1cywgYXV0by1mbHVzaGluZyBkaXNhYmxlZCIpOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfY2xvY2s6Ci0gIHsKLSAgICAvKiB3ZSBnZW5lcmF0ZSB0aGlzIGVycm9yIHdoZW4gdGhlIHNlbGVjdGVkIGNsb2NrIHdhcyBub3QKLSAgICAgKiBhY2NlcHRlZCBieSBzb21lIGVsZW1lbnQgKi8KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocGlwZWxpbmUsIENPUkUsIENMT0NLLAotICAgICAgICAoXygiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIikpLAotICAgICAgICAoIlBpcGVsaW5lIGNhbm5vdCBvcGVyYXRlIHdpdGggc2VsZWN0ZWQgY2xvY2siKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGlwZWxpbmUsCi0gICAgICAgICJQaXBlbGluZSBjYW5ub3Qgb3BlcmF0ZSB3aXRoIHNlbGVjdGVkIGNsb2NrICVwIiwgY2xvY2spOwotICAgIGlmIChjbG9jaykKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICB9Ci19Ci0KLS8qIGludGVyY2VwdCB0aGUgYnVzIG1lc3NhZ2VzIGZyb20gb3VyIGNoaWxkcmVuLiBXZSB3YXRjaCBmb3IgdGhlIEFTWU5DX1NUQVJUCi0gKiBtZXNzYWdlIHdpdGggaXMgcG9zdGVkIGJ5IHRoZSBlbGVtZW50cyAoc2lua3MpIHRoYXQgcmVxdWlyZSBhIHJlc2V0IG9mIHRoZQotICogcnVubmluZ190aW1lIGFmdGVyIGEgZmx1c2guIEFTWU5DX1NUQVJUIGFsc28gYnJpbmdzIHRoZSBwaXBlbGluZSBiYWNrIGludG8KLSAqIHRoZSBQQVVTRUQsIHBlbmRpbmcgUEFVU0VEIHN0YXRlLiBXaGVuIHRoZSBBU1lOQ19ET05FIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgdGhlCi0gKiBwaXBlbGluZSB3aWxsIHJlZGlzdHJpYnV0ZSB0aGUgbmV3IGJhc2VfdGltZSBhbmQgd2lsbCBicmluZyB0aGUgZWxlbWVudHMgYmFjawotICogdG8gdGhlIGRlc2lyZWQgc3RhdGUgb2YgdGhlIHBpcGVsaW5lLiAqLwotc3RhdGljIHZvaWQKLWdzdF9waXBlbGluZV9oYW5kbGVfbWVzc2FnZSAoR3N0QmluICogYmluLCBHc3RNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgR3N0UGlwZWxpbmUgKnBpcGVsaW5lID0gR1NUX1BJUEVMSU5FX0NBU1QgKGJpbik7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfUkVTRVRfVElNRToKLSAgICB7Ci0gICAgICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9yZXNldF90aW1lIChtZXNzYWdlLCAmcnVubmluZ190aW1lKTsKLQotICAgICAgLyogcmVzZXQgb3VyIHJ1bm5pbmcgdGltZSBpZiB3ZSBuZWVkIHRvIGRpc3RyaWJ1dGUgYSBuZXcgYmFzZV90aW1lIHRvIHRoZQotICAgICAgICogY2hpbGRyZW4uICovCi0gICAgICByZXNldF9zdGFydF90aW1lIChwaXBlbGluZSwgcnVubmluZ190aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q6Ci0gICAgewotICAgICAgR3N0Q2xvY2sgKmNsb2NrOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19sb3N0IChtZXNzYWdlLCAmY2xvY2spOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gICAgICBpZiAoY2xvY2sgPT0gR1NUX0VMRU1FTlRfQ0FTVCAoYmluKS0+Y2xvY2spIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiVXNlZCBjbG9jayAnJXMnIGdvdCBsb3N0IiwKLSAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKTsKLSAgICAgICAgcGlwZWxpbmUtPnByaXYtPnVwZGF0ZV9jbG9jayA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdTVF9CSU5fQ0xBU1MgKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9waXBlbGluZV9kb19sYXRlbmN5IChHc3RCaW4gKiBiaW4pCi17Ci0gIEdzdFBpcGVsaW5lICpwaXBlbGluZSA9IEdTVF9QSVBFTElORSAoYmluKTsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RDbG9ja1RpbWUgbGF0ZW5jeTsKLSAgR3N0Q2xvY2tUaW1lIG1pbl9sYXRlbmN5LCBtYXhfbGF0ZW5jeTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGlwZWxpbmUpOwotICBsYXRlbmN5ID0gcGlwZWxpbmUtPnByaXYtPmxhdGVuY3k7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7Ci0KLSAgaWYgKGxhdGVuY3kgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICByZXR1cm4gR1NUX0JJTl9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZG9fbGF0ZW5jeSAoYmluKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwaXBlbGluZSwgInF1ZXJ5aW5nIGxhdGVuY3kiKTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfbGF0ZW5jeSAoKTsKLSAgaWYgKChyZXMgPSBnc3RfZWxlbWVudF9xdWVyeSAoR1NUX0VMRU1FTlRfQ0FTVCAocGlwZWxpbmUpLCBxdWVyeSkpKSB7Ci0gICAgZ2Jvb2xlYW4gbGl2ZTsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5IChxdWVyeSwgJmxpdmUsICZtaW5fbGF0ZW5jeSwgJm1heF9sYXRlbmN5KTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLAotICAgICAgICAiZ290IG1pbiBsYXRlbmN5ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBtYXggbGF0ZW5jeSAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgbGl2ZSAlZCIsIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuY3kpLCBsaXZlKTsKLQotICAgIGlmIChtYXhfbGF0ZW5jeSA8IG1pbl9sYXRlbmN5KSB7Ci0gICAgICAvKiB0aGlzIGlzIGFuIGltcG9zc2libGUgc2l0dWF0aW9uLCBzb21lIHBhcnRzIG9mIHRoZSBwaXBlbGluZSBtaWdodCBub3QKLSAgICAgICAqIHdvcmsgY29ycmVjdGx5LiBXZSBwb3N0IGEgd2FybmluZyBmb3Igbm93LiAqLwotICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAocGlwZWxpbmUsIENPUkUsIENMT0NLLCAoTlVMTCksCi0gICAgICAgICAgKCJJbXBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBsYXRlbmN5OiBtYXggJSIgR1NUX1RJTUVfRk9STUFUICIgPCBtaW4gJSIKLSAgICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIuIEFkZCBxdWV1ZXMgb3Igb3RoZXIgYnVmZmVyaW5nIGVsZW1lbnRzLiIsCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1heF9sYXRlbmN5KSwgR1NUX1RJTUVfQVJHUyAobWluX2xhdGVuY3kpKSk7Ci0gICAgfQotCi0gICAgaWYgKGxhdGVuY3kgPCBtaW5fbGF0ZW5jeSkgewotICAgICAgLyogVGhpcyBpcyBhIHByb2JsZW1hdGljIHNpdHVhdGlvbiBhcyB3ZSB3aWxsIG1vc3QgbGlrZWx5IGRyb3AgbG90cyBvZgotICAgICAgICogZGF0YSBpZiB3ZSBjb25maWd1cmUgYSB0b28gbG93IGxhdGVuY3kgKi8KLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHBpcGVsaW5lLCBDT1JFLCBDTE9DSywgKE5VTEwpLAotICAgICAgICAgICgiQ29uZmlndXJlZCBsYXRlbmN5IGlzIGxvd2VyIHRoYW4gZGV0ZWN0ZWQgbWluaW11bSBsYXRlbmN5OiBjb25maWd1cmVkICUiCi0gICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIDwgbWluICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSksIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiB0aGlzIGlzIG5vdCBhIHJlYWwgcHJvYmxlbSwgd2UganVzdCBkb24ndCBjb25maWd1cmUgYW55IGxhdGVuY3kuICovCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwaXBlbGluZSwgImZhaWxlZCB0byBxdWVyeSBsYXRlbmN5Iik7Ci0gIH0KLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLQotICAvKiBjb25maWd1cmUgbGF0ZW5jeSBvbiBlbGVtZW50cyAqLwotICByZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoR1NUX0VMRU1FTlRfQ0FTVCAocGlwZWxpbmUpLAotICAgICAgZ3N0X2V2ZW50X25ld19sYXRlbmN5IChsYXRlbmN5KSk7Ci0gIGlmIChyZXMpIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHBpcGVsaW5lLCAiY29uZmlndXJlZCBsYXRlbmN5IG9mICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSkpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGlwZWxpbmUsCi0gICAgICAgICJkaWQgbm90IHJlYWxseSBjb25maWd1cmUgbGF0ZW5jeSBvZiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGxhdGVuY3kpKTsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X3BpcGVsaW5lX2dldF9idXM6Ci0gKiBAcGlwZWxpbmU6IGEgI0dzdFBpcGVsaW5lCi0gKgotICogR2V0cyB0aGUgI0dzdEJ1cyBvZiBAcGlwZWxpbmUuIFRoZSBidXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byByZWNlaXZlCi0gKiAjR3N0TWVzc2FnZSBwYWNrZXRzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVzLCB1bnJlZiBhZnRlciB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RCdXMgKgotZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUpCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9nZXRfYnVzIChHU1RfRUxFTUVOVF9DQVNUIChwaXBlbGluZSkpOwotfQotCi1zdGF0aWMgR3N0Q2xvY2sgKgotZ3N0X3BpcGVsaW5lX3Byb3ZpZGVfY2xvY2tfZnVuYyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdENsb2NrICpjbG9jayA9IE5VTEw7Ci0gIEdzdFBpcGVsaW5lICpwaXBlbGluZSA9IEdTVF9QSVBFTElORSAoZWxlbWVudCk7Ci0KLSAgLyogaWYgd2UgaGF2ZSBhIGZpeGVkIGNsb2NrLCB1c2UgdGhhdCBvbmUgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7Ci0gIGlmIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwaXBlbGluZSwgR1NUX1BJUEVMSU5FX0ZMQUdfRklYRURfQ0xPQ0spKSB7Ci0gICAgY2xvY2sgPSBwaXBlbGluZS0+Zml4ZWRfY2xvY2s7Ci0gICAgaWYgKGNsb2NrKQotICAgICAgZ3N0X29iamVjdF9yZWYgKGNsb2NrKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGlwZWxpbmUpOwotCi0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgInBpcGVsaW5lIHVzaW5nIGZpeGVkIGNsb2NrICVwICglcykiLAotICAgICAgICBjbG9jaywgY2xvY2sgPyBHU1RfU1RSX05VTEwgKEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKSA6ICItIik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBpcGVsaW5lKTsKLSAgICAvKiBsZXQgdGhlIHBhcmVudCBiaW4gc2VsZWN0IGEgY2xvY2sgKi8KLSAgICBjbG9jayA9Ci0gICAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5wcm92aWRlX2Nsb2NrIChHU1RfRUxFTUVOVAotICAgICAgICAocGlwZWxpbmUpKTsKLSAgICAvKiBubyBjbG9jaywgdXNlIGEgc3lzdGVtIGNsb2NrICovCi0gICAgaWYgKCFjbG9jaykgewotICAgICAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLQotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgInBpcGVsaW5lIG9idGFpbmVkIHN5c3RlbSBjbG9jazogJXAgKCVzKSIsCi0gICAgICAgICAgY2xvY2ssIGNsb2NrID8gR1NUX1NUUl9OVUxMIChHU1RfT0JKRUNUX05BTUUgKGNsb2NrKSkgOiAiLSIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAicGlwZWxpbmUgb2J0YWluZWQgY2xvY2s6ICVwICglcykiLAotICAgICAgICAgIGNsb2NrLCBjbG9jayA/IEdTVF9TVFJfTlVMTCAoR1NUX09CSkVDVF9OQU1FIChjbG9jaykpIDogIi0iKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGNsb2NrOwotfQotCi0vKioKLSAqIGdzdF9waXBlbGluZV9nZXRfY2xvY2s6IChza2lwKQotICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQotICoKLSAqIEdldHMgdGhlIGN1cnJlbnQgY2xvY2sgdXNlZCBieSBAcGlwZWxpbmUuIFVzZXJzIG9mIG9iamVjdAotICogb3JpZW50ZWQgbGFuZ3VhZ2VzIHNob3VsZCB1c2UgZ3N0X3BpcGVsaW5lX2dldF9waXBlbGluZV9jbG9jaygpCi0gKiB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBnc3RfZWxlbWVudF9nZXRfY2xvY2soKSB3aGljaCBoYXMgYSBkaWZmZXJlbnQgYmVoYXZpb3IuCi0gKgotICogVW5saWtlIGdzdF9lbGVtZW50X2dldF9jbG9jaygpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiBhCi0gKiBjbG9jaywgZXZlbiBpZiB0aGUgcGlwZWxpbmUgaXMgbm90IGluIHRoZSBQTEFZSU5HIHN0YXRlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2xvY2ssIHVucmVmIGFmdGVyIHVzYWdlLgotICovCi1Hc3RDbG9jayAqCi1nc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrIChHc3RQaXBlbGluZSAqIHBpcGVsaW5lKQotewotICByZXR1cm4gZ3N0X3BpcGVsaW5lX2dldF9waXBlbGluZV9jbG9jayAocGlwZWxpbmUpOwotfQotCi0vKioKLSAqIGdzdF9waXBlbGluZV9nZXRfcGlwZWxpbmVfY2xvY2s6Ci0gKiBAcGlwZWxpbmU6IGEgI0dzdFBpcGVsaW5lCi0gKgotICogR2V0cyB0aGUgY3VycmVudCBjbG9jayB1c2VkIGJ5IEBwaXBlbGluZS4KLSAqCi0gKiBVbmxpa2UgZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrKCksIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIGEKLSAqIGNsb2NrLCBldmVuIGlmIHRoZSBwaXBlbGluZSBpcyBub3QgaW4gdGhlIFBMQVlJTkcgc3RhdGUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RDbG9jaywgdW5yZWYgYWZ0ZXIgdXNhZ2UuCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RDbG9jayAqCi1nc3RfcGlwZWxpbmVfZ2V0X3BpcGVsaW5lX2Nsb2NrIChHc3RQaXBlbGluZSAqIHBpcGVsaW5lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSksIE5VTEwpOwotCi0gIHJldHVybiBnc3RfcGlwZWxpbmVfcHJvdmlkZV9jbG9ja19mdW5jIChHU1RfRUxFTUVOVF9DQVNUIChwaXBlbGluZSkpOwotfQotCi0KLS8qKgotICogZ3N0X3BpcGVsaW5lX3VzZV9jbG9jazoKLSAqIEBwaXBlbGluZTogYSAjR3N0UGlwZWxpbmUKLSAqIEBjbG9jazogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlIGNsb2NrIHRvIHVzZQotICoKLSAqIEZvcmNlIEBwaXBlbGluZSB0byB1c2UgdGhlIGdpdmVuIEBjbG9jay4gVGhlIHBpcGVsaW5lIHdpbGwKLSAqIGFsd2F5cyB1c2UgdGhlIGdpdmVuIGNsb2NrIGV2ZW4gaWYgbmV3IGNsb2NrIHByb3ZpZGVycyBhcmUgYWRkZWQKLSAqIHRvIHRoaXMgcGlwZWxpbmUuCi0gKgotICogSWYgQGNsb2NrIGlzICVOVUxMIGFsbCBjbG9ja2luZyB3aWxsIGJlIGRpc2FibGVkIHdoaWNoIHdpbGwgbWFrZQotICogdGhlIHBpcGVsaW5lIHJ1biBhcyBmYXN0IGFzIHBvc3NpYmxlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9waXBlbGluZV91c2VfY2xvY2sgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUsIEdzdENsb2NrICogY2xvY2spCi17Ci0gIEdzdENsb2NrICoqY2xvY2tfcDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7Ci0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBpcGVsaW5lLCBHU1RfUElQRUxJTkVfRkxBR19GSVhFRF9DTE9DSyk7Ci0KLSAgY2xvY2tfcCA9ICZwaXBlbGluZS0+Zml4ZWRfY2xvY2s7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgY2xvY2tfcCwgKEdzdE9iamVjdCAqKSBjbG9jayk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgInBpcGVsaW5lIHVzaW5nIGZpeGVkIGNsb2NrICVwICglcykiLCBjbG9jaywKLSAgICAgIChjbG9jayA/IEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spIDogIm5pbCIpKTsKLX0KLQotLyoqCi0gKiBnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrOiAoc2tpcCkKLSAqIEBwaXBlbGluZTogYSAjR3N0UGlwZWxpbmUKLSAqIEBjbG9jazogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY2xvY2sgdG8gc2V0Ci0gKgotICogU2V0IHRoZSBjbG9jayBmb3IgQHBpcGVsaW5lLiBUaGUgY2xvY2sgd2lsbCBiZSBkaXN0cmlidXRlZAotICogdG8gYWxsIHRoZSBlbGVtZW50cyBtYW5hZ2VkIGJ5IHRoZSBwaXBlbGluZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2xvY2sgY291bGQgYmUgc2V0IG9uIHRoZSBwaXBlbGluZS4gJUZBTFNFIGlmCi0gKiAgIHNvbWUgZWxlbWVudCBkaWQgbm90IGFjY2VwdCB0aGUgY2xvY2suCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9waXBlbGluZV9zZXRfY2xvY2sgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUsIEdzdENsb2NrICogY2xvY2spCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwaXBlbGluZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSwgRkFMU0UpOwotCi0gIHJldHVybgotICAgICAgR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNldF9jbG9jayAoR1NUX0VMRU1FTlRfQ0FTVCAocGlwZWxpbmUpLAotICAgICAgY2xvY2spOwotfQotCi0vKioKLSAqIGdzdF9waXBlbGluZV9hdXRvX2Nsb2NrOgotICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQotICoKLSAqIExldCBAcGlwZWxpbmUgc2VsZWN0IGEgY2xvY2sgYXV0b21hdGljYWxseS4gVGhpcyBpcyB0aGUgZGVmYXVsdAotICogYmVoYXZpb3VyLgotICoKLSAqIFVzZSB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBwcmV2aW91cyBmb3JjZWQgYSBmaXhlZCBjbG9jayB3aXRoCi0gKiBnc3RfcGlwZWxpbmVfdXNlX2Nsb2NrKCkgYW5kIHdhbnQgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdAotICogcGlwZWxpbmUgY2xvY2sgc2VsZWN0aW9uIGFsZ29yaXRobS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfcGlwZWxpbmVfYXV0b19jbG9jayAoR3N0UGlwZWxpbmUgKiBwaXBlbGluZSkKLXsKLSAgR3N0Q2xvY2sgKipjbG9ja19wOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHBpcGVsaW5lICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7Ci0gIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAocGlwZWxpbmUsIEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLKTsKLQotICBjbG9ja19wID0gJnBpcGVsaW5lLT5maXhlZF9jbG9jazsKLSAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBjbG9ja19wLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBpcGVsaW5lKTsKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAicGlwZWxpbmUgdXNpbmcgYXV0b21hdGljIGNsb2NrIik7Ci19Ci0KLS8qKgotICogZ3N0X3BpcGVsaW5lX3NldF9kZWxheToKLSAqIEBwaXBlbGluZTogYSAjR3N0UGlwZWxpbmUKLSAqIEBkZWxheTogdGhlIGRlbGF5Ci0gKgotICogU2V0IHRoZSBleHBlY3RlZCBkZWxheSBuZWVkZWQgZm9yIGFsbCBlbGVtZW50cyB0byBwZXJmb3JtIHRoZQotICogUEFVU0VEIHRvIFBMQVlJTkcgc3RhdGUgY2hhbmdlLiBAZGVsYXkgd2lsbCBiZSBhZGRlZCB0byB0aGUKLSAqIGJhc2UgdGltZSBvZiB0aGUgZWxlbWVudHMgc28gdGhhdCB0aGV5IHdhaXQgYW4gYWRkaXRpb25hbCBAZGVsYXkKLSAqIGFtb3VudCBvZiB0aW1lIGJlZm9yZSBzdGFydGluZyB0byBwcm9jZXNzIGJ1ZmZlcnMgYW5kIGNhbm5vdCBiZQotICogI0dTVF9DTE9DS19USU1FX05PTkUuCi0gKgotICogVGhpcyBvcHRpb24gaXMgdXNlZCBmb3IgdHVuaW5nIHB1cnBvc2VzIGFuZCBzaG91bGQgbm9ybWFsbHkgbm90IGJlCi0gKiB1c2VkLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9waXBlbGluZV9zZXRfZGVsYXkgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUsIEdzdENsb2NrVGltZSBkZWxheSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChkZWxheSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBpcGVsaW5lKTsKLSAgcGlwZWxpbmUtPmRlbGF5ID0gZGVsYXk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7Ci19Ci0KLS8qKgotICogZ3N0X3BpcGVsaW5lX2dldF9kZWxheToKLSAqIEBwaXBlbGluZTogYSAjR3N0UGlwZWxpbmUKLSAqCi0gKiBHZXQgdGhlIGNvbmZpZ3VyZWQgZGVsYXkgKHNlZSBnc3RfcGlwZWxpbmVfc2V0X2RlbGF5KCkpLgotICoKLSAqIFJldHVybnM6IFRoZSBjb25maWd1cmVkIGRlbGF5LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X3BpcGVsaW5lX2dldF9kZWxheSAoR3N0UGlwZWxpbmUgKiBwaXBlbGluZSkKLXsKLSAgR3N0Q2xvY2tUaW1lIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSksIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGlwZWxpbmUpOwotICByZXMgPSBwaXBlbGluZS0+ZGVsYXk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcGlwZWxpbmVfc2V0X2F1dG9fZmx1c2hfYnVzOgotICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQotICogQGF1dG9fZmx1c2g6IHdoZXRoZXIgb3Igbm90IHRvIGF1dG9tYXRpY2FsbHkgZmx1c2ggdGhlIGJ1cyB3aGVuCi0gKiB0aGUgcGlwZWxpbmUgZ29lcyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUKLSAqCi0gKiBVc3VhbGx5LCB3aGVuIGEgcGlwZWxpbmUgZ29lcyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUsIGl0IGF1dG9tYXRpY2FsbHkKLSAqIGZsdXNoZXMgYWxsIHBlbmRpbmcgbWVzc2FnZXMgb24gdGhlIGJ1cywgd2hpY2ggaXMgZG9uZSBmb3IgcmVmY291bnRpbmcKLSAqIHB1cnBvc2VzLCB0byBicmVhayBjaXJjdWxhciByZWZlcmVuY2VzLgotICoKLSAqIFRoaXMgbWVhbnMgdGhhdCBhcHBsaWNhdGlvbnMgdGhhdCB1cGRhdGUgc3RhdGUgdXNpbmcgKGFzeW5jKSBidXMgbWVzc2FnZXMKLSAqIChlLmcuIGRvIGNlcnRhaW4gdGhpbmdzIHdoZW4gYSBwaXBlbGluZSBnb2VzIGZyb20gUEFVU0VEIHRvIFJFQURZKSBtaWdodAotICogbm90IGdldCB0byBzZWUgbWVzc2FnZXMgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2h1dCBkb3duLCBiZWNhdXNlIHRoZXkgbWlnaHQKLSAqIGJlIGZsdXNoZWQgYmVmb3JlIHRoZXkgY2FuIGJlIGRpc3BhdGNoZWQgaW4gdGhlIG1haW4gdGhyZWFkLiBUaGlzIGJlaGF2aW91cgotICogY2FuIGJlIGRpc2FibGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogSXQgaXMgaW1wb3J0YW50IHRoYXQgYWxsIG1lc3NhZ2VzIG9uIHRoZSBidXMgYXJlIGhhbmRsZWQgd2hlbiB0aGUKLSAqIGF1dG9tYXRpYyBmbHVzaGluZyBpcyBkaXNhYmxlZCBlbHNlIG1lbW9yeSBsZWFrcyB3aWxsIGJlIGludHJvZHVjZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X3BpcGVsaW5lX3NldF9hdXRvX2ZsdXNoX2J1cyAoR3N0UGlwZWxpbmUgKiBwaXBlbGluZSwgZ2Jvb2xlYW4gYXV0b19mbHVzaCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGlwZWxpbmUpOwotICBwaXBlbGluZS0+cHJpdi0+YXV0b19mbHVzaF9idXMgPSBhdXRvX2ZsdXNoOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGlwZWxpbmUpOwotfQotCi0vKioKLSAqIGdzdF9waXBlbGluZV9nZXRfYXV0b19mbHVzaF9idXM6Ci0gKiBAcGlwZWxpbmU6IGEgI0dzdFBpcGVsaW5lCi0gKgotICogQ2hlY2sgaWYgQHBpcGVsaW5lIHdpbGwgYXV0b21hdGljYWxseSBmbHVzaCBtZXNzYWdlcyB3aGVuIGdvaW5nIHRvCi0gKiB0aGUgTlVMTCBzdGF0ZS4KLSAqCi0gKiBSZXR1cm5zOiB3aGV0aGVyIHRoZSBwaXBlbGluZSB3aWxsIGF1dG9tYXRpY2FsbHkgZmx1c2ggaXRzIGJ1cyB3aGVuCi0gKiBnb2luZyBmcm9tIFJFQURZIHRvIE5VTEwgc3RhdGUgb3Igbm90LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfcGlwZWxpbmVfZ2V0X2F1dG9fZmx1c2hfYnVzIChHc3RQaXBlbGluZSAqIHBpcGVsaW5lKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QSVBFTElORSAocGlwZWxpbmUpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7Ci0gIHJlcyA9IHBpcGVsaW5lLT5wcml2LT5hdXRvX2ZsdXNoX2J1czsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeToKLSAqIEBwaXBlbGluZTogYSAjR3N0UGlwZWxpbmUKLSAqIEBsYXRlbmN5OiBsYXRlbmN5IHRvIGNvbmZpZ3VyZQotICoKLSAqIFNldHMgdGhlIGxhdGVuY3kgdGhhdCBzaG91bGQgYmUgY29uZmlndXJlZCBvbiB0aGUgcGlwZWxpbmUuIFNldHRpbmcKLSAqIEdTVF9DTE9DS19USU1FX05PTkUgd2lsbCByZXN0b3JlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiB1c2luZyB0aGUgbWluaW11bQotICogbGF0ZW5jeSBmcm9tIHRoZSBMQVRFTkNZIHF1ZXJ5LiBTZXR0aW5nIHRoaXMgaXMgdXN1YWxseSBub3QgcmVxdWlyZWQgYW5kCi0gKiB0aGUgcGlwZWxpbmUgd2lsbCBmaWd1cmUgb3V0IGFuIGFwcHJvcHJpYXRlIGxhdGVuY3kgYXV0b21hdGljYWxseS4KLSAqCi0gKiBTZXR0aW5nIGEgdG9vIGxvdyBsYXRlbmN5LCBlc3BlY2lhbGx5IGxvd2VyIHRoYW4gdGhlIG1pbmltdW0gbGF0ZW5jeSBmcm9tCi0gKiB0aGUgTEFURU5DWSBxdWVyeSwgd2lsbCBtb3N0IGxpa2VseSBjYXVzZSB0aGUgcGlwZWxpbmUgdG8gZmFpbC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeSAoR3N0UGlwZWxpbmUgKiBwaXBlbGluZSwgR3N0Q2xvY2tUaW1lIGxhdGVuY3kpCi17Ci0gIGdib29sZWFuIGNoYW5nZWQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGlwZWxpbmUpOwotICBjaGFuZ2VkID0gKHBpcGVsaW5lLT5wcml2LT5sYXRlbmN5ICE9IGxhdGVuY3kpOwotICBwaXBlbGluZS0+cHJpdi0+bGF0ZW5jeSA9IGxhdGVuY3k7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwaXBlbGluZSk7Ci0KLSAgaWYgKGNoYW5nZWQpCi0gICAgZ3N0X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5IChHU1RfQklOX0NBU1QgKHBpcGVsaW5lKSk7Ci19Ci0KLS8qKgotICogZ3N0X3BpcGVsaW5lX2dldF9sYXRlbmN5OgotICogQHBpcGVsaW5lOiBhICNHc3RQaXBlbGluZQotICoKLSAqIEdldHMgdGhlIGxhdGVuY3kgdGhhdCBzaG91bGQgYmUgY29uZmlndXJlZCBvbiB0aGUgcGlwZWxpbmUuIFNlZQotICogZ3N0X3BpcGVsaW5lX3NldF9sYXRlbmN5KCkuCi0gKgotICogUmV0dXJuczogTGF0ZW5jeSB0byBjb25maWd1cmUgb24gdGhlIHBpcGVsaW5lIG9yIEdTVF9DTE9DS19USU1FX05PTkUKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLQotR3N0Q2xvY2tUaW1lCi1nc3RfcGlwZWxpbmVfZ2V0X2xhdGVuY3kgKEdzdFBpcGVsaW5lICogcGlwZWxpbmUpCi17Ci0gIEdzdENsb2NrVGltZSBsYXRlbmN5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwaXBlbGluZSk7Ci0gIGxhdGVuY3kgPSBwaXBlbGluZS0+cHJpdi0+bGF0ZW5jeTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gbGF0ZW5jeTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RwaXBlbGluZS5oIGIvZ3N0L2dzdHBpcGVsaW5lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMGVmZTAuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHBpcGVsaW5lLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdHBpcGVsaW5lLmg6IEhlYWRlciBmb3IgR3N0UGlwZWxpbmUgZWxlbWVudAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9QSVBFTElORV9IX18KLSNkZWZpbmUgX19HU1RfUElQRUxJTkVfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0YmluLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9QSVBFTElORSAgICAgICAgICAgICAgIChnc3RfcGlwZWxpbmVfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9QSVBFTElORShvYmopICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfUElQRUxJTkUsIEdzdFBpcGVsaW5lKSkKLSNkZWZpbmUgR1NUX0lTX1BJUEVMSU5FKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9QSVBFTElORSkpCi0jZGVmaW5lIEdTVF9QSVBFTElORV9DTEFTUyhrbGFzcykgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9QSVBFTElORSwgR3N0UGlwZWxpbmVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19QSVBFTElORV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9QSVBFTElORSkpCi0jZGVmaW5lIEdTVF9QSVBFTElORV9HRVRfQ0xBU1Mob2JqKSAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9QSVBFTElORSwgR3N0UGlwZWxpbmVDbGFzcykpCi0jZGVmaW5lIEdTVF9QSVBFTElORV9DQVNUKG9iaikgICAgICAgICAgKChHc3RQaXBlbGluZSopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQaXBlbGluZSBHc3RQaXBlbGluZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQaXBlbGluZUNsYXNzIEdzdFBpcGVsaW5lQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UGlwZWxpbmVQcml2YXRlIEdzdFBpcGVsaW5lUHJpdmF0ZTsKLQotLyoqCi0gKiBHc3RQaXBlbGluZUZsYWdzOgotICogQEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLOiB0aGlzIHBpcGVsaW5lIHdvcmtzIHdpdGggYSBmaXhlZCBjbG9jawotICogQEdTVF9QSVBFTElORV9GTEFHX0xBU1Q6IG9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncwotICoKLSAqIFBpcGVsaW5lIGZsYWdzCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLICAgICAgICA9IChHU1RfQklOX0ZMQUdfTEFTVCA8PCAwKSwKLSAgLyogcGFkZGluZyAqLwotICBHU1RfUElQRUxJTkVfRkxBR19MQVNUICAgICAgICAgICAgICAgPSAoR1NUX0JJTl9GTEFHX0xBU1QgPDwgNCkKLX0gR3N0UGlwZWxpbmVGbGFnczsKLQotLyoqCi0gKiBHc3RQaXBlbGluZToKLSAqIEBmaXhlZF9jbG9jazogVGhlIGZpeGVkIGNsb2NrIG9mIHRoZSBwaXBlbGluZSwgdXNlZCB3aGVuCi0gKiAgICAgICAgICAgICAgIEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLIGlzIHNldC4KLSAqIEBzdHJlYW1fdGltZTogVGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBwaXBlbGluZS4gQSBiZXR0ZXIgbmFtZSBmb3IgdGhpcwotICogICAgICAgICBwcm9wZXJ0eSB3b3VsZCBiZSB0aGUgcnVubmluZ190aW1lLCB0aGUgdG90YWwgdGltZSBzcGVudCBpbiB0aGUKLSAqICAgICAgICAgUExBWUlORyBzdGF0ZSB3aXRob3V0IGJlaW5nIGZsdXNoZWQuIChkZXByZWNhdGVkLCB1c2UgdGhlIHN0YXJ0X3RpbWUKLSAqICAgICAgICAgb24gR3N0RWxlbWVudCkuCi0gKiBAZGVsYXk6IEV4dHJhIGRlbGF5IGFkZGVkIHRvIGJhc2VfdGltZSB0byBjb21wZW5zYXRlIGZvciBjb21wdXRpbmcgZGVsYXlzCi0gKiAgICAgICAgIHdoZW4gc2V0dGluZyBlbGVtZW50cyB0byBQTEFZSU5HLgotICoKLSAqIFRoZSAjR3N0UGlwZWxpbmUgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdFBpcGVsaW5lIHsKLSAgR3N0QmluICAgICAgICAgYmluOwotCi0gIC8qPCBwdWJsaWMgPiovIC8qIHdpdGggTE9DSyAqLwotICBHc3RDbG9jayAgICAgICpmaXhlZF9jbG9jazsKLQotICBHc3RDbG9ja1RpbWUgICBzdHJlYW1fdGltZTsKLSAgR3N0Q2xvY2tUaW1lICAgZGVsYXk7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdFBpcGVsaW5lUHJpdmF0ZSAqcHJpdjsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLXN0cnVjdCBfR3N0UGlwZWxpbmVDbGFzcyB7Ci0gIEdzdEJpbkNsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSAgICAgICAgICAgZ3N0X3BpcGVsaW5lX2dldF90eXBlICAgICAgICAgICAodm9pZCk7Ci1Hc3RFbGVtZW50KiAgICAgZ3N0X3BpcGVsaW5lX25ldyAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKm5hbWUpIEdfR05VQ19NQUxMT0M7Ci0KLUdzdEJ1cyogICAgICAgICBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAgICAgICAgICAgIChHc3RQaXBlbGluZSAqcGlwZWxpbmUpOwotCi12b2lkICAgICAgICAgICAgZ3N0X3BpcGVsaW5lX3VzZV9jbG9jayAgICAgICAgICAoR3N0UGlwZWxpbmUgKnBpcGVsaW5lLCBHc3RDbG9jayAqY2xvY2spOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9waXBlbGluZV9zZXRfY2xvY2sgICAgICAgICAgKEdzdFBpcGVsaW5lICpwaXBlbGluZSwgR3N0Q2xvY2sgKmNsb2NrKTsKLUdzdENsb2NrKiAgICAgICBnc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrICAgICAgICAgIChHc3RQaXBlbGluZSAqcGlwZWxpbmUpOwotR3N0Q2xvY2sqICAgICAgIGdzdF9waXBlbGluZV9nZXRfcGlwZWxpbmVfY2xvY2sgKEdzdFBpcGVsaW5lICpwaXBlbGluZSk7Ci12b2lkICAgICAgICAgICAgZ3N0X3BpcGVsaW5lX2F1dG9fY2xvY2sgICAgICAgICAoR3N0UGlwZWxpbmUgKnBpcGVsaW5lKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9waXBlbGluZV9zZXRfZGVsYXkgICAgICAgICAgKEdzdFBpcGVsaW5lICpwaXBlbGluZSwgR3N0Q2xvY2tUaW1lIGRlbGF5KTsKLUdzdENsb2NrVGltZSAgICBnc3RfcGlwZWxpbmVfZ2V0X2RlbGF5ICAgICAgICAgIChHc3RQaXBlbGluZSAqcGlwZWxpbmUpOwotCi12b2lkICAgICAgICAgICAgZ3N0X3BpcGVsaW5lX3NldF9sYXRlbmN5ICAgICAgICAoR3N0UGlwZWxpbmUgKnBpcGVsaW5lLCBHc3RDbG9ja1RpbWUgbGF0ZW5jeSk7Ci1Hc3RDbG9ja1RpbWUgICAgZ3N0X3BpcGVsaW5lX2dldF9sYXRlbmN5ICAgICAgICAoR3N0UGlwZWxpbmUgKnBpcGVsaW5lKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMgKEdzdFBpcGVsaW5lICpwaXBlbGluZSwgZ2Jvb2xlYW4gYXV0b19mbHVzaCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cyAoR3N0UGlwZWxpbmUgKnBpcGVsaW5lKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RQaXBlbGluZSwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUElQRUxJTkVfSF9fICovCi0KZGlmZiAtLWdpdCBhL2dzdC9nc3RwbHVnaW4uYyBiL2dzdC9nc3RwbHVnaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I1Yjc1MC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cGx1Z2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODU1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3RwbHVnaW4uYzogUGx1Z2luIHN1YnN5c3RlbSBmb3IgbG9hZGluZyBlbGVtZW50cywgdHlwZXMsIGFuZCBsaWJzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHBsdWdpbgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBDb250YWluZXIgZm9yIGZlYXR1cmVzIGxvYWRlZCBmcm9tIGEgc2hhcmVkIG9iamVjdCBtb2R1bGUKLSAqIEBzZWVfYWxzbzogI0dzdFBsdWdpbkZlYXR1cmUsICNHc3RFbGVtZW50RmFjdG9yeQotICoKLSAqIEdTdHJlYW1lciBpcyBleHRlbnNpYmxlLCBzbyAjR3N0RWxlbWVudCBpbnN0YW5jZXMgY2FuIGJlIGxvYWRlZCBhdCBydW50aW1lLgotICogQSBwbHVnaW4gc3lzdGVtIGNhbiBwcm92aWRlIG9uZSBvciBtb3JlIG9mIHRoZSBiYXNpYwotICogPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+ICNHc3RQbHVnaW5GZWF0dXJlIHN1YmNsYXNzZXMuCi0gKgotICogQSBwbHVnaW4gc2hvdWxkIGV4cG9ydCBhIHN5bWJvbCA8c3ltYm9sPmdzdF9wbHVnaW5fZGVzYzwvc3ltYm9sPiB0aGF0IGlzIGEKLSAqIHN0cnVjdCBvZiB0eXBlICNHc3RQbHVnaW5EZXNjLgotICogdGhlIHBsdWdpbiBsb2FkZXIgd2lsbCBjaGVjayB0aGUgdmVyc2lvbiBvZiB0aGUgY29yZSBsaWJyYXJ5IHRoZSBwbHVnaW4gd2FzCi0gKiBsaW5rZWQgYWdhaW5zdCBhbmQgd2lsbCBjcmVhdGUgYSBuZXcgI0dzdFBsdWdpbi4gSXQgd2lsbCB0aGVuIGNhbGwgdGhlCi0gKiAjR3N0UGx1Z2luSW5pdEZ1bmMgZnVuY3Rpb24gdGhhdCB3YXMgcHJvdmlkZWQgaW4gdGhlCi0gKiA8c3ltYm9sPmdzdF9wbHVnaW5fZGVzYzwvc3ltYm9sPi4KLSAqCi0gKiBPbmNlIHlvdSBoYXZlIGEgaGFuZGxlIHRvIGEgI0dzdFBsdWdpbiAoZS5nLiBmcm9tIHRoZSAjR3N0UmVnaXN0cnkpLCB5b3UKLSAqIGNhbiBhZGQgYW55IG9iamVjdCB0aGF0IHN1YmNsYXNzZXMgI0dzdFBsdWdpbkZlYXR1cmUuCi0gKgotICogVXN1YWxseSBwbHVnaW5zIGFyZSBhbHdheXMgYXV0b21hdGljYWxseSBsb2FkZWQgc28geW91IGRvbid0IG5lZWQgdG8gY2FsbAotICogZ3N0X3BsdWdpbl9sb2FkKCkgZXhwbGljaXRseSB0byBicmluZyBpdCBpbnRvIG1lbW9yeS4gVGhlcmUgYXJlIG9wdGlvbnMgdG8KLSAqIHN0YXRpY2FsbHkgbGluayBwbHVnaW5zIHRvIGFuIGFwcCBvciBldmVuIHVzZSBHU3RyZWFtZXIgd2l0aG91dCBhIHBsdWdpbgotICogcmVwb3NpdG9yeSBpbiB3aGljaCBjYXNlIGdzdF9wbHVnaW5fbG9hZCgpIGNhbiBiZSBuZWVkZWQgdG8gYnJpbmcgdGhlIHBsdWdpbgotICogaW50byBtZW1vcnkuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSEFWRV9ESVJFTlRfSAotI2luY2x1ZGUgPGRpcmVudC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgR1NUX0NBVF9QTFVHSU5fTE9BRElORwotCi1zdGF0aWMgZ3VpbnQgX251bV9zdGF0aWNfcGx1Z2luczsgICAgICAgLyogMCAgICAqLwotc3RhdGljIEdzdFBsdWdpbkRlc2MgKl9zdGF0aWNfcGx1Z2luczsgIC8qIE5VTEwgKi8KLXN0YXRpYyBnYm9vbGVhbiBfZ3N0X3BsdWdpbl9pbml0ZWQ7Ci1zdGF0aWMgZ2NoYXIgKipfcGx1Z2luX2xvYWRpbmdfd2hpdGVsaXN0OyAgICAgICAvKiBOVUxMICovCi0KLS8qIHN0YXRpYyB2YXJpYWJsZXMgZm9yIHNlZ2ZhdWx0IGhhbmRsaW5nIG9mIHBsdWdpbiBsb2FkaW5nICovCi1zdGF0aWMgY2hhciAqX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9maWxlbmFtZSA9IE5VTEw7Ci0KLS8qIGxpc3Qgb2YgdmFsaWQgbGljZW5zZXMuCi0gKiBPbmUgb2YgdGhlc2UgbXVzdCBiZSBzcGVjaWZpZWQgb3IgdGhlIHBsdWdpbiB3b24ndCBiZSBsb2FkZWQKLSAqIFBsZWFzZSBmaWxlIGEgYnVnIHRvIHJlcXVlc3QgYW55IGFkZGl0aW9uYWwgbGljZW5zZSBiZSBhZGRlZC4KLSAqCi0gKiBHUEw6IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAotICogTEdQTDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sCi0gKiBRUEw6IGh0dHA6Ly93d3cudHJvbGx0ZWNoLmNvbS9saWNlbnNlcy9xcGwuaHRtbAotICogTVBMOiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21vemlsbGExLjEucGhwCi0gKiBNSVQvWDExOiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAotICogMy1jbGF1c2UgQlNEOiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocAotICovCi1zdGF0aWMgY29uc3QgZ2NoYXIgdmFsaWRfbGljZW5zZXNbXSA9ICJMR1BMXDAwMCIgICAgICAgIC8qIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAqLwotICAgICJHUExcMDAwIiAgICAgICAgICAgICAgICAgICAvKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAqLwotICAgICJRUExcMDAwIiAgICAgICAgICAgICAgICAgICAvKiBUcm9sbHRlY2ggUXQgUHVibGljIExpY2Vuc2UgKi8KLSAgICAiR1BML1FQTFwwMDAiICAgICAgICAgICAgICAgLyogQ29tYmktbGljZW5zZSBvZiBHUEwgKyBRUEwgKi8KLSAgICAiTVBMXDAwMCIgICAgICAgICAgICAgICAgICAgLyogTVBMIDEuMSBsaWNlbnNlICovCi0gICAgIkJTRFwwMDAiICAgICAgICAgICAgICAgICAgIC8qIDMtY2xhdXNlIEJTRCBsaWNlbnNlICovCi0gICAgIk1JVC9YMTFcMDAwIiAgICAgICAgICAgICAgIC8qIE1JVC9YMTEgbGljZW5zZSAqLwotICAgICJQcm9wcmlldGFyeVwwMDAiICAgICAgICAgICAvKiBQcm9wcmlldGFyeSBsaWNlbnNlICovCi0gICAgR1NUX0xJQ0VOU0VfVU5LTk9XTjsgICAgICAgIC8qIHNvbWUgb3RoZXIgbGljZW5zZSAqLwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IHZhbGlkX2xpY2Vuc2VzX2lkeFtdID0geyAwLCA1LCA5LCAxMywgMjEsIDI1LCAyOSwgMzcsIDQ5IH07Ci0KLXN0YXRpYyBHc3RQbHVnaW4gKmdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYyAoR3N0UGx1Z2luICogcGx1Z2luLAotICAgIGNvbnN0IEdzdFBsdWdpbkRlc2MgKiBkZXNjLCBncG9pbnRlciB1c2VyX2RhdGEpOwotc3RhdGljIHZvaWQgZ3N0X3BsdWdpbl9kZXNjX2NvcHkgKEdzdFBsdWdpbkRlc2MgKiBkZXN0LAotICAgIGNvbnN0IEdzdFBsdWdpbkRlc2MgKiBzcmMpOwotCi1zdGF0aWMgdm9pZCBnc3RfcGx1Z2luX2V4dF9kZXBfZnJlZSAoR3N0UGx1Z2luRGVwICogZGVwKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UGx1Z2luLCBnc3RfcGx1Z2luLCBHU1RfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHBsdWdpbi0+cHJpdiA9Ci0gICAgICBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHBsdWdpbiwgR1NUX1RZUEVfUExVR0lOLCBHc3RQbHVnaW5Qcml2YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wbHVnaW5fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFBsdWdpbiAqcGx1Z2luID0gR1NUX1BMVUdJTl9DQVNUIChvYmplY3QpOwotCi0gIEdTVF9ERUJVRyAoImZpbmFsaXppbmcgcGx1Z2luICUiIEdTVF9QVFJfRk9STUFULCBwbHVnaW4pOwotCi0gIC8qIEZJWE1FOiBtYWtlIHJlZ2lzdHJ5IGFkZCBhIHdlYWsgcmVmIGluc3RlYWQgKi8KLSNpZiAwCi0gIEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSA9IGdzdF9yZWdpc3RyeV9nZXQgKCk7Ci0gIEdMaXN0ICpnOwotICBmb3IgKGcgPSByZWdpc3RyeS0+cGx1Z2luczsgZzsgZyA9IGctPm5leHQpIHsKLSAgICBpZiAoZy0+ZGF0YSA9PSAoZ3BvaW50ZXIpIHBsdWdpbikgewotICAgICAgZ193YXJuaW5nICgicmVtb3ZpbmcgcGx1Z2luIHRoYXQgaXMgc3RpbGwgaW4gcmVnaXN0cnkiKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIGdfZnJlZSAocGx1Z2luLT5maWxlbmFtZSk7Ci0gIGdfZnJlZSAocGx1Z2luLT5iYXNlbmFtZSk7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKHBsdWdpbi0+cHJpdi0+ZGVwcywgKEdGdW5jKSBnc3RfcGx1Z2luX2V4dF9kZXBfZnJlZSwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChwbHVnaW4tPnByaXYtPmRlcHMpOwotICBwbHVnaW4tPnByaXYtPmRlcHMgPSBOVUxMOwotCi0gIGlmIChwbHVnaW4tPnByaXYtPmNhY2hlX2RhdGEpIHsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHBsdWdpbi0+cHJpdi0+Y2FjaGVfZGF0YSk7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3BsdWdpbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wbHVnaW5fY2xhc3NfaW5pdCAoR3N0UGx1Z2luQ2xhc3MgKiBrbGFzcykKLXsKLSAgR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKS0+ZmluYWxpemUgPSBnc3RfcGx1Z2luX2ZpbmFsaXplOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0UGx1Z2luUHJpdmF0ZSkpOwotfQotCi1HUXVhcmsKLWdzdF9wbHVnaW5fZXJyb3JfcXVhcmsgKHZvaWQpCi17Ci0gIHN0YXRpYyBHUXVhcmsgcXVhcmsgPSAwOwotCi0gIGlmICghcXVhcmspCi0gICAgcXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImdzdF9wbHVnaW5fZXJyb3IiKTsKLSAgcmV0dXJuIHF1YXJrOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljOgotICogQG1ham9yX3ZlcnNpb246IHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR1N0cmVhbWVyIGNvcmUgdGhhdCB0aGUKLSAqICAgICBwbHVnaW4gd2FzIGNvbXBpbGVkIGZvciwgeW91IGNhbiBqdXN0IHVzZSBHU1RfVkVSU0lPTl9NQUpPUiBoZXJlCi0gKiBAbWlub3JfdmVyc2lvbjogdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHU3RyZWFtZXIgY29yZSB0aGF0IHRoZQotICogICAgIHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yLCB5b3UgY2FuIGp1c3QgdXNlIEdTVF9WRVJTSU9OX01JTk9SIGhlcmUKLSAqIEBuYW1lOiBhIHVuaXF1ZSBuYW1lIG9mIHRoZSBwbHVnaW4gKGlkZWFsbHkgcHJlZml4ZWQgd2l0aCBhbiBhcHBsaWNhdGlvbi0gb3IKLSAqICAgICBsaWJyYXJ5LXNwZWNpZmljIG5hbWVzcGFjZSBwcmVmaXggaW4gb3JkZXIgdG8gYXZvaWQgbmFtZSBjb25mbGljdHMgaW4KLSAqICAgICBjYXNlIGEgc2ltaWxhciBwbHVnaW4gd2l0aCB0aGUgc2FtZSBuYW1lIGV2ZXIgZ2V0cyBhZGRlZCB0byBHU3RyZWFtZXIpCi0gKiBAZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uIG9mIHRoZSBwbHVnaW4KLSAqIEBpbml0X2Z1bmM6IChzY29wZSBjYWxsKTogcG9pbnRlciB0byB0aGUgaW5pdCBmdW5jdGlvbiBvZiB0aGlzIHBsdWdpbi4KLSAqIEB2ZXJzaW9uOiB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgcGx1Z2luCi0gKiBAbGljZW5zZTogZWZmZWN0aXZlIGxpY2Vuc2Ugb2YgcGx1Z2luLiBNdXN0IGJlIG9uZSBvZiB0aGUgYXBwcm92ZWQgbGljZW5zZXMKLSAqICAgICAoc2VlICNHc3RQbHVnaW5EZXNjIGFib3ZlKSBvciB0aGUgcGx1Z2luIHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQuCi0gKiBAc291cmNlOiBzb3VyY2UgbW9kdWxlIHBsdWdpbiBiZWxvbmdzIHRvCi0gKiBAcGFja2FnZTogc2hpcHBlZCBwYWNrYWdlIHBsdWdpbiBiZWxvbmdzIHRvCi0gKiBAb3JpZ2luOiBVUkwgdG8gcHJvdmlkZXIgb2YgcGx1Z2luCi0gKgotICogUmVnaXN0ZXJzIGEgc3RhdGljIHBsdWdpbiwgaWUuIGEgcGx1Z2luIHdoaWNoIGlzIHByaXZhdGUgdG8gYW4gYXBwbGljYXRpb24KLSAqIG9yIGxpYnJhcnkgYW5kIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uIG9yIGxpYnJhcnkgKGFzIG9wcG9zZWQgdG8KLSAqIGJlaW5nIHNoaXBwZWQgYXMgYSBzZXBhcmF0ZSBtb2R1bGUgZmlsZSkuCi0gKgotICogWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgR1N0cmVhbWVyIGhhcyBiZWVuIGluaXRpYWxpc2VkICh3aXRoIGdzdF9pbml0KCkgb3IKLSAqIHZpYSBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBsdWdpbiB3YXMgcmVnaXN0ZXJlZCBjb3JyZWN0bHksIG90aGVyd2lzZSAlRkFMU0UuCi0gKi8KLWdib29sZWFuCi1nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyAoZ2ludCBtYWpvcl92ZXJzaW9uLCBnaW50IG1pbm9yX3ZlcnNpb24sCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBnY2hhciAqIGRlc2NyaXB0aW9uLCBHc3RQbHVnaW5Jbml0RnVuYyBpbml0X2Z1bmMsCi0gICAgY29uc3QgZ2NoYXIgKiB2ZXJzaW9uLCBjb25zdCBnY2hhciAqIGxpY2Vuc2UsIGNvbnN0IGdjaGFyICogc291cmNlLAotICAgIGNvbnN0IGdjaGFyICogcGFja2FnZSwgY29uc3QgZ2NoYXIgKiBvcmlnaW4pCi17Ci0gIEdzdFBsdWdpbkRlc2MgZGVzYyA9IHsgbWFqb3JfdmVyc2lvbiwgbWlub3JfdmVyc2lvbiwgbmFtZSwgZGVzY3JpcHRpb24sCi0gICAgaW5pdF9mdW5jLCB2ZXJzaW9uLCBsaWNlbnNlLCBzb3VyY2UsIHBhY2thZ2UsIG9yaWdpbiwgTlVMTCwKLSAgfTsKLSAgR3N0UGx1Z2luICpwbHVnaW47Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc2NyaXB0aW9uICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluaXRfZnVuYyAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2ZXJzaW9uICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxpY2Vuc2UgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc291cmNlICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhY2thZ2UgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAob3JpZ2luICE9IE5VTEwsIEZBTFNFKTsKLQotICAvKiBtYWtlIHN1cmUgZ3N0X2luaXQoKSBoYXMgYmVlbiBjYWxsZWQgKi8KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF9nc3RfcGx1Z2luX2luaXRlZCAhPSBGQUxTRSwgRkFMU0UpOwotCi0gIEdTVF9MT0cgKCJhdHRlbXB0aW5nIHRvIGxvYWQgc3RhdGljIHBsdWdpbiBcIiVzXCIgbm93Li4uIiwgbmFtZSk7Ci0gIHBsdWdpbiA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1BMVUdJTiwgMCwgTlVMTCk7Ci0gIGlmIChnc3RfcGx1Z2luX3JlZ2lzdGVyX2Z1bmMgKHBsdWdpbiwgJmRlc2MsIE5VTEwpICE9IE5VTEwpIHsKLSAgICBHU1RfSU5GTyAoInJlZ2lzdGVyZWQgc3RhdGljIHBsdWdpbiBcIiVzXCIiLCBuYW1lKTsKLSAgICByZXMgPSBnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwgcGx1Z2luKTsKLSAgICBHU1RfSU5GTyAoImFkZGVkIHN0YXRpYyBwbHVnaW4gXCIlc1wiLCByZXN1bHQ6ICVkIiwgbmFtZSwgcmVzKTsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljX2Z1bGw6Ci0gKiBAbWFqb3JfdmVyc2lvbjogdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHU3RyZWFtZXIgY29yZSB0aGF0IHRoZQotICogICAgIHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yLCB5b3UgY2FuIGp1c3QgdXNlIEdTVF9WRVJTSU9OX01BSk9SIGhlcmUKLSAqIEBtaW5vcl92ZXJzaW9uOiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdTdHJlYW1lciBjb3JlIHRoYXQgdGhlCi0gKiAgICAgcGx1Z2luIHdhcyBjb21waWxlZCBmb3IsIHlvdSBjYW4ganVzdCB1c2UgR1NUX1ZFUlNJT05fTUlOT1IgaGVyZQotICogQG5hbWU6IGEgdW5pcXVlIG5hbWUgb2YgdGhlIHBsdWdpbiAoaWRlYWxseSBwcmVmaXhlZCB3aXRoIGFuIGFwcGxpY2F0aW9uLSBvcgotICogICAgIGxpYnJhcnktc3BlY2lmaWMgbmFtZXNwYWNlIHByZWZpeCBpbiBvcmRlciB0byBhdm9pZCBuYW1lIGNvbmZsaWN0cyBpbgotICogICAgIGNhc2UgYSBzaW1pbGFyIHBsdWdpbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXZlciBnZXRzIGFkZGVkIHRvIEdTdHJlYW1lcikKLSAqIEBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gb2YgdGhlIHBsdWdpbgotICogQGluaXRfZnVsbF9mdW5jOiAoc2NvcGUgY2FsbCk6IHBvaW50ZXIgdG8gdGhlIGluaXQgZnVuY3Rpb24gd2l0aCB1c2VyIGRhdGEKLSAqICAgICBvZiB0aGlzIHBsdWdpbi4KLSAqIEB2ZXJzaW9uOiB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgcGx1Z2luCi0gKiBAbGljZW5zZTogZWZmZWN0aXZlIGxpY2Vuc2Ugb2YgcGx1Z2luLiBNdXN0IGJlIG9uZSBvZiB0aGUgYXBwcm92ZWQgbGljZW5zZXMKLSAqICAgICAoc2VlICNHc3RQbHVnaW5EZXNjIGFib3ZlKSBvciB0aGUgcGx1Z2luIHdpbGwgbm90IGJlIHJlZ2lzdGVyZWQuCi0gKiBAc291cmNlOiBzb3VyY2UgbW9kdWxlIHBsdWdpbiBiZWxvbmdzIHRvCi0gKiBAcGFja2FnZTogc2hpcHBlZCBwYWNrYWdlIHBsdWdpbiBiZWxvbmdzIHRvCi0gKiBAb3JpZ2luOiBVUkwgdG8gcHJvdmlkZXIgb2YgcGx1Z2luCi0gKiBAdXNlcl9kYXRhOiBncG9pbnRlciB0byB1c2VyIGRhdGEKLSAqCi0gKiBSZWdpc3RlcnMgYSBzdGF0aWMgcGx1Z2luLCBpZS4gYSBwbHVnaW4gd2hpY2ggaXMgcHJpdmF0ZSB0byBhbiBhcHBsaWNhdGlvbgotICogb3IgbGlicmFyeSBhbmQgY29udGFpbmVkIHdpdGhpbiB0aGUgYXBwbGljYXRpb24gb3IgbGlicmFyeSAoYXMgb3Bwb3NlZCB0bwotICogYmVpbmcgc2hpcHBlZCBhcyBhIHNlcGFyYXRlIG1vZHVsZSBmaWxlKSB3aXRoIGEgI0dzdFBsdWdpbkluaXRGdWxsRnVuYwotICogd2hpY2ggYWxsb3dzIHVzZXIgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uICh1c2VmdWwKLSAqIGZvciBiaW5kaW5ncykuCi0gKgotICogWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgR1N0cmVhbWVyIGhhcyBiZWVuIGluaXRpYWxpc2VkICh3aXRoIGdzdF9pbml0KCkgb3IKLSAqIHZpYSBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBsdWdpbiB3YXMgcmVnaXN0ZXJlZCBjb3JyZWN0bHksIG90aGVyd2lzZSAlRkFMU0UuCi0gKi8KLWdib29sZWFuCi1nc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpY19mdWxsIChnaW50IG1ham9yX3ZlcnNpb24sIGdpbnQgbWlub3JfdmVyc2lvbiwKLSAgICBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IGdjaGFyICogZGVzY3JpcHRpb24sCi0gICAgR3N0UGx1Z2luSW5pdEZ1bGxGdW5jIGluaXRfZnVsbF9mdW5jLCBjb25zdCBnY2hhciAqIHZlcnNpb24sCi0gICAgY29uc3QgZ2NoYXIgKiBsaWNlbnNlLCBjb25zdCBnY2hhciAqIHNvdXJjZSwgY29uc3QgZ2NoYXIgKiBwYWNrYWdlLAotICAgIGNvbnN0IGdjaGFyICogb3JpZ2luLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFBsdWdpbkRlc2MgZGVzYyA9IHsgbWFqb3JfdmVyc2lvbiwgbWlub3JfdmVyc2lvbiwgbmFtZSwgZGVzY3JpcHRpb24sCi0gICAgKEdzdFBsdWdpbkluaXRGdW5jKSBpbml0X2Z1bGxfZnVuYywgdmVyc2lvbiwgbGljZW5zZSwgc291cmNlLCBwYWNrYWdlLAotICAgIG9yaWdpbiwgTlVMTCwKLSAgfTsKLSAgR3N0UGx1Z2luICpwbHVnaW47Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc2NyaXB0aW9uICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluaXRfZnVsbF9mdW5jICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZlcnNpb24gIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobGljZW5zZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzb3VyY2UgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFja2FnZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvcmlnaW4gIT0gTlVMTCwgRkFMU0UpOwotCi0gIC8qIG1ha2Ugc3VyZSBnc3RfaW5pdCgpIGhhcyBiZWVuIGNhbGxlZCAqLwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoX2dzdF9wbHVnaW5faW5pdGVkICE9IEZBTFNFLCBGQUxTRSk7Ci0KLSAgR1NUX0xPRyAoImF0dGVtcHRpbmcgdG8gbG9hZCBzdGF0aWMgcGx1Z2luIFwiJXNcIiBub3cuLi4iLCBuYW1lKTsKLSAgcGx1Z2luID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfUExVR0lOLCAwLCBOVUxMKTsKLSAgaWYgKGdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYyAocGx1Z2luLCAmZGVzYywgdXNlcl9kYXRhKSAhPSBOVUxMKSB7Ci0gICAgR1NUX0lORk8gKCJyZWdpc3RlcmVkIHN0YXRpYyBwbHVnaW4gXCIlc1wiIiwgbmFtZSk7Ci0gICAgcmVzID0gZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXQgKCksIHBsdWdpbik7Ci0gICAgR1NUX0lORk8gKCJhZGRlZCBzdGF0aWMgcGx1Z2luIFwiJXNcIiwgcmVzdWx0OiAlZCIsIG5hbWUsIHJlcyk7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotX3ByaXZfZ3N0X3BsdWdpbl9pbml0aWFsaXplICh2b2lkKQotewotICBjb25zdCBnY2hhciAqd2hpdGVsaXN0OwotICBndWludCBpOwotCi0gIF9nc3RfcGx1Z2luX2luaXRlZCA9IFRSVUU7Ci0KLSAgd2hpdGVsaXN0ID0gZ19nZXRlbnYgKCJHU1RfUExVR0lOX0xPQURJTkdfV0hJVEVMSVNUIik7Ci0gIGlmICh3aGl0ZWxpc3QgIT0gTlVMTCAmJiAqd2hpdGVsaXN0ICE9ICdcMCcpIHsKLSAgICBfcGx1Z2luX2xvYWRpbmdfd2hpdGVsaXN0ID0gZ19zdHJzcGxpdCAod2hpdGVsaXN0LAotICAgICAgICBHX1NFQVJDSFBBVEhfU0VQQVJBVE9SX1MsIC0xKTsKLSAgICBmb3IgKGkgPSAwOyBfcGx1Z2luX2xvYWRpbmdfd2hpdGVsaXN0W2ldICE9IE5VTEw7ICsraSkgewotICAgICAgR1NUX0lORk8gKCJwbHVnaW5zIHdoaXRlbGlzdCBlbnRyeTogJXMiLCBfcGx1Z2luX2xvYWRpbmdfd2hpdGVsaXN0W2ldKTsKLSAgICB9Ci0gIH0KLQotICAvKiBub3cgcmVnaXN0ZXIgYWxsIHN0YXRpYyBwbHVnaW5zICovCi0gIEdTVF9JTkZPICgicmVnaXN0ZXJpbmcgJXUgc3RhdGljIHBsdWdpbnMiLCBfbnVtX3N0YXRpY19wbHVnaW5zKTsKLSAgZm9yIChpID0gMDsgaSA8IF9udW1fc3RhdGljX3BsdWdpbnM7ICsraSkgewotICAgIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljIChfc3RhdGljX3BsdWdpbnNbaV0ubWFqb3JfdmVyc2lvbiwKLSAgICAgICAgX3N0YXRpY19wbHVnaW5zW2ldLm1pbm9yX3ZlcnNpb24sIF9zdGF0aWNfcGx1Z2luc1tpXS5uYW1lLAotICAgICAgICBfc3RhdGljX3BsdWdpbnNbaV0uZGVzY3JpcHRpb24sIF9zdGF0aWNfcGx1Z2luc1tpXS5wbHVnaW5faW5pdCwKLSAgICAgICAgX3N0YXRpY19wbHVnaW5zW2ldLnZlcnNpb24sIF9zdGF0aWNfcGx1Z2luc1tpXS5saWNlbnNlLAotICAgICAgICBfc3RhdGljX3BsdWdpbnNbaV0uc291cmNlLCBfc3RhdGljX3BsdWdpbnNbaV0ucGFja2FnZSwKLSAgICAgICAgX3N0YXRpY19wbHVnaW5zW2ldLm9yaWdpbik7Ci0gIH0KLQotICBpZiAoX3N0YXRpY19wbHVnaW5zKSB7Ci0gICAgZnJlZSAoX3N0YXRpY19wbHVnaW5zKTsKLSAgICBfc3RhdGljX3BsdWdpbnMgPSBOVUxMOwotICAgIF9udW1fc3RhdGljX3BsdWdpbnMgPSAwOwotICB9Ci19Ci0KLS8qIFdoaXRlbGlzdCBlbnRyeSBmb3JtYXQ6Ci0gKgotICogICBwbHVnaW4xLHBsdWdpbjJAcGF0aHByZWZpeCBvcgotICogICBwbHVnaW4xLHBsdWdpbjJAKiBvciBqdXN0Ci0gKiAgIHBsdWdpbjEscGx1Z2luMiBvcgotICogICBzb3VyY2UtcGFja2FnZUBwYXRocHJlZml4IG9yCi0gKiAgIHNvdXJjZS1wYWNrYWdlQCogb3IganVzdAotICogICBzb3VyY2UtcGFja2FnZQotICoKLSAqIGllLiB0aGUgYml0IGJlZm9yZSB0aGUgcGF0aCB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCBib3RoIHRoZSBwbHVnaW4KLSAqIG5hbWUgYW5kIHRoZSBwbHVnaW4ncyBzb3VyY2UgcGFja2FnZSBuYW1lLCB0byBrZWVwIHRoZSBmb3JtYXQgc2ltcGxlLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wbHVnaW5fZGVzY19tYXRjaGVzX3doaXRlbGlzdF9lbnRyeSAoR3N0UGx1Z2luRGVzYyAqIGRlc2MsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgY29uc3QgZ2NoYXIgKiBwYXR0ZXJuKQotewotICBjb25zdCBnY2hhciAqc2VwOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgZ2NoYXIgKm5hbWU7Ci0KLSAgR1NUX0xPRyAoIldoaXRlbGlzdCBwYXR0ZXJuICclcycsIHBsdWdpbjogJXMgb2YgJXNAJXMiLCBwYXR0ZXJuLCBkZXNjLT5uYW1lLAotICAgICAgZGVzYy0+c291cmNlLCBHU1RfU1RSX05VTEwgKGZpbGVuYW1lKSk7Ci0KLSAgLyogZG8gd2UgaGF2ZSBhIHBhdGggcHJlZml4PyAqLwotICBzZXAgPSBzdHJjaHIgKHBhdHRlcm4sICdAJyk7Ci0gIGlmIChzZXAgIT0gTlVMTCAmJiBzdHJjbXAgKHNlcCwgIkAqIikgIT0gMCAmJiBzdHJjbXAgKHNlcCwgIkAiKSAhPSAwKSB7Ci0gICAgLyogcGF0aHMgYXJlIG5vdCBjYW5vbmljYWxpc2VkIG9yIHRyZWF0ZWQgd2l0aCByZWFscGF0aCgpIGhlcmUuIFRoaXMKLSAgICAgKiBzaG91bGQgYmUgZ29vZCBlbm91Z2ggZm9yIG91ciB1c2UgY2FzZSwgc2luY2Ugd2UganVzdCB1c2UgdGhlIHBhdGhzCi0gICAgICogYXV0b3Rvb2xzIHVzZXMsIGFuZCB0aG9zZSB3aWxsIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHNhbWUgcHJlZml4LiAqLwotICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMICYmICFnX3N0cl9oYXNfcHJlZml4IChmaWxlbmFtZSwgc2VwICsgMSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBHU1RfTE9HICgiJXMgbWF0Y2hlcyBwYXRoIHByZWZpeCAlcyIsIEdTVF9TVFJfTlVMTCAoZmlsZW5hbWUpLCBzZXAgKyAxKTsKLSAgfQotCi0gIGlmIChzZXAgIT0gTlVMTCkgewotICAgIG5hbWUgPSBnX3N0cm5kdXAgKHBhdHRlcm4sIChnc2l6ZSkgKHNlcCAtIHBhdHRlcm4pKTsKLSAgfSBlbHNlIHsKLSAgICBuYW1lID0gZ19zdHJkdXAgKHBhdHRlcm4pOwotICB9Ci0KLSAgZ19zdHJzdHJpcCAobmFtZSk7Ci0gIGlmICghZ19hc2NpaV9pc2FsbnVtICgqbmFtZSkpIHsKLSAgICBHU1RfV0FSTklORyAoIkludmFsaWQgd2hpdGVsaXN0IHBhdHRlcm46ICVzIiwgcGF0dGVybik7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgLyogbm93IGNoZWNrIHBsdWdpbiBuYW1lcyAvIHNvdXJjZSBwYWNrYWdlIG5hbWUgKi8KLSAgaWYgKHN0cmNociAobmFtZSwgJywnKSA9PSBOVUxMKSB7Ci0gICAgLyogb25seSBhIHNpbmdsZSBuYW1lOiBlaXRoZXIgYSBwbHVnaW4gbmFtZSBvciB0aGUgc291cmNlIHBhY2thZ2UgbmFtZSAqLwotICAgIHJldCA9IChzdHJjbXAgKGRlc2MtPnNvdXJjZSwgbmFtZSkgPT0gMCB8fCBzdHJjbXAgKGRlc2MtPm5hbWUsIG5hbWUpID09IDApOwotICB9IGVsc2UgewotICAgIGdjaGFyICoqbiwgKipuYW1lczsKLQotICAgIC8qIG11bHRpcGxlIG5hbWVzOiBhc3N1bWUgdGhlc2UgYXJlIHBsdWdpbiBuYW1lcyAqLwotICAgIG5hbWVzID0gZ19zdHJzcGxpdCAobmFtZSwgIiwiLCAtMSk7Ci0gICAgZm9yIChuID0gbmFtZXM7IG4gIT0gTlVMTCAmJiAqbiAhPSBOVUxMOyArK24pIHsKLSAgICAgIGdfc3Ryc3RyaXAgKCpuKTsKLSAgICAgIGlmIChzdHJjbXAgKGRlc2MtPm5hbWUsICpuKSA9PSAwKSB7Ci0gICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBnX3N0cmZyZWV2IChuYW1lcyk7Ci0gIH0KLQotICBHU1RfTE9HICgicGx1Z2luIC8gc291cmNlIHBhY2thZ2UgbmFtZSBtYXRjaDogJWQiLCByZXQpOwotCi1kb25lOgotCi0gIGdfZnJlZSAobmFtZSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1wcml2X2dzdF9wbHVnaW5fZGVzY19pc193aGl0ZWxpc3RlZCAoR3N0UGx1Z2luRGVzYyAqIGRlc2MsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSkKLXsKLSAgZ2NoYXIgKiplbnRyeTsKLQotICBpZiAoX3BsdWdpbl9sb2FkaW5nX3doaXRlbGlzdCA9PSBOVUxMKQotICAgIHJldHVybiBUUlVFOwotCi0gIGZvciAoZW50cnkgPSBfcGx1Z2luX2xvYWRpbmdfd2hpdGVsaXN0OyAqZW50cnkgIT0gTlVMTDsgKytlbnRyeSkgewotICAgIGlmIChnc3RfcGx1Z2luX2Rlc2NfbWF0Y2hlc193aGl0ZWxpc3RfZW50cnkgKGRlc2MsIGZpbGVuYW1lLCAqZW50cnkpKSB7Ci0gICAgICBHU1RfTE9HICgiUGx1Z2luICVzIGlzIGluIHdoaXRlbGlzdCIsIGZpbGVuYW1lKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIEdTVF9MT0cgKCJQbHVnaW4gJXMgKHBhY2thZ2UgJXMsIGZpbGUgJXMpIG5vdCBpbiB3aGl0ZWxpc3QiLCBkZXNjLT5uYW1lLAotICAgICAgZGVzYy0+c291cmNlLCBmaWxlbmFtZSk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotZ2Jvb2xlYW4KLXByaXZfZ3N0X3BsdWdpbl9sb2FkaW5nX2hhdmVfd2hpdGVsaXN0ICh2b2lkKQotewotICByZXR1cm4gKF9wbHVnaW5fbG9hZGluZ193aGl0ZWxpc3QgIT0gTlVMTCk7Ci19Ci0KLWd1aW50MzIKLXByaXZfZ3N0X3BsdWdpbl9sb2FkaW5nX2dldF93aGl0ZWxpc3RfaGFzaCAodm9pZCkKLXsKLSAgZ3VpbnQzMiBoYXNoID0gMDsKLQotICBpZiAoX3BsdWdpbl9sb2FkaW5nX3doaXRlbGlzdCAhPSBOVUxMKSB7Ci0gICAgZ2NoYXIgKip3OwotCi0gICAgZm9yICh3ID0gX3BsdWdpbl9sb2FkaW5nX3doaXRlbGlzdDsgKncgIT0gTlVMTDsgKyt3KQotICAgICAgaGFzaCBePSBnX3N0cl9oYXNoICgqdyk7Ci0gIH0KLQotICByZXR1cm4gaGFzaDsKLX0KLQotLyogdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBleHRlbmRlZCB0byBjaGVjayBpZiB0aGUgcGx1Z2luIGxpY2Vuc2UgbWF0Y2hlcyB0aGUKLSAqIGFwcGxpY2F0aW9ucyBsaWNlbnNlICh3b3VsZCByZXF1aXJlIHRoZSBhcHAgdG8gcmVnaXN0ZXIgaXRzIGxpY2Vuc2Ugc29tZWhvdykuCi0gKiBXZSdsbCB3YWl0IGZvciBzb21lb25lIHdobydzIGludGVyZXN0ZWQgaW4gaXQgdG8gY29kZSBpdCA6KQotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wbHVnaW5fY2hlY2tfbGljZW5zZSAoY29uc3QgZ2NoYXIgKiBsaWNlbnNlKQotewotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAodmFsaWRfbGljZW5zZXNfaWR4KTsgKytpKSB7Ci0gICAgaWYgKHN0cmNtcCAobGljZW5zZSwgdmFsaWRfbGljZW5zZXMgKyB2YWxpZF9saWNlbnNlc19pZHhbaV0pID09IDApCi0gICAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BsdWdpbl9jaGVja192ZXJzaW9uIChnaW50IG1ham9yLCBnaW50IG1pbm9yKQotewotICAvKiByZXR1cm4gTlVMTCBpZiB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVycyBhcmUgbm90IGNvbXBhdGlibGUgKi8KLSAgLyogd2l0aCBvdXJzLiAqLwotICBpZiAobWFqb3IgIT0gR1NUX1ZFUlNJT05fTUFKT1IgfHwgbWlub3IgPiBHU1RfVkVSU0lPTl9NSU5PUikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RQbHVnaW4gKgotZ3N0X3BsdWdpbl9yZWdpc3Rlcl9mdW5jIChHc3RQbHVnaW4gKiBwbHVnaW4sIGNvbnN0IEdzdFBsdWdpbkRlc2MgKiBkZXNjLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgaWYgKCFnc3RfcGx1Z2luX2NoZWNrX3ZlcnNpb24gKGRlc2MtPm1ham9yX3ZlcnNpb24sIGRlc2MtPm1pbm9yX3ZlcnNpb24pKSB7Ci0gICAgaWYgKEdTVF9DQVRfREVGQVVMVCkKLSAgICAgIEdTVF9XQVJOSU5HICgicGx1Z2luIFwiJXNcIiBoYXMgaW5jb21wYXRpYmxlIHZlcnNpb24gIgotICAgICAgICAgICIocGx1Z2luOiAlZC4lZCwgZ3N0OiAlZCwlZCksIG5vdCBsb2FkaW5nIiwKLSAgICAgICAgICBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZmlsZW5hbWUpLCBkZXNjLT5tYWpvcl92ZXJzaW9uLAotICAgICAgICAgIGRlc2MtPm1pbm9yX3ZlcnNpb24sIEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoIWRlc2MtPmxpY2Vuc2UgfHwgIWRlc2MtPmRlc2NyaXB0aW9uIHx8ICFkZXNjLT5zb3VyY2UgfHwKLSAgICAgICFkZXNjLT5wYWNrYWdlIHx8ICFkZXNjLT5vcmlnaW4pIHsKLSAgICBpZiAoR1NUX0NBVF9ERUZBVUxUKQotICAgICAgR1NUX1dBUk5JTkcgKCJwbHVnaW4gXCIlc1wiIGhhcyBtaXNzaW5nIGRldGFpbCBpbiBHc3RQbHVnaW5EZXNjLCBub3QgIgotICAgICAgICAgICJsb2FkaW5nIiwgR1NUX1NUUl9OVUxMIChwbHVnaW4tPmZpbGVuYW1lKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoIWdzdF9wbHVnaW5fY2hlY2tfbGljZW5zZSAoZGVzYy0+bGljZW5zZSkpIHsKLSAgICBpZiAoR1NUX0NBVF9ERUZBVUxUKQotICAgICAgR1NUX1dBUk5JTkcgKCJwbHVnaW4gXCIlc1wiIGhhcyBpbnZhbGlkIGxpY2Vuc2UgXCIlc1wiLCBub3QgbG9hZGluZyIsCi0gICAgICAgICAgR1NUX1NUUl9OVUxMIChwbHVnaW4tPmZpbGVuYW1lKSwgZGVzYy0+bGljZW5zZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoR1NUX0NBVF9ERUZBVUxUKQotICAgIEdTVF9MT0cgKCJwbHVnaW4gXCIlc1wiIGxvb2tzIGdvb2QiLCBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZmlsZW5hbWUpKTsKLQotICBnc3RfcGx1Z2luX2Rlc2NfY29weSAoJnBsdWdpbi0+ZGVzYywgZGVzYyk7Ci0KLSAgLyogbWFrZSByZXNpZGVudCBzbyB3ZSdyZSByZWFsbHkgc3VyZSBpdCBuZXZlciBnZXRzIHVubG9hZGVkIGFnYWluLgotICAgKiBUaGVvcmV0aWNhbGx5IHRoaXMgaXMgbm90IG5lZWRlZCwgYnV0IHByYWN0aWNhbGx5IGl0IGRvZXNuJ3QgaHVydC4KLSAgICogQW5kIHdlJ3JlIHJhdGhlciBzYWZlIHRoYW4gc29ycnkuICovCi0gIGlmIChwbHVnaW4tPm1vZHVsZSkKLSAgICBnX21vZHVsZV9tYWtlX3Jlc2lkZW50IChwbHVnaW4tPm1vZHVsZSk7Ci0KLSAgaWYgKHVzZXJfZGF0YSkgewotICAgIGlmICghKCgoR3N0UGx1Z2luSW5pdEZ1bGxGdW5jKSAoZGVzYy0+cGx1Z2luX2luaXQpKSAocGx1Z2luLCB1c2VyX2RhdGEpKSkgewotICAgICAgaWYgKEdTVF9DQVRfREVGQVVMVCkKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJwbHVnaW4gXCIlc1wiIGZhaWxlZCB0byBpbml0aWFsaXNlIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAocGx1Z2luLT5maWxlbmFtZSkpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmICghKChkZXNjLT5wbHVnaW5faW5pdCkgKHBsdWdpbikpKSB7Ci0gICAgICBpZiAoR1NUX0NBVF9ERUZBVUxUKQotICAgICAgICBHU1RfV0FSTklORyAoInBsdWdpbiBcIiVzXCIgZmFpbGVkIHRvIGluaXRpYWxpc2UiLAotICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChwbHVnaW4tPmZpbGVuYW1lKSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0KLQotICBpZiAoR1NUX0NBVF9ERUZBVUxUKQotICAgIEdTVF9MT0cgKCJwbHVnaW4gXCIlc1wiIGluaXRpYWxpc2VkIiwgR1NUX1NUUl9OVUxMIChwbHVnaW4tPmZpbGVuYW1lKSk7Ci0KLSAgcmV0dXJuIHBsdWdpbjsKLX0KLQotI2lmZGVmIEhBVkVfU0lHQUNUSU9OCi1zdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRhY3Rpb247Ci1zdGF0aWMgZ2Jvb2xlYW4gX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9pc19zZXR1cCA9IEZBTFNFOwotCi0vKgotICogX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9yZXN0b3JlOgotICogc2VnZmF1bHQgaGFuZGxlciByZXN0b3JlcgotICovCi1zdGF0aWMgdm9pZAotX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9yZXN0b3JlICh2b2lkKQotewotICBpZiAoIV9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfaXNfc2V0dXApCi0gICAgcmV0dXJuOwotCi0gIF9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfaXNfc2V0dXAgPSBGQUxTRTsKLQotICBzaWdhY3Rpb24gKFNJR1NFR1YsICZvbGRhY3Rpb24sIE5VTEwpOwotfQotCi0vKgotICogX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9zaWdoYW5kbGVyOgotICogc2VnZmF1bHQgaGFuZGxlciBpbXBsZW1lbnRhdGlvbgotICovCi1zdGF0aWMgdm9pZAotX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9zaWdoYW5kbGVyIChpbnQgc2lnbnVtKQotewotICAvKiBXZSBuZWVkIHRvIHJlc3RvcmUgdGhlIGZhdWx0IGhhbmRsZXIgb3Igd2UnbGwga2VlcCBnZXR0aW5nIGl0ICovCi0gIF9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfcmVzdG9yZSAoKTsKLQotICBzd2l0Y2ggKHNpZ251bSkgewotICAgIGNhc2UgU0lHU0VHVjoKLSAgICAgIGdfcHJpbnQgKCJcbkVSUk9SOiAiKTsKLSAgICAgIGdfcHJpbnQgKCJDYXVnaHQgYSBzZWdtZW50YXRpb24gZmF1bHQgd2hpbGUgbG9hZGluZyBwbHVnaW4gZmlsZTpcbiIpOwotICAgICAgZ19wcmludCAoIiVzXG5cbiIsIF9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfZmlsZW5hbWUpOwotICAgICAgZ19wcmludCAoIlBsZWFzZSBlaXRoZXI6XG4iKTsKLSAgICAgIGdfcHJpbnQgKCItIHJlbW92ZSBpdCBhbmQgcmVzdGFydC5cbiIpOwotICAgICAgZ19wcmludAotICAgICAgICAgICgiLSBydW4gd2l0aCAtLWdzdC1kaXNhYmxlLXNlZ3RyYXAgLS1nc3QtZGlzYWJsZS1yZWdpc3RyeS1mb3JrIGFuZCBkZWJ1Zy5cbiIpOwotICAgICAgZXhpdCAoLTEpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfcHJpbnQgKCJDYXVnaHQgdW5oYW5kbGVkIHNpZ25hbCBvbiBwbHVnaW4gbG9hZGluZ1xuIik7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKgotICogX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9zZXR1cDoKLSAqIHNldHMgdXAgdGhlIHNlZ2ZhdWx0IGhhbmRsZXIKLSAqLwotc3RhdGljIHZvaWQKLV9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfc2V0dXAgKHZvaWQpCi17Ci0gIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotCi0gIC8qIGlmIGFza2VkIHRvIGxlYXZlIHNlZ2ZhdWx0cyBhbG9uZSwganVzdCByZXR1cm4gKi8KLSAgaWYgKCFnc3Rfc2VndHJhcF9pc19lbmFibGVkICgpKQotICAgIHJldHVybjsKLQotICBpZiAoX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9pc19zZXR1cCkKLSAgICByZXR1cm47Ci0KLSAgX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9pc19zZXR1cCA9IFRSVUU7Ci0KLSAgbWVtc2V0ICgmYWN0aW9uLCAwLCBzaXplb2YgKGFjdGlvbikpOwotICBhY3Rpb24uc2FfaGFuZGxlciA9IF9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfc2lnaGFuZGxlcjsKLQotICBzaWdhY3Rpb24gKFNJR1NFR1YsICZhY3Rpb24sICZvbGRhY3Rpb24pOwotfQotI2Vsc2UgLyogIUhBVkVfU0lHQUNUSU9OICovCi1zdGF0aWMgdm9pZAotX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9yZXN0b3JlICh2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZAotX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9zZXR1cCAodm9pZCkKLXsKLX0KLSNlbmRpZiAvKiBIQVZFX1NJR0FDVElPTiAqLwotCi0vKiBnX3RpbWVfdmFsX2Zyb21faXNvODYwMSgpIGRvZXNuJ3QgZG8gcXVpdGUgd2hhdCB3ZSB3YW50ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWNoZWNrX3JlbGVhc2VfZGF0ZXRpbWUgKGNvbnN0IGdjaGFyICogZGF0ZV90aW1lKQotewotICBndWludDY0IHZhbDsKLQotICAvKiB3ZSByZXF1aXJlIFlZWVktTU0tREQgb3IgWVlZWS1NTS1ERFRISDpNTVogZm9ybWF0ICovCi0gIGlmICghZ19hc2NpaV9pc2RpZ2l0ICgqZGF0ZV90aW1lKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgdmFsID0gZ19hc2NpaV9zdHJ0b3VsbCAoZGF0ZV90aW1lLCAoZ2NoYXIgKiopICYgZGF0ZV90aW1lLCAxMCk7Ci0gIGlmICh2YWwgPCAyMDAwIHx8IHZhbCA+IDIxMDAgfHwgKmRhdGVfdGltZSAhPSAnLScpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHZhbCA9IGdfYXNjaWlfc3RydG91bGwgKGRhdGVfdGltZSArIDEsIChnY2hhciAqKikgJiBkYXRlX3RpbWUsIDEwKTsKLSAgaWYgKHZhbCA9PSAwIHx8IHZhbCA+IDEyIHx8ICpkYXRlX3RpbWUgIT0gJy0nKQotICAgIHJldHVybiBGQUxTRTsKLQotICB2YWwgPSBnX2FzY2lpX3N0cnRvdWxsIChkYXRlX3RpbWUgKyAxLCAoZ2NoYXIgKiopICYgZGF0ZV90aW1lLCAxMCk7Ci0gIGlmICh2YWwgPT0gMCB8fCB2YWwgPiAzMikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogZW5kIG9mIHN0cmluZyBvciBkYXRlL3RpbWUgc2VwYXJhdG9yICsgSEg6TU1aICovCi0gIGlmICgqZGF0ZV90aW1lID09ICdUJyB8fCAqZGF0ZV90aW1lID09ICcgJykgewotICAgIHZhbCA9IGdfYXNjaWlfc3RydG91bGwgKGRhdGVfdGltZSArIDEsIChnY2hhciAqKikgJiBkYXRlX3RpbWUsIDEwKTsKLSAgICBpZiAodmFsID4gMjQgfHwgKmRhdGVfdGltZSAhPSAnOicpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICB2YWwgPSBnX2FzY2lpX3N0cnRvdWxsIChkYXRlX3RpbWUgKyAxLCAoZ2NoYXIgKiopICYgZGF0ZV90aW1lLCAxMCk7Ci0gICAgaWYgKHZhbCA+IDU5IHx8ICpkYXRlX3RpbWUgIT0gJ1onKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgKytkYXRlX3RpbWU7Ci0gIH0KLQotICByZXR1cm4gKCpkYXRlX3RpbWUgPT0gJ1wwJyk7Ci19Ci0KLXN0YXRpYyBHTXV0ZXggZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4OwotCi0jZGVmaW5lIENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEKGRlc2MsZmllbGQsZm4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKEdfVU5MSUtFTFkgKChkZXNjKS0+ZmllbGQgPT0gTlVMTCB8fCAqKGRlc2MpLT5maWVsZCA9PSAnXDAnKSkgeyAgICAgICAgXAotICAgIGdfd2FybmluZyAoIlBsdWdpbiBkZXNjcmlwdGlvbiBmb3IgJyVzJyBoYXMgbm8gdmFsaWQgJXMgZmllbGQiLCBmbiwgR19TVFJJTkdJRlkgKGZpZWxkKSk7IFwKLSAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdTVF9QTFVHSU5fRVJST1IsIEdTVF9QTFVHSU5fRVJST1JfTU9EVUxFLCBcCi0gICAgICAgICJQbHVnaW4gJXMgaGFzIGludmFsaWQgcGx1Z2luIGRlc2NyaXB0aW9uIGZpZWxkICclcyciLCBcCi0gICAgICAgIGZpbGVuYW1lLCBHX1NUUklOR0lGWSAoZmllbGQpKTsgXAotICAgIGdvdG8gcmV0dXJuX2Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotLyoqCi0gKiBnc3RfcGx1Z2luX2xvYWRfZmlsZToKLSAqIEBmaWxlbmFtZTogdGhlIHBsdWdpbiBmaWxlbmFtZSB0byBsb2FkCi0gKiBAZXJyb3I6IHBvaW50ZXIgdG8gYSAlTlVMTC12YWx1ZWQgR0Vycm9yCi0gKgotICogTG9hZHMgdGhlIGdpdmVuIHBsdWdpbiBhbmQgcmVmcyBpdC4gIENhbGxlciBuZWVkcyB0byB1bnJlZiBhZnRlciB1c2UuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHJlZmVyZW5jZSB0byB0aGUgZXhpc3RpbmcgbG9hZGVkIEdzdFBsdWdpbiwgYSAKLSAqIHJlZmVyZW5jZSB0byB0aGUgbmV3bHktbG9hZGVkIEdzdFBsdWdpbiwgb3IgJU5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCi0gKi8KLUdzdFBsdWdpbiAqCi1nc3RfcGx1Z2luX2xvYWRfZmlsZSAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgR0Vycm9yICoqIGVycm9yKQotewotICByZXR1cm4gX3ByaXZfZ3N0X3BsdWdpbl9sb2FkX2ZpbGVfZm9yX3JlZ2lzdHJ5IChmaWxlbmFtZSwgTlVMTCwgZXJyb3IpOwotfQotCi1Hc3RQbHVnaW4gKgotX3ByaXZfZ3N0X3BsdWdpbl9sb2FkX2ZpbGVfZm9yX3JlZ2lzdHJ5IChjb25zdCBnY2hhciAqIGZpbGVuYW1lLAotICAgIEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgR3N0UGx1Z2luRGVzYyAqZGVzYzsKLSAgR3N0UGx1Z2luICpwbHVnaW47Ci0gIEdNb2R1bGUgKm1vZHVsZTsKLSAgZ2Jvb2xlYW4gcmV0OwotICBncG9pbnRlciBwdHI7Ci0gIEdTdGF0QnVmIGZpbGVfc3RhdHVzOwotICBnYm9vbGVhbiBuZXdfcGx1Z2luID0gVFJVRTsKLSAgR01vZHVsZUZsYWdzIGZsYWdzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWxlbmFtZSAhPSBOVUxMLCBOVUxMKTsKLQotICBpZiAocmVnaXN0cnkgPT0gTlVMTCkKLSAgICByZWdpc3RyeSA9IGdzdF9yZWdpc3RyeV9nZXQgKCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4KTsKLQotICBwbHVnaW4gPSBnc3RfcmVnaXN0cnlfbG9va3VwIChyZWdpc3RyeSwgZmlsZW5hbWUpOwotICBpZiAocGx1Z2luKSB7Ci0gICAgaWYgKHBsdWdpbi0+bW9kdWxlKSB7Ci0gICAgICAvKiBhbHJlYWR5IGxvYWRlZCAqLwotICAgICAgZ19tdXRleF91bmxvY2sgKCZnc3RfcGx1Z2luX2xvYWRpbmdfbXV0ZXgpOwotICAgICAgcmV0dXJuIHBsdWdpbjsKLSAgICB9IGVsc2UgewotICAgICAgLyogbG9hZCBwbHVnaW4gYW5kIHVwZGF0ZSBmaWVsZHMgKi8KLSAgICAgIG5ld19wbHVnaW4gPSBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BMVUdJTl9MT0FESU5HLCAiYXR0ZW1wdCB0byBsb2FkIHBsdWdpbiBcIiVzXCIiLAotICAgICAgZmlsZW5hbWUpOwotCi0gIGlmICghZ19tb2R1bGVfc3VwcG9ydGVkICgpKSB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QTFVHSU5fTE9BRElORywgIm1vZHVsZSBsb2FkaW5nIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICBnX3NldF9lcnJvciAoZXJyb3IsCi0gICAgICAgIEdTVF9QTFVHSU5fRVJST1IsCi0gICAgICAgIEdTVF9QTFVHSU5fRVJST1JfTU9EVUxFLCAiRHluYW1pYyBsb2FkaW5nIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICBnb3RvIHJldHVybl9lcnJvcjsKLSAgfQotCi0gIGlmIChnX3N0YXQgKGZpbGVuYW1lLCAmZmlsZV9zdGF0dXMpKSB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QTFVHSU5fTE9BRElORywgInByb2JsZW0gYWNjZXNzaW5nIGZpbGUiKTsKLSAgICBnX3NldF9lcnJvciAoZXJyb3IsCi0gICAgICAgIEdTVF9QTFVHSU5fRVJST1IsCi0gICAgICAgIEdTVF9QTFVHSU5fRVJST1JfTU9EVUxFLCAiUHJvYmxlbSBhY2Nlc3NpbmcgZmlsZSAlczogJXMiLCBmaWxlbmFtZSwKLSAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICBnb3RvIHJldHVybl9lcnJvcjsKLSAgfQotCi0gIGZsYWdzID0gR19NT0RVTEVfQklORF9MT0NBTDsKLSAgLyogbGliZ3N0cHl0aG9uLnNvIGlzIHRoZSBnc3QtcHl0aG9uIHBsdWdpbiBsb2FkZXIuIEl0IG5lZWRzIHRvIGJlIGxvYWRlZCB3aXRoCi0gICAqIEdfTU9EVUxFX0JJTkRfTEFaWS4KLSAgICoKLSAgICogSWRlYWxseSB0aGVyZSBzaG91bGQgYmUgYSBnZW5lcmljIHdheSBmb3IgcGx1Z2lucyB0byBzcGVjaWZ5IHRoYXQgdGhleQotICAgKiBuZWVkIHRvIGJlIGxvYWRlZCB3aXRoIF9MQVpZLgotICAgKiAqLwotICBpZiAoc3Ryc3RyIChmaWxlbmFtZSwgImxpYmdzdHB5dGhvbiIpKQotICAgIGZsYWdzIHw9IEdfTU9EVUxFX0JJTkRfTEFaWTsKLQotICBtb2R1bGUgPSBnX21vZHVsZV9vcGVuIChmaWxlbmFtZSwgZmxhZ3MpOwotICBpZiAobW9kdWxlID09IE5VTEwpIHsKLSAgICBHU1RfQ0FUX1dBUk5JTkcgKEdTVF9DQVRfUExVR0lOX0xPQURJTkcsICJtb2R1bGVfb3BlbiBmYWlsZWQ6ICVzIiwKLSAgICAgICAgZ19tb2R1bGVfZXJyb3IgKCkpOwotICAgIGdfc2V0X2Vycm9yIChlcnJvciwKLSAgICAgICAgR1NUX1BMVUdJTl9FUlJPUiwgR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEUsICJPcGVuaW5nIG1vZHVsZSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgZ19tb2R1bGVfZXJyb3IgKCkpOwotICAgIC8qIElmIHdlIGZhaWxlZCB0byBvcGVuIHRoZSBzaGFyZWQgb2JqZWN0LCB0aGVuIGl0J3MgcHJvYmFibHkgYmVjYXVzZSBhCi0gICAgICogcGx1Z2luIGlzIGxpbmtlZCBhZ2FpbnN0IHRoZSB3cm9uZyBsaWJyYXJpZXMuIFByaW50IG91dCBhbiBlYXN5LXRvLXNlZQotICAgICAqIG1lc3NhZ2UgaW4gdGhpcyBjYXNlLiAqLwotICAgIGdfd2FybmluZyAoIkZhaWxlZCB0byBsb2FkIHBsdWdpbiAnJXMnOiAlcyIsIGZpbGVuYW1lLCBnX21vZHVsZV9lcnJvciAoKSk7Ci0gICAgZ290byByZXR1cm5fZXJyb3I7Ci0gIH0KLQotICByZXQgPSBnX21vZHVsZV9zeW1ib2wgKG1vZHVsZSwgImdzdF9wbHVnaW5fZGVzYyIsICZwdHIpOwotICBpZiAoIXJldCkgewotICAgIEdTVF9ERUJVRyAoIkNvdWxkIG5vdCBmaW5kIHBsdWdpbiBlbnRyeSBwb2ludCBpbiBcIiVzXCIiLCBmaWxlbmFtZSk7Ci0gICAgZ19zZXRfZXJyb3IgKGVycm9yLAotICAgICAgICBHU1RfUExVR0lOX0VSUk9SLAotICAgICAgICBHU1RfUExVR0lOX0VSUk9SX01PRFVMRSwKLSAgICAgICAgIkZpbGUgXCIlc1wiIGlzIG5vdCBhIEdTdHJlYW1lciBwbHVnaW4iLCBmaWxlbmFtZSk7Ci0gICAgZ19tb2R1bGVfY2xvc2UgKG1vZHVsZSk7Ci0gICAgZ290byByZXR1cm5fZXJyb3I7Ci0gIH0KLQotICBkZXNjID0gKEdzdFBsdWdpbkRlc2MgKikgcHRyOwotCi0gIGlmIChwcml2X2dzdF9wbHVnaW5fbG9hZGluZ19oYXZlX3doaXRlbGlzdCAoKSAmJgotICAgICAgIXByaXZfZ3N0X3BsdWdpbl9kZXNjX2lzX3doaXRlbGlzdGVkIChkZXNjLCBmaWxlbmFtZSkpIHsKLSAgICBHU1RfSU5GTyAoIldoaXRlbGlzdCBzcGVjaWZpZWQgYW5kIHBsdWdpbiBub3QgaW4gd2hpdGVsaXN0LCBub3QgbG9hZGluZzogIgotICAgICAgICAibmFtZT0lcywgcGFja2FnZT0lcywgZmlsZT0lcyIsIGRlc2MtPm5hbWUsIGRlc2MtPnNvdXJjZSwgZmlsZW5hbWUpOwotICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX1BMVUdJTl9FUlJPUiwgR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEUsCi0gICAgICAgICJOb3QgbG9hZGluZyBwbHVnaW4gZmlsZSBcIiVzXCIsIG5vdCBpbiB3aGl0ZWxpc3QiLCBmaWxlbmFtZSk7Ci0gICAgZ19tb2R1bGVfY2xvc2UgKG1vZHVsZSk7Ci0gICAgZ290byByZXR1cm5fZXJyb3I7Ci0gIH0KLQotICBpZiAobmV3X3BsdWdpbikgewotICAgIHBsdWdpbiA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1BMVUdJTiwgMCwgTlVMTCk7Ci0gICAgcGx1Z2luLT5maWxlX210aW1lID0gZmlsZV9zdGF0dXMuc3RfbXRpbWU7Ci0gICAgcGx1Z2luLT5maWxlX3NpemUgPSBmaWxlX3N0YXR1cy5zdF9zaXplOwotICAgIHBsdWdpbi0+ZmlsZW5hbWUgPSBnX3N0cmR1cCAoZmlsZW5hbWUpOwotICAgIHBsdWdpbi0+YmFzZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIChmaWxlbmFtZSk7Ci0gIH0KLQotICBwbHVnaW4tPm1vZHVsZSA9IG1vZHVsZTsKLSAgcGx1Z2luLT5vcmlnX2Rlc2MgPSBkZXNjOwotCi0gIGlmIChuZXdfcGx1Z2luKSB7Ci0gICAgLyogY2hlY2sgcGx1Z2luIGRlc2NyaXB0aW9uOiBjb21wbGFpbiBhYm91dCBiYWQgdmFsdWVzIGFuZCBmYWlsICovCi0gICAgQ0hFQ0tfUExVR0lOX0RFU0NfRklFTEQgKHBsdWdpbi0+b3JpZ19kZXNjLCBuYW1lLCBmaWxlbmFtZSk7Ci0gICAgQ0hFQ0tfUExVR0lOX0RFU0NfRklFTEQgKHBsdWdpbi0+b3JpZ19kZXNjLCBkZXNjcmlwdGlvbiwgZmlsZW5hbWUpOwotICAgIENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEIChwbHVnaW4tPm9yaWdfZGVzYywgdmVyc2lvbiwgZmlsZW5hbWUpOwotICAgIENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEIChwbHVnaW4tPm9yaWdfZGVzYywgbGljZW5zZSwgZmlsZW5hbWUpOwotICAgIENIRUNLX1BMVUdJTl9ERVNDX0ZJRUxEIChwbHVnaW4tPm9yaWdfZGVzYywgc291cmNlLCBmaWxlbmFtZSk7Ci0gICAgQ0hFQ0tfUExVR0lOX0RFU0NfRklFTEQgKHBsdWdpbi0+b3JpZ19kZXNjLCBwYWNrYWdlLCBmaWxlbmFtZSk7Ci0gICAgQ0hFQ0tfUExVR0lOX0RFU0NfRklFTEQgKHBsdWdpbi0+b3JpZ19kZXNjLCBvcmlnaW4sIGZpbGVuYW1lKTsKLQotICAgIGlmIChwbHVnaW4tPm9yaWdfZGVzYy0+bmFtZSAhPSBOVUxMICYmIHBsdWdpbi0+b3JpZ19kZXNjLT5uYW1lWzBdID09ICciJykgewotICAgICAgZ193YXJuaW5nICgiSW52YWxpZCBwbHVnaW4gbmFtZSAnJXMnIC0gZml4IHlvdXIgR1NUX1BMVUdJTl9ERUZJTkUgIgotICAgICAgICAgICIocmVtb3ZlIHF1b3RlcyBhcm91bmQgcGx1Z2luIG5hbWUpIiwgcGx1Z2luLT5vcmlnX2Rlc2MtPm5hbWUpOwotICAgIH0KLQotICAgIGlmIChwbHVnaW4tPm9yaWdfZGVzYy0+cmVsZWFzZV9kYXRldGltZSAhPSBOVUxMICYmCi0gICAgICAgICFjaGVja19yZWxlYXNlX2RhdGV0aW1lIChwbHVnaW4tPm9yaWdfZGVzYy0+cmVsZWFzZV9kYXRldGltZSkpIHsKLSAgICAgIEdTVF9FUlJPUiAoIkdzdFBsdWdpbkRlc2MgZm9yICclcycgaGFzIGludmFsaWQgZGF0ZXRpbWUgJyVzJyIsCi0gICAgICAgICAgZmlsZW5hbWUsIHBsdWdpbi0+b3JpZ19kZXNjLT5yZWxlYXNlX2RhdGV0aW1lKTsKLSAgICAgIHBsdWdpbi0+b3JpZ19kZXNjLT5yZWxlYXNlX2RhdGV0aW1lID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICBHU1RfTE9HICgiUGx1Z2luICVwIGZvciBmaWxlIFwiJXNcIiBwcmVwYXJlZCwgY2FsbGluZyBlbnRyeSBmdW5jdGlvbi4uLiIsCi0gICAgICBwbHVnaW4sIGZpbGVuYW1lKTsKLQotICAvKiB0aGlzIGlzIHdoZXJlIHdlIGxvYWQgdGhlIGFjdHVhbCAuc28sIHNvIGxldCdzIHRyYXAgU0lHU0VHViAqLwotICBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3NldHVwICgpOwotICBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX2ZpbGVuYW1lID0gcGx1Z2luLT5maWxlbmFtZTsKLQotICBHU1RfTE9HICgiUGx1Z2luICVwIGZvciBmaWxlIFwiJXNcIiBwcmVwYXJlZCwgcmVnaXN0ZXJpbmcuLi4iLAotICAgICAgcGx1Z2luLCBmaWxlbmFtZSk7Ci0KLSAgaWYgKCFnc3RfcGx1Z2luX3JlZ2lzdGVyX2Z1bmMgKHBsdWdpbiwgcGx1Z2luLT5vcmlnX2Rlc2MsIE5VTEwpKSB7Ci0gICAgLyogcmVtb3ZlIHNpZ25hbCBoYW5kbGVyICovCi0gICAgX2dzdF9wbHVnaW5fZmF1bHRfaGFuZGxlcl9yZXN0b3JlICgpOwotICAgIEdTVF9ERUJVRyAoImdzdF9wbHVnaW5fcmVnaXN0ZXJfZnVuYyBmYWlsZWQgZm9yIHBsdWdpbiBcIiVzXCIiLCBmaWxlbmFtZSk7Ci0gICAgLyogcGx1Z2luID09IE5VTEwgKi8KLSAgICBnX3NldF9lcnJvciAoZXJyb3IsCi0gICAgICAgIEdTVF9QTFVHSU5fRVJST1IsCi0gICAgICAgIEdTVF9QTFVHSU5fRVJST1JfTU9EVUxFLAotICAgICAgICAiRmlsZSBcIiVzXCIgYXBwZWFycyB0byBiZSBhIEdTdHJlYW1lciBwbHVnaW4sIGJ1dCBpdCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIsCi0gICAgICAgIGZpbGVuYW1lKTsKLSAgICBnb3RvIHJldHVybl9lcnJvcjsKLSAgfQotCi0gIC8qIHJlbW92ZSBzaWduYWwgaGFuZGxlciAqLwotICBfZ3N0X3BsdWdpbl9mYXVsdF9oYW5kbGVyX3Jlc3RvcmUgKCk7Ci0gIF9nc3RfcGx1Z2luX2ZhdWx0X2hhbmRsZXJfZmlsZW5hbWUgPSBOVUxMOwotICBHU1RfSU5GTyAoInBsdWdpbiBcIiVzXCIgbG9hZGVkIiwgcGx1Z2luLT5maWxlbmFtZSk7Ci0KLSAgaWYgKG5ld19wbHVnaW4pIHsKLSAgICBnc3Rfb2JqZWN0X3JlZiAocGx1Z2luKTsKLSAgICBnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiAocmVnaXN0cnksIHBsdWdpbik7Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJmdzdF9wbHVnaW5fbG9hZGluZ19tdXRleCk7Ci0gIHJldHVybiBwbHVnaW47Ci0KLXJldHVybl9lcnJvcjoKLSAgewotICAgIGlmIChwbHVnaW4pCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmZ3N0X3BsdWdpbl9sb2FkaW5nX211dGV4KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BsdWdpbl9kZXNjX2NvcHkgKEdzdFBsdWdpbkRlc2MgKiBkZXN0LCBjb25zdCBHc3RQbHVnaW5EZXNjICogc3JjKQotewotICBkZXN0LT5tYWpvcl92ZXJzaW9uID0gc3JjLT5tYWpvcl92ZXJzaW9uOwotICBkZXN0LT5taW5vcl92ZXJzaW9uID0gc3JjLT5taW5vcl92ZXJzaW9uOwotICBkZXN0LT5uYW1lID0gZ19pbnRlcm5fc3RyaW5nIChzcmMtPm5hbWUpOwotICBkZXN0LT5kZXNjcmlwdGlvbiA9IGdfaW50ZXJuX3N0cmluZyAoc3JjLT5kZXNjcmlwdGlvbik7Ci0gIGRlc3QtPnBsdWdpbl9pbml0ID0gc3JjLT5wbHVnaW5faW5pdDsKLSAgZGVzdC0+dmVyc2lvbiA9IGdfaW50ZXJuX3N0cmluZyAoc3JjLT52ZXJzaW9uKTsKLSAgZGVzdC0+bGljZW5zZSA9IGdfaW50ZXJuX3N0cmluZyAoc3JjLT5saWNlbnNlKTsKLSAgZGVzdC0+c291cmNlID0gZ19pbnRlcm5fc3RyaW5nIChzcmMtPnNvdXJjZSk7Ci0gIGRlc3QtPnBhY2thZ2UgPSBnX2ludGVybl9zdHJpbmcgKHNyYy0+cGFja2FnZSk7Ci0gIGRlc3QtPm9yaWdpbiA9IGdfaW50ZXJuX3N0cmluZyAoc3JjLT5vcmlnaW4pOwotICBkZXN0LT5yZWxlYXNlX2RhdGV0aW1lID0gZ19pbnRlcm5fc3RyaW5nIChzcmMtPnJlbGVhc2VfZGF0ZXRpbWUpOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fZ2V0X25hbWU6Ci0gKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IHRoZSBuYW1lIG9mCi0gKgotICogR2V0IHRoZSBzaG9ydCBuYW1lIG9mIHRoZSBwbHVnaW4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luCi0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF9wbHVnaW5fZ2V0X25hbWUgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gcGx1Z2luLT5kZXNjLm5hbWU7Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb246Ci0gKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IGxvbmcgbmFtZSBvZgotICoKLSAqIEdldCB0aGUgbG9uZyBkZXNjcmlwdGl2ZSBuYW1lIG9mIHRoZSBwbHVnaW4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbG9uZyBuYW1lIG9mIHRoZSBwbHVnaW4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24gKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gcGx1Z2luLT5kZXNjLmRlc2NyaXB0aW9uOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lOgotICogQHBsdWdpbjogcGx1Z2luIHRvIGdldCB0aGUgZmlsZW5hbWUgb2YKLSAqCi0gKiBnZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBwbHVnaW4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgZmlsZW5hbWUgb2YgdGhlIHBsdWdpbgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfcGx1Z2luX2dldF9maWxlbmFtZSAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAocGx1Z2luICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBwbHVnaW4tPmZpbGVuYW1lOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fZ2V0X3ZlcnNpb246Ci0gKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IHRoZSB2ZXJzaW9uIG9mCi0gKgotICogZ2V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgdmVyc2lvbiBvZiB0aGUgcGx1Z2luCi0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF9wbHVnaW5fZ2V0X3ZlcnNpb24gKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gcGx1Z2luLT5kZXNjLnZlcnNpb247Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9nZXRfbGljZW5zZToKLSAqIEBwbHVnaW46IHBsdWdpbiB0byBnZXQgdGhlIGxpY2Vuc2Ugb2YKLSAqCi0gKiBnZXQgdGhlIGxpY2Vuc2Ugb2YgdGhlIHBsdWdpbgotICoKLSAqIFJldHVybnM6IHRoZSBsaWNlbnNlIG9mIHRoZSBwbHVnaW4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3BsdWdpbl9nZXRfbGljZW5zZSAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAocGx1Z2luICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBwbHVnaW4tPmRlc2MubGljZW5zZTsKLX0KLQotLyoqCi0gKiBnc3RfcGx1Z2luX2dldF9zb3VyY2U6Ci0gKiBAcGx1Z2luOiBwbHVnaW4gdG8gZ2V0IHRoZSBzb3VyY2Ugb2YKLSAqCi0gKiBnZXQgdGhlIHNvdXJjZSBtb2R1bGUgdGhlIHBsdWdpbiBiZWxvbmdzIHRvLgotICoKLSAqIFJldHVybnM6IHRoZSBzb3VyY2Ugb2YgdGhlIHBsdWdpbgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfcGx1Z2luX2dldF9zb3VyY2UgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gcGx1Z2luLT5kZXNjLnNvdXJjZTsKLX0KLQotLyoqCi0gKiBnc3RfcGx1Z2luX2dldF9wYWNrYWdlOgotICogQHBsdWdpbjogcGx1Z2luIHRvIGdldCB0aGUgcGFja2FnZSBvZgotICoKLSAqIGdldCB0aGUgcGFja2FnZSB0aGUgcGx1Z2luIGJlbG9uZ3MgdG8uCi0gKgotICogUmV0dXJuczogdGhlIHBhY2thZ2Ugb2YgdGhlIHBsdWdpbgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfcGx1Z2luX2dldF9wYWNrYWdlIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwbHVnaW4gIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHBsdWdpbi0+ZGVzYy5wYWNrYWdlOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fZ2V0X29yaWdpbjoKLSAqIEBwbHVnaW46IHBsdWdpbiB0byBnZXQgdGhlIG9yaWdpbiBvZgotICoKLSAqIGdldCB0aGUgVVJMIHdoZXJlIHRoZSBwbHVnaW4gY29tZXMgZnJvbQotICoKLSAqIFJldHVybnM6IHRoZSBvcmlnaW4gb2YgdGhlIHBsdWdpbgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfcGx1Z2luX2dldF9vcmlnaW4gKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gcGx1Z2luLT5kZXNjLm9yaWdpbjsKLX0KLQotLyoqCi0gKiBnc3RfcGx1Z2luX2dldF9yZWxlYXNlX2RhdGVfc3RyaW5nOgotICogQHBsdWdpbjogcGx1Z2luIHRvIGdldCB0aGUgcmVsZWFzZSBkYXRlIG9mCi0gKgotICogR2V0IHRoZSByZWxlYXNlIGRhdGUgKGFuZCBwb3NzaWJseSB0aW1lKSBpbiBmb3JtIG9mIGEgc3RyaW5nLCBpZiBhdmFpbGFibGUuCi0gKgotICogRm9yIG5vcm1hbCBHU3RyZWFtZXIgcGx1Z2luIHJlbGVhc2VzIHRoaXMgd2lsbCB1c3VhbGx5IGp1c3QgYmUgYSBkYXRlIGluCi0gKiB0aGUgZm9ybSBvZiAiWVlZWS1NTS1ERCIsIHdoaWxlIHByZS1yZWxlYXNlcyBhbmQgYnVpbGRzIGZyb20gZ2l0IG1heSBjb250YWluCi0gKiBhIHRpbWUgY29tcG9uZW50IGFmdGVyIHRoZSBkYXRlIGFzIHdlbGwsIGluIHdoaWNoIGNhc2UgdGhlIHN0cmluZyB3aWxsIGJlCi0gKiBmb3JtYXR0ZWQgbGlrZSAiWVlZWS1NTS1ERFRISDpNTVoiIChlLmcuICIyMDEyLTA0LTMwVDA5OjMwWiIpLgotICoKLSAqIFRoZXJlIG1heSBiZSBwbHVnaW5zIHRoYXQgZG8gbm90IGhhdmUgYSB2YWxpZCByZWxlYXNlIGRhdGUgc2V0IG9uIHRoZW0uCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogdGhlIGRhdGUgc3RyaW5nIG9mIHRoZSBwbHVnaW4sIG9yICVOVUxMIGlmIG5vdAotICogYXZhaWxhYmxlLgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfcGx1Z2luX2dldF9yZWxlYXNlX2RhdGVfc3RyaW5nIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwbHVnaW4gIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHBsdWdpbi0+ZGVzYy5yZWxlYXNlX2RhdGV0aW1lOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5faXNfbG9hZGVkOgotICogQHBsdWdpbjogcGx1Z2luIHRvIHF1ZXJ5Ci0gKgotICogcXVlcmllcyBpZiB0aGUgcGx1Z2luIGlzIGxvYWRlZCBpbnRvIG1lbW9yeQotICoKLSAqIFJldHVybnM6ICVUUlVFIGlzIGxvYWRlZCwgJUZBTFNFIG90aGVyd2lzZQotICovCi1nYm9vbGVhbgotZ3N0X3BsdWdpbl9pc19sb2FkZWQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBsdWdpbiAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIChwbHVnaW4tPm1vZHVsZSAhPSBOVUxMIHx8IHBsdWdpbi0+ZmlsZW5hbWUgPT0gTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9nZXRfY2FjaGVfZGF0YToKLSAqIEBwbHVnaW46IGEgcGx1Z2luCi0gKgotICogR2V0cyB0aGUgcGx1Z2luIHNwZWNpZmljIGRhdGEgY2FjaGUuIElmIGl0IGlzICVOVUxMIHRoZXJlIGlzIG5vIGNhY2hlZCBkYXRhCi0gKiBzdG9yZWQuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgcmVnaXN0cnkgaXMgZ2V0dGluZyByZWJ1aWx0LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiBUaGUgY2FjaGVkIGRhdGEgYXMgYQotICogI0dzdFN0cnVjdHVyZSBvciAlTlVMTC4KLSAqLwotY29uc3QgR3N0U3RydWN0dXJlICoKLWdzdF9wbHVnaW5fZ2V0X2NhY2hlX2RhdGEgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QTFVHSU4gKHBsdWdpbiksIE5VTEwpOwotCi0gIHJldHVybiBwbHVnaW4tPnByaXYtPmNhY2hlX2RhdGE7Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9zZXRfY2FjaGVfZGF0YToKLSAqIEBwbHVnaW46IGEgcGx1Z2luCi0gKiBAY2FjaGVfZGF0YTogKHRyYW5zZmVyIGZ1bGwpOiBhIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBkYXRhIHRvIGNhY2hlCi0gKgotICogQWRkcyBwbHVnaW4gc3BlY2lmaWMgZGF0YSB0byBjYWNoZS4gUGFzc2VzIHRoZSBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZSB0bwotICogdGhlIEBwbHVnaW4uCi0gKgotICogVGhlIGNhY2hlIGlzIGZsdXNoZWQgZXZlcnkgdGltZSB0aGUgcmVnaXN0cnkgaXMgcmVidWlsdC4KLSAqLwotdm9pZAotZ3N0X3BsdWdpbl9zZXRfY2FjaGVfZGF0YSAoR3N0UGx1Z2luICogcGx1Z2luLCBHc3RTdHJ1Y3R1cmUgKiBjYWNoZV9kYXRhKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUExVR0lOIChwbHVnaW4pKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1NUUlVDVFVSRSAoY2FjaGVfZGF0YSkpOwotCi0gIGlmIChwbHVnaW4tPnByaXYtPmNhY2hlX2RhdGEpIHsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHBsdWdpbi0+cHJpdi0+Y2FjaGVfZGF0YSk7Ci0gIH0KLSAgcGx1Z2luLT5wcml2LT5jYWNoZV9kYXRhID0gY2FjaGVfZGF0YTsKLX0KLQotI2lmIDAKLS8qKgotICogZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3Q6Ci0gKiBAcGx1Z2luOiBwbHVnaW4gdG8gcXVlcnkKLSAqIEBmaWx0ZXI6IHRoZSBmaWx0ZXIgdG8gdXNlCi0gKiBAZmlyc3Q6IG9ubHkgcmV0dXJuIGZpcnN0IG1hdGNoCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmaWx0ZXIgZnVuY3Rpb24KLSAqCi0gKiBSdW5zIGEgZmlsdGVyIGFnYWluc3QgYWxsIHBsdWdpbiBmZWF0dXJlcyBhbmQgcmV0dXJucyBhIEdMaXN0IHdpdGgKLSAqIHRoZSByZXN1bHRzLiBJZiB0aGUgZmlyc3QgZmxhZyBpcyBzZXQsIG9ubHkgdGhlIGZpcnN0IG1hdGNoIGlzCi0gKiByZXR1cm5lZCAoYXMgYSBsaXN0IHdpdGggYSBzaW5nbGUgb2JqZWN0KS4KLSAqCi0gKiBSZXR1cm5zOiBhIEdMaXN0IG9mIGZlYXR1cmVzLCBnX2xpc3RfZnJlZSBhZnRlciB1c2UuCi0gKi8KLUdMaXN0ICoKLWdzdF9wbHVnaW5fZmVhdHVyZV9maWx0ZXIgKEdzdFBsdWdpbiAqIHBsdWdpbiwKLSAgICBHc3RQbHVnaW5GZWF0dXJlRmlsdGVyIGZpbHRlciwgZ2Jvb2xlYW4gZmlyc3QsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR0xpc3QgKmxpc3Q7Ci0gIEdMaXN0ICpnOwotCi0gIGxpc3QgPSBnc3RfZmlsdGVyX3J1biAocGx1Z2luLT5mZWF0dXJlcywgKEdzdEZpbHRlckZ1bmMpIGZpbHRlciwgZmlyc3QsCi0gICAgICB1c2VyX2RhdGEpOwotICBmb3IgKGcgPSBsaXN0OyBnOyBnID0gZy0+bmV4dCkgewotICAgIGdzdF9vYmplY3RfcmVmIChwbHVnaW4pOwotICB9Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFBsdWdpbkZlYXR1cmVGaWx0ZXIgZmlsdGVyOwotICBnYm9vbGVhbiBmaXJzdDsKLSAgZ3BvaW50ZXIgdXNlcl9kYXRhOwotICBHTGlzdCAqcmVzdWx0OwotfQotRmVhdHVyZUZpbHRlckRhdGE7Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2ZlYXR1cmVfZmlsdGVyIChHc3RQbHVnaW4gKiBwbHVnaW4sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR0xpc3QgKnJlc3VsdDsKLSAgRmVhdHVyZUZpbHRlckRhdGEgKmRhdGEgPSAoRmVhdHVyZUZpbHRlckRhdGEgKikgdXNlcl9kYXRhOwotCi0gIHJlc3VsdCA9IGdzdF9wbHVnaW5fZmVhdHVyZV9maWx0ZXIgKHBsdWdpbiwgZGF0YS0+ZmlsdGVyLCBkYXRhLT5maXJzdCwKLSAgICAgIGRhdGEtPnVzZXJfZGF0YSk7Ci0gIGlmIChyZXN1bHQpIHsKLSAgICBkYXRhLT5yZXN1bHQgPSBnX2xpc3RfY29uY2F0IChkYXRhLT5yZXN1bHQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fbGlzdF9mZWF0dXJlX2ZpbHRlcjoKLSAqIEBsaXN0OiBhICNHTGlzdCBvZiBwbHVnaW5zIHRvIHF1ZXJ5Ci0gKiBAZmlsdGVyOiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHVzZQotICogQGZpcnN0OiBvbmx5IHJldHVybiBmaXJzdCBtYXRjaAotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uCi0gKgotICogUnVucyBhIGZpbHRlciBhZ2FpbnN0IGFsbCBwbHVnaW4gZmVhdHVyZXMgb2YgdGhlIHBsdWdpbnMgaW4gdGhlIGdpdmVuCi0gKiBsaXN0IGFuZCByZXR1cm5zIGEgR0xpc3Qgd2l0aCB0aGUgcmVzdWx0cy4KLSAqIElmIHRoZSBmaXJzdCBmbGFnIGlzIHNldCwgb25seSB0aGUgZmlyc3QgbWF0Y2ggaXMKLSAqIHJldHVybmVkIChhcyBhIGxpc3Qgd2l0aCBhIHNpbmdsZSBvYmplY3QpLgotICoKLSAqIFJldHVybnM6IGEgR0xpc3Qgb2YgZmVhdHVyZXMsIGdfbGlzdF9mcmVlIGFmdGVyIHVzZS4KLSAqLwotR0xpc3QgKgotZ3N0X3BsdWdpbl9saXN0X2ZlYXR1cmVfZmlsdGVyIChHTGlzdCAqIGxpc3QsCi0gICAgR3N0UGx1Z2luRmVhdHVyZUZpbHRlciBmaWx0ZXIsIGdib29sZWFuIGZpcnN0LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEZlYXR1cmVGaWx0ZXJEYXRhIGRhdGE7Ci0gIEdMaXN0ICpyZXN1bHQ7Ci0KLSAgZGF0YS5maWx0ZXIgPSBmaWx0ZXI7Ci0gIGRhdGEuZmlyc3QgPSBmaXJzdDsKLSAgZGF0YS51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIGRhdGEucmVzdWx0ID0gTlVMTDsKLQotICByZXN1bHQgPSBnc3RfZmlsdGVyX3J1biAobGlzdCwgKEdzdEZpbHRlckZ1bmMpIF9mZWF0dXJlX2ZpbHRlciwgZmlyc3QsICZkYXRhKTsKLSAgZ19saXN0X2ZyZWUgKHJlc3VsdCk7Ci0KLSAgcmV0dXJuIGRhdGEucmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fZmluZF9mZWF0dXJlOgotICogQHBsdWdpbjogcGx1Z2luIHRvIGdldCB0aGUgZmVhdHVyZSBmcm9tCi0gKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gZmluZAotICogQHR5cGU6IFRoZSB0eXBlIG9mIHRoZSBmZWF0dXJlIHRvIGZpbmQKLSAqCi0gKiBGaW5kIGEgZmVhdHVyZSBvZiB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZSBpbiB0aGUgZ2l2ZW4gcGx1Z2luLgotICoKLSAqIFJldHVybnM6IGEgR3N0UGx1Z2luRmVhdHVyZSBvciAlTlVMTCBpZiB0aGUgZmVhdHVyZSB3YXMgbm90IGZvdW5kLgotICovCi1Hc3RQbHVnaW5GZWF0dXJlICoKLWdzdF9wbHVnaW5fZmluZF9mZWF0dXJlIChHc3RQbHVnaW4gKiBwbHVnaW4sIGNvbnN0IGdjaGFyICogbmFtZSwgR1R5cGUgdHlwZSkKLXsKLSAgR0xpc3QgKndhbGs7Ci0gIEdzdFBsdWdpbkZlYXR1cmUgKnJlc3VsdCA9IE5VTEw7Ci0gIEdzdFR5cGVOYW1lRGF0YSBkYXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOwotCi0gIGRhdGEudHlwZSA9IHR5cGU7Ci0gIGRhdGEubmFtZSA9IG5hbWU7Ci0KLSAgd2FsayA9IGdzdF9maWx0ZXJfcnVuIChwbHVnaW4tPmZlYXR1cmVzLAotICAgICAgKEdzdEZpbHRlckZ1bmMpIGdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyLCBUUlVFLCAmZGF0YSk7Ci0KLSAgaWYgKHdhbGspIHsKLSAgICByZXN1bHQgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKHdhbGstPmRhdGEpOwotCi0gICAgZ3N0X29iamVjdF9yZWYgKHJlc3VsdCk7Ci0gICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAod2Fsayk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLSNpZiAwCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wbHVnaW5fZmVhdHVyZV9uYW1lX2ZpbHRlciAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgcmV0dXJuICFzdHJjbXAgKG5hbWUsIEdTVF9QTFVHSU5fRkVBVFVSRV9OQU1FIChmZWF0dXJlKSk7Ci19Ci0jZW5kaWYKLQotI2lmIDAKLS8qKgotICogZ3N0X3BsdWdpbl9maW5kX2ZlYXR1cmVfYnlfbmFtZToKLSAqIEBwbHVnaW46IHBsdWdpbiB0byBnZXQgdGhlIGZlYXR1cmUgZnJvbQotICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGZpbmQKLSAqCi0gKiBGaW5kIGEgZmVhdHVyZSBvZiB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgZ2l2ZW4gcGx1Z2luLgotICoKLSAqIFJldHVybnM6IGEgR3N0UGx1Z2luRmVhdHVyZSBvciAlTlVMTCBpZiB0aGUgZmVhdHVyZSB3YXMgbm90IGZvdW5kLgotICovCi1Hc3RQbHVnaW5GZWF0dXJlICoKLWdzdF9wbHVnaW5fZmluZF9mZWF0dXJlX2J5X25hbWUgKEdzdFBsdWdpbiAqIHBsdWdpbiwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHTGlzdCAqd2FsazsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqcmVzdWx0ID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKLQotICB3YWxrID0gZ3N0X2ZpbHRlcl9ydW4gKHBsdWdpbi0+ZmVhdHVyZXMsCi0gICAgICAoR3N0RmlsdGVyRnVuYykgZ3N0X3BsdWdpbl9mZWF0dXJlX25hbWVfZmlsdGVyLCBUUlVFLCAodm9pZCAqKSBuYW1lKTsKLQotICBpZiAod2FsaykgewotICAgIHJlc3VsdCA9IEdTVF9QTFVHSU5fRkVBVFVSRSAod2Fsay0+ZGF0YSk7Ci0KLSAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKLSAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlICh3YWxrKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBnc3RfcGx1Z2luX2xvYWRfYnlfbmFtZToKLSAqIEBuYW1lOiBuYW1lIG9mIHBsdWdpbiB0byBsb2FkCi0gKgotICogTG9hZCB0aGUgbmFtZWQgcGx1Z2luLiBSZWZzIHRoZSBwbHVnaW4uCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIHJlZmVyZW5jZSB0byBhIGxvYWRlZCBwbHVnaW4sIG9yICVOVUxMIG9uIGVycm9yLgotICovCi1Hc3RQbHVnaW4gKgotZ3N0X3BsdWdpbl9sb2FkX2J5X25hbWUgKGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0UGx1Z2luICpwbHVnaW4sICpuZXdwbHVnaW47Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0gIEdTVF9ERUJVRyAoImxvb2tpbmcgdXAgcGx1Z2luICVzIGluIGRlZmF1bHQgcmVnaXN0cnkiLCBuYW1lKTsKLSAgcGx1Z2luID0gZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCBuYW1lKTsKLSAgaWYgKHBsdWdpbikgewotICAgIEdTVF9ERUJVRyAoImxvYWRpbmcgcGx1Z2luICVzIGZyb20gZmlsZSAlcyIsIG5hbWUsIHBsdWdpbi0+ZmlsZW5hbWUpOwotICAgIG5ld3BsdWdpbiA9IGdzdF9wbHVnaW5fbG9hZF9maWxlIChwbHVnaW4tPmZpbGVuYW1lLCAmZXJyb3IpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7Ci0KLSAgICBpZiAoIW5ld3BsdWdpbikgewotICAgICAgR1NUX1dBUk5JTkcgKCJsb2FkX3BsdWdpbiBlcnJvcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICAvKiBuZXdwbHVnaW4gd2FzIHJlZmZlZCBieSBsb2FkX2ZpbGUgKi8KLSAgICByZXR1cm4gbmV3cGx1Z2luOwotICB9Ci0KLSAgR1NUX0RFQlVHICgiQ291bGQgbm90IGZpbmQgcGx1Z2luICVzIGluIHJlZ2lzdHJ5IiwgbmFtZSk7Ci0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fbG9hZDoKLSAqIEBwbHVnaW46ICh0cmFuc2ZlciBub25lKTogcGx1Z2luIHRvIGxvYWQKLSAqCi0gKiBMb2FkcyBAcGx1Z2luLiBOb3RlIHRoYXQgdGhlICpyZXR1cm4gdmFsdWUqIGlzIHRoZSBsb2FkZWQgcGx1Z2luOyBAcGx1Z2luIGlzCi0gKiB1bnRvdWNoZWQuIFRoZSBub3JtYWwgdXNlIHBhdHRlcm4gb2YgdGhpcyBmdW5jdGlvbiBnb2VzIGxpa2UgdGhpczoKLSAqCi0gKiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gKiBHc3RQbHVnaW4gKmxvYWRlZF9wbHVnaW47Ci0gKiBsb2FkZWRfcGx1Z2luID0gZ3N0X3BsdWdpbl9sb2FkIChwbHVnaW4pOwotICogLy8gcHJlc3VtYWJseSwgd2UncmUgbm8gbG9uZ2VyIGludGVyZXN0ZWQgaW4gdGhlIHBvdGVudGlhbGx5LXVubG9hZGVkIHBsdWdpbgotICogZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKLSAqIHBsdWdpbiA9IGxvYWRlZF9wbHVnaW47Ci0gKiA8L3Byb2dyYW1saXN0aW5nPgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSByZWZlcmVuY2UgdG8gYSBsb2FkZWQgcGx1Z2luLCBvciAlTlVMTCBvbiBlcnJvci4KLSAqLwotR3N0UGx1Z2luICoKLWdzdF9wbHVnaW5fbG9hZCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgR3N0UGx1Z2luICpuZXdwbHVnaW47Ci0KLSAgaWYgKGdzdF9wbHVnaW5faXNfbG9hZGVkIChwbHVnaW4pKSB7Ci0gICAgcmV0dXJuIHBsdWdpbjsKLSAgfQotCi0gIGlmICghKG5ld3BsdWdpbiA9IGdzdF9wbHVnaW5fbG9hZF9maWxlIChwbHVnaW4tPmZpbGVuYW1lLCAmZXJyb3IpKSkKLSAgICBnb3RvIGxvYWRfZXJyb3I7Ci0KLSAgcmV0dXJuIG5ld3BsdWdpbjsKLQotbG9hZF9lcnJvcjoKLSAgewotICAgIEdTVF9XQVJOSU5HICgibG9hZF9wbHVnaW4gZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9saXN0X2ZyZWU6Ci0gKiBAbGlzdDogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbik6IGxpc3Qgb2YgI0dzdFBsdWdpbgotICoKLSAqIFVucmVmcyBlYWNoIG1lbWJlciBvZiBAbGlzdCwgdGhlbiBmcmVlcyB0aGUgbGlzdC4KLSAqLwotdm9pZAotZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKEdMaXN0ICogbGlzdCkKLXsKLSAgR0xpc3QgKmc7Ci0KLSAgZm9yIChnID0gbGlzdDsgZzsgZyA9IGctPm5leHQpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfUExVR0lOX0NBU1QgKGctPmRhdGEpKTsKLSAgfQotICBnX2xpc3RfZnJlZSAobGlzdCk7Ci19Ci0KLS8qID09PT09IHBsdWdpbiBkZXBlbmRlbmNpZXMgPT09PT0gKi8KLQotLyogU2NlbmFyaW9zOgotICogRU5WICsgeHl6ICAgICB3aGVyZSBFTlYgY2FuIGNvbnRhaW4gbXVsdGlwbGUgdmFsdWVzIHNlcGFyYXRlZCBieSBTRVBBUkFUT1IKLSAqICAgICAgICAgICAgICAgeHl6IG1heSBiZSAiIiAoaWYgRU5WIGNvbnRhaW5zIHBhdGggdG8gZmlsZSByYXRoZXIgdGhhbiBkaXIpCi0gKiBFTlYgKyAqeHl6ICAgc2FtZSBhcyBhYm92ZSwgYnV0IHh5eiBhY3RzIGFzIHN1ZmZpeCBmaWx0ZXIKLSAqIEVOViArIHh5eiogICBzYW1lIGFzIGFib3ZlLCBidXQgeHl6IGFjdHMgYXMgcHJlZml4IGZpbHRlciAoaXMgdGhpcyBuZWVkZWQ/KQotICogRU5WICsgKnh5eiogIHNhbWUgYXMgYWJvdmUsIGJ1dCB4eXogYWN0cyBhcyBzdHJzdHIgZmlsdGVyIChpcyB0aGlzIG5lZWRlZD8pCi0gKiAKLSAqIHNhbWUgYXMgYWJvdmUsIHdpdGggYWRkaXRpb25hbCBwYXRocyBoYXJkLWNvZGVkIGF0IGNvbXBpbGUtdGltZToKLSAqICAgLSBvbmx5IGNoZWNrIHBhdGhzICsgLi4uIGlmIEVOViBpcyBub3Qgc2V0IG9yIHlpZWxkcyBub3QgcGF0aHMKLSAqICAgLSBhbHdheXMgY2hlY2sgcGF0aHMgKyAuLi4gaW4gYWRkaXRpb24gdG8gRU5WCi0gKgotICogV2hlbiB1c2VyIHNwZWNpZmllcyBzZXQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBoZS9zaGUgbWF5IGFsc28gdXNlIGUuZy4KLSAqICJIT01FLy5teXN0dWZmL3BsdWdpbnMiLCBhbmQgd2UnbGwgZXhwYW5kIHRoZSBjb250ZW50IG9mICRIT01FIHdpdGggdGhlCi0gKiByZW1haW5kZXIgCi0gKi8KLQotLyogd2Ugc3RvcmUgaW4gcmVnaXN0cnk6Ci0gKiAgc2V0cyBvZjoKLSAqICAgeyAKLSAqICAgICAtIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYXJyYXkgb2Ygc3RyaW5ncykKLSAqICAgICAtIGxhc3QgaGFzaCBvZiBlbnYgdmFyaWFibGUgY29udGVudHMgKHVpbnQpIChzbyB3ZSBjYW4gYXZvaWQgZG9pbmcgc3RhdHMKLSAqICAgICAgIGlmIG9uZSBvZiB0aGUgZW52IHZhcnMgaGFzIGNoYW5nZWQ7IHByZW1hdHVyZSBvcHRpbWlzYXRpb24gZ2Fsb3JlKQotICogICAgIC0gaGFyZC1jb2RlZCBwYXRocyAoYXJyYXkgb2Ygc3RyaW5ncykKLSAqICAgICAtIHh5eiBmaWxlbmFtZS9zdWZmaXgvcHJlZml4IHN0cmluZ3MgKGFycmF5IG9mIHN0cmluZ3MpCi0gKiAgICAgLSBmbGFncyAoaW50KQotICogICAgIC0gbGFzdCBoYXNoIG9mIGZpbGUvZGlyIHN0YXRzIChpbnQpCi0gKiAgIH0KLSAqICAgKD0gc3RydWN0IEdzdFBsdWdpbkRlcCkKLSAqLwotCi1zdGF0aWMgZ3VpbnQKLWdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfZW52X3ZhcnNfaGFzaCAoR3N0UGx1Z2luICogcGx1Z2luLCBHc3RQbHVnaW5EZXAgKiBkZXApCi17Ci0gIGdjaGFyICoqZTsKLSAgZ3VpbnQgaGFzaDsKLQotICAvKiB0aGVyZSdzIG5vIGRlZXBlciBsb2dpYyB0byB3aGF0IHdlIGRvIGhlcmU7IGFsbCB3ZSB3YW50IHRvIGtub3cgKHdoZW4KLSAgICogY2hlY2tpbmcgaWYgdGhlIHBsdWdpbiBuZWVkcyB0byBiZSByZXNjYW5uZWQpIGlzIHdoZXRoZXIgdGhlIGNvbnRlbnQgb2YKLSAgICogb25lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIGxpc3QgaXMgZGlmZmVyZW50IGZyb20gd2hlbiBpdAotICAgKiB3YXMgbGFzdCBzY2FubmVkICovCi0gIGhhc2ggPSAwOwotICBmb3IgKGUgPSBkZXAtPmVudl92YXJzOyBlICE9IE5VTEwgJiYgKmUgIT0gTlVMTDsgKytlKSB7Ci0gICAgY29uc3QgZ2NoYXIgKnZhbDsKLSAgICBnY2hhciBlbnZfdmFyWzI1Nl07Ci0KLSAgICAvKiBvcmRlciBtYXR0ZXJzOiAidmFsIixOVUxMIG5lZWRzIHRvIHlpZWxkIGEgZGlmZmVyZW50IGhhc2ggdGhhbgotICAgICAqIE5VTEwsInZhbCIsIHNvIGRvIGEgc2hpZnQgaGVyZSB3aGV0aGVyIHRoZSB2YXIgaXMgc2V0IG9yIG5vdCAqLwotICAgIGhhc2ggPSBoYXNoIDw8IDU7Ci0KLSAgICAvKiB3YW50IGVudmlyb25tZW50IHZhcmlhYmxlIGF0IGJlZ2lubmluZyBvZiBzdHJpbmcgKi8KLSAgICBpZiAoIWdfYXNjaWlfaXNhbG51bSAoKiplKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwbHVnaW4sICJzdHJpbmcgcHJlZml4IGlzIG5vdCBhIHZhbGlkIGVudmlyb25tZW50ICIKLSAgICAgICAgICAidmFyaWFibGUgc3RyaW5nOiAlcyIsICplKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIHVzZXIgaXMgYWxsb3dlZCB0byBzcGVjaWZ5IGUuZy4gIkhPTUUvLnBpdGl2aS9wbHVnaW5zIiAqLwotICAgIGdfc3RybGNweSAoZW52X3ZhciwgKmUsIHNpemVvZiAoZW52X3ZhcikpOwotICAgIGdfc3RyZGVsaW1pdCAoZW52X3ZhciwgIi9cXCIsICdcMCcpOwotCi0gICAgaWYgKCh2YWwgPSBnX2dldGVudiAoZW52X3ZhcikpKQotICAgICAgaGFzaCArPSBnX3N0cl9oYXNoICh2YWwpOwotICB9Ci0KLSAgcmV0dXJuIGhhc2g7Ci19Ci0KLWdib29sZWFuCi1fcHJpdl9wbHVnaW5fZGVwc19lbnZfdmFyc19jaGFuZ2VkIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdMaXN0ICpsOwotCi0gIGZvciAobCA9IHBsdWdpbi0+cHJpdi0+ZGVwczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdFBsdWdpbkRlcCAqZGVwID0gbC0+ZGF0YTsKLQotICAgIGlmIChkZXAtPmVudl9oYXNoICE9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfZW52X3ZhcnNfaGFzaCAocGx1Z2luLCBkZXApKQotICAgICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcGx1Z2luX2V4dF9kZXBfZXh0cmFjdF9lbnZfdmFyc19wYXRocyAoR3N0UGx1Z2luICogcGx1Z2luLAotICAgIEdzdFBsdWdpbkRlcCAqIGRlcCwgR1F1ZXVlICogcGF0aHMpCi17Ci0gIGdjaGFyICoqZXZhcnM7Ci0KLSAgZm9yIChldmFycyA9IGRlcC0+ZW52X3ZhcnM7IGV2YXJzICE9IE5VTEwgJiYgKmV2YXJzICE9IE5VTEw7ICsrZXZhcnMpIHsKLSAgICBjb25zdCBnY2hhciAqZTsKLSAgICBnY2hhciAqKmNvbXBvbmVudHM7Ci0KLSAgICAvKiB3YW50IGVudmlyb25tZW50IHZhcmlhYmxlIGF0IGJlZ2lubmluZyBvZiBzdHJpbmcgKi8KLSAgICBpZiAoIWdfYXNjaWlfaXNhbG51bSAoKipldmFycykpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGx1Z2luLCAic3RyaW5nIHByZWZpeCBpcyBub3QgYSB2YWxpZCBlbnZpcm9ubWVudCAiCi0gICAgICAgICAgInZhcmlhYmxlIHN0cmluZzogJXMiLCAqZXZhcnMpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLyogdXNlciBpcyBhbGxvd2VkIHRvIHNwZWNpZnkgZS5nLiAiSE9NRS8ucGl0aXZpL3BsdWdpbnMiLCB3aGljaCB3ZSB3YW50IHRvCi0gICAgICogc3BsaXQgaW50byB0aGUgZW52X3ZhciBuYW1lIGNvbXBvbmVudCBhbmQgdGhlIHBhdGggY29tcG9uZW50ICovCi0gICAgY29tcG9uZW50cyA9IGdfc3Ryc3BsaXRfc2V0ICgqZXZhcnMsICIvXFwiLCAyKTsKLSAgICBnX2Fzc2VydCAoY29tcG9uZW50cyAhPSBOVUxMKTsKLQotICAgIGUgPSBnX2dldGVudiAoY29tcG9uZW50c1swXSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgImV4cGFuZGluZyAlcyA9ICclcycgKHBhdGggc3VmZml4OiAlcykiLAotICAgICAgICBjb21wb25lbnRzWzBdLCBHU1RfU1RSX05VTEwgKGUpLCBHU1RfU1RSX05VTEwgKGNvbXBvbmVudHNbMV0pKTsKLQotICAgIGlmIChjb21wb25lbnRzWzFdICE9IE5VTEwpIHsKLSAgICAgIGdfc3RyZGVsaW1pdCAoY29tcG9uZW50c1sxXSwgIi9cXCIsIEdfRElSX1NFUEFSQVRPUik7Ci0gICAgfQotCi0gICAgaWYgKGUgIT0gTlVMTCAmJiAqZSAhPSAnXDAnKSB7Ci0gICAgICBnY2hhciAqKmFycjsKLSAgICAgIGd1aW50IGk7Ci0KLSAgICAgIGFyciA9IGdfc3Ryc3BsaXQgKGUsIEdfU0VBUkNIUEFUSF9TRVBBUkFUT1JfUywgLTEpOwotCi0gICAgICBmb3IgKGkgPSAwOyBhcnIgIT0gTlVMTCAmJiBhcnJbaV0gIT0gTlVMTDsgKytpKSB7Ci0gICAgICAgIGdjaGFyICpmdWxsX3BhdGg7Ci0KLSAgICAgICAgaWYgKCFnX3BhdGhfaXNfYWJzb2x1dGUgKGFycltpXSkpIHsKLSAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBsdWdpbiwgImlnbm9yaW5nIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRlbnQgJyVzJyIKLSAgICAgICAgICAgICAgIjogZWl0aGVyIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIG9yIG5vdCBhIHBhdGggYXQgYWxsIiwgYXJyW2ldKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb21wb25lbnRzWzFdICE9IE5VTEwpIHsKLSAgICAgICAgICBmdWxsX3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChhcnJbaV0sIGNvbXBvbmVudHNbMV0sIE5VTEwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZ1bGxfcGF0aCA9IGdfc3RyZHVwIChhcnJbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnX3F1ZXVlX2ZpbmRfY3VzdG9tIChwYXRocywgZnVsbF9wYXRoLCAoR0NvbXBhcmVGdW5jKSBzdHJjbXApKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgInBhdGg6ICclcyciLCBmdWxsX3BhdGgpOwotICAgICAgICAgIGdfcXVldWVfcHVzaF90YWlsIChwYXRocywgZnVsbF9wYXRoKTsKLSAgICAgICAgICBmdWxsX3BhdGggPSBOVUxMOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJwYXRoOiAnJXMnIChkdXBsaWNhdGUsaWdub3JpbmcpIiwgZnVsbF9wYXRoKTsKLSAgICAgICAgICBnX2ZyZWUgKGZ1bGxfcGF0aCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZ19zdHJmcmVldiAoYXJyKTsKLSAgICB9Ci0KLSAgICBnX3N0cmZyZWV2IChjb21wb25lbnRzKTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJFeHRyYWN0ZWQgJWQgcGF0aHMgZnJvbSBlbnZpcm9ubWVudCIsIHBhdGhzLT5sZW5ndGgpOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfaGFzaF9mcm9tX3N0YXRfZW50cnkgKEdTdGF0QnVmICogcykKLXsKLSNpZmRlZiBTX0lGQkxLCi0gIGlmICghKHMtPnN0X21vZGUgJiAoU19JRkRJUiB8IFNfSUZSRUcgfCBTX0lGQkxLIHwgU19JRkNIUikpKQotI2Vsc2UKLSAgLyogTVNWQyBkb2VzIG5vdCBoYXZlIFNfSUZCTEsgKi8KLSAgaWYgKCEocy0+c3RfbW9kZSAmIChTX0lGRElSIHwgU19JRlJFRyB8IFNfSUZDSFIpKSkKLSNlbmRpZgotICAgIHJldHVybiAoZ3VpbnQpIC0gMTsKLQotICAvKiBjb21wbGV0ZWx5IHJhbmRvbSBmb3JtdWxhICovCi0gIHJldHVybiAoKHMtPnN0X3NpemUgPDwgMykgKyAocy0+c3RfbXRpbWUgPDwgNSkpIF4gcy0+c3RfY3RpbWU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BsdWdpbl9leHRfZGVwX2RpcmVudHJ5X21hdGNoZXMgKEdzdFBsdWdpbiAqIHBsdWdpbiwgY29uc3QgZ2NoYXIgKiBlbnRyeSwKLSAgICBjb25zdCBnY2hhciAqKiBmaWxlbmFtZXMsIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyBmbGFncykKLXsKLSAgLyogbm8gZmlsZW5hbWVzIHNwZWNpZmllZCwgbWF0Y2ggYWxsIGVudHJpZXMgZm9yIG5vdyAoY291bGQgcHJvYmFibHkKLSAgICogb3B0aW1pc2UgYnkganVzdCB0YWtpbmcgdGhlIGRpciBzdGF0IGhhc2ggb3Igc28pICovCi0gIGlmIChmaWxlbmFtZXMgPT0gTlVMTCB8fCAqZmlsZW5hbWVzID09IE5VTEwgfHwgKipmaWxlbmFtZXMgPT0gJ1wwJykKLSAgICByZXR1cm4gVFJVRTsKLQotICB3aGlsZSAoKmZpbGVuYW1lcyAhPSBOVUxMKSB7Ci0gICAgLyogc3VmZml4IG1hdGNoPyAqLwotICAgIGlmICgoKGZsYWdzICYgR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1NVRkZJWCkpICYmCi0gICAgICAgIGdfc3RyX2hhc19zdWZmaXggKGVudHJ5LCAqZmlsZW5hbWVzKSkgewotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfSBlbHNlIGlmICgoKGZsYWdzICYgR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1BSRUZJWCkpICYmCi0gICAgICAgIGdfc3RyX2hhc19wcmVmaXggKGVudHJ5LCAqZmlsZW5hbWVzKSkgewotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICAvKiBlbHNlIGl0J3MgYW4gZXhhY3QgbWF0Y2ggdGhhdCdzIG5lZWRlZCAqLwotICAgIH0gZWxzZSBpZiAoc3RyY21wIChlbnRyeSwgKmZpbGVuYW1lcykgPT0gMCkgewotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICAgIEdTVF9MT0cgKCIlcyBkb2VzIG5vdCBtYXRjaCAlcywgZmxhZ3M9MHglMDR4IiwgZW50cnksICpmaWxlbmFtZXMsIGZsYWdzKTsKLSAgICArK2ZpbGVuYW1lczsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X3BsdWdpbl9leHRfZGVwX3NjYW5fZGlyX2FuZF9tYXRjaF9uYW1lcyAoR3N0UGx1Z2luICogcGx1Z2luLAotICAgIGNvbnN0IGdjaGFyICogcGF0aCwgY29uc3QgZ2NoYXIgKiogZmlsZW5hbWVzLAotICAgIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyBmbGFncywgaW50IGRlcHRoKQotewotICBjb25zdCBnY2hhciAqZW50cnk7Ci0gIGdib29sZWFuIHJlY3Vyc2VfZGlyczsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotICBHRGlyICpkaXI7Ci0gIGd1aW50IGhhc2ggPSAwOwotCi0gIHJlY3Vyc2VfZGlycyA9ICEgIShmbGFncyAmIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1JFQ1VSU0UpOwotCi0gIGRpciA9IGdfZGlyX29wZW4gKHBhdGgsIDAsICZlcnIpOwotICBpZiAoZGlyID09IE5VTEwpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwbHVnaW4sICJnX2Rpcl9vcGVuKCVzKSBmYWlsZWQ6ICVzIiwgcGF0aCwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgcmV0dXJuIChndWludCkgLSAxOwotICB9Ci0KLSAgLyogRklYTUU6IHdlJ3JlIGFzc3VtaW5nIGhlcmUgdGhhdCB3ZSBhbHdheXMgZ2V0IHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbgotICAgKiB0aGUgc2FtZSBvcmRlciwgYW5kIG5vdCBpbiBhIHJhbmRvbSBvcmRlciAqLwotICB3aGlsZSAoKGVudHJ5ID0gZ19kaXJfcmVhZF9uYW1lIChkaXIpKSkgewotICAgIGdib29sZWFuIGhhdmVfbWF0Y2g7Ci0gICAgR1N0YXRCdWYgczsKLSAgICBnY2hhciAqZnVsbF9wYXRoOwotICAgIGd1aW50IGZoYXNoOwotCi0gICAgaGF2ZV9tYXRjaCA9Ci0gICAgICAgIGdzdF9wbHVnaW5fZXh0X2RlcF9kaXJlbnRyeV9tYXRjaGVzIChwbHVnaW4sIGVudHJ5LCBmaWxlbmFtZXMsIGZsYWdzKTsKLQotICAgIC8qIGF2b2lkIHRoZSBzdGF0IGlmIHBvc3NpYmxlICovCi0gICAgaWYgKCFoYXZlX21hdGNoICYmICFyZWN1cnNlX2RpcnMpCi0gICAgICBjb250aW51ZTsKLQotICAgIGZ1bGxfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhdGgsIGVudHJ5LCBOVUxMKTsKLSAgICBpZiAoZ19zdGF0IChmdWxsX3BhdGgsICZzKSA8IDApIHsKLSAgICAgIGZoYXNoID0gKGd1aW50KSAtIDE7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGx1Z2luLCAic3RhdDogJXMgKGVycm9yOiAlcykiLCBmdWxsX3BhdGgsCi0gICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICB9IGVsc2UgaWYgKGhhdmVfbWF0Y2gpIHsKLSAgICAgIGZoYXNoID0gZ3N0X3BsdWdpbl9leHRfZGVwX2dldF9oYXNoX2Zyb21fc3RhdF9lbnRyeSAoJnMpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgInN0YXQ6ICVzIChyZXN1bHQ6ICV1KSIsIGZ1bGxfcGF0aCwgZmhhc2gpOwotICAgIH0gZWxzZSBpZiAoKHMuc3RfbW9kZSAmIChTX0lGRElSKSkpIHsKLSAgICAgIGZoYXNoID0gZ3N0X3BsdWdpbl9leHRfZGVwX3NjYW5fZGlyX2FuZF9tYXRjaF9uYW1lcyAocGx1Z2luLCBmdWxsX3BhdGgsCi0gICAgICAgICAgZmlsZW5hbWVzLCBmbGFncywgZGVwdGggKyAxKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogaXQncyBub3QgYSBuYW1lIG1hdGNoLCB3ZSB3YW50IHRvIHJlY3Vyc2UsIGJ1dCBpdCdzIG5vdCBhIGRpcmVjdG9yeSAqLwotICAgICAgZ19mcmVlIChmdWxsX3BhdGgpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaGFzaCA9IGhhc2ggKyBmaGFzaDsKLSAgICBnX2ZyZWUgKGZ1bGxfcGF0aCk7Ci0gIH0KLQotICBnX2Rpcl9jbG9zZSAoZGlyKTsKLSAgcmV0dXJuIGhhc2g7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X3BsdWdpbl9leHRfZGVwX3NjYW5fcGF0aF93aXRoX2ZpbGVuYW1lcyAoR3N0UGx1Z2luICogcGx1Z2luLAotICAgIGNvbnN0IGdjaGFyICogcGF0aCwgY29uc3QgZ2NoYXIgKiogZmlsZW5hbWVzLAotICAgIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyBmbGFncykKLXsKLSAgY29uc3QgZ2NoYXIgKmVtcHR5X2ZpbGVuYW1lc1tdID0geyAiIiwgTlVMTCB9OwotICBnYm9vbGVhbiByZWN1cnNlX2ludG9fZGlycywgcGFydGlhbF9uYW1lcyA9IEZBTFNFOwotICBndWludCBpLCBoYXNoID0gMDsKLQotICAvKiB0byBhdm9pZCBzcGVjaWFsLWNhc2luZyBiZWxvdyAoRklYTUU/KSAqLwotICBpZiAoZmlsZW5hbWVzID09IE5VTEwgfHwgKmZpbGVuYW1lcyA9PSBOVUxMKQotICAgIGZpbGVuYW1lcyA9IGVtcHR5X2ZpbGVuYW1lczsKLQotICByZWN1cnNlX2ludG9fZGlycyA9ICEgIShmbGFncyAmIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1JFQ1VSU0UpOwotCi0gIGlmICgoZmxhZ3MgJiBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19GSUxFX05BTUVfSVNfU1VGRklYKSB8fAotICAgICAgKGZsYWdzICYgR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1BSRUZJWCkpCi0gICAgcGFydGlhbF9uYW1lcyA9IFRSVUU7Ci0KLSAgLyogaWYgd2UgY2FuIGNvbnN0cnVjdCB0aGUgZXhhY3QgcGF0aHMgdG8gY2hlY2sgd2l0aCB0aGUgZGF0YSB3ZSBoYXZlLCBqdXN0Ci0gICAqIHN0YXQgdGhlbSBvbmUgYnkgb25lOyB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gb3BlbmluZyB0aGUgZGlyZWN0b3J5Ci0gICAqIGFuZCBnb2luZyB0aHJvdWdoIGVhY2ggZW50cnkgdG8gc2VlIGlmIGl0IG1hdGNoZXMgb25lIG9mIG91ciBmaWxlbmFtZXMuICovCi0gIGlmICghcmVjdXJzZV9pbnRvX2RpcnMgJiYgIXBhcnRpYWxfbmFtZXMpIHsKLSAgICBmb3IgKGkgPSAwOyBmaWxlbmFtZXNbaV0gIT0gTlVMTDsgKytpKSB7Ci0gICAgICBHU3RhdEJ1ZiBzOwotICAgICAgZ2NoYXIgKmZ1bGxfcGF0aDsKLSAgICAgIGd1aW50IGZoYXNoOwotCi0gICAgICBmdWxsX3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChwYXRoLCBmaWxlbmFtZXNbaV0sIE5VTEwpOwotICAgICAgaWYgKGdfc3RhdCAoZnVsbF9wYXRoLCAmcykgPCAwKSB7Ci0gICAgICAgIGZoYXNoID0gKGd1aW50KSAtIDE7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJzdGF0OiAlcyAoZXJyb3I6ICVzKSIsIGZ1bGxfcGF0aCwKLSAgICAgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfaGFzaF9mcm9tX3N0YXRfZW50cnkgKCZzKTsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgInN0YXQ6ICVzIChyZXN1bHQ6ICUwOHgpIiwgZnVsbF9wYXRoLCBmaGFzaCk7Ci0gICAgICB9Ci0gICAgICBoYXNoICs9IGZoYXNoOwotICAgICAgZ19mcmVlIChmdWxsX3BhdGgpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBoYXNoID0gZ3N0X3BsdWdpbl9leHRfZGVwX3NjYW5fZGlyX2FuZF9tYXRjaF9uYW1lcyAocGx1Z2luLCBwYXRoLAotICAgICAgICBmaWxlbmFtZXMsIGZsYWdzLCAwKTsKLSAgfQotCi0gIHJldHVybiBoYXNoOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfc3RhdF9oYXNoIChHc3RQbHVnaW4gKiBwbHVnaW4sIEdzdFBsdWdpbkRlcCAqIGRlcCkKLXsKLSAgZ2Jvb2xlYW4gcGF0aHNfYXJlX2RlZmF1bHRfb25seTsKLSAgR1F1ZXVlIHNjYW5fcGF0aHMgPSBHX1FVRVVFX0lOSVQ7Ci0gIGd1aW50IHNjYW5faGFzaCA9IDA7Ci0gIGdjaGFyICpwYXRoOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJzdGFydCIpOwotCi0gIHBhdGhzX2FyZV9kZWZhdWx0X29ubHkgPQotICAgICAgZGVwLT5mbGFncyAmIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1BBVEhTX0FSRV9ERUZBVUxUX09OTFk7Ci0KLSAgZ3N0X3BsdWdpbl9leHRfZGVwX2V4dHJhY3RfZW52X3ZhcnNfcGF0aHMgKHBsdWdpbiwgZGVwLCAmc2Nhbl9wYXRocyk7Ci0KLSAgaWYgKGdfcXVldWVfaXNfZW1wdHkgKCZzY2FuX3BhdGhzKSB8fCAhcGF0aHNfYXJlX2RlZmF1bHRfb25seSkgewotICAgIGdjaGFyICoqcGF0aHM7Ci0KLSAgICBmb3IgKHBhdGhzID0gZGVwLT5wYXRoczsgcGF0aHMgIT0gTlVMTCAmJiAqcGF0aHMgIT0gTlVMTDsgKytwYXRocykgewotICAgICAgY29uc3QgZ2NoYXIgKnBhdGggPSAqcGF0aHM7Ci0KLSAgICAgIGlmICghZ19xdWV1ZV9maW5kX2N1c3RvbSAoJnNjYW5fcGF0aHMsIHBhdGgsIChHQ29tcGFyZUZ1bmMpIHN0cmNtcCkpIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgInBhdGg6ICclcyciLCBwYXRoKTsKLSAgICAgICAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZzY2FuX3BhdGhzLCBnX3N0cmR1cCAocGF0aCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgInBhdGg6ICclcycgKGR1cGxpY2F0ZSwgaWdub3JpbmcpIiwgcGF0aCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgd2hpbGUgKChwYXRoID0gZ19xdWV1ZV9wb3BfaGVhZCAoJnNjYW5fcGF0aHMpKSkgewotICAgIHNjYW5faGFzaCArPSBnc3RfcGx1Z2luX2V4dF9kZXBfc2Nhbl9wYXRoX3dpdGhfZmlsZW5hbWVzIChwbHVnaW4sIHBhdGgsCi0gICAgICAgIChjb25zdCBnY2hhciAqKikgZGVwLT5uYW1lcywgZGVwLT5mbGFncyk7Ci0gICAgZ19mcmVlIChwYXRoKTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJkb25lLCBzY2FuX2hhc2g6ICUwOHgiLCBzY2FuX2hhc2gpOwotICByZXR1cm4gc2Nhbl9oYXNoOwotfQotCi1nYm9vbGVhbgotX3ByaXZfcGx1Z2luX2RlcHNfZmlsZXNfY2hhbmdlZCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHTGlzdCAqbDsKLQotICBmb3IgKGwgPSBwbHVnaW4tPnByaXYtPmRlcHM7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RQbHVnaW5EZXAgKmRlcCA9IGwtPmRhdGE7Ci0KLSAgICBpZiAoZGVwLT5zdGF0X2hhc2ggIT0gZ3N0X3BsdWdpbl9leHRfZGVwX2dldF9zdGF0X2hhc2ggKHBsdWdpbiwgZGVwKSkKLSAgICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BsdWdpbl9leHRfZGVwX2ZyZWUgKEdzdFBsdWdpbkRlcCAqIGRlcCkKLXsKLSAgZ19zdHJmcmVldiAoZGVwLT5lbnZfdmFycyk7Ci0gIGdfc3RyZnJlZXYgKGRlcC0+cGF0aHMpOwotICBnX3N0cmZyZWV2IChkZXAtPm5hbWVzKTsKLSAgZ19zbGljZV9mcmVlIChHc3RQbHVnaW5EZXAsIGRlcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BsdWdpbl9leHRfZGVwX3N0cnZfZXF1YWwgKGdjaGFyICoqIGFycjEsIGdjaGFyICoqIGFycjIpCi17Ci0gIGlmIChhcnIxID09IGFycjIpCi0gICAgcmV0dXJuIFRSVUU7Ci0gIGlmIChhcnIxID09IE5VTEwgfHwgYXJyMiA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLSAgZm9yICg7ICphcnIxICE9IE5VTEwgJiYgKmFycjIgIT0gTlVMTDsgKythcnIxLCArK2FycjIpIHsKLSAgICBpZiAoc3RyY21wICgqYXJyMSwgKmFycjIpICE9IDApCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuICgqYXJyMSA9PSAqYXJyMik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BsdWdpbl9leHRfZGVwX2VxdWFscyAoR3N0UGx1Z2luRGVwICogZGVwLCBjb25zdCBnY2hhciAqKiBlbnZfdmFycywKLSAgICBjb25zdCBnY2hhciAqKiBwYXRocywgY29uc3QgZ2NoYXIgKiogbmFtZXMsIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyBmbGFncykKLXsKLSAgaWYgKGRlcC0+ZmxhZ3MgIT0gZmxhZ3MpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBnc3RfcGx1Z2luX2V4dF9kZXBfc3Rydl9lcXVhbCAoZGVwLT5lbnZfdmFycywgKGdjaGFyICoqKSBlbnZfdmFycykgJiYKLSAgICAgIGdzdF9wbHVnaW5fZXh0X2RlcF9zdHJ2X2VxdWFsIChkZXAtPnBhdGhzLCAoZ2NoYXIgKiopIHBhdGhzKSAmJgotICAgICAgZ3N0X3BsdWdpbl9leHRfZGVwX3N0cnZfZXF1YWwgKGRlcC0+bmFtZXMsIChnY2hhciAqKikgbmFtZXMpOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3k6Ci0gKiBAcGx1Z2luOiBhICNHc3RQbHVnaW4KLSAqIEBlbnZfdmFyczogKGFsbG93LW5vbmUpOiAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBhZmZlY3RpbmcgdGhlCi0gKiAgICAgZmVhdHVyZSBzZXQgb2YgdGhlIHBsdWdpbiAoZS5nLiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWluaW5nCi0gKiAgICAgcGF0aHMgd2hlcmUgdG8gbG9vayBmb3IgYWRkaXRpb25hbCBtb2R1bGVzL3BsdWdpbnMgb2YgYSBsaWJyYXJ5KSwKLSAqICAgICBvciAlTlVMTC4gRW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgbWF5IGJlIGZvbGxvd2VkIGJ5IGEgcGF0aCBjb21wb25lbnQKLSAqICAgICAgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udGVudCBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIGUuZy4KLSAqICAgICAgIkhPTUUvLm15c3R1ZmYvcGx1Z2lucyIuCi0gKiBAcGF0aHM6IChhbGxvdy1ub25lKTogJU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBkaXJlY3Rvcmllcy9wYXRocyB3aGVyZSBkZXBlbmRlbnQgZmlsZXMKLSAqICAgICBtYXkgYmUsIG9yICVOVUxMLgotICogQG5hbWVzOiAoYWxsb3ctbm9uZSk6ICVOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2YgZmlsZSBuYW1lcyAob3IgZmlsZSBuYW1lIHN1ZmZpeGVzLAotICogICAgIGRlcGVuZGluZyBvbiBAZmxhZ3MpIHRvIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgcGF0aHMgZnJvbQotICogICAgIEBwYXRocyBhbmQvb3IgdGhlIHBhdGhzIGV4dHJhY3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4KLSAqICAgICBAZW52X3ZhcnMsIG9yICVOVUxMLgotICogQGZsYWdzOiBvcHRpb25hbCBmbGFncywgb3IgI0dTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX05PTkUKLSAqCi0gKiBNYWtlIEdTdHJlYW1lciBhd2FyZSBvZiBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2hpY2ggYWZmZWN0IHRoZSBmZWF0dXJlCi0gKiBzZXQgb2YgdGhpcyBwbHVnaW4gKGllLiB0aGUgZWxlbWVudHMgb3IgdHlwZWZpbmRlcnMgYXNzb2NpYXRlZCB3aXRoIGl0KS4KLSAqCi0gKiBHU3RyZWFtZXIgd2lsbCByZS1pbnNwZWN0IHBsdWdpbnMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2hlbmV2ZXIgYW55Ci0gKiBvZiB0aGUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGNoYW5nZS4gVGhpcyBpcyB1c2VmdWwgZm9yIHBsdWdpbnMgd2hpY2ggd3JhcAotICogb3RoZXIgcGx1Z2luIHN5c3RlbXMsIGUuZy4gYSBwbHVnaW4gd2hpY2ggd3JhcHMgYSBwbHVnaW4tYmFzZWQgdmlzdWFsaXNhdGlvbgotICogbGlicmFyeSBhbmQgbWFrZXMgdmlzdWFsaXNhdGlvbnMgYXZhaWxhYmxlIGFzIEdTdHJlYW1lciBlbGVtZW50cywgb3IgYQotICogY29kZWMgbG9hZGVyIHdoaWNoIGV4cG9zZXMgZWxlbWVudHMgYW5kL29yIGNhcHMgZGVwZW5kZW50IG9uIHdoYXQgZXh0ZXJuYWwKLSAqIGNvZGVjIGxpYnJhcmllcyBhcmUgY3VycmVudGx5IGluc3RhbGxlZC4KLSAqLwotdm9pZAotZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBnY2hhciAqKiBlbnZfdmFycywKLSAgICBjb25zdCBnY2hhciAqKiBwYXRocywgY29uc3QgZ2NoYXIgKiogbmFtZXMsIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyBmbGFncykKLXsKLSAgR3N0UGx1Z2luRGVwICpkZXA7Ci0gIEdMaXN0ICpsOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QTFVHSU4gKHBsdWdpbikpOwotCi0gIGlmICgoZW52X3ZhcnMgPT0gTlVMTCB8fCBlbnZfdmFyc1swXSA9PSBOVUxMKSAmJgotICAgICAgKHBhdGhzID09IE5VTEwgfHwgcGF0aHNbMF0gPT0gTlVMTCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwbHVnaW4sCi0gICAgICAgICJwbHVnaW4gcmVnaXN0ZXJlZCBlbXB0eSBkZXBlbmRlbmN5IHNldC4gSWdub3JpbmciKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBmb3IgKGwgPSBwbHVnaW4tPnByaXYtPmRlcHM7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKLSAgICBpZiAoZ3N0X3BsdWdpbl9leHRfZGVwX2VxdWFscyAobC0+ZGF0YSwgZW52X3ZhcnMsIHBhdGhzLCBuYW1lcywgZmxhZ3MpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGx1Z2luLCAiZGVwZW5kZW5jeSBhbHJlYWR5IHJlZ2lzdGVyZWQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLQotICBkZXAgPSBnX3NsaWNlX25ldyAoR3N0UGx1Z2luRGVwKTsKLQotICBkZXAtPmVudl92YXJzID0gZ19zdHJkdXB2ICgoZ2NoYXIgKiopIGVudl92YXJzKTsKLSAgZGVwLT5wYXRocyA9IGdfc3RyZHVwdiAoKGdjaGFyICoqKSBwYXRocyk7Ci0gIGRlcC0+bmFtZXMgPSBnX3N0cmR1cHYgKChnY2hhciAqKikgbmFtZXMpOwotICBkZXAtPmZsYWdzID0gZmxhZ3M7Ci0KLSAgZGVwLT5lbnZfaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfZW52X3ZhcnNfaGFzaCAocGx1Z2luLCBkZXApOwotICBkZXAtPnN0YXRfaGFzaCA9IGdzdF9wbHVnaW5fZXh0X2RlcF9nZXRfc3RhdF9oYXNoIChwbHVnaW4sIGRlcCk7Ci0KLSAgcGx1Z2luLT5wcml2LT5kZXBzID0gZ19saXN0X2FwcGVuZCAocGx1Z2luLT5wcml2LT5kZXBzLCBkZXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBsdWdpbiwgImFkZGVkIGRlcGVuZGVuY3k6Iik7Ci0gIGZvciAoOyBlbnZfdmFycyAhPSBOVUxMICYmICplbnZfdmFycyAhPSBOVUxMOyArK2Vudl92YXJzKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsdWdpbiwgIiBldmFyOiAlcyIsICplbnZfdmFycyk7Ci0gIGZvciAoOyBwYXRocyAhPSBOVUxMICYmICpwYXRocyAhPSBOVUxMOyArK3BhdGhzKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsdWdpbiwgIiBwYXRoOiAlcyIsICpwYXRocyk7Ci0gIGZvciAoOyBuYW1lcyAhPSBOVUxMICYmICpuYW1lcyAhPSBOVUxMOyArK25hbWVzKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsdWdpbiwgIiBuYW1lOiAlcyIsICpuYW1lcyk7Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGU6Ci0gKiBAcGx1Z2luOiB0aGUgI0dzdFBsdWdpbgotICogQGVudl92YXJzOiAoYWxsb3ctbm9uZSk6IG9uZSBvciBtb3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyAoc2VwYXJhdGVkIGJ5ICc6JywgJzsnIG9yICcsJyksCi0gKiAgICAgIG9yICVOVUxMLiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBtYXkgYmUgZm9sbG93ZWQgYnkgYSBwYXRoIGNvbXBvbmVudAotICogICAgICB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb250ZW50IG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgZS5nLgotICogICAgICAiSE9NRS8ubXlzdHVmZi9wbHVnaW5zOk1ZU1RVRkZfUExVR0lOU19QQVRIIgotICogQHBhdGhzOiAoYWxsb3ctbm9uZSk6IG9uZSBvcmUgbW9yZSBkaXJlY3RvcnkgcGF0aHMgKHNlcGFyYXRlZCBieSAnOicgb3IgJzsnIG9yICcsJyksCi0gKiAgICAgIG9yICVOVUxMLiBFeGFtcGxlOiAiL3Vzci9saWIvbXlzdHVmZi9wbHVnaW5zIgotICogQG5hbWVzOiAoYWxsb3ctbm9uZSk6IG9uZSBvciBtb3JlIGZpbGUgbmFtZXMgb3IgZmlsZSBuYW1lIHN1ZmZpeGVzIChzZXBhcmF0ZWQgYnkgY29tbWFzKSwKLSAqICAgICAgb3IgJU5VTEwKLSAqIEBmbGFnczogb3B0aW9uYWwgZmxhZ3MsIG9yICNHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19OT05FCi0gKgotICogTWFrZSBHU3RyZWFtZXIgYXdhcmUgb2YgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdoaWNoIGFmZmVjdCB0aGUgZmVhdHVyZQotICogc2V0IG9mIHRoaXMgcGx1Z2luIChpZS4gdGhlIGVsZW1lbnRzIG9yIHR5cGVmaW5kZXJzIGFzc29jaWF0ZWQgd2l0aCBpdCkuCi0gKgotICogR1N0cmVhbWVyIHdpbGwgcmUtaW5zcGVjdCBwbHVnaW5zIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdoZW5ldmVyIGFueQotICogb2YgdGhlIGV4dGVybmFsIGRlcGVuZGVuY2llcyBjaGFuZ2UuIFRoaXMgaXMgdXNlZnVsIGZvciBwbHVnaW5zIHdoaWNoIHdyYXAKLSAqIG90aGVyIHBsdWdpbiBzeXN0ZW1zLCBlLmcuIGEgcGx1Z2luIHdoaWNoIHdyYXBzIGEgcGx1Z2luLWJhc2VkIHZpc3VhbGlzYXRpb24KLSAqIGxpYnJhcnkgYW5kIG1ha2VzIHZpc3VhbGlzYXRpb25zIGF2YWlsYWJsZSBhcyBHU3RyZWFtZXIgZWxlbWVudHMsIG9yIGEKLSAqIGNvZGVjIGxvYWRlciB3aGljaCBleHBvc2VzIGVsZW1lbnRzIGFuZC9vciBjYXBzIGRlcGVuZGVudCBvbiB3aGF0IGV4dGVybmFsCi0gKiBjb2RlYyBsaWJyYXJpZXMgYXJlIGN1cnJlbnRseSBpbnN0YWxsZWQuCi0gKgotICogQ29udmVuaWVuY2Ugd3JhcHBlciBmdW5jdGlvbiBmb3IgZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSgpIHdoaWNoCi0gKiB0YWtlcyBzaW1wbGUgc3RyaW5ncyBhcyBhcmd1bWVudHMgaW5zdGVhZCBvZiBzdHJpbmcgYXJyYXlzLCB3aXRoIG11bHRpcGxlCi0gKiBhcmd1bWVudHMgc2VwYXJhdGVkIGJ5IHByZWRlZmluZWQgZGVsaW1pdGVycyAoc2VlIGFib3ZlKS4KLSAqLwotdm9pZAotZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGUgKEdzdFBsdWdpbiAqIHBsdWdpbiwKLSAgICBjb25zdCBnY2hhciAqIGVudl92YXJzLCBjb25zdCBnY2hhciAqIHBhdGhzLCBjb25zdCBnY2hhciAqIG5hbWVzLAotICAgIEdzdFBsdWdpbkRlcGVuZGVuY3lGbGFncyBmbGFncykKLXsKLSAgZ2NoYXIgKiphX2V2YXJzID0gTlVMTDsKLSAgZ2NoYXIgKiphX3BhdGhzID0gTlVMTDsKLSAgZ2NoYXIgKiphX25hbWVzID0gTlVMTDsKLQotICBpZiAoZW52X3ZhcnMpCi0gICAgYV9ldmFycyA9IGdfc3Ryc3BsaXRfc2V0IChlbnZfdmFycywgIjo7LCIsIC0xKTsKLSAgaWYgKHBhdGhzKQotICAgIGFfcGF0aHMgPSBnX3N0cnNwbGl0X3NldCAocGF0aHMsICI6OywiLCAtMSk7Ci0gIGlmIChuYW1lcykKLSAgICBhX25hbWVzID0gZ19zdHJzcGxpdF9zZXQgKG5hbWVzLCAiLCIsIC0xKTsKLQotICBnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5IChwbHVnaW4sIChjb25zdCBnY2hhciAqKikgYV9ldmFycywKLSAgICAgIChjb25zdCBnY2hhciAqKikgYV9wYXRocywgKGNvbnN0IGdjaGFyICoqKSBhX25hbWVzLCBmbGFncyk7Ci0KLSAgaWYgKGFfZXZhcnMpCi0gICAgZ19zdHJmcmVldiAoYV9ldmFycyk7Ci0gIGlmIChhX3BhdGhzKQotICAgIGdfc3RyZnJlZXYgKGFfcGF0aHMpOwotICBpZiAoYV9uYW1lcykKLSAgICBnX3N0cmZyZWV2IChhX25hbWVzKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RwbHVnaW4uaCBiL2dzdC9nc3RwbHVnaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdlOGU1OS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cGx1Z2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdHBsdWdpbi5oOiBIZWFkZXIgZm9yIHBsdWdpbiBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfUExVR0lOX0hfXwotI2RlZmluZSBfX0dTVF9QTFVHSU5fSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdG1hY3Jvcy5oPgotI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKioKLSAqIEdzdFBsdWdpbjoKLSAqCi0gKiBUaGUgb3BhcXVlIHBsdWdpbiBvYmplY3QKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBsdWdpbiBHc3RQbHVnaW47Ci10eXBlZGVmIHN0cnVjdCBfR3N0UGx1Z2luQ2xhc3MgR3N0UGx1Z2luQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UGx1Z2luRGVzYyBHc3RQbHVnaW5EZXNjOwotCi0vKioKLSAqIGdzdF9wbHVnaW5fZXJyb3JfcXVhcms6Ci0gKgotICogR2V0IHRoZSBlcnJvciBxdWFyay4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgZXJyb3IgcXVhcmsgdXNlZCBpbiBHRXJyb3IgbWVzc2FnZXMKLSAqLwotR1F1YXJrIGdzdF9wbHVnaW5fZXJyb3JfcXVhcmsgKHZvaWQpOwotLyoqCi0gKiBHU1RfUExVR0lOX0VSUk9SOgotICoKLSAqIFRoZSBlcnJvciBtZXNzYWdlIGNhdGVnb3J5IHF1YXJrCi0gKi8KLSNkZWZpbmUgR1NUX1BMVUdJTl9FUlJPUiBnc3RfcGx1Z2luX2Vycm9yX3F1YXJrICgpCi0KLS8qKgotICogR3N0UGx1Z2luRXJyb3I6Ci0gKiBAR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEU6IFRoZSBwbHVnaW4gY291bGQgbm90IGJlIGxvYWRlZAotICogQEdTVF9QTFVHSU5fRVJST1JfREVQRU5ERU5DSUVTOiBUaGUgcGx1Z2luIGhhcyB1bnJlc29sdmVkIGRlcGVuZGVuY2llcwotICogQEdTVF9QTFVHSU5fRVJST1JfTkFNRV9NSVNNQVRDSDogVGhlIHBsdWdpbiBoYXMgYWxyZWFkeSBiZSBsb2FkZWQgZnJvbSBhIGRpZmZlcmVudCBmaWxlCi0gKgotICogVGhlIHBsdWdpbiBsb2FkaW5nIGVycm9ycwotICovCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX1BMVUdJTl9FUlJPUl9NT0RVTEUsCi0gIEdTVF9QTFVHSU5fRVJST1JfREVQRU5ERU5DSUVTLAotICBHU1RfUExVR0lOX0VSUk9SX05BTUVfTUlTTUFUQ0gKLX0gR3N0UGx1Z2luRXJyb3I7Ci0KLS8qKgotICogR3N0UGx1Z2luRmxhZ3M6Ci0gKiBAR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRDogVGVtcG9yYXJpbHkgbG9hZGVkIHBsdWdpbnMKLSAqIEBHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQ6IFRoZSBwbHVnaW4gd29uJ3QgYmUgc2Nhbm5lZCAoYWdhaW4pCi0gKgotICogVGhlIHBsdWdpbiBsb2FkaW5nIHN0YXRlCi0gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfUExVR0lOX0ZMQUdfQ0FDSEVEICAgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMCksCi0gIEdTVF9QTFVHSU5fRkxBR19CTEFDS0xJU1RFRCA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAxKQotfSBHc3RQbHVnaW5GbGFnczsKLQotLyoqCi0gKiBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3M6Ci0gKiBAR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfTk9ORSA6IG5vIHNwZWNpYWwgZmxhZ3MKLSAqIEBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19SRUNVUlNFIDogcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzCi0gKiBAR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUEFUSFNfQVJFX0RFRkFVTFRfT05MWSA6IHVzZSBwYXRocwotICogICAgICAgICBhcmd1bWVudCBvbmx5IGlmIG5vbmUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpcyBzZXQKLSAqIEBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19GSUxFX05BTUVfSVNfU1VGRklYIDogaW50ZXJwcmV0Ci0gKiAgICAgICAgIGZpbGVuYW1lIGFyZ3VtZW50IGFzIGZpbHRlciBzdWZmaXggYW5kIGNoZWNrIGFsbCBtYXRjaGluZyBmaWxlcyBpbgotICogICAgICAgICB0aGUgZGlyZWN0b3J5Ci0gKiBAR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1BSRUZJWCA6IGludGVycHJldAotICogICAgICAgICBmaWxlbmFtZSBhcmd1bWVudCBhcyBmaWx0ZXIgcHJlZml4IGFuZCBjaGVjayBhbGwgbWF0Y2hpbmcgZmlsZXMgaW4KLSAqICAgICAgICAgdGhlIGRpcmVjdG9yeS4gU2luY2UgMS44LgotICoKLSAqIEZsYWdzIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3koKS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfTk9ORSA9IDAsCi0gIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1JFQ1VSU0UgPSAoMSA8PCAwKSwKLSAgR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUEFUSFNfQVJFX0RFRkFVTFRfT05MWSA9ICgxIDw8IDEpLAotICBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19GSUxFX05BTUVfSVNfU1VGRklYID0gKDEgPDwgMiksCi0gIEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19QUkVGSVggPSAoMSA8PCAzKQotfSBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3M7Ci0KLS8qKgotICogR3N0UGx1Z2luSW5pdEZ1bmM6Ci0gKiBAcGx1Z2luOiBUaGUgcGx1Z2luIG9iamVjdAotICoKLSAqIEEgcGx1Z2luIHNob3VsZCBwcm92aWRlIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIG9mIHRoaXMgdHlwZSBpbiB0aGUKLSAqIHBsdWdpbl9kZXNjIHN0cnVjdC4KLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGxvYWRlciBhdCBzdGFydHVwLiBPbmUgd291bGQgdGhlbgotICogcmVnaXN0ZXIgZWFjaCAjR3N0UGx1Z2luRmVhdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBwbHVnaW4gaW5pdGlhbGlzZWQgc3VjY2Vzc2Z1bGx5Ci0gKi8KLS8qIEZJWE1FIDAuMTE6IE1ha2UgcmV0dXJuIHZvaWQgKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHc3RQbHVnaW5Jbml0RnVuYykgKEdzdFBsdWdpbiAqcGx1Z2luKTsKLQotLyoqCi0gKiBHc3RQbHVnaW5Jbml0RnVsbEZ1bmM6Ci0gKiBAcGx1Z2luOiBUaGUgcGx1Z2luIG9iamVjdAotICogQHVzZXJfZGF0YTogZXh0cmEgZGF0YQotICoKLSAqIEEgcGx1Z2luIHNob3VsZCBwcm92aWRlIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIG9mIGVpdGhlciAjR3N0UGx1Z2luSW5pdEZ1bmMKLSAqIG9yIHRoaXMgdHlwZSBpbiB0aGUgcGx1Z2luX2Rlc2Mgc3RydWN0LgotICogVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBsb2FkZXIgYXQgc3RhcnR1cC4gT25lIHdvdWxkIHRoZW4KLSAqIHJlZ2lzdGVyIGVhY2ggI0dzdFBsdWdpbkZlYXR1cmUuIFRoaXMgdmVyc2lvbiBhbGxvd3MKLSAqIHVzZXIgZGF0YSB0byBiZSBwYXNzZWQgdG8gaW5pdCBmdW5jdGlvbiAodXNlZnVsIGZvciBiaW5kaW5ncykuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgcGx1Z2luIGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseQotICovCi0vKiBGSVhNRSAwLjExOiBNZXJnZSB3aXRoIEdzdFBsdWdpbkluaXRGdW5jICovCi10eXBlZGVmIGdib29sZWFuICgqR3N0UGx1Z2luSW5pdEZ1bGxGdW5jKSAoR3N0UGx1Z2luICpwbHVnaW4sIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogR3N0UGx1Z2luRGVzYzoKLSAqIEBtYWpvcl92ZXJzaW9uOiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgY29yZSB0aGF0IHBsdWdpbiB3YXMgY29tcGlsZWQgZm9yCi0gKiBAbWlub3JfdmVyc2lvbjogdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIGNvcmUgdGhhdCBwbHVnaW4gd2FzIGNvbXBpbGVkIGZvcgotICogQG5hbWU6IGEgdW5pcXVlIG5hbWUgb2YgdGhlIHBsdWdpbgotICogQGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiBvZiBwbHVnaW4KLSAqIEBwbHVnaW5faW5pdDogcG9pbnRlciB0byB0aGUgaW5pdCBmdW5jdGlvbiBvZiB0aGlzIHBsdWdpbi4KLSAqIEB2ZXJzaW9uOiB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4KLSAqIEBsaWNlbnNlOiBlZmZlY3RpdmUgbGljZW5zZSBvZiBwbHVnaW4KLSAqIEBzb3VyY2U6IHNvdXJjZSBtb2R1bGUgcGx1Z2luIGJlbG9uZ3MgdG8KLSAqIEBwYWNrYWdlOiBzaGlwcGVkIHBhY2thZ2UgcGx1Z2luIGJlbG9uZ3MgdG8KLSAqIEBvcmlnaW46IFVSTCB0byBwcm92aWRlciBvZiBwbHVnaW4KLSAqIEByZWxlYXNlX2RhdGV0aW1lOiAoYWxsb3ctbm9uZSk6IGRhdGUgdGltZSBzdHJpbmcgaW4gSVNPIDg2MDEKLSAqICAgICBmb3JtYXQgKG9yIHJhdGhlciwgYSBzdWJzZXQgdGhlcmVvZiksIG9yICVOVUxMLiBBbGxvd2VkIGFyZSB0aGUKLSAqICAgICBmb2xsb3dpbmcgZm9ybWF0czogIllZWVktTU0tREQiIGFuZCAiWVlZLU1NLUREVEhIOk1NWiIgKHdpdGgKLSAqICAgICAnVCcgYSBzZXBhcmF0b3IgYW5kICdaJyBpbmRpY2F0aW5nIFVUQy9adWx1IHRpbWUpLiBUaGlzIGZpZWxkCi0gKiAgICAgc2hvdWxkIGJlIHNldCB2aWEgdGhlIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUKLSAqICAgICBwcmVwcm9jZXNzb3IgbWFjcm8uCi0gKgotICogQSBwbHVnaW4gc2hvdWxkIGV4cG9ydCBhIHZhcmlhYmxlIG9mIHRoaXMgdHlwZSBjYWxsZWQgcGx1Z2luX2Rlc2MuIFRoZSBwbHVnaW4KLSAqIGxvYWRlciB3aWxsIHVzZSB0aGUgZGF0YSBwcm92aWRlZCB0aGVyZSB0byBpbml0aWFsaXplIHRoZSBwbHVnaW4uCi0gKgotICogVGhlIEBsaWNlbmNlIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZjogTEdQTCwgR1BMLCBRUEwsIEdQTC9RUEwsIE1QTCwKLSAqIEJTRCwgTUlUL1gxMSwgUHJvcHJpZXRhcnksIHVua25vd24uCi0gKi8KLXN0cnVjdCBfR3N0UGx1Z2luRGVzYyB7Ci0gIGdpbnQgbWFqb3JfdmVyc2lvbjsKLSAgZ2ludCBtaW5vcl92ZXJzaW9uOwotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgY29uc3QgZ2NoYXIgKmRlc2NyaXB0aW9uOwotICBHc3RQbHVnaW5Jbml0RnVuYyBwbHVnaW5faW5pdDsKLSAgY29uc3QgZ2NoYXIgKnZlcnNpb247Ci0gIGNvbnN0IGdjaGFyICpsaWNlbnNlOwotICBjb25zdCBnY2hhciAqc291cmNlOwotICBjb25zdCBnY2hhciAqcGFja2FnZTsKLSAgY29uc3QgZ2NoYXIgKm9yaWdpbjsKLSAgY29uc3QgZ2NoYXIgKnJlbGVhc2VfZGF0ZXRpbWU7Ci0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLQotI2RlZmluZSBHU1RfVFlQRV9QTFVHSU4gICAoZ3N0X3BsdWdpbl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSVNfUExVR0lOKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfUExVR0lOKSkKLSNkZWZpbmUgR1NUX0lTX1BMVUdJTl9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfUExVR0lOKSkKLSNkZWZpbmUgR1NUX1BMVUdJTl9HRVRfQ0xBU1Mob2JqKSAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUExVR0lOLCBHc3RQbHVnaW5DbGFzcykpCi0jZGVmaW5lIEdTVF9QTFVHSU4ob2JqKSAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9QTFVHSU4sIEdzdFBsdWdpbikpCi0jZGVmaW5lIEdTVF9QTFVHSU5fQ0xBU1Moa2xhc3MpICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1BMVUdJTiwgR3N0UGx1Z2luQ2xhc3MpKQotI2RlZmluZSBHU1RfUExVR0lOX0NBU1Qob2JqKSAgICAgICAgICAgKChHc3RQbHVnaW4qKShvYmopKQotCi0jaWZkZWYgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRQotI2RlZmluZSBfX0dTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRQotI2Vsc2UKLSNkZWZpbmUgX19HU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIE5VTEwKLSNlbmRpZgotCi0vKioKLSAqIEdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkU6Ci0gKiBAbmFtZTogc2hvcnQsIGJ1dCB1bmlxdWUgbmFtZSBvZiB0aGUgcGx1Z2luCi0gKgotICogVGhpcyBtYWNybyBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIHN0YXRpY2FsbHkgbGlua2VkIHBsdWdpbnMuIEl0IGlzCi0gKiBuZWNlc3NhcnkgdG8gY2FsbCB0aGlzIG1hY3JvIGJlZm9yZSB0aGUgcGx1Z2luIGNhbiBiZSB1c2VkLgotICogSXQgaGFzIHRvIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBHU1RfUExVR0lOX1NUQVRJQ19SRUdJU1RFUgotICogYW5kIG11c3QgYmUgcGxhY2VkIG91dHNpZGUgYW55IGJsb2NrIHRvIGRlY2xhcmUgdGhlIHBsdWdpbiBpbml0aWFsaXphdGlvbgotICogZnVuY3Rpb24uCi0gKgotICogU2luY2U6IDEuMgotICovCi0jZGVmaW5lIEdTVF9QTFVHSU5fU1RBVElDX0RFQ0xBUkUobmFtZSkgXAotICBleHRlcm4gdm9pZCBHX1BBU1RFKGdzdF9wbHVnaW5fLCBHX1BBU1RFKG5hbWUsIF9yZWdpc3RlcikpICh2b2lkKQotCi0vKioKLSAqIEdTVF9QTFVHSU5fU1RBVElDX1JFR0lTVEVSOgotICogQG5hbWU6IHNob3J0LCBidXQgdW5pcXVlIG5hbWUgb2YgdGhlIHBsdWdpbgotICoKLSAqIFRoaXMgbWFjcm8gY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBzdGF0aWNhbGx5IGxpbmtlZCBwbHVnaW5zLiBJdCBpcwotICogbmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBtYWNybyBiZWZvcmUgdGhlIHBsdWdpbiBjYW4gYmUgdXNlZC4KLSAqIEl0IGhhcyB0byBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggR1NUX1BMVUdJTl9TVEFUSUNfREVDTEFSRSBhbmQKLSAqIGNhbGxzIHRoZSBwbHVnaW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCi0gKgotICogU2luY2U6IDEuMgotICovCi0jZGVmaW5lIEdTVF9QTFVHSU5fU1RBVElDX1JFR0lTVEVSKG5hbWUpIEdfUEFTVEUoZ3N0X3BsdWdpbl8sIEdfUEFTVEUobmFtZSwgX3JlZ2lzdGVyKSkgKCkKLQotLyoqCi0gKiBHU1RfUExVR0lOX0RFRklORToKLSAqIEBtYWpvcjogbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGdzdHJlYW1lci1jb3JlIHRoYXQgcGx1Z2luIHdhcyBjb21waWxlZCBmb3IKLSAqIEBtaW5vcjogbWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGdzdHJlYW1lci1jb3JlIHRoYXQgcGx1Z2luIHdhcyBjb21waWxlZCBmb3IKLSAqIEBuYW1lOiBzaG9ydCwgYnV0IHVuaXF1ZSBuYW1lIG9mIHRoZSBwbHVnaW4KLSAqIEBkZXNjcmlwdGlvbjogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHB1cnBvc2Ugb2YgdGhlIHBsdWdpbgotICogQGluaXQ6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIHBsdWdpbl9pbml0IG1ldGhvZCB3aXRoIHRoZSBzaWduYXR1cmUgb2YgPGNvZGU+c3RhdGljIGdib29sZWFuIHBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pPC9jb2RlPi4KLSAqIEB2ZXJzaW9uOiBmdWxsIHZlcnNpb24gc3RyaW5nIChlLmcuIFZFUlNJT04gZnJvbSBjb25maWcuaCkKLSAqIEBsaWNlbnNlOiB1bmRlciB3aGljaCBsaWNlbmNlIHRoZSBwYWNrYWdlIGhhcyBiZWVuIHJlbGVhc2VkLCBlLmcuIEdQTCwgTEdQTC4KLSAqIEBwYWNrYWdlOiB0aGUgcGFja2FnZS1uYW1lIChlLmcuIFBBQ0tBR0VfTkFNRSBmcm9tIGNvbmZpZy5oKQotICogQG9yaWdpbjogYSBkZXNjcmlwdGlvbiBmcm9tIHdoZXJlIHRoZSBwYWNrYWdlIGNvbWVzIGZyb20gKGUuZy4gdGhlIGhvbWVwYWdlIFVSTCkKLSAqCi0gKiBUaGlzIG1hY3JvIG5lZWRzIHRvIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBlbnRyeSBwb2ludCBhbmQgbWV0YSBkYXRhIG9mIGEKLSAqIHBsdWdpbi4gT25lIHdvdWxkIHVzZSB0aGlzIG1hY3JvIHRvIGV4cG9ydCBhIHBsdWdpbiwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZAotICogYnkgb3RoZXIgYXBwbGljYXRpb25zLgotICoKLSAqIFRoZSBtYWNybyB1c2VzIGEgZGVmaW5lIG5hbWVkIFBBQ0tBR0UgZm9yIHRoZSAjR3N0UGx1Z2luRGVzYyxzb3VyY2UgZmllbGQuCi0gKiBXaGVuIHVzaW5nIGF1dG9jb25mLCB0aGlzIGlzIHVzdWFsbHkgc2V0IGF1dG9tYXRpY2FsbHkgdmlhIHRoZSBBQ19JTklUCi0gKiBtYWNybywgYW5kIHNldCBpbiBjb25maWcuaC4gSWYgeW91IGFyZSBub3QgdXNpbmcgYXV0b2NvbmYsIHlvdSB3aWxsIG5lZWQgdG8KLSAqIGRlZmluZSBQQUNLQUdFIHlvdXJzZWxmIGFuZCBzZXQgaXQgdG8gYSBzaG9ydCBtbmVtb25pYyBzdHJpbmcgaWRlbnRpZnlpbmcKLSAqIHlvdXIgYXBwbGljYXRpb24vcGFja2FnZSwgZS5nLiAnc29tZWFwcCcgb3IgJ215LXBsdWdpbnMtZm9vLgotICoKLSAqIElmIGRlZmluZWQsIHRoZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHdpbGwgYWxzbyBiZSB1c2VkIGZvciB0aGUKLSAqICNHc3RQbHVnaW5EZXNjLHJlbGVhc2VfZGF0ZXRpbWUgZmllbGQuCi0gKi8KLSNpZmRlZiBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQwotI2RlZmluZSBHU1RfUExVR0lOX0RFRklORShtYWpvcixtaW5vcixuYW1lLGRlc2NyaXB0aW9uLGluaXQsdmVyc2lvbixsaWNlbnNlLHBhY2thZ2Usb3JpZ2luKQlcCi1HX0JFR0lOX0RFQ0xTCQkJCQkJXAotR1NUX1BMVUdJTl9FWFBPUlQgdm9pZCBHX1BBU1RFKGdzdF9wbHVnaW5fLCBHX1BBU1RFKG5hbWUsIF9yZWdpc3RlcikpICh2b2lkKTsJCQlcCi0JCQkJCQkJXAotdm9pZAkJCQkJCQlcCi1HX1BBU1RFKGdzdF9wbHVnaW5fLCBHX1BBU1RFKG5hbWUsIF9yZWdpc3RlcikpICh2b2lkKQlcCi17CQkJCQkJCVwKLSAgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMgKG1ham9yLCBtaW5vciwgR19TVFJJTkdJRlkobmFtZSksCVwKLSAgICAgIGRlc2NyaXB0aW9uLCBpbml0LCB2ZXJzaW9uLCBsaWNlbnNlLAkJXAotICAgICAgUEFDS0FHRSwgcGFja2FnZSwgb3JpZ2luKTsJCQlcCi19CQkJCQkJCVwKLUdfRU5EX0RFQ0xTCi0jZWxzZSAvKiAhR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUMgKi8KLSNkZWZpbmUgR1NUX1BMVUdJTl9ERUZJTkUobWFqb3IsbWlub3IsbmFtZSxkZXNjcmlwdGlvbixpbml0LHZlcnNpb24sbGljZW5zZSxwYWNrYWdlLG9yaWdpbikJXAotR19CRUdJTl9ERUNMUyBcCi1HU1RfUExVR0lOX0VYUE9SVCBHc3RQbHVnaW5EZXNjIGdzdF9wbHVnaW5fZGVzYyA9IHsJXAotICBtYWpvciwJCQkJCQlcCi0gIG1pbm9yLAkJCQkJCVwKLSAgR19TVFJJTkdJRlkobmFtZSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoZ2NoYXIgKikgZGVzY3JpcHRpb24sCQkJCVwKLSAgaW5pdCwJCQkJCQkJXAotICB2ZXJzaW9uLAkJCQkJCVwKLSAgbGljZW5zZSwJCQkJCQlcCi0gIFBBQ0tBR0UsCQkJCQkJXAotICBwYWNrYWdlLAkJCQkJCVwKLSAgb3JpZ2luLAkJCQkJCVwKLSAgX19HU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FLCAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfUEFERElOR19JTklUCQkJCSAgICAgICAgXAotfTsgXAotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQyAqLwotCi0vKioKLSAqIEdTVF9MSUNFTlNFX1VOS05PV046Ci0gKgotICogVG8gYmUgdXNlZCBpbiBHU1RfUExVR0lOX0RFRklORSBpZiB1bnN1cmUgYWJvdXQgdGhlIGxpY2VuY2UuCi0gKi8KLSNkZWZpbmUgR1NUX0xJQ0VOU0VfVU5LTk9XTiAidW5rbm93biIKLQotCi0vKiBmdW5jdGlvbiBmb3IgZmlsdGVycyAqLwotLyoqCi0gKiBHc3RQbHVnaW5GaWx0ZXI6Ci0gKiBAcGx1Z2luOiB0aGUgcGx1Z2luIHRvIGNoZWNrCi0gKiBAdXNlcl9kYXRhOiB0aGUgdXNlcl9kYXRhIHRoYXQgaGFzIGJlZW4gcGFzc2VkIG9uIGUuZy4gZ3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXIoKQotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGUuZy4gZ3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXIoKQotICogdG8gZ2V0IGEgbGlzdCBvZiBwbHVnaW5zIHRoYXQgbWF0Y2ggY2VydGFpbiBjcml0ZXJpYS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBmb3IgYSBwb3NpdGl2ZSBtYXRjaCwgJUZBTFNFIG90aGVyd2lzZQotICovCi10eXBlZGVmIGdib29sZWFuICAgICAgICAoKkdzdFBsdWdpbkZpbHRlcikgICAgICAgICAgICAgIChHc3RQbHVnaW4gKnBsdWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLUdUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fZ2V0X3R5cGUgICAgICAgICAgICAgKHZvaWQpOwotCi1nYm9vbGVhbgkJZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMJKGdpbnQgbWFqb3JfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbWlub3JfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGx1Z2luSW5pdEZ1bmMgaW5pdF9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbGljZW5zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpvcmlnaW4pOwotCi1nYm9vbGVhbgkJZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbAkoZ2ludCBtYWpvcl92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBtaW5vcl92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQbHVnaW5Jbml0RnVsbEZ1bmMgaW5pdF9mdWxsX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpsaWNlbnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLWNvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfbmFtZQkJKEdzdFBsdWdpbiAqcGx1Z2luKTsKLWNvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24JKEdzdFBsdWdpbiAqcGx1Z2luKTsKLWNvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUJCShHc3RQbHVnaW4gKnBsdWdpbik7Ci1jb25zdCBnY2hhcioJCWdzdF9wbHVnaW5fZ2V0X3ZlcnNpb24JCShHc3RQbHVnaW4gKnBsdWdpbik7Ci1jb25zdCBnY2hhcioJCWdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2UJCShHc3RQbHVnaW4gKnBsdWdpbik7Ci1jb25zdCBnY2hhcioJCWdzdF9wbHVnaW5fZ2V0X3NvdXJjZQkJKEdzdFBsdWdpbiAqcGx1Z2luKTsKLWNvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfcGFja2FnZQkJKEdzdFBsdWdpbiAqcGx1Z2luKTsKLWNvbnN0IGdjaGFyKgkJZ3N0X3BsdWdpbl9nZXRfb3JpZ2luCQkoR3N0UGx1Z2luICpwbHVnaW4pOwotY29uc3QgZ2NoYXIqCQlnc3RfcGx1Z2luX2dldF9yZWxlYXNlX2RhdGVfc3RyaW5nIChHc3RQbHVnaW4gKnBsdWdpbik7Ci1jb25zdCBHc3RTdHJ1Y3R1cmUqCWdzdF9wbHVnaW5fZ2V0X2NhY2hlX2RhdGEJKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci12b2lkCQkJZ3N0X3BsdWdpbl9zZXRfY2FjaGVfZGF0YQkoR3N0UGx1Z2luICogcGx1Z2luLCBHc3RTdHJ1Y3R1cmUgKmNhY2hlX2RhdGEpOwotCi1nYm9vbGVhbgkJZ3N0X3BsdWdpbl9pc19sb2FkZWQJCShHc3RQbHVnaW4gKnBsdWdpbik7Ci0KLUdzdFBsdWdpbiAqCQlnc3RfcGx1Z2luX2xvYWRfZmlsZQkJKGNvbnN0IGdjaGFyICpmaWxlbmFtZSwgR0Vycm9yKiogZXJyb3IpOwotCi1Hc3RQbHVnaW4gKiAgICAgICAgICAgICBnc3RfcGx1Z2luX2xvYWQgICAgICAgICAgICAgICAgIChHc3RQbHVnaW4gKnBsdWdpbik7Ci1Hc3RQbHVnaW4gKiAgICAgICAgICAgICBnc3RfcGx1Z2luX2xvYWRfYnlfbmFtZSAgICAgICAgIChjb25zdCBnY2hhciAqbmFtZSk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3kgICAgICAgIChHc3RQbHVnaW4gICAgKiBwbHVnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiogZW52X3ZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiogcGF0aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiogbmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzIGZsYWdzKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9wbHVnaW5fYWRkX2RlcGVuZGVuY3lfc2ltcGxlIChHc3RQbHVnaW4gICAqIHBsdWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGVudl92YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogcGF0aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBuYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MgZmxhZ3MpOwotCi12b2lkIGdzdF9wbHVnaW5fbGlzdF9mcmVlIChHTGlzdCAqbGlzdCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0UGx1Z2luLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9QTFVHSU5fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0cGx1Z2luZmVhdHVyZS5jIGIvZ3N0L2dzdHBsdWdpbmZlYXR1cmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI2MDYyYS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cGx1Z2luZmVhdHVyZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDA2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3RwbHVnaW5mZWF0dXJlLmM6IEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBwbHVnaW4gZmVhdHVyZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0cGx1Z2luZmVhdHVyZQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBCYXNlIGNsYXNzIGZvciBjb250ZW50cyBvZiBhIEdzdFBsdWdpbgotICogQHNlZV9hbHNvOiAjR3N0UGx1Z2luCi0gKgotICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGFueXRoaW5nIHRoYXQgY2FuIGJlIGFkZGVkIHRvIGEgI0dzdFBsdWdpbi4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdHBsdWdpbmZlYXR1cmUuaCIKLSNpbmNsdWRlICJnc3RwbHVnaW4uaCIKLSNpbmNsdWRlICJnc3RyZWdpc3RyeS5oIgotI2luY2x1ZGUgImdzdGluZm8uaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIEdTVF9DQVRfUExVR0lOX0xPQURJTkcKLQotc3RhdGljIHZvaWQgZ3N0X3BsdWdpbl9mZWF0dXJlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotLyogc3RhdGljIGd1aW50IGdzdF9wbHVnaW5fZmVhdHVyZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLwotCi1HX0RFRklORV9BQlNUUkFDVF9UWVBFIChHc3RQbHVnaW5GZWF0dXJlLCBnc3RfcGx1Z2luX2ZlYXR1cmUsIEdTVF9UWVBFX09CSkVDVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcGx1Z2luX2ZlYXR1cmVfY2xhc3NfaW5pdCAoR3N0UGx1Z2luRmVhdHVyZUNsYXNzICoga2xhc3MpCi17Ci0gIEdfT0JKRUNUX0NMQVNTIChrbGFzcyktPmZpbmFsaXplID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BsdWdpbl9mZWF0dXJlX2luaXQgKEdzdFBsdWdpbkZlYXR1cmUgKiBmZWF0dXJlKQotewotICAvKiBkbyBub3RoaW5nLCBuZWVkZWQgYmVjYXVzZSBvZiBHX0RFRklORV9UWVBFICovCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcGx1Z2luX2ZlYXR1cmVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAob2JqZWN0KTsKLQotICBHU1RfREVCVUcgKCJmaW5hbGl6aW5nIGZlYXR1cmUgJXA6ICclcyciLCBmZWF0dXJlLCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKLQotICBpZiAoZmVhdHVyZS0+cGx1Z2luICE9IE5VTEwpIHsKLSAgICBnX29iamVjdF9yZW1vdmVfd2Vha19wb2ludGVyICgoR09iamVjdCAqKSBmZWF0dXJlLT5wbHVnaW4sCi0gICAgICAgIChncG9pbnRlciAqKSAmIGZlYXR1cmUtPnBsdWdpbik7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3BsdWdpbl9mZWF0dXJlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkOgotICogQGZlYXR1cmU6ICh0cmFuc2ZlciBub25lKTogdGhlIHBsdWdpbiBmZWF0dXJlIHRvIGNoZWNrCi0gKgotICogTG9hZHMgdGhlIHBsdWdpbiBjb250YWluaW5nIEBmZWF0dXJlIGlmIGl0J3Mgbm90IGFscmVhZHkgbG9hZGVkLiBAZmVhdHVyZSBpcwotICogdW5hZmZlY3RlZDsgdXNlIHRoZSByZXR1cm4gdmFsdWUgaW5zdGVhZC4KLSAqCi0gKiBOb3JtYWxseSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgbGlrZSB0aGlzOgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqIEdzdFBsdWdpbkZlYXR1cmUgKmxvYWRlZF9mZWF0dXJlOwotICoKLSAqIGxvYWRlZF9mZWF0dXJlID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKGZlYXR1cmUpOwotICogLy8gcHJlc3VtYWJseSwgd2UncmUgbm8gbG9uZ2VyIGludGVyZXN0ZWQgaW4gdGhlIHBvdGVudGlhbGx5LXVubG9hZGVkIGZlYXR1cmUKLSAqIGdzdF9vYmplY3RfdW5yZWYgKGZlYXR1cmUpOwotICogZmVhdHVyZSA9IGxvYWRlZF9mZWF0dXJlOwotICogXXwKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSByZWZlcmVuY2UgdG8gdGhlIGxvYWRlZAotICogZmVhdHVyZSwgb3IgJU5VTEwgb24gZXJyb3IKLSAqLwotR3N0UGx1Z2luRmVhdHVyZSAqCi1nc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUpCi17Ci0gIEdzdFBsdWdpbiAqcGx1Z2luOwotICBHc3RQbHVnaW5GZWF0dXJlICpyZWFsX2ZlYXR1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlKSwgRkFMU0UpOwotCi0gIEdTVF9ERUJVRyAoImxvYWRpbmcgcGx1Z2luIGZvciBmZWF0dXJlICVwOyAnJXMnIiwgZmVhdHVyZSwKLSAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOwotICBpZiAoZmVhdHVyZS0+bG9hZGVkKQotICAgIHJldHVybiBnc3Rfb2JqZWN0X3JlZiAoZmVhdHVyZSk7Ci0KLSAgR1NUX0RFQlVHICgibG9hZGluZyBwbHVnaW4gJXMiLCBmZWF0dXJlLT5wbHVnaW5fbmFtZSk7Ci0gIHBsdWdpbiA9IGdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lIChmZWF0dXJlLT5wbHVnaW5fbmFtZSk7Ci0gIGlmICghcGx1Z2luKQotICAgIGdvdG8gbG9hZF9mYWlsZWQ7Ci0KLSAgR1NUX0RFQlVHICgibG9hZGVkIHBsdWdpbiAlcyIsIGZlYXR1cmUtPnBsdWdpbl9uYW1lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKLQotICByZWFsX2ZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKLQotICBpZiAocmVhbF9mZWF0dXJlID09IE5VTEwpCi0gICAgZ290byBkaXNhcHBlYXJlZDsKLSAgZWxzZSBpZiAoIXJlYWxfZmVhdHVyZS0+bG9hZGVkKQotICAgIGdvdG8gbm90X2ZvdW5kOwotCi0gIHJldHVybiByZWFsX2ZlYXR1cmU7Ci0KLSAgLyogRVJST1JTICovCi1sb2FkX2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIGxvYWQgcGx1Z2luIGNvbnRhaW5pbmcgZmVhdHVyZSAnJXMnLiIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1kaXNhcHBlYXJlZDoKLSAgewotICAgIEdTVF9JTkZPCi0gICAgICAgICgiTG9hZGVkIHBsdWdpbiBjb250YWluaW5nIGZlYXR1cmUgJyVzJywgYnV0IGZlYXR1cmUgZGlzYXBwZWFyZWQuIiwKLSAgICAgICAgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vdF9mb3VuZDoKLSAgewotICAgIEdTVF9JTkZPICgiVHJpZWQgdG8gbG9hZCBwbHVnaW4gY29udGFpbmluZyBmZWF0dXJlICclcycsIGJ1dCBmZWF0dXJlIHdhcyAiCi0gICAgICAgICJub3QgZm91bmQuIiwgR1NUX09CSkVDVF9OQU1FIChyZWFsX2ZlYXR1cmUpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuazoKLSAqIEBmZWF0dXJlOiBmZWF0dXJlIHRvIHJhbmsKLSAqIEByYW5rOiByYW5rIHZhbHVlIC0gaGlnaGVyIG51bWJlciBtZWFucyBtb3JlIHByaW9yaXR5IHJhbmsKLSAqCi0gKiBTcGVjaWZpZXMgYSByYW5rIGZvciBhIHBsdWdpbiBmZWF0dXJlLCBzbyB0aGF0IGF1dG9wbHVnZ2luZyB1c2VzCi0gKiB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmZWF0dXJlLgotICovCi12b2lkCi1nc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsgKEdzdFBsdWdpbkZlYXR1cmUgKiBmZWF0dXJlLCBndWludCByYW5rKQotewotICBnX3JldHVybl9pZl9mYWlsIChmZWF0dXJlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmUpKTsKLQotICBmZWF0dXJlLT5yYW5rID0gcmFuazsKLX0KLQotLyoqCi0gKiBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3Jhbms6Ci0gKiBAZmVhdHVyZTogYSBmZWF0dXJlCi0gKgotICogR2V0cyB0aGUgcmFuayBvZiBhIHBsdWdpbiBmZWF0dXJlLgotICoKLSAqIFJldHVybnM6IFRoZSByYW5rIG9mIHRoZSBmZWF0dXJlCi0gKi8KLWd1aW50Ci1nc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKEdzdFBsdWdpbkZlYXR1cmUgKiBmZWF0dXJlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlKSwgR1NUX1JBTktfTk9ORSk7Ci0KLSAgcmV0dXJuIGZlYXR1cmUtPnJhbms7Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW46Ci0gKiBAZmVhdHVyZTogYSBmZWF0dXJlCi0gKgotICogR2V0IHRoZSBwbHVnaW4gdGhhdCBwcm92aWRlcyB0aGlzIGZlYXR1cmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBwbHVnaW4gdGhhdCBwcm92aWRlcyB0aGlzCi0gKiAgICAgZmVhdHVyZSwgb3IgJU5VTEwuICBVbnJlZiB3aXRoIGdzdF9vYmplY3RfdW5yZWYoKSB3aGVuIG5vCi0gKiAgICAgbG9uZ2VyIG5lZWRlZC4KLSAqLwotR3N0UGx1Z2luICoKLWdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luIChHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QTFVHSU5fRkVBVFVSRSAoZmVhdHVyZSksIE5VTEwpOwotCi0gIGlmIChmZWF0dXJlLT5wbHVnaW4gPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gKEdzdFBsdWdpbiAqKSBnc3Rfb2JqZWN0X3JlZiAoZmVhdHVyZS0+cGx1Z2luKTsKLX0KLQotLyoqCi0gKiBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lOgotICogQGZlYXR1cmU6IGEgZmVhdHVyZQotICoKLSAqIEdldCB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgcHJvdmlkZXMgdGhpcyBmZWF0dXJlLgotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSk6IHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBwcm92aWRlcyB0aGlzCi0gKiAgICAgZmVhdHVyZSwgb3IgJU5VTEwgaWYgdGhlIGZlYXR1cmUgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhCi0gKiAgICAgcGx1Z2luLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW5fbmFtZSAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmUpLCBOVUxMKTsKLQotICBpZiAoZmVhdHVyZS0+cGx1Z2luID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0dXJuIGdzdF9wbHVnaW5fZ2V0X25hbWUgKGZlYXR1cmUtPnBsdWdpbik7Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZToKLSAqIEBsaXN0OiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luRmVhdHVyZSk6IGxpc3QKLSAqICAgICBvZiAjR3N0UGx1Z2luRmVhdHVyZQotICoKLSAqIFVucmVmcyBlYWNoIG1lbWJlciBvZiBAbGlzdCwgdGhlbiBmcmVlcyB0aGUgbGlzdC4KLSAqLwotdm9pZAotZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAoR0xpc3QgKiBsaXN0KQotewotICBHTGlzdCAqZzsKLQotICBmb3IgKGcgPSBsaXN0OyBnOyBnID0gZy0+bmV4dCkgewotICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZy0+ZGF0YSk7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKLSAgfQotICBnX2xpc3RfZnJlZSAobGlzdCk7Ci19Ci0KLS8qKgotICogZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weToKLSAqIEBsaXN0OiAodHJhbnNmZXIgbm9uZSkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luRmVhdHVyZSk6IGxpc3QKLSAqICAgICBvZiAjR3N0UGx1Z2luRmVhdHVyZQotICoKLSAqIENvcGllcyB0aGUgbGlzdCBvZiBmZWF0dXJlcy4gQ2FsbGVyIHNob3VsZCBjYWxsIEBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlCi0gKiB3aGVuIGRvbmUgd2l0aCB0aGUgbGlzdC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luRmVhdHVyZSk6IGEgY29weSBvZiBAbGlzdCwKLSAqICAgICB3aXRoIGVhY2ggZmVhdHVyZSdzIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnRlZC4KLSAqLwotR0xpc3QgKgotZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weSAoR0xpc3QgKiBsaXN0KQotewotICBHTGlzdCAqbmV3X2xpc3QgPSBOVUxMOwotCi0gIGlmIChHX0xJS0VMWSAobGlzdCkpIHsKLSAgICBHTGlzdCAqbGFzdDsKLQotICAgIG5ld19saXN0ID0gZ19saXN0X2FsbG9jICgpOwotICAgIG5ld19saXN0LT5kYXRhID0gZ3N0X29iamVjdF9yZWYgKGxpc3QtPmRhdGEpOwotICAgIG5ld19saXN0LT5wcmV2ID0gTlVMTDsKLSAgICBsYXN0ID0gbmV3X2xpc3Q7Ci0gICAgbGlzdCA9IGxpc3QtPm5leHQ7Ci0gICAgd2hpbGUgKGxpc3QpIHsKLSAgICAgIGxhc3QtPm5leHQgPSBnX2xpc3RfYWxsb2MgKCk7Ci0gICAgICBsYXN0LT5uZXh0LT5wcmV2ID0gbGFzdDsKLSAgICAgIGxhc3QgPSBsYXN0LT5uZXh0OwotICAgICAgbGFzdC0+ZGF0YSA9IGdzdF9vYmplY3RfcmVmIChsaXN0LT5kYXRhKTsKLSAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwotICAgIH0KLSAgICBsYXN0LT5uZXh0ID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBuZXdfbGlzdDsKLX0KLQotLyoqCi0gKiBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9kZWJ1ZzoKLSAqIEBsaXN0OiAodHJhbnNmZXIgbm9uZSkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luRmVhdHVyZSk6IGEgI0dMaXN0IG9mCi0gKiAgICAgcGx1Z2luIGZlYXR1cmVzCi0gKgotICogRGVidWcgdGhlIHBsdWdpbiBmZWF0dXJlIG5hbWVzIGluIEBsaXN0LgotICovCi12b2lkCi1nc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9kZWJ1ZyAoR0xpc3QgKiBsaXN0KQotewotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgd2hpbGUgKGxpc3QpIHsKLSAgICBHU1RfREVCVUcgKCIlcyIsCi0gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoKEdzdFBsdWdpbkZlYXR1cmUgKikgbGlzdC0+ZGF0YSkpOwotICAgIGxpc3QgPSBsaXN0LT5uZXh0OwotICB9Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbjoKLSAqIEBmZWF0dXJlOiBhIGZlYXR1cmUKLSAqIEBtaW5fbWFqb3I6IG1pbmltdW0gcmVxdWlyZWQgbWFqb3IgdmVyc2lvbgotICogQG1pbl9taW5vcjogbWluaW11bSByZXF1aXJlZCBtaW5vciB2ZXJzaW9uCi0gKiBAbWluX21pY3JvOiBtaW5pbXVtIHJlcXVpcmVkIG1pY3JvIHZlcnNpb24KLSAqCi0gKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGx1Z2luIGZlYXR1cmUgaXMgYXQgbGVhc3QKLSAqICB0aGUgcmVxdWlyZWQgdmVyc2lvbgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwbHVnaW4gZmVhdHVyZSBoYXMgYXQgbGVhc3QKLSAqICB0aGUgcmVxdWlyZWQgdmVyc2lvbiwgb3RoZXJ3aXNlICVGQUxTRS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uIChHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSwKLSAgICBndWludCBtaW5fbWFqb3IsIGd1aW50IG1pbl9taW5vciwgZ3VpbnQgbWluX21pY3JvKQotewotICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7Ci0gIEdzdFBsdWdpbiAqcGx1Z2luOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmVhdHVyZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmUpLCBGQUxTRSk7Ci0KLSAgR1NUX0RFQlVHICgiTG9va2luZyB1cCBwbHVnaW4gJyVzJyBjb250YWluaW5nIHBsdWdpbiBmZWF0dXJlICclcyciLAotICAgICAgZmVhdHVyZS0+cGx1Z2luX25hbWUsIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOwotCi0gIHJlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldCAoKTsKLSAgcGx1Z2luID0gZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luIChyZWdpc3RyeSwgZmVhdHVyZS0+cGx1Z2luX25hbWUpOwotCi0gIGlmIChwbHVnaW4pIHsKLSAgICBjb25zdCBnY2hhciAqdmVyX3N0cjsKLSAgICBndWludCBtYWpvciwgbWlub3IsIG1pY3JvLCBuYW5vOwotICAgIGdpbnQgbnNjYW47Ci0KLSAgICB2ZXJfc3RyID0gZ3N0X3BsdWdpbl9nZXRfdmVyc2lvbiAocGx1Z2luKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAodmVyX3N0ciAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgICBuc2NhbiA9IHNzY2FuZiAodmVyX3N0ciwgIiV1LiV1LiV1LiV1IiwgJm1ham9yLCAmbWlub3IsICZtaWNybywgJm5hbm8pOwotICAgIEdTVF9ERUJVRyAoInZlcnNpb24gc3RyaW5nICclcycgcGFyc2VkIHRvICVkIHZhbHVlcyIsIHZlcl9zdHIsIG5zY2FuKTsKLQotICAgIGlmIChuc2NhbiA+PSAzKSB7Ci0gICAgICBpZiAobWFqb3IgPiBtaW5fbWFqb3IpCi0gICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBlbHNlIGlmIChtYWpvciA8IG1pbl9tYWpvcikKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBlbHNlIGlmIChtaW5vciA+IG1pbl9taW5vcikKLSAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGVsc2UgaWYgKG1pbm9yIDwgbWluX21pbm9yKQotICAgICAgICByZXQgPSBGQUxTRTsKLSAgICAgIGVsc2UgaWYgKG1pY3JvID4gbWluX21pY3JvKQotICAgICAgICByZXQgPSBUUlVFOwotICAgICAgLyogbWljcm8gaXMgMSBzbWFsbGVyIGJ1dCB3ZSBoYXZlIGEgbmFubyB2ZXJzaW9uLCB0aGlzIGlzIHRoZSB1cGNvbWluZwotICAgICAgICogcmVsZWFzZSBvZiB0aGUgcmVxdWVzdGVkIHZlcnNpb24gYW5kIHdlJ3JlIG9rIHRoZW4gKi8KLSAgICAgIGVsc2UgaWYgKG5zY2FuID09IDQgJiYgbmFubyA+IDAgJiYgKG1pY3JvICsgMSA9PSBtaW5fbWljcm8pKQotICAgICAgICByZXQgPSBUUlVFOwotICAgICAgZWxzZQotICAgICAgICByZXQgPSAobWljcm8gPT0gbWluX21pY3JvKTsKLQotICAgICAgR1NUX0RFQlVHICgiQ2hlY2tpbmcgd2hldGhlciAldS4ldS4ldSA+PSAldS4ldS4ldT8gJXMiLCBtYWpvciwgbWlub3IsCi0gICAgICAgICAgbWljcm8sIG1pbl9tYWpvciwgbWluX21pbm9yLCBtaW5fbWljcm8sIChyZXQpID8gInllcyIgOiAibm8iKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcgKCJDb3VsZCBub3QgcGFyc2UgdmVyc2lvbiBzdHJpbmcgJyVzJyBvZiBwbHVnaW4gJyVzJyIsCi0gICAgICAgICAgdmVyX3N0ciwgZmVhdHVyZS0+cGx1Z2luX25hbWUpOwotICAgIH0KLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHICgiQ291bGQgbm90IGZpbmQgcGx1Z2luICclcyciLCBmZWF0dXJlLT5wbHVnaW5fbmFtZSk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYzoKLSAqIEBwMTogYSAjR3N0UGx1Z2luRmVhdHVyZQotICogQHAyOiBhICNHc3RQbHVnaW5GZWF0dXJlCi0gKgotICogQ29tcGFyZXMgdGhlIHR3byBnaXZlbiAjR3N0UGx1Z2luRmVhdHVyZSBpbnN0YW5jZXMuIFRoaXMgZnVuY3Rpb24gY2FuIGJlCi0gKiB1c2VkIGFzIGEgI0dDb21wYXJlRnVuYyB3aGVuIHNvcnRpbmcgYnkgcmFuayBhbmQgdGhlbiBieSBuYW1lLgotICoKLSAqIFJldHVybnM6IG5lZ2F0aXZlIHZhbHVlIGlmIHRoZSByYW5rIG9mIHAxID4gdGhlIHJhbmsgb2YgcDIgb3IgdGhlIHJhbmtzIGFyZQotICogZXF1YWwgYnV0IHRoZSBuYW1lIG9mIHAxIGNvbWVzIGJlZm9yZSB0aGUgbmFtZSBvZiBwMjsgemVybyBpZiB0aGUgcmFuawotICogYW5kIG5hbWVzIGFyZSBlcXVhbDsgcG9zaXRpdmUgdmFsdWUgaWYgdGhlIHJhbmsgb2YgcDEgPCB0aGUgcmFuayBvZiBwMiBvciB0aGUKLSAqIHJhbmtzIGFyZSBlcXVhbCBidXQgdGhlIG5hbWUgb2YgcDIgY29tZXMgYmVmb3JlIHRoZSBuYW1lIG9mIHAxCi0gKi8KLWdpbnQKLWdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBwMSwgZ2NvbnN0cG9pbnRlciBwMikKLXsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZjEsICpmMjsKLSAgZ2ludCBkaWZmOwotCi0gIGYxID0gKEdzdFBsdWdpbkZlYXR1cmUgKikgcDE7Ci0gIGYyID0gKEdzdFBsdWdpbkZlYXR1cmUgKikgcDI7Ci0KLSAgZGlmZiA9IGYyLT5yYW5rIC0gZjEtPnJhbms7Ci0gIGlmIChkaWZmICE9IDApCi0gICAgcmV0dXJuIGRpZmY7Ci0KLSAgZGlmZiA9IHN0cmNtcCAoR1NUX09CSkVDVF9OQU1FIChmMSksIEdTVF9PQkpFQ1RfTkFNRSAoZjIpKTsKLQotICByZXR1cm4gZGlmZjsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RwbHVnaW5mZWF0dXJlLmggYi9nc3QvZ3N0cGx1Z2luZmVhdHVyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGE0ODlkLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RwbHVnaW5mZWF0dXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdHBsdWdpbmZlYXR1cmUuaDogSGVhZGVyIGZvciBiYXNlIEdzdFBsdWdpbkZlYXR1cmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfUExVR0lOX0ZFQVRVUkVfSF9fCi0jZGVmaW5lIF9fR1NUX1BMVUdJTl9GRUFUVVJFX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbi5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUgICAgICAgICAgICAgICAgIChnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1BMVUdJTl9GRUFUVVJFKG9iaikgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1BMVUdJTl9GRUFUVVJFLCBHc3RQbHVnaW5GZWF0dXJlKSkKLSNkZWZpbmUgR1NUX0lTX1BMVUdJTl9GRUFUVVJFKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1BMVUdJTl9GRUFUVVJFKSkKLSNkZWZpbmUgR1NUX1BMVUdJTl9GRUFUVVJFX0NMQVNTKGtsYXNzKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUsIEdzdFBsdWdpbkZlYXR1cmVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19QTFVHSU5fRkVBVFVSRV9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1BMVUdJTl9GRUFUVVJFKSkKLSNkZWZpbmUgR1NUX1BMVUdJTl9GRUFUVVJFX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUsIEdzdFBsdWdpbkZlYXR1cmVDbGFzcykpCi0jZGVmaW5lIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUKG9iaikgICAgICAgICAgICAoKEdzdFBsdWdpbkZlYXR1cmUqKShvYmopKQotCi0vKioKLSAqIEdzdFBsdWdpbkZlYXR1cmU6Ci0gKgotICogT3BhcXVlICNHc3RQbHVnaW5GZWF0dXJlIHN0cnVjdHVyZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBsdWdpbkZlYXR1cmUgR3N0UGx1Z2luRmVhdHVyZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQbHVnaW5GZWF0dXJlQ2xhc3MgR3N0UGx1Z2luRmVhdHVyZUNsYXNzOwotCi0vKioKLSAqIEdzdFJhbms6Ci0gKiBAR1NUX1JBTktfTk9ORTogd2lsbCBiZSBjaG9zZW4gbGFzdCBvciBub3QgYXQgYWxsCi0gKiBAR1NUX1JBTktfTUFSR0lOQUw6IHVubGlrZWx5IHRvIGJlIGNob3NlbgotICogQEdTVF9SQU5LX1NFQ09OREFSWTogbGlrZWx5IHRvIGJlIGNob3NlbgotICogQEdTVF9SQU5LX1BSSU1BUlk6IHdpbGwgYmUgY2hvc2VuIGZpcnN0Ci0gKgotICogRWxlbWVudCBwcmlvcml0eSByYW5rcy4gRGVmaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGF1dG9wbHVnZ2VyIChvcgotICogc2ltaWxhciByYW5rLXBpY2tpbmcgbWVjaGFuaXNtcywgc3VjaCBhcyBlLmcuIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkoKSkKLSAqIHdpbGwgY2hvb3NlIHRoaXMgZWxlbWVudCBvdmVyIGFuIGFsdGVybmF0aXZlIG9uZSB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uLgotICoKLSAqIFRoZXNlIGNvbnN0YW50cyBzZXJ2ZSBhcyBhIHJvdWdoIGd1aWRhbmNlIGZvciBkZWZpbmluZyB0aGUgcmFuayBvZiBhCi0gKiAjR3N0UGx1Z2luRmVhdHVyZS4gQW55IHZhbHVlIGlzIHZhbGlkLCBpbmNsdWRpbmcgdmFsdWVzIGJpZ2dlciB0aGFuCi0gKiBAR1NUX1JBTktfUFJJTUFSWS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1JBTktfTk9ORSAgICAgICAgICAgICAgICAgPSAwLAotICBHU1RfUkFOS19NQVJHSU5BTCAgICAgICAgICAgICA9IDY0LAotICBHU1RfUkFOS19TRUNPTkRBUlkgICAgICAgICAgICA9IDEyOCwKLSAgR1NUX1JBTktfUFJJTUFSWSAgICAgICAgICAgICAgPSAyNTYKLX0gR3N0UmFuazsKLQotLyoqCi0gKiBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWU6Ci0gKiBAZmVhdHVyZTogYSAjR3N0UGx1Z2luRmVhdHVyZSB0byBnZXQgdGhlIG5hbWUgb2YgQGZlYXR1cmUuCi0gKgotICogUmV0dXJucyB0aGUgbmFtZSBvZiBAZmVhdHVyZS4KLSAqIEZvciBhIG5hbWVsZXNzIHBsdWdpbiBmZWF0dXJlLCB0aGlzIHJldHVybnMgJU5VTEwuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChudWxsYWJsZSk6IHRoZSBuYW1lIG9mIEBmZWF0dXJlLiBNVCBzYWZlLgotICoKLSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lKGZlYXR1cmUpICAgICAgR1NUX09CSkVDVF9OQU1FKGZlYXR1cmUpCi0KLS8qKgotICogZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lOgotICogQGZlYXR1cmU6IGEgI0dzdFBsdWdpbkZlYXR1cmUgdG8gc2V0IHRoZSBuYW1lIG9mLgotICogQG5hbWU6IHRoZSBuZXcgbmFtZQotICoKLSAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIHBsdWdpbiBmZWF0dXJlLCBnZXR0aW5nIHJpZCBvZiB0aGUgb2xkIG5hbWUgaWYgdGhlcmUgd2FzIG9uZS4KLSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9uYW1lKGZlYXR1cmUsbmFtZSkgZ3N0X29iamVjdF9zZXRfbmFtZShHU1RfT0JKRUNUX0NBU1QoZmVhdHVyZSksbmFtZSkKLQotLyoqCi0gKiBHc3RQbHVnaW5GZWF0dXJlRmlsdGVyOgotICogQGZlYXR1cmU6IHRoZSBwbHVnaW5mZWF0dXJlIHRvIGNoZWNrCi0gKiBAdXNlcl9kYXRhOiB0aGUgdXNlcl9kYXRhIHRoYXQgaGFzIGJlZW4gcGFzc2VkIG9uIGUuZy4KLSAqICBnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIoKQotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGUuZy4gZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyKCkKLSAqIHRvIGdldCBhIGxpc3Qgb2YgcGx1Z2luZmVhdHVyZSB0aGF0IG1hdGNoIGNlcnRhaW4gY3JpdGVyaWEuCi0gKgotICogUmV0dXJuczogJVRSVUUgZm9yIGEgcG9zaXRpdmUgbWF0Y2gsICVGQUxTRSBvdGhlcndpc2UKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAgICAgICAgKCpHc3RQbHVnaW5GZWF0dXJlRmlsdGVyKSAgICAgICAoR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qIG5vcm1hbCBHT2JqZWN0IHN0dWZmICovCi1HVHlwZSAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF90eXBlICAgICAgICAgICAgICh2b2lkKTsKLQotR3N0UGx1Z2luRmVhdHVyZSAqCi0gICAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgICAgICAgICAgICAgICAgIChHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuayAgICAgICAgICAgICAoR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSwgZ3VpbnQgcmFuayk7Ci1ndWludCAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rICAgICAgICAgICAgIChHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlKTsKLQotR3N0UGx1Z2luICAgICAqIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luICAgICAgICAgICAoR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSk7Ci1jb25zdCBnY2hhciAgICogZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW5fbmFtZSAgICAgIChHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgICAgICAgICAgICAoR0xpc3QgKmxpc3QpOwotR0xpc3QgICAgICAgICAgKmdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2NvcHkgICAgICAgICAgICAoR0xpc3QgKmxpc3QpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZGVidWcgICAgICAgICAgIChHTGlzdCAqbGlzdCk7Ci0KLS8qKgotICogR1NUX1BMVUdJTl9GRUFUVVJFX0xJU1RfREVCVUc6Ci0gKiBAbGlzdDogKHRyYW5zZmVyIG5vbmUpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbkZlYXR1cmUpOiBhICNHTGlzdCBvZgotICogICAgIHBsdWdpbiBmZWF0dXJlcwotICoKLSAqIERlYnVnIHRoZSBwbHVnaW4gZmVhdHVyZSBuYW1lcyBpbiBAbGlzdC4KLSAqLwotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSNkZWZpbmUgR1NUX1BMVUdJTl9GRUFUVVJFX0xJU1RfREVCVUcobGlzdCkgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZGVidWcobGlzdCkKLSNlbHNlCi0jZGVmaW5lIEdTVF9QTFVHSU5fRkVBVFVSRV9MSVNUX0RFQlVHKGxpc3QpCi0jZW5kaWYKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uICAgICAgICAoR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIG1pbl9tYWpvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIG1pbl9taW5vciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIG1pbl9taWNybyk7Ci1naW50ICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jICAgIChnY29uc3Rwb2ludGVyIHAxLAotCQkJCQkJCSBnY29uc3Rwb2ludGVyIHAyKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RQbHVnaW5GZWF0dXJlLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmIC8qIF9fR1NUX1BMVUdJTl9GRUFUVVJFX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvZ3N0cGx1Z2lubG9hZGVyLmMgYi9nc3QvZ3N0cGx1Z2lubG9hZGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZDM0MWQuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHBsdWdpbmxvYWRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA2MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLSAqCi0gKiBnc3RwbHVnaW5sb2FkZXIuYzogR3N0UGx1Z2luTG9hZGVyIGhlbHBlciBmb3IgbG9hZGluZyBwbHVnaW4gZmlsZXMKLSAqIG91dCBvZiBwcm9jZXNzLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdF9wcml2YXRlLmg+Ci0KLSNpZm5kZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotCi0jZGVmaW5lIGZzeW5jKGZkKSBfY29tbWl0KGZkKQotI2luY2x1ZGUgPGlvLmg+Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci1leHRlcm4gSE1PRFVMRSBfcHJpdl9nc3RfZGxsX2hhbmRsZTsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9TWVNfVVRTTkFNRV9ICi0jaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3Rwb2xsLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHV0aWxzLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2lubG9hZGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHJlZ2lzdHJ5YmluYXJ5Lmg+Ci0KLS8qIElNUE9SVEFOVDogQnVtcCB0aGUgdmVyc2lvbiBudW1iZXIgaWYgdGhlIHBsdWdpbiBsb2FkZXIgcGFja2V0IHByb3RvY29sCi0gKiBjaGFuZ2VzLiBDaGFuZ2VzIGluIHRoZSBiaW5hcnkgcmVnaXN0cnkgZm9ybWF0IGl0c2VsZiBhcmUgaGFuZGxlZCBieQotICogYnVtcGluZyB0aGUgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUgotICovCi1zdGF0aWMgY29uc3QgZ3VpbnQzMiBsb2FkZXJfcHJvdG9jb2xfdmVyc2lvbiA9IDM7Ci0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIEdTVF9DQVRfUExVR0lOX0xPQURJTkcKLQotc3RhdGljIEdzdFBsdWdpbkxvYWRlciAqcGx1Z2luX2xvYWRlcl9uZXcgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnkpOwotc3RhdGljIGdib29sZWFuIHBsdWdpbl9sb2FkZXJfZnJlZSAoR3N0UGx1Z2luTG9hZGVyICogbG9hZGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBwbHVnaW5fbG9hZGVyX2xvYWQgKEdzdFBsdWdpbkxvYWRlciAqIGxvYWRlciwKLSAgICBjb25zdCBnY2hhciAqIGZpbGVuYW1lLCBvZmZfdCBmaWxlX3NpemUsIHRpbWVfdCBmaWxlX210aW1lKTsKLQotLyogZnVuY3Rpb25zIHVzZWQgaW4gR3N0UmVnaXN0cnkgc2Nhbm5pbmcgKi8KLWNvbnN0IEdzdFBsdWdpbkxvYWRlckZ1bmNzIF9wcml2X2dzdF9wbHVnaW5fbG9hZGVyX2Z1bmNzID0gewotICBwbHVnaW5fbG9hZGVyX25ldywgcGx1Z2luX2xvYWRlcl9mcmVlLCBwbHVnaW5fbG9hZGVyX2xvYWQKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9QZW5kaW5nUGx1Z2luRW50cnkKLXsKLSAgLyogc2VxdWVuY2UgbnVtYmVyICovCi0gIGd1aW50MzIgdGFnOwotICBnY2hhciAqZmlsZW5hbWU7Ci0gIG9mZl90IGZpbGVfc2l6ZTsKLSAgdGltZV90IGZpbGVfbXRpbWU7Ci19IFBlbmRpbmdQbHVnaW5FbnRyeTsKLQotc3RydWN0IF9Hc3RQbHVnaW5Mb2FkZXIKLXsKLSAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5OwotICBHc3RQb2xsICpmZHNldDsKLQotICBnYm9vbGVhbiBjaGlsZF9ydW5uaW5nOwotICBHUGlkIGNoaWxkX3BpZDsKLSAgR3N0UG9sbEZEIGZkX3c7Ci0gIEdzdFBvbGxGRCBmZF9yOwotCi0gIGdib29sZWFuIGlzX2NoaWxkOwotICBnYm9vbGVhbiBnb3RfcGx1Z2luX2RldGFpbHM7Ci0KLSAgLyogVHJhbnNtaXQgYnVmZmVyICovCi0gIGd1aW50OCAqdHhfYnVmOwotICBndWludCB0eF9idWZfc2l6ZTsKLSAgZ3VpbnQgdHhfYnVmX3dyaXRlOwotICBndWludCB0eF9idWZfcmVhZDsKLQotICAvKiBuZXh0IHNlcXVlbmNlIG51bWJlciAoZm9yIFBlbmRpbmdQbHVnaW5FbnRyeSkgKi8KLSAgZ3VpbnQzMiBuZXh0X3RhZzsKLQotICBndWludDggKnJ4X2J1ZjsKLSAgZ3VpbnQgcnhfYnVmX3NpemU7Ci0gIGdib29sZWFuIHJ4X2RvbmU7Ci0gIGdib29sZWFuIHJ4X2dvdF9zeW5jOwotCi0gIC8qIEhlYWQgYW5kIHRhaWwgb2YgdGhlIHBlbmRpbmcgcGx1Z2lucyBsaXN0LiBMaXN0IG9mCi0gICAgIFBlbmRpbmdQbHVnaW5FbnRyeSBzdHJ1Y3RzICovCi0gIEdMaXN0ICpwZW5kaW5nX3BsdWdpbnM7Ci0gIEdMaXN0ICpwZW5kaW5nX3BsdWdpbnNfdGFpbDsKLX07Ci0KLSNkZWZpbmUgUEFDS0VUX0VYSVQgMQotI2RlZmluZSBQQUNLRVRfTE9BRF9QTFVHSU4gMgotI2RlZmluZSBQQUNLRVRfU1lOQyAzCi0jZGVmaW5lIFBBQ0tFVF9QTFVHSU5fREVUQUlMUyA0Ci0jZGVmaW5lIFBBQ0tFVF9WRVJTSU9OIDUKLQotI2RlZmluZSBCVUZfSU5JVF9TSVpFIDUxMgotI2RlZmluZSBCVUZfR1JPV19FWFRSQSA1MTIKLSNkZWZpbmUgQlVGX01BWF9TSVpFICgzMiAqIDEwMjQgKiAxMDI0KQotCi0jZGVmaW5lIEhFQURFUl9TSVpFIDEyCi0vKiA0IG1hZ2ljIGhleCBieXRlcyB0byBtYXJrIGVhY2ggcGFja2V0ICovCi0jZGVmaW5lIEhFQURFUl9NQUdJQyAweGJlZmVjMGFlCi0jZGVmaW5lIEFMSUdOTUVOVCAgIChzaXplb2YgKHZvaWQgKikpCi0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcGx1Z2luX2xvYWRlcl9zcGF3biAoR3N0UGx1Z2luTG9hZGVyICogbG9hZGVyKTsKLXN0YXRpYyB2b2lkIHB1dF9wYWNrZXQgKEdzdFBsdWdpbkxvYWRlciAqIGxvYWRlciwgZ3VpbnQgdHlwZSwgZ3VpbnQzMiB0YWcsCi0gICAgY29uc3QgZ3VpbnQ4ICogcGF5bG9hZCwgZ3VpbnQzMiBwYXlsb2FkX2xlbik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZXhjaGFuZ2VfcGFja2V0cyAoR3N0UGx1Z2luTG9hZGVyICogbCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gcGx1Z2luX2xvYWRlcl9yZXBsYXlfcGVuZGluZyAoR3N0UGx1Z2luTG9hZGVyICogbCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gcGx1Z2luX2xvYWRlcl9sb2FkX2FuZF9zeW5jIChHc3RQbHVnaW5Mb2FkZXIgKiBsLAotICAgIFBlbmRpbmdQbHVnaW5FbnRyeSAqIGVudHJ5KTsKLXN0YXRpYyB2b2lkIHBsdWdpbl9sb2FkZXJfY3JlYXRlX2JsYWNrbGlzdF9wbHVnaW4gKEdzdFBsdWdpbkxvYWRlciAqIGwsCi0gICAgUGVuZGluZ1BsdWdpbkVudHJ5ICogZW50cnkpOwotc3RhdGljIHZvaWQgcGx1Z2luX2xvYWRlcl9jbGVhbnVwX2NoaWxkIChHc3RQbHVnaW5Mb2FkZXIgKiBsb2FkZXIpOwotc3RhdGljIGdib29sZWFuIHBsdWdpbl9sb2FkZXJfc3luY193aXRoX2NoaWxkIChHc3RQbHVnaW5Mb2FkZXIgKiBsKTsKLQotc3RhdGljIEdzdFBsdWdpbkxvYWRlciAqCi1wbHVnaW5fbG9hZGVyX25ldyAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSkKLXsKLSAgR3N0UGx1Z2luTG9hZGVyICpsID0gZ19zbGljZV9uZXcwIChHc3RQbHVnaW5Mb2FkZXIpOwotCi0gIGlmIChyZWdpc3RyeSkKLSAgICBsLT5yZWdpc3RyeSA9IGdzdF9vYmplY3RfcmVmIChyZWdpc3RyeSk7Ci0gIGwtPmZkc2V0ID0gZ3N0X3BvbGxfbmV3IChGQUxTRSk7Ci0gIGdzdF9wb2xsX2ZkX2luaXQgKCZsLT5mZF93KTsKLSAgZ3N0X3BvbGxfZmRfaW5pdCAoJmwtPmZkX3IpOwotCi0gIGwtPnR4X2J1Zl9zaXplID0gQlVGX0lOSVRfU0laRTsKLSAgbC0+dHhfYnVmID0gZ19tYWxsb2MgKEJVRl9JTklUX1NJWkUpOwotCi0gIGwtPm5leHRfdGFnID0gMDsKLQotICBsLT5yeF9idWZfc2l6ZSA9IEJVRl9JTklUX1NJWkU7Ci0gIGwtPnJ4X2J1ZiA9IGdfbWFsbG9jIChCVUZfSU5JVF9TSVpFKTsKLQotICByZXR1cm4gbDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5fbG9hZGVyX2ZyZWUgKEdzdFBsdWdpbkxvYWRlciAqIGxvYWRlcikKLXsKLSAgR0xpc3QgKmN1cjsKLSAgZ2Jvb2xlYW4gZ290X3BsdWdpbl9kZXRhaWxzOwotCi0gIGZzeW5jIChsb2FkZXItPmZkX3cuZmQpOwotCi0gIGlmIChsb2FkZXItPmNoaWxkX3J1bm5pbmcpIHsKLSAgICBwdXRfcGFja2V0IChsb2FkZXIsIFBBQ0tFVF9FWElULCAwLCBOVUxMLCAwKTsKLQotICAgIC8qIFN3YXAgcGFja2V0cyB3aXRoIHRoZSBjaGlsZCB1bnRpbCBpdCBleGl0cyBjbGVhbmx5ICovCi0gICAgd2hpbGUgKCFsb2FkZXItPnJ4X2RvbmUpIHsKLSAgICAgIGlmIChleGNoYW5nZV9wYWNrZXRzIChsb2FkZXIpIHx8IGxvYWRlci0+cnhfZG9uZSkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGlmICghcGx1Z2luX2xvYWRlcl9yZXBsYXlfcGVuZGluZyAobG9hZGVyKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgICBwdXRfcGFja2V0IChsb2FkZXIsIFBBQ0tFVF9FWElULCAwLCBOVUxMLCAwKTsKLSAgICB9Ci0KLSAgICBwbHVnaW5fbG9hZGVyX2NsZWFudXBfY2hpbGQgKGxvYWRlcik7Ci0gIH0gZWxzZSB7Ci0gICAgY2xvc2UgKGxvYWRlci0+ZmRfdy5mZCk7Ci0gICAgY2xvc2UgKGxvYWRlci0+ZmRfci5mZCk7Ci0gIH0KLQotICBnc3RfcG9sbF9mcmVlIChsb2FkZXItPmZkc2V0KTsKLQotICBnX2ZyZWUgKGxvYWRlci0+cnhfYnVmKTsKLSAgZ19mcmVlIChsb2FkZXItPnR4X2J1Zik7Ci0KLSAgaWYgKGxvYWRlci0+cmVnaXN0cnkpCi0gICAgZ3N0X29iamVjdF91bnJlZiAobG9hZGVyLT5yZWdpc3RyeSk7Ci0KLSAgZ290X3BsdWdpbl9kZXRhaWxzID0gbG9hZGVyLT5nb3RfcGx1Z2luX2RldGFpbHM7Ci0KLSAgLyogRnJlZSBhbnkgcGVuZGluZyBwbHVnaW4gZW50cmllcyAqLwotICBjdXIgPSBsb2FkZXItPnBlbmRpbmdfcGx1Z2luczsKLSAgd2hpbGUgKGN1cikgewotICAgIFBlbmRpbmdQbHVnaW5FbnRyeSAqZW50cnkgPSAoUGVuZGluZ1BsdWdpbkVudHJ5ICopIChjdXItPmRhdGEpOwotICAgIGdfZnJlZSAoZW50cnktPmZpbGVuYW1lKTsKLSAgICBnX3NsaWNlX2ZyZWUgKFBlbmRpbmdQbHVnaW5FbnRyeSwgZW50cnkpOwotCi0gICAgY3VyID0gZ19saXN0X2RlbGV0ZV9saW5rIChjdXIsIGN1cik7Ci0gIH0KLQotICBnX3NsaWNlX2ZyZWUgKEdzdFBsdWdpbkxvYWRlciwgbG9hZGVyKTsKLQotICByZXR1cm4gZ290X3BsdWdpbl9kZXRhaWxzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9sb2FkZXJfbG9hZCAoR3N0UGx1Z2luTG9hZGVyICogbG9hZGVyLCBjb25zdCBnY2hhciAqIGZpbGVuYW1lLAotICAgIG9mZl90IGZpbGVfc2l6ZSwgdGltZV90IGZpbGVfbXRpbWUpCi17Ci0gIGdpbnQgbGVuOwotICBQZW5kaW5nUGx1Z2luRW50cnkgKmVudHJ5OwotCi0gIGlmICghZ3N0X3BsdWdpbl9sb2FkZXJfc3Bhd24gKGxvYWRlcikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIFNlbmQgYSBwYWNrZXQgdG8gdGhlIGNoaWxkIHJlcXVlc3RpbmcgdGhhdCBpdCBsb2FkIHRoZSBnaXZlbiBmaWxlICovCi0gIEdTVF9MT0dfT0JKRUNUIChsb2FkZXItPnJlZ2lzdHJ5LAotICAgICAgIlNlbmRpbmcgZmlsZSAlcyB0byBjaGlsZC4gdGFnICV1IiwgZmlsZW5hbWUsIGxvYWRlci0+bmV4dF90YWcpOwotCi0gIGVudHJ5ID0gZ19zbGljZV9uZXcgKFBlbmRpbmdQbHVnaW5FbnRyeSk7Ci0gIGVudHJ5LT50YWcgPSBsb2FkZXItPm5leHRfdGFnKys7Ci0gIGVudHJ5LT5maWxlbmFtZSA9IGdfc3RyZHVwIChmaWxlbmFtZSk7Ci0gIGVudHJ5LT5maWxlX3NpemUgPSBmaWxlX3NpemU7Ci0gIGVudHJ5LT5maWxlX210aW1lID0gZmlsZV9tdGltZTsKLSAgbG9hZGVyLT5wZW5kaW5nX3BsdWdpbnNfdGFpbCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChsb2FkZXItPnBlbmRpbmdfcGx1Z2luc190YWlsLCBlbnRyeSk7Ci0KLSAgaWYgKGxvYWRlci0+cGVuZGluZ19wbHVnaW5zID09IE5VTEwpCi0gICAgbG9hZGVyLT5wZW5kaW5nX3BsdWdpbnMgPSBsb2FkZXItPnBlbmRpbmdfcGx1Z2luc190YWlsOwotICBlbHNlCi0gICAgbG9hZGVyLT5wZW5kaW5nX3BsdWdpbnNfdGFpbCA9IGdfbGlzdF9uZXh0IChsb2FkZXItPnBlbmRpbmdfcGx1Z2luc190YWlsKTsKLQotICBsZW4gPSBzdHJsZW4gKGZpbGVuYW1lKTsKLSAgcHV0X3BhY2tldCAobG9hZGVyLCBQQUNLRVRfTE9BRF9QTFVHSU4sIGVudHJ5LT50YWcsCi0gICAgICAoZ3VpbnQ4ICopIGZpbGVuYW1lLCBsZW4gKyAxKTsKLQotICBpZiAoIWV4Y2hhbmdlX3BhY2tldHMgKGxvYWRlcikpIHsKLSAgICBpZiAoIXBsdWdpbl9sb2FkZXJfcmVwbGF5X3BlbmRpbmcgKGxvYWRlcikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5fbG9hZGVyX3JlcGxheV9wZW5kaW5nIChHc3RQbHVnaW5Mb2FkZXIgKiBsKQotewotICBHTGlzdCAqY3VyLCAqbmV4dDsKLQotcmVzdGFydDoKLSAgaWYgKCFnc3RfcGx1Z2luX2xvYWRlcl9zcGF3biAobCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIExvYWQgZWFjaCBwbHVnaW4gb25lIGJ5IG9uZSBzeW5jaHJvbm91c2x5IHVudGlsIHdlIGZpbmQgdGhlCi0gICAqIGNyYXNoaW5nIG9uZSAqLwotICB3aGlsZSAoKGN1ciA9IGwtPnBlbmRpbmdfcGx1Z2lucykpIHsKLSAgICBQZW5kaW5nUGx1Z2luRW50cnkgKmVudHJ5ID0gKFBlbmRpbmdQbHVnaW5FbnRyeSAqKSAoY3VyLT5kYXRhKTsKLQotICAgIGlmICghcGx1Z2luX2xvYWRlcl9sb2FkX2FuZF9zeW5jIChsLCBlbnRyeSkpIHsKLSAgICAgIC8qIENyZWF0ZSBkdW1teSBwbHVnaW4gZW50cnkgdG8gYmxvY2sgcmUtc2Nhbm5pbmcgdGhpcyBmaWxlICovCi0gICAgICBHU1RfRVJST1IgKCJQbHVnaW4gZmlsZSAlcyBmYWlsZWQgdG8gbG9hZC4gQmxhY2tsaXN0aW5nIiwKLSAgICAgICAgICBlbnRyeS0+ZmlsZW5hbWUpOwotICAgICAgcGx1Z2luX2xvYWRlcl9jcmVhdGVfYmxhY2tsaXN0X3BsdWdpbiAobCwgZW50cnkpOwotICAgICAgbC0+Z290X3BsdWdpbl9kZXRhaWxzID0gVFJVRTsKLSAgICAgIC8qIE5vdyByZW1vdmUgdGhpcyBjcmFzaHkgcGx1Z2luIGZyb20gdGhlIGhlYWQgb2YgdGhlIGxpc3QgKi8KLSAgICAgIGwtPnBlbmRpbmdfcGx1Z2lucyA9IGdfbGlzdF9kZWxldGVfbGluayAoY3VyLCBjdXIpOwotICAgICAgZ19mcmVlIChlbnRyeS0+ZmlsZW5hbWUpOwotICAgICAgZ19zbGljZV9mcmVlIChQZW5kaW5nUGx1Z2luRW50cnksIGVudHJ5KTsKLSAgICAgIGlmIChsLT5wZW5kaW5nX3BsdWdpbnMgPT0gTlVMTCkKLSAgICAgICAgbC0+cGVuZGluZ19wbHVnaW5zX3RhaWwgPSBOVUxMOwotICAgICAgaWYgKCFnc3RfcGx1Z2luX2xvYWRlcl9zcGF3biAobCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8qIFdlIGV4aXRlZCBhZnRlciBmaW5kaW5nIHRoZSBjcmFzaGluZyBvbmUuIElmIHRoZXJlJ3MgYW55IG1vcmUgcGVuZGluZywKLSAgICogZGlzcGF0Y2ggdGhlbSBwb3N0LWhhc3RlLCBidXQgZG9uJ3Qgd2FpdCAqLwotICBmb3IgKGN1ciA9IGwtPnBlbmRpbmdfcGx1Z2luczsgY3VyICE9IE5VTEw7IGN1ciA9IG5leHQpIHsKLSAgICBQZW5kaW5nUGx1Z2luRW50cnkgKmVudHJ5ID0gKFBlbmRpbmdQbHVnaW5FbnRyeSAqKSAoY3VyLT5kYXRhKTsKLQotICAgIG5leHQgPSBnX2xpc3RfbmV4dCAoY3VyKTsKLQotICAgIHB1dF9wYWNrZXQgKGwsIFBBQ0tFVF9MT0FEX1BMVUdJTiwgZW50cnktPnRhZywKLSAgICAgICAgKGd1aW50OCAqKSBlbnRyeS0+ZmlsZW5hbWUsIHN0cmxlbiAoZW50cnktPmZpbGVuYW1lKSArIDEpOwotCi0gICAgLyogVGhpcyBtaWdodCBpbnZhbGlkYXRlIGN1ciwgd2hpY2ggaXMgd2h5IHdlIGdyYWJiZWQgJ25leHQnIGFib3ZlICovCi0gICAgaWYgKCFleGNoYW5nZV9wYWNrZXRzIChsKSkKLSAgICAgIGdvdG8gcmVzdGFydDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9sb2FkZXJfc3luY193aXRoX2NoaWxkIChHc3RQbHVnaW5Mb2FkZXIgKiBsKQotewotICBwdXRfcGFja2V0IChsLCBQQUNLRVRfU1lOQywgMCwgTlVMTCwgMCk7Ci0KLSAgbC0+cnhfZ290X3N5bmMgPSBGQUxTRTsKLSAgd2hpbGUgKCFsLT5yeF9nb3Rfc3luYykgewotICAgIGlmICghZXhjaGFuZ2VfcGFja2V0cyAobCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2xvYWRlcl9sb2FkX2FuZF9zeW5jIChHc3RQbHVnaW5Mb2FkZXIgKiBsLCBQZW5kaW5nUGx1Z2luRW50cnkgKiBlbnRyeSkKLXsKLSAgZ2ludCBsZW47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobC0+cmVnaXN0cnksICJTeW5jaHJvbm91c2x5IGxvYWRpbmcgcGx1Z2luIGZpbGUgJXMiLAotICAgICAgZW50cnktPmZpbGVuYW1lKTsKLQotICBsZW4gPSBzdHJsZW4gKGVudHJ5LT5maWxlbmFtZSk7Ci0gIHB1dF9wYWNrZXQgKGwsIFBBQ0tFVF9MT0FEX1BMVUdJTiwgZW50cnktPnRhZywKLSAgICAgIChndWludDggKikgZW50cnktPmZpbGVuYW1lLCBsZW4gKyAxKTsKLQotICByZXR1cm4gcGx1Z2luX2xvYWRlcl9zeW5jX3dpdGhfY2hpbGQgKGwpOwotfQotCi1zdGF0aWMgdm9pZAotcGx1Z2luX2xvYWRlcl9jcmVhdGVfYmxhY2tsaXN0X3BsdWdpbiAoR3N0UGx1Z2luTG9hZGVyICogbCwKLSAgICBQZW5kaW5nUGx1Z2luRW50cnkgKiBlbnRyeSkKLXsKLSAgR3N0UGx1Z2luICpwbHVnaW4gPSBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9QTFVHSU4sIDAsIE5VTEwpOwotCi0gIHBsdWdpbi0+ZmlsZW5hbWUgPSBnX3N0cmR1cCAoZW50cnktPmZpbGVuYW1lKTsKLSAgcGx1Z2luLT5maWxlX210aW1lID0gZW50cnktPmZpbGVfbXRpbWU7Ci0gIHBsdWdpbi0+ZmlsZV9zaXplID0gZW50cnktPmZpbGVfc2l6ZTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGx1Z2luLCBHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQpOwotCi0gIHBsdWdpbi0+YmFzZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIChwbHVnaW4tPmZpbGVuYW1lKTsKLSAgcGx1Z2luLT5kZXNjLm5hbWUgPSBnX2ludGVybl9zdHJpbmcgKHBsdWdpbi0+YmFzZW5hbWUpOwotICBwbHVnaW4tPmRlc2MuZGVzY3JpcHRpb24gPSAiUGx1Z2luIGZvciBibGFja2xpc3RlZCBmaWxlIjsKLSAgcGx1Z2luLT5kZXNjLnZlcnNpb24gPSAiMC4wLjAiOwotICBwbHVnaW4tPmRlc2MubGljZW5zZSA9ICJCTEFDS0xJU1QiOwotICBwbHVnaW4tPmRlc2Muc291cmNlID0gcGx1Z2luLT5kZXNjLmxpY2Vuc2U7Ci0gIHBsdWdpbi0+ZGVzYy5wYWNrYWdlID0gcGx1Z2luLT5kZXNjLmxpY2Vuc2U7Ci0gIHBsdWdpbi0+ZGVzYy5vcmlnaW4gPSBwbHVnaW4tPmRlc2MubGljZW5zZTsKLQotICBHU1RfREVCVUcgKCJBZGRpbmcgYmxhY2tsaXN0IHBsdWdpbiAnJXMnIiwgcGx1Z2luLT5kZXNjLm5hbWUpOwotICBnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiAobC0+cmVnaXN0cnksIHBsdWdpbik7Ci19Ci0KLSNpZmRlZiBfX0FQUExFX18KLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jZGVmaW5lIFVTUl9CSU5fQVJDSF9TV0lUQ0ggIi14ODZfNjQiCi0jZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotI2RlZmluZSBVU1JfQklOX0FSQ0hfU1dJVENIICItaTM4NiIKLSNlbGlmIGRlZmluZWQoX19wcGNfXykKLSNkZWZpbmUgVVNSX0JJTl9BUkNIX1NXSVRDSCAiLXBwYyIKLSNlbGlmIGRlZmluZWQoX19wcGM2NF9fKQotI2RlZmluZSBVU1JfQklOX0FSQ0hfU1dJVENIICItcHBjNjQiCi0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFlFU19NVUxUSUFSQ0ggMQotI2RlZmluZSBOT19NVUxUSUFSQ0ggIDIKLQotI2lmIGRlZmluZWQgKF9fQVBQTEVfXykgJiYgZGVmaW5lZCAoVVNSX0JJTl9BUkNIX1NXSVRDSCkKLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BsdWdpbl9sb2FkZXJfdXNlX3Vzcl9iaW5fYXJjaCAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIG11bHRpYXJjaCA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmbXVsdGlhcmNoKSkgewotICAgIGdzaXplIHJlcyA9IE5PX01VTFRJQVJDSDsKLQotI2lmZGVmIEhBVkVfU1lTX1VUU05BTUVfSAotICAgIHsKLSAgICAgIHN0cnVjdCB1dHNuYW1lIHVuYW1lX2RhdGE7Ci0KLSAgICAgIGlmICh1bmFtZSAoJnVuYW1lX2RhdGEpID09IDApIHsKLSAgICAgICAgLyogQ2hlY2sgZm9yIE9TIFggPj0gMTAuNSAoZGFyd2luIGtlcm5lbCA5LjApICovCi0gICAgICAgIEdTVF9MT0cgKCIlcyAlcyIsIHVuYW1lX2RhdGEuc3lzbmFtZSwgdW5hbWVfZGF0YS5yZWxlYXNlKTsKLSAgICAgICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAodW5hbWVfZGF0YS5zeXNuYW1lLCAiRGFyd2luIikgPT0gMCAmJgotICAgICAgICAgICAgZ19zdHJ0b2QgKHVuYW1lX2RhdGEucmVsZWFzZSwgTlVMTCkgPj0gOS4wKSB7Ci0gICAgICAgICAgcmVzID0gWUVTX01VTFRJQVJDSDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgR1NUX0lORk8gKCJtdWx0aWFyY2g6ICVzIiwgKHJlcyA9PSBZRVNfTVVMVElBUkNIKSA/ICJ5ZXMiIDogIm5vIik7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZtdWx0aWFyY2gsIHJlcyk7Ci0gIH0KLSAgcmV0dXJuIChtdWx0aWFyY2ggPT0gWUVTX01VTFRJQVJDSCk7Ci19Ci0jZW5kaWYgLyogX19BUFBMRV9fICYmIFVTUl9CSU5fQVJDSF9TV0lUQ0ggKi8KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcGx1Z2luX2xvYWRlcl90cnlfaGVscGVyIChHc3RQbHVnaW5Mb2FkZXIgKiBsb2FkZXIsIGdjaGFyICogbG9jYXRpb24pCi17Ci0gIGNoYXIgKmFyZ3ZbNV0gPSB7IE5VTEwsIH07Ci0gIGludCBjID0gMDsKLQotI2lmIGRlZmluZWQgKF9fQVBQTEVfXykgJiYgZGVmaW5lZCAoVVNSX0JJTl9BUkNIX1NXSVRDSCkKLSAgaWYgKGdzdF9wbHVnaW5fbG9hZGVyX3VzZV91c3JfYmluX2FyY2ggKCkpIHsKLSAgICBhcmd2W2MrK10gPSAoY2hhciAqKSAiL3Vzci9iaW4vYXJjaCI7Ci0gICAgYXJndltjKytdID0gKGNoYXIgKikgVVNSX0JJTl9BUkNIX1NXSVRDSDsKLSAgfQotI2VuZGlmCi0gIGFyZ3ZbYysrXSA9IGxvY2F0aW9uOwotICBhcmd2W2MrK10gPSAoY2hhciAqKSAiLWwiOwotICBhcmd2W2MrK10gPSBOVUxMOwotCi0gIGlmIChjID4gMykgewotICAgIEdTVF9MT0cgKCJUcnlpbmcgdG8gc3Bhd24gZ3N0LXBsdWdpbi1zY2FubmVyIGhlbHBlciBhdCAlcyB3aXRoIGFyY2ggJXMiLAotICAgICAgICBsb2NhdGlvbiwgYXJndlsxXSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPRyAoIlRyeWluZyB0byBzcGF3biBnc3QtcGx1Z2luLXNjYW5uZXIgaGVscGVyIGF0ICVzIiwgbG9jYXRpb24pOwotICB9Ci0KLSAgaWYgKCFnX3NwYXduX2FzeW5jX3dpdGhfcGlwZXMgKE5VTEwsIGFyZ3YsIE5VTEwsCi0gICAgICAgICAgR19TUEFXTl9ET19OT1RfUkVBUF9DSElMRCAvKiB8IEdfU1BBV05fU1RERVJSX1RPX0RFVl9OVUxMICovICwKLSAgICAgICAgICBOVUxMLCBOVUxMLCAmbG9hZGVyLT5jaGlsZF9waWQsICZsb2FkZXItPmZkX3cuZmQsICZsb2FkZXItPmZkX3IuZmQsCi0gICAgICAgICAgTlVMTCwgTlVMTCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdzdF9wb2xsX2FkZF9mZCAobG9hZGVyLT5mZHNldCwgJmxvYWRlci0+ZmRfdyk7Ci0gIGdzdF9wb2xsX2FkZF9mZCAobG9hZGVyLT5mZHNldCwgJmxvYWRlci0+ZmRfcik7Ci0KLSAgZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKGxvYWRlci0+ZmRzZXQsICZsb2FkZXItPmZkX3IsIFRSVUUpOwotCi0gIGxvYWRlci0+dHhfYnVmX3dyaXRlID0gbG9hZGVyLT50eF9idWZfcmVhZCA9IDA7Ci0KLSAgcHV0X3BhY2tldCAobG9hZGVyLCBQQUNLRVRfVkVSU0lPTiwgMCwgTlVMTCwgMCk7Ci0gIGlmICghcGx1Z2luX2xvYWRlcl9zeW5jX3dpdGhfY2hpbGQgKGxvYWRlcikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGxvYWRlci0+Y2hpbGRfcnVubmluZyA9IFRSVUU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BsdWdpbl9sb2FkZXJfc3Bhd24gKEdzdFBsdWdpbkxvYWRlciAqIGxvYWRlcikKLXsKLSAgY29uc3QgZ2NoYXIgKmVudjsKLSAgY2hhciAqaGVscGVyX2JpbjsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgaWYgKGxvYWRlci0+Y2hpbGRfcnVubmluZykKLSAgICByZXR1cm4gVFJVRTsKLQotICAvKiBGaW5kIHRoZSBnc3QtcGx1Z2luLXNjYW5uZXI6IGZpcnN0IHRyeSB0aGUgZW52LXZhciBpZiBpdCBpcyBzZXQsCi0gICAqIG90aGVyd2lzZSB1c2UgdGhlIGluc3RhbGxlZCB2ZXJzaW9uICovCi0gIGVudiA9IGdfZ2V0ZW52ICgiR1NUX1BMVUdJTl9TQ0FOTkVSXzFfMCIpOwotICBpZiAoZW52ID09IE5VTEwpCi0gICAgZW52ID0gZ19nZXRlbnYgKCJHU1RfUExVR0lOX1NDQU5ORVIiKTsKLQotICBpZiAoZW52ICE9IE5VTEwgJiYgKmVudiAhPSAnXDAnKSB7Ci0gICAgR1NUX0xPRyAoIlRyeWluZyBHU1RfUExVR0lOX1NDQU5ORVIgZW52IHZhcjogJXMiLCBlbnYpOwotICAgIGhlbHBlcl9iaW4gPSBnX3N0cmR1cCAoZW52KTsKLSAgICByZXMgPSBnc3RfcGx1Z2luX2xvYWRlcl90cnlfaGVscGVyIChsb2FkZXIsIGhlbHBlcl9iaW4pOwotICAgIGdfZnJlZSAoaGVscGVyX2Jpbik7Ci0gIH0KLQotICBpZiAoIXJlcykgewotICAgIEdTVF9MT0cgKCJUcnlpbmcgaW5zdGFsbGVkIHBsdWdpbiBzY2FubmVyIik7Ci0KLSNpZmRlZiBHX09TX1dJTjMyCi0gICAgewotICAgICAgZ2NoYXIgKmJhc2VkaXI7Ci0KLSAgICAgIGJhc2VkaXIgPQotICAgICAgICAgIGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2RpcmVjdG9yeV9vZl9tb2R1bGUKLSAgICAgICAgICAoX3ByaXZfZ3N0X2RsbF9oYW5kbGUpOwotICAgICAgaGVscGVyX2JpbiA9Ci0gICAgICAgICAgZ19idWlsZF9maWxlbmFtZSAoYmFzZWRpciwgImxpYiIsICJnc3RyZWFtZXItIiBHU1RfQVBJX1ZFUlNJT04sCi0gICAgICAgICAgImdzdC1wbHVnaW4tc2Nhbm5lci5leGUiLCBOVUxMKTsKLSAgICAgIGdfZnJlZSAoYmFzZWRpcik7Ci0gICAgfQotI2Vsc2UKLSAgICBoZWxwZXJfYmluID0gZ19zdHJkdXAgKEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQpOwotI2VuZGlmCi0gICAgcmVzID0gZ3N0X3BsdWdpbl9sb2FkZXJfdHJ5X2hlbHBlciAobG9hZGVyLCBoZWxwZXJfYmluKTsKLSAgICBnX2ZyZWUgKGhlbHBlcl9iaW4pOwotCi0gICAgaWYgKCFyZXMpIHsKLSAgICAgIEdTVF9JTkZPICgiTm8gZ3N0LXBsdWdpbi1zY2FubmVyIGF2YWlsYWJsZSwgb3Igbm90IHdvcmtpbmciKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gbG9hZGVyLT5jaGlsZF9ydW5uaW5nOwotfQotCi1zdGF0aWMgdm9pZAotcGx1Z2luX2xvYWRlcl9jbGVhbnVwX2NoaWxkIChHc3RQbHVnaW5Mb2FkZXIgKiBsKQotewotICBpZiAoIWwtPmNoaWxkX3J1bm5pbmcgfHwgbC0+aXNfY2hpbGQpCi0gICAgcmV0dXJuOwotCi0gIGdzdF9wb2xsX3JlbW92ZV9mZCAobC0+ZmRzZXQsICZsLT5mZF93KTsKLSAgZ3N0X3BvbGxfcmVtb3ZlX2ZkIChsLT5mZHNldCwgJmwtPmZkX3IpOwotCi0gIGNsb3NlIChsLT5mZF93LmZkKTsKLSAgY2xvc2UgKGwtPmZkX3IuZmQpOwotCi0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgR1NUX0xPRyAoIndhaXRpbmcgZm9yIGNoaWxkIHByb2Nlc3MgdG8gZXhpdCIpOwotICB3YWl0cGlkIChsLT5jaGlsZF9waWQsIE5VTEwsIDApOwotI2Vsc2UKLSAgZ193YXJuaW5nICgiRklYTUU6IEltcGxlbWVudCBjaGlsZCBwcm9jZXNzIHNodXRkb3duIGZvciBXaW4zMiIpOwotI2VuZGlmCi0gIGdfc3Bhd25fY2xvc2VfcGlkIChsLT5jaGlsZF9waWQpOwotCi0gIGwtPmNoaWxkX3J1bm5pbmcgPSBGQUxTRTsKLX0KLQotZ2Jvb2xlYW4KLV9nc3RfcGx1Z2luX2xvYWRlcl9jbGllbnRfcnVuICh2b2lkKQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHc3RQbHVnaW5Mb2FkZXIgKmw7Ci0KLSAgbCA9IHBsdWdpbl9sb2FkZXJfbmV3IChOVUxMKTsKLSAgaWYgKGwgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogT24gZW50cnksIHRoZSBpbndhcmQgcGlwZSBpcyBTVERJTiwgYW5kIG91dHdhcmQgaXMgU1RET1VULgotICAgKiBEdXAgdGhvc2Ugc29tZXdoZXJlIGJldHRlciBzbyB0aGF0IHBsdWdpbnMgcHJpbnRpbmcgdGhpbmdzCi0gICAqIHdvbid0IGludGVyZmVyZSB3aXRoIGFueXRoaW5nICovCi0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgewotICAgIGludCBkdXBfZmQ7Ci0KLSAgICBkdXBfZmQgPSBkdXAgKDApOyAgICAgICAgICAgLyogU1RESU4gKi8KLSAgICBpZiAoZHVwX2ZkID09IC0xKSB7Ci0gICAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gc3RhcnQuIENvdWxkIG5vdCBkdXAgU1RESU4sIGVycm5vICVkIiwgZXJybm8pOwotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICBnb3RvIGJlYWNoOwotICAgIH0KLSAgICBsLT5mZF9yLmZkID0gZHVwX2ZkOwotICAgIGNsb3NlICgwKTsKLQotICAgIGR1cF9mZCA9IGR1cCAoMSk7ICAgICAgICAgICAvKiBTVERPVVQgKi8KLSAgICBpZiAoZHVwX2ZkID09IC0xKSB7Ci0gICAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gc3RhcnQuIENvdWxkIG5vdCBkdXAgU1RET1VULCBlcnJubyAlZCIsIGVycm5vKTsKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgZ290byBiZWFjaDsKLSAgICB9Ci0gICAgbC0+ZmRfdy5mZCA9IGR1cF9mZDsKLSAgICBjbG9zZSAoMSk7Ci0KLSAgICAvKiBEdXAgc3RkZXJyIGRvd24gdG8gc3Rkb3V0IHNvIHRoaW5ncyB0aGF0IHBsdWdpbnMgcHJpbnQgYXJlIHZpc2libGUsCi0gICAgICogYnV0IGRvbid0IGNhcmUgaWYgaXQgZmFpbHMgKi8KLSAgICBkdXAyICgyLCAxKTsKLSAgfQotI2Vsc2UKLSAgLyogRklYTUU6IFVzZSBEdXBsaWNhdGVIYW5kbGUgYW5kIGZyaWVuZHMgb24gd2luMzIgKi8KLSAgbC0+ZmRfdy5mZCA9IDE7ICAgICAgICAgICAgICAgLyogU1RET1VUICovCi0gIGwtPmZkX3IuZmQgPSAwOyAgICAgICAgICAgICAgIC8qIFNURElOICovCi0jZW5kaWYKLQotICBnc3RfcG9sbF9hZGRfZmQgKGwtPmZkc2V0LCAmbC0+ZmRfdyk7Ci0gIGdzdF9wb2xsX2FkZF9mZCAobC0+ZmRzZXQsICZsLT5mZF9yKTsKLSAgZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKGwtPmZkc2V0LCAmbC0+ZmRfciwgVFJVRSk7Ci0KLSAgbC0+aXNfY2hpbGQgPSBUUlVFOwotCi0gIEdTVF9ERUJVRyAoIlBsdWdpbiBzY2FubmVyIGNoaWxkIHJ1bm5pbmcuIFdhaXRpbmcgZm9yIGluc3RydWN0aW9ucyIpOwotCi0gIC8qIExvb3AsIGxpc3RlbmluZyBmb3IgaW5jb21pbmcgcGFja2V0cyBvbiB0aGUgZmQgYW5kIHdyaXRpbmcgcmVzcG9uc2VzICovCi0gIHdoaWxlICghbC0+cnhfZG9uZSAmJiBleGNoYW5nZV9wYWNrZXRzIChsKSk7Ci0KLSNpZm5kZWYgR19PU19XSU4zMgotYmVhY2g6Ci0jZW5kaWYKLQotICBwbHVnaW5fbG9hZGVyX2ZyZWUgKGwpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wdXRfcGFja2V0IChHc3RQbHVnaW5Mb2FkZXIgKiBsLCBndWludCB0eXBlLCBndWludDMyIHRhZywKLSAgICBjb25zdCBndWludDggKiBwYXlsb2FkLCBndWludDMyIHBheWxvYWRfbGVuKQotewotICBndWludDggKm91dDsKLSAgZ3VpbnQgbGVuID0gcGF5bG9hZF9sZW4gKyBIRUFERVJfU0laRTsKLQotICBpZiAobC0+dHhfYnVmX3dyaXRlICsgbGVuID49IGwtPnR4X2J1Zl9zaXplKSB7Ci0gICAgR1NUX0xPRyAoIkV4cGFuZGluZyB0eCBidWYgZnJvbSAlZCB0byAlZCBmb3IgcGFja2V0IG9mIHNpemUgJWQiLAotICAgICAgICBsLT50eF9idWZfc2l6ZSwgbC0+dHhfYnVmX3dyaXRlICsgbGVuICsgQlVGX0dST1dfRVhUUkEsIGxlbik7Ci0gICAgbC0+dHhfYnVmX3NpemUgPSBsLT50eF9idWZfd3JpdGUgKyBsZW4gKyBCVUZfR1JPV19FWFRSQTsKLSAgICBsLT50eF9idWYgPSBnX3JlYWxsb2MgKGwtPnR4X2J1ZiwgbC0+dHhfYnVmX3NpemUpOwotICB9Ci0KLSAgb3V0ID0gbC0+dHhfYnVmICsgbC0+dHhfYnVmX3dyaXRlOwotCi0gIC8qIG9uZSBieXRlIHBhY2tldCB0eXBlICovCi0gIG91dFswXSA9IHR5cGU7Ci0gIC8qIDMgYnl0ZSBwYWNrZXQgdGFnIG51bWJlciAqLwotICBHU1RfV1JJVEVfVUlOVDI0X0JFIChvdXQgKyAxLCB0YWcpOwotICAvKiA0IGJ5dGVzIHBhY2tldCBsZW5ndGggKi8KLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAob3V0ICsgNCwgcGF5bG9hZF9sZW4pOwotICAvKiBwYXlsb2FkICovCi0gIGlmIChwYXlsb2FkICYmIHBheWxvYWRfbGVuKQotICAgIG1lbWNweSAob3V0ICsgSEVBREVSX1NJWkUsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKLSAgLyogV3JpdGUgbWFnaWMgaW50byB0aGUgaGVhZGVyICovCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKG91dCArIDgsIEhFQURFUl9NQUdJQyk7Ci0KLSAgbC0+dHhfYnVmX3dyaXRlICs9IGxlbjsKLSAgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChsLT5mZHNldCwgJmwtPmZkX3csIFRSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotcHV0X2NodW5rIChHc3RQbHVnaW5Mb2FkZXIgKiBsLCBHc3RSZWdpc3RyeUNodW5rICogY2h1bmssIGd1aW50ICogcG9zKQotewotICBndWludCBwYWRzaXplID0gMDsKLSAgZ3VpbnQgbGVuOwotICBndWludDggKm91dDsKLQotICAvKiBNaWdodCBuZWVkIHRvIGFsaWduIHRoZSBjaHVuayAqLwotICBpZiAoY2h1bmstPmFsaWduICYmICgoKnBvcykgJSBBTElHTk1FTlQpICE9IDApCi0gICAgcGFkc2l6ZSA9IEFMSUdOTUVOVCAtICgoKnBvcykgJSBBTElHTk1FTlQpOwotCi0gIGxlbiA9IHBhZHNpemUgKyBjaHVuay0+c2l6ZTsKLQotICBpZiAoR19VTkxJS0VMWSAobC0+dHhfYnVmX3dyaXRlICsgbGVuID49IGwtPnR4X2J1Zl9zaXplKSkgewotICAgIGd1aW50IG5ld19zaXplID0gTUFYIChsLT50eF9idWZfd3JpdGUgKyBsZW4sCi0gICAgICAgIGwtPnR4X2J1Zl9zaXplICsgbC0+dHhfYnVmX3NpemUgLyA0KSArIEJVRl9HUk9XX0VYVFJBOwotICAgIEdTVF9MT0cgKCJFeHBhbmRpbmcgdHggYnVmIGZyb20gJWQgdG8gJWQgZm9yIGNodW5rIG9mIHNpemUgJWQiLAotICAgICAgICBsLT50eF9idWZfc2l6ZSwgbmV3X3NpemUsIGNodW5rLT5zaXplKTsKLSAgICBsLT50eF9idWZfc2l6ZSA9IG5ld19zaXplOwotICAgIGwtPnR4X2J1ZiA9IGdfcmVhbGxvYyAobC0+dHhfYnVmLCBsLT50eF9idWZfc2l6ZSk7Ci0gIH0KLQotICBvdXQgPSBsLT50eF9idWYgKyBsLT50eF9idWZfd3JpdGU7Ci0gIC8qIENsZWFyIHRoZSBwYWRkaW5nICovCi0gIGlmIChwYWRzaXplKQotICAgIG1lbXNldCAob3V0LCAwLCBwYWRzaXplKTsKLSAgbWVtY3B5IChvdXQgKyBwYWRzaXplLCBjaHVuay0+ZGF0YSwgY2h1bmstPnNpemUpOwotCi0gIGwtPnR4X2J1Zl93cml0ZSArPSBsZW47Ci0gICpwb3MgKz0gbGVuOwotCi0gIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAobC0+ZmRzZXQsICZsLT5mZF93LCBUUlVFKTsKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotd3JpdGVfb25lIChHc3RQbHVnaW5Mb2FkZXIgKiBsKQotewotICBndWludDggKm91dDsKLSAgZ3VpbnQzMiB0b193cml0ZSwgbWFnaWM7Ci0gIGludCByZXM7Ci0KLSAgaWYgKGwtPnR4X2J1Zl9yZWFkICsgSEVBREVSX1NJWkUgPiBsLT50eF9idWZfd3JpdGUpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIG91dCA9IGwtPnR4X2J1ZiArIGwtPnR4X2J1Zl9yZWFkOwotCi0gIG1hZ2ljID0gR1NUX1JFQURfVUlOVDMyX0JFIChvdXQgKyA4KTsKLSAgaWYgKG1hZ2ljICE9IEhFQURFUl9NQUdJQykgewotICAgIEdTVF9FUlJPUiAoIlBhY2tldCBtYWdpYyBudW1iZXIgaXMgbWlzc2luZy4gTWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0ZWQiKTsKLSAgICBnb3RvIGZhaWxfYW5kX2NsZWFudXA7Ci0gIH0KLQotICB0b193cml0ZSA9IEdTVF9SRUFEX1VJTlQzMl9CRSAob3V0ICsgNCkgKyBIRUFERVJfU0laRTsKLSAgLyogQ2hlY2sgdGhhdCB0aGUgbWFnaWMgaXMgaW50YWN0LCBhbmQgdGhlIHNpemUgaXMgc2Vuc2libGUgKi8KLSAgaWYgKHRvX3dyaXRlID4gbC0+dHhfYnVmX3NpemUpIHsKLSAgICBHU1RfRVJST1IgKCJJbmRpY2F0ZWQgcGFja2V0IHNpemUgaXMgdG9vIGxhcmdlLiBDb3JydXB0aW9uIGRldGVjdGVkIik7Ci0gICAgZ290byBmYWlsX2FuZF9jbGVhbnVwOwotICB9Ci0KLSAgbC0+dHhfYnVmX3JlYWQgKz0gdG9fd3JpdGU7Ci0KLSAgR1NUX0xPRyAoIldyaXRpbmcgcGFja2V0IG9mIHNpemUgJWQgYnl0ZXMgdG8gZmQgJWQiLCB0b193cml0ZSwgbC0+ZmRfdy5mZCk7Ci0KLSAgZG8gewotICAgIHJlcyA9IHdyaXRlIChsLT5mZF93LmZkLCBvdXQsIHRvX3dyaXRlKTsKLSAgICBpZiAoR19VTkxJS0VMWSAocmVzIDwgMCkpIHsKLSAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgLyogRmFpbGVkIHRvIHdyaXRlIC0+IGNoaWxkIGRpZWQgKi8KLSAgICAgIGdvdG8gZmFpbF9hbmRfY2xlYW51cDsKLSAgICB9Ci0gICAgdG9fd3JpdGUgLT0gcmVzOwotICAgIG91dCArPSByZXM7Ci0gIH0gd2hpbGUgKHRvX3dyaXRlID4gMCk7Ci0KLSAgaWYgKGwtPnR4X2J1Zl9yZWFkID09IGwtPnR4X2J1Zl93cml0ZSkgewotICAgIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAobC0+ZmRzZXQsICZsLT5mZF93LCBGQUxTRSk7Ci0gICAgbC0+dHhfYnVmX3JlYWQgPSBsLT50eF9idWZfd3JpdGUgPSAwOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWZhaWxfYW5kX2NsZWFudXA6Ci0gIHBsdWdpbl9sb2FkZXJfY2xlYW51cF9jaGlsZCAobCk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1kb19wbHVnaW5fbG9hZCAoR3N0UGx1Z2luTG9hZGVyICogbCwgY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgZ3VpbnQgdGFnKQotewotICBHc3RQbHVnaW4gKm5ld3BsdWdpbjsKLSAgR0xpc3QgKmNodW5rcyA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHICgiUGx1Z2luIHNjYW5uZXIgbG9hZGluZyBmaWxlICVzLiB0YWcgJXUiLCBmaWxlbmFtZSwgdGFnKTsKLQotI2lmIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXN0IGNvZGUgLSBjcmFzaCBiYXNlZCBvbiBmaWxlbmFtZSAqLwotICBpZiAoc3Ryc3RyIChmaWxlbmFtZSwgImNvcmVlbGVtZW50cyIpID09IE5VTEwpIHsKLSAgICBnX3ByaW50ZXJyICgiQ3Jhc2hpbmcgb24gZmlsZSAlc1xuIiwgZmlsZW5hbWUpOwotICAgIGdfcHJpbnRlcnIgKCIlZCIsICooZ2ludCAqKSAoTlVMTCkpOwotICB9Ci0jZW5kaWYKLQotICBuZXdwbHVnaW4gPSBnc3RfcGx1Z2luX2xvYWRfZmlsZSAoKGdjaGFyICopIGZpbGVuYW1lLCBOVUxMKTsKLSAgaWYgKG5ld3BsdWdpbikgewotICAgIGd1aW50IGhkcl9wb3M7Ci0gICAgZ3VpbnQgb2Zmc2V0OwotCi0gICAgLyogTm93IHNlcmlhbGlzZSB0aGUgcGx1Z2luIGRldGFpbHMgYW5kIHNlbmQgKi8KLSAgICBpZiAoIV9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9wbHVnaW4gKCZjaHVua3MsCi0gICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0ICgpLCBuZXdwbHVnaW4pKQotICAgICAgZ290byBmYWlsOwotCi0gICAgLyogU3RvcmUgd2hlcmUgdGhlIGhlYWRlciBpcywgd3JpdGUgYW4gZW1wdHkgb25lLCB0aGVuIHdyaXRlCi0gICAgICogYWxsIHRoZSBwYXlsb2FkIGNodW5rcywgdGhlbiBmaXggdXAgdGhlIGhlYWRlciBzaXplICovCi0gICAgaGRyX3BvcyA9IGwtPnR4X2J1Zl93cml0ZTsKLSAgICBvZmZzZXQgPSBIRUFERVJfU0laRTsKLSAgICBwdXRfcGFja2V0IChsLCBQQUNLRVRfUExVR0lOX0RFVEFJTFMsIHRhZywgTlVMTCwgMCk7Ci0KLSAgICBpZiAoY2h1bmtzKSB7Ci0gICAgICBHTGlzdCAqd2FsazsKLSAgICAgIGZvciAod2FsayA9IGNodW5rczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgICAgICBHc3RSZWdpc3RyeUNodW5rICpjdXIgPSB3YWxrLT5kYXRhOwotICAgICAgICBwdXRfY2h1bmsgKGwsIGN1ciwgJm9mZnNldCk7Ci0KLSAgICAgICAgX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rX2ZyZWUgKGN1cik7Ci0gICAgICB9Ci0KLSAgICAgIGdfbGlzdF9mcmVlIChjaHVua3MpOwotCi0gICAgICAvKiBTdG9yZSB0aGUgc2l6ZSBvZiB0aGUgd3JpdHRlbiBwYXlsb2FkICovCi0gICAgICBHU1RfV1JJVEVfVUlOVDMyX0JFIChsLT50eF9idWYgKyBoZHJfcG9zICsgNCwgb2Zmc2V0IC0gSEVBREVSX1NJWkUpOwotICAgIH0KLSNpZiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVzdCBjb2RlIC0gY29ycnVwdCB0aGUgdHggYnVmZmVyIGJhc2VkIG9uIGZpbGVuYW1lICovCi0gICAgaWYgKHN0cnN0ciAoZmlsZW5hbWUsICJzaW5rIikgIT0gTlVMTCkgewotICAgICAgaW50IGZkLCByZXM7Ci0gICAgICBnX3ByaW50ZXJyICgiQ29ycnVwdGluZyB0eCBidWYgb24gZmlsZSAlc1xuIiwgZmlsZW5hbWUpOwotICAgICAgZmQgPSBvcGVuICgiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOwotICAgICAgcmVzID0gcmVhZCAoZmQsIGwtPnR4X2J1ZiwgbC0+dHhfYnVmX3NpemUpOwotICAgICAgY2xvc2UgKGZkKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKG5ld3BsdWdpbik7Ci0gIH0gZWxzZSB7Ci0gICAgcHV0X3BhY2tldCAobCwgUEFDS0VUX1BMVUdJTl9ERVRBSUxTLCB0YWcsIE5VTEwsIDApOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci1mYWlsOgotICBwdXRfcGFja2V0IChsLCBQQUNLRVRfUExVR0lOX0RFVEFJTFMsIHRhZywgTlVMTCwgMCk7Ci0gIGlmIChjaHVua3MpIHsKLSAgICBHTGlzdCAqd2FsazsKLSAgICBmb3IgKHdhbGsgPSBjaHVua3M7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICAgIEdzdFJlZ2lzdHJ5Q2h1bmsgKmN1ciA9IHdhbGstPmRhdGE7Ci0KLSAgICAgIF9wcml2X2dzdF9yZWdpc3RyeV9jaHVua19mcmVlIChjdXIpOwotICAgIH0KLQotICAgIGdfbGlzdF9mcmVlIChjaHVua3MpOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNoZWNrX3Byb3RvY29sX3ZlcnNpb24gKEdzdFBsdWdpbkxvYWRlciAqIGwsIGd1aW50OCAqIHBheWxvYWQsCi0gICAgZ3VpbnQgcGF5bG9hZF9sZW4pCi17Ci0gIGd1aW50MzIgZ290X3ZlcnNpb247Ci0gIGd1aW50OCAqYmluYXJ5X3JlZ192ZXI7Ci0KLSAgaWYgKHBheWxvYWRfbGVuIDwgc2l6ZW9mIChndWludDMyKSArIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9MRU4pCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdvdF92ZXJzaW9uID0gR1NUX1JFQURfVUlOVDMyX0JFIChwYXlsb2FkKTsKLSAgR1NUX0xPRyAoIkdvdCBWRVJTSU9OICV1IGZyb20gY2hpbGQuIE91cnMgaXMgJXUiLCBnb3RfdmVyc2lvbiwKLSAgICAgIGxvYWRlcl9wcm90b2NvbF92ZXJzaW9uKTsKLSAgaWYgKGdvdF92ZXJzaW9uICE9IGxvYWRlcl9wcm90b2NvbF92ZXJzaW9uKQotICAgIHJldHVybiBGQUxTRTsKLQotICBiaW5hcnlfcmVnX3ZlciA9IHBheWxvYWQgKyBzaXplb2YgKGd1aW50MzIpOwotICBpZiAoc3RyY21wICgoZ2NoYXIgKikgYmluYXJ5X3JlZ192ZXIsIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9TVFIpKSB7Ci0gICAgR1NUX0xPRyAoIkJpbmFyeSBjaHVuayBmb3JtYXQgb2YgY2hpbGQgaXMgZGlmZmVyZW50LiBPdXJzOiAlcywgY2hpbGQgJXNcbiIsCi0gICAgICAgIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9TVFIsIGJpbmFyeV9yZWdfdmVyKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotaGFuZGxlX3J4X3BhY2tldCAoR3N0UGx1Z2luTG9hZGVyICogbCwKLSAgICBndWludCBwYWNrX3R5cGUsIGd1aW50MzIgdGFnLCBndWludDggKiBwYXlsb2FkLCBndWludCBwYXlsb2FkX2xlbikKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBzd2l0Y2ggKHBhY2tfdHlwZSkgewotICAgIGNhc2UgUEFDS0VUX0VYSVQ6Ci0gICAgICBnc3RfcG9sbF9mZF9jdGxfcmVhZCAobC0+ZmRzZXQsICZsLT5mZF9yLCBGQUxTRSk7Ci0gICAgICBpZiAobC0+aXNfY2hpbGQpIHsKLSAgICAgICAgLyogUmVzcG9uZCAqLwotICAgICAgICBwdXRfcGFja2V0IChsLCBQQUNLRVRfRVhJVCwgMCwgTlVMTCwgMCk7Ci0gICAgICB9Ci0gICAgICBsLT5yeF9kb25lID0gVFJVRTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgUEFDS0VUX0xPQURfUExVR0lOOnsKLSAgICAgIGlmICghbC0+aXNfY2hpbGQpCi0gICAgICAgIHJldHVybiBUUlVFOwotCi0gICAgICAvKiBQYXlsb2FkIGlzIHRoZSBmaWxlbmFtZSB0byBsb2FkICovCi0gICAgICByZXMgPSBkb19wbHVnaW5fbG9hZCAobCwgKGdjaGFyICopIHBheWxvYWQsIHRhZyk7Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBBQ0tFVF9QTFVHSU5fREVUQUlMUzp7Ci0gICAgICBnY2hhciAqdG1wID0gKGdjaGFyICopIHBheWxvYWQ7Ci0gICAgICBQZW5kaW5nUGx1Z2luRW50cnkgKmVudHJ5ID0gTlVMTDsKLSAgICAgIEdMaXN0ICpjdXI7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGwtPnJlZ2lzdHJ5LAotICAgICAgICAgICJSZWNlaXZlZCBwbHVnaW4gZGV0YWlscyBmcm9tIGNoaWxkIHcvIHRhZyAldS4gJWQgYnl0ZXMgaW5mbyIsCi0gICAgICAgICAgdGFnLCBwYXlsb2FkX2xlbik7Ci0KLSAgICAgIC8qIEFzc3VtZSB0aGF0IHRhZ2dlZCBkZXRhaWxzIGNvbWUgYmFjayBpbiB0aGUgb3JkZXIKLSAgICAgICAqIHdlIHJlcXVlc3RlZCwgYW5kIGRlbGV0ZSBhbnl0aGluZyBiZWZvcmUgKGJ1dCBub3QKLSAgICAgICAqIGluY2x1ZGluZykgdGhpcyBvbmUgKi8KLSAgICAgIGN1ciA9IGwtPnBlbmRpbmdfcGx1Z2luczsKLSAgICAgIHdoaWxlIChjdXIpIHsKLSAgICAgICAgUGVuZGluZ1BsdWdpbkVudHJ5ICplID0gKFBlbmRpbmdQbHVnaW5FbnRyeSAqKSAoY3VyLT5kYXRhKTsKLQotICAgICAgICBpZiAoZS0+dGFnID4gdGFnKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChlLT50YWcgPT0gdGFnKSB7Ci0gICAgICAgICAgZW50cnkgPSBlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGN1ciA9IGdfbGlzdF9kZWxldGVfbGluayAoY3VyLCBjdXIpOwotICAgICAgICAgIGdfZnJlZSAoZS0+ZmlsZW5hbWUpOwotICAgICAgICAgIGdfc2xpY2VfZnJlZSAoUGVuZGluZ1BsdWdpbkVudHJ5LCBlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBsLT5wZW5kaW5nX3BsdWdpbnMgPSBjdXI7Ci0gICAgICBpZiAoY3VyID09IE5VTEwpCi0gICAgICAgIGwtPnBlbmRpbmdfcGx1Z2luc190YWlsID0gTlVMTDsKLQotICAgICAgaWYgKHBheWxvYWRfbGVuID4gMCkgewotICAgICAgICBHc3RQbHVnaW4gKm5ld3BsdWdpbiA9IE5VTEw7Ci0gICAgICAgIGlmICghX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbiAobC0+cmVnaXN0cnksICZ0bXAsCi0gICAgICAgICAgICAgICAgdG1wICsgcGF5bG9hZF9sZW4sICZuZXdwbHVnaW4pKSB7Ci0gICAgICAgICAgLyogR290IGdhcmJhZ2UgZnJvbSB0aGUgY2hpbGQsIHNvIGZhaWwgYW5kIHRyaWdnZXIgcmVwbGF5IG9mIHBsdWdpbnMgKi8KLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChsLT5yZWdpc3RyeSwKLSAgICAgICAgICAgICAgIlByb2JsZW1zIGxvYWRpbmcgcGx1Z2luIGRldGFpbHMgd2l0aCB0YWcgJXUgZnJvbSBzY2FubmVyIiwgdGFnKTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKG5ld3BsdWdpbiwgR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRCk7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChsLT5yZWdpc3RyeSwKLSAgICAgICAgICAgICJtYXJraW5nIHBsdWdpbiAlcCBhcyByZWdpc3RlcmVkIGFzICVzIiwgbmV3cGx1Z2luLAotICAgICAgICAgICAgbmV3cGx1Z2luLT5maWxlbmFtZSk7Ci0gICAgICAgIG5ld3BsdWdpbi0+cmVnaXN0ZXJlZCA9IFRSVUU7Ci0KLSAgICAgICAgLyogV2UgZ290IGEgc2V0IG9mIHBsdWdpbiBkZXRhaWxzIC0gcmVtZW1iZXIgaXQgZm9yIGxhdGVyICovCi0gICAgICAgIGwtPmdvdF9wbHVnaW5fZGV0YWlscyA9IFRSVUU7Ci0gICAgICB9IGVsc2UgaWYgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgLyogQ3JlYXRlIGEgYmxhY2tsaXN0IGVudHJ5IGZvciB0aGlzIGZpbGUgdG8gcHJldmVudCBzY2FubmluZyBldmVyeSB0aW1lICovCi0gICAgICAgIHBsdWdpbl9sb2FkZXJfY3JlYXRlX2JsYWNrbGlzdF9wbHVnaW4gKGwsIGVudHJ5KTsKLSAgICAgICAgbC0+Z290X3BsdWdpbl9kZXRhaWxzID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgZ19mcmVlIChlbnRyeS0+ZmlsZW5hbWUpOwotICAgICAgICBnX3NsaWNlX2ZyZWUgKFBlbmRpbmdQbHVnaW5FbnRyeSwgZW50cnkpOwotICAgICAgfQotCi0gICAgICAvKiBSZW1vdmUgdGhlIHBsdWdpbiBlbnRyeSB3ZSBqdXN0IGxvYWRlZCAqLwotICAgICAgY3VyID0gbC0+cGVuZGluZ19wbHVnaW5zOwotICAgICAgaWYgKGN1ciAhPSBOVUxMKQotICAgICAgICBjdXIgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGN1ciwgY3VyKTsKLSAgICAgIGwtPnBlbmRpbmdfcGx1Z2lucyA9IGN1cjsKLSAgICAgIGlmIChjdXIgPT0gTlVMTCkKLSAgICAgICAgbC0+cGVuZGluZ19wbHVnaW5zX3RhaWwgPSBOVUxMOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQQUNLRVRfU1lOQzoKLSAgICAgIGlmIChsLT5pc19jaGlsZCkgewotICAgICAgICAvKiBSZXNwb25kIHdpdGggb3VyIHJlcGx5IC0gYWxzbyBhIHN5bmMgKi8KLSAgICAgICAgcHV0X3BhY2tldCAobCwgUEFDS0VUX1NZTkMsIHRhZywgTlVMTCwgMCk7Ci0gICAgICAgIEdTVF9MT0cgKCJHb3QgU1lOQyBpbiBjaGlsZCAtIHJlcGx5aW5nIik7Ci0gICAgICB9IGVsc2UKLSAgICAgICAgbC0+cnhfZ290X3N5bmMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQQUNLRVRfVkVSU0lPTjoKLSAgICAgIGlmIChsLT5pc19jaGlsZCkgewotICAgICAgICAvKiBSZXNwb25kIHdpdGggb3VyIHJlcGx5IC0gYSB2ZXJzaW9uIHBhY2tldCwgd2l0aCB0aGUgdmVyc2lvbiAqLwotICAgICAgICBjb25zdCBnaW50IHZlcnNpb25fbGVuID0KLSAgICAgICAgICAgIHNpemVvZiAoZ3VpbnQzMikgKyBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOOwotICAgICAgICBndWludDggdmVyc2lvbl9pbmZvW3NpemVvZiAoZ3VpbnQzMikgKyBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOXTsKLSAgICAgICAgbWVtc2V0ICh2ZXJzaW9uX2luZm8sIDAsIHZlcnNpb25fbGVuKTsKLSAgICAgICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAodmVyc2lvbl9pbmZvLCBsb2FkZXJfcHJvdG9jb2xfdmVyc2lvbik7Ci0gICAgICAgIG1lbWNweSAodmVyc2lvbl9pbmZvICsgc2l6ZW9mIChndWludDMyKSwgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUiwKLSAgICAgICAgICAgIHN0cmxlbiAoR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUikpOwotICAgICAgICBwdXRfcGFja2V0IChsLCBQQUNLRVRfVkVSU0lPTiwgdGFnLCB2ZXJzaW9uX2luZm8sIHZlcnNpb25fbGVuKTsKLSAgICAgICAgR1NUX0xPRyAoIkdvdCBWRVJTSU9OIGluIGNoaWxkIC0gcmVwbHlpbmcgJXUiLCBsb2FkZXJfcHJvdG9jb2xfdmVyc2lvbik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXMgPSBjaGVja19wcm90b2NvbF92ZXJzaW9uIChsLCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEZBTFNFOyAgICAgICAgICAgICAvKiBJbnZhbGlkIHBhY2tldCAtPiBzb21ldGhpbmcgaXMgd3JvbmcgKi8KLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVhZF9vbmUgKEdzdFBsdWdpbkxvYWRlciAqIGwpCi17Ci0gIGd1aW50NjQgbWFnaWM7Ci0gIGd1aW50MzIgdG9fcmVhZCwgcGFja2V0X2xlbiwgdGFnOwotICBndWludDggKmluOwotICBnaW50IHJlczsKLQotICB0b19yZWFkID0gSEVBREVSX1NJWkU7Ci0gIGluID0gbC0+cnhfYnVmOwotICBkbyB7Ci0gICAgcmVzID0gcmVhZCAobC0+ZmRfci5mZCwgaW4sIHRvX3JlYWQpOwotICAgIGlmIChHX1VOTElLRUxZIChyZXMgPCAwKSkgewotICAgICAgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKLSAgICAgICAgY29udGludWU7Ci0gICAgICBHU1RfTE9HICgiRmFpbGVkIHJlYWRpbmcgcGFja2V0IGhlYWRlciIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICB0b19yZWFkIC09IHJlczsKLSAgICBpbiArPSByZXM7Ci0gIH0gd2hpbGUgKHRvX3JlYWQgPiAwKTsKLQotICBtYWdpYyA9IEdTVF9SRUFEX1VJTlQzMl9CRSAobC0+cnhfYnVmICsgOCk7Ci0gIGlmIChtYWdpYyAhPSBIRUFERVJfTUFHSUMpIHsKLSAgICBHU1RfV0FSTklORwotICAgICAgICAoIkludmFsaWQgcGFja2V0IChiYWQgbWFnaWMgbnVtYmVyKSByZWNlaXZlZCBmcm9tIHBsdWdpbiBzY2FubmVyIHN1YnByb2Nlc3MiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBwYWNrZXRfbGVuID0gR1NUX1JFQURfVUlOVDMyX0JFIChsLT5yeF9idWYgKyA0KTsKLSAgaWYgKHBhY2tldF9sZW4gKyBIRUFERVJfU0laRSA+IEJVRl9NQVhfU0laRSkgewotICAgIEdTVF9XQVJOSU5HCi0gICAgICAgICgiUmVjZWl2ZWQgZXhjZXNzaXZlbHkgbGFyZ2UgcGFja2V0IGZvciBwbHVnaW4gc2Nhbm5lciBzdWJwcm9jZXNzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIHRhZyA9IEdTVF9SRUFEX1VJTlQyNF9CRSAobC0+cnhfYnVmICsgMSk7Ci0KLSAgaWYgKHBhY2tldF9sZW4gPiAwKSB7Ci0gICAgaWYgKHBhY2tldF9sZW4gKyBIRUFERVJfU0laRSA+PSBsLT5yeF9idWZfc2l6ZSkgewotICAgICAgR1NUX0xPRyAoIkV4cGFuZGluZyByeCBidWYgZnJvbSAlZCB0byAlZCIsCi0gICAgICAgICAgbC0+cnhfYnVmX3NpemUsIHBhY2tldF9sZW4gKyBIRUFERVJfU0laRSArIEJVRl9HUk9XX0VYVFJBKTsKLSAgICAgIGwtPnJ4X2J1Zl9zaXplID0gcGFja2V0X2xlbiArIEhFQURFUl9TSVpFICsgQlVGX0dST1dfRVhUUkE7Ci0gICAgICBsLT5yeF9idWYgPSBnX3JlYWxsb2MgKGwtPnJ4X2J1ZiwgbC0+cnhfYnVmX3NpemUpOwotICAgIH0KLQotICAgIGluID0gbC0+cnhfYnVmICsgSEVBREVSX1NJWkU7Ci0gICAgdG9fcmVhZCA9IHBhY2tldF9sZW47Ci0gICAgZG8gewotICAgICAgcmVzID0gcmVhZCAobC0+ZmRfci5mZCwgaW4sIHRvX3JlYWQpOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKHJlcyA8IDApKSB7Ci0gICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEdTVF9FUlJPUiAoIlBhY2tldCBwYXlsb2FkIHJlYWQgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICAgIHRvX3JlYWQgLT0gcmVzOwotICAgICAgaW4gKz0gcmVzOwotICAgIH0gd2hpbGUgKHRvX3JlYWQgPiAwKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HICgiTm8gcGF5bG9hZCB0byByZWFkIGZvciAwIGxlbmd0aCBwYWNrZXQgdHlwZSAlZCB0YWcgJXUiLAotICAgICAgICBsLT5yeF9idWZbMF0sIHRhZyk7Ci0gIH0KLQotICByZXR1cm4gaGFuZGxlX3J4X3BhY2tldCAobCwgbC0+cnhfYnVmWzBdLCB0YWcsCi0gICAgICBsLT5yeF9idWYgKyBIRUFERVJfU0laRSwgcGFja2V0X2xlbik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZXhjaGFuZ2VfcGFja2V0cyAoR3N0UGx1Z2luTG9hZGVyICogbCkKLXsKLSAgZ2ludCByZXM7Ci0KLSAgLyogV2FpdCBmb3IgYWN0aXZpdHkgb24gb3VyIEZEcyAqLwotICBkbyB7Ci0gICAgZG8gewotICAgICAgcmVzID0gZ3N0X3BvbGxfd2FpdCAobC0+ZmRzZXQsIEdTVF9TRUNPTkQpOwotICAgIH0gd2hpbGUgKHJlcyA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSk7Ci0KLSAgICBpZiAocmVzIDwgMCkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEdTVF9MT0cgKCJQb2xsIHJlcyA9ICVkLiAlZCBieXRlcyBwZW5kaW5nIGZvciB3cml0ZSIsIHJlcywKLSAgICAgICAgbC0+dHhfYnVmX3dyaXRlIC0gbC0+dHhfYnVmX3JlYWQpOwotCi0gICAgaWYgKCFsLT5yeF9kb25lKSB7Ci0gICAgICBpZiAoZ3N0X3BvbGxfZmRfaGFzX2Vycm9yIChsLT5mZHNldCwgJmwtPmZkX3IpKSB7Ci0gICAgICAgIEdTVF9MT0cgKCJyZWFkIGZkICVkIGVycm9yZWQiLCBsLT5mZF9yLmZkKTsKLSAgICAgICAgZ290byBmYWlsX2FuZF9jbGVhbnVwOwotICAgICAgfQotCi0gICAgICBpZiAoZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKGwtPmZkc2V0LCAmbC0+ZmRfcikpIHsKLSAgICAgICAgaWYgKCFyZWFkX29uZSAobCkpCi0gICAgICAgICAgZ290byBmYWlsX2FuZF9jbGVhbnVwOwotICAgICAgfSBlbHNlIGlmIChnc3RfcG9sbF9mZF9oYXNfY2xvc2VkIChsLT5mZHNldCwgJmwtPmZkX3IpKSB7Ci0gICAgICAgIEdTVF9MT0cgKCJyZWFkIGZkICVkIGNsb3NlZCIsIGwtPmZkX3IuZmQpOwotICAgICAgICBnb3RvIGZhaWxfYW5kX2NsZWFudXA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGwtPnR4X2J1Zl9yZWFkIDwgbC0+dHhfYnVmX3dyaXRlKSB7Ci0gICAgICBpZiAoZ3N0X3BvbGxfZmRfaGFzX2Vycm9yIChsLT5mZHNldCwgJmwtPmZkX3cpKSB7Ci0gICAgICAgIEdTVF9FUlJPUiAoIndyaXRlIGZkICVkIGVycm9yZWQiLCBsLT5mZF93LmZkKTsKLSAgICAgICAgZ290byBmYWlsX2FuZF9jbGVhbnVwOwotICAgICAgfQotICAgICAgaWYgKGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAobC0+ZmRzZXQsICZsLT5mZF93KSkgewotICAgICAgICBpZiAoIXdyaXRlX29uZSAobCkpCi0gICAgICAgICAgZ290byBmYWlsX2FuZF9jbGVhbnVwOwotICAgICAgfSBlbHNlIGlmIChnc3RfcG9sbF9mZF9oYXNfY2xvc2VkIChsLT5mZHNldCwgJmwtPmZkX3cpKSB7Ci0gICAgICAgIEdTVF9MT0cgKCJ3cml0ZSBmZCAlZCBjbG9zZWQiLCBsLT5mZF93LmZkKTsKLSAgICAgICAgZ290byBmYWlsX2FuZF9jbGVhbnVwOwotICAgICAgfQotICAgIH0KLSAgfSB3aGlsZSAobC0+dHhfYnVmX3JlYWQgPCBsLT50eF9idWZfd3JpdGUpOwotCi0gIHJldHVybiBUUlVFOwotZmFpbF9hbmRfY2xlYW51cDoKLSAgcGx1Z2luX2xvYWRlcl9jbGVhbnVwX2NoaWxkIChsKTsKLSAgcmV0dXJuIEZBTFNFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHBsdWdpbmxvYWRlci5oIGIvZ3N0L2dzdHBsdWdpbmxvYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmJhYzU5Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RwbHVnaW5sb2FkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgotICoKLSAqIGdzdHBsdWdpbmxvYWRlci5oOiBIZWxwZXIgZm9yIG91dC1vZi1wcm9jZXNzIHBsdWdpbiBsb2FkaW5nLiBQcml2YXRlIGhlYWRlci4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2lmbmRlZiBfX0dTVF9QTFVHSU5MT0FERVJfSF9fCi0jZGVmaW5lIF9fR1NUX1BMVUdJTkxPQURFUl9IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cmVnaXN0cnkuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UGx1Z2luTG9hZGVyIEdzdFBsdWdpbkxvYWRlcjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBsdWdpbkxvYWRlckZ1bmNzIHsKLSAgR3N0UGx1Z2luTG9hZGVyICogKCpjcmVhdGUpICAgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSk7Ci0gIGdib29sZWFuICAgICAgICAgICgqZGVzdHJveSkgIChHc3RQbHVnaW5Mb2FkZXIgKmxvYWRlcik7Ci0gIGdib29sZWFuICAgICAgICAgICgqbG9hZCkgICAgIChHc3RQbHVnaW5Mb2FkZXIgKmxvYWRlciwgY29uc3QgZ2NoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3QgZmlsZV9zaXplLCB0aW1lX3QgZmlsZV9tdGltZSk7Ci19IEdzdFBsdWdpbkxvYWRlckZ1bmNzOwotCi1leHRlcm4gY29uc3QgR3N0UGx1Z2luTG9hZGVyRnVuY3MgX3ByaXZfZ3N0X3BsdWdpbl9sb2FkZXJfZnVuY3M7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9QTFVHSU5MT0FERVJfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0cG9sbC5jIGIvZ3N0L2dzdHBvbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ1ZThiNy4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cG9sbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY5MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggT2xlIEFuZHLpIFZhZGxhIFJhdm7lcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0gKgotICogZ3N0cG9sbC5jOiBGaWxlIGRlc2NyaXB0b3Igc2V0Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3Rwb2xsCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEtlZXAgdHJhY2sgb2YgZmlsZSBkZXNjcmlwdG9ycyBhbmQgbWFrZSBpdCBwb3NzaWJsZQotICogICAgICAgICAgICAgICAgICAgICB0byB3YWl0IG9uIHRoZW0gaW4gYSBjYW5jZWxsYWJsZSB3YXkKLSAqCi0gKiBBICNHc3RQb2xsIGtlZXBzIHRyYWNrIG9mIGZpbGUgZGVzY3JpcHRvcnMgbXVjaCBsaWtlIGZkX3NldCAodXNlZCB3aXRoCi0gKiBzZWxlY3QoKSkgb3IgYSBzdHJ1Y3QgcG9sbGZkIGFycmF5ICh1c2VkIHdpdGggcG9sbCgpKS4gT25jZSBjcmVhdGVkIHdpdGgKLSAqIGdzdF9wb2xsX25ldygpLCB0aGUgc2V0IGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIGZpbGUgZGVzY3JpcHRvcnMgdG8gYmUKLSAqIHJlYWRhYmxlIGFuZC9vciB3cml0YWJsZS4gSXQgaXMgcG9zc2libGUgdG8gbWFrZSB0aGlzIHdhaXQgYmUgY29udHJvbGxlZAotICogYnkgc3BlY2lmeWluZyAlVFJVRSBmb3IgdGhlIEBjb250cm9sbGFibGUgZmxhZyB3aGVuIGNyZWF0aW5nIHRoZSBzZXQgKG9yCi0gKiBsYXRlciBjYWxsaW5nIGdzdF9wb2xsX3NldF9jb250cm9sbGFibGUoKSkuCi0gKgotICogTmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGFkZGVkIHRvIHRoZSBzZXQgdXNpbmcgZ3N0X3BvbGxfYWRkX2ZkKCksIGFuZAotICogcmVtb3ZlZCB1c2luZyBnc3RfcG9sbF9yZW1vdmVfZmQoKS4gQ29udHJvbGxpbmcgd2hpY2ggZmlsZSBkZXNjcmlwdG9ycwotICogc2hvdWxkIGJlIHdhaXRlZCBmb3IgdG8gYmVjb21lIHJlYWRhYmxlIGFuZC9vciB3cml0YWJsZSBhcmUgZG9uZSB1c2luZwotICogZ3N0X3BvbGxfZmRfY3RsX3JlYWQoKSBhbmQgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlKCkuCi0gKgotICogVXNlIGdzdF9wb2xsX3dhaXQoKSB0byB3YWl0IGZvciB0aGUgZmlsZSBkZXNjcmlwdG9ycyB0byBhY3R1YWxseSBiZWNvbWUKLSAqIHJlYWRhYmxlIGFuZC9vciB3cml0YWJsZSwgb3IgdG8gdGltZW91dCBpZiBubyBmaWxlIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlCi0gKiBpbiB0aW1lLiBUaGUgd2FpdCBjYW4gYmUgY29udHJvbGxlZCBieSBjYWxsaW5nIGdzdF9wb2xsX3Jlc3RhcnQoKSBhbmQKLSAqIGdzdF9wb2xsX3NldF9mbHVzaGluZygpLgotICoKLSAqIE9uY2UgdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQgaGFzIGJlZW4gd2FpdGVkIGZvciwgb25lIGNhbiB1c2UKLSAqIGdzdF9wb2xsX2ZkX2hhc19jbG9zZWQoKSB0byBzZWUgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciBoYXMgYmVlbiBjbG9zZWQsCi0gKiBnc3RfcG9sbF9mZF9oYXNfZXJyb3IoKSB0byBzZWUgaWYgaXQgaGFzIGdlbmVyYXRlZCBhbiBlcnJvciwKLSAqIGdzdF9wb2xsX2ZkX2Nhbl9yZWFkKCkgdG8gc2VlIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWQgZnJvbSB0aGUgZmlsZQotICogZGVzY3JpcHRvciwgYW5kIGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSgpIHRvIHNlZSBpZiBpdCBpcyBwb3NzaWJsZSB0bwotICogd3JpdGUgdG8gaXQuCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2lmZGVmIEdfT1NfV0lOMzIKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2Vsc2UKLSNkZWZpbmUgX0dOVV9TT1VSQ0UgMQotI2lmZGVmIEhBVkVfU1lTX1BPTExfSAotI2luY2x1ZGUgPHN5cy9wb2xsLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1BPTExfSAotI2luY2x1ZGUgPHBvbGwuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0KLSNpZmRlZiBHX09TX1dJTjMyCi0jICBpZm5kZWYgRVdPVUxEQkxPQ0sKLSMgIGRlZmluZSBFV09VTERCTE9DSyBFQUdBSU4gICAgLyogVGhpcyBpcyBqdXN0IHRvIHBsYWNhdGUgZ2NjICovCi0jICBlbmRpZgotI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KLQotLyogT1MvWCBuZWVkcyB0aGlzIGJlY2F1c2Ugb2YgYmFkIGhlYWRlcnMgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLyogVGhlIHBvbGwoKSBlbXVsYXRpb24gb24gT1MvWCBkb2Vzbid0IGhhbmRsZSBmZHM9TlVMTCwgbmZkcz0wLAotICogc28gd2UgcHJlZmVyIG91ciBvd24gcG9sbCBlbXVsYXRpb24uCi0gKi8KLSNpZiBkZWZpbmVkKEJST0tFTl9QT0xMKQotI3VuZGVmIEhBVkVfUE9MTAotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3Rwb2xsLmgiCi0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIEdTVF9DQVRfUE9MTAotCi0jaWZkZWYgR19PU19XSU4zMgotdHlwZWRlZiBzdHJ1Y3QgX1dpbnNvY2tGZCBXaW5zb2NrRmQ7Ci0KLXN0cnVjdCBfV2luc29ja0ZkCi17Ci0gIGdpbnQgZmQ7Ci0gIGdsb25nIGV2ZW50X21hc2s7Ci0gIFdTQU5FVFdPUktFVkVOVFMgZXZlbnRzOwotICBnbG9uZyBpZ25vcmVkX2V2ZW50X21hc2s7Ci19OwotI2VuZGlmCi0KLXR5cGVkZWYgZW51bQotewotICBHU1RfUE9MTF9NT0RFX0FVVE8sCi0gIEdTVF9QT0xMX01PREVfU0VMRUNULAotICBHU1RfUE9MTF9NT0RFX1BTRUxFQ1QsCi0gIEdTVF9QT0xMX01PREVfUE9MTCwKLSAgR1NUX1BPTExfTU9ERV9QUE9MTCwKLSAgR1NUX1BPTExfTU9ERV9XSU5ET1dTCi19IEdzdFBvbGxNb2RlOwotCi1zdHJ1Y3QgX0dzdFBvbGwKLXsKLSAgR3N0UG9sbE1vZGUgbW9kZTsKLQotICBHTXV0ZXggbG9jazsKLSAgLyogYXJyYXkgb2YgZmRzLCBhbHdheXMgd3JpdHRlbiB0byBhbmQgcmVhZCBmcm9tIHdpdGggbG9jayAqLwotICBHQXJyYXkgKmZkczsKLSAgLyogYXJyYXkgb2YgYWN0aXZlIGZkcywgb25seSB3cml0dGVuIHRvIGZyb20gdGhlIHdhaXRpbmcgdGhyZWFkIHdpdGggdGhlCi0gICAqIGxvY2sgYW5kIHJlYWQgZnJvbSB3aXRoIHRoZSBsb2NrIG9yIHdpdGhvdXQgdGhlIGxvY2sgZnJvbSB0aGUgd2FpdGluZwotICAgKiB0aHJlYWQgKi8KLSAgR0FycmF5ICphY3RpdmVfZmRzOwotCi0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgR3N0UG9sbEZEIGNvbnRyb2xfcmVhZF9mZDsKLSAgR3N0UG9sbEZEIGNvbnRyb2xfd3JpdGVfZmQ7Ci0jZWxzZQotICBHQXJyYXkgKmFjdGl2ZV9mZHNfaWdub3JlZDsKLSAgR0FycmF5ICpldmVudHM7Ci0gIEdBcnJheSAqYWN0aXZlX2V2ZW50czsKLQotICBIQU5ETEUgd2FrZXVwX2V2ZW50OwotI2VuZGlmCi0KLSAgZ2Jvb2xlYW4gY29udHJvbGxhYmxlOwotICB2b2xhdGlsZSBnaW50IHdhaXRpbmc7Ci0gIHZvbGF0aWxlIGdpbnQgY29udHJvbF9wZW5kaW5nOwotICB2b2xhdGlsZSBnaW50IGZsdXNoaW5nOwotICBnYm9vbGVhbiB0aW1lcjsKLSAgdm9sYXRpbGUgZ2ludCByZWJ1aWxkOwotfTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9wb2xsX2ZkX2N0bF9yZWFkX3VubG9ja2VkIChHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCwKLSAgICBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIGdib29sZWFuIGdzdF9wb2xsX2FkZF9mZF91bmxvY2tlZCAoR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpOwotCi0jZGVmaW5lIElTX0ZMVVNISU5HKHMpICAgICAgKGdfYXRvbWljX2ludF9nZXQoJihzKS0+Zmx1c2hpbmcpKQotI2RlZmluZSBTRVRfRkxVU0hJTkcocyx2YWwpIChnX2F0b21pY19pbnRfc2V0KCYocyktPmZsdXNoaW5nLCAodmFsKSkpCi0KLSNkZWZpbmUgSU5DX1dBSVRJTkcocykgICAgICAoZ19hdG9taWNfaW50X2FkZCgmKHMpLT53YWl0aW5nLCAxKSkKLSNkZWZpbmUgREVDX1dBSVRJTkcocykgICAgICAoZ19hdG9taWNfaW50X2FkZCgmKHMpLT53YWl0aW5nLCAtMSkpCi0jZGVmaW5lIEdFVF9XQUlUSU5HKHMpICAgICAgKGdfYXRvbWljX2ludF9nZXQoJihzKS0+d2FpdGluZykpCi0KLSNkZWZpbmUgVEVTVF9SRUJVSUxEKHMpICAgICAoZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlKCYocyktPnJlYnVpbGQsIDEsIDApKQotI2RlZmluZSBNQVJLX1JFQlVJTEQocykgICAgIChnX2F0b21pY19pbnRfc2V0KCYocyktPnJlYnVpbGQsIDEpKQotCi0jaWZuZGVmIEdfT1NfV0lOMzIKLQotc3RhdGljIGdib29sZWFuCi13YWtlX2V2ZW50IChHc3RQb2xsICogc2V0KQotewotICBzc2l6ZV90IG51bV93cml0dGVuOwotICB3aGlsZSAoKG51bV93cml0dGVuID0gd3JpdGUgKHNldC0+Y29udHJvbF93cml0ZV9mZC5mZCwgIlciLCAxKSkgIT0gMSkgewotICAgIGlmIChudW1fd3JpdHRlbiA9PSAtMSAmJiBlcnJubyAhPSBFQUdBSU4gJiYgZXJybm8gIT0gRUlOVFIpIHsKLSAgICAgIGdfY3JpdGljYWwgKCIlcDogZmFpbGVkIHRvIHdha2UgZXZlbnQ6ICVzIiwgc2V0LCBzdHJlcnJvciAoZXJybm8pKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVsZWFzZV9ldmVudCAoR3N0UG9sbCAqIHNldCkKLXsKLSAgZ2NoYXIgYnVmWzFdID0geyAnXDAnIH07Ci0gIHNzaXplX3QgbnVtX3JlYWQ7Ci0gIHdoaWxlICgobnVtX3JlYWQgPSByZWFkIChzZXQtPmNvbnRyb2xfcmVhZF9mZC5mZCwgYnVmLCAxKSkgIT0gMSkgewotICAgIGlmIChudW1fcmVhZCA9PSAtMSAmJiBlcnJubyAhPSBFQUdBSU4gJiYgZXJybm8gIT0gRUlOVFIpIHsKLSAgICAgIGdfY3JpdGljYWwgKCIlcDogZmFpbGVkIHRvIHJlbGVhc2UgZXZlbnQ6ICVzIiwgc2V0LCBzdHJlcnJvciAoZXJybm8pKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyB2b2lkCi1mb3JtYXRfbGFzdF9lcnJvciAoZ2NoYXIgKiBidWYsIHNpemVfdCBidWZfbGVuKQotewotICBEV09SRCBmbGFncyA9IEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNOwotICBMUENWT0lEIHNyYyA9IE5VTEw7Ci0gIERXT1JEIGxhbmcgPSAwOwotICBEV09SRCBpZDsKLSAgaWQgPSBHZXRMYXN0RXJyb3IgKCk7Ci0gIEZvcm1hdE1lc3NhZ2UgKGZsYWdzLCBzcmMsIGlkLCBsYW5nLCBidWYsIChEV09SRCkgYnVmX2xlbiwgTlVMTCk7Ci0gIFNldExhc3RFcnJvciAoaWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdha2VfZXZlbnQgKEdzdFBvbGwgKiBzZXQpCi17Ci0gIFNldExhc3RFcnJvciAoMCk7Ci0gIGVycm5vID0gMDsKLSAgaWYgKCFTZXRFdmVudCAoc2V0LT53YWtldXBfZXZlbnQpKSB7Ci0gICAgZ2NoYXIgbXNnWzEwMjRdID0gIjx1bmtub3duPiI7Ci0gICAgZm9ybWF0X2xhc3RfZXJyb3IgKG1zZywgc2l6ZW9mIChtc2cpKTsKLSAgICBnX2NyaXRpY2FsICgiJXA6IGZhaWxlZCB0byBzZXQgd2FrdXBfZXZlbnQ6ICVzIiwgc2V0LCBtc2cpOwotICAgIGVycm5vID0gRUJBREY7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVsZWFzZV9ldmVudCAoR3N0UG9sbCAqIHNldCkKLXsKLSAgRFdPUkQgc3RhdHVzOwotICBTZXRMYXN0RXJyb3IgKDApOwotICBlcnJubyA9IDA7Ci0KLSAgc3RhdHVzID0gV2FpdEZvclNpbmdsZU9iamVjdCAoc2V0LT53YWtldXBfZXZlbnQsIElORklOSVRFKTsKLSAgaWYgKHN0YXR1cykgewotICAgIGNvbnN0IGdjaGFyICpyZWFzb24gPSAidW5rbm93biI7Ci0gICAgZ2NoYXIgbXNnWzEwMjRdID0gIjx1bmtub3duPiI7Ci0gICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICAgIGNhc2UgV0FJVF9BQkFORE9ORUQ6Ci0gICAgICAgIHJlYXNvbiA9ICJXQUlUX0FCQU5ET05FRCI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXQUlUX1RJTUVPVVQ6Ci0gICAgICAgIHJlYXNvbiA9ICJXQUlUX1RJTUVPVVQiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV0FJVF9GQUlMRUQ6Ci0gICAgICAgIGZvcm1hdF9sYXN0X2Vycm9yIChtc2csIHNpemVvZiAobXNnKSk7Ci0gICAgICAgIHJlYXNvbiA9IG1zZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZWFzb24gPSAib3RoZXIiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZ19jcml0aWNhbCAoIiVwOiBmYWlsZWQgdG8gYmxvY2sgb24gd2FrdXBfZXZlbnQ6ICVzIiwgc2V0LCByZWFzb24pOwotICAgIGVycm5vID0gRUJBREY7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKCFSZXNldEV2ZW50IChzZXQtPndha2V1cF9ldmVudCkpIHsKLSAgICBnY2hhciBtc2dbMTAyNF0gPSAiPHVua25vd24+IjsKLSAgICBmb3JtYXRfbGFzdF9lcnJvciAobXNnLCBzaXplb2YgKG1zZykpOwotICAgIGdfY3JpdGljYWwgKCIlcDogZmFpbGVkIHRvIHJlc2V0IHdha3VwX2V2ZW50OiAlcyIsIHNldCwgbXNnKTsKLSAgICBlcnJubyA9IEVCQURGOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0jZW5kaWYKLQotLyogdGhlIHBvbGwvc2VsZWN0IGNhbGwgaXMgYWxzbyBwZXJmb3JtZWQgb24gYSBjb250cm9sIHNvY2tldCwgdGhhdCB3YXkKLSAqIHdlIGNhbiBzZW5kIHNwZWNpYWwgY29tbWFuZHMgdG8gY29udHJvbCBpdCAqLwotc3RhdGljIGlubGluZSBnYm9vbGVhbgotcmFpc2Vfd2FrZXVwIChHc3RQb2xsICogc2V0KQotewotICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOwotCi0gIC8qIG1ha2VzIHRlc3RpbmcgY29udHJvbF9wZW5kaW5nIGFuZCBXQUtFX0VWRU5UKCkgYXRvbWljLiAqLwotICBnX211dGV4X2xvY2sgKCZzZXQtPmxvY2spOwotCi0gIGlmIChzZXQtPmNvbnRyb2xfcGVuZGluZyA9PSAwKSB7Ci0gICAgLyogcmFpc2Ugd2hlbiBub3RoaW5nIHBlbmRpbmcgKi8KLSAgICBHU1RfTE9HICgiJXA6IHJhaXNlIiwgc2V0KTsKLSAgICByZXN1bHQgPSB3YWtlX2V2ZW50IChzZXQpOwotICB9Ci0KLSAgaWYgKHJlc3VsdCkgewotICAgIHNldC0+Y29udHJvbF9wZW5kaW5nKys7Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJnNldC0+bG9jayk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotcmVsZWFzZV93YWtldXAgKEdzdFBvbGwgKiBzZXQpCi17Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotCi0gIC8qIG1ha2VzIHRlc3RpbmcvbW9kaWZ5aW5nIGNvbnRyb2xfcGVuZGluZyBhbmQgUkVMRUFTRV9FVkVOVCgpIGF0b21pYy4gKi8KLSAgZ19tdXRleF9sb2NrICgmc2V0LT5sb2NrKTsKLQotICBpZiAoc2V0LT5jb250cm9sX3BlbmRpbmcgPiAwKSB7Ci0gICAgLyogcmVsZWFzZSwgb25seSBpZiB0aGlzIHdhcyB0aGUgbGFzdCBwZW5kaW5nLiAqLwotICAgIGlmIChzZXQtPmNvbnRyb2xfcGVuZGluZyA9PSAxKSB7Ci0gICAgICBHU1RfTE9HICgiJXA6IHJlbGVhc2UiLCBzZXQpOwotICAgICAgcmVzdWx0ID0gcmVsZWFzZV9ldmVudCAoc2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICBzZXQtPmNvbnRyb2xfcGVuZGluZy0tOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBlcnJubyA9IEVXT1VMREJMT0NLOwotICB9Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZzZXQtPmxvY2spOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2ludAotcmVsZWFzZV9hbGxfd2FrZXVwIChHc3RQb2xsICogc2V0KQotewotICBnaW50IG9sZDsKLQotICAvKiBtYWtlcyB0ZXN0aW5nIGNvbnRyb2xfcGVuZGluZyBhbmQgUkVMRUFTRV9FVkVOVCgpIGF0b21pYy4gKi8KLSAgZ19tdXRleF9sb2NrICgmc2V0LT5sb2NrKTsKLQotICBpZiAoKG9sZCA9IHNldC0+Y29udHJvbF9wZW5kaW5nKSA+IDApIHsKLSAgICBHU1RfTE9HICgiJXA6IHJlbGVhc2luZyAlZCIsIHNldCwgb2xkKTsKLSAgICBpZiAocmVsZWFzZV9ldmVudCAoc2V0KSkgewotICAgICAgc2V0LT5jb250cm9sX3BlbmRpbmcgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBvbGQgPSAwOwotICAgIH0KLSAgfQotCi0gIGdfbXV0ZXhfdW5sb2NrICgmc2V0LT5sb2NrKTsKLQotICByZXR1cm4gb2xkOwotfQotCi1zdGF0aWMgZ2ludAotZmluZF9pbmRleCAoR0FycmF5ICogYXJyYXksIEdzdFBvbGxGRCAqIGZkKQotewotI2lmbmRlZiBHX09TX1dJTjMyCi0gIHN0cnVjdCBwb2xsZmQgKmlmZDsKLSNlbHNlCi0gIFdpbnNvY2tGZCAqaWZkOwotI2VuZGlmCi0gIGd1aW50IGk7Ci0KLSAgLyogc3RhcnQgYnkgYXNzdW1pbmcgdGhlIGluZGV4IGZvdW5kIGluIHRoZSBmZCBpcyBzdGlsbCB2YWxpZCAqLwotICBpZiAoZmQtPmlkeCA+PSAwICYmIGZkLT5pZHggPCBhcnJheS0+bGVuKSB7Ci0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgICBpZmQgPSAmZ19hcnJheV9pbmRleCAoYXJyYXksIHN0cnVjdCBwb2xsZmQsIGZkLT5pZHgpOwotI2Vsc2UKLSAgICBpZmQgPSAmZ19hcnJheV9pbmRleCAoYXJyYXksIFdpbnNvY2tGZCwgZmQtPmlkeCk7Ci0jZW5kaWYKLQotICAgIGlmIChpZmQtPmZkID09IGZkLT5mZCkgewotICAgICAgcmV0dXJuIGZkLT5pZHg7Ci0gICAgfQotICB9Ci0KLSAgLyogdGhlIHBvbGxmZCBhcnJheSBoYXMgY2hhbmdlZCBhbmQgd2UgbmVlZCB0byBsb29rdXAgdGhlIGZkIGFnYWluICovCi0gIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bGVuOyBpKyspIHsKLSNpZm5kZWYgR19PU19XSU4zMgotICAgIGlmZCA9ICZnX2FycmF5X2luZGV4IChhcnJheSwgc3RydWN0IHBvbGxmZCwgaSk7Ci0jZWxzZQotICAgIGlmZCA9ICZnX2FycmF5X2luZGV4IChhcnJheSwgV2luc29ja0ZkLCBpKTsKLSNlbmRpZgotCi0gICAgaWYgKGlmZC0+ZmQgPT0gZmQtPmZkKSB7Ci0gICAgICBmZC0+aWR4ID0gKGdpbnQpIGk7Ci0gICAgICByZXR1cm4gZmQtPmlkeDsKLSAgICB9Ci0gIH0KLQotICBmZC0+aWR4ID0gLTE7Ci0gIHJldHVybiBmZC0+aWR4OwotfQotCi0jaWYgIWRlZmluZWQoSEFWRV9QUE9MTCkgJiYgZGVmaW5lZChIQVZFX1BPTEwpCi0vKiBjaGVjayBpZiBhbGwgZmlsZSBkZXNjcmlwdG9ycyB3aWxsIGZpdCBpbiBhbiBmZF9zZXQgKi8KLXN0YXRpYyBnYm9vbGVhbgotc2VsZWN0YWJsZV9mZHMgKEdzdFBvbGwgKiBzZXQpCi17Ci0gIGd1aW50IGk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2V0LT5sb2NrKTsKLSAgZm9yIChpID0gMDsgaSA8IHNldC0+ZmRzLT5sZW47IGkrKykgewotICAgIHN0cnVjdCBwb2xsZmQgKnBmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmZkcywgc3RydWN0IHBvbGxmZCwgaSk7Ci0KLSAgICBpZiAocGZkLT5mZCA+PSBGRF9TRVRTSVpFKQotICAgICAgZ290byB0b29fbWFueTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJnNldC0+bG9jayk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLXRvb19tYW55OgotICB7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZzZXQtPmxvY2spOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBjaGVjayBpZiB0aGUgdGltZW91dCB3aWxsIGNvbnZlcnQgdG8gYSB0aW1lb3V0IHZhbHVlIHVzZWQgZm9yIHBvbGwoKQotICogd2l0aG91dCBhIGxvc3Mgb2YgcHJlY2lzaW9uCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotcG9sbGFibGVfdGltZW91dCAoR3N0Q2xvY2tUaW1lIHRpbWVvdXQpCi17Ci0gIGlmICh0aW1lb3V0ID09IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogbm90IGEgbmljZSBtdWx0aXBsZSBvZiBtaWxsaXNlY29uZHMgKi8KLSAgaWYgKHRpbWVvdXQgJSAxMDAwMDAwKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgR3N0UG9sbE1vZGUKLWNob29zZV9tb2RlIChHc3RQb2xsICogc2V0LCBHc3RDbG9ja1RpbWUgdGltZW91dCkKLXsKLSAgR3N0UG9sbE1vZGUgbW9kZTsKLQotICBpZiAoc2V0LT5tb2RlID09IEdTVF9QT0xMX01PREVfQVVUTykgewotI2lmZGVmIEhBVkVfUFBPTEwKLSAgICBtb2RlID0gR1NUX1BPTExfTU9ERV9QUE9MTDsKLSNlbGlmIGRlZmluZWQoSEFWRV9QT0xMKQotICAgIGlmICghc2VsZWN0YWJsZV9mZHMgKHNldCkgfHwgcG9sbGFibGVfdGltZW91dCAodGltZW91dCkpIHsKLSAgICAgIG1vZGUgPSBHU1RfUE9MTF9NT0RFX1BPTEw7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBIQVZFX1BTRUxFQ1QKLSAgICAgIG1vZGUgPSBHU1RfUE9MTF9NT0RFX1BTRUxFQ1Q7Ci0jZWxzZQotICAgICAgbW9kZSA9IEdTVF9QT0xMX01PREVfU0VMRUNUOwotI2VuZGlmCi0gICAgfQotI2VsaWYgZGVmaW5lZChIQVZFX1BTRUxFQ1QpCi0gICAgbW9kZSA9IEdTVF9QT0xMX01PREVfUFNFTEVDVDsKLSNlbHNlCi0gICAgbW9kZSA9IEdTVF9QT0xMX01PREVfU0VMRUNUOwotI2VuZGlmCi0gIH0gZWxzZSB7Ci0gICAgbW9kZSA9IHNldC0+bW9kZTsKLSAgfQotICByZXR1cm4gbW9kZTsKLX0KLQotI2lmbmRlZiBHX09TX1dJTjMyCi1zdGF0aWMgZ2ludAotcG9sbGZkX3RvX2ZkX3NldCAoR3N0UG9sbCAqIHNldCwgZmRfc2V0ICogcmVhZGZkcywgZmRfc2V0ICogd3JpdGVmZHMsCi0gICAgZmRfc2V0ICogZXJyb3JmZHMpCi17Ci0gIGdpbnQgbWF4X2ZkID0gLTE7Ci0gIGd1aW50IGk7Ci0KLSAgRkRfWkVSTyAocmVhZGZkcyk7Ci0gIEZEX1pFUk8gKHdyaXRlZmRzKTsKLSAgRkRfWkVSTyAoZXJyb3JmZHMpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNldC0+bG9jayk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHNldC0+YWN0aXZlX2Zkcy0+bGVuOyBpKyspIHsKLSAgICBzdHJ1Y3QgcG9sbGZkICpwZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5mZHMsIHN0cnVjdCBwb2xsZmQsIGkpOwotCi0gICAgaWYgKHBmZC0+ZmQgPCBGRF9TRVRTSVpFKSB7Ci0gICAgICBpZiAocGZkLT5ldmVudHMgJiBQT0xMSU4pCi0gICAgICAgIEZEX1NFVCAocGZkLT5mZCwgcmVhZGZkcyk7Ci0gICAgICBpZiAocGZkLT5ldmVudHMgJiBQT0xMT1VUKQotICAgICAgICBGRF9TRVQgKHBmZC0+ZmQsIHdyaXRlZmRzKTsKLSAgICAgIGlmIChwZmQtPmV2ZW50cykKLSAgICAgICAgRkRfU0VUIChwZmQtPmZkLCBlcnJvcmZkcyk7Ci0gICAgICBpZiAocGZkLT5mZCA+IG1heF9mZCAmJiAocGZkLT5ldmVudHMgJiAoUE9MTElOIHwgUE9MTE9VVCkpKQotICAgICAgICBtYXhfZmQgPSBwZmQtPmZkOwotICAgIH0KLSAgfQotCi0gIGdfbXV0ZXhfdW5sb2NrICgmc2V0LT5sb2NrKTsKLQotICByZXR1cm4gbWF4X2ZkOwotfQotCi1zdGF0aWMgdm9pZAotZmRfc2V0X3RvX3BvbGxmZCAoR3N0UG9sbCAqIHNldCwgZmRfc2V0ICogcmVhZGZkcywgZmRfc2V0ICogd3JpdGVmZHMsCi0gICAgZmRfc2V0ICogZXJyb3JmZHMpCi17Ci0gIGd1aW50IGk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2V0LT5sb2NrKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgc2V0LT5hY3RpdmVfZmRzLT5sZW47IGkrKykgewotICAgIHN0cnVjdCBwb2xsZmQgKnBmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIHN0cnVjdCBwb2xsZmQsIGkpOwotCi0gICAgaWYgKHBmZC0+ZmQgPCBGRF9TRVRTSVpFKSB7Ci0gICAgICBwZmQtPnJldmVudHMgPSAwOwotICAgICAgaWYgKEZEX0lTU0VUIChwZmQtPmZkLCByZWFkZmRzKSkKLSAgICAgICAgcGZkLT5yZXZlbnRzIHw9IFBPTExJTjsKLSAgICAgIGlmIChGRF9JU1NFVCAocGZkLT5mZCwgd3JpdGVmZHMpKQotICAgICAgICBwZmQtPnJldmVudHMgfD0gUE9MTE9VVDsKLSAgICAgIGlmIChGRF9JU1NFVCAocGZkLT5mZCwgZXJyb3JmZHMpKQotICAgICAgICBwZmQtPnJldmVudHMgfD0gUE9MTEVSUjsKLSAgICB9Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJnNldC0+bG9jayk7Ci19Ci0jZWxzZSAvKiBHX09TX1dJTjMyICovCi0vKgotICogVHJhbnNsYXRlIGVycm9ycyB0aHJvd24gYnkgdGhlIFdpbnNvY2sgQVBJIHVzZWQgYnkgR3N0UG9sbDoKLSAqICAgV1NBRXZlbnRTZWxlY3QsIFdTQVdhaXRGb3JNdWx0aXBsZUV2ZW50cyBhbmQgV1NBRW51bU5ldHdvcmtFdmVudHMKLSAqLwotc3RhdGljIGdpbnQKLWdzdF9wb2xsX3dpbnNvY2tfZXJyb3JfdG9fZXJybm8gKERXT1JEIGxhc3RfZXJyb3IpCi17Ci0gIHN3aXRjaCAobGFzdF9lcnJvcikgewotICAgIGNhc2UgV1NBX0lOVkFMSURfSEFORExFOgotICAgIGNhc2UgV1NBRUlOVkFMOgotICAgIGNhc2UgV1NBRU5PVFNPQ0s6Ci0gICAgICByZXR1cm4gRUJBREY7Ci0KLSAgICBjYXNlIFdTQV9OT1RfRU5PVUdIX01FTU9SWToKLSAgICAgIHJldHVybiBFTk9NRU07Ci0KLSAgICAgIC8qCi0gICAgICAgKiBBbnl0aGluZyBlbHNlLCBpbmNsdWRpbmc6Ci0gICAgICAgKiAgIFdTQV9JTlZBTElEX1BBUkFNRVRFUiwgV1NBRUZBVUxULCBXU0FFSU5QUk9HUkVTUywgV1NBRU5FVERPV04sCi0gICAgICAgKiAgIFdTQU5PVElOSVRJQUxJU0VECi0gICAgICAgKi8KLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BvbGxfZnJlZV93aW5zb2NrX2V2ZW50IChHc3RQb2xsICogc2V0LCBnaW50IGlkeCkKLXsKLSAgV2luc29ja0ZkICp3ZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5mZHMsIFdpbnNvY2tGZCwgaWR4KTsKLSAgSEFORExFIGV2ZW50ID0gZ19hcnJheV9pbmRleCAoc2V0LT5ldmVudHMsIEhBTkRMRSwgaWR4KTsKLQotICBXU0FFdmVudFNlbGVjdCAod2ZkLT5mZCwgZXZlbnQsIDApOwotICBDbG9zZUhhbmRsZSAoZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BvbGxfdXBkYXRlX3dpbnNvY2tfZXZlbnRfbWFzayAoR3N0UG9sbCAqIHNldCwgZ2ludCBpZHgsIGdsb25nIGZsYWdzLAotICAgIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgV2luc29ja0ZkICp3ZmQ7Ci0KLSAgd2ZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+ZmRzLCBXaW5zb2NrRmQsIGlkeCk7Ci0KLSAgaWYgKGFjdGl2ZSkKLSAgICB3ZmQtPmV2ZW50X21hc2sgfD0gZmxhZ3M7Ci0gIGVsc2UKLSAgICB3ZmQtPmV2ZW50X21hc2sgJj0gfmZsYWdzOwotCi0gIC8qIHJlc2V0IGlnbm9yZWQgc3RhdGUgaWYgdGhlIG5ldyBtYXNrIGRvZXNuJ3Qgb3ZlcmxhcCBhdCBhbGwgKi8KLSAgaWYgKCh3ZmQtPmlnbm9yZWRfZXZlbnRfbWFzayAmIHdmZC0+ZXZlbnRfbWFzaykgPT0gMCkKLSAgICB3ZmQtPmlnbm9yZWRfZXZlbnRfbWFzayA9IDA7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BvbGxfcHJlcGFyZV93aW5zb2NrX2FjdGl2ZV9zZXRzIChHc3RQb2xsICogc2V0KQotewotICBndWludCBpOwotCi0gIGdfYXJyYXlfc2V0X3NpemUgKHNldC0+YWN0aXZlX2ZkcywgMCk7Ci0gIGdfYXJyYXlfc2V0X3NpemUgKHNldC0+YWN0aXZlX2Zkc19pZ25vcmVkLCAwKTsKLSAgZ19hcnJheV9zZXRfc2l6ZSAoc2V0LT5hY3RpdmVfZXZlbnRzLCAwKTsKLSAgZ19hcnJheV9hcHBlbmRfdmFsIChzZXQtPmFjdGl2ZV9ldmVudHMsIHNldC0+d2FrZXVwX2V2ZW50KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgc2V0LT5mZHMtPmxlbjsgaSsrKSB7Ci0gICAgV2luc29ja0ZkICp3ZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5mZHMsIFdpbnNvY2tGZCwgaSk7Ci0gICAgSEFORExFIGV2ZW50ID0gZ19hcnJheV9pbmRleCAoc2V0LT5ldmVudHMsIEhBTkRMRSwgaSk7Ci0KLSAgICBpZiAod2ZkLT5pZ25vcmVkX2V2ZW50X21hc2sgPT0gMCkgewotICAgICAgZ2ludCByZXQ7Ci0KLSAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoc2V0LT5hY3RpdmVfZmRzLCAqd2ZkKTsKLSAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoc2V0LT5hY3RpdmVfZXZlbnRzLCBldmVudCk7Ci0KLSAgICAgIHJldCA9IFdTQUV2ZW50U2VsZWN0ICh3ZmQtPmZkLCBldmVudCwgd2ZkLT5ldmVudF9tYXNrKTsKLSAgICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gMCkpIHsKLSAgICAgICAgZXJybm8gPSBnc3RfcG9sbF93aW5zb2NrX2Vycm9yX3RvX2Vycm5vIChXU0FHZXRMYXN0RXJyb3IgKCkpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoc2V0LT5hY3RpdmVfZmRzX2lnbm9yZWQsIHdmZCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfcG9sbF9jb2xsZWN0X3dpbnNvY2tfZXZlbnRzIChHc3RQb2xsICogc2V0KQotewotICBnaW50IHJlcywgaTsKLQotICAvKgotICAgKiBXZSBuZWVkIHRvIGNoZWNrIHdoaWNoIGV2ZW50cyBhcmUgc2lnbmFsZWQsIGFuZCBjYWxsCi0gICAqIFdTQUVudW1OZXR3b3JrRXZlbnRzIGZvciB0aG9zZSB0aGF0IGFyZSwgd2hpY2ggcmVzZXRzCi0gICAqIHRoZSBldmVudCBhbmQgY2xlYXJzIHRoZSBpbnRlcm5hbCBuZXR3b3JrIGV2ZW50IHJlY29yZHMuCi0gICAqLwotICByZXMgPSAwOwotICBmb3IgKGkgPSAwOyBpIDwgc2V0LT5hY3RpdmVfZmRzLT5sZW47IGkrKykgewotICAgIFdpbnNvY2tGZCAqd2ZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2ZkcywgV2luc29ja0ZkLCBpKTsKLSAgICBIQU5ETEUgZXZlbnQgPSBnX2FycmF5X2luZGV4IChzZXQtPmFjdGl2ZV9ldmVudHMsIEhBTkRMRSwgaSArIDEpOwotICAgIERXT1JEIHdhaXRfcmV0OwotCi0gICAgd2FpdF9yZXQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChldmVudCwgMCk7Ci0gICAgaWYgKHdhaXRfcmV0ID09IFdBSVRfT0JKRUNUXzApIHsKLSAgICAgIGdpbnQgZW51bV9yZXQgPSBXU0FFbnVtTmV0d29ya0V2ZW50cyAod2ZkLT5mZCwgZXZlbnQsICZ3ZmQtPmV2ZW50cyk7Ci0KLSAgICAgIGlmIChHX1VOTElLRUxZIChlbnVtX3JldCAhPSAwKSkgewotICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgZXJybm8gPSBnc3RfcG9sbF93aW5zb2NrX2Vycm9yX3RvX2Vycm5vIChXU0FHZXRMYXN0RXJyb3IgKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgcmVzKys7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGNsZWFyIGFueSBwcmV2aW91c2x5IHN0b3JlZCByZXN1bHQgKi8KLSAgICAgIG1lbXNldCAoJndmZC0+ZXZlbnRzLCAwLCBzaXplb2YgKHdmZC0+ZXZlbnRzKSk7Ci0gICAgfQotICB9Ci0KLSAgLyogSWYgYWxsIHdlbnQgd2VsbCB3ZSBhbHNvIG5lZWQgdG8gcmVzZXQgdGhlIGlnbm9yZWQgZmRzLiAqLwotICBpZiAocmVzID49IDApIHsKLSAgICByZXMgKz0gc2V0LT5hY3RpdmVfZmRzX2lnbm9yZWQtPmxlbjsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBzZXQtPmFjdGl2ZV9mZHNfaWdub3JlZC0+bGVuOyBpKyspIHsKLSAgICAgIFdpbnNvY2tGZCAqd2ZkID0gZ19hcnJheV9pbmRleCAoc2V0LT5hY3RpdmVfZmRzX2lnbm9yZWQsIFdpbnNvY2tGZCAqLCBpKTsKLQotICAgICAgd2ZkLT5pZ25vcmVkX2V2ZW50X21hc2sgPSAwOwotICAgIH0KLQotICAgIGdfYXJyYXlfc2V0X3NpemUgKHNldC0+YWN0aXZlX2Zkc19pZ25vcmVkLCAwKTsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBnc3RfcG9sbF9uZXc6IChza2lwKQotICogQGNvbnRyb2xsYWJsZTogd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY29udHJvbCBhIHdhaXQuCi0gKgotICogQ3JlYXRlIGEgbmV3IGZpbGUgZGVzY3JpcHRvciBzZXQuIElmIEBjb250cm9sbGFibGUsIGl0Ci0gKiBpcyBwb3NzaWJsZSB0byByZXN0YXJ0IG9yIGZsdXNoIGEgY2FsbCB0byBnc3RfcG9sbF93YWl0KCkgd2l0aAotICogZ3N0X3BvbGxfcmVzdGFydCgpIGFuZCBnc3RfcG9sbF9zZXRfZmx1c2hpbmcoKSByZXNwZWN0aXZlbHkuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3BvbGxfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhIG5ldyAjR3N0UG9sbCwgb3IgJU5VTEwgaW4KLSAqICAgICBjYXNlIG9mIGFuIGVycm9yLiAgRnJlZSB3aXRoIGdzdF9wb2xsX2ZyZWUoKS4KLSAqLwotR3N0UG9sbCAqCi1nc3RfcG9sbF9uZXcgKGdib29sZWFuIGNvbnRyb2xsYWJsZSkKLXsKLSAgR3N0UG9sbCAqbnNldDsKLQotICBuc2V0ID0gZ19zbGljZV9uZXcwIChHc3RQb2xsKTsKLSAgR1NUX0RFQlVHICgiJXA6IG5ldyBjb250cm9sbGFibGUgOiAlZCIsIG5zZXQsIGNvbnRyb2xsYWJsZSk7Ci0gIGdfbXV0ZXhfaW5pdCAoJm5zZXQtPmxvY2spOwotI2lmbmRlZiBHX09TX1dJTjMyCi0gIG5zZXQtPm1vZGUgPSBHU1RfUE9MTF9NT0RFX0FVVE87Ci0gIG5zZXQtPmZkcyA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoc3RydWN0IHBvbGxmZCkpOwotICBuc2V0LT5hY3RpdmVfZmRzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChzdHJ1Y3QgcG9sbGZkKSk7Ci0gIG5zZXQtPmNvbnRyb2xfcmVhZF9mZC5mZCA9IC0xOwotICBuc2V0LT5jb250cm9sX3dyaXRlX2ZkLmZkID0gLTE7Ci0gIHsKLSAgICBnaW50IGNvbnRyb2xfc29ja1syXTsKLQotICAgIGlmIChzb2NrZXRwYWlyIChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgY29udHJvbF9zb2NrKSA8IDApCi0gICAgICBnb3RvIG5vX3NvY2tldF9wYWlyOwotCi0gICAgbnNldC0+Y29udHJvbF9yZWFkX2ZkLmZkID0gY29udHJvbF9zb2NrWzBdOwotICAgIG5zZXQtPmNvbnRyb2xfd3JpdGVfZmQuZmQgPSBjb250cm9sX3NvY2tbMV07Ci0KLSAgICBnc3RfcG9sbF9hZGRfZmRfdW5sb2NrZWQgKG5zZXQsICZuc2V0LT5jb250cm9sX3JlYWRfZmQpOwotICAgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkX3VubG9ja2VkIChuc2V0LCAmbnNldC0+Y29udHJvbF9yZWFkX2ZkLCBUUlVFKTsKLSAgfQotI2Vsc2UKLSAgbnNldC0+bW9kZSA9IEdTVF9QT0xMX01PREVfV0lORE9XUzsKLSAgbnNldC0+ZmRzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChXaW5zb2NrRmQpKTsKLSAgbnNldC0+YWN0aXZlX2ZkcyA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoV2luc29ja0ZkKSk7Ci0gIG5zZXQtPmFjdGl2ZV9mZHNfaWdub3JlZCA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoV2luc29ja0ZkICopKTsKLSAgbnNldC0+ZXZlbnRzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChIQU5ETEUpKTsKLSAgbnNldC0+YWN0aXZlX2V2ZW50cyA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoSEFORExFKSk7Ci0KLSAgbnNldC0+d2FrZXVwX2V2ZW50ID0gQ3JlYXRlRXZlbnQgKE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKTsKLSNlbmRpZgotCi0gIC8qIGVuc3VyZSAocmUpYnVpbGQsIHRob3VnaCBhbHJlYWR5IHNuZWFraWx5IHNldCBpbiBub24td2luZG93cyBjYXNlICovCi0gIE1BUktfUkVCVUlMRCAobnNldCk7Ci0KLSAgbnNldC0+Y29udHJvbGxhYmxlID0gY29udHJvbGxhYmxlOwotICBuc2V0LT5jb250cm9sX3BlbmRpbmcgPSAwOwotCi0gIHJldHVybiBuc2V0OwotCi0gIC8qIEVSUk9SUyAqLwotI2lmbmRlZiBHX09TX1dJTjMyCi1ub19zb2NrZXRfcGFpcjoKLSAgewotICAgIEdTVF9XQVJOSU5HICgiJXA6IGNhbid0IGNyZWF0ZSBzb2NrZXQgcGFpciAhIiwgbnNldCk7Ci0gICAgZ3N0X3BvbGxfZnJlZSAobnNldCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSNlbmRpZgotfQotCi0vKioKLSAqIGdzdF9wb2xsX25ld190aW1lcjogKHNraXApCi0gKgotICogQ3JlYXRlIGEgbmV3IHBvbGwgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNjaGVkdWxpbmcgY2FuY2VsbGFibGUKLSAqIHRpbWVvdXRzLgotICoKLSAqIEEgdGltZW91dCBpcyBwZXJmb3JtZWQgd2l0aCBnc3RfcG9sbF93YWl0KCkuIE11bHRpcGxlIHRpbWVvdXRzIGNhbiBiZQotICogcGVyZm9ybWVkIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIAotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9wb2xsX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSBuZXcgI0dzdFBvbGwsIG9yICVOVUxMIGluCi0gKiAgICAgY2FzZSBvZiBhbiBlcnJvci4gIEZyZWUgd2l0aCBnc3RfcG9sbF9mcmVlKCkuCi0gKi8KLUdzdFBvbGwgKgotZ3N0X3BvbGxfbmV3X3RpbWVyICh2b2lkKQotewotICBHc3RQb2xsICpwb2xsOwotCi0gIC8qIG1ha2UgYSBuZXcgY29udHJvbGxhYmxlIHBvbGwgc2V0ICovCi0gIGlmICghKHBvbGwgPSBnc3RfcG9sbF9uZXcgKFRSVUUpKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogd2UgYXJlIGEgdGltZXIgKi8KLSAgcG9sbC0+dGltZXIgPSBUUlVFOwotCi1kb25lOgotICByZXR1cm4gcG9sbDsKLX0KLQotLyoqCi0gKiBnc3RfcG9sbF9mcmVlOgotICogQHNldDogKHRyYW5zZmVyIGZ1bGwpOiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCi0gKgotICogRnJlZSBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCi0gKi8KLXZvaWQKLWdzdF9wb2xsX2ZyZWUgKEdzdFBvbGwgKiBzZXQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHNldCAhPSBOVUxMKTsKLQotICBHU1RfREVCVUcgKCIlcDogZnJlZWluZyIsIHNldCk7Ci0KLSNpZm5kZWYgR19PU19XSU4zMgotICBpZiAoc2V0LT5jb250cm9sX3dyaXRlX2ZkLmZkID49IDApCi0gICAgY2xvc2UgKHNldC0+Y29udHJvbF93cml0ZV9mZC5mZCk7Ci0gIGlmIChzZXQtPmNvbnRyb2xfcmVhZF9mZC5mZCA+PSAwKQotICAgIGNsb3NlIChzZXQtPmNvbnRyb2xfcmVhZF9mZC5mZCk7Ci0jZWxzZQotICBDbG9zZUhhbmRsZSAoc2V0LT53YWtldXBfZXZlbnQpOwotCi0gIHsKLSAgICBndWludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHNldC0+ZXZlbnRzLT5sZW47IGkrKykKLSAgICAgIGdzdF9wb2xsX2ZyZWVfd2luc29ja19ldmVudCAoc2V0LCBpKTsKLSAgfQotCi0gIGdfYXJyYXlfZnJlZSAoc2V0LT5hY3RpdmVfZXZlbnRzLCBUUlVFKTsKLSAgZ19hcnJheV9mcmVlIChzZXQtPmV2ZW50cywgVFJVRSk7Ci0gIGdfYXJyYXlfZnJlZSAoc2V0LT5hY3RpdmVfZmRzX2lnbm9yZWQsIFRSVUUpOwotI2VuZGlmCi0KLSAgZ19hcnJheV9mcmVlIChzZXQtPmFjdGl2ZV9mZHMsIFRSVUUpOwotICBnX2FycmF5X2ZyZWUgKHNldC0+ZmRzLCBUUlVFKTsKLSAgZ19tdXRleF9jbGVhciAoJnNldC0+bG9jayk7Ci0gIGdfc2xpY2VfZnJlZSAoR3N0UG9sbCwgc2V0KTsKLX0KLQotLyoqCi0gKiBnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkOgotICogQHNldDogYSAjR3N0UG9sbAotICogQGZkOiBhICNHUG9sbEZECi0gKgotICogR2V0IGEgR1BvbGxGRCBmb3IgdGhlIHJlYWRpbmcgcGFydCBvZiB0aGUgY29udHJvbCBzb2NrZXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4KLSAqIGludGVncmF0aW5nIHdpdGggYSBHU291cmNlIGFuZCBHTWFpbkxvb3AuCi0gKi8KLXZvaWQKLWdzdF9wb2xsX2dldF9yZWFkX2dwb2xsZmQgKEdzdFBvbGwgKiBzZXQsIEdQb2xsRkQgKiBmZCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc2V0ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChmZCAhPSBOVUxMKTsKLQotI2lmbmRlZiBHX09TX1dJTjMyCi0gIGZkLT5mZCA9IHNldC0+Y29udHJvbF9yZWFkX2ZkLmZkOwotI2Vsc2UKLSNpZiBHTElCX1NJWkVPRl9WT0lEX1AgPT0gOAotICBmZC0+ZmQgPSAoZ2ludDY0KSBzZXQtPndha2V1cF9ldmVudDsKLSNlbHNlCi0gIGZkLT5mZCA9IChnaW50KSBzZXQtPndha2V1cF9ldmVudDsKLSNlbmRpZgotI2VuZGlmCi0gIGZkLT5ldmVudHMgPSBHX0lPX0lOIHwgR19JT19IVVAgfCBHX0lPX0VSUjsKLSAgZmQtPnJldmVudHMgPSAwOwotfQotCi0vKioKLSAqIGdzdF9wb2xsX2ZkX2luaXQ6Ci0gKiBAZmQ6IGEgI0dzdFBvbGxGRAotICoKLSAqIEluaXRpYWxpemVzIEBmZC4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGluaXRpYWxpemUgaXQgd2l0aAotICogI0dTVF9QT0xMX0ZEX0lOSVQuCi0gKi8KLXZvaWQKLWdzdF9wb2xsX2ZkX2luaXQgKEdzdFBvbGxGRCAqIGZkKQotewotICBnX3JldHVybl9pZl9mYWlsIChmZCAhPSBOVUxMKTsKLQotICBmZC0+ZmQgPSAtMTsKLSAgZmQtPmlkeCA9IC0xOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wb2xsX2FkZF9mZF91bmxvY2tlZCAoR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCi17Ci0gIGdpbnQgaWR4OwotCi0gIEdTVF9ERUJVRyAoIiVwOiBmZCAoZmQ6JWQsIGlkeDolZCkiLCBzZXQsIGZkLT5mZCwgZmQtPmlkeCk7Ci0KLSAgaWR4ID0gZmluZF9pbmRleCAoc2V0LT5mZHMsIGZkKTsKLSAgaWYgKGlkeCA8IDApIHsKLSNpZm5kZWYgR19PU19XSU4zMgotICAgIHN0cnVjdCBwb2xsZmQgbmZkOwotCi0gICAgbmZkLmZkID0gZmQtPmZkOwotICAgIG5mZC5ldmVudHMgPSBQT0xMRVJSIHwgUE9MTE5WQUwgfCBQT0xMSFVQOwotICAgIG5mZC5yZXZlbnRzID0gMDsKLQotICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoc2V0LT5mZHMsIG5mZCk7Ci0KLSAgICBmZC0+aWR4ID0gc2V0LT5mZHMtPmxlbiAtIDE7Ci0jZWxzZQotICAgIFdpbnNvY2tGZCB3ZmQ7Ci0gICAgSEFORExFIGV2ZW50OwotCi0gICAgd2ZkLmZkID0gZmQtPmZkOwotICAgIHdmZC5ldmVudF9tYXNrID0gRkRfQ0xPU0U7Ci0gICAgbWVtc2V0ICgmd2ZkLmV2ZW50cywgMCwgc2l6ZW9mICh3ZmQuZXZlbnRzKSk7Ci0gICAgd2ZkLmlnbm9yZWRfZXZlbnRfbWFzayA9IDA7Ci0gICAgZXZlbnQgPSBXU0FDcmVhdGVFdmVudCAoKTsKLQotICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoc2V0LT5mZHMsIHdmZCk7Ci0gICAgZ19hcnJheV9hcHBlbmRfdmFsIChzZXQtPmV2ZW50cywgZXZlbnQpOwotCi0gICAgZmQtPmlkeCA9IHNldC0+ZmRzLT5sZW4gLSAxOwotI2VuZGlmCi0gICAgTUFSS19SRUJVSUxEIChzZXQpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgiJXA6IGZkIGFscmVhZHkgYWRkZWQgISIsIHNldCk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfcG9sbF9hZGRfZmQ6Ci0gKiBAc2V0OiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCi0gKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yLgotICoKLSAqIEFkZCBhIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIHNldC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wb2xsX2FkZF9mZCAoR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCi17Ci0gIGdib29sZWFuIHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkLT5mZCA+PSAwLCBGQUxTRSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2V0LT5sb2NrKTsKLQotICByZXQgPSBnc3RfcG9sbF9hZGRfZmRfdW5sb2NrZWQgKHNldCwgZmQpOwotCi0gIGdfbXV0ZXhfdW5sb2NrICgmc2V0LT5sb2NrKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9wb2xsX3JlbW92ZV9mZDoKLSAqIEBzZXQ6IGEgZmlsZSBkZXNjcmlwdG9yIHNldC4KLSAqIEBmZDogYSBmaWxlIGRlc2NyaXB0b3IuCi0gKgotICogUmVtb3ZlIGEgZmlsZSBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgZnJvbSB0aGUgc2V0LgotICovCi1nYm9vbGVhbgotZ3N0X3BvbGxfcmVtb3ZlX2ZkIChHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCkKLXsKLSAgZ2ludCBpZHg7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZC0+ZmQgPj0gMCwgRkFMU0UpOwotCi0KLSAgR1NUX0RFQlVHICgiJXA6IGZkIChmZDolZCwgaWR4OiVkKSIsIHNldCwgZmQtPmZkLCBmZC0+aWR4KTsKLQotICBnX211dGV4X2xvY2sgKCZzZXQtPmxvY2spOwotCi0gIC8qIGdldCB0aGUgaW5kZXgsIC0xIGlzIGFuIGZkIHRoYXQgaXMgbm90IGFkZGVkICovCi0gIGlkeCA9IGZpbmRfaW5kZXggKHNldC0+ZmRzLCBmZCk7Ci0gIGlmIChpZHggPj0gMCkgewotI2lmZGVmIEdfT1NfV0lOMzIKLSAgICBnc3RfcG9sbF9mcmVlX3dpbnNvY2tfZXZlbnQgKHNldCwgaWR4KTsKLSAgICBnX2FycmF5X3JlbW92ZV9pbmRleF9mYXN0IChzZXQtPmV2ZW50cywgaWR4KTsKLSNlbmRpZgotCi0gICAgLyogcmVtb3ZlIHRoZSBmZCBhdCBpbmRleCwgd2UgdXNlIF9yZW1vdmVfaW5kZXhfZmFzdCwgd2hpY2ggY29waWVzIHRoZSBsYXN0Ci0gICAgICogZWxlbWVudCBvZiB0aGUgYXJyYXkgdG8gdGhlIGZyZWVkIGluZGV4ICovCi0gICAgZ19hcnJheV9yZW1vdmVfaW5kZXhfZmFzdCAoc2V0LT5mZHMsIGlkeCk7Ci0KLSAgICAvKiBtYXJrIGZkIGFzIHJlbW92ZWQgYnkgc2V0dGluZyB0aGUgaW5kZXggdG8gLTEgKi8KLSAgICBmZC0+aWR4ID0gLTE7Ci0gICAgTUFSS19SRUJVSUxEIChzZXQpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgiJXA6IGNvdWxkbid0IGZpbmQgZmQgISIsIHNldCk7Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJnNldC0+bG9jayk7Ci0KLSAgcmV0dXJuIGlkeCA+PSAwOwotfQotCi0vKioKLSAqIGdzdF9wb2xsX2ZkX2N0bF93cml0ZToKLSAqIEBzZXQ6IGEgZmlsZSBkZXNjcmlwdG9yIHNldC4KLSAqIEBmZDogYSBmaWxlIGRlc2NyaXB0b3IuCi0gKiBAYWN0aXZlOiBhIG5ldyBzdGF0dXMuCi0gKgotICogQ29udHJvbCB3aGV0aGVyIHRoZSBkZXNjcmlwdG9yIEBmZCBpbiBAc2V0IHdpbGwgYmUgbW9uaXRvcmVkIGZvcgotICogd3JpdGFiaWxpdHkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGRlc2NyaXB0b3Igd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLgotICovCi1nYm9vbGVhbgotZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnaW50IGlkeDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkLT5mZCA+PSAwLCBGQUxTRSk7Ci0KLSAgR1NUX0RFQlVHICgiJXA6IGZkIChmZDolZCwgaWR4OiVkKSwgYWN0aXZlIDogJWQiLCBzZXQsCi0gICAgICBmZC0+ZmQsIGZkLT5pZHgsIGFjdGl2ZSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2V0LT5sb2NrKTsKLQotICBpZHggPSBmaW5kX2luZGV4IChzZXQtPmZkcywgZmQpOwotICBpZiAoaWR4ID49IDApIHsKLSNpZm5kZWYgR19PU19XSU4zMgotICAgIHN0cnVjdCBwb2xsZmQgKnBmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmZkcywgc3RydWN0IHBvbGxmZCwgaWR4KTsKLQotICAgIGlmIChhY3RpdmUpCi0gICAgICBwZmQtPmV2ZW50cyB8PSBQT0xMT1VUOwotICAgIGVsc2UKLSAgICAgIHBmZC0+ZXZlbnRzICY9IH5QT0xMT1VUOwotCi0gICAgR1NUX0xPRyAoIiVwOiBwZmQtPmV2ZW50cyBub3cgJWQgKFBPTExPVVQ6JWQpIiwgc2V0LCBwZmQtPmV2ZW50cywgUE9MTE9VVCk7Ci0jZWxzZQotICAgIGdzdF9wb2xsX3VwZGF0ZV93aW5zb2NrX2V2ZW50X21hc2sgKHNldCwgaWR4LCBGRF9XUklURSB8IEZEX0NPTk5FQ1QsCi0gICAgICAgIGFjdGl2ZSk7Ci0jZW5kaWYKLSAgICBNQVJLX1JFQlVJTEQgKHNldCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkcgKCIlcDogY291bGRuJ3QgZmluZCBmZCAhIiwgc2V0KTsKLSAgfQotCi0gIGdfbXV0ZXhfdW5sb2NrICgmc2V0LT5sb2NrKTsKLQotICByZXR1cm4gaWR4ID49IDA7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BvbGxfZmRfY3RsX3JlYWRfdW5sb2NrZWQgKEdzdFBvbGwgKiBzZXQsIEdzdFBvbGxGRCAqIGZkLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdpbnQgaWR4OwotCi0gIEdTVF9ERUJVRyAoIiVwOiBmZCAoZmQ6JWQsIGlkeDolZCksIGFjdGl2ZSA6ICVkIiwgc2V0LAotICAgICAgZmQtPmZkLCBmZC0+aWR4LCBhY3RpdmUpOwotCi0gIGlkeCA9IGZpbmRfaW5kZXggKHNldC0+ZmRzLCBmZCk7Ci0KLSAgaWYgKGlkeCA+PSAwKSB7Ci0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgICBzdHJ1Y3QgcG9sbGZkICpwZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5mZHMsIHN0cnVjdCBwb2xsZmQsIGlkeCk7Ci0KLSAgICBpZiAoYWN0aXZlKQotICAgICAgcGZkLT5ldmVudHMgfD0gKFBPTExJTiB8IFBPTExQUkkpOwotICAgIGVsc2UKLSAgICAgIHBmZC0+ZXZlbnRzICY9IH4oUE9MTElOIHwgUE9MTFBSSSk7Ci0jZWxzZQotICAgIGdzdF9wb2xsX3VwZGF0ZV93aW5zb2NrX2V2ZW50X21hc2sgKHNldCwgaWR4LCBGRF9SRUFEIHwgRkRfQUNDRVBULCBhY3RpdmUpOwotI2VuZGlmCi0gICAgTUFSS19SRUJVSUxEIChzZXQpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgiJXA6IGNvdWxkbid0IGZpbmQgZmQgISIsIHNldCk7Ci0gIH0KLQotICByZXR1cm4gaWR4ID49IDA7Ci19Ci0KLS8qKgotICogZ3N0X3BvbGxfZmRfY3RsX3JlYWQ6Ci0gKiBAc2V0OiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCi0gKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yLgotICogQGFjdGl2ZTogYSBuZXcgc3RhdHVzLgotICoKLSAqIENvbnRyb2wgd2hldGhlciB0aGUgZGVzY3JpcHRvciBAZmQgaW4gQHNldCB3aWxsIGJlIG1vbml0b3JlZCBmb3IKLSAqIHJlYWRhYmlsaXR5LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBkZXNjcmlwdG9yIHdhcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wb2xsX2ZkX2N0bF9yZWFkIChHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZC0+ZmQgPj0gMCwgRkFMU0UpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNldC0+bG9jayk7Ci0KLSAgcmV0ID0gZ3N0X3BvbGxfZmRfY3RsX3JlYWRfdW5sb2NrZWQgKHNldCwgZmQsIGFjdGl2ZSk7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZzZXQtPmxvY2spOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X3BvbGxfZmRfaWdub3JlZDoKLSAqIEBzZXQ6IGEgZmlsZSBkZXNjcmlwdG9yIHNldC4KLSAqIEBmZDogYSBmaWxlIGRlc2NyaXB0b3IuCi0gKgotICogTWFyayBAZmQgYXMgaWdub3JlZCBzbyB0aGF0IHRoZSBuZXh0IGNhbGwgdG8gZ3N0X3BvbGxfd2FpdCgpIHdpbGwgeWllbGQKLSAqIHRoZSBzYW1lIHJlc3VsdCBmb3IgQGZkIGFzIGxhc3QgdGltZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpZiBubwotICogb3BlcmF0aW9uIChyZWFkL3dyaXRlL3JlY3Yvc2VuZC9ldGMuKSB3aWxsIGJlIHBlcmZvcm1lZCBvbiBAZmQgYmVmb3JlCi0gKiB0aGUgbmV4dCBjYWxsIHRvIGdzdF9wb2xsX3dhaXQoKS4KLSAqCi0gKiBUaGUgcmVhc29uIHdoeSB0aGlzIGlzIG5lZWRlZCBpcyBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uCi0gKiBtaWdodCBub3QgYWxsb3cgcXVlcnlpbmcgdGhlIGZkIG1vcmUgdGhhbiBvbmNlIGJldHdlZW4gY2FsbHMgdG8gb25lIG9mCi0gKiB0aGUgcmUtZW5hYmxpbmcgb3BlcmF0aW9ucy4KLSAqLwotdm9pZAotZ3N0X3BvbGxfZmRfaWdub3JlZCAoR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCi17Ci0jaWZkZWYgR19PU19XSU4zMgotICBnaW50IGlkeDsKLQotICBnX3JldHVybl9pZl9mYWlsIChzZXQgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZkICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChmZC0+ZmQgPj0gMCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2V0LT5sb2NrKTsKLQotICBpZHggPSBmaW5kX2luZGV4IChzZXQtPmZkcywgZmQpOwotICBpZiAoaWR4ID49IDApIHsKLSAgICBXaW5zb2NrRmQgKndmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmZkcywgV2luc29ja0ZkLCBpZHgpOwotCi0gICAgd2ZkLT5pZ25vcmVkX2V2ZW50X21hc2sgPSB3ZmQtPmV2ZW50X21hc2sgJiAoRkRfUkVBRCB8IEZEX1dSSVRFKTsKLSAgICBNQVJLX1JFQlVJTEQgKHNldCk7Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJnNldC0+bG9jayk7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBnc3RfcG9sbF9mZF9oYXNfY2xvc2VkOgotICogQHNldDogYSBmaWxlIGRlc2NyaXB0b3Igc2V0LgotICogQGZkOiBhIGZpbGUgZGVzY3JpcHRvci4KLSAqCi0gKiBDaGVjayBpZiBAZmQgaW4gQHNldCBoYXMgY2xvc2VkIHRoZSBjb25uZWN0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfcG9sbF9mZF9oYXNfY2xvc2VkIChjb25zdCBHc3RQb2xsICogc2V0LCBHc3RQb2xsRkQgKiBmZCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIGdpbnQgaWR4OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZXQgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmQgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmQtPmZkID49IDAsIEZBTFNFKTsKLQotICBnX211dGV4X2xvY2sgKCYoKEdzdFBvbGwgKikgc2V0KS0+bG9jayk7Ci0KLSAgaWR4ID0gZmluZF9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBmZCk7Ci0gIGlmIChpZHggPj0gMCkgewotI2lmbmRlZiBHX09TX1dJTjMyCi0gICAgc3RydWN0IHBvbGxmZCAqcGZkID0gJmdfYXJyYXlfaW5kZXggKHNldC0+YWN0aXZlX2Zkcywgc3RydWN0IHBvbGxmZCwgaWR4KTsKLQotICAgIHJlcyA9IChwZmQtPnJldmVudHMgJiBQT0xMSFVQKSAhPSAwOwotI2Vsc2UKLSAgICBXaW5zb2NrRmQgKndmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIFdpbnNvY2tGZCwgaWR4KTsKLQotICAgIHJlcyA9ICh3ZmQtPmV2ZW50cy5sTmV0d29ya0V2ZW50cyAmIEZEX0NMT1NFKSAhPSAwOwotI2VuZGlmCi0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkcgKCIlcDogY291bGRuJ3QgZmluZCBmZCAhIiwgc2V0KTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJigoR3N0UG9sbCAqKSBzZXQpLT5sb2NrKTsKLQotICBHU1RfREVCVUcgKCIlcDogZmQgKGZkOiVkLCBpZHg6JWQpICVkIiwgc2V0LCBmZC0+ZmQsIGZkLT5pZHgsIHJlcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcG9sbF9mZF9oYXNfZXJyb3I6Ci0gKiBAc2V0OiBhIGZpbGUgZGVzY3JpcHRvciBzZXQuCi0gKiBAZmQ6IGEgZmlsZSBkZXNjcmlwdG9yLgotICoKLSAqIENoZWNrIGlmIEBmZCBpbiBAc2V0IGhhcyBhbiBlcnJvci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZGVzY3JpcHRvciBoYXMgYW4gZXJyb3IuCi0gKi8KLWdib29sZWFuCi1nc3RfcG9sbF9mZF9oYXNfZXJyb3IgKGNvbnN0IEdzdFBvbGwgKiBzZXQsIEdzdFBvbGxGRCAqIGZkKQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgZ2ludCBpZHg7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmZC0+ZmQgPj0gMCwgRkFMU0UpOwotCi0gIGdfbXV0ZXhfbG9jayAoJigoR3N0UG9sbCAqKSBzZXQpLT5sb2NrKTsKLQotICBpZHggPSBmaW5kX2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIGZkKTsKLSAgaWYgKGlkeCA+PSAwKSB7Ci0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgICBzdHJ1Y3QgcG9sbGZkICpwZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBzdHJ1Y3QgcG9sbGZkLCBpZHgpOwotCi0gICAgcmVzID0gKHBmZC0+cmV2ZW50cyAmIChQT0xMRVJSIHwgUE9MTE5WQUwpKSAhPSAwOwotI2Vsc2UKLSAgICBXaW5zb2NrRmQgKndmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIFdpbnNvY2tGZCwgaWR4KTsKLQotICAgIHJlcyA9ICh3ZmQtPmV2ZW50cy5pRXJyb3JDb2RlW0ZEX0NMT1NFX0JJVF0gIT0gMCkgfHwKLSAgICAgICAgKHdmZC0+ZXZlbnRzLmlFcnJvckNvZGVbRkRfUkVBRF9CSVRdICE9IDApIHx8Ci0gICAgICAgICh3ZmQtPmV2ZW50cy5pRXJyb3JDb2RlW0ZEX1dSSVRFX0JJVF0gIT0gMCkgfHwKLSAgICAgICAgKHdmZC0+ZXZlbnRzLmlFcnJvckNvZGVbRkRfQUNDRVBUX0JJVF0gIT0gMCkgfHwKLSAgICAgICAgKHdmZC0+ZXZlbnRzLmlFcnJvckNvZGVbRkRfQ09OTkVDVF9CSVRdICE9IDApOwotI2VuZGlmCi0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkcgKCIlcDogY291bGRuJ3QgZmluZCBmZCAhIiwgc2V0KTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJigoR3N0UG9sbCAqKSBzZXQpLT5sb2NrKTsKLQotICBHU1RfREVCVUcgKCIlcDogZmQgKGZkOiVkLCBpZHg6JWQpICVkIiwgc2V0LCBmZC0+ZmQsIGZkLT5pZHgsIHJlcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcG9sbF9mZF9jYW5fcmVhZF91bmxvY2tlZCAoY29uc3QgR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBnaW50IGlkeDsKLQotICBpZHggPSBmaW5kX2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIGZkKTsKLSAgaWYgKGlkeCA+PSAwKSB7Ci0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgICBzdHJ1Y3QgcG9sbGZkICpwZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBzdHJ1Y3QgcG9sbGZkLCBpZHgpOwotCi0gICAgcmVzID0gKHBmZC0+cmV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUFJJKSkgIT0gMDsKLSNlbHNlCi0gICAgV2luc29ja0ZkICp3ZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBXaW5zb2NrRmQsIGlkeCk7Ci0KLSAgICByZXMgPSAod2ZkLT5ldmVudHMubE5ldHdvcmtFdmVudHMgJiAoRkRfUkVBRCB8IEZEX0FDQ0VQVCkpICE9IDA7Ci0jZW5kaWYKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklORyAoIiVwOiBjb3VsZG4ndCBmaW5kIGZkICEiLCBzZXQpOwotICB9Ci0gIEdTVF9ERUJVRyAoIiVwOiBmZCAoZmQ6JWQsIGlkeDolZCkgJWQiLCBzZXQsIGZkLT5mZCwgZmQtPmlkeCwgcmVzKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9wb2xsX2ZkX2Nhbl9yZWFkOgotICogQHNldDogYSBmaWxlIGRlc2NyaXB0b3Igc2V0LgotICogQGZkOiBhIGZpbGUgZGVzY3JpcHRvci4KLSAqCi0gKiBDaGVjayBpZiBAZmQgaW4gQHNldCBoYXMgZGF0YSB0byBiZSByZWFkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBkZXNjcmlwdG9yIGhhcyBkYXRhIHRvIGJlIHJlYWQuCi0gKi8KLWdib29sZWFuCi1nc3RfcG9sbF9mZF9jYW5fcmVhZCAoY29uc3QgR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZXQgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmQgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmQtPmZkID49IDAsIEZBTFNFKTsKLQotICBnX211dGV4X2xvY2sgKCYoKEdzdFBvbGwgKikgc2V0KS0+bG9jayk7Ci0KLSAgcmVzID0gZ3N0X3BvbGxfZmRfY2FuX3JlYWRfdW5sb2NrZWQgKHNldCwgZmQpOwotCi0gIGdfbXV0ZXhfdW5sb2NrICgmKChHc3RQb2xsICopIHNldCktPmxvY2spOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X3BvbGxfZmRfY2FuX3dyaXRlOgotICogQHNldDogYSBmaWxlIGRlc2NyaXB0b3Igc2V0LgotICogQGZkOiBhIGZpbGUgZGVzY3JpcHRvci4KLSAqCi0gKiBDaGVjayBpZiBAZmQgaW4gQHNldCBjYW4gYmUgdXNlZCBmb3Igd3JpdGluZy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZGVzY3JpcHRvciBjYW4gYmUgdXNlZCBmb3Igd3JpdGluZy4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoY29uc3QgR3N0UG9sbCAqIHNldCwgR3N0UG9sbEZEICogZmQpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBnaW50IGlkeDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkLT5mZCA+PSAwLCBGQUxTRSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmKChHc3RQb2xsICopIHNldCktPmxvY2spOwotCi0gIGlkeCA9IGZpbmRfaW5kZXggKHNldC0+YWN0aXZlX2ZkcywgZmQpOwotICBpZiAoaWR4ID49IDApIHsKLSNpZm5kZWYgR19PU19XSU4zMgotICAgIHN0cnVjdCBwb2xsZmQgKnBmZCA9ICZnX2FycmF5X2luZGV4IChzZXQtPmFjdGl2ZV9mZHMsIHN0cnVjdCBwb2xsZmQsIGlkeCk7Ci0KLSAgICByZXMgPSAocGZkLT5yZXZlbnRzICYgUE9MTE9VVCkgIT0gMDsKLSNlbHNlCi0gICAgV2luc29ja0ZkICp3ZmQgPSAmZ19hcnJheV9pbmRleCAoc2V0LT5hY3RpdmVfZmRzLCBXaW5zb2NrRmQsIGlkeCk7Ci0KLSAgICByZXMgPSAod2ZkLT5ldmVudHMubE5ldHdvcmtFdmVudHMgJiBGRF9XUklURSkgIT0gMDsKLSNlbmRpZgotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgiJXA6IGNvdWxkbid0IGZpbmQgZmQgISIsIHNldCk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCYoKEdzdFBvbGwgKikgc2V0KS0+bG9jayk7Ci0KLSAgR1NUX0RFQlVHICgiJXA6IGZkIChmZDolZCwgaWR4OiVkKSAlZCIsIHNldCwgZmQtPmZkLCBmZC0+aWR4LCByZXMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X3BvbGxfd2FpdDoKLSAqIEBzZXQ6IGEgI0dzdFBvbGwuCi0gKiBAdGltZW91dDogYSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzLgotICoKLSAqIFdhaXQgZm9yIGFjdGl2aXR5IG9uIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGluIEBzZXQuIFRoaXMgZnVuY3Rpb24gd2FpdHMgdXAgdG8KLSAqIHRoZSBzcGVjaWZpZWQgQHRpbWVvdXQuICBBIHRpbWVvdXQgb2YgI0dTVF9DTE9DS19USU1FX05PTkUgd2FpdHMgZm9yZXZlci4KLSAqCi0gKiBGb3IgI0dzdFBvbGwgb2JqZWN0cyBjcmVhdGVkIHdpdGggZ3N0X3BvbGxfbmV3KCksIHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUKLSAqIGNhbGxlZCBmcm9tIGEgc2luZ2xlIHRocmVhZCBhdCBhIHRpbWUuICBJZiBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLAotICogLTEgd2lsbCBiZSByZXR1cm5lZCB3aXRoIGVycm5vIHNldCB0byBFUEVSTS4KLSAqCi0gKiBUaGlzIGlzIG5vdCB0cnVlIGZvciB0aW1lciAjR3N0UG9sbCBvYmplY3RzIGNyZWF0ZWQgd2l0aAotICogZ3N0X3BvbGxfbmV3X3RpbWVyKCksIHdoZXJlIGl0IGlzIGFsbG93ZWQgdG8gaGF2ZSBtdWx0aXBsZSB0aHJlYWRzIHdhaXRpbmcKLSAqIHNpbXVsdGFuZW91c2x5LgotICoKLSAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgI0dzdFBvbGxGRCBpbiBAc2V0IHRoYXQgaGF2ZSBhY3Rpdml0eSBvciAwIHdoZW4gbm8KLSAqIGFjdGl2aXR5IHdhcyBkZXRlY3RlZCBhZnRlciBAdGltZW91dC4gSWYgYW4gZXJyb3Igb2NjdXJzLCAtMSBpcyByZXR1cm5lZAotICogYW5kIGVycm5vIGlzIHNldC4KLSAqLwotZ2ludAotZ3N0X3BvbGxfd2FpdCAoR3N0UG9sbCAqIHNldCwgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpCi17Ci0gIGdib29sZWFuIHJlc3RhcnRpbmc7Ci0gIGdib29sZWFuIGlzX3RpbWVyOwotICBpbnQgcmVzOwotICBnaW50IG9sZF93YWl0aW5nOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZXQgIT0gTlVMTCwgLTEpOwotCi0gIEdTVF9ERUJVRyAoIiVwOiB0aW1lb3V0IDolIiBHU1RfVElNRV9GT1JNQVQsIHNldCwgR1NUX1RJTUVfQVJHUyAodGltZW91dCkpOwotCi0gIGlzX3RpbWVyID0gc2V0LT50aW1lcjsKLQotICAvKiBhZGQgb25lIG1vcmUgd2FpdGVyICovCi0gIG9sZF93YWl0aW5nID0gSU5DX1dBSVRJTkcgKHNldCk7Ci0KLSAgLyogd2UgY2Fubm90IHdhaXQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIHVubGVzcyB3ZSBhcmUgYSB0aW1lciAqLwotICBpZiAoR19VTkxJS0VMWSAob2xkX3dhaXRpbmcgPiAwICYmICFpc190aW1lcikpCi0gICAgZ290byBhbHJlYWR5X3dhaXRpbmc7Ci0KLSAgLyogZmx1c2hpbmcsIGV4aXQgaW1tZWRpYXRlbHkgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKElTX0ZMVVNISU5HIChzZXQpKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIGRvIHsKLSAgICBHc3RQb2xsTW9kZSBtb2RlOwotCi0gICAgcmVzID0gLTE7Ci0gICAgcmVzdGFydGluZyA9IEZBTFNFOwotCi0gICAgbW9kZSA9IGNob29zZV9tb2RlIChzZXQsIHRpbWVvdXQpOwotCi0gICAgaWYgKFRFU1RfUkVCVUlMRCAoc2V0KSkgewotICAgICAgZ19tdXRleF9sb2NrICgmc2V0LT5sb2NrKTsKLSNpZm5kZWYgR19PU19XSU4zMgotICAgICAgZ19hcnJheV9zZXRfc2l6ZSAoc2V0LT5hY3RpdmVfZmRzLCBzZXQtPmZkcy0+bGVuKTsKLSAgICAgIG1lbWNweSAoc2V0LT5hY3RpdmVfZmRzLT5kYXRhLCBzZXQtPmZkcy0+ZGF0YSwKLSAgICAgICAgICBzZXQtPmZkcy0+bGVuICogc2l6ZW9mIChzdHJ1Y3QgcG9sbGZkKSk7Ci0jZWxzZQotICAgICAgaWYgKCFnc3RfcG9sbF9wcmVwYXJlX3dpbnNvY2tfYWN0aXZlX3NldHMgKHNldCkpCi0gICAgICAgIGdvdG8gd2luc29ja19lcnJvcjsKLSNlbmRpZgotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZXQtPmxvY2spOwotICAgIH0KLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgY2FzZSBHU1RfUE9MTF9NT0RFX0FVVE86Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1BPTExfTU9ERV9QUE9MTDoKLSAgICAgIHsKLSNpZmRlZiBIQVZFX1BQT0xMCi0gICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKLSAgICAgICAgc3RydWN0IHRpbWVzcGVjICp0c3B0cjsKLQotICAgICAgICBpZiAodGltZW91dCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICAgICAgR1NUX1RJTUVfVE9fVElNRVNQRUMgKHRpbWVvdXQsIHRzKTsKLSAgICAgICAgICB0c3B0ciA9ICZ0czsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0c3B0ciA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXMgPQotICAgICAgICAgICAgcHBvbGwgKChzdHJ1Y3QgcG9sbGZkICopIHNldC0+YWN0aXZlX2Zkcy0+ZGF0YSwKLSAgICAgICAgICAgIHNldC0+YWN0aXZlX2Zkcy0+bGVuLCB0c3B0ciwgTlVMTCk7Ci0jZWxzZQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgZXJybm8gPSBFTk9TWVM7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9QT0xMX01PREVfUE9MTDoKLSAgICAgIHsKLSNpZmRlZiBIQVZFX1BPTEwKLSAgICAgICAgZ2ludCB0OwotCi0gICAgICAgIGlmICh0aW1lb3V0ICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgICAgICB0ID0gR1NUX1RJTUVfQVNfTVNFQ09ORFMgKHRpbWVvdXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHQgPSAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlcyA9Ci0gICAgICAgICAgICBwb2xsICgoc3RydWN0IHBvbGxmZCAqKSBzZXQtPmFjdGl2ZV9mZHMtPmRhdGEsCi0gICAgICAgICAgICBzZXQtPmFjdGl2ZV9mZHMtPmxlbiwgdCk7Ci0jZWxzZQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgZXJybm8gPSBFTk9TWVM7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9QT0xMX01PREVfUFNFTEVDVDoKLSNpZm5kZWYgSEFWRV9QU0VMRUNUCi0gICAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICBlcnJubyA9IEVOT1NZUzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0jZW5kaWYKLSAgICAgIGNhc2UgR1NUX1BPTExfTU9ERV9TRUxFQ1Q6Ci0gICAgICB7Ci0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgICAgICAgZmRfc2V0IHJlYWRmZHM7Ci0gICAgICAgIGZkX3NldCB3cml0ZWZkczsKLSAgICAgICAgZmRfc2V0IGVycm9yZmRzOwotICAgICAgICBnaW50IG1heF9mZDsKLQotICAgICAgICBtYXhfZmQgPSBwb2xsZmRfdG9fZmRfc2V0IChzZXQsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZlcnJvcmZkcyk7Ci0KLSAgICAgICAgaWYgKG1vZGUgPT0gR1NUX1BPTExfTU9ERV9TRUxFQ1QpIHsKLSAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdHZwdHI7Ci0KLSAgICAgICAgICBpZiAodGltZW91dCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICAgICAgICBHU1RfVElNRV9UT19USU1FVkFMICh0aW1lb3V0LCB0dik7Ci0gICAgICAgICAgICB0dnB0ciA9ICZ0djsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdHZwdHIgPSBOVUxMOwotICAgICAgICAgIH0KLQotICAgICAgICAgIEdTVF9ERUJVRyAoIiVwOiBDYWxsaW5nIHNlbGVjdCIsIHNldCk7Ci0gICAgICAgICAgcmVzID0gc2VsZWN0IChtYXhfZmQgKyAxLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXJyb3JmZHMsIHR2cHRyKTsKLSAgICAgICAgICBHU1RfREVCVUcgKCIlcDogQWZ0ZXIgc2VsZWN0LCByZXM6JWQiLCBzZXQsIHJlcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgSEFWRV9QU0VMRUNUCi0gICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOwotICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdHNwdHI7Ci0KLSAgICAgICAgICBpZiAodGltZW91dCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICAgICAgICBHU1RfVElNRV9UT19USU1FU1BFQyAodGltZW91dCwgdHMpOwotICAgICAgICAgICAgdHNwdHIgPSAmdHM7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRzcHRyID0gTlVMTDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBHU1RfREVCVUcgKCIlcDogQ2FsbGluZyBwc2VsZWN0Iiwgc2V0KTsKLSAgICAgICAgICByZXMgPQotICAgICAgICAgICAgICBwc2VsZWN0IChtYXhfZmQgKyAxLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXJyb3JmZHMsIHRzcHRyLCBOVUxMKTsKLSAgICAgICAgICBHU1RfREVCVUcgKCIlcDogQWZ0ZXIgcHNlbGVjdCwgcmVzOiVkIiwgc2V0LCByZXMpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzID49IDApIHsKLSAgICAgICAgICBmZF9zZXRfdG9fcG9sbGZkIChzZXQsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZlcnJvcmZkcyk7Ci0gICAgICAgIH0KLSNlbHNlIC8qIEdfT1NfV0lOMzIgKi8KLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgIGVycm5vID0gRU5PU1lTOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfUE9MTF9NT0RFX1dJTkRPV1M6Ci0gICAgICB7Ci0jaWZkZWYgR19PU19XSU4zMgotICAgICAgICBnaW50IGlnbm9yZV9jb3VudCA9IHNldC0+YWN0aXZlX2Zkc19pZ25vcmVkLT5sZW47Ci0gICAgICAgIERXT1JEIHQsIHdhaXRfcmV0OwotCi0gICAgICAgIGlmIChHX0xJS0VMWSAoaWdub3JlX2NvdW50ID09IDApKSB7Ci0gICAgICAgICAgaWYgKHRpbWVvdXQgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgICAgIHQgPSBHU1RfVElNRV9BU19NU0VDT05EUyAodGltZW91dCk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdCA9IElORklOSVRFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8qIGFscmVhZHkgb25lIG9yIG1vcmUgaWdub3JlZCBmZHMsIHNvIHdlIHF1aWNrbHkgc3dlZXAgdGhlIG90aGVycyAqLwotICAgICAgICAgIHQgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNldC0+YWN0aXZlX2V2ZW50cy0+bGVuICE9IDApIHsKLSAgICAgICAgICB3YWl0X3JldCA9IFdTQVdhaXRGb3JNdWx0aXBsZUV2ZW50cyAoc2V0LT5hY3RpdmVfZXZlbnRzLT5sZW4sCi0gICAgICAgICAgICAgIChIQU5ETEUgKikgc2V0LT5hY3RpdmVfZXZlbnRzLT5kYXRhLCBGQUxTRSwgdCwgRkFMU0UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHdhaXRfcmV0ID0gV1NBX1dBSVRfRkFJTEVEOwotICAgICAgICAgIFdTQVNldExhc3RFcnJvciAoV1NBX0lOVkFMSURfUEFSQU1FVEVSKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpZ25vcmVfY291bnQgPT0gMCAmJiB3YWl0X3JldCA9PSBXU0FfV0FJVF9USU1FT1VUKSB7Ci0gICAgICAgICAgcmVzID0gMDsKLSAgICAgICAgfSBlbHNlIGlmICh3YWl0X3JldCA9PSBXU0FfV0FJVF9GQUlMRUQpIHsKLSAgICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgICBlcnJubyA9IGdzdF9wb2xsX3dpbnNvY2tfZXJyb3JfdG9fZXJybm8gKFdTQUdldExhc3RFcnJvciAoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogdGhlIGZpcnN0IGVudHJ5IGlzIHRoZSB3YWtldXAgZXZlbnQgKi8KLSAgICAgICAgICBpZiAod2FpdF9yZXQgLSBXU0FfV0FJVF9FVkVOVF8wID49IDEpIHsKLSAgICAgICAgICAgIHJlcyA9IGdzdF9wb2xsX2NvbGxlY3Rfd2luc29ja19ldmVudHMgKHNldCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlcyA9IDE7ICAgICAgICAgICAgLyogd2FrZXVwIGV2ZW50ICovCi0gICAgICAgICAgfQotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgZXJybm8gPSBFTk9TWVM7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpc190aW1lcikgewotICAgICAgLyogQXBwbGljYXRpb25zIG5lZWRzIHRvIGNsZWFyIHRoZSBjb250cm9sIHNvY2tldCB0aGVtc2VsdmVzIGZvciB0aW1lcgotICAgICAgICogcG9sbHMuCi0gICAgICAgKiBGb3Igb3RoZXIgcG9sbHMsIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGNvbnRyb2wgc29ja2V0LiBJZiB0aGVyZSB3YXMgb25seQotICAgICAgICogb25lIHNvY2tldCB3aXRoIGFjdGl2aXR5IGFuZCBpdCB3YXMgdGhlIGNvbnRyb2wgc29ja2V0LCB3ZSBuZWVkIHRvCi0gICAgICAgKiByZXN0YXJ0ICovCi0gICAgICBpZiAocmVsZWFzZV9hbGxfd2FrZXVwIChzZXQpID4gMCAmJiByZXMgPT0gMSkKLSAgICAgICAgcmVzdGFydGluZyA9IFRSVUU7Ci0gICAgfQotCi0gICAgLyogd2UgZ290IHdva2VuIHVwIGFuZCB3ZSBhcmUgZmx1c2hpbmcsIHdlIG5lZWQgdG8gc3RvcCAqLwotICAgIGlmIChHX1VOTElLRUxZIChJU19GTFVTSElORyAoc2V0KSkpCi0gICAgICBnb3RvIGZsdXNoaW5nOwotCi0gIH0gd2hpbGUgKEdfVU5MSUtFTFkgKHJlc3RhcnRpbmcpKTsKLQotICBERUNfV0FJVElORyAoc2V0KTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotYWxyZWFkeV93YWl0aW5nOgotICB7Ci0gICAgR1NUX0xPRyAoIiVwOiB3ZSBhcmUgYWxyZWFkeSB3YWl0aW5nIiwgc2V0KTsKLSAgICBERUNfV0FJVElORyAoc2V0KTsKLSAgICBlcnJubyA9IEVQRVJNOwotICAgIHJldHVybiAtMTsKLSAgfQotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfTE9HICgiJXA6IHdlIGFyZSBmbHVzaGluZyIsIHNldCk7Ci0gICAgREVDX1dBSVRJTkcgKHNldCk7Ci0gICAgZXJybm8gPSBFQlVTWTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSNpZmRlZiBHX09TX1dJTjMyCi13aW5zb2NrX2Vycm9yOgotICB7Ci0gICAgR1NUX0xPRyAoIiVwOiB3aW5zb2NrIGVycm9yIiwgc2V0KTsKLSAgICBnX211dGV4X3VubG9jayAoJnNldC0+bG9jayk7Ci0gICAgREVDX1dBSVRJTkcgKHNldCk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBnc3RfcG9sbF9zZXRfY29udHJvbGxhYmxlOgotICogQHNldDogYSAjR3N0UG9sbC4KLSAqIEBjb250cm9sbGFibGU6IG5ldyBjb250cm9sbGFibGUgc3RhdGUuCi0gKgotICogV2hlbiBAY29udHJvbGxhYmxlIGlzICVUUlVFLCB0aGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBmdXR1cmUgY2FsbHMgdG8KLSAqIGdzdF9wb2xsX3dhaXQoKSB3aWxsIGJlIGFmZmVjdGVkIGJ5IGdzdF9wb2xsX3Jlc3RhcnQoKSBhbmQKLSAqIGdzdF9wb2xsX3NldF9mbHVzaGluZygpLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBmb3Igbm9uLXRpbWVyICNHc3RQb2xsIG9iamVjdHMgY3JlYXRlZCB3aXRoCi0gKiBnc3RfcG9sbF9uZXcoKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY29udHJvbGxhYmlsaXR5IG9mIEBzZXQgY291bGQgYmUgdXBkYXRlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wb2xsX3NldF9jb250cm9sbGFibGUgKEdzdFBvbGwgKiBzZXQsIGdib29sZWFuIGNvbnRyb2xsYWJsZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICghc2V0LT50aW1lciwgRkFMU0UpOwotCi0gIEdTVF9MT0cgKCIlcDogY29udHJvbGxhYmxlIDogJWQiLCBzZXQsIGNvbnRyb2xsYWJsZSk7Ci0KLSAgc2V0LT5jb250cm9sbGFibGUgPSBjb250cm9sbGFibGU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3BvbGxfcmVzdGFydDoKLSAqIEBzZXQ6IGEgI0dzdFBvbGwuCi0gKgotICogUmVzdGFydCBhbnkgZ3N0X3BvbGxfd2FpdCgpIHRoYXQgaXMgaW4gcHJvZ3Jlc3MuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5Ci0gKiB1c2VkIGFmdGVyIGFkZGluZyBvciByZW1vdmluZyBkZXNjcmlwdG9ycyB0byBAc2V0LgotICoKLSAqIElmIEBzZXQgaXMgbm90IGNvbnRyb2xsYWJsZSwgdGhlbiB0aGlzIGNhbGwgd2lsbCBoYXZlIG5vIGVmZmVjdC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgZm9yIG5vbi10aW1lciAjR3N0UG9sbCBvYmplY3RzIGNyZWF0ZWQgd2l0aAotICogZ3N0X3BvbGxfbmV3KCkuCi0gKi8KLXZvaWQKLWdzdF9wb2xsX3Jlc3RhcnQgKEdzdFBvbGwgKiBzZXQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHNldCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoIXNldC0+dGltZXIpOwotCi0gIGlmIChzZXQtPmNvbnRyb2xsYWJsZSAmJiBHRVRfV0FJVElORyAoc2V0KSA+IDApIHsKLSAgICAvKiB3ZSBhcmUgY29udHJvbGxhYmxlIGFuZCB3YWl0aW5nLCB3YWtlIHVwIHRoZSB3YWl0ZXIuIFRoZSBzb2NrZXQgd2lsbCBiZQotICAgICAqIGNsZWFyZWQgYnkgdGhlIF93YWl0KCkgdGhyZWFkIGFuZCB0aGUgcG9sbCB3aWxsIGJlIHJlc3RhcnRlZCAqLwotICAgIHJhaXNlX3dha2V1cCAoc2V0KTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9wb2xsX3NldF9mbHVzaGluZzoKLSAqIEBzZXQ6IGEgI0dzdFBvbGwuCi0gKiBAZmx1c2hpbmc6IG5ldyBmbHVzaGluZyBzdGF0ZS4KLSAqCi0gKiBXaGVuIEBmbHVzaGluZyBpcyAlVFJVRSwgdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgY3VycmVudCBhbmQgZnV0dXJlIGNhbGxzCi0gKiB0byBnc3RfcG9sbF93YWl0KCkgd2lsbCByZXR1cm4gLTEsIHdpdGggZXJybm8gc2V0IHRvIEVCVVNZLgotICoKLSAqIFVuc2V0dGluZyB0aGUgZmx1c2hpbmcgc3RhdGUgd2lsbCByZXN0b3JlIG5vcm1hbCBvcGVyYXRpb24gb2YgQHNldC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgZm9yIG5vbi10aW1lciAjR3N0UG9sbCBvYmplY3RzIGNyZWF0ZWQgd2l0aAotICogZ3N0X3BvbGxfbmV3KCkuCi0gKi8KLXZvaWQKLWdzdF9wb2xsX3NldF9mbHVzaGluZyAoR3N0UG9sbCAqIHNldCwgZ2Jvb2xlYW4gZmx1c2hpbmcpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHNldCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoIXNldC0+dGltZXIpOwotCi0gIEdTVF9MT0cgKCIlcDogZmx1c2hpbmc6ICVkIiwgc2V0LCBmbHVzaGluZyk7Ci0KLSAgLyogdXBkYXRlIHRoZSBuZXcgc3RhdGUgZmlyc3QgKi8KLSAgU0VUX0ZMVVNISU5HIChzZXQsIGZsdXNoaW5nKTsKLQotICBpZiAoZmx1c2hpbmcgJiYgc2V0LT5jb250cm9sbGFibGUgJiYgR0VUX1dBSVRJTkcgKHNldCkgPiAwKSB7Ci0gICAgLyogd2UgYXJlIGZsdXNoaW5nLCBjb250cm9sbGFibGUgYW5kIHdhaXRpbmcsIHdha2UgdXAgdGhlIHdhaXRlci4gV2hlbiB3ZQotICAgICAqIHN0b3AgdGhlIGZsdXNoaW5nIG9wZXJhdGlvbiB3ZSBkb24ndCBjbGVhciB0aGUgd2FrZXVwIGZkIGhlcmUsIHRoaXMgd2lsbAotICAgICAqIGhhcHBlbiBpbiB0aGUgX3dhaXQoKSB0aHJlYWQuICovCi0gICAgcmFpc2Vfd2FrZXVwIChzZXQpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3BvbGxfd3JpdGVfY29udHJvbDoKLSAqIEBzZXQ6IGEgI0dzdFBvbGwuCi0gKgotICogV3JpdGUgYSBieXRlIHRvIHRoZSBjb250cm9sIHNvY2tldCBvZiB0aGUgY29udHJvbGxhYmxlIEBzZXQuCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VmdWwgZm9yIHRpbWVyICNHc3RQb2xsIG9iamVjdHMgY3JlYXRlZCB3aXRoCi0gKiBnc3RfcG9sbF9uZXdfdGltZXIoKS4gCi0gKgotICogSXQgd2lsbCBtYWtlIGFueSBjdXJyZW50IGFuZCBmdXR1cmUgZ3N0X3BvbGxfd2FpdCgpIGZ1bmN0aW9uIHJldHVybiB3aXRoCi0gKiAxLCBtZWFuaW5nIHRoZSBjb250cm9sIHNvY2tldCBpcyBzZXQuIEFmdGVyIGFuIGVxdWFsIGFtb3VudCBvZiBjYWxscyB0bwotICogZ3N0X3BvbGxfcmVhZF9jb250cm9sKCkgaGF2ZSBiZWVuIHBlcmZvcm1lZCwgY2FsbHMgdG8gZ3N0X3BvbGxfd2FpdCgpIHdpbGwKLSAqIGJsb2NrIGFnYWluIHVudGlsIHRoZWlyIHRpbWVvdXQgZXhwaXJlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgZm9yIHRpbWVyICNHc3RQb2xsIG9iamVjdHMgY3JlYXRlZCB3aXRoCi0gKiBnc3RfcG9sbF9uZXdfdGltZXIoKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBvbiBzdWNjZXNzLiAlRkFMU0Ugd2hlbiB3aGVuIHRoZSBieXRlIGNvdWxkIG5vdCBiZSB3cml0dGVuLgotICogZXJybm8gY29udGFpbnMgdGhlIGRldGFpbGVkIGVycm9yIGNvZGUgYnV0IHdpbGwgbmV2ZXIgYmUgRUFHQUlOLCBFSU5UUiBvcgotICogRVdPVUxEQkxPQ0suICVGQUxTRSBhbHdheXMgc2lnbmFscyBhIGNyaXRpY2FsIGVycm9yLgotICovCi1nYm9vbGVhbgotZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAoR3N0UG9sbCAqIHNldCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZXQgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2V0LT50aW1lciwgRkFMU0UpOwotCi0gIHJlcyA9IHJhaXNlX3dha2V1cCAoc2V0KTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9wb2xsX3JlYWRfY29udHJvbDoKLSAqIEBzZXQ6IGEgI0dzdFBvbGwuCi0gKgotICogUmVhZCBhIGJ5dGUgZnJvbSB0aGUgY29udHJvbCBzb2NrZXQgb2YgdGhlIGNvbnRyb2xsYWJsZSBAc2V0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBmb3IgdGltZXIgI0dzdFBvbGwgb2JqZWN0cyBjcmVhdGVkIHdpdGgKLSAqIGdzdF9wb2xsX25ld190aW1lcigpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIG9uIHN1Y2Nlc3MuICVGQUxTRSB3aGVuIHdoZW4gdGhlcmUgd2FzIG5vIGJ5dGUgdG8gcmVhZCBvcgotICogcmVhZGluZyB0aGUgYnl0ZSBmYWlsZWQuIElmIHRoZXJlIHdhcyBubyBieXRlIHRvIHJlYWQsIGFuZCBvbmx5IHRoZW4sIGVycm5vCi0gKiB3aWxsIGNvbnRhaW4gRVdPVUxEQkxPQ0sgb3IgRUFHQUlOLiBGb3IgYWxsIG90aGVyIHZhbHVlcyBvZiBlcnJubyB0aGlzIGFsd2F5cyBzaWduYWxzIGEKLSAqIGNyaXRpY2FsIGVycm9yLgotICovCi1nYm9vbGVhbgotZ3N0X3BvbGxfcmVhZF9jb250cm9sIChHc3RQb2xsICogc2V0KQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNldCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZXQtPnRpbWVyLCBGQUxTRSk7Ci0KLSAgcmVzID0gcmVsZWFzZV93YWtldXAgKHNldCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3Rwb2xsLmggYi9nc3QvZ3N0cG9sbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjZkY2VhLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3Rwb2xsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0gKgotICogZ3N0cG9sbC5oOiBGaWxlIGRlc2NyaXB0b3Igc2V0Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9QT0xMX0hfXwotI2RlZmluZSBfX0dTVF9QT0xMX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Y2xvY2suaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKioKLSAqIEdzdFBvbGw6Ci0gKgotICogQSBzZXQgb2YgZmlsZS9uZXR3b3JrIGRlc2NyaXB0b3JzLgotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0UG9sbCBHc3RQb2xsOwotCi0vKioKLSAqIEdzdFBvbGxGRDoKLSAqIEBmZDogYSBmaWxlIGRlc2NyaXB0b3IKLSAqCi0gKiBBIGZpbGUgZGVzY3JpcHRvciBvYmplY3QuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgaW50IGZkOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBnaW50IGlkeDsKLX0gR3N0UG9sbEZEOwotCi0vKioKLSAqIEdTVF9QT0xMX0ZEX0lOSVQ6Ci0gKgotICogQSAjR3N0UG9sbEZEIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIG1hY3JvLCBiZWZvcmUgaXQgY2FuIGJlCi0gKiB1c2VkLiBUaGlzIG1hY3JvIGNhbiB1c2VkIGJlIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSwgYnV0IGl0IGNhbm5vdAotICogYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZS4gSW4gdGhhdCBjYXNlIHlvdSBoYXZlIHRvIHVzZQotICogZ3N0X3BvbGxfZmRfaW5pdCgpLgotICovCi0jZGVmaW5lIEdTVF9QT0xMX0ZEX0lOSVQgIHsgLTEsIC0xIH0KLQotR3N0UG9sbCogICAgICAgIGdzdF9wb2xsX25ldyAgICAgICAgICAgICAgKGdib29sZWFuIGNvbnRyb2xsYWJsZSkgR19HTlVDX01BTExPQzsKLUdzdFBvbGwqICAgICAgICBnc3RfcG9sbF9uZXdfdGltZXIgICAgICAgICh2b2lkKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9wb2xsX2ZyZWUgICAgICAgICAgICAgKEdzdFBvbGwgKnNldCk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkIChHc3RQb2xsICpzZXQsIEdQb2xsRkQgKmZkKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9wb2xsX2ZkX2luaXQgICAgICAgICAgKEdzdFBvbGxGRCAqZmQpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfYWRkX2ZkICAgICAgICAgICAoR3N0UG9sbCAqc2V0LCBHc3RQb2xsRkQgKmZkKTsKLWdib29sZWFuICAgICAgICBnc3RfcG9sbF9yZW1vdmVfZmQgICAgICAgIChHc3RQb2xsICpzZXQsIEdzdFBvbGxGRCAqZmQpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlICAgICAoR3N0UG9sbCAqc2V0LCBHc3RQb2xsRkQgKmZkLCBnYm9vbGVhbiBhY3RpdmUpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9wb2xsX2ZkX2N0bF9yZWFkICAgICAgKEdzdFBvbGwgKnNldCwgR3N0UG9sbEZEICpmZCwgZ2Jvb2xlYW4gYWN0aXZlKTsKLXZvaWQgICAgICAgICAgICBnc3RfcG9sbF9mZF9pZ25vcmVkICAgICAgIChHc3RQb2xsICpzZXQsIEdzdFBvbGxGRCAqZmQpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCAgICAoY29uc3QgR3N0UG9sbCAqc2V0LCBHc3RQb2xsRkQgKmZkKTsKLWdib29sZWFuICAgICAgICBnc3RfcG9sbF9mZF9oYXNfZXJyb3IgICAgIChjb25zdCBHc3RQb2xsICpzZXQsIEdzdFBvbGxGRCAqZmQpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9wb2xsX2ZkX2Nhbl9yZWFkICAgICAgKGNvbnN0IEdzdFBvbGwgKnNldCwgR3N0UG9sbEZEICpmZCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfZmRfY2FuX3dyaXRlICAgICAoY29uc3QgR3N0UG9sbCAqc2V0LCBHc3RQb2xsRkQgKmZkKTsKLQotZ2ludCAgICAgICAgICAgIGdzdF9wb2xsX3dhaXQgICAgICAgICAgICAgKEdzdFBvbGwgKnNldCwgR3N0Q2xvY2tUaW1lIHRpbWVvdXQpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3BvbGxfc2V0X2NvbnRyb2xsYWJsZSAoR3N0UG9sbCAqc2V0LCBnYm9vbGVhbiBjb250cm9sbGFibGUpOwotdm9pZCAgICAgICAgICAgIGdzdF9wb2xsX3Jlc3RhcnQgICAgICAgICAgKEdzdFBvbGwgKnNldCk7Ci12b2lkICAgICAgICAgICAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nICAgICAoR3N0UG9sbCAqc2V0LCBnYm9vbGVhbiBmbHVzaGluZyk7Ci0KLWdib29sZWFuICAgICAgICBnc3RfcG9sbF93cml0ZV9jb250cm9sICAgIChHc3RQb2xsICpzZXQpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9wb2xsX3JlYWRfY29udHJvbCAgICAgKEdzdFBvbGwgKnNldCkgR19HTlVDX1dBUk5fVU5VU0VEX1JFU1VMVDsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1BPTExfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0cHJlc2V0LmMgYi9nc3QvZ3N0cHJlc2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYzI4MDEuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHByZXNldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0cHJlc2V0LmM6IGhlbHBlciBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgcHJlc2V0cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046Z3N0cHJlc2V0Ci0gKiBAc2hvcnRfZGVzY3JpcHRpb246IGhlbHBlciBpbnRlcmZhY2UgZm9yIGVsZW1lbnQgcHJlc2V0cwotICoKLSAqIFRoaXMgaW50ZXJmYWNlIG9mZmVycyBtZXRob2RzIHRvIHF1ZXJ5IGFuZCBtYW5pcHVsYXRlIHBhcmFtZXRlciBwcmVzZXQgc2V0cy4KLSAqIEEgcHJlc2V0IGlzIGEgYnVuY2ggb2YgcHJvcGVydHkgc2V0dGluZ3MsIHRvZ2V0aGVyIHdpdGggbWV0YSBkYXRhIGFuZCBhIG5hbWUuCi0gKiBUaGUgbmFtZSBvZiBhIHByZXNldCBzZXJ2ZXMgYXMga2V5IGZvciBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscyB0byBtYW5pcHVsYXRlCi0gKiBzaW5nbGUgcHJlc2V0cy4KLSAqIEFsbCBpbnN0YW5jZXMgb2Ygb25lIHR5cGUgd2lsbCBzaGFyZSB0aGUgbGlzdCBvZiBwcmVzZXRzLiBUaGUgbGlzdCBpcyBjcmVhdGVkCi0gKiBvbiBkZW1hbmQsIGlmIHByZXNldHMgYXJlIG5vdCB1c2VkLCB0aGUgbGlzdCBpcyBub3QgY3JlYXRlZC4KLSAqCi0gKiBUaGUgaW50ZXJmYWNlIGNvbWVzIHdpdGggYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRoYXQgc2VydmVzIG1vc3QgcGx1Z2lucy4KLSAqIFdyYXBwZXIgcGx1Z2lucyB3aWxsIG92ZXJyaWRlIG1vc3QgbWV0aG9kcyB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdGhlCi0gKiBuYXRpdmUgcHJlc2V0IGZvcm1hdCBvZiB0aG9zZSB3cmFwcGVkIHBsdWdpbnMuCi0gKiBPbmUgbWV0aG9kIHRoYXQgaXMgdXNlZnVsIHRvIGJlIG92ZXJyaWRkZW4gaXMgZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMoKS4KLSAqIFdpdGggdGhhdCBvbmUgY2FuIGNvbnRyb2wgd2hpY2ggcHJvcGVydGllcyBhcmUgc2F2ZWQgYW5kIGluIHdoaWNoIG9yZGVyLgotICogV2hlbiBpbXBsZW1lbnRpbmcgc3VwcG9ydCBmb3IgcmVhZC1vbmx5IHByZXNldHMsIG9uZSBzaG91bGQgc2V0IHRoZSB2bWV0aG9kcwotICogZm9yIGdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQoKSBhbmQgZ3N0X3ByZXNldF9kZWxldGVfcHJlc2V0KCkgdG8gJU5VTEwuCi0gKiBBcHBsaWNhdGlvbnMgY2FuIHVzZSBnc3RfcHJlc2V0X2lzX2VkaXRhYmxlKCkgdG8gY2hlY2sgZm9yIHRoYXQuCi0gKgotICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgcHJlc2V0cyBsb2NhdGVkIGluIGEgc3lzdGVtIGRpcmVjdG9yeSwgCi0gKiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBkaXJlY3RvcnkgYW5kIGluIHRoZSB1c2VycyBob21lIGRpcmVjdG9yeS4gV2hlbiBnZXR0aW5nCi0gKiBhIGxpc3Qgb2YgcHJlc2V0cyBpbmRpdmlkdWFsIHByZXNldHMgYXJlIHJlYWQgYW5kIG92ZXJsYWlkIGluIDEpIHN5c3RlbSwgCi0gKiAyKSBhcHBsaWNhdGlvbiBhbmQgMykgdXNlciBvcmRlci4gV2hlbmV2ZXIgYW4gZWFybGllciBlbnRyeSBpcyBuZXdlciwgdGhlCi0gKiBsYXRlciBlbnRyaWVzIHdpbGwgYmUgdXBkYXRlZC4gU2luY2UgMS44IHlvdSBjYW4gYWxzbyBwcm92aWRlIGV4dHJhIHBhdGhzCi0gKiB3aGVyZSB0byBmaW5kIHByZXNldHMgdGhyb3VnaCB0aGUgR1NUX1BSRVNFVF9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLgotICogUHJlc2V0cyBmb3VuZCBpbiB0aG9zZSBwYXRocyB3aWxsIGJlIGNvbmNpZGVyZWQgYXMgImFwcCBwcmVzZXRzIi4KLSAqLwotLyogRklYTUU6Ci0gKiAtIG5vbiByYWN5bmVzcwotICogICAtIHdlIG5lZWQgdG8gYXZvaWQgdHdvIGluc3RhbmNlcyB3cml0aW5nIHRoZSBwcmVzZXQgZmlsZQotICogICAgIC0+IGZsb2NrKGZpbGVubygpKSwgaHR0cDovL3d3dy5lY3N0LmNzdWNoaWNvLmVkdS9+YmVlai9ndWlkZS9pcGMvZmxvY2suaHRtbAotICogICAgIC0+IG9wZW4gZXhjbHVzaXZlCi0gKiAgICAgLT4gYmV0dGVyIHNhdmUgdGhlIG5ldyBmaWxlIHRvIGEgdGVtcGZpbGUgYW5kIHRoZW4gcmVuYW1lPwotICogICAtIHdlIGxpa2UgdG8ga25vdyB3aGVuIGFueSBvdGhlciBpbnN0YW5jZSBtYWtlcyBjaGFuZ2VzIHRvIHRoZSBrZXlmaWxlCi0gKiAgICAgLSB0aGVuIHVpIGNhbiBiZSB1cGRhdGVkCi0gKiAgICAgLSBhbmQgd2UgbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgbG9zZSBlZGl0cwotICogICAtPiBpdHMgdGhlIHNhbWUgcHJvYmxlbSBhY3R1YWxseSwgb25jZSBmb3IgaW5zaWRlIGEgcHJvY2Vzcywgb25jZSBzeXN0ZW0tCi0gKiAgICAgIHdpZGUKLSAqICAgICAtIGNhbiB3ZSB1c2UgYSBsb2NrIGluc2lkZSBhIG5hbWVzIHNoYXJlZCBtZW1vcnkgc2VnbWVudD8KLSAqCi0gKiAtIHNob3VsZCB0aGVyZSBiZSBhICdwcmVzZXQtbGlzdCcgcHJvcGVydHkgdG8gZ2V0IHRoZSBwcmVzZXQgbGlzdAotICogICAoYW5kIHRvIGNvbm5lY3QgYSBub3RpZnk6OiB0byB0byBsaXN0ZW4gZm9yIGNoYW5nZXMpCi0gKiAgIHdlIGNvdWxkIHVzZSBnbm9tZV92ZnNfbW9uaXRvcl9hZGQoKSB0byBtb25pdG9yIHRoZSB1c2VyIHByZXNldF9maWxlLgotICoKLSAqIC0gc2hvdWxkIHRoZXJlIGJlIGEgJ3ByZXNldC1uYW1lJyBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBzZXQgYSBwcmVzZXQgdmlhCi0gKiAgIGdzdC1sYXVuY2gsIG9yIHNob3VsZCB3ZSBoYW5kbGUgdGhpcyB3aXRoIHNwZWNpYWwgc3ludGF4IGluIGdzdC1sYXVuY2g6Ci0gKiAgIGdzdC1sYXVuY2ggZWxlbWVudCBwcmVzZXQ6PHByZXNldC1uYW1lPiBwcm9wZXJ0eT12YWx1ZSAuLi4KLSAqICAgLSB0aGlzIHdvdWxkIGFsbG93IHRvIGhhdmUgcHJlc2V0LWJ1bmRsZXMgdG9vIChhIHByZXNldCBvbiBiaW5zIHRoYXQKLSAqICAgICBzcGVjaWZpZXMgcHJlc2V0cyBmb3IgY2hpbGRyZW4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdHByZXNldC5oIgotI2luY2x1ZGUgImdzdGNoaWxkcHJveHkuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0dmFsdWUuaCIKLQotI2lmZGVmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLSNpZmRlZiBHX09TX1dJTjMyCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLWV4dGVybiBITU9EVUxFIF9wcml2X2dzdF9kbGxfaGFuZGxlOwotI2VuZGlmCi0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHByZXNldF9kZWJ1ZwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKLQotLyogZGVmaW5lcyBmb3Iga2V5ZmlsZSB1c2FnZSwgdGhpcyBncm91cCBjb250YWlucyB0aGUgZWxlbWVudCB0eXBlIG5hbWUgYW5kCi0gKiB2ZXJzaW9uIHRoZXNlIHByZXNldHMgYmVsb25nIHRvLiAqLwotI2RlZmluZSBQUkVTRVRfSEVBREVSICJfcHJlc2V0c18iCi0KLS8qIGtleXMgb2YgdGhlIHByZXNldCBoZWFkZXIgc2VjdGlvbiAqLwotI2RlZmluZSBQUkVTRVRfSEVBREVSX0VMRU1FTlRfTkFNRSAiZWxlbWVudC1uYW1lIgotI2RlZmluZSBQUkVTRVRfSEVBREVSX1ZFUlNJT04gInZlcnNpb24iCi0KLXN0YXRpYyBHUXVhcmsgcHJlc2V0X3VzZXJfcGF0aF9xdWFyayA9IDA7Ci1zdGF0aWMgR1F1YXJrIHByZXNldF9hcHBfcGF0aF9xdWFyayA9IDA7Ci1zdGF0aWMgR1F1YXJrIHByZXNldF9zeXN0ZW1fcGF0aF9xdWFyayA9IDA7Ci1zdGF0aWMgR1F1YXJrIHByZXNldF9xdWFyayA9IDA7Ci0KLS8qIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2V0IGEgY3VzdG9tIHBhdGggdGhhdCBpcyBjaGVja2VkIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkCi0gKiBzeXN0ZW0gYW5kIHVzZXIgZGlycy4gVGhpcyBoZWxwcyB0byBkZXZlbG9wIG5ldyBwcmVzZXRzIGZpcnN0IGxvY2FsIHRvIHRoZQotICogYXBwbGljYXRpb24uCi0gKi8KLXN0YXRpYyBnY2hhciAqcHJlc2V0X2FwcF9kaXIgPSBOVUxMOwotCi0vKiBkZWZhdWx0IGlmYWNlIGltcGxlbWVudGF0aW9uICovCi0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHJlc2V0X2RlZmF1bHRfc2F2ZV9wcmVzZXRzX2ZpbGUgKEdzdFByZXNldCAqIHByZXNldCk7Ci0KLS8qCi0gKiBwcmVzZXRfZ2V0X3BhdGhzOgotICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAotICogQHByZXNldF91c2VyX3BhdGg6IChvdXQpIChhbGxvdy1ub25lKTogbG9jYXRpb24gZm9yIHBhdGggb3IgJU5VTEwKLSAqIEBwcmVzZXRfYXBwX3BhdGg6IChvdXQpIChhbGxvdy1ub25lKTogbG9jYXRpb24gZm9yIHBhdGggb3IgJU5VTEwKLSAqIEBwcmVzZXRfc3lzdGVtX3BhdGg6IChvdXQpIChhbGxvdy1ub25lKTogbG9jYXRpb24gZm9yIHBhdGggb3IgJU5VTEwKLSAqCi0gKiBGZXRjaCB0aGUgcHJlc2V0X3BhdGggZm9yIHVzZXIgbG9jYWwsIGFwcGxpY2F0aW9uIHNwZWNpZmljIGFuZCBzeXN0ZW0gd2lkZQotICogc2V0dGluZ3MuIERvbid0IGZyZWUgYWZ0ZXIgdXNlLgotICoKLSAqIFJldHVybnM6ICVGQUxTRSBpZiBubyBwYXRocyBjb3VsZCBiZSBmb3VuZC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1wcmVzZXRfZ2V0X3BhdGhzIChHc3RQcmVzZXQgKiBwcmVzZXQsIGNvbnN0IGdjaGFyICoqIHByZXNldF91c2VyX3BhdGgsCi0gICAgY29uc3QgZ2NoYXIgKiogcHJlc2V0X2FwcF9wYXRoLCBjb25zdCBnY2hhciAqKiBwcmVzZXRfc3lzdGVtX3BhdGgpCi17Ci0gIEdUeXBlIHR5cGUgPSBHX1RZUEVfRlJPTV9JTlNUQU5DRSAocHJlc2V0KTsKLSAgZ2NoYXIgKnByZXNldF9wYXRoOwotICBjb25zdCBnY2hhciAqZWxlbWVudF9uYW1lOwotCi0gIC8qIHdlIHVzZSB0aGUgZWxlbWVudCBuYW1lIHdoZW4gd2UgbXVzdCBjb25zdHJ1Y3QgdGhlIHBhdGhzICovCi0gIGVsZW1lbnRfbmFtZSA9IEdfT0JKRUNUX1RZUEVfTkFNRSAocHJlc2V0KTsKLSAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJlbGVtZW50X25hbWU6ICclcyciLCBlbGVtZW50X25hbWUpOwotCi0gIGlmIChwcmVzZXRfdXNlcl9wYXRoKSB7Ci0gICAgLyogcHJlc2V0IHVzZXIgcGF0aCByZXF1ZXN0ZWQsIHNlZSBpZiB3ZSBoYXZlIGl0IGNhY2hlZCBpbiB0aGUgcWRhdGEgKi8KLSAgICBpZiAoIShwcmVzZXRfcGF0aCA9IGdfdHlwZV9nZXRfcWRhdGEgKHR5cGUsIHByZXNldF91c2VyX3BhdGhfcXVhcmspKSkgewotICAgICAgZ2NoYXIgKnByZXNldF9kaXI7Ci0KLSAgICAgIC8qIHVzZXIgcHJlc2V0cyBnbyBpbiAgdXNlcidzIFhERyBkYXRhIGRpcmVjdG9yeS4gKi8KLSAgICAgIHByZXNldF9kaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF91c2VyX2RhdGFfZGlyICgpLAotICAgICAgICAgICJnc3RyZWFtZXItIiBHU1RfQVBJX1ZFUlNJT04sICJwcmVzZXRzIiwgTlVMTCk7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHByZXNldCwgInVzZXJfcHJlc2V0X2RpcjogJyVzJyIsIHByZXNldF9kaXIpOwotICAgICAgcHJlc2V0X3BhdGggPQotICAgICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoIiVzIiBHX0RJUl9TRVBBUkFUT1JfUyAiJXMucHJzIiwgcHJlc2V0X2RpciwKLSAgICAgICAgICBlbGVtZW50X25hbWUpOwotICAgICAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJ1c2VyX3ByZXNldF9wYXRoOiAnJXMnIiwgcHJlc2V0X3BhdGgpOwotICAgICAgLyogY3JlYXRlIGRpcnMgKi8KLSAgICAgIGdfbWtkaXJfd2l0aF9wYXJlbnRzIChwcmVzZXRfZGlyLCAwNzU1KTsKLSAgICAgIGdfZnJlZSAocHJlc2V0X2Rpcik7Ci0KLSAgICAgIC8qIGNhY2hlIHRoZSBwcmVzZXQgcGF0aCB0byB0aGUgdHlwZSAqLwotICAgICAgZ190eXBlX3NldF9xZGF0YSAodHlwZSwgcHJlc2V0X3VzZXJfcGF0aF9xdWFyaywgcHJlc2V0X3BhdGgpOwotICAgIH0KLSAgICAqcHJlc2V0X3VzZXJfcGF0aCA9IHByZXNldF9wYXRoOwotICB9Ci0KLSAgaWYgKHByZXNldF9hcHBfcGF0aCkgewotICAgIGlmIChwcmVzZXRfYXBwX2RpcikgewotICAgICAgaWYgKCEocHJlc2V0X3BhdGggPSBnX3R5cGVfZ2V0X3FkYXRhICh0eXBlLCBwcmVzZXRfc3lzdGVtX3BhdGhfcXVhcmspKSkgewotICAgICAgICBwcmVzZXRfcGF0aCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzIiBHX0RJUl9TRVBBUkFUT1JfUyAiJXMucHJzIiwKLSAgICAgICAgICAgIHByZXNldF9hcHBfZGlyLCBlbGVtZW50X25hbWUpOwotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHByZXNldCwgImFwcGxpY2F0aW9uX3ByZXNldF9wYXRoOiAnJXMnIiwgcHJlc2V0X3BhdGgpOwotCi0gICAgICAgIC8qIGNhY2hlIHRoZSBwcmVzZXQgcGF0aCB0byB0aGUgdHlwZSAqLwotICAgICAgICBnX3R5cGVfc2V0X3FkYXRhICh0eXBlLCBwcmVzZXRfYXBwX3BhdGhfcXVhcmssIHByZXNldF9wYXRoKTsKLSAgICAgIH0KLSAgICAgICpwcmVzZXRfYXBwX3BhdGggPSBwcmVzZXRfcGF0aDsKLSAgICB9IGVsc2UgewotICAgICAgKnByZXNldF9hcHBfcGF0aCA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHByZXNldF9zeXN0ZW1fcGF0aCkgewotICAgIC8qIHByZXNldCBzeXN0ZW0gcGF0aCByZXF1ZXN0ZWQsIHNlZSBpZiB3ZSBoYXZlIGl0IGNhY2hlZCBpbiB0aGUgcWRhdGEgKi8KLSAgICBpZiAoIShwcmVzZXRfcGF0aCA9IGdfdHlwZV9nZXRfcWRhdGEgKHR5cGUsIHByZXNldF9zeXN0ZW1fcGF0aF9xdWFyaykpKSB7Ci0gICAgICBnY2hhciAqcHJlc2V0X2RpcjsKLQotICAgICAgLyogc3lzdGVtIHByZXNldHMgaW4gJyRHU1RfREFUQURJUi9nc3RyZWFtZXItMS4wL3ByZXNldHMvR3N0QXVkaW9QYW5vcmFtYS5wcnMnICovCi0jaWZkZWYgR19PU19XSU4zMgotICAgICAgZ2NoYXIgKmJhc2VkaXIgPQotICAgICAgICAgIGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2RpcmVjdG9yeV9vZl9tb2R1bGUKLSAgICAgICAgICAoX3ByaXZfZ3N0X2RsbF9oYW5kbGUpOwotICAgICAgcHJlc2V0X2RpciA9Ci0gICAgICAgICAgZ19idWlsZF9maWxlbmFtZSAoYmFzZWRpciwgInNoYXJlIiwgImdzdHJlYW1lci0iIEdTVF9BUElfVkVSU0lPTiwKLSAgICAgICAgICAicHJlc2V0cyIsIE5VTEwpOwotICAgICAgZ19mcmVlIChiYXNlZGlyKTsKLSNlbHNlCi0gICAgICBwcmVzZXRfZGlyID0gZ19idWlsZF9maWxlbmFtZSAoR1NUX0RBVEFESVIsICJnc3RyZWFtZXItIiBHU1RfQVBJX1ZFUlNJT04sCi0gICAgICAgICAgInByZXNldHMiLCBOVUxMKTsKLSNlbmRpZgotICAgICAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJzeXN0ZW1fcHJlc2V0X2RpcjogJyVzJyIsIHByZXNldF9kaXIpOwotICAgICAgcHJlc2V0X3BhdGggPSBnX3N0cmR1cF9wcmludGYgKCIlcyIgR19ESVJfU0VQQVJBVE9SX1MgIiVzLnBycyIsCi0gICAgICAgICAgcHJlc2V0X2RpciwgZWxlbWVudF9uYW1lKTsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAocHJlc2V0LCAic3lzdGVtX3ByZXNldF9wYXRoOiAnJXMnIiwgcHJlc2V0X3BhdGgpOwotICAgICAgLyogY3JlYXRlIGRpcnMgKi8KLSAgICAgIGdfbWtkaXJfd2l0aF9wYXJlbnRzIChwcmVzZXRfZGlyLCAwNzU1KTsKLSAgICAgIGdfZnJlZSAocHJlc2V0X2Rpcik7Ci0KLSAgICAgIC8qIGNhY2hlIHRoZSBwcmVzZXQgcGF0aCB0byB0aGUgdHlwZSAqLwotICAgICAgZ190eXBlX3NldF9xZGF0YSAodHlwZSwgcHJlc2V0X3N5c3RlbV9wYXRoX3F1YXJrLCBwcmVzZXRfcGF0aCk7Ci0gICAgfQotICAgICpwcmVzZXRfc3lzdGVtX3BhdGggPSBwcmVzZXRfcGF0aDsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wcmVzZXRfc2tpcF9wcm9wZXJ0eSAoR1BhcmFtU3BlYyAqIHByb3BlcnR5KQotewotICBpZiAoKChwcm9wZXJ0eS0+ZmxhZ3MgJiBHX1BBUkFNX1JFQURXUklURSkgIT0gR19QQVJBTV9SRUFEV1JJVEUpIHx8Ci0gICAgICAocHJvcGVydHktPmZsYWdzICYgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpCi0gICAgcmV0dXJuIFRSVUU7Ci0gIC8qIEZJWE1FOiBza2lwIEdTVF9QQVJBTV9OT1RfUFJFU0VUQUJMRSwgc2VlICM1MjIyMDUgKi8KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotcHJlc2V0X3BhcnNlX3ZlcnNpb24gKGNvbnN0IGdjaGFyICogc3RyX3ZlcnNpb24pCi17Ci0gIGd1aW50IG1ham9yLCBtaW5vciwgbWljcm8sIG5hbm87Ci0gIGdpbnQgbnVtOwotCi0gIG1ham9yID0gbWlub3IgPSBtaWNybyA9IG5hbm8gPSAwOwotCi0gIC8qIHBhcnNlIHZlcnNpb24gKGUuZy4gMC4xMC4xNS4xKSB0byBndWludDY0ICovCi0gIG51bSA9IHNzY2FuZiAoc3RyX3ZlcnNpb24sICIldS4ldS4ldS4ldSIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8sICZuYW5vKTsKLSAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgIm1ham9yLm1pbm9yIiAqLwotICBpZiAobnVtID4gMSkgewotICAgIGd1aW50NjQgdmVyc2lvbjsKLQotICAgIHZlcnNpb24gPSAoKCgobWFqb3IgPDwgOCB8IG1pbm9yKSA8PCA4KSB8IG1pY3JvKSA8PCA4KSB8IG5hbm87Ci0gICAgR1NUX0RFQlVHICgidmVyc2lvbiAlcyAtPiAlIiBHX0dVSU5UNjRfRk9STUFULCBzdHJfdmVyc2lvbiwgdmVyc2lvbik7Ci0gICAgcmV0dXJuIHZlcnNpb247Ci0gIH0KLSAgcmV0dXJuIEdfR1VJTlQ2NF9DT05TVEFOVCAoMCk7Ci19Ci0KLXN0YXRpYyBHS2V5RmlsZSAqCi1wcmVzZXRfb3Blbl9hbmRfcGFyc2VfaGVhZGVyIChHc3RQcmVzZXQgKiBwcmVzZXQsIGNvbnN0IGdjaGFyICogcHJlc2V0X3BhdGgsCi0gICAgZ3VpbnQ2NCAqIHByZXNldF92ZXJzaW9uKQotewotICBHS2V5RmlsZSAqaW47Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICBnYm9vbGVhbiByZXM7Ci0gIGNvbnN0IGdjaGFyICplbGVtZW50X25hbWU7Ci0gIGdjaGFyICpuYW1lOwotCi0gIGluID0gZ19rZXlfZmlsZV9uZXcgKCk7Ci0KLSAgcmVzID0gZ19rZXlfZmlsZV9sb2FkX2Zyb21fZmlsZSAoaW4sIHByZXNldF9wYXRoLAotICAgICAgR19LRVlfRklMRV9LRUVQX0NPTU1FTlRTIHwgR19LRVlfRklMRV9LRUVQX1RSQU5TTEFUSU9OUywgJmVycm9yKTsKLSAgaWYgKCFyZXMgfHwgZXJyb3IgIT0gTlVMTCkKLSAgICBnb3RvIGxvYWRfZXJyb3I7Ci0KLSAgLyogZWxlbWVudCB0eXBlIG5hbWUgYW5kIHByZXNldCBuYW1lIG11c3QgbWF0Y2ggb3Igd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHdyb25nCi0gICAqIHByZXNldCBmaWxlICovCi0gIGVsZW1lbnRfbmFtZSA9IEdfT0JKRUNUX1RZUEVfTkFNRSAocHJlc2V0KTsKLSAgbmFtZSA9Ci0gICAgICBnX2tleV9maWxlX2dldF92YWx1ZSAoaW4sIFBSRVNFVF9IRUFERVIsIFBSRVNFVF9IRUFERVJfRUxFTUVOVF9OQU1FLAotICAgICAgTlVMTCk7Ci0KLSAgaWYgKCFuYW1lIHx8IHN0cmNtcCAobmFtZSwgZWxlbWVudF9uYW1lKSkKLSAgICBnb3RvIHdyb25nX25hbWU7Ci0KLSAgZ19mcmVlIChuYW1lKTsKLQotICAvKiBnZXQgdGhlIHZlcnNpb24gbm93IHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2hlY2sgaXQgKi8KLSAgaWYgKHByZXNldF92ZXJzaW9uKSB7Ci0gICAgZ2NoYXIgKnN0ciA9Ci0gICAgICAgIGdfa2V5X2ZpbGVfZ2V0X3ZhbHVlIChpbiwgUFJFU0VUX0hFQURFUiwgUFJFU0VUX0hFQURFUl9WRVJTSU9OLCBOVUxMKTsKLSAgICAqcHJlc2V0X3ZlcnNpb24gPSBwcmVzZXRfcGFyc2VfdmVyc2lvbiAoc3RyKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLQotICByZXR1cm4gaW47Ci0KLSAgLyogRVJST1JTICovCi1sb2FkX2Vycm9yOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsICJVbmFibGUgdG8gcmVhZCBwcmVzZXQgZmlsZSAlczogJXMiLAotICAgICAgICBwcmVzZXRfcGF0aCwgZXJyb3ItPm1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICAgIGdfa2V5X2ZpbGVfZnJlZSAoaW4pOwotICAgIHJldHVybiBOVUxMOwotICB9Ci13cm9uZ19uYW1lOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsCi0gICAgICAgICJXcm9uZyBlbGVtZW50IG5hbWUgaW4gcHJlc2V0IGZpbGUgJXMuIEV4cGVjdGVkICVzLCBnb3QgJXMiLAotICAgICAgICBwcmVzZXRfcGF0aCwgZWxlbWVudF9uYW1lLCBHU1RfU1RSX05VTEwgKG5hbWUpKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGdfa2V5X2ZpbGVfZnJlZSAoaW4pOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmVzZXRfbWVyZ2UgKEdLZXlGaWxlICogc3lzdGVtLCBHS2V5RmlsZSAqIHVzZXIpCi17Ci0gIGdjaGFyICpzdHI7Ci0gIGdjaGFyICoqZ3JvdXBzLCAqKmtleXM7Ci0gIGdzaXplIGksIGosIG51bV9ncm91cHMsIG51bV9rZXlzOwotCi0gIC8qIGNvcHkgZmlsZSBjb21tZW50IGlmIHRoZXJlIGlzIGFueSAqLwotICBpZiAoKHN0ciA9IGdfa2V5X2ZpbGVfZ2V0X2NvbW1lbnQgKHVzZXIsIE5VTEwsIE5VTEwsIE5VTEwpKSkgewotICAgIGdfa2V5X2ZpbGVfc2V0X2NvbW1lbnQgKHN5c3RlbSwgTlVMTCwgTlVMTCwgc3RyLCBOVUxMKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLQotICAvKiBnZXQgZ3JvdXBzIGluIHVzZXIgYW5kIGNvcHkgaW50byBzeXN0ZW0gKi8KLSAgZ3JvdXBzID0gZ19rZXlfZmlsZV9nZXRfZ3JvdXBzICh1c2VyLCAmbnVtX2dyb3Vwcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW1fZ3JvdXBzOyBpKyspIHsKLSAgICAvKiBjb3B5IGdyb3VwIGNvbW1lbnQgaWYgdGhlcmUgaXMgYW55ICovCi0gICAgaWYgKChzdHIgPSBnX2tleV9maWxlX2dldF9jb21tZW50ICh1c2VyLCBncm91cHNbaV0sIE5VTEwsIE5VTEwpKSkgewotICAgICAgZ19rZXlfZmlsZV9zZXRfY29tbWVudCAoc3lzdGVtLCBncm91cHNbaV0sIE5VTEwsIHN0ciwgTlVMTCk7Ci0gICAgICBnX2ZyZWUgKHN0cik7Ci0gICAgfQotCi0gICAgLyogaWdub3JlIHByaXZhdGUgZ3JvdXBzICovCi0gICAgaWYgKGdyb3Vwc1tpXVswXSA9PSAnXycpCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIGlmIGdyb3VwIGFscmVhZHkgZXhpc3RzIGluIHN5c3RlbSwgcmVtb3ZlIGFuZCByZS1hZGQga2V5cyBmcm9tIHVzZXIgKi8KLSAgICBpZiAoZ19rZXlfZmlsZV9oYXNfZ3JvdXAgKHN5c3RlbSwgZ3JvdXBzW2ldKSkgewotICAgICAgZ19rZXlfZmlsZV9yZW1vdmVfZ3JvdXAgKHN5c3RlbSwgZ3JvdXBzW2ldLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBrZXlzID0gZ19rZXlfZmlsZV9nZXRfa2V5cyAodXNlciwgZ3JvdXBzW2ldLCAmbnVtX2tleXMsIE5VTEwpOwotICAgIGZvciAoaiA9IDA7IGogPCBudW1fa2V5czsgaisrKSB7Ci0gICAgICAvKiBjb3B5IGtleSBjb21tZW50IGlmIHRoZXJlIGlzIGFueSAqLwotICAgICAgaWYgKChzdHIgPSBnX2tleV9maWxlX2dldF9jb21tZW50ICh1c2VyLCBncm91cHNbaV0sIGtleXNbal0sIE5VTEwpKSkgewotICAgICAgICBnX2tleV9maWxlX3NldF9jb21tZW50IChzeXN0ZW0sIGdyb3Vwc1tpXSwga2V5c1tqXSwgc3RyLCBOVUxMKTsKLSAgICAgICAgZ19mcmVlIChzdHIpOwotICAgICAgfQotICAgICAgc3RyID0gZ19rZXlfZmlsZV9nZXRfdmFsdWUgKHVzZXIsIGdyb3Vwc1tpXSwga2V5c1tqXSwgTlVMTCk7Ci0gICAgICBnX2tleV9maWxlX3NldF92YWx1ZSAoc3lzdGVtLCBncm91cHNbaV0sIGtleXNbal0sIHN0cik7Ci0gICAgICBnX2ZyZWUgKHN0cik7Ci0gICAgfQotICAgIGdfc3RyZnJlZXYgKGtleXMpOwotICB9Ci0gIGdfc3RyZnJlZXYgKGdyb3Vwcyk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdLZXlGaWxlICpwcmVzZXQ7Ci0gIGd1aW50NjQgdmVyc2lvbjsKLX0gUHJlc2V0QW5kVmVyc2lvbjsKLQotc3RhdGljIGdpbnQKLWNvbXBhcmVfcHJlc2V0X2FuZF92ZXJzaW9uIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYiwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGNvbnN0IFByZXNldEFuZFZlcnNpb24gKnBhID0gYSwgKnBiID0gYjsKLQotICBpZiAocGEtPnZlcnNpb24gPiBwYi0+dmVyc2lvbikKLSAgICByZXR1cm4gLTE7Ci0gIGlmIChwYS0+dmVyc2lvbiA8IHBiLT52ZXJzaW9uKQotICAgIHJldHVybiAxOwotICBlbHNlCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHJlYWRzIHRoZSB1c2VyIGFuZCBzeXN0ZW0gcHJlc2V0cyBmaWxlcyBhbmQgbWVyZ2VzIHRoZW0gdG9nZXRoZXIuIFRoaXMKLSAqIGZ1bmN0aW9uIGNhY2hlcyB0aGUgR0tleUZpbGUgb24gdGhlIGVsZW1lbnQgdHlwZS4gSWYgdGhlcmUgaXMgbm8gZXhpc3RpbmcKLSAqIHByZXNldCBmaWxlLCBhIG5ldyBpbi1tZW1vcnkgR0tleUZpbGUgd2lsbCBiZSBjcmVhdGVkLiAqLwotc3RhdGljIEdLZXlGaWxlICoKLXByZXNldF9nZXRfa2V5ZmlsZSAoR3N0UHJlc2V0ICogcHJlc2V0KQotewotICBHS2V5RmlsZSAqcHJlc2V0czsKLSAgR1R5cGUgdHlwZSA9IEdfVFlQRV9GUk9NX0lOU1RBTkNFIChwcmVzZXQpOwotCi0gIC8qIGZpcnN0IHNlZSBpZiB0aGUgaGF2ZSBhIGNhY2hlZCB2ZXJzaW9uIGZvciB0aGUgdHlwZSAqLwotICBpZiAoIShwcmVzZXRzID0gZ190eXBlX2dldF9xZGF0YSAodHlwZSwgcHJlc2V0X3F1YXJrKSkpIHsKLSAgICBjb25zdCBnY2hhciAqcHJlc2V0X3VzZXJfcGF0aCwgKnByZXNldF9hcHBfcGF0aCwgKnByZXNldF9zeXN0ZW1fcGF0aDsKLSAgICBndWludDY0IHZlcnNpb25fc3lzdGVtID0gR19HVUlOVDY0X0NPTlNUQU5UICgwKTsKLSAgICBndWludDY0IHZlcnNpb25fYXBwID0gR19HVUlOVDY0X0NPTlNUQU5UICgwKTsKLSAgICBndWludDY0IHZlcnNpb25fdXNlciA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMCk7Ci0gICAgZ3VpbnQ2NCB2ZXJzaW9uID0gR19HVUlOVDY0X0NPTlNUQU5UICgwKTsKLSAgICBnYm9vbGVhbiBtZXJnZWQgPSBGQUxTRTsKLSAgICBHS2V5RmlsZSAqaW5fdXNlciwgKmluX2FwcCA9IE5VTEwsICppbl9zeXN0ZW07Ci0gICAgR1F1ZXVlIGluX2VudiA9IEdfUVVFVUVfSU5JVDsKLSAgICBnYm9vbGVhbiBoYXZlX2VudiA9IEZBTFNFOwotICAgIGNvbnN0IGdjaGFyICplbnZ2YXI7Ci0KLSAgICAvKiB0cnkgdG8gbG9hZCB0aGUgdXNlciwgYXBwIGFuZCBzeXN0ZW0gcHJlc2V0cywgd2UgZG8gdGhpcyB0byBnZXQgdGhlCi0gICAgICogdmVyc2lvbnMgb2YgYWxsIGZpbGVzLiAqLwotICAgIHByZXNldF9nZXRfcGF0aHMgKHByZXNldCwgJnByZXNldF91c2VyX3BhdGgsICZwcmVzZXRfYXBwX3BhdGgsCi0gICAgICAgICZwcmVzZXRfc3lzdGVtX3BhdGgpOwotICAgIGluX3VzZXIgPSBwcmVzZXRfb3Blbl9hbmRfcGFyc2VfaGVhZGVyIChwcmVzZXQsIHByZXNldF91c2VyX3BhdGgsCi0gICAgICAgICZ2ZXJzaW9uX3VzZXIpOwotCi0gICAgaWYgKHByZXNldF9hcHBfcGF0aCkgewotICAgICAgaW5fYXBwID0gcHJlc2V0X29wZW5fYW5kX3BhcnNlX2hlYWRlciAocHJlc2V0LCBwcmVzZXRfYXBwX3BhdGgsCi0gICAgICAgICAgJnZlcnNpb25fYXBwKTsKLSAgICB9Ci0KLSAgICBlbnZ2YXIgPSBnX2dldGVudiAoIkdTVF9QUkVTRVRfUEFUSCIpOwotICAgIGlmIChlbnZ2YXIpIHsKLSAgICAgIGdpbnQgaTsKLSAgICAgIGdjaGFyICoqcHJlc2V0X2RpcnMgPSBnX3N0cnNwbGl0IChlbnZ2YXIsIEdfU0VBUkNIUEFUSF9TRVBBUkFUT1JfUywgLTEpOwotCi0gICAgICBmb3IgKGkgPSAwOyBwcmVzZXRfZGlyc1tpXTsgaSsrKSB7Ci0gICAgICAgIGdjaGFyICpwcmVzZXRfcGF0aCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzIiBHX0RJUl9TRVBBUkFUT1JfUyAiJXMucHJzIiwKLSAgICAgICAgICAgIHByZXNldF9kaXJzW2ldLCBHX09CSkVDVF9UWVBFX05BTUUgKHByZXNldCkpOwotICAgICAgICBHS2V5RmlsZSAqZW52X2ZpbGU7Ci0gICAgICAgIGd1aW50NjQgZW52X3ZlcnNpb247Ci0KLSAgICAgICAgZW52X2ZpbGUgPSBwcmVzZXRfb3Blbl9hbmRfcGFyc2VfaGVhZGVyIChwcmVzZXQsIHByZXNldF9wYXRoLAotICAgICAgICAgICAgJmVudl92ZXJzaW9uKTsKLSAgICAgICAgZ19mcmVlIChwcmVzZXRfcGF0aCk7Ci0gICAgICAgIGlmIChlbnZfZmlsZSkgewotICAgICAgICAgIFByZXNldEFuZFZlcnNpb24gKnB2ID0gZ19uZXcgKFByZXNldEFuZFZlcnNpb24sIDEpOwotICAgICAgICAgIHB2LT5wcmVzZXQgPSBlbnZfZmlsZTsKLSAgICAgICAgICBwdi0+dmVyc2lvbiA9IGVudl92ZXJzaW9uOwotICAgICAgICAgIGdfcXVldWVfcHVzaF90YWlsICgmaW5fZW52LCBwdik7Ci0gICAgICAgICAgaGF2ZV9lbnYgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnX3N0cmZyZWV2IChwcmVzZXRfZGlycyk7Ci0gICAgfQotCi0gICAgaW5fc3lzdGVtID0gcHJlc2V0X29wZW5fYW5kX3BhcnNlX2hlYWRlciAocHJlc2V0LCBwcmVzZXRfc3lzdGVtX3BhdGgsCi0gICAgICAgICZ2ZXJzaW9uX3N5c3RlbSk7Ci0KLSAgICAvKiBjb21wYXJlIHZlcnNpb24gdG8gY2hlY2sgZm9yIG1lcmdlICovCi0gICAgaWYgKGluX3N5c3RlbSkgewotICAgICAgcHJlc2V0cyA9IGluX3N5c3RlbTsKLSAgICAgIHZlcnNpb24gPSB2ZXJzaW9uX3N5c3RlbTsKLSAgICB9Ci0KLSAgICBpZiAoaGF2ZV9lbnYpIHsKLSAgICAgIEdMaXN0ICpsOwotCi0gICAgICAvKiBtZXJnZSB0aGUgb25lcyBmcm9tIHRoZSBlbnZpcm9ubWVudCBwYXRocy4gSWYgYW55IG9mIHRoZW0gaGFzIGEKLSAgICAgICAqIGhpZ2hlciB2ZXJzaW9uLCB0YWtlIHRoYXQgYXMgdGhlICJtYXN0ZXIiIHZlcnNpb24uIExvd2VyIHZlcnNpb25zIGFyZQotICAgICAgICogdGhlbiBqdXN0IG1lcmdlZCBpbi4gKi8KLSAgICAgIGdfcXVldWVfc29ydCAoJmluX2VudiwgY29tcGFyZV9wcmVzZXRfYW5kX3ZlcnNpb24sIE5VTEwpOwotICAgICAgLyogaGlnaGVzdCB2ZXJzaW9uIHRvIGxvd2VzdCAqLwotICAgICAgZm9yIChsID0gaW5fZW52LmhlYWQ7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICAgIFByZXNldEFuZFZlcnNpb24gKnB2ID0gbC0+ZGF0YTsKLQotICAgICAgICBpZiAodmVyc2lvbiA+IHB2LT52ZXJzaW9uKSB7Ci0gICAgICAgICAgcHJlc2V0X21lcmdlIChwcmVzZXRzLCBwdi0+cHJlc2V0KTsKLSAgICAgICAgICBnX2tleV9maWxlX2ZyZWUgKHB2LT5wcmVzZXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChwcmVzZXRzKQotICAgICAgICAgICAgZ19rZXlfZmlsZV9mcmVlIChwcmVzZXRzKTsKLSAgICAgICAgICBwcmVzZXRzID0gcHYtPnByZXNldDsKLSAgICAgICAgICB2ZXJzaW9uID0gcHYtPnZlcnNpb247Ci0gICAgICAgIH0KLSAgICAgICAgZ19mcmVlIChwdik7Ci0gICAgICB9Ci0gICAgICBnX3F1ZXVlX2NsZWFyICgmaW5fZW52KTsKLSAgICB9Ci0KLSAgICBpZiAoaW5fYXBwKSB7Ci0gICAgICAvKiBpZiBzeXN0ZW0vZW52IHZlcnNpb24gaXMgaGlnaGVyLCBtZXJnZSAqLwotICAgICAgaWYgKHZlcnNpb24gPiB2ZXJzaW9uX2FwcCkgewotICAgICAgICBwcmVzZXRfbWVyZ2UgKHByZXNldHMsIGluX2FwcCk7Ci0gICAgICAgIGdfa2V5X2ZpbGVfZnJlZSAoaW5fYXBwKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwcmVzZXRzKQotICAgICAgICAgIGdfa2V5X2ZpbGVfZnJlZSAocHJlc2V0cyk7Ci0gICAgICAgIHByZXNldHMgPSBpbl9hcHA7Ci0gICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uX2FwcDsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGluX3VzZXIpIHsKLSAgICAgIC8qIGlmIHN5c3RlbS9lbnYgb3IgYXBwIHZlcnNpb24gaXMgaGlnaGVyLCBtZXJnZSAqLwotICAgICAgaWYgKHZlcnNpb24gPiB2ZXJzaW9uX3VzZXIpIHsKLSAgICAgICAgcHJlc2V0X21lcmdlIChwcmVzZXRzLCBpbl91c2VyKTsKLSAgICAgICAgZ19rZXlfZmlsZV9mcmVlIChpbl91c2VyKTsKLSAgICAgICAgbWVyZ2VkID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwcmVzZXRzKQotICAgICAgICAgIGdfa2V5X2ZpbGVfZnJlZSAocHJlc2V0cyk7Ci0gICAgICAgIHByZXNldHMgPSBpbl91c2VyOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghcHJlc2V0cykgewotICAgICAgLyogd2UgZGlkIG5vdCBsb2FkIGEgdXNlciwgYXBwIG9yIHN5c3RlbSBwcmVzZXRzIGZpbGUsIGNyZWF0ZSBhIG5ldyBvbmUgKi8KLSAgICAgIHByZXNldHMgPSBnX2tleV9maWxlX25ldyAoKTsKLSAgICAgIGdfa2V5X2ZpbGVfc2V0X3N0cmluZyAocHJlc2V0cywgUFJFU0VUX0hFQURFUiwgUFJFU0VUX0hFQURFUl9FTEVNRU5UX05BTUUsCi0gICAgICAgICAgR19PQkpFQ1RfVFlQRV9OQU1FIChwcmVzZXQpKTsKLSAgICB9Ci0KLSAgICAvKiBhdHRhY2ggdGhlIHByZXNldCB0byB0aGUgdHlwZSAqLwotICAgIGdfdHlwZV9zZXRfcWRhdGEgKHR5cGUsIHByZXNldF9xdWFyaywgKGdwb2ludGVyKSBwcmVzZXRzKTsKLQotICAgIGlmIChtZXJnZWQpIHsKLSAgICAgIGdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldHNfZmlsZSAocHJlc2V0KTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHByZXNldHM7Ci19Ci0KLXN0YXRpYyBnaW50Ci1jb21wYXJlX3N0cmluZ3MgKGdjaGFyICoqIGEsIGdjaGFyICoqIGIsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcmV0dXJuIGdfc3RyY21wMCAoKmEsICpiKTsKLX0KLQotLyogZ2V0IGEgbGlzdCBvZiBhbGwgc3VwcG9ydGVkIHByZXNldCBuYW1lcyBmb3IgYW4gZWxlbWVudCAqLwotc3RhdGljIGdjaGFyICoqCi1nc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X3ByZXNldF9uYW1lcyAoR3N0UHJlc2V0ICogcHJlc2V0KQotewotICBHS2V5RmlsZSAqcHJlc2V0czsKLSAgZ3NpemUgaSwgbnVtX2dyb3VwczsKLSAgZ2NoYXIgKipncm91cHM7Ci0KLSAgLyogZ2V0IHRoZSBwcmVzZXRzIGZyb20gdGhlIHR5cGUgKi8KLSAgaWYgKCEocHJlc2V0cyA9IHByZXNldF9nZXRfa2V5ZmlsZSAocHJlc2V0KSkpCi0gICAgZ290byBub19wcmVzZXRzOwotCi0gIC8qIGdldCB0aGUgZ3JvdXBzLCB3aGljaCBhcmUgYWxzbyB0aGUgcHJlc2V0IG5hbWVzICovCi0gIGlmICghKGdyb3VwcyA9IGdfa2V5X2ZpbGVfZ2V0X2dyb3VwcyAocHJlc2V0cywgJm51bV9ncm91cHMpKSkKLSAgICBnb3RvIG5vX2dyb3VwczsKLQotICAvKiByZW1vdmUgYWxsIHByaXZhdGUgZ3JvdXAgbmFtZXMgc3RhcnRpbmcgd2l0aCAnXycgZnJvbSB0aGUgYXJyYXkgKi8KLSAgZm9yIChpID0gMDsgaSA8IG51bV9ncm91cHM7IGkrKykgewotICAgIGlmIChncm91cHNbaV1bMF0gPT0gJ18nKSB7Ci0gICAgICAvKiBmcmVlIHByaXZhdGUgZ3JvdXAgKi8KLSAgICAgIGdfZnJlZSAoZ3JvdXBzW2ldKTsKLSAgICAgIC8qIG1vdmUgbGFzdCBlbGVtZW50IG9mIGxpc3QgZG93biAqLwotICAgICAgbnVtX2dyb3Vwcy0tOwotICAgICAgLyogbW92ZSBsYXN0IGVsZW1lbnQgaW50byByZW1vdmVkIGVsZW1lbnQgKi8KLSAgICAgIGdyb3Vwc1tpXSA9IGdyb3Vwc1tudW1fZ3JvdXBzXTsKLSAgICAgIGdyb3Vwc1tudW1fZ3JvdXBzXSA9IE5VTEw7Ci0gICAgfQotICB9Ci0gIGlmICghbnVtX2dyb3VwcykgewotICAgIEdTVF9JTkZPX09CSkVDVCAocHJlc2V0LCAiRW1wdHkgcHJlc2V0IGZpbGUiKTsKLSAgICBnX3N0cmZyZWV2IChncm91cHMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLyogc29ydCB0aGUgYXJyYXkgbm93ICovCi0gIGdfcXNvcnRfd2l0aF9kYXRhIChncm91cHMsIG51bV9ncm91cHMsIHNpemVvZiAoZ2NoYXIgKiksCi0gICAgICAoR0NvbXBhcmVEYXRhRnVuYykgY29tcGFyZV9zdHJpbmdzLCBOVUxMKTsKLQotICByZXR1cm4gZ3JvdXBzOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fcHJlc2V0czoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAiQ291bGQgbm90IGxvYWQgcHJlc2V0cyIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1ub19ncm91cHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIkNvdWxkIG5vdCBmaW5kIHByZXNldCBncm91cHMiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKiBnZXQgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFyZSB1c2VkIGZvciBwcmVzZXRzICovCi1zdGF0aWMgZ2NoYXIgKioKLWdzdF9wcmVzZXRfZGVmYXVsdF9nZXRfcHJvcGVydHlfbmFtZXMgKEdzdFByZXNldCAqIHByZXNldCkKLXsKLSAgR1BhcmFtU3BlYyAqKnByb3BzOwotICBndWludCBpLCBqID0gMCwgbl9wcm9wczsKLSAgR09iamVjdENsYXNzICpnY2xhc3M7Ci0gIGdib29sZWFuIGlzX2NoaWxkX3Byb3h5OwotICBnY2hhciAqKnJlc3VsdCA9IE5VTEw7Ci0KLSAgZ2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAocHJlc2V0KSk7Ci0gIGlzX2NoaWxkX3Byb3h5ID0gR1NUX0lTX0NISUxEX1BST1hZIChwcmVzZXQpOwotCi0gIC8qIGdldCBhIGxpc3Qgb2Ygb2JqZWN0IHByb3BlcnRpZXMgKi8KLSAgcHJvcHMgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMgKGdjbGFzcywgJm5fcHJvcHMpOwotICBpZiAocHJvcHMpIHsKLSAgICAvKiBhbGxvY2F0ZSBhcnJheSBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHdvcnN0IGNhc2UsIGluY2x1ZGluZyBhIHRlcm1pbmF0aW5nCi0gICAgICogTlVMTCBwb2ludGVyLiAqLwotICAgIHJlc3VsdCA9IGdfbmV3IChnY2hhciAqLCBuX3Byb3BzICsgMSk7Ci0KLSAgICAvKiBub3cgZmlsdGVyIG91dCB0aGUgcHJvcGVydGllcyB0aGF0IHdlIGNhbiB1c2UgZm9yIHByZXNldHMgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwcmVzZXQsICIgIGZpbHRlcmluZyBwcm9wZXJ0aWVzOiAldSIsIG5fcHJvcHMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuX3Byb3BzOyBpKyspIHsKLSAgICAgIGlmIChwcmVzZXRfc2tpcF9wcm9wZXJ0eSAocHJvcHNbaV0pKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHByZXNldCwgIiAgICB1c2luZzogJXMiLCBwcm9wc1tpXS0+bmFtZSk7Ci0gICAgICByZXN1bHRbaisrXSA9IGdfc3RyZHVwIChwcm9wc1tpXS0+bmFtZSk7Ci0gICAgfQotICAgIGdfZnJlZSAocHJvcHMpOwotICB9Ci0KLSAgaWYgKGlzX2NoaWxkX3Byb3h5KSB7Ci0gICAgZ3VpbnQgYywgbl9jaGlsZHJlbjsKLSAgICBHT2JqZWN0ICpjaGlsZDsKLQotICAgIG5fY2hpbGRyZW4gPSBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50ICgoR3N0Q2hpbGRQcm94eSAqKSBwcmVzZXQpOwotICAgIGZvciAoYyA9IDA7IGMgPCBuX2NoaWxkcmVuOyBjKyspIHsKLSAgICAgIGNoaWxkID0gZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoKEdzdENoaWxkUHJveHkgKikgcHJlc2V0LCBjKTsKLSAgICAgIGdjbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGNoaWxkKSk7Ci0KLSAgICAgIHByb3BzID0gZ19vYmplY3RfY2xhc3NfbGlzdF9wcm9wZXJ0aWVzIChnY2xhc3MsICZuX3Byb3BzKTsKLSAgICAgIGlmIChwcm9wcykgewotICAgICAgICAvKiByZXNpemUgcHJvcGVydHkgbmFtZSBhcnJheSAqLwotICAgICAgICByZXN1bHQgPSBnX3JlbmV3IChnY2hhciAqLCByZXN1bHQsIGogKyBuX3Byb3BzICsgMSk7Ci0KLSAgICAgICAgLyogbm93IGZpbHRlciBvdXQgdGhlIHByb3BlcnRpZXMgdGhhdCB3ZSBjYW4gdXNlIGZvciBwcmVzZXRzICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHByZXNldCwgIiAgZmlsdGVyaW5nIHByb3BlcnRpZXM6ICV1Iiwgbl9wcm9wcyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuX3Byb3BzOyBpKyspIHsKLSAgICAgICAgICBpZiAocHJlc2V0X3NraXBfcHJvcGVydHkgKHByb3BzW2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHByZXNldCwgIiAgICB1c2luZzogJXM6OiVzIiwKLSAgICAgICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChjaGlsZCksIHByb3BzW2ldLT5uYW1lKTsKLSAgICAgICAgICByZXN1bHRbaisrXSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOjolcyIsIEdTVF9PQkpFQ1RfTkFNRSAoY2hpbGQpLAotICAgICAgICAgICAgICBwcm9wc1tpXS0+bmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19mcmVlIChwcm9wcyk7Ci0gICAgICB9Ci0KLSAgICAgIGdfb2JqZWN0X3VucmVmIChjaGlsZCk7Ci0gICAgfQotICB9Ci0gIGlmICghcmVzdWx0KSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJvYmplY3QgaGFzIG5vIHByb3BlcnRpZXMiKTsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHRbal0gPSBOVUxMOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIGxvYWQgdGhlIHByZXNldHMgb2YgQG5hbWUgZm9yIHRoZSBpbnN0YW5jZSBAcHJlc2V0LiBSZXR1cm5zICVGQUxTRSBpZiBzb21ldGhpbmcKLSAqIGZhaWxlZC4gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ByZXNldF9kZWZhdWx0X2xvYWRfcHJlc2V0IChHc3RQcmVzZXQgKiBwcmVzZXQsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR0tleUZpbGUgKnByZXNldHM7Ci0gIGdjaGFyICoqcHJvcHM7Ci0gIGd1aW50IGk7Ci0gIEdPYmplY3RDbGFzcyAqZ2NsYXNzOwotICBnYm9vbGVhbiBpc19jaGlsZF9wcm94eTsKLQotICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLwotICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKLSAgICBnb3RvIG5vX3ByZXNldHM7Ci0KLSAgLyogZ2V0IHRoZSBwcmVzZXQgbmFtZSAqLwotICBpZiAoIWdfa2V5X2ZpbGVfaGFzX2dyb3VwIChwcmVzZXRzLCBuYW1lKSkKLSAgICBnb3RvIG5vX2dyb3VwOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHByZXNldCwgImxvYWRpbmcgcHJlc2V0IDogJyVzJyIsIG5hbWUpOwotCi0gIC8qIGdldCB0aGUgcHJvcGVydGllcyB0aGF0IHdlIGNhbiBjb25maWd1cmUgaW4gdGhpcyBlbGVtZW50ICovCi0gIGlmICghKHByb3BzID0gZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMgKHByZXNldCkpKQotICAgIGdvdG8gbm9fcHJvcGVydGllczsKLQotICBnY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChwcmVzZXQpKTsKLSAgaXNfY2hpbGRfcHJveHkgPSBHU1RfSVNfQ0hJTERfUFJPWFkgKHByZXNldCk7Ci0KLSAgLyogZm9yIGVhY2ggb2YgdGhlIHByb3BlcnR5IG5hbWVzLCBmaW5kIHRoZSBwcmVzZXQgcGFyYW1ldGVyIGFuZCB0cnkgdG8KLSAgICogY29uZmlndXJlIHRoZSBwcm9wZXJ0eSB3aXRoIGl0cyB2YWx1ZSAqLwotICBmb3IgKGkgPSAwOyBwcm9wc1tpXTsgaSsrKSB7Ci0gICAgZ2NoYXIgKnN0cjsKLSAgICBHVmFsdWUgZ3ZhbHVlID0geyAwLCB9OwotICAgIEdQYXJhbVNwZWMgKnByb3BlcnR5ID0gTlVMTDsKLQotICAgIC8qIGNoZWNrIGlmIHdlIGhhdmUgYSBzZXR0aW5ncyBmb3IgdGhpcyBlbGVtZW50IHByb3BlcnR5ICovCi0gICAgaWYgKCEoc3RyID0gZ19rZXlfZmlsZV9nZXRfdmFsdWUgKHByZXNldHMsIG5hbWUsIHByb3BzW2ldLCBOVUxMKSkpIHsKLSAgICAgIC8qIHRoZSBlbGVtZW50IGhhcyBhIHByb3BlcnR5IGJ1dCB0aGUgcGFyYW1ldGVyIGlzIG5vdCBpbiB0aGUga2V5ZmlsZSAqLwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsICJwYXJhbWV0ZXIgJyVzJyBub3QgaW4gcHJlc2V0IiwgcHJvcHNbaV0pOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocHJlc2V0LCAic2V0dGluZyB2YWx1ZSAnJXMnIGZvciBwcm9wZXJ0eSAnJXMnIiwgc3RyLAotICAgICAgICBwcm9wc1tpXSk7Ci0KLSAgICBpZiAoaXNfY2hpbGRfcHJveHkpIHsKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9sb29rdXAgKChHc3RDaGlsZFByb3h5ICopIHByZXNldCwgcHJvcHNbaV0sIE5VTEwsCi0gICAgICAgICAgJnByb3BlcnR5KTsKLSAgICB9IGVsc2UgewotICAgICAgcHJvcGVydHkgPSBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChnY2xhc3MsIHByb3BzW2ldKTsKLSAgICB9Ci0gICAgaWYgKCFwcm9wZXJ0eSkgewotICAgICAgLyogdGhlIHBhcmFtZXRlciB3YXMgaW4gdGhlIGtleWZpbGUsIHRoZSBlbGVtZW50IHNhaWQgaXQgc3VwcG9ydGVkIGl0IGJ1dAotICAgICAgICogdGhlbiB0aGUgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCBpbiB0aGUgZWxlbWVudC4gVGhpcyBzaG91bGQgbm90IGhhcHBlbi4gKi8KLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAicHJvcGVydHkgJyVzJyBub3QgaW4gb2JqZWN0IiwgcHJvcHNbaV0pOwotICAgICAgZ19mcmVlIChzdHIpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLyogdHJ5IHRvIGRlc2VyaWFsaXplIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHRoZSBrZXlmaWxlIGFuZCBzZXQgaXQgYXMKLSAgICAgKiB0aGUgb2JqZWN0IHByb3BlcnR5ICovCi0gICAgZ192YWx1ZV9pbml0ICgmZ3ZhbHVlLCBwcm9wZXJ0eS0+dmFsdWVfdHlwZSk7Ci0gICAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJmd2YWx1ZSwgc3RyKSkgewotICAgICAgaWYgKGlzX2NoaWxkX3Byb3h5KSB7Ci0gICAgICAgIGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKChHc3RDaGlsZFByb3h5ICopIHByZXNldCwgcHJvcHNbaV0sCi0gICAgICAgICAgICAmZ3ZhbHVlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoKEdPYmplY3QgKikgcHJlc2V0LCBwcm9wc1tpXSwgJmd2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LAotICAgICAgICAgICJkZXNlcmlhbGl6YXRpb24gb2YgdmFsdWUgJyVzJyBmb3IgcHJvcGVydHkgJyVzJyBmYWlsZWQiLCBzdHIsCi0gICAgICAgICAgcHJvcHNbaV0pOwotICAgIH0KLSAgICBnX3ZhbHVlX3Vuc2V0ICgmZ3ZhbHVlKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLSAgZ19zdHJmcmVldiAocHJvcHMpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fcHJlc2V0czoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAibm8gcHJlc2V0cyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fZ3JvdXA6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIm5vIHByZXNldCBuYW1lZCAnJXMnIiwgbmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19wcm9wZXJ0aWVzOgotICB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJubyBwcm9wZXJ0aWVzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIHNhdmUgdGhlIHByZXNldHMgZmlsZS4gQSBjb3B5IG9mIHRoZSBleGlzdGluZyBwcmVzZXRzIGZpbGUgaXMgc3RvcmVkIGluIGEKLSAqIC5iYWsgZmlsZSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcHJlc2V0X2RlZmF1bHRfc2F2ZV9wcmVzZXRzX2ZpbGUgKEdzdFByZXNldCAqIHByZXNldCkKLXsKLSAgR0tleUZpbGUgKnByZXNldHM7Ci0gIGNvbnN0IGdjaGFyICpwcmVzZXRfcGF0aDsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gIGdjaGFyICpiYWtfZmlsZV9uYW1lOwotICBnYm9vbGVhbiBiYWNrdXAgPSBUUlVFOwotICBnY2hhciAqZGF0YTsKLSAgZ3NpemUgZGF0YV9zaXplOwotCi0gIHByZXNldF9nZXRfcGF0aHMgKHByZXNldCwgJnByZXNldF9wYXRoLCBOVUxMLCBOVUxMKTsKLQotICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLwotICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKLSAgICBnb3RvIG5vX3ByZXNldHM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocHJlc2V0LCAic2F2aW5nIHByZXNldCBmaWxlOiAnJXMnIiwgcHJlc2V0X3BhdGgpOwotCi0gIC8qIGNyZWF0ZSBiYWNrdXAgaWYgcG9zc2libGUgKi8KLSAgYmFrX2ZpbGVfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzLmJhayIsIHByZXNldF9wYXRoKTsKLSAgaWYgKGdfZmlsZV90ZXN0IChiYWtfZmlsZV9uYW1lLCBHX0ZJTEVfVEVTVF9FWElTVFMpKSB7Ci0gICAgaWYgKGdfdW5saW5rIChiYWtfZmlsZV9uYW1lKSkgewotICAgICAgYmFja3VwID0gRkFMU0U7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHByZXNldCwgImNhbm5vdCByZW1vdmUgb2xkIGJhY2t1cCBmaWxlIDogJXMiLAotICAgICAgICAgIGJha19maWxlX25hbWUpOwotICAgIH0KLSAgfQotICBpZiAoYmFja3VwKSB7Ci0gICAgaWYgKGdfcmVuYW1lIChwcmVzZXRfcGF0aCwgYmFrX2ZpbGVfbmFtZSkpIHsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAocHJlc2V0LCAiY2Fubm90IGJhY2t1cCBmaWxlIDogJXMgLT4gJXMiLCBwcmVzZXRfcGF0aCwKLSAgICAgICAgICBiYWtfZmlsZV9uYW1lKTsKLSAgICB9Ci0gIH0KLSAgZ19mcmVlIChiYWtfZmlsZV9uYW1lKTsKLQotICAvKiB1cGRhdGUgZ3N0cmVhbWVyIHZlcnNpb24gKi8KLSAgZ19rZXlfZmlsZV9zZXRfc3RyaW5nIChwcmVzZXRzLCBQUkVTRVRfSEVBREVSLCBQUkVTRVRfSEVBREVSX1ZFUlNJT04sCi0gICAgICBQQUNLQUdFX1ZFUlNJT04pOwotCi0gIC8qIGdldCBuZXcgY29udGVudHMsIHdlZSBuZWVkIHRoaXMgdG8gc2F2ZSBpdCAqLwotICBpZiAoIShkYXRhID0gZ19rZXlfZmlsZV90b19kYXRhIChwcmVzZXRzLCAmZGF0YV9zaXplLCAmZXJyb3IpKSkKLSAgICBnb3RvIGNvbnZlcnRfZmFpbGVkOwotCi0gIC8qIHdyaXRlIHByZXNldHMgKi8KLSAgaWYgKCFnX2ZpbGVfc2V0X2NvbnRlbnRzIChwcmVzZXRfcGF0aCwgZGF0YSwgZGF0YV9zaXplLCAmZXJyb3IpKQotICAgIGdvdG8gd3JpdGVfZmFpbGVkOwotCi0gIGdfZnJlZSAoZGF0YSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19wcmVzZXRzOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsCi0gICAgICAgICJubyBwcmVzZXRzLCB0cnlpbmcgdG8gdW5saW5rIHBvc3NpYmx5IGV4aXN0aW5nIHByZXNldCBmaWxlOiAnJXMnIiwKLSAgICAgICAgcHJlc2V0X3BhdGgpOwotICAgIGdfdW5saW5rIChwcmVzZXRfcGF0aCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1jb252ZXJ0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAiY2FuIG5vdCBnZXQgdGhlIGtleWZpbGUgY29udGVudHM6ICVzIiwKLSAgICAgICAgZXJyb3ItPm1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICAgIGdfZnJlZSAoZGF0YSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cml0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIlVuYWJsZSB0byBzdG9yZSBwcmVzZXQgZmlsZSAlczogJXMiLAotICAgICAgICBwcmVzZXRfcGF0aCwgZXJyb3ItPm1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICAgIGdfZnJlZSAoZGF0YSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIHNhdmUgdGhlIHByZXNldCB3aXRoIHRoZSBnaXZlbiBuYW1lICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdLZXlGaWxlICpwcmVzZXRzOwotICBnY2hhciAqKnByb3BzOwotICBndWludCBpOwotICBHT2JqZWN0Q2xhc3MgKmdjbGFzczsKLSAgZ2Jvb2xlYW4gaXNfY2hpbGRfcHJveHk7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChwcmVzZXQsICJzYXZpbmcgbmV3IHByZXNldDogJXMiLCBuYW1lKTsKLQotICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLwotICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKLSAgICBnb3RvIG5vX3ByZXNldHM7Ci0KLSAgLyogdGFrZSBjb3BpZXMgb2YgY3VycmVudCBnb2JqZWN0IHByb3BlcnRpZXMgZnJvbSBwcmVzZXQgKi8KLSAgaWYgKCEocHJvcHMgPSBnc3RfcHJlc2V0X2dldF9wcm9wZXJ0eV9uYW1lcyAocHJlc2V0KSkpCi0gICAgZ290byBub19wcm9wZXJ0aWVzOwotCi0gIGdjbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKHByZXNldCkpOwotICBpc19jaGlsZF9wcm94eSA9IEdTVF9JU19DSElMRF9QUk9YWSAocHJlc2V0KTsKLQotICAvKiBsb29wIG92ZXIgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBzdG9yZSB0aGUgcHJvcGVydHkgdmFsdWUgaW4gdGhlCi0gICAqIGtleWZpbGUgKi8KLSAgZm9yIChpID0gMDsgcHJvcHNbaV07IGkrKykgewotICAgIEdWYWx1ZSBndmFsdWUgPSB7IDAsIH07Ci0gICAgZ2NoYXIgKnN0cjsKLSAgICBHUGFyYW1TcGVjICpwcm9wZXJ0eSA9IE5VTEw7Ci0KLSAgICBpZiAoaXNfY2hpbGRfcHJveHkpIHsKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9sb29rdXAgKChHc3RDaGlsZFByb3h5ICopIHByZXNldCwgcHJvcHNbaV0sIE5VTEwsCi0gICAgICAgICAgJnByb3BlcnR5KTsKLSAgICB9IGVsc2UgewotICAgICAgcHJvcGVydHkgPSBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChnY2xhc3MsIHByb3BzW2ldKTsKLSAgICB9Ci0gICAgaWYgKCFwcm9wZXJ0eSkgewotICAgICAgLyogdGhlIGVsZW1lbnQgc2FpZCBpdCBzdXBwb3J0ZWQgdGhlIHByb3BlcnR5IGJ1dCB0aGVuIGl0IGRvZXMgbm90IGhhdmUKLSAgICAgICAqIHRoYXQgcHJvcGVydHkuIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uICovCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgInByb3BlcnR5ICclcycgbm90IGluIG9iamVjdCIsIHByb3BzW2ldKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGdfdmFsdWVfaW5pdCAoJmd2YWx1ZSwgcHJvcGVydHktPnZhbHVlX3R5cGUpOwotICAgIGlmIChpc19jaGlsZF9wcm94eSkgewotICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoKEdzdENoaWxkUHJveHkgKikgcHJlc2V0LCBwcm9wc1tpXSwKLSAgICAgICAgICAmZ3ZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5ICgoR09iamVjdCAqKSBwcmVzZXQsIHByb3BzW2ldLCAmZ3ZhbHVlKTsKLSAgICB9Ci0KLSAgICBpZiAoKHN0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZndmFsdWUpKSkgewotICAgICAgZ19rZXlfZmlsZV9zZXRfc3RyaW5nIChwcmVzZXRzLCBuYW1lLCBwcm9wc1tpXSwgKGdwb2ludGVyKSBzdHIpOwotICAgICAgZ19mcmVlIChzdHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgInNlcmlhbGl6YXRpb24gZm9yIHByb3BlcnR5ICclcycgZmFpbGVkIiwKLSAgICAgICAgICBwcm9wc1tpXSk7Ci0gICAgfQotICAgIGdfdmFsdWVfdW5zZXQgKCZndmFsdWUpOwotICB9Ci0gIEdTVF9JTkZPX09CSkVDVCAocHJlc2V0LCAiICBzYXZlZCIpOwotICBnX3N0cmZyZWV2IChwcm9wcyk7Ci0KLSAgLyogc2F2ZSB1cGRhdGVkIHZlcnNpb24gKi8KLSAgcmV0dXJuIGdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldHNfZmlsZSAocHJlc2V0KTsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3ByZXNldHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIm5vIHByZXNldHMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3Byb3BlcnRpZXM6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHByZXNldCwgIm5vIHByb3BlcnRpZXMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogY29waWVzIGFsbCBrZXlzIGFuZCBjb21tZW50cyBmcm9tIG9uZSBncm91cCB0byBhbm90aGVyLCBkZWxldGluZyB0aGUgb2xkCi0gKiBncm91cC4gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ByZXNldF9kZWZhdWx0X3JlbmFtZV9wcmVzZXQgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBvbGRfbmFtZSwKLSAgICBjb25zdCBnY2hhciAqIG5ld19uYW1lKQotewotICBHS2V5RmlsZSAqcHJlc2V0czsKLSAgZ2NoYXIgKnN0cjsKLSAgZ2NoYXIgKiprZXlzOwotICBnc2l6ZSBpLCBudW1fa2V5czsKLQotICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLwotICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKLSAgICBnb3RvIG5vX3ByZXNldHM7Ci0KLSAgaWYgKCFnX2tleV9maWxlX2hhc19ncm91cCAocHJlc2V0cywgb2xkX25hbWUpKQotICAgIGdvdG8gbm9fZ3JvdXA7Ci0KLSAgLyogY29weSBncm91cCBjb21tZW50IGlmIHRoZXJlIGlzIGFueSAqLwotICBpZiAoKHN0ciA9IGdfa2V5X2ZpbGVfZ2V0X2NvbW1lbnQgKHByZXNldHMsIG9sZF9uYW1lLCBOVUxMLCBOVUxMKSkpIHsKLSAgICBnX2tleV9maWxlX3NldF9jb21tZW50IChwcmVzZXRzLCBuZXdfbmFtZSwgTlVMTCwgc3RyLCBOVUxMKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLQotICAvKiBnZXQgYWxsIGtleXMgZnJvbSB0aGUgb2xkIGdyb3VwIGFuZCBjb3B5IHRoZW0gaW4gdGhlIG5ldyBncm91cCAqLwotICBrZXlzID0gZ19rZXlfZmlsZV9nZXRfa2V5cyAocHJlc2V0cywgb2xkX25hbWUsICZudW1fa2V5cywgTlVMTCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKSB7Ci0gICAgLyogY29weSBrZXkgY29tbWVudCBpZiB0aGVyZSBpcyBhbnkgKi8KLSAgICBpZiAoKHN0ciA9IGdfa2V5X2ZpbGVfZ2V0X2NvbW1lbnQgKHByZXNldHMsIG9sZF9uYW1lLCBrZXlzW2ldLCBOVUxMKSkpIHsKLSAgICAgIGdfa2V5X2ZpbGVfc2V0X2NvbW1lbnQgKHByZXNldHMsIG5ld19uYW1lLCBrZXlzW2ldLCBzdHIsIE5VTEwpOwotICAgICAgZ19mcmVlIChzdHIpOwotICAgIH0KLSAgICAvKiBjb3B5IGtleSB2YWx1ZSAqLwotICAgIHN0ciA9IGdfa2V5X2ZpbGVfZ2V0X3ZhbHVlIChwcmVzZXRzLCBvbGRfbmFtZSwga2V5c1tpXSwgTlVMTCk7Ci0gICAgZ19rZXlfZmlsZV9zZXRfdmFsdWUgKHByZXNldHMsIG5ld19uYW1lLCBrZXlzW2ldLCBzdHIpOwotICAgIGdfZnJlZSAoc3RyKTsKLSAgfQotICBnX3N0cmZyZWV2IChrZXlzKTsKLQotICAvKiByZW1vdmUgb2xkIGdyb3VwICovCi0gIGdfa2V5X2ZpbGVfcmVtb3ZlX2dyb3VwIChwcmVzZXRzLCBvbGRfbmFtZSwgTlVMTCk7Ci0KLSAgLyogc2F2ZSB1cGRhdGVkIHZlcnNpb24gKi8KLSAgcmV0dXJuIGdzdF9wcmVzZXRfZGVmYXVsdF9zYXZlX3ByZXNldHNfZmlsZSAocHJlc2V0KTsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3ByZXNldHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIm5vIHByZXNldHMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2dyb3VwOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsICJubyBwcmVzZXQgbmFtZWQgJXMiLCBvbGRfbmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIGRlbGV0ZSBhIGdyb3VwIGZyb20gdGhlIGtleWZpbGUgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ByZXNldF9kZWZhdWx0X2RlbGV0ZV9wcmVzZXQgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHS2V5RmlsZSAqcHJlc2V0czsKLQotICAvKiBnZXQgdGhlIHByZXNldHMgZnJvbSB0aGUgdHlwZSAqLwotICBpZiAoIShwcmVzZXRzID0gcHJlc2V0X2dldF9rZXlmaWxlIChwcmVzZXQpKSkKLSAgICBnb3RvIG5vX3ByZXNldHM7Ci0KLSAgLyogZ2V0IHRoZSBncm91cCAqLwotICBpZiAoIWdfa2V5X2ZpbGVfaGFzX2dyb3VwIChwcmVzZXRzLCBuYW1lKSkKLSAgICBnb3RvIG5vX2dyb3VwOwotCi0gIC8qIHJlbW92ZSB0aGUgZ3JvdXAgKi8KLSAgZ19rZXlfZmlsZV9yZW1vdmVfZ3JvdXAgKHByZXNldHMsIG5hbWUsIE5VTEwpOwotCi0gIC8qIHNhdmUgdXBkYXRlZCB2ZXJzaW9uICovCi0gIHJldHVybiBnc3RfcHJlc2V0X2RlZmF1bHRfc2F2ZV9wcmVzZXRzX2ZpbGUgKHByZXNldCk7Ci0KLSAgLyogRVJST1JTICovCi1ub19wcmVzZXRzOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsICJubyBwcmVzZXRzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19ncm91cDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHJlc2V0LCAibm8gcHJlc2V0IG5hbWVkICVzIiwgbmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ByZXNldF9kZWZhdWx0X3NldF9tZXRhIChHc3RQcmVzZXQgKiBwcmVzZXQsIGNvbnN0IGdjaGFyICogbmFtZSwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgY29uc3QgZ2NoYXIgKiB2YWx1ZSkKLXsKLSAgR0tleUZpbGUgKnByZXNldHM7Ci0gIGdjaGFyICprZXk7Ci0KLSAgLyogZ2V0IHRoZSBwcmVzZXRzIGZyb20gdGhlIHR5cGUgKi8KLSAgaWYgKCEocHJlc2V0cyA9IHByZXNldF9nZXRfa2V5ZmlsZSAocHJlc2V0KSkpCi0gICAgZ290byBub19wcmVzZXRzOwotCi0gIGtleSA9IGdfc3RyZHVwX3ByaW50ZiAoIl9tZXRhLyVzIiwgdGFnKTsKLSAgaWYgKHZhbHVlICYmICp2YWx1ZSkgewotICAgIGdfa2V5X2ZpbGVfc2V0X3ZhbHVlIChwcmVzZXRzLCBuYW1lLCBrZXksIHZhbHVlKTsKLSAgfSBlbHNlIHsKLSAgICBnX2tleV9maWxlX3JlbW92ZV9rZXkgKHByZXNldHMsIG5hbWUsIGtleSwgTlVMTCk7Ci0gIH0KLSAgZ19mcmVlIChrZXkpOwotCi0gIC8qIHNhdmUgdXBkYXRlZCBrZXlmaWxlICovCi0gIHJldHVybiBnc3RfcHJlc2V0X2RlZmF1bHRfc2F2ZV9wcmVzZXRzX2ZpbGUgKHByZXNldCk7Ci0KLSAgLyogRVJST1JTICovCi1ub19wcmVzZXRzOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcmVzZXQsICJubyBwcmVzZXRzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIHRoZSBjYWxsZXIgbXVzdCBmcmVlIEB2YWx1ZSBhZnRlciB1c2FnZSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X21ldGEgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBuYW1lLAotICAgIGNvbnN0IGdjaGFyICogdGFnLCBnY2hhciAqKiB2YWx1ZSkKLXsKLSAgR0tleUZpbGUgKnByZXNldHM7Ci0gIGdjaGFyICprZXk7Ci0KLSAgLyogZ2V0IHRoZSBwcmVzZXRzIGZyb20gdGhlIHR5cGUgKi8KLSAgaWYgKCEocHJlc2V0cyA9IHByZXNldF9nZXRfa2V5ZmlsZSAocHJlc2V0KSkpCi0gICAgZ290byBub19wcmVzZXRzOwotCi0gIGtleSA9IGdfc3RyZHVwX3ByaW50ZiAoIl9tZXRhLyVzIiwgdGFnKTsKLSAgKnZhbHVlID0gZ19rZXlfZmlsZV9nZXRfdmFsdWUgKHByZXNldHMsIG5hbWUsIGtleSwgTlVMTCk7Ci0gIGdfZnJlZSAoa2V5KTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3ByZXNldHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHByZXNldCwgIm5vIHByZXNldHMiKTsKLSAgICAqdmFsdWUgPSBOVUxMOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiB3cmFwcGVyICovCi0KLS8qKgotICogZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzOgotICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAotICoKLSAqIEdldCBhIGNvcHkgb2YgcHJlc2V0IG5hbWVzIGFzIGEgJU5VTEwgdGVybWluYXRlZCBzdHJpbmcgYXJyYXkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSBnY2hhciopOgotICogICAgIGxpc3Qgd2l0aCBuYW1lcywgdXNlIGdfc3RyZnJlZXYoKSBhZnRlciB1c2FnZS4KLSAqLwotZ2NoYXIgKioKLWdzdF9wcmVzZXRfZ2V0X3ByZXNldF9uYW1lcyAoR3N0UHJlc2V0ICogcHJlc2V0KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BSRVNFVCAocHJlc2V0KSwgTlVMTCk7Ci0KLSAgcmV0dXJuIChHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UgKHByZXNldCktPmdldF9wcmVzZXRfbmFtZXMgKHByZXNldCkpOwotfQotCi0vKioKLSAqIGdzdF9wcmVzZXRfZ2V0X3Byb3BlcnR5X25hbWVzOgotICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAotICoKLSAqIEdldCBhIHRoZSBuYW1lcyBvZiB0aGUgR09iamVjdCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHByZXNldHMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGVsZW1lbnQtdHlwZSBnY2hhciopOiBhbgotICogICBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB3aGljaCBzaG91bGQgYmUgZnJlZWQgd2l0aCBnX3N0cmZyZWV2KCkgYWZ0ZXIgdXNlLgotICovCi1nY2hhciAqKgotZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMgKEdzdFByZXNldCAqIHByZXNldCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QUkVTRVQgKHByZXNldCksIE5VTEwpOwotCi0gIHJldHVybiAoR1NUX1BSRVNFVF9HRVRfSU5URVJGQUNFIChwcmVzZXQpLT5nZXRfcHJvcGVydHlfbmFtZXMgKHByZXNldCkpOwotfQotCi0vKioKLSAqIGdzdF9wcmVzZXRfbG9hZF9wcmVzZXQ6Ci0gKiBAcHJlc2V0OiBhICNHT2JqZWN0IHRoYXQgaW1wbGVtZW50cyAjR3N0UHJlc2V0Ci0gKiBAbmFtZTogcHJlc2V0IG5hbWUgdG8gbG9hZAotICoKLSAqIExvYWQgdGhlIGdpdmVuIHByZXNldC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcywgJUZBTFNFIGlmIGUuZy4gdGhlcmUgaXMgbm8gcHJlc2V0IHdpdGggdGhhdCBAbmFtZQotICovCi1nYm9vbGVhbgotZ3N0X3ByZXNldF9sb2FkX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJFU0VUIChwcmVzZXQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIChHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UgKHByZXNldCktPmxvYWRfcHJlc2V0IChwcmVzZXQsIG5hbWUpKTsKLX0KLQotLyoqCi0gKiBnc3RfcHJlc2V0X3NhdmVfcHJlc2V0OgotICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAotICogQG5hbWU6IHByZXNldCBuYW1lIHRvIHNhdmUKLSAqCi0gKiBTYXZlIHRoZSBjdXJyZW50IG9iamVjdCBzZXR0aW5ncyBhcyBhIHByZXNldCB1bmRlciB0aGUgZ2l2ZW4gbmFtZS4gSWYgdGhlcmUKLSAqIGlzIGFscmVhZHkgYSBwcmVzZXQgYnkgdGhpcyBAbmFtZSBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzLCAlRkFMU0UKLSAqLwotZ2Jvb2xlYW4KLWdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BSRVNFVCAocHJlc2V0KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSwgRkFMU0UpOwotCi0gIHJldHVybiAoR1NUX1BSRVNFVF9HRVRfSU5URVJGQUNFIChwcmVzZXQpLT5zYXZlX3ByZXNldCAocHJlc2V0LCBuYW1lKSk7Ci19Ci0KLS8qKgotICogZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0OgotICogQHByZXNldDogYSAjR09iamVjdCB0aGF0IGltcGxlbWVudHMgI0dzdFByZXNldAotICogQG9sZF9uYW1lOiBjdXJyZW50IHByZXNldCBuYW1lCi0gKiBAbmV3X25hbWU6IG5ldyBwcmVzZXQgbmFtZQotICoKLSAqIFJlbmFtZXMgYSBwcmVzZXQuIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcmVzZXQgYnkgdGhlIEBuZXdfbmFtZSBpdCB3aWxsIGJlCi0gKiBvdmVyd3JpdHRlbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcywgJUZBTFNFIGlmIGUuZy4gdGhlcmUgaXMgbm8gcHJlc2V0IHdpdGggQG9sZF9uYW1lCi0gKi8KLWdib29sZWFuCi1nc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXQgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBvbGRfbmFtZSwKLSAgICBjb25zdCBnY2hhciAqIG5ld19uYW1lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BSRVNFVCAocHJlc2V0KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAob2xkX25hbWUsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5ld19uYW1lLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIChHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UgKHByZXNldCktPnJlbmFtZV9wcmVzZXQgKHByZXNldCwgb2xkX25hbWUsCi0gICAgICAgICAgbmV3X25hbWUpKTsKLX0KLQotLyoqCi0gKiBnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQ6Ci0gKiBAcHJlc2V0OiBhICNHT2JqZWN0IHRoYXQgaW1wbGVtZW50cyAjR3N0UHJlc2V0Ci0gKiBAbmFtZTogcHJlc2V0IG5hbWUgdG8gcmVtb3ZlCi0gKgotICogRGVsZXRlIHRoZSBnaXZlbiBwcmVzZXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgZm9yIHN1Y2Nlc3MsICVGQUxTRSBpZiBlLmcuIHRoZXJlIGlzIG5vIHByZXNldCB3aXRoIHRoYXQgQG5hbWUKLSAqLwotZ2Jvb2xlYW4KLWdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldCAoR3N0UHJlc2V0ICogcHJlc2V0LCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJFU0VUIChwcmVzZXQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIChHU1RfUFJFU0VUX0dFVF9JTlRFUkZBQ0UgKHByZXNldCktPmRlbGV0ZV9wcmVzZXQgKHByZXNldCwgbmFtZSkpOwotfQotCi0vKioKLSAqIGdzdF9wcmVzZXRfc2V0X21ldGE6Ci0gKiBAcHJlc2V0OiBhICNHT2JqZWN0IHRoYXQgaW1wbGVtZW50cyAjR3N0UHJlc2V0Ci0gKiBAbmFtZTogcHJlc2V0IG5hbWUKLSAqIEB0YWc6IG1ldGEgZGF0YSBpdGVtIG5hbWUKLSAqIEB2YWx1ZTogKGFsbG93LW5vbmUpOiBuZXcgdmFsdWUKLSAqCi0gKiBTZXRzIGEgbmV3IEB2YWx1ZSBmb3IgYW4gZXhpc3RpbmcgbWV0YSBkYXRhIGl0ZW0gb3IgYWRkcyBhIG5ldyBpdGVtLiBNZXRhCi0gKiBkYXRhIEB0YWcgbmFtZXMgY2FuIGJlIHNvbWV0aGluZyBsaWtlIGUuZy4gImNvbW1lbnQiLiBTdXBwbHlpbmcgJU5VTEwgZm9yIHRoZQotICogQHZhbHVlIHdpbGwgdW5zZXQgYW4gZXhpc3RpbmcgdmFsdWUuCi0gKgotICogUmV0dXJuczogJVRSVUUgZm9yIHN1Y2Nlc3MsICVGQUxTRSBpZiBlLmcuIHRoZXJlIGlzIG5vIHByZXNldCB3aXRoIHRoYXQgQG5hbWUKLSAqLwotZ2Jvb2xlYW4KLWdzdF9wcmVzZXRfc2V0X21ldGEgKEdzdFByZXNldCAqIHByZXNldCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBnY2hhciAqIHRhZywKLSAgICBjb25zdCBnY2hhciAqIHZhbHVlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BSRVNFVCAocHJlc2V0KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIEdTVF9QUkVTRVRfR0VUX0lOVEVSRkFDRSAocHJlc2V0KS0+c2V0X21ldGEgKHByZXNldCwgbmFtZSwgdGFnLCB2YWx1ZSk7Ci19Ci0KLS8qKgotICogZ3N0X3ByZXNldF9nZXRfbWV0YToKLSAqIEBwcmVzZXQ6IGEgI0dPYmplY3QgdGhhdCBpbXBsZW1lbnRzICNHc3RQcmVzZXQKLSAqIEBuYW1lOiBwcmVzZXQgbmFtZQotICogQHRhZzogbWV0YSBkYXRhIGl0ZW0gbmFtZQotICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpOiB2YWx1ZQotICoKLSAqIEdldHMgdGhlIEB2YWx1ZSBmb3IgYW4gZXhpc3RpbmcgbWV0YSBkYXRhIEB0YWcuIE1ldGEgZGF0YSBAdGFnIG5hbWVzIGNhbiBiZQotICogc29tZXRoaW5nIGxpa2UgZS5nLiAiY29tbWVudCIuIFJldHVybmVkIHZhbHVlcyBuZWVkIHRvIGJlIHJlbGVhc2VkIHdoZW4gZG9uZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcywgJUZBTFNFIGlmIGUuZy4gdGhlcmUgaXMgbm8gcHJlc2V0IHdpdGggdGhhdCBAbmFtZQotICogb3Igbm8gdmFsdWUgZm9yIHRoZSBnaXZlbiBAdGFnCi0gKi8KLWdib29sZWFuCi1nc3RfcHJlc2V0X2dldF9tZXRhIChHc3RQcmVzZXQgKiBwcmVzZXQsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgZ2NoYXIgKiB0YWcsCi0gICAgZ2NoYXIgKiogdmFsdWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUFJFU0VUIChwcmVzZXQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIEdTVF9QUkVTRVRfR0VUX0lOVEVSRkFDRSAocHJlc2V0KS0+Z2V0X21ldGEgKHByZXNldCwgbmFtZSwgdGFnLCB2YWx1ZSk7Ci19Ci0KLS8qKgotICogZ3N0X3ByZXNldF9zZXRfYXBwX2RpcjoKLSAqIEBhcHBfZGlyOiB0aGUgYXBwbGljYXRpb24gc3BlY2lmaWMgcHJlc2V0IGRpcgotICoKLSAqIFNldHMgYW4gZXh0cmEgZGlyZWN0b3J5IGFzIGFuIGFic29sdXRlIHBhdGggdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuCi0gKiBsb29raW5nIGZvciBwcmVzZXRzLiBBbnkgcHJlc2V0cyBpbiB0aGUgYXBwbGljYXRpb24gZGlyIHdpbGwgc2hhZG93IHRoZSAKLSAqIHN5c3RlbSBwcmVzZXRzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzLCAlRkFMU0UgaWYgdGhlIGRpciBhbHJlYWR5IGhhcyBiZWVuIHNldAotICovCi1nYm9vbGVhbgotZ3N0X3ByZXNldF9zZXRfYXBwX2RpciAoY29uc3QgZ2NoYXIgKiBhcHBfZGlyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYXBwX2RpciwgRkFMU0UpOwotCi0gIGlmICghcHJlc2V0X2FwcF9kaXIpIHsKLSAgICBwcmVzZXRfYXBwX2RpciA9IGdfc3RyZHVwIChhcHBfZGlyKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogZ3N0X3ByZXNldF9nZXRfYXBwX2RpcjoKLSAqCi0gKiBHZXRzIHRoZSBkaXJlY3RvcnkgZm9yIGFwcGxpY2F0aW9uIHNwZWNpZmljIHByZXNldHMgaWYgc2V0IGJ5IHRoZQotICogYXBwbGljYXRpb24uCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogdGhlIGRpcmVjdG9yeSBvciAlTlVMTCwgZG9uJ3QgZnJlZSBvciBtb2RpZnkKLSAqIHRoZSBzdHJpbmcKLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3ByZXNldF9nZXRfYXBwX2RpciAodm9pZCkKLXsKLSAgcmV0dXJuIHByZXNldF9hcHBfZGlyOwotfQotCi0vKioKLSAqIGdzdF9wcmVzZXRfaXNfZWRpdGFibGU6Ci0gKiBAcHJlc2V0OiBhICNHT2JqZWN0IHRoYXQgaW1wbGVtZW50cyAjR3N0UHJlc2V0Ci0gKgotICogQ2hlY2sgaWYgb25lIGNhbiBhZGQgbmV3IHByZXNldHMsIGNoYW5nZSBleGlzdGluZyBvbmVzIGFuZCByZW1vdmUgcHJlc2V0cy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBwcmVzZXRzIGFyZSBlZGl0YWJsZSBvciAlRkFMU0UgaWYgdGhleSBhcmUgc3RhdGljCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3ByZXNldF9pc19lZGl0YWJsZSAoR3N0UHJlc2V0ICogcHJlc2V0KQotewotICBHc3RQcmVzZXRJbnRlcmZhY2UgKmlmYWNlID0gR1NUX1BSRVNFVF9HRVRfSU5URVJGQUNFIChwcmVzZXQpOwotCi0gIHJldHVybiBpZmFjZS0+c2F2ZV9wcmVzZXQgJiYgaWZhY2UtPmRlbGV0ZV9wcmVzZXQ7Ci19Ci0KLS8qIGNsYXNzIGludGVybmFscyAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X3ByZXNldF9jbGFzc19pbml0IChHc3RQcmVzZXRJbnRlcmZhY2UgKiBpZmFjZSkKLXsKLSAgaWZhY2UtPmdldF9wcmVzZXRfbmFtZXMgPSBnc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X3ByZXNldF9uYW1lczsKLSAgaWZhY2UtPmdldF9wcm9wZXJ0eV9uYW1lcyA9IGdzdF9wcmVzZXRfZGVmYXVsdF9nZXRfcHJvcGVydHlfbmFtZXM7Ci0KLSAgaWZhY2UtPmxvYWRfcHJlc2V0ID0gZ3N0X3ByZXNldF9kZWZhdWx0X2xvYWRfcHJlc2V0OwotICBpZmFjZS0+c2F2ZV9wcmVzZXQgPSBnc3RfcHJlc2V0X2RlZmF1bHRfc2F2ZV9wcmVzZXQ7Ci0gIGlmYWNlLT5yZW5hbWVfcHJlc2V0ID0gZ3N0X3ByZXNldF9kZWZhdWx0X3JlbmFtZV9wcmVzZXQ7Ci0gIGlmYWNlLT5kZWxldGVfcHJlc2V0ID0gZ3N0X3ByZXNldF9kZWZhdWx0X2RlbGV0ZV9wcmVzZXQ7Ci0KLSAgaWZhY2UtPnNldF9tZXRhID0gZ3N0X3ByZXNldF9kZWZhdWx0X3NldF9tZXRhOwotICBpZmFjZS0+Z2V0X21ldGEgPSBnc3RfcHJlc2V0X2RlZmF1bHRfZ2V0X21ldGE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHJlc2V0X2Jhc2VfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcykKLXsKLSAgc3RhdGljIGdib29sZWFuIGluaXRpYWxpemVkID0gRkFMU0U7Ci0KLSAgaWYgKCFpbml0aWFsaXplZCkgewotICAgIC8qIGluaXQgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLwotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChHU1RfQ0FUX0RFRkFVTFQsICJwcmVzZXQiLAotICAgICAgICBHU1RfREVCVUdfRkdfV0hJVEUgfCBHU1RfREVCVUdfQkdfQkxBQ0ssICJwcmVzZXQgaW50ZXJmYWNlIik7Ci0KLSAgICAvKiBjcmVhdGUgcXVhcmtzIGZvciB1c2Ugd2l0aCBnX3R5cGVfe2csc31ldF9xZGF0YSgpICovCi0gICAgcHJlc2V0X3F1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJHc3RQcmVzZXQ6OnByZXNldHMiKTsKLSAgICBwcmVzZXRfdXNlcl9wYXRoX3F1YXJrID0KLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJHc3RQcmVzZXQ6OnVzZXJfcGF0aCIpOwotICAgIHByZXNldF9hcHBfcGF0aF9xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiR3N0UHJlc2V0OjphcHBfcGF0aCIpOwotICAgIHByZXNldF9zeXN0ZW1fcGF0aF9xdWFyayA9Ci0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiR3N0UHJlc2V0OjpzeXN0ZW1fcGF0aCIpOwotCi0jaWYgMAotICAgIC8qIGNyZWF0ZSBpbnRlcmZhY2UgcHJvcGVydGllcywgZWFjaCBlbGVtZW50IHdvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcwotICAgICAqICAgZ19vYmplY3RfY2xhc3Nfb3ZlcnJpZGVfcHJvcGVydHkoZ29iamVjdF9jbGFzcywgUFJPUF9QUkVTRVRfTkFNRSwgInByZXNldC1uYW1lIik7Ci0gICAgICogYW5kIGluIF9zZXRfcHJvcGVydHkoKSBkbwotICAgICAqICAgY2FzZSBQUk9QX1BSRVNFVF9OQU1FOiB7Ci0gICAgICogICAgIGdjaGFyICpuYW1lID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICogICAgIGlmIChuYW1lKQotICAgICAqICAgICAgIGdzdF9wcmVzZXRfbG9hZF9wcmVzZXQocHJlc2V0LCBuYW1lKTsKLSAgICAgKiAgIH0gYnJlYWs7Ci0gICAgICovCi0gICAgZ19vYmplY3RfaW50ZXJmYWNlX2luc3RhbGxfcHJvcGVydHkgKGdfY2xhc3MsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwcmVzZXQtbmFtZSIsCi0gICAgICAgICAgICAicHJlc2V0LW5hbWUgcHJvcGVydHkiLAotICAgICAgICAgICAgImxvYWQgZ2l2ZW4gcHJlc2V0IiwgTlVMTCwgR19QQVJBTV9XUklUQUJMRSkpOwotI2VuZGlmCi0KLSAgICBpbml0aWFsaXplZCA9IFRSVUU7Ci0gIH0KLX0KLQotR1R5cGUKLWdzdF9wcmVzZXRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSB0eXBlID0gMDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZ0eXBlKSkgewotICAgIEdUeXBlIF90eXBlOwotICAgIGNvbnN0IEdUeXBlSW5mbyBpbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RQcmVzZXRJbnRlcmZhY2UpLAotICAgICAgKEdCYXNlSW5pdEZ1bmMpIGdzdF9wcmVzZXRfYmFzZV9pbml0LCAgICAgLyogYmFzZV9pbml0ICovCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfZmluYWxpemUgKi8KLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X3ByZXNldF9jbGFzc19pbml0LCAgIC8qIGNsYXNzX2luaXQgKi8KLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogY2xhc3NfZmluYWxpemUgKi8KLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogY2xhc3NfZGF0YSAqLwotICAgICAgMCwKLSAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogbl9wcmVhbGxvY3MgKi8KLSAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgLyogaW5zdGFuY2VfaW5pdCAqLwotICAgIH07Ci0gICAgX3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHX1RZUEVfSU5URVJGQUNFLCAiR3N0UHJlc2V0IiwgJmluZm8sIDApOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmdHlwZSwgX3R5cGUpOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHByZXNldC5oIGIvZ3N0L2dzdHByZXNldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzhlY2NkLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RwcmVzZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0cHJlc2V0Lmg6IGhlbHBlciBpbnRlcmZhY2UgaGVhZGVyIGZvciBlbGVtZW50IHByZXNldHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1BSRVNFVF9IX18KLSNkZWZpbmUgX19HU1RfUFJFU0VUX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9QUkVTRVQgICAgICAgICAgICAgICAoZ3N0X3ByZXNldF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUFJFU0VUKG9iaikgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9QUkVTRVQsIEdzdFByZXNldCkpCi0jZGVmaW5lIEdTVF9JU19QUkVTRVQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1BSRVNFVCkpCi0jZGVmaW5lIEdTVF9QUkVTRVRfR0VUX0lOVEVSRkFDRShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0lOVEVSRkFDRSAoKG9iaiksIEdTVF9UWVBFX1BSRVNFVCwgR3N0UHJlc2V0SW50ZXJmYWNlKSkKLQotLyoqCi0gKiBHc3RQcmVzZXQ6Ci0gKgotICogT3BhcXVlICNHc3RQcmVzZXQgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RQcmVzZXQgR3N0UHJlc2V0OyAvKiBkdW1teSBvYmplY3QgKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RQcmVzZXRJbnRlcmZhY2UgR3N0UHJlc2V0SW50ZXJmYWNlOwotCi0vKioKLSAqIEdzdFByZXNldEludGVyZmFjZToKLSAqIEBwYXJlbnQ6IHBhcmVudCBpbnRlcmZhY2UgdHlwZS4KLSAqIEBnZXRfcHJlc2V0X25hbWVzOiB2aXJ0dWFsIG1ldGhvZCB0byBnZXQgbGlzdCBvZiBwcmVzZXRzCi0gKiBAZ2V0X3Byb3BlcnR5X25hbWVzOiB2aXJ0dWFsIG1ldGhvZHMgdG8gZ2V0IHByb3BlcnRpZXMgdGhhdCBhcmUgcGVyc2lzdGVudAotICogQGxvYWRfcHJlc2V0OiB2aXJ0dWFsIG1ldGhvZHMgdG8gbG9hZCBhIHByZXNldCBpbnRvIHByb3BlcnRpZXMKLSAqIEBzYXZlX3ByZXNldDogdmlydHVhbCBtZXRob2RzIHRvIHNhdmUgcHJvcGVydGllcyBpbnRvIGEgcHJlc2V0Ci0gKiBAcmVuYW1lX3ByZXNldDogdmlydHVhbCBtZXRob2RzIHRvIHJlbmFtZSBhIHByZXNldAotICogQGRlbGV0ZV9wcmVzZXQ6IHZpcnR1YWwgbWV0aG9kcyB0byByZW1vdmUgYSBwcmVzZXQKLSAqIEBzZXRfbWV0YTogdmlydHVhbCBtZXRob2RzIHRvIHNldCB0ZXh0dWFsIG1ldGEgZGF0YSB0byBhIHByZXNldAotICogQGdldF9tZXRhOiB2aXJ0dWFsIG1ldGhvZHMgdG8gZ2V0IHRleHR1YWwgbWV0YSBkYXRhIGZyb20gYSBwcmVzZXQKLSAqCi0gKiAjR3N0UHJlc2V0IGludGVyZmFjZS4KLSAqLwotc3RydWN0IF9Hc3RQcmVzZXRJbnRlcmZhY2UKLXsKLSAgR1R5cGVJbnRlcmZhY2UgcGFyZW50OwotCi0gIC8qIG1ldGhvZHMgKi8KLSAgZ2NoYXIqKiAgICAgICgqZ2V0X3ByZXNldF9uYW1lcykgICAgKEdzdFByZXNldCAqcHJlc2V0KTsKLQotICBnY2hhcioqICAgICAgKCpnZXRfcHJvcGVydHlfbmFtZXMpICAoR3N0UHJlc2V0ICpwcmVzZXQpOwotCi0gIGdib29sZWFuICAgICAoKmxvYWRfcHJlc2V0KSAgICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm5hbWUpOwotICBnYm9vbGVhbiAgICAgKCpzYXZlX3ByZXNldCkgICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lKTsKLSAgZ2Jvb2xlYW4gICAgICgqcmVuYW1lX3ByZXNldCkgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqb2xkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbmV3X25hbWUpOwotICBnYm9vbGVhbiAgICAgKCpkZWxldGVfcHJlc2V0KSAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lKTsKLQotICBnYm9vbGVhbiAgICAgKCpzZXRfbWV0YSkgICAgICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRhZywgY29uc3QgZ2NoYXIgKnZhbHVlKTsKLSAgZ2Jvb2xlYW4gICAgICgqZ2V0X21ldGEpICAgICAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0YWcsIGdjaGFyICoqdmFsdWUpOwotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSBnc3RfcHJlc2V0X2dldF90eXBlKHZvaWQpOwotCi1nY2hhcioqICAgICAgZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzICAgKEdzdFByZXNldCAqcHJlc2V0KSBHX0dOVUNfTUFMTE9DOwotCi1nY2hhcioqICAgICAgZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMgKEdzdFByZXNldCAqcHJlc2V0KSBHX0dOVUNfTUFMTE9DOwotCi1nYm9vbGVhbiAgICAgZ3N0X3ByZXNldF9sb2FkX3ByZXNldCAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3ByZXNldF9zYXZlX3ByZXNldCAgICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3ByZXNldF9yZW5hbWVfcHJlc2V0ICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqb2xkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpuZXdfbmFtZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3ByZXNldF9kZWxldGVfcHJlc2V0ICAgICAgKEdzdFByZXNldCAqcHJlc2V0LCBjb25zdCBnY2hhciAqbmFtZSk7Ci0KLWdib29sZWFuICAgICBnc3RfcHJlc2V0X3NldF9tZXRhICAgICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQsIGNvbnN0IGdjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdGFnLCBjb25zdCBnY2hhciAqdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF9wcmVzZXRfZ2V0X21ldGEgICAgICAgICAgIChHc3RQcmVzZXQgKnByZXNldCwgY29uc3QgZ2NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0YWcsIGdjaGFyICoqdmFsdWUpOwotCi1nYm9vbGVhbiAgICAgZ3N0X3ByZXNldF9zZXRfYXBwX2RpciAgICAgICAgKGNvbnN0IGdjaGFyICphcHBfZGlyKTsKLWNvbnN0IGdjaGFyICpnc3RfcHJlc2V0X2dldF9hcHBfZGlyICAgICAgICAodm9pZCk7Ci0KLWdib29sZWFuICAgICBnc3RfcHJlc2V0X2lzX2VkaXRhYmxlICAgICAgICAoR3N0UHJlc2V0ICpwcmVzZXQpOwotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1BSRVNFVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3Rwcm90ZWN0aW9uLmMgYi9nc3QvZ3N0cHJvdGVjdGlvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWU1MmVhLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3Rwcm90ZWN0aW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEzPiBZb3VWaWV3IFRWIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0cHJvdGVjdGlvbgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBGdW5jdGlvbnMgYW5kIGNsYXNzZXMgdG8gc3VwcG9ydCBlbmNyeXB0ZWQgc3RyZWFtcy4KLSAqCi0gKiBUaGUgR3N0UHJvdGVjdGlvbk1ldGEgY2xhc3MgZW5hYmxlcyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlY3J5cHQgYQotICogI0dzdEJ1ZmZlciB0byBiZSBhdHRhY2hlZCB0byB0aGF0IGJ1ZmZlci4KLSAqCi0gKiBUeXBpY2FsbHksIGEgZGVtdXhlciBlbGVtZW50IHdvdWxkIGF0dGFjaCBHc3RQcm90ZWN0aW9uTWV0YSBvYmplY3RzCi0gKiB0byB0aGUgYnVmZmVycyB0aGF0IGl0IHB1c2hlcyBkb3duc3RyZWFtLiBUaGUgZGVtdXhlciB3b3VsZCBwYXJzZSB0aGUKLSAqIHByb3RlY3Rpb24gaW5mb3JtYXRpb24gZm9yIGEgdmlkZW8vYXVkaW8gZnJhbWUgZnJvbSBpdHMgaW5wdXQgZGF0YSBhbmQgdXNlCi0gKiB0aGlzIGluZm9ybWF0aW9uIHRvIHBvcHVsYXRlIHRoZSAjR3N0U3RydWN0dXJlIEBpbmZvIGZpZWxkLAotICogd2hpY2ggaXMgdGhlbiBlbmNhcHN1bGF0ZWQgaW4gYSBHc3RQcm90ZWN0aW9uTWV0YSBvYmplY3QgYW5kIGF0dGFjaGVkIHRvCi0gKiB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQgYnVmZmVyIHVzaW5nIHRoZSBnc3RfYnVmZmVyX2FkZF9wcm90ZWN0aW9uX21ldGEoKQotICogZnVuY3Rpb24uIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGF0dGFjaGVkIEdzdFByb3RlY3Rpb25NZXRhIHdvdWxkIGJlCi0gKiB1c2VkIGJ5IGEgZG93bnN0cmVhbSBkZWNyeXB0ZXIgZWxlbWVudCB0byByZWNvdmVyIHRoZSBvcmlnaW5hbCB1bmVuY3J5cHRlZAotICogZnJhbWUuCi0gKgotICogU2luY2U6IDEuNgotICovCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdHByb3RlY3Rpb24uaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgR1NUX0NBVF9QUk9URUNUSU9OCi0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHJvdGVjdGlvbl9tZXRhX2luaXQgKEdzdE1ldGEgKiBtZXRhLCBncG9pbnRlciBwYXJhbXMsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotc3RhdGljIHZvaWQgZ3N0X3Byb3RlY3Rpb25fbWV0YV9mcmVlIChHc3RNZXRhICogbWV0YSwgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotc3RhdGljIGNvbnN0IGdjaGFyICpnc3RfcHJvdGVjdGlvbl9mYWN0b3J5X2NoZWNrIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3QsCi0gICAgY29uc3QgZ2NoYXIgKiogc3lzdGVtX2lkZW50aWZpZXJzKTsKLQotR1R5cGUKLWdzdF9wcm90ZWN0aW9uX21ldGFfYXBpX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgR1R5cGUgdHlwZTsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICp0YWdzW10gPSB7IE5VTEwgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZ0eXBlKSkgewotICAgIEdUeXBlIF90eXBlID0gZ3N0X21ldGFfYXBpX3R5cGVfcmVnaXN0ZXIgKCJHc3RQcm90ZWN0aW9uTWV0YUFQSSIsIHRhZ3MpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmdHlwZSwgX3R5cGUpOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wcm90ZWN0aW9uX21ldGFfaW5pdCAoR3N0TWV0YSAqIG1ldGEsIGdwb2ludGVyIHBhcmFtcywgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RQcm90ZWN0aW9uTWV0YSAqcHJvdGVjdGlvbl9tZXRhID0gKEdzdFByb3RlY3Rpb25NZXRhICopIG1ldGE7Ci0KLSAgcHJvdGVjdGlvbl9tZXRhLT5pbmZvID0gTlVMTDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wcm90ZWN0aW9uX21ldGFfZnJlZSAoR3N0TWV0YSAqIG1ldGEsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UHJvdGVjdGlvbk1ldGEgKnByb3RlY3Rpb25fbWV0YSA9IChHc3RQcm90ZWN0aW9uTWV0YSAqKSBtZXRhOwotCi0gIGlmIChwcm90ZWN0aW9uX21ldGEtPmluZm8pCi0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwcm90ZWN0aW9uX21ldGEtPmluZm8pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wcm90ZWN0aW9uX21ldGFfdHJhbnNmb3JtIChHc3RCdWZmZXIgKiB0cmFuc2J1ZiwgR3N0TWV0YSAqIG1ldGEsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBHUXVhcmsgdHlwZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0UHJvdGVjdGlvbk1ldGEgKnByb3RlY3Rpb25fbWV0YSA9IChHc3RQcm90ZWN0aW9uTWV0YSAqKSBtZXRhOwotCi0gIGlmIChHU1RfTUVUQV9UUkFOU0ZPUk1fSVNfQ09QWSAodHlwZSkpIHsKLSAgICBHc3RNZXRhVHJhbnNmb3JtQ29weSAqY29weSA9IGRhdGE7Ci0gICAgaWYgKCFjb3B5LT5yZWdpb24pIHsKLSAgICAgIC8qIG9ubHkgY29weSBpZiB0aGUgY29tcGxldGUgZGF0YSBpcyBjb3BpZWQgYXMgd2VsbCAqLwotICAgICAgZ3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhICh0cmFuc2J1ZiwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX2NvcHkgKHByb3RlY3Rpb25fbWV0YS0+aW5mbykpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIHRyYW5zZm9ybSB0eXBlIG5vdCBzdXBwb3J0ZWQgKi8KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWNvbnN0IEdzdE1ldGFJbmZvICoKLWdzdF9wcm90ZWN0aW9uX21ldGFfZ2V0X2luZm8gKHZvaWQpCi17Ci0gIHN0YXRpYyBjb25zdCBHc3RNZXRhSW5mbyAqcHJvdGVjdGlvbl9tZXRhX2luZm8gPSBOVUxMOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnByb3RlY3Rpb25fbWV0YV9pbmZvKSkgewotICAgIGNvbnN0IEdzdE1ldGFJbmZvICptZXRhID0KLSAgICAgICAgZ3N0X21ldGFfcmVnaXN0ZXIgKEdTVF9QUk9URUNUSU9OX01FVEFfQVBJX1RZUEUsICJHc3RQcm90ZWN0aW9uTWV0YSIsCi0gICAgICAgIHNpemVvZiAoR3N0UHJvdGVjdGlvbk1ldGEpLCBnc3RfcHJvdGVjdGlvbl9tZXRhX2luaXQsCi0gICAgICAgIGdzdF9wcm90ZWN0aW9uX21ldGFfZnJlZSwgZ3N0X3Byb3RlY3Rpb25fbWV0YV90cmFuc2Zvcm0pOwotCi0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZwcm90ZWN0aW9uX21ldGFfaW5mbywgbWV0YSk7Ci0gIH0KLSAgcmV0dXJuIHByb3RlY3Rpb25fbWV0YV9pbmZvOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfYWRkX3Byb3RlY3Rpb25fbWV0YToKLSAqIEBidWZmZXI6ICNHc3RCdWZmZXIgaG9sZGluZyBhbiBlbmNyeXB0ZWQgc2FtcGxlLCB0byB3aGljaCBwcm90ZWN0aW9uCi0gKiAgICAgbWV0YWRhdGEgc2hvdWxkIGJlIGFkZGVkLgotICogQGluZm86ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0U3RydWN0dXJlIGhvbGRpbmcgY3J5cHRvZ3JhcGhpYwotICogICAgIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHRoZSBzYW1wbGUgY29udGFpbmVkIGluIEBidWZmZXIuIFRoaXMKLSAqICAgICBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgQGluZm8uCi0gKgotICogQXR0YWNoZXMgcHJvdGVjdGlvbiBtZXRhZGF0YSB0byBhICNHc3RCdWZmZXIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgdG8gdGhlIGFkZGVkICNHc3RQcm90ZWN0aW9uTWV0YSBpZiBzdWNjZXNzZnVsOyAlTlVMTCBpZgotICogdW5zdWNjZXNzZnVsLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0UHJvdGVjdGlvbk1ldGEgKgotZ3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhIChHc3RCdWZmZXIgKiBidWZmZXIsIEdzdFN0cnVjdHVyZSAqIGluZm8pCi17Ci0gIEdzdFByb3RlY3Rpb25NZXRhICptZXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWZmZXIpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8gIT0gTlVMTCwgTlVMTCk7Ci0KLSAgbWV0YSA9Ci0gICAgICAoR3N0UHJvdGVjdGlvbk1ldGEgKikgZ3N0X2J1ZmZlcl9hZGRfbWV0YSAoYnVmZmVyLAotICAgICAgR1NUX1BST1RFQ1RJT05fTUVUQV9JTkZPLCBOVUxMKTsKLQotICBtZXRhLT5pbmZvID0gaW5mbzsKLQotICByZXR1cm4gbWV0YTsKLX0KLQotLyoqCi0gKiBnc3RfcHJvdGVjdGlvbl9zZWxlY3Rfc3lzdGVtOgotICogQHN5c3RlbV9pZGVudGlmaWVyczogKHRyYW5zZmVyIG5vbmUpOiBBIG51bGwgdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzCi0gKiB0aGF0IGNvbnRhaW5zIHRoZSBVVUlEIHZhbHVlcyBvZiBlYWNoIHByb3RlY3Rpb24gc3lzdGVtIHRoYXQgaXMgdG8gYmUKLSAqIGNoZWNrZWQuCi0gKgotICogSXRlcmF0ZXMgdGhlIHN1cHBsaWVkIGxpc3Qgb2YgVVVJRHMgYW5kIGNoZWNrcyB0aGUgR3N0UmVnaXN0cnkgZm9yCi0gKiBhbiBlbGVtZW50IHRoYXQgc3VwcG9ydHMgb25lIG9mIHRoZSBzdXBwbGllZCBVVUlEcy4gSWYgbW9yZSB0aGFuIG9uZQotICogZWxlbWVudCBtYXRjaGVzLCB0aGUgc3lzdGVtIElEIG9mIHRoZSBoaWdoZXN0IHJhbmtlZCBlbGVtZW50IGlzIHNlbGVjdGVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogT25lIG9mIHRoZSBzdHJpbmdzIGZyb20gQHN5c3RlbV9pZGVudGlmaWVycyB0aGF0Ci0gKiBpbmRpY2F0ZXMgdGhlIGhpZ2hlc3QgcmFua2VkIGVsZW1lbnQgdGhhdCBpbXBsZW1lbnRzIHRoZSBwcm90ZWN0aW9uIHN5c3RlbQotICogaW5kaWNhdGVkIGJ5IHRoYXQgc3lzdGVtIElELCBvciAlTlVMTCBpZiBubyBlbGVtZW50IGhhcyBiZWVuIGZvdW5kLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3Byb3RlY3Rpb25fc2VsZWN0X3N5c3RlbSAoY29uc3QgZ2NoYXIgKiogc3lzdGVtX2lkZW50aWZpZXJzKQotewotICBHTGlzdCAqZGVjcnlwdG9ycywgKndhbGs7Ci0gIGNvbnN0IGdjaGFyICpyZXR2YWwgPSBOVUxMOwotCi0gIGRlY3J5cHRvcnMgPQotICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ1JZUFRPUiwKLSAgICAgIEdTVF9SQU5LX01BUkdJTkFMKTsKLQotICBmb3IgKHdhbGsgPSBkZWNyeXB0b3JzOyAhcmV0dmFsICYmIHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdCA9IChHc3RFbGVtZW50RmFjdG9yeSAqKSB3YWxrLT5kYXRhOwotCi0gICAgcmV0dmFsID0gZ3N0X3Byb3RlY3Rpb25fZmFjdG9yeV9jaGVjayAoZmFjdCwgc3lzdGVtX2lkZW50aWZpZXJzKTsKLSAgfQotCi0gIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKGRlY3J5cHRvcnMpOwotCi0gIHJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqCi1nc3RfcHJvdGVjdGlvbl9mYWN0b3J5X2NoZWNrIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3QsCi0gICAgY29uc3QgZ2NoYXIgKiogc3lzdGVtX2lkZW50aWZpZXJzKQotewotICBjb25zdCBHTGlzdCAqdGVtcGxhdGUsICp3YWxrOwotICBjb25zdCBnY2hhciAqcmV0dmFsID0gTlVMTDsKLQotICB0ZW1wbGF0ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzIChmYWN0KTsKLSAgZm9yICh3YWxrID0gdGVtcGxhdGU7IHdhbGsgJiYgIXJldHZhbDsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbCA9IHdhbGstPmRhdGE7Ci0gICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICh0ZW1wbCk7Ci0gICAgZ3VpbnQgbGVuZyA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsKLSAgICBndWludCBpLCBqOwotCi0gICAgZm9yIChpID0gMDsgIXJldHZhbCAmJiBpIDwgbGVuZzsgKytpKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnN0OwotCi0gICAgICBzdCA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzdCwKLSAgICAgICAgICAgICAgR1NUX1BST1RFQ1RJT05fU1lTVEVNX0lEX0NBUFNfRklFTEQsIEdfVFlQRV9TVFJJTkcpKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpzeXNfaWQgPQotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdCwgR1NUX1BST1RFQ1RJT05fU1lTVEVNX0lEX0NBUFNfRklFTEQpOwotICAgICAgICBHU1RfREVCVUcgKCJGb3VuZCBkZWNyeXB0b3IgdGhhdCBzdXBwb3J0cyBwcm90ZWN0aW9uIHN5c3RlbSAlcyIsCi0gICAgICAgICAgICBzeXNfaWQpOwotICAgICAgICBmb3IgKGogPSAwOyAhcmV0dmFsICYmIHN5c3RlbV9pZGVudGlmaWVyc1tqXTsgKytqKSB7Ci0gICAgICAgICAgR1NUX1RSQUNFICgiICBjb21wYXJlIHdpdGggJXMiLCBzeXN0ZW1faWRlbnRpZmllcnNbal0pOwotICAgICAgICAgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHN5c3RlbV9pZGVudGlmaWVyc1tqXSwgc3lzX2lkKSA9PSAwKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcgKCIgIFNlbGVjdGluZyAlcyIsIHN5c3RlbV9pZGVudGlmaWVyc1tqXSk7Ci0gICAgICAgICAgICByZXR2YWwgPSBzeXN0ZW1faWRlbnRpZmllcnNbal07Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotCi0gIHJldHVybiByZXR2YWw7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0cHJvdGVjdGlvbi5oIGIvZ3N0L2dzdHByb3RlY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJmNTRjNC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cHJvdGVjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDE1PiBZb3VWaWV3IFRWIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1BST1RFQ1RJT05fSF9fCi0jZGVmaW5lIF9fR1NUX1BST1RFQ1RJT05fSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotLyoqCi0gKiBHU1RfUFJPVEVDVElPTl9TWVNURU1fSURfQ0FQU19GSUVMRDoKLSAqCi0gKiBUaGUgZmllbGQgbmFtZSBpbiBhIEdzdENhcHMgdGhhdCBpcyB1c2VkIHRvIHNpZ25hbCB0aGUgVVVJRCBvZiB0aGUgcHJvdGVjdGlvbgotICogc3lzdGVtLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotI2RlZmluZSBHU1RfUFJPVEVDVElPTl9TWVNURU1fSURfQ0FQU19GSUVMRCAicHJvdGVjdGlvbi1zeXN0ZW0iCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQcm90ZWN0aW9uTWV0YSBHc3RQcm90ZWN0aW9uTWV0YTsKLS8qKgotICogR3N0UHJvdGVjdGlvbk1ldGE6Ci0gKiBAbWV0YTogdGhlIHBhcmVudCAjR3N0TWV0YS4KLSAqIEBpbmZvOiB0aGUgY3J5cHRvZ3JhcGhpYyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGVjcnlwdCB0aGUgc2FtcGxlLgotICoKLSAqIE1ldGFkYXRhIHR5cGUgdGhhdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhIHNhbXBsZSBmcm9tIGEgcHJvdGVjdGlvbi1wcm90ZWN0ZWQKLSAqIHRyYWNrLCBpbmNsdWRpbmcgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZWNyeXB0IGl0IChpZiBpdCBpcyBlbmNyeXB0ZWQpLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotc3RydWN0IF9Hc3RQcm90ZWN0aW9uTWV0YQotewotICBHc3RNZXRhIG1ldGE7Ci0KLSAgR3N0U3RydWN0dXJlICppbmZvOwotfTsKLQotR1R5cGUgZ3N0X3Byb3RlY3Rpb25fbWV0YV9hcGlfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfUFJPVEVDVElPTl9NRVRBX0FQSV9UWVBFIChnc3RfcHJvdGVjdGlvbl9tZXRhX2FwaV9nZXRfdHlwZSgpKQotCi0jZGVmaW5lIGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YShiKSBcCi0gICAgKChHc3RQcm90ZWN0aW9uTWV0YSopZ3N0X2J1ZmZlcl9nZXRfbWV0YSAoKGIpLCBHU1RfUFJPVEVDVElPTl9NRVRBX0FQSV9UWVBFKSkKLQotI2RlZmluZSBHU1RfUFJPVEVDVElPTl9NRVRBX0lORk8gKGdzdF9wcm90ZWN0aW9uX21ldGFfZ2V0X2luZm8oKSkKLQotY29uc3QgR3N0TWV0YUluZm8gKmdzdF9wcm90ZWN0aW9uX21ldGFfZ2V0X2luZm8gKHZvaWQpOwotCi1Hc3RQcm90ZWN0aW9uTWV0YSAqZ3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhIChHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0U3RydWN0dXJlICogaW5mbyk7Ci0KLWNvbnN0IGdjaGFyICpnc3RfcHJvdGVjdGlvbl9zZWxlY3Rfc3lzdGVtIChjb25zdCBnY2hhciAqKiBzeXN0ZW1faWRlbnRpZmllcnMpOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1BST1RFQ1RJT05fTUVUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RxdWFyay5jIGIvZ3N0L2dzdHF1YXJrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MDBjYzYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHF1YXJrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0gKgotICogZ3N0cXVhcmsuYzogUmVnaXN0ZXJlZCBxdWFya3MgZm9yIHRoZSBfcHJpdl9nc3RfcXVhcmtfdGFibGUsIHByaXZhdGUgdG8gCi0gKiAgIEdTdHJlYW1lcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdzdHF1YXJrLmgiCi0jaW5jbHVkZSAiZ3N0ZWxlbWVudG1ldGFkYXRhLmgiCi0KLS8qIFRoZXNlIHN0cmluZ3MgbXVzdCBtYXRjaCBvcmRlciBhbmQgbnVtYmVyIGRlY2xhcmVkIGluIHRoZSBHc3RRdWFya0lkCi0gKiBlbnVtIGluIGdzdHF1YXJrLmghICovCi1zdGF0aWMgY29uc3QgZ2NoYXIgKl9xdWFya19zdHJpbmdzW10gPSB7Ci0gICJmb3JtYXQiLCAiY3VycmVudCIsICJkdXJhdGlvbiIsICJyYXRlIiwKLSAgInNlZWthYmxlIiwgInNlZ21lbnQtc3RhcnQiLCAic2VnbWVudC1lbmQiLAotICAic3JjX2Zvcm1hdCIsICJzcmNfdmFsdWUiLCAiZGVzdF9mb3JtYXQiLCAiZGVzdF92YWx1ZSIsCi0gICJzdGFydF9mb3JtYXQiLCAic3RhcnRfdmFsdWUiLCAic3RvcF9mb3JtYXQiLCAic3RvcF92YWx1ZSIsCi0gICJnZXJyb3IiLCAiZGVidWciLCAiYnVmZmVyLXBlcmNlbnQiLCAiYnVmZmVyaW5nLW1vZGUiLAotICAiYXZnLWluLXJhdGUiLCAiYXZnLW91dC1yYXRlIiwgImJ1ZmZlcmluZy1sZWZ0IiwKLSAgImVzdGltYXRlZC10b3RhbCIsICJvbGQtc3RhdGUiLCAibmV3LXN0YXRlIiwgInBlbmRpbmctc3RhdGUiLAotICAiY2xvY2siLCAicmVhZHkiLCAicG9zaXRpb24iLCAicmVzZXQtdGltZSIsICJsaXZlIiwgIm1pbi1sYXRlbmN5IiwKLSAgIm1heC1sYXRlbmN5IiwgImJ1c3kiLCAidHlwZSIsICJvd25lciIsICJ1cGRhdGUiLCAiYXBwbGllZC1yYXRlIiwKLSAgInN0YXJ0IiwgInN0b3AiLCAibWluc2l6ZSIsICJtYXhzaXplIiwgImFzeW5jIiwgInByb3BvcnRpb24iLAotICAiZGlmZiIsICJ0aW1lc3RhbXAiLCAiZmxhZ3MiLCAiY3VyLXR5cGUiLCAiY3VyIiwgInN0b3AtdHlwZSIsCi0gICJsYXRlbmN5IiwgInVyaSIsICJvYmplY3QiLCAidGFnbGlzdCIsICJHc3RFdmVudFNlZ21lbnQiLAotICAiR3N0RXZlbnRCdWZmZXJTaXplIiwgIkdzdEV2ZW50UU9TIiwgIkdzdEV2ZW50U2VlayIsICJHc3RFdmVudExhdGVuY3kiLAotICAiR3N0TWVzc2FnZUVycm9yIiwgIkdzdE1lc3NhZ2VXYXJuaW5nIiwgIkdzdE1lc3NhZ2VJbmZvIiwKLSAgIkdzdE1lc3NhZ2VCdWZmZXJpbmciLCAiR3N0TWVzc2FnZVN0YXRlQ2hhbmdlZCIsICJHc3RNZXNzYWdlQ2xvY2tQcm92aWRlIiwKLSAgIkdzdE1lc3NhZ2VDbG9ja0xvc3QiLCAiR3N0TWVzc2FnZU5ld0Nsb2NrIiwgIkdzdE1lc3NhZ2VTdHJ1Y3R1cmVDaGFuZ2UiLAotICAiR3N0TWVzc2FnZVNlZ21lbnRTdGFydCIsICJHc3RNZXNzYWdlU2VnbWVudERvbmUiLAotICAiR3N0TWVzc2FnZUR1cmF0aW9uQ2hhbmdlZCIsCi0gICJHc3RNZXNzYWdlQXN5bmNEb25lIiwgIkdzdE1lc3NhZ2VSZXF1ZXN0U3RhdGUiLCAiR3N0TWVzc2FnZVN0cmVhbVN0YXR1cyIsCi0gICJHc3RRdWVyeVBvc2l0aW9uIiwgIkdzdFF1ZXJ5RHVyYXRpb24iLCAiR3N0UXVlcnlMYXRlbmN5IiwgIkdzdFF1ZXJ5Q29udmVydCIsCi0gICJHc3RRdWVyeVNlZ21lbnQiLCAiR3N0UXVlcnlTZWVraW5nIiwgIkdzdFF1ZXJ5Rm9ybWF0cyIsICJHc3RRdWVyeUJ1ZmZlcmluZyIsCi0gICJHc3RRdWVyeVVSSSIsICJHc3RFdmVudFN0ZXAiLCAiR3N0TWVzc2FnZVN0ZXBEb25lIiwgImFtb3VudCIsICJmbHVzaCIsCi0gICJpbnRlcm1lZGlhdGUiLCAiR3N0TWVzc2FnZVN0ZXBTdGFydCIsICJhY3RpdmUiLCAiZW9zIiwgInNpbmstbWVzc2FnZSIsCi0gICJtZXNzYWdlIiwgIkdzdE1lc3NhZ2VRT1MiLCAicnVubmluZy10aW1lIiwgInN0cmVhbS10aW1lIiwgImppdHRlciIsCi0gICJxdWFsaXR5IiwgInByb2Nlc3NlZCIsICJkcm9wcGVkIiwgImJ1ZmZlcmluZy1yYW5nZXMiLCAiR3N0TWVzc2FnZVByb2dyZXNzIiwKLSAgImNvZGUiLCAidGV4dCIsICJwZXJjZW50IiwgInRpbWVvdXQiLCAiR3N0QnVmZmVyUG9vbENvbmZpZyIsICJjYXBzIiwgInNpemUiLAotICAibWluLWJ1ZmZlcnMiLCAibWF4LWJ1ZmZlcnMiLCAicHJlZml4IiwgInBhZGRpbmciLCAiYWxpZ24iLCAidGltZSIsCi0gICJHc3RRdWVyeUFsbG9jYXRpb24iLCAibmVlZC1wb29sIiwgIm1ldGEiLCAicG9vbCIsICJHc3RFdmVudENhcHMiLAotICAiR3N0RXZlbnRSZWNvbmZpZ3VyZSIsICJzZWdtZW50IiwgIkdzdFF1ZXJ5U2NoZWR1bGluZyIsICJwdWxsLW1vZGUiLAotICAiYWxsb2NhdG9yIiwgIkdzdEV2ZW50Rmx1c2hTdG9wIiwgIm9wdGlvbnMiLCAiR3N0UXVlcnlBY2NlcHRDYXBzIiwKLSAgInJlc3VsdCIsICJHc3RRdWVyeUNhcHMiLCAiZmlsdGVyIiwgIm1vZGVzIiwgIkdzdEV2ZW50U3RyZWFtQ29uZmlnIiwKLSAgInNldHVwLWRhdGEiLCAic3RyZWFtLWhlYWRlcnMiLCAiR3N0RXZlbnRHYXAiLCAiR3N0UXVlcnlEcmFpbiIsICJwYXJhbXMiLAotICAiR3N0RXZlbnRUb2NTZWxlY3QiLCAidWlkIiwgIkdzdFF1ZXJ5VG9jIiwgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUsCi0gIEdTVF9FTEVNRU5UX01FVEFEQVRBX0tMQVNTLCBHU1RfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTiwKLSAgR1NUX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SLCAidG9jIiwgInRvYy1lbnRyeSIsICJ1cGRhdGVkIiwgImV4dGVuZC11aWQiLAotICAidWlkIiwgInRhZ3MiLCAic3ViLWVudHJpZXMiLCAiaW5mbyIsICJHc3RNZXNzYWdlVGFnIiwgIkdzdEV2ZW50VGFnIiwKLSAgIkdzdE1lc3NhZ2VSZXNldFRpbWUiLAotICAiR3N0TWVzc2FnZVRvYyIsICJHc3RFdmVudFRvY0dsb2JhbCIsICJHc3RFdmVudFRvY0N1cnJlbnQiLAotICAiR3N0RXZlbnRTZWdtZW50RG9uZSIsCi0gICJHc3RFdmVudFN0cmVhbVN0YXJ0IiwgInN0cmVhbS1pZCIsICJHc3RRdWVyeUNvbnRleHQiLAotICAiR3N0TWVzc2FnZU5lZWRDb250ZXh0IiwgIkdzdE1lc3NhZ2VIYXZlQ29udGV4dCIsICJjb250ZXh0IiwgImNvbnRleHQtdHlwZSIsCi0gICJHc3RNZXNzYWdlU3RyZWFtU3RhcnQiLCAiZ3JvdXAtaWQiLCAidXJpLXJlZGlyZWN0aW9uIiwKLSAgIkdzdE1lc3NhZ2VEZXZpY2VBZGRlZCIsICJHc3RNZXNzYWdlRGV2aWNlUmVtb3ZlZCIsICJkZXZpY2UiLAotICAidXJpLXJlZGlyZWN0aW9uLXBlcm1hbmVudCIsICJHc3RNZXNzYWdlUHJvcGVydHlOb3RpZnkiLCAicHJvcGVydHktbmFtZSIsCi0gICJwcm9wZXJ0eS12YWx1ZSIsICJzdHJlYW1zIiwgIkdzdEV2ZW50U2VsZWN0U3RyZWFtcyIsCi0gICJHc3RNZXNzYWdlU3RyZWFtQ29sbGVjdGlvbiIsICJjb2xsZWN0aW9uIiwgInN0cmVhbSIsICJzdHJlYW0tY29sbGVjdGlvbiIsCi0gICJHc3RNZXNzYWdlU3RyZWFtc1NlbGVjdGVkIiwgIkdzdE1lc3NhZ2VSZWRpcmVjdCIsICJyZWRpcmVjdC1lbnRyeS1sb2NhdGlvbnMiLAotICAicmVkaXJlY3QtZW50cnktdGFnbGlzdHMiLCAicmVkaXJlY3QtZW50cnktc3RydWN0dXJlcyIsCi0gICJHc3RFdmVudFN0cmVhbUdyb3VwRG9uZSIKLX07Ci0KLUdRdWFyayBfcHJpdl9nc3RfcXVhcmtfdGFibGVbR1NUX1FVQVJLX01BWF07Ci0KLXZvaWQKLV9wcml2X2dzdF9xdWFya3NfaW5pdGlhbGl6ZSAodm9pZCkKLXsKLSAgZ2ludCBpOwotCi0gIGlmIChHX05fRUxFTUVOVFMgKF9xdWFya19zdHJpbmdzKSAhPSBHU1RfUVVBUktfTUFYKQotICAgIGdfd2FybmluZyAoInRoZSBxdWFyayB0YWJsZSBpcyBub3QgY29uc2lzdGVudCEgJWQgIT0gJWQiLAotICAgICAgICAoaW50KSBHX05fRUxFTUVOVFMgKF9xdWFya19zdHJpbmdzKSwgR1NUX1FVQVJLX01BWCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdTVF9RVUFSS19NQVg7IGkrKykgewotICAgIF9wcml2X2dzdF9xdWFya190YWJsZVtpXSA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChfcXVhcmtfc3RyaW5nc1tpXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RxdWFyay5oIGIvZ3N0L2dzdHF1YXJrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MTQ2NmIuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHF1YXJrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotICoKLSAqIGdzdHF1YXJrLmg6IFByaXZhdGUgaGVhZGVyIGZvciBzdG9yaW5nIHF1YXJrIGluZm8gCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9RVUFSS19IX18KLSNkZWZpbmUgX19HU1RfUVVBUktfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLS8qIFRoZXNlIGVudW1zIG5lZWQgdG8gbWF0Y2ggdGhlIG51bWJlciBhbmQgb3JkZXIKLSAqIG9mIHN0cmluZ3MgZGVjbGFyZWQgaW4gX3F1YXJrX3RhYmxlLCBpbiBnc3RxdWFyay5jICovCi10eXBlZGVmIGVudW0gX0dzdFF1YXJrSWQKLXsKLSAgR1NUX1FVQVJLX0ZPUk1BVCA9IDAsCi0gIEdTVF9RVUFSS19DVVJSRU5UID0gMSwKLSAgR1NUX1FVQVJLX0RVUkFUSU9OID0gMiwKLSAgR1NUX1FVQVJLX1JBVEUgPSAzLAotICBHU1RfUVVBUktfU0VFS0FCTEUgPSA0LAotICBHU1RfUVVBUktfU0VHTUVOVF9TVEFSVCA9IDUsCi0gIEdTVF9RVUFSS19TRUdNRU5UX0VORCA9IDYsCi0gIEdTVF9RVUFSS19TUkNfRk9STUFUID0gNywKLSAgR1NUX1FVQVJLX1NSQ19WQUxVRSA9IDgsCi0gIEdTVF9RVUFSS19ERVNUX0ZPUk1BVCA9IDksCi0gIEdTVF9RVUFSS19ERVNUX1ZBTFVFID0gMTAsCi0gIEdTVF9RVUFSS19TVEFSVF9GT1JNQVQgPSAxMSwKLSAgR1NUX1FVQVJLX1NUQVJUX1ZBTFVFID0gMTIsCi0gIEdTVF9RVUFSS19TVE9QX0ZPUk1BVCA9IDEzLAotICBHU1RfUVVBUktfU1RPUF9WQUxVRSA9IDE0LAotICBHU1RfUVVBUktfR0VSUk9SID0gMTUsCi0gIEdTVF9RVUFSS19ERUJVRyA9IDE2LAotICBHU1RfUVVBUktfQlVGRkVSX1BFUkNFTlQgPSAxNywKLSAgR1NUX1FVQVJLX0JVRkZFUklOR19NT0RFID0gMTgsCi0gIEdTVF9RVUFSS19BVkdfSU5fUkFURSA9IDE5LAotICBHU1RfUVVBUktfQVZHX09VVF9SQVRFID0gMjAsCi0gIEdTVF9RVUFSS19CVUZGRVJJTkdfTEVGVCA9IDIxLAotICBHU1RfUVVBUktfRVNUSU1BVEVEX1RPVEFMID0gMjIsCi0gIEdTVF9RVUFSS19PTERfU1RBVEUgPSAyMywKLSAgR1NUX1FVQVJLX05FV19TVEFURSA9IDI0LAotICBHU1RfUVVBUktfUEVORElOR19TVEFURSA9IDI1LAotICBHU1RfUVVBUktfQ0xPQ0sgPSAyNiwKLSAgR1NUX1FVQVJLX1JFQURZID0gMjcsCi0gIEdTVF9RVUFSS19QT1NJVElPTiA9IDI4LAotICBHU1RfUVVBUktfUkVTRVRfVElNRSA9IDI5LAotICBHU1RfUVVBUktfTElWRSA9IDMwLAotICBHU1RfUVVBUktfTUlOX0xBVEVOQ1kgPSAzMSwKLSAgR1NUX1FVQVJLX01BWF9MQVRFTkNZID0gMzIsCi0gIEdTVF9RVUFSS19CVVNZID0gMzMsCi0gIEdTVF9RVUFSS19UWVBFID0gMzQsCi0gIEdTVF9RVUFSS19PV05FUiA9IDM1LAotICBHU1RfUVVBUktfVVBEQVRFID0gMzYsCi0gIEdTVF9RVUFSS19BUFBMSUVEX1JBVEUgPSAzNywKLSAgR1NUX1FVQVJLX1NUQVJUID0gMzgsCi0gIEdTVF9RVUFSS19TVE9QID0gMzksCi0gIEdTVF9RVUFSS19NSU5TSVpFID0gNDAsCi0gIEdTVF9RVUFSS19NQVhTSVpFID0gNDEsCi0gIEdTVF9RVUFSS19BU1lOQyA9IDQyLAotICBHU1RfUVVBUktfUFJPUE9SVElPTiA9IDQzLAotICBHU1RfUVVBUktfRElGRiA9IDQ0LAotICBHU1RfUVVBUktfVElNRVNUQU1QID0gNDUsCi0gIEdTVF9RVUFSS19GTEFHUyA9IDQ2LAotICBHU1RfUVVBUktfQ1VSX1RZUEUgPSA0NywKLSAgR1NUX1FVQVJLX0NVUiA9IDQ4LAotICBHU1RfUVVBUktfU1RPUF9UWVBFID0gNDksCi0gIEdTVF9RVUFSS19MQVRFTkNZID0gNTAsCi0gIEdTVF9RVUFSS19VUkkgPSA1MSwKLSAgR1NUX1FVQVJLX09CSkVDVCA9IDUyLAotICBHU1RfUVVBUktfVEFHTElTVCA9IDUzLAotICBHU1RfUVVBUktfRVZFTlRfU0VHTUVOVCA9IDU0LAotICBHU1RfUVVBUktfRVZFTlRfQlVGRkVSX1NJWkUgPSA1NSwKLSAgR1NUX1FVQVJLX0VWRU5UX1FPUyA9IDU2LAotICBHU1RfUVVBUktfRVZFTlRfU0VFSyA9IDU3LAotICBHU1RfUVVBUktfRVZFTlRfTEFURU5DWSA9IDU4LAotICBHU1RfUVVBUktfTUVTU0FHRV9FUlJPUiA9IDU5LAotICBHU1RfUVVBUktfTUVTU0FHRV9XQVJOSU5HID0gNjAsCi0gIEdTVF9RVUFSS19NRVNTQUdFX0lORk8gPSA2MSwKLSAgR1NUX1FVQVJLX01FU1NBR0VfQlVGRkVSSU5HID0gNjIsCi0gIEdTVF9RVUFSS19NRVNTQUdFX1NUQVRFX0NIQU5HRUQgPSA2MywKLSAgR1NUX1FVQVJLX01FU1NBR0VfQ0xPQ0tfUFJPVklERSA9IDY0LAotICBHU1RfUVVBUktfTUVTU0FHRV9DTE9DS19MT1NUID0gNjUsCi0gIEdTVF9RVUFSS19NRVNTQUdFX05FV19DTE9DSyA9IDY2LAotICBHU1RfUVVBUktfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFID0gNjcsCi0gIEdTVF9RVUFSS19NRVNTQUdFX1NFR01FTlRfU1RBUlQgPSA2OCwKLSAgR1NUX1FVQVJLX01FU1NBR0VfU0VHTUVOVF9ET05FID0gNjksCi0gIEdTVF9RVUFSS19NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQgPSA3MCwKLSAgR1NUX1FVQVJLX01FU1NBR0VfQVNZTkNfRE9ORSA9IDcxLAotICBHU1RfUVVBUktfTUVTU0FHRV9SRVFVRVNUX1NUQVRFID0gNzIsCi0gIEdTVF9RVUFSS19NRVNTQUdFX1NUUkVBTV9TVEFUVVMgPSA3MywKLSAgR1NUX1FVQVJLX1FVRVJZX1BPU0lUSU9OID0gNzQsCi0gIEdTVF9RVUFSS19RVUVSWV9EVVJBVElPTiA9IDc1LAotICBHU1RfUVVBUktfUVVFUllfTEFURU5DWSA9IDc2LAotICBHU1RfUVVBUktfUVVFUllfQ09OVkVSVCA9IDc3LAotICBHU1RfUVVBUktfUVVFUllfU0VHTUVOVCA9IDc4LAotICBHU1RfUVVBUktfUVVFUllfU0VFS0lORyA9IDc5LAotICBHU1RfUVVBUktfUVVFUllfRk9STUFUUyA9IDgwLAotICBHU1RfUVVBUktfUVVFUllfQlVGRkVSSU5HID0gODEsCi0gIEdTVF9RVUFSS19RVUVSWV9VUkkgPSA4MiwKLSAgR1NUX1FVQVJLX0VWRU5UX1NURVAgPSA4MywKLSAgR1NUX1FVQVJLX01FU1NBR0VfU1RFUF9ET05FID0gODQsCi0gIEdTVF9RVUFSS19BTU9VTlQgPSA4NSwKLSAgR1NUX1FVQVJLX0ZMVVNIID0gODYsCi0gIEdTVF9RVUFSS19JTlRFUk1FRElBVEUgPSA4NywKLSAgR1NUX1FVQVJLX01FU1NBR0VfU1RFUF9TVEFSVCA9IDg4LAotICBHU1RfUVVBUktfQUNUSVZFID0gODksCi0gIEdTVF9RVUFSS19FT1MgPSA5MCwKLSAgR1NUX1FVQVJLX0VWRU5UX1NJTktfTUVTU0FHRSA9IDkxLAotICBHU1RfUVVBUktfTUVTU0FHRSA9IDkyLAotICBHU1RfUVVBUktfTUVTU0FHRV9RT1MgPSA5MywKLSAgR1NUX1FVQVJLX1JVTk5JTkdfVElNRSA9IDk0LAotICBHU1RfUVVBUktfU1RSRUFNX1RJTUUgPSA5NSwKLSAgR1NUX1FVQVJLX0pJVFRFUiA9IDk2LAotICBHU1RfUVVBUktfUVVBTElUWSA9IDk3LAotICBHU1RfUVVBUktfUFJPQ0VTU0VEID0gOTgsCi0gIEdTVF9RVUFSS19EUk9QUEVEID0gOTksCi0gIEdTVF9RVUFSS19CVUZGRVJJTkdfUkFOR0VTID0gMTAwLAotICBHU1RfUVVBUktfTUVTU0FHRV9QUk9HUkVTUyA9IDEwMSwKLSAgR1NUX1FVQVJLX0NPREUgPSAxMDIsCi0gIEdTVF9RVUFSS19URVhUID0gMTAzLAotICBHU1RfUVVBUktfUEVSQ0VOVCA9IDEwNCwKLSAgR1NUX1FVQVJLX1RJTUVPVVQgPSAxMDUsCi0gIEdTVF9RVUFSS19CVUZGRVJfUE9PTF9DT05GSUcgPSAxMDYsCi0gIEdTVF9RVUFSS19DQVBTID0gMTA3LAotICBHU1RfUVVBUktfU0laRSA9IDEwOCwKLSAgR1NUX1FVQVJLX01JTl9CVUZGRVJTID0gMTA5LAotICBHU1RfUVVBUktfTUFYX0JVRkZFUlMgPSAxMTAsCi0gIEdTVF9RVUFSS19QUkVGSVggPSAxMTEsCi0gIEdTVF9RVUFSS19QQURESU5HID0gMTEyLAotICBHU1RfUVVBUktfQUxJR04gPSAxMTMsCi0gIEdTVF9RVUFSS19USU1FID0gMTE0LAotICBHU1RfUVVBUktfUVVFUllfQUxMT0NBVElPTiA9IDExNSwKLSAgR1NUX1FVQVJLX05FRURfUE9PTCA9IDExNiwKLSAgR1NUX1FVQVJLX01FVEEgPSAxMTcsCi0gIEdTVF9RVUFSS19QT09MID0gMTE4LAotICBHU1RfUVVBUktfRVZFTlRfQ0FQUyA9IDExOSwKLSAgR1NUX1FVQVJLX0VWRU5UX1JFQ09ORklHVVJFID0gMTIwLAotICBHU1RfUVVBUktfU0VHTUVOVCA9IDEyMSwKLSAgR1NUX1FVQVJLX1FVRVJZX1NDSEVEVUxJTkcgPSAxMjIsCi0gIEdTVF9RVUFSS19QVUxMX01PREUgPSAxMjMsCi0gIEdTVF9RVUFSS19BTExPQ0FUT1IgPSAxMjQsCi0gIEdTVF9RVUFSS19FVkVOVF9GTFVTSF9TVE9QID0gMTI1LAotICBHU1RfUVVBUktfT1BUSU9OUyA9IDEyNiwKLSAgR1NUX1FVQVJLX1FVRVJZX0FDQ0VQVF9DQVBTID0gMTI3LAotICBHU1RfUVVBUktfUkVTVUxUID0gMTI4LAotICBHU1RfUVVBUktfUVVFUllfQ0FQUyA9IDEyOSwKLSAgR1NUX1FVQVJLX0ZJTFRFUiA9IDEzMCwKLSAgR1NUX1FVQVJLX01PREVTID0gMTMxLAotICBHU1RfUVVBUktfRVZFTlRfU1RSRUFNX0NPTkZJRyA9IDEzMiwKLSAgR1NUX1FVQVJLX1NFVFVQX0RBVEEgPSAxMzMsCi0gIEdTVF9RVUFSS19TVFJFQU1fSEVBREVSUyA9IDEzNCwKLSAgR1NUX1FVQVJLX0VWRU5UX0dBUCA9IDEzNSwKLSAgR1NUX1FVQVJLX1FVRVJZX0RSQUlOID0gMTM2LAotICBHU1RfUVVBUktfUEFSQU1TID0gMTM3LAotICBHU1RfUVVBUktfRVZFTlRfVE9DX1NFTEVDVCA9IDEzOCwKLSAgR1NUX1FVQVJLX1VJRCA9IDEzOSwKLSAgR1NUX1FVQVJLX1FVRVJZX1RPQyA9IDE0MCwKLSAgR1NUX1FVQVJLX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUgPSAxNDEsCi0gIEdTVF9RVUFSS19FTEVNRU5UX01FVEFEQVRBX0tMQVNTID0gMTQyLAotICBHU1RfUVVBUktfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTiA9IDE0MywKLSAgR1NUX1FVQVJLX0VMRU1FTlRfTUVUQURBVEFfQVVUSE9SID0gMTQ0LAotICBHU1RfUVVBUktfVE9DID0gMTQ1LAotICBHU1RfUVVBUktfVE9DX0VOVFJZID0gMTQ2LAotICBHU1RfUVVBUktfVVBEQVRFRCA9IDE0NywKLSAgR1NUX1FVQVJLX0VYVEVORF9VSUQgPSAxNDgsCi0gIEdTVF9RVUFSS19UT0NfVUlEID0gMTQ5LAotICBHU1RfUVVBUktfVEFHUyA9IDE1MCwKLSAgR1NUX1FVQVJLX1NVQl9FTlRSSUVTID0gMTUxLAotICBHU1RfUVVBUktfSU5GTyA9IDE1MiwKLSAgR1NUX1FVQVJLX01FU1NBR0VfVEFHID0gMTUzLAotICBHU1RfUVVBUktfRVZFTlRfVEFHID0gMTU0LAotICBHU1RfUVVBUktfTUVTU0FHRV9SRVNFVF9USU1FID0gMTU1LAotICBHU1RfUVVBUktfTUVTU0FHRV9UT0MgPSAxNTYsCi0gIEdTVF9RVUFSS19FVkVOVF9UT0NfR0xPQkFMID0gMTU3LAotICBHU1RfUVVBUktfRVZFTlRfVE9DX0NVUlJFTlQgPSAxNTgsCi0gIEdTVF9RVUFSS19FVkVOVF9TRUdNRU5UX0RPTkUgPSAxNTksCi0gIEdTVF9RVUFSS19FVkVOVF9TVFJFQU1fU1RBUlQgPSAxNjAsCi0gIEdTVF9RVUFSS19TVFJFQU1fSUQgPSAxNjEsCi0gIEdTVF9RVUFSS19RVUVSWV9DT05URVhUID0gMTYyLAotICBHU1RfUVVBUktfTUVTU0FHRV9ORUVEX0NPTlRFWFQgPSAxNjMsCi0gIEdTVF9RVUFSS19NRVNTQUdFX0hBVkVfQ09OVEVYVCA9IDE2NCwKLSAgR1NUX1FVQVJLX0NPTlRFWFQgPSAxNjUsCi0gIEdTVF9RVUFSS19DT05URVhUX1RZUEUgPSAxNjYsCi0gIEdTVF9RVUFSS19NRVNTQUdFX1NUUkVBTV9TVEFSVCA9IDE2NywKLSAgR1NUX1FVQVJLX0dST1VQX0lEID0gMTY4LAotICBHU1RfUVVBUktfVVJJX1JFRElSRUNUSU9OID0gMTY5LAotICBHU1RfUVVBUktfTUVTU0FHRV9ERVZJQ0VfQURERUQgPSAxNzAsCi0gIEdTVF9RVUFSS19NRVNTQUdFX0RFVklDRV9SRU1PVkVEID0gMTcxLAotICBHU1RfUVVBUktfREVWSUNFID0gMTcyLAotICBHU1RfUVVBUktfVVJJX1JFRElSRUNUSU9OX1BFUk1BTkVOVCA9IDE3MywKLSAgR1NUX1FVQVJLX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZID0gMTc0LAotICBHU1RfUVVBUktfUFJPUEVSVFlfTkFNRSA9IDE3NSwKLSAgR1NUX1FVQVJLX1BST1BFUlRZX1ZBTFVFID0gMTc2LAotICBHU1RfUVVBUktfU1RSRUFNUyA9IDE3NywKLSAgR1NUX1FVQVJLX0VWRU5UX1NFTEVDVF9TVFJFQU1TID0gMTc4LAotICBHU1RfUVVBUktfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiA9IDE3OSwKLSAgR1NUX1FVQVJLX0NPTExFQ1RJT04gPSAxODAsCi0gIEdTVF9RVUFSS19TVFJFQU0gPSAxODEsCi0gIEdTVF9RVUFSS19FVkVOVF9TVFJFQU1fQ09MTEVDVElPTiA9IDE4MiwKLSAgR1NUX1FVQVJLX01FU1NBR0VfU1RSRUFNU19TRUxFQ1RFRCA9IDE4MywKLSAgR1NUX1FVQVJLX01FU1NBR0VfUkVESVJFQ1QgPSAxODQsCi0gIEdTVF9RVUFSS19SRURJUkVDVF9FTlRSWV9MT0NBVElPTlMgPSAxODUsCi0gIEdTVF9RVUFSS19SRURJUkVDVF9FTlRSWV9UQUdMSVNUUyA9IDE4NiwKLSAgR1NUX1FVQVJLX1JFRElSRUNUX0VOVFJZX1NUUlVDVFVSRVMgPSAxODcsCi0gIEdTVF9RVUFSS19FVkVOVF9TVFJFQU1fR1JPVVBfRE9ORSA9IDE4OCwKLSAgR1NUX1FVQVJLX01BWCA9IDE4OQotfSBHc3RRdWFya0lkOwotCi1leHRlcm4gR1F1YXJrIF9wcml2X2dzdF9xdWFya190YWJsZVtHU1RfUVVBUktfTUFYXTsKLQotI2RlZmluZSBHU1RfUVVBUksocSkgX3ByaXZfZ3N0X3F1YXJrX3RhYmxlW0dTVF9RVUFSS18jI3FdCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHF1ZXJ5LmMgYi9nc3QvZ3N0cXVlcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY5Y2NhYS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cXVlcnkuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NDUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0cXVlcnkuYzogR3N0UXVlcnlUeXBlIHJlZ2lzdHJhdGlvbiBhbmQgUXVlcnkgcGFyc2luZy9jcmVhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RxdWVyeQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBQcm92aWRlIGZ1bmN0aW9ucyB0byBjcmVhdGUgcXVlcmllcywgYW5kIHRvIHNldCBhbmQgcGFyc2UKLSAqICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGluIHRoZW0uCi0gKiBAc2VlX2Fsc286ICNHc3RQYWQsICNHc3RFbGVtZW50Ci0gKgotICogUXVlcmllcyBjYW4gYmUgcGVyZm9ybWVkIG9uIHBhZHMgKGdzdF9wYWRfcXVlcnkoKSkgYW5kIGVsZW1lbnRzCi0gKiAoZ3N0X2VsZW1lbnRfcXVlcnkoKSkuIFBsZWFzZSBub3RlIHRoYXQgc29tZSBxdWVyaWVzIG1pZ2h0IG5lZWQgYSBydW5uaW5nCi0gKiBwaXBlbGluZSB0byB3b3JrLgotICoKLSAqIFF1ZXJpZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIGdzdF9xdWVyeV9uZXdfKigpIGZ1bmN0aW9ucy4KLSAqIFF1ZXJ5IHZhbHVlcyBjYW4gYmUgc2V0IHVzaW5nIGdzdF9xdWVyeV9zZXRfKigpLCBhbmQgcGFyc2VkIHVzaW5nCi0gKiBnc3RfcXVlcnlfcGFyc2VfKigpIGhlbHBlcnMuCi0gKgotICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBxdWVyeSB0aGUgZHVyYXRpb24gb2YgYSBwaXBlbGluZToKLSAqIHxbPCEtLSBsYW5ndWFnZT0iQyIgLS0+Ci0gKiAgIEdzdFF1ZXJ5ICpxdWVyeTsKLSAqICAgZ2Jvb2xlYW4gcmVzOwotICogICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKEdTVF9GT1JNQVRfVElNRSk7Ci0gKiAgIHJlcyA9IGdzdF9lbGVtZW50X3F1ZXJ5IChwaXBlbGluZSwgcXVlcnkpOwotICogICBpZiAocmVzKSB7Ci0gKiAgICAgZ2ludDY0IGR1cmF0aW9uOwotICogICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksIE5VTEwsICZhbXA7ZHVyYXRpb24pOwotICogICAgIGdfcHJpbnQgKCJkdXJhdGlvbiA9ICUiR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChkdXJhdGlvbikpOwotICogICB9IGVsc2UgewotICogICAgIGdfcHJpbnQgKCJkdXJhdGlvbiBxdWVyeSBmYWlsZWQuLi4iKTsKLSAqICAgfQotICogICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAqIF18Ci0gKi8KLQotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0cXVlcnkuaCIKLSNpbmNsdWRlICJnc3R2YWx1ZS5oIgotI2luY2x1ZGUgImdzdGVudW10eXBlcy5oIgotI2luY2x1ZGUgImdzdHF1YXJrLmgiCi0jaW5jbHVkZSAiZ3N0dXJpLmgiCi0jaW5jbHVkZSAiZ3N0YnVmZmVycG9vbC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcXVlcnlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3F1ZXJ5X2RlYnVnCi0KLUdUeXBlIF9nc3RfcXVlcnlfdHlwZSA9IDA7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFF1ZXJ5IHF1ZXJ5OwotCi0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotfSBHc3RRdWVyeUltcGw7Ci0KLSNkZWZpbmUgR1NUX1FVRVJZX1NUUlVDVFVSRShxKSAgKCgoR3N0UXVlcnlJbXBsICopKHEpKS0+c3RydWN0dXJlKQotCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGdpbnQgdHlwZTsKLSAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gIEdRdWFyayBxdWFyazsKLX0gR3N0UXVlcnlRdWFya3M7Ci0KLXN0YXRpYyBHc3RRdWVyeVF1YXJrcyBxdWVyeV9xdWFya3NbXSA9IHsKLSAge0dTVF9RVUVSWV9VTktOT1dOLCAidW5rbm93biIsIDB9LAotICB7R1NUX1FVRVJZX1BPU0lUSU9OLCAicG9zaXRpb24iLCAwfSwKLSAge0dTVF9RVUVSWV9EVVJBVElPTiwgImR1cmF0aW9uIiwgMH0sCi0gIHtHU1RfUVVFUllfTEFURU5DWSwgImxhdGVuY3kiLCAwfSwKLSAge0dTVF9RVUVSWV9KSVRURVIsICJqaXR0ZXIiLCAwfSwKLSAge0dTVF9RVUVSWV9SQVRFLCAicmF0ZSIsIDB9LAotICB7R1NUX1FVRVJZX1NFRUtJTkcsICJzZWVraW5nIiwgMH0sCi0gIHtHU1RfUVVFUllfU0VHTUVOVCwgInNlZ21lbnQiLCAwfSwKLSAge0dTVF9RVUVSWV9DT05WRVJULCAiY29udmVydCIsIDB9LAotICB7R1NUX1FVRVJZX0ZPUk1BVFMsICJmb3JtYXRzIiwgMH0sCi0gIHtHU1RfUVVFUllfQlVGRkVSSU5HLCAiYnVmZmVyaW5nIiwgMH0sCi0gIHtHU1RfUVVFUllfQ1VTVE9NLCAiY3VzdG9tIiwgMH0sCi0gIHtHU1RfUVVFUllfVVJJLCAidXJpIiwgMH0sCi0gIHtHU1RfUVVFUllfQUxMT0NBVElPTiwgImFsbG9jYXRpb24iLCAwfSwKLSAge0dTVF9RVUVSWV9TQ0hFRFVMSU5HLCAic2NoZWR1bGluZyIsIDB9LAotICB7R1NUX1FVRVJZX0FDQ0VQVF9DQVBTLCAiYWNjZXB0LWNhcHMiLCAwfSwKLSAge0dTVF9RVUVSWV9DQVBTLCAiY2FwcyIsIDB9LAotICB7R1NUX1FVRVJZX0RSQUlOLCAiZHJhaW4iLCAwfSwKLSAge0dTVF9RVUVSWV9DT05URVhULCAiY29udGV4dCIsIDB9LAotCi0gIHswLCBOVUxMLCAwfQotfTsKLQotR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RRdWVyeSwgZ3N0X3F1ZXJ5KTsKLQotdm9pZAotX3ByaXZfZ3N0X3F1ZXJ5X2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIGdpbnQgaTsKLQotICBfZ3N0X3F1ZXJ5X3R5cGUgPSBnc3RfcXVlcnlfZ2V0X3R5cGUgKCk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9xdWVyeV9kZWJ1ZywgInF1ZXJ5IiwgMCwgInF1ZXJ5IHN5c3RlbSIpOwotCi0gIGZvciAoaSA9IDA7IHF1ZXJ5X3F1YXJrc1tpXS5uYW1lOyBpKyspIHsKLSAgICBxdWVyeV9xdWFya3NbaV0ucXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAocXVlcnlfcXVhcmtzW2ldLm5hbWUpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWU6Ci0gKiBAdHlwZTogdGhlIHF1ZXJ5IHR5cGUKLSAqCi0gKiBHZXQgYSBwcmludGFibGUgbmFtZSBmb3IgdGhlIGdpdmVuIHF1ZXJ5IHR5cGUuIERvIG5vdCBtb2RpZnkgb3IgZnJlZS4KLSAqCi0gKiBSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byB0aGUgc3RhdGljIG5hbWUgb2YgdGhlIHF1ZXJ5LgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfcXVlcnlfdHlwZV9nZXRfbmFtZSAoR3N0UXVlcnlUeXBlIHR5cGUpCi17Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBxdWVyeV9xdWFya3NbaV0ubmFtZTsgaSsrKSB7Ci0gICAgaWYgKHR5cGUgPT0gcXVlcnlfcXVhcmtzW2ldLnR5cGUpCi0gICAgICByZXR1cm4gcXVlcnlfcXVhcmtzW2ldLm5hbWU7Ci0gIH0KLSAgcmV0dXJuICJ1bmtub3duIjsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfdHlwZV90b19xdWFyazoKLSAqIEB0eXBlOiB0aGUgcXVlcnkgdHlwZQotICoKLSAqIEdldCB0aGUgdW5pcXVlIHF1YXJrIGZvciB0aGUgZ2l2ZW4gcXVlcnkgdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcXVhcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWVyeSB0eXBlCi0gKi8KLUdRdWFyawotZ3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmsgKEdzdFF1ZXJ5VHlwZSB0eXBlKQotewotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgcXVlcnlfcXVhcmtzW2ldLm5hbWU7IGkrKykgewotICAgIGlmICh0eXBlID09IHF1ZXJ5X3F1YXJrc1tpXS50eXBlKQotICAgICAgcmV0dXJuIHF1ZXJ5X3F1YXJrc1tpXS5xdWFyazsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfdHlwZV9nZXRfZmxhZ3M6Ci0gKiBAdHlwZTogYSAjR3N0UXVlcnlUeXBlCi0gKgotICogR2V0cyB0aGUgI0dzdFF1ZXJ5VHlwZUZsYWdzIGFzc29jaWF0ZWQgd2l0aCBAdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RRdWVyeVR5cGVGbGFncy4KLSAqLwotR3N0UXVlcnlUeXBlRmxhZ3MKLWdzdF9xdWVyeV90eXBlX2dldF9mbGFncyAoR3N0UXVlcnlUeXBlIHR5cGUpCi17Ci0gIEdzdFF1ZXJ5VHlwZUZsYWdzIHJldDsKLQotICByZXQgPSB0eXBlICYgKCgxIDw8IEdTVF9RVUVSWV9OVU1fU0hJRlQpIC0gMSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLV9nc3RfcXVlcnlfZnJlZSAoR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHF1ZXJ5ICE9IE5VTEwpOwotCi0gIHMgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGlmIChzKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChzLCBOVUxMKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICB9Ci0KLSAgZ19zbGljZV9mcmVlMSAoc2l6ZW9mIChHc3RRdWVyeUltcGwpLCBxdWVyeSk7Ci19Ci0KLXN0YXRpYyBHc3RRdWVyeSAqCi1fZ3N0X3F1ZXJ5X2NvcHkgKEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFF1ZXJ5ICpjb3B5OwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgcyA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgaWYgKHMpIHsKLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzKTsKLSAgfQotICBjb3B5ID0gZ3N0X3F1ZXJ5X25ld19jdXN0b20gKHF1ZXJ5LT50eXBlLCBzKTsKLQotICByZXR1cm4gY29weTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uOgotICogQGZvcm1hdDogdGhlIGRlZmF1bHQgI0dzdEZvcm1hdCBmb3IgdGhlIG5ldyBxdWVyeQotICoKLSAqIENvbnN0cnVjdHMgYSBuZXcgcXVlcnkgc3RyZWFtIHBvc2l0aW9uIHF1ZXJ5IG9iamVjdC4gVXNlIGdzdF9xdWVyeV91bnJlZigpCi0gKiB3aGVuIGRvbmUgd2l0aCBpdC4gQSBwb3NpdGlvbiBxdWVyeSBpcyB1c2VkIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHBvc2l0aW9uCi0gKiBvZiBwbGF5YmFjayBpbiB0aGUgc3RyZWFtcywgaW4gc29tZSBmb3JtYXQuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmKCkKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RRdWVyeQotICovCi1Hc3RRdWVyeSAqCi1nc3RfcXVlcnlfbmV3X3Bvc2l0aW9uIChHc3RGb3JtYXQgZm9ybWF0KQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKFFVRVJZX1BPU0lUSU9OKSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKENVUlJFTlQpLCBHX1RZUEVfSU5UNjQsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSksIE5VTEwpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19jdXN0b20gKEdTVF9RVUVSWV9QT1NJVElPTiwgc3RydWN0dXJlKTsKLQotICByZXR1cm4gcXVlcnk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbjoKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkgd2l0aCBxdWVyeSB0eXBlIEdTVF9RVUVSWV9QT1NJVElPTgotICogQGZvcm1hdDogdGhlIHJlcXVlc3RlZCAjR3N0Rm9ybWF0Ci0gKiBAY3VyOiB0aGUgcG9zaXRpb24gdG8gc2V0Ci0gKgotICogQW5zd2VyIGEgcG9zaXRpb24gcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIHZhbHVlIGluIHRoZSBnaXZlbiBmb3JtYXQuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKEdzdFF1ZXJ5ICogcXVlcnksIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBjdXIpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9QT1NJVElPTik7Ci0KLSAgcyA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZm9ybWF0ID09IGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzLAotICAgICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKSk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKHMsCi0gICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChDVVJSRU5UKSwgR19UWVBFX0lOVDY0LCBjdXIsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbjoKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkKLSAqIEBmb3JtYXQ6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSAjR3N0Rm9ybWF0IG9mIHRoZQotICogICAgIHBvc2l0aW9uIHZhbHVlcyAobWF5IGJlICVOVUxMKQotICogQGN1cjogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24gKG1heSBiZSAlTlVMTCkKLSAqCi0gKiBQYXJzZSBhIHBvc2l0aW9uIHF1ZXJ5LCB3cml0aW5nIHRoZSBmb3JtYXQgaW50byBAZm9ybWF0LCBhbmQgdGhlIHBvc2l0aW9uCi0gKiBpbnRvIEBjdXIsIGlmIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlcnMgYXJlIG5vbi0lTlVMTC4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RGb3JtYXQgKiBmb3JtYXQsIGdpbnQ2NCAqIGN1cikKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfUE9TSVRJT04pOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgaWYgKGZvcm1hdCkKLSAgICAqZm9ybWF0ID0KLSAgICAgICAgKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSkpOwotICBpZiAoY3VyKQotICAgICpjdXIgPSBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQ1VSUkVOVCkpKTsKLX0KLQotCi0vKioKLSAqIGdzdF9xdWVyeV9uZXdfZHVyYXRpb246Ci0gKiBAZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCBmb3IgdGhpcyBkdXJhdGlvbiBxdWVyeQotICoKLSAqIENvbnN0cnVjdHMgYSBuZXcgc3RyZWFtIGR1cmF0aW9uIHF1ZXJ5IG9iamVjdCB0byBxdWVyeSBpbiB0aGUgZ2l2ZW4gZm9ybWF0LgotICogVXNlIGdzdF9xdWVyeV91bnJlZigpIHdoZW4gZG9uZSB3aXRoIGl0LiBBIGR1cmF0aW9uIHF1ZXJ5IHdpbGwgZ2l2ZSB0aGUKLSAqIHRvdGFsIGxlbmd0aCBvZiB0aGUgc3RyZWFtLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZigpCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UXVlcnkKLSAqLwotR3N0UXVlcnkgKgotZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoR3N0Rm9ybWF0IGZvcm1hdCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChRVUVSWV9EVVJBVElPTiksCi0gICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChEVVJBVElPTiksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwgTlVMTCk7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2N1c3RvbSAoR1NUX1FVRVJZX0RVUkFUSU9OLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBxdWVyeTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uOgotICogQHF1ZXJ5OiBhICNHc3RRdWVyeQotICogQGZvcm1hdDogdGhlICNHc3RGb3JtYXQgZm9yIHRoZSBkdXJhdGlvbgotICogQGR1cmF0aW9uOiB0aGUgZHVyYXRpb24gb2YgdGhlIHN0cmVhbQotICoKLSAqIEFuc3dlciBhIGR1cmF0aW9uIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZSBpbiB0aGUgZ2l2ZW4gZm9ybWF0LgotICovCi12b2lkCi1nc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgZHVyYXRpb24pCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9EVVJBVElPTik7Ci0KLSAgcyA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZm9ybWF0ID09IGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzLAotICAgICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzLCBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChEVVJBVElPTiksIEdfVFlQRV9JTlQ2NCwgZHVyYXRpb24sIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbjoKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkKLSAqIEBmb3JtYXQ6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSAjR3N0Rm9ybWF0IG9mIHRoZSBkdXJhdGlvbgotICogICAgIHZhbHVlLCBvciAlTlVMTC4KLSAqIEBkdXJhdGlvbjogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIHRvdGFsIGR1cmF0aW9uLCBvciAlTlVMTC4KLSAqCi0gKiBQYXJzZSBhIGR1cmF0aW9uIHF1ZXJ5IGFuc3dlci4gV3JpdGUgdGhlIGZvcm1hdCBvZiB0aGUgZHVyYXRpb24gaW50byBAZm9ybWF0LAotICogYW5kIHRoZSB2YWx1ZSBpbnRvIEBkdXJhdGlvbiwgaWYgdGhlIHJlc3BlY3RpdmUgdmFyaWFibGVzIGFyZSBub24tJU5VTEwuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0ICogZm9ybWF0LAotICAgIGdpbnQ2NCAqIGR1cmF0aW9uKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9EVVJBVElPTik7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBpZiAoZm9ybWF0KQotICAgICpmb3JtYXQgPQotICAgICAgICAoR3N0Rm9ybWF0KSBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChGT1JNQVQpKSk7Ci0gIGlmIChkdXJhdGlvbikKLSAgICAqZHVyYXRpb24gPSBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoRFVSQVRJT04pKSk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X25ld19sYXRlbmN5OgotICoKLSAqIENvbnN0cnVjdHMgYSBuZXcgbGF0ZW5jeSBxdWVyeSBvYmplY3QuCi0gKiBVc2UgZ3N0X3F1ZXJ5X3VucmVmKCkgd2hlbiBkb25lIHdpdGggaXQuIEEgbGF0ZW5jeSBxdWVyeSBpcyB1c3VhbGx5IHBlcmZvcm1lZAotICogYnkgc2lua3MgdG8gY29tcGVuc2F0ZSBmb3IgYWRkaXRpb25hbCBsYXRlbmN5IGludHJvZHVjZWQgYnkgZWxlbWVudHMgaW4gdGhlCi0gKiBwaXBlbGluZS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYoKQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0UXVlcnkKLSAqLwotR3N0UXVlcnkgKgotZ3N0X3F1ZXJ5X25ld19sYXRlbmN5ICh2b2lkKQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKFFVRVJZX0xBVEVOQ1kpLAotICAgICAgR1NUX1FVQVJLIChMSVZFKSwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLAotICAgICAgR1NUX1FVQVJLIChNSU5fTEFURU5DWSksIEdfVFlQRV9VSU5UNjQsIEdfR1VJTlQ2NF9DT05TVEFOVCAoMCksCi0gICAgICBHU1RfUVVBUksgKE1BWF9MQVRFTkNZKSwgR19UWVBFX1VJTlQ2NCwgR1NUX0NMT0NLX1RJTUVfTk9ORSwgTlVMTCk7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2N1c3RvbSAoR1NUX1FVRVJZX0xBVEVOQ1ksIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIHF1ZXJ5OwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeToKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkKLSAqIEBsaXZlOiBpZiB0aGVyZSBpcyBhIGxpdmUgZWxlbWVudCB1cHN0cmVhbQotICogQG1pbl9sYXRlbmN5OiB0aGUgbWluaW1hbCBsYXRlbmN5IG9mIHRoZSB1cHN0cmVhbSBlbGVtZW50cwotICogQG1heF9sYXRlbmN5OiB0aGUgbWF4aW1hbCBsYXRlbmN5IG9mIHRoZSB1cHN0cmVhbSBlbGVtZW50cwotICoKLSAqIEFuc3dlciBhIGxhdGVuY3kgcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LgotICovCi12b2lkCi1nc3RfcXVlcnlfc2V0X2xhdGVuY3kgKEdzdFF1ZXJ5ICogcXVlcnksIGdib29sZWFuIGxpdmUsCi0gICAgR3N0Q2xvY2tUaW1lIG1pbl9sYXRlbmN5LCBHc3RDbG9ja1RpbWUgbWF4X2xhdGVuY3kpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0xBVEVOQ1kpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobWluX2xhdGVuY3kpKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKExJVkUpLCBHX1RZUEVfQk9PTEVBTiwgbGl2ZSwKLSAgICAgIEdTVF9RVUFSSyAoTUlOX0xBVEVOQ1kpLCBHX1RZUEVfVUlOVDY0LCBtaW5fbGF0ZW5jeSwKLSAgICAgIEdTVF9RVUFSSyAoTUFYX0xBVEVOQ1kpLCBHX1RZUEVfVUlOVDY0LCBtYXhfbGF0ZW5jeSwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3k6Ci0gKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5Ci0gKiBAbGl2ZTogKG91dCkgKGFsbG93LW5vbmUpOiBzdG9yYWdlIGZvciBsaXZlIG9yICVOVUxMCi0gKiBAbWluX2xhdGVuY3k6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSBtaW4gbGF0ZW5jeSBvciAlTlVMTAotICogQG1heF9sYXRlbmN5OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgbWF4IGxhdGVuY3kgb3IgJU5VTEwKLSAqCi0gKiBQYXJzZSBhIGxhdGVuY3kgcXVlcnkgYW5zd2VyLgotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAoR3N0UXVlcnkgKiBxdWVyeSwgZ2Jvb2xlYW4gKiBsaXZlLAotICAgIEdzdENsb2NrVGltZSAqIG1pbl9sYXRlbmN5LCBHc3RDbG9ja1RpbWUgKiBtYXhfbGF0ZW5jeSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfTEFURU5DWSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBpZiAobGl2ZSkKLSAgICAqbGl2ZSA9Ci0gICAgICAgIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKExJVkUpKSk7Ci0gIGlmIChtaW5fbGF0ZW5jeSkKLSAgICAqbWluX2xhdGVuY3kgPSBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKE1JTl9MQVRFTkNZKSkpOwotICBpZiAobWF4X2xhdGVuY3kpCi0gICAgKm1heF9sYXRlbmN5ID0gZ192YWx1ZV9nZXRfdWludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChNQVhfTEFURU5DWSkpKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfbmV3X2NvbnZlcnQ6Ci0gKiBAc3JjX2Zvcm1hdDogdGhlIHNvdXJjZSAjR3N0Rm9ybWF0IGZvciB0aGUgbmV3IHF1ZXJ5Ci0gKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byBjb252ZXJ0Ci0gKiBAZGVzdF9mb3JtYXQ6IHRoZSB0YXJnZXQgI0dzdEZvcm1hdAotICoKLSAqIENvbnN0cnVjdHMgYSBuZXcgY29udmVydCBxdWVyeSBvYmplY3QuIFVzZSBnc3RfcXVlcnlfdW5yZWYoKQotICogd2hlbiBkb25lIHdpdGggaXQuIEEgY29udmVydCBxdWVyeSBpcyB1c2VkIHRvIGFzayBmb3IgYSBjb252ZXJzaW9uIGJldHdlZW4KLSAqIG9uZSBmb3JtYXQgYW5kIGFub3RoZXIuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmKCkKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdFF1ZXJ5Ci0gKi8KLUdzdFF1ZXJ5ICoKLWdzdF9xdWVyeV9uZXdfY29udmVydCAoR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCB2YWx1ZSwKLSAgICBHc3RGb3JtYXQgZGVzdF9mb3JtYXQpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWQgKEdTVF9RVUFSSyAoUVVFUllfQ09OVkVSVCksCi0gICAgICBHU1RfUVVBUksgKFNSQ19GT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIHNyY19mb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKFNSQ19WQUxVRSksIEdfVFlQRV9JTlQ2NCwgdmFsdWUsCi0gICAgICBHU1RfUVVBUksgKERFU1RfRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBkZXN0X2Zvcm1hdCwKLSAgICAgIEdTVF9RVUFSSyAoREVTVF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwgTlVMTCk7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2N1c3RvbSAoR1NUX1FVRVJZX0NPTlZFUlQsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIHF1ZXJ5OwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9zZXRfY29udmVydDoKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkKLSAqIEBzcmNfZm9ybWF0OiB0aGUgc291cmNlICNHc3RGb3JtYXQKLSAqIEBzcmNfdmFsdWU6IHRoZSBzb3VyY2UgdmFsdWUKLSAqIEBkZXN0X2Zvcm1hdDogdGhlIGRlc3RpbmF0aW9uICNHc3RGb3JtYXQKLSAqIEBkZXN0X3ZhbHVlOiB0aGUgZGVzdGluYXRpb24gdmFsdWUKLSAqCi0gKiBBbnN3ZXIgYSBjb252ZXJ0IHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZXMuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfY29udmVydCAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfdmFsdWUsCi0gICAgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgZGVzdF92YWx1ZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQ09OVkVSVCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChTUkNfRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBzcmNfZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChTUkNfVkFMVUUpLCBHX1RZUEVfSU5UNjQsIHNyY192YWx1ZSwKLSAgICAgIEdTVF9RVUFSSyAoREVTVF9GT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGRlc3RfZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChERVNUX1ZBTFVFKSwgR19UWVBFX0lOVDY0LCBkZXN0X3ZhbHVlLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2VfY29udmVydDoKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkKLSAqIEBzcmNfZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgI0dzdEZvcm1hdCBvZiB0aGUKLSAqICAgICBzb3VyY2UgdmFsdWUsIG9yICVOVUxMCi0gKiBAc3JjX3ZhbHVlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgc291cmNlIHZhbHVlLCBvciAlTlVMTAotICogQGRlc3RfZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgI0dzdEZvcm1hdCBvZiB0aGUKLSAqICAgICBkZXN0aW5hdGlvbiB2YWx1ZSwgb3IgJU5VTEwKLSAqIEBkZXN0X3ZhbHVlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgZGVzdGluYXRpb24gdmFsdWUsCi0gKiAgICAgb3IgJU5VTEwKLSAqCi0gKiBQYXJzZSBhIGNvbnZlcnQgcXVlcnkgYW5zd2VyLiBBbnkgb2YgQHNyY19mb3JtYXQsIEBzcmNfdmFsdWUsIEBkZXN0X2Zvcm1hdCwKLSAqIGFuZCBAZGVzdF92YWx1ZSBtYXkgYmUgJU5VTEwsIGluIHdoaWNoIGNhc2UgdGhhdCB2YWx1ZSBpcyBvbWl0dGVkLgotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2VfY29udmVydCAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0ICogc3JjX2Zvcm1hdCwKLSAgICBnaW50NjQgKiBzcmNfdmFsdWUsIEdzdEZvcm1hdCAqIGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9DT05WRVJUKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGlmIChzcmNfZm9ybWF0KQotICAgICpzcmNfZm9ybWF0ID0KLSAgICAgICAgKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoU1JDX0ZPUk1BVCkpKTsKLSAgaWYgKHNyY192YWx1ZSkKLSAgICAqc3JjX3ZhbHVlID0gZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFNSQ19WQUxVRSkpKTsKLSAgaWYgKGRlc3RfZm9ybWF0KQotICAgICpkZXN0X2Zvcm1hdCA9Ci0gICAgICAgIChHc3RGb3JtYXQpIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKERFU1RfRk9STUFUKSkpOwotICBpZiAoZGVzdF92YWx1ZSkKLSAgICAqZGVzdF92YWx1ZSA9IGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChERVNUX1ZBTFVFKSkpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9uZXdfc2VnbWVudDoKLSAqIEBmb3JtYXQ6IHRoZSAjR3N0Rm9ybWF0IGZvciB0aGUgbmV3IHF1ZXJ5Ci0gKgotICogQ29uc3RydWN0cyBhIG5ldyBzZWdtZW50IHF1ZXJ5IG9iamVjdC4gVXNlIGdzdF9xdWVyeV91bnJlZigpCi0gKiB3aGVuIGRvbmUgd2l0aCBpdC4gQSBzZWdtZW50IHF1ZXJ5IGlzIHVzZWQgdG8gZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50bHkgY29uZmlndXJlZCBzZWdtZW50IGZvciBwbGF5YmFjay4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYoKQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5Ci0gKi8KLUdzdFF1ZXJ5ICoKLWdzdF9xdWVyeV9uZXdfc2VnbWVudCAoR3N0Rm9ybWF0IGZvcm1hdCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChRVUVSWV9TRUdNRU5UKSwKLSAgICAgIEdTVF9RVUFSSyAoUkFURSksIEdfVFlQRV9ET1VCTEUsIChnZG91YmxlKSAwLjAsCi0gICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChTVEFSVF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwKLSAgICAgIEdTVF9RVUFSSyAoU1RPUF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwgTlVMTCk7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2N1c3RvbSAoR1NUX1FVRVJZX1NFR01FTlQsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIHF1ZXJ5OwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9zZXRfc2VnbWVudDoKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkKLSAqIEByYXRlOiB0aGUgcmF0ZSBvZiB0aGUgc2VnbWVudAotICogQGZvcm1hdDogdGhlICNHc3RGb3JtYXQgb2YgdGhlIHNlZ21lbnQgdmFsdWVzIChAc3RhcnRfdmFsdWUgYW5kIEBzdG9wX3ZhbHVlKQotICogQHN0YXJ0X3ZhbHVlOiB0aGUgc3RhcnQgdmFsdWUKLSAqIEBzdG9wX3ZhbHVlOiB0aGUgc3RvcCB2YWx1ZQotICoKLSAqIEFuc3dlciBhIHNlZ21lbnQgcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIHZhbHVlcy4gVGhlIG5vcm1hbAotICogcGxheWJhY2sgc2VnbWVudCBvZiBhIHBpcGVsaW5lIGlzIDAgdG8gZHVyYXRpb24gYXQgdGhlIGRlZmF1bHQgcmF0ZSBvZgotICogMS4wLiBJZiBhIHNlZWsgd2FzIHBlcmZvcm1lZCBvbiB0aGUgcGlwZWxpbmUgdG8gcGxheSBhIGRpZmZlcmVudAotICogc2VnbWVudCwgdGhpcyBxdWVyeSB3aWxsIHJldHVybiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGluIHRoZSBsYXN0IHNlZWsuCi0gKgotICogQHN0YXJ0X3ZhbHVlIGFuZCBAc3RvcF92YWx1ZSB3aWxsIHJlc3BlY3RpdmVseSBjb250YWluIHRoZSBjb25maWd1cmVkCi0gKiBwbGF5YmFjayByYW5nZSBzdGFydCBhbmQgc3RvcCB2YWx1ZXMgZXhwcmVzc2VkIGluIEBmb3JtYXQuCi0gKiBUaGUgdmFsdWVzIGFyZSBhbHdheXMgYmV0d2VlbiAwIGFuZCB0aGUgZHVyYXRpb24gb2YgdGhlIG1lZGlhIGFuZAotICogQHN0YXJ0X3ZhbHVlIDw9IEBzdG9wX3ZhbHVlLiBAcmF0ZSB3aWxsIGNvbnRhaW4gdGhlIHBsYXliYWNrIHJhdGUuIEZvcgotICogbmVnYXRpdmUgcmF0ZXMsIHBsYXliYWNrIHdpbGwgYWN0dWFsbHkgaGFwcGVuIGZyb20gQHN0b3BfdmFsdWUgdG8KLSAqIEBzdGFydF92YWx1ZS4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3NldF9zZWdtZW50IChHc3RRdWVyeSAqIHF1ZXJ5LCBnZG91YmxlIHJhdGUsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ2ludDY0IHN0YXJ0X3ZhbHVlLCBnaW50NjQgc3RvcF92YWx1ZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfU0VHTUVOVCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChSQVRFKSwgR19UWVBFX0RPVUJMRSwgcmF0ZSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKFNUQVJUX1ZBTFVFKSwgR19UWVBFX0lOVDY0LCBzdGFydF92YWx1ZSwKLSAgICAgIEdTVF9RVUFSSyAoU1RPUF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgc3RvcF92YWx1ZSwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQ6Ci0gKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5Ci0gKiBAcmF0ZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIHJhdGUgb2YgdGhlIHNlZ21lbnQsIG9yICVOVUxMCi0gKiBAZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgI0dzdEZvcm1hdCBvZiB0aGUgdmFsdWVzLAotICogICAgIG9yICVOVUxMCi0gKiBAc3RhcnRfdmFsdWU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSBzdGFydCB2YWx1ZSwgb3IgJU5VTEwKLSAqIEBzdG9wX3ZhbHVlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9yYWdlIGZvciB0aGUgc3RvcCB2YWx1ZSwgb3IgJU5VTEwKLSAqCi0gKiBQYXJzZSBhIHNlZ21lbnQgcXVlcnkgYW5zd2VyLiBBbnkgb2YgQHJhdGUsIEBmb3JtYXQsIEBzdGFydF92YWx1ZSwgYW5kCi0gKiBAc3RvcF92YWx1ZSBtYXkgYmUgJU5VTEwsIHdoaWNoIHdpbGwgY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBvbWl0dGVkLgotICoKLSAqIFNlZSBnc3RfcXVlcnlfc2V0X3NlZ21lbnQoKSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cy4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQgKEdzdFF1ZXJ5ICogcXVlcnksIGdkb3VibGUgKiByYXRlLCBHc3RGb3JtYXQgKiBmb3JtYXQsCi0gICAgZ2ludDY0ICogc3RhcnRfdmFsdWUsIGdpbnQ2NCAqIHN0b3BfdmFsdWUpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1NFR01FTlQpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgaWYgKHJhdGUpCi0gICAgKnJhdGUgPSBnX3ZhbHVlX2dldF9kb3VibGUgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFJBVEUpKSk7Ci0gIGlmIChmb3JtYXQpCi0gICAgKmZvcm1hdCA9Ci0gICAgICAgIChHc3RGb3JtYXQpIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKTsKLSAgaWYgKHN0YXJ0X3ZhbHVlKQotICAgICpzdGFydF92YWx1ZSA9IGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChTVEFSVF9WQUxVRSkpKTsKLSAgaWYgKHN0b3BfdmFsdWUpCi0gICAgKnN0b3BfdmFsdWUgPSBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoU1RPUF9WQUxVRSkpKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfbmV3X2N1c3RvbToKLSAqIEB0eXBlOiB0aGUgcXVlcnkgdHlwZQotICogQHN0cnVjdHVyZTogKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogYSBzdHJ1Y3R1cmUgZm9yIHRoZSBxdWVyeQotICoKLSAqIENvbnN0cnVjdHMgYSBuZXcgY3VzdG9tIHF1ZXJ5IG9iamVjdC4gVXNlIGdzdF9xdWVyeV91bnJlZigpCi0gKiB3aGVuIGRvbmUgd2l0aCBpdC4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYoKQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5Ci0gKi8KLUdzdFF1ZXJ5ICoKLWdzdF9xdWVyeV9uZXdfY3VzdG9tIChHc3RRdWVyeVR5cGUgdHlwZSwgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQotewotICBHc3RRdWVyeUltcGwgKnF1ZXJ5OwotCi0gIHF1ZXJ5ID0gZ19zbGljZV9uZXcwIChHc3RRdWVyeUltcGwpOwotCi0gIEdTVF9ERUJVRyAoImNyZWF0aW5nIG5ldyBxdWVyeSAlcCAlcyIsIHF1ZXJ5LCBnc3RfcXVlcnlfdHlwZV9nZXRfbmFtZSAodHlwZSkpOwotCi0gIGlmIChzdHJ1Y3R1cmUpIHsKLSAgICAvKiBzdHJ1Y3R1cmUgbXVzdCBub3QgaGF2ZSBhIHBhcmVudCAqLwotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50IChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAmcXVlcnktPnF1ZXJ5Lm1pbmlfb2JqZWN0LnJlZmNvdW50KSkKLSAgICAgIGdvdG8gaGFkX3BhcmVudDsKLSAgfQotCi0gIGdzdF9taW5pX29iamVjdF9pbml0IChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocXVlcnkpLCAwLCBfZ3N0X3F1ZXJ5X3R5cGUsCi0gICAgICAoR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbikgX2dzdF9xdWVyeV9jb3B5LCBOVUxMLAotICAgICAgKEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24pIF9nc3RfcXVlcnlfZnJlZSk7Ci0KLSAgR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9IHR5cGU7Ci0gIEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KSA9IHN0cnVjdHVyZTsKLQotICByZXR1cm4gR1NUX1FVRVJZX0NBU1QgKHF1ZXJ5KTsKLQotICAvKiBFUlJPUlMgKi8KLWhhZF9wYXJlbnQ6Ci0gIHsKLSAgICBnX3NsaWNlX2ZyZWUxIChzaXplb2YgKEdzdFF1ZXJ5SW1wbCksIHF1ZXJ5KTsKLSAgICBnX3dhcm5pbmcgKCJzdHJ1Y3R1cmUgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyIG9iamVjdCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmU6Ci0gKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5Ci0gKgotICogR2V0IHRoZSBzdHJ1Y3R1cmUgb2YgYSBxdWVyeS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0U3RydWN0dXJlIG9mIHRoZSBxdWVyeS4gVGhlIHN0cnVjdHVyZSBpcwotICogICAgIHN0aWxsIG93bmVkIGJ5IHRoZSBxdWVyeSBhbmQgd2lsbCB0aGVyZWZvcmUgYmUgZnJlZWQgd2hlbiB0aGUgcXVlcnkKLSAqICAgICBpcyB1bnJlZmZlZC4KLSAqLwotY29uc3QgR3N0U3RydWN0dXJlICoKLWdzdF9xdWVyeV9nZXRfc3RydWN0dXJlIChHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1FVRVJZIChxdWVyeSksIE5VTEwpOwotCi0gIHJldHVybiBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3dyaXRhYmxlX3N0cnVjdHVyZToKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkKLSAqCi0gKiBHZXQgdGhlIHN0cnVjdHVyZSBvZiBhIHF1ZXJ5LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggYSB3cml0YWJsZQotICogQHF1ZXJ5IHNvIHRoYXQgdGhlIHJldHVybmVkIHN0cnVjdHVyZSBpcyBndWFyYW50ZWVkIHRvIGJlIHdyaXRhYmxlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RTdHJ1Y3R1cmUgb2YgdGhlIHF1ZXJ5LiBUaGUgc3RydWN0dXJlIGlzCi0gKiAgICAgc3RpbGwgb3duZWQgYnkgdGhlIHF1ZXJ5IGFuZCB3aWxsIHRoZXJlZm9yZSBiZSBmcmVlZCB3aGVuIHRoZSBxdWVyeQotICogICAgIGlzIHVucmVmZmVkLgotICovCi1Hc3RTdHJ1Y3R1cmUgKgotZ3N0X3F1ZXJ5X3dyaXRhYmxlX3N0cnVjdHVyZSAoR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19RVUVSWSAocXVlcnkpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpLCBOVUxMKTsKLQotICByZXR1cm4gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9uZXdfc2Vla2luZzoKLSAqIEBmb3JtYXQ6IHRoZSBkZWZhdWx0ICNHc3RGb3JtYXQgZm9yIHRoZSBuZXcgcXVlcnkKLSAqCi0gKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgc2Vla2luZyBwcm9wZXJ0aWVzIG9mCi0gKiB0aGUgc3RyZWFtLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZigpCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UXVlcnkKLSAqLwotR3N0UXVlcnkgKgotZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHc3RGb3JtYXQgZm9ybWF0KQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKFFVRVJZX1NFRUtJTkcpLAotICAgICAgR1NUX1FVQVJLIChGT1JNQVQpLCBHU1RfVFlQRV9GT1JNQVQsIGZvcm1hdCwKLSAgICAgIEdTVF9RVUFSSyAoU0VFS0FCTEUpLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsCi0gICAgICBHU1RfUVVBUksgKFNFR01FTlRfU1RBUlQpLCBHX1RZUEVfSU5UNjQsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSksCi0gICAgICBHU1RfUVVBUksgKFNFR01FTlRfRU5EKSwgR19UWVBFX0lOVDY0LCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpLCBOVUxMKTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfY3VzdG9tIChHU1RfUVVFUllfU0VFS0lORywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gcXVlcnk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF9zZWVraW5nOgotICogQHF1ZXJ5OiBhICNHc3RRdWVyeQotICogQGZvcm1hdDogdGhlIGZvcm1hdCB0byBzZXQgZm9yIHRoZSBAc2VnbWVudF9zdGFydCBhbmQgQHNlZ21lbnRfZW5kIHZhbHVlcwotICogQHNlZWthYmxlOiB0aGUgc2Vla2FibGUgZmxhZyB0byBzZXQKLSAqIEBzZWdtZW50X3N0YXJ0OiB0aGUgc2VnbWVudF9zdGFydCB0byBzZXQKLSAqIEBzZWdtZW50X2VuZDogdGhlIHNlZ21lbnRfZW5kIHRvIHNldAotICoKLSAqIFNldCB0aGUgc2Vla2luZyBxdWVyeSByZXN1bHQgZmllbGRzIGluIEBxdWVyeS4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIGdib29sZWFuIHNlZWthYmxlLCBnaW50NjQgc2VnbWVudF9zdGFydCwgZ2ludDY0IHNlZ21lbnRfZW5kKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9TRUVLSU5HKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKFNFRUtBQkxFKSwgR19UWVBFX0JPT0xFQU4sIHNlZWthYmxlLAotICAgICAgR1NUX1FVQVJLIChTRUdNRU5UX1NUQVJUKSwgR19UWVBFX0lOVDY0LCBzZWdtZW50X3N0YXJ0LAotICAgICAgR1NUX1FVQVJLIChTRUdNRU5UX0VORCksIEdfVFlQRV9JTlQ2NCwgc2VnbWVudF9lbmQsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nOgotICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9TRUVLSU5HIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5Ci0gKiBAZm9ybWF0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBmb3JtYXQgdG8gc2V0IGZvciB0aGUgQHNlZ21lbnRfc3RhcnQKLSAqICAgICBhbmQgQHNlZ21lbnRfZW5kIHZhbHVlcywgb3IgJU5VTEwKLSAqIEBzZWVrYWJsZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc2Vla2FibGUgZmxhZyB0byBzZXQsIG9yICVOVUxMCi0gKiBAc2VnbWVudF9zdGFydDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc2VnbWVudF9zdGFydCB0byBzZXQsIG9yICVOVUxMCi0gKiBAc2VnbWVudF9lbmQ6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHNlZ21lbnRfZW5kIHRvIHNldCwgb3IgJU5VTEwKLSAqCi0gKiBQYXJzZSBhIHNlZWtpbmcgcXVlcnksIHdyaXRpbmcgdGhlIGZvcm1hdCBpbnRvIEBmb3JtYXQsIGFuZAotICogb3RoZXIgcmVzdWx0cyBpbnRvIHRoZSBwYXNzZWQgcGFyYW1ldGVycywgaWYgdGhlIHJlc3BlY3RpdmUgcGFyYW1ldGVycwotICogYXJlIG5vbi0lTlVMTAotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Rm9ybWF0ICogZm9ybWF0LAotICAgIGdib29sZWFuICogc2Vla2FibGUsIGdpbnQ2NCAqIHNlZ21lbnRfc3RhcnQsIGdpbnQ2NCAqIHNlZ21lbnRfZW5kKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9TRUVLSU5HKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGlmIChmb3JtYXQpCi0gICAgKmZvcm1hdCA9Ci0gICAgICAgIChHc3RGb3JtYXQpIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKTsKLSAgaWYgKHNlZWthYmxlKQotICAgICpzZWVrYWJsZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFNFRUtBQkxFKSkpOwotICBpZiAoc2VnbWVudF9zdGFydCkKLSAgICAqc2VnbWVudF9zdGFydCA9IGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChTRUdNRU5UX1NUQVJUKSkpOwotICBpZiAoc2VnbWVudF9lbmQpCi0gICAgKnNlZ21lbnRfZW5kID0gZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFNFR01FTlRfRU5EKSkpOwotfQotCi1zdGF0aWMgR0FycmF5ICoKLWVuc3VyZV9hcnJheSAoR3N0U3RydWN0dXJlICogcywgR1F1YXJrIHF1YXJrLCBnc2l6ZSBlbGVtZW50X3NpemUsCi0gICAgR0Rlc3Ryb3lOb3RpZnkgY2xlYXJfZnVuYykKLXsKLSAgR0FycmF5ICphcnJheTsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLQotICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzLCBxdWFyayk7Ci0gIGlmICh2YWx1ZSkgewotICAgIGFycmF5ID0gKEdBcnJheSAqKSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpOwotICB9IGVsc2UgewotICAgIEdWYWx1ZSBuZXdfYXJyYXlfdmFsID0geyAwLCB9OwotCi0gICAgYXJyYXkgPSBnX2FycmF5X25ldyAoRkFMU0UsIFRSVUUsIGVsZW1lbnRfc2l6ZSk7Ci0gICAgaWYgKGNsZWFyX2Z1bmMpCi0gICAgICBnX2FycmF5X3NldF9jbGVhcl9mdW5jIChhcnJheSwgY2xlYXJfZnVuYyk7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZuZXdfYXJyYXlfdmFsLCBHX1RZUEVfQVJSQVkpOwotICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAoJm5ld19hcnJheV92YWwsIGFycmF5KTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAocywgcXVhcmssICZuZXdfYXJyYXlfdmFsKTsKLSAgfQotICByZXR1cm4gYXJyYXk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X25ld19mb3JtYXRzOgotICoKLSAqIENvbnN0cnVjdHMgYSBuZXcgcXVlcnkgb2JqZWN0IGZvciBxdWVyeWluZyBmb3JtYXRzIG9mCi0gKiB0aGUgc3RyZWFtLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZigpCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UXVlcnkKLSAqLwotR3N0UXVlcnkgKgotZ3N0X3F1ZXJ5X25ld19mb3JtYXRzICh2b2lkKQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5IChHU1RfUVVBUksgKFFVRVJZX0ZPUk1BVFMpKTsKLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2N1c3RvbSAoR1NUX1FVRVJZX0ZPUk1BVFMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIHF1ZXJ5OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F1ZXJ5X2xpc3RfYWRkX2Zvcm1hdCAoR1ZhbHVlICogbGlzdCwgR3N0Rm9ybWF0IGZvcm1hdCkKLXsKLSAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07Ci0KLSAgZ192YWx1ZV9pbml0ICgmaXRlbSwgR1NUX1RZUEVfRk9STUFUKTsKLSAgZ192YWx1ZV9zZXRfZW51bSAoJml0ZW0sIGZvcm1hdCk7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAobGlzdCwgJml0ZW0pOwotICBnX3ZhbHVlX3Vuc2V0ICgmaXRlbSk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzOgotICogQHF1ZXJ5OiBhICNHc3RRdWVyeQotICogQG5fZm9ybWF0czogdGhlIG51bWJlciBvZiBmb3JtYXRzIHRvIHNldC4KLSAqIEAuLi46IEEgbnVtYmVyIG9mIEBHc3RGb3JtYXRzIGVxdWFsIHRvIEBuX2Zvcm1hdHMuCi0gKgotICogU2V0IHRoZSBmb3JtYXRzIHF1ZXJ5IHJlc3VsdCBmaWVsZHMgaW4gQHF1ZXJ5LiBUaGUgbnVtYmVyIG9mIGZvcm1hdHMgcGFzc2VkCi0gKiBtdXN0IGJlIGVxdWFsIHRvIEBuX2Zvcm1hdHMuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfZm9ybWF0cyAoR3N0UXVlcnkgKiBxdWVyeSwgZ2ludCBuX2Zvcm1hdHMsIC4uLikKLXsKLSAgdmFfbGlzdCBhcDsKLSAgR1ZhbHVlIGxpc3QgPSB7IDAsIH07Ci0gIGdpbnQgaTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfRk9STUFUUyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKLQotICBnX3ZhbHVlX2luaXQgKCZsaXN0LCBHU1RfVFlQRV9MSVNUKTsKLQotICB2YV9zdGFydCAoYXAsIG5fZm9ybWF0cyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuX2Zvcm1hdHM7IGkrKykgewotICAgIGdzdF9xdWVyeV9saXN0X2FkZF9mb3JtYXQgKCZsaXN0LCB2YV9hcmcgKGFwLCBHc3RGb3JtYXQpKTsKLSAgfQotICB2YV9lbmQgKGFwKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJmb3JtYXRzIiwgJmxpc3QpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZsaXN0KTsKLQotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9zZXRfZm9ybWF0c3Y6Ci0gKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5Ci0gKiBAbl9mb3JtYXRzOiB0aGUgbnVtYmVyIG9mIGZvcm1hdHMgdG8gc2V0LgotICogQGZvcm1hdHM6IChpbikgKGFycmF5IGxlbmd0aD1uX2Zvcm1hdHMpOiBhbiBhcnJheSBjb250YWluaW5nIEBuX2Zvcm1hdHMKLSAqICAgICBAR3N0Rm9ybWF0IHZhbHVlcy4KLSAqCi0gKiBTZXQgdGhlIGZvcm1hdHMgcXVlcnkgcmVzdWx0IGZpZWxkcyBpbiBAcXVlcnkuIFRoZSBudW1iZXIgb2YgZm9ybWF0cyBwYXNzZWQKLSAqIGluIHRoZSBAZm9ybWF0cyBhcnJheSBtdXN0IGJlIGVxdWFsIHRvIEBuX2Zvcm1hdHMuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfZm9ybWF0c3YgKEdzdFF1ZXJ5ICogcXVlcnksIGdpbnQgbl9mb3JtYXRzLAotICAgIGNvbnN0IEdzdEZvcm1hdCAqIGZvcm1hdHMpCi17Ci0gIEdWYWx1ZSBsaXN0ID0geyAwLCB9OwotICBnaW50IGk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0ZPUk1BVFMpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmbGlzdCwgR1NUX1RZUEVfTElTVCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuX2Zvcm1hdHM7IGkrKykgewotICAgIGdzdF9xdWVyeV9saXN0X2FkZF9mb3JtYXQgKCZsaXN0LCBmb3JtYXRzW2ldKTsKLSAgfQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJmb3JtYXRzIiwgJmxpc3QpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZsaXN0KTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzOgotICogQHF1ZXJ5OiBhICNHc3RRdWVyeQotICogQG5fZm9ybWF0czogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgbnVtYmVyIG9mIGZvcm1hdHMgaW4gdGhpcyBxdWVyeS4KLSAqCi0gKiBQYXJzZSB0aGUgbnVtYmVyIG9mIGZvcm1hdHMgaW4gdGhlIGZvcm1hdHMgQHF1ZXJ5LgotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzIChHc3RRdWVyeSAqIHF1ZXJ5LCBndWludCAqIG5fZm9ybWF0cykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfRk9STUFUUyk7Ci0KLSAgaWYgKG5fZm9ybWF0cykgewotICAgIGNvbnN0IEdWYWx1ZSAqbGlzdDsKLQotICAgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgICBsaXN0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImZvcm1hdHMiKTsKLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgKm5fZm9ybWF0cyA9IDA7Ci0gICAgZWxzZQotICAgICAgKm5fZm9ybWF0cyA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplIChsaXN0KTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0OgotICogQHF1ZXJ5OiBhICNHc3RRdWVyeQotICogQG50aDogKG91dCk6IHRoZSBudGggZm9ybWF0IHRvIHJldHJpZXZlLgotICogQGZvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIG50aCBmb3JtYXQKLSAqCi0gKiBQYXJzZSB0aGUgZm9ybWF0IHF1ZXJ5IGFuZCByZXRyaWV2ZSB0aGUgQG50aCBmb3JtYXQgZnJvbSBpdCBpbnRvCi0gKiBAZm9ybWF0LiBJZiB0aGUgbGlzdCBjb250YWlucyBsZXNzIGVsZW1lbnRzIHRoYW4gQG50aCwgQGZvcm1hdCB3aWxsIGJlCi0gKiBzZXQgdG8gR1NUX0ZPUk1BVF9VTkRFRklORUQuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0IChHc3RRdWVyeSAqIHF1ZXJ5LCBndWludCBudGgsIEdzdEZvcm1hdCAqIGZvcm1hdCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfRk9STUFUUyk7Ci0KLSAgaWYgKGZvcm1hdCkgewotICAgIGNvbnN0IEdWYWx1ZSAqbGlzdDsKLQotICAgIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgICBsaXN0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImZvcm1hdHMiKTsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAqZm9ybWF0ID0gR1NUX0ZPUk1BVF9VTkRFRklORUQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChudGggPCBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAobGlzdCkpIHsKLSAgICAgICAgKmZvcm1hdCA9Ci0gICAgICAgICAgICAoR3N0Rm9ybWF0KSBnX3ZhbHVlX2dldF9lbnVtIChnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKGxpc3QsIG50aCkpOwotICAgICAgfSBlbHNlCi0gICAgICAgICpmb3JtYXQgPSBHU1RfRk9STUFUX1VOREVGSU5FRDsKLSAgICB9Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZzoKLSAqIEBmb3JtYXQ6IHRoZSBkZWZhdWx0ICNHc3RGb3JtYXQgZm9yIHRoZSBuZXcgcXVlcnkKLSAqCi0gKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIGJ1ZmZlcmluZyBzdGF0dXMgb2YKLSAqIGEgc3RyZWFtLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9xdWVyeV91bnJlZigpCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0UXVlcnkKLSAqLwotR3N0UXVlcnkgKgotZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcgKEdzdEZvcm1hdCBmb3JtYXQpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgLyogYnkgZGVmYXVsdCwgd2UgY29uZmlndXJlIHRoZSBhbnN3ZXIgYXMgbm8gYnVmZmVyaW5nIHdpdGggYSAxMDAlIGJ1ZmZlcmluZwotICAgKiBwcm9ncmVzcyAqLwotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChRVUVSWV9CVUZGRVJJTkcpLAotICAgICAgR1NUX1FVQVJLIChCVVNZKSwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLAotICAgICAgR1NUX1FVQVJLIChCVUZGRVJfUEVSQ0VOVCksIEdfVFlQRV9JTlQsIDEwMCwKLSAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX01PREUpLCBHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgR1NUX0JVRkZFUklOR19TVFJFQU0sCi0gICAgICBHU1RfUVVBUksgKEFWR19JTl9SQVRFKSwgR19UWVBFX0lOVCwgLTEsCi0gICAgICBHU1RfUVVBUksgKEFWR19PVVRfUkFURSksIEdfVFlQRV9JTlQsIC0xLAotICAgICAgR1NUX1FVQVJLIChCVUZGRVJJTkdfTEVGVCksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKDApLAotICAgICAgR1NUX1FVQVJLIChFU1RJTUFURURfVE9UQUwpLCBHX1RZUEVfSU5UNjQsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSksCi0gICAgICBHU1RfUVVBUksgKEZPUk1BVCksIEdTVF9UWVBFX0ZPUk1BVCwgZm9ybWF0LAotICAgICAgR1NUX1FVQVJLIChTVEFSVF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwKLSAgICAgIEdTVF9RVUFSSyAoU1RPUF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSwgTlVMTCk7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2N1c3RvbSAoR1NUX1FVRVJZX0JVRkZFUklORywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gcXVlcnk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudDoKLSAqIEBxdWVyeTogQSB2YWxpZCAjR3N0UXVlcnkgb2YgdHlwZSBHU1RfUVVFUllfQlVGRkVSSU5HLgotICogQGJ1c3k6IGlmIGJ1ZmZlcmluZyBpcyBidXN5Ci0gKiBAcGVyY2VudDogYSBidWZmZXJpbmcgcGVyY2VudAotICoKLSAqIFNldCB0aGUgcGVyY2VudGFnZSBvZiBidWZmZXJlZCBkYXRhLiBUaGlzIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuCi0gKiBUaGUgQGJ1c3kgaW5kaWNhdG9yIGlzICVUUlVFIHdoZW4gdGhlIGJ1ZmZlcmluZyBpcyBpbiBwcm9ncmVzcy4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudCAoR3N0UXVlcnkgKiBxdWVyeSwgZ2Jvb2xlYW4gYnVzeSwgZ2ludCBwZXJjZW50KQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9CVUZGRVJJTkcpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHBlcmNlbnQgPj0gMCAmJiBwZXJjZW50IDw9IDEwMCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChCVVNZKSwgR19UWVBFX0JPT0xFQU4sIGJ1c3ksCi0gICAgICBHU1RfUVVBUksgKEJVRkZFUl9QRVJDRU5UKSwgR19UWVBFX0lOVCwgcGVyY2VudCwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50OgotICogQHF1ZXJ5OiBBIHZhbGlkICNHc3RRdWVyeSBvZiB0eXBlIEdTVF9RVUVSWV9CVUZGRVJJTkcuCi0gKiBAYnVzeTogKG91dCkgKGFsbG93LW5vbmUpOiBpZiBidWZmZXJpbmcgaXMgYnVzeSwgb3IgJU5VTEwKLSAqIEBwZXJjZW50OiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgYnVmZmVyaW5nIHBlcmNlbnQsIG9yICVOVUxMCi0gKgotICogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGJ1ZmZlcmVkIGRhdGEuIFRoaXMgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC4KLSAqIFRoZSBAYnVzeSBpbmRpY2F0b3IgaXMgJVRSVUUgd2hlbiB0aGUgYnVmZmVyaW5nIGlzIGluIHByb2dyZXNzLgotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQgKEdzdFF1ZXJ5ICogcXVlcnksIGdib29sZWFuICogYnVzeSwKLSAgICBnaW50ICogcGVyY2VudCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGlmIChidXN5KQotICAgICpidXN5ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQlVTWSkpKTsKLSAgaWYgKHBlcmNlbnQpCi0gICAgKnBlcmNlbnQgPSBnX3ZhbHVlX2dldF9pbnQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEJVRkZFUl9QRVJDRU5UKSkpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3N0YXRzOgotICogQHF1ZXJ5OiBBIHZhbGlkICNHc3RRdWVyeSBvZiB0eXBlIEdTVF9RVUVSWV9CVUZGRVJJTkcuCi0gKiBAbW9kZTogYSBidWZmZXJpbmcgbW9kZQotICogQGF2Z19pbjogdGhlIGF2ZXJhZ2UgaW5wdXQgcmF0ZQotICogQGF2Z19vdXQ6IHRoZSBhdmVyYWdlIG91dHB1dCByYXRlCi0gKiBAYnVmZmVyaW5nX2xlZnQ6IGFtb3VudCBvZiBidWZmZXJpbmcgdGltZSBsZWZ0IGluIG1pbGxpc2Vjb25kcwotICoKLSAqIENvbmZpZ3VyZXMgdGhlIGJ1ZmZlcmluZyBzdGF0cyB2YWx1ZXMgaW4gQHF1ZXJ5LgotICovCi12b2lkCi1nc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0cyAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0QnVmZmVyaW5nTW9kZSBtb2RlLAotICAgIGdpbnQgYXZnX2luLCBnaW50IGF2Z19vdXQsIGdpbnQ2NCBidWZmZXJpbmdfbGVmdCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX01PREUpLCBHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgbW9kZSwKLSAgICAgIEdTVF9RVUFSSyAoQVZHX0lOX1JBVEUpLCBHX1RZUEVfSU5ULCBhdmdfaW4sCi0gICAgICBHU1RfUVVBUksgKEFWR19PVVRfUkFURSksIEdfVFlQRV9JTlQsIGF2Z19vdXQsCi0gICAgICBHU1RfUVVBUksgKEJVRkZFUklOR19MRUZUKSwgR19UWVBFX0lOVDY0LCBidWZmZXJpbmdfbGVmdCwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0czoKLSAqIEBxdWVyeTogQSB2YWxpZCAjR3N0UXVlcnkgb2YgdHlwZSBHU1RfUVVFUllfQlVGRkVSSU5HLgotICogQG1vZGU6IChvdXQpIChhbGxvdy1ub25lKTogYSBidWZmZXJpbmcgbW9kZSwgb3IgJU5VTEwKLSAqIEBhdmdfaW46IChvdXQpIChhbGxvdy1ub25lKTogdGhlIGF2ZXJhZ2UgaW5wdXQgcmF0ZSwgb3IgJU5VTEwKLSAqIEBhdmdfb3V0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBhdmVyYWdlIG91dHB1dCByYXQsIG9yICVOVUxMCi0gKiBAYnVmZmVyaW5nX2xlZnQ6IChvdXQpIChhbGxvdy1ub25lKTogYW1vdW50IG9mIGJ1ZmZlcmluZyB0aW1lIGxlZnQgaW4KLSAqICAgICBtaWxsaXNlY29uZHMsIG9yICVOVUxMCi0gKgotICogRXh0cmFjdHMgdGhlIGJ1ZmZlcmluZyBzdGF0cyB2YWx1ZXMgZnJvbSBAcXVlcnkuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMgKEdzdFF1ZXJ5ICogcXVlcnksCi0gICAgR3N0QnVmZmVyaW5nTW9kZSAqIG1vZGUsIGdpbnQgKiBhdmdfaW4sIGdpbnQgKiBhdmdfb3V0LAotICAgIGdpbnQ2NCAqIGJ1ZmZlcmluZ19sZWZ0KQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9CVUZGRVJJTkcpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgaWYgKG1vZGUpCi0gICAgKm1vZGUgPSAoR3N0QnVmZmVyaW5nTW9kZSkKLSAgICAgICAgZ192YWx1ZV9nZXRfZW51bSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX01PREUpKSk7Ci0gIGlmIChhdmdfaW4pCi0gICAgKmF2Z19pbiA9IGdfdmFsdWVfZ2V0X2ludCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQVZHX0lOX1JBVEUpKSk7Ci0gIGlmIChhdmdfb3V0KQotICAgICphdmdfb3V0ID0gZ192YWx1ZV9nZXRfaW50IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChBVkdfT1VUX1JBVEUpKSk7Ci0gIGlmIChidWZmZXJpbmdfbGVmdCkKLSAgICAqYnVmZmVyaW5nX2xlZnQgPQotICAgICAgICBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoQlVGRkVSSU5HX0xFRlQpKSk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2U6Ci0gKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5Ci0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRvIHNldCBmb3IgdGhlIEBzdGFydCBhbmQgQHN0b3AgdmFsdWVzCi0gKiBAc3RhcnQ6IHRoZSBzdGFydCB0byBzZXQKLSAqIEBzdG9wOiB0aGUgc3RvcCB0byBzZXQKLSAqIEBlc3RpbWF0ZWRfdG90YWw6IGVzdGltYXRlZCB0b3RhbCBhbW91bnQgb2YgZG93bmxvYWQgdGltZSByZW1haW5pbmcgaW4KLSAqICAgICBtaWxsaXNlY29uZHMKLSAqCi0gKiBTZXQgdGhlIGF2YWlsYWJsZSBxdWVyeSByZXN1bHQgZmllbGRzIGluIEBxdWVyeS4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2UgKEdzdFF1ZXJ5ICogcXVlcnksIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCwgZ2ludDY0IGVzdGltYXRlZF90b3RhbCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoRk9STUFUKSwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsCi0gICAgICBHU1RfUVVBUksgKFNUQVJUX1ZBTFVFKSwgR19UWVBFX0lOVDY0LCBzdGFydCwKLSAgICAgIEdTVF9RVUFSSyAoU1RPUF9WQUxVRSksIEdfVFlQRV9JTlQ2NCwgc3RvcCwKLSAgICAgIEdTVF9RVUFSSyAoRVNUSU1BVEVEX1RPVEFMKSwgR19UWVBFX0lOVDY0LCBlc3RpbWF0ZWRfdG90YWwsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2U6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0JVRkZFUklORyB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQotICogQGZvcm1hdDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgZm9ybWF0IHRvIHNldCBmb3IgdGhlIEBzZWdtZW50X3N0YXJ0Ci0gKiAgICAgYW5kIEBzZWdtZW50X2VuZCB2YWx1ZXMsIG9yICVOVUxMCi0gKiBAc3RhcnQ6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0YXJ0IHRvIHNldCwgb3IgJU5VTEwKLSAqIEBzdG9wOiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdG9wIHRvIHNldCwgb3IgJU5VTEwKLSAqIEBlc3RpbWF0ZWRfdG90YWw6IChvdXQpIChhbGxvdy1ub25lKTogZXN0aW1hdGVkIHRvdGFsIGFtb3VudCBvZiBkb3dubG9hZAotICogICAgIHRpbWUgcmVtYWluaW5nIGluIG1pbGxpc2Vjb25kcywgb3IgJU5VTEwKLSAqCi0gKiBQYXJzZSBhbiBhdmFpbGFibGUgcXVlcnksIHdyaXRpbmcgdGhlIGZvcm1hdCBpbnRvIEBmb3JtYXQsIGFuZAotICogb3RoZXIgcmVzdWx0cyBpbnRvIHRoZSBwYXNzZWQgcGFyYW1ldGVycywgaWYgdGhlIHJlc3BlY3RpdmUgcGFyYW1ldGVycwotICogYXJlIG5vbi0lTlVMTAotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RGb3JtYXQgKiBmb3JtYXQsCi0gICAgZ2ludDY0ICogc3RhcnQsIGdpbnQ2NCAqIHN0b3AsIGdpbnQ2NCAqIGVzdGltYXRlZF90b3RhbCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGlmIChmb3JtYXQpCi0gICAgKmZvcm1hdCA9Ci0gICAgICAgIChHc3RGb3JtYXQpIGdfdmFsdWVfZ2V0X2VudW0gKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEZPUk1BVCkpKTsKLSAgaWYgKHN0YXJ0KQotICAgICpzdGFydCA9IGdfdmFsdWVfZ2V0X2ludDY0IChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChTVEFSVF9WQUxVRSkpKTsKLSAgaWYgKHN0b3ApCi0gICAgKnN0b3AgPSBnX3ZhbHVlX2dldF9pbnQ2NCAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgIEdTVF9RVUFSSyAoU1RPUF9WQUxVRSkpKTsKLSAgaWYgKGVzdGltYXRlZF90b3RhbCkKLSAgICAqZXN0aW1hdGVkX3RvdGFsID0KLSAgICAgICAgZ192YWx1ZV9nZXRfaW50NjQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKEVTVElNQVRFRF9UT1RBTCkpKTsKLX0KLQotLyogR3N0UXVlcnlCdWZmZXJpbmdSYW5nZTogaW50ZXJuYWwgc3RydWN0IGZvciBHQXJyYXkgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdpbnQ2NCBzdGFydDsKLSAgZ2ludDY0IHN0b3A7Ci19IEdzdFF1ZXJ5QnVmZmVyaW5nUmFuZ2U7Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2U6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0JVRkZFUklORyB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQotICogQHN0YXJ0OiBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmFuZ2UKLSAqIEBzdG9wOiBzdG9wIHBvc2l0aW9uIG9mIHRoZSByYW5nZQotICoKLSAqIFNldCB0aGUgYnVmZmVyaW5nLXJhbmdlcyBhcnJheSBmaWVsZCBpbiBAcXVlcnkuIFRoZSBjdXJyZW50IGxhc3QKLSAqIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBhcnJheSBzaG91bGQgYmUgaW5mZXJpb3IgdG8gQHN0YXJ0LgotICoKLSAqIFJldHVybnM6IGEgI2dib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHJhbmdlIHdhcyBhZGRlZCBvciBub3QuCi0gKi8KLWdib29sZWFuCi1nc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSAoR3N0UXVlcnkgKiBxdWVyeSwgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCkKLXsKLSAgR3N0UXVlcnlCdWZmZXJpbmdSYW5nZSByYW5nZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdBcnJheSAqYXJyYXk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0JVRkZFUklORywgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSksIEZBTFNFKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3RhcnQgPj0gc3RvcCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPSBlbnN1cmVfYXJyYXkgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChCVUZGRVJJTkdfUkFOR0VTKSwKLSAgICAgIHNpemVvZiAoR3N0UXVlcnlCdWZmZXJpbmdSYW5nZSksIE5VTEwpOwotCi0gIGlmIChhcnJheS0+bGVuID4gMSkgewotICAgIEdzdFF1ZXJ5QnVmZmVyaW5nUmFuZ2UgKmxhc3Q7Ci0KLSAgICBsYXN0ID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHc3RRdWVyeUJ1ZmZlcmluZ1JhbmdlLCBhcnJheS0+bGVuIC0gMSk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoc3RhcnQgPD0gbGFzdC0+c3RhcnQpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmFuZ2Uuc3RhcnQgPSBzdGFydDsKLSAgcmFuZ2Uuc3RvcCA9IHN0b3A7Ci0gIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyYXksIHJhbmdlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlczoKLSAqIEBxdWVyeTogYSBHU1RfUVVFUllfQlVGRkVSSU5HIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5Ci0gKgotICogUmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUKLSAqIGJ1ZmZlcmVkLXJhbmdlcyBhcnJheSBvZiB0aGUgcXVlcnkncyBzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJuczogdGhlIHJhbmdlIGFycmF5IHNpemUgYXMgYSAjZ3VpbnQuCi0gKi8KLWd1aW50Ci1nc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlcyAoR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdBcnJheSAqYXJyYXk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0JVRkZFUklORywgMCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBhcnJheSA9IGVuc3VyZV9hcnJheSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKEJVRkZFUklOR19SQU5HRVMpLAotICAgICAgc2l6ZW9mIChHc3RRdWVyeUJ1ZmZlcmluZ1JhbmdlKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGFycmF5LT5sZW47Ci19Ci0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZToKLSAqIEBxdWVyeTogYSBHU1RfUVVFUllfQlVGRkVSSU5HIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5Ci0gKiBAaW5kZXg6IHBvc2l0aW9uIGluIHRoZSBidWZmZXJlZC1yYW5nZXMgYXJyYXkgdG8gcmVhZAotICogQHN0YXJ0OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBzdGFydCBwb3NpdGlvbiB0byBzZXQsIG9yICVOVUxMCi0gKiBAc3RvcDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcCBwb3NpdGlvbiB0byBzZXQsIG9yICVOVUxMCi0gKgotICogUGFyc2UgYW4gYXZhaWxhYmxlIHF1ZXJ5IGFuZCBnZXQgdGhlIHN0YXJ0IGFuZCBzdG9wIHZhbHVlcyBzdG9yZWQKLSAqIGF0IHRoZSBAaW5kZXggb2YgdGhlIGJ1ZmZlcmVkIHJhbmdlcyBhcnJheS4KLSAqCi0gKiBSZXR1cm5zOiBhICNnYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBwYXJzaW5nIHN1Y2NlZWRlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlIChHc3RRdWVyeSAqIHF1ZXJ5LCBndWludCBpbmRleCwKLSAgICBnaW50NjQgKiBzdGFydCwgZ2ludDY0ICogc3RvcCkKLXsKLSAgR3N0UXVlcnlCdWZmZXJpbmdSYW5nZSAqcmFuZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHQXJyYXkgKmFycmF5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9CVUZGRVJJTkcsIEZBTFNFKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0KLSAgYXJyYXkgPSBlbnN1cmVfYXJyYXkgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChCVUZGRVJJTkdfUkFOR0VTKSwKLSAgICAgIHNpemVvZiAoR3N0UXVlcnlCdWZmZXJpbmdSYW5nZSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5kZXggPCBhcnJheS0+bGVuLCBGQUxTRSk7Ci0KLSAgcmFuZ2UgPSAmZ19hcnJheV9pbmRleCAoYXJyYXksIEdzdFF1ZXJ5QnVmZmVyaW5nUmFuZ2UsIGluZGV4KTsKLQotICBpZiAoc3RhcnQpCi0gICAgKnN0YXJ0ID0gcmFuZ2UtPnN0YXJ0OwotICBpZiAoc3RvcCkKLSAgICAqc3RvcCA9IHJhbmdlLT5zdG9wOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLS8qKgotICogZ3N0X3F1ZXJ5X25ld191cmk6Ci0gKgotICogQ29uc3RydWN0cyBhIG5ldyBxdWVyeSBVUkkgcXVlcnkgb2JqZWN0LiBVc2UgZ3N0X3F1ZXJ5X3VucmVmKCkKLSAqIHdoZW4gZG9uZSB3aXRoIGl0LiBBbiBVUkkgcXVlcnkgaXMgdXNlZCB0byBxdWVyeSB0aGUgY3VycmVudCBVUkkKLSAqIHRoYXQgaXMgdXNlZCBieSB0aGUgc291cmNlIG9yIHNpbmsuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmKCkKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RRdWVyeQotICovCi1Hc3RRdWVyeSAqCi1nc3RfcXVlcnlfbmV3X3VyaSAodm9pZCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChRVUVSWV9VUkkpLAotICAgICAgR1NUX1FVQVJLIChVUkkpLCBHX1RZUEVfU1RSSU5HLCBOVUxMLCBOVUxMKTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfY3VzdG9tIChHU1RfUVVFUllfVVJJLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBxdWVyeTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfc2V0X3VyaToKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkgd2l0aCBxdWVyeSB0eXBlIEdTVF9RVUVSWV9VUkkKLSAqIEB1cmk6IHRoZSBVUkkgdG8gc2V0Ci0gKgotICogQW5zd2VyIGEgVVJJIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCBVUkkuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfdXJpIChHc3RRdWVyeSAqIHF1ZXJ5LCBjb25zdCBnY2hhciAqIHVyaSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfVVJJKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdXJpX2lzX3ZhbGlkICh1cmkpKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoVVJJKSwgR19UWVBFX1NUUklORywgdXJpLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2VfdXJpOgotICogQHF1ZXJ5OiBhICNHc3RRdWVyeQotICogQHVyaTogKG91dCkgKHRyYW5zZmVyIGZ1bGwpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSBjdXJyZW50IFVSSQotICogICAgIChtYXkgYmUgJU5VTEwpCi0gKgotICogUGFyc2UgYW4gVVJJIHF1ZXJ5LCB3cml0aW5nIHRoZSBVUkkgaW50byBAdXJpIGFzIGEgbmV3bHkKLSAqIGFsbG9jYXRlZCBzdHJpbmcsIGlmIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlcnMgYXJlIG5vbi0lTlVMTC4KLSAqIEZyZWUgdGhlIHN0cmluZyB3aXRoIGdfZnJlZSgpIGFmdGVyIHVzYWdlLgotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2VfdXJpIChHc3RRdWVyeSAqIHF1ZXJ5LCBnY2hhciAqKiB1cmkpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1VSSSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBpZiAodXJpKQotICAgICp1cmkgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgICBHU1RfUVVBUksgKFVSSSkpKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbjoKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkgd2l0aCBxdWVyeSB0eXBlIEdTVF9RVUVSWV9VUkkKLSAqIEB1cmk6IHRoZSBVUkkgdG8gc2V0Ci0gKgotICogQW5zd2VyIGEgVVJJIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHJlcXVlc3RlZCBVUkkgcmVkaXJlY3Rpb24uCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbiAoR3N0UXVlcnkgKiBxdWVyeSwgY29uc3QgZ2NoYXIgKiB1cmkpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1VSSSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3VyaV9pc192YWxpZCAodXJpKSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLCBHU1RfUVVBUksgKFVSSV9SRURJUkVDVElPTiksCi0gICAgICBHX1RZUEVfU1RSSU5HLCB1cmksIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb246Ci0gKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5Ci0gKiBAdXJpOiAob3V0KSAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIHJlZGlyZWN0IFVSSQotICogICAgIChtYXkgYmUgJU5VTEwpCi0gKgotICogUGFyc2UgYW4gVVJJIHF1ZXJ5LCB3cml0aW5nIHRoZSBVUkkgaW50byBAdXJpIGFzIGEgbmV3bHkKLSAqIGFsbG9jYXRlZCBzdHJpbmcsIGlmIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlcnMgYXJlIG5vbi0lTlVMTC4KLSAqIEZyZWUgdGhlIHN0cmluZyB3aXRoIGdfZnJlZSgpIGFmdGVyIHVzYWdlLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbiAoR3N0UXVlcnkgKiBxdWVyeSwgZ2NoYXIgKiogdXJpKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9VUkkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgaWYgKHVyaSkgewotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChVUklfUkVESVJFQ1RJT04pLAotICAgICAgICAgICAgR19UWVBFX1NUUklORywgdXJpLCBOVUxMKSkKLSAgICAgICp1cmkgPSBOVUxMOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50OgotICogQHF1ZXJ5OiBhICNHc3RRdWVyeSB3aXRoIHF1ZXJ5IHR5cGUgJUdTVF9RVUVSWV9VUkkKLSAqIEBwZXJtYW5lbnQ6IHdoZXRoZXIgdGhlIHJlZGlyZWN0IGlzIHBlcm1hbmVudCBvciBub3QKLSAqCi0gKiBBbnN3ZXIgYSBVUkkgcXVlcnkgYnkgc2V0dGluZyB0aGUgcmVxdWVzdGVkIFVSSSByZWRpcmVjdGlvbgotICogdG8gcGVybWFuZW50IG9yIG5vdC4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uX3Blcm1hbmVudCAoR3N0UXVlcnkgKiBxdWVyeSwgZ2Jvb2xlYW4gcGVybWFuZW50KQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9VUkkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLCBHU1RfUVVBUksgKFVSSV9SRURJUkVDVElPTl9QRVJNQU5FTlQpLAotICAgICAgR19UWVBFX0JPT0xFQU4sIHBlcm1hbmVudCwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnQ6Ci0gKiBAcXVlcnk6IGEgI0dzdFF1ZXJ5Ci0gKiBAcGVybWFuZW50OiAob3V0KSAoYWxsb3ctbm9uZSk6IGlmIHRoZSBVUkkgcmVkaXJlY3Rpb24gaXMgcGVybWFuZW50Ci0gKiAgICAgKG1heSBiZSAlTlVMTCkKLSAqCi0gKiBQYXJzZSBhbiBVUkkgcXVlcnksIGFuZCBzZXQgQHBlcm1hbmVudCB0byAlVFJVRSBpZiB0aGVyZSBpcyBhIHJlZGlyZWN0aW9uCi0gKiBhbmQgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcGVybWFuZW50LiBJZiBhIHJlZGlyZWN0aW9uIGlzIHBlcm1hbmVudCwKLSAqIGFwcGxpY2F0aW9ucyBzaG91bGQgdXBkYXRlIHRoZWlyIGludGVybmFsIHN0b3JhZ2Ugb2YgdGhlIFVSSSwgb3RoZXJ3aXNlCi0gKiB0aGV5IHNob3VsZCBtYWtlIGFsbCBmdXR1cmUgcmVxdWVzdHMgdG8gdGhlIG9yaWdpbmFsIFVSSS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50IChHc3RRdWVyeSAqIHF1ZXJ5LAotICAgIGdib29sZWFuICogcGVybWFuZW50KQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9VUkkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgaWYgKHBlcm1hbmVudCkgewotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChVUklfUkVESVJFQ1RJT05fUEVSTUFORU5UKSwKLSAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCBwZXJtYW5lbnQsIE5VTEwpKQotICAgICAgKnBlcm1hbmVudCA9IEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uOgotICogQGNhcHM6IHRoZSBuZWdvdGlhdGVkIGNhcHMKLSAqIEBuZWVkX3Bvb2w6IHJldHVybiBhIHBvb2wKLSAqCi0gKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIGFsbG9jYXRpb24gcHJvcGVydGllcy4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYoKQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5Ci0gKi8KLUdzdFF1ZXJ5ICoKLWdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbiAoR3N0Q2FwcyAqIGNhcHMsIGdib29sZWFuIG5lZWRfcG9vbCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChRVUVSWV9BTExPQ0FUSU9OKSwKLSAgICAgIEdTVF9RVUFSSyAoQ0FQUyksIEdTVF9UWVBFX0NBUFMsIGNhcHMsCi0gICAgICBHU1RfUVVBUksgKE5FRURfUE9PTCksIEdfVFlQRV9CT09MRUFOLCBuZWVkX3Bvb2wsIE5VTEwpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19jdXN0b20gKEdTVF9RVUVSWV9BTExPQ0FUSU9OLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBxdWVyeTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbjoKLSAqIEBxdWVyeTogYSAjR3N0UXVlcnkKLSAqIEBjYXBzOiAob3V0KSAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBUaGUgI0dzdENhcHMKLSAqIEBuZWVkX3Bvb2w6IChvdXQpIChhbGxvdy1ub25lKTogV2hldGhlciBhICNHc3RCdWZmZXJQb29sIGlzIG5lZWRlZAotICoKLSAqIFBhcnNlIGFuIGFsbG9jYXRpb24gcXVlcnksIHdyaXRpbmcgdGhlIHJlcXVlc3RlZCBjYXBzIGluIEBjYXBzIGFuZAotICogd2hldGhlciBhIHBvb2wgaXMgbmVlZGVkIGluIEBuZWVkX3Bvb2wsIGlmIHRoZSByZXNwZWN0aXZlIHBhcmFtZXRlcnMKLSAqIGFyZSBub24tJU5VTEwuCi0gKgotICogUG9vbCBkZXRhaWxzIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMoKSBhbmQKLSAqIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sKCkuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RDYXBzICoqIGNhcHMsCi0gICAgZ2Jvb2xlYW4gKiBuZWVkX3Bvb2wpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04pOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgaWYgKGNhcHMpIHsKLSAgICAqY2FwcyA9IGdfdmFsdWVfZ2V0X2JveGVkIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgICAgR1NUX1FVQVJLIChDQVBTKSkpOwotICB9Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0IChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKE5FRURfUE9PTCksIEdfVFlQRV9CT09MRUFOLCBuZWVkX3Bvb2wsIE5VTEwpOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBndWludCBzaXplOwotICBndWludCBtaW5fYnVmZmVyczsKLSAgZ3VpbnQgbWF4X2J1ZmZlcnM7Ci19IEFsbG9jYXRpb25Qb29sOwotCi1zdGF0aWMgdm9pZAotYWxsb2NhdGlvbl9wb29sX2ZyZWUgKEFsbG9jYXRpb25Qb29sICogYXApCi17Ci0gIGlmIChhcC0+cG9vbCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChhcC0+cG9vbCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3Bvb2w6Ci0gKiBAcXVlcnk6IEEgdmFsaWQgI0dzdFF1ZXJ5IG9mIHR5cGUgR1NUX1FVRVJZX0FMTE9DQVRJT04uCi0gKiBAcG9vbDogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlICNHc3RCdWZmZXJQb29sCi0gKiBAc2l6ZTogdGhlIGJ1ZmZlciBzaXplCi0gKiBAbWluX2J1ZmZlcnM6IHRoZSBtaW4gYnVmZmVycwotICogQG1heF9idWZmZXJzOiB0aGUgbWF4IGJ1ZmZlcnMKLSAqCi0gKiBTZXQgdGhlIHBvb2wgcGFyYW1ldGVycyBpbiBAcXVlcnkuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wb29sIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RCdWZmZXJQb29sICogcG9vbCwKLSAgICBndWludCBzaXplLCBndWludCBtaW5fYnVmZmVycywgZ3VpbnQgbWF4X2J1ZmZlcnMpCi17Ci0gIEdBcnJheSAqYXJyYXk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBBbGxvY2F0aW9uUG9vbCBhcDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPSBlbnN1cmVfYXJyYXkgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChQT09MKSwKLSAgICAgIHNpemVvZiAoQWxsb2NhdGlvblBvb2wpLCAoR0Rlc3Ryb3lOb3RpZnkpIGFsbG9jYXRpb25fcG9vbF9mcmVlKTsKLQotICBpZiAoKGFwLnBvb2wgPSBwb29sKSkKLSAgICBnc3Rfb2JqZWN0X3JlZiAocG9vbCk7Ci0gIGFwLnNpemUgPSBzaXplOwotICBhcC5taW5fYnVmZmVycyA9IG1pbl9idWZmZXJzOwotICBhcC5tYXhfYnVmZmVycyA9IG1heF9idWZmZXJzOwotCi0gIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyYXksIGFwKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29sczoKLSAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQotICoKLSAqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgdmFsdWVzIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlCi0gKiBwb29sIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcG9vbCBhcnJheSBzaXplIGFzIGEgI2d1aW50LgotICovCi1ndWludAotZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdBcnJheSAqYXJyYXk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OLCAwKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGFycmF5ID0gZW5zdXJlX2FycmF5IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoUE9PTCksCi0gICAgICBzaXplb2YgKEFsbG9jYXRpb25Qb29sKSwgKEdEZXN0cm95Tm90aWZ5KSBhbGxvY2F0aW9uX3Bvb2xfZnJlZSk7Ci0KLSAgcmV0dXJuIGFycmF5LT5sZW47Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2w6Ci0gKiBAcXVlcnk6IEEgdmFsaWQgI0dzdFF1ZXJ5IG9mIHR5cGUgR1NUX1FVRVJZX0FMTE9DQVRJT04uCi0gKiBAaW5kZXg6IGluZGV4IHRvIHBhcnNlCi0gKiBAcG9vbDogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RCdWZmZXJQb29sCi0gKiBAc2l6ZTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgYnVmZmVyIHNpemUKLSAqIEBtaW5fYnVmZmVyczogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgbWluIGJ1ZmZlcnMKLSAqIEBtYXhfYnVmZmVyczogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgbWF4IGJ1ZmZlcnMKLSAqCi0gKiBHZXQgdGhlIHBvb2wgcGFyYW1ldGVycyBpbiBAcXVlcnkuCi0gKgotICogVW5yZWYgQHBvb2wgd2l0aCBnc3Rfb2JqZWN0X3VucmVmKCkgd2hlbiBpdCdzIG5vdCBuZWVkZWQgYW55IG1vcmUuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sIChHc3RRdWVyeSAqIHF1ZXJ5LCBndWludCBpbmRleCwKLSAgICBHc3RCdWZmZXJQb29sICoqIHBvb2wsIGd1aW50ICogc2l6ZSwgZ3VpbnQgKiBtaW5fYnVmZmVycywKLSAgICBndWludCAqIG1heF9idWZmZXJzKQotewotICBHQXJyYXkgKmFycmF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgQWxsb2NhdGlvblBvb2wgKmFwOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04pOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPSBlbnN1cmVfYXJyYXkgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChQT09MKSwKLSAgICAgIHNpemVvZiAoQWxsb2NhdGlvblBvb2wpLCAoR0Rlc3Ryb3lOb3RpZnkpIGFsbG9jYXRpb25fcG9vbF9mcmVlKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoaW5kZXggPCBhcnJheS0+bGVuKTsKLQotICBhcCA9ICZnX2FycmF5X2luZGV4IChhcnJheSwgQWxsb2NhdGlvblBvb2wsIGluZGV4KTsKLQotICBpZiAocG9vbCkKLSAgICBpZiAoKCpwb29sID0gYXAtPnBvb2wpKQotICAgICAgZ3N0X29iamVjdF9yZWYgKCpwb29sKTsKLSAgaWYgKHNpemUpCi0gICAgKnNpemUgPSBhcC0+c2l6ZTsKLSAgaWYgKG1pbl9idWZmZXJzKQotICAgICptaW5fYnVmZmVycyA9IGFwLT5taW5fYnVmZmVyczsKLSAgaWYgKG1heF9idWZmZXJzKQotICAgICptYXhfYnVmZmVycyA9IGFwLT5tYXhfYnVmZmVyczsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3Bvb2w6Ci0gKiBAaW5kZXg6IGluZGV4IHRvIG1vZGlmeQotICogQHF1ZXJ5OiBBIHZhbGlkICNHc3RRdWVyeSBvZiB0eXBlIEdTVF9RVUVSWV9BTExPQ0FUSU9OLgotICogQHBvb2w6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSAjR3N0QnVmZmVyUG9vbAotICogQHNpemU6IHRoZSBzaXplCi0gKiBAbWluX2J1ZmZlcnM6IHRoZSBtaW4gYnVmZmVycwotICogQG1heF9idWZmZXJzOiB0aGUgbWF4IGJ1ZmZlcnMKLSAqCi0gKiBTZXQgdGhlIHBvb2wgcGFyYW1ldGVycyBpbiBAcXVlcnkuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcG9vbCAoR3N0UXVlcnkgKiBxdWVyeSwgZ3VpbnQgaW5kZXgsCi0gICAgR3N0QnVmZmVyUG9vbCAqIHBvb2wsIGd1aW50IHNpemUsIGd1aW50IG1pbl9idWZmZXJzLCBndWludCBtYXhfYnVmZmVycykKLXsKLSAgR0FycmF5ICphcnJheTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEFsbG9jYXRpb25Qb29sICpvbGRhcCwgYXA7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQUxMT0NBVElPTik7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBhcnJheSA9IGVuc3VyZV9hcnJheSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKFBPT0wpLAotICAgICAgc2l6ZW9mIChBbGxvY2F0aW9uUG9vbCksIChHRGVzdHJveU5vdGlmeSkgYWxsb2NhdGlvbl9wb29sX2ZyZWUpOwotICBnX3JldHVybl9pZl9mYWlsIChpbmRleCA8IGFycmF5LT5sZW4pOwotCi0gIG9sZGFwID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBBbGxvY2F0aW9uUG9vbCwgaW5kZXgpOwotICBhbGxvY2F0aW9uX3Bvb2xfZnJlZSAob2xkYXApOwotCi0gIGlmICgoYXAucG9vbCA9IHBvb2wpKQotICAgIGdzdF9vYmplY3RfcmVmIChwb29sKTsKLSAgYXAuc2l6ZSA9IHNpemU7Ci0gIGFwLm1pbl9idWZmZXJzID0gbWluX2J1ZmZlcnM7Ci0gIGFwLm1heF9idWZmZXJzID0gbWF4X2J1ZmZlcnM7Ci0gIGdfYXJyYXlfaW5kZXggKGFycmF5LCBBbGxvY2F0aW9uUG9vbCwgaW5kZXgpID0gYXA7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9wb29sOgotICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5Ci0gKiBAaW5kZXg6IHBvc2l0aW9uIGluIHRoZSBhbGxvY2F0aW9uIHBvb2wgYXJyYXkgdG8gcmVtb3ZlCi0gKgotICogUmVtb3ZlIHRoZSBhbGxvY2F0aW9uIHBvb2wgYXQgQGluZGV4IG9mIHRoZSBhbGxvY2F0aW9uIHBvb2wgYXJyYXkuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3Bvb2wgKEdzdFF1ZXJ5ICogcXVlcnksIGd1aW50IGluZGV4KQotewotICBHQXJyYXkgKmFycmF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPQotICAgICAgZW5zdXJlX2FycmF5IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoUE9PTCksIHNpemVvZiAoQWxsb2NhdGlvblBvb2wpLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBhbGxvY2F0aW9uX3Bvb2xfZnJlZSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGluZGV4IDwgYXJyYXktPmxlbik7Ci0KLSAgZ19hcnJheV9yZW1vdmVfaW5kZXggKGFycmF5LCBpbmRleCk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdUeXBlIGFwaTsKLSAgR3N0U3RydWN0dXJlICpwYXJhbXM7Ci19IEFsbG9jYXRpb25NZXRhOwotCi1zdGF0aWMgdm9pZAotYWxsb2NhdGlvbl9tZXRhX2ZyZWUgKEFsbG9jYXRpb25NZXRhICogYW0pCi17Ci0gIGlmIChhbS0+cGFyYW1zKQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoYW0tPnBhcmFtcyk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGE6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqIEBhcGk6IHRoZSBtZXRhZGF0YSBBUEkKLSAqIEBwYXJhbXM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IEFQSSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gKgotICogQWRkIEBhcGkgd2l0aCBAcGFyYW1zIGFzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG1ldGFkYXRhIEFQSSB0byBAcXVlcnkuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhIChHc3RRdWVyeSAqIHF1ZXJ5LCBHVHlwZSBhcGksCi0gICAgY29uc3QgR3N0U3RydWN0dXJlICogcGFyYW1zKQotewotICBHQXJyYXkgKmFycmF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgQWxsb2NhdGlvbk1ldGEgYW07Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQUxMT0NBVElPTik7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGFwaSAhPSAwKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPQotICAgICAgZW5zdXJlX2FycmF5IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoTUVUQSksIHNpemVvZiAoQWxsb2NhdGlvbk1ldGEpLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBhbGxvY2F0aW9uX21ldGFfZnJlZSk7Ci0KLSAgYW0uYXBpID0gYXBpOwotICBhbS5wYXJhbXMgPSAocGFyYW1zID8gZ3N0X3N0cnVjdHVyZV9jb3B5IChwYXJhbXMpIDogTlVMTCk7Ci0KLSAgZ19hcnJheV9hcHBlbmRfdmFsIChhcnJheSwgYW0pOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzOgotICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5Ci0gKgotICogUmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUKLSAqIG1ldGEgQVBJIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWV0YWRhdGEgQVBJIGFycmF5IHNpemUgYXMgYSAjZ3VpbnQuCi0gKi8KLWd1aW50Ci1nc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcyAoR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR0FycmF5ICphcnJheTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04sIDApOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPQotICAgICAgZW5zdXJlX2FycmF5IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoTUVUQSksIHNpemVvZiAoQWxsb2NhdGlvbk1ldGEpLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBhbGxvY2F0aW9uX21ldGFfZnJlZSk7Ci0KLSAgcmV0dXJuIGFycmF5LT5sZW47Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGE6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqIEBpbmRleDogcG9zaXRpb24gaW4gdGhlIG1ldGFkYXRhIEFQSSBhcnJheSB0byByZWFkCi0gKiBAcGFyYW1zOiAob3V0KSAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBBUEkgc3BlY2lmaWMgcGFyYW1ldGVycwotICoKLSAqIFBhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSBhbmQgZ2V0IHRoZSBtZXRhZGF0YSBBUEkKLSAqIGF0IEBpbmRleCBvZiB0aGUgbWV0YWRhdGEgQVBJIGFycmF5LgotICoKLSAqIFJldHVybnM6IGEgI0dUeXBlIG9mIHRoZSBtZXRhZGF0YSBBUEkgYXQgQGluZGV4LgotICovCi1HVHlwZQotZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX21ldGEgKEdzdFF1ZXJ5ICogcXVlcnksIGd1aW50IGluZGV4LAotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqKiBwYXJhbXMpCi17Ci0gIEdBcnJheSAqYXJyYXk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBBbGxvY2F0aW9uTWV0YSAqYW07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04sIDApOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPQotICAgICAgZW5zdXJlX2FycmF5IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoTUVUQSksIHNpemVvZiAoQWxsb2NhdGlvbk1ldGEpLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBhbGxvY2F0aW9uX21ldGFfZnJlZSk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZGV4IDwgYXJyYXktPmxlbiwgMCk7Ci0KLSAgYW0gPSAmZ19hcnJheV9pbmRleCAoYXJyYXksIEFsbG9jYXRpb25NZXRhLCBpbmRleCk7Ci0KLSAgaWYgKHBhcmFtcykKLSAgICAqcGFyYW1zID0gYW0tPnBhcmFtczsKLQotICByZXR1cm4gYW0tPmFwaTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX21ldGE6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqIEBpbmRleDogcG9zaXRpb24gaW4gdGhlIG1ldGFkYXRhIEFQSSBhcnJheSB0byByZW1vdmUKLSAqCi0gKiBSZW1vdmUgdGhlIG1ldGFkYXRhIEFQSSBhdCBAaW5kZXggb2YgdGhlIG1ldGFkYXRhIEFQSSBhcnJheS4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9tZXRhIChHc3RRdWVyeSAqIHF1ZXJ5LCBndWludCBpbmRleCkKLXsKLSAgR0FycmF5ICphcnJheTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQUxMT0NBVElPTik7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGFycmF5ID0KLSAgICAgIGVuc3VyZV9hcnJheSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE1FVEEpLCBzaXplb2YgKEFsbG9jYXRpb25NZXRhKSwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgYWxsb2NhdGlvbl9tZXRhX2ZyZWUpOwotICBnX3JldHVybl9pZl9mYWlsIChpbmRleCA8IGFycmF5LT5sZW4pOwotCi0gIGdfYXJyYXlfcmVtb3ZlX2luZGV4IChhcnJheSwgaW5kZXgpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9maW5kX2FsbG9jYXRpb25fbWV0YToKLSAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQotICogQGFwaTogdGhlIG1ldGFkYXRhIEFQSQotICogQGluZGV4OiAob3V0KSAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiB0aGUgaW5kZXgKLSAqCi0gKiBDaGVjayBpZiBAcXVlcnkgaGFzIG1ldGFkYXRhIEBhcGkgc2V0LiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAlVFJVRSwKLSAqIEBpbmRleCB3aWxsIGNvbnRhaW4gdGhlIGluZGV4IHdoZXJlIHRoZSByZXF1ZXN0ZWQgQVBJIGFuZCB0aGUgcGFyYW1ldGVycwotICogY2FuIGJlIGZvdW5kLgotICoKLSAqIFJldHVybnM6ICVUUlVFIHdoZW4gQGFwaSBpcyBpbiB0aGUgbGlzdCBvZiBtZXRhZGF0YS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9xdWVyeV9maW5kX2FsbG9jYXRpb25fbWV0YSAoR3N0UXVlcnkgKiBxdWVyeSwgR1R5cGUgYXBpLCBndWludCAqIGluZGV4KQotewotICBHQXJyYXkgKmFycmF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChhcGkgIT0gMCwgRkFMU0UpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPQotICAgICAgZW5zdXJlX2FycmF5IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoTUVUQSksIHNpemVvZiAoQWxsb2NhdGlvbk1ldGEpLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBhbGxvY2F0aW9uX21ldGFfZnJlZSk7Ci0KLSAgbGVuID0gYXJyYXktPmxlbjsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgQWxsb2NhdGlvbk1ldGEgKmFtID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBBbGxvY2F0aW9uTWV0YSwgaSk7Ci0gICAgaWYgKGFtLT5hcGkgPT0gYXBpKSB7Ci0gICAgICBpZiAoaW5kZXgpCi0gICAgICAgICppbmRleCA9IGk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci19IEFsbG9jYXRpb25QYXJhbTsKLQotc3RhdGljIHZvaWQKLWFsbG9jYXRpb25fcGFyYW1fZnJlZSAoQWxsb2NhdGlvblBhcmFtICogYXApCi17Ci0gIGlmIChhcC0+YWxsb2NhdG9yKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGFwLT5hbGxvY2F0b3IpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wYXJhbToKLSAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQotICogQGFsbG9jYXRvcjogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlIG1lbW9yeSBhbGxvY2F0b3IKLSAqIEBwYXJhbXM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IGEgI0dzdEFsbG9jYXRpb25QYXJhbXMKLSAqCi0gKiBBZGQgQGFsbG9jYXRvciBhbmQgaXRzIEBwYXJhbXMgYXMgYSBzdXBwb3J0ZWQgbWVtb3J5IGFsbG9jYXRvci4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3BhcmFtIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgY29uc3QgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcykKLXsKLSAgR0FycmF5ICphcnJheTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEFsbG9jYXRpb25QYXJhbSBhcDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotICBnX3JldHVybl9pZl9mYWlsIChhbGxvY2F0b3IgIT0gTlVMTCB8fCBwYXJhbXMgIT0gTlVMTCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBhcnJheSA9IGVuc3VyZV9hcnJheSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKEFMTE9DQVRPUiksCi0gICAgICBzaXplb2YgKEFsbG9jYXRpb25QYXJhbSksIChHRGVzdHJveU5vdGlmeSkgYWxsb2NhdGlvbl9wYXJhbV9mcmVlKTsKLQotICBpZiAoKGFwLmFsbG9jYXRvciA9IGFsbG9jYXRvcikpCi0gICAgZ3N0X29iamVjdF9yZWYgKGFsbG9jYXRvcik7Ci0gIGlmIChwYXJhbXMpCi0gICAgYXAucGFyYW1zID0gKnBhcmFtczsKLSAgZWxzZQotICAgIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0ICgmYXAucGFyYW1zKTsKLQotICBnX2FycmF5X2FwcGVuZF92YWwgKGFycmF5LCBhcCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcGFyYW1zOgotICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9BTExPQ0FUSU9OIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5Ci0gKgotICogUmV0cmlldmUgdGhlIG51bWJlciBvZiB2YWx1ZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUKLSAqIGFsbG9jYXRvciBwYXJhbXMgYXJyYXkgb2YgdGhlIHF1ZXJ5J3Mgc3RydWN0dXJlLgotICoKLSAqIElmIG5vIG1lbW9yeSBhbGxvY2F0b3IgaXMgc3BlY2lmaWVkLCB0aGUgZG93bnN0cmVhbSBlbGVtZW50IGNhbiBoYW5kbGUKLSAqIHRoZSBkZWZhdWx0IG1lbW9yeSBhbGxvY2F0b3IuIFRoZSBmaXJzdCBtZW1vcnkgYWxsb2NhdG9yIGluIHRoZSBxdWVyeQotICogc2hvdWxkIGJlIGdlbmVyaWMgYW5kIGFsbG93IG1hcHBpbmcgdG8gc3lzdGVtIG1lbW9yeSwgYWxsIGZvbGxvd2luZwotICogYWxsb2NhdG9ycyBzaG91bGQgYmUgb3JkZXJlZCBieSBwcmVmZXJlbmNlIHdpdGggdGhlIHByZWZlcnJlZCBvbmUgZmlyc3QuCi0gKgotICogUmV0dXJuczogdGhlIGFsbG9jYXRvciBhcnJheSBzaXplIGFzIGEgI2d1aW50LgotICovCi1ndWludAotZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcGFyYW1zIChHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHQXJyYXkgKmFycmF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQUxMT0NBVElPTiwgMCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBhcnJheSA9IGVuc3VyZV9hcnJheSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKEFMTE9DQVRPUiksCi0gICAgICBzaXplb2YgKEFsbG9jYXRpb25QYXJhbSksIChHRGVzdHJveU5vdGlmeSkgYWxsb2NhdGlvbl9wYXJhbV9mcmVlKTsKLQotICByZXR1cm4gYXJyYXktPmxlbjsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW06Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqIEBpbmRleDogcG9zaXRpb24gaW4gdGhlIGFsbG9jYXRvciBhcnJheSB0byByZWFkCi0gKiBAYWxsb2NhdG9yOiAob3V0KSAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiB2YXJpYWJsZSB0byBob2xkIHRoZSByZXN1bHQKLSAqIEBwYXJhbXM6IChvdXQpIChhbGxvdy1ub25lKTogcGFyYW1ldGVycyBmb3IgdGhlIGFsbG9jYXRvcgotICoKLSAqIFBhcnNlIGFuIGF2YWlsYWJsZSBxdWVyeSBhbmQgZ2V0IHRoZSBhbGxvY2F0b3IgYW5kIGl0cyBwYXJhbXMKLSAqIGF0IEBpbmRleCBvZiB0aGUgYWxsb2NhdG9yIGFycmF5LgotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW0gKEdzdFF1ZXJ5ICogcXVlcnksIGd1aW50IGluZGV4LAotICAgIEdzdEFsbG9jYXRvciAqKiBhbGxvY2F0b3IsIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCi17Ci0gIEdBcnJheSAqYXJyYXk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBBbGxvY2F0aW9uUGFyYW0gKmFwOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04pOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPSBlbnN1cmVfYXJyYXkgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChBTExPQ0FUT1IpLAotICAgICAgc2l6ZW9mIChBbGxvY2F0aW9uUGFyYW0pLCAoR0Rlc3Ryb3lOb3RpZnkpIGFsbG9jYXRpb25fcGFyYW1fZnJlZSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGluZGV4IDwgYXJyYXktPmxlbik7Ci0KLSAgYXAgPSAmZ19hcnJheV9pbmRleCAoYXJyYXksIEFsbG9jYXRpb25QYXJhbSwgaW5kZXgpOwotCi0gIGlmIChhbGxvY2F0b3IpCi0gICAgaWYgKCgqYWxsb2NhdG9yID0gYXAtPmFsbG9jYXRvcikpCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAoKmFsbG9jYXRvcik7Ci0gIGlmIChwYXJhbXMpCi0gICAgKnBhcmFtcyA9IGFwLT5wYXJhbXM7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wYXJhbToKLSAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUxMT0NBVElPTiB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQotICogQGluZGV4OiBwb3NpdGlvbiBpbiB0aGUgYWxsb2NhdG9yIGFycmF5IHRvIHNldAotICogQGFsbG9jYXRvcjogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogbmV3IGFsbG9jYXRvciB0byBzZXQKLSAqIEBwYXJhbXM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHBhcmFtZXRlcnMgZm9yIHRoZSBhbGxvY2F0b3IKLSAqCi0gKiBQYXJzZSBhbiBhdmFpbGFibGUgcXVlcnkgYW5kIGdldCB0aGUgYWxsb2NhdG9yIGFuZCBpdHMgcGFyYW1zCi0gKiBhdCBAaW5kZXggb2YgdGhlIGFsbG9jYXRvciBhcnJheS4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wYXJhbSAoR3N0UXVlcnkgKiBxdWVyeSwgZ3VpbnQgaW5kZXgsCi0gICAgR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLCBjb25zdCBHc3RBbGxvY2F0aW9uUGFyYW1zICogcGFyYW1zKQotewotICBHQXJyYXkgKmFycmF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgQWxsb2NhdGlvblBhcmFtICpvbGQsIGFwOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0FMTE9DQVRJT04pOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPSBlbnN1cmVfYXJyYXkgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChBTExPQ0FUT1IpLAotICAgICAgc2l6ZW9mIChBbGxvY2F0aW9uUGFyYW0pLCAoR0Rlc3Ryb3lOb3RpZnkpIGFsbG9jYXRpb25fcGFyYW1fZnJlZSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGluZGV4IDwgYXJyYXktPmxlbik7Ci0KLSAgb2xkID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBBbGxvY2F0aW9uUGFyYW0sIGluZGV4KTsKLSAgYWxsb2NhdGlvbl9wYXJhbV9mcmVlIChvbGQpOwotCi0gIGlmICgoYXAuYWxsb2NhdG9yID0gYWxsb2NhdG9yKSkKLSAgICBnc3Rfb2JqZWN0X3JlZiAoYWxsb2NhdG9yKTsKLSAgaWYgKHBhcmFtcykKLSAgICBhcC5wYXJhbXMgPSAqcGFyYW1zOwotICBlbHNlCi0gICAgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXQgKCZhcC5wYXJhbXMpOwotCi0gIGdfYXJyYXlfaW5kZXggKGFycmF5LCBBbGxvY2F0aW9uUGFyYW0sIGluZGV4KSA9IGFwOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcGFyYW06Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0FMTE9DQVRJT04gdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqIEBpbmRleDogcG9zaXRpb24gaW4gdGhlIGFsbG9jYXRpb24gcGFyYW0gYXJyYXkgdG8gcmVtb3ZlCi0gKgotICogUmVtb3ZlIHRoZSBhbGxvY2F0aW9uIHBhcmFtIGF0IEBpbmRleCBvZiB0aGUgYWxsb2NhdGlvbiBwYXJhbSBhcnJheS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcGFyYW0gKEdzdFF1ZXJ5ICogcXVlcnksIGd1aW50IGluZGV4KQotewotICBHQXJyYXkgKmFycmF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BTExPQ0FUSU9OKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPQotICAgICAgZW5zdXJlX2FycmF5IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoQUxMT0NBVE9SKSwgc2l6ZW9mIChBbGxvY2F0aW9uUGFyYW0pLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBhbGxvY2F0aW9uX3BhcmFtX2ZyZWUpOwotICBnX3JldHVybl9pZl9mYWlsIChpbmRleCA8IGFycmF5LT5sZW4pOwotCi0gIGdfYXJyYXlfcmVtb3ZlX2luZGV4IChhcnJheSwgaW5kZXgpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZzoKLSAqCi0gKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIHNjaGVkdWxpbmcgcHJvcGVydGllcy4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYoKQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5Ci0gKi8KLUdzdFF1ZXJ5ICoKLWdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAodm9pZCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChRVUVSWV9TQ0hFRFVMSU5HKSwKLSAgICAgIEdTVF9RVUFSSyAoRkxBR1MpLCBHU1RfVFlQRV9TQ0hFRFVMSU5HX0ZMQUdTLCAwLAotICAgICAgR1NUX1FVQVJLIChNSU5TSVpFKSwgR19UWVBFX0lOVCwgMSwKLSAgICAgIEdTVF9RVUFSSyAoTUFYU0laRSksIEdfVFlQRV9JTlQsIC0xLAotICAgICAgR1NUX1FVQVJLIChBTElHTiksIEdfVFlQRV9JTlQsIDAsIE5VTEwpOwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfY3VzdG9tIChHU1RfUVVFUllfU0NIRURVTElORywgc3RydWN0dXJlKTsKLQotICByZXR1cm4gcXVlcnk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF9zY2hlZHVsaW5nOgotICogQHF1ZXJ5OiBBIHZhbGlkICNHc3RRdWVyeSBvZiB0eXBlIEdTVF9RVUVSWV9TQ0hFRFVMSU5HLgotICogQGZsYWdzOiAjR3N0U2NoZWR1bGluZ0ZsYWdzCi0gKiBAbWluc2l6ZTogdGhlIHN1Z2dlc3RlZCBtaW5pbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0cwotICogQG1heHNpemU6IHRoZSBzdWdnZXN0ZWQgbWF4aW11bSBzaXplIG9mIHB1bGwgcmVxdWVzdHMKLSAqIEBhbGlnbjogdGhlIHN1Z2dlc3RlZCBhbGlnbm1lbnQgb2YgcHVsbCByZXF1ZXN0cwotICoKLSAqIFNldCB0aGUgc2NoZWR1bGluZyBwcm9wZXJ0aWVzLgotICovCi12b2lkCi1nc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKEdzdFF1ZXJ5ICogcXVlcnksIEdzdFNjaGVkdWxpbmdGbGFncyBmbGFncywKLSAgICBnaW50IG1pbnNpemUsIGdpbnQgbWF4c2l6ZSwgZ2ludCBhbGlnbikKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfU0NIRURVTElORyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzdHJ1Y3R1cmUsCi0gICAgICBHU1RfUVVBUksgKEZMQUdTKSwgR1NUX1RZUEVfU0NIRURVTElOR19GTEFHUywgZmxhZ3MsCi0gICAgICBHU1RfUVVBUksgKE1JTlNJWkUpLCBHX1RZUEVfSU5ULCBtaW5zaXplLAotICAgICAgR1NUX1FVQVJLIChNQVhTSVpFKSwgR19UWVBFX0lOVCwgbWF4c2l6ZSwKLSAgICAgIEdTVF9RVUFSSyAoQUxJR04pLCBHX1RZUEVfSU5ULCBhbGlnbiwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX3NjaGVkdWxpbmc6Ci0gKiBAcXVlcnk6IEEgdmFsaWQgI0dzdFF1ZXJ5IG9mIHR5cGUgR1NUX1FVRVJZX1NDSEVEVUxJTkcuCi0gKiBAZmxhZ3M6IChvdXQpIChhbGxvdy1ub25lKTogI0dzdFNjaGVkdWxpbmdGbGFncwotICogQG1pbnNpemU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN1Z2dlc3RlZCBtaW5pbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0cwotICogQG1heHNpemU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN1Z2dlc3RlZCBtYXhpbXVtIHNpemUgb2YgcHVsbCByZXF1ZXN0czoKLSAqIEBhbGlnbjogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3VnZ2VzdGVkIGFsaWdubWVudCBvZiBwdWxsIHJlcXVlc3RzCi0gKgotICogU2V0IHRoZSBzY2hlZHVsaW5nIHByb3BlcnRpZXMuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RTY2hlZHVsaW5nRmxhZ3MgKiBmbGFncywKLSAgICBnaW50ICogbWluc2l6ZSwgZ2ludCAqIG1heHNpemUsIGdpbnQgKiBhbGlnbikKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfU0NIRURVTElORyk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBnc3Rfc3RydWN0dXJlX2lkX2dldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChGTEFHUyksIEdTVF9UWVBFX1NDSEVEVUxJTkdfRkxBR1MsIGZsYWdzLAotICAgICAgR1NUX1FVQVJLIChNSU5TSVpFKSwgR19UWVBFX0lOVCwgbWluc2l6ZSwKLSAgICAgIEdTVF9RVUFSSyAoTUFYU0laRSksIEdfVFlQRV9JTlQsIG1heHNpemUsCi0gICAgICBHU1RfUVVBUksgKEFMSUdOKSwgR19UWVBFX0lOVCwgYWxpZ24sIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9hZGRfc2NoZWR1bGluZ19tb2RlOgotICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9TQ0hFRFVMSU5HIHR5cGUgcXVlcnkgI0dzdFF1ZXJ5Ci0gKiBAbW9kZTogYSAjR3N0UGFkTW9kZQotICoKLSAqIEFkZCBAbW9kZSBhcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCBzY2hlZHVsaW5nIG1vZGVzIHRvIEBxdWVyeS4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGUgKEdzdFF1ZXJ5ICogcXVlcnksIEdzdFBhZE1vZGUgbW9kZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdBcnJheSAqYXJyYXk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfU0NIRURVTElORyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9xdWVyeV9pc193cml0YWJsZSAocXVlcnkpKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGFycmF5ID0KLSAgICAgIGVuc3VyZV9hcnJheSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE1PREVTKSwgc2l6ZW9mIChHc3RQYWRNb2RlKSwgTlVMTCk7Ci0KLSAgZ19hcnJheV9hcHBlbmRfdmFsIChhcnJheSwgbW9kZSk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X2dldF9uX3NjaGVkdWxpbmdfbW9kZXM6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX1NDSEVEVUxJTkcgdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqCi0gKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIHZhbHVlcyBjdXJyZW50bHkgc3RvcmVkIGluIHRoZQotICogc2NoZWR1bGluZyBtb2RlIGFycmF5IG9mIHRoZSBxdWVyeSdzIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgc2NoZWR1bGluZyBtb2RlIGFycmF5IHNpemUgYXMgYSAjZ3VpbnQuCi0gKi8KLWd1aW50Ci1nc3RfcXVlcnlfZ2V0X25fc2NoZWR1bGluZ19tb2RlcyAoR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR0FycmF5ICphcnJheTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1NDSEVEVUxJTkcsIDApOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgYXJyYXkgPQotICAgICAgZW5zdXJlX2FycmF5IChzdHJ1Y3R1cmUsIEdTVF9RVUFSSyAoTU9ERVMpLCBzaXplb2YgKEdzdFBhZE1vZGUpLCBOVUxMKTsKLQotICByZXR1cm4gYXJyYXktPmxlbjsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2VfbnRoX3NjaGVkdWxpbmdfbW9kZToKLSAqIEBxdWVyeTogYSBHU1RfUVVFUllfU0NIRURVTElORyB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQotICogQGluZGV4OiBwb3NpdGlvbiBpbiB0aGUgc2NoZWR1bGluZyBtb2RlcyBhcnJheSB0byByZWFkCi0gKgotICogUGFyc2UgYW4gYXZhaWxhYmxlIHF1ZXJ5IGFuZCBnZXQgdGhlIHNjaGVkdWxpbmcgbW9kZQotICogYXQgQGluZGV4IG9mIHRoZSBzY2hlZHVsaW5nIG1vZGVzIGFycmF5LgotICoKLSAqIFJldHVybnM6IGEgI0dzdFBhZE1vZGUgb2YgdGhlIHNjaGVkdWxpbmcgbW9kZSBhdCBAaW5kZXguCi0gKi8KLUdzdFBhZE1vZGUKLWdzdF9xdWVyeV9wYXJzZV9udGhfc2NoZWR1bGluZ19tb2RlIChHc3RRdWVyeSAqIHF1ZXJ5LCBndWludCBpbmRleCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdBcnJheSAqYXJyYXk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1NDSEVEVUxJTkcsCi0gICAgICBHU1RfUEFEX01PREVfTk9ORSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBhcnJheSA9Ci0gICAgICBlbnN1cmVfYXJyYXkgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChNT0RFUyksIHNpemVvZiAoR3N0UGFkTW9kZSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5kZXggPCBhcnJheS0+bGVuLCBHU1RfUEFEX01PREVfTk9ORSk7Ci0KLSAgcmV0dXJuIGdfYXJyYXlfaW5kZXggKGFycmF5LCBHc3RQYWRNb2RlLCBpbmRleCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGU6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX1NDSEVEVUxJTkcgdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqIEBtb2RlOiB0aGUgc2NoZWR1bGluZyBtb2RlCi0gKgotICogQ2hlY2sgaWYgQHF1ZXJ5IGhhcyBzY2hlZHVsaW5nIG1vZGUgc2V0LgotICoKLSAqIDxub3RlPgotICogICA8cGFyYT4KLSAqICAgICBXaGVuIGNoZWNraW5nIGlmIHVwc3RyZWFtIHN1cHBvcnRzIHB1bGwgbW9kZSwgaXQgaXMgdXN1YWxseSBub3QKLSAqICAgICBlbm91Z2ggdG8ganVzdCBjaGVjayBmb3IgR1NUX1BBRF9NT0RFX1BVTEwgd2l0aCB0aGlzIGZ1bmN0aW9uLCB5b3UKLSAqICAgICBhbHNvIHdhbnQgdG8gY2hlY2sgd2hldGhlciB0aGUgc2NoZWR1bGluZyBmbGFncyByZXR1cm5lZCBieQotICogICAgIGdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nKCkgaGF2ZSB0aGUgc2Vla2luZyBmbGFnIHNldCAobWVhbmluZwotICogICAgIHJhbmRvbSBhY2Nlc3MgaXMgc3VwcG9ydGVkLCBub3Qgb25seSBzZXF1ZW50aWFsIHB1bGxzKS4KLSAqICAgPC9wYXJhPgotICogPC9ub3RlPgotICoKLSAqIFJldHVybnM6ICVUUlVFIHdoZW4gQG1vZGUgaXMgaW4gdGhlIGxpc3Qgb2Ygc2NoZWR1bGluZyBtb2Rlcy4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RQYWRNb2RlIG1vZGUpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHQXJyYXkgKmFycmF5OwotICBndWludCBpLCBsZW47Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1NDSEVEVUxJTkcsIEZBTFNFKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gIGFycmF5ID0KLSAgICAgIGVuc3VyZV9hcnJheSAoc3RydWN0dXJlLCBHU1RfUVVBUksgKE1PREVTKSwgc2l6ZW9mIChHc3RQYWRNb2RlKSwgTlVMTCk7Ci0KLSAgbGVuID0gYXJyYXktPmxlbjsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgaWYgKG1vZGUgPT0gZ19hcnJheV9pbmRleCAoYXJyYXksIEdzdFBhZE1vZGUsIGkpKQotICAgICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlX3dpdGhfZmxhZ3M6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX1NDSEVEVUxJTkcgdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqIEBtb2RlOiB0aGUgc2NoZWR1bGluZyBtb2RlCi0gKiBAZmxhZ3M6ICNHc3RTY2hlZHVsaW5nRmxhZ3MKLSAqCi0gKiBDaGVjayBpZiBAcXVlcnkgaGFzIHNjaGVkdWxpbmcgbW9kZSBzZXQgYW5kIEBmbGFncyBpcyBzZXQgaW4KLSAqIHF1ZXJ5IHNjaGVkdWxpbmcgZmxhZ3MuCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiBAbW9kZSBpcyBpbiB0aGUgbGlzdCBvZiBzY2hlZHVsaW5nIG1vZGVzCi0gKiAgICBhbmQgQGZsYWdzIGFyZSBjb21wYXRpYmxlIHdpdGggcXVlcnkgZmxhZ3MuCi0gKi8KLWdib29sZWFuCi1nc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RQYWRNb2RlIG1vZGUsCi0gICAgR3N0U2NoZWR1bGluZ0ZsYWdzIGZsYWdzKQotewotICBHc3RTY2hlZHVsaW5nRmxhZ3Mgc2NoZWRfZmxhZ3M7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX1NDSEVEVUxJTkcsIEZBTFNFKTsKLQotICBnc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZyAocXVlcnksICZzY2hlZF9mbGFncywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuICgoZmxhZ3MgJiBzY2hlZF9mbGFncykgPT0gZmxhZ3MpICYmCi0gICAgICBnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZSAocXVlcnksIG1vZGUpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9uZXdfYWNjZXB0X2NhcHM6Ci0gKiBAY2FwczogYSBmaXhlZCAjR3N0Q2FwcwotICoKLSAqIENvbnN0cnVjdHMgYSBuZXcgcXVlcnkgb2JqZWN0IGZvciBxdWVyeWluZyBpZiBAY2FwcyBhcmUgYWNjZXB0ZWQuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmKCkKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RRdWVyeQotICovCi1Hc3RRdWVyeSAqCi1nc3RfcXVlcnlfbmV3X2FjY2VwdF9jYXBzIChHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpLCBOVUxMKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChRVUVSWV9BQ0NFUFRfQ0FQUyksCi0gICAgICBHU1RfUVVBUksgKENBUFMpLCBHU1RfVFlQRV9DQVBTLCBjYXBzLAotICAgICAgR1NUX1FVQVJLIChSRVNVTFQpLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfY3VzdG9tIChHU1RfUVVFUllfQUNDRVBUX0NBUFMsIHN0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIHF1ZXJ5OwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2FwczoKLSAqIEBxdWVyeTogVGhlIHF1ZXJ5IHRvIHBhcnNlCi0gKiBAY2FwczogKG91dCkgKHRyYW5zZmVyIG5vbmUpOiBBIHBvaW50ZXIgdG8gdGhlIGNhcHMKLSAqCi0gKiBHZXQgdGhlIGNhcHMgZnJvbSBAcXVlcnkuIFRoZSBjYXBzIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcyBAcXVlcnkgcmVtYWlucwotICogdmFsaWQuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2FwcyAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Q2FwcyAqKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICAqY2FwcyA9IGdfdmFsdWVfZ2V0X2JveGVkIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgIEdTVF9RVUFSSyAoQ0FQUykpKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdDoKLSAqIEBxdWVyeTogYSBHU1RfUVVFUllfQUNDRVBUX0NBUFMgdHlwZSBxdWVyeSAjR3N0UXVlcnkKLSAqIEByZXN1bHQ6IHRoZSByZXN1bHQgdG8gc2V0Ci0gKgotICogU2V0IEByZXN1bHQgYXMgdGhlIHJlc3VsdCBmb3IgdGhlIEBxdWVyeS4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3NldF9hY2NlcHRfY2Fwc19yZXN1bHQgKEdzdFF1ZXJ5ICogcXVlcnksIGdib29sZWFuIHJlc3VsdCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQUNDRVBUX0NBUFMpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfcXVlcnlfaXNfd3JpdGFibGUgKHF1ZXJ5KSk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICBnc3Rfc3RydWN0dXJlX2lkX3NldCAoc3RydWN0dXJlLAotICAgICAgR1NUX1FVQVJLIChSRVNVTFQpLCBHX1RZUEVfQk9PTEVBTiwgcmVzdWx0LCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHNfcmVzdWx0OgotICogQHF1ZXJ5OiBhIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUyB0eXBlIHF1ZXJ5ICNHc3RRdWVyeQotICogQHJlc3VsdDogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKLSAqCi0gKiBQYXJzZSB0aGUgcmVzdWx0IGZyb20gQHF1ZXJ5IGFuZCBzdG9yZSBpbiBAcmVzdWx0LgotICovCi12b2lkCi1nc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHNfcmVzdWx0IChHc3RRdWVyeSAqIHF1ZXJ5LCBnYm9vbGVhbiAqIHJlc3VsdCkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQUNDRVBUX0NBUFMpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHN0cnVjdHVyZSwKLSAgICAgIEdTVF9RVUFSSyAoUkVTVUxUKSwgR19UWVBFX0JPT0xFQU4sIHJlc3VsdCwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X25ld19jYXBzOgotICogQGZpbHRlcjogYSBmaWx0ZXIKLSAqCi0gKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIGNhcHMuCi0gKgotICogVGhlIENBUFMgcXVlcnkgc2hvdWxkIHJldHVybiB0aGUgYWxsb3dhYmxlIGNhcHMgZm9yIGEgcGFkIGluIHRoZSBjb250ZXh0Ci0gKiBvZiB0aGUgZWxlbWVudCdzIHN0YXRlLCBpdHMgbGluayB0byBvdGhlciBlbGVtZW50cywgYW5kIHRoZSBkZXZpY2VzIG9yIGZpbGVzCi0gKiBpdCBoYXMgb3BlbmVkLiBUaGVzZSBjYXBzIG11c3QgYmUgYSBzdWJzZXQgb2YgdGhlIHBhZCB0ZW1wbGF0ZSBjYXBzLiBJbiB0aGUKLSAqIE5VTEwgc3RhdGUgd2l0aCBubyBsaW5rcywgdGhlIENBUFMgcXVlcnkgc2hvdWxkIGlkZWFsbHkgcmV0dXJuIHRoZSBzYW1lIGNhcHMKLSAqIGFzIHRoZSBwYWQgdGVtcGxhdGUuIEluIHJhcmUgY2lyY3Vtc3RhbmNlcywgYW4gb2JqZWN0IHByb3BlcnR5IGNhbiBhZmZlY3QKLSAqIHRoZSBjYXBzIHJldHVybmVkIGJ5IHRoZSBDQVBTIHF1ZXJ5LCBidXQgdGhpcyBpcyBkaXNjb3VyYWdlZC4KLSAqCi0gKiBGb3IgbW9zdCBmaWx0ZXJzLCB0aGUgY2FwcyByZXR1cm5lZCBieSBDQVBTIHF1ZXJ5IGlzIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZQotICogYWxsb3dlZCBjYXBzIG9uIG90aGVyIHBhZHMuIEZvciBkZW11eGVycyBhbmQgZGVjb2RlcnMsIHRoZSBjYXBzIHJldHVybmVkIGJ5Ci0gKiB0aGUgc3JjcGFkJ3MgZ2V0Y2FwcyBmdW5jdGlvbiBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBzdHJlYW0gZGF0YS4gQWdhaW4sCi0gKiB0aGUgQ0FQUyBxdWVyeSBzaG91bGQgcmV0dXJuIHRoZSBtb3N0IHNwZWNpZmljIGNhcHMgaXQgcmVhc29uYWJseSBjYW4sIHNpbmNlIHRoaXMKLSAqIGhlbHBzIHdpdGggYXV0b3BsdWdnaW5nLgotICoKLSAqIFRoZSBAZmlsdGVyIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHJlc3VsdCBjYXBzLCBvbmx5IHRoZSBjYXBzIG1hdGNoaW5nCi0gKiBAZmlsdGVyIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSBDQVBTIHF1ZXJ5LiBTcGVjaWZ5aW5nIGEgZmlsdGVyIG1pZ2h0Ci0gKiBncmVhdGx5IHJlZHVjZSB0aGUgYW1vdW50IG9mIHByb2Nlc3NpbmcgYW4gZWxlbWVudCBuZWVkcyB0byBkby4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYoKQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5Ci0gKi8KLUdzdFF1ZXJ5ICoKLWdzdF9xdWVyeV9uZXdfY2FwcyAoR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZCAoR1NUX1FVQVJLIChRVUVSWV9DQVBTKSwKLSAgICAgIEdTVF9RVUFSSyAoRklMVEVSKSwgR1NUX1RZUEVfQ0FQUywgZmlsdGVyLAotICAgICAgR1NUX1FVQVJLIChDQVBTKSwgR1NUX1RZUEVfQ0FQUywgTlVMTCwgTlVMTCk7Ci0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19jdXN0b20gKEdTVF9RVUVSWV9DQVBTLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBxdWVyeTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfcGFyc2VfY2FwczoKLSAqIEBxdWVyeTogVGhlIHF1ZXJ5IHRvIHBhcnNlCi0gKiBAZmlsdGVyOiAob3V0KSAodHJhbnNmZXIgbm9uZSk6IEEgcG9pbnRlciB0byB0aGUgY2FwcyBmaWx0ZXIKLSAqCi0gKiBHZXQgdGhlIGZpbHRlciBmcm9tIHRoZSBjYXBzIEBxdWVyeS4gVGhlIGNhcHMgcmVtYWlucyB2YWxpZCBhcyBsb25nIGFzCi0gKiBAcXVlcnkgcmVtYWlucyB2YWxpZC4KLSAqLwotdm9pZAotZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKEdzdFF1ZXJ5ICogcXVlcnksIEdzdENhcHMgKiogZmlsdGVyKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9DQVBTKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmlsdGVyICE9IE5VTEwpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgKmZpbHRlciA9IGdfdmFsdWVfZ2V0X2JveGVkIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLAotICAgICAgICAgIEdTVF9RVUFSSyAoRklMVEVSKSkpOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQ6Ci0gKiBAcXVlcnk6IFRoZSBxdWVyeSB0byB1c2UKLSAqIEBjYXBzOiAoaW4pOiBBIHBvaW50ZXIgdG8gdGhlIGNhcHMKLSAqCi0gKiBTZXQgdGhlIEBjYXBzIHJlc3VsdCBpbiBAcXVlcnkuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKEdzdFF1ZXJ5ICogcXVlcnksIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9DQVBTKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlIChxdWVyeSkpOwotCi0gIHN0cnVjdHVyZSA9IEdTVF9RVUVSWV9TVFJVQ1RVUkUgKHF1ZXJ5KTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXQgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChDQVBTKSwgR1NUX1RZUEVfQ0FQUywgY2FwcywgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX2NhcHNfcmVzdWx0OgotICogQHF1ZXJ5OiBUaGUgcXVlcnkgdG8gcGFyc2UKLSAqIEBjYXBzOiAob3V0KSAodHJhbnNmZXIgbm9uZSk6IEEgcG9pbnRlciB0byB0aGUgY2FwcwotICoKLSAqIEdldCB0aGUgY2FwcyByZXN1bHQgZnJvbSBAcXVlcnkuIFRoZSBjYXBzIHJlbWFpbnMgdmFsaWQgYXMgbG9uZyBhcwotICogQHF1ZXJ5IHJlbWFpbnMgdmFsaWQuCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9jYXBzX3Jlc3VsdCAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Q2FwcyAqKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9DQVBTKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY2FwcyAhPSBOVUxMKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0gICpjYXBzID0gZ192YWx1ZV9nZXRfYm94ZWQgKGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsCi0gICAgICAgICAgR1NUX1FVQVJLIChDQVBTKSkpOwotfQotCi0jaWYgMAotdm9pZAotZ3N0X3F1ZXJ5X2ludGVyc2VjdF9jYXBzX3Jlc3VsdCAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Q2FwcyAqIGZpbHRlciwKLSAgICBHc3RDYXBzSW50ZXJzZWN0TW9kZSBtb2RlKQotewotICBHc3RDYXBzICpyZXMsICpjYXBzID0gTlVMTDsKLQotICBnc3RfcXVlcnlfcGFyc2VfY2Fwc19yZXN1bHQgKHF1ZXJ5LCAmY2Fwcyk7Ci0gIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCByZXMpOwotICBnc3RfY2Fwc191bnJlZiAocmVzKTsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9xdWVyeV9uZXdfZHJhaW46Ci0gKgotICogQ29uc3RydWN0cyBhIG5ldyBxdWVyeSBvYmplY3QgZm9yIHF1ZXJ5aW5nIHRoZSBkcmFpbiBzdGF0ZS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYoKQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFF1ZXJ5Ci0gKi8KLUdzdFF1ZXJ5ICoKLWdzdF9xdWVyeV9uZXdfZHJhaW4gKHZvaWQpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWRfZW1wdHkgKEdTVF9RVUFSSyAoUVVFUllfRFJBSU4pKTsKLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2N1c3RvbSAoR1NUX1FVRVJZX0RSQUlOLCBzdHJ1Y3R1cmUpOwotCi0gIHJldHVybiBxdWVyeTsKLX0KLQotLyoqCi0gKiBnc3RfcXVlcnlfbmV3X2NvbnRleHQ6Ci0gKiBAY29udGV4dF90eXBlOiBDb250ZXh0IHR5cGUgdG8gcXVlcnkKLSAqCi0gKiBDb25zdHJ1Y3RzIGEgbmV3IHF1ZXJ5IG9iamVjdCBmb3IgcXVlcnlpbmcgdGhlIHBpcGVsaW5lLWxvY2FsIGNvbnRleHQuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3F1ZXJ5X3VucmVmKCkKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RRdWVyeQotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotR3N0UXVlcnkgKgotZ3N0X3F1ZXJ5X25ld19jb250ZXh0IChjb25zdCBnY2hhciAqIGNvbnRleHRfdHlwZSkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29udGV4dF90eXBlICE9IE5VTEwsIE5VTEwpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChHU1RfUVVBUksgKFFVRVJZX0NPTlRFWFQpLAotICAgICAgR1NUX1FVQVJLIChDT05URVhUX1RZUEUpLCBHX1RZUEVfU1RSSU5HLCBjb250ZXh0X3R5cGUsIE5VTEwpOwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfY3VzdG9tIChHU1RfUVVFUllfQ09OVEVYVCwgc3RydWN0dXJlKTsKLQotICByZXR1cm4gcXVlcnk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3NldF9jb250ZXh0OgotICogQHF1ZXJ5OiBhICNHc3RRdWVyeSB3aXRoIHF1ZXJ5IHR5cGUgR1NUX1FVRVJZX0NPTlRFWFQKLSAqIEBjb250ZXh0OiB0aGUgcmVxdWVzdGVkICNHc3RDb250ZXh0Ci0gKgotICogQW5zd2VyIGEgY29udGV4dCBxdWVyeSBieSBzZXR0aW5nIHRoZSByZXF1ZXN0ZWQgY29udGV4dC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9zZXRfY29udGV4dCAoR3N0UXVlcnkgKiBxdWVyeSwgR3N0Q29udGV4dCAqIGNvbnRleHQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgY29uc3QgZ2NoYXIgKmNvbnRleHRfdHlwZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9DT05URVhUKTsKLQotICBnc3RfcXVlcnlfcGFyc2VfY29udGV4dF90eXBlIChxdWVyeSwgJmNvbnRleHRfdHlwZSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cmNtcCAoZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAoY29udGV4dCksCi0gICAgICAgICAgY29udGV4dF90eXBlKSA9PSAwKTsKLQotICBzID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChzLAotICAgICAgR1NUX1FVQVJLIChDT05URVhUKSwgR1NUX1RZUEVfQ09OVEVYVCwgY29udGV4dCwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHQ6Ci0gKiBAcXVlcnk6IFRoZSBxdWVyeSB0byBwYXJzZQotICogQGNvbnRleHQ6IChvdXQpICh0cmFuc2ZlciBub25lKTogQSBwb2ludGVyIHRvIHN0b3JlIHRoZSAjR3N0Q29udGV4dAotICoKLSAqIEdldCB0aGUgY29udGV4dCBmcm9tIHRoZSBjb250ZXh0IEBxdWVyeS4gVGhlIGNvbnRleHQgcmVtYWlucyB2YWxpZCBhcyBsb25nIGFzCi0gKiBAcXVlcnkgcmVtYWlucyB2YWxpZC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9xdWVyeV9wYXJzZV9jb250ZXh0IChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RDb250ZXh0ICoqIGNvbnRleHQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBHVmFsdWUgKnY7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQ09OVEVYVCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNvbnRleHQgIT0gTlVMTCk7Ci0KLSAgc3RydWN0dXJlID0gR1NUX1FVRVJZX1NUUlVDVFVSRSAocXVlcnkpOwotICB2ID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChDT05URVhUKSk7Ci0gIGlmICh2KQotICAgICpjb250ZXh0ID0gZ192YWx1ZV9nZXRfYm94ZWQgKHYpOwotICBlbHNlCi0gICAgKmNvbnRleHQgPSBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9xdWVyeV9wYXJzZV9jb250ZXh0X3R5cGU6Ci0gKiBAcXVlcnk6IGEgR1NUX1FVRVJZX0NPTlRFWFQgdHlwZSBxdWVyeQotICogQGNvbnRleHRfdHlwZTogKG91dCkgKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlIGNvbnRleHQgdHlwZSwgb3IgJU5VTEwKLSAqCi0gKiBQYXJzZSBhIGNvbnRleHQgdHlwZSBmcm9tIGFuIGV4aXN0aW5nIEdTVF9RVUVSWV9DT05URVhUIHF1ZXJ5LgotICoKLSAqIFJldHVybnM6IGEgI2dib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHBhcnNpbmcgc3VjY2VlZGVkLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ2Jvb2xlYW4KLWdzdF9xdWVyeV9wYXJzZV9jb250ZXh0X3R5cGUgKEdzdFF1ZXJ5ICogcXVlcnksIGNvbnN0IGdjaGFyICoqIGNvbnRleHRfdHlwZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0NPTlRFWFQsIEZBTFNFKTsKLQotICBzdHJ1Y3R1cmUgPSBHU1RfUVVFUllfU1RSVUNUVVJFIChxdWVyeSk7Ci0KLSAgaWYgKGNvbnRleHRfdHlwZSkgewotICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgR1NUX1FVQVJLIChDT05URVhUX1RZUEUpKTsKLSAgICAqY29udGV4dF90eXBlID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RxdWVyeS5oIGIvZ3N0L2dzdHF1ZXJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNzM1M2MuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHF1ZXJ5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0ODkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAxMSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIGdzdHF1ZXJ5Lmg6IEdzdFF1ZXJ5IEFQSSBkZWNsYXJhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9RVUVSWV9IX18KLSNkZWZpbmUgX19HU1RfUVVFUllfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0aXRlcmF0b3IuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0bWluaW9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Zm9ybWF0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBhZC5oPgotI2luY2x1ZGUgPGdzdC9nc3RhbGxvY2F0b3IuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dG9jLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGNvbnRleHQuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UXVlcnkgR3N0UXVlcnk7Ci0KLS8qKgotICogR3N0UXVlcnlUeXBlRmxhZ3M6Ci0gKiBAR1NUX1FVRVJZX1RZUEVfVVBTVFJFQU06ICAgICBTZXQgaWYgdGhlIHF1ZXJ5IGNhbiB0cmF2ZWwgdXBzdHJlYW0uCi0gKiBAR1NUX1FVRVJZX1RZUEVfRE9XTlNUUkVBTTogICBTZXQgaWYgdGhlIHF1ZXJ5IGNhbiB0cmF2ZWwgZG93bnN0cmVhbS4KLSAqIEBHU1RfUVVFUllfVFlQRV9TRVJJQUxJWkVEOiAgIFNldCBpZiB0aGUgcXVlcnkgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93LgotICoKLSAqICNHc3RRdWVyeVR5cGVGbGFncyBpbmRpY2F0ZSB0aGUgYXNwZWN0cyBvZiB0aGUgZGlmZmVyZW50ICNHc3RRdWVyeVR5cGUKLSAqIHZhbHVlcy4gWW91IGNhbiBnZXQgdGhlIHR5cGUgZmxhZ3Mgb2YgYSAjR3N0UXVlcnlUeXBlIHdpdGggdGhlCi0gKiBnc3RfcXVlcnlfdHlwZV9nZXRfZmxhZ3MoKSBmdW5jdGlvbi4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1FVRVJZX1RZUEVfVVBTVFJFQU0gICAgICAgPSAxIDw8IDAsCi0gIEdTVF9RVUVSWV9UWVBFX0RPV05TVFJFQU0gICAgID0gMSA8PCAxLAotICBHU1RfUVVFUllfVFlQRV9TRVJJQUxJWkVEICAgICA9IDEgPDwgMgotfSBHc3RRdWVyeVR5cGVGbGFnczsKLQotLyoqCi0gKiBHU1RfUVVFUllfVFlQRV9CT1RIOgotICoKLSAqIFRoZSBzYW1lIHRoaW5nIGFzICNHU1RfUVVFUllfVFlQRV9VUFNUUkVBTSB8ICNHU1RfUVVFUllfVFlQRV9ET1dOU1RSRUFNLgotICovCi0jZGVmaW5lIEdTVF9RVUVSWV9UWVBFX0JPVEggXAotICAgIChHU1RfUVVFUllfVFlQRV9VUFNUUkVBTSB8IEdTVF9RVUVSWV9UWVBFX0RPV05TVFJFQU0pCi0KLSNkZWZpbmUgR1NUX1FVRVJZX05VTV9TSElGVCAgICAgKDgpCi0KLS8qKgotICogR1NUX1FVRVJZX01BS0VfVFlQRToKLSAqIEBudW06IHRoZSBxdWVyeSBudW1iZXIgdG8gY3JlYXRlCi0gKiBAZmxhZ3M6IHRoZSBxdWVyeSBmbGFncwotICoKLSAqIHdoZW4gbWFraW5nIGN1c3RvbSBxdWVyeSB0eXBlcywgdXNlIHRoaXMgbWFjcm8gd2l0aCB0aGUgbnVtIGFuZAotICogdGhlIGdpdmVuIGZsYWdzCi0gKi8KLSNkZWZpbmUgR1NUX1FVRVJZX01BS0VfVFlQRShudW0sZmxhZ3MpIFwKLSAgICAoKChudW0pIDw8IEdTVF9RVUVSWV9OVU1fU0hJRlQpIHwgKGZsYWdzKSkKLQotI2RlZmluZSBGTEFHKG5hbWUpIEdTVF9RVUVSWV9UWVBFXyMjbmFtZQotCi0KLS8qKgotICogR3N0UXVlcnlUeXBlOgotICogQEdTVF9RVUVSWV9VTktOT1dOOiB1bmtub3duIHF1ZXJ5IHR5cGUKLSAqIEBHU1RfUVVFUllfUE9TSVRJT046IGN1cnJlbnQgcG9zaXRpb24gaW4gc3RyZWFtCi0gKiBAR1NUX1FVRVJZX0RVUkFUSU9OOiB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgc3RyZWFtCi0gKiBAR1NUX1FVRVJZX0xBVEVOQ1k6IGxhdGVuY3kgb2Ygc3RyZWFtCi0gKiBAR1NUX1FVRVJZX0pJVFRFUjogY3VycmVudCBqaXR0ZXIgb2Ygc3RyZWFtCi0gKiBAR1NUX1FVRVJZX1JBVEU6IGN1cnJlbnQgcmF0ZSBvZiB0aGUgc3RyZWFtCi0gKiBAR1NUX1FVRVJZX1NFRUtJTkc6IHNlZWtpbmcgY2FwYWJpbGl0aWVzCi0gKiBAR1NUX1FVRVJZX1NFR01FTlQ6IHNlZ21lbnQgc3RhcnQvc3RvcCBwb3NpdGlvbnMKLSAqIEBHU1RfUVVFUllfQ09OVkVSVDogY29udmVydCB2YWx1ZXMgYmV0d2VlbiBmb3JtYXRzCi0gKiBAR1NUX1FVRVJZX0ZPUk1BVFM6IHF1ZXJ5IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjb252ZXJ0Ci0gKiBAR1NUX1FVRVJZX0JVRkZFUklORzogcXVlcnkgYXZhaWxhYmxlIG1lZGlhIGZvciBlZmZpY2llbnQgc2Vla2luZy4KLSAqIEBHU1RfUVVFUllfQ1VTVE9NOiBhIGN1c3RvbSBhcHBsaWNhdGlvbiBvciBlbGVtZW50IGRlZmluZWQgcXVlcnkuCi0gKiBAR1NUX1FVRVJZX1VSSTogcXVlcnkgdGhlIFVSSSBvZiB0aGUgc291cmNlIG9yIHNpbmsuCi0gKiBAR1NUX1FVRVJZX0FMTE9DQVRJT046IHRoZSBidWZmZXIgYWxsb2NhdGlvbiBwcm9wZXJ0aWVzCi0gKiBAR1NUX1FVRVJZX1NDSEVEVUxJTkc6IHRoZSBzY2hlZHVsaW5nIHByb3BlcnRpZXMKLSAqIEBHU1RfUVVFUllfQUNDRVBUX0NBUFM6IHRoZSBhY2NlcHQgY2FwcyBxdWVyeQotICogQEdTVF9RVUVSWV9DQVBTOiB0aGUgY2FwcyBxdWVyeQotICogQEdTVF9RVUVSWV9EUkFJTjogd2FpdCB0aWxsIGFsbCBzZXJpYWxpemVkIGRhdGEgaXMgY29uc3VtZWQgZG93bnN0cmVhbQotICogQEdTVF9RVUVSWV9DT05URVhUOiBxdWVyeSB0aGUgcGlwZWxpbmUtbG9jYWwgY29udGV4dCBmcm9tCi0gKiAgICAgZG93bnN0cmVhbSBvciB1cHN0cmVhbSAoc2luY2UgMS4yKQotICoKLSAqIFN0YW5kYXJkIHByZWRlZmluZWQgUXVlcnkgdHlwZXMKLSAqLwotLyogTk9URTogZG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSB0aGUgdGFibGUgaW4gZ3N0cXVlcnkuYyB3aGVuIGNoYW5naW5nCi0gKiB0aGlzIGVudW0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9RVUVSWV9VTktOT1dOICAgICAgPSBHU1RfUVVFUllfTUFLRV9UWVBFICgwLCAwKSwKLSAgR1NUX1FVRVJZX1BPU0lUSU9OICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDEwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX0RVUkFUSU9OICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDIwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX0xBVEVOQ1kgICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDMwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX0pJVFRFUiAgICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDQwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX1JBVEUgICAgICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDUwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX1NFRUtJTkcgICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDYwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX1NFR01FTlQgICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDcwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX0NPTlZFUlQgICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDgwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX0ZPUk1BVFMgICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDkwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX0JVRkZFUklORyAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDExMCwgRkxBRyhCT1RIKSksCi0gIEdTVF9RVUVSWV9DVVNUT00gICAgICAgPSBHU1RfUVVFUllfTUFLRV9UWVBFICgxMjAsIEZMQUcoQk9USCkpLAotICBHU1RfUVVFUllfVVJJICAgICAgICAgID0gR1NUX1FVRVJZX01BS0VfVFlQRSAoMTMwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX0FMTE9DQVRJT04gICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDE0MCwgRkxBRyhET1dOU1RSRUFNKSB8IEZMQUcoU0VSSUFMSVpFRCkpLAotICBHU1RfUVVFUllfU0NIRURVTElORyAgID0gR1NUX1FVRVJZX01BS0VfVFlQRSAoMTUwLCBGTEFHKFVQU1RSRUFNKSksCi0gIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUyAgPSBHU1RfUVVFUllfTUFLRV9UWVBFICgxNjAsIEZMQUcoQk9USCkpLAotICBHU1RfUVVFUllfQ0FQUyAgICAgICAgID0gR1NUX1FVRVJZX01BS0VfVFlQRSAoMTcwLCBGTEFHKEJPVEgpKSwKLSAgR1NUX1FVRVJZX0RSQUlOICAgICAgICA9IEdTVF9RVUVSWV9NQUtFX1RZUEUgKDE4MCwgRkxBRyhET1dOU1RSRUFNKSB8IEZMQUcoU0VSSUFMSVpFRCkpLAotICBHU1RfUVVFUllfQ09OVEVYVCAgICAgID0gR1NUX1FVRVJZX01BS0VfVFlQRSAoMTkwLCBGTEFHKEJPVEgpKQotfSBHc3RRdWVyeVR5cGU7Ci0jdW5kZWYgRkxBRwotCi1HU1RfRVhQT1JUIEdUeXBlIF9nc3RfcXVlcnlfdHlwZTsKLQotI2RlZmluZSBHU1RfVFlQRV9RVUVSWSAgICAgICAgICAgICAgICAgICAgICAgICAoX2dzdF9xdWVyeV90eXBlKQotI2RlZmluZSBHU1RfSVNfUVVFUlkob2JqKSAgICAgICAgICAgICAgICAgICAgICAoR1NUX0lTX01JTklfT0JKRUNUX1RZUEUgKG9iaiwgR1NUX1RZUEVfUVVFUlkpKQotI2RlZmluZSBHU1RfUVVFUllfQ0FTVChvYmopICAgICAgICAgICAgICAgICAgICAoKEdzdFF1ZXJ5Kikob2JqKSkKLSNkZWZpbmUgR1NUX1FVRVJZKG9iaikgICAgICAgICAgICAgICAgICAgICAgICAgKEdTVF9RVUVSWV9DQVNUKG9iaikpCi0KLS8qKgotICogR1NUX1FVRVJZX1RZUEU6Ci0gKiBAcXVlcnk6IHRoZSBxdWVyeSB0byBxdWVyeQotICoKLSAqIEdldCB0aGUgI0dzdFF1ZXJ5VHlwZSBvZiB0aGUgcXVlcnkuCi0gKi8KLSNkZWZpbmUgR1NUX1FVRVJZX1RZUEUocXVlcnkpICAoKChHc3RRdWVyeSopKHF1ZXJ5KSktPnR5cGUpCi0KLS8qKgotICogR1NUX1FVRVJZX1RZUEVfTkFNRToKLSAqIEBxdWVyeTogdGhlIHF1ZXJ5IHRvIHF1ZXJ5Ci0gKgotICogR2V0IGEgY29uc3RhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSAjR3N0UXVlcnlUeXBlIG9mIHRoZSBxdWVyeS4KLSAqLwotI2RlZmluZSBHU1RfUVVFUllfVFlQRV9OQU1FKHF1ZXJ5KSAoZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWUoR1NUX1FVRVJZX1RZUEUocXVlcnkpKSkKLQotLyoqCi0gKiBHU1RfUVVFUllfSVNfVVBTVFJFQU06Ci0gKiBAZXY6IHRoZSBxdWVyeSB0byBxdWVyeQotICoKLSAqIENoZWNrIGlmIGFuIHF1ZXJ5IGNhbiB0cmF2ZWwgdXBzdHJlYW0uCi0gKi8KLSNkZWZpbmUgR1NUX1FVRVJZX0lTX1VQU1RSRUFNKGV2KSAgICAgICAhIShHU1RfUVVFUllfVFlQRSAoZXYpICYgR1NUX1FVRVJZX1RZUEVfVVBTVFJFQU0pCi0vKioKLSAqIEdTVF9RVUVSWV9JU19ET1dOU1RSRUFNOgotICogQGV2OiB0aGUgcXVlcnkgdG8gcXVlcnkKLSAqCi0gKiBDaGVjayBpZiBhbiBxdWVyeSBjYW4gdHJhdmVsIGRvd25zdHJlYW0uCi0gKi8KLSNkZWZpbmUgR1NUX1FVRVJZX0lTX0RPV05TVFJFQU0oZXYpICAgICAhIShHU1RfUVVFUllfVFlQRSAoZXYpICYgR1NUX1FVRVJZX1RZUEVfRE9XTlNUUkVBTSkKLS8qKgotICogR1NUX1FVRVJZX0lTX1NFUklBTElaRUQ6Ci0gKiBAZXY6IHRoZSBxdWVyeSB0byBxdWVyeQotICoKLSAqIENoZWNrIGlmIGFuIHF1ZXJ5IGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgZGF0YSBzdHJlYW0uCi0gKi8KLSNkZWZpbmUgR1NUX1FVRVJZX0lTX1NFUklBTElaRUQoZXYpICAgICAhIShHU1RfUVVFUllfVFlQRSAoZXYpICYgR1NUX1FVRVJZX1RZUEVfU0VSSUFMSVpFRCkKLQotCi0vKioKLSAqIEdzdFF1ZXJ5OgotICogQG1pbmlfb2JqZWN0OiBUaGUgcGFyZW50ICNHc3RNaW5pT2JqZWN0IHR5cGUKLSAqIEB0eXBlOiB0aGUgI0dzdFF1ZXJ5VHlwZQotICoKLSAqIFRoZSAjR3N0UXVlcnkgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdFF1ZXJ5Ci17Ci0gIEdzdE1pbmlPYmplY3QgbWluaV9vYmplY3Q7Ci0KLSAgLyo8IHB1YmxpYyA+ICovLyogd2l0aCBDT1cgKi8KLSAgR3N0UXVlcnlUeXBlIHR5cGU7Ci19OwotCi1jb25zdCBnY2hhciogICAgZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWUgICAgICAgIChHc3RRdWVyeVR5cGUgdHlwZSk7Ci1HUXVhcmsgICAgICAgICAgZ3N0X3F1ZXJ5X3R5cGVfdG9fcXVhcmsgICAgICAgIChHc3RRdWVyeVR5cGUgdHlwZSk7Ci1Hc3RRdWVyeVR5cGVGbGFncwotICAgICAgICAgICAgICAgIGdzdF9xdWVyeV90eXBlX2dldF9mbGFncyAgICAgICAoR3N0UXVlcnlUeXBlIHR5cGUpOwotCi0KLUdUeXBlICAgICAgICAgICBnc3RfcXVlcnlfZ2V0X3R5cGUgICAgICAgICAgICAgKHZvaWQpOwotCi0vKiByZWZjb3VudGluZyAqLwotLyoqCi0gKiBnc3RfcXVlcnlfcmVmOgotICogQHE6IGEgI0dzdFF1ZXJ5IHRvIGluY3JlYXNlIHRoZSByZWZjb3VudCBvZi4KLSAqCi0gKiBJbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBnaXZlbiBxdWVyeSBieSBvbmUuCi0gKgotICogUmV0dXJuczogQHEKLSAqLwotc3RhdGljIGlubGluZSBHc3RRdWVyeSAqCi1nc3RfcXVlcnlfcmVmIChHc3RRdWVyeSAqIHEpCi17Ci0gIHJldHVybiBHU1RfUVVFUllfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X3JlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHEpKSk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X3VucmVmOgotICogQHE6IGEgI0dzdFF1ZXJ5IHRvIGRlY3JlYXNlIHRoZSByZWZjb3VudCBvZi4KLSAqCi0gKiBEZWNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBxdWVyeS4gSWYgdGhlIHJlZmNvdW50IHJlYWNoZXMgMCwgdGhlIHF1ZXJ5Ci0gKiB3aWxsIGJlIGZyZWVkLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9xdWVyeV91bnJlZiAoR3N0UXVlcnkgKiBxKQotewotICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChxKSk7Ci19Ci0KLS8qIGNvcHkgcXVlcnkgKi8KLS8qKgotICogZ3N0X3F1ZXJ5X2NvcHk6Ci0gKiBAcTogYSAjR3N0UXVlcnkgdG8gY29weS4KLSAqCi0gKiBDb3BpZXMgdGhlIGdpdmVuIHF1ZXJ5IHVzaW5nIHRoZSBjb3B5IGZ1bmN0aW9uIG9mIHRoZSBwYXJlbnQgI0dzdFN0cnVjdHVyZS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcXVlcnlfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGNvcHkgb2YgQHEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgR3N0UXVlcnkgKgotZ3N0X3F1ZXJ5X2NvcHkgKGNvbnN0IEdzdFF1ZXJ5ICogcSkKLXsKLSAgcmV0dXJuIEdTVF9RVUVSWV9DQVNUIChnc3RfbWluaV9vYmplY3RfY29weSAoR1NUX01JTklfT0JKRUNUX0NPTlNUX0NBU1QgKHEpKSk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXJ5X2lzX3dyaXRhYmxlOgotICogQHE6IGEgI0dzdFF1ZXJ5Ci0gKgotICogVGVzdHMgaWYgeW91IGNhbiBzYWZlbHkgd3JpdGUgZGF0YSBpbnRvIGEgcXVlcnkncyBzdHJ1Y3R1cmUuCi0gKi8KLSNkZWZpbmUgICAgICAgICBnc3RfcXVlcnlfaXNfd3JpdGFibGUocSkgICAgIGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHEpKQotLyoqCi0gKiBnc3RfcXVlcnlfbWFrZV93cml0YWJsZToKLSAqIEBxOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdFF1ZXJ5IHRvIG1ha2Ugd3JpdGFibGUKLSAqCi0gKiBNYWtlcyBhIHdyaXRhYmxlIHF1ZXJ5IGZyb20gdGhlIGdpdmVuIHF1ZXJ5LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgd3JpdGFibGUgcXVlcnkgKHBvc3NpYmx5IHNhbWUgYXMgQHEpCi0gKi8KLSNkZWZpbmUgICAgICAgICBnc3RfcXVlcnlfbWFrZV93cml0YWJsZShxKSAgICAgIEdTVF9RVUVSWV9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHEpKSkKLS8qKgotICogZ3N0X3F1ZXJ5X3JlcGxhY2U6Ci0gKiBAb2xkX3F1ZXJ5OiAoaW5vdXQpICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBwb2ludGVyIHRvIGEgcG9pbnRlciB0byBhCi0gKiAgICAgI0dzdFF1ZXJ5IHRvIGJlIHJlcGxhY2VkLgotICogQG5ld19xdWVyeTogKGFsbG93LW5vbmUpICh0cmFuc2ZlciBub25lKTogcG9pbnRlciB0byBhICNHc3RRdWVyeSB0aGF0IHdpbGwKLSAqICAgICByZXBsYWNlIHRoZSBxdWVyeSBwb2ludGVkIHRvIGJ5IEBvbGRfcXVlcnkuCi0gKgotICogTW9kaWZpZXMgYSBwb2ludGVyIHRvIGEgI0dzdFF1ZXJ5IHRvIHBvaW50IHRvIGEgZGlmZmVyZW50ICNHc3RRdWVyeS4gVGhlCi0gKiBtb2RpZmljYXRpb24gaXMgZG9uZSBhdG9taWNhbGx5IChzbyB0aGlzIGlzIHVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhyZWFkIHNhZmV0eQotICogaW4gc29tZSBjYXNlcyksIGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBhcmUgdXBkYXRlZCBhcHByb3ByaWF0ZWx5ICh0aGUgb2xkCi0gKiBxdWVyeSBpcyB1bnJlZmZlZCwgdGhlIG5ldyBvbmUgaXMgcmVmZmVkKS4KLSAqCi0gKiBFaXRoZXIgQG5ld19xdWVyeSBvciB0aGUgI0dzdFF1ZXJ5IHBvaW50ZWQgdG8gYnkgQG9sZF9xdWVyeSBtYXkgYmUgJU5VTEwuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQG5ld19xdWVyeSB3YXMgZGlmZmVyZW50IGZyb20gQG9sZF9xdWVyeQotICovCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1nc3RfcXVlcnlfcmVwbGFjZSAoR3N0UXVlcnkgKipvbGRfcXVlcnksIEdzdFF1ZXJ5ICpuZXdfcXVlcnkpCi17Ci0gIHJldHVybiBnc3RfbWluaV9vYmplY3RfcmVwbGFjZSAoKEdzdE1pbmlPYmplY3QgKiopIG9sZF9xdWVyeSwgKEdzdE1pbmlPYmplY3QgKikgbmV3X3F1ZXJ5KTsKLX0KLQotLyogYXBwbGljYXRpb24gc3BlY2lmaWMgcXVlcnkgKi8KLUdzdFF1ZXJ5ICogICAgICBnc3RfcXVlcnlfbmV3X2N1c3RvbSAgICAgICAgICAgIChHc3RRdWVyeVR5cGUgdHlwZSwgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUpIEdfR05VQ19NQUxMT0M7Ci1jb25zdCBHc3RTdHJ1Y3R1cmUgKgotICAgICAgICAgICAgICAgIGdzdF9xdWVyeV9nZXRfc3RydWN0dXJlICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSk7Ci1Hc3RTdHJ1Y3R1cmUgKiAgZ3N0X3F1ZXJ5X3dyaXRhYmxlX3N0cnVjdHVyZSAgICAoR3N0UXVlcnkgKnF1ZXJ5KTsKLQotLyogcG9zaXRpb24gcXVlcnkgKi8KLUdzdFF1ZXJ5KiAgICAgICBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uICAgICAgICAgIChHc3RGb3JtYXQgZm9ybWF0KSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IGN1cik7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgKmZvcm1hdCwgZ2ludDY0ICpjdXIpOwotCi0vKiBkdXJhdGlvbiBxdWVyeSAqLwotR3N0UXVlcnkqICAgICAgIGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gICAgICAgICAgKEdzdEZvcm1hdCBmb3JtYXQpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgZHVyYXRpb24pOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Rm9ybWF0ICpmb3JtYXQsIGdpbnQ2NCAqZHVyYXRpb24pOwotCi0vKiBsYXRlbmN5IHF1ZXJ5ICovCi1Hc3RRdWVyeSogICAgICAgZ3N0X3F1ZXJ5X25ld19sYXRlbmN5ICAgICAgICAgICAodm9pZCkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgICAgICAgICAgIChHc3RRdWVyeSAqcXVlcnksIGdib29sZWFuIGxpdmUsIEdzdENsb2NrVGltZSBtaW5fbGF0ZW5jeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgbWF4X2xhdGVuY3kpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5ICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2Jvb2xlYW4gKmxpdmUsIEdzdENsb2NrVGltZSAqbWluX2xhdGVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICptYXhfbGF0ZW5jeSk7Ci0KLS8qIGNvbnZlcnQgcXVlcnkgKi8KLUdzdFF1ZXJ5KiAgICAgICBnc3RfcXVlcnlfbmV3X2NvbnZlcnQgICAgICAgICAgIChHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHZhbHVlLCBHc3RGb3JtYXQgZGVzdF9mb3JtYXQpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0ICAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgZGVzdF9mb3JtYXQsIGdpbnQ2NCBkZXN0X3ZhbHVlKTsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAgICAgICAgIChHc3RRdWVyeSAqcXVlcnksIEdzdEZvcm1hdCAqc3JjX2Zvcm1hdCwgZ2ludDY0ICpzcmNfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0ICpkZXN0X2Zvcm1hdCwgZ2ludDY0ICpkZXN0X3ZhbHVlKTsKLS8qIHNlZ21lbnQgcXVlcnkgKi8KLUdzdFF1ZXJ5KiAgICAgICBnc3RfcXVlcnlfbmV3X3NlZ21lbnQgICAgICAgICAgIChHc3RGb3JtYXQgZm9ybWF0KSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfc2VnbWVudCAgICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2RvdWJsZSByYXRlLCBHc3RGb3JtYXQgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCBzdGFydF92YWx1ZSwgZ2ludDY0IHN0b3BfdmFsdWUpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWdtZW50ICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2RvdWJsZSAqcmF0ZSwgR3N0Rm9ybWF0ICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICpzdGFydF92YWx1ZSwgZ2ludDY0ICpzdG9wX3ZhbHVlKTsKLQotLyogc2Vla2luZyBxdWVyeSAqLwotR3N0UXVlcnkqICAgICAgIGdzdF9xdWVyeV9uZXdfc2Vla2luZyAgICAgICAgICAgKEdzdEZvcm1hdCBmb3JtYXQpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nICAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHNlZWthYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCBzZWdtZW50X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCBzZWdtZW50X2VuZCk7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RGb3JtYXQgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAqc2Vla2FibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICpzZWdtZW50X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAqc2VnbWVudF9lbmQpOwotLyogZm9ybWF0cyBxdWVyeSAqLwotR3N0UXVlcnkqICAgICAgIGdzdF9xdWVyeV9uZXdfZm9ybWF0cyAgICAgICAgICAgKHZvaWQpIEdfR05VQ19NQUxMT0M7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9mb3JtYXRzICAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBnaW50IG5fZm9ybWF0cywgLi4uKTsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2ICAgICAgICAgIChHc3RRdWVyeSAqcXVlcnksIGdpbnQgbl9mb3JtYXRzLCBjb25zdCBHc3RGb3JtYXQgKmZvcm1hdHMpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHMgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ3VpbnQgKm5fZm9ybWF0cyk7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBndWludCBudGgsIEdzdEZvcm1hdCAqZm9ybWF0KTsKLQotLyogYnVmZmVyaW5nIHF1ZXJ5ICovCi0vKioKLSAqIEdzdEJ1ZmZlcmluZ01vZGU6Ci0gKiBAR1NUX0JVRkZFUklOR19TVFJFQU06IGEgc21hbGwgYW1vdW50IG9mIGRhdGEgaXMgYnVmZmVyZWQKLSAqIEBHU1RfQlVGRkVSSU5HX0RPV05MT0FEOiB0aGUgc3RyZWFtIGlzIGJlaW5nIGRvd25sb2FkZWQKLSAqIEBHU1RfQlVGRkVSSU5HX1RJTUVTSElGVDogdGhlIHN0cmVhbSBpcyBiZWluZyBkb3dubG9hZGVkIGluIGEgcmluZ2J1ZmZlcgotICogQEdTVF9CVUZGRVJJTkdfTElWRTogdGhlIHN0cmVhbSBpcyBhIGxpdmUgc3RyZWFtCi0gKgotICogVGhlIGRpZmZlcmVudCB0eXBlcyBvZiBidWZmZXJpbmcgbWV0aG9kcy4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0JVRkZFUklOR19TVFJFQU0sCi0gIEdTVF9CVUZGRVJJTkdfRE9XTkxPQUQsCi0gIEdTVF9CVUZGRVJJTkdfVElNRVNISUZULAotICBHU1RfQlVGRkVSSU5HX0xJVkUKLX0gR3N0QnVmZmVyaW5nTW9kZTsKLQotR3N0UXVlcnkqICAgICAgIGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nICAgICAgICAgICAoR3N0Rm9ybWF0IGZvcm1hdCkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19wZXJjZW50ICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2Jvb2xlYW4gYnVzeSwgZ2ludCBwZXJjZW50KTsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2Jvb2xlYW4gKmJ1c3ksIGdpbnQgKnBlcmNlbnQpOwotCi12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHMgICAgIChHc3RRdWVyeSAqcXVlcnksIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgYXZnX2luLCBnaW50IGF2Z19vdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgYnVmZmVyaW5nX2xlZnQpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0QnVmZmVyaW5nTW9kZSAqbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKmF2Z19pbiwgZ2ludCAqYXZnX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAqYnVmZmVyaW5nX2xlZnQpOwotCi12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcmFuZ2UgICAgIChHc3RRdWVyeSAqcXVlcnksIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgc3RhcnQsIGdpbnQ2NCBzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0IGVzdGltYXRlZF90b3RhbCk7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZSAgIChHc3RRdWVyeSAqcXVlcnksIEdzdEZvcm1hdCAqZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICpzdGFydCwgZ2ludDY0ICpzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICplc3RpbWF0ZWRfdG90YWwpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCk7Ci1ndWludCAgICAgICAgICAgZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMgICAgKEdzdFF1ZXJ5ICpxdWVyeSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UgKEdzdFF1ZXJ5ICpxdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5kZXgsIGdpbnQ2NCAqc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAqc3RvcCk7Ci0KLS8qIFVSSSBxdWVyeSAqLwotR3N0UXVlcnkgKiAgICAgIGdzdF9xdWVyeV9uZXdfdXJpICAgICAgICAgICAgICAgICAgICAodm9pZCkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfdXJpICAgICAgICAgICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2NoYXIgKip1cmkpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpICAgICAgICAgICAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBjb25zdCBnY2hhciAqdXJpKTsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfdXJpX3JlZGlyZWN0aW9uICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2NoYXIgKip1cmkpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBjb25zdCBnY2hhciAqdXJpKTsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfdXJpX3JlZGlyZWN0aW9uX3Blcm1hbmVudCAoR3N0UXVlcnkgKnF1ZXJ5LCBnYm9vbGVhbiAqIHBlcm1hbmVudCk7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50IChHc3RRdWVyeSAqcXVlcnksIGdib29sZWFuIHBlcm1hbmVudCk7Ci0KLS8qIGFsbG9jYXRpb24gcXVlcnkgKi8KLUdzdFF1ZXJ5ICogICAgICBnc3RfcXVlcnlfbmV3X2FsbG9jYXRpb24gICAgICAgICAgICAgKEdzdENhcHMgKmNhcHMsIGdib29sZWFuIG5lZWRfcG9vbCkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbiAgICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Q2FwcyAqKmNhcHMsIGdib29sZWFuICpuZWVkX3Bvb2wpOwotCi0vKiBwb29scyAqLwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wb29sICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RCdWZmZXJQb29sICpwb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgc2l6ZSwgZ3VpbnQgbWluX2J1ZmZlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBtYXhfYnVmZmVycyk7Ci1ndWludCAgICAgICAgICAgZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgICAgIChHc3RRdWVyeSAqcXVlcnkpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sICAoR3N0UXVlcnkgKnF1ZXJ5LCBndWludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlclBvb2wgKipwb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgKnNpemUsIGd1aW50ICptaW5fYnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICptYXhfYnVmZmVycyk7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wb29sICAgIChHc3RRdWVyeSAqcXVlcnksIGd1aW50IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyUG9vbCAqcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNpemUsIGd1aW50IG1pbl9idWZmZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbWF4X2J1ZmZlcnMpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcG9vbCAoR3N0UXVlcnkgKnF1ZXJ5LCBndWludCBpbmRleCk7Ci0KLS8qIGFsbG9jYXRvcnMgKi8KLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcGFyYW0gICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0QWxsb2NhdG9yICphbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RBbGxvY2F0aW9uUGFyYW1zICpwYXJhbXMpOwotZ3VpbnQgICAgICAgICAgIGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3BhcmFtcyAgICAoR3N0UXVlcnkgKnF1ZXJ5KTsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW0gKEdzdFF1ZXJ5ICpxdWVyeSwgZ3VpbnQgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBbGxvY2F0b3IgKiphbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBbGxvY2F0aW9uUGFyYW1zICpwYXJhbXMpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcGFyYW0gICAoR3N0UXVlcnkgKnF1ZXJ5LCBndWludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0QWxsb2NhdGlvblBhcmFtcyAqcGFyYW1zKTsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcmVtb3ZlX250aF9hbGxvY2F0aW9uX3BhcmFtIChHc3RRdWVyeSAqcXVlcnksIGd1aW50IGluZGV4KTsKLQotLyogbWV0YWRhdGEgKi8KLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YSAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR1R5cGUgYXBpLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKnBhcmFtcyk7Ci1ndWludCAgICAgICAgICAgZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fbWV0YXMgICAgIChHc3RRdWVyeSAqcXVlcnkpOwotR1R5cGUgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhICAoR3N0UXVlcnkgKnF1ZXJ5LCBndWludCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqKnBhcmFtcyk7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9tZXRhIChHc3RRdWVyeSAqcXVlcnksIGd1aW50IGluZGV4KTsKLWdib29sZWFuICAgICAgICBnc3RfcXVlcnlfZmluZF9hbGxvY2F0aW9uX21ldGEgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR1R5cGUgYXBpLCBndWludCAqaW5kZXgpOwotCi0KLS8qIHNjaGVkdWxpbmcgcXVlcnkgKi8KLS8qKgotICogR3N0U2NoZWR1bGluZ0ZsYWdzOgotICogQEdTVF9TQ0hFRFVMSU5HX0ZMQUdfU0VFS0FCTEU6IGlmIHNlZWtpbmcgaXMgcG9zc2libGUKLSAqIEBHU1RfU0NIRURVTElOR19GTEFHX1NFUVVFTlRJQUw6IGlmIHNlcXVlbnRpYWwgYWNjZXNzIGlzIHJlY29tbWVuZGVkCi0gKiBAR1NUX1NDSEVEVUxJTkdfRkxBR19CQU5EV0lEVEhfTElNSVRFRDogaWYgYmFuZHdpZHRoIGlzIGxpbWl0ZWQgYW5kIGJ1ZmZlcmluZyBwb3NzaWJsZSAoc2luY2UgMS4yKQotICoKLSAqIFRoZSBkaWZmZXJlbnQgc2NoZWR1bGluZyBmbGFncy4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1NDSEVEVUxJTkdfRkxBR19TRUVLQUJMRSAgICAgICAgICA9ICgxIDw8IDApLAotICBHU1RfU0NIRURVTElOR19GTEFHX1NFUVVFTlRJQUwgICAgICAgID0gKDEgPDwgMSksCi0gIEdTVF9TQ0hFRFVMSU5HX0ZMQUdfQkFORFdJRFRIX0xJTUlURUQgPSAoMSA8PCAyKQotfSBHc3RTY2hlZHVsaW5nRmxhZ3M7Ci0KLUdzdFF1ZXJ5ICogICAgICBnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcgICAgICAgICAgKHZvaWQpIEdfR05VQ19NQUxMT0M7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0U2NoZWR1bGluZ0ZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBtaW5zaXplLCBnaW50IG1heHNpemUsIGdpbnQgYWxpZ24pOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RTY2hlZHVsaW5nRmxhZ3MgKmZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqbWluc2l6ZSwgZ2ludCAqbWF4c2l6ZSwgZ2ludCAqYWxpZ24pOwotCi12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGUgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0UGFkTW9kZSBtb2RlKTsKLWd1aW50ICAgICAgICAgICBnc3RfcXVlcnlfZ2V0X25fc2NoZWR1bGluZ19tb2RlcyAgICAoR3N0UXVlcnkgKnF1ZXJ5KTsKLUdzdFBhZE1vZGUgICAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX3NjaGVkdWxpbmdfbW9kZSAoR3N0UXVlcnkgKnF1ZXJ5LCBndWludCBpbmRleCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGUgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0UGFkTW9kZSBtb2RlKTsKLWdib29sZWFuICAgICAgICBnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzIChHc3RRdWVyeSAqIHF1ZXJ5LCBHc3RQYWRNb2RlIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2NoZWR1bGluZ0ZsYWdzIGZsYWdzKTsKLQotLyogYWNjZXB0LWNhcHMgcXVlcnkgKi8KLUdzdFF1ZXJ5ICogICAgICBnc3RfcXVlcnlfbmV3X2FjY2VwdF9jYXBzICAgICAgICAgIChHc3RDYXBzICpjYXBzKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2FwcyAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Q2FwcyAqKmNhcHMpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfYWNjZXB0X2NhcHNfcmVzdWx0ICAgKEdzdFF1ZXJ5ICpxdWVyeSwgZ2Jvb2xlYW4gcmVzdWx0KTsKLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHNfcmVzdWx0IChHc3RRdWVyeSAqcXVlcnksIGdib29sZWFuICpyZXN1bHQpOwotCi0vKiBjYXBzIHF1ZXJ5ICovCi1Hc3RRdWVyeSAqICAgICAgZ3N0X3F1ZXJ5X25ld19jYXBzICAgICAgICAgICAgICAgICAoR3N0Q2FwcyAqZmlsdGVyKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzICAgICAgICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Q2FwcyAqKmZpbHRlcik7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0ICAgICAgICAgIChHc3RRdWVyeSAqcXVlcnksIEdzdENhcHMgKmNhcHMpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzX3Jlc3VsdCAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Q2FwcyAqKmNhcHMpOwotCi0vKiBkcmFpbiBxdWVyeSAqLwotR3N0UXVlcnkgKiAgICAgIGdzdF9xdWVyeV9uZXdfZHJhaW4gICAgICAgICAgICAgICAgKHZvaWQpIEdfR05VQ19NQUxMT0M7Ci0KLS8qIGNvbnRleHQgcXVlcnkgKi8KLUdzdFF1ZXJ5ICogICAgICBnc3RfcXVlcnlfbmV3X2NvbnRleHQgICAgICAgICAgICAgIChjb25zdCBnY2hhciAqIGNvbnRleHRfdHlwZSkgR19HTlVDX01BTExPQzsKLWdib29sZWFuICAgICAgICBnc3RfcXVlcnlfcGFyc2VfY29udGV4dF90eXBlICAgICAgIChHc3RRdWVyeSAqIHF1ZXJ5LCBjb25zdCBnY2hhciAqKiBjb250ZXh0X3R5cGUpOwotdm9pZCAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfY29udGV4dCAgICAgICAgICAgICAgKEdzdFF1ZXJ5ICpxdWVyeSwgR3N0Q29udGV4dCAqY29udGV4dCk7Ci12b2lkICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnRleHQgICAgICAgICAgICAoR3N0UXVlcnkgKnF1ZXJ5LCBHc3RDb250ZXh0ICoqY29udGV4dCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0UXVlcnksIGdzdF9xdWVyeV91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUVVFUllfSF9fICovCi0KZGlmZiAtLWdpdCBhL2dzdC9nc3RyZWdpc3RyeS5jIGIvZ3N0L2dzdHJlZ2lzdHJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MWUzMWMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHJlZ2lzdHJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODc5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIGdzdHJlZ2lzdHJ5LmM6IGhhbmRsZSByZWdpc3RyeQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RyZWdpc3RyeQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBtYW5hZ2VtZW50IG9mICNHc3RQbHVnaW4gb2JqZWN0cwotICogQHNlZV9hbHNvOiAjR3N0UGx1Z2luLCAjR3N0UGx1Z2luRmVhdHVyZQotICoKLSAqIE9uZSByZWdpc3RyeSBob2xkcyB0aGUgbWV0YWRhdGEgb2YgYSBzZXQgb2YgcGx1Z2lucy4KLSAqCi0gKiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+RGVzaWduOjwvZW1waGFzaXM+Ci0gKgotICogVGhlICNHc3RSZWdpc3RyeSBvYmplY3QgaXMgYSBsaXN0IG9mIHBsdWdpbnMgYW5kIHNvbWUgZnVuY3Rpb25zIGZvciBkZWFsaW5nCi0gKiB3aXRoIHRoZW0uIEVhY2ggI0dzdFBsdWdpbiBpcyBtYXRjaGVkIDEtMSB3aXRoIGEgZmlsZSBvbiBkaXNrLCBhbmQgbWF5IG9yIG1heQotICogbm90IGJlIGxvYWRlZCBhdCBhIGdpdmVuIHRpbWUuCi0gKgotICogVGhlIHByaW1hcnkgc291cmNlLCBhdCBhbGwgdGltZXMsIG9mIHBsdWdpbiBpbmZvcm1hdGlvbiBpcyBlYWNoIHBsdWdpbiBmaWxlCi0gKiBpdHNlbGYuIFRodXMsIGlmIGFuIGFwcGxpY2F0aW9uIHdhbnRzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBwbHVnaW4sCi0gKiBvciB3YW50cyB0byBzZWFyY2ggZm9yIGEgZmVhdHVyZSB0aGF0IHNhdGlzZmllcyBnaXZlbiBjcml0ZXJpYSwgdGhlIHByaW1hcnkKLSAqIG1lYW5zIG9mIGRvaW5nIHNvIGlzIHRvIGxvYWQgZXZlcnkgcGx1Z2luIGFuZCBsb29rIGF0IHRoZSByZXN1bHRpbmcKLSAqIGluZm9ybWF0aW9uIHRoYXQgaXMgZ2F0aGVyZWQgaW4gdGhlIGRlZmF1bHQgcmVnaXN0cnkuIENsZWFybHksIHRoaXMgaXMgYSB0aW1lCi0gKiBjb25zdW1pbmcgcHJvY2Vzcywgc28gd2UgY2FjaGUgaW5mb3JtYXRpb24gaW4gdGhlIHJlZ2lzdHJ5IGZpbGUuIFRoZSBmb3JtYXQKLSAqIGFuZCBsb2NhdGlvbiBvZiB0aGUgY2FjaGUgZmlsZSBpcyBpbnRlcm5hbCB0byBnc3RyZWFtZXIuCi0gKgotICogT24gc3RhcnR1cCwgcGx1Z2lucyBhcmUgc2VhcmNoZWQgZm9yIGluIHRoZSBwbHVnaW4gc2VhcmNoIHBhdGguIFRoZSBmb2xsb3dpbmcKLSAqIGxvY2F0aW9ucyBhcmUgY2hlY2tlZCBpbiB0aGlzIG9yZGVyOgotICogPGl0ZW1pemVkbGlzdD4KLSAqICAgPGxpc3RpdGVtPgotICogICAgIDxwYXJhPmxvY2F0aW9uIGZyb20gLS1nc3QtcGx1Z2luLXBhdGggY29tbWFuZGxpbmUgb3B0aW9uLjwvcGFyYT4KLSAqICAgPC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPgotICogICAgIDxwYXJhPnRoZSBHU1RfUExVR0lOX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuPC9wYXJhPgotICogICA8L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+Ci0gKiAgICAgPHBhcmE+dGhlIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuPC9wYXJhPgotICogICA8L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+Ci0gKiAgICAgPHBhcmE+ZGVmYXVsdCBsb2NhdGlvbnMgKGlmIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEggaXMgbm90IHNldCkuIFRob3NlCi0gKiAgICAgICBkZWZhdWx0IGxvY2F0aW9ucyBhcmU6Ci0gKiAgICAgICA8ZmlsZW5hbWU+JFhER19EQVRBX0hPTUUvZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT04vcGx1Z2lucy88L2ZpbGVuYW1lPgotICogICAgICAgYW5kIDxmaWxlbmFtZT4kcHJlZml4L2xpYnMvZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT04vPC9maWxlbmFtZT4uCi0gKiAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vc3RhbmRhcmRzLmZyZWVkZXNrdG9wLm9yZy9iYXNlZGlyLXNwZWMvYmFzZWRpci1zcGVjLWxhdGVzdC5odG1sIj4KLSAqICAgICAgIDxmaWxlbmFtZT4kWERHX0RBVEFfSE9NRTwvZmlsZW5hbWU+PC91bGluaz4gZGVmYXVsdHMgdG8KLSAqICAgICAgIDxmaWxlbmFtZT4kSE9NRS8ubG9jYWwvc2hhcmU8L2ZpbGVuYW1lPi4KLSAqICAgICA8L3BhcmE+Ci0gKiAgIDwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqIFRoZSByZWdpc3RyeSBjYWNoZSBmaWxlIGlzIGxvYWRlZCBmcm9tCi0gKiA8ZmlsZW5hbWU+JFhER19DQUNIRV9IT01FL2dzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OL3JlZ2lzdHJ5LSRBUkNILmJpbjwvZmlsZW5hbWU+Ci0gKiAod2hlcmUKLSAqIDx1bGluayB1cmw9Imh0dHA6Ly9zdGFuZGFyZHMuZnJlZWRlc2t0b3Aub3JnL2Jhc2VkaXItc3BlYy9iYXNlZGlyLXNwZWMtbGF0ZXN0Lmh0bWwiPgotICogPGZpbGVuYW1lPiRYREdfQ0FDSEVfSE9NRTwvZmlsZW5hbWU+PC91bGluaz4gZGVmYXVsdHMgdG8KLSAqIDxmaWxlbmFtZT4kSE9NRS8uY2FjaGU8L2ZpbGVuYW1lPikgb3IgdGhlIGZpbGUgbGlzdGVkIGluIHRoZSBHU1RfUkVHSVNUUlkKLSAqIGVudiB2YXIuIE9uZSByZWFzb24gdG8gY2hhbmdlIHRoZSByZWdpc3RyeSBsb2NhdGlvbiBpcyBmb3IgdGVzdGluZy4KLSAqCi0gKiBGb3IgZWFjaCBwbHVnaW4gdGhhdCBpcyBmb3VuZCBpbiB0aGUgcGx1Z2luIHNlYXJjaCBwYXRoLCB0aGVyZSBjb3VsZCBiZSAzCi0gKiBwb3NzaWJpbGl0aWVzIGZvciBjYWNoZWQgaW5mb3JtYXRpb246Ci0gKiA8aXRlbWl6ZWRsaXN0PgotICogICA8bGlzdGl0ZW0+Ci0gKiAgICAgPHBhcmE+dGhlIGNhY2hlIG1heSBub3QgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBhIGdpdmVuIGZpbGUuPC9wYXJhPgotICogICA8L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+Ci0gKiAgICAgPHBhcmE+dGhlIGNhY2hlIG1heSBoYXZlIHN0YWxlIGluZm9ybWF0aW9uLjwvcGFyYT4KLSAqICAgPC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPgotICogICAgIDxwYXJhPnRoZSBjYWNoZSBtYXkgaGF2ZSBjdXJyZW50IGluZm9ybWF0aW9uLjwvcGFyYT4KLSAqICAgPC9saXN0aXRlbT4KLSAqIDwvaXRlbWl6ZWRsaXN0PgotICoKLSAqIEluIHRoZSBmaXJzdCB0d28gY2FzZXMsIHRoZSBwbHVnaW4gaXMgbG9hZGVkIGFuZCB0aGUgY2FjaGUgdXBkYXRlZC4gSW4KLSAqIGFkZGl0aW9uIHRvIHRoZXNlIGNhc2VzLCB0aGUgY2FjaGUgbWF5IGhhdmUgZW50cmllcyBmb3IgcGx1Z2lucyB0aGF0IGFyZSBub3QKLSAqIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuIFRoZXNlIGFyZSBtYXJrZWQgYXMgbm90IGF2YWlsYWJsZSB0byB0aGUKLSAqIGN1cnJlbnQgcHJvY2Vzcy4gSWYgdGhlIGNhY2hlIGlzIHVwZGF0ZWQgZm9yIHdoYXRldmVyIHJlYXNvbiwgaXQgaXMgbWFya2VkCi0gKiBkaXJ0eS4KLSAqCi0gKiBBIGRpcnR5IGNhY2hlIGlzIHdyaXR0ZW4gb3V0IGF0IHRoZSBlbmQgb2YgaW5pdGlhbGl6YXRpb24uIEVhY2ggZW50cnkgaXMKLSAqIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoZSBpbmZvcm1hdGlvbiBpcyBtaW5pbWFsbHkgdmFsaWQuIElmIG5vdCwgdGhlIGVudHJ5IGlzCi0gKiBzaW1wbHkgZHJvcHBlZC4KLSAqCi0gKiA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+SW1wbGVtZW50YXRpb24gbm90ZXM6PC9lbXBoYXNpcz4KLSAqCi0gKiBUaGUgImNhY2hlIiBhbmQgInJlZ2lzdHJ5IiBhcmUgZGlmZmVyZW50IGNvbmNlcHRzIGFuZCBjYW4gcmVwcmVzZW50Ci0gKiBkaWZmZXJlbnQgc2V0cyBvZiBwbHVnaW5zLiBGb3IgdmFyaW91cyByZWFzb25zLCBhdCBpbml0IHRpbWUsIHRoZSBjYWNoZSBpcwotICogc3RvcmVkIGluIHRoZSBkZWZhdWx0IHJlZ2lzdHJ5LCBhbmQgcGx1Z2lucyBub3QgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQKLSAqIHByb2Nlc3MgYXJlIG1hcmtlZCB3aXRoIHRoZSAlR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRCBiaXQuIFRoZXNlIHBsdWdpbnMgYXJlCi0gKiByZW1vdmVkIGF0IHRoZSBlbmQgb2YgaW5pdGlhbGl6YXRpb24uCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgImdzdGNvbmZpZy5oIgotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKiBGb3IgZ19zdGF0ICgpICovCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLQotI2luY2x1ZGUgImdzdGluZm8uaCIKLSNpbmNsdWRlICJnc3RlcnJvci5oIgotI2luY2x1ZGUgImdzdHJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiZ3N0ZGV2aWNlcHJvdmlkZXJmYWN0b3J5LmgiCi0KLSNpbmNsdWRlICJnc3RwbHVnaW5sb2FkZXIuaCIKLQotI2luY2x1ZGUgImdzdC1pMThuLWxpYi5oIgotCi0jaW5jbHVkZSAiZ3N0LmgiCi0jaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLWV4dGVybiBITU9EVUxFIF9wcml2X2dzdF9kbGxfaGFuZGxlOwotI2VuZGlmCi0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIEdTVF9DQVRfUkVHSVNUUlkKLQotc3RydWN0IF9Hc3RSZWdpc3RyeVByaXZhdGUKLXsKLSAgR0xpc3QgKnBsdWdpbnM7Ci0gIEdMaXN0ICpmZWF0dXJlczsKLQotICBndWludCBuX3BsdWdpbnM7Ci0jaWYgMAotICBHTGlzdCAqcGF0aHM7Ci0jZW5kaWYKLQotICBpbnQgY2FjaGVfZmlsZTsKLQotICAvKiBoYXNoIHRvIHNwZWVkdXAgX2xvb2t1cF9mZWF0dXJlX2xvY2tlZCgpICovCi0gIEdIYXNoVGFibGUgKmZlYXR1cmVfaGFzaDsKLSAgLyogaGFzaCB0byBzcGVlZHVwIF9sb29rdXAgKi8KLSAgR0hhc2hUYWJsZSAqYmFzZW5hbWVfaGFzaDsKLQotICAvKiB1cGRhdGVkIHdoZW5ldmVyIHRoZSBmZWF0dXJlIGxpc3QgY2hhbmdlcyAqLwotICBndWludDMyIGNvb2tpZTsKLSAgLyogc3BlZWR1cCBmb3Igc2VhcmNoaW5nIGZlYXR1cmVzICovCi0gIEdMaXN0ICplbGVtZW50X2ZhY3RvcnlfbGlzdDsKLSAgZ3VpbnQzMiBlZmxfY29va2llOwotICBHTGlzdCAqdHlwZWZpbmRfZmFjdG9yeV9saXN0OwotICBndWludDMyIHRmbF9jb29raWU7Ci0gIEdMaXN0ICpkZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9saXN0OwotICBndWludDMyIGRtZmxfY29va2llOwotfTsKLQotLyogdGhlIG9uZSBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCByZWdpc3RyeSBhbmQgdGhlIG11dGV4IHByb3RlY3RpbmcgdGhlCi0gKiB2YXJpYWJsZS4gKi8KLXN0YXRpYyBHTXV0ZXggX2dzdF9yZWdpc3RyeV9tdXRleDsKLXN0YXRpYyBHc3RSZWdpc3RyeSAqX2dzdF9yZWdpc3RyeV9kZWZhdWx0ID0gTlVMTDsKLQotLyogZGVmYXVsdHMgKi8KLSNkZWZpbmUgREVGQVVMVF9GT1JLIFRSVUUKLQotLyogY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIHJlZ2lzdHJ5IHJlYnVpbGQgKi8KLXN0YXRpYyBnYm9vbGVhbiBfZ3N0X2VuYWJsZV9yZWdpc3RyeV9mb3JrID0gREVGQVVMVF9GT1JLOwotLyogTGlzdCBvZiBwbHVnaW5zIHRoYXQgbmVlZCBwcmVsb2FkaW5nL3JlbG9hZGluZyBhZnRlciBzY2FubmluZyByZWdpc3RyeSAqLwotZXh0ZXJuIEdTTGlzdCAqX3ByaXZfZ3N0X3ByZWxvYWRfcGx1Z2luczsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9SRUdJU1RSWQotLypzZXQgdG8gVFJVRSB3aGVuIHJlZ2lzdHJ5IG5lZWRuJ3QgdG8gYmUgdXBkYXRlZCAqLwotZ2Jvb2xlYW4gX3ByaXZfZ3N0X2Rpc2FibGVfcmVnaXN0cnlfdXBkYXRlID0gRkFMU0U7Ci1leHRlcm4gR0xpc3QgKl9wcml2X2dzdF9wbHVnaW5fcGF0aHM7Ci0KLS8qIFNldCB0byBUUlVFIHdoZW4gdGhlIHJlZ2lzdHJ5IGNhY2hlIHNob3VsZCBiZSBkaXNhYmxlZCAqLwotZ2Jvb2xlYW4gX2dzdF9kaXNhYmxlX3JlZ2lzdHJ5X2NhY2hlID0gRkFMU0U7Ci0KLXN0YXRpYyBnYm9vbGVhbiBfX3JlZ2lzdHJ5X3JldXNlX3BsdWdpbl9zY2FubmVyID0gVFJVRTsKLSNlbmRpZgotCi0vKiBFbGVtZW50IHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgUExVR0lOX0FEREVELAotICBGRUFUVVJFX0FEREVELAotICBMQVNUX1NJR05BTAotfTsKLQotc3RhdGljIHZvaWQgZ3N0X3JlZ2lzdHJ5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGd1aW50IGdzdF9yZWdpc3RyeV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi1zdGF0aWMgR3N0UGx1Z2luRmVhdHVyZSAqZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlX2xvY2tlZCAoR3N0UmVnaXN0cnkgKgotICAgIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpuYW1lKTsKLXN0YXRpYyBHc3RQbHVnaW4gKmdzdF9yZWdpc3RyeV9sb29rdXBfYm5fbG9ja2VkIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LAotICAgIGNvbnN0IGNoYXIgKmJhc2VuYW1lKTsKLQotI2RlZmluZSBnc3RfcmVnaXN0cnlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UmVnaXN0cnksIGdzdF9yZWdpc3RyeSwgR1NUX1RZUEVfT0JKRUNUKTsKLQotc3RhdGljIHZvaWQKLWdzdF9yZWdpc3RyeV9jbGFzc19pbml0IChHc3RSZWdpc3RyeUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdFJlZ2lzdHJ5UHJpdmF0ZSkpOwotCi0gIC8qKgotICAgKiBHc3RSZWdpc3RyeTo6cGx1Z2luLWFkZGVkOgotICAgKiBAcmVnaXN0cnk6IHRoZSByZWdpc3RyeSB0aGF0IGVtaXR0ZWQgdGhlIHNpZ25hbAotICAgKiBAcGx1Z2luOiB0aGUgcGx1Z2luIHRoYXQgaGFzIGJlZW4gYWRkZWQKLSAgICoKLSAgICogU2lnbmFscyB0aGF0IGEgcGx1Z2luIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSByZWdpc3RyeSAocG9zc2libHkKLSAgICogcmVwbGFjaW5nIGEgcHJldmlvdXNseS1hZGRlZCBvbmUgYnkgdGhlIHNhbWUgbmFtZSkKLSAgICovCi0gIGdzdF9yZWdpc3RyeV9zaWduYWxzW1BMVUdJTl9BRERFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicGx1Z2luLWFkZGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCAwLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywKLSAgICAgIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9QTFVHSU4pOwotCi0gIC8qKgotICAgKiBHc3RSZWdpc3RyeTo6ZmVhdHVyZS1hZGRlZDoKLSAgICogQHJlZ2lzdHJ5OiB0aGUgcmVnaXN0cnkgdGhhdCBlbWl0dGVkIHRoZSBzaWduYWwKLSAgICogQGZlYXR1cmU6IHRoZSBmZWF0dXJlIHRoYXQgaGFzIGJlZW4gYWRkZWQKLSAgICoKLSAgICogU2lnbmFscyB0aGF0IGEgZmVhdHVyZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcmVnaXN0cnkgKHBvc3NpYmx5Ci0gICAqIHJlcGxhY2luZyBhIHByZXZpb3VzbHktYWRkZWQgb25lIGJ5IHRoZSBzYW1lIG5hbWUpCi0gICAqLwotICBnc3RfcmVnaXN0cnlfc2lnbmFsc1tGRUFUVVJFX0FEREVEXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJmZWF0dXJlLWFkZGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCAwLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywKLSAgICAgIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9QTFVHSU5fRkVBVFVSRSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcmVnaXN0cnlfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcmVnaXN0cnlfaW5pdCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSkKLXsKLSAgcmVnaXN0cnktPnByaXYgPQotICAgICAgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChyZWdpc3RyeSwgR1NUX1RZUEVfUkVHSVNUUlksCi0gICAgICBHc3RSZWdpc3RyeVByaXZhdGUpOwotICByZWdpc3RyeS0+cHJpdi0+ZmVhdHVyZV9oYXNoID0gZ19oYXNoX3RhYmxlX25ldyAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOwotICByZWdpc3RyeS0+cHJpdi0+YmFzZW5hbWVfaGFzaCA9IGdfaGFzaF90YWJsZV9uZXcgKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZWdpc3RyeV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5ID0gR1NUX1JFR0lTVFJZIChvYmplY3QpOwotICBHTGlzdCAqcGx1Z2lucywgKnA7Ci0gIEdMaXN0ICpmZWF0dXJlcywgKmY7Ci0KLSAgcGx1Z2lucyA9IHJlZ2lzdHJ5LT5wcml2LT5wbHVnaW5zOwotICByZWdpc3RyeS0+cHJpdi0+cGx1Z2lucyA9IE5VTEw7Ci0gIHJlZ2lzdHJ5LT5wcml2LT5uX3BsdWdpbnMgPSAwOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJlZ2lzdHJ5LCAicmVnaXN0cnkgZmluYWxpemUiKTsKLSAgcCA9IHBsdWdpbnM7Ci0gIHdoaWxlIChwKSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW4gPSBwLT5kYXRhOwotCi0gICAgaWYgKHBsdWdpbikgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHJlZ2lzdHJ5LCAicmVtb3ZpbmcgcGx1Z2luICVzIiwKLSAgICAgICAgICBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7Ci0gICAgfQotICAgIHAgPSBnX2xpc3RfbmV4dCAocCk7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKHBsdWdpbnMpOwotCi0gIGZlYXR1cmVzID0gcmVnaXN0cnktPnByaXYtPmZlYXR1cmVzOwotICByZWdpc3RyeS0+cHJpdi0+ZmVhdHVyZXMgPSBOVUxMOwotCi0gIGYgPSBmZWF0dXJlczsKLSAgd2hpbGUgKGYpIHsKLSAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0gZi0+ZGF0YTsKLQotICAgIGlmIChmZWF0dXJlKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocmVnaXN0cnksICJyZW1vdmluZyBmZWF0dXJlICVwICglcykiLCBmZWF0dXJlLAotICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOwotICAgICAgZ3N0X29iamVjdF91bnBhcmVudCAoR1NUX09CSkVDVF9DQVNUIChmZWF0dXJlKSk7Ci0gICAgfQotICAgIGYgPSBnX2xpc3RfbmV4dCAoZik7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKGZlYXR1cmVzKTsKLQotICBnX2hhc2hfdGFibGVfZGVzdHJveSAocmVnaXN0cnktPnByaXYtPmZlYXR1cmVfaGFzaCk7Ci0gIHJlZ2lzdHJ5LT5wcml2LT5mZWF0dXJlX2hhc2ggPSBOVUxMOwotICBnX2hhc2hfdGFibGVfZGVzdHJveSAocmVnaXN0cnktPnByaXYtPmJhc2VuYW1lX2hhc2gpOwotICByZWdpc3RyeS0+cHJpdi0+YmFzZW5hbWVfaGFzaCA9IE5VTEw7Ci0KLSAgaWYgKHJlZ2lzdHJ5LT5wcml2LT5lbGVtZW50X2ZhY3RvcnlfbGlzdCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJlZ2lzdHJ5LCAiQ2xlYW5pbmcgdXAgY2FjaGVkIGVsZW1lbnQgZmFjdG9yeSBsaXN0Iik7Ci0gICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAocmVnaXN0cnktPnByaXYtPmVsZW1lbnRfZmFjdG9yeV9saXN0KTsKLSAgfQotCi0gIGlmIChyZWdpc3RyeS0+cHJpdi0+dHlwZWZpbmRfZmFjdG9yeV9saXN0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocmVnaXN0cnksICJDbGVhbmluZyB1cCBjYWNoZWQgdHlwZWZpbmQgZmFjdG9yeSBsaXN0Iik7Ci0gICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAocmVnaXN0cnktPnByaXYtPnR5cGVmaW5kX2ZhY3RvcnlfbGlzdCk7Ci0gIH0KLQotICBpZiAocmVnaXN0cnktPnByaXYtPmRldmljZV9wcm92aWRlcl9mYWN0b3J5X2xpc3QpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwKLSAgICAgICAgIkNsZWFuaW5nIHVwIGNhY2hlZCBkZXZpY2UgcHJvdmlkZXIgZmFjdG9yeSBsaXN0Iik7Ci0gICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAocmVnaXN0cnktPnByaXYtPmRldmljZV9wcm92aWRlcl9mYWN0b3J5X2xpc3QpOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9nZXQ6Ci0gKgotICogUmV0cmlldmVzIHRoZSBzaW5nbGV0b24gcGx1Z2luIHJlZ2lzdHJ5LiBUaGUgY2FsbGVyIGRvZXMgbm90IG93biBhCi0gKiByZWZlcmVuY2Ugb24gdGhlIHJlZ2lzdHJ5LCBhcyBpdCBpcyBhbGl2ZSBhcyBsb25nIGFzIEdTdHJlYW1lciBpcwotICogaW5pdGlhbGl6ZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdFJlZ2lzdHJ5LgotICovCi1Hc3RSZWdpc3RyeSAqCi1nc3RfcmVnaXN0cnlfZ2V0ICh2b2lkKQotewotICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7Ci0KLSAgZ19tdXRleF9sb2NrICgmX2dzdF9yZWdpc3RyeV9tdXRleCk7Ci0gIGlmIChHX1VOTElLRUxZICghX2dzdF9yZWdpc3RyeV9kZWZhdWx0KSkgewotICAgIF9nc3RfcmVnaXN0cnlfZGVmYXVsdCA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1JFR0lTVFJZLCAwLCBOVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rIChHU1RfT0JKRUNUX0NBU1QgKF9nc3RfcmVnaXN0cnlfZGVmYXVsdCkpOwotICB9Ci0gIHJlZ2lzdHJ5ID0gX2dzdF9yZWdpc3RyeV9kZWZhdWx0OwotICBnX211dGV4X3VubG9jayAoJl9nc3RfcmVnaXN0cnlfbXV0ZXgpOwotCi0gIHJldHVybiByZWdpc3RyeTsKLX0KLQotI2lmIDAKLS8qKgotICogZ3N0X3JlZ2lzdHJ5X2FkZF9wYXRoOgotICogQHJlZ2lzdHJ5OiB0aGUgcmVnaXN0cnkgdG8gYWRkIHRoZSBwYXRoIHRvCi0gKiBAcGF0aDogdGhlIHBhdGggdG8gYWRkIHRvIHRoZSByZWdpc3RyeQotICoKLSAqIEFkZCB0aGUgZ2l2ZW4gcGF0aCB0byB0aGUgcmVnaXN0cnkuIFRoZSBzeW50YXggb2YgdGhlCi0gKiBwYXRoIGlzIHNwZWNpZmljIHRvIHRoZSByZWdpc3RyeS4gSWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbgotICogYWRkZWQsIGRvIG5vdGhpbmcuCi0gKi8KLXZvaWQKLWdzdF9yZWdpc3RyeV9hZGRfcGF0aCAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgY29uc3QgZ2NoYXIgKiBwYXRoKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHBhdGggIT0gTlVMTCk7Ci0KLSAgaWYgKHN0cmxlbiAocGF0aCkgPT0gMCkKLSAgICBnb3RvIGVtcHR5X3BhdGg7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7Ci0gIGlmIChnX2xpc3RfZmluZF9jdXN0b20gKHJlZ2lzdHJ5LT5wcml2LT5wYXRocywgcGF0aCwgKEdDb21wYXJlRnVuYykgc3RyY21wKSkKLSAgICBnb3RvIHdhc19hZGRlZDsKLQotICBHU1RfSU5GTyAoIkFkZGluZyBwbHVnaW4gcGF0aDogXCIlc1wiIiwgcGF0aCk7Ci0gIHJlZ2lzdHJ5LT5wcml2LT5wYXRocyA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChyZWdpc3RyeS0+cHJpdi0+cGF0aHMsIGdfc3RyZHVwIChwYXRoKSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7Ci0KLSAgcmV0dXJuOwotCi1lbXB0eV9wYXRoOgotICB7Ci0gICAgR1NUX0lORk8gKCJJZ25vcmluZyBlbXB0eSBwbHVnaW4gcGF0aCIpOwotICAgIHJldHVybjsKLSAgfQotd2FzX2FkZGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicGF0aCAlcyBhbHJlYWR5IGFkZGVkIHRvIHJlZ2lzdHJ5IiwgcGF0aCk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdDoKLSAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIGdldCB0aGUgcGF0aGxpc3Qgb2YKLSAqCi0gKiBHZXQgdGhlIGxpc3Qgb2YgcGF0aHMgZm9yIHRoZSBnaXZlbiByZWdpc3RyeS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgY29udGFpbmVyKSAoZWxlbWVudC10eXBlIGNoYXIqKTogQSAjR0xpc3Qgb2YgcGF0aHMgYXMKLSAqICAgICBzdHJpbmdzLiBnX2xpc3RfZnJlZSBhZnRlciB1c2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR0xpc3QgKgotZ3N0X3JlZ2lzdHJ5X2dldF9wYXRoX2xpc3QgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnkpCi17Ci0gIEdMaXN0ICpsaXN0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7Ci0gIC8qIFdlIGRvbid0IG5lZWQgdG8gY29weSB0aGUgc3RyaW5ncywgYmVjYXVzZSB0aGV5IHdvbid0IGJlIGRlbGV0ZWQKLSAgICogYXMgbG9uZyBhcyB0aGUgR3N0UmVnaXN0cnkgaXMgYXJvdW5kICovCi0gIGxpc3QgPSBnX2xpc3RfY29weSAocmVnaXN0cnktPnByaXYtPnBhdGhzKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKLQotICByZXR1cm4gbGlzdDsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luOgotICogQHJlZ2lzdHJ5OiB0aGUgcmVnaXN0cnkgdG8gYWRkIHRoZSBwbHVnaW4gdG8KLSAqIEBwbHVnaW46ICh0cmFuc2ZlciBmdWxsKTogdGhlIHBsdWdpbiB0byBhZGQKLSAqCi0gKiBBZGQgdGhlIHBsdWdpbiB0byB0aGUgcmVnaXN0cnkuIFRoZSBwbHVnaW4tYWRkZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZC4KLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzaW5rIEBwbHVnaW4uCi0gKgotICogUmV0dXJuczogJVRSVUUgb24gc3VjY2Vzcy4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1nYm9vbGVhbgotZ3N0X3JlZ2lzdHJ5X2FkZF9wbHVnaW4gKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR3N0UGx1Z2luICpleGlzdGluZ19wbHVnaW47Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUExVR0lOIChwbHVnaW4pLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7Ci0gIGlmIChHX0xJS0VMWSAocGx1Z2luLT5iYXNlbmFtZSkpIHsKLSAgICAvKiB3ZSBoYXZlIGEgYmFzZW5hbWUsIHNlZSBpZiB3ZSBmaW5kIHRoZSBwbHVnaW4gKi8KLSAgICBleGlzdGluZ19wbHVnaW4gPQotICAgICAgICBnc3RfcmVnaXN0cnlfbG9va3VwX2JuX2xvY2tlZCAocmVnaXN0cnksIHBsdWdpbi0+YmFzZW5hbWUpOwotICAgIGlmIChleGlzdGluZ19wbHVnaW4pIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJlZ2lzdHJ5LAotICAgICAgICAgICJSZXBsYWNpbmcgZXhpc3RpbmcgcGx1Z2luIFwiJXNcIiAlcCB3aXRoIG5ldyBwbHVnaW4gJXAgZm9yIGZpbGVuYW1lIFwiJXNcIiIsCi0gICAgICAgICAgR1NUX1NUUl9OVUxMIChleGlzdGluZ19wbHVnaW4tPmZpbGVuYW1lKSwgZXhpc3RpbmdfcGx1Z2luLCBwbHVnaW4sCi0gICAgICAgICAgR1NUX1NUUl9OVUxMIChwbHVnaW4tPmZpbGVuYW1lKSk7Ci0gICAgICAvKiBJZiB0aGUgbmV3IHBsdWdpbiBpcyBibGFja2xpc3RlZCBhbmQgdGhlIGV4aXN0aW5nIG9uZSBpc24ndCBjYWNoZWQsIGRvIG5vdAotICAgICAgICogYWNjZXB0IGlmIGl0J3MgZnJvbSBhIGRpZmZlcmVudCBsb2NhdGlvbiB0aGFuIHRoZSBleGlzdGluZyBvbmUgKi8KLSAgICAgIGlmIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwbHVnaW4sIEdTVF9QTFVHSU5fRkxBR19CTEFDS0xJU1RFRCkgJiYKLSAgICAgICAgICBzdHJjbXAgKHBsdWdpbi0+ZmlsZW5hbWUsIGV4aXN0aW5nX3BsdWdpbi0+ZmlsZW5hbWUpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocmVnaXN0cnksCi0gICAgICAgICAgICAiTm90IHJlcGxhY2luZyBwbHVnaW4gYmVjYXVzZSBuZXcgb25lICglcykgaXMgYmxhY2tsaXN0ZWQgYnV0IGZvciBhIGRpZmZlcmVudCBsb2NhdGlvbiB0aGFuIGV4aXN0aW5nIG9uZSAoJXMpIiwKLSAgICAgICAgICAgIHBsdWdpbi0+ZmlsZW5hbWUsIGV4aXN0aW5nX3BsdWdpbi0+ZmlsZW5hbWUpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICByZWdpc3RyeS0+cHJpdi0+cGx1Z2lucyA9Ci0gICAgICAgICAgZ19saXN0X3JlbW92ZSAocmVnaXN0cnktPnByaXYtPnBsdWdpbnMsIGV4aXN0aW5nX3BsdWdpbik7Ci0gICAgICAtLXJlZ2lzdHJ5LT5wcml2LT5uX3BsdWdpbnM7Ci0gICAgICBpZiAoR19MSUtFTFkgKGV4aXN0aW5nX3BsdWdpbi0+YmFzZW5hbWUpKQotICAgICAgICBnX2hhc2hfdGFibGVfcmVtb3ZlIChyZWdpc3RyeS0+cHJpdi0+YmFzZW5hbWVfaGFzaCwKLSAgICAgICAgICAgIGV4aXN0aW5nX3BsdWdpbi0+YmFzZW5hbWUpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZXhpc3RpbmdfcGx1Z2luKTsKLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgImFkZGluZyBwbHVnaW4gJXAgZm9yIGZpbGVuYW1lIFwiJXNcIiIsCi0gICAgICBwbHVnaW4sIEdTVF9TVFJfTlVMTCAocGx1Z2luLT5maWxlbmFtZSkpOwotCi0gIHJlZ2lzdHJ5LT5wcml2LT5wbHVnaW5zID0gZ19saXN0X3ByZXBlbmQgKHJlZ2lzdHJ5LT5wcml2LT5wbHVnaW5zLCBwbHVnaW4pOwotICArK3JlZ2lzdHJ5LT5wcml2LT5uX3BsdWdpbnM7Ci0KLSAgaWYgKEdfTElLRUxZIChwbHVnaW4tPmJhc2VuYW1lKSkKLSAgICBnX2hhc2hfdGFibGVfcmVwbGFjZSAocmVnaXN0cnktPnByaXYtPmJhc2VuYW1lX2hhc2gsIHBsdWdpbi0+YmFzZW5hbWUsCi0gICAgICAgIHBsdWdpbik7Ci0KLSAgZ3N0X29iamVjdF9yZWZfc2luayAocGx1Z2luKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKLQotICBHU1RfTE9HX09CSkVDVCAocmVnaXN0cnksICJlbWl0dGluZyBwbHVnaW4tYWRkZWQgZm9yIGZpbGVuYW1lIFwiJXNcIiIsCi0gICAgICBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZmlsZW5hbWUpKTsKLSAgZ19zaWduYWxfZW1pdCAocmVnaXN0cnksIGdzdF9yZWdpc3RyeV9zaWduYWxzW1BMVUdJTl9BRERFRF0sIDAsIHBsdWdpbik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmVzX2Zvcl9wbHVnaW5fdW5sb2NrZWQgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksCi0gICAgR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHTGlzdCAqZjsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19QTFVHSU4gKHBsdWdpbikpOwotCi0gIC8qIFJlbW92ZSBhbGwgZmVhdHVyZXMgZm9yIHRoaXMgcGx1Z2luICovCi0gIGYgPSByZWdpc3RyeS0+cHJpdi0+ZmVhdHVyZXM7Ci0gIHdoaWxlIChmICE9IE5VTEwpIHsKLSAgICBHTGlzdCAqbmV4dCA9IGdfbGlzdF9uZXh0IChmKTsKLSAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0gZi0+ZGF0YTsKLQotICAgIGlmIChHX1VOTElLRUxZIChmZWF0dXJlICYmIGZlYXR1cmUtPnBsdWdpbiA9PSBwbHVnaW4pKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgInJlbW92aW5nIGZlYXR1cmUgJXAgKCVzKSBmb3IgcGx1Z2luICVwICglcykiLAotICAgICAgICAgIGZlYXR1cmUsIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoZmVhdHVyZSksIHBsdWdpbiwKLSAgICAgICAgICBwbHVnaW4tPmRlc2MubmFtZSk7Ci0KLSAgICAgIHJlZ2lzdHJ5LT5wcml2LT5mZWF0dXJlcyA9Ci0gICAgICAgICAgZ19saXN0X2RlbGV0ZV9saW5rIChyZWdpc3RyeS0+cHJpdi0+ZmVhdHVyZXMsIGYpOwotICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZSAocmVnaXN0cnktPnByaXYtPmZlYXR1cmVfaGFzaCwKLSAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKLSAgICAgIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoZmVhdHVyZSkpOwotICAgIH0KLSAgICBmID0gbmV4dDsKLSAgfQotICByZWdpc3RyeS0+cHJpdi0+Y29va2llKys7Ci19Ci0KLS8qKgotICogZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW46Ci0gKiBAcmVnaXN0cnk6IHRoZSByZWdpc3RyeSB0byByZW1vdmUgdGhlIHBsdWdpbiBmcm9tCi0gKiBAcGx1Z2luOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBwbHVnaW4gdG8gcmVtb3ZlCi0gKgotICogUmVtb3ZlIHRoZSBwbHVnaW4gZnJvbSB0aGUgcmVnaXN0cnkuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4gKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUExVR0lOIChwbHVnaW4pKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgInJlbW92aW5nIHBsdWdpbiAlcCAoJXMpIiwKLSAgICAgIHBsdWdpbiwgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7Ci0gIHJlZ2lzdHJ5LT5wcml2LT5wbHVnaW5zID0gZ19saXN0X3JlbW92ZSAocmVnaXN0cnktPnByaXYtPnBsdWdpbnMsIHBsdWdpbik7Ci0gIC0tcmVnaXN0cnktPnByaXYtPm5fcGx1Z2luczsKLSAgaWYgKEdfTElLRUxZIChwbHVnaW4tPmJhc2VuYW1lKSkKLSAgICBnX2hhc2hfdGFibGVfcmVtb3ZlIChyZWdpc3RyeS0+cHJpdi0+YmFzZW5hbWVfaGFzaCwgcGx1Z2luLT5iYXNlbmFtZSk7Ci0gIGdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZXNfZm9yX3BsdWdpbl91bmxvY2tlZCAocmVnaXN0cnksIHBsdWdpbik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7Ci19Ci0KLS8qKgotICogZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlOgotICogQHJlZ2lzdHJ5OiB0aGUgcmVnaXN0cnkgdG8gYWRkIHRoZSBwbHVnaW4gdG8KLSAqIEBmZWF0dXJlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBmZWF0dXJlIHRvIGFkZAotICoKLSAqIEFkZCB0aGUgZmVhdHVyZSB0byB0aGUgcmVnaXN0cnkuIFRoZSBmZWF0dXJlLWFkZGVkIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQuCi0gKiBUaGlzIGZ1bmN0aW9uIHNpbmtzIEBmZWF0dXJlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIG9uIHN1Y2Nlc3MuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZSAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUpCi17Ci0gIEdzdFBsdWdpbkZlYXR1cmUgKmV4aXN0aW5nX2ZlYXR1cmU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmUpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZlYXR1cmUtPnBsdWdpbl9uYW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJlZ2lzdHJ5KTsKLSAgZXhpc3RpbmdfZmVhdHVyZSA9IGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZV9sb2NrZWQgKHJlZ2lzdHJ5LAotICAgICAgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7Ci0gIGlmIChHX1VOTElLRUxZIChleGlzdGluZ19mZWF0dXJlKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJlZ2lzdHJ5LCAicmVwbGFjaW5nIGV4aXN0aW5nIGZlYXR1cmUgJXAgKCVzKSIsCi0gICAgICAgIGV4aXN0aW5nX2ZlYXR1cmUsIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOwotICAgIC8qIFJlbW92ZSB0aGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIHRoZSBsaXN0IG5vdywgYmVmb3JlIHdlIGluc2VydCB0aGUgbmV3Ci0gICAgICogb25lLCBidXQgZG9uJ3QgdW5yZWYgeWV0IGJlY2F1c2UgdGhlIGhhc2ggaXMgc3RpbGwgc3RvcmluZyBhIHJlZmVyZW5jZSB0bwotICAgICAqIGl0LiAqLwotICAgIHJlZ2lzdHJ5LT5wcml2LT5mZWF0dXJlcyA9Ci0gICAgICAgIGdfbGlzdF9yZW1vdmUgKHJlZ2lzdHJ5LT5wcml2LT5mZWF0dXJlcywgZXhpc3RpbmdfZmVhdHVyZSk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgImFkZGluZyBmZWF0dXJlICVwICglcykiLCBmZWF0dXJlLAotICAgICAgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7Ci0KLSAgcmVnaXN0cnktPnByaXYtPmZlYXR1cmVzID0gZ19saXN0X3ByZXBlbmQgKHJlZ2lzdHJ5LT5wcml2LT5mZWF0dXJlcywgZmVhdHVyZSk7Ci0gIGdfaGFzaF90YWJsZV9yZXBsYWNlIChyZWdpc3RyeS0+cHJpdi0+ZmVhdHVyZV9oYXNoLCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpLAotICAgICAgZmVhdHVyZSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGV4aXN0aW5nX2ZlYXR1cmUpKSB7Ci0gICAgLyogV2UgdW5yZWYgbm93LiBObyBuZWVkIHRvIHJlbW92ZSB0aGUgZmVhdHVyZSBuYW1lIGZyb20gdGhlIGhhc2ggdGFibGUsIGl0Ci0gICAgICogZ290IHJlcGxhY2VkIGJ5IHRoZSBuZXcgZmVhdHVyZSAqLwotICAgIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoZXhpc3RpbmdfZmVhdHVyZSkpOwotICB9Ci0KLSAgZ3N0X29iamVjdF9zZXRfcGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKGZlYXR1cmUpLCBHU1RfT0JKRUNUX0NBU1QgKHJlZ2lzdHJ5KSk7Ci0KLSAgcmVnaXN0cnktPnByaXYtPmNvb2tpZSsrOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChyZWdpc3RyeSwgImVtaXR0aW5nIGZlYXR1cmUtYWRkZWQgZm9yICVzIiwKLSAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOwotICBnX3NpZ25hbF9lbWl0IChyZWdpc3RyeSwgZ3N0X3JlZ2lzdHJ5X3NpZ25hbHNbRkVBVFVSRV9BRERFRF0sIDAsIGZlYXR1cmUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZToKLSAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIHJlbW92ZSB0aGUgZmVhdHVyZSBmcm9tCi0gKiBAZmVhdHVyZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgZmVhdHVyZSB0byByZW1vdmUKLSAqCi0gKiBSZW1vdmUgdGhlIGZlYXR1cmUgZnJvbSB0aGUgcmVnaXN0cnkuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmUpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgInJlbW92aW5nIGZlYXR1cmUgJXAgKCVzKSIsCi0gICAgICBmZWF0dXJlLCBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJlZ2lzdHJ5KTsKLSAgcmVnaXN0cnktPnByaXYtPmZlYXR1cmVzID0gZ19saXN0X3JlbW92ZSAocmVnaXN0cnktPnByaXYtPmZlYXR1cmVzLCBmZWF0dXJlKTsKLSAgZ19oYXNoX3RhYmxlX3JlbW92ZSAocmVnaXN0cnktPnByaXYtPmZlYXR1cmVfaGFzaCwgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7Ci0gIHJlZ2lzdHJ5LT5wcml2LT5jb29raWUrKzsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKLQotICBnc3Rfb2JqZWN0X3VucGFyZW50ICgoR3N0T2JqZWN0ICopIGZlYXR1cmUpOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyOgotICogQHJlZ2lzdHJ5OiByZWdpc3RyeSB0byBxdWVyeQotICogQGZpbHRlcjogKHNjb3BlIGNhbGwpOiB0aGUgZmlsdGVyIHRvIHVzZQotICogQGZpcnN0OiBvbmx5IHJldHVybiBmaXJzdCBtYXRjaAotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmaWx0ZXIgZnVuY3Rpb24KLSAqCi0gKiBSdW5zIGEgZmlsdGVyIGFnYWluc3QgYWxsIHBsdWdpbnMgaW4gdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm5zIGEgI0dMaXN0IHdpdGgKLSAqIHRoZSByZXN1bHRzLiBJZiB0aGUgZmlyc3QgZmxhZyBpcyBzZXQsIG9ubHkgdGhlIGZpcnN0IG1hdGNoIGlzCi0gKiByZXR1cm5lZCAoYXMgYSBsaXN0IHdpdGggYSBzaW5nbGUgb2JqZWN0KS4KLSAqIEV2ZXJ5IHBsdWdpbiBpcyByZWZmZWQ7IHVzZSBnc3RfcGx1Z2luX2xpc3RfZnJlZSgpIGFmdGVyIHVzZSwgd2hpY2gKLSAqIHdpbGwgdW5yZWYgYWdhaW4uCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbik6IGEgI0dMaXN0IG9mICNHc3RQbHVnaW4uCi0gKiAgICAgVXNlIGdzdF9wbHVnaW5fbGlzdF9mcmVlKCkgYWZ0ZXIgdXNhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR0xpc3QgKgotZ3N0X3JlZ2lzdHJ5X3BsdWdpbl9maWx0ZXIgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksCi0gICAgR3N0UGx1Z2luRmlsdGVyIGZpbHRlciwgZ2Jvb2xlYW4gZmlyc3QsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGx1Z2luICoqcGx1Z2luczsKLSAgR0xpc3QgKndhbGssICpsaXN0ID0gTlVMTDsKLSAgZ3VpbnQgbl9wbHVnaW5zLCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7Ci0gIG5fcGx1Z2lucyA9IHJlZ2lzdHJ5LT5wcml2LT5uX3BsdWdpbnM7Ci0gIHBsdWdpbnMgPSBnX25ld2EgKEdzdFBsdWdpbiAqLCBuX3BsdWdpbnMgKyAxKTsKLSAgZm9yICh3YWxrID0gcmVnaXN0cnktPnByaXYtPnBsdWdpbnMsIGkgPSAwOyB3YWxrICE9IE5VTEw7IHdhbGsgPSB3YWxrLT5uZXh0KQotICAgIHBsdWdpbnNbaSsrXSA9IGdzdF9vYmplY3RfcmVmICh3YWxrLT5kYXRhKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbl9wbHVnaW5zOyArK2kpIHsKLSAgICBpZiAoZmlsdGVyID09IE5VTEwgfHwgZmlsdGVyIChwbHVnaW5zW2ldLCB1c2VyX2RhdGEpKSB7Ci0gICAgICBsaXN0ID0gZ19saXN0X3ByZXBlbmQgKGxpc3QsIGdzdF9vYmplY3RfcmVmIChwbHVnaW5zW2ldKSk7Ci0KLSAgICAgIGlmIChmaXJzdCkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5fcGx1Z2luczsgKytpKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbnNbaV0pOwotCi0gIHJldHVybiBsaXN0OwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgR1R5cGUgdHlwZTsKLX0gR3N0VHlwZU5hbWVEYXRhOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyIChHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSwKLSAgICBHc3RUeXBlTmFtZURhdGEgKiBkYXRhKQotewotICBnX2Fzc2VydCAoR1NUX0lTX1BMVUdJTl9GRUFUVVJFIChmZWF0dXJlKSk7Ci0KLSAgcmV0dXJuICgoZGF0YS0+dHlwZSA9PSAwIHx8IGRhdGEtPnR5cGUgPT0gR19PQkpFQ1RfVFlQRSAoZmVhdHVyZSkpICYmCi0gICAgICAoZGF0YS0+bmFtZSA9PSBOVUxMIHx8ICFzdHJjbXAgKGRhdGEtPm5hbWUsIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpKSk7Ci19Ci0KLS8qIHJldHVybnMgVFJVRSBpZiB0aGUgbGlzdCB3YXMgY2hhbmdlZAotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG9iamVjdCBsb2NrIHRha2VuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X29yX2NyZWF0ZSAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKLSAgICBHTGlzdCAqKiBwcmV2aW91cywgZ3VpbnQzMiAqIGNvb2tpZSwgR1R5cGUgdHlwZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdFJlZ2lzdHJ5UHJpdmF0ZSAqcHJpdiA9IHJlZ2lzdHJ5LT5wcml2OwotCi0gIGlmIChHX1VOTElLRUxZICghKnByZXZpb3VzIHx8IHByaXYtPmNvb2tpZSAhPSAqY29va2llKSkgewotICAgIEdzdFR5cGVOYW1lRGF0YSBkYXRhOwotICAgIGNvbnN0IEdMaXN0ICp3YWxrOwotCi0gICAgaWYgKCpwcmV2aW91cykgewotICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAoKnByZXZpb3VzKTsKLSAgICAgICpwcmV2aW91cyA9IE5VTEw7Ci0gICAgfQotCi0gICAgZGF0YS50eXBlID0gdHlwZTsKLSAgICBkYXRhLm5hbWUgPSBOVUxMOwotCi0gICAgZm9yICh3YWxrID0gcmVnaXN0cnktPnByaXYtPmZlYXR1cmVzOyB3YWxrICE9IE5VTEw7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0gd2Fsay0+ZGF0YTsKLQotICAgICAgaWYgKGdzdF9wbHVnaW5fZmVhdHVyZV90eXBlX25hbWVfZmlsdGVyIChmZWF0dXJlLCAmZGF0YSkpIHsKLSAgICAgICAgKnByZXZpb3VzID0gZ19saXN0X3ByZXBlbmQgKCpwcmV2aW91cywgZ3N0X29iamVjdF9yZWYgKGZlYXR1cmUpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAqY29va2llID0gcHJpdi0+Y29va2llOwotICAgIHJlcyA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2ludAotdHlwZV9maW5kX2ZhY3RvcnlfcmFua19jbXAgKGNvbnN0IEdzdFBsdWdpbkZlYXR1cmUgKiBmYWMxLAotICAgIGNvbnN0IEdzdFBsdWdpbkZlYXR1cmUgKiBmYWMyKQotewotICBpZiAoR19MSUtFTFkgKGZhYzEtPnJhbmsgIT0gZmFjMi0+cmFuaykpCi0gICAgcmV0dXJuIGZhYzItPnJhbmsgLSBmYWMxLT5yYW5rOwotCi0gIC8qIHRvIG1ha2UgdGhlIG9yZGVyIGluIHdoaWNoIHRoaW5ncyBoYXBwZW4gbW9yZSBkZXRlcm1pbmlzdGljLAotICAgKiBzb3J0IGJ5IG5hbWUgd2hlbiB0aGUgcmFua3MgYXJlIHRoZSBzYW1lLiAqLwotICByZXR1cm4gc3RyY21wIChHU1RfT0JKRUNUX05BTUUgKGZhYzEpLCBHU1RfT0JKRUNUX05BTUUgKGZhYzIpKTsKLX0KLQotc3RhdGljIEdMaXN0ICoKLWdzdF9yZWdpc3RyeV9nZXRfZWxlbWVudF9mYWN0b3J5X2xpc3QgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnkpCi17Ci0gIEdMaXN0ICpsaXN0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocmVnaXN0cnkpOwotCi0gIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X29yX2NyZWF0ZSAocmVnaXN0cnksCi0gICAgICAmcmVnaXN0cnktPnByaXYtPmVsZW1lbnRfZmFjdG9yeV9saXN0LCAmcmVnaXN0cnktPnByaXYtPmVmbF9jb29raWUsCi0gICAgICBHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlkpOwotCi0gIC8qIFJldHVybiByZWZmZWQgY29weSAqLwotICBsaXN0ID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weSAocmVnaXN0cnktPnByaXYtPmVsZW1lbnRfZmFjdG9yeV9saXN0KTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOwotCi0gIHJldHVybiBsaXN0OwotfQotCi1zdGF0aWMgR0xpc3QgKgotZ3N0X3JlZ2lzdHJ5X2dldF90eXBlZmluZF9mYWN0b3J5X2xpc3QgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnkpCi17Ci0gIEdMaXN0ICpsaXN0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocmVnaXN0cnkpOwotCi0gIGlmIChHX1VOTElLRUxZIChnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9vcl9jcmVhdGUgKHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAmcmVnaXN0cnktPnByaXYtPnR5cGVmaW5kX2ZhY3RvcnlfbGlzdCwKLSAgICAgICAgICAgICAgJnJlZ2lzdHJ5LT5wcml2LT50ZmxfY29va2llLCBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSkpKQotICAgIHJlZ2lzdHJ5LT5wcml2LT50eXBlZmluZF9mYWN0b3J5X2xpc3QgPQotICAgICAgICBnX2xpc3Rfc29ydCAocmVnaXN0cnktPnByaXYtPnR5cGVmaW5kX2ZhY3RvcnlfbGlzdCwKLSAgICAgICAgKEdDb21wYXJlRnVuYykgdHlwZV9maW5kX2ZhY3RvcnlfcmFua19jbXApOwotCi0gIC8qIFJldHVybiByZWZmZWQgY29weSAqLwotICBsaXN0ID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weSAocmVnaXN0cnktPnByaXYtPnR5cGVmaW5kX2ZhY3RvcnlfbGlzdCk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJlZ2lzdHJ5KTsKLQotICByZXR1cm4gbGlzdDsKLX0KLQotCi1zdGF0aWMgR0xpc3QgKgotZ3N0X3JlZ2lzdHJ5X2dldF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9saXN0IChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5KQotewotICBHTGlzdCAqbGlzdDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJlZ2lzdHJ5KTsKLQotICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9vcl9jcmVhdGUgKHJlZ2lzdHJ5LAotICAgICAgJnJlZ2lzdHJ5LT5wcml2LT5kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9saXN0LAotICAgICAgJnJlZ2lzdHJ5LT5wcml2LT5kbWZsX2Nvb2tpZSwgR1NUX1RZUEVfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUlkpOwotCi0gIC8qIFJldHVybiByZWZmZWQgY29weSAqLwotICBsaXN0ID0KLSAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2NvcHkgKHJlZ2lzdHJ5LT4KLSAgICAgIHByaXYtPmRldmljZV9wcm92aWRlcl9mYWN0b3J5X2xpc3QpOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLS8qKgotICogZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyOgotICogQHJlZ2lzdHJ5OiByZWdpc3RyeSB0byBxdWVyeQotICogQGZpbHRlcjogKHNjb3BlIGNhbGwpOiB0aGUgZmlsdGVyIHRvIHVzZQotICogQGZpcnN0OiBvbmx5IHJldHVybiBmaXJzdCBtYXRjaAotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmaWx0ZXIgZnVuY3Rpb24KLSAqCi0gKiBSdW5zIGEgZmlsdGVyIGFnYWluc3QgYWxsIGZlYXR1cmVzIG9mIHRoZSBwbHVnaW5zIGluIHRoZSByZWdpc3RyeQotICogYW5kIHJldHVybnMgYSBHTGlzdCB3aXRoIHRoZSByZXN1bHRzLgotICogSWYgdGhlIGZpcnN0IGZsYWcgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdCBtYXRjaCBpcwotICogcmV0dXJuZWQgKGFzIGEgbGlzdCB3aXRoIGEgc2luZ2xlIG9iamVjdCkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbkZlYXR1cmUpOiBhICNHTGlzdCBvZgotICogICAgICNHc3RQbHVnaW5GZWF0dXJlLiBVc2UgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdMaXN0ICoKLWdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKLSAgICBHc3RQbHVnaW5GZWF0dXJlRmlsdGVyIGZpbHRlciwgZ2Jvb2xlYW4gZmlyc3QsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqKmZlYXR1cmVzOwotICBHTGlzdCAqd2FsaywgKmxpc3QgPSBOVUxMOwotICBndWludCBuX2ZlYXR1cmVzLCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7Ci0gIG5fZmVhdHVyZXMgPSBnX2hhc2hfdGFibGVfc2l6ZSAocmVnaXN0cnktPnByaXYtPmZlYXR1cmVfaGFzaCk7Ci0gIGZlYXR1cmVzID0gZ19uZXdhIChHc3RQbHVnaW5GZWF0dXJlICosIG5fZmVhdHVyZXMgKyAxKTsKLSAgZm9yICh3YWxrID0gcmVnaXN0cnktPnByaXYtPmZlYXR1cmVzLCBpID0gMDsgd2FsayAhPSBOVUxMOyB3YWxrID0gd2Fsay0+bmV4dCkKLSAgICBmZWF0dXJlc1tpKytdID0gZ3N0X29iamVjdF9yZWYgKHdhbGstPmRhdGEpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuX2ZlYXR1cmVzOyArK2kpIHsKLSAgICBpZiAoZmlsdGVyID09IE5VTEwgfHwgZmlsdGVyIChmZWF0dXJlc1tpXSwgdXNlcl9kYXRhKSkgewotICAgICAgbGlzdCA9IGdfbGlzdF9wcmVwZW5kIChsaXN0LCBnc3Rfb2JqZWN0X3JlZiAoZmVhdHVyZXNbaV0pKTsKLQotICAgICAgaWYgKGZpcnN0KQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBmb3IgKGkgPSAwOyBpIDwgbl9mZWF0dXJlczsgKytpKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGZlYXR1cmVzW2ldKTsKLQotICByZXR1cm4gbGlzdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcmVnaXN0cnlfcGx1Z2luX25hbWVfZmlsdGVyIChHc3RQbHVnaW4gKiBwbHVnaW4sIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgcmV0dXJuIChwbHVnaW4tPmRlc2MubmFtZSAmJiAhc3RyY21wIChwbHVnaW4tPmRlc2MubmFtZSwgbmFtZSkpOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbjoKLSAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIHNlYXJjaAotICogQG5hbWU6IHRoZSBwbHVnaW4gbmFtZSB0byBmaW5kCi0gKgotICogRmluZCB0aGUgcGx1Z2luIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIHJlZ2lzdHJ5LgotICogVGhlIHBsdWdpbiB3aWxsIGJlIHJlZmZlZDsgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZmZpbmcuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBwbHVnaW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZQotICogICAgIG9yICVOVUxMIGlmIHRoZSBwbHVnaW4gd2FzIG5vdCBmb3VuZC4gZ3N0X29iamVjdF91bnJlZigpIGFmdGVyCi0gKiAgICAgdXNhZ2UuCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0UGx1Z2luICoKLWdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbiAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHTGlzdCAqd2FsazsKLSAgR3N0UGx1Z2luICpyZXN1bHQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOwotCi0gIHdhbGsgPSBnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlciAocmVnaXN0cnksCi0gICAgICAoR3N0UGx1Z2luRmlsdGVyKSBnc3RfcmVnaXN0cnlfcGx1Z2luX25hbWVfZmlsdGVyLCBUUlVFLCAoZ3BvaW50ZXIpIG5hbWUpOwotICBpZiAod2FsaykgewotICAgIHJlc3VsdCA9IEdTVF9QTFVHSU5fQ0FTVCAod2Fsay0+ZGF0YSk7Ci0KLSAgICBnc3Rfb2JqZWN0X3JlZiAocmVzdWx0KTsKLSAgICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAod2Fsayk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmU6Ci0gKiBAcmVnaXN0cnk6IHRoZSByZWdpc3RyeSB0byBzZWFyY2gKLSAqIEBuYW1lOiB0aGUgcGx1Z2luZmVhdHVyZSBuYW1lIHRvIGZpbmQKLSAqIEB0eXBlOiB0aGUgcGx1Z2luZmVhdHVyZSB0eXBlIHRvIGZpbmQKLSAqCi0gKiBGaW5kIHRoZSBwbHVnaW5mZWF0dXJlIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHR5cGUgaW4gdGhlIHJlZ2lzdHJ5LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgcGx1Z2luZmVhdHVyZSB3aXRoIHRoZQotICogICAgIGdpdmVuIG5hbWUgYW5kIHR5cGUgb3IgJU5VTEwgaWYgdGhlIHBsdWdpbiB3YXMgbm90Ci0gKiAgICAgZm91bmQuIGdzdF9vYmplY3RfdW5yZWYoKSBhZnRlciB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RQbHVnaW5GZWF0dXJlICoKLWdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGdjaGFyICogbmFtZSwKLSAgICBHVHlwZSB0eXBlKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfdHlwZV9pc19hICh0eXBlLCBHU1RfVFlQRV9QTFVHSU5fRkVBVFVSRSksIE5VTEwpOwotCi0gIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBuYW1lKTsKLSAgaWYgKGZlYXR1cmUgJiYgIWdfdHlwZV9pc19hIChHX1RZUEVfRlJPTV9JTlNUQU5DRSAoZmVhdHVyZSksIHR5cGUpKSB7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZmVhdHVyZSk7Ci0gICAgZmVhdHVyZSA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gZmVhdHVyZTsKLX0KLQotLyoqCi0gKiBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdDoKLSAqIEByZWdpc3RyeTogYSAjR3N0UmVnaXN0cnkKLSAqIEB0eXBlOiBhICNHVHlwZS4KLSAqCi0gKiBSZXRyaWV2ZXMgYSAjR0xpc3Qgb2YgI0dzdFBsdWdpbkZlYXR1cmUgb2YgQHR5cGUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbkZlYXR1cmUpOiBhICNHTGlzdCBvZgotICogICAgICNHc3RQbHVnaW5GZWF0dXJlIG9mIEB0eXBlLiBVc2UgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIGFmdGVyIHVzZQotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdMaXN0ICoKLWdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0IChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHVHlwZSB0eXBlKQotewotICBHc3RUeXBlTmFtZURhdGEgZGF0YTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ190eXBlX2lzX2EgKHR5cGUsIEdTVF9UWVBFX1BMVUdJTl9GRUFUVVJFKSwgTlVMTCk7Ci0KLSAgLyogU3BlZWQgdXAgKi8KLSAgaWYgKHR5cGUgPT0gR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZKQotICAgIHJldHVybiBnc3RfcmVnaXN0cnlfZ2V0X2VsZW1lbnRfZmFjdG9yeV9saXN0IChyZWdpc3RyeSk7Ci0gIGVsc2UgaWYgKHR5cGUgPT0gR1NUX1RZUEVfVFlQRV9GSU5EX0ZBQ1RPUlkpCi0gICAgcmV0dXJuIGdzdF9yZWdpc3RyeV9nZXRfdHlwZWZpbmRfZmFjdG9yeV9saXN0IChyZWdpc3RyeSk7Ci0gIGVsc2UgaWYgKHR5cGUgPT0gR1NUX1RZUEVfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUlkpCi0gICAgcmV0dXJuIGdzdF9yZWdpc3RyeV9nZXRfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfbGlzdCAocmVnaXN0cnkpOwotCi0gIGRhdGEudHlwZSA9IHR5cGU7Ci0gIGRhdGEubmFtZSA9IE5VTEw7Ci0KLSAgcmV0dXJuIGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAocmVnaXN0cnksCi0gICAgICAoR3N0UGx1Z2luRmVhdHVyZUZpbHRlcikgZ3N0X3BsdWdpbl9mZWF0dXJlX3R5cGVfbmFtZV9maWx0ZXIsCi0gICAgICBGQUxTRSwgJmRhdGEpOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3Q6Ci0gKiBAcmVnaXN0cnk6IHRoZSByZWdpc3RyeSB0byBzZWFyY2gKLSAqCi0gKiBHZXQgYSBjb3B5IG9mIGFsbCBwbHVnaW5zIHJlZ2lzdGVyZWQgaW4gdGhlIGdpdmVuIHJlZ2lzdHJ5LiBUaGUgcmVmY291bnQKLSAqIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgbGlzdCBpbiBpbmNyZW1lbnRlZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBHc3QuUGx1Z2luKTogYSAjR0xpc3Qgb2YgI0dzdFBsdWdpbi4KLSAqICAgICBVc2UgZ3N0X3BsdWdpbl9saXN0X2ZyZWUoKSBhZnRlciB1c2FnZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1HTGlzdCAqCi1nc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5KQotewotICBHTGlzdCAqbGlzdDsKLSAgR0xpc3QgKmc7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBOVUxMKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJlZ2lzdHJ5KTsKLSAgbGlzdCA9IGdfbGlzdF9jb3B5IChyZWdpc3RyeS0+cHJpdi0+cGx1Z2lucyk7Ci0gIGZvciAoZyA9IGxpc3Q7IGc7IGcgPSBnLT5uZXh0KSB7Ci0gICAgZ3N0X29iamVjdF9yZWYgKEdTVF9QTFVHSU5fQ0FTVCAoZy0+ZGF0YSkpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLXN0YXRpYyBHc3RQbHVnaW5GZWF0dXJlICoKLWdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZV9sb2NrZWQgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIHJldHVybiBnX2hhc2hfdGFibGVfbG9va3VwIChyZWdpc3RyeS0+cHJpdi0+ZmVhdHVyZV9oYXNoLCBuYW1lKTsKLX0KLQotLyoqCi0gKiBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmU6Ci0gKiBAcmVnaXN0cnk6IGEgI0dzdFJlZ2lzdHJ5Ci0gKiBAbmFtZTogYSAjR3N0UGx1Z2luRmVhdHVyZSBuYW1lCi0gKgotICogRmluZCBhICNHc3RQbHVnaW5GZWF0dXJlIHdpdGggQG5hbWUgaW4gQHJlZ2lzdHJ5LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0UGx1Z2luRmVhdHVyZSB3aXRoIGl0cyByZWZjb3VudCBpbmNyZW1lbnRlZCwKLSAqICAgICB1c2UgZ3N0X29iamVjdF91bnJlZigpIGFmdGVyIHVzYWdlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdFBsdWdpbkZlYXR1cmUgKgotZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpuYW1lKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIE5VTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocmVnaXN0cnkpOwotICBmZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlX2xvY2tlZCAocmVnaXN0cnksIG5hbWUpOwotICBpZiAoZmVhdHVyZSkKLSAgICBnc3Rfb2JqZWN0X3JlZiAoZmVhdHVyZSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChyZWdpc3RyeSk7Ci0KLSAgcmV0dXJuIGZlYXR1cmU7Ci19Ci0KLXN0YXRpYyBHc3RQbHVnaW4gKgotZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9ibl9sb2NrZWQgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGNoYXIgKmJhc2VuYW1lKQotewotICByZXR1cm4gZ19oYXNoX3RhYmxlX2xvb2t1cCAocmVnaXN0cnktPnByaXYtPmJhc2VuYW1lX2hhc2gsIGJhc2VuYW1lKTsKLX0KLQotc3RhdGljIEdzdFBsdWdpbiAqCi1nc3RfcmVnaXN0cnlfbG9va3VwX2JuIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpiYXNlbmFtZSkKLXsKLSAgR3N0UGx1Z2luICpwbHVnaW47Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChyZWdpc3RyeSk7Ci0gIHBsdWdpbiA9IGdzdF9yZWdpc3RyeV9sb29rdXBfYm5fbG9ja2VkIChyZWdpc3RyeSwgYmFzZW5hbWUpOwotICBpZiAocGx1Z2luKQotICAgIGdzdF9vYmplY3RfcmVmIChwbHVnaW4pOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOwotCi0gIHJldHVybiBwbHVnaW47Ci19Ci0KLS8qKgotICogZ3N0X3JlZ2lzdHJ5X2xvb2t1cDoKLSAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIGxvb2sgdXAgaW4KLSAqIEBmaWxlbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gbG9vayB1cAotICoKLSAqIExvb2sgdXAgYSBwbHVnaW4gaW4gdGhlIGdpdmVuIHJlZ2lzdHJ5IHdpdGggdGhlIGdpdmVuIGZpbGVuYW1lLgotICogSWYgZm91bmQsIHBsdWdpbiBpcyByZWZmZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSAjR3N0UGx1Z2luIGlmIGZvdW5kLCBvcgotICogICAgICVOVUxMIGlmIG5vdC4gIGdzdF9vYmplY3RfdW5yZWYoKSBhZnRlciB1c2FnZS4KLSAqLwotR3N0UGx1Z2luICoKLWdzdF9yZWdpc3RyeV9sb29rdXAgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotICBHc3RQbHVnaW4gKnBsdWdpbjsKLSAgZ2NoYXIgKmJhc2VuYW1lOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWxlbmFtZSAhPSBOVUxMLCBOVUxMKTsKLQotICBiYXNlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUgKGZpbGVuYW1lKTsKLSAgaWYgKEdfVU5MSUtFTFkgKGJhc2VuYW1lID09IE5VTEwpKQotICAgIHJldHVybiBOVUxMOwotCi0gIHBsdWdpbiA9IGdzdF9yZWdpc3RyeV9sb29rdXBfYm4gKHJlZ2lzdHJ5LCBiYXNlbmFtZSk7Ci0KLSAgZ19mcmVlIChiYXNlbmFtZSk7Ci0KLSAgcmV0dXJuIHBsdWdpbjsKLX0KLQotdHlwZWRlZiBlbnVtCi17Ci0gIFJFR0lTVFJZX1NDQU5fSEVMUEVSX05PVF9TVEFSVEVEID0gMCwKLSAgUkVHSVNUUllfU0NBTl9IRUxQRVJfRElTQUJMRUQsCi0gIFJFR0lTVFJZX1NDQU5fSEVMUEVSX1JVTk5JTkcKLX0gR3N0UmVnaXN0cnlTY2FuSGVscGVyU3RhdGU7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeTsKLSAgR3N0UmVnaXN0cnlTY2FuSGVscGVyU3RhdGUgaGVscGVyX3N0YXRlOwotICBHc3RQbHVnaW5Mb2FkZXIgKmhlbHBlcjsKLSAgZ2Jvb2xlYW4gY2hhbmdlZDsKLX0gR3N0UmVnaXN0cnlTY2FuQ29udGV4dDsKLQotc3RhdGljIHZvaWQKLWluaXRfc2Nhbl9jb250ZXh0IChHc3RSZWdpc3RyeVNjYW5Db250ZXh0ICogY29udGV4dCwgR3N0UmVnaXN0cnkgKiByZWdpc3RyeSkKLXsKLSAgZ2Jvb2xlYW4gZG9fZm9yazsKLQotICBjb250ZXh0LT5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCi0gIC8qIHNlZSBpZiBmb3JraW5nIGlzIGVuYWJsZWQgYW5kIHNldCB1cCB0aGUgc2NhbiBoZWxwZXIgc3RhdGUgYWNjb3JkaW5nbHkgKi8KLSAgZG9fZm9yayA9IF9nc3RfZW5hYmxlX3JlZ2lzdHJ5X2Zvcms7Ci0gIGlmIChkb19mb3JrKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmZvcmtfZW52OwotCi0gICAgLyogZm9ya2luZyBlbmFibGVkLCBzZWUgaWYgaXQgaXMgZGlzYWJsZWQgd2l0aCBhbiBlbnYgdmFyICovCi0gICAgaWYgKChmb3JrX2VudiA9IGdfZ2V0ZW52ICgiR1NUX1JFR0lTVFJZX0ZPUksiKSkpIHsKLSAgICAgIC8qIGZvcmsgZW5hYmxlZCBmb3IgYW55IHZhbHVlIGRpZmZlcmVudCBmcm9tICJubyIgKi8KLSAgICAgIGRvX2ZvcmsgPSBzdHJjbXAgKGZvcmtfZW52LCAibm8iKSAhPSAwOwotICAgIH0KLSAgfQotCi0gIGlmIChkb19mb3JrKQotICAgIGNvbnRleHQtPmhlbHBlcl9zdGF0ZSA9IFJFR0lTVFJZX1NDQU5fSEVMUEVSX05PVF9TVEFSVEVEOwotICBlbHNlCi0gICAgY29udGV4dC0+aGVscGVyX3N0YXRlID0gUkVHSVNUUllfU0NBTl9IRUxQRVJfRElTQUJMRUQ7Ci0KLSAgY29udGV4dC0+aGVscGVyID0gTlVMTDsKLSAgY29udGV4dC0+Y2hhbmdlZCA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYXJfc2Nhbl9jb250ZXh0IChHc3RSZWdpc3RyeVNjYW5Db250ZXh0ICogY29udGV4dCkKLXsKLSAgaWYgKGNvbnRleHQtPmhlbHBlcikgewotICAgIGNvbnRleHQtPmNoYW5nZWQgfD0gX3ByaXZfZ3N0X3BsdWdpbl9sb2FkZXJfZnVuY3MuZGVzdHJveSAoY29udGV4dC0+aGVscGVyKTsKLSAgICBjb250ZXh0LT5oZWxwZXIgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JlZ2lzdHJ5X3NjYW5fcGx1Z2luX2ZpbGUgKEdzdFJlZ2lzdHJ5U2NhbkNvbnRleHQgKiBjb250ZXh0LAotICAgIGNvbnN0IGdjaGFyICogZmlsZW5hbWUsIG9mZl90IGZpbGVfc2l6ZSwgdGltZV90IGZpbGVfbXRpbWUpCi17Ci0gIGdib29sZWFuIGNoYW5nZWQgPSBGQUxTRTsKLSAgR3N0UGx1Z2luICpuZXdwbHVnaW4gPSBOVUxMOwotCi0jaWZkZWYgR19PU19XSU4zMgotICAvKiBEaXNhYmxlIGV4dGVybmFsIHBsdWdpbiBsb2FkZXIgb24gV2luZG93cyB1bnRpbCBpdCBpcyBwb3J0ZWQgcHJvcGVybHkuICovCi0gIGNvbnRleHQtPmhlbHBlcl9zdGF0ZSA9IFJFR0lTVFJZX1NDQU5fSEVMUEVSX0RJU0FCTEVEOwotI2VuZGlmCi0KLQotICAvKiBIYXZlIGEgcGx1Z2luIHRvIGxvYWQgLSBzZWUgaWYgdGhlIHNjYW4taGVscGVyIG5lZWRzIHN0YXJ0aW5nICovCi0gIGlmIChjb250ZXh0LT5oZWxwZXJfc3RhdGUgPT0gUkVHSVNUUllfU0NBTl9IRUxQRVJfTk9UX1NUQVJURUQpIHsKLSAgICBHU1RfREVCVUcgKCJTdGFydGluZyBwbHVnaW4gc2Nhbm5lciBmb3IgZmlsZSAlcyIsIGZpbGVuYW1lKTsKLSAgICBjb250ZXh0LT5oZWxwZXIgPSBfcHJpdl9nc3RfcGx1Z2luX2xvYWRlcl9mdW5jcy5jcmVhdGUgKGNvbnRleHQtPnJlZ2lzdHJ5KTsKLSAgICBpZiAoY29udGV4dC0+aGVscGVyICE9IE5VTEwpCi0gICAgICBjb250ZXh0LT5oZWxwZXJfc3RhdGUgPSBSRUdJU1RSWV9TQ0FOX0hFTFBFUl9SVU5OSU5HOwotICAgIGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcgKCJGYWlsZWQgc3RhcnRpbmcgcGx1Z2luIHNjYW5uZXIuIFNjYW5uaW5nIGluLXByb2Nlc3MiKTsKLSAgICAgIGNvbnRleHQtPmhlbHBlcl9zdGF0ZSA9IFJFR0lTVFJZX1NDQU5fSEVMUEVSX0RJU0FCTEVEOwotICAgIH0KLSAgfQotCi0gIGlmIChjb250ZXh0LT5oZWxwZXJfc3RhdGUgPT0gUkVHSVNUUllfU0NBTl9IRUxQRVJfUlVOTklORykgewotICAgIEdTVF9ERUJVRyAoIlVzaW5nIHNjYW4taGVscGVyIHRvIGxvYWQgcGx1Z2luICVzIiwgZmlsZW5hbWUpOwotICAgIGlmICghX3ByaXZfZ3N0X3BsdWdpbl9sb2FkZXJfZnVuY3MubG9hZCAoY29udGV4dC0+aGVscGVyLAotICAgICAgICAgICAgZmlsZW5hbWUsIGZpbGVfc2l6ZSwgZmlsZV9tdGltZSkpIHsKLSAgICAgIGdfd2FybmluZyAoIkV4dGVybmFsIHBsdWdpbiBsb2FkZXIgZmFpbGVkLiBUaGlzIG1vc3QgbGlrZWx5IG1lYW5zIHRoYXQgIgotICAgICAgICAgICJ0aGUgcGx1Z2luIGxvYWRlciBoZWxwZXIgYmluYXJ5IHdhcyBub3QgZm91bmQgb3IgY291bGQgbm90IGJlIHJ1bi4gIgotICAgICAgICAgICJZb3UgbWlnaHQgbmVlZCB0byBzZXQgdGhlIEdTVF9QTFVHSU5fU0NBTk5FUiBlbnZpcm9ubWVudCB2YXJpYWJsZSAiCi0gICAgICAgICAgImlmIHlvdXIgc2V0dXAgaXMgdW51c3VhbC4gVGhpcyBzaG91bGQgbm9ybWFsbHkgbm90IGJlIHJlcXVpcmVkICIKLSAgICAgICAgICAidGhvdWdoLiIpOwotICAgICAgY29udGV4dC0+aGVscGVyX3N0YXRlID0gUkVHSVNUUllfU0NBTl9IRUxQRVJfRElTQUJMRUQ7Ci0gICAgfQotICB9Ci0KLSAgLyogQ2hlY2sgaWYgdGhlIGhlbHBlciBpcyBkaXNhYmxlZCAob3IganVzdCBnb3QgZGlzYWJsZWQgYWJvdmUpICovCi0gIGlmIChjb250ZXh0LT5oZWxwZXJfc3RhdGUgPT0gUkVHSVNUUllfU0NBTl9IRUxQRVJfRElTQUJMRUQpIHsKLSAgICAvKiBMb2FkIHBsdWdpbiB0aGUgb2xkIGZhc2hpb25lZCB3YXkuLi4gKi8KLQotICAgIC8qIFdlIGRvbid0IHVzZSBhIEdFcnJvciBoZXJlIGJlY2F1c2UgYSBmYWlsdXJlIHRvIGxvYWQgc29tZSBzaGFyZWQKLSAgICAgKiBvYmplY3RzIGFzIHBsdWdpbnMgaXMgbm9ybWFsIChwYXJ0aWN1bGFybHkgaW4gdGhlIHVuaW5zdGFsbGVkIGNhc2UpCi0gICAgICovCi0gICAgbmV3cGx1Z2luID0gX3ByaXZfZ3N0X3BsdWdpbl9sb2FkX2ZpbGVfZm9yX3JlZ2lzdHJ5IChmaWxlbmFtZSwKLSAgICAgICAgY29udGV4dC0+cmVnaXN0cnksIE5VTEwpOwotICB9Ci0KLSAgaWYgKG5ld3BsdWdpbikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAibWFya2luZyBuZXcgcGx1Z2luICVwIGFzIHJlZ2lzdGVyZWQiLAotICAgICAgICBuZXdwbHVnaW4pOwotICAgIG5ld3BsdWdpbi0+cmVnaXN0ZXJlZCA9IFRSVUU7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAobmV3cGx1Z2luKTsKLSAgICBjaGFuZ2VkID0gVFJVRTsKLSAgfQotI2lmbmRlZiBHU1RfRElTQUJMRV9SRUdJU1RSWQotICBpZiAoIV9fcmVnaXN0cnlfcmV1c2VfcGx1Z2luX3NjYW5uZXIpIHsKLSAgICBjbGVhcl9zY2FuX2NvbnRleHQgKGNvbnRleHQpOwotICAgIGNvbnRleHQtPmhlbHBlcl9zdGF0ZSA9IFJFR0lTVFJZX1NDQU5fSEVMUEVSX05PVF9TVEFSVEVEOwotICB9Ci0jZW5kaWYKLQotICByZXR1cm4gY2hhbmdlZDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1pc19ibGFja2xpc3RlZF9oaWRkZW5fZGlyZWN0b3J5IChjb25zdCBnY2hhciAqIGRpcmVudCkKLXsKLSAgaWYgKEdfTElLRUxZIChkaXJlbnRbMF0gIT0gJy4nKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogc2tpcCB0aGUgLmRlYnVnIGRpcmVjdG9yeSwgdGhlc2UgY29udGFpbiBlbGYgZmlsZXMgdGhhdCBhcmUgbm90Ci0gICAqIHVzZWZ1bCBvciB3b3JzZSwgY2FuIGNyYXNoIGRsb3BlbiAoKSAqLwotICBpZiAoc3RyY21wIChkaXJlbnQsICIuZGVidWciKSA9PSAwKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIGNhbiBhbHNvIHNraXAgLmdpdCBhbmQgLmRlcHMgZGlycywgdGhvc2Ugd29uJ3QgY29udGFpbiB1c2VmdWwgZmlsZXMuCi0gICAqIFRoaXMgc3BlZWRzIHVwIHNjYW5uaW5nIGEgYml0IGluIHVuaW5zdGFsbGVkIHNldHVwcy4gKi8KLSAgaWYgKHN0cmNtcCAoZGlyZW50LCAiLmdpdCIpID09IDAgfHwgc3RyY21wIChkaXJlbnQsICIuZGVwcyIpID09IDApCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwgKEdzdFJlZ2lzdHJ5U2NhbkNvbnRleHQgKiBjb250ZXh0LAotICAgIGNvbnN0IGdjaGFyICogcGF0aCwgaW50IGxldmVsKQotewotICBHRGlyICpkaXI7Ci0gIGNvbnN0IGdjaGFyICpkaXJlbnQ7Ci0gIGdjaGFyICpmaWxlbmFtZTsKLSAgR3N0UGx1Z2luICpwbHVnaW47Ci0gIGdib29sZWFuIGNoYW5nZWQgPSBGQUxTRTsKLQotICBkaXIgPSBnX2Rpcl9vcGVuIChwYXRoLCAwLCBOVUxMKTsKLSAgaWYgKCFkaXIpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHdoaWxlICgoZGlyZW50ID0gZ19kaXJfcmVhZF9uYW1lIChkaXIpKSkgewotICAgIEdTdGF0QnVmIGZpbGVfc3RhdHVzOwotCi0gICAgZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwYXRoLCBkaXJlbnQsIE5VTEwpOwotICAgIGlmIChnX3N0YXQgKGZpbGVuYW1lLCAmZmlsZV9zdGF0dXMpIDwgMCkgewotICAgICAgLyogUGx1Z2luIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGNhY2hlIGFmdGVyIHRoZSBzY2FuIGNvbXBsZXRlcyBpZiBpdAotICAgICAgICogaXMgc3RpbGwgbWFya2VkICdjYWNoZWQnICovCi0gICAgICBnX2ZyZWUgKGZpbGVuYW1lKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmIChmaWxlX3N0YXR1cy5zdF9tb2RlICYgU19JRkRJUikgewotICAgICAgaWYgKEdfVU5MSUtFTFkgKGlzX2JsYWNrbGlzdGVkX2hpZGRlbl9kaXJlY3RvcnkgKGRpcmVudCkpKSB7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAiaWdub3JpbmcgJXMgZGlyZWN0b3J5IiwgZGlyZW50KTsKLSAgICAgICAgZ19mcmVlIChmaWxlbmFtZSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgLyogRklYTUUgMi4wOiBEb24ndCByZWN1cnNlIGludG8gZGlyZWN0b3JpZXMsIHRoaXMgYmVoYXZpb3VyCi0gICAgICAgKiBpcyBpbmNvbnNpc3RlbnQgd2l0aCBvdGhlciBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgICovCi0gICAgICBpZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgInJlY3Vyc2luZyBpbnRvIGRpcmVjdG9yeSAlcyIsCi0gICAgICAgICAgICBmaWxlbmFtZSk7Ci0gICAgICAgIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCAoY29udGV4dCwgZmlsZW5hbWUsIGxldmVsIC0gMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAoY29udGV4dC0+cmVnaXN0cnksICJub3QgcmVjdXJzaW5nIGludG8gZGlyZWN0b3J5ICVzLCAiCi0gICAgICAgICAgICAicmVjdXJzaW9uIGxldmVsIHRvbyBkZWVwIiwgZmlsZW5hbWUpOwotICAgICAgfQotICAgICAgZ19mcmVlIChmaWxlbmFtZSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKCEoZmlsZV9zdGF0dXMuc3RfbW9kZSAmIFNfSUZSRUcpKSB7Ci0gICAgICBHU1RfVFJBQ0VfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgIiVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSwgaWdub3JpbmciLAotICAgICAgICAgIGZpbGVuYW1lKTsKLSAgICAgIGdfZnJlZSAoZmlsZW5hbWUpOwotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGlmICghZ19zdHJfaGFzX3N1ZmZpeCAoZGlyZW50LCBHX01PRFVMRV9TVUZGSVgpCi0jaWZkZWYgR1NUX0VYVFJBX01PRFVMRV9TVUZGSVgKLSAgICAgICAgJiYgIWdfc3RyX2hhc19zdWZmaXggKGRpcmVudCwgR1NUX0VYVFJBX01PRFVMRV9TVUZGSVgpCi0jZW5kaWYKLSAgICAgICAgKSB7Ci0gICAgICBHU1RfVFJBQ0VfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwKLSAgICAgICAgICAiZXh0ZW5zaW9uIGlzIG5vdCByZWNvZ25pemVkIGFzIG1vZHVsZSBmaWxlLCBpZ25vcmluZyBmaWxlICVzIiwKLSAgICAgICAgICBmaWxlbmFtZSk7Ci0gICAgICBnX2ZyZWUgKGZpbGVuYW1lKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgImZpbGUgJXMgbG9va3MgbGlrZSBhIHBvc3NpYmxlIG1vZHVsZSIsCi0gICAgICAgIGZpbGVuYW1lKTsKLQotICAgIC8qIHRyeSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwbHVnaW4tbW92ZSBwYWluICovCi0gICAgaWYgKGdfc3RyX2hhc19wcmVmaXggKGRpcmVudCwgImxpYmdzdHZhbHZlIikgfHwKLSAgICAgICAgZ19zdHJfaGFzX3ByZWZpeCAoZGlyZW50LCAibGliZ3N0c2VsZWN0b3IiKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgImlnbm9yaW5nIG9sZCBwbHVnaW4gJXMgd2hpY2ggIgotICAgICAgICAgICJoYXMgYmVlbiBtZXJnZWQgaW50byB0aGUgY29yZWxlbWVudHMgcGx1Z2luIiwgZmlsZW5hbWUpOwotICAgICAgLyogUGx1Z2luIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGNhY2hlIGFmdGVyIHRoZSBzY2FuIGNvbXBsZXRlcyBpZiBpdAotICAgICAgICogaXMgc3RpbGwgbWFya2VkICdjYWNoZWQnICovCi0gICAgICBnX2ZyZWUgKGZpbGVuYW1lKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIHBsdWctaW5zIGFyZSBjb25zaWRlcmVkIHVuaXF1ZSBieSBiYXNlbmFtZTsgaWYgdGhlIGdpdmVuIG5hbWUKLSAgICAgKiB3YXMgYWxyZWFkeSBzZWVuIGJ5IHRoZSByZWdpc3RyeSwgd2UgaWdub3JlIGl0ICovCi0gICAgcGx1Z2luID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9ibiAoY29udGV4dC0+cmVnaXN0cnksIGRpcmVudCk7Ci0gICAgaWYgKHBsdWdpbikgewotICAgICAgZ2Jvb2xlYW4gZW52X3ZhcnNfY2hhbmdlZCwgZGVwc19jaGFuZ2VkID0gRkFMU0U7Ci0KLSAgICAgIGlmIChwbHVnaW4tPnJlZ2lzdGVyZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY29udGV4dC0+cmVnaXN0cnksCi0gICAgICAgICAgICAicGx1Z2luIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9tIHBhdGggXCIlc1wiIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAocGx1Z2luLT5maWxlbmFtZSkpOwotICAgICAgICBnX2ZyZWUgKGZpbGVuYW1lKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGVudl92YXJzX2NoYW5nZWQgPSBfcHJpdl9wbHVnaW5fZGVwc19lbnZfdmFyc19jaGFuZ2VkIChwbHVnaW4pOwotCi0gICAgICAvKiBJZiBhIGZpbGUgd2l0aCBhIGNlcnRhaW4gYmFzZW5hbWUgaXMgc2VlbiBvbiBhIGRpZmZlcmVudCBwYXRoLAotICAgICAgICogdXBkYXRlIHRoZSBwbHVnaW4gdG8gZW5zdXJlIHRoZSByZWdpc3RyeSBjYWNoZSB3aWxsIHJlZmxlY3QgdXAKLSAgICAgICAqIHRvIGRhdGUgaW5mb3JtYXRpb24gKi8KLQotICAgICAgaWYgKHBsdWdpbi0+ZmlsZV9tdGltZSA9PSBmaWxlX3N0YXR1cy5zdF9tdGltZSAmJgotICAgICAgICAgIHBsdWdpbi0+ZmlsZV9zaXplID09IGZpbGVfc3RhdHVzLnN0X3NpemUgJiYgIWVudl92YXJzX2NoYW5nZWQgJiYKLSAgICAgICAgICAhKGRlcHNfY2hhbmdlZCA9IF9wcml2X3BsdWdpbl9kZXBzX2ZpbGVzX2NoYW5nZWQgKHBsdWdpbikpICYmCi0gICAgICAgICAgIXN0cmNtcCAocGx1Z2luLT5maWxlbmFtZSwgZmlsZW5hbWUpKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgImZpbGUgJXMgY2FjaGVkIiwgZmlsZW5hbWUpOwotICAgICAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBsdWdpbiwgR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRCk7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwKLSAgICAgICAgICAgICJtYXJraW5nIHBsdWdpbiAlcCBhcyByZWdpc3RlcmVkIGFzICVzIiwgcGx1Z2luLCBmaWxlbmFtZSk7Ci0gICAgICAgIHBsdWdpbi0+cmVnaXN0ZXJlZCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAiY2FjaGVkIGluZm8gZm9yICVzIGlzIHN0YWxlIiwKLSAgICAgICAgICAgIGZpbGVuYW1lKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY29udGV4dC0+cmVnaXN0cnksICJtdGltZSAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAhPSAlIgotICAgICAgICAgICAgR19HSU5UNjRfRk9STUFUICIgb3Igc2l6ZSAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAhPSAlIgotICAgICAgICAgICAgR19HSU5UNjRfRk9STUFUICIgb3IgZXh0ZXJuYWwgZGVwZW5kZW5jeSBlbnZfdmFycyBjaGFuZ2VkOiAlZCBvciIKLSAgICAgICAgICAgICIgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGNoYW5nZWQ6ICVkIG9yIG9sZCBwYXRoICVzICE9IG5ldyBwYXRoICVzIiwKLSAgICAgICAgICAgIChnaW50NjQpIHBsdWdpbi0+ZmlsZV9tdGltZSwgKGdpbnQ2NCkgZmlsZV9zdGF0dXMuc3RfbXRpbWUsCi0gICAgICAgICAgICAoZ2ludDY0KSBwbHVnaW4tPmZpbGVfc2l6ZSwgKGdpbnQ2NCkgZmlsZV9zdGF0dXMuc3Rfc2l6ZSwKLSAgICAgICAgICAgIGVudl92YXJzX2NoYW5nZWQsIGRlcHNfY2hhbmdlZCwgcGx1Z2luLT5maWxlbmFtZSwgZmlsZW5hbWUpOwotICAgICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbiAoY29udGV4dC0+cmVnaXN0cnksIHBsdWdpbik7Ci0gICAgICAgIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGx1Z2luX2ZpbGUgKGNvbnRleHQsIGZpbGVuYW1lLAotICAgICAgICAgICAgZmlsZV9zdGF0dXMuc3Rfc2l6ZSwgZmlsZV9zdGF0dXMuc3RfbXRpbWUpOwotICAgICAgfQotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChjb250ZXh0LT5yZWdpc3RyeSwgImZpbGUgJXMgbm90IHlldCBpbiByZWdpc3RyeSIsCi0gICAgICAgICAgZmlsZW5hbWUpOwotICAgICAgY2hhbmdlZCB8PSBnc3RfcmVnaXN0cnlfc2Nhbl9wbHVnaW5fZmlsZSAoY29udGV4dCwgZmlsZW5hbWUsCi0gICAgICAgICAgZmlsZV9zdGF0dXMuc3Rfc2l6ZSwgZmlsZV9zdGF0dXMuc3RfbXRpbWUpOwotICAgIH0KLQotICAgIGdfZnJlZSAoZmlsZW5hbWUpOwotICB9Ci0KLSAgZ19kaXJfY2xvc2UgKGRpcik7Ci0KLSAgcmV0dXJuIGNoYW5nZWQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9pbnRlcm5hbCAoR3N0UmVnaXN0cnlTY2FuQ29udGV4dCAqIGNvbnRleHQsCi0gICAgY29uc3QgZ2NoYXIgKiBwYXRoKQotewotICBnYm9vbGVhbiBjaGFuZ2VkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAic2Nhbm5pbmcgcGF0aCAlcyIsIHBhdGgpOwotICBjaGFuZ2VkID0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbCAoY29udGV4dCwgcGF0aCwgMTApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGNvbnRleHQtPnJlZ2lzdHJ5LCAicmVnaXN0cnkgY2hhbmdlZCBpbiBwYXRoICVzOiAlZCIsIHBhdGgsCi0gICAgICBjaGFuZ2VkKTsKLSAgcmV0dXJuIGNoYW5nZWQ7Ci19Ci0KLS8qKgotICogZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aDoKLSAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5IHRvIGFkZCBmb3VuZCBwbHVnaW5zIHRvCi0gKiBAcGF0aDogdGhlIHBhdGggdG8gc2NhbgotICoKLSAqIFNjYW4gdGhlIGdpdmVuIHBhdGggZm9yIHBsdWdpbnMgdG8gYWRkIHRvIHRoZSByZWdpc3RyeS4gVGhlIHN5bnRheCBvZiB0aGUKLSAqIHBhdGggaXMgc3BlY2lmaWMgdG8gdGhlIHJlZ2lzdHJ5LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHJlZ2lzdHJ5IGNoYW5nZWQKLSAqLwotZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9zY2FuX3BhdGggKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGdjaGFyICogcGF0aCkKLXsKLSAgR3N0UmVnaXN0cnlTY2FuQ29udGV4dCBjb250ZXh0OwotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYXRoICE9IE5VTEwsIEZBTFNFKTsKLQotICBpbml0X3NjYW5fY29udGV4dCAoJmNvbnRleHQsIHJlZ2lzdHJ5KTsKLQotICByZXN1bHQgPSBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2ludGVybmFsICgmY29udGV4dCwgcGF0aCk7Ci0KLSAgY2xlYXJfc2Nhbl9jb250ZXh0ICgmY29udGV4dCk7Ci0gIHJlc3VsdCB8PSBjb250ZXh0LmNoYW5nZWQ7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fZ3N0X3BsdWdpbl9mZWF0dXJlX2ZpbHRlcl9wbHVnaW5fbmFtZSAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICByZXR1cm4gKHN0cmNtcCAoZmVhdHVyZS0+cGx1Z2luX25hbWUsIChnY2hhciAqKSB1c2VyX2RhdGEpID09IDApOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbjoKLSAqIEByZWdpc3RyeTogYSAjR3N0UmVnaXN0cnkuCi0gKiBAbmFtZTogYSBwbHVnaW4gbmFtZS4KLSAqCi0gKiBSZXRyaWV2ZXMgYSAjR0xpc3Qgb2YgZmVhdHVyZXMgb2YgdGhlIHBsdWdpbiB3aXRoIG5hbWUgQG5hbWUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlBsdWdpbkZlYXR1cmUpOiBhICNHTGlzdCBvZgotICogICAgICNHc3RQbHVnaW5GZWF0dXJlLiBVc2UgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIGFmdGVyIHVzYWdlLgotICovCi1HTGlzdCAqCi1nc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyIChyZWdpc3RyeSwKLSAgICAgIF9nc3RfcGx1Z2luX2ZlYXR1cmVfZmlsdGVyX3BsdWdpbl9uYW1lLCBGQUxTRSwgKGdwb2ludGVyKSBuYW1lKTsKLX0KLQotLyogVW5yZWYgYW5kIGRlbGV0ZSB0aGUgZGVmYXVsdCByZWdpc3RyeSAqLwotdm9pZAotX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NsZWFudXAgKHZvaWQpCi17Ci0gIEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeTsKLQotICBnX211dGV4X2xvY2sgKCZfZ3N0X3JlZ2lzdHJ5X211dGV4KTsKLSAgaWYgKChyZWdpc3RyeSA9IF9nc3RfcmVnaXN0cnlfZGVmYXVsdCkgIT0gTlVMTCkgewotICAgIF9nc3RfcmVnaXN0cnlfZGVmYXVsdCA9IE5VTEw7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZfZ3N0X3JlZ2lzdHJ5X211dGV4KTsKLQotICAvKiB1bnJlZiBvdXRzaWRlIG9mIHRoZSBsb2NrIGJlY2F1c2Ugd2UgY2FuLiAqLwotICBpZiAocmVnaXN0cnkpCi0gICAgZ3N0X29iamVjdF91bnJlZiAocmVnaXN0cnkpOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb246Ci0gKiBAcmVnaXN0cnk6IGEgI0dzdFJlZ2lzdHJ5Ci0gKiBAZmVhdHVyZV9uYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSAoZS5nLiAib2dnZGVtdXgiKQotICogQG1pbl9tYWpvcjogdGhlIG1pbmltdW0gbWFqb3IgdmVyc2lvbiBudW1iZXIKLSAqIEBtaW5fbWlub3I6IHRoZSBtaW5pbXVtIG1pbm9yIHZlcnNpb24gbnVtYmVyCi0gKiBAbWluX21pY3JvOiB0aGUgbWluaW11bSBtaWNybyB2ZXJzaW9uIG51bWJlcgotICoKLSAqIENoZWNrcyB3aGV0aGVyIGEgcGx1Z2luIGZlYXR1cmUgYnkgdGhlIGdpdmVuIG5hbWUgZXhpc3RzIGluCi0gKiBAcmVnaXN0cnkgYW5kIHdoZXRoZXIgaXRzIHZlcnNpb24gaXMgYXQgbGVhc3QgdGhlCi0gKiB2ZXJzaW9uIHJlcXVpcmVkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBmZWF0dXJlIGNvdWxkIGJlIGZvdW5kIGFuZCB0aGUgdmVyc2lvbiBpcwotICogdGhlIHNhbWUgYXMgdGhlIHJlcXVpcmVkIHZlcnNpb24gb3IgbmV3ZXIsIGFuZCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKLSAgICBjb25zdCBnY2hhciAqIGZlYXR1cmVfbmFtZSwgZ3VpbnQgbWluX21ham9yLCBndWludCBtaW5fbWlub3IsCi0gICAgZ3VpbnQgbWluX21pY3JvKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmVhdHVyZV9uYW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfREVCVUcgKCJMb29raW5nIHVwIHBsdWdpbiBmZWF0dXJlICclcyciLCBmZWF0dXJlX25hbWUpOwotCi0gIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBmZWF0dXJlX25hbWUpOwotICBpZiAoZmVhdHVyZSkgewotICAgIHJldCA9IGdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uIChmZWF0dXJlLCBtaW5fbWFqb3IsIG1pbl9taW5vciwKLSAgICAgICAgbWluX21pY3JvKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUcgKCJDb3VsZCBub3QgZmluZCBwbHVnaW4gZmVhdHVyZSAnJXMnIiwgZmVhdHVyZV9uYW1lKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sb2FkX3BsdWdpbl9mdW5jIChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFBsdWdpbiAqcGx1Z2luOwotICBjb25zdCBnY2hhciAqZmlsZW5hbWU7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICBmaWxlbmFtZSA9IChjb25zdCBnY2hhciAqKSBkYXRhOwotICBHU1RfREVCVUcgKCJQcmUtbG9hZGluZyBwbHVnaW4gJXMiLCBmaWxlbmFtZSk7Ci0KLSAgcGx1Z2luID0gZ3N0X3BsdWdpbl9sb2FkX2ZpbGUgKGZpbGVuYW1lLCAmZXJyKTsKLQotICBpZiAocGx1Z2luKSB7Ci0gICAgR1NUX0lORk8gKCJMb2FkZWQgcGx1Z2luOiBcIiVzXCIiLCBmaWxlbmFtZSk7Ci0KLSAgICBnc3RfcmVnaXN0cnlfYWRkX3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwgcGx1Z2luKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAvKiBSZXBvcnQgZXJyb3IgdG8gdXNlciwgYW5kIGZyZWUgZXJyb3IgKi8KLSAgICAgIEdTVF9FUlJPUiAoIkZhaWxlZCB0byBsb2FkIHBsdWdpbjogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBsb2FkIHBsdWdpbjogXCIlc1wiIiwgZmlsZW5hbWUpOwotICAgIH0KLSAgfQotfQotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCi0vKiBVbnJlZiBhbGwgcGx1Z2lucyBtYXJrZWQgJ2NhY2hlZCcsIHRvIGNsZWFyIG9sZCBwbHVnaW5zIHRoYXQgbm8KLSAqIGxvbmdlciBleGlzdC4gUmV0dXJucyAlVFJVRSBpZiBhbnkgcGx1Z2lucyB3ZXJlIHJlbW92ZWQgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5KQotewotICBHTGlzdCAqZzsKLSAgR0xpc3QgKmdfbmV4dDsKLSAgR3N0UGx1Z2luICpwbHVnaW47Ci0gIGdib29sZWFuIGNoYW5nZWQgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JFR0lTVFJZIChyZWdpc3RyeSksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJlZ2lzdHJ5KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgInJlbW92aW5nIGNhY2hlZCBwbHVnaW5zIik7Ci0gIGcgPSByZWdpc3RyeS0+cHJpdi0+cGx1Z2luczsKLSAgd2hpbGUgKGcpIHsKLSAgICBnX25leHQgPSBnLT5uZXh0OwotICAgIHBsdWdpbiA9IGctPmRhdGE7Ci0gICAgaWYgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBsdWdpbiwgR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJlZ2lzdHJ5LCAicmVtb3ZpbmcgY2FjaGVkIHBsdWdpbiBcIiVzXCIiLAotICAgICAgICAgIEdTVF9TVFJfTlVMTCAocGx1Z2luLT5maWxlbmFtZSkpOwotICAgICAgcmVnaXN0cnktPnByaXYtPnBsdWdpbnMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKHJlZ2lzdHJ5LT5wcml2LT5wbHVnaW5zLCBnKTsKLSAgICAgIC0tcmVnaXN0cnktPnByaXYtPm5fcGx1Z2luczsKLSAgICAgIGlmIChHX0xJS0VMWSAocGx1Z2luLT5iYXNlbmFtZSkpCi0gICAgICAgIGdfaGFzaF90YWJsZV9yZW1vdmUgKHJlZ2lzdHJ5LT5wcml2LT5iYXNlbmFtZV9oYXNoLCBwbHVnaW4tPmJhc2VuYW1lKTsKLSAgICAgIGdzdF9yZWdpc3RyeV9yZW1vdmVfZmVhdHVyZXNfZm9yX3BsdWdpbl91bmxvY2tlZCAocmVnaXN0cnksIHBsdWdpbik7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOwotICAgICAgY2hhbmdlZCA9IFRSVUU7Ci0gICAgfQotICAgIGcgPSBnX25leHQ7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAocmVnaXN0cnkpOwotCi0gIHJldHVybiBjaGFuZ2VkOwotfQotCi10eXBlZGVmIGVudW0KLXsKLSAgUkVHSVNUUllfU0NBTl9BTkRfVVBEQVRFX0ZBSUxVUkUgPSAwLAotICBSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfU1VDQ0VTU19OT1RfQ0hBTkdFRCwKLSAgUkVHSVNUUllfU0NBTl9BTkRfVVBEQVRFX1NVQ0NFU1NfVVBEQVRFRAotfSBHc3RSZWdpc3RyeVNjYW5BbmRVcGRhdGVSZXN1bHQ7Ci0KLS8qCi0gKiBzY2FuX2FuZF91cGRhdGVfcmVnaXN0cnk6Ci0gKiBAZGVmYXVsdF9yZWdpc3RyeTogdGhlICNHc3RSZWdpc3RyeQotICogQHJlZ2lzdHJ5X2ZpbGU6IHJlZ2lzdHJ5IGZpbGVuYW1lCi0gKiBAd3JpdGVfY2hhbmdlczogd3JpdGUgcmVnaXN0cnkgaWYgaXQgaGFzIGNoYW5nZWQ/Ci0gKgotICogU2NhbnMgZm9yIHJlZ2lzdHJ5IGNoYW5nZXMgYW5kIGV2ZW50dWFsbHkgdXBkYXRlcyB0aGUgcmVnaXN0cnkgY2FjaGUuCi0gKgotICogUmV0dXJuOiAlUkVHSVNUUllfU0NBTl9BTkRfVVBEQVRFX0ZBSUxVUkUgaWYgdGhlIHJlZ2lzdHJ5IGNvdWxkIG5vdCBzY2FubmVkCi0gKiAgICAgICAgIG9yIHVwZGF0ZWQsICVSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfU1VDQ0VTU19OT1RfQ0hBTkdFRCBpZiB0aGUKLSAqICAgICAgICAgcmVnaXN0cnkgaXMgY2xlYW4gYW5kICVSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfU1VDQ0VTU19VUERBVEVEIGlmCi0gKiAgICAgICAgIGl0IGhhcyBiZWVuIHVwZGF0ZWQgYW5kIHRoZSBjYWNoZSBuZWVkcyB0byBiZSByZS1yZWFkLgotICovCi1zdGF0aWMgR3N0UmVnaXN0cnlTY2FuQW5kVXBkYXRlUmVzdWx0Ci1zY2FuX2FuZF91cGRhdGVfcmVnaXN0cnkgKEdzdFJlZ2lzdHJ5ICogZGVmYXVsdF9yZWdpc3RyeSwKLSAgICBjb25zdCBnY2hhciAqIHJlZ2lzdHJ5X2ZpbGUsIGdib29sZWFuIHdyaXRlX2NoYW5nZXMsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgY29uc3QgZ2NoYXIgKnBsdWdpbl9wYXRoOwotICBnYm9vbGVhbiBjaGFuZ2VkID0gRkFMU0U7Ci0gIEdMaXN0ICpsOwotICBHc3RSZWdpc3RyeVNjYW5Db250ZXh0IGNvbnRleHQ7Ci0KLSAgR1NUX0lORk8gKCJWYWxpZGF0aW5nIHBsdWdpbnMgZnJvbSByZWdpc3RyeSBjYWNoZTogJXMiLCByZWdpc3RyeV9maWxlKTsKLQotICBpbml0X3NjYW5fY29udGV4dCAoJmNvbnRleHQsIGRlZmF1bHRfcmVnaXN0cnkpOwotCi0gIC8qIEl0IHNvdW5kcyB0ZW1wdGluZyB0byBqdXN0IGNvbXBhcmUgdGhlIG10aW1lIG9mIGRpcmVjdG9yaWVzIHdpdGggdGhlIG10aW1lCi0gICAqIG9mIHRoZSByZWdpc3RyeSBjYWNoZSwgYnV0IGl0IGRvZXMgbm90IHdvcmsuIEl0IHdvdWxkIG5vdCBjYXRjaCB1cGRhdGVkCi0gICAqIHBsdWdpbnMsIHdoaWNoIG1pZ2h0IGJyaW5nIG1vcmUgb3IgbGVzcyBmZWF0dXJlcy4KLSAgICovCi0KLSAgLyogc2NhbiBwYXRocyBzcGVjaWZpZWQgdmlhIC0tZ3N0LXBsdWdpbi1wYXRoICovCi0gIEdTVF9ERUJVRyAoInNjYW5uaW5nIHBhdGhzIGFkZGVkIHZpYSAtLWdzdC1wbHVnaW4tcGF0aCIpOwotICBmb3IgKGwgPSBfcHJpdl9nc3RfcGx1Z2luX3BhdGhzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR1NUX0lORk8gKCJTY2FubmluZyBwbHVnaW4gcGF0aDogXCIlc1wiIiwgKGdjaGFyICopIGwtPmRhdGEpOwotICAgIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9pbnRlcm5hbCAoJmNvbnRleHQsIChnY2hhciAqKSBsLT5kYXRhKTsKLSAgfQotICAvKiBrZWVwIHBsdWdpbl9wYXRocyBhcm91bmQgaW4gY2FzZSBhIHJlLXNjYW4gaXMgZm9yY2VkIGxhdGVyIG9uICovCi0KLSAgLyogR1NUX1BMVUdJTl9QQVRIIHNwZWNpZmllcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2NhbiBmb3IKLSAgICogYWRkaXRpb25hbCBwbHVnaW5zLiAgVGhlc2UgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHN5c3RlbSBwbHVnaW5zICovCi0gIHBsdWdpbl9wYXRoID0gZ19nZXRlbnYgKCJHU1RfUExVR0lOX1BBVEhfMV8wIik7Ci0gIGlmIChwbHVnaW5fcGF0aCA9PSBOVUxMKQotICAgIHBsdWdpbl9wYXRoID0gZ19nZXRlbnYgKCJHU1RfUExVR0lOX1BBVEgiKTsKLSAgaWYgKHBsdWdpbl9wYXRoKSB7Ci0gICAgY2hhciAqKmxpc3Q7Ci0gICAgaW50IGk7Ci0KLSAgICBHU1RfREVCVUcgKCJHU1RfUExVR0lOX1BBVEggc2V0IHRvICVzIiwgcGx1Z2luX3BhdGgpOwotICAgIGxpc3QgPSBnX3N0cnNwbGl0IChwbHVnaW5fcGF0aCwgR19TRUFSQ0hQQVRIX1NFUEFSQVRPUl9TLCAwKTsKLSAgICBmb3IgKGkgPSAwOyBsaXN0W2ldOyBpKyspIHsKLSAgICAgIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9pbnRlcm5hbCAoJmNvbnRleHQsIGxpc3RbaV0pOwotICAgIH0KLSAgICBnX3N0cmZyZWV2IChsaXN0KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUcgKCJHU1RfUExVR0lOX1BBVEggbm90IHNldCIpOwotICB9Ci0KLSAgLyogR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBzcGVjaWZpZXMgYSBsaXN0IG9mIHBsdWdpbnMgdGhhdCBhcmUgYWx3YXlzCi0gICAqIGxvYWRlZCBieSBkZWZhdWx0LiAgSWYgbm90IHNldCwgdGhpcyBkZWZhdWx0cyB0byB0aGUgc3lzdGVtLWluc3RhbGxlZAotICAgKiBwYXRoLCBhbmQgdGhlIHBsdWdpbnMgaW5zdGFsbGVkIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgKi8KLSAgcGx1Z2luX3BhdGggPSBnX2dldGVudiAoIkdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wIik7Ci0gIGlmIChwbHVnaW5fcGF0aCA9PSBOVUxMKQotICAgIHBsdWdpbl9wYXRoID0gZ19nZXRlbnYgKCJHU1RfUExVR0lOX1NZU1RFTV9QQVRIIik7Ci0gIGlmIChwbHVnaW5fcGF0aCA9PSBOVUxMKSB7Ci0gICAgY2hhciAqaG9tZV9wbHVnaW5zOwotCi0gICAgR1NUX0RFQlVHICgiR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBub3Qgc2V0Iik7Ci0KLSAgICAvKiBwbHVnaW5zIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgdGFrZSBwcmVjZWRlbmNlIG92ZXIKLSAgICAgKiBzeXN0ZW0taW5zdGFsbGVkIG9uZXMgKi8KLSAgICBob21lX3BsdWdpbnMgPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF91c2VyX2RhdGFfZGlyICgpLAotICAgICAgICAiZ3N0cmVhbWVyLSIgR1NUX0FQSV9WRVJTSU9OLCAicGx1Z2lucyIsIE5VTEwpOwotCi0gICAgR1NUX0RFQlVHICgic2Nhbm5pbmcgaG9tZSBwbHVnaW5zICVzIiwgaG9tZV9wbHVnaW5zKTsKLSAgICBjaGFuZ2VkIHw9IGdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfaW50ZXJuYWwgKCZjb250ZXh0LCBob21lX3BsdWdpbnMpOwotICAgIGdfZnJlZSAoaG9tZV9wbHVnaW5zKTsKLQotICAgIC8qIGFkZCB0aGUgbWFpbiAoaW5zdGFsbGVkKSBsaWJyYXJ5IHBhdGggKi8KLQotI2lmZGVmIEdfT1NfV0lOMzIKLSAgICB7Ci0gICAgICBjaGFyICpiYXNlX2RpcjsKLSAgICAgIGNoYXIgKmRpcjsKLQotICAgICAgYmFzZV9kaXIgPQotICAgICAgICAgIGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2RpcmVjdG9yeV9vZl9tb2R1bGUKLSAgICAgICAgICAoX3ByaXZfZ3N0X2RsbF9oYW5kbGUpOwotCi0gICAgICBkaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChiYXNlX2RpciwKLSNpZmRlZiBfREVCVUcKLSAgICAgICAgICAiZGVidWciCi0jZW5kaWYKLSAgICAgICAgICAibGliIiwgImdzdHJlYW1lci0iIEdTVF9BUElfVkVSU0lPTiwgTlVMTCk7Ci0gICAgICBHU1RfREVCVUcgKCJzY2FubmluZyBETEwgZGlyICVzIiwgZGlyKTsKLQotICAgICAgY2hhbmdlZCB8PSBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2ludGVybmFsICgmY29udGV4dCwgZGlyKTsKLQotICAgICAgZ19mcmVlIChkaXIpOwotICAgICAgZ19mcmVlIChiYXNlX2Rpcik7Ci0gICAgfQotI2Vsc2UKLSAgICBHU1RfREVCVUcgKCJzY2FubmluZyBtYWluIHBsdWdpbnMgJXMiLCBQTFVHSU5ESVIpOwotICAgIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9pbnRlcm5hbCAoJmNvbnRleHQsIFBMVUdJTkRJUik7Ci0jZW5kaWYKLSAgfSBlbHNlIHsKLSAgICBnY2hhciAqKmxpc3Q7Ci0gICAgZ2ludCBpOwotCi0gICAgR1NUX0RFQlVHICgiR1NUX1BMVUdJTl9TWVNURU1fUEFUSCBzZXQgdG8gJXMiLCBwbHVnaW5fcGF0aCk7Ci0gICAgbGlzdCA9IGdfc3Ryc3BsaXQgKHBsdWdpbl9wYXRoLCBHX1NFQVJDSFBBVEhfU0VQQVJBVE9SX1MsIDApOwotICAgIGZvciAoaSA9IDA7IGxpc3RbaV07IGkrKykgewotICAgICAgY2hhbmdlZCB8PSBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2ludGVybmFsICgmY29udGV4dCwgbGlzdFtpXSk7Ci0gICAgfQotICAgIGdfc3RyZnJlZXYgKGxpc3QpOwotICB9Ci0KLSAgY2xlYXJfc2Nhbl9jb250ZXh0ICgmY29udGV4dCk7Ci0gIGNoYW5nZWQgfD0gY29udGV4dC5jaGFuZ2VkOwotCi0gIC8qIFJlbW92ZSBjYWNoZWQgcGx1Z2lucyBzbyBzdGFsZSBpbmZvIGlzIGNsZWFyZWQuICovCi0gIGNoYW5nZWQgfD0gZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9jYWNoZV9wbHVnaW5zIChkZWZhdWx0X3JlZ2lzdHJ5KTsKLQotICBpZiAoIWNoYW5nZWQpIHsKLSAgICBHU1RfSU5GTyAoIlJlZ2lzdHJ5IGNhY2hlIGhhcyBub3QgY2hhbmdlZCIpOwotICAgIHJldHVybiBSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfU1VDQ0VTU19OT1RfQ0hBTkdFRDsKLSAgfQotCi0gIGlmICghd3JpdGVfY2hhbmdlcykgewotICAgIEdTVF9JTkZPICgiUmVnaXN0cnkgY2FjaGUgY2hhbmdlZCwgYnV0IHdyaXRpbmcgaXMgZGlzYWJsZWQuIE5vdCB3cml0aW5nLiIpOwotICAgIHJldHVybiBSRUdJU1RSWV9TQ0FOX0FORF9VUERBVEVfRkFJTFVSRTsKLSAgfQotCi0gIEdTVF9JTkZPICgiUmVnaXN0cnkgY2FjaGUgY2hhbmdlZC4gV3JpdGluZyBuZXcgcmVnaXN0cnkgY2FjaGUiKTsKLSAgaWYgKCFwcml2X2dzdF9yZWdpc3RyeV9iaW5hcnlfd3JpdGVfY2FjaGUgKGRlZmF1bHRfcmVnaXN0cnksCi0gICAgICAgICAgZGVmYXVsdF9yZWdpc3RyeS0+cHJpdi0+cGx1Z2lucywgcmVnaXN0cnlfZmlsZSkpIHsKLSAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdTVF9DT1JFX0VSUk9SLCBHU1RfQ09SRV9FUlJPUl9GQUlMRUQsCi0gICAgICAgIF8oIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIiksCi0gICAgICAgIHJlZ2lzdHJ5X2ZpbGUsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgcmV0dXJuIFJFR0lTVFJZX1NDQU5fQU5EX1VQREFURV9GQUlMVVJFOwotICB9Ci0KLSAgR1NUX0lORk8gKCJSZWdpc3RyeSBjYWNoZSB3cml0dGVuIHN1Y2Nlc3NmdWxseSIpOwotICByZXR1cm4gUkVHSVNUUllfU0NBTl9BTkRfVVBEQVRFX1NVQ0NFU1NfVVBEQVRFRDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1lbnN1cmVfY3VycmVudF9yZWdpc3RyeSAoR0Vycm9yICoqIGVycm9yKQotewotICBnY2hhciAqcmVnaXN0cnlfZmlsZTsKLSAgR3N0UmVnaXN0cnkgKmRlZmF1bHRfcmVnaXN0cnk7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIGdib29sZWFuIGRvX3VwZGF0ZSA9IFRSVUU7Ci0gIGdib29sZWFuIGhhdmVfY2FjaGUgPSBUUlVFOwotCi0gIGRlZmF1bHRfcmVnaXN0cnkgPSBnc3RfcmVnaXN0cnlfZ2V0ICgpOwotCi0gIHJlZ2lzdHJ5X2ZpbGUgPSBnX3N0cmR1cCAoZ19nZXRlbnYgKCJHU1RfUkVHSVNUUllfMV8wIikpOwotICBpZiAocmVnaXN0cnlfZmlsZSA9PSBOVUxMKQotICAgIHJlZ2lzdHJ5X2ZpbGUgPSBnX3N0cmR1cCAoZ19nZXRlbnYgKCJHU1RfUkVHSVNUUlkiKSk7Ci0gIGlmIChyZWdpc3RyeV9maWxlID09IE5VTEwpIHsKLSAgICByZWdpc3RyeV9maWxlID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9jYWNoZV9kaXIgKCksCi0gICAgICAgICJnc3RyZWFtZXItIiBHU1RfQVBJX1ZFUlNJT04sICJyZWdpc3RyeS4iIFRBUkdFVF9DUFUgIi5iaW4iLCBOVUxMKTsKLSAgfQotCi0gIGlmICghX2dzdF9kaXNhYmxlX3JlZ2lzdHJ5X2NhY2hlKSB7Ci0gICAgR1NUX0lORk8gKCJyZWFkaW5nIHJlZ2lzdHJ5IGNhY2hlOiAlcyIsIHJlZ2lzdHJ5X2ZpbGUpOwotICAgIGhhdmVfY2FjaGUgPSBwcml2X2dzdF9yZWdpc3RyeV9iaW5hcnlfcmVhZF9jYWNoZSAoZGVmYXVsdF9yZWdpc3RyeSwKLSAgICAgICAgcmVnaXN0cnlfZmlsZSk7Ci0gICAgLyogT25seSBldmVyIHJlYWQgdGhlIHJlZ2lzdHJ5IGNhY2hlIG9uY2UsIHRoZW4gZGlzYWJsZSBpdCBmb3IKLSAgICAgKiBzdWJzZXF1ZW50IHVwZGF0ZXMgZHVyaW5nIHRoZSBwcm9ncmFtIGxpZmV0aW1lICovCi0gICAgX2dzdF9kaXNhYmxlX3JlZ2lzdHJ5X2NhY2hlID0gVFJVRTsKLSAgfQotCi0gIGlmIChoYXZlX2NhY2hlKSB7Ci0gICAgZG9fdXBkYXRlID0gIV9wcml2X2dzdF9kaXNhYmxlX3JlZ2lzdHJ5X3VwZGF0ZTsKLSAgICBpZiAoZG9fdXBkYXRlKSB7Ci0gICAgICBjb25zdCBnY2hhciAqdXBkYXRlX2VudjsKLQotICAgICAgaWYgKCh1cGRhdGVfZW52ID0gZ19nZXRlbnYgKCJHU1RfUkVHSVNUUllfVVBEQVRFIikpKSB7Ci0gICAgICAgIC8qIGRvIHVwZGF0ZSBmb3IgYW55IHZhbHVlIGRpZmZlcmVudCBmcm9tICJubyIgKi8KLSAgICAgICAgZG9fdXBkYXRlID0gKHN0cmNtcCAodXBkYXRlX2VudiwgIm5vIikgIT0gMCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGRvX3VwZGF0ZSkgewotICAgIGNvbnN0IGdjaGFyICpyZXVzZV9lbnY7Ci0KLSAgICBpZiAoKHJldXNlX2VudiA9IGdfZ2V0ZW52ICgiR1NUX1JFR0lTVFJZX1JFVVNFX1BMVUdJTl9TQ0FOTkVSIikpKSB7Ci0gICAgICAvKiBkbyByZXVzZSBmb3IgYW55IHZhbHVlIGRpZmZlcmVudCBmcm9tICJubyIgKi8KLSAgICAgIF9fcmVnaXN0cnlfcmV1c2VfcGx1Z2luX3NjYW5uZXIgPSAoc3RyY21wIChyZXVzZV9lbnYsICJubyIpICE9IDApOwotICAgIH0KLSAgICAvKiBub3cgY2hlY2sgcmVnaXN0cnkgKi8KLSAgICBHU1RfREVCVUcgKCJVcGRhdGluZyByZWdpc3RyeSBjYWNoZSIpOwotICAgIHNjYW5fYW5kX3VwZGF0ZV9yZWdpc3RyeSAoZGVmYXVsdF9yZWdpc3RyeSwgcmVnaXN0cnlfZmlsZSwgVFJVRSwgZXJyb3IpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVRyAoIk5vdCB1cGRhdGluZyByZWdpc3RyeSBjYWNoZSAoZGlzYWJsZWQpIik7Ci0gIH0KLQotICBnX2ZyZWUgKHJlZ2lzdHJ5X2ZpbGUpOwotICBHU1RfSU5GTyAoInJlZ2lzdHJ5IHJlYWRpbmcgYW5kIHVwZGF0aW5nIGRvbmUsIHJlc3VsdCA9ICVkIiwgcmV0KTsKLQotICByZXR1cm4gcmV0OwotfQotI2VuZGlmIC8qIEdTVF9ESVNBQkxFX1JFR0lTVFJZICovCi0KLS8qKgotICogZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZDoKLSAqCi0gKiBCeSBkZWZhdWx0IEdTdHJlYW1lciB3aWxsIHBlcmZvcm0gc2Nhbm5pbmcgYW5kIHJlYnVpbGRpbmcgb2YgdGhlCi0gKiByZWdpc3RyeSBmaWxlIHVzaW5nIGEgaGVscGVyIGNoaWxkIHByb2Nlc3MuCi0gKgotICogQXBwbGljYXRpb25zIG1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW91ciB3aXRoIHRoZQotICogZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQoKSBmdW5jdGlvbiwgaW4gd2hpY2ggY2FzZSBuZXcgcGx1Z2lucwotICogYXJlIHNjYW5uZWQgKGFuZCBsb2FkZWQpIGludG8gdGhlIGFwcGxpY2F0aW9uIHByb2Nlc3MuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgR1N0cmVhbWVyIHdpbGwgdXNlIHRoZSBjaGlsZCBoZWxwZXIgcHJvY2VzcyB3aGVuCi0gKiByZWJ1aWxkaW5nIHRoZSByZWdpc3RyeS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9mb3JrX2lzX2VuYWJsZWQgKHZvaWQpCi17Ci0gIHJldHVybiBfZ3N0X2VuYWJsZV9yZWdpc3RyeV9mb3JrOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9mb3JrX3NldF9lbmFibGVkOgotICogQGVuYWJsZWQ6IHdoZXRoZXIgcmVidWlsZGluZyB0aGUgcmVnaXN0cnkgY2FuIHVzZSBhIHRlbXBvcmFyeSBjaGlsZCBoZWxwZXIgcHJvY2Vzcy4KLSAqCi0gKiBBcHBsaWNhdGlvbnMgbWlnaHQgd2FudCB0byBkaXNhYmxlL2VuYWJsZSBzcGF3bmluZyBvZiBhIGNoaWxkIGhlbHBlciBwcm9jZXNzCi0gKiB3aGVuIHJlYnVpbGRpbmcgdGhlIHJlZ2lzdHJ5LiBTZWUgZ3N0X3JlZ2lzdHJ5X2ZvcmtfaXNfZW5hYmxlZCgpIGZvciBtb3JlCi0gKiBpbmZvcm1hdGlvbi4KLSAqLwotdm9pZAotZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQgKGdib29sZWFuIGVuYWJsZWQpCi17Ci0gIF9nc3RfZW5hYmxlX3JlZ2lzdHJ5X2ZvcmsgPSBlbmFibGVkOwotfQotCi0vKioKLSAqIGdzdF91cGRhdGVfcmVnaXN0cnk6Ci0gKgotICogRm9yY2VzIEdTdHJlYW1lciB0byByZS1zY2FuIGl0cyBwbHVnaW4gcGF0aHMgYW5kIHVwZGF0ZSB0aGUgZGVmYXVsdAotICogcGx1Z2luIHJlZ2lzdHJ5LgotICoKLSAqIEFwcGxpY2F0aW9ucyB3aWxsIGFsbW9zdCBuZXZlciBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwgaXQgaXMgb25seQotICogdXNlZnVsIGlmIHRoZSBhcHBsaWNhdGlvbiBrbm93cyBuZXcgcGx1Z2lucyBoYXZlIGJlZW4gaW5zdGFsbGVkIChvciBvbGQKLSAqIG9uZXMgcmVtb3ZlZCkgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBhcHBsaWNhdGlvbiAob3IsIHRvIGJlIHByZWNpc2UsIHRoZQotICogZmlyc3QgY2FsbCB0byBnc3RfaW5pdCgpKSBhbmQgdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIG1ha2UgdXNlIG9mIGFueQotICogbmV3bHktaW5zdGFsbGVkIHBsdWdpbnMgd2l0aG91dCByZXN0YXJ0aW5nIHRoZSBhcHBsaWNhdGlvbi4KLSAqCi0gKiBBcHBsaWNhdGlvbnMgc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSByZWdpc3RyeSB1cGRhdGUgaXMgbmVpdGhlciBhdG9taWMgbm9yCi0gKiB0aHJlYWQtc2FmZSBhbmQgc2hvdWxkIHRoZXJlZm9yZSBub3QgaGF2ZSBhbnkgZHluYW1pYyBwaXBlbGluZXMgcnVubmluZwotICogKGluY2x1ZGluZyB0aGUgcGxheWJpbiBhbmQgZGVjb2RlYmluIGVsZW1lbnRzKSBhbmQgc2hvdWxkIGFsc28gbm90IGNyZWF0ZQotICogYW55IGVsZW1lbnRzIG9yIGFjY2VzcyB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5IHdoaWxlIHRoZSB1cGRhdGUgaXMgaW4KLSAqIHByb2dyZXNzLgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSBibG9jayBmb3IgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcmVnaXN0cnkgaGFzIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHkgKGRvZXMgbm90Ci0gKiAgICAgICAgICBpbXBseSB0aGF0IHRoZXJlIHdlcmUgY2hhbmdlcyksIG90aGVyd2lzZSAlRkFMU0UuCi0gKi8KLWdib29sZWFuCi1nc3RfdXBkYXRlX3JlZ2lzdHJ5ICh2b2lkKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfUkVHSVNUUlkKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIHJlcyA9IGVuc3VyZV9jdXJyZW50X3JlZ2lzdHJ5ICgmZXJyKTsKLSAgaWYgKGVycikgewotICAgIEdTVF9XQVJOSU5HICgicmVnaXN0cnkgdXBkYXRlIGZhaWxlZDogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HICgicmVnaXN0cnkgdXBkYXRlIHN1Y2NlZWRlZCIpOwotICB9Ci0KLSNlbHNlCi0gIEdTVF9XQVJOSU5HICgicmVnaXN0cnkgdXBkYXRlIGZhaWxlZDogJXMiLCAicmVnaXN0cnkgZGlzYWJsZWQiKTsKLSAgcmVzID0gVFJVRTsKLSNlbmRpZiAvKiBHU1RfRElTQUJMRV9SRUdJU1RSWSAqLwotCi0gIGlmIChfcHJpdl9nc3RfcHJlbG9hZF9wbHVnaW5zKSB7Ci0gICAgR1NUX0RFQlVHICgiUHJlbG9hZGluZyBpbmRpY2F0ZWQgcGx1Z2lucy4uLiIpOwotICAgIGdfc2xpc3RfZm9yZWFjaCAoX3ByaXZfZ3N0X3ByZWxvYWRfcGx1Z2lucywgbG9hZF9wbHVnaW5fZnVuYywgTlVMTCk7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZToKLSAqIEByZWdpc3RyeTogdGhlIHJlZ2lzdHJ5Ci0gKgotICogUmV0dXJucyB0aGUgcmVnaXN0cnkncyBmZWF0dXJlIGxpc3QgY29va2llLiBUaGlzIGNoYW5nZXMKLSAqIGV2ZXJ5IHRpbWUgYSBmZWF0dXJlIGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgcmVnaXN0cnkuCi0gKgotICogUmV0dXJuczogdGhlIGZlYXR1cmUgbGlzdCBjb29raWUuCi0gKi8KLWd1aW50MzIKLWdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2Nvb2tpZSAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19SRUdJU1RSWSAocmVnaXN0cnkpLCAwKTsKLQotICByZXR1cm4gcmVnaXN0cnktPnByaXYtPmNvb2tpZTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RyZWdpc3RyeS5oIGIvZ3N0L2dzdHJlZ2lzdHJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MmY0OTcuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHJlZ2lzdHJ5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KLSAqCi0gKiBnc3RyZWdpc3RyeS5oOiBIZWFkZXIgZm9yIHJlZ2lzdHJ5IGhhbmRsaW5nCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1JFR0lTVFJZX0hfXwotI2RlZmluZSBfX0dTVF9SRUdJU1RSWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmZlYXR1cmUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JFR0lTVFJZICAgICAgICAgICAgICAgKGdzdF9yZWdpc3RyeV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1JFR0lTVFJZKG9iaikgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9SRUdJU1RSWSwgR3N0UmVnaXN0cnkpKQotI2RlZmluZSBHU1RfSVNfUkVHSVNUUlkob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1JFR0lTVFJZKSkKLSNkZWZpbmUgR1NUX1JFR0lTVFJZX0NMQVNTKGtsYXNzKSAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1JFR0lTVFJZLCBHc3RSZWdpc3RyeUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JFR0lTVFJZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1JFR0lTVFJZKSkKLSNkZWZpbmUgR1NUX1JFR0lTVFJZX0dFVF9DTEFTUyhvYmopICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX1JFR0lTVFJZLCBHc3RSZWdpc3RyeUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJlZ2lzdHJ5IEdzdFJlZ2lzdHJ5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJlZ2lzdHJ5Q2xhc3MgR3N0UmVnaXN0cnlDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSZWdpc3RyeVByaXZhdGUgR3N0UmVnaXN0cnlQcml2YXRlOwotCi0vKioKLSAqIEdzdFJlZ2lzdHJ5OgotICoKLSAqIE9wYXF1ZSAjR3N0UmVnaXN0cnkgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdFJlZ2lzdHJ5IHsKLSAgR3N0T2JqZWN0ICAgICAgb2JqZWN0OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RSZWdpc3RyeVByaXZhdGUgKnByaXY7Ci19OwotCi1zdHJ1Y3QgX0dzdFJlZ2lzdHJ5Q2xhc3MgewotICBHc3RPYmplY3RDbGFzcyAgICAgICAgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2dldF90eXBlICAgICAgICAgICAodm9pZCk7Ci0KLUdzdFJlZ2lzdHJ5ICogICAgICAgICAgIGdzdF9yZWdpc3RyeV9nZXQgICAgICAgICAgICAgICAgKHZvaWQpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoICAgICAgICAgIChHc3RSZWdpc3RyeSAqcmVnaXN0cnksIGNvbnN0IGdjaGFyICpwYXRoKTsKLQotI2lmIDAKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9hZGRfcGF0aCAgICAgICAgICAgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGdjaGFyICogcGF0aCk7Ci1HTGlzdCogICAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X3BhdGhfbGlzdCAgICAgIChHc3RSZWdpc3RyeSAqcmVnaXN0cnkpOwotI2VuZGlmCi0KLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luICAgICAgICAgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSwgR3N0UGx1Z2luICpwbHVnaW4pOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4gICAgICAoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LCBHc3RQbHVnaW4gKnBsdWdpbik7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgICAgICAgIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX2ZlYXR1cmUgICAgIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSk7Ci0KLUdMaXN0KiAgICAgICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgICAgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSk7Ci1HTGlzdCogICAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfcGx1Z2luX2ZpbHRlciAgICAgIChHc3RSZWdpc3RyeSAqcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQbHVnaW5GaWx0ZXIgZmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotR0xpc3QqICAgICAgICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyICAgICAoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGx1Z2luRmVhdHVyZUZpbHRlciBmaWx0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBmaXJzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1HTGlzdCAqICAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdCAgIChHc3RSZWdpc3RyeSAqcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSB0eXBlKTsKLUdMaXN0ICogICAgICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LCBjb25zdCBnY2hhciAqbmFtZSk7Ci1ndWludDMyICAgICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSk7Ci0KLUdzdFBsdWdpbiogICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbiAgICAgICAgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSwgY29uc3QgZ2NoYXIgKm5hbWUpOwotR3N0UGx1Z2luRmVhdHVyZSogICAgICAgZ3N0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZSAgICAgICAoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LCBjb25zdCBnY2hhciAqbmFtZSwgR1R5cGUgdHlwZSk7Ci0KLUdzdFBsdWdpbiAqICAgICAgICAgICAgIGdzdF9yZWdpc3RyeV9sb29rdXAgICAgICAgICAgICAgKEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwotR3N0UGx1Z2luRmVhdHVyZSAqICAgICAgZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlICAgICAoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LCBjb25zdCBjaGFyICpuYW1lKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmZlYXR1cmVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICBtaW5fbWFqb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgbWluX21pbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgIG1pbl9taWNybyk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0UmVnaXN0cnksIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JFR0lTVFJZX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvZ3N0cmVnaXN0cnliaW5hcnkuYyBiL2dzdC9nc3RyZWdpc3RyeWJpbmFyeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjg1NTZlLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RyZWdpc3RyeWJpbmFyeS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjM0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IEpvc2VwIFRvcnJhIDxqb3NlcEBmbHVlbmRvLmNvbT4KLSAqICAgICAgICAgICAgICAgMjAwNiBNYXRoaWV1IEdhcmNpYSA8bWF0dGhpZXVAZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgICAgIDIwMDYsMjAwNyBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKiAgICAgICAgICAgICAgIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIGdzdHJlZ2lzdHJ5YmluYXJ5LmM6IEdzdFJlZ2lzdHJ5QmluYXJ5IG9iamVjdCwgc3VwcG9ydCByb3V0aW5lcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEZJWE1FOgotICogLSBrZWVwIHJlZ2lzdHJ5IGJpbmFyeSBibG9iIGFuZCByZWZlcmVuY2Ugc3RyaW5ncwotICogICAtIGRvbid0IGZyZWUvdW5tbWFwIGNvbnRlbnRzIHdoZW4gbGVhdmluZyBnc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUoKQotICogICAgIC0gZnJlZSBhdCBnc3RfZGVpbml0KCkgLyBfcHJpdl9nc3RfcmVnaXN0cnlfY2xlYW51cCgpID8KLSAqICAgLSBHc3RQbHVnaW46Ci0gKiAgICAgLSBHU1RfUExVR0lOX0ZMQUdfQ09OU1QKLSAqICAgLSBHc3RQbHVnaW5GZWF0dXJlLCBHc3RJbmRleEZhY3RvcnksIEdzdEVsZW1lbnRGYWN0b3J5Ci0gKiAgICAgLSBuZWVkcyBGbGFncyAoR1NUX1BMVUdJTl9GRUFUVVJFX0ZMQUdfQ09OU1QpCi0gKiAgICAgLSBjYW4gd2UgdHVybiBsb2FkZWQgaW50byBmbGFnPwotICogLSB3aHkgZG8gd2UgY29sbGVjdCBhIGxpc3Qgb2YgYmluYXJ5IGNodW5rcyBhbmQgbm90IHdyaXRlIGltbWVkaWF0ZWx5Ci0gKiAgIC0gYmVjYXVzZSB3ZSBuZWVkIHRvIHByb2Nlc3Mgc3ViY2h1bmtzLCBiZWZvcmUgd2UgY2FuIHNldCBlLmcuIG5yX29mX2l0ZW1zCi0gKiAgICAgaW4gcGFyZW50IGNodW5rCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lmIGRlZmluZWQgKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNDAwCi0jaW5jbHVkZSA8aW8uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdF9wcml2YXRlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotI2luY2x1ZGUgPGdzdC9nc3RlbGVtZW50Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oPgotI2luY2x1ZGUgPGdzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dXJpLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGluZm8uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZW51bXR5cGVzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBhZHRlbXBsYXRlLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0cmVnaXN0cnljaHVua3MuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cmVnaXN0cnliaW5hcnkuaD4KLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+ICAgICAgICAvKiBmb3IgZ19zdGF0KCksIGdfbWFwcGVkX2ZpbGUoKSwgLi4uICovCi0KLSNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCi0KLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgR1NUX0NBVF9SRUdJU1RSWQotCi0vKiByZWFkaW5nIG1hY3JvcyAqLwotI2RlZmluZSB1bnBhY2tfZWxlbWVudChpbnB0ciwgb3V0cHRyLCBlbGVtZW50LCBlbmRwdHIsIGVycm9yX2xhYmVsKSBHX1NUTVRfU1RBUlR7IFwKLSAgaWYgKGlucHRyICsgc2l6ZW9mKGVsZW1lbnQpID49IGVuZHB0cikgXAotICAgIGdvdG8gZXJyb3JfbGFiZWw7IFwKLSAgb3V0cHRyID0gKGVsZW1lbnQgKikgaW5wdHI7IFwKLSAgaW5wdHIgKz0gc2l6ZW9mIChlbGVtZW50KTsgXAotfUdfU1RNVF9FTkQKLQotI2RlZmluZSBBTElHTk1FTlQgICAgICAgICAgICAoc2l6ZW9mICh2b2lkICopKQotI2RlZmluZSBhbGlnbm1lbnQoX2FkZHJlc3MpICAoZ3NpemUpX2FkZHJlc3MlQUxJR05NRU5UCi0jZGVmaW5lIGFsaWduKF9wdHIpICAgICAgICAgIF9wdHIgKz0gKCggYWxpZ25tZW50KF9wdHIpID09IDApID8gMCA6IEFMSUdOTUVOVC1hbGlnbm1lbnQoX3B0cikpCi0KLS8qIFJlZ2lzdHJ5IHNhdmluZyAqLwotCi0jaWZkZWYgR19PU19XSU4zMgotLyogT24gd2luMzIsIHdlIGNhbid0IHVzZSBnX21rc3RtcCgpLCBiZWNhdXNlIG9mIGNyb3NzLURMTCBmaWxlIEkvTyBwcm9ibGVtcy4KLSAqIFNvLCB3ZSBqdXN0IGNyZWF0ZSB0aGUgZW50aXJlIGJpbmFyeSByZWdpc3RyeSBpbiBtZW1vcnksIHRoZW4gd3JpdGUgaXQgb3V0Ci0gKiB3aXRoIGdfZmlsZV9zZXRfY29udGVudHMoKSwgd2hpY2ggY3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGludGVybmFsbHkKLSAqLwotCi10eXBlZGVmIHN0cnVjdCBCaW5hcnlSZWdpc3RyeUNhY2hlCi17Ci0gIGNvbnN0IGNoYXIgKmxvY2F0aW9uOwotICBndWludDggKm1lbTsKLSAgZ3NzaXplIGxlbjsKLX0gQmluYXJ5UmVnaXN0cnlDYWNoZTsKLQotc3RhdGljIEJpbmFyeVJlZ2lzdHJ5Q2FjaGUgKgotZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jYWNoZV9pbml0IChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBjb25zdCBjaGFyICpsb2NhdGlvbikKLXsKLSAgQmluYXJ5UmVnaXN0cnlDYWNoZSAqY2FjaGUgPSBnX3NsaWNlX25ldzAgKEJpbmFyeVJlZ2lzdHJ5Q2FjaGUpOwotICBjYWNoZS0+bG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgcmV0dXJuIGNhY2hlOwotfQotCi1zdGF0aWMgaW50Ci1nc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX3dyaXRlIChCaW5hcnlSZWdpc3RyeUNhY2hlICogY2FjaGUsCi0gICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCi17Ci0gIGNhY2hlLT5sZW4gPSBNQVggKG9mZnNldCArIGxlbmd0aCwgY2FjaGUtPmxlbik7Ci0gIGNhY2hlLT5tZW0gPSBnX3JlYWxsb2MgKGNhY2hlLT5tZW0sIGNhY2hlLT5sZW4pOwotCi0gIG1lbWNweSAoY2FjaGUtPm1lbSArIG9mZnNldCwgZGF0YSwgbGVuZ3RoKTsKLQotICByZXR1cm4gbGVuZ3RoOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfZmluaXNoIChCaW5hcnlSZWdpc3RyeUNhY2hlICogY2FjaGUsIGdib29sZWFuIHN1Y2Nlc3MpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICBpZiAoIWdfZmlsZV9zZXRfY29udGVudHMgKGNhY2hlLT5sb2NhdGlvbiwgKGNvbnN0IGdjaGFyICopIGNhY2hlLT5tZW0sCi0gICAgICAgICAgY2FjaGUtPmxlbiwgJmVycm9yKSkgewotICAgIC8qIFByb2JhYmx5IHRoZSBkaXJlY3RvcnkgZGlkbid0IGV4aXN0OyBjcmVhdGUgaXQgKi8KLSAgICBnY2hhciAqZGlyOwotICAgIGRpciA9IGdfcGF0aF9nZXRfZGlybmFtZSAoY2FjaGUtPmxvY2F0aW9uKTsKLSAgICBnX21rZGlyX3dpdGhfcGFyZW50cyAoZGlyLCAwNzc3KTsKLSAgICBnX2ZyZWUgKGRpcik7Ci0KLSAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSAgICBlcnJvciA9IE5VTEw7Ci0KLSAgICBpZiAoIWdfZmlsZV9zZXRfY29udGVudHMgKGNhY2hlLT5sb2NhdGlvbiwgKGNvbnN0IGdjaGFyICopIGNhY2hlLT5tZW0sCi0gICAgICAgICAgICBjYWNoZS0+bGVuLCAmZXJyb3IpKSB7Ci0gICAgICAvKiBQcm9iYWJseSB0aGUgZGlyZWN0b3J5IGRpZG4ndCBleGlzdDsgY3JlYXRlIGl0ICovCi0gICAgICBnY2hhciAqZGlyOwotICAgICAgZGlyID0gZ19wYXRoX2dldF9kaXJuYW1lIChjYWNoZS0+bG9jYXRpb24pOwotICAgICAgZ19ta2Rpcl93aXRoX3BhcmVudHMgKGRpciwgMDc3Nyk7Ci0gICAgICBnX2ZyZWUgKGRpcik7Ci0KLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICAgICAgZXJyb3IgPSBOVUxMOwotCi0gICAgICBpZiAoIWdfZmlsZV9zZXRfY29udGVudHMgKGNhY2hlLT5sb2NhdGlvbiwgKGNvbnN0IGdjaGFyICopIGNhY2hlLT5tZW0sCi0gICAgICAgICAgICAgIGNhY2hlLT5sZW4sICZlcnJvcikpIHsKLSAgICAgICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIHdyaXRlIHRvIGNhY2hlIGZpbGU6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZ19mcmVlIChjYWNoZS0+bWVtKTsKLSAgZ19zbGljZV9mcmVlIChCaW5hcnlSZWdpc3RyeUNhY2hlLCBjYWNoZSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBCaW5hcnlSZWdpc3RyeUNhY2hlCi17Ci0gIGNvbnN0IGNoYXIgKmxvY2F0aW9uOwotICBjaGFyICp0bXBfbG9jYXRpb247Ci0gIHVuc2lnbmVkIGxvbmcgY3VycmVudG9mZnNldDsKLSAgaW50IGNhY2hlX2ZkOwotfSBCaW5hcnlSZWdpc3RyeUNhY2hlOwotCi1zdGF0aWMgQmluYXJ5UmVnaXN0cnlDYWNoZSAqCi1nc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX2luaXQgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGNvbnN0IGNoYXIgKmxvY2F0aW9uKQotewotICBCaW5hcnlSZWdpc3RyeUNhY2hlICpjYWNoZSA9IGdfc2xpY2VfbmV3MCAoQmluYXJ5UmVnaXN0cnlDYWNoZSk7Ci0KLSAgY2FjaGUtPmxvY2F0aW9uID0gbG9jYXRpb247Ci0gIGNhY2hlLT50bXBfbG9jYXRpb24gPSBnX3N0cmNvbmNhdCAobG9jYXRpb24sICIudG1wWFhYWFhYIiwgTlVMTCk7Ci0gIGNhY2hlLT5jYWNoZV9mZCA9IGdfbWtzdGVtcCAoY2FjaGUtPnRtcF9sb2NhdGlvbik7Ci0gIGlmIChjYWNoZS0+Y2FjaGVfZmQgPT0gLTEpIHsKLSAgICBpbnQgcmV0OwotICAgIEdTdGF0QnVmIHN0YXRidWY7Ci0gICAgZ2NoYXIgKmRpcjsKLQotICAgIC8qIG9vcHMsIEkgYmV0IHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCAqLwotICAgIGRpciA9IGdfcGF0aF9nZXRfZGlybmFtZSAobG9jYXRpb24pOwotICAgIGdfbWtkaXJfd2l0aF9wYXJlbnRzIChkaXIsIDA3NzcpOwotCi0gICAgcmV0ID0gZ19zdGF0IChkaXIsICZzdGF0YnVmKTsKLSAgICBpZiAocmV0ICE9IC0xICYmIChzdGF0YnVmLnN0X21vZGUgJiAwNzAwKSAhPSAwNzAwKSB7Ci0gICAgICBnX2NobW9kIChkaXIsIDA3MDApOwotICAgIH0KLQotICAgIGdfZnJlZSAoZGlyKTsKLQotICAgIC8qIHRoZSBwcmV2aW91cyBnX21rc3RlbXAgY2FsbCBvdmVyd3JvdGUgdGhlIFhYWFhYWCBwbGFjZWhvbGRlciAuLi4gKi8KLSAgICBnX2ZyZWUgKGNhY2hlLT50bXBfbG9jYXRpb24pOwotICAgIGNhY2hlLT50bXBfbG9jYXRpb24gPSBnX3N0cmNvbmNhdCAobG9jYXRpb24sICIudG1wWFhYWFhYIiwgTlVMTCk7Ci0gICAgY2FjaGUtPmNhY2hlX2ZkID0gZ19ta3N0ZW1wIChjYWNoZS0+dG1wX2xvY2F0aW9uKTsKLQotICAgIGlmIChjYWNoZS0+Y2FjaGVfZmQgPT0gLTEpIHsKLSAgICAgIEdTVF9ERUJVRyAoImdfbWtzdGVtcCgpIGZhaWxlZDogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgZ19mcmVlIChjYWNoZS0+dG1wX2xvY2F0aW9uKTsKLSAgICAgIGdfc2xpY2VfZnJlZSAoQmluYXJ5UmVnaXN0cnlDYWNoZSwgY2FjaGUpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0ID0gZ19zdGF0IChjYWNoZS0+dG1wX2xvY2F0aW9uLCAmc3RhdGJ1Zik7Ci0gICAgaWYgKHJldCAhPSAtMSAmJiAoc3RhdGJ1Zi5zdF9tb2RlICYgMDYwMCkgIT0gMDYwMCkgewotICAgICAgZ19jaG1vZCAoY2FjaGUtPnRtcF9sb2NhdGlvbiwgMDYwMCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGNhY2hlOwotfQotCi1zdGF0aWMgaW50Ci1nc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX3dyaXRlIChCaW5hcnlSZWdpc3RyeUNhY2hlICogY2FjaGUsCi0gICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW5ndGgpCi17Ci0gIGxvbmcgd3JpdHRlbjsKLSAgaWYgKG9mZnNldCAhPSBjYWNoZS0+Y3VycmVudG9mZnNldCkgewotICAgIGlmIChsc2VlayAoY2FjaGUtPmNhY2hlX2ZkLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKLSAgICAgIEdTVF9FUlJPUiAoIlNlZWtpbmcgdG8gbmV3IG9mZnNldCBmYWlsZWQ6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgR1NUX0xPRyAoIlNlZWtlZCBmcm9tIG9mZnNldCAlbHUgdG8gJWx1Iiwgb2Zmc2V0LCBjYWNoZS0+Y3VycmVudG9mZnNldCk7Ci0gICAgY2FjaGUtPmN1cnJlbnRvZmZzZXQgPSBvZmZzZXQ7Ci0gIH0KLQotICB3cml0dGVuID0gd3JpdGUgKGNhY2hlLT5jYWNoZV9mZCwgZGF0YSwgbGVuZ3RoKTsKLSAgaWYgKHdyaXR0ZW4gIT0gbGVuZ3RoKSB7Ci0gICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIHdyaXRlIHRvIGNhY2hlIGZpbGUiKTsKLSAgfQotICBjYWNoZS0+Y3VycmVudG9mZnNldCArPSB3cml0dGVuOwotCi0gIHJldHVybiB3cml0dGVuOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfZmluaXNoIChCaW5hcnlSZWdpc3RyeUNhY2hlICogY2FjaGUsIGdib29sZWFuIHN1Y2Nlc3MpCi17Ci0gIC8qIG9ubHkgZnN5bmMgaWYgd2UncmUgYWN0dWFsbHkgZ29pbmcgdG8gdXNlIGFuZCByZW5hbWUgdGhlIGZpbGUgYmVsb3cgKi8KLSAgaWYgKHN1Y2Nlc3MgJiYgZnN5bmMgKGNhY2hlLT5jYWNoZV9mZCkgPCAwKQotICAgIGdvdG8gZnN5bmNfZmFpbGVkOwotCi0gIGlmIChjbG9zZSAoY2FjaGUtPmNhY2hlX2ZkKSA8IDApCi0gICAgZ290byBjbG9zZV9mYWlsZWQ7Ci0KLSAgaWYgKCFzdWNjZXNzKQotICAgIGdvdG8gZmFpbF9hZnRlcl9jbG9zZTsKLQotICAvKiBPbmx5IGRvIHRoZSByZW5hbWUgaWYgd2Ugd3JvdGUgdGhlIGVudGlyZSBmaWxlIHN1Y2Nlc3NmdWxseSAqLwotICBpZiAoZ19yZW5hbWUgKGNhY2hlLT50bXBfbG9jYXRpb24sIGNhY2hlLT5sb2NhdGlvbikgPCAwKSB7Ci0gICAgR1NUX0VSUk9SICgiZ19yZW5hbWUoKSBmYWlsZWQ6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICBnb3RvIHJlbmFtZV9mYWlsZWQ7Ci0gIH0KLQotICBnX2ZyZWUgKGNhY2hlLT50bXBfbG9jYXRpb24pOwotICBnX3NsaWNlX2ZyZWUgKEJpbmFyeVJlZ2lzdHJ5Q2FjaGUsIGNhY2hlKTsKLSAgR1NUX0lORk8gKCJXcm90ZSBiaW5hcnkgcmVnaXN0cnkgY2FjaGUiKTsKLSAgcmV0dXJuIFRSVUU7Ci0KLS8qIEVSUk9SUyAqLwotZmFpbF9hZnRlcl9jbG9zZToKLSAgewotICAgIGdfdW5saW5rIChjYWNoZS0+dG1wX2xvY2F0aW9uKTsKLSAgICBnX2ZyZWUgKGNhY2hlLT50bXBfbG9jYXRpb24pOwotICAgIGdfc2xpY2VfZnJlZSAoQmluYXJ5UmVnaXN0cnlDYWNoZSwgY2FjaGUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZnN5bmNfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SICgiZnN5bmMoKSBmYWlsZWQ6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICBnb3RvIGZhaWxfYWZ0ZXJfY2xvc2U7Ci0gIH0KLWNsb3NlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUiAoImNsb3NlKCkgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgZ290byBmYWlsX2FmdGVyX2Nsb3NlOwotICB9Ci1yZW5hbWVfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SICgiZ19yZW5hbWUoKSBmYWlsZWQ6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICBnb3RvIGZhaWxfYWZ0ZXJfY2xvc2U7Ci0gIH0KLX0KLSNlbmRpZgotCi0vKgotICogZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jaHVuazoKLSAqCi0gKiBXcml0ZSBmcm9tIGEgbWVtb3J5IGxvY2F0aW9uIHRvIHRoZSByZWdpc3RyeSBjYWNoZSBmaWxlCi0gKgotICogUmV0dXJuczogJVRSVUUgZm9yIHN1Y2Nlc3MKLSAqLwotaW5saW5lIHN0YXRpYyBnYm9vbGVhbgotZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jaHVuayAoQmluYXJ5UmVnaXN0cnlDYWNoZSAqIGNhY2hlLAotICAgIEdzdFJlZ2lzdHJ5Q2h1bmsgKiBjaHVuaywgdW5zaWduZWQgbG9uZyAqZmlsZV9wb3NpdGlvbikKLXsKLSAgZ2NoYXIgcGFkZGVyW0FMSUdOTUVOVF0gPSB7IDAsIH07Ci0gIGludCBwYWRzaXplID0gMDsKLQotICAvKiBQYWRkaW5nIHRvIGluc2VydCB0aGUgc3RydWN0IHRoYXQgcmVxdWllcmUgd29yZCBhbGlnbm1lbnQgKi8KLSAgaWYgKChjaHVuay0+YWxpZ24pICYmIChhbGlnbm1lbnQgKCpmaWxlX3Bvc2l0aW9uKSAhPSAwKSkgewotICAgIHBhZHNpemUgPSBBTElHTk1FTlQgLSBhbGlnbm1lbnQgKCpmaWxlX3Bvc2l0aW9uKTsKLSAgICBpZiAoZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jYWNoZV93cml0ZSAoY2FjaGUsICpmaWxlX3Bvc2l0aW9uLAotICAgICAgICAgICAgcGFkZGVyLCBwYWRzaXplKSAhPSBwYWRzaXplKSB7Ci0gICAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gd3JpdGUgYmluYXJ5IHJlZ2lzdHJ5IHBhZGRlciIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICAqZmlsZV9wb3NpdGlvbiArPSBwYWRzaXplOwotICB9Ci0KLSAgaWYgKGdzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfd3JpdGUgKGNhY2hlLCAqZmlsZV9wb3NpdGlvbiwKLSAgICAgICAgICBjaHVuay0+ZGF0YSwgY2h1bmstPnNpemUpICE9IGNodW5rLT5zaXplKSB7Ci0gICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIHdyaXRlIGJpbmFyeSByZWdpc3RyeSBlbGVtZW50Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgKmZpbGVfcG9zaXRpb24gKz0gY2h1bmstPnNpemU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoKLSAqIGdzdF9yZWdpc3RyeV9iaW5hcnlfaW5pdGlhbGl6ZV9tYWdpYzoKLSAqCi0gKiBJbml0aWFsaXplIHRoZSBHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljLCBzZXR0aW5nIGJvdGggb3VyIG1hZ2ljIG51bWJlciBhbmQKLSAqIGdzdHJlYW1lciBtYWpvci9taW5vciB2ZXJzaW9uCi0gKi8KLWlubGluZSBzdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9iaW5hcnlfaW5pdGlhbGl6ZV9tYWdpYyAoR3N0QmluYXJ5UmVnaXN0cnlNYWdpYyAqIG0pCi17Ci0gIG1lbXNldCAobSwgMCwgc2l6ZW9mIChHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljKSk7Ci0KLSAgaWYgKCFzdHJuY3B5IChtLT5tYWdpYywgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9TVFIsCi0gICAgICAgICAgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9MRU4pCi0gICAgICB8fCAhc3RybmNweSAobS0+dmVyc2lvbiwgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUiwKLSAgICAgICAgICBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOKSkgewotICAgIEdTVF9FUlJPUiAoIkZhaWxlZCB0byB3cml0ZSBtYWdpYyB0byB0aGUgcmVnaXN0cnkgbWFnaWMgc3RydWN0dXJlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jYWNoZToKLSAqIEByZWdpc3RyeTogYSAjR3N0UmVnaXN0cnkKLSAqIEBsb2NhdGlvbjogYSBmaWxlbmFtZQotICoKLSAqIFdyaXRlIHRoZSBAcmVnaXN0cnkgdG8gYSBjYWNoZSB0byBmaWxlIGF0IGdpdmVuIEBsb2NhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBvbiBzdWNjZXNzLgotICovCi1nYm9vbGVhbgotcHJpdl9nc3RfcmVnaXN0cnlfYmluYXJ5X3dyaXRlX2NhY2hlIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LCBHTGlzdCAqIHBsdWdpbnMsCi0gICAgY29uc3QgY2hhciAqbG9jYXRpb24pCi17Ci0gIEdMaXN0ICp3YWxrOwotICBHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljIG1hZ2ljOwotICBHTGlzdCAqdG9fd3JpdGUgPSBOVUxMOwotICB1bnNpZ25lZCBsb25nIGZpbGVfcG9zaXRpb24gPSAwOwotICBCaW5hcnlSZWdpc3RyeUNhY2hlICpjYWNoZTsKLQotICBHU1RfSU5GTyAoIkJ1aWxkaW5nIGJpbmFyeSByZWdpc3RyeSBjYWNoZSBpbWFnZSIpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUkVHSVNUUlkgKHJlZ2lzdHJ5KSwgRkFMU0UpOwotCi0gIGlmICghZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9pbml0aWFsaXplX21hZ2ljICgmbWFnaWMpKQotICAgIGdvdG8gZmFpbDsKLQotICAvKiBpdGVyYXRlIHRyb3VnaCB0aGUgbGlzdCBvZiBwbHVnaW5zIGFuZCBmaXQgdGhlbSBpbnRvIGJpbmFyeSBzdHJ1Y3R1cmVzICovCi0gIGZvciAod2FsayA9IHBsdWdpbnM7IHdhbGsgIT0gTlVMTDsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICBHc3RQbHVnaW4gKnBsdWdpbiA9IEdTVF9QTFVHSU4gKHdhbGstPmRhdGEpOwotCi0gICAgaWYgKCFwbHVnaW4tPmZpbGVuYW1lKQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGx1Z2luLCBHU1RfUExVR0lOX0ZMQUdfQ0FDSEVEKSkgewotICAgICAgR1N0YXRCdWYgc3RhdGJ1ZjsKLQotICAgICAgaWYgKGdfc3RhdCAocGx1Z2luLT5maWxlbmFtZSwgJnN0YXRidWYpIDwgMCB8fAotICAgICAgICAgIHBsdWdpbi0+ZmlsZV9tdGltZSAhPSBzdGF0YnVmLnN0X210aW1lIHx8Ci0gICAgICAgICAgcGx1Z2luLT5maWxlX3NpemUgIT0gc3RhdGJ1Zi5zdF9zaXplKQotICAgICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBpZiAoIV9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9wbHVnaW4gKCZ0b193cml0ZSwgcmVnaXN0cnksIHBsdWdpbikpIHsKLSAgICAgIEdTVF9FUlJPUiAoIkNhbid0IHdyaXRlIGJpbmFyeSBwbHVnaW4gaW5mb3JtYXRpb24gZm9yIFwiJXNcIiIsCi0gICAgICAgICAgcGx1Z2luLT5maWxlbmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2dsb2JhbF9oZWFkZXIgKCZ0b193cml0ZSwgcmVnaXN0cnksCi0gICAgICBwcml2X2dzdF9wbHVnaW5fbG9hZGluZ19nZXRfd2hpdGVsaXN0X2hhc2ggKCkpOwotCi0gIEdTVF9JTkZPICgiV3JpdGluZyBiaW5hcnkgcmVnaXN0cnkgY2FjaGUiKTsKLQotICBjYWNoZSA9IGdzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfaW5pdCAocmVnaXN0cnksIGxvY2F0aW9uKTsKLSAgaWYgKCFjYWNoZSkKLSAgICBnb3RvIGZhaWxfZnJlZV9saXN0OwotCi0gIC8qIHdyaXRlIG1hZ2ljICovCi0gIGlmIChnc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX3dyaXRlIChjYWNoZSwgZmlsZV9wb3NpdGlvbiwKLSAgICAgICAgICAmbWFnaWMsIHNpemVvZiAoR3N0QmluYXJ5UmVnaXN0cnlNYWdpYykpICE9Ci0gICAgICBzaXplb2YgKEdzdEJpbmFyeVJlZ2lzdHJ5TWFnaWMpKSB7Ci0gICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIHdyaXRlIGJpbmFyeSByZWdpc3RyeSBtYWdpYyIpOwotICAgIGdvdG8gZmFpbF9mcmVlX2xpc3Q7Ci0gIH0KLSAgZmlsZV9wb3NpdGlvbiArPSBzaXplb2YgKEdzdEJpbmFyeVJlZ2lzdHJ5TWFnaWMpOwotCi0gIC8qIHdyaXRlIG91dCBkYXRhIGNodW5rcyAqLwotICBmb3IgKHdhbGsgPSB0b193cml0ZTsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJlZ2lzdHJ5Q2h1bmsgKmN1ciA9IHdhbGstPmRhdGE7Ci0gICAgZ2Jvb2xlYW4gcmVzOwotCi0gICAgcmVzID0gZ3N0X3JlZ2lzdHJ5X2JpbmFyeV93cml0ZV9jaHVuayAoY2FjaGUsIGN1ciwgJmZpbGVfcG9zaXRpb24pOwotCi0gICAgX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rX2ZyZWUgKGN1cik7Ci0gICAgd2Fsay0+ZGF0YSA9IE5VTEw7Ci0gICAgaWYgKCFyZXMpCi0gICAgICBnb3RvIGZhaWxfZnJlZV9saXN0OwotICB9Ci0gIGdfbGlzdF9mcmVlICh0b193cml0ZSk7Ci0KLSAgaWYgKCFnc3RfcmVnaXN0cnlfYmluYXJ5X2NhY2hlX2ZpbmlzaCAoY2FjaGUsIFRSVUUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFcnJvcnMgKi8KLWZhaWxfZnJlZV9saXN0OgotICB7Ci0gICAgZm9yICh3YWxrID0gdG9fd3JpdGU7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICAgIEdzdFJlZ2lzdHJ5Q2h1bmsgKmN1ciA9IHdhbGstPmRhdGE7Ci0KLSAgICAgIGlmIChjdXIpCi0gICAgICAgIF9wcml2X2dzdF9yZWdpc3RyeV9jaHVua19mcmVlIChjdXIpOwotICAgIH0KLSAgICBnX2xpc3RfZnJlZSAodG9fd3JpdGUpOwotCi0gICAgaWYgKGNhY2hlKQotICAgICAgKHZvaWQpIGdzdF9yZWdpc3RyeV9iaW5hcnlfY2FjaGVfZmluaXNoIChjYWNoZSwgRkFMU0UpOwotICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICB9Ci1mYWlsOgotICB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLQotLyogUmVnaXN0cnkgbG9hZGluZyAqLwotCi0vKgotICogZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9jaGVja19tYWdpYzoKLSAqCi0gKiBDaGVjayBHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljIHZhbGlkaXR5LgotICogUmV0dXJuIDwgMCBpZiBzb21ldGhpbmcgaXMgd3JvbmcsIC0yIG1lYW5zCi0gKiB0aGF0IGp1c3QgdGhlIHZlcnNpb24gb2YgdGhlIHJlZ2lzdHJ5IGlzIG91dCBvZgotICogZGF0ZSwgLTEgaXMgYSBnZW5lcmFsIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBnaW50Ci1nc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljIChnY2hhciAqKiBpbiwgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0QmluYXJ5UmVnaXN0cnlNYWdpYyAqbTsKLQotICBhbGlnbiAoKmluKTsKLSAgR1NUX0RFQlVHICgiUmVhZGluZy9jYXN0aW5nIGZvciBHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljIGF0IGFkZHJlc3MgJXAiLCAqaW4pOwotICB1bnBhY2tfZWxlbWVudCAoKmluLCBtLCBHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljLCAoKmluICsgc2l6ZSksIGZhaWwpOwotCi0gIGlmIChzdHJuY21wIChtLT5tYWdpYywgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9TVFIsCi0gICAgICAgICAgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9MRU4pICE9IDApIHsKLSAgICBHU1RfV0FSTklORwotICAgICAgICAoIkJpbmFyeSByZWdpc3RyeSBtYWdpYyBpcyBkaWZmZXJlbnQgOiAlMDJ4JTAyeCUwMnglMDJ4ICE9ICUwMnglMDJ4JTAyeCUwMngiLAotICAgICAgICBHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX1NUUlswXSAmIDB4ZmYsCi0gICAgICAgIEdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfU1RSWzFdICYgMHhmZiwKLSAgICAgICAgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9TVFJbMl0gJiAweGZmLAotICAgICAgICBHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX1NUUlszXSAmIDB4ZmYsIG0tPm1hZ2ljWzBdICYgMHhmZiwKLSAgICAgICAgbS0+bWFnaWNbMV0gJiAweGZmLCBtLT5tYWdpY1syXSAmIDB4ZmYsIG0tPm1hZ2ljWzNdICYgMHhmZik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIGlmIChzdHJuY21wIChtLT52ZXJzaW9uLCBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fU1RSLAotICAgICAgICAgIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9MRU4pKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJCaW5hcnkgcmVnaXN0cnkgbWFnaWMgdmVyc2lvbiBpcyBkaWZmZXJlbnQgOiAlcyAhPSAlcyIsCi0gICAgICAgIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9TVFIsIG0tPnZlcnNpb24pOwotICAgIHJldHVybiAtMjsKLSAgfQotCi0gIHJldHVybiAwOwotCi1mYWlsOgotICBHU1RfV0FSTklORyAoIk5vdCBlbm91Z2ggZGF0YSBmb3IgYmluYXJ5IHJlZ2lzdHJ5IG1hZ2ljIHN0cnVjdHVyZSIpOwotICByZXR1cm4gLTE7Ci19Ci0KLS8qKgotICogZ3N0X3JlZ2lzdHJ5X2JpbmFyeV9yZWFkX2NhY2hlOgotICogQHJlZ2lzdHJ5OiBhICNHc3RSZWdpc3RyeQotICogQGxvY2F0aW9uOiBhIGZpbGVuYW1lCi0gKgotICogUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGJpbmFyeSBjYWNoZSBmaWxlIGF0IEBsb2NhdGlvbiBpbnRvIEByZWdpc3RyeS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBvbiBzdWNjZXNzLgotICovCi1nYm9vbGVhbgotcHJpdl9nc3RfcmVnaXN0cnlfYmluYXJ5X3JlYWRfY2FjaGUgKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksCi0gICAgY29uc3QgY2hhciAqbG9jYXRpb24pCi17Ci0gIEdNYXBwZWRGaWxlICptYXBwZWQgPSBOVUxMOwotICBnY2hhciAqY29udGVudHMgPSBOVUxMOwotICBnY2hhciAqaW4gPSBOVUxMOwotICBnc2l6ZSBzaXplOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBndWludDMyIGZpbHRlcl9lbnZfaGFzaCA9IDA7Ci0gIGdpbnQgY2hlY2tfbWFnaWNfcmVzdWx0OwotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgR1RpbWVyICp0aW1lciA9IE5VTEw7Ci0gIGdkb3VibGUgc2Vjb25kczsKLSNlbmRpZgotCi0gIC8qIG1ha2Ugc3VyZSB0aGVzZSB0eXBlcyBleGlzdCAqLwotICBHU1RfVFlQRV9FTEVNRU5UX0ZBQ1RPUlk7Ci0gIEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZOwotICBHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVJfRkFDVE9SWTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgdGltZXIgPSBnX3RpbWVyX25ldyAoKTsKLSNlbmRpZgotCi0gIG1hcHBlZCA9IGdfbWFwcGVkX2ZpbGVfbmV3IChsb2NhdGlvbiwgRkFMU0UsICZlcnIpOwotICBpZiAoR19VTkxJS0VMWSAoZXJyICE9IE5VTEwpKSB7Ci0gICAgR1NUX0lORk8gKCJVbmFibGUgdG8gbW1hcCBmaWxlICVzIDogJXMiLCBsb2NhdGlvbiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgZXJyID0gTlVMTDsKLSAgfQotCi0gIGlmIChtYXBwZWQgPT0gTlVMTCkgewotICAgIC8qIEVycm9yIG1tYXAtaW5nIHRoZSBjYWNoZSwgdHJ5IGEgcGxhaW4gbWVtb3J5IHJlYWQgKi8KLQotICAgIGdfZmlsZV9nZXRfY29udGVudHMgKGxvY2F0aW9uLCAmY29udGVudHMsICZzaXplLCAmZXJyKTsKLSAgICBpZiAoZXJyICE9IE5VTEwpIHsKLSAgICAgIEdTVF9JTkZPICgiVW5hYmxlIHRvIHJlYWQgZmlsZSAlcyA6ICVzIiwgbG9jYXRpb24sIGVyci0+bWVzc2FnZSk7Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICAgICAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7Ci0jZW5kaWYKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogVGhpcyBjYW4ndCBmYWlsIGlmIGdfbWFwcGVkX2ZpbGVfbmV3KCkgc3VjY2VlZGVkICovCi0gICAgY29udGVudHMgPSBnX21hcHBlZF9maWxlX2dldF9jb250ZW50cyAobWFwcGVkKTsKLSAgICBzaXplID0gZ19tYXBwZWRfZmlsZV9nZXRfbGVuZ3RoIChtYXBwZWQpOwotICB9Ci0KLSAgLyogaW4gaXMgYSBjdXJzb3IgcG9pbnRlciwgd2UgaW5pdGlhbGl6ZSBpdCB3aXRoIHRoZSBiZWdpbiBvZiByZWdpc3RyeSBhbmQgaXMgdXBkYXRlZCBvbiBlYWNoIHJlYWQgKi8KLSAgaW4gPSBjb250ZW50czsKLSAgR1NUX0RFQlVHICgiRmlsZSBkYXRhIGF0IGFkZHJlc3MgJXAiLCBpbik7Ci0gIGlmIChHX1VOTElLRUxZIChzaXplIDwgc2l6ZW9mIChHc3RCaW5hcnlSZWdpc3RyeU1hZ2ljKSkpIHsKLSAgICBHU1RfRVJST1IgKCJObyBvciBicm9rZW4gcmVnaXN0cnkgaGVhZGVyIGZvciBmaWxlIGF0ICVzIiwgbG9jYXRpb24pOwotICAgIGdvdG8gRXJyb3I7Ci0gIH0KLQotICAvKiBjaGVjayBpZiBoZWFkZXIgaXMgdmFsaWQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKChjaGVja19tYWdpY19yZXN1bHQgPQotICAgICAgICAgICAgICBnc3RfcmVnaXN0cnlfYmluYXJ5X2NoZWNrX21hZ2ljICgmaW4sIHNpemUpKSA8IDApKSB7Ci0KLSAgICBpZiAoY2hlY2tfbWFnaWNfcmVzdWx0ID09IC0xKQotICAgICAgR1NUX0VSUk9SCi0gICAgICAgICAgKCJCaW5hcnkgcmVnaXN0cnkgdHlwZSBub3QgcmVjb2duaXplZCAoaW52YWxpZCBtYWdpYykgZm9yIGZpbGUgYXQgJXMiLAotICAgICAgICAgIGxvY2F0aW9uKTsKLSAgICBnb3RvIEVycm9yOwotICB9Ci0KLSAgaWYgKCFfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfZ2xvYmFsX2hlYWRlciAocmVnaXN0cnksICZpbiwKLSAgICAgICAgICBjb250ZW50cyArIHNpemUsICZmaWx0ZXJfZW52X2hhc2gpKSB7Ci0gICAgR1NUX0VSUk9SICgiQ291bGRuJ3QgcmVhZCBnbG9iYWwgaGVhZGVyIGNodW5rIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotCi0gIGlmIChmaWx0ZXJfZW52X2hhc2ggIT0gcHJpdl9nc3RfcGx1Z2luX2xvYWRpbmdfZ2V0X3doaXRlbGlzdF9oYXNoICgpKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChyZWdpc3RyeSwgIlBsdWdpbiBsb2FkaW5nIGZpbHRlciBlbnZpcm9ubWVudCBjaGFuZ2VkLCAiCi0gICAgICAgICJpZ25vcmluZyBwbHVnaW4gY2FjaGUgdG8gZm9yY2UgdXBkYXRlIHdpdGggbmV3IGZpbHRlciBlbnZpcm9ubWVudCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIGNoZWNrIGlmIHRoZXJlIGFyZSBwbHVnaW5zIGluIHRoZSBmaWxlICovCi0gIGlmIChHX1VOTElLRUxZICghKCgoZ3NpemUpIGluICsgc2l6ZW9mIChHc3RSZWdpc3RyeUNodW5rUGx1Z2luRWxlbWVudCkpIDwKLSAgICAgICAgICAgICAgKGdzaXplKSBjb250ZW50cyArIHNpemUpKSkgewotICAgIEdTVF9JTkZPICgiTm8gYmluYXJ5IHBsdWdpbnMgc3RydWN0dXJlIHRvIHJlYWQiKTsKLSAgICAvKiBlbXB0eSBmaWxlLCB0aGlzIGlzIG5vdCBhbiBlcnJvciAqLwotICB9IGVsc2UgewotICAgIGdjaGFyICplbmQgPSBjb250ZW50cyArIHNpemU7Ci0gICAgLyogcmVhZCBhcyBsb25nIGFzIHdlIHN0aWxsIGhhdmUgc3BhY2UgZm9yIGEgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQgKi8KLSAgICBmb3IgKDsKLSAgICAgICAgKChnc2l6ZSkgaW4gKyBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50KSkgPAotICAgICAgICAoZ3NpemUpIGNvbnRlbnRzICsgc2l6ZTspIHsKLSAgICAgIEdTVF9ERUJVRyAoInJlYWRpbmcgYmluYXJ5IHJlZ2lzdHJ5ICUiIEdfR1NJWkVfRk9STUFUICIoJXgpLyUiCi0gICAgICAgICAgR19HU0laRV9GT1JNQVQsIChnc2l6ZSkgaW4gLSAoZ3NpemUpIGNvbnRlbnRzLAotICAgICAgICAgIChndWludCkgKChnc2l6ZSkgaW4gLSAoZ3NpemUpIGNvbnRlbnRzKSwgc2l6ZSk7Ci0gICAgICBpZiAoIV9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW4gKHJlZ2lzdHJ5LCAmaW4sIGVuZCwgTlVMTCkpIHsKLSAgICAgICAgR1NUX0VSUk9SICgiUHJvYmxlbSB3aGlsZSByZWFkaW5nIGJpbmFyeSByZWdpc3RyeSAlcyIsIGxvY2F0aW9uKTsKLSAgICAgICAgZ290byBFcnJvcjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotZG9uZToKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgZ190aW1lcl9zdG9wICh0aW1lcik7Ci0gIHNlY29uZHMgPSBnX3RpbWVyX2VsYXBzZWQgKHRpbWVyLCBOVUxMKTsKLSNlbmRpZgotCi0gIEdTVF9JTkZPICgibG9hZGVkICVzIGluICVsZiBzZWNvbmRzIiwgbG9jYXRpb24sIHNlY29uZHMpOwotCi0gIHJlcyA9IFRSVUU7Ci0gIC8qIFRPRE86IG9uY2Ugd2UgcmUtdXNlIHRoZSBwb2ludGVycyB0byByZWdpc3RyeSBjb250ZW50cywgcmV0dXJuIGhlcmUgKi8KLQotRXJyb3I6Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBnX3RpbWVyX2Rlc3Ryb3kgKHRpbWVyKTsKLSNlbmRpZgotICBpZiAobWFwcGVkKSB7Ci0gICAgZ19tYXBwZWRfZmlsZV91bnJlZiAobWFwcGVkKTsKLSAgfSBlbHNlIHsKLSAgICBnX2ZyZWUgKGNvbnRlbnRzKTsKLSAgfQotICByZXR1cm4gcmVzOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHJlZ2lzdHJ5YmluYXJ5LmggYi9nc3QvZ3N0cmVnaXN0cnliaW5hcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJlNTZkMS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0cmVnaXN0cnliaW5hcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IEpvc2VwIFRvcnJhIDxqb3NlcEBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNYXRoaWV1IEdhcmNpYSAgPG1hdHRoaWV1QGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA2IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHNvbmljcHVsc2UuZGU+Ci0gKgotICogZ3N0cmVnaXN0cnliaW5hcnkuaDogSGVhZGVyIGZvciByZWdpc3RyeSBoYW5kbGluZwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIFNVR0dFU1RJT05TIEFORCBUT0RPIDoKLSoqID09PT09PT09PT09PT09PT09PT09Ci0qKiAtIFVzZSBhIGNvbXByZXNzZWQgcmVnaXN0cnksIGJ1dCB3b3VsZCBpbmR1Y2UgcGVyZm9ybWFuY2UgbG9zcwotKiogLSBFbmNyeXB0IHRoZSByZWdpc3RyeSwgZm9yIHNlY3VyaXR5IHB1cnBvc2UsIGJ1dCB3b3VsZCBhbHNvIHJlZHVjZSBwZXJmb3JtYW5jZXMKLSovCi0KLSNpZm5kZWYgX19HU1RfUkVHSVNUUllCSU5BUllfSF9fCi0jZGVmaW5lIF9fR1NUX1JFR0lTVFJZQklOQVJZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdHBhZC5oPgotI2luY2x1ZGUgPGdzdC9nc3RyZWdpc3RyeS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qCi0gKiBHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX1NUUjoKLSAqCi0gKiBBIHRhZywgd3JpdHRlbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlCi0gKi8KLSNkZWZpbmUgR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9TVFIgIlx4YzBceGRlXHhmMFx4MGQiCi0vKgotICogR1NUX01BR0lDX0JJTkFSWV9SRUdJU1RSWV9MRU46Ci0gKgotICogbGVuZ3RoIG9mIHRoZSBoZWFkZXIgdGFnLgotICovCi0jZGVmaW5lIEdTVF9NQUdJQ19CSU5BUllfUkVHSVNUUllfTEVOICg0KQotCi0vKgotICogR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUjoKLSAqCi0gKiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBiaW5hcnkgcmVnaXN0cnkgZm9ybWF0LgotICogVGhpcyBfbXVzdF8gYmUgdXBkYXRlZCB3aGVuZXZlciB0aGUgcmVnaXN0cnkgZm9ybWF0IGNoYW5nZXMsCi0gKiB3ZSBjdXJyZW50bHkgdXNlIHRoZSBjb3JlIHZlcnNpb24gd2hlcmUgdGhpcyBjaGFuZ2UgaGFwcGVuZWQuCi0gKi8KLSNkZWZpbmUgR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX1NUUiAiMS4zLjAiCi0KLS8qCi0gKiBHU1RfTUFHSUNfQklOQVJZX1ZFUlNJT05fTEVOOgotICoKLSAqIE1heGltdW0gbGVuZ3RoIG9mIHRoZSB2ZXJzaW9uIHN0cmluZyBpbiB0aGUgaGVhZGVyLgotICovCi0jZGVmaW5lIEdTVF9NQUdJQ19CSU5BUllfVkVSU0lPTl9MRU4gKDY0KQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QmluYXJ5UmVnaXN0cnlNYWdpYwotewotICBnY2hhciBtYWdpY1tHU1RfTUFHSUNfQklOQVJZX1JFR0lTVFJZX0xFTl07Ci0gIGdjaGFyIHZlcnNpb25bR1NUX01BR0lDX0JJTkFSWV9WRVJTSU9OX0xFTl07Ci19IEdzdEJpbmFyeVJlZ2lzdHJ5TWFnaWM7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiAhX19HU1RfUkVHSVNUUllCSU5BUllfSF9fICovCi0KZGlmZiAtLWdpdCBhL2dzdC9nc3RyZWdpc3RyeWNodW5rcy5jIGIvZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZGI4YjguLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHJlZ2lzdHJ5Y2h1bmtzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgSm9zZXAgVG9ycmEgPGpvc2VwQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICAgICAyMDA2IE1hdGhpZXUgR2FyY2lhIDxtYXR0aGlldUBmbHVlbmRvLmNvbT4KLSAqICAgICAgICAgICAgICAgMjAwNiwyMDA3IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDggSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0gKgotICogZ3N0cmVnaXN0cnljaHVua3MuYzogR3N0UmVnaXN0cnlDaHVuayBoZWxwZXIgZm9yIHNlcmlhbGlzaW5nL2Rlc2VyaWFsaXNpbmcKLSAqIHBsdWdpbiBlbnRyaWVzIGFuZCBmZWF0dXJlcy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3RfcHJpdmF0ZS5oPgotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgotI2luY2x1ZGUgPGdzdC9nc3R0cmFjZXJmYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oPgotI2luY2x1ZGUgPGdzdC9nc3RkZXZpY2Vwcm92aWRlcmZhY3RvcnkuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dXJpLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGluZm8uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZW51bXR5cGVzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBhZHRlbXBsYXRlLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0cmVnaXN0cnljaHVua3MuaD4KLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgR1NUX0NBVF9SRUdJU1RSWQotCi0vKiBjb3VudCBzdHJpbmcgbGVuZ3RoLCBidXQgcmV0dXJuIC0xIGlmIHdlIGhpdCB0aGUgZW9mICovCi1zdGF0aWMgZ2ludAotX3N0cm5sZW4gKGNvbnN0IGdjaGFyICogc3RyLCBnaW50IG1heGxlbikKLXsKLSAgZ2ludCBsZW4gPSAwOwotCi0gIHdoaWxlIChHX0xJS0VMWSAobGVuIDwgbWF4bGVuKSkgewotICAgIGlmIChHX1VOTElLRUxZIChzdHJbbGVuXSA9PSAnXDAnKSkKLSAgICAgIHJldHVybiBsZW47Ci0gICAgbGVuKys7Ci0gIH0KLSAgcmV0dXJuIC0xOwotfQotCi0vKiBNYWNyb3MgKi8KLSNkZWZpbmUgdW5wYWNrX2VsZW1lbnQoaW5wdHIsIG91dHB0ciwgZWxlbWVudCwgZW5kcHRyLCBlcnJvcl9sYWJlbCkgR19TVE1UX1NUQVJUeyBcCi0gIGlmIChpbnB0ciArIHNpemVvZihlbGVtZW50KSA+IGVuZHB0cikgeyBcCi0gICAgR1NUX0VSUk9SICgiRmFpbGVkIHJlYWRpbmcgZWxlbWVudCAiIEdfU1RSSU5HSUZZIChlbGVtZW50KSAgXAotICAgICAgICAiLiBIYXZlICVkIGJ5dGVzIG5lZWQgJSIgR19HU0laRV9GT1JNQVQsIFwKLSAgICAgICAgKGludCkgKGVuZHB0ciAtIGlucHRyKSwgc2l6ZW9mKGVsZW1lbnQpKTsgXAotICAgIGdvdG8gZXJyb3JfbGFiZWw7IFwKLSAgfSBcCi0gIG91dHB0ciA9IChlbGVtZW50ICopIGlucHRyOyBcCi0gIGlucHRyICs9IHNpemVvZiAoZWxlbWVudCk7IFwKLX1HX1NUTVRfRU5ECi0KLSNkZWZpbmUgdW5wYWNrX2NvbnN0X3N0cmluZyhpbnB0ciwgb3V0cHRyLCBlbmRwdHIsIGVycm9yX2xhYmVsKSBHX1NUTVRfU1RBUlR7XAotICBnaW50IF9sZW4gPSBfc3RybmxlbiAoaW5wdHIsIChlbmRwdHItaW5wdHIpKTsgXAotICBpZiAoX2xlbiA9PSAtMSkgXAotICAgIGdvdG8gZXJyb3JfbGFiZWw7IFwKLSAgb3V0cHRyID0gZ19pbnRlcm5fc3RyaW5nICgoY29uc3QgZ2NoYXIgKilpbnB0cik7IFwKLSAgaW5wdHIgKz0gX2xlbiArIDE7IFwKLX1HX1NUTVRfRU5ECi0KLSNkZWZpbmUgdW5wYWNrX3N0cmluZyhpbnB0ciwgb3V0cHRyLCBlbmRwdHIsIGVycm9yX2xhYmVsKSAgR19TVE1UX1NUQVJUe1wKLSAgZ2ludCBfbGVuID0gX3N0cm5sZW4gKGlucHRyLCAoZW5kcHRyLWlucHRyKSk7IFwKLSAgaWYgKF9sZW4gPT0gLTEpIFwKLSAgICBnb3RvIGVycm9yX2xhYmVsOyBcCi0gIG91dHB0ciA9IGdfbWVtZHVwICgoZ2NvbnN0cG9pbnRlcilpbnB0ciwgX2xlbiArIDEpOyBcCi0gIGlucHRyICs9IF9sZW4gKyAxOyBcCi19R19TVE1UX0VORAotCi0jZGVmaW5lIHVucGFja19zdHJpbmdfbm9jb3B5KGlucHRyLCBvdXRwdHIsIGVuZHB0ciwgZXJyb3JfbGFiZWwpICBHX1NUTVRfU1RBUlR7XAotICBnaW50IF9sZW4gPSBfc3RybmxlbiAoaW5wdHIsIChlbmRwdHItaW5wdHIpKTsgXAotICBpZiAoX2xlbiA9PSAtMSkgXAotICAgIGdvdG8gZXJyb3JfbGFiZWw7IFwKLSAgb3V0cHRyID0gKGNvbnN0IGdjaGFyICopaW5wdHI7IFwKLSAgaW5wdHIgKz0gX2xlbiArIDE7IFwKLX1HX1NUTVRfRU5ECi0KLSNkZWZpbmUgQUxJR05NRU5UICAgICAgICAgICAgKHNpemVvZiAodm9pZCAqKSkKLSNkZWZpbmUgYWxpZ25tZW50KF9hZGRyZXNzKSAgKGdzaXplKV9hZGRyZXNzJUFMSUdOTUVOVAotI2RlZmluZSBhbGlnbihfcHRyKSAgICAgICAgICBfcHRyICs9ICgoIGFsaWdubWVudChfcHRyKSA9PSAwKSA/IDAgOiBBTElHTk1FTlQtYWxpZ25tZW50KF9wdHIpKQotCi12b2lkCi1fcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtfZnJlZSAoR3N0UmVnaXN0cnlDaHVuayAqIGNodW5rKQotewotICBpZiAoIShjaHVuay0+ZmxhZ3MgJiBHU1RfUkVHSVNUUllfQ0hVTktfRkxBR19DT05TVCkpIHsKLSAgICBpZiAoKGNodW5rLT5mbGFncyAmIEdTVF9SRUdJU1RSWV9DSFVOS19GTEFHX01BTExPQykpCi0gICAgICBnX2ZyZWUgKGNodW5rLT5kYXRhKTsKLSAgICBlbHNlCi0gICAgICBnX3NsaWNlX2ZyZWUxIChjaHVuay0+c2l6ZSwgY2h1bmstPmRhdGEpOwotICB9Ci0gIGdfc2xpY2VfZnJlZSAoR3N0UmVnaXN0cnlDaHVuaywgY2h1bmspOwotfQotCi0vKgotICogZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZzoKLSAqCi0gKiBTdG9yZSBhIGNvbnN0IHN0cmluZyBpbiBhIGJpbmFyeSBjaHVuay4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcwotICovCi1pbmxpbmUgc3RhdGljIGdib29sZWFuCi1nc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChHTGlzdCAqKiBsaXN0LCBjb25zdCBnY2hhciAqIHN0cikKLXsKLSAgR3N0UmVnaXN0cnlDaHVuayAqY2h1bms7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHN0ciA9PSBOVUxMKSkgewotICAgIEdTVF9FUlJPUiAoInVuZXhwZWN0ZWQgTlVMTCBzdHJpbmcgaW4gcGx1Z2luIG9yIHBsdWdpbiBmZWF0dXJlIGRhdGEiKTsKLSAgICBzdHIgPSAiIjsKLSAgfQotCi0gIGNodW5rID0gZ19zbGljZV9uZXcgKEdzdFJlZ2lzdHJ5Q2h1bmspOwotICBjaHVuay0+ZGF0YSA9IChncG9pbnRlcikgc3RyOwotICBjaHVuay0+c2l6ZSA9IHN0cmxlbiAoKGdjaGFyICopIGNodW5rLT5kYXRhKSArIDE7Ci0gIGNodW5rLT5mbGFncyA9IEdTVF9SRUdJU1RSWV9DSFVOS19GTEFHX0NPTlNUOwotICBjaHVuay0+YWxpZ24gPSBGQUxTRTsKLSAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGNodW5rKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfc3RyaW5nOgotICoKLSAqIFN0b3JlIGEgc3RyaW5nIGluIGEgYmluYXJ5IGNodW5rLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzCi0gKi8KLWlubGluZSBzdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9zdHJpbmcgKEdMaXN0ICoqIGxpc3QsIGdjaGFyICogc3RyKQotewotICBHc3RSZWdpc3RyeUNodW5rICpjaHVuazsKLQotICBjaHVuayA9IGdfc2xpY2VfbmV3IChHc3RSZWdpc3RyeUNodW5rKTsKLSAgY2h1bmstPmRhdGEgPSBzdHI7Ci0gIGNodW5rLT5zaXplID0gc3RybGVuICgoZ2NoYXIgKikgY2h1bmstPmRhdGEpICsgMTsKLSAgY2h1bmstPmZsYWdzID0gR1NUX1JFR0lTVFJZX0NIVU5LX0ZMQUdfTUFMTE9DOwotICBjaHVuay0+YWxpZ24gPSBGQUxTRTsKLSAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGNodW5rKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfZGF0YToKLSAqCi0gKiBTdG9yZSBzb21lIGRhdGEgaW4gYSBiaW5hcnkgY2h1bmsuCi0gKgotICogUmV0dXJuczogdGhlIGluaXRpYWxpemVkIGNodW5rCi0gKi8KLWlubGluZSBzdGF0aWMgR3N0UmVnaXN0cnlDaHVuayAqCi1nc3RfcmVnaXN0cnlfY2h1bmtzX21ha2VfZGF0YSAoZ3BvaW50ZXIgZGF0YSwgZ3Vsb25nIHNpemUpCi17Ci0gIEdzdFJlZ2lzdHJ5Q2h1bmsgKmNodW5rOwotCi0gIGNodW5rID0gZ19zbGljZV9uZXcgKEdzdFJlZ2lzdHJ5Q2h1bmspOwotICBjaHVuay0+ZGF0YSA9IGRhdGE7Ci0gIGNodW5rLT5zaXplID0gc2l6ZTsKLSAgY2h1bmstPmZsYWdzID0gR1NUX1JFR0lTVFJZX0NIVU5LX0ZMQUdfTk9ORTsKLSAgY2h1bmstPmFsaWduID0gVFJVRTsKLSAgcmV0dXJuIGNodW5rOwotfQotCi0KLS8qCi0gKiBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfcGFkX3RlbXBsYXRlOgotICoKLSAqIFN0b3JlIHBhZF90ZW1wbGF0ZXMgaW4gYmluYXJ5IGNodW5rcy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9wYWRfdGVtcGxhdGUgKEdMaXN0ICoqIGxpc3QsCi0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0ZW1wbGF0ZSkKLXsKLSAgR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlICpwdDsKLSAgR3N0UmVnaXN0cnlDaHVuayAqY2hrOwotCi0gIHB0ID0gZ19zbGljZV9uZXcgKEdzdFJlZ2lzdHJ5Q2h1bmtQYWRUZW1wbGF0ZSk7Ci0gIGNoayA9Ci0gICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX21ha2VfZGF0YSAocHQsIHNpemVvZiAoR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlKSk7Ci0KLSAgcHQtPnByZXNlbmNlID0gdGVtcGxhdGUtPnByZXNlbmNlOwotICBwdC0+ZGlyZWN0aW9uID0gdGVtcGxhdGUtPmRpcmVjdGlvbjsKLQotICAvKiBwYWNrIHBhZCB0ZW1wbGF0ZSBzdHJpbmdzICovCi0gIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsCi0gICAgICAoZ2NoYXIgKikgKHRlbXBsYXRlLT5zdGF0aWNfY2Fwcy5zdHJpbmcpKTsKLSAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUpOwotCi0gICpsaXN0ID0gZ19saXN0X3ByZXBlbmQgKCpsaXN0LCBjaGspOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKgotICogZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2ZlYXR1cmU6Ci0gKgotICogU3RvcmUgZmVhdHVyZXMgaW4gYmluYXJ5IGNodW5rcy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9mZWF0dXJlIChHTGlzdCAqKiBsaXN0LCBHc3RQbHVnaW5GZWF0dXJlICogZmVhdHVyZSkKLXsKLSAgY29uc3QgZ2NoYXIgKnR5cGVfbmFtZSA9IEdfT0JKRUNUX1RZUEVfTkFNRSAoZmVhdHVyZSk7Ci0gIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlICpwZiA9IE5VTEw7Ci0gIEdzdFJlZ2lzdHJ5Q2h1bmsgKmNoayA9IE5VTEw7Ci0gIEdMaXN0ICp3YWxrOwotICBnc2l6ZSBwZl9zaXplID0gMDsKLQotICBpZiAoIXR5cGVfbmFtZSkgewotICAgIEdTVF9FUlJPUiAoIk5VTEwgZmVhdHVyZSB0eXBlX25hbWUsIGFib3J0aW5nLiIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgIEdzdFJlZ2lzdHJ5Q2h1bmtFbGVtZW50RmFjdG9yeSAqZWY7Ci0gICAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKTsKLQotICAgIC8qIEluaXRpYWxpemUgd2l0aCB6ZXJvZXMgYmVjYXVzZSBvZiBzdHJ1Y3QgcGFkZGluZyBhbmQKLSAgICAgKiB2YWxncmluZCBjb21wbGFpbmluZyBhYm91dCBjb3B5aW5nIHVuaXRpYWxpemVkIG1lbW9yeQotICAgICAqLwotICAgIGVmID0gZ19zbGljZV9uZXcwIChHc3RSZWdpc3RyeUNodW5rRWxlbWVudEZhY3RvcnkpOwotICAgIHBmX3NpemUgPSBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2h1bmtFbGVtZW50RmFjdG9yeSk7Ci0gICAgY2hrID0gZ3N0X3JlZ2lzdHJ5X2NodW5rc19tYWtlX2RhdGEgKGVmLCBwZl9zaXplKTsKLSAgICBlZi0+bnBhZHRlbXBsYXRlcyA9IGVmLT5uaW50ZXJmYWNlcyA9IGVmLT5udXJpcHJvdG9jb2xzID0gMDsKLSAgICBwZiA9IChHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSAqKSBlZjsKLQotICAgIC8qIHNhdmUgaW50ZXJmYWNlcyAqLwotICAgIGZvciAod2FsayA9IGZhY3RvcnktPmludGVyZmFjZXM7IHdhbGs7Ci0gICAgICAgIHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsayksIGVmLT5uaW50ZXJmYWNlcysrKSB7Ci0gICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCAoZ2NoYXIgKikgd2Fsay0+ZGF0YSk7Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZlYXR1cmUsICJzYXZlZCAlZCBpbnRlcmZhY2VzICVkIHBhZCB0ZW1wbGF0ZXMiLAotICAgICAgICBlZi0+bmludGVyZmFjZXMsIGVmLT5ucGFkdGVtcGxhdGVzKTsKLQotICAgIC8qIHNhdmUgdXJpdHlwZXMgKi8KLSAgICBpZiAoR1NUX1VSSV9UWVBFX0lTX1ZBTElEIChmYWN0b3J5LT51cmlfdHlwZSkpIHsKLSAgICAgIGlmIChmYWN0b3J5LT51cmlfcHJvdG9jb2xzICYmICpmYWN0b3J5LT51cmlfcHJvdG9jb2xzKSB7Ci0gICAgICAgIEdzdFJlZ2lzdHJ5Q2h1bmsgKnN1YmNoazsKLSAgICAgICAgZ2NoYXIgKipwcm90b2NvbDsKLQotICAgICAgICBzdWJjaGsgPQotICAgICAgICAgICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19tYWtlX2RhdGEgKCZmYWN0b3J5LT51cmlfdHlwZSwKLSAgICAgICAgICAgIHNpemVvZiAoZmFjdG9yeS0+dXJpX3R5cGUpKTsKLSAgICAgICAgc3ViY2hrLT5mbGFncyA9IEdTVF9SRUdJU1RSWV9DSFVOS19GTEFHX0NPTlNUOwotCi0gICAgICAgIHByb3RvY29sID0gZmFjdG9yeS0+dXJpX3Byb3RvY29sczsKLSAgICAgICAgd2hpbGUgKCpwcm90b2NvbCkgewotICAgICAgICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsICpwcm90b2NvbCsrKTsKLSAgICAgICAgICBlZi0+bnVyaXByb3RvY29scysrOwotICAgICAgICB9Ci0gICAgICAgICpsaXN0ID0gZ19saXN0X3ByZXBlbmQgKCpsaXN0LCBzdWJjaGspOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChmZWF0dXJlLCAiU2F2ZWQgJWQgVXJpVHlwZXMiLCBlZi0+bnVyaXByb3RvY29scyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnX3dhcm5pbmcgKCJHU3RyZWFtZXIgZmVhdHVyZSAnJXMnIGlzIFVSSSBoYW5kbGVyIGJ1dCBkb2VzIG5vdCBwcm92aWRlIgotICAgICAgICAgICAgIiBhbnkgcHJvdG9jb2xzIGl0IGNhbiBoYW5kbGUiLCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBzYXZlIHBhZC10ZW1wbGF0ZXMgKi8KLSAgICBmb3IgKHdhbGsgPSBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXM7IHdhbGs7Ci0gICAgICAgIHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsayksIGVmLT5ucGFkdGVtcGxhdGVzKyspIHsKLSAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICp0ZW1wbGF0ZSA9IHdhbGstPmRhdGE7Ci0KLSAgICAgIGlmICghZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3BhZF90ZW1wbGF0ZSAobGlzdCwgdGVtcGxhdGUpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZlYXR1cmUsICJDYW4ndCBmaWxsIHBhZCB0ZW1wbGF0ZSwgYWJvcnRpbmcuIik7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBwYWNrIGVsZW1lbnQgbWV0YWRhdGEgc3RyaW5ncyAqLwotICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9zdHJpbmcgKGxpc3QsCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChmYWN0b3J5LT5tZXRhZGF0YSkpOwotICB9IGVsc2UgaWYgKEdTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWSAoZmVhdHVyZSkpIHsKLSAgICBHc3RSZWdpc3RyeUNodW5rVHlwZUZpbmRGYWN0b3J5ICp0ZmY7Ci0gICAgR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKTsKLSAgICBnY2hhciAqc3RyOwotCi0gICAgLyogSW5pdGlhbGl6ZSB3aXRoIHplcm9lcyBiZWNhdXNlIG9mIHN0cnVjdCBwYWRkaW5nIGFuZAotICAgICAqIHZhbGdyaW5kIGNvbXBsYWluaW5nIGFib3V0IGNvcHlpbmcgdW5pdGlhbGl6ZWQgbWVtb3J5Ci0gICAgICovCi0gICAgdGZmID0gZ19zbGljZV9uZXcwIChHc3RSZWdpc3RyeUNodW5rVHlwZUZpbmRGYWN0b3J5KTsKLSAgICBwZl9zaXplID0gc2l6ZW9mIChHc3RSZWdpc3RyeUNodW5rVHlwZUZpbmRGYWN0b3J5KTsKLSAgICBjaGsgPSBnc3RfcmVnaXN0cnlfY2h1bmtzX21ha2VfZGF0YSAodGZmLCBwZl9zaXplKTsKLSAgICB0ZmYtPm5leHRlbnNpb25zID0gMDsKLSAgICBwZiA9IChHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSAqKSB0ZmY7Ci0KLSAgICAvKiBzYXZlIGV4dGVuc2lvbnMgKi8KLSAgICBpZiAoZmFjdG9yeS0+ZXh0ZW5zaW9ucykgewotICAgICAgd2hpbGUgKGZhY3RvcnktPmV4dGVuc2lvbnNbdGZmLT5uZXh0ZW5zaW9uc10pIHsKLSAgICAgICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwKLSAgICAgICAgICAgIGZhY3RvcnktPmV4dGVuc2lvbnNbdGZmLT5uZXh0ZW5zaW9ucysrXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZlYXR1cmUsICJzYXZlZCAlZCBleHRlbnNpb25zIiwgdGZmLT5uZXh0ZW5zaW9ucyk7Ci0gICAgLyogc2F2ZSBjYXBzICovCi0gICAgaWYgKGZhY3RvcnktPmNhcHMpIHsKLSAgICAgIEdzdENhcHMgKmZjYXBzID0gZ3N0X2NhcHNfcmVmIChmYWN0b3J5LT5jYXBzKTsKLSAgICAgIC8qIHdlIHNpbXBsaWZ5IHRoZSBjYXBzIGJlZm9yZSBzYXZpbmcuIFRoaXMgaXMgYSBsb3QgZmFzdGVyCi0gICAgICAgKiB3aGVuIGxvYWRpbmcgdGhlbSBsYXRlciBvbiAqLwotICAgICAgZmNhcHMgPSBnc3RfY2Fwc19zaW1wbGlmeSAoZmNhcHMpOwotICAgICAgc3RyID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChmY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoZmNhcHMpOwotCi0gICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfc3RyaW5nIChsaXN0LCBzdHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCAiIik7Ci0gICAgfQotICB9IGVsc2UgaWYgKEdTVF9JU19ERVZJQ0VfUFJPVklERVJfRkFDVE9SWSAoZmVhdHVyZSkpIHsKLSAgICBHc3RSZWdpc3RyeUNodW5rRGV2aWNlUHJvdmlkZXJGYWN0b3J5ICp0ZmY7Ci0gICAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZIChmZWF0dXJlKTsKLQotICAgIC8qIEluaXRpYWxpemUgd2l0aCB6ZXJvZXMgYmVjYXVzZSBvZiBzdHJ1Y3QgcGFkZGluZyBhbmQKLSAgICAgKiB2YWxncmluZCBjb21wbGFpbmluZyBhYm91dCBjb3B5aW5nIHVuaXRpYWxpemVkIG1lbW9yeQotICAgICAqLwotICAgIHRmZiA9IGdfc2xpY2VfbmV3MCAoR3N0UmVnaXN0cnlDaHVua0RldmljZVByb3ZpZGVyRmFjdG9yeSk7Ci0gICAgY2hrID0KLSAgICAgICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19tYWtlX2RhdGEgKHRmZiwKLSAgICAgICAgc2l6ZW9mIChHc3RSZWdpc3RyeUNodW5rRGV2aWNlUHJvdmlkZXJGYWN0b3J5KSk7Ci0gICAgcGYgPSAoR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUgKikgdGZmOwotCi0KLSAgICAvKiBwYWNrIGVsZW1lbnQgbWV0YWRhdGEgc3RyaW5ncyAqLwotICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9zdHJpbmcgKGxpc3QsCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChmYWN0b3J5LT5tZXRhZGF0YSkpOwotICB9IGVsc2UgaWYgKEdTVF9JU19UUkFDRVJfRkFDVE9SWSAoZmVhdHVyZSkpIHsKLSAgICAvKiBJbml0aWFsaXplIHdpdGggemVyb2VzIGJlY2F1c2Ugb2Ygc3RydWN0IHBhZGRpbmcgYW5kCi0gICAgICogdmFsZ3JpbmQgY29tcGxhaW5pbmcgYWJvdXQgY29weWluZyB1bml0aWFsaXplZCBtZW1vcnkKLSAgICAgKi8KLSAgICBwZiA9IGdfc2xpY2VfbmV3MCAoR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUpOwotICAgIHBmX3NpemUgPSBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlKTsKLSAgICBjaGsgPSBnc3RfcmVnaXN0cnlfY2h1bmtzX21ha2VfZGF0YSAocGYsIHBmX3NpemUpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZmVhdHVyZSwgInVuaGFuZGxlZCBmZWF0dXJlIHR5cGUgJyVzJyIsIHR5cGVfbmFtZSk7Ci0gIH0KLQotICBpZiAocGYpIHsKLSAgICBwZi0+cmFuayA9IGZlYXR1cmUtPnJhbms7Ci0gICAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGNoayk7Ci0KLSAgICAvKiBwYWNrIHBsdWdpbiBmZWF0dXJlIHN0cmluZ3MgKi8KLSAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpKTsKLSAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCAoZ2NoYXIgKikgdHlwZV9uYW1lKTsKLQotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogRXJyb3JzICovCi1mYWlsOgotICBnX3NsaWNlX2ZyZWUgKEdzdFJlZ2lzdHJ5Q2h1bmssIGNoayk7Ci0gIGdfc2xpY2VfZnJlZTEgKHBmX3NpemUsIHBmKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9wbHVnaW5fZGVwIChHTGlzdCAqKiBsaXN0LCBHc3RQbHVnaW5EZXAgKiBkZXApCi17Ci0gIEdzdFJlZ2lzdHJ5Q2h1bmtEZXAgKmVkOwotICBHc3RSZWdpc3RyeUNodW5rICpjaGs7Ci0gIGdjaGFyICoqczsKLQotICBlZCA9IGdfc2xpY2VfbmV3IChHc3RSZWdpc3RyeUNodW5rRGVwKTsKLSAgY2hrID0gZ3N0X3JlZ2lzdHJ5X2NodW5rc19tYWtlX2RhdGEgKGVkLCBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2h1bmtEZXApKTsKLQotICBlZC0+ZmxhZ3MgPSBkZXAtPmZsYWdzOwotICBlZC0+bl9lbnZfdmFycyA9IDA7Ci0gIGVkLT5uX3BhdGhzID0gMDsKLSAgZWQtPm5fbmFtZXMgPSAwOwotCi0gIGVkLT5lbnZfaGFzaCA9IGRlcC0+ZW52X2hhc2g7Ci0gIGVkLT5zdGF0X2hhc2ggPSBkZXAtPnN0YXRfaGFzaDsKLQotICBmb3IgKHMgPSBkZXAtPmVudl92YXJzOyBzICE9IE5VTEwgJiYgKnMgIT0gTlVMTDsgKytzLCArK2VkLT5uX2Vudl92YXJzKQotICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9zdHJpbmcgKGxpc3QsIGdfc3RyZHVwICgqcykpOwotCi0gIGZvciAocyA9IGRlcC0+cGF0aHM7IHMgIT0gTlVMTCAmJiAqcyAhPSBOVUxMOyArK3MsICsrZWQtPm5fcGF0aHMpCi0gICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3N0cmluZyAobGlzdCwgZ19zdHJkdXAgKCpzKSk7Ci0KLSAgZm9yIChzID0gZGVwLT5uYW1lczsgcyAhPSBOVUxMICYmICpzICE9IE5VTEw7ICsrcywgKytlZC0+bl9uYW1lcykKLSAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfc3RyaW5nIChsaXN0LCBnX3N0cmR1cCAoKnMpKTsKLQotICAqbGlzdCA9IGdfbGlzdF9wcmVwZW5kICgqbGlzdCwgY2hrKTsKLQotICBHU1RfTE9HICgiU2F2ZWQgZXh0ZXJuYWwgcGx1Z2luIGRlcGVuZGVuY3kiKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBfcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfcGx1Z2luOgotICoKLSAqIEFkYXB0IGEgR3N0UGx1Z2luIHRvIG91ciBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRWxlbWVudCBzdHJ1Y3R1cmUsIGFuZAotICogcHJlcGVuZCBpdCBhcyBhIEdzdFJlZ2lzdHJ5Q2h1bmsgaW4gdGhlIHByb3ZpZGVkIGxpc3QuCi0gKgotICovCi1nYm9vbGVhbgotX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3BsdWdpbiAoR0xpc3QgKiogbGlzdCwgR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKLSAgICBHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50ICpwZTsKLSAgR3N0UmVnaXN0cnlDaHVuayAqY2hrOwotICBHTGlzdCAqcGx1Z2luX2ZlYXR1cmVzID0gTlVMTDsKLSAgR0xpc3QgKndhbGs7Ci0KLSAgcGUgPSBnX3NsaWNlX25ldyAoR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQpOwotICBjaGsgPQotICAgICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19tYWtlX2RhdGEgKHBlLAotICAgICAgc2l6ZW9mIChHc3RSZWdpc3RyeUNodW5rUGx1Z2luRWxlbWVudCkpOwotCi0gIHBlLT5maWxlX3NpemUgPSBwbHVnaW4tPmZpbGVfc2l6ZTsKLSAgcGUtPmZpbGVfbXRpbWUgPSBwbHVnaW4tPmZpbGVfbXRpbWU7Ci0gIHBlLT5uZmVhdHVyZXMgPSAwOwotICBwZS0+bl9kZXBzID0gMDsKLQotICAvKiBwYWNrIGV4dGVybmFsIGRlcHMgKi8KLSAgZm9yICh3YWxrID0gcGx1Z2luLT5wcml2LT5kZXBzOyB3YWxrICE9IE5VTEw7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgaWYgKCFnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfcGx1Z2luX2RlcCAobGlzdCwgd2Fsay0+ZGF0YSkpIHsKLSAgICAgIEdTVF9FUlJPUiAoIkNvdWxkIG5vdCBzYXZlIGV4dGVybmFsIHBsdWdpbiBkZXBlbmRlbmN5LCBhYm9ydGluZy4iKTsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgKytwZS0+bl9kZXBzOwotICB9Ci0KLSAgLyogcGFjayBwbHVnaW4gZmVhdHVyZXMgKi8KLSAgcGx1Z2luX2ZlYXR1cmVzID0KLSAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAocmVnaXN0cnksIHBsdWdpbi0+ZGVzYy5uYW1lKTsKLSAgZm9yICh3YWxrID0gcGx1Z2luX2ZlYXR1cmVzOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspLCBwZS0+bmZlYXR1cmVzKyspIHsKLSAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0gR1NUX1BMVUdJTl9GRUFUVVJFICh3YWxrLT5kYXRhKTsKLQotICAgIGlmICghZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2ZlYXR1cmUgKGxpc3QsIGZlYXR1cmUpKSB7Ci0gICAgICBHU1RfRVJST1IgKCJDYW4ndCBmaWxsIHBsdWdpbiBmZWF0dXJlLCBhYm9ydGluZy4iKTsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gIH0KLQotICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChwbHVnaW5fZmVhdHVyZXMpOwotCi0gIC8qIHBhY2sgY2FjaGUgZGF0YSAqLwotICBpZiAocGx1Z2luLT5wcml2LT5jYWNoZV9kYXRhKSB7Ci0gICAgZ2NoYXIgKmNhY2hlX3N0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChwbHVnaW4tPnByaXYtPmNhY2hlX2RhdGEpOwotICAgIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9zdHJpbmcgKGxpc3QsIGNhY2hlX3N0cik7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgIiIpOwotICB9Ci0KLSAgLyogcGFjayBwbHVnaW4gZWxlbWVudCBzdHJpbmdzICovCi0gIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsCi0gICAgICAocGx1Z2luLT5kZXNjLnJlbGVhc2VfZGF0ZXRpbWUpID8gcGx1Z2luLT5kZXNjLnJlbGVhc2VfZGF0ZXRpbWUgOiAiIik7Ci0gIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIHBsdWdpbi0+ZGVzYy5vcmlnaW4pOwotICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCBwbHVnaW4tPmRlc2MucGFja2FnZSk7Ci0gIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIHBsdWdpbi0+ZGVzYy5zb3VyY2UpOwotICBnc3RfcmVnaXN0cnlfY2h1bmtzX3NhdmVfY29uc3Rfc3RyaW5nIChsaXN0LCBwbHVnaW4tPmRlc2MubGljZW5zZSk7Ci0gIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIHBsdWdpbi0+ZGVzYy52ZXJzaW9uKTsKLSAgZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2NvbnN0X3N0cmluZyAobGlzdCwgcGx1Z2luLT5maWxlbmFtZSk7Ci0gIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIHBsdWdpbi0+ZGVzYy5kZXNjcmlwdGlvbik7Ci0gIGdzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9jb25zdF9zdHJpbmcgKGxpc3QsIHBsdWdpbi0+ZGVzYy5uYW1lKTsKLQotICAqbGlzdCA9IGdfbGlzdF9wcmVwZW5kICgqbGlzdCwgY2hrKTsKLQotICBHU1RfREVCVUcgKCJGb3VuZCAlZCBmZWF0dXJlcyBpbiBwbHVnaW4gXCIlc1wiIiwgcGUtPm5mZWF0dXJlcywKLSAgICAgIHBsdWdpbi0+ZGVzYy5uYW1lKTsKLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRXJyb3JzICovCi1mYWlsOgotICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChwbHVnaW5fZmVhdHVyZXMpOwotICBnX3NsaWNlX2ZyZWUgKEdzdFJlZ2lzdHJ5Q2h1bmssIGNoayk7Ci0gIGdfc2xpY2VfZnJlZSAoR3N0UmVnaXN0cnlDaHVua1BsdWdpbkVsZW1lbnQsIHBlKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKgotICogZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BhZF90ZW1wbGF0ZToKLSAqCi0gKiBNYWtlIGEgbmV3IEdzdFN0YXRpY1BhZFRlbXBsYXRlIGZyb20gY3VycmVudCBHc3RSZWdpc3RyeUNodW5rUGFkVGVtcGxhdGUKLSAqIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiBuZXcgR3N0U3RhdGljUGFkVGVtcGxhdGUKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfcGFkX3RlbXBsYXRlIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnksIGdjaGFyICoqIGluLAotICAgIGdjaGFyICogZW5kKQotewotICBHc3RSZWdpc3RyeUNodW5rUGFkVGVtcGxhdGUgKnB0OwotICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGxhdGUgPSBOVUxMOwotCi0gIGFsaWduICgqaW4pOwotICBHU1RfREVCVUcgKCJSZWFkaW5nL2Nhc3RpbmcgZm9yIEdzdFJlZ2lzdHJ5Q2h1bmtQYWRUZW1wbGF0ZSBhdCBhZGRyZXNzICVwIiwKLSAgICAgICppbik7Ci0gIHVucGFja19lbGVtZW50ICgqaW4sIHB0LCBHc3RSZWdpc3RyeUNodW5rUGFkVGVtcGxhdGUsIGVuZCwgZmFpbCk7Ci0KLSAgdGVtcGxhdGUgPSBnX3NsaWNlX25ldyAoR3N0U3RhdGljUGFkVGVtcGxhdGUpOwotICB0ZW1wbGF0ZS0+cHJlc2VuY2UgPSBwdC0+cHJlc2VuY2U7Ci0gIHRlbXBsYXRlLT5kaXJlY3Rpb24gPSAoR3N0UGFkRGlyZWN0aW9uKSBwdC0+ZGlyZWN0aW9uOwotICB0ZW1wbGF0ZS0+c3RhdGljX2NhcHMuY2FwcyA9IE5VTEw7Ci0KLSAgLyogdW5wYWNrIHBhZCB0ZW1wbGF0ZSBzdHJpbmdzICovCi0gIHVucGFja19jb25zdF9zdHJpbmcgKCppbiwgdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUsIGVuZCwgZmFpbCk7Ci0gIHVucGFja19jb25zdF9zdHJpbmcgKCppbiwgdGVtcGxhdGUtPnN0YXRpY19jYXBzLnN0cmluZywgZW5kLCBmYWlsKTsKLQotICBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGZhY3RvcnksIHRlbXBsYXRlKTsKLSAgR1NUX0RFQlVHICgiQWRkZWQgcGFkX3RlbXBsYXRlICVzIiwgdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUpOwotCi0gIHJldHVybiBUUlVFOwotZmFpbDoKLSAgR1NUX0lORk8gKCJSZWFkaW5nIHBhZCB0ZW1wbGF0ZSBmYWlsZWQiKTsKLSAgaWYgKHRlbXBsYXRlKQotICAgIGdfc2xpY2VfZnJlZSAoR3N0U3RhdGljUGFkVGVtcGxhdGUsIHRlbXBsYXRlKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKgotICogZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX2ZlYXR1cmU6Ci0gKgotICogTWFrZSBhIG5ldyBHc3RQbHVnaW5GZWF0dXJlIGZyb20gY3VycmVudCBiaW5hcnkgcGx1Z2luIGZlYXR1cmUgc3RydWN0dXJlCi0gKgotICogUmV0dXJuczogbmV3IEdzdFBsdWdpbkZlYXR1cmUKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfZmVhdHVyZSAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgZ2NoYXIgKiogaW4sCi0gICAgZ2NoYXIgKiBlbmQsIEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUgKnBmID0gTlVMTDsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZSA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpjb25zdF9zdHIsICp0eXBlX25hbWU7Ci0gIGNvbnN0IGdjaGFyICpmZWF0dXJlX25hbWU7Ci0gIGNvbnN0IGdjaGFyICpwbHVnaW5fbmFtZTsKLSAgZ2NoYXIgKnN0cjsKLSAgR1R5cGUgdHlwZTsKLSAgZ3VpbnQgaTsKLQotICBwbHVnaW5fbmFtZSA9IHBsdWdpbi0+ZGVzYy5uYW1lOwotCi0gIC8qIHVucGFjayBwbHVnaW4gZmVhdHVyZSBzdHJpbmdzICovCi0gIHVucGFja19zdHJpbmdfbm9jb3B5ICgqaW4sIHR5cGVfbmFtZSwgZW5kLCBmYWlsKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIXR5cGVfbmFtZSkpIHsKLSAgICBHU1RfRVJST1IgKCJObyBmZWF0dXJlIHR5cGUgbmFtZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIHVucGFjayBtb3JlIHBsdWdpbiBmZWF0dXJlIHN0cmluZ3MgKi8KLSAgdW5wYWNrX3N0cmluZ19ub2NvcHkgKCppbiwgZmVhdHVyZV9uYW1lLCBlbmQsIGZhaWwpOwotCi0gIEdTVF9ERUJVRyAoIlBsdWdpbiAnJXMnIGZlYXR1cmUgJyVzJyB0eXBlbmFtZSA6ICclcyciLCBwbHVnaW5fbmFtZSwKLSAgICAgIGZlYXR1cmVfbmFtZSwgdHlwZV9uYW1lKTsKLQotICBpZiAoR19VTkxJS0VMWSAoISh0eXBlID0gZ190eXBlX2Zyb21fbmFtZSAodHlwZV9uYW1lKSkpKSB7Ci0gICAgR1NUX0VSUk9SICgiVW5rbm93biB0eXBlIGZyb20gdHlwZW5hbWUgJyVzJyBmb3IgcGx1Z2luICclcyciLCB0eXBlX25hbWUsCi0gICAgICAgIHBsdWdpbl9uYW1lKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgaWYgKEdfVU5MSUtFTFkgKChmZWF0dXJlID0gZ19vYmplY3RfbmV3diAodHlwZSwgMCwgTlVMTCkpID09IE5VTEwpKSB7Ci0gICAgR1NUX0VSUk9SICgiQ2FuJ3QgY3JlYXRlIGZlYXR1cmUgZnJvbSB0eXBlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZSAoZmVhdHVyZSwgZmVhdHVyZV9uYW1lKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIUdTVF9JU19QTFVHSU5fRkVBVFVSRSAoZmVhdHVyZSkpKSB7Ci0gICAgR1NUX0VSUk9SICgidHlwZW5hbWUgOiAnJXMnIGlzIG5vdCBhIHBsdWdpbiBmZWF0dXJlIiwgdHlwZV9uYW1lKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLQotICBpZiAoR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpIHsKLSAgICBHc3RSZWdpc3RyeUNodW5rRWxlbWVudEZhY3RvcnkgKmVmOwotICAgIGd1aW50IG47Ci0gICAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZX0NBU1QgKGZlYXR1cmUpOwotICAgIGdjaGFyICpzdHI7Ci0gICAgY29uc3QgZ2NoYXIgKm1ldGFfZGF0YV9zdHI7Ci0KLSAgICBhbGlnbiAoKmluKTsKLSAgICBHU1RfTE9HICgiUmVhZGluZy9jYXN0aW5nIGZvciBHc3RSZWdpc3RyeUNodW5rRWxlbWVudEZhY3RvcnkgYXQgYWRkcmVzcyAlcCIsCi0gICAgICAgICppbik7Ci0gICAgdW5wYWNrX2VsZW1lbnQgKCppbiwgZWYsIEdzdFJlZ2lzdHJ5Q2h1bmtFbGVtZW50RmFjdG9yeSwgZW5kLCBmYWlsKTsKLSAgICBwZiA9IChHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSAqKSBlZjsKLQotICAgIC8qIHVucGFjayBlbGVtZW50IGZhY3Rvcnkgc3RyaW5ncyAqLwotICAgIHVucGFja19zdHJpbmdfbm9jb3B5ICgqaW4sIG1ldGFfZGF0YV9zdHIsIGVuZCwgZmFpbCk7Ci0gICAgaWYgKG1ldGFfZGF0YV9zdHIgJiYgKm1ldGFfZGF0YV9zdHIpIHsKLSAgICAgIGZhY3RvcnktPm1ldGFkYXRhID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAobWV0YV9kYXRhX3N0ciwgTlVMTCk7Ci0gICAgICBpZiAoIWZhY3RvcnktPm1ldGFkYXRhKSB7Ci0gICAgICAgIEdTVF9FUlJPUgotICAgICAgICAgICAgKCJFcnJvciB3aGVuIHRyeWluZyB0byBkZXNlcmlhbGl6ZSBzdHJ1Y3R1cmUgZm9yIG1ldGFkYXRhICclcyciLAotICAgICAgICAgICAgbWV0YV9kYXRhX3N0cik7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgbiA9IGVmLT5ucGFkdGVtcGxhdGVzOwotICAgIEdTVF9ERUJVRyAoIkVsZW1lbnQgZmFjdG9yeSA6IG5wYWR0ZW1wbGF0ZXM9JWQiLCBuKTsKLQotICAgIC8qIGxvYWQgcGFkIHRlbXBsYXRlcyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGlmIChHX1VOTElLRUxZICghZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BhZF90ZW1wbGF0ZSAoZmFjdG9yeSwgaW4sCi0gICAgICAgICAgICAgICAgICBlbmQpKSkgewotICAgICAgICBHU1RfRVJST1IgKCJFcnJvciB3aGlsZSBsb2FkaW5nIGJpbmFyeSBwYWQgdGVtcGxhdGUiKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIGxvYWQgdXJpdHlwZXMgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoKG4gPSBlZi0+bnVyaXByb3RvY29scykpKSB7Ci0gICAgICBHU1RfREVCVUcgKCJSZWFkaW5nICVkIFVyaVR5cGVzIGF0IGFkZHJlc3MgJXAiLCBuLCAqaW4pOwotCi0gICAgICBhbGlnbiAoKmluKTsKLSAgICAgIGZhY3RvcnktPnVyaV90eXBlID0gKigoZ3VpbnQgKikgKiBpbik7Ci0gICAgICAqaW4gKz0gc2l6ZW9mIChmYWN0b3J5LT51cmlfdHlwZSk7Ci0gICAgICAvKnVucGFja19lbGVtZW50KCppbiwgJmZhY3RvcnktPnVyaV90eXBlLCBmYWN0b3J5LT51cmlfdHlwZSwgZW5kLCBmYWlsKTsgKi8KLQotICAgICAgZmFjdG9yeS0+dXJpX3Byb3RvY29scyA9IGdfbmV3MCAoZ2NoYXIgKiwgbiArIDEpOwotICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICB1bnBhY2tfc3RyaW5nICgqaW4sIHN0ciwgZW5kLCBmYWlsKTsKLSAgICAgICAgZmFjdG9yeS0+dXJpX3Byb3RvY29sc1tpXSA9IHN0cjsKLSAgICAgIH0KLSAgICB9Ci0gICAgLyogbG9hZCBpbnRlcmZhY2VzICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKChuID0gZWYtPm5pbnRlcmZhY2VzKSkpIHsKLSAgICAgIEdTVF9ERUJVRyAoIlJlYWRpbmcgJWQgSW50ZXJmYWNlcyBhdCBhZGRyZXNzICVwIiwgbiwgKmluKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgdW5wYWNrX3N0cmluZ19ub2NvcHkgKCppbiwgY29uc3Rfc3RyLCBlbmQsIGZhaWwpOwotICAgICAgICBfX2dzdF9lbGVtZW50X2ZhY3RvcnlfYWRkX2ludGVyZmFjZSAoZmFjdG9yeSwgY29uc3Rfc3RyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgIEdzdFJlZ2lzdHJ5Q2h1bmtUeXBlRmluZEZhY3RvcnkgKnRmZjsKLSAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3RvcnkgPSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkgKGZlYXR1cmUpOwotCi0gICAgYWxpZ24gKCppbik7Ci0gICAgR1NUX0RFQlVHCi0gICAgICAgICgiUmVhZGluZy9jYXN0aW5nIGZvciBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSBhdCBhZGRyZXNzICVwIiwKLSAgICAgICAgKmluKTsKLSAgICB1bnBhY2tfZWxlbWVudCAoKmluLCB0ZmYsIEdzdFJlZ2lzdHJ5Q2h1bmtUeXBlRmluZEZhY3RvcnksIGVuZCwgZmFpbCk7Ci0gICAgcGYgPSAoR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUgKikgdGZmOwotCi0gICAgLyogbG9hZCB0eXBlZmluZGVyIGNhcHMgKi8KLSAgICB1bnBhY2tfc3RyaW5nX25vY29weSAoKmluLCBjb25zdF9zdHIsIGVuZCwgZmFpbCk7Ci0gICAgaWYgKGNvbnN0X3N0ciAhPSBOVUxMICYmICpjb25zdF9zdHIgIT0gJ1wwJykKLSAgICAgIGZhY3RvcnktPmNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoY29uc3Rfc3RyKTsKLSAgICBlbHNlCi0gICAgICBmYWN0b3J5LT5jYXBzID0gTlVMTDsKLQotICAgIC8qIGxvYWQgZXh0ZW5zaW9ucyAqLwotICAgIGlmICh0ZmYtPm5leHRlbnNpb25zKSB7Ci0gICAgICBHU1RfREVCVUcgKCJSZWFkaW5nICVkIFR5cGVmaW5kIGV4dGVuc2lvbnMgYXQgYWRkcmVzcyAlcCIsCi0gICAgICAgICAgdGZmLT5uZXh0ZW5zaW9ucywgKmluKTsKLSAgICAgIGZhY3RvcnktPmV4dGVuc2lvbnMgPSBnX25ldzAgKGdjaGFyICosIHRmZi0+bmV4dGVuc2lvbnMgKyAxKTsKLSAgICAgIC8qIHVucGFjayBpbiByZXZlcnNlIG9yZGVyIHRvIG1haW50YWluIHRoZSBjb3JyZWN0IG9yZGVyICovCi0gICAgICBmb3IgKGkgPSB0ZmYtPm5leHRlbnNpb25zOyBpID4gMDsgaS0tKSB7Ci0gICAgICAgIHVucGFja19zdHJpbmcgKCppbiwgc3RyLCBlbmQsIGZhaWwpOwotICAgICAgICBmYWN0b3J5LT5leHRlbnNpb25zW2kgLSAxXSA9IHN0cjsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgIEdzdFJlZ2lzdHJ5Q2h1bmtEZXZpY2VQcm92aWRlckZhY3RvcnkgKmRtZjsKLSAgICBHc3REZXZpY2VQcm92aWRlckZhY3RvcnkgKmZhY3RvcnkgPSBHU1RfREVWSUNFX1BST1ZJREVSX0ZBQ1RPUlkgKGZlYXR1cmUpOwotICAgIGNvbnN0IGdjaGFyICptZXRhX2RhdGFfc3RyOwotCi0gICAgYWxpZ24gKCppbik7Ci0gICAgR1NUX0RFQlVHCi0gICAgICAgICgiUmVhZGluZy9jYXN0aW5nIGZvciBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSBhdCBhZGRyZXNzICVwIiwKLSAgICAgICAgKmluKTsKLQotICAgIHVucGFja19lbGVtZW50ICgqaW4sIGRtZiwgR3N0UmVnaXN0cnlDaHVua0RldmljZVByb3ZpZGVyRmFjdG9yeSwgZW5kLCBmYWlsKTsKLQotICAgIHBmID0gKEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlICopIGRtZjsKLQotICAgIC8qIHVucGFjayBlbGVtZW50IGZhY3Rvcnkgc3RyaW5ncyAqLwotICAgIHVucGFja19zdHJpbmdfbm9jb3B5ICgqaW4sIG1ldGFfZGF0YV9zdHIsIGVuZCwgZmFpbCk7Ci0gICAgaWYgKG1ldGFfZGF0YV9zdHIgJiYgKm1ldGFfZGF0YV9zdHIpIHsKLSAgICAgIGZhY3RvcnktPm1ldGFkYXRhID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAobWV0YV9kYXRhX3N0ciwgTlVMTCk7Ci0gICAgICBpZiAoIWZhY3RvcnktPm1ldGFkYXRhKSB7Ci0gICAgICAgIEdTVF9FUlJPUgotICAgICAgICAgICAgKCJFcnJvciB3aGVuIHRyeWluZyB0byBkZXNlcmlhbGl6ZSBzdHJ1Y3R1cmUgZm9yIG1ldGFkYXRhICclcyciLAotICAgICAgICAgICAgbWV0YV9kYXRhX3N0cik7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX1RSQUNFUl9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgIGFsaWduICgqaW4pOwotICAgIEdTVF9ERUJVRwotICAgICAgICAoIlJlYWRpbmcvY2FzdGluZyBmb3IgR3N0UmVnaXN0cnlDaHVua1BsdWdpbkZlYXR1cmUgYXQgYWRkcmVzcyAlcCIsCi0gICAgICAgICppbik7Ci0gICAgdW5wYWNrX2VsZW1lbnQgKCppbiwgcGYsIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlLCBlbmQsIGZhaWwpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgidW5oYW5kbGVkIGZhY3RvcnkgdHlwZSA6ICVzIiwgR19PQkpFQ1RfVFlQRV9OQU1FIChmZWF0dXJlKSk7Ci0gICAgZ290byBmYWlsOwotICB9Ci0KLSAgZmVhdHVyZS0+cmFuayA9IHBmLT5yYW5rOwotCi0gIGZlYXR1cmUtPnBsdWdpbl9uYW1lID0gcGx1Z2luX25hbWU7Ci0gIGZlYXR1cmUtPnBsdWdpbiA9IHBsdWdpbjsKLSAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlciAoKEdPYmplY3QgKikgcGx1Z2luLAotICAgICAgKGdwb2ludGVyICopICYgZmVhdHVyZS0+cGx1Z2luKTsKLQotICBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBmZWF0dXJlKTsKLSAgR1NUX0RFQlVHICgiQWRkZWQgZmVhdHVyZSAlcywgcGx1Z2luICVwICVzIiwgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSwKLSAgICAgIHBsdWdpbiwgcGx1Z2luX25hbWUpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVycm9ycyAqLwotZmFpbDoKLSAgR1NUX0lORk8gKCJSZWFkaW5nIHBsdWdpbiBmZWF0dXJlIGZhaWxlZCIpOwotICBpZiAoZmVhdHVyZSkgewotICAgIGlmIChHU1RfSVNfT0JKRUNUIChmZWF0dXJlKSkKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGZlYXR1cmUpOwotICAgIGVsc2UKLSAgICAgIGdfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnY2hhciAqKgotZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbl9kZXBfc3RydiAoZ2NoYXIgKiogaW4sIGdjaGFyICogZW5kLCBndWludCBuKQotewotICBnY2hhciAqKmFycjsKLQotICBpZiAobiA9PSAwKQotICAgIHJldHVybiBOVUxMOwotCi0gIGFyciA9IGdfbmV3MCAoZ2NoYXIgKiwgbiArIDEpOwotICB3aGlsZSAobiA+IDApIHsKLSAgICB1bnBhY2tfc3RyaW5nICgqaW4sIGFycltuIC0gMV0sIGVuZCwgZmFpbCk7Ci0gICAgLS1uOwotICB9Ci0gIHJldHVybiBhcnI7Ci1mYWlsOgotICBHU1RfSU5GTyAoIlJlYWRpbmcgcGx1Z2luIGRlcGVuZGVuY3kgc3RyaW5ncyBmYWlsZWQiKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbl9kZXAgKEdzdFBsdWdpbiAqIHBsdWdpbiwgZ2NoYXIgKiogaW4sCi0gICAgZ2NoYXIgKiBlbmQpCi17Ci0gIEdzdFBsdWdpbkRlcCAqZGVwOwotICBHc3RSZWdpc3RyeUNodW5rRGVwICpkOwotICBnY2hhciAqKnM7Ci0KLSAgYWxpZ24gKCppbik7Ci0gIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICJVbnBhY2tpbmcgR3N0UmVnaXN0cnlDaHVua0RlcCBmcm9tICVwIiwgKmluKTsKLSAgdW5wYWNrX2VsZW1lbnQgKCppbiwgZCwgR3N0UmVnaXN0cnlDaHVua0RlcCwgZW5kLCBmYWlsKTsKLQotICBkZXAgPSBnX3NsaWNlX25ldyAoR3N0UGx1Z2luRGVwKTsKLQotICBkZXAtPmVudl9oYXNoID0gZC0+ZW52X2hhc2g7Ci0gIGRlcC0+c3RhdF9oYXNoID0gZC0+c3RhdF9oYXNoOwotCi0gIGRlcC0+ZmxhZ3MgPSAoR3N0UGx1Z2luRGVwZW5kZW5jeUZsYWdzKSBkLT5mbGFnczsKLQotICBkZXAtPm5hbWVzID0gZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbl9kZXBfc3RydiAoaW4sIGVuZCwgZC0+bl9uYW1lcyk7Ci0gIGRlcC0+cGF0aHMgPSBnc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfcGx1Z2luX2RlcF9zdHJ2IChpbiwgZW5kLCBkLT5uX3BhdGhzKTsKLSAgZGVwLT5lbnZfdmFycyA9Ci0gICAgICBnc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfcGx1Z2luX2RlcF9zdHJ2IChpbiwgZW5kLCBkLT5uX2Vudl92YXJzKTsKLQotICBwbHVnaW4tPnByaXYtPmRlcHMgPSBnX2xpc3RfYXBwZW5kIChwbHVnaW4tPnByaXYtPmRlcHMsIGRlcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGx1Z2luLCAiTG9hZGVkIGV4dGVybmFsIHBsdWdpbiBkZXBlbmRlbmN5IGZyb20gcmVnaXN0cnk6ICIKLSAgICAgICJlbnZfaGFzaDogJTA4eCwgc3RhdF9oYXNoOiAlMDh4IiwgZGVwLT5lbnZfaGFzaCwgZGVwLT5zdGF0X2hhc2gpOwotICBmb3IgKHMgPSBkZXAtPmVudl92YXJzOyBzICE9IE5VTEwgJiYgKnMgIT0gTlVMTDsgKytzKQotICAgIEdTVF9MT0dfT0JKRUNUIChwbHVnaW4sICIgZXZhcjogJXMiLCAqcyk7Ci0gIGZvciAocyA9IGRlcC0+cGF0aHM7IHMgIT0gTlVMTCAmJiAqcyAhPSBOVUxMOyArK3MpCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBsdWdpbiwgIiBwYXRoOiAlcyIsICpzKTsKLSAgZm9yIChzID0gZGVwLT5uYW1lczsgcyAhPSBOVUxMICYmICpzICE9IE5VTEw7ICsrcykKLSAgICBHU1RfTE9HX09CSkVDVCAocGx1Z2luLCAiIG5hbWU6ICVzIiwgKnMpOwotCi0gIHJldHVybiBUUlVFOwotZmFpbDoKLSAgR1NUX0lORk8gKCJSZWFkaW5nIHBsdWdpbiBkZXBlbmRlbmN5IGZhaWxlZCIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLQotLyoKLSAqIF9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW46Ci0gKgotICogTWFrZSBhIG5ldyBHc3RQbHVnaW4gZnJvbSBjdXJyZW50IEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50IHN0cnVjdHVyZQotICogYW5kIGFkZCBpdCB0byB0aGUgR3N0UmVnaXN0cnkuIFJldHVybiBhbiBvZmZzZXQgdG8gdGhlIG5leHQKLSAqIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50IHN0cnVjdHVyZS4KLSAqLwotZ2Jvb2xlYW4KLV9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW4gKEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGdjaGFyICoqIGluLAotICAgIGdjaGFyICogZW5kLCBHc3RQbHVnaW4gKiogb3V0X3BsdWdpbikKLXsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIGdjaGFyICpzdGFydCA9ICppbjsKLSNlbmRpZgotICBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRWxlbWVudCAqcGU7Ci0gIGNvbnN0IGdjaGFyICpjYWNoZV9zdHIgPSBOVUxMOwotICBHc3RQbHVnaW4gKnBsdWdpbiA9IE5VTEw7Ci0gIGd1aW50IGksIG47Ci0KLSAgYWxpZ24gKCppbik7Ci0gIEdTVF9MT0cgKCJSZWFkaW5nL2Nhc3RpbmcgZm9yIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50IGF0IGFkZHJlc3MgJXAiLAotICAgICAgKmluKTsKLSAgdW5wYWNrX2VsZW1lbnQgKCppbiwgcGUsIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50LCBlbmQsIGZhaWwpOwotCi0gIHBsdWdpbiA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1BMVUdJTiwgMCwgTlVMTCk7Ci0KLSAgLyogVE9ETzogYWxzbyBzZXQgR1NUX1BMVUdJTl9GTEFHX0NPTlNUICovCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBsdWdpbiwgR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRCk7Ci0gIHBsdWdpbi0+ZmlsZV9tdGltZSA9IHBlLT5maWxlX210aW1lOwotICBwbHVnaW4tPmZpbGVfc2l6ZSA9IHBlLT5maWxlX3NpemU7Ci0KLSAgLyogdW5wYWNrIHBsdWdpbiBlbGVtZW50IHN0cmluZ3MgKi8KLSAgdW5wYWNrX2NvbnN0X3N0cmluZyAoKmluLCBwbHVnaW4tPmRlc2MubmFtZSwgZW5kLCBmYWlsKTsKLSAgdW5wYWNrX2NvbnN0X3N0cmluZyAoKmluLCBwbHVnaW4tPmRlc2MuZGVzY3JpcHRpb24sIGVuZCwgZmFpbCk7Ci0gIHVucGFja19zdHJpbmcgKCppbiwgcGx1Z2luLT5maWxlbmFtZSwgZW5kLCBmYWlsKTsKLSAgdW5wYWNrX2NvbnN0X3N0cmluZyAoKmluLCBwbHVnaW4tPmRlc2MudmVyc2lvbiwgZW5kLCBmYWlsKTsKLSAgdW5wYWNrX2NvbnN0X3N0cmluZyAoKmluLCBwbHVnaW4tPmRlc2MubGljZW5zZSwgZW5kLCBmYWlsKTsKLSAgdW5wYWNrX2NvbnN0X3N0cmluZyAoKmluLCBwbHVnaW4tPmRlc2Muc291cmNlLCBlbmQsIGZhaWwpOwotICB1bnBhY2tfY29uc3Rfc3RyaW5nICgqaW4sIHBsdWdpbi0+ZGVzYy5wYWNrYWdlLCBlbmQsIGZhaWwpOwotICB1bnBhY2tfY29uc3Rfc3RyaW5nICgqaW4sIHBsdWdpbi0+ZGVzYy5vcmlnaW4sIGVuZCwgZmFpbCk7Ci0gIHVucGFja19jb25zdF9zdHJpbmcgKCppbiwgcGx1Z2luLT5kZXNjLnJlbGVhc2VfZGF0ZXRpbWUsIGVuZCwgZmFpbCk7Ci0KLSAgR1NUX0xPRyAoInJlYWQgc3RyaW5ncyBmb3IgbmFtZT0nJXMnIiwgcGx1Z2luLT5kZXNjLm5hbWUpOwotICBHU1RfTE9HICgiICBkZXNjLmRlc2NyaXB0aW9uPSclcyciLCBwbHVnaW4tPmRlc2MuZGVzY3JpcHRpb24pOwotICBHU1RfTE9HICgiICBmaWxlbmFtZT0nJXMnIiwgcGx1Z2luLT5maWxlbmFtZSk7Ci0gIEdTVF9MT0cgKCIgIGRlc2MudmVyc2lvbj0nJXMnIiwgcGx1Z2luLT5kZXNjLnZlcnNpb24pOwotICBHU1RfTE9HICgiICBkZXNjLmxpY2Vuc2U9JyVzJyIsIHBsdWdpbi0+ZGVzYy5saWNlbnNlKTsKLSAgR1NUX0xPRyAoIiAgZGVzYy5zb3VyY2U9JyVzJyIsIHBsdWdpbi0+ZGVzYy5zb3VyY2UpOwotICBHU1RfTE9HICgiICBkZXNjLnBhY2thZ2U9JyVzJyIsIHBsdWdpbi0+ZGVzYy5wYWNrYWdlKTsKLSAgR1NUX0xPRyAoIiAgZGVzYy5vcmlnaW49JyVzJyIsIHBsdWdpbi0+ZGVzYy5vcmlnaW4pOwotICBHU1RfTE9HICgiICBkZXNjLmRhdGV0aW1lPSVzIiwgcGx1Z2luLT5kZXNjLnJlbGVhc2VfZGF0ZXRpbWUpOwotCi0gIGlmIChwbHVnaW4tPmRlc2MucmVsZWFzZV9kYXRldGltZVswXSA9PSAnXDAnKQotICAgIHBsdWdpbi0+ZGVzYy5yZWxlYXNlX2RhdGV0aW1lID0gTlVMTDsKLQotICAvKiB1bnBhY2sgY2FjaGUgZGF0YSAqLwotICB1bnBhY2tfc3RyaW5nX25vY29weSAoKmluLCBjYWNoZV9zdHIsIGVuZCwgZmFpbCk7Ci0gIGlmIChjYWNoZV9zdHIgIT0gTlVMTCAmJiAqY2FjaGVfc3RyICE9ICdcMCcpCi0gICAgcGx1Z2luLT5wcml2LT5jYWNoZV9kYXRhID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoY2FjaGVfc3RyLCBOVUxMKTsKLQotICAvKiBJZiB0aGUgbGljZW5zZSBzdHJpbmcgaXMgJ0JMQUNLTElTVCcsIG1hcmsgdGhpcyBhcyBhIGJsYWNrbGlzdGVkCi0gICAqIHBsdWdpbiAqLwotICBpZiAoc3RyY21wIChwbHVnaW4tPmRlc2MubGljZW5zZSwgIkJMQUNLTElTVCIpID09IDApCi0gICAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGx1Z2luLCBHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQpOwotCi0gIHBsdWdpbi0+YmFzZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIChwbHVnaW4tPmZpbGVuYW1lKTsKLQotICAvKiBUYWtlcyBvd25lcnNoaXAgb2YgcGx1Z2luICovCi0gIGdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luIChyZWdpc3RyeSwgcGx1Z2luKTsKLSAgbiA9IHBlLT5uZmVhdHVyZXM7Ci0gIEdTVF9ERUJVRyAoIkFkZGVkIHBsdWdpbiAnJXMnIHBsdWdpbiB3aXRoICVkIGZlYXR1cmVzIGZyb20gYmluYXJ5IHJlZ2lzdHJ5IiwKLSAgICAgIHBsdWdpbi0+ZGVzYy5uYW1lLCBuKTsKLQotICAvKiBMb2FkIHBsdWdpbiBmZWF0dXJlcyAqLwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfZmVhdHVyZSAocmVnaXN0cnksIGluLCBlbmQsCi0gICAgICAgICAgICAgICAgcGx1Z2luKSkpIHsKLSAgICAgIEdTVF9FUlJPUiAoIkVycm9yIHdoaWxlIGxvYWRpbmcgYmluYXJ5IGZlYXR1cmUgZm9yIHBsdWdpbiAnJXMnIiwKLSAgICAgICAgICBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZGVzYy5uYW1lKSk7Ci0gICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbiAocmVnaXN0cnksIHBsdWdpbik7Ci0gICAgICBnb3RvIGZhaWw7Ci0gICAgfQotICB9Ci0KLSAgLyogTG9hZCBleHRlcm5hbCBwbHVnaW4gZGVwZW5kZW5jaWVzICovCi0gIGZvciAoaSA9IDA7IGkgPCBwZS0+bl9kZXBzOyArK2kpIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9wbHVnaW5fZGVwIChwbHVnaW4sIGluLCBlbmQpKSkgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAocGx1Z2luLCAiQ291bGQgbm90IHJlYWQgZXh0ZXJuYWwgcGx1Z2luIGRlcGVuZGVuY3kgIgotICAgICAgICAgICJmb3IgcGx1Z2luICclcyciLCBHU1RfU1RSX05VTEwgKHBsdWdpbi0+ZGVzYy5uYW1lKSk7Ci0gICAgICBnc3RfcmVnaXN0cnlfcmVtb3ZlX3BsdWdpbiAocmVnaXN0cnksIHBsdWdpbik7Ci0gICAgICBnb3RvIGZhaWw7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG91dF9wbHVnaW4pCi0gICAgKm91dF9wbHVnaW4gPSBwbHVnaW47Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRXJyb3JzICovCi1mYWlsOgotICBHU1RfSU5GTyAoIlJlYWRpbmcgcGx1Z2luIGZhaWxlZCBhZnRlciAldSBieXRlcyIsIChndWludCkgKGVuZCAtIHN0YXJ0KSk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZAotX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX2dsb2JhbF9oZWFkZXIgKEdMaXN0ICoqIGxpc3QsCi0gICAgR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgZ3VpbnQzMiBmaWx0ZXJfZW52X2hhc2gpCi17Ci0gIEdzdFJlZ2lzdHJ5Q2h1bmtHbG9iYWxIZWFkZXIgKmhkcjsKLSAgR3N0UmVnaXN0cnlDaHVuayAqY2hrOwotCi0gIGhkciA9IGdfc2xpY2VfbmV3IChHc3RSZWdpc3RyeUNodW5rR2xvYmFsSGVhZGVyKTsKLSAgY2hrID0gZ3N0X3JlZ2lzdHJ5X2NodW5rc19tYWtlX2RhdGEgKGhkciwKLSAgICAgIHNpemVvZiAoR3N0UmVnaXN0cnlDaHVua0dsb2JhbEhlYWRlcikpOwotCi0gIGhkci0+ZmlsdGVyX2Vudl9oYXNoID0gZmlsdGVyX2Vudl9oYXNoOwotCi0gICpsaXN0ID0gZ19saXN0X3ByZXBlbmQgKCpsaXN0LCBjaGspOwotCi0gIEdTVF9MT0cgKCJTYXZlZCBnbG9iYWwgaGVhZGVyIChmaWx0ZXJfZW52X2hhc2g9MHglMDh4KSIsIGZpbHRlcl9lbnZfaGFzaCk7Ci19Ci0KLWdib29sZWFuCi1fcHJpdl9nc3RfcmVnaXN0cnlfY2h1bmtzX2xvYWRfZ2xvYmFsX2hlYWRlciAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKLSAgICBnY2hhciAqKiBpbiwgZ2NoYXIgKiBlbmQsIGd1aW50MzIgKiBmaWx0ZXJfZW52X2hhc2gpCi17Ci0gIEdzdFJlZ2lzdHJ5Q2h1bmtHbG9iYWxIZWFkZXIgKmhkcjsKLQotICBhbGlnbiAoKmluKTsKLSAgR1NUX0xPRyAoIlJlYWRpbmcvY2FzdGluZyBmb3IgR3N0UmVnaXN0cnlDaHVua0dsb2JhbEhlYWRlciBhdCAlcCIsICppbik7Ci0gIHVucGFja19lbGVtZW50ICgqaW4sIGhkciwgR3N0UmVnaXN0cnlDaHVua0dsb2JhbEhlYWRlciwgZW5kLCBmYWlsKTsKLSAgKmZpbHRlcl9lbnZfaGFzaCA9IGhkci0+ZmlsdGVyX2Vudl9oYXNoOwotICByZXR1cm4gVFJVRTsKLQotICAvKiBFcnJvcnMgKi8KLWZhaWw6Ci0gIEdTVF9XQVJOSU5HICgiUmVhZGluZyBnbG9iYWwgaGVhZGVyIGZhaWxlZCIpOwotICByZXR1cm4gRkFMU0U7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0cmVnaXN0cnljaHVua3MuaCBiL2dzdC9nc3RyZWdpc3RyeWNodW5rcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2NlZDcwLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RyZWdpc3RyeWNodW5rcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IEpvc2VwIFRvcnJhIDxqb3NlcEBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNYXRoaWV1IEdhcmNpYSAgPG1hdHRoaWV1QGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA2IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHNvbmljcHVsc2UuZGU+Ci0gKgotICogZ3N0cmVnaXN0cnliaW5hcnkuaDogSGVhZGVyIGZvciByZWdpc3RyeSBoYW5kbGluZwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9fR1NUX1JFR0lTVFJZQ0hVTktTX0hfXwotI2RlZmluZSBfX0dTVF9SRUdJU1RSWUNIVU5LU19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3RwYWQuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cmVnaXN0cnkuaD4KLQotLyoKLSAqIHdlIHJlZmVyZW5jZSBzdHJpbmdzIGRpcmVjdGx5IGZyb20gdGhlIHBsdWdpbnMgYW5kIGluIHRoaXMgY2FzZSBzZXQgQ09OU1QgdG8KLSAqIGF2b2lkIGZyZWVpbmcgdGhlbS4gSWYgZ19mcmVlKCkgc2hvdWxkIGJlIHVzZWQsIHRoZSBNQUxMT0MgZmxhZyBpcyBzZXQsCi0gKiBvdGhlcndpc2UgZ19zbGljZV9mcmVlMSgpIHdpbGwgYmUgdXNlZCEKLSAqLwotZW51bSB7Ci0gIEdTVF9SRUdJU1RSWV9DSFVOS19GTEFHX05PTkUgPSAwLAotICBHU1RfUkVHSVNUUllfQ0hVTktfRkxBR19DT05TVCA9IDEsCi0gIEdTVF9SRUdJU1RSWV9DSFVOS19GTEFHX01BTExPQyA9IDIsCi19OwotCi0vKgotICogR3N0UmVnaXN0cnlDaHVuazoKLSAqCi0gKiBIZWFkZXIgZm9yIGJpbmFyeSBibG9icwotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnlDaHVuawotewotICBncG9pbnRlciBkYXRhOwotICBndWludCBzaXplOwotICBndWludCBmbGFnczsKLSAgZ2Jvb2xlYW4gYWxpZ247Ci19IEdzdFJlZ2lzdHJ5Q2h1bms7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSZWdpc3RyeUNodW5rR2xvYmFsSGVhZGVyCi17Ci0gIGd1aW50MzIgIGZpbHRlcl9lbnZfaGFzaDsKLX0gR3N0UmVnaXN0cnlDaHVua0dsb2JhbEhlYWRlcjsKLQotLyoKLSAqIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5FbGVtZW50OgotICoKLSAqIEBuX2RlcHM6IFNheXMgaG93IG1hbnkgZGVwZW5kZW5jeSBzdHJ1Y3R1cmVzIGZvbGxvd3MuCi0gKgotICogQG5mZWF0dXJlczogc2F5cyBob3cgbWFueSBiaW5hcnkgcGx1Z2luIGZlYXR1cmUgc3RydWN0dXJlcyB3ZSB3aWxsIGhhdmUKLSAqIHJpZ2h0IGFmdGVyIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLgotICoKLSAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgKHN0YXRpY2VseSkgZXZlcnkgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBhIHBsdWdpbgotICovCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSZWdpc3RyeUNodW5rUGx1Z2luRWxlbWVudAotewotICBndWxvbmcgZmlsZV9zaXplOwotICBndWxvbmcgZmlsZV9tdGltZTsKLQotICBndWludCBuX2RlcHM7Ci0KLSAgZ3VpbnQgbmZlYXR1cmVzOwotfSBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRWxlbWVudDsKLQotLyogR3N0UmVnaXN0cnlDaHVua0RlcDoKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJlZ2lzdHJ5Q2h1bmtEZXAKLXsKLSAgZ3VpbnQgZmxhZ3M7Ci0gIGd1aW50IG5fZW52X3ZhcnM7Ci0gIGd1aW50IG5fcGF0aHM7Ci0gIGd1aW50IG5fbmFtZXM7Ci0KLSAgZ3VpbnQgZW52X2hhc2g7Ci0gIGd1aW50IHN0YXRfaGFzaDsKLX0gR3N0UmVnaXN0cnlDaHVua0RlcDsKLQotLyoKLSAqIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlOgotICogQHJhbms6IHJhbmsgb2YgdGhlIGZlYXR1cmUKLSAqCi0gKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBwbHVnaW4gZmVhdHVyZXMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlCi17Ci0gIGd1bG9uZyByYW5rOwotfSBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZTsKLQotLyoKLSAqIEdzdFJlZ2lzdHJ5Q2h1bmtFbGVtZW50RmFjdG9yeToKLSAqIEBucGFkdGVtcGxhdGVzOiBzdG9yZXMgdGhlIG51bWJlciBvZiBHc3RSZWdpc3RyeUNodW5rUGFkVGVtcGxhdGUgc3RydWN0dXJlcwotICogZm9sbG93aW5nIHRoZSBzdHJ1Y3R1cmUKLSAqIEBuaW50ZXJmYWNlczogc3RvcmVzIHRoZSBudW1iZXIgb2YgaW50ZXJmYWNlIG5hbWVzIGZvbGxvd2luZyB0aGUgc3RydWN0dXJlCi0gKiBAbnVyaXByb3RvY29sczogc3RvcmVzIHRoZSBudW1iZXIgb2YgcHJvdG9jb2wgc3RyaW5ncyBmb2xsb3dpbmcgdGhlIHN0cnVjdHVyZQotICoKLSAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgZmFjdG9yeSBmaWVsZHMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJlZ2lzdHJ5Q2h1bmtFbGVtZW50RmFjdG9yeQotewotICBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSBwbHVnaW5fZmVhdHVyZTsKLQotICBndWludCBucGFkdGVtcGxhdGVzOwotICBndWludCBuaW50ZXJmYWNlczsKLSAgZ3VpbnQgbnVyaXByb3RvY29sczsKLX0gR3N0UmVnaXN0cnlDaHVua0VsZW1lbnRGYWN0b3J5OwotCi0vKgotICogR3N0UmVnaXN0cnlDaHVua1R5cGVGaW5kRmFjdG9yeToKLSAqIEBuZXh0ZW5zaW9uczogc3RvcmVzIHRoZSBudW1iZXIgb2YgdHlwZWZpbmQgZXh0ZW5zaW9ucwotICoKLSAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHR5cGUgZmluZCBmYWN0b3J5IGZpZWxkcwotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnlDaHVua1R5cGVGaW5kRmFjdG9yeQotewotICBHc3RSZWdpc3RyeUNodW5rUGx1Z2luRmVhdHVyZSBwbHVnaW5fZmVhdHVyZTsKLQotICBndWludCBuZXh0ZW5zaW9uczsKLX0gR3N0UmVnaXN0cnlDaHVua1R5cGVGaW5kRmFjdG9yeTsKLQotLyoKLSAqIEdzdFJlZ2lzdHJ5Q2h1bmtEZXZpY2VQcm92aWRlckZhY3Rvcnk6Ci0gKgotICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgZGV2aWNlIHByb3ZpZGVyIGZhY3RvcnkgZmllbGRzCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RSZWdpc3RyeUNodW5rRGV2aWNlUHJvdmlkZXJGYWN0b3J5Ci17Ci0gIEdzdFJlZ2lzdHJ5Q2h1bmtQbHVnaW5GZWF0dXJlIHBsdWdpbl9mZWF0dXJlOwotCi19IEdzdFJlZ2lzdHJ5Q2h1bmtEZXZpY2VQcm92aWRlckZhY3Rvcnk7Ci0KLS8qCi0gKiBHc3RSZWdpc3RyeUNodW5rUGFkVGVtcGxhdGU6Ci0gKgotICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgc3RhdGljIHBhZCB0ZW1wbGF0ZXMgb2YgYSBwbHVnaW4gZmVhdHVyZQotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0UmVnaXN0cnlDaHVua1BhZFRlbXBsYXRlCi17Ci0gIGd1aW50IGRpcmVjdGlvbjsJICAgICAgICAgICAgICAgLyogRWl0aGVyIDA6InNpbmsiIG9yIDE6InNyYyIgKi8KLSAgR3N0UGFkUHJlc2VuY2UgcHJlc2VuY2U7Ci19IEdzdFJlZ2lzdHJ5Q2h1bmtQYWRUZW1wbGF0ZTsKLQotR19CRUdJTl9ERUNMUwotCi1nYm9vbGVhbgotX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19zYXZlX3BsdWdpbiAoR0xpc3QgKiogbGlzdCwgR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwKLSAgICBHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1nYm9vbGVhbgotX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbiAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgZ2NoYXIgKiogaW4sCi0gICAgZ2NoYXIgKmVuZCwgR3N0UGx1Z2luICoqb3V0X3BsdWdpbik7Ci0KLXZvaWQKLV9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3Nfc2F2ZV9nbG9iYWxfaGVhZGVyIChHTGlzdCAqKiBsaXN0LAotICAgIEdzdFJlZ2lzdHJ5ICogcmVnaXN0cnksIGd1aW50MzIgZmlsdGVyX2Vudl9oYXNoKTsKLQotZ2Jvb2xlYW4KLV9wcml2X2dzdF9yZWdpc3RyeV9jaHVua3NfbG9hZF9nbG9iYWxfaGVhZGVyIChHc3RSZWdpc3RyeSAqIHJlZ2lzdHJ5LAotICAgIGdjaGFyICoqIGluLCBnY2hhciAqZW5kLCBndWludDMyICogZmlsdGVyX2Vudl9oYXNoKTsKLQotdm9pZAotX3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rX2ZyZWUgKEdzdFJlZ2lzdHJ5Q2h1bmsgKmNodW5rKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JFR0lTVFJZQ0hVTktTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHNhbXBsZS5jIGIvZ3N0L2dzdHNhbXBsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjFmZjY3Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3RzYW1wbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIGdzdHNhbXBsZS5jOiBtZWRpYSBzYW1wbGUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0c2FtcGxlCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEEgbWVkaWEgc2FtcGxlCi0gKiBAc2VlX2Fsc286ICNHc3RCdWZmZXIsICNHc3RDYXBzLCAjR3N0U2VnbWVudAotICoKLSAqIEEgI0dzdFNhbXBsZSBpcyBhIHNtYWxsIG9iamVjdCBjb250YWluaW5nIGRhdGEsIGEgdHlwZSwgdGltaW5nIGFuZAotICogZXh0cmEgYXJiaXRyYXJ5IGluZm9ybWF0aW9uLgotICovCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdHNhbXBsZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3Rfc2FtcGxlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9zYW1wbGVfZGVidWcKLQotc3RydWN0IF9Hc3RTYW1wbGUKLXsKLSAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKLQotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RTdHJ1Y3R1cmUgKmluZm87Ci0gIEdzdEJ1ZmZlckxpc3QgKmJ1ZmZlcl9saXN0OwotfTsKLQotR1R5cGUgX2dzdF9zYW1wbGVfdHlwZSA9IDA7Ci0KLUdTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRSAoR3N0U2FtcGxlLCBnc3Rfc2FtcGxlKTsKLQotdm9pZAotX3ByaXZfZ3N0X3NhbXBsZV9pbml0aWFsaXplICh2b2lkKQotewotICBfZ3N0X3NhbXBsZV90eXBlID0gZ3N0X3NhbXBsZV9nZXRfdHlwZSAoKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3NhbXBsZV9kZWJ1ZywgInNhbXBsZSIsIDAsICJHc3RTYW1wbGUgZGVidWciKTsKLX0KLQotc3RhdGljIEdzdFNhbXBsZSAqCi1fZ3N0X3NhbXBsZV9jb3B5IChHc3RTYW1wbGUgKiBzYW1wbGUpCi17Ci0gIEdzdFNhbXBsZSAqY29weTsKLQotICBjb3B5ID0gZ3N0X3NhbXBsZV9uZXcgKHNhbXBsZS0+YnVmZmVyLCBzYW1wbGUtPmNhcHMsICZzYW1wbGUtPnNlZ21lbnQsCi0gICAgICAoc2FtcGxlLT5pbmZvKSA/IGdzdF9zdHJ1Y3R1cmVfY29weSAoc2FtcGxlLT5pbmZvKSA6IE5VTEwpOwotCi0gIGlmIChzYW1wbGUtPmJ1ZmZlcl9saXN0KQotICAgIGNvcHktPmJ1ZmZlcl9saXN0ID0gKEdzdEJ1ZmZlckxpc3QgKikKLSAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3JlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHNhbXBsZS0+YnVmZmVyX2xpc3QpKTsKLQotICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIHZvaWQKLV9nc3Rfc2FtcGxlX2ZyZWUgKEdzdFNhbXBsZSAqIHNhbXBsZSkKLXsKLSAgR1NUX0xPRyAoImZyZWUgJXAiLCBzYW1wbGUpOwotCi0gIGlmIChzYW1wbGUtPmJ1ZmZlcikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChzYW1wbGUtPmJ1ZmZlcik7Ci0gIGlmIChzYW1wbGUtPmNhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHNhbXBsZS0+Y2Fwcyk7Ci0gIGlmIChzYW1wbGUtPmluZm8pIHsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQgKHNhbXBsZS0+aW5mbywgTlVMTCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzYW1wbGUtPmluZm8pOwotICB9Ci0gIGlmIChzYW1wbGUtPmJ1ZmZlcl9saXN0KQotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHNhbXBsZS0+YnVmZmVyX2xpc3QpKTsKLQotICBnX3NsaWNlX2ZyZWUxIChzaXplb2YgKEdzdFNhbXBsZSksIHNhbXBsZSk7Ci19Ci0KLS8qKgotICogZ3N0X3NhbXBsZV9uZXc6Ci0gKiBAYnVmZmVyOiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBhICNHc3RCdWZmZXIsIG9yICVOVUxMCi0gKiBAY2FwczogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogYSAjR3N0Q2Fwcywgb3IgJU5VTEwKLSAqIEBzZWdtZW50OiAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBhICNHc3RTZWdtZW50LCBvciAlTlVMTAotICogQGluZm86ICh0cmFuc2ZlciBmdWxsKSAoYWxsb3ctbm9uZSk6IGEgI0dzdFN0cnVjdHVyZSwgb3IgJU5VTEwKLSAqCi0gKiBDcmVhdGUgYSBuZXcgI0dzdFNhbXBsZSB3aXRoIHRoZSBwcm92aWRlZCBkZXRhaWxzLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9zYW1wbGVfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgI0dzdFNhbXBsZS4gZ3N0X3NhbXBsZV91bnJlZigpCi0gKiAgICAgYWZ0ZXIgdXNhZ2UuCi0gKi8KLUdzdFNhbXBsZSAqCi1nc3Rfc2FtcGxlX25ldyAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RDYXBzICogY2FwcywgY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsCi0gICAgR3N0U3RydWN0dXJlICogaW5mbykKLXsKLSAgR3N0U2FtcGxlICpzYW1wbGU7Ci0KLSAgc2FtcGxlID0gZ19zbGljZV9uZXcwIChHc3RTYW1wbGUpOwotCi0gIEdTVF9MT0cgKCJuZXcgJXAiLCBzYW1wbGUpOwotCi0gIGdzdF9taW5pX29iamVjdF9pbml0IChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoc2FtcGxlKSwgMCwgX2dzdF9zYW1wbGVfdHlwZSwKLSAgICAgIChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X3NhbXBsZV9jb3B5LCBOVUxMLAotICAgICAgKEdzdE1pbmlPYmplY3RGcmVlRnVuY3Rpb24pIF9nc3Rfc2FtcGxlX2ZyZWUpOwotCi0gIHNhbXBsZS0+YnVmZmVyID0gYnVmZmVyID8gZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikgOiBOVUxMOwotICBzYW1wbGUtPmNhcHMgPSBjYXBzID8gZ3N0X2NhcHNfcmVmIChjYXBzKSA6IE5VTEw7Ci0KLSAgaWYgKHNlZ21lbnQpCi0gICAgZ3N0X3NlZ21lbnRfY29weV9pbnRvIChzZWdtZW50LCAmc2FtcGxlLT5zZWdtZW50KTsKLSAgZWxzZQotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzYW1wbGUtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgaWYgKGluZm8pIHsKLSAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoaW5mbywKLSAgICAgICAgICAgICZzYW1wbGUtPm1pbmlfb2JqZWN0LnJlZmNvdW50KSkKLSAgICAgIGdvdG8gaGFkX3BhcmVudDsKLQotICAgIHNhbXBsZS0+aW5mbyA9IGluZm87Ci0gIH0KLSAgcmV0dXJuIHNhbXBsZTsKLQotICAvKiBFUlJPUlMgKi8KLWhhZF9wYXJlbnQ6Ci0gIHsKLSAgICBnc3Rfc2FtcGxlX3VucmVmIChzYW1wbGUpOwotICAgIGdfd2FybmluZyAoInN0cnVjdHVyZSBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIgb2JqZWN0Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3Rfc2FtcGxlX2dldF9idWZmZXI6Ci0gKiBAc2FtcGxlOiBhICNHc3RTYW1wbGUKLSAqCi0gKiBHZXQgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggQHNhbXBsZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiB0aGUgYnVmZmVyIG9mIEBzYW1wbGUgb3IgJU5VTEwKLSAqICB3aGVuIHRoZXJlIGlzIG5vIGJ1ZmZlci4gVGhlIGJ1ZmZlciByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMKLSAqICBAc2FtcGxlIGlzIHZhbGlkLiAgSWYgeW91IG5lZWQgdG8gaG9sZCBvbiB0byBpdCBmb3IgbG9uZ2VyIHRoYW4KLSAqICB0aGF0LCB0YWtlIGEgcmVmIHRvIHRoZSBidWZmZXIgd2l0aCBnc3RfYnVmZmVyX3JlZigpLgotICovCi1Hc3RCdWZmZXIgKgotZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChHc3RTYW1wbGUgKiBzYW1wbGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU0FNUExFIChzYW1wbGUpLCBOVUxMKTsKLQotICByZXR1cm4gc2FtcGxlLT5idWZmZXI7Ci19Ci0KLS8qKgotICogZ3N0X3NhbXBsZV9nZXRfY2FwczoKLSAqIEBzYW1wbGU6IGEgI0dzdFNhbXBsZQotICoKLSAqIEdldCB0aGUgY2FwcyBhc3NvY2lhdGVkIHdpdGggQHNhbXBsZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiB0aGUgY2FwcyBvZiBAc2FtcGxlIG9yICVOVUxMCi0gKiAgd2hlbiB0aGVyZSBpcyBubyBjYXBzLiBUaGUgY2FwcyByZW1haW4gdmFsaWQgYXMgbG9uZyBhcyBAc2FtcGxlIGlzCi0gKiAgdmFsaWQuICBJZiB5b3UgbmVlZCB0byBob2xkIG9uIHRvIHRoZSBjYXBzIGZvciBsb25nZXIgdGhhbiB0aGF0LAotICogIHRha2UgYSByZWYgdG8gdGhlIGNhcHMgd2l0aCBnc3RfY2Fwc19yZWYoKS4KLSAqLwotR3N0Q2FwcyAqCi1nc3Rfc2FtcGxlX2dldF9jYXBzIChHc3RTYW1wbGUgKiBzYW1wbGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU0FNUExFIChzYW1wbGUpLCBOVUxMKTsKLQotICByZXR1cm4gc2FtcGxlLT5jYXBzOwotfQotCi0vKioKLSAqIGdzdF9zYW1wbGVfZ2V0X3NlZ21lbnQ6Ci0gKiBAc2FtcGxlOiBhICNHc3RTYW1wbGUKLSAqCi0gKiBHZXQgdGhlIHNlZ21lbnQgYXNzb2NpYXRlZCB3aXRoIEBzYW1wbGUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBzZWdtZW50IG9mIEBzYW1wbGUuCi0gKiAgVGhlIHNlZ21lbnQgcmVtYWlucyB2YWxpZCBhcyBsb25nIGFzIEBzYW1wbGUgaXMgdmFsaWQuCi0gKi8KLUdzdFNlZ21lbnQgKgotZ3N0X3NhbXBsZV9nZXRfc2VnbWVudCAoR3N0U2FtcGxlICogc2FtcGxlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1NBTVBMRSAoc2FtcGxlKSwgTlVMTCk7Ci0KLSAgcmV0dXJuICZzYW1wbGUtPnNlZ21lbnQ7Ci19Ci0KLS8qKgotICogZ3N0X3NhbXBsZV9nZXRfaW5mbzoKLSAqIEBzYW1wbGU6IGEgI0dzdFNhbXBsZQotICoKLSAqIEdldCBleHRyYSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggQHNhbXBsZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBleHRyYSBpbmZvIG9mIEBzYW1wbGUuCi0gKiAgVGhlIGluZm8gcmVtYWlucyB2YWxpZCBhcyBsb25nIGFzIEBzYW1wbGUgaXMgdmFsaWQuCi0gKi8KLWNvbnN0IEdzdFN0cnVjdHVyZSAqCi1nc3Rfc2FtcGxlX2dldF9pbmZvIChHc3RTYW1wbGUgKiBzYW1wbGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU0FNUExFIChzYW1wbGUpLCBOVUxMKTsKLQotICByZXR1cm4gc2FtcGxlLT5pbmZvOwotfQotCi0vKioKLSAqIGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcl9saXN0OgotICogQHNhbXBsZTogYSAjR3N0U2FtcGxlCi0gKgotICogR2V0IHRoZSBidWZmZXIgbGlzdCBhc3NvY2lhdGVkIHdpdGggQHNhbXBsZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiB0aGUgYnVmZmVyIGxpc3Qgb2YgQHNhbXBsZSBvciAlTlVMTAotICogIHdoZW4gdGhlcmUgaXMgbm8gYnVmZmVyIGxpc3QuIFRoZSBidWZmZXIgbGlzdCByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMKLSAqICBAc2FtcGxlIGlzIHZhbGlkLiAgSWYgeW91IG5lZWQgdG8gaG9sZCBvbiB0byBpdCBmb3IgbG9uZ2VyIHRoYW4KLSAqICB0aGF0LCB0YWtlIGEgcmVmIHRvIHRoZSBidWZmZXIgbGlzdCB3aXRoIGdzdF9taW5pX29iamVjdF9yZWYgKCkuCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RCdWZmZXJMaXN0ICoKLWdzdF9zYW1wbGVfZ2V0X2J1ZmZlcl9saXN0IChHc3RTYW1wbGUgKiBzYW1wbGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU0FNUExFIChzYW1wbGUpLCBOVUxMKTsKLQotICByZXR1cm4gc2FtcGxlLT5idWZmZXJfbGlzdDsKLX0KLQotLyoqCi0gKiBnc3Rfc2FtcGxlX3NldF9idWZmZXJfbGlzdDoKLSAqIEBzYW1wbGU6IGEgI0dzdFNhbXBsZQotICogQGJ1ZmZlcl9saXN0OiBhICNHc3RCdWZmZXJMaXN0Ci0gKgotICogU2V0IHRoZSBidWZmZXIgbGlzdCBhc3NvY2lhdGVkIHdpdGggQHNhbXBsZQotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X3NhbXBsZV9zZXRfYnVmZmVyX2xpc3QgKEdzdFNhbXBsZSAqIHNhbXBsZSwgR3N0QnVmZmVyTGlzdCAqIGJ1ZmZlcl9saXN0KQotewotICBHc3RCdWZmZXJMaXN0ICpvbGQgPSBOVUxMOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfU0FNUExFIChzYW1wbGUpKTsKLSAgb2xkID0gc2FtcGxlLT5idWZmZXJfbGlzdDsKLSAgc2FtcGxlLT5idWZmZXJfbGlzdCA9IChHc3RCdWZmZXJMaXN0ICopCi0gICAgICBnc3RfbWluaV9vYmplY3RfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmZmVyX2xpc3QpKTsKLQotICBpZiAob2xkKQotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG9sZCkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHNhbXBsZS5oIGIvZ3N0L2dzdHNhbXBsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjM3ZmEzLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RzYW1wbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKgotICogZ3N0c2FtcGxlLmg6IEhlYWRlciBmb3IgR3N0U2FtcGxlIG9iamVjdAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9TQU1QTEVfSF9fCi0jZGVmaW5lIF9fR1NUX1NBTVBMRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3RidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0YnVmZmVybGlzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHNlZ21lbnQuaD4KLQotR19CRUdJTl9ERUNMUwotCi1HU1RfRVhQT1JUIEdUeXBlIF9nc3Rfc2FtcGxlX3R5cGU7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfU0FNUExFICAgICAgKF9nc3Rfc2FtcGxlX3R5cGUpCi0jZGVmaW5lIEdTVF9JU19TQU1QTEUob2JqKSAgIChHU1RfSVNfTUlOSV9PQkpFQ1RfVFlQRShvYmosIEdTVF9UWVBFX1NBTVBMRSkpCi0jZGVmaW5lIEdTVF9TQU1QTEVfQ0FTVChvYmopICgoR3N0U2FtcGxlICopb2JqKQotI2RlZmluZSBHU1RfU0FNUExFKG9iaikgICAgICAoR1NUX1NBTVBMRV9DQVNUKG9iaikpCi0KLS8qKgotICogR3N0U2FtcGxlOgotICoKLSAqIFRoZSBvcGFxdWUgc3RydWN0dXJlIG9mIGEgI0dzdFNhbXBsZS4gQSBzYW1wbGUgY29udGFpbnMgYSB0eXBlZCBtZW1vcnkKLSAqIGJsb2NrIGFuZCB0aGUgYXNzb2NpYXRlZCB0aW1pbmcgaW5mb3JtYXRpb24uIEl0IGlzIG1haW5seSB1c2VkIHRvCi0gKiBleGNoYW5nZSBidWZmZXJzIHdpdGggYW4gYXBwbGljYXRpb24uCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RTYW1wbGUgR3N0U2FtcGxlOwotCi1HVHlwZSBnc3Rfc2FtcGxlX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOwotCi0vKiBhbGxvY2F0aW9uICovCi1Hc3RTYW1wbGUgKiAgICAgICAgICBnc3Rfc2FtcGxlX25ldyAgICAgICAgICAgKEdzdEJ1ZmZlciAgICAgICAgICAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgICAgICAgKmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFNlZ21lbnQgICAqc2VnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlICAgICAgICppbmZvKTsKLQotR3N0QnVmZmVyICogICAgICAgICAgZ3N0X3NhbXBsZV9nZXRfYnVmZmVyICAgIChHc3RTYW1wbGUgKnNhbXBsZSk7Ci1Hc3RDYXBzICogICAgICAgICAgICBnc3Rfc2FtcGxlX2dldF9jYXBzICAgICAgKEdzdFNhbXBsZSAqc2FtcGxlKTsKLUdzdFNlZ21lbnQgKiAgICAgICAgIGdzdF9zYW1wbGVfZ2V0X3NlZ21lbnQgICAoR3N0U2FtcGxlICpzYW1wbGUpOwotY29uc3QgR3N0U3RydWN0dXJlICogZ3N0X3NhbXBsZV9nZXRfaW5mbyAgICAgIChHc3RTYW1wbGUgKnNhbXBsZSk7Ci1Hc3RCdWZmZXJMaXN0ICogICAgICBnc3Rfc2FtcGxlX2dldF9idWZmZXJfbGlzdCAoR3N0U2FtcGxlICpzYW1wbGUpOwotdm9pZCAgICAgICAgICAgICAgICAgZ3N0X3NhbXBsZV9zZXRfYnVmZmVyX2xpc3QgKEdzdFNhbXBsZSAqc2FtcGxlLCBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdCk7Ci0KLS8qIHJlZmNvdW50aW5nICovCi0vKioKLSAqIGdzdF9zYW1wbGVfcmVmOgotICogQHNhbXBsZTogYSAjR3N0U2FtcGxlCi0gKgotICogSW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZ2l2ZW4gc2FtcGxlIGJ5IG9uZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEBzYW1wbGUKLSAqLwotc3RhdGljIGlubGluZSBHc3RTYW1wbGUgKgotZ3N0X3NhbXBsZV9yZWYgKEdzdFNhbXBsZSAqIHNhbXBsZSkKLXsKLSAgcmV0dXJuIEdTVF9TQU1QTEVfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X3JlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKAotICAgICAgc2FtcGxlKSkpOwotfQotCi0vKioKLSAqIGdzdF9zYW1wbGVfdW5yZWY6Ci0gKiBAc2FtcGxlOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdFNhbXBsZQotICoKLSAqIERlY3JlYXNlcyB0aGUgcmVmY291bnQgb2YgdGhlIHNhbXBsZS4gSWYgdGhlIHJlZmNvdW50IHJlYWNoZXMgMCwgdGhlCi0gKiBzYW1wbGUgd2lsbCBiZSBmcmVlZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1nc3Rfc2FtcGxlX3VucmVmIChHc3RTYW1wbGUgKiBzYW1wbGUpCi17Ci0gIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHNhbXBsZSkpOwotfQotCi0vKiBjb3B5IHNhbXBsZSAqLwotLyoqCi0gKiBnc3Rfc2FtcGxlX2NvcHk6Ci0gKiBAYnVmOiBhICNHc3RTYW1wbGUuCi0gKgotICogQ3JlYXRlIGEgY29weSBvZiB0aGUgZ2l2ZW4gc2FtcGxlLiBUaGlzIHdpbGwgYWxzbyBtYWtlIGEgbmV3bHkgYWxsb2NhdGVkCi0gKiBjb3B5IG9mIHRoZSBkYXRhIHRoZSBzb3VyY2Ugc2FtcGxlIGNvbnRhaW5zLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgY29weSBvZiBAYnVmLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotc3RhdGljIGlubGluZSBHc3RTYW1wbGUgKgotZ3N0X3NhbXBsZV9jb3B5IChjb25zdCBHc3RTYW1wbGUgKiBidWYpCi17Ci0gIHJldHVybiBHU1RfU0FNUExFX0NBU1QgKGdzdF9taW5pX29iamVjdF9jb3B5IChHU1RfTUlOSV9PQkpFQ1RfQ09OU1RfQ0FTVCAoYnVmKSkpOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXRfc2FtcGxlOgotICogQHY6IGEgI0dWYWx1ZSB0byByZWNlaXZlIHRoZSBkYXRhCi0gKiBAYjogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RTYW1wbGUgdG8gYXNzaWduIHRvIHRoZSBHc3RWYWx1ZQotICoKLSAqIFNldHMgQGIgYXMgdGhlIHZhbHVlIG9mIEB2LiAgQ2FsbGVyIHJldGFpbnMgcmVmZXJlbmNlIHRvIHNhbXBsZS4KLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV9zZXRfc2FtcGxlKHYsYikgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQoKHYpLChiKSkKLS8qKgotICogZ3N0X3ZhbHVlX3Rha2Vfc2FtcGxlOgotICogQHY6IGEgI0dWYWx1ZSB0byByZWNlaXZlIHRoZSBkYXRhCi0gKiBAYjogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RTYW1wbGUgdG8gYXNzaWduIHRvIHRoZSBHc3RWYWx1ZQotICoKLSAqIFNldHMgQGIgYXMgdGhlIHZhbHVlIG9mIEB2LiAgQ2FsbGVyIGdpdmVzIGF3YXkgcmVmZXJlbmNlIHRvIHNhbXBsZS4KLSAqLwotI2RlZmluZSAgICAgICAgIGdzdF92YWx1ZV90YWtlX3NhbXBsZSh2LGIpICAgICAgZ192YWx1ZV90YWtlX2JveGVkKHYsKGIpKQotLyoqCi0gKiBnc3RfdmFsdWVfZ2V0X3NhbXBsZToKLSAqIEB2OiBhICNHVmFsdWUgdG8gcXVlcnkKLSAqCi0gKiBSZWNlaXZlcyBhICNHc3RTYW1wbGUgYXMgdGhlIHZhbHVlIG9mIEB2LiBEb2VzIG5vdCByZXR1cm4gYSByZWZlcmVuY2UgdG8KLSAqIHRoZSBzYW1wbGUsIHNvIHRoZSBwb2ludGVyIGlzIG9ubHkgdmFsaWQgZm9yIGFzIGxvbmcgYXMgdGhlIGNhbGxlciBvd25zCi0gKiBhIHJlZmVyZW5jZSB0byBAdi4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHNhbXBsZQotICovCi0jZGVmaW5lICAgICAgICAgZ3N0X3ZhbHVlX2dldF9zYW1wbGUodikgICAgICAgICBHU1RfU0FNUExFX0NBU1QgKGdfdmFsdWVfZ2V0X2JveGVkKHYpKQotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdFNhbXBsZSwgZ3N0X3NhbXBsZV91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfU0FNUExFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHNlZ21lbnQuYyBiL2dzdC9nc3RzZWdtZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYjcxZTMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHNlZ21lbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RzZWdtZW50LmM6IEdzdFNlZ21lbnQgc3Vic3lzdGVtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJnc3R1dGlscy5oIgotI2luY2x1ZGUgImdzdHNlZ21lbnQuaCIKLQotLyoqCi0gKiBTRUNUSU9OOmdzdHNlZ21lbnQKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyZWQgcmVnaW9uIG9mIGludGVyZXN0Ci0gKiAgICAgICAgICAgICAgICAgICAgIGluIGEgbWVkaWEgZmlsZS4KLSAqIEBzZWVfYWxzbzogI0dzdEV2ZW50Ci0gKgotICogVGhpcyBoZWxwZXIgc3RydWN0dXJlIGhvbGRzIHRoZSByZWxldmFudCB2YWx1ZXMgZm9yIHRyYWNraW5nIHRoZSByZWdpb24gb2YKLSAqIGludGVyZXN0IGluIGEgbWVkaWEgZmlsZSwgY2FsbGVkIGEgc2VnbWVudC4KLSAqCi0gKiBUaGUgc3RydWN0dXJlIGNhbiBiZSB1c2VkIGZvciB0d28gcHVycG9zZXM6Ci0gKiA8aXRlbWl6ZWRsaXN0PgotICogICA8bGlzdGl0ZW0+PHBhcmE+cGVyZm9ybWluZyBzZWVrcyAoaGFuZGxpbmcgc2VlayBldmVudHMpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT50cmFja2luZyBwbGF5YmFjayByZWdpb25zIChoYW5kbGluZyBuZXdzZWdtZW50IGV2ZW50cyk8L3BhcmE+PC9saXN0aXRlbT4KLSAqIDwvaXRlbWl6ZWRsaXN0PgotICoKLSAqIFRoZSBzZWdtZW50IGlzIHVzdWFsbHkgY29uZmlndXJlZCBieSB0aGUgYXBwbGljYXRpb24gd2l0aCBhIHNlZWsgZXZlbnQgd2hpY2gKLSAqIGlzIHByb3BhZ2F0ZWQgdXBzdHJlYW0gYW5kIGV2ZW50dWFsbHkgaGFuZGxlZCBieSBhbiBlbGVtZW50IHRoYXQgcGVyZm9ybXMgdGhlIHNlZWsuCi0gKgotICogVGhlIGNvbmZpZ3VyZWQgc2VnbWVudCBpcyB0aGVuIHByb3BhZ2F0ZWQgYmFjayBkb3duc3RyZWFtIHdpdGggYSBuZXdzZWdtZW50IGV2ZW50LgotICogVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuIHVzZWQgdG8gY2xpcCBtZWRpYSB0byB0aGUgc2VnbWVudCBib3VuZGFyaWVzLgotICoKLSAqIEEgc2VnbWVudCBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQgd2l0aCBnc3Rfc2VnbWVudF9pbml0KCksIHdoaWNoIHRha2VzIGEgI0dzdEZvcm1hdAotICogdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudCB2YWx1ZXMuIFRoZSBzZWdtZW50IHdpbGwgYmUgY29uZmlndXJlZAotICogd2l0aCBhIHN0YXJ0IHZhbHVlIG9mIDAgYW5kIGEgc3RvcC9kdXJhdGlvbiBvZiAtMSwgd2hpY2ggaXMgdW5kZWZpbmVkLiBUaGUgZGVmYXVsdAotICogcmF0ZSBhbmQgYXBwbGllZF9yYXRlIGlzIDEuMC4KLSAqCi0gKiBUaGUgcHVibGljIGR1cmF0aW9uIGZpZWxkIGNvbnRhaW5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2VnbWVudC4gV2hlbiB1c2luZwotICogdGhlIHNlZ21lbnQgZm9yIHNlZWtpbmcsIHRoZSBzdGFydCBhbmQgdGltZSBtZW1iZXJzIHNob3VsZCBub3JtYWxseSBiZSBsZWZ0Ci0gKiB0byB0aGVpciBkZWZhdWx0IDAgdmFsdWUuIFRoZSBzdG9wIHBvc2l0aW9uIGlzIGxlZnQgdG8gLTEgdW5sZXNzIGV4cGxpY2l0bHkKLSAqIGNvbmZpZ3VyZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgYWZ0ZXIgYSBzZWVrIGV2ZW50LgotICoKLSAqIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IHNob3VsZCBiZSBzZXQgYnkgY2hhbmdpbmcgdGhlIHBvc2l0aW9uCi0gKiBtZW1iZXIgaW4gdGhlIHN0cnVjdHVyZS4KLSAqCi0gKiBGb3IgZWxlbWVudHMgdGhhdCBwZXJmb3JtIHNlZWtzLCB0aGUgY3VycmVudCBzZWdtZW50IHNob3VsZCBiZSB1cGRhdGVkIHdpdGggdGhlCi0gKiBnc3Rfc2VnbWVudF9kb19zZWVrKCkgYW5kIHRoZSB2YWx1ZXMgZnJvbSB0aGUgc2VlayBldmVudC4gVGhpcyBtZXRob2Qgd2lsbCB1cGRhdGUKLSAqIGFsbCB0aGUgc2VnbWVudCBmaWVsZHMuIFRoZSBwb3NpdGlvbiBmaWVsZCB3aWxsIGNvbnRhaW4gdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbi4KLSAqIElmIHRoZSBzdGFydF90eXBlIHdhcyBkaWZmZXJlbnQgZnJvbSBHU1RfU0VFS19UWVBFX05PTkUsIHBsYXliYWNrIGNvbnRpbnVlcyBmcm9tCi0gKiB0aGUgcG9zaXRpb24gcG9zaXRpb24sIHBvc3NpYmx5IHdpdGggdXBkYXRlZCBmbGFncyBvciByYXRlLgotICoKLSAqIEZvciBlbGVtZW50cyB0aGF0IHdhbnQgdG8gdXNlICNHc3RTZWdtZW50IHRvIHRyYWNrIHRoZSBwbGF5YmFjayByZWdpb24sCi0gKiB1cGRhdGUgdGhlIHNlZ21lbnQgZmllbGRzIHdpdGggdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIG5ld3NlZ21lbnQgZXZlbnQuCi0gKiBUaGUgZ3N0X3NlZ21lbnRfY2xpcCgpIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjaGVjayBhbmQgY2xpcAotICogdGhlIG1lZGlhIGRhdGEgdG8gdGhlIHNlZ21lbnQgYm91bmRhcmllcy4KLSAqCi0gKiBGb3IgZWxlbWVudHMgdGhhdCB3YW50IHRvIHN5bmNocm9uaXplIHRvIHRoZSBwaXBlbGluZSBjbG9jaywgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKCkKLSAqIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSB0aW1lc3RhbXAgdG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHN5bmNocm9uaXplCi0gKiB0byB0aGUgY2xvY2suIFRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSBiYXNlIGFzIHdlbGwgYXMKLSAqIGFueSByYXRlIG9yIGFwcGxpZWRfcmF0ZSBjb252ZXJzaW9ucy4KLSAqCi0gKiBGb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBtZWRpYSBkYXRhIGluIHN0cmVhbV90aW1lLAotICogZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUoKSBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGEgdGltZXN0YW1wIGFuZCB0aGUgc2VnbWVudAotICogaW5mbyB0byBzdHJlYW0gdGltZSAod2hpY2ggaXMgYWx3YXlzIGJldHdlZW4gMCBhbmQgdGhlIGR1cmF0aW9uIG9mIHRoZSBzdHJlYW0pLgotICovCi0KLS8qKgotICogZ3N0X3NlZ21lbnRfY29weToKLSAqIEBzZWdtZW50OiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdFNlZ21lbnQKLSAqCi0gKiBDcmVhdGUgYSBjb3B5IG9mIGdpdmVuIEBzZWdtZW50LgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9zZWdtZW50X2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RTZWdtZW50LCBmcmVlIHdpdGggZ3N0X3NlZ21lbnRfZnJlZSgpLgotICovCi1Hc3RTZWdtZW50ICoKLWdzdF9zZWdtZW50X2NvcHkgKGNvbnN0IEdzdFNlZ21lbnQgKiBzZWdtZW50KQotewotICBHc3RTZWdtZW50ICpyZXN1bHQgPSBOVUxMOwotCi0gIGlmIChzZWdtZW50KSB7Ci0gICAgcmVzdWx0ID0gKEdzdFNlZ21lbnQgKikgZ19zbGljZV9jb3B5IChzaXplb2YgKEdzdFNlZ21lbnQpLCBzZWdtZW50KTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9zZWdtZW50X2NvcHlfaW50bzoKLSAqIEBzcmM6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0U2VnbWVudAotICogQGRlc3Q6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0U2VnbWVudAotICoKLSAqIENvcHkgdGhlIGNvbnRlbnRzIG9mIEBzcmMgaW50byBAZGVzdC4KLSAqLwotdm9pZAotZ3N0X3NlZ21lbnRfY29weV9pbnRvIChjb25zdCBHc3RTZWdtZW50ICogc3JjLCBHc3RTZWdtZW50ICogZGVzdCkKLXsKLSAgbWVtY3B5IChkZXN0LCBzcmMsIHNpemVvZiAoR3N0U2VnbWVudCkpOwotfQotCi1HX0RFRklORV9CT1hFRF9UWVBFIChHc3RTZWdtZW50LCBnc3Rfc2VnbWVudCwKLSAgICAoR0JveGVkQ29weUZ1bmMpIGdzdF9zZWdtZW50X2NvcHksIChHQm94ZWRGcmVlRnVuYykgZ3N0X3NlZ21lbnRfZnJlZSk7Ci0KLS8qKgotICogZ3N0X3NlZ21lbnRfbmV3OgotICoKLSAqIEFsbG9jYXRlIGEgbmV3ICNHc3RTZWdtZW50IHN0cnVjdHVyZSBhbmQgaW5pdGlhbGl6ZSBpdCB1c2luZwotICogZ3N0X3NlZ21lbnRfaW5pdCgpLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9zZWdtZW50X2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RTZWdtZW50LCBmcmVlIHdpdGggZ3N0X3NlZ21lbnRfZnJlZSgpLgotICovCi1Hc3RTZWdtZW50ICoKLWdzdF9zZWdtZW50X25ldyAodm9pZCkKLXsKLSAgR3N0U2VnbWVudCAqcmVzdWx0OwotCi0gIHJlc3VsdCA9IGdfc2xpY2VfbmV3MCAoR3N0U2VnbWVudCk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKHJlc3VsdCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X3NlZ21lbnRfZnJlZToKLSAqIEBzZWdtZW50OiAoaW4pICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0U2VnbWVudAotICoKLSAqIEZyZWUgdGhlIGFsbG9jYXRlZCBzZWdtZW50IEBzZWdtZW50LgotICovCi12b2lkCi1nc3Rfc2VnbWVudF9mcmVlIChHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgZ19zbGljZV9mcmVlIChHc3RTZWdtZW50LCBzZWdtZW50KTsKLX0KLQotLyoqCi0gKiBnc3Rfc2VnbWVudF9pbml0OgotICogQHNlZ21lbnQ6IGEgI0dzdFNlZ21lbnQgc3RydWN0dXJlLgotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC4KLSAqCi0gKiBUaGUgc3RhcnQvcG9zaXRpb24gZmllbGRzIGFyZSBzZXQgdG8gMCBhbmQgdGhlIHN0b3AvZHVyYXRpb24KLSAqIGZpZWxkcyBhcmUgc2V0IHRvIC0xICh1bmtub3duKS4gVGhlIGRlZmF1bHQgcmF0ZSBvZiAxLjAgYW5kIG5vCi0gKiBmbGFncyBhcmUgc2V0LgotICoKLSAqIEluaXRpYWxpemUgQHNlZ21lbnQgdG8gaXRzIGRlZmF1bHQgdmFsdWVzLgotICovCi12b2lkCi1nc3Rfc2VnbWVudF9pbml0IChHc3RTZWdtZW50ICogc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc2VnbWVudCAhPSBOVUxMKTsKLQotICBzZWdtZW50LT5mbGFncyA9IEdTVF9TRUdNRU5UX0ZMQUdfTk9ORTsKLSAgc2VnbWVudC0+cmF0ZSA9IDEuMDsKLSAgc2VnbWVudC0+YXBwbGllZF9yYXRlID0gMS4wOwotICBzZWdtZW50LT5mb3JtYXQgPSBmb3JtYXQ7Ci0gIHNlZ21lbnQtPmJhc2UgPSAwOwotICBzZWdtZW50LT5vZmZzZXQgPSAwOwotICBzZWdtZW50LT5zdGFydCA9IDA7Ci0gIHNlZ21lbnQtPnN0b3AgPSAtMTsKLSAgc2VnbWVudC0+dGltZSA9IDA7Ci0gIHNlZ21lbnQtPnBvc2l0aW9uID0gMDsKLSAgc2VnbWVudC0+ZHVyYXRpb24gPSAtMTsKLX0KLQotLyoqCi0gKiBnc3Rfc2VnbWVudF9kb19zZWVrOgotICogQHNlZ21lbnQ6IGEgI0dzdFNlZ21lbnQgc3RydWN0dXJlLgotICogQHJhdGU6IHRoZSByYXRlIG9mIHRoZSBzZWdtZW50LgotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC4KLSAqIEBmbGFnczogdGhlIHNlZ21lbnQgZmxhZ3MgZm9yIHRoZSBzZWdtZW50Ci0gKiBAc3RhcnRfdHlwZTogdGhlIHNlZWsgbWV0aG9kCi0gKiBAc3RhcnQ6IHRoZSBzZWVrIHN0YXJ0IHZhbHVlCi0gKiBAc3RvcF90eXBlOiB0aGUgc2VlayBtZXRob2QKLSAqIEBzdG9wOiB0aGUgc2VlayBzdG9wIHZhbHVlCi0gKiBAdXBkYXRlOiBib29sZWFuIGhvbGRpbmcgd2hldGhlciBwb3NpdGlvbiB3YXMgdXBkYXRlZC4KLSAqCi0gKiBVcGRhdGUgdGhlIHNlZ21lbnQgc3RydWN0dXJlIHdpdGggdGhlIGZpZWxkIHZhbHVlcyBvZiBhIHNlZWsgZXZlbnQgKHNlZQotICogZ3N0X2V2ZW50X25ld19zZWVrKCkpLgotICoKLSAqIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHRoZSBzZWdtZW50IGZpZWxkIHBvc2l0aW9uIGFuZCB0aW1lIHdpbGwKLSAqIGNvbnRhaW4gdGhlIHJlcXVlc3RlZCBuZXcgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQuIFRoZSBuZXcgcmVxdWVzdGVkCi0gKiBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBkZXBlbmRzIG9uIEByYXRlIGFuZCBAc3RhcnRfdHlwZSBhbmQgQHN0b3BfdHlwZS4KLSAqCi0gKiBGb3IgcG9zaXRpdmUgQHJhdGUsIHRoZSBuZXcgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgaXMgdGhlIG5ldyBAc2VnbWVudAotICogc3RhcnQgZmllbGQgd2hlbiBpdCB3YXMgdXBkYXRlZCB3aXRoIGEgQHN0YXJ0X3R5cGUgZGlmZmVyZW50IGZyb20KLSAqICNHU1RfU0VFS19UWVBFX05PTkUuIElmIG5vIHVwZGF0ZSB3YXMgcGVyZm9ybWVkIG9uIEBzZWdtZW50IHN0YXJ0IHBvc2l0aW9uCi0gKiAoI0dTVF9TRUVLX1RZUEVfTk9ORSksIEBzdGFydCBpcyBpZ25vcmVkIGFuZCBAc2VnbWVudCBwb3NpdGlvbiBpcwotICogdW5tb2RpZmllZC4KLSAqCi0gKiBGb3IgbmVnYXRpdmUgQHJhdGUsIHRoZSBuZXcgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgaXMgdGhlIG5ldyBAc2VnbWVudAotICogc3RvcCBmaWVsZCB3aGVuIGl0IHdhcyB1cGRhdGVkIHdpdGggYSBAc3RvcF90eXBlIGRpZmZlcmVudCBmcm9tCi0gKiAjR1NUX1NFRUtfVFlQRV9OT05FLiBJZiBubyBzdG9wIHdhcyBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgaW4gdGhlIHNlZ21lbnQsIHRoZQotICogZHVyYXRpb24gb2YgdGhlIHNlZ21lbnQgd2lsbCBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgc3RvcCBwb3NpdGlvbi4KLSAqIElmIG5vIHVwZGF0ZSB3YXMgcGVyZm9ybWVkIG9uIEBzZWdtZW50IHN0b3AgcG9zaXRpb24gKCNHU1RfU0VFS19UWVBFX05PTkUpLAotICogQHN0b3AgaXMgaWdub3JlZCBhbmQgQHNlZ21lbnQgcG9zaXRpb24gaXMgdW5tb2RpZmllZC4KLSAqCi0gKiBUaGUgYXBwbGllZCByYXRlIG9mIHRoZSBzZWdtZW50IHdpbGwgYmUgc2V0IHRvIDEuMCBieSBkZWZhdWx0LgotICogSWYgdGhlIGNhbGxlciBjYW4gYXBwbHkgYSByYXRlIGNoYW5nZSwgaXQgc2hvdWxkIHVwZGF0ZSBAc2VnbWVudAotICogcmF0ZSBhbmQgYXBwbGllZF9yYXRlIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBAdXBkYXRlIHdpbGwgYmUgc2V0IHRvICVUUlVFIGlmIGEgc2VlayBzaG91bGQgYmUgcGVyZm9ybWVkIHRvIHRoZSBzZWdtZW50Ci0gKiBwb3NpdGlvbiBmaWVsZC4gVGhpcyBmaWVsZCBjYW4gYmUgJUZBTFNFIGlmLCBmb3IgZXhhbXBsZSwgb25seSB0aGUgQHJhdGUKLSAqIGhhcyBiZWVuIGNoYW5nZWQgYnV0IG5vdCB0aGUgcGxheWJhY2sgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHNlZWsgY291bGQgYmUgcGVyZm9ybWVkLgotICovCi1nYm9vbGVhbgotZ3N0X3NlZ21lbnRfZG9fc2VlayAoR3N0U2VnbWVudCAqIHNlZ21lbnQsIGdkb3VibGUgcmF0ZSwKLSAgICBHc3RGb3JtYXQgZm9ybWF0LCBHc3RTZWVrRmxhZ3MgZmxhZ3MsCi0gICAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgZ3VpbnQ2NCBzdGFydCwKLSAgICBHc3RTZWVrVHlwZSBzdG9wX3R5cGUsIGd1aW50NjQgc3RvcCwgZ2Jvb2xlYW4gKiB1cGRhdGUpCi17Ci0gIGdib29sZWFuIHVwZGF0ZV9zdG9wLCB1cGRhdGVfc3RhcnQ7Ci0gIGd1aW50NjQgcG9zaXRpb24sIGJhc2U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJhdGUgIT0gMC4wLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQtPmZvcm1hdCA9PSBmb3JtYXQsIEZBTFNFKTsKLQotICB1cGRhdGVfc3RhcnQgPSB1cGRhdGVfc3RvcCA9IFRSVUU7Ci0KLSAgcG9zaXRpb24gPSBzZWdtZW50LT5wb3NpdGlvbjsKLQotICAvKiBzZWdtZW50LT5zdGFydCBpcyBuZXZlciBpbnZhbGlkICovCi0gIHN3aXRjaCAoc3RhcnRfdHlwZSkgewotICAgIGNhc2UgR1NUX1NFRUtfVFlQRV9OT05FOgotICAgICAgLyogbm8gdXBkYXRlIHRvIHNlZ21lbnQsIHRha2UgcHJldmlvdXMgc3RhcnQgKi8KLSAgICAgIHN0YXJ0ID0gc2VnbWVudC0+c3RhcnQ7Ci0gICAgICB1cGRhdGVfc3RhcnQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NFRUtfVFlQRV9TRVQ6Ci0gICAgICAvKiBzdGFydCBob2xkcyBkZXNpcmVkIHBvc2l0aW9uLCBtYXAgLTEgdG8gdGhlIHN0YXJ0ICovCi0gICAgICBpZiAoc3RhcnQgPT0gLTEpCi0gICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NFRUtfVFlQRV9FTkQ6Ci0gICAgICBpZiAoc2VnbWVudC0+ZHVyYXRpb24gIT0gLTEpIHsKLSAgICAgICAgLyogYWRkIHN0YXJ0IHRvIHRvdGFsIGxlbmd0aCAqLwotICAgICAgICBzdGFydCA9IHNlZ21lbnQtPmR1cmF0aW9uICsgc3RhcnQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBubyB1cGRhdGUgaWYgZHVyYXRpb24gdW5rbm93biAqLwotICAgICAgICBzdGFydCA9IHNlZ21lbnQtPnN0YXJ0OwotICAgICAgICB1cGRhdGVfc3RhcnQgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci0gIC8qIGJyaW5nIGluIHNhbmUgcmFuZ2UgKi8KLSAgaWYgKHNlZ21lbnQtPmR1cmF0aW9uICE9IC0xKQotICAgIHN0YXJ0ID0gTUlOIChzdGFydCwgc2VnbWVudC0+ZHVyYXRpb24pOwotICBlbHNlCi0gICAgc3RhcnQgPSBNQVggKChnaW50NjQpIHN0YXJ0LCAwKTsKLQotICAvKiBzdG9wIGNhbiBiZSAtMSBpZiB3ZSBoYXZlIG5vdCBjb25maWd1cmVkIGEgc3RvcC4gKi8KLSAgc3dpdGNoIChzdG9wX3R5cGUpIHsKLSAgICBjYXNlIEdTVF9TRUVLX1RZUEVfTk9ORToKLSAgICAgIHN0b3AgPSBzZWdtZW50LT5zdG9wOwotICAgICAgdXBkYXRlX3N0b3AgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NFRUtfVFlQRV9TRVQ6Ci0gICAgICAvKiBzdG9wIGhvbGRzIHJlcXVpcmVkIHZhbHVlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TRUVLX1RZUEVfRU5EOgotICAgICAgaWYgKHNlZ21lbnQtPmR1cmF0aW9uICE9IC0xKSB7Ci0gICAgICAgIHN0b3AgPSBzZWdtZW50LT5kdXJhdGlvbiArIHN0b3A7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdG9wID0gc2VnbWVudC0+c3RvcDsKLSAgICAgICAgdXBkYXRlX3N0b3AgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogaWYgd2UgaGF2ZSBhIHZhbGlkIHN0b3AgdGltZSwgbWFrZSBzdXJlIGl0IGlzIGNsaXBwZWQgKi8KLSAgaWYgKHN0b3AgIT0gLTEpIHsKLSAgICBpZiAoc2VnbWVudC0+ZHVyYXRpb24gIT0gLTEpCi0gICAgICBzdG9wID0gQ0xBTVAgKChnaW50NjQpIHN0b3AsIDAsIChnaW50NjQpIHNlZ21lbnQtPmR1cmF0aW9uKTsKLSAgICBlbHNlCi0gICAgICBzdG9wID0gTUFYICgoZ2ludDY0KSBzdG9wLCAwKTsKLSAgfQotCi0gIC8qIHdlIGNhbid0IGhhdmUgc3RvcCBiZWZvcmUgc3RhcnQgKi8KLSAgaWYgKHN0b3AgIT0gLTEpIHsKLSAgICBpZiAoc3RhcnQgPiBzdG9wKSB7Ci0gICAgICBHU1RfV0FSTklORyAoInNlZ21lbnQgdXBkYXRlIGZhaWxlZDogc3RhcnQoJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAgICIpID4gc3RvcCglIiBHX0dVSU5UNjRfRk9STUFUICIpIiwgc3RhcnQsIHN0b3ApOwotICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0YXJ0IDw9IHN0b3AsIEZBTFNFKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICBpZiAoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIKSB7Ci0gICAgLyogZmx1c2ggcmVzZXRzIHRoZSBydW5uaW5nX3RpbWUgKi8KLSAgICBiYXNlID0gMDsKLSAgfSBlbHNlIHsKLSAgICAvKiBtYWtlIHN1cmUgdGhlIHBvc2l0aW9uIGlzIGluc2lkZSB0aGUgc2VnbWVudCBzdGFydC9zdG9wICovCi0gICAgcG9zaXRpb24gPSBDTEFNUCAocG9zaXRpb24sIHNlZ21lbnQtPnN0YXJ0LCBzZWdtZW50LT5zdG9wKTsKLQotICAgIC8qIHJlbWVtYmVyIHRoZSBlbGFwc2VkIHRpbWUgKi8KLSAgICBiYXNlID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChzZWdtZW50LCBmb3JtYXQsIHBvc2l0aW9uKTsKLSAgICBHU1RfREVCVUcgKCJ1cGRhdGVkIHNlZ21lbnQuYmFzZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgYmFzZSk7Ci0gIH0KLQotICBpZiAodXBkYXRlX3N0YXJ0ICYmIHJhdGUgPiAwLjApIHsKLSAgICBwb3NpdGlvbiA9IHN0YXJ0OwotICB9Ci0gIGlmICh1cGRhdGVfc3RvcCAmJiByYXRlIDwgMC4wKSB7Ci0gICAgaWYgKHN0b3AgIT0gLTEpCi0gICAgICBwb3NpdGlvbiA9IHN0b3A7Ci0gICAgZWxzZSB7Ci0gICAgICBpZiAoc2VnbWVudC0+ZHVyYXRpb24gIT0gLTEpCi0gICAgICAgIHBvc2l0aW9uID0gc2VnbWVudC0+ZHVyYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIHBvc2l0aW9uID0gMDsKLSAgICB9Ci0gIH0KLQotICAvKiBzZXQgdXBkYXRlIGFyZyB0byByZWZsZWN0IHVwZGF0ZSBvZiBwb3NpdGlvbiAqLwotICBpZiAodXBkYXRlKQotICAgICp1cGRhdGUgPSBwb3NpdGlvbiAhPSBzZWdtZW50LT5wb3NpdGlvbjsKLQotICAvKiB1cGRhdGUgbmV3IHZhbHVlcyAqLwotICAvKiBiZSBleHBsaWNpdCBhYm91dCBvdXIgR3N0U2Vla0ZsYWcgLT4gR3N0U2VnbWVudEZsYWcgY29udmVyc2lvbiAqLwotICBzZWdtZW50LT5mbGFncyA9IEdTVF9TRUdNRU5UX0ZMQUdfTk9ORTsKLSAgaWYgKChmbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0gpICE9IDApCi0gICAgc2VnbWVudC0+ZmxhZ3MgfD0gR1NUX1NFR01FTlRfRkxBR19SRVNFVDsKLSAgaWYgKChmbGFncyAmIEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFKSAhPSAwKQotICAgIHNlZ21lbnQtPmZsYWdzIHw9IEdTVF9TRUdNRU5UX0ZMQUdfVFJJQ0tNT0RFOwotICBpZiAoKGZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSAhPSAwKQotICAgIHNlZ21lbnQtPmZsYWdzIHw9IEdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVDsKLSAgaWYgKChmbGFncyAmIEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFX0tFWV9VTklUUykgIT0gMCkKLSAgICBzZWdtZW50LT5mbGFncyB8PSBHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFM7Ci0gIGlmICgoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9OT19BVURJTykgIT0gMCkKLSAgICBzZWdtZW50LT5mbGFncyB8PSBHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERV9OT19BVURJTzsKLQotICBzZWdtZW50LT5yYXRlID0gcmF0ZTsKLSAgc2VnbWVudC0+YXBwbGllZF9yYXRlID0gMS4wOwotCi0gIHNlZ21lbnQtPmJhc2UgPSBiYXNlOwotICBpZiAocmF0ZSA+IDAuMCkKLSAgICBzZWdtZW50LT5vZmZzZXQgPSBwb3NpdGlvbiAtIHN0YXJ0OwotICBlbHNlIHsKLSAgICBpZiAoc3RvcCAhPSAtMSkKLSAgICAgIHNlZ21lbnQtPm9mZnNldCA9IHN0b3AgLSBwb3NpdGlvbjsKLSAgICBlbHNlIGlmIChzZWdtZW50LT5kdXJhdGlvbiAhPSAtMSkKLSAgICAgIHNlZ21lbnQtPm9mZnNldCA9IHNlZ21lbnQtPmR1cmF0aW9uIC0gcG9zaXRpb247Ci0gICAgZWxzZQotICAgICAgc2VnbWVudC0+b2Zmc2V0ID0gMDsKLSAgfQotCi0gIHNlZ21lbnQtPnN0YXJ0ID0gc3RhcnQ7Ci0gIHNlZ21lbnQtPnN0b3AgPSBzdG9wOwotICBzZWdtZW50LT50aW1lID0gc3RhcnQ7Ci0gIHNlZ21lbnQtPnBvc2l0aW9uID0gcG9zaXRpb247Ci0KLSAgR1NUX0lORk8gKCJzZWdtZW50IHVwZGF0ZWQ6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgc2VnbWVudCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbDoKLSAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCi0gKiBAcG9zaXRpb246IHRoZSBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudAotICogQHN0cmVhbV90aW1lOiByZXN1bHQgc3RyZWFtLXRpbWUKLSAqCi0gKiBUcmFuc2xhdGUgQHBvc2l0aW9uIHRvIHRoZSB0b3RhbCBzdHJlYW0gdGltZSB1c2luZyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKLSAqIHNlZ21lbnQuIENvbXBhcmVkIHRvIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lKCkgdGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuCi0gKiBuZWdhdGl2ZSBzdHJlYW0tdGltZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSB1c2VkIGJ5IGVsZW1lbnRzIHRoYXQgbmVlZCB0byBzeW5jaHJvbml6ZSBidWZmZXJzCi0gKiBhZ2FpbnN0IHRoZSBjbG9jayBvciBlYWNob3RoZXIuCi0gKgotICogQHBvc2l0aW9uIGNhbiBiZSBhbnkgdmFsdWUgYW5kIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBmb3IgdmFsdWVzIG91dHNpZGUKLSAqIG9mIHRoZSBzZWdtZW50IGlzIGV4dHJhcG9sYXRlZC4KLSAqCi0gKiBXaGVuIDEgaXMgcmV0dXJuZWQsIEBwb3NpdGlvbiByZXN1bHRlZCBpbiBhIHBvc2l0aXZlIHN0cmVhbS10aW1lIHJldHVybmVkCi0gKiBpbiBAc3RyZWFtX3RpbWUuCi0gKgotICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgLTEsIHRoZSByZXR1cm5lZCBAc3RyZWFtX3RpbWUgc2hvdWxkIGJlIG5lZ2F0ZWQKLSAqIHRvIGdldCB0aGUgcmVhbCBuZWdhdGl2ZSBzdHJlYW0gdGltZS4KLSAqCi0gKiBSZXR1cm5zOiBhIDEgb3IgLTEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgotICoKLSAqIFNpbmNlOiAxLjgKLSAqLwotZ2ludAotZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbCAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ3VpbnQ2NCBwb3NpdGlvbiwgZ3VpbnQ2NCAqIHN0cmVhbV90aW1lKQotewotICBndWludDY0IHN0YXJ0LCBzdG9wLCB0aW1lOwotICBnZG91YmxlIGFic19hcHBsaWVkX3JhdGU7Ci0gIGdpbnQgcmVzOwotCi0gIC8qIGZvcm1hdCBkb2VzIG5vdCBtYXR0ZXIgZm9yIC0xICovCi0gIGlmIChHX1VOTElLRUxZIChwb3NpdGlvbiA9PSAtMSkpIHsKLSAgICAqc3RyZWFtX3RpbWUgPSAtMTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50ICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudC0+Zm9ybWF0ID09IGZvcm1hdCwgMCk7Ci0KLSAgc3RvcCA9IHNlZ21lbnQtPnN0b3A7Ci0KLSAgc3RhcnQgPSBzZWdtZW50LT5zdGFydDsKLSAgdGltZSA9IHNlZ21lbnQtPnRpbWU7Ci0KLSAgLyogdGltZSBtdXN0IGJlIGtub3duICovCi0gIGlmIChHX1VOTElLRUxZICh0aW1lID09IC0xKSkKLSAgICByZXR1cm4gMDsKLQotICBhYnNfYXBwbGllZF9yYXRlID0gQUJTIChzZWdtZW50LT5hcHBsaWVkX3JhdGUpOwotCi0gIC8qIGFkZCBvciBzdWJ0cmFjdCBmcm9tIHNlZ21lbnQgdGltZSBiYXNlZCBvbiBhcHBsaWVkIHJhdGUgKi8KLSAgaWYgKEdfTElLRUxZIChzZWdtZW50LT5hcHBsaWVkX3JhdGUgPiAwLjApKSB7Ci0gICAgaWYgKEdfTElLRUxZIChwb3NpdGlvbiA+IHN0YXJ0KSkgewotICAgICAgLyogYnJpbmcgdG8gdW5jb3JyZWN0ZWQgcG9zaXRpb24gaW4gc2VnbWVudCAqLwotICAgICAgKnN0cmVhbV90aW1lID0gcG9zaXRpb24gLSBzdGFydDsKLSAgICAgIC8qIGNvcnJlY3QgZm9yIGFwcGxpZWQgcmF0ZSBpZiBuZWVkZWQgKi8KLSAgICAgIGlmIChHX1VOTElLRUxZIChhYnNfYXBwbGllZF9yYXRlICE9IDEuMCkpCi0gICAgICAgICpzdHJlYW1fdGltZSAqPSBhYnNfYXBwbGllZF9yYXRlOwotICAgICAgLyogY29ycmVjdCBmb3Igc2VnbWVudCB0aW1lICovCi0gICAgICAqc3RyZWFtX3RpbWUgKz0gdGltZTsKLSAgICAgIHJlcyA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICpzdHJlYW1fdGltZSA9IHN0YXJ0IC0gcG9zaXRpb247Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoYWJzX2FwcGxpZWRfcmF0ZSAhPSAxLjApKQotICAgICAgICAqc3RyZWFtX3RpbWUgKj0gYWJzX2FwcGxpZWRfcmF0ZTsKLSAgICAgIGlmICgqc3RyZWFtX3RpbWUgPiB0aW1lKSB7Ci0gICAgICAgICpzdHJlYW1fdGltZSAtPSB0aW1lOwotICAgICAgICByZXMgPSAtMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpzdHJlYW1fdGltZSA9IHRpbWUgLSAqc3RyZWFtX3RpbWU7Ci0gICAgICAgIHJlcyA9IDE7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIGNvcnJlY3QgZm9yIHNlZ21lbnQgdGltZS4gU3RyZWFtcyB3aXRoIGEgbmVnYXRpdmUgYXBwbGllZF9yYXRlCi0gICAgICogaGF2ZSB0aW1lc3RhbXBzIGJldHdlZW4gc3RhcnQgYW5kIHN0b3AsIGFzIHVzdWFsLCBidXQgaGF2ZSB0aGUKLSAgICAgKiB0aW1lIG1lbWJlciBzdGFydGluZyBoaWdoIGFuZCBnb2luZyBiYWNrd2FyZHMuICAqLwotICAgIC8qIGNhbm5vdCBjb250aW51ZSB3aXRob3V0IGEga25vd24gc2VnbWVudCBzdG9wICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHN0b3AgPT0gLTEpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHBvc2l0aW9uID4gc3RvcCkpIHsKLSAgICAgICpzdHJlYW1fdGltZSA9IHBvc2l0aW9uIC0gc3RvcDsKLSAgICAgIGlmIChHX1VOTElLRUxZIChhYnNfYXBwbGllZF9yYXRlICE9IDEuMCkpCi0gICAgICAgICpzdHJlYW1fdGltZSAqPSBhYnNfYXBwbGllZF9yYXRlOwotICAgICAgaWYgKCpzdHJlYW1fdGltZSA+IHRpbWUpIHsKLSAgICAgICAgKnN0cmVhbV90aW1lIC09IHRpbWU7Ci0gICAgICAgIHJlcyA9IC0xOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgKnN0cmVhbV90aW1lID0gdGltZSAtICpzdHJlYW1fdGltZTsKLSAgICAgICAgcmVzID0gMTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgKnN0cmVhbV90aW1lID0gc3RvcCAtIHBvc2l0aW9uOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKGFic19hcHBsaWVkX3JhdGUgIT0gMS4wKSkKLSAgICAgICAgKnN0cmVhbV90aW1lICo9IGFic19hcHBsaWVkX3JhdGU7Ci0gICAgICAqc3RyZWFtX3RpbWUgKz0gdGltZTsKLSAgICAgIHJlcyA9IDE7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZToKLSAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCi0gKiBAcG9zaXRpb246IHRoZSBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudAotICoKLSAqIFRyYW5zbGF0ZSBAcG9zaXRpb24gdG8gc3RyZWFtIHRpbWUgdXNpbmcgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkCi0gKiBzZWdtZW50LiBUaGUgQHBvc2l0aW9uIHZhbHVlIG11c3QgYmUgYmV0d2VlbiBAc2VnbWVudCBzdGFydCBhbmQKLSAqIHN0b3AgdmFsdWUuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCBieSBlbGVtZW50cyB0aGF0IG5lZWQgdG8gb3BlcmF0ZSBvbgotICogdGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBidWZmZXJzIGl0IHJlY2VpdmVzLCBzdWNoIGFzIGVmZmVjdCBwbHVnaW5zLgotICogSW4gdGhvc2UgdXNlIGNhc2VzLCBAcG9zaXRpb24gaXMgdHlwaWNhbGx5IHRoZSBidWZmZXIgdGltZXN0YW1wIG9yCi0gKiBjbG9jayB0aW1lIHRoYXQgb25lIHdhbnRzIHRvIGNvbnZlcnQgdG8gdGhlIHN0cmVhbSB0aW1lLgotICogVGhlIHN0cmVhbSB0aW1lIGlzIGFsd2F5cyBiZXR3ZWVuIDAgYW5kIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUKLSAqIG1lZGlhIHN0cmVhbS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcG9zaXRpb24gaW4gc3RyZWFtX3RpbWUgb3IgLTEgd2hlbiBhbiBpbnZhbGlkIHBvc2l0aW9uCi0gKiB3YXMgZ2l2ZW4uCi0gKgotICogU2luY2U6IDEuOAotICovCi1ndWludDY0Ci1nc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ3VpbnQ2NCBwb3NpdGlvbikKLXsKLSAgZ3VpbnQ2NCByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQgIT0gTlVMTCwgLTEpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudC0+Zm9ybWF0ID09IGZvcm1hdCwgLTEpOwotCi0gIC8qIGJlZm9yZSB0aGUgc2VnbWVudCBib3VuZGFyeSAqLwotICBpZiAoR19VTkxJS0VMWSAocG9zaXRpb24gPCBzZWdtZW50LT5zdGFydCkpIHsKLSAgICBHU1RfREVCVUcgKCJwb3NpdGlvbiglIiBHX0dVSU5UNjRfRk9STUFUICIpIDwgc3RhcnQoJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiKSIsIHBvc2l0aW9uLCBzZWdtZW50LT5zdGFydCk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIC8qIGFmdGVyIHRoZSBzZWdtZW50IGJvdW5kYXJ5ICovCi0gIGlmIChHX1VOTElLRUxZIChzZWdtZW50LT5zdG9wICE9IC0xICYmIHBvc2l0aW9uID4gc2VnbWVudC0+c3RvcCkpIHsKLSAgICBHU1RfREVCVUcgKCJwb3NpdGlvbiglIiBHX0dVSU5UNjRfRk9STUFUICIpID4gc3RvcCglIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIpIiwgcG9zaXRpb24sIHNlZ21lbnQtPnN0b3ApOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGlmIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxsIChzZWdtZW50LCBmb3JtYXQsIHBvc2l0aW9uLCAmcmVzdWx0KSA9PSAxKQotICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgcmV0dXJuIC0xOwotfQotCi0vKioKLSAqIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbDoKLSAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCi0gKiBAc3RyZWFtX3RpbWU6IHRoZSBzdHJlYW0tdGltZQotICogQHBvc2l0aW9uOiB0aGUgcmVzdWx0aW5nIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50Ci0gKgotICogVHJhbnNsYXRlIEBzdHJlYW1fdGltZSB0byB0aGUgc2VnbWVudCBwb3NpdGlvbiB1c2luZyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKLSAqIHNlZ21lbnQuIENvbXBhcmVkIHRvIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWUoKSB0aGlzIGZ1bmN0aW9uIGNhbgotICogcmV0dXJuIG5lZ2F0aXZlIHNlZ21lbnQgcG9zaXRpb24uCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCBieSBlbGVtZW50cyB0aGF0IG5lZWQgdG8gc3luY2hyb25pemUgYnVmZmVycwotICogYWdhaW5zdCB0aGUgY2xvY2sgb3IgZWFjaCBvdGhlci4KLSAqCi0gKiBAc3RyZWFtX3RpbWUgY2FuIGJlIGFueSB2YWx1ZSBhbmQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGZvciB2YWx1ZXMgb3V0c2lkZQotICogb2YgdGhlIHNlZ21lbnQgaXMgZXh0cmFwb2xhdGVkLgotICoKLSAqIFdoZW4gMSBpcyByZXR1cm5lZCwgQHN0cmVhbV90aW1lIHJlc3VsdGVkIGluIGEgcG9zaXRpdmUgcG9zaXRpb24gcmV0dXJuZWQKLSAqIGluIEBwb3NpdGlvbi4KLSAqCi0gKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSwgdGhlIHJldHVybmVkIEBwb3NpdGlvbiBzaG91bGQgYmUgbmVnYXRlZAotICogdG8gZ2V0IHRoZSByZWFsIG5lZ2F0aXZlIHNlZ21lbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogYSAxIG9yIC0xIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLWdpbnQKLWdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbCAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ3VpbnQ2NCBzdHJlYW1fdGltZSwgZ3VpbnQ2NCAqIHBvc2l0aW9uKQotewotICBndWludDY0IHN0YXJ0LCB0aW1lOwotICBnZG91YmxlIGFic19hcHBsaWVkX3JhdGU7Ci0gIGdpbnQgcmVzOwotCi0gIC8qIGZvcm1hdCBkb2VzIG5vdCBtYXR0ZXIgZm9yIC0xICovCi0gIGlmIChHX1VOTElLRUxZIChzdHJlYW1fdGltZSA9PSAtMSkpIHsKLSAgICAqcG9zaXRpb24gPSAtMTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50ICE9IE5VTEwsIC0xKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQtPmZvcm1hdCA9PSBmb3JtYXQsIC0xKTsKLQotICBzdGFydCA9IHNlZ21lbnQtPnN0YXJ0OwotICB0aW1lID0gc2VnbWVudC0+dGltZTsKLQotICAvKiB0aW1lIG11c3QgYmUga25vd24gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHRpbWUgPT0gLTEpKQotICAgIHJldHVybiAwOwotCi0gIGFic19hcHBsaWVkX3JhdGUgPSBBQlMgKHNlZ21lbnQtPmFwcGxpZWRfcmF0ZSk7Ci0KLSAgaWYgKEdfTElLRUxZIChzZWdtZW50LT5hcHBsaWVkX3JhdGUgPiAwLjApKSB7Ci0gICAgaWYgKEdfTElLRUxZIChzdHJlYW1fdGltZSA+IHRpbWUpKSB7Ci0gICAgICByZXMgPSAxOwotICAgICAgKnBvc2l0aW9uID0gc3RyZWFtX3RpbWUgLSB0aW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXMgPSAtMTsKLSAgICAgICpwb3NpdGlvbiA9IHRpbWUgLSBzdHJlYW1fdGltZTsKLSAgICB9Ci0gICAgLyogY29ycmVjdCBmb3IgYXBwbGllZCByYXRlIGlmIG5lZWRlZCAqLwotICAgIGlmIChHX1VOTElLRUxZIChhYnNfYXBwbGllZF9yYXRlICE9IDEuMCkpCi0gICAgICAqcG9zaXRpb24gLz0gYWJzX2FwcGxpZWRfcmF0ZTsKLQotICAgIGlmIChHX1VOTElLRUxZIChyZXMgPT0gLTEpKSB7Ci0gICAgICBpZiAoKnBvc2l0aW9uID4gc3RhcnQpIHsKLSAgICAgICAgKnBvc2l0aW9uIC09IHN0YXJ0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgKnBvc2l0aW9uID0gc3RhcnQgLSAqcG9zaXRpb247Ci0gICAgICAgIHJlcyA9IDE7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICpwb3NpdGlvbiArPSBzdGFydDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR3N0Q2xvY2tUaW1lIHN0b3AgPSBzZWdtZW50LT5zdG9wOwotICAgIC8qIGNhbm5vdCBjb250aW51ZSB3aXRob3V0IGEga25vd24gc2VnbWVudCBzdG9wICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHN0b3AgPT0gLTEpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHRpbWUgPiBzdHJlYW1fdGltZSkpIHsKLSAgICAgIHJlcyA9IC0xOwotICAgICAgKnBvc2l0aW9uID0gdGltZSAtIHN0cmVhbV90aW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXMgPSAxOwotICAgICAgKnBvc2l0aW9uID0gc3RyZWFtX3RpbWUgLSB0aW1lOwotICAgIH0KLSAgICBpZiAoR19VTkxJS0VMWSAoYWJzX2FwcGxpZWRfcmF0ZSAhPSAxLjApKQotICAgICAgKnBvc2l0aW9uIC89IGFic19hcHBsaWVkX3JhdGU7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHN0b3AgPCAqcG9zaXRpb24pKSB7Ci0gICAgICBpZiAoR19MSUtFTFkgKHJlcyA9PSAxKSkgewotICAgICAgICAqcG9zaXRpb24gLT0gc3RvcDsKLSAgICAgICAgcmVzID0gLTE7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAqcG9zaXRpb24gKz0gc3RvcDsKLSAgICAgICAgcmVzID0gMTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKEdfTElLRUxZIChyZXMgPT0gMSkpIHsKLSAgICAgICAgKnBvc2l0aW9uID0gc3RvcCAtICpwb3NpdGlvbjsKLSAgICAgICAgcmVzID0gMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpwb3NpdGlvbiArPSBzdG9wOwotICAgICAgICByZXMgPSAxOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZToKLSAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCi0gKiBAc3RyZWFtX3RpbWU6IHRoZSBzdHJlYW1fdGltZSBpbiB0aGUgc2VnbWVudAotICoKLSAqIENvbnZlcnQgQHN0cmVhbV90aW1lIGludG8gYSBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCBzbyB0aGF0Ci0gKiBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSgpIHdpdGggdGhhdCBwb3NpdGlvbiByZXR1cm5zIEBzdHJlYW1fdGltZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgZm9yIEBzdHJlYW1fdGltZS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zCi0gKiAtMSB3aGVuIEBzdHJlYW1fdGltZSBpcyAtMSBvciB3aGVuIGl0IGlzIG5vdCBpbnNpZGUgQHNlZ21lbnQuCi0gKgotICogU2luY2U6IDEuOAotICovCi1ndWludDY0Ci1nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lIChjb25zdCBHc3RTZWdtZW50ICogc2VnbWVudCwKLSAgICBHc3RGb3JtYXQgZm9ybWF0LCBndWludDY0IHN0cmVhbV90aW1lKQotewotICBndWludDY0IHBvc2l0aW9uOwotICBnaW50IHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudCAhPSBOVUxMLCAtMSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50LT5mb3JtYXQgPT0gZm9ybWF0LCAtMSk7Ci0KLSAgcmVzID0KLSAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbCAoc2VnbWVudCwgZm9ybWF0LCBzdHJlYW1fdGltZSwKLSAgICAgICZwb3NpdGlvbik7Ci0KLSAgLyogYmVmb3JlIHRoZSBzZWdtZW50IGJvdW5kYXJ5ICovCi0gIGlmIChHX1VOTElLRUxZIChwb3NpdGlvbiA8IHNlZ21lbnQtPnN0YXJ0KSkgewotICAgIEdTVF9ERUJVRyAoInBvc2l0aW9uKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIikgPCBzdGFydCglIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIpIiwgcG9zaXRpb24sIHNlZ21lbnQtPnN0YXJ0KTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBhZnRlciB0aGUgc2VnbWVudCBib3VuZGFyeSAqLwotICBpZiAoR19VTkxJS0VMWSAoc2VnbWVudC0+c3RvcCAhPSAtMSAmJiBwb3NpdGlvbiA+IHNlZ21lbnQtPnN0b3ApKSB7Ci0gICAgR1NUX0RFQlVHICgicG9zaXRpb24oJSIgR19HVUlOVDY0X0ZPUk1BVCAiKSA+IHN0b3AoJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiKSIsIHBvc2l0aW9uLCBzZWdtZW50LT5zdG9wKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpZiAocmVzID09IDEpCi0gICAgcmV0dXJuIHBvc2l0aW9uOwotCi0gIHJldHVybiAtMTsKLX0KLQotLyoqCi0gKiBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbDoKLSAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCi0gKiBAcG9zaXRpb246IHRoZSBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudAotICogQHJ1bm5pbmdfdGltZTogcmVzdWx0IHJ1bm5pbmctdGltZQotICoKLSAqIFRyYW5zbGF0ZSBAcG9zaXRpb24gdG8gdGhlIHRvdGFsIHJ1bm5pbmcgdGltZSB1c2luZyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKLSAqIHNlZ21lbnQuIENvbXBhcmVkIHRvIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpIHRoaXMgZnVuY3Rpb24gY2FuIHJldHVybgotICogbmVnYXRpdmUgcnVubmluZy10aW1lLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgYnkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIHN5bmNocm9uaXplIGJ1ZmZlcnMKLSAqIGFnYWluc3QgdGhlIGNsb2NrIG9yIGVhY2hvdGhlci4KLSAqCi0gKiBAcG9zaXRpb24gY2FuIGJlIGFueSB2YWx1ZSBhbmQgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGZvciB2YWx1ZXMgb3V0c2lkZQotICogb2YgdGhlIHNlZ21lbnQgaXMgZXh0cmFwb2xhdGVkLgotICoKLSAqIFdoZW4gMSBpcyByZXR1cm5lZCwgQHBvc2l0aW9uIHJlc3VsdGVkIGluIGEgcG9zaXRpdmUgcnVubmluZy10aW1lIHJldHVybmVkCi0gKiBpbiBAcnVubmluZ190aW1lLgotICoKLSAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xLCB0aGUgcmV0dXJuZWQgQHJ1bm5pbmdfdGltZSBzaG91bGQgYmUgbmVnYXRlZAotICogdG8gZ2V0IHRoZSByZWFsIG5lZ2F0aXZlIHJ1bm5pbmcgdGltZS4KLSAqCi0gKiBSZXR1cm5zOiBhIDEgb3IgLTEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2ludAotZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lX2Z1bGwgKGNvbnN0IEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIGd1aW50NjQgcG9zaXRpb24sIGd1aW50NjQgKiBydW5uaW5nX3RpbWUpCi17Ci0gIGdpbnQgcmVzID0gMDsKLSAgZ3VpbnQ2NCByZXN1bHQ7Ci0gIGd1aW50NjQgc3RhcnQsIHN0b3AsIG9mZnNldDsKLSAgZ2RvdWJsZSBhYnNfcmF0ZTsKLQotICBpZiAoR19VTkxJS0VMWSAocG9zaXRpb24gPT0gLTEpKSB7Ci0gICAgR1NUX0RFQlVHICgiaW52YWxpZCBwb3NpdGlvbiAoLTEpIik7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQgIT0gTlVMTCwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50LT5mb3JtYXQgPT0gZm9ybWF0LCAwKTsKLQotICBvZmZzZXQgPSBzZWdtZW50LT5vZmZzZXQ7Ci0KLSAgaWYgKEdfTElLRUxZIChzZWdtZW50LT5yYXRlID4gMC4wKSkgewotICAgIHN0YXJ0ID0gc2VnbWVudC0+c3RhcnQgKyBvZmZzZXQ7Ci0KLSAgICAvKiBicmluZyB0byB1bmNvcnJlY3RlZCBwb3NpdGlvbiBpbiBzZWdtZW50ICovCi0gICAgaWYgKHBvc2l0aW9uIDwgc3RhcnQpIHsKLSAgICAgIC8qIG5lZ2F0aXZlIHZhbHVlICovCi0gICAgICByZXN1bHQgPSBzdGFydCAtIHBvc2l0aW9uOwotICAgICAgcmVzID0gLTE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IHBvc2l0aW9uIC0gc3RhcnQ7Ci0gICAgICByZXMgPSAxOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBzdG9wID0gc2VnbWVudC0+c3RvcDsKLQotICAgIC8qIGNhbm5vdCBjb250aW51ZSBpZiBubyBzdG9wIHBvc2l0aW9uIHNldCBvciBpbnZhbGlkIG9mZnNldCAqLwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdG9wICE9IC0xLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RvcCA+PSBvZmZzZXQsIDApOwotCi0gICAgc3RvcCAtPSBvZmZzZXQ7Ci0KLSAgICAvKiBicmluZyB0byB1bmNvcnJlY3RlZCBwb3NpdGlvbiBpbiBzZWdtZW50ICovCi0gICAgaWYgKHBvc2l0aW9uID4gc3RvcCkgewotICAgICAgLyogbmVnYXRpdmUgdmFsdWUgKi8KLSAgICAgIHJlc3VsdCA9IHBvc2l0aW9uIC0gc3RvcDsKLSAgICAgIHJlcyA9IC0xOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXN1bHQgPSBzdG9wIC0gcG9zaXRpb247Ci0gICAgICByZXMgPSAxOwotICAgIH0KLSAgfQotCi0gIGlmIChydW5uaW5nX3RpbWUpIHsKLSAgICAvKiBzY2FsZSBiYXNlZCBvbiB0aGUgcmF0ZSwgYXZvaWQgZGl2aXNpb24gYnkgYW5kIGNvbnZlcnNpb24gdG8KLSAgICAgKiBmbG9hdCB3aGVuIG5vdCBuZWVkZWQgKi8KLSAgICBhYnNfcmF0ZSA9IEFCUyAoc2VnbWVudC0+cmF0ZSk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGFic19yYXRlICE9IDEuMCkpCi0gICAgICByZXN1bHQgLz0gYWJzX3JhdGU7Ci0KLSAgICAvKiBjb3JyZWN0IGZvciBiYXNlIG9mIHRoZSBzZWdtZW50ICovCi0gICAgaWYgKHJlcyA9PSAxKQotICAgICAgLyogcG9zaXRpdmUsIGFkZCBiYXNlICovCi0gICAgICAqcnVubmluZ190aW1lID0gcmVzdWx0ICsgc2VnbWVudC0+YmFzZTsKLSAgICBlbHNlIGlmIChzZWdtZW50LT5iYXNlID49IHJlc3VsdCkgewotICAgICAgLyogbmVnYXRpdmUgYW5kIGJhc2UgaXMgYmlnZ2VyLCBzdWJ0cmFjdCBmcm9tIGJhc2UgYW5kIHdlIGhhdmUgYQotICAgICAgICogcG9zaXRpdmUgdmFsdWUgYWdhaW4gKi8KLSAgICAgICpydW5uaW5nX3RpbWUgPSBzZWdtZW50LT5iYXNlIC0gcmVzdWx0OwotICAgICAgcmVzID0gMTsKLSAgICB9IGVsc2UgewotICAgICAgLyogbmVnYXRpdmUgYW5kIGJhc2UgaXMgc21hbGxlciwgc3VidHJhY3QgYmFzZSBhbmQgcmVtYWluZGVyIGlzCi0gICAgICAgKiBuZWdhdGl2ZSAqLwotICAgICAgKnJ1bm5pbmdfdGltZSA9IHJlc3VsdCAtIHNlZ21lbnQtPmJhc2U7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXM7Ci0KLWRvbmU6Ci0gIHsKLSAgICBpZiAocnVubmluZ190aW1lKQotICAgICAgKnJ1bm5pbmdfdGltZSA9IC0xOwotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lOgotICogQHNlZ21lbnQ6IGEgI0dzdFNlZ21lbnQgc3RydWN0dXJlLgotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC4KLSAqIEBwb3NpdGlvbjogdGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50Ci0gKgotICogVHJhbnNsYXRlIEBwb3NpdGlvbiB0byB0aGUgdG90YWwgcnVubmluZyB0aW1lIHVzaW5nIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZAotICogc2VnbWVudC4gUG9zaXRpb24gaXMgYSB2YWx1ZSBiZXR3ZWVuIEBzZWdtZW50IHN0YXJ0IGFuZCBzdG9wIHRpbWUuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCBieSBlbGVtZW50cyB0aGF0IG5lZWQgdG8gc3luY2hyb25pemUgdG8gdGhlCi0gKiBnbG9iYWwgY2xvY2sgaW4gYSBwaXBlbGluZS4gVGhlIHJ1bm5pbmcgdGltZSBpcyBhIGNvbnN0YW50bHkgaW5jcmVhc2luZyB2YWx1ZQotICogc3RhcnRpbmcgZnJvbSAwLiBXaGVuIGdzdF9zZWdtZW50X2luaXQoKSBpcyBjYWxsZWQsIHRoaXMgdmFsdWUgd2lsbCByZXNldCB0bwotICogMC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLTEgaWYgdGhlIHBvc2l0aW9uIGlzIG91dHNpZGUgb2YgQHNlZ21lbnQgc3RhcnQgYW5kIHN0b3AuCi0gKgotICogUmV0dXJuczogdGhlIHBvc2l0aW9uIGFzIHRoZSB0b3RhbCBydW5uaW5nIHRpbWUgb3IgLTEgd2hlbiBhbiBpbnZhbGlkIHBvc2l0aW9uCi0gKiB3YXMgZ2l2ZW4uCi0gKi8KLWd1aW50NjQKLWdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ3VpbnQ2NCBwb3NpdGlvbikKLXsKLSAgZ3VpbnQ2NCByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQgIT0gTlVMTCwgLTEpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudC0+Zm9ybWF0ID09IGZvcm1hdCwgLTEpOwotCi0gIC8qIGJlZm9yZSB0aGUgc2VnbWVudCBib3VuZGFyeSAqLwotICBpZiAoR19VTkxJS0VMWSAocG9zaXRpb24gPCBzZWdtZW50LT5zdGFydCkpIHsKLSAgICBHU1RfREVCVUcgKCJwb3NpdGlvbiglIiBHX0dVSU5UNjRfRk9STUFUICIpIDwgc3RhcnQoJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiKSIsIHBvc2l0aW9uLCBzZWdtZW50LT5zdGFydCk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIC8qIGFmdGVyIHRoZSBzZWdtZW50IGJvdW5kYXJ5ICovCi0gIGlmIChHX1VOTElLRUxZIChzZWdtZW50LT5zdG9wICE9IC0xICYmIHBvc2l0aW9uID4gc2VnbWVudC0+c3RvcCkpIHsKLSAgICBHU1RfREVCVUcgKCJwb3NpdGlvbiglIiBHX0dVSU5UNjRfRk9STUFUICIpID4gc3RvcCglIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIpIiwgcG9zaXRpb24sIHNlZ21lbnQtPnN0b3ApOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGlmIChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbCAoc2VnbWVudCwgZm9ybWF0LCBwb3NpdGlvbiwKLSAgICAgICAgICAmcmVzdWx0KSA9PSAxKQotICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgcmV0dXJuIC0xOwotfQotCi0vKioKLSAqIGdzdF9zZWdtZW50X2NsaXA6Ci0gKiBAc2VnbWVudDogYSAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCi0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LgotICogQHN0YXJ0OiB0aGUgc3RhcnQgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQKLSAqIEBzdG9wOiB0aGUgc3RvcCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudAotICogQGNsaXBfc3RhcnQ6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIGNsaXBwZWQgc3RhcnQgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQKLSAqIEBjbGlwX3N0b3A6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIGNsaXBwZWQgc3RvcCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudAotICoKLSAqIENsaXAgdGhlIGdpdmVuIEBzdGFydCBhbmQgQHN0b3AgdmFsdWVzIHRvIHRoZSBzZWdtZW50IGJvdW5kYXJpZXMgZ2l2ZW4KLSAqIGluIEBzZWdtZW50LiBAc3RhcnQgYW5kIEBzdG9wIGFyZSBjb21wYXJlZCBhbmQgY2xpcHBlZCB0byBAc2VnbWVudAotICogc3RhcnQgYW5kIHN0b3AgdmFsdWVzLgotICoKLSAqIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zICVGQUxTRSwgQHN0YXJ0IGFuZCBAc3RvcCBhcmUga25vd24gdG8gZmFsbAotICogb3V0c2lkZSBvZiBAc2VnbWVudCBhbmQgQGNsaXBfc3RhcnQgYW5kIEBjbGlwX3N0b3AgYXJlIG5vdCB1cGRhdGVkLgotICoKLSAqIFdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgJVRSVUUsIEBjbGlwX3N0YXJ0IGFuZCBAY2xpcF9zdG9wIHdpbGwgYmUKLSAqIHVwZGF0ZWQuIElmIEBjbGlwX3N0YXJ0IG9yIEBjbGlwX3N0b3AgYXJlIGRpZmZlcmVudCBmcm9tIEBzdGFydCBvciBAc3RvcAotICogcmVzcGVjdGl2ZWx5LCB0aGUgcmVnaW9uIGZlbGwgcGFydGlhbGx5IGluIHRoZSBzZWdtZW50LgotICoKLSAqIE5vdGUgdGhhdCB3aGVuIEBzdG9wIGlzIC0xLCBAY2xpcF9zdG9wIHdpbGwgYmUgc2V0IHRvIHRoZSBlbmQgb2YgdGhlCi0gKiBzZWdtZW50LiBEZXBlbmRpbmcgb24gdGhlIHVzZSBjYXNlLCB0aGlzIG1heSBvciBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGdpdmVuIEBzdGFydCBhbmQgQHN0b3AgdGltZXMgZmFsbCBwYXJ0aWFsbHkgb3IKLSAqICAgICBjb21wbGV0ZWx5IGluIEBzZWdtZW50LCAlRkFMU0UgaWYgdGhlIHZhbHVlcyBhcmUgY29tcGxldGVseSBvdXRzaWRlCi0gKiAgICAgb2YgdGhlIHNlZ21lbnQuCi0gKi8KLWdib29sZWFuCi1nc3Rfc2VnbWVudF9jbGlwIChjb25zdCBHc3RTZWdtZW50ICogc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ3VpbnQ2NCBzdGFydCwKLSAgICBndWludDY0IHN0b3AsIGd1aW50NjQgKiBjbGlwX3N0YXJ0LCBndWludDY0ICogY2xpcF9zdG9wKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50LT5mb3JtYXQgPT0gZm9ybWF0LCBGQUxTRSk7Ci0KLSAgLyogaWYgd2UgaGF2ZSBhIHN0b3AgcG9zaXRpb24gYW5kIGEgdmFsaWQgc3RhcnQgYW5kIHN0YXJ0IGlzIGJpZ2dlciwKLSAgICogd2UncmUgb3V0c2lkZSBvZiB0aGUgc2VnbWVudCAqLwotICBpZiAoR19VTkxJS0VMWSAoc2VnbWVudC0+c3RvcCAhPSAtMSAmJiBzdGFydCAhPSAtMSAmJiBzdGFydCA+PSBzZWdtZW50LT5zdG9wKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogaWYgYSBzdG9wIHBvc2l0aW9uIGlzIGdpdmVuIGFuZCBpcyBiZWZvcmUgdGhlIHNlZ21lbnQgc3RhcnQsCi0gICAqIHdlJ3JlIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQuIFNwZWNpYWwgY2FzZSBpcyB3ZXJlIHN0YXJ0Ci0gICAqIGFuZCBzdG9wIGFyZSBlcXVhbCB0byB0aGUgc2VnbWVudCBzdGFydC4gSW4gdGhhdCBjYXNlIHdlCi0gICAqIGFyZSBpbnNpZGUgdGhlIHNlZ21lbnQuICovCi0gIGlmIChHX1VOTElLRUxZIChzdG9wICE9IC0xICYmIChzdG9wIDwgc2VnbWVudC0+c3RhcnQgfHwgKHN0YXJ0ICE9IHN0b3AKLSAgICAgICAgICAgICAgICAgICYmIHN0b3AgPT0gc2VnbWVudC0+c3RhcnQpKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChjbGlwX3N0YXJ0KSB7Ci0gICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgKmNsaXBfc3RhcnQgPSAtMTsKLSAgICBlbHNlCi0gICAgICAqY2xpcF9zdGFydCA9IE1BWCAoc3RhcnQsIHNlZ21lbnQtPnN0YXJ0KTsKLSAgfQotCi0gIGlmIChjbGlwX3N0b3ApIHsKLSAgICBpZiAoc3RvcCA9PSAtMSkKLSAgICAgICpjbGlwX3N0b3AgPSBzZWdtZW50LT5zdG9wOwotICAgIGVsc2UgaWYgKHNlZ21lbnQtPnN0b3AgPT0gLTEpCi0gICAgICAqY2xpcF9zdG9wID0gc3RvcDsKLSAgICBlbHNlCi0gICAgICAqY2xpcF9zdG9wID0gTUlOIChzdG9wLCBzZWdtZW50LT5zdG9wKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lOgotICogQHNlZ21lbnQ6IGEgI0dzdFNlZ21lbnQgc3RydWN0dXJlLgotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgc2VnbWVudC4KLSAqIEBydW5uaW5nX3RpbWU6IHRoZSBydW5uaW5nX3RpbWUgaW4gdGhlIHNlZ21lbnQKLSAqCi0gKiBDb252ZXJ0IEBydW5uaW5nX3RpbWUgaW50byBhIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IHNvIHRoYXQKLSAqIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgpIHdpdGggdGhhdCBwb3NpdGlvbiByZXR1cm5zIEBydW5uaW5nX3RpbWUuCi0gKgotICogUmV0dXJuczogdGhlIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50IGZvciBAcnVubmluZ190aW1lLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMKLSAqIC0xIHdoZW4gQHJ1bm5pbmdfdGltZSBpcyAtMSBvciB3aGVuIGl0IGlzIG5vdCBpbnNpZGUgQHNlZ21lbnQuCi0gKgotICogU2luY2U6IDEuOAotICovCi1ndWludDY0Ci1nc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZSAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ3VpbnQ2NCBydW5uaW5nX3RpbWUpCi17Ci0gIGd1aW50NjQgcG9zaXRpb247Ci0gIGdpbnQgcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWdtZW50ICE9IE5VTEwsIC0xKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQtPmZvcm1hdCA9PSBmb3JtYXQsIC0xKTsKLQotICByZXMgPQotICAgICAgZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWVfZnVsbCAoc2VnbWVudCwgZm9ybWF0LAotICAgICAgcnVubmluZ190aW1lLCAmcG9zaXRpb24pOwotCi0gIGlmIChyZXMgIT0gMSkKLSAgICByZXR1cm4gLTE7Ci0KLSAgLyogYmVmb3JlIHRoZSBzZWdtZW50IGJvdW5kYXJ5ICovCi0gIGlmIChHX1VOTElLRUxZIChwb3NpdGlvbiA8IHNlZ21lbnQtPnN0YXJ0KSkgewotICAgIEdTVF9ERUJVRyAoInBvc2l0aW9uKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIikgPCBzdGFydCglIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIpIiwgcG9zaXRpb24sIHNlZ21lbnQtPnN0YXJ0KTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBhZnRlciB0aGUgc2VnbWVudCBib3VuZGFyeSAqLwotICBpZiAoR19VTkxJS0VMWSAoc2VnbWVudC0+c3RvcCAhPSAtMSAmJiBwb3NpdGlvbiA+IHNlZ21lbnQtPnN0b3ApKSB7Ci0gICAgR1NUX0RFQlVHICgicG9zaXRpb24oJSIgR19HVUlOVDY0X0ZPUk1BVCAiKSA+IHN0b3AoJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiKSIsIHBvc2l0aW9uLCBzZWdtZW50LT5zdG9wKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLS8qKgotICogZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWVfZnVsbDoKLSAqIEBzZWdtZW50OiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQuCi0gKiBAcnVubmluZ190aW1lOiB0aGUgcnVubmluZy10aW1lCi0gKiBAcG9zaXRpb246IHRoZSByZXN1bHRpbmcgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQKLSAqCi0gKiBUcmFuc2xhdGUgQHJ1bm5pbmdfdGltZSB0byB0aGUgc2VnbWVudCBwb3NpdGlvbiB1c2luZyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKLSAqIHNlZ21lbnQuIENvbXBhcmVkIHRvIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lKCkgdGhpcyBmdW5jdGlvbiBjYW4KLSAqIHJldHVybiBuZWdhdGl2ZSBzZWdtZW50IHBvc2l0aW9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IHVzZWQgYnkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIHN5bmNocm9uaXplIGJ1ZmZlcnMKLSAqIGFnYWluc3QgdGhlIGNsb2NrIG9yIGVhY2ggb3RoZXIuCi0gKgotICogQHJ1bm5pbmdfdGltZSBjYW4gYmUgYW55IHZhbHVlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZm9yIHZhbHVlcwotICogb3V0c2lkZSBvZiB0aGUgc2VnbWVudCBpcyBleHRyYXBvbGF0ZWQuCi0gKgotICogV2hlbiAxIGlzIHJldHVybmVkLCBAcnVubmluZ190aW1lIHJlc3VsdGVkIGluIGEgcG9zaXRpdmUgcG9zaXRpb24gcmV0dXJuZWQKLSAqIGluIEBwb3NpdGlvbi4KLSAqCi0gKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMSwgdGhlIHJldHVybmVkIEBwb3NpdGlvbiBzaG91bGQgYmUgbmVnYXRlZAotICogdG8gZ2V0IHRoZSByZWFsIG5lZ2F0aXZlIHNlZ21lbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogYSAxIG9yIC0xIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLWdpbnQKLWdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lX2Z1bGwgKGNvbnN0IEdzdFNlZ21lbnQgKiBzZWdtZW50LAotICAgIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgcnVubmluZ190aW1lLCBndWludDY0ICogcG9zaXRpb24pCi17Ci0gIGdpbnQgcmVzOwotICBndWludDY0IHN0YXJ0LCBzdG9wLCBiYXNlOwotICBnZG91YmxlIGFic19yYXRlOwotCi0gIGlmIChHX1VOTElLRUxZIChydW5uaW5nX3RpbWUgPT0gLTEpKSB7Ci0gICAgKnBvc2l0aW9uID0gLTE7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudCAhPSBOVUxMLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQtPmZvcm1hdCA9PSBmb3JtYXQsIDApOwotCi0gIGJhc2UgPSBzZWdtZW50LT5iYXNlOwotCi0gIGFic19yYXRlID0gQUJTIChzZWdtZW50LT5yYXRlKTsKLQotICBzdGFydCA9IHNlZ21lbnQtPnN0YXJ0OwotICBzdG9wID0gc2VnbWVudC0+c3RvcDsKLQotICBpZiAoR19MSUtFTFkgKHNlZ21lbnQtPnJhdGUgPiAwLjApKSB7Ci0gICAgLyogc3RhcnQgYnkgc3VidHJhY3RpbmcgdGhlIGJhc2UgdGltZSAqLwotICAgIGlmIChHX0xJS0VMWSAocnVubmluZ190aW1lID49IGJhc2UpKSB7Ci0gICAgICAqcG9zaXRpb24gPSBydW5uaW5nX3RpbWUgLSBiYXNlOwotICAgICAgLyogbW92ZSBpbnRvIHRoZSBzZWdtZW50IGF0IHRoZSByaWdodCByYXRlICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAoYWJzX3JhdGUgIT0gMS4wKSkKLSAgICAgICAgKnBvc2l0aW9uID0gY2VpbCAoKnBvc2l0aW9uICogYWJzX3JhdGUpOwotICAgICAgLyogYnJpbmcgdG8gY29ycmVjdGVkIHBvc2l0aW9uIGluIHNlZ21lbnQgKi8KLSAgICAgICpwb3NpdGlvbiArPSBzdGFydCArIHNlZ21lbnQtPm9mZnNldDsKLSAgICAgIHJlcyA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICpwb3NpdGlvbiA9IGJhc2UgLSBydW5uaW5nX3RpbWU7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoYWJzX3JhdGUgIT0gMS4wKSkKLSAgICAgICAgKnBvc2l0aW9uID0gY2VpbCAoKnBvc2l0aW9uICogYWJzX3JhdGUpOwotICAgICAgaWYgKHN0YXJ0ICsgc2VnbWVudC0+b2Zmc2V0ID4gKnBvc2l0aW9uKSB7Ci0gICAgICAgICpwb3NpdGlvbiAtPSBzdGFydCArIHNlZ21lbnQtPm9mZnNldDsKLSAgICAgICAgcmVzID0gLTE7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAqcG9zaXRpb24gPSBzdGFydCArIHNlZ21lbnQtPm9mZnNldCAtICpwb3NpdGlvbjsKLSAgICAgICAgcmVzID0gMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKEdfTElLRUxZIChydW5uaW5nX3RpbWUgPj0gYmFzZSkpIHsKLSAgICAgICpwb3NpdGlvbiA9IHJ1bm5pbmdfdGltZSAtIGJhc2U7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoYWJzX3JhdGUgIT0gMS4wKSkKLSAgICAgICAgKnBvc2l0aW9uID0gY2VpbCAoKnBvc2l0aW9uICogYWJzX3JhdGUpOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKHN0b3AgPCAqcG9zaXRpb24gKyBzZWdtZW50LT5vZmZzZXQpKSB7Ci0gICAgICAgICpwb3NpdGlvbiArPSBzZWdtZW50LT5vZmZzZXQgLSBzdG9wOwotICAgICAgICByZXMgPSAtMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpwb3NpdGlvbiA9IHN0b3AgLSAqcG9zaXRpb24gLSBzZWdtZW50LT5vZmZzZXQ7Ci0gICAgICAgIHJlcyA9IDE7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICpwb3NpdGlvbiA9IGJhc2UgLSBydW5uaW5nX3RpbWU7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoYWJzX3JhdGUgIT0gMS4wKSkKLSAgICAgICAgKnBvc2l0aW9uID0gY2VpbCAoKnBvc2l0aW9uICogYWJzX3JhdGUpOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKHN0b3AgPCBzZWdtZW50LT5vZmZzZXQgLSAqcG9zaXRpb24pKSB7Ci0gICAgICAgICpwb3NpdGlvbiAtPSBzZWdtZW50LT5vZmZzZXQgLSBzdG9wOwotICAgICAgICByZXMgPSAtMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpwb3NpdGlvbiA9IHN0b3AgKyAqcG9zaXRpb24gLSBzZWdtZW50LT5vZmZzZXQ7Ci0gICAgICAgIHJlcyA9IDE7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb246Ci0gKiBAc2VnbWVudDogYSAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCi0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LgotICogQHJ1bm5pbmdfdGltZTogdGhlIHJ1bm5pbmdfdGltZSBpbiB0aGUgc2VnbWVudAotICoKLSAqIENvbnZlcnQgQHJ1bm5pbmdfdGltZSBpbnRvIGEgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgc28gdGhhdAotICogZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKCkgd2l0aCB0aGF0IHBvc2l0aW9uIHJldHVybnMgQHJ1bm5pbmdfdGltZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcG9zaXRpb24gaW4gdGhlIHNlZ21lbnQgZm9yIEBydW5uaW5nX3RpbWUuIFRoaXMgZnVuY3Rpb24gcmV0dXJucwotICogLTEgd2hlbiBAcnVubmluZ190aW1lIGlzIC0xIG9yIHdoZW4gaXQgaXMgbm90IGluc2lkZSBAc2VnbWVudC4KLSAqCi0gKiBEZXByZWNhdGVkLiBVc2UgZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWUoKSBpbnN0ZWFkLgotICovCi0jaWZuZGVmIEdTVF9SRU1PVkVfREVQUkVDQVRFRAotI2lmZGVmIEdTVF9ESVNBQkxFX0RFUFJFQ0FURUQKLWd1aW50NjQgZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKGNvbnN0IEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIGd1aW50NjQgcnVubmluZ190aW1lKTsKLSNlbmRpZgotZ3VpbnQ2NAotZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gKGNvbnN0IEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIGd1aW50NjQgcnVubmluZ190aW1lKQotewotICByZXR1cm4gZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWUgKHNlZ21lbnQsIGZvcm1hdCwgcnVubmluZ190aW1lKTsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWU6Ci0gKiBAc2VnbWVudDogYSAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCi0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LgotICogQHJ1bm5pbmdfdGltZTogdGhlIHJ1bm5pbmdfdGltZSBpbiB0aGUgc2VnbWVudAotICoKLSAqIEFkanVzdCB0aGUgc3RhcnQvc3RvcCBhbmQgYmFzZSB2YWx1ZXMgb2YgQHNlZ21lbnQgc3VjaCB0aGF0IHRoZSBuZXh0IHZhbGlkCi0gKiBidWZmZXIgd2lsbCBiZSBvbmUgd2l0aCBAcnVubmluZ190aW1lLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzZWdtZW50IGNvdWxkIGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LiBJZiAlRkFMU0UgaXMKLSAqIHJldHVybmVkLCBAcnVubmluZ190aW1lIGlzIC0xIG9yIG5vdCBpbiBAc2VnbWVudC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUgKEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIGd1aW50NjQgcnVubmluZ190aW1lKQotewotICBndWludDY0IHBvc2l0aW9uOwotICBndWludDY0IHN0YXJ0LCBzdG9wOwotCi0gIC8qIHN0YXJ0IGJ5IGJyaW5naW5nIHRoZSBydW5uaW5nX3RpbWUgaW50byB0aGUgc2VnbWVudCBwb3NpdGlvbiAqLwotICBwb3NpdGlvbiA9Ci0gICAgICBnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZSAoc2VnbWVudCwgZm9ybWF0LCBydW5uaW5nX3RpbWUpOwotCi0gIC8qIHdlIG11c3QgaGF2ZSBhIHZhbGlkIHBvc2l0aW9uIG5vdyAqLwotICBpZiAoR19VTkxJS0VMWSAocG9zaXRpb24gPT0gLTEpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBzdGFydCA9IHNlZ21lbnQtPnN0YXJ0OwotICBzdG9wID0gc2VnbWVudC0+c3RvcDsKLQotICBpZiAoR19MSUtFTFkgKHNlZ21lbnQtPnJhdGUgPiAwLjApKSB7Ci0gICAgLyogdXBkYXRlIHRoZSBzdGFydCBhbmQgdGltZSB2YWx1ZXMgKi8KLSAgICBzdGFydCA9IHBvc2l0aW9uOwotICB9IGVsc2UgewotICAgIC8qIHJldmVyc2UsIHVwZGF0ZSBzdG9wICovCi0gICAgc3RvcCA9IHBvc2l0aW9uOwotICB9Ci0gIC8qIGFuZCBiYXNlIHRpbWUgaXMgZXhhY3RseSB0aGUgcnVubmluZyB0aW1lICovCi0gIHNlZ21lbnQtPnRpbWUgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoc2VnbWVudCwgZm9ybWF0LCBzdGFydCk7Ci0gIHNlZ21lbnQtPnN0YXJ0ID0gc3RhcnQ7Ci0gIHNlZ21lbnQtPnN0b3AgPSBzdG9wOwotICBzZWdtZW50LT5iYXNlID0gcnVubmluZ190aW1lOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zZWdtZW50X29mZnNldF9ydW5uaW5nX3RpbWU6Ci0gKiBAc2VnbWVudDogYSAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCi0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50LgotICogQG9mZnNldDogdGhlIG9mZnNldCB0byBhcHBseSBpbiB0aGUgc2VnbWVudAotICoKLSAqIEFkanVzdCB0aGUgdmFsdWVzIGluIEBzZWdtZW50IHNvIHRoYXQgQG9mZnNldCBpcyBhcHBsaWVkIHRvIGFsbAotICogZnV0dXJlIHJ1bm5pbmctdGltZSBjYWxjdWxhdGlvbnMuCi0gKgotICogU2luY2U6IDEuMi4zCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHNlZ21lbnQgY291bGQgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkuIElmICVGQUxTRSBpcwotICogcmV0dXJuZWQsIEBvZmZzZXQgaXMgbm90IGluIEBzZWdtZW50LgotICovCi1nYm9vbGVhbgotZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSAoR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ2ludDY0IG9mZnNldCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlZ21lbnQgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudC0+Zm9ybWF0ID09IGZvcm1hdCwgRkFMU0UpOwotCi0gIGlmIChvZmZzZXQgPT0gMCkKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAob2Zmc2V0ID4gMCkgewotICAgIC8qIHBvc2l0aXZlIG9mZnNldCwgd2UgY2FuIHNpbXBseSBhcHBseSB0byB0aGUgYmFzZSB0aW1lICovCi0gICAgc2VnbWVudC0+YmFzZSArPSBvZmZzZXQ7Ci0gIH0gZWxzZSB7Ci0gICAgb2Zmc2V0ID0gLW9mZnNldDsKLSAgICAvKiBuZWdhdGl2ZSBvZmZzZXQsIGZpcnN0IHRyeSB0byBzdWJ0cmFjdCBmcm9tIGJhc2UgKi8KLSAgICBpZiAoc2VnbWVudC0+YmFzZSA+IG9mZnNldCkgewotICAgICAgc2VnbWVudC0+YmFzZSAtPSBvZmZzZXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGd1aW50NjQgcG9zaXRpb247Ci0KLSAgICAgIC8qIHN1YnRyYWN0IGFsbCBmcm9tIHNlZ21lbnQuYmFzZSwgcmVtYWluZGVyIGluIG9mZnNldCAqLwotICAgICAgb2Zmc2V0IC09IHNlZ21lbnQtPmJhc2U7Ci0gICAgICBzZWdtZW50LT5iYXNlID0gMDsKLSAgICAgIHBvc2l0aW9uID0KLSAgICAgICAgICBnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZSAoc2VnbWVudCwgZm9ybWF0LCBvZmZzZXQpOwotICAgICAgaWYgKHBvc2l0aW9uID09IC0xKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgIHNlZ21lbnQtPm9mZnNldCA9IHBvc2l0aW9uIC0gc2VnbWVudC0+c3RhcnQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zZWdtZW50X2lzX2VxdWFsOgotICogQHMwOiBhICNHc3RTZWdtZW50IHN0cnVjdHVyZS4KLSAqIEBzMTogYSAjR3N0U2VnbWVudCBzdHJ1Y3R1cmUuCi0gKgotICogQ2hlY2tzIGZvciB0d28gc2VnbWVudHMgYmVpbmcgZXF1YWwuIEVxdWFsaXR5IGhlcmUgaXMgZGVmaW5lZAotICogYXMgcGVyZmVjdCBlcXVhbGl0eSwgaW5jbHVkaW5nIGZsb2F0aW5nIHBvaW50IHZhbHVlcy4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHNlZ21lbnRzIGFyZSBlcXVhbCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zZWdtZW50X2lzX2VxdWFsIChjb25zdCBHc3RTZWdtZW50ICogczAsIGNvbnN0IEdzdFNlZ21lbnQgKiBzMSkKLXsKLSAgaWYgKHMwLT5mbGFncyAhPSBzMS0+ZmxhZ3MpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoczAtPnJhdGUgIT0gczEtPnJhdGUpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoczAtPmFwcGxpZWRfcmF0ZSAhPSBzMS0+YXBwbGllZF9yYXRlKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHMwLT5mb3JtYXQgIT0gczEtPmZvcm1hdCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChzMC0+YmFzZSAhPSBzMS0+YmFzZSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChzMC0+b2Zmc2V0ICE9IHMxLT5vZmZzZXQpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoczAtPnN0YXJ0ICE9IHMxLT5zdGFydCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChzMC0+c3RvcCAhPSBzMS0+c3RvcCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChzMC0+dGltZSAhPSBzMS0+dGltZSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChzMC0+cG9zaXRpb24gIT0gczEtPnBvc2l0aW9uKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHMwLT5kdXJhdGlvbiAhPSBzMS0+ZHVyYXRpb24pCi0gICAgcmV0dXJuIEZBTFNFOwotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RzZWdtZW50LmggYi9nc3QvZ3N0c2VnbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmNmZDRhLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RzZWdtZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RzZWdtZW50Lmg6IEhlYWRlciBmb3IgR3N0U2VnbWVudCBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfU0VHTUVOVF9IX18KLSNkZWZpbmUgX19HU1RfU0VHTUVOVF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3Rmb3JtYXQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1NFR01FTlQgICAgICAgICAgICAgKGdzdF9zZWdtZW50X2dldF90eXBlKCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTZWdtZW50IEdzdFNlZ21lbnQ7Ci0KLS8qKgotICogR3N0U2Vla1R5cGU6Ci0gKiBAR1NUX1NFRUtfVFlQRV9OT05FOiBubyBjaGFuZ2UgaW4gcG9zaXRpb24gaXMgcmVxdWlyZWQKLSAqIEBHU1RfU0VFS19UWVBFX1NFVDogYWJzb2x1dGUgcG9zaXRpb24gaXMgcmVxdWVzdGVkCi0gKiBAR1NUX1NFRUtfVFlQRV9FTkQ6IHJlbGF0aXZlIHBvc2l0aW9uIHRvIGR1cmF0aW9uIGlzIHJlcXVlc3RlZAotICoKLSAqIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VlayBldmVudHMuIFdoZW4gY29uc3RydWN0aW5nIGEgc2VlayBldmVudCB3aXRoCi0gKiBnc3RfZXZlbnRfbmV3X3NlZWsoKSBvciB3aGVuIGRvaW5nIGdzdF9zZWdtZW50X2RvX3NlZWsgKCkuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIC8qIG9uZSBvZiB0aGVzZSAqLwotICBHU1RfU0VFS19UWVBFX05PTkUgICAgICAgICAgICA9IDAsCi0gIEdTVF9TRUVLX1RZUEVfU0VUICAgICAgICAgICAgID0gMSwKLSAgR1NUX1NFRUtfVFlQRV9FTkQgICAgICAgICAgICAgPSAyCi19IEdzdFNlZWtUeXBlOwotCi0vKioKLSAqIEdzdFNlZWtGbGFnczoKLSAqIEBHU1RfU0VFS19GTEFHX05PTkU6IG5vIGZsYWcKLSAqIEBHU1RfU0VFS19GTEFHX0ZMVVNIOiBmbHVzaCBwaXBlbGluZQotICogQEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEU6IGFjY3VyYXRlIHBvc2l0aW9uIGlzIHJlcXVlc3RlZCwgdGhpcyBtaWdodAotICogICAgICAgICAgICAgICAgICAgICBiZSBjb25zaWRlcmFibHkgc2xvd2VyIGZvciBzb21lIGZvcm1hdHMuCi0gKiBAR1NUX1NFRUtfRkxBR19LRVlfVU5JVDogc2VlayB0byB0aGUgbmVhcmVzdCBrZXlmcmFtZS4gVGhpcyBtaWdodCBiZQotICogICAgICAgICAgICAgICAgICAgICBmYXN0ZXIgYnV0IGxlc3MgYWNjdXJhdGUuCi0gKiBAR1NUX1NFRUtfRkxBR19TRUdNRU5UOiBwZXJmb3JtIGEgc2VnbWVudCBzZWVrLgotICogQEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFOiB3aGVuIGRvaW5nIGZhc3QgZm9yd2FyZCBvciBmYXN0IHJldmVyc2UgcGxheWJhY2ssIGFsbG93Ci0gKiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIHRvIHNraXAgZnJhbWVzIGluc3RlYWQgb2YgZ2VuZXJhdGluZyBhbGwKLSAqICAgICAgICAgICAgICAgICAgICAgZnJhbWVzLiAoU2luY2UgMS42KQotICogQEdTVF9TRUVLX0ZMQUdfU05BUF9CRUZPUkU6IGdvIHRvIGEgbG9jYXRpb24gYmVmb3JlIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24sCi0gKiAgICAgICAgICAgICAgICAgICAgIGlmICVHU1RfU0VFS19GTEFHX0tFWV9VTklUIHRoaXMgbWVhbnMgdGhlIGtleWZyYW1lIGF0IG9yIGJlZm9yZQotICogICAgICAgICAgICAgICAgICAgICB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHRoZSBvbmUgYXQgb3IgYmVmb3JlIHRoZSBzZWVrIHRhcmdldC4KLSAqIEBHU1RfU0VFS19GTEFHX1NOQVBfQUZURVI6IGdvIHRvIGEgbG9jYXRpb24gYWZ0ZXIgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiwKLSAqICAgICAgICAgICAgICAgICAgICAgaWYgJUdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQgdGhpcyBtZWFucyB0aGUga2V5ZnJhbWUgYXQgb2YgYWZ0ZXIgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZCBwb3NpdGlvbi4KLSAqIEBHU1RfU0VFS19GTEFHX1NOQVBfTkVBUkVTVDogZ28gdG8gYSBwb3NpdGlvbiBuZWFyIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24sCi0gKiAgICAgICAgICAgICAgICAgICAgIGlmICVHU1RfU0VFS19GTEFHX0tFWV9VTklUIHRoaXMgbWVhbnMgdGhlIGtleWZyYW1lIGNsb3Nlc3QKLSAqICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiwgaWYgYm90aCBrZXlmcmFtZXMgYXJlIGF0IGFuIGVxdWFsCi0gKiAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlLCBiZWhhdmVzIGxpa2UgJUdTVF9TRUVLX0ZMQUdfU05BUF9CRUZPUkUuCi0gKiBAR1NUX1NFRUtfRkxBR19UUklDS01PREVfS0VZX1VOSVRTOiB3aGVuIGRvaW5nIGZhc3QgZm9yd2FyZCBvciBmYXN0IHJldmVyc2UKLSAqICAgICAgICAgICAgICAgICAgICAgcGxheWJhY2ssIHJlcXVlc3QgdGhhdCBlbGVtZW50cyBvbmx5IGRlY29kZSBrZXlmcmFtZXMKLSAqICAgICAgICAgICAgICAgICAgICAgYW5kIHNraXAgYWxsIG90aGVyIGNvbnRlbnQsIGZvciBmb3JtYXRzIHRoYXQgaGF2ZQotICogICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZXMuIChTaW5jZSAxLjYpCi0gKiBAR1NUX1NFRUtfRkxBR19UUklDS01PREVfTk9fQVVESU86IHdoZW4gZG9pbmcgZmFzdCBmb3J3YXJkIG9yIGZhc3QgcmV2ZXJzZQotICogICAgICAgICAgICAgICAgICAgICBwbGF5YmFjaywgcmVxdWVzdCB0aGF0IGF1ZGlvIGRlY29kZXIgZWxlbWVudHMgc2tpcAotICogICAgICAgICAgICAgICAgICAgICBkZWNvZGluZyBhbmQgb3V0cHV0IG9ubHkgZ2FwIGV2ZW50cyBvciBzaWxlbmNlLiAoU2luY2UgMS42KQotICogQEdTVF9TRUVLX0ZMQUdfU0tJUDogRGVwcmVjYXRlZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZsYWcsIHJlcGxhY2VkCi0gKiAgICAgICAgICAgICAgICAgICAgIGJ5ICVHU1RfU0VFS19GTEFHX1RSSUNLTU9ERQotICoKLSAqIEZsYWdzIHRvIGJlIHVzZWQgd2l0aCBnc3RfZWxlbWVudF9zZWVrKCkgb3IgZ3N0X2V2ZW50X25ld19zZWVrKCkuIEFsbCBmbGFncwotICogY2FuIGJlIHVzZWQgdG9nZXRoZXIuCi0gKgotICogQSBub24gZmx1c2hpbmcgc2VlayBtaWdodCB0YWtlIHNvbWUgdGltZSB0byBwZXJmb3JtIGFzIHRoZSBjdXJyZW50bHkKLSAqIHBsYXlpbmcgZGF0YSBpbiB0aGUgcGlwZWxpbmUgd2lsbCBub3QgYmUgY2xlYXJlZC4KLSAqCi0gKiBBbiBhY2N1cmF0ZSBzZWVrIG1pZ2h0IGJlIHNsb3dlciBmb3IgZm9ybWF0cyB0aGF0IGRvbid0IGhhdmUgYW55IGluZGV4ZXMKLSAqIG9yIHRpbWVzdGFtcCBtYXJrZXJzIGluIHRoZSBzdHJlYW0uIFNwZWNpZnlpbmcgdGhpcyBmbGFnIG1pZ2h0IHJlcXVpcmUgYQotICogY29tcGxldGUgc2NhbiBvZiB0aGUgZmlsZSBpbiB0aG9zZSBjYXNlcy4KLSAqCi0gKiBXaGVuIHBlcmZvcm1pbmcgYSBzZWdtZW50IHNlZWs6IGFmdGVyIHRoZSBwbGF5YmFjayBvZiB0aGUgc2VnbWVudCBjb21wbGV0ZXMsCi0gKiBubyBFT1Mgd2lsbCBiZSBlbWl0dGVkIGJ5IHRoZSBlbGVtZW50IHRoYXQgcGVyZm9ybWVkIHRoZSBzZWVrLCBidXQgYQotICogJUdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSBtZXNzYWdlIHdpbGwgYmUgcG9zdGVkIG9uIHRoZSBidXMgYnkgdGhlIGVsZW1lbnQuCi0gKiBXaGVuIHRoaXMgbWVzc2FnZSBpcyBwb3N0ZWQsIGl0IGlzIHBvc3NpYmxlIHRvIHNlbmQgYSBuZXcgc2VlayBldmVudCB0bwotICogY29udGludWUgcGxheWJhY2suIFdpdGggdGhpcyBzZWVrIG1ldGhvZCBpdCBpcyBwb3NzaWJsZSB0byBwZXJmb3JtIHNlYW1sZXNzCi0gKiBsb29waW5nIG9yIHNpbXBsZSBsaW5lYXIgZWRpdGluZy4KLSAqCi0gKiBXaGVuIGRvaW5nIGZhc3QgZm9yd2FyZCAocmF0ZSA+IDEuMCkgb3IgZmFzdCByZXZlcnNlIChyYXRlIDwgLTEuMCkgdHJpY2ttb2RlCi0gKiBwbGF5YmFjaywgdGhlICVHU1RfU0VFS19GTEFHX1RSSUNLTU9ERSBmbGFnIGNhbiBiZSB1c2VkIHRvIGluc3RydWN0IGRlY29kZXJzCi0gKiBhbmQgZGVtdXhlcnMgdG8gYWRqdXN0IHRoZSBwbGF5YmFjayByYXRlIGJ5IHNraXBwaW5nIGZyYW1lcy4gVGhpcyBjYW4gaW1wcm92ZQotICogcGVyZm9ybWFuY2UgYW5kIGRlY3JlYXNlIENQVSB1c2FnZSBiZWNhdXNlIG5vdCBhbGwgZnJhbWVzIG5lZWQgdG8gYmUgZGVjb2RlZC4KLSAqCi0gKiBCZXlvbmQgdGhhdCwgdGhlICVHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFMgZmxhZyBjYW4gYmUgdXNlZCB0bwotICogcmVxdWVzdCB0aGF0IGRlY29kZXJzIHNraXAgYWxsIGZyYW1lcyBleGNlcHQga2V5IHVuaXRzLCBhbmQKLSAqICVHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9OT19BVURJTyBmbGFncyBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IHRoYXQgYXVkaW8KLSAqIGRlY29kZXJzIGRvIG5vIGRlY29kaW5nIGF0IGFsbCwgYW5kIHNpbXBsZSBvdXRwdXQgc2lsZW5jZS4KLSAqCi0gKiBUaGUgJUdTVF9TRUVLX0ZMQUdfU05BUF9CRUZPUkUgZmxhZyBjYW4gYmUgdXNlZCB0byBzbmFwIHRvIHRoZSBwcmV2aW91cwotICogcmVsZXZhbnQgbG9jYXRpb24sIGFuZCB0aGUgJUdTVF9TRUVLX0ZMQUdfU05BUF9BRlRFUiBmbGFnIGNhbiBiZSB1c2VkIHRvCi0gKiBzZWxlY3QgdGhlIG5leHQgcmVsZXZhbnQgbG9jYXRpb24uIElmICVHU1RfU0VFS19GTEFHX0tFWV9VTklUIGlzIHNwZWNpZmllZCwKLSAqIHRoZSByZWxldmFudCBsb2NhdGlvbiBpcyBhIGtleWZyYW1lLiBJZiBib3RoIGZsYWdzIGFyZSBzcGVjaWZpZWQsIHRoZSBuZWFyZXN0Ci0gKiBvZiB0aGVzZSBsb2NhdGlvbnMgd2lsbCBiZSBzZWxlY3RlZC4gSWYgbm9uZSBhcmUgc3BlY2lmaWVkLCB0aGUgaW1wbGVtZW50YXRpb24gaXMKLSAqIGZyZWUgdG8gc2VsZWN0IHdoaWNoZXZlciBpdCB3YW50cy4KLSAqCi0gKiBUaGUgYmVmb3JlIGFuZCBhZnRlciBoZXJlIGFyZSBpbiBydW5uaW5nIHRpbWUsIHNvIHdoZW4gcGxheWluZyBiYWNrd2FyZHMsCi0gKiB0aGUgbmV4dCBsb2NhdGlvbiByZWZlcnMgdG8gdGhlIG9uZSB0aGF0IHdpbGwgcGxheWVkIGluIG5leHQsIGFuZCBub3QgdGhlCi0gKiBvbmUgdGhhdCBpcyBsb2NhdGVkIGFmdGVyIGluIHRoZSBhY3R1YWwgc291cmNlIHN0cmVhbS4KLSAqCi0gKiBBbHNvIHNlZSBwYXJ0LXNlZWtpbmcudHh0IGluIHRoZSBHU3RyZWFtZXIgZGVzaWduIGRvY3VtZW50YXRpb24gZm9yIG1vcmUKLSAqIGRldGFpbHMgb24gdGhlIG1lYW5pbmcgb2YgdGhlc2UgZmxhZ3MgYW5kIHRoZSBiZWhhdmlvdXIgZXhwZWN0ZWQgb2YKLSAqIGVsZW1lbnRzIHRoYXQgaGFuZGxlIHRoZW0uCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9TRUVLX0ZMQUdfTk9ORSAgICAgICAgICAgID0gMCwKLSAgR1NUX1NFRUtfRkxBR19GTFVTSCAgICAgICAgICAgPSAoMSA8PCAwKSwKLSAgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSAgICAgICAgPSAoMSA8PCAxKSwKLSAgR1NUX1NFRUtfRkxBR19LRVlfVU5JVCAgICAgICAgPSAoMSA8PCAyKSwKLSAgR1NUX1NFRUtfRkxBR19TRUdNRU5UICAgICAgICAgPSAoMSA8PCAzKSwKLSAgR1NUX1NFRUtfRkxBR19UUklDS01PREUgICAgICAgPSAoMSA8PCA0KSwKLSAgLyogRklYTUUgMi4wOiBSZW1vdmUgX1NLSVAgZmxhZywKLSAgICogd2hpY2ggd2FzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdCB3aGVuIF9UUklDS01PREUgd2FzIGFkZGVkICovCi0gIEdTVF9TRUVLX0ZMQUdfU0tJUCAgICAgICAgICAgID0gKDEgPDwgNCksCi0gIEdTVF9TRUVLX0ZMQUdfU05BUF9CRUZPUkUgICAgID0gKDEgPDwgNSksCi0gIEdTVF9TRUVLX0ZMQUdfU05BUF9BRlRFUiAgICAgID0gKDEgPDwgNiksCi0gIEdTVF9TRUVLX0ZMQUdfU05BUF9ORUFSRVNUICAgID0gR1NUX1NFRUtfRkxBR19TTkFQX0JFRk9SRSB8IEdTVF9TRUVLX0ZMQUdfU05BUF9BRlRFUiwKLSAgLyogQ2FyZWZ1bCB0byByZXN0YXJ0IG5leHQgZmxhZyB3aXRoIDE8PDcgaGVyZSAqLwotICBHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFMgPSAoMSA8PCA3KSwKLSAgR1NUX1NFRUtfRkxBR19UUklDS01PREVfTk9fQVVESU8gID0gKDEgPDwgOCksCi19IEdzdFNlZWtGbGFnczsKLQotLyoqCi0gKiBHc3RTZWdtZW50RmxhZ3M6Ci0gKiBAR1NUX1NFR01FTlRfRkxBR19OT05FOiBubyBmbGFncwotICogQEdTVF9TRUdNRU5UX0ZMQUdfUkVTRVQ6IHJlc2V0IHRoZSBwaXBlbGluZSBydW5uaW5nX3RpbWUgdG8gdGhlIHNlZ21lbnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nX3RpbWUKLSAqIEBHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERTogcGVyZm9ybSBza2lwIHBsYXliYWNrIChTaW5jZSAxLjYpCi0gKiBAR1NUX1NFR01FTlRfRkxBR19TRUdNRU5UOiBzZW5kIFNFR01FTlRfRE9ORSBpbnN0ZWFkIG9mIEVPUwotICogQEdTVF9TRUdNRU5UX0ZMQUdfVFJJQ0tNT0RFX0tFWV9VTklUUzogRGVjb2RlIG9ubHkga2V5ZnJhbWVzLCB3aGVyZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUgKFNpbmNlIDEuNikKLSAqIEBHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERV9OT19BVURJTzogRG8gbm90IGRlY29kZSBhbnkgYXVkaW8sIHdoZXJlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSAoU2luY2UgMS42KQotICogQEdTVF9TRUdNRU5UX0ZMQUdfU0tJUDogRGVwcmVjYXRlZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZsYWcsIHJlcGxhY2VkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBieSBAR1NUX1NFR01FTlRfRkxBR19UUklDS01PREUKLSAqCi0gKiBGbGFncyBmb3IgdGhlIEdzdFNlZ21lbnQgc3RydWN0dXJlLiBDdXJyZW50bHkgbWFwcGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nCi0gKiB2YWx1ZXMgb2YgdGhlIHNlZWsgZmxhZ3MuCi0gKi8KLS8qIE5vdGU6IHVwZGF0ZSBnc3Rfc2VnbWVudF9kb19zZWVrKCkgd2hlbiBhZGRpbmcgbmV3IGZsYWdzIGhlcmUgKi8KLXR5cGVkZWYgZW51bSB7IC8qPCBmbGFncyA+Ki8KLSAgR1NUX1NFR01FTlRfRkxBR19OT05FICAgICAgICAgICAgPSBHU1RfU0VFS19GTEFHX05PTkUsCi0gIEdTVF9TRUdNRU5UX0ZMQUdfUkVTRVQgICAgICAgICAgID0gR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgR1NUX1NFR01FTlRfRkxBR19UUklDS01PREUgICAgICAgPSBHU1RfU0VFS19GTEFHX1RSSUNLTU9ERSwKLSAgLyogRklYTUUgMi4wOiBSZW1vdmUgX1NLSVAgZmxhZywKLSAgICogd2hpY2ggd2FzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdCB3aGVuIF9UUklDS01PREUgd2FzIGFkZGVkICovCi0gIEdTVF9TRUdNRU5UX0ZMQUdfU0tJUCAgICAgICAgICAgID0gR1NUX1NFRUtfRkxBR19UUklDS01PREUsCi0gIEdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVCAgICAgICAgID0gR1NUX1NFRUtfRkxBR19TRUdNRU5ULAotICBHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFMgPSBHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFMsCi0gIEdTVF9TRUdNRU5UX0ZMQUdfVFJJQ0tNT0RFX05PX0FVRElPICAgICAgPSBHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9OT19BVURJTwotfSBHc3RTZWdtZW50RmxhZ3M7Ci0KLS8qKgotICogR3N0U2VnbWVudDoKLSAqIEBmbGFnczogZmxhZ3MgZm9yIHRoaXMgc2VnbWVudAotICogQHJhdGU6IHRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBzZWdtZW50Ci0gKiBAYXBwbGllZF9yYXRlOiB0aGUgYWxyZWFkeSBhcHBsaWVkIHJhdGUgdG8gdGhlIHNlZ21lbnQKLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHNlZ21lbnQgdmFsdWVzCi0gKiBAYmFzZTogdGhlIHJ1bm5pbmcgdGltZSAocGx1cyBlbGFwc2VkIHRpbWUsIHNlZSBvZmZzZXQpIG9mIHRoZSBzZWdtZW50IHN0YXJ0Ci0gKiBAb2Zmc2V0OiB0aGUgYW1vdW50IChpbiBidWZmZXIgdGltZXN0YW1wcykgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGVsYXBzZWQgaW4KLSAqICAgICB0aGUgc2VnbWVudAotICogQHN0YXJ0OiB0aGUgc3RhcnQgb2YgdGhlIHNlZ21lbnQgaW4gYnVmZmVyIHRpbWVzdGFtcCB0aW1lIChQVFMpCi0gKiBAc3RvcDogdGhlIHN0b3Agb2YgdGhlIHNlZ21lbnQgaW4gYnVmZmVyIHRpbWVzdGFtcCB0aW1lIChQVFMpCi0gKiBAdGltZTogdGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBzZWdtZW50IHN0YXJ0Ci0gKiBAcG9zaXRpb246IHRoZSBidWZmZXIgdGltZXN0YW1wIHBvc2l0aW9uIGluIHRoZSBzZWdtZW50ICh1c2VkIGludGVybmFsbHkgYnkKLSAqICAgICBlbGVtZW50cyBzdWNoIGFzIHNvdXJjZXMsIGRlbXV4ZXJzIG9yIHBhcnNlcnMgdG8gdHJhY2sgcHJvZ3Jlc3MpCi0gKiBAZHVyYXRpb246IHRoZSBkdXJhdGlvbiBvZiB0aGUgc2VnbWVudAotICoKLSAqIEEgaGVscGVyIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBjb25maWd1cmVkIHJlZ2lvbiBvZgotICogaW50ZXJlc3QgaW4gYSBtZWRpYSBmaWxlLgotICovCi1zdHJ1Y3QgX0dzdFNlZ21lbnQgewotICAvKjwgcHVibGljID4qLwotICBHc3RTZWdtZW50RmxhZ3MgZmxhZ3M7Ci0KLSAgZ2RvdWJsZSAgICAgICAgIHJhdGU7Ci0gIGdkb3VibGUgICAgICAgICBhcHBsaWVkX3JhdGU7Ci0KLSAgR3N0Rm9ybWF0ICAgICAgIGZvcm1hdDsKLSAgZ3VpbnQ2NCAgICAgICAgIGJhc2U7Ci0gIGd1aW50NjQgICAgICAgICBvZmZzZXQ7Ci0gIGd1aW50NjQgICAgICAgICBzdGFydDsKLSAgZ3VpbnQ2NCAgICAgICAgIHN0b3A7Ci0gIGd1aW50NjQgICAgICAgICB0aW1lOwotCi0gIGd1aW50NjQgICAgICAgICBwb3NpdGlvbjsKLSAgZ3VpbnQ2NCAgICAgICAgIGR1cmF0aW9uOwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIGdwb2ludGVyICAgICAgICBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlICAgICAgICBnc3Rfc2VnbWVudF9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKLQotR3N0U2VnbWVudCAqIGdzdF9zZWdtZW50X25ldyAgICAgICAgICAgICAgICAgKHZvaWQpIEdfR05VQ19NQUxMT0M7Ci1Hc3RTZWdtZW50ICogZ3N0X3NlZ21lbnRfY29weSAgICAgICAgICAgICAgICAoY29uc3QgR3N0U2VnbWVudCAqc2VnbWVudCkgR19HTlVDX01BTExPQzsKLXZvaWQgICAgICAgICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gICAgICAgICAgIChjb25zdCBHc3RTZWdtZW50ICpzcmMsIEdzdFNlZ21lbnQgKmRlc3QpOwotdm9pZCAgICAgICAgIGdzdF9zZWdtZW50X2ZyZWUgICAgICAgICAgICAgICAgKEdzdFNlZ21lbnQgKnNlZ21lbnQpOwotCi12b2lkICAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAgICAgICAgICAgICAgICAoR3N0U2VnbWVudCAqc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCk7Ci0KLWdpbnQgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxsIChjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50LCBHc3RGb3JtYXQgZm9ybWF0LCBndWludDY0IHBvc2l0aW9uLCBndWludDY0ICogc3RyZWFtX3RpbWUpOwotZ3VpbnQ2NCAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICAgICAgKGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgcG9zaXRpb24pOwotZ2ludCAgICAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbCAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgc3RyZWFtX3RpbWUsIGd1aW50NjQgKiBwb3NpdGlvbik7Ci1ndWludDY0ICAgICAgZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZSAoY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgc3RyZWFtX3RpbWUpOwotZ3VpbnQ2NCAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAgICAgKGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgcG9zaXRpb24pOwotCi1naW50ICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lX2Z1bGwgKGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKiBydW5uaW5nX3RpbWUpOwotI2lmbmRlZiBHU1RfRElTQUJMRV9ERVBSRUNBVEVECi1ndWludDY0ICAgICAgZ3N0X3NlZ21lbnRfdG9fcG9zaXRpb24gICAgICAgICAoY29uc3QgR3N0U2VnbWVudCAqc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ3VpbnQ2NCBydW5uaW5nX3RpbWUpOwotI2VuZGlmCi1naW50ICAgICAgICAgZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWVfZnVsbCAoY29uc3QgR3N0U2VnbWVudCAqc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ3VpbnQ2NCBydW5uaW5nX3RpbWUsIGd1aW50NjQgKiBwb3NpdGlvbik7Ci1ndWludDY0ICAgICAgZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWUgKGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgcnVubmluZ190aW1lKTsKLQotZ2Jvb2xlYW4gICAgIGdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUgICAgKEdzdFNlZ21lbnQgKnNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgcnVubmluZ190aW1lKTsKLQotZ2Jvb2xlYW4gICAgIGdzdF9zZWdtZW50X29mZnNldF9ydW5uaW5nX3RpbWUgKEdzdFNlZ21lbnQgKnNlZ21lbnQsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBvZmZzZXQpOwotCi1nYm9vbGVhbiAgICAgZ3N0X3NlZ21lbnRfY2xpcCAgICAgICAgICAgICAgICAoY29uc3QgR3N0U2VnbWVudCAqc2VnbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ3VpbnQ2NCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0IHN0b3AsIGd1aW50NjQgKmNsaXBfc3RhcnQsIGd1aW50NjQgKmNsaXBfc3RvcCk7Ci0KLQotZ2Jvb2xlYW4gICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgICAgICAgICAgICAgKEdzdFNlZ21lbnQgKiBzZWdtZW50LCBnZG91YmxlIHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgR3N0U2Vla0ZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUsIGd1aW50NjQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2Vla1R5cGUgc3RvcF90eXBlLCBndWludDY0IHN0b3AsIGdib29sZWFuICogdXBkYXRlKTsKLWdib29sZWFuICAgICBnc3Rfc2VnbWVudF9pc19lcXVhbCAgICAgICAgICAgIChjb25zdCBHc3RTZWdtZW50ICogczAsIGNvbnN0IEdzdFNlZ21lbnQgKiBzMSk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0U2VnbWVudCwgZ3N0X3NlZ21lbnRfZnJlZSkKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfU0VHTUVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RzdHJlYW1jb2xsZWN0aW9uLmMgYi9nc3QvZ3N0c3RyZWFtY29sbGVjdGlvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTg0OGRlLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RzdHJlYW1jb2xsZWN0aW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE1IENlbnRyaWN1bGFyIEx0ZAotICogIEBhdXRob3I6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0gKiAgQGF1dGhvcjogSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0gKgotICogZ3N0c3RyZWFtcy5jOiBHc3RTdHJlYW1Db2xsZWN0aW9uIG9iamVjdCBhbmQgbWV0aG9kcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHN0cmVhbWNvbGxlY3Rpb24KLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQmFzZSBjbGFzcyBmb3IgY29sbGVjdGlvbiBvZiBzdHJlYW1zCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdGVudW10eXBlcy5oIgotI2luY2x1ZGUgImdzdGV2ZW50LmgiCi0jaW5jbHVkZSAiZ3N0c3RyZWFtY29sbGVjdGlvbi5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChzdHJlYW1fY29sbGVjdGlvbl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBzdHJlYW1fY29sbGVjdGlvbl9kZWJ1ZwotCi0jZGVmaW5lIEdTVF9TVFJFQU1fQ09MTEVDVElPTl9HRVRfUFJJVkFURShvYmopICBcCi0gICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfU1RSRUFNX0NPTExFQ1RJT04sIEdzdFN0cmVhbUNvbGxlY3Rpb25Qcml2YXRlKSkKLQotc3RydWN0IF9Hc3RTdHJlYW1Db2xsZWN0aW9uUHJpdmF0ZQotewotICAvKiBNYXliZSBzd2l0Y2ggdGhpcyB0byBhIEdBcnJheSBpZiBwZXJmb3JtYW5jZSBpcwotICAgKiBldmVyIGFuIGlzc3VlPyAqLwotICBHUXVldWUgKnN0cmVhbXM7Ci19OwotCi0vKiBzdHJlYW0gc2lnbmFscyBhbmQgcHJvcGVydGllcyAqLwotZW51bQotewotICBTSUdfU1RSRUFNX05PVElGWSwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1VQU1RSRUFNX0lELAotICBQUk9QX0xBU1QKLX07Ci0KLXN0YXRpYyBndWludCBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotc3RhdGljIHZvaWQgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIHZvaWQKLXByb3h5X3N0cmVhbV9ub3RpZnlfY2IgKEdzdFN0cmVhbSAqIHN0cmVhbSwgR1BhcmFtU3BlYyAqIHBzcGVjLAotICAgIEdzdFN0cmVhbUNvbGxlY3Rpb24gKiBjb2xsZWN0aW9uKTsKLQotI2RlZmluZSBfZG9faW5pdAkJCQlcCi17IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHN0cmVhbV9jb2xsZWN0aW9uX2RlYnVnLCAic3RyZWFtY29sbGVjdGlvbiIsIEdTVF9ERUJVR19CT0xELCBcCi0gICAgICAiZGVidWdnaW5nIGluZm8gZm9yIHRoZSBzdHJlYW0gY29sbGVjdGlvbiBvYmplY3RzIik7IFwKLSAgXAotfQotCi0jZGVmaW5lIGdzdF9zdHJlYW1fY29sbGVjdGlvbl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0U3RyZWFtQ29sbGVjdGlvbiwgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uLAotICAgIEdTVF9UWVBFX09CSkVDVCwgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2NsYXNzX2luaXQgKEdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RTdHJlYW1Db2xsZWN0aW9uUHJpdmF0ZSkpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfcHJvcGVydHk7Ci0KLSAgLyoqCi0gICAqIEdzdFN0cmVhbTp1cHN0cmVhbS1pZDoKLSAgICoKLSAgICogc3RyZWFtLWlkCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VQU1RSRUFNX0lELAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInVwc3RyZWFtLWlkIiwgIlVwc3RyZWFtIElEIiwKLSAgICAgICAgICAiVGhlIHN0cmVhbSBJRCBvZiB0aGUgcGFyZW50IHN0cmVhbSIsCi0gICAgICAgICAgTlVMTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RTdHJlYW06OnN0cmVhbS1ub3RpZnk6Ci0gICAqIEBjb2xsZWN0aW9uOiBhICNHc3RTdHJlYW1Db2xsZWN0aW9uCi0gICAqIEBwcm9wX3N0cmVhbTogdGhlICNHc3RTdHJlYW0gdGhhdCBvcmlnaW5hdGVkIHRoZSBzaWduYWwKLSAgICogQHByb3A6IHRoZSBwcm9wZXJ0eSB0aGF0IGNoYW5nZWQKLSAgICoKLSAgICogVGhlIHN0cmVhbSBub3RpZnkgc2lnbmFsIGlzIHVzZWQgdG8gYmUgbm90aWZpZWQgb2YgcHJvcGVydHkgY2hhbmdlcyB0bwotICAgKiBzdHJlYW1zIHdpdGhpbiB0aGUgY29sbGVjdGlvbi4KLSAgICovCi0gIGdzdF9zdHJlYW1fY29sbGVjdGlvbl9zaWduYWxzW1NJR19TVFJFQU1fTk9USUZZXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJzdHJlYW0tbm90aWZ5IiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9GSVJTVCB8IEdfU0lHTkFMX05PX1JFQ1VSU0UgfCBHX1NJR05BTF9ERVRBSUxFRCB8Ci0gICAgICBHX1NJR05BTF9OT19IT09LUywgR19TVFJVQ1RfT0ZGU0VUIChHc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3MsCi0gICAgICAgICAgc3RyZWFtX25vdGlmeSksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwKLSAgICAgIDIsIEdTVF9UWVBFX1NUUkVBTSwgR19UWVBFX1BBUkFNKTsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2Rpc3Bvc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtX2NvbGxlY3Rpb25faW5pdCAoR3N0U3RyZWFtQ29sbGVjdGlvbiAqIGNvbGxlY3Rpb24pCi17Ci0gIGNvbGxlY3Rpb24tPnByaXYgPSBHU1RfU1RSRUFNX0NPTExFQ1RJT05fR0VUX1BSSVZBVEUgKGNvbGxlY3Rpb24pOwotICBjb2xsZWN0aW9uLT5wcml2LT5zdHJlYW1zID0gZ19xdWV1ZV9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZWxlYXNlX2dzdF9zdHJlYW0gKEdzdFN0cmVhbSAqIHN0cmVhbSwgR3N0U3RyZWFtQ29sbGVjdGlvbiAqIGNvbGxlY3Rpb24pCi17Ci0gIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAoc3RyZWFtLAotICAgICAgcHJveHlfc3RyZWFtX25vdGlmeV9jYiwgY29sbGVjdGlvbik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHN0cmVhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0U3RyZWFtQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IEdTVF9TVFJFQU1fQ09MTEVDVElPTl9DQVNUIChvYmplY3QpOwotCi0gIGlmIChjb2xsZWN0aW9uLT51cHN0cmVhbV9pZCkgewotICAgIGdfZnJlZSAoY29sbGVjdGlvbi0+dXBzdHJlYW1faWQpOwotICAgIGNvbGxlY3Rpb24tPnVwc3RyZWFtX2lkID0gTlVMTDsKLSAgfQotCi0gIGlmIChjb2xsZWN0aW9uLT5wcml2LT5zdHJlYW1zKSB7Ci0gICAgZ19xdWV1ZV9mb3JlYWNoIChjb2xsZWN0aW9uLT5wcml2LT5zdHJlYW1zLAotICAgICAgICAoR0Z1bmMpIHJlbGVhc2VfZ3N0X3N0cmVhbSwgY29sbGVjdGlvbik7Ci0gICAgZ19xdWV1ZV9mcmVlIChjb2xsZWN0aW9uLT5wcml2LT5zdHJlYW1zKTsKLSAgICBjb2xsZWN0aW9uLT5wcml2LT5zdHJlYW1zID0gTlVMTDsKLSAgfQotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi0vKioKLSAqIGdzdF9zdHJlYW1fY29sbGVjdGlvbl9uZXc6Ci0gKiBAdXBzdHJlYW1faWQ6IChhbGxvdy1ub25lKTogVGhlIHN0cmVhbSBpZCBvZiB0aGUgcGFyZW50IHN0cmVhbQotICoKLSAqIENyZWF0ZSBhIG5ldyAjR3N0U3RyZWFtQ29sbGVjdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgbmV3ICNHc3RTdHJlYW1Db2xsZWN0aW9uLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLUdzdFN0cmVhbUNvbGxlY3Rpb24gKgotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ldyAoY29uc3QgZ2NoYXIgKiB1cHN0cmVhbV9pZCkKLXsKLSAgcmV0dXJuIGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfU1RSRUFNX0NPTExFQ1RJT04sICJ1cHN0cmVhbS1pZCIsIHVwc3RyZWFtX2lkLAotICAgICAgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fc2V0X3Vwc3RyZWFtX2lkIChHc3RTdHJlYW1Db2xsZWN0aW9uICogY29sbGVjdGlvbiwKLSAgICBjb25zdCBnY2hhciAqIHVwc3RyZWFtX2lkKQotewotICBnX3JldHVybl9pZl9mYWlsIChjb2xsZWN0aW9uLT51cHN0cmVhbV9pZCA9PSBOVUxMKTsKLQotICAvKiBVcHN0cmVhbSBJRCBzaG91bGQgb25seSBiZSBzZXQgb25jZSBvbiBjb25zdHJ1Y3Rpb24sIGJ1dCBsZXQncwotICAgKiBub3QgbGVhayBpbiBjYXNlIHNvbWVvbmUgZG9lcyBzb21ldGhpbmcgc2lsbHkgKi8KLSAgaWYgKGNvbGxlY3Rpb24tPnVwc3RyZWFtX2lkKQotICAgIGdfZnJlZSAoY29sbGVjdGlvbi0+dXBzdHJlYW1faWQpOwotCi0gIGlmICh1cHN0cmVhbV9pZCkKLSAgICBjb2xsZWN0aW9uLT51cHN0cmVhbV9pZCA9IGdfc3RyZHVwICh1cHN0cmVhbV9pZCk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF91cHN0cmVhbV9pZDoKLSAqIEBjb2xsZWN0aW9uOiBhICNHc3RTdHJlYW1Db2xsZWN0aW9uCi0gKgotICogUmV0dXJucyB0aGUgdXBzdHJlYW0gaWQgb2YgdGhlIEBjb2xsZWN0aW9uLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogVGhlIHVwc3RyZWFtIGlkCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF91cHN0cmVhbV9pZCAoR3N0U3RyZWFtQ29sbGVjdGlvbiAqIGNvbGxlY3Rpb24pCi17Ci0gIGNvbnN0IGdjaGFyICpyZXM7Ci0KLSAgcmVzID0gY29sbGVjdGlvbi0+dXBzdHJlYW1faWQ7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdHJlYW1fY29sbGVjdGlvbl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U3RyZWFtQ29sbGVjdGlvbiAqY29sbGVjdGlvbjsKLQotICBjb2xsZWN0aW9uID0gR1NUX1NUUkVBTV9DT0xMRUNUSU9OX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1VQU1RSRUFNX0lEOgotICAgICAgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX3NldF91cHN0cmVhbV9pZCAoY29sbGVjdGlvbiwKLSAgICAgICAgICBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFN0cmVhbUNvbGxlY3Rpb24gKmNvbGxlY3Rpb247Ci0KLSAgY29sbGVjdGlvbiA9IEdTVF9TVFJFQU1fQ09MTEVDVElPTl9DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9VUFNUUkVBTV9JRDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsCi0gICAgICAgICAgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF91cHN0cmVhbV9pZCAoY29sbGVjdGlvbikpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcHJveHlfc3RyZWFtX25vdGlmeV9jYiAoR3N0U3RyZWFtICogc3RyZWFtLCBHUGFyYW1TcGVjICogcHNwZWMsCi0gICAgR3N0U3RyZWFtQ29sbGVjdGlvbiAqIGNvbGxlY3Rpb24pCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGNvbGxlY3Rpb24sICJTdHJlYW0gJSIgR1NUX1BUUl9GT1JNQVQgIiB1cGRhdGVkICVzIiwKLSAgICAgIHN0cmVhbSwgcHNwZWMtPm5hbWUpOwotICBnX3NpZ25hbF9lbWl0IChjb2xsZWN0aW9uLCBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fc2lnbmFsc1tTSUdfU1RSRUFNX05PVElGWV0sCi0gICAgICBnX3F1YXJrX2Zyb21fc3RyaW5nIChwc3BlYy0+bmFtZSksIHN0cmVhbSwgcHNwZWMpOwotfQotCi0vKioKLSAqIGdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtOgotICogQGNvbGxlY3Rpb246IGEgI0dzdFN0cmVhbUNvbGxlY3Rpb24KLSAqIEBzdHJlYW06ICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RTdHJlYW0gdG8gYWRkCi0gKgotICogQWRkIHRoZSBnaXZlbiBAc3RyZWFtIHRvIHRoZSBAY29sbGVjdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgQHN0cmVhbSB3YXMgcHJvcGVybHkgYWRkZWQsIGVsc2UgJUZBTFNFCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtIChHc3RTdHJlYW1Db2xsZWN0aW9uICogY29sbGVjdGlvbiwKLSAgICBHc3RTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSRUFNX0NPTExFQ1RJT04gKGNvbGxlY3Rpb24pLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSRUFNIChzdHJlYW0pLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb2xsZWN0aW9uLT5wcml2LT5zdHJlYW1zLCBGQUxTRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoY29sbGVjdGlvbiwgIkFkZGluZyBzdHJlYW0gJSIgR1NUX1BUUl9GT1JNQVQsIHN0cmVhbSk7Ci0KLSAgZ19xdWV1ZV9wdXNoX3RhaWwgKGNvbGxlY3Rpb24tPnByaXYtPnN0cmVhbXMsIHN0cmVhbSk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHN0cmVhbSwgIm5vdGlmeSIsIChHQ2FsbGJhY2spIHByb3h5X3N0cmVhbV9ub3RpZnlfY2IsCi0gICAgICBjb2xsZWN0aW9uKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemU6Ci0gKiBAY29sbGVjdGlvbjogYSAjR3N0U3RyZWFtQ29sbGVjdGlvbgotICoKLSAqIEdldCB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgdGhpcyBjb2xsZWN0aW9uIGNvbnRhaW5zCi0gKgotICogUmV0dXJuczogVGhlIG51bWJlciBvZiBzdHJlYW1zIHRoYXQgQGNvbGxlY3Rpb24gY29udGFpbnMKLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1ndWludAotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplIChHc3RTdHJlYW1Db2xsZWN0aW9uICogY29sbGVjdGlvbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJFQU1fQ09MTEVDVElPTiAoY29sbGVjdGlvbiksIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29sbGVjdGlvbi0+cHJpdi0+c3RyZWFtcywgMCk7Ci0KLSAgcmV0dXJuIGdfcXVldWVfZ2V0X2xlbmd0aCAoY29sbGVjdGlvbi0+cHJpdi0+c3RyZWFtcyk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW06Ci0gKiBAY29sbGVjdGlvbjogYSAjR3N0U3RyZWFtQ29sbGVjdGlvbgotICogQGluZGV4OiBJbmRleCBvZiB0aGUgc3RyZWFtIHRvIHJldHJpZXZlCi0gKgotICogUmV0cmlldmUgdGhlICNHc3RTdHJlYW0gd2l0aCBpbmRleCBAaW5kZXggZnJvbSB0aGUgY29sbGVjdGlvbi4KLSAqCi0gKiBUaGUgY2FsbGVyIHNob3VsZCBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCAjR3N0U3RyZWFtCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNHc3RTdHJlYW0KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1Hc3RTdHJlYW0gKgotZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0gKEdzdFN0cmVhbUNvbGxlY3Rpb24gKiBjb2xsZWN0aW9uLCBndWludCBpbmRleCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJFQU1fQ09MTEVDVElPTiAoY29sbGVjdGlvbiksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29sbGVjdGlvbi0+cHJpdi0+c3RyZWFtcywgTlVMTCk7Ci0KLSAgcmV0dXJuIGdfcXVldWVfcGVla19udGggKGNvbGxlY3Rpb24tPnByaXYtPnN0cmVhbXMsIGluZGV4KTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RzdHJlYW1jb2xsZWN0aW9uLmggYi9nc3QvZ3N0c3RyZWFtY29sbGVjdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTczNGJkLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3RzdHJlYW1jb2xsZWN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ2VudHJpY3VsYXIgTHRkCi0gKiAgQGF1dGhvcjogRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLSAqICBAYXV0aG9yOiBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBnc3RzdHJlYW1zLmggOiBIZWFkZXIgZm9yIEdzdFN0cmVhbUNvbGxlY3Rpb24gc3Vic3lzdGVtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1NUUkVBTV9DT0xMRUNUSU9OX0hfXwotI2RlZmluZSBfX0dTVF9TVFJFQU1fQ09MTEVDVElPTl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3RvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0c3RyZWFtcy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfU1RSRUFNX0NPTExFQ1RJT04gICAgICAgICAgICAgKGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0lTX1NUUkVBTV9DT0xMRUNUSU9OKG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfU1RSRUFNX0NPTExFQ1RJT04pKQotI2RlZmluZSBHU1RfSVNfU1RSRUFNX0NPTExFQ1RJT05fQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1NUUkVBTV9DT0xMRUNUSU9OKSkKLSNkZWZpbmUgR1NUX1NUUkVBTV9DT0xMRUNUSU9OX0dFVF9DTEFTUyhvYmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9TVFJFQU1fQ09MTEVDVElPTiwgR3N0U3RyZWFtQ29sbGVjdGlvbkNsYXNzKSkKLSNkZWZpbmUgR1NUX1NUUkVBTV9DT0xMRUNUSU9OKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfU1RSRUFNX0NPTExFQ1RJT04sIEdzdFN0cmVhbUNvbGxlY3Rpb24pKQotI2RlZmluZSBHU1RfU1RSRUFNX0NPTExFQ1RJT05fQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1NUUkVBTV9DT0xMRUNUSU9OLCBHc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3MpKQotI2RlZmluZSBHU1RfU1RSRUFNX0NPTExFQ1RJT05fQ0FTVChvYmopICAgICAgICAoKEdzdFN0cmVhbUNvbGxlY3Rpb24qKShvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtQ29sbGVjdGlvbiBHc3RTdHJlYW1Db2xsZWN0aW9uOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbUNvbGxlY3Rpb25DbGFzcyBHc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtQ29sbGVjdGlvblByaXZhdGUgR3N0U3RyZWFtQ29sbGVjdGlvblByaXZhdGU7Ci0KLS8qKgotICogR3N0U3RyZWFtQ29sbGVjdGlvbjoKLSAqCi0gKiBBIGNvbGxlY3Rpb24gb2YgI0dzdFN0cmVhbSB0aGF0IGFyZSBhdmFpbGFibGUuCi0gKgotICogQSAjR3N0U3RyZWFtQ29sbGVjdGlvbiB3aWxsIGJlIHByb3ZpZGVkIGJ5IGVsZW1lbnRzIHRoYXQgY2FuIG1ha2UgdGhvc2UKLSAqIHN0cmVhbXMgYXZhaWxhYmxlLiBBcHBsaWNhdGlvbnMgY2FuIHVzZSB0aGUgY29sbGVjdGlvbiB0byBzaG93IHRoZSB1c2VyCi0gKiB3aGF0IHN0cmVhbXMgYXJlIGF2YWlsYWJsZSBieSB1c2luZyAlZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0oKQotICoKLSAqIE9uY2UgcG9zdGVkLCBhICNHc3RTdHJlYW1Db2xsZWN0aW9uIGlzIGltbXV0YWJsZS4gVXBkYXRlcyBhcmUgbWFkZSBieSBzZW5kaW5nCi0gKiBhIG5ldyAjR3N0U3RyZWFtQ29sbGVjdGlvbiBtZXNzYWdlLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBzaGFyZSBzb21lIG9mCi0gKiB0aGUgI0dzdFN0cmVhbSBvYmplY3RzIGZyb20gdGhlIGNvbGxlY3Rpb24gaXQgcmVwbGFjZXMuIFRoZSByZWNlaXZlciBjYW4gY2hlY2sKLSAqIHRoZSBzZW5kZXIgb2YgYSBzdHJlYW0gY29sbGVjdGlvbiBtZXNzYWdlIHRvIGtub3cgd2hpY2ggY29sbGVjdGlvbiBpcwotICogb2Jzb2xldGVkLgotICoKLSAqIFNldmVyYWwgZWxlbWVudHMgaW4gYSBwaXBlbGluZSBjYW4gcHJvdmlkZSAjR3N0U3RyZWFtQ29sbGVjdGlvbi4KLSAqCi0gKiBBcHBsaWNhdGlvbnMgY2FuIGFjdGl2YXRlIHN0cmVhbXMgZnJvbSBhIGNvbGxlY3Rpb24gYnkgdXNpbmcgdGhlCi0gKiAjR1NUX0VWRU5UX1NFTEVDVF9TVFJFQU1TIGV2ZW50IG9uIGEgcGlwZWxpbmUsIGJpbiBvciBlbGVtZW50LgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLXN0cnVjdCBfR3N0U3RyZWFtQ29sbGVjdGlvbiB7Ci0gIEdzdE9iamVjdCBvYmplY3Q7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdjaGFyICp1cHN0cmVhbV9pZDsKLSAgR3N0U3RyZWFtQ29sbGVjdGlvblByaXZhdGUgKnByaXY7Ci0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0vKioKLSAqIEdzdFN0cmVhbUNvbGxlY3Rpb25DbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IHRoZSBwYXJlbnQgY2xhc3Mgc3RydWN0dXJlCi0gKiBAc3RyZWFtX25vdGlmeTogZGVmYXVsdCBzaWduYWwgaGFuZGxlciBmb3IgdGhlIHN0cmVhbS1ub3RpZnkgc2lnbmFsCi0gKgotICogR3N0U3RyZWFtQ29sbGVjdGlvbiBjbGFzcyBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IF9Hc3RTdHJlYW1Db2xsZWN0aW9uQ2xhc3MgewotICBHc3RPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyAqLwotICB2b2lkICAoKnN0cmVhbV9ub3RpZnkpICAgICAgKEdzdFN0cmVhbUNvbGxlY3Rpb24gKmNvbGxlY3Rpb24sIEdzdFN0cmVhbSAqc3RyZWFtLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlIGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdzdFN0cmVhbUNvbGxlY3Rpb24gKmdzdF9zdHJlYW1fY29sbGVjdGlvbl9uZXcgKGNvbnN0IGdjaGFyICp1cHN0cmVhbV9pZCk7Ci0KLWNvbnN0IGdjaGFyICpnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Vwc3RyZWFtX2lkIChHc3RTdHJlYW1Db2xsZWN0aW9uICpjb2xsZWN0aW9uKTsKLQotZ3VpbnQgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplIChHc3RTdHJlYW1Db2xsZWN0aW9uICpjb2xsZWN0aW9uKTsKLUdzdFN0cmVhbSAqZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0gKEdzdFN0cmVhbUNvbGxlY3Rpb24gKmNvbGxlY3Rpb24sIGd1aW50IGluZGV4KTsKLQotZ2Jvb2xlYW4gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0gKEdzdFN0cmVhbUNvbGxlY3Rpb24gKmNvbGxlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RyZWFtICpzdHJlYW0pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfU1RSRUFNX0NPTExFQ1RJT05fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0c3RyZWFtcy5jIGIvZ3N0L2dzdHN0cmVhbXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3NDFkOC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0c3RyZWFtcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQ0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBDZW50cmljdWxhciBMdGQKLSAqICBAYXV0aG9yOiBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotICogIEBhdXRob3I6IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIGdzdHN0cmVhbXMuYzogR3N0U3RyZWFtIGFuZCBHc3RTdHJlYW1Db2xsZWN0aW9uIG9iamVjdCBhbmQgbWV0aG9kcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHN0cmVhbXMKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQmFzZSBjbGFzcyBmb3Igc3RyZWFtIG9iamVjdHMKLSAqCi0gKiBBICNHc3RTdHJlYW0gaXMgYSBoaWdoLWxldmVsIG9iamVjdCBkZWZpbmluZyBhIHN0cmVhbSBvZiBkYXRhIHdoaWNoIGlzLCBvcgotICogY2FuIGJlLCBwcmVzZW50IGluIGEgI0dzdFBpcGVsaW5lLgotICoKLSAqIEl0IGlzIGRlZmluZWQgYnkgYSB1bmlxdWUgaWRlbnRpZmllciwgYSAiU3RyZWFtIElEIi4gQSAjR3N0U3RyZWFtIGRvZXMgbm90Ci0gKiBhdXRvbWF0aWNhbGx5IGltcGx5IHRoZSBzdHJlYW0gaXMgcHJlc2VudCB3aXRoaW4gYSBwaXBlbGluZSBvciBlbGVtZW50LgotICoKLSAqIEFueSBlbGVtZW50IHRoYXQgY2FuIGludHJvZHVjZSBuZXcgc3RyZWFtcyBpbiBhIHBpcGVsaW5lIHNob3VsZCBjcmVhdGUgdGhlCi0gKiBhcHByb3ByaWF0ZSAjR3N0U3RyZWFtIG9iamVjdCwgYW5kIGNhbiBjb252ZXkgdGhhdCBvYmplY3QgdmlhIHRoZQotICogJUdTVF9FVkVOVF9TVFJFQU1fU1RBUlQgZXZlbnQgYW5kL29yIHRoZSAjR3N0U3RyZWFtQ29sbGVjdGlvbi4KLSAqCi0gKiBFbGVtZW50cyB0aGF0IGRvIG5vdCBtb2RpZnkgdGhlIG5hdHVyZSBvZiB0aGUgc3RyZWFtIGNhbiBhZGQgZXh0cmEgaW5mb3JtYXRpb24KLSAqIG9uIGl0IChzdWNoIGFzIGVucmljaCB0aGUgI0dzdENhcHMsIG9yICNHc3RUYWdMaXN0KS4gVGhpcyBpcyB0eXBpY2FsbHkgZG9uZQotICogYnkgcGFyc2luZyBlbGVtZW50cy4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCi0jaW5jbHVkZSAiZ3N0ZXZlbnQuaCIKLSNpbmNsdWRlICJnc3RzdHJlYW1zLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHN0cmVhbXNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgc3RyZWFtc19kZWJ1ZwotCi0jZGVmaW5lIEdTVF9TVFJFQU1fR0VUX1BSSVZBVEUob2JqKSAgXAotICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX1NUUkVBTSwgR3N0U3RyZWFtUHJpdmF0ZSkpCi0KLXN0cnVjdCBfR3N0U3RyZWFtUHJpdmF0ZQotewotICBHc3RTdHJlYW1GbGFncyBmbGFnczsKLSAgR3N0U3RyZWFtVHlwZSB0eXBlOwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBHc3RDYXBzICpjYXBzOwotfTsKLQotLyogc3RyZWFtIHNpZ25hbHMgYW5kIHByb3BlcnRpZXMgKi8KLWVudW0KLXsKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NUUkVBTV9JRCwKLSAgUFJPUF9TVFJFQU1fRkxBR1MsCi0gIFBST1BfU1RSRUFNX1RZUEUsCi0gIFBST1BfVEFHUywKLSAgUFJPUF9DQVBTLAotICBQUk9QX0xBU1QKLX07Ci0KLXN0YXRpYyBHUGFyYW1TcGVjICpnc3Rfc3RyZWFtX3BzcGVjc1tQUk9QX0xBU1RdID0geyAwIH07Ci0KLSNpZiAwCi1zdGF0aWMgZ3VpbnQgZ3N0X3N0cmVhbV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGdzdF9zdHJlYW1fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3Rfc3RyZWFtX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9zdHJlYW1fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi0jZGVmaW5lIF9kb19pbml0CQkJCVwKLXsgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoc3RyZWFtc19kZWJ1ZywgInN0cmVhbXMiLCBHU1RfREVCVUdfQk9MRCwgXAotICAgICAgImRlYnVnZ2luZyBpbmZvIGZvciB0aGUgc3RyZWFtIGFuZCBzdHJlYW0gY29sbGVjdGlvbiBvYmplY3RzIik7IFwKLSAgXAotfQotCi0jZGVmaW5lIGdzdF9zdHJlYW1fcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFN0cmVhbSwgZ3N0X3N0cmVhbSwgR1NUX1RZUEVfT0JKRUNULCBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtX2NsYXNzX2luaXQgKEdzdFN0cmVhbUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdFN0cmVhbVByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfc3RyZWFtX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3N0cmVhbV9nZXRfcHJvcGVydHk7Ci0KLSAgLyoqCi0gICAqIEdzdFN0cmVhbTpzdHJlYW0taWQ6Ci0gICAqCi0gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgI0dzdFN0cmVhbS4gQ2FuIG9ubHkgYmUgc2V0IGF0IGNvbnN0cnVjdGlvbgotICAgKiB0aW1lLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TVFJFQU1fSUQsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgic3RyZWFtLWlkIiwgIlN0cmVhbSBJRCIsCi0gICAgICAgICAgIlRoZSBzdHJlYW0gSUQgb2YgdGhlIHN0cmVhbSIsCi0gICAgICAgICAgTlVMTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFN0cmVhbTpmbGFnczoKLSAgICoKLSAgICogVGhlICNHc3RTdHJlYW1GbGFncyBvZiB0aGUgI0dzdFN0cmVhbS4gQ2FuIG9ubHkgYmUgc2V0IGF0IGNvbnN0cnVjdGlvbiB0aW1lLgotICAgKiovCi0gIGdzdF9zdHJlYW1fcHNwZWNzW1BST1BfU1RSRUFNX0ZMQUdTXSA9Ci0gICAgICBnX3BhcmFtX3NwZWNfZmxhZ3MgKCJzdHJlYW0tZmxhZ3MiLCAiU3RyZWFtIEZsYWdzIiwgIlRoZSBzdHJlYW0gZmxhZ3MiLAotICAgICAgR1NUX1RZUEVfU1RSRUFNX0ZMQUdTLCBHU1RfU1RSRUFNX0ZMQUdfTk9ORSwKLSAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TVFJFQU1fRkxBR1MsCi0gICAgICBnc3Rfc3RyZWFtX3BzcGVjc1tQUk9QX1NUUkVBTV9GTEFHU10pOwotCi0gIC8qKgotICAgKiBHc3RTdHJlYW06c3RyZWFtLXR5cGU6Ci0gICAqCi0gICAqIFRoZSAjR3N0U3RyZWFtVHlwZSBvZiB0aGUgI0dzdFN0cmVhbS4gQ2FuIG9ubHkgYmUgc2V0IGF0IGNvbnN0cnVjdGlvbiB0aW1lLgotICAgKiovCi0gIGdzdF9zdHJlYW1fcHNwZWNzW1BST1BfU1RSRUFNX1RZUEVdID0KLSAgICAgIGdfcGFyYW1fc3BlY19mbGFncyAoInN0cmVhbS10eXBlIiwgIlN0cmVhbSBUeXBlIiwgIlRoZSB0eXBlIG9mIHN0cmVhbSIsCi0gICAgICBHU1RfVFlQRV9TVFJFQU1fVFlQRSwgR1NUX1NUUkVBTV9UWVBFX1VOS05PV04sCi0gICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RSRUFNX1RZUEUsCi0gICAgICBnc3Rfc3RyZWFtX3BzcGVjc1tQUk9QX1NUUkVBTV9UWVBFXSk7Ci0KLSAgLyoqCi0gICAqIEdzdFN0cmVhbTpjYXBzOgotICAgKgotICAgKiBUaGUgI0dzdENhcHMgb2YgdGhlICNHc3RTdHJlYW0uCi0gICAqKi8KLSAgZ3N0X3N0cmVhbV9wc3BlY3NbUFJPUF9DQVBTXSA9Ci0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJjYXBzIiwgIkNhcHMiLCAiVGhlIGNhcHMgb2YgdGhlIHN0cmVhbSIsCi0gICAgICBHU1RfVFlQRV9DQVBTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NBUFMsCi0gICAgICBnc3Rfc3RyZWFtX3BzcGVjc1tQUk9QX0NBUFNdKTsKLQotICAvKioKLSAgICogR3N0U3RyZWFtOnRhZ3M6Ci0gICAqCi0gICAqIFRoZSAjR3N0VGFnTGlzdCBvZiB0aGUgI0dzdFN0cmVhbS4KLSAgICoqLwotICBnc3Rfc3RyZWFtX3BzcGVjc1tQUk9QX1RBR1NdID0KLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoInRhZ3MiLCAiVGFncyIsICJUaGUgdGFncyBvZiB0aGUgc3RyZWFtIiwKLSAgICAgIEdTVF9UWVBFX1RBR19MSVNULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RBR1MsCi0gICAgICBnc3Rfc3RyZWFtX3BzcGVjc1tQUk9QX1RBR1NdKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9zdHJlYW1fZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtX2luaXQgKEdzdFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgc3RyZWFtLT5wcml2ID0gR1NUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLSAgc3RyZWFtLT5wcml2LT50eXBlID0gR1NUX1NUUkVBTV9UWVBFX1VOS05PV047Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RTdHJlYW0gKnN0cmVhbSA9IEdTVF9TVFJFQU1fQ0FTVCAob2JqZWN0KTsKLQotICBnc3RfbWluaV9vYmplY3RfcmVwbGFjZSAoKEdzdE1pbmlPYmplY3QgKiopICYgc3RyZWFtLT5wcml2LT50YWdzLAotICAgICAgKEdzdE1pbmlPYmplY3QgKikgTlVMTCk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzdHJlYW0tPnByaXYtPmNhcHMsIE5VTEwpOwotICBnX2ZyZWUgKChnY2hhciAqKSBzdHJlYW0tPnN0cmVhbV9pZCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKioKLSAqIGdzdF9zdHJlYW1fbmV3OgotICogQHN0cmVhbV9pZDogKGFsbG93LW5vbmUpOiB0aGUgaWQgZm9yIHRoZSBuZXcgc3RyZWFtLiBJZiAlTlVMTCwKLSAqIGEgbmV3IG9uZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkCi0gKiBAY2FwczogKGFsbG93LW5vbmUpICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RDYXBzIG9mIHRoZSBzdHJlYW0KLSAqIEB0eXBlOiB0aGUgI0dzdFN0cmVhbVR5cGUgb2YgdGhlIHN0cmVhbQotICogQGZsYWdzOiB0aGUgI0dzdFN0cmVhbUZsYWdzIG9mIHRoZSBzdHJlYW0KLSAqCi0gKiBDcmVhdGUgYSBuZXcgI0dzdFN0cmVhbSBmb3IgdGhlIGdpdmVuIEBzdHJlYW1faWQsIEBjYXBzLCBAdHlwZQotICogYW5kIEBmbGFncwotICoKLSAqIFJldHVybnM6IFRoZSBuZXcgI0dzdFN0cmVhbQotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLUdzdFN0cmVhbSAqCi1nc3Rfc3RyZWFtX25ldyAoY29uc3QgZ2NoYXIgKiBzdHJlYW1faWQsIEdzdENhcHMgKiBjYXBzLCBHc3RTdHJlYW1UeXBlIHR5cGUsCi0gICAgR3N0U3RyZWFtRmxhZ3MgZmxhZ3MpCi17Ci0gIHJldHVybiBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1NUUkVBTSwgInN0cmVhbS1pZCIsIHN0cmVhbV9pZCwgImNhcHMiLCBjYXBzLAotICAgICAgInN0cmVhbS10eXBlIiwgdHlwZSwgInN0cmVhbS1mbGFncyIsIGZsYWdzLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdHJlYW1fc2V0X3N0cmVhbV9pZCAoR3N0U3RyZWFtICogc3RyZWFtLCBjb25zdCBnY2hhciAqIHN0cmVhbV9pZCkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChzdHJlYW0pOwotICBnX2Fzc2VydCAoc3RyZWFtLT5zdHJlYW1faWQgPT0gTlVMTCk7Ci0gIGlmIChzdHJlYW1faWQpCi0gICAgc3RyZWFtLT5zdHJlYW1faWQgPSBnX3N0cmR1cCAoc3RyZWFtX2lkKTsKLSAgZWxzZSB7Ci0gICAgLyogQ3JlYXRlIGEgcmFuZG9vbSBzdHJlYW1faWQgaWYgTlVMTCAqLwotICAgIEdTVF9GSVhNRV9PQkpFQ1QgKHN0cmVhbSwgIkNyZWF0aW5nIHJhbmRvbSBzdHJlYW0taWQsIGNvbnNpZGVyICIKLSAgICAgICAgImltcGxlbWVudGluZyBhIGRldGVybWluaXN0aWMgd2F5IG9mIGNyZWF0aW5nIGEgc3RyZWFtLWlkIik7Ci0gICAgc3RyZWFtLT5zdHJlYW1faWQgPQotICAgICAgICBnX3N0cmR1cF9wcmludGYgKCIlMDh4JTA4eCUwOHglMDh4IiwgZ19yYW5kb21faW50ICgpLCBnX3JhbmRvbV9pbnQgKCksCi0gICAgICAgIGdfcmFuZG9tX2ludCAoKSwgZ19yYW5kb21faW50ICgpKTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzdHJlYW0pOwotfQotCi0vKioKLSAqIGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZDoKLSAqIEBzdHJlYW06IGEgI0dzdFN0cmVhbQotICoKLSAqIFJldHVybnMgdGhlIHN0cmVhbSBJRCBvZiBAc3RyZWFtLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiB0aGUgc3RyZWFtIElEIG9mIEBzdHJlYW0uIE9ubHkgdmFsaWQKLSAqIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgQHN0cmVhbS4KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1jb25zdCBnY2hhciAqCi1nc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQgKEdzdFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgcmV0dXJuIHN0cmVhbS0+c3RyZWFtX2lkOwotfQotCi0vKioKLSAqIGdzdF9zdHJlYW1fc2V0X3N0cmVhbV9mbGFnczoKLSAqIEBzdHJlYW06IGEgI0dzdFN0cmVhbQotICogQGZsYWdzOiB0aGUgZmxhZ3MgdG8gc2V0IG9uIEBzdHJlYW0KLSAqCi0gKiBTZXQgdGhlIEBmbGFncyBmb3IgdGhlIEBzdHJlYW0uCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZAotZ3N0X3N0cmVhbV9zZXRfc3RyZWFtX2ZsYWdzIChHc3RTdHJlYW0gKiBzdHJlYW0sIEdzdFN0cmVhbUZsYWdzIGZsYWdzKQotewotICBHU1RfT0JKRUNUX0xPQ0sgKHN0cmVhbSk7Ci0gIHN0cmVhbS0+cHJpdi0+ZmxhZ3MgPSBmbGFnczsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHN0cmVhbSk7Ci0KLSAgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjIChHX09CSkVDVCAoc3RyZWFtKSwKLSAgICAgIGdzdF9zdHJlYW1fcHNwZWNzW1BST1BfU1RSRUFNX0ZMQUdTXSk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2ZsYWdzOgotICogQHN0cmVhbTogYSAjR3N0U3RyZWFtCi0gKgotICogUmV0cmlldmUgdGhlIGN1cnJlbnQgc3RyZWFtIGZsYWdzIGZvciBAc3RyZWFtCi0gKgotICogUmV0dXJuczogVGhlICNHc3RTdHJlYW1GbGFncyBmb3IgQHN0cmVhbQotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLUdzdFN0cmVhbUZsYWdzCi1nc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3MgKEdzdFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgR3N0U3RyZWFtRmxhZ3MgcmVzOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3RyZWFtKTsKLSAgcmVzID0gc3RyZWFtLT5wcml2LT5mbGFnczsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHN0cmVhbSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3Rfc3RyZWFtX3NldF9zdHJlYW1fdHlwZToKLSAqIEBzdHJlYW06IGEgI0dzdFN0cmVhbQotICogQHN0cmVhbV90eXBlOiB0aGUgdHlwZSB0byBzZXQgb24gQHN0cmVhbQotICoKLSAqIFNldCB0aGUgc3RyZWFtIHR5cGUgb2YgQHN0cmVhbQotICoKLSAqIFNpbmNlOiAxLjEwCi0gKi8KLXZvaWQKLWdzdF9zdHJlYW1fc2V0X3N0cmVhbV90eXBlIChHc3RTdHJlYW0gKiBzdHJlYW0sIEdzdFN0cmVhbVR5cGUgc3RyZWFtX3R5cGUpCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoc3RyZWFtKTsKLSAgc3RyZWFtLT5wcml2LT50eXBlID0gc3RyZWFtX3R5cGU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzdHJlYW0pOwotCi0gIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyAoR19PQkpFQ1QgKHN0cmVhbSksCi0gICAgICBnc3Rfc3RyZWFtX3BzcGVjc1tQUk9QX1NUUkVBTV9UWVBFXSk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGU6Ci0gKiBAc3RyZWFtOiBhICNHc3RTdHJlYW0KLSAqCi0gKiBSZXRyaWV2ZSB0aGUgc3RyZWFtIHR5cGUgZm9yIEBzdHJlYW0KLSAqCi0gKiBSZXR1cm5zOiBUaGUgI0dzdFN0cmVhbVR5cGUgZm9yIEBzdHJlYW0KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi1Hc3RTdHJlYW1UeXBlCi1nc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZSAoR3N0U3RyZWFtICogc3RyZWFtKQotewotICBHc3RTdHJlYW1UeXBlIHJlczsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHN0cmVhbSk7Ci0gIHJlcyA9IHN0cmVhbS0+cHJpdi0+dHlwZTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHN0cmVhbSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3Rfc3RyZWFtX3NldF90YWdzOgotICogQHN0cmVhbTogYSAjR3N0U3RyZWFtCi0gKiBAdGFnczogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogYSAjR3N0VGFnTGlzdAotICoKLSAqIFNldCB0aGUgdGFncyBmb3IgdGhlICNHc3RTdHJlYW0KLSAqCi0gKiBTaW5jZTogMS4xMAotICovCi12b2lkCi1nc3Rfc3RyZWFtX3NldF90YWdzIChHc3RTdHJlYW0gKiBzdHJlYW0sIEdzdFRhZ0xpc3QgKiB0YWdzKQotewotICBnYm9vbGVhbiBub3RpZnkgPSBGQUxTRTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHN0cmVhbSk7Ci0gIGlmIChzdHJlYW0tPnByaXYtPnRhZ3MgPT0gTlVMTCB8fCB0YWdzID09IE5VTEwKLSAgICAgIHx8ICFnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKHN0cmVhbS0+cHJpdi0+dGFncywgdGFncykpIHsKLSAgICBnc3RfbWluaV9vYmplY3RfcmVwbGFjZSAoKEdzdE1pbmlPYmplY3QgKiopICYgc3RyZWFtLT5wcml2LT50YWdzLAotICAgICAgICAoR3N0TWluaU9iamVjdCAqKSB0YWdzKTsKLSAgICBub3RpZnkgPSBUUlVFOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzdHJlYW0pOwotCi0gIGlmIChub3RpZnkpCi0gICAgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjIChHX09CSkVDVCAoc3RyZWFtKSwgZ3N0X3N0cmVhbV9wc3BlY3NbUFJPUF9UQUdTXSk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cmVhbV9nZXRfdGFnczoKLSAqIEBzdHJlYW06IGEgI0dzdFN0cmVhbQotICoKLSAqIFJldHJpZXZlIHRoZSB0YWdzIGZvciBAc3RyZWFtLCBpZiBhbnkKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogVGhlICNHc3RUYWdMaXN0IGZvciBAc3RyZWFtCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0VGFnTGlzdCAqCi1nc3Rfc3RyZWFtX2dldF90YWdzIChHc3RTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIEdzdFRhZ0xpc3QgKnJlcyA9IE5VTEw7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzdHJlYW0pOwotICBpZiAoc3RyZWFtLT5wcml2LT50YWdzKQotICAgIHJlcyA9IGdzdF90YWdfbGlzdF9yZWYgKHN0cmVhbS0+cHJpdi0+dGFncyk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzdHJlYW0pOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X3N0cmVhbV9zZXRfY2FwczoKLSAqIEBzdHJlYW06IGEgI0dzdFN0cmVhbQotICogQGNhcHM6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IGEgI0dzdENhcHMKLSAqCi0gKiBTZXQgdGhlIGNhcHMgZm9yIHRoZSAjR3N0U3RyZWFtCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotdm9pZAotZ3N0X3N0cmVhbV9zZXRfY2FwcyAoR3N0U3RyZWFtICogc3RyZWFtLCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2Jvb2xlYW4gbm90aWZ5ID0gRkFMU0U7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzdHJlYW0pOwotICBpZiAoc3RyZWFtLT5wcml2LT5jYXBzID09IE5VTEwgfHwgKGNhcHMKLSAgICAgICAgICAmJiAhZ3N0X2NhcHNfaXNfZXF1YWwgKHN0cmVhbS0+cHJpdi0+Y2FwcywgY2FwcykpKSB7Ci0gICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnN0cmVhbS0+cHJpdi0+Y2FwcywgY2Fwcyk7Ci0gICAgbm90aWZ5ID0gVFJVRTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3RyZWFtKTsKLQotICBpZiAobm90aWZ5KQotICAgIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyAoR19PQkpFQ1QgKHN0cmVhbSksIGdzdF9zdHJlYW1fcHNwZWNzW1BST1BfQ0FQU10pOwotfQotCi0KLS8qKgotICogZ3N0X3N0cmVhbV9nZXRfY2FwczoKLSAqIEBzdHJlYW06IGEgI0dzdFN0cmVhbQotICoKLSAqIFJldHJpZXZlIHRoZSBjYXBzIGZvciBAc3RyZWFtLCBpZiBhbnkKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogVGhlICNHc3RDYXBzIGZvciBAc3RyZWFtCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0Q2FwcyAqCi1nc3Rfc3RyZWFtX2dldF9jYXBzIChHc3RTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIEdzdENhcHMgKnJlcyA9IE5VTEw7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzdHJlYW0pOwotICBpZiAoc3RyZWFtLT5wcml2LT5jYXBzKQotICAgIHJlcyA9IGdzdF9jYXBzX3JlZiAoc3RyZWFtLT5wcml2LT5jYXBzKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHN0cmVhbSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdHJlYW1fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFN0cmVhbSAqc3RyZWFtOwotCi0gIHN0cmVhbSA9IEdTVF9TVFJFQU1fQ0FTVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU1RSRUFNX0lEOgotICAgICAgZ3N0X3N0cmVhbV9zZXRfc3RyZWFtX2lkIChzdHJlYW0sIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJFQU1fRkxBR1M6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHN0cmVhbSk7Ci0gICAgICBzdHJlYW0tPnByaXYtPmZsYWdzID0gZ192YWx1ZV9nZXRfZmxhZ3MgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzdHJlYW0pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUkVBTV9UWVBFOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzdHJlYW0pOwotICAgICAgc3RyZWFtLT5wcml2LT50eXBlID0gZ192YWx1ZV9nZXRfZmxhZ3MgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzdHJlYW0pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RBR1M6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHN0cmVhbSk7Ci0gICAgICBnc3RfbWluaV9vYmplY3RfcmVwbGFjZSAoKEdzdE1pbmlPYmplY3QgKiopICYgc3RyZWFtLT5wcml2LT50YWdzLAotICAgICAgICAgIChHc3RNaW5pT2JqZWN0ICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSkpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHN0cmVhbSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0FQUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3RyZWFtKTsKLSAgICAgIGdzdF9taW5pX29iamVjdF9yZXBsYWNlICgoR3N0TWluaU9iamVjdCAqKikgJiBzdHJlYW0tPnByaXYtPmNhcHMsCi0gICAgICAgICAgKEdzdE1pbmlPYmplY3QgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3RyZWFtKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdHJlYW1fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFN0cmVhbSAqc3RyZWFtOwotCi0gIHN0cmVhbSA9IEdTVF9TVFJFQU1fQ0FTVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU1RSRUFNX0lEOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkIChzdHJlYW0pKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJFQU1fRkxBR1M6Ci0gICAgICBnX3ZhbHVlX3NldF9mbGFncyAodmFsdWUsIGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFncyAoc3RyZWFtKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSRUFNX1RZUEU6Ci0gICAgICBnX3ZhbHVlX3NldF9mbGFncyAodmFsdWUsIGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlIChzdHJlYW0pKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UQUdTOgotICAgICAgZ192YWx1ZV90YWtlX2JveGVkICh2YWx1ZSwgZ3N0X3N0cmVhbV9nZXRfdGFncyAoc3RyZWFtKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0FQUzoKLSAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAodmFsdWUsIGdzdF9zdHJlYW1fZ2V0X2NhcHMgKHN0cmVhbSkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZToKLSAqIEBzdHlwZTogYSAjR3N0U3RyZWFtVHlwZQotICoKLSAqIEdldCBhIGRlc2NyaXB0aXZlIHN0cmluZyBmb3IgYSBnaXZlbiAjR3N0U3RyZWFtVHlwZQotICoKLSAqIFJldHVybnM6IEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHN0cmVhbSB0eXBlCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3N0cmVhbV90eXBlX2dldF9uYW1lIChHc3RTdHJlYW1UeXBlIHN0eXBlKQotewotICAvKiBGSVhNRSA6IE1ha2UgdGhpcyBtb3JlIGZsZXhpYmxlICovCi0gIHN3aXRjaCAoc3R5cGUpIHsKLSAgICBjYXNlIEdTVF9TVFJFQU1fVFlQRV9VTktOT1dOOgotICAgICAgcmV0dXJuICJ1bmtub3duIjsKLSAgICBjYXNlIEdTVF9TVFJFQU1fVFlQRV9BVURJTzoKLSAgICAgIHJldHVybiAiYXVkaW8iOwotICAgIGNhc2UgR1NUX1NUUkVBTV9UWVBFX1ZJREVPOgotICAgICAgcmV0dXJuICJ2aWRlbyI7Ci0gICAgY2FzZSBHU1RfU1RSRUFNX1RZUEVfQ09OVEFJTkVSOgotICAgICAgcmV0dXJuICJjb250YWluZXIiOwotICAgIGNhc2UgR1NUX1NUUkVBTV9UWVBFX1RFWFQ6Ci0gICAgICByZXR1cm4gInRleHQiOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHN0cmVhbXMuaCBiL2dzdC9nc3RzdHJlYW1zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZjFjNzYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHN0cmVhbXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNSBDZW50cmljdWxhciBMdGQKLSAqICBAYXV0aG9yOiBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotICogIEBhdXRob3I6IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIGdzdHN0cmVhbXMuaCA6IEhlYWRlciBmb3IgR3N0U3RyZWFtIHN1YnN5c3RlbQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9TVFJFQU1TX0hfXwotI2RlZmluZSBfX0dTVF9TVFJFQU1TX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RldmVudC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfU1RSRUFNICAgICAgICAgICAgIChnc3Rfc3RyZWFtX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVNfU1RSRUFNKG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfU1RSRUFNKSkKLSNkZWZpbmUgR1NUX0lTX1NUUkVBTV9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfU1RSRUFNKSkKLSNkZWZpbmUgR1NUX1NUUkVBTV9HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfU1RSRUFNLCBHc3RTdHJlYW1DbGFzcykpCi0jZGVmaW5lIEdTVF9TVFJFQU0ob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9TVFJFQU0sIEdzdFN0cmVhbSkpCi0jZGVmaW5lIEdTVF9TVFJFQU1fQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1NUUkVBTSwgR3N0U3RyZWFtQ2xhc3MpKQotI2RlZmluZSBHU1RfU1RSRUFNX0NBU1Qob2JqKSAgICAgICAgKChHc3RTdHJlYW0qKShvYmopKQotCi0vKioKLSAqIEdzdFN0cmVhbVR5cGU6Ci0gKiBAR1NUX1NUUkVBTV9UWVBFX1VOS05PV046IFRoZSBzdHJlYW0gaXMgb2YgdW5rbm93biAodW5jbGFzc2lmaWVkKSB0eXBlLgotICogQEdTVF9TVFJFQU1fVFlQRV9BVURJTzogVGhlIHN0cmVhbSBpcyBvZiBhdWRpbyBkYXRhCi0gKiBAR1NUX1NUUkVBTV9UWVBFX1ZJREVPOiBUaGUgc3RyZWFtIGNhcnJpZXMgdmlkZW8gZGF0YQotICogQEdTVF9TVFJFQU1fVFlQRV9DT05UQUlORVI6IFRoZSBzdHJlYW0gaXMgYSBtdXhlZCBjb250YWluZXIgdHlwZQotICogQEdTVF9TVFJFQU1fVFlQRV9URVhUOiBUaGUgc3RyZWFtIGNvbnRhaW5zIHN1YnRpdGxlIC8gc3VicGljdHVyZSBkYXRhLgotICoKLSAqICNHc3RTdHJlYW1UeXBlIGRlc2NyaWJlcyBhIGhpZ2ggbGV2ZWwgY2xhc3NpZmljYXRpb24gc2V0IGZvcgotICogZmxvd3Mgb2YgZGF0YSBpbiAjR3N0U3RyZWFtIG9iamVjdHMuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgaXMgYSBmbGFnLCBhbmQgdGhlcmVmb3JlIHVzZXJzIHNob3VsZCBub3QgYXNzdW1lIGl0Ci0gKiB3aWxsIGJlIGEgc2luZ2xlIHZhbHVlLiBEbyBub3QgdXNlIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBmb3IgY2hlY2tpbmcKLSAqIHdoZXRoZXIgYSBzdHJlYW0gaXMgb2YgYSBjZXJ0YWluIHR5cGUuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9TVFJFQU1fVFlQRV9VTktOT1dOICAgPSAxIDw8IDAsCi0gIEdTVF9TVFJFQU1fVFlQRV9BVURJTyAgICAgPSAxIDw8IDEsCi0gIEdTVF9TVFJFQU1fVFlQRV9WSURFTyAgICAgPSAxIDw8IDIsCi0gIEdTVF9TVFJFQU1fVFlQRV9DT05UQUlORVIgPSAxIDw8IDMsCi0gIEdTVF9TVFJFQU1fVFlQRV9URVhUICAgICAgPSAxIDw8IDQKLX0gR3N0U3RyZWFtVHlwZTsKLQotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtIEdzdFN0cmVhbTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1DbGFzcyBHc3RTdHJlYW1DbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1Qcml2YXRlIEdzdFN0cmVhbVByaXZhdGU7Ci0KLS8qKgotICogR3N0U3RyZWFtOgotICogQHN0cmVhbV9pZDogVGhlIFN0cmVhbSBJZGVudGlmaWVyIGZvciB0aGlzICNHc3RTdHJlYW0KLSAqIAotICogQSBoaWdoLWxldmVsIG9iamVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc3RyZWFtLiBJdCBtaWdodCBiZSBiYWNrZWQsIG9yCi0gKiBub3QsIGJ5IGFuIGFjdHVhbCBmbG93IG9mIGRhdGEgaW4gYSBwaXBlbGluZSAoI0dzdFBhZCkuCi0gKgotICogQSAjR3N0U3RyZWFtIGRvZXMgbm90IGNhcmUgYWJvdXQgZGF0YSBjaGFuZ2VzIChzdWNoIGFzIGRlY29kaW5nLCBlbmNvZGluZywKLSAqIHBhcnNpbmcsLi4uKSBhcyBsb25nIGFzIHRoZSB1bmRlcmx5aW5nIGRhdGEgZmxvdyBjb3JyZXNwb25kcyB0byB0aGUgc2FtZQotICogaGlnaC1sZXZlbCBmbG93IChleDogYSBjZXJ0YWluIGF1ZGlvIHRyYWNrKS4KLSAqCi0gKiBBICNHc3RTdHJlYW0gY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBwZXJ0aW5lbnQgdG8gYSBzdHJlYW0sIHN1Y2ggYXMKLSAqIHN0cmVhbS1pZCwgdGFncywgY2FwcywgdHlwZSwgLi4uCi0gKgotICogRWxlbWVudHMgY2FuIHN1YmNsYXNzIGEgI0dzdFN0cmVhbSBmb3IgaW50ZXJuYWwgdXNhZ2UgKHRvIGNvbnRhaW4gaW5mb3JtYXRpb24KLSAqIHBlcnRpbmVudCB0byBzdHJlYW1zIG9mIGRhdGEpLgotICovCi1zdHJ1Y3QgX0dzdFN0cmVhbSB7Ci0gIEdzdE9iamVjdCBvYmplY3Q7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8KLSAgY29uc3QgZ2NoYXIgKnN0cmVhbV9pZDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0U3RyZWFtUHJpdmF0ZSAqcHJpdjsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLS8qKgotICogR3N0U3RyZWFtQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiB0aGUgcGFyZW50IGNsYXNzIHN0cnVjdHVyZQotICoKLSAqIEdzdFN0cmVhbSBjbGFzcyBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IF9Hc3RTdHJlYW1DbGFzcyB7Ci0gIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLSAgCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlICAgICBnc3Rfc3RyZWFtX2dldF90eXBlICh2b2lkKTsKLQotR3N0U3RyZWFtICpnc3Rfc3RyZWFtX25ldyAgICAgICAgICAgIChjb25zdCBnY2hhciAqc3RyZWFtX2lkLAotCQkJCSAgICAgIEdzdENhcHMgKmNhcHMsCi0JCQkJICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlLAotCQkJCSAgICAgIEdzdFN0cmVhbUZsYWdzIGZsYWdzKTsKLQotY29uc3QgZ2NoYXIgKmdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZCAoR3N0U3RyZWFtICpzdHJlYW0pOwotCi12b2lkICAgICAgICAgICBnc3Rfc3RyZWFtX3NldF9zdHJlYW1fZmxhZ3MgKEdzdFN0cmVhbSAqc3RyZWFtLCBHc3RTdHJlYW1GbGFncyBmbGFncyk7Ci1Hc3RTdHJlYW1GbGFncyBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3MgKEdzdFN0cmVhbSAqc3RyZWFtKTsKLQotdm9pZCAgICAgICAgICBnc3Rfc3RyZWFtX3NldF9zdHJlYW1fdHlwZSAoR3N0U3RyZWFtICpzdHJlYW0sIEdzdFN0cmVhbVR5cGUgc3RyZWFtX3R5cGUpOwotR3N0U3RyZWFtVHlwZSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZSAoR3N0U3RyZWFtICpzdHJlYW0pOwotCi12b2lkICAgICAgICBnc3Rfc3RyZWFtX3NldF90YWdzIChHc3RTdHJlYW0gKnN0cmVhbSwgR3N0VGFnTGlzdCAqdGFncyk7Ci1Hc3RUYWdMaXN0ICpnc3Rfc3RyZWFtX2dldF90YWdzIChHc3RTdHJlYW0gKnN0cmVhbSk7Ci0KLXZvaWQgICAgIGdzdF9zdHJlYW1fc2V0X2NhcHMgKEdzdFN0cmVhbSAqc3RyZWFtLCBHc3RDYXBzICpjYXBzKTsKLUdzdENhcHMgKmdzdF9zdHJlYW1fZ2V0X2NhcHMgKEdzdFN0cmVhbSAqc3RyZWFtKTsKLQotY29uc3QgZ2NoYXIgKmdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSAoR3N0U3RyZWFtVHlwZSBzdHlwZSk7Ci1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfU1RSRUFNU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3RzdHJ1Y3R1cmUuYyBiL2dzdC9nc3RzdHJ1Y3R1cmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxYjAwZS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0c3RydWN0dXJlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDU0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIGdzdHN0cnVjdHVyZS5jOiBsaXN0cyBvZiB7IEdRdWFyaywgR1ZhbHVlIH0gdHVwbGVzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHN0cnVjdHVyZQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBHZW5lcmljIHN0cnVjdHVyZSBjb250YWluaW5nIGZpZWxkcyBvZiBuYW1lcyBhbmQgdmFsdWVzCi0gKiBAc2VlX2Fsc286ICNHc3RDYXBzLCAjR3N0TWVzc2FnZSwgI0dzdEV2ZW50LCAjR3N0UXVlcnkKLSAqCi0gKiBBICNHc3RTdHJ1Y3R1cmUgaXMgYSBjb2xsZWN0aW9uIG9mIGtleS92YWx1ZSBwYWlycy4gVGhlIGtleXMgYXJlIGV4cHJlc3NlZAotICogYXMgR1F1YXJrcyBhbmQgdGhlIHZhbHVlcyBjYW4gYmUgb2YgYW55IEdUeXBlLgotICoKLSAqIEluIGFkZGl0aW9uIHRvIHRoZSBrZXkvdmFsdWUgcGFpcnMsIGEgI0dzdFN0cnVjdHVyZSBhbHNvIGhhcyBhIG5hbWUuIFRoZSBuYW1lCi0gKiBzdGFydHMgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIGZpbGxlZCBieSBsZXR0ZXJzLCBudW1iZXJzIGFuZCBhbnkgb2YgIi8tXy46Ii4KLSAqCi0gKiAjR3N0U3RydWN0dXJlIGlzIHVzZWQgYnkgdmFyaW91cyBHU3RyZWFtZXIgc3Vic3lzdGVtcyB0byBzdG9yZSBpbmZvcm1hdGlvbgotICogaW4gYSBmbGV4aWJsZSBhbmQgZXh0ZW5zaWJsZSB3YXkuIEEgI0dzdFN0cnVjdHVyZSBkb2VzIG5vdCBoYXZlIGEgcmVmY291bnQKLSAqIGJlY2F1c2UgaXQgdXN1YWxseSBpcyBwYXJ0IG9mIGEgaGlnaGVyIGxldmVsIG9iamVjdCBzdWNoIGFzICNHc3RDYXBzLAotICogI0dzdE1lc3NhZ2UsICNHc3RFdmVudCwgI0dzdFF1ZXJ5LiBJdCBwcm92aWRlcyBhIG1lYW5zIHRvIGVuZm9yY2UgbXV0YWJpbGl0eQotICogdXNpbmcgdGhlIHJlZmNvdW50IG9mIHRoZSBwYXJlbnQgd2l0aCB0aGUgZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50KCkKLSAqIG1ldGhvZC4KLSAqCi0gKiBBICNHc3RTdHJ1Y3R1cmUgY2FuIGJlIGNyZWF0ZWQgd2l0aCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgpIG9yCi0gKiBnc3Rfc3RydWN0dXJlX25ldygpLCB3aGljaCBib3RoIHRha2UgYSBuYW1lIGFuZCBhbiBvcHRpb25hbCBzZXQgb2YKLSAqIGtleS92YWx1ZSBwYWlycyBhbG9uZyB3aXRoIHRoZSB0eXBlcyBvZiB0aGUgdmFsdWVzLgotICoKLSAqIEZpZWxkIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCB3aXRoIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlKCkgb3IKLSAqIGdzdF9zdHJ1Y3R1cmVfc2V0KCkuCi0gKgotICogRmllbGQgdmFsdWVzIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSgpIG9yIHRoZSBtb3JlCi0gKiBjb252ZW5pZW50IGdzdF9zdHJ1Y3R1cmVfZ2V0XyooKSBmdW5jdGlvbnMuCi0gKgotICogRmllbGRzIGNhbiBiZSByZW1vdmVkIHdpdGggZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQoKSBvcgotICogZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzKCkuCi0gKgotICogU3RyaW5ncyBpbiBzdHJ1Y3R1cmVzIG11c3QgYmUgQVNDSUkgb3IgVVRGLTggZW5jb2RlZC4gT3RoZXIgZW5jb2RpbmdzIGFyZQotICogbm90IGFsbG93ZWQuIFN0cmluZ3MgbWF5IGJlICVOVUxMIGhvd2V2ZXIuCi0gKgotICogQmUgYXdhcmUgdGhhdCB0aGUgY3VycmVudCAjR3N0Q2FwcyAvICNHc3RTdHJ1Y3R1cmUgc2VyaWFsaXphdGlvbiBpbnRvIHN0cmluZwotICogaGFzIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbmVzdGVkICNHc3RDYXBzIC8gI0dzdFN0cnVjdHVyZSBmaWVsZHMuIEl0IGNhbiBvbmx5Ci0gKiBzdXBwb3J0IG9uZSBsZXZlbCBvZiBuZXN0aW5nLiBVc2luZyBtb3JlIGxldmVscyB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZAotICogYmVoYXZpb3Igd2hlbiB1c2luZyBzZXJpYWxpemF0aW9uIGZlYXR1cmVzLCBzdWNoIGFzIGdzdF9jYXBzX3RvX3N0cmluZygpIG9yCi0gKiBnc3RfdmFsdWVfc2VyaWFsaXplKCkgYW5kIHRoZWlyIGNvdW50ZXJwYXJ0cy4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0cXVhcmsuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3N0cnVjdHVyZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3Rfc3RydWN0dXJlX2RlYnVnCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTdHJ1Y3R1cmVGaWVsZCBHc3RTdHJ1Y3R1cmVGaWVsZDsKLQotc3RydWN0IF9Hc3RTdHJ1Y3R1cmVGaWVsZAotewotICBHUXVhcmsgbmFtZTsKLSAgR1ZhbHVlIHZhbHVlOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0U3RydWN0dXJlIHM7Ci0KLSAgLyogb3duZWQgYnkgcGFyZW50IHN0cnVjdHVyZSwgTlVMTCBpZiBubyBwYXJlbnQgKi8KLSAgZ2ludCAqcGFyZW50X3JlZmNvdW50OwotCi0gIEdBcnJheSAqZmllbGRzOwotfSBHc3RTdHJ1Y3R1cmVJbXBsOwotCi0jZGVmaW5lIEdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQocykgKCgoR3N0U3RydWN0dXJlSW1wbCopKHMpKS0+cGFyZW50X3JlZmNvdW50KQotI2RlZmluZSBHU1RfU1RSVUNUVVJFX0ZJRUxEUyhzKSAoKChHc3RTdHJ1Y3R1cmVJbXBsKikocykpLT5maWVsZHMpCi0KLSNkZWZpbmUgR1NUX1NUUlVDVFVSRV9GSUVMRChzdHJ1Y3R1cmUsIGluZGV4KSBcCi0gICAgJmdfYXJyYXlfaW5kZXgoR1NUX1NUUlVDVFVSRV9GSUVMRFMoc3RydWN0dXJlKSwgR3N0U3RydWN0dXJlRmllbGQsIChpbmRleCkpCi0KLSNkZWZpbmUgSVNfTVVUQUJMRShzdHJ1Y3R1cmUpIFwKLSAgICAoIUdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQoc3RydWN0dXJlKSB8fCBcCi0gICAgIGdfYXRvbWljX2ludF9nZXQgKEdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQoc3RydWN0dXJlKSkgPT0gMSkKLQotI2RlZmluZSBJU19UQUdMSVNUKHN0cnVjdHVyZSkgXAotICAgIChzdHJ1Y3R1cmUtPm5hbWUgPT0gR1NUX1FVQVJLIChUQUdMSVNUKSkKLQotc3RhdGljIHZvaWQgZ3N0X3N0cnVjdHVyZV9zZXRfZmllbGQgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBHc3RTdHJ1Y3R1cmVGaWVsZCAqIGZpZWxkKTsKLXN0YXRpYyBHc3RTdHJ1Y3R1cmVGaWVsZCAqZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqCi0gICAgc3RydWN0dXJlLCBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSk7Ci1zdGF0aWMgR3N0U3RydWN0dXJlRmllbGQgKmdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X2ZpZWxkIChjb25zdCBHc3RTdHJ1Y3R1cmUgKgotICAgIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkKTsKLXN0YXRpYyB2b2lkIGdzdF9zdHJ1Y3R1cmVfdHJhbnNmb3JtX3RvX3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAotICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpOwotc3RhdGljIEdzdFN0cnVjdHVyZSAqZ3N0X3N0cnVjdHVyZV9jb3B5X2NvbmRpdGlvbmFsIChjb25zdCBHc3RTdHJ1Y3R1cmUgKgotICAgIHN0cnVjdHVyZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3N0cnVjdHVyZV9wYXJzZV92YWx1ZSAoZ2NoYXIgKiBzdHIsIGdjaGFyICoqIGFmdGVyLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHVHlwZSBkZWZhdWx0X3R5cGUpOwotc3RhdGljIGdib29sZWFuIGdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc2ltcGxlX3N0cmluZyAoZ2NoYXIgKiBzLCBnY2hhciAqKiBlbmQpOwotCi1HVHlwZSBfZ3N0X3N0cnVjdHVyZV90eXBlID0gMDsKLQotCi1HX0RFRklORV9CT1hFRF9UWVBFIChHc3RTdHJ1Y3R1cmUsIGdzdF9zdHJ1Y3R1cmUsCi0gICAgZ3N0X3N0cnVjdHVyZV9jb3B5X2NvbmRpdGlvbmFsLCBnc3Rfc3RydWN0dXJlX2ZyZWUpOwotCi12b2lkCi1fcHJpdl9nc3Rfc3RydWN0dXJlX2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIF9nc3Rfc3RydWN0dXJlX3R5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF90eXBlICgpOwotCi0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKF9nc3Rfc3RydWN0dXJlX3R5cGUsIEdfVFlQRV9TVFJJTkcsCi0gICAgICBnc3Rfc3RydWN0dXJlX3RyYW5zZm9ybV90b19zdHJpbmcpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3Rfc3RydWN0dXJlX2RlYnVnLCAic3RydWN0dXJlIiwgMCwKLSAgICAgICJHc3RTdHJ1Y3R1cmUgZGVidWciKTsKLX0KLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqCi1nc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eV93aXRoX3NpemUgKEdRdWFyayBxdWFyaywgZ3VpbnQgcHJlYWxsb2MpCi17Ci0gIEdzdFN0cnVjdHVyZUltcGwgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnX3NsaWNlX25ldyAoR3N0U3RydWN0dXJlSW1wbCk7Ci0gICgoR3N0U3RydWN0dXJlICopIHN0cnVjdHVyZSktPnR5cGUgPSBfZ3N0X3N0cnVjdHVyZV90eXBlOwotICAoKEdzdFN0cnVjdHVyZSAqKSBzdHJ1Y3R1cmUpLT5uYW1lID0gcXVhcms7Ci0gIEdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQgKHN0cnVjdHVyZSkgPSBOVUxMOwotICBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKSA9Ci0gICAgICBnX2FycmF5X3NpemVkX25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKEdzdFN0cnVjdHVyZUZpZWxkKSwgcHJlYWxsb2MpOwotCi0gIEdTVF9UUkFDRSAoImNyZWF0ZWQgc3RydWN0dXJlICVwIiwgc3RydWN0dXJlKTsKLQotICByZXR1cm4gR1NUX1NUUlVDVFVSRV9DQVNUIChzdHJ1Y3R1cmUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5OgotICogQHF1YXJrOiBuYW1lIG9mIG5ldyBzdHJ1Y3R1cmUKLSAqCi0gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSAjR3N0U3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIG5hbWUgYXMgYSBHUXVhcmsuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldywgZW1wdHkgI0dzdFN0cnVjdHVyZQotICovCi1Hc3RTdHJ1Y3R1cmUgKgotZ3N0X3N0cnVjdHVyZV9uZXdfaWRfZW1wdHkgKEdRdWFyayBxdWFyaykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHF1YXJrICE9IDAsIE5VTEwpOwotCi0gIHJldHVybiBnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eV93aXRoX3NpemUgKHF1YXJrLCAwKTsKLX0KLQotI2lmbmRlZiBHX0RJU0FCTEVfQ0hFQ0tTCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfdmFsaWRhdGVfbmFtZSAoY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBjb25zdCBnY2hhciAqczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFnX2FzY2lpX2lzYWxwaGEgKCpuYW1lKSkpIHsKLSAgICBHU1RfV0FSTklORyAoIkludmFsaWQgY2hhcmFjdGVyICclYycgYXQgb2Zmc2V0IDAgaW4gc3RydWN0dXJlIG5hbWU6ICVzIiwKLSAgICAgICAgKm5hbWUsIG5hbWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIEZJWE1FOiB0ZXN0IG5hbWUgc3RyaW5nIG1vcmUgKi8KLSAgcyA9ICZuYW1lWzFdOwotICB3aGlsZSAoKnMgJiYgKGdfYXNjaWlfaXNhbG51bSAoKnMpIHx8IHN0cmNociAoIi8tXy46KyIsICpzKSAhPSBOVUxMKSkKLSAgICBzKys7Ci0gIGlmIChHX1VOTElLRUxZICgqcyAhPSAnXDAnKSkgewotICAgIEdTVF9XQVJOSU5HICgiSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBhdCBvZmZzZXQgJSIgR19HVUlOVFBUUl9GT1JNQVQgIiBpbiIKLSAgICAgICAgIiBzdHJ1Y3R1cmUgbmFtZTogJXMiLCAqcywgKChndWludHB0cikgcyAtIChndWludHB0cikgbmFtZSksIG5hbWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChzdHJuY21wIChuYW1lLCAidmlkZW8veC1yYXctIiwgMTIpID09IDApIHsKLSAgICBnX3dhcm5pbmcgKCIwLjEwLXN0eWxlIHJhdyB2aWRlbyBjYXBzIGFyZSBiZWluZyBjcmVhdGVkLiBTaG91bGQgYmUgIgotICAgICAgICAidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpLi4gbm93LiIpOwotICB9IGVsc2UgaWYgKHN0cm5jbXAgKG5hbWUsICJhdWRpby94LXJhdy0iLCAxMikgPT0gMCkgewotICAgIGdfd2FybmluZyAoIjAuMTAtc3R5bGUgcmF3IGF1ZGlvIGNhcHMgYXJlIGJlaW5nIGNyZWF0ZWQuIFNob3VsZCBiZSAiCi0gICAgICAgICJhdWRpby94LXJhdyxmb3JtYXQ9KHN0cmluZykuLiBub3cuIik7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5OgotICogQG5hbWU6IG5hbWUgb2YgbmV3IHN0cnVjdHVyZQotICoKLSAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5ICNHc3RTdHJ1Y3R1cmUgd2l0aCB0aGUgZ2l2ZW4gQG5hbWUuCi0gKgotICogU2VlIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUoKSBmb3IgY29uc3RyYWludHMgb24gdGhlIEBuYW1lIHBhcmFtZXRlci4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3LCBlbXB0eSAjR3N0U3RydWN0dXJlCi0gKi8KLUdzdFN0cnVjdHVyZSAqCi1nc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3N0cnVjdHVyZV92YWxpZGF0ZV9uYW1lIChuYW1lKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5X3dpdGhfc2l6ZSAoZ19xdWFya19mcm9tX3N0cmluZyAobmFtZSksIDApOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfbmV3OgotICogQG5hbWU6IG5hbWUgb2YgbmV3IHN0cnVjdHVyZQotICogQGZpcnN0ZmllbGQ6IG5hbWUgb2YgZmlyc3QgZmllbGQgdG8gc2V0Ci0gKiBALi4uOiBhZGRpdGlvbmFsIGFyZ3VtZW50cwotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdFN0cnVjdHVyZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiAgUGFyc2VzIHRoZQotICogbGlzdCBvZiB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHNldHMgZmllbGRzIHRvIHRoZSB2YWx1ZXMgbGlzdGVkLgotICogVmFyaWFibGUgYXJndW1lbnRzIHNob3VsZCBiZSBwYXNzZWQgYXMgZmllbGQgbmFtZSwgZmllbGQgdHlwZSwKLSAqIGFuZCB2YWx1ZS4gIExhc3QgdmFyaWFibGUgYXJndW1lbnQgc2hvdWxkIGJlICVOVUxMLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9zdHJ1Y3R1cmVfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdFN0cnVjdHVyZQotICovCi1Hc3RTdHJ1Y3R1cmUgKgotZ3N0X3N0cnVjdHVyZV9uZXcgKGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgZ2NoYXIgKiBmaXJzdGZpZWxkLCAuLi4pCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZpcnN0ZmllbGQpOwotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld192YWxpc3QgKG5hbWUsIGZpcnN0ZmllbGQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotCi0gIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0OgotICogQG5hbWU6IG5hbWUgb2YgbmV3IHN0cnVjdHVyZQotICogQGZpcnN0ZmllbGQ6IG5hbWUgb2YgZmlyc3QgZmllbGQgdG8gc2V0Ci0gKiBAdmFyYXJnczogdmFyaWFibGUgYXJndW1lbnQgbGlzdAotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdFN0cnVjdHVyZSB3aXRoIHRoZSBnaXZlbiBAbmFtZS4gIFN0cnVjdHVyZSBmaWVsZHMKLSAqIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSB2YXJhcmdzIGluIGEgbWFubmVyIHNpbWlsYXIgdG8KLSAqIGdzdF9zdHJ1Y3R1cmVfbmV3KCkuCi0gKgotICogU2VlIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUoKSBmb3IgY29uc3RyYWludHMgb24gdGhlIEBuYW1lIHBhcmFtZXRlci4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RTdHJ1Y3R1cmUKLSAqLwotR3N0U3RydWN0dXJlICoKLWdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdCAoY29uc3QgZ2NoYXIgKiBuYW1lLAotICAgIGNvbnN0IGdjaGFyICogZmlyc3RmaWVsZCwgdmFfbGlzdCB2YXJhcmdzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAobmFtZSk7Ci0KLSAgaWYgKHN0cnVjdHVyZSkKLSAgICBnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QgKHN0cnVjdHVyZSwgZmlyc3RmaWVsZCwgdmFyYXJncyk7Ci0KLSAgcmV0dXJuIHN0cnVjdHVyZTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX3NldF9wYXJlbnRfcmVmY291bnQ6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEByZWZjb3VudDogKGluKTogYSBwb2ludGVyIHRvIHRoZSBwYXJlbnQncyByZWZjb3VudAotICoKLSAqIFNldHMgdGhlIHBhcmVudF9yZWZjb3VudCBmaWVsZCBvZiAjR3N0U3RydWN0dXJlLiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8KLSAqIGRldGVybWluZSB3aGV0aGVyIGEgc3RydWN0dXJlIGlzIG11dGFibGUgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgYnkgY29kZSBpbXBsZW1lbnRpbmcgcGFyZW50IG9iamVjdHMgb2YgI0dzdFN0cnVjdHVyZSwgYXMgZGVzY3JpYmVkIGluCi0gKiB0aGUgTVQgUmVmY291bnRpbmcgc2VjdGlvbiBvZiB0aGUgZGVzaWduIGRvY3VtZW50cy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFyZW50IHJlZmNvdW50IGNvdWxkIGJlIHNldC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBnaW50ICogcmVmY291bnQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIC8qIGlmIHdlIGhhdmUgYSBwYXJlbnRfcmVmY291bnQgYWxyZWFkeSwgd2UgY2FuIG9ubHkgY2xlYXIKLSAgICogaWYgd2l0aCBhIE5VTEwgcmVmY291bnQgKi8KLSAgaWYgKEdTVF9TVFJVQ1RVUkVfUkVGQ09VTlQgKHN0cnVjdHVyZSkpIHsKLSAgICBpZiAocmVmY291bnQgIT0gTlVMTCkgewotICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlZmNvdW50ID09IE5VTEwsIEZBTFNFKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKHJlZmNvdW50ID09IE5VTEwpIHsKLSAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWZjb3VudCAhPSBOVUxMLCBGQUxTRSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9Ci0KLSAgR1NUX1NUUlVDVFVSRV9SRUZDT1VOVCAoc3RydWN0dXJlKSA9IHJlZmNvdW50OwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfY29weToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZSB0byBkdXBsaWNhdGUKLSAqCi0gKiBEdXBsaWNhdGVzIGEgI0dzdFN0cnVjdHVyZSBhbmQgYWxsIGl0cyBmaWVsZHMgYW5kIHZhbHVlcy4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RTdHJ1Y3R1cmUuCi0gKi8KLUdzdFN0cnVjdHVyZSAqCi1nc3Rfc3RydWN0dXJlX2NvcHkgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKLXsKLSAgR3N0U3RydWN0dXJlICpuZXdfc3RydWN0dXJlOwotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0gIGd1aW50IGksIGxlbjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOwotCi0gIGxlbiA9IEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLT5sZW47Ci0gIG5ld19zdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eV93aXRoX3NpemUgKHN0cnVjdHVyZS0+bmFtZSwgbGVuKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmVGaWVsZCBuZXdfZmllbGQgPSB7IDAgfTsKLQotICAgIGZpZWxkID0gR1NUX1NUUlVDVFVSRV9GSUVMRCAoc3RydWN0dXJlLCBpKTsKLQotICAgIG5ld19maWVsZC5uYW1lID0gZmllbGQtPm5hbWU7Ci0gICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZuZXdfZmllbGQudmFsdWUsICZmaWVsZC0+dmFsdWUpOwotICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoR1NUX1NUUlVDVFVSRV9GSUVMRFMgKG5ld19zdHJ1Y3R1cmUpLCBuZXdfZmllbGQpOwotICB9Ci0gIEdTVF9DQVRfVFJBQ0UgKEdTVF9DQVRfUEVSRk9STUFOQ0UsICJkb2luZyBjb3B5ICVwIC0+ICVwIiwKLSAgICAgIHN0cnVjdHVyZSwgbmV3X3N0cnVjdHVyZSk7Ci0KLSAgcmV0dXJuIG5ld19zdHJ1Y3R1cmU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9mcmVlOgotICogQHN0cnVjdHVyZTogKGluKSAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0U3RydWN0dXJlIHRvIGZyZWUKLSAqCi0gKiBGcmVlcyBhICNHc3RTdHJ1Y3R1cmUgYW5kIGFsbCBpdHMgZmllbGRzIGFuZCB2YWx1ZXMuIFRoZSBzdHJ1Y3R1cmUgbXVzdCBub3QKLSAqIGhhdmUgYSBwYXJlbnQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqLwotdm9pZAotZ3N0X3N0cnVjdHVyZV9mcmVlIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCi17Ci0gIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1NUUlVDVFVSRV9SRUZDT1VOVCAoc3RydWN0dXJlKSA9PSBOVUxMKTsKLQotICBsZW4gPSBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKS0+bGVuOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBmaWVsZCA9IEdTVF9TVFJVQ1RVUkVfRklFTEQgKHN0cnVjdHVyZSwgaSk7Ci0KLSAgICBpZiAoR19JU19WQUxVRSAoJmZpZWxkLT52YWx1ZSkpIHsKLSAgICAgIGdfdmFsdWVfdW5zZXQgKCZmaWVsZC0+dmFsdWUpOwotICAgIH0KLSAgfQotICBnX2FycmF5X2ZyZWUgKEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLCBUUlVFKTsKLSNpZmRlZiBVU0VfUE9JU09OSU5HCi0gIG1lbXNldCAoc3RydWN0dXJlLCAweGZmLCBzaXplb2YgKEdzdFN0cnVjdHVyZSkpOwotI2VuZGlmCi0gIEdTVF9UUkFDRSAoImZyZWUgc3RydWN0dXJlICVwIiwgc3RydWN0dXJlKTsKLQotICBnX3NsaWNlX2ZyZWUxIChzaXplb2YgKEdzdFN0cnVjdHVyZUltcGwpLCBzdHJ1Y3R1cmUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWU6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBHZXQgdGhlIG5hbWUgb2YgQHN0cnVjdHVyZSBhcyBhIHN0cmluZy4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlLgotICovCi1jb25zdCBnY2hhciAqCi1nc3Rfc3RydWN0dXJlX2dldF9uYW1lIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdfcXVhcmtfdG9fc3RyaW5nIChzdHJ1Y3R1cmUtPm5hbWUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWU6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBuYW1lOiBzdHJ1Y3R1cmUgbmFtZSB0byBjaGVjayBmb3IKLSAqCi0gKiBDaGVja3MgaWYgdGhlIHN0cnVjdHVyZSBoYXMgdGhlIGdpdmVuIG5hbWUKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmFtZSBtYXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUuCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2hhc19uYW1lIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgY29uc3QgZ2NoYXIgKnN0cnVjdHVyZV9uYW1lOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgLyogZ2V0dGluZyB0aGUgc3RyaW5nIGlzIGNoZWFwIGFuZCBjb21wYXJpbmcgc2hvcnQgc3RyaW5ncyBpcyB0b28KLSAgICogc2hvdWxkIGJlIGZhc3RlciB0aGFuIGdldHRpbmcgdGhlIHF1YXJrIGZvciBuYW1lIGFuZCBjb21wYXJpbmcgdGhlIHF1YXJrcwotICAgKi8KLSAgc3RydWN0dXJlX25hbWUgPSBnX3F1YXJrX3RvX3N0cmluZyAoc3RydWN0dXJlLT5uYW1lKTsKLQotICByZXR1cm4gKHN0cnVjdHVyZV9uYW1lICYmIHN0cmNtcCAoc3RydWN0dXJlX25hbWUsIG5hbWUpID09IDApOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQ6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBHZXQgdGhlIG5hbWUgb2YgQHN0cnVjdHVyZSBhcyBhIEdRdWFyay4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgcXVhcmsgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUuCi0gKi8KLUdRdWFyawotZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIDApOwotCi0gIHJldHVybiBzdHJ1Y3R1cmUtPm5hbWU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQG5hbWU6IHRoZSBuZXcgbmFtZSBvZiB0aGUgc3RydWN0dXJlCi0gKgotICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlIHRvIHRoZSBnaXZlbiBAbmFtZS4gIFRoZSBzdHJpbmcKLSAqIHByb3ZpZGVkIGlzIGNvcGllZCBiZWZvcmUgYmVpbmcgdXNlZC4gSXQgbXVzdCBub3QgYmUgZW1wdHksIHN0YXJ0IHdpdGggYQotICogbGV0dGVyIGFuZCBjYW4gYmUgZm9sbG93ZWQgYnkgbGV0dGVycywgbnVtYmVycyBhbmQgYW55IG9mICIvLV8uOiIuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3Rfc3RydWN0dXJlX3ZhbGlkYXRlX25hbWUgKG5hbWUpKTsKLQotICBzdHJ1Y3R1cmUtPm5hbWUgPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChuYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1nc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZV9pbnRlcm5hbCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBHUXVhcmsgZmllbGQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIEdzdFN0cnVjdHVyZUZpZWxkIGdzZmllbGQgPSB7IDAsIHswLH0gfTsKLQotICBnc2ZpZWxkLm5hbWUgPSBmaWVsZDsKLSAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZnc2ZpZWxkLnZhbHVlLCB2YWx1ZSk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9zZXRfZmllbGQgKHN0cnVjdHVyZSwgJmdzZmllbGQpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGQ6IGEgI0dRdWFyayByZXByZXNlbnRpbmcgYSBmaWVsZAotICogQHZhbHVlOiB0aGUgbmV3IHZhbHVlIG9mIHRoZSBmaWVsZAotICoKLSAqIFNldHMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIEdRdWFyayBAZmllbGQgdG8gQHZhbHVlLiAgSWYgdGhlIGZpZWxkCi0gKiBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gIElmIHRoZSBmaWVsZCBleGlzdHMsIHRoZSBwcmV2aW91cwotICogdmFsdWUgaXMgcmVwbGFjZWQgYW5kIGZyZWVkLgotICovCi12b2lkCi1nc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZSAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIEdRdWFyayBmaWVsZCwgY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZV9pbnRlcm5hbCAoc3RydWN0dXJlLCBmaWVsZCwgdmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0Ci0gKiBAdmFsdWU6IHRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkCi0gKgotICogU2V0cyB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBAZmllbGQgdG8gQHZhbHVlLiAgSWYgdGhlIGZpZWxkCi0gKiBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gIElmIHRoZSBmaWVsZCBleGlzdHMsIHRoZSBwcmV2aW91cwotICogdmFsdWUgaXMgcmVwbGFjZWQgYW5kIGZyZWVkLgotICovCi12b2lkCi1nc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSkpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlX2ludGVybmFsIChzdHJ1Y3R1cmUsCi0gICAgICBnX3F1YXJrX2Zyb21fc3RyaW5nIChmaWVsZG5hbWUpLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlX2ludGVybmFsIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIEdRdWFyayBmaWVsZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgZ3NmaWVsZCA9IHsgMCwgezAsfSB9OwotCi0gIGdzZmllbGQubmFtZSA9IGZpZWxkOwotICBnc2ZpZWxkLnZhbHVlID0gKnZhbHVlOwotCi0gIGdzdF9zdHJ1Y3R1cmVfc2V0X2ZpZWxkIChzdHJ1Y3R1cmUsICZnc2ZpZWxkKTsKLQotICAvKiB3ZSB0b29rIG93bmVyc2hpcCAqLwotI2lmZGVmIFVTRV9QT0lTT05JTkcKLSAgbWVtc2V0ICh2YWx1ZSwgMCwgc2l6ZW9mIChHVmFsdWUpKTsKLSNlbHNlCi0gIHZhbHVlLT5nX3R5cGUgPSBHX1RZUEVfSU5WQUxJRDsKLSNlbmRpZgotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkOiBhICNHUXVhcmsgcmVwcmVzZW50aW5nIGEgZmllbGQKLSAqIEB2YWx1ZTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3IHZhbHVlIG9mIHRoZSBmaWVsZAotICoKLSAqIFNldHMgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIEdRdWFyayBAZmllbGQgdG8gQHZhbHVlLiAgSWYgdGhlIGZpZWxkCi0gKiBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gIElmIHRoZSBmaWVsZCBleGlzdHMsIHRoZSBwcmV2aW91cwotICogdmFsdWUgaXMgcmVwbGFjZWQgYW5kIGZyZWVkLgotICovCi12b2lkCi1nc3Rfc3RydWN0dXJlX2lkX3Rha2VfdmFsdWUgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkLAotICAgIEdWYWx1ZSAqIHZhbHVlKQotewotICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSkpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZV9pbnRlcm5hbCAoc3RydWN0dXJlLCBmaWVsZCwgdmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldAotICogQHZhbHVlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXcgdmFsdWUgb2YgdGhlIGZpZWxkCi0gKgotICogU2V0cyB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBAZmllbGQgdG8gQHZhbHVlLiAgSWYgdGhlIGZpZWxkCi0gKiBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4gIElmIHRoZSBmaWVsZCBleGlzdHMsIHRoZSBwcmV2aW91cwotICogdmFsdWUgaXMgcmVwbGFjZWQgYW5kIGZyZWVkLiBUaGUgZnVuY3Rpb24gd2lsbCB0YWtlIG93bmVyc2hpcCBvZiBAdmFsdWUuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwKLSAgICBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSkpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZV9pbnRlcm5hbCAoc3RydWN0dXJlLAotICAgICAgZ19xdWFya19mcm9tX3N0cmluZyAoZmllbGRuYW1lKSwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0X2ludGVybmFsIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIHZhX2xpc3QgdmFyYXJncykKLXsKLSAgZ2NoYXIgKmVyciA9IE5VTEw7Ci0gIEdUeXBlIHR5cGU7Ci0KLSAgd2hpbGUgKGZpZWxkbmFtZSkgewotICAgIEdzdFN0cnVjdHVyZUZpZWxkIGZpZWxkID0geyAwIH07Ci0KLSAgICBmaWVsZC5uYW1lID0gZ19xdWFya19mcm9tX3N0cmluZyAoZmllbGRuYW1lKTsKLQotICAgIHR5cGUgPSB2YV9hcmcgKHZhcmFyZ3MsIEdUeXBlKTsKLQotICAgIEdfVkFMVUVfQ09MTEVDVF9JTklUICgmZmllbGQudmFsdWUsIHR5cGUsIHZhcmFyZ3MsIDAsICZlcnIpOwotICAgIGlmIChHX1VOTElLRUxZIChlcnIpKSB7Ci0gICAgICBnX2NyaXRpY2FsICgiJXMiLCBlcnIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnc3Rfc3RydWN0dXJlX3NldF9maWVsZCAoc3RydWN0dXJlLCAmZmllbGQpOwotCi0gICAgZmllbGRuYW1lID0gdmFfYXJnICh2YXJhcmdzLCBnY2hhciAqKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfc2V0OgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0Ci0gKiBALi4uOiB2YXJpYWJsZSBhcmd1bWVudHMKLSAqCi0gKiBQYXJzZXMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgc2V0cyBmaWVsZHMgYWNjb3JkaW5nbHkuIEZpZWxkcyB0aGF0Ci0gKiB3ZXJlbid0IGFscmVhZHkgcGFydCBvZiB0aGUgc3RydWN0dXJlIGFyZSBhZGRlZCBhcyBuZWVkZWQuCi0gKiBWYXJpYWJsZSBhcmd1bWVudHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtIGZpZWxkIG5hbWUsIGZpZWxkIHR5cGUKLSAqIChhcyBhIEdUeXBlKSwgdmFsdWUocykuICBUaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBzaG91bGQgYmUgJU5VTEwuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfc2V0IChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IGdjaGFyICogZmllbGQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSB8fCBmaWVsZCA9PSBOVUxMKTsKLQotICB2YV9zdGFydCAodmFyYXJncywgZmllbGQpOwotICBnc3Rfc3RydWN0dXJlX3NldF92YWxpc3RfaW50ZXJuYWwgKHN0cnVjdHVyZSwgZmllbGQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdDoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldAotICogQHZhcmFyZ3M6IHZhcmlhYmxlIGFyZ3VtZW50cwotICoKLSAqIHZhX2xpc3QgZm9ybSBvZiBnc3Rfc3RydWN0dXJlX3NldCgpLgotICovCi12b2lkCi1nc3Rfc3RydWN0dXJlX3NldF92YWxpc3QgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgdmFfbGlzdCB2YXJhcmdzKQotewotICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSkpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbGlzdF9pbnRlcm5hbCAoc3RydWN0dXJlLCBmaWVsZG5hbWUsIHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0X2ludGVybmFsIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgR1F1YXJrIGZpZWxkbmFtZSwgdmFfbGlzdCB2YXJhcmdzKQotewotICBnY2hhciAqZXJyID0gTlVMTDsKLSAgR1R5cGUgdHlwZTsKLQotICB3aGlsZSAoZmllbGRuYW1lKSB7Ci0gICAgR3N0U3RydWN0dXJlRmllbGQgZmllbGQgPSB7IDAgfTsKLQotICAgIGZpZWxkLm5hbWUgPSBmaWVsZG5hbWU7Ci0gICAgdHlwZSA9IHZhX2FyZyAodmFyYXJncywgR1R5cGUpOwotCi0gICAgR19WQUxVRV9DT0xMRUNUX0lOSVQgKCZmaWVsZC52YWx1ZSwgdHlwZSwgdmFyYXJncywgMCwgJmVycik7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGVycikpIHsKLSAgICAgIGdfY3JpdGljYWwgKCIlcyIsIGVycik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X2ZpZWxkIChzdHJ1Y3R1cmUsICZmaWVsZCk7Ci0KLSAgICBmaWVsZG5hbWUgPSB2YV9hcmcgKHZhcmFyZ3MsIEdRdWFyayk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2lkX3NldDoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIEdRdWFyayBmb3IgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldAotICogQC4uLjogdmFyaWFibGUgYXJndW1lbnRzCi0gKgotICogSWRlbnRpY2FsIHRvIGdzdF9zdHJ1Y3R1cmVfc2V0LCBleGNlcHQgdGhhdCBmaWVsZCBuYW1lcyBhcmUKLSAqIHBhc3NlZCB1c2luZyB0aGUgR1F1YXJrIGZvciB0aGUgZmllbGQgbmFtZS4gVGhpcyBhbGxvd3MgbW9yZSBlZmZpY2llbnQKLSAqIHNldHRpbmcgb2YgdGhlIHN0cnVjdHVyZSBpZiB0aGUgY2FsbGVyIGFscmVhZHkga25vd3MgdGhlIGFzc29jaWF0ZWQKLSAqIHF1YXJrIHZhbHVlcy4KLSAqIFRoZSBsYXN0IHZhcmlhYmxlIGFyZ3VtZW50IG11c3QgYmUgJU5VTEwuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfaWRfc2V0IChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIEdRdWFyayBmaWVsZCwgLi4uKQotewotICB2YV9saXN0IHZhcmFyZ3M7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmaWVsZCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdF9pbnRlcm5hbCAoc3RydWN0dXJlLCBmaWVsZCwgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0OgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gc2V0Ci0gKiBAdmFyYXJnczogdmFyaWFibGUgYXJndW1lbnRzCi0gKgotICogdmFfbGlzdCBmb3JtIG9mIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0KCkuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbGlzdCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIEdRdWFyayBmaWVsZG5hbWUsIHZhX2xpc3QgdmFyYXJncykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpKTsKLQotICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3RfaW50ZXJuYWwgKHN0cnVjdHVyZSwgZmllbGRuYW1lLCB2YXJhcmdzKTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX25ld19pZDoKLSAqIEBuYW1lX3F1YXJrOiBuYW1lIG9mIG5ldyBzdHJ1Y3R1cmUKLSAqIEBmaWVsZF9xdWFyazogdGhlIEdRdWFyayBmb3IgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHNldAotICogQC4uLjogdmFyaWFibGUgYXJndW1lbnRzCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0U3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIG5hbWUgYXMgYSBHUXVhcmssIGZvbGxvd2VkIGJ5Ci0gKiBmaWVsZG5hbWUgcXVhcmssIEdUeXBlLCBhcmd1bWVudChzKSAidHJpcGxldHMiIGluIHRoZSBzYW1lIGZvcm1hdCBhcwotICogZ3N0X3N0cnVjdHVyZV9pZF9zZXQoKS4gQmFzaWNhbGx5IGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQKLSAqIGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5KCkgYW5kIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0KCkuCi0gKgotICogVGhlIGxhc3QgdmFyaWFibGUgYXJndW1lbnQgbXVzdCBiZSAlTlVMTCAob3IgMCkuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3N0cnVjdHVyZV9mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0U3RydWN0dXJlCi0gKi8KLUdzdFN0cnVjdHVyZSAqCi1nc3Rfc3RydWN0dXJlX25ld19pZCAoR1F1YXJrIG5hbWVfcXVhcmssIEdRdWFyayBmaWVsZF9xdWFyaywgLi4uKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmFtZV9xdWFyayAhPSAwLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkX3F1YXJrICE9IDAsIE5VTEwpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eSAobmFtZV9xdWFyayk7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZpZWxkX3F1YXJrKTsKLSAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsaXN0X2ludGVybmFsIChzLCBmaWVsZF9xdWFyaywgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLSNpZiBHU1RfVkVSU0lPTl9OQU5PID09IDEKLSNkZWZpbmUgR0lUX0dfV0FSTklORyBnX3dhcm5pbmcKLSNlbHNlCi0jZGVmaW5lIEdJVF9HX1dBUk5JTkcgR1NUX1dBUk5JTkcKLSNlbmRpZgotCi0vKiBJZiB0aGUgc3RydWN0dXJlIGN1cnJlbnRseSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIHNhbWUgbmFtZSwgaXQgaXMKLSAqIHJlcGxhY2VkIHdpdGggdGhlIHByb3ZpZGVkIGZpZWxkLiBPdGhlcndpc2UsIHRoZSBmaWVsZCBpcyBhZGRlZCB0byB0aGUKLSAqIHN0cnVjdHVyZS4gVGhlIGZpZWxkJ3MgdmFsdWUgaXMgbm90IGRlZXBseSBjb3BpZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3Rfc3RydWN0dXJlX3NldF9maWVsZCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBHc3RTdHJ1Y3R1cmVGaWVsZCAqIGZpZWxkKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZjsKLSAgR1R5cGUgZmllbGRfdmFsdWVfdHlwZTsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIGxlbiA9IEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLT5sZW47Ci0KLSAgZmllbGRfdmFsdWVfdHlwZSA9IEdfVkFMVUVfVFlQRSAoJmZpZWxkLT52YWx1ZSk7Ci0gIGlmIChmaWVsZF92YWx1ZV90eXBlID09IEdfVFlQRV9TVFJJTkcpIHsKLSAgICBjb25zdCBnY2hhciAqczsKLQotICAgIHMgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKCZmaWVsZC0+dmFsdWUpOwotICAgIC8qIG9ubHkgY2hlY2sgZm9yIE5VTEwgc3RyaW5ncyBpbiB0YWdsaXN0cywgYXMgdGhleSBhcmUgYWxsb3dlZCBpbiBtZXNzYWdlCi0gICAgICogc3RydWN0cywgZS5nLiBlcnJvciBtZXNzYWdlIGRlYnVnIHN0cmluZ3MgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoSVNfVEFHTElTVCAoc3RydWN0dXJlKSAmJiAocyA9PSBOVUxMIHx8ICpzID09ICdcMCcpKSkgewotICAgICAgaWYgKHMgPT0gTlVMTCkgewotICAgICAgICBHSVRfR19XQVJOSU5HICgiVHJ5aW5nIHRvIHNldCBOVUxMIHN0cmluZyBvbiBmaWVsZCAnJXMnIG9uIHRhZ2xpc3QuICIKLSAgICAgICAgICAgICJQbGVhc2UgZmlsZSBhIGJ1Zy4iLCBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGQtPm5hbWUpKTsKLSAgICAgICAgZ192YWx1ZV91bnNldCAoJmZpZWxkLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGVtcHR5IHN0cmluZ3MgbmV2ZXIgbWFrZSBzZW5zZSAqLwotICAgICAgICBHSVRfR19XQVJOSU5HICgiVHJ5aW5nIHRvIHNldCBlbXB0eSBzdHJpbmcgb24gdGFnbGlzdCBmaWVsZCAnJXMnLiAiCi0gICAgICAgICAgICAiUGxlYXNlIGZpbGUgYSBidWcuIiwgZ19xdWFya190b19zdHJpbmcgKGZpZWxkLT5uYW1lKSk7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZmaWVsZC0+dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChHX1VOTElLRUxZIChzICE9IE5VTEwgJiYgIWdfdXRmOF92YWxpZGF0ZSAocywgLTEsIE5VTEwpKSkgewotICAgICAgZ193YXJuaW5nICgiVHJ5aW5nIHRvIHNldCBzdHJpbmcgb24gJXMgZmllbGQgJyVzJywgYnV0IHN0cmluZyBpcyBub3QgIgotICAgICAgICAgICJ2YWxpZCBVVEYtOC4gUGxlYXNlIGZpbGUgYSBidWcuIiwKLSAgICAgICAgICBJU19UQUdMSVNUIChzdHJ1Y3R1cmUpID8gInRhZ2xpc3QiIDogInN0cnVjdHVyZSIsCi0gICAgICAgICAgZ19xdWFya190b19zdHJpbmcgKGZpZWxkLT5uYW1lKSk7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmZmllbGQtPnZhbHVlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAoZmllbGRfdmFsdWVfdHlwZSA9PSBHX1RZUEVfREFURSkpIHsKLSAgICBjb25zdCBHRGF0ZSAqZDsKLQotICAgIGQgPSBnX3ZhbHVlX2dldF9ib3hlZCAoJmZpZWxkLT52YWx1ZSk7Ci0gICAgLyogb25seSBjaGVjayBmb3IgTlVMTCBHRGF0ZXMgaW4gdGFnbGlzdHMsIGFzIHRoZXkgbWlnaHQgbWFrZSBzZW5zZQotICAgICAqIGluIG90aGVyLCBnZW5lcmljIHN0cnVjdHMgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoKElTX1RBR0xJU1QgKHN0cnVjdHVyZSkgJiYgZCA9PSBOVUxMKSkpIHsKLSAgICAgIEdJVF9HX1dBUk5JTkcgKCJUcnlpbmcgdG8gc2V0IE5VTEwgR0RhdGUgb24gZmllbGQgJyVzJyBvbiB0YWdsaXN0LiAiCi0gICAgICAgICAgIlBsZWFzZSBmaWxlIGEgYnVnLiIsIGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZC0+bmFtZSkpOwotICAgICAgZ192YWx1ZV91bnNldCAoJmZpZWxkLT52YWx1ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChHX1VOTElLRUxZIChkICE9IE5VTEwgJiYgIWdfZGF0ZV92YWxpZCAoZCkpKSB7Ci0gICAgICBnX3dhcm5pbmcKLSAgICAgICAgICAoIlRyeWluZyB0byBzZXQgaW52YWxpZCBHRGF0ZSBvbiAlcyBmaWVsZCAnJXMnLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iLAotICAgICAgICAgIElTX1RBR0xJU1QgKHN0cnVjdHVyZSkgPyAidGFnbGlzdCIgOiAic3RydWN0dXJlIiwKLSAgICAgICAgICBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGQtPm5hbWUpKTsKLSAgICAgIGdfdmFsdWVfdW5zZXQgKCZmaWVsZC0+dmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGYgPSBHU1RfU1RSVUNUVVJFX0ZJRUxEIChzdHJ1Y3R1cmUsIGkpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKGYtPm5hbWUgPT0gZmllbGQtPm5hbWUpKSB7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmZi0+dmFsdWUpOwotICAgICAgbWVtY3B5IChmLCBmaWVsZCwgc2l6ZW9mIChHc3RTdHJ1Y3R1cmVGaWVsZCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotCi0gIGdfYXJyYXlfYXBwZW5kX3ZhbCAoR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSksICpmaWVsZCk7Ci19Ci0KLS8qIElmIHRoZXJlIGlzIG5vIGZpZWxkIHdpdGggdGhlIGdpdmVuIElELCBOVUxMIGlzIHJldHVybmVkLgotICovCi1zdGF0aWMgR3N0U3RydWN0dXJlRmllbGQgKgotZ3N0X3N0cnVjdHVyZV9pZF9nZXRfZmllbGQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgR1F1YXJrIGZpZWxkX2lkKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0gIGd1aW50IGksIGxlbjsKLQotICBsZW4gPSBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKS0+bGVuOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGZpZWxkID0gR1NUX1NUUlVDVFVSRV9GSUVMRCAoc3RydWN0dXJlLCBpKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChmaWVsZC0+bmFtZSA9PSBmaWVsZF9pZCkpCi0gICAgICByZXR1cm4gZmllbGQ7Ci0gIH0KLQotICByZXR1cm4gTlVMTDsKLX0KLQotLyogSWYgdGhlcmUgaXMgbm8gZmllbGQgd2l0aCB0aGUgZ2l2ZW4gSUQsIE5VTEwgaXMgcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyBHc3RTdHJ1Y3R1cmVGaWVsZCAqCi1nc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBnc3Rfc3RydWN0dXJlX2lkX2dldF9maWVsZCAoc3RydWN0dXJlLAotICAgICAgZ19xdWFya19mcm9tX3N0cmluZyAoZmllbGRuYW1lKSk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWU6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBnZXQKLSAqCi0gKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIG5hbWUgQGZpZWxkbmFtZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgI0dWYWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICovCi1jb25zdCBHVmFsdWUgKgotZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOwotICBpZiAoZmllbGQgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gJmZpZWxkLT52YWx1ZTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkOiB0aGUgI0dRdWFyayBvZiB0aGUgZmllbGQgdG8gZ2V0Ci0gKgotICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCBHUXVhcmsgQGZpZWxkLgotICoKLSAqIFJldHVybnM6IHRoZSAjR1ZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUKLSAqICAgICAgICAgIGlkZW50aWZpZXIuCi0gKi8KLWNvbnN0IEdWYWx1ZSAqCi1nc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBHUXVhcmsgZmllbGQpCi17Ci0gIEdzdFN0cnVjdHVyZUZpZWxkICpnc2ZpZWxkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZ3NmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkKTsKLSAgaWYgKGdzZmllbGQgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gJmdzZmllbGQtPnZhbHVlOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgdG8gcmVtb3ZlCi0gKgotICogUmVtb3ZlcyB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gIElmIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbgotICogbmFtZSBkb2VzIG5vdCBleGlzdCwgdGhlIHN0cnVjdHVyZSBpcyB1bmNoYW5nZWQuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IGdjaGFyICogZmllbGRuYW1lKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0gIEdRdWFyayBpZDsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpKTsKLQotICBpZCA9IGdfcXVhcmtfZnJvbV9zdHJpbmcgKGZpZWxkbmFtZSk7Ci0gIGxlbiA9IEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLT5sZW47Ci0KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgZmllbGQgPSBHU1RfU1RSVUNUVVJFX0ZJRUxEIChzdHJ1Y3R1cmUsIGkpOwotCi0gICAgaWYgKGZpZWxkLT5uYW1lID09IGlkKSB7Ci0gICAgICBpZiAoR19JU19WQUxVRSAoJmZpZWxkLT52YWx1ZSkpIHsKLSAgICAgICAgZ192YWx1ZV91bnNldCAoJmZpZWxkLT52YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlKSA9Ci0gICAgICAgICAgZ19hcnJheV9yZW1vdmVfaW5kZXggKEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLCBpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHM6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byByZW1vdmUKLSAqIEAuLi46ICVOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBtb3JlIGZpZWxkbmFtZXMgdG8gcmVtb3ZlCi0gKgotICogUmVtb3ZlcyB0aGUgZmllbGRzIHdpdGggdGhlIGdpdmVuIG5hbWVzLiBJZiBhIGZpZWxkIGRvZXMgbm90IGV4aXN0LCB0aGUKLSAqIGFyZ3VtZW50IGlzIGlnbm9yZWQuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcyAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLQotICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMKTsKLSAgLyogbXV0YWJpbGl0eSBjaGVja2VkIGluIHJlbW92ZV9maWVsZCAqLwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmaWVsZG5hbWUpOwotICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0IChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSwgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzX3ZhbGlzdDoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHJlbW92ZQotICogQHZhcmFyZ3M6ICVOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBtb3JlIGZpZWxkbmFtZXMgdG8gcmVtb3ZlCi0gKgotICogdmFfbGlzdCBmb3JtIG9mIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcygpLgotICovCi12b2lkCi1nc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0IChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIHZhX2xpc3QgdmFyYXJncykKLXsKLSAgZ2NoYXIgKmZpZWxkID0gKGdjaGFyICopIGZpZWxkbmFtZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMKTsKLSAgLyogbXV0YWJpbGl0eSBjaGVja2VkIGluIHJlbW92ZV9maWVsZCAqLwotCi0gIHdoaWxlIChmaWVsZCkgewotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkKTsKLSAgICBmaWVsZCA9IHZhX2FyZyAodmFyYXJncywgY2hhciAqKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHM6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBSZW1vdmVzIGFsbCBmaWVsZHMgaW4gYSBHc3RTdHJ1Y3R1cmUuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotICBpbnQgaTsKLQotICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSkpOwotCi0gIGZvciAoaSA9IEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLT5sZW4gLSAxOyBpID49IDA7IGktLSkgewotICAgIGZpZWxkID0gR1NUX1NUUlVDVFVSRV9GSUVMRCAoc3RydWN0dXJlLCBpKTsKLQotICAgIGlmIChHX0lTX1ZBTFVFICgmZmllbGQtPnZhbHVlKSkgewotICAgICAgZ192YWx1ZV91bnNldCAoJmZpZWxkLT52YWx1ZSk7Ci0gICAgfQotICAgIEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpID0KLSAgICAgICAgZ19hcnJheV9yZW1vdmVfaW5kZXggKEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLCBpKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGU6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBmaWVsZAotICoKLSAqIEZpbmRzIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLCBhbmQgcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUKLSAqIHZhbHVlIGl0IGNvbnRhaW5zLiAgSWYgdGhlIGZpZWxkIGlzIG5vdCBmb3VuZCwgR19UWVBFX0lOVkFMSUQgaXMKLSAqIHJldHVybmVkLgotICoKLSAqIFJldHVybnM6IHRoZSAjR1ZhbHVlIG9mIHRoZSBmaWVsZAotICovCi1HVHlwZQotZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGRfdHlwZSAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBHX1RZUEVfSU5WQUxJRCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCwgR19UWVBFX0lOVkFMSUQpOwotCi0gIGZpZWxkID0gZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRuYW1lKTsKLSAgaWYgKGZpZWxkID09IE5VTEwpCi0gICAgcmV0dXJuIEdfVFlQRV9JTlZBTElEOwotCi0gIHJldHVybiBHX1ZBTFVFX1RZUEUgKCZmaWVsZC0+dmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHM6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBHZXQgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiB0aGUgc3RydWN0dXJlCi0gKi8KLWdpbnQKLWdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCAwKTsKLQotICByZXR1cm4gR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbjsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBnZXQgdGhlIG5hbWUgb2YKLSAqCi0gKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGdpdmVuIGZpZWxkIG51bWJlciwgY291bnRpbmcgZnJvbSAwIG9ud2FyZHMuCi0gKgotICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIGdpdmVuIGZpZWxkIG51bWJlcgotICovCi1jb25zdCBnY2hhciAqCi1nc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGd1aW50IGluZGV4KQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZGV4IDwgR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbiwgTlVMTCk7Ci0KLSAgZmllbGQgPSBHU1RfU1RSVUNUVVJFX0ZJRUxEIChzdHJ1Y3R1cmUsIGluZGV4KTsKLQotICByZXR1cm4gZ19xdWFya190b19zdHJpbmcgKGZpZWxkLT5uYW1lKTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2ZvcmVhY2g6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IGEgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBmaWVsZAotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiBwcml2YXRlIGRhdGEKLSAqCi0gKiBDYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBmaWVsZCBpbiB0aGUgI0dzdFN0cnVjdHVyZS4gVGhlCi0gKiBmdW5jdGlvbiBtdXN0IG5vdCBtb2RpZnkgdGhlIGZpZWxkcy4gQWxzbyBzZWUgZ3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2UoKQotICogYW5kIGdzdF9zdHJ1Y3R1cmVfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UoKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gcmV0dXJucyAlVFJVRSBGb3IgZWFjaCBvZiB0aGUgZmllbGRzLAotICogJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIEdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ3VpbnQgaSwgbGVuOwotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0gIGdib29sZWFuIHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZ1bmMgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGxlbiA9IEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLT5sZW47Ci0KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgZmllbGQgPSBHU1RfU1RSVUNUVVJFX0ZJRUxEIChzdHJ1Y3R1cmUsIGkpOwotCi0gICAgcmV0ID0gZnVuYyAoZmllbGQtPm5hbWUsICZmaWVsZC0+dmFsdWUsIHVzZXJfZGF0YSk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFyZXQpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2U6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IGEgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBmaWVsZAotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiBwcml2YXRlIGRhdGEKLSAqCi0gKiBDYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBmaWVsZCBpbiB0aGUgI0dzdFN0cnVjdHVyZS4gSW4KLSAqIGNvbnRyYXN0IHRvIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCgpLCB0aGUgZnVuY3Rpb24gbWF5IG1vZGlmeSBidXQgbm90IGRlbGV0ZSB0aGUKLSAqIGZpZWxkcy4gVGhlIHN0cnVjdHVyZSBtdXN0IGJlIG11dGFibGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIHJldHVybnMgJVRSVUUgRm9yIGVhY2ggb2YgdGhlIGZpZWxkcywKLSAqICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIEdzdFN0cnVjdHVyZU1hcEZ1bmMgZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBndWludCBpLCBsZW47Ci0gIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnVuYyAhPSBOVUxMLCBGQUxTRSk7Ci0gIGxlbiA9IEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpLT5sZW47Ci0KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgZmllbGQgPSBHU1RfU1RSVUNUVVJFX0ZJRUxEIChzdHJ1Y3R1cmUsIGkpOwotCi0gICAgcmV0ID0gZnVuYyAoZmllbGQtPm5hbWUsICZmaWVsZC0+dmFsdWUsIHVzZXJfZGF0YSk7Ci0gICAgaWYgKCFyZXQpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZnVuYzogKHNjb3BlIGNhbGwpOiBhIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZmllbGQKLSAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogcHJpdmF0ZSBkYXRhCi0gKgotICogQ2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggZmllbGQgaW4gdGhlICNHc3RTdHJ1Y3R1cmUuIEluCi0gKiBjb250cmFzdCB0byBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goKSwgdGhlIGZ1bmN0aW9uIG1heSBtb2RpZnkgdGhlIGZpZWxkcy4KLSAqIEluIGNvbnRyYXN0IHRvIGdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlKCksIHRoZSBmaWVsZCBpcyByZW1vdmVkIGZyb20KLSAqIHRoZSBzdHJ1Y3R1cmUgaWYgJUZBTFNFIGlzIHJldHVybmVkIGZyb20gdGhlIGZ1bmN0aW9uLgotICogVGhlIHN0cnVjdHVyZSBtdXN0IGJlIG11dGFibGUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgR3N0U3RydWN0dXJlRmlsdGVyTWFwRnVuYyBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGd1aW50IGksIGxlbjsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZnVuYyAhPSBOVUxMKTsKLSAgbGVuID0gR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbjsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGVuOykgewotICAgIGZpZWxkID0gR1NUX1NUUlVDVFVSRV9GSUVMRCAoc3RydWN0dXJlLCBpKTsKLQotICAgIHJldCA9IGZ1bmMgKGZpZWxkLT5uYW1lLCAmZmllbGQtPnZhbHVlLCB1c2VyX2RhdGEpOwotCi0gICAgaWYgKCFyZXQpIHsKLSAgICAgIGlmIChHX0lTX1ZBTFVFICgmZmllbGQtPnZhbHVlKSkgewotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmZmllbGQtPnZhbHVlKTsKLSAgICAgIH0KLSAgICAgIEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUpID0KLSAgICAgICAgICBnX2FycmF5X3JlbW92ZV9pbmRleCAoR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSksIGkpOwotICAgICAgbGVuID0gR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbjsKLSAgICB9IGVsc2UgewotICAgICAgaSsrOwotICAgIH0KLSAgfQotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGQ6ICNHUXVhcmsgb2YgdGhlIGZpZWxkIG5hbWUKLSAqCi0gKiBDaGVjayBpZiBAc3RydWN0dXJlIGNvbnRhaW5zIGEgZmllbGQgbmFtZWQgQGZpZWxkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBHUXVhcmsgZmllbGQpCi17Ci0gIEdzdFN0cnVjdHVyZUZpZWxkICpmOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGQgIT0gMCwgRkFMU0UpOwotCi0gIGYgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZCk7Ci0KLSAgcmV0dXJuIChmICE9IE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiBhIGZpZWxkCi0gKgotICogQ2hlY2sgaWYgQHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIG5hbWVkIEBmaWVsZG5hbWUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUKLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGQgKHN0cnVjdHVyZSwKLSAgICAgIGdfcXVhcmtfZnJvbV9zdHJpbmcgKGZpZWxkbmFtZSkpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGQ6ICNHUXVhcmsgb2YgdGhlIGZpZWxkIG5hbWUKLSAqIEB0eXBlOiB0aGUgdHlwZSBvZiBhIHZhbHVlCi0gKgotICogQ2hlY2sgaWYgQHN0cnVjdHVyZSBjb250YWlucyBhIGZpZWxkIG5hbWVkIEBmaWVsZCBhbmQgd2l0aCBHVHlwZSBAdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc3RydWN0dXJlIGNvbnRhaW5zIGEgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdHlwZQotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9pZF9oYXNfZmllbGRfdHlwZWQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBHUXVhcmsgZmllbGQsIEdUeXBlIHR5cGUpCi17Ci0gIEdzdFN0cnVjdHVyZUZpZWxkICpmOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGQgIT0gMCwgRkFMU0UpOwotCi0gIGYgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZCk7Ci0gIGlmIChmID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiAoR19WQUxVRV9UWVBFICgmZi0+dmFsdWUpID09IHR5cGUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiBhIGZpZWxkCi0gKiBAdHlwZTogdGhlIHR5cGUgb2YgYSB2YWx1ZQotICoKLSAqIENoZWNrIGlmIEBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCBuYW1lZCBAZmllbGRuYW1lIGFuZCB3aXRoIEdUeXBlIEB0eXBlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCB0eXBlCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCBHVHlwZSB0eXBlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkIChzdHJ1Y3R1cmUsCi0gICAgICBnX3F1YXJrX2Zyb21fc3RyaW5nIChmaWVsZG5hbWUpLCB0eXBlKTsKLX0KLQotLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiBhIGZpZWxkCi0gKiBAdmFsdWU6IChvdXQpOiBhIHBvaW50ZXIgdG8gYSAjZ2Jvb2xlYW4gdG8gc2V0Ci0gKgotICogU2V0cyB0aGUgYm9vbGVhbiBwb2ludGVkIHRvIGJ5IEB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUKLSAqIGdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCi0gKiBhbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotICogd2l0aCBAZmllbGRuYW1lIG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBib29sZWFuLCB0aGlzCi0gKiBmdW5jdGlvbiByZXR1cm5zICVGQUxTRS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgZ2Jvb2xlYW4gKiB2YWx1ZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7Ci0KLSAgaWYgKGZpZWxkID09IE5VTEwgfHwgR19WQUxVRV9UWVBFICgmZmllbGQtPnZhbHVlKSAhPSBHX1RZUEVfQk9PTEVBTikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgKnZhbHVlID0gZ3N0X2dfdmFsdWVfZ2V0X2Jvb2xlYW5fdW5jaGVja2VkICgmZmllbGQtPnZhbHVlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2dldF9pbnQ6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKLSAqIEB2YWx1ZTogKG91dCk6IGEgcG9pbnRlciB0byBhbiBpbnQgdG8gc2V0Ci0gKgotICogU2V0cyB0aGUgaW50IHBvaW50ZWQgdG8gYnkgQHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQotICogZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMKLSAqIGFuZCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgc2V0IGNvcnJlY3RseS4gSWYgdGhlcmUgd2FzIG5vIGZpZWxkCi0gKiB3aXRoIEBmaWVsZG5hbWUgb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhbiBpbnQsIHRoaXMgZnVuY3Rpb24KLSAqIHJldHVybnMgJUZBTFNFLgotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIGdpbnQgKiB2YWx1ZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKLQotICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7Ci0KLSAgaWYgKGZpZWxkID09IE5VTEwgfHwgR19WQUxVRV9UWVBFICgmZmllbGQtPnZhbHVlKSAhPSBHX1RZUEVfSU5UKQotICAgIHJldHVybiBGQUxTRTsKLQotICAqdmFsdWUgPSBnc3RfZ192YWx1ZV9nZXRfaW50X3VuY2hlY2tlZCAoJmZpZWxkLT52YWx1ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9nZXRfdWludDoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAotICogQHZhbHVlOiAob3V0KTogYSBwb2ludGVyIHRvIGEgdWludCB0byBzZXQKLSAqCi0gKiBTZXRzIHRoZSB1aW50IHBvaW50ZWQgdG8gYnkgQHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQotICogZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMKLSAqIGFuZCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgc2V0IGNvcnJlY3RseS4gSWYgdGhlcmUgd2FzIG5vIGZpZWxkCi0gKiB3aXRoIEBmaWVsZG5hbWUgb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIHVpbnQsIHRoaXMgZnVuY3Rpb24KLSAqIHJldHVybnMgJUZBTFNFLgotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCBndWludCAqIHZhbHVlKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGZpZWxkID0gZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRuYW1lKTsKLQotICBpZiAoZmllbGQgPT0gTlVMTCB8fCBHX1ZBTFVFX1RZUEUgKCZmaWVsZC0+dmFsdWUpICE9IEdfVFlQRV9VSU5UKQotICAgIHJldHVybiBGQUxTRTsKLQotICAqdmFsdWUgPSBnc3RfZ192YWx1ZV9nZXRfdWludF91bmNoZWNrZWQgKCZmaWVsZC0+dmFsdWUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludDY0OgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRuYW1lOiB0aGUgbmFtZSBvZiBhIGZpZWxkCi0gKiBAdmFsdWU6IChvdXQpOiBhIHBvaW50ZXIgdG8gYSAjZ2ludDY0IHRvIHNldAotICoKLSAqIFNldHMgdGhlICNnaW50NjQgcG9pbnRlZCB0byBieSBAdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCi0gKiBnaXZlbiBmaWVsZC4gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCi0gKiBhbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotICogd2l0aCBAZmllbGRuYW1lIG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSAjZ2ludDY0LCB0aGlzIGZ1bmN0aW9uCi0gKiByZXR1cm5zICVGQUxTRS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2dldF9pbnQ2NCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCBnaW50NjQgKiB2YWx1ZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKLQotICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7Ci0KLSAgaWYgKGZpZWxkID09IE5VTEwgfHwgR19WQUxVRV9UWVBFICgmZmllbGQtPnZhbHVlKSAhPSBHX1RZUEVfSU5UNjQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gICp2YWx1ZSA9IGdzdF9nX3ZhbHVlX2dldF9pbnQ2NF91bmNoZWNrZWQgKCZmaWVsZC0+dmFsdWUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NDoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAotICogQHZhbHVlOiAob3V0KTogYSBwb2ludGVyIHRvIGEgI2d1aW50NjQgdG8gc2V0Ci0gKgotICogU2V0cyB0aGUgI2d1aW50NjQgcG9pbnRlZCB0byBieSBAdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCi0gKiBnaXZlbiBmaWVsZC4gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzCi0gKiBhbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotICogd2l0aCBAZmllbGRuYW1lIG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSAjZ3VpbnQ2NCwgdGhpcyBmdW5jdGlvbgotICogcmV0dXJucyAlRkFMU0UuCi0gKgotICogU2luY2U6IDEuNAotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIGd1aW50NjQgKiB2YWx1ZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKLQotICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7Ci0KLSAgaWYgKGZpZWxkID09IE5VTEwgfHwgR19WQUxVRV9UWVBFICgmZmllbGQtPnZhbHVlKSAhPSBHX1RZUEVfVUlOVDY0KQotICAgIHJldHVybiBGQUxTRTsKLQotICAqdmFsdWUgPSBnc3RfZ192YWx1ZV9nZXRfdWludDY0X3VuY2hlY2tlZCAoJmZpZWxkLT52YWx1ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAotICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpOiBhIHBvaW50ZXIgdG8gYSAjR0RhdGUgdG8gc2V0Ci0gKgotICogU2V0cyB0aGUgZGF0ZSBwb2ludGVkIHRvIGJ5IEB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRlIG9mIHRoZQotICogZ2l2ZW4gZmllbGQuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBmaWVsZCBleGlzdHMKLSAqIGFuZCBoYXMgdGhlIGNvcnJlY3QgdHlwZS4KLSAqCi0gKiBPbiBzdWNjZXNzIEB2YWx1ZSB3aWxsIHBvaW50IHRvIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGRhdGUgd2hpY2gKLSAqIHNob3VsZCBiZSBmcmVlZCB3aXRoIGdfZGF0ZV9mcmVlKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkIChub3RlOiB0aGlzIGlzCi0gKiBpbmNvbnNpc3RlbnQgd2l0aCBlLmcuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZygpIHdoaWNoIGRvZXNuJ3QgcmV0dXJuIGEKLSAqIGNvcHkgb2YgdGhlIHN0cmluZykuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotICogd2l0aCBAZmllbGRuYW1lIG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBkYXRhLCB0aGlzIGZ1bmN0aW9uCi0gKiByZXR1cm5zICVGQUxTRS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGUgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsCi0gICAgR0RhdGUgKiogdmFsdWUpCi17Ci0gIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOwotCi0gIGlmIChmaWVsZCA9PSBOVUxMIHx8IEdfVkFMVUVfVFlQRSAoJmZpZWxkLT52YWx1ZSkgIT0gR19UWVBFX0RBVEUpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIEZJWE1FOiAyLjAgZ192YWx1ZV9kdXBfYm94ZWQoKSAtPiBnX3ZhbHVlX2dldF9ib3hlZCgpICovCi0gICp2YWx1ZSA9IGdfdmFsdWVfZHVwX2JveGVkICgmZmllbGQtPnZhbHVlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWU6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKLSAqIEB2YWx1ZTogKG91dCBjYWxsZWUtYWxsb2NhdGVzKTogYSBwb2ludGVyIHRvIGEgI0dzdERhdGVUaW1lIHRvIHNldAotICoKLSAqIFNldHMgdGhlIGRhdGV0aW1lIHBvaW50ZWQgdG8gYnkgQHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGV0aW1lIG9mIHRoZQotICogZ2l2ZW4gZmllbGQuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cwotICogYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgotICoKLSAqIE9uIHN1Y2Nlc3MgQHZhbHVlIHdpbGwgcG9pbnQgdG8gYSByZWZlcmVuY2Ugb2YgdGhlIGRhdGV0aW1lIHdoaWNoCi0gKiBzaG91bGQgYmUgdW5yZWZmZWQgd2l0aCBnc3RfZGF0ZV90aW1lX3VucmVmKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkCi0gKiAobm90ZTogdGhpcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCBlLmcuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZygpCi0gKiB3aGljaCBkb2Vzbid0IHJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZykuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotICogd2l0aCBAZmllbGRuYW1lIG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYSBkYXRhLCB0aGlzIGZ1bmN0aW9uCi0gKiByZXR1cm5zICVGQUxTRS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCBHc3REYXRlVGltZSAqKiB2YWx1ZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsKLQotICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7Ci0KLSAgaWYgKGZpZWxkID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIUdTVF9WQUxVRV9IT0xEU19EQVRFX1RJTUUgKCZmaWVsZC0+dmFsdWUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBGSVhNRSAyLjA6IGdfdmFsdWVfZHVwX2JveGVkKCkgLT4gZ192YWx1ZV9nZXRfYm94ZWQoKSAqLwotICAqdmFsdWUgPSBnX3ZhbHVlX2R1cF9ib3hlZCAoJmZpZWxkLT52YWx1ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAotICogQHZhbHVlOiAob3V0KTogYSBwb2ludGVyIHRvIGEgI0dzdENsb2NrVGltZSB0byBzZXQKLSAqCi0gKiBTZXRzIHRoZSBjbG9jayB0aW1lIHBvaW50ZWQgdG8gYnkgQHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNsb2NrIHRpbWUKLSAqIG9mIHRoZSBnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cwotICogYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKLSAqIHdpdGggQGZpZWxkbmFtZSBvciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgI0dzdENsb2NrVGltZSwgdGhpcwotICogZnVuY3Rpb24gcmV0dXJucyAlRkFMU0UuCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIEdzdENsb2NrVGltZSAqIHZhbHVlKQotewotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0IChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSwgdmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAotICogQHZhbHVlOiAob3V0KTogYSBwb2ludGVyIHRvIGEgZ2RvdWJsZSB0byBzZXQKLSAqCi0gKiBTZXRzIHRoZSBkb3VibGUgcG9pbnRlZCB0byBieSBAdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCi0gKiBnaXZlbiBmaWVsZC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cwotICogYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKLSAqIHdpdGggQGZpZWxkbmFtZSBvciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgZG91YmxlLCB0aGlzCi0gKiBmdW5jdGlvbiByZXR1cm5zICVGQUxTRS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZSAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGdjaGFyICogZmllbGRuYW1lLCBnZG91YmxlICogdmFsdWUpCi17Ci0gIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOwotCi0gIGlmIChmaWVsZCA9PSBOVUxMIHx8IEdfVkFMVUVfVFlQRSAoJmZpZWxkLT52YWx1ZSkgIT0gR19UWVBFX0RPVUJMRSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgKnZhbHVlID0gZ3N0X2dfdmFsdWVfZ2V0X2RvdWJsZV91bmNoZWNrZWQgKCZmaWVsZC0+dmFsdWUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZzoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAotICoKLSAqIEZpbmRzIHRoZSBmaWVsZCBjb3JyZXNwb25kaW5nIHRvIEBmaWVsZG5hbWUsIGFuZCByZXR1cm5zIHRoZSBzdHJpbmcKLSAqIGNvbnRhaW5lZCBpbiB0aGUgZmllbGQncyB2YWx1ZS4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nCi0gKiBzdXJlIHRoZSBmaWVsZCBleGlzdHMgYW5kIGhhcyB0aGUgY29ycmVjdCB0eXBlLgotICoKLSAqIFRoZSBzdHJpbmcgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgYW5kIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIG5leHQKLSAqIGNhbGwgdG8gYSBnc3Rfc3RydWN0dXJlXyooKSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgb3IgJU5VTEwgd2hlbiB0aGUKLSAqIGZpZWxkIGRpZCBub3QgZXhpc3Qgb3IgZGlkIG5vdCBjb250YWluIGEgc3RyaW5nLgotICovCi1jb25zdCBnY2hhciAqCi1nc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSkKLXsKLSAgR3N0U3RydWN0dXJlRmllbGQgKmZpZWxkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZG5hbWUpOwotCi0gIGlmIChmaWVsZCA9PSBOVUxMIHx8IEdfVkFMVUVfVFlQRSAoJmZpZWxkLT52YWx1ZSkgIT0gR19UWVBFX1NUUklORykKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gZ3N0X2dfdmFsdWVfZ2V0X3N0cmluZ191bmNoZWNrZWQgKCZmaWVsZC0+dmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW06Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKLSAqIEBlbnVtdHlwZTogdGhlIGVudW0gdHlwZSBvZiBhIGZpZWxkCi0gKiBAdmFsdWU6IChvdXQpOiBhIHBvaW50ZXIgdG8gYW4gaW50IHRvIHNldAotICoKLSAqIFNldHMgdGhlIGludCBwb2ludGVkIHRvIGJ5IEB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUKLSAqIGdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGUgZmllbGQgZXhpc3RzLAotICogaGFzIHRoZSBjb3JyZWN0IHR5cGUgYW5kIHRoYXQgdGhlIGVudW10eXBlIGlzIGNvcnJlY3QuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHNldCBjb3JyZWN0bHkuIElmIHRoZXJlIHdhcyBubyBmaWVsZAotICogd2l0aCBAZmllbGRuYW1lIG9yIHRoZSBleGlzdGluZyBmaWVsZCBkaWQgbm90IGNvbnRhaW4gYW4gZW51bSBvZiB0aGUgZ2l2ZW4KLSAqIHR5cGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAlRkFMU0UuCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2dldF9lbnVtIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWVsZG5hbWUsIEdUeXBlIGVudW10eXBlLCBnaW50ICogdmFsdWUpCi17Ci0gIEdzdFN0cnVjdHVyZUZpZWxkICpmaWVsZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RydWN0dXJlICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpZWxkbmFtZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnVtdHlwZSAhPSBHX1RZUEVfSU5WQUxJRCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGZpZWxkID0gZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRuYW1lKTsKLQotICBpZiAoZmllbGQgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghR19UWVBFX0NIRUNLX1ZBTFVFX1RZUEUgKCZmaWVsZC0+dmFsdWUsIGVudW10eXBlKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgKnZhbHVlID0gZ192YWx1ZV9nZXRfZW51bSAoJmZpZWxkLT52YWx1ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb246Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZG5hbWU6IHRoZSBuYW1lIG9mIGEgZmllbGQKLSAqIEB2YWx1ZV9udW1lcmF0b3I6IChvdXQpOiBhIHBvaW50ZXIgdG8gYW4gaW50IHRvIHNldAotICogQHZhbHVlX2Rlbm9taW5hdG9yOiAob3V0KTogYSBwb2ludGVyIHRvIGFuIGludCB0byBzZXQKLSAqCi0gKiBTZXRzIHRoZSBpbnRlZ2VycyBwb2ludGVkIHRvIGJ5IEB2YWx1ZV9udW1lcmF0b3IgYW5kIEB2YWx1ZV9kZW5vbWluYXRvcgotICogY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGZpZWxkLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlCi0gKiBmb3IgbWFraW5nIHN1cmUgdGhlIGZpZWxkIGV4aXN0cyBhbmQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlcyBjb3VsZCBiZSBzZXQgY29ycmVjdGx5LiBJZiB0aGVyZSB3YXMgbm8gZmllbGQKLSAqIHdpdGggQGZpZWxkbmFtZSBvciB0aGUgZXhpc3RpbmcgZmllbGQgZGlkIG5vdCBjb250YWluIGEgR3N0RnJhY3Rpb24sIHRoaXMKLSAqIGZ1bmN0aW9uIHJldHVybnMgJUZBTFNFLgotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgZ2ludCAqIHZhbHVlX251bWVyYXRvciwgZ2ludCAqIHZhbHVlX2Rlbm9taW5hdG9yKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWVfbnVtZXJhdG9yICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlX2Rlbm9taW5hdG9yICE9IE5VTEwsIEZBTFNFKTsKLQotICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkbmFtZSk7Ci0KLSAgaWYgKGZpZWxkID09IE5VTEwgfHwgR19WQUxVRV9UWVBFICgmZmllbGQtPnZhbHVlKSAhPSBHU1RfVFlQRV9GUkFDVElPTikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgKnZhbHVlX251bWVyYXRvciA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yICgmZmllbGQtPnZhbHVlKTsKLSAgKnZhbHVlX2Rlbm9taW5hdG9yID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAoJmZpZWxkLT52YWx1ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9nZXRfZmxhZ3NldDoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkbmFtZTogdGhlIG5hbWUgb2YgYSBmaWVsZAotICogQHZhbHVlX2ZsYWdzOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgcG9pbnRlciB0byBhIGd1aW50IGZvciB0aGUgZmxhZ3MgZmllbGQKLSAqIEB2YWx1ZV9tYXNrOiAob3V0KSAoYWxsb3ctbm9uZSk6IGEgcG9pbnRlciB0byBhIGd1aW50IGZvciB0aGUgbWFzayBmaWVsZAotICoKLSAqIFJlYWQgdGhlIEdzdEZsYWdTZXQgZmxhZ3MgYW5kIG1hc2sgb3V0IG9mIHRoZSBzdHJ1Y3R1cmUgaW50byB0aGUKLSAqIHByb3ZpZGVkIHBvaW50ZXJzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZXMgY291bGQgYmUgc2V0IGNvcnJlY3RseS4gSWYgdGhlcmUgd2FzIG5vIGZpZWxkCi0gKiB3aXRoIEBmaWVsZG5hbWUgb3IgdGhlIGV4aXN0aW5nIGZpZWxkIGRpZCBub3QgY29udGFpbiBhIEdzdEZsYWdTZXQsIHRoaXMKLSAqIGZ1bmN0aW9uIHJldHVybnMgJUZBTFNFLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfZ2V0X2ZsYWdzZXQgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBnY2hhciAqIGZpZWxkbmFtZSwgZ3VpbnQgKiB2YWx1ZV9mbGFncywgZ3VpbnQgKiB2YWx1ZV9tYXNrKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWVsZG5hbWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGZpZWxkID0gZ3N0X3N0cnVjdHVyZV9nZXRfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRuYW1lKTsKLQotICBpZiAoZmllbGQgPT0gTlVMTCB8fCAhR1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUICgmZmllbGQtPnZhbHVlKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKHZhbHVlX2ZsYWdzKQotICAgICp2YWx1ZV9mbGFncyA9IGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFncyAoJmZpZWxkLT52YWx1ZSk7Ci0gIGlmICh2YWx1ZV9tYXNrKQotICAgICp2YWx1ZV9tYXNrID0gZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sgKCZmaWVsZC0+dmFsdWUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3RydWN0dXJlQWJicmV2aWF0aW9uCi17Ci0gIGNvbnN0IGdjaGFyICp0eXBlX25hbWU7Ci0gIEdUeXBlIHR5cGU7Ci19Ci1Hc3RTdHJ1Y3R1cmVBYmJyZXZpYXRpb247Ci0KLS8qIHJldHVybiBhIGNvcHkgb2YgYW4gYXJyYXkgb2YgR3N0U3RydWN0dXJlQWJicmV2aWF0aW9uIGNvbnRhaW5pbmcgYWxsIHRoZQotICoga25vd24gdHlwZV9zdHJpbmcsIEdUeXBlIG1hcHMsIGluY2x1ZGluZyBhYmJyZXZpYXRpb25zIGZvciBjb21tb24gdHlwZXMgKi8KLXN0YXRpYyBHc3RTdHJ1Y3R1cmVBYmJyZXZpYXRpb24gKgotZ3N0X3N0cnVjdHVyZV9nZXRfYWJicnMgKGdpbnQgKiBuX2FiYnJzKQotewotICBzdGF0aWMgR3N0U3RydWN0dXJlQWJicmV2aWF0aW9uICphYmJycyA9IE5VTEw7Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBudW0gPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJm51bSkpIHsKLSAgICAvKiBkeW5hbWljYWxseSBnZW5lcmF0ZSB0aGUgYXJyYXkgKi8KLSAgICBnc2l6ZSBfbnVtOwotICAgIEdzdFN0cnVjdHVyZUFiYnJldmlhdGlvbiBkeW5fYWJicnNbXSA9IHsKLSAgICAgIHsiaW50IiwgR19UWVBFX0lOVH0KLSAgICAgICwKLSAgICAgIHsiaSIsIEdfVFlQRV9JTlR9Ci0gICAgICAsCi0gICAgICB7InVpbnQiLCBHX1RZUEVfVUlOVH0KLSAgICAgICwKLSAgICAgIHsidSIsIEdfVFlQRV9VSU5UfQotICAgICAgLAotICAgICAgeyJmbG9hdCIsIEdfVFlQRV9GTE9BVH0KLSAgICAgICwKLSAgICAgIHsiZiIsIEdfVFlQRV9GTE9BVH0KLSAgICAgICwKLSAgICAgIHsiZG91YmxlIiwgR19UWVBFX0RPVUJMRX0KLSAgICAgICwKLSAgICAgIHsiZCIsIEdfVFlQRV9ET1VCTEV9Ci0gICAgICAsCi0gICAgICB7ImJ1ZmZlciIsIEdTVF9UWVBFX0JVRkZFUn0KLSAgICAgICwKLSAgICAgIHsiZnJhY3Rpb24iLCBHU1RfVFlQRV9GUkFDVElPTn0KLSAgICAgICwKLSAgICAgIHsiYm9vbGVhbiIsIEdfVFlQRV9CT09MRUFOfQotICAgICAgLAotICAgICAgeyJib29sIiwgR19UWVBFX0JPT0xFQU59Ci0gICAgICAsCi0gICAgICB7ImIiLCBHX1RZUEVfQk9PTEVBTn0KLSAgICAgICwKLSAgICAgIHsic3RyaW5nIiwgR19UWVBFX1NUUklOR30KLSAgICAgICwKLSAgICAgIHsic3RyIiwgR19UWVBFX1NUUklOR30KLSAgICAgICwKLSAgICAgIHsicyIsIEdfVFlQRV9TVFJJTkd9Ci0gICAgICAsCi0gICAgICB7InN0cnVjdHVyZSIsIEdTVF9UWVBFX1NUUlVDVFVSRX0KLSAgICAgICwKLSAgICAgIHsiZGF0ZSIsIEdfVFlQRV9EQVRFfQotICAgICAgLAotICAgICAgeyJkYXRldGltZSIsIEdTVF9UWVBFX0RBVEVfVElNRX0KLSAgICAgICwKLSAgICAgIHsiYml0bWFzayIsIEdTVF9UWVBFX0JJVE1BU0t9Ci0gICAgICAsCi0gICAgICB7InNhbXBsZSIsIEdTVF9UWVBFX1NBTVBMRX0KLSAgICAgICwKLSAgICAgIHsidGFnbGlzdCIsIEdTVF9UWVBFX1RBR19MSVNUfQotICAgIH07Ci0gICAgX251bSA9IEdfTl9FTEVNRU5UUyAoZHluX2FiYnJzKTsKLSAgICAvKiBwZXJtYW5lbnRseSBhbGxvY2F0ZSBhbmQgY29weSB0aGUgYXJyYXkgbm93ICovCi0gICAgYWJicnMgPSBnX25ldzAgKEdzdFN0cnVjdHVyZUFiYnJldmlhdGlvbiwgX251bSk7Ci0gICAgbWVtY3B5IChhYmJycywgZHluX2FiYnJzLCBzaXplb2YgKEdzdFN0cnVjdHVyZUFiYnJldmlhdGlvbikgKiBfbnVtKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJm51bSwgX251bSk7Ci0gIH0KLSAgKm5fYWJicnMgPSBudW07Ci0KLSAgcmV0dXJuIGFiYnJzOwotfQotCi0vKiBnaXZlbiBhIHR5cGVfbmFtZSB0aGF0IGNvdWxkIGJlIGEgdHlwZSBhYmJyZXZpYXRpb24gb3IgYSByZWdpc3RlcmVkIEdUeXBlLAotICogcmV0dXJuIGEgbWF0Y2hpbmcgR1R5cGUgKi8KLXN0YXRpYyBHVHlwZQotZ3N0X3N0cnVjdHVyZV9ndHlwZV9mcm9tX2FiYnIgKGNvbnN0IGNoYXIgKnR5cGVfbmFtZSkKLXsKLSAgaW50IGk7Ci0gIEdzdFN0cnVjdHVyZUFiYnJldmlhdGlvbiAqYWJicnM7Ci0gIGdpbnQgbl9hYmJyczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodHlwZV9uYW1lICE9IE5VTEwsIEdfVFlQRV9JTlZBTElEKTsKLQotICBhYmJycyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2FiYnJzICgmbl9hYmJycyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5fYWJicnM7IGkrKykgewotICAgIGlmIChzdHJjbXAgKHR5cGVfbmFtZSwgYWJicnNbaV0udHlwZV9uYW1lKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gYWJicnNbaV0udHlwZTsKLSAgICB9Ci0gIH0KLQotICAvKiB0aGlzIGlzIHRoZSBmYWxsYmFjayAqLwotICByZXR1cm4gZ190eXBlX2Zyb21fbmFtZSAodHlwZV9uYW1lKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotZ3N0X3N0cnVjdHVyZV90b19hYmJyIChHVHlwZSB0eXBlKQotewotICBpbnQgaTsKLSAgR3N0U3RydWN0dXJlQWJicmV2aWF0aW9uICphYmJyczsKLSAgZ2ludCBuX2FiYnJzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0eXBlICE9IEdfVFlQRV9JTlZBTElELCBOVUxMKTsKLQotICBhYmJycyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2FiYnJzICgmbl9hYmJycyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5fYWJicnM7IGkrKykgewotICAgIGlmICh0eXBlID09IGFiYnJzW2ldLnR5cGUpIHsKLSAgICAgIHJldHVybiBhYmJyc1tpXS50eXBlX25hbWU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGdfdHlwZV9uYW1lICh0eXBlKTsKLX0KLQotc3RhdGljIEdUeXBlCi1nc3Rfc3RydWN0dXJlX3ZhbHVlX2dldF9nZW5lcmljX3R5cGUgKGNvbnN0IEdWYWx1ZSAqIHZhbCkKLXsKLSAgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSA9PSBHU1RfVFlQRV9MSVNUCi0gICAgICB8fCBHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfQVJSQVkpIHsKLSAgICBHQXJyYXkgKmFycmF5ID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKHZhbCk7Ci0KLSAgICBpZiAoYXJyYXktPmxlbiA+IDApIHsKLSAgICAgIEdWYWx1ZSAqdmFsdWUgPSAmZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwgMCk7Ci0KLSAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX3ZhbHVlX2dldF9nZW5lcmljX3R5cGUgKHZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIEdfVFlQRV9JTlQ7Ci0gICAgfQotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSA9PSBHU1RfVFlQRV9JTlRfUkFOR0UpIHsKLSAgICByZXR1cm4gR19UWVBFX0lOVDsKLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfSU5UNjRfUkFOR0UpIHsKLSAgICByZXR1cm4gR19UWVBFX0lOVDY0OwotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSA9PSBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpIHsKLSAgICByZXR1cm4gR19UWVBFX0RPVUJMRTsKLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpIHsKLSAgICByZXR1cm4gR1NUX1RZUEVfRlJBQ1RJT047Ci0gIH0KLSAgcmV0dXJuIEdfVkFMVUVfVFlQRSAodmFsKTsKLX0KLQotZ2Jvb2xlYW4KLXByaXZfZ3N0X3N0cnVjdHVyZV9hcHBlbmRfdG9fZ3N0cmluZyAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIEdTdHJpbmcgKiBzKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0gIGd1aW50IGksIGxlbjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgbGVuID0gR1NUX1NUUlVDVFVSRV9GSUVMRFMgKHN0cnVjdHVyZSktPmxlbjsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgY2hhciAqdDsKLSAgICBHVHlwZSB0eXBlOwotCi0gICAgZmllbGQgPSBHU1RfU1RSVUNUVVJFX0ZJRUxEIChzdHJ1Y3R1cmUsIGkpOwotCi0gICAgdCA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZmaWVsZC0+dmFsdWUpOwotICAgIHR5cGUgPSBnc3Rfc3RydWN0dXJlX3ZhbHVlX2dldF9nZW5lcmljX3R5cGUgKCZmaWVsZC0+dmFsdWUpOwotCi0gICAgZ19zdHJpbmdfYXBwZW5kX2xlbiAocywgIiwgIiwgMik7Ci0gICAgLyogRklYTUU6IGRvIHdlIG5lZWQgdG8gZXNjYXBlIGZpZWxkbmFtZXM/ICovCi0gICAgZ19zdHJpbmdfYXBwZW5kIChzLCBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGQtPm5hbWUpKTsKLSAgICBnX3N0cmluZ19hcHBlbmRfbGVuIChzLCAiPSgiLCAyKTsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHMsIGdzdF9zdHJ1Y3R1cmVfdG9fYWJiciAodHlwZSkpOwotICAgIGdfc3RyaW5nX2FwcGVuZF9jIChzLCAnKScpOwotICAgIGlmICh0KSB7Ci0gICAgICBnX3N0cmluZ19hcHBlbmQgKHMsIHQpOwotICAgICAgZ19mcmVlICh0KTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcgKCJObyB2YWx1ZSB0cmFuc2Zvcm0gdG8gc2VyaWFsaXplIGZpZWxkICclcycgb2YgdHlwZSAnJXMnIiwKLSAgICAgICAgICBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGQtPm5hbWUpLCBnc3Rfc3RydWN0dXJlX3RvX2FiYnIgKHR5cGUpKTsKLSAgICAgIGdfc3RyaW5nX2FwcGVuZCAocywgIk5VTEwiKTsKLSAgICB9Ci0gIH0KLQotICBnX3N0cmluZ19hcHBlbmRfYyAocywgJzsnKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1wcml2X19nc3Rfc3RydWN0dXJlX2FwcGVuZF90ZW1wbGF0ZV90b19nc3RyaW5nIChHUXVhcmsgZmllbGRfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR1R5cGUgdHlwZSA9IGdzdF9zdHJ1Y3R1cmVfdmFsdWVfZ2V0X2dlbmVyaWNfdHlwZSAodmFsdWUpOwotICBHU3RyaW5nICpzID0gKEdTdHJpbmcgKikgdXNlcl9kYXRhOwotCi0gIGdfc3RyaW5nX2FwcGVuZF9sZW4gKHMsICIsICIsIDIpOwotICAvKiBGSVhNRTogZG8gd2UgbmVlZCB0byBlc2NhcGUgZmllbGRuYW1lcz8gKi8KLSAgZ19zdHJpbmdfYXBwZW5kIChzLCBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpKTsKLSAgZ19zdHJpbmdfYXBwZW5kX2xlbiAocywgIj0oIiwgMik7Ci0gIGdfc3RyaW5nX2FwcGVuZCAocywgZ3N0X3N0cnVjdHVyZV90b19hYmJyICh0eXBlKSk7Ci0gIGdfc3RyaW5nX2FwcGVuZF9jIChzLCAnKScpOwotCi0gIC8vVE9ETyhlbnNvbmljKTogdGFibGUgbGlrZSBHc3RTdHJ1Y3R1cmVBYmJyZXZpYXRpb24gKG9yIGV4dGVuZCBpdCkKLSAgaWYgKHR5cGUgPT0gR19UWVBFX0lOVCkgewotICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKHMsICIlaSIsIDIpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gR19UWVBFX1VJTlQpIHsKLSAgICBnX3N0cmluZ19hcHBlbmRfbGVuIChzLCAiJXUiLCAyKTsKLSAgfSBlbHNlIGlmICh0eXBlID09IEdfVFlQRV9GTE9BVCkgewotICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKHMsICIlZiIsIDIpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gR19UWVBFX0RPVUJMRSkgewotICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKHMsICIlbGYiLCAzKTsKLSAgfSBlbHNlIGlmICh0eXBlID09IEdfVFlQRV9TVFJJTkcpIHsKLSAgICBnX3N0cmluZ19hcHBlbmRfbGVuIChzLCAiJXMiLCAyKTsKLSAgfSBlbHNlIGlmICh0eXBlID09IEdfVFlQRV9CT09MRUFOKSB7Ci0gICAgLyogd2Ugbm9ybWFsbHkgc3RvcmUgdGhpcyBhcyBhIHN0cmluZywgYnV0IGNhbiBwYXJzZSBpdCBhbHNvIGZyb20gYW4gaW50ICovCi0gICAgZ19zdHJpbmdfYXBwZW5kX2xlbiAocywgIiVpIiwgMik7Ci0gIH0gZWxzZSBpZiAodHlwZSA9PSBHX1RZUEVfSU5UNjQpIHsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHMsICIlIiBHX0dJTlQ2NF9GT1JNQVQpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gR19UWVBFX1VJTlQ2NCkgewotICAgIGdfc3RyaW5nX2FwcGVuZCAocywgIiUiIEdfR1VJTlQ2NF9GT1JNQVQpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gR1NUX1RZUEVfU1RSVUNUVVJFKSB7Ci0gICAgZ19zdHJpbmdfYXBwZW5kIChzLCAiJSIgR1NUX1dSQVBQRURfUFRSX0ZPUk1BVCk7Ci0gIH0gZWxzZSBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9FTlVNKQotICAgICAgfHwgZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9GTEFHUykpIHsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHMsICIlaSIpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gR19UWVBFX1BPSU5URVIpIHsKLSAgICBnX3N0cmluZ19hcHBlbmRfbGVuIChzLCAiJXAiLCAyKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklORyAoInVuaGFuZGxlZCB0eXBlOiAlcyIsIGdfdHlwZV9uYW1lICh0eXBlKSk7Ci0gICAgZ19zdHJpbmdfYXBwZW5kIChzLCAiJSIgR1NUX1dSQVBQRURfUFRSX0ZPUk1BVCk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZzoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICoKLSAqIENvbnZlcnRzIEBzdHJ1Y3R1cmUgdG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi0gKgotICogRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpdHMgZWFzaWVyIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0gKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgotICogR1NUX0xPRyAoInN0cnVjdHVyZSBpcyAlIiBHU1RfUFRSX0ZPUk1BVCwgc3RydWN0dXJlKTsKLSAqIF18Ci0gKiBUaGlzIHByaW50cyB0aGUgc3RydWN0dXJlIGluIGh1bWFuIHJlYWRhYmxlIGZvcm0uCi0gKgotICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2Ygc2VyaWFsaXphdGlvbiB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzCi0gKiB3aGVuIHRoZXJlIGFyZSBuZXN0ZWQgI0dzdENhcHMgLyAjR3N0U3RydWN0dXJlIGRlZXBlciB0aGFuIG9uZSBsZXZlbC4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgcG9pbnRlciB0byBzdHJpbmcgYWxsb2NhdGVkIGJ5IGdfbWFsbG9jKCkuCi0gKiAgICAgZ19mcmVlKCkgYWZ0ZXIgdXNhZ2UuCi0gKi8KLWdjaGFyICoKLWdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCi17Ci0gIEdTdHJpbmcgKnM7Ci0KLSAgLyogTk9URTogIFRoaXMgZnVuY3Rpb24gaXMgcG90ZW50aWFsbHkgY2FsbGVkIGJ5IHRoZSBkZWJ1ZyBzeXN0ZW0sCi0gICAqIHNvIGFueSBjYWxscyB0byBnc3RfbG9nKCkgKGFuZCBHU1RfREVCVUcoKSwgR1NUX0xPRygpLCBldGMuKQotICAgKiBzaG91bGQgYmUgY2FyZWZ1bCB0byBhdm9pZCByZWN1cnNpb24uICBUaGlzIGluY2x1ZGVzIGFueSBmdW5jdGlvbnMKLSAgICogY2FsbGVkIGJ5IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nLiAgSW4gcGFydGljdWxhciwgY2FsbHMgc2hvdWxkCi0gICAqIG5vdCB1c2UgdGhlIEdTVF9QVFJfRk9STUFUIGV4dGVuc2lvbi4gICovCi0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBOVUxMKTsKLQotICAvKiB3ZSBlc3RpbWF0ZSBhIG1pbmltdW0gc2l6ZSBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiBvcmRlciB0bwotICAgKiBhdm9pZCB1bm5lY2Vzc2FyeSByZWFsbG9jcyB3aXRoaW4gR1N0cmluZyAqLwotICBzID0gZ19zdHJpbmdfc2l6ZWRfbmV3IChTVFJVQ1RVUkVfRVNUSU1BVEVEX1NUUklOR19MRU4gKHN0cnVjdHVyZSkpOwotICBnX3N0cmluZ19hcHBlbmQgKHMsIGdfcXVhcmtfdG9fc3RyaW5nIChzdHJ1Y3R1cmUtPm5hbWUpKTsKLSAgcHJpdl9nc3Rfc3RydWN0dXJlX2FwcGVuZF90b19nc3RyaW5nIChzdHJ1Y3R1cmUsIHMpOwotICByZXR1cm4gZ19zdHJpbmdfZnJlZSAocywgRkFMU0UpOwotfQotCi0vKgotICogciB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBzdHJpbmcuIGlmIGVuZCA9PSBuZXh0LCB0aGUgc3RyaW5nIHdpbGwgbm90IGJlCi0gKiBudWxsLXRlcm1pbmF0ZWQuIEluIGFsbCBvdGhlciBjYXNlcyBpdCB3aWxsIGJlLgotICogZW5kID0gcG9pbnRlciB0byBjaGFyIGJlaGluZCBlbmQgb2Ygc3RyaW5nLCBuZXh0ID0gcG9pbnRlciB0byBzdGFydCBvZgotICogdW5yZWFkIGRhdGEuCi0gKiBUSElTIEZVTkNUSU9OIE1PRElGSUVTIFRIRSBTVFJJTkcgQU5EIERFVEVDVFMgSU5TSURFIEEgTk9OVEVSTUlOQVRFRCBTVFJJTkcKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3Rfc3RydWN0dXJlX3BhcnNlX3N0cmluZyAoZ2NoYXIgKiBzLCBnY2hhciAqKiBlbmQsIGdjaGFyICoqIG5leHQsCi0gICAgZ2Jvb2xlYW4gdW5lc2NhcGUpCi17Ci0gIGdjaGFyICp3OwotCi0gIGlmICgqcyA9PSAwKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoKnMgIT0gJyInKSB7Ci0gICAgaW50IHJldDsKLQotICAgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc2ltcGxlX3N0cmluZyAocywgZW5kKTsKLSAgICAqbmV4dCA9ICplbmQ7Ci0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgaWYgKHVuZXNjYXBlKSB7Ci0gICAgdyA9IHM7Ci0gICAgcysrOwotICAgIHdoaWxlICgqcyAhPSAnIicpIHsKLSAgICAgIGlmIChHX1VOTElLRUxZICgqcyA9PSAwKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKCpzID09ICdcXCcpKSB7Ci0gICAgICAgIHMrKzsKLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKCpzID09IDApKQotICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICAgICp3ID0gKnM7Ci0gICAgICB3Kys7Ci0gICAgICBzKys7Ci0gICAgfQotICAgIHMrKzsKLSAgfSBlbHNlIHsKLSAgICAvKiBGaW5kIHRoZSBjbG9zaW5nIHF1b3RlcyAqLwotICAgIHMrKzsKLSAgICB3aGlsZSAoKnMgIT0gJyInKSB7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoKnMgPT0gMCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIGlmIChHX1VOTElLRUxZICgqcyA9PSAnXFwnKSkgewotICAgICAgICBzKys7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZICgqcyA9PSAwKSkKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBzKys7Ci0gICAgfQotICAgIHMrKzsKLSAgICB3ID0gczsKLSAgfQotCi0gICplbmQgPSB3OwotICAqbmV4dCA9IHM7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9wYXJzZV9yYW5nZSAoZ2NoYXIgKiBzLCBnY2hhciAqKiBhZnRlciwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1R5cGUgdHlwZSkKLXsKLSAgR1ZhbHVlIHZhbHVlMSA9IHsgMCB9OwotICBHVmFsdWUgdmFsdWUyID0geyAwIH07Ci0gIEdWYWx1ZSB2YWx1ZTMgPSB7IDAgfTsKLSAgR1R5cGUgcmFuZ2VfdHlwZTsKLSAgZ2Jvb2xlYW4gcmV0LCBoYXZlX3N0ZXAgPSBGQUxTRTsKLQotICBpZiAoKnMgIT0gJ1snKQotICAgIHJldHVybiBGQUxTRTsKLSAgcysrOwotCi0gIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKHMsICZzLCAmdmFsdWUxLCB0eXBlKTsKLSAgaWYgKCFyZXQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKLSAgICBzKys7Ci0KLSAgaWYgKCpzICE9ICcsJykKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHMrKzsKLQotICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCi0gICAgcysrOwotCi0gIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKHMsICZzLCAmdmFsdWUyLCB0eXBlKTsKLSAgaWYgKCFyZXQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKLSAgICBzKys7Ci0KLSAgLyogb3B0aW9uYWwgc3RlcCBmb3IgaW50IGFuZCBpbnQ2NCAqLwotICBpZiAoR19WQUxVRV9UWVBFICgmdmFsdWUxKSA9PSBHX1RZUEVfSU5UCi0gICAgICB8fCBHX1ZBTFVFX1RZUEUgKCZ2YWx1ZTEpID09IEdfVFlQRV9JTlQ2NCkgewotICAgIGlmICgqcyA9PSAnLCcpIHsKLSAgICAgIHMrKzsKLQotICAgICAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpKQotICAgICAgICBzKys7Ci0KLSAgICAgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKHMsICZzLCAmdmFsdWUzLCB0eXBlKTsKLSAgICAgIGlmICghcmV0KQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKLSAgICAgICAgcysrOwotCi0gICAgICBoYXZlX3N0ZXAgPSBUUlVFOwotICAgIH0KLSAgfQotCi0gIGlmICgqcyAhPSAnXScpCi0gICAgcmV0dXJuIEZBTFNFOwotICBzKys7Ci0KLSAgaWYgKEdfVkFMVUVfVFlQRSAoJnZhbHVlMSkgIT0gR19WQUxVRV9UWVBFICgmdmFsdWUyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChoYXZlX3N0ZXAgJiYgR19WQUxVRV9UWVBFICgmdmFsdWUxKSAhPSBHX1ZBTFVFX1RZUEUgKCZ2YWx1ZTMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoR19WQUxVRV9UWVBFICgmdmFsdWUxKSA9PSBHX1RZUEVfRE9VQkxFKSB7Ci0gICAgcmFuZ2VfdHlwZSA9IEdTVF9UWVBFX0RPVUJMRV9SQU5HRTsKLSAgICBnX3ZhbHVlX2luaXQgKHZhbHVlLCByYW5nZV90eXBlKTsKLSAgICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAodmFsdWUsCi0gICAgICAgIGdzdF9nX3ZhbHVlX2dldF9kb3VibGVfdW5jaGVja2VkICgmdmFsdWUxKSwKLSAgICAgICAgZ3N0X2dfdmFsdWVfZ2V0X2RvdWJsZV91bmNoZWNrZWQgKCZ2YWx1ZTIpKTsKLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKCZ2YWx1ZTEpID09IEdfVFlQRV9JTlQpIHsKLSAgICByYW5nZV90eXBlID0gR1NUX1RZUEVfSU5UX1JBTkdFOwotICAgIGdfdmFsdWVfaW5pdCAodmFsdWUsIHJhbmdlX3R5cGUpOwotICAgIGlmIChoYXZlX3N0ZXApCi0gICAgICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZV9zdGVwICh2YWx1ZSwKLSAgICAgICAgICBnc3RfZ192YWx1ZV9nZXRfaW50X3VuY2hlY2tlZCAoJnZhbHVlMSksCi0gICAgICAgICAgZ3N0X2dfdmFsdWVfZ2V0X2ludF91bmNoZWNrZWQgKCZ2YWx1ZTIpLAotICAgICAgICAgIGdzdF9nX3ZhbHVlX2dldF9pbnRfdW5jaGVja2VkICgmdmFsdWUzKSk7Ci0gICAgZWxzZQotICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKHZhbHVlLCBnc3RfZ192YWx1ZV9nZXRfaW50X3VuY2hlY2tlZCAoJnZhbHVlMSksCi0gICAgICAgICAgZ3N0X2dfdmFsdWVfZ2V0X2ludF91bmNoZWNrZWQgKCZ2YWx1ZTIpKTsKLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKCZ2YWx1ZTEpID09IEdfVFlQRV9JTlQ2NCkgewotICAgIHJhbmdlX3R5cGUgPSBHU1RfVFlQRV9JTlQ2NF9SQU5HRTsKLSAgICBnX3ZhbHVlX2luaXQgKHZhbHVlLCByYW5nZV90eXBlKTsKLSAgICBpZiAoaGF2ZV9zdGVwKQotICAgICAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZV9zdGVwICh2YWx1ZSwKLSAgICAgICAgICBnc3RfZ192YWx1ZV9nZXRfaW50NjRfdW5jaGVja2VkICgmdmFsdWUxKSwKLSAgICAgICAgICBnc3RfZ192YWx1ZV9nZXRfaW50NjRfdW5jaGVja2VkICgmdmFsdWUyKSwKLSAgICAgICAgICBnc3RfZ192YWx1ZV9nZXRfaW50NjRfdW5jaGVja2VkICgmdmFsdWUzKSk7Ci0gICAgZWxzZQotICAgICAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAodmFsdWUsCi0gICAgICAgICAgZ3N0X2dfdmFsdWVfZ2V0X2ludDY0X3VuY2hlY2tlZCAoJnZhbHVlMSksCi0gICAgICAgICAgZ3N0X2dfdmFsdWVfZ2V0X2ludDY0X3VuY2hlY2tlZCAoJnZhbHVlMikpOwotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAoJnZhbHVlMSkgPT0gR1NUX1RZUEVfRlJBQ1RJT04pIHsKLSAgICByYW5nZV90eXBlID0gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U7Ci0gICAgZ192YWx1ZV9pbml0ICh2YWx1ZSwgcmFuZ2VfdHlwZSk7Ci0gICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZSAodmFsdWUsICZ2YWx1ZTEsICZ2YWx1ZTIpOwotICB9IGVsc2UgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gICphZnRlciA9IHM7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfcGFyc2VfYW55X2xpc3QgKGdjaGFyICogcywgZ2NoYXIgKiogYWZ0ZXIsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdUeXBlIHR5cGUsIEdUeXBlIGxpc3RfdHlwZSwgY2hhciBiZWdpbiwgY2hhciBlbmQpCi17Ci0gIEdWYWx1ZSBsaXN0X3ZhbHVlID0geyAwIH07Ci0gIGdib29sZWFuIHJldDsKLSAgR0FycmF5ICphcnJheTsKLQotICBnX3ZhbHVlX2luaXQgKHZhbHVlLCBsaXN0X3R5cGUpOwotICBhcnJheSA9IGdfdmFsdWVfcGVla19wb2ludGVyICh2YWx1ZSk7Ci0KLSAgaWYgKCpzICE9IGJlZ2luKQotICAgIHJldHVybiBGQUxTRTsKLSAgcysrOwotCi0gIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKLSAgICBzKys7Ci0gIGlmICgqcyA9PSBlbmQpIHsKLSAgICBzKys7Ci0gICAgKmFmdGVyID0gczsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKHMsICZzLCAmbGlzdF92YWx1ZSwgdHlwZSk7Ci0gIGlmICghcmV0KQotICAgIHJldHVybiBGQUxTRTsKLQotICBnX2FycmF5X2FwcGVuZF92YWwgKGFycmF5LCBsaXN0X3ZhbHVlKTsKLQotICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCi0gICAgcysrOwotCi0gIHdoaWxlICgqcyAhPSBlbmQpIHsKLSAgICBpZiAoKnMgIT0gJywnKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHMrKzsKLQotICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKLSAgICAgIHMrKzsKLQotICAgIG1lbXNldCAoJmxpc3RfdmFsdWUsIDAsIHNpemVvZiAobGlzdF92YWx1ZSkpOwotICAgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKHMsICZzLCAmbGlzdF92YWx1ZSwgdHlwZSk7Ci0gICAgaWYgKCFyZXQpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBnX2FycmF5X2FwcGVuZF92YWwgKGFycmF5LCBsaXN0X3ZhbHVlKTsKLSAgICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCi0gICAgICBzKys7Ci0gIH0KLQotICBzKys7Ci0KLSAgKmFmdGVyID0gczsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9wYXJzZV9saXN0IChnY2hhciAqIHMsIGdjaGFyICoqIGFmdGVyLCBHVmFsdWUgKiB2YWx1ZSwgR1R5cGUgdHlwZSkKLXsKLSAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfcGFyc2VfYW55X2xpc3QgKHMsIGFmdGVyLCB2YWx1ZSwgdHlwZSwgR1NUX1RZUEVfTElTVCwKLSAgICAgICd7JywgJ30nKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3RydWN0dXJlX3BhcnNlX2FycmF5IChnY2hhciAqIHMsIGdjaGFyICoqIGFmdGVyLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHVHlwZSB0eXBlKQotewotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9wYXJzZV9hbnlfbGlzdCAocywgYWZ0ZXIsIHZhbHVlLCB0eXBlLAotICAgICAgR1NUX1RZUEVfQVJSQVksICc8JywgJz4nKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3RydWN0dXJlX3BhcnNlX3NpbXBsZV9zdHJpbmcgKGdjaGFyICogc3RyLCBnY2hhciAqKiBlbmQpCi17Ci0gIGNoYXIgKnMgPSBzdHI7Ci0KLSAgd2hpbGUgKEdfTElLRUxZIChHU1RfQVNDSUlfSVNfU1RSSU5HICgqcykpKSB7Ci0gICAgcysrOwotICB9Ci0KLSAgKmVuZCA9IHM7Ci0KLSAgcmV0dXJuIChzICE9IHN0cik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9wYXJzZV9maWVsZCAoZ2NoYXIgKiBzdHIsCi0gICAgZ2NoYXIgKiogYWZ0ZXIsIEdzdFN0cnVjdHVyZUZpZWxkICogZmllbGQpCi17Ci0gIGdjaGFyICpuYW1lOwotICBnY2hhciAqbmFtZV9lbmQ7Ci0gIGdjaGFyICpzOwotICBnY2hhciBjOwotCi0gIHMgPSBzdHI7Ci0KLSAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpIHx8IChzWzBdID09ICdcXCcgJiYgZ19hc2NpaV9pc3NwYWNlIChzWzFdKSkpCi0gICAgcysrOwotICBuYW1lID0gczsKLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc3RydWN0dXJlX3BhcnNlX3NpbXBsZV9zdHJpbmcgKHMsICZuYW1lX2VuZCkpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJmYWlsZWQgdG8gcGFyc2Ugc2ltcGxlIHN0cmluZywgc3RyPSVzIiwgc3RyKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBzID0gbmFtZV9lbmQ7Ci0gIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSB8fCAoc1swXSA9PSAnXFwnICYmIGdfYXNjaWlfaXNzcGFjZSAoc1sxXSkpKQotICAgIHMrKzsKLQotICBpZiAoR19VTkxJS0VMWSAoKnMgIT0gJz0nKSkgewotICAgIEdTVF9XQVJOSU5HICgibWlzc2luZyBhc3NpZ25tZW50IG9wZXJhdG9yIGluIHRoZSBmaWVsZCwgc3RyPSVzIiwgc3RyKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcysrOwotCi0gIGMgPSAqbmFtZV9lbmQ7Ci0gICpuYW1lX2VuZCA9ICdcMCc7Ci0gIGZpZWxkLT5uYW1lID0gZ19xdWFya19mcm9tX3N0cmluZyAobmFtZSk7Ci0gIEdTVF9ERUJVRyAoInRyeWluZyBmaWVsZCBuYW1lICclcyciLCBuYW1lKTsKLSAgKm5hbWVfZW5kID0gYzsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKHMsICZzLCAmZmllbGQtPnZhbHVlLAotICAgICAgICAgICAgICBHX1RZUEVfSU5WQUxJRCkpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJmYWlsZWQgdG8gcGFyc2UgdmFsdWUgJXMiLCBzdHIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gICphZnRlciA9IHM7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfcGFyc2VfdmFsdWUgKGdjaGFyICogc3RyLAotICAgIGdjaGFyICoqIGFmdGVyLCBHVmFsdWUgKiB2YWx1ZSwgR1R5cGUgZGVmYXVsdF90eXBlKQotewotICBnY2hhciAqdHlwZV9uYW1lOwotICBnY2hhciAqdHlwZV9lbmQ7Ci0gIGdjaGFyICp2YWx1ZV9zOwotICBnY2hhciAqdmFsdWVfZW5kOwotICBnY2hhciAqczsKLSAgZ2NoYXIgYzsKLSAgaW50IHJldCA9IDA7Ci0gIEdUeXBlIHR5cGUgPSBkZWZhdWx0X3R5cGU7Ci0KLSAgcyA9IHN0cjsKLSAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpKQotICAgIHMrKzsKLQotICAvKiBjaGVjayBpZiB0aGVyZSdzIGEgKHR5cGVfbmFtZSkgJ2Nhc3QnICovCi0gIHR5cGVfbmFtZSA9IE5VTEw7Ci0gIGlmICgqcyA9PSAnKCcpIHsKLSAgICBzKys7Ci0gICAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpKQotICAgICAgcysrOwotICAgIHR5cGVfbmFtZSA9IHM7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc3RydWN0dXJlX3BhcnNlX3NpbXBsZV9zdHJpbmcgKHMsICZ0eXBlX2VuZCkpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHMgPSB0eXBlX2VuZDsKLSAgICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcykpCi0gICAgICBzKys7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCpzICE9ICcpJykpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcysrOwotICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKLSAgICAgIHMrKzsKLQotICAgIGMgPSAqdHlwZV9lbmQ7Ci0gICAgKnR5cGVfZW5kID0gMDsKLSAgICB0eXBlID0gZ3N0X3N0cnVjdHVyZV9ndHlwZV9mcm9tX2FiYnIgKHR5cGVfbmFtZSk7Ci0gICAgR1NUX0RFQlVHICgidHJ5aW5nIHR5cGUgbmFtZSAnJXMnIiwgdHlwZV9uYW1lKTsKLSAgICAqdHlwZV9lbmQgPSBjOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHR5cGUgPT0gR19UWVBFX0lOVkFMSUQpKSB7Ci0gICAgICBHU1RfV0FSTklORyAoImludmFsaWQgdHlwZSIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotCi0gIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSkKLSAgICBzKys7Ci0gIGlmICgqcyA9PSAnWycpIHsKLSAgICByZXQgPSBnc3Rfc3RydWN0dXJlX3BhcnNlX3JhbmdlIChzLCAmcywgdmFsdWUsIHR5cGUpOwotICB9IGVsc2UgaWYgKCpzID09ICd7JykgewotICAgIHJldCA9IGdzdF9zdHJ1Y3R1cmVfcGFyc2VfbGlzdCAocywgJnMsIHZhbHVlLCB0eXBlKTsKLSAgfSBlbHNlIGlmICgqcyA9PSAnPCcpIHsKLSAgICByZXQgPSBnc3Rfc3RydWN0dXJlX3BhcnNlX2FycmF5IChzLCAmcywgdmFsdWUsIHR5cGUpOwotICB9IGVsc2UgewotICAgIHZhbHVlX3MgPSBzOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHR5cGUgPT0gR19UWVBFX0lOVkFMSUQpKSB7Ci0gICAgICBHVHlwZSB0cnlfdHlwZXNbXSA9Ci0gICAgICAgICAgeyBHX1RZUEVfSU5ULCBHX1RZUEVfRE9VQkxFLCBHU1RfVFlQRV9GUkFDVElPTiwgR1NUX1RZUEVfRkxBR19TRVQsCi0gICAgICAgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVfU1RSSU5HCi0gICAgICB9OwotICAgICAgaW50IGk7Ci0KLSAgICAgIGlmIChHX1VOTElLRUxZICghZ3N0X3N0cnVjdHVyZV9wYXJzZV9zdHJpbmcgKHMsICZ2YWx1ZV9lbmQsICZzLCBUUlVFKSkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIC8qIFNldCBOVUxMIHRlcm1pbmF0b3IgZm9yIGRlc2VyaWFsaXphdGlvbiAqLwotICAgICAgYyA9ICp2YWx1ZV9lbmQ7Ci0gICAgICAqdmFsdWVfZW5kID0gJ1wwJzsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAodHJ5X3R5cGVzKTsgaSsrKSB7Ci0gICAgICAgIGdfdmFsdWVfaW5pdCAodmFsdWUsIHRyeV90eXBlc1tpXSk7Ci0gICAgICAgIHJldCA9IGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAodmFsdWUsIHZhbHVlX3MpOwotICAgICAgICBpZiAocmV0KQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfdmFsdWVfaW5pdCAodmFsdWUsIHR5cGUpOwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc3RyaW5nIChzLCAmdmFsdWVfZW5kLCAmcywKLSAgICAgICAgICAgICAgICAgICh0eXBlICE9IEdfVFlQRV9TVFJJTkcpKSkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIC8qIFNldCBOVUxMIHRlcm1pbmF0b3IgZm9yIGRlc2VyaWFsaXphdGlvbiAqLwotICAgICAgYyA9ICp2YWx1ZV9lbmQ7Ci0gICAgICAqdmFsdWVfZW5kID0gJ1wwJzsKLQotICAgICAgcmV0ID0gZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICh2YWx1ZSwgdmFsdWVfcyk7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoIXJldCkpCi0gICAgICAgIGdfdmFsdWVfdW5zZXQgKHZhbHVlKTsKLSAgICB9Ci0gICAgKnZhbHVlX2VuZCA9IGM7Ci0gIH0KLQotICAqYWZ0ZXIgPSBzOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1wcml2X2dzdF9zdHJ1Y3R1cmVfcGFyc2VfbmFtZSAoZ2NoYXIgKiBzdHIsIGdjaGFyICoqIHN0YXJ0LCBnY2hhciAqKiBlbmQsCi0gICAgZ2NoYXIgKiogbmV4dCkKLXsKLSAgY2hhciAqdzsKLSAgY2hhciAqcjsKLQotICByID0gc3RyOwotCi0gIC8qIHNraXAgc3BhY2VzIChGSVhNRTogX2lzc3BhY2UgdHJlYXRzIHRhYnMgYW5kIG5ld2xpbmVzIGFzIHNwYWNlISkgKi8KLSAgd2hpbGUgKCpyICYmIChnX2FzY2lpX2lzc3BhY2UgKCpyKSB8fCAoclswXSA9PSAnXFwnCi0gICAgICAgICAgICAgICYmIGdfYXNjaWlfaXNzcGFjZSAoclsxXSkpKSkKLSAgICByKys7Ci0KLSAgKnN0YXJ0ID0gcjsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zdHJ1Y3R1cmVfcGFyc2Vfc3RyaW5nIChyLCAmdywgJnIsIFRSVUUpKSkgewotICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIHBhcnNlIHN0cnVjdHVyZSBzdHJpbmcgJyVzJyIsIHN0cik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgKmVuZCA9IHc7Ci0gICpuZXh0ID0gcjsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXByaXZfZ3N0X3N0cnVjdHVyZV9wYXJzZV9maWVsZHMgKGdjaGFyICogc3RyLCBnY2hhciAqKiBlbmQsCi0gICAgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQotewotICBnY2hhciAqcjsKLSAgR3N0U3RydWN0dXJlRmllbGQgZmllbGQ7Ci0KLSAgciA9IHN0cjsKLQotICBkbyB7Ci0gICAgd2hpbGUgKCpyICYmIChnX2FzY2lpX2lzc3BhY2UgKCpyKSB8fCAoclswXSA9PSAnXFwnCi0gICAgICAgICAgICAgICAgJiYgZ19hc2NpaV9pc3NwYWNlIChyWzFdKSkpKQotICAgICAgcisrOwotICAgIGlmICgqciA9PSAnOycpIHsKLSAgICAgIC8qIGVuZCBvZiBzdHJ1Y3R1cmUsIGdldCB0aGUgbmV4dCBjaGFyIGFuZCBmaW5pc2ggKi8KLSAgICAgIHIrKzsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoKnIgPT0gJ1wwJykgewotICAgICAgLyogYWNjZXB0IFwwIGFzIGVuZCBkZWxpbWl0ZXIgKi8KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoR19VTkxJS0VMWSAoKnIgIT0gJywnKSkgewotICAgICAgR1NUX1dBUk5JTkcgKCJGYWlsZWQgdG8gZmluZCBkZWxpbWl0ZXIsIHI9JXMiLCByKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgcisrOwotICAgIHdoaWxlICgqciAmJiAoZ19hc2NpaV9pc3NwYWNlICgqcikgfHwgKHJbMF0gPT0gJ1xcJwotICAgICAgICAgICAgICAgICYmIGdfYXNjaWlfaXNzcGFjZSAoclsxXSkpKSkKLSAgICAgIHIrKzsKLQotICAgIG1lbXNldCAoJmZpZWxkLCAwLCBzaXplb2YgKGZpZWxkKSk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc3RydWN0dXJlX3BhcnNlX2ZpZWxkIChyLCAmciwgJmZpZWxkKSkpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIHBhcnNlIGZpZWxkLCByPSVzIiwgcik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X2ZpZWxkIChzdHJ1Y3R1cmUsICZmaWVsZCk7Ci0gIH0gd2hpbGUgKFRSVUUpOwotCi0gICplbmQgPSByOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfbmV3X2Zyb21fc3RyaW5nOgotICogQHN0cmluZzogYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSAjR3N0U3RydWN0dXJlCi0gKgotICogQ3JlYXRlcyBhICNHc3RTdHJ1Y3R1cmUgZnJvbSBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAqIElmIGVuZCBpcyBub3QgJU5VTEwsIGEgcG9pbnRlciB0byB0aGUgcGxhY2UgaW5zaWRlIHRoZSBnaXZlbiBzdHJpbmcKLSAqIHdoZXJlIHBhcnNpbmcgZW5kZWQgd2lsbCBiZSByZXR1cm5lZC4KLSAqCi0gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBzZXJpYWxpemF0aW9uIHdpbGwgbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMKLSAqIHdoZW4gdGhlcmUgYXJlIG5lc3RlZCAjR3N0Q2FwcyAvICNHc3RTdHJ1Y3R1cmUgZGVlcGVyIHRoYW4gb25lIGxldmVsLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9zdHJ1Y3R1cmVfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhIG5ldyAjR3N0U3RydWN0dXJlIG9yICVOVUxMCi0gKiAgICAgd2hlbiB0aGUgc3RyaW5nIGNvdWxkIG5vdCBiZSBwYXJzZWQuIEZyZWUgd2l0aAotICogICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSgpIGFmdGVyIHVzZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdFN0cnVjdHVyZSAqCi1nc3Rfc3RydWN0dXJlX25ld19mcm9tX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHJpbmcpCi17Ci0gIHJldHVybiBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHJpbmcsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmc6Ci0gKiBAc3RyaW5nOiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhICNHc3RTdHJ1Y3R1cmUuCi0gKiBAZW5kOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpIChza2lwKTogcG9pbnRlciB0byBzdG9yZSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgaW4uCi0gKgotICogQ3JlYXRlcyBhICNHc3RTdHJ1Y3R1cmUgZnJvbSBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAqIElmIGVuZCBpcyBub3QgJU5VTEwsIGEgcG9pbnRlciB0byB0aGUgcGxhY2UgaW5zaWRlIHRoZSBnaXZlbiBzdHJpbmcKLSAqIHdoZXJlIHBhcnNpbmcgZW5kZWQgd2lsbCBiZSByZXR1cm5lZC4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3Rfc3RydWN0dXJlX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSBuZXcgI0dzdFN0cnVjdHVyZSBvciAlTlVMTAotICogICAgIHdoZW4gdGhlIHN0cmluZyBjb3VsZCBub3QgYmUgcGFyc2VkLiBGcmVlIHdpdGgKLSAqICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUoKSBhZnRlciB1c2UuCi0gKi8KLUdzdFN0cnVjdHVyZSAqCi1nc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChjb25zdCBnY2hhciAqIHN0cmluZywgZ2NoYXIgKiogZW5kKQotewotICBjaGFyICpuYW1lOwotICBjaGFyICpjb3B5OwotICBjaGFyICp3OwotICBjaGFyICpyOwotICBjaGFyIHNhdmU7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyaW5nICE9IE5VTEwsIE5VTEwpOwotCi0gIGNvcHkgPSBnX3N0cmR1cCAoc3RyaW5nKTsKLSAgciA9IGNvcHk7Ci0KLSAgaWYgKCFwcml2X2dzdF9zdHJ1Y3R1cmVfcGFyc2VfbmFtZSAociwgJm5hbWUsICZ3LCAmcikpCi0gICAgZ290byBlcnJvcjsKLQotICBzYXZlID0gKnc7Ci0gICp3ID0gJ1wwJzsKLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKG5hbWUpOwotICAqdyA9IHNhdmU7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHN0cnVjdHVyZSA9PSBOVUxMKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmICghcHJpdl9nc3Rfc3RydWN0dXJlX3BhcnNlX2ZpZWxkcyAociwgJnIsIHN0cnVjdHVyZSkpCi0gICAgZ290byBlcnJvcjsKLQotICBpZiAoZW5kKQotICAgICplbmQgPSAoY2hhciAqKSBzdHJpbmcgKyAociAtIGNvcHkpOwotICBlbHNlIGlmICgqcikKLSAgICBnX3dhcm5pbmcgKCJnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIGRpZCBub3QgY29uc3VtZSB3aG9sZSBzdHJpbmcsIgotICAgICAgICAiIGJ1dCBjYWxsZXIgZGlkIG5vdCBwcm92aWRlIGVuZCBwb2ludGVyIChcIiVzXCIpIiwgc3RyaW5nKTsKLQotICBnX2ZyZWUgKGNvcHkpOwotICByZXR1cm4gc3RydWN0dXJlOwotCi1lcnJvcjoKLSAgaWYgKHN0cnVjdHVyZSkKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7Ci0gIGdfZnJlZSAoY29weSk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N0cnVjdHVyZV90cmFuc2Zvcm1fdG9fc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3JjX3ZhbHVlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChkZXN0X3ZhbHVlICE9IE5VTEwpOwotCi0gIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzcmNfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKTsKLX0KLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqCi1nc3Rfc3RydWN0dXJlX2NvcHlfY29uZGl0aW9uYWwgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKLXsKLSAgaWYgKHN0cnVjdHVyZSkKLSAgICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpOwotICByZXR1cm4gTlVMTDsKLX0KLQotLyogZml4YXRlIHV0aWxpdHkgZnVuY3Rpb25zICovCi0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQ6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZF9uYW1lOiBhIGZpZWxkIGluIEBzdHJ1Y3R1cmUKLSAqIEB0YXJnZXQ6IHRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uCi0gKgotICogRml4YXRlcyBhICNHc3RTdHJ1Y3R1cmUgYnkgY2hhbmdpbmcgdGhlIGdpdmVuIGZpZWxkIHRvIHRoZSBuZWFyZXN0Ci0gKiBpbnRlZ2VyIHRvIEB0YXJnZXQgdGhhdCBpcyBhIHN1YnNldCBvZiB0aGUgZXhpc3RpbmcgZmllbGQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb3VsZCBiZSBmaXhhdGVkCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsIGludCB0YXJnZXQpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpLCBGQUxTRSk7Ci0KLSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKTsKLQotICBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR19UWVBFX0lOVCkgewotICAgIC8qIGFscmVhZHkgZml4ZWQgKi8KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfSU5UX1JBTkdFKSB7Ci0gICAgaW50IHg7Ci0KLSAgICB4ID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICh2YWx1ZSk7Ci0gICAgaWYgKHRhcmdldCA8IHgpCi0gICAgICB0YXJnZXQgPSB4OwotICAgIHggPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHZhbHVlKTsKLSAgICBpZiAodGFyZ2V0ID4geCkKLSAgICAgIHRhcmdldCA9IHg7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSwgR19UWVBFX0lOVCwgdGFyZ2V0LCBOVUxMKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9MSVNUKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpsaXN0X3ZhbHVlOwotICAgIGludCBpLCBuOwotICAgIGludCBiZXN0ID0gMDsKLSAgICBpbnQgYmVzdF9pbmRleCA9IC0xOwotCi0gICAgbiA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWx1ZSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgbGlzdF92YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsdWUsIGkpOwotICAgICAgaWYgKEdfVkFMVUVfVFlQRSAobGlzdF92YWx1ZSkgPT0gR19UWVBFX0lOVCkgewotICAgICAgICBpbnQgeCA9IGdzdF9nX3ZhbHVlX2dldF9pbnRfdW5jaGVja2VkIChsaXN0X3ZhbHVlKTsKLQotICAgICAgICBpZiAoYmVzdF9pbmRleCA9PSAtMSB8fCAoQUJTICh0YXJnZXQgLSB4KSA8IEFCUyAodGFyZ2V0IC0gYmVzdCkpKSB7Ci0gICAgICAgICAgYmVzdF9pbmRleCA9IGk7Ci0gICAgICAgICAgYmVzdCA9IHg7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGJlc3RfaW5kZXggIT0gLTEpIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUsIEdfVFlQRV9JTlQsIGJlc3QsIE5VTEwpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2RvdWJsZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpZWxkX25hbWU6IGEgZmllbGQgaW4gQHN0cnVjdHVyZQotICogQHRhcmdldDogdGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb24KLSAqCi0gKiBGaXhhdGVzIGEgI0dzdFN0cnVjdHVyZSBieSBjaGFuZ2luZyB0aGUgZ2l2ZW4gZmllbGQgdG8gdGhlIG5lYXJlc3QKLSAqIGRvdWJsZSB0byBAdGFyZ2V0IHRoYXQgaXMgYSBzdWJzZXQgb2YgdGhlIGV4aXN0aW5nIGZpZWxkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZAotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGUgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBjaGFyICpmaWVsZF9uYW1lLCBkb3VibGUgdGFyZ2V0KQotewotICBjb25zdCBHVmFsdWUgKnZhbHVlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSwgRkFMU0UpOwotCi0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSk7Ci0KLSAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdfVFlQRV9ET1VCTEUpIHsKLSAgICAvKiBhbHJlYWR5IGZpeGVkICovCi0gICAgcmV0dXJuIEZBTFNFOwotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0RPVUJMRV9SQU5HRSkgewotICAgIGRvdWJsZSB4OwotCi0gICAgeCA9IGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAodmFsdWUpOwotICAgIGlmICh0YXJnZXQgPCB4KQotICAgICAgdGFyZ2V0ID0geDsKLSAgICB4ID0gZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICh2YWx1ZSk7Ci0gICAgaWYgKHRhcmdldCA+IHgpCi0gICAgICB0YXJnZXQgPSB4OwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUsIEdfVFlQRV9ET1VCTEUsIHRhcmdldCwgTlVMTCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfTElTVCkgewotICAgIGNvbnN0IEdWYWx1ZSAqbGlzdF92YWx1ZTsKLSAgICBpbnQgaSwgbjsKLSAgICBkb3VibGUgYmVzdCA9IDA7Ci0gICAgaW50IGJlc3RfaW5kZXggPSAtMTsKLQotICAgIG4gPSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodmFsdWUpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGxpc3RfdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHZhbHVlLCBpKTsKLSAgICAgIGlmIChHX1ZBTFVFX1RZUEUgKGxpc3RfdmFsdWUpID09IEdfVFlQRV9ET1VCTEUpIHsKLSAgICAgICAgZG91YmxlIHggPSBnc3RfZ192YWx1ZV9nZXRfZG91YmxlX3VuY2hlY2tlZCAobGlzdF92YWx1ZSk7Ci0KLSAgICAgICAgaWYgKGJlc3RfaW5kZXggPT0gLTEgfHwgKEFCUyAodGFyZ2V0IC0geCkgPCBBQlMgKHRhcmdldCAtIGJlc3QpKSkgewotICAgICAgICAgIGJlc3RfaW5kZXggPSBpOwotICAgICAgICAgIGJlc3QgPSB4OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChiZXN0X2luZGV4ICE9IC0xKSB7Ci0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lLCBHX1RZUEVfRE9VQkxFLCBiZXN0LCBOVUxMKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci0KLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRfbmFtZTogYSBmaWVsZCBpbiBAc3RydWN0dXJlCi0gKiBAdGFyZ2V0OiB0aGUgdGFyZ2V0IHZhbHVlIG9mIHRoZSBmaXhhdGlvbgotICoKLSAqIEZpeGF0ZXMgYSAjR3N0U3RydWN0dXJlIGJ5IGNoYW5naW5nIHRoZSBnaXZlbiBAZmllbGRfbmFtZSBmaWVsZCB0byB0aGUgZ2l2ZW4KLSAqIEB0YXJnZXQgYm9vbGVhbiBpZiB0aGF0IGZpZWxkIGlzIG5vdCBmaXhlZCB5ZXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN0cnVjdHVyZSBjb3VsZCBiZSBmaXhhdGVkCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9ib29sZWFuIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgY2hhciAqZmllbGRfbmFtZSwgZ2Jvb2xlYW4gdGFyZ2V0KQotewotICBjb25zdCBHVmFsdWUgKnZhbHVlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoSVNfTVVUQUJMRSAoc3RydWN0dXJlKSwgRkFMU0UpOwotCi0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSk7Ci0KLSAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdfVFlQRV9CT09MRUFOKSB7Ci0gICAgLyogYWxyZWFkeSBmaXhlZCAqLwotICAgIHJldHVybiBGQUxTRTsKLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9MSVNUKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpsaXN0X3ZhbHVlOwotICAgIGludCBpLCBuOwotICAgIGludCBiZXN0ID0gMDsKLSAgICBpbnQgYmVzdF9pbmRleCA9IC0xOwotCi0gICAgbiA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWx1ZSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgbGlzdF92YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsdWUsIGkpOwotICAgICAgaWYgKEdfVkFMVUVfVFlQRSAobGlzdF92YWx1ZSkgPT0gR19UWVBFX0JPT0xFQU4pIHsKLSAgICAgICAgZ2Jvb2xlYW4geCA9IGdzdF9nX3ZhbHVlX2dldF9ib29sZWFuX3VuY2hlY2tlZCAobGlzdF92YWx1ZSk7Ci0KLSAgICAgICAgaWYgKGJlc3RfaW5kZXggPT0gLTEgfHwgeCA9PSB0YXJnZXQpIHsKLSAgICAgICAgICBiZXN0X2luZGV4ID0gaTsKLSAgICAgICAgICBiZXN0ID0geDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAoYmVzdF9pbmRleCAhPSAtMSkgewotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSwgR19UWVBFX0JPT0xFQU4sIGJlc3QsIE5VTEwpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmc6Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZF9uYW1lOiBhIGZpZWxkIGluIEBzdHJ1Y3R1cmUKLSAqIEB0YXJnZXQ6IHRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uCi0gKgotICogRml4YXRlcyBhICNHc3RTdHJ1Y3R1cmUgYnkgY2hhbmdpbmcgdGhlIGdpdmVuIEBmaWVsZF9uYW1lIGZpZWxkIHRvIHRoZSBnaXZlbgotICogQHRhcmdldCBzdHJpbmcgaWYgdGhhdCBmaWVsZCBpcyBub3QgZml4ZWQgeWV0LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZAotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWVsZF9uYW1lLCBjb25zdCBnY2hhciAqIHRhcmdldCkKLXsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSksIEZBTFNFKTsKLQotICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUpOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHX1RZUEVfU1RSSU5HKSB7Ci0gICAgLyogYWxyZWFkeSBmaXhlZCAqLwotICAgIHJldHVybiBGQUxTRTsKLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9MSVNUKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpsaXN0X3ZhbHVlOwotICAgIGludCBpLCBuOwotICAgIGNvbnN0IGdjaGFyICpiZXN0ID0gTlVMTDsKLSAgICBpbnQgYmVzdF9pbmRleCA9IC0xOwotCi0gICAgbiA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWx1ZSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgbGlzdF92YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsdWUsIGkpOwotICAgICAgaWYgKEdfVkFMVUVfVFlQRSAobGlzdF92YWx1ZSkgPT0gR19UWVBFX1NUUklORykgewotICAgICAgICBjb25zdCBnY2hhciAqeCA9IGdfdmFsdWVfZ2V0X3N0cmluZyAobGlzdF92YWx1ZSk7Ci0KLSAgICAgICAgaWYgKGJlc3RfaW5kZXggPT0gLTEgfHwgZ19zdHJfZXF1YWwgKHgsIHRhcmdldCkpIHsKLSAgICAgICAgICBiZXN0X2luZGV4ID0gaTsKLSAgICAgICAgICBiZXN0ID0geDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAoYmVzdF9pbmRleCAhPSAtMSkgewotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSwgR19UWVBFX1NUUklORywgYmVzdCwgTlVMTCk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb246Ci0gKiBAc3RydWN0dXJlOiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBmaWVsZF9uYW1lOiBhIGZpZWxkIGluIEBzdHJ1Y3R1cmUKLSAqIEB0YXJnZXRfbnVtZXJhdG9yOiBUaGUgbnVtZXJhdG9yIG9mIHRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGZpeGF0aW9uCi0gKiBAdGFyZ2V0X2Rlbm9taW5hdG9yOiBUaGUgZGVub21pbmF0b3Igb2YgdGhlIHRhcmdldCB2YWx1ZSBvZiB0aGUgZml4YXRpb24KLSAqCi0gKiBGaXhhdGVzIGEgI0dzdFN0cnVjdHVyZSBieSBjaGFuZ2luZyB0aGUgZ2l2ZW4gZmllbGQgdG8gdGhlIG5lYXJlc3QKLSAqIGZyYWN0aW9uIHRvIEB0YXJnZXRfbnVtZXJhdG9yL0B0YXJnZXRfZGVub21pbmF0b3IgdGhhdCBpcyBhIHN1YnNldAotICogb2YgdGhlIGV4aXN0aW5nIGZpZWxkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzdHJ1Y3R1cmUgY291bGQgYmUgZml4YXRlZAotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsIGNvbnN0IGdpbnQgdGFyZ2V0X251bWVyYXRvciwKLSAgICBjb25zdCBnaW50IHRhcmdldF9kZW5vbWluYXRvcikKLXsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHN0cnVjdHVyZSwgZmllbGRfbmFtZSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKElTX01VVEFCTEUgKHN0cnVjdHVyZSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhcmdldF9kZW5vbWluYXRvciAhPSAwLCBGQUxTRSk7Ci0KLSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKTsKLQotICBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfRlJBQ1RJT04pIHsKLSAgICAvKiBhbHJlYWR5IGZpeGVkICovCi0gICAgcmV0dXJuIEZBTFNFOwotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKSB7Ci0gICAgY29uc3QgR1ZhbHVlICp4LCAqbmV3X3ZhbHVlOwotICAgIEdWYWx1ZSB0YXJnZXQgPSB7IDAgfTsKLSAgICBnX3ZhbHVlX2luaXQgKCZ0YXJnZXQsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdGFyZ2V0LCB0YXJnZXRfbnVtZXJhdG9yLCB0YXJnZXRfZGVub21pbmF0b3IpOwotCi0gICAgbmV3X3ZhbHVlID0gJnRhcmdldDsKLSAgICB4ID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKHZhbHVlKTsKLSAgICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ0YXJnZXQsIHgpID09IEdTVF9WQUxVRV9MRVNTX1RIQU4pCi0gICAgICBuZXdfdmFsdWUgPSB4OwotICAgIHggPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAodmFsdWUpOwotICAgIGlmIChnc3RfdmFsdWVfY29tcGFyZSAoJnRhcmdldCwgeCkgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTikKLSAgICAgIG5ld192YWx1ZSA9IHg7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZF9uYW1lLCBuZXdfdmFsdWUpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZ0YXJnZXQpOwotICAgIHJldHVybiBUUlVFOwotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0xJU1QpIHsKLSAgICBjb25zdCBHVmFsdWUgKmxpc3RfdmFsdWU7Ci0gICAgaW50IGksIG47Ci0gICAgY29uc3QgR1ZhbHVlICpiZXN0ID0gTlVMTDsKLSAgICBnZG91YmxlIHRhcmdldDsKLSAgICBnZG91YmxlIGN1cl9kaWZmOwotICAgIGdkb3VibGUgYmVzdF9kaWZmID0gR19NQVhET1VCTEU7Ci0KLSAgICB0YXJnZXQgPSAoZ2RvdWJsZSkgdGFyZ2V0X251bWVyYXRvciAvIChnZG91YmxlKSB0YXJnZXRfZGVub21pbmF0b3I7Ci0KLSAgICBHU1RfREVCVUcgKCJ0YXJnZXQgJWcsIGJlc3QgJWciLCB0YXJnZXQsIGJlc3RfZGlmZik7Ci0KLSAgICBiZXN0ID0gTlVMTDsKLQotICAgIG4gPSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodmFsdWUpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGxpc3RfdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHZhbHVlLCBpKTsKLSAgICAgIGlmIChHX1ZBTFVFX1RZUEUgKGxpc3RfdmFsdWUpID09IEdTVF9UWVBFX0ZSQUNUSU9OKSB7Ci0gICAgICAgIGdpbnQgbnVtLCBkZW5vbTsKLSAgICAgICAgZ2RvdWJsZSBsaXN0X2RvdWJsZTsKLQotICAgICAgICBudW0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAobGlzdF92YWx1ZSk7Ci0gICAgICAgIGRlbm9tID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAobGlzdF92YWx1ZSk7Ci0KLSAgICAgICAgbGlzdF9kb3VibGUgPSAoKGdkb3VibGUpIG51bSAvIChnZG91YmxlKSBkZW5vbSk7Ci0gICAgICAgIGN1cl9kaWZmID0gdGFyZ2V0IC0gbGlzdF9kb3VibGU7Ci0KLSAgICAgICAgR1NUX0RFQlVHICgiY3VyciBkaWZmICVnLCBsaXN0ICVnIiwgY3VyX2RpZmYsIGxpc3RfZG91YmxlKTsKLQotICAgICAgICBpZiAoY3VyX2RpZmYgPCAwKQotICAgICAgICAgIGN1cl9kaWZmID0gLWN1cl9kaWZmOwotCi0gICAgICAgIGlmICghYmVzdCB8fCBjdXJfZGlmZiA8IGJlc3RfZGlmZikgewotICAgICAgICAgIEdTVF9ERUJVRyAoIm5ldyBiZXN0ICVnIiwgbGlzdF9kb3VibGUpOwotICAgICAgICAgIGJlc3QgPSBsaXN0X3ZhbHVlOwotICAgICAgICAgIGJlc3RfZGlmZiA9IGN1cl9kaWZmOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChiZXN0ICE9IE5VTEwpIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUsIGJlc3QpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRlZmF1bHRfZml4YXRlIChHUXVhcmsgZmllbGRfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBncG9pbnRlciBkYXRhKQotewotICBHc3RTdHJ1Y3R1cmUgKnMgPSBkYXRhOwotICBHVmFsdWUgdiA9IHsgMCB9OwotCi0gIGlmIChnc3RfdmFsdWVfZml4YXRlICgmdiwgdmFsdWUpKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChzLCBmaWVsZF9pZCwgJnYpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkOgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmllbGRfbmFtZTogYSBmaWVsZCBpbiBAc3RydWN0dXJlCi0gKgotICogRml4YXRlcyBhICNHc3RTdHJ1Y3R1cmUgYnkgY2hhbmdpbmcgdGhlIGdpdmVuIGZpZWxkIHdpdGggaXRzIGZpeGF0ZWQgdmFsdWUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN0cnVjdHVyZSBmaWVsZCBjb3VsZCBiZSBmaXhhdGVkCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBjb25zdCBjaGFyICpmaWVsZF9uYW1lKQotewotICBHc3RTdHJ1Y3R1cmVGaWVsZCAqZmllbGQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdHVyZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChJU19NVVRBQkxFIChzdHJ1Y3R1cmUpLCBGQUxTRSk7Ci0KLSAgaWYgKCEoZmllbGQgPSBnc3Rfc3RydWN0dXJlX2dldF9maWVsZCAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBkZWZhdWx0X2ZpeGF0ZSAoZmllbGQtPm5hbWUsICZmaWVsZC0+dmFsdWUsIHN0cnVjdHVyZSk7Ci19Ci0KLS8qIG91ciB2ZXJ5IG93biB2ZXJzaW9uIG9mIEdfVkFMVUVfTENPUFkgdGhhdCBhbGxvd3MgTlVMTCByZXR1cm4gbG9jYXRpb25zCi0gKiAodXNlZnVsIGZvciBtZXNzYWdlIHBhcnNpbmcgZnVuY3Rpb25zIHdoZXJlIHRoZSByZXR1cm4gbG9jYXRpb24gaXMgdXNlcgotICogc3VwcGxpZWQgYW5kIHRoZSB1c2VyIG1heSBwYXNzICVOVUxMIGlmIHRoZSB2YWx1ZSBpc24ndCBvZiBpbnRlcmVzdCkgKi8KLSNkZWZpbmUgR1NUX1ZBTFVFX0xDT1BZKHZhbHVlLCB2YXJfYXJncywgZmxhZ3MsIF9fZXJyb3IsIGZpZWxkbmFtZSkgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY29uc3QgR1ZhbHVlICpfdmFsdWUgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3VpbnQgX2ZsYWdzID0gKGZsYWdzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR1R5cGUgX3ZhbHVlX3R5cGUgPSBHX1ZBTFVFX1RZUEUgKF92YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR1R5cGVWYWx1ZVRhYmxlICpfdnRhYmxlID0gZ190eXBlX3ZhbHVlX3RhYmxlX3BlZWsgKF92YWx1ZV90eXBlKTsgICAgICAgICAgIFwKLSAgY29uc3QgZ2NoYXIgKl9sY29weV9mb3JtYXQgPSBfdnRhYmxlLT5sY29weV9mb3JtYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR1R5cGVDVmFsdWUgX2N2YWx1ZXNbR19WQUxVRV9DT0xMRUNUX0ZPUk1BVF9NQVhfTEVOR1RIXSA9IHsgeyAwLCB9LCB9OyAgICAgIFwKLSAgZ3VpbnQgX25fdmFsdWVzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgd2hpbGUgKCpfbGNvcHlfZm9ybWF0ICE9ICdcMCcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX2Fzc2VydCAoKl9sY29weV9mb3JtYXQgPT0gR19WQUxVRV9DT0xMRUNUX1BPSU5URVIpOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfY3ZhbHVlc1tfbl92YWx1ZXMrK10udl9wb2ludGVyID0gdmFfYXJnICgodmFyX2FyZ3MpLCBncG9pbnRlcik7ICAgICAgICAgIFwKLSAgICBfbGNvcHlfZm9ybWF0Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKF9uX3ZhbHVlcyA9PSAyICYmICEhX2N2YWx1ZXNbMF0udl9wb2ludGVyICE9ICEhX2N2YWx1ZXNbMV0udl9wb2ludGVyKSB7IFwKLSAgICAqKF9fZXJyb3IpID0gZ19zdHJkdXBfcHJpbnRmICgiZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSByZXR1cm4gIiAgICAgICAgIFwKLSAgICAgICAgImxvY2F0aW9ucyBmb3IgZmllbGQgJyVzJyBuZWVkIHRvIGJlIE5VTEwiLCBmaWVsZG5hbWUpOyAgICAgICAgICAgICAgIFwKLSAgfSBlbHNlIGlmIChfY3ZhbHVlc1swXS52X3BvaW50ZXIgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqKF9fZXJyb3IpID0gX3Z0YWJsZS0+bGNvcHlfdmFsdWUgKF92YWx1ZSwgX25fdmFsdWVzLCBfY3ZhbHVlcywgX2ZsYWdzKTsgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbGlzdDoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpcnN0X2ZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIHJlYWQKLSAqIEBhcmdzOiB2YXJpYWJsZSBhcmd1bWVudHMKLSAqCi0gKiBQYXJzZXMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgcmVhZHMgZmllbGRzIGZyb20gQHN0cnVjdHVyZSBhY2NvcmRpbmdseS4KLSAqIHZhbGlzdC12YXJpYW50IG9mIGdzdF9zdHJ1Y3R1cmVfZ2V0KCkuIExvb2sgYXQgdGhlIGRvY3VtZW50YXRpb24gb2YKLSAqIGdzdF9zdHJ1Y3R1cmVfZ2V0KCkgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgb3IgJUZBTFNFIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBhbnkgb2YgdGhlIGZpZWxkcwotICovCi1nYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgY2hhciAqZmlyc3RfZmllbGRuYW1lLCB2YV9saXN0IGFyZ3MpCi17Ci0gIGNvbnN0IGNoYXIgKmZpZWxkX25hbWU7Ci0gIEdUeXBlIGV4cGVjdGVkX3R5cGUgPSBHX1RZUEVfSU5WQUxJRDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1NUUlVDVFVSRSAoc3RydWN0dXJlKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmlyc3RfZmllbGRuYW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICBmaWVsZF9uYW1lID0gZmlyc3RfZmllbGRuYW1lOwotICB3aGlsZSAoZmllbGRfbmFtZSkgewotICAgIGNvbnN0IEdWYWx1ZSAqdmFsID0gTlVMTDsKLSAgICBnY2hhciAqZXJyID0gTlVMTDsKLQotICAgIGV4cGVjdGVkX3R5cGUgPSB2YV9hcmcgKGFyZ3MsIEdUeXBlKTsKLQotICAgIHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX25hbWUpOwotCi0gICAgaWYgKHZhbCA9PSBOVUxMKQotICAgICAgZ290byBub19zdWNoX2ZpZWxkOwotCi0gICAgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSAhPSBleHBlY3RlZF90eXBlKQotICAgICAgZ290byB3cm9uZ190eXBlOwotCi0gICAgR1NUX1ZBTFVFX0xDT1BZICh2YWwsIGFyZ3MsIDAsICZlcnIsIGZpZWxkX25hbWUpOwotICAgIGlmIChlcnIpIHsKLSAgICAgIGdfd2FybmluZyAoIiVzOiAlcyIsIEdfU1RSRlVOQywgZXJyKTsKLSAgICAgIGdfZnJlZSAoZXJyKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBmaWVsZF9uYW1lID0gdmFfYXJnIChhcmdzLCBjb25zdCBnY2hhciAqKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi0vKiBFUlJPUlMgKi8KLW5vX3N1Y2hfZmllbGQ6Ci0gIHsKLSAgICBHU1RfSU5GTyAoIkV4cGVjdGVkIGZpZWxkICclcycgaW4gc3RydWN0dXJlOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgZmllbGRfbmFtZSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX3R5cGU6Ci0gIHsKLSAgICBHU1RfSU5GTyAoIkV4cGVjdGVkIGZpZWxkICclcycgaW4gc3RydWN0dXJlIHRvIGJlIG9mIHR5cGUgJyVzJywgYnV0ICIKLSAgICAgICAgImZpZWxkIHdhcyBvZiB0eXBlICclcyc6ICUiIEdTVF9QVFJfRk9STUFULCBmaWVsZF9uYW1lLAotICAgICAgICBHU1RfU1RSX05VTEwgKGdfdHlwZV9uYW1lIChleHBlY3RlZF90eXBlKSksCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZF9uYW1lKSksCi0gICAgICAgIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0OgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmlyc3RfZmllbGRfaWQ6IHRoZSBxdWFyayBvZiB0aGUgZmlyc3QgZmllbGQgdG8gcmVhZAotICogQGFyZ3M6IHZhcmlhYmxlIGFyZ3VtZW50cwotICoKLSAqIFBhcnNlcyB0aGUgdmFyaWFibGUgYXJndW1lbnRzIGFuZCByZWFkcyBmaWVsZHMgZnJvbSBAc3RydWN0dXJlIGFjY29yZGluZ2x5LgotICogdmFsaXN0LXZhcmlhbnQgb2YgZ3N0X3N0cnVjdHVyZV9pZF9nZXQoKS4gTG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiBvZgotICogZ3N0X3N0cnVjdHVyZV9pZF9nZXQoKSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFJldHVybnM6ICVUUlVFLCBvciAlRkFMU0UgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSByZWFkaW5nIGFueSBvZiB0aGUgZmllbGRzCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2lkX2dldF92YWxpc3QgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICBHUXVhcmsgZmlyc3RfZmllbGRfaWQsIHZhX2xpc3QgYXJncykKLXsKLSAgR1F1YXJrIGZpZWxkX2lkOwotICBHVHlwZSBleHBlY3RlZF90eXBlID0gR19UWVBFX0lOVkFMSUQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJVQ1RVUkUgKHN0cnVjdHVyZSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpcnN0X2ZpZWxkX2lkICE9IDAsIEZBTFNFKTsKLQotICBmaWVsZF9pZCA9IGZpcnN0X2ZpZWxkX2lkOwotICB3aGlsZSAoZmllbGRfaWQpIHsKLSAgICBjb25zdCBHVmFsdWUgKnZhbCA9IE5VTEw7Ci0gICAgZ2NoYXIgKmVyciA9IE5VTEw7Ci0KLSAgICBleHBlY3RlZF90eXBlID0gdmFfYXJnIChhcmdzLCBHVHlwZSk7Ci0KLSAgICB2YWwgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZF9pZCk7Ci0KLSAgICBpZiAodmFsID09IE5VTEwpCi0gICAgICBnb3RvIG5vX3N1Y2hfZmllbGQ7Ci0KLSAgICBpZiAoR19WQUxVRV9UWVBFICh2YWwpICE9IGV4cGVjdGVkX3R5cGUpCi0gICAgICBnb3RvIHdyb25nX3R5cGU7Ci0KLSAgICBHU1RfVkFMVUVfTENPUFkgKHZhbCwgYXJncywgMCwgJmVyciwgZ19xdWFya190b19zdHJpbmcgKGZpZWxkX2lkKSk7Ci0gICAgaWYgKGVycikgewotICAgICAgZ193YXJuaW5nICgiJXM6ICVzIiwgR19TVFJGVU5DLCBlcnIpOwotICAgICAgZ19mcmVlIChlcnIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIGZpZWxkX2lkID0gdmFfYXJnIChhcmdzLCBHUXVhcmspOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLS8qIEVSUk9SUyAqLwotbm9fc3VjaF9maWVsZDoKLSAgewotICAgIEdTVF9ERUJVRyAoIkV4cGVjdGVkIGZpZWxkICclcycgaW4gc3RydWN0dXJlOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgR1NUX1NUUl9OVUxMIChnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpKSwgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX3R5cGU6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJFeHBlY3RlZCBmaWVsZCAnJXMnIGluIHN0cnVjdHVyZSB0byBiZSBvZiB0eXBlICclcycsIGJ1dCAiCi0gICAgICAgICJmaWVsZCB3YXMgb2YgdHlwZSAnJXMnOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgZ19xdWFya190b19zdHJpbmcgKGZpZWxkX2lkKSwKLSAgICAgICAgR1NUX1NUUl9OVUxMIChnX3R5cGVfbmFtZSAoZXhwZWN0ZWRfdHlwZSkpLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAoZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfaWQpKSwKLSAgICAgICAgc3RydWN0dXJlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2dldDoKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICogQGZpcnN0X2ZpZWxkbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIHJlYWQKLSAqIEAuLi46IHZhcmlhYmxlIGFyZ3VtZW50cwotICoKLSAqIFBhcnNlcyB0aGUgdmFyaWFibGUgYXJndW1lbnRzIGFuZCByZWFkcyBmaWVsZHMgZnJvbSBAc3RydWN0dXJlIGFjY29yZGluZ2x5LgotICogVmFyaWFibGUgYXJndW1lbnRzIHNob3VsZCBiZSBpbiB0aGUgZm9ybSBmaWVsZCBuYW1lLCBmaWVsZCB0eXBlCi0gKiAoYXMgYSBHVHlwZSksIHBvaW50ZXIocykgdG8gYSB2YXJpYWJsZShzKSB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUocykuCi0gKiBUaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBzaG91bGQgYmUgJU5VTEwuCi0gKgotICogRm9yIHJlZmNvdW50ZWQgKG1pbmkpb2JqZWN0cyB5b3Ugd2lsbCByZWNlaXZlIGEgbmV3IHJlZmVyZW5jZSB3aGljaAotICogeW91IG11c3QgcmVsZWFzZSB3aXRoIGEgc3VpdGFibGUgX3VucmVmKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLiBGb3IKLSAqIHN0cmluZ3MgYW5kIGJveGVkIHR5cGVzIHlvdSB3aWxsIHJlY2VpdmUgYSBjb3B5IHdoaWNoIHlvdSB3aWxsIG5lZWQgdG8KLSAqIHJlbGVhc2Ugd2l0aCBlaXRoZXIgZ19mcmVlKCkgb3IgdGhlIHN1aXRhYmxlIGZ1bmN0aW9uIGZvciB0aGUgYm94ZWQgdHlwZS4KLSAqCi0gKiBSZXR1cm5zOiAlRkFMU0UgaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSByZWFkaW5nIGFueSBvZiB0aGUgZmllbGRzIChlLmcuCi0gKiAgICAgYmVjYXVzZSB0aGUgZmllbGQgcmVxdWVzdGVkIGRpZCBub3QgZXhpc3QsIG9yIHdhcyBvZiBhIHR5cGUgb3RoZXIKLSAqICAgICB0aGFuIHRoZSB0eXBlIHNwZWNpZmllZCksIG90aGVyd2lzZSAlVFJVRS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfZ2V0IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IGNoYXIgKmZpcnN0X2ZpZWxkbmFtZSwKLSAgICAuLi4pCi17Ci0gIGdib29sZWFuIHJldDsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSVUNUVVJFIChzdHJ1Y3R1cmUpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaXJzdF9maWVsZG5hbWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBmaXJzdF9maWVsZG5hbWUpOwotICByZXQgPSBnc3Rfc3RydWN0dXJlX2dldF92YWxpc3QgKHN0cnVjdHVyZSwgZmlyc3RfZmllbGRuYW1lLCBhcmdzKTsKLSAgdmFfZW5kIChhcmdzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0OgotICogQHN0cnVjdHVyZTogYSAjR3N0U3RydWN0dXJlCi0gKiBAZmlyc3RfZmllbGRfaWQ6IHRoZSBxdWFyayBvZiB0aGUgZmlyc3QgZmllbGQgdG8gcmVhZAotICogQC4uLjogdmFyaWFibGUgYXJndW1lbnRzCi0gKgotICogUGFyc2VzIHRoZSB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHJlYWRzIGZpZWxkcyBmcm9tIEBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkuCi0gKiBWYXJpYWJsZSBhcmd1bWVudHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtIGZpZWxkIGlkIHF1YXJrLCBmaWVsZCB0eXBlCi0gKiAoYXMgYSBHVHlwZSksIHBvaW50ZXIocykgdG8gYSB2YXJpYWJsZShzKSB0byBob2xkIHRoZSByZXR1cm4gdmFsdWUocykuCi0gKiBUaGUgbGFzdCB2YXJpYWJsZSBhcmd1bWVudCBzaG91bGQgYmUgJU5VTEwgKHRlY2huaWNhbGx5IGl0IHNob3VsZCBiZSBhCi0gKiAwIHF1YXJrLCBidXQgd2UgcmVxdWlyZSAlTlVMTCBzbyBjb21waWxlcnMgdGhhdCBzdXBwb3J0IGl0IGNhbiBjaGVjayBmb3IKLSAqIHRoZSAlTlVMTCB0ZXJtaW5hdG9yIGFuZCB3YXJuIGlmIGl0J3Mgbm90IHRoZXJlKS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGp1c3QgbGlrZSBnc3Rfc3RydWN0dXJlX2dldCgpIG9ubHkgdGhhdCBpdCBpcyBzbGlnaHRseQotICogbW9yZSBlZmZpY2llbnQgc2luY2UgaXQgc2F2ZXMgdGhlIHN0cmluZy10by1xdWFyayBsb29rdXAgaW4gdGhlIGdsb2JhbAotICogcXVhcmsgaGFzaHRhYmxlLgotICoKLSAqIEZvciByZWZjb3VudGVkIChtaW5pKW9iamVjdHMgeW91IHdpbGwgcmVjZWl2ZSBhIG5ldyByZWZlcmVuY2Ugd2hpY2gKLSAqIHlvdSBtdXN0IHJlbGVhc2Ugd2l0aCBhIHN1aXRhYmxlIF91bnJlZigpIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gRm9yCi0gKiBzdHJpbmdzIGFuZCBib3hlZCB0eXBlcyB5b3Ugd2lsbCByZWNlaXZlIGEgY29weSB3aGljaCB5b3Ugd2lsbCBuZWVkIHRvCi0gKiByZWxlYXNlIHdpdGggZWl0aGVyIGdfZnJlZSgpIG9yIHRoZSBzdWl0YWJsZSBmdW5jdGlvbiBmb3IgdGhlIGJveGVkIHR5cGUuCi0gKgotICogUmV0dXJuczogJUZBTFNFIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBhbnkgb2YgdGhlIGZpZWxkcyAoZS5nLgotICogICAgIGJlY2F1c2UgdGhlIGZpZWxkIHJlcXVlc3RlZCBkaWQgbm90IGV4aXN0LCBvciB3YXMgb2YgYSB0eXBlIG90aGVyCi0gKiAgICAgdGhhbiB0aGUgdHlwZSBzcGVjaWZpZWQpLCBvdGhlcndpc2UgJVRSVUUuCi0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2lkX2dldCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBHUXVhcmsgZmlyc3RfZmllbGRfaWQsCi0gICAgLi4uKQotewotICBnYm9vbGVhbiByZXQ7Ci0gIHZhX2xpc3QgYXJnczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1NUUlVDVFVSRSAoc3RydWN0dXJlKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmlyc3RfZmllbGRfaWQgIT0gMCwgRkFMU0UpOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBmaXJzdF9maWVsZF9pZCk7Ci0gIHJldCA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbGlzdCAoc3RydWN0dXJlLCBmaXJzdF9maWVsZF9pZCwgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2lzX2VxdWFsX2ZvcmVhY2ggKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsMiwKLSAgICBncG9pbnRlciBkYXRhKQotewotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdDEgPSAoY29uc3QgR3N0U3RydWN0dXJlICopIGRhdGE7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsMSA9IGdzdF9zdHJ1Y3R1cmVfaWRfZ2V0X3ZhbHVlIChzdHJ1Y3QxLCBmaWVsZF9pZCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHZhbDEgPT0gTlVMTCkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKHZhbDEsIHZhbDIpID09IEdTVF9WQUxVRV9FUVVBTCkgewotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWw6Ci0gKiBAc3RydWN0dXJlMTogYSAjR3N0U3RydWN0dXJlLgotICogQHN0cnVjdHVyZTI6IGEgI0dzdFN0cnVjdHVyZS4KLSAqCi0gKiBUZXN0cyBpZiB0aGUgdHdvICNHc3RTdHJ1Y3R1cmUgYXJlIGVxdWFsLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB0d28gc3RydWN0dXJlcyBoYXZlIHRoZSBzYW1lIG5hbWUgYW5kIGZpZWxkLgotICoqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZTEsCi0gICAgY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlMikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJVQ1RVUkUgKHN0cnVjdHVyZTEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSVUNUVVJFIChzdHJ1Y3R1cmUyKSwgRkFMU0UpOwotCi0gIGlmIChHX1VOTElLRUxZIChzdHJ1Y3R1cmUxID09IHN0cnVjdHVyZTIpKQotICAgIHJldHVybiBUUlVFOwotCi0gIGlmIChzdHJ1Y3R1cmUxLT5uYW1lICE9IHN0cnVjdHVyZTItPm5hbWUpIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgaWYgKEdTVF9TVFJVQ1RVUkVfRklFTERTIChzdHJ1Y3R1cmUxKS0+bGVuICE9Ci0gICAgICBHU1RfU1RSVUNUVVJFX0ZJRUxEUyAoc3RydWN0dXJlMiktPmxlbikgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKHN0cnVjdHVyZTEsIGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWxfZm9yZWFjaCwKLSAgICAgIChncG9pbnRlcikgc3RydWN0dXJlMik7Ci19Ci0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0U3RydWN0dXJlICpkZXN0OwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKmludGVyc2VjdDsKLX0KLUludGVyc2VjdERhdGE7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3RfZmllbGQxIChHUXVhcmsgaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbDEsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEludGVyc2VjdERhdGEgKmlkYXRhID0gKEludGVyc2VjdERhdGEgKikgZGF0YTsKLSAgY29uc3QgR1ZhbHVlICp2YWwyID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGlkYXRhLT5pbnRlcnNlY3QsIGlkKTsKLQotICBpZiAoR19VTkxJS0VMWSAodmFsMiA9PSBOVUxMKSkgewotICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChpZGF0YS0+ZGVzdCwgaWQsIHZhbDEpOwotICB9IGVsc2UgewotICAgIEdWYWx1ZSBkZXN0X3ZhbHVlID0geyAwIH07Ci0gICAgaWYgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0X3ZhbHVlLCB2YWwxLCB2YWwyKSkgewotICAgICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChpZGF0YS0+ZGVzdCwgaWQsICZkZXN0X3ZhbHVlKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2ludGVyc2VjdF9maWVsZDIgKEdRdWFyayBpZCwgY29uc3QgR1ZhbHVlICogdmFsMSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgSW50ZXJzZWN0RGF0YSAqaWRhdGEgPSAoSW50ZXJzZWN0RGF0YSAqKSBkYXRhOwotICBjb25zdCBHVmFsdWUgKnZhbDIgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoaWRhdGEtPmludGVyc2VjdCwgaWQpOwotCi0gIGlmIChHX1VOTElLRUxZICh2YWwyID09IE5VTEwpKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9pZF9zZXRfdmFsdWUgKGlkYXRhLT5kZXN0LCBpZCwgdmFsMSk7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3Q6Ci0gKiBAc3RydWN0MTogYSAjR3N0U3RydWN0dXJlCi0gKiBAc3RydWN0MjogYSAjR3N0U3RydWN0dXJlCi0gKgotICogSW50ZXJzZWN0cyBAc3RydWN0MSBhbmQgQHN0cnVjdDIgYW5kIHJldHVybnMgdGhlIGludGVyc2VjdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBJbnRlcnNlY3Rpb24gb2YgQHN0cnVjdDEgYW5kIEBzdHJ1Y3QyCi0gKi8KLUdzdFN0cnVjdHVyZSAqCi1nc3Rfc3RydWN0dXJlX2ludGVyc2VjdCAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0MSwKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3QyKQotewotICBJbnRlcnNlY3REYXRhIGRhdGE7Ci0KLSAgZ19hc3NlcnQgKHN0cnVjdDEgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzdHJ1Y3QyICE9IE5VTEwpOwotCi0gIGlmIChHX1VOTElLRUxZIChzdHJ1Y3QxLT5uYW1lICE9IHN0cnVjdDItPm5hbWUpKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIGNvcHkgZmllbGRzIGZyb20gc3RydWN0MSB3aGljaCB3ZSBoYXZlIG5vdCBpbiBzdHJ1Y3QyIHRvIHRhcmdldAotICAgKiBpbnRlcnNlY3QgaWYgd2UgaGF2ZSB0aGUgZmllbGQgaW4gYm90aCAqLwotICBkYXRhLmRlc3QgPSBnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eSAoc3RydWN0MS0+bmFtZSk7Ci0gIGRhdGEuaW50ZXJzZWN0ID0gc3RydWN0MjsKLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKChHc3RTdHJ1Y3R1cmUgKikgc3RydWN0MSwKLSAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3RfZmllbGQxLCAmZGF0YSkpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgLyogY29weSBmaWVsZHMgZnJvbSBzdHJ1Y3QyIHdoaWNoIHdlIGhhdmUgbm90IGluIHN0cnVjdDEgdG8gdGFyZ2V0ICovCi0gIGRhdGEuaW50ZXJzZWN0ID0gc3RydWN0MTsKLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKChHc3RTdHJ1Y3R1cmUgKikgc3RydWN0MiwKLSAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pbnRlcnNlY3RfZmllbGQyLCAmZGF0YSkpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgcmV0dXJuIGRhdGEuZGVzdDsKLQotZXJyb3I6Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoZGF0YS5kZXN0KTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NhcHNfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3RfZmllbGQgKEdRdWFyayBpZCwgY29uc3QgR1ZhbHVlICogdmFsMSwKLSAgICBncG9pbnRlciBkYXRhKQotewotICBHc3RTdHJ1Y3R1cmUgKm90aGVyID0gKEdzdFN0cnVjdHVyZSAqKSBkYXRhOwotICBjb25zdCBHVmFsdWUgKnZhbDIgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAob3RoZXIsIGlkKTsKLQotICBpZiAoR19MSUtFTFkgKHZhbDIpKSB7Ci0gICAgaWYgKCFnc3RfdmFsdWVfY2FuX2ludGVyc2VjdCAodmFsMSwgdmFsMikpIHsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9IGVsc2UgewotICAgICAgZ2ludCBlcSA9IGdzdF92YWx1ZV9jb21wYXJlICh2YWwxLCB2YWwyKTsKLQotICAgICAgaWYgKGVxID09IEdTVF9WQUxVRV9VTk9SREVSRUQpIHsKLSAgICAgICAgLyogd2UgbmVlZCB0byB0cnkgaW50ZXJzZXRpbmcgKi8KLSAgICAgICAgaWYgKCFnc3RfdmFsdWVfaW50ZXJzZWN0IChOVUxMLCB2YWwxLCB2YWwyKSkgewotICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChlcSAhPSBHU1RfVkFMVUVfRVFVQUwpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3Q6Ci0gKiBAc3RydWN0MTogYSAjR3N0U3RydWN0dXJlCi0gKiBAc3RydWN0MjogYSAjR3N0U3RydWN0dXJlCi0gKgotICogVHJpZXMgaW50ZXJzZWN0aW5nIEBzdHJ1Y3QxIGFuZCBAc3RydWN0MiBhbmQgcmVwb3J0cyB3aGV0aGVyIHRoZSByZXN1bHQKLSAqIHdvdWxkIG5vdCBiZSBlbXB0eS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBpbnRlcnNlY3Rpb24gd291bGQgbm90IGJlIGVtcHR5Ci0gKi8KLWdib29sZWFuCi1nc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3QgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdDEsCi0gICAgY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0MikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19TVFJVQ1RVUkUgKHN0cnVjdDEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1RSVUNUVVJFIChzdHJ1Y3QyKSwgRkFMU0UpOwotCi0gIGlmIChHX1VOTElLRUxZIChzdHJ1Y3QxLT5uYW1lICE9IHN0cnVjdDItPm5hbWUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiB0cmllcyB0byBpbnRlcnNlY3QgaWYgd2UgaGF2ZSB0aGUgZmllbGQgaW4gYm90aCAqLwotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoICgoR3N0U3RydWN0dXJlICopIHN0cnVjdDEsCi0gICAgICBnc3RfY2Fwc19zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdF9maWVsZCwgKGdwb2ludGVyKSBzdHJ1Y3QyKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY2Fwc19zdHJ1Y3R1cmVfaXNfc3VwZXJzZXRfZmllbGQgKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RTdHJ1Y3R1cmUgKnN1YnNldCA9IHVzZXJfZGF0YTsKLSAgY29uc3QgR1ZhbHVlICpvdGhlcjsKLSAgaW50IGNvbXBhcmlzb247Ci0KLSAgaWYgKCEob3RoZXIgPSBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAoc3Vic2V0LCBmaWVsZF9pZCkpKQotICAgIC8qIGZpZWxkIGlzIG1pc3NpbmcgaW4gdGhlIHN1YnNldCA9PiBubyBzdWJzZXQgKi8KLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgY29tcGFyaXNvbiA9IGdzdF92YWx1ZV9jb21wYXJlICh2YWx1ZSwgb3RoZXIpOwotCi0gIC8qIGVxdWFsIHZhbHVlcyBhcmUgc3Vic2V0ICovCi0gIGlmIChjb21wYXJpc29uID09IEdTVF9WQUxVRV9FUVVBTCkKLSAgICByZXR1cm4gVFJVRTsKLQotICAvKiBvcmRlcmVkLCBidXQgdW5lcXVhbCwgdmFsdWVzIGFyZSBub3QgKi8KLSAgaWYgKGNvbXBhcmlzb24gIT0gR1NUX1ZBTFVFX1VOT1JERVJFRCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIGdzdF92YWx1ZV9pc19zdWJzZXQgKG90aGVyLCB2YWx1ZSk7Ci19Ci0KLS8qKgotICogZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQ6Ci0gKiBAc3Vic2V0OiBhICNHc3RTdHJ1Y3R1cmUKLSAqIEBzdXBlcnNldDogYSBwb3RlbnRpYWxseSBncmVhdGVyICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBDaGVja3MgaWYgQHN1YnNldCBpcyBhIHN1YnNldCBvZiBAc3VwZXJzZXQsIGkuZS4gaGFzIHRoZSBzYW1lCi0gKiBzdHJ1Y3R1cmUgbmFtZSBhbmQgZm9yIGFsbCBmaWVsZHMgdGhhdCBhcmUgZXhpc3RpbmcgaW4gQHN1cGVyc2V0LAotICogQHN1YnNldCBoYXMgYSB2YWx1ZSB0aGF0IGlzIGEgc3Vic2V0IG9mIHRoZSB2YWx1ZSBpbiBAc3VwZXJzZXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQHN1YnNldCBpcyBhIHN1YnNldCBvZiBAc3VwZXJzZXQKLSAqLwotZ2Jvb2xlYW4KLWdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdWJzZXQsCi0gICAgY29uc3QgR3N0U3RydWN0dXJlICogc3VwZXJzZXQpCi17Ci0gIGlmICgoc3VwZXJzZXQtPm5hbWUgIT0gc3Vic2V0LT5uYW1lKSB8fAotICAgICAgKGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHN1cGVyc2V0KSA+IGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHN1YnNldCkpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoICgoR3N0U3RydWN0dXJlICopIHN1cGVyc2V0LAotICAgICAgZ3N0X2NhcHNfc3RydWN0dXJlX2lzX3N1cGVyc2V0X2ZpZWxkLCAoZ3BvaW50ZXIpIHN1YnNldCk7Ci19Ci0KLQotLyoqCi0gKiBnc3Rfc3RydWN0dXJlX2ZpeGF0ZToKLSAqIEBzdHJ1Y3R1cmU6IGEgI0dzdFN0cnVjdHVyZQotICoKLSAqIEZpeGF0ZSBhbGwgdmFsdWVzIGluIEBzdHJ1Y3R1cmUgdXNpbmcgZ3N0X3ZhbHVlX2ZpeGF0ZSgpLgotICogQHN0cnVjdHVyZSB3aWxsIGJlIG1vZGlmaWVkIGluLXBsYWNlIGFuZCBzaG91bGQgYmUgd3JpdGFibGUuCi0gKi8KLXZvaWQKLWdzdF9zdHJ1Y3R1cmVfZml4YXRlIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19TVFJVQ1RVUkUgKHN0cnVjdHVyZSkpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoc3RydWN0dXJlLCBkZWZhdWx0X2ZpeGF0ZSwgc3RydWN0dXJlKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RzdHJ1Y3R1cmUuaCBiL2dzdC9nc3RzdHJ1Y3R1cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc0NmFiMC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0c3RydWN0dXJlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TVFJVQ1RVUkVfSF9fCi0jZGVmaW5lIF9fR1NUX1NUUlVDVFVSRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RjbG9jay5oPgotI2luY2x1ZGUgPGdzdC9nc3RkYXRldGltZS5oPgotI2luY2x1ZGUgPGdzdC9nbGliLWNvbXBhdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLUdTVF9FWFBPUlQgR1R5cGUgX2dzdF9zdHJ1Y3R1cmVfdHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cnVjdHVyZSBHc3RTdHJ1Y3R1cmU7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfU1RSVUNUVVJFICAgICAgICAgICAgIChfZ3N0X3N0cnVjdHVyZV90eXBlKQotI2RlZmluZSBHU1RfSVNfU1RSVUNUVVJFKG9iamVjdCkgICAgICAgKChvYmplY3QpICYmIChHU1RfU1RSVUNUVVJFKG9iamVjdCktPnR5cGUgPT0gR1NUX1RZUEVfU1RSVUNUVVJFKSkKLSNkZWZpbmUgR1NUX1NUUlVDVFVSRV9DQVNUKG9iamVjdCkgICAgICgoR3N0U3RydWN0dXJlICopKG9iamVjdCkpCi0jZGVmaW5lIEdTVF9TVFJVQ1RVUkUob2JqZWN0KSAgICAgICAgICAoR1NUX1NUUlVDVFVSRV9DQVNUKG9iamVjdCkpCi0KLQotLyoqCi0gKiBHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYzoKLSAqIEBmaWVsZF9pZDogdGhlICNHUXVhcmsgb2YgdGhlIGZpZWxkIG5hbWUKLSAqIEB2YWx1ZTogdGhlICNHVmFsdWUgb2YgdGhlIGZpZWxkCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKLSAqCi0gKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKCkuIFRoZSBmdW5jdGlvbiBtYXkKLSAqIG5vdCBtb2RpZnkgQHZhbHVlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBmb3JlYWNoIG9wZXJhdGlvbiBzaG91bGQgY29udGludWUsICVGQUxTRSBpZgotICogdGhlIGZvcmVhY2ggb3BlcmF0aW9uIHNob3VsZCBzdG9wIHdpdGggJUZBTFNFLgotICovCi10eXBlZGVmIGdib29sZWFuICgqR3N0U3RydWN0dXJlRm9yZWFjaEZ1bmMpIChHUXVhcmsgICBmaWVsZF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RTdHJ1Y3R1cmVNYXBGdW5jOgotICogQGZpZWxkX2lkOiB0aGUgI0dRdWFyayBvZiB0aGUgZmllbGQgbmFtZQotICogQHZhbHVlOiB0aGUgI0dWYWx1ZSBvZiB0aGUgZmllbGQKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YQotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBpbiBnc3Rfc3RydWN0dXJlX21hcF9pbl9wbGFjZSgpLiBUaGUgZnVuY3Rpb24KLSAqIG1heSBtb2RpZnkgQHZhbHVlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBtYXAgb3BlcmF0aW9uIHNob3VsZCBjb250aW51ZSwgJUZBTFNFIGlmCi0gKiB0aGUgbWFwIG9wZXJhdGlvbiBzaG91bGQgc3RvcCB3aXRoICVGQUxTRS4KLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAoKkdzdFN0cnVjdHVyZU1hcEZ1bmMpICAgICAoR1F1YXJrICAgZmllbGRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVmFsdWUgKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogR3N0U3RydWN0dXJlRmlsdGVyTWFwRnVuYzoKLSAqIEBmaWVsZF9pZDogdGhlICNHUXVhcmsgb2YgdGhlIGZpZWxkIG5hbWUKLSAqIEB2YWx1ZTogdGhlICNHVmFsdWUgb2YgdGhlIGZpZWxkCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKLSAqCi0gKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gZ3N0X3N0cnVjdHVyZV9maWx0ZXJfYW5kX21hcF9pbl9wbGFjZSgpLgotICogVGhlIGZ1bmN0aW9uIG1heSBtb2RpZnkgQHZhbHVlLCBhbmQgdGhlIHZhbHVlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tCi0gKiB0aGUgc3RydWN0dXJlIGlmICVGQUxTRSBpcyByZXR1cm5lZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmllbGQgc2hvdWxkIGJlIHByZXNlcnZlZCwgJUZBTFNFIGlmIGl0Ci0gKiBzaG91bGQgYmUgcmVtb3ZlZC4KLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAoKkdzdFN0cnVjdHVyZUZpbHRlck1hcEZ1bmMpIChHUXVhcmsgICBmaWVsZF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlICogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogR3N0U3RydWN0dXJlOgotICogQHR5cGU6IHRoZSBHVHlwZSBvZiBhIHN0cnVjdHVyZQotICoKLSAqIFRoZSBHc3RTdHJ1Y3R1cmUgb2JqZWN0LiBNb3N0IGZpZWxkcyBhcmUgcHJpdmF0ZS4KLSAqLwotc3RydWN0IF9Hc3RTdHJ1Y3R1cmUgewotICBHVHlwZSB0eXBlOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHUXVhcmsgbmFtZTsKLX07Ci0KLUdUeXBlICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF90eXBlICAgICAgICAgICAgICh2b2lkKTsKLQotR3N0U3RydWN0dXJlICogICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICAgICAgICAgICAgKGNvbnN0IGdjaGFyICogbmFtZSkgR19HTlVDX01BTExPQzsKLQotR3N0U3RydWN0dXJlICogICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3X2lkX2VtcHR5ICAgICAgICAgKEdRdWFyayBxdWFyaykgR19HTlVDX01BTExPQzsKLQotR3N0U3RydWN0dXJlICogICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICAgICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGZpcnN0ZmllbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEICBHX0dOVUNfTUFMTE9DOwotCi1Hc3RTdHJ1Y3R1cmUgKiAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0ICAgICAgICAgICAoY29uc3QgZ2NoYXIgKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZmlyc3RmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgIHZhcmFyZ3MpIEdfR05VQ19NQUxMT0M7Ci0KLUdzdFN0cnVjdHVyZSAqICAgICAgICBnc3Rfc3RydWN0dXJlX25ld19pZCAgICAgICAgICAgICAgIChHUXVhcmsgbmFtZV9xdWFyaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUXVhcmsgZmllbGRfcXVhcmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBHX0dOVUNfTUFMTE9DOwotCi1Hc3RTdHJ1Y3R1cmUgKiAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfZnJvbV9zdHJpbmcgICAgICAoY29uc3QgZ2NoYXIgKiBzdHJpbmcpOwotCi1Hc3RTdHJ1Y3R1cmUgKiAgICAgICAgZ3N0X3N0cnVjdHVyZV9jb3B5ICAgICAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSkgR19HTlVDX01BTExPQzsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3BhcmVudF9yZWZjb3VudCAgKEdzdFN0cnVjdHVyZSAgICAgICAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgICogcmVmY291bnQpOwotCi12b2lkICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlICAgICAgICAgICAgICAgICAoR3N0U3RydWN0dXJlICAgICAgICAqIHN0cnVjdHVyZSk7Ci0KLWNvbnN0IGdjaGFyICogICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9uYW1lICAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlKTsKLQotR1F1YXJrICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWVfaWQgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgKiBzdHJ1Y3R1cmUpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICogbmFtZSk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lICAgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBuYW1lKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlICAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1F1YXJrICAgICAgICAgICAgICAgIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICAgICAgKiB2YWx1ZSk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgICAgICAqIHZhbHVlKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZSAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1F1YXJrICAgICAgICAgICAgICAgIGZpZWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdWYWx1ZSAgICAgICAgICAgICAgKiB2YWx1ZSk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlICAgICAgICAgICAgICAqIHZhbHVlKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0ICAgICAgICAgICAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqIGZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWxpc3QgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCB2YXJhcmdzKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0ICAgICAgICAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1F1YXJrICAgICAgICAgICAgICAgIGZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3QgICAgICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayAgICAgICAgICAgICAgICBmaWVsZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCB2YXJhcmdzKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbGlzdCAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAqIGZpcnN0X2ZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgICAgICAgICBhcmdzKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0ICAgICAgICAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAqIGZpcnN0X2ZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWxpc3QgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayAgICAgICAgICAgICAgICBmaXJzdF9maWVsZF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgICAgICAgICAgYXJncyk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2dldCAgICAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayAgICAgICAgICAgICAgICBmaXJzdF9maWVsZF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci0KLWNvbnN0IEdWYWx1ZSAqICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayAgICAgICAgICAgICAgICBmaWVsZCk7Ci0KLWNvbnN0IEdWYWx1ZSAqICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUpOwotCi12b2lkICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgICAgICAgICAoR3N0U3RydWN0dXJlICAgICAgICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUpOwotCi12b2lkICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzICAgICAgICAoR3N0U3RydWN0dXJlICAgICAgICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICogZmllbGRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKLQotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkc192YWxpc3QgKEdzdFN0cnVjdHVyZSAgICAgICAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqIGZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgICAgICAgICAgdmFyYXJncyk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzICAgIChHc3RTdHJ1Y3R1cmUgICAgICAgICogc3RydWN0dXJlKTsKLQotR1R5cGUgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGUgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqIGZpZWxkbmFtZSk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggICAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jICAgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbWFwX2luX3BsYWNlICAgICAgICAgKEdzdFN0cnVjdHVyZSAgICAgICAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlTWFwRnVuYyAgIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJfZGF0YSk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlIChHc3RTdHJ1Y3R1cmUgICAgICAgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0cnVjdHVyZUZpbHRlck1hcEZ1bmMgICBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICB1c2VyX2RhdGEpOwotCi1naW50ICAgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSk7Ci0KLWNvbnN0IGdjaGFyICogICAgICAgICBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBpbmRleCk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZCAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayAgICAgICAgICAgICAgICBmaWVsZCk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZF90eXBlZCAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayAgICAgICAgICAgICAgICBmaWVsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSAgICAgICAgICAgICAgICAgdHlwZSk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICogZmllbGRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICB0eXBlKTsKLQotLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAqIHZhbHVlKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAgICAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqIGZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgICogdmFsdWUpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICogZmllbGRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgKiB2YWx1ZSk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQ2NCAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgICAgICAqIHZhbHVlKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NCAgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqIGZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAgICAgICAgICogdmFsdWUpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICogZmllbGRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgICAgICAgICAgICAgKiB2YWx1ZSk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kYXRlICAgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGUgICAgICAgICAgICAgICoqIHZhbHVlKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqIGZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3REYXRlVGltZSAgICAgICAgKiogdmFsdWUpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICogZmllbGRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAgICAgICAgKiB2YWx1ZSk7Ci0KLWNvbnN0IGdjaGFyICogICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgICAgICAgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKiBmaWVsZG5hbWUpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZW51bSAgICAgICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICogZmllbGRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICAgICAgICBlbnVtdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgICogdmFsdWUpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gICAgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICogZmllbGRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICAgKiB2YWx1ZV9udW1lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgICAqIHZhbHVlX2Rlbm9taW5hdG9yKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZsYWdzZXQgICAgICAgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqIGZpZWxkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICogdmFsdWVfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAqIHZhbHVlX21hc2spOwotCi1nY2hhciAqICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgICAgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkgR19HTlVDX01BTExPQzsKLQotR3N0U3RydWN0dXJlICogICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgIChjb25zdCBnY2hhciAqIHN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgICAgICAqKiBlbmQpIEdfR05VQ19NQUxMT0M7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAgICAgIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICogZmllbGRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICB0YXJnZXQpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9kb3VibGUgICAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAqIGZpZWxkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICAgICAgICAgdGFyZ2V0KTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW4gICAgICAgICAgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgKiBmaWVsZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgIHRhcmdldCk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcgICAgICAgICAgIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICogZmllbGRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgKiB0YXJnZXQpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAqIGZpZWxkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2ludCAgICAgdGFyZ2V0X251bWVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnaW50ICAgICB0YXJnZXRfZGVub21pbmF0b3IpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQgIChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgKiBmaWVsZF9uYW1lKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlICAgICAgICAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgICAgICAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZTIpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgICAgIChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdWJzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdXBlcnNldCk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2Nhbl9pbnRlcnNlY3QgKGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3QyKTsKLQotR3N0U3RydWN0dXJlICogICAgICAgIGdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0ICAgICAoY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0cnVjdDIpIEdfR05VQ19NQUxMT0M7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0U3RydWN0dXJlLCBnc3Rfc3RydWN0dXJlX2ZyZWUpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2dzdC9nc3RzeXN0ZW1jbG9jay5jIGIvZ3N0L2dzdHN5c3RlbWNsb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZGVjZmYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHN5c3RlbWNsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDI1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0c3lzdGVtY2xvY2suYzogRGVmYXVsdCBjbG9jaywgdXNlcyB0aGUgc3lzdGVtIGNsb2NrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHN5c3RlbWNsb2NrCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IERlZmF1bHQgY2xvY2sgdGhhdCB1c2VzIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lCi0gKiBAc2VlX2Fsc286ICNHc3RDbG9jawotICoKLSAqIFRoZSBHU3RyZWFtZXIgY29yZSBwcm92aWRlcyBhIEdzdFN5c3RlbUNsb2NrIGJhc2VkIG9uIHRoZSBzeXN0ZW0gdGltZS4KLSAqIEFzeW5jaHJvbm91cyBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCBmcm9tIGFuIGludGVybmFsIHRocmVhZC4KLSAqCi0gKiBDbG9jayBpbXBsZW1lbnRvcnMgYXJlIGVuY291cmFnZWQgdG8gc3ViY2xhc3MgdGhpcyBzeXN0ZW1jbG9jayBhcyBpdAotICogaW1wbGVtZW50cyB0aGUgYXN5bmMgbm90aWZpY2F0aW9uLgotICoKLSAqIFN1YmNsYXNzZXMgY2FuIGhvd2V2ZXIgb3ZlcnJpZGUgYWxsIG9mIHRoZSBpbXBvcnRhbnQgbWV0aG9kcyBmb3Igc3luYyBhbmQKLSAqIGFzeW5jIG5vdGlmaWNhdGlvbnMgdG8gaW1wbGVtZW50IHRoZWlyIG93biBjYWxsYmFjayBtZXRob2RzIG9yIGJsb2NraW5nCi0gKiB3YWl0IG9wZXJhdGlvbnMuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHN5c3RlbWNsb2NrLmgiCi0jaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCi0jaW5jbHVkZSAiZ3N0cG9sbC5oIgotI2luY2x1ZGUgImdzdHV0aWxzLmgiCi0jaW5jbHVkZSAiZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmZGVmIEdfT1NfV0lOMzIKLSMgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOICAgLyogcHJldmVudHMgZnJvbSBpbmNsdWRpbmcgdG9vIG1hbnkgdGhpbmdzICovCi0jICBpbmNsdWRlIDx3aW5kb3dzLmg+ICAgICAgICAgIC8qIFF1ZXJ5UGVyZm9ybWFuY2UqIHN0dWZmICovCi0jICB1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0jICBpZm5kZWYgRVdPVUxEQkxPQ0sKLSMgIGRlZmluZSBFV09VTERCTE9DSyBFQUdBSU4gICAgLyogVGhpcyBpcyBqdXN0IHRvIHBsYWNhdGUgZ2NjICovCi0jICBlbmRpZgotI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KLQotI2lmZGVmIF9fQVBQTEVfXwotI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBHRVRfRU5UUllfU1RBVFVTKGUpICAgICAgICAgICgoR3N0Q2xvY2tSZXR1cm4pIGdfYXRvbWljX2ludF9nZXQoJkdTVF9DTE9DS19FTlRSWV9TVEFUVVMoZSkpKQotI2RlZmluZSBTRVRfRU5UUllfU1RBVFVTKGUsdmFsKSAgICAgIChnX2F0b21pY19pbnRfc2V0KCZHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTKGUpLCh2YWwpKSkKLSNkZWZpbmUgQ0FTX0VOVFJZX1NUQVRVUyhlLG9sZCx2YWwpICAoZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlKFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgmR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyhlKSksIChvbGQpLCAodmFsKSkpCi0KLS8qIERlZmluZSB0aGlzIHRvIGdldCBzb21lIGV4dHJhIGRlYnVnIGFib3V0IGppdHRlciBmcm9tIGVhY2ggY2xvY2tfd2FpdCAqLwotI3VuZGVmIFdBSVRfREVCVUdHSU5HCi0KLSNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DS19HRVRfQ09ORChjbG9jaykgICAgICAgICgmR1NUX1NZU1RFTV9DTE9DS19DQVNUKGNsb2NrKS0+cHJpdi0+ZW50cmllc19jaGFuZ2VkKQotI2RlZmluZSBHU1RfU1lTVEVNX0NMT0NLX1dBSVQoY2xvY2spICAgICAgICAgICAgZ19jb25kX3dhaXQoR1NUX1NZU1RFTV9DTE9DS19HRVRfQ09ORChjbG9jayksR1NUX09CSkVDVF9HRVRfTE9DSyhjbG9jaykpCi0jZGVmaW5lIEdTVF9TWVNURU1fQ0xPQ0tfVElNRURfV0FJVChjbG9jayx0dikgICBnX2NvbmRfdGltZWRfd2FpdChHU1RfU1lTVEVNX0NMT0NLX0dFVF9DT05EKGNsb2NrKSxHU1RfT0JKRUNUX0dFVF9MT0NLKGNsb2NrKSx0dikKLSNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DS19CUk9BRENBU1QoY2xvY2spICAgICAgIGdfY29uZF9icm9hZGNhc3QoR1NUX1NZU1RFTV9DTE9DS19HRVRfQ09ORChjbG9jaykpCi0KLXN0cnVjdCBfR3N0U3lzdGVtQ2xvY2tQcml2YXRlCi17Ci0gIEdUaHJlYWQgKnRocmVhZDsgICAgICAgICAgICAgIC8qIHRocmVhZCBmb3IgYXN5bmMgbm90aWZ5ICovCi0gIGdib29sZWFuIHN0b3BwaW5nOwotCi0gIEdMaXN0ICplbnRyaWVzOwotICBHQ29uZCBlbnRyaWVzX2NoYW5nZWQ7Ci0KLSAgR3N0Q2xvY2tUeXBlIGNsb2NrX3R5cGU7Ci0gIEdzdFBvbGwgKnRpbWVyOwotICBnaW50IHdha2V1cF9jb3VudDsgICAgICAgICAgICAvKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2l0aCBhIHBlbmRpbmcgd2FrZXVwICovCi0gIGdib29sZWFuIGFzeW5jX3dha2V1cDsgICAgICAgIC8qIGlmIHRoZSB3YWtldXAgd2FzIGJlY2F1c2Ugb2YgYSBhc3luYyBsaXN0IGNoYW5nZSAqLwotCi0jaWZkZWYgR19PU19XSU4zMgotICBMQVJHRV9JTlRFR0VSIHN0YXJ0OwotICBMQVJHRV9JTlRFR0VSIGZyZXF1ZW5jeTsKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR19PU19XSU4zMiAqLwotI2lmZGVmIF9fQVBQTEVfXwotICBzdHJ1Y3QgbWFjaF90aW1lYmFzZV9pbmZvIG1hY2hfdGltZWJhc2U7Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DS19HRVRfUFJJVkFURShvYmopICBcCi0gICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCBcCi0gICAgICAgIEdzdFN5c3RlbUNsb2NrUHJpdmF0ZSkpCi0KLSNpZmRlZiBIQVZFX1BPU0lYX1RJTUVSUwotIyBpZmRlZiBIQVZFX01PTk9UT05JQ19DTE9DSwotIyAgZGVmaW5lIERFRkFVTFRfQ0xPQ0tfVFlQRSBHU1RfQ0xPQ0tfVFlQRV9NT05PVE9OSUMKLSMgZWxzZQotIyAgZGVmaW5lIERFRkFVTFRfQ0xPQ0tfVFlQRSBHU1RfQ0xPQ0tfVFlQRV9SRUFMVElNRQotIyBlbmRpZgotI2Vsc2UKLSNkZWZpbmUgREVGQVVMVF9DTE9DS19UWVBFIEdTVF9DTE9DS19UWVBFX1JFQUxUSU1FCi0jZW5kaWYKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ0xPQ0tfVFlQRSwKLSAgLyogRklMTCBNRSAqLwotfTsKLQotLyogdGhlIG9uZSBpbnN0YW5jZSBvZiB0aGUgc3lzdGVtY2xvY2sgKi8KLXN0YXRpYyBHc3RDbG9jayAqX3RoZV9zeXN0ZW1fY2xvY2sgPSBOVUxMOwotc3RhdGljIGdib29sZWFuIF9leHRlcm5hbF9kZWZhdWx0X2Nsb2NrID0gRkFMU0U7Ci0KLXN0YXRpYyB2b2lkIGdzdF9zeXN0ZW1fY2xvY2tfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3lzdGVtX2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9zeXN0ZW1fY2xvY2tfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0Q2xvY2tUaW1lIGdzdF9zeXN0ZW1fY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKEdzdENsb2NrICogY2xvY2spOwotc3RhdGljIGd1aW50NjQgZ3N0X3N5c3RlbV9jbG9ja19nZXRfcmVzb2x1dGlvbiAoR3N0Q2xvY2sgKiBjbG9jayk7Ci1zdGF0aWMgR3N0Q2xvY2tSZXR1cm4gZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2ppdHRlciAoR3N0Q2xvY2sgKiBjbG9jaywKLSAgICBHc3RDbG9ja0VudHJ5ICogZW50cnksIEdzdENsb2NrVGltZURpZmYgKiBqaXR0ZXIpOwotc3RhdGljIEdzdENsb2NrUmV0dXJuIGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXJfdW5sb2NrZWQKLSAgICAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0Q2xvY2tFbnRyeSAqIGVudHJ5LCBHc3RDbG9ja1RpbWVEaWZmICogaml0dGVyLAotICAgIGdib29sZWFuIHJlc3RhcnQpOwotc3RhdGljIEdzdENsb2NrUmV0dXJuIGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9hc3luYyAoR3N0Q2xvY2sgKiBjbG9jaywKLSAgICBHc3RDbG9ja0VudHJ5ICogZW50cnkpOwotc3RhdGljIHZvaWQgZ3N0X3N5c3RlbV9jbG9ja19pZF91bnNjaGVkdWxlIChHc3RDbG9jayAqIGNsb2NrLAotICAgIEdzdENsb2NrRW50cnkgKiBlbnRyeSk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCAoR3N0Q2xvY2sgKiBjbG9jayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3N5c3RlbV9jbG9ja19zdGFydF9hc3luYyAoR3N0U3lzdGVtQ2xvY2sgKiBjbG9jayk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3lzdGVtX2Nsb2NrX2FkZF93YWtldXAgKEdzdFN5c3RlbUNsb2NrICogc3lzY2xvY2spOwotCi1zdGF0aWMgR011dGV4IF9nc3Rfc3lzY2xvY2tfbXV0ZXg7Ci0KLS8qIHN0YXRpYyBndWludCBnc3Rfc3lzdGVtX2Nsb2NrX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07ICovCi0KLSNkZWZpbmUgZ3N0X3N5c3RlbV9jbG9ja19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RTeXN0ZW1DbG9jaywgZ3N0X3N5c3RlbV9jbG9jaywgR1NUX1RZUEVfQ0xPQ0spOwotCi1zdGF0aWMgdm9pZAotZ3N0X3N5c3RlbV9jbG9ja19jbGFzc19pbml0IChHc3RTeXN0ZW1DbG9ja0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0Q2xvY2tDbGFzcyAqZ3N0Y2xvY2tfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGNsb2NrX2NsYXNzID0gKEdzdENsb2NrQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RTeXN0ZW1DbG9ja1ByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3N5c3RlbV9jbG9ja19kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfc3lzdGVtX2Nsb2NrX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3N5c3RlbV9jbG9ja19nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DTE9DS19UWVBFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJjbG9jay10eXBlIiwgIkNsb2NrIHR5cGUiLAotICAgICAgICAgICJUaGUgdHlwZSBvZiB1bmRlcmx5aW5nIGNsb2NrIGltcGxlbWVudGF0aW9uIHVzZWQiLAotICAgICAgICAgIEdTVF9UWVBFX0NMT0NLX1RZUEUsIERFRkFVTFRfQ0xPQ0tfVFlQRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RjbG9ja19jbGFzcy0+Z2V0X2ludGVybmFsX3RpbWUgPSBnc3Rfc3lzdGVtX2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lOwotICBnc3RjbG9ja19jbGFzcy0+Z2V0X3Jlc29sdXRpb24gPSBnc3Rfc3lzdGVtX2Nsb2NrX2dldF9yZXNvbHV0aW9uOwotICBnc3RjbG9ja19jbGFzcy0+d2FpdCA9IGdzdF9zeXN0ZW1fY2xvY2tfaWRfd2FpdF9qaXR0ZXI7Ci0gIGdzdGNsb2NrX2NsYXNzLT53YWl0X2FzeW5jID0gZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2FzeW5jOwotICBnc3RjbG9ja19jbGFzcy0+dW5zY2hlZHVsZSA9IGdzdF9zeXN0ZW1fY2xvY2tfaWRfdW5zY2hlZHVsZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zeXN0ZW1fY2xvY2tfaW5pdCAoR3N0U3lzdGVtQ2xvY2sgKiBjbG9jaykKLXsKLSAgR3N0U3lzdGVtQ2xvY2tQcml2YXRlICpwcml2OwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGNsb2NrLAotICAgICAgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9TWU5DIHwKLSAgICAgIEdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfQVNZTkMgfAotICAgICAgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkMgfAotICAgICAgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX0FTWU5DKTsKLQotICBjbG9jay0+cHJpdiA9IHByaXYgPSBHU1RfU1lTVEVNX0NMT0NLX0dFVF9QUklWQVRFIChjbG9jayk7Ci0KLSAgcHJpdi0+Y2xvY2tfdHlwZSA9IERFRkFVTFRfQ0xPQ0tfVFlQRTsKLSAgcHJpdi0+dGltZXIgPSBnc3RfcG9sbF9uZXdfdGltZXIgKCk7Ci0KLSAgcHJpdi0+ZW50cmllcyA9IE5VTEw7Ci0gIGdfY29uZF9pbml0ICgmcHJpdi0+ZW50cmllc19jaGFuZ2VkKTsKLQotI2lmZGVmIEdfT1NfV0lOMzIKLSAgUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSAoJnByaXYtPmZyZXF1ZW5jeSk7Ci0gIC8qIGNhbiBiZSAwIGlmIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBoYXZlIGhhcmR3YXJlIHN1cHBvcnQgKi8KLSAgaWYgKHByaXYtPmZyZXF1ZW5jeS5RdWFkUGFydCAhPSAwKQotICAgIC8qIHdlIHRha2UgYSBiYXNlIHRpbWUgc28gdGhhdCB0aW1lIHN0YXJ0cyBmcm9tIDAgdG8gZWFzZSBkZWJ1Z2dpbmcgKi8KLSAgICBRdWVyeVBlcmZvcm1hbmNlQ291bnRlciAoJnByaXYtPnN0YXJ0KTsKLSNlbmRpZiAvKiBHX09TX1dJTjMyICovCi0KLSNpZmRlZiBfX0FQUExFX18KLSAgbWFjaF90aW1lYmFzZV9pbmZvICgmcHJpdi0+bWFjaF90aW1lYmFzZSk7Ci0jZW5kaWYKLQotI2lmIDAKLSAgLyogVW5jb21tZW50IHRoaXMgdG8gc3RhcnQgdGhlIGFzeW5jIGNsb2NrIHRocmVhZCBzdHJhaWdodCBhd2F5ICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOwotICBnc3Rfc3lzdGVtX2Nsb2NrX3N0YXJ0X2FzeW5jIChjbG9jayk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zeXN0ZW1fY2xvY2tfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrID0gKEdzdENsb2NrICopIG9iamVjdDsKLSAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7Ci0gIEdzdFN5c3RlbUNsb2NrUHJpdmF0ZSAqcHJpdiA9IHN5c2Nsb2NrLT5wcml2OwotICBHTGlzdCAqZW50cmllczsKLQotICAvKiBlbHNlIHdlIGhhdmUgdG8gc3RvcCB0aGUgdGhyZWFkICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOwotICBwcml2LT5zdG9wcGluZyA9IFRSVUU7Ci0gIC8qIHVuc2NoZWR1bGUgYWxsIGVudHJpZXMgKi8KLSAgZm9yIChlbnRyaWVzID0gcHJpdi0+ZW50cmllczsgZW50cmllczsgZW50cmllcyA9IGdfbGlzdF9uZXh0IChlbnRyaWVzKSkgewotICAgIEdzdENsb2NrRW50cnkgKmVudHJ5ID0gKEdzdENsb2NrRW50cnkgKikgZW50cmllcy0+ZGF0YTsKLQotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJ1bnNjaGVkdWxpbmcgZW50cnkgJXAiLCBlbnRyeSk7Ci0gICAgU0VUX0VOVFJZX1NUQVRVUyAoZW50cnksIEdTVF9DTE9DS19VTlNDSEVEVUxFRCk7Ci0gIH0KLSAgR1NUX1NZU1RFTV9DTE9DS19CUk9BRENBU1QgKGNsb2NrKTsKLSAgZ3N0X3N5c3RlbV9jbG9ja19hZGRfd2FrZXVwIChzeXNjbG9jayk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Ci0KLSAgaWYgKHByaXYtPnRocmVhZCkKLSAgICBnX3RocmVhZF9qb2luIChwcml2LT50aHJlYWQpOwotICBwcml2LT50aHJlYWQgPSBOVUxMOwotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiam9pbmVkIHRocmVhZCIpOwotCi0gIGdfbGlzdF9mb3JlYWNoIChwcml2LT5lbnRyaWVzLCAoR0Z1bmMpIGdzdF9jbG9ja19pZF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChwcml2LT5lbnRyaWVzKTsKLSAgcHJpdi0+ZW50cmllcyA9IE5VTEw7Ci0KLSAgZ3N0X3BvbGxfZnJlZSAocHJpdi0+dGltZXIpOwotICBnX2NvbmRfY2xlYXIgKCZwcml2LT5lbnRyaWVzX2NoYW5nZWQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotCi0gIGlmIChfdGhlX3N5c3RlbV9jbG9jayA9PSBjbG9jaykgewotICAgIF90aGVfc3lzdGVtX2Nsb2NrID0gTlVMTDsKLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiZGlzcG9zZWQgc3lzdGVtIGNsb2NrIik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zeXN0ZW1fY2xvY2tfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFN5c3RlbUNsb2NrICpzeXNjbG9jayA9IEdTVF9TWVNURU1fQ0xPQ0sgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NMT0NLX1RZUEU6Ci0gICAgICBzeXNjbG9jay0+cHJpdi0+Y2xvY2tfdHlwZSA9IChHc3RDbG9ja1R5cGUpIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJjbG9jay10eXBlIHNldCB0byAlZCIsCi0gICAgICAgICAgc3lzY2xvY2stPnByaXYtPmNsb2NrX3R5cGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N5c3RlbV9jbG9ja19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ0xPQ0tfVFlQRToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzeXNjbG9jay0+cHJpdi0+Y2xvY2tfdHlwZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3N5c3RlbV9jbG9ja19zZXRfZGVmYXVsdDoKLSAqIEBuZXdfY2xvY2s6IGEgI0dzdENsb2NrCi0gKgotICogU2V0cyB0aGUgZGVmYXVsdCBzeXN0ZW0gY2xvY2sgdGhhdCBjYW4gYmUgb2J0YWluZWQgd2l0aAotICogZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4oKS4KLSAqCi0gKiBUaGlzIGlzIG1vc3RseSB1c2VkIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgcHVycG9zZXMgd2hlbiB5b3UKLSAqIHdhbnQgdG8gaGF2ZSBjb250cm9sIG92ZXIgdGhlIHRpbWUgcmVwb3J0ZWQgYnkgdGhlIGRlZmF1bHQgc3lzdGVtCi0gKiBjbG9jay4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotdm9pZAotZ3N0X3N5c3RlbV9jbG9ja19zZXRfZGVmYXVsdCAoR3N0Q2xvY2sgKiBuZXdfY2xvY2spCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLQotICBnX211dGV4X2xvY2sgKCZfZ3N0X3N5c2Nsb2NrX211dGV4KTsKLSAgY2xvY2sgPSBfdGhlX3N5c3RlbV9jbG9jazsKLQotICBpZiAoY2xvY2sgIT0gTlVMTCkKLSAgICBnX29iamVjdF91bnJlZiAoY2xvY2spOwotCi0gIGlmIChuZXdfY2xvY2sgPT0gTlVMTCkgewotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJyZXNldHRpbmcgZGVmYXVsdCBzeXN0ZW0gY2xvY2siKTsKLSAgICBfZXh0ZXJuYWxfZGVmYXVsdF9jbG9jayA9IEZBTFNFOwotICB9IGVsc2UgewotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJzZXR0aW5nIG5ldyBkZWZhdWx0IHN5c3RlbSBjbG9jayB0byAlcCIsCi0gICAgICAgIG5ld19jbG9jayk7Ci0gICAgX2V4dGVybmFsX2RlZmF1bHRfY2xvY2sgPSBUUlVFOwotICAgIGdfb2JqZWN0X3JlZiAobmV3X2Nsb2NrKTsKLSAgfQotICBfdGhlX3N5c3RlbV9jbG9jayA9IG5ld19jbG9jazsKLSAgZ19tdXRleF91bmxvY2sgKCZfZ3N0X3N5c2Nsb2NrX211dGV4KTsKLX0KLQotLyoqCi0gKiBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbjoKLSAqCi0gKiBHZXQgYSBoYW5kbGUgdG8gdGhlIGRlZmF1bHQgc3lzdGVtIGNsb2NrLiBUaGUgcmVmY291bnQgb2YgdGhlCi0gKiBjbG9jayB3aWxsIGJlIGluY3JlYXNlZCBzbyB5b3UgbmVlZCB0byB1bnJlZiB0aGUgY2xvY2sgYWZ0ZXIKLSAqIHVzYWdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGRlZmF1bHQgY2xvY2suCi0gKgotICogTVQgc2FmZS4KLSAqLwotR3N0Q2xvY2sgKgotZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKHZvaWQpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLQotICBnX211dGV4X2xvY2sgKCZfZ3N0X3N5c2Nsb2NrX211dGV4KTsKLSAgY2xvY2sgPSBfdGhlX3N5c3RlbV9jbG9jazsKLQotICBpZiAoY2xvY2sgPT0gTlVMTCkgewotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJjcmVhdGluZyBuZXcgc3RhdGljIHN5c3RlbSBjbG9jayIpOwotICAgIGdfYXNzZXJ0ICghX2V4dGVybmFsX2RlZmF1bHRfY2xvY2spOwotICAgIGNsb2NrID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9TWVNURU1fQ0xPQ0ssCi0gICAgICAgICJuYW1lIiwgIkdzdFN5c3RlbUNsb2NrIiwgTlVMTCk7Ci0KLSAgICBnX2Fzc2VydCAoIWdfb2JqZWN0X2lzX2Zsb2F0aW5nIChHX09CSkVDVCAoY2xvY2spKSk7Ci0KLSAgICBfdGhlX3N5c3RlbV9jbG9jayA9IGNsb2NrOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmX2dzdF9zeXNjbG9ja19tdXRleCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZfZ3N0X3N5c2Nsb2NrX211dGV4KTsKLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAicmV0dXJuaW5nIHN0YXRpYyBzeXN0ZW0gY2xvY2siKTsKLSAgfQotCi0gIC8qIHdlIHJlZiBpdCBzaW5jZSB3ZSBhcmUgYSBjbG9jayBmYWN0b3J5LiAqLwotICBnc3Rfb2JqZWN0X3JlZiAoY2xvY2spOwotICByZXR1cm4gY2xvY2s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3lzdGVtX2Nsb2NrX3JlbW92ZV93YWtldXAgKEdzdFN5c3RlbUNsb2NrICogc3lzY2xvY2spCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN5c2Nsb2NrLT5wcml2LT53YWtldXBfY291bnQgPiAwKTsKLQotICBzeXNjbG9jay0+cHJpdi0+d2FrZXVwX2NvdW50LS07Ci0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJyZWFkaW5nIGNvbnRyb2wiKTsKLSAgd2hpbGUgKCFnc3RfcG9sbF9yZWFkX2NvbnRyb2wgKHN5c2Nsb2NrLT5wcml2LT50aW1lcikpIHsKLSAgICBpZiAoZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsKLSAgICAgIC8qIFRyeSBhZ2FpbiBhbmQgZ2l2ZSBvdGhlciB0aHJlYWRzIHRoZSBjaGFuY2UgdG8gZG8gc29tZXRoaW5nICovCi0gICAgICBnX3RocmVhZF95aWVsZCAoKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBDcml0aWNhbCBlcnJvciwgR3N0UG9sbCB3aWxsIGhhdmUgcHJpbnRlZCBhIGNyaXRpY2FsIHdhcm5pbmcgYWxyZWFkeSAqLwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIEdTVF9TWVNURU1fQ0xPQ0tfQlJPQURDQVNUIChzeXNjbG9jayk7Ci0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJ3YWtldXAgY291bnQgJWQiLAotICAgICAgc3lzY2xvY2stPnByaXYtPndha2V1cF9jb3VudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3lzdGVtX2Nsb2NrX2FkZF93YWtldXAgKEdzdFN5c3RlbUNsb2NrICogc3lzY2xvY2spCi17Ci0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJ3cml0aW5nIGNvbnRyb2wiKTsKLSAgZ3N0X3BvbGxfd3JpdGVfY29udHJvbCAoc3lzY2xvY2stPnByaXYtPnRpbWVyKTsKLSAgc3lzY2xvY2stPnByaXYtPndha2V1cF9jb3VudCsrOwotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAid2FrZXVwIGNvdW50ICVkIiwKLSAgICAgIHN5c2Nsb2NrLT5wcml2LT53YWtldXBfY291bnQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N5c3RlbV9jbG9ja193YWl0X3dha2V1cCAoR3N0U3lzdGVtQ2xvY2sgKiBzeXNjbG9jaykKLXsKLSAgd2hpbGUgKHN5c2Nsb2NrLT5wcml2LT53YWtldXBfY291bnQgPiAwKSB7Ci0gICAgR1NUX1NZU1RFTV9DTE9DS19XQUlUIChzeXNjbG9jayk7Ci0gIH0KLX0KLQotLyogdGhpcyB0aHJlYWQgcmVhZHMgdGhlIHNvcnRlZCBjbG9jayBlbnRyaWVzIGZyb20gdGhlIHF1ZXVlLgotICoKLSAqIEl0IHdhaXRzIG9uIGVhY2ggb2YgdGhlbSBhbmQgZmlyZXMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIHRpbWVvdXQgb2NjdXJzLgotICoKLSAqIFdoZW4gYW4gZW50cnkgaW4gdGhlIHF1ZXVlIHdhcyBjYW5jZWxlZCBiZWZvcmUgd2Ugd2FpdCBmb3IgaXQsIGl0IGlzCi0gKiBzaW1wbHkgc2tpcHBlZC4KLSAqCi0gKiBXaGVuIHdhaXRpbmcgZm9yIGFuIGVudHJ5LCBpdCBjYW4gYmVjb21lIGNhbmNlbGVkLCBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3QKLSAqIGNhbGwgdGhlIGNhbGxiYWNrIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIHF1ZXVlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3Rfc3lzdGVtX2Nsb2NrX2FzeW5jX3RocmVhZCAoR3N0Q2xvY2sgKiBjbG9jaykKLXsKLSAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7Ci0gIEdzdFN5c3RlbUNsb2NrUHJpdmF0ZSAqcHJpdiA9IHN5c2Nsb2NrLT5wcml2OwotICBHc3RDbG9ja1JldHVybiBzdGF0dXM7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImVudGVyIHN5c3RlbSBjbG9jayB0aHJlYWQiKTsKLSAgR1NUX09CSkVDVF9MT0NLIChjbG9jayk7Ci0gIC8qIHNpZ25hbCBzcGludXAgKi8KLSAgR1NUX1NZU1RFTV9DTE9DS19CUk9BRENBU1QgKGNsb2NrKTsKLSAgLyogbm93IGVudGVyIG91ciAoYWxtb3N0KSBpbmZpbml0ZSBsb29wICovCi0gIHdoaWxlICghcHJpdi0+c3RvcHBpbmcpIHsKLSAgICBHc3RDbG9ja0VudHJ5ICplbnRyeTsKLSAgICBHc3RDbG9ja1RpbWUgcmVxdWVzdGVkOwotICAgIEdzdENsb2NrUmV0dXJuIHJlczsKLQotICAgIC8qIGNoZWNrIGlmIHNvbWV0aGluZyB0byBiZSBkb25lICovCi0gICAgd2hpbGUgKHByaXYtPmVudHJpZXMgPT0gTlVMTCkgewotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgIm5vIGNsb2NrIGVudHJpZXMsIHdhaXRpbmcuLiIpOwotICAgICAgLyogd2FpdCBmb3Igd29yayB0byBkbyAqLwotICAgICAgR1NUX1NZU1RFTV9DTE9DS19XQUlUIChjbG9jayk7Ci0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiZ290IHNpZ25hbCIpOwotICAgICAgLyogY2xvY2sgd2FzIHN0b3BwaW5nLCBleGl0ICovCi0gICAgICBpZiAocHJpdi0+c3RvcHBpbmcpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICAvKiBzZWUgaWYgd2UgaGF2ZSBhIHBlbmRpbmcgd2FrZXVwIGJlY2F1c2UgdGhlIG9yZGVyIG9mIHRoZSBsaXN0Ci0gICAgICogY2hhbmdlZC4gKi8KLSAgICBpZiAocHJpdi0+YXN5bmNfd2FrZXVwKSB7Ci0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiY2xlYXIgYXN5bmMgd2FrZXVwIik7Ci0gICAgICBnc3Rfc3lzdGVtX2Nsb2NrX3JlbW92ZV93YWtldXAgKHN5c2Nsb2NrKTsKLSAgICAgIHByaXYtPmFzeW5jX3dha2V1cCA9IEZBTFNFOwotICAgIH0KLQotICAgIC8qIHBpY2sgdGhlIG5leHQgZW50cnkgKi8KLSAgICBlbnRyeSA9IHByaXYtPmVudHJpZXMtPmRhdGE7Ci0KLSAgICAvKiBzZXQgZW50cnkgc3RhdHVzIHRvIGJ1c3kgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGNsb2NrIGxvY2sgKi8KLSAgICBkbyB7Ci0gICAgICBzdGF0dXMgPSBHRVRfRU5UUllfU1RBVFVTIChlbnRyeSk7Ci0KLSAgICAgIC8qIGNoZWNrIGZvciB1bnNjaGVkdWxlZCAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKHN0YXR1cyA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpKSB7Ci0gICAgICAgIC8qIGVudHJ5IHdhcyB1bnNjaGVkdWxlZCwgbW92ZSB0byB0aGUgbmV4dCBvbmUgKi8KLSAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImFzeW5jIGVudHJ5ICVwIHVuc2NoZWR1bGVkIiwgZW50cnkpOwotICAgICAgICBnb3RvIG5leHRfZW50cnk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGZvciBwZXJpb2RpYyB0aW1lcnMsIHN0YXR1cyBjYW4gYmUgRUFSTFkgZnJvbSBhIHByZXZpb3VzIHJ1biAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKHN0YXR1cyAhPSBHU1RfQ0xPQ0tfT0sgJiYgc3RhdHVzICE9IEdTVF9DTE9DS19FQVJMWSkpCi0gICAgICAgIEdTVF9DQVRfRVJST1IgKEdTVF9DQVRfQ0xPQ0ssICJ1bmV4cGVjdGVkIHN0YXR1cyAlZCBmb3IgZW50cnkgJXAiLAotICAgICAgICAgICAgc3RhdHVzLCBlbnRyeSk7Ci0KLSAgICAgIC8qIG1hcmsgdGhlIGVudHJ5IGFzIGJ1c3kgYnV0IHdhdGNoIG91dCBmb3IgaW50ZXJtZWRpYXRlIHVuc2NoZWR1bGVkCi0gICAgICAgKiBzdGF0dXNlcyAqLwotICAgIH0gd2hpbGUgKEdfVU5MSUtFTFkgKCFDQVNfRU5UUllfU1RBVFVTIChlbnRyeSwgc3RhdHVzLCBHU1RfQ0xPQ0tfQlVTWSkpKTsKLQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Ci0KLSAgICByZXF1ZXN0ZWQgPSBlbnRyeS0+dGltZTsKLQotICAgIC8qIG5vdyB3YWl0IGZvciB0aGUgZW50cnkgKi8KLSAgICByZXMgPQotICAgICAgICBnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyX3VubG9ja2VkIChjbG9jaywgKEdzdENsb2NrSUQpIGVudHJ5LAotICAgICAgICBOVUxMLCBGQUxTRSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGNsb2NrKTsKLQotICAgIHN3aXRjaCAocmVzKSB7Ci0gICAgICBjYXNlIEdTVF9DTE9DS19VTlNDSEVEVUxFRDoKLSAgICAgICAgLyogZW50cnkgd2FzIHVuc2NoZWR1bGVkLCBtb3ZlIHRvIHRoZSBuZXh0ICovCi0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJhc3luYyBlbnRyeSAlcCB1bnNjaGVkdWxlZCIsIGVudHJ5KTsKLSAgICAgICAgZ290byBuZXh0X2VudHJ5OwotICAgICAgY2FzZSBHU1RfQ0xPQ0tfT0s6Ci0gICAgICBjYXNlIEdTVF9DTE9DS19FQVJMWToKLSAgICAgIHsKLSAgICAgICAgLyogZW50cnkgdGltZWQgb3V0IG5vcm1hbGx5LCBmaXJlIHRoZSBjYWxsYmFjayBhbmQgbW92ZSB0byB0aGUgbmV4dAotICAgICAgICAgKiBlbnRyeSAqLwotICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiYXN5bmMgZW50cnkgJXAgdGltZWQgb3V0IiwgZW50cnkpOwotICAgICAgICBpZiAoZW50cnktPmZ1bmMpIHsKLSAgICAgICAgICAvKiB1bmxvY2sgYmVmb3JlIGZpcmluZyB0aGUgY2FsbGJhY2sgKi8KLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOwotICAgICAgICAgIGVudHJ5LT5mdW5jIChjbG9jaywgZW50cnktPnRpbWUsIChHc3RDbG9ja0lEKSBlbnRyeSwKLSAgICAgICAgICAgICAgZW50cnktPnVzZXJfZGF0YSk7Ci0gICAgICAgICAgR1NUX09CSkVDVF9MT0NLIChjbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudHJ5LT50eXBlID09IEdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQykgewotICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJ1cGRhdGluZyBwZXJpb2RpYyBlbnRyeSAlcCIsIGVudHJ5KTsKLSAgICAgICAgICAvKiBhZGp1c3QgdGltZSBub3cgKi8KLSAgICAgICAgICBlbnRyeS0+dGltZSA9IHJlcXVlc3RlZCArIGVudHJ5LT5pbnRlcnZhbDsKLSAgICAgICAgICAvKiBhbmQgcmVzb3J0IHRoZSBsaXN0IG5vdyAqLwotICAgICAgICAgIHByaXYtPmVudHJpZXMgPQotICAgICAgICAgICAgICBnX2xpc3Rfc29ydCAocHJpdi0+ZW50cmllcywgZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyk7Ci0gICAgICAgICAgLyogYW5kIHJlc3RhcnQgKi8KLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAibW92aW5nIHRvIG5leHQgZW50cnkiKTsKLSAgICAgICAgICBnb3RvIG5leHRfZW50cnk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0NMT0NLX0JVU1k6Ci0gICAgICAgIC8qIHNvbWVib2R5IHVubG9ja2VkIHRoZSBlbnRyeSBidXQgaXMgd2FzIG5vdCBjYW5jZWxlZCwgVGhpcyBtZWFucyB0aGF0Ci0gICAgICAgICAqIGVpdGhlciBhIG5ldyBlbnRyeSB3YXMgYWRkZWQgaW4gZnJvbnQgb2YgdGhlIHF1ZXVlIG9yIHNvbWUgb3RoZXIgZW50cnkKLSAgICAgICAgICogd2FzIGNhbmNlbGVkLiBXaGF0ZXZlciBpdCBpcywgcGljayB0aGUgaGVhZCBlbnRyeSBvZiB0aGUgbGlzdCBhbmQKLSAgICAgICAgICogY29udGludWUgd2FpdGluZy4gKi8KLSAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImFzeW5jIGVudHJ5ICVwIG5lZWRzIHJlc3RhcnQiLCBlbnRyeSk7Ci0KLSAgICAgICAgLyogd2Ugc2V0IHRoZSBlbnRyeSBiYWNrIHRvIHRoZSBPSyBzdGF0ZS4gVGhpcyBpcyBuZWVkZWQgc28gdGhhdCB0aGUKLSAgICAgICAgICogX3Vuc2NoZWR1bGUoKSBjb2RlIGNhbiBzZWUgaWYgYW4gZW50cnkgaXMgY3VycmVudGx5IGJlaW5nIHdhaXRlZAotICAgICAgICAgKiBvbiAod2hlbiBpdHMgc3RhdGUgaXMgQlVTWSkuICovCi0gICAgICAgIFNFVF9FTlRSWV9TVEFUVVMgKGVudHJ5LCBHU1RfQ0xPQ0tfT0spOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssCi0gICAgICAgICAgICAic3RyYW5nZSByZXN1bHQgJWQgd2FpdGluZyBmb3IgJXAsIHNraXBwaW5nIiwgcmVzLCBlbnRyeSk7Ci0gICAgICAgIGdfd2FybmluZyAoIiVzOiBzdHJhbmdlIHJlc3VsdCAlZCB3YWl0aW5nIGZvciAlcCwgc2tpcHBpbmciLAotICAgICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChjbG9jayksIHJlcywgZW50cnkpOwotICAgICAgICBnb3RvIG5leHRfZW50cnk7Ci0gICAgfQotICBuZXh0X2VudHJ5OgotICAgIC8qIHdlIHJlbW92ZSB0aGUgY3VycmVudCBlbnRyeSBhbmQgdW5yZWYgaXQgKi8KLSAgICBwcml2LT5lbnRyaWVzID0gZ19saXN0X3JlbW92ZSAocHJpdi0+ZW50cmllcywgZW50cnkpOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoKEdzdENsb2NrSUQpIGVudHJ5KTsKLSAgfQotZXhpdDoKLSAgLyogc2lnbmFsIGV4aXQgKi8KLSAgR1NUX1NZU1RFTV9DTE9DS19CUk9BRENBU1QgKGNsb2NrKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImV4aXQgc3lzdGVtIGNsb2NrIHRocmVhZCIpOwotfQotCi0jaWZkZWYgSEFWRV9QT1NJWF9USU1FUlMKLXN0YXRpYyBpbmxpbmUgY2xvY2tpZF90Ci1jbG9ja190eXBlX3RvX3Bvc2l4X2lkIChHc3RDbG9ja1R5cGUgY2xvY2tfdHlwZSkKLXsKLSNpZmRlZiBIQVZFX01PTk9UT05JQ19DTE9DSwotICBpZiAoY2xvY2tfdHlwZSA9PSBHU1RfQ0xPQ0tfVFlQRV9NT05PVE9OSUMpCi0gICAgcmV0dXJuIENMT0NLX01PTk9UT05JQzsKLSAgZWxzZQotI2VuZGlmCi0gICAgcmV0dXJuIENMT0NLX1JFQUxUSU1FOwotfQotI2VuZGlmCi0KLS8qIE1UIHNhZmUgKi8KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWdzdF9zeXN0ZW1fY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKEdzdENsb2NrICogY2xvY2spCi17Ci0jaWYgZGVmaW5lZCBfX0FQUExFX18KLSAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7Ci0gIHVpbnQ2NF90IG1hY2hfdCA9IG1hY2hfYWJzb2x1dGVfdGltZSAoKTsKLSAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAobWFjaF90LCBzeXNjbG9jay0+cHJpdi0+bWFjaF90aW1lYmFzZS5udW1lciwKLSAgICAgIHN5c2Nsb2NrLT5wcml2LT5tYWNoX3RpbWViYXNlLmRlbm9tKTsKLSNlbHNlCi0jaWZkZWYgR19PU19XSU4zMgotICBHc3RTeXN0ZW1DbG9jayAqc3lzY2xvY2sgPSBHU1RfU1lTVEVNX0NMT0NLX0NBU1QgKGNsb2NrKTsKLQotICBpZiAoc3lzY2xvY2stPnByaXYtPmZyZXF1ZW5jeS5RdWFkUGFydCAhPSAwKSB7Ci0gICAgTEFSR0VfSU5URUdFUiBub3c7Ci0KLSAgICAvKiB3ZSBwcmVmZXIgdGhlIGhpZ2hseSBhY2N1cmF0ZSBwZXJmb3JtYW5jZSBjb3VudGVycyBvbiB3aW5kb3dzICovCi0gICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIgKCZub3cpOwotCi0gICAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAobm93LlF1YWRQYXJ0IC0gc3lzY2xvY2stPnByaXYtPnN0YXJ0LlF1YWRQYXJ0LAotICAgICAgICBHU1RfU0VDT05ELCBzeXNjbG9jay0+cHJpdi0+ZnJlcXVlbmN5LlF1YWRQYXJ0KTsKLSAgfSBlbHNlCi0jZW5kaWYgLyogR19PU19XSU4zMiAqLwotI2lmICFkZWZpbmVkIEhBVkVfUE9TSVhfVElNRVJTIHx8ICFkZWZpbmVkIEhBVkVfQ0xPQ0tfR0VUVElNRQotICB7Ci0gICAgR1RpbWVWYWwgdGltZXZhbDsKLQotICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnRpbWV2YWwpOwotCi0gICAgcmV0dXJuIEdTVF9USU1FVkFMX1RPX1RJTUUgKHRpbWV2YWwpOwotICB9Ci0jZWxzZQotICB7Ci0gICAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7Ci0gICAgY2xvY2tpZF90IHB0eXBlOwotICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKLQotICAgIHB0eXBlID0gY2xvY2tfdHlwZV90b19wb3NpeF9pZCAoc3lzY2xvY2stPnByaXYtPmNsb2NrX3R5cGUpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKGNsb2NrX2dldHRpbWUgKHB0eXBlLCAmdHMpKSkKLSAgICAgIHJldHVybiBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgcmV0dXJuIEdTVF9USU1FU1BFQ19UT19USU1FICh0cyk7Ci0gIH0KLSNlbmRpZgotI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotZ3N0X3N5c3RlbV9jbG9ja19nZXRfcmVzb2x1dGlvbiAoR3N0Q2xvY2sgKiBjbG9jaykKLXsKLSNpZiBkZWZpbmVkIF9fQVBQTEVfXwotICBHc3RTeXN0ZW1DbG9jayAqc3lzY2xvY2sgPSBHU1RfU1lTVEVNX0NMT0NLX0NBU1QgKGNsb2NrKTsKLSAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR1NUX05TRUNPTkQsCi0gICAgICBzeXNjbG9jay0+cHJpdi0+bWFjaF90aW1lYmFzZS5udW1lciwgc3lzY2xvY2stPnByaXYtPm1hY2hfdGltZWJhc2UuZGVub20pOwotI2Vsc2UKLSNpZmRlZiBHX09TX1dJTjMyCi0gIEdzdFN5c3RlbUNsb2NrICpzeXNjbG9jayA9IEdTVF9TWVNURU1fQ0xPQ0tfQ0FTVCAoY2xvY2spOwotCi0gIGlmIChzeXNjbG9jay0+cHJpdi0+ZnJlcXVlbmN5LlF1YWRQYXJ0ICE9IDApIHsKLSAgICByZXR1cm4gR1NUX1NFQ09ORCAvIHN5c2Nsb2NrLT5wcml2LT5mcmVxdWVuY3kuUXVhZFBhcnQ7Ci0gIH0gZWxzZQotI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KLSNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfVElNRVJTKSAmJiBkZWZpbmVkKEhBVkVfQ0xPQ0tfR0VUVElNRSkKLSAgewotICAgIEdzdFN5c3RlbUNsb2NrICpzeXNjbG9jayA9IEdTVF9TWVNURU1fQ0xPQ0tfQ0FTVCAoY2xvY2spOwotICAgIGNsb2NraWRfdCBwdHlwZTsKLSAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0KLSAgICBwdHlwZSA9IGNsb2NrX3R5cGVfdG9fcG9zaXhfaWQgKHN5c2Nsb2NrLT5wcml2LT5jbG9ja190eXBlKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChjbG9ja19nZXRyZXMgKHB0eXBlLCAmdHMpKSkKLSAgICAgIHJldHVybiBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgcmV0dXJuIEdTVF9USU1FU1BFQ19UT19USU1FICh0cyk7Ci0gIH0KLSNlbHNlCi0gIHsKLSAgICByZXR1cm4gMSAqIEdTVF9VU0VDT05EOwotICB9Ci0jZW5kaWYKLSNlbmRpZiAvKiBfX0FQUExFX18gKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1nc3Rfc3lzdGVtX2Nsb2NrX2NsZWFudXBfdW5zY2hlZHVsZWQgKEdzdFN5c3RlbUNsb2NrICogc3lzY2xvY2ssCi0gICAgR3N0Q2xvY2tFbnRyeSAqIGVudHJ5KQotewotICAvKiB0cnkgdG8gY2xlYW4gdXAuCi0gICAqIFRoZSB1bnNjaGVkdWxlIGZ1bmN0aW9uIG1hbmFnZWQgdG8gc2V0IHRoZSBzdGF0dXMgdG8KLSAgICogdW5zY2hlZHVsZWQuIFdlIG5vdyB0YWtlIHRoZSBsb2NrIGFuZCBtYXJrIHRoZSBlbnRyeSBhcyB1bnNjaGVkdWxlZC4KLSAgICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHVuc2NoZWR1bGUgZnVuY3Rpb24gZG9lc24ndCBwZXJmb3JtIGEKLSAgICogd2FrZXVwIGFueW1vcmUuIElmIHRoZSB1bnNjaGVkdWxlIGZ1bmN0aW9uIGhhcyBhIGNoYW5nZSB0byBwZXJmb3JtCi0gICAqIHRoZSB3YWtldXAgYmVmb3JlIHVzLCB3ZSBjbGVhbiB1cCBoZXJlICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3lzY2xvY2spOwotICBlbnRyeS0+dW5zY2hlZHVsZWQgPSBUUlVFOwotICBpZiAoZW50cnktPndva2VuX3VwKSB7Ci0gICAgZ3N0X3N5c3RlbV9jbG9ja19yZW1vdmVfd2FrZXVwIChzeXNjbG9jayk7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHN5c2Nsb2NrKTsKLX0KLQotLyogc3luY2hyb25vdXNseSB3YWl0IG9uIHRoZSBnaXZlbiBHc3RDbG9ja0VudHJ5LgotICoKLSAqIFdlIGRvIHRoaXMgYnkgYmxvY2tpbmcgb24gdGhlIGdsb2JhbCBHc3RQb2xsIHRpbWVyIHdpdGgKLSAqIHRoZSByZXF1ZXN0ZWQgdGltZW91dC4gVGhpcyBhbGxvd3MgdXMgdG8gdW5ibG9jayB0aGUKLSAqIGVudHJ5IGJ5IHdyaXRpbmcgb24gdGhlIGNvbnRyb2wgZmQuCi0gKgotICogTm90ZSB0aGF0IHdyaXRpbmcgdGhlIGdsb2JhbCBHc3RQb2xsIHVubG9ja3MgYWxsIHdhaXRpbmcgZW50cmllcy4gU28KLSAqIHdlIG5lZWQgdG8gY2hlY2sgaWYgYW4gdW5sb2NrZWQgZW50cnkgaGFzIGNoYW5nZWQgd2hlbiBpdCB1bmxvY2tzLgotICoKLSAqIEVudHJpZXMgdGhhdCBhcnJpdmUgdG9vIGxhdGUgYXJlIHNpbXBseSBub3Qgd2FpdGVkIG9uIGFuZCBhCi0gKiBHU1RfQ0xPQ0tfRUFSTFkgcmVzdWx0IGlzIHJldHVybmVkLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXN0YXRpYyBHc3RDbG9ja1JldHVybgotZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2ppdHRlcl91bmxvY2tlZCAoR3N0Q2xvY2sgKiBjbG9jaywKLSAgICBHc3RDbG9ja0VudHJ5ICogZW50cnksIEdzdENsb2NrVGltZURpZmYgKiBqaXR0ZXIsIGdib29sZWFuIHJlc3RhcnQpCi17Ci0gIEdzdFN5c3RlbUNsb2NrICpzeXNjbG9jayA9IEdTVF9TWVNURU1fQ0xPQ0tfQ0FTVCAoY2xvY2spOwotICBHc3RDbG9ja1RpbWUgZW50cnl0LCBub3c7Ci0gIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLSAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzOwotCi0gIHN0YXR1cyA9IEdFVF9FTlRSWV9TVEFUVVMgKGVudHJ5KTsKLSAgaWYgKEdfVU5MSUtFTFkgKHN0YXR1cyA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpKSB7Ci0gICAgZ3N0X3N5c3RlbV9jbG9ja19jbGVhbnVwX3Vuc2NoZWR1bGVkIChzeXNjbG9jaywgZW50cnkpOwotICAgIHJldHVybiBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ7Ci0gIH0KLQotICAvKiBuZWVkIHRvIGNhbGwgdGhlIG92ZXJyaWRkZW4gbWV0aG9kIGJlY2F1c2Ugd2Ugd2FudCB0byBzeW5jIGFnYWluc3QgdGhlIHRpbWUKLSAgICogb2YgdGhlIGNsb2NrLCB3aGF0ZXZlciB0aGUgc3ViY2xhc3MgdXNlcyBhcyBhIGNsb2NrLiAqLwotICBub3cgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLQotICAvKiBnZXQgdGhlIHRpbWUgb2YgdGhlIGVudHJ5ICovCi0gIGVudHJ5dCA9IEdTVF9DTE9DS19FTlRSWV9USU1FIChlbnRyeSk7Ci0KLSAgLyogdGhlIGRpZmYgb2YgdGhlIGVudHJ5IHdpdGggdGhlIGNsb2NrIGlzIHRoZSBhbW91bnQgb2YgdGltZSB3ZSBoYXZlIHRvCi0gICAqIHdhaXQgKi8KLSAgZGlmZiA9IEdTVF9DTE9DS19ESUZGIChub3csIGVudHJ5dCk7Ci0gIGlmIChHX0xJS0VMWSAoaml0dGVyKSkKLSAgICAqaml0dGVyID0gLWRpZmY7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImVudHJ5ICVwIgotICAgICAgIiB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiBub3cgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiIGRpZmYgKHRpbWUtbm93KSAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICBlbnRyeSwgR1NUX1RJTUVfQVJHUyAoZW50cnl0KSwgR1NUX1RJTUVfQVJHUyAobm93KSwgZGlmZik7Ci0KLSAgaWYgKEdfTElLRUxZIChkaWZmID4gMCkpIHsKLSNpZmRlZiBXQUlUX0RFQlVHR0lORwotICAgIEdzdENsb2NrVGltZSBmaW5hbDsKLSNlbmRpZgotCi0gICAgd2hpbGUgKFRSVUUpIHsKLSAgICAgIGdpbnQgcG9sbHJldDsKLQotICAgICAgLyogbm93IHdhaXQgb24gdGhlIGVudHJ5LCBpdCBlaXRoZXIgdGltZXMgb3V0IG9yIHRoZSBmZCBpcyB3cml0dGVuLiBUaGUKLSAgICAgICAqIHN0YXR1cyBvZiB0aGUgZW50cnkgaXMgQlVTWSBvbmx5IGFyb3VuZCB0aGUgcG9sbC4gKi8KLSAgICAgIHBvbGxyZXQgPSBnc3RfcG9sbF93YWl0IChzeXNjbG9jay0+cHJpdi0+dGltZXIsIGRpZmYpOwotCi0gICAgICAvKiBnZXQgdGhlIG5ldyBzdGF0dXMsIG1hcmsgYXMgRE9ORS4gV2UgZG8gdGhpcyBzbyB0aGF0IHRoZSB1bnNjaGVkdWxlCi0gICAgICAgKiBmdW5jdGlvbiBrbm93cyB3aGVuIHdlIGxlZnQgdGhlIHBvbGwgYW5kIGRvZXNuJ3QgbmVlZCB0byB3YWtldXAgdGhlCi0gICAgICAgKiBwb2xsIGFueW1vcmUuICovCi0gICAgICBkbyB7Ci0gICAgICAgIHN0YXR1cyA9IEdFVF9FTlRSWV9TVEFUVVMgKGVudHJ5KTsKLSAgICAgICAgLyogd2Ugd2VyZSB1bnNjaGVkdWxlZCwgZXhpdCBpbW1lZGlhdGVseSAqLwotICAgICAgICBpZiAoR19VTkxJS0VMWSAoc3RhdHVzID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCkpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZIChzdGF0dXMgIT0gR1NUX0NMT0NLX0JVU1kpKQotICAgICAgICAgIEdTVF9DQVRfRVJST1IgKEdTVF9DQVRfQ0xPQ0ssICJ1bmV4cGVjdGVkIHN0YXR1cyAlZCBmb3IgZW50cnkgJXAiLAotICAgICAgICAgICAgICBzdGF0dXMsIGVudHJ5KTsKLSAgICAgIH0gd2hpbGUgKEdfVU5MSUtFTFkgKCFDQVNfRU5UUllfU1RBVFVTIChlbnRyeSwgc3RhdHVzLCBHU1RfQ0xPQ0tfRE9ORSkpKTsKLQotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImVudHJ5ICVwIHVubG9ja2VkLCBzdGF0dXMgJWQsIHJldCAlZCIsCi0gICAgICAgICAgZW50cnksIHN0YXR1cywgcG9sbHJldCk7Ci0KLSAgICAgIGlmIChHX1VOTElLRUxZIChzdGF0dXMgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKSkgewotICAgICAgICBnc3Rfc3lzdGVtX2Nsb2NrX2NsZWFudXBfdW5zY2hlZHVsZWQgKHN5c2Nsb2NrLCBlbnRyeSk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZIChwb2xscmV0ICE9IDApKSB7Ci0gICAgICAgICAgLyogc29tZSBvdGhlciBpZCBnb3QgdW5sb2NrZWQgKi8KLSAgICAgICAgICBpZiAoIXJlc3RhcnQpIHsKLSAgICAgICAgICAgIC8qIHRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgZW50cnkgZ290IHVubG9ja2VkIGJlY2F1c2Ugb2YgYW4gYXN5bmMKLSAgICAgICAgICAgICAqIGVudHJ5IHdhcyBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgYXN5bmMgcXVldWUuICovCi0gICAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAid2FrZXVwIHdhaXRpbmcgZm9yIGVudHJ5ICVwIiwgZW50cnkpOwotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIHdhaXQgdGlsbCBhbGwgdGhlIGVudHJpZXMgZ290IHdva2VuIHVwICovCi0gICAgICAgICAgR1NUX09CSkVDVF9MT0NLIChzeXNjbG9jayk7Ci0gICAgICAgICAgZ3N0X3N5c3RlbV9jbG9ja193YWl0X3dha2V1cCAoc3lzY2xvY2spOwotICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzeXNjbG9jayk7Ci0KLSAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiZW50cnkgJXAgbmVlZHMgdG8gYmUgcmVzdGFydGVkIiwKLSAgICAgICAgICAgICAgZW50cnkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJlbnRyeSAlcCB1bmxvY2tlZCBhZnRlciB0aW1lb3V0IiwKLSAgICAgICAgICAgICAgZW50cnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogcmVzY2hlZHVsZSBpZiBnc3RfcG9sbF93YWl0IHJldHVybmVkIGVhcmx5IG9yIHdlIGhhdmUgdG8gcmVzY2hlZHVsZSBhZnRlcgotICAgICAgICAgKiBhbiB1bmxvY2sqLwotICAgICAgICBub3cgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLSAgICAgICAgZGlmZiA9IEdTVF9DTE9DS19ESUZGIChub3csIGVudHJ5dCk7Ci0KLSAgICAgICAgaWYgKGRpZmYgPD0gMCkgewotICAgICAgICAgIC8qIHRpbWVvdXQsIHRoaXMgaXMgZmluZSwgd2UgY2FuIHJlcG9ydCBzdWNjZXNzIG5vdyAqLwotICAgICAgICAgIGlmIChHX1VOTElLRUxZICghQ0FTX0VOVFJZX1NUQVRVUyAoZW50cnksIEdTVF9DTE9DS19ET05FLAotICAgICAgICAgICAgICAgICAgICAgIEdTVF9DTE9DS19PSykpKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBHRVRfRU5UUllfU1RBVFVTIChlbnRyeSk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IEdTVF9DTE9DS19VTlNDSEVEVUxFRCkKLSAgICAgICAgICAgICAgR1NUX0NBVF9FUlJPUiAoR1NUX0NBVF9DTE9DSywgInVuZXhwZWN0ZWQgc3RhdHVzICVkIGZvciBlbnRyeSAlcCIsCi0gICAgICAgICAgICAgICAgICBzdGF0dXMsIGVudHJ5KTsKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzID0gR1NUX0NMT0NLX09LOwotICAgICAgICAgIH0KLQotICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssCi0gICAgICAgICAgICAgICJlbnRyeSAlcCBmaW5pc2hlZCwgZGlmZiAlIiBHX0dJTlQ2NF9GT1JNQVQsIGVudHJ5LCBkaWZmKTsKLQotI2lmZGVmIFdBSVRfREVCVUdHSU5HCi0gICAgICAgICAgZmluYWwgPSBnc3Rfc3lzdGVtX2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChjbG9jayk7Ci0gICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgIldhaXRlZCBmb3IgJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAgICIgZ290ICUiIEdfR0lOVDY0X0ZPUk1BVCAiIGRpZmYgJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAgICIgJWcgdGFyZ2V0LW9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAlZyIsIGVudHJ5dCwgbm93LAotICAgICAgICAgICAgICBub3cgLSBlbnRyeXQsCi0gICAgICAgICAgICAgIChkb3VibGUpIChHc3RDbG9ja1RpbWVEaWZmKSAobm93IC0gZW50cnl0KSAvIEdTVF9TRUNPTkQsCi0gICAgICAgICAgICAgIChmaW5hbCAtIHRhcmdldCksCi0gICAgICAgICAgICAgICgoZG91YmxlKSAoR3N0Q2xvY2tUaW1lRGlmZikgKGZpbmFsIC0gdGFyZ2V0KSkgLyBHU1RfU0VDT05EKTsKLSNlbmRpZgotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLAotICAgICAgICAgICAgICAiZW50cnkgJXAgcmVzdGFydCwgZGlmZiAlIiBHX0dJTlQ2NF9GT1JNQVQsIGVudHJ5LCBkaWZmKTsKLSAgICAgICAgICAvKiB3ZSBhcmUgZ29pbmcgdG8gcG9sbCBhZ2Fpbiwgc2V0IHN0YXR1cyBiYWNrIHRvIGJ1c3kgKi8KLSAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBHRVRfRU5UUllfU1RBVFVTIChlbnRyeSk7Ci0gICAgICAgICAgICAvKiB3ZSB3ZXJlIHVuc2NoZWR1bGVkLCBleGl0IGltbWVkaWF0ZWx5ICovCi0gICAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoc3RhdHVzID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCkpCi0gICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIGlmIChHX1VOTElLRUxZIChzdGF0dXMgIT0gR1NUX0NMT0NLX0RPTkUpKQotICAgICAgICAgICAgICBHU1RfQ0FUX0VSUk9SIChHU1RfQ0FUX0NMT0NLLCAidW5leHBlY3RlZCBzdGF0dXMgJWQgZm9yIGVudHJ5ICVwIiwKLSAgICAgICAgICAgICAgICAgIHN0YXR1cywgZW50cnkpOwotICAgICAgICAgIH0gd2hpbGUgKEdfVU5MSUtFTFkgKCFDQVNfRU5UUllfU1RBVFVTIChlbnRyeSwgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgIEdTVF9DTE9DS19CVVNZKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIHdlIGFyZSByaWdodCBvbiB0aW1lIG9yIHRvbyBsYXRlICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKGRpZmYgPT0gMCkpIHsKLSAgICAgIGlmIChHX1VOTElLRUxZICghQ0FTX0VOVFJZX1NUQVRVUyAoZW50cnksIHN0YXR1cywgR1NUX0NMT0NLX09LKSkpIHsKLSAgICAgICAgc3RhdHVzID0gR0VUX0VOVFJZX1NUQVRVUyAoZW50cnkpOwotICAgICAgICBpZiAoR19MSUtFTFkgKHN0YXR1cyA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpKQotICAgICAgICAgIGdzdF9zeXN0ZW1fY2xvY2tfY2xlYW51cF91bnNjaGVkdWxlZCAoc3lzY2xvY2ssIGVudHJ5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIEdTVF9DQVRfRVJST1IgKEdTVF9DQVRfQ0xPQ0ssICJ1bmV4cGVjdGVkIHN0YXR1cyAlZCBmb3IgZW50cnkgJXAiLAotICAgICAgICAgICAgICBzdGF0dXMsIGVudHJ5KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IEdTVF9DTE9DS19PSzsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKEdfVU5MSUtFTFkgKCFDQVNfRU5UUllfU1RBVFVTIChlbnRyeSwgc3RhdHVzLCBHU1RfQ0xPQ0tfRUFSTFkpKSkgewotICAgICAgICBzdGF0dXMgPSBHRVRfRU5UUllfU1RBVFVTIChlbnRyeSk7Ci0gICAgICAgIGlmIChHX0xJS0VMWSAoc3RhdHVzID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCkpCi0gICAgICAgICAgZ3N0X3N5c3RlbV9jbG9ja19jbGVhbnVwX3Vuc2NoZWR1bGVkIChzeXNjbG9jaywgZW50cnkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgR1NUX0NBVF9FUlJPUiAoR1NUX0NBVF9DTE9DSywgInVuZXhwZWN0ZWQgc3RhdHVzICVkIGZvciBlbnRyeSAlcCIsCi0gICAgICAgICAgICAgIHN0YXR1cywgZW50cnkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gR1NUX0NMT0NLX0VBUkxZOwotICAgICAgfQotICAgIH0KLSAgfQotZG9uZToKLSAgcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIEdzdENsb2NrUmV0dXJuCi1nc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja0VudHJ5ICogZW50cnksCi0gICAgR3N0Q2xvY2tUaW1lRGlmZiAqIGppdHRlcikKLXsKLSAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzOwotICBkbyB7Ci0gICAgc3RhdHVzID0gR0VUX0VOVFJZX1NUQVRVUyAoZW50cnkpOwotCi0gICAgLyogc3RvcCB3aGVuIHdlIGFyZSB1bnNjaGVkdWxlZCAqLwotICAgIGlmIChHX1VOTElLRUxZIChzdGF0dXMgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKSkKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoc3RhdHVzICE9IEdTVF9DTE9DS19PSykpCi0gICAgICBHU1RfQ0FUX0VSUk9SIChHU1RfQ0FUX0NMT0NLLCAidW5leHBlY3RlZCBzdGF0dXMgJWQgZm9yIGVudHJ5ICVwIiwKLSAgICAgICAgICBzdGF0dXMsIGVudHJ5KTsKLQotICAgIC8qIG1hcmsgdGhlIGVudHJ5IGFzIGJ1c3kgYnV0IHdhdGNoIG91dCBmb3IgaW50ZXJtZWRpYXRlIHVuc2NoZWR1bGVkCi0gICAgICogc3RhdHVzZXMgKi8KLSAgfSB3aGlsZSAoR19VTkxJS0VMWSAoIUNBU19FTlRSWV9TVEFUVVMgKGVudHJ5LCBzdGF0dXMsIEdTVF9DTE9DS19CVVNZKSkpOwotCi0gIHJldHVybiBnc3Rfc3lzdGVtX2Nsb2NrX2lkX3dhaXRfaml0dGVyX3VubG9ja2VkIChjbG9jaywgZW50cnksIGppdHRlciwgVFJVRSk7Ci19Ci0KLS8qIFN0YXJ0IHRoZSBhc3luYyBjbG9jayB0aHJlYWQuIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG9iamVjdCBsb2NrCi0gKiBoZWxkICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zeXN0ZW1fY2xvY2tfc3RhcnRfYXN5bmMgKEdzdFN5c3RlbUNsb2NrICogY2xvY2spCi17Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICBHc3RTeXN0ZW1DbG9ja1ByaXZhdGUgKnByaXYgPSBjbG9jay0+cHJpdjsKLQotICBpZiAoR19MSUtFTFkgKHByaXYtPnRocmVhZCAhPSBOVUxMKSkKLSAgICByZXR1cm4gVFJVRTsgICAgICAgICAgICAgICAgLyogVGhyZWFkIGFscmVhZHkgcnVubmluZy4gTm90aGluZyB0byBkbyAqLwotCi0gIHByaXYtPnRocmVhZCA9IGdfdGhyZWFkX3RyeV9uZXcgKCJHc3RTeXN0ZW1DbG9jayIsCi0gICAgICAoR1RocmVhZEZ1bmMpIGdzdF9zeXN0ZW1fY2xvY2tfYXN5bmNfdGhyZWFkLCBjbG9jaywgJmVycm9yKTsKLQotICBpZiAoR19VTkxJS0VMWSAoZXJyb3IpKQotICAgIGdvdG8gbm9fdGhyZWFkOwotCi0gIC8qIHdhaXQgZm9yIGl0IHRvIHNwaW4gdXAgKi8KLSAgR1NUX1NZU1RFTV9DTE9DS19XQUlUIChjbG9jayk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub190aHJlYWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJjb3VsZCBub3QgY3JlYXRlIGFzeW5jIGNsb2NrIHRocmVhZDogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKiBBZGQgYW4gZW50cnkgdG8gdGhlIGxpc3Qgb2YgcGVuZGluZyBhc3luYyB3YWl0cy4gVGhlIGVudHJ5IGlzIGluc2VydGVkCi0gKiBpbiBzb3J0ZWQgb3JkZXIuIElmIHdlIGluc2VydGVkIHRoZSBlbnRyeSBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgd2UKLSAqIG5lZWQgdG8gc2lnbmFsIHRoZSB0aHJlYWQgYXMgaXQgbWlnaHQgZWl0aGVyIGJlIHdhaXRpbmcgb24gaXQgb3Igd2FpdGluZwotICogZm9yIGEgbmV3IGVudHJ5LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXN0YXRpYyBHc3RDbG9ja1JldHVybgotZ3N0X3N5c3RlbV9jbG9ja19pZF93YWl0X2FzeW5jIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja0VudHJ5ICogZW50cnkpCi17Ci0gIEdzdFN5c3RlbUNsb2NrICpzeXNjbG9jazsKLSAgR3N0U3lzdGVtQ2xvY2tQcml2YXRlICpwcml2OwotICBHc3RDbG9ja0VudHJ5ICpoZWFkOwotCi0gIHN5c2Nsb2NrID0gR1NUX1NZU1RFTV9DTE9DS19DQVNUIChjbG9jayk7Ci0gIHByaXYgPSBzeXNjbG9jay0+cHJpdjsKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiYWRkaW5nIGFzeW5jIGVudHJ5ICVwIiwgZW50cnkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOwotICAvKiBTdGFydCB0aGUgY2xvY2sgYXN5bmMgdGhyZWFkIGlmIG5lZWRlZCAqLwotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9zeXN0ZW1fY2xvY2tfc3RhcnRfYXN5bmMgKHN5c2Nsb2NrKSkpCi0gICAgZ290byB0aHJlYWRfZXJyb3I7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKEdFVF9FTlRSWV9TVEFUVVMgKGVudHJ5KSA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpKQotICAgIGdvdG8gd2FzX3Vuc2NoZWR1bGVkOwotCi0gIGlmIChwcml2LT5lbnRyaWVzKQotICAgIGhlYWQgPSBwcml2LT5lbnRyaWVzLT5kYXRhOwotICBlbHNlCi0gICAgaGVhZCA9IE5VTEw7Ci0KLSAgLyogbmVlZCB0byB0YWtlIGEgcmVmICovCi0gIGdzdF9jbG9ja19pZF9yZWYgKChHc3RDbG9ja0lEKSBlbnRyeSk7Ci0gIC8qIGluc2VydCB0aGUgZW50cnkgaW4gc29ydGVkIG9yZGVyICovCi0gIHByaXYtPmVudHJpZXMgPSBnX2xpc3RfaW5zZXJ0X3NvcnRlZCAocHJpdi0+ZW50cmllcywgZW50cnksCi0gICAgICBnc3RfY2xvY2tfaWRfY29tcGFyZV9mdW5jKTsKLQotICAvKiBvbmx5IG5lZWQgdG8gc2VuZCB0aGUgc2lnbmFsIGlmIHRoZSBlbnRyeSB3YXMgYWRkZWQgdG8gdGhlCi0gICAqIGZyb250LCBlbHNlIHRoZSB0aHJlYWQgaXMganVzdCB3YWl0aW5nIGZvciBhbm90aGVyIGVudHJ5IGFuZAotICAgKiB3aWxsIGdldCB0byB0aGlzIGVudHJ5IGF1dG9tYXRpY2FsbHkuICovCi0gIGlmIChwcml2LT5lbnRyaWVzLT5kYXRhID09IGVudHJ5KSB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgImFzeW5jIGVudHJ5IGFkZGVkIHRvIGhlYWQgJXAiLCBoZWFkKTsKLSAgICBpZiAoaGVhZCA9PSBOVUxMKSB7Ci0gICAgICAvKiB0aGUgbGlzdCB3YXMgZW1wdHkgYmVmb3JlLCBzaWduYWwgdGhlIGNvbmQgc28gdGhhdCB0aGUgYXN5bmMgdGhyZWFkIGNhbgotICAgICAgICogc3RhcnQgdGFraW5nIGEgbG9vayBhdCB0aGUgcXVldWUgKi8KLSAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJmaXJzdCBlbnRyeSwgc2VuZGluZyBzaWduYWwiKTsKLSAgICAgIEdTVF9TWVNURU1fQ0xPQ0tfQlJPQURDQVNUIChjbG9jayk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdzdENsb2NrUmV0dXJuIHN0YXR1czsKLQotICAgICAgc3RhdHVzID0gR0VUX0VOVFJZX1NUQVRVUyAoaGVhZCk7Ci0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiaGVhZCBlbnRyeSAlcCBzdGF0dXMgJWQiLCBoZWFkLCBzdGF0dXMpOwotCi0gICAgICBpZiAoc3RhdHVzID09IEdTVF9DTE9DS19CVVNZKSB7Ci0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfQ0xPQ0ssICJoZWFkIGVudHJ5IGlzIGJ1c3kiKTsKLSAgICAgICAgLyogdGhlIGFzeW5jIHRocmVhZCB3YXMgd2FpdGluZyBmb3IgYW4gZW50cnksIHVubG9jayB0aGUgd2FpdCBzbyB0aGF0IGl0Ci0gICAgICAgICAqIGxvb2tzIGF0IHRoZSBuZXcgaGVhZCBlbnRyeSBpbnN0ZWFkLCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlICovCi0gICAgICAgIGlmICghcHJpdi0+YXN5bmNfd2FrZXVwKSB7Ci0gICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DTE9DSywgIndha2V1cCBhc3luYyB0aHJlYWQiKTsKLSAgICAgICAgICBwcml2LT5hc3luY193YWtldXAgPSBUUlVFOwotICAgICAgICAgIGdzdF9zeXN0ZW1fY2xvY2tfYWRkX3dha2V1cCAoc3lzY2xvY2spOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Ci0KLSAgcmV0dXJuIEdTVF9DTE9DS19PSzsKLQotICAvKiBFUlJPUlMgKi8KLXRocmVhZF9lcnJvcjoKLSAgewotICAgIC8qIENvdWxkIG5vdCBzdGFydCB0aGUgYXN5bmMgY2xvY2sgdGhyZWFkICovCi0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKLSAgICByZXR1cm4gR1NUX0NMT0NLX0VSUk9SOwotICB9Ci13YXNfdW5zY2hlZHVsZWQ6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoY2xvY2spOwotICAgIHJldHVybiBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ7Ci0gIH0KLX0KLQotLyogdW5zY2hlZHVsZSBhbiBlbnRyeS4gVGhpcyB3aWxsIHNldCB0aGUgc3RhdGUgb2YgdGhlIGVudHJ5IHRvIEdTVF9DTE9DS19VTlNDSEVEVUxFRAotICogYW5kIHdpbGwgc2lnbmFsIGFueSB0aHJlYWQgd2FpdGluZyBmb3IgZW50cmllcyB0byByZWNoZWNrIHRoZWlyIGVudHJ5LgotICogV2UgY2Fubm90IHJlYWxseSBkZWNpZGUgaWYgdGhlIHNpZ25hbCBpcyBuZWVkZWQgb3Igbm90IGJlY2F1c2UgdGhlIGVudHJ5Ci0gKiBjb3VsZCBiZSB3YWl0ZWQgb24gaW4gYXN5bmMgb3Igc3luYyBtb2RlLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3Rfc3lzdGVtX2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrRW50cnkgKiBlbnRyeSkKLXsKLSAgR3N0U3lzdGVtQ2xvY2sgKnN5c2Nsb2NrOwotICBHc3RDbG9ja1JldHVybiBzdGF0dXM7Ci0KLSAgc3lzY2xvY2sgPSBHU1RfU1lTVEVNX0NMT0NLX0NBU1QgKGNsb2NrKTsKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAidW5zY2hlZHVsaW5nIGVudHJ5ICVwIiwgZW50cnkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOwotICAvKiBjaGFuZ2UgdGhlIGVudHJ5IHN0YXR1cyB0byB1bnNjaGVkdWxlZCAqLwotICBkbyB7Ci0gICAgc3RhdHVzID0gR0VUX0VOVFJZX1NUQVRVUyAoZW50cnkpOwotICB9IHdoaWxlIChHX1VOTElLRUxZICghQ0FTX0VOVFJZX1NUQVRVUyAoZW50cnksIHN0YXR1cywKLSAgICAgICAgICAgICAgR1NUX0NMT0NLX1VOU0NIRURVTEVEKSkpOwotCi0gIGlmIChHX0xJS0VMWSAoc3RhdHVzID09IEdTVF9DTE9DS19CVVNZKSkgewotICAgIC8qIHRoZSBlbnRyeSB3YXMgYmVpbmcgYnVzeSwgd2FrZSB1cCBhbGwgZW50cmllcyBzbyB0aGF0IHRoZXkgcmVjaGVjayB0aGVpcgotICAgICAqIHN0YXR1cy4gV2UgY2Fubm90IHdha2UgdXAganVzdCBvbmUgZW50cnkgYmVjYXVzZSBhbGxvY2F0aW5nIHN1Y2ggYQotICAgICAqIGRhdGFzdHJ1Y3R1cmUgZm9yIGVhY2ggZW50cnkgd291bGQgYmUgdG9vIGhlYXZ5IGFuZCB1bmxvY2tpbmcgYW4gZW50cnkKLSAgICAgKiBpcyB1c3VhbGx5IGRvbmUgd2hlbiBzaHV0dGluZyBkb3duIG9yIHNvbWUgb3RoZXIgZXhjZXB0aW9uYWwgY2FzZS4gKi8KLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NMT0NLLCAiZW50cnkgd2FzIEJVU1ksIGRvaW5nIHdha2V1cCIpOwotICAgIGlmICghZW50cnktPnVuc2NoZWR1bGVkICYmICFlbnRyeS0+d29rZW5fdXApIHsKLSAgICAgIGdzdF9zeXN0ZW1fY2xvY2tfYWRkX3dha2V1cCAoc3lzY2xvY2spOwotICAgICAgZW50cnktPndva2VuX3VwID0gVFJVRTsKLSAgICB9Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGNsb2NrKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3RzeXN0ZW1jbG9jay5oIGIvZ3N0L2dzdHN5c3RlbWNsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTA1ZWUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHN5c3RlbWNsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdHN5c3RlbWNsb2NrLmg6IEEgY2xvY2sgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gc3lzdGVtIHRpbWUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfU1lTVEVNX0NMT0NLX0hfXwotI2RlZmluZSBfX0dTVF9TWVNURU1fQ0xPQ0tfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y2xvY2suaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1NZU1RFTV9DTE9DSyAgICAgICAgICAgICAgICAgICAoZ3N0X3N5c3RlbV9jbG9ja19nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DSyhvYmopICAgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1NZU1RFTV9DTE9DSywgR3N0U3lzdGVtQ2xvY2spKQotI2RlZmluZSBHU1RfU1lTVEVNX0NMT0NLX0NBU1Qob2JqKSAgICAgICAgICAgICAgKChHc3RTeXN0ZW1DbG9jayAqKShvYmopKQotI2RlZmluZSBHU1RfSVNfU1lTVEVNX0NMT0NLKG9iaikgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLKSkKLSNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DS19DTEFTUyhrbGFzcykgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCBHc3RTeXN0ZW1DbG9ja0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1NZU1RFTV9DTE9DS19DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLKSkKLSNkZWZpbmUgR1NUX1NZU1RFTV9DTE9DS19HRVRfQ0xBU1Mob2JqKSAgICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCBHc3RTeXN0ZW1DbG9ja0NsYXNzKSkKLQotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3lzdGVtQ2xvY2sgR3N0U3lzdGVtQ2xvY2s7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3lzdGVtQ2xvY2tDbGFzcyBHc3RTeXN0ZW1DbG9ja0NsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN5c3RlbUNsb2NrUHJpdmF0ZSBHc3RTeXN0ZW1DbG9ja1ByaXZhdGU7Ci0KLS8qKgotICogR3N0Q2xvY2tUeXBlOgotICogQEdTVF9DTE9DS19UWVBFX1JFQUxUSU1FOiB0aW1lIHNpbmNlIEVwb2NoCi0gKiBAR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDOiBtb25vdG9uaWMgdGltZSBzaW5jZSBzb21lIHVuc3BlY2lmaWVkIHN0YXJ0aW5nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludAotICogQEdTVF9DTE9DS19UWVBFX09USEVSOiBzb21lIG90aGVyIHRpbWUgc291cmNlIGlzIHVzZWQgKFNpbmNlIDEuMC41KQotICoKLSAqIFRoZSBkaWZmZXJlbnQga2luZCBvZiBjbG9ja3MuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9DTE9DS19UWVBFX1JFQUxUSU1FICAgICAgID0gMCwKLSAgR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDICAgICAgPSAxLAotICBHU1RfQ0xPQ0tfVFlQRV9PVEhFUiAgICAgICAgICA9IDIKLX0gR3N0Q2xvY2tUeXBlOwotCi0vKioKLSAqIEdzdFN5c3RlbUNsb2NrOgotICoKLSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGEgI0dzdENsb2NrIHRoYXQgdXNlcyB0aGUgc3lzdGVtIHRpbWUuCi0gKi8KLXN0cnVjdCBfR3N0U3lzdGVtQ2xvY2sgewotICBHc3RDbG9jayAgICAgICBjbG9jazsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0U3lzdGVtQ2xvY2tQcml2YXRlICpwcml2OwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3RTeXN0ZW1DbG9ja0NsYXNzIHsKLSAgR3N0Q2xvY2tDbGFzcyAgcGFyZW50X2NsYXNzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlICAgICAgICAgICAgICAgICAgIGdzdF9zeXN0ZW1fY2xvY2tfZ2V0X3R5cGUgICAgICAgKHZvaWQpOwotCi1Hc3RDbG9jayogICAgICAgICAgICAgICBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAgICAgICAgICh2b2lkKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9zeXN0ZW1fY2xvY2tfc2V0X2RlZmF1bHQgICAgKEdzdENsb2NrICpuZXdfY2xvY2spOwotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdFN5c3RlbUNsb2NrLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TWVNURU1fQ0xPQ0tfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0dGFnbGlzdC5jIGIvZ3N0L2dzdHRhZ2xpc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVjZTk5NS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dGFnbGlzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA0NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLSAqCi0gKiBnc3R0YWdsaXN0LmM6IHRhZyBzdXBwb3J0IChha2EgbWV0YWRhdGEpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHRhZ2xpc3QKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTGlzdCBvZiB0YWdzIGFuZCB2YWx1ZXMgdXNlZCB0byBkZXNjcmliZSBtZWRpYSBtZXRhZGF0YQotICoKLSAqIExpc3Qgb2YgdGFncyBhbmQgdmFsdWVzIHVzZWQgdG8gZGVzY3JpYmUgbWVkaWEgbWV0YWRhdGEuCi0gKgotICogU3RyaW5ncyBpbiBzdHJ1Y3R1cmVzIG11c3QgYmUgQVNDSUkgb3IgVVRGLTggZW5jb2RlZC4gT3RoZXIgZW5jb2RpbmdzIGFyZQotICogbm90IGFsbG93ZWQuIFN0cmluZ3MgbXVzdCBub3QgYmUgZW1wdHkgb3IgJU5VTEwuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgIm1hdGgtY29tcGF0LmgiCi0jaW5jbHVkZSAiZ3N0LWkxOG4tbGliLmgiCi0jaW5jbHVkZSAiZ3N0dGFnbGlzdC5oIgotI2luY2x1ZGUgImdzdGluZm8uaCIKLSNpbmNsdWRlICJnc3R2YWx1ZS5oIgotI2luY2x1ZGUgImdzdGJ1ZmZlci5oIgotI2luY2x1ZGUgImdzdHF1YXJrLmgiCi0jaW5jbHVkZSAiZ3N0c3RydWN0dXJlLmgiCi0KLSNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKiBGSVhNRTogYWRkIGNhdGVnb3J5IGZvciB0YWdzICovCi0jZGVmaW5lIEdTVF9DQVRfVEFHUyBHU1RfQ0FUX0RFRkFVTFQKLQotI2RlZmluZSBHU1RfVEFHX0lTX1ZBTElEKHRhZykgICAgICAgICAgIChnc3RfdGFnX2dldF9pbmZvICh0YWcpICE9IE5VTEwpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUYWdMaXN0SW1wbAotewotICBHc3RUYWdMaXN0IHRhZ2xpc3Q7Ci0KLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdFRhZ1Njb3BlIHNjb3BlOwotfSBHc3RUYWdMaXN0SW1wbDsKLQotI2RlZmluZSBHU1RfVEFHX0xJU1RfU1RSVUNUVVJFKHRhZ2xpc3QpICAoKEdzdFRhZ0xpc3RJbXBsKikodGFnbGlzdCkpLT5zdHJ1Y3R1cmUKLSNkZWZpbmUgR1NUX1RBR19MSVNUX1NDT1BFKHRhZ2xpc3QpICAoKEdzdFRhZ0xpc3RJbXBsKikodGFnbGlzdCkpLT5zY29wZQotCi10eXBlZGVmIHN0cnVjdAotewotICBHVHlwZSB0eXBlOyAgICAgICAgICAgICAgICAgICAvKiB0eXBlIHRoZSBkYXRhIGlzIGluICovCi0KLSAgY29uc3QgZ2NoYXIgKm5pY2s7ICAgICAgICAgICAgLyogdHJhbnNsYXRlZCBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICBjb25zdCBnY2hhciAqYmx1cmI7ICAgICAgICAgICAvKiB0cmFuc2xhdGVkIGxvbmcgZGVzY3JpcHRpb24gICovCi0KLSAgR3N0VGFnTWVyZ2VGdW5jIG1lcmdlX2Z1bmM7ICAgLyogZnVuY3Rpb25zIHRvIG1lcmdlIHRoZSB2YWx1ZXMgKi8KLSAgR3N0VGFnRmxhZyBmbGFnOyAgICAgICAgICAgICAgLyogdHlwZSBvZiB0YWcgKi8KLSAgR1F1YXJrIG5hbWVfcXVhcms7ICAgICAgICAgICAgLyogcXVhcmsgZm9yIHRoZSBuYW1lICovCi19Ci1Hc3RUYWdJbmZvOwotCi0jZGVmaW5lIGdfdmFsdWVfZ2V0X2NoYXIgZ192YWx1ZV9nZXRfc2NoYXIKLQotc3RhdGljIEdNdXRleCBfX3RhZ19tdXRleDsKLSNkZWZpbmUgVEFHX0xPQ0sgZ19tdXRleF9sb2NrICgmX190YWdfbXV0ZXgpCi0jZGVmaW5lIFRBR19VTkxPQ0sgZ19tdXRleF91bmxvY2sgKCZfX3RhZ19tdXRleCkKLQotLyogdGFncyBoYXNoIHRhYmxlOiBtYXBzIHRhZyBuYW1lIHN0cmluZyA9PiBHc3RUYWdJbmZvICovCi1zdGF0aWMgR0hhc2hUYWJsZSAqX190YWdzOwotCi1HVHlwZSBfZ3N0X3RhZ19saXN0X3R5cGUgPSAwOwotR1NUX0RFRklORV9NSU5JX09CSkVDVF9UWVBFIChHc3RUYWdMaXN0LCBnc3RfdGFnX2xpc3QpOwotCi1zdGF0aWMgdm9pZCBfX2dzdF90YWdfbGlzdF9mcmVlIChHc3RUYWdMaXN0ICogbGlzdCk7Ci1zdGF0aWMgR3N0VGFnTGlzdCAqX19nc3RfdGFnX2xpc3RfY29weSAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QpOwotCi0vKiBGSVhNRTogaGFkIGNvZGU6Ci0gKiAgICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChfZ3N0X3RhZ19saXN0X3R5cGUsIEdfVFlQRV9TVFJJTkcsCi0gKiAgICAgIF9nc3Rfc3RydWN0dXJlX3RyYW5zZm9ybV90b19zdHJpbmcpOwotICovCi12b2lkCi1fcHJpdl9nc3RfdGFnX2luaXRpYWxpemUgKHZvaWQpCi17Ci0gIGdfbXV0ZXhfaW5pdCAoJl9fdGFnX211dGV4KTsKLQotICBfZ3N0X3RhZ19saXN0X3R5cGUgPSBnc3RfdGFnX2xpc3RfZ2V0X3R5cGUgKCk7Ci0KLSAgX190YWdzID0gZ19oYXNoX3RhYmxlX25ldyAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19USVRMRSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygidGl0bGUiKSwgXygiY29tbW9ubHkgdXNlZCB0aXRsZSIpLCBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1RJVExFX1NPUlROQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJ0aXRsZSBzb3J0bmFtZSIpLCBfKCJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19BUlRJU1QsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywKLSAgICAgIF8oImFydGlzdCIpLAotICAgICAgXygicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIiksCi0gICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0FSVElTVF9TT1JUTkFNRSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiYXJ0aXN0IHNvcnRuYW1lIiksCi0gICAgICBfKCJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0FMQlVNLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJhbGJ1bSIpLAotICAgICAgXygiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiKSwgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19BTEJVTV9TT1JUTkFNRSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiYWxidW0gc29ydG5hbWUiKSwKLSAgICAgIF8oImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19BTEJVTV9BUlRJU1QsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywKLSAgICAgIF8oImFsYnVtIGFydGlzdCIpLAotICAgICAgXygiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIiksCi0gICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIiksCi0gICAgICBfKCJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0RBVEUsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfREFURSwKLSAgICAgIF8oImRhdGUiKSwgXygiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19EQVRFX1RJTUUsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR1NUX1RZUEVfREFURV9USU1FLCBfKCJkYXRldGltZSIpLAotICAgICAgXygiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIiksCi0gICAgICBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfR0VOUkUsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywKLSAgICAgIF8oImdlbnJlIiksCi0gICAgICBfKCJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIpLCBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0NPTU1FTlQsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywKLSAgICAgIF8oImNvbW1lbnQiKSwKLSAgICAgIF8oImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIiksIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiZXh0ZW5kZWQgY29tbWVudCIpLAotICAgICAgXygiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIiksCi0gICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1RSQUNLX05VTUJFUiwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfVUlOVCwKLSAgICAgIF8oInRyYWNrIG51bWJlciIpLAotICAgICAgXygidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iKSwgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19UUkFDS19DT1VOVCwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfVUlOVCwKLSAgICAgIF8oInRyYWNrIGNvdW50IiksCi0gICAgICBfKCJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIiksCi0gICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVIsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1VJTlQsCi0gICAgICBfKCJkaXNjIG51bWJlciIpLAotICAgICAgXygiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIpLCBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfVUlOVCwKLSAgICAgIF8oImRpc2MgY291bnQiKSwKLSAgICAgIF8oImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIiksCi0gICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0xPQ0FUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJsb2NhdGlvbiIpLCBfKCJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgIgotICAgICAgICAgICJvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gaXMgaG9zdGVkKSIpLAotICAgICAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19IT01FUEFHRSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiaG9tZXBhZ2UiKSwKLSAgICAgIF8oIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiKSwKLSAgICAgIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfREVTQ1JJUFRJT04sIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywgXygiZGVzY3JpcHRpb24iKSwKLSAgICAgIF8oInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIpLAotICAgICAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19WRVJTSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1NUUklORywKLSAgICAgIF8oInZlcnNpb24iKSwgXygidmVyc2lvbiBvZiB0aGlzIGRhdGEiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0lTUkMsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiSVNSQyIpLAotICAgICAgXwotICAgICAgKCJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iKSwKLSAgICAgIE5VTEwpOwotICAvKiBGSVhNRTogb3JnYW5pemF0aW9uIChmaXggd2hhdD8gdHBtKSAqLwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19PUkdBTklaQVRJT04sIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywgXygib3JnYW5pemF0aW9uIiksIF8oIm9yZ2FuaXphdGlvbiIpLAotICAgICAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19DT1BZUklHSFQsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywgXygiY29weXJpZ2h0IiksIF8oImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0NPUFlSSUdIVF9VUkksIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywgXygiY29weXJpZ2h0IHVyaSIpLAotICAgICAgXygiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19FTkNPREVEX0JZLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1NUUklORywKLSAgICAgIF8oImVuY29kZWQgYnkiKSwgXygibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIpLAotICAgICAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19DT05UQUNULCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJjb250YWN0IiksIF8oImNvbnRhY3QgaW5mb3JtYXRpb24iKSwgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19MSUNFTlNFLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImxpY2Vuc2UiKSwgXygibGljZW5zZSBvZiBkYXRhIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19MSUNFTlNFX1VSSSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLCBfKCJsaWNlbnNlIHVyaSIpLAotICAgICAgXygiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19QRVJGT1JNRVIsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywKLSAgICAgIF8oInBlcmZvcm1lciIpLAotICAgICAgXygicGVyc29uKHMpIHBlcmZvcm1pbmciKSwgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19DT01QT1NFUiwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiY29tcG9zZXIiKSwKLSAgICAgIF8oInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIpLAotICAgICAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19DT05EVUNUT1IsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywKLSAgICAgIF8oImNvbmR1Y3RvciIpLAotICAgICAgXygiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IiksIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfRFVSQVRJT04sIEdTVF9UQUdfRkxBR19ERUNPREVELAotICAgICAgR19UWVBFX1VJTlQ2NCwKLSAgICAgIF8oImR1cmF0aW9uIiksIF8oImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19DT0RFQywgR1NUX1RBR19GTEFHX0VOQ09ERUQsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiY29kZWMiKSwKLSAgICAgIF8oImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIpLCBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1ZJREVPX0NPREVDLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKLSAgICAgIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJ2aWRlbyBjb2RlYyIpLCBfKCJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0FVRElPX0NPREVDLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKLSAgICAgIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJhdWRpbyBjb2RlYyIpLCBfKCJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1NVQlRJVExFX0NPREVDLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKLSAgICAgIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJzdWJ0aXRsZSBjb2RlYyIpLCBfKCJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQsIEdTVF9UQUdfRkxBR19FTkNPREVELAotICAgICAgR19UWVBFX1NUUklORywgXygiY29udGFpbmVyIGZvcm1hdCIpLAotICAgICAgXygiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0JJVFJBVEUsIEdTVF9UQUdfRkxBR19FTkNPREVELAotICAgICAgR19UWVBFX1VJTlQsIF8oImJpdHJhdGUiKSwgXygiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfTk9NSU5BTF9CSVRSQVRFLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKLSAgICAgIEdfVFlQRV9VSU5ULCBfKCJub21pbmFsIGJpdHJhdGUiKSwgXygibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfTUlOSU1VTV9CSVRSQVRFLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKLSAgICAgIEdfVFlQRV9VSU5ULCBfKCJtaW5pbXVtIGJpdHJhdGUiKSwgXygibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFLCBHU1RfVEFHX0ZMQUdfRU5DT0RFRCwKLSAgICAgIEdfVFlQRV9VSU5ULCBfKCJtYXhpbXVtIGJpdHJhdGUiKSwgXygibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfRU5DT0RFUiwgR1NUX1RBR19GTEFHX0VOQ09ERUQsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiZW5jb2RlciIpLCBfKCJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19FTkNPREVSX1ZFUlNJT04sIEdTVF9UQUdfRkxBR19FTkNPREVELAotICAgICAgR19UWVBFX1VJTlQsCi0gICAgICBfKCJlbmNvZGVyIHZlcnNpb24iKSwKLSAgICAgIF8oInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1NFUklBTCwgR1NUX1RBR19GTEFHX0VOQ09ERUQsCi0gICAgICBHX1RZUEVfVUlOVCwgXygic2VyaWFsIiksIF8oInNlcmlhbCBudW1iZXIgb2YgdHJhY2siKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1RSQUNLX0dBSU4sIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX0RPVUJMRSwgXygicmVwbGF5Z2FpbiB0cmFjayBnYWluIiksIF8oInRyYWNrIGdhaW4gaW4gZGIiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1RSQUNLX1BFQUssIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX0RPVUJMRSwgXygicmVwbGF5Z2FpbiB0cmFjayBwZWFrIiksIF8oInBlYWsgb2YgdGhlIHRyYWNrIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19BTEJVTV9HQUlOLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9ET1VCTEUsIF8oInJlcGxheWdhaW4gYWxidW0gZ2FpbiIpLCBfKCJhbGJ1bSBnYWluIGluIGRiIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19BTEJVTV9QRUFLLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9ET1VCTEUsIF8oInJlcGxheWdhaW4gYWxidW0gcGVhayIpLCBfKCJwZWFrIG9mIHRoZSBhbGJ1bSIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9ET1VCTEUsIF8oInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIiksCi0gICAgICBfKCJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19MQU5HVUFHRV9DT0RFLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImxhbmd1YWdlIGNvZGUiKSwKLSAgICAgIF8oImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiKSwKLSAgICAgIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19MQU5HVUFHRV9OQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImxhbmd1YWdlIG5hbWUiKSwKLSAgICAgIF8oImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19JTUFHRSwgR1NUX1RBR19GTEFHX01FVEEsIEdTVF9UWVBFX1NBTVBMRSwKLSAgICAgIF8oImltYWdlIiksIF8oImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iKSwgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19QUkVWSUVXX0lNQUdFLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdTVF9UWVBFX1NBTVBMRSwKLSAgICAgIC8qIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZSAqLwotICAgICAgXygicHJldmlldyBpbWFnZSIpLCBfKCJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0FUVEFDSE1FTlQsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR1NUX1RZUEVfU0FNUExFLCBfKCJhdHRhY2htZW50IiksIF8oImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iKSwKLSAgICAgIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfQkVBVFNfUEVSX01JTlVURSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfRE9VQkxFLCBfKCJiZWF0cyBwZXIgbWludXRlIiksCi0gICAgICBfKCJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfS0VZV09SRFMsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfU1RSSU5HLAotICAgICAgXygia2V5d29yZHMiKSwgXygiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiKSwKLSAgICAgIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUUsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywgXygiZ2VvIGxvY2F0aW9uIG5hbWUiKSwKLSAgICAgIF8oImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlICIKLSAgICAgICAgICAidGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREUsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX0RPVUJMRSwgXygiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIiksCi0gICAgICBfKCJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSAgICAgICAgICAicHJvZHVjZWQgaW4gZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsICIKLSAgICAgICAgICAibmVnYXRpdmUgdmFsdWVzIGZvciBzb3V0aGVybiBsYXRpdHVkZXMpIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19HRU9fTE9DQVRJT05fTE9OR0lUVURFLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9ET1VCTEUsIF8oImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiKSwKLSAgICAgIF8oImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSAgICAgICAgICAicHJvZHVjZWQgaW4gZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuICIKLSAgICAgICAgICAiaW4gR3JlZW53aWNoL1VLLCAgbmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9ET1VCTEUsIF8oImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iKSwKLSAgICAgIF8oImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSAgICAgICAgICAibWV0ZXJzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0dFT19MT0NBVElPTl9DT1VOVFJZLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImdlbyBsb2NhdGlvbiBjb3VudHJ5IiksCi0gICAgICBfKCJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCAiCi0gICAgICAgICAgIm9yIHByb2R1Y2VkIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19HRU9fTE9DQVRJT05fQ0lUWSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLCBfKCJnZW8gbG9jYXRpb24gY2l0eSIpLAotICAgICAgXygiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgIgotICAgICAgICAgICJvciBwcm9kdWNlZCIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIpLAotICAgICAgXygiYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCAiCi0gICAgICAgICAgIm9yIGNyZWF0ZWQgKGUuZy4gdGhlIG5laWdoYm9yaG9vZCkiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SLAotICAgICAgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9ET1VCTEUsIF8oImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIiksCi0gICAgICBfKCJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIpLAotICAgICAgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRCwKLSAgICAgIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfRE9VQkxFLCBfKCJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiKSwKLSAgICAgIF8oIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgIgotICAgICAgICAgICJpbiBtL3MiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9ESVJFQ1RJT04sCi0gICAgICBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX0RPVUJMRSwgXygiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIpLAotICAgICAgXygiaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIgotICAgICAgICAgICIgb2YgYSBtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAiCi0gICAgICAgICAgInJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzICIKLSAgICAgICAgICAiY2xvY2t3aXNlIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19HRU9fTE9DQVRJT05fQ0FQVFVSRV9ESVJFQ1RJT04sCi0gICAgICBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX0RPVUJMRSwgXygiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIiksCi0gICAgICBfKCJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICIKLSAgICAgICAgICAiIGEgbWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIgotICAgICAgICAgICIgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgIgotICAgICAgICAgICJjbG9ja3dpc2UiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1NIT1dfTkFNRSwgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAvKiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUgKi8KLSAgICAgIF8oInNob3cgbmFtZSIpLAotICAgICAgXygiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIpLAotICAgICAgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19TSE9XX1NPUlROQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsCi0gICAgICAvKiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUgKi8KLSAgICAgIF8oInNob3cgc29ydG5hbWUiKSwKLSAgICAgIF8oIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nICIKLSAgICAgICAgICAicHVycG9zZXMiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1NIT1dfRVBJU09ERV9OVU1CRVIsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1VJTlQsIF8oImVwaXNvZGUgbnVtYmVyIiksCi0gICAgICBfKCJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIpLAotICAgICAgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVIsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1VJTlQsIF8oInNlYXNvbiBudW1iZXIiKSwKLSAgICAgIF8oIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIiksCi0gICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0xZUklDUywgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJseXJpY3MiKSwgXygiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIiksCi0gICAgICBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImNvbXBvc2VyIHNvcnRuYW1lIiksCi0gICAgICBfKCJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19HUk9VUElORywgR1NUX1RBR19GTEFHX01FVEEsIEdfVFlQRV9TVFJJTkcsCi0gICAgICBfKCJncm91cGluZyIpLAotICAgICAgXygiR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCAiCi0gICAgICAgICAgInBpZWNlcyBvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssICIKLSAgICAgICAgICAiYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1VTRVJfUkFUSU5HLCBHU1RfVEFHX0ZMQUdfTUVUQSwgR19UWVBFX1VJTlQsCi0gICAgICBfKCJ1c2VyIHJhdGluZyIpLAotICAgICAgXygiUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCAiCi0gICAgICAgICAgInRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzIHRoaXMgbWVkaWEiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVIsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR19UWVBFX1NUUklORywgXygiZGV2aWNlIG1hbnVmYWN0dXJlciIpLAotICAgICAgXygiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfREVWSUNFX01PREVMLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImRldmljZSBtb2RlbCIpLAotICAgICAgXygiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIiksIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImFwcGxpY2F0aW9uIG5hbWUiKSwKLSAgICAgIF8oIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfQVBQTElDQVRJT05fREFUQSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHU1RfVFlQRV9TQU1QTEUsIF8oImFwcGxpY2F0aW9uIGRhdGEiKSwKLSAgICAgIF8oIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIF8oImltYWdlIG9yaWVudGF0aW9uIiksCi0gICAgICBfKCJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiKSwgTlVMTCk7Ci0gIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChHU1RfVEFHX1BVQkxJU0hFUiwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygicHVibGlzaGVyIiksCi0gICAgICBfKCJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiKSwgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19JTlRFUlBSRVRFRF9CWSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLAotICAgICAgXygiaW50ZXJwcmV0ZWQtYnkiKSwKLSAgICAgIF8oIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgIgotICAgICAgICAgICJpbnRlcnByZXRhdGlvbnMiKSwgZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEpOwotICBnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RBR19NSURJX0JBU0VfTk9URSwgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfVUlOVCwKLSAgICAgIF8oIm1pZGktYmFzZS1ub3RlIiksIF8oIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIpLCBOVUxMKTsKLSAgZ3N0X3RhZ19yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UQUdfUFJJVkFURV9EQVRBLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdTVF9UWVBFX1NBTVBMRSwKLSAgICAgIF8oInByaXZhdGUtZGF0YSIpLCBfKCJQcml2YXRlIGRhdGEiKSwgZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QpOwotCi19Ci0KLS8qKgotICogZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3Q6Ci0gKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogdW5pbml0aWFsaXplZCBHVmFsdWUgdG8gc3RvcmUgcmVzdWx0IGluCi0gKiBAc3JjOiBHVmFsdWUgdG8gY29weSBmcm9tCi0gKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0aGUgZnVuYyBhcmd1bWVudCBvZiBnc3RfdGFnX3JlZ2lzdGVyKCkuCi0gKiBJdCBjcmVhdGVzIGEgY29weSBvZiB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgbGlzdC4KLSAqLwotdm9pZAotZ3N0X3RhZ19tZXJnZV91c2VfZmlyc3QgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYykKLXsKLSAgY29uc3QgR1ZhbHVlICpyZXQgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHNyYywgMCk7Ci0KLSAgZ192YWx1ZV9pbml0IChkZXN0LCBHX1ZBTFVFX1RZUEUgKHJldCkpOwotICBnX3ZhbHVlX2NvcHkgKHJldCwgZGVzdCk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWE6Ci0gKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogdW5pbml0aWFsaXplZCBHVmFsdWUgdG8gc3RvcmUgcmVzdWx0IGluCi0gKiBAc3JjOiBHVmFsdWUgdG8gY29weSBmcm9tCi0gKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0aGUgZnVuYyBhcmd1bWVudCBvZiBnc3RfdGFnX3JlZ2lzdGVyKCkuCi0gKiBJdCBjb25jYXRlbmF0ZXMgYWxsIGdpdmVuIHN0cmluZ3MgdXNpbmcgYSBjb21tYS4gVGhlIHRhZyBtdXN0IGJlIHJlZ2lzdGVyZWQKLSAqIGFzIGEgR19UWVBFX1NUUklORyBvciB0aGlzIGZ1bmN0aW9uIHdpbGwgZmFpbC4KLSAqLwotdm9pZAotZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYykKLXsKLSAgR1N0cmluZyAqc3RyOwotICBnaW50IGksIGNvdW50OwotCi0gIGNvdW50ID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHNyYyk7Ci0gIHN0ciA9IGdfc3RyaW5nX25ldyAoZ192YWx1ZV9nZXRfc3RyaW5nIChnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHNyYywgMCkpKTsKLSAgZm9yIChpID0gMTsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAvKiBzZXBhcmF0b3IgYmV0d2VlbiB0d28gc3RyaW5ncyAqLwotICAgIGdfc3RyaW5nX2FwcGVuZCAoc3RyLCBfKCIsICIpKTsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHN0ciwKLSAgICAgICAgZ192YWx1ZV9nZXRfc3RyaW5nIChnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHNyYywgaSkpKTsKLSAgfQotCi0gIGdfdmFsdWVfaW5pdCAoZGVzdCwgR19UWVBFX1NUUklORyk7Ci0gIGdfdmFsdWVfdGFrZV9zdHJpbmcgKGRlc3QsIHN0ci0+c3RyKTsKLSAgZ19zdHJpbmdfZnJlZSAoc3RyLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyBHc3RUYWdJbmZvICoKLWdzdF90YWdfbG9va3VwIChjb25zdCBnY2hhciAqIHRhZ19uYW1lKQotewotICBHc3RUYWdJbmZvICpyZXQ7Ci0KLSAgVEFHX0xPQ0s7Ci0gIHJldCA9IGdfaGFzaF90YWJsZV9sb29rdXAgKF9fdGFncywgKGdwb2ludGVyKSB0YWdfbmFtZSk7Ci0gIFRBR19VTkxPQ0s7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX3JlZ2lzdGVyOgotICogQG5hbWU6IHRoZSBuYW1lIG9yIGlkZW50aWZpZXIgc3RyaW5nCi0gKiBAZmxhZzogYSBmbGFnIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgdGFnIGluZm8KLSAqIEB0eXBlOiB0aGUgdHlwZSB0aGlzIGRhdGEgaXMgaW4KLSAqIEBuaWNrOiBodW1hbi1yZWFkYWJsZSBuYW1lCi0gKiBAYmx1cmI6IGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gYWJvdXQgdGhpcyB0YWcKLSAqIEBmdW5jOiAoYWxsb3ctbm9uZSkgKHNjb3BlIGNhbGwpOiBmdW5jdGlvbiBmb3IgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMgb2YgdGhpcyB0YWcsIG9yICVOVUxMCi0gKgotICogUmVnaXN0ZXJzIGEgbmV3IHRhZyB0eXBlIGZvciB0aGUgdXNlIHdpdGggR1N0cmVhbWVyJ3MgdHlwZSBzeXN0ZW0uIElmIGEgdHlwZQotICogd2l0aCB0aGF0IG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLCB0aGF0IG9uZSBpcyB1c2VkLgotICogVGhlIG9sZCByZWdpc3RyYXRpb24gbWF5IGhhdmUgdXNlZCBhIGRpZmZlcmVudCB0eXBlIGhvd2V2ZXIuIFNvIGRvbid0IHJlbHkKLSAqIG9uIHlvdXIgc3VwcGxpZWQgdmFsdWVzLgotICoKLSAqIEltcG9ydGFudDogaWYgeW91IGRvIG5vdCBzdXBwbHkgYSBtZXJnZSBmdW5jdGlvbiB0aGUgaW1wbGljYXRpb24gd2lsbCBiZQotICogdGhhdCB0aGVyZSBjYW4gb25seSBiZSBvbmUgc2luZ2xlIHZhbHVlIGZvciB0aGlzIHRhZyBpbiBhIHRhZyBsaXN0IGFuZAotICogYW55IGFkZGl0aW9uYWwgdmFsdWVzIHdpbGwgc2lsZW50bHkgYmUgZGlzY2FyZGVkIHdoZW4gYmVpbmcgYWRkZWQgKHVubGVzcwotICogI0dTVF9UQUdfTUVSR0VfUkVQTEFDRSwgI0dTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwsIG9yCi0gKiAjR1NUX1RBR19NRVJHRV9QUkVQRU5EIGlzIHVzZWQgYXMgbWVyZ2UgbW9kZSwgaW4gd2hpY2ggY2FzZSB0aGUgbmV3Ci0gKiB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIG9sZCBvbmUgaW4gdGhlIGxpc3QpLgotICoKLSAqIFRoZSBtZXJnZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBmcm9tIGdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlKCkgd2hlbgotICogaXQgaXMgcmVxdWlyZWQgdGhhdCBvbmUgb3IgbW9yZSB2YWx1ZXMgZm9yIGEgdGFnIGJlIGNvbmRlbnNlZCBpbnRvCi0gKiBvbmUgc2luZ2xlIHZhbHVlLiBUaGlzIG1heSBoYXBwZW4gZnJvbSBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZygpLAotICogZ3N0X3RhZ19saXN0X2dldF9pbnQoKSwgZ3N0X3RhZ19saXN0X2dldF9kb3VibGUoKSBldGMuIFdoYXQgd2lsbCBoYXBwZW4KLSAqIGV4YWN0bHkgaW4gdGhhdCBjYXNlIGRlcGVuZHMgb24gaG93IHRoZSB0YWcgd2FzIHJlZ2lzdGVyZWQgYW5kIGlmIGEKLSAqIG1lcmdlIGZ1bmN0aW9uIHdhcyBzdXBwbGllZCBhbmQgaWYgc28gd2hpY2ggb25lLgotICoKLSAqIFR3byBkZWZhdWx0IG1lcmdlIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQ6IGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0KCkgYW5kCi0gKiBnc3RfdGFnX21lcmdlX3N0cmluZ3Nfd2l0aF9jb21tYSgpLgotICovCi12b2lkCi1nc3RfdGFnX3JlZ2lzdGVyIChjb25zdCBnY2hhciAqIG5hbWUsIEdzdFRhZ0ZsYWcgZmxhZywgR1R5cGUgdHlwZSwKLSAgICBjb25zdCBnY2hhciAqIG5pY2ssIGNvbnN0IGdjaGFyICogYmx1cmIsIEdzdFRhZ01lcmdlRnVuYyBmdW5jKQotewotICBnX3JldHVybl9pZl9mYWlsIChuYW1lICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChuaWNrICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChibHVyYiAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAodHlwZSAhPSAwICYmIHR5cGUgIT0gR1NUX1RZUEVfTElTVCk7Ci0KLSAgcmV0dXJuIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChnX2ludGVybl9zdHJpbmcgKG5hbWUpLCBmbGFnLCB0eXBlLAotICAgICAgZ19pbnRlcm5fc3RyaW5nIChuaWNrKSwgZ19pbnRlcm5fc3RyaW5nIChibHVyYiksIGZ1bmMpOwotfQotCi0vKioKLSAqIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljOgotICogQG5hbWU6IHRoZSBuYW1lIG9yIGlkZW50aWZpZXIgc3RyaW5nIChzdHJpbmcgY29uc3RhbnQpCi0gKiBAZmxhZzogYSBmbGFnIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgdGFnIGluZm8KLSAqIEB0eXBlOiB0aGUgdHlwZSB0aGlzIGRhdGEgaXMgaW4KLSAqIEBuaWNrOiBodW1hbi1yZWFkYWJsZSBuYW1lIG9yIHNob3J0IGRlc2NyaXB0aW9uIChzdHJpbmcgY29uc3RhbnQpCi0gKiBAYmx1cmI6IGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgdGFnIChzdHJpbmcgY29uc3RhbnQpCi0gKiBAZnVuYzogKGFsbG93LW5vbmUpIChzY29wZSBjYWxsKTogZnVuY3Rpb24gZm9yIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzIG9mIHRoaXMgdGFnLCBvciAlTlVMTAotICoKLSAqIFJlZ2lzdGVycyBhIG5ldyB0YWcgdHlwZSBmb3IgdGhlIHVzZSB3aXRoIEdTdHJlYW1lcidzIHR5cGUgc3lzdGVtLgotICoKLSAqIFNhbWUgYXMgZ3N0X3RhZ19yZWdpc3RlcigpLCBidXQgQG5hbWUsIEBuaWNrLCBhbmQgQGJsdXJiIG11c3QgYmUKLSAqIHN0YXRpYyBzdHJpbmdzIG9yIGlubGluZWQgc3RyaW5ncywgYXMgdGhleSB3aWxsIG5vdCBiZSBjb3BpZWQuIChHU3RyZWFtZXIKLSAqIHBsdWdpbnMgd2lsbCBiZSBtYWRlIHJlc2lkZW50IG9uY2UgbG9hZGVkLCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkCi0gKiBldmVuIGZyb20gZHluYW1pY2FsbHkgbG9hZGVkIHBsdWdpbnMuKQotICovCi12b2lkCi1nc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYyAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RUYWdGbGFnIGZsYWcsIEdUeXBlIHR5cGUsCi0gICAgY29uc3QgZ2NoYXIgKiBuaWNrLCBjb25zdCBnY2hhciAqIGJsdXJiLCBHc3RUYWdNZXJnZUZ1bmMgZnVuYykKLXsKLSAgR3N0VGFnSW5mbyAqaW5mbzsKLQotICBnX3JldHVybl9pZl9mYWlsIChuYW1lICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChuaWNrICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChibHVyYiAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAodHlwZSAhPSAwICYmIHR5cGUgIT0gR1NUX1RZUEVfTElTVCk7Ci0KLSAgaW5mbyA9IGdzdF90YWdfbG9va3VwIChuYW1lKTsKLQotICBpZiAoaW5mbykgewotICAgIGdfcmV0dXJuX2lmX2ZhaWwgKGluZm8tPnR5cGUgPT0gdHlwZSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaW5mbyA9IGdfc2xpY2VfbmV3IChHc3RUYWdJbmZvKTsKLSAgaW5mby0+ZmxhZyA9IGZsYWc7Ci0gIGluZm8tPnR5cGUgPSB0eXBlOwotICBpbmZvLT5uYW1lX3F1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKG5hbWUpOwotICBpbmZvLT5uaWNrID0gbmljazsKLSAgaW5mby0+Ymx1cmIgPSBibHVyYjsKLSAgaW5mby0+bWVyZ2VfZnVuYyA9IGZ1bmM7Ci0KLSAgVEFHX0xPQ0s7Ci0gIGdfaGFzaF90YWJsZV9pbnNlcnQgKF9fdGFncywgKGdwb2ludGVyKSBuYW1lLCBpbmZvKTsKLSAgVEFHX1VOTE9DSzsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2V4aXN0czoKLSAqIEB0YWc6IG5hbWUgb2YgdGhlIHRhZwotICoKLSAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdHlwZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHR5cGUgaXMgYWxyZWFkeSByZWdpc3RlcmVkCi0gKi8KLWdib29sZWFuCi1nc3RfdGFnX2V4aXN0cyAoY29uc3QgZ2NoYXIgKiB0YWcpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHJldHVybiBnc3RfdGFnX2xvb2t1cCAodGFnKSAhPSBOVUxMOwotfQotCi0vKioKLSAqIGdzdF90YWdfZ2V0X3R5cGU6Ci0gKiBAdGFnOiB0aGUgdGFnCi0gKgotICogR2V0cyB0aGUgI0dUeXBlIHVzZWQgZm9yIHRoaXMgdGFnLgotICoKLSAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgdGhpcyB0YWcKLSAqLwotR1R5cGUKLWdzdF90YWdfZ2V0X3R5cGUgKGNvbnN0IGdjaGFyICogdGFnKQotewotICBHc3RUYWdJbmZvICppbmZvOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgMCk7Ci0gIGluZm8gPSBnc3RfdGFnX2xvb2t1cCAodGFnKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8gIT0gTlVMTCwgMCk7Ci0KLSAgcmV0dXJuIGluZm8tPnR5cGU7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19nZXRfbmljazoKLSAqIEB0YWc6IHRoZSB0YWcKLSAqCi0gKiBSZXR1cm5zIHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgdGFnLCBZb3UgbXVzdCBub3QgY2hhbmdlIG9yIGZyZWUKLSAqIHRoaXMgc3RyaW5nLgotICoKLSAqIFJldHVybnM6IHRoZSBodW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoaXMgdGFnCi0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF90YWdfZ2V0X25pY2sgKGNvbnN0IGdjaGFyICogdGFnKQotewotICBHc3RUYWdJbmZvICppbmZvOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgTlVMTCk7Ci0gIGluZm8gPSBnc3RfdGFnX2xvb2t1cCAodGFnKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZm8gIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIGluZm8tPm5pY2s7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19nZXRfZGVzY3JpcHRpb246Ci0gKiBAdGFnOiB0aGUgdGFnCi0gKgotICogUmV0dXJucyB0aGUgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhpcyB0YWcsIFlvdSBtdXN0IG5vdCBjaGFuZ2Ugb3IKLSAqIGZyZWUgdGhpcyBzdHJpbmcuCi0gKgotICogUmV0dXJuczogdGhlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoaXMgdGFnCi0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF90YWdfZ2V0X2Rlc2NyaXB0aW9uIChjb25zdCBnY2hhciAqIHRhZykKLXsKLSAgR3N0VGFnSW5mbyAqaW5mbzsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnICE9IE5VTEwsIE5VTEwpOwotICBpbmZvID0gZ3N0X3RhZ19sb29rdXAgKHRhZyk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBpbmZvLT5ibHVyYjsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2dldF9mbGFnOgotICogQHRhZzogdGhlIHRhZwotICoKLSAqIEdldHMgdGhlIGZsYWcgb2YgQHRhZy4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgZmxhZyBvZiB0aGlzIHRhZy4KLSAqLwotR3N0VGFnRmxhZwotZ3N0X3RhZ19nZXRfZmxhZyAoY29uc3QgZ2NoYXIgKiB0YWcpCi17Ci0gIEdzdFRhZ0luZm8gKmluZm87Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBHU1RfVEFHX0ZMQUdfVU5ERUZJTkVEKTsKLSAgaW5mbyA9IGdzdF90YWdfbG9va3VwICh0YWcpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaW5mbyAhPSBOVUxMLCBHU1RfVEFHX0ZMQUdfVU5ERUZJTkVEKTsKLQotICByZXR1cm4gaW5mby0+ZmxhZzsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2lzX2ZpeGVkOgotICogQHRhZzogdGFnIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB0YWcgaXMgZml4ZWQuIEEgZml4ZWQgdGFnIGNhbiBvbmx5IGNvbnRhaW4gb25lIHZhbHVlLgotICogVW5maXhlZCB0YWdzIGNhbiBjb250YWluIGxpc3RzIG9mIHZhbHVlcy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgdGhlIGdpdmVuIHRhZyBpcyBmaXhlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90YWdfaXNfZml4ZWQgKGNvbnN0IGdjaGFyICogdGFnKQotewotICBHc3RUYWdJbmZvICppbmZvOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOwotICBpbmZvID0gZ3N0X3RhZ19sb29rdXAgKHRhZyk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmZvICE9IE5VTEwsIEZBTFNFKTsKLQotICByZXR1cm4gaW5mby0+bWVyZ2VfZnVuYyA9PSBOVUxMOwotfQotCi0vKiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHN0cnVjdHVyZSAqLwotc3RhdGljIEdzdFRhZ0xpc3QgKgotZ3N0X3RhZ19saXN0X25ld19pbnRlcm5hbCAoR3N0U3RydWN0dXJlICogcywgR3N0VGFnU2NvcGUgc2NvcGUpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotCi0gIGdfYXNzZXJ0IChzICE9IE5VTEwpOwotCi0gIHRhZ19saXN0ID0gKEdzdFRhZ0xpc3QgKikgZ19zbGljZV9uZXcgKEdzdFRhZ0xpc3RJbXBsKTsKLQotICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHRhZ19saXN0KSwgMCwgR1NUX1RZUEVfVEFHX0xJU1QsCi0gICAgICAoR3N0TWluaU9iamVjdENvcHlGdW5jdGlvbikgX19nc3RfdGFnX2xpc3RfY29weSwgTlVMTCwKLSAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBfX2dzdF90YWdfbGlzdF9mcmVlKTsKLQotICBHU1RfVEFHX0xJU1RfU1RSVUNUVVJFICh0YWdfbGlzdCkgPSBzOwotICBHU1RfVEFHX0xJU1RfU0NPUEUgKHRhZ19saXN0KSA9IHNjb3BlOwotCi0jaWZkZWYgREVCVUdfUkVGQ09VTlQKLSAgR1NUX0NBVF9UUkFDRSAoR1NUX0NBVF9UQUdTLCAiY3JlYXRlZCB0YWdsaXN0ICVwIiwgdGFnX2xpc3QpOwotI2VuZGlmCi0KLSAgcmV0dXJuIHRhZ19saXN0OwotfQotCi1zdGF0aWMgdm9pZAotX19nc3RfdGFnX2xpc3RfZnJlZSAoR3N0VGFnTGlzdCAqIGxpc3QpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCkpOwotCi0jaWZkZWYgREVCVUdfUkVGQ09VTlQKLSAgR1NUX0NBVF9UUkFDRSAoR1NUX0NBVF9UQUdTLCAiZnJlZWluZyB0YWdsaXN0ICVwIiwgbGlzdCk7Ci0jZW5kaWYKLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKEdTVF9UQUdfTElTVF9TVFJVQ1RVUkUgKGxpc3QpKTsKLQotICBnX3NsaWNlX2ZyZWUxIChzaXplb2YgKEdzdFRhZ0xpc3RJbXBsKSwgbGlzdCk7Ci19Ci0KLXN0YXRpYyBHc3RUYWdMaXN0ICoKLV9fZ3N0X3RhZ19saXN0X2NvcHkgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0KQotewotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCksIE5VTEwpOwotCi0gIHMgPSBHU1RfVEFHX0xJU1RfU1RSVUNUVVJFIChsaXN0KTsKLSAgcmV0dXJuIGdzdF90YWdfbGlzdF9uZXdfaW50ZXJuYWwgKGdzdF9zdHJ1Y3R1cmVfY29weSAocyksCi0gICAgICBHU1RfVEFHX0xJU1RfU0NPUEUgKGxpc3QpKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5OgotICoKLSAqIENyZWF0ZXMgYSBuZXcgZW1wdHkgR3N0VGFnTGlzdC4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfdGFnX2xpc3RfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEFuIGVtcHR5IHRhZyBsaXN0Ci0gKi8KLUdzdFRhZ0xpc3QgKgotZ3N0X3RhZ19saXN0X25ld19lbXB0eSAodm9pZCkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXdfaWRfZW1wdHkgKEdTVF9RVUFSSyAoVEFHTElTVCkpOwotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfaW50ZXJuYWwgKHMsIEdTVF9UQUdfU0NPUEVfU1RSRUFNKTsKLSAgcmV0dXJuIHRhZ19saXN0OwotfQotCi0vKioKLSAqIGdzdF90YWdfbGlzdF9uZXc6Ci0gKiBAdGFnOiB0YWcKLSAqIEAuLi46ICVOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiB2YWx1ZXMgdG8gc2V0Ci0gKgotICogQ3JlYXRlcyBhIG5ldyB0YWdsaXN0IGFuZCBhcHBlbmRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzLiBJdCBleHBlY3RzCi0gKiB0YWctdmFsdWUgcGFpcnMgbGlrZSBnc3RfdGFnX2xpc3RfYWRkKCksIGFuZCBhICVOVUxMIHRlcm1pbmF0b3IgYWZ0ZXIgdGhlCi0gKiBsYXN0IHBhaXIuIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZXMgaXMgaW1wbGljaXQgYW5kIGlzIGRvY3VtZW50ZWQgaW4gdGhlIEFQSQotICogcmVmZXJlbmNlLCBidXQgY2FuIGFsc28gYmUgcXVlcmllZCBhdCBydW50aW1lIHdpdGggZ3N0X3RhZ19nZXRfdHlwZSgpLiBJdAotICogaXMgYW4gZXJyb3IgdG8gcGFzcyBhIHZhbHVlIG9mIGEgdHlwZSBub3QgbWF0Y2hpbmcgdGhlIHRhZyB0eXBlIGludG8gdGhpcwotICogZnVuY3Rpb24uIFRoZSB0YWcgbGlzdCB3aWxsIG1ha2UgY29waWVzIG9mIGFueSBhcmd1bWVudHMgcGFzc2VkCi0gKiAoZS5nLiBzdHJpbmdzLCBidWZmZXJzKS4KLSAqCi0gKiBBZnRlciBjcmVhdGlvbiB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIHNldCBhICNHc3RUYWdTY29wZSBvbiB0aGUgcmV0dXJuZWQKLSAqIHRhZ2xpc3QgdG8gc2lnbmFsIGlmIHRoZSBjb250YWluZWQgdGFncyBhcmUgZ2xvYmFsIG9yIHN0cmVhbSB0YWdzLiBCeQotICogZGVmYXVsdCBzdHJlYW0gc2NvcGUgaXMgYXNzdW1lcy4gU2VlIGdzdF90YWdfbGlzdF9zZXRfc2NvcGUoKS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfdGFnX2xpc3RfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RUYWdMaXN0LiBGcmVlIHdpdGggZ3N0X3RhZ19saXN0X3VucmVmKCkKLSAqICAgICB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gKi8KLUdzdFRhZ0xpc3QgKgotZ3N0X3RhZ19saXN0X25ldyAoY29uc3QgZ2NoYXIgKiB0YWcsIC4uLikKLXsKLSAgR3N0VGFnTGlzdCAqbGlzdDsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIHZhX3N0YXJ0IChhcmdzLCB0YWcpOwotICBnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdCAobGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIHRhZywgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X25ld192YWxpc3Q6Ci0gKiBAdmFyX2FyZ3M6IHRhZyAvIHZhbHVlIHBhaXJzIHRvIHNldAotICoKLSAqIEp1c3QgbGlrZSBnc3RfdGFnX2xpc3RfbmV3KCksIG9ubHkgdGhhdCBpdCB0YWtlcyBhIHZhX2xpc3QgYXJndW1lbnQuCi0gKiBVc2VmdWwgbW9zdGx5IGZvciBsYW5ndWFnZSBiaW5kaW5ncy4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfdGFnX2xpc3RfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RUYWdMaXN0LiBGcmVlIHdpdGggZ3N0X3RhZ19saXN0X3VucmVmKCkKLSAqICAgICB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gKi8KLUdzdFRhZ0xpc3QgKgotZ3N0X3RhZ19saXN0X25ld192YWxpc3QgKHZhX2xpc3QgdmFyX2FyZ3MpCi17Ci0gIEdzdFRhZ0xpc3QgKmxpc3Q7Ci0gIGNvbnN0IGdjaGFyICp0YWc7Ci0KLSAgbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgdGFnID0gdmFfYXJnICh2YXJfYXJncywgZ2NoYXIgKik7Ci0gIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0IChsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgdGFnLCB2YXJfYXJncyk7Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X3NldF9zY29wZToKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0Ci0gKiBAc2NvcGU6IG5ldyBzY29wZSBmb3IgQGxpc3QKLSAqCi0gKiBTZXRzIHRoZSBzY29wZSBvZiBAbGlzdCB0byBAc2NvcGUuIEJ5IGRlZmF1bHQgdGhlIHNjb3BlCi0gKiBvZiBhIHRhZ2xpc3QgaXMgc3RyZWFtIHNjb3BlLgotICoKLSAqLwotdm9pZAotZ3N0X3RhZ19saXN0X3NldF9zY29wZSAoR3N0VGFnTGlzdCAqIGxpc3QsIEdzdFRhZ1Njb3BlIHNjb3BlKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlIChsaXN0KSk7Ci0KLSAgR1NUX1RBR19MSVNUX1NDT1BFIChsaXN0KSA9IHNjb3BlOwotfQotCi0vKioKLSAqIGdzdF90YWdfbGlzdF9nZXRfc2NvcGU6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdAotICoKLSAqIEdldHMgdGhlIHNjb3BlIG9mIEBsaXN0LgotICoKLSAqIFJldHVybnM6IFRoZSBzY29wZSBvZiBAbGlzdAotICovCi1Hc3RUYWdTY29wZQotZ3N0X3RhZ19saXN0X2dldF9zY29wZSAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBHU1RfVEFHX1NDT1BFX1NUUkVBTSk7Ci0KLSAgcmV0dXJuIEdTVF9UQUdfTElTVF9TQ09QRSAobGlzdCk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X3RvX3N0cmluZzoKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0Ci0gKgotICogU2VyaWFsaXplcyBhIHRhZyBsaXN0IHRvIGEgc3RyaW5nLgotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSk6IGEgbmV3bHktYWxsb2NhdGVkIHN0cmluZywgb3IgJU5VTEwgaW4gY2FzZSBvZgotICogICAgIGFuIGVycm9yLiBUaGUgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2l0aCBnX2ZyZWUoKSB3aGVuIG5vIGxvbmdlcgotICogICAgIG5lZWRlZC4KLSAqLwotZ2NoYXIgKgotZ3N0X3RhZ19saXN0X3RvX3N0cmluZyAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKEdTVF9UQUdfTElTVF9TVFJVQ1RVUkUgKGxpc3QpKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfbmV3X2Zyb21fc3RyaW5nOgotICogQHN0cjogYSBzdHJpbmcgY3JlYXRlZCB3aXRoIGdzdF90YWdfbGlzdF90b19zdHJpbmcoKQotICoKLSAqIERlc2VyaWFsaXplcyBhIHRhZyBsaXN0LgotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSk6IGEgbmV3ICNHc3RUYWdMaXN0LCBvciAlTlVMTCBpbiBjYXNlIG9mIGFuCi0gKiBlcnJvci4KLSAqLwotR3N0VGFnTGlzdCAqCi1nc3RfdGFnX2xpc3RfbmV3X2Zyb21fc3RyaW5nIChjb25zdCBnY2hhciAqIHN0cikKLXsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zdHJfaGFzX3ByZWZpeCAoc3RyLCAidGFnbGlzdCIpLCBOVUxMKTsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKTsKLSAgaWYgKHMgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfaW50ZXJuYWwgKHMsIEdTVF9UQUdfU0NPUEVfU1RSRUFNKTsKLQotICByZXR1cm4gdGFnX2xpc3Q7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X25fdGFnczoKLSAqIEBsaXN0OiBBICNHc3RUYWdMaXN0LgotICoKLSAqIEdldCB0aGUgbnVtYmVyIG9mIHRhZ3MgaW4gQGxpc3QuCi0gKgotICogUmV0dXJuczogVGhlIG51bWJlciBvZiB0YWdzIGluIEBsaXN0LgotICovCi1naW50Ci1nc3RfdGFnX2xpc3Rfbl90YWdzIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxpc3QgIT0gTlVMTCwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCAwKTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoR1NUX1RBR19MSVNUX1NUUlVDVFVSRSAobGlzdCkpOwotfQotCi0vKioKLSAqIGdzdF90YWdfbGlzdF9udGhfdGFnX25hbWU6Ci0gKiBAbGlzdDogQSAjR3N0VGFnTGlzdC4KLSAqIEBpbmRleDogdGhlIGluZGV4Ci0gKgotICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0YWcgaW4gQGxpc3QgYXQgQGluZGV4LgotICoKLSAqIFJldHVybnM6IFRoZSBuYW1lIG9mIHRoZSB0YWcgYXQgQGluZGV4LgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfdGFnX2xpc3RfbnRoX3RhZ19uYW1lIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgZ3VpbnQgaW5kZXgpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsaXN0ICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgMCk7Ci0KLSAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgKEdTVF9UQUdfTElTVF9TVFJVQ1RVUkUgKGxpc3QpLCBpbmRleCk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X2lzX2VtcHR5OgotICogQGxpc3Q6IEEgI0dzdFRhZ0xpc3QuCi0gKgotICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB0YWdsaXN0IGlzIGVtcHR5LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB0YWdsaXN0IGlzIGVtcHR5LCBvdGhlcndpc2UgJUZBTFNFLgotICovCi1nYm9vbGVhbgotZ3N0X3RhZ19saXN0X2lzX2VtcHR5IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxpc3QgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgRkFMU0UpOwotCi0gIHJldHVybiAoZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoR1NUX1RBR19MSVNUX1NUUlVDVFVSRSAobGlzdCkpID09IDApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90YWdfbGlzdF9maWVsZHNfZXF1YWwgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBnZG91YmxlIGQxLCBkMjsKLQotICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKHZhbHVlMSwgdmFsdWUyKSA9PSBHU1RfVkFMVUVfRVFVQUwpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogZmllbGRzIG5vdCBlcXVhbDogYWRkIHNvbWUgdG9sZXJhbmNlIGZvciBkb3VibGVzLCBvdGhlcndpc2UgYmFpbCBvdXQgKi8KLSAgaWYgKCFHX1ZBTFVFX0hPTERTX0RPVUJMRSAodmFsdWUxKSB8fCAhR19WQUxVRV9IT0xEU19ET1VCTEUgKHZhbHVlMikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGQxID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZTEpOwotICBkMiA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUyKTsKLQotICAvKiBUaGlzIHdpbGwgb25seSB3b3JrIGZvciAnbm9ybWFsJyB2YWx1ZXMgYW5kIHZhbHVlcyBhcm91bmQgMCwKLSAgICogd2hpY2ggc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBvdXIgcHVycG9zZXMgaGVyZQotICAgKiBGSVhNRTogbWF5YmUgYWRkIHRoaXMgdG8gZ3N0X3ZhbHVlX2NvbXBhcmVfZG91YmxlKCkgPyAqLwotICByZXR1cm4gKGZhYnMgKGQxIC0gZDIpIDwgMC4wMDAwMDAxKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfaXNfZXF1YWw6Ci0gKiBAbGlzdDE6IGEgI0dzdFRhZ0xpc3QuCi0gKiBAbGlzdDI6IGEgI0dzdFRhZ0xpc3QuCi0gKgotICogQ2hlY2tzIGlmIHRoZSB0d28gZ2l2ZW4gdGFnbGlzdHMgYXJlIGVxdWFsLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB0YWdsaXN0cyBhcmUgZXF1YWwsIG90aGVyd2lzZSAlRkFMU0UKLSAqLwotZ2Jvb2xlYW4KLWdzdF90YWdfbGlzdF9pc19lcXVhbCAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QxLCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdDIpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqczEsICpzMjsKLSAgZ2ludCBudW1fZmllbGRzMSwgbnVtX2ZpZWxkczIsIGk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdDEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QyKSwgRkFMU0UpOwotCi0gIC8qIHdlIGRvbid0IGp1c3QgdXNlIGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwoKSBoZXJlIHNvIHdlIGNhbiBhZGQgc29tZQotICAgKiB0b2xlcmFuY2UgZm9yIGRvdWJsZXMsIHRob3VnaCBtYXliZSB3ZSBzaG91bGQganVzdCBhZGQgdGhhdCB0bwotICAgKiBnc3RfdmFsdWVfY29tcGFyZV9kb3VibGUoKSBhcyB3ZWxsPyAqLwotICBzMSA9IEdTVF9UQUdfTElTVF9TVFJVQ1RVUkUgKGxpc3QxKTsKLSAgczIgPSBHU1RfVEFHX0xJU1RfU1RSVUNUVVJFIChsaXN0Mik7Ci0KLSAgbnVtX2ZpZWxkczEgPSBnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzMSk7Ci0gIG51bV9maWVsZHMyID0gZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAoczIpOwotCi0gIGlmIChudW1fZmllbGRzMSAhPSBudW1fZmllbGRzMikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9maWVsZHMxOyBpKyspIHsKLSAgICBjb25zdCBHVmFsdWUgKnZhbHVlMSwgKnZhbHVlMjsKLSAgICBjb25zdCBnY2hhciAqdGFnX25hbWU7Ci0KLSAgICB0YWdfbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgKHMxLCBpKTsKLSAgICB2YWx1ZTEgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoczEsIHRhZ19uYW1lKTsKLSAgICB2YWx1ZTIgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoczIsIHRhZ19uYW1lKTsKLQotICAgIGlmICh2YWx1ZTIgPT0gTlVMTCkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGlmICghZ3N0X3RhZ19saXN0X2ZpZWxkc19lcXVhbCAodmFsdWUxLCB2YWx1ZTIpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFRhZ0xpc3QgKmxpc3Q7Ci0gIEdzdFRhZ01lcmdlTW9kZSBtb2RlOwotfQotR3N0VGFnQ29weURhdGE7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGFnX2xpc3RfYWRkX3ZhbHVlX2ludGVybmFsIChHc3RUYWdMaXN0ICogdGFnX2xpc3QsIEdzdFRhZ01lcmdlTW9kZSBtb2RlLAotICAgIGNvbnN0IGdjaGFyICogdGFnLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR3N0VGFnSW5mbyAqIGluZm8pCi17Ci0gIEdzdFN0cnVjdHVyZSAqbGlzdCA9IEdTVF9UQUdfTElTVF9TVFJVQ1RVUkUgKHRhZ19saXN0KTsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTI7Ci0gIEdRdWFyayB0YWdfcXVhcms7Ci0KLSAgaWYgKGluZm8gPT0gTlVMTCkgewotICAgIGluZm8gPSBnc3RfdGFnX2xvb2t1cCAodGFnKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoaW5mbyA9PSBOVUxMKSkgewotICAgICAgZ193YXJuaW5nICgidW5rbm93biB0YWcgJyVzJyIsIHRhZyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFHX1ZBTFVFX0hPTERTICh2YWx1ZSwgaW5mby0+dHlwZSkgJiYKLSAgICAgICAgICAhR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlKSkpIHsKLSAgICBnX3dhcm5pbmcgKCJ0YWcgJyVzJyBzaG91bGQgaG9sZCB2YWx1ZSBvZiB0eXBlICclcycsIGJ1dCB2YWx1ZSBvZiAiCi0gICAgICAgICJ0eXBlICclcycgcGFzc2VkIiwgaW5mby0+bmljaywgZ190eXBlX25hbWUgKGluZm8tPnR5cGUpLAotICAgICAgICBnX3R5cGVfbmFtZSAoR19WQUxVRV9UWVBFICh2YWx1ZSkpKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICB0YWdfcXVhcmsgPSBpbmZvLT5uYW1lX3F1YXJrOwotCi0gIGlmIChpbmZvLT5tZXJnZV9mdW5jCi0gICAgICAmJiAodmFsdWUyID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKGxpc3QsIHRhZ19xdWFyaykpICE9IE5VTEwpIHsKLSAgICBHVmFsdWUgZGVzdCA9IHsgMCwgfTsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgICAgY2FzZSBHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMOgotICAgICAgY2FzZSBHU1RfVEFHX01FUkdFX1JFUExBQ0U6Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChsaXN0LCB0YWdfcXVhcmssIHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfUFJFUEVORDoKLSAgICAgICAgaWYgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZTIpICYmICFHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUpKQotICAgICAgICAgIGdzdF92YWx1ZV9saXN0X3ByZXBlbmRfdmFsdWUgKChHVmFsdWUgKikgdmFsdWUyLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGdzdF92YWx1ZV9saXN0X21lcmdlICgmZGVzdCwgdmFsdWUsIHZhbHVlMik7Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChsaXN0LCB0YWdfcXVhcmssICZkZXN0KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1RBR19NRVJHRV9BUFBFTkQ6Ci0gICAgICAgIGlmIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUyKSAmJiAhR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlKSkKLSAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKChHVmFsdWUgKikgdmFsdWUyLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGdzdF92YWx1ZV9saXN0X21lcmdlICgmZGVzdCwgdmFsdWUyLCB2YWx1ZSk7Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChsaXN0LCB0YWdfcXVhcmssICZkZXN0KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1RBR19NRVJHRV9LRUVQOgotICAgICAgY2FzZSBHU1RfVEFHX01FUkdFX0tFRVBfQUxMOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfQVBQRU5EOgotICAgICAgY2FzZSBHU1RfVEFHX01FUkdFX0tFRVA6Ci0gICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAobGlzdCwgdGFnX3F1YXJrKSAhPSBOVUxMKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGNhc2UgR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTDoKLSAgICAgIGNhc2UgR1NUX1RBR19NRVJHRV9SRVBMQUNFOgotICAgICAgY2FzZSBHU1RfVEFHX01FUkdFX1BSRVBFTkQ6Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChsaXN0LCB0YWdfcXVhcmssIHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9UQUdfTUVSR0VfS0VFUF9BTEw6Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90YWdfbGlzdF9jb3B5X2ZvcmVhY2ggKEdRdWFyayB0YWdfcXVhcmssIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0VGFnQ29weURhdGEgKmNvcHkgPSAoR3N0VGFnQ29weURhdGEgKikgdXNlcl9kYXRhOwotICBjb25zdCBnY2hhciAqdGFnOwotCi0gIHRhZyA9IGdfcXVhcmtfdG9fc3RyaW5nICh0YWdfcXVhcmspOwotICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlX2ludGVybmFsIChjb3B5LT5saXN0LCBjb3B5LT5tb2RlLCB0YWcsIHZhbHVlLCBOVUxMKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfaW5zZXJ0OgotICogQGludG86IGxpc3QgdG8gbWVyZ2UgaW50bwotICogQGZyb206IGxpc3QgdG8gbWVyZ2UgZnJvbQotICogQG1vZGU6IHRoZSBtb2RlIHRvIHVzZQotICoKLSAqIEluc2VydHMgdGhlIHRhZ3Mgb2YgdGhlIEBmcm9tIGxpc3QgaW50byB0aGUgZmlyc3QgbGlzdCB1c2luZyB0aGUgZ2l2ZW4gbW9kZS4KLSAqLwotdm9pZAotZ3N0X3RhZ19saXN0X2luc2VydCAoR3N0VGFnTGlzdCAqIGludG8sIGNvbnN0IEdzdFRhZ0xpc3QgKiBmcm9tLAotICAgIEdzdFRhZ01lcmdlTW9kZSBtb2RlKQotewotICBHc3RUYWdDb3B5RGF0YSBkYXRhOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAoaW50bykpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdGFnX2xpc3RfaXNfd3JpdGFibGUgKGludG8pKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChmcm9tKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOwotCi0gIGRhdGEubGlzdCA9IGludG87Ci0gIGRhdGEubW9kZSA9IG1vZGU7Ci0gIGlmIChtb2RlID09IEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwpIHsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzIChHU1RfVEFHX0xJU1RfU1RSVUNUVVJFIChpbnRvKSk7Ci0gIH0KLSAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChHU1RfVEFHX0xJU1RfU1RSVUNUVVJFIChmcm9tKSwKLSAgICAgIGdzdF90YWdfbGlzdF9jb3B5X2ZvcmVhY2gsICZkYXRhKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfbWVyZ2U6Ci0gKiBAbGlzdDE6IChhbGxvdy1ub25lKTogZmlyc3QgbGlzdCB0byBtZXJnZQotICogQGxpc3QyOiAoYWxsb3ctbm9uZSk6IHNlY29uZCBsaXN0IHRvIG1lcmdlCi0gKiBAbW9kZTogdGhlIG1vZGUgdG8gdXNlCi0gKgotICogTWVyZ2VzIHRoZSB0d28gZ2l2ZW4gbGlzdHMgaW50byBhIG5ldyBsaXN0LiBJZiBvbmUgb2YgdGhlIGxpc3RzIGlzICVOVUxMLCBhCi0gKiBjb3B5IG9mIHRoZSBvdGhlciBpcyByZXR1cm5lZC4gSWYgYm90aCBsaXN0cyBhcmUgJU5VTEwsICVOVUxMIGlzIHJldHVybmVkLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF90YWdfbGlzdF91bnJlZgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgbmV3IGxpc3QKLSAqLwotR3N0VGFnTGlzdCAqCi1nc3RfdGFnX2xpc3RfbWVyZ2UgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0MSwgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QyLAotICAgIEdzdFRhZ01lcmdlTW9kZSBtb2RlKQotewotICBHc3RUYWdMaXN0ICpsaXN0MV9jcDsKLSAgY29uc3QgR3N0VGFnTGlzdCAqbGlzdDJfY3A7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxpc3QxID09IE5VTEwgfHwgR1NUX0lTX1RBR19MSVNUIChsaXN0MSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobGlzdDIgPT0gTlVMTCB8fCBHU1RfSVNfVEFHX0xJU1QgKGxpc3QyKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVEFHX01PREVfSVNfVkFMSUQgKG1vZGUpLCBOVUxMKTsKLQotICAvKiBub3RoaW5nIHRvIG1lcmdlICovCi0gIGlmICghbGlzdDEgJiYgIWxpc3QyKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvKiBjcmVhdGUgZW1wdHkgbGlzdCwgd2UgbmVlZCB0byBkbyB0aGlzIHRvIGNvcnJlY3RseSBoYW5kbGluZyBtZXJnZSBtb2RlcyAqLwotICBsaXN0MV9jcCA9IChsaXN0MSkgPyBnc3RfdGFnX2xpc3RfY29weSAobGlzdDEpIDogZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgbGlzdDJfY3AgPSAobGlzdDIpID8gbGlzdDIgOiBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gIGdzdF90YWdfbGlzdF9pbnNlcnQgKGxpc3QxX2NwLCBsaXN0Ml9jcCwgbW9kZSk7Ci0KLSAgaWYgKCFsaXN0MikKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKChHc3RUYWdMaXN0ICopIGxpc3QyX2NwKTsKLQotICByZXR1cm4gbGlzdDFfY3A7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZToKLSAqIEBsaXN0OiBhIHRhZ2xpc3QKLSAqIEB0YWc6IHRoZSB0YWcgdG8gcXVlcnkKLSAqCi0gKiBDaGVja3MgaG93IG1hbnkgdmFsdWUgYXJlIHN0b3JlZCBpbiB0aGlzIHRhZyBsaXN0IGZvciB0aGUgZ2l2ZW4gdGFnLgotICoKLSAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgdGFncyBzdG9yZWQKLSAqLwotZ3VpbnQKLWdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LCBjb25zdCBnY2hhciAqIHRhZykKLXsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSwgMCk7Ci0KLSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoR1NUX1RBR19MSVNUX1NUUlVDVFVSRSAobGlzdCksIHRhZyk7Ci0gIGlmICh2YWx1ZSA9PSBOVUxMKQotICAgIHJldHVybiAwOwotICBpZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkgIT0gR1NUX1RZUEVfTElTVCkKLSAgICByZXR1cm4gMTsKLQotICByZXR1cm4gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHZhbHVlKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfYWRkOgotICogQGxpc3Q6IGxpc3QgdG8gc2V0IHRhZ3MgaW4KLSAqIEBtb2RlOiB0aGUgbW9kZSB0byB1c2UKLSAqIEB0YWc6IHRhZwotICogQC4uLjogJU5VTEwtdGVybWluYXRlZCBsaXN0IG9mIHZhbHVlcyB0byBzZXQKLSAqCi0gKiBTZXRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS4KLSAqLwotdm9pZAotZ3N0X3RhZ19saXN0X2FkZCAoR3N0VGFnTGlzdCAqIGxpc3QsIEdzdFRhZ01lcmdlTW9kZSBtb2RlLCBjb25zdCBnY2hhciAqIHRhZywKLSAgICAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlIChsaXN0KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOwotICBnX3JldHVybl9pZl9mYWlsICh0YWcgIT0gTlVMTCk7Ci0KLSAgdmFfc3RhcnQgKGFyZ3MsIHRhZyk7Ci0gIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0IChsaXN0LCBtb2RlLCB0YWcsIGFyZ3MpOwotICB2YV9lbmQgKGFyZ3MpOwotfQotCi0vKioKLSAqIGdzdF90YWdfbGlzdF9hZGRfdmFsdWVzOgotICogQGxpc3Q6IGxpc3QgdG8gc2V0IHRhZ3MgaW4KLSAqIEBtb2RlOiB0aGUgbW9kZSB0byB1c2UKLSAqIEB0YWc6IHRhZwotICogQC4uLjogR1ZhbHVlcyB0byBzZXQKLSAqCi0gKiBTZXRzIHRoZSBHVmFsdWVzIGZvciB0aGUgZ2l2ZW4gdGFncyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUuCi0gKi8KLXZvaWQKLWdzdF90YWdfbGlzdF9hZGRfdmFsdWVzIChHc3RUYWdMaXN0ICogbGlzdCwgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdGFnX2xpc3RfaXNfd3JpdGFibGUgKGxpc3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRhZyAhPSBOVUxMKTsKLQotICB2YV9zdGFydCAoYXJncywgdGFnKTsKLSAgZ3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzIChsaXN0LCBtb2RlLCB0YWcsIGFyZ3MpOwotICB2YV9lbmQgKGFyZ3MpOwotfQotCi0vKioKLSAqIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0OgotICogQGxpc3Q6IGxpc3QgdG8gc2V0IHRhZ3MgaW4KLSAqIEBtb2RlOiB0aGUgbW9kZSB0byB1c2UKLSAqIEB0YWc6IHRhZwotICogQHZhcl9hcmdzOiB0YWcgLyB2YWx1ZSBwYWlycyB0byBzZXQKLSAqCi0gKiBTZXRzIHRoZSB2YWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS4KLSAqLwotdm9pZAotZ3N0X3RhZ19saXN0X2FkZF92YWxpc3QgKEdzdFRhZ0xpc3QgKiBsaXN0LCBHc3RUYWdNZXJnZU1vZGUgbW9kZSwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgdmFfbGlzdCB2YXJfYXJncykKLXsKLSAgR3N0VGFnSW5mbyAqaW5mbzsKLSAgZ2NoYXIgKmVycm9yID0gTlVMTDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlIChsaXN0KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOwotICBnX3JldHVybl9pZl9mYWlsICh0YWcgIT0gTlVMTCk7Ci0KLSAgaWYgKG1vZGUgPT0gR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCkgewotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMgKEdTVF9UQUdfTElTVF9TVFJVQ1RVUkUgKGxpc3QpKTsKLSAgfQotCi0gIHdoaWxlICh0YWcgIT0gTlVMTCkgewotICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKLQotICAgIGluZm8gPSBnc3RfdGFnX2xvb2t1cCAodGFnKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoaW5mbyA9PSBOVUxMKSkgewotICAgICAgZ193YXJuaW5nICgidW5rbm93biB0YWcgJyVzJyIsIHRhZyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIEdfVkFMVUVfQ09MTEVDVF9JTklUICgmdmFsdWUsIGluZm8tPnR5cGUsIHZhcl9hcmdzLCAwLCAmZXJyb3IpOwotICAgIGlmIChlcnJvcikgewotICAgICAgZ193YXJuaW5nICgiJXM6ICVzIiwgR19TVFJMT0MsIGVycm9yKTsKLSAgICAgIGdfZnJlZSAoZXJyb3IpOwotICAgICAgLyogd2UgcHVycG9zZWx5IGxlYWsgdGhlIHZhbHVlIGhlcmUsIGl0IG1pZ2h0IG5vdCBiZQotICAgICAgICogaW4gYSBzYW5lIHN0YXRlIGlmIGFuIGVycm9yIGNvbmRpdGlvbiBvY2NvdXJlZAotICAgICAgICovCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIEZhY2lsaXRhdGUgR3N0QnVmZmVyIC0+IEdzdFNhbXBsZSB0cmFuc2l0aW9uICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKGluZm8tPnR5cGUgPT0gR1NUX1RZUEVfU0FNUExFICYmCi0gICAgICAgICAgICAhR1NUX0lTX1NBTVBMRSAodmFsdWUuZGF0YVswXS52X3BvaW50ZXIpKSkgewotICAgICAgZ193YXJuaW5nICgiRXhwZWN0ZWQgR3N0U2FtcGxlIGFyZ3VtZW50IGZvciB0YWcgJyVzJyIsIHRhZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWVfaW50ZXJuYWwgKGxpc3QsIG1vZGUsIHRhZywgJnZhbHVlLCBpbmZvKTsKLSAgICB9Ci0gICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLSAgICB0YWcgPSB2YV9hcmcgKHZhcl9hcmdzLCBnY2hhciAqKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlczoKLSAqIEBsaXN0OiBsaXN0IHRvIHNldCB0YWdzIGluCi0gKiBAbW9kZTogdGhlIG1vZGUgdG8gdXNlCi0gKiBAdGFnOiB0YWcKLSAqIEB2YXJfYXJnczogdGFnIC8gR1ZhbHVlIHBhaXJzIHRvIHNldAotICoKLSAqIFNldHMgdGhlIEdWYWx1ZXMgZm9yIHRoZSBnaXZlbiB0YWdzIHVzaW5nIHRoZSBzcGVjaWZpZWQgbW9kZS4KLSAqLwotdm9pZAotZ3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzIChHc3RUYWdMaXN0ICogbGlzdCwgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIHZhX2xpc3QgdmFyX2FyZ3MpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdGFnX2xpc3RfaXNfd3JpdGFibGUgKGxpc3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRhZyAhPSBOVUxMKTsKLQotICBpZiAobW9kZSA9PSBHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkcyAoR1NUX1RBR19MSVNUX1NUUlVDVFVSRSAobGlzdCkpOwotICB9Ci0KLSAgd2hpbGUgKHRhZyAhPSBOVUxMKSB7Ci0gICAgR3N0VGFnSW5mbyAqaW5mbzsKLQotICAgIGluZm8gPSBnc3RfdGFnX2xvb2t1cCAodGFnKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoaW5mbyA9PSBOVUxMKSkgewotICAgICAgZ193YXJuaW5nICgidW5rbm93biB0YWcgJyVzJyIsIHRhZyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWVfaW50ZXJuYWwgKGxpc3QsIG1vZGUsIHRhZywgdmFfYXJnICh2YXJfYXJncywKLSAgICAgICAgICAgIEdWYWx1ZSAqKSwgaW5mbyk7Ci0gICAgdGFnID0gdmFfYXJnICh2YXJfYXJncywgZ2NoYXIgKik7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlOgotICogQGxpc3Q6IGxpc3QgdG8gc2V0IHRhZ3MgaW4KLSAqIEBtb2RlOiB0aGUgbW9kZSB0byB1c2UKLSAqIEB0YWc6IHRhZwotICogQHZhbHVlOiBHVmFsdWUgZm9yIHRoaXMgdGFnCi0gKgotICogU2V0cyB0aGUgR1ZhbHVlIGZvciBhIGdpdmVuIHRhZyB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGUuCi0gKi8KLXZvaWQKLWdzdF90YWdfbGlzdF9hZGRfdmFsdWUgKEdzdFRhZ0xpc3QgKiBsaXN0LCBHc3RUYWdNZXJnZU1vZGUgbW9kZSwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdGFnX2xpc3RfaXNfd3JpdGFibGUgKGxpc3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRhZyAhPSBOVUxMKTsKLQotICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlX2ludGVybmFsIChsaXN0LCBtb2RlLCB0YWcsIHZhbHVlLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZzoKLSAqIEBsaXN0OiBsaXN0IHRvIHJlbW92ZSB0YWcgZnJvbQotICogQHRhZzogdGFnIHRvIHJlbW92ZQotICoKLSAqIFJlbW92ZXMgdGhlIGdpdmVuIHRhZyBmcm9tIHRoZSB0YWdsaXN0LgotICovCi12b2lkCi1nc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZyAoR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlIChsaXN0KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRhZyAhPSBOVUxMKTsKLQotICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAoR1NUX1RBR19MSVNUX1NUUlVDVFVSRSAobGlzdCksIHRhZyk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFRhZ0ZvcmVhY2hGdW5jIGZ1bmM7Ci0gIGNvbnN0IEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBncG9pbnRlciBkYXRhOwotfQotVGFnRm9yZWFjaERhdGE7Ci0KLXN0YXRpYyBpbnQKLXN0cnVjdHVyZV9mb3JlYWNoX3dyYXBwZXIgKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBUYWdGb3JlYWNoRGF0YSAqZGF0YSA9IChUYWdGb3JlYWNoRGF0YSAqKSB1c2VyX2RhdGE7Ci0KLSAgZGF0YS0+ZnVuYyAoZGF0YS0+dGFnX2xpc3QsIGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZF9pZCksIGRhdGEtPmRhdGEpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZm9yZWFjaDoKLSAqIEBsaXN0OiBsaXN0IHRvIGl0ZXJhdGUgb3ZlcgotICogQGZ1bmM6IChzY29wZSBjYWxsKTogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIHRhZwotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIHNwZWNpZmllZCBkYXRhCi0gKgotICogQ2FsbHMgdGhlIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNoIHRhZyBpbnNpZGUgdGhlIHRhZyBsaXN0LiBOb3RlIHRoYXQgaWYgdGhlcmUKLSAqIGlzIG5vIHRhZywgdGhlIGZ1bmN0aW9uIHdvbid0IGJlIGNhbGxlZCBhdCBhbGwuCi0gKi8KLXZvaWQKLWdzdF90YWdfbGlzdF9mb3JlYWNoIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgR3N0VGFnRm9yZWFjaEZ1bmMgZnVuYywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIFRhZ0ZvcmVhY2hEYXRhIGRhdGE7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBR19MSVNUIChsaXN0KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZ1bmMgIT0gTlVMTCk7Ci0KLSAgZGF0YS5mdW5jID0gZnVuYzsKLSAgZGF0YS50YWdfbGlzdCA9IGxpc3Q7Ci0gIGRhdGEuZGF0YSA9IHVzZXJfZGF0YTsKLSAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChHU1RfVEFHX0xJU1RfU1RSVUNUVVJFIChsaXN0KSwKLSAgICAgIHN0cnVjdHVyZV9mb3JlYWNoX3dyYXBwZXIsICZkYXRhKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4OgotICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QKLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKLSAqCi0gKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KLSAqIGxpc3QuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChudWxsYWJsZSk6IFRoZSBHVmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQKLSAqICAgICAgICAgIGVudHJ5IG9yICVOVUxMIGlmIHRoZSB0YWcgd2Fzbid0IGF2YWlsYWJsZSBvciB0aGUgdGFnCi0gKiAgICAgICAgICBkb2Vzbid0IGhhdmUgYXMgbWFueSBlbnRyaWVzCi0gKi8KLWNvbnN0IEdWYWx1ZSAqCi1nc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsCi0gICAgZ3VpbnQgaW5kZXgpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGFnICE9IE5VTEwsIE5VTEwpOwotCi0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKEdTVF9UQUdfTElTVF9TVFJVQ1RVUkUgKGxpc3QpLCB0YWcpOwotICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBpZiAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlKSkgewotICAgIGlmIChpbmRleCA+PSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodmFsdWUpKQotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsdWUsIGluZGV4KTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoaW5kZXggPiAwKQotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWU6Ci0gKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogdW5pbml0aWFsaXplZCAjR1ZhbHVlIHRvIGNvcHkgaW50bwotICogQGxpc3Q6IGxpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQotICogQHRhZzogdGFnIHRvIHJlYWQgb3V0Ci0gKgotICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwKLSAqIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZAotICogd2l0aCB0aGUgdGFnLgotICogWW91IG11c3QgZ192YWx1ZV91bnNldCgpIHRoZSB2YWx1ZSBhZnRlciB1c2UuCi0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBnY2hhciAqIHRhZykKLXsKLSAgY29uc3QgR1ZhbHVlICpzcmM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfVkFMVUVfVFlQRSAoZGVzdCkgPT0gMCwgRkFMU0UpOwotCi0gIHNyYyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChHU1RfVEFHX0xJU1RfU1RSVUNUVVJFIChsaXN0KSwgdGFnKTsKLSAgaWYgKCFzcmMpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKHNyYykgPT0gR1NUX1RZUEVfTElTVCkgewotICAgIEdzdFRhZ0luZm8gKmluZm8gPSBnc3RfdGFnX2xvb2t1cCAodGFnKTsKLQotICAgIGlmICghaW5mbykKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8qIG11c3QgYmUgdGhlcmUgb3IgbGlzdHMgYXJlbid0IGFsbG93ZWQgKi8KLSAgICBnX2Fzc2VydCAoaW5mby0+bWVyZ2VfZnVuYyk7Ci0gICAgaW5mby0+bWVyZ2VfZnVuYyAoZGVzdCwgc3JjKTsKLSAgfSBlbHNlIHsKLSAgICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdfVkFMVUVfVFlQRSAoc3JjKSk7Ci0gICAgZ192YWx1ZV9jb3B5IChzcmMsIGRlc3QpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBGSVhNRSAyLjA6IHRoaXMgd2hvbGUgbWVyZ2UgZnVuY3Rpb24gYnVzaW5lc3MgaXMgb3ZlcmRlc2lnbmVkLCBhbmQgdGhlCi0gKiBfZ2V0X2ZvbygpIEFQSSBpcyBtaXNsZWFkaW5nIGFzIHdlbGwgLSBob3cgbWFueSBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHdpbGwKLSAqIGV4cGVjdCBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAobGlzdCwgR1NUX1RBR19BUlRJU1QsICZ2YWwpIG1pZ2h0IHJldHVybiBhCi0gKiBzdHJpbmcgd2l0aCBtdWx0aXBsZSBjb21tYS1zZXBhcmF0ZWQgYXJ0aXN0cz8gX2dldF9mb28oKSBzaG91bGQganVzdCBiZQotICogYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBfZ2V0X2Zvb19pbmRleCAobGlzdCwgdGFnLCAwLCAmdmFsKSwKLSAqIHN1cHBsZW1lbnRlZCBieSBhIHNwZWNpYWwgX3RhZ19saXN0X2dldF9zdHJpbmdfbWVyZ2VkKCkgZnVuY3Rpb24gaWYgbmVlZGVkCi0gKiAodW5sZXNzIHNvbWVvbmUgY2FuIGFjdHVhbGx5IHRoaW5rIG9mIHJlYWwgdXNlIGNhc2VzIHdoZXJlIHRoZSBtZXJnZQotICogZnVuY3Rpb24gaXMgbm90ICd1c2UgZmlyc3QnIGZvciBub24tc3RyaW5ncyBhbmQgbWVyZ2UgZm9yIHN0cmluZ3MpICovCi0KLS8qKioqKiBldmlsIG1hY3JvcyB0byBnZXQgYWxsIHRoZSBnc3RfdGFnX2xpc3RfZ2V0XyooKSBmdW5jdGlvbnMgcmlnaHQgKioqKiovCi0KLSNkZWZpbmUgVEFHX01FUkdFX0ZVTkNTKG5hbWUsdHlwZSxyZXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWdzdF90YWdfbGlzdF9nZXRfICMjIG5hbWUgKGNvbnN0IEdzdFRhZ0xpc3QgKmxpc3QsIGNvbnN0IGdjaGFyICp0YWcsICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgKnZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR1ZhbHVlIHYgPSB7IDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCksIEZBTFNFKTsgICAgICAgICAgICAgICAgIFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBGQUxTRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKCFnc3RfdGFnX2xpc3RfY29weV92YWx1ZSAoJnYsIGxpc3QsIHRhZykpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKnZhbHVlID0gQ09QWV9GVU5DIChnX3ZhbHVlX2dldF8gIyMgbmFtZSAoJnYpKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ192YWx1ZV91bnNldCAoJnYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWdzdF90YWdfbGlzdF9nZXRfICMjIG5hbWUgIyMgX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICpsaXN0LCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdGFnLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBpbmRleCwgdHlwZSAqdmFsdWUpICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY29uc3QgR1ZhbHVlICp2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCksIEZBTFNFKTsgICAgICAgICAgICAgICAgIFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBGQUxTRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwsIEZBTFNFKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKCh2ID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBpbmRleCkpID09IE5VTEwpICAgIFwKLSAgICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKnZhbHVlID0gQ09QWV9GVU5DIChnX3ZhbHVlX2dldF8gIyMgbmFtZSAodikpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBDT1BZX0ZVTkMgLyoqLwotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW46Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0Ci0gKgotICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKLSAqIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCi0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCi0gKi8KLS8qKgotICogZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuX2luZGV4OgotICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQotICogQHRhZzogdGFnIHRvIHJlYWQgb3V0Ci0gKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAotICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKLSAqCi0gKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KLSAqIGxpc3QuCi0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCi0gKi8KLVRBR19NRVJHRV9GVU5DUyAoYm9vbGVhbiwgZ2Jvb2xlYW4sIFRSVUUpOwotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X2ludDoKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKLSAqCi0gKiBDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcwotICogaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X2ludF9pbmRleDoKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKLSAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0Ci0gKgotICogR2V0cyB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi0gKiBsaXN0LgotICoKLSAqIFJldHVybnM6ICVUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsICVGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLSAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgotICovCi1UQUdfTUVSR0VfRlVOQ1MgKGludCwgZ2ludCwgVFJVRSk7Ci0vKioKLSAqIGdzdF90YWdfbGlzdF9nZXRfdWludDoKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQHZhbHVlOiAob3V0KTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKLSAqCi0gKiBDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBtZXJnaW5nIG11bHRpcGxlIHZhbHVlcwotICogaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXg6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0Ci0gKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAotICoKLSAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotICogbGlzdC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotVEFHX01FUkdFX0ZVTkNTICh1aW50LCBndWludCwgVFJVRSk7Ci0vKioKLSAqIGdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXg6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0Ci0gKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAotICoKLSAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotICogbGlzdC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotVEFHX01FUkdFX0ZVTkNTIChpbnQ2NCwgZ2ludDY0LCBUUlVFKTsKLS8qKgotICogZ3N0X3RhZ19saXN0X2dldF91aW50NjQ6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0Ci0gKgotICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKLSAqIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCi0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCi0gKi8KLS8qKgotICogZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXg6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0Ci0gKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAotICoKLSAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotICogbGlzdC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotVEFHX01FUkdFX0ZVTkNTICh1aW50NjQsIGd1aW50NjQsIFRSVUUpOwotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0OgotICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQotICogQHRhZzogdGFnIHRvIHJlYWQgb3V0Ci0gKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAotICoKLSAqIENvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzCi0gKiBpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLgotICoKLSAqIFJldHVybnM6ICVUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsICVGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLSAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgotICovCi0vKioKLSAqIGdzdF90YWdfbGlzdF9nZXRfZmxvYXRfaW5kZXg6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0Ci0gKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAotICoKLSAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotICogbGlzdC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotVEFHX01FUkdFX0ZVTkNTIChmbG9hdCwgZ2Zsb2F0LCBUUlVFKTsKLS8qKgotICogZ3N0X3RhZ19saXN0X2dldF9kb3VibGU6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEB2YWx1ZTogKG91dCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0Ci0gKgotICogQ29waWVzIHRoZSBjb250ZW50cyBmb3IgdGhlIGdpdmVuIHRhZyBpbnRvIHRoZSB2YWx1ZSwgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMKLSAqIGludG8gb25lIGlmIG11bHRpcGxlIHZhbHVlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuCi0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCi0gKi8KLS8qKgotICogZ3N0X3RhZ19saXN0X2dldF9kb3VibGVfaW5kZXg6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0Ci0gKiBAdmFsdWU6IChvdXQpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAotICoKLSAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotICogbGlzdC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotVEFHX01FUkdFX0ZVTkNTIChkb3VibGUsIGdkb3VibGUsIFRSVUUpOwotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXI6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEB2YWx1ZTogKG91dCkgKHRyYW5zZmVyIG5vbmUpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAotICoKLSAqIENvcGllcyB0aGUgY29udGVudHMgZm9yIHRoZSBnaXZlbiB0YWcgaW50byB0aGUgdmFsdWUsIG1lcmdpbmcgbXVsdGlwbGUgdmFsdWVzCi0gKiBpbnRvIG9uZSBpZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLgotICoKLSAqIFJldHVybnM6ICVUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsICVGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLSAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgotICovCi0vKioKLSAqIGdzdF90YWdfbGlzdF9nZXRfcG9pbnRlcl9pbmRleDoKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKLSAqIEB2YWx1ZTogKG91dCkgKHRyYW5zZmVyIG5vbmUpOiBsb2NhdGlvbiBmb3IgdGhlIHJlc3VsdAotICoKLSAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotICogbGlzdC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotVEFHX01FUkdFX0ZVTkNTIChwb2ludGVyLCBncG9pbnRlciwgKCp2YWx1ZSAhPSBOVUxMKSk7Ci0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIgKgotX2dzdF9zdHJkdXAwIChjb25zdCBnY2hhciAqIHMpCi17Ci0gIGlmIChzID09IE5VTEwgfHwgKnMgPT0gJ1wwJykKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gZ19zdHJkdXAgKHMpOwotfQotCi0jdW5kZWYgQ09QWV9GVU5DCi0jZGVmaW5lIENPUFlfRlVOQyBfZ3N0X3N0cmR1cDAKLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZzoKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKLSAqCi0gKiBDb3BpZXMgdGhlIGNvbnRlbnRzIGZvciB0aGUgZ2l2ZW4gdGFnIGludG8gdGhlIHZhbHVlLCBwb3NzaWJseSBtZXJnaW5nCi0gKiBtdWx0aXBsZSB2YWx1ZXMgaW50byBvbmUgaWYgbXVsdGlwbGUgdmFsdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhZy4KLSAqCi0gKiBVc2UgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggKGxpc3QsIHRhZywgMCwgdmFsdWUpIGlmIHlvdSB3YW50Ci0gKiB0byByZXRyaWV2ZSB0aGUgZmlyc3Qgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhZyB1bm1vZGlmaWVkLgotICoKLSAqIFRoZSByZXN1bHRpbmcgc3RyaW5nIGluIEB2YWx1ZSB3aWxsIGJlIGluIFVURi04IGVuY29kaW5nIGFuZCBzaG91bGQgYmUKLSAqIGZyZWVkIGJ5IHRoZSBjYWxsZXIgdXNpbmcgZ19mcmVlIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4gVGhlCi0gKiByZXR1cm5lZCBzdHJpbmcgaXMgYWxzbyBndWFyYW50ZWVkIHRvIGJlIG5vbi0lTlVMTCBhbmQgbm9uLWVtcHR5LgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQotICoKLSAqIFJldHVybnM6ICVUUlVFLCBpZiBhIHZhbHVlIHdhcyBjb3BpZWQsICVGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbiB0aGUKLSAqICAgICAgICAgICAgICBnaXZlbiBsaXN0LgotICovCi0vKioKLSAqIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4OgotICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQotICogQHRhZzogdGFnIHRvIHJlYWQgb3V0Ci0gKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAotICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKLSAqCi0gKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGF0IHRoZSBnaXZlbiBpbmRleCBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgZ2l2ZW4KLSAqIGxpc3QuCi0gKgotICogVGhlIHJlc3VsdGluZyBzdHJpbmcgaW4gQHZhbHVlIHdpbGwgYmUgaW4gVVRGLTggZW5jb2RpbmcgYW5kIHNob3VsZCBiZQotICogZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBnX2ZyZWUgd2hlbiBubyBsb25nZXIgbmVlZGVkLiBUaGUKLSAqIHJldHVybmVkIHN0cmluZyBpcyBhbHNvIGd1YXJhbnRlZWQgdG8gYmUgbm9uLSVOVUxMIGFuZCBub24tZW1wdHkuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCi0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIGxpc3QuCi0gKi8KLVRBR19NRVJHRV9GVU5DUyAoc3RyaW5nLCBnY2hhciAqLCAoKnZhbHVlICE9IE5VTEwpKTsKLQotLyoKLSAqRklYTUUgMi4wOiBJbnN0ZWFkIG9mIF9wZWVrIChub24tY29weSkgYW5kIF9nZXQgKGNvcHkpLCB3ZSBjb3VsZCBoYXZlCi0gKiAgICAgICAgICAgIF9nZXQgKG5vbi1jb3B5KSBhbmQgX2R1cCAoY29weSkgZm9yIHN0cmluZ3MsIHNlZW1zIG1vcmUKLSAqICAgICAgICAgICAgd2lkZWx5IHVzZWQKLSAqLwotLyoqCi0gKiBnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXg6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEBpbmRleDogbnVtYmVyIG9mIGVudHJ5IHRvIHJlYWQgb3V0Ci0gKiBAdmFsdWU6IChvdXQpICh0cmFuc2ZlciBub25lKTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKLSAqCi0gKiBQZWVrcyBhdCB0aGUgdmFsdWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi0gKiBsaXN0LgotICoKLSAqIFRoZSByZXN1bHRpbmcgc3RyaW5nIGluIEB2YWx1ZSB3aWxsIGJlIGluIFVURi04IGVuY29kaW5nIGFuZCBkb2Vzbid0IG5lZWQKLSAqIHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgYWxzbyBndWFyYW50ZWVkIHRvCi0gKiBiZSBub24tJU5VTEwgYW5kIG5vbi1lbXB0eS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgc2V0LCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleCAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50IGluZGV4LCBjb25zdCBnY2hhciAqKiB2YWx1ZSkKLXsKLSAgY29uc3QgR1ZhbHVlICp2OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmICgodiA9IGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKGxpc3QsIHRhZywgaW5kZXgpKSA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLSAgKnZhbHVlID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2KTsKLSAgcmV0dXJuICp2YWx1ZSAhPSBOVUxMICYmICoqdmFsdWUgIT0gJ1wwJzsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X2RhdGU6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEB2YWx1ZTogKG91dCBjYWxsZWUtYWxsb2NhdGVzKSAodHJhbnNmZXIgZnVsbCk6IGFkZHJlc3Mgb2YgYSBHRGF0ZSBwb2ludGVyCi0gKiAgICAgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvCi0gKgotICogQ29waWVzIHRoZSBmaXJzdCBkYXRlIGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSB0YWdsaXN0IGludG8gdGhlIHZhcmlhYmxlCi0gKiBwb2ludGVkIHRvIGJ5IEB2YWx1ZS4gRnJlZSB0aGUgZGF0ZSB3aXRoIGdfZGF0ZV9mcmVlKCkgd2hlbiBpdCBpcyBubyBsb25nZXIKLSAqIG5lZWRlZC4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnX2RhdGVfZnJlZQotICoKLSAqIFJldHVybnM6ICVUUlVFLCBpZiBhIGRhdGUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIGxpc3Qgb3IgaWYgaXQgd2FzICVOVUxMLgotICovCi1nYm9vbGVhbgotZ3N0X3RhZ19saXN0X2dldF9kYXRlIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsCi0gICAgR0RhdGUgKiogdmFsdWUpCi17Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmICghZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUgKCZ2LCBsaXN0LCB0YWcpKQotICAgIHJldHVybiBGQUxTRTsKLSAgKnZhbHVlID0gKEdEYXRlICopIGdfdmFsdWVfZHVwX2JveGVkICgmdik7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2KTsKLSAgcmV0dXJuICgqdmFsdWUgIT0gTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4OgotICogQGxpc3Q6IGEgI0dzdFRhZ0xpc3QgdG8gZ2V0IHRoZSB0YWcgZnJvbQotICogQHRhZzogdGFnIHRvIHJlYWQgb3V0Ci0gKiBAaW5kZXg6IG51bWJlciBvZiBlbnRyeSB0byByZWFkIG91dAotICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpICh0cmFuc2ZlciBmdWxsKTogbG9jYXRpb24gZm9yIHRoZSByZXN1bHQKLSAqCi0gKiBHZXRzIHRoZSBkYXRlIHRoYXQgaXMgYXQgdGhlIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gdGFnIGluIHRoZSBnaXZlbgotICogbGlzdCBhbmQgY29waWVzIGl0IGludG8gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgQHZhbHVlLiBGcmVlIHRoZSBkYXRlCi0gKiB3aXRoIGdfZGF0ZV9mcmVlKCkgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdfZGF0ZV9mcmVlCi0gKgotICogUmV0dXJuczogJVRSVUUsIGlmIGEgdmFsdWUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIGxpc3Qgb3IgaWYgaXQgd2FzICVOVUxMLgotICovCi1nYm9vbGVhbgotZ3N0X3RhZ19saXN0X2dldF9kYXRlX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgaW5kZXgsIEdEYXRlICoqIHZhbHVlKQotewotICBjb25zdCBHVmFsdWUgKnY7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQUdfTElTVCAobGlzdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRhZyAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKCh2ID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBpbmRleCkpID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotICAqdmFsdWUgPSAoR0RhdGUgKikgZ192YWx1ZV9kdXBfYm94ZWQgKHYpOwotICByZXR1cm4gKCp2YWx1ZSAhPSBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZToKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQHZhbHVlOiAob3V0IGNhbGxlZS1hbGxvY2F0ZXMpICh0cmFuc2ZlciBmdWxsKTogYWRkcmVzcyBvZiBhICNHc3REYXRlVGltZQotICogICAgIHBvaW50ZXIgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbnRvCi0gKgotICogQ29waWVzIHRoZSBmaXJzdCBkYXRldGltZSBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgdGFnbGlzdCBpbnRvIHRoZSB2YXJpYWJsZQotICogcG9pbnRlZCB0byBieSBAdmFsdWUuIFVucmVmIHRoZSBkYXRlIHdpdGggZ3N0X2RhdGVfdGltZV91bnJlZigpIHdoZW4KLSAqIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2RhdGVfdGltZV91bnJlZgotICoKLSAqIFJldHVybnM6ICVUUlVFLCBpZiBhIGRhdGV0aW1lIHdhcyBjb3BpZWQsICVGQUxTRSBpZiB0aGUgdGFnIGRpZG4ndCBleGlzdCBpbgotICogICAgICAgICAgICAgIHRoZSBnaXZlbiBsaXN0IG9yIGlmIGl0IHdhcyAlTlVMTC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsCi0gICAgR3N0RGF0ZVRpbWUgKiogdmFsdWUpCi17Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmICghZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUgKCZ2LCBsaXN0LCB0YWcpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAqdmFsdWUgPSAoR3N0RGF0ZVRpbWUgKikgZ192YWx1ZV9kdXBfYm94ZWQgKCZ2KTsKLSAgZ192YWx1ZV91bnNldCAoJnYpOwotICByZXR1cm4gKCp2YWx1ZSAhPSBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZV9pbmRleDoKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKLSAqIEB2YWx1ZTogKG91dCBjYWxsZWUtYWxsb2NhdGVzKSAodHJhbnNmZXIgZnVsbCk6IGxvY2F0aW9uIGZvciB0aGUgcmVzdWx0Ci0gKgotICogR2V0cyB0aGUgZGF0ZXRpbWUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi0gKiBsaXN0IGFuZCBjb3BpZXMgaXQgaW50byB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSBAdmFsdWUuIFVucmVmIHRoZSBkYXRldGltZQotICogd2l0aCBnc3RfZGF0ZV90aW1lX3VucmVmKCkgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9kYXRlX3RpbWVfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSB2YWx1ZSB3YXMgY29waWVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4gdGhlCi0gKiAgICAgICAgICAgICAgZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgJU5VTEwuCi0gKi8KLWdib29sZWFuCi1nc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZV9pbmRleCAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50IGluZGV4LCBHc3REYXRlVGltZSAqKiB2YWx1ZSkKLXsKLSAgY29uc3QgR1ZhbHVlICp2OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmICgodiA9IGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKGxpc3QsIHRhZywgaW5kZXgpKSA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLSAgKnZhbHVlID0gKEdzdERhdGVUaW1lICopIGdfdmFsdWVfZHVwX2JveGVkICh2KTsKLSAgcmV0dXJuICgqdmFsdWUgIT0gTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X2dldF9zYW1wbGU6Ci0gKiBAbGlzdDogYSAjR3N0VGFnTGlzdCB0byBnZXQgdGhlIHRhZyBmcm9tCi0gKiBAdGFnOiB0YWcgdG8gcmVhZCBvdXQKLSAqIEBzYW1wbGU6IChvdXQgY2FsbGVlLWFsbG9jYXRlcykgKHRyYW5zZmVyIGZ1bGwpOiBhZGRyZXNzIG9mIGEgR3N0U2FtcGxlCi0gKiAgICAgcG9pbnRlciB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8KLSAqCi0gKiBDb3BpZXMgdGhlIGZpcnN0IHNhbXBsZSBmb3IgdGhlIGdpdmVuIHRhZyBpbiB0aGUgdGFnbGlzdCBpbnRvIHRoZSB2YXJpYWJsZQotICogcG9pbnRlZCB0byBieSBAc2FtcGxlLiBGcmVlIHRoZSBzYW1wbGUgd2l0aCBnc3Rfc2FtcGxlX3VucmVmKCkgd2hlbiBpdCBpcwotICogbm8gbG9uZ2VyIG5lZWRlZC4gWW91IGNhbiByZXRyaWV2ZSB0aGUgYnVmZmVyIGZyb20gdGhlIHNhbXBsZSB1c2luZwotICogZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKCkgYW5kIHRoZSBhc3NvY2lhdGVkIGNhcHMgKGlmIGFueSkgd2l0aAotICogZ3N0X3NhbXBsZV9nZXRfY2FwcygpLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9zYW1wbGVfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSBzYW1wbGUgd2FzIHJldHVybmVkLCAlRkFMU0UgaWYgdGhlIHRhZyBkaWRuJ3QgZXhpc3QgaW4KLSAqICAgICAgICAgICAgICB0aGUgZ2l2ZW4gbGlzdCBvciBpZiBpdCB3YXMgJU5VTEwuCi0gKi8KLWdib29sZWFuCi1nc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZSAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLAotICAgIEdzdFNhbXBsZSAqKiBzYW1wbGUpCi17Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2FtcGxlICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoIWdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlICgmdiwgbGlzdCwgdGFnKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gICpzYW1wbGUgPSBnX3ZhbHVlX2R1cF9ib3hlZCAoJnYpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0gIHJldHVybiAoKnNhbXBsZSAhPSBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZV9pbmRleDoKLSAqIEBsaXN0OiBhICNHc3RUYWdMaXN0IHRvIGdldCB0aGUgdGFnIGZyb20KLSAqIEB0YWc6IHRhZyB0byByZWFkIG91dAotICogQGluZGV4OiBudW1iZXIgb2YgZW50cnkgdG8gcmVhZCBvdXQKLSAqIEBzYW1wbGU6IChvdXQgY2FsbGVlLWFsbG9jYXRlcykgKHRyYW5zZmVyIGZ1bGwpOiBhZGRyZXNzIG9mIGEgR3N0U2FtcGxlCi0gKiAgICAgcG9pbnRlciB2YXJpYWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0IGludG8KLSAqCi0gKiBHZXRzIHRoZSBzYW1wbGUgdGhhdCBpcyBhdCB0aGUgZ2l2ZW4gaW5kZXggZm9yIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGdpdmVuCi0gKiBsaXN0IGFuZCBjb3BpZXMgaXQgaW50byB0aGUgdmFyaWFibGUgcG9pbnRlZCB0byBieSBAc2FtcGxlLiBGcmVlIHRoZSBzYW1wbGUKLSAqIHdpdGggZ3N0X3NhbXBsZV91bnJlZigpIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gWW91IGNhbiByZXRyaWV2ZSB0aGUKLSAqIGJ1ZmZlciBmcm9tIHRoZSBzYW1wbGUgdXNpbmcgZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKCkgYW5kIHRoZSBhc3NvY2lhdGVkCi0gKiBjYXBzIChpZiBhbnkpIHdpdGggZ3N0X3NhbXBsZV9nZXRfY2FwcygpLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9zYW1wbGVfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSwgaWYgYSBzYW1wbGUgd2FzIGNvcGllZCwgJUZBTFNFIGlmIHRoZSB0YWcgZGlkbid0IGV4aXN0IGluIHRoZQotICogICAgICAgICAgICAgIGdpdmVuIGxpc3Qgb3IgaWYgaXQgd2FzICVOVUxMLgotICovCi1nYm9vbGVhbgotZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXggKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIGNvbnN0IGdjaGFyICogdGFnLCBndWludCBpbmRleCwgR3N0U2FtcGxlICoqIHNhbXBsZSkKLXsKLSAgY29uc3QgR1ZhbHVlICp2OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0YWcgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2FtcGxlICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoKHYgPSBnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4IChsaXN0LCB0YWcsIGluZGV4KSkgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gICpzYW1wbGUgPSBnX3ZhbHVlX2R1cF9ib3hlZCAodik7Ci0gIHJldHVybiAoKnNhbXBsZSAhPSBOVUxMKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3R0YWdsaXN0LmggYi9nc3QvZ3N0dGFnbGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGM1NDRiLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0YWdsaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDk1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotICoKLSAqIGdzdHRhZ2xpc3QuaDogSGVhZGVyIGZvciB0YWcgc3VwcG9ydAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9UQUdMSVNUX0hfXwotI2RlZmluZSBfX0dTVF9UQUdMSVNUX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGRhdGV0aW1lLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHNhbXBsZS5oPgotI2luY2x1ZGUgPGdzdC9nc3RidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvZ2xpYi1jb21wYXQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKioKLSAqIEdzdFRhZ01lcmdlTW9kZToKLSAqIEBHU1RfVEFHX01FUkdFX1VOREVGSU5FRDogdW5kZWZpbmVkIG1lcmdlIG1vZGUKLSAqIEBHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMOiByZXBsYWNlIGFsbCB0YWdzIChjbGVhciBsaXN0IGFuZCBhcHBlbmQpCi0gKiBAR1NUX1RBR19NRVJHRV9SRVBMQUNFOiByZXBsYWNlIHRhZ3MKLSAqIEBHU1RfVEFHX01FUkdFX0FQUEVORDogYXBwZW5kIHRhZ3MKLSAqIEBHU1RfVEFHX01FUkdFX1BSRVBFTkQ6IHByZXBlbmQgdGFncwotICogQEdTVF9UQUdfTUVSR0VfS0VFUDoga2VlcCBleGlzdGluZyB0YWdzCi0gKiBAR1NUX1RBR19NRVJHRV9LRUVQX0FMTDoga2VlcCBhbGwgZXhpc3RpbmcgdGFncwotICogQEdTVF9UQUdfTUVSR0VfQ09VTlQ6IHRoZSBudW1iZXIgb2YgbWVyZ2UgbW9kZXMKLSAqCi0gKiBUaGUgZGlmZmVyZW50IHRhZyBtZXJnaW5nIG1vZGVzIGFyZSBiYXNpY2FsbHkgcmVwbGFjZSwgb3ZlcndyaXRlIGFuZCBhcHBlbmQsCi0gKiBidXQgdGhleSBjYW4gYmUgc2VlbiBmcm9tIHR3byBkaXJlY3Rpb25zLiBHaXZlbiB0d28gdGFnbGlzdHM6IChBKSB0aGUgdGFncwotICogYWxyZWFkeSBpbiB0aGUgZWxlbWVudCBhbmQgKEIpIHRoZSBvbmVzIHRoYXQgYXJlIHN1cHBsaWVkIHRvIHRoZSBlbGVtZW50ICgKLSAqIGUuZy4gdmlhIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MoKSAvIGdzdF90YWdfc2V0dGVyX2FkZF90YWdzKCkgb3IgYQotICogJUdTVF9FVkVOVF9UQUcpLCBob3cgYXJlIHRoZXNlIHRhZ3MgbWVyZ2VkPwotICogSW4gdGhlIHRhYmxlIGJlbG93IHRoaXMgaXMgc2hvd24gZm9yIHRoZSBjYXNlcyB0aGF0IGEgdGFnIGV4aXN0cyBpbiB0aGUgbGlzdAotICogKEEpIG9yIGRvZXMgbm90IGV4aXN0cyAoIUEpIGFuZCBjb21iaW5hdGlvbnMgdGhlcmVvZi4KLSAqCi0gKiA8dGFibGUgZnJhbWU9ImFsbCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgotICogICA8dGl0bGU+bWVyZ2UgbW9kZTwvdGl0bGU+Ci0gKiAgIDx0Z3JvdXAgY29scz0nNScgYWxpZ249J2xlZnQnPgotICogICAgIDx0aGVhZD4KLSAqICAgICAgIDxyb3c+Ci0gKiAgICAgICAgIDxlbnRyeT5tZXJnZSBtb2RlPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5PkEgKyBCPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5PkEgKyAhQjwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT4hQSArIEI8L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+IUEgKyAhQjwvZW50cnk+Ci0gKiAgICAgICA8L3Jvdz4KLSAqICAgICA8L3RoZWFkPgotICogICAgIDx0Ym9keT4KLSAqICAgICAgIDxyb3c+Ci0gKiAgICAgICAgIDxlbnRyeT5SRVBMQUNFX0FMTDwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT5CPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5Pi08L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+QjwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT4tPC9lbnRyeT4KLSAqICAgICAgIDwvcm93PgotICogICAgICAgPHJvdz4KLSAqICAgICAgICAgPGVudHJ5PlJFUExBQ0U8L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+QjwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT5BPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5PkI8L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+LTwvZW50cnk+Ci0gKiAgICAgICA8L3Jvdz4KLSAqICAgICAgIDxyb3c+Ci0gKiAgICAgICAgIDxlbnRyeT5BUFBFTkQ8L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+QSwgQjwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT5BPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5PkI8L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+LTwvZW50cnk+Ci0gKiAgICAgICA8L3Jvdz4KLSAqICAgICAgIDxyb3c+Ci0gKiAgICAgICAgIDxlbnRyeT5QUkVQRU5EPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5PkIsIEE8L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+QTwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT5CPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5Pi08L2VudHJ5PgotICogICAgICAgPC9yb3c+Ci0gKiAgICAgICA8cm93PgotICogICAgICAgICA8ZW50cnk+S0VFUDwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT5BPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5PkE8L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+QjwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT4tPC9lbnRyeT4KLSAqICAgICAgIDwvcm93PgotICogICAgICAgPHJvdz4KLSAqICAgICAgICAgPGVudHJ5PktFRVBfQUxMPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5PkE8L2VudHJ5PgotICogICAgICAgICA8ZW50cnk+QTwvZW50cnk+Ci0gKiAgICAgICAgIDxlbnRyeT4tPC9lbnRyeT4KLSAqICAgICAgICAgPGVudHJ5Pi08L2VudHJ5PgotICogICAgICAgPC9yb3c+Ci0gKiAgICAgPC90Ym9keT4KLSAqICAgPC90Z3JvdXA+Ci0gKiA8L3RhYmxlPgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfVEFHX01FUkdFX1VOREVGSU5FRCwKLSAgR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCwKLSAgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgR1NUX1RBR19NRVJHRV9QUkVQRU5ELAotICBHU1RfVEFHX01FUkdFX0tFRVAsCi0gIEdTVF9UQUdfTUVSR0VfS0VFUF9BTEwsCi0gIC8qIGFkZCBtb3JlICovCi0gIEdTVF9UQUdfTUVSR0VfQ09VTlQKLX0gR3N0VGFnTWVyZ2VNb2RlOwotCi0jZGVmaW5lIEdTVF9UQUdfTU9ERV9JU19WQUxJRChtb2RlKSAgICAgKCgobW9kZSkgPiBHU1RfVEFHX01FUkdFX1VOREVGSU5FRCkgJiYgKChtb2RlKSA8IEdTVF9UQUdfTUVSR0VfQ09VTlQpKQotCi0vKioKLSAqIEdzdFRhZ0ZsYWc6Ci0gKiBAR1NUX1RBR19GTEFHX1VOREVGSU5FRDogdW5kZWZpbmVkIGZsYWcKLSAqIEBHU1RfVEFHX0ZMQUdfTUVUQTogdGFnIGlzIG1ldGEgZGF0YQotICogQEdTVF9UQUdfRkxBR19FTkNPREVEOiB0YWcgaXMgZW5jb2RlZAotICogQEdTVF9UQUdfRkxBR19ERUNPREVEOiB0YWcgaXMgZGVjb2RlZAotICogQEdTVF9UQUdfRkxBR19DT1VOVDogbnVtYmVyIG9mIHRhZyBmbGFncwotICoKLSAqIEV4dHJhIHRhZyBmbGFncyB1c2VkIHdoZW4gcmVnaXN0ZXJpbmcgdGFncy4KLSAqLwotLyogRklYTUU6IHRoZXNlIGFyZSBub3QgcmVhbGx5IGZsYWdzIC4uICovCi10eXBlZGVmIGVudW0gewotICBHU1RfVEFHX0ZMQUdfVU5ERUZJTkVELAotICBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgR1NUX1RBR19GTEFHX0VOQ09ERUQsCi0gIEdTVF9UQUdfRkxBR19ERUNPREVELAotICBHU1RfVEFHX0ZMQUdfQ09VTlQKLX0gR3N0VGFnRmxhZzsKLQotI2RlZmluZSBHU1RfVEFHX0ZMQUdfSVNfVkFMSUQoZmxhZykgICAgICgoKGZsYWcpID4gR1NUX1RBR19GTEFHX1VOREVGSU5FRCkgJiYgKChmbGFnKSA8IEdTVF9UQUdfRkxBR19DT1VOVCkpCi0KLS8qKgotICogR3N0VGFnTGlzdDoKLSAqIEBtaW5pX29iamVjdDogdGhlIHBhcmVudCB0eXBlCi0gKgotICogT2JqZWN0IGRlc2NyaWJpbmcgdGFncyAvIG1ldGFkYXRhLgotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0VGFnTGlzdCBHc3RUYWdMaXN0Owotc3RydWN0IF9Hc3RUYWdMaXN0IHsKLSAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKLX07Ci0KLUdTVF9FWFBPUlQgR1R5cGUgX2dzdF90YWdfbGlzdF90eXBlOwotCi0jZGVmaW5lIEdTVF9UQUdfTElTVCh4KSAgICAgICAoKEdzdFRhZ0xpc3QgKikgKHgpKQotI2RlZmluZSBHU1RfVFlQRV9UQUdfTElTVCAgICAgKF9nc3RfdGFnX2xpc3RfdHlwZSkKLSNkZWZpbmUgR1NUX0lTX1RBR19MSVNUKG9iaikgIChHU1RfSVNfTUlOSV9PQkpFQ1RfVFlQRSgob2JqKSwgR1NUX1RZUEVfVEFHX0xJU1QpKQotCi0vKioKLSAqIEdzdFRhZ0ZvcmVhY2hGdW5jOgotICogQGxpc3Q6IHRoZSAjR3N0VGFnTGlzdAotICogQHRhZzogYSBuYW1lIG9mIGEgdGFnIGluIEBsaXN0Ci0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKLSAqCi0gKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgaW4gZ3N0X3RhZ19saXN0X2ZvcmVhY2goKS4gVGhlIGZ1bmN0aW9uIG1heQotICogbm90IG1vZGlmeSB0aGUgdGFnIGxpc3QuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRhZ0ZvcmVhY2hGdW5jKSAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICB1c2VyX2RhdGEpOwotCi0vKioKLSAqIEdzdFRhZ01lcmdlRnVuYzoKLSAqIEBkZXN0OiB0aGUgZGVzdGluYXRpb24gI0dWYWx1ZQotICogQHNyYzogdGhlIHNvdXJjZSAjR1ZhbHVlCi0gKgotICogQSBmdW5jdGlvbiBmb3IgbWVyZ2luZyBtdWx0aXBsZSB2YWx1ZXMgb2YgYSB0YWcgdXNlZCB3aGVuIHJlZ2lzdGVyaW5nCi0gKiB0YWdzLgotICovCi10eXBlZGVmIHZvaWQgKCogR3N0VGFnTWVyZ2VGdW5jKSAoR1ZhbHVlICpkZXN0LCBjb25zdCBHVmFsdWUgKnNyYyk7Ci0KLUdUeXBlICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3R5cGUgKHZvaWQpOwotCi0vKiB0YWcgcmVnaXN0cmF0aW9uICovCi12b2lkICAgICAgICAgZ3N0X3RhZ19yZWdpc3RlciAgICAgIChjb25zdCBnY2hhciAgICAgKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnRmxhZyAgICAgICAgZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICAgIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgKiBuaWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICogYmx1cmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZUZ1bmMgICBmdW5jKTsKLQotdm9pZCAgICAgICAgIGdzdF90YWdfcmVnaXN0ZXJfc3RhdGljIChjb25zdCBnY2hhciAgICogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnRmxhZyAgICAgIGZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUeXBlICAgICAgICAgICB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICogbmljaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAqIGJsdXJiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZUZ1bmMgZnVuYyk7Ci0KLS8qIHNvbWUgZGVmYXVsdCBtZXJnaW5nIGZ1bmN0aW9ucyAqLwotdm9pZCAgICAgIGdzdF90YWdfbWVyZ2VfdXNlX2ZpcnN0ICAgICAgICAgIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMpOwotdm9pZCAgICAgIGdzdF90YWdfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMpOwotCi0vKiBiYXNpYyB0YWcgc3VwcG9ydCAqLwotZ2Jvb2xlYW4gICAgICAgICAgICAgICBnc3RfdGFnX2V4aXN0cyAgICAgICAgICAoY29uc3QgZ2NoYXIgKiB0YWcpOwotR1R5cGUgICAgICAgICAgICAgICAgICBnc3RfdGFnX2dldF90eXBlICAgICAgICAoY29uc3QgZ2NoYXIgKiB0YWcpOwotY29uc3QgZ2NoYXIgKiAgICAgICAgICBnc3RfdGFnX2dldF9uaWNrICAgICAgICAoY29uc3QgZ2NoYXIgKiB0YWcpOwotY29uc3QgZ2NoYXIgKiAgICAgICAgICBnc3RfdGFnX2dldF9kZXNjcmlwdGlvbiAoY29uc3QgZ2NoYXIgKiB0YWcpOwotR3N0VGFnRmxhZyAgICAgICAgICAgICBnc3RfdGFnX2dldF9mbGFnICAgICAgICAoY29uc3QgZ2NoYXIgKiB0YWcpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICBnc3RfdGFnX2lzX2ZpeGVkICAgICAgICAoY29uc3QgZ2NoYXIgKiB0YWcpOwotCi0vKiB0YWcgbGlzdHMgKi8KLQotLyoqCi0gKiBHc3RUYWdTY29wZToKLSAqIEBHU1RfVEFHX1NDT1BFX1NUUkVBTTogdGFncyBzcGVjaWZpYyB0byB0aGlzIHNpbmdsZSBzdHJlYW0KLSAqIEBHU1RfVEFHX1NDT1BFX0dMT0JBTDogZ2xvYmFsIHRhZ3MgZm9yIHRoZSBjb21wbGV0ZSBtZWRpdW0KLSAqCi0gKiBHc3RUYWdTY29wZSBzcGVjaWZpZXMgaWYgYSB0YWdsaXN0IGFwcGxpZXMgdG8gdGhlIGNvbXBsZXRlCi0gKiBtZWRpdW0gb3Igb25seSB0byBvbmUgc2luZ2xlIHN0cmVhbS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1RBR19TQ09QRV9TVFJFQU0sCi0gIEdTVF9UQUdfU0NPUEVfR0xPQkFMCi19IEdzdFRhZ1Njb3BlOwotCi1Hc3RUYWdMaXN0ICogZ3N0X3RhZ19saXN0X25ld19lbXB0eSAgICAgICAgICh2b2lkKSBHX0dOVUNfTUFMTE9DOwotR3N0VGFnTGlzdCAqIGdzdF90YWdfbGlzdF9uZXcgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKiB0YWcsIC4uLikgR19HTlVDX01BTExPQzsKLUdzdFRhZ0xpc3QgKiBnc3RfdGFnX2xpc3RfbmV3X3ZhbGlzdCAgICAgICAgKHZhX2xpc3QgdmFyX2FyZ3MpIEdfR05VQ19NQUxMT0M7Ci0KLXZvaWQgICAgICAgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlICAgICAgICAgKEdzdFRhZ0xpc3QgKiBsaXN0LCBHc3RUYWdTY29wZSBzY29wZSk7Ci1Hc3RUYWdTY29wZSAgZ3N0X3RhZ19saXN0X2dldF9zY29wZSAgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCk7Ci0KLWdjaGFyICAgICAgKiBnc3RfdGFnX2xpc3RfdG9fc3RyaW5nICAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0KSBHX0dOVUNfTUFMTE9DOwotR3N0VGFnTGlzdCAqIGdzdF90YWdfbGlzdF9uZXdfZnJvbV9zdHJpbmcgICAoY29uc3QgZ2NoYXIgICAgICAqIHN0cikgR19HTlVDX01BTExPQzsKLQotZ2ludCAgICAgICAgIGdzdF90YWdfbGlzdF9uX3RhZ3MgICAgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QpOwotY29uc3QgZ2NoYXIqIGdzdF90YWdfbGlzdF9udGhfdGFnX25hbWUgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGd1aW50IGluZGV4KTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfaXNfZW1wdHkgICAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0KTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfaXNfZXF1YWwgICAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0Mik7Ci12b2lkICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAgICAgICAgICAgIChHc3RUYWdMaXN0ICAgICAgICogaW50bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiBmcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUpOwotR3N0VGFnTGlzdCAqIGdzdF90YWdfbGlzdF9tZXJnZSAgICAgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUpIEdfR05VQ19NQUxMT0M7Ci1ndWludCAgICAgICAgZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcpOwotdm9pZCAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQgICAgICAgICAgICAgICAoR3N0VGFnTGlzdCAgICAgICAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICAgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci12b2lkICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZXMgICAgICAgIChHc3RUYWdMaXN0ICAgICAgICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRhZ01lcmdlTW9kZSAgICBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKLXZvaWQgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdCAgICAgICAgKEdzdFRhZ0xpc3QgICAgICAgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgdmFyX2FyZ3MpOwotdm9pZCAgICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcyAoR3N0VGFnTGlzdCAgICAgICAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICAgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgICAgICAgdmFyX2FyZ3MpOwotdm9pZCAgICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWUgICAgICAgICAoR3N0VGFnTGlzdCAgICAgICAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICAgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgICAgICogdmFsdWUpOwotdm9pZCAgICAgICAgIGdzdF90YWdfbGlzdF9yZW1vdmVfdGFnICAgICAgICAoR3N0VGFnTGlzdCAgICAgICAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnKTsKLXZvaWQgICAgICAgICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAgICAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnRm9yZWFjaEZ1bmMgIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgdXNlcl9kYXRhKTsKLQotY29uc3QgR1ZhbHVlICoKLSAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4ICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUgICAgICAgIChHVmFsdWUgICAgICAgICAgICogZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZyk7Ci0KLS8qIHNpbXBsaWZpY2F0aW9ucyAoRklYTUU6IGRvIHdlIHdhbnQgdGhlbT8pICovCi1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9ib29sZWFuICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfYm9vbGVhbl9pbmRleCAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAqIHZhbHVlKTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2ludCAgICAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgKiB2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9pbnRfaW5kZXggICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfdWludCAgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAqIHZhbHVlKTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXggICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgKiB2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9pbnQ2NCAgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgICAgICogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfaW50NjRfaW5kZXggICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgICAqIHZhbHVlKTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NCAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgICAgKiB2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXggIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAgICAgICogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfZmxvYXQgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Zsb2F0ICAgICAgICAgICAqIHZhbHVlKTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4ICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmbG9hdCAgICAgICAgICAgKiB2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgICAgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICAgICAgICAgICogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfZG91YmxlX2luZGV4ICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICAqIHZhbHVlKTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAqKiB2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAgICAgICAgICAgKiogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleCAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICoqIHZhbHVlKTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X3BvaW50ZXIgICAgICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgKiB2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfZGF0ZSAgICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGUgICAgICAgICAgICoqIHZhbHVlKTsKLWdib29sZWFuICAgICBnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXggICAgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAqIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlICAgICAgICAgICAqKiB2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWUgICAgIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3REYXRlVGltZSAgICAgKiogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4IChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3REYXRlVGltZSAgICAgKiogdmFsdWUpOwotZ2Jvb2xlYW4gICAgIGdzdF90YWdfbGlzdF9nZXRfc2FtcGxlICAgICAgICAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICogdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2FtcGxlICAgICAgICoqIHNhbXBsZSk7Ci1nYm9vbGVhbiAgICAgZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXggIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKiB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTYW1wbGUgICAgICAgKiogc2FtcGxlKTsKLQotLyogcmVmY291bnRpbmcgKi8KLS8qKgotICogZ3N0X3RhZ19saXN0X3JlZjoKLSAqIEB0YWdsaXN0OiB0aGUgI0dzdFRhZ0xpc3QgdG8gcmVmZXJlbmNlCi0gKgotICogQWRkIGEgcmVmZXJlbmNlIHRvIGEgI0dzdFRhZ0xpc3QgbWluaSBvYmplY3QuCi0gKgotICogRnJvbSB0aGlzIHBvaW50IG9uLCB1bnRpbCB0aGUgY2FsbGVyIGNhbGxzIGdzdF90YWdfbGlzdF91bnJlZigpIG9yCi0gKiBnc3RfdGFnX2xpc3RfbWFrZV93cml0YWJsZSgpLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIHRhZ2xpc3Qgb2JqZWN0IHdpbGwKLSAqIG5vdCBjaGFuZ2UuIFRvIHVzZSBhICNHc3RUYWdMaXN0IG9iamVjdCwgeW91IG11c3QgYWx3YXlzIGhhdmUgYSByZWZjb3VudCBvbgotICogaXQgLS0gZWl0aGVyIHRoZSBvbmUgbWFkZSBpbXBsaWNpdGx5IGJ5IGUuZy4gZ3N0X3RhZ19saXN0X25ldygpLCBvciB2aWEKLSAqIHRha2luZyBvbmUgZXhwbGljaXRseSB3aXRoIHRoaXMgZnVuY3Rpb24uCi0gKgotICogUmV0dXJuczogdGhlIHNhbWUgI0dzdFRhZ0xpc3QgbWluaSBvYmplY3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgR3N0VGFnTGlzdCAqCi1nc3RfdGFnX2xpc3RfcmVmIChHc3RUYWdMaXN0ICogdGFnbGlzdCkKLXsKLSAgcmV0dXJuIChHc3RUYWdMaXN0ICopIGdzdF9taW5pX29iamVjdF9yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUICh0YWdsaXN0KSk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X3VucmVmOgotICogQHRhZ2xpc3Q6IGEgI0dzdFRhZ0xpc3QuCi0gKgotICogVW5yZWYgYSAjR3N0VGFnTGlzdCwgYW5kIGFuZCBmcmVlIGFsbCBpdHMgbWVtb3J5IHdoZW4gdGhlIHJlZmNvdW50IHJlYWNoZXMgMC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfdGFnX2xpc3RfdW5yZWYgKEdzdFRhZ0xpc3QgKiB0YWdsaXN0KQotewotICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUICh0YWdsaXN0KSk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X2NvcHk6Ci0gKiBAdGFnbGlzdDogYSAjR3N0VGFnTGlzdC4KLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RUYWdMaXN0IGFzIGEgY29weSBvZiB0aGUgb2xkIEB0YWdsaXN0LiBUaGUgbmV3IHRhZ2xpc3QKLSAqIHdpbGwgaGF2ZSBhIHJlZmNvdW50IG9mIDEsIG93bmVkIGJ5IHRoZSBjYWxsZXIsIGFuZCB3aWxsIGJlIHdyaXRhYmxlIGFzCi0gKiBhIHJlc3VsdC4KLSAqCi0gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc2VtYW50aWMgZXF1aXZhbGVudCBvZiBhIGdzdF90YWdfbGlzdF9yZWYoKQotICogZm9sbG93ZWQgYnkgYSBnc3RfdGFnX2xpc3RfbWFrZV93cml0YWJsZSgpLiBJZiB5b3Ugb25seSB3YW50IHRvIGhvbGQgb24gdG8gYQotICogcmVmZXJlbmNlIHRvIHRoZSBkYXRhLCB5b3Ugc2hvdWxkIHVzZSBnc3RfdGFnX2xpc3RfcmVmKCkuCi0gKgotICogV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIHRhZ2xpc3QsIGNhbGwgZ3N0X3RhZ19saXN0X3VucmVmKCkgb24gaXQuCi0gKgotICogUmV0dXJuczogdGhlIG5ldyAjR3N0VGFnTGlzdAotICovCi1zdGF0aWMgaW5saW5lIEdzdFRhZ0xpc3QgKgotZ3N0X3RhZ19saXN0X2NvcHkgKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdsaXN0KQotewotICByZXR1cm4gR1NUX1RBR19MSVNUIChnc3RfbWluaV9vYmplY3RfY29weSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHRhZ2xpc3QpKSk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19saXN0X2lzX3dyaXRhYmxlOgotICogQHRhZ2xpc3Q6IGEgI0dzdFRhZ0xpc3QKLSAqCi0gKiBUZXN0cyBpZiB5b3UgY2FuIHNhZmVseSBtb2RpZnkgQHRhZ2xpc3QuIEl0IGlzIG9ubHkgc2FmZSB0byBtb2RpZnkgdGFnbGlzdAotICogd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBvd25lciBvZiB0aGUgdGFnbGlzdCAtIGllLCB0aGUgcmVmY291bnQgaXMgMS4KLSAqLwotI2RlZmluZSBnc3RfdGFnX2xpc3RfaXNfd3JpdGFibGUodGFnbGlzdCkgICAgZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAodGFnbGlzdCkpCi0KLS8qKgotICogZ3N0X3RhZ19saXN0X21ha2Vfd3JpdGFibGU6Ci0gKiBAdGFnbGlzdDogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RUYWdMaXN0Ci0gKgotICogUmV0dXJucyBhIHdyaXRhYmxlIGNvcHkgb2YgQHRhZ2xpc3QuCi0gKgotICogSWYgdGhlcmUgaXMgb25seSBvbmUgcmVmZXJlbmNlIGNvdW50IG9uIEB0YWdsaXN0LCB0aGUgY2FsbGVyIG11c3QgYmUgdGhlCi0gKiBvd25lciwgYW5kIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHRhZ2xpc3Qgb2JqZWN0IHVuY2hhbmdlZC4gSWYgb24KLSAqIHRoZSBvdGhlciBoYW5kIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QsIGEgbmV3IHRhZ2xpc3QKLSAqIG9iamVjdCB3aWxsIGJlIHJldHVybmVkICh3aGljaCB3aWxsIGJlIGEgY29weSBvZiBAdGFnbGlzdCkuIFRoZSBjYWxsZXIncwotICogcmVmZXJlbmNlIG9uIEB0YWdsaXN0IHdpbGwgYmUgcmVtb3ZlZCwgYW5kIGluc3RlYWQgdGhlIGNhbGxlciB3aWxsIG93biBhCi0gKiByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KLSAqCi0gKiBJbiBzaG9ydCwgdGhpcyBmdW5jdGlvbiB1bnJlZnMgdGhlIHRhZ2xpc3QgaW4gdGhlIGFyZ3VtZW50IGFuZCByZWZzIHRoZQotICogdGFnbGlzdCB0aGF0IGl0IHJldHVybnMuIERvbid0IGFjY2VzcyB0aGUgYXJndW1lbnQgYWZ0ZXIgY2FsbGluZyB0aGlzCi0gKiBmdW5jdGlvbi4gU2VlIGFsc286IGdzdF90YWdfbGlzdF9yZWYoKS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgd3JpdGFibGUgdGFnbGlzdCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUKLSAqICAgICBzYW1lIGFzIEB0YWdsaXN0Ci0gKi8KLSNkZWZpbmUgZ3N0X3RhZ19saXN0X21ha2Vfd3JpdGFibGUodGFnbGlzdCkgICBHU1RfVEFHX0xJU1QgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAodGFnbGlzdCkpKQotCi0vKiBHU3RyZWFtZXIgY29yZSB0YWdzICovCi0vKioKLSAqIEdTVF9UQUdfVElUTEU6Ci0gKgotICogY29tbW9ubHkgdXNlZCB0aXRsZSAoc3RyaW5nKQotICoKLSAqIFRoZSB0aXRsZSBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkLCBlLmcuICdUaGUgRG9sbCBIb3VzZScKLSAqLwotI2RlZmluZSBHU1RfVEFHX1RJVExFICAgICAgICAgICAgICAgICAgInRpdGxlIgotLyoqCi0gKiBHU1RfVEFHX1RJVExFX1NPUlROQU1FOgotICoKLSAqIGNvbW1vbmx5IHVzZWQgdGl0bGUsIGFzIHVzZWQgZm9yIHNvcnRpbmcgKHN0cmluZykKLSAqCi0gKiBUaGUgdGl0bGUgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCwgZS5nLiAnRG9sbCBIb3VzZSwgVGhlJwotICovCi0jZGVmaW5lIEdTVF9UQUdfVElUTEVfU09SVE5BTUUgICAgICAgICAidGl0bGUtc29ydG5hbWUiCi0vKioKLSAqIEdTVF9UQUdfQVJUSVNUOgotICoKLSAqIHBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyAoc3RyaW5nKQotICoKLSAqIFRoZSBhcnRpc3QgbmFtZSBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkLCBlLmcuICdKaW1pIEhlbmRyaXgnIG9yCi0gKiAnVGhlIEd1aXRhciBIZXJvZXMnCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19BUlRJU1QgICAgICAgICAgICAgICAgICJhcnRpc3QiCi0vKioKLSAqIEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FOgotICoKLSAqIHBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZywgYXMgdXNlZCBmb3Igc29ydGluZyAoc3RyaW5nKQotICoKLSAqIFRoZSBhcnRpc3QgbmFtZSBhcyBpdCBzaG91bGQgYmUgc29ydGVkLCBlLmcuICdIZW5kcml4LCBKaW1pJyBvcgotICogJ0d1aXRhciBIZXJvZXMsIFRoZScKLSAqLwotI2RlZmluZSBHU1RfVEFHX0FSVElTVF9TT1JUTkFNRSAgICAgICAgImFydGlzdC1zb3J0bmFtZSIKLS8qKgotICogR1NUX1RBR19BTEJVTToKLSAqCi0gKiBhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSAoc3RyaW5nKQotICoKLSAqIFRoZSBhbGJ1bSBuYW1lIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGUuZy4gJ1RoZSBKYXp6IEd1aXRhcicKLSAqLwotI2RlZmluZSBHU1RfVEFHX0FMQlVNICAgICAgICAgICAgICAgICAgImFsYnVtIgotLyoqCi0gKiBHU1RfVEFHX0FMQlVNX1NPUlROQU1FOgotICoKLSAqIGFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhLCBhcyB1c2VkIGZvciBzb3J0aW5nIChzdHJpbmcpCi0gKgotICogVGhlIGFsYnVtIG5hbWUgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCwgZS5nLiAnSmF6eiBHdWl0YXIsIFRoZScKLSAqLwotI2RlZmluZSBHU1RfVEFHX0FMQlVNX1NPUlROQU1FICAgICAgICAgImFsYnVtLXNvcnRuYW1lIgotLyoqCi0gKiBHU1RfVEFHX0FMQlVNX0FSVElTVDoKLSAqCi0gKiBUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQuCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19BTEJVTV9BUlRJU1QgICAgICAgICAgICJhbGJ1bS1hcnRpc3QiCi0vKioKLSAqIEdTVF9UQUdfQUxCVU1fQVJUSVNUX1NPUlROQU1FOgotICoKLSAqIFRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZC4KLSAqLwotI2RlZmluZSBHU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRSAgImFsYnVtLWFydGlzdC1zb3J0bmFtZSIKLS8qKgotICogR1NUX1RBR19DT01QT1NFUjoKLSAqCi0gKiBwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcgKHN0cmluZykKLSAqLwotI2RlZmluZSBHU1RfVEFHX0NPTVBPU0VSICAgICAgICAgICAgICAgImNvbXBvc2VyIgotLyoqCi0gKiBHU1RfVEFHX0NPTkRVQ1RPUjoKLSAqCi0gKiBjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQgKHN0cmluZykKLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLSNkZWZpbmUgR1NUX1RBR19DT05EVUNUT1IgICAgICAgICAgICAgICAiY29uZHVjdG9yIgotLyoqCi0gKiBHU1RfVEFHX0RBVEU6Ci0gKgotICogZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoI0dEYXRlIHN0cnVjdHVyZSkKLSAqLwotI2RlZmluZSBHU1RfVEFHX0RBVEUgICAgICAgICAgICAgICAgICAgImRhdGUiCi0vKioKLSAqIEdTVF9UQUdfREFURV9USU1FOgotICoKLSAqIGRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKCNHc3REYXRlVGltZSBzdHJ1Y3R1cmUpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19EQVRFX1RJTUUgICAgICAgICAgICAgICJkYXRldGltZSIKLS8qKgotICogR1NUX1RBR19HRU5SRToKLSAqCi0gKiBnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byAoc3RyaW5nKQotICovCi0jZGVmaW5lIEdTVF9UQUdfR0VOUkUgICAgICAgICAgICAgICAgICAiZ2VucmUiCi0vKioKLSAqIEdTVF9UQUdfQ09NTUVOVDoKLSAqCi0gKiBmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSAoc3RyaW5nKQotICovCi0jZGVmaW5lIEdTVF9UQUdfQ09NTUVOVCAgICAgICAgICAgICAgICAiY29tbWVudCIKLS8qKgotICogR1NUX1RBR19FWFRFTkRFRF9DT01NRU5UOgotICoKLSAqIGtleS92YWx1ZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgKHN0cmluZykKLSAqCi0gKiBNdXN0IGJlIGluIHRoZSBmb3JtIG9mICdrZXk9Y29tbWVudCcgb3IKLSAqICdrZXlbbGNdPWNvbW1lbnQnIHdoZXJlICdsYycgaXMgYW4gSVNPLTYzOQotICogbGFuZ3VhZ2UgY29kZS4KLSAqCi0gKiBUaGlzIHRhZyBpcyB1c2VkIGZvciB1bmtub3duIFZvcmJpcyBjb21tZW50IHRhZ3MsCi0gKiB1bmtub3duIEFQRSB0YWdzIGFuZCBjZXJ0YWluIElEM3YyIGNvbW1lbnQgZmllbGRzLgotICovCi0jZGVmaW5lIEdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCAgICAgICAiZXh0ZW5kZWQtY29tbWVudCIKLS8qKgotICogR1NUX1RBR19UUkFDS19OVU1CRVI6Ci0gKgotICogdHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24gKHVuc2lnbmVkIGludGVnZXIpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19UUkFDS19OVU1CRVIgICAgICAgICAgICJ0cmFjay1udW1iZXIiCi0vKioKLSAqIEdTVF9UQUdfVFJBQ0tfQ09VTlQ6Ci0gKgotICogY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byAodW5zaWduZWQgaW50ZWdlcikKLSAqLwotI2RlZmluZSBHU1RfVEFHX1RSQUNLX0NPVU5UICAgICAgICAgICAgInRyYWNrLWNvdW50IgotLyoqCi0gKiBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVI6Ci0gKgotICogZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiAodW5zaWduZWQgaW50ZWdlcikKLSAqLwotI2RlZmluZSBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVIgICAgImFsYnVtLWRpc2MtbnVtYmVyIgotLyoqCi0gKiBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVDoKLSAqCi0gKiBjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byAodW5zaWduZWQgaW50ZWdlcikKLSAqLwotI2RlZmluZSBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCAgICAiYWxidW0tZGlzYy1jb3VudCIKLS8qKgotICogR1NUX1RBR19MT0NBVElPTjoKLSAqCi0gKiBPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtCi0gKiBpcyBob3N0ZWQpIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19MT0NBVElPTiAgICAgICAgICAgICAgICJsb2NhdGlvbiIKLS8qKgotICogR1NUX1RBR19IT01FUEFHRToKLSAqCi0gKiBIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19IT01FUEFHRSAgICAgICAgICAgICAgICJob21lcGFnZSIKLS8qKgotICogR1NUX1RBR19ERVNDUklQVElPTjoKLSAqCi0gKiBzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEgKHN0cmluZykKLSAqLwotI2RlZmluZSBHU1RfVEFHX0RFU0NSSVBUSU9OICAgICAgICAgICAgImRlc2NyaXB0aW9uIgotLyoqCi0gKiBHU1RfVEFHX1ZFUlNJT046Ci0gKgotICogdmVyc2lvbiBvZiB0aGlzIGRhdGEgKHN0cmluZykKLSAqLwotI2RlZmluZSBHU1RfVEFHX1ZFUlNJT04gICAgICAgICAgICAgICAgInZlcnNpb24iCi0vKioKLSAqIEdTVF9UQUdfSVNSQzoKLSAqCi0gKiBJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8gKHN0cmluZykKLSAqLwotI2RlZmluZSBHU1RfVEFHX0lTUkMgICAgICAgICAgICAgICAgICAgImlzcmMiCi0vKioKLSAqIEdTVF9UQUdfT1JHQU5JWkFUSU9OOgotICoKLSAqIG9yZ2FuaXphdGlvbiAoc3RyaW5nKQotICovCi0jZGVmaW5lIEdTVF9UQUdfT1JHQU5JWkFUSU9OICAgICAgICAgICAib3JnYW5pemF0aW9uIgotLyoqCi0gKiBHU1RfVEFHX0NPUFlSSUdIVDoKLSAqCi0gKiBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19DT1BZUklHSFQgICAgICAgICAgICAgICJjb3B5cmlnaHQiCi0vKioKLSAqIEdTVF9UQUdfQ09QWVJJR0hUX1VSSToKLSAqCi0gKiBVUkkgdG8gbG9jYXRpb24gd2hlcmUgY29weXJpZ2h0IGRldGFpbHMgY2FuIGJlIGZvdW5kIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19DT1BZUklHSFRfVVJJICAgICAgICAgICJjb3B5cmlnaHQtdXJpIgotLyoqCi0gKiBHU1RfVEFHX0VOQ09ERURfQlk6Ci0gKgotICogbmFtZSBvZiB0aGUgcGVyc29uIG9yIG9yZ2FuaXNhdGlvbiB0aGF0IGVuY29kZWQgdGhlIGZpbGUuIE1heSBjb250YWluIGEKLSAqIGNvcHlyaWdodCBtZXNzYWdlIGlmIHRoZSBwZXJzb24gb3Igb3JnYW5pc2F0aW9uIGFsc28gaG9sZHMgdGhlIGNvcHlyaWdodAotICogKHN0cmluZykKLSAqCi0gKiBOb3RlOiBkbyBub3QgdXNlIHRoaXMgZmllbGQgdG8gZGVzY3JpYmUgdGhlIGVuY29kaW5nIGFwcGxpY2F0aW9uLiBVc2UKLSAqICNHU1RfVEFHX0FQUExJQ0FUSU9OX05BTUUgb3IgI0dTVF9UQUdfQ09NTUVOVCBmb3IgdGhhdC4KLSAqLwotI2RlZmluZSBHU1RfVEFHX0VOQ09ERURfQlkgICAgICAgICAgICAgImVuY29kZWQtYnkiCi0vKioKLSAqIEdTVF9UQUdfQ09OVEFDVDoKLSAqCi0gKiBjb250YWN0IGluZm9ybWF0aW9uIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19DT05UQUNUICAgICAgICAgICAgICAgICJjb250YWN0IgotLyoqCi0gKiBHU1RfVEFHX0xJQ0VOU0U6Ci0gKgotICogbGljZW5zZSBvZiBkYXRhIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19MSUNFTlNFICAgICAgICAgICAgICAgICJsaWNlbnNlIgotLyoqCi0gKiBHU1RfVEFHX0xJQ0VOU0VfVVJJOgotICoKLSAqIFVSSSB0byBsb2NhdGlvbiB3aGVyZSBsaWNlbnNlIGRldGFpbHMgY2FuIGJlIGZvdW5kIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19MSUNFTlNFX1VSSSAgICAgICAgICAgICJsaWNlbnNlLXVyaSIKLS8qKgotICogR1NUX1RBR19QRVJGT1JNRVI6Ci0gKgotICogcGVyc29uKHMpIHBlcmZvcm1pbmcgKHN0cmluZykKLSAqLwotI2RlZmluZSBHU1RfVEFHX1BFUkZPUk1FUiAgICAgICAgICAgICAgInBlcmZvcm1lciIKLS8qKgotICogR1NUX1RBR19EVVJBVElPTjoKLSAqCi0gKiBsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSAodW5zaWduZWQgNjQtYml0IGludGVnZXIpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19EVVJBVElPTiAgICAgICAgICAgICAgICJkdXJhdGlvbiIKLS8qKgotICogR1NUX1RBR19DT0RFQzoKLSAqCi0gKiBjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gKHN0cmluZykKLSAqLwotI2RlZmluZSBHU1RfVEFHX0NPREVDICAgICAgICAgICAgICAgICAgImNvZGVjIgotLyoqCi0gKiBHU1RfVEFHX1ZJREVPX0NPREVDOgotICoKLSAqIGNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiAoc3RyaW5nKQotICovCi0jZGVmaW5lIEdTVF9UQUdfVklERU9fQ09ERUMgICAgICAgICAgICAidmlkZW8tY29kZWMiCi0vKioKLSAqIEdTVF9UQUdfQVVESU9fQ09ERUM6Ci0gKgotICogY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19BVURJT19DT0RFQyAgICAgICAgICAgICJhdWRpby1jb2RlYyIKLS8qKgotICogR1NUX1RBR19TVUJUSVRMRV9DT0RFQzoKLSAqCi0gKiBjb2RlYy9mb3JtYXQgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19TVUJUSVRMRV9DT0RFQyAgICAgICAgICJzdWJ0aXRsZS1jb2RlYyIKLS8qKgotICogR1NUX1RBR19DT05UQUlORVJfRk9STUFUOgotICoKLSAqIGNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19DT05UQUlORVJfRk9STUFUICAgICAgICJjb250YWluZXItZm9ybWF0IgotLyoqCi0gKiBHU1RfVEFHX0JJVFJBVEU6Ci0gKgotICogZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyAodW5zaWduZWQgaW50ZWdlcikKLSAqLwotI2RlZmluZSBHU1RfVEFHX0JJVFJBVEUgICAgICAgICAgICAgICAgImJpdHJhdGUiCi0vKioKLSAqIEdTVF9UQUdfTk9NSU5BTF9CSVRSQVRFOgotICoKLSAqIG5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MgKHVuc2lnbmVkIGludGVnZXIpLiBUaGUgYWN0dWFsIGJpdHJhdGUgbWlnaHQgYmUKLSAqIGRpZmZlcmVudCBmcm9tIHRoaXMgdGFyZ2V0IGJpdHJhdGUuCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19OT01JTkFMX0JJVFJBVEUgICAgICAgICJub21pbmFsLWJpdHJhdGUiCi0vKioKLSAqIEdTVF9UQUdfTUlOSU1VTV9CSVRSQVRFOgotICoKLSAqIG1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MgKHVuc2lnbmVkIGludGVnZXIpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUgICAgICAgICJtaW5pbXVtLWJpdHJhdGUiCi0vKioKLSAqIEdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFOgotICoKLSAqIG1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MgKHVuc2lnbmVkIGludGVnZXIpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19NQVhJTVVNX0JJVFJBVEUgICAgICAgICJtYXhpbXVtLWJpdHJhdGUiCi0vKioKLSAqIEdTVF9UQUdfU0VSSUFMOgotICoKLSAqIHNlcmlhbCBudW1iZXIgb2YgdHJhY2sgKHVuc2lnbmVkIGludGVnZXIpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19TRVJJQUwgICAgICAgICAgICAgICAgICJzZXJpYWwiCi0vKioKLSAqIEdTVF9UQUdfRU5DT0RFUjoKLSAqCi0gKiBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19FTkNPREVSICAgICAgICAgICAgICAgICJlbmNvZGVyIgotLyoqCi0gKiBHU1RfVEFHX0VOQ09ERVJfVkVSU0lPTjoKLSAqCi0gKiB2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtICh1bnNpZ25lZCBpbnRlZ2VyKQotICovCi0jZGVmaW5lIEdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OICAgICAgICAiZW5jb2Rlci12ZXJzaW9uIgotLyoqCi0gKiBHU1RfVEFHX1RSQUNLX0dBSU46Ci0gKgotICogdHJhY2sgZ2FpbiBpbiBkYiAoZG91YmxlKQotICovCi0jZGVmaW5lIEdTVF9UQUdfVFJBQ0tfR0FJTiAgICAgICAgICAgICAicmVwbGF5Z2Fpbi10cmFjay1nYWluIgotLyoqCi0gKiBHU1RfVEFHX1RSQUNLX1BFQUs6Ci0gKgotICogcGVhayBvZiB0aGUgdHJhY2sgKGRvdWJsZSkKLSAqLwotI2RlZmluZSBHU1RfVEFHX1RSQUNLX1BFQUsgICAgICAgICAgICAgInJlcGxheWdhaW4tdHJhY2stcGVhayIKLS8qKgotICogR1NUX1RBR19BTEJVTV9HQUlOOgotICoKLSAqIGFsYnVtIGdhaW4gaW4gZGIgKGRvdWJsZSkKLSAqLwotI2RlZmluZSBHU1RfVEFHX0FMQlVNX0dBSU4gICAgICAgICAgICAgInJlcGxheWdhaW4tYWxidW0tZ2FpbiIKLS8qKgotICogR1NUX1RBR19BTEJVTV9QRUFLOgotICoKLSAqIHBlYWsgb2YgdGhlIGFsYnVtIChkb3VibGUpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19BTEJVTV9QRUFLICAgICAgICAgICAgICJyZXBsYXlnYWluLWFsYnVtLXBlYWsiCi0vKioKLSAqIEdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMOgotICoKLSAqIHJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMgKGRvdWJsZSkKLSAqLwotI2RlZmluZSBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCAgICAgICAgInJlcGxheWdhaW4tcmVmZXJlbmNlLWxldmVsIgotLyoqCi0gKiBHU1RfVEFHX0xBTkdVQUdFX0NPREU6Ci0gKgotICogSVNPLTYzOS0yIG9yIElTTy02MzktMSBjb2RlIGZvciB0aGUgbGFuZ3VhZ2UgdGhlIGNvbnRlbnQgaXMgaW4gKHN0cmluZykKLSAqCi0gKiBUaGVyZSBpcyB1dGlsaXR5IEFQSSBpbiBsaWJnc3R0YWcgaW4gZ3N0LXBsdWdpbnMtYmFzZSB0byBvYnRhaW4gYSB0cmFuc2xhdGVkCi0gKiBsYW5ndWFnZSBuYW1lIGZyb20gdGhlIGxhbmd1YWdlIGNvZGU6IGdzdF90YWdfZ2V0X2xhbmd1YWdlX25hbWUoKQotICovCi0jZGVmaW5lIEdTVF9UQUdfTEFOR1VBR0VfQ09ERSAgICAgICAgICAibGFuZ3VhZ2UtY29kZSIKLS8qKgotICogR1NUX1RBR19MQU5HVUFHRV9OQU1FOgotICoKLSAqIE5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoZSBjb250ZW50IGlzIGluIChzdHJpbmcpCi0gKgotICogRnJlZS1mb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoZSBjb250ZW50IGlzIGluLCBpZiBhIGxhbmd1YWdlIGNvZGUKLSAqIGlzIG5vdCBhdmFpbGFibGUuIFRoaXMgdGFnIHNob3VsZCBub3QgYmUgc2V0IGluIGFkZGl0aW9uIHRvIGEgbGFuZ3VhZ2UKLSAqIGNvZGUuIEl0IGlzIHVuZGVmaW5lZCB3aGF0IGxhbmd1YWdlIG9yIGxvY2FsZSB0aGUgbGFuZ3VhZ2UgbmFtZSBpcyBpbi4KLSAqLwotI2RlZmluZSBHU1RfVEFHX0xBTkdVQUdFX05BTUUgICAgICAgICAgImxhbmd1YWdlLW5hbWUiCi0vKioKLSAqIEdTVF9UQUdfSU1BR0U6Ci0gKgotICogaW1hZ2UgKHNhbXBsZSkgKHNhbXBsZSB0YWdsaXN0IHNob3VsZCBzcGVjaWZ5IHRoZSBjb250ZW50IHR5cGUgYW5kIHByZWZlcmFibHkKLSAqIGFsc28gc2V0ICJpbWFnZS10eXBlIiBmaWVsZCBhcyAjR3N0VGFnSW1hZ2VUeXBlKQotICovCi0jZGVmaW5lIEdTVF9UQUdfSU1BR0UgICAgICAgICAgICAgICAgICAiaW1hZ2UiCi0vKioKLSAqIEdTVF9UQUdfUFJFVklFV19JTUFHRToKLSAqCi0gKiBpbWFnZSB0aGF0IGlzIG1lYW50IGZvciBwcmV2aWV3IHB1cnBvc2VzLCBlLmcuIHNtYWxsIGljb24tc2l6ZWQgdmVyc2lvbgotICogKHNhbXBsZSkgKHNhbXBsZSB0YWdsaXN0IHNob3VsZCBzcGVjaWZ5IHRoZSBjb250ZW50IHR5cGUpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19QUkVWSUVXX0lNQUdFICAgICAgICAgICJwcmV2aWV3LWltYWdlIgotCi0vKioKLSAqIEdTVF9UQUdfQVRUQUNITUVOVDoKLSAqCi0gKiBnZW5lcmljIGZpbGUgYXR0YWNobWVudCAoc2FtcGxlKSAoc2FtcGxlIHRhZ2xpc3Qgc2hvdWxkIHNwZWNpZnkgdGhlIGNvbnRlbnQKLSAqIHR5cGUgYW5kIGlmIHBvc3NpYmxlIHNldCAiZmlsZW5hbWUiIHRvIHRoZSBmaWxlIG5hbWUgb2YgdGhlCi0gKiBhdHRhY2htZW50KQotICovCi0jZGVmaW5lIEdTVF9UQUdfQVRUQUNITUVOVCAgICAgICAgICAgICAiYXR0YWNobWVudCIKLQotLyoqCi0gKiBHU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEU6Ci0gKgotICogbnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8gKGRvdWJsZSkKLSAqLwotI2RlZmluZSBHU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEUgICAgICAgImJlYXRzLXBlci1taW51dGUiCi0KLS8qKgotICogR1NUX1RBR19LRVlXT1JEUzoKLSAqCi0gKiBjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCAoc3RyaW5nKS4KLSAqLwotI2RlZmluZSBHU1RfVEFHX0tFWVdPUkRTICAgICAgICAgICAgICAgImtleXdvcmRzIgotCi0vKioKLSAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX05BTUU6Ci0gKgotICogaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yCi0gKiBwcm9kdWNlZC4gKHN0cmluZykuCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRSAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tbmFtZSIKLQotLyoqCi0gKiBHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERToKLSAqCi0gKiBnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluCi0gKiBkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciBzb3V0aGVybgotICogbGF0aXR1ZGVzKSAoZG91YmxlKS4KLSAqLwotI2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERSAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tbGF0aXR1ZGUiCi0KLS8qKgotICogR1NUX1RBR19HRU9fTE9DQVRJT05fTE9OR0lUVURFOgotICoKLSAqIGdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluCi0gKiBkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLAotICogbmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpLiAoZG91YmxlKS4KLSAqLwotI2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREUgICAgICAgICAgICAgICAiZ2VvLWxvY2F0aW9uLWxvbmdpdHVkZSIKLQotLyoqCi0gKiBHU1RfVEFHX0dFT19MT0NBVElPTl9FTEVWQVRJT046Ci0gKgotICogZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzCi0gKiBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIChkb3VibGUpLgotICovCi0jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0VMRVZBVElPTiAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tZWxldmF0aW9uIgotLyoqCi0gKiBHU1RfVEFHX0dFT19MT0NBVElPTl9DT1VOVFJZOgotICoKLSAqIFRoZSBjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCAoc3RyaW5nKS4KLSAqLwotI2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9DT1VOVFJZICAgICAgICAgICAgICAgICAiZ2VvLWxvY2F0aW9uLWNvdW50cnkiCi0vKioKLSAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NJVFk6Ci0gKgotICogVGhlIGNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIChzdHJpbmcpLgotICovCi0jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0NJVFkgICAgICAgICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tY2l0eSIKLS8qKgotICogR1NUX1RBR19HRU9fTE9DQVRJT05fU1VCTE9DQVRJT046Ci0gKgotICogQSBsb2NhdGlvbiAnc21hbGxlcicgdGhhbiBHU1RfVEFHX0dFT19MT0NBVElPTl9DSVRZIHRoYXQgc3BlY2lmaWVzIGJldHRlcgotICogd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkLiAoZS5nLiB0aGUgbmVpZ2hib3Job29kKSAoc3RyaW5nKS4KLSAqCi0gKiBUaGlzIHRhZyBoYXMgYmVlbiBhZGRlZCBhcyB0aGlzIGlzIGhvdyBpdCBpcyBoYW5kbGVkL25hbWVkIGluIFhNUCdzCi0gKiBJcHRjNHhtcGNvcmUgc2NoZW1hLgotICovCi0jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX1NVQkxPQ0FUSU9OICAgICAgICAgICAgICJnZW8tbG9jYXRpb24tc3VibG9jYXRpb24iCi0vKioKLSAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX0hPUklaT05UQUxfRVJST1I6Ci0gKgotICogUmVwcmVzZW50cyB0aGUgZXhwZWN0ZWQgZXJyb3Igb24gdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgaW4KLSAqIG1ldGVycyAoZG91YmxlKS4KLSAqLwotI2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9IT1JJWk9OVEFMX0VSUk9SICAgImdlby1sb2NhdGlvbi1ob3Jpem9udGFsLWVycm9yIgotLyoqCi0gKiBHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9TUEVFRDoKLSAqCi0gKiBTcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGVuIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUuCi0gKiBSZXByZXNlbnRlZCBpbiBtL3MuIChkb3VibGUpCi0gKgotICogU2VlIGFsc28gI0dTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTgotICovCi0jZGVmaW5lIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX1NQRUVEICAgICAgICJnZW8tbG9jYXRpb24tbW92ZW1lbnQtc3BlZWQiCi0vKioKLSAqIEdTVF9UQUdfR0VPX0xPQ0FUSU9OX01PVkVNRU5UX0RJUkVDVElPTjoKLSAqCi0gKiBJbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUKLSAqIG9mIGEgbWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sCi0gKiAwIG1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSAoZG91YmxlIGZyb20gMCB0byAzNjApCi0gKgotICogU2VlIGFsc28gI0dTVF9UQUdfR0VPX0xPQ0FUSU9OX0NBUFRVUkVfRElSRUNUSU9OCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19HRU9fTE9DQVRJT05fTU9WRU1FTlRfRElSRUNUSU9OICJnZW8tbG9jYXRpb24tbW92ZW1lbnQtZGlyZWN0aW9uIgotLyoqCi0gKiBHU1RfVEFHX0dFT19MT0NBVElPTl9DQVBUVVJFX0RJUkVDVElPTjoKLSAqCi0gKiBJbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nCi0gKiBhIG1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLAotICogMCBtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UgKGRvdWJsZSBmcm9tIDAgdG8gMzYwKQotICoKLSAqIFNlZSBhbHNvICNHU1RfVEFHX0dFT19MT0NBVElPTl9NT1ZFTUVOVF9ESVJFQ1RJT04KLSAqLwotI2RlZmluZSBHU1RfVEFHX0dFT19MT0NBVElPTl9DQVBUVVJFX0RJUkVDVElPTiAgImdlby1sb2NhdGlvbi1jYXB0dXJlLWRpcmVjdGlvbiIKLS8qKgotICogR1NUX1RBR19TSE9XX05BTUU6Ci0gKgotICogTmFtZSBvZiB0aGUgc2hvdywgdXNlZCBmb3IgZGlzcGxheWluZyAoc3RyaW5nKQotICovCi0jZGVmaW5lIEdTVF9UQUdfU0hPV19OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICJzaG93LW5hbWUiCi0vKioKLSAqIEdTVF9UQUdfU0hPV19TT1JUTkFNRToKLSAqCi0gKiBOYW1lIG9mIHRoZSBzaG93LCB1c2VkIGZvciBzb3J0aW5nIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19TSE9XX1NPUlROQU1FICAgICAgICAgICAgICAgICAgICAgInNob3ctc29ydG5hbWUiCi0vKioKLSAqIEdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUjoKLSAqCi0gKiBOdW1iZXIgb2YgdGhlIGVwaXNvZGUgd2l0aGluIGEgc2Vhc29uL3Nob3cgKHVuc2lnbmVkIGludGVnZXIpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19TSE9XX0VQSVNPREVfTlVNQkVSICAgICAgICAgICAgICAgInNob3ctZXBpc29kZS1udW1iZXIiCi0vKioKLSAqIEdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSOgotICoKLSAqIE51bWJlciBvZiB0aGUgc2Vhc29uIG9mIGEgc2hvdy9zZXJpZXMgKHVuc2lnbmVkIGludGVnZXIpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19TSE9XX1NFQVNPTl9OVU1CRVIgICAgICAgICAgICAgICAgInNob3ctc2Vhc29uLW51bWJlciIKLS8qKgotICogR1NUX1RBR19MWVJJQ1M6Ci0gKgotICogVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEgKHN0cmluZykKLSAqLwotI2RlZmluZSBHU1RfVEFHX0xZUklDUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHlyaWNzIgotLyoqCi0gKiBHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FOgotICoKLSAqIFRoZSBjb21wb3NlcidzIG5hbWUsIHVzZWQgZm9yIHNvcnRpbmcgKHN0cmluZykKLSAqLwotI2RlZmluZSBHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FICAgICAgICAgICAgICAgICAiY29tcG9zZXItc29ydG5hbWUiCi0vKioKLSAqIEdTVF9UQUdfR1JPVVBJTkc6Ci0gKgotICogR3JvdXBzIHRvZ2V0aGVyIG1lZGlhIHRoYXQgYXJlIHJlbGF0ZWQgYW5kIHNwYW5zIG11bHRpcGxlIHRyYWNrcy4gQW4KLSAqIGV4YW1wbGUgYXJlIG11bHRpcGxlIHBpZWNlcyBvZiBhIGNvbmNlcnRvLiAoc3RyaW5nKQotICovCi0jZGVmaW5lIEdTVF9UQUdfR1JPVVBJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICJncm91cGluZyIKLS8qKgotICogR1NUX1RBR19VU0VSX1JBVElORzoKLSAqCi0gKiBSYXRpbmcgYXR0cmlidXRlZCBieSBhIHBlcnNvbiAobGlrZWx5IHRoZSBhcHBsaWNhdGlvbiB1c2VyKS4KLSAqIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyB0aGlzIG1lZGlhCi0gKiAodW5zaWduZWQgaW50IGZyb20gMCB0byAxMDApCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19VU0VSX1JBVElORyAgICAgICAgICAgICAgICAgICAgICAgInVzZXItcmF0aW5nIgotLyoqCi0gKiBHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVI6Ci0gKgotICogTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19ERVZJQ0VfTUFOVUZBQ1RVUkVSICAgICAgICAgICAgICAgImRldmljZS1tYW51ZmFjdHVyZXIiCi0vKioKLSAqIEdTVF9UQUdfREVWSUNFX01PREVMOgotICoKLSAqIE1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIChzdHJpbmcpCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19ERVZJQ0VfTU9ERUwgICAgICAgICAgICAgICAgICAgICAgImRldmljZS1tb2RlbCIKLS8qKgotICogR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FOgotICoKLSAqIE5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSAoc3RyaW5nKQotICovCi0jZGVmaW5lIEdTVF9UQUdfQVBQTElDQVRJT05fTkFNRSAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi1uYW1lIgotLyoqCi0gKiBHU1RfVEFHX0FQUExJQ0FUSU9OX0RBVEE6Ci0gKgotICogQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgKHNhbXBsZSkKLSAqCi0gKiBTb21lIGZvcm1hdHMgYWxsb3cgYXBwbGljYXRpb25zIHRvIGFkZCB0aGVpciBvd24gYXJiaXRyYXJ5IGRhdGEKLSAqIGludG8gZmlsZXMuIFRoaXMgZGF0YSBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuCi0gKi8KLSNkZWZpbmUgR1NUX1RBR19BUFBMSUNBVElPTl9EQVRBICAgICAgICAgICJhcHBsaWNhdGlvbi1kYXRhIgotLyoqCi0gKiBHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OOgotICoKLSAqIFJlcHJlc2VudHMgdGhlICdPcmllbnRhdGlvbicgdGFnIGZyb20gRVhJRi4gRGVmaW5lcyBob3cgdGhlIGltYWdlCi0gKiBzaG91bGQgYmUgcm90YXRlZCBhbmQgbWlycm9yZWQgZm9yIGRpc3BsYXkuIChzdHJpbmcpCi0gKgotICogVGhpcyB0YWcgaGFzIGEgcHJlZGVmaW5lZCBzZXQgb2YgYWxsb3dlZCB2YWx1ZXM6Ci0gKiAgICJyb3RhdGUtMCIKLSAqICAgInJvdGF0ZS05MCIKLSAqICAgInJvdGF0ZS0xODAiCi0gKiAgICJyb3RhdGUtMjcwIgotICogICAiZmxpcC1yb3RhdGUtMCIKLSAqICAgImZsaXAtcm90YXRlLTkwIgotICogICAiZmxpcC1yb3RhdGUtMTgwIgotICogICAiZmxpcC1yb3RhdGUtMjcwIgotICoKLSAqIFRoZSBuYW1pbmcgaXMgYWRvcHRlZCBhY2NvcmRpbmcgdG8gYSBwb3NzaWJsZSB0cmFuc2Zvcm1hdGlvbiB0byBwZXJmb3JtCi0gKiBvbiB0aGUgaW1hZ2UgdG8gZml4IGl0cyBvcmllbnRhdGlvbiwgb2J2aW91c2x5IGVxdWl2YWxlbnQgb3BlcmF0aW9ucyB3aWxsCi0gKiB5aWVsZCB0aGUgc2FtZSByZXN1bHQuCi0gKgotICogUm90YXRpb25zIGluZGljYXRlZCBieSB0aGUgdmFsdWVzIGFyZSBpbiBjbG9ja3dpc2UgZGlyZWN0aW9uIGFuZAotICogJ2ZsaXAnIG1lYW5zIGFuIGhvcml6b250YWwgbWlycm9yaW5nLgotICovCi0jZGVmaW5lIEdTVF9UQUdfSU1BR0VfT1JJRU5UQVRJT04gICAgICAgICAgICAiaW1hZ2Utb3JpZW50YXRpb24iCi0vKioKLSAqIEdTVF9UQUdfUFVCTElTSEVSOgotICoKLSAqIE5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciAoc3RyaW5nKQotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotI2RlZmluZSBHU1RfVEFHX1BVQkxJU0hFUiAgICAgICAgICAgICAgICAgICAgICAgICAicHVibGlzaGVyIgotLyoqCi0gKiBHU1RfVEFHX0lOVEVSUFJFVEVEX0JZOgotICoKLSAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIKLSAqIGludGVycHJldGF0aW9ucyBvZiBhbm90aGVyIGV4aXN0aW5nIHBpZWNlIChzdHJpbmcpCi0gKgotICogU2luY2U6IDEuMgotICovCi0jZGVmaW5lIEdTVF9UQUdfSU5URVJQUkVURURfQlkgICAgICAgICAgICAgICAgICAgICJpbnRlcnByZXRlZC1ieSIKLS8qKgotICogR1NUX1RBR19NSURJX0JBU0VfTk9URToKLSAqCi0gKiA8dWxpbmsgdXJsPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vdGUjTm90ZV9kZXNpZ25hdGlvbl9pbl9hY2NvcmRhbmNlX3dpdGhfb2N0YXZlX25hbWUiPk1pZGkgbm90ZSBudW1iZXI8L3VsaW5rPgotICogb2YgdGhlIGF1ZGlvIHRyYWNrLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2FtcGxlIGluc3RydW1lbnRzIGFuZCBpbiBwYXJ0aWN1bGFyCi0gKiBmb3IgbXVsdGktc2FtcGxlcy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLSNkZWZpbmUgR1NUX1RBR19NSURJX0JBU0VfTk9URSAgICAgICAgICAgICAgICAgICAgIm1pZGktYmFzZS1ub3RlIgotLyoqCi0gKiBHU1RfVEFHX1BSSVZBVEVfREFUQToKLSAqCi0gKiBBbnkgcHJpdmF0ZSBkYXRhIHRoYXQgbWF5IGJlIGNvbnRhaW5lZCBpbiB0YWdzIChzYW1wbGUpLgotICoKLSAqIEl0IGlzIHJlcHJlc2VudGVkIGJ5ICNHc3RTYW1wbGUgaW4gd2hpY2ggI0dzdEJ1ZmZlciBjb250YWlucyB0aGUKLSAqIGJpbmFyeSBkYXRhIGFuZCB0aGUgc2FtcGxlJ3MgaW5mbyAjR3N0U3RydWN0dXJlIG1heSBjb250YWluIGFueQotICogZXh0cmEgaW5mb3JtYXRpb24gdGhhdCBpZGVudGlmaWVzIHRoZSBvcmlnaW4gb3IgbWVhbmluZyBvZiB0aGUgZGF0YS4KLSAqCi0gKiBQcml2YXRlIGZyYW1lcyBpbiBJRDN2MiB0YWdzICgnUFJJVicgZnJhbWVzKSB3aWxsIGJlIHJlcHJlc2VudGVkCi0gKiB1c2luZyB0aGlzIHRhZywgaW4gd2hpY2ggY2FzZSB0aGUgR3N0U3RydWN0dXJlIHdpbGwgYmUgbmFtZWQKLSAqICJJRDNQcml2YXRlRnJhbWUiIGFuZCBjb250YWluIGEgZmllbGQgbmFtZWQgIm93bmVyIiBvZiB0eXBlIHN0cmluZwotICogd2hpY2ggY29udGFpbnMgdGhlIG93bmVyLWlkZW50aWZpY2F0aW9uIHN0cmluZyBmcm9tIHRoZSB0YWcuCi0gKgotICogU2luY2U6IDEuOAotICovCi0jZGVmaW5lIEdTVF9UQUdfUFJJVkFURV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICJwcml2YXRlLWRhdGEiCi0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0VGFnTGlzdCwgZ3N0X3RhZ19saXN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9UQUdMSVNUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhZ3NldHRlci5jIGIvZ3N0L2dzdHRhZ3NldHRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2ExY2NiLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0YWdzZXR0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQwMiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLSAqCi0gKiBnc3R0YWdzZXR0ZXIuYzogaW50ZXJmYWNlIGZvciB0YWcgc2V0dGluZyBvbiBlbGVtZW50cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3R0YWdzZXR0ZXIKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRWxlbWVudCBpbnRlcmZhY2UgdGhhdCBhbGxvd3Mgc2V0dGluZyBhbmQgcmV0cmlldmFsCi0gKiAgICAgICAgICAgICAgICAgICAgIG9mIG1lZGlhIG1ldGFkYXRhCi0gKgotICogRWxlbWVudCBpbnRlcmZhY2UgdGhhdCBhbGxvd3Mgc2V0dGluZyBvZiBtZWRpYSBtZXRhZGF0YS4KLSAqCi0gKiBFbGVtZW50cyB0aGF0IHN1cHBvcnQgY2hhbmdpbmcgYSBzdHJlYW0ncyBtZXRhZGF0YSB3aWxsIGltcGxlbWVudCB0aGlzCi0gKiBpbnRlcmZhY2UuIEV4YW1wbGVzIG9mIHN1Y2ggZWxlbWVudHMgYXJlICd2b3JiaXNlbmMnLCAndGhlb3JhZW5jJyBhbmQKLSAqICdpZDN2Mm11eCcuCi0gKiAKLSAqIElmIHlvdSBqdXN0IHdhbnQgdG8gcmV0cmlldmUgbWV0YWRhdGEgaW4geW91ciBhcHBsaWNhdGlvbiB0aGVuIGFsbCB5b3UKLSAqIG5lZWQgdG8gZG8gaXMgd2F0Y2ggZm9yIHRhZyBtZXNzYWdlcyBvbiB5b3VyIHBpcGVsaW5lJ3MgYnVzLiBUaGlzCi0gKiBpbnRlcmZhY2UgaXMgb25seSBmb3Igc2V0dGluZyBtZXRhZGF0YSwgbm90IGZvciBleHRyYWN0aW5nIGl0LiBUbyBzZXQgdGFncwotICogZnJvbSB0aGUgYXBwbGljYXRpb24sIGZpbmQgdGFnc2V0dGVyIGVsZW1lbnRzIGFuZCBzZXQgdGFncyB1c2luZyBlLmcuCi0gKiBnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzKCkgb3IgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3MoKS4gQWxzbyBjb25zaWRlcgotICogc2V0dGluZyB0aGUgI0dzdFRhZ01lcmdlTW9kZSB0aGF0IGlzIHVzZWQgZm9yIHRhZyBldmVudHMgdGhhdCBhcnJpdmUgYXQgdGhlCi0gKiB0YWdzZXR0ZXIgZWxlbWVudCAoZGVmYXVsdCBtb2RlIGlzIHRvIGtlZXAgZXhpc3RpbmcgdGFncykuCi0gKiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGRvIHRoYXQgYmVmb3JlIHRoZSBlbGVtZW50IGdvZXMgdG8gJUdTVF9TVEFURV9QQVVTRUQuCi0gKiAKLSAqIEVsZW1lbnRzIGltcGxlbWVudGluZyB0aGUgI0dzdFRhZ1NldHRlciBpbnRlcmZhY2Ugb2Z0ZW4gaGF2ZSB0byBtZXJnZQotICogYW55IHRhZ3MgcmVjZWl2ZWQgZnJvbSB1cHN0cmVhbSBhbmQgdGhlIHRhZ3Mgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiB2aWEKLSAqIHRoZSBpbnRlcmZhY2UuIFRoaXMgY2FuIGJlIGRvbmUgbGlrZSB0aGlzOgotICoKLSAqIHxbPCEtLSBsYW5ndWFnZT0iQyIgLS0+Ci0gKiBHc3RUYWdNZXJnZU1vZGUgbWVyZ2VfbW9kZTsKLSAqIGNvbnN0IEdzdFRhZ0xpc3QgKmFwcGxpY2F0aW9uX3RhZ3M7Ci0gKiBjb25zdCBHc3RUYWdMaXN0ICpldmVudF90YWdzOwotICogR3N0VGFnU2V0dGVyICp0YWdzZXR0ZXI7Ci0gKiBHc3RUYWdMaXN0ICpyZXN1bHQ7Ci0gKiAgCi0gKiB0YWdzZXR0ZXIgPSBHU1RfVEFHX1NFVFRFUiAoZWxlbWVudCk7Ci0gKiAgCi0gKiBtZXJnZV9tb2RlID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlICh0YWdzZXR0ZXIpOwotICogYXBwbGljYXRpb25fdGFncyA9IGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCAodGFnc2V0dGVyKTsKLSAqIGV2ZW50X3RhZ3MgPSAoY29uc3QgR3N0VGFnTGlzdCAqKSBlbGVtZW50LT5ldmVudF90YWdzOwotICogIAotICogR1NUX0xPR19PQkpFQ1QgKHRhZ3NldHRlciwgIm1lcmdpbmcgdGFncywgbWVyZ2UgbW9kZSA9ICVkIiwgbWVyZ2VfbW9kZSk7Ci0gKiBHU1RfTE9HX09CSkVDVCAodGFnc2V0dGVyLCAiZXZlbnQgdGFnczogJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50X3RhZ3MpOwotICogR1NUX0xPR19PQkpFQ1QgKHRhZ3NldHRlciwgInNldCAgIHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCBhcHBsaWNhdGlvbl90YWdzKTsKLSAqICAKLSAqIHJlc3VsdCA9IGdzdF90YWdfbGlzdF9tZXJnZSAoYXBwbGljYXRpb25fdGFncywgZXZlbnRfdGFncywgbWVyZ2VfbW9kZSk7Ci0gKiAgCi0gKiBHU1RfTE9HX09CSkVDVCAodGFnc2V0dGVyLCAiZmluYWwgdGFnczogJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCk7Ci0gKiBdfAotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3R0YWdzZXR0ZXIuaCIKLSNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1zdGF0aWMgR1F1YXJrIGdzdF90YWdfa2V5OwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RUYWdNZXJnZU1vZGUgbW9kZTsKLSAgR3N0VGFnTGlzdCAqbGlzdDsKLSAgR011dGV4IGxvY2s7Ci19IEdzdFRhZ0RhdGE7Ci0KLSNkZWZpbmUgR1NUX1RBR19EQVRBX0xPQ0soZGF0YSkgZ19tdXRleF9sb2NrKCZkYXRhLT5sb2NrKQotI2RlZmluZSBHU1RfVEFHX0RBVEFfVU5MT0NLKGRhdGEpIGdfbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKQotCi1HX0RFRklORV9JTlRFUkZBQ0VfV0lUSF9DT0RFIChHc3RUYWdTZXR0ZXIsIGdzdF90YWdfc2V0dGVyLCBHU1RfVFlQRV9FTEVNRU5ULAotICAgIGdzdF90YWdfa2V5ID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJnc3QtdGFnLXNldHRlci1kYXRhIik7Ci0gICAgKTsKLQotc3RhdGljIHZvaWQKLWdzdF90YWdfc2V0dGVyX2RlZmF1bHRfaW5pdCAoR3N0VGFnU2V0dGVySW50ZXJmYWNlICoga2xhc3MpCi17Ci0gIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSwgaXQncyBhIGR1bW15IGludGVyZmFjZSAqLwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RhZ19kYXRhX2ZyZWUgKGdwb2ludGVyIHApCi17Ci0gIEdzdFRhZ0RhdGEgKmRhdGEgPSAoR3N0VGFnRGF0YSAqKSBwOwotCi0gIGlmIChkYXRhLT5saXN0KQotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoZGF0YS0+bGlzdCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJmRhdGEtPmxvY2spOwotCi0gIGdfc2xpY2VfZnJlZSAoR3N0VGFnRGF0YSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyBHc3RUYWdEYXRhICoKLWdzdF90YWdfc2V0dGVyX2dldF9kYXRhIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIpCi17Ci0gIEdzdFRhZ0RhdGEgKmRhdGE7Ci0KLSAgZGF0YSA9IGdfb2JqZWN0X2dldF9xZGF0YSAoR19PQkpFQ1QgKHNldHRlciksIGdzdF90YWdfa2V5KTsKLSAgaWYgKCFkYXRhKSB7Ci0gICAgLyogbWFrZSBzdXJlIG5vIG90aGVyIHRocmVhZCBpcyBjcmVhdGluZyBhIEdzdFRhZ0RhdGEgYXQgdGhlIHNhbWUgdGltZSAqLwotICAgIHN0YXRpYyBHTXV0ZXggY3JlYXRlX211dGV4OyAvKiBubyBpbml0aWFsaXNhdGlvbiByZXF1aXJlZCAqLwotCi0gICAgZ19tdXRleF9sb2NrICgmY3JlYXRlX211dGV4KTsKLQotICAgIGRhdGEgPSBnX29iamVjdF9nZXRfcWRhdGEgKEdfT0JKRUNUIChzZXR0ZXIpLCBnc3RfdGFnX2tleSk7Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICBkYXRhID0gZ19zbGljZV9uZXcgKEdzdFRhZ0RhdGEpOwotICAgICAgZ19tdXRleF9pbml0ICgmZGF0YS0+bG9jayk7Ci0gICAgICBkYXRhLT5saXN0ID0gTlVMTDsKLSAgICAgIGRhdGEtPm1vZGUgPSBHU1RfVEFHX01FUkdFX0tFRVA7Ci0gICAgICBnX29iamVjdF9zZXRfcWRhdGFfZnVsbCAoR19PQkpFQ1QgKHNldHRlciksIGdzdF90YWdfa2V5LCBkYXRhLAotICAgICAgICAgIGdzdF90YWdfZGF0YV9mcmVlKTsKLSAgICB9Ci0KLSAgICBnX211dGV4X3VubG9jayAoJmNyZWF0ZV9tdXRleCk7Ci0gIH0KLQotICByZXR1cm4gZGF0YTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzOgotICogQHNldHRlcjogYSAjR3N0VGFnU2V0dGVyCi0gKgotICogUmVzZXQgdGhlIGludGVybmFsIHRhZ2xpc3QuIEVsZW1lbnRzIHNob3VsZCBjYWxsIHRoaXMgZnJvbSB3aXRoaW4gdGhlCi0gKiBzdGF0ZS1jaGFuZ2UgaGFuZGxlci4KLSAqLwotdm9pZAotZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncyAoR3N0VGFnU2V0dGVyICogc2V0dGVyKQotewotICBHc3RUYWdEYXRhICpkYXRhOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfU0VUVEVSIChzZXR0ZXIpKTsKLQotICBkYXRhID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X2RhdGEgKHNldHRlcik7Ci0KLSAgR1NUX1RBR19EQVRBX0xPQ0sgKGRhdGEpOwotICBpZiAoZGF0YS0+bGlzdCkgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoZGF0YS0+bGlzdCk7Ci0gICAgZGF0YS0+bGlzdCA9IE5VTEw7Ci0gIH0KLSAgR1NUX1RBR19EQVRBX1VOTE9DSyAoZGF0YSk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFnczoKLSAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgotICogQGxpc3Q6IGEgdGFnIGxpc3QgdG8gbWVyZ2UgZnJvbQotICogQG1vZGU6IHRoZSBtb2RlIHRvIG1lcmdlIHdpdGgKLSAqCi0gKiBNZXJnZXMgdGhlIGdpdmVuIGxpc3QgaW50byB0aGUgc2V0dGVyJ3MgbGlzdCB1c2luZyB0aGUgZ2l2ZW4gbW9kZS4KLSAqLwotdm9pZAotZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoR3N0VGFnU2V0dGVyICogc2V0dGVyLCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBHc3RUYWdNZXJnZU1vZGUgbW9kZSkKLXsKLSAgR3N0VGFnRGF0YSAqZGF0YTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX0xJU1QgKGxpc3QpKTsKLQotICBkYXRhID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X2RhdGEgKHNldHRlcik7Ci0KLSAgR1NUX1RBR19EQVRBX0xPQ0sgKGRhdGEpOwotICBpZiAoZGF0YS0+bGlzdCA9PSBOVUxMKSB7Ci0gICAgaWYgKG1vZGUgIT0gR1NUX1RBR19NRVJHRV9LRUVQX0FMTCkKLSAgICAgIGRhdGEtPmxpc3QgPSBnc3RfdGFnX2xpc3RfY29weSAobGlzdCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3RhZ19saXN0X2luc2VydCAoZGF0YS0+bGlzdCwgbGlzdCwgbW9kZSk7Ci0gIH0KLSAgR1NUX1RBR19EQVRBX1VOTE9DSyAoZGF0YSk7Ci19Ci0KLS8qKgotICogZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3M6Ci0gKiBAc2V0dGVyOiBhICNHc3RUYWdTZXR0ZXIKLSAqIEBtb2RlOiB0aGUgbW9kZSB0byB1c2UKLSAqIEB0YWc6IHRhZyB0byBzZXQKLSAqIEAuLi46IG1vcmUgdGFnIC8gdmFsdWUgcGFpcnMgdG8gc2V0Ci0gKgotICogQWRkcyB0aGUgZ2l2ZW4gdGFnIC8gdmFsdWUgcGFpcnMgb24gdGhlIHNldHRlciB1c2luZyB0aGUgZ2l2ZW4gbWVyZ2UgbW9kZS4KLSAqIFRoZSBsaXN0IG11c3QgYmUgdGVybWluYXRlZCB3aXRoICVOVUxMLgotICovCi12b2lkCi1nc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoR3N0VGFnU2V0dGVyICogc2V0dGVyLCBHc3RUYWdNZXJnZU1vZGUgbW9kZSwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgLi4uKQotewotICB2YV9saXN0IGFyZ3M7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBR19TRVRURVIgKHNldHRlcikpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfVEFHX01PREVfSVNfVkFMSUQgKG1vZGUpKTsKLQotICB2YV9zdGFydCAoYXJncywgdGFnKTsKLSAgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3QgKHNldHRlciwgbW9kZSwgdGFnLCBhcmdzKTsKLSAgdmFfZW5kIChhcmdzKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlczoKLSAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgotICogQG1vZGU6IHRoZSBtb2RlIHRvIHVzZQotICogQHRhZzogdGFnIHRvIHNldAotICogQC4uLjogbW9yZSB0YWcgLyBHVmFsdWUgcGFpcnMgdG8gc2V0Ci0gKgotICogQWRkcyB0aGUgZ2l2ZW4gdGFnIC8gR1ZhbHVlIHBhaXJzIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuCi0gKiBUaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCAlTlVMTC4KLSAqLwotdm9pZAotZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWx1ZXMgKEdzdFRhZ1NldHRlciAqIHNldHRlciwgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfU0VUVEVSIChzZXR0ZXIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7Ci0KLSAgdmFfc3RhcnQgKGFyZ3MsIHRhZyk7Ci0gIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcyAoc2V0dGVyLCBtb2RlLCB0YWcsIGFyZ3MpOwotICB2YV9lbmQgKGFyZ3MpOwotfQotCi0vKioKLSAqIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0OgotICogQHNldHRlcjogYSAjR3N0VGFnU2V0dGVyCi0gKiBAbW9kZTogdGhlIG1vZGUgdG8gdXNlCi0gKiBAdGFnOiB0YWcgdG8gc2V0Ci0gKiBAdmFyX2FyZ3M6IHRhZyAvIHZhbHVlIHBhaXJzIHRvIHNldAotICoKLSAqIEFkZHMgdGhlIGdpdmVuIHRhZyAvIHZhbHVlIHBhaXJzIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuCi0gKiBUaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCAlTlVMTC4KLSAqLwotdm9pZAotZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3QgKEdzdFRhZ1NldHRlciAqIHNldHRlciwgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIHZhX2xpc3QgdmFyX2FyZ3MpCi17Ci0gIEdzdFRhZ0RhdGEgKmRhdGE7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBR19TRVRURVIgKHNldHRlcikpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfVEFHX01PREVfSVNfVkFMSUQgKG1vZGUpKTsKLQotICBkYXRhID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X2RhdGEgKHNldHRlcik7Ci0KLSAgR1NUX1RBR19EQVRBX0xPQ0sgKGRhdGEpOwotICBpZiAoIWRhdGEtPmxpc3QpCi0gICAgZGF0YS0+bGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgZ3N0X3RhZ19saXN0X2FkZF92YWxpc3QgKGRhdGEtPmxpc3QsIG1vZGUsIHRhZywgdmFyX2FyZ3MpOwotCi0gIEdTVF9UQUdfREFUQV9VTkxPQ0sgKGRhdGEpOwotfQotCi0vKioKLSAqIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlczoKLSAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgotICogQG1vZGU6IHRoZSBtb2RlIHRvIHVzZQotICogQHRhZzogdGFnIHRvIHNldAotICogQHZhcl9hcmdzOiB0YWcgLyBHVmFsdWUgcGFpcnMgdG8gc2V0Ci0gKgotICogQWRkcyB0aGUgZ2l2ZW4gdGFnIC8gR1ZhbHVlIHBhaXJzIG9uIHRoZSBzZXR0ZXIgdXNpbmcgdGhlIGdpdmVuIG1lcmdlIG1vZGUuCi0gKiBUaGUgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCAlTlVMTC4KLSAqLwotdm9pZAotZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ192YWxpc3RfdmFsdWVzIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIsCi0gICAgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsIGNvbnN0IGdjaGFyICogdGFnLCB2YV9saXN0IHZhcl9hcmdzKQotewotICBHc3RUYWdEYXRhICpkYXRhOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQUdfU0VUVEVSIChzZXR0ZXIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1RBR19NT0RFX0lTX1ZBTElEIChtb2RlKSk7Ci0KLSAgZGF0YSA9IGdzdF90YWdfc2V0dGVyX2dldF9kYXRhIChzZXR0ZXIpOwotCi0gIEdTVF9UQUdfREFUQV9MT0NLIChkYXRhKTsKLQotICBpZiAoIWRhdGEtPmxpc3QpCi0gICAgZGF0YS0+bGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgZ3N0X3RhZ19saXN0X2FkZF92YWxpc3RfdmFsdWVzIChkYXRhLT5saXN0LCBtb2RlLCB0YWcsIHZhcl9hcmdzKTsKLQotICBHU1RfVEFHX0RBVEFfVU5MT0NLIChkYXRhKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlOgotICogQHNldHRlcjogYSAjR3N0VGFnU2V0dGVyCi0gKiBAbW9kZTogdGhlIG1vZGUgdG8gdXNlCi0gKiBAdGFnOiB0YWcgdG8gc2V0Ci0gKiBAdmFsdWU6IEdWYWx1ZSB0byBzZXQgZm9yIHRoZSB0YWcKLSAqCi0gKiBBZGRzIHRoZSBnaXZlbiB0YWcgLyBHVmFsdWUgcGFpciBvbiB0aGUgc2V0dGVyIHVzaW5nIHRoZSBnaXZlbiBtZXJnZSBtb2RlLgotICovCi12b2lkCi1nc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIsCi0gICAgR3N0VGFnTWVyZ2VNb2RlIG1vZGUsIGNvbnN0IGdjaGFyICogdGFnLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR3N0VGFnRGF0YSAqZGF0YTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOwotCi0gIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKLQotICBHU1RfVEFHX0RBVEFfTE9DSyAoZGF0YSk7Ci0KLSAgaWYgKCFkYXRhLT5saXN0KQotICAgIGRhdGEtPmxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gIGdzdF90YWdfbGlzdF9hZGRfdmFsdWUgKGRhdGEtPmxpc3QsIG1vZGUsIHRhZywgdmFsdWUpOwotCi0gIEdTVF9UQUdfREFUQV9VTkxPQ0sgKGRhdGEpOwotfQotCi0vKioKLSAqIGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdDoKLSAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgotICoKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGlzdCBvZiB0YWdzIHRoZSBzZXR0ZXIgdXNlcy4gIFRoZSBsaXN0IHNob3VsZCBub3QgYmUKLSAqIG1vZGlmaWVkIG9yIGZyZWVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHRocmVhZC1zYWZlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiBhIGN1cnJlbnQgc25hcHNob3Qgb2YgdGhlCi0gKiAgICAgICAgICB0YWdsaXN0IHVzZWQgaW4gdGhlIHNldHRlciBvciAlTlVMTCBpZiBub25lIGlzIHVzZWQuCi0gKi8KLWNvbnN0IEdzdFRhZ0xpc3QgKgotZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0IChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGdzdF90YWdfc2V0dGVyX2dldF9kYXRhIChzZXR0ZXIpLT5saXN0OwotfQotCi0vKioKLSAqIGdzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZToKLSAqIEBzZXR0ZXI6IGEgI0dzdFRhZ1NldHRlcgotICogQG1vZGU6IFRoZSBtb2RlIHdpdGggd2hpY2ggdGFncyBhcmUgYWRkZWQKLSAqCi0gKiBTZXRzIHRoZSBnaXZlbiBtZXJnZSBtb2RlIHRoYXQgaXMgdXNlZCBmb3IgYWRkaW5nIHRhZ3MgZnJvbSBldmVudHMgdG8gdGFncwotICogc3BlY2lmaWVkIGJ5IHRoaXMgaW50ZXJmYWNlLiBUaGUgZGVmYXVsdCBpcyAjR1NUX1RBR19NRVJHRV9LRUVQLCB3aGljaCBrZWVwcwotICogdGhlIHRhZ3Mgc2V0IHdpdGggdGhpcyBpbnRlcmZhY2UgYW5kIGRpc2NhcmRzIHRhZ3MgZnJvbSBldmVudHMuCi0gKi8KLXZvaWQKLWdzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZSAoR3N0VGFnU2V0dGVyICogc2V0dGVyLCBHc3RUYWdNZXJnZU1vZGUgbW9kZSkKLXsKLSAgR3N0VGFnRGF0YSAqZGF0YTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UQUdfTU9ERV9JU19WQUxJRCAobW9kZSkpOwotCi0gIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKLQotICBHU1RfVEFHX0RBVEFfTE9DSyAoZGF0YSk7Ci0gIGRhdGEtPm1vZGUgPSBtb2RlOwotICBHU1RfVEFHX0RBVEFfVU5MT0NLIChkYXRhKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGU6Ci0gKiBAc2V0dGVyOiBhICNHc3RUYWdTZXR0ZXIKLSAqCi0gKiBRdWVyaWVzIHRoZSBtb2RlIGJ5IHdoaWNoIHRhZ3MgaW5zaWRlIHRoZSBzZXR0ZXIgYXJlIG92ZXJ3cml0dGVuIGJ5IHRhZ3MKLSAqIGZyb20gZXZlbnRzCi0gKgotICogUmV0dXJuczogdGhlIG1lcmdlIG1vZGUgdXNlZCBpbnNpZGUgdGhlIGVsZW1lbnQuCi0gKi8KLUdzdFRhZ01lcmdlTW9kZQotZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIpCi17Ci0gIEdzdFRhZ01lcmdlTW9kZSBtb2RlOwotICBHc3RUYWdEYXRhICpkYXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFHX1NFVFRFUiAoc2V0dGVyKSwgR1NUX1RBR19NRVJHRV9VTkRFRklORUQpOwotCi0gIGRhdGEgPSBnc3RfdGFnX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKLQotICBHU1RfVEFHX0RBVEFfTE9DSyAoZGF0YSk7Ci0gIG1vZGUgPSBkYXRhLT5tb2RlOwotICBHU1RfVEFHX0RBVEFfVU5MT0NLIChkYXRhKTsKLQotICByZXR1cm4gbW9kZTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3R0YWdzZXR0ZXIuaCBiL2dzdC9nc3R0YWdzZXR0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA5ZmM1MC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dGFnc2V0dGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0gKgotICogZ3N0dGFnc2V0dGVyLmg6IEludGVyZmFjZXMgZm9yIHRhZ2dpbmcKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1RBR19TRVRURVJfSF9fCi0jZGVmaW5lIF9fR1NUX1RBR19TRVRURVJfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9UQUdfU0VUVEVSICAgICAgICAgICAgIChnc3RfdGFnX3NldHRlcl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RBR19TRVRURVIob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9UQUdfU0VUVEVSLCBHc3RUYWdTZXR0ZXIpKQotI2RlZmluZSBHU1RfSVNfVEFHX1NFVFRFUihvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1RBR19TRVRURVIpKQotI2RlZmluZSBHU1RfVEFHX1NFVFRFUl9HRVRfSU5URVJGQUNFKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfSU5URVJGQUNFICgob2JqKSwgR1NUX1RZUEVfVEFHX1NFVFRFUiwgR3N0VGFnU2V0dGVySW50ZXJmYWNlKSkKLQotLyoqCi0gKiBHc3RUYWdTZXR0ZXI6Ci0gKgotICogT3BhcXVlICNHc3RUYWdTZXR0ZXIgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RUYWdTZXR0ZXIgICAgICAgICAgICAgICAgICAgIEdzdFRhZ1NldHRlcjsgLyogRHVtbXkgdHlwZWRlZiAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRhZ1NldHRlckludGVyZmFjZSAgICAgICAgICAgR3N0VGFnU2V0dGVySW50ZXJmYWNlOwotCi0vKioKLSAqIEdzdFRhZ1NldHRlckludGVyZmFjZToKLSAqIEBnX2lmYWNlOiBwYXJlbnQgaW50ZXJmYWNlIHR5cGUuCi0gKgotICogI0dzdFRhZ1NldHRlckludGVyZmFjZSBpbnRlcmZhY2UuCi0gKi8KLS8qIHVzZSBhbiBlbXB0eSBpbnRlcmZhY2UgaGVyZSB0byBhbGxvdyBkZXRlY3Rpb24gb2YgZWxlbWVudHMgdXNpbmcgdXNlci1zZXQKLSAgIHRhZ3MgKi8KLXN0cnVjdCBfR3N0VGFnU2V0dGVySW50ZXJmYWNlCi17Ci0gIEdUeXBlSW50ZXJmYWNlIGdfaWZhY2U7Ci0KLSAgLyogc2lnbmFscyAqLwotCi0gIC8qIHZpcnR1YWwgdGFibGUgKi8KLX07Ci0KLUdUeXBlICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9nZXRfdHlwZSAgICAgICAgICAgICAodm9pZCk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzICAgICAgICAgICAgIChHc3RUYWdTZXR0ZXIgKiBzZXR0ZXIpOwotCi12b2lkICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAgICAgICAgICAgKEdzdFRhZ1NldHRlciAqICAgICBzZXR0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICAgbW9kZSk7Ci12b2lkICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3MgICAgICAgICAgICAgKEdzdFRhZ1NldHRlciAqICAgICBzZXR0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRhZ01lcmdlTW9kZSAgICBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqICAgICAgdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlcyAgICAgICAoR3N0VGFnU2V0dGVyICogICAgIHNldHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFnTWVyZ2VNb2RlICAgIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogICAgICB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKLQotdm9pZCAgICAgICAgICAgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0ICAgICAgIChHc3RUYWdTZXR0ZXIgKiAgICAgc2V0dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICAgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiAgICAgIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgICAgIHZhcl9hcmdzKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcyhHc3RUYWdTZXR0ZXIgKiAgICAgc2V0dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICAgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiAgICAgIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCAgICAgICAgICAgIHZhcl9hcmdzKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWUgICAgICAgIChHc3RUYWdTZXR0ZXIgKiAgICAgc2V0dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICAgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiAgICAgIHRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICogICAgIHZhbHVlKTsKLQotY29uc3QgR3N0VGFnTGlzdCAqCi0gICAgICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0ICAgICAgICAgIChHc3RUYWdTZXR0ZXIgKiAgICBzZXR0ZXIpOwotCi12b2lkICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlICAgIChHc3RUYWdTZXR0ZXIgKiAgICBzZXR0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUYWdNZXJnZU1vZGUgICBtb2RlKTsKLUdzdFRhZ01lcmdlTW9kZSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgICAgKEdzdFRhZ1NldHRlciAqICAgIHNldHRlcik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9UQUdfU0VUVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhc2suYyBiL2dzdC9nc3R0YXNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZjE3YTcuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHRhc2suYworKysgL2Rldi9udWxsCkBAIC0xLDg1OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdHRhc2suYzogU3RyZWFtaW5nIHRhc2tzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHRhc2sKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQWJzdHJhY3Rpb24gb2YgR1N0cmVhbWVyIHN0cmVhbWluZyB0aHJlYWRzLgotICogQHNlZV9hbHNvOiAjR3N0RWxlbWVudCwgI0dzdFBhZAotICoKLSAqICNHc3RUYXNrIGlzIHVzZWQgYnkgI0dzdEVsZW1lbnQgYW5kICNHc3RQYWQgdG8gcHJvdmlkZSB0aGUgZGF0YSBwYXNzaW5nCi0gKiB0aHJlYWRzIGluIGEgI0dzdFBpcGVsaW5lLgotICoKLSAqIEEgI0dzdFBhZCB3aWxsIHR5cGljYWxseSBzdGFydCBhICNHc3RUYXNrIHRvIHB1c2ggb3IgcHVsbCBkYXRhIHRvL2Zyb20gdGhlCi0gKiBwZWVyIHBhZHMuIE1vc3Qgc291cmNlIGVsZW1lbnRzIHN0YXJ0IGEgI0dzdFRhc2sgdG8gcHVzaCBkYXRhLiBJbiBzb21lIGNhc2VzCi0gKiBhIGRlbXV4ZXIgZWxlbWVudCBjYW4gc3RhcnQgYSAjR3N0VGFzayB0byBwdWxsIGRhdGEgZnJvbSBhIHBlZXIgZWxlbWVudC4gVGhpcwotICogaXMgdHlwaWNhbGx5IGRvbmUgd2hlbiB0aGUgZGVtdXhlciBjYW4gcGVyZm9ybSByYW5kb20gYWNjZXNzIG9uIHRoZSB1cHN0cmVhbQotICogcGVlciBlbGVtZW50IGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZS4KLSAqCi0gKiBBbHRob3VnaCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZXhpc3Qgb24gI0dzdFBhZCB0byBzdGFydC9wYXVzZS9zdG9wIHRhc2tzLCBpdAotICogbWlnaHQgc29tZXRpbWVzIGJlIG5lZWRlZCB0byBjcmVhdGUgYSAjR3N0VGFzayBtYW51YWxseSBpZiBpdCBpcyBub3QgcmVsYXRlZCB0bwotICogYSAjR3N0UGFkLgotICoKLSAqIEJlZm9yZSB0aGUgI0dzdFRhc2sgY2FuIGJlIHJ1biwgaXQgbmVlZHMgYSAjR1JlY011dGV4IHRoYXQgY2FuIGJlIHNldCB3aXRoCi0gKiBnc3RfdGFza19zZXRfbG9jaygpLgotICoKLSAqIFRoZSB0YXNrIGNhbiBiZSBzdGFydGVkLCBwYXVzZWQgYW5kIHN0b3BwZWQgd2l0aCBnc3RfdGFza19zdGFydCgpLCBnc3RfdGFza19wYXVzZSgpCi0gKiBhbmQgZ3N0X3Rhc2tfc3RvcCgpIHJlc3BlY3RpdmVseSBvciB3aXRoIHRoZSBnc3RfdGFza19zZXRfc3RhdGUoKSBmdW5jdGlvbi4KLSAqCi0gKiBBICNHc3RUYXNrIHdpbGwgcmVwZWF0ZWRseSBjYWxsIHRoZSAjR3N0VGFza0Z1bmN0aW9uIHdpdGggdGhlIHVzZXIgZGF0YQotICogdGhhdCB3YXMgcHJvdmlkZWQgd2hlbiBjcmVhdGluZyB0aGUgdGFzayB3aXRoIGdzdF90YXNrX25ldygpLiBXaGlsZSBjYWxsaW5nCi0gKiB0aGUgZnVuY3Rpb24gaXQgd2lsbCBhY3F1aXJlIHRoZSBwcm92aWRlZCBsb2NrLiBUaGUgcHJvdmlkZWQgbG9jayBpcyByZWxlYXNlZAotICogd2hlbiB0aGUgdGFzayBwYXVzZXMgb3Igc3RvcHMuCi0gKgotICogU3RvcHBpbmcgYSB0YXNrIHdpdGggZ3N0X3Rhc2tfc3RvcCgpIHdpbGwgbm90IGltbWVkaWF0ZWx5IG1ha2Ugc3VyZSB0aGUgdGFzayBpcwotICogbm90IHJ1bm5pbmcgYW55bW9yZS4gVXNlIGdzdF90YXNrX2pvaW4oKSB0byBtYWtlIHN1cmUgdGhlIHRhc2sgaXMgY29tcGxldGVseQotICogc3RvcHBlZCBhbmQgdGhlIHRocmVhZCBpcyBzdG9wcGVkLgotICoKLSAqIEFmdGVyIGNyZWF0aW5nIGEgI0dzdFRhc2ssIHVzZSBnc3Rfb2JqZWN0X3VucmVmKCkgdG8gZnJlZSBpdHMgcmVzb3VyY2VzLiBUaGlzIGNhbgotICogb25seSBiZSBkb25lIHdoZW4gdGhlIHRhc2sgaXMgbm90IHJ1bm5pbmcgYW55bW9yZS4KLSAqCi0gKiBUYXNrIGZ1bmN0aW9ucyBjYW4gc2VuZCBhICNHc3RNZXNzYWdlIHRvIHNlbmQgb3V0LW9mLWJhbmQgZGF0YSB0byB0aGUKLSAqIGFwcGxpY2F0aW9uLiBUaGUgYXBwbGljYXRpb24gY2FuIHJlY2VpdmUgbWVzc2FnZXMgZnJvbSB0aGUgI0dzdEJ1cyBpbiBpdHMKLSAqIG1haW5sb29wLgotICoKLSAqIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHRoZSB0YXNrIHdpbGwgY29uZmlndXJlIGl0cyBvYmplY3QgbmFtZSBhcyB0aGUgdGhyZWFkCi0gKiBuYW1lIG9uIExpbnV4LiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBvYmplY3QgbmFtZSBzaG91bGQgYmUgY29uZmlndXJlZCBiZWZvcmUgdGhlCi0gKiB0YXNrIGlzIHN0YXJ0ZWQ7IGNoYW5naW5nIHRoZSBvYmplY3QgbmFtZSBhZnRlciB0aGUgdGFzayBoYXMgYmVlbiBzdGFydGVkLCBoYXMKLSAqIG5vIGVmZmVjdCBvbiB0aGUgdGhyZWFkIG5hbWUuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0dGFzay5oIgotI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBIQVZFX1NZU19QUkNUTF9ICi0jaW5jbHVkZSA8c3lzL3ByY3RsLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfUFRIUkVBRF9TRVROQU1FX05QX1dJVEhPVVRfVElECi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHRhc2tfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHRhc2tfZGVidWcpCi0KLSNkZWZpbmUgU0VUX1RBU0tfU1RBVEUodCxzKSAoZ19hdG9taWNfaW50X3NldCAoJkdTVF9UQVNLX1NUQVRFKHQpLCAocykpKQotI2RlZmluZSBHRVRfVEFTS19TVEFURSh0KSAgICgoR3N0VGFza1N0YXRlKSBnX2F0b21pY19pbnRfZ2V0ICgmR1NUX1RBU0tfU1RBVEUodCkpKQotCi0jZGVmaW5lIEdTVF9UQVNLX0dFVF9QUklWQVRFKG9iaikgIFwKLSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9UQVNLLCBHc3RUYXNrUHJpdmF0ZSkpCi0KLXN0cnVjdCBfR3N0VGFza1ByaXZhdGUKLXsKLSAgLyogY2FsbGJhY2tzIGZvciBtYW5hZ2luZyB0aGUgdGhyZWFkIG9mIHRoaXMgdGFzayAqLwotICBHc3RUYXNrVGhyZWFkRnVuYyBlbnRlcl9mdW5jOwotICBncG9pbnRlciBlbnRlcl91c2VyX2RhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5IGVudGVyX25vdGlmeTsKLQotICBHc3RUYXNrVGhyZWFkRnVuYyBsZWF2ZV9mdW5jOwotICBncG9pbnRlciBsZWF2ZV91c2VyX2RhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5IGxlYXZlX25vdGlmeTsKLQotICAvKiBjb25maWd1cmVkIHBvb2wgKi8KLSAgR3N0VGFza1Bvb2wgKnBvb2w7Ci0KLSAgLyogcmVtZW1iZXIgdGhlIHBvb2wgYW5kIGlkIHRoYXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuICovCi0gIGdwb2ludGVyIGlkOwotICBHc3RUYXNrUG9vbCAqcG9vbF9pZDsKLX07Ci0KLSNpZmRlZiBfTVNDX1ZFUgotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1zdHJ1Y3QgX1RIUkVBRE5BTUVfSU5GTwotewotICBEV09SRCBkd1R5cGU7ICAgICAgICAgICAgICAgICAvLyBtdXN0IGJlIDB4MTAwMAotICBMUENTVFIgc3pOYW1lOyAgICAgICAgICAgICAgICAvLyBwb2ludGVyIHRvIG5hbWUgKGluIHVzZXIgYWRkciBzcGFjZSkKLSAgRFdPUkQgZHdUaHJlYWRJRDsgICAgICAgICAgICAgLy8gdGhyZWFkIElEICgtMT1jYWxsZXIgdGhyZWFkKQotICBEV09SRCBkd0ZsYWdzOyAgICAgICAgICAgICAgICAvLyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSB6ZXJvCi19OwotdHlwZWRlZiBzdHJ1Y3QgX1RIUkVBRE5BTUVfSU5GTyBUSFJFQUROQU1FX0lORk87Ci0KLXZvaWQKLVNldFRocmVhZE5hbWUgKERXT1JEIGR3VGhyZWFkSUQsIExQQ1NUUiBzelRocmVhZE5hbWUpCi17Ci0gIFRIUkVBRE5BTUVfSU5GTyBpbmZvOwotICBpbmZvLmR3VHlwZSA9IDB4MTAwMDsKLSAgaW5mby5zek5hbWUgPSBzelRocmVhZE5hbWU7Ci0gIGluZm8uZHdUaHJlYWRJRCA9IGR3VGhyZWFkSUQ7Ci0gIGluZm8uZHdGbGFncyA9IDA7Ci0KLSAgX190cnkgewotICAgIFJhaXNlRXhjZXB0aW9uICgweDQwNkQxMzg4LCAwLCBzaXplb2YgKGluZm8pIC8gc2l6ZW9mIChEV09SRCksCi0gICAgICAgIChEV09SRCAqKSAmIGluZm8pOwotICB9Ci0gIF9fZXhjZXB0IChFWENFUFRJT05fQ09OVElOVUVfRVhFQ1VUSU9OKSB7Ci0gIH0KLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBnc3RfdGFza19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF90YXNrX2Z1bmMgKEdzdFRhc2sgKiB0YXNrKTsKLQotc3RhdGljIEdNdXRleCBwb29sX2xvY2s7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAoteyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh0YXNrX2RlYnVnLCAidGFzayIsIDAsICJQcm9jZXNzaW5nIHRhc2tzIik7IFwKLX0KLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFRhc2ssIGdzdF90YXNrLCBHU1RfVFlQRV9PQkpFQ1QsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQKLWluaXRfa2xhc3NfcG9vbCAoR3N0VGFza0NsYXNzICoga2xhc3MpCi17Ci0gIGdfbXV0ZXhfbG9jayAoJnBvb2xfbG9jayk7Ci0gIGlmIChrbGFzcy0+cG9vbCkgewotICAgIGdzdF90YXNrX3Bvb2xfY2xlYW51cCAoa2xhc3MtPnBvb2wpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGtsYXNzLT5wb29sKTsKLSAgfQotICBrbGFzcy0+cG9vbCA9IGdzdF90YXNrX3Bvb2xfbmV3ICgpOwotICAvKiBDbGFzc2VzIGFyZSBuZXZlciBkZXN0cm95ZWQgc28gdGhpcyByZWYgd2lsbCBuZXZlciBiZSBkcm9wcGVkICovCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGtsYXNzLT5wb29sLCBHU1RfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCk7Ci0gIGdzdF90YXNrX3Bvb2xfcHJlcGFyZSAoa2xhc3MtPnBvb2wsIE5VTEwpOwotICBnX211dGV4X3VubG9jayAoJnBvb2xfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGFza19jbGFzc19pbml0IChHc3RUYXNrQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0VGFza1ByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF90YXNrX2ZpbmFsaXplOwotCi0gIGluaXRfa2xhc3NfcG9vbCAoa2xhc3MpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rhc2tfaW5pdCAoR3N0VGFzayAqIHRhc2spCi17Ci0gIEdzdFRhc2tDbGFzcyAqa2xhc3M7Ci0KLSAga2xhc3MgPSBHU1RfVEFTS19HRVRfQ0xBU1MgKHRhc2spOwotCi0gIHRhc2stPnByaXYgPSBHU1RfVEFTS19HRVRfUFJJVkFURSAodGFzayk7Ci0gIHRhc2stPnJ1bm5pbmcgPSBGQUxTRTsKLSAgdGFzay0+dGhyZWFkID0gTlVMTDsKLSAgdGFzay0+bG9jayA9IE5VTEw7Ci0gIGdfY29uZF9pbml0ICgmdGFzay0+Y29uZCk7Ci0gIFNFVF9UQVNLX1NUQVRFICh0YXNrLCBHU1RfVEFTS19TVE9QUEVEKTsKLQotICAvKiB1c2UgdGhlIGRlZmF1bHQga2xhc3MgcG9vbCBmb3IgdGhpcyB0YXNrLCB1c2VycyBjYW4KLSAgICogb3ZlcnJpZGUgdGhpcyBsYXRlciAqLwotICBnX211dGV4X2xvY2sgKCZwb29sX2xvY2spOwotICB0YXNrLT5wcml2LT5wb29sID0gZ3N0X29iamVjdF9yZWYgKGtsYXNzLT5wb29sKTsKLSAgZ19tdXRleF91bmxvY2sgKCZwb29sX2xvY2spOwotCi0gIC8qIGNsZWFyIGZsb2F0aW5nIGZsYWcgKi8KLSAgZ3N0X29iamVjdF9yZWZfc2luayAodGFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGFza19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VGFzayAqdGFzayA9IEdTVF9UQVNLIChvYmplY3QpOwotICBHc3RUYXNrUHJpdmF0ZSAqcHJpdiA9IHRhc2stPnByaXY7Ci0KLSAgR1NUX0RFQlVHICgidGFzayAlcCBmaW5hbGl6ZSIsIHRhc2spOwotCi0gIGlmIChwcml2LT5lbnRlcl9ub3RpZnkpCi0gICAgcHJpdi0+ZW50ZXJfbm90aWZ5IChwcml2LT5lbnRlcl91c2VyX2RhdGEpOwotCi0gIGlmIChwcml2LT5sZWF2ZV9ub3RpZnkpCi0gICAgcHJpdi0+bGVhdmVfbm90aWZ5IChwcml2LT5sZWF2ZV91c2VyX2RhdGEpOwotCi0gIGlmICh0YXNrLT5ub3RpZnkpCi0gICAgdGFzay0+bm90aWZ5ICh0YXNrLT51c2VyX2RhdGEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHByaXYtPnBvb2wpOwotCi0gIC8qIHRhc2sgdGhyZWFkIGNhbm5vdCBiZSBydW5uaW5nIGhlcmUgc2luY2UgaXQgaG9sZHMgYSByZWYKLSAgICogdG8gdGhlIHRhc2sgc28gdGhhdCB0aGUgZmluYWxpemUgY291bGQgbm90IGhhdmUgaGFwcGVuZWQgKi8KLSAgZ19jb25kX2NsZWFyICgmdGFzay0+Y29uZCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF90YXNrX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIG9iamVjdCBMT0NLICovCi1zdGF0aWMgdm9pZAotZ3N0X3Rhc2tfY29uZmlndXJlX25hbWUgKEdzdFRhc2sgKiB0YXNrKQotewotI2lmIGRlZmluZWQoSEFWRV9TWVNfUFJDVExfSCkgJiYgZGVmaW5lZChQUl9TRVRfTkFNRSkKLSAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gIGdjaGFyIHRocmVhZF9uYW1lWzE3XSA9IHsgMCwgfTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOwotICBuYW1lID0gR1NUX09CSkVDVF9OQU1FICh0YXNrKTsKLQotICAvKiBzZXQgdGhlIHRocmVhZCBuYW1lIHRvIHNvbWV0aGluZyBlYXNpbHkgaWRlbnRpZmlhYmxlICovCi0gIGlmICghc25wcmludGYgKHRocmVhZF9uYW1lLCAxNywgIiVzIiwgR1NUX1NUUl9OVUxMIChuYW1lKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0YXNrLCAiQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQgbmFtZSBmb3IgJyVzJyIsIG5hbWUpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRhc2ssICJTZXR0aW5nIHRocmVhZCBuYW1lIHRvICclcyciLCB0aHJlYWRfbmFtZSk7Ci0gICAgaWYgKHByY3RsIChQUl9TRVRfTkFNRSwgKHVuc2lnbmVkIGxvbmcgaW50KSB0aHJlYWRfbmFtZSwgMCwgMCwgMCkpCi0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0YXNrLCAiRmFpbGVkIHRvIHNldCB0aHJlYWQgbmFtZSIpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKLSNlbGlmIGRlZmluZWQoSEFWRV9QVEhSRUFEX1NFVE5BTUVfTlBfV0lUSE9VVF9USUQpCi0gIGNvbnN0IGdjaGFyICpuYW1lOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGFzayk7Ci0gIG5hbWUgPSBHU1RfT0JKRUNUX05BTUUgKHRhc2spOwotCi0gIC8qIHNldCB0aGUgdGhyZWFkIG5hbWUgdG8gc29tZXRoaW5nIGVhc2lseSBpZGVudGlmaWFibGUgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAodGFzaywgIlNldHRpbmcgdGhyZWFkIG5hbWUgdG8gJyVzJyIsIG5hbWUpOwotICBpZiAocHRocmVhZF9zZXRuYW1lX25wIChuYW1lKSkKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0YXNrLCAiRmFpbGVkIHRvIHNldCB0aHJlYWQgbmFtZSIpOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKLSNlbGlmIGRlZmluZWQgKF9NU0NfVkVSKQotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgbmFtZSA9IEdTVF9PQkpFQ1RfTkFNRSAodGFzayk7Ci0KLSAgLyogc2V0IHRoZSB0aHJlYWQgbmFtZSB0byBzb21ldGhpbmcgZWFzaWx5IGlkZW50aWZpYWJsZSAqLwotICBHU1RfREVCVUdfT0JKRUNUICh0YXNrLCAiU2V0dGluZyB0aHJlYWQgbmFtZSB0byAnJXMnIiwgbmFtZSk7Ci0gIFNldFRocmVhZE5hbWUgKC0xLCBuYW1lKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rhc2tfZnVuYyAoR3N0VGFzayAqIHRhc2spCi17Ci0gIEdSZWNNdXRleCAqbG9jazsKLSAgR1RocmVhZCAqdHNlbGY7Ci0gIEdzdFRhc2tQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSB0YXNrLT5wcml2OwotCi0gIHRzZWxmID0gZ190aHJlYWRfc2VsZiAoKTsKLQotICBHU1RfREVCVUcgKCJFbnRlcmluZyB0YXNrICVwLCB0aHJlYWQgJXAiLCB0YXNrLCB0c2VsZik7Ci0KLSAgLyogd2UgaGF2ZSB0byBncmFiIHRoZSBsb2NrIHRvIGdldCB0aGUgbXV0ZXguIFdlIGFsc28KLSAgICogbWFyayBvdXIgc3RhdGUgcnVubmluZyBzbyB0aGF0IG5vYm9keSBjYW4gbWVzcyB3aXRoCi0gICAqIHRoZSBtdXRleC4gKi8KLSAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKLSAgaWYgKEdFVF9UQVNLX1NUQVRFICh0YXNrKSA9PSBHU1RfVEFTS19TVE9QUEVEKQotICAgIGdvdG8gZXhpdDsKLSAgbG9jayA9IEdTVF9UQVNLX0dFVF9MT0NLICh0YXNrKTsKLSAgaWYgKEdfVU5MSUtFTFkgKGxvY2sgPT0gTlVMTCkpCi0gICAgZ290byBub19sb2NrOwotICB0YXNrLT50aHJlYWQgPSB0c2VsZjsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOwotCi0gIC8qIGZpcmUgdGhlIGVudGVyX2Z1bmMgY2FsbGJhY2sgd2hlbiB3ZSBuZWVkIHRvICovCi0gIGlmIChwcml2LT5lbnRlcl9mdW5jKQotICAgIHByaXYtPmVudGVyX2Z1bmMgKHRhc2ssIHRzZWxmLCBwcml2LT5lbnRlcl91c2VyX2RhdGEpOwotCi0gIC8qIGxvY2tpbmcgb3JkZXIgaXMgVEFTS19MT0NLLCBMT0NLICovCi0gIGdfcmVjX211dGV4X2xvY2sgKGxvY2spOwotICAvKiBjb25maWd1cmUgdGhlIHRocmVhZCBuYW1lIG5vdyAqLwotICBnc3RfdGFza19jb25maWd1cmVfbmFtZSAodGFzayk7Ci0KLSAgd2hpbGUgKEdfTElLRUxZIChHRVRfVEFTS19TVEFURSAodGFzaykgIT0gR1NUX1RBU0tfU1RPUFBFRCkpIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOwotICAgIHdoaWxlIChHX1VOTElLRUxZIChHU1RfVEFTS19TVEFURSAodGFzaykgPT0gR1NUX1RBU0tfUEFVU0VEKSkgewotICAgICAgZ19yZWNfbXV0ZXhfdW5sb2NrIChsb2NrKTsKLQotICAgICAgR1NUX1RBU0tfU0lHTkFMICh0YXNrKTsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAodGFzaywgIlRhc2sgZ29pbmcgdG8gcGF1c2VkIik7Ci0gICAgICBHU1RfVEFTS19XQUlUICh0YXNrKTsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAodGFzaywgIlRhc2sgcmVzdW1lIGZyb20gcGF1c2VkIik7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0gICAgICAvKiBsb2NraW5nIG9yZGVyLi4gKi8KLSAgICAgIGdfcmVjX211dGV4X2xvY2sgKGxvY2spOwotICAgICAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKLSAgICB9Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoR0VUX1RBU0tfU1RBVEUgKHRhc2spID09IEdTVF9UQVNLX1NUT1BQRUQpKSB7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOwotICAgIH0KLQotICAgIHRhc2stPmZ1bmMgKHRhc2stPnVzZXJfZGF0YSk7Ci0gIH0KLQotICBnX3JlY19tdXRleF91bmxvY2sgKGxvY2spOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGFzayk7Ci0gIHRhc2stPnRocmVhZCA9IE5VTEw7Ci0KLWV4aXQ6Ci0gIGlmIChwcml2LT5sZWF2ZV9mdW5jKSB7Ci0gICAgLyogZmlyZSB0aGUgbGVhdmVfZnVuYyBjYWxsYmFjayB3aGVuIHdlIG5lZWQgdG8uIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUKLSAgICAgKiB3ZSBzaWduYWwgdGhlIHRhc2sgYW5kIHdpdGggdGhlIHRhc2sgbG9jayByZWxlYXNlZC4gKi8KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0gICAgcHJpdi0+bGVhdmVfZnVuYyAodGFzaywgdHNlbGYsIHByaXYtPmxlYXZlX3VzZXJfZGF0YSk7Ci0gICAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKLSAgfQotICAvKiBub3cgd2UgYWxsb3cgbWVzc2luZyB3aXRoIHRoZSBsb2NrIGFnYWluIGJ5IHNldHRpbmcgdGhlIHJ1bm5pbmcgZmxhZyB0bwotICAgKiAlRkFMU0UuIFRvZ2V0aGVyIHdpdGggdGhlIFNJR05BTCB0aGlzIGlzIHRoZSBzaWduIGZvciB0aGUgX2pvaW4oKSB0bwotICAgKiBjb21wbGV0ZS4KLSAgICogTm90ZSB0aGF0IHdlIHN0aWxsIGhhdmUgbm90IGRyb3BwZWQgdGhlIGZpbmFsIHJlZiBvbiB0aGUgdGFzay4gV2UgY291bGQKLSAgICogY2hlY2sgaGVyZSBpZiB0aGVyZSBpcyBhIHBlbmRpbmcgam9pbigpIGdvaW5nIG9uIGFuZCBkcm9wIHRoZSBsYXN0IHJlZgotICAgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIGFzIHdlIGNhbiBiZSBzdXJlIHRoYXQgYSByZWYgaXMgaGVsZCBieSB0aGUKLSAgICogY2FsbGVyIG9mIHRoZSBqb2luKCkuICovCi0gIHRhc2stPnJ1bm5pbmcgPSBGQUxTRTsKLSAgR1NUX1RBU0tfU0lHTkFMICh0YXNrKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOwotCi0gIEdTVF9ERUJVRyAoIkV4aXQgdGFzayAlcCwgdGhyZWFkICVwIiwgdGFzaywgZ190aHJlYWRfc2VsZiAoKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGFzayk7Ci0gIHJldHVybjsKLQotbm9fbG9jazoKLSAgewotICAgIGdfd2FybmluZyAoInN0YXJ0aW5nIHRhc2sgd2l0aG91dCBhIGxvY2siKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfdGFza19jbGVhbnVwX2FsbDoKLSAqCi0gKiBXYWl0IGZvciBhbGwgdGFza3MgdG8gYmUgc3RvcHBlZC4gVGhpcyBpcyBtYWlubHkgdXNlZCBpbnRlcm5hbGx5Ci0gKiB0byBlbnN1cmUgcHJvcGVyIGNsZWFudXAgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGluIHRlc3Qgc3VpdGVzLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF90YXNrX2NsZWFudXBfYWxsICh2b2lkKQotewotICBHc3RUYXNrQ2xhc3MgKmtsYXNzOwotCi0gIGlmICgoa2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVlayAoR1NUX1RZUEVfVEFTSykpKSB7Ci0gICAgaW5pdF9rbGFzc19wb29sIChrbGFzcyk7Ci0gIH0KLQotICAvKiBHc3RFbGVtZW50IG93bnMgYSBHVGhyZWFkUG9vbCAqLwotICBfcHJpdl9nc3RfZWxlbWVudF9jbGVhbnVwICgpOwotfQotCi0vKioKLSAqIGdzdF90YXNrX25ldzoKLSAqIEBmdW5jOiBUaGUgI0dzdFRhc2tGdW5jdGlvbiB0byB1c2UKLSAqIEB1c2VyX2RhdGE6IFVzZXIgZGF0YSB0byBwYXNzIHRvIEBmdW5jCi0gKiBAbm90aWZ5OiB0aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIEB1c2VyX2RhdGEgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgVGFzayB0aGF0IHdpbGwgcmVwZWF0ZWRseSBjYWxsIHRoZSBwcm92aWRlZCBAZnVuYwotICogd2l0aCBAdXNlcl9kYXRhIGFzIGEgcGFyYW1ldGVyLiBUeXBpY2FsbHkgdGhlIHRhc2sgd2lsbCBydW4gaW4KLSAqIGEgbmV3IHRocmVhZC4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gY2Fubm90IGJlIGNoYW5nZWQgYWZ0ZXIgdGhlIHRhc2sgaGFzIGJlZW4gY3JlYXRlZC4gWW91Ci0gKiBtdXN0IGNyZWF0ZSBhIG5ldyAjR3N0VGFzayB0byBjaGFuZ2UgdGhlIGZ1bmN0aW9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgeWV0IGNyZWF0ZSBhbmQgc3RhcnQgYSB0aHJlYWQuIFVzZSBnc3RfdGFza19zdGFydCgpIG9yCi0gKiBnc3RfdGFza19wYXVzZSgpIHRvIGNyZWF0ZSBhbmQgc3RhcnQgdGhlIEdUaHJlYWQuCi0gKgotICogQmVmb3JlIHRoZSB0YXNrIGNhbiBiZSB1c2VkLCBhICNHUmVjTXV0ZXggbXVzdCBiZSBjb25maWd1cmVkIHVzaW5nIHRoZQotICogZ3N0X3Rhc2tfc2V0X2xvY2soKSBmdW5jdGlvbi4gVGhpcyBsb2NrIHdpbGwgYWx3YXlzIGJlIGFjcXVpcmVkIHdoaWxlCi0gKiBAZnVuYyBpcyBjYWxsZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIG5ldyAjR3N0VGFzay4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RUYXNrICoKLWdzdF90YXNrX25ldyAoR3N0VGFza0Z1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KQotewotICBHc3RUYXNrICp0YXNrOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmdW5jICE9IE5VTEwsIE5VTEwpOwotCi0gIHRhc2sgPSBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9UQVNLLCAwLCBOVUxMKTsKLSAgdGFzay0+ZnVuYyA9IGZ1bmM7Ci0gIHRhc2stPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgdGFzay0+bm90aWZ5ID0gbm90aWZ5OwotCi0gIEdTVF9ERUJVRyAoIkNyZWF0ZWQgdGFzayAlcCIsIHRhc2spOwotCi0gIHJldHVybiB0YXNrOwotfQotCi0vKioKLSAqIGdzdF90YXNrX3NldF9sb2NrOgotICogQHRhc2s6IFRoZSAjR3N0VGFzayB0byB1c2UKLSAqIEBtdXRleDogVGhlICNHUmVjTXV0ZXggdG8gdXNlCi0gKgotICogU2V0IHRoZSBtdXRleCB1c2VkIGJ5IHRoZSB0YXNrLiBUaGUgbXV0ZXggd2lsbCBiZSBhY3F1aXJlZCBiZWZvcmUKLSAqIGNhbGxpbmcgdGhlICNHc3RUYXNrRnVuY3Rpb24uCi0gKgotICogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGdzdF90YXNrX3BhdXNlKCkgb3IKLSAqIGdzdF90YXNrX3N0YXJ0KCkuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X3Rhc2tfc2V0X2xvY2sgKEdzdFRhc2sgKiB0YXNrLCBHUmVjTXV0ZXggKiBtdXRleCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBU0sgKHRhc2spKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOwotICBpZiAoR19VTkxJS0VMWSAodGFzay0+cnVubmluZykpCi0gICAgZ290byBpc19ydW5uaW5nOwotICBHU1RfSU5GTyAoInNldHRpbmcgc3RyZWFtIGxvY2sgJXAgb24gdGFzayAlcCIsIG11dGV4LCB0YXNrKTsKLSAgR1NUX1RBU0tfR0VUX0xPQ0sgKHRhc2spID0gbXV0ZXg7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1pc19ydW5uaW5nOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOwotICAgIGdfd2FybmluZyAoImNhbm5vdCBjYWxsIHNldF9sb2NrIG9uIGEgcnVubmluZyB0YXNrIik7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfdGFza19nZXRfcG9vbDoKLSAqIEB0YXNrOiBhICNHc3RUYXNrCi0gKgotICogR2V0IHRoZSAjR3N0VGFza1Bvb2wgdGhhdCB0aGlzIHRhc2sgd2lsbCB1c2UgZm9yIGl0cyBzdHJlYW1pbmcKLSAqIHRocmVhZHMuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0VGFza1Bvb2wgdXNlZCBieSBAdGFzay4gZ3N0X29iamVjdF91bnJlZigpCi0gKiBhZnRlciB1c2FnZS4KLSAqLwotR3N0VGFza1Bvb2wgKgotZ3N0X3Rhc2tfZ2V0X3Bvb2wgKEdzdFRhc2sgKiB0YXNrKQotewotICBHc3RUYXNrUG9vbCAqcmVzdWx0OwotICBHc3RUYXNrUHJpdmF0ZSAqcHJpdjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBU0sgKHRhc2spLCBOVUxMKTsKLQotICBwcml2ID0gdGFzay0+cHJpdjsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOwotICByZXN1bHQgPSBnc3Rfb2JqZWN0X3JlZiAocHJpdi0+cG9vbCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF90YXNrX3NldF9wb29sOgotICogQHRhc2s6IGEgI0dzdFRhc2sKLSAqIEBwb29sOiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdFRhc2tQb29sCi0gKgotICogU2V0IEBwb29sIGFzIHRoZSBuZXcgR3N0VGFza1Bvb2wgZm9yIEB0YXNrLiBBbnkgbmV3IHN0cmVhbWluZyB0aHJlYWRzIHRoYXQKLSAqIHdpbGwgYmUgY3JlYXRlZCBieSBAdGFzayB3aWxsIG5vdyB1c2UgQHBvb2wuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X3Rhc2tfc2V0X3Bvb2wgKEdzdFRhc2sgKiB0YXNrLCBHc3RUYXNrUG9vbCAqIHBvb2wpCi17Ci0gIEdzdFRhc2tQb29sICpvbGQ7Ci0gIEdzdFRhc2tQcml2YXRlICpwcml2OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQVNLICh0YXNrKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UQVNLX1BPT0wgKHBvb2wpKTsKLQotICBwcml2ID0gdGFzay0+cHJpdjsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOwotICBpZiAocHJpdi0+cG9vbCAhPSBwb29sKSB7Ci0gICAgb2xkID0gcHJpdi0+cG9vbDsKLSAgICBwcml2LT5wb29sID0gZ3N0X29iamVjdF9yZWYgKHBvb2wpOwotICB9IGVsc2UKLSAgICBvbGQgPSBOVUxMOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0KLSAgaWYgKG9sZCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGQpOwotfQotCi0vKioKLSAqIGdzdF90YXNrX3NldF9lbnRlcl9jYWxsYmFjazoKLSAqIEB0YXNrOiBUaGUgI0dzdFRhc2sgdG8gdXNlCi0gKiBAZW50ZXJfZnVuYzogKGluKTogYSAjR3N0VGFza1RocmVhZEZ1bmMKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gQGVudGVyX2Z1bmMKLSAqIEBub3RpZnk6IGNhbGxlZCB3aGVuIEB1c2VyX2RhdGEgaXMgbm8gbG9uZ2VyIHJlZmVyZW5jZWQKLSAqCi0gKiBDYWxsIEBlbnRlcl9mdW5jIHdoZW4gdGhlIHRhc2sgZnVuY3Rpb24gb2YgQHRhc2sgaXMgZW50ZXJlZC4gQHVzZXJfZGF0YSB3aWxsCi0gKiBiZSBwYXNzZWQgdG8gQGVudGVyX2Z1bmMgYW5kIEBub3RpZnkgd2lsbCBiZSBjYWxsZWQgd2hlbiBAdXNlcl9kYXRhIGlzIG5vCi0gKiBsb25nZXIgcmVmZXJlbmNlZC4KLSAqLwotdm9pZAotZ3N0X3Rhc2tfc2V0X2VudGVyX2NhbGxiYWNrIChHc3RUYXNrICogdGFzaywgR3N0VGFza1RocmVhZEZ1bmMgZW50ZXJfZnVuYywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKLXsKLSAgR0Rlc3Ryb3lOb3RpZnkgb2xkX25vdGlmeTsKLQotICBnX3JldHVybl9pZl9mYWlsICh0YXNrICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFTSyAodGFzaykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGFzayk7Ci0gIGlmICgob2xkX25vdGlmeSA9IHRhc2stPnByaXYtPmVudGVyX25vdGlmeSkpIHsKLSAgICBncG9pbnRlciBvbGRfZGF0YSA9IHRhc2stPnByaXYtPmVudGVyX3VzZXJfZGF0YTsKLQotICAgIHRhc2stPnByaXYtPmVudGVyX3VzZXJfZGF0YSA9IE5VTEw7Ci0gICAgdGFzay0+cHJpdi0+ZW50ZXJfbm90aWZ5ID0gTlVMTDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0KLSAgICBvbGRfbm90aWZ5IChvbGRfZGF0YSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOwotICB9Ci0gIHRhc2stPnByaXYtPmVudGVyX2Z1bmMgPSBlbnRlcl9mdW5jOwotICB0YXNrLT5wcml2LT5lbnRlcl91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIHRhc2stPnByaXYtPmVudGVyX25vdGlmeSA9IG5vdGlmeTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOwotfQotCi0vKioKLSAqIGdzdF90YXNrX3NldF9sZWF2ZV9jYWxsYmFjazoKLSAqIEB0YXNrOiBUaGUgI0dzdFRhc2sgdG8gdXNlCi0gKiBAbGVhdmVfZnVuYzogKGluKTogYSAjR3N0VGFza1RocmVhZEZ1bmMKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gQGxlYXZlX2Z1bmMKLSAqIEBub3RpZnk6IGNhbGxlZCB3aGVuIEB1c2VyX2RhdGEgaXMgbm8gbG9uZ2VyIHJlZmVyZW5jZWQKLSAqCi0gKiBDYWxsIEBsZWF2ZV9mdW5jIHdoZW4gdGhlIHRhc2sgZnVuY3Rpb24gb2YgQHRhc2sgaXMgbGVmdC4gQHVzZXJfZGF0YSB3aWxsCi0gKiBiZSBwYXNzZWQgdG8gQGxlYXZlX2Z1bmMgYW5kIEBub3RpZnkgd2lsbCBiZSBjYWxsZWQgd2hlbiBAdXNlcl9kYXRhIGlzIG5vCi0gKiBsb25nZXIgcmVmZXJlbmNlZC4KLSAqLwotdm9pZAotZ3N0X3Rhc2tfc2V0X2xlYXZlX2NhbGxiYWNrIChHc3RUYXNrICogdGFzaywgR3N0VGFza1RocmVhZEZ1bmMgbGVhdmVfZnVuYywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSkKLXsKLSAgR0Rlc3Ryb3lOb3RpZnkgb2xkX25vdGlmeTsKLQotICBnX3JldHVybl9pZl9mYWlsICh0YXNrICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFTSyAodGFzaykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGFzayk7Ci0gIGlmICgob2xkX25vdGlmeSA9IHRhc2stPnByaXYtPmxlYXZlX25vdGlmeSkpIHsKLSAgICBncG9pbnRlciBvbGRfZGF0YSA9IHRhc2stPnByaXYtPmxlYXZlX3VzZXJfZGF0YTsKLQotICAgIHRhc2stPnByaXYtPmxlYXZlX3VzZXJfZGF0YSA9IE5VTEw7Ci0gICAgdGFzay0+cHJpdi0+bGVhdmVfbm90aWZ5ID0gTlVMTDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0KLSAgICBvbGRfbm90aWZ5IChvbGRfZGF0YSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOwotICB9Ci0gIHRhc2stPnByaXYtPmxlYXZlX2Z1bmMgPSBsZWF2ZV9mdW5jOwotICB0YXNrLT5wcml2LT5sZWF2ZV91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIHRhc2stPnByaXYtPmxlYXZlX25vdGlmeSA9IG5vdGlmeTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRhc2spOwotfQotCi0vKioKLSAqIGdzdF90YXNrX2dldF9zdGF0ZToKLSAqIEB0YXNrOiBUaGUgI0dzdFRhc2sgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRhc2suCi0gKgotICogUmV0dXJuczogVGhlICNHc3RUYXNrU3RhdGUgb2YgdGhlIHRhc2sKLSAqCi0gKiBNVCBzYWZlLgotICovCi1Hc3RUYXNrU3RhdGUKLWdzdF90YXNrX2dldF9zdGF0ZSAoR3N0VGFzayAqIHRhc2spCi17Ci0gIEdzdFRhc2tTdGF0ZSByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQVNLICh0YXNrKSwgR1NUX1RBU0tfU1RPUFBFRCk7Ci0KLSAgcmVzdWx0ID0gR0VUX1RBU0tfU1RBVEUgKHRhc2spOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIG1ha2Ugc3VyZSB0aGUgdGFzayBpcyBydW5uaW5nIGFuZCBzdGFydCBhIHRocmVhZCBpZiBpdCdzIG5vdC4KLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgdGFzayBMT0NLLiAqLwotc3RhdGljIGdib29sZWFuCi1zdGFydF90YXNrIChHc3RUYXNrICogdGFzaykKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gIEdzdFRhc2tQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSB0YXNrLT5wcml2OwotCi0gIC8qIG5ldyB0YXNrLCBXZSByZWYgYmVmb3JlIHNvIHRoYXQgaXQgcmVtYWlucyBhbGl2ZSB3aGlsZQotICAgKiB0aGUgdGhyZWFkIGlzIHJ1bm5pbmcuICovCi0gIGdzdF9vYmplY3RfcmVmICh0YXNrKTsKLSAgLyogbWFyayB0YXNrIGFzIHJ1bm5pbmcgc28gdGhhdCBhIGpvaW4gd2lsbCB3YWl0IHVudGlsIHdlIHNjaGVkdWxlCi0gICAqIGFuZCBleGl0IHRoZSB0YXNrIGZ1bmN0aW9uLiAqLwotICB0YXNrLT5ydW5uaW5nID0gVFJVRTsKLQotICAvKiBwdXNoIG9uIHRoZSB0aHJlYWQgcG9vbCwgd2UgcmVtZW1iZXIgdGhlIG9yaWdpbmFsIHBvb2wgYmVjYXVzZSB0aGUgdXNlcgotICAgKiBjb3VsZCBjaGFuZ2UgaXQgbGF0ZXIgb24gYW5kIHRoZW4gd2Ugam9pbiB0byB0aGUgd3JvbmcgcG9vbC4gKi8KLSAgcHJpdi0+cG9vbF9pZCA9IGdzdF9vYmplY3RfcmVmIChwcml2LT5wb29sKTsKLSAgcHJpdi0+aWQgPQotICAgICAgZ3N0X3Rhc2tfcG9vbF9wdXNoIChwcml2LT5wb29sX2lkLCAoR3N0VGFza1Bvb2xGdW5jdGlvbikgZ3N0X3Rhc2tfZnVuYywKLSAgICAgIHRhc2ssICZlcnJvcik7Ci0KLSAgaWYgKGVycm9yICE9IE5VTEwpIHsKLSAgICBnX3dhcm5pbmcgKCJmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gICAgcmVzID0gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotCi0vKioKLSAqIGdzdF90YXNrX3NldF9zdGF0ZToKLSAqIEB0YXNrOiBhICNHc3RUYXNrCi0gKiBAc3RhdGU6IHRoZSBuZXcgdGFzayBzdGF0ZQotICoKLSAqIFNldHMgdGhlIHN0YXRlIG9mIEB0YXNrIHRvIEBzdGF0ZS4KLSAqCi0gKiBUaGUgQHRhc2sgbXVzdCBoYXZlIGEgbG9jayBhc3NvY2lhdGVkIHdpdGggaXQgdXNpbmcKLSAqIGdzdF90YXNrX3NldF9sb2NrKCkgd2hlbiBnb2luZyB0byBHU1RfVEFTS19TVEFSVEVEIG9yIEdTVF9UQVNLX1BBVVNFRCBvcgotICogdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAlRkFMU0UuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc3RhdGUgY291bGQgYmUgY2hhbmdlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90YXNrX3NldF9zdGF0ZSAoR3N0VGFzayAqIHRhc2ssIEdzdFRhc2tTdGF0ZSBzdGF0ZSkKLXsKLSAgR3N0VGFza1N0YXRlIG9sZDsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RBU0sgKHRhc2spLCBGQUxTRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodGFzaywgIkNoYW5naW5nIHRhc2sgJXAgdG8gc3RhdGUgJWQiLCB0YXNrLCBzdGF0ZSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKLSAgaWYgKHN0YXRlICE9IEdTVF9UQVNLX1NUT1BQRUQpCi0gICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9UQVNLX0dFVF9MT0NLICh0YXNrKSA9PSBOVUxMKSkKLSAgICAgIGdvdG8gbm9fbG9jazsKLQotICAvKiBpZiB0aGUgc3RhdGUgY2hhbmdlZCwgZG8gb3VyIHRoaW5nICovCi0gIG9sZCA9IEdFVF9UQVNLX1NUQVRFICh0YXNrKTsKLSAgaWYgKG9sZCAhPSBzdGF0ZSkgewotICAgIFNFVF9UQVNLX1NUQVRFICh0YXNrLCBzdGF0ZSk7Ci0gICAgc3dpdGNoIChvbGQpIHsKLSAgICAgIGNhc2UgR1NUX1RBU0tfU1RPUFBFRDoKLSAgICAgICAgLyogSWYgdGhlIHRhc2sgYWxyZWFkeSBoYXMgYSB0aHJlYWQgc2NoZWR1bGVkIHdlIGRvbid0IGhhdmUgdG8gZG8KLSAgICAgICAgICogYW55dGhpbmcuICovCi0gICAgICAgIGlmIChHX1VOTElLRUxZICghdGFzay0+cnVubmluZykpCi0gICAgICAgICAgcmVzID0gc3RhcnRfdGFzayAodGFzayk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVEFTS19QQVVTRUQ6Ci0gICAgICAgIC8qIHdoZW4gd2UgYXJlIHBhdXNlZCwgc2lnbmFsIHRvIGdvIHRvIHRoZSBuZXcgc3RhdGUgKi8KLSAgICAgICAgR1NUX1RBU0tfU0lHTkFMICh0YXNrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9UQVNLX1NUQVJURUQ6Ci0gICAgICAgIC8qIGlmIHdlIHdlcmUgc3RhcnRlZCwgd2UnbGwgZ28gdG8gdGhlIG5ldyBzdGF0ZSBhZnRlciB0aGUgbmV4dAotICAgICAgICAgKiBpdGVyYXRpb24uICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2xvY2s6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHRhc2ssICJzdGF0ZSAlZCBzZXQgb24gdGFzayB3aXRob3V0IGEgbG9jayIsIHN0YXRlKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0gICAgZ193YXJuaW5nICgidGFzayB3aXRob3V0IGEgbG9jayBjYW4ndCBiZSBzZXQgdG8gc3RhdGUgJWQiLCBzdGF0ZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3Rhc2tfc3RhcnQ6Ci0gKiBAdGFzazogVGhlICNHc3RUYXNrIHRvIHN0YXJ0Ci0gKgotICogU3RhcnRzIEB0YXNrLiBUaGUgQHRhc2sgbXVzdCBoYXZlIGEgbG9jayBhc3NvY2lhdGVkIHdpdGggaXQgdXNpbmcKLSAqIGdzdF90YXNrX3NldF9sb2NrKCkgb3IgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAlRkFMU0UuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHRhc2sgY291bGQgYmUgc3RhcnRlZC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1nYm9vbGVhbgotZ3N0X3Rhc2tfc3RhcnQgKEdzdFRhc2sgKiB0YXNrKQotewotICByZXR1cm4gZ3N0X3Rhc2tfc2V0X3N0YXRlICh0YXNrLCBHU1RfVEFTS19TVEFSVEVEKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFza19zdG9wOgotICogQHRhc2s6IFRoZSAjR3N0VGFzayB0byBzdG9wCi0gKgotICogU3RvcHMgQHRhc2suIFRoaXMgbWV0aG9kIG1lcmVseSBzY2hlZHVsZXMgdGhlIHRhc2sgdG8gc3RvcCBhbmQKLSAqIHdpbGwgbm90IHdhaXQgZm9yIHRoZSB0YXNrIHRvIGhhdmUgY29tcGxldGVseSBzdG9wcGVkLiBVc2UKLSAqIGdzdF90YXNrX2pvaW4oKSB0byBzdG9wIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB0YXNrIGNvdWxkIGJlIHN0b3BwZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90YXNrX3N0b3AgKEdzdFRhc2sgKiB0YXNrKQotewotICByZXR1cm4gZ3N0X3Rhc2tfc2V0X3N0YXRlICh0YXNrLCBHU1RfVEFTS19TVE9QUEVEKTsKLX0KLQotLyoqCi0gKiBnc3RfdGFza19wYXVzZToKLSAqIEB0YXNrOiBUaGUgI0dzdFRhc2sgdG8gcGF1c2UKLSAqCi0gKiBQYXVzZXMgQHRhc2suIFRoaXMgbWV0aG9kIGNhbiBhbHNvIGJlIGNhbGxlZCBvbiBhIHRhc2sgaW4gdGhlCi0gKiBzdG9wcGVkIHN0YXRlLCBpbiB3aGljaCBjYXNlIGEgdGhyZWFkIHdpbGwgYmUgc3RhcnRlZCBhbmQgd2lsbCByZW1haW4KLSAqIGluIHRoZSBwYXVzZWQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd2FpdCBmb3IgdGhlIHRhc2sgdG8gY29tcGxldGUKLSAqIHRoZSBwYXVzZWQgc3RhdGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHRhc2sgY291bGQgYmUgcGF1c2VkLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLWdib29sZWFuCi1nc3RfdGFza19wYXVzZSAoR3N0VGFzayAqIHRhc2spCi17Ci0gIHJldHVybiBnc3RfdGFza19zZXRfc3RhdGUgKHRhc2ssIEdTVF9UQVNLX1BBVVNFRCk7Ci19Ci0KLS8qKgotICogZ3N0X3Rhc2tfam9pbjoKLSAqIEB0YXNrOiBUaGUgI0dzdFRhc2sgdG8gam9pbgotICoKLSAqIEpvaW5zIEB0YXNrLiBBZnRlciB0aGlzIGNhbGwsIGl0IGlzIHNhZmUgdG8gdW5yZWYgdGhlIHRhc2sKLSAqIGFuZCBjbGVhbiB1cCB0aGUgbG9jayBzZXQgd2l0aCBnc3RfdGFza19zZXRfbG9jaygpLgotICoKLSAqIFRoZSB0YXNrIHdpbGwgYXV0b21hdGljYWxseSBiZSBzdG9wcGVkIHdpdGggdGhpcyBjYWxsLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIHRhc2sgZnVuY3Rpb24gYXMgdGhpcwotICogd291bGQgY2F1c2UgYSBkZWFkbG9jay4gVGhlIGZ1bmN0aW9uIHdpbGwgZGV0ZWN0IHRoaXMgYW5kIHByaW50IGEKLSAqIGdfd2FybmluZy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdGFzayBjb3VsZCBiZSBqb2luZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90YXNrX2pvaW4gKEdzdFRhc2sgKiB0YXNrKQotewotICBHVGhyZWFkICp0c2VsZjsKLSAgR3N0VGFza1ByaXZhdGUgKnByaXY7Ci0gIGdwb2ludGVyIGlkOwotICBHc3RUYXNrUG9vbCAqcG9vbCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UQVNLICh0YXNrKSwgRkFMU0UpOwotCi0gIHByaXYgPSB0YXNrLT5wcml2OwotCi0gIHRzZWxmID0gZ190aHJlYWRfc2VsZiAoKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0YXNrLCAiSm9pbmluZyB0YXNrICVwLCB0aHJlYWQgJXAiLCB0YXNrLCB0c2VsZik7Ci0KLSAgLyogd2UgZG9uJ3QgdXNlIGEgcmVhbCB0aHJlYWQgam9pbiBoZXJlIGJlY2F1c2Ugd2UgYXJlIHVzaW5nCi0gICAqIHRocmVhZCBwb29scyAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHRhc2spOwotICBpZiAoR19VTkxJS0VMWSAodHNlbGYgPT0gdGFzay0+dGhyZWFkKSkKLSAgICBnb3RvIGpvaW5pbmdfc2VsZjsKLSAgU0VUX1RBU0tfU1RBVEUgKHRhc2ssIEdTVF9UQVNLX1NUT1BQRUQpOwotICAvKiBzaWduYWwgdGhlIHN0YXRlIGNoYW5nZSBmb3Igd2hlbiBpdCB3YXMgYmxvY2tlZCBpbiBQQVVTRUQuICovCi0gIEdTVF9UQVNLX1NJR05BTCAodGFzayk7Ci0gIC8qIHdlIHNldCB0aGUgcnVubmluZyBmbGFnIHdoZW4gcHVzaGluZyB0aGUgdGFzayBvbiB0aGUgdGhyZWFkIHBvb2wuCi0gICAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGFzayBmdW5jdGlvbiBtaWdodCBub3QgYmUgY2FsbGVkIHdoZW4gd2UgdHJ5Ci0gICAqIHRvIGpvaW4gaXQgaGVyZS4gKi8KLSAgd2hpbGUgKEdfTElLRUxZICh0YXNrLT5ydW5uaW5nKSkKLSAgICBHU1RfVEFTS19XQUlUICh0YXNrKTsKLSAgLyogY2xlYW4gdGhlIHRocmVhZCAqLwotICB0YXNrLT50aHJlYWQgPSBOVUxMOwotICAvKiBnZXQgdGhlIGlkIGFuZCBwb29sIHRvIGpvaW4gKi8KLSAgcG9vbCA9IHByaXYtPnBvb2xfaWQ7Ci0gIGlkID0gcHJpdi0+aWQ7Ci0gIHByaXYtPnBvb2xfaWQgPSBOVUxMOwotICBwcml2LT5pZCA9IE5VTEw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKLQotICBpZiAocG9vbCkgewotICAgIGlmIChpZCkKLSAgICAgIGdzdF90YXNrX3Bvb2xfam9pbiAocG9vbCwgaWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodGFzaywgIkpvaW5lZCB0YXNrICVwIiwgdGFzayk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1qb2luaW5nX3NlbGY6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHRhc2ssICJ0cnlpbmcgdG8gam9pbiB0YXNrIGZyb20gaXRzIHRocmVhZCIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0YXNrKTsKLSAgICBnX3dhcm5pbmcgKCJcblRyeWluZyB0byBqb2luIHRhc2sgJXAgZnJvbSBpdHMgdGhyZWFkIHdvdWxkIGRlYWRsb2NrLlxuIgotICAgICAgICAiWW91IGNhbm5vdCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuIGVsZW1lbnQgZnJvbSBpdHMgc3RyZWFtaW5nXG4iCi0gICAgICAgICJ0aHJlYWQuIFVzZSBnX2lkbGVfYWRkKCkgb3IgcG9zdCBhIEdzdE1lc3NhZ2Ugb24gdGhlIGJ1cyB0b1xuIgotICAgICAgICAic2NoZWR1bGUgdGhlIHN0YXRlIGNoYW5nZSBmcm9tIHRoZSBtYWluIHRocmVhZC5cbiIsIHRhc2spOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhc2suaCBiL2dzdC9nc3R0YXNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NmNmNWUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHRhc2suaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdHRhc2suaDogU3RyZWFtaW5nIHRhc2tzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9UQVNLX0hfXwotI2RlZmluZSBfX0dTVF9UQVNLX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdG9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3R0YXNrcG9vbC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qKgotICogR3N0VGFza0Z1bmN0aW9uOgotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24KLSAqCi0gKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXBlYXRlZGx5IGJlIGNhbGxlZCBpbiB0aGUgdGhyZWFkIGNyZWF0ZWQgYnkKLSAqIGEgI0dzdFRhc2suCi0gKi8KLXR5cGVkZWYgdm9pZCAgICAgICAgICgqR3N0VGFza0Z1bmN0aW9uKSAgICAgICAgICAoZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyogLS0tIHN0YW5kYXJkIHR5cGUgbWFjcm9zIC0tLSAqLwotI2RlZmluZSBHU1RfVFlQRV9UQVNLICAgICAgICAgICAgICAgICAgIChnc3RfdGFza19nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RBU0sodGFzaykgICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKCh0YXNrKSwgR1NUX1RZUEVfVEFTSywgR3N0VGFzaykpCi0jZGVmaW5lIEdTVF9JU19UQVNLKHRhc2spICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgodGFzayksIEdTVF9UWVBFX1RBU0spKQotI2RlZmluZSBHU1RfVEFTS19DTEFTUyh0Y2xhc3MpICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKHRjbGFzcyksIEdTVF9UWVBFX1RBU0ssIEdzdFRhc2tDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19UQVNLX0NMQVNTKHRjbGFzcykgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgodGNsYXNzKSwgR1NUX1RZUEVfVEFTSykpCi0jZGVmaW5lIEdTVF9UQVNLX0dFVF9DTEFTUyh0YXNrKSAgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKCh0YXNrKSwgR1NUX1RZUEVfVEFTSywgR3N0VGFza0NsYXNzKSkKLSNkZWZpbmUgR1NUX1RBU0tfQ0FTVCh0YXNrKSAgICAgICAgICAgICAoKEdzdFRhc2sqKSh0YXNrKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRhc2sgR3N0VGFzazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUYXNrQ2xhc3MgR3N0VGFza0NsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRhc2tQcml2YXRlIEdzdFRhc2tQcml2YXRlOwotCi0vKioKLSAqIEdzdFRhc2tTdGF0ZToKLSAqIEBHU1RfVEFTS19TVEFSVEVEOiB0aGUgdGFzayBpcyBzdGFydGVkIGFuZCBydW5uaW5nCi0gKiBAR1NUX1RBU0tfU1RPUFBFRDogdGhlIHRhc2sgaXMgc3RvcHBlZAotICogQEdTVF9UQVNLX1BBVVNFRDogdGhlIHRhc2sgaXMgcGF1c2VkCi0gKgotICogVGhlIGRpZmZlcmVudCBzdGF0ZXMgYSB0YXNrIGNhbiBiZSBpbgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfVEFTS19TVEFSVEVELAotICBHU1RfVEFTS19TVE9QUEVELAotICBHU1RfVEFTS19QQVVTRUQKLX0gR3N0VGFza1N0YXRlOwotCi0vKioKLSAqIEdTVF9UQVNLX1NUQVRFOgotICogQHRhc2s6IFRhc2sgdG8gZ2V0IHRoZSBzdGF0ZSBvZgotICoKLSAqIEdldCBhY2Nlc3MgdG8gdGhlIHN0YXRlIG9mIHRoZSB0YXNrLgotICovCi0jZGVmaW5lIEdTVF9UQVNLX1NUQVRFKHRhc2spICAgICAgICAgICAgKEdTVF9UQVNLX0NBU1QodGFzayktPnN0YXRlKQotCi0vKioKLSAqIEdTVF9UQVNLX0dFVF9DT05EOgotICogQHRhc2s6IFRhc2sgdG8gZ2V0IHRoZSBjb25kIG9mCi0gKgotICogR2V0IGFjY2VzcyB0byB0aGUgY29uZCBvZiB0aGUgdGFzay4KLSAqLwotI2RlZmluZSBHU1RfVEFTS19HRVRfQ09ORCh0YXNrKSAgICAgICAgICgmR1NUX1RBU0tfQ0FTVCh0YXNrKS0+Y29uZCkKLS8qKgotICogR1NUX1RBU0tfV0FJVDoKLSAqIEB0YXNrOiBUYXNrIHRvIHdhaXQgZm9yCi0gKgotICogV2FpdCBmb3IgdGhlIHRhc2sgY29uZCB0byBiZSBzaWduYWxsZWQKLSAqLwotI2RlZmluZSBHU1RfVEFTS19XQUlUKHRhc2spICAgICAgICAgICAgIGdfY29uZF93YWl0KEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSwgR1NUX09CSkVDVF9HRVRfTE9DSyAodGFzaykpCi0vKioKLSAqIEdTVF9UQVNLX1NJR05BTDoKLSAqIEB0YXNrOiBUYXNrIHRvIHNpZ25hbAotICoKLSAqIFNpZ25hbCB0aGUgdGFzayBjb25kCi0gKi8KLSNkZWZpbmUgR1NUX1RBU0tfU0lHTkFMKHRhc2spICAgICAgICAgICBnX2NvbmRfc2lnbmFsKEdTVF9UQVNLX0dFVF9DT05EICh0YXNrKSkKLS8qKgotICogR1NUX1RBU0tfQlJPQURDQVNUOgotICogQHRhc2s6IFRhc2sgdG8gYnJvYWRjYXN0Ci0gKgotICogU2VuZCBhIGJyb2FkY2FzdCBzaWduYWwgdG8gYWxsIHdhaXRpbmcgdGFzayBjb25kcwotICovCi0jZGVmaW5lIEdTVF9UQVNLX0JST0FEQ0FTVCh0YXNrKSAgICAgICAgZ19jb25kX2Jyb2FkY2FzdChHU1RfVEFTS19HRVRfQ09ORCAodGFzaykpCi0KLS8qKgotICogR1NUX1RBU0tfR0VUX0xPQ0s6Ci0gKiBAdGFzazogVGFzayB0byBnZXQgdGhlIGxvY2sgb2YKLSAqCi0gKiBHZXQgYWNjZXNzIHRvIHRoZSB0YXNrIGxvY2suCi0gKi8KLSNkZWZpbmUgR1NUX1RBU0tfR0VUX0xPQ0sodGFzaykgICAgICAgICAoR1NUX1RBU0tfQ0FTVCh0YXNrKS0+bG9jaykKLQotLyoqCi0gKiBHc3RUYXNrVGhyZWFkRnVuYzoKLSAqIEB0YXNrOiBUaGUgI0dzdFRhc2sKLSAqIEB0aHJlYWQ6IFRoZSAjR1RocmVhZAotICogQHVzZXJfZGF0YTogdXNlciBkYXRhCi0gKgotICogQ3VzdG9tIEdzdFRhc2sgdGhyZWFkIGNhbGxiYWNrIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBpbnN0YWxsZWQuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRhc2tUaHJlYWRGdW5jKSAoR3N0VGFzayAqdGFzaywgR1RocmVhZCAqdGhyZWFkLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIEdzdFRhc2s6Ci0gKiBAc3RhdGU6IHRoZSBzdGF0ZSBvZiB0aGUgdGFzawotICogQGNvbmQ6IHVzZWQgdG8gcGF1c2UvcmVzdW1lIHRoZSB0YXNrCi0gKiBAbG9jazogVGhlIGxvY2sgdGFrZW4gd2hlbiBpdGVyYXRpbmcgdGhlIHRhc2sgZnVuY3Rpb24KLSAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gZXhlY3V0ZWQgYnkgdGhpcyB0YXNrCi0gKiBAdXNlcl9kYXRhOiB1c2VyX2RhdGEgcGFzc2VkIHRvIHRoZSB0YXNrIGZ1bmN0aW9uCi0gKiBAbm90aWZ5OiBHRGVzdHJveU5vdGlmeSBmb3IgQHVzZXJfZGF0YQotICogQHJ1bm5pbmc6IGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIHRhc2sgaXMgcnVubmluZwotICoKLSAqIFRoZSAjR3N0VGFzayBvYmplY3QuCi0gKi8KLXN0cnVjdCBfR3N0VGFzayB7Ci0gIEdzdE9iamVjdCAgICAgIG9iamVjdDsKLQotICAvKjwgcHVibGljID4qLyAvKiB3aXRoIExPQ0sgKi8KLSAgR3N0VGFza1N0YXRlICAgICBzdGF0ZTsKLSAgR0NvbmQgICAgICAgICAgICBjb25kOwotCi0gIEdSZWNNdXRleCAgICAgICAqbG9jazsKLQotICBHc3RUYXNrRnVuY3Rpb24gIGZ1bmM7Ci0gIGdwb2ludGVyICAgICAgICAgdXNlcl9kYXRhOwotICBHRGVzdHJveU5vdGlmeSAgIG5vdGlmeTsKLQotICBnYm9vbGVhbiAgICAgICAgIHJ1bm5pbmc7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdUaHJlYWQgICAgICAgICAqdGhyZWFkOwotCi0gIEdzdFRhc2tQcml2YXRlICAqcHJpdjsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLXN0cnVjdCBfR3N0VGFza0NsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RUYXNrUG9vbCAqcG9vbDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi12b2lkICAgICAgICAgICAgZ3N0X3Rhc2tfY2xlYW51cF9hbGwgICAgKHZvaWQpOwotCi1HVHlwZSAgICAgICAgICAgZ3N0X3Rhc2tfZ2V0X3R5cGUgICAgICAgKHZvaWQpOwotCi1Hc3RUYXNrKiAgICAgICAgZ3N0X3Rhc2tfbmV3ICAgICAgICAgICAgKEdzdFRhc2tGdW5jdGlvbiBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfdGFza19zZXRfbG9jayAgICAgICAoR3N0VGFzayAqdGFzaywgR1JlY011dGV4ICptdXRleCk7Ci0KLUdzdFRhc2tQb29sICogICBnc3RfdGFza19nZXRfcG9vbCAgICAgICAoR3N0VGFzayAqdGFzayk7Ci12b2lkICAgICAgICAgICAgZ3N0X3Rhc2tfc2V0X3Bvb2wgICAgICAgKEdzdFRhc2sgKnRhc2ssIEdzdFRhc2tQb29sICpwb29sKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF90YXNrX3NldF9lbnRlcl9jYWxsYmFjayAgKEdzdFRhc2sgKnRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VGFza1RocmVhZEZ1bmMgZW50ZXJfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKLXZvaWQgICAgICAgICAgICBnc3RfdGFza19zZXRfbGVhdmVfY2FsbGJhY2sgIChHc3RUYXNrICp0YXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRhc2tUaHJlYWRGdW5jIGxlYXZlX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSk7Ci0KLUdzdFRhc2tTdGF0ZSAgICBnc3RfdGFza19nZXRfc3RhdGUgICAgICAoR3N0VGFzayAqdGFzayk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3Rhc2tfc2V0X3N0YXRlICAgICAgKEdzdFRhc2sgKnRhc2ssIEdzdFRhc2tTdGF0ZSBzdGF0ZSk7Ci0KLWdib29sZWFuICAgICAgICBnc3RfdGFza19zdGFydCAgICAgICAgICAoR3N0VGFzayAqdGFzayk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3Rhc2tfc3RvcCAgICAgICAgICAgKEdzdFRhc2sgKnRhc2spOwotZ2Jvb2xlYW4gICAgICAgIGdzdF90YXNrX3BhdXNlICAgICAgICAgIChHc3RUYXNrICp0YXNrKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF90YXNrX2pvaW4gICAgICAgICAgIChHc3RUYXNrICp0YXNrKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RUYXNrLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9UQVNLX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRhc2twb29sLmMgYi9nc3QvZ3N0dGFza3Bvb2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBiOGFhNC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dGFza3Bvb2wuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIGdzdHRhc2twb29sLmM6IFBvb2wgZm9yIHN0cmVhbWluZyB0aHJlYWRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHRhc2twb29sCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFBvb2wgb2YgR1N0cmVhbWVyIHN0cmVhbWluZyB0aHJlYWRzCi0gKiBAc2VlX2Fsc286ICNHc3RUYXNrLCAjR3N0UGFkCi0gKgotICogVGhpcyBvYmplY3QgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gZm9yIGNyZWF0aW5nIHRocmVhZHMuIFRoZSBkZWZhdWx0Ci0gKiBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgcmVndWxhciBHVGhyZWFkUG9vbCB0byBzdGFydCB0YXNrcy4KLSAqCi0gKiBTdWJjbGFzc2VzIGNhbiBiZSBtYWRlIHRvIGNyZWF0ZSBjdXN0b20gdGhyZWFkcy4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdGluZm8uaCIKLSNpbmNsdWRlICJnc3R0YXNrcG9vbC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh0YXNrcG9vbF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAodGFza3Bvb2xfZGVidWcpCi0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi1zdGF0aWMgdm9pZCBnc3RfdGFza19wb29sX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLSNlbmRpZgotCi0jZGVmaW5lIF9kb19pbml0IFwKLXsgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAodGFza3Bvb2xfZGVidWcsICJ0YXNrcG9vbCIsIDAsICJUaHJlYWQgcG9vbCIpOyBcCi19Ci0KLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RUYXNrUG9vbCwgZ3N0X3Rhc2tfcG9vbCwgR1NUX1RZUEVfT0JKRUNULCBfZG9faW5pdCk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYzsKLSAgZ3BvaW50ZXIgdXNlcl9kYXRhOwotfSBUYXNrRGF0YTsKLQotc3RhdGljIHZvaWQKLWRlZmF1bHRfZnVuYyAoVGFza0RhdGEgKiB0ZGF0YSwgR3N0VGFza1Bvb2wgKiBwb29sKQotewotICBHc3RUYXNrUG9vbEZ1bmN0aW9uIGZ1bmM7Ci0gIGdwb2ludGVyIHVzZXJfZGF0YTsKLQotICBmdW5jID0gdGRhdGEtPmZ1bmM7Ci0gIHVzZXJfZGF0YSA9IHRkYXRhLT51c2VyX2RhdGE7Ci0gIGdfc2xpY2VfZnJlZSAoVGFza0RhdGEsIHRkYXRhKTsKLQotICBmdW5jICh1c2VyX2RhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotZGVmYXVsdF9wcmVwYXJlIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChwb29sKTsKLSAgcG9vbC0+cG9vbCA9IGdfdGhyZWFkX3Bvb2xfbmV3ICgoR0Z1bmMpIGRlZmF1bHRfZnVuYywgcG9vbCwgLTEsIEZBTFNFLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBvb2wpOwotfQotCi1zdGF0aWMgdm9pZAotZGVmYXVsdF9jbGVhbnVwIChHc3RUYXNrUG9vbCAqIHBvb2wpCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAocG9vbCk7Ci0gIGlmIChwb29sLT5wb29sKSB7Ci0gICAgLyogU2h1dCBkb3duIGFsbCB0aGUgdGhyZWFkcywgd2Ugc3RpbGwgcHJvY2VzcyB0aGUgb25lcyBzY2hlZHVsZWQKLSAgICAgKiBiZWNhdXNlIHRoZSB1bnJlZiBoYXBwZW5zIGluIHRoZSB0aHJlYWQgZnVuY3Rpb24uCi0gICAgICogQWxzbyB3YWl0IGZvciBjdXJyZW50bHkgcnVubmluZyBvbmVzIHRvIGZpbmlzaC4gKi8KLSAgICBnX3RocmVhZF9wb29sX2ZyZWUgKHBvb2wtPnBvb2wsIEZBTFNFLCBUUlVFKTsKLSAgICBwb29sLT5wb29sID0gTlVMTDsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAocG9vbCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotZGVmYXVsdF9wdXNoIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgVGFza0RhdGEgKnRkYXRhOwotCi0gIHRkYXRhID0gZ19zbGljZV9uZXcgKFRhc2tEYXRhKTsKLSAgdGRhdGEtPmZ1bmMgPSBmdW5jOwotICB0ZGF0YS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocG9vbCk7Ci0gIGlmIChwb29sLT5wb29sKQotICAgIGdfdGhyZWFkX3Bvb2xfcHVzaCAocG9vbC0+cG9vbCwgdGRhdGEsIGVycm9yKTsKLSAgZWxzZSB7Ci0gICAgZ19zbGljZV9mcmVlIChUYXNrRGF0YSwgdGRhdGEpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwb29sKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWRlZmF1bHRfam9pbiAoR3N0VGFza1Bvb2wgKiBwb29sLCBncG9pbnRlciBpZCkKLXsKLSAgLyogd2UgZG8gbm90aGluZyBoZXJlLCB3ZSBjYW4ndCBqb2luIGZyb20gdGhlIHBvb2xzICovCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGFza19wb29sX2NsYXNzX2luaXQgKEdzdFRhc2tQb29sQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RUYXNrUG9vbENsYXNzICpnc3R0YXNrcG9vbF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0dGFza3Bvb2xfY2xhc3MgPSAoR3N0VGFza1Bvb2xDbGFzcyAqKSBrbGFzczsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfdGFza19wb29sX2ZpbmFsaXplOwotI2VuZGlmCi0KLSAgZ3N0dGFza3Bvb2xfY2xhc3MtPnByZXBhcmUgPSBkZWZhdWx0X3ByZXBhcmU7Ci0gIGdzdHRhc2twb29sX2NsYXNzLT5jbGVhbnVwID0gZGVmYXVsdF9jbGVhbnVwOwotICBnc3R0YXNrcG9vbF9jbGFzcy0+cHVzaCA9IGRlZmF1bHRfcHVzaDsKLSAgZ3N0dGFza3Bvb2xfY2xhc3MtPmpvaW4gPSBkZWZhdWx0X2pvaW47Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGFza19wb29sX2luaXQgKEdzdFRhc2tQb29sICogcG9vbCkKLXsKLSAgLyogY2xlYXIgZmxvYXRpbmcgZmxhZyAqLwotICBnc3Rfb2JqZWN0X3JlZl9zaW5rIChwb29sKTsKLX0KLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLXN0YXRpYyB2b2lkCi1nc3RfdGFza19wb29sX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHU1RfREVCVUcgKCJ0YXNrcG9vbCAlcCBmaW5hbGl6ZSIsIG9iamVjdCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF90YXNrX3Bvb2xfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0jZW5kaWYKLS8qKgotICogZ3N0X3Rhc2tfcG9vbF9uZXc6Ci0gKgotICogQ3JlYXRlIGEgbmV3IGRlZmF1bHQgdGFzayBwb29sLiBUaGUgZGVmYXVsdCB0YXNrIHBvb2wgd2lsbCB1c2UgYSByZWd1bGFyCi0gKiBHVGhyZWFkUG9vbCBmb3IgdGhyZWFkcy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3RUYXNrUG9vbC4gZ3N0X29iamVjdF91bnJlZigpIGFmdGVyIHVzYWdlLgotICovCi1Hc3RUYXNrUG9vbCAqCi1nc3RfdGFza19wb29sX25ldyAodm9pZCkKLXsKLSAgR3N0VGFza1Bvb2wgKnBvb2w7Ci0KLSAgcG9vbCA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1RBU0tfUE9PTCwgMCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHBvb2w7Ci19Ci0KLS8qKgotICogZ3N0X3Rhc2tfcG9vbF9wcmVwYXJlOgotICogQHBvb2w6IGEgI0dzdFRhc2tQb29sCi0gKiBAZXJyb3I6IGFuIGVycm9yIHJldHVybiBsb2NhdGlvbgotICoKLSAqIFByZXBhcmUgdGhlIHRhc2twb29sIGZvciBhY2NlcHRpbmcgZ3N0X3Rhc2tfcG9vbF9wdXNoKCkgb3BlcmF0aW9ucy4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfdGFza19wb29sX3ByZXBhcmUgKEdzdFRhc2tQb29sICogcG9vbCwgR0Vycm9yICoqIGVycm9yKQotewotICBHc3RUYXNrUG9vbENsYXNzICprbGFzczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFTS19QT09MIChwb29sKSk7Ci0KLSAga2xhc3MgPSBHU1RfVEFTS19QT09MX0dFVF9DTEFTUyAocG9vbCk7Ci0KLSAgaWYgKGtsYXNzLT5wcmVwYXJlKQotICAgIGtsYXNzLT5wcmVwYXJlIChwb29sLCBlcnJvcik7Ci19Ci0KLS8qKgotICogZ3N0X3Rhc2tfcG9vbF9jbGVhbnVwOgotICogQHBvb2w6IGEgI0dzdFRhc2tQb29sCi0gKgotICogV2FpdCBmb3IgYWxsIHRhc2tzIHRvIGJlIHN0b3BwZWQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW50ZXJuYWxseQotICogdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwIG9mIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBpbiB0ZXN0IHN1aXRlcy4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfdGFza19wb29sX2NsZWFudXAgKEdzdFRhc2tQb29sICogcG9vbCkKLXsKLSAgR3N0VGFza1Bvb2xDbGFzcyAqa2xhc3M7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RBU0tfUE9PTCAocG9vbCkpOwotCi0gIGtsYXNzID0gR1NUX1RBU0tfUE9PTF9HRVRfQ0xBU1MgKHBvb2wpOwotCi0gIGlmIChrbGFzcy0+Y2xlYW51cCkKLSAgICBrbGFzcy0+Y2xlYW51cCAocG9vbCk7Ci19Ci0KLS8qKgotICogZ3N0X3Rhc2tfcG9vbF9wdXNoOgotICogQHBvb2w6IGEgI0dzdFRhc2tQb29sCi0gKiBAZnVuYzogKHNjb3BlIGFzeW5jKTogdGhlIGZ1bmN0aW9uIHRvIGNhbGwKLSAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogZGF0YSB0byBwYXNzIHRvIEBmdW5jCi0gKiBAZXJyb3I6IHJldHVybiBsb2NhdGlvbiBmb3IgYW4gZXJyb3IKLSAqCi0gKiBTdGFydCB0aGUgZXhlY3V0aW9uIG9mIGEgbmV3IHRocmVhZCBmcm9tIEBwb29sLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiBhIHBvaW50ZXIgdGhhdCBzaG91bGQgYmUgdXNlZAotICogZm9yIHRoZSBnc3RfdGFza19wb29sX2pvaW4gZnVuY3Rpb24uIFRoaXMgcG9pbnRlciBjYW4gYmUgJU5VTEwsIHlvdQotICogbXVzdCBjaGVjayBAZXJyb3IgdG8gZGV0ZWN0IGVycm9ycy4KLSAqLwotZ3BvaW50ZXIKLWdzdF90YXNrX3Bvb2xfcHVzaCAoR3N0VGFza1Bvb2wgKiBwb29sLCBHc3RUYXNrUG9vbEZ1bmN0aW9uIGZ1bmMsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdzdFRhc2tQb29sQ2xhc3MgKmtsYXNzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEFTS19QT09MIChwb29sKSwgTlVMTCk7Ci0KLSAga2xhc3MgPSBHU1RfVEFTS19QT09MX0dFVF9DTEFTUyAocG9vbCk7Ci0KLSAgaWYgKGtsYXNzLT5wdXNoID09IE5VTEwpCi0gICAgZ290byBub3Rfc3VwcG9ydGVkOwotCi0gIHJldHVybiBrbGFzcy0+cHVzaCAocG9vbCwgZnVuYywgdXNlcl9kYXRhLCBlcnJvcik7Ci0KLSAgLyogRVJST1JTICovCi1ub3Rfc3VwcG9ydGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicHVzaGluZyB0YXNrcyBvbiBwb29sICVwIGlzIG5vdCBzdXBwb3J0ZWQiLCBwb29sKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF90YXNrX3Bvb2xfam9pbjoKLSAqIEBwb29sOiBhICNHc3RUYXNrUG9vbAotICogQGlkOiB0aGUgaWQKLSAqCi0gKiBKb2luIGEgdGFzayBhbmQvb3IgcmV0dXJuIGl0IHRvIHRoZSBwb29sLiBAaWQgaXMgdGhlIGlkIG9idGFpbmVkIGZyb20gCi0gKiBnc3RfdGFza19wb29sX3B1c2goKS4KLSAqLwotdm9pZAotZ3N0X3Rhc2tfcG9vbF9qb2luIChHc3RUYXNrUG9vbCAqIHBvb2wsIGdwb2ludGVyIGlkKQotewotICBHc3RUYXNrUG9vbENsYXNzICprbGFzczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEFTS19QT09MIChwb29sKSk7Ci0KLSAga2xhc3MgPSBHU1RfVEFTS19QT09MX0dFVF9DTEFTUyAocG9vbCk7Ci0KLSAgaWYgKGtsYXNzLT5qb2luKQotICAgIGtsYXNzLT5qb2luIChwb29sLCBpZCk7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0dGFza3Bvb2wuaCBiL2dzdC9nc3R0YXNrcG9vbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODkyN2M1Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0YXNrcG9vbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBnc3R0YXNrcG9vbC5oOiBQb29sIGZvciBjcmVhdGluZyBzdHJlYW1pbmcgdGhyZWFkcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfVEFTS19QT09MX0hfXwotI2RlZmluZSBfX0dTVF9UQVNLX1BPT0xfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotLyogLS0tIHN0YW5kYXJkIHR5cGUgbWFjcm9zIC0tLSAqLwotI2RlZmluZSBHU1RfVFlQRV9UQVNLX1BPT0wgICAgICAgICAgICAgKGdzdF90YXNrX3Bvb2xfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9UQVNLX1BPT0wocG9vbCkgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChwb29sKSwgR1NUX1RZUEVfVEFTS19QT09MLCBHc3RUYXNrUG9vbCkpCi0jZGVmaW5lIEdTVF9JU19UQVNLX1BPT0wocG9vbCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChwb29sKSwgR1NUX1RZUEVfVEFTS19QT09MKSkKLSNkZWZpbmUgR1NUX1RBU0tfUE9PTF9DTEFTUyhwY2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKHBjbGFzcyksIEdTVF9UWVBFX1RBU0tfUE9PTCwgR3N0VGFza1Bvb2xDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19UQVNLX1BPT0xfQ0xBU1MocGNsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChwY2xhc3MpLCBHU1RfVFlQRV9UQVNLX1BPT0wpKQotI2RlZmluZSBHU1RfVEFTS19QT09MX0dFVF9DTEFTUyhwb29sKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChwb29sKSwgR1NUX1RZUEVfVEFTS19QT09MLCBHc3RUYXNrUG9vbENsYXNzKSkKLSNkZWZpbmUgR1NUX1RBU0tfUE9PTF9DQVNUKHBvb2wpICAgICAgICgoR3N0VGFza1Bvb2wqKShwb29sKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRhc2tQb29sIEdzdFRhc2tQb29sOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRhc2tQb29sQ2xhc3MgR3N0VGFza1Bvb2xDbGFzczsKLQotLyoqCi0gKiBHc3RUYXNrUG9vbEZ1bmN0aW9uOgotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIGZvciB0aGUgdGFzayBmdW5jdGlvbgotICoKLSAqIFRhc2sgZnVuY3Rpb24sIHNlZSBnc3RfdGFza19wb29sX3B1c2goKS4KLSAqLwotdHlwZWRlZiB2b2lkICAgKCpHc3RUYXNrUG9vbEZ1bmN0aW9uKSAgICAgICAgICAodm9pZCAqdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RUYXNrUG9vbDoKLSAqCi0gKiBUaGUgI0dzdFRhc2tQb29sIG9iamVjdC4KLSAqLwotc3RydWN0IF9Hc3RUYXNrUG9vbCB7Ci0gIEdzdE9iamVjdCAgICAgIG9iamVjdDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR1RocmVhZFBvb2wgICAqcG9vbDsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLS8qKgotICogR3N0VGFza1Bvb2xDbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IHRoZSBwYXJlbnQgY2xhc3Mgc3RydWN0dXJlCi0gKiBAcHJlcGFyZTogcHJlcGFyZSB0aGUgdGhyZWFkcG9vbAotICogQGNsZWFudXA6IG1ha2Ugc3VyZSBhbGwgdGhyZWFkcyBhcmUgc3RvcHBlZAotICogQHB1c2g6IHN0YXJ0IGEgbmV3IHRocmVhZAotICogQGpvaW46IGpvaW4gYSB0aHJlYWQKLSAqCi0gKiBUaGUgI0dzdFRhc2tQb29sQ2xhc3Mgb2JqZWN0LgotICovCi1zdHJ1Y3QgX0dzdFRhc2tQb29sQ2xhc3MgewotICBHc3RPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8KLSAgdm9pZCAgICAgICgqcHJlcGFyZSkgIChHc3RUYXNrUG9vbCAqcG9vbCwgR0Vycm9yICoqZXJyb3IpOwotICB2b2lkICAgICAgKCpjbGVhbnVwKSAgKEdzdFRhc2tQb29sICpwb29sKTsKLQotICBncG9pbnRlciAgKCpwdXNoKSAgICAgKEdzdFRhc2tQb29sICpwb29sLCBHc3RUYXNrUG9vbEZ1bmN0aW9uIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBHRXJyb3IgKiplcnJvcik7Ci0gIHZvaWQgICAgICAoKmpvaW4pICAgICAoR3N0VGFza1Bvb2wgKnBvb2wsIGdwb2ludGVyIGlkKTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSAgICAgICAgICAgZ3N0X3Rhc2tfcG9vbF9nZXRfdHlwZSAgICAodm9pZCk7Ci0KLUdzdFRhc2tQb29sICogICBnc3RfdGFza19wb29sX25ldyAgICAgICAgICh2b2lkKTsKLXZvaWQgICAgICAgICAgICBnc3RfdGFza19wb29sX3ByZXBhcmUgICAgIChHc3RUYXNrUG9vbCAqcG9vbCwgR0Vycm9yICoqZXJyb3IpOwotCi1ncG9pbnRlciAgICAgICAgZ3N0X3Rhc2tfcG9vbF9wdXNoICAgICAgICAoR3N0VGFza1Bvb2wgKnBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdFcnJvciAqKmVycm9yKTsKLXZvaWQgICAgICAgICAgICBnc3RfdGFza19wb29sX2pvaW4gICAgICAgIChHc3RUYXNrUG9vbCAqcG9vbCwgZ3BvaW50ZXIgaWQpOwotCi12b2lkCQlnc3RfdGFza19wb29sX2NsZWFudXAgICAgIChHc3RUYXNrUG9vbCAqcG9vbCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0VGFza1Bvb2wsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RBU0tfUE9PTF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3R0b2MuYyBiL2dzdC9nc3R0b2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3MzJiMi4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dG9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MjggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiAoYykgMjAxMCwgMjAxMiBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotICoKLSAqIGdzdHRvYy5jOiBHc3RUb2MgaW5pdGlhbGl6YXRpb24gYW5kIHBhcnNpbmcvY3JlYXRpb24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0dG9jCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEdlbmVyaWMgdGFibGUgb2YgY29udGVudHMgc3VwcG9ydAotICogQHNlZV9hbHNvOiAjR3N0U3RydWN0dXJlLCAjR3N0RXZlbnQsICNHc3RNZXNzYWdlLCAjR3N0UXVlcnkKLSAqCi0gKiAjR3N0VG9jIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjcmVhdGUvZnJlZSAjR3N0VG9jIGFuZCAjR3N0VG9jRW50cnkgc3RydWN0dXJlcy4KLSAqIEFsc28gdGhleSBhcmUgdXNlZCB0byBjb252ZXJ0ICNHc3RUb2MgaW50byAjR3N0U3RydWN0dXJlIGFuZCB2aWNlIHZlcnNhLgotICoKLSAqICNHc3RUb2MgbGV0cyB5b3UgdG8gaW5mb3JtIG90aGVyIGVsZW1lbnRzIGluIHBpcGVsaW5lIG9yIGFwcGxpY2F0aW9uIHRoYXQgcGxheWluZwotICogc291cmNlIGhhcyBzb21lIGtpbmQgb2YgdGFibGUgb2YgY29udGVudHMgKFRPQykuIFRoZXNlIG1heSBiZSBjaGFwdGVycywgZWRpdGlvbnMsCi0gKiBhbmdsZXMgb3Igb3RoZXIgdHlwZXMuIEZvciBleGFtcGxlOiBEVkQgY2hhcHRlcnMsIE1hdHJvc2thIGNoYXB0ZXJzIG9yIGN1ZSBzaGVldAotICogVE9DLiBTdWNoIFRPQyB3aWxsIGJlIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHRvIGRpc3BsYXkgaW5zdGVhZCBvZiBqdXN0IGEKLSAqIHBsYXlsaXN0LgotICoKLSAqIFVzaW5nIFRPQyBpcyB2ZXJ5IGVhc3kuIEZpcnN0bHksIGNyZWF0ZSAjR3N0VG9jIHN0cnVjdHVyZSB3aGljaCByZXByZXNlbnRzIHJvb3QKLSAqIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UuIFlvdSBjYW4gYWxzbyBhdHRhY2ggVE9DLXNwZWNpZmljIHRhZ3MgdG8gaXQuIFRoZW4gZmlsbAotICogaXQgd2l0aCAjR3N0VG9jRW50cnkgZW50cmllcyBieSBhcHBlbmRpbmcgdGhlbSB0byB0aGUgI0dzdFRvYyB1c2luZwotICogZ3N0X3RvY19hcHBlbmRfZW50cnkoKSwgYW5kIGFwcGVuZGluZyBzdWJlbnRyaWVzIHRvIGEgI0dzdFRvY0VudHJ5IHVzaW5nCi0gKiBnc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnkoKS4KLSAqCi0gKiBOb3RlIHRoYXQgcm9vdCBsZXZlbCBvZiB0aGUgVE9DIGNhbiBjb250YWluIG9ubHkgZWl0aGVyIGVkaXRpb25zIG9yIGNoYXB0ZXJzLiBZb3UKLSAqIHNob3VsZCBub3QgbWl4IHRoZW0gdG9nZXRoZXIgYXQgdGhlIHNhbWUgbGV2ZWwuIE90aGVyd2lzZSB5b3Ugd2lsbCBnZXQgc2VyaWFsaXphdGlvbgotICogL2Rlc2VyaWFsaXphdGlvbiBlcnJvcnMuIE1ha2Ugc3VyZSB0aGF0IG5vIG9uZSBvZiB0aGUgZW50cmllcyBoYXMgbmVnYXRpdmUgc3RhcnQgYW5kCi0gKiAgc3RvcCB2YWx1ZXMuCi0gKgotICogVXNlIGdzdF9ldmVudF9uZXdfdG9jKCkgdG8gY3JlYXRlIGEgbmV3IFRPQyAjR3N0RXZlbnQsIGFuZCBnc3RfZXZlbnRfcGFyc2VfdG9jKCkgdG8KLSAqIHBhcnNlIHJlY2VpdmVkIFRPQyBldmVudC4gVXNlIGdzdF9ldmVudF9uZXdfdG9jX3NlbGVjdCgpIHRvIGNyZWF0ZSBhIG5ldyBUT0Mgc2VsZWN0ICNHc3RFdmVudCwKLSAqIGFuZCBnc3RfZXZlbnRfcGFyc2VfdG9jX3NlbGVjdCgpIHRvIHBhcnNlIHJlY2VpdmVkIFRPQyBzZWxlY3QgZXZlbnQuIFRoZSBzYW1lIHJ1bGUgZm9yCi0gKiB0aGUgI0dzdE1lc3NhZ2U6IGdzdF9tZXNzYWdlX25ld190b2MoKSB0byBjcmVhdGUgbmV3IFRPQyAjR3N0TWVzc2FnZSwgYW5kCi0gKiBnc3RfbWVzc2FnZV9wYXJzZV90b2MoKSB0byBwYXJzZSByZWNlaXZlZCBUT0MgbWVzc2FnZS4KLSAqCi0gKiBUT0NzIGNhbiBoYXZlIGdsb2JhbCBzY29wZSBvciBjdXJyZW50IHNjb3BlLiBHbG9iYWwgc2NvcGUgVE9DcyBjb250YWluCi0gKiBhbGwgZW50cmllcyB0aGF0IGNhbiBwb3NzaWJseSBiZSBzZWxlY3RlZCB1c2luZyBhIHRvYyBzZWxlY3QgZXZlbnQsIGFuZAotICogYXJlIHdoYXQgYW4gYXBwbGljYXRpb24gaXMgdXN1YWxseSBpbnRlcmVzdGVkIGluLiBUT0NzIHdpdGggY3VycmVudCBzY29wZQotICogb25seSBjb250YWluIHRoZSBwYXJ0cyBvZiB0aGUgVE9DIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQvcGxheWluZwotICogc3RyZWFtOyB0aGUgY3VycmVudCBzY29wZSBUT0MgaXMgdXNlZCBieSBkb3duc3RyZWFtIGVsZW1lbnRzIHN1Y2ggYXMgbXV4ZXJzCi0gKiB0byB3cml0ZSBjb3JyZWN0IFRPQyBlbnRyaWVzIHdoZW4gdHJhbnNjb2RpbmcgZmlsZXMsIGZvciBleGFtcGxlLiBXaGVuCi0gKiBwbGF5aW5nIGEgRFZELCB0aGUgZ2xvYmFsIFRPQyB3b3VsZCBjb250YWluIGEgaGllcmFyY2h5IG9mIGFsbCB0aXRsZXMsCi0gKiBjaGFwdGVycyBhbmQgYW5nbGVzLCBmb3IgZXhhbXBsZSwgd2hpbGUgdGhlIGN1cnJlbnQgVE9DIHdvdWxkIG9ubHkgY29udGFpbgotICogdGhlIGNoYXB0ZXJzIGZvciB0aGUgY3VycmVudGx5IHBsYXlpbmcgdGl0bGUgaWYgcGxheWJhY2sgb2YgYSBzcGVjaWZpYwotICogdGl0bGUgd2FzIHJlcXVlc3RlZC4KLSAqCi0gKiBBcHBsaWNhdGlvbnMgYW5kIHBsdWdpbnMgc2hvdWxkIG5vdCByZWx5IG9uIFRPQ3MgaGF2aW5nIGEgY2VydGFpbiBraW5kIG9mCi0gKiBzdHJ1Y3R1cmUsIGJ1dCBzaG91bGQgYWxsb3cgZm9yIGRpZmZlcmVudCBhbHRlcm5hdGl2ZXMuIEZvciBleGFtcGxlLCBhCi0gKiBzaW1wbGUgQ1VFIHNoZWV0IGVtYmVkZGVkIGluIGEgZmlsZSBtYXkgYmUgcHJlc2VudGVkIGFzIGEgZmxhdCBsaXN0IG9mCi0gKiB0cmFjayBlbnRyaWVzLCBvciBjb3VsZCBoYXZlIGEgdG9wLWxldmVsIGVkaXRpb24gbm9kZSAob3Igc29tZSBvdGhlcgotICogYWx0ZXJuYXRpdmUgdHlwZSBlbnRyeSkgd2l0aCB0cmFjayBlbnRyaWVzIHVuZGVybmVhdGggdGhhdCBub2RlOyBvciBldmVuCi0gKiBtdWx0aXBsZSB0b3AtbGV2ZWwgZWRpdGlvbiBub2RlcyAob3Igc29tZSBvdGhlciBhbHRlcm5hdGl2ZSB0eXBlIGVudHJpZXMpCi0gKiBlYWNoIHdpdGggdHJhY2sgZW50cmllcyB1bmRlcm5lYXRoLCBpbiBjYXNlIHRoZSBzb3VyY2UgZmlsZSBoYXMgZXh0cmFjdGVkCi0gKiBhIHRyYWNrIGxpc3RpbmcgZnJvbSBkaWZmZXJlbnQgc291cmNlcykuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdzdGVudW10eXBlcy5oIgotI2luY2x1ZGUgImdzdHRhZ2xpc3QuaCIKLSNpbmNsdWRlICJnc3RzdHJ1Y3R1cmUuaCIKLSNpbmNsdWRlICJnc3R2YWx1ZS5oIgotI2luY2x1ZGUgImdzdHRvYy5oIgotI2luY2x1ZGUgImdzdHBhZC5oIgotI2luY2x1ZGUgImdzdHF1YXJrLmgiCi0KLXN0cnVjdCBfR3N0VG9jRW50cnkKLXsKLSAgR3N0TWluaU9iamVjdCBtaW5pX29iamVjdDsKLQotICBHc3RUb2MgKnRvYzsKLSAgR3N0VG9jRW50cnkgKnBhcmVudDsKLQotICBnY2hhciAqdWlkOwotICBHc3RUb2NFbnRyeVR5cGUgdHlwZTsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBzdG9wOwotICBHTGlzdCAqc3ViZW50cmllczsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgR3N0VG9jTG9vcFR5cGUgbG9vcF90eXBlOwotICBnaW50IHJlcGVhdF9jb3VudDsKLX07Ci0KLXN0cnVjdCBfR3N0VG9jCi17Ci0gIEdzdE1pbmlPYmplY3QgbWluaV9vYmplY3Q7Ci0KLSAgR3N0VG9jU2NvcGUgc2NvcGU7Ci0gIEdMaXN0ICplbnRyaWVzOwotICBHc3RUYWdMaXN0ICp0YWdzOwotfTsKLQotI3VuZGVmIGdzdF90b2NfY29weQotc3RhdGljIEdzdFRvYyAqZ3N0X3RvY19jb3B5IChjb25zdCBHc3RUb2MgKiB0b2MpOwotc3RhdGljIHZvaWQgZ3N0X3RvY19mcmVlIChHc3RUb2MgKiB0b2MpOwotI3VuZGVmIGdzdF90b2NfZW50cnlfY29weQotc3RhdGljIEdzdFRvY0VudHJ5ICpnc3RfdG9jX2VudHJ5X2NvcHkgKGNvbnN0IEdzdFRvY0VudHJ5ICogdG9jKTsKLXN0YXRpYyB2b2lkIGdzdF90b2NfZW50cnlfZnJlZSAoR3N0VG9jRW50cnkgKiB0b2MpOwotCi1HVHlwZSBfZ3N0X3RvY190eXBlID0gMDsKLUdUeXBlIF9nc3RfdG9jX2VudHJ5X3R5cGUgPSAwOwotCi1HU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEUgKEdzdFRvYywgZ3N0X3RvYyk7Ci1HU1RfREVGSU5FX01JTklfT0JKRUNUX1RZUEUgKEdzdFRvY0VudHJ5LCBnc3RfdG9jX2VudHJ5KTsKLQotLyoqCi0gKiBnc3RfdG9jX25ldzoKLSAqIEBzY29wZTogc2NvcGUgb2YgdGhpcyBUT0MKLSAqCi0gKiBDcmVhdGUgYSBuZXcgI0dzdFRvYyBzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBuZXdseSBhbGxvY2F0ZWQgI0dzdFRvYyBzdHJ1Y3R1cmUsIGZyZWUgaXQKLSAqICAgICB3aXRoIGdzdF90b2NfdW5yZWYoKS4KLSAqLwotR3N0VG9jICoKLWdzdF90b2NfbmV3IChHc3RUb2NTY29wZSBzY29wZSkKLXsKLSAgR3N0VG9jICp0b2M7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNjb3BlID09IEdTVF9UT0NfU0NPUEVfR0xPQkFMIHx8Ci0gICAgICBzY29wZSA9PSBHU1RfVE9DX1NDT1BFX0NVUlJFTlQsIE5VTEwpOwotCi0gIHRvYyA9IGdfc2xpY2VfbmV3MCAoR3N0VG9jKTsKLQotICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHRvYyksIDAsIEdTVF9UWVBFX1RPQywKLSAgICAgIChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBnc3RfdG9jX2NvcHksIE5VTEwsCi0gICAgICAoR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbikgZ3N0X3RvY19mcmVlKTsKLQotICB0b2MtPnNjb3BlID0gc2NvcGU7Ci0gIHRvYy0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgcmV0dXJuIHRvYzsKLX0KLQotLyoqCi0gKiBnc3RfdG9jX2dldF9zY29wZToKLSAqIEB0b2M6IGEgI0dzdFRvYyBpbnN0YW5jZQotICoKLSAqIFJldHVybnM6IHNjb3BlIG9mIEB0b2MKLSAqLwotR3N0VG9jU2NvcGUKLWdzdF90b2NfZ2V0X3Njb3BlIChjb25zdCBHc3RUb2MgKiB0b2MpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0b2MgIT0gTlVMTCwgR1NUX1RPQ19TQ09QRV9HTE9CQUwpOwotCi0gIHJldHVybiB0b2MtPnNjb3BlOwotfQotCi0vKioKLSAqIGdzdF90b2Nfc2V0X3RhZ3M6Ci0gKiBAdG9jOiBBICNHc3RUb2MgaW5zdGFuY2UKLSAqIEB0YWdzOiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBBICNHc3RUYWdMaXN0IG9yICVOVUxMCi0gKgotICogU2V0IGEgI0dzdFRhZ0xpc3Qgd2l0aCB0YWdzIGZvciB0aGUgY29tcGxldGUgQHRvYy4KLSAqLwotdm9pZAotZ3N0X3RvY19zZXRfdGFncyAoR3N0VG9jICogdG9jLCBHc3RUYWdMaXN0ICogdGFncykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAodG9jICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfbWluaV9vYmplY3RfaXNfd3JpdGFibGUgKEdTVF9NSU5JX09CSkVDVF9DQVNUICh0b2MpKSk7Ci0KLSAgaWYgKHRvYy0+dGFncykKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRvYy0+dGFncyk7Ci0gIHRvYy0+dGFncyA9IHRhZ3M7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19tZXJnZV90YWdzOgotICogQHRvYzogQSAjR3N0VG9jIGluc3RhbmNlCi0gKiBAdGFnczogKGFsbG93LW5vbmUpOiBBICNHc3RUYWdMaXN0IG9yICVOVUxMCi0gKiBAbW9kZTogQSAjR3N0VGFnTWVyZ2VNb2RlCi0gKgotICogTWVyZ2UgQHRhZ3MgaW50byB0aGUgZXhpc3RpbmcgdGFncyBvZiBAdG9jIHVzaW5nIEBtb2RlLgotICovCi12b2lkCi1nc3RfdG9jX21lcmdlX3RhZ3MgKEdzdFRvYyAqIHRvYywgR3N0VGFnTGlzdCAqIHRhZ3MsIEdzdFRhZ01lcmdlTW9kZSBtb2RlKQotewotICBnX3JldHVybl9pZl9mYWlsICh0b2MgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHRvYykpKTsKLQotICBpZiAoIXRvYy0+dGFncykgewotICAgIHRvYy0+dGFncyA9IGdzdF90YWdfbGlzdF9yZWYgKHRhZ3MpOwotICB9IGVsc2UgewotICAgIEdzdFRhZ0xpc3QgKnRtcCA9IGdzdF90YWdfbGlzdF9tZXJnZSAodG9jLT50YWdzLCB0YWdzLCBtb2RlKTsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRvYy0+dGFncyk7Ci0gICAgdG9jLT50YWdzID0gdG1wOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3RvY19nZXRfdGFnczoKLSAqIEB0b2M6IEEgI0dzdFRvYyBpbnN0YW5jZQotICoKLSAqIEdldHMgdGhlIHRhZ3MgZm9yIEB0b2MuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNHc3RUYWdMaXN0IGZvciBAZW50cnkKLSAqLwotR3N0VGFnTGlzdCAqCi1nc3RfdG9jX2dldF90YWdzIChjb25zdCBHc3RUb2MgKiB0b2MpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0b2MgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHRvYy0+dGFnczsKLX0KLQotLyoqCi0gKiBnc3RfdG9jX2FwcGVuZF9lbnRyeToKLSAqIEB0b2M6IEEgI0dzdFRvYyBpbnN0YW5jZQotICogQGVudHJ5OiAodHJhbnNmZXIgZnVsbCk6IEEgI0dzdFRvY0VudHJ5Ci0gKgotICogQXBwZW5kcyB0aGUgI0dzdFRvY0VudHJ5IEBlbnRyeSB0byBAdG9jLgotICovCi12b2lkCi1nc3RfdG9jX2FwcGVuZF9lbnRyeSAoR3N0VG9jICogdG9jLCBHc3RUb2NFbnRyeSAqIGVudHJ5KQotewotICBnX3JldHVybl9pZl9mYWlsICh0b2MgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHRvYykpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZW50cnkpKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5LT50b2MgPT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5LT5wYXJlbnQgPT0gTlVMTCk7Ci0KLSAgdG9jLT5lbnRyaWVzID0gZ19saXN0X2FwcGVuZCAodG9jLT5lbnRyaWVzLCBlbnRyeSk7Ci0gIGVudHJ5LT50b2MgPSB0b2M7Ci0KLSAgR1NUX0xPRyAoImFwcGVuZGVkICVzIGVudHJ5IHdpdGggdWlkICVzIHRvIHRvYyAlcCIsCi0gICAgICBnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X25pY2sgKGVudHJ5LT50eXBlKSwgZW50cnktPnVpZCwgdG9jKTsKLQotICBnc3RfdG9jX2R1bXAgKHRvYyk7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19nZXRfZW50cmllczoKLSAqIEB0b2M6IEEgI0dzdFRvYyBpbnN0YW5jZQotICoKLSAqIEdldHMgdGhlIGxpc3Qgb2YgI0dzdFRvY0VudHJ5IG9mIEB0b2MuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChlbGVtZW50LXR5cGUgR3N0LlRvY0VudHJ5KTogQSAjR0xpc3Qgb2YgI0dzdFRvY0VudHJ5IGZvciBAZW50cnkKLSAqLwotR0xpc3QgKgotZ3N0X3RvY19nZXRfZW50cmllcyAoY29uc3QgR3N0VG9jICogdG9jKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAodG9jICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiB0b2MtPmVudHJpZXM7Ci19Ci0KLXN0YXRpYyBHc3RUb2NFbnRyeSAqCi1nc3RfdG9jX2VudHJ5X25ld19pbnRlcm5hbCAoR3N0VG9jRW50cnlUeXBlIHR5cGUsIGNvbnN0IGdjaGFyICogdWlkKQotewotICBHc3RUb2NFbnRyeSAqZW50cnk7Ci0KLSAgZW50cnkgPSBnX3NsaWNlX25ldzAgKEdzdFRvY0VudHJ5KTsKLQotICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGVudHJ5KSwgMCwgR1NUX1RZUEVfVE9DX0VOVFJZLAotICAgICAgKEdzdE1pbmlPYmplY3RDb3B5RnVuY3Rpb24pIGdzdF90b2NfZW50cnlfY29weSwgTlVMTCwKLSAgICAgIChHc3RNaW5pT2JqZWN0RnJlZUZ1bmN0aW9uKSBnc3RfdG9jX2VudHJ5X2ZyZWUpOwotCi0gIGVudHJ5LT51aWQgPSBnX3N0cmR1cCAodWlkKTsKLSAgZW50cnktPnR5cGUgPSB0eXBlOwotICBlbnRyeS0+dGFncyA9IE5VTEw7Ci0gIGVudHJ5LT5zdGFydCA9IGVudHJ5LT5zdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICByZXR1cm4gZW50cnk7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19lbnRyeV9uZXc6Ci0gKiBAdHlwZTogZW50cnkgdHlwZS4KLSAqIEB1aWQ6IHVuaXF1ZSBJRCAoVUlEKSBpbiB0aGUgd2hvbGUgVE9DLgotICoKLSAqIENyZWF0ZSBuZXcgI0dzdFRvY0VudHJ5IHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm5zOiBuZXdseSBhbGxvY2F0ZWQgI0dzdFRvY0VudHJ5IHN0cnVjdHVyZSwgZnJlZSBpdCB3aXRoIGdzdF90b2NfZW50cnlfdW5yZWYoKS4KLSAqLwotR3N0VG9jRW50cnkgKgotZ3N0X3RvY19lbnRyeV9uZXcgKEdzdFRvY0VudHJ5VHlwZSB0eXBlLCBjb25zdCBnY2hhciAqIHVpZCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVpZCAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X3RvY19lbnRyeV9uZXdfaW50ZXJuYWwgKHR5cGUsIHVpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdG9jX2ZyZWUgKEdzdFRvYyAqIHRvYykKLXsKLSAgZ19saXN0X2ZvcmVhY2ggKHRvYy0+ZW50cmllcywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAodG9jLT5lbnRyaWVzKTsKLQotICBpZiAodG9jLT50YWdzICE9IE5VTEwpCi0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0b2MtPnRhZ3MpOwotCi0gIGdfc2xpY2VfZnJlZSAoR3N0VG9jLCB0b2MpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RvY19lbnRyeV9mcmVlIChHc3RUb2NFbnRyeSAqIGVudHJ5KQotewotICBnX3JldHVybl9pZl9mYWlsIChlbnRyeSAhPSBOVUxMKTsKLQotICBnX2xpc3RfZm9yZWFjaCAoZW50cnktPnN1YmVudHJpZXMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGVudHJ5LT5zdWJlbnRyaWVzKTsKLQotICBnX2ZyZWUgKGVudHJ5LT51aWQpOwotCi0gIGlmIChlbnRyeS0+dGFncyAhPSBOVUxMKQotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoZW50cnktPnRhZ3MpOwotCi0gIGdfc2xpY2VfZnJlZSAoR3N0VG9jRW50cnksIGVudHJ5KTsKLX0KLQotc3RhdGljIEdzdFRvY0VudHJ5ICoKLWdzdF90b2NfZW50cnlfZmluZF9zdWJfZW50cnkgKGNvbnN0IEdzdFRvY0VudHJ5ICogZW50cnksIGNvbnN0IGdjaGFyICogdWlkKQotewotICBHTGlzdCAqY3VyOwotICBHc3RUb2NFbnRyeSAqc3ViZW50cnksICpzdWJzdWJlbnRyeTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1aWQgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgY3VyID0gZW50cnktPnN1YmVudHJpZXM7Ci0gIHdoaWxlIChjdXIgIT0gTlVMTCkgewotICAgIHN1YmVudHJ5ID0gY3VyLT5kYXRhOwotCi0gICAgaWYgKGdfc3RyY21wMCAoc3ViZW50cnktPnVpZCwgdWlkKSA9PSAwKQotICAgICAgcmV0dXJuIHN1YmVudHJ5OwotCi0gICAgc3Vic3ViZW50cnkgPSBnc3RfdG9jX2VudHJ5X2ZpbmRfc3ViX2VudHJ5IChzdWJlbnRyeSwgdWlkKTsKLSAgICBpZiAoc3Vic3ViZW50cnkgIT0gTlVMTCkKLSAgICAgIHJldHVybiBzdWJzdWJlbnRyeTsKLQotICAgIGN1ciA9IGN1ci0+bmV4dDsKLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF90b2NfZmluZF9lbnRyeToKLSAqIEB0b2M6ICNHc3RUb2MgdG8gc2VhcmNoIGluLgotICogQHVpZDogVUlEIHRvIGZpbmQgI0dzdFRvY0VudHJ5IHdpdGguCi0gKgotICogRmluZCAjR3N0VG9jRW50cnkgd2l0aCBnaXZlbiBAdWlkIGluIHRoZSBAdG9jLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAobnVsbGFibGUpOiAjR3N0VG9jRW50cnkgd2l0aCBzcGVjaWZpZWQKLSAqIEB1aWQgZnJvbSB0aGUgQHRvYywgb3IgJU5VTEwgaWYgbm90IGZvdW5kLgotICovCi1Hc3RUb2NFbnRyeSAqCi1nc3RfdG9jX2ZpbmRfZW50cnkgKGNvbnN0IEdzdFRvYyAqIHRvYywgY29uc3QgZ2NoYXIgKiB1aWQpCi17Ci0gIEdMaXN0ICpjdXI7Ci0gIEdzdFRvY0VudHJ5ICplbnRyeSwgKnN1YmVudHJ5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0b2MgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1aWQgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgY3VyID0gdG9jLT5lbnRyaWVzOwotICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKLSAgICBlbnRyeSA9IGN1ci0+ZGF0YTsKLQotICAgIGlmIChnX3N0cmNtcDAgKGVudHJ5LT51aWQsIHVpZCkgPT0gMCkKLSAgICAgIHJldHVybiBlbnRyeTsKLQotICAgIHN1YmVudHJ5ID0gZ3N0X3RvY19lbnRyeV9maW5kX3N1Yl9lbnRyeSAoZW50cnksIHVpZCk7Ci0gICAgaWYgKHN1YmVudHJ5ICE9IE5VTEwpCi0gICAgICByZXR1cm4gc3ViZW50cnk7Ci0gICAgY3VyID0gY3VyLT5uZXh0OwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqCi1nc3RfdG9jX2RlZXBfY29weV90b2NfZW50cmllcyAoR0xpc3QgKiBlbnRyeV9saXN0KQotewotICBHUXVldWUgbmV3X2VudHJpZXMgPSBHX1FVRVVFX0lOSVQ7Ci0gIEdMaXN0ICpsOwotCi0gIGZvciAobCA9IGVudHJ5X2xpc3Q7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpCi0gICAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZuZXdfZW50cmllcywgZ3N0X3RvY19lbnRyeV9jb3B5IChsLT5kYXRhKSk7Ci0KLSAgcmV0dXJuIG5ld19lbnRyaWVzLmhlYWQ7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19lbnRyeV9jb3B5OgotICogQGVudHJ5OiAjR3N0VG9jRW50cnkgdG8gY29weS4KLSAqCi0gKiBDb3B5ICNHc3RUb2NFbnRyeSB3aXRoIGFsbCBzdWJlbnRyaWVzIChkZWVwIGNvcHkpLgotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSk6IG5ld2x5IGFsbG9jYXRlZCAjR3N0VG9jRW50cnkgaW4gY2FzZSBvZgotICogc3VjY2VzcywgJU5VTEwgb3RoZXJ3aXNlOyBmcmVlIGl0IHdoZW4gZG9uZSB3aXRoCi0gKiBnc3RfdG9jX2VudHJ5X3VucmVmKCkuCi0gKi8KLXN0YXRpYyBHc3RUb2NFbnRyeSAqCi1nc3RfdG9jX2VudHJ5X2NvcHkgKGNvbnN0IEdzdFRvY0VudHJ5ICogZW50cnkpCi17Ci0gIEdzdFRvY0VudHJ5ICpyZXQ7Ci0gIEdzdFRhZ0xpc3QgKmxpc3Q7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5ICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldCA9IGdzdF90b2NfZW50cnlfbmV3IChlbnRyeS0+dHlwZSwgZW50cnktPnVpZCk7Ci0KLSAgcmV0LT5zdGFydCA9IGVudHJ5LT5zdGFydDsKLSAgcmV0LT5zdG9wID0gZW50cnktPnN0b3A7Ci0KLSAgaWYgKEdTVF9JU19UQUdfTElTVCAoZW50cnktPnRhZ3MpKSB7Ci0gICAgbGlzdCA9IGdzdF90YWdfbGlzdF9jb3B5IChlbnRyeS0+dGFncyk7Ci0gICAgaWYgKHJldC0+dGFncykKLSAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAocmV0LT50YWdzKTsKLSAgICByZXQtPnRhZ3MgPSBsaXN0OwotICB9Ci0KLSAgcmV0LT5zdWJlbnRyaWVzID0gZ3N0X3RvY19kZWVwX2NvcHlfdG9jX2VudHJpZXMgKGVudHJ5LT5zdWJlbnRyaWVzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF90b2NfY29weToKLSAqIEB0b2M6ICNHc3RUb2MgdG8gY29weS4KLSAqCi0gKiBDb3B5ICNHc3RUb2Mgd2l0aCBhbGwgc3ViZW50cmllcyAoZGVlcCBjb3B5KS4KLSAqCi0gKiBSZXR1cm5zOiAobnVsbGFibGUpOiBuZXdseSBhbGxvY2F0ZWQgI0dzdFRvYyBpbiBjYXNlIG9mIHN1Y2Nlc3MsCi0gKiAlTlVMTCBvdGhlcndpc2U7IGZyZWUgaXQgd2hlbiBkb25lIHdpdGggZ3N0X3RvY191bnJlZigpLgotICovCi1zdGF0aWMgR3N0VG9jICoKLWdzdF90b2NfY29weSAoY29uc3QgR3N0VG9jICogdG9jKQotewotICBHc3RUb2MgKnJldDsKLSAgR3N0VGFnTGlzdCAqbGlzdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodG9jICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldCA9IGdzdF90b2NfbmV3ICh0b2MtPnNjb3BlKTsKLQotICBpZiAoR1NUX0lTX1RBR19MSVNUICh0b2MtPnRhZ3MpKSB7Ci0gICAgbGlzdCA9IGdzdF90YWdfbGlzdF9jb3B5ICh0b2MtPnRhZ3MpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAocmV0LT50YWdzKTsKLSAgICByZXQtPnRhZ3MgPSBsaXN0OwotICB9Ci0KLSAgcmV0LT5lbnRyaWVzID0gZ3N0X3RvY19kZWVwX2NvcHlfdG9jX2VudHJpZXMgKHRvYy0+ZW50cmllcyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wX3RpbWVzOgotICogQGVudHJ5OiAjR3N0VG9jRW50cnkgdG8gc2V0IHZhbHVlcy4KLSAqIEBzdGFydDogc3RhcnQgdmFsdWUgdG8gc2V0LgotICogQHN0b3A6IHN0b3AgdmFsdWUgdG8gc2V0LgotICoKLSAqIFNldCBAc3RhcnQgYW5kIEBzdG9wIHZhbHVlcyBmb3IgdGhlIEBlbnRyeS4KLSAqLwotdm9pZAotZ3N0X3RvY19lbnRyeV9zZXRfc3RhcnRfc3RvcF90aW1lcyAoR3N0VG9jRW50cnkgKiBlbnRyeSwgZ2ludDY0IHN0YXJ0LAotICAgIGdpbnQ2NCBzdG9wKQotewotICBnX3JldHVybl9pZl9mYWlsIChlbnRyeSAhPSBOVUxMKTsKLQotICBlbnRyeS0+c3RhcnQgPSBzdGFydDsKLSAgZW50cnktPnN0b3AgPSBzdG9wOwotfQotCi0vKioKLSAqIGdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXM6Ci0gKiBAZW50cnk6ICNHc3RUb2NFbnRyeSB0byBnZXQgdmFsdWVzIGZyb20uCi0gKiBAc3RhcnQ6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSBzdGFydCB2YWx1ZSwgbGVhdmUKLSAqICAgJU5VTEwgaWYgbm90IG5lZWQuCi0gKiBAc3RvcDogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgc3RvcmFnZSBmb3IgdGhlIHN0b3AgdmFsdWUsIGxlYXZlCi0gKiAgICVOVUxMIGlmIG5vdCBuZWVkLgotICoKLSAqIEdldCBAc3RhcnQgYW5kIEBzdG9wIHZhbHVlcyBmcm9tIHRoZSBAZW50cnkgYW5kIHdyaXRlIHRoZW0gaW50byBhcHByb3ByaWF0ZQotICogc3RvcmFnZXMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYWxsIG5vbi0lTlVMTCBzdG9yYWdlIHBvaW50ZXJzIHdlcmUgZmlsbGVkIHdpdGggYXBwcm9wcmlhdGUKLSAqIHZhbHVlcywgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXMgKGNvbnN0IEdzdFRvY0VudHJ5ICogZW50cnksIGdpbnQ2NCAqIHN0YXJ0LAotICAgIGdpbnQ2NCAqIHN0b3ApCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKHN0YXJ0ICE9IE5VTEwpCi0gICAgKnN0YXJ0ID0gZW50cnktPnN0YXJ0OwotICBpZiAoc3RvcCAhPSBOVUxMKQotICAgICpzdG9wID0gZW50cnktPnN0b3A7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19lbnRyeV9zZXRfbG9vcDoKLSAqIEBlbnRyeTogI0dzdFRvY0VudHJ5IHRvIHNldCB2YWx1ZXMuCi0gKiBAbG9vcF90eXBlOiBsb29wX3R5cGUgdmFsdWUgdG8gc2V0LgotICogQHJlcGVhdF9jb3VudDogcmVwZWF0X2NvdW50IHZhbHVlIHRvIHNldC4KLSAqCi0gKiBTZXQgQGxvb3BfdHlwZSBhbmQgQHJlcGVhdF9jb3VudCB2YWx1ZXMgZm9yIHRoZSBAZW50cnkuCi0gKgotICogU2luY2U6IDEuNAotICovCi12b2lkCi1nc3RfdG9jX2VudHJ5X3NldF9sb29wIChHc3RUb2NFbnRyeSAqIGVudHJ5LCBHc3RUb2NMb29wVHlwZSBsb29wX3R5cGUsCi0gICAgZ2ludCByZXBlYXRfY291bnQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5ICE9IE5VTEwpOwotCi0gIGVudHJ5LT5sb29wX3R5cGUgPSBsb29wX3R5cGU7Ci0gIGVudHJ5LT5yZXBlYXRfY291bnQgPSByZXBlYXRfY291bnQ7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19lbnRyeV9nZXRfbG9vcDoKLSAqIEBlbnRyeTogI0dzdFRvY0VudHJ5IHRvIGdldCB2YWx1ZXMgZnJvbS4KLSAqIEBsb29wX3R5cGU6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSBsb29wX3R5cGUKLSAqICAgICAgICAgICAgIHZhbHVlLCBsZWF2ZSAlTlVMTCBpZiBub3QgbmVlZC4KLSAqIEByZXBlYXRfY291bnQ6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIHN0b3JhZ2UgZm9yIHRoZSByZXBlYXRfY291bnQKLSAqICAgICAgICAgICAgICAgIHZhbHVlLCBsZWF2ZSAlTlVMTCBpZiBub3QgbmVlZC4KLSAqCi0gKiBHZXQgQGxvb3BfdHlwZSBhbmQgQHJlcGVhdF9jb3VudCB2YWx1ZXMgZnJvbSB0aGUgQGVudHJ5IGFuZCB3cml0ZSB0aGVtIGludG8KLSAqIGFwcHJvcHJpYXRlIHN0b3JhZ2VzLiBMb29wcyBhcmUgZS5nLiB1c2VkIGJ5IHNhbXBsZWQgaW5zdHJ1bWVudHMuIEdTdHJlYW1lcgotICogaXMgbm90IGF1dG9tYXRpY2FsbHkgYXBwbHlpbmcgdGhlIGxvb3AuIFRoZSBhcHBsaWNhdGlvbiBjYW4gcHJvY2VzcyB0aGlzCi0gKiBtZXRhIGRhdGEgYW5kIHVzZSBpdCBlLmcuIHRvIHNlbmQgYSBzZWVrLWV2ZW50IHRvIGxvb3AgYSBzZWN0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGFsbCBub24tJU5VTEwgc3RvcmFnZSBwb2ludGVycyB3ZXJlIGZpbGxlZCB3aXRoIGFwcHJvcHJpYXRlCi0gKiB2YWx1ZXMsICVGQUxTRSBvdGhlcndpc2UuCi0gKgotICogU2luY2U6IDEuNAotICovCi1nYm9vbGVhbgotZ3N0X3RvY19lbnRyeV9nZXRfbG9vcCAoY29uc3QgR3N0VG9jRW50cnkgKiBlbnRyeSwgR3N0VG9jTG9vcFR5cGUgKiBsb29wX3R5cGUsCi0gICAgZ2ludCAqIHJlcGVhdF9jb3VudCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5ICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAobG9vcF90eXBlICE9IE5VTEwpCi0gICAgKmxvb3BfdHlwZSA9IGVudHJ5LT5sb29wX3R5cGU7Ci0gIGlmIChyZXBlYXRfY291bnQgIT0gTlVMTCkKLSAgICAqcmVwZWF0X2NvdW50ID0gZW50cnktPnJlcGVhdF9jb3VudDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi0vKioKLSAqIGdzdF90b2NfZW50cnlfdHlwZV9nZXRfbmljazoKLSAqIEB0eXBlOiBhICNHc3RUb2NFbnRyeVR5cGUuCi0gKgotICogQ29udmVydHMgQHR5cGUgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi0gKgotICogUmV0dXJuczogUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBmb3IgQHR5cGUuIFRoaXMgc3RyaW5nIGlzCi0gKiAgICBvbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZSBhbmQgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQgaW4gYSB1c2VyCi0gKiAgICBpbnRlcmZhY2UuCi0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF90b2NfZW50cnlfdHlwZV9nZXRfbmljayAoR3N0VG9jRW50cnlUeXBlIHR5cGUpCi17Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR1NUX1RPQ19FTlRSWV9UWVBFX0FOR0xFOgotICAgICAgcmV0dXJuICJhbmdsZSI7Ci0gICAgY2FzZSBHU1RfVE9DX0VOVFJZX1RZUEVfVkVSU0lPTjoKLSAgICAgIHJldHVybiAidmVyc2lvbiI7Ci0gICAgY2FzZSBHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTjoKLSAgICAgIHJldHVybiAiZWRpdGlvbiI7Ci0gICAgY2FzZSBHU1RfVE9DX0VOVFJZX1RZUEVfVElUTEU6Ci0gICAgICByZXR1cm4gInRpdGxlIjsKLSAgICBjYXNlIEdTVF9UT0NfRU5UUllfVFlQRV9UUkFDSzoKLSAgICAgIHJldHVybiAidHJhY2siOwotICAgIGNhc2UgR1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVI6Ci0gICAgICByZXR1cm4gImNoYXB0ZXIiOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gImludmFsaWQiOwotfQotCi0vKioKLSAqIGdzdF90b2NfZW50cnlfZ2V0X2VudHJ5X3R5cGU6Ci0gKiBAZW50cnk6IGEgI0dzdFRvY0VudHJ5Ci0gKgotICogUmV0dXJuczogQGVudHJ5J3MgZW50cnkgdHlwZQotICovCi1Hc3RUb2NFbnRyeVR5cGUKLWdzdF90b2NfZW50cnlfZ2V0X2VudHJ5X3R5cGUgKGNvbnN0IEdzdFRvY0VudHJ5ICogZW50cnkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeSAhPSBOVUxMLCBHU1RfVE9DX0VOVFJZX1RZUEVfSU5WQUxJRCk7Ci0KLSAgcmV0dXJuIGVudHJ5LT50eXBlOwotfQotCi0vKioKLSAqIGdzdF90b2NfZW50cnlfaXNfYWx0ZXJuYXRpdmU6Ci0gKiBAZW50cnk6IGEgI0dzdFRvY0VudHJ5Ci0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQGVudHJ5J3MgdHlwZSBpcyBhbiBhbHRlcm5hdGl2ZSB0eXBlLCBvdGhlcndpc2UgJUZBTFNFCi0gKi8KLWdib29sZWFuCi1nc3RfdG9jX2VudHJ5X2lzX2FsdGVybmF0aXZlIChjb25zdCBHc3RUb2NFbnRyeSAqIGVudHJ5KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHJldHVybiBHU1RfVE9DX0VOVFJZX1RZUEVfSVNfQUxURVJOQVRJVkUgKGVudHJ5LT50eXBlKTsKLX0KLQotLyoqCi0gKiBnc3RfdG9jX2VudHJ5X2lzX3NlcXVlbmNlOgotICogQGVudHJ5OiBhICNHc3RUb2NFbnRyeQotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBlbnRyeSdzIHR5cGUgaXMgYSBzZXF1ZW5jZSB0eXBlLCBvdGhlcndpc2UgJUZBTFNFCi0gKi8KLWdib29sZWFuCi1nc3RfdG9jX2VudHJ5X2lzX3NlcXVlbmNlIChjb25zdCBHc3RUb2NFbnRyeSAqIGVudHJ5KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHJldHVybiBHU1RfVE9DX0VOVFJZX1RZUEVfSVNfU0VRVUVOQ0UgKGVudHJ5LT50eXBlKTsKLX0KLQotLyoqCi0gKiBnc3RfdG9jX2VudHJ5X2dldF91aWQ6Ci0gKiBAZW50cnk6IEEgI0dzdFRvY0VudHJ5IGluc3RhbmNlCi0gKgotICogR2V0cyB0aGUgVUlEIG9mIEBlbnRyeS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IFRoZSBVSUQgb2YgQGVudHJ5Ci0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF90b2NfZW50cnlfZ2V0X3VpZCAoY29uc3QgR3N0VG9jRW50cnkgKiBlbnRyeSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5ICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBlbnRyeS0+dWlkOwotfQotCi0vKioKLSAqIGdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyeToKLSAqIEBlbnRyeTogQSAjR3N0VG9jRW50cnkgaW5zdGFuY2UKLSAqIEBzdWJlbnRyeTogKHRyYW5zZmVyIGZ1bGwpOiBBICNHc3RUb2NFbnRyeQotICoKLSAqIEFwcGVuZHMgdGhlICNHc3RUb2NFbnRyeSBAc3ViZW50cnkgdG8gQGVudHJ5LgotICovCi12b2lkCi1nc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnkgKEdzdFRvY0VudHJ5ICogZW50cnksIEdzdFRvY0VudHJ5ICogc3ViZW50cnkpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChzdWJlbnRyeSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZW50cnkpKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QKLSAgICAgICAgICAoc3ViZW50cnkpKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN1YmVudHJ5LT50b2MgPT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN1YmVudHJ5LT5wYXJlbnQgPT0gTlVMTCk7Ci0KLSAgZW50cnktPnN1YmVudHJpZXMgPSBnX2xpc3RfYXBwZW5kIChlbnRyeS0+c3ViZW50cmllcywgc3ViZW50cnkpOwotICBzdWJlbnRyeS0+dG9jID0gZW50cnktPnRvYzsKLSAgc3ViZW50cnktPnBhcmVudCA9IGVudHJ5OwotCi0gIEdTVF9MT0cgKCJhcHBlbmRlZCAlcyBzdWJlbnRyeSB3aXRoIHVpZCAlcyB0byBlbnRyeSAlcyIsCi0gICAgICBnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X25pY2sgKHN1YmVudHJ5LT50eXBlKSwgc3ViZW50cnktPnVpZCwgZW50cnktPnVpZCk7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXM6Ci0gKiBAZW50cnk6IEEgI0dzdFRvY0VudHJ5IGluc3RhbmNlCi0gKgotICogR2V0cyB0aGUgc3ViLWVudHJpZXMgb2YgQGVudHJ5LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoZWxlbWVudC10eXBlIEdzdC5Ub2NFbnRyeSk6IEEgI0dMaXN0IG9mICNHc3RUb2NFbnRyeSBvZiBAZW50cnkKLSAqLwotR0xpc3QgKgotZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGNvbnN0IEdzdFRvY0VudHJ5ICogZW50cnkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeSAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gZW50cnktPnN1YmVudHJpZXM7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19lbnRyeV9zZXRfdGFnczoKLSAqIEBlbnRyeTogQSAjR3N0VG9jRW50cnkgaW5zdGFuY2UKLSAqIEB0YWdzOiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBBICNHc3RUYWdMaXN0IG9yICVOVUxMCi0gKgotICogU2V0IGEgI0dzdFRhZ0xpc3Qgd2l0aCB0YWdzIGZvciB0aGUgY29tcGxldGUgQGVudHJ5LgotICovCi12b2lkCi1nc3RfdG9jX2VudHJ5X3NldF90YWdzIChHc3RUb2NFbnRyeSAqIGVudHJ5LCBHc3RUYWdMaXN0ICogdGFncykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZW50cnkgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGVudHJ5KSkpOwotCi0gIGlmIChlbnRyeS0+dGFncykKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGVudHJ5LT50YWdzKTsKLSAgZW50cnktPnRhZ3MgPSB0YWdzOwotfQotCi0vKioKLSAqIGdzdF90b2NfZW50cnlfbWVyZ2VfdGFnczoKLSAqIEBlbnRyeTogQSAjR3N0VG9jRW50cnkgaW5zdGFuY2UKLSAqIEB0YWdzOiAoYWxsb3ctbm9uZSk6IEEgI0dzdFRhZ0xpc3Qgb3IgJU5VTEwKLSAqIEBtb2RlOiBBICNHc3RUYWdNZXJnZU1vZGUKLSAqCi0gKiBNZXJnZSBAdGFncyBpbnRvIHRoZSBleGlzdGluZyB0YWdzIG9mIEBlbnRyeSB1c2luZyBAbW9kZS4KLSAqLwotdm9pZAotZ3N0X3RvY19lbnRyeV9tZXJnZV90YWdzIChHc3RUb2NFbnRyeSAqIGVudHJ5LCBHc3RUYWdMaXN0ICogdGFncywKLSAgICBHc3RUYWdNZXJnZU1vZGUgbW9kZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZW50cnkgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGVudHJ5KSkpOwotCi0gIGlmICghZW50cnktPnRhZ3MpIHsKLSAgICBlbnRyeS0+dGFncyA9IGdzdF90YWdfbGlzdF9yZWYgKHRhZ3MpOwotICB9IGVsc2UgewotICAgIEdzdFRhZ0xpc3QgKnRtcCA9IGdzdF90YWdfbGlzdF9tZXJnZSAoZW50cnktPnRhZ3MsIHRhZ3MsIG1vZGUpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoZW50cnktPnRhZ3MpOwotICAgIGVudHJ5LT50YWdzID0gdG1wOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3RvY19lbnRyeV9nZXRfdGFnczoKLSAqIEBlbnRyeTogQSAjR3N0VG9jRW50cnkgaW5zdGFuY2UKLSAqCi0gKiBHZXRzIHRoZSB0YWdzIGZvciBAZW50cnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNHc3RUYWdMaXN0IGZvciBAZW50cnkKLSAqLwotR3N0VGFnTGlzdCAqCi1nc3RfdG9jX2VudHJ5X2dldF90YWdzIChjb25zdCBHc3RUb2NFbnRyeSAqIGVudHJ5KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIGVudHJ5LT50YWdzOwotfQotCi0vKioKLSAqIGdzdF90b2NfZW50cnlfZ2V0X3RvYzoKLSAqIEBlbnRyeTogQSAjR3N0VG9jRW50cnkgaW5zdGFuY2UKLSAqCi0gKiBHZXRzIHRoZSBwYXJlbnQgI0dzdFRvYyBvZiBAZW50cnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBUaGUgcGFyZW50ICNHc3RUb2Mgb2YgQGVudHJ5Ci0gKi8KLUdzdFRvYyAqCi1nc3RfdG9jX2VudHJ5X2dldF90b2MgKEdzdFRvY0VudHJ5ICogZW50cnkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeSAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gZW50cnktPnRvYzsKLX0KLQotLyoqCi0gKiBnc3RfdG9jX2VudHJ5X2dldF9wYXJlbnQ6Ci0gKiBAZW50cnk6IEEgI0dzdFRvY0VudHJ5IGluc3RhbmNlCi0gKgotICogR2V0cyB0aGUgcGFyZW50ICNHc3RUb2NFbnRyeSBvZiBAZW50cnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBUaGUgcGFyZW50ICNHc3RUb2NFbnRyeSBvZiBAZW50cnkKLSAqLwotR3N0VG9jRW50cnkgKgotZ3N0X3RvY19lbnRyeV9nZXRfcGFyZW50IChHc3RUb2NFbnRyeSAqIGVudHJ5KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIGVudHJ5LT5wYXJlbnQ7Ci19Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi1zdGF0aWMgdm9pZAotZ3N0X3RvY19kdW1wX2VudHJpZXMgKEdMaXN0ICogZW50cmllcywgZ3VpbnQgZGVwdGgpCi17Ci0gIEdMaXN0ICplOwotICBnY2hhciAqaW5kZW50OwotCi0gIGluZGVudCA9IGdfbWFsbG9jMCAoZGVwdGggKyAxKTsKLSAgbWVtc2V0IChpbmRlbnQsICcgJywgZGVwdGgpOwotICBmb3IgKGUgPSBlbnRyaWVzOyBlICE9IE5VTEw7IGUgPSBlLT5uZXh0KSB7Ci0gICAgR3N0VG9jRW50cnkgKmVudHJ5ID0gZS0+ZGF0YTsKLQotICAgIEdTVF9UUkFDRSAoIiVzKyAlcyAoJXMpLCAlIiBHU1RfVElNRV9GT1JNQVQgIiAtICUiIEdTVF9USU1FX0ZPUk1BVCAiLCAiCi0gICAgICAgICJ0YWdzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5kZW50LCBlbnRyeS0+dWlkLAotICAgICAgICBnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X25pY2sgKGVudHJ5LT50eXBlKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZW50cnktPnN0YXJ0KSwgR1NUX1RJTUVfQVJHUyAoZW50cnktPnN0b3ApLCBlbnRyeS0+dGFncyk7Ci0KLSAgICBpZiAoZW50cnktPnN1YmVudHJpZXMgIT0gTlVMTCkKLSAgICAgIGdzdF90b2NfZHVtcF9lbnRyaWVzIChlbnRyeS0+c3ViZW50cmllcywgZGVwdGggKyAyKTsKLSAgfQotICBnX2ZyZWUgKGluZGVudCk7Ci19Ci0jZW5kaWYKLQotdm9pZAotZ3N0X3RvY19kdW1wIChHc3RUb2MgKiB0b2MpCi17Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBHU1RfVFJBQ0UgKCIgICAgICAgIFRvYyAlcCwgc2NvcGU6ICVzLCB0YWdzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgdG9jLAotICAgICAgKHRvYy0+c2NvcGUgPT0gR1NUX1RPQ19TQ09QRV9HTE9CQUwpID8gImdsb2JhbCIgOiAiY3VycmVudCIsIHRvYy0+dGFncyk7Ci0gIGdzdF90b2NfZHVtcF9lbnRyaWVzICh0b2MtPmVudHJpZXMsIDIpOwotI2VuZGlmCi19Ci0KLXZvaWQKLV9wcml2X2dzdF90b2NfaW5pdGlhbGl6ZSAodm9pZCkKLXsKLSAgX2dzdF90b2NfdHlwZSA9IGdzdF90b2NfZ2V0X3R5cGUgKCk7Ci0gIF9nc3RfdG9jX2VudHJ5X3R5cGUgPSBnc3RfdG9jX2VudHJ5X2dldF90eXBlICgpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRvYy5oIGIvZ3N0L2dzdHRvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGYzYTM1Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0b2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIChjKSAyMDEwLCAyMDEyIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0gKgotICogZ3N0dG9jLmg6IGdlbmVyaWMgVE9DIEFQSSBkZWNsYXJhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfVE9DX0hfXwotI2RlZmluZSBfX0dTVF9UT0NfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdG1pbmlvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0c3RydWN0dXJlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRhZ2xpc3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Zm9ybWF0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X3RvY190eXBlOwotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X3RvY19lbnRyeV90eXBlOwotCi0jZGVmaW5lIEdTVF9UWVBFX1RPQyAoX2dzdF90b2NfdHlwZSkKLSNkZWZpbmUgR1NUX1RZUEVfVE9DX0VOVFJZIChfZ3N0X3RvY19lbnRyeV90eXBlKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VG9jRW50cnkgR3N0VG9jRW50cnk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VG9jIEdzdFRvYzsKLQotLyoqCi0gKiBHc3RUb2NTY29wZToKLSAqIEBHU1RfVE9DX1NDT1BFX0dMT0JBTDogZ2xvYmFsIFRPQyByZXByZXNlbnRpbmcgYWxsIHNlbGVjdGFibGUgb3B0aW9ucwotICogICAgICh0aGlzIGlzIHdoYXQgYXBwbGljYXRpb25zIGFyZSB1c3VhbGx5IGludGVyZXN0ZWQgaW4pCi0gKiBAR1NUX1RPQ19TQ09QRV9DVVJSRU5UOiBUT0MgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlL3NlbGVjdGVkIHN0cmVhbQotICogICAgICh0aGlzIGlzIGEgVE9DIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBzdHJlYW0gZnJvbSBzdGFydCB0byBFT1MsCi0gKiAgICAgYW5kIGlzIHdoYXQgYSBUT0Mgd3JpdGVyIC8gbXV4ZXIgaXMgdXN1YWxseSBpbnRlcmVzdGVkIGluOyBpdCB3aWxsCi0gKiAgICAgdXN1YWxseSBiZSBhIHN1YnNldCBvZiB0aGUgZ2xvYmFsIFRPQywgZS5nLiBqdXN0IHRoZSBjaGFwdGVycyBvZgotICogICAgIHRoZSBjdXJyZW50IHRpdGxlLCBvciB0aGUgY2hhcHRlcnMgc2VsZWN0ZWQgZm9yIHBsYXliYWNrIGZyb20gdGhlCi0gKiAgICAgY3VycmVudCB0aXRsZSkKLSAqCi0gKiBUaGUgc2NvcGUgb2YgYSBUT0MuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9UT0NfU0NPUEVfR0xPQkFMID0gMSwKLSAgR1NUX1RPQ19TQ09QRV9DVVJSRU5UID0gMgotfSBHc3RUb2NTY29wZTsKLQotLyoqCi0gKiBHc3RUb2NFbnRyeVR5cGU6Ci0gKiBAR1NUX1RPQ19FTlRSWV9UWVBFX0FOR0xFOiBlbnRyeSBpcyBhbiBhbmdsZSAoaS5lLiBhbiBhbHRlcm5hdGl2ZSkKLSAqIEBHU1RfVE9DX0VOVFJZX1RZUEVfVkVSU0lPTjogZW50cnkgaXMgYSB2ZXJzaW9uIChpLmUuIGFsdGVybmF0aXZlKQotICogQEdTVF9UT0NfRU5UUllfVFlQRV9FRElUSU9OOiBlbnRyeSBpcyBhbiBlZGl0aW9uIChpLmUuIGFsdGVybmF0aXZlKQotICogQEdTVF9UT0NfRU5UUllfVFlQRV9JTlZBTElEOiBpbnZhbGlkIGVudHJ5IHR5cGUgdmFsdWUKLSAqIEBHU1RfVE9DX0VOVFJZX1RZUEVfVElUTEU6IGVudHJ5IGlzIGEgdGl0bGUgKGkuZS4gYSBwYXJ0IG9mIGEgc2VxdWVuY2UpCi0gKiBAR1NUX1RPQ19FTlRSWV9UWVBFX1RSQUNLOiBlbnRyeSBpcyBhIHRyYWNrIChpLmUuIGEgcGFydCBvZiBhIHNlcXVlbmNlKQotICogQEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSOiBlbnRyeSBpcyBhIGNoYXB0ZXIgKGkuZS4gYSBwYXJ0IG9mIGEgc2VxdWVuY2UpCi0gKgotICogVGhlIGRpZmZlcmVudCB0eXBlcyBvZiBUT0MgZW50cmllcyAoc2VlICNHc3RUb2NFbnRyeSkuCi0gKgotICogVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBUT0MgZW50cmllczogYWx0ZXJuYXRpdmVzIG9yIHBhcnRzIGluIGEgc2VxdWVuY2UuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9UT0NfRU5UUllfVFlQRV9BTkdMRSAgICAgICA9IC0zLAotICBHU1RfVE9DX0VOVFJZX1RZUEVfVkVSU0lPTiAgICAgPSAtMiwKLSAgR1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT04gICAgID0gLTEsCi0gIEdTVF9UT0NfRU5UUllfVFlQRV9JTlZBTElEICAgICA9IDAsCi0gIEdTVF9UT0NfRU5UUllfVFlQRV9USVRMRSAgICAgICA9IDEsCi0gIEdTVF9UT0NfRU5UUllfVFlQRV9UUkFDSyAgICAgICA9IDIsCi0gIEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSICAgICA9IDMsCi19IEdzdFRvY0VudHJ5VHlwZTsKLQotLyoqCi0gKiBHU1RfVE9DX0VOVFJZX1RZUEVfSVNfQUxURVJOQVRJVkU6Ci0gKiBAZW50cnlfdHlwZTogVGhlICNHc3RUb2NFbnRyeVR5cGUgZnJvbSBhICNHc3RUb2NFbnRyeQotICoKLSAqIENoZWNrcyBpZiBAZW50cnlfdHlwZSBpbmRpY2F0ZXMgdGhhdCBpdHMgI0dzdFRvY0VudHJ5IGlzIGFuIGFsdGVybmF0aXZlLgotICovCi0jZGVmaW5lIEdTVF9UT0NfRU5UUllfVFlQRV9JU19BTFRFUk5BVElWRShlbnRyeV90eXBlKSAgKGVudHJ5X3R5cGUgPCAwKQotCi0vKioKLSAqIEdTVF9UT0NfRU5UUllfVFlQRV9JU19TRVFVRU5DRToKLSAqIEBlbnRyeV90eXBlOiBUaGUgI0dzdFRvY0VudHJ5VHlwZSBmcm9tIGEgI0dzdFRvY0VudHJ5Ci0gKgotICogQ2hlY2tzIGlmIEBlbnRyeV90eXBlIGluZGljYXRlcyB0aGF0IGl0cyAjR3N0VG9jRW50cnkgaXMgYSBzZXF1ZW5jZS4KLSAqLwotI2RlZmluZSBHU1RfVE9DX0VOVFJZX1RZUEVfSVNfU0VRVUVOQ0UoZW50cnlfdHlwZSkgICAgIChlbnRyeV90eXBlID4gMCkKLQotLyoqCi0gKiBHc3RUb2NMb29wVHlwZToKLSAqIEBHU1RfVE9DX0xPT1BfTk9ORTogc2luZ2xlIGZvcndhcmQgcGxheWJhY2sKLSAqIEBHU1RfVE9DX0xPT1BfRk9SV0FSRDogcmVwZWF0IGZvcndhcmQKLSAqIEBHU1RfVE9DX0xPT1BfUkVWRVJTRTogcmVwZWF0IGJhY2t3YXJkCi0gKiBAR1NUX1RPQ19MT09QX1BJTkdfUE9ORzogcmVwZWF0IGZvcndhcmQgYW5kIGJhY2t3YXJkCi0gKgotICogSG93IGEgI0dzdFRvY0VudHJ5IHNob3VsZCBiZSByZXBlYXRlZC4gQnkgZGVmYXVsdCwgZW50cmllcyBhcmUgcGxheWVkIGEKLSAqIHNpbmdsZSB0aW1lLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1RPQ19MT09QX05PTkUgPSAwLAotICBHU1RfVE9DX0xPT1BfRk9SV0FSRCwKLSAgR1NUX1RPQ19MT09QX1JFVkVSU0UsCi0gIEdTVF9UT0NfTE9PUF9QSU5HX1BPTkcKLX0gR3N0VG9jTG9vcFR5cGU7Ci0KLS8qKgotICogR1NUX1RPQ19SRVBFQVRfQ09VTlRfSU5GSU5JVEU6Ci0gKgotICogU3BlY2lhbCB2YWx1ZSBmb3IgdGhlIHJlcGVhdF9jb3VudCBzZXQgaW4gZ3N0X3RvY19lbnRyeV9zZXRfbG9vcCgpIG9yCi0gKiByZXR1cm5lZCBieSBnc3RfdG9jX2VudHJ5X3NldF9sb29wKCkgdG8gaW5kaWNhdGUgaW5maW5pdGUgbG9vcGluZy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLSNkZWZpbmUgR1NUX1RPQ19SRVBFQVRfQ09VTlRfSU5GSU5JVEUgKC0xKQotCi0vKiBmdW5jdGlvbnMgdG8gcmV0dXJuIHR5cGUgc3RydWN0dXJlcyAqLwotR1R5cGUgICAgICAgICAgIGdzdF90b2NfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOwotR1R5cGUgICAgICAgICAgIGdzdF90b2NfZW50cnlfZ2V0X3R5cGUgICAgICAgICAgKHZvaWQpOwotCi0vKiBmdW5jdGlvbnMgdG8gY3JlYXRlLCByZWYgYW5kIHVucmVmL2ZyZWUgVE9DcyAqLwotR3N0VG9jICogICAgICAgICAgIGdzdF90b2NfbmV3ICAgICAgICAgICAgICAgICAgICAgKEdzdFRvY1Njb3BlIHNjb3BlKTsKLQotR3N0VG9jU2NvcGUgICAgICAgIGdzdF90b2NfZ2V0X3Njb3BlICAgICAgICAgICAgICAgKGNvbnN0IEdzdFRvYyAqdG9jKTsKLQotdm9pZCAgICAgICAgICAgICAgIGdzdF90b2Nfc2V0X3RhZ3MgICAgICAgICAgICAgICAgKEdzdFRvYyAqdG9jLCBHc3RUYWdMaXN0ICogdGFncyk7Ci12b2lkICAgICAgICAgICAgICAgZ3N0X3RvY19tZXJnZV90YWdzICAgICAgICAgICAgICAoR3N0VG9jICp0b2MsIEdzdFRhZ0xpc3QgKnRhZ3MsIEdzdFRhZ01lcmdlTW9kZSBtb2RlKTsKLUdzdFRhZ0xpc3QgKiAgICAgICBnc3RfdG9jX2dldF90YWdzICAgICAgICAgICAgICAgIChjb25zdCBHc3RUb2MgKnRvYyk7Ci0KLXZvaWQgICAgICAgICAgICAgICBnc3RfdG9jX2FwcGVuZF9lbnRyeSAgICAgICAgICAgICAgIChHc3RUb2MgKnRvYywgR3N0VG9jRW50cnkgKmVudHJ5KTsKLUdMaXN0ICogICAgICAgICAgICBnc3RfdG9jX2dldF9lbnRyaWVzICAgICAgICAgICAgIChjb25zdCBHc3RUb2MgKnRvYyk7Ci0KLXZvaWQgICAgICAgICAgICAgICBnc3RfdG9jX2R1bXAgICAgICAgICAgICAgICAgICAgIChHc3RUb2MgKnRvYyk7Ci0KLSNkZWZpbmUgZ3N0X3RvY19yZWYodG9jKSAgICAgICAgICAgIChHc3RUb2MqKWdzdF9taW5pX29iamVjdF9yZWYoR1NUX01JTklfT0JKRUNUX0NBU1QodG9jKSkKLSNkZWZpbmUgZ3N0X3RvY191bnJlZih0b2MpICAgICAgICAgIGdzdF9taW5pX29iamVjdF91bnJlZihHU1RfTUlOSV9PQkpFQ1RfQ0FTVCh0b2MpKQotI2RlZmluZSBnc3RfdG9jX2NvcHkodG9jKSAgICAgICAgICAgKEdzdFRvYyopZ3N0X21pbmlfb2JqZWN0X2NvcHkoR1NUX01JTklfT0JKRUNUX0NBU1QodG9jKSkKLSNkZWZpbmUgZ3N0X3RvY19tYWtlX3dyaXRhYmxlKHRvYykgIChHc3RUb2MqKWdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlKEdTVF9NSU5JX09CSkVDVF9DQVNUKHRvYykpCi0KLS8qIGZ1bmN0aW9ucyB0byBjcmVhdGUsIHJlZiBhbmQgdW5yZWYvZnJlZSBUT0MgZW50cmllcyAqLwotR3N0VG9jRW50cnkgKiAgIGdzdF90b2NfZW50cnlfbmV3ICAgICAgICAgICAgICAgKEdzdFRvY0VudHJ5VHlwZSB0eXBlLCBjb25zdCBnY2hhciAqdWlkKTsKLQotI2RlZmluZSBnc3RfdG9jX2VudHJ5X3JlZihlbnRyeSkgICAgICAgICAgICAoR3N0VG9jRW50cnkqKWdzdF9taW5pX29iamVjdF9yZWYoR1NUX01JTklfT0JKRUNUX0NBU1QoZW50cnkpKQotI2RlZmluZSBnc3RfdG9jX2VudHJ5X3VucmVmKGVudHJ5KSAgICAgICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYoR1NUX01JTklfT0JKRUNUX0NBU1QoZW50cnkpKQotI2RlZmluZSBnc3RfdG9jX2VudHJ5X2NvcHkoZW50cnkpICAgICAgICAgICAoR3N0VG9jRW50cnkqKWdzdF9taW5pX29iamVjdF9jb3B5KEdTVF9NSU5JX09CSkVDVF9DQVNUKGVudHJ5KSkKLSNkZWZpbmUgZ3N0X3RvY19lbnRyeV9tYWtlX3dyaXRhYmxlKGVudHJ5KSAgKEdzdFRvY0VudHJ5Kilnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZShHU1RfTUlOSV9PQkpFQ1RfQ0FTVChlbnRyeSkpCi0KLUdzdFRvY0VudHJ5ICogICAgICBnc3RfdG9jX2ZpbmRfZW50cnkgICAgICAgICAgICAgICAgICAgIChjb25zdCBHc3RUb2MgKnRvYywgY29uc3QgZ2NoYXIgKnVpZCk7Ci0KLUdzdFRvY0VudHJ5VHlwZSAgICBnc3RfdG9jX2VudHJ5X2dldF9lbnRyeV90eXBlICAgICAgICAgIChjb25zdCBHc3RUb2NFbnRyeSAqZW50cnkpOwotY29uc3QgZ2NoYXIgKiAgICAgIGdzdF90b2NfZW50cnlfZ2V0X3VpZCAgICAgICAgICAgICAgICAgKGNvbnN0IEdzdFRvY0VudHJ5ICplbnRyeSk7Ci0KLXZvaWQgICAgICAgICAgICAgICBnc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnkgICAgICAgICAgIChHc3RUb2NFbnRyeSAqZW50cnksIEdzdFRvY0VudHJ5ICpzdWJlbnRyeSk7Ci1HTGlzdCAqICAgICAgICAgICAgZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgICAgICAgICAoY29uc3QgR3N0VG9jRW50cnkgKmVudHJ5KTsKLQotdm9pZCAgICAgICAgICAgICAgIGdzdF90b2NfZW50cnlfc2V0X3RhZ3MgICAgICAgICAgICAgICAgKEdzdFRvY0VudHJ5ICplbnRyeSwgR3N0VGFnTGlzdCAqdGFncyk7Ci12b2lkICAgICAgICAgICAgICAgZ3N0X3RvY19lbnRyeV9tZXJnZV90YWdzICAgICAgICAgICAgICAoR3N0VG9jRW50cnkgKmVudHJ5LCBHc3RUYWdMaXN0ICp0YWdzLCBHc3RUYWdNZXJnZU1vZGUgbW9kZSk7Ci1Hc3RUYWdMaXN0ICogICAgICAgZ3N0X3RvY19lbnRyeV9nZXRfdGFncyAgICAgICAgICAgICAgICAoY29uc3QgR3N0VG9jRW50cnkgKmVudHJ5KTsKLQotZ2Jvb2xlYW4gICAgICAgICAgIGdzdF90b2NfZW50cnlfaXNfYWx0ZXJuYXRpdmUgICAgICAgICAgKGNvbnN0IEdzdFRvY0VudHJ5ICplbnRyeSk7Ci1nYm9vbGVhbiAgICAgICAgICAgZ3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZSAgICAgICAgICAgICAoY29uc3QgR3N0VG9jRW50cnkgKmVudHJ5KTsKLQotdm9pZCAgICAgICAgICAgICAgIGdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXMgICAgKEdzdFRvY0VudHJ5ICplbnRyeSwgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCk7Ci1nYm9vbGVhbiAgICAgICAgICAgZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyAgICAoY29uc3QgR3N0VG9jRW50cnkgKmVudHJ5LCBnaW50NjQgKnN0YXJ0LCBnaW50NjQgKnN0b3ApOwotCi12b2lkICAgICAgICAgICAgICAgZ3N0X3RvY19lbnRyeV9zZXRfbG9vcCAgICAgICAgICAgICAgICAoR3N0VG9jRW50cnkgKmVudHJ5LCBHc3RUb2NMb29wVHlwZSBsb29wX3R5cGUsIGdpbnQgcmVwZWF0X2NvdW50KTsKLWdib29sZWFuICAgICAgICAgICBnc3RfdG9jX2VudHJ5X2dldF9sb29wICAgICAgICAgICAgICAgIChjb25zdCBHc3RUb2NFbnRyeSAqZW50cnksIEdzdFRvY0xvb3BUeXBlICpsb29wX3R5cGUsIGdpbnQgKnJlcGVhdF9jb3VudCk7Ci0KLUdzdFRvYyAqICAgICAgICAgICBnc3RfdG9jX2VudHJ5X2dldF90b2MgICAgICAgICAgICAgICAgIChHc3RUb2NFbnRyeSAqZW50cnkpOwotR3N0VG9jRW50cnkgKiAgICAgIGdzdF90b2NfZW50cnlfZ2V0X3BhcmVudCAgICAgICAgICAgICAgKEdzdFRvY0VudHJ5ICplbnRyeSk7Ci0KLQotY29uc3QgZ2NoYXIgKiAgICAgIGdzdF90b2NfZW50cnlfdHlwZV9nZXRfbmljayAgICAgKEdzdFRvY0VudHJ5VHlwZSB0eXBlKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9nc3RfYXV0b3B0cl90b2NfdW5yZWYgKEdzdFRvYyAqdG9jKQotewotICBnc3RfdG9jX3VucmVmICh0b2MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9nc3RfYXV0b3B0cl90b2NfZW50cnlfdW5yZWYgKEdzdFRvY0VudHJ5ICplbnRyeSkKLXsKLSAgZ3N0X3RvY19lbnRyeV91bnJlZiAoZW50cnkpOwotfQotCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RUb2MsIF9nc3RfYXV0b3B0cl90b2NfdW5yZWYpCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RUb2NFbnRyeSwgX2dzdF9hdXRvcHRyX3RvY19lbnRyeV91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVE9DX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvZ3N0dG9jc2V0dGVyLmMgYi9nc3QvZ3N0dG9jc2V0dGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzdlYTUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHRvY3NldHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0gKgotICogZ3N0dG9jc2V0dGVyLmM6IGludGVyZmFjZSBmb3IgVE9DIHNldHRpbmcgb24gZWxlbWVudHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0dG9jc2V0dGVyCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHNldHRpbmcgYW5kIHJldHJpZXZhbAotICogICAgICAgICAgICAgICAgICAgICBvZiB0aGUgVE9DCi0gKgotICogRWxlbWVudCBpbnRlcmZhY2UgdGhhdCBhbGxvd3Mgc2V0dGluZyBvZiB0aGUgVE9DLgotICoKLSAqIEVsZW1lbnRzIHRoYXQgc3VwcG9ydCBzb21lIGtpbmQgb2YgY2hhcHRlcnMgb3IgZWRpdGlvbnMgKG9yIHRyYWNrcyBsaWtlIGluCi0gKiB0aGUgRkxBQyBjdWUgc2hlZXQpIHdpbGwgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgotICogCi0gKiBJZiB5b3UganVzdCB3YW50IHRvIHJldHJpZXZlIHRoZSBUT0MgaW4geW91ciBhcHBsaWNhdGlvbiB0aGVuIGFsbCB5b3UKLSAqIG5lZWQgdG8gZG8gaXMgd2F0Y2ggZm9yIFRPQyBtZXNzYWdlcyBvbiB5b3VyIHBpcGVsaW5lJ3MgYnVzIChvciB5b3UgY2FuCi0gKiBwZXJmb3JtIFRPQyBxdWVyeSkuIFRoaXMgaW50ZXJmYWNlIGlzIG9ubHkgZm9yIHNldHRpbmcgVE9DIGRhdGEsIG5vdCBmb3IKLSAqIGV4dHJhY3RpbmcgaXQuIFRvIHNldCBUT0MgZnJvbSB0aGUgYXBwbGljYXRpb24sIGZpbmQgcHJvcGVyIHRvY3NldHRlciBlbGVtZW50Ci0gKiBhbmQgc2V0IFRPQyB1c2luZyBnc3RfdG9jX3NldHRlcl9zZXRfdG9jKCkuCi0gKiAKLSAqIEVsZW1lbnRzIGltcGxlbWVudGluZyB0aGUgI0dzdFRvY1NldHRlciBpbnRlcmZhY2UgY2FuIGV4dGVuZCBleGlzdGluZyBUT0MKLSAqIGJ5IGdldHRpbmcgZXh0ZW5kIFVJRCBmb3IgdGhhdCAoeW91IGNhbiB1c2UgZ3N0X3RvY19maW5kX2VudHJ5KCkgdG8gcmV0cmlldmUgaXQpCi0gKiB3aXRoIGFueSBUT0MgZW50cmllcyByZWNlaXZlZCBmcm9tIGRvd25zdHJlYW0uCi0gKi8KLQotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0dG9jc2V0dGVyLmgiCi0jaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RhdGljIEdRdWFyayBnc3RfdG9jX2tleTsKLQotR19ERUZJTkVfSU5URVJGQUNFX1dJVEhfQ09ERSAoR3N0VG9jU2V0dGVyLCBnc3RfdG9jX3NldHRlciwgR1NUX1RZUEVfRUxFTUVOVCwKLSAgICBnc3RfdG9jX2tleSA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZ3N0LXRvYy1zZXR0ZXItZGF0YSIpOyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdG9jX3NldHRlcl9kZWZhdWx0X2luaXQgKEdzdFRvY1NldHRlckludGVyZmFjZSAqIGtsYXNzKQotewotICAvKiBub3RoaW5nIHRvIGRvIGhlcmUsIGl0J3MgYSBkdW1teSBpbnRlcmZhY2UgKi8KLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0VG9jICp0b2M7Ci0gIEdNdXRleCBsb2NrOwotfSBHc3RUb2NEYXRhOwotCi1zdGF0aWMgdm9pZAotZ3N0X3RvY19kYXRhX2ZyZWUgKGdwb2ludGVyIHApCi17Ci0gIEdzdFRvY0RhdGEgKmRhdGEgPSAoR3N0VG9jRGF0YSAqKSBwOwotCi0gIGlmIChkYXRhLT50b2MpCi0gICAgZ3N0X3RvY191bnJlZiAoZGF0YS0+dG9jKTsKLQotICBnX211dGV4X2NsZWFyICgmZGF0YS0+bG9jayk7Ci0KLSAgZ19zbGljZV9mcmVlIChHc3RUb2NEYXRhLCBkYXRhKTsKLX0KLQotc3RhdGljIEdzdFRvY0RhdGEgKgotZ3N0X3RvY19zZXR0ZXJfZ2V0X2RhdGEgKEdzdFRvY1NldHRlciAqIHNldHRlcikKLXsKLSAgR3N0VG9jRGF0YSAqZGF0YTsKLQotICBkYXRhID0gZ19vYmplY3RfZ2V0X3FkYXRhIChHX09CSkVDVCAoc2V0dGVyKSwgZ3N0X3RvY19rZXkpOwotICBpZiAoIWRhdGEpIHsKLSAgICBzdGF0aWMgR011dGV4IGNyZWF0ZV9tdXRleDsKLQotICAgIC8qIG1ha2Ugc3VyZSBubyBvdGhlciB0aHJlYWQgaXMgY3JlYXRpbmcgYSBHc3RUb2NEYXRhIGF0IHRoZSBzYW1lIHRpbWUgKi8KLSAgICBnX211dGV4X2xvY2sgKCZjcmVhdGVfbXV0ZXgpOwotICAgIGRhdGEgPSBnX29iamVjdF9nZXRfcWRhdGEgKEdfT0JKRUNUIChzZXR0ZXIpLCBnc3RfdG9jX2tleSk7Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICBkYXRhID0gZ19zbGljZV9uZXcgKEdzdFRvY0RhdGEpOwotICAgICAgZ19tdXRleF9pbml0ICgmZGF0YS0+bG9jayk7Ci0gICAgICBkYXRhLT50b2MgPSBOVUxMOwotICAgICAgZ19vYmplY3Rfc2V0X3FkYXRhX2Z1bGwgKEdfT0JKRUNUIChzZXR0ZXIpLCBnc3RfdG9jX2tleSwgZGF0YSwKLSAgICAgICAgICBnc3RfdG9jX2RhdGFfZnJlZSk7Ci0gICAgfQotICAgIGdfbXV0ZXhfdW5sb2NrICgmY3JlYXRlX211dGV4KTsKLSAgfQotCi0gIHJldHVybiBkYXRhOwotfQotCi0vKioKLSAqIGdzdF90b2Nfc2V0dGVyX3Jlc2V0OgotICogQHNldHRlcjogYSAjR3N0VG9jU2V0dGVyLgotICoKLSAqIFJlc2V0IHRoZSBpbnRlcm5hbCBUT0MuIEVsZW1lbnRzIHNob3VsZCBjYWxsIHRoaXMgZnJvbSB3aXRoaW4gdGhlCi0gKiBzdGF0ZS1jaGFuZ2UgaGFuZGxlci4KLSAqLwotdm9pZAotZ3N0X3RvY19zZXR0ZXJfcmVzZXQgKEdzdFRvY1NldHRlciAqIHNldHRlcikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RPQ19TRVRURVIgKHNldHRlcikpOwotCi0gIGdzdF90b2Nfc2V0dGVyX3NldF90b2MgKHNldHRlciwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvYzoKLSAqIEBzZXR0ZXI6IGEgI0dzdFRvY1NldHRlci4KLSAqCi0gKiBSZXR1cm4gY3VycmVudCBUT0MgdGhlIHNldHRlciB1c2VzLiBUaGUgVE9DIHNob3VsZCBub3QgYmUKLSAqIG1vZGlmaWVkIHdpdGhvdXQgbWFraW5nIGl0IHdyaXRhYmxlIGZpcnN0LgotICoKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogVE9DIHNldCwgb3IgJU5VTEwuIFVucmVmIHdpdGgKLSAqICAgICBnc3RfdG9jX3VucmVmKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkCi0gKi8KLUdzdFRvYyAqCi1nc3RfdG9jX3NldHRlcl9nZXRfdG9jIChHc3RUb2NTZXR0ZXIgKiBzZXR0ZXIpCi17Ci0gIEdzdFRvY0RhdGEgKmRhdGE7Ci0gIEdzdFRvYyAqcmV0ID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RPQ19TRVRURVIgKHNldHRlciksIE5VTEwpOwotCi0gIGRhdGEgPSBnc3RfdG9jX3NldHRlcl9nZXRfZGF0YSAoc2V0dGVyKTsKLSAgZ19tdXRleF9sb2NrICgmZGF0YS0+bG9jayk7Ci0KLSAgaWYgKGRhdGEtPnRvYyAhPSBOVUxMKQotICAgIHJldCA9IGdzdF90b2NfcmVmIChkYXRhLT50b2MpOwotCi0gIGdfbXV0ZXhfdW5sb2NrICgmZGF0YS0+bG9jayk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfdG9jX3NldHRlcl9zZXRfdG9jOgotICogQHNldHRlcjogYSAjR3N0VG9jU2V0dGVyLgotICogQHRvYzogKGFsbG93LW5vbmUpOiBhICNHc3RUb2MgdG8gc2V0LgotICoKLSAqIFNldCB0aGUgZ2l2ZW4gVE9DIG9uIHRoZSBzZXR0ZXIuIFByZXZpb3VzbHkgc2V0IFRPQyB3aWxsIGJlCi0gKiB1bnJlZmZlZCBiZWZvcmUgc2V0dGluZyBhIG5ldyBvbmUuCi0gKi8KLXZvaWQKLWdzdF90b2Nfc2V0dGVyX3NldF90b2MgKEdzdFRvY1NldHRlciAqIHNldHRlciwgR3N0VG9jICogdG9jKQotewotICBHc3RUb2NEYXRhICpkYXRhOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UT0NfU0VUVEVSIChzZXR0ZXIpKTsKLQotICBkYXRhID0gZ3N0X3RvY19zZXR0ZXJfZ2V0X2RhdGEgKHNldHRlcik7Ci0KLSAgZ19tdXRleF9sb2NrICgmZGF0YS0+bG9jayk7Ci0KLSAgaWYgKGRhdGEtPnRvYyAhPSB0b2MpIHsKLSAgICBpZiAoZGF0YS0+dG9jKQotICAgICAgZ3N0X3RvY191bnJlZiAoZGF0YS0+dG9jKTsKLQotICAgIGRhdGEtPnRvYyA9ICh0b2MpID8gZ3N0X3RvY19yZWYgKHRvYykgOiBOVUxMOwotICB9Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZkYXRhLT5sb2NrKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3R0b2NzZXR0ZXIuaCBiL2dzdC9nc3R0b2NzZXR0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg1NTI1Yy4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dG9jc2V0dGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBBbGV4YW5kZXIgU2FwcnlraW4gPHhlbGZpdW1AZ21haWwuY29tPgotICoKLSAqIGdzdHRvY3NldHRlci5oOiBJbnRlcmZhY2VzIGZvciBUT0MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1RPQ19TRVRURVJfSF9fCi0jZGVmaW5lIF9fR1NUX1RPQ19TRVRURVJfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9UT0NfU0VUVEVSICAgICAgICAgICAgICAoZ3N0X3RvY19zZXR0ZXJfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9UT0NfU0VUVEVSKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1RPQ19TRVRURVIsIEdzdFRvY1NldHRlcikpCi0jZGVmaW5lIEdTVF9JU19UT0NfU0VUVEVSKG9iaikgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1RPQ19TRVRURVIpKQotI2RlZmluZSBHU1RfVE9DX1NFVFRFUl9HRVRfSUZBQ0Uob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9JTlRFUkZBQ0UgKChvYmopLCBHU1RfVFlQRV9UT0NfU0VUVEVSLCBHc3RUb2NTZXR0ZXJJbnRlcmZhY2UpKQotLyoqCi0gKiBHc3RUb2NTZXR0ZXI6Ci0gKgotICogT3BhcXVlICNHc3RUb2NTZXR0ZXIgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RUb2NTZXR0ZXIgR3N0VG9jU2V0dGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRvY1NldHRlckludGVyZmFjZSBHc3RUb2NTZXR0ZXJJbnRlcmZhY2U7Ci0KLS8qKgotICogR3N0VG9jU2V0dGVySW50ZXJmYWNlOgotICogQGdfaWZhY2U6IHBhcmVudCBpbnRlcmZhY2UgdHlwZS4KLSAqCi0gKiAjR3N0VG9jU2V0dGVySW50ZXJmYWNlIGludGVyZmFjZS4KLSAqLwotCi1zdHJ1Y3QgX0dzdFRvY1NldHRlckludGVyZmFjZQotewotICBHVHlwZUludGVyZmFjZSBnX2lmYWNlOwotCi0gIC8qIHNpZ25hbHMgKi8KLQotICAvKiB2aXJ0dWFsIHRhYmxlICovCi19OwotCi1HVHlwZSAgICAgICAgIGdzdF90b2Nfc2V0dGVyX2dldF90eXBlICh2b2lkKTsKLQotdm9pZCAgICAgICAgICBnc3RfdG9jX3NldHRlcl9yZXNldCAgIChHc3RUb2NTZXR0ZXIgKnNldHRlcik7Ci0KLUdzdFRvYyAqICAgICAgZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvYyAoR3N0VG9jU2V0dGVyICpzZXR0ZXIpOwotCi12b2lkICAgICAgICAgIGdzdF90b2Nfc2V0dGVyX3NldF90b2MgKEdzdFRvY1NldHRlciAqc2V0dGVyLCBHc3RUb2MgKnRvYyk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9UT0NfU0VUVEVSX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvZ3N0dHJhY2VyLmMgYi9nc3QvZ3N0dHJhY2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZDZjODEuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHRyYWNlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0dHJhY2VyLmM6IHRyYWNlciBiYXNlIGNsYXNzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHRyYWNlcgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBUcmFjaW5nIGJhc2UgY2xhc3MKLSAqCi0gKiBUcmFjaW5nIG1vZHVsZXMgd2lsbCBzdWJjbGFzcyAjR3N0VHJhY2VyIGFuZCByZWdpc3RlciB0aHJvdWdoCi0gKiBnc3RfdHJhY2luZ19yZWdpc3RlcigpLiBNb2R1bGVzIGNhbiBhdHRhY2ggdG8gdmFyaW91cyBob29rLXR5cGVzIC0gc2VlCi0gKiBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rKCkuIFdoZW4gaW52b2tlZCB0aGV5IHJlY2VpdmUgaG9vayBzcGVjaWZpYwotICogY29udGV4dHVhbCBkYXRhLCB3aGljaCB0aGV5IG11c3Qgbm90IG1vZGlmeS4KLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLQotI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3RlbnVtdHlwZXMuaCIKLSNpbmNsdWRlICJnc3R0cmFjZXIuaCIKLSNpbmNsdWRlICJnc3R0cmFjZXJmYWN0b3J5LmgiCi0jaW5jbHVkZSAiZ3N0dHJhY2VydXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAodHJhY2VyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHRyYWNlcl9kZWJ1ZwotCi0vKiB0cmFjaW5nIHBsdWdpbnMgYmFzZSBjbGFzcyAqLwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9QQVJBTVMsCi0gIFBST1BfTEFTVAotfTsKLQotc3RhdGljIEdQYXJhbVNwZWMgKnByb3BlcnRpZXNbUFJPUF9MQVNUXTsKLQotc3RhdGljIHZvaWQgZ3N0X3RyYWNlcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdHJhY2VyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RydWN0IF9Hc3RUcmFjZXJQcml2YXRlCi17Ci0gIGdjaGFyICpwYXJhbXM7Ci19OwotCi0jZGVmaW5lIGdzdF90cmFjZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfQUJTVFJBQ1RfVFlQRSAoR3N0VHJhY2VyLCBnc3RfdHJhY2VyLCBHU1RfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3RyYWNlcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RUcmFjZXIgKnRyYWNlciA9IEdTVF9UUkFDRVIgKG9iamVjdCk7Ci0gIGdfZnJlZSAodHJhY2VyLT5wcml2LT5wYXJhbXMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RyYWNlcl9jbGFzc19pbml0IChHc3RUcmFjZXJDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF90cmFjZXJfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdHJhY2VyX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF90cmFjZXJfZGlzcG9zZTsKLQotICBwcm9wZXJ0aWVzW1BST1BfUEFSQU1TXSA9Ci0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgicGFyYW1zIiwgIlBhcmFtcyIsICJFeHRyYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMiLAotICAgICAgTlVMTCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydGllcyAoZ29iamVjdF9jbGFzcywgUFJPUF9MQVNULCBwcm9wZXJ0aWVzKTsKLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RUcmFjZXJQcml2YXRlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHJhY2VyX2luaXQgKEdzdFRyYWNlciAqIHRyYWNlcikKLXsKLSAgdHJhY2VyLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICh0cmFjZXIsIEdTVF9UWVBFX1RSQUNFUiwKLSAgICAgIEdzdFRyYWNlclByaXZhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RyYWNlcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VHJhY2VyICpzZWxmID0gR1NUX1RSQUNFUl9DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QQVJBTVM6Ci0gICAgICBzZWxmLT5wcml2LT5wYXJhbXMgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90cmFjZXJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFRyYWNlciAqc2VsZiA9IEdTVF9UUkFDRVJfQ0FTVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUEFSQU1TOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2VsZi0+cHJpdi0+cGFyYW1zKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyogdHJhY2luZyBtb2R1bGVzICovCi0KLS8qKgotICogZ3N0X3RyYWNlcl9yZWdpc3RlcjoKLSAqIEBwbHVnaW46IChhbGxvdy1ub25lKTogQSAjR3N0UGx1Z2luLCBvciAlTlVMTCBmb3IgYSBzdGF0aWMgdHlwZWZpbmQgZnVuY3Rpb24KLSAqIEBuYW1lOiBUaGUgbmFtZSBmb3IgcmVnaXN0ZXJpbmcKLSAqIEB0eXBlOiBHVHlwZSBvZiB0cmFjZXIgdG8gcmVnaXN0ZXIKLSAqCi0gKiBDcmVhdGUgYSBuZXcgdHJhY2VyLWZhY3RvcnkgIGNhcGFibGUgb2YgaW5zdGFudGlhdGluZyBvYmplY3RzIG9mIHRoZQotICogQHR5cGUgYW5kIGFkZCB0aGUgZmFjdG9yeSB0byBAcGx1Z2luLgotICoKLSAqIFJldHVybnM6ICVUUlVFLCBpZiB0aGUgcmVnaXN0ZXJpbmcgc3VjY2VlZGVkLCAlRkFMU0Ugb24gZXJyb3IKLSAqLwotZ2Jvb2xlYW4KLWdzdF90cmFjZXJfcmVnaXN0ZXIgKEdzdFBsdWdpbiAqIHBsdWdpbiwgY29uc3QgZ2NoYXIgKiBuYW1lLCBHVHlwZSB0eXBlKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpleGlzdGluZ19mZWF0dXJlOwotICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7Ci0gIEdzdFRyYWNlckZhY3RvcnkgKmZhY3Rvcnk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ190eXBlX2lzX2EgKHR5cGUsIEdTVF9UWVBFX1RSQUNFUiksIEZBTFNFKTsKLQotICByZWdpc3RyeSA9IGdzdF9yZWdpc3RyeV9nZXQgKCk7Ci0gIC8qIGNoZWNrIGlmIGZlYXR1cmUgYWxyZWFkeSBleGlzdHMsIGlmIGl0IGV4aXN0cyB0aGVyZSBpcyBubyBuZWVkIHRvIHVwZGF0ZSBpdAotICAgKiB3aGVuIHRoZSByZWdpc3RyeSBpcyBnZXR0aW5nIHVwZGF0ZWQsIG91dGRhdGVkIHBsdWdpbnMgYW5kIGFsbCB0aGVpcgotICAgKiBmZWF0dXJlcyBhcmUgcmVtb3ZlZCBhbmQgcmVhZGRlZC4KLSAgICovCi0gIGV4aXN0aW5nX2ZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKHJlZ2lzdHJ5LCBuYW1lKTsKLSAgaWYgKGV4aXN0aW5nX2ZlYXR1cmUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChyZWdpc3RyeSwgInVwZGF0ZSBleGlzdGluZyBmZWF0dXJlICVwICglcykiLAotICAgICAgICBleGlzdGluZ19mZWF0dXJlLCBuYW1lKTsKLSAgICBmYWN0b3J5ID0gR1NUX1RSQUNFUl9GQUNUT1JZX0NBU1QgKGV4aXN0aW5nX2ZlYXR1cmUpOwotICAgIGZhY3RvcnktPnR5cGUgPSB0eXBlOwotICAgIGV4aXN0aW5nX2ZlYXR1cmUtPmxvYWRlZCA9IFRSVUU7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZXhpc3RpbmdfZmVhdHVyZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBmYWN0b3J5ID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfVFJBQ0VSX0ZBQ1RPUlksIDAsIE5VTEwpOwotICBHU1RfREVCVUdfT0JKRUNUIChmYWN0b3J5LCAibmV3IHRyYWNlciBmYWN0b3J5IGZvciAlcyIsIG5hbWUpOwotCi0gIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZSAoR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLCBuYW1lKTsKLSAgZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9yYW5rIChHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSksCi0gICAgICBHU1RfUkFOS19OT05FKTsKLQotICBmYWN0b3J5LT50eXBlID0gdHlwZTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZmFjdG9yeSwgInRyYWNlciBmYWN0b3J5IGZvciAldTolcyIsCi0gICAgICAoZ3VpbnQpIHR5cGUsIGdfdHlwZV9uYW1lICh0eXBlKSk7Ci0KLSAgaWYgKHBsdWdpbiAmJiBwbHVnaW4tPmRlc2MubmFtZSkgewotICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luX25hbWUgPSBwbHVnaW4tPmRlc2MubmFtZTsgLyogaW50ZXJuZWQgc3RyaW5nICovCi0gICAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5wbHVnaW4gPSBwbHVnaW47Ci0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlciAoKEdPYmplY3QgKikgcGx1Z2luLAotICAgICAgICAoZ3BvaW50ZXIgKikgJiBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5wbHVnaW5fbmFtZSA9ICJOVUxMIjsKLSAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbiA9IE5VTEw7Ci0gIH0KLSAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5sb2FkZWQgPSBUUlVFOwotCi0gIGdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZSAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0dHJhY2VyLmggYi9nc3QvZ3N0dHJhY2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNzlhNzIuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHRyYWNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3R0cmFjZXIuaDogdHJhY2VyIGJhc2UgY2xhc3MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1RSQUNFUl9IX18KLSNkZWZpbmUgX19HU1RfVFJBQ0VSX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUcmFjZXIgR3N0VHJhY2VyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRyYWNlclByaXZhdGUgR3N0VHJhY2VyUHJpdmF0ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUcmFjZXJDbGFzcyBHc3RUcmFjZXJDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9UUkFDRVIgICAgICAgICAgICAoZ3N0X3RyYWNlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVFJBQ0VSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVFJBQ0VSLEdzdFRyYWNlcikpCi0jZGVmaW5lIEdTVF9UUkFDRVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1RSQUNFUixHc3RUcmFjZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19UUkFDRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9UUkFDRVIpKQotI2RlZmluZSBHU1RfSVNfVFJBQ0VSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9UUkFDRVIpKQotI2RlZmluZSBHU1RfVFJBQ0VSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSxHU1RfVFlQRV9UUkFDRVIsR3N0VHJhY2VyQ2xhc3MpKQotI2RlZmluZSBHU1RfVFJBQ0VSX0NBU1Qob2JqKSAgICAgICAoKEdzdFRyYWNlciAqKShvYmopKQotCi1zdHJ1Y3QgX0dzdFRyYWNlciB7Ci0gIEdzdE9iamVjdCAgICAgICAgcGFyZW50OwotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0VHJhY2VyUHJpdmF0ZSAqcHJpdjsKLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdFRyYWNlckNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlIGdzdF90cmFjZXJfZ2V0X3R5cGUgICAgICAgICAgKHZvaWQpOwotCi0jaWZkZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKLQotdm9pZCBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rIChHc3RUcmFjZXIgKnRyYWNlciwgY29uc3QgZ2NoYXIgKmRldGFpbCwKLSAgR0NhbGxiYWNrIGZ1bmMpOwotCi0vKiB0cmFjaW5nIG1vZHVsZXMgKi8KLWdib29sZWFuIGdzdF90cmFjZXJfcmVnaXN0ZXIgKEdzdFBsdWdpbiAqIHBsdWdpbiwgY29uc3QgZ2NoYXIgKiBuYW1lLCBHVHlwZSB0eXBlKTsKLQotI2VuZGlmCi0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0VHJhY2VyLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9UUkFDRVJfSF9fICovCi0KZGlmZiAtLWdpdCBhL2dzdC9nc3R0cmFjZXJmYWN0b3J5LmMgYi9nc3QvZ3N0dHJhY2VyZmFjdG9yeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWZkMDY2Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0cmFjZXJmYWN0b3J5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdHRyYWNlcmZhY3RvcnkuYzogdHJhY2luZyBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0dHJhY2VyZmFjdG9yeQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBJbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlcmVkIHRyYWNlciBmdW5jdGlvbnMKLSAqCi0gKiBVc2UgZ3N0X3RyYWNlcl9mYWN0b3J5X2dldF9saXN0KCkgdG8gZ2V0IGEgbGlzdCBvZiB0cmFjZXIgZmFjdG9yaWVzIGtub3duIHRvCi0gKiBHU3RyZWFtZXIuCi0gKi8KLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHRyYWNlcmZhY3RvcnkuaCIKLSNpbmNsdWRlICJnc3RyZWdpc3RyeS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUlkgKHRyYWNlcl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB0cmFjZXJfZGVidWcKLQotI2RlZmluZSBfZG9faW5pdCBcCi17IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHRyYWNlcl9kZWJ1ZywgIkdTVF9UUkFDRVIiLCBcCi0gICAgICBHU1RfREVCVUdfRkdfQkxVRSwgInRyYWNpbmcgc3Vic3lzdGVtIik7IFwKLX0KLQotI2RlZmluZSBnc3RfdHJhY2VyX2ZhY3RvcnlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFRyYWNlckZhY3RvcnksIGdzdF90cmFjZXJfZmFjdG9yeSwKLSAgICBHU1RfVFlQRV9QTFVHSU5fRkVBVFVSRSwgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3RyYWNlcl9mYWN0b3J5X2NsYXNzX2luaXQgKEdzdFRyYWNlckZhY3RvcnlDbGFzcyAqIGtsYXNzKQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RyYWNlcl9mYWN0b3J5X2luaXQgKEdzdFRyYWNlckZhY3RvcnkgKiBmYWN0b3J5KQotewotfQotCi0vKioKLSAqIGdzdF90cmFjZXJfZmFjdG9yeV9nZXRfbGlzdDoKLSAqCi0gKiBHZXRzIHRoZSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIHRyYWNlciBmYWN0b3JpZXMuIFlvdSBtdXN0IGZyZWUgdGhlCi0gKiBsaXN0IHVzaW5nIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoKS4KLSAqCi0gKiBUaGUgcmV0dXJuZWQgZmFjdG9yaWVzIGFyZSBzb3J0ZWQgYnkgZmFjdG9yeSBuYW1lLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBHc3QuVHJhY2VyRmFjdG9yeSk6IHRoZSBsaXN0IG9mIGFsbAotICogICAgIHJlZ2lzdGVyZWQgI0dzdFRyYWNlckZhY3RvcnkuCi0gKgotICogU2luY2U6IDEuOAotICovCi1HTGlzdCAqCi1nc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X2xpc3QgKHZvaWQpCi17Ci0gIHJldHVybiBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdCAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgIEdTVF9UWVBFX1RSQUNFUl9GQUNUT1JZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3R0cmFjZXJmYWN0b3J5LmggYi9nc3QvZ3N0dHJhY2VyZmFjdG9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTA5NjM1Li4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0cmFjZXJmYWN0b3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdHRyYWNlcmZhY3RvcnkuaDogdHJhY2luZyBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1RSQUNFUl9GQUNUT1JZX0hfXwotI2RlZmluZSBfX0dTVF9UUkFDRVJfRkFDVE9SWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbi5oPgotI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9UUkFDRVJfRkFDVE9SWSAgICAgICAgICAgICAgICAgKGdzdF90cmFjZXJfZmFjdG9yeV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVFJBQ0VSX0ZBQ1RPUlkob2JqKSAgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVFJBQ0VSX0ZBQ1RPUlksIEdzdFRyYWNlckZhY3RvcnkpKQotI2RlZmluZSBHU1RfSVNfVFJBQ0VSX0ZBQ1RPUlkob2JqKSAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfVFJBQ0VSX0ZBQ1RPUlkpKQotI2RlZmluZSBHU1RfVFJBQ0VSX0ZBQ1RPUllfQ0xBU1Moa2xhc3MpICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9UUkFDRVJfRkFDVE9SWSwgR3N0VHJhY2VyRmFjdG9yeUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1RSQUNFUl9GQUNUT1JZX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfVFJBQ0VSX0ZBQ1RPUlkpKQotI2RlZmluZSBHU1RfVFJBQ0VSX0ZBQ1RPUllfR0VUX0NMQVNTKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9UUkFDRVJfRkFDVE9SWSwgR3N0VHJhY2VyRmFjdG9yeUNsYXNzKSkKLSNkZWZpbmUgR1NUX1RSQUNFUl9GQUNUT1JZX0NBU1Qob2JqKSAgICAgICAgICAgICgoR3N0VHJhY2VyRmFjdG9yeSAqKShvYmopKQotCi0vKioKLSAqIEdzdFRyYWNlckZhY3Rvcnk6Ci0gKgotICogT3BhcXVlIG9iamVjdCB0aGF0IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHRyYWNlciBmdW5jdGlvbi4KLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RUcmFjZXJGYWN0b3J5IEdzdFRyYWNlckZhY3Rvcnk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VHJhY2VyRmFjdG9yeUNsYXNzIEdzdFRyYWNlckZhY3RvcnlDbGFzczsKLQotLyogdHJhY2VyaW5nIGludGVyZmFjZSAqLwotCi1HVHlwZSAgICAgICAgICAgZ3N0X3RyYWNlcl9mYWN0b3J5X2dldF90eXBlICAgICAgICAgICh2b2lkKTsKLUdMaXN0ICogICAgICAgICBnc3RfdHJhY2VyX2ZhY3RvcnlfZ2V0X2xpc3QgICAgICAgICAgKHZvaWQpOwotCi0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0VHJhY2VyRmFjdG9yeSwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVFJBQ0VSX0ZBQ1RPUllfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0dHJhY2VycmVjb3JkLmMgYi9nc3QvZ3N0dHJhY2VycmVjb3JkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmYxNjkuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHRyYWNlcnJlY29yZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE2IFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0dHJhY2VycmVjb3JkLmM6IHRyYWNlciBsb2cgcmVjb3JkIGNsYXNzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHRyYWNlcnJlY29yZAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBUcmFjZSBsb2cgZW50cnkgY2xhc3MKLSAqCi0gKiBUcmFjaW5nIG1vZHVsZXMgd2lsbCBjcmVhdGUgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgdG8gYW5ub3VuY2UgdGhlIGRhdGEgdGhleQotICogd2lsbCBsb2cgYW5kIGNyZWF0ZSBhIGxvZyBmb3JtYXR0ZXIuCi0gKgotICogU2luY2U6IDEuOAotICovCi0KLSNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0ZW51bXR5cGVzLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHN0cnVjdHVyZS5oIgotI2luY2x1ZGUgImdzdHRyYWNlcnJlY29yZC5oIgotI2luY2x1ZGUgImdzdHZhbHVlLmgiCi0jaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAodHJhY2VyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHRyYWNlcl9kZWJ1ZwotCi1zdHJ1Y3QgX0dzdFRyYWNlclJlY29yZAotewotICBHc3RPYmplY3QgcGFyZW50OwotCi0gIEdzdFN0cnVjdHVyZSAqc3BlYzsKLSAgZ2NoYXIgKmZvcm1hdDsKLX07Ci0KLXN0cnVjdCBfR3N0VHJhY2VyUmVjb3JkQ2xhc3MKLXsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotI2RlZmluZSBnc3RfdHJhY2VyX3JlY29yZF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RUcmFjZXJSZWNvcmQsIGdzdF90cmFjZXJfcmVjb3JkLCBHU1RfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1aWxkX2ZpZWxkX3RlbXBsYXRlIChHUXVhcmsgZmllbGRfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdTdHJpbmcgKnMgPSAoR1N0cmluZyAqKSB1c2VyX2RhdGE7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3ViOwotICBHVmFsdWUgdGVtcGxhdGVfdmFsdWUgPSB7IDAsIH07Ci0gIEdUeXBlIHR5cGUgPSBHX1RZUEVfSU5WQUxJRDsKLSAgR3N0VHJhY2VyVmFsdWVGbGFncyBmbGFncyA9IEdTVF9UUkFDRVJfVkFMVUVfRkxBR1NfTk9ORTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSAhPSBHU1RfVFlQRV9TVFJVQ1RVUkUpIHsKLSAgICBHU1RfV0FSTklORyAoImV4cGVjdGVkIGZpZWxkIG9mIHR5cGUgR3N0U3RydWN0dXJlLCBidXQgJXMgaXMgJXMiLAotICAgICAgICBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBzdWIgPSBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSAodmFsdWUpOwotICBnc3Rfc3RydWN0dXJlX2dldCAoc3ViLCAidHlwZSIsIEdfVFlQRV9HVFlQRSwgJnR5cGUsICJmbGFncyIsCi0gICAgICBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfRkxBR1MsICZmbGFncywgTlVMTCk7Ci0KLSAgaWYgKGZsYWdzICYgR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19PUFRJT05BTCkgewotICAgIGdjaGFyICpvcHRfbmFtZSA9IGdfc3RyY29uY2F0ICgiaGF2ZS0iLCBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpLCBOVUxMKTsKLQotICAgIC8qIGFkZCBhIGJvb2xlYW4gZmllbGQsIHRoYXQgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgbmV4dCBmaWVsZCAqLwotICAgIGdfdmFsdWVfaW5pdCAoJnRlbXBsYXRlX3ZhbHVlLCBHX1RZUEVfQk9PTEVBTik7Ci0gICAgcHJpdl9fZ3N0X3N0cnVjdHVyZV9hcHBlbmRfdGVtcGxhdGVfdG9fZ3N0cmluZyAoZ19xdWFya19mcm9tX3N0cmluZwotICAgICAgICAob3B0X25hbWUpLCAmdGVtcGxhdGVfdmFsdWUsIHMpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZ0ZW1wbGF0ZV92YWx1ZSk7Ci0gICAgZ19mcmVlIChvcHRfbmFtZSk7Ci0gIH0KLQotICBnX3ZhbHVlX2luaXQgKCZ0ZW1wbGF0ZV92YWx1ZSwgdHlwZSk7Ci0gIHJlcyA9IHByaXZfX2dzdF9zdHJ1Y3R1cmVfYXBwZW5kX3RlbXBsYXRlX3RvX2dzdHJpbmcgKGZpZWxkX2lkLAotICAgICAgJnRlbXBsYXRlX3ZhbHVlLCBzKTsKLSAgZ192YWx1ZV91bnNldCAoJnRlbXBsYXRlX3ZhbHVlKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90cmFjZXJfcmVjb3JkX2J1aWxkX2Zvcm1hdCAoR3N0VHJhY2VyUmVjb3JkICogc2VsZikKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzZWxmLT5zcGVjOwotICBHU3RyaW5nICpzOwotICBnY2hhciAqbmFtZSA9IChnY2hhciAqKSBnX3F1YXJrX3RvX3N0cmluZyAoc3RydWN0dXJlLT5uYW1lKTsKLSAgZ2NoYXIgKnA7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZ19zdHJfaGFzX3N1ZmZpeCAobmFtZSwgIi5jbGFzcyIpKTsKLQotICAvKiBhbm5vdW5jZSB0aGUgZm9ybWF0ICovCi0gIEdTVF9UUkFDRSAoIiUiIEdTVF9QVFJfRk9STUFULCBzdHJ1Y3R1cmUpOwotCi0gIC8qIGN1dCBvZmYgJy5jbGFzcycgc3VmZml4ICovCi0gIG5hbWUgPSBnX3N0cmR1cCAobmFtZSk7Ci0gIHAgPSBzdHJyY2hyIChuYW1lLCAnLicpOwotICBnX2Fzc2VydCAocCAhPSBOVUxMKTsKLSAgKnAgPSAnXDAnOwotCi0gIHMgPSBnX3N0cmluZ19zaXplZF9uZXcgKFNUUlVDVFVSRV9FU1RJTUFURURfU1RSSU5HX0xFTiAoc3RydWN0dXJlKSk7Ci0gIGdfc3RyaW5nX2FwcGVuZCAocywgbmFtZSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoc3RydWN0dXJlLCBidWlsZF9maWVsZF90ZW1wbGF0ZSwgcyk7Ci0gIGdfc3RyaW5nX2FwcGVuZF9jIChzLCAnOycpOwotCi0gIHNlbGYtPmZvcm1hdCA9IGdfc3RyaW5nX2ZyZWUgKHMsIEZBTFNFKTsKLSAgR1NUX0RFQlVHICgibmV3IGZvcm1hdCBzdHJpbmc6ICVzIiwgc2VsZi0+Zm9ybWF0KTsKLSAgZ19mcmVlIChuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90cmFjZXJfcmVjb3JkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFRyYWNlclJlY29yZCAqc2VsZiA9IEdTVF9UUkFDRVJfUkVDT1JEIChvYmplY3QpOwotCi0gIGlmIChzZWxmLT5zcGVjKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzZWxmLT5zcGVjKTsKLSAgICBzZWxmLT5zcGVjID0gTlVMTDsKLSAgfQotICBnX2ZyZWUgKHNlbGYtPmZvcm1hdCk7Ci0gIHNlbGYtPmZvcm1hdCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHJhY2VyX3JlY29yZF9jbGFzc19pbml0IChHc3RUcmFjZXJSZWNvcmRDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfdHJhY2VyX3JlY29yZF9kaXNwb3NlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RyYWNlcl9yZWNvcmRfaW5pdCAoR3N0VHJhY2VyUmVjb3JkICogc2VsZikKLXsKLX0KLQotLyoqCi0gKiBnc3RfdHJhY2VyX3JlY29yZF9uZXc6Ci0gKiBAbmFtZTogbmFtZSBvZiBuZXcgcmVjb3JkLCBtdXN0IGVuZCBvbiAiLmNsYXNzIi4KLSAqIEBmaXJzdGZpZWxkOiBuYW1lIG9mIGZpcnN0IGZpZWxkIHRvIHNldAotICogQC4uLjogYWRkaXRpb25hbCBhcmd1bWVudHMKLQotICoKLSAqIENyZWF0ZSBhIG5ldyB0cmFjZXIgcmVjb3JkLiBUaGUgcmVjb3JkIGluc3RhbmNlIGNhbiBiZSB1c2VkIHRvIGVmZmljaWVudGx5Ci0gKiBsb2cgZW50cmllcyB1c2luZyBnc3RfdHJhY2VyX3JlY29yZF9sb2coKS4KLSAqCi0gKiBUaGUgQG5hbWUgd2l0aG91dCB0aGUgIi5jbGFzcyIgc3VmZml4IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGxvZyByZWNvcmRzLgotICogVGhlcmUgbXVzdCBiZSBmaWVsZHMgZm9yIGVhY2ggdmFsdWUgdGhhdCBnZXRzIGxvZ2dlZCB3aGVyZSB0aGUgZmllbGQgbmFtZSBpcwotICogdGhlIHZhbHVlIG5hbWUuIFRoZSBmaWVsZCBtdXN0IGJlIGEgI0dzdFN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSB2YWx1ZS4gVGhlCi0gKiBzdWIgc3RydWN0dXJlIG11c3QgY29udGFpbiBhIGZpZWxkIGNhbGxlZCAndHlwZScgb2YgJUdfVFlQRV9HVFlQRSB0aGF0Ci0gKiBjb250YWlucyB0aGUgR1R5cGUgb2YgdGhlIHZhbHVlLiBUaGUgcmVzdWx0aW5nICNHc3RUcmFjZXJSZWNvcmQgd2lsbCB0YWtlCi0gKiBvd25lcnNoaXAgb2YgdGhlIGZpZWxkIHN0cnVjdHVyZXMuCi0gKgotICogVGhlIHdheSB0byBkZWFsIHdpdGggb3B0aW9uYWwgdmFsdWVzIGlzIHRvIGxvZyBhbiBhZGRpdGlvbmFsIGJvb2xlYW4gYmVmb3JlCi0gKiB0aGUgb3B0aW9uYWwgZmllbGQsIHRoYXQgaWYgJVRSVUUgc2lnbmFscyB0aGF0IHRoZSBvcHRpb25hbCBmaWVsZCBpcyB2YWxpZAotICogYW5kICVGQUxTRSBzaWduYWxzIHRoYXQgdGhlIG9wdGlvbmFsIGZpZWxkIHNob3VsZCBiZSBpZ25vcmVkLiBPbmUgbXVzdCBzdGlsbAotICogbG9nIGEgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIHRoZSBvcHRpb25hbCBmaWVsZCB0aG91Z2guIFBsZWFzZSBhbHNvIG5vdGUsIHRoYXQKLSAqIHBvaW50ZXIgdHlwZSB2YWx1ZXMgbXVzdCBub3QgYmUgTlVMTCAtIHRoZSB1bmRlcmx5aW5nIHNlcmlhbGlzYXRpb24gY2FuIG5vdAotICogaGFuZGxlIHRoYXQgcmlnaHQgbm93LgotICoKLSAqIDxub3RlPjxwYXJhPgotICogICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgc3RpbGwgdW5kZXIgZGlzY3Vzc2lvbiBhbmQgc3ViamVjdCB0byBjaGFuZ2UuCi0gKiA8L3BhcmE+PC9ub3RlPgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNHc3RUcmFjZXJSZWNvcmQKLSAqLwotR3N0VHJhY2VyUmVjb3JkICoKLWdzdF90cmFjZXJfcmVjb3JkX25ldyAoY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBnY2hhciAqIGZpcnN0ZmllbGQsIC4uLikKLXsKLSAgR3N0VHJhY2VyUmVjb3JkICpzZWxmOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgdmFfbGlzdCB2YXJhcmdzOwotICBnY2hhciAqZXJyID0gTlVMTDsKLSAgR1R5cGUgdHlwZTsKLSAgR1F1YXJrIGlkOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmaXJzdGZpZWxkKTsKLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKG5hbWUpOwotCi0gIHdoaWxlIChmaXJzdGZpZWxkKSB7Ci0gICAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLQotICAgIGlkID0gZ19xdWFya19mcm9tX3N0cmluZyAoZmlyc3RmaWVsZCk7Ci0gICAgdHlwZSA9IHZhX2FyZyAodmFyYXJncywgR1R5cGUpOwotCi0gICAgLyogYWxsIGZpZWxkcyBwYXNzZWQgaGVyZSBtdXN0IGJlIEdzdFN0cnVjdHVyZXMgd2hpY2ggd2UgdGFrZSBvdmVyICovCi0gICAgaWYgKHR5cGUgIT0gR1NUX1RZUEVfU1RSVUNUVVJFKSB7Ci0gICAgICBHU1RfV0FSTklORyAoImV4cGVjdGVkIGZpZWxkIG9mIHR5cGUgR3N0U3RydWN0dXJlLCBidXQgJXMgaXMgJXMiLAotICAgICAgICAgIGZpcnN0ZmllbGQsIGdfdHlwZV9uYW1lICh0eXBlKSk7Ci0gICAgfQotCi0gICAgR19WQUxVRV9DT0xMRUNUX0lOSVQgKCZ2YWwsIHR5cGUsIHZhcmFyZ3MsIEdfVkFMVUVfTk9DT1BZX0NPTlRFTlRTLCAmZXJyKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoZXJyKSkgewotICAgICAgZ19jcml0aWNhbCAoIiVzIiwgZXJyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvKiBzZWUgYm94ZWRfcHJveHlfY29sbGVjdF92YWx1ZSAqLwotICAgIHZhbC5kYXRhWzFdLnZfdWludCAmPSB+R19WQUxVRV9OT0NPUFlfQ09OVEVOVFM7Ci0gICAgZ3N0X3N0cnVjdHVyZV9pZF90YWtlX3ZhbHVlIChzdHJ1Y3R1cmUsIGlkLCAmdmFsKTsKLQotICAgIGZpcnN0ZmllbGQgPSB2YV9hcmcgKHZhcmFyZ3MsIGdjaGFyICopOwotICB9Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci0KLSAgc2VsZiA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1RSQUNFUl9SRUNPUkQsIDAsIE5VTEwpOwotICBzZWxmLT5zcGVjID0gc3RydWN0dXJlOwotICBnc3RfdHJhY2VyX3JlY29yZF9idWlsZF9mb3JtYXQgKHNlbGYpOwotCi0gIHJldHVybiBzZWxmOwotfQotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotLyoqCi0gKiBnc3RfdHJhY2VyX3JlY29yZF9sb2c6Ci0gKiBAc2VsZjogdGhlIHRyYWNlci1yZWNvcmQKLSAqIEAuLi46IHRoZSBhcmdzIGFzIGRlc2NyaWJlZCBpbiB0aGUgc3BlYy0KLSAqCi0gKiBTZXJpYWx6ZXMgdGhlIHRyYWNlIGV2ZW50IGludG8gdGhlIGxvZy4KLSAqCi0gKiBSaWdodCBub3cgdGhpcyBpcyB1c2luZyB0aGUgZ3N0cmVhbWVyIGRlYnVnIGxvZyB3aXRoIHRoZSBsZXZlbCBUUkFDRSAoNykgYW5kCi0gKiB0aGUgY2F0ZWdvcnkgIkdTVF9UUkFDRVIiLgotICogPG5vdGU+PHBhcmE+Ci0gKiAgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpcyBzdGlsbCB1bmRlciBkaXNjdXNzaW9uIGFuZCBzdWJqZWN0IHRvIGNoYW5nZS4KLSAqIDwvcGFyYT48L25vdGU+Ci0gKi8KLXZvaWQKLWdzdF90cmFjZXJfcmVjb3JkX2xvZyAoR3N0VHJhY2VyUmVjb3JkICogc2VsZiwgLi4uKQotewotICB2YV9saXN0IHZhcl9hcmdzOwotCi0gIC8qCi0gICAqIGRvZXMgaXQgbWFrZSBzZW5zZSB0byB1c2UgdGhlIHtmaWxlLCBsaW5lLCBmdW5jfSBmcm9tIHRoZSB0cmFjZXIgaG9vaz8KLSAgICogYSkKLSAgICogLSB3ZSdkIG5lZWQgdG8gcGFzcyB0aGVtIGluIHRoZSBtYWNyb3MgdG8gZ3N0X3RyYWNlcl9kaXNwYXRjaCgpCi0gICAqIC0gYW5kIGVhY2ggdHJhY2VyIG5lZWRzIHRvIGdyYWIgdGhlbSBmcm9tIHRoZSB2YV9saXN0IGFuZCBwYXNzIHRoZW0gaGVyZQotICAgKiBiKQotICAgKiAtIHdlIGNyZWF0ZSBhIGNvbnRleHQgaW4gZGlzcGF0Y2gsIHBhc3MgdGhhdCB0byB0aGUgdHJhY2VyCi0gICAqIC0gYW5kIHRoZSB0cmFjZXIgd2lsbCBwYXNzIHRoYXQgaGVyZQotICAgKiBpZGVhbGx5IHdlIGFsc28gdXNlICpvdXIqIHRzIGluc3RlYWQgb2YgdGhlIG9uZSB0aGF0Ci0gICAqIGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCgpIHdpbGwgcGljawotICAgKi8KLQotICB2YV9zdGFydCAodmFyX2FyZ3MsIHNlbGYpOwotICBpZiAoR19MSUtFTFkgKEdTVF9MRVZFTF9UUkFDRSA8PSBfZ3N0X2RlYnVnX21pbikpIHsKLSAgICBnc3RfZGVidWdfbG9nX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfVFJBQ0UsICIiLCAiIiwgMCwgTlVMTCwKLSAgICAgICAgc2VsZi0+Zm9ybWF0LCB2YXJfYXJncyk7Ci0gIH0KLSAgdmFfZW5kICh2YXJfYXJncyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9nc3R0cmFjZXJyZWNvcmQuaCBiL2dzdC9nc3R0cmFjZXJyZWNvcmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2NTE1ZS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dHJhY2VycmVjb3JkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3R0cmFjZXJyZWNvcmQuaDogdHJhY2VyIGxvZyByZWNvcmQgY2xhc3MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1RSQUNFUl9SRUNPUkRfSF9fCi0jZGVmaW5lIF9fR1NUX1RSQUNFUl9SRUNPUkRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRyYWNlclJlY29yZCBHc3RUcmFjZXJSZWNvcmQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VHJhY2VyUmVjb3JkQ2xhc3MgR3N0VHJhY2VyUmVjb3JkQ2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfVFJBQ0VSX1JFQ09SRCAgICAgICAgICAgIChnc3RfdHJhY2VyX3JlY29yZF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVFJBQ0VSX1JFQ09SRChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1RSQUNFUl9SRUNPUkQsR3N0VHJhY2VyUmVjb3JkKSkKLSNkZWZpbmUgR1NUX1RSQUNFUl9SRUNPUkRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1RSQUNFUl9SRUNPUkQsR3N0VHJhY2VyUmVjb3JkQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVFJBQ0VSX1JFQ09SRChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1RSQUNFUl9SRUNPUkQpKQotI2RlZmluZSBHU1RfSVNfVFJBQ0VSX1JFQ09SRF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfVFJBQ0VSX1JFQ09SRCkpCi0jZGVmaW5lIEdTVF9UUkFDRVJfUkVDT1JEX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSxHU1RfVFlQRV9UUkFDRVJfUkVDT1JELEdzdFRyYWNlclJlY29yZENsYXNzKSkKLSNkZWZpbmUgR1NUX1RSQUNFUl9SRUNPUkRfQ0FTVChvYmopICAgICAgICgoR3N0VHJhY2VyUmVjb3JkICopKG9iaikpCi0KLUdUeXBlIGdzdF90cmFjZXJfcmVjb3JkX2dldF90eXBlICAgICAgICAgICh2b2lkKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RUcmFjZXJSZWNvcmQsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotLyoqCi0gKiBHc3RUcmFjZXJWYWx1ZVNjb3BlOgotICogQEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfUFJPQ0VTUzogdGhlIHZhbHVlIGlzIHJlbGF0ZWQgdG8gdGhlIHByb2Nlc3MKLSAqIEBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRDogdGhlIHZhbHVlIGlzIHJlbGF0ZWQgdG8gYSB0aHJlYWQKLSAqIEBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX0VMRU1FTlQ6IHRoZSB2YWx1ZSBpcyByZWxhdGVkIHRvIGFuICNHc3RFbGVtZW50Ci0gKiBAR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QQUQ6IHRoZSB2YWx1ZSBpcyByZWxhdGVkIHRvIGEgI0dzdFBhZAotICoKLSAqIFRyYWNpbmcgcmVjb3JkIHdpbGwgY29udGFpbiBmaWVsZHMgdGhhdCBjb250YWluIGEgbWVhc3N1cmVkIHZhbHVlIG9yIGV4dHJhCi0gKiBtZXRhLWRhdGEuIE9uZSBzdWNoIG1ldGEgZGF0YSBhcmUgdmFsdWVzIHRoYXQgdGVsbCB3aGVyZSBhIG1lYXN1cmVtZW50IHdhcwotICogdGFrZW4uIFRoaXMgZW51bWVyYXRpbmcgZGVjbGFyZXMgdG8gd2hpY2ggc2NvcGUgc3VjaCBhIG1ldGEgZGF0YSBmaWVsZAotICogcmVsYXRlcyB0by4gSWYgaXQgaXMgZS5nLiAlR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QQUQsIHRoZW4gZWFjaCBvZiB0aGUgbG9nCi0gKiBldmVudHMgbWF5IGNvbnRhaW4gdmFsdWVzIGZvciBkaWZmZXJlbnQgI0dzdFBhZHMuCi0gKgotICogU2luY2U6IDEuOAotICovCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QUk9DRVNTLAotICBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRCwKLSAgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9FTEVNRU5ULAotICBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRAotfSBHc3RUcmFjZXJWYWx1ZVNjb3BlOwotCi0vKioKLSAqIEdzdFRyYWNlclZhbHVlRmxhZ3M6Ci0gKiBAR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19OT05FOiBubyBmbGFncwotICogQEdTVF9UUkFDRVJfVkFMVUVfRkxBR1NfT1BUSU9OQUw6IHRoZSB2YWx1ZSBpcyBvcHRpb25hbC4gV2hlbiB1c2luZyB0aGlzIGZsYWcKLSAqICAgb25lIG5lZWQgdG8gaGF2ZSBhbiBhZGRpdGlvbmFsIGJvb2xlYW4gYXJnIGJlZm9yZSB0aGlzIHZhbHVlIGluIHRoZQotICogICB2YXItYXJncyBsaXN0IHBhc3NlZCB0byAgZ3N0X3RyYWNlcl9yZWNvcmRfbG9nKCkuCi0gKiBAR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19BR0dSRUdBVEVEOiB0aGUgdmFsdWUgaXMgY29tYmluZWQgc2luY2UgdGhlIHN0YXJ0IG9mCi0gKiAgIHRyYWNpbmcKLSAqCi0gKiBGbGFnIHRoYXQgZGVzY3JpYmUgdGhlIHZhbHVlLiBUaGVzZSBmbGFncyBoZWxwIGFwcGxpY2F0aW9ucyBwcm9jZXNzaW5nIHRoZQotICogbG9ncyB0byB1bmRlcnN0YW5kIHRoZSB2YWx1ZXMuCi0gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX05PTkUgPSAwLAotICBHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX09QVElPTkFMID0gKDEgPDwgMCksCi0gIEdTVF9UUkFDRVJfVkFMVUVfRkxBR1NfQUdHUkVHQVRFRCA9ICgxIDw8IDEpLAotfSBHc3RUcmFjZXJWYWx1ZUZsYWdzOwotCi0jaWZkZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKLQotR3N0VHJhY2VyUmVjb3JkICogZ3N0X3RyYWNlcl9yZWNvcmRfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IGdjaGFyICogZmlyc3RmaWVsZCwgLi4uKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLXZvaWQgICAgICAgICAgICAgIGdzdF90cmFjZXJfcmVjb3JkX2xvZyAoR3N0VHJhY2VyUmVjb3JkICpzZWxmLCAuLi4pOwotI2Vsc2UKLSNkZWZpbmUgZ3N0X3RyYWNlcl9yZWNvcmRfbG9nKC4uLikgR19TVE1UX1NUQVJUIHt9IEdfU1RNVF9FTkQKLSNlbmRpZgotCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RSQUNFUl9SRUNPUkRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZ3N0dHJhY2VydXRpbHMuYyBiL2dzdC9nc3R0cmFjZXJ1dGlscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDZkZWZmLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0cmFjZXJ1dGlscy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0dHJhY2VydXRpbHMuYzogdHJhY2luZyBzdWJzeXN0ZW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBUcmFjaW5nIHN1YnN5c3RlbToKLSAqCi0gKiBUaGUgdHJhY2luZyBzdWJzeXN0ZW0gcHJvdmlkZXMgaG9va3MgaW4gdGhlIGNvcmUgbGlicmFyeSBhbmQgQVBJIGZvciBtb2R1bGVzCi0gKiB0byBhdHRhY2ggdG8gdGhlbS4KLSAqCi0gKiBUaGUgdXNlciBjYW4gYWN0aXZhdGUgdHJhY2VycyBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfVFJBQ0UKLSAqIHRvIGEgJzsnIHNlcGFyYXRlZCBsaXN0IG9mIHRyYWNlcnMuCi0gKgotICogTm90ZSB0aGF0IGluc3RhbmNpYXRpbmcgdHJhY2VycyBhdCBydW50aW1lIGlzIHBvc3NpYmxlIGJ1dCBpcyBub3QgdGhyZWFkIHNhZmUKLSAqIGFuZCBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSBhbnkgcGlwZWxpbmUgc3RhdGUgaXMgc2V0IHRvIFBBVVNFRC4KLSAqLwotCi0jZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdzdHRyYWNlci5oIgotI2luY2x1ZGUgImdzdHRyYWNlcmZhY3RvcnkuaCIKLSNpbmNsdWRlICJnc3R0cmFjZXJ1dGlscy5oIgotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1MKLQotLyogdHJhY2VyIHF1YXJrcyAqLwotCi0vKiBUaGVzZSBzdHJpbmdzIG11c3QgbWF0Y2ggb3JkZXIgYW5kIG51bWJlciBkZWNsYXJlZCBpbiB0aGUgR3N0VHJhY2VyUXVhcmtJZAotICogZW51bSBpbiBnc3R0cmFjZXJ1dGlscy5oISAqLwotc3RhdGljIGNvbnN0IGdjaGFyICpfcXVhcmtfc3RyaW5nc1tdID0gewotICAicGFkLXB1c2gtcHJlIiwgInBhZC1wdXNoLXBvc3QiLCAicGFkLXB1c2gtbGlzdC1wcmUiLCAicGFkLXB1c2gtbGlzdC1wb3N0IiwKLSAgInBhZC1wdWxsLXJhbmdlLXByZSIsICJwYWQtcHVsbC1yYW5nZS1wb3N0IiwgInBhZC1wdXNoLWV2ZW50LXByZSIsCi0gICJwYWQtcHVzaC1ldmVudC1wb3N0IiwgInBhZC1xdWVyeS1wcmUiLCAicGFkLXF1ZXJ5LXBvc3QiLAotICAiZWxlbWVudC1wb3N0LW1lc3NhZ2UtcHJlIiwKLSAgImVsZW1lbnQtcG9zdC1tZXNzYWdlLXBvc3QiLCAiZWxlbWVudC1xdWVyeS1wcmUiLCAiZWxlbWVudC1xdWVyeS1wb3N0IiwKLSAgImVsZW1lbnQtbmV3IiwgImVsZW1lbnQtYWRkLXBhZCIsICJlbGVtZW50LXJlbW92ZS1wYWQiLAotICAiYmluLWFkZC1wcmUiLCAiYmluLWFkZC1wb3N0IiwgImJpbi1yZW1vdmUtcHJlIiwgImJpbi1yZW1vdmUtcG9zdCIsCi0gICJwYWQtbGluay1wcmUiLCAicGFkLWxpbmstcG9zdCIsICJwYWQtdW5saW5rLXByZSIsICJwYWQtdW5saW5rLXBvc3QiLAotICAiZWxlbWVudC1jaGFuZ2Utc3RhdGUtcHJlIiwgImVsZW1lbnQtY2hhbmdlLXN0YXRlLXBvc3QiLAotICAibWluaS1vYmplY3QtY3JlYXRlZCIsICJtaW5pLW9iamVjdC1kZXN0cm95ZWQiLCAib2JqZWN0LWNyZWF0ZWQiLAotICAib2JqZWN0LWRlc3Ryb3llZCIsCi19OwotCi1HUXVhcmsgX3ByaXZfZ3N0X3RyYWNlcl9xdWFya190YWJsZVtHU1RfVFJBQ0VSX1FVQVJLX01BWF07Ci0KLS8qIHRyYWNpbmcgaGVscGVycyAqLwotCi1nYm9vbGVhbiBfcHJpdl90cmFjZXJfZW5hYmxlZCA9IEZBTFNFOwotR0hhc2hUYWJsZSAqX3ByaXZfdHJhY2VycyA9IE5VTEw7Ci0KLS8qIEluaXRpYWxpemUgdGhlIHRyYWNpbmcgc3lzdGVtICovCi12b2lkCi1fcHJpdl9nc3RfdHJhY2luZ19pbml0ICh2b2lkKQotewotICBnaW50IGkgPSAwOwotICBjb25zdCBnY2hhciAqZW52ID0gZ19nZXRlbnYgKCJHU1RfVFJBQ0VSUyIpOwotCi0gIC8qIFdlIGluaXRpYWxpemUgdGhlIHRyYWNlciBzdWIgc3lzdGVtIGV2ZW4gaWYgdGhlIGVuZAotICAgKiB1c2VyIGRpZCBub3QgYWN0aXZhdGUgaXQgdGhyb3VnaCB0aGUgZW52IHZhcmlhYmxlCi0gICAqIHNvIHRoYXQgZXh0ZXJuYWwgdG9vbHMgY2FuIHVzZSBpdCBhbnl3YXkgKi8KLSAgR1NUX0RFQlVHICgiSW5pdGlhbGl6aW5nIEdzdFRyYWNlciIpOwotICBfcHJpdl90cmFjZXJzID0gZ19oYXNoX3RhYmxlX25ldyAoTlVMTCwgTlVMTCk7Ci0KLSAgaWYgKEdfTl9FTEVNRU5UUyAoX3F1YXJrX3N0cmluZ3MpICE9IEdTVF9UUkFDRVJfUVVBUktfTUFYKQotICAgIGdfd2FybmluZyAoInRoZSBxdWFyayB0YWJsZSBpcyBub3QgY29uc2lzdGVudCEgJWQgIT0gJWQiLAotICAgICAgICAoZ2ludCkgR19OX0VMRU1FTlRTIChfcXVhcmtfc3RyaW5ncyksIEdTVF9UUkFDRVJfUVVBUktfTUFYKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR1NUX1RSQUNFUl9RVUFSS19NQVg7IGkrKykgewotICAgIF9wcml2X2dzdF90cmFjZXJfcXVhcmtfdGFibGVbaV0gPQotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoX3F1YXJrX3N0cmluZ3NbaV0pOwotICB9Ci0KLSAgaWYgKGVudiAhPSBOVUxMICYmICplbnYgIT0gJ1wwJykgewotICAgIEdzdFJlZ2lzdHJ5ICpyZWdpc3RyeSA9IGdzdF9yZWdpc3RyeV9nZXQgKCk7Ci0gICAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZTsKLSAgICBHc3RUcmFjZXJGYWN0b3J5ICpmYWN0b3J5OwotICAgIGdjaGFyICoqdCA9IGdfc3Ryc3BsaXRfc2V0IChlbnYsICI7IiwgMCk7Ci0gICAgZ2NoYXIgKnBhcmFtczsKLQotICAgIEdTVF9JTkZPICgiZW5hYmxpbmcgdHJhY2VyczogJyVzJyIsIGVudik7Ci0gICAgaSA9IDA7Ci0gICAgd2hpbGUgKHRbaV0pIHsKLSAgICAgIC8vIGNoZWNrIHRbaV0gZm9yIHBhcmFtcwotICAgICAgaWYgKChwYXJhbXMgPSBzdHJjaHIgKHRbaV0sICcoJykpKSB7Ci0gICAgICAgIGdjaGFyICplbmQgPSBzdHJjaHIgKCZwYXJhbXNbMV0sICcpJyk7Ci0gICAgICAgICpwYXJhbXMgPSAnXDAnOwotICAgICAgICBwYXJhbXMrKzsKLSAgICAgICAgaWYgKGVuZCkKLSAgICAgICAgICAqZW5kID0gJ1wwJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhcmFtcyA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9JTkZPICgiY2hlY2tpbmcgdHJhY2VyOiAnJXMnIiwgdFtpXSk7Ci0KLSAgICAgIGlmICgoZmVhdHVyZSA9IGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZSAocmVnaXN0cnksIHRbaV0pKSkgewotICAgICAgICBmYWN0b3J5ID0gR1NUX1RSQUNFUl9GQUNUT1JZIChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoZmVhdHVyZSkpOwotICAgICAgICBpZiAoZmFjdG9yeSkgewotICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmFjdG9yeSwgImNyZWF0aW5nIHRyYWNlcjogdHlwZS1pZD0ldSIsCi0gICAgICAgICAgICAgIChndWludCkgZmFjdG9yeS0+dHlwZSk7Ci0KLSAgICAgICAgICAvKiB0cmFjZXJzIHJlZ2lzdGVyIHRoZW0gc2VsZiB0byB0aGUgaG9va3MgKi8KLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChnX29iamVjdF9uZXcgKGZhY3RvcnktPnR5cGUsICJwYXJhbXMiLCBwYXJhbXMsCi0gICAgICAgICAgICAgICAgICBOVUxMKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmZWF0dXJlLAotICAgICAgICAgICAgICAibG9hZGluZyBwbHVnaW4gY29udGFpbmluZyBmZWF0dXJlICVzIGZhaWxlZCEiLCB0W2ldKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJubyB0cmFjZXIgbmFtZWQgJyVzJyIsIHRbaV0pOwotICAgICAgfQotICAgICAgaSsrOwotICAgIH0KLSAgICBnX3N0cmZyZWV2ICh0KTsKLSAgfQotfQotCi12b2lkCi1fcHJpdl9nc3RfdHJhY2luZ19kZWluaXQgKHZvaWQpCi17Ci0gIEdMaXN0ICpoX2xpc3QsICpoX25vZGUsICp0X25vZGU7Ci0gIEdzdFRyYWNlckhvb2sgKmhvb2s7Ci0KLSAgX3ByaXZfdHJhY2VyX2VuYWJsZWQgPSBGQUxTRTsKLSAgaWYgKCFfcHJpdl90cmFjZXJzKQotICAgIHJldHVybjsKLQotICAvKiBzaHV0ZG93biB0cmFjZXJzIGZvciBmaW5hbCByZXBvcnRzICovCi0gIGhfbGlzdCA9IGdfaGFzaF90YWJsZV9nZXRfdmFsdWVzIChfcHJpdl90cmFjZXJzKTsKLSAgZm9yIChoX25vZGUgPSBoX2xpc3Q7IGhfbm9kZTsgaF9ub2RlID0gZ19saXN0X25leHQgKGhfbm9kZSkpIHsKLSAgICBmb3IgKHRfbm9kZSA9IGhfbm9kZS0+ZGF0YTsgdF9ub2RlOyB0X25vZGUgPSBnX2xpc3RfbmV4dCAodF9ub2RlKSkgewotICAgICAgaG9vayA9IChHc3RUcmFjZXJIb29rICopIHRfbm9kZS0+ZGF0YTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGhvb2stPnRyYWNlcik7Ci0gICAgICBnX3NsaWNlX2ZyZWUgKEdzdFRyYWNlckhvb2ssIGhvb2spOwotICAgIH0KLSAgICBnX2xpc3RfZnJlZSAoaF9ub2RlLT5kYXRhKTsKLSAgfQotICBnX2xpc3RfZnJlZSAoaF9saXN0KTsKLSAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKF9wcml2X3RyYWNlcnMpOwotICBfcHJpdl90cmFjZXJzID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2tfaWQgKEdzdFRyYWNlciAqIHRyYWNlciwgR1F1YXJrIGRldGFpbCwgR0NhbGxiYWNrIGZ1bmMpCi17Ci0gIGdwb2ludGVyIGtleSA9IEdJTlRfVE9fUE9JTlRFUiAoZGV0YWlsKTsKLSAgR0xpc3QgKmxpc3QgPSBnX2hhc2hfdGFibGVfbG9va3VwIChfcHJpdl90cmFjZXJzLCBrZXkpOwotICBHc3RUcmFjZXJIb29rICpob29rID0gZ19zbGljZV9uZXcwIChHc3RUcmFjZXJIb29rKTsKLSAgaG9vay0+dHJhY2VyID0gZ3N0X29iamVjdF9yZWYgKHRyYWNlcik7Ci0gIGhvb2stPmZ1bmMgPSBmdW5jOwotCi0gIGxpc3QgPSBnX2xpc3RfcHJlcGVuZCAobGlzdCwgaG9vayk7Ci0gIGdfaGFzaF90YWJsZV9yZXBsYWNlIChfcHJpdl90cmFjZXJzLCBrZXksIGxpc3QpOwotICBHU1RfREVCVUcgKCJyZWdpc3RlcmluZyB0cmFjZXIgZm9yICclcycsIGxpc3QubGVuPSVkIiwKLSAgICAgIChkZXRhaWwgPyBnX3F1YXJrX3RvX3N0cmluZyAoZGV0YWlsKSA6ICIqIiksIGdfbGlzdF9sZW5ndGggKGxpc3QpKTsKLSAgX3ByaXZfdHJhY2VyX2VuYWJsZWQgPSBUUlVFOwotfQotCi0vKioKLSAqIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2s6Ci0gKiBAdHJhY2VyOiB0aGUgdHJhY2VyCi0gKiBAZGV0YWlsOiB0aGUgZGV0YWlsZWQgaG9vawotICogQGZ1bmM6IChzY29wZSBhc3luYyk6IHRoZSBjYWxsYmFjawotICoKLSAqIFJlZ2lzdGVyIEBmdW5jIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB0cmFjZSBob29rIEBkZXRhaWwgaXMgZ2V0dGluZyBpbnZva2VkLgotICogVXNlICVOVUxMIGZvciBAZGV0YWlsIHRvIHJlZ2lzdGVyIHRvIGFsbCBob29rcy4KLSAqLwotdm9pZAotZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAoR3N0VHJhY2VyICogdHJhY2VyLCBjb25zdCBnY2hhciAqIGRldGFpbCwKLSAgICBHQ2FsbGJhY2sgZnVuYykKLXsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9va19pZCAodHJhY2VyLCBnX3F1YXJrX3RyeV9zdHJpbmcgKGRldGFpbCksIGZ1bmMpOwotfQotCi0jZW5kaWYgLyogR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LUyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHRyYWNlcnV0aWxzLmggYi9nc3QvZ3N0dHJhY2VydXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYxZDY2ZC4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dHJhY2VydXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdHRyYWNlcnV0aWxzLmg6IHRyYWNpbmcgc3Vic3lzdGVtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1RSQUNFUl9VVElMU19IX18KLSNkZWZpbmUgX19HU1RfVFJBQ0VSX1VUSUxTX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotI2luY2x1ZGUgPGdzdC9nc3RiaW4uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dXRpbHMuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1MKLQotLyogdHJhY2luZyBob29rcyAqLwotCi12b2lkIF9wcml2X2dzdF90cmFjaW5nX2luaXQgKHZvaWQpOwotdm9pZCBfcHJpdl9nc3RfdHJhY2luZ19kZWluaXQgKHZvaWQpOwotCi0vKiB0cmFjZXIgcXVhcmtzICovCi0KLS8qIFRoZXNlIGVudW1zIG5lZWQgdG8gbWF0Y2ggdGhlIG51bWJlciBhbmQgb3JkZXIKLSAqIG9mIHN0cmluZ3MgZGVjbGFyZWQgaW4gX3F1YXJrX3RhYmxlLCBpbiBnc3R0cmFjZXJ1dGlscy5jICovCi10eXBlZGVmIGVudW0gLyo8IHNraXAgPiovCi17Ci0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19QQURfUFVTSF9QUkUgPSAwLAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfUEFEX1BVU0hfUE9TVCwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX1BBRF9QVVNIX0xJU1RfUFJFLAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfUEFEX1BVU0hfTElTVF9QT1NULAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfUEFEX1BVTExfUkFOR0VfUFJFLAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfUEFEX1BVTExfUkFOR0VfUE9TVCwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX1BBRF9QVVNIX0VWRU5UX1BSRSAsCi0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19QQURfUFVTSF9FVkVOVF9QT1NULAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfUEFEX1FVRVJZX1BSRSAsCi0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19QQURfUVVFUllfUE9TVCwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX0VMRU1FTlRfUE9TVF9NRVNTQUdFX1BSRSwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX0VMRU1FTlRfUE9TVF9NRVNTQUdFX1BPU1QsCi0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19FTEVNRU5UX1FVRVJZX1BSRSwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX0VMRU1FTlRfUVVFUllfUE9TVCwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX0VMRU1FTlRfTkVXLAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfRUxFTUVOVF9BRERfUEFELAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfRUxFTUVOVF9SRU1PVkVfUEFELAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfQklOX0FERF9QUkUsCi0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19CSU5fQUREX1BPU1QsCi0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19CSU5fUkVNT1ZFX1BSRSwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX0JJTl9SRU1PVkVfUE9TVCwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX1BBRF9MSU5LX1BSRSwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX1BBRF9MSU5LX1BPU1QsCi0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19QQURfVU5MSU5LX1BSRSwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX1BBRF9VTkxJTktfUE9TVCwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX0VMRU1FTlRfQ0hBTkdFX1NUQVRFX1BSRSwKLSAgR1NUX1RSQUNFUl9RVUFSS19IT09LX0VMRU1FTlRfQ0hBTkdFX1NUQVRFX1BPU1QsCi0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19NSU5JX09CSkVDVF9DUkVBVEVELAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfTUlOSV9PQkpFQ1RfREVTVFJPWUVELAotICBHU1RfVFJBQ0VSX1FVQVJLX0hPT0tfT0JKRUNUX0NSRUFURUQsCi0gIEdTVF9UUkFDRVJfUVVBUktfSE9PS19PQkpFQ1RfREVTVFJPWUVELAotICBHU1RfVFJBQ0VSX1FVQVJLX01BWAotfSBHc3RUcmFjZXJRdWFya0lkOwotCi1leHRlcm4gR1F1YXJrIF9wcml2X2dzdF90cmFjZXJfcXVhcmtfdGFibGVbR1NUX1RSQUNFUl9RVUFSS19NQVhdOwotCi0jZGVmaW5lIEdTVF9UUkFDRVJfUVVBUksocSkgX3ByaXZfZ3N0X3RyYWNlcl9xdWFya190YWJsZVtHU1RfVFJBQ0VSX1FVQVJLXyMjcV0KLQotLyogdHJhY2luZyBtb2R1bGUgaGVscGVycyAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIEdPYmplY3QgKnRyYWNlcjsKLSAgR0NhbGxiYWNrIGZ1bmM7Ci19IEdzdFRyYWNlckhvb2s7Ci0KLWV4dGVybiBnYm9vbGVhbiBfcHJpdl90cmFjZXJfZW5hYmxlZDsKLS8qIGtleSBhcmUgaG9vay1pZCBxdWFya3MsIHZhbHVlcyBhcmUgR3N0VHJhY2VySG9vayAqLwotZXh0ZXJuIEdIYXNoVGFibGUgKl9wcml2X3RyYWNlcnM7Ci0KLSNkZWZpbmUgR1NUX1RSQUNFUl9JU19FTkFCTEVEIChfcHJpdl90cmFjZXJfZW5hYmxlZCkKLQotI2RlZmluZSBHU1RfVFJBQ0VSX1RTIFwKLSAgR1NUX0NMT0NLX0RJRkYgKF9wcml2X2dzdF9zdGFydF90aW1lLCBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpKQotCi0vKiB0cmFjaW5nIGhvb2tzICovCi0KLSNkZWZpbmUgR1NUX1RSQUNFUl9BUkdTIGgtPnRyYWNlciwgdHMKLSNkZWZpbmUgR1NUX1RSQUNFUl9ESVNQQVRDSChrZXksdHlwZSxhcmdzKSBHX1NUTVRfU1RBUlR7IFwKLSAgaWYgKEdTVF9UUkFDRVJfSVNfRU5BQkxFRCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdzdENsb2NrVGltZSB0cyA9IEdTVF9UUkFDRVJfVFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR0xpc3QgKl9fbCwgKl9fbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHc3RUcmFjZXJIb29rICpoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9fbCA9IGdfaGFzaF90YWJsZV9sb29rdXAgKF9wcml2X3RyYWNlcnMsIEdJTlRfVE9fUE9JTlRFUiAoa2V5KSk7ICBcCi0gICAgZm9yIChfX24gPSBfX2w7IF9fbjsgX19uID0gZ19saXN0X25leHQgKF9fbikpIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGggPSAoR3N0VHJhY2VySG9vayAqKSBfX24tPmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKCh0eXBlKShoLT5mdW5jKSkgYXJnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2wgPSBnX2hhc2hfdGFibGVfbG9va3VwIChfcHJpdl90cmFjZXJzLCBOVUxMKTsgICAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoX19uID0gX19sOyBfX247IF9fbiA9IGdfbGlzdF9uZXh0IChfX24pKSB7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBoID0gKEdzdFRyYWNlckhvb2sgKikgX19uLT5kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICgodHlwZSkoaC0+ZnVuYykpIGFyZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX1HX1NUTVRfRU5ECi0KLS8qKgotICogR3N0VHJhY2VySG9va1BhZFB1c2hQcmU6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBwYWQ6IHRoZSBwYWQKLSAqIEBidWZmZXI6IHRoZSBidWZmZXIKLSAqCi0gKiBQcmUtaG9vayBmb3IgZ3N0X3BhZF9wdXNoKCkgbmFtZWQgInBhZC1wdXNoLXByZSIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tQYWRQdXNoUHJlKSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdFBhZCAqcGFkLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX1BVU0hfUFJFKHBhZCwgYnVmZmVyKSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfUEFEX1BVU0hfUFJFKSwgXAotICAgIEdzdFRyYWNlckhvb2tQYWRQdXNoUHJlLCAoR1NUX1RSQUNFUl9BUkdTLCBwYWQsIGJ1ZmZlcikpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tQYWRQdXNoUG9zdDoKLSAqIEBzZWxmOiB0aGUgdHJhY2VyIGluc3RhbmNlCi0gKiBAdHM6IHRoZSBjdXJyZW50IHRpbWVzdGFtcAotICogQHBhZDogdGhlIHBhZAotICogQHJlczogdGhlIHJlc3VsdCBvZiBnc3RfcGFkX3B1c2goKQotICoKLSAqIFBvc3QtaG9vayBmb3IgZ3N0X3BhZF9wdXNoKCkgbmFtZWQgInBhZC1wdXNoLXBvc3QiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rUGFkUHVzaFBvc3QpIChHT2JqZWN0ICogc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdFBhZCAqcGFkLCBHc3RGbG93UmV0dXJuIHJlcyk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX1BVU0hfUE9TVChwYWQsIHJlcykgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX1BBRF9QVVNIX1BPU1QpLCBcCi0gICAgR3N0VHJhY2VySG9va1BhZFB1c2hQb3N0LCAoR1NUX1RSQUNFUl9BUkdTLCBwYWQsIHJlcykpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFByZToKLSAqIEBzZWxmOiB0aGUgdHJhY2VyIGluc3RhbmNlCi0gKiBAdHM6IHRoZSBjdXJyZW50IHRpbWVzdGFtcAotICogQHBhZDogdGhlIHBhZAotICogQGxpc3Q6IHRoZSBidWZmZXItbGlzdAotICoKLSAqIFByZS1ob29rIGZvciBnc3RfcGFkX3B1c2hfbGlzdCgpIG5hbWVkICJwYWQtcHVzaC1saXN0LXByZSIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFByZSkgKEdPYmplY3QgKnNlbGYsIEdzdENsb2NrVGltZSB0cywKLSAgICBHc3RQYWQgKnBhZCwgR3N0QnVmZmVyTGlzdCAqbGlzdCk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX1BVU0hfTElTVF9QUkUocGFkLCBsaXN0KSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfUEFEX1BVU0hfTElTVF9QUkUpLCBcCi0gICAgR3N0VHJhY2VySG9va1BhZFB1c2hMaXN0UHJlLCAoR1NUX1RSQUNFUl9BUkdTLCBwYWQsIGxpc3QpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQb3N0OgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAcGFkOiB0aGUgcGFkCi0gKiBAcmVzOiB0aGUgcmVzdWx0IG9mIGdzdF9wYWRfcHVzaF9saXN0KCkKLSAqCi0gKiBQb3N0LWhvb2sgZm9yIGdzdF9wYWRfcHVzaF9saXN0KCkgbmFtZWQgInBhZC1wdXNoLWxpc3QtcG9zdCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tQYWRQdXNoTGlzdFBvc3QpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0UGFkICpwYWQsCi0gICAgR3N0Rmxvd1JldHVybiByZXMpOwotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9QVVNIX0xJU1RfUE9TVChwYWQsIHJlcykgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX1BBRF9QVVNIX0xJU1RfUE9TVCksIFwKLSAgICBHc3RUcmFjZXJIb29rUGFkUHVzaExpc3RQb3N0LCAoR1NUX1RSQUNFUl9BUkdTLCBwYWQsIHJlcykpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tQYWRQdWxsUmFuZ2VQcmU6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBwYWQ6IHRoZSBwYWQKLSAqIEBvZmZzZXQ6IHRoZSBzdHJlYW0gb2Zmc2V0Ci0gKiBAc2l6ZTogdGhlIHJlcXVlc3RlZCBzaXplCi0gKgotICogUHJlLWhvb2sgZm9yIGdzdF9wYWRfcHVsbF9yYW5nZSgpIG5hbWVkICJwYWQtcHVsbC1yYW5nZS1wcmUiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUHJlKSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdFBhZCAqcGFkLCBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX1BVTExfUkFOR0VfUFJFKHBhZCwgb2Zmc2V0LCBzaXplKSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfUEFEX1BVTExfUkFOR0VfUFJFKSwgXAotICAgIEdzdFRyYWNlckhvb2tQYWRQdWxsUmFuZ2VQcmUsIChHU1RfVFJBQ0VSX0FSR1MsIHBhZCwgb2Zmc2V0LCBzaXplKSk7IFwKLX1HX1NUTVRfRU5ECi0KLS8qKgotICogR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVBvc3Q6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBwYWQ6IHRoZSBwYWQKLSAqIEBidWZmZXI6IHRoZSBidWZmZXIKLSAqIEByZXM6IHRoZSByZXN1bHQgb2YgZ3N0X3BhZF9wdWxsX3JhbmdlKCkKLSAqCi0gKiBQb3N0LWhvb2sgZm9yIGdzdF9wYWRfcHVsbF9yYW5nZSgpIG5hbWVkICJwYWQtcHVsbC1yYW5nZS1wb3N0Ii4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0VHJhY2VySG9va1BhZFB1bGxSYW5nZVBvc3QpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0UGFkICpwYWQsIEdzdEJ1ZmZlciAqYnVmZmVyLCBHc3RGbG93UmV0dXJuIHJlcyk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX1BVTExfUkFOR0VfUE9TVChwYWQsIGJ1ZmZlciwgcmVzKSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfUEFEX1BVTExfUkFOR0VfUE9TVCksIFwKLSAgICBHc3RUcmFjZXJIb29rUGFkUHVsbFJhbmdlUG9zdCwgKEdTVF9UUkFDRVJfQVJHUywgcGFkLCBidWZmZXIsIHJlcykpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQcmU6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBwYWQ6IHRoZSBwYWQKLSAqIEBldmVudDogdGhlIGV2ZW50Ci0gKgotICogUHJlLWhvb2sgZm9yIGdzdF9wYWRfcHVzaF9ldmVudCgpIG5hbWVkICJwYWQtcHVzaC1ldmVudC1wcmUiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UHJlKSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdFBhZCAqcGFkLCBHc3RFdmVudCAqZXZlbnQpOwotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9QVVNIX0VWRU5UX1BSRShwYWQsIGV2ZW50KSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfUEFEX1BVU0hfRVZFTlRfUFJFKSwgXAotICAgIEdzdFRyYWNlckhvb2tQYWRQdXNoRXZlbnRQcmUsIChHU1RfVFJBQ0VSX0FSR1MsIHBhZCwgZXZlbnQpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdDoKLSAqIEBzZWxmOiB0aGUgdHJhY2VyIGluc3RhbmNlCi0gKiBAdHM6IHRoZSBjdXJyZW50IHRpbWVzdGFtcAotICogQHBhZDogdGhlIHBhZAotICogQHJlczogdGhlIHJlc3VsdCBvZiBnc3RfcGFkX3B1c2hfZXZlbnQoKQotICoKLSAqIFBvc3QtaG9vayBmb3IgZ3N0X3BhZF9wdXNoX2V2ZW50KCkgbmFtZWQgInBhZC1wdXNoLWV2ZW50LXBvc3QiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdCkgKEdPYmplY3QgKnNlbGYsIEdzdENsb2NrVGltZSB0cywKLSAgICBHc3RQYWQgKnBhZCwgZ2Jvb2xlYW4gcmVzKTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfUFVTSF9FVkVOVF9QT1NUKHBhZCwgcmVzKSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfUEFEX1BVU0hfRVZFTlRfUE9TVCksIFwKLSAgICBHc3RUcmFjZXJIb29rUGFkUHVzaEV2ZW50UG9zdCwgKEdTVF9UUkFDRVJfQVJHUywgcGFkLCByZXMpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rUGFkUXVlcnlQcmU6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBwYWQ6IHRoZSBwYWQKLSAqIEBxdWVyeTogdGhlIHF1ZXJ5Ci0gKgotICogUHJlLWhvb2sgZm9yIGdzdF9wYWRfcXVlcnkoKSBuYW1lZCAicGFkLXF1ZXJ5LXByZSIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tQYWRRdWVyeVByZSkgKEdPYmplY3QgKnNlbGYsIEdzdENsb2NrVGltZSB0cywKLSAgICBHc3RQYWQgKnBhZCwgR3N0UXVlcnkgKnF1ZXJ5KTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfUVVFUllfUFJFKHBhZCwgcXVlcnkpIEdfU1RNVF9TVEFSVHsgXAotICBHU1RfVFJBQ0VSX0RJU1BBVENIKEdTVF9UUkFDRVJfUVVBUksoSE9PS19QQURfUVVFUllfUFJFKSwgXAotICAgIEdzdFRyYWNlckhvb2tQYWRRdWVyeVByZSwgKEdTVF9UUkFDRVJfQVJHUywgcGFkLCBxdWVyeSkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tQYWRRdWVyeVBvc3Q6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBwYWQ6IHRoZSBwYWQKLSAqIEBxdWVyeTogdGhlIHF1ZXJ5Ci0gKiBAcmVzOiB0aGUgcmVzdWx0IG9mIGdzdF9wYWRfcXVlcnkoKQotICoKLSAqIFBvc3QtaG9vayBmb3IgZ3N0X3BhZF9xdWVyeSgpIG5hbWVkICJwYWQtcXVlcnktcG9zdCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tQYWRRdWVyeVBvc3QpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0UGFkICpwYWQsIEdzdFF1ZXJ5ICpxdWVyeSwgZ2Jvb2xlYW4gcmVzKTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfUVVFUllfUE9TVChwYWQsIHF1ZXJ5LCByZXMpIEdfU1RNVF9TVEFSVHsgXAotICBHU1RfVFJBQ0VSX0RJU1BBVENIKEdTVF9UUkFDRVJfUVVBUksoSE9PS19QQURfUVVFUllfUE9TVCksIFwKLSAgICBHc3RUcmFjZXJIb29rUGFkUXVlcnlQb3N0LCAoR1NUX1RSQUNFUl9BUkdTLCBwYWQsIHF1ZXJ5LCByZXMpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUHJlOgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAZWxlbWVudDogdGhlIGVsZW1lbnQKLSAqIEBtZXNzYWdlOiB0aGUgbWVzc2FnZQotICoKLSAqIFByZS1ob29rIGZvciBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoKSBuYW1lZCAiZWxlbWVudC1wb3N0LW1lc3NhZ2UtcHJlIi4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVByZSkgKEdPYmplY3QgKnNlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRzLCBHc3RFbGVtZW50ICplbGVtZW50LCBHc3RNZXNzYWdlICptZXNzYWdlKTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9FTEVNRU5UX1BPU1RfTUVTU0FHRV9QUkUoZWxlbWVudCwgbWVzc2FnZSkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX0VMRU1FTlRfUE9TVF9NRVNTQUdFX1BSRSksIFwKLSAgICBHc3RUcmFjZXJIb29rRWxlbWVudFBvc3RNZXNzYWdlUHJlLCAoR1NUX1RSQUNFUl9BUkdTLCBlbGVtZW50LCBtZXNzYWdlKSk7IFwKLX1HX1NUTVRfRU5ECi0KLS8qKgotICogR3N0VHJhY2VySG9va0VsZW1lbnRQb3N0TWVzc2FnZVBvc3Q6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBlbGVtZW50OiB0aGUgZWxlbWVudAotICogQHJlczogdGhlIHJlc3VsdCBvZiBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoKQotICoKLSAqIFByZS1ob29rIGZvciBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoKSBuYW1lZCAiZWxlbWVudC1wb3N0LW1lc3NhZ2UtcG9zdCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQb3N0KSAoR09iamVjdCAqc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdHMsIEdzdEVsZW1lbnQgKmVsZW1lbnQsIGdib29sZWFuIHJlcyk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9QT1NUX01FU1NBR0VfUE9TVChlbGVtZW50LCByZXMpIEdfU1RNVF9TVEFSVHsgXAotICBHU1RfVFJBQ0VSX0RJU1BBVENIKEdTVF9UUkFDRVJfUVVBUksoSE9PS19FTEVNRU5UX1BPU1RfTUVTU0FHRV9QT1NUKSwgXAotICAgIEdzdFRyYWNlckhvb2tFbGVtZW50UG9zdE1lc3NhZ2VQb3N0LCAoR1NUX1RSQUNFUl9BUkdTLCBlbGVtZW50LCByZXMpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UHJlOgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAZWxlbWVudDogdGhlIGVsZW1lbnQKLSAqIEBxdWVyeTogdGhlIHF1ZXJ5Ci0gKgotICogUHJlLWhvb2sgZm9yIGdzdF9lbGVtZW50X3F1ZXJ5KCkgbmFtZWQgImVsZW1lbnQtcXVlcnktcHJlIi4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0VHJhY2VySG9va0VsZW1lbnRRdWVyeVByZSkgKEdPYmplY3QgKnNlbGYsIEdzdENsb2NrVGltZSB0cywKLSAgICBHc3RFbGVtZW50ICplbGVtZW50LCBHc3RRdWVyeSAqcXVlcnkpOwotI2RlZmluZSBHU1RfVFJBQ0VSX0VMRU1FTlRfUVVFUllfUFJFKGVsZW1lbnQsIHF1ZXJ5KSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfRUxFTUVOVF9RVUVSWV9QUkUpLCBcCi0gICAgR3N0VHJhY2VySG9va0VsZW1lbnRRdWVyeVByZSwgKEdTVF9UUkFDRVJfQVJHUywgZWxlbWVudCwgcXVlcnkpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdDoKLSAqIEBzZWxmOiB0aGUgdHJhY2VyIGluc3RhbmNlCi0gKiBAdHM6IHRoZSBjdXJyZW50IHRpbWVzdGFtcAotICogQGVsZW1lbnQ6IHRoZSBlbGVtZW50Ci0gKiBAcXVlcnk6IHRoZSBxdWVyeQotICogQHJlczogdGhlIHJlc3VsdCBvZiBnc3RfZWxlbWVudF9xdWVyeSgpCi0gKgotICogUG9zdC1ob29rIGZvciBnc3RfZWxlbWVudF9xdWVyeSgpIG5hbWVkICJlbGVtZW50LXF1ZXJ5LXBvc3QiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rRWxlbWVudFF1ZXJ5UG9zdCkgKEdPYmplY3QgKnNlbGYsIEdzdENsb2NrVGltZSB0cywKLSAgICBHc3RFbGVtZW50ICplbGVtZW50LCBHc3RRdWVyeSAqcXVlcnksIGdib29sZWFuIHJlcyk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9RVUVSWV9QT1NUKGVsZW1lbnQsIHF1ZXJ5LCByZXMpIEdfU1RNVF9TVEFSVHsgXAotICBHU1RfVFJBQ0VSX0RJU1BBVENIKEdTVF9UUkFDRVJfUVVBUksoSE9PS19FTEVNRU5UX1FVRVJZX1BPU1QpLCBcCi0gICAgR3N0VHJhY2VySG9va0VsZW1lbnRRdWVyeVBvc3QsIChHU1RfVFJBQ0VSX0FSR1MsIGVsZW1lbnQsIHF1ZXJ5LCByZXMpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rRWxlbWVudE5ldzoKLSAqIEBzZWxmOiB0aGUgdHJhY2VyIGluc3RhbmNlCi0gKiBAdHM6IHRoZSBjdXJyZW50IHRpbWVzdGFtcAotICogQGVsZW1lbnQ6IHRoZSBlbGVtZW50Ci0gKgotICogSG9vayBmb3IgZ3N0X2VsZW1lbnRfbmV3KCkgbmFtZWQgImVsZW1lbnQtbmV3Ii4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0VHJhY2VySG9va0VsZW1lbnROZXcpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0RWxlbWVudCAqZWxlbWVudCk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9ORVcoZWxlbWVudCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX0VMRU1FTlRfTkVXKSwgXAotICAgIEdzdFRyYWNlckhvb2tFbGVtZW50TmV3LCAoR1NUX1RSQUNFUl9BUkdTLCBlbGVtZW50KSk7IFwKLX1HX1NUTVRfRU5ECi0KLS8qKgotICogR3N0VHJhY2VySG9va0VsZW1lbnRBZGRQYWQ6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBlbGVtZW50OiB0aGUgZWxlbWVudAotICogQHBhZDogdGhlIHBhZAotICoKLSAqIEhvb2sgZm9yIGdzdF9lbGVtZW50X2FkZF9wYWQoKSBuYW1lZCAiZWxlbWVudC1hZGQtcGFkIi4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0VHJhY2VySG9va0VsZW1lbnRBZGRQYWQpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0UGFkICpwYWQpOwotI2RlZmluZSBHU1RfVFJBQ0VSX0VMRU1FTlRfQUREX1BBRChlbGVtZW50LCBwYWQpIEdfU1RNVF9TVEFSVHsgXAotICBHU1RfVFJBQ0VSX0RJU1BBVENIKEdTVF9UUkFDRVJfUVVBUksoSE9PS19FTEVNRU5UX0FERF9QQUQpLCBcCi0gICAgR3N0VHJhY2VySG9va0VsZW1lbnRBZGRQYWQsIChHU1RfVFJBQ0VSX0FSR1MsIGVsZW1lbnQsIHBhZCkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkOgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAZWxlbWVudDogdGhlIGVsZW1lbnQKLSAqIEBwYWQ6IHRoZSBwYWQKLSAqCi0gKiBIb29rIGZvciBnc3RfZWxlbWVudF9yZW1vdmVfcGFkKCkgbmFtZWQgImVsZW1lbnQtcmVtb3ZlLXBhZCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkKSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9FTEVNRU5UX1JFTU9WRV9QQUQoZWxlbWVudCwgcGFkKSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfRUxFTUVOVF9SRU1PVkVfUEFEKSwgXAotICAgIEdzdFRyYWNlckhvb2tFbGVtZW50UmVtb3ZlUGFkLCAoR1NUX1RSQUNFUl9BUkdTLCBlbGVtZW50LCBwYWQpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUHJlOgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAZWxlbWVudDogdGhlIGVsZW1lbnQKLSAqIEB0cmFuc2l0aW9uOiB0aGUgdHJhbnNpdGlvbgotICoKLSAqIFByZS1ob29rIGZvciBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUoKSBuYW1lZCAiZWxlbWVudC1jaGFuZ2Utc3RhdGUtcHJlIi4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0VHJhY2VySG9va0VsZW1lbnRDaGFuZ2VTdGF0ZVByZSkgKEdPYmplY3QgKnNlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRzLCBHc3RFbGVtZW50ICplbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9FTEVNRU5UX0NIQU5HRV9TVEFURV9QUkUoZWxlbWVudCwgdHJhbnNpdGlvbikgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX0VMRU1FTlRfQ0hBTkdFX1NUQVRFX1BSRSksIFwKLSAgICBHc3RUcmFjZXJIb29rRWxlbWVudENoYW5nZVN0YXRlUHJlLCAoR1NUX1RSQUNFUl9BUkdTLCBlbGVtZW50LCB0cmFuc2l0aW9uKSk7IFwKLX1HX1NUTVRfRU5ECi0KLS8qKgotICogR3N0VHJhY2VySG9va0VsZW1lbnRDaGFuZ2VTdGF0ZVBvc3Q6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBlbGVtZW50OiB0aGUgZWxlbWVudAotICogQHRyYW5zaXRpb246IHRoZSB0cmFuc2l0aW9uCi0gKiBAcmVzdWx0OiB0aGUgcmVzdWx0IG9mIGdzdF9wYWRfcHVzaCgpCi0gKgotICogUG9zdC1ob29rIGZvciBnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUoKSBuYW1lZCAiZWxlbWVudC1jaGFuZ2Utc3RhdGUtcG9zdCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tFbGVtZW50Q2hhbmdlU3RhdGVQb3N0KSAoR09iamVjdCAqc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdHMsIEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24sCi0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0KTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9FTEVNRU5UX0NIQU5HRV9TVEFURV9QT1NUKGVsZW1lbnQsIHRyYW5zaXRpb24sIHJlc3VsdCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX0VMRU1FTlRfQ0hBTkdFX1NUQVRFX1BPU1QpLCBcCi0gICAgR3N0VHJhY2VySG9va0VsZW1lbnRDaGFuZ2VTdGF0ZVBvc3QsIChHU1RfVFJBQ0VSX0FSR1MsIGVsZW1lbnQsIHRyYW5zaXRpb24sIHJlc3VsdCkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tCaW5BZGRQcmU6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBiaW46IHRoZSBiaW4KLSAqIEBlbGVtZW50OiB0aGUgZWxlbWVudAotICoKLSAqIFByZS1ob29rIGZvciBnc3RfYmluX2FkZCgpIG5hbWVkICJiaW4tYWRkLXByZSIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tCaW5BZGRQcmUpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmVsZW1lbnQpOwotI2RlZmluZSBHU1RfVFJBQ0VSX0JJTl9BRERfUFJFKGJpbiwgZWxlbWVudCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX0JJTl9BRERfUFJFKSwgXAotICAgIEdzdFRyYWNlckhvb2tCaW5BZGRQcmUsIChHU1RfVFJBQ0VSX0FSR1MsIGJpbiwgZWxlbWVudCkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tCaW5BZGRQb3N0OgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAYmluOiB0aGUgYmluCi0gKiBAZWxlbWVudDogdGhlIGVsZW1lbnQKLSAqIEByZXN1bHQ6IHRoZSByZXN1bHQgb2YgZ3N0X2Jpbl9hZGQoKQotICoKLSAqIFBvc3QtaG9vayBmb3IgZ3N0X2Jpbl9hZGQoKSBuYW1lZCAiYmluLWFkZC1wb3N0Ii4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0VHJhY2VySG9va0JpbkFkZFBvc3QpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmVsZW1lbnQsIGdib29sZWFuIHJlc3VsdCk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfQklOX0FERF9QT1NUKGJpbiwgZWxlbWVudCwgcmVzdWx0KSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfQklOX0FERF9QT1NUKSwgXAotICAgIEdzdFRyYWNlckhvb2tCaW5BZGRQb3N0LCAoR1NUX1RSQUNFUl9BUkdTLCBiaW4sIGVsZW1lbnQsIHJlc3VsdCkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tCaW5SZW1vdmVQcmU6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBiaW46IHRoZSBiaW4KLSAqIEBlbGVtZW50OiB0aGUgZWxlbWVudAotICoKLSAqIFByZS1ob29rIGZvciBnc3RfYmluX3JlbW92ZSgpIG5hbWVkICJiaW4tcmVtb3ZlLXByZSIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQcmUpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0QmluICpiaW4sIEdzdEVsZW1lbnQgKmVsZW1lbnQpOwotI2RlZmluZSBHU1RfVFJBQ0VSX0JJTl9SRU1PVkVfUFJFKGJpbiwgZWxlbWVudCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX0JJTl9SRU1PVkVfUFJFKSwgXAotICAgIEdzdFRyYWNlckhvb2tCaW5SZW1vdmVQcmUsIChHU1RfVFJBQ0VSX0FSR1MsIGJpbiwgZWxlbWVudCkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tCaW5SZW1vdmVQb3N0OgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAYmluOiB0aGUgYmluCi0gKiBAcmVzdWx0OiB0aGUgcmVzdWx0IG9mIGdzdF9iaW5fcmVtb3ZlKCkKLSAqCi0gKiBQb3N0LWhvb2sgZm9yIGdzdF9iaW5fcmVtb3ZlKCkgbmFtZWQgImJpbi1yZW1vdmUtcG9zdCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tCaW5SZW1vdmVQb3N0KSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdEJpbiAqYmluLCBnYm9vbGVhbiByZXN1bHQpOwotI2RlZmluZSBHU1RfVFJBQ0VSX0JJTl9SRU1PVkVfUE9TVChiaW4sIHJlc3VsdCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX0JJTl9SRU1PVkVfUE9TVCksIFwKLSAgICBHc3RUcmFjZXJIb29rQmluUmVtb3ZlUG9zdCwgKEdTVF9UUkFDRVJfQVJHUywgYmluLCByZXN1bHQpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rUGFkTGlua1ByZToKLSAqIEBzZWxmOiB0aGUgdHJhY2VyIGluc3RhbmNlCi0gKiBAdHM6IHRoZSBjdXJyZW50IHRpbWVzdGFtcAotICogQHNyY3BhZDogdGhlIHNyY3BhZAotICogQHNpbmtwYWQ6IHRoZSBzaW5rcGFkCi0gKgotICogUHJlLWhvb2sgZm9yIGdzdF9wYWRfbGluaygpIG5hbWVkICJwYWQtbGluay1wcmUiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rUGFkTGlua1ByZSkgKEdPYmplY3QgKnNlbGYsIEdzdENsb2NrVGltZSB0cywKLSAgICBHc3RQYWQgKnNyY3BhZCwgR3N0UGFkICpzaW5rcGFkKTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfTElOS19QUkUoc3JjcGFkLCBzaW5rcGFkKSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfUEFEX0xJTktfUFJFKSwgXAotICAgIEdzdFRyYWNlckhvb2tQYWRMaW5rUHJlLCAoR1NUX1RSQUNFUl9BUkdTLCBzcmNwYWQsIHNpbmtwYWQpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rUGFkTGlua1Bvc3Q6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBzcmNwYWQ6IHRoZSBzcmNwYWQKLSAqIEBzaW5rcGFkOiB0aGUgc2lua3BhZAotICogQHJlc3VsdDogdGhlIHJlc3VsdCBvZiBnc3RfcGFkX2xpbmsoKQotICoKLSAqIFBvc3QtaG9vayBmb3IgZ3N0X3BhZF9saW5rKCkgbmFtZWQgInBhZC1saW5rLXBvc3QiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rUGFkTGlua1Bvc3QpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0UGFkICpzcmNwYWQsIEdzdFBhZCAqc2lua3BhZCwgR3N0UGFkTGlua1JldHVybiByZXN1bHQpOwotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9MSU5LX1BPU1Qoc3JjcGFkLCBzaW5rcGFkLCByZXN1bHQpIEdfU1RNVF9TVEFSVHsgXAotICBHU1RfVFJBQ0VSX0RJU1BBVENIKEdTVF9UUkFDRVJfUVVBUksoSE9PS19QQURfTElOS19QT1NUKSwgXAotICAgIEdzdFRyYWNlckhvb2tQYWRMaW5rUG9zdCwgKEdTVF9UUkFDRVJfQVJHUywgc3JjcGFkLCBzaW5rcGFkLCByZXN1bHQpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rUGFkVW5saW5rUHJlOgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAc3JjcGFkOiB0aGUgc3JjcGFkCi0gKiBAc2lua3BhZDogdGhlIHNpbmtwYWQKLSAqCi0gKiBQcmUtaG9vayBmb3IgZ3N0X3BhZF91bmxpbmsoKSBuYW1lZCAicGFkLXVubGluay1wcmUiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rUGFkVW5saW5rUHJlKSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdFBhZCAqc3JjcGFkLCBHc3RQYWQgKnNpbmtwYWQpOwotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9VTkxJTktfUFJFKHNyY3BhZCwgc2lua3BhZCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX1BBRF9VTkxJTktfUFJFKSwgXAotICAgIEdzdFRyYWNlckhvb2tQYWRVbmxpbmtQcmUsIChHU1RfVFJBQ0VSX0FSR1MsIHNyY3BhZCwgc2lua3BhZCkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0OgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAc3JjcGFkOiB0aGUgc3JjcGFkCi0gKiBAc2lua3BhZDogdGhlIHNpbmtwYWQKLSAqIEByZXN1bHQ6IHRoZSByZXN1bHQgb2YgZ3N0X3BhZF9wdXNoKCkKLSAqCi0gKiBQb3N0LWhvb2sgZm9yIGdzdF9wYWRfdW5saW5rKCkgbmFtZWQgInBhZC11bmxpbmstcG9zdCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0KSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdFBhZCAqc3JjcGFkLCBHc3RQYWQgKnNpbmtwYWQsIGdib29sZWFuIHJlc3VsdCk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX1VOTElOS19QT1NUKHNyY3BhZCwgc2lua3BhZCwgcmVzdWx0KSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfUEFEX1VOTElOS19QT1NUKSwgXAotICAgIEdzdFRyYWNlckhvb2tQYWRVbmxpbmtQb3N0LCAoR1NUX1RSQUNFUl9BUkdTLCBzcmNwYWQsIHNpbmtwYWQsIHJlc3VsdCkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tNaW5pT2JqZWN0Q3JlYXRlZDoKLSAqIEBzZWxmOiB0aGUgdHJhY2VyIGluc3RhbmNlCi0gKiBAdHM6IHRoZSBjdXJyZW50IHRpbWVzdGFtcAotICogQG9iamVjdDogdGhlIG1pbmkgb2JqZWN0IGJlaW5nIGNyZWF0ZWQKLSAqCi0gKiBIb29rIGNhbGxlZCB3aGVuIGEgI0dzdE1pbmlPYmplY3QgaXMgY3JlYXRlZCBuYW1lZCAibWluaS1vYmplY3QtY3JlYXRlZCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tNaW5pT2JqZWN0Q3JlYXRlZCkgKEdPYmplY3QgKnNlbGYsIEdzdENsb2NrVGltZSB0cywKLSAgICBHc3RNaW5pT2JqZWN0ICpvYmplY3QpOwotI2RlZmluZSBHU1RfVFJBQ0VSX01JTklfT0JKRUNUX0NSRUFURUQob2JqZWN0KSBHX1NUTVRfU1RBUlR7IFwKLSAgR1NUX1RSQUNFUl9ESVNQQVRDSChHU1RfVFJBQ0VSX1FVQVJLKEhPT0tfTUlOSV9PQkpFQ1RfQ1JFQVRFRCksIFwKLSAgICBHc3RUcmFjZXJIb29rTWluaU9iamVjdENyZWF0ZWQsIChHU1RfVFJBQ0VSX0FSR1MsIG9iamVjdCkpOyBcCi19R19TVE1UX0VORAotCi0vKioKLSAqIEdzdFRyYWNlckhvb2tNaW5pT2JqZWN0RGVzdHJveWVkOgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAb2JqZWN0OiB0aGUgbWluaSBvYmplY3QgYmVpbmcgZGVzdHJveWVkCi0gKgotICogSG9vayBjYWxsZWQgd2hlbiBhICNHc3RNaW5pT2JqZWN0IGlzIGJlaW5nIGRlc3Ryb3llZCBuYW1lZAotICogIm1pbmktb2JqZWN0LWRlc3Ryb3llZCIuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkdzdFRyYWNlckhvb2tNaW5pT2JqZWN0RGVzdHJveWVkKSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdE1pbmlPYmplY3QgKm9iamVjdCk7Ci0jZGVmaW5lIEdTVF9UUkFDRVJfTUlOSV9PQkpFQ1RfREVTVFJPWUVEKG9iamVjdCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX01JTklfT0JKRUNUX0RFU1RST1lFRCksIFwKLSAgICBHc3RUcmFjZXJIb29rTWluaU9iamVjdERlc3Ryb3llZCwgKEdTVF9UUkFDRVJfQVJHUywgb2JqZWN0KSk7IFwKLX1HX1NUTVRfRU5ECi0KLS8qKgotICogR3N0VHJhY2VySG9va09iamVjdENyZWF0ZWQ6Ci0gKiBAc2VsZjogdGhlIHRyYWNlciBpbnN0YW5jZQotICogQHRzOiB0aGUgY3VycmVudCB0aW1lc3RhbXAKLSAqIEBvYmplY3Q6IHRoZSBvYmplY3QgYmVpbmcgY3JlYXRlZAotICoKLSAqIEhvb2sgY2FsbGVkIHdoZW4gYSAjR3N0T2JqZWN0IGlzIGNyZWF0ZWQgbmFtZWQgIm9iamVjdC1jcmVhdGVkIi4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0VHJhY2VySG9va09iamVjdENyZWF0ZWQpIChHT2JqZWN0ICpzZWxmLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0T2JqZWN0ICpvYmplY3QpOwotI2RlZmluZSBHU1RfVFJBQ0VSX09CSkVDVF9DUkVBVEVEKG9iamVjdCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX09CSkVDVF9DUkVBVEVEKSwgXAotICAgIEdzdFRyYWNlckhvb2tPYmplY3RDcmVhdGVkLCAoR1NUX1RSQUNFUl9BUkdTLCBvYmplY3QpKTsgXAotfUdfU1RNVF9FTkQKLQotLyoqCi0gKiBHc3RUcmFjZXJIb29rT2JqZWN0RGVzdHJveWVkOgotICogQHNlbGY6IHRoZSB0cmFjZXIgaW5zdGFuY2UKLSAqIEB0czogdGhlIGN1cnJlbnQgdGltZXN0YW1wCi0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0IGJlaW5nIGRlc3Ryb3llZAotICoKLSAqIEhvb2sgY2FsbGVkIHdoZW4gYSAjR3N0T2JqZWN0IGlzIGJlaW5nIGRlc3Ryb3llZCBuYW1lZAotICogIm9iamVjdC1kZXN0cm95ZWQiLgotICovCi10eXBlZGVmIHZvaWQgKCpHc3RUcmFjZXJIb29rT2JqZWN0RGVzdHJveWVkKSAoR09iamVjdCAqc2VsZiwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIEdzdE9iamVjdCAqb2JqZWN0KTsKLSNkZWZpbmUgR1NUX1RSQUNFUl9PQkpFQ1RfREVTVFJPWUVEKG9iamVjdCkgR19TVE1UX1NUQVJUeyBcCi0gIEdTVF9UUkFDRVJfRElTUEFUQ0goR1NUX1RSQUNFUl9RVUFSSyhIT09LX09CSkVDVF9ERVNUUk9ZRUQpLCBcCi0gICAgR3N0VHJhY2VySG9va09iamVjdERlc3Ryb3llZCwgKEdTVF9UUkFDRVJfQVJHUywgb2JqZWN0KSk7IFwKLX1HX1NUTVRfRU5ECi0KLQotI2Vsc2UgLyogIUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1MgKi8KLQotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9QVVNIX1BSRShwYWQsIGJ1ZmZlcikKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfUFVTSF9QT1NUKHBhZCwgcmVzKQotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9QVVNIX0xJU1RfUFJFKHBhZCwgbGlzdCkKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfUFVTSF9MSVNUX1BPU1QocGFkLCByZXMpCi0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX1BVTExfUkFOR0VfUFJFKHBhZCwgb2Zmc2V0LCBzaXplKQotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9QVUxMX1JBTkdFX1BPU1QocGFkLCBidWZmZXIsIHJlcykKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfUFVTSF9FVkVOVF9QUkUocGFkLCBldmVudCkKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfUFVTSF9FVkVOVF9QT1NUKHBhZCwgcmVzKQotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9RVUVSWV9QUkUocGFkLCBxdWVyeSkKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfUVVFUllfUE9TVChwYWQsIHF1ZXJ5LCByZXMpCi0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9QT1NUX01FU1NBR0VfUFJFKGVsZW1lbnQsIG1lc3NhZ2UpCi0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9QT1NUX01FU1NBR0VfUE9TVChlbGVtZW50LCByZXMpCi0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9RVUVSWV9QUkUoZWxlbWVudCwgcXVlcnkpCi0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9RVUVSWV9QT1NUKGVsZW1lbnQsIHF1ZXJ5LCByZXMpCi0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9ORVcoZWxlbWVudCkKLSNkZWZpbmUgR1NUX1RSQUNFUl9FTEVNRU5UX0FERF9QQUQoZWxlbWVudCwgcGFkKQotI2RlZmluZSBHU1RfVFJBQ0VSX0VMRU1FTlRfUkVNT1ZFX1BBRChlbGVtZW50LCBwYWQpCi0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9DSEFOR0VfU1RBVEVfUFJFKGVsZW1lbnQsIHRyYW5zaXRpb24pCi0jZGVmaW5lIEdTVF9UUkFDRVJfRUxFTUVOVF9DSEFOR0VfU1RBVEVfUE9TVChlbGVtZW50LCB0cmFuc2l0aW9uLCByZXMpCi0jZGVmaW5lIEdTVF9UUkFDRVJfQklOX0FERF9QUkUoYmluLCBlbGVtZW50KQotI2RlZmluZSBHU1RfVFJBQ0VSX0JJTl9BRERfUE9TVChiaW4sIGVsZW1lbnQsIHJlcykKLSNkZWZpbmUgR1NUX1RSQUNFUl9CSU5fUkVNT1ZFX1BSRShiaW4sIGVsZW1lbnQpCi0jZGVmaW5lIEdTVF9UUkFDRVJfQklOX1JFTU9WRV9QT1NUKGJpbiwgcmVzKQotI2RlZmluZSBHU1RfVFJBQ0VSX1BBRF9MSU5LX1BSRShzcmNwYWQsIHNpbmtwYWQpCi0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX0xJTktfUE9TVChzcmNwYWQsIHNpbmtwYWQsIHJlcykKLSNkZWZpbmUgR1NUX1RSQUNFUl9QQURfVU5MSU5LX1BSRShzcmNwYWQsIHNpbmtwYWQpCi0jZGVmaW5lIEdTVF9UUkFDRVJfUEFEX1VOTElOS19QT1NUKHNyY3BhZCwgc2lua3BhZCwgcmVzKQotI2RlZmluZSBHU1RfVFJBQ0VSX01JTklfT0JKRUNUX0NSRUFURUQob2JqZWN0KQotI2RlZmluZSBHU1RfVFJBQ0VSX01JTklfT0JKRUNUX0RFU1RST1lFRChvYmplY3QpCi0jZGVmaW5lIEdTVF9UUkFDRVJfT0JKRUNUX0NSRUFURUQob2JqZWN0KQotI2RlZmluZSBHU1RfVFJBQ0VSX09CSkVDVF9ERVNUUk9ZRUQob2JqZWN0KQotCi0jZW5kaWYgLyogR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LUyAqLwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVFJBQ0VSX1VUSUxTX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvZ3N0dHlwZWZpbmQuYyBiL2dzdC9nc3R0eXBlZmluZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGNhOTZmLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0eXBlZmluZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotICoKLSAqIGdzdHR5cGVmaW5kLmM6IHR5cGVmaW5kaW5nIHN1YnN5c3RlbQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3R0eXBlZmluZAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBTdHJlYW0gdHlwZSBkZXRlY3Rpb24KLSAqCi0gKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbGxvdyB5b3UgdG8gZGV0ZWN0IHRoZSBtZWRpYSB0eXBlIG9mIGFuIHVua25vd24KLSAqIHN0cmVhbS4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3RpbmZvLmgiCi0jaW5jbHVkZSAiZ3N0dHlwZWZpbmQuaCIKLSNpbmNsdWRlICJnc3RyZWdpc3RyeS5oIgotI2luY2x1ZGUgImdzdHR5cGVmaW5kZmFjdG9yeS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOICh0eXBlX2ZpbmRfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgdHlwZV9maW5kX2RlYnVnCi0KLUdfREVGSU5FX1BPSU5URVJfVFlQRSAoR3N0VHlwZUZpbmQsIGdzdF90eXBlX2ZpbmQpOwotCi0vKioKLSAqIGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXI6Ci0gKiBAcGx1Z2luOiAoYWxsb3ctbm9uZSk6IEEgI0dzdFBsdWdpbiwgb3IgJU5VTEwgZm9yIGEgc3RhdGljIHR5cGVmaW5kIGZ1bmN0aW9uCi0gKiBAbmFtZTogVGhlIG5hbWUgZm9yIHJlZ2lzdGVyaW5nCi0gKiBAcmFuazogVGhlIHJhbmsgKG9yIGltcG9ydGFuY2UpIG9mIHRoaXMgdHlwZWZpbmQgZnVuY3Rpb24KLSAqIEBmdW5jOiBUaGUgI0dzdFR5cGVGaW5kRnVuY3Rpb24gdG8gdXNlCi0gKiBAZXh0ZW5zaW9uczogKGFsbG93LW5vbmUpOiBPcHRpb25hbCBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHRlbnNpb25zCi0gKiAgICAgdGhhdCBjb3VsZCBiZWxvbmcgdG8gdGhpcyB0eXBlCi0gKiBAcG9zc2libGVfY2FwczogT3B0aW9uYWxseSB0aGUgY2FwcyB0aGF0IGNvdWxkIGJlIHJldHVybmVkIHdoZW4gdHlwZWZpbmRpbmcKLSAqICAgICAgICAgICAgICAgICBzdWNjZWVkcwotICogQGRhdGE6IE9wdGlvbmFsIHVzZXIgZGF0YS4gVGhpcyB1c2VyIGRhdGEgbXVzdCBiZSBhdmFpbGFibGUgdW50aWwgdGhlIHBsdWdpbgotICogICAgICAgIGlzIHVubG9hZGVkLgotICogQGRhdGFfbm90aWZ5OiBhICNHRGVzdHJveU5vdGlmeSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIEBkYXRhIHdoZW4gdGhlIHBsdWdpbgotICogICAgICAgIGlzIHVubG9hZGVkLgotICoKLSAqIFJlZ2lzdGVycyBhIG5ldyB0eXBlZmluZCBmdW5jdGlvbiB0byBiZSB1c2VkIGZvciB0eXBlZmluZGluZy4gQWZ0ZXIKLSAqIHJlZ2lzdGVyaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhdmFpbGFibGUgZm9yIHR5cGVmaW5kaW5nLgotICogVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGR1cmluZyBhbiBlbGVtZW50J3MgcGx1Z2luIGluaXRpYWxpemF0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIG9uIHN1Y2Nlc3MsICVGQUxTRSBvdGhlcndpc2UKLSAqLwotZ2Jvb2xlYW4KLWdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIgKEdzdFBsdWdpbiAqIHBsdWdpbiwgY29uc3QgZ2NoYXIgKiBuYW1lLCBndWludCByYW5rLAotICAgIEdzdFR5cGVGaW5kRnVuY3Rpb24gZnVuYywgY29uc3QgZ2NoYXIgKiBleHRlbnNpb25zLAotICAgIEdzdENhcHMgKiBwb3NzaWJsZV9jYXBzLCBncG9pbnRlciBkYXRhLCBHRGVzdHJveU5vdGlmeSBkYXRhX25vdGlmeSkKLXsKLSAgR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuYW1lICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfSU5GTyAoInJlZ2lzdGVyaW5nIHR5cGVmaW5kIGZ1bmN0aW9uIGZvciAlcyIsIG5hbWUpOwotCi0gIGZhY3RvcnkgPSBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSwgMCwgTlVMTCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGZhY3RvcnksICJ1c2luZyBuZXcgdHlwZWZpbmQgZmFjdG9yeSBmb3IgJXMiLCBuYW1lKTsKLQotICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X25hbWUgKEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KSwgbmFtZSk7Ci0gIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfcmFuayAoR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLCByYW5rKTsKLQotICBpZiAoZXh0ZW5zaW9ucykKLSAgICBmYWN0b3J5LT5leHRlbnNpb25zID0gZ19zdHJzcGxpdCAoZXh0ZW5zaW9ucywgIiwiLCAtMSk7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJmZhY3RvcnktPmNhcHMsIHBvc3NpYmxlX2NhcHMpOwotICBmYWN0b3J5LT5mdW5jdGlvbiA9IGZ1bmM7Ci0gIGZhY3RvcnktPnVzZXJfZGF0YSA9IGRhdGE7Ci0gIGZhY3RvcnktPnVzZXJfZGF0YV9ub3RpZnkgPSBkYXRhX25vdGlmeTsKLSAgaWYgKHBsdWdpbiAmJiBwbHVnaW4tPmRlc2MubmFtZSkgewotICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KS0+cGx1Z2luX25hbWUgPSBwbHVnaW4tPmRlc2MubmFtZTsgLyogaW50ZXJuZWQgc3RyaW5nICovCi0gICAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5wbHVnaW4gPSBwbHVnaW47Ci0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlciAoKEdPYmplY3QgKikgcGx1Z2luLAotICAgICAgICAoZ3BvaW50ZXIgKikgJiBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5wbHVnaW5fbmFtZSA9ICJOVUxMIjsKLSAgICBHU1RfUExVR0lOX0ZFQVRVUkVfQ0FTVCAoZmFjdG9yeSktPnBsdWdpbiA9IE5VTEw7Ci0gIH0KLSAgR1NUX1BMVUdJTl9GRUFUVVJFX0NBU1QgKGZhY3RvcnkpLT5sb2FkZWQgPSBUUlVFOwotCi0gIGdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZSAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgIEdTVF9QTFVHSU5fRkVBVFVSRV9DQVNUIChmYWN0b3J5KSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKiogdHlwZWZpbmQgZnVuY3Rpb24gaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogZ3N0X3R5cGVfZmluZF9wZWVrOgotICogQGZpbmQ6IFRoZSAjR3N0VHlwZUZpbmQgb2JqZWN0IHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGgKLSAqIEBvZmZzZXQ6IFRoZSBvZmZzZXQKLSAqIEBzaXplOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybgotICoKLSAqIFJldHVybnMgdGhlIEBzaXplIGJ5dGVzIG9mIHRoZSBzdHJlYW0gdG8gaWRlbnRpZnkgYmVnaW5uaW5nIGF0IG9mZnNldC4gSWYKLSAqIG9mZnNldCBpcyBhIHBvc2l0aXZlIG51bWJlciwgdGhlIG9mZnNldCBpcyByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQotICogc3RyZWFtLCBpZiBvZmZzZXQgaXMgYSBuZWdhdGl2ZSBudW1iZXIgdGhlIG9mZnNldCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mCi0gKiB0aGUgc3RyZWFtLiBUaGUgcmV0dXJuZWQgbWVtb3J5IGlzIHZhbGlkIHVudGlsIHRoZSB0eXBlZmluZGluZyBmdW5jdGlvbgotICogcmV0dXJucyBhbmQgbXVzdCBub3QgYmUgZnJlZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSkgKG51bGxhYmxlKTogdGhlCi0gKiAgICAgcmVxdWVzdGVkIGRhdGEsIG9yICVOVUxMIGlmIHRoYXQgZGF0YSBpcyBub3QgYXZhaWxhYmxlLgotICovCi1jb25zdCBndWludDggKgotZ3N0X3R5cGVfZmluZF9wZWVrIChHc3RUeXBlRmluZCAqIGZpbmQsIGdpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaW5kLT5wZWVrICE9IE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBmaW5kLT5wZWVrIChmaW5kLT5kYXRhLCBvZmZzZXQsIHNpemUpOwotfQotCi0vKioKLSAqIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdDoKLSAqIEBmaW5kOiBUaGUgI0dzdFR5cGVGaW5kIG9iamVjdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoCi0gKiBAcHJvYmFiaWxpdHk6IFRoZSBwcm9iYWJpbGl0eSBpbiBwZXJjZW50IHRoYXQgdGhlIHN1Z2dlc3Rpb24gaXMgcmlnaHQKLSAqIEBjYXBzOiBUaGUgZml4ZWQgI0dzdENhcHMgdG8gc3VnZ2VzdAotICoKLSAqIElmIGEgI0dzdFR5cGVGaW5kRnVuY3Rpb24gY2FsbHMgdGhpcyBmdW5jdGlvbiBpdCBzdWdnZXN0cyB0aGUgY2FwcyB3aXRoIHRoZQotICogZ2l2ZW4gcHJvYmFiaWxpdHkuIEEgI0dzdFR5cGVGaW5kRnVuY3Rpb24gbWF5IHN1cHBseSBkaWZmZXJlbnQgc3VnZ2VzdGlvbnMKLSAqIGluIG9uZSBjYWxsLgotICogSXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGUgI0dzdFR5cGVGaW5kRnVuY3Rpb24gdG8gaW50ZXJwcmV0IHRoZXNlIHZhbHVlcy4KLSAqLwotdm9pZAotZ3N0X3R5cGVfZmluZF9zdWdnZXN0IChHc3RUeXBlRmluZCAqIGZpbmQsIGd1aW50IHByb2JhYmlsaXR5LCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmluZC0+c3VnZ2VzdCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAocHJvYmFiaWxpdHkgPD0gMTAwKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY2FwcyAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKTsKLQotICBmaW5kLT5zdWdnZXN0IChmaW5kLT5kYXRhLCBwcm9iYWJpbGl0eSwgY2Fwcyk7Ci19Ci0KLS8qKgotICogZ3N0X3R5cGVfZmluZF9zdWdnZXN0X3NpbXBsZToKLSAqIEBmaW5kOiBUaGUgI0dzdFR5cGVGaW5kIG9iamVjdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoCi0gKiBAcHJvYmFiaWxpdHk6IFRoZSBwcm9iYWJpbGl0eSBpbiBwZXJjZW50IHRoYXQgdGhlIHN1Z2dlc3Rpb24gaXMgcmlnaHQKLSAqIEBtZWRpYV90eXBlOiB0aGUgbWVkaWEgdHlwZSBvZiB0aGUgc3VnZ2VzdGVkIGNhcHMKLSAqIEBmaWVsZG5hbWU6IChhbGxvdy1ub25lKTogZmlyc3QgZmllbGQgb2YgdGhlIHN1Z2dlc3RlZCBjYXBzLCBvciAlTlVMTAotICogQC4uLjogYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIHN1Z2dlc3RlZCBjYXBzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKLSAqICAgICBhcmd1bWVudHMgcGFzc2VkIHRvIGdzdF9zdHJ1Y3R1cmVfbmV3KCkgKGllLiB0cmlwbGV0cyBvZiBmaWVsZCBuYW1lLAotICogICAgIGZpZWxkIEdUeXBlIGFuZCBmaWVsZCB2YWx1ZSkKLSAqCi0gKiBJZiBhICNHc3RUeXBlRmluZEZ1bmN0aW9uIGNhbGxzIHRoaXMgZnVuY3Rpb24gaXQgc3VnZ2VzdHMgdGhlIGNhcHMgd2l0aCB0aGUKLSAqIGdpdmVuIHByb2JhYmlsaXR5LiBBICNHc3RUeXBlRmluZEZ1bmN0aW9uIG1heSBzdXBwbHkgZGlmZmVyZW50IHN1Z2dlc3Rpb25zCi0gKiBpbiBvbmUgY2FsbC4gSXQgaXMgdXAgdG8gdGhlIGNhbGxlciBvZiB0aGUgI0dzdFR5cGVGaW5kRnVuY3Rpb24gdG8gaW50ZXJwcmV0Ci0gKiB0aGVzZSB2YWx1ZXMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdCgpLCBvbmx5IHRoYXQgaW5zdGVhZCBvZgotICogcGFzc2luZyBhICNHc3RDYXBzIGFyZ3VtZW50IHlvdSBjYW4gY3JlYXRlIHRoZSBjYXBzIG9uIHRoZSBmbHkgaW4gdGhlIHNhbWUKLSAqIHdheSBhcyB5b3UgY2FuIHdpdGggZ3N0X2NhcHNfbmV3X3NpbXBsZSgpLgotICoKLSAqIE1ha2Ugc3VyZSB5b3UgdGVybWluYXRlIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyB3aXRoIGEgJU5VTEwgYXJndW1lbnQgYW5kIHRoYXQKLSAqIHRoZSB2YWx1ZXMgcGFzc2VkIGhhdmUgdGhlIGNvcnJlY3QgdHlwZSAoaW4gdGVybXMgb2Ygd2lkdGggaW4gYnl0ZXMgd2hlbgotICogcGFzc2VkIHRvIHRoZSB2YXJhcmcgZnVuY3Rpb24gLSB0aGlzIGFwcGxpZXMgcGFydGljdWxhcmx5IHRvIGdkb3VibGUgYW5kCi0gKiBndWludDY0IGFyZ3VtZW50cykuCi0gKi8KLXZvaWQKLWdzdF90eXBlX2ZpbmRfc3VnZ2VzdF9zaW1wbGUgKEdzdFR5cGVGaW5kICogZmluZCwgZ3VpbnQgcHJvYmFiaWxpdHksCi0gICAgY29uc3QgY2hhciAqbWVkaWFfdHlwZSwgY29uc3QgY2hhciAqZmllbGRuYW1lLCAuLi4pCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICB2YV9saXN0IHZhcl9hcmdzOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZpbmQtPnN1Z2dlc3QgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHByb2JhYmlsaXR5IDw9IDEwMCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1lZGlhX3R5cGUgIT0gTlVMTCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLQotICB2YV9zdGFydCAodmFyX2FyZ3MsIGZpZWxkbmFtZSk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdCAobWVkaWFfdHlwZSwgZmllbGRuYW1lLCB2YXJfYXJncyk7Ci0gIHZhX2VuZCAodmFyX2FyZ3MpOwotCi0gIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMsIHN0cnVjdHVyZSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSk7Ci0KLSAgZmluZC0+c3VnZ2VzdCAoZmluZC0+ZGF0YSwgcHJvYmFiaWxpdHksIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLS8qKgotICogZ3N0X3R5cGVfZmluZF9nZXRfbGVuZ3RoOgotICogQGZpbmQ6IFRoZSAjR3N0VHlwZUZpbmQgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aAotICoKLSAqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHN0cmVhbS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHN0cmVhbSwgb3IgMCBpZiBpdCBpcyBub3QgYXZhaWxhYmxlLgotICovCi1ndWludDY0Ci1nc3RfdHlwZV9maW5kX2dldF9sZW5ndGggKEdzdFR5cGVGaW5kICogZmluZCkKLXsKLSAgaWYgKGZpbmQtPmdldF9sZW5ndGggPT0gTlVMTCkKLSAgICByZXR1cm4gMDsKLQotICByZXR1cm4gZmluZC0+Z2V0X2xlbmd0aCAoZmluZC0+ZGF0YSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0dHlwZWZpbmQuaCBiL2dzdC9nc3R0eXBlZmluZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDMxYjFjLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3R0eXBlZmluZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDAzIEJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotICoKLSAqIGdzdHR5cGVmaW5kLmg6IHR5cGVmaW5kaW5nIHN1YnN5c3RlbQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9UWVBFX0ZJTkRfSF9fCi0jZGVmaW5lIF9fR1NUX1RZUEVfRklORF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3RjYXBzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbi5oPgotI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9UWVBFX0ZJTkQgIChnc3RfdHlwZV9maW5kX2dldF90eXBlKCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUeXBlRmluZCBHc3RUeXBlRmluZDsKLQotLyoqCi0gKiBHc3RUeXBlRmluZEZ1bmN0aW9uOgotICogQGZpbmQ6IEEgI0dzdFR5cGVGaW5kIHN0cnVjdHVyZQotICogQHVzZXJfZGF0YTogb3B0aW9uYWwgZGF0YSB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbgotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBieSB0eXBlZmluZGluZy4KLSAqLwotdHlwZWRlZiB2b2lkICgqIEdzdFR5cGVGaW5kRnVuY3Rpb24pIChHc3RUeXBlRmluZCAqZmluZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RUeXBlRmluZFByb2JhYmlsaXR5OgotICogQEdTVF9UWVBFX0ZJTkRfTk9ORTogdHlwZSB1bmRldGVjdGVkLgotICogQEdTVF9UWVBFX0ZJTkRfTUlOSU1VTTogdW5saWtlbHkgdHlwZWZpbmQuCi0gKiBAR1NUX1RZUEVfRklORF9QT1NTSUJMRTogcG9zc2libGUgdHlwZSBkZXRlY3RlZC4KLSAqIEBHU1RfVFlQRV9GSU5EX0xJS0VMWTogbGlrZWx5IGEgdHlwZSB3YXMgZGV0ZWN0ZWQuCi0gKiBAR1NUX1RZUEVfRklORF9ORUFSTFlfQ0VSVEFJTjogbmVhcmx5IGNlcnRhaW4gdGhhdCBhIHR5cGUgd2FzIGRldGVjdGVkLgotICogQEdTVF9UWVBFX0ZJTkRfTUFYSU1VTTogdmVyeSBjZXJ0YWluIGEgdHlwZSB3YXMgZGV0ZWN0ZWQuCi0gKgotICogVGhlIHByb2JhYmlsaXR5IG9mIHRoZSB0eXBlZmluZCBmdW5jdGlvbi4gSGlnaGVyIHZhbHVlcyBoYXZlIG1vcmUgY2VydGFpbnR5Ci0gKiBpbiBkb2luZyBhIHJlbGlhYmxlIHR5cGVmaW5kLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfVFlQRV9GSU5EX05PTkUgPSAwLAotICBHU1RfVFlQRV9GSU5EX01JTklNVU0gPSAxLAotICBHU1RfVFlQRV9GSU5EX1BPU1NJQkxFID0gNTAsCi0gIEdTVF9UWVBFX0ZJTkRfTElLRUxZID0gODAsCi0gIEdTVF9UWVBFX0ZJTkRfTkVBUkxZX0NFUlRBSU4gPSA5OSwKLSAgR1NUX1RZUEVfRklORF9NQVhJTVVNID0gMTAwCi19IEdzdFR5cGVGaW5kUHJvYmFiaWxpdHk7Ci0KLS8qKgotICogR3N0VHlwZUZpbmQ6Ci0gKiBAcGVlazogTWV0aG9kIHRvIHBlZWsgZGF0YS4KLSAqIEBzdWdnZXN0OiBNZXRob2QgdG8gc3VnZ2VzdCAjR3N0Q2FwcyB3aXRoIGEgZ2l2ZW4gcHJvYmFiaWxpdHkuCi0gKiBAZGF0YTogVGhlIGRhdGEgdXNlZCBieSB0aGUgY2FsbGVyIG9mIHRoZSB0eXBlZmluZGluZyBmdW5jdGlvbi4KLSAqIEBnZXRfbGVuZ3RoOiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgY3VycmVudCBkYXRhLgotICoKLSAqIE9iamVjdCB0aGF0IHN0b3JlcyB0eXBlZmluZCBjYWxsYmFja3MuIFRvIHVzZSB3aXRoICNHc3RUeXBlRmluZEZhY3RvcnkuCi0gKi8KLXN0cnVjdCBfR3N0VHlwZUZpbmQgewotICAvKiBwcml2YXRlIHRvIHRoZSBjYWxsZXIgb2YgdGhlIHR5cGVmaW5kIGZ1bmN0aW9uICovCi0gIGNvbnN0IGd1aW50OCAqICAoKiBwZWVrKSAgICAgICAoZ3BvaW50ZXIgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAgICAgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgc2l6ZSk7Ci0KLSAgdm9pZCAgICAgICAgICAgICgqIHN1Z2dlc3QpICAgIChncG9pbnRlciAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICBwcm9iYWJpbGl0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgICAgKmNhcHMpOwotCi0gIGdwb2ludGVyICAgICAgICAgZGF0YTsKLQotICAvKiBvcHRpb25hbCAqLwotICBndWludDY0ICAgICAgICAgKCogZ2V0X2xlbmd0aCkgKGdwb2ludGVyIGRhdGEpOwotCi0gIC8qIDxwcml2YXRlPiAqLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlICAgICBnc3RfdHlwZV9maW5kX2dldF90eXBlICAgKHZvaWQpOwotCi0vKiB0eXBlZmluZCBmdW5jdGlvbiBpbnRlcmZhY2UgKi8KLWNvbnN0IGd1aW50OCAqICBnc3RfdHlwZV9maW5kX3BlZWsgICAgICAgKEdzdFR5cGVGaW5kICAgKiBmaW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICBzaXplKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdCAgICAoR3N0VHlwZUZpbmQgICAqIGZpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgcHJvYmFiaWxpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgICogY2Fwcyk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlIChHc3RUeXBlRmluZCAqIGZpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICBwcm9iYWJpbGl0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAqIG1lZGlhX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgKiBmaWVsZG5hbWUsIC4uLik7Ci0KLWd1aW50NjQgICBnc3RfdHlwZV9maW5kX2dldF9sZW5ndGggKEdzdFR5cGVGaW5kICAgKiBmaW5kKTsKLQotLyogcmVnaXN0cmF0aW9uIGludGVyZmFjZSAqLwotZ2Jvb2xlYW4gIGdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIgICAoR3N0UGx1Z2luICAgICAgICAgICAgKiBwbHVnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgIHJhbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUeXBlRmluZEZ1bmN0aW9uICAgIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAqIGV4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgICAgICAgICAqIHBvc3NpYmxlX2NhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgICAgIGRhdGFfbm90aWZ5KTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RZUEVfRklORF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nc3R0eXBlZmluZGZhY3RvcnkuYyBiL2dzdC9nc3R0eXBlZmluZGZhY3RvcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhMTU3My4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0gKgotICogZ3N0dHlwZWZpbmRmYWN0b3J5LmM6IHR5cGVmaW5kaW5nIHN1YnN5c3RlbQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3R0eXBlZmluZGZhY3RvcnkKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogSW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXJlZCB0eXBlZmluZCBmdW5jdGlvbnMKLSAqCi0gKiBUaGVzZSBmdW5jdGlvbnMgYWxsb3cgcXVlcnlpbmcgaW5mb3JtYXRpb25zIGFib3V0IHJlZ2lzdGVyZWQgdHlwZWZpbmQKLSAqIGZ1bmN0aW9ucy4gSG93IHRvIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlc2UgZnVuY3Rpb25zIGlzIGRlc2NyaWJlZCBpbgotICogdGhlIHNlY3Rpb24gPGxpbmsgbGlua2VuZD0iZ3N0cmVhbWVyLVdyaXRpbmctdHlwZWZpbmQtZnVuY3Rpb25zIj4KLSAqICJXcml0aW5nIHR5cGVmaW5kIGZ1bmN0aW9ucyI8L2xpbms+LgotICoKLSAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gd3JpdGUgYSB2ZXJ5IHNpbXBsZSB0eXBlZmluZGVyIHRoYXQKLSAqIGlkZW50aWZpZXMgdGhlIGdpdmVuIGRhdGEuIFlvdSBjYW4gZ2V0IHF1aXRlIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgdGhhbgotICogdGhhdCB0aG91Z2guCi0gKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgotICogICB0eXBlZGVmIHN0cnVjdCB7Ci0gKiAgICAgZ3VpbnQ4ICpkYXRhOwotICogICAgIGd1aW50IHNpemU7Ci0gKiAgICAgZ3VpbnQgcHJvYmFiaWxpdHk7Ci0gKiAgICAgR3N0Q2FwcyAqZGF0YTsKLSAqICAgfSBNeVR5cGVGaW5kOwotICogICBzdGF0aWMgdm9pZAotICogICBteV9wZWVrIChncG9pbnRlciBkYXRhLCBnaW50NjQgb2Zmc2V0LCBndWludCBzaXplKQotICogICB7Ci0gKiAgICAgTXlUeXBlRmluZCAqZmluZCA9IChNeVR5cGVGaW5kICopIGRhdGE7Ci0gKiAgICAgaWYgKG9mZnNldCAmZ3Q7PSAwICZhbXA7JmFtcDsgb2Zmc2V0ICsgc2l6ZSAmbHQ7PSBmaW5kLT5zaXplKSB7Ci0gKiAgICAgICByZXR1cm4gZmluZC0+ZGF0YSArIG9mZnNldDsKLSAqICAgICB9Ci0gKiAgICAgcmV0dXJuIE5VTEw7Ci0gKiAgIH0KLSAqICAgc3RhdGljIHZvaWQKLSAqICAgbXlfc3VnZ2VzdCAoZ3BvaW50ZXIgZGF0YSwgZ3VpbnQgcHJvYmFiaWxpdHksIEdzdENhcHMgKmNhcHMpCi0gKiAgIHsKLSAqICAgICBNeVR5cGVGaW5kICpmaW5kID0gKE15VHlwZUZpbmQgKikgZGF0YTsKLSAqICAgICBpZiAocHJvYmFiaWxpdHkgJmd0OyBmaW5kLT5wcm9iYWJpbGl0eSkgewotICogICAgICAgZmluZC0+cHJvYmFiaWxpdHkgPSBwcm9iYWJpbGl0eTsKLSAqICAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZhbXA7ZmluZC0+Y2FwcywgY2Fwcyk7Ci0gKiAgICAgfQotICogICB9Ci0gKiAgIHN0YXRpYyBHc3RDYXBzICoKLSAqICAgZmluZF90eXBlIChndWludDggKmRhdGEsIGd1aW50IHNpemUpCi0gKiAgIHsKLSAqICAgICBHTGlzdCAqd2FsaywgKnR5cGVfbGlzdDsKLSAqICAgICBNeVR5cGVGaW5kIGZpbmQgPSB7ZGF0YSwgc2l6ZSwgMCwgTlVMTH07Ci0gKiAgICAgR3N0VHlwZUZpbmQgZ3N0X2ZpbmQgPSB7bXlfcGVlaywgbXlfc3VnZ2VzdCwgJmFtcDtmaW5kLCB9OwotICogICAgIHdhbGsgPSB0eXBlX2xpc3QgPSBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QgKCk7Ci0gKiAgICAgd2hpbGUgKHdhbGspIHsKLSAqICAgICAgIEdzdFR5cGVGaW5kRmFjdG9yeSAqZmFjdG9yeSA9IEdTVF9UWVBFX0ZJTkRfRkFDVE9SWSAod2Fsay0+ZGF0YSk7Ci0gKiAgICAgICB3YWxrID0gZ19saXN0X25leHQgKHdhbGspCi0gKiAgICAgICBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbiAoZmFjdG9yeSwgJmFtcDtnc3RfZmluZCk7Ci0gKiAgICAgfQotICogICAgIGdfbGlzdF9mcmVlICh0eXBlX2xpc3QpOwotICogICAgIHJldHVybiBmaW5kLmNhcHM7Ci0gKiAgIH07Ci0gKiBdfAotICovCi0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdzdGluZm8uaCIKLSNpbmNsdWRlICJnc3R0eXBlZmluZC5oIgotI2luY2x1ZGUgImdzdHR5cGVmaW5kZmFjdG9yeS5oIgotI2luY2x1ZGUgImdzdHJlZ2lzdHJ5LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWSAodHlwZV9maW5kX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHR5cGVfZmluZF9kZWJ1ZwotCi1zdGF0aWMgdm9pZCBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAoteyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh0eXBlX2ZpbmRfZGVidWcsICJHU1RfVFlQRUZJTkQiLCBcCi0gICAgICBHU1RfREVCVUdfRkdfR1JFRU4sICJ0eXBlZmluZGluZyBzdWJzeXN0ZW0iKTsgXAotfQotCi0jZGVmaW5lIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VHlwZUZpbmRGYWN0b3J5LCBnc3RfdHlwZV9maW5kX2ZhY3RvcnksCi0gICAgR1NUX1RZUEVfUExVR0lOX0ZFQVRVUkUsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQKLWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jbGFzc19pbml0IChHc3RUeXBlRmluZEZhY3RvcnlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2Rpc3Bvc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfaW5pdCAoR3N0VHlwZUZpbmRGYWN0b3J5ICogZmFjdG9yeSkKLXsKLSAgZmFjdG9yeS0+dXNlcl9kYXRhID0gZmFjdG9yeTsKLSAgZmFjdG9yeS0+dXNlcl9kYXRhX25vdGlmeSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChvYmplY3QpOwotCi0gIGlmIChmYWN0b3J5LT5jYXBzKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZhY3RvcnktPmNhcHMpOwotICAgIGZhY3RvcnktPmNhcHMgPSBOVUxMOwotICB9Ci0gIGlmIChmYWN0b3J5LT5leHRlbnNpb25zKSB7Ci0gICAgZ19zdHJmcmVldiAoZmFjdG9yeS0+ZXh0ZW5zaW9ucyk7Ci0gICAgZmFjdG9yeS0+ZXh0ZW5zaW9ucyA9IE5VTEw7Ci0gIH0KLSAgaWYgKGZhY3RvcnktPnVzZXJfZGF0YV9ub3RpZnkgJiYgZmFjdG9yeS0+dXNlcl9kYXRhKSB7Ci0gICAgZmFjdG9yeS0+dXNlcl9kYXRhX25vdGlmeSAoZmFjdG9yeS0+dXNlcl9kYXRhKTsKLSAgICBmYWN0b3J5LT51c2VyX2RhdGEgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLS8qKgotICogZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0OgotICoKLSAqIEdldHMgdGhlIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdHlwZWZpbmQgZmFjdG9yaWVzLiBZb3UgbXVzdCBmcmVlIHRoZQotICogbGlzdCB1c2luZyBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKCkuCi0gKgotICogVGhlIHJldHVybmVkIGZhY3RvcmllcyBhcmUgc29ydGVkIGJ5IGhpZ2hlc3QgcmFuayBmaXJzdCwgYW5kIHRoZW4gYnkKLSAqIGZhY3RvcnkgbmFtZS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgR3N0LlR5cGVGaW5kRmFjdG9yeSk6IHRoZSBsaXN0IG9mIGFsbAotICogICAgIHJlZ2lzdGVyZWQgI0dzdFR5cGVGaW5kRmFjdG9yeS4KLSAqLwotR0xpc3QgKgotZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICh2b2lkKQotewotICByZXR1cm4gZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3QgKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSk7Ci19Ci0KLS8qKgotICogZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzOgotICogQGZhY3Rvcnk6IEEgI0dzdFR5cGVGaW5kRmFjdG9yeQotICoKLSAqIEdldHMgdGhlICNHc3RDYXBzIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGVmaW5kIGZhY3RvcnkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdENhcHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmFjdG9yeQotICovCi1Hc3RDYXBzICoKLWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2FwcyAoR3N0VHlwZUZpbmRGYWN0b3J5ICogZmFjdG9yeSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UWVBFX0ZJTkRfRkFDVE9SWSAoZmFjdG9yeSksIE5VTEwpOwotCi0gIHJldHVybiBmYWN0b3J5LT5jYXBzOwotfQotCi0vKioKLSAqIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9uczoKLSAqIEBmYWN0b3J5OiBBICNHc3RUeXBlRmluZEZhY3RvcnkKLSAqCi0gKiBHZXRzIHRoZSBleHRlbnNpb25zIGFzc29jaWF0ZWQgd2l0aCBhICNHc3RUeXBlRmluZEZhY3RvcnkuIFRoZSByZXR1cm5lZAotICogYXJyYXkgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBJZiB5b3UgbmVlZCB0byBjaGFuZ2Ugc3R1ZmYgaW4gaXQsIHlvdSBzaG91bGQKLSAqIGNvcHkgaXQgdXNpbmcgZ19zdHJkdXB2KCkuICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gJU5VTEwgdG8gaW5kaWNhdGUKLSAqIGEgMC1sZW5ndGggbGlzdC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAoZWxlbWVudC10eXBlIHV0ZjgpIChudWxsYWJsZSk6Ci0gKiAgICAgYSAlTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmFjdG9yeQotICovCi1jb25zdCBnY2hhciAqY29uc3QgKgotZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zIChHc3RUeXBlRmluZEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmYWN0b3J5KSwgTlVMTCk7Ci0KLSAgcmV0dXJuIChjb25zdCBnY2hhciAqIGNvbnN0ICopIGZhY3RvcnktPmV4dGVuc2lvbnM7Ci19Ci0KLS8qKgotICogZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2NhbGxfZnVuY3Rpb246Ci0gKiBAZmFjdG9yeTogQSAjR3N0VHlwZUZpbmRGYWN0b3J5Ci0gKiBAZmluZDogKHRyYW5zZmVyIG5vbmUpOiBhIHByb3Blcmx5IHNldHVwICNHc3RUeXBlRmluZCBlbnRyeS4gVGhlIGdldF9kYXRhCi0gKiAgICAgYW5kIHN1Z2dlc3RfdHlwZSBtZW1iZXJzIG11c3QgYmUgc2V0LgotICoKLSAqIENhbGxzIHRoZSAjR3N0VHlwZUZpbmRGdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBmYWN0b3J5LgotICovCi12b2lkCi1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbiAoR3N0VHlwZUZpbmRGYWN0b3J5ICogZmFjdG9yeSwKLSAgICBHc3RUeXBlRmluZCAqIGZpbmQpCi17Ci0gIEdzdFR5cGVGaW5kRmFjdG9yeSAqbmV3X2ZhY3Rvcnk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmYWN0b3J5KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZpbmQgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZpbmQtPnBlZWsgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZpbmQtPnN1Z2dlc3QgIT0gTlVMTCk7Ci0KLSAgbmV3X2ZhY3RvcnkgPQotICAgICAgR1NUX1RZUEVfRklORF9GQUNUT1JZIChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoR1NUX1BMVUdJTl9GRUFUVVJFCi0gICAgICAgICAgKGZhY3RvcnkpKSk7Ci0gIGlmIChuZXdfZmFjdG9yeSkgewotICAgIGlmIChuZXdfZmFjdG9yeS0+ZnVuY3Rpb24pCi0gICAgICBuZXdfZmFjdG9yeS0+ZnVuY3Rpb24gKGZpbmQsIG5ld19mYWN0b3J5LT51c2VyX2RhdGEpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKG5ld19mYWN0b3J5KTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9oYXNfZnVuY3Rpb246Ci0gKiBAZmFjdG9yeTogQSAjR3N0VHlwZUZpbmRGYWN0b3J5Ci0gKgotICogQ2hlY2sgd2hldGhlciB0aGUgZmFjdG9yeSBoYXMgYSB0eXBlZmluZCBmdW5jdGlvbi4gVHlwZWZpbmQgZmFjdG9yaWVzCi0gKiB3aXRob3V0IHR5cGVmaW5kIGZ1bmN0aW9ucyBhcmUgYSBsYXN0LWVmZm9ydCBmYWxsYmFjayBtZWNoYW5pc20gdG8KLSAqIGUuZy4gYXNzdW1lIGEgY2VydGFpbiBtZWRpYSB0eXBlIGJhc2VkIG9uIHRoZSBmaWxlIGV4dGVuc2lvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZmFjdG9yeSBoYXMgYSB0eXBlZmluZCBmdW5jdGlvbnMgc2V0LCBvdGhlcndpc2UgJUZBTFNFCi0gKi8KLWdib29sZWFuCi1nc3RfdHlwZV9maW5kX2ZhY3RvcnlfaGFzX2Z1bmN0aW9uIChHc3RUeXBlRmluZEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmYWN0b3J5KSwgRkFMU0UpOwotCi0gIHJldHVybiAoZmFjdG9yeS0+ZnVuY3Rpb24gIT0gTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmggYi9nc3QvZ3N0dHlwZWZpbmRmYWN0b3J5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNTczZjcuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHR5cGVmaW5kZmFjdG9yeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0gKgotICogZ3N0dHlwZWZpbmRmYWN0b3J5Lmg6IHR5cGVmaW5kaW5nIHN1YnN5c3RlbQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfVFlQRV9GSU5EX0ZBQ1RPUllfSF9fCi0jZGVmaW5lIF9fR1NUX1RZUEVfRklORF9GQUNUT1JZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGNhcHMuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHBsdWdpbmZlYXR1cmUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dHlwZWZpbmQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZICAgICAgICAgICAgICAgICAoZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9UWVBFX0ZJTkRfRkFDVE9SWShvYmopICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSwgR3N0VHlwZUZpbmRGYWN0b3J5KSkKLSNkZWZpbmUgR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1RZUEVfRklORF9GQUNUT1JZKSkKLSNkZWZpbmUgR1NUX1RZUEVfRklORF9GQUNUT1JZX0NMQVNTKGtsYXNzKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfVFlQRV9GSU5EX0ZBQ1RPUlksIEdzdFR5cGVGaW5kRmFjdG9yeUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfVFlQRV9GSU5EX0ZBQ1RPUlkpKQotI2RlZmluZSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUllfR0VUX0NMQVNTKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSwgR3N0VHlwZUZpbmRGYWN0b3J5Q2xhc3MpKQotCi0vKioKLSAqIEdzdFR5cGVGaW5kRmFjdG9yeToKLSAqCi0gKiBPcGFxdWUgb2JqZWN0IHRoYXQgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgdHlwZWZpbmQgZnVuY3Rpb24uCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RUeXBlRmluZEZhY3RvcnkgR3N0VHlwZUZpbmRGYWN0b3J5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFR5cGVGaW5kRmFjdG9yeUNsYXNzIEdzdFR5cGVGaW5kRmFjdG9yeUNsYXNzOwotCi0vKiB0eXBlZmluZGluZyBpbnRlcmZhY2UgKi8KLQotR1R5cGUgICAgICAgICAgIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfdHlwZSAgICAgICAgICAodm9pZCk7Ci0KLUdMaXN0ICogICAgICAgICBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2xpc3QgICAgICAgICAgKHZvaWQpOwotCi1jb25zdCBnY2hhciAqIGNvbnN0ICogZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zIChHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3RvcnkpOwotCi1Hc3RDYXBzICogICAgICAgZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzICAgICAgICAgIChHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3RvcnkpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9oYXNfZnVuY3Rpb24gICAgICAoR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5KTsKLXZvaWQgICAgICAgICAgICBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbiAgICAgKEdzdFR5cGVGaW5kRmFjdG9yeSAqZmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR5cGVGaW5kICpmaW5kKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RUeXBlRmluZEZhY3RvcnksIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RZUEVfRklORF9GQUNUT1JZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHVyaS5jIGIvZ3N0L2dzdHVyaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODdkNGRiLi4wMDAwMDAwCi0tLSBhL2dzdC9nc3R1cmkuYworKysgL2Rldi9udWxsCkBAIC0xLDI4MDUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogQ29weXJpZ2h0IChDKSAyMDExIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgRGF2aWQgV2FyaW5nLCBCcml0aXNoIEJyb2FkY2FzdGluZyBDb3Jwb3JhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICA8ZGF2aWQud2FyaW5nQHJkLmJiYy5jby51az4KLSAqCi0gKiBnc3R1cmkuYzogcmVnaXN0ZXIgVVJJIGhhbmRsZXJzIGFuZCBJRVRGIFJGQyAzOTg2IFVSSSBtYW5pcHVsYXRpb25zLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3R1cmloYW5kbGVyCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEludGVyZmFjZSB0byBlYXNlIFVSSSBoYW5kbGluZyBpbiBwbHVnaW5zLgotICoKLSAqIFRoZSAjR3N0VVJJSGFuZGxlciBpcyBhbiBpbnRlcmZhY2UgdGhhdCBpcyBpbXBsZW1lbnRlZCBieSBTb3VyY2UgYW5kIFNpbmsKLSAqICNHc3RFbGVtZW50IHRvIHVuaWZ5IGhhbmRsaW5nIG9mIFVSSS4KLSAqCi0gKiBBbiBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIHF1aWNrbHkgZ2V0IGFuIGVsZW1lbnQKLSAqIHRoYXQgaGFuZGxlcyB0aGUgZ2l2ZW4gVVJJIGZvciByZWFkaW5nIG9yIHdyaXRpbmcKLSAqIChnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkpLgotICoKLSAqIFNvdXJjZSBhbmQgU2luayBwbHVnaW5zIHNob3VsZCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2Ugd2hlbiBwb3NzaWJsZS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0LmgiCi0jaW5jbHVkZSAiZ3N0dXJpLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHJlZ2lzdHJ5LmgiCi0KLSNpbmNsdWRlICJnc3QtaTE4bi1saWIuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dwcmludGYuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3VyaV9oYW5kbGVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF91cmlfaGFuZGxlcl9kZWJ1ZwotCi0jaWZuZGVmIEhBVkVfU1RSQ0FTRVNUUgotI2RlZmluZSBzdHJjYXNlc3RyIF9nc3RfYXNjaWlfc3RyY2FzZXN0cgotCi0vKiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mcmVlYnNkL2ZyZWVic2QvYmxvYi9tYXN0ZXIvY29udHJpYi9maWxlL3NyYy9zdHJjYXNlc3RyLmMKLSAqIFVwZGF0ZWQgdG8gdXNlIEdMaWIgdHlwZXMgYW5kIEdMaWIgc3RyaW5nIGZ1bmN0aW9ucwotICoKLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGZpbmQgaW4gcywgaWdub3JlIGNhc2UuCi0gKi8KLQotc3RhdGljIGdjaGFyICoKLV9nc3RfYXNjaWlfc3RyY2FzZXN0ciAoY29uc3QgZ2NoYXIgKiBzLCBjb25zdCBnY2hhciAqIGZpbmQpCi17Ci0gIGdjaGFyIGMsIHNjOwotICBnc2l6ZSBsZW47Ci0KLSAgaWYgKChjID0gKmZpbmQrKykgIT0gMCkgewotICAgIGMgPSBnX2FzY2lpX3RvbG93ZXIgKGMpOwotICAgIGxlbiA9IHN0cmxlbiAoZmluZCk7Ci0gICAgZG8gewotICAgICAgZG8gewotICAgICAgICBpZiAoKHNjID0gKnMrKykgPT0gMCkKLSAgICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgICAgfSB3aGlsZSAoZ19hc2NpaV90b2xvd2VyIChzYykgIT0gYyk7Ci0gICAgfSB3aGlsZSAoZ19hc2NpaV9zdHJuY2FzZWNtcCAocywgZmluZCwgbGVuKSAhPSAwKTsKLSAgICBzLS07Ci0gIH0KLSAgcmV0dXJuIChnY2hhciAqKSAoZ2ludHB0cikgKHMpOwotfQotI2VuZGlmCi0KLUdUeXBlCi1nc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSB1cmloYW5kbGVyX3R5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnVyaWhhbmRsZXJfdHlwZSkpIHsKLSAgICBHVHlwZSBfdHlwZTsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIHVyaWhhbmRsZXJfaW5mbyA9IHsKLSAgICAgIHNpemVvZiAoR3N0VVJJSGFuZGxlckludGVyZmFjZSksCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIDAsCi0gICAgICAwLAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwKLSAgICB9OwotCi0gICAgX3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHX1RZUEVfSU5URVJGQUNFLAotICAgICAgICAiR3N0VVJJSGFuZGxlciIsICZ1cmloYW5kbGVyX2luZm8sIDApOwotCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF91cmlfaGFuZGxlcl9kZWJ1ZywgIkdTVF9VUkkiLCBHU1RfREVCVUdfQk9MRCwKLSAgICAgICAgImhhbmRsaW5nIG9mIFVSSXMiKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnVyaWhhbmRsZXJfdHlwZSwgX3R5cGUpOwotICB9Ci0gIHJldHVybiB1cmloYW5kbGVyX3R5cGU7Ci19Ci0KLUdRdWFyawotZ3N0X3VyaV9lcnJvcl9xdWFyayAodm9pZCkKLXsKLSAgcmV0dXJuIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZ3N0LXVyaS1lcnJvci1xdWFyayIpOwotfQotCi1zdGF0aWMgY29uc3QgZ3VjaGFyIGFjY2VwdGFibGVbOTZdID0geyAgLyogWDAgICBYMSAgIFgyICAgWDMgICBYNCAgIFg1ICAgWDYgICBYNyAgIFg4ICAgWDkgICBYQSAgIFhCICAgWEMgICBYRCAgIFhFICAgWEYgKi8KLSAgMHgwMCwgMHgzRiwgMHgyMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgyQywgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgyMiwgMHgyMCwgMHgzRiwgMHgzRiwgMHgxQywgICAgICAgLyogMlggICEiIyQlJicoKSorLC0uLyAgICovCi0gIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4MzgsIDB4MjAsIDB4MjAsIDB4MkMsIDB4MjAsIDB4MkMsICAgICAgIC8qIDNYIDAxMjM0NTY3ODk6Ozw9Pj8gICAqLwotICAweDMwLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAgICAgICAvKiA0WCBAQUJDREVGR0hJSktMTU5PICAgKi8KLSAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgzRiwgICAgICAgLyogNVggUFFSU1RVVldYWVpbXF1eXyAgICovCi0gIDB4MjAsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsIDB4M0YsICAgICAgIC8qIDZYIGBhYmNkZWZnaGlqa2xtbm8gICAqLwotICAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDIwLCAweDIwLCAweDIwLCAweDNGLCAweDIwICAgICAgICAvKiA3WCBwcXJzdHV2d3h5ent8fX5ERUwgKi8KLX07Ci0KLXR5cGVkZWYgZW51bQotewotICBVTlNBRkVfQUxMID0gMHgxLCAgICAgICAgICAgICAvKiBFc2NhcGUgYWxsIHVuc2FmZSBjaGFyYWN0ZXJzICAgKi8KLSAgVU5TQUZFX0FMTE9XX1BMVVMgPSAweDIsICAgICAgLyogQWxsb3dzICcrJyAgKi8KLSAgVU5TQUZFX1BBVEggPSAweDQsICAgICAgICAgICAgLyogQWxsb3dzICcvJyBhbmQgJz8nIGFuZCAnJicgYW5kICc9JyAgKi8KLSAgVU5TQUZFX0RPU19QQVRIID0gMHg4LCAgICAgICAgLyogQWxsb3dzICcvJyBhbmQgJz8nIGFuZCAnJicgYW5kICc9JyBhbmQgJzonICovCi0gIFVOU0FGRV9IT1NUID0gMHgxMCwgICAgICAgICAgIC8qIEFsbG93cyAnLycgYW5kICc6JyBhbmQgJ0AnICovCi0gIFVOU0FGRV9TTEFTSEVTID0gMHgyMCAgICAgICAgIC8qIEFsbG93cyBhbGwgY2hhcmFjdGVycyBleGNlcHQgZm9yICcvJyBhbmQgJyUnICovCi19IFVuc2FmZUNoYXJhY3RlclNldDsKLQotI2RlZmluZSBIRVhfRVNDQVBFICclJwotCi0vKiAgRXNjYXBlIHVuZGVzaXJhYmxlIGNoYXJhY3RlcnMgdXNpbmcgJQotICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcG9pbnRlciB0byBhIHN0cmluZyBpbiB3aGljaAotICogc29tZSBjaGFyYWN0ZXJzIG1heSBiZSB1bmFjY2VwdGFibGUgdW5lc2NhcGVkLgotICogSXQgcmV0dXJucyBhIHN0cmluZyB3aGljaCBoYXMgdGhlc2UgY2hhcmFjdGVycwotICogcmVwcmVzZW50ZWQgYnkgYSAnJScgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHR3byBoZXggZGlnaXRzLgotICoKLSAqIFRoaXMgcm91dGluZSByZXR1cm5zIGEgZ19tYWxsb2NlZCBzdHJpbmcuCi0gKi8KLQotc3RhdGljIGNvbnN0IGdjaGFyIGhleFsxNl0gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7Ci0KLXN0YXRpYyBnY2hhciAqCi1lc2NhcGVfc3RyaW5nX2ludGVybmFsIChjb25zdCBnY2hhciAqIHN0cmluZywgVW5zYWZlQ2hhcmFjdGVyU2V0IG1hc2spCi17Ci0jZGVmaW5lIEFDQ0VQVEFCTEVfQ0hBUihhKSAoKGEpPj0zMiAmJiAoYSk8MTI4ICYmIChhY2NlcHRhYmxlWyhhKS0zMl0gJiB1c2VfbWFzaykpCi0KLSAgY29uc3QgZ2NoYXIgKnA7Ci0gIGdjaGFyICpxOwotICBnY2hhciAqcmVzdWx0OwotICBndWNoYXIgYzsKLSAgZ2ludCB1bmFjY2VwdGFibGU7Ci0gIFVuc2FmZUNoYXJhY3RlclNldCB1c2VfbWFzazsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWFzayA9PSBVTlNBRkVfQUxMCi0gICAgICB8fCBtYXNrID09IFVOU0FGRV9BTExPV19QTFVTCi0gICAgICB8fCBtYXNrID09IFVOU0FGRV9QQVRICi0gICAgICB8fCBtYXNrID09IFVOU0FGRV9ET1NfUEFUSAotICAgICAgfHwgbWFzayA9PSBVTlNBRkVfSE9TVCB8fCBtYXNrID09IFVOU0FGRV9TTEFTSEVTLCBOVUxMKTsKLQotICBpZiAoc3RyaW5nID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHVuYWNjZXB0YWJsZSA9IDA7Ci0gIHVzZV9tYXNrID0gbWFzazsKLSAgZm9yIChwID0gc3RyaW5nOyAqcCAhPSAnXDAnOyBwKyspIHsKLSAgICBjID0gKnA7Ci0gICAgaWYgKCFBQ0NFUFRBQkxFX0NIQVIgKGMpKSB7Ci0gICAgICB1bmFjY2VwdGFibGUrKzsKLSAgICB9Ci0gICAgaWYgKCh1c2VfbWFzayA9PSBVTlNBRkVfSE9TVCkgJiYgKHVuYWNjZXB0YWJsZSB8fCAoYyA9PSAnLycpKSkgewotICAgICAgLyogd2hlbiBlc2NhcGluZyBhIGhvc3QsIGlmIHdlIGhpdCBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBlc2NhcGVkLCBvciB3ZSBmaW5hbGx5Ci0gICAgICAgKiBoaXQgYSBwYXRoIHNlcGFyYXRvciwgcmV2ZXJ0IHRvIHBhdGggbW9kZSAodGhlIGhvc3Qgc2VnbWVudCBvZiB0aGUgdXJsIGlzIG92ZXIpLgotICAgICAgICovCi0gICAgICB1c2VfbWFzayA9IFVOU0FGRV9QQVRIOwotICAgIH0KLSAgfQotCi0gIHJlc3VsdCA9IGdfbWFsbG9jIChwIC0gc3RyaW5nICsgdW5hY2NlcHRhYmxlICogMiArIDEpOwotCi0gIHVzZV9tYXNrID0gbWFzazsKLSAgZm9yIChxID0gcmVzdWx0LCBwID0gc3RyaW5nOyAqcCAhPSAnXDAnOyBwKyspIHsKLSAgICBjID0gKnA7Ci0KLSAgICBpZiAoIUFDQ0VQVEFCTEVfQ0hBUiAoYykpIHsKLSAgICAgICpxKysgPSBIRVhfRVNDQVBFOyAgICAgICAgLyogbWVhbnMgaGV4IGNvbWluZyAqLwotICAgICAgKnErKyA9IGhleFtjID4+IDRdOwotICAgICAgKnErKyA9IGhleFtjICYgMTVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAqcSsrID0gYzsKLSAgICB9Ci0gICAgaWYgKCh1c2VfbWFzayA9PSBVTlNBRkVfSE9TVCkgJiYgKCFBQ0NFUFRBQkxFX0NIQVIgKGMpIHx8IChjID09ICcvJykpKSB7Ci0gICAgICB1c2VfbWFzayA9IFVOU0FGRV9QQVRIOwotICAgIH0KLSAgfQotCi0gICpxID0gJ1wwJzsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBlc2NhcGVfc3RyaW5nOgotICogQHN0cmluZzogc3RyaW5nIHRvIGJlIGVzY2FwZWQKLSAqCi0gKiBFc2NhcGVzIEBzdHJpbmcsIHJlcGxhY2luZyBhbnkgYW5kIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMKLSAqIHdpdGggZXF1aXZhbGVudCBlc2NhcGUgc2VxdWVuY2VzLgotICoKLSAqIFJldHVybiB2YWx1ZTogYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGVxdWl2YWxlbnQgdG8gQHN0cmluZwotICogYnV0IHdpdGggYWxsIHNwZWNpYWwgY2hhcmFjdGVycyBlc2NhcGVkCi0gKiovCi1zdGF0aWMgZ2NoYXIgKgotZXNjYXBlX3N0cmluZyAoY29uc3QgZ2NoYXIgKiBzdHJpbmcpCi17Ci0gIHJldHVybiBlc2NhcGVfc3RyaW5nX2ludGVybmFsIChzdHJpbmcsIFVOU0FGRV9BTEwpOwotfQotCi1zdGF0aWMgaW50Ci1oZXhfdG9faW50IChnY2hhciBjKQotewotICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgPyBjIC0gJzAnCi0gICAgICA6IGMgPj0gJ0EnICYmIGMgPD0gJ0YnID8gYyAtICdBJyArIDEwCi0gICAgICA6IGMgPj0gJ2EnICYmIGMgPD0gJ2YnID8gYyAtICdhJyArIDEwIDogLTE7Ci19Ci0KLXN0YXRpYyBpbnQKLXVuZXNjYXBlX2NoYXJhY3RlciAoY29uc3QgY2hhciAqc2Nhbm5lcikKLXsKLSAgaW50IGZpcnN0X2RpZ2l0OwotICBpbnQgc2Vjb25kX2RpZ2l0OwotCi0gIGZpcnN0X2RpZ2l0ID0gaGV4X3RvX2ludCAoKnNjYW5uZXIrKyk7Ci0gIGlmIChmaXJzdF9kaWdpdCA8IDApIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBzZWNvbmRfZGlnaXQgPSBoZXhfdG9faW50ICgqc2Nhbm5lcik7Ci0gIGlmIChzZWNvbmRfZGlnaXQgPCAwKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgcmV0dXJuIChmaXJzdF9kaWdpdCA8PCA0KSB8IHNlY29uZF9kaWdpdDsKLX0KLQotLyogdW5lc2NhcGVfc3RyaW5nOgotICogQGVzY2FwZWRfc3RyaW5nOiBhbiBlc2NhcGVkIFVSSSwgcGF0aCwgb3Igb3RoZXIgc3RyaW5nCi0gKiBAaWxsZWdhbF9jaGFyYWN0ZXJzOiBhIHN0cmluZyBjb250YWluaW5nIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycwotICogY29uc2lkZXJlZCAiaWxsZWdhbCIsICdcMCcgaXMgYXV0b21hdGljYWxseSBpbiB0aGlzIGxpc3QuCi0gKgotICogRGVjb2RlcyBlc2NhcGVkIGNoYXJhY3RlcnMgKGkuZS4gUEVSQ0VOVHh4IHNlcXVlbmNlcykgaW4gQGVzY2FwZWRfc3RyaW5nLgotICogQ2hhcmFjdGVycyBhcmUgZW5jb2RlZCBpbiBQRVJDRU5UeHkgZm9ybSwgd2hlcmUgeHkgaXMgdGhlIEFTQ0lJIGhleCBjb2RlCi0gKiBmb3IgY2hhcmFjdGVyIDE2eCt5LgotICoKLSAqIFJldHVybiB2YWx1ZTogKG51bGxhYmxlKTogYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIHdpdGggdGhlCi0gKiB1bmVzY2FwZWQgZXF1aXZhbGVudHMsIG9yICVOVUxMIGlmIEBlc2NhcGVkX3N0cmluZyBjb250YWluZWQgb25lIG9mCi0gKiB0aGUgY2hhcmFjdGVycyBpbiBAaWxsZWdhbF9jaGFyYWN0ZXJzLgotICoqLwotc3RhdGljIGNoYXIgKgotdW5lc2NhcGVfc3RyaW5nIChjb25zdCBnY2hhciAqIGVzY2FwZWRfc3RyaW5nLCBjb25zdCBnY2hhciAqIGlsbGVnYWxfY2hhcmFjdGVycykKLXsKLSAgY29uc3QgZ2NoYXIgKmluOwotICBnY2hhciAqb3V0LCAqcmVzdWx0OwotICBnaW50IGNoYXJhY3RlcjsKLQotICBpZiAoZXNjYXBlZF9zdHJpbmcgPT0gTlVMTCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgcmVzdWx0ID0gZ19tYWxsb2MgKHN0cmxlbiAoZXNjYXBlZF9zdHJpbmcpICsgMSk7Ci0KLSAgb3V0ID0gcmVzdWx0OwotICBmb3IgKGluID0gZXNjYXBlZF9zdHJpbmc7ICppbiAhPSAnXDAnOyBpbisrKSB7Ci0gICAgY2hhcmFjdGVyID0gKmluOwotICAgIGlmICgqaW4gPT0gSEVYX0VTQ0FQRSkgewotICAgICAgY2hhcmFjdGVyID0gdW5lc2NhcGVfY2hhcmFjdGVyIChpbiArIDEpOwotCi0gICAgICAvKiBDaGVjayBmb3IgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuIFdlIGNvbnNpZGVyICdcMCcgaWxsZWdhbCBoZXJlLiAqLwotICAgICAgaWYgKGNoYXJhY3RlciA8PSAwCi0gICAgICAgICAgfHwgKGlsbGVnYWxfY2hhcmFjdGVycyAhPSBOVUxMCi0gICAgICAgICAgICAgICYmIHN0cmNociAoaWxsZWdhbF9jaGFyYWN0ZXJzLCAoY2hhcikgY2hhcmFjdGVyKSAhPSBOVUxMKSkgewotICAgICAgICBnX2ZyZWUgKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotICAgICAgaW4gKz0gMjsKLSAgICB9Ci0gICAgKm91dCsrID0gKGNoYXIpIGNoYXJhY3RlcjsKLSAgfQotCi0gICpvdXQgPSAnXDAnOwotICBnX2Fzc2VydCAoKGdzaXplKSAob3V0IC0gcmVzdWx0KSA8PSBzdHJsZW4gKGVzY2FwZWRfc3RyaW5nKSk7Ci0gIHJldHVybiByZXN1bHQ7Ci0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3VyaV9wcm90b2NvbF9jaGVja19pbnRlcm5hbCAoY29uc3QgZ2NoYXIgKiB1cmksIGdjaGFyICoqIGVuZHB0cikKLXsKLSAgZ2NoYXIgKmNoZWNrID0gKGdjaGFyICopIHVyaTsKLQotICBnX2Fzc2VydCAodXJpICE9IE5VTEwpOwotICBnX2Fzc2VydCAoZW5kcHRyICE9IE5VTEwpOwotCi0gIGlmIChnX2FzY2lpX2lzYWxwaGEgKCpjaGVjaykpIHsKLSAgICBjaGVjaysrOwotICAgIHdoaWxlIChnX2FzY2lpX2lzYWxudW0gKCpjaGVjaykgfHwgKmNoZWNrID09ICcrJwotICAgICAgICB8fCAqY2hlY2sgPT0gJy0nIHx8ICpjaGVjayA9PSAnLicpCi0gICAgICBjaGVjaysrOwotICB9Ci0KLSAgKmVuZHB0ciA9IGNoZWNrOwotfQotCi0vKioKLSAqIGdzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQ6Ci0gKiBAcHJvdG9jb2w6IEEgc3RyaW5nCi0gKgotICogVGVzdHMgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIGlkZW50aWZpZXIuIFByb3RvY29scwotICogbXVzdCBjb25zaXN0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCAnKycsICctJyBhbmQgJy4nIGFuZCBtdXN0Ci0gKiBzdGFydCB3aXRoIGEgYWxwaGFiZXRpYyBjaGFyYWN0ZXIuIFNlZSBSRkMgMzk4NiBTZWN0aW9uIDMuMS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgcHJvdG9jb2wgaWRlbnRpZmllciwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQgKGNvbnN0IGdjaGFyICogcHJvdG9jb2wpCi17Ci0gIGdjaGFyICplbmRwdHI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByb3RvY29sICE9IE5VTEwsIEZBTFNFKTsKLQotICBnc3RfdXJpX3Byb3RvY29sX2NoZWNrX2ludGVybmFsIChwcm90b2NvbCwgJmVuZHB0cik7Ci0KLSAgcmV0dXJuICplbmRwdHIgPT0gJ1wwJyAmJiAoKGdzaXplKSAoZW5kcHRyIC0gcHJvdG9jb2wpKSA+PSAyOwotfQotCi0vKioKLSAqIGdzdF91cmlfaXNfdmFsaWQ6Ci0gKiBAdXJpOiBBIFVSSSBzdHJpbmcKLSAqCi0gKiBUZXN0cyBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgVVJJIGlkZW50aWZpZXIuIFVSSXMgc3RhcnQgd2l0aCBhIHZhbGlkCi0gKiBzY2hlbWUgZm9sbG93ZWQgYnkgIjoiIGFuZCBtYXliZSBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgbG9jYXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIFVSSQotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9pc192YWxpZCAoY29uc3QgZ2NoYXIgKiB1cmkpCi17Ci0gIGdjaGFyICplbmRwdHI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgZ3N0X3VyaV9wcm90b2NvbF9jaGVja19pbnRlcm5hbCAodXJpLCAmZW5kcHRyKTsKLQotICByZXR1cm4gKmVuZHB0ciA9PSAnOicgJiYgKChnc2l6ZSkgKGVuZHB0ciAtIHVyaSkpID49IDI7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9nZXRfcHJvdG9jb2w6Ci0gKiBAdXJpOiBBIFVSSSBzdHJpbmcKLSAqCi0gKiBFeHRyYWN0cyB0aGUgcHJvdG9jb2wgb3V0IG9mIGEgZ2l2ZW4gdmFsaWQgVVJJLiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUKLSAqIGZyZWVkIHVzaW5nIGdfZnJlZSgpLgotICoKLSAqIFJldHVybnM6IFRoZSBwcm90b2NvbCBmb3IgdGhpcyBVUkkuCi0gKi8KLWdjaGFyICoKLWdzdF91cmlfZ2V0X3Byb3RvY29sIChjb25zdCBnY2hhciAqIHVyaSkKLXsKLSAgZ2NoYXIgKmNvbG9uOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1cmkgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfdXJpX2lzX3ZhbGlkICh1cmkpLCBOVUxMKTsKLQotICBjb2xvbiA9IHN0cnN0ciAodXJpLCAiOiIpOwotCi0gIHJldHVybiBnX2FzY2lpX3N0cmRvd24gKHVyaSwgY29sb24gLSB1cmkpOwotfQotCi0vKioKLSAqIGdzdF91cmlfaGFzX3Byb3RvY29sOgotICogQHVyaTogYSBVUkkgc3RyaW5nCi0gKiBAcHJvdG9jb2w6IGEgcHJvdG9jb2wgc3RyaW5nIChlLmcuICJodHRwIikKLSAqCi0gKiBDaGVja3MgaWYgdGhlIHByb3RvY29sIG9mIGEgZ2l2ZW4gdmFsaWQgVVJJIG1hdGNoZXMgQHByb3RvY29sLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwcm90b2NvbCBtYXRjaGVzLgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9oYXNfcHJvdG9jb2wgKGNvbnN0IGdjaGFyICogdXJpLCBjb25zdCBnY2hhciAqIHByb3RvY29sKQotewotICBnY2hhciAqY29sb247Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwcm90b2NvbCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfdXJpX2lzX3ZhbGlkICh1cmkpLCBGQUxTRSk7Ci0KLSAgY29sb24gPSBzdHJzdHIgKHVyaSwgIjoiKTsKLQotICBpZiAoY29sb24gPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIChnX2FzY2lpX3N0cm5jYXNlY21wICh1cmksIHByb3RvY29sLCAoZ3NpemUpIChjb2xvbiAtIHVyaSkpID09IDApOwotfQotCi0vKioKLSAqIGdzdF91cmlfZ2V0X2xvY2F0aW9uOgotICogQHVyaTogQSBVUkkgc3RyaW5nCi0gKgotICogRXh0cmFjdHMgdGhlIGxvY2F0aW9uIG91dCBvZiBhIGdpdmVuIHZhbGlkIFVSSSwgaWUuIHRoZSBwcm90b2NvbCBhbmQgIjovLyIKLSAqIGFyZSBzdHJpcHBlZCBmcm9tIHRoZSBVUkksIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGxvY2F0aW9uIHJldHVybmVkIGluY2x1ZGVzCi0gKiB0aGUgaG9zdG5hbWUgaWYgb25lIGlzIHNwZWNpZmllZC4gVGhlIHJldHVybmVkIHN0cmluZyBtdXN0IGJlIGZyZWVkIHVzaW5nCi0gKiBnX2ZyZWUoKS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBsb2NhdGlvbiBmb3IgdGhpcyBVUkkuIFJldHVybnMgJU5VTEwgaWYgdGhlCi0gKiAgICAgVVJJIGlzbid0IHZhbGlkLiBJZiB0aGUgVVJJIGRvZXMgbm90IGNvbnRhaW4gYSBsb2NhdGlvbiwgYW4gZW1wdHkKLSAqICAgICBzdHJpbmcgaXMgcmV0dXJuZWQuCi0gKi8KLWdjaGFyICoKLWdzdF91cmlfZ2V0X2xvY2F0aW9uIChjb25zdCBnY2hhciAqIHVyaSkKLXsKLSAgY29uc3QgZ2NoYXIgKmNvbG9uOwotICBnY2hhciAqdW5lc2NhcGVkID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3VyaV9pc192YWxpZCAodXJpKSwgTlVMTCk7Ci0KLSAgY29sb24gPSBzdHJzdHIgKHVyaSwgIjovLyIpOwotICBpZiAoIWNvbG9uKQotICAgIHJldHVybiBOVUxMOwotCi0gIHVuZXNjYXBlZCA9IHVuZXNjYXBlX3N0cmluZyAoY29sb24gKyAzLCAiLyIpOwotCi0gIC8qIE9uIFdpbmRvd3MgYW4gVVJJIG1pZ2h0IGxvb2sgbGlrZSBmaWxlOi8vL2M6L2Zvby9iYXIudHh0IG9yCi0gICAqIGZpbGU6Ly8vY3wvZm9vL2Jhci50eHQgKHNvbWUgTmV0c2NhcGUgdmVyc2lvbnMpIGFuZCB3ZSB3YW50IHRvCi0gICAqIHJldHVybiBjOi9mb28vYmFyLnR4dCBhcyBsb2NhdGlvbiByYXRoZXIgdGhhbiAvYzovZm9vL2Jhci50eHQuCi0gICAqIENhbid0IHVzZSBnX2ZpbGVuYW1lX2Zyb21fdXJpKCkgaGVyZSBiZWNhdXNlIGl0IHdpbGwgb25seSBoYW5kbGUgdGhlCi0gICAqIGZpbGU6Ly8gcHJvdG9jb2wgKi8KLSNpZmRlZiBHX09TX1dJTjMyCi0gIGlmICh1bmVzY2FwZWQgIT0gTlVMTCAmJiB1bmVzY2FwZWRbMF0gPT0gJy8nICYmCi0gICAgICBnX2FzY2lpX2lzYWxwaGEgKHVuZXNjYXBlZFsxXSkgJiYKLSAgICAgICh1bmVzY2FwZWRbMl0gPT0gJzonIHx8IHVuZXNjYXBlZFsyXSA9PSAnfCcpKSB7Ci0gICAgdW5lc2NhcGVkWzJdID0gJzonOwotICAgIG1lbW1vdmUgKHVuZXNjYXBlZCwgdW5lc2NhcGVkICsgMSwgc3RybGVuICh1bmVzY2FwZWQgKyAxKSArIDEpOwotICB9Ci0jZW5kaWYKLQotICBHU1RfTE9HICgiZXh0cmFjdGVkIGxvY2F0aW9uICclcycgZnJvbSBVUkkgJyVzJyIsIEdTVF9TVFJfTlVMTCAodW5lc2NhcGVkKSwKLSAgICAgIHVyaSk7Ci0gIHJldHVybiB1bmVzY2FwZWQ7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9jb25zdHJ1Y3Q6Ci0gKiBAcHJvdG9jb2w6IFByb3RvY29sIGZvciBVUkkKLSAqIEBsb2NhdGlvbjogKHRyYW5zZmVyIG5vbmUpOiBMb2NhdGlvbiBmb3IgVVJJCi0gKgotICogQ29uc3RydWN0cyBhIFVSSSBmb3IgYSBnaXZlbiB2YWxpZCBwcm90b2NvbCBhbmQgbG9jYXRpb24uCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBzdHJpbmcgZm9yIHRoaXMgVVJJLiBSZXR1cm5zICVOVUxMIGlmIHRoZQotICogICAgIGdpdmVuIFVSSSBwcm90b2NvbCBpcyBub3QgdmFsaWQsIG9yIHRoZSBnaXZlbiBsb2NhdGlvbiBpcyAlTlVMTC4KLSAqLwotZ2NoYXIgKgotZ3N0X3VyaV9jb25zdHJ1Y3QgKGNvbnN0IGdjaGFyICogcHJvdG9jb2wsIGNvbnN0IGdjaGFyICogbG9jYXRpb24pCi17Ci0gIGNoYXIgKmVzY2FwZWQsICpwcm90b19sb3dlcmNhc2U7Ci0gIGNoYXIgKnJldHZhbDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3VyaV9wcm90b2NvbF9pc192YWxpZCAocHJvdG9jb2wpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxvY2F0aW9uICE9IE5VTEwsIE5VTEwpOwotCi0gIHByb3RvX2xvd2VyY2FzZSA9IGdfYXNjaWlfc3RyZG93biAocHJvdG9jb2wsIC0xKTsKLSAgZXNjYXBlZCA9IGVzY2FwZV9zdHJpbmcgKGxvY2F0aW9uKTsKLSAgcmV0dmFsID0gZ19zdHJkdXBfcHJpbnRmICgiJXM6Ly8lcyIsIHByb3RvX2xvd2VyY2FzZSwgZXNjYXBlZCk7Ci0gIGdfZnJlZSAoZXNjYXBlZCk7Ci0gIGdfZnJlZSAocHJvdG9fbG93ZXJjYXNlKTsKLQotICByZXR1cm4gcmV0dmFsOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RVUklUeXBlIHR5cGU7Ci0gIGNvbnN0IGdjaGFyICpwcm90b2NvbDsKLX0KLVNlYXJjaEVudHJ5OwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNlYXJjaF9ieV9lbnRyeSAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsIGdwb2ludGVyIHNlYXJjaF9lbnRyeSkKLXsKLSAgY29uc3QgZ2NoYXIgKmNvbnN0ICpwcm90b2NvbHM7Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OwotICBTZWFyY2hFbnRyeSAqZW50cnkgPSAoU2VhcmNoRW50cnkgKikgc2VhcmNoX2VudHJ5OwotCi0gIGlmICghR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUIChmZWF0dXJlKTsKLQotICBpZiAoZmFjdG9yeS0+dXJpX3R5cGUgIT0gZW50cnktPnR5cGUpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHByb3RvY29scyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHMgKGZhY3RvcnkpOwotCi0gIGlmIChwcm90b2NvbHMgPT0gTlVMTCkgewotICAgIGdfd2FybmluZyAoIkZhY3RvcnkgJyVzJyBpbXBsZW1lbnRzIEdzdFVyaUhhbmRsZXIgaW50ZXJmYWNlIGJ1dCByZXR1cm5lZCAiCi0gICAgICAgICJubyBzdXBwb3J0ZWQgcHJvdG9jb2xzISIsIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoZmVhdHVyZSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHdoaWxlICgqcHJvdG9jb2xzICE9IE5VTEwpIHsKLSAgICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wICgqcHJvdG9jb2xzLCBlbnRyeS0+cHJvdG9jb2wpID09IDApCi0gICAgICByZXR1cm4gVFJVRTsKLSAgICBwcm90b2NvbHMrKzsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnaW50Ci1zb3J0X2J5X3JhbmsgKEdzdFBsdWdpbkZlYXR1cmUgKiBmaXJzdCwgR3N0UGx1Z2luRmVhdHVyZSAqIHNlY29uZCkKLXsKLSAgcmV0dXJuIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcmFuayAoc2Vjb25kKSAtCi0gICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKGZpcnN0KTsKLX0KLQotc3RhdGljIEdMaXN0ICoKLWdldF9lbGVtZW50X2ZhY3Rvcmllc19mcm9tX3VyaV9wcm90b2NvbCAoY29uc3QgR3N0VVJJVHlwZSB0eXBlLAotICAgIGNvbnN0IGdjaGFyICogcHJvdG9jb2wpCi17Ci0gIEdMaXN0ICpwb3NzaWJpbGl0aWVzOwotICBTZWFyY2hFbnRyeSBlbnRyeTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocHJvdG9jb2wsIE5VTEwpOwotCi0gIGVudHJ5LnR5cGUgPSB0eXBlOwotICBlbnRyeS5wcm90b2NvbCA9IHByb3RvY29sOwotICBwb3NzaWJpbGl0aWVzID0gZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyIChnc3RfcmVnaXN0cnlfZ2V0ICgpLAotICAgICAgc2VhcmNoX2J5X2VudHJ5LCBGQUxTRSwgJmVudHJ5KTsKLQotICByZXR1cm4gcG9zc2liaWxpdGllczsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZDoKLSAqIEB0eXBlOiBXaGV0aGVyIHRvIGNoZWNrIGZvciBhIHNvdXJjZSBvciBhIHNpbmsKLSAqIEBwcm90b2NvbDogUHJvdG9jb2wgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBmb3IgKGUuZy4gImh0dHAiIG9yICJzbWIiKQotICoKLSAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGV4aXN0cyB0aGF0IHN1cHBvcnRzIHRoZSBnaXZlbiBVUkkgcHJvdG9jb2wuIE5vdGUKLSAqIHRoYXQgYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgZG9lcyBub3QgaW1wbHkgdGhhdCBhIHN1YnNlcXVlbnQgY2FsbCB0bwotICogZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSgpIGlzIGd1YXJhbnRlZWQgdG8gd29yay4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRQotKi8KLWdib29sZWFuCi1nc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZCAoY29uc3QgR3N0VVJJVHlwZSB0eXBlLCBjb25zdCBnY2hhciAqIHByb3RvY29sKQotewotICBHTGlzdCAqcG9zc2liaWxpdGllczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocHJvdG9jb2wsIEZBTFNFKTsKLQotICBwb3NzaWJpbGl0aWVzID0gZ2V0X2VsZW1lbnRfZmFjdG9yaWVzX2Zyb21fdXJpX3Byb3RvY29sICh0eXBlLCBwcm90b2NvbCk7Ci0KLSAgaWYgKHBvc3NpYmlsaXRpZXMpIHsKLSAgICBnX2xpc3RfZnJlZSAocG9zc2liaWxpdGllcyk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpOgotICogQHR5cGU6IFdoZXRoZXIgdG8gY3JlYXRlIGEgc291cmNlIG9yIGEgc2luawotICogQHVyaTogVVJJIHRvIGNyZWF0ZSBhbiBlbGVtZW50IGZvcgotICogQGVsZW1lbnRuYW1lOiAoYWxsb3ctbm9uZSk6IE5hbWUgb2YgY3JlYXRlZCBlbGVtZW50LCBjYW4gYmUgJU5VTEwuCi0gKiBAZXJyb3I6IChhbGxvdy1ub25lKTogYWRkcmVzcyB3aGVyZSB0byBzdG9yZSBlcnJvciBpbmZvcm1hdGlvbiwgb3IgJU5VTEwuCi0gKgotICogQ3JlYXRlcyBhbiBlbGVtZW50IGZvciBoYW5kbGluZyB0aGUgZ2l2ZW4gVVJJLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmbG9hdGluZyk6IGEgbmV3IGVsZW1lbnQgb3IgJU5VTEwgaWYgbm9uZSBjb3VsZCBiZSBjcmVhdGVkCi0gKi8KLUdzdEVsZW1lbnQgKgotZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoY29uc3QgR3N0VVJJVHlwZSB0eXBlLCBjb25zdCBnY2hhciAqIHVyaSwKLSAgICBjb25zdCBnY2hhciAqIGVsZW1lbnRuYW1lLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdMaXN0ICpwb3NzaWJpbGl0aWVzLCAqd2FsazsKLSAgZ2NoYXIgKnByb3RvY29sOwotICBHc3RFbGVtZW50ICpyZXQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfaXNfaW5pdGlhbGl6ZWQgKCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1VSSV9UWVBFX0lTX1ZBTElEICh0eXBlKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfdXJpX2lzX3ZhbGlkICh1cmkpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVycm9yID09IE5VTEwgfHwgKmVycm9yID09IE5VTEwsIE5VTEwpOwotCi0gIEdTVF9ERUJVRyAoInR5cGU6JWQsIHVyaTolcywgZWxlbWVudG5hbWU6JXMiLCB0eXBlLCB1cmksIGVsZW1lbnRuYW1lKTsKLQotICBwcm90b2NvbCA9IGdzdF91cmlfZ2V0X3Byb3RvY29sICh1cmkpOwotICBwb3NzaWJpbGl0aWVzID0gZ2V0X2VsZW1lbnRfZmFjdG9yaWVzX2Zyb21fdXJpX3Byb3RvY29sICh0eXBlLCBwcm90b2NvbCk7Ci0KLSAgaWYgKCFwb3NzaWJpbGl0aWVzKSB7Ci0gICAgR1NUX0RFQlVHICgiTm8gJXMgZm9yIFVSSSAnJXMnIiwgdHlwZSA9PSBHU1RfVVJJX1NJTksgPyAic2luayIgOiAic291cmNlIiwKLSAgICAgICAgdXJpKTsKLSAgICAvKiBUaGUgZXJyb3IgbWVzc2FnZSBpc24ndCBncmVhdCwgYnV0IHdlIGRvbid0IGV4cGVjdCBhcHBsaWNhdGlvbnMgdG8KLSAgICAgKiBzaG93IHRoYXQgZXJyb3IgdG8gdXNlcnMsIGJ1dCBjYWxsIHRoZSBtaXNzaW5nIHBsdWdpbnMgZnVuY3Rpb25zICovCi0gICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfVVJJX0VSUk9SLCBHU1RfVVJJX0VSUk9SX1VOU1VQUE9SVEVEX1BST1RPQ09MLAotICAgICAgICBfKCJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIiksIHByb3RvY29sKTsKLSAgICBnX2ZyZWUgKHByb3RvY29sKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBnX2ZyZWUgKHByb3RvY29sKTsKLQotICBwb3NzaWJpbGl0aWVzID0gZ19saXN0X3NvcnQgKHBvc3NpYmlsaXRpZXMsIChHQ29tcGFyZUZ1bmMpIHNvcnRfYnlfcmFuayk7Ci0gIHdhbGsgPSBwb3NzaWJpbGl0aWVzOwotICB3aGlsZSAod2FsaykgewotICAgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5ID0gd2Fsay0+ZGF0YTsKLSAgICBHRXJyb3IgKnVyaV9lcnIgPSBOVUxMOwotCi0gICAgcmV0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUgKGZhY3RvcnksIGVsZW1lbnRuYW1lKTsKLSAgICBpZiAocmV0ICE9IE5VTEwpIHsKLSAgICAgIEdzdFVSSUhhbmRsZXIgKmhhbmRsZXIgPSBHU1RfVVJJX0hBTkRMRVIgKHJldCk7Ci0KLSAgICAgIGlmIChnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoaGFuZGxlciwgdXJpLCAmdXJpX2VycikpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBHU1RfV0FSTklORyAoIiVzIGRpZG4ndCBhY2NlcHQgVVJJICclcyc6ICVzIiwgR1NUX09CSkVDVF9OQU1FIChyZXQpLCB1cmksCi0gICAgICAgICAgdXJpX2Vyci0+bWVzc2FnZSk7Ci0KLSAgICAgIGlmIChlcnJvciAhPSBOVUxMICYmICplcnJvciA9PSBOVUxMKQotICAgICAgICBnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIHVyaV9lcnIpOwotICAgICAgZWxzZQotICAgICAgICBnX2Vycm9yX2ZyZWUgKHVyaV9lcnIpOwotCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChyZXQpOwotICAgICAgcmV0ID0gTlVMTDsKLSAgICB9Ci0gICAgd2FsayA9IHdhbGstPm5leHQ7Ci0gIH0KLSAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAocG9zc2liaWxpdGllcyk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHJldCwgImNyZWF0ZWQgJXMgZm9yIFVSTCAnJXMnIiwKLSAgICAgIHR5cGUgPT0gR1NUX1VSSV9TSU5LID8gInNpbmsiIDogInNvdXJjZSIsIHVyaSk7Ci0KLSAgLyogaWYgdGhlIGZpcnN0IGhhbmRsZXIgZGlkbid0IHdvcmssIGJ1dCB3ZSBmb3VuZCBhbm90aGVyIG9uZSB0aGF0IHdvcmtzICovCi0gIGlmIChyZXQgIT0gTlVMTCkKLSAgICBnX2NsZWFyX2Vycm9yIChlcnJvcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlOgotICogQGhhbmRsZXI6IEEgI0dzdFVSSUhhbmRsZXIuCi0gKgotICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgZ2l2ZW4gVVJJIGhhbmRsZXIKLSAqCi0gKiBSZXR1cm5zOiB0aGUgI0dzdFVSSVR5cGUgb2YgdGhlIFVSSSBoYW5kbGVyLgotICogUmV0dXJucyAjR1NUX1VSSV9VTktOT1dOIGlmIHRoZSBAaGFuZGxlciBpc24ndCBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuCi0gKi8KLUdzdFVSSVR5cGUKLWdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGUgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZTsKLSAgR3N0VVJJVHlwZSByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUklfSEFORExFUiAoaGFuZGxlciksIEdTVF9VUklfVU5LTk9XTik7Ci0KLSAgaWZhY2UgPSBHU1RfVVJJX0hBTkRMRVJfR0VUX0lOVEVSRkFDRSAoaGFuZGxlcik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpZmFjZSAhPSBOVUxMLCBHU1RfVVJJX1VOS05PV04pOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWZhY2UtPmdldF90eXBlICE9IE5VTEwsIEdTVF9VUklfVU5LTk9XTik7Ci0KLSAgcmV0ID0gaWZhY2UtPmdldF90eXBlIChHX09CSkVDVF9UWVBFIChoYW5kbGVyKSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVVJJX1RZUEVfSVNfVkFMSUQgKHJldCksIEdTVF9VUklfVU5LTk9XTik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29sczoKLSAqIEBoYW5kbGVyOiBBICNHc3RVUklIYW5kbGVyLgotICoKLSAqIEdldHMgdGhlIGxpc3Qgb2YgcHJvdG9jb2xzIHN1cHBvcnRlZCBieSBAaGFuZGxlci4gVGhpcyBsaXN0IG1heSBub3QgYmUKLSAqIG1vZGlmaWVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoZWxlbWVudC10eXBlIHV0ZjgpIChudWxsYWJsZSk6IHRoZQotICogICAgIHN1cHBvcnRlZCBwcm90b2NvbHMuICBSZXR1cm5zICVOVUxMIGlmIHRoZSBAaGFuZGxlciBpc24ndAotICogICAgIGltcGxlbWVudGVkIHByb3Blcmx5LCBvciB0aGUgQGhhbmRsZXIgZG9lc24ndCBzdXBwb3J0IGFueQotICogICAgIHByb3RvY29scy4KLSAqLwotY29uc3QgZ2NoYXIgKmNvbnN0ICoKLWdzdF91cmlfaGFuZGxlcl9nZXRfcHJvdG9jb2xzIChHc3RVUklIYW5kbGVyICogaGFuZGxlcikKLXsKLSAgR3N0VVJJSGFuZGxlckludGVyZmFjZSAqaWZhY2U7Ci0gIGNvbnN0IGdjaGFyICpjb25zdCAqcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJX0hBTkRMRVIgKGhhbmRsZXIpLCBOVUxMKTsKLQotICBpZmFjZSA9IEdTVF9VUklfSEFORExFUl9HRVRfSU5URVJGQUNFIChoYW5kbGVyKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGlmYWNlICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWZhY2UtPmdldF9wcm90b2NvbHMgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0ID0gaWZhY2UtPmdldF9wcm90b2NvbHMgKEdfT0JKRUNUX1RZUEUgKGhhbmRsZXIpKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJldCAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpOgotICogQGhhbmRsZXI6IEEgI0dzdFVSSUhhbmRsZXIKLSAqCi0gKiBHZXRzIHRoZSBjdXJyZW50bHkgaGFuZGxlZCBVUkkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBVUkkgY3VycmVudGx5IGhhbmRsZWQgYnkKLSAqICAgdGhlIEBoYW5kbGVyLiAgUmV0dXJucyAlTlVMTCBpZiB0aGVyZSBhcmUgbm8gVVJJIGN1cnJlbnRseQotICogICBoYW5kbGVkLiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2l0aCBnX2ZyZWUoKSB3aGVuIG5vCi0gKiAgIGxvbmdlciBuZWVkZWQuCi0gKi8KLWdjaGFyICoKLWdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlcikKLXsKLSAgR3N0VVJJSGFuZGxlckludGVyZmFjZSAqaWZhY2U7Ci0gIGdjaGFyICpyZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUklfSEFORExFUiAoaGFuZGxlciksIE5VTEwpOwotCi0gIGlmYWNlID0gR1NUX1VSSV9IQU5ETEVSX0dFVF9JTlRFUkZBQ0UgKGhhbmRsZXIpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWZhY2UgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpZmFjZS0+Z2V0X3VyaSAhPSBOVUxMLCBOVUxMKTsKLSAgcmV0ID0gaWZhY2UtPmdldF91cmkgKGhhbmRsZXIpOwotICBpZiAocmV0ICE9IE5VTEwpCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF91cmlfaXNfdmFsaWQgKHJldCksIE5VTEwpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9oYW5kbGVyX3NldF91cmk6Ci0gKiBAaGFuZGxlcjogQSAjR3N0VVJJSGFuZGxlcgotICogQHVyaTogVVJJIHRvIHNldAotICogQGVycm9yOiAoYWxsb3ctbm9uZSk6IGFkZHJlc3Mgd2hlcmUgdG8gc3RvcmUgYSAjR0Vycm9yIGluIGNhc2Ugb2YKLSAqICAgIGFuIGVycm9yLCBvciAlTlVMTAotICoKLSAqIFRyaWVzIHRvIHNldCB0aGUgVVJJIG9mIHRoZSBnaXZlbiBoYW5kbGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBVUkkgd2FzIHNldCBzdWNjZXNzZnVsbHksIGVsc2UgJUZBTFNFLgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLCBjb25zdCBnY2hhciAqIHVyaSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKmlmYWNlOwotICBnYm9vbGVhbiByZXQ7Ci0gIGdjaGFyICpwcm90b2NvbDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSV9IQU5ETEVSIChoYW5kbGVyKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3VyaV9pc192YWxpZCAodXJpKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXJyb3IgPT0gTlVMTCB8fCAqZXJyb3IgPT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmYWNlID0gR1NUX1VSSV9IQU5ETEVSX0dFVF9JTlRFUkZBQ0UgKGhhbmRsZXIpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWZhY2UgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWZhY2UtPnNldF91cmkgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHByb3RvY29sID0gZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKHVyaSk7Ci0KLSAgaWYgKGlmYWNlLT5nZXRfcHJvdG9jb2xzKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmNvbnN0ICpwcm90b2NvbHM7Ci0gICAgY29uc3QgZ2NoYXIgKmNvbnN0ICpwOwotICAgIGdib29sZWFuIGZvdW5kX3Byb3RvY29sID0gRkFMU0U7Ci0KLSAgICBwcm90b2NvbHMgPSBpZmFjZS0+Z2V0X3Byb3RvY29scyAoR19PQkpFQ1RfVFlQRSAoaGFuZGxlcikpOwotICAgIGlmIChwcm90b2NvbHMgIT0gTlVMTCkgewotICAgICAgZm9yIChwID0gcHJvdG9jb2xzOyAqcCAhPSBOVUxMOyArK3ApIHsKLSAgICAgICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocHJvdG9jb2wsICpwKSA9PSAwKSB7Ci0gICAgICAgICAgZm91bmRfcHJvdG9jb2wgPSBUUlVFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZm91bmRfcHJvdG9jb2wpIHsKLSAgICAgICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfVVJJX0VSUk9SLCBHU1RfVVJJX0VSUk9SX1VOU1VQUE9SVEVEX1BST1RPQ09MLAotICAgICAgICAgICAgXygiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiKSwgcHJvdG9jb2wpOwotICAgICAgICBnX2ZyZWUgKHByb3RvY29sKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldCA9IGlmYWNlLT5zZXRfdXJpIChoYW5kbGVyLCB1cmksIGVycm9yKTsKLQotICBnX2ZyZWUgKHByb3RvY29sKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X2ZpbGVfdXRpbHNfY2Fub25pY2FsaXNlX3BhdGggKGNvbnN0IGdjaGFyICogcGF0aCkKLXsKLSAgZ2NoYXIgKipwYXJ0cywgKipwLCAqY2xlYW5fcGF0aDsKLQotI2lmZGVmIEdfT1NfV0lOMzIKLSAgewotICAgIEdTVF9XQVJOSU5HICgiRklYTUU6IGNhbm9uaWNhbGlzZSB3aW4zMiBwYXRoIik7Ci0gICAgcmV0dXJuIGdfc3RyZHVwIChwYXRoKTsKLSAgfQotI2VuZGlmCi0KLSAgcGFydHMgPSBnX3N0cnNwbGl0IChwYXRoLCAiLyIsIC0xKTsKLQotICBwID0gcGFydHM7Ci0gIHdoaWxlICgqcCAhPSBOVUxMKSB7Ci0gICAgaWYgKHN0cmNtcCAoKnAsICIuIikgPT0gMCkgewotICAgICAgLyoganVzdCBtb3ZlIGFsbCBmb2xsb3dpbmcgcGFydHMgb24gdG9wIG9mIHRoaXMsIGluY2wuIE5VTCB0ZXJtaW5hdG9yICovCi0gICAgICBnX2ZyZWUgKCpwKTsKLSAgICAgIG1lbW1vdmUgKHAsIHAgKyAxLCAoZ19zdHJ2X2xlbmd0aCAocCArIDEpICsgMSkgKiBzaXplb2YgKGdjaGFyICopKTsKLSAgICAgIC8qIHJlLWNoZWNrIHRoZSBuZXcgY3VycmVudCBwYXJ0IGFnYWluIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLwotICAgICAgY29udGludWU7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAgKCpwLCAiLi4iKSA9PSAwICYmIHAgPiBwYXJ0cykgewotICAgICAgLyoganVzdCBtb3ZlIGFsbCBmb2xsb3dpbmcgcGFydHMgb24gdG9wIG9mIHRoZSBwcmV2aW91cyBwYXJ0LCBpbmNsLgotICAgICAgICogTlVMIHRlcm1pbmF0b3IgKi8KLSAgICAgIGdfZnJlZSAoKihwIC0gMSkpOwotICAgICAgZ19mcmVlICgqcCk7Ci0gICAgICBtZW1tb3ZlIChwIC0gMSwgcCArIDEsIChnX3N0cnZfbGVuZ3RoIChwICsgMSkgKyAxKSAqIHNpemVvZiAoZ2NoYXIgKikpOwotICAgICAgLyogcmUtY2hlY2sgdGhlIG5ldyBjdXJyZW50IHBhcnQgYWdhaW4gaW4gdGhlIG5leHQgaXRlcmF0aW9uICovCi0gICAgICAtLXA7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgKytwOwotICB9Ci0gIGlmICgqcGF0aCA9PSAnLycpIHsKLSAgICBndWludCBudW1fcGFydHM7Ci0KLSAgICBudW1fcGFydHMgPSBnX3N0cnZfbGVuZ3RoIChwYXJ0cykgKyAxOyAgICAgIC8qIGluY2wuIHRlcm1pbmF0b3IgKi8KLSAgICBwYXJ0cyA9IGdfcmVuZXcgKGdjaGFyICosIHBhcnRzLCBudW1fcGFydHMgKyAxKTsKLSAgICBtZW1tb3ZlIChwYXJ0cyArIDEsIHBhcnRzLCBudW1fcGFydHMgKiBzaXplb2YgKGdjaGFyICopKTsKLSAgICBwYXJ0c1swXSA9IGdfc3RyZHVwICgiLyIpOwotICB9Ci0KLSAgY2xlYW5fcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWV2IChwYXJ0cyk7Ci0gIGdfc3RyZnJlZXYgKHBhcnRzKTsKLSAgcmV0dXJuIGNsZWFuX3BhdGg7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZmlsZV9wYXRoX2NvbnRhaW5zX3JlbGF0aXZlcyAoY29uc3QgZ2NoYXIgKiBwYXRoKQotewotICByZXR1cm4gKHN0cnN0ciAocGF0aCwgIi8uLyIpICE9IE5VTEwgfHwgc3Ryc3RyIChwYXRoLCAiLy4uLyIpICE9IE5VTEwgfHwKLSAgICAgIHN0cnN0ciAocGF0aCwgR19ESVJfU0VQQVJBVE9SX1MgIi4iIEdfRElSX1NFUEFSQVRPUl9TKSAhPSBOVUxMIHx8Ci0gICAgICBzdHJzdHIgKHBhdGgsIEdfRElSX1NFUEFSQVRPUl9TICIuLiIgR19ESVJfU0VQQVJBVE9SX1MpICE9IE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9maWxlbmFtZV90b191cmk6Ci0gKiBAZmlsZW5hbWU6IGFic29sdXRlIG9yIHJlbGF0aXZlIGZpbGUgbmFtZSBwYXRoCi0gKiBAZXJyb3I6IHBvaW50ZXIgdG8gZXJyb3IsIG9yICVOVUxMCi0gKgotICogU2ltaWxhciB0byBnX2ZpbGVuYW1lX3RvX3VyaSgpLCBidXQgYXR0ZW1wdHMgdG8gaGFuZGxlIHJlbGF0aXZlIGZpbGUgcGF0aHMKLSAqIGFzIHdlbGwuIEJlZm9yZSBjb252ZXJ0aW5nIEBmaWxlbmFtZSBpbnRvIGFuIFVSSSwgaXQgd2lsbCBiZSBwcmVmaXhlZCBieQotICogdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWYgaXQgaXMgYSByZWxhdGl2ZSBwYXRoLCBhbmQgdGhlbiB0aGUgcGF0aAotICogd2lsbCBiZSBjYW5vbmljYWxpc2VkIHNvIHRoYXQgaXQgZG9lc24ndCBjb250YWluIGFueSAnLi8nIG9yICcuLi8nIHNlZ21lbnRzLgotICoKLSAqIE9uIFdpbmRvd3MgI2ZpbGVuYW1lIHNob3VsZCBiZSBpbiBVVEYtOCBlbmNvZGluZy4KLSAqCi0gKiBSZXR1cm5zOiBuZXdseS1hbGxvY2F0ZWQgVVJJIHN0cmluZywgb3IgTlVMTCBvbiBlcnJvci4gVGhlIGNhbGxlciBtdXN0Ci0gKiAgIGZyZWUgdGhlIFVSSSBzdHJpbmcgd2l0aCBnX2ZyZWUoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gKi8KLWdjaGFyICoKLWdzdF9maWxlbmFtZV90b191cmkgKGNvbnN0IGdjaGFyICogZmlsZW5hbWUsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgZ2NoYXIgKmFic19sb2NhdGlvbiA9IE5VTEw7Ci0gIGdjaGFyICp1cmksICphYnNfY2xlYW47Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbGVuYW1lICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXJyb3IgPT0gTlVMTCB8fCAqZXJyb3IgPT0gTlVMTCwgTlVMTCk7Ci0KLSAgaWYgKGdfcGF0aF9pc19hYnNvbHV0ZSAoZmlsZW5hbWUpKSB7Ci0gICAgaWYgKCFmaWxlX3BhdGhfY29udGFpbnNfcmVsYXRpdmVzIChmaWxlbmFtZSkpIHsKLSAgICAgIHVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpIChmaWxlbmFtZSwgTlVMTCwgZXJyb3IpOwotICAgICAgZ290byBiZWFjaDsKLSAgICB9Ci0KLSAgICBhYnNfbG9jYXRpb24gPSBnX3N0cmR1cCAoZmlsZW5hbWUpOwotICB9IGVsc2UgewotICAgIGdjaGFyICpjd2Q7Ci0KLSAgICBjd2QgPSBnX2dldF9jdXJyZW50X2RpciAoKTsKLSAgICBhYnNfbG9jYXRpb24gPSBnX2J1aWxkX2ZpbGVuYW1lIChjd2QsIGZpbGVuYW1lLCBOVUxMKTsKLSAgICBnX2ZyZWUgKGN3ZCk7Ci0KLSAgICBpZiAoIWZpbGVfcGF0aF9jb250YWluc19yZWxhdGl2ZXMgKGFic19sb2NhdGlvbikpIHsKLSAgICAgIHVyaSA9IGdfZmlsZW5hbWVfdG9fdXJpIChhYnNfbG9jYXRpb24sIE5VTEwsIGVycm9yKTsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotICB9Ci0KLSAgLyogcGF0aCBpcyBub3cgYWJzb2x1dGUsIGJ1dCBjb250YWlucyAnLicgb3IgJy4uJyAqLwotICBhYnNfY2xlYW4gPSBnc3RfZmlsZV91dGlsc19jYW5vbmljYWxpc2VfcGF0aCAoYWJzX2xvY2F0aW9uKTsKLSAgR1NUX0xPRyAoIiclcycgLT4gJyVzJyAtPiAnJXMnIiwgZmlsZW5hbWUsIGFic19sb2NhdGlvbiwgYWJzX2NsZWFuKTsKLSAgdXJpID0gZ19maWxlbmFtZV90b191cmkgKGFic19jbGVhbiwgTlVMTCwgZXJyb3IpOwotICBnX2ZyZWUgKGFic19jbGVhbik7Ci0KLWJlYWNoOgotCi0gIGdfZnJlZSAoYWJzX2xvY2F0aW9uKTsKLSAgR1NUX0RFQlVHICgiJyVzJyAtPiAnJXMnIiwgZmlsZW5hbWUsIHVyaSk7Ci0gIHJldHVybiB1cmk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBHc3RVcmkgLSBHc3RNaW5pT2JqZWN0IHRvIHBhcnNlIGFuZCBtZXJnZSBVUklzIGFjY29yZGluZyB0byBJRVRGIFJGQyAzOTg2Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHVyaQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBVUkkgcGFyc2luZyBhbmQgbWFuaXB1bGF0aW9uLgotICoKLSAqIEEgI0dzdFVyaSBvYmplY3QgY2FuIGJlIHVzZWQgdG8gcGFyc2UgYW5kIHNwbGl0IGEgVVJJIHN0cmluZyBpbnRvIGl0cwotICogY29uc3RpdHVhbnQgcGFydHMuIFR3byAjR3N0VXJpIG9iamVjdHMgY2FuIGJlIGpvaW5lZCB0byBtYWtlIGEgbmV3ICNHc3RVcmkKLSAqIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIFJGQzM5ODYuCi0gKi8KLQotLyogRGVmaW5pdGlvbiBmb3IgR3N0VXJpIG9iamVjdCAqLwotc3RydWN0IF9Hc3RVcmkKLXsKLSAgLyo8IHByaXZhdGUgPiAqLwotICBHc3RNaW5pT2JqZWN0IG1pbmlfb2JqZWN0OwotICBnY2hhciAqc2NoZW1lOwotICBnY2hhciAqdXNlcmluZm87Ci0gIGdjaGFyICpob3N0OwotICBndWludCBwb3J0OwotICBHTGlzdCAqcGF0aDsKLSAgR0hhc2hUYWJsZSAqcXVlcnk7Ci0gIGdjaGFyICpmcmFnbWVudDsKLX07Ci0KLUdTVF9ERUZJTkVfTUlOSV9PQkpFQ1RfVFlQRSAoR3N0VXJpLCBnc3RfdXJpKTsKLQotc3RhdGljIEdzdFVyaSAqX2dzdF91cmlfY29weSAoY29uc3QgR3N0VXJpICogdXJpKTsKLXN0YXRpYyB2b2lkIF9nc3RfdXJpX2ZyZWUgKEdzdFVyaSAqIHVyaSk7Ci1zdGF0aWMgR3N0VXJpICpfZ3N0X3VyaV9uZXcgKHZvaWQpOwotc3RhdGljIEdMaXN0ICpfcmVtb3ZlX2RvdF9zZWdtZW50cyAoR0xpc3QgKiBwYXRoKTsKLQotLyogcHJpdmF0ZSBHc3RVcmkgZnVuY3Rpb25zICovCi0KLXN0YXRpYyBHc3RVcmkgKgotX2dzdF91cmlfbmV3ICh2b2lkKQotewotICBHc3RVcmkgKnVyaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2lzX2luaXRpYWxpemVkICgpLCBOVUxMKTsKLQotICB1cmkgPSBHU1RfVVJJX0NBU1QgKGdfc2xpY2VfbmV3MCAoR3N0VXJpKSk7Ci0KLSAgaWYgKHVyaSkKLSAgICBnc3RfbWluaV9vYmplY3RfaW5pdCAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHVyaSksIDAsIGdzdF91cmlfZ2V0X3R5cGUgKCksCi0gICAgICAgIChHc3RNaW5pT2JqZWN0Q29weUZ1bmN0aW9uKSBfZ3N0X3VyaV9jb3B5LCBOVUxMLAotICAgICAgICAoR3N0TWluaU9iamVjdEZyZWVGdW5jdGlvbikgX2dzdF91cmlfZnJlZSk7Ci0KLSAgcmV0dXJuIHVyaTsKLX0KLQotc3RhdGljIHZvaWQKLV9nc3RfdXJpX2ZyZWUgKEdzdFVyaSAqIHVyaSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSk7Ci0KLSAgZ19mcmVlICh1cmktPnNjaGVtZSk7Ci0gIGdfZnJlZSAodXJpLT51c2VyaW5mbyk7Ci0gIGdfZnJlZSAodXJpLT5ob3N0KTsKLSAgZ19saXN0X2ZyZWVfZnVsbCAodXJpLT5wYXRoLCBnX2ZyZWUpOwotICBpZiAodXJpLT5xdWVyeSkKLSAgICBnX2hhc2hfdGFibGVfdW5yZWYgKHVyaS0+cXVlcnkpOwotICBnX2ZyZWUgKHVyaS0+ZnJhZ21lbnQpOwotCi0gIGdfc2xpY2VfZnJlZTEgKHNpemVvZiAoKnVyaSksIHVyaSk7Ci19Ci0KLXN0YXRpYyBHSGFzaFRhYmxlICoKLV9nc3RfdXJpX2NvcHlfcXVlcnlfdGFibGUgKEdIYXNoVGFibGUgKiBvcmlnKQotewotICBHSGFzaFRhYmxlICpuZXcgPSBOVUxMOwotCi0gIGlmIChvcmlnICE9IE5VTEwpIHsKLSAgICBHSGFzaFRhYmxlSXRlciBpdGVyOwotICAgIGdwb2ludGVyIGtleSwgdmFsdWU7Ci0gICAgbmV3ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX2ZyZWUpOwotICAgIGdfaGFzaF90YWJsZV9pdGVyX2luaXQgKCZpdGVyLCBvcmlnKTsKLSAgICB3aGlsZSAoZ19oYXNoX3RhYmxlX2l0ZXJfbmV4dCAoJml0ZXIsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKG5ldywgZ19zdHJkdXAgKGtleSksIGdfc3RyZHVwICh2YWx1ZSkpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBuZXc7Ci19Ci0KLXN0YXRpYyBHc3RVcmkgKgotX2dzdF91cmlfY29weSAoY29uc3QgR3N0VXJpICogb3JpZ191cmkpCi17Ci0gIEdzdFVyaSAqbmV3X3VyaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAob3JpZ191cmkpLCBOVUxMKTsKLQotICBuZXdfdXJpID0gX2dzdF91cmlfbmV3ICgpOwotCi0gIGlmIChuZXdfdXJpKSB7Ci0gICAgbmV3X3VyaS0+c2NoZW1lID0gZ19zdHJkdXAgKG9yaWdfdXJpLT5zY2hlbWUpOwotICAgIG5ld191cmktPnVzZXJpbmZvID0gZ19zdHJkdXAgKG9yaWdfdXJpLT51c2VyaW5mbyk7Ci0gICAgbmV3X3VyaS0+aG9zdCA9IGdfc3RyZHVwIChvcmlnX3VyaS0+aG9zdCk7Ci0gICAgbmV3X3VyaS0+cG9ydCA9IG9yaWdfdXJpLT5wb3J0OwotICAgIG5ld191cmktPnBhdGggPSBnX2xpc3RfY29weV9kZWVwIChvcmlnX3VyaS0+cGF0aCwgKEdDb3B5RnVuYykgZ19zdHJkdXAsCi0gICAgICAgIE5VTEwpOwotICAgIG5ld191cmktPnF1ZXJ5ID0gX2dzdF91cmlfY29weV9xdWVyeV90YWJsZSAob3JpZ191cmktPnF1ZXJ5KTsKLSAgICBuZXdfdXJpLT5mcmFnbWVudCA9IGdfc3RyZHVwIChvcmlnX3VyaS0+ZnJhZ21lbnQpOwotICB9Ci0KLSAgcmV0dXJuIG5ld191cmk7Ci19Ci0KLS8qCi0gKiBfZ3N0X3VyaV9jb21wYXJlX2xpc3RzOgotICoKLSAqIENvbXBhcmUgdHdvIGxpc3RzIGZvciBlcXVhbGl0eS4gVGhpcyBjb21wYXJlcyB0aGUgdHdvIGxpc3RzLCBpdGVtIGZvciBpdGVtLAotICogY29tcGFyaW5nIGl0ZW1zIGluIHRoZSBzYW1lIHBvc2l0aW9uIGluIHRoZSB0d28gbGlzdHMuIElmIEBmaXJzdCBpcwotICogY29uc2lkZXJlZCBsZXNzIHRoYW4gQHNlY29uZCB0aGUgcmVzdWx0IHdpbGwgYmUgbmVnYXRpdmUuIElmIEBmaXJzdCBpcwotICogY29uc2lkZXJlZCB0byBiZSBtb3JlIHRoYW4gQHNlY29uZCB0aGVuIHRoZSByZXN1bHQgd2lsbCBiZSBwb3NpdGl2ZS4gSWYgdGhlCi0gKiBsaXN0cyBhcmUgY29uc2lkZXJlZCB0byBiZSBlcXVhbCB0aGVuIHRoZSByZXN1bHQgd2lsbCBiZSAwLiBJZiB0d28gbGlzdHMKLSAqIGhhdmUgdGhlIHNhbWUgaXRlbXMsIGJ1dCBvbmUgbGlzdCBpcyBzaG9ydGVyIHRoYW4gdGhlIG90aGVyLCB0aGVuIHRoZQotICogc2hvcnRlciBsaXN0IGlzIGNvbnNpZGVyZWQgdG8gYmUgbGVzcyB0aGFuIHRoZSBsb25nZXIgbGlzdC4KLSAqLwotc3RhdGljIGdpbnQKLV9nc3RfdXJpX2NvbXBhcmVfbGlzdHMgKEdMaXN0ICogZmlyc3QsIEdMaXN0ICogc2Vjb25kLCBHQ29tcGFyZUZ1bmMgY21wX2ZuKQotewotICBHTGlzdCAqaXRyMSwgKml0cjI7Ci0gIGdpbnQgcmVzdWx0OwotCi0gIGZvciAoaXRyMSA9IGZpcnN0LCBpdHIyID0gc2Vjb25kOwotICAgICAgaXRyMSAhPSBOVUxMIHx8IGl0cjIgIT0gTlVMTDsgaXRyMSA9IGl0cjEtPm5leHQsIGl0cjIgPSBpdHIyLT5uZXh0KSB7Ci0gICAgaWYgKGl0cjEgPT0gTlVMTCkKLSAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoaXRyMiA9PSBOVUxMKQotICAgICAgcmV0dXJuIDE7Ci0gICAgcmVzdWx0ID0gY21wX2ZuIChpdHIxLT5kYXRhLCBpdHIyLT5kYXRhKTsKLSAgICBpZiAocmVzdWx0ICE9IDApCi0gICAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIHJldHVybiAwOwotfQotCi10eXBlZGVmIGVudW0KLXsKLSAgX0dTVF9VUklfTk9STUFMSVpFX0xPV0VSQ0FTRSA9IDEsCi0gIF9HU1RfVVJJX05PUk1BTElaRV9VUFBFUkNBU0UgPSAyCi19IF9Hc3RVcmlOb3JtYWxpemF0aW9uczsKLQotLyoKLSAqIEZpbmQgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGhhc24ndCBiZWVuIG5vcm1hbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBAZmxhZ3MuCi0gKi8KLXN0YXRpYyBnY2hhciAqCi1fZ3N0X3VyaV9maXJzdF9ub25fbm9ybWFsaXplZF9jaGFyIChnY2hhciAqIHN0ciwgZ3VpbnQgZmxhZ3MpCi17Ci0gIGdjaGFyICpwb3M7Ci0KLSAgaWYgKHN0ciA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIGZvciAocG9zID0gc3RyOyAqcG9zOyBwb3MrKykgewotICAgIGlmICgoZmxhZ3MgJiBfR1NUX1VSSV9OT1JNQUxJWkVfVVBQRVJDQVNFKSAmJiBnX2FzY2lpX2lzbG93ZXIgKCpwb3MpKQotICAgICAgcmV0dXJuIHBvczsKLSAgICBpZiAoKGZsYWdzICYgX0dTVF9VUklfTk9STUFMSVpFX0xPV0VSQ0FTRSkgJiYgZ19hc2NpaV9pc3VwcGVyICgqcG9zKSkKLSAgICAgIHJldHVybiBwb3M7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF91cmlfbm9ybWFsaXplX2xvd2VyY2FzZSAoZ2NoYXIgKiBzdHIpCi17Ci0gIGdjaGFyICpwb3M7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGZvciAocG9zID0gX2dzdF91cmlfZmlyc3Rfbm9uX25vcm1hbGl6ZWRfY2hhciAoc3RyLAotICAgICAgICAgIF9HU1RfVVJJX05PUk1BTElaRV9MT1dFUkNBU0UpOwotICAgICAgcG9zICE9IE5VTEw7Ci0gICAgICBwb3MgPSBfZ3N0X3VyaV9maXJzdF9ub25fbm9ybWFsaXplZF9jaGFyIChwb3MgKyAxLAotICAgICAgICAgIF9HU1RfVVJJX05PUk1BTElaRV9MT1dFUkNBU0UpKSB7Ci0gICAgKnBvcyA9IGdfYXNjaWlfdG9sb3dlciAoKnBvcyk7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgX2dzdF91cmlfbm9ybWFsaXplX3NjaGVtZSBfZ3N0X3VyaV9ub3JtYWxpemVfbG93ZXJjYXNlCi0jZGVmaW5lIF9nc3RfdXJpX25vcm1hbGl6ZV9ob3N0bmFtZSBfZ3N0X3VyaV9ub3JtYWxpemVfbG93ZXJjYXNlCi0KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF91cmlfbm9ybWFsaXplX3BhdGggKEdMaXN0ICoqIHBhdGgpCi17Ci0gIEdMaXN0ICpuZXdfcGF0aDsKLQotICBuZXdfcGF0aCA9IF9yZW1vdmVfZG90X3NlZ21lbnRzICgqcGF0aCk7Ci0gIGlmIChfZ3N0X3VyaV9jb21wYXJlX2xpc3RzIChuZXdfcGF0aCwgKnBhdGgsIChHQ29tcGFyZUZ1bmMpIGdfc3RyY21wMCkgIT0gMCkgewotICAgIGdfbGlzdF9mcmVlX2Z1bGwgKCpwYXRoLCBnX2ZyZWUpOwotICAgICpwYXRoID0gbmV3X3BhdGg7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgZ19saXN0X2ZyZWVfZnVsbCAobmV3X3BhdGgsIGdfZnJlZSk7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV9nc3RfdXJpX25vcm1hbGl6ZV9zdHJfbm9vcCAoZ2NoYXIgKiBzdHIpCi17Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fZ3N0X3VyaV9ub3JtYWxpemVfdGFibGVfbm9vcCAoR0hhc2hUYWJsZSAqIHRhYmxlKQotewotICByZXR1cm4gRkFMU0U7Ci19Ci0KLSNkZWZpbmUgX2dzdF91cmlfbm9ybWFsaXplX3VzZXJpbmZvIF9nc3RfdXJpX25vcm1hbGl6ZV9zdHJfbm9vcAotI2RlZmluZSBfZ3N0X3VyaV9ub3JtYWxpemVfcXVlcnkgX2dzdF91cmlfbm9ybWFsaXplX3RhYmxlX25vb3AKLSNkZWZpbmUgX2dzdF91cmlfbm9ybWFsaXplX2ZyYWdtZW50IF9nc3RfdXJpX25vcm1hbGl6ZV9zdHJfbm9vcAotCi0vKiBSRkMgMzk4NiBmdW5jdGlvbnMgKi8KLQotc3RhdGljIEdMaXN0ICoKLV9tZXJnZSAoR0xpc3QgKiBiYXNlLCBHTGlzdCAqIHBhdGgpCi17Ci0gIEdMaXN0ICpyZXQsICpwYXRoX2NvcHksICpsYXN0OwotCi0gIHBhdGhfY29weSA9IGdfbGlzdF9jb3B5X2RlZXAgKHBhdGgsIChHQ29weUZ1bmMpIGdfc3RyZHVwLCBOVUxMKTsKLSAgLyogaWYgYmFzZSBpcyBOVUxMIG1ha2UgcGF0aCBhYnNvbHV0ZSAqLwotICBpZiAoYmFzZSA9PSBOVUxMKSB7Ci0gICAgaWYgKHBhdGhfY29weSAhPSBOVUxMICYmIHBhdGhfY29weS0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICBwYXRoX2NvcHkgPSBnX2xpc3RfcHJlcGVuZCAocGF0aF9jb3B5LCBOVUxMKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhdGhfY29weTsKLSAgfQotCi0gIHJldCA9IGdfbGlzdF9jb3B5X2RlZXAgKGJhc2UsIChHQ29weUZ1bmMpIGdfc3RyZHVwLCBOVUxMKTsKLSAgbGFzdCA9IGdfbGlzdF9sYXN0IChyZXQpOwotICByZXQgPSBnX2xpc3RfcmVtb3ZlX2xpbmsgKHJldCwgbGFzdCk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGxhc3QsIGdfZnJlZSk7Ci0gIHJldCA9IGdfbGlzdF9jb25jYXQgKHJldCwgcGF0aF9jb3B5KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR0xpc3QgKgotX3JlbW92ZV9kb3Rfc2VnbWVudHMgKEdMaXN0ICogcGF0aCkKLXsKLSAgR0xpc3QgKm91dCwgKmVsZW0sICpuZXh0OwotCi0gIGlmIChwYXRoID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgb3V0ID0gZ19saXN0X2NvcHlfZGVlcCAocGF0aCwgKEdDb3B5RnVuYykgZ19zdHJkdXAsIE5VTEwpOwotCi0gIGZvciAoZWxlbSA9IG91dDsgZWxlbTsgZWxlbSA9IG5leHQpIHsKLSAgICBuZXh0ID0gZWxlbS0+bmV4dDsKLSAgICBpZiAoZWxlbS0+ZGF0YSA9PSBOVUxMICYmIGVsZW0gIT0gb3V0ICYmIG5leHQgIT0gTlVMTCkgewotICAgICAgb3V0ID0gZ19saXN0X2RlbGV0ZV9saW5rIChvdXQsIGVsZW0pOwotICAgIH0gZWxzZSBpZiAoZ19zdHJjbXAwIChlbGVtLT5kYXRhLCAiLiIpID09IDApIHsKLSAgICAgIGdfZnJlZSAoZWxlbS0+ZGF0YSk7Ci0gICAgICBvdXQgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKG91dCwgZWxlbSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cmNtcDAgKGVsZW0tPmRhdGEsICIuLiIpID09IDApIHsKLSAgICAgIEdMaXN0ICpwcmV2ID0gZ19saXN0X3ByZXZpb3VzIChlbGVtKTsKLSAgICAgIGlmIChwcmV2ICYmIChwcmV2ICE9IG91dCB8fCBwcmV2LT5kYXRhICE9IE5VTEwpKSB7Ci0gICAgICAgIGdfZnJlZSAocHJldi0+ZGF0YSk7Ci0gICAgICAgIG91dCA9IGdfbGlzdF9kZWxldGVfbGluayAob3V0LCBwcmV2KTsKLSAgICAgIH0KLSAgICAgIGdfZnJlZSAoZWxlbS0+ZGF0YSk7Ci0gICAgICBpZiAobmV4dCAhPSBOVUxMKSB7Ci0gICAgICAgIG91dCA9IGdfbGlzdF9kZWxldGVfbGluayAob3V0LCBlbGVtKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIHBhdGggZW5kcyBpbiAnLy4uJyBXZSBuZWVkIHRvIGtlZXAgdGhlIGxhc3QgJy8nICovCi0gICAgICAgIGVsZW0tPmRhdGEgPSBOVUxMOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBvdXQ7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1fZ3N0X3VyaV9lc2NhcGVfdXNlcmluZm8gKGNvbnN0IGdjaGFyICogdXNlcmluZm8pCi17Ci0gIHJldHVybiBnX3VyaV9lc2NhcGVfc3RyaW5nICh1c2VyaW5mbywKLSAgICAgIEdfVVJJX1JFU0VSVkVEX0NIQVJTX0FMTE9XRURfSU5fVVNFUklORk8sIEZBTFNFKTsKLX0KLQotc3RhdGljIGdjaGFyICoKLV9nc3RfdXJpX2VzY2FwZV9ob3N0IChjb25zdCBnY2hhciAqIGhvc3QpCi17Ci0gIHJldHVybiBnX3VyaV9lc2NhcGVfc3RyaW5nIChob3N0LAotICAgICAgR19VUklfUkVTRVJWRURfQ0hBUlNfU1VCQ09NUE9ORU5UX0RFTElNSVRFUlMsIEZBTFNFKTsKLX0KLQotc3RhdGljIGdjaGFyICoKLV9nc3RfdXJpX2VzY2FwZV9ob3N0X2NvbG9uIChjb25zdCBnY2hhciAqIGhvc3QpCi17Ci0gIHJldHVybiBnX3VyaV9lc2NhcGVfc3RyaW5nIChob3N0LAotICAgICAgR19VUklfUkVTRVJWRURfQ0hBUlNfU1VCQ09NUE9ORU5UX0RFTElNSVRFUlMgIjoiLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1fZ3N0X3VyaV9lc2NhcGVfcGF0aF9zZWdtZW50IChjb25zdCBnY2hhciAqIHNlZ21lbnQpCi17Ci0gIHJldHVybiBnX3VyaV9lc2NhcGVfc3RyaW5nIChzZWdtZW50LAotICAgICAgR19VUklfUkVTRVJWRURfQ0hBUlNfQUxMT1dFRF9JTl9QQVRIX0VMRU1FTlQsIEZBTFNFKTsKLX0KLQotc3RhdGljIGdjaGFyICoKLV9nc3RfdXJpX2VzY2FwZV9odHRwX3F1ZXJ5X2VsZW1lbnQgKGNvbnN0IGdjaGFyICogZWxlbWVudCkKLXsKLSAgZ2NoYXIgKnJldCwgKmM7Ci0KLSAgcmV0ID0gZ191cmlfZXNjYXBlX3N0cmluZyAoZWxlbWVudCwgIiEkJygpKiw7OkAvPyAiLCBGQUxTRSk7Ci0gIGZvciAoYyA9IHJldDsgKmM7IGMrKykKLSAgICBpZiAoKmMgPT0gJyAnKQotICAgICAgKmMgPSAnKyc7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1fZ3N0X3VyaV9lc2NhcGVfZnJhZ21lbnQgKGNvbnN0IGdjaGFyICogZnJhZ21lbnQpCi17Ci0gIHJldHVybiBnX3VyaV9lc2NhcGVfc3RyaW5nIChmcmFnbWVudCwKLSAgICAgIEdfVVJJX1JFU0VSVkVEX0NIQVJTX0FMTE9XRURfSU5fUEFUSCAiPyIsIEZBTFNFKTsKLX0KLQotc3RhdGljIEdMaXN0ICoKLV9nc3RfdXJpX3N0cmluZ190b19saXN0IChjb25zdCBnY2hhciAqIHN0ciwgY29uc3QgZ2NoYXIgKiBzZXAsIGdib29sZWFuIGNvbnZlcnQsCi0gICAgZ2Jvb2xlYW4gdW5lc2NhcGUpCi17Ci0gIEdMaXN0ICpuZXdfbGlzdCA9IE5VTEw7Ci0KLSAgaWYgKHN0cikgewotICAgIGd1aW50IHBjdF9zZXBfbGVuID0gMDsKLSAgICBnY2hhciAqcGN0X3NlcCA9IE5VTEw7Ci0gICAgZ2NoYXIgKipzcGxpdF9zdHI7Ci0KLSAgICBpZiAoY29udmVydCAmJiAhdW5lc2NhcGUpIHsKLSAgICAgIHBjdF9zZXAgPSBnX3N0cmR1cF9wcmludGYgKCIlJSUyLjJYIiwgKGd1aW50KSAoKnNlcCkpOwotICAgICAgcGN0X3NlcF9sZW4gPSAzOwotICAgIH0KLQotICAgIHNwbGl0X3N0ciA9IGdfc3Ryc3BsaXQgKHN0ciwgc2VwLCAtMSk7Ci0gICAgaWYgKHNwbGl0X3N0cikgewotICAgICAgZ2NoYXIgKipuZXh0X2VsZW07Ci0gICAgICBmb3IgKG5leHRfZWxlbSA9IHNwbGl0X3N0cjsgKm5leHRfZWxlbTsgbmV4dF9lbGVtICs9IDEpIHsKLSAgICAgICAgZ2NoYXIgKmVsZW0gPSAqbmV4dF9lbGVtOwotICAgICAgICBpZiAoKmVsZW0gPT0gJ1wwJykgewotICAgICAgICAgIG5ld19saXN0ID0gZ19saXN0X2FwcGVuZCAobmV3X2xpc3QsIE5VTEwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChjb252ZXJ0ICYmICF1bmVzY2FwZSkgewotICAgICAgICAgICAgZ2NoYXIgKm5leHRfc2VwOwotICAgICAgICAgICAgZm9yIChuZXh0X3NlcCA9IHN0cmNhc2VzdHIgKGVsZW0sIHBjdF9zZXApOyBuZXh0X3NlcDsKLSAgICAgICAgICAgICAgICBuZXh0X3NlcCA9IHN0cmNhc2VzdHIgKG5leHRfc2VwICsgMSwgcGN0X3NlcCkpIHsKLSAgICAgICAgICAgICAgKm5leHRfc2VwID0gKnNlcDsKLSAgICAgICAgICAgICAgbWVtbW92ZSAobmV4dF9zZXAgKyAxLCBuZXh0X3NlcCArIHBjdF9zZXBfbGVuLAotICAgICAgICAgICAgICAgICAgc3RybGVuIChuZXh0X3NlcCArIHBjdF9zZXBfbGVuKSArIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodW5lc2NhcGUpIHsKLSAgICAgICAgICAgICpuZXh0X2VsZW0gPSBnX3VyaV91bmVzY2FwZV9zdHJpbmcgKGVsZW0sIE5VTEwpOwotICAgICAgICAgICAgZ19mcmVlIChlbGVtKTsKLSAgICAgICAgICAgIGVsZW0gPSAqbmV4dF9lbGVtOwotICAgICAgICAgIH0KLSAgICAgICAgICBuZXdfbGlzdCA9IGdfbGlzdF9hcHBlbmQgKG5ld19saXN0LCBnX3N0cmR1cCAoZWxlbSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdfc3RyZnJlZXYgKHNwbGl0X3N0cik7Ci0gICAgaWYgKGNvbnZlcnQgJiYgIXVuZXNjYXBlKQotICAgICAgZ19mcmVlIChwY3Rfc2VwKTsKLSAgfQotCi0gIHJldHVybiBuZXdfbGlzdDsKLX0KLQotc3RhdGljIEdIYXNoVGFibGUgKgotX2dzdF91cmlfc3RyaW5nX3RvX3RhYmxlIChjb25zdCBnY2hhciAqIHN0ciwgY29uc3QgZ2NoYXIgKiBwYXJ0X3NlcCwKLSAgICBjb25zdCBnY2hhciAqIGt2X3NlcCwgZ2Jvb2xlYW4gY29udmVydCwgZ2Jvb2xlYW4gdW5lc2NhcGUpCi17Ci0gIEdIYXNoVGFibGUgKm5ld190YWJsZSA9IE5VTEw7Ci0KLSAgaWYgKHN0cikgewotICAgIGdjaGFyICpwY3RfcGFydF9zZXAgPSBOVUxMLCAqcGN0X2t2X3NlcCA9IE5VTEw7Ci0gICAgZ2NoYXIgKipzcGxpdF9wYXJ0czsKLQotICAgIG5ld190YWJsZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19mcmVlKTsKLQotICAgIGlmIChjb252ZXJ0ICYmICF1bmVzY2FwZSkgewotICAgICAgcGN0X3BhcnRfc2VwID0gZ19zdHJkdXBfcHJpbnRmICgiJSUlMi4yWCIsIChndWludCkgKCpwYXJ0X3NlcCkpOwotICAgICAgcGN0X2t2X3NlcCA9IGdfc3RyZHVwX3ByaW50ZiAoIiUlJTIuMlgiLCAoZ3VpbnQpICgqa3Zfc2VwKSk7Ci0gICAgfQotCi0gICAgc3BsaXRfcGFydHMgPSBnX3N0cnNwbGl0IChzdHIsIHBhcnRfc2VwLCAtMSk7Ci0gICAgaWYgKHNwbGl0X3BhcnRzKSB7Ci0gICAgICBnY2hhciAqKm5leHRfcGFydDsKLSAgICAgIGZvciAobmV4dF9wYXJ0ID0gc3BsaXRfcGFydHM7ICpuZXh0X3BhcnQ7IG5leHRfcGFydCArPSAxKSB7Ci0gICAgICAgIGdjaGFyICpwYXJ0ID0gKm5leHRfcGFydDsKLSAgICAgICAgZ2NoYXIgKmt2X3NlcF9wb3M7Ci0gICAgICAgIGdjaGFyICprZXksICp2YWx1ZTsKLSAgICAgICAgLyogaWYgd2UgYXJlIGNvbnZlcnRpbmcgcGVyY2VudCBlbmNvZGVkIHZlcnNpb25zIG9mIHNlcGFyYXRvcnMgdGhlbgotICAgICAgICAgKiAgc3Vic3RpdHV0ZSB0aGUgcGFydCBzZXBhcmF0b3Igbm93LiAqLwotICAgICAgICBpZiAoY29udmVydCAmJiAhdW5lc2NhcGUpIHsKLSAgICAgICAgICBnY2hhciAqbmV4dF9zZXA7Ci0gICAgICAgICAgZm9yIChuZXh0X3NlcCA9IHN0cmNhc2VzdHIgKHBhcnQsIHBjdF9wYXJ0X3NlcCk7IG5leHRfc2VwOwotICAgICAgICAgICAgICBuZXh0X3NlcCA9IHN0cmNhc2VzdHIgKG5leHRfc2VwICsgMSwgcGN0X3BhcnRfc2VwKSkgewotICAgICAgICAgICAgKm5leHRfc2VwID0gKnBhcnRfc2VwOwotICAgICAgICAgICAgbWVtbW92ZSAobmV4dF9zZXAgKyAxLCBuZXh0X3NlcCArIDMsIHN0cmxlbiAobmV4dF9zZXAgKyAzKSArIDEpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBmaW5kIHRoZSBrZXkvdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiB0aGUgcGFydCAqLwotICAgICAgICBrdl9zZXBfcG9zID0gZ19zdHJzdHJfbGVuIChwYXJ0LCAtMSwga3Zfc2VwKTsKLSAgICAgICAgaWYgKGt2X3NlcF9wb3MgPT0gTlVMTCkgewotICAgICAgICAgIGlmICh1bmVzY2FwZSkgewotICAgICAgICAgICAga2V5ID0gZ191cmlfdW5lc2NhcGVfc3RyaW5nIChwYXJ0LCBOVUxMKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga2V5ID0gZ19zdHJkdXAgKHBhcnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICB2YWx1ZSA9IE5VTEw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKHVuZXNjYXBlKSB7Ci0gICAgICAgICAgICBrZXkgPSBnX3VyaV91bmVzY2FwZV9zZWdtZW50IChwYXJ0LCBrdl9zZXBfcG9zLCBOVUxMKTsKLSAgICAgICAgICAgIHZhbHVlID0gZ191cmlfdW5lc2NhcGVfc3RyaW5nIChrdl9zZXBfcG9zICsgMSwgTlVMTCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGtleSA9IGdfc3RybmR1cCAocGFydCwga3Zfc2VwX3BvcyAtIHBhcnQpOwotICAgICAgICAgICAgdmFsdWUgPSBnX3N0cmR1cCAoa3Zfc2VwX3BvcyArIDEpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBpZiB3ZSBhcmUgY29udmVydGluZyBwZXJjZW50IGVuY29kZWQgdmVyc2lvbnMgb2Ygc2VwYXJhdG9ycyB0aGVuCi0gICAgICAgICAqICBzdWJzdGl0dXRlIHRoZSBrZXkvdmFsdWUgc2VwYXJhdG9yIGluIGJvdGgga2V5IGFuZCB2YWx1ZSBub3cuICovCi0gICAgICAgIGlmIChjb252ZXJ0ICYmICF1bmVzY2FwZSkgewotICAgICAgICAgIGdjaGFyICpuZXh0X3NlcDsKLSAgICAgICAgICBmb3IgKG5leHRfc2VwID0gc3RyY2FzZXN0ciAoa2V5LCBwY3Rfa3Zfc2VwKTsgbmV4dF9zZXA7Ci0gICAgICAgICAgICAgIG5leHRfc2VwID0gc3RyY2FzZXN0ciAobmV4dF9zZXAgKyAxLCBwY3Rfa3Zfc2VwKSkgewotICAgICAgICAgICAgKm5leHRfc2VwID0gKmt2X3NlcDsKLSAgICAgICAgICAgIG1lbW1vdmUgKG5leHRfc2VwICsgMSwgbmV4dF9zZXAgKyAzLCBzdHJsZW4gKG5leHRfc2VwICsgMykgKyAxKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBmb3IgKG5leHRfc2VwID0gc3RyY2FzZXN0ciAodmFsdWUsIHBjdF9rdl9zZXApOyBuZXh0X3NlcDsKLSAgICAgICAgICAgICAgICBuZXh0X3NlcCA9IHN0cmNhc2VzdHIgKG5leHRfc2VwICsgMSwgcGN0X2t2X3NlcCkpIHsKLSAgICAgICAgICAgICAgKm5leHRfc2VwID0gKmt2X3NlcDsKLSAgICAgICAgICAgICAgbWVtbW92ZSAobmV4dF9zZXAgKyAxLCBuZXh0X3NlcCArIDMsIHN0cmxlbiAobmV4dF9zZXAgKyAzKSArIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBhZGQgdmFsdWUgdG8gdGhlIHRhYmxlICovCi0gICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKG5ld190YWJsZSwga2V5LCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIHRpZHkgdXAgKi8KLSAgICBnX3N0cmZyZWV2IChzcGxpdF9wYXJ0cyk7Ci0gICAgaWYgKGNvbnZlcnQgJiYgIXVuZXNjYXBlKSB7Ci0gICAgICBnX2ZyZWUgKHBjdF9wYXJ0X3NlcCk7Ci0gICAgICBnX2ZyZWUgKHBjdF9rdl9zZXApOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBuZXdfdGFibGU7Ci19Ci0KLQotLyoKLSAqIE1ldGhvZCBkZWZpbml0aW9ucy4KLSAqLwotCi0vKioKLSAqIGdzdF91cmlfbmV3OgotICogQHNjaGVtZTogKG51bGxhYmxlKTogVGhlIHNjaGVtZSBmb3IgdGhlIG5ldyBVUkkuCi0gKiBAdXNlcmluZm86IChudWxsYWJsZSk6IFRoZSB1c2VyLWluZm8gZm9yIHRoZSBuZXcgVVJJLgotICogQGhvc3Q6IChudWxsYWJsZSk6IFRoZSBob3N0IG5hbWUgZm9yIHRoZSBuZXcgVVJJLgotICogQHBvcnQ6IFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIG5ldyBVUkkgb3IgJUdTVF9VUklfTk9fUE9SVC4KLSAqIEBwYXRoOiAobnVsbGFibGUpOiBUaGUgcGF0aCBmb3IgdGhlIG5ldyBVUkkgd2l0aCAnLycgc2VwYXJhdGluZyBwYXRoCi0gKiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy4KLSAqIEBxdWVyeTogKG51bGxhYmxlKTogVGhlIHF1ZXJ5IHN0cmluZyBmb3IgdGhlIG5ldyBVUkkgd2l0aCAnJicgc2VwYXJhdGluZwotICogICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5IGVsZW1lbnRzLiBFbGVtZW50cyBjb250YWluaW5nICcmJyBjaGFyYWN0ZXJzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGVuY29kZSB0aGVtIGFzICImcGVyY250OzI2Ii4KLSAqIEBmcmFnbWVudDogKG51bGxhYmxlKTogVGhlIGZyYWdtZW50IG5hbWUgZm9yIHRoZSBuZXcgVVJJLgotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdFVyaSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gVVJJIHBhcnRzLiBUaGUgcGF0aCBhbmQgcXVlcnkKLSAqIHN0cmluZ3Mgd2lsbCBiZSBicm9rZW4gZG93biBpbnRvIHRoZWlyIGVsZW1lbnRzLiBBbGwgc3RyaW5ncyBzaG91bGQgbm90IGJlCi0gKiBlc2NhcGVkIGV4Y2VwdCB3aGVyZSBpbmRpY2F0ZWQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIG5ldyAjR3N0VXJpIG9iamVjdC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdFVyaSAqCi1nc3RfdXJpX25ldyAoY29uc3QgZ2NoYXIgKiBzY2hlbWUsIGNvbnN0IGdjaGFyICogdXNlcmluZm8sIGNvbnN0IGdjaGFyICogaG9zdCwKLSAgICBndWludCBwb3J0LCBjb25zdCBnY2hhciAqIHBhdGgsIGNvbnN0IGdjaGFyICogcXVlcnksIGNvbnN0IGdjaGFyICogZnJhZ21lbnQpCi17Ci0gIEdzdFVyaSAqbmV3X3VyaTsKLQotICBuZXdfdXJpID0gX2dzdF91cmlfbmV3ICgpOwotICBpZiAobmV3X3VyaSkgewotICAgIG5ld191cmktPnNjaGVtZSA9IGdfc3RyZHVwIChzY2hlbWUpOwotICAgIG5ld191cmktPnVzZXJpbmZvID0gZ19zdHJkdXAgKHVzZXJpbmZvKTsKLSAgICBuZXdfdXJpLT5ob3N0ID0gZ19zdHJkdXAgKGhvc3QpOwotICAgIG5ld191cmktPnBvcnQgPSBwb3J0OwotICAgIG5ld191cmktPnBhdGggPSBfZ3N0X3VyaV9zdHJpbmdfdG9fbGlzdCAocGF0aCwgIi8iLCBGQUxTRSwgRkFMU0UpOwotICAgIG5ld191cmktPnF1ZXJ5ID0gX2dzdF91cmlfc3RyaW5nX3RvX3RhYmxlIChxdWVyeSwgIiYiLCAiPSIsIFRSVUUsIEZBTFNFKTsKLSAgICBuZXdfdXJpLT5mcmFnbWVudCA9IGdfc3RyZHVwIChmcmFnbWVudCk7Ci0gIH0KLQotICByZXR1cm4gbmV3X3VyaTsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX25ld193aXRoX2Jhc2U6Ci0gKiBAYmFzZTogKHRyYW5zZmVyIG5vbmUpKG51bGxhYmxlKTogVGhlIGJhc2UgVVJJIHRvIGpvaW4gdGhlIG5ldyBVUkkgdG8uCi0gKiBAc2NoZW1lOiAobnVsbGFibGUpOiBUaGUgc2NoZW1lIGZvciB0aGUgbmV3IFVSSS4KLSAqIEB1c2VyaW5mbzogKG51bGxhYmxlKTogVGhlIHVzZXItaW5mbyBmb3IgdGhlIG5ldyBVUkkuCi0gKiBAaG9zdDogKG51bGxhYmxlKTogVGhlIGhvc3QgbmFtZSBmb3IgdGhlIG5ldyBVUkkuCi0gKiBAcG9ydDogVGhlIHBvcnQgbnVtYmVyIGZvciB0aGUgbmV3IFVSSSBvciAlR1NUX1VSSV9OT19QT1JULgotICogQHBhdGg6IChudWxsYWJsZSk6IFRoZSBwYXRoIGZvciB0aGUgbmV3IFVSSSB3aXRoICcvJyBzZXBhcmF0aW5nIHBhdGgKLSAqICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLgotICogQHF1ZXJ5OiAobnVsbGFibGUpOiBUaGUgcXVlcnkgc3RyaW5nIGZvciB0aGUgbmV3IFVSSSB3aXRoICcmJyBzZXBhcmF0aW5nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgZWxlbWVudHMuIEVsZW1lbnRzIGNvbnRhaW5pbmcgJyYnIGNoYXJhY3RlcnMKLSAqICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgZW5jb2RlIHRoZW0gYXMgIiZwZXJjbnQ7MjYiLgotICogQGZyYWdtZW50OiAobnVsbGFibGUpOiBUaGUgZnJhZ21lbnQgbmFtZSBmb3IgdGhlIG5ldyBVUkkuCi0gKgotICogTGlrZSBnc3RfdXJpX25ldygpLCBidXQgam9pbnMgdGhlIG5ldyBVUkkgb250byBhIGJhc2UgVVJJLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogVGhlIG5ldyBVUkkgam9pbmVkIG9udG8gQGJhc2UuCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RVcmkgKgotZ3N0X3VyaV9uZXdfd2l0aF9iYXNlIChHc3RVcmkgKiBiYXNlLCBjb25zdCBnY2hhciAqIHNjaGVtZSwKLSAgICBjb25zdCBnY2hhciAqIHVzZXJpbmZvLCBjb25zdCBnY2hhciAqIGhvc3QsIGd1aW50IHBvcnQsIGNvbnN0IGdjaGFyICogcGF0aCwKLSAgICBjb25zdCBnY2hhciAqIHF1ZXJ5LCBjb25zdCBnY2hhciAqIGZyYWdtZW50KQotewotICBHc3RVcmkgKm5ld19yZWxfdXJpOwotICBHc3RVcmkgKm5ld191cmk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJhc2UgPT0gTlVMTCB8fCBHU1RfSVNfVVJJIChiYXNlKSwgTlVMTCk7Ci0KLSAgbmV3X3JlbF91cmkgPSBnc3RfdXJpX25ldyAoc2NoZW1lLCB1c2VyaW5mbywgaG9zdCwgcG9ydCwgcGF0aCwgcXVlcnksCi0gICAgICBmcmFnbWVudCk7Ci0gIG5ld191cmkgPSBnc3RfdXJpX2pvaW4gKGJhc2UsIG5ld19yZWxfdXJpKTsKLSAgZ3N0X3VyaV91bnJlZiAobmV3X3JlbF91cmkpOwotCi0gIHJldHVybiBuZXdfdXJpOwotfQotCi0vKioKLSAqIGdzdF91cmlfZnJvbV9zdHJpbmc6Ci0gKiBAdXJpOiBUaGUgVVJJIHN0cmluZyB0byBwYXJzZS4KLSAqCi0gKiBQYXJzZXMgYSBVUkkgc3RyaW5nIGludG8gYSBuZXcgI0dzdFVyaSBvYmplY3QuIFdpbGwgcmV0dXJuIE5VTEwgaWYgdGhlIFVSSQotICogY2Fubm90IGJlIHBhcnNlZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkobnVsbGFibGUpOiBBIG5ldyAjR3N0VXJpIG9iamVjdCwgb3IgTlVMTC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdFVyaSAqCi1nc3RfdXJpX2Zyb21fc3RyaW5nIChjb25zdCBnY2hhciAqIHVyaSkKLXsKLSAgY29uc3QgZ2NoYXIgKm9yaWdfdXJpID0gdXJpOwotICBHc3RVcmkgKnVyaV9vYmo7Ci0KLSAgdXJpX29iaiA9IF9nc3RfdXJpX25ldyAoKTsKLQotICBpZiAodXJpX29iaiAmJiB1cmkgIT0gTlVMTCkgewotICAgIGludCBpID0gMDsKLQotICAgIC8qIGJlIGhlbHBmdWwgYW5kIHNraXAgaW5pdGlhbCB3aGl0ZSBzcGFjZSAqLwotICAgIHdoaWxlICgqdXJpID09ICdcdicgfHwgZ19hc2NpaV9pc3NwYWNlICgqdXJpKSkKLSAgICAgIHVyaSsrOwotCi0gICAgaWYgKGdfYXNjaWlfaXNhbHBoYSAodXJpW2ldKSkgewotICAgICAgLyogZmluZCBlbmQgb2Ygc2NoZW1lIG5hbWUgKi8KLSAgICAgIGkrKzsKLSAgICAgIHdoaWxlIChnX2FzY2lpX2lzYWxudW0gKHVyaVtpXSkgfHwgdXJpW2ldID09ICcrJyB8fCB1cmlbaV0gPT0gJy0nIHx8Ci0gICAgICAgICAgdXJpW2ldID09ICcuJykKLSAgICAgICAgaSsrOwotICAgIH0KLSAgICBpZiAoaSA+IDAgJiYgdXJpW2ldID09ICc6JykgewotICAgICAgLyogZ2V0IHNjaGVtZSAqLwotICAgICAgdXJpX29iai0+c2NoZW1lID0gZ19zdHJuZHVwICh1cmksIGkpOwotICAgICAgdXJpICs9IGkgKyAxOwotICAgIH0KLSAgICBpZiAodXJpWzBdID09ICcvJyAmJiB1cmlbMV0gPT0gJy8nKSB7Ci0gICAgICBjb25zdCBnY2hhciAqZW9hLCAqZW91aSwgKmVvaCwgKnJlb2g7Ci0gICAgICAvKiBnZXQgYXV0aG9yaXR5IFt1c2VyaW5mb0BdaG9zdFs6cG9ydF0gKi8KLSAgICAgIHVyaSArPSAyOwotICAgICAgLyogZmluZCBlbmQgb2YgYXV0aG9yaXR5ICovCi0gICAgICBlb2EgPSB1cmkgKyBzdHJjc3BuICh1cmksICIvPyMiKTsKLQotICAgICAgLyogZmluZCBlbmQgb2YgdXNlcmluZm8gKi8KLSAgICAgIGVvdWkgPSBzdHJjaHIgKHVyaSwgJ0AnKTsKLSAgICAgIGlmIChlb3VpICE9IE5VTEwgJiYgZW91aSA8IGVvYSkgewotICAgICAgICB1cmlfb2JqLT51c2VyaW5mbyA9IGdfdXJpX3VuZXNjYXBlX3NlZ21lbnQgKHVyaSwgZW91aSwgTlVMTCk7Ci0gICAgICAgIHVyaSA9IGVvdWkgKyAxOwotICAgICAgfQotICAgICAgLyogZmluZCBlbmQgb2YgaG9zdCAqLwotICAgICAgaWYgKHVyaVswXSA9PSAnWycpIHsKLSAgICAgICAgZW9oID0gc3RyY2hyICh1cmksICddJyk7Ci0gICAgICAgIGlmIChlb2ggPT0gTlVMTCB8fCBlb2ggPiBlb2EpIHsKLSAgICAgICAgICBHU1RfREVCVUcgKCJVbmFibGUgdG8gcGFyc2UgdGhlIGhvc3QgcGFydCBvZiB0aGUgVVJJICclcycuIiwKLSAgICAgICAgICAgICAgb3JpZ191cmkpOwotICAgICAgICAgIGdzdF91cmlfdW5yZWYgKHVyaV9vYmopOwotICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHJlb2ggPSBlb2ggKyAxOwotICAgICAgICB1cmkrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlb2ggPSBlb2ggPSBzdHJjaHIgKHVyaSwgJzonKTsKLSAgICAgICAgaWYgKGVvaCA9PSBOVUxMIHx8IGVvaCA+IGVvYSkKLSAgICAgICAgICByZW9oID0gZW9oID0gZW9hOwotICAgICAgfQotICAgICAgLyogZG9uJ3QgY2FwdHVyZSBlbXB0eSBob3N0IHN0cmluZ3MgKi8KLSAgICAgIGlmIChlb2ggIT0gdXJpKQotICAgICAgICB1cmlfb2JqLT5ob3N0ID0gZ191cmlfdW5lc2NhcGVfc2VnbWVudCAodXJpLCBlb2gsIE5VTEwpOwotCi0gICAgICB1cmkgPSByZW9oOwotICAgICAgaWYgKHVyaSA8IGVvYSkgewotICAgICAgICAvKiBpZiBwb3J0IG51bWJlciBpcyBtYWxmb3JtZWQgdGhlbiB3ZSBjYW4ndCBwYXJzZSB0aGlzICovCi0gICAgICAgIGlmICh1cmlbMF0gIT0gJzonIHx8IHN0cnNwbiAodXJpICsgMSwgIjAxMjM0NTY3ODkiKSAhPSBlb2EgLSB1cmkgLSAxKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHICgiVW5hYmxlIHRvIHBhcnNlIGhvc3QvcG9ydCBwYXJ0IG9mIHRoZSBVUkkgJyVzJy4iLAotICAgICAgICAgICAgICBvcmlnX3VyaSk7Ci0gICAgICAgICAgZ3N0X3VyaV91bnJlZiAodXJpX29iaik7Ci0gICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgLyogb3RoZXJ3aXNlIHRyZWF0IHBvcnQgYXMgdW5zaWduZWQgZGVjaW1hbCBudW1iZXIgKi8KLSAgICAgICAgdXJpKys7Ci0gICAgICAgIHdoaWxlICh1cmkgPCBlb2EpIHsKLSAgICAgICAgICB1cmlfb2JqLT5wb3J0ID0gdXJpX29iai0+cG9ydCAqIDEwICsgZ19hc2NpaV9kaWdpdF92YWx1ZSAoKnVyaSk7Ci0gICAgICAgICAgdXJpKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHVyaSA9IGVvYTsKLSAgICB9Ci0gICAgaWYgKHVyaSAhPSBOVUxMICYmIHVyaVswXSAhPSAnXDAnKSB7Ci0gICAgICAvKiBnZXQgcGF0aCAqLwotICAgICAgc2l6ZV90IGxlbjsKLSAgICAgIGxlbiA9IHN0cmNzcG4gKHVyaSwgIj8jIik7Ci0gICAgICBpZiAodXJpW2xlbl0gPT0gJ1wwJykgewotICAgICAgICB1cmlfb2JqLT5wYXRoID0gX2dzdF91cmlfc3RyaW5nX3RvX2xpc3QgKHVyaSwgIi8iLCBGQUxTRSwgVFJVRSk7Ci0gICAgICAgIHVyaSA9IE5VTEw7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgIGdjaGFyICpwYXRoX3N0ciA9IGdfc3RybmR1cCAodXJpLCBsZW4pOwotICAgICAgICAgIHVyaV9vYmotPnBhdGggPSBfZ3N0X3VyaV9zdHJpbmdfdG9fbGlzdCAocGF0aF9zdHIsICIvIiwgRkFMU0UsIFRSVUUpOwotICAgICAgICAgIGdfZnJlZSAocGF0aF9zdHIpOwotICAgICAgICB9Ci0gICAgICAgIHVyaSArPSBsZW47Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICh1cmkgIT0gTlVMTCAmJiB1cmlbMF0gPT0gJz8nKSB7Ci0gICAgICAvKiBnZXQgcXVlcnkgKi8KLSAgICAgIGdjaGFyICplb3E7Ci0gICAgICBlb3EgPSBzdHJjaHIgKCsrdXJpLCAnIycpOwotICAgICAgaWYgKGVvcSA9PSBOVUxMKSB7Ci0gICAgICAgIHVyaV9vYmotPnF1ZXJ5ID0gX2dzdF91cmlfc3RyaW5nX3RvX3RhYmxlICh1cmksICImIiwgIj0iLCBUUlVFLCBUUlVFKTsKLSAgICAgICAgdXJpID0gTlVMTDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChlb3EgIT0gdXJpKSB7Ci0gICAgICAgICAgZ2NoYXIgKnF1ZXJ5X3N0ciA9IGdfc3RybmR1cCAodXJpLCBlb3EgLSB1cmkpOwotICAgICAgICAgIHVyaV9vYmotPnF1ZXJ5ID0gX2dzdF91cmlfc3RyaW5nX3RvX3RhYmxlIChxdWVyeV9zdHIsICImIiwgIj0iLCBUUlVFLAotICAgICAgICAgICAgICBUUlVFKTsKLSAgICAgICAgICBnX2ZyZWUgKHF1ZXJ5X3N0cik7Ci0gICAgICAgIH0KLSAgICAgICAgdXJpID0gZW9xOwotICAgICAgfQotICAgIH0KLSAgICBpZiAodXJpICE9IE5VTEwgJiYgdXJpWzBdID09ICcjJykgewotICAgICAgdXJpX29iai0+ZnJhZ21lbnQgPSBnX3VyaV91bmVzY2FwZV9zdHJpbmcgKHVyaSArIDEsIE5VTEwpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiB1cmlfb2JqOwotfQotCi0vKioKLSAqIGdzdF91cmlfZnJvbV9zdHJpbmdfd2l0aF9iYXNlOgotICogQGJhc2U6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSBiYXNlIFVSSSB0byBqb2luIHRoZSBuZXcgVVJJIHdpdGguCi0gKiBAdXJpOiBUaGUgVVJJIHN0cmluZyB0byBwYXJzZS4KLSAqCi0gKiBMaWtlIGdzdF91cmlfZnJvbV9zdHJpbmcoKSBidXQgYWxzbyBqb2lucyB3aXRoIGEgYmFzZSBVUkkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIG5ldyAjR3N0VXJpIG9iamVjdC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdFVyaSAqCi1nc3RfdXJpX2Zyb21fc3RyaW5nX3dpdGhfYmFzZSAoR3N0VXJpICogYmFzZSwgY29uc3QgZ2NoYXIgKiB1cmkpCi17Ci0gIEdzdFVyaSAqbmV3X3JlbF91cmk7Ci0gIEdzdFVyaSAqbmV3X3VyaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYmFzZSA9PSBOVUxMIHx8IEdTVF9JU19VUkkgKGJhc2UpLCBOVUxMKTsKLQotICBuZXdfcmVsX3VyaSA9IGdzdF91cmlfZnJvbV9zdHJpbmcgKHVyaSk7Ci0gIG5ld191cmkgPSBnc3RfdXJpX2pvaW4gKGJhc2UsIG5ld19yZWxfdXJpKTsKLSAgZ3N0X3VyaV91bnJlZiAobmV3X3JlbF91cmkpOwotCi0gIHJldHVybiBuZXdfdXJpOwotfQotCi0vKioKLSAqIGdzdF91cmlfZXF1YWw6Ci0gKiBAZmlyc3Q6IEZpcnN0ICNHc3RVcmkgdG8gY29tcGFyZS4KLSAqIEBzZWNvbmQ6IFNlY29uZCAjR3N0VXJpIHRvIGNvbXBhcmUuCi0gKgotICogQ29tcGFyZXMgdHdvICNHc3RVcmkgb2JqZWN0cyB0byBzZWUgaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgbm9ybWFsaXplZAotICogVVJJLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBub3JtYWxpemVkIHZlcnNpb25zIG9mIHRoZSB0d28gVVJJJ3Mgd291bGQgYmUgZXF1YWwuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9lcXVhbCAoY29uc3QgR3N0VXJpICogZmlyc3QsIGNvbnN0IEdzdFVyaSAqIHNlY29uZCkKLXsKLSAgZ2NoYXIgKmZpcnN0X25vcm0gPSBOVUxMLCAqc2Vjb25kX25vcm0gPSBOVUxMOwotICBHTGlzdCAqZmlyc3Rfbm9ybV9saXN0ID0gTlVMTCwgKnNlY29uZF9ub3JtX2xpc3QgPSBOVUxMOwotICBjb25zdCBnY2hhciAqZmlyc3RfY21wLCAqc2Vjb25kX2NtcDsKLSAgR0hhc2hUYWJsZUl0ZXIgdGFibGVfaXRlcjsKLSAgZ3BvaW50ZXIga2V5LCB2YWx1ZTsKLSAgaW50IHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGZpcnN0ID09IE5VTEwgfHwgR1NUX0lTX1VSSSAoZmlyc3QpKSAmJgotICAgICAgKHNlY29uZCA9PSBOVUxMIHx8IEdTVF9JU19VUkkgKHNlY29uZCkpLCBGQUxTRSk7Ci0KLSAgaWYgKGZpcnN0ID09IHNlY29uZCkKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAoZmlyc3QgPT0gTlVMTCB8fCBzZWNvbmQgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGZpcnN0LT5wb3J0ICE9IHNlY29uZC0+cG9ydCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLS8qIHdvcmsgb3V0IGEgdmVyc2lvbiBvZiBmaWVsZCB2YWx1ZSAobm9ybWFsaXplZCBvciBub3QpIHRvIGNvbXBhcmUuCi0gKiBmaXJzdF9jbXAsIHNlY29uZF9jbXAgd2lsbCBiZSB0aGUgdmFsdWVzIHRvIGNvbXBhcmUgbGF0ZXIuCi0gKiBmaXJzdF9ub3JtLCBzZWNvbmRfbm9ybSB3aWxsIGJlIG5vbi1OVUxMIGlmIG5vcm1hbGl6ZWQgdmVyc2lvbnMgYXJlIHVzZWQsCi0gKiAgYW5kIG5lZWQgdG8gYmUgZnJlZWQgbGF0ZXIuCi0gKi8KLSNkZWZpbmUgR1NUX1VSSV9OT1JNQUxJWkVEX0ZJRUxEKHBvcywgZmllbGQsIG5vcm1fZm4sIGZsYWdzKSBcCi0gIHBvcyMjX2NtcCA9IHBvcy0+ZmllbGQ7IFwKLSAgaWYgKF9nc3RfdXJpX2ZpcnN0X25vbl9ub3JtYWxpemVkX2NoYXIgKChnY2hhciopcG9zIyNfY21wLCBmbGFncykgIT0gTlVMTCkgeyBcCi0gICAgcG9zIyNfbm9ybSA9IGdfc3RyZHVwIChwb3MjI19jbXApOyBcCi0gICAgbm9ybV9mbiAocG9zIyNfbm9ybSk7IFwKLSAgICBwb3MjI19jbXAgPSBwb3MjI19ub3JtOyBcCi0gIH0KLQotLyogY29tcGFyZSB0d28gc3RyaW5nIHZhbHVlcywgbm9ybWFsaXppbmcgaWYgbmVlZGVkICovCi0jZGVmaW5lIEdTVF9VUklfTk9STUFMSVpFRF9DTVBfU1RSKGZpZWxkLCBub3JtX2ZuLCBmbGFncykgXAotICBHU1RfVVJJX05PUk1BTElaRURfRklFTEQgKGZpcnN0LCBmaWVsZCwgbm9ybV9mbiwgZmxhZ3MpIFwKLSAgR1NUX1VSSV9OT1JNQUxJWkVEX0ZJRUxEIChzZWNvbmQsIGZpZWxkLCBub3JtX2ZuLCBmbGFncykgXAotICByZXN1bHQgPSBnX3N0cmNtcDAgKGZpcnN0X2NtcCwgc2Vjb25kX2NtcCk7IFwKLSAgZ19mcmVlIChmaXJzdF9ub3JtKTsgXAotICBmaXJzdF9ub3JtID0gTlVMTDsgXAotICBnX2ZyZWUgKHNlY29uZF9ub3JtKTsgXAotICBzZWNvbmRfbm9ybSA9IE5VTEw7IFwKLSAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gRkFMU0UKLQotLyogY29tcGFyZSB0d28gc3RyaW5nIHZhbHVlcyAqLwotI2RlZmluZSBHU1RfVVJJX0NNUF9TVFIoZmllbGQpIFwKLSAgaWYgKGdfc3RyY21wMCAoZmlyc3QtPmZpZWxkLCBzZWNvbmQtPmZpZWxkKSAhPSAwKSByZXR1cm4gRkFMU0UKLQotLyogY29tcGFyZSB0d28gR0xpc3RzLCBub3JtYWxpemUgbGlzdHMgaWYgbmVlZGVkIGJlZm9yZSBjb21wYXJpc29uICovCi0jZGVmaW5lIEdTVF9VUklfTk9STUFMSVpFRF9DTVBfTElTVChmaWVsZCwgbm9ybV9mbiwgY29weV9mbiwgY21wX2ZuLCBmcmVlX2ZuKSBcCi0gIGZpcnN0X25vcm1fbGlzdCA9IGdfbGlzdF9jb3B5X2RlZXAgKGZpcnN0LT5maWVsZCwgKEdDb3B5RnVuYykgY29weV9mbiwgTlVMTCk7IFwKLSAgbm9ybV9mbiAoJmZpcnN0X25vcm1fbGlzdCk7IFwKLSAgc2Vjb25kX25vcm1fbGlzdCA9IGdfbGlzdF9jb3B5X2RlZXAgKHNlY29uZC0+ZmllbGQsIChHQ29weUZ1bmMpIGNvcHlfZm4sIE5VTEwpOyBcCi0gIG5vcm1fZm4gKCZzZWNvbmRfbm9ybV9saXN0KTsgXAotICByZXN1bHQgPSBfZ3N0X3VyaV9jb21wYXJlX2xpc3RzIChmaXJzdF9ub3JtX2xpc3QsIHNlY29uZF9ub3JtX2xpc3QsIChHQ29tcGFyZUZ1bmMpIGNtcF9mbik7IFwKLSAgZ19saXN0X2ZyZWVfZnVsbCAoZmlyc3Rfbm9ybV9saXN0LCBmcmVlX2ZuKTsgXAotICBnX2xpc3RfZnJlZV9mdWxsIChzZWNvbmRfbm9ybV9saXN0LCBmcmVlX2ZuKTsgXAotICBpZiAocmVzdWx0ICE9IDApIHJldHVybiBGQUxTRQotCi0gIEdTVF9VUklfQ01QX1NUUiAodXNlcmluZm8pOwotCi0gIEdTVF9VUklfQ01QX1NUUiAoZnJhZ21lbnQpOwotCi0gIEdTVF9VUklfTk9STUFMSVpFRF9DTVBfU1RSIChzY2hlbWUsIF9nc3RfdXJpX25vcm1hbGl6ZV9zY2hlbWUsCi0gICAgICBfR1NUX1VSSV9OT1JNQUxJWkVfTE9XRVJDQVNFKTsKLQotICBHU1RfVVJJX05PUk1BTElaRURfQ01QX1NUUiAoaG9zdCwgX2dzdF91cmlfbm9ybWFsaXplX2hvc3RuYW1lLAotICAgICAgX0dTVF9VUklfTk9STUFMSVpFX0xPV0VSQ0FTRSk7Ci0KLSAgR1NUX1VSSV9OT1JNQUxJWkVEX0NNUF9MSVNUIChwYXRoLCBfZ3N0X3VyaV9ub3JtYWxpemVfcGF0aCwgZ19zdHJkdXAsCi0gICAgICBnX3N0cmNtcDAsIGdfZnJlZSk7Ci0KLSAgaWYgKGZpcnN0LT5xdWVyeSA9PSBOVUxMICYmIHNlY29uZC0+cXVlcnkgIT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChmaXJzdC0+cXVlcnkgIT0gTlVMTCAmJiBzZWNvbmQtPnF1ZXJ5ID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZmlyc3QtPnF1ZXJ5ICE9IE5VTEwpIHsKLSAgICBpZiAoZ19oYXNoX3RhYmxlX3NpemUgKGZpcnN0LT5xdWVyeSkgIT0gZ19oYXNoX3RhYmxlX3NpemUgKHNlY29uZC0+cXVlcnkpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgZ19oYXNoX3RhYmxlX2l0ZXJfaW5pdCAoJnRhYmxlX2l0ZXIsIGZpcnN0LT5xdWVyeSk7Ci0gICAgd2hpbGUgKGdfaGFzaF90YWJsZV9pdGVyX25leHQgKCZ0YWJsZV9pdGVyLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICBpZiAoIWdfaGFzaF90YWJsZV9jb250YWlucyAoc2Vjb25kLT5xdWVyeSwga2V5KSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgcmVzdWx0ID0gZ19zdHJjbXAwIChnX2hhc2hfdGFibGVfbG9va3VwIChzZWNvbmQtPnF1ZXJ5LCBrZXkpLCB2YWx1ZSk7Ci0gICAgICBpZiAocmVzdWx0ICE9IDApCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLSN1bmRlZiBHU1RfVVJJX05PUk1BTElaRURfQ01QX1NUUgotI3VuZGVmIEdTVF9VUklfQ01QX1NUUgotI3VuZGVmIEdTVF9VUklfTk9STUFMSVpFRF9DTVBfTElTVAotI3VuZGVmIEdTVF9VUklfTk9STUFMSVpFRF9GSUVMRAotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF91cmlfam9pbjoKLSAqIEBiYXNlX3VyaTogKHRyYW5zZmVyIG5vbmUpKG51bGxhYmxlKTogVGhlIGJhc2UgVVJJIHRvIGpvaW4gYW5vdGhlciB0by4KLSAqIEByZWZfdXJpOiAodHJhbnNmZXIgbm9uZSkobnVsbGFibGUpOiBUaGUgcmVmZXJlbmNlIFVSSSB0byBqb2luIG9udG8gdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlIFVSSS4KLSAqCi0gKiBKb2luIGEgcmVmZXJlbmNlIFVSSSBvbnRvIGEgYmFzZSBVUkkgdXNpbmcgdGhlIG1ldGhvZCBmcm9tIFJGQyAzOTg2LgotICogSWYgZWl0aGVyIFVSSSBpcyAlTlVMTCB0aGVuIHRoZSBvdGhlciBVUkkgd2lsbCBiZSByZXR1cm5lZCB3aXRoIHRoZSByZWYgY291bnQKLSAqIGluY3JlYXNlZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI0dzdFVyaSB3aGljaCByZXByZXNlbnRzIHRoZSBiYXNlIHdpdGggdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSBVUkkgam9pbmVkIG9uLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0VXJpICoKLWdzdF91cmlfam9pbiAoR3N0VXJpICogYmFzZV91cmksIEdzdFVyaSAqIHJlZl91cmkpCi17Ci0gIGNvbnN0IGdjaGFyICpyX3NjaGVtZTsKLSAgR3N0VXJpICp0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgoYmFzZV91cmkgPT0gTlVMTCB8fCBHU1RfSVNfVVJJIChiYXNlX3VyaSkpICYmCi0gICAgICAocmVmX3VyaSA9PSBOVUxMIHx8IEdTVF9JU19VUkkgKHJlZl91cmkpKSwgTlVMTCk7Ci0KLSAgaWYgKGJhc2VfdXJpID09IE5VTEwgJiYgcmVmX3VyaSA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotICBpZiAoYmFzZV91cmkgPT0gTlVMTCkgewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJIChyZWZfdXJpKSwgTlVMTCk7Ci0gICAgcmV0dXJuIGdzdF91cmlfcmVmIChyZWZfdXJpKTsKLSAgfQotICBpZiAocmVmX3VyaSA9PSBOVUxMKSB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUkkgKGJhc2VfdXJpKSwgTlVMTCk7Ci0gICAgcmV0dXJuIGdzdF91cmlfcmVmIChiYXNlX3VyaSk7Ci0gIH0KLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAoYmFzZV91cmkpICYmIEdTVF9JU19VUkkgKHJlZl91cmkpLCBOVUxMKTsKLQotICB0ID0gX2dzdF91cmlfbmV3ICgpOwotCi0gIGlmICh0ID09IE5VTEwpCi0gICAgcmV0dXJuIHQ7Ci0KLSAgLyogcHJvY2VzcyBhY2NvcmRpbmcgdG8gUkZDMzk4NiAqLwotICByX3NjaGVtZSA9IHJlZl91cmktPnNjaGVtZTsKLSAgaWYgKHJfc2NoZW1lICE9IE5VTEwgJiYgZ19zdHJjbXAwIChiYXNlX3VyaS0+c2NoZW1lLCByX3NjaGVtZSkgPT0gMCkgewotICAgIHJfc2NoZW1lID0gTlVMTDsKLSAgfQotICBpZiAocl9zY2hlbWUgIT0gTlVMTCkgewotICAgIHQtPnNjaGVtZSA9IGdfc3RyZHVwIChyX3NjaGVtZSk7Ci0gICAgdC0+dXNlcmluZm8gPSBnX3N0cmR1cCAocmVmX3VyaS0+dXNlcmluZm8pOwotICAgIHQtPmhvc3QgPSBnX3N0cmR1cCAocmVmX3VyaS0+aG9zdCk7Ci0gICAgdC0+cG9ydCA9IHJlZl91cmktPnBvcnQ7Ci0gICAgdC0+cGF0aCA9IF9yZW1vdmVfZG90X3NlZ21lbnRzIChyZWZfdXJpLT5wYXRoKTsKLSAgICB0LT5xdWVyeSA9IF9nc3RfdXJpX2NvcHlfcXVlcnlfdGFibGUgKHJlZl91cmktPnF1ZXJ5KTsKLSAgfSBlbHNlIHsKLSAgICBpZiAocmVmX3VyaS0+aG9zdCAhPSBOVUxMKSB7Ci0gICAgICB0LT51c2VyaW5mbyA9IGdfc3RyZHVwIChyZWZfdXJpLT51c2VyaW5mbyk7Ci0gICAgICB0LT5ob3N0ID0gZ19zdHJkdXAgKHJlZl91cmktPmhvc3QpOwotICAgICAgdC0+cG9ydCA9IHJlZl91cmktPnBvcnQ7Ci0gICAgICB0LT5wYXRoID0gX3JlbW92ZV9kb3Rfc2VnbWVudHMgKHJlZl91cmktPnBhdGgpOwotICAgICAgdC0+cXVlcnkgPSBfZ3N0X3VyaV9jb3B5X3F1ZXJ5X3RhYmxlIChyZWZfdXJpLT5xdWVyeSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChyZWZfdXJpLT5wYXRoID09IE5VTEwpIHsKLSAgICAgICAgdC0+cGF0aCA9IGdfbGlzdF9jb3B5X2RlZXAgKGJhc2VfdXJpLT5wYXRoLCAoR0NvcHlGdW5jKSBnX3N0cmR1cCwgTlVMTCk7Ci0gICAgICAgIGlmIChyZWZfdXJpLT5xdWVyeSAhPSBOVUxMKQotICAgICAgICAgIHQtPnF1ZXJ5ID0gX2dzdF91cmlfY29weV9xdWVyeV90YWJsZSAocmVmX3VyaS0+cXVlcnkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdC0+cXVlcnkgPSBfZ3N0X3VyaV9jb3B5X3F1ZXJ5X3RhYmxlIChiYXNlX3VyaS0+cXVlcnkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlZl91cmktPnBhdGgtPmRhdGEgPT0gTlVMTCkKLSAgICAgICAgICB0LT5wYXRoID0gX3JlbW92ZV9kb3Rfc2VnbWVudHMgKHJlZl91cmktPnBhdGgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBHTGlzdCAqbXJnZCA9IF9tZXJnZSAoYmFzZV91cmktPnBhdGgsIHJlZl91cmktPnBhdGgpOwotICAgICAgICAgIHQtPnBhdGggPSBfcmVtb3ZlX2RvdF9zZWdtZW50cyAobXJnZCk7Ci0gICAgICAgICAgZ19saXN0X2ZyZWVfZnVsbCAobXJnZCwgZ19mcmVlKTsKLSAgICAgICAgfQotICAgICAgICB0LT5xdWVyeSA9IF9nc3RfdXJpX2NvcHlfcXVlcnlfdGFibGUgKHJlZl91cmktPnF1ZXJ5KTsKLSAgICAgIH0KLSAgICAgIHQtPnVzZXJpbmZvID0gZ19zdHJkdXAgKGJhc2VfdXJpLT51c2VyaW5mbyk7Ci0gICAgICB0LT5ob3N0ID0gZ19zdHJkdXAgKGJhc2VfdXJpLT5ob3N0KTsKLSAgICAgIHQtPnBvcnQgPSBiYXNlX3VyaS0+cG9ydDsKLSAgICB9Ci0gICAgdC0+c2NoZW1lID0gZ19zdHJkdXAgKGJhc2VfdXJpLT5zY2hlbWUpOwotICB9Ci0gIHQtPmZyYWdtZW50ID0gZ19zdHJkdXAgKHJlZl91cmktPmZyYWdtZW50KTsKLQotICByZXR1cm4gdDsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX2pvaW5fc3RyaW5nczoKLSAqIEBiYXNlX3VyaTogVGhlIHBlcmNlbnQtZW5jb2RlZCBiYXNlIFVSSS4KLSAqIEByZWZfdXJpOiBUaGUgcGVyY2VudC1lbmNvZGVkIHJlZmVyZW5jZSBVUkkgdG8gam9pbiB0byB0aGUgQGJhc2VfdXJpLgotICoKLSAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBqb2luIHR3byBVUkkgc3RyaW5ncyBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCi0gKiBUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3VsZCBiZSBnX2ZyZWUoKSdkIGFmdGVyIHVzZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGVyY2VudC1lbmNvZGVkIGpvaW4gb2YKLSAqICAgICAgICAgIHRoZSB0d28gVVJJcy4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdjaGFyICoKLWdzdF91cmlfam9pbl9zdHJpbmdzIChjb25zdCBnY2hhciAqIGJhc2VfdXJpLCBjb25zdCBnY2hhciAqIHJlZl91cmkpCi17Ci0gIEdzdFVyaSAqYmFzZSwgKnJlc3VsdDsKLSAgZ2NoYXIgKnJlc3VsdF91cmk7Ci0KLSAgYmFzZSA9IGdzdF91cmlfZnJvbV9zdHJpbmcgKGJhc2VfdXJpKTsKLSAgcmVzdWx0ID0gZ3N0X3VyaV9mcm9tX3N0cmluZ193aXRoX2Jhc2UgKGJhc2UsIHJlZl91cmkpOwotICByZXN1bHRfdXJpID0gZ3N0X3VyaV90b19zdHJpbmcgKHJlc3VsdCk7Ci0gIGdzdF91cmlfdW5yZWYgKGJhc2UpOwotICBnc3RfdXJpX3VucmVmIChyZXN1bHQpOwotCi0gIHJldHVybiByZXN1bHRfdXJpOwotfQotCi0vKioKLSAqIGdzdF91cmlfaXNfd3JpdGFibGU6Ci0gKiBAdXJpOiBUaGUgI0dzdFVyaSBvYmplY3QgdG8gdGVzdC4KLSAqCi0gKiBDaGVjayBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoaXMgI0dzdFVyaS4KLSAqCi0gKiBDaGVjayBpZiB0aGUgcmVmY291bnQgb2YgQHVyaSBpcyBleGFjdGx5IDEsIG1lYW5pbmcgdGhhdCBubyBvdGhlcgotICogcmVmZXJlbmNlIGV4aXN0cyB0byB0aGUgI0dzdFVyaSBhbmQgdGhhdCB0aGUgI0dzdFVyaSBpcyB0aGVyZWZvcmUgd3JpdGFibGUuCi0gKgotICogTW9kaWZpY2F0aW9uIG9mIGEgI0dzdFVyaSBzaG91bGQgb25seSBiZSBkb25lIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGlzCi0gKiB3cml0YWJsZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRvIHRoZSBvYmplY3QuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9pc193cml0YWJsZSAoY29uc3QgR3N0VXJpICogdXJpKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSwgRkFMU0UpOwotICByZXR1cm4gZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAodXJpKSk7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9tYWtlX3dyaXRhYmxlOgotICogQHVyaTogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgI0dzdFVyaSBvYmplY3QgdG8gbWFrZSB3cml0YWJsZS4KLSAqCi0gKiBNYWtlIHRoZSAjR3N0VXJpIHdyaXRhYmxlLgotICoKLSAqIENoZWNrcyBpZiBAdXJpIGlzIHdyaXRhYmxlLCBhbmQgaWYgc28gdGhlIG9yaWdpbmFsIG9iamVjdCBpcyByZXR1cm5lZC4gSWYKLSAqIG5vdCwgdGhlbiBhIHdyaXRhYmxlIGNvcHkgaXMgbWFkZSBhbmQgcmV0dXJuZWQuIFRoaXMgZ2l2ZXMgYXdheSB0aGUKLSAqIHJlZmVyZW5jZSB0byBAdXJpIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXcgI0dzdFVyaS4KLSAqIElmIEB1cmkgaXMgJU5VTEwgdGhlbiAlTlVMTCBpcyByZXR1cm5lZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgd3JpdGFibGUgdmVyc2lvbiBvZiBAdXJpLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0VXJpICoKLWdzdF91cmlfbWFrZV93cml0YWJsZSAoR3N0VXJpICogdXJpKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSwgTlVMTCk7Ci0gIHJldHVybgotICAgICAgR1NUX1VSSV9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHVyaSkpKTsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX3RvX3N0cmluZzoKLSAqIEB1cmk6IFRoaXMgI0dzdFVyaSB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLgotICoKLSAqIENvbnZlcnQgdGhlIFVSSSB0byBhIHN0cmluZy4KLSAqCi0gKiBSZXR1cm5zIHRoZSBVUkkgYXMgaGVsZCBpbiB0aGlzIG9iamVjdCBhcyBhICNnY2hhciogbnVsLXRlcm1pbmF0ZWQgc3RyaW5nLgotICogVGhlIGNhbGxlciBzaG91bGQgZ19mcmVlKCkgdGhlIHN0cmluZyBvbmNlIHRoZXkgYXJlIGZpbmlzaGVkIHdpdGggaXQuCi0gKiBUaGUgc3RyaW5nIGlzIHB1dCB0b2dldGhlciBhcyBkZXNjcmliZWQgaW4gUkZDIDM5ODYuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBUaGUgc3RyaW5nIHZlcnNpb24gb2YgdGhlIFVSSS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdjaGFyICoKLWdzdF91cmlfdG9fc3RyaW5nIChjb25zdCBHc3RVcmkgKiB1cmkpCi17Ci0gIEdTdHJpbmcgKnVyaV9zdHI7Ci0gIGdjaGFyICplc2NhcGVkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpLCBOVUxMKTsKLQotICB1cmlfc3RyID0gZ19zdHJpbmdfbmV3IChOVUxMKTsKLQotICBpZiAodXJpLT5zY2hlbWUgIT0gTlVMTCkKLSAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmICh1cmlfc3RyLCAiJXM6IiwgdXJpLT5zY2hlbWUpOwotCi0gIGlmICh1cmktPnVzZXJpbmZvICE9IE5VTEwgfHwgdXJpLT5ob3N0ICE9IE5VTEwgfHwKLSAgICAgIHVyaS0+cG9ydCAhPSBHU1RfVVJJX05PX1BPUlQpCi0gICAgZ19zdHJpbmdfYXBwZW5kICh1cmlfc3RyLCAiLy8iKTsKLQotICBpZiAodXJpLT51c2VyaW5mbyAhPSBOVUxMKSB7Ci0gICAgZXNjYXBlZCA9IF9nc3RfdXJpX2VzY2FwZV91c2VyaW5mbyAodXJpLT51c2VyaW5mbyk7Ci0gICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAodXJpX3N0ciwgIiVzQCIsIGVzY2FwZWQpOwotICAgIGdfZnJlZSAoZXNjYXBlZCk7Ci0gIH0KLQotICBpZiAodXJpLT5ob3N0ICE9IE5VTEwpIHsKLSAgICBpZiAoc3RyY2hyICh1cmktPmhvc3QsICc6JykgIT0gTlVMTCkgewotICAgICAgZXNjYXBlZCA9IF9nc3RfdXJpX2VzY2FwZV9ob3N0X2NvbG9uICh1cmktPmhvc3QpOwotICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAodXJpX3N0ciwgIlslc10iLCBlc2NhcGVkKTsKLSAgICAgIGdfZnJlZSAoZXNjYXBlZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVzY2FwZWQgPSBfZ3N0X3VyaV9lc2NhcGVfaG9zdCAodXJpLT5ob3N0KTsKLSAgICAgIGdfc3RyaW5nX2FwcGVuZCAodXJpX3N0ciwgZXNjYXBlZCk7Ci0gICAgICBnX2ZyZWUgKGVzY2FwZWQpOwotICAgIH0KLSAgfQotCi0gIGlmICh1cmktPnBvcnQgIT0gR1NUX1VSSV9OT19QT1JUKQotICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHVyaV9zdHIsICI6JXUiLCB1cmktPnBvcnQpOwotCi0gIGlmICh1cmktPnBhdGggIT0gTlVMTCkgewotICAgIGVzY2FwZWQgPSBnc3RfdXJpX2dldF9wYXRoX3N0cmluZyAodXJpKTsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHVyaV9zdHIsIGVzY2FwZWQpOwotICAgIGdfZnJlZSAoZXNjYXBlZCk7Ci0gIH0KLQotICBpZiAodXJpLT5xdWVyeSkgewotICAgIGdfc3RyaW5nX2FwcGVuZCAodXJpX3N0ciwgIj8iKTsKLSAgICBlc2NhcGVkID0gZ3N0X3VyaV9nZXRfcXVlcnlfc3RyaW5nICh1cmkpOwotICAgIGdfc3RyaW5nX2FwcGVuZCAodXJpX3N0ciwgZXNjYXBlZCk7Ci0gICAgZ19mcmVlIChlc2NhcGVkKTsKLSAgfQotCi0gIGlmICh1cmktPmZyYWdtZW50ICE9IE5VTEwpIHsKLSAgICBlc2NhcGVkID0gX2dzdF91cmlfZXNjYXBlX2ZyYWdtZW50ICh1cmktPmZyYWdtZW50KTsKLSAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmICh1cmlfc3RyLCAiIyVzIiwgZXNjYXBlZCk7Ci0gICAgZ19mcmVlIChlc2NhcGVkKTsKLSAgfQotCi0gIHJldHVybiBnX3N0cmluZ19mcmVlICh1cmlfc3RyLCBGQUxTRSk7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9pc19ub3JtYWxpemVkOgotICogQHVyaTogVGhlICNHc3RVcmkgdG8gdGVzdCB0byBzZWUgaWYgaXQgaXMgbm9ybWFsaXplZC4KLSAqCi0gKiBUZXN0cyB0aGUgQHVyaSB0byBzZWUgaWYgaXQgaXMgbm9ybWFsaXplZC4gQSAlTlVMTCBAdXJpIGlzIGNvbnNpZGVyZWQgdG8gYmUKLSAqIG5vcm1hbGl6ZWQuCi0gKgotICogUmV0dXJuczogVFJVRSBpZiB0aGUgVVJJIGlzIG5vcm1hbGl6ZWQgb3IgaXMgJU5VTEwuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9pc19ub3JtYWxpemVkIChjb25zdCBHc3RVcmkgKiB1cmkpCi17Ci0gIEdMaXN0ICpuZXdfcGF0aDsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGlmICh1cmkgPT0gTlVMTCkKLSAgICByZXR1cm4gVFJVRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSwgRkFMU0UpOwotCi0gIC8qIGNoZWNrIGZvciBub24tbm9ybWFsaXplZCBjaGFyYWN0ZXJzIGluIHVyaSBwYXJ0cyAqLwotICBpZiAoX2dzdF91cmlfZmlyc3Rfbm9uX25vcm1hbGl6ZWRfY2hhciAodXJpLT5zY2hlbWUsCi0gICAgICAgICAgX0dTVF9VUklfTk9STUFMSVpFX0xPV0VSQ0FTRSkgIT0gTlVMTCB8fAotICAgICAgLypfZ3N0X3VyaV9maXJzdF9ub25fbm9ybWFsaXplZF9jaGFyICh1cmktPnVzZXJpbmZvLAotICAgICAgICAgIF9HU1RfVVJJX05PUk1BTElaRV9QRVJDRU5UQUdFUykgIT0gTlVMTCB8fCAqLwotICAgICAgX2dzdF91cmlfZmlyc3Rfbm9uX25vcm1hbGl6ZWRfY2hhciAodXJpLT5ob3N0LAotICAgICAgICAgIF9HU1RfVVJJX05PUk1BTElaRV9MT1dFUkNBU0UgLyp8IF9HU1RfVVJJX05PUk1BTElaRV9QRVJDRU5UQUdFUyAqLyApCi0gICAgICAhPSBOVUxMCi0gICAgICAvKnx8IF9nc3RfdXJpX2ZpcnN0X25vbl9ub3JtYWxpemVkX2NoYXIgKHVyaS0+cGF0aCwKLSAgICAgICAgIF9HU1RfVVJJX05PUk1BTElaRV9QRVJDRU5UQUdFUykgIT0gTlVMTAotICAgICAgICAgfHwgX2dzdF91cmlfZmlyc3Rfbm9uX25vcm1hbGl6ZWRfY2hhciAodXJpLT5xdWVyeSwKLSAgICAgICAgIF9HU1RfVVJJX05PUk1BTElaRV9QRVJDRU5UQUdFUykgIT0gTlVMTAotICAgICAgICAgfHwgX2dzdF91cmlfZmlyc3Rfbm9uX25vcm1hbGl6ZWRfY2hhciAodXJpLT5mcmFnbWVudCwKLSAgICAgICAgIF9HU1RfVVJJX05PUk1BTElaRV9QRVJDRU5UQUdFUykgIT0gTlVMTCAqLyApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIGFsc28gY2hlY2sgcGF0aCBoYXMgaGFkIGRvdCBzZWdtZW50cyByZW1vdmVkICovCi0gIG5ld19wYXRoID0gX3JlbW92ZV9kb3Rfc2VnbWVudHMgKHVyaS0+cGF0aCk7Ci0gIHJldCA9Ci0gICAgICAoX2dzdF91cmlfY29tcGFyZV9saXN0cyAobmV3X3BhdGgsIHVyaS0+cGF0aCwKLSAgICAgICAgICAoR0NvbXBhcmVGdW5jKSBnX3N0cmNtcDApID09IDApOwotICBnX2xpc3RfZnJlZV9mdWxsIChuZXdfcGF0aCwgZ19mcmVlKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX25vcm1hbGl6ZToKLSAqIEB1cmk6ICh0cmFuc2ZlciBub25lKTogVGhlICNHc3RVcmkgdG8gbm9ybWFsaXplLgotICoKLSAqIE5vcm1hbGl6YXRpb24gd2lsbCByZW1vdmUgZXh0cmEgcGF0aCBzZWdtZW50cyAoIi4iIGFuZCAiLi4iKSBmcm9tIHRoZSBVUkkuIEl0Ci0gKiB3aWxsIGFsc28gY29udmVydCB0aGUgc2NoZW1lIGFuZCBob3N0IG5hbWUgdG8gbG93ZXIgY2FzZSBhbmQgYW55Ci0gKiBwZXJjZW50LWVuY29kZWQgdmFsdWVzIHRvIHVwcGVyY2FzZS4KLSAqCi0gKiBUaGUgI0dzdFVyaSBvYmplY3QgbXVzdCBiZSB3cml0YWJsZS4gQ2hlY2sgd2l0aCBnc3RfdXJpX2lzX3dyaXRhYmxlKCkgb3IgdXNlCi0gKiBnc3RfdXJpX21ha2Vfd3JpdGFibGUoKSBmaXJzdC4KLSAqCi0gKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSBVUkkgd2FzIG1vZGlmaWVkLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfbm9ybWFsaXplIChHc3RVcmkgKiB1cmkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpICYmIGdzdF91cmlfaXNfd3JpdGFibGUgKHVyaSksIEZBTFNFKTsKLQotICByZXR1cm4gX2dzdF91cmlfbm9ybWFsaXplX3NjaGVtZSAodXJpLT5zY2hlbWUpIHwKLSAgICAgIF9nc3RfdXJpX25vcm1hbGl6ZV91c2VyaW5mbyAodXJpLT51c2VyaW5mbykgfAotICAgICAgX2dzdF91cmlfbm9ybWFsaXplX2hvc3RuYW1lICh1cmktPmhvc3QpIHwKLSAgICAgIF9nc3RfdXJpX25vcm1hbGl6ZV9wYXRoICgmdXJpLT5wYXRoKSB8Ci0gICAgICBfZ3N0X3VyaV9ub3JtYWxpemVfcXVlcnkgKHVyaS0+cXVlcnkpIHwKLSAgICAgIF9nc3RfdXJpX25vcm1hbGl6ZV9mcmFnbWVudCAodXJpLT5mcmFnbWVudCk7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9nZXRfc2NoZW1lOgotICogQHVyaTogKG51bGxhYmxlKTogVGhpcyAjR3N0VXJpIG9iamVjdC4KLSAqCi0gKiBHZXQgdGhlIHNjaGVtZSBuYW1lIGZyb20gdGhlIFVSSSBvciAlTlVMTCBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICogSWYgQHVyaSBpcyAlTlVMTCB0aGVuIHJldHVybnMgJU5VTEwuCi0gKgotICogUmV0dXJuczogVGhlIHNjaGVtZSBmcm9tIHRoZSAjR3N0VXJpIG9iamVjdCBvciAlTlVMTC4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3VyaV9nZXRfc2NoZW1lIChjb25zdCBHc3RVcmkgKiB1cmkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1cmkgPT0gTlVMTCB8fCBHU1RfSVNfVVJJICh1cmkpLCBOVUxMKTsKLSAgcmV0dXJuICh1cmkgPyB1cmktPnNjaGVtZSA6IE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF91cmlfc2V0X3NjaGVtZToKLSAqIEB1cmk6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIG1vZGlmeS4KLSAqIEBzY2hlbWU6IFRoZSBuZXcgc2NoZW1lIHRvIHNldCBvciAlTlVMTCB0byB1bnNldCB0aGUgc2NoZW1lLgotICoKLSAqIFNldCBvciB1bnNldCB0aGUgc2NoZW1lIGZvciB0aGUgVVJJLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzY2hlbWUgd2FzIHNldC91bnNldCBzdWNjZXNzZnVsbHkuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9zZXRfc2NoZW1lIChHc3RVcmkgKiB1cmksIGNvbnN0IGdjaGFyICogc2NoZW1lKQotewotICBpZiAoIXVyaSkKLSAgICByZXR1cm4gc2NoZW1lID09IE5VTEw7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpICYmIGdzdF91cmlfaXNfd3JpdGFibGUgKHVyaSksIEZBTFNFKTsKLQotICBnX2ZyZWUgKHVyaS0+c2NoZW1lKTsKLSAgdXJpLT5zY2hlbWUgPSBnX3N0cmR1cCAoc2NoZW1lKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX2dldF91c2VyaW5mbzoKLSAqIEB1cmk6IChudWxsYWJsZSk6IFRoaXMgI0dzdFVyaSBvYmplY3QuCi0gKgotICogR2V0IHRoZSB1c2VyaW5mbyAodXN1YWxseSBpbiB0aGUgZm9ybSAidXNlcm5hbWU6cGFzc3dvcmQiKSBmcm9tIHRoZSBVUkkKLSAqIG9yICVOVUxMIGlmIGl0IGRvZXNuJ3QgZXhpc3QuIElmIEB1cmkgaXMgJU5VTEwgdGhlbiByZXR1cm5zICVOVUxMLgotICoKLSAqIFJldHVybnM6IFRoZSB1c2VyaW5mbyBmcm9tIHRoZSAjR3N0VXJpIG9iamVjdCBvciAlTlVMTC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF91cmlfZ2V0X3VzZXJpbmZvIChjb25zdCBHc3RVcmkgKiB1cmkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1cmkgPT0gTlVMTCB8fCBHU1RfSVNfVVJJICh1cmkpLCBOVUxMKTsKLSAgcmV0dXJuICh1cmkgPyB1cmktPnVzZXJpbmZvIDogTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9zZXRfdXNlcmluZm86Ci0gKiBAdXJpOiAodHJhbnNmZXIgbm9uZSkobnVsbGFibGUpOiBUaGUgI0dzdFVyaSB0byBtb2RpZnkuCi0gKiBAdXNlcmluZm86IFRoZSBuZXcgdXNlci1pbmZvcm1hdGlvbiBzdHJpbmcgdG8gc2V0IG9yICVOVUxMIHRvIHVuc2V0LgotICoKLSAqIFNldCBvciB1bnNldCB0aGUgdXNlciBpbmZvcm1hdGlvbiBmb3IgdGhlIFVSSS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdXNlciBpbmZvcm1hdGlvbiB3YXMgc2V0L3Vuc2V0IHN1Y2Nlc3NmdWxseS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfdXJpX3NldF91c2VyaW5mbyAoR3N0VXJpICogdXJpLCBjb25zdCBnY2hhciAqIHVzZXJpbmZvKQotewotICBpZiAoIXVyaSkKLSAgICByZXR1cm4gdXNlcmluZm8gPT0gTlVMTDsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUkkgKHVyaSkgJiYgZ3N0X3VyaV9pc193cml0YWJsZSAodXJpKSwgRkFMU0UpOwotCi0gIGdfZnJlZSAodXJpLT51c2VyaW5mbyk7Ci0gIHVyaS0+dXNlcmluZm8gPSBnX3N0cmR1cCAodXNlcmluZm8pOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF91cmlfZ2V0X2hvc3Q6Ci0gKiBAdXJpOiAobnVsbGFibGUpOiBUaGlzICNHc3RVcmkgb2JqZWN0LgotICoKLSAqIEdldCB0aGUgaG9zdCBuYW1lIGZyb20gdGhlIFVSSSBvciAlTlVMTCBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICogSWYgQHVyaSBpcyAlTlVMTCB0aGVuIHJldHVybnMgJU5VTEwuCi0gKgotICogUmV0dXJuczogVGhlIGhvc3QgbmFtZSBmcm9tIHRoZSAjR3N0VXJpIG9iamVjdCBvciAlTlVMTC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWNvbnN0IGdjaGFyICoKLWdzdF91cmlfZ2V0X2hvc3QgKGNvbnN0IEdzdFVyaSAqIHVyaSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSA9PSBOVUxMIHx8IEdTVF9JU19VUkkgKHVyaSksIE5VTEwpOwotICByZXR1cm4gKHVyaSA/IHVyaS0+aG9zdCA6IE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF91cmlfc2V0X2hvc3Q6Ci0gKiBAdXJpOiAodHJhbnNmZXIgbm9uZSkobnVsbGFibGUpOiBUaGUgI0dzdFVyaSB0byBtb2RpZnkuCi0gKiBAaG9zdDogVGhlIG5ldyBob3N0IHN0cmluZyB0byBzZXQgb3IgJU5VTEwgdG8gdW5zZXQuCi0gKgotICogU2V0IG9yIHVuc2V0IHRoZSBob3N0IGZvciB0aGUgVVJJLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBob3N0IHdhcyBzZXQvdW5zZXQgc3VjY2Vzc2Z1bGx5LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfc2V0X2hvc3QgKEdzdFVyaSAqIHVyaSwgY29uc3QgZ2NoYXIgKiBob3N0KQotewotICBpZiAoIXVyaSkKLSAgICByZXR1cm4gaG9zdCA9PSBOVUxMOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSAmJiBnc3RfdXJpX2lzX3dyaXRhYmxlICh1cmkpLCBGQUxTRSk7Ci0KLSAgZ19mcmVlICh1cmktPmhvc3QpOwotICB1cmktPmhvc3QgPSBnX3N0cmR1cCAoaG9zdCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9nZXRfcG9ydDoKLSAqIEB1cmk6IChudWxsYWJsZSk6IFRoaXMgI0dzdFVyaSBvYmplY3QuCi0gKgotICogR2V0IHRoZSBwb3J0IG51bWJlciBmcm9tIHRoZSBVUkkgb3IgJUdTVF9VUklfTk9fUE9SVCBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICogSWYgQHVyaSBpcyAlTlVMTCB0aGVuIHJldHVybnMgJUdTVF9VUklfTk9fUE9SVC4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgcG9ydCBudW1iZXIgZnJvbSB0aGUgI0dzdFVyaSBvYmplY3Qgb3IgJUdTVF9VUklfTk9fUE9SVC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWd1aW50Ci1nc3RfdXJpX2dldF9wb3J0IChjb25zdCBHc3RVcmkgKiB1cmkpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1cmkgPT0gTlVMTCB8fCBHU1RfSVNfVVJJICh1cmkpLCBHU1RfVVJJX05PX1BPUlQpOwotICByZXR1cm4gKHVyaSA/IHVyaS0+cG9ydCA6IEdTVF9VUklfTk9fUE9SVCk7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9zZXRfcG9ydDoKLSAqIEB1cmk6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIG1vZGlmeS4KLSAqIEBwb3J0OiBUaGUgbmV3IHBvcnQgbnVtYmVyIHRvIHNldCBvciAlR1NUX1VSSV9OT19QT1JUIHRvIHVuc2V0LgotICoKLSAqIFNldCBvciB1bnNldCB0aGUgcG9ydCBudW1iZXIgZm9yIHRoZSBVUkkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBvcnQgbnVtYmVyIHdhcyBzZXQvdW5zZXQgc3VjY2Vzc2Z1bGx5LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfc2V0X3BvcnQgKEdzdFVyaSAqIHVyaSwgZ3VpbnQgcG9ydCkKLXsKLSAgaWYgKCF1cmkpCi0gICAgcmV0dXJuIHBvcnQgPT0gR1NUX1VSSV9OT19QT1JUOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSAmJiBnc3RfdXJpX2lzX3dyaXRhYmxlICh1cmkpLCBGQUxTRSk7Ci0KLSAgdXJpLT5wb3J0ID0gcG9ydDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX2dldF9wYXRoOgotICogQHVyaTogVGhlICNHc3RVcmkgdG8gZ2V0IHRoZSBwYXRoIGZyb20uCi0gKgotICogRXh0cmFjdCB0aGUgcGF0aCBzdHJpbmcgZnJvbSB0aGUgVVJJIG9iamVjdC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBwYXRoIGZyb20gdGhlIFVSSS4gT25jZSBmaW5pc2hlZCB3aXRoIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgc2hvdWxkIGJlIGdfZnJlZSgpJ2QuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nY2hhciAqCi1nc3RfdXJpX2dldF9wYXRoIChjb25zdCBHc3RVcmkgKiB1cmkpCi17Ci0gIEdMaXN0ICpwYXRoX3NlZ21lbnQ7Ci0gIGNvbnN0IGdjaGFyICpzZXAgPSAiIjsKLSAgR1N0cmluZyAqcmV0OwotCi0gIGlmICghdXJpKQotICAgIHJldHVybiBOVUxMOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSwgTlVMTCk7Ci0gIGlmICghdXJpLT5wYXRoKQotICAgIHJldHVybiBOVUxMOwotCi0gIHJldCA9IGdfc3RyaW5nX25ldyAoTlVMTCk7Ci0KLSAgZm9yIChwYXRoX3NlZ21lbnQgPSB1cmktPnBhdGg7IHBhdGhfc2VnbWVudDsKLSAgICAgIHBhdGhfc2VnbWVudCA9IHBhdGhfc2VnbWVudC0+bmV4dCkgewotICAgIGdfc3RyaW5nX2FwcGVuZCAocmV0LCBzZXApOwotICAgIGlmIChwYXRoX3NlZ21lbnQtPmRhdGEpIHsKLSAgICAgIGdfc3RyaW5nX2FwcGVuZCAocmV0LCBwYXRoX3NlZ21lbnQtPmRhdGEpOwotICAgIH0KLSAgICBzZXAgPSAiLyI7Ci0gIH0KLQotICByZXR1cm4gZ19zdHJpbmdfZnJlZSAocmV0LCBGQUxTRSk7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9zZXRfcGF0aDoKLSAqIEB1cmk6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIG1vZGlmeS4KLSAqIEBwYXRoOiBUaGUgbmV3IHBhdGggdG8gc2V0IHdpdGggcGF0aCBzZWdtZW50cyBzZXBhcmF0ZWQgYnkgJy8nLCBvciB1c2UgJU5VTEwKLSAqICAgICAgICB0byB1bnNldCB0aGUgcGF0aC4KLSAqCi0gKiBTZXRzIG9yIHVuc2V0cyB0aGUgcGF0aCBpbiB0aGUgVVJJLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYXRoIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfc2V0X3BhdGggKEdzdFVyaSAqIHVyaSwgY29uc3QgZ2NoYXIgKiBwYXRoKQotewotICBpZiAoIXVyaSkKLSAgICByZXR1cm4gcGF0aCA9PSBOVUxMOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSAmJiBnc3RfdXJpX2lzX3dyaXRhYmxlICh1cmkpLCBGQUxTRSk7Ci0KLSAgZ19saXN0X2ZyZWVfZnVsbCAodXJpLT5wYXRoLCBnX2ZyZWUpOwotICB1cmktPnBhdGggPSBfZ3N0X3VyaV9zdHJpbmdfdG9fbGlzdCAocGF0aCwgIi8iLCBGQUxTRSwgRkFMU0UpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF91cmlfZ2V0X3BhdGhfc3RyaW5nOgotICogQHVyaTogVGhlICNHc3RVcmkgdG8gZ2V0IHRoZSBwYXRoIGZyb20uCi0gKgotICogRXh0cmFjdCB0aGUgcGF0aCBzdHJpbmcgZnJvbSB0aGUgVVJJIG9iamVjdCBhcyBhIHBlcmNlbnQgZW5jb2RlZCBVUkkgcGF0aC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IFRoZSBwYXRoIGZyb20gdGhlIFVSSS4gT25jZSBmaW5pc2hlZCB3aXRoIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgc2hvdWxkIGJlIGdfZnJlZSgpJ2QuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nY2hhciAqCi1nc3RfdXJpX2dldF9wYXRoX3N0cmluZyAoY29uc3QgR3N0VXJpICogdXJpKQotewotICBHTGlzdCAqcGF0aF9zZWdtZW50OwotICBjb25zdCBnY2hhciAqc2VwID0gIiI7Ci0gIEdTdHJpbmcgKnJldDsKLSAgZ2NoYXIgKmVzY2FwZWQ7Ci0KLSAgaWYgKCF1cmkpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpLCBOVUxMKTsKLSAgaWYgKCF1cmktPnBhdGgpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0ID0gZ19zdHJpbmdfbmV3IChOVUxMKTsKLQotICBmb3IgKHBhdGhfc2VnbWVudCA9IHVyaS0+cGF0aDsgcGF0aF9zZWdtZW50OwotICAgICAgcGF0aF9zZWdtZW50ID0gcGF0aF9zZWdtZW50LT5uZXh0KSB7Ci0gICAgZ19zdHJpbmdfYXBwZW5kIChyZXQsIHNlcCk7Ci0gICAgaWYgKHBhdGhfc2VnbWVudC0+ZGF0YSkgewotICAgICAgZXNjYXBlZCA9IF9nc3RfdXJpX2VzY2FwZV9wYXRoX3NlZ21lbnQgKHBhdGhfc2VnbWVudC0+ZGF0YSk7Ci0gICAgICBnX3N0cmluZ19hcHBlbmQgKHJldCwgZXNjYXBlZCk7Ci0gICAgICBnX2ZyZWUgKGVzY2FwZWQpOwotICAgIH0KLSAgICBzZXAgPSAiLyI7Ci0gIH0KLQotICByZXR1cm4gZ19zdHJpbmdfZnJlZSAocmV0LCBGQUxTRSk7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9zZXRfcGF0aF9zdHJpbmc6Ci0gKiBAdXJpOiAodHJhbnNmZXIgbm9uZSkobnVsbGFibGUpOiBUaGUgI0dzdFVyaSB0byBtb2RpZnkuCi0gKiBAcGF0aDogVGhlIG5ldyBwZXJjZW50IGVuY29kZWQgcGF0aCB0byBzZXQgd2l0aCBwYXRoIHNlZ21lbnRzIHNlcGFyYXRlZCBieQotICogJy8nLCBvciB1c2UgJU5VTEwgdG8gdW5zZXQgdGhlIHBhdGguCi0gKgotICogU2V0cyBvciB1bnNldHMgdGhlIHBhdGggaW4gdGhlIFVSSS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGF0aCB3YXMgc2V0IHN1Y2Nlc3NmdWxseS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfdXJpX3NldF9wYXRoX3N0cmluZyAoR3N0VXJpICogdXJpLCBjb25zdCBnY2hhciAqIHBhdGgpCi17Ci0gIGlmICghdXJpKQotICAgIHJldHVybiBwYXRoID09IE5VTEw7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpICYmIGdzdF91cmlfaXNfd3JpdGFibGUgKHVyaSksIEZBTFNFKTsKLQotICBnX2xpc3RfZnJlZV9mdWxsICh1cmktPnBhdGgsIGdfZnJlZSk7Ci0gIHVyaS0+cGF0aCA9IF9nc3RfdXJpX3N0cmluZ190b19saXN0IChwYXRoLCAiLyIsIEZBTFNFLCBUUlVFKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9nZXRfcGF0aF9zZWdtZW50czoKLSAqIEB1cmk6IChudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIGdldCB0aGUgcGF0aCBmcm9tLgotICoKLSAqIEdldCBhIGxpc3Qgb2YgcGF0aCBzZWdtZW50cyBmcm9tIHRoZSBVUkkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpKGVsZW1lbnQtdHlwZSBnY2hhciopOiBBICNHTGlzdCBvZiBwYXRoIHNlZ21lbnQKLSAqICAgICAgICAgIHN0cmluZ3Mgb3IgJU5VTEwgaWYgbm8gcGF0aCBzZWdtZW50cyBhcmUgYXZhaWxhYmxlLiBGcmVlIHRoZSBsaXN0Ci0gKiAgICAgICAgICB3aGVuIG5vIGxvbmdlciBuZWVkZWQgd2l0aCBnX2xpc3RfZnJlZV9mdWxsKGxpc3QsIGdfZnJlZSkuCi0gKgotICogU2luY2U6IDEuNgotICovCi1HTGlzdCAqCi1nc3RfdXJpX2dldF9wYXRoX3NlZ21lbnRzIChjb25zdCBHc3RVcmkgKiB1cmkpCi17Ci0gIEdMaXN0ICpyZXQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1cmkgPT0gTlVMTCB8fCBHU1RfSVNfVVJJICh1cmkpLCBOVUxMKTsKLQotICBpZiAodXJpKSB7Ci0gICAgcmV0ID0gZ19saXN0X2NvcHlfZGVlcCAodXJpLT5wYXRoLCAoR0NvcHlGdW5jKSBnX3N0cmR1cCwgTlVMTCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF91cmlfc2V0X3BhdGhfc2VnbWVudHM6Ci0gKiBAdXJpOiAodHJhbnNmZXIgbm9uZSkobnVsbGFibGUpOiBUaGUgI0dzdFVyaSB0byBtb2RpZnkuCi0gKiBAcGF0aF9zZWdtZW50czogKHRyYW5zZmVyIGZ1bGwpKG51bGxhYmxlKShlbGVtZW50LXR5cGUgZ2NoYXIqKTogVGhlIG5ldwotICogICAgICAgICAgICAgICAgIHBhdGggbGlzdCB0byBzZXQuCi0gKgotICogUmVwbGFjZSB0aGUgcGF0aCBzZWdtZW50cyBsaXN0IGluIHRoZSBVUkkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhdGggc2VnbWVudHMgd2VyZSBzZXQgc3VjY2Vzc2Z1bGx5LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfc2V0X3BhdGhfc2VnbWVudHMgKEdzdFVyaSAqIHVyaSwgR0xpc3QgKiBwYXRoX3NlZ21lbnRzKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAodXJpID09IE5VTEwgfHwgR1NUX0lTX1VSSSAodXJpKSwgRkFMU0UpOwotCi0gIGlmICghdXJpKSB7Ci0gICAgaWYgKHBhdGhfc2VnbWVudHMpCi0gICAgICBnX2xpc3RfZnJlZV9mdWxsIChwYXRoX3NlZ21lbnRzLCBnX2ZyZWUpOwotICAgIHJldHVybiBwYXRoX3NlZ21lbnRzID09IE5VTEw7Ci0gIH0KLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3VyaV9pc193cml0YWJsZSAodXJpKSwgRkFMU0UpOwotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKHVyaS0+cGF0aCwgZ19mcmVlKTsKLSAgdXJpLT5wYXRoID0gcGF0aF9zZWdtZW50czsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9hcHBlbmRfcGF0aDoKLSAqIEB1cmk6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIG1vZGlmeS4KLSAqIEByZWxhdGl2ZV9wYXRoOiBSZWxhdGl2ZSBwYXRoIHRvIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHBhdGguCi0gKgotICogQXBwZW5kIGEgcGF0aCBvbnRvIHRoZSBlbmQgb2YgdGhlIHBhdGggaW4gdGhlIFVSSS4gVGhlIHBhdGggaXMgbm90Ci0gKiBub3JtYWxpemVkLCBjYWxsICNnc3RfdXJpX25vcm1hbGl6ZSgpIHRvIG5vcm1hbGl6ZSB0aGUgcGF0aC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGF0aCB3YXMgYXBwZW5kZWQgc3VjY2Vzc2Z1bGx5LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfYXBwZW5kX3BhdGggKEdzdFVyaSAqIHVyaSwgY29uc3QgZ2NoYXIgKiByZWxhdGl2ZV9wYXRoKQotewotICBHTGlzdCAqcmVsX3BhdGhfbGlzdDsKLQotICBpZiAoIXVyaSkKLSAgICByZXR1cm4gcmVsYXRpdmVfcGF0aCA9PSBOVUxMOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSAmJiBnc3RfdXJpX2lzX3dyaXRhYmxlICh1cmkpLCBGQUxTRSk7Ci0gIGlmICghcmVsYXRpdmVfcGF0aCkKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAodXJpLT5wYXRoKSB7Ci0gICAgR0xpc3QgKmxhc3RfZWxlbSA9IGdfbGlzdF9sYXN0ICh1cmktPnBhdGgpOwotICAgIGlmIChsYXN0X2VsZW0tPmRhdGEgPT0gTlVMTCkgewotICAgICAgdXJpLT5wYXRoID0gZ19saXN0X2RlbGV0ZV9saW5rICh1cmktPnBhdGgsIGxhc3RfZWxlbSk7Ci0gICAgfQotICB9Ci0gIHJlbF9wYXRoX2xpc3QgPSBfZ3N0X3VyaV9zdHJpbmdfdG9fbGlzdCAocmVsYXRpdmVfcGF0aCwgIi8iLCBGQUxTRSwgRkFMU0UpOwotICAvKiBpZiBwYXRoIHdhcyBhYnNvbHV0ZSwgbWFrZSBpdCByZWxhdGl2ZSBieSByZW1vdmluZyBpbml0aWFsIE5VTEwgZWxlbWVudCAqLwotICBpZiAocmVsX3BhdGhfbGlzdCAmJiByZWxfcGF0aF9saXN0LT5kYXRhID09IE5VTEwpIHsKLSAgICByZWxfcGF0aF9saXN0ID0gZ19saXN0X2RlbGV0ZV9saW5rIChyZWxfcGF0aF9saXN0LCByZWxfcGF0aF9saXN0KTsKLSAgfQotICB1cmktPnBhdGggPSBnX2xpc3RfY29uY2F0ICh1cmktPnBhdGgsIHJlbF9wYXRoX2xpc3QpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX2FwcGVuZF9wYXRoX3NlZ21lbnQ6Ci0gKiBAdXJpOiAodHJhbnNmZXIgbm9uZSkobnVsbGFibGUpOiBUaGUgI0dzdFVyaSB0byBtb2RpZnkuCi0gKiBAcGF0aF9zZWdtZW50OiBUaGUgcGF0aCBzZWdtZW50IHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIFVSSSBwYXRoLgotICoKLSAqIEFwcGVuZCBhIHNpbmdsZSBwYXRoIHNlZ21lbnQgb250byB0aGUgZW5kIG9mIHRoZSBVUkkgcGF0aC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGF0aCB3YXMgYXBwZW5kZWQgc3VjY2Vzc2Z1bGx5LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfYXBwZW5kX3BhdGhfc2VnbWVudCAoR3N0VXJpICogdXJpLCBjb25zdCBnY2hhciAqIHBhdGhfc2VnbWVudCkKLXsKLSAgaWYgKCF1cmkpCi0gICAgcmV0dXJuIHBhdGhfc2VnbWVudCA9PSBOVUxMOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSAmJiBnc3RfdXJpX2lzX3dyaXRhYmxlICh1cmkpLCBGQUxTRSk7Ci0gIGlmICghcGF0aF9zZWdtZW50KQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIGlmIGJhc2UgcGF0aCBlbmRzIGluIGEgZGlyZWN0b3J5IChpLmUuIGxhc3QgZWxlbWVudCBpcyBOVUxMKSwgcmVtb3ZlIGl0ICovCi0gIGlmICh1cmktPnBhdGggJiYgZ19saXN0X2xhc3QgKHVyaS0+cGF0aCktPmRhdGEgPT0gTlVMTCkgewotICAgIHVyaS0+cGF0aCA9IGdfbGlzdF9kZWxldGVfbGluayAodXJpLT5wYXRoLCBnX2xpc3RfbGFzdCAodXJpLT5wYXRoKSk7Ci0gIH0KLSAgdXJpLT5wYXRoID0gZ19saXN0X2FwcGVuZCAodXJpLT5wYXRoLCBnX3N0cmR1cCAocGF0aF9zZWdtZW50KSk7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZzoKLSAqIEB1cmk6IChudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIGdldCB0aGUgcXVlcnkgc3RyaW5nIGZyb20uCi0gKgotICogR2V0IGEgcGVyY2VudCBlbmNvZGVkIFVSSSBxdWVyeSBzdHJpbmcgZnJvbSB0aGUgQHVyaS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgcGVyY2VudCBlbmNvZGVkIHF1ZXJ5IHN0cmluZy4gVXNlIGdfZnJlZSgpIHdoZW4KLSAqICAgICAgICAgIG5vIGxvbmdlciBuZWVkZWQuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nY2hhciAqCi1nc3RfdXJpX2dldF9xdWVyeV9zdHJpbmcgKGNvbnN0IEdzdFVyaSAqIHVyaSkKLXsKLSAgR0hhc2hUYWJsZUl0ZXIgaXRlcjsKLSAgZ3BvaW50ZXIga2V5LCB2YWx1ZTsKLSAgY29uc3QgZ2NoYXIgKnNlcCA9ICIiOwotICBnY2hhciAqZXNjYXBlZDsKLSAgR1N0cmluZyAqcmV0OwotCi0gIGlmICghdXJpKQotICAgIHJldHVybiBOVUxMOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSwgTlVMTCk7Ci0gIGlmICghdXJpLT5xdWVyeSkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXQgPSBnX3N0cmluZ19uZXcgKE5VTEwpOwotICBnX2hhc2hfdGFibGVfaXRlcl9pbml0ICgmaXRlciwgdXJpLT5xdWVyeSk7Ci0gIHdoaWxlIChnX2hhc2hfdGFibGVfaXRlcl9uZXh0ICgmaXRlciwgJmtleSwgJnZhbHVlKSkgewotICAgIGdfc3RyaW5nX2FwcGVuZCAocmV0LCBzZXApOwotICAgIGVzY2FwZWQgPSBfZ3N0X3VyaV9lc2NhcGVfaHR0cF9xdWVyeV9lbGVtZW50IChrZXkpOwotICAgIGdfc3RyaW5nX2FwcGVuZCAocmV0LCBlc2NhcGVkKTsKLSAgICBnX2ZyZWUgKGVzY2FwZWQpOwotICAgIGlmICh2YWx1ZSkgewotICAgICAgZXNjYXBlZCA9IF9nc3RfdXJpX2VzY2FwZV9odHRwX3F1ZXJ5X2VsZW1lbnQgKHZhbHVlKTsKLSAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHJldCwgIj0lcyIsIGVzY2FwZWQpOwotICAgICAgZ19mcmVlIChlc2NhcGVkKTsKLSAgICB9Ci0gICAgc2VwID0gIiYiOwotICB9Ci0KLSAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKHJldCwgRkFMU0UpOwotfQotCi0vKioKLSAqIGdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZzoKLSAqIEB1cmk6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIG1vZGlmeS4KLSAqIEBxdWVyeTogVGhlIG5ldyBwZXJjZW50IGVuY29kZWQgcXVlcnkgc3RyaW5nIHRvIHVzZSB0byBwb3B1bGF0ZSB0aGUgcXVlcnkKLSAqICAgICAgICB0YWJsZSwgb3IgdXNlICVOVUxMIHRvIHVuc2V0IHRoZSBxdWVyeSB0YWJsZS4KLSAqCi0gKiBTZXRzIG9yIHVuc2V0cyB0aGUgcXVlcnkgdGFibGUgaW4gdGhlIFVSSS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgdGFibGUgd2FzIHNldCBzdWNjZXNzZnVsbHkuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9zZXRfcXVlcnlfc3RyaW5nIChHc3RVcmkgKiB1cmksIGNvbnN0IGdjaGFyICogcXVlcnkpCi17Ci0gIGlmICghdXJpKQotICAgIHJldHVybiBxdWVyeSA9PSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpICYmIGdzdF91cmlfaXNfd3JpdGFibGUgKHVyaSksIEZBTFNFKTsKLQotICBpZiAodXJpLT5xdWVyeSkKLSAgICBnX2hhc2hfdGFibGVfdW5yZWYgKHVyaS0+cXVlcnkpOwotICB1cmktPnF1ZXJ5ID0gX2dzdF91cmlfc3RyaW5nX3RvX3RhYmxlIChxdWVyeSwgIiYiLCAiPSIsIFRSVUUsIFRSVUUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF91cmlfZ2V0X3F1ZXJ5X3RhYmxlOgotICogQHVyaTogKG51bGxhYmxlKTogVGhlICNHc3RVcmkgdG8gZ2V0IHRoZSBxdWVyeSB0YWJsZSBmcm9tLgotICoKLSAqIEdldCB0aGUgcXVlcnkgdGFibGUgZnJvbSB0aGUgVVJJLiBLZXlzIGFuZCB2YWx1ZXMgaW4gdGhlIHRhYmxlIGFyZSBmcmVlZAotICogd2l0aCBnX2ZyZWUgd2hlbiB0aGV5IGFyZSBkZWxldGVkLiBBIHZhbHVlIG1heSBiZSAlTlVMTCB0byBpbmRpY2F0ZSB0aGF0Ci0gKiB0aGUga2V5IHNob3VsZCBhcHBlYXIgaW4gdGhlIHF1ZXJ5IHN0cmluZyBpbiB0aGUgVVJJLCBidXQgZG9lcyBub3QgaGF2ZSBhCi0gKiB2YWx1ZS4gRnJlZSB0aGUgcmV0dXJuZWQgI0dIYXNoVGFibGUgd2l0aCAjZ19oYXNoX3RhYmxlX3VucmVmKCkgd2hlbiBpdCBpcwotICogbm8gbG9uZ2VyIHJlcXVpcmVkLiBNb2RpZnlpbmcgdGhpcyBoYXNoIHRhYmxlIHdpbGwgbW9kaWZ5IHRoZSBxdWVyeSBpbiB0aGUKLSAqIFVSSS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkoZWxlbWVudC10eXBlIGdjaGFyKiBnY2hhciopOiBUaGUgcXVlcnkgaGFzaCB0YWJsZQotICogICAgICAgICAgZnJvbSB0aGUgVVJJLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR0hhc2hUYWJsZSAqCi1nc3RfdXJpX2dldF9xdWVyeV90YWJsZSAoY29uc3QgR3N0VXJpICogdXJpKQotewotICBpZiAoIXVyaSkKLSAgICByZXR1cm4gTlVMTDsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUkkgKHVyaSksIE5VTEwpOwotICBpZiAoIXVyaS0+cXVlcnkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0dXJuIGdfaGFzaF90YWJsZV9yZWYgKHVyaS0+cXVlcnkpOwotfQotCi0vKioKLSAqIGdzdF91cmlfc2V0X3F1ZXJ5X3RhYmxlOgotICogQHVyaTogKHRyYW5zZmVyIG5vbmUpKG51bGxhYmxlKTogVGhlICNHc3RVcmkgdG8gbW9kaWZ5LgotICogQHF1ZXJ5X3RhYmxlOiAodHJhbnNmZXIgbm9uZSkobnVsbGFibGUpKGVsZW1lbnQtdHlwZSBnY2hhciogZ2NoYXIqKTogVGhlIG5ldwotICogICAgICAgICAgICAgICBxdWVyeSB0YWJsZSB0byB1c2UuCi0gKgotICogU2V0IHRoZSBxdWVyeSB0YWJsZSB0byB1c2UgaW4gdGhlIFVSSS4gVGhlIG9sZCB0YWJsZSBpcyB1bnJlZmVyZW5jZWQgYW5kIGEKLSAqIHJlZmVyZW5jZSB0byB0aGUgbmV3IG9uZSBpcyB1c2VkIGluc3RlYWQuIEEgdmFsdWUgaWYgJU5VTEwgZm9yIEBxdWVyeV90YWJsZQotICogd2lsbCByZW1vdmUgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHRoZSBVUkkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIG5ldyB0YWJsZSB3YXMgc3VjZXNzZnVsbHkgdXNlZCBmb3IgdGhlIHF1ZXJ5IHRhYmxlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF91cmlfc2V0X3F1ZXJ5X3RhYmxlIChHc3RVcmkgKiB1cmksIEdIYXNoVGFibGUgKiBxdWVyeV90YWJsZSkKLXsKLSAgR0hhc2hUYWJsZSAqb2xkX3RhYmxlID0gTlVMTDsKLQotICBpZiAoIXVyaSkKLSAgICByZXR1cm4gcXVlcnlfdGFibGUgPT0gTlVMTDsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19VUkkgKHVyaSkgJiYgZ3N0X3VyaV9pc193cml0YWJsZSAodXJpKSwgRkFMU0UpOwotCi0gIG9sZF90YWJsZSA9IHVyaS0+cXVlcnk7Ci0gIGlmIChxdWVyeV90YWJsZSkKLSAgICB1cmktPnF1ZXJ5ID0gZ19oYXNoX3RhYmxlX3JlZiAocXVlcnlfdGFibGUpOwotICBlbHNlCi0gICAgdXJpLT5xdWVyeSA9IE5VTEw7Ci0gIGlmIChvbGRfdGFibGUpCi0gICAgZ19oYXNoX3RhYmxlX3VucmVmIChvbGRfdGFibGUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF91cmlfc2V0X3F1ZXJ5X3ZhbHVlOgotICogQHVyaTogKHRyYW5zZmVyIG5vbmUpKG51bGxhYmxlKTogVGhlICNHc3RVcmkgdG8gbW9kaWZ5LgotICogQHF1ZXJ5X2tleTogKHRyYW5zZmVyIG5vbmUpOiBUaGUga2V5IGZvciB0aGUgcXVlcnkgZW50cnkuCi0gKiBAcXVlcnlfdmFsdWU6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSB2YWx1ZSBmb3IgdGhlIGtleS4KLSAqCi0gKiBUaGlzIGluc2VydHMgb3IgcmVwbGFjZXMgYSBrZXkgaW4gdGhlIHF1ZXJ5IHRhYmxlLiBBIEBxdWVyeV92YWx1ZSBvZiAlTlVMTAotICogaW5kaWNhdGVzIHRoYXQgdGhlIGtleSBoYXMgbm8gYXNzb2NpYXRlZCB2YWx1ZSwgYnV0IHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbgotICogdGhlIHF1ZXJ5IHN0cmluZy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgdGFibGUgd2FzIHN1Y2Vzc2Z1bGx5IHVwZGF0ZWQuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9zZXRfcXVlcnlfdmFsdWUgKEdzdFVyaSAqIHVyaSwgY29uc3QgZ2NoYXIgKiBxdWVyeV9rZXksCi0gICAgY29uc3QgZ2NoYXIgKiBxdWVyeV92YWx1ZSkKLXsKLSAgaWYgKCF1cmkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSAmJiBnc3RfdXJpX2lzX3dyaXRhYmxlICh1cmkpLCBGQUxTRSk7Ci0KLSAgaWYgKCF1cmktPnF1ZXJ5KSB7Ci0gICAgdXJpLT5xdWVyeSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwKLSAgICAgICAgZ19mcmVlKTsKLSAgfQotICBnX2hhc2hfdGFibGVfaW5zZXJ0ICh1cmktPnF1ZXJ5LCBnX3N0cmR1cCAocXVlcnlfa2V5KSwKLSAgICAgIGdfc3RyZHVwIChxdWVyeV92YWx1ZSkpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF91cmlfcmVtb3ZlX3F1ZXJ5X2tleToKLSAqIEB1cmk6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIG1vZGlmeS4KLSAqIEBxdWVyeV9rZXk6IFRoZSBrZXkgdG8gcmVtb3ZlLgotICoKLSAqIFJlbW92ZSBhbiBlbnRyeSBmcm9tIHRoZSBxdWVyeSB0YWJsZSBieSBrZXkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGtleSBleGlzdGVkIGluIHRoZSB0YWJsZSBhbmQgd2FzIHJlbW92ZWQuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9yZW1vdmVfcXVlcnlfa2V5IChHc3RVcmkgKiB1cmksIGNvbnN0IGdjaGFyICogcXVlcnlfa2V5KQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgaWYgKCF1cmkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1VSSSAodXJpKSAmJiBnc3RfdXJpX2lzX3dyaXRhYmxlICh1cmkpLCBGQUxTRSk7Ci0gIGlmICghdXJpLT5xdWVyeSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmVzdWx0ID0gZ19oYXNoX3RhYmxlX3JlbW92ZSAodXJpLT5xdWVyeSwgcXVlcnlfa2V5KTsKLSAgLyogaWYgdGhpcyB3YXMgdGhlIGxhc3QgcXVlcnkgZW50cnksIHJlbW92ZSB0aGUgcXVlcnkgc3RyaW5nIGNvbXBsZXRlbHkgKi8KLSAgaWYgKHJlc3VsdCAmJiBnX2hhc2hfdGFibGVfc2l6ZSAodXJpLT5xdWVyeSkgPT0gMCkgewotICAgIGdfaGFzaF90YWJsZV91bnJlZiAodXJpLT5xdWVyeSk7Ci0gICAgdXJpLT5xdWVyeSA9IE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX3F1ZXJ5X2hhc19rZXk6Ci0gKiBAdXJpOiAobnVsbGFibGUpOiBUaGUgI0dzdFVyaSB0byBleGFtaW5lLgotICogQHF1ZXJ5X2tleTogVGhlIGtleSB0byBsb29rdXAuCi0gKgotICogQ2hlY2sgaWYgdGhlcmUgaXMgYSBxdWVyeSB0YWJsZSBlbnRyeSBmb3IgdGhlIEBxdWVyeV9rZXkga2V5LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBxdWVyeV9rZXkgZXhpc3RzIGluIHRoZSBVUkkgcXVlcnkgdGFibGUuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9xdWVyeV9oYXNfa2V5IChjb25zdCBHc3RVcmkgKiB1cmksIGNvbnN0IGdjaGFyICogcXVlcnlfa2V5KQotewotICBpZiAoIXVyaSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpLCBGQUxTRSk7Ci0gIGlmICghdXJpLT5xdWVyeSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIGdfaGFzaF90YWJsZV9jb250YWlucyAodXJpLT5xdWVyeSwgcXVlcnlfa2V5KTsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX2dldF9xdWVyeV92YWx1ZToKLSAqIEB1cmk6IChudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIGV4YW1pbmUuCi0gKiBAcXVlcnlfa2V5OiBUaGUga2V5IHRvIGxvb2t1cC4KLSAqCi0gKiBHZXQgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHF1ZXJ5X2tleSBrZXkuIFdpbGwgcmV0dXJuICVOVUxMIGlmIHRoZQotICoga2V5IGhhcyBubyB2YWx1ZSBvciBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBVUkkgcXVlcnkgdGFibGUuIEJlY2F1c2UKLSAqICVOVUxMIGlzIHJldHVybmVkIGZvciBib3RoIG1pc3Npbmcga2V5cyBhbmQga2V5cyB3aXRoIG5vIHZhbHVlLCB5b3Ugc2hvdWxkCi0gKiB1c2UgZ3N0X3VyaV9xdWVyeV9oYXNfa2V5KCkgdG8gZGV0ZXJtaW5lIGlmIGEga2V5IGlzIHByZXNlbnQgaW4gdGhlIFVSSQotICogcXVlcnkuCi0gKgotICogUmV0dXJuczogVGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LCBvciAlTlVMTCBpZiBub3QgZm91bmQuCi0gKgotICogU2luY2U6IDEuNgotICovCi1jb25zdCBnY2hhciAqCi1nc3RfdXJpX2dldF9xdWVyeV92YWx1ZSAoY29uc3QgR3N0VXJpICogdXJpLCBjb25zdCBnY2hhciAqIHF1ZXJ5X2tleSkKLXsKLSAgaWYgKCF1cmkpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpLCBOVUxMKTsKLSAgaWYgKCF1cmktPnF1ZXJ5KQotICAgIHJldHVybiBOVUxMOwotCi0gIHJldHVybiBnX2hhc2hfdGFibGVfbG9va3VwICh1cmktPnF1ZXJ5LCBxdWVyeV9rZXkpOwotfQotCi0vKioKLSAqIGdzdF91cmlfZ2V0X3F1ZXJ5X2tleXM6Ci0gKiBAdXJpOiAobnVsbGFibGUpOiBUaGUgI0dzdFVyaSB0byBleGFtaW5lLgotICoKLSAqIEdldCBhIGxpc3Qgb2YgdGhlIHF1ZXJ5IGtleXMgZnJvbSB0aGUgVVJJLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBjb250YWluZXIpKGVsZW1lbnQtdHlwZSBnY2hhciopOiBBIGxpc3Qgb2Yga2V5cyBmcm9tCi0gKiAgICAgICAgICB0aGUgVVJJIHF1ZXJ5LiBGcmVlIHRoZSBsaXN0IHdpdGggZ19saXN0X2ZyZWUoKS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdMaXN0ICoKLWdzdF91cmlfZ2V0X3F1ZXJ5X2tleXMgKGNvbnN0IEdzdFVyaSAqIHVyaSkKLXsKLSAgaWYgKCF1cmkpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpLCBOVUxMKTsKLSAgaWYgKCF1cmktPnF1ZXJ5KQotICAgIHJldHVybiBOVUxMOwotCi0gIHJldHVybiBnX2hhc2hfdGFibGVfZ2V0X2tleXMgKHVyaS0+cXVlcnkpOwotfQotCi0vKioKLSAqIGdzdF91cmlfZ2V0X2ZyYWdtZW50OgotICogQHVyaTogKG51bGxhYmxlKTogVGhpcyAjR3N0VXJpIG9iamVjdC4KLSAqCi0gKiBHZXQgdGhlIGZyYWdtZW50IG5hbWUgZnJvbSB0aGUgVVJJIG9yICVOVUxMIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCi0gKiBJZiBAdXJpIGlzICVOVUxMIHRoZW4gcmV0dXJucyAlTlVMTC4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgaG9zdCBuYW1lIGZyb20gdGhlICNHc3RVcmkgb2JqZWN0IG9yICVOVUxMLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X3VyaV9nZXRfZnJhZ21lbnQgKGNvbnN0IEdzdFVyaSAqIHVyaSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSA9PSBOVUxMIHx8IEdTVF9JU19VUkkgKHVyaSksIE5VTEwpOwotICByZXR1cm4gKHVyaSA/IHVyaS0+ZnJhZ21lbnQgOiBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfdXJpX3NldF9mcmFnbWVudDoKLSAqIEB1cmk6ICh0cmFuc2ZlciBub25lKShudWxsYWJsZSk6IFRoZSAjR3N0VXJpIHRvIG1vZGlmeS4KLSAqIEBmcmFnbWVudDogKG51bGxhYmxlKTogVGhlIGZyYWdtZW50IHN0cmluZyB0byBzZXQuCi0gKgotICogU2V0cyB0aGUgZnJhZ21lbnQgc3RyaW5nIGluIHRoZSBVUkkuIFVzZSBhIHZhbHVlIG9mICVOVUxMIGluIEBmcmFnbWVudCB0bwotICogdW5zZXQgdGhlIGZyYWdtZW50IHN0cmluZy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZnJhZ21lbnQgd2FzIHNldC91bnNldCBzdWNjZXNzZnVsbHkuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3VyaV9zZXRfZnJhZ21lbnQgKEdzdFVyaSAqIHVyaSwgY29uc3QgZ2NoYXIgKiBmcmFnbWVudCkKLXsKLSAgaWYgKCF1cmkpCi0gICAgcmV0dXJuIGZyYWdtZW50ID09IE5VTEw7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVVJJICh1cmkpICYmIGdzdF91cmlfaXNfd3JpdGFibGUgKHVyaSksIEZBTFNFKTsKLQotICBnX2ZyZWUgKHVyaS0+ZnJhZ21lbnQpOwotICB1cmktPmZyYWdtZW50ID0gZ19zdHJkdXAgKGZyYWdtZW50KTsKLSAgcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ3N0dXJpLmggYi9nc3QvZ3N0dXJpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMGYwYjMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHVyaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDE0IERhdmlkIFdhcmluZywgQnJpdGlzaCBCcm9hZGNhc3RpbmcgQ29ycG9yYXRpb24KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGF2aWQud2FyaW5nQHJkLmJiYy5jby51az4KLSAqCi0gKiBnc3R1cmkuaDogSGVhZGVyIGZvciB1cmkgdG8gZWxlbWVudCBtYXBwaW5ncyBhbmQgVVJJIG1hbmlwdWxhdGlvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfVVJJX0hfXwotI2RlZmluZSBfX0dTVF9VUklfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLQotI2luY2x1ZGUgImdzdG1pbmlvYmplY3QuaCIKLQotR19CRUdJTl9ERUNMUwotCi1HUXVhcmsgZ3N0X3VyaV9lcnJvcl9xdWFyayAodm9pZCk7Ci0KLS8qKgotICogR1NUX1VSSV9FUlJPUjoKLSAqCi0gKiBHZXQgYWNjZXNzIHRvIHRoZSBlcnJvciBxdWFyayBvZiB0aGUgdXJpIHN1YnN5c3RlbS4KLSAqLwotI2RlZmluZSBHU1RfVVJJX0VSUk9SIGdzdF91cmlfZXJyb3JfcXVhcmsgKCkKLQotLyoqCi0gKiBHc3RVUklFcnJvcjoKLSAqIEBHU1RfVVJJX0VSUk9SX1VOU1VQUE9SVEVEX1BST1RPQ09MOiBUaGUgcHJvdG9jb2wgaXMgbm90IHN1cHBvcnRlZAotICogQEdTVF9VUklfRVJST1JfQkFEX1VSSTogVGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBVUkkKLSAqIEBHU1RfVVJJX0VSUk9SX0JBRF9TVEFURTogQ291bGQgbm90IHNldCBvciBjaGFuZ2UgdGhlIFVSSSBiZWNhdXNlIHRoZQotICogICAgIFVSSSBoYW5kbGVyIHdhcyBpbiBhIHN0YXRlIHdoZXJlIHRoYXQgaXMgbm90IHBvc3NpYmxlIG9yIG5vdCBwZXJtaXR0ZWQKLSAqIEBHU1RfVVJJX0VSUk9SX0JBRF9SRUZFUkVOQ0U6IFRoZXJlIHdhcyBhIHByb2JsZW0gd2l0aCB0aGUgZW50aXR5IHRoYXQKLSAqICAgICB0aGUgVVJJIHJlZmVyZW5jZXMKLSAqCi0gKiBEaWZmZXJlbnQgVVJJLXJlbGF0ZWQgZXJyb3JzIHRoYXQgY2FuIG9jY3VyLgotICovCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX1VSSV9FUlJPUl9VTlNVUFBPUlRFRF9QUk9UT0NPTCwKLSAgR1NUX1VSSV9FUlJPUl9CQURfVVJJLAotICBHU1RfVVJJX0VSUk9SX0JBRF9TVEFURSwKLSAgR1NUX1VSSV9FUlJPUl9CQURfUkVGRVJFTkNFCi19IEdzdFVSSUVycm9yOwotCi0vKioKLSAqIEdzdFVSSVR5cGU6Ci0gKiBAR1NUX1VSSV9VTktOT1dOOiBUaGUgVVJJIGRpcmVjdGlvbiBpcyB1bmtub3duCi0gKiBAR1NUX1VSSV9TSU5LOiBUaGUgVVJJIGlzIGEgY29uc3VtZXIuCi0gKiBAR1NUX1VSSV9TUkM6IFRoZSBVUkkgaXMgYSBwcm9kdWNlci4KLSAqCi0gKiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIFVSSSBkaXJlY3Rpb24uCi0gKi8KLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1VSSV9VTktOT1dOLAotICBHU1RfVVJJX1NJTkssCi0gIEdTVF9VUklfU1JDCi19IEdzdFVSSVR5cGU7Ci0KLS8qKgotICogR1NUX1VSSV9UWVBFX0lTX1ZBTElEOgotICogQHR5cGU6IEEgI0dzdFVSSVR5cGUKLSAqCi0gKiBUZXN0cyBpZiB0aGUgdHlwZSBkaXJlY3Rpb24gaXMgdmFsaWQuCi0gKi8KLSNkZWZpbmUgR1NUX1VSSV9UWVBFX0lTX1ZBTElEKHR5cGUpICgodHlwZSkgPT0gR1NUX1VSSV9TUkMgfHwgKHR5cGUpID09IEdTVF9VUklfU0lOSykKLQotLyogdXJpIGhhbmRsZXIgZnVuY3Rpb25zICovCi0jZGVmaW5lIEdTVF9UWVBFX1VSSV9IQU5ETEVSICAgICAgICAgICAgICAgKGdzdF91cmlfaGFuZGxlcl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1VSSV9IQU5ETEVSKG9iaikgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9VUklfSEFORExFUiwgR3N0VVJJSGFuZGxlcikpCi0jZGVmaW5lIEdTVF9JU19VUklfSEFORExFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfVVJJX0hBTkRMRVIpKQotI2RlZmluZSBHU1RfVVJJX0hBTkRMRVJfR0VUX0lOVEVSRkFDRShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0lOVEVSRkFDRSAoKG9iaiksIEdTVF9UWVBFX1VSSV9IQU5ETEVSLCBHc3RVUklIYW5kbGVySW50ZXJmYWNlKSkKLQotLyoqCi0gKiBHc3RVUklIYW5kbGVyOgotICoKLSAqIE9wYXF1ZSAjR3N0VVJJSGFuZGxlciBzdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RVUklIYW5kbGVyIEdzdFVSSUhhbmRsZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VVJJSGFuZGxlckludGVyZmFjZSBHc3RVUklIYW5kbGVySW50ZXJmYWNlOwotCi0vKioKLSAqIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2U6Ci0gKiBAcGFyZW50OiBUaGUgcGFyZW50IGludGVyZmFjZSB0eXBlCi0gKiBAZ2V0X3R5cGU6IE1ldGhvZCB0byB0ZWxsIHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFuZGxlcyBzb3VyY2Ugb3Igc2luayBVUkkuCi0gKiBAZ2V0X3Byb3RvY29sczogTWV0aG9kIHRvIHJldHVybiB0aGUgbGlzdCBvZiBwcm90b2NvbHMgaGFuZGxlZCBieSB0aGUgZWxlbWVudC4KLSAqIEBnZXRfdXJpOiBNZXRob2QgdG8gcmV0dXJuIHRoZSBVUkkgY3VycmVudGx5IGhhbmRsZWQgYnkgdGhlIGVsZW1lbnQuCi0gKiBAc2V0X3VyaTogTWV0aG9kIHRvIHNldCBhIG5ldyBVUkkuCi0gKgotICogQW55ICNHc3RFbGVtZW50IHVzaW5nIHRoaXMgaW50ZXJmYWNlIHNob3VsZCBpbXBsZW1lbnQgdGhlc2UgbWV0aG9kcy4KLSAqLwotc3RydWN0IF9Hc3RVUklIYW5kbGVySW50ZXJmYWNlIHsKLSAgR1R5cGVJbnRlcmZhY2UgcGFyZW50OwotCi0gIC8qIHZ0YWJsZSAqLwotICAvKjwgcHVibGljID4qLwotICAvKiBxdWVyeWluZyBjYXBhYmlsaXRpZXMgKi8KLSAgR3N0VVJJVHlwZSAgICAgICAgICAgICAoKiBnZXRfdHlwZSkgICAgICAgICAgIChHVHlwZSB0eXBlKTsKLSAgY29uc3QgZ2NoYXIgKiBjb25zdCAqICAoKiBnZXRfcHJvdG9jb2xzKSAgICAgIChHVHlwZSB0eXBlKTsKLQotICAvKiB1c2luZyB0aGUgaW50ZXJmYWNlICovCi0gIGdjaGFyICogICAgICAgICAgICAgICAgKCogZ2V0X3VyaSkgICAgICAgICAgICAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICgqIHNldF91cmkpICAgICAgICAgICAgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgKiB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICoqIGVycm9yKTsKLX07Ci0KLS8qIGdlbmVyYWwgVVJJIGZ1bmN0aW9ucyAqLwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3VyaV9wcm90b2NvbF9pc192YWxpZCAgICAgICAoY29uc3QgZ2NoYXIgKiBwcm90b2NvbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3VyaV9wcm90b2NvbF9pc19zdXBwb3J0ZWQgICAoY29uc3QgR3N0VVJJVHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpwcm90b2NvbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3VyaV9pc192YWxpZCAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKiB1cmkpOwotZ2NoYXIgKiAgICAgICAgIGdzdF91cmlfZ2V0X3Byb3RvY29sICAgICAgICAgICAgKGNvbnN0IGdjaGFyICogdXJpKSBHX0dOVUNfTUFMTE9DOwotZ2Jvb2xlYW4gICAgICAgIGdzdF91cmlfaGFzX3Byb3RvY29sICAgICAgICAgICAgKGNvbnN0IGdjaGFyICogdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogcHJvdG9jb2wpOwotZ2NoYXIgKiAgICAgICAgIGdzdF91cmlfZ2V0X2xvY2F0aW9uICAgICAgICAgICAgKGNvbnN0IGdjaGFyICogdXJpKSBHX0dOVUNfTUFMTE9DOwotZ2NoYXIgKiAgICAgICAgIGdzdF91cmlfY29uc3RydWN0ICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICogcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbikgR19HTlVDX01BTExPQzsKLQotZ2NoYXIgKiAgICAgICAgIGdzdF9maWxlbmFtZV90b191cmkgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICogZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAqKiBlcnJvcikgR19HTlVDX01BTExPQzsKLQotR3N0RWxlbWVudCAqICAgIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgICAgICAgKGNvbnN0IEdzdFVSSVR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqICAgIGVsZW1lbnRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICoqICAgZXJyb3IpIEdfR05VQ19NQUxMT0M7Ci0KLS8qIGFjY2Vzc2luZyB0aGUgaW50ZXJmYWNlICovCi1HVHlwZSAgICAgICAgICAgICAgICAgZ3N0X3VyaV9oYW5kbGVyX2dldF90eXBlICh2b2lkKTsKLQotR3N0VVJJVHlwZSAgICAgICAgICAgIGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGUgIChHc3RVUklIYW5kbGVyICogaGFuZGxlcik7Ci1jb25zdCBnY2hhciAqIGNvbnN0ICogZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKTsKLWdjaGFyICogICAgICAgICAgICAgICBnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaSAgICAgICAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpIEdfR05VQ19NQUxMT0M7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkgICAgICAgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICogdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgKiogZXJyb3IpOwotCi0vKgotICogR3N0VXJpIFR5cGUgbWFjcm9zLgotICovCi0jZGVmaW5lIEdTVF9UWVBFX1VSSSAgICAgICAgKGdzdF91cmlfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19VUkkob2JqKQkgICAgKEdTVF9JU19NSU5JX09CSkVDVF9UWVBFIChvYmosIEdTVF9UWVBFX1VSSSkpCi0jZGVmaW5lIEdTVF9VUklfQ0FTVChvYmopICAgKChHc3RVcmkgKikob2JqKSkKLSNkZWZpbmUgR1NUX1VSSV9DT05TVF9DQVNUKG9iaikgKChjb25zdCBHc3RVcmkgKikob2JqKSkKLSNkZWZpbmUgR1NUX1VSSShvYmopICAgICAgICAoR1NUX1VSSV9DQVNUKG9iaikpCi0KLS8qKgotICogR3N0VXJpOgotICoKLSAqIFRoaXMgaXMgYSBwcml2YXRlIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSB2YXJpb3VzIHBhcnRzIG9mIGEgcGFyc2VkIFVSSS4KLSAqLwotc3RydWN0IF9Hc3RVcmk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VXJpIEdzdFVyaTsKLQotLyoqCi0gKiBHU1RfVVJJX05PX1BPUlQ6Ci0gKgotICogVmFsdWUgZm9yICNHc3RVcmk8IS0tIC0tPi5wb3J0IHRvIGluZGljYXRlIG5vIHBvcnQgbnVtYmVyLgotICovCi0jZGVmaW5lIEdTVF9VUklfTk9fUE9SVCAwCi0KLS8qIHVzZWQgYnkgR1NUX1RZUEVfVVJJICovCi1HVHlwZSBnc3RfdXJpX2dldF90eXBlICh2b2lkKTsKLQotLyoKLSAqIE1ldGhvZCBkZWZpbml0aW9ucy4KLSAqLwotCi1Hc3RVcmkgKiBnc3RfdXJpX25ldyAgICAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKiBzY2hlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiB1c2VyaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBxdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGZyYWdtZW50KSBHX0dOVUNfTUFMTE9DOwotR3N0VXJpICogZ3N0X3VyaV9uZXdfd2l0aF9iYXNlICAgICAgICAgKEdzdFVyaSAqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBzY2hlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiB1c2VyaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBxdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGZyYWdtZW50KSBHX0dOVUNfTUFMTE9DOwotR3N0VXJpICogZ3N0X3VyaV9mcm9tX3N0cmluZyAgICAgICAgICAgKGNvbnN0IGdjaGFyICogdXJpKSBHX0dOVUNfTUFMTE9DOwotR3N0VXJpICogZ3N0X3VyaV9mcm9tX3N0cmluZ193aXRoX2Jhc2UgKEdzdFVyaSAqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiB1cmkpIEdfR05VQ19NQUxMT0M7Ci1nYm9vbGVhbiBnc3RfdXJpX2VxdWFsICAgICAgICAgICAgICAgICAoY29uc3QgR3N0VXJpICogZmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0VXJpICogc2Vjb25kKTsKLUdzdFVyaSAqIGdzdF91cmlfam9pbiAgICAgICAgICAgICAgICAgIChHc3RVcmkgKiBiYXNlX3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RVcmkgKiByZWZfdXJpKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotZ2NoYXIgKiAgZ3N0X3VyaV9qb2luX3N0cmluZ3MgICAgICAgICAgKGNvbnN0IGdjaGFyICogYmFzZV91cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiByZWZfdXJpKSBHX0dOVUNfTUFMTE9DOwotZ2Jvb2xlYW4gZ3N0X3VyaV9pc193cml0YWJsZSAgICAgICAgICAgKGNvbnN0IEdzdFVyaSAqIHVyaSk7Ci1Hc3RVcmkgKiBnc3RfdXJpX21ha2Vfd3JpdGFibGUgICAgICAgICAoR3N0VXJpICogdXJpKSBHX0dOVUNfV0FSTl9VTlVTRURfUkVTVUxUOwotZ2NoYXIgKiAgZ3N0X3VyaV90b19zdHJpbmcgICAgICAgICAgICAgKGNvbnN0IEdzdFVyaSAqIHVyaSkgR19HTlVDX01BTExPQzsKLWdib29sZWFuIGdzdF91cmlfaXNfbm9ybWFsaXplZCAgICAgICAgIChjb25zdCBHc3RVcmkgKiB1cmkpOwotZ2Jvb2xlYW4gZ3N0X3VyaV9ub3JtYWxpemUgICAgICAgICAgICAgKEdzdFVyaSAqIHVyaSk7Ci1jb25zdCBnY2hhciAqIGdzdF91cmlfZ2V0X3NjaGVtZSAgICAgICAoY29uc3QgR3N0VXJpICogdXJpKTsKLWdib29sZWFuIGdzdF91cmlfc2V0X3NjaGVtZSAgICAgICAgICAgIChHc3RVcmkgKiB1cmksIGNvbnN0IGdjaGFyICogc2NoZW1lKTsKLWNvbnN0IGdjaGFyICogZ3N0X3VyaV9nZXRfdXNlcmluZm8gICAgIChjb25zdCBHc3RVcmkgKiB1cmkpOwotZ2Jvb2xlYW4gZ3N0X3VyaV9zZXRfdXNlcmluZm8gICAgICAgICAgKEdzdFVyaSAqIHVyaSwgY29uc3QgZ2NoYXIgKiB1c2VyaW5mbyk7Ci1jb25zdCBnY2hhciAqIGdzdF91cmlfZ2V0X2hvc3QgICAgICAgICAoY29uc3QgR3N0VXJpICogdXJpKTsKLWdib29sZWFuIGdzdF91cmlfc2V0X2hvc3QgICAgICAgICAgICAgIChHc3RVcmkgKiB1cmksIGNvbnN0IGdjaGFyICogaG9zdCk7Ci1ndWludCBnc3RfdXJpX2dldF9wb3J0ICAgICAgICAgICAgICAgICAoY29uc3QgR3N0VXJpICogdXJpKTsKLWdib29sZWFuIGdzdF91cmlfc2V0X3BvcnQgICAgICAgICAgICAgIChHc3RVcmkgKiB1cmksIGd1aW50IHBvcnQpOwotZ2NoYXIgKiBnc3RfdXJpX2dldF9wYXRoICAgICAgICAgICAgICAgKGNvbnN0IEdzdFVyaSAqIHVyaSk7Ci1nYm9vbGVhbiBnc3RfdXJpX3NldF9wYXRoICAgICAgICAgICAgICAoR3N0VXJpICogdXJpLCBjb25zdCBnY2hhciAqIHBhdGgpOwotZ2NoYXIgKiBnc3RfdXJpX2dldF9wYXRoX3N0cmluZyAgICAgICAgKGNvbnN0IEdzdFVyaSAqIHVyaSk7Ci1nYm9vbGVhbiBnc3RfdXJpX3NldF9wYXRoX3N0cmluZyAgICAgICAoR3N0VXJpICogdXJpLCBjb25zdCBnY2hhciAqIHBhdGgpOwotR0xpc3QgKiBnc3RfdXJpX2dldF9wYXRoX3NlZ21lbnRzICAgICAgKGNvbnN0IEdzdFVyaSAqIHVyaSk7Ci1nYm9vbGVhbiBnc3RfdXJpX3NldF9wYXRoX3NlZ21lbnRzICAgICAoR3N0VXJpICogdXJpLCBHTGlzdCAqIHBhdGhfc2VnbWVudHMpOwotZ2Jvb2xlYW4gZ3N0X3VyaV9hcHBlbmRfcGF0aCAgICAgICAgICAgKEdzdFVyaSAqIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHJlbGF0aXZlX3BhdGgpOwotZ2Jvb2xlYW4gZ3N0X3VyaV9hcHBlbmRfcGF0aF9zZWdtZW50ICAgKEdzdFVyaSAqIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHBhdGhfc2VnbWVudCk7Ci1nY2hhciAqIGdzdF91cmlfZ2V0X3F1ZXJ5X3N0cmluZyAgICAgICAoY29uc3QgR3N0VXJpICogdXJpKTsKLWdib29sZWFuIGdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZyAgICAgIChHc3RVcmkgKiB1cmksIGNvbnN0IGdjaGFyICogcXVlcnkpOwotR0hhc2hUYWJsZSAqIGdzdF91cmlfZ2V0X3F1ZXJ5X3RhYmxlICAgKGNvbnN0IEdzdFVyaSAqIHVyaSk7Ci1nYm9vbGVhbiBnc3RfdXJpX3NldF9xdWVyeV90YWJsZSAgICAgICAoR3N0VXJpICogdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIYXNoVGFibGUgKiBxdWVyeV90YWJsZSk7Ci1nYm9vbGVhbiBnc3RfdXJpX3NldF9xdWVyeV92YWx1ZSAgICAgICAoR3N0VXJpICogdXJpLCBjb25zdCBnY2hhciAqIHF1ZXJ5X2tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHF1ZXJ5X3ZhbHVlKTsKLWdib29sZWFuIGdzdF91cmlfcmVtb3ZlX3F1ZXJ5X2tleSAgICAgIChHc3RVcmkgKiB1cmksIGNvbnN0IGdjaGFyICogcXVlcnlfa2V5KTsKLWdib29sZWFuIGdzdF91cmlfcXVlcnlfaGFzX2tleSAgICAgICAgIChjb25zdCBHc3RVcmkgKiB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBxdWVyeV9rZXkpOwotY29uc3QgZ2NoYXIgKiBnc3RfdXJpX2dldF9xdWVyeV92YWx1ZSAgKGNvbnN0IEdzdFVyaSAqIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHF1ZXJ5X2tleSk7Ci1HTGlzdCAqIGdzdF91cmlfZ2V0X3F1ZXJ5X2tleXMgICAgICAgICAoY29uc3QgR3N0VXJpICogdXJpKTsKLWNvbnN0IGdjaGFyICogZ3N0X3VyaV9nZXRfZnJhZ21lbnQgICAgIChjb25zdCBHc3RVcmkgKiB1cmkpOwotZ2Jvb2xlYW4gZ3N0X3VyaV9zZXRfZnJhZ21lbnQgICAgICAgICAgKEdzdFVyaSAqIHVyaSwgY29uc3QgZ2NoYXIgKiBmcmFnbWVudCk7Ci0KLS8qKgotICogZ3N0X3VyaV9jb3B5OgotICogQHVyaTogVGhpcyAjR3N0VXJpIG9iamVjdC4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgI0dzdFVyaSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBkYXRhIGFzIHRoaXMgI0dzdFVyaSBvYmplY3QuCi0gKiBJZiBAdXJpIGlzICVOVUxMIHRoZW4gcmV0dXJucyAlTlVMTC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgbmV3ICNHc3RVcmkgb2JqZWN0IHdoaWNoIGlzIGEgY29weSBvZiB0aGlzCi0gKiAgICAgICAgICAjR3N0VXJpIG9yICVOVUxMLgotICovCi1zdGF0aWMgaW5saW5lIEdzdFVyaSAqCi1nc3RfdXJpX2NvcHkgKGNvbnN0IEdzdFVyaSAqIHVyaSkKLXsKLSAgcmV0dXJuIEdTVF9VUklfQ0FTVCAoZ3N0X21pbmlfb2JqZWN0X2NvcHkgKEdTVF9NSU5JX09CSkVDVF9DT05TVF9DQVNUICh1cmkpKSk7Ci19Ci0KLS8qKgotICogZ3N0X3VyaV9yZWY6Ci0gKiBAdXJpOiAodHJhbnNmZXIgbm9uZSk6IFRoaXMgI0dzdFVyaSBvYmplY3QuCi0gKgotICogQWRkIGEgcmVmZXJlbmNlIHRvIHRoaXMgI0dzdFVyaSBvYmplY3QuIFNlZSBnc3RfbWluaV9vYmplY3RfcmVmKCkgZm9yIGZ1cnRoZXIKLSAqIGluZm8uCi0gKgotICogUmV0dXJuczogVGhpcyBvYmplY3Qgd2l0aCB0aGUgcmVmZXJlbmNlIGNvdW50IGluY3JlbWVudGVkLgotICovCi1zdGF0aWMgaW5saW5lIEdzdFVyaSAqCi1nc3RfdXJpX3JlZiAoR3N0VXJpICogdXJpKQotewotICByZXR1cm4gR1NUX1VSSV9DQVNUIChnc3RfbWluaV9vYmplY3RfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAodXJpKSkpOwotfQotCi0vKioKLSAqIGdzdF91cmlfdW5yZWY6Ci0gKiBAdXJpOiAodHJhbnNmZXIgZnVsbCk6IFRoaXMgI0dzdFVyaSBvYmplY3QuCi0gKgotICogRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhpcyAjR3N0VXJpIG9iamVjdC4KLSAqCi0gKiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIDAgdGhlbiBmaW5hbGl6ZSB0aGlzIG9iamVjdC4KLSAqCi0gKiBTZWUgZ3N0X21pbmlfb2JqZWN0X3VucmVmKCkgZm9yIGZ1cnRoZXIgaW5mby4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfdXJpX3VucmVmIChHc3RVcmkgKiB1cmkpCi17Ci0gIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKHVyaSkpOwotfQotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdFVyaSwgZ3N0X3VyaV91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVVJJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHV0aWxzLmMgYi9nc3QvZ3N0dXRpbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY0YjQxZi4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dXRpbHMuYworKysgL2Rldi9udWxsCkBAIC0xLDQwNDggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0gKgotICogZ3N0dXRpbHMuYzogVXRpbGl0eSBmdW5jdGlvbnMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0dXRpbHMKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucwotICoKLSAqLwotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0Z2hvc3RwYWQuaCIKLSNpbmNsdWRlICJnc3R1dGlscy5oIgotI2luY2x1ZGUgImdzdGVycm9yLmgiCi0jaW5jbHVkZSAiZ3N0aW5mby5oIgotI2luY2x1ZGUgImdzdHBhcnNlLmgiCi0jaW5jbHVkZSAiZ3N0dmFsdWUuaCIKLSNpbmNsdWRlICJnc3QtaTE4bi1saWIuaCIKLSNpbmNsdWRlICJnbGliLWNvbXBhdC1wcml2YXRlLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0vKioKLSAqIGdzdF91dGlsX2R1bXBfbWVtOgotICogQG1lbTogYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgdG8gZHVtcAotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgYmxvY2sgdG8gZHVtcAotICoKLSAqIER1bXBzIHRoZSBtZW1vcnkgYmxvY2sgaW50byBhIGhleCByZXByZXNlbnRhdGlvbi4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcuCi0gKi8KLXZvaWQKLWdzdF91dGlsX2R1bXBfbWVtIChjb25zdCBndWNoYXIgKiBtZW0sIGd1aW50IHNpemUpCi17Ci0gIGd1aW50IGksIGo7Ci0gIEdTdHJpbmcgKnN0cmluZyA9IGdfc3RyaW5nX3NpemVkX25ldyAoNTApOwotICBHU3RyaW5nICpjaGFycyA9IGdfc3RyaW5nX3NpemVkX25ldyAoMTgpOwotCi0gIGkgPSBqID0gMDsKLSAgd2hpbGUgKGkgPCBzaXplKSB7Ci0gICAgaWYgKGdfYXNjaWlfaXNwcmludCAobWVtW2ldKSkKLSAgICAgIGdfc3RyaW5nX2FwcGVuZF9jIChjaGFycywgbWVtW2ldKTsKLSAgICBlbHNlCi0gICAgICBnX3N0cmluZ19hcHBlbmRfYyAoY2hhcnMsICcuJyk7Ci0KLSAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHJpbmcsICIlMDJ4ICIsIG1lbVtpXSk7Ci0KLSAgICBqKys7Ci0gICAgaSsrOwotCi0gICAgaWYgKGogPT0gMTYgfHwgaSA9PSBzaXplKSB7Ci0gICAgICBnX3ByaW50ICgiJTA4eCAoJXApOiAlLTQ4LjQ4cyAlLTE2LjE2c1xuIiwgaSAtIGosIG1lbSArIGkgLSBqLAotICAgICAgICAgIHN0cmluZy0+c3RyLCBjaGFycy0+c3RyKTsKLSAgICAgIGdfc3RyaW5nX3NldF9zaXplIChzdHJpbmcsIDApOwotICAgICAgZ19zdHJpbmdfc2V0X3NpemUgKGNoYXJzLCAwKTsKLSAgICAgIGogPSAwOwotICAgIH0KLSAgfQotICBnX3N0cmluZ19mcmVlIChzdHJpbmcsIFRSVUUpOwotICBnX3N0cmluZ19mcmVlIChjaGFycywgVFJVRSk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmc6Ci0gKiBAdmFsdWU6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IHRoZSB2YWx1ZSB0byBzZXQKLSAqIEB2YWx1ZV9zdHI6IHRoZSBzdHJpbmcgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tCi0gKgotICogQ29udmVydHMgdGhlIHN0cmluZyB0byB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgYW5kCi0gKiBzZXRzIHRoZSB2YWx1ZSB3aXRoIGl0LgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGRhbmdlcm91cyBhcyBpdCBkb2VzIG5vdCByZXR1cm4gYW55IGluZGljYXRpb24KLSAqIGlmIHRoZSBjb252ZXJzaW9uIHdvcmtlZCBvciBub3QuCi0gKi8KLXZvaWQKLWdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoR1ZhbHVlICogdmFsdWUsIGNvbnN0IGdjaGFyICogdmFsdWVfc3RyKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAodmFsdWUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHZhbHVlX3N0ciAhPSBOVUxMKTsKLQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BBUkFNUywgInBhcnNpbmcgJyVzJyB0byB0eXBlICVzIiwgdmFsdWVfc3RyLAotICAgICAgZ190eXBlX25hbWUgKEdfVkFMVUVfVFlQRSAodmFsdWUpKSk7Ci0KLSAgcmVzID0gZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICh2YWx1ZSwgdmFsdWVfc3RyKTsKLSAgaWYgKCFyZXMgJiYgR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR19UWVBFX0JPT0xFQU4pIHsKLSAgICAvKiBiYWNrd2FyZHMgY29tcGF0LCBhbGwgYm9vbGVhbnMgdGhhdCBmYWlsIHRvIHBhcnNlIGFyZSBmYWxzZSAqLwotICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBGQUxTRSk7Ci0gICAgcmVzID0gVFJVRTsKLSAgfQotICBnX3JldHVybl9pZl9mYWlsIChyZXMpOwotfQotCi0vKioKLSAqIGdzdF91dGlsX3NldF9vYmplY3RfYXJnOgotICogQG9iamVjdDogdGhlIG9iamVjdCB0byBzZXQgdGhlIGFyZ3VtZW50IG9mCi0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50IHRvIHNldAotICogQHZhbHVlOiB0aGUgc3RyaW5nIHZhbHVlIHRvIHNldAotICoKLSAqIENvbnZlcnRzIHRoZSBzdHJpbmcgdmFsdWUgdG8gdGhlIHR5cGUgb2YgdGhlIG9iamVjdHMgYXJndW1lbnQgYW5kCi0gKiBzZXRzIHRoZSBhcmd1bWVudCB3aXRoIGl0LgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNpbGVudGx5IHJldHVybnMgaWYgQG9iamVjdCBoYXMgbm8gcHJvcGVydHkgbmFtZWQKLSAqIEBuYW1lIG9yIHdoZW4gQHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5LgotICovCi12b2lkCi1nc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoR09iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBuYW1lLAotICAgIGNvbnN0IGdjaGFyICogdmFsdWUpCi17Ci0gIEdQYXJhbVNwZWMgKnBzcGVjOwotICBHVHlwZSB2YWx1ZV90eXBlOwotICBHVmFsdWUgdiA9IHsgMCwgfTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX09CSkVDVCAob2JqZWN0KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwpOwotCi0gIHBzcGVjID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoR19PQkpFQ1RfR0VUX0NMQVNTIChvYmplY3QpLCBuYW1lKTsKLSAgaWYgKCFwc3BlYykKLSAgICByZXR1cm47Ci0KLSAgdmFsdWVfdHlwZSA9IHBzcGVjLT52YWx1ZV90eXBlOwotCi0gIEdTVF9ERUJVRyAoInBzcGVjLT5mbGFncyBpcyAlZCwgcHNwZWMtPnZhbHVlX3R5cGUgaXMgJXMiLAotICAgICAgcHNwZWMtPmZsYWdzLCBnX3R5cGVfbmFtZSAodmFsdWVfdHlwZSkpOwotCi0gIGlmICghKHBzcGVjLT5mbGFncyAmIEdfUEFSQU1fV1JJVEFCTEUpKQotICAgIHJldHVybjsKLQotICBnX3ZhbHVlX2luaXQgKCZ2LCB2YWx1ZV90eXBlKTsKLQotICAvKiBzcGVjaWFsIGNhc2UgZm9yIGVsZW1lbnQgPC0+IHhtbCAoZGUpc2VyaWFsaXNhdGlvbiAqLwotICBpZiAodmFsdWVfdHlwZSA9PSBHU1RfVFlQRV9TVFJVQ1RVUkUgJiYgc3RyY21wICh2YWx1ZSwgIk5VTEwiKSA9PSAwKSB7Ci0gICAgZ192YWx1ZV9zZXRfYm94ZWQgKCZ2LCBOVUxMKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBpZiAoIWdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnYsIHZhbHVlKSkKLSAgICByZXR1cm47Ci0KLWRvbmU6Ci0KLSAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChvYmplY3QsIHBzcGVjLT5uYW1lLCAmdik7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2KTsKLX0KLQotLyogd29yayBhcm91bmQgZXJyb3IgQzI1MjA6IGNvbnZlcnNpb24gZnJvbSB1bnNpZ25lZCBfX2ludDY0IHRvIGRvdWJsZQotICogbm90IGltcGxlbWVudGVkLCB1c2Ugc2lnbmVkIF9faW50NjQKLSAqCi0gKiBUaGVzZSBhcmUgaW1wbGVtZW50ZWQgYXMgZnVuY3Rpb25zIGJlY2F1c2Ugb24gc29tZSBwbGF0Zm9ybXMgYSA2NGJpdCBpbnQgdG8KLSAqIGRvdWJsZSBjb252ZXJzaW9uIGlzIG5vdCBkZWZpbmVkL2ltcGxlbWVudGVkLgotICovCi0KLWdkb3VibGUKLWdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSAoZ3VpbnQ2NCB2YWx1ZSkKLXsKLSAgaWYgKHZhbHVlICYgR19HSU5UNjRfQ09OU1RBTlQgKDB4ODAwMDAwMDAwMDAwMDAwMCkpCi0gICAgcmV0dXJuIChnZG91YmxlKSAoKGdpbnQ2NCkgdmFsdWUpICsgKGdkb3VibGUpIDE4NDQ2NzQ0MDczNzA5NTUxNjE2LjsKLSAgZWxzZQotICAgIHJldHVybiAoZ2RvdWJsZSkgKChnaW50NjQpIHZhbHVlKTsKLX0KLQotZ3VpbnQ2NAotZ3N0X3V0aWxfZ2RvdWJsZV90b19ndWludDY0IChnZG91YmxlIHZhbHVlKQotewotICBpZiAodmFsdWUgPCAoZ2RvdWJsZSkgOTIyMzM3MjAzNjg1NDc3NTgwOC4pICAgLyogMSA8PCA2MyAqLwotICAgIHJldHVybiAoKGd1aW50NjQpICgoZ2ludDY0KSB2YWx1ZSkpOwotCi0gIHZhbHVlIC09IChnZG91YmxlKSAxODQ0Njc0NDA3MzcwOTU1MTYxNi47Ci0gIHJldHVybiAoKGd1aW50NjQpICgoZ2ludDY0KSB2YWx1ZSkpOwotfQotCi0jaWZuZGVmIEhBVkVfVUlOVDEyOF9UCi0vKiBjb252ZW5pZW5jZSBzdHJ1Y3QgZm9yIGdldHRpbmcgaGlnaCBhbmQgbG93IHVpbnQzMiBwYXJ0cyBvZgotICogYSBndWludDY0ICovCi10eXBlZGVmIHVuaW9uCi17Ci0gIGd1aW50NjQgbGw7Ci0gIHN0cnVjdAotICB7Ci0jaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICAgIGd1aW50MzIgaGlnaCwgbG93OwotI2Vsc2UKLSAgICBndWludDMyIGxvdywgaGlnaDsKLSNlbmRpZgotICB9IGw7Ci19IEdzdFVJbnQ2NDsKLQotI2lmIGRlZmluZWQgKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fR05VQ19fKQotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfdXRpbF91aW50NjRfbXVsX3VpbnQ2NCAoR3N0VUludDY0ICogYzEsIEdzdFVJbnQ2NCAqIGMwLCBndWludDY0IGFyZzEsCi0gICAgZ3VpbnQ2NCBhcmcyKQotewotICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm11bHEgJTMiOiI9YSIgKGMwLT5sbCksICI9ZCIgKGMxLT5sbCkKLSAgICAgIDoiYSIgKGFyZzEpLCAiZyIgKGFyZzIpCi0gICAgICApOwotfQotI2Vsc2UgLyogZGVmaW5lZCAoX194ODZfNjRfXykgKi8KLS8qIG11bHRpcGx5IHR3byA2NC1iaXQgdW5zaWduZWQgaW50cyBpbnRvIGEgMTI4LWJpdCB1bnNpZ25lZCBpbnQuICB0aGUgaGlnaAotICogYW5kIGxvdyA2NCBiaXRzIG9mIHRoZSBwcm9kdWN0IGFyZSBwbGFjZWQgaW4gYzEgYW5kIGMwIHJlc3BlY3RpdmVseS4KLSAqIHRoaXMgb3BlcmF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X3V0aWxfdWludDY0X211bF91aW50NjQgKEdzdFVJbnQ2NCAqIGMxLCBHc3RVSW50NjQgKiBjMCwgZ3VpbnQ2NCBhcmcxLAotICAgIGd1aW50NjQgYXJnMikKLXsKLSAgR3N0VUludDY0IGExLCBiMDsKLSAgR3N0VUludDY0IHYsIG47Ci0KLSAgLyogcHJlcGFyZSBpbnB1dCAqLwotICB2LmxsID0gYXJnMTsKLSAgbi5sbCA9IGFyZzI7Ci0KLSAgLyogZG8gMTI4IGJpdHMgbXVsdGlwbHkKLSAgICogICAgICAgICAgICAgICAgICAgbmggICBubAotICAgKiAgICAgICAgICAgICAgICAqICB2aCAgIHZsCi0gICAqICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0KLSAgICogYTAgPSAgICAgICAgICAgICAgdmwgKiBubAotICAgKiBhMSA9ICAgICAgICAgdmwgKiBuaAotICAgKiBiMCA9ICAgICAgICAgdmggKiBubAotICAgKiBiMSA9ICArIHZoICogbmgKLSAgICogICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgKiAgICAgICAgYzFoICBjMWwgIGMwaCAgYzBsCi0gICAqCi0gICAqICJhMCIgaXMgb3B0aW1pemVkIGF3YXksIHJlc3VsdCBpcyBzdG9yZWQgZGlyZWN0bHkgaW4gYzAuICAiYjEiIGlzCi0gICAqIG9wdGltaXplZCBhd2F5LCByZXN1bHQgaXMgc3RvcmVkIGRpcmVjdGx5IGluIGMxLgotICAgKi8KLSAgYzAtPmxsID0gKGd1aW50NjQpIHYubC5sb3cgKiBuLmwubG93OwotICBhMS5sbCA9IChndWludDY0KSB2LmwubG93ICogbi5sLmhpZ2g7Ci0gIGIwLmxsID0gKGd1aW50NjQpIHYubC5oaWdoICogbi5sLmxvdzsKLQotICAvKiBhZGQgdGhlIGhpZ2ggd29yZCBvZiBhMCB0byB0aGUgbG93IHdvcmRzIG9mIGExIGFuZCBiMCB1c2luZyBjMSBhcwotICAgKiBzY3JhY2ggc3BhY2UgdG8gY2FwdHVyZSB0aGUgY2FycnkuICB0aGUgbG93IHdvcmQgb2YgdGhlIHJlc3VsdCBiZWNvbWVzCi0gICAqIHRoZSBmaW5hbCBoaWdoIHdvcmQgb2YgYzAgKi8KLSAgYzEtPmxsID0gKGd1aW50NjQpIGMwLT5sLmhpZ2ggKyBhMS5sLmxvdyArIGIwLmwubG93OwotICBjMC0+bC5oaWdoID0gYzEtPmwubG93OwotCi0gIC8qIGFkZCB0aGUgY2FycnkgZnJvbSB0aGUgcmVzdWx0IGFib3ZlIChmb3VuZCBpbiB0aGUgaGlnaCB3b3JkIG9mIGMxKSBhbmQKLSAgICogdGhlIGhpZ2ggd29yZHMgb2YgYTEgYW5kIGIwIHRvIGIxLCB0aGUgcmVzdWx0IGlzIGMxLiAqLwotICBjMS0+bGwgPSAoZ3VpbnQ2NCkgdi5sLmhpZ2ggKiBuLmwuaGlnaCArIGMxLT5sLmhpZ2ggKyBhMS5sLmhpZ2ggKyBiMC5sLmhpZ2g7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZCAoX194ODZfNjRfXykgKi8KLQotI2lmIGRlZmluZWQgKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fR05VQ19fKQotc3RhdGljIGlubGluZSBndWludDY0Ci1nc3RfdXRpbF9kaXYxMjhfNjQgKEdzdFVJbnQ2NCBjMSwgR3N0VUludDY0IGMwLCBndWludDY0IGRlbm9tKQotewotICBndWludDY0IHJlczsKLQotICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRpdnEgJTMiOiI9YSIgKHJlcykKLSAgICAgIDoiZCIgKGMxLmxsKSwgImEiIChjMC5sbCksICJnIiAoZGVub20pCi0gICAgICApOwotCi0gIHJldHVybiByZXM7Ci19Ci0jZWxzZQotLyogY291bnQgbGVhZGluZyB6ZXJvcyAqLwotc3RhdGljIGlubGluZSBndWludAotZ3N0X3V0aWxfY2x6IChndWludDMyIHZhbCkKLXsKLSAgZ3VpbnQgczsKLQotICBzID0gdmFsIHwgKHZhbCA+PiAxKTsKLSAgcyB8PSAocyA+PiAyKTsKLSAgcyB8PSAocyA+PiA0KTsKLSAgcyB8PSAocyA+PiA4KTsKLSAgcyA9IH4ocyB8IChzID4+IDE2KSk7Ci0gIHMgPSBzIC0gKChzID4+IDEpICYgMHg1NTU1NTU1NSk7Ci0gIHMgPSAocyAmIDB4MzMzMzMzMzMpICsgKChzID4+IDIpICYgMHgzMzMzMzMzMyk7Ci0gIHMgPSAocyArIChzID4+IDQpKSAmIDB4MGYwZjBmMGY7Ci0gIHMgKz0gKHMgPj4gOCk7Ci0gIHMgPSAocyArIChzID4+IDE2KSkgJiAweDNmOwotCi0gIHJldHVybiBzOwotfQotCi0vKiBiYXNlZCBvbiBIYWNrZXIncyBEZWxpZ2h0IHAxNTIgKi8KLXN0YXRpYyBpbmxpbmUgZ3VpbnQ2NAotZ3N0X3V0aWxfZGl2MTI4XzY0IChHc3RVSW50NjQgYzEsIEdzdFVJbnQ2NCBjMCwgZ3VpbnQ2NCBkZW5vbSkKLXsKLSAgR3N0VUludDY0IHExLCBxMCwgcmhhdDsKLSAgR3N0VUludDY0IHYsIGNtcDEsIGNtcDI7Ci0gIGd1aW50IHM7Ci0KLSAgdi5sbCA9IGRlbm9tOwotCi0gIC8qIGNvdW50IG51bWJlciBvZiBsZWFkaW5nIHplcm9lcywgd2Uga25vdyB0aGV5IG11c3QgYmUgaW4gdGhlIGhpZ2gKLSAgICogcGFydCBvZiBkZW5vbSBzaW5jZSBkZW5vbSA+IEdfTUFYVUlOVDMyLiAqLwotICBzID0gZ3N0X3V0aWxfY2x6ICh2LmwuaGlnaCk7Ci0KLSAgaWYgKHMgPiAwKSB7Ci0gICAgLyogbm9ybWFsaXplIGRpdmlzb3IgYW5kIGRpdmlkZW5kICovCi0gICAgdi5sbCA8PD0gczsKLSAgICBjMS5sbCA9IChjMS5sbCA8PCBzKSB8IChjMC5sLmhpZ2ggPj4gKDMyIC0gcykpOwotICAgIGMwLmxsIDw8PSBzOwotICB9Ci0KLSAgcTEubGwgPSBjMS5sbCAvIHYubC5oaWdoOwotICByaGF0LmxsID0gYzEubGwgLSBxMS5sbCAqIHYubC5oaWdoOwotCi0gIGNtcDEubC5oaWdoID0gcmhhdC5sLmxvdzsKLSAgY21wMS5sLmxvdyA9IGMwLmwuaGlnaDsKLSAgY21wMi5sbCA9IHExLmxsICogdi5sLmxvdzsKLQotICB3aGlsZSAocTEubC5oaWdoIHx8IGNtcDIubGwgPiBjbXAxLmxsKSB7Ci0gICAgcTEubGwtLTsKLSAgICByaGF0LmxsICs9IHYubC5oaWdoOwotICAgIGlmIChyaGF0LmwuaGlnaCkKLSAgICAgIGJyZWFrOwotICAgIGNtcDEubC5oaWdoID0gcmhhdC5sLmxvdzsKLSAgICBjbXAyLmxsIC09IHYubC5sb3c7Ci0gIH0KLSAgYzEubC5oaWdoID0gYzEubC5sb3c7Ci0gIGMxLmwubG93ID0gYzAubC5oaWdoOwotICBjMS5sbCAtPSBxMS5sbCAqIHYubGw7Ci0gIHEwLmxsID0gYzEubGwgLyB2LmwuaGlnaDsKLSAgcmhhdC5sbCA9IGMxLmxsIC0gcTAubGwgKiB2LmwuaGlnaDsKLQotICBjbXAxLmwuaGlnaCA9IHJoYXQubC5sb3c7Ci0gIGNtcDEubC5sb3cgPSBjMC5sLmxvdzsKLSAgY21wMi5sbCA9IHEwLmxsICogdi5sLmxvdzsKLQotICB3aGlsZSAocTAubC5oaWdoIHx8IGNtcDIubGwgPiBjbXAxLmxsKSB7Ci0gICAgcTAubGwtLTsKLSAgICByaGF0LmxsICs9IHYubC5oaWdoOwotICAgIGlmIChyaGF0LmwuaGlnaCkKLSAgICAgIGJyZWFrOwotICAgIGNtcDEubC5oaWdoID0gcmhhdC5sLmxvdzsKLSAgICBjbXAyLmxsIC09IHYubC5sb3c7Ci0gIH0KLSAgcTAubC5oaWdoICs9IHExLmwubG93OwotCi0gIHJldHVybiBxMC5sbDsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkIChfX0dOVUNfXykgKi8KLQotLyogVGhpcyBhbHdheXMgZ2l2ZXMgdGhlIGNvcnJlY3QgcmVzdWx0IGJlY2F1c2U6Ci0gKiBhKSB2YWwgPD0gR19NQVhVSU5UNjQtMQotICogYikgKGMwLGMxKSA8PSBHX01BWFVJTlQ2NCAqIChHX01BWFVJTlQ2NC0xKQotICogICAgb3IKLSAqICAgIChjMCxjMSkgPT0gR19NQVhVSU5UNjQgKiBHX01BWFVJTlQ2NCBhbmQgZGVub20gPCBHX01BWFVJTlQ2NAotICogICAgKG5vdGU6IG51bT09ZGVub20gY2FzZSBpcyBoYW5kbGVkIGJ5IHNob3J0IHBhdGgpCi0gKiBUaGlzIG1lYW5zIHRoYXQgKGMwLGMxKSBlaXRoZXIgaGFzIGVub3VnaCBzcGFjZSBmb3IgdmFsCi0gKiBvciB0aGF0IHRoZSBvdmVyYWxsIHJlc3VsdCB3aWxsIG92ZXJmbG93IGFueXdheS4KLSAqLwotCi0vKiBhZGQgY29ycmVjdGlvbiB3aXRoIGNhcnJ5ICovCi0jZGVmaW5lIENPUlJFQ1QoYzAsYzEsdmFsKSAgICAgICAgICAgICAgICAgICAgXAotICBpZiAodmFsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoR19NQVhVSU5UNjQgLSBjMC5sbCA8IHZhbCkgeyAgICAgICAgICBcCi0gICAgICBpZiAoR19VTkxJS0VMWSAoYzEubGwgPT0gR19NQVhVSU5UNjQpKSAgXAotICAgICAgICAvKiBvdmVyZmxvdyAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIEdfTUFYVUlOVDY0OyAgICAgICAgICAgICAgICAgICBcCi0gICAgICBjMS5sbCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjMC5sbCArPSB2YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotc3RhdGljIGd1aW50NjQKLWdzdF91dGlsX3VpbnQ2NF9zY2FsZV91aW50NjRfdW5jaGVja2VkIChndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sCi0gICAgZ3VpbnQ2NCBkZW5vbSwgZ3VpbnQ2NCBjb3JyZWN0KQotewotICBHc3RVSW50NjQgYzEsIGMwOwotCi0gIC8qIGNvbXB1dGUgMTI4LWJpdCBudW1lcmF0b3IgcHJvZHVjdCAqLwotICBnc3RfdXRpbF91aW50NjRfbXVsX3VpbnQ2NCAoJmMxLCAmYzAsIHZhbCwgbnVtKTsKLQotICAvKiBwZXJmb3JtIHJvdW5kaW5nIGNvcnJlY3Rpb24gKi8KLSAgQ09SUkVDVCAoYzAsIGMxLCBjb3JyZWN0KTsKLQotICAvKiBoaWdoIHdvcmQgYXMgYmlnIGFzIG9yIGJpZ2dlciB0aGFuIGRlbm9tIC0tPiBvdmVyZmxvdyAqLwotICBpZiAoR19VTkxJS0VMWSAoYzEubGwgPj0gZGVub20pKQotICAgIHJldHVybiBHX01BWFVJTlQ2NDsKLQotICAvKiBjb21wdXRlIHF1b3RpZW50LCBmaXRzIGluIDY0IGJpdHMgKi8KLSAgcmV0dXJuIGdzdF91dGlsX2RpdjEyOF82NCAoYzEsIGMwLCBkZW5vbSk7Ci19Ci0jZWxzZQotCi0jZGVmaW5lIEdTVF9NQVhVSU5UMTI4ICgoX191aW50MTI4X3QpIC0xKQotc3RhdGljIGd1aW50NjQKLWdzdF91dGlsX3VpbnQ2NF9zY2FsZV91aW50NjRfdW5jaGVja2VkIChndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sCi0gICAgZ3VpbnQ2NCBkZW5vbSwgZ3VpbnQ2NCBjb3JyZWN0KQotewotICBfX3VpbnQxMjhfdCB0bXA7Ci0KLSAgLyogQ2FsY3VsYXRlIHZhbCAqIG51bSAqLwotICB0bXAgPSAoKF9fdWludDEyOF90KSB2YWwpICogKChfX3VpbnQxMjhfdCkgbnVtKTsKLQotICAvKiBvdmVyZmxvdyBjaGVja3MgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9NQVhVSU5UMTI4IC0gY29ycmVjdCA8IHRtcCkpCi0gICAgcmV0dXJuIEdfTUFYVUlOVDY0OwotCi0gIC8qIHBlcmZvcm0gcm91bmRpbmcgY29ycmVjdGlvbiAqLwotICB0bXAgKz0gY29ycmVjdDsKLQotICAvKiBEaXZpZGUgYnkgZGVub20gKi8KLSAgdG1wIC89IGRlbm9tOwotCi0gIC8qIGlmIGxhcmdlciB0aGFuIEdfTUFYVUlOVDY0IC0tPiBvdmVyZmxvdyAqLwotICBpZiAoR19VTkxJS0VMWSAodG1wID4gR19NQVhVSU5UNjQpKQotICAgIHJldHVybiBHX01BWFVJTlQ2NDsKLQotICAvKiBjb21wdXRlIHF1b3RpZW50LCBmaXRzIGluIDY0IGJpdHMgKi8KLSAgcmV0dXJuIChndWludDY0KSB0bXA7Ci19Ci0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKF9feDg2XzY0X18pICYmICFkZWZpbmVkIChIQVZFX1VJTlQxMjhfVCkKLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X3V0aWxfdWludDY0X211bF91aW50MzIgKEdzdFVJbnQ2NCAqIGMxLCBHc3RVSW50NjQgKiBjMCwgZ3VpbnQ2NCBhcmcxLAotICAgIGd1aW50MzIgYXJnMikKLXsKLSAgR3N0VUludDY0IGE7Ci0KLSAgYS5sbCA9IGFyZzE7Ci0KLSAgYzAtPmxsID0gKGd1aW50NjQpIGEubC5sb3cgKiBhcmcyOwotICBjMS0+bGwgPSAoZ3VpbnQ2NCkgYS5sLmhpZ2ggKiBhcmcyICsgYzAtPmwuaGlnaDsKLSAgYzAtPmwuaGlnaCA9IDA7Ci19Ci0KLS8qIGRpdmlkZSBhIDk2LWJpdCB1bnNpZ25lZCBpbnQgYnkgYSAzMi1iaXQgdW5zaWduZWQgaW50IHdoZW4gd2Uga25vdyB0aGUKLSAqIHF1b3RpZW50IGZpdHMgaW50byA2NCBiaXRzLiAgdGhlIGhpZ2ggNjQgYml0cyBhbmQgbG93IDMyIGJpdHMgb2YgdGhlCi0gKiBudW1lcmF0b3IgYXJlIGV4cGVjdGVkIGluIGMxIGFuZCBjMCByZXNwZWN0aXZlbHkuICovCi1zdGF0aWMgaW5saW5lIGd1aW50NjQKLWdzdF91dGlsX2Rpdjk2XzMyIChndWludDY0IGMxLCBndWludDY0IGMwLCBndWludDMyIGRlbm9tKQotewotICBjMCArPSAoYzEgJSBkZW5vbSkgPDwgMzI7Ci0gIHJldHVybiAoKGMxIC8gZGVub20pIDw8IDMyKSArIChjMCAvIGRlbm9tKTsKLX0KLQotc3RhdGljIGlubGluZSBndWludDY0Ci1nc3RfdXRpbF91aW50NjRfc2NhbGVfdWludDMyX3VuY2hlY2tlZCAoZ3VpbnQ2NCB2YWwsIGd1aW50MzIgbnVtLAotICAgIGd1aW50MzIgZGVub20sIGd1aW50MzIgY29ycmVjdCkKLXsKLSAgR3N0VUludDY0IGMxLCBjMDsKLQotICAvKiBjb21wdXRlIDk2LWJpdCBudW1lcmF0b3IgcHJvZHVjdCAqLwotICBnc3RfdXRpbF91aW50NjRfbXVsX3VpbnQzMiAoJmMxLCAmYzAsIHZhbCwgbnVtKTsKLQotICAvKiBjb25kaXRpb24gbnVtZXJhdG9yIGJhc2VkIG9uIHJvdW5kaW5nIG1vZGUgKi8KLSAgQ09SUkVDVCAoYzAsIGMxLCBjb3JyZWN0KTsKLQotICAvKiBoaWdoIDMyIGJpdHMgYXMgYmlnIGFzIG9yIGJpZ2dlciB0aGFuIGRlbm9tIC0tPiBvdmVyZmxvdyAqLwotICBpZiAoR19VTkxJS0VMWSAoYzEubC5oaWdoID49IGRlbm9tKSkKLSAgICByZXR1cm4gR19NQVhVSU5UNjQ7Ci0KLSAgLyogY29tcHV0ZSBxdW90aWVudCwgZml0cyBpbiA2NCBiaXRzICovCi0gIHJldHVybiBnc3RfdXRpbF9kaXY5Nl8zMiAoYzEubGwsIGMwLmxsLCBkZW5vbSk7Ci19Ci0jZW5kaWYKLQotLyogdGhlIGd1dHMgb2YgdGhlIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpIHZhcmlhbnRzICovCi1zdGF0aWMgZ3VpbnQ2NAotX2dzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZ3VpbnQ2NCB2YWwsIGd1aW50NjQgbnVtLCBndWludDY0IGRlbm9tLAotICAgIGd1aW50NjQgY29ycmVjdCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlbm9tICE9IDAsIEdfTUFYVUlOVDY0KTsKLQotICBpZiAoR19VTkxJS0VMWSAobnVtID09IDApKQotICAgIHJldHVybiAwOwotCi0gIGlmIChHX1VOTElLRUxZIChudW0gPT0gZGVub20pKQotICAgIHJldHVybiB2YWw7Ci0KLSAgLyogb24gNjRiaXRzIHdlIGFsd2F5cyB1c2UgYSBmdWxsIDEyOGJpdHMgbXVsdGlwbHkvZGl2aXNpb24gKi8KLSNpZiAhZGVmaW5lZCAoX194ODZfNjRfXykgJiYgIWRlZmluZWQgKEhBVkVfVUlOVDEyOF9UKQotICAvKiBkZW5vbSBpcyBsb3cgLS0+IHRyeSB0byB1c2UgOTYgYml0IG11bGRpdiAqLwotICBpZiAoR19MSUtFTFkgKGRlbm9tIDw9IEdfTUFYVUlOVDMyKSkgewotICAgIC8qIG51bSBpcyBsb3cgLS0+IHVzZSA5NiBiaXQgbXVsZGl2ICovCi0gICAgaWYgKEdfTElLRUxZIChudW0gPD0gR19NQVhVSU5UMzIpKQotICAgICAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV91aW50MzJfdW5jaGVja2VkICh2YWwsIChndWludDMyKSBudW0sCi0gICAgICAgICAgKGd1aW50MzIpIGRlbm9tLCBjb3JyZWN0KTsKLQotICAgIC8qIG51bSBpcyBoaWdoIGJ1dCB2YWwgaXMgbG93IC0tPiBzd2FwIGFuZCB1c2UgOTYtYml0IG11bGRpdiAqLwotICAgIGlmIChHX0xJS0VMWSAodmFsIDw9IEdfTUFYVUlOVDMyKSkKLSAgICAgIHJldHVybiBnc3RfdXRpbF91aW50NjRfc2NhbGVfdWludDMyX3VuY2hlY2tlZCAobnVtLCAoZ3VpbnQzMikgdmFsLAotICAgICAgICAgIChndWludDMyKSBkZW5vbSwgY29ycmVjdCk7Ci0gIH0KLSNlbmRpZiAvKiAhZGVmaW5lZCAoX194ODZfNjRfXykgJiYgIWRlZmluZWQgKEhBVkVfVUlOVDEyOF9UKSAqLwotCi0gIC8qIHZhbCBpcyBoaWdoIGFuZCBudW0gaXMgaGlnaCAtLT4gdXNlIDEyOC1iaXQgbXVsZGl2ICovCi0gIHJldHVybiBnc3RfdXRpbF91aW50NjRfc2NhbGVfdWludDY0X3VuY2hlY2tlZCAodmFsLCBudW0sIGRlbm9tLCBjb3JyZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfdXRpbF91aW50NjRfc2NhbGU6Ci0gKiBAdmFsOiB0aGUgbnVtYmVyIHRvIHNjYWxlCi0gKiBAbnVtOiB0aGUgbnVtZXJhdG9yIG9mIHRoZSBzY2FsZSByYXRpbwotICogQGRlbm9tOiB0aGUgZGVub21pbmF0b3Igb2YgdGhlIHNjYWxlIHJhdGlvCi0gKgotICogU2NhbGUgQHZhbCBieSB0aGUgcmF0aW9uYWwgbnVtYmVyIEBudW0gLyBAZGVub20sIGF2b2lkaW5nIG92ZXJmbG93cyBhbmQKLSAqIHVuZGVyZmxvd3MgYW5kIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uCi0gKgotICogVGhpcyBmdW5jdGlvbiBjYW4gcG90ZW50aWFsbHkgYmUgdmVyeSBzbG93IGlmIHZhbCBhbmQgbnVtIGFyZSBib3RoCi0gKiBncmVhdGVyIHRoYW4gR19NQVhVSU5UMzIuCi0gKgotICogUmV0dXJuczogQHZhbCAqIEBudW0gLyBAZGVub20uICBJbiB0aGUgY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhpcwotICogZnVuY3Rpb24gcmV0dXJucyBHX01BWFVJTlQ2NC4gIElmIHRoZSByZXN1bHQgaXMgbm90IGV4YWN0bHkKLSAqIHJlcHJlc2VudGFibGUgYXMgYW4gaW50ZWdlciBpdCBpcyB0cnVuY2F0ZWQuICBTZWUgYWxzbwotICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kKCksIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsKCksCi0gKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KCksIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQoKSwKLSAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCgpLgotICovCi1ndWludDY0Ci1nc3RfdXRpbF91aW50NjRfc2NhbGUgKGd1aW50NjQgdmFsLCBndWludDY0IG51bSwgZ3VpbnQ2NCBkZW5vbSkKLXsKLSAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGUgKHZhbCwgbnVtLCBkZW5vbSwgMCk7Ci19Ci0KLS8qKgotICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kOgotICogQHZhbDogdGhlIG51bWJlciB0byBzY2FsZQotICogQG51bTogdGhlIG51bWVyYXRvciBvZiB0aGUgc2NhbGUgcmF0aW8KLSAqIEBkZW5vbTogdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBzY2FsZSByYXRpbwotICoKLSAqIFNjYWxlIEB2YWwgYnkgdGhlIHJhdGlvbmFsIG51bWJlciBAbnVtIC8gQGRlbm9tLCBhdm9pZGluZyBvdmVyZmxvd3MgYW5kCi0gKiB1bmRlcmZsb3dzIGFuZCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGJlIHZlcnkgc2xvdyBpZiB2YWwgYW5kIG51bSBhcmUgYm90aAotICogZ3JlYXRlciB0aGFuIEdfTUFYVUlOVDMyLgotICoKLSAqIFJldHVybnM6IEB2YWwgKiBAbnVtIC8gQGRlbm9tLiAgSW4gdGhlIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRoaXMKLSAqIGZ1bmN0aW9uIHJldHVybnMgR19NQVhVSU5UNjQuICBJZiB0aGUgcmVzdWx0IGlzIG5vdCBleGFjdGx5Ci0gKiByZXByZXNlbnRhYmxlIGFzIGFuIGludGVnZXIsIGl0IGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcgotICogKGhhbGYtd2F5IGNhc2VzIGFyZSByb3VuZGVkIHVwKS4gIFNlZSBhbHNvIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpLAotICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKSwgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpLAotICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKS4KLSAqLwotZ3VpbnQ2NAotZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sIGd1aW50NjQgZGVub20pCi17Ci0gIHJldHVybiBfZ3N0X3V0aWxfdWludDY0X3NjYWxlICh2YWwsIG51bSwgZGVub20sIGRlbm9tID4+IDEpOwotfQotCi0vKioKLSAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsOgotICogQHZhbDogdGhlIG51bWJlciB0byBzY2FsZQotICogQG51bTogdGhlIG51bWVyYXRvciBvZiB0aGUgc2NhbGUgcmF0aW8KLSAqIEBkZW5vbTogdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBzY2FsZSByYXRpbwotICoKLSAqIFNjYWxlIEB2YWwgYnkgdGhlIHJhdGlvbmFsIG51bWJlciBAbnVtIC8gQGRlbm9tLCBhdm9pZGluZyBvdmVyZmxvd3MgYW5kCi0gKiB1bmRlcmZsb3dzIGFuZCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGJlIHZlcnkgc2xvdyBpZiB2YWwgYW5kIG51bSBhcmUgYm90aAotICogZ3JlYXRlciB0aGFuIEdfTUFYVUlOVDMyLgotICoKLSAqIFJldHVybnM6IEB2YWwgKiBAbnVtIC8gQGRlbm9tLiAgSW4gdGhlIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRoaXMKLSAqIGZ1bmN0aW9uIHJldHVybnMgR19NQVhVSU5UNjQuICBJZiB0aGUgcmVzdWx0IGlzIG5vdCBleGFjdGx5Ci0gKiByZXByZXNlbnRhYmxlIGFzIGFuIGludGVnZXIsIGl0IGlzIHJvdW5kZWQgdXAuICBTZWUgYWxzbwotICogZ3N0X3V0aWxfdWludDY0X3NjYWxlKCksIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCgpLAotICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCksCi0gKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKS4KLSAqLwotZ3VpbnQ2NAotZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKGd1aW50NjQgdmFsLCBndWludDY0IG51bSwgZ3VpbnQ2NCBkZW5vbSkKLXsKLSAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGUgKHZhbCwgbnVtLCBkZW5vbSwgZGVub20gLSAxKTsKLX0KLQotLyogdGhlIGd1dHMgb2YgdGhlIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQoKSB2YXJpYW50cyAqLwotc3RhdGljIGd1aW50NjQKLV9nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChndWludDY0IHZhbCwgZ2ludCBudW0sIGdpbnQgZGVub20sIGdpbnQgY29ycmVjdCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlbm9tID4gMCwgR19NQVhVSU5UNjQpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobnVtID49IDAsIEdfTUFYVUlOVDY0KTsKLQotICBpZiAoR19VTkxJS0VMWSAobnVtID09IDApKQotICAgIHJldHVybiAwOwotCi0gIGlmIChHX1VOTElLRUxZIChudW0gPT0gZGVub20pKQotICAgIHJldHVybiB2YWw7Ci0KLSAgaWYgKHZhbCA8PSBHX01BWFVJTlQzMikgewotICAgIC8qIHNpbXBsZSBjYXNlLiAgbnVtIGFuZCBkZW5vbSBhcmUgbm90IG5lZ2F0aXZlIHNvIGNhc3RzIGFyZSBPSy4gIHdoZW4KLSAgICAgKiBub3QgdHJ1bmNhdGluZywgdGhlIGFkZGl0aW9ucyB0byB0aGUgbnVtZXJhdG9yIGNhbm5vdCBvdmVyZmxvdwotICAgICAqIGJlY2F1c2UgdmFsKm51bSA8PSBHX01BWFVJTlQzMiAqIEdfTUFYSU5UMzIgPCBHX01BWFVJTlQ2NCAtCi0gICAgICogR19NQVhJTlQzMiwgc28gdGhlcmUncyByb29tIHRvIGFkZCBhbm90aGVyIGdpbnQzMi4gKi8KLSAgICB2YWwgKj0gKGd1aW50NjQpIG51bTsKLSAgICAvKiBhZGQgcm91bmRpbmcgY29ycmVjdGlvbiAqLwotICAgIHZhbCArPSBjb3JyZWN0OwotCi0gICAgcmV0dXJuIHZhbCAvIChndWludDY0KSBkZW5vbTsKLSAgfQotI2lmICFkZWZpbmVkIChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZCAoSEFWRV9VSU5UMTI4X1QpCi0gIC8qIG51bSBhbmQgZGVub20gYXJlIG5vdCBuZWdhdGl2ZSBzbyBjYXN0cyBhcmUgT0sgKi8KLSAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV91aW50MzJfdW5jaGVja2VkICh2YWwsIChndWludDMyKSBudW0sCi0gICAgICAoZ3VpbnQzMikgZGVub20sIChndWludDMyKSBjb3JyZWN0KTsKLSNlbHNlCi0gIC8qIGFsd2F5cyB1c2UgZnVsbCAxMjhiaXRzIHNjYWxlICovCi0gIHJldHVybiBnc3RfdXRpbF91aW50NjRfc2NhbGVfdWludDY0X3VuY2hlY2tlZCAodmFsLCBudW0sIGRlbm9tLCBjb3JyZWN0KTsKLSNlbmRpZgotfQotCi0vKioKLSAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQ6Ci0gKiBAdmFsOiBndWludDY0IChzdWNoIGFzIGEgI0dzdENsb2NrVGltZSkgdG8gc2NhbGUuCi0gKiBAbnVtOiBudW1lcmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci4KLSAqIEBkZW5vbTogZGVub21pbmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci4KLSAqCi0gKiBTY2FsZSBAdmFsIGJ5IHRoZSByYXRpb25hbCBudW1iZXIgQG51bSAvIEBkZW5vbSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAotICogdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIEBudW0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kCi0gKiBAZGVub20gbXVzdCBiZSBwb3NpdGl2ZS4KLSAqCi0gKiBSZXR1cm5zOiBAdmFsICogQG51bSAvIEBkZW5vbS4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCi0gKiBmdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQotICogcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyLCBpdCBpcyB0cnVuY2F0ZWQuICBTZWUgYWxzbwotICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKSwKLSAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQoKSwKLSAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsKCkuCi0gKi8KLWd1aW50NjQKLWdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKGd1aW50NjQgdmFsLCBnaW50IG51bSwgZ2ludCBkZW5vbSkKLXsKLSAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh2YWwsIG51bSwgZGVub20sIDApOwotfQotCi0vKioKLSAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQ6Ci0gKiBAdmFsOiBndWludDY0IChzdWNoIGFzIGEgI0dzdENsb2NrVGltZSkgdG8gc2NhbGUuCi0gKiBAbnVtOiBudW1lcmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci4KLSAqIEBkZW5vbTogZGVub21pbmF0b3Igb2YgdGhlIHNjYWxlIGZhY3Rvci4KLSAqCi0gKiBTY2FsZSBAdmFsIGJ5IHRoZSByYXRpb25hbCBudW1iZXIgQG51bSAvIEBkZW5vbSwgYXZvaWRpbmcgb3ZlcmZsb3dzIGFuZAotICogdW5kZXJmbG93cyBhbmQgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIEBudW0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kCi0gKiBAZGVub20gbXVzdCBiZSBwb3NpdGl2ZS4KLSAqCi0gKiBSZXR1cm5zOiBAdmFsICogQG51bSAvIEBkZW5vbS4gIEluIHRoZSBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGlzCi0gKiBmdW5jdGlvbiByZXR1cm5zIEdfTUFYVUlOVDY0LiAgSWYgdGhlIHJlc3VsdCBpcyBub3QgZXhhY3RseQotICogcmVwcmVzZW50YWJsZSBhcyBhbiBpbnRlZ2VyLCBpdCBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIKLSAqIChoYWxmLXdheSBjYXNlcyBhcmUgcm91bmRlZCB1cCkuICBTZWUgYWxzbyBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KCksCi0gKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwoKSwgZ3N0X3V0aWxfdWludDY0X3NjYWxlKCksCi0gKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQoKSwgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwoKS4KLSAqLwotZ3VpbnQ2NAotZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoZ3VpbnQ2NCB2YWwsIGdpbnQgbnVtLCBnaW50IGRlbm9tKQotewotICAvKiB3ZSBjYW4gdXNlIGEgc2hpZnQgdG8gZGl2aWRlIGJ5IDIgYmVjYXVzZSBkZW5vbSBpcyByZXF1aXJlZCB0byBiZQotICAgKiBwb3NpdGl2ZS4gKi8KLSAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh2YWwsIG51bSwgZGVub20sIGRlbm9tID4+IDEpOwotfQotCi0vKioKLSAqIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbDoKLSAqIEB2YWw6IGd1aW50NjQgKHN1Y2ggYXMgYSAjR3N0Q2xvY2tUaW1lKSB0byBzY2FsZS4KLSAqIEBudW06IG51bWVyYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLgotICogQGRlbm9tOiBkZW5vbWluYXRvciBvZiB0aGUgc2NhbGUgZmFjdG9yLgotICoKLSAqIFNjYWxlIEB2YWwgYnkgdGhlIHJhdGlvbmFsIG51bWJlciBAbnVtIC8gQGRlbm9tLCBhdm9pZGluZyBvdmVyZmxvd3MgYW5kCi0gKiB1bmRlcmZsb3dzIGFuZCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLiAgQG51bSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQKLSAqIEBkZW5vbSBtdXN0IGJlIHBvc2l0aXZlLgotICoKLSAqIFJldHVybnM6IEB2YWwgKiBAbnVtIC8gQGRlbm9tLiAgSW4gdGhlIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRoaXMKLSAqIGZ1bmN0aW9uIHJldHVybnMgR19NQVhVSU5UNjQuICBJZiB0aGUgcmVzdWx0IGlzIG5vdCBleGFjdGx5Ci0gKiByZXByZXNlbnRhYmxlIGFzIGFuIGludGVnZXIsIGl0IGlzIHJvdW5kZWQgdXAuICBTZWUgYWxzbwotICogZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpLCBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKCksCi0gKiBnc3RfdXRpbF91aW50NjRfc2NhbGUoKSwgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kKCksCi0gKiBnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCgpLgotICovCi1ndWludDY0Ci1nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKGd1aW50NjQgdmFsLCBnaW50IG51bSwgZ2ludCBkZW5vbSkKLXsKLSAgcmV0dXJuIF9nc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh2YWwsIG51bSwgZGVub20sIGRlbm9tIC0gMSk7Ci19Ci0KLS8qKgotICogZ3N0X3V0aWxfc2VxbnVtX25leHQ6Ci0gKgotICogUmV0dXJuIGEgY29uc3RhbnRseSBpbmNyZW1lbnRpbmcgc2VxdWVuY2UgbnVtYmVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IHRvIEdTdHJlYW1lciB0byBiZSBhYmxlIHRvIGRldGVybWluZSB3aGljaAotICogZXZlbnRzIGFuZCBtZXNzYWdlcyBhcmUgInRoZSBzYW1lIi4gRm9yIGV4YW1wbGUsIGVsZW1lbnRzIG1heSBzZXQgdGhlIHNlcW51bQotICogb24gYSBzZWdtZW50LWRvbmUgbWVzc2FnZSB0byBiZSB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBsYXN0IHNlZWsgZXZlbnQsIHRvCi0gKiBpbmRpY2F0ZSB0aGF0IGV2ZW50IGFuZCB0aGUgbWVzc2FnZSBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHNlZ21lbnQuCi0gKgotICogUmV0dXJuczogQSBjb25zdGFudGx5IGluY3JlbWVudGluZyAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciwgd2hpY2ggbWlnaHQKLSAqIG92ZXJmbG93IGJhY2sgdG8gMCBhdCBzb21lIHBvaW50LiBVc2UgZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUoKSB0byBtYWtlIHN1cmUKLSAqIHlvdSBoYW5kbGUgd3JhcGFyb3VuZCBjb3JyZWN0bHkuCi0gKi8KLWd1aW50MzIKLWdzdF91dGlsX3NlcW51bV9uZXh0ICh2b2lkKQotewotICBzdGF0aWMgZ2ludCBjb3VudGVyID0gMDsKLSAgcmV0dXJuIGdfYXRvbWljX2ludF9hZGQgKCZjb3VudGVyLCAxKTsKLX0KLQotLyoqCi0gKiBnc3RfdXRpbF9zZXFudW1fY29tcGFyZToKLSAqIEBzMTogQSBzZXF1ZW5jZSBudW1iZXIuCi0gKiBAczI6IEFub3RoZXIgc2VxdWVuY2UgbnVtYmVyLgotICoKLSAqIENvbXBhcmUgdHdvIHNlcXVlbmNlIG51bWJlcnMsIGhhbmRsaW5nIHdyYXBhcm91bmQuCi0gKgotICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIChnaW50MzIpKEBzMSAtIEBzMikuCi0gKgotICogUmV0dXJuczogQSBuZWdhdGl2ZSBudW1iZXIgaWYgQHMxIGlzIGJlZm9yZSBAczIsIDAgaWYgdGhleSBhcmUgZXF1YWwsIG9yIGEKLSAqIHBvc2l0aXZlIG51bWJlciBpZiBAczEgaXMgYWZ0ZXIgQHMyLgotICovCi1naW50MzIKLWdzdF91dGlsX3NlcW51bV9jb21wYXJlIChndWludDMyIHMxLCBndWludDMyIHMyKQotewotICByZXR1cm4gKGdpbnQzMikgKHMxIC0gczIpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqICBUaGUgZm9sbG93aW5nIGNvZGUgd2lsbCBiZSBtb3ZlZCBvdXQgb2YgdGhlIG1haW4KLSAqIGdzdHJlYW1lciBsaWJyYXJ5IHNvbWVkYXkuCi0gKi8KLQotI2luY2x1ZGUgImdzdHBhZC5oIgotCi0vKioKLSAqIGdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkczoKLSAqIEBlbGVtZW50OiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEVsZW1lbnQgdG8gY3JlYXRlIHBhZHMgZm9yCi0gKgotICogQ3JlYXRlcyBhIHBhZCBmb3IgZWFjaCBwYWQgdGVtcGxhdGUgdGhhdCBpcyBhbHdheXMgYXZhaWxhYmxlLgotICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWZ1bCBkdXJpbmcgb2JqZWN0IGluaXRpYWxpemF0aW9uIG9mCi0gKiBzdWJjbGFzc2VzIG9mICNHc3RFbGVtZW50LgotICovCi12b2lkCi1nc3RfZWxlbWVudF9jcmVhdGVfYWxsX3BhZHMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHTGlzdCAqcGFkbGlzdDsKLQotICAvKiBGSVhNRTogbG9jayBlbGVtZW50ICovCi0KLSAgcGFkbGlzdCA9Ci0gICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKEdTVF9FTEVNRU5UX0NMQVNTCi0gICAgICAoR19PQkpFQ1RfR0VUX0NMQVNTIChlbGVtZW50KSkpOwotCi0gIHdoaWxlIChwYWRsaXN0KSB7Ci0gICAgR3N0UGFkVGVtcGxhdGUgKnBhZHRlbXBsID0gKEdzdFBhZFRlbXBsYXRlICopIHBhZGxpc3QtPmRhdGE7Ci0KLSAgICBpZiAocGFkdGVtcGwtPnByZXNlbmNlID09IEdTVF9QQURfQUxXQVlTKSB7Ci0gICAgICBHc3RQYWQgKnBhZDsKLQotICAgICAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkdGVtcGwsIHBhZHRlbXBsLT5uYW1lX3RlbXBsYXRlKTsKLQotICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZWxlbWVudCwgcGFkKTsKLSAgICB9Ci0gICAgcGFkbGlzdCA9IHBhZGxpc3QtPm5leHQ7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGU6Ci0gKiBAZWxlbWVudDogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RFbGVtZW50IHRvIGdldCBhIGNvbXBhdGlibGUgcGFkIHRlbXBsYXRlIGZvcgotICogQGNvbXBhdHRlbXBsOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0UGFkVGVtcGxhdGUgdG8gZmluZCBhIGNvbXBhdGlibGUKLSAqICAgICB0ZW1wbGF0ZSBmb3IKLSAqCi0gKiBSZXRyaWV2ZXMgYSBwYWQgdGVtcGxhdGUgZnJvbSBAZWxlbWVudCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBAY29tcGF0dGVtcGwuCi0gKiBQYWRzIGZyb20gY29tcGF0aWJsZSB0ZW1wbGF0ZXMgY2FuIGJlIGxpbmtlZCB0b2dldGhlci4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKG51bGxhYmxlKTogYSBjb21wYXRpYmxlICNHc3RQYWRUZW1wbGF0ZSwKLSAqICAgb3IgJU5VTEwgaWYgbm9uZSB3YXMgZm91bmQuIE5vIHVucmVmZXJlbmNpbmcgaXMgbmVjZXNzYXJ5LgotICovCi1Hc3RQYWRUZW1wbGF0ZSAqCi1nc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogY29tcGF0dGVtcGwpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICpuZXd0ZW1wbCA9IE5VTEw7Ci0gIEdMaXN0ICpwYWRsaXN0OwotICBHc3RFbGVtZW50Q2xhc3MgKmNsYXNzOwotICBnYm9vbGVhbiBjb21wYXRpYmxlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbGVtZW50ICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbXBhdHRlbXBsICE9IE5VTEwsIE5VTEwpOwotCi0gIGNsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLQotICBwYWRsaXN0ID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0IChjbGFzcyk7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCi0gICAgICAiTG9va2luZyBmb3IgYSBzdWl0YWJsZSBwYWQgdGVtcGxhdGUgaW4gJXMgb3V0IG9mICVkIHRlbXBsYXRlcy4uLiIsCi0gICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSwgZ19saXN0X2xlbmd0aCAocGFkbGlzdCkpOwotCi0gIHdoaWxlIChwYWRsaXN0KSB7Ci0gICAgR3N0UGFkVGVtcGxhdGUgKnBhZHRlbXBsID0gKEdzdFBhZFRlbXBsYXRlICopIHBhZGxpc3QtPmRhdGE7Ci0KLSAgICAvKiBJZ25vcmUgbmFtZQotICAgICAqIElnbm9yZSBwcmVzZW5jZQotICAgICAqIENoZWNrIGRpcmVjdGlvbiAobXVzdCBiZSBvcHBvc2l0ZSkKLSAgICAgKiBDaGVjayBjYXBzCi0gICAgICovCi0gICAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfQ0FQUywKLSAgICAgICAgImNoZWNraW5nIHBhZCB0ZW1wbGF0ZSAlcyIsIHBhZHRlbXBsLT5uYW1lX3RlbXBsYXRlKTsKLSAgICBpZiAocGFkdGVtcGwtPmRpcmVjdGlvbiAhPSBjb21wYXR0ZW1wbC0+ZGlyZWN0aW9uKSB7Ci0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBUFMsCi0gICAgICAgICAgImNvbXBhdGlibGUgZGlyZWN0aW9uOiBmb3VuZCAlcyBwYWQgdGVtcGxhdGUgXCIlc1wiIiwKLSAgICAgICAgICBwYWR0ZW1wbC0+ZGlyZWN0aW9uID09IEdTVF9QQURfU1JDID8gInNyYyIgOiAic2luayIsCi0gICAgICAgICAgcGFkdGVtcGwtPm5hbWVfdGVtcGxhdGUpOwotCi0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBUFMsCi0gICAgICAgICAgImludGVyc2VjdGluZyAlIiBHU1RfUFRSX0ZPUk1BVCwgR1NUX1BBRF9URU1QTEFURV9DQVBTIChjb21wYXR0ZW1wbCkpOwotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9DQVBTLAotICAgICAgICAgICIuLmFuZCAlIiBHU1RfUFRSX0ZPUk1BVCwgR1NUX1BBRF9URU1QTEFURV9DQVBTIChwYWR0ZW1wbCkpOwotCi0gICAgICBjb21wYXRpYmxlID0gZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoR1NUX1BBRF9URU1QTEFURV9DQVBTIChjb21wYXR0ZW1wbCksCi0gICAgICAgICAgR1NUX1BBRF9URU1QTEFURV9DQVBTIChwYWR0ZW1wbCkpOwotCi0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0NBUFMsICJjYXBzIGFyZSAlc2NvbXBhdGlibGUiLAotICAgICAgICAgIChjb21wYXRpYmxlID8gIiIgOiAibm90ICIpKTsKLQotICAgICAgaWYgKGNvbXBhdGlibGUpIHsKLSAgICAgICAgbmV3dGVtcGwgPSBwYWR0ZW1wbDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcGFkbGlzdCA9IGdfbGlzdF9uZXh0IChwYWRsaXN0KTsKLSAgfQotICBpZiAobmV3dGVtcGwpCi0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCi0gICAgICAgICJSZXR1cm5pbmcgbmV3IHBhZCB0ZW1wbGF0ZSAlcCIsIG5ld3RlbXBsKTsKLSAgZWxzZQotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAiTm8gY29tcGF0aWJsZSBwYWQgdGVtcGxhdGUgZm91bmQiKTsKLQotICByZXR1cm4gbmV3dGVtcGw7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfZ2V0X3BhZF9mcm9tX3RlbXBsYXRlOgotICogQGVsZW1lbnQ6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0RWxlbWVudC4KLSAqIEB0ZW1wbDogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RQYWRUZW1wbGF0ZSBiZWxvbmdpbmcgdG8gQGVsZW1lbnQuCi0gKgotICogR2V0cyBhIHBhZCBmcm9tIEBlbGVtZW50IGRlc2NyaWJlZCBieSBAdGVtcGwuIElmIHRoZSBwcmVzZW5jZSBvZiBAdGVtcGwgaXMKLSAqICNHU1RfUEFEX1JFUVVFU1QsIHJlcXVlc3RzIGEgbmV3IHBhZC4gQ2FuIHJldHVybiAlTlVMTCBmb3IgI0dTVF9QQURfU09NRVRJTUVTCi0gKiB0ZW1wbGF0ZXMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSAjR3N0UGFkLCBvciAlTlVMTCBpZiBvbmUKLSAqICAgY291bGQgbm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQuCi0gKi8KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X2VsZW1lbnRfZ2V0X3BhZF9mcm9tX3RlbXBsYXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKLXsKLSAgR3N0UGFkICpyZXQgPSBOVUxMOwotICBHc3RQYWRQcmVzZW5jZSBwcmVzZW5jZTsKLQotICAvKiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGV2ZXIgZXhwb3J0ZWQsIHdlIG5lZWQgY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGBlbGVtZW50JwotICAgKiBhbmQgYHRlbXBsJywgYW5kIHRvIG1ha2Ugc3VyZSB0aGUgdGVtcGxhdGUgYWN0dWFsbHkgYmVsb25ncyB0byB0aGUKLSAgICogZWxlbWVudC4gKi8KLQotICBwcmVzZW5jZSA9IEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UgKHRlbXBsKTsKLQotICBzd2l0Y2ggKHByZXNlbmNlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX0FMV0FZUzoKLSAgICBjYXNlIEdTVF9QQURfU09NRVRJTUVTOgotICAgICAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsIHRlbXBsLT5uYW1lX3RlbXBsYXRlKTsKLSAgICAgIGlmICghcmV0ICYmIHByZXNlbmNlID09IEdTVF9QQURfQUxXQVlTKQotICAgICAgICBnX3dhcm5pbmcKLSAgICAgICAgICAgICgiRWxlbWVudCAlcyBoYXMgYW4gQUxXQVlTIHRlbXBsYXRlICVzLCBidXQgbm8gcGFkIG9mIHRoZSBzYW1lIG5hbWUiLAotICAgICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChlbGVtZW50KSwgdGVtcGwtPm5hbWVfdGVtcGxhdGUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9QQURfUkVRVUVTVDoKLSAgICAgIHJldCA9IGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkIChlbGVtZW50LCB0ZW1wbCwgTlVMTCwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBnc3RfZWxlbWVudF9yZXF1ZXN0X2NvbXBhdGlibGVfcGFkOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQuCi0gKiBAdGVtcGw6IHRoZSAjR3N0UGFkVGVtcGxhdGUgdG8gd2hpY2ggdGhlIG5ldyBwYWQgc2hvdWxkIGJlIGFibGUgdG8gbGluay4KLSAqCi0gKiBSZXF1ZXN0cyBhIHBhZCBmcm9tIEBlbGVtZW50LiBUaGUgcmV0dXJuZWQgcGFkIHNob3VsZCBiZSB1bmxpbmtlZCBhbmQKLSAqIGNvbXBhdGlibGUgd2l0aCBAdGVtcGwuIE1pZ2h0IHJldHVybiBhbiBleGlzdGluZyBwYWQsIG9yIHJlcXVlc3QgYSBuZXcgb25lLgotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSk6IGEgI0dzdFBhZCwgb3IgJU5VTEwgaWYgb25lIGNvdWxkIG5vdCBiZSBmb3VuZAotICogICBvciBjcmVhdGVkLgotICovCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9lbGVtZW50X3JlcXVlc3RfY29tcGF0aWJsZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbF9uZXc7Ci0gIEdzdFBhZCAqcGFkID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQURfVEVNUExBVEUgKHRlbXBsKSwgTlVMTCk7Ci0KLSAgLyogRklYTUU6IHNob3VsZCByZWFsbHkgbG9vcCB0aHJvdWdoIHRoZSB0ZW1wbGF0ZXMsIHRlc3RpbmcgZWFjaCBmb3IKLSAgICogICAgICBjb21wYXRpYmlsaXR5IGFuZCBwYWQgYXZhaWxhYmlsaXR5LiAqLwotICB0ZW1wbF9uZXcgPSBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGUgKGVsZW1lbnQsIHRlbXBsKTsKLSAgaWYgKHRlbXBsX25ldykKLSAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfcGFkX2Zyb21fdGVtcGxhdGUgKGVsZW1lbnQsIHRlbXBsX25ldyk7Ci0gIC8qIFRoaXMgY2FuIGhhcHBlbiBmb3Igbm9uLXJlcXVlc3QgcGFkcy4gKi8KLSAgaWYgKHBhZCAmJiBHU1RfUEFEX1BFRVIgKHBhZCkpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICAgIHBhZCA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gcGFkOwotfQotCi0vKgotICogQ2hlY2tzIGlmIHRoZSBzb3VyY2UgcGFkIGFuZCB0aGUgc2luayBwYWQgY2FuIGJlIGxpbmtlZC4KLSAqIEJvdGggQHNyY3BhZCBhbmQgQHNpbmtwYWQgbXVzdCBiZSB1bmxpbmtlZCBhbmQgaGF2ZSBhIHBhcmVudC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcGFkX2NoZWNrX2xpbmsgKEdzdFBhZCAqIHNyY3BhZCwgR3N0UGFkICogc2lua3BhZCkKLXsKLSAgLyogZ2VuZXJpYyBjaGVja3MgKi8KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHNyY3BhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHNpbmtwYWQpLCBGQUxTRSk7Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJ0cnlpbmcgdG8gbGluayAlczolcyBhbmQgJXM6JXMiLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpLCBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmtwYWQpKTsKLQotICBpZiAoR1NUX1BBRF9QRUVSIChzcmNwYWQpICE9IE5VTEwpIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgIlNvdXJjZSBwYWQgJXM6JXMgaGFzIGEgcGVlciwgZmFpbGVkIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgaWYgKEdTVF9QQURfUEVFUiAoc2lua3BhZCkgIT0gTlVMTCkgewotICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiU2luayBwYWQgJXM6JXMgaGFzIGEgcGVlciwgZmFpbGVkIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmICghR1NUX1BBRF9JU19TUkMgKHNyY3BhZCkpIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgIlNyYyBwYWQgJXM6JXMgaXMgbm90IHNvdXJjZSBwYWQsIGZhaWxlZCIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmICghR1NUX1BBRF9JU19TSU5LIChzaW5rcGFkKSkgewotICAgIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QQURTLCAiU2luayBwYWQgJXM6JXMgaXMgbm90IHNpbmsgcGFkLCBmYWlsZWQiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmtwYWQpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgaWYgKEdTVF9QQURfUEFSRU5UIChzcmNwYWQpID09IE5VTEwpIHsKLSAgICBHU1RfQ0FUX0lORk8gKEdTVF9DQVRfUEFEUywgIlNyYyBwYWQgJXM6JXMgaGFzIG5vIHBhcmVudCwgZmFpbGVkIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgaWYgKEdTVF9QQURfUEFSRU5UIChzaW5rcGFkKSA9PSBOVUxMKSB7Ci0gICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICJTaW5rIHBhZCAlczolcyBoYXMgbm8gcGFyZW50LCBmYWlsZWQiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZDoKLSAqIEBlbGVtZW50OiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEVsZW1lbnQgaW4gd2hpY2ggdGhlIHBhZCBzaG91bGQgYmUgZm91bmQuCi0gKiBAcGFkOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0UGFkIHRvIGZpbmQgYSBjb21wYXRpYmxlIG9uZSBmb3IuCi0gKiBAY2FwczogKGFsbG93LW5vbmUpOiB0aGUgI0dzdENhcHMgdG8gdXNlIGFzIGEgZmlsdGVyLgotICoKLSAqIExvb2tzIGZvciBhbiB1bmxpbmtlZCBwYWQgdG8gd2hpY2ggdGhlIGdpdmVuIHBhZCBjYW4gbGluay4gSXQgaXMgbm90Ci0gKiBndWFyYW50ZWVkIHRoYXQgbGlua2luZyB0aGUgcGFkcyB3aWxsIHdvcmssIHRob3VnaCBpdCBzaG91bGQgd29yayBpbiBtb3N0Ci0gKiBjYXNlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgYXR0ZW1wdCB0byBmaW5kIGEgY29tcGF0aWJsZSB1bmxpbmtlZCBBTFdBWVMgcGFkLAotICogYW5kIGlmIG5vbmUgY2FuIGJlIGZvdW5kLCBpdCB3aWxsIHJlcXVlc3QgYSBjb21wYXRpYmxlIFJFUVVFU1QgcGFkIGJ5IGxvb2tpbmcKLSAqIGF0IHRoZSB0ZW1wbGF0ZXMgb2YgQGVsZW1lbnQuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSAjR3N0UGFkIHRvIHdoaWNoIGEgbGluawotICogICBjYW4gYmUgbWFkZSwgb3IgJU5VTEwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4gZ3N0X29iamVjdF91bnJlZigpCi0gKiAgIGFmdGVyIHVzYWdlLgotICovCi1Hc3RQYWQgKgotZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkLAotICAgIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RJdGVyYXRvciAqcGFkczsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotICBHc3RDYXBzICp0ZW1wbGNhcHM7Ci0gIEdzdFBhZCAqZm91bmRwYWQgPSBOVUxMOwotICBnYm9vbGVhbiBkb25lOwotICBHVmFsdWUgcGFkcHRyID0geyAwLCB9OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCi0gICAgICAiZmluZGluZyBwYWQgaW4gJXMgY29tcGF0aWJsZSB3aXRoICVzOiVzIiwKLSAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX1BFRVIgKHBhZCkgPT0gTlVMTCwgTlVMTCk7Ci0KLSAgZG9uZSA9IEZBTFNFOwotCi0gIC8qIHRyeSB0byBnZXQgYW4gZXhpc3RpbmcgdW5saW5rZWQgcGFkICovCi0gIGlmIChHU1RfUEFEX0lTX1NSQyAocGFkKSkgewotICAgIHBhZHMgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoZWxlbWVudCk7Ci0gIH0gZWxzZSBpZiAoR1NUX1BBRF9JU19TSU5LIChwYWQpKSB7Ci0gICAgcGFkcyA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKGVsZW1lbnQpOwotICB9IGVsc2UgewotICAgIHBhZHMgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKGVsZW1lbnQpOwotICB9Ci0KLSAgd2hpbGUgKCFkb25lKSB7Ci0gICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAocGFkcywgJnBhZHB0cikpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgotICAgICAgewotICAgICAgICBHc3RQYWQgKnBlZXI7Ci0gICAgICAgIEdzdFBhZCAqY3VycmVudDsKLSAgICAgICAgR3N0UGFkICpzcmNwYWQ7Ci0gICAgICAgIEdzdFBhZCAqc2lua3BhZDsKLQotICAgICAgICBjdXJyZW50ID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmcGFkcHRyKTsKLQotICAgICAgICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJleGFtaW5pbmcgcGFkICVzOiVzIiwKLSAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoY3VycmVudCkpOwotCi0gICAgICAgIGlmIChHU1RfUEFEX0lTX1NSQyAoY3VycmVudCkpIHsKLSAgICAgICAgICBzcmNwYWQgPSBjdXJyZW50OwotICAgICAgICAgIHNpbmtwYWQgPSBwYWQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3JjcGFkID0gcGFkOwotICAgICAgICAgIHNpbmtwYWQgPSBjdXJyZW50OwotICAgICAgICB9Ci0gICAgICAgIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChjdXJyZW50KTsKLQotICAgICAgICBpZiAocGVlciA9PSBOVUxMICYmIGdzdF9wYWRfY2hlY2tfbGluayAoc3JjcGFkLCBzaW5rcGFkKSkgewotICAgICAgICAgIEdzdENhcHMgKnRlbXAsICppbnRlcnNlY3Rpb247Ci0gICAgICAgICAgZ2Jvb2xlYW4gY29tcGF0aWJsZTsKLQotICAgICAgICAgIC8qIE5vdyBjaGVjayBpZiB0aGUgdHdvIHBhZHMnIGNhcHMgYXJlIGNvbXBhdGlibGUgKi8KLSAgICAgICAgICB0ZW1wID0gZ3N0X3BhZF9xdWVyeV9jYXBzIChwYWQsIE5VTEwpOwotICAgICAgICAgIGlmIChjYXBzKSB7Ci0gICAgICAgICAgICBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRlbXAsIGNhcHMpOwotICAgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXApOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnRlcnNlY3Rpb24gPSB0ZW1wOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHRlbXAgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKGN1cnJlbnQsIE5VTEwpOwotICAgICAgICAgIGNvbXBhdGlibGUgPSBnc3RfY2Fwc19jYW5faW50ZXJzZWN0ICh0ZW1wLCBpbnRlcnNlY3Rpb24pOwotICAgICAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wKTsKLSAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoaW50ZXJzZWN0aW9uKTsKLQotICAgICAgICAgIGlmIChjb21wYXRpYmxlKSB7Ci0gICAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywKLSAgICAgICAgICAgICAgICAiZm91bmQgZXhpc3RpbmcgdW5saW5rZWQgY29tcGF0aWJsZSBwYWQgJXM6JXMiLAotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoY3VycmVudCkpOwotICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKHBhZHMpOwotCi0gICAgICAgICAgICBjdXJyZW50ID0gZ3N0X29iamVjdF9yZWYgKGN1cnJlbnQpOwotICAgICAgICAgICAgZ192YWx1ZV91bnNldCAoJnBhZHB0cik7Ci0KLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgImluY29tcGF0aWJsZSBwYWRzIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAotICAgICAgICAgICAgICAiYWxyZWFkeSBsaW5rZWQgb3IgY2Fubm90IGJlIGxpbmtlZCAocGVlciA9ICVwKSIsIHBlZXIpOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAidW5yZWZmaW5nIHBhZHMiKTsKLQotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmcGFkcHRyKTsKLSAgICAgICAgaWYgKHBlZXIpCi0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChwYWRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBnX3ZhbHVlX3Vuc2V0ICgmcGFkcHRyKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKHBhZHMpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgZWxlbWVudCwKLSAgICAgICJDb3VsZCBub3QgZmluZCBhIGNvbXBhdGlibGUgdW5saW5rZWQgYWx3YXlzIHBhZCB0byBsaW5rIHRvICVzOiVzLCBub3cgY2hlY2tpbmcgcmVxdWVzdCBwYWRzIiwKLSAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgLyogdHJ5IHRvIGNyZWF0ZSBhIG5ldyBvbmUgKi8KLSAgLyogcmVxdWVzdGluZyBpcyBhIGxpdHRsZSBjcmF6eSwgd2UgbmVlZCBhIHRlbXBsYXRlLiBMZXQncyBjcmVhdGUgb25lICovCi0gIHRlbXBsY2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAocGFkLCBOVUxMKTsKLSAgaWYgKGNhcHMpIHsKLSAgICBHc3RDYXBzICppbnRlciA9IGdzdF9jYXBzX2ludGVyc2VjdCAodGVtcGxjYXBzLCBjYXBzKTsKLQotICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbGNhcHMpOwotICAgIHRlbXBsY2FwcyA9IGludGVyOwotICB9Ci0gIHRlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKChnY2hhciAqKSBHU1RfUEFEX05BTUUgKHBhZCksCi0gICAgICBHU1RfUEFEX0RJUkVDVElPTiAocGFkKSwgR1NUX1BBRF9BTFdBWVMsIHRlbXBsY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZW1wbGNhcHMpOwotCi0gIGZvdW5kcGFkID0gZ3N0X2VsZW1lbnRfcmVxdWVzdF9jb21wYXRpYmxlX3BhZCAoZWxlbWVudCwgdGVtcGwpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZW1wbCk7Ci0KLSAgaWYgKGZvdW5kcGFkKSB7Ci0gICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCi0gICAgICAgICJmb3VuZCBleGlzdGluZyByZXF1ZXN0IHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAoZm91bmRwYWQpKTsKLSAgICByZXR1cm4gZm91bmRwYWQ7Ci0gIH0KLQotICBHU1RfQ0FUX0lORk9fT0JKRUNUIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgZWxlbWVudCwKLSAgICAgICJDb3VsZCBub3QgZmluZCBhIGNvbXBhdGlibGUgcGFkIHRvIGxpbmsgdG8gJXM6JXMiLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWU6Ci0gKiBAc3RhdGU6IGEgI0dzdFN0YXRlIHRvIGdldCB0aGUgbmFtZSBvZi4KLSAqCi0gKiBHZXRzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gc3RhdGUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZS4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKEdzdFN0YXRlIHN0YXRlKQotewotICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOgotICAgICAgcmV0dXJuICJWT0lEX1BFTkRJTkciOwotICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6Ci0gICAgICByZXR1cm4gIk5VTEwiOwotICAgIGNhc2UgR1NUX1NUQVRFX1JFQURZOgotICAgICAgcmV0dXJuICJSRUFEWSI7Ci0gICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKLSAgICAgIHJldHVybiAiUExBWUlORyI7Ci0gICAgY2FzZSBHU1RfU1RBVEVfUEFVU0VEOgotICAgICAgcmV0dXJuICJQQVVTRUQiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBUaGlzIGlzIGEgbWVtb3J5IGxlYWsgKi8KLSAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJVTktOT1dOISglZCkiLCBzdGF0ZSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lOgotICogQHN0YXRlX3JldDogYSAjR3N0U3RhdGVDaGFuZ2VSZXR1cm4gdG8gZ2V0IHRoZSBuYW1lIG9mLgotICoKLSAqIEdldHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBzdGF0ZSBjaGFuZ2UgcmVzdWx0LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSBzdHJpbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3RhdGUKLSAqICAgIHJlc3VsdC4KLSAqLwotY29uc3QgZ2NoYXIgKgotZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZSAoR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0KQotewotICBzd2l0Y2ggKHN0YXRlX3JldCkgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgotICAgICAgcmV0dXJuICJGQUlMVVJFIjsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzoKLSAgICAgIHJldHVybiAiU1VDQ0VTUyI7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgotICAgICAgcmV0dXJuICJBU1lOQyI7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Ci0gICAgICByZXR1cm4gIk5PIFBSRVJPTEwiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBUaGlzIGlzIGEgbWVtb3J5IGxlYWsgKi8KLSAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJVTktOT1dOISglZCkiLCBzdGF0ZV9yZXQpOwotICB9Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9hY2NlcHRfYWxsX2NhcHNfaW5fZGlyZWN0aW9uIChHc3RFbGVtZW50RmFjdG9yeSAqCi0gICAgZmFjdG9yeSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gIEdMaXN0ICp0ZW1wbGF0ZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZhY3RvcnkgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgdGVtcGxhdGVzID0gZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzOwotCi0gIHdoaWxlICh0ZW1wbGF0ZXMpIHsKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGxhdGUgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgdGVtcGxhdGVzLT5kYXRhOwotCi0gICAgaWYgKHRlbXBsYXRlLT5kaXJlY3Rpb24gPT0gZGlyZWN0aW9uKSB7Ci0gICAgICBHc3RDYXBzICp0ZW1wbGNhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmdGVtcGxhdGUtPnN0YXRpY19jYXBzKTsKLQotICAgICAgaWYgKGdzdF9jYXBzX2lzX2Fsd2F5c19jb21wYXRpYmxlIChjYXBzLCB0ZW1wbGNhcHMpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbGNhcHMpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgIH0KLSAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbGNhcHMpOwotICAgIH0KLSAgICB0ZW1wbGF0ZXMgPSBnX2xpc3RfbmV4dCAodGVtcGxhdGVzKTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9hY2NlcHRfYW55X2NhcHNfaW5fZGlyZWN0aW9uIChHc3RFbGVtZW50RmFjdG9yeSAqCi0gICAgZmFjdG9yeSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gIEdMaXN0ICp0ZW1wbGF0ZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZhY3RvcnkgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgdGVtcGxhdGVzID0gZmFjdG9yeS0+c3RhdGljcGFkdGVtcGxhdGVzOwotCi0gIHdoaWxlICh0ZW1wbGF0ZXMpIHsKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGxhdGUgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgdGVtcGxhdGVzLT5kYXRhOwotCi0gICAgaWYgKHRlbXBsYXRlLT5kaXJlY3Rpb24gPT0gZGlyZWN0aW9uKSB7Ci0gICAgICBHc3RDYXBzICp0ZW1wbGNhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmdGVtcGxhdGUtPnN0YXRpY19jYXBzKTsKLQotICAgICAgaWYgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGNhcHMsIHRlbXBsY2FwcykpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsY2Fwcyk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgICAgfQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsY2Fwcyk7Ci0gICAgfQotICAgIHRlbXBsYXRlcyA9IGdfbGlzdF9uZXh0ICh0ZW1wbGF0ZXMpOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYWxsX2NhcHM6Ci0gKiBAZmFjdG9yeTogZmFjdG9yeSB0byBxdWVyeQotICogQGNhcHM6IHRoZSBjYXBzIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIHRoZSBmYWN0b3J5IGNhbiBzaW5rIGFsbCBwb3NzaWJsZSBjYXBhYmlsaXRpZXMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNhcHMgYXJlIGZ1bGx5IGNvbXBhdGlibGUuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FsbF9jYXBzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnksCi0gICAgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9hY2NlcHRfYWxsX2NhcHNfaW5fZGlyZWN0aW9uIChmYWN0b3J5LCBjYXBzLAotICAgICAgR1NUX1BBRF9TSU5LKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zcmNfYWxsX2NhcHM6Ci0gKiBAZmFjdG9yeTogZmFjdG9yeSB0byBxdWVyeQotICogQGNhcHM6IHRoZSBjYXBzIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIHRoZSBmYWN0b3J5IGNhbiBzcmMgYWxsIHBvc3NpYmxlIGNhcGFiaWxpdGllcy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2FwcyBhcmUgZnVsbHkgY29tcGF0aWJsZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbGxfY2FwcyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LAotICAgIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fYWNjZXB0X2FsbF9jYXBzX2luX2RpcmVjdGlvbiAoZmFjdG9yeSwgY2FwcywKLSAgICAgIEdTVF9QQURfU1JDKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzOgotICogQGZhY3Rvcnk6IGZhY3RvcnkgdG8gcXVlcnkKLSAqIEBjYXBzOiB0aGUgY2FwcyB0byBjaGVjawotICoKLSAqIENoZWNrcyBpZiB0aGUgZmFjdG9yeSBjYW4gc2luayBhbnkgcG9zc2libGUgY2FwYWJpbGl0eS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2FwcyBoYXZlIGEgY29tbW9uIHN1YnNldC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHMgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKLSAgICBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX2FjY2VwdF9hbnlfY2Fwc19pbl9kaXJlY3Rpb24gKGZhY3RvcnksIGNhcHMsCi0gICAgICBHU1RfUEFEX1NJTkspOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2FwczoKLSAqIEBmYWN0b3J5OiBmYWN0b3J5IHRvIHF1ZXJ5Ci0gKiBAY2FwczogdGhlIGNhcHMgdG8gY2hlY2sKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGZhY3RvcnkgY2FuIHNyYyBhbnkgcG9zc2libGUgY2FwYWJpbGl0eS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2FwcyBoYXZlIGEgY29tbW9uIHN1YnNldC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NyY19hbnlfY2FwcyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LAotICAgIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fYWNjZXB0X2FueV9jYXBzX2luX2RpcmVjdGlvbiAoZmFjdG9yeSwgY2FwcywKLSAgICAgIEdTVF9QQURfU1JDKTsKLX0KLQotLyogaWYgcmV0dXJuIHZhbCBpcyB0cnVlLCAqZGlyZWN0X2NoaWxkIGlzIGEgY2FsbGVyLW93bmVkIHJlZiBvbiB0aGUgZGlyZWN0Ci0gKiBjaGlsZCBvZiBhbmNlc3RvciB0aGF0IGlzIHBhcnQgb2Ygb2JqZWN0J3MgYW5jZXN0cnkgKi8KLXN0YXRpYyBnYm9vbGVhbgotb2JqZWN0X2hhc19hbmNlc3RvciAoR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RPYmplY3QgKiBhbmNlc3RvciwKLSAgICBHc3RPYmplY3QgKiogZGlyZWN0X2NoaWxkKQotewotICBHc3RPYmplY3QgKmNoaWxkLCAqcGFyZW50OwotCi0gIGlmIChkaXJlY3RfY2hpbGQpCi0gICAgKmRpcmVjdF9jaGlsZCA9IE5VTEw7Ci0KLSAgY2hpbGQgPSBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0KTsKLSAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChvYmplY3QpOwotCi0gIHdoaWxlIChwYXJlbnQpIHsKLSAgICBpZiAoYW5jZXN0b3IgPT0gcGFyZW50KSB7Ci0gICAgICBpZiAoZGlyZWN0X2NoaWxkKQotICAgICAgICAqZGlyZWN0X2NoaWxkID0gY2hpbGQ7Ci0gICAgICBlbHNlCi0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNoaWxkKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcmVudCk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChjaGlsZCk7Ci0gICAgY2hpbGQgPSBwYXJlbnQ7Ci0gICAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChwYXJlbnQpOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY2hpbGQpOwotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotLyogY2FsbGVyIG93bnMgcmV0dXJuICovCi1zdGF0aWMgR3N0T2JqZWN0ICoKLWZpbmRfY29tbW9uX3Jvb3QgKEdzdE9iamVjdCAqIG8xLCBHc3RPYmplY3QgKiBvMikKLXsKLSAgR3N0T2JqZWN0ICp0b3AgPSBvMTsKLSAgR3N0T2JqZWN0ICpraWQxLCAqa2lkMjsKLSAgR3N0T2JqZWN0ICpyb290ID0gTlVMTDsKLQotICB3aGlsZSAoR1NUX09CSkVDVF9QQVJFTlQgKHRvcCkpCi0gICAgdG9wID0gR1NUX09CSkVDVF9QQVJFTlQgKHRvcCk7Ci0KLSAgLyogdGhlIGl0c3ktYml0c3kgc3BpZGVyLi4uICovCi0KLSAgaWYgKCFvYmplY3RfaGFzX2FuY2VzdG9yIChvMiwgdG9wLCAma2lkMikpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcm9vdCA9IGdzdF9vYmplY3RfcmVmICh0b3ApOwotICB3aGlsZSAoVFJVRSkgewotICAgIGlmICghb2JqZWN0X2hhc19hbmNlc3RvciAobzEsIGtpZDIsICZraWQxKSkgewotICAgICAgZ3N0X29iamVjdF91bnJlZiAoa2lkMik7Ci0gICAgICByZXR1cm4gcm9vdDsKLSAgICB9Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocm9vdCk7Ci0gICAgcm9vdCA9IGtpZDI7Ci0gICAgaWYgKCFvYmplY3RfaGFzX2FuY2VzdG9yIChvMiwga2lkMSwgJmtpZDIpKSB7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChraWQxKTsKLSAgICAgIHJldHVybiByb290OwotICAgIH0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChyb290KTsKLSAgICByb290ID0ga2lkMTsKLSAgfQotfQotCi0vKiBjYWxsZXIgZG9lcyBub3Qgb3duIHJldHVybiAqLwotc3RhdGljIEdzdFBhZCAqCi1naG9zdF91cCAoR3N0RWxlbWVudCAqIGUsIEdzdFBhZCAqIHBhZCkKLXsKLSAgc3RhdGljIGdpbnQgZ2hvc3RfcGFkX2luZGV4ID0gMDsKLSAgR3N0UGFkICpncGFkOwotICBnY2hhciAqbmFtZTsKLSAgR3N0U3RhdGUgY3VycmVudDsKLSAgR3N0U3RhdGUgbmV4dDsKLSAgR3N0T2JqZWN0ICpwYXJlbnQgPSBHU1RfT0JKRUNUX1BBUkVOVCAoZSk7Ci0KLSAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoImdob3N0JWQiLCBnaG9zdF9wYWRfaW5kZXgrKyk7Ci0gIGdwYWQgPSBnc3RfZ2hvc3RfcGFkX25ldyAobmFtZSwgcGFkKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICBHU1RfU1RBVEVfTE9DSyAocGFyZW50KTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGFyZW50KSwgJmN1cnJlbnQsICZuZXh0LCAwKTsKLQotICBpZiAoY3VycmVudCA+IEdTVF9TVEFURV9SRUFEWSB8fCBuZXh0ID49IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChncGFkLCBUUlVFKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X2FkZF9wYWQgKChHc3RFbGVtZW50ICopIHBhcmVudCwgZ3BhZCkpIHsKLSAgICBnX3dhcm5pbmcgKCJQYWQgbmFtZWQgJXMgYWxyZWFkeSBleGlzdHMgaW4gZWxlbWVudCAlc1xuIiwKLSAgICAgICAgR1NUX09CSkVDVF9OQU1FIChncGFkKSwgR1NUX09CSkVDVF9OQU1FIChwYXJlbnQpKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmICgoR3N0T2JqZWN0ICopIGdwYWQpOwotICAgIEdTVF9TVEFURV9VTkxPQ0sgKHBhcmVudCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgR1NUX1NUQVRFX1VOTE9DSyAocGFyZW50KTsKLQotICByZXR1cm4gZ3BhZDsKLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9wYWQgKGdwb2ludGVyIHBwYWQsIGdwb2ludGVyIHVudXNlZCkKLXsKLSAgR3N0UGFkICpwYWQgPSBwcGFkOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoKEdzdEVsZW1lbnQgKikgR1NUX09CSkVDVF9QQVJFTlQgKHBhZCksIHBhZCkpCi0gICAgZ193YXJuaW5nICgiQ291bGRuJ3QgcmVtb3ZlIHBhZCAlcyBmcm9tIGVsZW1lbnQgJXMiLAotICAgICAgICBHU1RfT0JKRUNUX05BTUUgKHBhZCksIEdTVF9PQkpFQ1RfTkFNRSAoR1NUX09CSkVDVF9QQVJFTlQgKHBhZCkpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wcmVwYXJlX2xpbmtfbWF5YmVfZ2hvc3RpbmcgKEdzdFBhZCAqKiBzcmMsIEdzdFBhZCAqKiBzaW5rLAotICAgIEdTTGlzdCAqKiBwYWRzX2NyZWF0ZWQpCi17Ci0gIEdzdE9iamVjdCAqcm9vdDsKLSAgR3N0T2JqZWN0ICplMSwgKmUyOwotICBHU0xpc3QgKnBhZHNfY3JlYXRlZF9sb2NhbCA9IE5VTEw7Ci0KLSAgZ19hc3NlcnQgKHBhZHNfY3JlYXRlZCk7Ci0KLSAgZTEgPSBHU1RfT0JKRUNUX1BBUkVOVCAoKnNyYyk7Ci0gIGUyID0gR1NUX09CSkVDVF9QQVJFTlQgKCpzaW5rKTsKLQotICBpZiAoR19VTkxJS0VMWSAoZTEgPT0gTlVMTCkpIHsKLSAgICBHU1RfV0FSTklORyAoIlRyeWluZyB0byBnaG9zdCBhIHBhZCB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHBhcmVudDogJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsICpzcmMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBpZiAoR19VTkxJS0VMWSAoZTIgPT0gTlVMTCkpIHsKLSAgICBHU1RfV0FSTklORyAoIlRyeWluZyB0byBnaG9zdCBhIHBhZCB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHBhcmVudDogJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsICpzaW5rKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoR1NUX09CSkVDVF9QQVJFTlQgKGUxKSA9PSBHU1RfT0JKRUNUX1BBUkVOVCAoZTIpKSB7Ci0gICAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICIlcyBhbmQgJXMgaW4gc2FtZSBiaW4sIG5vIG5lZWQgZm9yIGdob3N0IHBhZHMiLAotICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGUxKSwgR1NUX09CSkVDVF9OQU1FIChlMikpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX1BBRFMsICIlcyBhbmQgJXMgbm90IGluIHNhbWUgYmluLCBtYWtpbmcgZ2hvc3QgcGFkcyIsCi0gICAgICBHU1RfT0JKRUNUX05BTUUgKGUxKSwgR1NUX09CSkVDVF9OQU1FIChlMikpOwotCi0gIC8qIHdlIG5lZWQgdG8gc2V0dXAgc29tZSBnaG9zdCBwYWRzICovCi0gIHJvb3QgPSBmaW5kX2NvbW1vbl9yb290IChlMSwgZTIpOwotICBpZiAoIXJvb3QpIHsKLSAgICBpZiAoR1NUX09CSkVDVF9QQVJFTlQgKGUxKSA9PSBOVUxMKQotICAgICAgZ193YXJuaW5nICgiVHJ5aW5nIHRvIGxpbmsgZWxlbWVudHMgJXMgYW5kICVzIHRoYXQgZG9uJ3Qgc2hhcmUgYSBjb21tb24gIgotICAgICAgICAgICJhbmNlc3RvcjogJXMgaGFzbid0IGJlZW4gYWRkZWQgdG8gYSBiaW4gb3IgcGlwZWxpbmUsIGJ1dCAlcyBpcyBpbiAlcyIsCi0gICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZTEpLCBHU1RfRUxFTUVOVF9OQU1FIChlMiksCi0gICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZTEpLCBHU1RfRUxFTUVOVF9OQU1FIChlMiksCi0gICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoR1NUX09CSkVDVF9QQVJFTlQgKGUyKSkpOwotICAgIGVsc2UgaWYgKEdTVF9PQkpFQ1RfUEFSRU5UIChlMikgPT0gTlVMTCkKLSAgICAgIGdfd2FybmluZyAoIlRyeWluZyB0byBsaW5rIGVsZW1lbnRzICVzIGFuZCAlcyB0aGF0IGRvbid0IHNoYXJlIGEgY29tbW9uICIKLSAgICAgICAgICAiYW5jZXN0b3I6ICVzIGhhc24ndCBiZWVuIGFkZGVkIHRvIGEgYmluIG9yIHBpcGVsaW5lLCBhbmQgJXMgaXMgaW4gJXMiLAotICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGUxKSwgR1NUX0VMRU1FTlRfTkFNRSAoZTIpLAotICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGUyKSwgR1NUX0VMRU1FTlRfTkFNRSAoZTEpLAotICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKEdTVF9PQkpFQ1RfUEFSRU5UIChlMSkpKTsKLSAgICBlbHNlCi0gICAgICBnX3dhcm5pbmcgKCJUcnlpbmcgdG8gbGluayBlbGVtZW50cyAlcyBhbmQgJXMgdGhhdCBkb24ndCBzaGFyZSBhIGNvbW1vbiAiCi0gICAgICAgICAgImFuY2VzdG9yOiAlcyBpcyBpbiAlcywgYW5kICVzIGlzIGluICVzIiwKLSAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlMSksIEdTVF9FTEVNRU5UX05BTUUgKGUyKSwKLSAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FIChlMSksIEdTVF9FTEVNRU5UX05BTUUgKEdTVF9PQkpFQ1RfUEFSRU5UIChlMSkpLAotICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGUyKSwgR1NUX0VMRU1FTlRfTkFNRSAoR1NUX09CSkVDVF9QQVJFTlQgKGUyKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHdoaWxlIChHU1RfT0JKRUNUX1BBUkVOVCAoZTEpICE9IHJvb3QpIHsKLSAgICAqc3JjID0gZ2hvc3RfdXAgKChHc3RFbGVtZW50ICopIGUxLCAqc3JjKTsKLSAgICBpZiAoISpzcmMpCi0gICAgICBnb3RvIGNsZWFudXBfZmFpbDsKLSAgICBlMSA9IEdTVF9PQkpFQ1RfUEFSRU5UICgqc3JjKTsKLSAgICBwYWRzX2NyZWF0ZWRfbG9jYWwgPSBnX3NsaXN0X3ByZXBlbmQgKHBhZHNfY3JlYXRlZF9sb2NhbCwgKnNyYyk7Ci0gIH0KLSAgd2hpbGUgKEdTVF9PQkpFQ1RfUEFSRU5UIChlMikgIT0gcm9vdCkgewotICAgICpzaW5rID0gZ2hvc3RfdXAgKChHc3RFbGVtZW50ICopIGUyLCAqc2luayk7Ci0gICAgaWYgKCEqc2luaykKLSAgICAgIGdvdG8gY2xlYW51cF9mYWlsOwotICAgIGUyID0gR1NUX09CSkVDVF9QQVJFTlQgKCpzaW5rKTsKLSAgICBwYWRzX2NyZWF0ZWRfbG9jYWwgPSBnX3NsaXN0X3ByZXBlbmQgKHBhZHNfY3JlYXRlZF9sb2NhbCwgKnNpbmspOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocm9vdCk7Ci0gICpwYWRzX2NyZWF0ZWQgPSBnX3NsaXN0X2NvbmNhdCAoKnBhZHNfY3JlYXRlZCwgcGFkc19jcmVhdGVkX2xvY2FsKTsKLSAgcmV0dXJuIFRSVUU7Ci0KLWNsZWFudXBfZmFpbDoKLSAgZ3N0X29iamVjdF91bnJlZiAocm9vdCk7Ci0gIGdfc2xpc3RfZm9yZWFjaCAocGFkc19jcmVhdGVkX2xvY2FsLCByZW1vdmVfcGFkLCBOVUxMKTsKLSAgZ19zbGlzdF9mcmVlIChwYWRzX2NyZWF0ZWRfbG9jYWwpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcgKEdzdFBhZCAqIHNyYywgR3N0UGFkICogc2luaywgR3N0UGFkTGlua0NoZWNrIGZsYWdzKQotewotICBHU0xpc3QgKnBhZHNfY3JlYXRlZCA9IE5VTEw7Ci0gIGdib29sZWFuIHJldDsKLQotICBpZiAoIXByZXBhcmVfbGlua19tYXliZV9naG9zdGluZyAoJnNyYywgJnNpbmssICZwYWRzX2NyZWF0ZWQpKSB7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0ID0gKGdzdF9wYWRfbGlua19mdWxsIChzcmMsIHNpbmssIGZsYWdzKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICB9Ci0KLSAgaWYgKCFyZXQpIHsKLSAgICBnX3NsaXN0X2ZvcmVhY2ggKHBhZHNfY3JlYXRlZCwgcmVtb3ZlX3BhZCwgTlVMTCk7Ci0gIH0KLSAgZ19zbGlzdF9mcmVlIChwYWRzX2NyZWF0ZWQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGw6Ci0gKiBAc3JjOiBhICNHc3RQYWQKLSAqIEBzaW5rOiBhICNHc3RQYWQKLSAqIEBmbGFnczogc29tZSAjR3N0UGFkTGlua0NoZWNrIGZsYWdzCi0gKgotICogTGlua3MgQHNyYyB0byBAc2luaywgY3JlYXRpbmcgYW55ICNHc3RHaG9zdFBhZCdzIGluIGJldHdlZW4gYXMgbmVjZXNzYXJ5LgotICoKLSAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzYXZlIGhhdmluZyB0byBjcmVhdGUgYW5kIGFkZCBpbnRlcm1lZGlhdGUKLSAqICNHc3RHaG9zdFBhZCdzIGFzIHJlcXVpcmVkIGZvciBsaW5raW5nIGFjcm9zcyAjR3N0QmluIGJvdW5kYXJpZXMuCi0gKgotICogSWYgQHNyYyBvciBAc2luayBwYWRzIGRvbid0IGhhdmUgcGFyZW50IGVsZW1lbnRzIG9yIGRvIG5vdCBzaGFyZSBhIGNvbW1vbgotICogYW5jZXN0b3IsIHRoZSBsaW5rIHdpbGwgZmFpbC4KLSAqCi0gKiBDYWxsaW5nIGdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZ19mdWxsKCkgd2l0aAotICogQGZsYWdzID09ICVHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IG9mIGxpbmtpbmcKLSAqIHBhZHMgd2l0aCBzYWZldHkgY2hlY2tzIGFwcGxpZWQuCi0gKgotICogUmV0dXJuczogd2hldGhlciB0aGUgbGluayBzdWNjZWVkZWQuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZ19mdWxsIChHc3RQYWQgKiBzcmMsIEdzdFBhZCAqIHNpbmssCi0gICAgR3N0UGFkTGlua0NoZWNrIGZsYWdzKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAoc3JjKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAoc2luayksIEZBTFNFKTsKLQotICByZXR1cm4gcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcgKHNyYywgc2luaywgZmxhZ3MpOwotfQotCi0vKioKLSAqIGdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZzoKLSAqIEBzcmM6IGEgI0dzdFBhZAotICogQHNpbms6IGEgI0dzdFBhZAotICoKLSAqIExpbmtzIEBzcmMgdG8gQHNpbmssIGNyZWF0aW5nIGFueSAjR3N0R2hvc3RQYWQncyBpbiBiZXR3ZWVuIGFzIG5lY2Vzc2FyeS4KLSAqCi0gKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2F2ZSBoYXZpbmcgdG8gY3JlYXRlIGFuZCBhZGQgaW50ZXJtZWRpYXRlCi0gKiAjR3N0R2hvc3RQYWQncyBhcyByZXF1aXJlZCBmb3IgbGlua2luZyBhY3Jvc3MgI0dzdEJpbiBib3VuZGFyaWVzLgotICoKLSAqIElmIEBzcmMgb3IgQHNpbmsgcGFkcyBkb24ndCBoYXZlIHBhcmVudCBlbGVtZW50cyBvciBkbyBub3Qgc2hhcmUgYSBjb21tb24KLSAqIGFuY2VzdG9yLCB0aGUgbGluayB3aWxsIGZhaWwuCi0gKgotICogUmV0dXJuczogd2hldGhlciB0aGUgbGluayBzdWNjZWVkZWQuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZyAoR3N0UGFkICogc3JjLCBHc3RQYWQgKiBzaW5rKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAoc3JjKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAoc2luayksIEZBTFNFKTsKLQotICByZXR1cm4gZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGwgKHNyYywgc2luaywKLSAgICAgIEdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlbGVhc2VfYW5kX3VucmVmX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gcmVxdWVzdHBhZCkKLXsKLSAgaWYgKHBhZCkgewotICAgIGlmIChyZXF1ZXN0cGFkKQotICAgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoZWxlbWVudCwgcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGw6Ci0gKiBAc3JjOiBhICNHc3RFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBwYWQuCi0gKiBAc3JjcGFkbmFtZTogKGFsbG93LW5vbmUpOiB0aGUgbmFtZSBvZiB0aGUgI0dzdFBhZCBpbiBzb3VyY2UgZWxlbWVudAotICogICAgIG9yICVOVUxMIGZvciBhbnkgcGFkLgotICogQGRlc3Q6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4KLSAqIEBkZXN0cGFkbmFtZTogKGFsbG93LW5vbmUpOiB0aGUgbmFtZSBvZiB0aGUgI0dzdFBhZCBpbiBkZXN0aW5hdGlvbiBlbGVtZW50LAotICogb3IgJU5VTEwgZm9yIGFueSBwYWQuCi0gKiBAZmxhZ3M6IHRoZSAjR3N0UGFkTGlua0NoZWNrIHRvIGJlIHBlcmZvcm1lZCB3aGVuIGxpbmtpbmcgcGFkcy4KLSAqCi0gKiBMaW5rcyB0aGUgdHdvIG5hbWVkIHBhZHMgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZWxlbWVudHMuCi0gKiBTaWRlIGVmZmVjdCBpcyB0aGF0IGlmIG9uZSBvZiB0aGUgcGFkcyBoYXMgbm8gcGFyZW50LCBpdCBiZWNvbWVzIGEKLSAqIGNoaWxkIG9mIHRoZSBwYXJlbnQgb2YgdGhlIG90aGVyIGVsZW1lbnQuICBJZiB0aGV5IGhhdmUgZGlmZmVyZW50Ci0gKiBwYXJlbnRzLCB0aGUgbGluayBmYWlscy4KLSAqCi0gKiBDYWxsaW5nIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKCkgd2l0aCBAZmxhZ3MgPT0gJUdTVF9QQURfTElOS19DSEVDS19ERUZBVUxUCi0gKiBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGdzdF9lbGVtZW50X2xpbmtfcGFkcygpIGFuZCB0aGUgcmVjb21tZW5kZWQgd2F5IG9mCi0gKiBsaW5raW5nIHBhZHMgd2l0aCBzYWZldHkgY2hlY2tzIGFwcGxpZWQuCi0gKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBnc3RfcGFkX2xpbmtfZnVsbCgpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChHc3RFbGVtZW50ICogc3JjLCBjb25zdCBnY2hhciAqIHNyY3BhZG5hbWUsCi0gICAgR3N0RWxlbWVudCAqIGRlc3QsIGNvbnN0IGdjaGFyICogZGVzdHBhZG5hbWUsIEdzdFBhZExpbmtDaGVjayBmbGFncykKLXsKLSAgY29uc3QgR0xpc3QgKnNyY3BhZHMsICpkZXN0cGFkcywgKnNyY3RlbXBscywgKmRlc3R0ZW1wbHMsICpsOwotICBHc3RQYWQgKnNyY3BhZCwgKmRlc3RwYWQ7Ci0gIEdzdFBhZFRlbXBsYXRlICpzcmN0ZW1wbCwgKmRlc3R0ZW1wbDsKLSAgR3N0RWxlbWVudENsYXNzICpzcmNjbGFzcywgKmRlc3RjbGFzczsKLSAgZ2Jvb2xlYW4gc3JjcmVxdWVzdCwgZGVzdHJlcXVlc3Q7Ci0KLSAgLyogY2hlY2tzICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoc3JjKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGRlc3QpLCBGQUxTRSk7Ci0KLSAgR1NUX0NBVF9JTkZPIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywKLSAgICAgICJ0cnlpbmcgdG8gbGluayBlbGVtZW50ICVzOiVzIHRvIGVsZW1lbnQgJXM6JXMiLCBHU1RfRUxFTUVOVF9OQU1FIChzcmMpLAotICAgICAgc3JjcGFkbmFtZSA/IHNyY3BhZG5hbWUgOiAiKGFueSkiLCBHU1RfRUxFTUVOVF9OQU1FIChkZXN0KSwKLSAgICAgIGRlc3RwYWRuYW1lID8gZGVzdHBhZG5hbWUgOiAiKGFueSkiKTsKLQotICBzcmNyZXF1ZXN0ID0gRkFMU0U7Ci0gIGRlc3RyZXF1ZXN0ID0gRkFMU0U7Ci0KLSAgLyogZ2V0IGEgc3JjIHBhZCAqLwotICBpZiAoc3JjcGFkbmFtZSkgewotICAgIC8qIG5hbWUgc3BlY2lmaWVkLCBsb29rIGl0IHVwICovCi0gICAgaWYgKCEoc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgc3JjcGFkbmFtZSkpKSB7Ci0gICAgICBpZiAoKHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoc3JjLCBzcmNwYWRuYW1lKSkpCi0gICAgICAgIHNyY3JlcXVlc3QgPSBUUlVFOwotICAgIH0KLSAgICBpZiAoIXNyY3BhZCkgewotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJubyBwYWQgJXM6JXMiLAotICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKHNyYyksIHNyY3BhZG5hbWUpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoIShHU1RfUEFEX0RJUkVDVElPTiAoc3JjcGFkKSA9PSBHU1RfUEFEX1NSQykpIHsKLSAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJwYWQgJXM6JXMgaXMgbm8gc3JjIHBhZCIsCi0gICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCkpOwotICAgICAgICByZWxlYXNlX2FuZF91bnJlZl9wYWQgKHNyYywgc3JjcGFkLCBzcmNyZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgICAgaWYgKEdTVF9QQURfUEVFUiAoc3JjcGFkKSAhPSBOVUxMKSB7Ci0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAotICAgICAgICAgICAgInBhZCAlczolcyBpcyBhbHJlYWR5IGxpbmtlZCB0byAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwKLSAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoR1NUX1BBRF9QRUVSIChzcmNwYWQpKSk7Ci0gICAgICAgIC8qIGFscmVhZHkgbGlua2VkIHJlcXVlc3QgcGFkcyBsb29rIGxpa2Ugc3RhdGljIHBhZHMsIHNvIHRoZSByZXF1ZXN0IHBhZAotICAgICAgICAgKiB3YXMgbmV2ZXIgcmVxdWVzdGVkIGEgc2Vjb25kIHRpbWUgYWJvdmUsIHNvIG5vIG5lZWQgdG8gcmVsZWFzZSBpdCAqLwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgfQotICAgIHNyY3BhZHMgPSBOVUxMOwotICB9IGVsc2UgewotICAgIC8qIG5vIG5hbWUgZ2l2ZW4sIGdldCB0aGUgZmlyc3QgYXZhaWxhYmxlIHBhZCAqLwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICBzcmNwYWRzID0gR1NUX0VMRU1FTlRfUEFEUyAoc3JjKTsKLSAgICBzcmNwYWQgPSBzcmNwYWRzID8gR1NUX1BBRF9DQVNUIChzcmNwYWRzLT5kYXRhKSA6IE5VTEw7Ci0gICAgaWYgKHNyY3BhZCkKLSAgICAgIGdzdF9vYmplY3RfcmVmIChzcmNwYWQpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotICB9Ci0KLSAgLyogZ2V0IGEgZGVzdGluYXRpb24gcGFkICovCi0gIGlmIChkZXN0cGFkbmFtZSkgewotICAgIC8qIG5hbWUgc3BlY2lmaWVkLCBsb29rIGl0IHVwICovCi0gICAgaWYgKCEoZGVzdHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkZXN0LCBkZXN0cGFkbmFtZSkpKSB7Ci0gICAgICBpZiAoKGRlc3RwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGRlc3QsIGRlc3RwYWRuYW1lKSkpCi0gICAgICAgIGRlc3RyZXF1ZXN0ID0gVFJVRTsKLSAgICB9Ci0gICAgaWYgKCFkZXN0cGFkKSB7Ci0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgIm5vIHBhZCAlczolcyIsCi0gICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZGVzdCksIGRlc3RwYWRuYW1lKTsKLSAgICAgIHJlbGVhc2VfYW5kX3VucmVmX3BhZCAoc3JjLCBzcmNwYWQsIHNyY3JlcXVlc3QpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoIShHU1RfUEFEX0RJUkVDVElPTiAoZGVzdHBhZCkgPT0gR1NUX1BBRF9TSU5LKSkgewotICAgICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgInBhZCAlczolcyBpcyBubyBzaW5rIHBhZCIsCi0gICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGRlc3RwYWQpKTsKLSAgICAgICAgcmVsZWFzZV9hbmRfdW5yZWZfcGFkIChzcmMsIHNyY3BhZCwgc3JjcmVxdWVzdCk7Ci0gICAgICAgIHJlbGVhc2VfYW5kX3VucmVmX3BhZCAoZGVzdCwgZGVzdHBhZCwgZGVzdHJlcXVlc3QpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBpZiAoR1NUX1BBRF9QRUVSIChkZXN0cGFkKSAhPSBOVUxMKSB7Ci0gICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAotICAgICAgICAgICAgInBhZCAlczolcyBpcyBhbHJlYWR5IGxpbmtlZCB0byAlczolcyIsCi0gICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGRlc3RwYWQpLAotICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChHU1RfUEFEX1BFRVIgKGRlc3RwYWQpKSk7Ci0gICAgICAgIHJlbGVhc2VfYW5kX3VucmVmX3BhZCAoc3JjLCBzcmNwYWQsIHNyY3JlcXVlc3QpOwotICAgICAgICAvKiBhbHJlYWR5IGxpbmtlZCByZXF1ZXN0IHBhZHMgbG9vayBsaWtlIHN0YXRpYyBwYWRzLCBzbyB0aGUgcmVxdWVzdCBwYWQKLSAgICAgICAgICogd2FzIG5ldmVyIHJlcXVlc3RlZCBhIHNlY29uZCB0aW1lIGFib3ZlLCBzbyBubyBuZWVkIHRvIHJlbGVhc2UgaXQgKi8KLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGVzdHBhZCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZGVzdHBhZHMgPSBOVUxMOwotICB9IGVsc2UgewotICAgIC8qIG5vIG5hbWUgZ2l2ZW4sIGdldCB0aGUgZmlyc3QgYXZhaWxhYmxlIHBhZCAqLwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoZGVzdCk7Ci0gICAgZGVzdHBhZHMgPSBHU1RfRUxFTUVOVF9QQURTIChkZXN0KTsKLSAgICBkZXN0cGFkID0gZGVzdHBhZHMgPyBHU1RfUEFEX0NBU1QgKGRlc3RwYWRzLT5kYXRhKSA6IE5VTEw7Ci0gICAgaWYgKGRlc3RwYWQpCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAoZGVzdHBhZCk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlc3QpOwotICB9Ci0KLSAgaWYgKHNyY3BhZG5hbWUgJiYgZGVzdHBhZG5hbWUpIHsKLSAgICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgICAvKiB0d28gZXhwbGljaXRseSBzcGVjaWZpZWQgcGFkcyAqLwotICAgIHJlc3VsdCA9IHBhZF9saW5rX21heWJlX2dob3N0aW5nIChzcmNwYWQsIGRlc3RwYWQsIGZsYWdzKTsKLQotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChkZXN0cGFkKTsKLSAgICB9IGVsc2UgewotICAgICAgcmVsZWFzZV9hbmRfdW5yZWZfcGFkIChzcmMsIHNyY3BhZCwgc3JjcmVxdWVzdCk7Ci0gICAgICByZWxlYXNlX2FuZF91bnJlZl9wYWQgKGRlc3QsIGRlc3RwYWQsIGRlc3RyZXF1ZXN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGlmIChzcmNwYWQpIHsKLSAgICAvKiBsb29wIHRocm91Z2ggdGhlIGFsbG93ZWQgcGFkcyBpbiB0aGUgc291cmNlLCB0cnlpbmcgdG8gZmluZCBhCi0gICAgICogY29tcGF0aWJsZSBkZXN0aW5hdGlvbiBwYWQgKi8KLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywKLSAgICAgICAgImxvb3BpbmcgdGhyb3VnaCBhbGxvd2VkIHNyYyBhbmQgZGVzdCBwYWRzIik7Ci0gICAgZG8gewotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJ0cnlpbmcgc3JjIHBhZCAlczolcyIsCi0gICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpKTsKLSAgICAgIGlmICgoR1NUX1BBRF9ESVJFQ1RJT04gKHNyY3BhZCkgPT0gR1NUX1BBRF9TUkMpICYmCi0gICAgICAgICAgKEdTVF9QQURfUEVFUiAoc3JjcGFkKSA9PSBOVUxMKSkgewotICAgICAgICBnYm9vbGVhbiB0ZW1wcmVxdWVzdCA9IEZBTFNFOwotICAgICAgICBHc3RQYWQgKnRlbXA7Ci0KLSAgICAgICAgaWYgKGRlc3RwYWRuYW1lKSB7Ci0gICAgICAgICAgdGVtcCA9IGRlc3RwYWQ7Ci0gICAgICAgICAgZ3N0X29iamVjdF9yZWYgKHRlbXApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRlbXAgPSBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQgKGRlc3QsIHNyY3BhZCwgTlVMTCk7Ci0gICAgICAgICAgaWYgKHRlbXAgJiYgR1NUX1BBRF9QQURfVEVNUExBVEUgKHRlbXApCi0gICAgICAgICAgICAgICYmIEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UgKEdTVF9QQURfUEFEX1RFTVBMQVRFICh0ZW1wKSkgPT0KLSAgICAgICAgICAgICAgR1NUX1BBRF9SRVFVRVNUKSB7Ci0gICAgICAgICAgICB0ZW1wcmVxdWVzdCA9IFRSVUU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRlbXAgJiYgcGFkX2xpbmtfbWF5YmVfZ2hvc3RpbmcgKHNyY3BhZCwgdGVtcCwgZmxhZ3MpKSB7Ci0gICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJsaW5rZWQgcGFkICVzOiVzIHRvIHBhZCAlczolcyIsCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSwgR1NUX0RFQlVHX1BBRF9OQU1FICh0ZW1wKSk7Ci0gICAgICAgICAgaWYgKGRlc3RwYWQpCi0gICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChkZXN0cGFkKTsKLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHRlbXApOwotICAgICAgICAgIHJldHVybiBUUlVFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRlbXApIHsKLSAgICAgICAgICBpZiAodGVtcHJlcXVlc3QpCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChkZXN0LCB0ZW1wKTsKLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0ZW1wKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogZmluZCBhIGJldHRlciB3YXkgZm9yIHRoaXMgbWVzcyAqLwotICAgICAgaWYgKHNyY3BhZHMpIHsKLSAgICAgICAgc3JjcGFkcyA9IGdfbGlzdF9uZXh0IChzcmNwYWRzKTsKLSAgICAgICAgaWYgKHNyY3BhZHMpIHsKLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICAgICAgICAgIHNyY3BhZCA9IEdTVF9QQURfQ0FTVCAoc3JjcGFkcy0+ZGF0YSk7Ci0gICAgICAgICAgZ3N0X29iamVjdF9yZWYgKHNyY3BhZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IHdoaWxlIChzcmNwYWRzKTsKLSAgfQotICBpZiAoc3JjcGFkbmFtZSkgewotICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAibm8gbGluayBwb3NzaWJsZSBmcm9tICVzOiVzIHRvICVzIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNwYWQpLCBHU1RfRUxFTUVOVF9OQU1FIChkZXN0KSk7Ci0gICAgLyogbm8gbmVlZCB0byByZWxlYXNlIGFueSByZXF1ZXN0IHBhZCBhcyBib3RoIHNyYy0gYW5kIGRlc3RwYWRuYW1lIG11c3QgYmUKLSAgICAgKiBzZXQgdG8gZW5kIHVwIGhlcmUsIGJ1dCB0aGlzIGNhc2UgaGFzIGFscmVhZHkgYmVlbiB0YWtlbiBjYXJlIG9mIGFib3ZlICovCi0gICAgaWYgKGRlc3RwYWQpCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChkZXN0cGFkKTsKLSAgICBkZXN0cGFkID0gTlVMTDsKLSAgfQotICBpZiAoc3JjcGFkKSB7Ci0gICAgcmVsZWFzZV9hbmRfdW5yZWZfcGFkIChzcmMsIHNyY3BhZCwgc3JjcmVxdWVzdCk7Ci0gICAgc3JjcGFkID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZXN0cGFkKSB7Ci0gICAgLyogbG9vcCB0aHJvdWdoIHRoZSBleGlzdGluZyBwYWRzIGluIHRoZSBkZXN0aW5hdGlvbiAqLwotICAgIGRvIHsKLSAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLCAidHJ5aW5nIGRlc3QgcGFkICVzOiVzIiwKLSAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGRlc3RwYWQpKTsKLSAgICAgIGlmICgoR1NUX1BBRF9ESVJFQ1RJT04gKGRlc3RwYWQpID09IEdTVF9QQURfU0lOSykgJiYKLSAgICAgICAgICAoR1NUX1BBRF9QRUVSIChkZXN0cGFkKSA9PSBOVUxMKSkgewotICAgICAgICBHc3RQYWQgKnRlbXAgPSBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQgKHNyYywgZGVzdHBhZCwgTlVMTCk7Ci0gICAgICAgIGdib29sZWFuIHRlbXByZXF1ZXN0ID0gRkFMU0U7Ci0KLSAgICAgICAgaWYgKHRlbXAgJiYgR1NUX1BBRF9QQURfVEVNUExBVEUgKHRlbXApCi0gICAgICAgICAgICAmJiBHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFIChHU1RfUEFEX1BBRF9URU1QTEFURSAodGVtcCkpID09Ci0gICAgICAgICAgICBHU1RfUEFEX1JFUVVFU1QpIHsKLSAgICAgICAgICB0ZW1wcmVxdWVzdCA9IFRSVUU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGVtcCAmJiBwYWRfbGlua19tYXliZV9naG9zdGluZyAodGVtcCwgZGVzdHBhZCwgZmxhZ3MpKSB7Ci0gICAgICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJsaW5rZWQgcGFkICVzOiVzIHRvIHBhZCAlczolcyIsCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAodGVtcCksIEdTVF9ERUJVR19QQURfTkFNRSAoZGVzdHBhZCkpOwotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHRlbXApOwotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlc3RwYWQpOwotICAgICAgICAgIHJldHVybiBUUlVFOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsZWFzZV9hbmRfdW5yZWZfcGFkIChzcmMsIHRlbXAsIHRlbXByZXF1ZXN0KTsKLSAgICAgIH0KLSAgICAgIGlmIChkZXN0cGFkcykgewotICAgICAgICBkZXN0cGFkcyA9IGdfbGlzdF9uZXh0IChkZXN0cGFkcyk7Ci0gICAgICAgIGlmIChkZXN0cGFkcykgewotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlc3RwYWQpOwotICAgICAgICAgIGRlc3RwYWQgPSBHU1RfUEFEX0NBU1QgKGRlc3RwYWRzLT5kYXRhKTsKLSAgICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoZGVzdHBhZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IHdoaWxlIChkZXN0cGFkcyk7Ci0gIH0KLQotICBpZiAoZGVzdHBhZG5hbWUpIHsKLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgIm5vIGxpbmsgcG9zc2libGUgZnJvbSAlcyB0byAlczolcyIsCi0gICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKHNyYyksIEdTVF9ERUJVR19QQURfTkFNRSAoZGVzdHBhZCkpOwotICAgIHJlbGVhc2VfYW5kX3VucmVmX3BhZCAoZGVzdCwgZGVzdHBhZCwgZGVzdHJlcXVlc3QpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfSBlbHNlIHsKLSAgICAvKiBubyBuZWVkIHRvIHJlbGVhc2UgYW55IHJlcXVlc3QgcGFkIGFzIHRoZSBjYXNlIG9mIHVuc2V0IGRlc3RwYXRuYW1lIGFuZAotICAgICAqIGRlc3RwYWQgYmVpbmcgYSByZXF1c3QgcGFkIGhhcyBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiB3aGVuIGxvb2tpbmcKLSAgICAgKiB0aG91Z2ggdGhlIGRlc3RpbmF0aW9uIHBhZHMgYWJvdmUgKi8KLSAgICBpZiAoZGVzdHBhZCkgewotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGVzdHBhZCk7Ci0gICAgfQotICAgIGRlc3RwYWQgPSBOVUxMOwotICB9Ci0KLSAgc3JjY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKHNyYyk7Ci0gIGRlc3RjbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZGVzdCk7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCi0gICAgICAid2UgbWlnaHQgaGF2ZSByZXF1ZXN0IHBhZHMgb24gYm90aCBzaWRlcywgY2hlY2tpbmcuLi4iKTsKLSAgc3JjdGVtcGxzID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0IChzcmNjbGFzcyk7Ci0gIGRlc3R0ZW1wbHMgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKGRlc3RjbGFzcyk7Ci0KLSAgaWYgKHNyY3RlbXBscyAmJiBkZXN0dGVtcGxzKSB7Ci0gICAgd2hpbGUgKHNyY3RlbXBscykgewotICAgICAgc3JjdGVtcGwgPSAoR3N0UGFkVGVtcGxhdGUgKikgc3JjdGVtcGxzLT5kYXRhOwotICAgICAgaWYgKHNyY3RlbXBsLT5wcmVzZW5jZSA9PSBHU1RfUEFEX1JFUVVFU1QpIHsKLSAgICAgICAgZm9yIChsID0gZGVzdHRlbXBsczsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICAgICAgICBkZXN0dGVtcGwgPSAoR3N0UGFkVGVtcGxhdGUgKikgbC0+ZGF0YTsKLSAgICAgICAgICBpZiAoZGVzdHRlbXBsLT5wcmVzZW5jZSA9PSBHU1RfUEFEX1JFUVVFU1QgJiYKLSAgICAgICAgICAgICAgZGVzdHRlbXBsLT5kaXJlY3Rpb24gIT0gc3JjdGVtcGwtPmRpcmVjdGlvbikgewotICAgICAgICAgICAgR3N0Q2FwcyAqc3JjY2FwcywgKmRlc3RjYXBzOwotCi0gICAgICAgICAgICBzcmNjYXBzID0gZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAoc3JjdGVtcGwpOwotICAgICAgICAgICAgZGVzdGNhcHMgPSBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzIChkZXN0dGVtcGwpOwotICAgICAgICAgICAgaWYgKGdzdF9jYXBzX2lzX2Fsd2F5c19jb21wYXRpYmxlIChzcmNjYXBzLCBkZXN0Y2FwcykpIHsKLSAgICAgICAgICAgICAgc3JjcGFkID0KLSAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkIChzcmMsIHNyY3RlbXBsLAotICAgICAgICAgICAgICAgICAgc3JjdGVtcGwtPm5hbWVfdGVtcGxhdGUsIE5VTEwpOwotICAgICAgICAgICAgICBkZXN0cGFkID0KLSAgICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkIChkZXN0LCBkZXN0dGVtcGwsCi0gICAgICAgICAgICAgICAgICBkZXN0dGVtcGwtPm5hbWVfdGVtcGxhdGUsIE5VTEwpOwotICAgICAgICAgICAgICBpZiAoc3JjcGFkICYmIGRlc3RwYWQKLSAgICAgICAgICAgICAgICAgICYmIHBhZF9saW5rX21heWJlX2dob3N0aW5nIChzcmNwYWQsIGRlc3RwYWQsIGZsYWdzKSkgewotICAgICAgICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAotICAgICAgICAgICAgICAgICAgICAibGlua2VkIHBhZCAlczolcyB0byBwYWQgJXM6JXMiLAotICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCksIEdTVF9ERUJVR19QQURfTkFNRSAoZGVzdHBhZCkpOwotICAgICAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gICAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGVzdHBhZCk7Ci0gICAgICAgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICAgICAgICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChkZXN0Y2Fwcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLyogaXQgZmFpbGVkLCBzbyB3ZSByZWxlYXNlIHRoZSByZXF1ZXN0IHBhZHMgKi8KLSAgICAgICAgICAgICAgaWYgKHNyY3BhZCkgewotICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHNyYywgc3JjcGFkKTsKLSAgICAgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChkZXN0cGFkKSB7Ci0gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoZGVzdCwgZGVzdHBhZCk7Ci0gICAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGVzdHBhZCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLSAgICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChkZXN0Y2Fwcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzcmN0ZW1wbHMgPSBzcmN0ZW1wbHMtPm5leHQ7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJubyBsaW5rIHBvc3NpYmxlIGZyb20gJXMgdG8gJXMiLAotICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSwgR1NUX0VMRU1FTlRfTkFNRSAoZGVzdCkpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfbGlua19wYWRzOgotICogQHNyYzogYSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLgotICogQHNyY3BhZG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlICNHc3RQYWQgaW4gc291cmNlIGVsZW1lbnQKLSAqICAgICBvciAlTlVMTCBmb3IgYW55IHBhZC4KLSAqIEBkZXN0OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuCi0gKiBAZGVzdHBhZG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlICNHc3RQYWQgaW4gZGVzdGluYXRpb24gZWxlbWVudCwKLSAqIG9yICVOVUxMIGZvciBhbnkgcGFkLgotICoKLSAqIExpbmtzIHRoZSB0d28gbmFtZWQgcGFkcyBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBlbGVtZW50cy4KLSAqIFNpZGUgZWZmZWN0IGlzIHRoYXQgaWYgb25lIG9mIHRoZSBwYWRzIGhhcyBubyBwYXJlbnQsIGl0IGJlY29tZXMgYQotICogY2hpbGQgb2YgdGhlIHBhcmVudCBvZiB0aGUgb3RoZXIgZWxlbWVudC4gIElmIHRoZXkgaGF2ZSBkaWZmZXJlbnQKLSAqIHBhcmVudHMsIHRoZSBsaW5rIGZhaWxzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X2xpbmtfcGFkcyAoR3N0RWxlbWVudCAqIHNyYywgY29uc3QgZ2NoYXIgKiBzcmNwYWRuYW1lLAotICAgIEdzdEVsZW1lbnQgKiBkZXN0LCBjb25zdCBnY2hhciAqIGRlc3RwYWRuYW1lKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHNyYywgc3JjcGFkbmFtZSwgZGVzdCwgZGVzdHBhZG5hbWUsCi0gICAgICBHU1RfUEFEX0xJTktfQ0hFQ0tfREVGQVVMVCk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkOgotICogQHNyYzogYSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLgotICogQHNyY3BhZG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlICNHc3RQYWQgaW4gc291cmNlIGVsZW1lbnQKLSAqICAgICBvciAlTlVMTCBmb3IgYW55IHBhZC4KLSAqIEBkZXN0OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuCi0gKiBAZGVzdHBhZG5hbWU6IChhbGxvdy1ub25lKTogdGhlIG5hbWUgb2YgdGhlICNHc3RQYWQgaW4gZGVzdGluYXRpb24gZWxlbWVudAotICogICAgIG9yICVOVUxMIGZvciBhbnkgcGFkLgotICogQGZpbHRlcjogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogdGhlICNHc3RDYXBzIHRvIGZpbHRlciB0aGUgbGluaywKLSAqICAgICBvciAlTlVMTCBmb3Igbm8gZmlsdGVyLgotICoKLSAqIExpbmtzIHRoZSB0d28gbmFtZWQgcGFkcyBvZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBlbGVtZW50cy4gU2lkZSBlZmZlY3QKLSAqIGlzIHRoYXQgaWYgb25lIG9mIHRoZSBwYWRzIGhhcyBubyBwYXJlbnQsIGl0IGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50IG9mCi0gKiB0aGUgb3RoZXIgZWxlbWVudC4gSWYgdGhleSBoYXZlIGRpZmZlcmVudCBwYXJlbnRzLCB0aGUgbGluayBmYWlscy4gSWYgQGNhcHMKLSAqIGlzIG5vdCAlTlVMTCwgbWFrZXMgc3VyZSB0aGF0IHRoZSBjYXBzIG9mIHRoZSBsaW5rIGlzIGEgc3Vic2V0IG9mIEBjYXBzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCAoR3N0RWxlbWVudCAqIHNyYywgY29uc3QgZ2NoYXIgKiBzcmNwYWRuYW1lLAotICAgIEdzdEVsZW1lbnQgKiBkZXN0LCBjb25zdCBnY2hhciAqIGRlc3RwYWRuYW1lLCBHc3RDYXBzICogZmlsdGVyKQotewotICAvKiBjaGVja3MgKi8KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChzcmMpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZGVzdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbHRlciA9PSBOVUxMIHx8IEdTVF9JU19DQVBTIChmaWx0ZXIpLCBGQUxTRSk7Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdEVsZW1lbnQgKmNhcHNmaWx0ZXI7Ci0gICAgR3N0T2JqZWN0ICpwYXJlbnQ7Ci0gICAgR3N0U3RhdGUgc3RhdGUsIHBlbmRpbmc7Ci0gICAgZ2Jvb2xlYW4gbHIxLCBscjI7Ci0KLSAgICBjYXBzZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsIE5VTEwpOwotICAgIGlmICghY2Fwc2ZpbHRlcikgewotICAgICAgR1NUX0VSUk9SICgiQ291bGQgbm90IG1ha2UgYSBjYXBzZmlsdGVyIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgcGFyZW50ID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUIChzcmMpKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JJTiAocGFyZW50KSwgRkFMU0UpOwotCi0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVF9DQVNUIChwYXJlbnQpLCAmc3RhdGUsICZwZW5kaW5nLCAwKTsKLQotICAgIGlmICghZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBhcmVudCksIGNhcHNmaWx0ZXIpKSB7Ci0gICAgICBHU1RfRVJST1IgKCJDb3VsZCBub3QgYWRkIGNhcHNmaWx0ZXIiKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNhcHNmaWx0ZXIpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAocGVuZGluZyAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKQotICAgICAgc3RhdGUgPSBwZW5kaW5nOwotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChjYXBzZmlsdGVyLCBzdGF0ZSk7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOwotCi0gICAgZ19vYmplY3Rfc2V0IChjYXBzZmlsdGVyLCAiY2FwcyIsIGZpbHRlciwgTlVMTCk7Ci0KLSAgICBscjEgPSBnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNyYywgc3JjcGFkbmFtZSwgY2Fwc2ZpbHRlciwgInNpbmsiKTsKLSAgICBscjIgPSBnc3RfZWxlbWVudF9saW5rX3BhZHMgKGNhcHNmaWx0ZXIsICJzcmMiLCBkZXN0LCBkZXN0cGFkbmFtZSk7Ci0gICAgaWYgKGxyMSAmJiBscjIpIHsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoIWxyMSkgewotICAgICAgICBHU1RfSU5GTyAoIkNvdWxkIG5vdCBsaW5rIHBhZHM6ICVzOiVzIC0gY2Fwc2ZpbHRlcjpzaW5rIiwKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKHNyYyksIHNyY3BhZG5hbWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0lORk8gKCJDb3VsZCBub3QgbGluayBwYWRzOiBjYXBzZmlsdGVyOnNyYyAtICVzOiVzIiwKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGRlc3QpLCBkZXN0cGFkbmFtZSk7Ci0gICAgICB9Ci0gICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGNhcHNmaWx0ZXIsIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgIC8qIHRoaXMgd2lsbCB1bmxpbmsgYW5kIHVucmVmIGFzIGFwcHJvcHJpYXRlICovCi0gICAgICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoR1NUX09CSkVDVF9QQVJFTlQgKGNhcHNmaWx0ZXIpKSwgY2Fwc2ZpbHRlcik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmIChnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNyYywgc3JjcGFkbmFtZSwgZGVzdCwgZGVzdHBhZG5hbWUpKSB7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0lORk8gKCJDb3VsZCBub3QgbGluayBwYWRzOiAlczolcyAtICVzOiVzIiwgR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSwKLSAgICAgICAgICBzcmNwYWRuYW1lLCBHU1RfRUxFTUVOVF9OQU1FIChkZXN0KSwgZGVzdHBhZG5hbWUpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X2xpbms6Ci0gKiBAc3JjOiAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEVsZW1lbnQgY29udGFpbmluZyB0aGUgc291cmNlIHBhZC4KLSAqIEBkZXN0OiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuCi0gKgotICogTGlua3MgQHNyYyB0byBAZGVzdC4gVGhlIGxpbmsgbXVzdCBiZSBmcm9tIHNvdXJjZSB0bwotICogZGVzdGluYXRpb247IHRoZSBvdGhlciBkaXJlY3Rpb24gd2lsbCBub3QgYmUgdHJpZWQuIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IKLSAqIGV4aXN0aW5nIHBhZHMgdGhhdCBhcmVuJ3QgbGlua2VkIHlldC4gSXQgd2lsbCByZXF1ZXN0IG5ldyBwYWRzIGlmIG5lY2Vzc2FyeS4KLSAqIFN1Y2ggcGFkcyBuZWVkIHRvIGJlIHJlbGVhc2VkIG1hbnVhbGx5IHdoZW4gdW5saW5raW5nLgotICogSWYgbXVsdGlwbGUgbGlua3MgYXJlIHBvc3NpYmxlLCBvbmx5IG9uZSBpcyBlc3RhYmxpc2hlZC4KLSAqCi0gKiBNYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgeW91ciBlbGVtZW50cyB0byBhIGJpbiBvciBwaXBlbGluZSB3aXRoCi0gKiBnc3RfYmluX2FkZCgpIGJlZm9yZSB0cnlpbmcgdG8gbGluayB0aGVtLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBlbGVtZW50cyBjb3VsZCBiZSBsaW5rZWQsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9saW5rIChHc3RFbGVtZW50ICogc3JjLCBHc3RFbGVtZW50ICogZGVzdCkKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCBOVUxMLCBkZXN0LCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9saW5rX21hbnk6Ci0gKiBAZWxlbWVudF8xOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBmaXJzdCAjR3N0RWxlbWVudCBpbiB0aGUgbGluayBjaGFpbi4KLSAqIEBlbGVtZW50XzI6ICh0cmFuc2ZlciBub25lKTogdGhlIHNlY29uZCAjR3N0RWxlbWVudCBpbiB0aGUgbGluayBjaGFpbi4KLSAqIEAuLi46IHRoZSAlTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2YgZWxlbWVudHMgdG8gbGluayBpbiBvcmRlci4KLSAqCi0gKiBDaGFpbiB0b2dldGhlciBhIHNlcmllcyBvZiBlbGVtZW50cy4gVXNlcyBnc3RfZWxlbWVudF9saW5rKCkuCi0gKiBNYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgeW91ciBlbGVtZW50cyB0byBhIGJpbiBvciBwaXBlbGluZSB3aXRoCi0gKiBnc3RfYmluX2FkZCgpIGJlZm9yZSB0cnlpbmcgdG8gbGluayB0aGVtLgotICoKLSAqIFJldHVybnM6ICVUUlVFIG9uIHN1Y2Nlc3MsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9saW5rX21hbnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50XzEsIEdzdEVsZW1lbnQgKiBlbGVtZW50XzIsIC4uLikKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudF8xKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnRfMiksIEZBTFNFKTsKLQotICB2YV9zdGFydCAoYXJncywgZWxlbWVudF8yKTsKLQotICB3aGlsZSAoZWxlbWVudF8yKSB7Ci0gICAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChlbGVtZW50XzEsIGVsZW1lbnRfMikpIHsKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZWxlbWVudF8xID0gZWxlbWVudF8yOwotICAgIGVsZW1lbnRfMiA9IHZhX2FyZyAoYXJncywgR3N0RWxlbWVudCAqKTsKLSAgfQotCi0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkOgotICogQHNyYzogYSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLgotICogQGRlc3Q6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RFbGVtZW50IGNvbnRhaW5pbmcgdGhlIGRlc3RpbmF0aW9uIHBhZC4KLSAqIEBmaWx0ZXI6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IHRoZSAjR3N0Q2FwcyB0byBmaWx0ZXIgdGhlIGxpbmssCi0gKiAgICAgb3IgJU5VTEwgZm9yIG5vIGZpbHRlci4KLSAqCi0gKiBMaW5rcyBAc3JjIHRvIEBkZXN0IHVzaW5nIHRoZSBnaXZlbiBjYXBzIGFzIGZpbHRlcmNhcHMuCi0gKiBUaGUgbGluayBtdXN0IGJlIGZyb20gc291cmNlIHRvCi0gKiBkZXN0aW5hdGlvbjsgdGhlIG90aGVyIGRpcmVjdGlvbiB3aWxsIG5vdCBiZSB0cmllZC4gVGhlIGZ1bmN0aW9uIGxvb2tzIGZvcgotICogZXhpc3RpbmcgcGFkcyB0aGF0IGFyZW4ndCBsaW5rZWQgeWV0LiBJdCB3aWxsIHJlcXVlc3QgbmV3IHBhZHMgaWYgbmVjZXNzYXJ5LgotICogSWYgbXVsdGlwbGUgbGlua3MgYXJlIHBvc3NpYmxlLCBvbmx5IG9uZSBpcyBlc3RhYmxpc2hlZC4KLSAqCi0gKiBNYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgeW91ciBlbGVtZW50cyB0byBhIGJpbiBvciBwaXBlbGluZSB3aXRoCi0gKiBnc3RfYmluX2FkZCgpIGJlZm9yZSB0cnlpbmcgdG8gbGluayB0aGVtLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwYWRzIGNvdWxkIGJlIGxpbmtlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQgKEdzdEVsZW1lbnQgKiBzcmMsIEdzdEVsZW1lbnQgKiBkZXN0LAotICAgIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQgKHNyYywgTlVMTCwgZGVzdCwgTlVMTCwgZmlsdGVyKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF91bmxpbmtfcGFkczoKLSAqIEBzcmM6IGEgKHRyYW5zZmVyIG5vbmUpOiAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBzb3VyY2UgcGFkLgotICogQHNyY3BhZG5hbWU6IHRoZSBuYW1lIG9mIHRoZSAjR3N0UGFkIGluIHNvdXJjZSBlbGVtZW50LgotICogQGRlc3Q6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0RWxlbWVudCBjb250YWluaW5nIHRoZSBkZXN0aW5hdGlvbiBwYWQuCi0gKiBAZGVzdHBhZG5hbWU6IHRoZSBuYW1lIG9mIHRoZSAjR3N0UGFkIGluIGRlc3RpbmF0aW9uIGVsZW1lbnQuCi0gKgotICogVW5saW5rcyB0aGUgdHdvIG5hbWVkIHBhZHMgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZWxlbWVudHMuCi0gKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBnc3RfcGFkX3VubGluaygpLgotICovCi12b2lkCi1nc3RfZWxlbWVudF91bmxpbmtfcGFkcyAoR3N0RWxlbWVudCAqIHNyYywgY29uc3QgZ2NoYXIgKiBzcmNwYWRuYW1lLAotICAgIEdzdEVsZW1lbnQgKiBkZXN0LCBjb25zdCBnY2hhciAqIGRlc3RwYWRuYW1lKQotewotICBHc3RQYWQgKnNyY3BhZCwgKmRlc3RwYWQ7Ci0gIGdib29sZWFuIHNyY3JlcXVlc3QsIGRlc3RyZXF1ZXN0OwotCi0gIHNyY3JlcXVlc3QgPSBkZXN0cmVxdWVzdCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHNyYyAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKHNyYykpOwotICBnX3JldHVybl9pZl9mYWlsIChzcmNwYWRuYW1lICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChkZXN0ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZGVzdCkpOwotICBnX3JldHVybl9pZl9mYWlsIChkZXN0cGFkbmFtZSAhPSBOVUxMKTsKLQotICAvKiBvYnRhaW4gdGhlIHBhZHMgcmVxdWVzdGVkICovCi0gIGlmICghKHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsIHNyY3BhZG5hbWUpKSkKLSAgICBpZiAoKHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoc3JjLCBzcmNwYWRuYW1lKSkpCi0gICAgICBzcmNyZXF1ZXN0ID0gVFJVRTsKLSAgaWYgKHNyY3BhZCA9PSBOVUxMKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJzb3VyY2UgZWxlbWVudCBoYXMgbm8gcGFkIFwiJXNcIiIsIHNyY3BhZG5hbWUpOwotICAgIHJldHVybjsKLSAgfQotICBpZiAoIShkZXN0cGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRlc3QsIGRlc3RwYWRuYW1lKSkpCi0gICAgaWYgKChkZXN0cGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChkZXN0LCBkZXN0cGFkbmFtZSkpKQotICAgICAgZGVzdHJlcXVlc3QgPSBUUlVFOwotICBpZiAoZGVzdHBhZCA9PSBOVUxMKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZXN0LCAiZGVzdGluYXRpb24gZWxlbWVudCBoYXMgbm8gcGFkIFwiJXNcIiIsCi0gICAgICAgIGRlc3RwYWRuYW1lKTsKLSAgICBnb3RvIGZyZWVfc3JjOwotICB9Ci0KLSAgLyogd2UncmUgc2F0aXNmaWVkIHRoZXkgY2FuIGJlIHVubGlua2VkLCBsZXQncyBkbyBpdCAqLwotICBnc3RfcGFkX3VubGluayAoc3JjcGFkLCBkZXN0cGFkKTsKLQotICBpZiAoZGVzdHJlcXVlc3QpCi0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoZGVzdCwgZGVzdHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRlc3RwYWQpOwotCi1mcmVlX3NyYzoKLSAgaWYgKHNyY3JlcXVlc3QpCi0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoc3JjLCBzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3VubGlua19tYW55OgotICogQGVsZW1lbnRfMTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgZmlyc3QgI0dzdEVsZW1lbnQgaW4gdGhlIGxpbmsgY2hhaW4uCi0gKiBAZWxlbWVudF8yOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBzZWNvbmQgI0dzdEVsZW1lbnQgaW4gdGhlIGxpbmsgY2hhaW4uCi0gKiBALi4uOiB0aGUgJU5VTEwtdGVybWluYXRlZCBsaXN0IG9mIGVsZW1lbnRzIHRvIHVubGluayBpbiBvcmRlci4KLSAqCi0gKiBVbmxpbmtzIGEgc2VyaWVzIG9mIGVsZW1lbnRzLiBVc2VzIGdzdF9lbGVtZW50X3VubGluaygpLgotICovCi12b2lkCi1nc3RfZWxlbWVudF91bmxpbmtfbWFueSAoR3N0RWxlbWVudCAqIGVsZW1lbnRfMSwgR3N0RWxlbWVudCAqIGVsZW1lbnRfMiwgLi4uKQotewotICB2YV9saXN0IGFyZ3M7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZWxlbWVudF8xICE9IE5VTEwgJiYgZWxlbWVudF8yICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudF8xKSAmJiBHU1RfSVNfRUxFTUVOVCAoZWxlbWVudF8yKSk7Ci0KLSAgdmFfc3RhcnQgKGFyZ3MsIGVsZW1lbnRfMik7Ci0KLSAgd2hpbGUgKGVsZW1lbnRfMikgewotICAgIGdzdF9lbGVtZW50X3VubGluayAoZWxlbWVudF8xLCBlbGVtZW50XzIpOwotCi0gICAgZWxlbWVudF8xID0gZWxlbWVudF8yOwotICAgIGVsZW1lbnRfMiA9IHZhX2FyZyAoYXJncywgR3N0RWxlbWVudCAqKTsKLSAgfQotCi0gIHZhX2VuZCAoYXJncyk7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfdW5saW5rOgotICogQHNyYzogKHRyYW5zZmVyIG5vbmUpOiB0aGUgc291cmNlICNHc3RFbGVtZW50IHRvIHVubGluay4KLSAqIEBkZXN0OiAodHJhbnNmZXIgbm9uZSk6IHRoZSBzaW5rICNHc3RFbGVtZW50IHRvIHVubGluay4KLSAqCi0gKiBVbmxpbmtzIGFsbCBzb3VyY2UgcGFkcyBvZiB0aGUgc291cmNlIGVsZW1lbnQgd2l0aCBhbGwgc2luayBwYWRzCi0gKiBvZiB0aGUgc2luayBlbGVtZW50IHRvIHdoaWNoIHRoZXkgYXJlIGxpbmtlZC4KLSAqCi0gKiBJZiB0aGUgbGluayBoYXMgYmVlbiBtYWRlIHVzaW5nIGdzdF9lbGVtZW50X2xpbmsoKSwgaXQgY291bGQgaGF2ZSBjcmVhdGVkIGFuCi0gKiByZXF1ZXN0cGFkLCB3aGljaCBoYXMgdG8gYmUgcmVsZWFzZWQgdXNpbmcgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCgpLgotICovCi12b2lkCi1nc3RfZWxlbWVudF91bmxpbmsgKEdzdEVsZW1lbnQgKiBzcmMsIEdzdEVsZW1lbnQgKiBkZXN0KQotewotICBHc3RJdGVyYXRvciAqcGFkczsKLSAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOwotICBHVmFsdWUgZGF0YSA9IHsgMCwgfTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoc3JjKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChkZXN0KSk7Ci0KLSAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJ1bmxpbmtpbmcgXCIlc1wiIGFuZCBcIiVzXCIiLAotICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSwgR1NUX0VMRU1FTlRfTkFNRSAoZGVzdCkpOwotCi0gIHBhZHMgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKHNyYyk7Ci0gIHdoaWxlICghZG9uZSkgewotICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKHBhZHMsICZkYXRhKSkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICB7Ci0gICAgICAgIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7Ci0KLSAgICAgICAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpKSB7Ci0gICAgICAgICAgR3N0UGFkICpwZWVycGFkID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKTsKLQotICAgICAgICAgIC8qIHNlZSBpZiB0aGUgcGFkIGlzIGxpbmtlZCBhbmQgaXMgcmVhbGx5IGEgcGFkIG9mIGRlc3QgKi8KLSAgICAgICAgICBpZiAocGVlcnBhZCkgewotICAgICAgICAgICAgR3N0RWxlbWVudCAqcGVlcmVsZW07Ci0KLSAgICAgICAgICAgIHBlZXJlbGVtID0gZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKHBlZXJwYWQpOwotCi0gICAgICAgICAgICBpZiAocGVlcmVsZW0gPT0gZGVzdCkgewotICAgICAgICAgICAgICBnc3RfcGFkX3VubGluayAocGFkLCBwZWVycGFkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwZWVyZWxlbSkKLSAgICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcmVsZW0pOwotCi0gICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVycGFkKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJmRhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAocGFkcyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBnX3ZhbHVlX3Vuc2V0ICgmZGF0YSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChwYWRzKTsKLX0KLQotLyoqCi0gKiBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbjoKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIGludm9rZSB0aGUgcG9zaXRpb24gcXVlcnkgb24uCi0gKiBAZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCByZXF1ZXN0ZWQKLSAqIEBjdXI6IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgY3VycmVudAotICogICAgIHBvc2l0aW9uLCBvciAlTlVMTC4KLSAqCi0gKiBRdWVyaWVzIGFuIGVsZW1lbnQgKHVzdWFsbHkgdG9wLWxldmVsIHBpcGVsaW5lIG9yIHBsYXliaW4gZWxlbWVudCkgZm9yIHRoZQotICogc3RyZWFtIHBvc2l0aW9uIGluIG5hbm9zZWNvbmRzLiBUaGlzIHdpbGwgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIHRoZQotICogc3RyZWFtIGR1cmF0aW9uIChpZiB0aGUgc3RyZWFtIGR1cmF0aW9uIGlzIGtub3duKS4gVGhpcyBxdWVyeSB3aWxsIHVzdWFsbHkKLSAqIG9ubHkgd29yayBvbmNlIHRoZSBwaXBlbGluZSBpcyBwcmVyb2xsZWQgKGkuZS4gcmVhY2hlZCBQQVVTRUQgb3IgUExBWUlORwotICogc3RhdGUpLiBUaGUgYXBwbGljYXRpb24gd2lsbCByZWNlaXZlIGFuIEFTWU5DX0RPTkUgbWVzc2FnZSBvbiB0aGUgcGlwZWxpbmUKLSAqIGJ1cyB3aGVuIHRoYXQgaXMgdGhlIGNhc2UuCi0gKgotICogSWYgb25lIHJlcGVhdGVkbHkgY2FsbHMgdGhpcyBmdW5jdGlvbiBvbmUgY2FuIGFsc28gY3JlYXRlIGEgcXVlcnkgYW5kIHJldXNlCi0gKiBpdCBpbiBnc3RfZWxlbWVudF9xdWVyeSgpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ2ludDY0ICogY3VyKQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQsIEZBTFNFKTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24gKGZvcm1hdCk7Ci0gIHJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5IChlbGVtZW50LCBxdWVyeSk7Ci0KLSAgaWYgKHJldCkKLSAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCBOVUxMLCBjdXIpOwotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb246Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBpbnZva2UgdGhlIGR1cmF0aW9uIHF1ZXJ5IG9uLgotICogQGZvcm1hdDogdGhlICNHc3RGb3JtYXQgcmVxdWVzdGVkCi0gKiBAZHVyYXRpb246IChvdXQpIChhbGxvdy1ub25lKTogQSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgdG90YWwgZHVyYXRpb24sIG9yICVOVUxMLgotICoKLSAqIFF1ZXJpZXMgYW4gZWxlbWVudCAodXN1YWxseSB0b3AtbGV2ZWwgcGlwZWxpbmUgb3IgcGxheWJpbiBlbGVtZW50KSBmb3IgdGhlCi0gKiB0b3RhbCBzdHJlYW0gZHVyYXRpb24gaW4gbmFub3NlY29uZHMuIFRoaXMgcXVlcnkgd2lsbCBvbmx5IHdvcmsgb25jZSB0aGUKLSAqIHBpcGVsaW5lIGlzIHByZXJvbGxlZCAoaS5lLiByZWFjaGVkIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlKS4gVGhlIGFwcGxpY2F0aW9uCi0gKiB3aWxsIHJlY2VpdmUgYW4gQVNZTkNfRE9ORSBtZXNzYWdlIG9uIHRoZSBwaXBlbGluZSBidXMgd2hlbiB0aGF0IGlzIHRoZSBjYXNlLgotICoKLSAqIElmIHRoZSBkdXJhdGlvbiBjaGFuZ2VzIGZvciBzb21lIHJlYXNvbiwgeW91IHdpbGwgZ2V0IGEgRFVSQVRJT05fQ0hBTkdFRAotICogbWVzc2FnZSBvbiB0aGUgcGlwZWxpbmUgYnVzLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgcmUtcXVlcnkgdGhlIGR1cmF0aW9uCi0gKiB1c2luZyB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBxdWVyeSBjb3VsZCBiZSBwZXJmb3JtZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbiAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ2ludDY0ICogZHVyYXRpb24pCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCwgRkFMU0UpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoZm9ybWF0KTsKLSAgcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnkgKGVsZW1lbnQsIHF1ZXJ5KTsKLQotICBpZiAocmV0KQotICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksIE5VTEwsIGR1cmF0aW9uKTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQ6Ci0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBpbnZva2UgdGhlIGNvbnZlcnQgcXVlcnkgb24uCi0gKiBAc3JjX2Zvcm1hdDogYSAjR3N0Rm9ybWF0IHRvIGNvbnZlcnQgZnJvbS4KLSAqIEBzcmNfdmFsOiBhIHZhbHVlIHRvIGNvbnZlcnQuCi0gKiBAZGVzdF9mb3JtYXQ6IHRoZSAjR3N0Rm9ybWF0IHRvIGNvbnZlcnQgdG8uCi0gKiBAZGVzdF92YWw6IChvdXQpOiBhIHBvaW50ZXIgdG8gdGhlIHJlc3VsdC4KLSAqCi0gKiBRdWVyaWVzIGFuIGVsZW1lbnQgdG8gY29udmVydCBAc3JjX3ZhbCBpbiBAc3JjX2Zvcm1hdCB0byBAZGVzdF9mb3JtYXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwKLSAgICBnaW50NjQgc3JjX3ZhbCwgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGVzdF9mb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3RfdmFsICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoZGVzdF9mb3JtYXQgPT0gc3JjX2Zvcm1hdCB8fCBzcmNfdmFsID09IC0xKSB7Ci0gICAgKmRlc3RfdmFsID0gc3JjX3ZhbDsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19jb252ZXJ0IChzcmNfZm9ybWF0LCBzcmNfdmFsLCBkZXN0X2Zvcm1hdCk7Ci0gIHJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5IChlbGVtZW50LCBxdWVyeSk7Ci0KLSAgaWYgKHJldCkKLSAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAocXVlcnksIE5VTEwsIE5VTEwsIE5VTEwsIGRlc3RfdmFsKTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9lbGVtZW50X3NlZWtfc2ltcGxlOgotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gc2VlayBvbgotICogQGZvcm1hdDogYSAjR3N0Rm9ybWF0IHRvIGV4ZWN1dGUgdGhlIHNlZWsgaW4sIHN1Y2ggYXMgI0dTVF9GT1JNQVRfVElNRQotICogQHNlZWtfZmxhZ3M6IHNlZWsgb3B0aW9uczsgcGxheWJhY2sgYXBwbGljYXRpb25zIHdpbGwgdXN1YWxseSB3YW50IHRvIHVzZQotICogICAgICAgICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19LRVlfVU5JVCBoZXJlCi0gKiBAc2Vla19wb3M6IHBvc2l0aW9uIHRvIHNlZWsgdG8gKHJlbGF0aXZlIHRvIHRoZSBzdGFydCk7IGlmIHlvdSBhcmUgZG9pbmcKLSAqICAgICAgICAgICAgYSBzZWVrIGluICNHU1RfRk9STUFUX1RJTUUgdGhpcyB2YWx1ZSBpcyBpbiBuYW5vc2Vjb25kcyAtCi0gKiAgICAgICAgICAgIG11bHRpcGx5IHdpdGggI0dTVF9TRUNPTkQgdG8gY29udmVydCBzZWNvbmRzIHRvIG5hbm9zZWNvbmRzIG9yCi0gKiAgICAgICAgICAgIHdpdGggI0dTVF9NU0VDT05EIHRvIGNvbnZlcnQgbWlsbGlzZWNvbmRzIHRvIG5hbm9zZWNvbmRzLgotICoKLSAqIFNpbXBsZSBBUEkgdG8gcGVyZm9ybSBhIHNlZWsgb24gdGhlIGdpdmVuIGVsZW1lbnQsIG1lYW5pbmcgaXQganVzdCBzZWVrcwotICogdG8gdGhlIGdpdmVuIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtLiBGb3IgbW9yZSBjb21wbGV4Ci0gKiBvcGVyYXRpb25zIGxpa2Ugc2VnbWVudCBzZWVrcyAoZS5nLiBmb3IgbG9vcGluZykgb3IgY2hhbmdpbmcgdGhlIHBsYXliYWNrCi0gKiByYXRlIG9yIHNlZWtpbmcgcmVsYXRpdmUgdG8gdGhlIGxhc3QgY29uZmlndXJlZCBwbGF5YmFjayBzZWdtZW50IHlvdSBzaG91bGQKLSAqIHVzZSBnc3RfZWxlbWVudF9zZWVrKCkuCi0gKgotICogSW4gYSBjb21wbGV0ZWx5IHByZXJvbGxlZCBQQVVTRUQgb3IgUExBWUlORyBwaXBlbGluZSwgc2Vla2luZyBpcyBhbHdheXMKLSAqIGd1YXJhbnRlZWQgdG8gcmV0dXJuICVUUlVFIG9uIGEgc2Vla2FibGUgbWVkaWEgdHlwZSBvciAlRkFMU0Ugd2hlbiB0aGUgbWVkaWEKLSAqIHR5cGUgaXMgY2VydGFpbmx5IG5vdCBzZWVrYWJsZSAoc3VjaCBhcyBhIGxpdmUgc3RyZWFtKS4KLSAqCi0gKiBTb21lIGVsZW1lbnRzIGFsbG93IGZvciBzZWVraW5nIGluIHRoZSBSRUFEWSBzdGF0ZSwgaW4gdGhpcwotICogY2FzZSB0aGV5IHdpbGwgc3RvcmUgdGhlIHNlZWsgZXZlbnQgYW5kIGV4ZWN1dGUgaXQgd2hlbiB0aGV5IGFyZSBwdXQgdG8KLSAqIFBBVVNFRC4gSWYgdGhlIGVsZW1lbnQgc3VwcG9ydHMgc2VlayBpbiBSRUFEWSwgaXQgd2lsbCBhbHdheXMgcmV0dXJuICVUUlVFIHdoZW4KLSAqIGl0IHJlY2VpdmVzIHRoZSBldmVudCBpbiB0aGUgUkVBRFkgc3RhdGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHNlZWsgb3BlcmF0aW9uIHN1Y2NlZWRlZC4gRmx1c2hpbmcgc2Vla3Mgd2lsbCB0cmlnZ2VyIGEKLSAqIHByZXJvbGwsIHdoaWNoIHdpbGwgZW1pdCAlR1NUX01FU1NBR0VfQVNZTkNfRE9ORS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9lbGVtZW50X3NlZWtfc2ltcGxlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwKLSAgICBHc3RTZWVrRmxhZ3Mgc2Vla19mbGFncywgZ2ludDY0IHNlZWtfcG9zKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWVrX3BvcyA+PSAwLCBGQUxTRSk7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsgKGVsZW1lbnQsIDEuMCwgZm9ybWF0LCBzZWVrX2ZsYWdzLAotICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHNlZWtfcG9zLCBHU1RfU0VFS19UWVBFX1NFVCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF91c2VfZml4ZWRfY2FwczoKLSAqIEBwYWQ6IHRoZSBwYWQgdG8gdXNlCi0gKgotICogQSBoZWxwZXIgZnVuY3Rpb24geW91IGNhbiB1c2UgdGhhdCBzZXRzIHRoZSBGSVhFRF9DQVBTIGZsYWcKLSAqIFRoaXMgd2F5IHRoZSBkZWZhdWx0IENBUFMgcXVlcnkgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBuZWdvdGlhdGVkIGNhcHMKLSAqIG9yIGluIGNhc2UgdGhlIHBhZCBpcyBub3QgbmVnb3RpYXRlZCwgdGhlIHBhZHRlbXBsYXRlIGNhcHMuCi0gKgotICogVGhlIG5lZ290aWF0ZWQgY2FwcyBhcmUgdGhlIGNhcHMgb2YgdGhlIGxhc3QgQ0FQUyBldmVudCB0aGF0IHBhc3NlZCBvbiB0aGUKLSAqIHBhZC4gVXNlIHRoaXMgZnVuY3Rpb24gb24gYSBwYWQgdGhhdCwgb25jZSBpdCBuZWdvdGlhdGVkIHRvIGEgQ0FQUywgY2Fubm90Ci0gKiBiZSByZW5lZ290aWF0ZWQgdG8gc29tZXRoaW5nIGVsc2UuCi0gKi8KLXZvaWQKLWdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKEdzdFBhZCAqIHBhZCkKLXsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAocGFkLCBHU1RfUEFEX0ZMQUdfRklYRURfQ0FQUyk7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQ6Ci0gKiBAcGFkOiBhIHBhZAotICoKLSAqIEdldHMgdGhlIHBhcmVudCBvZiBAcGFkLCBjYXN0IHRvIGEgI0dzdEVsZW1lbnQuIElmIGEgQHBhZCBoYXMgbm8gcGFyZW50IG9yCi0gKiBpdHMgcGFyZW50IGlzIG5vdCBhbiBlbGVtZW50LCByZXR1cm4gJU5VTEwuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBwYXJlbnQgb2YgdGhlIHBhZC4gVGhlCi0gKiBjYWxsZXIgaGFzIGEgcmVmZXJlbmNlIG9uIHRoZSBwYXJlbnQsIHNvIHVucmVmIHdoZW4geW91J3JlIGZpbmlzaGVkCi0gKiB3aXRoIGl0LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLUdzdEVsZW1lbnQgKgotZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0T2JqZWN0ICpwOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKLQotICBwID0gZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUX0NBU1QgKHBhZCkpOwotCi0gIGlmIChwICYmICFHU1RfSVNfRUxFTUVOVCAocCkpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwKTsKLSAgICBwID0gTlVMTDsKLSAgfQotICByZXR1cm4gR1NUX0VMRU1FTlRfQ0FTVCAocCk7Ci19Ci0KLS8qKgotICogZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yOgotICogQHNvdXJjZTogdGhlICNHc3RPYmplY3QgdGhhdCBpbml0aWF0ZWQgdGhlIGVycm9yLgotICogQGVycm9yOiAoaW4pOiB0aGUgR0Vycm9yLgotICogQGRlYnVnOiAoaW4pIChhbGxvdy1ub25lKTogYW4gYWRkaXRpb25hbCBkZWJ1ZyBpbmZvcm1hdGlvbiBzdHJpbmcsIG9yICVOVUxMCi0gKgotICogQSBkZWZhdWx0IGVycm9yIGZ1bmN0aW9uIHRoYXQgdXNlcyBnX3ByaW50ZXJyKCkgdG8gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZQotICogYW5kIHRoZSBvcHRpb25hbCBkZWJ1ZyBzdGluZy4uCi0gKgotICogVGhlIGRlZmF1bHQgaGFuZGxlciB3aWxsIHNpbXBseSBwcmludCB0aGUgZXJyb3Igc3RyaW5nIHVzaW5nIGdfcHJpbnQuCi0gKi8KLXZvaWQKLWdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR3N0T2JqZWN0ICogc291cmNlLCBjb25zdCBHRXJyb3IgKiBlcnJvciwKLSAgICBjb25zdCBnY2hhciAqIGRlYnVnKQotewotICBnY2hhciAqbmFtZSA9IGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nIChzb3VyY2UpOwotCi0gIGdfcHJpbnRlcnIgKF8oIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iKSwgbmFtZSwgZXJyb3ItPm1lc3NhZ2UpOwotICBpZiAoZGVidWcpCi0gICAgZ19wcmludGVyciAoXygiQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuJXNcbiIpLCBkZWJ1Zyk7Ci0KLSAgZ19mcmVlIChuYW1lKTsKLX0KLQotLyoqCi0gKiBnc3RfYmluX2FkZF9tYW55OgotICogQGJpbjogYSAjR3N0QmluCi0gKiBAZWxlbWVudF8xOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0RWxlbWVudCBlbGVtZW50IHRvIGFkZCB0byB0aGUgYmluCi0gKiBALi4uOiAodHJhbnNmZXIgZnVsbCk6IGFkZGl0aW9uYWwgZWxlbWVudHMgdG8gYWRkIHRvIHRoZSBiaW4KLSAqCi0gKiBBZGRzIGEgJU5VTEwtdGVybWluYXRlZCBsaXN0IG9mIGVsZW1lbnRzIHRvIGEgYmluLiAgVGhpcyBmdW5jdGlvbiBpcwotICogZXF1aXZhbGVudCB0byBjYWxsaW5nIGdzdF9iaW5fYWRkKCkgZm9yIGVhY2ggbWVtYmVyIG9mIHRoZSBsaXN0LiBUaGUgcmV0dXJuCi0gKiB2YWx1ZSBvZiBlYWNoIGdzdF9iaW5fYWRkKCkgaXMgaWdub3JlZC4KLSAqLwotdm9pZAotZ3N0X2Jpbl9hZGRfbWFueSAoR3N0QmluICogYmluLCBHc3RFbGVtZW50ICogZWxlbWVudF8xLCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQklOIChiaW4pKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0VMRU1FTlQgKGVsZW1lbnRfMSkpOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBlbGVtZW50XzEpOwotCi0gIHdoaWxlIChlbGVtZW50XzEpIHsKLSAgICBnc3RfYmluX2FkZCAoYmluLCBlbGVtZW50XzEpOwotCi0gICAgZWxlbWVudF8xID0gdmFfYXJnIChhcmdzLCBHc3RFbGVtZW50ICopOwotICB9Ci0KLSAgdmFfZW5kIChhcmdzKTsKLX0KLQotLyoqCi0gKiBnc3RfYmluX3JlbW92ZV9tYW55OgotICogQGJpbjogYSAjR3N0QmluCi0gKiBAZWxlbWVudF8xOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBmaXJzdCAjR3N0RWxlbWVudCB0byByZW1vdmUgZnJvbSB0aGUgYmluCi0gKiBALi4uOiAodHJhbnNmZXIgbm9uZSk6ICVOVUxMLXRlcm1pbmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byByZW1vdmUgZnJvbSB0aGUgYmluCi0gKgotICogUmVtb3ZlIGEgbGlzdCBvZiBlbGVtZW50cyBmcm9tIGEgYmluLiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQKLSAqIHRvIGNhbGxpbmcgZ3N0X2Jpbl9yZW1vdmUoKSB3aXRoIGVhY2ggbWVtYmVyIG9mIHRoZSBsaXN0LgotICovCi12b2lkCi1nc3RfYmluX3JlbW92ZV9tYW55IChHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtZW50XzEsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbikpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAoZWxlbWVudF8xKSk7Ci0KLSAgdmFfc3RhcnQgKGFyZ3MsIGVsZW1lbnRfMSk7Ci0KLSAgd2hpbGUgKGVsZW1lbnRfMSkgewotICAgIGdzdF9iaW5fcmVtb3ZlIChiaW4sIGVsZW1lbnRfMSk7Ci0KLSAgICBlbGVtZW50XzEgPSB2YV9hcmcgKGFyZ3MsIEdzdEVsZW1lbnQgKik7Ci0gIH0KLQotICB2YV9lbmQgKGFyZ3MpOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHJldDsKLX0gUXVlcnlBY2NlcHRDYXBzRGF0YTsKLQotc3RhdGljIGdib29sZWFuCi1xdWVyeV9hY2NlcHRfY2Fwc19mdW5jIChHc3RQYWQgKiBwYWQsIFF1ZXJ5QWNjZXB0Q2Fwc0RhdGEgKiBkYXRhKQotewotICBpZiAoR19MSUtFTFkgKGdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBkYXRhLT5xdWVyeSkpKSB7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdCAoZGF0YS0+cXVlcnksICZyZXN1bHQpOwotICAgIGRhdGEtPnJldCAmPSByZXN1bHQ7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9wYWRfcHJveHlfcXVlcnlfYWNjZXB0X2NhcHM6Ci0gKiBAcGFkOiBhICNHc3RQYWQgdG8gcHJveHkuCi0gKiBAcXVlcnk6IGFuIEFDQ0VQVF9DQVBTICNHc3RRdWVyeS4KLSAqCi0gKiBDaGVja3MgaWYgYWxsIGludGVybmFsbHkgbGlua2VkIHBhZHMgb2YgQHBhZCBhY2NlcHRzIHRoZSBjYXBzIGluIEBxdWVyeSBhbmQKLSAqIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcmVzdWx0cy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBhcyBhIGRlZmF1bHQgYWNjZXB0IGNhcHMgcXVlcnkgZnVuY3Rpb24gZm9yIGFuIGVsZW1lbnQKLSAqIHRoYXQgY2FuIGhhbmRsZSBhbnkgc3RyZWFtIGZvcm1hdCwgYnV0IHJlcXVpcmVzIGNhcHMgdGhhdCBhcmUgYWNjZXB0YWJsZSBmb3IKLSAqIGFsbCBvcHBvc2l0ZSBwYWRzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBxdWVyeSBjb3VsZCBiZSBleGVjdXRlZAotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9wcm94eV9xdWVyeV9hY2NlcHRfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBRdWVyeUFjY2VwdENhcHNEYXRhIGRhdGE7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19RVUVSWSAocXVlcnkpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUywgRkFMU0UpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BBRFMsIHBhZCwKLSAgICAgICJwcm94eWluZyBhY2NlcHQgY2FwcyBxdWVyeSBmb3IgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGRhdGEucXVlcnkgPSBxdWVyeTsKLSAgLyogdmFsdWUgdG8gaG9sZCB0aGUgcmV0dXJuLCBieSBkZWZhdWx0IGl0IGhvbGRzIFRSVUUgKi8KLSAgLyogRklYTUU6IFRSVUUgaXMgd3Jvbmcgd2hlbiB0aGVyZSBhcmUgbm8gcGFkcyAqLwotICBkYXRhLnJldCA9IFRSVUU7Ci0KLSAgZ3N0X3BhZF9mb3J3YXJkIChwYWQsIChHc3RQYWRGb3J3YXJkRnVuY3Rpb24pIHF1ZXJ5X2FjY2VwdF9jYXBzX2Z1bmMsICZkYXRhKTsKLSAgZ3N0X3F1ZXJ5X3NldF9hY2NlcHRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBkYXRhLnJldCk7Ci0KLSAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEFEUywgcGFkLCAicHJveHlpbmcgYWNjZXB0IGNhcHMgcXVlcnk6ICVkIiwKLSAgICAgIGRhdGEucmV0KTsKLQotICByZXR1cm4gZGF0YS5yZXQ7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgR3N0Q2FwcyAqcmV0OwotfSBRdWVyeUNhcHNEYXRhOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF1ZXJ5X2NhcHNfZnVuYyAoR3N0UGFkICogcGFkLCBRdWVyeUNhcHNEYXRhICogZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gZW1wdHkgPSBGQUxTRTsKLQotICBpZiAoR19MSUtFTFkgKGdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBkYXRhLT5xdWVyeSkpKSB7Ci0gICAgR3N0Q2FwcyAqcGVlcmNhcHMsICppbnRlcnNlY3Rpb247Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2VfY2Fwc19yZXN1bHQgKGRhdGEtPnF1ZXJ5LCAmcGVlcmNhcHMpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImludGVyc2VjdCB3aXRoIHJlc3VsdCAlIiBHU1RfUFRSX0ZPUk1BVCwgcGVlcmNhcHMpOwotICAgIGludGVyc2VjdGlvbiA9IGdzdF9jYXBzX2ludGVyc2VjdCAoZGF0YS0+cmV0LCBwZWVyY2Fwcyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaW50ZXJzZWN0ZWQgJSIgR1NUX1BUUl9GT1JNQVQsIGludGVyc2VjdGlvbik7Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAoZGF0YS0+cmV0KTsKLSAgICBkYXRhLT5yZXQgPSBpbnRlcnNlY3Rpb247Ci0KLSAgICAvKiBzdG9wIHdoZW4gZW1wdHkgKi8KLSAgICBlbXB0eSA9IGdzdF9jYXBzX2lzX2VtcHR5IChpbnRlcnNlY3Rpb24pOwotICB9Ci0gIHJldHVybiBlbXB0eTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3Byb3h5X3F1ZXJ5X2NhcHM6Ci0gKiBAcGFkOiBhICNHc3RQYWQgdG8gcHJveHkuCi0gKiBAcXVlcnk6IGEgQ0FQUyAjR3N0UXVlcnkuCi0gKgotICogQ2FsbHMgZ3N0X3BhZF9xdWVyeV9jYXBzKCkgZm9yIGFsbCBpbnRlcm5hbGx5IGxpbmtlZCBwYWRzIG9mIEBwYWQgYW5kIHJldHVybnMKLSAqIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJlc3VsdHMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgYXMgYSBkZWZhdWx0IGNhcHMgcXVlcnkgZnVuY3Rpb24gZm9yIGFuIGVsZW1lbnQKLSAqIHRoYXQgY2FuIGhhbmRsZSBhbnkgc3RyZWFtIGZvcm1hdCwgYnV0IHJlcXVpcmVzIGFsbCBpdHMgcGFkcyB0byBoYXZlCi0gKiB0aGUgc2FtZSBjYXBzLiAgVHdvIHN1Y2ggZWxlbWVudHMgYXJlIHRlZSBhbmQgYWRkZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQHF1ZXJ5IGNvdWxkIGJlIGV4ZWN1dGVkCi0gKi8KLWdib29sZWFuCi1nc3RfcGFkX3Byb3h5X3F1ZXJ5X2NhcHMgKEdzdFBhZCAqIHBhZCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0Q2FwcyAqZmlsdGVyLCAqdGVtcGwsICpyZXN1bHQ7Ci0gIFF1ZXJ5Q2Fwc0RhdGEgZGF0YTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1FVRVJZIChxdWVyeSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0NBUFMsIEZBTFNFKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QQURTLCBwYWQsICJwcm94eWluZyBjYXBzIHF1ZXJ5IGZvciAlczolcyIsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGRhdGEucXVlcnkgPSBxdWVyeTsKLQotICAvKiB2YWx1ZSB0byBob2xkIHRoZSByZXR1cm4sIGJ5IGRlZmF1bHQgaXQgaG9sZHMgdGhlIGZpbHRlciBvciBBTlkgKi8KLSAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgZGF0YS5yZXQgPSBmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpOwotCi0gIGdzdF9wYWRfZm9yd2FyZCAocGFkLCAoR3N0UGFkRm9yd2FyZEZ1bmN0aW9uKSBxdWVyeV9jYXBzX2Z1bmMsICZkYXRhKTsKLQotICB0ZW1wbCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpOwotICByZXN1bHQgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGRhdGEucmV0LCB0ZW1wbCk7Ci0gIGdzdF9jYXBzX3VucmVmIChkYXRhLnJldCk7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7Ci0KLSAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIHJlc3VsdCk7Ci0gIGdzdF9jYXBzX3VucmVmIChyZXN1bHQpOwotCi0gIC8qIEZJWE1FOiByZXR1cm4gc29tZXRoaW5nIGRlcGVuZGluZyBvbiB0aGUgcHJvY2Vzc2luZyAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3F1ZXJ5X3Bvc2l0aW9uOgotICogQHBhZDogYSAjR3N0UGFkIHRvIGludm9rZSB0aGUgcG9zaXRpb24gcXVlcnkgb24uCi0gKiBAZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCByZXF1ZXN0ZWQKLSAqIEBjdXI6IChvdXQpIChhbGxvdy1ub25lKTogQSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiwgb3IgJU5VTEwuCi0gKgotICogUXVlcmllcyBhIHBhZCBmb3IgdGhlIHN0cmVhbSBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAoR3N0UGFkICogcGFkLCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgKiBjdXIpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQsIEZBTFNFKTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24gKGZvcm1hdCk7Ci0gIGlmICgocmV0ID0gZ3N0X3BhZF9xdWVyeSAocGFkLCBxdWVyeSkpKQotICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksIE5VTEwsIGN1cik7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9wZWVyX3F1ZXJ5X3Bvc2l0aW9uOgotICogQHBhZDogYSAjR3N0UGFkIG9uIHdob3NlIHBlZXIgdG8gaW52b2tlIHRoZSBwb3NpdGlvbiBxdWVyeSBvbi4KLSAqICAgICAgIE11c3QgYmUgYSBzaW5rIHBhZC4KLSAqIEBmb3JtYXQ6IHRoZSAjR3N0Rm9ybWF0IHJlcXVlc3RlZAotICogQGN1cjogKG91dCkgKGFsbG93LW5vbmUpOiBhIGxvY2F0aW9uIGluIHdoaWNoIHRvIHN0b3JlIHRoZSBjdXJyZW50Ci0gKiAgICAgcG9zaXRpb24sIG9yICVOVUxMLgotICoKLSAqIFF1ZXJpZXMgdGhlIHBlZXIgb2YgYSBnaXZlbiBzaW5rIHBhZCBmb3IgdGhlIHN0cmVhbSBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9wZWVyX3F1ZXJ5X3Bvc2l0aW9uIChHc3RQYWQgKiBwYWQsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCAqIGN1cikKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVELCBGQUxTRSk7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uIChmb3JtYXQpOwotICBpZiAoKHJldCA9IGdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSkpKQotICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksIE5VTEwsIGN1cik7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbjoKLSAqIEBwYWQ6IGEgI0dzdFBhZCB0byBpbnZva2UgdGhlIGR1cmF0aW9uIHF1ZXJ5IG9uLgotICogQGZvcm1hdDogdGhlICNHc3RGb3JtYXQgcmVxdWVzdGVkCi0gKiBAZHVyYXRpb246IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgdG90YWwKLSAqICAgICBkdXJhdGlvbiwgb3IgJU5VTEwuCi0gKgotICogUXVlcmllcyBhIHBhZCBmb3IgdGhlIHRvdGFsIHN0cmVhbSBkdXJhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbiAoR3N0UGFkICogcGFkLCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgKiBkdXJhdGlvbikKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCwgRkFMU0UpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoZm9ybWF0KTsKLSAgaWYgKChyZXQgPSBnc3RfcGFkX3F1ZXJ5IChwYWQsIHF1ZXJ5KSkpCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgTlVMTCwgZHVyYXRpb24pOwotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbjoKLSAqIEBwYWQ6IGEgI0dzdFBhZCBvbiB3aG9zZSBwZWVyIHBhZCB0byBpbnZva2UgdGhlIGR1cmF0aW9uIHF1ZXJ5IG9uLgotICogICAgICAgTXVzdCBiZSBhIHNpbmsgcGFkLgotICogQGZvcm1hdDogdGhlICNHc3RGb3JtYXQgcmVxdWVzdGVkCi0gKiBAZHVyYXRpb246IChvdXQpIChhbGxvdy1ub25lKTogYSBsb2NhdGlvbiBpbiB3aGljaCB0byBzdG9yZSB0aGUgdG90YWwKLSAqICAgICBkdXJhdGlvbiwgb3IgJU5VTEwuCi0gKgotICogUXVlcmllcyB0aGUgcGVlciBwYWQgb2YgYSBnaXZlbiBzaW5rIHBhZCBmb3IgdGhlIHRvdGFsIHN0cmVhbSBkdXJhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgY291bGQgYmUgcGVyZm9ybWVkLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChHc3RQYWQgKiBwYWQsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCAqIGR1cmF0aW9uKQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHBhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCwgRkFMU0UpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoZm9ybWF0KTsKLSAgaWYgKChyZXQgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHBhZCwgcXVlcnkpKSkKLSAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCBOVUxMLCBkdXJhdGlvbik7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X3BhZF9xdWVyeV9jb252ZXJ0OgotICogQHBhZDogYSAjR3N0UGFkIHRvIGludm9rZSB0aGUgY29udmVydCBxdWVyeSBvbi4KLSAqIEBzcmNfZm9ybWF0OiBhICNHc3RGb3JtYXQgdG8gY29udmVydCBmcm9tLgotICogQHNyY192YWw6IGEgdmFsdWUgdG8gY29udmVydC4KLSAqIEBkZXN0X2Zvcm1hdDogdGhlICNHc3RGb3JtYXQgdG8gY29udmVydCB0by4KLSAqIEBkZXN0X3ZhbDogKG91dCk6IGEgcG9pbnRlciB0byB0aGUgcmVzdWx0LgotICoKLSAqIFF1ZXJpZXMgYSBwYWQgdG8gY29udmVydCBAc3JjX3ZhbCBpbiBAc3JjX2Zvcm1hdCB0byBAZGVzdF9mb3JtYXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfcXVlcnlfY29udmVydCAoR3N0UGFkICogcGFkLCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWwsCi0gICAgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3RfZm9ybWF0ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVELCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0X3ZhbCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKGRlc3RfZm9ybWF0ID09IHNyY19mb3JtYXQgfHwgc3JjX3ZhbCA9PSAtMSkgewotICAgICpkZXN0X3ZhbCA9IHNyY192YWw7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfY29udmVydCAoc3JjX2Zvcm1hdCwgc3JjX3ZhbCwgZGVzdF9mb3JtYXQpOwotICBpZiAoKHJldCA9IGdzdF9wYWRfcXVlcnkgKHBhZCwgcXVlcnkpKSkKLSAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAocXVlcnksIE5VTEwsIE5VTEwsIE5VTEwsIGRlc3RfdmFsKTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3BlZXJfcXVlcnlfY29udmVydDoKLSAqIEBwYWQ6IGEgI0dzdFBhZCwgb24gd2hvc2UgcGVlciBwYWQgdG8gaW52b2tlIHRoZSBjb252ZXJ0IHF1ZXJ5IG9uLgotICogICAgICAgTXVzdCBiZSBhIHNpbmsgcGFkLgotICogQHNyY19mb3JtYXQ6IGEgI0dzdEZvcm1hdCB0byBjb252ZXJ0IGZyb20uCi0gKiBAc3JjX3ZhbDogYSB2YWx1ZSB0byBjb252ZXJ0LgotICogQGRlc3RfZm9ybWF0OiB0aGUgI0dzdEZvcm1hdCB0byBjb252ZXJ0IHRvLgotICogQGRlc3RfdmFsOiAob3V0KTogYSBwb2ludGVyIHRvIHRoZSByZXN1bHQuCi0gKgotICogUXVlcmllcyB0aGUgcGVlciBwYWQgb2YgYSBnaXZlbiBzaW5rIHBhZCB0byBjb252ZXJ0IEBzcmNfdmFsIGluIEBzcmNfZm9ybWF0Ci0gKiB0byBAZGVzdF9mb3JtYXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHF1ZXJ5IGNvdWxkIGJlIHBlcmZvcm1lZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9wYWRfcGVlcl9xdWVyeV9jb252ZXJ0IChHc3RQYWQgKiBwYWQsIEdzdEZvcm1hdCBzcmNfZm9ybWF0LCBnaW50NjQgc3JjX3ZhbCwKLSAgICBHc3RGb3JtYXQgZGVzdF9mb3JtYXQsIGdpbnQ2NCAqIGRlc3RfdmFsKQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHBhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3RfZm9ybWF0ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVELCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0X3ZhbCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2NvbnZlcnQgKHNyY19mb3JtYXQsIHNyY192YWwsIGRlc3RfZm9ybWF0KTsKLSAgaWYgKChyZXQgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHBhZCwgcXVlcnkpKSkKLSAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAocXVlcnksIE5VTEwsIE5VTEwsIE5VTEwsIGRlc3RfdmFsKTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3F1ZXJ5X2NhcHM6Ci0gKiBAcGFkOiBhICAjR3N0UGFkIHRvIGdldCB0aGUgY2FwYWJpbGl0aWVzIG9mLgotICogQGZpbHRlcjogKGFsbG93LW5vbmUpOiBzdWdnZXN0ZWQgI0dzdENhcHMsIG9yICVOVUxMCi0gKgotICogR2V0cyB0aGUgY2FwYWJpbGl0aWVzIHRoaXMgcGFkIGNhbiBwcm9kdWNlIG9yIGNvbnN1bWUuCi0gKiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgZG9lc24ndCBuZWNlc3NhcmlseSByZXR1cm4gdGhlIGNhcHMgc2V0IGJ5IHNlbmRpbmcgYQotICogZ3N0X2V2ZW50X25ld19jYXBzKCkgLSB1c2UgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgZm9yIHRoYXQgaW5zdGVhZC4KLSAqIGdzdF9wYWRfcXVlcnlfY2FwcyByZXR1cm5zIGFsbCBwb3NzaWJsZSBjYXBzIGEgcGFkIGNhbiBvcGVyYXRlIHdpdGgsIHVzaW5nCi0gKiB0aGUgcGFkJ3MgQ0FQUyBxdWVyeSBmdW5jdGlvbiwgSWYgdGhlIHF1ZXJ5IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCi0gKiBAZmlsdGVyLCBpZiBub3QgJU5VTEwsIG90aGVyd2lzZSBBTlkuCi0gKgotICogV2hlbiBjYWxsZWQgb24gc2lua3BhZHMgQGZpbHRlciBjb250YWlucyB0aGUgY2FwcyB0aGF0Ci0gKiB1cHN0cmVhbSBjb3VsZCBwcm9kdWNlIGluIHRoZSBvcmRlciBwcmVmZXJyZWQgYnkgdXBzdHJlYW0uIFdoZW4KLSAqIGNhbGxlZCBvbiBzcmNwYWRzIEBmaWx0ZXIgY29udGFpbnMgdGhlIGNhcHMgYWNjZXB0ZWQgYnkKLSAqIGRvd25zdHJlYW0gaW4gdGhlIHByZWZlcnJlZCBvcmRlci4gQGZpbHRlciBtaWdodCBiZSAlTlVMTCBidXQKLSAqIGlmIGl0IGlzIG5vdCAlTlVMTCB0aGUgcmV0dXJuZWQgY2FwcyB3aWxsIGJlIGEgc3Vic2V0IG9mIEBmaWx0ZXIuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHdyaXRhYmxlICNHc3RDYXBzLCB1c2UKLSAqIGdzdF9jYXBzX21ha2Vfd3JpdGFibGUoKSBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBjYXBzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIGNhcHMgb2YgdGhlIHBhZCB3aXRoIGluY3JlbWVudGVkIHJlZi1jb3VudC4KLSAqLwotR3N0Q2FwcyAqCi1nc3RfcGFkX3F1ZXJ5X2NhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmVzdWx0ID0gTlVMTDsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbHRlciA9PSBOVUxMIHx8IEdTVF9JU19DQVBTIChmaWx0ZXIpLCBOVUxMKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsCi0gICAgICAiZ2V0IHBhZCBjYXBzIHdpdGggZmlsdGVyICUiIEdTVF9QVFJfRk9STUFULCBmaWx0ZXIpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19jYXBzIChmaWx0ZXIpOwotICBpZiAoZ3N0X3BhZF9xdWVyeSAocGFkLCBxdWVyeSkpIHsKLSAgICBnc3RfcXVlcnlfcGFyc2VfY2Fwc19yZXN1bHQgKHF1ZXJ5LCAmcmVzdWx0KTsKLSAgICBnc3RfY2Fwc19yZWYgKHJlc3VsdCk7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLAotICAgICAgICAicXVlcnkgcmV0dXJuZWQgJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCk7Ci0gIH0gZWxzZSBpZiAoZmlsdGVyKSB7Ci0gICAgcmVzdWx0ID0gZ3N0X2NhcHNfcmVmIChmaWx0ZXIpOwotICB9IGVsc2UgewotICAgIHJlc3VsdCA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gIH0KLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwczoKLSAqIEBwYWQ6IGEgICNHc3RQYWQgdG8gZ2V0IHRoZSBjYXBhYmlsaXRpZXMgb2YuCi0gKiBAZmlsdGVyOiAoYWxsb3ctbm9uZSk6IGEgI0dzdENhcHMgZmlsdGVyLCBvciAlTlVMTC4KLSAqCi0gKiBHZXRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHBlZXIgY29ubmVjdGVkIHRvIHRoaXMgcGFkLiBTaW1pbGFyIHRvCi0gKiBnc3RfcGFkX3F1ZXJ5X2NhcHMoKS4KLSAqCi0gKiBXaGVuIGNhbGxlZCBvbiBzcmNwYWRzIEBmaWx0ZXIgY29udGFpbnMgdGhlIGNhcHMgdGhhdAotICogdXBzdHJlYW0gY291bGQgcHJvZHVjZSBpbiB0aGUgb3JkZXIgcHJlZmVycmVkIGJ5IHVwc3RyZWFtLiBXaGVuCi0gKiBjYWxsZWQgb24gc2lua3BhZHMgQGZpbHRlciBjb250YWlucyB0aGUgY2FwcyBhY2NlcHRlZCBieQotICogZG93bnN0cmVhbSBpbiB0aGUgcHJlZmVycmVkIG9yZGVyLiBAZmlsdGVyIG1pZ2h0IGJlICVOVUxMIGJ1dAotICogaWYgaXQgaXMgbm90ICVOVUxMIHRoZSByZXR1cm5lZCBjYXBzIHdpbGwgYmUgYSBzdWJzZXQgb2YgQGZpbHRlci4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBjYXBzIG9mIHRoZSBwZWVyIHBhZCB3aXRoIGluY3JlbWVudGVkCi0gKiByZWYtY291bnQuIFdoZW4gdGhlcmUgaXMgbm8gcGVlciBwYWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBAZmlsdGVyIG9yLAotICogd2hlbiBAZmlsdGVyIGlzICVOVUxMLCBBTlkgY2Fwcy4KLSAqLwotR3N0Q2FwcyAqCi1nc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICpyZXN1bHQgPSBOVUxMOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmlsdGVyID09IE5VTEwgfHwgR1NUX0lTX0NBUFMgKGZpbHRlciksIE5VTEwpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX0NBUFMsIHBhZCwKLSAgICAgICJnZXQgcGFkIHBlZXIgY2FwcyB3aXRoIGZpbHRlciAlIiBHU1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfY2FwcyAoZmlsdGVyKTsKLSAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSkpIHsKLSAgICBnc3RfcXVlcnlfcGFyc2VfY2Fwc19yZXN1bHQgKHF1ZXJ5LCAmcmVzdWx0KTsKLSAgICBnc3RfY2Fwc19yZWYgKHJlc3VsdCk7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfQ0FQUywgcGFkLAotICAgICAgICAicGVlciBxdWVyeSByZXR1cm5lZCAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0KTsKLSAgfSBlbHNlIGlmIChmaWx0ZXIpIHsKLSAgICByZXN1bHQgPSBnc3RfY2Fwc19yZWYgKGZpbHRlcik7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0ID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgfQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHM6Ci0gKiBAcGFkOiBhICNHc3RQYWQgdG8gY2hlY2sKLSAqIEBjYXBzOiBhICNHc3RDYXBzIHRvIGNoZWNrIG9uIHRoZSBwYWQKLSAqCi0gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gcGFkIGFjY2VwdHMgdGhlIGNhcHMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhZCBjYW4gYWNjZXB0IHRoZSBjYXBzLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9xdWVyeV9hY2NlcHRfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcyksIEZBTFNFKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9DQVBTLCBwYWQsICJhY2NlcHQgY2FwcyBvZiAlIgotICAgICAgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hY2NlcHRfY2FwcyAoY2Fwcyk7Ci0gIGlmIChnc3RfcGFkX3F1ZXJ5IChwYWQsIHF1ZXJ5KSkgewotICAgIGdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCAmcmVzKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJxdWVyeSByZXR1cm5lZCAlZCIsIHJlcyk7Ci0gIH0KLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX3BlZXJfcXVlcnlfYWNjZXB0X2NhcHM6Ci0gKiBAcGFkOiBhICAjR3N0UGFkIHRvIGNoZWNrIHRoZSBwZWVyIG9mCi0gKiBAY2FwczogYSAjR3N0Q2FwcyB0byBjaGVjayBvbiB0aGUgcGFkCi0gKgotICogQ2hlY2sgaWYgdGhlIHBlZXIgb2YgQHBhZCBhY2NlcHRzIEBjYXBzLiBJZiBAcGFkIGhhcyBubyBwZWVyLCB0aGlzIGZ1bmN0aW9uCi0gKiByZXR1cm5zICVUUlVFLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwZWVyIG9mIEBwYWQgY2FuIGFjY2VwdCB0aGUgY2FwcyBvciBAcGFkIGhhcyBubyBwZWVyLgotICovCi1nYm9vbGVhbgotZ3N0X3BhZF9wZWVyX3F1ZXJ5X2FjY2VwdF9jYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QQUQgKHBhZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DQVBTIChjYXBzKSwgRkFMU0UpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hY2NlcHRfY2FwcyAoY2Fwcyk7Ci0gIGlmIChnc3RfcGFkX3BlZXJfcXVlcnkgKHBhZCwgcXVlcnkpKSB7Ci0gICAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksICZyZXMpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInF1ZXJ5IHJldHVybmVkICVkIiwgcmVzKTsKLSAgfQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0UGFkICoKLWVsZW1lbnRfZmluZF91bmxpbmtlZF9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICBHc3RJdGVyYXRvciAqaXRlcjsKLSAgR3N0UGFkICp1bmxpbmtlZF9wYWQgPSBOVUxMOwotICBnYm9vbGVhbiBkb25lOwotICBHVmFsdWUgZGF0YSA9IHsgMCwgfTsKLQotICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2UgR1NUX1BBRF9TUkM6Ci0gICAgICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAoZWxlbWVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9QQURfU0lOSzoKLSAgICAgIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoZWxlbWVudCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKE5VTEwpOwotICB9Ci0KLSAgZG9uZSA9IEZBTFNFOwotICB3aGlsZSAoIWRvbmUpIHsKLSAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdGVyLCAmZGF0YSkpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOnsKLSAgICAgICAgR3N0UGFkICpwZWVyOwotICAgICAgICBHc3RQYWQgKnBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJmRhdGEpOwotCi0gICAgICAgIEdTVF9DQVRfTE9HIChHU1RfQ0FUX0VMRU1FTlRfUEFEUywgImV4YW1pbmluZyBwYWQgJXM6JXMiLAotICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLQotICAgICAgICBwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKTsKLSAgICAgICAgaWYgKHBlZXIgPT0gTlVMTCkgewotICAgICAgICAgIHVubGlua2VkX3BhZCA9IGdzdF9vYmplY3RfcmVmIChwYWQpOwotICAgICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfRUxFTUVOVF9QQURTLAotICAgICAgICAgICAgICAiZm91bmQgZXhpc3RpbmcgdW5saW5rZWQgcGFkICVzOiVzIiwKLSAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FICh1bmxpbmtlZF9wYWQpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLSAgICAgICAgfQotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKLSAgICAgICAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKE5VTEwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ192YWx1ZV91bnNldCAoJmRhdGEpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0KLSAgcmV0dXJuIHVubGlua2VkX3BhZDsKLX0KLQotLyoqCi0gKiBnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkOgotICogQGJpbjogYmluIGluIHdoaWNoIHRvIGxvb2sgZm9yIGVsZW1lbnRzIHdpdGggdW5saW5rZWQgcGFkcwotICogQGRpcmVjdGlvbjogd2hldGhlciB0byBsb29rIGZvciBhbiB1bmxpbmtlZCBzb3VyY2Ugb3Igc2luayBwYWQKLSAqCi0gKiBSZWN1cnNpdmVseSBsb29rcyBmb3IgZWxlbWVudHMgd2l0aCBhbiB1bmxpbmtlZCBwYWQgb2YgdGhlIGdpdmVuCi0gKiBkaXJlY3Rpb24gd2l0aGluIHRoZSBzcGVjaWZpZWQgYmluIGFuZCByZXR1cm5zIGFuIHVubGlua2VkIHBhZAotICogaWYgb25lIGlzIGZvdW5kLCBvciAlTlVMTCBvdGhlcndpc2UuIElmIGEgcGFkIGlzIGZvdW5kLCB0aGUgY2FsbGVyCi0gKiBvd25zIGEgcmVmZXJlbmNlIHRvIGl0IGFuZCBzaG91bGQgdXNlIGdzdF9vYmplY3RfdW5yZWYoKSBvbiB0aGUKLSAqIHBhZCB3aGVuIGl0IGlzIG5vdCBuZWVkZWQgYW55IGxvbmdlci4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdW5saW5rZWQgcGFkIG9mIHRoZSBnaXZlbgotICogZGlyZWN0aW9uLCAlTlVMTC4KLSAqLwotR3N0UGFkICoKLWdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQgKEdzdEJpbiAqIGJpbiwgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgR3N0SXRlcmF0b3IgKml0ZXI7Ci0gIGdib29sZWFuIGRvbmU7Ci0gIEdzdFBhZCAqcGFkID0gTlVMTDsKLSAgR1ZhbHVlIGRhdGEgPSB7IDAsIH07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CSU4gKGJpbiksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGlyZWN0aW9uICE9IEdTVF9QQURfVU5LTk9XTiwgTlVMTCk7Ci0KLSAgZG9uZSA9IEZBTFNFOwotICBpdGVyID0gZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UgKGJpbik7Ci0gIHdoaWxlICghZG9uZSkgewotICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZkYXRhKSkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6ewotICAgICAgICBHc3RFbGVtZW50ICplbGVtZW50ID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7Ci0KLSAgICAgICAgcGFkID0gZWxlbWVudF9maW5kX3VubGlua2VkX3BhZCAoZWxlbWVudCwgZGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKHBhZCAhPSBOVUxMKQotICAgICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKLSAgICAgICAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKE5VTEwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ192YWx1ZV91bnNldCAoJmRhdGEpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0KLSAgcmV0dXJuIHBhZDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iaW5fc3luY19jaGlsZHJlbl9zdGF0ZXNfZm9yZWFjaCAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gKnN1Y2Nlc3MgPSB1c2VyX2RhdGE7Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbHVlKTsKLQotICBpZiAoZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlIChlbGVtZW50KSkgewotICAgICpzdWNjZXNzID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICAqc3VjY2VzcyA9ICpzdWNjZXNzICYmIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQgKGVsZW1lbnQpOwotCi0gICAgaWYgKEdTVF9JU19CSU4gKGVsZW1lbnQpKQotICAgICAgKnN1Y2Nlc3MgPSAqc3VjY2VzcwotICAgICAgICAgICYmIGdzdF9iaW5fc3luY19jaGlsZHJlbl9zdGF0ZXMgKEdTVF9CSU5fQ0FTVCAoZWxlbWVudCkpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2Jpbl9zeW5jX2NoaWxkcmVuX3N0YXRlczoKLSAqIEBiaW46IGEgI0dzdEJpbgotICoKLSAqIFN5bmNocm9uaXplcyB0aGUgc3RhdGUgb2YgZXZlcnkgY2hpbGQgb2YgQGJpbiB3aXRoIHRoZSBzdGF0ZQotICogb2YgQGJpbi4gU2VlIGFsc28gZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCgpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN5bmNpbmcgdGhlIHN0YXRlIHdhcyBzdWNjZXNzZnVsIGZvciBhbGwgY2hpbGRyZW4sCi0gKiAgb3RoZXJ3aXNlICVGQUxTRS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfYmluX3N5bmNfY2hpbGRyZW5fc3RhdGVzIChHc3RCaW4gKiBiaW4pCi17Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzID0gR1NUX0lURVJBVE9SX09LOwotICBnYm9vbGVhbiBzdWNjZXNzID0gVFJVRTsKLQotICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQgKGJpbik7Ci0KLSAgZG8gewotICAgIGlmIChyZXMgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykgewotICAgICAgc3VjY2VzcyA9IFRSVUU7Ci0gICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdCk7Ci0gICAgfQotICAgIHJlcyA9Ci0gICAgICAgIGdzdF9pdGVyYXRvcl9mb3JlYWNoIChpdCwgZ3N0X2Jpbl9zeW5jX2NoaWxkcmVuX3N0YXRlc19mb3JlYWNoLAotICAgICAgICAmc3VjY2Vzcyk7Ci0gIH0gd2hpbGUgKHJlcyA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQotICByZXR1cm4gc3VjY2VzczsKLX0KLQotLyoqCi0gKiBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb246Ci0gKiBAYmluX2Rlc2NyaXB0aW9uOiBjb21tYW5kIGxpbmUgZGVzY3JpYmluZyB0aGUgYmluCi0gKiBAZ2hvc3RfdW5saW5rZWRfcGFkczogd2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBnaG9zdCBwYWRzCi0gKiAgICAgZm9yIHVubGlua2VkIHNvdXJjZSBvciBzaW5rIHBhZHMgd2l0aGluIHRoZSBiaW4KLSAqIEBlcnI6IHdoZXJlIHRvIHN0b3JlIHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb3IsIG9yICVOVUxMCi0gKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIGdzdF9wYXJzZV9sYXVuY2goKSB0byBjcmVhdGUgYQotICogI0dzdEJpbiBmcm9tIGEgZ3N0LWxhdW5jaC1zdHlsZSBwaXBlbGluZSBkZXNjcmlwdGlvbi4gU2VlCi0gKiBnc3RfcGFyc2VfbGF1bmNoKCkgYW5kIHRoZSBnc3QtbGF1bmNoIG1hbiBwYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoZQotICogc3ludGF4LiBHaG9zdCBwYWRzIG9uIHRoZSBiaW4gZm9yIHVubGlua2VkIHNvdXJjZSBvciBzaW5rIHBhZHMKLSAqIHdpdGhpbiB0aGUgYmluIGNhbiBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQgKGJ1dCBvbmx5IGEgbWF4aW11bSBvZgotICogb25lIGdob3N0IHBhZCBmb3IgZWFjaCBkaXJlY3Rpb24gd2lsbCBiZSBjcmVhdGVkOyBpZiB5b3UgZXhwZWN0Ci0gKiBtdWx0aXBsZSB1bmxpbmtlZCBzb3VyY2UgcGFkcyBvciBtdWx0aXBsZSB1bmxpbmtlZCBzaW5rIHBhZHMKLSAqIGFuZCB3YW50IHRoZW0gYWxsIGdob3N0ZWQsIHlvdSB3aWxsIGhhdmUgdG8gY3JlYXRlIHRoZSBnaG9zdCBwYWRzCi0gKiB5b3Vyc2VsZikuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZsb2F0aW5nKSAodHlwZSBHc3QuQmluKSAobnVsbGFibGUpOiBhCi0gKiAgIG5ld2x5LWNyZWF0ZWQgYmluLCBvciAlTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KLSAqLwotR3N0RWxlbWVudCAqCi1nc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24gKGNvbnN0IGdjaGFyICogYmluX2Rlc2NyaXB0aW9uLAotICAgIGdib29sZWFuIGdob3N0X3VubGlua2VkX3BhZHMsIEdFcnJvciAqKiBlcnIpCi17Ci0gIHJldHVybiBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbCAoYmluX2Rlc2NyaXB0aW9uLAotICAgICAgZ2hvc3RfdW5saW5rZWRfcGFkcywgTlVMTCwgR1NUX1BBUlNFX0ZMQUdfTk9ORSwgZXJyKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbDoKLSAqIEBiaW5fZGVzY3JpcHRpb246IGNvbW1hbmQgbGluZSBkZXNjcmliaW5nIHRoZSBiaW4KLSAqIEBnaG9zdF91bmxpbmtlZF9wYWRzOiB3aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGdob3N0IHBhZHMKLSAqICAgICBmb3IgdW5saW5rZWQgc291cmNlIG9yIHNpbmsgcGFkcyB3aXRoaW4gdGhlIGJpbgotICogQGNvbnRleHQ6ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IGEgcGFyc2UgY29udGV4dCBhbGxvY2F0ZWQgd2l0aAotICogICAgIGdzdF9wYXJzZV9jb250ZXh0X25ldygpLCBvciAlTlVMTAotICogQGZsYWdzOiBwYXJzaW5nIG9wdGlvbnMsIG9yICNHU1RfUEFSU0VfRkxBR19OT05FCi0gKiBAZXJyOiB3aGVyZSB0byBzdG9yZSB0aGUgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIGFuIGVycm9yLCBvciAlTlVMTAotICoKLSAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBnc3RfcGFyc2VfbGF1bmNoKCkgdG8gY3JlYXRlIGEKLSAqICNHc3RCaW4gZnJvbSBhIGdzdC1sYXVuY2gtc3R5bGUgcGlwZWxpbmUgZGVzY3JpcHRpb24uIFNlZQotICogZ3N0X3BhcnNlX2xhdW5jaCgpIGFuZCB0aGUgZ3N0LWxhdW5jaCBtYW4gcGFnZSBmb3IgZGV0YWlscyBhYm91dCB0aGUKLSAqIHN5bnRheC4gR2hvc3QgcGFkcyBvbiB0aGUgYmluIGZvciB1bmxpbmtlZCBzb3VyY2Ugb3Igc2luayBwYWRzCi0gKiB3aXRoaW4gdGhlIGJpbiBjYW4gYXV0b21hdGljYWxseSBiZSBjcmVhdGVkIChidXQgb25seSBhIG1heGltdW0gb2YKLSAqIG9uZSBnaG9zdCBwYWQgZm9yIGVhY2ggZGlyZWN0aW9uIHdpbGwgYmUgY3JlYXRlZDsgaWYgeW91IGV4cGVjdAotICogbXVsdGlwbGUgdW5saW5rZWQgc291cmNlIHBhZHMgb3IgbXVsdGlwbGUgdW5saW5rZWQgc2luayBwYWRzCi0gKiBhbmQgd2FudCB0aGVtIGFsbCBnaG9zdGVkLCB5b3Ugd2lsbCBoYXZlIHRvIGNyZWF0ZSB0aGUgZ2hvc3QgcGFkcwotICogeW91cnNlbGYpLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmbG9hdGluZykgKHR5cGUgR3N0LkVsZW1lbnQpOiBhIG5ld2x5LWNyZWF0ZWQKLSAqICAgZWxlbWVudCwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBhIGJpbiB1bmxlc3MKLSAqICAgR1NUX0ZMQUdfTk9fU0lOR0xFX0VMRU1FTlRfQklOUyB3YXMgcGFzc2VkLCBvciAlTlVMTCBpZiBhbiBlcnJvcgotICogICBvY2N1cnJlZC4KLSAqLwotR3N0RWxlbWVudCAqCi1nc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbCAoY29uc3QgZ2NoYXIgKiBiaW5fZGVzY3JpcHRpb24sCi0gICAgZ2Jvb2xlYW4gZ2hvc3RfdW5saW5rZWRfcGFkcywgR3N0UGFyc2VDb250ZXh0ICogY29udGV4dCwKLSAgICBHc3RQYXJzZUZsYWdzIGZsYWdzLCBHRXJyb3IgKiogZXJyKQotewotI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQotICBHc3RQYWQgKnBhZCA9IE5VTEw7Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdzdEJpbiAqYmluOwotICBnY2hhciAqZGVzYzsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYmluX2Rlc2NyaXB0aW9uICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXJyID09IE5VTEwgfHwgKmVyciA9PSBOVUxMLCBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJNYWtpbmcgYmluIGZyb20gZGVzY3JpcHRpb24gJyVzJyIsIGJpbl9kZXNjcmlwdGlvbik7Ci0KLSAgLyogcGFyc2UgdGhlIHBpcGVsaW5lIHRvIGEgYmluICovCi0gIGlmIChmbGFncyAmIEdTVF9QQVJTRV9GTEFHX05PX1NJTkdMRV9FTEVNRU5UX0JJTlMpIHsKLSAgICBlbGVtZW50ID0gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsIChiaW5fZGVzY3JpcHRpb24sIGNvbnRleHQsIGZsYWdzLCBlcnIpOwotICB9IGVsc2UgewotICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJiaW4uKCAlcyApIiwgYmluX2Rlc2NyaXB0aW9uKTsKLSAgICBlbGVtZW50ID0gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsIChkZXNjLCBjb250ZXh0LCBmbGFncywgZXJyKTsKLSAgICBnX2ZyZWUgKGRlc2MpOwotICB9Ci0KLSAgaWYgKGVsZW1lbnQgPT0gTlVMTCB8fCAoZXJyICYmICplcnIgIT0gTlVMTCkpIHsKLSAgICBpZiAoZWxlbWVudCkKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKEdTVF9JU19CSU4gKGVsZW1lbnQpKSB7Ci0gICAgYmluID0gR1NUX0JJTiAoZWxlbWVudCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0KLQotICAvKiBmaW5kIHBhZHMgYW5kIGdob3N0IHRoZW0gaWYgbmVjZXNzYXJ5ICovCi0gIGlmIChnaG9zdF91bmxpbmtlZF9wYWRzKSB7Ci0gICAgaWYgKChwYWQgPSBnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkIChiaW4sIEdTVF9QQURfU1JDKSkpIHsKLSAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNyYyIsIHBhZCkpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgICB9Ci0gICAgaWYgKChwYWQgPSBnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkIChiaW4sIEdTVF9QQURfU0lOSykpKSB7Ci0gICAgICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoYmluKSwgZ3N0X2dob3N0X3BhZF9uZXcgKCJzaW5rIiwgcGFkKSk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBHU1RfRUxFTUVOVCAoYmluKTsKLSNlbHNlCi0gIGdjaGFyICptc2c7Ci0KLSAgR1NUX1dBUk5JTkcgKCJEaXNhYmxlZCBBUEkgY2FsbGVkIik7Ci0KLSAgbXNnID0gZ3N0X2Vycm9yX2dldF9tZXNzYWdlIChHU1RfQ09SRV9FUlJPUiwgR1NUX0NPUkVfRVJST1JfRElTQUJMRUQpOwotICBnX3NldF9lcnJvciAoZXJyLCBHU1RfQ09SRV9FUlJPUiwgR1NUX0NPUkVfRVJST1JfRElTQUJMRUQsICIlcyIsIG1zZyk7Ci0gIGdfZnJlZSAobXNnKTsKLQotICByZXR1cm4gTlVMTDsKLSNlbmRpZgotfQotCi0vKioKLSAqIGdzdF91dGlsX2dldF90aW1lc3RhbXA6Ci0gKgotICogR2V0IGEgdGltZXN0YW1wIGFzIEdzdENsb2NrVGltZSB0byBiZSB1c2VkIGZvciBpbnRlcnZhbCBtZWFzdXJlbWVudHMuCi0gKiBUaGUgdGltZXN0YW1wIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgaW4gYW55IG90aGVyIHdheS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgdGltZXN0YW1wCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAodm9pZCkKLXsKLSNpZiBkZWZpbmVkIChIQVZFX1BPU0lYX1RJTUVSUykgJiYgZGVmaW5lZChIQVZFX01PTk9UT05JQ19DTE9DSykgJiZcCi0gICAgZGVmaW5lZCAoSEFWRV9DTE9DS19HRVRUSU1FKQotICBzdHJ1Y3QgdGltZXNwZWMgbm93OwotCi0gIGNsb2NrX2dldHRpbWUgKENMT0NLX01PTk9UT05JQywgJm5vdyk7Ci0gIHJldHVybiBHU1RfVElNRVNQRUNfVE9fVElNRSAobm93KTsKLSNlbHNlCi0gIEdUaW1lVmFsIG5vdzsKLQotICBnX2dldF9jdXJyZW50X3RpbWUgKCZub3cpOwotICByZXR1cm4gR1NUX1RJTUVWQUxfVE9fVElNRSAobm93KTsKLSNlbmRpZgotfQotCi0vKioKLSAqIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2g6Ci0gKiBAYXJyYXk6IHRoZSBzb3J0ZWQgaW5wdXQgYXJyYXkKLSAqIEBudW1fZWxlbWVudHM6IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkKLSAqIEBlbGVtZW50X3NpemU6IHNpemUgb2YgZXZlcnkgZWxlbWVudCBpbiBieXRlcwotICogQHNlYXJjaF9mdW5jOiAoc2NvcGUgY2FsbCk6IGZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIGVsZW1lbnRzLCBAc2VhcmNoX2RhdGEgd2lsbCBhbHdheXMgYmUgcGFzc2VkIGFzIHNlY29uZCBhcmd1bWVudAotICogQG1vZGU6IHNlYXJjaCBtb2RlIHRoYXQgc2hvdWxkIGJlIHVzZWQKLSAqIEBzZWFyY2hfZGF0YTogZWxlbWVudCB0aGF0IHNob3VsZCBiZSBmb3VuZAotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiBkYXRhIHRvIHBhc3MgdG8gQHNlYXJjaF9mdW5jCi0gKgotICogU2VhcmNoZXMgaW5zaWRlIEBhcnJheSBmb3IgQHNlYXJjaF9kYXRhIGJ5IHVzaW5nIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uCi0gKiBAc2VhcmNoX2Z1bmMuIEBhcnJheSBtdXN0IGJlIHNvcnRlZCBhc2NlbmRpbmcuCi0gKgotICogQXMgQHNlYXJjaF9kYXRhIGlzIGFsd2F5cyBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIEBzZWFyY2hfZnVuYyBpdCdzCi0gKiBub3QgcmVxdWlyZWQgdGhhdCBAc2VhcmNoX2RhdGEgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGFycmF5IGVsZW1lbnRzLgotICoKLSAqIFRoZSBjb21wbGV4aXR5IG9mIHRoaXMgc2VhcmNoIGZ1bmN0aW9uIGlzIE8obG9nIChudW1fZWxlbWVudHMpKS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKG51bGxhYmxlKTogVGhlIGFkZHJlc3Mgb2YgdGhlIGZvdW5kCi0gKiBlbGVtZW50IG9yICVOVUxMIGlmIG5vdGhpbmcgd2FzIGZvdW5kCi0gKi8KLWdwb2ludGVyCi1nc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChncG9pbnRlciBhcnJheSwgZ3VpbnQgbnVtX2VsZW1lbnRzLAotICAgIGdzaXplIGVsZW1lbnRfc2l6ZSwgR0NvbXBhcmVEYXRhRnVuYyBzZWFyY2hfZnVuYywgR3N0U2VhcmNoTW9kZSBtb2RlLAotICAgIGdjb25zdHBvaW50ZXIgc2VhcmNoX2RhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2xvbmcgbGVmdCA9IDAsIHJpZ2h0ID0gbnVtX2VsZW1lbnRzIC0gMSwgbTsKLSAgZ2ludCByZXQ7Ci0gIGd1aW50OCAqZGF0YSA9IChndWludDggKikgYXJyYXk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFycmF5ICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZWxlbWVudF9zaXplID4gMCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWFyY2hfZnVuYyAhPSBOVUxMLCBOVUxMKTsKLQotICAvKiAwLiBObyBlbGVtZW50cyA9PiByZXR1cm4gTlVMTCAqLwotICBpZiAobnVtX2VsZW1lbnRzID09IDApCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogMS4gSWYgc2VhcmNoX2RhdGEgaXMgYmVmb3JlIHRoZSAwdGggZWxlbWVudCByZXR1cm4gdGhlIDB0aCBlbGVtZW50ICovCi0gIHJldCA9IHNlYXJjaF9mdW5jIChkYXRhLCBzZWFyY2hfZGF0YSwgdXNlcl9kYXRhKTsKLSAgaWYgKChyZXQgPj0gMCAmJiBtb2RlID09IEdTVF9TRUFSQ0hfTU9ERV9BRlRFUikgfHwgcmV0ID09IDApCi0gICAgcmV0dXJuIGRhdGE7Ci0gIGVsc2UgaWYgKHJldCA+IDApCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogMi4gSWYgc2VhcmNoX2RhdGEgaXMgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCAqLwotICByZXQgPQotICAgICAgc2VhcmNoX2Z1bmMgKGRhdGEgKyAobnVtX2VsZW1lbnRzIC0gMSkgKiBlbGVtZW50X3NpemUsIHNlYXJjaF9kYXRhLAotICAgICAgdXNlcl9kYXRhKTsKLSAgaWYgKChyZXQgPD0gMCAmJiBtb2RlID09IEdTVF9TRUFSQ0hfTU9ERV9CRUZPUkUpIHx8IHJldCA9PSAwKQotICAgIHJldHVybiBkYXRhICsgKG51bV9lbGVtZW50cyAtIDEpICogZWxlbWVudF9zaXplOwotICBlbHNlIGlmIChyZXQgPCAwKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIDMuIGVsc2UgYmluYXJ5IHNlYXJjaCAqLwotICB3aGlsZSAoVFJVRSkgewotICAgIG0gPSBsZWZ0ICsgKHJpZ2h0IC0gbGVmdCkgLyAyOwotCi0gICAgcmV0ID0gc2VhcmNoX2Z1bmMgKGRhdGEgKyBtICogZWxlbWVudF9zaXplLCBzZWFyY2hfZGF0YSwgdXNlcl9kYXRhKTsKLQotICAgIGlmIChyZXQgPT0gMCkgewotICAgICAgcmV0dXJuIGRhdGEgKyBtICogZWxlbWVudF9zaXplOwotICAgIH0gZWxzZSBpZiAocmV0IDwgMCkgewotICAgICAgbGVmdCA9IG0gKyAxOwotICAgIH0gZWxzZSB7Ci0gICAgICByaWdodCA9IG0gLSAxOwotICAgIH0KLQotICAgIC8qIE5vIGV4YWN0IG1hdGNoIGZvdW5kICovCi0gICAgaWYgKHJpZ2h0IDwgbGVmdCkgewotICAgICAgaWYgKG1vZGUgPT0gR1NUX1NFQVJDSF9NT0RFX0VYQUNUKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfSBlbHNlIGlmIChtb2RlID09IEdTVF9TRUFSQ0hfTU9ERV9BRlRFUikgewotICAgICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICByZXR1cm4gKG0gPCBudW1fZWxlbWVudHMpID8gZGF0YSArIChtICsgMSkgKiBlbGVtZW50X3NpemUgOiBOVUxMOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIGRhdGEgKyBtICogZWxlbWVudF9zaXplOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAgcmV0dXJuIGRhdGEgKyBtICogZWxlbWVudF9zaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcmV0dXJuIChtID4gMCkgPyBkYXRhICsgKG0gLSAxKSAqIGVsZW1lbnRfc2l6ZSA6IE5VTEw7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLS8qIEZpbmRzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvci4KLSAqIFJldHVybnMgMSBpZiBub25lIG90aGVyIGZvdW5kLgotICogVGhpcyBpcyBFdWNsaWQncyBhbGdvcml0aG0uICovCi0KLS8qKgotICogZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3I6Ci0gKiBAYTogRmlyc3QgdmFsdWUgYXMgI2dpbnQKLSAqIEBiOiBTZWNvbmQgdmFsdWUgYXMgI2dpbnQKLSAqCi0gKiBDYWxjdWxhdGVzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBAYQotICogYW5kIEBiLgotICoKLSAqIFJldHVybnM6IEdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIEBhIGFuZCBAYgotICovCi1naW50Ci1nc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoZ2ludCBhLCBnaW50IGIpCi17Ci0gIHdoaWxlIChiICE9IDApIHsKLSAgICBpbnQgdGVtcCA9IGE7Ci0KLSAgICBhID0gYjsKLSAgICBiID0gdGVtcCAlIGI7Ci0gIH0KLQotICByZXR1cm4gQUJTIChhKTsKLX0KLQotLyoqCi0gKiBnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvcl9pbnQ2NDoKLSAqIEBhOiBGaXJzdCB2YWx1ZSBhcyAjZ2ludDY0Ci0gKiBAYjogU2Vjb25kIHZhbHVlIGFzICNnaW50NjQKLSAqCi0gKiBDYWxjdWxhdGVzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBAYQotICogYW5kIEBiLgotICoKLSAqIFJldHVybnM6IEdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIEBhIGFuZCBAYgotICovCi1naW50NjQKLWdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yX2ludDY0IChnaW50NjQgYSwgZ2ludDY0IGIpCi17Ci0gIHdoaWxlIChiICE9IDApIHsKLSAgICBnaW50NjQgdGVtcCA9IGE7Ci0KLSAgICBhID0gYjsKLSAgICBiID0gdGVtcCAlIGI7Ci0gIH0KLQotICByZXR1cm4gQUJTIChhKTsKLX0KLQotCi0vKioKLSAqIGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZToKLSAqIEBzcmNfbjogRnJhY3Rpb24gbnVtZXJhdG9yIGFzICNnaW50Ci0gKiBAc3JjX2Q6IEZyYWN0aW9uIGRlbm9taW5hdG9yICNnaW50Ci0gKiBAZGVzdDogKG91dCk6IHBvaW50ZXIgdG8gYSAjZ2RvdWJsZSBmb3IgdGhlIHJlc3VsdAotICoKLSAqIFRyYW5zZm9ybXMgYSBmcmFjdGlvbiB0byBhICNnZG91YmxlLgotICovCi12b2lkCi1nc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUgKGdpbnQgc3JjX24sIGdpbnQgc3JjX2QsIGdkb3VibGUgKiBkZXN0KQotewotICBnX3JldHVybl9pZl9mYWlsIChkZXN0ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChzcmNfZCAhPSAwKTsKLQotICAqZGVzdCA9ICgoZ2RvdWJsZSkgc3JjX24pIC8gKChnZG91YmxlKSBzcmNfZCk7Ci19Ci0KLSNkZWZpbmUgTUFYX1RFUk1TICAgICAgIDMwCi0jZGVmaW5lIE1JTl9ESVZJU09SICAgICAxLjBlLTEwCi0jZGVmaW5lIE1BWF9FUlJPUiAgICAgICAxLjBlLTIwCi0KLS8qIHVzZSBjb250aW51ZWQgZnJhY3Rpb25zIHRvIHRyYW5zZm9ybSBhIGRvdWJsZSBpbnRvIGEgZnJhY3Rpb24sCi0gKiBzZWUgaHR0cDovL21hdGhmb3J1bS5vcmcvZHIubWF0aC9mYXEvZmFxLmZyYWN0aW9ucy5odG1sI2RlY2ZyYWMuCi0gKiBUaGlzIGFsZ29yaXRobSB0YWtlcyBjYXJlIG9mIG92ZXJmbG93cy4KLSAqLwotCi0vKioKLSAqIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbjoKLSAqIEBzcmM6ICNnZG91YmxlIHRvIHRyYW5zZm9ybQotICogQGRlc3RfbjogKG91dCk6IHBvaW50ZXIgdG8gYSAjZ2ludCB0byBob2xkIHRoZSByZXN1bHQgbnVtZXJhdG9yCi0gKiBAZGVzdF9kOiAob3V0KTogcG9pbnRlciB0byBhICNnaW50IHRvIGhvbGQgdGhlIHJlc3VsdCBkZW5vbWluYXRvcgotICoKLSAqIFRyYW5zZm9ybXMgYSAjZ2RvdWJsZSB0byBhIGZyYWN0aW9uIGFuZCBzaW1wbGlmaWVzCi0gKiB0aGUgcmVzdWx0LgotICovCi12b2lkCi1nc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24gKGdkb3VibGUgc3JjLCBnaW50ICogZGVzdF9uLCBnaW50ICogZGVzdF9kKQotewotCi0gIGdkb3VibGUgViwgRjsgICAgICAgICAgICAgICAgIC8qIGRvdWJsZSBiZWluZyBjb252ZXJ0ZWQgKi8KLSAgZ2ludCBOLCBEOyAgICAgICAgICAgICAgICAgICAgLyogd2lsbCBjb250YWluIHRoZSByZXN1bHQgKi8KLSAgZ2ludCBBOyAgICAgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCB0ZXJtIGluIGNvbnRpbnVlZCBmcmFjdGlvbiAqLwotICBnaW50NjQgTjEsIEQxOyAgICAgICAgICAgICAgICAvKiBudW1lcmF0b3IsIGRlbm9taW5hdG9yIG9mIGxhc3QgYXBwcm94ICovCi0gIGdpbnQ2NCBOMiwgRDI7ICAgICAgICAgICAgICAgIC8qIG51bWVyYXRvciwgZGVub21pbmF0b3Igb2YgcHJldmlvdXMgYXBwcm94ICovCi0gIGdpbnQgaTsKLSAgZ2ludCBnY2Q7Ci0gIGdib29sZWFuIG5lZ2F0aXZlID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZGVzdF9uICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChkZXN0X2QgIT0gTlVMTCk7Ci0KLSAgLyogaW5pdGlhbGl6ZSBmcmFjdGlvbiBiZWluZyBjb252ZXJ0ZWQgKi8KLSAgRiA9IHNyYzsKLSAgaWYgKEYgPCAwLjApIHsKLSAgICBGID0gLUY7Ci0gICAgbmVnYXRpdmUgPSBUUlVFOwotICB9Ci0KLSAgViA9IEY7Ci0gIC8qIGluaXRpYWxpemUgZnJhY3Rpb25zIHdpdGggMS8wLCAwLzEgKi8KLSAgTjEgPSAxOwotICBEMSA9IDA7Ci0gIE4yID0gMDsKLSAgRDIgPSAxOwotICBOID0gMTsKLSAgRCA9IDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE1BWF9URVJNUzsgaSsrKSB7Ci0gICAgLyogZ2V0IG5leHQgdGVybSAqLwotICAgIEEgPSAoZ2ludCkgRjsgICAgICAgICAgICAgICAvKiBubyBmbG9vcigpIG5lZWRlZCwgRiBpcyBhbHdheXMgPj0gMCAqLwotICAgIC8qIGdldCBuZXcgZGl2aXNvciAqLwotICAgIEYgPSBGIC0gQTsKLQotICAgIC8qIGNhbGN1bGF0ZSBuZXcgZnJhY3Rpb24gaW4gdGVtcCAqLwotICAgIE4yID0gTjEgKiBBICsgTjI7Ci0gICAgRDIgPSBEMSAqIEEgKyBEMjsKLQotICAgIC8qIGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgKi8KLSAgICBpZiAoTjIgPiBHX01BWElOVCB8fCBEMiA+IEdfTUFYSU5UKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBOID0gTjI7Ci0gICAgRCA9IEQyOwotCi0gICAgLyogc2F2ZSBsYXN0IHR3byBmcmFjdGlvbnMgKi8KLSAgICBOMiA9IE4xOwotICAgIEQyID0gRDE7Ci0gICAgTjEgPSBOOwotICAgIEQxID0gRDsKLQotICAgIC8qIHF1aXQgaWYgZGl2aWRpbmcgYnkgemVybyBvciBjbG9zZSBlbm91Z2ggdG8gdGFyZ2V0ICovCi0gICAgaWYgKEYgPCBNSU5fRElWSVNPUiB8fCBmYWJzIChWIC0gKChnZG91YmxlKSBOKSAvIEQpIDwgTUFYX0VSUk9SKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvKiBUYWtlIHJlY2lwcm9jYWwgKi8KLSAgICBGID0gMSAvIEY7Ci0gIH0KLSAgLyogZml4IGZvciBvdmVyZmxvdyAqLwotICBpZiAoRCA9PSAwKSB7Ci0gICAgTiA9IEdfTUFYSU5UOwotICAgIEQgPSAxOwotICB9Ci0gIC8qIGZpeCBmb3IgbmVnYXRpdmUgKi8KLSAgaWYgKG5lZ2F0aXZlKQotICAgIE4gPSAtTjsKLQotICAvKiBzaW1wbGlmeSAqLwotICBnY2QgPSBnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoTiwgRCk7Ci0gIGlmIChnY2QpIHsKLSAgICBOIC89IGdjZDsKLSAgICBEIC89IGdjZDsKLSAgfQotCi0gIC8qIHNldCByZXN1bHRzICovCi0gICpkZXN0X24gPSBOOwotICAqZGVzdF9kID0gRDsKLX0KLQotLyoqCi0gKiBnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseToKLSAqIEBhX246IE51bWVyYXRvciBvZiBmaXJzdCB2YWx1ZQotICogQGFfZDogRGVub21pbmF0b3Igb2YgZmlyc3QgdmFsdWUKLSAqIEBiX246IE51bWVyYXRvciBvZiBzZWNvbmQgdmFsdWUKLSAqIEBiX2Q6IERlbm9taW5hdG9yIG9mIHNlY29uZCB2YWx1ZQotICogQHJlc19uOiAob3V0KTogUG9pbnRlciB0byAjZ2ludCB0byBob2xkIHRoZSByZXN1bHQgbnVtZXJhdG9yCi0gKiBAcmVzX2Q6IChvdXQpOiBQb2ludGVyIHRvICNnaW50IHRvIGhvbGQgdGhlIHJlc3VsdCBkZW5vbWluYXRvcgotICoKLSAqIE11bHRpcGxpZXMgdGhlIGZyYWN0aW9ucyBAYV9uL0BhX2QgYW5kIEBiX24vQGJfZCBhbmQgc3RvcmVzCi0gKiB0aGUgcmVzdWx0IGluIEByZXNfbiBhbmQgQHJlc19kLgotICoKLSAqIFJldHVybnM6ICVGQUxTRSBvbiBvdmVyZmxvdywgJVRSVUUgb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKGdpbnQgYV9uLCBnaW50IGFfZCwgZ2ludCBiX24sIGdpbnQgYl9kLAotICAgIGdpbnQgKiByZXNfbiwgZ2ludCAqIHJlc19kKQotewotICBnaW50IGdjZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzX24gIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzX2QgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYV9kICE9IDAsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJfZCAhPSAwLCBGQUxTRSk7Ci0KLSAgLyogZWFybHkgb3V0IGlmIGVpdGhlciBpcyAwLCBhcyBpdHMgZ2NkIHdvdWxkIGJlIDAgKi8KLSAgaWYgKGFfbiA9PSAwIHx8IGJfbiA9PSAwKSB7Ci0gICAgKnJlc19uID0gMDsKLSAgICAqcmVzX2QgPSAxOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGFfbiwgYV9kKTsKLSAgYV9uIC89IGdjZDsKLSAgYV9kIC89IGdjZDsKLQotICBnY2QgPSBnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoYl9uLCBiX2QpOwotICBiX24gLz0gZ2NkOwotICBiX2QgLz0gZ2NkOwotCi0gIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChhX24sIGJfZCk7Ci0gIGFfbiAvPSBnY2Q7Ci0gIGJfZCAvPSBnY2Q7Ci0KLSAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGFfZCwgYl9uKTsKLSAgYV9kIC89IGdjZDsKLSAgYl9uIC89IGdjZDsKLQotICAvKiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBvdmVyZmxvdyAqLwotICBpZiAoYV9uICE9IDAgJiYgR19NQVhJTlQgLyBBQlMgKGFfbikgPCBBQlMgKGJfbikpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoR19NQVhJTlQgLyBBQlMgKGFfZCkgPCBBQlMgKGJfZCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gICpyZXNfbiA9IGFfbiAqIGJfbjsKLSAgKnJlc19kID0gYV9kICogYl9kOwotCi0gIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgqcmVzX24sICpyZXNfZCk7Ci0gICpyZXNfbiAvPSBnY2Q7Ci0gICpyZXNfZCAvPSBnY2Q7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X3V0aWxfZnJhY3Rpb25fYWRkOgotICogQGFfbjogTnVtZXJhdG9yIG9mIGZpcnN0IHZhbHVlCi0gKiBAYV9kOiBEZW5vbWluYXRvciBvZiBmaXJzdCB2YWx1ZQotICogQGJfbjogTnVtZXJhdG9yIG9mIHNlY29uZCB2YWx1ZQotICogQGJfZDogRGVub21pbmF0b3Igb2Ygc2Vjb25kIHZhbHVlCi0gKiBAcmVzX246IChvdXQpOiBQb2ludGVyIHRvICNnaW50IHRvIGhvbGQgdGhlIHJlc3VsdCBudW1lcmF0b3IKLSAqIEByZXNfZDogKG91dCk6IFBvaW50ZXIgdG8gI2dpbnQgdG8gaG9sZCB0aGUgcmVzdWx0IGRlbm9taW5hdG9yCi0gKgotICogQWRkcyB0aGUgZnJhY3Rpb25zIEBhX24vQGFfZCBhbmQgQGJfbi9AYl9kIGFuZCBzdG9yZXMKLSAqIHRoZSByZXN1bHQgaW4gQHJlc19uIGFuZCBAcmVzX2QuCi0gKgotICogUmV0dXJuczogJUZBTFNFIG9uIG92ZXJmbG93LCAlVFJVRSBvdGhlcndpc2UuCi0gKi8KLWdib29sZWFuCi1nc3RfdXRpbF9mcmFjdGlvbl9hZGQgKGdpbnQgYV9uLCBnaW50IGFfZCwgZ2ludCBiX24sIGdpbnQgYl9kLCBnaW50ICogcmVzX24sCi0gICAgZ2ludCAqIHJlc19kKQotewotICBnaW50IGdjZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzX24gIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzX2QgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYV9kICE9IDAsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJfZCAhPSAwLCBGQUxTRSk7Ci0KLSAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGFfbiwgYV9kKTsKLSAgYV9uIC89IGdjZDsKLSAgYV9kIC89IGdjZDsKLQotICBnY2QgPSBnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoYl9uLCBiX2QpOwotICBiX24gLz0gZ2NkOwotICBiX2QgLz0gZ2NkOwotCi0gIGlmIChhX24gPT0gMCkgewotICAgICpyZXNfbiA9IGJfbjsKLSAgICAqcmVzX2QgPSBiX2Q7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgaWYgKGJfbiA9PSAwKSB7Ci0gICAgKnJlc19uID0gYV9uOwotICAgICpyZXNfZCA9IGFfZDsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIC8qIFRoaXMgd291bGQgcmVzdWx0IGluIG92ZXJmbG93ICovCi0gIGlmIChHX01BWElOVCAvIEFCUyAoYV9uKSA8IEFCUyAoYl9uKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChHX01BWElOVCAvIEFCUyAoYV9kKSA8IEFCUyAoYl9kKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgKnJlc19uID0gKGFfbiAqIGJfZCkgKyAoYV9kICogYl9uKTsKLSAgKnJlc19kID0gYV9kICogYl9kOwotCi0gIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgqcmVzX24sICpyZXNfZCk7Ci0gIGlmIChnY2QpIHsKLSAgICAqcmVzX24gLz0gZ2NkOwotICAgICpyZXNfZCAvPSBnY2Q7Ci0gIH0gZWxzZSB7Ci0gICAgLyogcmVzX24gPT0gMCAqLwotICAgICpyZXNfZCA9IDE7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlOgotICogQGFfbjogTnVtZXJhdG9yIG9mIGZpcnN0IHZhbHVlCi0gKiBAYV9kOiBEZW5vbWluYXRvciBvZiBmaXJzdCB2YWx1ZQotICogQGJfbjogTnVtZXJhdG9yIG9mIHNlY29uZCB2YWx1ZQotICogQGJfZDogRGVub21pbmF0b3Igb2Ygc2Vjb25kIHZhbHVlCi0gKgotICogQ29tcGFyZXMgdGhlIGZyYWN0aW9ucyBAYV9uL0BhX2QgYW5kIEBiX24vQGJfZCBhbmQgcmV0dXJucwotICogLTEgaWYgYSA8IGIsIDAgaWYgYSA9IGIgYW5kIDEgaWYgYSA+IGIuCi0gKgotICogUmV0dXJuczogLTEgaWYgYSA8IGI7IDAgaWYgYSA9IGI7IDEgaWYgYSA+IGIuCi0gKi8KLWdpbnQKLWdzdF91dGlsX2ZyYWN0aW9uX2NvbXBhcmUgKGdpbnQgYV9uLCBnaW50IGFfZCwgZ2ludCBiX24sIGdpbnQgYl9kKQotewotICBnaW50NjQgbmV3X251bV8xOwotICBnaW50NjQgbmV3X251bV8yOwotICBnaW50IGdjZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYV9kICE9IDAgJiYgYl9kICE9IDAsIDApOwotCi0gIC8qIFNpbXBsaWZ5ICovCi0gIGdjZCA9IGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChhX24sIGFfZCk7Ci0gIGFfbiAvPSBnY2Q7Ci0gIGFfZCAvPSBnY2Q7Ci0KLSAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKGJfbiwgYl9kKTsKLSAgYl9uIC89IGdjZDsKLSAgYl9kIC89IGdjZDsKLQotICAvKiBmcmFjdGlvbnMgYXJlIHJlZHVjZWQgd2hlbiBzZXQsIHNvIHdlIGNhbiBxdWlja2x5IHNlZSBpZiB0aGV5J3JlIGVxdWFsICovCi0gIGlmIChhX24gPT0gYl9uICYmIGFfZCA9PSBiX2QpCi0gICAgcmV0dXJuIDA7Ci0KLSAgLyogZXh0ZW5kIHRvIDY0IGJpdHMgKi8KLSAgbmV3X251bV8xID0gKChnaW50NjQpIGFfbikgKiBiX2Q7Ci0gIG5ld19udW1fMiA9ICgoZ2ludDY0KSBiX24pICogYV9kOwotICBpZiAobmV3X251bV8xIDwgbmV3X251bV8yKQotICAgIHJldHVybiAtMTsKLSAgaWYgKG5ld19udW1fMSA+IG5ld19udW1fMikKLSAgICByZXR1cm4gMTsKLQotICAvKiBTaG91bGQgbm90IGhhcHBlbiBiZWNhdXNlIGFfZCBhbmQgYl9kIGFyZSBub3QgMCAqLwotICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoMCk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfaW50ZXJuYWwgKEdzdFBhZCAqIHBhZCwgR3N0RWxlbWVudCAqIHBhcmVudCwKLSAgICBjb25zdCBnY2hhciAqIHN0cmVhbV9pZCkKLXsKLSAgR3N0RXZlbnQgKnVwc3RyZWFtX2V2ZW50OwotICBnY2hhciAqdXBzdHJlYW1fc3RyZWFtX2lkID0gTlVMTCwgKm5ld19zdHJlYW1faWQ7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NSQyAocGFkKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRUxFTUVOVCAocGFyZW50KSwgTlVMTCk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhcmVudC0+bnVtc2lua3BhZHMgPD0gMSwgTlVMTCk7Ci0KLSAgLyogSWYgdGhlIGVsZW1lbnQgaGFzIG11bHRpcGxlIHNvdXJjZSBwYWRzIGl0IG11c3QKLSAgICogcHJvdmlkZSBhIHN0cmVhbS1pZCBmb3IgZXZlcnkgc291cmNlIHBhZCwgb3RoZXJ3aXNlCi0gICAqIGFsbCBzb3VyY2UgcGFkcyB3aWxsIGhhdmUgdGhlIHNhbWUgYW5kIGFyZSBub3QKLSAgICogZGlzdGluZ3Vpc2hhYmxlICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYXJlbnQtPm51bXNyY3BhZHMgPD0gMSB8fCBzdHJlYW1faWQsIE5VTEwpOwotCi0gIC8qIEZpcnN0IHRyeSB0byBnZXQgdGhlIHVwc3RyZWFtIHN0cmVhbS1zdGFydCBzdHJlYW0taWQgZnJvbSB0aGUgc2lua3BhZC4KLSAgICogVGhpcyB3aWxsIG9ubHkgd29yayBmb3Igbm9uLXNvdXJjZSBlbGVtZW50cyAqLwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHBhcmVudCwgInNpbmsiKTsKLSAgaWYgKHNpbmtwYWQpIHsKLSAgICB1cHN0cmVhbV9ldmVudCA9Ci0gICAgICAgIGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAoc2lua3BhZCwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCk7Ci0gICAgaWYgKHVwc3RyZWFtX2V2ZW50KSB7Ci0gICAgICBjb25zdCBnY2hhciAqdG1wOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0ICh1cHN0cmVhbV9ldmVudCwgJnRtcCk7Ci0gICAgICBpZiAodG1wKQotICAgICAgICB1cHN0cmVhbV9zdHJlYW1faWQgPSBnX3N0cmR1cCAodG1wKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAodXBzdHJlYW1fZXZlbnQpOwotICAgIH0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgfQotCi0gIC8qIFRoZSBvbmx5IGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhbiB1cHN0cmVhbSBzdGFydC1zdGFydCBldmVudAotICAgKiBoZXJlIGlzIGZvciBzb3VyY2UgZWxlbWVudHMgKi8KLSAgaWYgKCF1cHN0cmVhbV9zdHJlYW1faWQpIHsKLSAgICBHc3RRdWVyeSAqcXVlcnk7Ci0gICAgZ2NoYXIgKnVyaSA9IE5VTEw7Ci0KLSAgICAvKiBUcnkgdG8gZ2VuZXJhdGUgb25lIGZyb20gdGhlIFVSSSBxdWVyeSBhbmQKLSAgICAgKiBpZiBpdCBmYWlscyB0YWtlIGEgcmFuZG9tIG51bWJlciBpbnN0ZWFkICovCi0gICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3VyaSAoKTsKLSAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkgKHBhcmVudCwgcXVlcnkpKSB7Ci0gICAgICBnc3RfcXVlcnlfcGFyc2VfdXJpIChxdWVyeSwgJnVyaSk7Ci0gICAgfQotCi0gICAgaWYgKHVyaSkgewotICAgICAgR0NoZWNrc3VtICpjczsKLQotICAgICAgLyogQW5kIHRoZW4gZ2VuZXJhdGUgYW4gU0hBMjU2IHN1bSBvZiB0aGUgVVJJICovCi0gICAgICBjcyA9IGdfY2hlY2tzdW1fbmV3IChHX0NIRUNLU1VNX1NIQTI1Nik7Ci0gICAgICBnX2NoZWNrc3VtX3VwZGF0ZSAoY3MsIChjb25zdCBndWNoYXIgKikgdXJpLCBzdHJsZW4gKHVyaSkpOwotICAgICAgZ19mcmVlICh1cmkpOwotICAgICAgdXBzdHJlYW1fc3RyZWFtX2lkID0gZ19zdHJkdXAgKGdfY2hlY2tzdW1fZ2V0X3N0cmluZyAoY3MpKTsKLSAgICAgIGdfY2hlY2tzdW1fZnJlZSAoY3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBKdXN0IGdldCBzb21lIHJhbmRvbSBudW1iZXIgaWYgdGhlIFVSSSBxdWVyeSBmYWlscyAqLwotICAgICAgR1NUX0ZJWE1FX09CSkVDVCAocGFkLCAiQ3JlYXRpbmcgcmFuZG9tIHN0cmVhbS1pZCwgY29uc2lkZXIgIgotICAgICAgICAgICJpbXBsZW1lbnRpbmcgYSBkZXRlcm1pbmlzdGljIHdheSBvZiBjcmVhdGluZyBhIHN0cmVhbS1pZCIpOwotICAgICAgdXBzdHJlYW1fc3RyZWFtX2lkID0KLSAgICAgICAgICBnX3N0cmR1cF9wcmludGYgKCIlMDh4JTA4eCUwOHglMDh4IiwgZ19yYW5kb21faW50ICgpLCBnX3JhbmRvbV9pbnQgKCksCi0gICAgICAgICAgZ19yYW5kb21faW50ICgpLCBnX3JhbmRvbV9pbnQgKCkpOwotICAgIH0KLQotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICB9Ci0KLSAgaWYgKHN0cmVhbV9pZCkgewotICAgIG5ld19zdHJlYW1faWQgPSBnX3N0cmNvbmNhdCAodXBzdHJlYW1fc3RyZWFtX2lkLCAiLyIsIHN0cmVhbV9pZCwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgbmV3X3N0cmVhbV9pZCA9IGdfc3RyZHVwICh1cHN0cmVhbV9zdHJlYW1faWQpOwotICB9Ci0KLSAgZ19mcmVlICh1cHN0cmVhbV9zdHJlYW1faWQpOwotCi0gIHJldHVybiBuZXdfc3RyZWFtX2lkOwotfQotCi0vKioKLSAqIGdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGZfdmFsaXN0OgotICogQHBhZDogQSBzb3VyY2UgI0dzdFBhZAotICogQHBhcmVudDogUGFyZW50ICNHc3RFbGVtZW50IG9mIEBwYWQKLSAqIEBzdHJlYW1faWQ6IChhbGxvdy1ub25lKTogVGhlIHN0cmVhbS1pZAotICogQHZhcl9hcmdzOiBwYXJhbWV0ZXJzIGZvciB0aGUgQHN0cmVhbV9pZCBmb3JtYXQgc3RyaW5nCi0gKgotICogQ3JlYXRlcyBhIHN0cmVhbS1pZCBmb3IgdGhlIHNvdXJjZSAjR3N0UGFkIEBwYWQgYnkgY29tYmluaW5nIHRoZQotICogdXBzdHJlYW0gaW5mb3JtYXRpb24gd2l0aCB0aGUgb3B0aW9uYWwgQHN0cmVhbV9pZCBvZiB0aGUgc3RyZWFtCi0gKiBvZiBAcGFkLiBAcGFkIG11c3QgaGF2ZSBhIHBhcmVudCAjR3N0RWxlbWVudCBhbmQgd2hpY2ggbXVzdCBoYXZlIHplcm8KLSAqIG9yIG9uZSBzaW5rcGFkLiBAc3RyZWFtX2lkIGNhbiBvbmx5IGJlICVOVUxMIGlmIHRoZSBwYXJlbnQgZWxlbWVudAotICogb2YgQHBhZCBoYXMgb25seSBhIHNpbmdsZSBzb3VyY2UgcGFkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIHVuaXF1ZSBzdHJlYW0taWQgYnkgZ2V0dGluZyB0aGUgdXBzdHJlYW0KLSAqIHN0cmVhbS1zdGFydCBldmVudCBzdHJlYW0gSUQgYW5kIGFwcGVuZGluZyBAc3RyZWFtX2lkIHRvIGl0LiBJZiB0aGUKLSAqIGVsZW1lbnQgaGFzIG5vIHNpbmtwYWQgaXQgd2lsbCBnZW5lcmF0ZSBhbiB1cHN0cmVhbSBzdHJlYW0taWQgYnkKLSAqIGRvaW5nIGFuIFVSSSBxdWVyeSBvbiB0aGUgZWxlbWVudCBhbmQgaW4gdGhlIHdvcnN0IGNhc2UganVzdCB1c2VzCi0gKiBhIHJhbmRvbSBudW1iZXIuIFNvdXJjZSBlbGVtZW50cyB0aGF0IGRvbid0IGltcGxlbWVudCB0aGUgVVJJCi0gKiBoYW5kbGVyIGludGVyZmFjZSBzaG91bGQgaWRlYWxseSBnZW5lcmF0ZSBhIHVuaXF1ZSwgZGV0ZXJtaW5pc3RpYwotICogc3RyZWFtLWlkIG1hbnVhbGx5IGluc3RlYWQuCi0gKgotICogUmV0dXJuczogQSBzdHJlYW0taWQgZm9yIEBwYWQuIGdfZnJlZSgpIGFmdGVyIHVzYWdlLgotICovCi1nY2hhciAqCi1nc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmX3ZhbGlzdCAoR3N0UGFkICogcGFkLCBHc3RFbGVtZW50ICogcGFyZW50LAotICAgIGNvbnN0IGdjaGFyICogc3RyZWFtX2lkLCB2YV9saXN0IHZhcl9hcmdzKQotewotICBnY2hhciAqZXhwYW5kZWQgPSBOVUxMLCAqbmV3X3N0cmVhbV9pZDsKLQotICBpZiAoc3RyZWFtX2lkKQotICAgIGV4cGFuZGVkID0gZ19zdHJkdXBfdnByaW50ZiAoc3RyZWFtX2lkLCB2YXJfYXJncyk7Ci0KLSAgbmV3X3N0cmVhbV9pZCA9IGdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9pbnRlcm5hbCAocGFkLCBwYXJlbnQsIGV4cGFuZGVkKTsKLQotICBnX2ZyZWUgKGV4cGFuZGVkKTsKLQotICByZXR1cm4gbmV3X3N0cmVhbV9pZDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmOgotICogQHBhZDogQSBzb3VyY2UgI0dzdFBhZAotICogQHBhcmVudDogUGFyZW50ICNHc3RFbGVtZW50IG9mIEBwYWQKLSAqIEBzdHJlYW1faWQ6IChhbGxvdy1ub25lKTogVGhlIHN0cmVhbS1pZAotICogQC4uLjogcGFyYW1ldGVycyBmb3IgdGhlIEBzdHJlYW1faWQgZm9ybWF0IHN0cmluZwotICoKLSAqIENyZWF0ZXMgYSBzdHJlYW0taWQgZm9yIHRoZSBzb3VyY2UgI0dzdFBhZCBAcGFkIGJ5IGNvbWJpbmluZyB0aGUKLSAqIHVwc3RyZWFtIGluZm9ybWF0aW9uIHdpdGggdGhlIG9wdGlvbmFsIEBzdHJlYW1faWQgb2YgdGhlIHN0cmVhbQotICogb2YgQHBhZC4gQHBhZCBtdXN0IGhhdmUgYSBwYXJlbnQgI0dzdEVsZW1lbnQgYW5kIHdoaWNoIG11c3QgaGF2ZSB6ZXJvCi0gKiBvciBvbmUgc2lua3BhZC4gQHN0cmVhbV9pZCBjYW4gb25seSBiZSAlTlVMTCBpZiB0aGUgcGFyZW50IGVsZW1lbnQKLSAqIG9mIEBwYWQgaGFzIG9ubHkgYSBzaW5nbGUgc291cmNlIHBhZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiB1bmlxdWUgc3RyZWFtLWlkIGJ5IGdldHRpbmcgdGhlIHVwc3RyZWFtCi0gKiBzdHJlYW0tc3RhcnQgZXZlbnQgc3RyZWFtIElEIGFuZCBhcHBlbmRpbmcgQHN0cmVhbV9pZCB0byBpdC4gSWYgdGhlCi0gKiBlbGVtZW50IGhhcyBubyBzaW5rcGFkIGl0IHdpbGwgZ2VuZXJhdGUgYW4gdXBzdHJlYW0gc3RyZWFtLWlkIGJ5Ci0gKiBkb2luZyBhbiBVUkkgcXVlcnkgb24gdGhlIGVsZW1lbnQgYW5kIGluIHRoZSB3b3JzdCBjYXNlIGp1c3QgdXNlcwotICogYSByYW5kb20gbnVtYmVyLiBTb3VyY2UgZWxlbWVudHMgdGhhdCBkb24ndCBpbXBsZW1lbnQgdGhlIFVSSQotICogaGFuZGxlciBpbnRlcmZhY2Ugc2hvdWxkIGlkZWFsbHkgZ2VuZXJhdGUgYSB1bmlxdWUsIGRldGVybWluaXN0aWMKLSAqIHN0cmVhbS1pZCBtYW51YWxseSBpbnN0ZWFkLgotICoKLSAqIFJldHVybnM6IEEgc3RyZWFtLWlkIGZvciBAcGFkLiBnX2ZyZWUoKSBhZnRlciB1c2FnZS4KLSAqLwotZ2NoYXIgKgotZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZiAoR3N0UGFkICogcGFkLCBHc3RFbGVtZW50ICogcGFyZW50LAotICAgIGNvbnN0IGdjaGFyICogc3RyZWFtX2lkLCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyX2FyZ3M7Ci0gIGdjaGFyICpuZXdfc3RyZWFtX2lkOwotCi0gIHZhX3N0YXJ0ICh2YXJfYXJncywgc3RyZWFtX2lkKTsKLSAgbmV3X3N0cmVhbV9pZCA9Ci0gICAgICBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmX3ZhbGlzdCAocGFkLCBwYXJlbnQsIHN0cmVhbV9pZCwgdmFyX2FyZ3MpOwotICB2YV9lbmQgKHZhcl9hcmdzKTsKLQotICByZXR1cm4gbmV3X3N0cmVhbV9pZDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWQ6Ci0gKiBAcGFkOiBBIHNvdXJjZSAjR3N0UGFkCi0gKiBAcGFyZW50OiBQYXJlbnQgI0dzdEVsZW1lbnQgb2YgQHBhZAotICogQHN0cmVhbV9pZDogKGFsbG93LW5vbmUpOiBUaGUgc3RyZWFtLWlkCi0gKgotICogQ3JlYXRlcyBhIHN0cmVhbS1pZCBmb3IgdGhlIHNvdXJjZSAjR3N0UGFkIEBwYWQgYnkgY29tYmluaW5nIHRoZQotICogdXBzdHJlYW0gaW5mb3JtYXRpb24gd2l0aCB0aGUgb3B0aW9uYWwgQHN0cmVhbV9pZCBvZiB0aGUgc3RyZWFtCi0gKiBvZiBAcGFkLiBAcGFkIG11c3QgaGF2ZSBhIHBhcmVudCAjR3N0RWxlbWVudCBhbmQgd2hpY2ggbXVzdCBoYXZlIHplcm8KLSAqIG9yIG9uZSBzaW5rcGFkLiBAc3RyZWFtX2lkIGNhbiBvbmx5IGJlICVOVUxMIGlmIHRoZSBwYXJlbnQgZWxlbWVudAotICogb2YgQHBhZCBoYXMgb25seSBhIHNpbmdsZSBzb3VyY2UgcGFkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIHVuaXF1ZSBzdHJlYW0taWQgYnkgZ2V0dGluZyB0aGUgdXBzdHJlYW0KLSAqIHN0cmVhbS1zdGFydCBldmVudCBzdHJlYW0gSUQgYW5kIGFwcGVuZGluZyBAc3RyZWFtX2lkIHRvIGl0LiBJZiB0aGUKLSAqIGVsZW1lbnQgaGFzIG5vIHNpbmtwYWQgaXQgd2lsbCBnZW5lcmF0ZSBhbiB1cHN0cmVhbSBzdHJlYW0taWQgYnkKLSAqIGRvaW5nIGFuIFVSSSBxdWVyeSBvbiB0aGUgZWxlbWVudCBhbmQgaW4gdGhlIHdvcnN0IGNhc2UganVzdCB1c2VzCi0gKiBhIHJhbmRvbSBudW1iZXIuIFNvdXJjZSBlbGVtZW50cyB0aGF0IGRvbid0IGltcGxlbWVudCB0aGUgVVJJCi0gKiBoYW5kbGVyIGludGVyZmFjZSBzaG91bGQgaWRlYWxseSBnZW5lcmF0ZSBhIHVuaXF1ZSwgZGV0ZXJtaW5pc3RpYwotICogc3RyZWFtLWlkIG1hbnVhbGx5IGluc3RlYWQuCi0gKgotICogU2luY2Ugc3RyZWFtIElEcyBhcmUgc29ydGVkIGFscGhhYmV0aWNhbGx5LCBhbnkgbnVtYmVycyBpbiB0aGUKLSAqIHN0cmVhbSBJRCBzaG91bGQgYmUgcHJpbnRlZCB3aXRoIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMsCi0gKiBwcmVjZWRlZCBieSAwJ3MsIHN1Y2ggYXMgYnkgdXNpbmcgdGhlIGZvcm1hdCBcJTAzdSBpbnN0ZWFkIG9mIFwldS4KLSAqCi0gKiBSZXR1cm5zOiBBIHN0cmVhbS1pZCBmb3IgQHBhZC4gZ19mcmVlKCkgYWZ0ZXIgdXNhZ2UuCi0gKi8KLWdjaGFyICoKLWdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZCAoR3N0UGFkICogcGFkLCBHc3RFbGVtZW50ICogcGFyZW50LAotICAgIGNvbnN0IGdjaGFyICogc3RyZWFtX2lkKQotewotICByZXR1cm4gZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX2ludGVybmFsIChwYWQsIHBhcmVudCwgc3RyZWFtX2lkKTsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2dldF9zdHJlYW1faWQ6Ci0gKiBAcGFkOiBBIHNvdXJjZSAjR3N0UGFkCi0gKgotICogUmV0dXJucyB0aGUgY3VycmVudCBzdHJlYW0taWQgZm9yIHRoZSBAcGFkLCBvciAlTlVMTCBpZiBub25lIGhhcyBiZWVuCi0gKiBzZXQgeWV0LCBpLmUuIHRoZSBwYWQgaGFzIG5vdCByZWNlaXZlZCBhIHN0cmVhbS1zdGFydCBldmVudCB5ZXQuCi0gKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCgpIGFuZAotICogZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydCgpLgotICoKLSAqIFRoZSByZXR1cm5lZCBzdHJlYW0taWQgc3RyaW5nIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIG9wYXF1ZSBzdHJpbmcsIGl0cwotICogY29udGVudHMgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZC4KLSAqCi0gKiBSZXR1cm5zOiAobnVsbGFibGUpOiBhIG5ld2x5LWFsbG9jYXRlZCBjb3B5IG9mIHRoZSBzdHJlYW0taWQgZm9yCi0gKiAgICAgQHBhZCwgb3IgJU5VTEwuICBnX2ZyZWUoKSB0aGUgcmV0dXJuZWQgc3RyaW5nIHdoZW4gbm8gbG9uZ2VyCi0gKiAgICAgbmVlZGVkLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ2NoYXIgKgotZ3N0X3BhZF9nZXRfc3RyZWFtX2lkIChHc3RQYWQgKiBwYWQpCi17Ci0gIGNvbnN0IGdjaGFyICpzdHJlYW1faWQgPSBOVUxMOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdjaGFyICpyZXQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpLCBOVUxMKTsKLQotICBldmVudCA9IGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAocGFkLCBHU1RfRVZFTlRfU1RSRUFNX1NUQVJULCAwKTsKLSAgaWYgKGV2ZW50ICE9IE5VTEwpIHsKLSAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0IChldmVudCwgJnN0cmVhbV9pZCk7Ci0gICAgcmV0ID0gZ19zdHJkdXAgKHN0cmVhbV9pZCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInBhZCBoYXMgc3RyZWFtLWlkICclcyciLCByZXQpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCBoYXMgbm90IHJlY2VpdmVkIGEgc3RyZWFtLXN0YXJ0IGV2ZW50IHlldCIpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfcGFkX2dldF9zdHJlYW06Ci0gKiBAcGFkOiBBIHNvdXJjZSAjR3N0UGFkCi0gKgotICogUmV0dXJucyB0aGUgY3VycmVudCAjR3N0U3RyZWFtIGZvciB0aGUgQHBhZCwgb3IgJU5VTEwgaWYgbm9uZSBoYXMgYmVlbgotICogc2V0IHlldCwgaS5lLiB0aGUgcGFkIGhhcyBub3QgcmVjZWl2ZWQgYSBzdHJlYW0tc3RhcnQgZXZlbnQgeWV0LgotICoKLSAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQoKSBhbmQKLSAqIGdzdF9ldmVudF9wYXJzZV9zdHJlYW0oKS4KLSAqCi0gKiBSZXR1cm5zOiAobnVsbGFibGUpICh0cmFuc2ZlciBmdWxsKTogdGhlIGN1cnJlbnQgI0dzdFN0cmVhbSBmb3IgQHBhZCwgb3IgJU5VTEwuCi0gKiAgICAgdW5yZWYgdGhlIHJldHVybmVkIHN0cmVhbSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gKgotICogU2luY2U6IDEuMTAKLSAqLwotR3N0U3RyZWFtICoKLWdzdF9wYWRfZ2V0X3N0cmVhbSAoR3N0UGFkICogcGFkKQotewotICBHc3RTdHJlYW0gKnN0cmVhbSA9IE5VTEw7Ci0gIEdzdEV2ZW50ICpldmVudDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgTlVMTCk7Ci0KLSAgZXZlbnQgPSBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQgKHBhZCwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCk7Ci0gIGlmIChldmVudCAhPSBOVUxMKSB7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbSAoZXZlbnQsICZzdHJlYW0pOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJwYWQgaGFzIHN0cmVhbSBvYmplY3QgJXAiLCBzdHJlYW0pOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCBoYXMgbm90IHJlY2VpdmVkIGEgc3RyZWFtLXN0YXJ0IGV2ZW50IHlldCIpOwotICB9Ci0KLSAgcmV0dXJuIHN0cmVhbTsKLX0KLQotLyoqCi0gKiBnc3RfdXRpbF9ncm91cF9pZF9uZXh0OgotICoKLSAqIFJldHVybiBhIGNvbnN0YW50bHkgaW5jcmVtZW50aW5nIGdyb3VwIGlkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZW5lcmF0ZSBhIG5ldyBncm91cC1pZCBmb3IgdGhlCi0gKiBzdHJlYW0tc3RhcnQgZXZlbnQuCi0gKgotICogUmV0dXJuczogQSBjb25zdGFudGx5IGluY3JlbWVudGluZyB1bnNpZ25lZCBpbnRlZ2VyLCB3aGljaCBtaWdodAotICogb3ZlcmZsb3cgYmFjayB0byAwIGF0IHNvbWUgcG9pbnQuCi0gKi8KLWd1aW50Ci1nc3RfdXRpbF9ncm91cF9pZF9uZXh0ICh2b2lkKQotewotICBzdGF0aWMgZ2ludCBjb3VudGVyID0gMDsKLSAgcmV0dXJuIGdfYXRvbWljX2ludF9hZGQgKCZjb3VudGVyLCAxKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3R1dGlscy5oIGIvZ3N0L2dzdHV0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNjBjNTMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHV0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotICoKLSAqIGdzdHV0aWxzLmg6IEhlYWRlciBmb3IgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9VVElMU19IX18KLSNkZWZpbmUgX19HU1RfVVRJTFNfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotI2luY2x1ZGUgPGdzdC9nc3RiaW4uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cGFyc2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi12b2lkICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICAoR1ZhbHVlICp2YWx1ZSwgY29uc3QgZ2NoYXIgKnZhbHVlX3N0cik7Ci12b2lkICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcgICAgICAgICAoR09iamVjdCAqb2JqZWN0LCBjb25zdCBnY2hhciAqbmFtZSwgY29uc3QgZ2NoYXIgKnZhbHVlKTsKLXZvaWQgICAgICAgICAgICBnc3RfdXRpbF9kdW1wX21lbSAgICAgICAgICAgICAgIChjb25zdCBndWNoYXIgKm1lbSwgZ3VpbnQgc2l6ZSk7Ci0KLWd1aW50NjQgICAgICAgICBnc3RfdXRpbF9nZG91YmxlX3RvX2d1aW50NjQgICAgIChnZG91YmxlIHZhbHVlKSAgR19HTlVDX0NPTlNUOwotZ2RvdWJsZSAgICAgICAgIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSAgICAgKGd1aW50NjQgdmFsdWUpICBHX0dOVUNfQ09OU1Q7Ci0KLS8qKgotICogZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZToKLSAqIEB2YWx1ZTogdGhlICNndWludDY0IHZhbHVlIHRvIGNvbnZlcnQKLSAqCi0gKiBDb252ZXJ0IEB2YWx1ZSB0byBhIGdkb3VibGUuCi0gKgotICogUmV0dXJuczogQHZhbHVlIGNvbnZlcnRlZCB0byBhICNnZG91YmxlLgotICovCi0KLS8qKgotICogZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NDoKLSAqIEB2YWx1ZTogdGhlICNnZG91YmxlIHZhbHVlIHRvIGNvbnZlcnQKLSAqCi0gKiBDb252ZXJ0IEB2YWx1ZSB0byBhIGd1aW50NjQuCi0gKgotICogUmV0dXJuczogQHZhbHVlIGNvbnZlcnRlZCB0byBhICNndWludDY0LgotICovCi0jaWZkZWYgV0lOMzIKLSNkZWZpbmUgICAgICAgICBnc3RfZ2RvdWJsZV90b19ndWludDY0KHZhbHVlKSAgIGdzdF91dGlsX2dkb3VibGVfdG9fZ3VpbnQ2NCh2YWx1ZSkKLSNkZWZpbmUgICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlKHZhbHVlKSAgIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSh2YWx1ZSkKLSNlbHNlCi0jZGVmaW5lICAgICAgICAgZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCh2YWx1ZSkgICAoKGd1aW50NjQpICh2YWx1ZSkpCi0jZGVmaW5lICAgICAgICAgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSh2YWx1ZSkgICAoKGdkb3VibGUpICh2YWx1ZSkpCi0jZW5kaWYKLQotZ3VpbnQ2NCAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAgICAgICAgICAgKGd1aW50NjQgdmFsLCBndWludDY0IG51bSwgZ3VpbnQ2NCBkZW5vbSk7Ci1ndWludDY0ICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kICAgICAoZ3VpbnQ2NCB2YWwsIGd1aW50NjQgbnVtLCBndWludDY0IGRlbm9tKTsKLWd1aW50NjQgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCAgICAgIChndWludDY0IHZhbCwgZ3VpbnQ2NCBudW0sIGd1aW50NjQgZGVub20pOwotCi1ndWludDY0ICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAgICAgICAoZ3VpbnQ2NCB2YWwsIGdpbnQgbnVtLCBnaW50IGRlbm9tKTsKLWd1aW50NjQgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kIChndWludDY0IHZhbCwgZ2ludCBudW0sIGdpbnQgZGVub20pOwotZ3VpbnQ2NCAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAgKGd1aW50NjQgdmFsLCBnaW50IG51bSwgZ2ludCBkZW5vbSk7Ci0KLWd1aW50MzIgICAgICAgICBnc3RfdXRpbF9zZXFudW1fbmV4dCAgICAgICAgICAgICh2b2lkKTsKLWdpbnQzMiAgICAgICAgICBnc3RfdXRpbF9zZXFudW1fY29tcGFyZSAgICAgICAgIChndWludDMyIHMxLCBndWludDMyIHMyKTsKLQotZ3VpbnQgICAgICAgICAgIGdzdF91dGlsX2dyb3VwX2lkX25leHQgICAgICAgICAgKHZvaWQpOwotCi0vKioKLSAqIEdTVF9DQUxMX1BBUkVOVDoKLSAqIEBwYXJlbnRfY2xhc3NfY2FzdDogdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGNhc3QgbWFjcm8gZm9yIHRoZSBwYXJlbnQgdHlwZQotICogQG5hbWU6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwKLSAqIEBhcmdzOiBhcmd1bWVudHMgZW5jbG9zZWQgaW4gJyggKScKLSAqCi0gKiBKdXN0IGNhbGwgdGhlIHBhcmVudCBoYW5kbGVyLiAgVGhpcyBhc3N1bWVzIHRoYXQgdGhlcmUgaXMgYSB2YXJpYWJsZQotICogbmFtZWQgcGFyZW50X2NsYXNzIHRoYXQgcG9pbnRzIHRvIHRoZSAoZHVoISkgcGFyZW50IGNsYXNzLiAgTm90ZSB0aGF0Ci0gKiB0aGlzIG1hY3JvIGlzIG5vdCB0byBiZSB1c2VkIHdpdGggdGhpbmdzIHRoYXQgcmV0dXJuIHNvbWV0aGluZywgdXNlCi0gKiB0aGUgX1dJVEhfREVGQVVMVCB2ZXJzaW9uIGZvciB0aGF0Ci0gKi8KLSNkZWZpbmUgR1NUX0NBTExfUEFSRU5UKHBhcmVudF9jbGFzc19jYXN0LCBuYW1lLCBhcmdzKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKChwYXJlbnRfY2xhc3NfY2FzdChwYXJlbnRfY2xhc3MpLT5uYW1lICE9IE5VTEwpID8gICAgICAgICAgICAgIFwKLSAgICAgICAgIHBhcmVudF9jbGFzc19jYXN0KHBhcmVudF9jbGFzcyktPm5hbWUgYXJncyA6ICh2b2lkKSAwKQotCi0vKioKLSAqIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQ6Ci0gKiBAcGFyZW50X2NsYXNzX2Nhc3Q6IHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBjYXN0IG1hY3JvIGZvciB0aGUgcGFyZW50IHR5cGUKLSAqIEBuYW1lOiBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsCi0gKiBAYXJnczogYXJndW1lbnRzIGVuY2xvc2VkIGluICcoICknCi0gKiBAZGVmX3JldHVybjogZGVmYXVsdCByZXN1bHQKLSAqCi0gKiBTYW1lIGFzIEdTVF9DQUxMX1BBUkVOVCgpLCBidXQgaW4gY2FzZSB0aGVyZSBpcyBubyBpbXBsZW1lbnRhdGlvbiwgaXQKLSAqIGV2YWx1YXRlcyB0byBAZGVmX3JldHVybi4KLSAqLwotI2RlZmluZSBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKHBhcmVudF9jbGFzc19jYXN0LCBuYW1lLCBhcmdzLCBkZWZfcmV0dXJuKVwKLSAgICAgICAgKChwYXJlbnRfY2xhc3NfY2FzdChwYXJlbnRfY2xhc3MpLT5uYW1lICE9IE5VTEwpID8gICAgICAgICAgICAgIFwKLSAgICAgICAgIHBhcmVudF9jbGFzc19jYXN0KHBhcmVudF9jbGFzcyktPm5hbWUgYXJncyA6IGRlZl9yZXR1cm4pCi0KLS8qIERlZmluZSBQVVQgYW5kIEdFVCBmdW5jdGlvbnMgZm9yIHVuYWxpZ25lZCBtZW1vcnkgKi8KLSNkZWZpbmUgX0dTVF9HRVQoX19kYXRhLCBfX2lkeCwgX19zaXplLCBfX3NoaWZ0KSBcCi0gICAgKCgoZ3VpbnQjI19fc2l6ZSkgKCgoY29uc3QgZ3VpbnQ4ICopIChfX2RhdGEpKVtfX2lkeF0pKSA8PCAoX19zaGlmdCkpCi0KLSNkZWZpbmUgX0dTVF9QVVQoX19kYXRhLCBfX2lkeCwgX19zaXplLCBfX3NoaWZ0LCBfX251bSkgXAotICAgICgoKGd1aW50OCAqKSAoX19kYXRhKSlbX19pZHhdID0gKCgoZ3VpbnQjI19fc2l6ZSkgKF9fbnVtKSkgPj4gKF9fc2hpZnQpKSAmIDB4ZmYpCi0KLSNpZm5kZWYgX19HVEtfRE9DX0lHTk9SRV9fCi0jaWYgR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTUwotc3RhdGljIGlubGluZSBndWludDE2IF9fZ3N0X2Zhc3RfcmVhZDE2KGNvbnN0IGd1aW50OCAqdikgewotICByZXR1cm4gKihjb25zdCBndWludDE2KikoY29uc3Qgdm9pZCopKHYpOwotfQotc3RhdGljIGlubGluZSBndWludDMyIF9fZ3N0X2Zhc3RfcmVhZDMyKGNvbnN0IGd1aW50OCAqdikgewotICByZXR1cm4gKihjb25zdCBndWludDMyKikoY29uc3Qgdm9pZCopKHYpOwotfQotc3RhdGljIGlubGluZSBndWludDY0IF9fZ3N0X2Zhc3RfcmVhZDY0KGNvbnN0IGd1aW50OCAqdikgewotICByZXR1cm4gKihjb25zdCBndWludDY0KikoY29uc3Qgdm9pZCopKHYpOwotfQotc3RhdGljIGlubGluZSBndWludDE2IF9fZ3N0X2Zhc3RfcmVhZF9zd2FwMTYoY29uc3QgZ3VpbnQ4ICp2KSB7Ci0gIHJldHVybiBHVUlOVDE2X1NXQVBfTEVfQkUoKihjb25zdCBndWludDE2KikoY29uc3Qgdm9pZCopKHYpKTsKLX0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQzMiBfX2dzdF9mYXN0X3JlYWRfc3dhcDMyKGNvbnN0IGd1aW50OCAqdikgewotICByZXR1cm4gR1VJTlQzMl9TV0FQX0xFX0JFKCooY29uc3QgZ3VpbnQzMiopKGNvbnN0IHZvaWQqKSh2KSk7Ci19Ci1zdGF0aWMgaW5saW5lIGd1aW50NjQgX19nc3RfZmFzdF9yZWFkX3N3YXA2NChjb25zdCBndWludDggKnYpIHsKLSAgcmV0dXJuIEdVSU5UNjRfU1dBUF9MRV9CRSgqKGNvbnN0IGd1aW50NjQqKShjb25zdCB2b2lkKikodikpOwotfQotIyBkZWZpbmUgX0dTVF9GQVNUX1JFQUQocywgZCkgX19nc3RfZmFzdF9yZWFkIyNzKChjb25zdCBndWludDggKikoZCkpCi0jIGRlZmluZSBfR1NUX0ZBU1RfUkVBRF9TV0FQKHMsIGQpIF9fZ3N0X2Zhc3RfcmVhZF9zd2FwIyNzKChjb25zdCBndWludDggKikoZCkpCi0jZW5kaWYKLSNlbmRpZgotCi0KLS8qKgotICogR1NUX1JFQURfVUlOVDY0X0JFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICoKLSAqIFJlYWQgYSA2NCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgotICovCi0KLS8qKgotICogR1NUX1JFQURfVUlOVDY0X0xFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICoKLSAqIFJlYWQgYSA2NCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgotICovCi0jaWYgR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTUwotIyBpZiAoR19CWVRFX09SREVSID09IEdfQklHX0VORElBTikKLSMgIGRlZmluZSBHU1RfUkVBRF9VSU5UNjRfQkUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRCAoNjQsIGRhdGEpCi0jICBkZWZpbmUgR1NUX1JFQURfVUlOVDY0X0xFKGRhdGEpICAgICAgX0dTVF9GQVNUX1JFQURfU1dBUCAoNjQsIGRhdGEpCi0jIGVsc2UKLSMgIGRlZmluZSBHU1RfUkVBRF9VSU5UNjRfQkUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRF9TV0FQICg2NCwgZGF0YSkKLSMgIGRlZmluZSBHU1RfUkVBRF9VSU5UNjRfTEUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRCAoNjQsIGRhdGEpCi0jIGVuZGlmCi0jZWxzZQotI2RlZmluZSBfR1NUX1JFQURfVUlOVDY0X0JFKGRhdGEpCShfR1NUX0dFVCAoZGF0YSwgMCwgNjQsIDU2KSB8IFwKLQkJCQkJIF9HU1RfR0VUIChkYXRhLCAxLCA2NCwgNDgpIHwgXAotCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDIsIDY0LCA0MCkgfCBcCi0JCQkJCSBfR1NUX0dFVCAoZGF0YSwgMywgNjQsIDMyKSB8IFwKLQkJCQkJIF9HU1RfR0VUIChkYXRhLCA0LCA2NCwgMjQpIHwgXAotCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDUsIDY0LCAxNikgfCBcCi0JCQkJCSBfR1NUX0dFVCAoZGF0YSwgNiwgNjQsICA4KSB8IFwKLQkJCQkJIF9HU1RfR0VUIChkYXRhLCA3LCA2NCwgIDApKQotCi0jZGVmaW5lIF9HU1RfUkVBRF9VSU5UNjRfTEUoZGF0YSkJKF9HU1RfR0VUIChkYXRhLCA3LCA2NCwgNTYpIHwgXAotCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDYsIDY0LCA0OCkgfCBcCi0JCQkJCSBfR1NUX0dFVCAoZGF0YSwgNSwgNjQsIDQwKSB8IFwKLQkJCQkJIF9HU1RfR0VUIChkYXRhLCA0LCA2NCwgMzIpIHwgXAotCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDMsIDY0LCAyNCkgfCBcCi0JCQkJCSBfR1NUX0dFVCAoZGF0YSwgMiwgNjQsIDE2KSB8IFwKLQkJCQkJIF9HU1RfR0VUIChkYXRhLCAxLCA2NCwgIDgpIHwgXAotCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDAsIDY0LCAgMCkpCi0KLSNkZWZpbmUgR1NUX1JFQURfVUlOVDY0X0JFKGRhdGEpIF9fZ3N0X3Nsb3dfcmVhZDY0X2JlKChjb25zdCBndWludDggKikoZGF0YSkpCi1zdGF0aWMgaW5saW5lIGd1aW50NjQgX19nc3Rfc2xvd19yZWFkNjRfYmUgKGNvbnN0IGd1aW50OCAqIGRhdGEpIHsKLSAgcmV0dXJuIF9HU1RfUkVBRF9VSU5UNjRfQkUgKGRhdGEpOwotfQotI2RlZmluZSBHU1RfUkVBRF9VSU5UNjRfTEUoZGF0YSkgX19nc3Rfc2xvd19yZWFkNjRfbGUoKGNvbnN0IGd1aW50OCAqKShkYXRhKSkKLXN0YXRpYyBpbmxpbmUgZ3VpbnQ2NCBfX2dzdF9zbG93X3JlYWQ2NF9sZSAoY29uc3QgZ3VpbnQ4ICogZGF0YSkgewotICByZXR1cm4gX0dTVF9SRUFEX1VJTlQ2NF9MRSAoZGF0YSk7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBHU1RfUkVBRF9VSU5UMzJfQkU6Ci0gKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCi0gKgotICogUmVhZCBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLQotLyoqCi0gKiBHU1RfUkVBRF9VSU5UMzJfTEU6Ci0gKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCi0gKgotICogUmVhZCBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLSNpZiBHU1RfSEFWRV9VTkFMSUdORURfQUNDRVNTCi0jIGlmIChHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOKQotIyAgZGVmaW5lIEdTVF9SRUFEX1VJTlQzMl9CRShkYXRhKSAgICAgIF9HU1RfRkFTVF9SRUFEICgzMiwgZGF0YSkKLSMgIGRlZmluZSBHU1RfUkVBRF9VSU5UMzJfTEUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRF9TV0FQICgzMiwgZGF0YSkKLSMgZWxzZQotIyAgZGVmaW5lIEdTVF9SRUFEX1VJTlQzMl9CRShkYXRhKSAgICAgIF9HU1RfRkFTVF9SRUFEX1NXQVAgKDMyLCBkYXRhKQotIyAgZGVmaW5lIEdTVF9SRUFEX1VJTlQzMl9MRShkYXRhKSAgICAgIF9HU1RfRkFTVF9SRUFEICgzMiwgZGF0YSkKLSMgZW5kaWYKLSNlbHNlCi0jZGVmaW5lIF9HU1RfUkVBRF9VSU5UMzJfQkUoZGF0YSkJKF9HU1RfR0VUIChkYXRhLCAwLCAzMiwgMjQpIHwgXAotCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDEsIDMyLCAxNikgfCBcCi0JCQkJCSBfR1NUX0dFVCAoZGF0YSwgMiwgMzIsICA4KSB8IFwKLQkJCQkJIF9HU1RfR0VUIChkYXRhLCAzLCAzMiwgIDApKQotCi0jZGVmaW5lIF9HU1RfUkVBRF9VSU5UMzJfTEUoZGF0YSkJKF9HU1RfR0VUIChkYXRhLCAzLCAzMiwgMjQpIHwgXAotCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDIsIDMyLCAxNikgfCBcCi0JCQkJCSBfR1NUX0dFVCAoZGF0YSwgMSwgMzIsICA4KSB8IFwKLQkJCQkJIF9HU1RfR0VUIChkYXRhLCAwLCAzMiwgIDApKQotCi0jZGVmaW5lIEdTVF9SRUFEX1VJTlQzMl9CRShkYXRhKSBfX2dzdF9zbG93X3JlYWQzMl9iZSgoY29uc3QgZ3VpbnQ4ICopKGRhdGEpKQotc3RhdGljIGlubGluZSBndWludDMyIF9fZ3N0X3Nsb3dfcmVhZDMyX2JlIChjb25zdCBndWludDggKiBkYXRhKSB7Ci0gIHJldHVybiBfR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLX0KLSNkZWZpbmUgR1NUX1JFQURfVUlOVDMyX0xFKGRhdGEpIF9fZ3N0X3Nsb3dfcmVhZDMyX2xlKChjb25zdCBndWludDggKikoZGF0YSkpCi1zdGF0aWMgaW5saW5lIGd1aW50MzIgX19nc3Rfc2xvd19yZWFkMzJfbGUgKGNvbnN0IGd1aW50OCAqIGRhdGEpIHsKLSAgcmV0dXJuIF9HU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotfQotI2VuZGlmCi0KLS8qKgotICogR1NUX1JFQURfVUlOVDI0X0JFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICoKLSAqIFJlYWQgYSAyNCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgotICovCi0jZGVmaW5lIF9HU1RfUkVBRF9VSU5UMjRfQkUoZGF0YSkgICAgICAgKF9HU1RfR0VUIChkYXRhLCAwLCAzMiwgMTYpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX0dFVCAoZGF0YSwgMSwgMzIsICA4KSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dTVF9HRVQgKGRhdGEsIDIsIDMyLCAgMCkpCi0KLSNkZWZpbmUgR1NUX1JFQURfVUlOVDI0X0JFKGRhdGEpIF9fZ3N0X3Nsb3dfcmVhZDI0X2JlKChjb25zdCBndWludDggKikoZGF0YSkpCi1zdGF0aWMgaW5saW5lIGd1aW50MzIgX19nc3Rfc2xvd19yZWFkMjRfYmUgKGNvbnN0IGd1aW50OCAqIGRhdGEpIHsKLSAgcmV0dXJuIF9HU1RfUkVBRF9VSU5UMjRfQkUgKGRhdGEpOwotfQotCi0vKioKLSAqIEdTVF9SRUFEX1VJTlQyNF9MRToKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqCi0gKiBSZWFkIGEgMjQgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KLSAqLwotI2RlZmluZSBfR1NUX1JFQURfVUlOVDI0X0xFKGRhdGEpICAgICAgIChfR1NUX0dFVCAoZGF0YSwgMiwgMzIsIDE2KSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dTVF9HRVQgKGRhdGEsIDEsIDMyLCAgOCkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HU1RfR0VUIChkYXRhLCAwLCAzMiwgIDApKQotCi0jZGVmaW5lIEdTVF9SRUFEX1VJTlQyNF9MRShkYXRhKSBfX2dzdF9zbG93X3JlYWQyNF9sZSgoY29uc3QgZ3VpbnQ4ICopKGRhdGEpKQotc3RhdGljIGlubGluZSBndWludDMyIF9fZ3N0X3Nsb3dfcmVhZDI0X2xlIChjb25zdCBndWludDggKiBkYXRhKSB7Ci0gIHJldHVybiBfR1NUX1JFQURfVUlOVDI0X0xFIChkYXRhKTsKLX0KLQotLyoqCi0gKiBHU1RfUkVBRF9VSU5UMTZfQkU6Ci0gKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCi0gKgotICogUmVhZCBhIDE2IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLS8qKgotICogR1NUX1JFQURfVUlOVDE2X0xFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICoKLSAqIFJlYWQgYSAxNiBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLgotICovCi0jaWYgR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTUwotIyBpZiAoR19CWVRFX09SREVSID09IEdfQklHX0VORElBTikKLSMgIGRlZmluZSBHU1RfUkVBRF9VSU5UMTZfQkUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRCAoMTYsIGRhdGEpCi0jICBkZWZpbmUgR1NUX1JFQURfVUlOVDE2X0xFKGRhdGEpICAgICAgX0dTVF9GQVNUX1JFQURfU1dBUCAoMTYsIGRhdGEpCi0jIGVsc2UKLSMgIGRlZmluZSBHU1RfUkVBRF9VSU5UMTZfQkUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRF9TV0FQICgxNiwgZGF0YSkKLSMgIGRlZmluZSBHU1RfUkVBRF9VSU5UMTZfTEUoZGF0YSkgICAgICBfR1NUX0ZBU1RfUkVBRCAoMTYsIGRhdGEpCi0jIGVuZGlmCi0jZWxzZQotI2RlZmluZSBfR1NUX1JFQURfVUlOVDE2X0JFKGRhdGEpCShfR1NUX0dFVCAoZGF0YSwgMCwgMTYsICA4KSB8IFwKLQkJCQkJIF9HU1RfR0VUIChkYXRhLCAxLCAxNiwgIDApKQotCi0jZGVmaW5lIF9HU1RfUkVBRF9VSU5UMTZfTEUoZGF0YSkJKF9HU1RfR0VUIChkYXRhLCAxLCAxNiwgIDgpIHwgXAotCQkJCQkgX0dTVF9HRVQgKGRhdGEsIDAsIDE2LCAgMCkpCi0KLSNkZWZpbmUgR1NUX1JFQURfVUlOVDE2X0JFKGRhdGEpIF9fZ3N0X3Nsb3dfcmVhZDE2X2JlKChjb25zdCBndWludDggKikoZGF0YSkpCi1zdGF0aWMgaW5saW5lIGd1aW50MTYgX19nc3Rfc2xvd19yZWFkMTZfYmUgKGNvbnN0IGd1aW50OCAqIGRhdGEpIHsKLSAgcmV0dXJuIF9HU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEpOwotfQotI2RlZmluZSBHU1RfUkVBRF9VSU5UMTZfTEUoZGF0YSkgX19nc3Rfc2xvd19yZWFkMTZfbGUoKGNvbnN0IGd1aW50OCAqKShkYXRhKSkKLXN0YXRpYyBpbmxpbmUgZ3VpbnQxNiBfX2dzdF9zbG93X3JlYWQxNl9sZSAoY29uc3QgZ3VpbnQ4ICogZGF0YSkgewotICByZXR1cm4gX0dTVF9SRUFEX1VJTlQxNl9MRSAoZGF0YSk7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBHU1RfUkVBRF9VSU5UODoKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqCi0gKiBSZWFkIGFuIDggYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KLSAqLwotI2RlZmluZSBHU1RfUkVBRF9VSU5UOChkYXRhKSAgICAgICAgICAgIChfR1NUX0dFVCAoZGF0YSwgMCwgIDgsICAwKSkKLQotLyoqCi0gKiBHU1RfV1JJVEVfVUlOVDY0X0JFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICogQG51bTogdmFsdWUgdG8gc3RvcmUKLSAqCi0gKiBTdG9yZSBhIDY0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLSNkZWZpbmUgR1NUX1dSSVRFX1VJTlQ2NF9CRShkYXRhLCBudW0pICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIF9fcHV0X2RhdGEgPSBkYXRhOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMCwgNjQsIDU2LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMSwgNjQsIDQ4LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMiwgNjQsIDQwLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMywgNjQsIDMyLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgNCwgNjQsIDI0LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgNSwgNjQsIDE2LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgNiwgNjQsICA4LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgNywgNjQsICAwLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKLQotLyoqCi0gKiBHU1RfV1JJVEVfVUlOVDY0X0xFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICogQG51bTogdmFsdWUgdG8gc3RvcmUKLSAqCi0gKiBTdG9yZSBhIDY0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLSNkZWZpbmUgR1NUX1dSSVRFX1VJTlQ2NF9MRShkYXRhLCBudW0pICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIF9fcHV0X2RhdGEgPSBkYXRhOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMCwgNjQsICAwLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMSwgNjQsICA4LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMiwgNjQsIDE2LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMywgNjQsIDI0LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgNCwgNjQsIDMyLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgNSwgNjQsIDQwLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgNiwgNjQsIDQ4LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgNywgNjQsIDU2LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKLQotLyoqCi0gKiBHU1RfV1JJVEVfVUlOVDMyX0JFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICogQG51bTogdmFsdWUgdG8gc3RvcmUKLSAqCi0gKiBTdG9yZSBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLSNkZWZpbmUgR1NUX1dSSVRFX1VJTlQzMl9CRShkYXRhLCBudW0pICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIF9fcHV0X2RhdGEgPSBkYXRhOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMCwgMzIsIDI0LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMSwgMzIsIDE2LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMiwgMzIsICA4LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMywgMzIsICAwLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKLQotLyoqCi0gKiBHU1RfV1JJVEVfVUlOVDMyX0xFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICogQG51bTogdmFsdWUgdG8gc3RvcmUKLSAqCi0gKiBTdG9yZSBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLSNkZWZpbmUgR1NUX1dSSVRFX1VJTlQzMl9MRShkYXRhLCBudW0pICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIF9fcHV0X2RhdGEgPSBkYXRhOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMCwgMzIsICAwLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMSwgMzIsICA4LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMiwgMzIsIDE2LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMywgMzIsIDI0LCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKLQotLyoqCi0gKiBHU1RfV1JJVEVfVUlOVDI0X0JFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICogQG51bTogdmFsdWUgdG8gc3RvcmUKLSAqCi0gKiBTdG9yZSBhIDI0IGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLSNkZWZpbmUgR1NUX1dSSVRFX1VJTlQyNF9CRShkYXRhLCBudW0pICBkbyB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIF9fcHV0X2RhdGEgPSBkYXRhOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoX19wdXRfZGF0YSwgMCwgMzIsICAxNiwgbnVtKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dTVF9QVVQgKF9fcHV0X2RhdGEsIDEsIDMyLCAgOCwgbnVtKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dTVF9QVVQgKF9fcHV0X2RhdGEsIDIsIDMyLCAgMCwgbnVtKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApCi0KLS8qKgotICogR1NUX1dSSVRFX1VJTlQyNF9MRToKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqIEBudW06IHZhbHVlIHRvIHN0b3JlCi0gKgotICogU3RvcmUgYSAyNCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgotICovCi0jZGVmaW5lIEdTVF9XUklURV9VSU5UMjRfTEUoZGF0YSwgbnVtKSAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBfX3B1dF9kYXRhID0gZGF0YTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dTVF9QVVQgKF9fcHV0X2RhdGEsIDAsIDMyLCAgMCwgbnVtKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dTVF9QVVQgKF9fcHV0X2RhdGEsIDEsIDMyLCAgOCwgbnVtKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dTVF9QVVQgKF9fcHV0X2RhdGEsIDIsIDMyLCAgMTYsIG51bSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQotCi0vKioKLSAqIEdTVF9XUklURV9VSU5UMTZfQkU6Ci0gKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCi0gKiBAbnVtOiB2YWx1ZSB0byBzdG9yZQotICoKLSAqIFN0b3JlIGEgMTYgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KLSAqLwotI2RlZmluZSBHU1RfV1JJVEVfVUlOVDE2X0JFKGRhdGEsIG51bSkgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgX19wdXRfZGF0YSA9IGRhdGE7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HU1RfUFVUIChfX3B1dF9kYXRhLCAwLCAxNiwgIDgsIG51bSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HU1RfUFVUIChfX3B1dF9kYXRhLCAxLCAxNiwgIDAsIG51bSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQotCi0vKioKLSAqIEdTVF9XUklURV9VSU5UMTZfTEU6Ci0gKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCi0gKiBAbnVtOiB2YWx1ZSB0byBzdG9yZQotICoKLSAqIFN0b3JlIGEgMTYgYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KLSAqLwotI2RlZmluZSBHU1RfV1JJVEVfVUlOVDE2X0xFKGRhdGEsIG51bSkgIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgX19wdXRfZGF0YSA9IGRhdGE7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HU1RfUFVUIChfX3B1dF9kYXRhLCAwLCAxNiwgIDAsIG51bSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HU1RfUFVUIChfX3B1dF9kYXRhLCAxLCAxNiwgIDgsIG51bSk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQotCi0vKioKLSAqIEdTVF9XUklURV9VSU5UODoKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqIEBudW06IHZhbHVlIHRvIHN0b3JlCi0gKgotICogU3RvcmUgYW4gOCBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgotICovCi0jZGVmaW5lIEdTVF9XUklURV9VSU5UOChkYXRhLCBudW0pICAgICAgZG8geyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR1NUX1BVVCAoZGF0YSwgMCwgIDgsICAwLCBudW0pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKLQotLyogRmxvYXQgZW5kaWFubmVzcyBjb252ZXJzaW9uIG1hY3JvcyAqLwotCi0vKiBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSBkZXBlbmQgb24gYSBHTGliIHZlcnNpb24gd2l0aCB0aGlzICovCi0jaWZuZGVmIEdGTE9BVF9GUk9NX0xFCi0vKioKLSAqIEdGTE9BVF9TV0FQX0xFX0JFOgotICogQGluOiBpbnB1dCB2YWx1ZQotICoKLSAqIFN3YXAgYnl0ZSBvcmRlciBvZiBhIDMyLWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSAoZmxvYXQpLgotICoKLSAqIFJldHVybnM6IEBpbiBieXRlLXN3YXBwZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgZ2Zsb2F0Ci1HRkxPQVRfU1dBUF9MRV9CRShnZmxvYXQgaW4pCi17Ci0gIHVuaW9uCi0gIHsKLSAgICBndWludDMyIGk7Ci0gICAgZ2Zsb2F0IGY7Ci0gIH0gdTsKLQotICB1LmYgPSBpbjsKLSAgdS5pID0gR1VJTlQzMl9TV0FQX0xFX0JFICh1LmkpOwotICByZXR1cm4gdS5mOwotfQotCi0vKioKLSAqIEdET1VCTEVfU1dBUF9MRV9CRToKLSAqIEBpbjogaW5wdXQgdmFsdWUKLSAqCi0gKiBTd2FwIGJ5dGUgb3JkZXIgb2YgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkuCi0gKgotICogUmV0dXJuczogQGluIGJ5dGUtc3dhcHBlZC4KLSAqLwotc3RhdGljIGlubGluZSBnZG91YmxlCi1HRE9VQkxFX1NXQVBfTEVfQkUoZ2RvdWJsZSBpbikKLXsKLSAgdW5pb24KLSAgewotICAgIGd1aW50NjQgaTsKLSAgICBnZG91YmxlIGQ7Ci0gIH0gdTsKLQotICB1LmQgPSBpbjsKLSAgdS5pID0gR1VJTlQ2NF9TV0FQX0xFX0JFICh1LmkpOwotICByZXR1cm4gdS5kOwotfQotCi0vKioKLSAqIEdET1VCTEVfVE9fTEU6Ci0gKiBAdmFsOiB2YWx1ZQotICoKLSAqIENvbnZlcnQgNjQtYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChkb3VibGUpIGZyb20gbmF0aXZlIGJ5dGUgb3JkZXIgaW50bwotICogbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLgotICovCi0vKioKLSAqIEdET1VCTEVfVE9fQkU6Ci0gKiBAdmFsOiB2YWx1ZQotICoKLSAqIENvbnZlcnQgNjQtYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChkb3VibGUpIGZyb20gbmF0aXZlIGJ5dGUgb3JkZXIgaW50bwotICogYmlnIGVuZGlhbiBieXRlIG9yZGVyLgotICovCi0vKioKLSAqIEdET1VCTEVfRlJPTV9MRToKLSAqIEB2YWw6IHZhbHVlCi0gKgotICogQ29udmVydCA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGRvdWJsZSkgZnJvbSBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIKLSAqIGludG8gbmF0aXZlIGJ5dGUgb3JkZXIuCi0gKi8KLS8qKgotICogR0RPVUJMRV9GUk9NX0JFOgotICogQHZhbDogdmFsdWUKLSAqCi0gKiBDb252ZXJ0IDY0LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZSAoZG91YmxlKSBmcm9tIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcgotICogaW50byBuYXRpdmUgYnl0ZSBvcmRlci4KLSAqLwotCi0vKioKLSAqIEdGTE9BVF9UT19MRToKLSAqIEB2YWw6IHZhbHVlCi0gKgotICogQ29udmVydCAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgKGZsb2F0KSBmcm9tIG5hdGl2ZSBieXRlIG9yZGVyIGludG8KLSAqIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci4KLSAqLwotLyoqCi0gKiBHRkxPQVRfVE9fQkU6Ci0gKiBAdmFsOiB2YWx1ZQotICoKLSAqIENvbnZlcnQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChmbG9hdCkgZnJvbSBuYXRpdmUgYnl0ZSBvcmRlciBpbnRvCi0gKiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuCi0gKi8KLS8qKgotICogR0ZMT0FUX0ZST01fTEU6Ci0gKiBAdmFsOiB2YWx1ZQotICoKLSAqIENvbnZlcnQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChmbG9hdCkgZnJvbSBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIKLSAqIGludG8gbmF0aXZlIGJ5dGUgb3JkZXIuCi0gKi8KLS8qKgotICogR0ZMT0FUX0ZST01fQkU6Ci0gKiBAdmFsOiB2YWx1ZQotICoKLSAqIENvbnZlcnQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlIChmbG9hdCkgZnJvbSBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIKLSAqIGludG8gbmF0aXZlIGJ5dGUgb3JkZXIuCi0gKi8KLQotI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSNkZWZpbmUgR0ZMT0FUX1RPX0xFKHZhbCkgICAgKChnZmxvYXQpICh2YWwpKQotI2RlZmluZSBHRkxPQVRfVE9fQkUodmFsKSAgICAoR0ZMT0FUX1NXQVBfTEVfQkUgKHZhbCkpCi0jZGVmaW5lIEdET1VCTEVfVE9fTEUodmFsKSAgICgoZ2RvdWJsZSkgKHZhbCkpCi0jZGVmaW5lIEdET1VCTEVfVE9fQkUodmFsKSAgIChHRE9VQkxFX1NXQVBfTEVfQkUgKHZhbCkpCi0KLSNlbGlmIEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4KLSNkZWZpbmUgR0ZMT0FUX1RPX0xFKHZhbCkgICAgKEdGTE9BVF9TV0FQX0xFX0JFICh2YWwpKQotI2RlZmluZSBHRkxPQVRfVE9fQkUodmFsKSAgICAoKGdmbG9hdCkgKHZhbCkpCi0jZGVmaW5lIEdET1VCTEVfVE9fTEUodmFsKSAgIChHRE9VQkxFX1NXQVBfTEVfQkUgKHZhbCkpCi0jZGVmaW5lIEdET1VCTEVfVE9fQkUodmFsKSAgICgoZ2RvdWJsZSkgKHZhbCkpCi0KLSNlbHNlIC8qICFHX0xJVFRMRV9FTkRJQU4gJiYgIUdfQklHX0VORElBTiAqLwotI2Vycm9yIHVua25vd24gRU5ESUFOIHR5cGUKLSNlbmRpZiAvKiAhR19MSVRUTEVfRU5ESUFOICYmICFHX0JJR19FTkRJQU4gKi8KLQotI2RlZmluZSBHRkxPQVRfRlJPTV9MRSh2YWwpICAoR0ZMT0FUX1RPX0xFICh2YWwpKQotI2RlZmluZSBHRkxPQVRfRlJPTV9CRSh2YWwpICAoR0ZMT0FUX1RPX0JFICh2YWwpKQotI2RlZmluZSBHRE9VQkxFX0ZST01fTEUodmFsKSAoR0RPVUJMRV9UT19MRSAodmFsKSkKLSNkZWZpbmUgR0RPVUJMRV9GUk9NX0JFKHZhbCkgKEdET1VCTEVfVE9fQkUgKHZhbCkpCi0KLSNlbmRpZiAvKiAhZGVmaW5lZChHRkxPQVRfRlJPTV9MRSkgKi8KLQotLyoqCi0gKiBHU1RfUkVBRF9GTE9BVF9MRToKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqCi0gKiBSZWFkIGEgMzIgYml0IGZsb2F0IHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCi0gKgotICogUmV0dXJuczogVGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQgZnJvbSBAZGF0YQotICovCi1zdGF0aWMgaW5saW5lIGdmbG9hdAotR1NUX1JFQURfRkxPQVRfTEUoY29uc3QgZ3VpbnQ4ICpkYXRhKQotewotICB1bmlvbgotICB7Ci0gICAgZ3VpbnQzMiBpOwotICAgIGdmbG9hdCBmOwotICB9IHU7Ci0KLSAgdS5pID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLSAgcmV0dXJuIHUuZjsKLX0KLQotLyoqCi0gKiBHU1RfUkVBRF9GTE9BVF9CRToKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqCi0gKiBSZWFkIGEgMzIgYml0IGZsb2F0IHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCi0gKgotICogUmV0dXJuczogVGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQgZnJvbSBAZGF0YQotICovCi1zdGF0aWMgaW5saW5lIGdmbG9hdAotR1NUX1JFQURfRkxPQVRfQkUoY29uc3QgZ3VpbnQ4ICpkYXRhKQotewotICB1bmlvbgotICB7Ci0gICAgZ3VpbnQzMiBpOwotICAgIGdmbG9hdCBmOwotICB9IHU7Ci0KLSAgdS5pID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgcmV0dXJuIHUuZjsKLX0KLQotLyoqCi0gKiBHU1RfUkVBRF9ET1VCTEVfTEU6Ci0gKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCi0gKgotICogUmVhZCBhIDY0IGJpdCBkb3VibGUgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlci4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkIGZyb20gQGRhdGEKLSAqLwotc3RhdGljIGlubGluZSBnZG91YmxlCi1HU1RfUkVBRF9ET1VCTEVfTEUoY29uc3QgZ3VpbnQ4ICpkYXRhKQotewotICB1bmlvbgotICB7Ci0gICAgZ3VpbnQ2NCBpOwotICAgIGdkb3VibGUgZDsKLSAgfSB1OwotCi0gIHUuaSA9IEdTVF9SRUFEX1VJTlQ2NF9MRSAoZGF0YSk7Ci0gIHJldHVybiB1LmQ7Ci19Ci0KLS8qKgotICogR1NUX1JFQURfRE9VQkxFX0JFOgotICogQGRhdGE6IG1lbW9yeSBsb2NhdGlvbgotICoKLSAqIFJlYWQgYSA2NCBiaXQgZG91YmxlIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGZyb20gdGhlIG1lbW9yeSBidWZmZXIuCi0gKgotICogUmV0dXJuczogVGhlIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZCBmcm9tIEBkYXRhCi0gKi8KLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotR1NUX1JFQURfRE9VQkxFX0JFKGNvbnN0IGd1aW50OCAqZGF0YSkKLXsKLSAgdW5pb24KLSAgewotICAgIGd1aW50NjQgaTsKLSAgICBnZG91YmxlIGQ7Ci0gIH0gdTsKLQotICB1LmkgPSBHU1RfUkVBRF9VSU5UNjRfQkUgKGRhdGEpOwotICByZXR1cm4gdS5kOwotfQotCi0vKioKLSAqIEdTVF9XUklURV9GTE9BVF9MRToKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqIEBudW06IHZhbHVlIHRvIHN0b3JlCi0gKgotICogU3RvcmUgYSAzMiBiaXQgZmxvYXQgdmFsdWUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfV1JJVEVfRkxPQVRfTEUoZ3VpbnQ4ICpkYXRhLCBnZmxvYXQgbnVtKQotewotICB1bmlvbgotICB7Ci0gICAgZ3VpbnQzMiBpOwotICAgIGdmbG9hdCBmOwotICB9IHU7Ci0KLSAgdS5mID0gbnVtOwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChkYXRhLCB1LmkpOwotfQotCi0vKioKLSAqIEdTVF9XUklURV9GTE9BVF9CRToKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqIEBudW06IHZhbHVlIHRvIHN0b3JlCi0gKgotICogU3RvcmUgYSAzMiBiaXQgZmxvYXQgdmFsdWUgaW4gYmlnIGVuZGlhbiBmb3JtYXQgaW50byB0aGUgbWVtb3J5IGJ1ZmZlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1HU1RfV1JJVEVfRkxPQVRfQkUoZ3VpbnQ4ICpkYXRhLCBnZmxvYXQgbnVtKQotewotICB1bmlvbgotICB7Ci0gICAgZ3VpbnQzMiBpOwotICAgIGdmbG9hdCBmOwotICB9IHU7Ci0KLSAgdS5mID0gbnVtOwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhLCB1LmkpOwotfQotCi0vKioKLSAqIEdTVF9XUklURV9ET1VCTEVfTEU6Ci0gKiBAZGF0YTogbWVtb3J5IGxvY2F0aW9uCi0gKiBAbnVtOiB2YWx1ZSB0byBzdG9yZQotICoKLSAqIFN0b3JlIGEgNjQgYml0IGRvdWJsZSB2YWx1ZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBpbnRvIHRoZSBtZW1vcnkgYnVmZmVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLUdTVF9XUklURV9ET1VCTEVfTEUoZ3VpbnQ4ICpkYXRhLCBnZG91YmxlIG51bSkKLXsKLSAgdW5pb24KLSAgewotICAgIGd1aW50NjQgaTsKLSAgICBnZG91YmxlIGQ7Ci0gIH0gdTsKLQotICB1LmQgPSBudW07Ci0gIEdTVF9XUklURV9VSU5UNjRfTEUgKGRhdGEsIHUuaSk7Ci19Ci0KLS8qKgotICogR1NUX1dSSVRFX0RPVUJMRV9CRToKLSAqIEBkYXRhOiBtZW1vcnkgbG9jYXRpb24KLSAqIEBudW06IHZhbHVlIHRvIHN0b3JlCi0gKgotICogU3RvcmUgYSA2NCBiaXQgZG91YmxlIHZhbHVlIGluIGJpZyBlbmRpYW4gZm9ybWF0IGludG8gdGhlIG1lbW9yeSBidWZmZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotR1NUX1dSSVRFX0RPVUJMRV9CRShndWludDggKmRhdGEsIGdkb3VibGUgbnVtKQotewotICB1bmlvbgotICB7Ci0gICAgZ3VpbnQ2NCBpOwotICAgIGdkb3VibGUgZDsKLSAgfSB1OwotCi0gIHUuZCA9IG51bTsKLSAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoZGF0YSwgdS5pKTsKLX0KLQotLyogTWlzY2VsbGFuZW91cyB1dGlsaXR5IG1hY3JvcyAqLwotCi0vKioKLSAqIEdTVF9ST1VORF9VUF8yOgotICogQG51bTogaW50ZWdlciB2YWx1ZSB0byByb3VuZCB1cAotICoKLSAqIFJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDIuCi0gKi8KLSNkZWZpbmUgR1NUX1JPVU5EX1VQXzIobnVtKSAgKCgobnVtKSsxKSZ+MSkKLS8qKgotICogR1NUX1JPVU5EX1VQXzQ6Ci0gKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwCi0gKgotICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNC4KLSAqLwotI2RlZmluZSBHU1RfUk9VTkRfVVBfNChudW0pICAoKChudW0pKzMpJn4zKQotLyoqCi0gKiBHU1RfUk9VTkRfVVBfODoKLSAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgdXAKLSAqCi0gKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA4LgotICovCi0jZGVmaW5lIEdTVF9ST1VORF9VUF84KG51bSkgICgoKG51bSkrNykmfjcpCi0vKioKLSAqIEdTVF9ST1VORF9VUF8xNjoKLSAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgdXAKLSAqCi0gKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAxNi4KLSAqLwotI2RlZmluZSBHU1RfUk9VTkRfVVBfMTYobnVtKSAoKChudW0pKzE1KSZ+MTUpCi0vKioKLSAqIEdTVF9ST1VORF9VUF8zMjoKLSAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgdXAKLSAqCi0gKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAzMi4KLSAqLwotI2RlZmluZSBHU1RfUk9VTkRfVVBfMzIobnVtKSAoKChudW0pKzMxKSZ+MzEpCi0vKioKLSAqIEdTVF9ST1VORF9VUF82NDoKLSAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgdXAKLSAqCi0gKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA2NC4KLSAqLwotI2RlZmluZSBHU1RfUk9VTkRfVVBfNjQobnVtKSAoKChudW0pKzYzKSZ+NjMpCi0vKioKLSAqIEdTVF9ST1VORF9VUF8xMjg6Ci0gKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIHVwCi0gKgotICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMTI4LgotICogU2luY2U6IDEuNAotICovCi0jZGVmaW5lIEdTVF9ST1VORF9VUF8xMjgobnVtKSAoKChudW0pKzEyNykmfjEyNykKLS8qKgotICogR1NUX1JPVU5EX1VQX046Ci0gKiBAbnVtOiBpbnRlZ3JlciB2YWx1ZSB0byByb3VuZCB1cAotICogQGFsaWduOiBhIHBvd2VyIG9mIHR3byB0byByb3VuZCB1cCB0bwotICoKLSAqIFJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIEBhbGlnbi4gQGFsaWduIE1VU1QgYmUgYQotICogcG93ZXIgb2YgdHdvLgotICovCi0jZGVmaW5lIEdTVF9ST1VORF9VUF9OKG51bSxhbGlnbikgKCgoKG51bSkgKyAoKGFsaWduKSAtIDEpKSAmIH4oKGFsaWduKSAtIDEpKSkKLQotCi0vKioKLSAqIEdTVF9ST1VORF9ET1dOXzI6Ci0gKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIGRvd24KLSAqCi0gKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSBkb3duIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDIuCi0gKi8KLSNkZWZpbmUgR1NUX1JPVU5EX0RPV05fMihudW0pICAoKG51bSkmKH4xKSkKLS8qKgotICogR1NUX1JPVU5EX0RPV05fNDoKLSAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bgotICoKLSAqIFJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNC4KLSAqLwotI2RlZmluZSBHU1RfUk9VTkRfRE9XTl80KG51bSkgICgobnVtKSYofjMpKQotLyoqCi0gKiBHU1RfUk9VTkRfRE9XTl84OgotICogQG51bTogaW50ZWdlciB2YWx1ZSB0byByb3VuZCBkb3duCi0gKgotICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiA4LgotICovCi0jZGVmaW5lIEdTVF9ST1VORF9ET1dOXzgobnVtKSAgKChudW0pJih+NykpCi0vKioKLSAqIEdTVF9ST1VORF9ET1dOXzE2OgotICogQG51bTogaW50ZWdlciB2YWx1ZSB0byByb3VuZCBkb3duCi0gKgotICogUm91bmRzIGFuIGludGVnZXIgdmFsdWUgZG93biB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiAxNi4KLSAqLwotI2RlZmluZSBHU1RfUk9VTkRfRE9XTl8xNihudW0pICgobnVtKSYofjE1KSkKLS8qKgotICogR1NUX1JPVU5EX0RPV05fMzI6Ci0gKiBAbnVtOiBpbnRlZ2VyIHZhbHVlIHRvIHJvdW5kIGRvd24KLSAqCi0gKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSBkb3duIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIDMyLgotICovCi0jZGVmaW5lIEdTVF9ST1VORF9ET1dOXzMyKG51bSkgKChudW0pJih+MzEpKQotLyoqCi0gKiBHU1RfUk9VTkRfRE9XTl82NDoKLSAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bgotICoKLSAqIFJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgNjQuCi0gKi8KLSNkZWZpbmUgR1NUX1JPVU5EX0RPV05fNjQobnVtKSAoKG51bSkmKH42MykpCi0vKioKLSAqIEdTVF9ST1VORF9ET1dOXzEyODoKLSAqIEBudW06IGludGVnZXIgdmFsdWUgdG8gcm91bmQgZG93bgotICoKLSAqIFJvdW5kcyBhbiBpbnRlZ2VyIHZhbHVlIGRvd24gdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgMTI4LgotICogU2luY2U6IDEuNAotICovCi0jZGVmaW5lIEdTVF9ST1VORF9ET1dOXzEyOChudW0pICgobnVtKSYofjEyNykpCi0vKioKLSAqIEdTVF9ST1VORF9ET1dOX046Ci0gKiBAbnVtOiBpbnRlZ3JlciB2YWx1ZSB0byByb3VuZCBkb3duCi0gKiBAYWxpZ246IGEgcG93ZXIgb2YgdHdvIHRvIHJvdW5kIGRvd24gdG8KLSAqCi0gKiBSb3VuZHMgYW4gaW50ZWdlciB2YWx1ZSBkb3duIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIEBhbGlnbi4gQGFsaWduIE1VU1QgYmUgYQotICogcG93ZXIgb2YgdHdvLgotICovCi0jZGVmaW5lIEdTVF9ST1VORF9ET1dOX04obnVtLGFsaWduKSAoKChudW0pICYgfigoYWxpZ24pIC0gMSkpKQotCi0KLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAgICAgICAgKEdzdE9iamVjdCAgICAqIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdFcnJvciAqIGVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICogZGVidWcpOwotCi0vKiBlbGVtZW50IGZ1bmN0aW9ucyAqLwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfY3JlYXRlX2FsbF9wYWRzICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCk7Ci1Hc3RQYWQqICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWQgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RQYWQgKnBhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmNhcHMpOwotCi1Hc3RQYWRUZW1wbGF0ZSogICAgICAgICBnc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfdGVtcGxhdGUgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZFRlbXBsYXRlICpjb21wYXR0ZW1wbCk7Ci0KLWNvbnN0IGdjaGFyKiAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lICAgICAgKEdzdFN0YXRlIHN0YXRlKTsKLWNvbnN0IGdjaGFyICogICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2NoYW5nZV9yZXR1cm5fZ2V0X25hbWUgKEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldCk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2xpbmsgICAgICAgICAgICAgICAgKEdzdEVsZW1lbnQgKnNyYywgR3N0RWxlbWVudCAqZGVzdCk7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9saW5rX21hbnkgICAgICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50XzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICplbGVtZW50XzIsIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQgICAgICAgKEdzdEVsZW1lbnQgKiBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICogZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmZpbHRlcik7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF91bmxpbmsgICAgICAgICAgICAgIChHc3RFbGVtZW50ICpzcmMsIEdzdEVsZW1lbnQgKmRlc3QpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rX21hbnkgICAgICAgICAoR3N0RWxlbWVudCAqZWxlbWVudF8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RWxlbWVudCAqZWxlbWVudF8yLCAuLi4pIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci0KLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkcyAgICAgICAgICAgKEdzdEVsZW1lbnQgKnNyYywgY29uc3QgZ2NoYXIgKnNyY3BhZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICpkZXN0LCBjb25zdCBnY2hhciAqZGVzdHBhZG5hbWUpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgICAgICAoR3N0RWxlbWVudCAqc3JjLCBjb25zdCBnY2hhciAqc3JjcGFkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgKmRlc3QsIGNvbnN0IGdjaGFyICpkZXN0cGFkbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhZExpbmtDaGVjayBmbGFncyk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF91bmxpbmtfcGFkcyAgICAgICAgIChHc3RFbGVtZW50ICpzcmMsIGNvbnN0IGdjaGFyICpzcmNwYWRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RWxlbWVudCAqZGVzdCwgY29uc3QgZ2NoYXIgKmRlc3RwYWRuYW1lKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2ZpbHRlcmVkICAoR3N0RWxlbWVudCAqIHNyYywgY29uc3QgZ2NoYXIgKiBzcmNwYWRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RWxlbWVudCAqIGRlc3QsIGNvbnN0IGdjaGFyICogZGVzdHBhZG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpmaWx0ZXIpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zZWVrX3NpbXBsZSAgICAgICAgIChHc3RFbGVtZW50ICAgKmVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgICAgIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZWtGbGFncyAgc2Vla19mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAgc2Vla19wb3MpOwotCi0vKiB1dGlsIGVsZW1lbnRmYWN0b3J5IGZ1bmN0aW9ucyAqLwotZ2Jvb2xlYW4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbGxfY2FwcyAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnksIGNvbnN0IEdzdENhcHMgKmNhcHMpOwotZ2Jvb2xlYW4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FsbF9jYXBzICAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnksIGNvbnN0IEdzdENhcHMgKmNhcHMpOwotZ2Jvb2xlYW4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbnlfY2FwcyAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnksIGNvbnN0IEdzdENhcHMgKmNhcHMpOwotZ2Jvb2xlYW4gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzICAoR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnksIGNvbnN0IEdzdENhcHMgKmNhcHMpOwotCi0vKiB1dGlsIHF1ZXJ5IGZ1bmN0aW9ucyAqLwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICpjdXIpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gICAgICAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICpkdXJhdGlvbik7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfZWxlbWVudF9xdWVyeV9jb252ZXJ0ICAgICAgIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgZGVzdF9mb3JtYXQsIGdpbnQ2NCAqZGVzdF92YWwpOwotCi0vKiBwYWQgZnVuY3Rpb25zICovCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzICAgICAgICAgIChHc3RQYWQgKnBhZCk7Ci1Hc3RFbGVtZW50KiAgICAgICAgICAgICBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCAgICAgIChHc3RQYWQgKnBhZCk7Ci0KLS8qIHV0aWwgcXVlcnkgZnVuY3Rpb25zICovCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfcGFkX3Byb3h5X3F1ZXJ5X2FjY2VwdF9jYXBzIChHc3RQYWQgKnBhZCwgR3N0UXVlcnkgKnF1ZXJ5KTsKLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9wYWRfcHJveHlfcXVlcnlfY2FwcyAgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RRdWVyeSAqcXVlcnkpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfcGFkX3F1ZXJ5X3Bvc2l0aW9uICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICpjdXIpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbiAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCAqZHVyYXRpb24pOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9jb252ZXJ0ICAgICAgICAgICAoR3N0UGFkICpwYWQsIEdzdEZvcm1hdCBzcmNfZm9ybWF0LCBnaW50NjQgc3JjX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwgZ2ludDY0ICpkZXN0X3ZhbCk7Ci1Hc3RDYXBzICogICAgICAgICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NhcHMgICAgICAgICAgICAgIChHc3RQYWQgKnBhZCwgR3N0Q2FwcyAqZmlsdGVyKTsKLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHMgICAgICAgKEdzdFBhZCAqcGFkLCBHc3RDYXBzICpjYXBzKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nICAgICAgKEdzdFBhZCAgICAgICAgICAgICpzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkICAgICAgICAgICAgKnNpbmspOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGwgKEdzdFBhZCAgICAgICAgICAgICpzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkICAgICAgICAgICAgKnNpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkTGlua0NoZWNrICAgZmxhZ3MpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfcGFkX3BlZXJfcXVlcnlfcG9zaXRpb24gICAgIChHc3RQYWQgKnBhZCwgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICpjdXIpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uICAgICAoR3N0UGFkICpwYWQsIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCAqZHVyYXRpb24pOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NvbnZlcnQgICAgICAoR3N0UGFkICpwYWQsIEdzdEZvcm1hdCBzcmNfZm9ybWF0LCBnaW50NjQgc3JjX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwgZ2ludDY0ICpkZXN0X3ZhbCk7Ci1Hc3RDYXBzICogICAgICAgICAgICAgICBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAgICAgICAgIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKmZpbHRlcik7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfcGFkX3BlZXJfcXVlcnlfYWNjZXB0X2NhcHMgIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKmNhcHMpOwotCi1nY2hhciAqICAgICAgICAgICAgICAgICBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWQgICAgICAgICAgICAgICAoR3N0UGFkICogcGFkLCBHc3RFbGVtZW50ICogcGFyZW50LCBjb25zdCBnY2hhciAqc3RyZWFtX2lkKSBHX0dOVUNfTUFMTE9DOwotZ2NoYXIgKiAgICAgICAgICAgICAgICAgZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZiAgICAgICAgKEdzdFBhZCAqIHBhZCwgR3N0RWxlbWVudCAqIHBhcmVudCwgY29uc3QgZ2NoYXIgKnN0cmVhbV9pZCwgLi4uKSBHX0dOVUNfUFJJTlRGICgzLCA0KSBHX0dOVUNfTUFMTE9DOwotZ2NoYXIgKiAgICAgICAgICAgICAgICAgZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50Zl92YWxpc3QgKEdzdFBhZCAqIHBhZCwgR3N0RWxlbWVudCAqIHBhcmVudCwgY29uc3QgZ2NoYXIgKnN0cmVhbV9pZCwgdmFfbGlzdCB2YXJfYXJncykgR19HTlVDX1BSSU5URiAoMywgMCkgR19HTlVDX01BTExPQzsKLQotZ2NoYXIgKiAgICAgICAgICAgICAgICAgZ3N0X3BhZF9nZXRfc3RyZWFtX2lkICAgICAgICAgICAoR3N0UGFkICogcGFkKTsKLUdzdFN0cmVhbSAqICAgICAgICAgICAgIGdzdF9wYWRfZ2V0X3N0cmVhbSAgICAgICAgICAgICAgKEdzdFBhZCAqIHBhZCk7Ci0KLS8qIGJpbiBmdW5jdGlvbnMgKi8KLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9iaW5fYWRkX21hbnkgICAgICAgICAgICAgICAgKEdzdEJpbiAqYmluLCBHc3RFbGVtZW50ICplbGVtZW50XzEsIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9iaW5fcmVtb3ZlX21hbnkgICAgICAgICAgICAgKEdzdEJpbiAqYmluLCBHc3RFbGVtZW50ICplbGVtZW50XzEsIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKLUdzdFBhZCAqICAgICAgICAgICAgICAgIGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQgICAgICAgKEdzdEJpbiAqYmluLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2Jpbl9zeW5jX2NoaWxkcmVuX3N0YXRlcyAgICAoR3N0QmluICpiaW4pOwotCi0vKiBwYXJzZSB1dGlsaXR5IGZ1bmN0aW9ucyAqLwotR3N0RWxlbWVudCAqICAgICAgICAgICAgZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uICAgICAgKGNvbnN0IGdjaGFyICAgICAqIGJpbl9kZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICBnaG9zdF91bmxpbmtlZF9wYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICoqIGVycik7Ci0KLUdzdEVsZW1lbnQgKiAgICAgICAgICAgIGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsIChjb25zdCBnY2hhciAgICAgKiBiaW5fZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgZ2hvc3RfdW5saW5rZWRfcGFkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYXJzZUNvbnRleHQgKiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhcnNlRmxhZ3MgICAgIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICoqIGVycik7Ci0KLUdzdENsb2NrVGltZSAgICAgICAgICAgIGdzdF91dGlsX2dldF90aW1lc3RhbXAgICAgICAgICAgKHZvaWQpOwotCi0vKioKLSAqIEdzdFNlYXJjaE1vZGU6Ci0gKiBAR1NUX1NFQVJDSF9NT0RFX0VYQUNUIDogT25seSBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuCi0gKiBAR1NUX1NFQVJDSF9NT0RFX0JFRk9SRTogU2VhcmNoIGZvciBhbiBleGFjdCBtYXRjaCBvciB0aGUgZWxlbWVudCBqdXN0IGJlZm9yZS4KLSAqIEBHU1RfU0VBUkNIX01PREVfQUZURVIgOiBTZWFyY2ggZm9yIGFuIGV4YWN0IG1hdGNoIG9yIHRoZSBlbGVtZW50IGp1c3QgYWZ0ZXIuCi0gKgotICogVGhlIGRpZmZlcmVudCBzZWFyY2ggbW9kZXMuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9TRUFSQ0hfTU9ERV9FWEFDVCA9IDAsCi0gIEdTVF9TRUFSQ0hfTU9ERV9CRUZPUkUsCi0gIEdTVF9TRUFSQ0hfTU9ERV9BRlRFUgotfSBHc3RTZWFyY2hNb2RlOwotCi1ncG9pbnRlciAgICAgIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggICAgICAoZ3BvaW50ZXIgYXJyYXksIGd1aW50IG51bV9lbGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBlbGVtZW50X3NpemUsIEdDb21wYXJlRGF0YUZ1bmMgc2VhcmNoX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U2VhcmNoTW9kZSBtb2RlLCBnY29uc3Rwb2ludGVyIHNlYXJjaF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qIGZyYWN0aW9uIG9wZXJhdGlvbnMgKi8KLWdpbnQgICAgICAgICAgZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgIChnaW50IGEsIGdpbnQgYik7Ci1naW50NjQgICAgICAgIGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yX2ludDY0IChnaW50NjQgYSwgZ2ludDY0IGIpOwotCi12b2lkICAgICAgICAgIGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSAgICAgICAoZ2ludCBzcmNfbiwgZ2ludCBzcmNfZCwgZ2RvdWJsZSAqZGVzdCk7Ci12b2lkICAgICAgICAgIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbiAgICAgICAoZ2RvdWJsZSBzcmMsIGdpbnQgKmRlc3RfbiwgZ2ludCAqZGVzdF9kKTsKLQotZ2Jvb2xlYW4gICAgICBnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSAgICAgICAgKGdpbnQgYV9uLCBnaW50IGFfZCwgZ2ludCBiX24sIGdpbnQgYl9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKnJlc19uLCBnaW50ICpyZXNfZCk7Ci1nYm9vbGVhbiAgICAgIGdzdF91dGlsX2ZyYWN0aW9uX2FkZCAgICAgICAgICAgICAoZ2ludCBhX24sIGdpbnQgYV9kLCBnaW50IGJfbiwgZ2ludCBiX2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqcmVzX24sIGdpbnQgKnJlc19kKTsKLWdpbnQgICAgICAgICAgZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZSAgICAgICAgIChnaW50IGFfbiwgZ2ludCBhX2QsIGdpbnQgYl9uLCBnaW50IGJfZCk7Ci0KLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1VUSUxTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dzdHZhbHVlLmMgYi9nc3QvZ3N0dmFsdWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5NmJmYi4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dmFsdWUuYworKysgL2Rldi9udWxsCkBAIC0xLDY4NjkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0dmFsdWUKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogR1ZhbHVlIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYwotICogdG8gR1N0cmVhbWVyCi0gKgotICogR1ZhbHVlIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byBHU3RyZWFtZXIuCi0gKgotICogTm90ZSB0aGF0IG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgI0dWYWx1ZSBmcm9tIG11bHRpcGxlIHRocmVhZHMgbWF5IGxlYWQgdG8KLSAqIHVuZGVmaW5lZCBiZWhhdmlvdXIuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLSNpbmNsdWRlICJnc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdsaWItY29tcGF0LXByaXZhdGUuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaD4KLSNpbmNsdWRlICJnc3R1dGlscy5oIgotCi0vKiBHc3RWYWx1ZVVuaW9uRnVuYzoKLSAqIEBkZXN0OiBhICNHVmFsdWUgZm9yIHRoZSByZXN1bHQKLSAqIEB2YWx1ZTE6IGEgI0dWYWx1ZSBvcGVyYW5kCi0gKiBAdmFsdWUyOiBhICNHVmFsdWUgb3BlcmFuZAotICoKLSAqIFVzZWQgYnkgZ3N0X3ZhbHVlX3VuaW9uKCkgdG8gcGVyZm9ybSB1bmlmaWNhdGlvbiBmb3IgYSBzcGVjaWZpYyAjR1ZhbHVlCi0gKiB0eXBlLiBSZWdpc3RlciBhIG5ldyBpbXBsZW1lbnRhdGlvbiB3aXRoIGdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jKCkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYSB1bmlvbiB3YXMgc3VjY2Vzc2Z1bAotICovCi10eXBlZGVmIGdib29sZWFuICgqR3N0VmFsdWVVbmlvbkZ1bmMpIChHVmFsdWUgKiBkZXN0LAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKTsKLQotLyogR3N0VmFsdWVJbnRlcnNlY3RGdW5jOgotICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IGEgI0dWYWx1ZSBmb3IgdGhlIHJlc3VsdAotICogQHZhbHVlMTogYSAjR1ZhbHVlIG9wZXJhbmQKLSAqIEB2YWx1ZTI6IGEgI0dWYWx1ZSBvcGVyYW5kCi0gKgotICogVXNlZCBieSBnc3RfdmFsdWVfaW50ZXJzZWN0KCkgdG8gcGVyZm9ybSBpbnRlcnNlY3Rpb24gZm9yIGEgc3BlY2lmaWMgI0dWYWx1ZQotICogdHlwZS4gSWYgdGhlIGludGVyc2VjdGlvbiBpcyBub24tZW1wdHksIHRoZSByZXN1bHQgaXMKLSAqIHBsYWNlZCBpbiBAZGVzdCBhbmQgJVRSVUUgaXMgcmV0dXJuZWQuICBJZiB0aGUgaW50ZXJzZWN0aW9uIGlzCi0gKiBlbXB0eSwgQGRlc3QgaXMgdW5tb2RpZmllZCBhbmQgJUZBTFNFIGlzIHJldHVybmVkLgotICogUmVnaXN0ZXIgYSBuZXcgaW1wbGVtZW50YXRpb24gd2l0aCBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMoKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWVzIGNhbiBpbnRlcnNlY3QKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAoKkdzdFZhbHVlSW50ZXJzZWN0RnVuYykgKEdWYWx1ZSAqIGRlc3QsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpOwotCi0vKiBHc3RWYWx1ZVN1YnRyYWN0RnVuYzoKLSAqIEBkZXN0OiAob3V0IGNhbGxlci1hbGxvY2F0ZXMpOiBhICNHVmFsdWUgZm9yIHRoZSByZXN1bHQKLSAqIEBtaW51ZW5kOiBhICNHVmFsdWUgb3BlcmFuZAotICogQHN1YnRyYWhlbmQ6IGEgI0dWYWx1ZSBvcGVyYW5kCi0gKgotICogVXNlZCBieSBnc3RfdmFsdWVfc3VidHJhY3QoKSB0byBwZXJmb3JtIHN1YnRyYWN0aW9uIGZvciBhIHNwZWNpZmljICNHVmFsdWUKLSAqIHR5cGUuIFJlZ2lzdGVyIGEgbmV3IGltcGxlbWVudGF0aW9uIHdpdGggZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMoKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc3VidHJhY3Rpb24gaXMgbm90IGVtcHR5Ci0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHc3RWYWx1ZVN1YnRyYWN0RnVuYykgKEdWYWx1ZSAqIGRlc3QsCi0gICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jIChHVHlwZSB0eXBlMSwKLSAgICBHVHlwZSB0eXBlMiwgR3N0VmFsdWVVbmlvbkZ1bmMgZnVuYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKEdUeXBlIHR5cGUxLAotICAgIEdUeXBlIHR5cGUyLCBHc3RWYWx1ZUludGVyc2VjdEZ1bmMgZnVuYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR1R5cGUgbWludWVuZF90eXBlLAotICAgIEdUeXBlIHN1YnRyYWhlbmRfdHlwZSwgR3N0VmFsdWVTdWJ0cmFjdEZ1bmMgZnVuYyk7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWYWx1ZVVuaW9uSW5mbyBHc3RWYWx1ZVVuaW9uSW5mbzsKLXN0cnVjdCBfR3N0VmFsdWVVbmlvbkluZm8KLXsKLSAgR1R5cGUgdHlwZTE7Ci0gIEdUeXBlIHR5cGUyOwotICBHc3RWYWx1ZVVuaW9uRnVuYyBmdW5jOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZhbHVlSW50ZXJzZWN0SW5mbyBHc3RWYWx1ZUludGVyc2VjdEluZm87Ci1zdHJ1Y3QgX0dzdFZhbHVlSW50ZXJzZWN0SW5mbwotewotICBHVHlwZSB0eXBlMTsKLSAgR1R5cGUgdHlwZTI7Ci0gIEdzdFZhbHVlSW50ZXJzZWN0RnVuYyBmdW5jOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZhbHVlU3VidHJhY3RJbmZvIEdzdFZhbHVlU3VidHJhY3RJbmZvOwotc3RydWN0IF9Hc3RWYWx1ZVN1YnRyYWN0SW5mbwotewotICBHVHlwZSBtaW51ZW5kOwotICBHVHlwZSBzdWJ0cmFoZW5kOwotICBHc3RWYWx1ZVN1YnRyYWN0RnVuYyBmdW5jOwotfTsKLQotc3RydWN0IF9Hc3RGbGFnU2V0Q2xhc3MKLXsKLSAgR1R5cGVDbGFzcyBwYXJlbnQ7Ci0gIEdUeXBlIGZsYWdzX3R5cGU7ICAgICAgICAgICAgIC8qIFR5cGUgb2YgdGhlIEdGbGFncyB0aGlzIGZsYWdzZXQgY2FycmllcyAoY2FuIGJlIDApICovCi19OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RmxhZ1NldENsYXNzIEdzdEZsYWdTZXRDbGFzczsKLQotI2RlZmluZSBGVU5EQU1FTlRBTF9UWVBFX0lEX01BWCBcCi0gICAgKEdfVFlQRV9GVU5EQU1FTlRBTF9NQVggPj4gR19UWVBFX0ZVTkRBTUVOVEFMX1NISUZUKQotI2RlZmluZSBGVU5EQU1FTlRBTF9UWVBFX0lEKHR5cGUpIFwKLSAgICAoKHR5cGUpID4+IEdfVFlQRV9GVU5EQU1FTlRBTF9TSElGVCkKLQotI2RlZmluZSBWQUxVRV9MSVNUX0FSUkFZKHYpICgoR0FycmF5ICopICh2KS0+ZGF0YVswXS52X3BvaW50ZXIpCi0jZGVmaW5lIFZBTFVFX0xJU1RfU0laRSh2KSAoVkFMVUVfTElTVF9BUlJBWSh2KS0+bGVuKQotI2RlZmluZSBWQUxVRV9MSVNUX0dFVF9WQUxVRSh2LCBpbmRleCkgKChjb25zdCBHVmFsdWUgKikgJmdfYXJyYXlfaW5kZXggKFZBTFVFX0xJU1RfQVJSQVkodiksIEdWYWx1ZSwgKGluZGV4KSkpCi0KLXN0YXRpYyBHQXJyYXkgKmdzdF92YWx1ZV90YWJsZTsKLXN0YXRpYyBHSGFzaFRhYmxlICpnc3RfdmFsdWVfaGFzaDsKLXN0YXRpYyBHc3RWYWx1ZVRhYmxlICpnc3RfdmFsdWVfdGFibGVzX2Z1bmRhbWVudGFsW0ZVTkRBTUVOVEFMX1RZUEVfSURfTUFYICsgMV07Ci1zdGF0aWMgR0FycmF5ICpnc3RfdmFsdWVfdW5pb25fZnVuY3M7Ci1zdGF0aWMgR0FycmF5ICpnc3RfdmFsdWVfaW50ZXJzZWN0X2Z1bmNzOwotc3RhdGljIEdBcnJheSAqZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzOwotCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwotc3RhdGljIGdjaGFyICpnc3RfdmFsdWVfc2VyaWFsaXplX2ZyYWN0aW9uIChjb25zdCBHVmFsdWUgKiB2YWx1ZSk7Ci0KLXN0YXRpYyBHc3RWYWx1ZUNvbXBhcmVGdW5jIGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEpOwotc3RhdGljIGdpbnQgZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUyLCBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmUpOwotCi1zdGF0aWMgZ2NoYXIgKmdzdF9zdHJpbmdfd3JhcCAoY29uc3QgZ2NoYXIgKiBzKTsKLXN0YXRpYyBnY2hhciAqZ3N0X3N0cmluZ191bndyYXAgKGNvbnN0IGdjaGFyICogcyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF92YWx1ZV9tb3ZlIChHVmFsdWUgKiBkZXN0LCBHVmFsdWUgKiBzcmMpOwotc3RhdGljIHZvaWQgX2dzdF92YWx1ZV9saXN0X2FwcGVuZF9hbmRfdGFrZV92YWx1ZSAoR1ZhbHVlICogdmFsdWUsCi0gICAgR1ZhbHVlICogYXBwZW5kX3ZhbHVlKTsKLXN0YXRpYyB2b2lkIF9nc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2FuZF90YWtlX3ZhbHVlIChHVmFsdWUgKiB2YWx1ZSwKLSAgICBHVmFsdWUgKiBhcHBlbmRfdmFsdWUpOwotCi1zdGF0aWMgaW5saW5lIEdzdFZhbHVlVGFibGUgKgotZ3N0X3ZhbHVlX2hhc2hfbG9va3VwX3R5cGUgKEdUeXBlIHR5cGUpCi17Ci0gIGlmIChHX0xJS0VMWSAoR19UWVBFX0lTX0ZVTkRBTUVOVEFMICh0eXBlKSkpCi0gICAgcmV0dXJuIGdzdF92YWx1ZV90YWJsZXNfZnVuZGFtZW50YWxbRlVOREFNRU5UQUxfVFlQRV9JRCAodHlwZSldOwotICBlbHNlCi0gICAgcmV0dXJuIGdfaGFzaF90YWJsZV9sb29rdXAgKGdzdF92YWx1ZV9oYXNoLCAoZ3BvaW50ZXIpIHR5cGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX2hhc2hfYWRkX3R5cGUgKEdUeXBlIHR5cGUsIGNvbnN0IEdzdFZhbHVlVGFibGUgKiB0YWJsZSkKLXsKLSAgaWYgKEdfVFlQRV9JU19GVU5EQU1FTlRBTCAodHlwZSkpCi0gICAgZ3N0X3ZhbHVlX3RhYmxlc19mdW5kYW1lbnRhbFtGVU5EQU1FTlRBTF9UWVBFX0lEICh0eXBlKV0gPSAoZ3BvaW50ZXIpIHRhYmxlOwotCi0gIGdfaGFzaF90YWJsZV9pbnNlcnQgKGdzdF92YWx1ZV9oYXNoLCAoZ3BvaW50ZXIpIHR5cGUsIChncG9pbnRlcikgdGFibGUpOwotfQotCi0vKioqKioqKioKLSAqIGxpc3QgKgotICoqKioqKioqLwotCi0vKiB0d28gaGVscGVyIGZ1bmN0aW9ucyB0byBzZXJpYWxpemUvc3RyaW5naWZ5IGFueSB0eXBlIG9mIGxpc3QKLSAqIHJlZ3VsYXIgbGlzdHMgYXJlIGRvbmUgd2l0aCB7IH0sIGFycmF5cyB3aXRoIDwgPgotICovCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9hbnlfbGlzdCAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGNvbnN0IGdjaGFyICogYmVnaW4sCi0gICAgY29uc3QgZ2NoYXIgKiBlbmQpCi17Ci0gIGd1aW50IGk7Ci0gIEdBcnJheSAqYXJyYXkgPSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIEdTdHJpbmcgKnM7Ci0gIEdWYWx1ZSAqdjsKLSAgZ2NoYXIgKnNfdmFsOwotICBndWludCBhbGVuID0gYXJyYXktPmxlbjsKLQotICAvKiBlc3RpbWF0ZSBtaW5pbXVtIHN0cmluZyBsZW5ndGggdG8gbWluaW1pc2UgcmUtYWxsb2NzIGluIEdTdHJpbmcgKi8KLSAgcyA9IGdfc3RyaW5nX3NpemVkX25ldyAoMiArICg2ICogYWxlbikgKyAyKTsKLSAgZ19zdHJpbmdfYXBwZW5kIChzLCBiZWdpbik7Ci0gIGZvciAoaSA9IDA7IGkgPCBhbGVuOyBpKyspIHsKLSAgICB2ID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIGkpOwotICAgIHNfdmFsID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAodik7Ci0gICAgaWYgKHNfdmFsICE9IE5VTEwpIHsKLSAgICAgIGdfc3RyaW5nX2FwcGVuZCAocywgc192YWwpOwotICAgICAgZ19mcmVlIChzX3ZhbCk7Ci0gICAgICBpZiAoaSA8IGFsZW4gLSAxKSB7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4gKHMsICIsICIsIDIpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklORyAoIkNvdWxkIG5vdCBzZXJpYWxpemUgbGlzdC9hcnJheSB2YWx1ZSBvZiB0eXBlICclcyciLAotICAgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2KSk7Ci0gICAgfQotICB9Ci0gIGdfc3RyaW5nX2FwcGVuZCAocywgZW5kKTsKLSAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKHMsIEZBTFNFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV90cmFuc2Zvcm1fYW55X2xpc3Rfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSwgY29uc3QgZ2NoYXIgKiBiZWdpbiwgY29uc3QgZ2NoYXIgKiBlbmQpCi17Ci0gIEdWYWx1ZSAqbGlzdF92YWx1ZTsKLSAgR0FycmF5ICphcnJheTsKLSAgR1N0cmluZyAqczsKLSAgZ3VpbnQgaTsKLSAgZ2NoYXIgKmxpc3RfczsKLSAgZ3VpbnQgYWxlbjsKLQotICBhcnJheSA9IHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIGFsZW4gPSBhcnJheS0+bGVuOwotCi0gIC8qIGVzdGltYXRlIG1pbmltdW0gc3RyaW5nIGxlbmd0aCB0byBtaW5pbWlzZSByZS1hbGxvY3MgaW4gR1N0cmluZyAqLwotICBzID0gZ19zdHJpbmdfc2l6ZWRfbmV3ICgyICsgKDEwICogYWxlbikgKyAyKTsKLSAgZ19zdHJpbmdfYXBwZW5kIChzLCBiZWdpbik7Ci0gIGZvciAoaSA9IDA7IGkgPCBhbGVuOyBpKyspIHsKLSAgICBsaXN0X3ZhbHVlID0gJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIGkpOwotCi0gICAgaWYgKGkgIT0gMCkgewotICAgICAgZ19zdHJpbmdfYXBwZW5kX2xlbiAocywgIiwgIiwgMik7Ci0gICAgfQotICAgIGxpc3RfcyA9IGdfc3RyZHVwX3ZhbHVlX2NvbnRlbnRzIChsaXN0X3ZhbHVlKTsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHMsIGxpc3Rfcyk7Ci0gICAgZ19mcmVlIChsaXN0X3MpOwotICB9Ci0gIGdfc3RyaW5nX2FwcGVuZCAocywgZW5kKTsKLQotICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IGdfc3RyaW5nX2ZyZWUgKHMsIEZBTFNFKTsKLX0KLQotLyoKLSAqIGhlbHBlciBmdW5jdGlvbiB0byBzZWUgaWYgYSB0eXBlIGlzIGZpeGVkLiBJcyB1c2VkIGludGVybmFsbHkgaGVyZSBhbmQKLSAqIHRoZXJlLiBEbyBub3QgZXhwb3J0LCBzaW5jZSBpdCBkb2Vzbid0IHdvcmsgZm9yIHR5cGVzIHdoZXJlIHRoZSBjb250ZW50Ci0gKiBkZWNpZGVzIHRoZSBmaXhlZG5lc3MgKGUuZy4gR1NUX1RZUEVfQVJSQVkpLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90eXBlX2lzX2ZpeGVkIChHVHlwZSB0eXBlKQotewotICAvKiB0aGUgYmFzaWMgaW50LCBzdHJpbmcsIGRvdWJsZSB0eXBlcyAqLwotICBpZiAodHlwZSA8PSBHX1RZUEVfTUFLRV9GVU5EQU1FTlRBTCAoR19UWVBFX1JFU0VSVkVEX0dMSUJfTEFTVCkpIHsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICAvKiBvdXIgZnVuZGFtZW50YWwgdHlwZXMgdGhhdCBhcmUgY2VydGFpbmx5IG5vdCBmaXhlZCAqLwotICBpZiAodHlwZSA9PSBHU1RfVFlQRV9JTlRfUkFOR0UgfHwgdHlwZSA9PSBHU1RfVFlQRV9ET1VCTEVfUkFOR0UgfHwKLSAgICAgIHR5cGUgPT0gR1NUX1RZUEVfSU5UNjRfUkFOR0UgfHwKLSAgICAgIHR5cGUgPT0gR1NUX1RZUEVfTElTVCB8fCB0eXBlID09IEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIC8qIG90aGVyIChib3hlZCkgdHlwZXMgdGhhdCBhcmUgZml4ZWQgKi8KLSAgaWYgKHR5cGUgPT0gR1NUX1RZUEVfQlVGRkVSKSB7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgLyogaGVhdnkgY2hlY2tzICovCi0gIGlmIChHX1RZUEVfSVNfRlVOREFNRU5UQUwgKHR5cGUpIHx8IEdfVFlQRV9GVU5EQU1FTlRBTCAodHlwZSkgPD0KLSAgICAgIEdfVFlQRV9NQUtFX0ZVTkRBTUVOVEFMIChHX1RZUEVfUkVTRVJWRURfR0xJQl9MQVNUKSkgewotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKiBHVmFsdWUgZnVuY3Rpb25zIHVzYWJsZSBmb3IgYm90aCByZWd1bGFyIGxpc3RzIGFuZCBhcnJheXMgKi8KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfaW5pdF9saXN0X29yX2FycmF5IChHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gZ19hcnJheV9uZXcgKEZBTFNFLCBUUlVFLCBzaXplb2YgKEdWYWx1ZSkpOwotfQotCi1zdGF0aWMgR0FycmF5ICoKLWNvcHlfZ2FycmF5X29mX2dzdHZhbHVlIChjb25zdCBHQXJyYXkgKiBzcmMpCi17Ci0gIEdBcnJheSAqZGVzdDsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIGxlbiA9IHNyYy0+bGVuOwotICBkZXN0ID0gZ19hcnJheV9zaXplZF9uZXcgKEZBTFNFLCBUUlVFLCBzaXplb2YgKEdWYWx1ZSksIGxlbik7Ci0gIGdfYXJyYXlfc2V0X3NpemUgKGRlc3QsIGxlbik7Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmZ19hcnJheV9pbmRleCAoZGVzdCwgR1ZhbHVlLCBpKSwKLSAgICAgICAgJmdfYXJyYXlfaW5kZXggKHNyYywgR1ZhbHVlLCBpKSk7Ci0gIH0KLQotICByZXR1cm4gZGVzdDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9jb3B5X2xpc3Rfb3JfYXJyYXkgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPQotICAgICAgY29weV9nYXJyYXlfb2ZfZ3N0dmFsdWUgKChHQXJyYXkgKikgc3JjX3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfZnJlZV9saXN0X29yX2FycmF5IChHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ3VpbnQgaSwgbGVuOwotICBHQXJyYXkgKnNyYyA9IChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOwotICBsZW4gPSBzcmMtPmxlbjsKLQotICBpZiAoKHZhbHVlLT5kYXRhWzFdLnZfdWludCAmIEdfVkFMVUVfTk9DT1BZX0NPTlRFTlRTKSA9PSAwKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmZ19hcnJheV9pbmRleCAoc3JjLCBHVmFsdWUsIGkpKTsKLSAgICB9Ci0gICAgZ19hcnJheV9mcmVlIChzcmMsIFRSVUUpOwotICB9Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfcGVla19wb2ludGVyIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgcmV0dXJuIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9jb2xsZWN0X2xpc3Rfb3JfYXJyYXkgKEdWYWx1ZSAqIHZhbHVlLCBndWludCBuX2NvbGxlY3RfdmFsdWVzLAotICAgIEdUeXBlQ1ZhbHVlICogY29sbGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3RfZmxhZ3MpCi17Ci0gIGlmIChjb2xsZWN0X2ZsYWdzICYgR19WQUxVRV9OT0NPUFlfQ09OVEVOVFMpIHsKLSAgICB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7Ci0gICAgdmFsdWUtPmRhdGFbMV0udl91aW50ID0gR19WQUxVRV9OT0NPUFlfQ09OVEVOVFM7Ci0gIH0gZWxzZSB7Ci0gICAgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0KLSAgICAgICAgY29weV9nYXJyYXlfb2ZfZ3N0dmFsdWUgKChHQXJyYXkgKikgY29sbGVjdF92YWx1ZXNbMF0udl9wb2ludGVyKTsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9sY29weV9saXN0X29yX2FycmF5IChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBHQXJyYXkgKipkZXN0ID0gY29sbGVjdF92YWx1ZXNbMF0udl9wb2ludGVyOwotCi0gIGlmICghZGVzdCkKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgidmFsdWUgbG9jYXRpb24gZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgaWYgKCF2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoImludmFsaWQgdmFsdWUgZ2l2ZW4gZm9yIGAlcyciLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgaWYgKGNvbGxlY3RfZmxhZ3MgJiBHX1ZBTFVFX05PQ09QWV9DT05URU5UUykgewotICAgICpkZXN0ID0gKEdBcnJheSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIH0gZWxzZSB7Ci0gICAgKmRlc3QgPSBjb3B5X2dhcnJheV9vZl9nc3R2YWx1ZSAoKEdBcnJheSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9saXN0X29yX2FycmF5X2dldF9iYXNpY190eXBlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1R5cGUgKiB0eXBlKQotewotICBpZiAoR19VTkxJS0VMWSAodmFsdWUgPT0gTlVMTCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUpKSB7Ci0gICAgaWYgKFZBTFVFX0xJU1RfU0laRSAodmFsdWUpID09IDApCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmV0dXJuIGdzdF92YWx1ZV9saXN0X29yX2FycmF5X2dldF9iYXNpY190eXBlIChWQUxVRV9MSVNUX0dFVF9WQUxVRSAodmFsdWUsCi0gICAgICAgICAgICAwKSwgdHlwZSk7Ci0gIH0KLSAgaWYgKEdTVF9WQUxVRV9IT0xEU19BUlJBWSAodmFsdWUpKSB7Ci0gICAgY29uc3QgR0FycmF5ICphcnJheSA9IChjb25zdCBHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOwotICAgIGlmIChhcnJheS0+bGVuID09IDApCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmV0dXJuIGdzdF92YWx1ZV9saXN0X29yX2FycmF5X2dldF9iYXNpY190eXBlICgmZ19hcnJheV9pbmRleCAoYXJyYXksCi0gICAgICAgICAgICBHVmFsdWUsIDApLCB0eXBlKTsKLSAgfQotCi0gICp0eXBlID0gR19WQUxVRV9UWVBFICh2YWx1ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNkZWZpbmUgSVNfUkFOR0VfQ09NUEFUKHR5cGUxLHR5cGUyLHQxLHQyKSBcCi0gICgoKHQxKSA9PSAodHlwZTEpICYmICh0MikgPT0gKHR5cGUyKSkgfHwgKCh0MikgPT0gKHR5cGUxKSAmJiAodDEpID09ICh0eXBlMikpKQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9saXN0X29yX2FycmF5X2FyZV9jb21wYXRpYmxlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBHVHlwZSBiYXNpY190eXBlMSwgYmFzaWNfdHlwZTI7Ci0KLSAgLyogZW1wdHkgb3Igc2FtZSB0eXBlIGlzIE9LICovCi0gIGlmICghZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfZ2V0X2Jhc2ljX3R5cGUgKHZhbHVlMSwgJmJhc2ljX3R5cGUxKSB8fAotICAgICAgIWdzdF92YWx1ZV9saXN0X29yX2FycmF5X2dldF9iYXNpY190eXBlICh2YWx1ZTIsICZiYXNpY190eXBlMikgfHwKLSAgICAgIGJhc2ljX3R5cGUxID09IGJhc2ljX3R5cGUyKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIHJhbmdlcyBhcmUgZGlzdGluY3QgdHlwZXMgZm9yIGVhY2ggYm91bmQgdHlwZS4uLiAqLwotICBpZiAoSVNfUkFOR0VfQ09NUEFUIChHX1RZUEVfSU5ULCBHU1RfVFlQRV9JTlRfUkFOR0UsIGJhc2ljX3R5cGUxLAotICAgICAgICAgIGJhc2ljX3R5cGUyKSkKLSAgICByZXR1cm4gVFJVRTsKLSAgaWYgKElTX1JBTkdFX0NPTVBBVCAoR19UWVBFX0lOVDY0LCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSwgYmFzaWNfdHlwZTEsCi0gICAgICAgICAgYmFzaWNfdHlwZTIpKQotICAgIHJldHVybiBUUlVFOwotICBpZiAoSVNfUkFOR0VfQ09NUEFUIChHX1RZUEVfRE9VQkxFLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UsIGJhc2ljX3R5cGUxLAotICAgICAgICAgIGJhc2ljX3R5cGUyKSkKLSAgICByZXR1cm4gVFJVRTsKLSAgaWYgKElTX1JBTkdFX0NPTVBBVCAoR1NUX1RZUEVfRlJBQ1RJT04sIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLCBiYXNpY190eXBlMSwKLSAgICAgICAgICBiYXNpY190eXBlMikpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKEdWYWx1ZSAqIHZhbHVlLCBHVmFsdWUgKiBhcHBlbmRfdmFsdWUpCi17Ci0gIGdfYXJyYXlfYXBwZW5kX3ZhbHMgKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyLCBhcHBlbmRfdmFsdWUsIDEpOwotICBtZW1zZXQgKGFwcGVuZF92YWx1ZSwgMCwgc2l6ZW9mIChHVmFsdWUpKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWU6Ci0gKiBAdmFsdWU6IGEgI0dWYWx1ZSBvZiB0eXBlICNHU1RfVFlQRV9MSVNUCi0gKiBAYXBwZW5kX3ZhbHVlOiAodHJhbnNmZXIgZnVsbCk6IHRoZSB2YWx1ZSB0byBhcHBlbmQKLSAqCi0gKiBBcHBlbmRzIEBhcHBlbmRfdmFsdWUgdG8gdGhlIEdzdFZhbHVlTGlzdCBpbiBAdmFsdWUuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKEdWYWx1ZSAqIHZhbHVlLCBHVmFsdWUgKiBhcHBlbmRfdmFsdWUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFIChhcHBlbmRfdmFsdWUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfYXJlX2NvbXBhdGlibGUgKHZhbHVlLAotICAgICAgICAgIGFwcGVuZF92YWx1ZSkpOwotCi0gIF9nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKHZhbHVlLCBhcHBlbmRfdmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZToKLSAqIEB2YWx1ZTogYSAjR1ZhbHVlIG9mIHR5cGUgI0dTVF9UWVBFX0xJU1QKLSAqIEBhcHBlbmRfdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlIHZhbHVlIHRvIGFwcGVuZAotICoKLSAqIEFwcGVuZHMgQGFwcGVuZF92YWx1ZSB0byB0aGUgR3N0VmFsdWVMaXN0IGluIEB2YWx1ZS4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlIChHVmFsdWUgKiB2YWx1ZSwgY29uc3QgR1ZhbHVlICogYXBwZW5kX3ZhbHVlKQotewotICBHVmFsdWUgdmFsID0geyAwLCB9OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFIChhcHBlbmRfdmFsdWUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfYXJlX2NvbXBhdGlibGUgKHZhbHVlLAotICAgICAgICAgIGFwcGVuZF92YWx1ZSkpOwotCi0gIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmdmFsLCBhcHBlbmRfdmFsdWUpOwotICBnX2FycmF5X2FwcGVuZF92YWxzICgoR0FycmF5ICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciwgJnZhbCwgMSk7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZToKLSAqIEB2YWx1ZTogYSAjR1ZhbHVlIG9mIHR5cGUgI0dTVF9UWVBFX0xJU1QKLSAqIEBwcmVwZW5kX3ZhbHVlOiB0aGUgdmFsdWUgdG8gcHJlcGVuZAotICoKLSAqIFByZXBlbmRzIEBwcmVwZW5kX3ZhbHVlIHRvIHRoZSBHc3RWYWx1ZUxpc3QgaW4gQHZhbHVlLgotICovCi12b2lkCi1nc3RfdmFsdWVfbGlzdF9wcmVwZW5kX3ZhbHVlIChHVmFsdWUgKiB2YWx1ZSwgY29uc3QgR1ZhbHVlICogcHJlcGVuZF92YWx1ZSkKLXsKLSAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAocHJlcGVuZF92YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdmFsdWVfbGlzdF9vcl9hcnJheV9hcmVfY29tcGF0aWJsZSAodmFsdWUsCi0gICAgICAgICAgcHJlcGVuZF92YWx1ZSkpOwotCi0gIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmdmFsLCBwcmVwZW5kX3ZhbHVlKTsKLSAgZ19hcnJheV9wcmVwZW5kX3ZhbHMgKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyLCAmdmFsLCAxKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfbGlzdF9jb25jYXQ6Ci0gKiBAZGVzdDogKG91dCBjYWxsZXItYWxsb2NhdGVzKTogYW4gdW5pbml0aWFsaXplZCAjR1ZhbHVlIHRvIHRha2UgdGhlIHJlc3VsdAotICogQHZhbHVlMTogYSAjR1ZhbHVlCi0gKiBAdmFsdWUyOiBhICNHVmFsdWUKLSAqCi0gKiBDb25jYXRlbmF0ZXMgY29waWVzIG9mIEB2YWx1ZTEgYW5kIEB2YWx1ZTIgaW50byBhIGxpc3QuICBWYWx1ZXMgdGhhdCBhcmUgbm90Ci0gKiBvZiB0eXBlICNHU1RfVFlQRV9MSVNUIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSBsaXN0cyBvZiBsZW5ndGggMS4KLSAqIEBkZXN0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIHR5cGUgI0dTVF9UWVBFX0xJU1QuCi0gKi8KLXZvaWQKLWdzdF92YWx1ZV9saXN0X2NvbmNhdCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogdmFsdWUxLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgZ3VpbnQgaSwgdmFsdWUxX2xlbmd0aCwgdmFsdWUyX2xlbmd0aDsKLSAgR0FycmF5ICphcnJheTsKLQotICBnX3JldHVybl9pZl9mYWlsIChkZXN0ICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKGRlc3QpID09IDApOwotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZTEpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUyKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF92YWx1ZV9saXN0X29yX2FycmF5X2FyZV9jb21wYXRpYmxlICh2YWx1ZTEsIHZhbHVlMikpOwotCi0gIHZhbHVlMV9sZW5ndGggPQotICAgICAgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZTEpID8gVkFMVUVfTElTVF9TSVpFICh2YWx1ZTEpIDogMSk7Ci0gIHZhbHVlMl9sZW5ndGggPQotICAgICAgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZTIpID8gVkFMVUVfTElTVF9TSVpFICh2YWx1ZTIpIDogMSk7Ci0gIGdfdmFsdWVfaW5pdCAoZGVzdCwgR1NUX1RZUEVfTElTVCk7Ci0gIGFycmF5ID0gKEdBcnJheSAqKSBkZXN0LT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgZ19hcnJheV9zZXRfc2l6ZSAoYXJyYXksIHZhbHVlMV9sZW5ndGggKyB2YWx1ZTJfbGVuZ3RoKTsKLQotICBpZiAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlMSkpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWUxX2xlbmd0aDsgaSsrKSB7Ci0gICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIGkpLAotICAgICAgICAgIFZBTFVFX0xJU1RfR0VUX1ZBTFVFICh2YWx1ZTEsIGkpKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCAwKSwgdmFsdWUxKTsKLSAgfQotCi0gIGlmIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUyKSkgewotICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZTJfbGVuZ3RoOyBpKyspIHsKLSAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwKLSAgICAgICAgICAgICAgaSArIHZhbHVlMV9sZW5ndGgpLCBWQUxVRV9MSVNUX0dFVF9WQUxVRSAodmFsdWUyLCBpKSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwgdmFsdWUxX2xlbmd0aCksCi0gICAgICAgIHZhbHVlMik7Ci0gIH0KLX0KLQotLyogc2FtZSBhcyBnc3RfdmFsdWVfbGlzdF9jb25jYXQoKSBidXQgdGFrZXMgb3duZXJzaGlwIG9mIEdWYWx1ZXMgKi8KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfbGlzdF9jb25jYXRfYW5kX3Rha2VfdmFsdWVzIChHVmFsdWUgKiBkZXN0LCBHVmFsdWUgKiB2YWwxLAotICAgIEdWYWx1ZSAqIHZhbDIpCi17Ci0gIGd1aW50IGksIHZhbDFfbGVuZ3RoLCB2YWwyX2xlbmd0aDsKLSAgZ2Jvb2xlYW4gdmFsMV9pc19saXN0OwotICBnYm9vbGVhbiB2YWwyX2lzX2xpc3Q7Ci0gIEdBcnJheSAqYXJyYXk7Ci0KLSAgZ19hc3NlcnQgKGRlc3QgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChHX1ZBTFVFX1RZUEUgKGRlc3QpID09IDApOwotICBnX2Fzc2VydCAoR19JU19WQUxVRSAodmFsMSkpOwotICBnX2Fzc2VydCAoR19JU19WQUxVRSAodmFsMikpOwotICBnX2Fzc2VydCAoZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfYXJlX2NvbXBhdGlibGUgKHZhbDEsIHZhbDIpKTsKLQotICB2YWwxX2lzX2xpc3QgPSBHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsMSk7Ci0gIHZhbDFfbGVuZ3RoID0gKHZhbDFfaXNfbGlzdCA/IFZBTFVFX0xJU1RfU0laRSAodmFsMSkgOiAxKTsKLQotICB2YWwyX2lzX2xpc3QgPSBHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsMik7Ci0gIHZhbDJfbGVuZ3RoID0gKHZhbDJfaXNfbGlzdCA/IFZBTFVFX0xJU1RfU0laRSAodmFsMikgOiAxKTsKLQotICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdTVF9UWVBFX0xJU1QpOwotICBhcnJheSA9IChHQXJyYXkgKikgZGVzdC0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIGdfYXJyYXlfc2V0X3NpemUgKGFycmF5LCB2YWwxX2xlbmd0aCArIHZhbDJfbGVuZ3RoKTsKLQotICBpZiAodmFsMV9pc19saXN0KSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IHZhbDFfbGVuZ3RoOyBpKyspIHsKLSAgICAgIGdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIGkpID0gKlZBTFVFX0xJU1RfR0VUX1ZBTFVFICh2YWwxLCBpKTsKLSAgICB9Ci0gICAgZ19hcnJheV9zZXRfc2l6ZSAoVkFMVUVfTElTVF9BUlJBWSAodmFsMSksIDApOwotICAgIGdfdmFsdWVfdW5zZXQgKHZhbDEpOwotICB9IGVsc2UgewotICAgIGdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIDApID0gKnZhbDE7Ci0gICAgR19WQUxVRV9UWVBFICh2YWwxKSA9IEdfVFlQRV9JTlZBTElEOwotICB9Ci0KLSAgaWYgKHZhbDJfaXNfbGlzdCkgewotICAgIGZvciAoaSA9IDA7IGkgPCB2YWwyX2xlbmd0aDsgaSsrKSB7Ci0gICAgICBjb25zdCBHVmFsdWUgKnYyID0gVkFMVUVfTElTVF9HRVRfVkFMVUUgKHZhbDIsIGkpOwotICAgICAgZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwgaSArIHZhbDFfbGVuZ3RoKSA9ICp2MjsKLSAgICB9Ci0gICAgZ19hcnJheV9zZXRfc2l6ZSAoVkFMVUVfTElTVF9BUlJBWSAodmFsMiksIDApOwotICAgIGdfdmFsdWVfdW5zZXQgKHZhbDIpOwotICB9IGVsc2UgewotICAgIGdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIHZhbDFfbGVuZ3RoKSA9ICp2YWwyOwotICAgIEdfVkFMVUVfVFlQRSAodmFsMikgPSBHX1RZUEVfSU5WQUxJRDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9saXN0X21lcmdlOgotICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IGFuIHVuaW5pdGlhbGl6ZWQgI0dWYWx1ZSB0byB0YWtlIHRoZSByZXN1bHQKLSAqIEB2YWx1ZTE6IGEgI0dWYWx1ZQotICogQHZhbHVlMjogYSAjR1ZhbHVlCi0gKgotICogTWVyZ2VzIGNvcGllcyBvZiBAdmFsdWUxIGFuZCBAdmFsdWUyLiAgVmFsdWVzIHRoYXQgYXJlIG5vdAotICogb2YgdHlwZSAjR1NUX1RZUEVfTElTVCBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgbGlzdHMgb2YgbGVuZ3RoIDEuCi0gKgotICogVGhlIHJlc3VsdCB3aWxsIGJlIHB1dCBpbnRvIEBkZXN0IGFuZCB3aWxsIGVpdGhlciBiZSBhIGxpc3QgdGhhdCB3aWxsIG5vdAotICogY29udGFpbiBhbnkgZHVwbGljYXRlcywgb3IgYSBub24tbGlzdCB0eXBlIChpZiBAdmFsdWUxIGFuZCBAdmFsdWUyCi0gKiB3ZXJlIGVxdWFsKS4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCi17Ci0gIGd1aW50IGksIGosIGssIHZhbHVlMV9sZW5ndGgsIHZhbHVlMl9sZW5ndGgsIHNraXBwZWQ7Ci0gIGNvbnN0IEdWYWx1ZSAqc3JjOwotICBnYm9vbGVhbiBza2lwOwotICBHQXJyYXkgKmFycmF5OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdfVkFMVUVfVFlQRSAoZGVzdCkgPT0gMCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZTIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfYXJlX2NvbXBhdGlibGUgKHZhbHVlMSwgdmFsdWUyKSk7Ci0KLSAgdmFsdWUxX2xlbmd0aCA9Ci0gICAgICAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlMSkgPyBWQUxVRV9MSVNUX1NJWkUgKHZhbHVlMSkgOiAxKTsKLSAgdmFsdWUyX2xlbmd0aCA9Ci0gICAgICAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlMikgPyBWQUxVRV9MSVNUX1NJWkUgKHZhbHVlMikgOiAxKTsKLSAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9MSVNUKTsKLSAgYXJyYXkgPSAoR0FycmF5ICopIGRlc3QtPmRhdGFbMF0udl9wb2ludGVyOwotICBnX2FycmF5X3NldF9zaXplIChhcnJheSwgdmFsdWUxX2xlbmd0aCArIHZhbHVlMl9sZW5ndGgpOwotCi0gIGlmIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUxKSkgewotICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZTFfbGVuZ3RoOyBpKyspIHsKLSAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwgaSksCi0gICAgICAgICAgVkFMVUVfTElTVF9HRVRfVkFMVUUgKHZhbHVlMSwgaSkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIDApLCB2YWx1ZTEpOwotICB9Ci0KLSAgaiA9IHZhbHVlMV9sZW5ndGg7Ci0gIHNraXBwZWQgPSAwOwotICBpZiAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHZhbHVlMikpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWUyX2xlbmd0aDsgaSsrKSB7Ci0gICAgICBza2lwID0gRkFMU0U7Ci0gICAgICBzcmMgPSBWQUxVRV9MSVNUX0dFVF9WQUxVRSAodmFsdWUyLCBpKTsKLSAgICAgIGZvciAoayA9IDA7IGsgPCB2YWx1ZTFfbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgaWYgKGdzdF92YWx1ZV9jb21wYXJlICgmZ19hcnJheV9pbmRleCAoYXJyYXksIEdWYWx1ZSwgayksCi0gICAgICAgICAgICAgICAgc3JjKSA9PSBHU1RfVkFMVUVfRVFVQUwpIHsKLSAgICAgICAgICBza2lwID0gVFJVRTsKLSAgICAgICAgICBza2lwcGVkKys7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghc2tpcCkgewotICAgICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoJmdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIGopLCBzcmMpOwotICAgICAgICBqKys7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIHNraXAgPSBGQUxTRTsKLSAgICBmb3IgKGsgPSAwOyBrIDwgdmFsdWUxX2xlbmd0aDsgaysrKSB7Ci0gICAgICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCBrKSwKLSAgICAgICAgICAgICAgdmFsdWUyKSA9PSBHU1RfVkFMVUVfRVFVQUwpIHsKLSAgICAgICAgc2tpcCA9IFRSVUU7Ci0gICAgICAgIHNraXBwZWQrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghc2tpcCkgewotICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZnX2FycmF5X2luZGV4IChhcnJheSwgR1ZhbHVlLCBqKSwgdmFsdWUyKTsKLSAgICB9Ci0gIH0KLSAgaWYgKHNraXBwZWQpIHsKLSAgICBndWludCBuZXdfc2l6ZSA9IHZhbHVlMV9sZW5ndGggKyAodmFsdWUyX2xlbmd0aCAtIHNraXBwZWQpOwotCi0gICAgaWYgKG5ld19zaXplID4gMSkgewotICAgICAgLyogc2hyaW5rIGxpc3QgKi8KLSAgICAgIGdfYXJyYXlfc2V0X3NpemUgKGFycmF5LCBuZXdfc2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdWYWx1ZSBzaW5nbGVfZGVzdDsKLQotICAgICAgLyogc2l6ZSBpcyAxLCB0YWtlIHNpbmdsZSB2YWx1ZSBpbiBsaXN0IGFuZCBtYWtlIGl0IG5ldyBkZXN0ICovCi0gICAgICBzaW5nbGVfZGVzdCA9IGdfYXJyYXlfaW5kZXggKGFycmF5LCBHVmFsdWUsIDApOwotCi0gICAgICAvKiBjbGVhbiB1cCBvbGQgdmFsdWUgYWxsb2NhdGlvbnM6IG11c3Qgc2V0IGFycmF5IHNpemUgdG8gMCwgYmVjYXVzZQotICAgICAgICogYWxsb2NhdGVkIHZhbHVlcyBhcmUgbm90IGluaXRlZCBtZWFuaW5nIGdfdmFsdWVfdW5zZXQoKSB3aWxsIG5vdAotICAgICAgICogd29yayBvbiB0aGVtICovCi0gICAgICBnX2FycmF5X3NldF9zaXplIChhcnJheSwgMCk7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0IChkZXN0KTsKLQotICAgICAgLyogdGhlIHNpbmdsZSB2YWx1ZSBpcyBvdXIgbmV3IHJlc3VsdCAqLwotICAgICAgKmRlc3QgPSBzaW5nbGVfZGVzdDsKLSAgICB9Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZToKLSAqIEB2YWx1ZTogYSAjR1ZhbHVlIG9mIHR5cGUgI0dTVF9UWVBFX0xJU1QKLSAqCi0gKiBHZXRzIHRoZSBudW1iZXIgb2YgdmFsdWVzIGNvbnRhaW5lZCBpbiBAdmFsdWUuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiB2YWx1ZXMKLSAqLwotZ3VpbnQKLWdzdF92YWx1ZV9saXN0X2dldF9zaXplIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWx1ZSksIDApOwotCi0gIHJldHVybiAoKEdBcnJheSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpLT5sZW47Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlOgotICogQHZhbHVlOiBhICNHVmFsdWUgb2YgdHlwZSAjR1NUX1RZUEVfTElTVAotICogQGluZGV4OiBpbmRleCBvZiB2YWx1ZSB0byBnZXQgZnJvbSB0aGUgbGlzdAotICoKLSAqIEdldHMgdGhlIHZhbHVlIHRoYXQgaXMgYSBtZW1iZXIgb2YgdGhlIGxpc3QgY29udGFpbmVkIGluIEB2YWx1ZSBhbmQKLSAqIGhhcyB0aGUgaW5kZXggQGluZGV4LgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBpbmRleAotICovCi1jb25zdCBHVmFsdWUgKgotZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgaW5kZXgpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZGV4IDwgVkFMVUVfTElTVF9TSVpFICh2YWx1ZSksIE5VTEwpOwotCi0gIHJldHVybiAoY29uc3QgR1ZhbHVlICopICZnX2FycmF5X2luZGV4ICgoR0FycmF5ICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciwKLSAgICAgIEdWYWx1ZSwgaW5kZXgpOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWU6Ci0gKiBAdmFsdWU6IGEgI0dWYWx1ZSBvZiB0eXBlICNHU1RfVFlQRV9BUlJBWQotICogQGFwcGVuZF92YWx1ZTogdGhlIHZhbHVlIHRvIGFwcGVuZAotICoKLSAqIEFwcGVuZHMgQGFwcGVuZF92YWx1ZSB0byB0aGUgR3N0VmFsdWVBcnJheSBpbiBAdmFsdWUuCi0gKi8KLXZvaWQKLWdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBHVmFsdWUgKiBhcHBlbmRfdmFsdWUpCi17Ci0gIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0FSUkFZICh2YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFIChhcHBlbmRfdmFsdWUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfYXJlX2NvbXBhdGlibGUgKHZhbHVlLAotICAgICAgICAgIGFwcGVuZF92YWx1ZSkpOwotCi0gIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmdmFsLCBhcHBlbmRfdmFsdWUpOwotICBnX2FycmF5X2FwcGVuZF92YWxzICgoR0FycmF5ICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciwgJnZhbCwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2dzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKEdWYWx1ZSAqIHZhbHVlLCBHVmFsdWUgKiBhcHBlbmRfdmFsdWUpCi17Ci0gIGdfYXJyYXlfYXBwZW5kX3ZhbHMgKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyLCBhcHBlbmRfdmFsdWUsIDEpOwotICBtZW1zZXQgKGFwcGVuZF92YWx1ZSwgMCwgc2l6ZW9mIChHVmFsdWUpKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2FuZF90YWtlX3ZhbHVlOgotICogQHZhbHVlOiBhICNHVmFsdWUgb2YgdHlwZSAjR1NUX1RZUEVfQVJSQVkKLSAqIEBhcHBlbmRfdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogdGhlIHZhbHVlIHRvIGFwcGVuZAotICoKLSAqIEFwcGVuZHMgQGFwcGVuZF92YWx1ZSB0byB0aGUgR3N0VmFsdWVBcnJheSBpbiBAdmFsdWUuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2FuZF90YWtlX3ZhbHVlIChHVmFsdWUgKiB2YWx1ZSwgR1ZhbHVlICogYXBwZW5kX3ZhbHVlKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfQVJSQVkgKHZhbHVlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKGFwcGVuZF92YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdmFsdWVfbGlzdF9vcl9hcnJheV9hcmVfY29tcGF0aWJsZSAodmFsdWUsCi0gICAgICAgICAgYXBwZW5kX3ZhbHVlKSk7Ci0KLSAgX2dzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKHZhbHVlLCBhcHBlbmRfdmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlOgotICogQHZhbHVlOiBhICNHVmFsdWUgb2YgdHlwZSAjR1NUX1RZUEVfQVJSQVkKLSAqIEBwcmVwZW5kX3ZhbHVlOiB0aGUgdmFsdWUgdG8gcHJlcGVuZAotICoKLSAqIFByZXBlbmRzIEBwcmVwZW5kX3ZhbHVlIHRvIHRoZSBHc3RWYWx1ZUFycmF5IGluIEB2YWx1ZS4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX2FycmF5X3ByZXBlbmRfdmFsdWUgKEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBHVmFsdWUgKiBwcmVwZW5kX3ZhbHVlKQotewotICBHVmFsdWUgdmFsID0geyAwLCB9OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19BUlJBWSAodmFsdWUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAocHJlcGVuZF92YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdmFsdWVfbGlzdF9vcl9hcnJheV9hcmVfY29tcGF0aWJsZSAodmFsdWUsCi0gICAgICAgICAgcHJlcGVuZF92YWx1ZSkpOwotCi0gIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmdmFsLCBwcmVwZW5kX3ZhbHVlKTsKLSAgZ19hcnJheV9wcmVwZW5kX3ZhbHMgKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyLCAmdmFsLCAxKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemU6Ci0gKiBAdmFsdWU6IGEgI0dWYWx1ZSBvZiB0eXBlICNHU1RfVFlQRV9BUlJBWQotICoKLSAqIEdldHMgdGhlIG51bWJlciBvZiB2YWx1ZXMgY29udGFpbmVkIGluIEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHZhbHVlcwotICovCi1ndWludAotZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19BUlJBWSAodmFsdWUpLCAwKTsKLQotICByZXR1cm4gKChHQXJyYXkgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKS0+bGVuOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWU6Ci0gKiBAdmFsdWU6IGEgI0dWYWx1ZSBvZiB0eXBlICNHU1RfVFlQRV9BUlJBWQotICogQGluZGV4OiBpbmRleCBvZiB2YWx1ZSB0byBnZXQgZnJvbSB0aGUgYXJyYXkKLSAqCi0gKiBHZXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGEgbWVtYmVyIG9mIHRoZSBhcnJheSBjb250YWluZWQgaW4gQHZhbHVlIGFuZAotICogaGFzIHRoZSBpbmRleCBAaW5kZXguCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGluZGV4Ci0gKi8KLWNvbnN0IEdWYWx1ZSAqCi1nc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgaW5kZXgpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfQVJSQVkgKHZhbHVlKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmRleCA8IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAodmFsdWUpLCBOVUxMKTsKLQotICByZXR1cm4gKGNvbnN0IEdWYWx1ZSAqKSAmZ19hcnJheV9pbmRleCAoKEdBcnJheSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIsCi0gICAgICBHVmFsdWUsIGluZGV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV90cmFuc2Zvcm1fbGlzdF9zdHJpbmcgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9hbnlfbGlzdF9zdHJpbmcgKHNyY192YWx1ZSwgZGVzdF92YWx1ZSwgInsgIiwgIiB9Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX2FycmF5X3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLCBHVmFsdWUgKiBkZXN0X3ZhbHVlKQotewotICBnc3RfdmFsdWVfdHJhbnNmb3JtX2FueV9saXN0X3N0cmluZyAoc3JjX3ZhbHVlLCBkZXN0X3ZhbHVlLCAiPCAiLCAiID4iKTsKLX0KLQotLyogRG8gYW4gdW5vcmRlcmVkIGNvbXBhcmUgb2YgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCAqLwotc3RhdGljIGdpbnQKLWdzdF92YWx1ZV9jb21wYXJlX3ZhbHVlX2xpc3QgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBndWludCBpLCBqOwotICBHQXJyYXkgKmFycmF5MSA9IHZhbHVlMS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIEdBcnJheSAqYXJyYXkyID0gdmFsdWUyLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgR1ZhbHVlICp2MTsKLSAgR1ZhbHVlICp2MjsKLSAgZ2ludCBsZW4sIHRvX3JlbW92ZTsKLSAgZ3VpbnQ4ICpyZW1vdmVkOwotICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7Ci0KLSAgLyogZ2V0IGxlbmd0aCBhbmQgZG8gaW5pdGlhbCBsZW5ndGggY2hlY2suICovCi0gIGxlbiA9IGFycmF5MS0+bGVuOwotICBpZiAobGVuICE9IGFycmF5Mi0+bGVuKQotICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotCi0gIC8qIHBsYWNlIHRvIG1hcmsgcmVtb3ZlZCB2YWx1ZSBpbmRpY2VzIG9mIGFycmF5MiAqLwotICByZW1vdmVkID0gZ19uZXdhIChndWludDgsIGxlbik7Ci0gIG1lbXNldCAocmVtb3ZlZCwgMCwgbGVuKTsKLSAgdG9fcmVtb3ZlID0gbGVuOwotCi0gIC8qIGxvb3Agb3ZlciBhcnJheTEsIGFsbCBpdGVtcyBzaG91bGQgYmUgaW4gYXJyYXkyLiBXaGVuIHdlIGZpbmQgYW4KLSAgICogaXRlbSBpbiBhcnJheTIsIHJlbW92ZSBpdCBmcm9tIGFycmF5MiBieSBtYXJraW5nIGl0IGFzIHJlbW92ZWQgKi8KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgdjEgPSAmZ19hcnJheV9pbmRleCAoYXJyYXkxLCBHVmFsdWUsIGkpOwotICAgIGlmICgoY29tcGFyZSA9IGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jICh2MSkpKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgICAgLyogaXRlbSBpcyByZW1vdmVkLCB3ZSBjYW4gc2tpcCBpdCAqLwotICAgICAgICBpZiAocmVtb3ZlZFtqXSkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdjIgPSAmZ19hcnJheV9pbmRleCAoYXJyYXkyLCBHVmFsdWUsIGopOwotICAgICAgICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jICh2MSwgdjIsIGNvbXBhcmUpID09IEdTVF9WQUxVRV9FUVVBTCkgewotICAgICAgICAgIC8qIG1hcmsgaXRlbSBhcyByZW1vdmVkIG5vdyB0aGF0IHdlIGZvdW5kIGl0IGluIGFycmF5MiBhbmQKLSAgICAgICAgICAgKiBkZWNyZW1lbnQgdGhlIG51bWJlciBvZiByZW1haW5pbmcgaXRlbXMgaW4gYXJyYXkyLiAqLwotICAgICAgICAgIHJlbW92ZWRbal0gPSAxOwotICAgICAgICAgIHRvX3JlbW92ZS0tOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBpdGVtIGluIGFycmF5MSBhbmQgbm90IGluIGFycmF5MiwgVU5PUkRFUkVEICovCi0gICAgICBpZiAoaiA9PSBsZW4pCi0gICAgICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotICAgIH0gZWxzZQotICAgICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0gIH0KLSAgLyogaWYgbm90IGFsbCBpdGVtcyB3ZXJlIHJlbW92ZWQsIGFycmF5MiBjb250YWluZWQgc29tZXRoaW5nIG5vdCBpbiBhcnJheTEgKi8KLSAgaWYgKHRvX3JlbW92ZSAhPSAwKQotICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotCi0gIC8qIGFycmF5cyBhcmUgZXF1YWwgKi8KLSAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLX0KLQotLyogUGVyZm9ybSBhbiBvcmRlcmVkIGNvbXBhcmlzb24gb2YgdGhlIGNvbnRlbnRzIG9mIGFuIGFycmF5ICovCi1zdGF0aWMgZ2ludAotZ3N0X3ZhbHVlX2NvbXBhcmVfdmFsdWVfYXJyYXkgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBndWludCBpOwotICBHQXJyYXkgKmFycmF5MSA9IHZhbHVlMS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIEdBcnJheSAqYXJyYXkyID0gdmFsdWUyLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgZ3VpbnQgbGVuID0gYXJyYXkxLT5sZW47Ci0gIEdWYWx1ZSAqdjE7Ci0gIEdWYWx1ZSAqdjI7Ci0KLSAgaWYgKGxlbiAhPSBhcnJheTItPmxlbikKLSAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICB2MSA9ICZnX2FycmF5X2luZGV4IChhcnJheTEsIEdWYWx1ZSwgaSk7Ci0gICAgdjIgPSAmZ19hcnJheV9pbmRleCAoYXJyYXkyLCBHVmFsdWUsIGkpOwotICAgIGlmIChnc3RfdmFsdWVfY29tcGFyZSAodjEsIHYyKSAhPSBHU1RfVkFMVUVfRVFVQUwpCi0gICAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLSAgfQotCi0gIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX3ZhbHVlX2xpc3QgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICByZXR1cm4gZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9hbnlfbGlzdCAodmFsdWUsICJ7ICIsICIgfSIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV92YWx1ZV9saXN0IChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIGdfd2FybmluZyAoImdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9saXN0OiB1bmltcGxlbWVudGVkIik7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9zZXJpYWxpemVfdmFsdWVfYXJyYXkgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICByZXR1cm4gZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9hbnlfbGlzdCAodmFsdWUsICI8ICIsICIgPiIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV92YWx1ZV9hcnJheSAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQotewotICBnX3dhcm5pbmcgKCJnc3RfdmFsdWVfZGVzZXJpYWxpemVfYXJyYXk6IHVuaW1wbGVtZW50ZWQiKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioqKioqKioqKioqKgotICogaW50IHJhbmdlICoKLSAqCi0gKiBWYWx1ZXMgaW4gdGhlIHJhbmdlIGFyZSBkZWZpbmVkIGFzIGFueSB2YWx1ZSBncmVhdGVyIG9yIGVxdWFsCi0gKiB0byBtaW4qc3RlcCwgQU5EIGxlc3NlciBvciBlcXVhbCB0byBtYXgqc3RlcC4KLSAqIEZvciBzdGVwID09IDEsIHRoaXMgZmFsbHMgYmFjayB0byB0aGUgdHJhZGl0aW9uYWwgcmFuZ2Ugc2VtYW50aWNzLgotICoKLSAqIGRhdGFbMF0gPSAobWluIDw8IDMyKSB8IChtYXgpCi0gKiBkYXRhWzFdID0gc3RlcAotICoKLSAqKioqKioqKioqKioqLwotCi0jZGVmaW5lIElOVF9SQU5HRV9NSU4odikgKChnaW50KSAoKCh2KS0+ZGF0YVswXS52X3VpbnQ2NCkgPj4gMzIpKQotI2RlZmluZSBJTlRfUkFOR0VfTUFYKHYpICgoZ2ludCkgKCgodiktPmRhdGFbMF0udl91aW50NjQpICYgMHhmZmZmZmZmZikpCi0jZGVmaW5lIElOVF9SQU5HRV9TVEVQKHYpICgodiktPmRhdGFbMV0udl9pbnQpCi0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfaW5pdF9pbnRfcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlKQotewotICBHX1NUQVRJQ19BU1NFUlQgKHNpemVvZiAoZ2ludCkgPD0gMiAqIHNpemVvZiAoZ3VpbnQ2NCkpOwotCi0gIHZhbHVlLT5kYXRhWzBdLnZfdWludDY0ID0gMDsKLSAgdmFsdWUtPmRhdGFbMV0udl9pbnQgPSAxOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX2NvcHlfaW50X3JhbmdlIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGRlc3RfdmFsdWUtPmRhdGFbMF0udl91aW50NjQgPSBzcmNfdmFsdWUtPmRhdGFbMF0udl91aW50NjQ7Ci0gIGRlc3RfdmFsdWUtPmRhdGFbMV0udl9pbnQgPSBzcmNfdmFsdWUtPmRhdGFbMV0udl9pbnQ7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfY29sbGVjdF9pbnRfcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlLCBndWludCBuX2NvbGxlY3RfdmFsdWVzLAotICAgIEdUeXBlQ1ZhbHVlICogY29sbGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3RfZmxhZ3MpCi17Ci0gIGlmIChuX2NvbGxlY3RfdmFsdWVzICE9IDIpCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIm5vdCBlbm91Z2ggdmFsdWUgbG9jYXRpb25zIGZvciBgJXMnIHBhc3NlZCIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotICBpZiAoY29sbGVjdF92YWx1ZXNbMF0udl9pbnQgPj0gY29sbGVjdF92YWx1ZXNbMV0udl9pbnQpCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInJhbmdlIHN0YXJ0IGlzIG5vdCBzbWFsbGVyIHRoYW4gZW5kIGZvciBgJXMnIiwKLSAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0KLSAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcCAodmFsdWUsIGNvbGxlY3RfdmFsdWVzWzBdLnZfaW50LAotICAgICAgY29sbGVjdF92YWx1ZXNbMV0udl9pbnQsIDEpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX2xjb3B5X2ludF9yYW5nZSAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsCi0gICAgR1R5cGVDVmFsdWUgKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykKLXsKLSAgZ3VpbnQzMiAqaW50X3JhbmdlX3N0YXJ0ID0gY29sbGVjdF92YWx1ZXNbMF0udl9wb2ludGVyOwotICBndWludDMyICppbnRfcmFuZ2VfZW5kID0gY29sbGVjdF92YWx1ZXNbMV0udl9wb2ludGVyOwotCi0gIGlmICghaW50X3JhbmdlX3N0YXJ0KQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJzdGFydCB2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotICBpZiAoIWludF9yYW5nZV9lbmQpCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoImVuZCB2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotCi0gICppbnRfcmFuZ2Vfc3RhcnQgPSBJTlRfUkFOR0VfTUlOICh2YWx1ZSk7Ci0gICppbnRfcmFuZ2VfZW5kID0gSU5UX1JBTkdFX01BWCAodmFsdWUpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlX3N0ZXA6Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVF9SQU5HRQotICogQHN0YXJ0OiB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlCi0gKiBAZW5kOiB0aGUgZW5kIG9mIHRoZSByYW5nZQotICogQHN0ZXA6IHRoZSBzdGVwIG9mIHRoZSByYW5nZQotICoKLSAqIFNldHMgQHZhbHVlIHRvIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgQHN0YXJ0LCBAZW5kIGFuZCBAc3RlcC4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcCAoR1ZhbHVlICogdmFsdWUsIGdpbnQgc3RhcnQsIGdpbnQgZW5kLCBnaW50IHN0ZXApCi17Ci0gIGd1aW50NjQgc3N0YXJ0LCBzc3RvcDsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICh2YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChzdGFydCA8IGVuZCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0ZXAgPiAwKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RhcnQgJSBzdGVwID09IDApOwotICBnX3JldHVybl9pZl9mYWlsIChlbmQgJSBzdGVwID09IDApOwotCi0gIHNzdGFydCA9IChndWludCkgKHN0YXJ0IC8gc3RlcCk7Ci0gIHNzdG9wID0gKGd1aW50KSAoZW5kIC8gc3RlcCk7Ci0gIHZhbHVlLT5kYXRhWzBdLnZfdWludDY0ID0gKHNzdGFydCA8PCAzMikgfCBzc3RvcDsKLSAgdmFsdWUtPmRhdGFbMV0udl9pbnQgPSBzdGVwOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlOgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlRfUkFOR0UKLSAqIEBzdGFydDogdGhlIHN0YXJ0IG9mIHRoZSByYW5nZQotICogQGVuZDogdGhlIGVuZCBvZiB0aGUgcmFuZ2UKLSAqCi0gKiBTZXRzIEB2YWx1ZSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEBzdGFydCBhbmQgQGVuZC4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlLCBnaW50IHN0YXJ0LCBnaW50IGVuZCkKLXsKLSAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcCAodmFsdWUsIHN0YXJ0LCBlbmQsIDEpOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbjoKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UX1JBTkdFCi0gKgotICogR2V0cyB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2UKLSAqLwotZ2ludAotZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHZhbHVlKSwgMCk7Ci0KLSAgcmV0dXJuIElOVF9SQU5HRV9NSU4gKHZhbHVlKSAqIElOVF9SQU5HRV9TVEVQICh2YWx1ZSk7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4OgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlRfUkFOR0UKLSAqCi0gKiBHZXRzIHRoZSBtYXhpbXVtIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgQHZhbHVlLgotICoKLSAqIFJldHVybnM6IHRoZSBtYXhpbXVtIG9mIHRoZSByYW5nZQotICovCi1naW50Ci1nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodmFsdWUpLCAwKTsKLQotICByZXR1cm4gSU5UX1JBTkdFX01BWCAodmFsdWUpICogSU5UX1JBTkdFX1NURVAgKHZhbHVlKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9zdGVwOgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlRfUkFOR0UKLSAqCi0gKiBHZXRzIHRoZSBzdGVwIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgQHZhbHVlLgotICoKLSAqIFJldHVybnM6IHRoZSBzdGVwIG9mIHRoZSByYW5nZQotICovCi1naW50Ci1nc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9zdGVwIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHZhbHVlKSwgMCk7Ci0KLSAgcmV0dXJuIElOVF9SQU5HRV9TVEVQICh2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX2ludF9yYW5nZV9zdHJpbmcgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwKLSAgICBHVmFsdWUgKiBkZXN0X3ZhbHVlKQotewotICBpZiAoSU5UX1JBTkdFX1NURVAgKHNyY192YWx1ZSkgPT0gMSkKLSAgICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IGdfc3RyZHVwX3ByaW50ZiAoIlslZCwlZF0iLAotICAgICAgICBJTlRfUkFOR0VfTUlOIChzcmNfdmFsdWUpLCBJTlRfUkFOR0VfTUFYIChzcmNfdmFsdWUpKTsKLSAgZWxzZQotICAgIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gZ19zdHJkdXBfcHJpbnRmICgiWyVkLCVkLCVkXSIsCi0gICAgICAgIElOVF9SQU5HRV9NSU4gKHNyY192YWx1ZSkgKiBJTlRfUkFOR0VfU1RFUCAoc3JjX3ZhbHVlKSwKLSAgICAgICAgSU5UX1JBTkdFX01BWCAoc3JjX3ZhbHVlKSAqIElOVF9SQU5HRV9TVEVQIChzcmNfdmFsdWUpLAotICAgICAgICBJTlRfUkFOR0VfU1RFUCAoc3JjX3ZhbHVlKSk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9pbnRfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICAvKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gZWFjaCByYW5nZSAqLwotICBnaW50IG4xID0gSU5UX1JBTkdFX01BWCAodmFsdWUxKSAtIElOVF9SQU5HRV9NSU4gKHZhbHVlMSkgKyAxOwotICBnaW50IG4yID0gSU5UX1JBTkdFX01BWCAodmFsdWUyKSAtIElOVF9SQU5HRV9NSU4gKHZhbHVlMikgKyAxOwotCi0gIC8qIHRoZXkgbXVzdCBiZSBlcXVhbCAqLwotICBpZiAobjEgIT0gbjIpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0KLSAgLyogaWYgZW1wdHksIGVxdWFsICovCi0gIGlmIChuMSA9PSAwKQotICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0KLSAgLyogaWYgbW9yZSB0aGFuIG9uZSB2YWx1ZSwgdGhlbiBpdCBpcyBvbmx5IGVxdWFsIGlmIHRoZSBzdGVwIGlzIGVxdWFsCi0gICAgIGFuZCBib3VuZHMgbGllIG9uIHRoZSBzYW1lIHZhbHVlICovCi0gIGlmIChuMSA+IDEpIHsKLSAgICBpZiAoSU5UX1JBTkdFX1NURVAgKHZhbHVlMSkgPT0gSU5UX1JBTkdFX1NURVAgKHZhbHVlMikgJiYKLSAgICAgICAgSU5UX1JBTkdFX01JTiAodmFsdWUxKSA9PSBJTlRfUkFOR0VfTUlOICh2YWx1ZTIpICYmCi0gICAgICAgIElOVF9SQU5HRV9NQVggKHZhbHVlMSkgPT0gSU5UX1JBTkdFX01BWCAodmFsdWUyKSkgewotICAgICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogaWYganVzdCBvbmUsIG9ubHkgaWYgdGhlIHZhbHVlIGlzIGVxdWFsICovCi0gICAgaWYgKElOVF9SQU5HRV9NSU4gKHZhbHVlMSkgPT0gSU5UX1JBTkdFX01JTiAodmFsdWUyKSkKLSAgICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0gICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0gIH0KLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9zZXJpYWxpemVfaW50X3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgaWYgKElOVF9SQU5HRV9TVEVQICh2YWx1ZSkgPT0gMSkKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiWyAlZCwgJWQgXSIsIElOVF9SQU5HRV9NSU4gKHZhbHVlKSwKLSAgICAgICAgSU5UX1JBTkdFX01BWCAodmFsdWUpKTsKLSAgZWxzZQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJbICVkLCAlZCwgJWQgXSIsCi0gICAgICAgIElOVF9SQU5HRV9NSU4gKHZhbHVlKSAqIElOVF9SQU5HRV9TVEVQICh2YWx1ZSksCi0gICAgICAgIElOVF9SQU5HRV9NQVggKHZhbHVlKSAqIElOVF9SQU5HRV9TVEVQICh2YWx1ZSksIElOVF9SQU5HRV9TVEVQICh2YWx1ZSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKLXsKLSAgZ193YXJuaW5nICgidW5pbXBsZW1lbnRlZCIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKioqKioqKioqKioqKioKLSAqIGludDY0IHJhbmdlICoKLSAqCi0gKiBWYWx1ZXMgaW4gdGhlIHJhbmdlIGFyZSBkZWZpbmVkIGFzIGFueSB2YWx1ZSBncmVhdGVyIG9yIGVxdWFsCi0gKiB0byBtaW4qc3RlcCwgQU5EIGxlc3NlciBvciBlcXVhbCB0byBtYXgqc3RlcC4KLSAqIEZvciBzdGVwID09IDEsIHRoaXMgZmFsbHMgYmFjayB0byB0aGUgdHJhZGl0aW9uYWwgcmFuZ2Ugc2VtYW50aWNzLgotICoqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBJTlQ2NF9SQU5HRV9NSU4odikgKCgoZ2ludDY0ICopKCh2KS0+ZGF0YVswXS52X3BvaW50ZXIpKVswXSkKLSNkZWZpbmUgSU5UNjRfUkFOR0VfTUFYKHYpICgoKGdpbnQ2NCAqKSgodiktPmRhdGFbMF0udl9wb2ludGVyKSlbMV0pCi0jZGVmaW5lIElOVDY0X1JBTkdFX1NURVAodikgKCgoZ2ludDY0ICopKCh2KS0+ZGF0YVswXS52X3BvaW50ZXIpKVsyXSkKLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9pbml0X2ludDY0X3JhbmdlIChHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ2ludDY0ICp2YWxzID0gZ19zbGljZV9hbGxvYzAgKDMgKiBzaXplb2YgKGdpbnQ2NCkpOwotICB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSB2YWxzOwotICBJTlQ2NF9SQU5HRV9NSU4gKHZhbHVlKSA9IDA7Ci0gIElOVDY0X1JBTkdFX01BWCAodmFsdWUpID0gMDsKLSAgSU5UNjRfUkFOR0VfU1RFUCAodmFsdWUpID0gMTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9mcmVlX2ludDY0X3JhbmdlIChHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh2YWx1ZSkpOwotICBnX3NsaWNlX2ZyZWUxICgzICogc2l6ZW9mIChnaW50NjQpLCB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOwotICB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX2NvcHlfaW50NjRfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZ2ludDY0ICp2YWxzID0gKGdpbnQ2NCAqKSBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgZ2ludDY0ICpzcmNfdmFscyA9IChnaW50NjQgKikgc3JjX3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLQotICBpZiAodmFscyA9PSBOVUxMKSB7Ci0gICAgZ3N0X3ZhbHVlX2luaXRfaW50NjRfcmFuZ2UgKGRlc3RfdmFsdWUpOwotICB9Ci0KLSAgaWYgKHNyY192YWxzICE9IE5VTEwpIHsKLSAgICBJTlQ2NF9SQU5HRV9NSU4gKGRlc3RfdmFsdWUpID0gSU5UNjRfUkFOR0VfTUlOIChzcmNfdmFsdWUpOwotICAgIElOVDY0X1JBTkdFX01BWCAoZGVzdF92YWx1ZSkgPSBJTlQ2NF9SQU5HRV9NQVggKHNyY192YWx1ZSk7Ci0gICAgSU5UNjRfUkFOR0VfU1RFUCAoZGVzdF92YWx1ZSkgPSBJTlQ2NF9SQU5HRV9TVEVQIChzcmNfdmFsdWUpOwotICB9Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfY29sbGVjdF9pbnQ2NF9yYW5nZSAoR1ZhbHVlICogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsCi0gICAgR1R5cGVDVmFsdWUgKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykKLXsKLSAgZ2ludDY0ICp2YWxzID0gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOwotCi0gIGlmIChuX2NvbGxlY3RfdmFsdWVzICE9IDIpCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIm5vdCBlbm91Z2ggdmFsdWUgbG9jYXRpb25zIGZvciBgJXMnIHBhc3NlZCIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotICBpZiAoY29sbGVjdF92YWx1ZXNbMF0udl9pbnQ2NCA+PSBjb2xsZWN0X3ZhbHVlc1sxXS52X2ludDY0KQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJyYW5nZSBzdGFydCBpcyBub3Qgc21hbGxlciB0aGFuIGVuZCBmb3IgYCVzJyIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotCi0gIGlmICh2YWxzID09IE5VTEwpIHsKLSAgICBnc3RfdmFsdWVfaW5pdF9pbnQ2NF9yYW5nZSAodmFsdWUpOwotICB9Ci0KLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZV9zdGVwICh2YWx1ZSwgY29sbGVjdF92YWx1ZXNbMF0udl9pbnQ2NCwKLSAgICAgIGNvbGxlY3RfdmFsdWVzWzFdLnZfaW50NjQsIDEpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX2xjb3B5X2ludDY0X3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBndWludDY0ICppbnRfcmFuZ2Vfc3RhcnQgPSBjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7Ci0gIGd1aW50NjQgKmludF9yYW5nZV9lbmQgPSBjb2xsZWN0X3ZhbHVlc1sxXS52X3BvaW50ZXI7Ci0gIGd1aW50NjQgKmludF9yYW5nZV9zdGVwID0gY29sbGVjdF92YWx1ZXNbMl0udl9wb2ludGVyOwotICBnaW50NjQgKnZhbHMgPSAoZ2ludDY0ICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLQotICBpZiAoIWludF9yYW5nZV9zdGFydCkKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgic3RhcnQgdmFsdWUgbG9jYXRpb24gZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgaWYgKCFpbnRfcmFuZ2VfZW5kKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJlbmQgdmFsdWUgbG9jYXRpb24gZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgaWYgKCFpbnRfcmFuZ2Vfc3RlcCkKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgic3RlcCB2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotCi0gIGlmIChHX1VOTElLRUxZICh2YWxzID09IE5VTEwpKSB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIlVuaW5pdGlhbGlzZWQgYCVzJyBwYXNzZWQiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgfQotCi0gICppbnRfcmFuZ2Vfc3RhcnQgPSBJTlQ2NF9SQU5HRV9NSU4gKHZhbHVlKTsKLSAgKmludF9yYW5nZV9lbmQgPSBJTlQ2NF9SQU5HRV9NQVggKHZhbHVlKTsKLSAgKmludF9yYW5nZV9zdGVwID0gSU5UNjRfUkFOR0VfU1RFUCAodmFsdWUpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2Vfc3RlcDoKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UNjRfUkFOR0UKLSAqIEBzdGFydDogdGhlIHN0YXJ0IG9mIHRoZSByYW5nZQotICogQGVuZDogdGhlIGVuZCBvZiB0aGUgcmFuZ2UKLSAqIEBzdGVwOiB0aGUgc3RlcCBvZiB0aGUgcmFuZ2UKLSAqCi0gKiBTZXRzIEB2YWx1ZSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEBzdGFydCwgQGVuZCBhbmQgQHN0ZXAuCi0gKi8KLXZvaWQKLWdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2Vfc3RlcCAoR1ZhbHVlICogdmFsdWUsIGdpbnQ2NCBzdGFydCwgZ2ludDY0IGVuZCwKLSAgICBnaW50NjQgc3RlcCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh2YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChzdGFydCA8IGVuZCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0ZXAgPiAwKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RhcnQgJSBzdGVwID09IDApOwotICBnX3JldHVybl9pZl9mYWlsIChlbmQgJSBzdGVwID09IDApOwotCi0gIElOVDY0X1JBTkdFX01JTiAodmFsdWUpID0gc3RhcnQgLyBzdGVwOwotICBJTlQ2NF9SQU5HRV9NQVggKHZhbHVlKSA9IGVuZCAvIHN0ZXA7Ci0gIElOVDY0X1JBTkdFX1NURVAgKHZhbHVlKSA9IHN0ZXA7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZToKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfSU5UNjRfUkFOR0UKLSAqIEBzdGFydDogdGhlIHN0YXJ0IG9mIHRoZSByYW5nZQotICogQGVuZDogdGhlIGVuZCBvZiB0aGUgcmFuZ2UKLSAqCi0gKiBTZXRzIEB2YWx1ZSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEBzdGFydCBhbmQgQGVuZC4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoR1ZhbHVlICogdmFsdWUsIGdpbnQ2NCBzdGFydCwgZ2ludDY0IGVuZCkKLXsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZV9zdGVwICh2YWx1ZSwgc3RhcnQsIGVuZCwgMSk7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW46Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVDY0X1JBTkdFCi0gKgotICogR2V0cyB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2UKLSAqLwotZ2ludDY0Ci1nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKHZhbHVlKSwgMCk7Ci0KLSAgcmV0dXJuIElOVDY0X1JBTkdFX01JTiAodmFsdWUpICogSU5UNjRfUkFOR0VfU1RFUCAodmFsdWUpOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4OgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9JTlQ2NF9SQU5HRQotICoKLSAqIEdldHMgdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAdmFsdWUuCi0gKgotICogUmV0dXJuczogdGhlIG1heGltdW0gb2YgdGhlIHJhbmdlCi0gKi8KLWdpbnQ2NAotZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh2YWx1ZSksIDApOwotCi0gIHJldHVybiBJTlQ2NF9SQU5HRV9NQVggKHZhbHVlKSAqIElOVDY0X1JBTkdFX1NURVAgKHZhbHVlKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXA6Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0lOVDY0X1JBTkdFCi0gKgotICogR2V0cyB0aGUgc3RlcCBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgc3RlcCBvZiB0aGUgcmFuZ2UKLSAqLwotZ2ludDY0Ci1nc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXAgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh2YWx1ZSksIDApOwotCi0gIHJldHVybiBJTlQ2NF9SQU5HRV9TVEVQICh2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX2ludDY0X3JhbmdlX3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAotICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGlmIChJTlQ2NF9SQU5HRV9TVEVQIChzcmNfdmFsdWUpID09IDEpCi0gICAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPQotICAgICAgICBnX3N0cmR1cF9wcmludGYgKCIoZ2ludDY0KVslIiBHX0dJTlQ2NF9GT1JNQVQgIiwlIiBHX0dJTlQ2NF9GT1JNQVQgIl0iLAotICAgICAgICBJTlQ2NF9SQU5HRV9NSU4gKHNyY192YWx1ZSksIElOVDY0X1JBTkdFX01BWCAoc3JjX3ZhbHVlKSk7Ci0gIGVsc2UKLSAgICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9Ci0gICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoIihnaW50NjQpWyUiIEdfR0lOVDY0X0ZPUk1BVCAiLCUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAiLCUiIEdfR0lOVDY0X0ZPUk1BVCAiXSIsCi0gICAgICAgIElOVDY0X1JBTkdFX01JTiAoc3JjX3ZhbHVlKSAqIElOVDY0X1JBTkdFX1NURVAgKHNyY192YWx1ZSksCi0gICAgICAgIElOVDY0X1JBTkdFX01BWCAoc3JjX3ZhbHVlKSAqIElOVDY0X1JBTkdFX1NURVAgKHNyY192YWx1ZSksCi0gICAgICAgIElOVDY0X1JBTkdFX1NURVAgKHNyY192YWx1ZSkpOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3ZhbHVlX2NvbXBhcmVfaW50NjRfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICAvKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gZWFjaCByYW5nZSAqLwotICBnaW50NjQgbjEgPSBJTlQ2NF9SQU5HRV9NQVggKHZhbHVlMSkgLSBJTlQ2NF9SQU5HRV9NSU4gKHZhbHVlMSkgKyAxOwotICBnaW50NjQgbjIgPSBJTlQ2NF9SQU5HRV9NQVggKHZhbHVlMikgLSBJTlQ2NF9SQU5HRV9NSU4gKHZhbHVlMikgKyAxOwotCi0gIC8qIHRoZXkgbXVzdCBiZSBlcXVhbCAqLwotICBpZiAobjEgIT0gbjIpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0KLSAgLyogaWYgZW1wdHksIGVxdWFsICovCi0gIGlmIChuMSA9PSAwKQotICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0KLSAgLyogaWYgbW9yZSB0aGFuIG9uZSB2YWx1ZSwgdGhlbiBpdCBpcyBvbmx5IGVxdWFsIGlmIHRoZSBzdGVwIGlzIGVxdWFsCi0gICAgIGFuZCBib3VuZHMgbGllIG9uIHRoZSBzYW1lIHZhbHVlICovCi0gIGlmIChuMSA+IDEpIHsKLSAgICBpZiAoSU5UNjRfUkFOR0VfU1RFUCAodmFsdWUxKSA9PSBJTlQ2NF9SQU5HRV9TVEVQICh2YWx1ZTIpICYmCi0gICAgICAgIElOVDY0X1JBTkdFX01JTiAodmFsdWUxKSA9PSBJTlQ2NF9SQU5HRV9NSU4gKHZhbHVlMikgJiYKLSAgICAgICAgSU5UNjRfUkFOR0VfTUFYICh2YWx1ZTEpID09IElOVDY0X1JBTkdFX01BWCAodmFsdWUyKSkgewotICAgICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogaWYganVzdCBvbmUsIG9ubHkgaWYgdGhlIHZhbHVlIGlzIGVxdWFsICovCi0gICAgaWYgKElOVDY0X1JBTkdFX01JTiAodmFsdWUxKSA9PSBJTlQ2NF9SQU5HRV9NSU4gKHZhbHVlMikpCi0gICAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotICB9Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX2ludDY0X3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgaWYgKElOVDY0X1JBTkdFX1NURVAgKHZhbHVlKSA9PSAxKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJbICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBdIiwKLSAgICAgICAgSU5UNjRfUkFOR0VfTUlOICh2YWx1ZSksIElOVDY0X1JBTkdFX01BWCAodmFsdWUpKTsKLSAgZWxzZQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJbICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgJSIKLSAgICAgICAgR19HSU5UNjRfRk9STUFUICIgXSIsCi0gICAgICAgIElOVDY0X1JBTkdFX01JTiAodmFsdWUpICogSU5UNjRfUkFOR0VfU1RFUCAodmFsdWUpLAotICAgICAgICBJTlQ2NF9SQU5HRV9NQVggKHZhbHVlKSAqIElOVDY0X1JBTkdFX1NURVAgKHZhbHVlKSwKLSAgICAgICAgSU5UNjRfUkFOR0VfU1RFUCAodmFsdWUpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfaW50NjRfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKLXsKLSAgZ193YXJuaW5nICgidW5pbXBsZW1lbnRlZCIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKioqKioqKioqKioqKioqCi0gKiBkb3VibGUgcmFuZ2UgKgotICoqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfaW5pdF9kb3VibGVfcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlKQotewotICB2YWx1ZS0+ZGF0YVswXS52X2RvdWJsZSA9IDA7Ci0gIHZhbHVlLT5kYXRhWzFdLnZfZG91YmxlID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9jb3B5X2RvdWJsZV9yYW5nZSAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLCBHVmFsdWUgKiBkZXN0X3ZhbHVlKQotewotICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfZG91YmxlID0gc3JjX3ZhbHVlLT5kYXRhWzBdLnZfZG91YmxlOwotICBkZXN0X3ZhbHVlLT5kYXRhWzFdLnZfZG91YmxlID0gc3JjX3ZhbHVlLT5kYXRhWzFdLnZfZG91YmxlOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX2NvbGxlY3RfZG91YmxlX3JhbmdlIChHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBpZiAobl9jb2xsZWN0X3ZhbHVlcyAhPSAyKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJub3QgZW5vdWdoIHZhbHVlIGxvY2F0aW9ucyBmb3IgYCVzJyBwYXNzZWQiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgaWYgKGNvbGxlY3RfdmFsdWVzWzBdLnZfZG91YmxlID49IGNvbGxlY3RfdmFsdWVzWzFdLnZfZG91YmxlKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJyYW5nZSBzdGFydCBpcyBub3Qgc21hbGxlciB0aGFuIGVuZCBmb3IgYCVzJyIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotCi0gIHZhbHVlLT5kYXRhWzBdLnZfZG91YmxlID0gY29sbGVjdF92YWx1ZXNbMF0udl9kb3VibGU7Ci0gIHZhbHVlLT5kYXRhWzFdLnZfZG91YmxlID0gY29sbGVjdF92YWx1ZXNbMV0udl9kb3VibGU7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfbGNvcHlfZG91YmxlX3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBnZG91YmxlICpkb3VibGVfcmFuZ2Vfc3RhcnQgPSBjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7Ci0gIGdkb3VibGUgKmRvdWJsZV9yYW5nZV9lbmQgPSBjb2xsZWN0X3ZhbHVlc1sxXS52X3BvaW50ZXI7Ci0KLSAgaWYgKCFkb3VibGVfcmFuZ2Vfc3RhcnQpCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInN0YXJ0IHZhbHVlIGxvY2F0aW9uIGZvciBgJXMnIHBhc3NlZCBhcyBOVUxMIiwKLSAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0gIGlmICghZG91YmxlX3JhbmdlX2VuZCkKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiZW5kIHZhbHVlIGxvY2F0aW9uIGZvciBgJXMnIHBhc3NlZCBhcyBOVUxMIiwKLSAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0KLSAgKmRvdWJsZV9yYW5nZV9zdGFydCA9IHZhbHVlLT5kYXRhWzBdLnZfZG91YmxlOwotICAqZG91YmxlX3JhbmdlX2VuZCA9IHZhbHVlLT5kYXRhWzFdLnZfZG91YmxlOwotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlOgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9ET1VCTEVfUkFOR0UKLSAqIEBzdGFydDogdGhlIHN0YXJ0IG9mIHRoZSByYW5nZQotICogQGVuZDogdGhlIGVuZCBvZiB0aGUgcmFuZ2UKLSAqCi0gKiBTZXRzIEB2YWx1ZSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEBzdGFydCBhbmQgQGVuZC4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlLCBnZG91YmxlIHN0YXJ0LCBnZG91YmxlIGVuZCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0RPVUJMRV9SQU5HRSAodmFsdWUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RhcnQgPCBlbmQpOwotCi0gIHZhbHVlLT5kYXRhWzBdLnZfZG91YmxlID0gc3RhcnQ7Ci0gIHZhbHVlLT5kYXRhWzFdLnZfZG91YmxlID0gZW5kOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbjoKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRE9VQkxFX1JBTkdFCi0gKgotICogR2V0cyB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2UKLSAqLwotZ2RvdWJsZQotZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKHZhbHVlKSwgMCk7Ci0KLSAgcmV0dXJuIHZhbHVlLT5kYXRhWzBdLnZfZG91YmxlOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heDoKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRE9VQkxFX1JBTkdFCi0gKgotICogR2V0cyB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2UKLSAqLwotZ2RvdWJsZQotZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4IChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKHZhbHVlKSwgMCk7Ci0KLSAgcmV0dXJuIHZhbHVlLT5kYXRhWzFdLnZfZG91YmxlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3RyYW5zZm9ybV9kb3VibGVfcmFuZ2Vfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZ2NoYXIgczFbR19BU0NJSV9EVE9TVFJfQlVGX1NJWkVdLCBzMltHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRV07Ci0KLSAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwKLSAgICAgIGdfYXNjaWlfZHRvc3RyIChzMSwgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsCi0gICAgICAgICAgc3JjX3ZhbHVlLT5kYXRhWzBdLnZfZG91YmxlKSwKLSAgICAgIGdfYXNjaWlfZHRvc3RyIChzMiwgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsCi0gICAgICAgICAgc3JjX3ZhbHVlLT5kYXRhWzFdLnZfZG91YmxlKSk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9kb3VibGVfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBpZiAodmFsdWUyLT5kYXRhWzBdLnZfZG91YmxlID09IHZhbHVlMS0+ZGF0YVswXS52X2RvdWJsZSAmJgotICAgICAgdmFsdWUyLT5kYXRhWzFdLnZfZG91YmxlID09IHZhbHVlMS0+ZGF0YVsxXS52X2RvdWJsZSkKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9zZXJpYWxpemVfZG91YmxlX3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ2NoYXIgZDFbR19BU0NJSV9EVE9TVFJfQlVGX1NJWkVdOwotICBnY2hhciBkMltHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRV07Ci0KLSAgZ19hc2NpaV9kdG9zdHIgKGQxLCBHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSwgdmFsdWUtPmRhdGFbMF0udl9kb3VibGUpOwotICBnX2FzY2lpX2R0b3N0ciAoZDIsIEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFLCB2YWx1ZS0+ZGF0YVsxXS52X2RvdWJsZSk7Ci0gIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJbICVzLCAlcyBdIiwgZDEsIGQyKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfZG91YmxlX3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIGdfd2FybmluZyAoInVuaW1wbGVtZW50ZWQiKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioqKioqKioqKioqKioqKgotICogZnJhY3Rpb24gcmFuZ2UgKgotICoqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfaW5pdF9mcmFjdGlvbl9yYW5nZSAoR1ZhbHVlICogdmFsdWUpCi17Ci0gIEdWYWx1ZSAqdmFsczsKLSAgR1R5cGUgZnR5cGU7Ci0KLSAgZnR5cGUgPSBHU1RfVFlQRV9GUkFDVElPTjsKLQotICB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSB2YWxzID0gZ19zbGljZV9hbGxvYzAgKDIgKiBzaXplb2YgKEdWYWx1ZSkpOwotICBnX3ZhbHVlX2luaXQgKCZ2YWxzWzBdLCBmdHlwZSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbHNbMV0sIGZ0eXBlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9mcmVlX2ZyYWN0aW9uX3JhbmdlIChHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR1ZhbHVlICp2YWxzID0gKEdWYWx1ZSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0KLSAgaWYgKHZhbHMgIT0gTlVMTCkgewotICAgIC8qIHdlIGtub3cgdGhlIHR3byB2YWx1ZXMgY29udGFpbiBmcmFjdGlvbnMgd2l0aG91dCBpbnRlcm5hbCBhbGxvY3MgKi8KLSAgICAvKiBnX3ZhbHVlX3Vuc2V0ICgmdmFsc1swXSk7ICovCi0gICAgLyogZ192YWx1ZV91bnNldCAoJnZhbHNbMV0pOyAqLwotICAgIGdfc2xpY2VfZnJlZTEgKDIgKiBzaXplb2YgKEdWYWx1ZSksIHZhbHMpOwotICAgIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9jb3B5X2ZyYWN0aW9uX3JhbmdlIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIEdWYWx1ZSAqdmFscyA9IChHVmFsdWUgKikgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIEdWYWx1ZSAqc3JjX3ZhbHMgPSAoR1ZhbHVlICopIHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0KLSAgaWYgKHZhbHMgPT0gTlVMTCkgewotICAgIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlIChkZXN0X3ZhbHVlKTsKLSAgICB2YWxzID0gZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIH0KLSAgaWYgKHNyY192YWxzICE9IE5VTEwpIHsKLSAgICBnX3ZhbHVlX2NvcHkgKCZzcmNfdmFsc1swXSwgJnZhbHNbMF0pOwotICAgIGdfdmFsdWVfY29weSAoJnNyY192YWxzWzFdLCAmdmFsc1sxXSk7Ci0gIH0KLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9jb2xsZWN0X2ZyYWN0aW9uX3JhbmdlIChHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBHVmFsdWUgKnZhbHMgPSAoR1ZhbHVlICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLQotICBpZiAobl9jb2xsZWN0X3ZhbHVlcyAhPSA0KQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJub3QgZW5vdWdoIHZhbHVlIGxvY2F0aW9ucyBmb3IgYCVzJyBwYXNzZWQiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgaWYgKGNvbGxlY3RfdmFsdWVzWzFdLnZfaW50ID09IDApCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInBhc3NlZCAnMCcgYXMgZmlyc3QgZGVub21pbmF0b3IgZm9yIGAlcyciLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgaWYgKGNvbGxlY3RfdmFsdWVzWzNdLnZfaW50ID09IDApCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInBhc3NlZCAnMCcgYXMgc2Vjb25kIGRlbm9taW5hdG9yIGZvciBgJXMnIiwKLSAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0gIGlmIChnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlIChjb2xsZWN0X3ZhbHVlc1swXS52X2ludCwKLSAgICAgICAgICBjb2xsZWN0X3ZhbHVlc1sxXS52X2ludCwgY29sbGVjdF92YWx1ZXNbMl0udl9pbnQsCi0gICAgICAgICAgY29sbGVjdF92YWx1ZXNbM10udl9pbnQpID49IDApCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInJhbmdlIHN0YXJ0IGlzIG5vdCBzbWFsbGVyIHRoYW4gZW5kIGZvciBgJXMnIiwKLSAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0KLSAgaWYgKHZhbHMgPT0gTlVMTCkgewotICAgIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlICh2YWx1ZSk7Ci0gICAgdmFscyA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgfQotCi0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ2YWxzWzBdLCBjb2xsZWN0X3ZhbHVlc1swXS52X2ludCwKLSAgICAgIGNvbGxlY3RfdmFsdWVzWzFdLnZfaW50KTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnZhbHNbMV0sIGNvbGxlY3RfdmFsdWVzWzJdLnZfaW50LAotICAgICAgY29sbGVjdF92YWx1ZXNbM10udl9pbnQpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX2xjb3B5X2ZyYWN0aW9uX3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBnaW50IGk7Ci0gIGdpbnQgKmRlc3RfdmFsdWVzWzRdOwotICBHVmFsdWUgKnZhbHMgPSAoR1ZhbHVlICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLQotICBpZiAoR19VTkxJS0VMWSAobl9jb2xsZWN0X3ZhbHVlcyAhPSA0KSkKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgibm90IGVub3VnaCB2YWx1ZSBsb2NhdGlvbnMgZm9yIGAlcycgcGFzc2VkIiwKLSAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotICAgIGlmIChHX1VOTElLRUxZIChjb2xsZWN0X3ZhbHVlc1tpXS52X3BvaW50ZXIgPT0gTlVMTCkpIHsKLSAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJ2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsCi0gICAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0gICAgfQotICAgIGRlc3RfdmFsdWVzW2ldID0gY29sbGVjdF92YWx1ZXNbaV0udl9wb2ludGVyOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHZhbHMgPT0gTlVMTCkpIHsKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiVW5pbml0aWFsaXNlZCBgJXMnIHBhc3NlZCIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotICB9Ci0KLSAgZGVzdF92YWx1ZXNbMF1bMF0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnZhbHNbMF0pOwotICBkZXN0X3ZhbHVlc1sxXVswXSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWxzWzBdKTsKLSAgZGVzdF92YWx1ZXNbMl1bMF0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnZhbHNbMV0pOwotICBkZXN0X3ZhbHVlc1szXVswXSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWxzWzFdKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZToKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UKLSAqIEBzdGFydDogdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSAoYSBHU1RfVFlQRV9GUkFDVElPTiBHVmFsdWUpCi0gKiBAZW5kOiB0aGUgZW5kIG9mIHRoZSByYW5nZSAoYSBHU1RfVFlQRV9GUkFDVElPTiBHVmFsdWUpCi0gKgotICogU2V0cyBAdmFsdWUgdG8gdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAc3RhcnQgYW5kIEBlbmQuCi0gKi8KLXZvaWQKLWdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBHVmFsdWUgKiBzdGFydCwKLSAgICBjb25zdCBHVmFsdWUgKiBlbmQpCi17Ci0gIEdWYWx1ZSAqdmFsczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKHZhbHVlKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAoc3RhcnQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OIChlbmQpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZSAoc3RhcnQtPmRhdGFbMF0udl9pbnQsCi0gICAgICAgICAgc3RhcnQtPmRhdGFbMV0udl9pbnQsIGVuZC0+ZGF0YVswXS52X2ludCwgZW5kLT5kYXRhWzFdLnZfaW50KSA8IDApOwotCi0gIHZhbHMgPSAoR1ZhbHVlICopIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgaWYgKHZhbHMgPT0gTlVMTCkgewotICAgIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlICh2YWx1ZSk7Ci0gICAgdmFscyA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgfQotICBnX3ZhbHVlX2NvcHkgKHN0YXJ0LCAmdmFsc1swXSk7Ci0gIGdfdmFsdWVfY29weSAoZW5kLCAmdmFsc1sxXSk7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsOgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRQotICogQG51bWVyYXRvcl9zdGFydDogdGhlIG51bWVyYXRvciBzdGFydCBvZiB0aGUgcmFuZ2UKLSAqIEBkZW5vbWluYXRvcl9zdGFydDogdGhlIGRlbm9taW5hdG9yIHN0YXJ0IG9mIHRoZSByYW5nZQotICogQG51bWVyYXRvcl9lbmQ6IHRoZSBudW1lcmF0b3IgZW5kIG9mIHRoZSByYW5nZQotICogQGRlbm9taW5hdG9yX2VuZDogdGhlIGRlbm9taW5hdG9yIGVuZCBvZiB0aGUgcmFuZ2UKLSAqCi0gKiBTZXRzIEB2YWx1ZSB0byB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEBudW1lcmF0b3Jfc3RhcnQvQGRlbm9taW5hdG9yX3N0YXJ0Ci0gKiBhbmQgQG51bWVyYXRvcl9lbmQvQGRlbm9taW5hdG9yX2VuZC4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsIChHVmFsdWUgKiB2YWx1ZSwKLSAgICBnaW50IG51bWVyYXRvcl9zdGFydCwgZ2ludCBkZW5vbWluYXRvcl9zdGFydCwKLSAgICBnaW50IG51bWVyYXRvcl9lbmQsIGdpbnQgZGVub21pbmF0b3JfZW5kKQotewotICBHVmFsdWUgc3RhcnQgPSB7IDAgfTsKLSAgR1ZhbHVlIGVuZCA9IHsgMCB9OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHZhbHVlICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChkZW5vbWluYXRvcl9zdGFydCAhPSAwKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZGVub21pbmF0b3JfZW5kICE9IDApOwotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlIChudW1lcmF0b3Jfc3RhcnQsCi0gICAgICAgICAgZGVub21pbmF0b3Jfc3RhcnQsIG51bWVyYXRvcl9lbmQsIGRlbm9taW5hdG9yX2VuZCkgPCAwKTsKLQotICBnX3ZhbHVlX2luaXQgKCZzdGFydCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnX3ZhbHVlX2luaXQgKCZlbmQsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLQotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3RhcnQsIG51bWVyYXRvcl9zdGFydCwgZGVub21pbmF0b3Jfc3RhcnQpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZW5kLCBudW1lcmF0b3JfZW5kLCBkZW5vbWluYXRvcl9lbmQpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlICh2YWx1ZSwgJnN0YXJ0LCAmZW5kKTsKLQotICAvKiB3ZSBrbm93IHRoZSB0d28gdmFsdWVzIGNvbnRhaW4gZnJhY3Rpb25zIHdpdGhvdXQgaW50ZXJuYWwgYWxsb2NzICovCi0gIC8qIGdfdmFsdWVfdW5zZXQgKCZzdGFydCk7ICovCi0gIC8qIGdfdmFsdWVfdW5zZXQgKCZlbmQpOyAgICovCi19Ci0KLS8qIEZJWE1FIDIuMDogRG9uJ3QgbGVhayB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgZnJhY3Rpb24KLSAqIHJhbmdlcyBidXQgaW5zdGVhZCByZXR1cm4gdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IKLSAqIHNlcGFyYXRlbHkuCi0gKiBUaGlzIHdvdWxkIGFsbG93IHRvIHN0b3JlIGZyYWN0aW9uIHJhbmdlcyBhcwotICogIGRhdGFbMF0gPSAobWluX24gPDwgMzIpIHwgKG1pbl9kKQotICogIGRhdGFbMV0gPSAobWF4X24gPDwgMzIpIHwgKG1heF9kKQotICogd2l0aG91dCByZXF1aXJpbmcgYW4gYWRkaXRpb25hbCBhbGxvY2F0aW9uIGZvciBlYWNoIHZhbHVlLgotICovCi0KLS8qKgotICogZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW46Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFCi0gKgotICogR2V0cyB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWluaW11bSBvZiB0aGUgcmFuZ2UKLSAqLwotY29uc3QgR1ZhbHVlICoKLWdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR1ZhbHVlICp2YWxzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKHZhbHVlKSwgTlVMTCk7Ci0KLSAgdmFscyA9IChHVmFsdWUgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOwotICBpZiAodmFscyAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuICZ2YWxzWzBdOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXg6Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFCi0gKgotICogR2V0cyB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWF4aW11bSBvZiB0aGUgcmFuZ2UKLSAqLwotY29uc3QgR1ZhbHVlICoKLWdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4IChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR1ZhbHVlICp2YWxzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKHZhbHVlKSwgTlVMTCk7Ci0KLSAgdmFscyA9IChHVmFsdWUgKikgdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOwotICBpZiAodmFscyAhPSBOVUxMKSB7Ci0gICAgcmV0dXJuICZ2YWxzWzFdOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX2ZyYWN0aW9uX3JhbmdlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR1ZhbHVlICp2YWxzID0gKEdWYWx1ZSAqKSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIGdjaGFyICpyZXR2YWw7Ci0KLSAgaWYgKHZhbHMgPT0gTlVMTCkgewotICAgIHJldHZhbCA9IGdfc3RyZHVwICgiWyAwLzEsIDAvMSBdIik7Ci0gIH0gZWxzZSB7Ci0gICAgZ2NoYXIgKnN0YXJ0LCAqZW5kOwotCi0gICAgc3RhcnQgPSBnc3RfdmFsdWVfc2VyaWFsaXplX2ZyYWN0aW9uICgmdmFsc1swXSk7Ci0gICAgZW5kID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mcmFjdGlvbiAoJnZhbHNbMV0pOwotCi0gICAgcmV0dmFsID0gZ19zdHJkdXBfcHJpbnRmICgiWyAlcywgJXMgXSIsIHN0YXJ0LCBlbmQpOwotICAgIGdfZnJlZSAoc3RhcnQpOwotICAgIGdfZnJlZSAoZW5kKTsKLSAgfQotCi0gIHJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX2ZyYWN0aW9uX3JhbmdlX3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAotICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0KLSAgICAgIGdzdF92YWx1ZV9zZXJpYWxpemVfZnJhY3Rpb25fcmFuZ2UgKHNyY192YWx1ZSk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9mcmFjdGlvbl9yYW5nZSAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCi17Ci0gIEdWYWx1ZSAqdmFsczEsICp2YWxzMjsKLSAgR3N0VmFsdWVDb21wYXJlRnVuYyBjb21wYXJlOwotCi0gIGlmICh2YWx1ZTItPmRhdGFbMF0udl9wb2ludGVyID09IHZhbHVlMS0+ZGF0YVswXS52X3BvaW50ZXIpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsgICAgIC8qIE9ubHkgcG9zc2libGUgaWYgYm90aCBhcmUgTlVMTCAqLwotCi0gIGlmICh2YWx1ZTItPmRhdGFbMF0udl9wb2ludGVyID09IE5VTEwgfHwgdmFsdWUxLT5kYXRhWzBdLnZfcG9pbnRlciA9PSBOVUxMKQotICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotCi0gIHZhbHMxID0gKEdWYWx1ZSAqKSB2YWx1ZTEtPmRhdGFbMF0udl9wb2ludGVyOwotICB2YWxzMiA9IChHVmFsdWUgKikgdmFsdWUyLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgaWYgKChjb21wYXJlID0gZ3N0X3ZhbHVlX2dldF9jb21wYXJlX2Z1bmMgKCZ2YWxzMVswXSkpKSB7Ci0gICAgaWYgKGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAoJnZhbHMxWzBdLCAmdmFsczJbMF0sIGNvbXBhcmUpID09Ci0gICAgICAgIEdTVF9WQUxVRV9FUVVBTCAmJgotICAgICAgICBnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKCZ2YWxzMVsxXSwgJnZhbHMyWzFdLCBjb21wYXJlKSA9PQotICAgICAgICBHU1RfVkFMVUVfRVFVQUwpCi0gICAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotICB9Ci0gIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9mcmFjdGlvbl9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQotewotICBnX3dhcm5pbmcgKCJ1bmltcGxlbWVudGVkIik7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqKioqKioqKioqCi0gKiBHc3RDYXBzICoKLSAqKioqKioqKioqKi8KLQotLyoqCi0gKiBnc3RfdmFsdWVfc2V0X2NhcHM6Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0NBUFMKLSAqIEBjYXBzOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjYXBzIHRvIHNldCB0aGUgdmFsdWUgdG8KLSAqCi0gKiBTZXRzIHRoZSBjb250ZW50cyBvZiBAdmFsdWUgdG8gQGNhcHMuIEEgcmVmZXJlbmNlIHRvIHRoZQotICogcHJvdmlkZWQgQGNhcHMgd2lsbCBiZSB0YWtlbiBieSB0aGUgQHZhbHVlLgotICovCi12b2lkCi1nc3RfdmFsdWVfc2V0X2NhcHMgKEdWYWx1ZSAqIHZhbHVlLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfQ0FQUyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNhcHMgPT0gTlVMTCB8fCBHU1RfSVNfQ0FQUyAoY2FwcykpOwotCi0gIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgY2Fwcyk7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2dldF9jYXBzOgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byBHU1RfVFlQRV9DQVBTCi0gKgotICogR2V0cyB0aGUgY29udGVudHMgb2YgQHZhbHVlLiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSByZXR1cm5lZAotICogI0dzdENhcHMgd2lsbCBub3QgYmUgbW9kaWZpZWQsIHRoZXJlZm9yZSB0aGUgY2FsbGVyIG11c3QgdGFrZSBvbmUKLSAqIGJlZm9yZSBnZXR0aW5nIHJpZCBvZiB0aGUgQHZhbHVlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlIGNvbnRlbnRzIG9mIEB2YWx1ZQotICovCi1jb25zdCBHc3RDYXBzICoKLWdzdF92YWx1ZV9nZXRfY2FwcyAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfQ0FQUywgTlVMTCk7Ci0KLSAgcmV0dXJuIChHc3RDYXBzICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9jYXBzIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgR3N0Q2FwcyAqY2FwczEgPSBHU1RfQ0FQUyAoZ3N0X3ZhbHVlX2dldF9jYXBzICh2YWx1ZTEpKTsKLSAgR3N0Q2FwcyAqY2FwczIgPSBHU1RfQ0FQUyAoZ3N0X3ZhbHVlX2dldF9jYXBzICh2YWx1ZTIpKTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMxLCBjYXBzMikpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLSAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX2NhcHMgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBHc3RDYXBzICpjYXBzID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKLSAgcmV0dXJuIHByaXZfZ3N0X3N0cmluZ190YWtlX2FuZF93cmFwIChnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfY2FwcyAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQotewotICBHc3RDYXBzICpjYXBzOwotCi0gIGlmICgqcyAhPSAnIicpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKHMpOwotICB9IGVsc2UgewotICAgIGdjaGFyICpzdHIgPSBnc3Rfc3RyaW5nX3Vud3JhcCAocyk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIXN0cikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKHN0cik7Ci0gICAgZ19mcmVlIChzdHIpOwotICB9Ci0KLSAgaWYgKGNhcHMpIHsKLSAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKGRlc3QsIGNhcHMpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqKioqKioqKioqKioqCi0gKiBHc3RTZWdtZW50ICoKLSAqKioqKioqKioqKioqKi8KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9zZXJpYWxpemVfc2VnbWVudF9pbnRlcm5hbCAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGdib29sZWFuIGVzY2FwZSkKLXsKLSAgR3N0U2VnbWVudCAqc2VnID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKLSAgZ2NoYXIgKnQsICpyZXM7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJHc3RTZWdtZW50IiwKLSAgICAgICJmbGFncyIsIEdTVF9UWVBFX1NFR01FTlRfRkxBR1MsIHNlZy0+ZmxhZ3MsCi0gICAgICAicmF0ZSIsIEdfVFlQRV9ET1VCTEUsIHNlZy0+cmF0ZSwKLSAgICAgICJhcHBsaWVkLXJhdGUiLCBHX1RZUEVfRE9VQkxFLCBzZWctPmFwcGxpZWRfcmF0ZSwKLSAgICAgICJmb3JtYXQiLCBHU1RfVFlQRV9GT1JNQVQsIHNlZy0+Zm9ybWF0LAotICAgICAgImJhc2UiLCBHX1RZUEVfVUlOVDY0LCBzZWctPmJhc2UsCi0gICAgICAib2Zmc2V0IiwgR19UWVBFX1VJTlQ2NCwgc2VnLT5vZmZzZXQsCi0gICAgICAic3RhcnQiLCBHX1RZUEVfVUlOVDY0LCBzZWctPnN0YXJ0LAotICAgICAgInN0b3AiLCBHX1RZUEVfVUlOVDY0LCBzZWctPnN0b3AsCi0gICAgICAidGltZSIsIEdfVFlQRV9VSU5UNjQsIHNlZy0+dGltZSwKLSAgICAgICJwb3NpdGlvbiIsIEdfVFlQRV9VSU5UNjQsIHNlZy0+cG9zaXRpb24sCi0gICAgICAiZHVyYXRpb24iLCBHX1RZUEVfVUlOVDY0LCBzZWctPmR1cmF0aW9uLCBOVUxMKTsKLSAgdCA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgaWYgKGVzY2FwZSkgewotICAgIHJlcyA9IGdfc3RyZHVwX3ByaW50ZiAoIlwiJXNcIiIsIHQpOwotICAgIGdfZnJlZSAodCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gdDsKLSAgfQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX3NlZ21lbnQgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICByZXR1cm4gZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9zZWdtZW50X2ludGVybmFsICh2YWx1ZSwgVFJVRSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX3NlZ21lbnQgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHI7Ci0gIEdzdFNlZ21lbnQgc2VnOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgc3RyID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCk7Ci0gIGlmIChzdHIgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmVzID0gZ3N0X3N0cnVjdHVyZV9nZXQgKHN0ciwKLSAgICAgICJmbGFncyIsIEdTVF9UWVBFX1NFR01FTlRfRkxBR1MsICZzZWcuZmxhZ3MsCi0gICAgICAicmF0ZSIsIEdfVFlQRV9ET1VCTEUsICZzZWcucmF0ZSwKLSAgICAgICJhcHBsaWVkLXJhdGUiLCBHX1RZUEVfRE9VQkxFLCAmc2VnLmFwcGxpZWRfcmF0ZSwKLSAgICAgICJmb3JtYXQiLCBHU1RfVFlQRV9GT1JNQVQsICZzZWcuZm9ybWF0LAotICAgICAgImJhc2UiLCBHX1RZUEVfVUlOVDY0LCAmc2VnLmJhc2UsCi0gICAgICAib2Zmc2V0IiwgR19UWVBFX1VJTlQ2NCwgJnNlZy5vZmZzZXQsCi0gICAgICAic3RhcnQiLCBHX1RZUEVfVUlOVDY0LCAmc2VnLnN0YXJ0LAotICAgICAgInN0b3AiLCBHX1RZUEVfVUlOVDY0LCAmc2VnLnN0b3AsCi0gICAgICAidGltZSIsIEdfVFlQRV9VSU5UNjQsICZzZWcudGltZSwKLSAgICAgICJwb3NpdGlvbiIsIEdfVFlQRV9VSU5UNjQsICZzZWcucG9zaXRpb24sCi0gICAgICAiZHVyYXRpb24iLCBHX1RZUEVfVUlOVDY0LCAmc2VnLmR1cmF0aW9uLCBOVUxMKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHIpOwotCi0gIGlmIChyZXMpCi0gICAgZ192YWx1ZV9zZXRfYm94ZWQgKGRlc3QsICZzZWcpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKioqKioqKioqKioqKioqCi0gKiBHc3RTdHJ1Y3R1cmUgKgotICoqKioqKioqKioqKioqKiovCi0KLS8qKgotICogZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmU6Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX1NUUlVDVFVSRQotICogQHN0cnVjdHVyZTogdGhlIHN0cnVjdHVyZSB0byBzZXQgdGhlIHZhbHVlIHRvCi0gKgotICogU2V0cyB0aGUgY29udGVudHMgb2YgQHZhbHVlIHRvIEBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQKLWdzdF92YWx1ZV9zZXRfc3RydWN0dXJlIChHVmFsdWUgKiB2YWx1ZSwgY29uc3QgR3N0U3RydWN0dXJlICogc3RydWN0dXJlKQotewotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9TVFJVQ1RVUkUpOwotICBnX3JldHVybl9pZl9mYWlsIChzdHJ1Y3R1cmUgPT0gTlVMTCB8fCBHU1RfSVNfU1RSVUNUVVJFIChzdHJ1Y3R1cmUpKTsKLQotICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHN0cnVjdHVyZSk7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmU6Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX1NUUlVDVFVSRQotICoKLSAqIEdldHMgdGhlIGNvbnRlbnRzIG9mIEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjb250ZW50cyBvZiBAdmFsdWUKLSAqLwotY29uc3QgR3N0U3RydWN0dXJlICoKLWdzdF92YWx1ZV9nZXRfc3RydWN0dXJlIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9TVFJVQ1RVUkUsIE5VTEwpOwotCi0gIHJldHVybiAoR3N0U3RydWN0dXJlICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX3N0cnVjdHVyZSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKLQotICByZXR1cm4gcHJpdl9nc3Rfc3RyaW5nX3Rha2VfYW5kX3dyYXAgKGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzdHJ1Y3R1cmUpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfc3RydWN0dXJlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGlmICgqcyAhPSAnIicpIHsKLSAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3N0cmluZ191bndyYXAgKHMpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFzdHIpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKHN0cnVjdHVyZSkpIHsKLSAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKGRlc3QsIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9jb21wYXJlX3N0cnVjdHVyZSAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlMSA9IEdTVF9TVFJVQ1RVUkUgKGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZTEpKTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUyID0gR1NUX1NUUlVDVFVSRSAoZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlMikpOwotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2lzX2VxdWFsIChzdHJ1Y3R1cmUxLCBzdHJ1Y3R1cmUyKSkKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotCi0gIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotfQotCi0vKioqKioqKioqKioqKioqKioqKgotICogR3N0Q2Fwc0ZlYXR1cmVzICoKLSAqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXRfY2Fwc19mZWF0dXJlczoKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gR1NUX1RZUEVfQ0FQU19GRUFUVVJFUwotICogQGZlYXR1cmVzOiB0aGUgZmVhdHVyZXMgdG8gc2V0IHRoZSB2YWx1ZSB0bwotICoKLSAqIFNldHMgdGhlIGNvbnRlbnRzIG9mIEB2YWx1ZSB0byBAZmVhdHVyZXMuCi0gKi8KLXZvaWQKLWdzdF92YWx1ZV9zZXRfY2Fwc19mZWF0dXJlcyAoR1ZhbHVlICogdmFsdWUsIGNvbnN0IEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzKQotewotICBnX3JldHVybl9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSkpOwotICBnX3JldHVybl9pZl9mYWlsIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9DQVBTX0ZFQVRVUkVTKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmVhdHVyZXMgPT0gTlVMTCB8fCBHU1RfSVNfQ0FQU19GRUFUVVJFUyAoZmVhdHVyZXMpKTsKLQotICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIGZlYXR1cmVzKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfZ2V0X2NhcHNfZmVhdHVyZXM6Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvIEdTVF9UWVBFX0NBUFNfRkVBVFVSRVMKLSAqCi0gKiBHZXRzIHRoZSBjb250ZW50cyBvZiBAdmFsdWUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY29udGVudHMgb2YgQHZhbHVlCi0gKi8KLWNvbnN0IEdzdENhcHNGZWF0dXJlcyAqCi1nc3RfdmFsdWVfZ2V0X2NhcHNfZmVhdHVyZXMgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfVkFMVUVfVFlQRSAodmFsdWUpID09IEdTVF9UWVBFX0NBUFNfRkVBVFVSRVMsIE5VTEwpOwotCi0gIHJldHVybiAoR3N0Q2Fwc0ZlYXR1cmVzICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX2NhcHNfZmVhdHVyZXMgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKLQotICByZXR1cm4gcHJpdl9nc3Rfc3RyaW5nX3Rha2VfYW5kX3dyYXAgKGdzdF9jYXBzX2ZlYXR1cmVzX3RvX3N0cmluZyAoZmVhdHVyZXMpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfY2Fwc19mZWF0dXJlcyAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQotewotICBHc3RDYXBzRmVhdHVyZXMgKmZlYXR1cmVzOwotCi0gIGlmICgqcyAhPSAnIicpIHsKLSAgICBmZWF0dXJlcyA9IGdzdF9jYXBzX2ZlYXR1cmVzX2Zyb21fc3RyaW5nIChzKTsKLSAgfSBlbHNlIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3N0cmluZ191bndyYXAgKHMpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFzdHIpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgZmVhdHVyZXMgPSBnc3RfY2Fwc19mZWF0dXJlc19mcm9tX3N0cmluZyAoc3RyKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKGZlYXR1cmVzKSkgewotICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAoZGVzdCwgZmVhdHVyZXMpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqKioqKioqKioqKioqCi0gKiBHc3RUYWdMaXN0ICoKLSAqKioqKioqKioqKioqKi8KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV90YWdfbGlzdCAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ2xpc3QxID0gR1NUX1RBR19MSVNUIChnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUxKSk7Ci0gIEdzdFRhZ0xpc3QgKnRhZ2xpc3QyID0gR1NUX1RBR19MSVNUIChnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUyKSk7Ci0KLSAgaWYgKGdzdF90YWdfbGlzdF9pc19lcXVhbCAodGFnbGlzdDEsIHRhZ2xpc3QyKSkKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfdGFnX2xpc3QgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKLXsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLQotICBpZiAoKnMgIT0gJyInKSB7Ci0gICAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZnJvbV9zdHJpbmcgKHMpOwotICB9IGVsc2UgewotICAgIGdjaGFyICpzdHIgPSBnc3Rfc3RyaW5nX3Vud3JhcCAocyk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIXN0cikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19mcm9tX3N0cmluZyAoc3RyKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKHRhZ2xpc3QgIT0gTlVMTCkpIHsKLSAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKGRlc3QsIHRhZ2xpc3QpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9zZXJpYWxpemVfdGFnX2xpc3QgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBHc3RUYWdMaXN0ICp0YWdsaXN0ID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKLQotICByZXR1cm4gcHJpdl9nc3Rfc3RyaW5nX3Rha2VfYW5kX3dyYXAgKGdzdF90YWdfbGlzdF90b19zdHJpbmcgKHRhZ2xpc3QpKTsKLX0KLQotCi0vKioqKioqKioqKioqKgotICogR3N0QnVmZmVyICoKLSAqKioqKioqKioqKioqLwotCi1zdGF0aWMgZ2ludAotY29tcGFyZV9idWZmZXIgKEdzdEJ1ZmZlciAqIGJ1ZjEsIEdzdEJ1ZmZlciAqIGJ1ZjIpCi17Ci0gIGdzaXplIHNpemUxLCBzaXplMjsKLSAgR3N0TWFwSW5mbyBpbmZvMSwgaW5mbzI7Ci0gIGdpbnQgcmVzdWx0LCBtcmV0OwotCi0gIGlmIChidWYxID09IGJ1ZjIpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLQotICBzaXplMSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZjEpOwotICBzaXplMiA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZjIpOwotCi0gIGlmIChzaXplMSAhPSBzaXplMikKLSAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLQotICBpZiAoc2l6ZTEgPT0gMCkKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotCi0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZjEsICZpbmZvMSwgR1NUX01BUF9SRUFEKSkKLSAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLQotICBpZiAoIWdzdF9idWZmZXJfbWFwIChidWYyLCAmaW5mbzIsIEdTVF9NQVBfUkVBRCkpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYxLCAmaW5mbzEpOwotICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotICB9Ci0KLSAgbXJldCA9IG1lbWNtcCAoaW5mbzEuZGF0YSwgaW5mbzIuZGF0YSwgaW5mbzEuc2l6ZSk7Ci0gIGlmIChtcmV0ID09IDApCi0gICAgcmVzdWx0ID0gR1NUX1ZBTFVFX0VRVUFMOwotICBlbHNlIGlmIChtcmV0IDwgMCkKLSAgICByZXN1bHQgPSBHU1RfVkFMVUVfTEVTU19USEFOOwotICBlbHNlCi0gICAgcmVzdWx0ID0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTjsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYxLCAmaW5mbzEpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYyLCAmaW5mbzIpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9idWZmZXIgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBHc3RCdWZmZXIgKmJ1ZjEgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAodmFsdWUxKTsKLSAgR3N0QnVmZmVyICpidWYyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKHZhbHVlMik7Ci0KLSAgcmV0dXJuIGNvbXBhcmVfYnVmZmVyIChidWYxLCBidWYyKTsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9zZXJpYWxpemVfYnVmZmVyIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR3N0TWFwSW5mbyBpbmZvOwotICBndWludDggKmRhdGE7Ci0gIGdpbnQgaTsKLSAgZ2NoYXIgKnN0cmluZzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKHZhbHVlKTsKLSAgaWYgKGJ1ZmZlciA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZGF0YSA9IGluZm8uZGF0YTsKLQotICBzdHJpbmcgPSBnX21hbGxvYyAoaW5mby5zaXplICogMiArIDEpOwotICBmb3IgKGkgPSAwOyBpIDwgaW5mby5zaXplOyBpKyspIHsKLSAgICBzcHJpbnRmIChzdHJpbmcgKyBpICogMiwgIiUwMngiLCBkYXRhW2ldKTsKLSAgfQotICBzdHJpbmdbaW5mby5zaXplICogMl0gPSAwOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotCi0gIHJldHVybiBzdHJpbmc7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2J1ZmZlciAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgZ2ludCBsZW47Ci0gIGdjaGFyIHRzWzNdOwotICBHc3RNYXBJbmZvIGluZm87Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ2ludCBpOwotCi0gIGxlbiA9IHN0cmxlbiAocyk7Ci0gIGlmIChsZW4gJiAxKQotICAgIGdvdG8gd3JvbmdfbGVuZ3RoOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBsZW4gLyAyLCBOVUxMKTsKLSAgaWYgKCFnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9XUklURSkpCi0gICAgZ290byBtYXBfZmFpbGVkOwotICBkYXRhID0gaW5mby5kYXRhOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW4gLyAyOyBpKyspIHsKLSAgICBpZiAoIWlzeGRpZ2l0ICgoaW50KSBzW2kgKiAyXSkgfHwgIWlzeGRpZ2l0ICgoaW50KSBzW2kgKiAyICsgMV0pKQotICAgICAgZ290byB3cm9uZ19jaGFyOwotCi0gICAgdHNbMF0gPSBzW2kgKiAyICsgMF07Ci0gICAgdHNbMV0gPSBzW2kgKiAyICsgMV07Ci0gICAgdHNbMl0gPSAwOwotCi0gICAgZGF0YVtpXSA9IChndWludDgpIHN0cnRvdWwgKHRzLCBOVUxMLCAxNik7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0KLSAgZ3N0X3ZhbHVlX3Rha2VfYnVmZmVyIChkZXN0LCBidWZmZXIpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotd3JvbmdfbGVuZ3RoOgotICB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1tYXBfZmFpbGVkOgotICB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cm9uZ19jaGFyOgotICB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqKioqKioqKioqKioKLSAqIEdzdFNhbXBsZSAqCi0gKioqKioqKioqKioqKi8KLQotLyogVGhpcyBmdW5jdGlvbiBpcyBtb3N0bHkgdXNlZCBmb3IgY29tcGFyaW5nIGltYWdlL2J1ZmZlciB0YWdzIGluIHRhZ2xpc3RzICovCi1zdGF0aWMgZ2ludAotZ3N0X3ZhbHVlX2NvbXBhcmVfc2FtcGxlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgR3N0QnVmZmVyICpidWYxID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChnc3RfdmFsdWVfZ2V0X3NhbXBsZSAodmFsdWUxKSk7Ci0gIEdzdEJ1ZmZlciAqYnVmMiA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciAoZ3N0X3ZhbHVlX2dldF9zYW1wbGUgKHZhbHVlMikpOwotCi0gIC8qIEZJWE1FOiBzaG91bGQgd2UgdGFrZSBpbnRvIGFjY291bnQgYW55dGhpbmcgZWxzZSBzdWNoIGFzIGNhcHM/ICovCi0gIHJldHVybiBjb21wYXJlX2J1ZmZlciAoYnVmMSwgYnVmMik7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX3NhbXBsZSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqaW5mb19zdHJ1Y3R1cmU7Ci0gIEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RTYW1wbGUgKnNhbXBsZTsKLSAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLSAgZ2NoYXIgKmluZm9fc3RyLCAqY2Fwc19zdHIsICp0bXA7Ci0gIGdjaGFyICpidWZfc3RyLCAqc2VnX3N0ciwgKnM7Ci0KLSAgc2FtcGxlID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKLQotICBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIgKHNhbXBsZSk7Ci0gIGlmIChidWZmZXIpIHsKLSAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX0JVRkZFUik7Ci0gICAgZ192YWx1ZV9zZXRfYm94ZWQgKCZ2YWwsIGJ1ZmZlcik7Ci0gICAgYnVmX3N0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemVfYnVmZmVyICgmdmFsKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLSAgfSBlbHNlIHsKLSAgICBidWZfc3RyID0gZ19zdHJkdXAgKCJOb25lIik7Ci0gIH0KLQotICBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyAoc2FtcGxlKTsKLSAgaWYgKGNhcHMpIHsKLSAgICB0bXAgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpOwotICAgIGNhcHNfc3RyID0gZ19iYXNlNjRfZW5jb2RlICgoZ3VjaGFyICopIHRtcCwgc3RybGVuICh0bXApICsgMSk7Ci0gICAgZ19zdHJkZWxpbWl0IChjYXBzX3N0ciwgIj0iLCAnXycpOwotICAgIGdfZnJlZSAodG1wKTsKLSAgfSBlbHNlIHsKLSAgICBjYXBzX3N0ciA9IGdfc3RyZHVwICgiTm9uZSIpOwotICB9Ci0KLSAgc2VnbWVudCA9IGdzdF9zYW1wbGVfZ2V0X3NlZ21lbnQgKHNhbXBsZSk7Ci0gIGlmIChzZWdtZW50KSB7Ci0gICAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9TRUdNRU5UKTsKLSAgICBnX3ZhbHVlX3NldF9ib3hlZCAoJnZhbCwgc2VnbWVudCk7Ci0gICAgdG1wID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9zZWdtZW50X2ludGVybmFsICgmdmFsLCBGQUxTRSk7Ci0gICAgc2VnX3N0ciA9IGdfYmFzZTY0X2VuY29kZSAoKGd1Y2hhciAqKSB0bXAsIHN0cmxlbiAodG1wKSArIDEpOwotICAgIGdfc3RyZGVsaW1pdCAoc2VnX3N0ciwgIj0iLCAnXycpOwotICAgIGdfZnJlZSAodG1wKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLSAgfSBlbHNlIHsKLSAgICBzZWdfc3RyID0gZ19zdHJkdXAgKCJOb25lIik7Ci0gIH0KLQotICBpbmZvX3N0cnVjdHVyZSA9IGdzdF9zYW1wbGVfZ2V0X2luZm8gKHNhbXBsZSk7Ci0gIGlmIChpbmZvX3N0cnVjdHVyZSkgewotICAgIHRtcCA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChpbmZvX3N0cnVjdHVyZSk7Ci0gICAgaW5mb19zdHIgPSBnX2Jhc2U2NF9lbmNvZGUgKChndWNoYXIgKikgdG1wLCBzdHJsZW4gKHRtcCkgKyAxKTsKLSAgICBnX3N0cmRlbGltaXQgKGluZm9fc3RyLCAiPSIsICdfJyk7Ci0gICAgZ19mcmVlICh0bXApOwotICB9IGVsc2UgewotICAgIGluZm9fc3RyID0gZ19zdHJkdXAgKCJOb25lIik7Ci0gIH0KLQotICBzID0gZ19zdHJjb25jYXQgKGJ1Zl9zdHIsICI6IiwgY2Fwc19zdHIsICI6Iiwgc2VnX3N0ciwgIjoiLCBpbmZvX3N0ciwgTlVMTCk7Ci0gIGdfZnJlZSAoYnVmX3N0cik7Ci0gIGdfZnJlZSAoY2Fwc19zdHIpOwotICBnX2ZyZWUgKHNlZ19zdHIpOwotICBnX2ZyZWUgKGluZm9fc3RyKTsKLQotICByZXR1cm4gczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfc2FtcGxlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIEdWYWx1ZSBidmFsID0gR19WQUxVRV9JTklULCBzdmFsID0gR19WQUxVRV9JTklUOwotICBHc3RTdHJ1Y3R1cmUgKmluZm87Ci0gIEdzdFNhbXBsZSAqc2FtcGxlOwotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGdjaGFyICoqZmllbGRzOwotICBnc2l6ZSBvdXRsZW47Ci0gIGdpbnQgbGVuOwotCi0gIEdTVF9UUkFDRSAoImRlc2VyaWFsaXplICclcyciLCBzKTsKLQotICBmaWVsZHMgPSBnX3N0cnNwbGl0IChzLCAiOiIsIC0xKTsKLSAgbGVuID0gZ19zdHJ2X2xlbmd0aCAoZmllbGRzKTsKLSAgaWYgKGxlbiAhPSA0KQotICAgIGdvdG8gd3JvbmdfbGVuZ3RoOwotCi0gIGdfdmFsdWVfaW5pdCAoJmJ2YWwsIEdTVF9UWVBFX0JVRkZFUik7Ci0gIGdfdmFsdWVfaW5pdCAoJnN2YWwsIEdTVF9UWVBFX1NFR01FTlQpOwotCi0gIGlmICghZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2J1ZmZlciAoJmJ2YWwsIGZpZWxkc1swXSkpCi0gICAgZ290byBmYWlsOwotCi0gIGlmIChzdHJjbXAgKGZpZWxkc1sxXSwgIk5vbmUiKSAhPSAwKSB7Ci0gICAgZ19zdHJkZWxpbWl0IChmaWVsZHNbMV0sICJfIiwgJz0nKTsKLSAgICBnX2Jhc2U2NF9kZWNvZGVfaW5wbGFjZSAoZmllbGRzWzFdLCAmb3V0bGVuKTsKLSAgICBHU1RfVFJBQ0UgKCJjYXBzICAgIDogJXMiLCBmaWVsZHNbMV0pOwotICAgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoZmllbGRzWzFdKTsKLSAgICBpZiAoY2FwcyA9PSBOVUxMKQotICAgICAgZ290byBmYWlsOwotICB9Ci0KLSAgaWYgKHN0cmNtcCAoZmllbGRzWzJdLCAiTm9uZSIpICE9IDApIHsKLSAgICBnX3N0cmRlbGltaXQgKGZpZWxkc1syXSwgIl8iLCAnPScpOwotICAgIGdfYmFzZTY0X2RlY29kZV9pbnBsYWNlIChmaWVsZHNbMl0sICZvdXRsZW4pOwotICAgIEdTVF9UUkFDRSAoInNlZ21lbnQgOiAlcyIsIGZpZWxkc1syXSk7Ci0gICAgaWYgKCFnc3RfdmFsdWVfZGVzZXJpYWxpemVfc2VnbWVudCAoJnN2YWwsIGZpZWxkc1syXSkpCi0gICAgICBnb3RvIGZhaWw7Ci0gIH0KLQotICBpZiAoc3RyY21wIChmaWVsZHNbM10sICJOb25lIikgIT0gMCkgewotICAgIGdfc3RyZGVsaW1pdCAoZmllbGRzWzNdLCAiXyIsICc9Jyk7Ci0gICAgZ19iYXNlNjRfZGVjb2RlX2lucGxhY2UgKGZpZWxkc1szXSwgJm91dGxlbik7Ci0gICAgR1NUX1RSQUNFICgiaW5mbyAgICA6ICVzIiwgZmllbGRzWzNdKTsKLSAgICBpbmZvID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoZmllbGRzWzNdLCBOVUxMKTsKLSAgICBpZiAoaW5mbyA9PSBOVUxMKQotICAgICAgZ290byBmYWlsOwotICB9IGVsc2UgewotICAgIGluZm8gPSBOVUxMOwotICB9Ci0KLSAgc2FtcGxlID0gZ3N0X3NhbXBsZV9uZXcgKGdzdF92YWx1ZV9nZXRfYnVmZmVyICgmYnZhbCksIGNhcHMsCi0gICAgICBnX3ZhbHVlX2dldF9ib3hlZCAoJnN2YWwpLCBpbmZvKTsKLQotICBnX3ZhbHVlX3Rha2VfYm94ZWQgKGRlc3QsIHNhbXBsZSk7Ci0KLSAgcmV0ID0gVFJVRTsKLQotZmFpbDoKLSAgaWYgKGNhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnX3ZhbHVlX3Vuc2V0ICgmYnZhbCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzdmFsKTsKLQotd3JvbmdfbGVuZ3RoOgotCi0gIGdfc3RyZnJlZXYgKGZpZWxkcyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqKioqKioqKioqCi0gKiBib29sZWFuICoKLSAqKioqKioqKioqKi8KLQotc3RhdGljIGdpbnQKLWdzdF92YWx1ZV9jb21wYXJlX2Jvb2xlYW4gKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBpZiAoKHZhbHVlMS0+ZGF0YVswXS52X2ludCAhPSAwKSA9PSAodmFsdWUyLT5kYXRhWzBdLnZfaW50ICE9IDApKQotICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0gIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9ib29sZWFuIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgaWYgKHZhbHVlLT5kYXRhWzBdLnZfaW50KSB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwICgidHJ1ZSIpOwotICB9Ci0gIHJldHVybiBnX3N0cmR1cCAoImZhbHNlIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2Jvb2xlYW4gKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocywgInRydWUiKSA9PSAwIHx8Ci0gICAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJ5ZXMiKSA9PSAwIHx8Ci0gICAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJ0IikgPT0gMCB8fCBzdHJjbXAgKHMsICIxIikgPT0gMCkgewotICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKGRlc3QsIFRSVUUpOwotICAgIHJldCA9IFRSVUU7Ci0gIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAiZmFsc2UiKSA9PSAwIHx8Ci0gICAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJubyIpID09IDAgfHwKLSAgICAgIGdfYXNjaWlfc3RyY2FzZWNtcCAocywgImYiKSA9PSAwIHx8IHN0cmNtcCAocywgIjAiKSA9PSAwKSB7Ci0gICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAoZGVzdCwgRkFMU0UpOwotICAgIHJldCA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIENSRUFURV9TRVJJQUxJWkFUSU9OX1NUQVJUKF90eXBlLF9tYWNybykgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgZ2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfdmFsdWVfY29tcGFyZV8gIyMgX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGcgIyMgX3R5cGUgdmFsMSA9IGdfdmFsdWVfZ2V0XyAjIyBfdHlwZSAodmFsdWUxKTsgICAgICAgICAgICAgICAgICAgICBcCi0gIGcgIyMgX3R5cGUgdmFsMiA9IGdfdmFsdWVfZ2V0XyAjIyBfdHlwZSAodmFsdWUyKTsgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh2YWwxID4gdmFsMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh2YWwxIDwgdmFsMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9MRVNTX1RIQU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgZ2NoYXIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfdmFsdWVfc2VyaWFsaXplXyAjIyBfdHlwZSAoY29uc3QgR1ZhbHVlICogdmFsdWUpICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdWYWx1ZSB2YWwgPSB7IDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX1NUUklORyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICghZ192YWx1ZV90cmFuc2Zvcm0gKHZhbHVlLCAmdmFsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC8qIE5PX0NPUFlfTUFETkVTUyEhISAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiAoY2hhciAqKSBnX3ZhbHVlX2dldF9zdHJpbmcgKCZ2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLS8qIGRlc2VyaWFsaXplIHRoZSBnaXZlbiBzIGludG8gdG8gYXMgYSBnaW50NjQuCi0gKiBjaGVjayBpZiB0aGUgcmVzdWx0IGlzIGFjdHVhbGx5IHN0b3JlYWJsZSBpbiB0aGUgZ2l2ZW4gc2l6ZSBudW1iZXIgb2YKLSAqIGJ5dGVzLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfaGVscGVyIChnaW50NjQgKiB0bywgY29uc3QgZ2NoYXIgKiBzLAotICAgIGdpbnQ2NCBtaW4sIGdpbnQ2NCBtYXgsIGdpbnQgc2l6ZSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGdjaGFyICplbmQ7Ci0gIGd1aW50NjQgbWFzayA9IH4wOwotCi0gIGVycm5vID0gMDsKLSAgKnRvID0gZ19hc2NpaV9zdHJ0b3VsbCAocywgJmVuZCwgMCk7Ci0gIC8qIGEgcmFuZ2UgZXJyb3IgaXMgYSBkZWZpbml0aXZlIG5vLW5vICovCi0gIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoKmVuZCA9PSAwKSB7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibGl0dGxlX2VuZGlhbiIpID09IDApIHsKLSAgICAgICp0byA9IEdfTElUVExFX0VORElBTjsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJiaWdfZW5kaWFuIikgPT0gMCkgewotICAgICAgKnRvID0gR19CSUdfRU5ESUFOOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocywgImJ5dGVfb3JkZXIiKSA9PSAwKSB7Ci0gICAgICAqdG8gPSBHX0JZVEVfT1JERVI7Ci0gICAgICByZXQgPSBUUlVFOwotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWluIikgPT0gMCkgewotICAgICAgKnRvID0gbWluOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocywgIm1heCIpID09IDApIHsKLSAgICAgICp0byA9IG1heDsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgfQotICB9Ci0gIGlmIChyZXQpIHsKLSAgICAvKiBieSBkZWZpbml0aW9uLCBhIGdpbnQ2NCBmaXRzIGludG8gYSBnaW50NjQ7IHNvIGlnbm9yZSB0aG9zZSAqLwotICAgIGlmIChzaXplICE9IHNpemVvZiAobWFzaykpIHsKLSAgICAgIGlmICgqdG8gPj0gMCkgewotICAgICAgICAvKiBmb3IgcG9zaXRpdmUgbnVtYmVycywgd2UgY3JlYXRlIGEgbWFzayBvZiAxJ3Mgb3V0c2lkZSBvZiB0aGUgcmFuZ2UKLSAgICAgICAgICogYW5kIDAncyBpbnNpZGUgdGhlIHJhbmdlLiAgQW4gYW5kIHdpbGwgdGh1cyBrZWVwIG9ubHkgMSBiaXRzCi0gICAgICAgICAqIG91dHNpZGUgb2YgdGhlIHJhbmdlICovCi0gICAgICAgIG1hc2sgPDw9IChzaXplICogOCk7Ci0gICAgICAgIGlmICgobWFzayAmICp0bykgIT0gMCkgewotICAgICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBmb3IgbmVnYXRpdmUgbnVtYmVycywgd2UgZG8gYSAyJ3MgY29tcGxlbWVudCB2ZXJzaW9uICovCi0gICAgICAgIG1hc2sgPDw9ICgoc2l6ZSAqIDgpIC0gMSk7Ci0gICAgICAgIGlmICgobWFzayAmICp0bykgIT0gbWFzaykgewotICAgICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgQ1JFQVRFX1NFUklBTElaQVRJT04oX3R5cGUsX21hY3JvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUNSRUFURV9TRVJJQUxJWkFUSU9OX1NUQVJUKF90eXBlLF9tYWNybykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV8gIyMgX3R5cGUgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICpzKSAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ2ludDY0IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9pbnRfaGVscGVyICgmeCwgcywgR19NSU4gIyMgX21hY3JvLCAgICAgICAgIFwKLSAgICAgIEdfTUFYICMjIF9tYWNybywgc2l6ZW9mIChnICMjIF90eXBlKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX3ZhbHVlX3NldF8gIyMgX3R5cGUgKGRlc3QsIC8qKGcgIyMgX3R5cGUpKi8geCk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBDUkVBVEVfVVNFUklBTElaQVRJT04oX3R5cGUsX21hY3JvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotQ1JFQVRFX1NFUklBTElaQVRJT05fU1RBUlQoX3R5cGUsX21hY3JvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplXyAjIyBfdHlwZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKnMpICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnaW50NjQgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnY2hhciAqZW5kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB4ID0gZ19hc2NpaV9zdHJ0b3VsbCAocywgJmVuZCwgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBhIHJhbmdlIGVycm9yIGlzIGEgZGVmaW5pdGl2ZSBuby1ubyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoZXJybm8gPT0gRVJBTkdFKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiB0aGUgY2FzdCBlbnN1cmVzIHRoZSByYW5nZSBjaGVjayBsYXRlciBvbiBtYWtlcyBzZW5zZSAqLyAgICAgICAgICAgXAotICB4ID0gKGcgIyMgX3R5cGUpIHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoKmVuZCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJsaXR0bGVfZW5kaWFuIikgPT0gMCkgeyAgICAgICAgICAgICAgICAgXAotICAgICAgeCA9IEdfTElUVExFX0VORElBTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAiYmlnX2VuZGlhbiIpID09IDApIHsgICAgICAgICAgICAgXAotICAgICAgeCA9IEdfQklHX0VORElBTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAiYnl0ZV9vcmRlciIpID09IDApIHsgICAgICAgICAgICAgXAotICAgICAgeCA9IEdfQllURV9PUkRFUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWluIikgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWF4IikgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeCA9IEdfTUFYICMjIF9tYWNybzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAocmV0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICh4ID4gR19NQVggIyMgX21hY3JvKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ192YWx1ZV9zZXRfICMjIF90eXBlIChkZXN0LCB4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi1DUkVBVEVfU0VSSUFMSVpBVElPTiAoaW50LCBJTlQpOwotQ1JFQVRFX1NFUklBTElaQVRJT04gKGludDY0LCBJTlQ2NCk7Ci1DUkVBVEVfU0VSSUFMSVpBVElPTiAobG9uZywgTE9ORyk7Ci0KLUNSRUFURV9VU0VSSUFMSVpBVElPTiAodWludCwgVUlOVCk7Ci1DUkVBVEVfVVNFUklBTElaQVRJT04gKHVpbnQ2NCwgVUlOVDY0KTsKLUNSRUFURV9VU0VSSUFMSVpBVElPTiAodWxvbmcsIFVMT05HKTsKLQotLyogRklYTUUgMi4wOiByZW1vdmUgdGhpcyBhZ2FpbiwgcGx1Z2lucyBzaG91bGRuJ3QgaGF2ZSB1Y2hhciBwcm9wZXJ0aWVzICovCi0jaWZuZGVmIEdfTUFYVUNIQVIKLSNkZWZpbmUgR19NQVhVQ0hBUiAyNTUKLSNlbmRpZgotQ1JFQVRFX1VTRVJJQUxJWkFUSU9OICh1Y2hhciwgVUNIQVIpOwotCi0vKioqKioqKioqKgotICogZG91YmxlICoKLSAqKioqKioqKioqLwotc3RhdGljIGdpbnQKLWdzdF92YWx1ZV9jb21wYXJlX2RvdWJsZSAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCi17Ci0gIGlmICh2YWx1ZTEtPmRhdGFbMF0udl9kb3VibGUgPiB2YWx1ZTItPmRhdGFbMF0udl9kb3VibGUpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47Ci0gIGlmICh2YWx1ZTEtPmRhdGFbMF0udl9kb3VibGUgPCB2YWx1ZTItPmRhdGFbMF0udl9kb3VibGUpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9MRVNTX1RIQU47Ci0gIGlmICh2YWx1ZTEtPmRhdGFbMF0udl9kb3VibGUgPT0gdmFsdWUyLT5kYXRhWzBdLnZfZG91YmxlKQotICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0gIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9kb3VibGUgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBnY2hhciBkW0dfQVNDSUlfRFRPU1RSX0JVRl9TSVpFXTsKLQotICBnX2FzY2lpX2R0b3N0ciAoZCwgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsIHZhbHVlLT5kYXRhWzBdLnZfZG91YmxlKTsKLSAgcmV0dXJuIGdfc3RyZHVwIChkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfZG91YmxlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIGdkb3VibGUgeDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGdjaGFyICplbmQ7Ci0KLSAgeCA9IGdfYXNjaWlfc3RydG9kIChzLCAmZW5kKTsKLSAgaWYgKCplbmQgPT0gMCkgewotICAgIHJldCA9IFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocywgIm1pbiIpID09IDApIHsKLSAgICAgIHggPSAtR19NQVhET1VCTEU7Ci0gICAgICByZXQgPSBUUlVFOwotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWF4IikgPT0gMCkgewotICAgICAgeCA9IEdfTUFYRE9VQkxFOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICB9Ci0gIH0KLSAgaWYgKHJldCkgewotICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAoZGVzdCwgeCk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqKioqKioqKgotICogZmxvYXQgKgotICoqKioqKioqKi8KLQotc3RhdGljIGdpbnQKLWdzdF92YWx1ZV9jb21wYXJlX2Zsb2F0IChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgaWYgKHZhbHVlMS0+ZGF0YVswXS52X2Zsb2F0ID4gdmFsdWUyLT5kYXRhWzBdLnZfZmxvYXQpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47Ci0gIGlmICh2YWx1ZTEtPmRhdGFbMF0udl9mbG9hdCA8IHZhbHVlMi0+ZGF0YVswXS52X2Zsb2F0KQotICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOwotICBpZiAodmFsdWUxLT5kYXRhWzBdLnZfZmxvYXQgPT0gdmFsdWUyLT5kYXRhWzBdLnZfZmxvYXQpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLSAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX2Zsb2F0IChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ2NoYXIgZFtHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRV07Ci0KLSAgZ19hc2NpaV9kdG9zdHIgKGQsIEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFLCB2YWx1ZS0+ZGF0YVswXS52X2Zsb2F0KTsKLSAgcmV0dXJuIGdfc3RyZHVwIChkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfZmxvYXQgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IGdjaGFyICogcykKLXsKLSAgZ2RvdWJsZSB4OwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgZ2NoYXIgKmVuZDsKLQotICB4ID0gZ19hc2NpaV9zdHJ0b2QgKHMsICZlbmQpOwotICBpZiAoKmVuZCA9PSAwKSB7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChzLCAibWluIikgPT0gMCkgewotICAgICAgeCA9IC1HX01BWEZMT0FUOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocywgIm1heCIpID09IDApIHsKLSAgICAgIHggPSBHX01BWEZMT0FUOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICB9Ci0gIH0KLSAgaWYgKHggPiBHX01BWEZMT0FUIHx8IHggPCAtR19NQVhGTE9BVCkKLSAgICByZXQgPSBGQUxTRTsKLSAgaWYgKHJldCkgewotICAgIGdfdmFsdWVfc2V0X2Zsb2F0IChkZXN0LCAoZmxvYXQpIHgpOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKioqKioqKioqCi0gKiBzdHJpbmcgKgotICoqKioqKioqKiovCi0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9zdHJpbmcgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBpZiAoR19VTkxJS0VMWSAoIXZhbHVlMS0+ZGF0YVswXS52X3BvaW50ZXIgfHwgIXZhbHVlMi0+ZGF0YVswXS52X3BvaW50ZXIpKSB7Ci0gICAgLyogaWYgb25seSBvbmUgaXMgTlVMTCwgbm8gbWF0Y2ggLSBvdGhlcndpc2UgYm90aCBOVUxMID09IEVRVUFMICovCi0gICAgaWYgKHZhbHVlMS0+ZGF0YVswXS52X3BvaW50ZXIgIT0gdmFsdWUyLT5kYXRhWzBdLnZfcG9pbnRlcikKLSAgICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotICB9IGVsc2UgewotICAgIGdpbnQgeCA9IHN0cmNtcCAodmFsdWUxLT5kYXRhWzBdLnZfcG9pbnRlciwgdmFsdWUyLT5kYXRhWzBdLnZfcG9pbnRlcik7Ci0KLSAgICBpZiAoeCA8IDApCi0gICAgICByZXR1cm4gR1NUX1ZBTFVFX0xFU1NfVEhBTjsKLSAgICBpZiAoeCA+IDApCi0gICAgICByZXR1cm4gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTjsKLSAgfQotCi0gIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3Rfc3RyaW5nX21lYXN1cmVfd3JhcHBpbmcgKGNvbnN0IGdjaGFyICogcykKLXsKLSAgZ2ludCBsZW47Ci0gIGdib29sZWFuIHdyYXAgPSBGQUxTRTsKLQotICBpZiAoR19VTkxJS0VMWSAocyA9PSBOVUxMKSkKLSAgICByZXR1cm4gLTE7Ci0KLSAgLyogU3BlY2lhbCBjYXNlOiB0aGUgYWN0dWFsIHN0cmluZyBOVUxMIG5lZWRzIHdyYXBwaW5nICovCi0gIGlmIChHX1VOTElLRUxZIChzdHJjbXAgKHMsICJOVUxMIikgPT0gMCkpCi0gICAgcmV0dXJuIDQ7Ci0KLSAgbGVuID0gMDsKLSAgd2hpbGUgKCpzKSB7Ci0gICAgaWYgKEdTVF9BU0NJSV9JU19TVFJJTkcgKCpzKSkgewotICAgICAgbGVuKys7Ci0gICAgfSBlbHNlIGlmICgqcyA8IDB4MjAgfHwgKnMgPj0gMHg3ZikgewotICAgICAgd3JhcCA9IFRSVUU7Ci0gICAgICBsZW4gKz0gNDsKLSAgICB9IGVsc2UgewotICAgICAgd3JhcCA9IFRSVUU7Ci0gICAgICBsZW4gKz0gMjsKLSAgICB9Ci0gICAgcysrOwotICB9Ci0KLSAgLyogV3JhcCB0aGUgc3RyaW5nIGlmIHdlIGZvdW5kIHNvbWV0aGluZyB0aGF0IG5lZWRzCi0gICAqIHdyYXBwaW5nLCBvciB0aGUgZW1wdHkgc3RyaW5nIChsZW4gPT0gMCkgKi8KLSAgcmV0dXJuICh3cmFwIHx8IGxlbiA9PSAwKSA/IGxlbiA6IC0xOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3N0cmluZ193cmFwX2lubmVyIChjb25zdCBnY2hhciAqIHMsIGdpbnQgbGVuKQotewotICBnY2hhciAqZCwgKmU7Ci0KLSAgZSA9IGQgPSBnX21hbGxvYyAobGVuICsgMyk7Ci0KLSAgKmUrKyA9ICdcIic7Ci0gIHdoaWxlICgqcykgewotICAgIGlmIChHU1RfQVNDSUlfSVNfU1RSSU5HICgqcykpIHsKLSAgICAgICplKysgPSAqcysrOwotICAgIH0gZWxzZSBpZiAoKnMgPCAweDIwIHx8ICpzID49IDB4N2YpIHsKLSAgICAgICplKysgPSAnXFwnOwotICAgICAgKmUrKyA9ICcwJyArICgoKihndWNoYXIgKikgcykgPj4gNik7Ci0gICAgICAqZSsrID0gJzAnICsgKCgoKnMpID4+IDMpICYgMHg3KTsKLSAgICAgICplKysgPSAnMCcgKyAoKCpzKyspICYgMHg3KTsKLSAgICB9IGVsc2UgewotICAgICAgKmUrKyA9ICdcXCc7Ci0gICAgICAqZSsrID0gKnMrKzsKLSAgICB9Ci0gIH0KLSAgKmUrKyA9ICdcIic7Ci0gICplID0gMDsKLQotICBnX2Fzc2VydCAoZSAtIGQgPD0gbGVuICsgMyk7Ci0gIHJldHVybiBkOwotfQotCi0vKiBEbyBzdHJpbmcgd3JhcHBpbmcvZXNjYXBpbmcgKi8KLXN0YXRpYyBnY2hhciAqCi1nc3Rfc3RyaW5nX3dyYXAgKGNvbnN0IGdjaGFyICogcykKLXsKLSAgZ2ludCBsZW4gPSBnc3Rfc3RyaW5nX21lYXN1cmVfd3JhcHBpbmcgKHMpOwotCi0gIGlmIChHX0xJS0VMWSAobGVuIDwgMCkpCi0gICAgcmV0dXJuIGdfc3RyZHVwIChzKTsKLQotICByZXR1cm4gZ3N0X3N0cmluZ193cmFwX2lubmVyIChzLCBsZW4pOwotfQotCi0vKiBTYW1lIGFzIGFib3ZlLCBidXQgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cmluZyAqLwotZ2NoYXIgKgotcHJpdl9nc3Rfc3RyaW5nX3Rha2VfYW5kX3dyYXAgKGdjaGFyICogcykKLXsKLSAgZ2NoYXIgKm91dDsKLSAgZ2ludCBsZW4gPSBnc3Rfc3RyaW5nX21lYXN1cmVfd3JhcHBpbmcgKHMpOwotCi0gIGlmIChHX0xJS0VMWSAobGVuIDwgMCkpCi0gICAgcmV0dXJuIHM7Ci0KLSAgb3V0ID0gZ3N0X3N0cmluZ193cmFwX2lubmVyIChzLCBsZW4pOwotICBnX2ZyZWUgKHMpOwotCi0gIHJldHVybiBvdXQ7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIGRlbGltaXRlZCB3aXRoIGRvdWJsZSBxdW90ZXMgKCIpCi0gKiBhbmQgdW5lc2NhcGVzIGFueSBceHh4IG9jdGFsIG51bWJlcnMuCi0gKgotICogSWYgc2VxdWVuY2VzIG9mIFx5IGFyZSBmb3VuZCB3aGVyZSB5IGlzIG5vdCBpbiB0aGUgcmFuZ2Ugb2YKLSAqIDAtPjMsIHkgaXMgY29waWVkIHVuZXNjYXBlZC4KLSAqCi0gKiBJZiBceHl5IGlzIGZvdW5kIHdoZXJlIHggaXMgYW4gb2N0YWwgbnVtYmVyIGJ1dCB5IGlzIG5vdCwgYW4KLSAqIGVycm9yIGlzIGVuY291bnRlcmVkIGFuZCAlTlVMTCBpcyByZXR1cm5lZC4KLSAqCi0gKiB0aGUgaW5wdXQgc3RyaW5nIG11c3QgYmUgXDAgdGVybWluYXRlZC4KLSAqLwotc3RhdGljIGdjaGFyICoKLWdzdF9zdHJpbmdfdW53cmFwIChjb25zdCBnY2hhciAqIHMpCi17Ci0gIGdjaGFyICpyZXQ7Ci0gIGdjaGFyICpyZWFkLCAqd3JpdGU7Ci0KLSAgLyogTlVMTCBzdHJpbmcgcmV0dXJucyBOVUxMICovCi0gIGlmIChzID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogc3RyaW5ncyBub3Qgc3RhcnRpbmcgd2l0aCAiIGFyZSBpbnZhbGlkICovCi0gIGlmICgqcyAhPSAnIicpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogbWFrZSBjb3B5IG9mIG9yaWdpbmFsIHN0cmluZyB0byBob2xkIHRoZSByZXN1bHQuIFRoaXMKLSAgICogc3RyaW5nIHdpbGwgYWx3YXlzIGJlIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwgKi8KLSAgcmV0ID0gZ19zdHJkdXAgKHMpOwotICByZWFkID0gcmV0OwotICB3cml0ZSA9IHJldDsKLQotICAvKiBuZWVkIHRvIG1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24gYXMgd2UgcGFyc2VkIHRoZSAiICovCi0gIHJlYWQrKzsKLQotICB3aGlsZSAoKnJlYWQpIHsKLSAgICBpZiAoR1NUX0FTQ0lJX0lTX1NUUklORyAoKnJlYWQpKSB7Ci0gICAgICAvKiBub3JtYWwgY2hhcnMgYXJlIGp1c3QgY29waWVkICovCi0gICAgICAqd3JpdGUrKyA9ICpyZWFkKys7Ci0gICAgfSBlbHNlIGlmICgqcmVhZCA9PSAnIicpIHsKLSAgICAgIC8qIHF1b3RlIG1hcmtzIGVuZCBvZiBzdHJpbmcgKi8KLSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAoKnJlYWQgPT0gJ1xcJykgewotICAgICAgLyogZ290IGFuIGVzY2FwZSBjaGFyLCBtb3ZlIHRvIG5leHQgcG9zaXRpb24gdG8gcmVhZCBhIHRyaXBwbGV0Ci0gICAgICAgKiBvZiBvY3RhbCBudW1iZXJzICovCi0gICAgICByZWFkKys7Ci0gICAgICAvKiBpcyB0aGUgbmV4dCBjaGFyIGEgcG9zc2libGUgZmlyc3Qgb2N0YWwgbnVtYmVyPyAqLwotICAgICAgaWYgKCpyZWFkID49ICcwJyAmJiAqcmVhZCA8PSAnMycpIHsKLSAgICAgICAgLyogcGFyc2Ugb3RoZXIgMiBudW1iZXJzLCBpZiBvbmUgb2YgdGhlbSBpcyBub3QgaW4gdGhlIHJhbmdlIG9mCi0gICAgICAgICAqIGFuIG9jdGFsIG51bWJlciwgd2UgZXJyb3IuIFdlIGFsc28gY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgYSB6ZXJvCi0gICAgICAgICAqIGJ5dGUgaXMgZm91bmQgaGVyZS4gKi8KLSAgICAgICAgaWYgKHJlYWRbMV0gPCAnMCcgfHwgcmVhZFsxXSA+ICc3JyB8fCByZWFkWzJdIDwgJzAnIHx8IHJlYWRbMl0gPiAnNycpCi0gICAgICAgICAgZ290byBiZWFjaDsKLQotICAgICAgICAvKiBub3cgY29udmVydCB0aGUgb2N0YWwgbnVtYmVyIHRvIGEgYnl0ZSBhZ2Fpbi4gKi8KLSAgICAgICAgKndyaXRlKysgPSAoKHJlYWRbMF0gLSAnMCcpIDw8IDYpICsKLSAgICAgICAgICAgICgocmVhZFsxXSAtICcwJykgPDwgMykgKyAocmVhZFsyXSAtICcwJyk7Ci0KLSAgICAgICAgcmVhZCArPSAzOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogaWYgd2UgcnVuIGludG8gYSBcMCBoZXJlLCB3ZSBkZWZpbml0ZWx5IHdvbid0IGdldCBhIHF1b3RlIGxhdGVyICovCi0gICAgICAgIGlmICgqcmVhZCA9PSAwKQotICAgICAgICAgIGdvdG8gYmVhY2g7Ci0KLSAgICAgICAgLyogZWxzZSBjb3B5IFxYIHNlcXVlbmNlICovCi0gICAgICAgICp3cml0ZSsrID0gKnJlYWQrKzsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogd2VpcmQgY2hhcmFjdGVyLCBlcnJvciAqLwotICAgICAgZ290byBiZWFjaDsKLSAgICB9Ci0gIH0KLSAgLyogaWYgdGhlIHN0cmluZyBpcyBub3QgZW5kaW5nIGluICIgYW5kIHplcm8gdGVybWluYXRlZCwgd2UgZXJyb3IgKi8KLSAgaWYgKCpyZWFkICE9ICciJyB8fCByZWFkWzFdICE9ICdcMCcpCi0gICAgZ290byBiZWFjaDsKLQotICAvKiBudWxsIHRlcm1pbmF0ZSByZXN1bHQgc3RyaW5nIGFuZCByZXR1cm4gKi8KLSAgKndyaXRlID0gJ1wwJzsKLSAgcmV0dXJuIHJldDsKLQotYmVhY2g6Ci0gIGdfZnJlZSAocmV0KTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX3N0cmluZyAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIHJldHVybiBnc3Rfc3RyaW5nX3dyYXAgKHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX3N0cmluZyAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQotewotICBpZiAoR19VTkxJS0VMWSAoc3RyY21wIChzLCAiTlVMTCIpID09IDApKSB7Ci0gICAgZ192YWx1ZV9zZXRfc3RyaW5nIChkZXN0LCBOVUxMKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfSBlbHNlIGlmIChHX0xJS0VMWSAoKnMgIT0gJyInIHx8IHNbc3RybGVuIChzKSAtIDFdICE9ICciJykpIHsKLSAgICBpZiAoIWdfdXRmOF92YWxpZGF0ZSAocywgLTEsIE5VTEwpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoZGVzdCwgcyk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgLyogc3RyaW5ncyBkZWxpbWl0ZWQgd2l0aCBkb3VibGUgcXVvdGVzIHNob3VsZCBiZSB1bndyYXBwZWQgKi8KLSAgICBnY2hhciAqc3RyID0gZ3N0X3N0cmluZ191bndyYXAgKHMpOwotICAgIGlmIChHX1VOTElLRUxZICghc3RyKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nIChkZXN0LCBzdHIpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKioqKioqKgotICogZW51bSAqCi0gKioqKioqKiovCi0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9lbnVtIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgR0VudW1WYWx1ZSAqZW4xLCAqZW4yOwotICBHRW51bUNsYXNzICprbGFzczEgPSAoR0VudW1DbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKHZhbHVlMSkpOwotICBHRW51bUNsYXNzICprbGFzczIgPSAoR0VudW1DbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKHZhbHVlMikpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChrbGFzczEsIEdTVF9WQUxVRV9VTk9SREVSRUQpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoa2xhc3MyLCBHU1RfVkFMVUVfVU5PUkRFUkVEKTsKLSAgZW4xID0gZ19lbnVtX2dldF92YWx1ZSAoa2xhc3MxLCBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZTEpKTsKLSAgZW4yID0gZ19lbnVtX2dldF92YWx1ZSAoa2xhc3MyLCBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZTIpKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChrbGFzczEpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGtsYXNzMik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbjEsIEdTVF9WQUxVRV9VTk9SREVSRUQpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW4yLCBHU1RfVkFMVUVfVU5PUkRFUkVEKTsKLSAgaWYgKGVuMS0+dmFsdWUgPCBlbjItPnZhbHVlKQotICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOwotICBpZiAoZW4xLT52YWx1ZSA+IGVuMi0+dmFsdWUpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47Ci0KLSAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92YWx1ZV9zZXJpYWxpemVfZW51bSAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIEdFbnVtVmFsdWUgKmVuOwotICBHRW51bUNsYXNzICprbGFzcyA9IChHRW51bUNsYXNzICopIGdfdHlwZV9jbGFzc19yZWYgKEdfVkFMVUVfVFlQRSAodmFsdWUpKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoa2xhc3MsIE5VTEwpOwotICBlbiA9IGdfZW51bV9nZXRfdmFsdWUgKGtsYXNzLCBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSkpOwotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGtsYXNzKTsKLQotICAvKiBtaWdodCBiZSBvbmUgb2YgdGhlIGN1c3RvbSBmb3JtYXRzIHJlZ2lzdGVyZWQgbGF0ZXIgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGVuID09IE5VTEwgJiYgR19WQUxVRV9UWVBFICh2YWx1ZSkgPT0gR1NUX1RZUEVfRk9STUFUKSkgewotICAgIGNvbnN0IEdzdEZvcm1hdERlZmluaXRpb24gKmZvcm1hdF9kZWY7Ci0KLSAgICBmb3JtYXRfZGVmID0gZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoZm9ybWF0X2RlZiAhPSBOVUxMLCBOVUxMKTsKLSAgICByZXR1cm4gZ19zdHJkdXAgKGZvcm1hdF9kZWYtPmRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbiwgTlVMTCk7Ci0gIHJldHVybiBnX3N0cmR1cCAoZW4tPnZhbHVlX25hbWUpOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2VudW1faXRlcl9jbXAgKGNvbnN0IEdWYWx1ZSAqIGZvcm1hdF9kZWZfdmFsdWUsCi0gICAgY29uc3QgZ2NoYXIgKiBzKQotewotICBjb25zdCBHc3RGb3JtYXREZWZpbml0aW9uICpmb3JtYXRfZGVmID0KLSAgICAgIGdfdmFsdWVfZ2V0X3BvaW50ZXIgKGZvcm1hdF9kZWZfdmFsdWUpOwotCi0gIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsIGZvcm1hdF9kZWYtPm5pY2spID09IDApCi0gICAgcmV0dXJuIDA7Ci0KLSAgcmV0dXJuIGdfYXNjaWlfc3RyY2FzZWNtcCAocywgZm9ybWF0X2RlZi0+ZGVzY3JpcHRpb24pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9lbnVtIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIEdFbnVtVmFsdWUgKmVuOwotICBnY2hhciAqZW5kcHRyID0gTlVMTDsKLSAgR0VudW1DbGFzcyAqa2xhc3MgPSAoR0VudW1DbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKGRlc3QpKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoa2xhc3MsIEZBTFNFKTsKLSAgaWYgKCEoZW4gPSBnX2VudW1fZ2V0X3ZhbHVlX2J5X25hbWUgKGtsYXNzLCBzKSkpIHsKLSAgICBpZiAoIShlbiA9IGdfZW51bV9nZXRfdmFsdWVfYnlfbmljayAoa2xhc3MsIHMpKSkgewotICAgICAgZ2ludCBpID0gc3RydG9sIChzLCAmZW5kcHRyLCAwKTsKLQotICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcpIHsKLSAgICAgICAgZW4gPSBnX2VudW1fZ2V0X3ZhbHVlIChrbGFzcywgaSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoa2xhc3MpOwotCi0gIC8qIG1pZ2h0IGJlIG9uZSBvZiB0aGUgY3VzdG9tIGZvcm1hdHMgcmVnaXN0ZXJlZCBsYXRlciAqLwotICBpZiAoR19VTkxJS0VMWSAoZW4gPT0gTlVMTCAmJiBHX1ZBTFVFX1RZUEUgKGRlc3QpID09IEdTVF9UWVBFX0ZPUk1BVCkpIHsKLSAgICBHVmFsdWUgcmVzID0geyAwLCB9OwotICAgIGNvbnN0IEdzdEZvcm1hdERlZmluaXRpb24gKmZvcm1hdF9kZWY7Ci0gICAgR3N0SXRlcmF0b3IgKml0ZXI7Ci0gICAgZ2Jvb2xlYW4gZm91bmQ7Ci0KLSAgICBpdGVyID0gZ3N0X2Zvcm1hdF9pdGVyYXRlX2RlZmluaXRpb25zICgpOwotCi0gICAgZm91bmQgPSBnc3RfaXRlcmF0b3JfZmluZF9jdXN0b20gKGl0ZXIsCi0gICAgICAgIChHQ29tcGFyZUZ1bmMpIGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9lbnVtX2l0ZXJfY21wLCAmcmVzLCAoZ3BvaW50ZXIpIHMpOwotCi0gICAgaWYgKGZvdW5kKSB7Ci0gICAgICBmb3JtYXRfZGVmID0gZ192YWx1ZV9nZXRfcG9pbnRlciAoJnJlcyk7Ci0gICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoZm9ybWF0X2RlZiAhPSBOVUxMLCBGQUxTRSk7Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtIChkZXN0LCAoZ2ludCkgZm9ybWF0X2RlZi0+dmFsdWUpOwotICAgICAgZ192YWx1ZV91bnNldCAoJnJlcyk7Ci0gICAgfQotICAgIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLSAgICByZXR1cm4gZm91bmQ7Ci0gIH0KLQotICAvKiBlbnVtIG5hbWUvbmljayBub3QgZm91bmQgKi8KLSAgaWYgKGVuID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdfdmFsdWVfc2V0X2VudW0gKGRlc3QsIGVuLT52YWx1ZSk7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKioqKioqKioKLSAqIGZsYWdzICoKLSAqKioqKioqKi8KLQotLyogd2UganVzdCBjb21wYXJlIHRoZSB2YWx1ZSBoZXJlICovCi1zdGF0aWMgZ2ludAotZ3N0X3ZhbHVlX2NvbXBhcmVfZ2ZsYWdzIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgZ3VpbnQgZmwxLCBmbDI7Ci0gIEdGbGFnc0NsYXNzICprbGFzczEgPQotICAgICAgKEdGbGFnc0NsYXNzICopIGdfdHlwZV9jbGFzc19yZWYgKEdfVkFMVUVfVFlQRSAodmFsdWUxKSk7Ci0gIEdGbGFnc0NsYXNzICprbGFzczIgPQotICAgICAgKEdGbGFnc0NsYXNzICopIGdfdHlwZV9jbGFzc19yZWYgKEdfVkFMVUVfVFlQRSAodmFsdWUyKSk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGtsYXNzMSwgR1NUX1ZBTFVFX1VOT1JERVJFRCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChrbGFzczIsIEdTVF9WQUxVRV9VTk9SREVSRUQpOwotICBmbDEgPSBnX3ZhbHVlX2dldF9mbGFncyAodmFsdWUxKTsKLSAgZmwyID0gZ192YWx1ZV9nZXRfZmxhZ3MgKHZhbHVlMik7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoa2xhc3MxKTsKLSAgZ190eXBlX2NsYXNzX3VucmVmIChrbGFzczIpOwotICBpZiAoZmwxIDwgZmwyKQotICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOwotICBpZiAoZmwxID4gZmwyKQotICAgIHJldHVybiBHU1RfVkFMVUVfR1JFQVRFUl9USEFOOwotCi0gIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci19Ci0KLS8qIHRoZSBkaWZmZXJlbnQgZmxhZ3MgYXJlIHNlcmlhbGl6ZWQgc2VwYXJhdGVkIHdpdGggYSArICovCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9nZmxhZ3MgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBndWludCBmbGFnczsKLSAgR0ZsYWdzVmFsdWUgKmZsOwotICBHRmxhZ3NDbGFzcyAqa2xhc3MgPSAoR0ZsYWdzQ2xhc3MgKikgZ190eXBlX2NsYXNzX3JlZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkpOwotICBnY2hhciAqcmVzdWx0LCAqdG1wOwotICBnYm9vbGVhbiBmaXJzdCA9IFRSVUU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGtsYXNzLCBOVUxMKTsKLQotICBmbGFncyA9IGdfdmFsdWVfZ2V0X2ZsYWdzICh2YWx1ZSk7Ci0KLSAgLyogaWYgbm8gZmxhZ3MgYXJlIHNldCwgdHJ5IHRvIHNlcmlhbGl6ZSB0byB0aGUgX05PTkUgc3RyaW5nICovCi0gIGlmICghZmxhZ3MpIHsKLSAgICBmbCA9IGdfZmxhZ3NfZ2V0X2ZpcnN0X3ZhbHVlIChrbGFzcywgZmxhZ3MpOwotICAgIGlmIChmbCkKLSAgICAgIHJldHVybiBnX3N0cmR1cCAoZmwtPnZhbHVlX25hbWUpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnX3N0cmR1cCAoIjAiKTsKLSAgfQotCi0gIC8qIHNvbWUgZmxhZ3MgYXJlIHNldCwgc28gc2VyaWFsaXplIG9uZSBieSBvbmUgKi8KLSAgcmVzdWx0ID0gZ19zdHJkdXAgKCIiKTsKLSAgd2hpbGUgKGZsYWdzKSB7Ci0gICAgZmwgPSBnX2ZsYWdzX2dldF9maXJzdF92YWx1ZSAoa2xhc3MsIGZsYWdzKTsKLSAgICBpZiAoZmwgIT0gTlVMTCkgewotICAgICAgdG1wID0gZ19zdHJjb25jYXQgKHJlc3VsdCwgKGZpcnN0ID8gIiIgOiAiKyIpLCBmbC0+dmFsdWVfbmFtZSwgTlVMTCk7Ci0gICAgICBnX2ZyZWUgKHJlc3VsdCk7Ci0gICAgICByZXN1bHQgPSB0bXA7Ci0gICAgICBmaXJzdCA9IEZBTFNFOwotCi0gICAgICAvKiBjbGVhciBmbGFnICovCi0gICAgICBmbGFncyAmPSB+ZmwtPnZhbHVlOwotICAgIH0KLSAgfQotICBnX3R5cGVfY2xhc3NfdW5yZWYgKGtsYXNzKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9nZmxhZ3Nfc3RyX3RvX2ZsYWdzIChHRmxhZ3NDbGFzcyAqIGtsYXNzLCBjb25zdCBnY2hhciAqIHMsCi0gICAgZ3VpbnQgKiBvdXRfZmxhZ3MsIGd1aW50ICogb3V0X21hc2spCi17Ci0gIEdGbGFnc1ZhbHVlICpmbDsKLSAgZ2NoYXIgZGVsaW1pdGVyOwotICBjb25zdCBnY2hhciAqcG9zID0gTlVMTDsKLSAgY29uc3QgZ2NoYXIgKm5leHQ7Ci0gIGdjaGFyICpjdXJfc3RyLCAqZW5kcHRyOwotICBndWludCBmbGFncyA9IDA7Ci0gIGd1aW50IG1hc2sgPSAwOwotICBndWludCB2YWw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGtsYXNzLCBGQUxTRSk7Ci0KLSAgLyogc3BsaXQgaW50byBwYXJ0cyBkZWxpbWl0ZWQgd2l0aCArIG9yIC8gYW5kCi0gICAqIGNvbXBvc2UgdGhlIHNldCBvZiBmbGFncyBhbmQgbWFzay4gKi8KLSAgcG9zID0gczsKLQotICBpZiAoKnBvcyA9PSAnXDAnKQotICAgIGdvdG8gZG9uZTsgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBzdHJpbmcsIG5vdGhpbmcgdG8gZG8gKi8KLQotICAvKiBBcyBhIHNwZWNpYWwgY2FzZSBpZiB0aGUgZmlyc3QgY2hhciBpc24ndCBhIGRlbGltaXRlciwgYXNzdW1lCi0gICAqIGl0J3MgYSAnKycgLSBmb3IgR0ZsYWdzIHN0cmluZ3MsIHdoaWNoIGRvbid0IHN0YXJ0IHdpdGggYQotICAgKiBkZWxpbWl0ZXIsIHdoaWxlIEdGbGFnU2V0IGFsd2F5cyB3aWxsICovCi0gIGlmICgqcG9zID09ICcvJyB8fCAqcG9zID09ICcrJykgewotICAgIGRlbGltaXRlciA9ICpwb3M7Ci0gICAgcG9zKys7Ci0gIH0gZWxzZSB7Ci0gICAgZGVsaW1pdGVyID0gJysnOwotICB9Ci0KLSAgZG8gewotICAgIC8qIEZpbmQgdGhlIG5leHQgZGVsaW1pdGVyICovCi0gICAgbmV4dCA9IHBvczsKLSAgICB3aGlsZSAoKm5leHQgIT0gJ1wwJyAmJiAqbmV4dCAhPSAnKycgJiYgKm5leHQgIT0gJy8nKQotICAgICAgbmV4dCsrOwotICAgIGN1cl9zdHIgPSBnX3N0cm5kdXAgKHBvcywgbmV4dCAtIHBvcyk7Ci0KLSAgICBpZiAoKGZsID0gZ19mbGFnc19nZXRfdmFsdWVfYnlfbmFtZSAoa2xhc3MsIGN1cl9zdHIpKSkKLSAgICAgIHZhbCA9IGZsLT52YWx1ZTsKLSAgICBlbHNlIGlmICgoZmwgPSBnX2ZsYWdzX2dldF92YWx1ZV9ieV9uaWNrIChrbGFzcywgY3VyX3N0cikpKQotICAgICAgdmFsID0gZmwtPnZhbHVlOwotICAgIGVsc2UgewotICAgICAgdmFsID0gc3RydG91bCAoY3VyX3N0ciwgJmVuZHB0ciwgMCk7Ci0gICAgICAvKiBkaXJlY3QgbnVtZXJpYyB2YWx1ZSAqLwotICAgICAgaWYgKGVuZHB0ciA9PSBOVUxMIHx8ICplbmRwdHIgIT0gJ1wwJykgewotICAgICAgICBnX2ZyZWUgKGN1cl9zdHIpOwotICAgICAgICByZXR1cm4gRkFMU0U7ICAgICAgICAgICAvKiBJbnZhbGlkIG51bWVyaWMgb3Igc3RyaW5nIHdlIGNhbid0IGNvbnZlcnQgKi8KLSAgICAgIH0KLSAgICB9Ci0gICAgZ19mcmVlIChjdXJfc3RyKTsKLQotICAgIGlmICh2YWwpIHsKLSAgICAgIG1hc2sgfD0gdmFsOwotICAgICAgaWYgKGRlbGltaXRlciA9PSAnKycpCi0gICAgICAgIGZsYWdzIHw9IHZhbDsKLSAgICB9Ci0KLSAgICAvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGRlbGltaXRlciAqLwotICAgIHBvcyA9IG5leHQ7Ci0gICAgZGVsaW1pdGVyID0gKnBvczsKLSAgICBwb3MrKzsKLSAgfSB3aGlsZSAoZGVsaW1pdGVyICE9ICdcMCcpOwotCi1kb25lOgotICBpZiAob3V0X2ZsYWdzKQotICAgICpvdXRfZmxhZ3MgPSBmbGFnczsKLSAgaWYgKG91dF9tYXNrKQotICAgICpvdXRfbWFzayA9IG1hc2s7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfZ2ZsYWdzIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIEdGbGFnc0NsYXNzICprbGFzcyA9IChHRmxhZ3NDbGFzcyAqKSBnX3R5cGVfY2xhc3NfcmVmIChHX1ZBTFVFX1RZUEUgKGRlc3QpKTsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIGd1aW50IGZsYWdzID0gMDsKLQotICBpZiAoZ3N0X3ZhbHVlX2dmbGFnc19zdHJfdG9fZmxhZ3MgKGtsYXNzLCBzLCAmZmxhZ3MsIE5VTEwpKSB7Ci0gICAgZ192YWx1ZV9zZXRfZmxhZ3MgKGRlc3QsIGZsYWdzKTsKLSAgICByZXMgPSBUUlVFOwotICB9Ci0KLSAgZ190eXBlX2NsYXNzX3VucmVmIChrbGFzcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqKioqKioqKioqKioqKioKLSAqIHN1YnNldCAqCi0gKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfaXNfc3Vic2V0X2ludF9yYW5nZV9pbnRfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCi17Ci0gIGdpbnQgZ2NkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICh2YWx1ZTEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICh2YWx1ZTIpLCBGQUxTRSk7Ci0KLSAgaWYgKElOVF9SQU5HRV9NSU4gKHZhbHVlMSkgKiBJTlRfUkFOR0VfU1RFUCAodmFsdWUxKSA8Ci0gICAgICBJTlRfUkFOR0VfTUlOICh2YWx1ZTIpICogSU5UX1JBTkdFX1NURVAgKHZhbHVlMikpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoSU5UX1JBTkdFX01BWCAodmFsdWUxKSAqIElOVF9SQU5HRV9TVEVQICh2YWx1ZTEpID4KLSAgICAgIElOVF9SQU5HRV9NQVggKHZhbHVlMikgKiBJTlRfUkFOR0VfU1RFUCAodmFsdWUyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKElOVF9SQU5HRV9NSU4gKHZhbHVlMikgPT0gSU5UX1JBTkdFX01BWCAodmFsdWUyKSkgewotICAgIGlmICgoSU5UX1JBTkdFX01JTiAodmFsdWUyKSAqIElOVF9SQU5HRV9TVEVQICh2YWx1ZTIpKSAlCi0gICAgICAgIElOVF9SQU5HRV9TVEVQICh2YWx1ZTEpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgZ2NkID0KLSAgICAgIGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yIChJTlRfUkFOR0VfU1RFUCAodmFsdWUxKSwKLSAgICAgIElOVF9SQU5HRV9TVEVQICh2YWx1ZTIpKTsKLSAgaWYgKGdjZCAhPSBNSU4gKElOVF9SQU5HRV9TVEVQICh2YWx1ZTEpLCBJTlRfUkFOR0VfU1RFUCAodmFsdWUyKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9pc19zdWJzZXRfaW50NjRfcmFuZ2VfaW50NjRfcmFuZ2UgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCi17Ci0gIGdpbnQ2NCBnY2Q7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAodmFsdWUxKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh2YWx1ZTIpLCBGQUxTRSk7Ci0KLSAgaWYgKElOVDY0X1JBTkdFX01JTiAodmFsdWUxKSA8IElOVDY0X1JBTkdFX01JTiAodmFsdWUyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChJTlQ2NF9SQU5HRV9NQVggKHZhbHVlMSkgPiBJTlQ2NF9SQU5HRV9NQVggKHZhbHVlMikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChJTlQ2NF9SQU5HRV9NSU4gKHZhbHVlMikgPT0gSU5UNjRfUkFOR0VfTUFYICh2YWx1ZTIpKSB7Ci0gICAgaWYgKChJTlQ2NF9SQU5HRV9NSU4gKHZhbHVlMikgKiBJTlQ2NF9SQU5HRV9TVEVQICh2YWx1ZTIpKSAlCi0gICAgICAgIElOVDY0X1JBTkdFX1NURVAgKHZhbHVlMSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBnY2QgPQotICAgICAgZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3JfaW50NjQgKElOVDY0X1JBTkdFX1NURVAgKHZhbHVlMSksCi0gICAgICBJTlQ2NF9SQU5HRV9TVEVQICh2YWx1ZTIpKTsKLSAgaWYgKGdjZCAhPSBNSU4gKElOVDY0X1JBTkdFX1NURVAgKHZhbHVlMSksIElOVDY0X1JBTkdFX1NURVAgKHZhbHVlMikpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogQSBmbGFnIHNldCBpcyBhIHN1YnNldCBvZiBhbm90aGVyIGlmIHRoZSBzdXBlcnNldCBhbGxvd3MgdGhlCi0gKiBmbGFncyBvZiB0aGUgc3Vic2V0ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9pc19zdWJzZXRfZmxhZ3NldF9mbGFnc2V0IChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBndWludCBmMSwgZjI7Ci0gIGd1aW50IG0xLCBtMjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUICh2YWx1ZTEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHZhbHVlMiksIEZBTFNFKTsKLQotICBmMSA9IHZhbHVlMS0+ZGF0YVswXS52X3VpbnQ7Ci0gIGYyID0gdmFsdWUyLT5kYXRhWzBdLnZfdWludDsKLQotICBtMSA9IHZhbHVlMS0+ZGF0YVsxXS52X3VpbnQ7Ci0gIG0yID0gdmFsdWUyLT5kYXRhWzFdLnZfdWludDsKLQotICAvKiBOb3QgYSBzdWJzZXQgaWYgbWFza2VkIGJpdHMgb2Ygc3VwZXJzZXQgZGlzYWdyZWUgKi8KLSAgaWYgKChmMSAmIG0xKSAhPSAoZjIgJiAobTEgJiBtMikpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfaXNfc3Vic2V0OgotICogQHZhbHVlMTogYSAjR1ZhbHVlCi0gKiBAdmFsdWUyOiBhICNHVmFsdWUKLSAqCi0gKiBDaGVjayB0aGF0IEB2YWx1ZTEgaXMgYSBzdWJzZXQgb2YgQHZhbHVlMi4KLSAqCi0gKiBSZXR1cm46ICVUUlVFIGlzIEB2YWx1ZTEgaXMgYSBzdWJzZXQgb2YgQHZhbHVlMgotICovCi1nYm9vbGVhbgotZ3N0X3ZhbHVlX2lzX3N1YnNldCAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIpCi17Ci0gIC8qIHNwZWNpYWwgY2FzZSBmb3IgaW50L2ludDY0IHJhbmdlcywgc2luY2Ugd2UgY2Fubm90IGNvbXB1dGUKLSAgICAgdGhlIGRpZmZlcmVuY2UgZm9yIHRob3NlIHdoZW4gdGhleSBoYXZlIGRpZmZlcmVudCBzdGVwcywKLSAgICAgYW5kIGl0J3MgYWN0dWFsbHkgYSBsb3Qgc2ltcGxlciB0byBjb21wdXRlIHdoZXRoZXIgYSByYW5nZQotICAgICBpcyBhIHN1YnNldCBvZiBhbm90aGVyLiAqLwotICBpZiAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodmFsdWUxKSAmJiBHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICh2YWx1ZTIpKSB7Ci0gICAgcmV0dXJuIGdzdF92YWx1ZV9pc19zdWJzZXRfaW50X3JhbmdlX2ludF9yYW5nZSAodmFsdWUxLCB2YWx1ZTIpOwotICB9IGVsc2UgaWYgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAodmFsdWUxKQotICAgICAgJiYgR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh2YWx1ZTIpKSB7Ci0gICAgcmV0dXJuIGdzdF92YWx1ZV9pc19zdWJzZXRfaW50NjRfcmFuZ2VfaW50NjRfcmFuZ2UgKHZhbHVlMSwgdmFsdWUyKTsKLSAgfSBlbHNlIGlmIChHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHZhbHVlMSkgJiYKLSAgICAgIEdTVF9WQUxVRV9IT0xEU19GTEFHX1NFVCAodmFsdWUyKSkgewotICAgIHJldHVybiBnc3RfdmFsdWVfaXNfc3Vic2V0X2ZsYWdzZXRfZmxhZ3NldCAodmFsdWUxLCB2YWx1ZTIpOwotICB9Ci0KLSAgLyoKLSAgICogMSAtIFsxLDJdID0gZW1wdHkKLSAgICogLT4gIXN1YnNldAotICAgKgotICAgKiBbMSwyXSAtIDEgPSAyCi0gICAqICAtPiAxIC0gWzEsMl0gPSBlbXB0eQotICAgKiAgLT4gc3Vic2V0Ci0gICAqCi0gICAqIFsxLDNdIC0gWzEsMl0gPSAzCi0gICAqIC0+IFsxLDJdIC0gWzEsM10gPSBlbXB0eQotICAgKiAtPiBzdWJzZXQKLSAgICoKLSAgICogezEsMn0gLSB7MSwzfSA9IDIKLSAgICogLT4gezEsM30gLSB7MSwyfSA9IDMKLSAgICogLT4gIXN1YnNldAotICAgKgotICAgKiAgRmlyc3QgY2FwcyBzdWJ0cmFjdGlvbiBuZWVkcyB0byByZXR1cm4gYSBub24tZW1wdHkgc2V0LCBzZWNvbmQKLSAgICogIHN1YnRyYWN0aW9ucyBuZWVkcyB0byBnaXZlIGVuIGVtcHR5IHNldC4KLSAgICogIEJvdGggc3Vic3RyYWN0aW9ucyBhcmUgc3dpdGNoZWQgYmVsb3csIGFzIGl0J3MgZmFzdGVyIHRoYXQgd2F5LgotICAgKi8KLSAgaWYgKCFnc3RfdmFsdWVfc3VidHJhY3QgKE5VTEwsIHZhbHVlMSwgdmFsdWUyKSkgewotICAgIGlmIChnc3RfdmFsdWVfc3VidHJhY3QgKE5VTEwsIHZhbHVlMiwgdmFsdWUxKSkgewotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqKioqKioqKgotICogdW5pb24gKgotICoqKioqKioqKi8KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfdW5pb25faW50X2ludF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogc3JjMSwKLSAgICBjb25zdCBHVmFsdWUgKiBzcmMyKQotewotICBnaW50IHYgPSBzcmMxLT5kYXRhWzBdLnZfaW50OwotCi0gIC8qIGNoZWNrIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgcmFuZ2UgKi8KLSAgaWYgKElOVF9SQU5HRV9NSU4gKHNyYzIpICogSU5UX1JBTkdFX1NURVAgKHNyYzIpIDw9IHYgJiYKLSAgICAgIElOVF9SQU5HRV9NQVggKHNyYzIpICogSU5UX1JBTkdFX1NURVAgKHNyYzIpID49IHYgJiYKLSAgICAgIHYgJSBJTlRfUkFOR0VfU1RFUCAoc3JjMikgPT0gMCkgewotICAgIGlmIChkZXN0KQotICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIHNyYzIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogY2hlY2sgaWYgaXQgZXh0ZW5kcyB0aGUgcmFuZ2UgKi8KLSAgaWYgKHYgPT0gKElOVF9SQU5HRV9NSU4gKHNyYzIpIC0gMSkgKiBJTlRfUkFOR0VfU1RFUCAoc3JjMikpIHsKLSAgICBpZiAoZGVzdCkgewotICAgICAgZ3VpbnQ2NCBuZXdfbWluID0KLSAgICAgICAgICAoZ3VpbnQpICgoSU5UX1JBTkdFX01JTiAoc3JjMikgLSAxKSAqIElOVF9SQU5HRV9TVEVQIChzcmMyKSk7Ci0gICAgICBndWludDY0IG5ld19tYXggPSAoZ3VpbnQpIChJTlRfUkFOR0VfTUFYIChzcmMyKSAqIElOVF9SQU5HRV9TVEVQIChzcmMyKSk7Ci0KLSAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBzcmMyKTsKLSAgICAgIGRlc3QtPmRhdGFbMF0udl91aW50NjQgPSAobmV3X21pbiA8PCAzMikgfCAobmV3X21heCk7Ci0gICAgfQotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIGlmICh2ID09IChJTlRfUkFOR0VfTUFYIChzcmMyKSArIDEpICogSU5UX1JBTkdFX1NURVAgKHNyYzIpKSB7Ci0gICAgaWYgKGRlc3QpIHsKLSAgICAgIGd1aW50NjQgbmV3X21pbiA9IChndWludCkgKElOVF9SQU5HRV9NSU4gKHNyYzIpICogSU5UX1JBTkdFX1NURVAgKHNyYzIpKTsKLSAgICAgIGd1aW50NjQgbmV3X21heCA9Ci0gICAgICAgICAgKGd1aW50KSAoKElOVF9SQU5HRV9NQVggKHNyYzIpICsgMSkgKiBJTlRfUkFOR0VfU1RFUCAoc3JjMikpOwotCi0gICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgc3JjMik7Ci0gICAgICBkZXN0LT5kYXRhWzBdLnZfdWludDY0ID0gKG5ld19taW4gPDwgMzIpIHwgKG5ld19tYXgpOwotICAgIH0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfdW5pb25faW50X3JhbmdlX2ludF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogc3JjMSwKLSAgICBjb25zdCBHVmFsdWUgKiBzcmMyKQotewotICAvKiBXZSBjYW4gdW5pb24gaW4gc2V2ZXJhbCBzcGVjaWFsIGNhc2VzOgotICAgICAxIC0gb25lIGlzIGEgc3Vic2V0IG9mIGFub3RoZXIKLSAgICAgMiAtIHNhbWUgc3RlcCBhbmQgbm90IGRpc2pvaW50Ci0gICAgIDMgLSBkaWZmZXJlbnQgc3RlcCwgYXQgbGVhc3Qgb25lIHdpdGggb25lIHZhbHVlIHdoaWNoIG1hdGNoZXMgYSAnbmV4dCcgb3IgJ3ByZXZpb3VzJwotICAgICAtIGFueXRoaW5nIGVsc2UgPwotICAgKi8KLQotICAvKiAxIC0gc3Vic2V0ICovCi0gIGlmIChnc3RfdmFsdWVfaXNfc3Vic2V0X2ludF9yYW5nZV9pbnRfcmFuZ2UgKHNyYzEsIHNyYzIpKSB7Ci0gICAgaWYgKGRlc3QpCi0gICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgc3JjMik7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgaWYgKGdzdF92YWx1ZV9pc19zdWJzZXRfaW50X3JhbmdlX2ludF9yYW5nZSAoc3JjMiwgc3JjMSkpIHsKLSAgICBpZiAoZGVzdCkKLSAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBzcmMxKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIC8qIDIgLSBzYW1lIHN0ZXAgYW5kIG5vdCBkaXNqb2ludCAqLwotICBpZiAoSU5UX1JBTkdFX1NURVAgKHNyYzEpID09IElOVF9SQU5HRV9TVEVQIChzcmMyKSkgewotICAgIGlmICgoSU5UX1JBTkdFX01JTiAoc3JjMSkgPD0gSU5UX1JBTkdFX01BWCAoc3JjMikgKyAxICYmCi0gICAgICAgICAgICBJTlRfUkFOR0VfTUFYIChzcmMxKSA+PSBJTlRfUkFOR0VfTUlOIChzcmMyKSAtIDEpIHx8Ci0gICAgICAgIChJTlRfUkFOR0VfTUlOIChzcmMyKSA8PSBJTlRfUkFOR0VfTUFYIChzcmMxKSArIDEgJiYKLSAgICAgICAgICAgIElOVF9SQU5HRV9NQVggKHNyYzIpID49IElOVF9SQU5HRV9NSU4gKHNyYzEpIC0gMSkpIHsKLSAgICAgIGlmIChkZXN0KSB7Ci0gICAgICAgIGdpbnQgc3RlcCA9IElOVF9SQU5HRV9TVEVQIChzcmMxKTsKLSAgICAgICAgZ2ludCBtaW4gPSBzdGVwICogTUlOIChJTlRfUkFOR0VfTUlOIChzcmMxKSwgSU5UX1JBTkdFX01JTiAoc3JjMikpOwotICAgICAgICBnaW50IG1heCA9IHN0ZXAgKiBNQVggKElOVF9SQU5HRV9NQVggKHNyYzEpLCBJTlRfUkFOR0VfTUFYIChzcmMyKSk7Ci0gICAgICAgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcCAoZGVzdCwgbWluLCBtYXgsIHN0ZXApOwotICAgICAgfQotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgLyogMyAtIHNpbmdsZSB2YWx1ZSBtYXRjaGVzIG5leHQgb3IgcHJldmlvdXMgKi8KLSAgaWYgKElOVF9SQU5HRV9TVEVQIChzcmMxKSAhPSBJTlRfUkFOR0VfU1RFUCAoc3JjMikpIHsKLSAgICBnaW50IG4xID0gSU5UX1JBTkdFX01BWCAoc3JjMSkgLSBJTlRfUkFOR0VfTUlOIChzcmMxKSArIDE7Ci0gICAgZ2ludCBuMiA9IElOVF9SQU5HRV9NQVggKHNyYzIpIC0gSU5UX1JBTkdFX01JTiAoc3JjMikgKyAxOwotICAgIGlmIChuMSA9PSAxIHx8IG4yID09IDEpIHsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqcmFuZ2VfdmFsdWUgPSBOVUxMOwotICAgICAgZ2ludCBzY2FsYXIgPSAwOwotICAgICAgaWYgKG4xID09IDEpIHsKLSAgICAgICAgcmFuZ2VfdmFsdWUgPSBzcmMyOwotICAgICAgICBzY2FsYXIgPSBJTlRfUkFOR0VfTUlOIChzcmMxKSAqIElOVF9SQU5HRV9TVEVQIChzcmMxKTsKLSAgICAgIH0gZWxzZSBpZiAobjIgPT0gMSkgewotICAgICAgICByYW5nZV92YWx1ZSA9IHNyYzE7Ci0gICAgICAgIHNjYWxhciA9IElOVF9SQU5HRV9NSU4gKHNyYzIpICogSU5UX1JBTkdFX1NURVAgKHNyYzIpOwotICAgICAgfQotCi0gICAgICBpZiAoc2NhbGFyID09Ci0gICAgICAgICAgKElOVF9SQU5HRV9NSU4gKHJhbmdlX3ZhbHVlKSAtIDEpICogSU5UX1JBTkdFX1NURVAgKHJhbmdlX3ZhbHVlKSkgewotICAgICAgICBpZiAoZGVzdCkgewotICAgICAgICAgIGd1aW50NjQgbmV3X21pbiA9IChndWludCkKLSAgICAgICAgICAgICAgKChJTlRfUkFOR0VfTUlOIChyYW5nZV92YWx1ZSkgLQotICAgICAgICAgICAgICAgICAgMSkgKiBJTlRfUkFOR0VfU1RFUCAocmFuZ2VfdmFsdWUpKTsKLSAgICAgICAgICBndWludDY0IG5ld19tYXggPSAoZ3VpbnQpCi0gICAgICAgICAgICAgIChJTlRfUkFOR0VfTUFYIChyYW5nZV92YWx1ZSkgKiBJTlRfUkFOR0VfU1RFUCAocmFuZ2VfdmFsdWUpKTsKLQotICAgICAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCByYW5nZV92YWx1ZSk7Ci0gICAgICAgICAgZGVzdC0+ZGF0YVswXS52X3VpbnQ2NCA9IChuZXdfbWluIDw8IDMyKSB8IChuZXdfbWF4KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgIH0gZWxzZSBpZiAoc2NhbGFyID09Ci0gICAgICAgICAgKElOVF9SQU5HRV9NQVggKHJhbmdlX3ZhbHVlKSArIDEpICogSU5UX1JBTkdFX1NURVAgKHJhbmdlX3ZhbHVlKSkgewotICAgICAgICBpZiAoZGVzdCkgewotICAgICAgICAgIGd1aW50NjQgbmV3X21pbiA9IChndWludCkKLSAgICAgICAgICAgICAgKElOVF9SQU5HRV9NSU4gKHJhbmdlX3ZhbHVlKSAqIElOVF9SQU5HRV9TVEVQIChyYW5nZV92YWx1ZSkpOwotICAgICAgICAgIGd1aW50NjQgbmV3X21heCA9IChndWludCkKLSAgICAgICAgICAgICAgKChJTlRfUkFOR0VfTUFYIChyYW5nZV92YWx1ZSkgKwotICAgICAgICAgICAgICAgICAgMSkgKiBJTlRfUkFOR0VfU1RFUCAocmFuZ2VfdmFsdWUpKTsKLSAgICAgICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgcmFuZ2VfdmFsdWUpOwotICAgICAgICAgIGRlc3QtPmRhdGFbMF0udl91aW50NjQgPSAobmV3X21pbiA8PCAzMikgfCAobmV3X21heCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogSWYgd2UgZ2V0IHRoZXJlLCB3ZSBkaWQgbm90IGZpbmQgYSB3YXkgdG8gbWFrZSBhIHVuaW9uIHRoYXQgY2FuIGJlCi0gICAgIHJlcHJlc2VudGVkIHdpdGggb3VyIHNpbXBsaXN0aWMgbW9kZWwuICovCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfdW5pb25fZmxhZ3NldF9mbGFnc2V0IChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMxLAotICAgIGNvbnN0IEdWYWx1ZSAqIHNyYzIpCi17Ci0gIC8qIFdlIGNhbiB1bmlvbiAyIGZsYWcgc2V0cyB3aGVyZSB0aGV5IGRvIG5vdCBkaXNhZ3JlZSBvbgotICAgKiByZXF1aXJlZCAobWFza2VkKSBmbGFnIGJpdHMgKi8KLSAgZ3VpbnQ2NCBmMSwgZjI7Ci0gIGd1aW50NjQgbTEsIG0yOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHNyYzEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHNyYzIpLCBGQUxTRSk7Ci0KLSAgZjEgPSBzcmMxLT5kYXRhWzBdLnZfdWludDsKLSAgZjIgPSBzcmMyLT5kYXRhWzBdLnZfdWludDsKLQotICBtMSA9IHNyYzEtPmRhdGFbMV0udl91aW50OwotICBtMiA9IHNyYzItPmRhdGFbMV0udl91aW50OwotCi0gIC8qIENhbid0IHVuaW9uIGlmIG1hc2tlZCBiaXRzIGRpc2FncmVlICovCi0gIGlmICgoZjEgJiAobTEgJiBtMikpICE9IChmMiAmIChtMSAmIG0yKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChkZXN0KSB7Ci0gICAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9GTEFHX1NFVCk7Ci0gICAgLyogQ29weSBtYXNrZWQgYml0cyBmcm9tIHNyYzIgdG8gc3JjMSAqLwotICAgIGYxICY9IH5tMjsKLSAgICBmMSB8PSAoZjIgJiBtMik7Ci0gICAgbTEgfD0gbTI7Ci0gICAgZ3N0X3ZhbHVlX3NldF9mbGFnc2V0IChkZXN0LCBmMSwgbTEpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKioqKioqKioqKioqKioqCi0gKiBpbnRlcnNlY3Rpb24gKgotICoqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnRfaW50X3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMxLAotICAgIGNvbnN0IEdWYWx1ZSAqIHNyYzIpCi17Ci0gIGlmIChJTlRfUkFOR0VfTUlOIChzcmMyKSAqIElOVF9SQU5HRV9TVEVQIChzcmMyKSA8PSBzcmMxLT5kYXRhWzBdLnZfaW50ICYmCi0gICAgICBJTlRfUkFOR0VfTUFYIChzcmMyKSAqIElOVF9SQU5HRV9TVEVQIChzcmMyKSA+PSBzcmMxLT5kYXRhWzBdLnZfaW50ICYmCi0gICAgICBzcmMxLT5kYXRhWzBdLnZfaW50ICUgSU5UX1JBTkdFX1NURVAgKHNyYzIpID09IDApIHsKLSAgICBpZiAoZGVzdCkKLSAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBzcmMxKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfaW50ZXJzZWN0X2ludF9yYW5nZV9pbnRfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYzEsCi0gICAgY29uc3QgR1ZhbHVlICogc3JjMikKLXsKLSAgZ2ludCBtaW47Ci0gIGdpbnQgbWF4OwotICBnaW50IHN0ZXA7Ci0KLSAgc3RlcCA9Ci0gICAgICBJTlRfUkFOR0VfU1RFUCAoc3JjMSkgLwotICAgICAgZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKElOVF9SQU5HRV9TVEVQIChzcmMxKSwKLSAgICAgIElOVF9SQU5HRV9TVEVQIChzcmMyKSk7Ci0gIGlmIChHX01BWElOVDMyIC8gSU5UX1JBTkdFX1NURVAgKHNyYzIpIDwgc3RlcCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHN0ZXAgKj0gSU5UX1JBTkdFX1NURVAgKHNyYzIpOwotCi0gIG1pbiA9Ci0gICAgICBNQVggKElOVF9SQU5HRV9NSU4gKHNyYzEpICogSU5UX1JBTkdFX1NURVAgKHNyYzEpLAotICAgICAgSU5UX1JBTkdFX01JTiAoc3JjMikgKiBJTlRfUkFOR0VfU1RFUCAoc3JjMikpOwotICBtaW4gPSAobWluICsgc3RlcCAtIDEpIC8gc3RlcCAqIHN0ZXA7Ci0gIG1heCA9Ci0gICAgICBNSU4gKElOVF9SQU5HRV9NQVggKHNyYzEpICogSU5UX1JBTkdFX1NURVAgKHNyYzEpLAotICAgICAgSU5UX1JBTkdFX01BWCAoc3JjMikgKiBJTlRfUkFOR0VfU1RFUCAoc3JjMikpOwotICBtYXggPSBtYXggLyBzdGVwICogc3RlcDsKLQotICBpZiAobWluIDwgbWF4KSB7Ci0gICAgaWYgKGRlc3QpIHsKLSAgICAgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgICAgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlX3N0ZXAgKGRlc3QsIG1pbiwgbWF4LCBzdGVwKTsKLSAgICB9Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgaWYgKG1pbiA9PSBtYXgpIHsKLSAgICBpZiAoZGVzdCkgewotICAgICAgZ192YWx1ZV9pbml0IChkZXN0LCBHX1RZUEVfSU5UKTsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAoZGVzdCwgbWluKTsKLSAgICB9Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLSNkZWZpbmUgSU5UNjRfUkFOR0VfTUlOX1ZBTCh2KSAoSU5UNjRfUkFOR0VfTUlOICh2KSAqIElOVDY0X1JBTkdFX1NURVAgKHYpKQotI2RlZmluZSBJTlQ2NF9SQU5HRV9NQVhfVkFMKHYpIChJTlQ2NF9SQU5HRV9NQVggKHYpICogSU5UNjRfUkFOR0VfU1RFUCAodikpCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnQ2NF9pbnQ2NF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogc3JjMSwKLSAgICBjb25zdCBHVmFsdWUgKiBzcmMyKQotewotICBpZiAoSU5UNjRfUkFOR0VfTUlOX1ZBTCAoc3JjMikgPD0gc3JjMS0+ZGF0YVswXS52X2ludDY0ICYmCi0gICAgICBJTlQ2NF9SQU5HRV9NQVhfVkFMIChzcmMyKSA+PSBzcmMxLT5kYXRhWzBdLnZfaW50NjQgJiYKLSAgICAgIHNyYzEtPmRhdGFbMF0udl9pbnQ2NCAlIElOVDY0X1JBTkdFX1NURVAgKHNyYzIpID09IDApIHsKLSAgICBpZiAoZGVzdCkKLSAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBzcmMxKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfaW50ZXJzZWN0X2ludDY0X3JhbmdlX2ludDY0X3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMxLAotICAgIGNvbnN0IEdWYWx1ZSAqIHNyYzIpCi17Ci0gIGdpbnQ2NCBtaW47Ci0gIGdpbnQ2NCBtYXg7Ci0gIGdpbnQ2NCBzdGVwOwotCi0gIHN0ZXAgPQotICAgICAgSU5UNjRfUkFOR0VfU1RFUCAoc3JjMSkgLwotICAgICAgZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3JfaW50NjQgKElOVDY0X1JBTkdFX1NURVAgKHNyYzEpLAotICAgICAgSU5UNjRfUkFOR0VfU1RFUCAoc3JjMikpOwotICBpZiAoR19NQVhJTlQ2NCAvIElOVDY0X1JBTkdFX1NURVAgKHNyYzIpIDwgc3RlcCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHN0ZXAgKj0gSU5UNjRfUkFOR0VfU1RFUCAoc3JjMik7Ci0KLSAgbWluID0KLSAgICAgIE1BWCAoSU5UNjRfUkFOR0VfTUlOIChzcmMxKSAqIElOVDY0X1JBTkdFX1NURVAgKHNyYzEpLAotICAgICAgSU5UNjRfUkFOR0VfTUlOIChzcmMyKSAqIElOVDY0X1JBTkdFX1NURVAgKHNyYzIpKTsKLSAgbWluID0gKG1pbiArIHN0ZXAgLSAxKSAvIHN0ZXAgKiBzdGVwOwotICBtYXggPQotICAgICAgTUlOIChJTlQ2NF9SQU5HRV9NQVggKHNyYzEpICogSU5UNjRfUkFOR0VfU1RFUCAoc3JjMSksCi0gICAgICBJTlQ2NF9SQU5HRV9NQVggKHNyYzIpICogSU5UNjRfUkFOR0VfU1RFUCAoc3JjMikpOwotICBtYXggPSBtYXggLyBzdGVwICogc3RlcDsKLQotICBpZiAobWluIDwgbWF4KSB7Ci0gICAgaWYgKGRlc3QpIHsKLSAgICAgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICAgICAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZV9zdGVwIChkZXN0LCBtaW4sIG1heCwgc3RlcCk7Ci0gICAgfQotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIGlmIChtaW4gPT0gbWF4KSB7Ci0gICAgaWYgKGRlc3QpIHsKLSAgICAgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR19UWVBFX0lOVDY0KTsKLSAgICAgIGdfdmFsdWVfc2V0X2ludDY0IChkZXN0LCBtaW4pOwotICAgIH0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfaW50ZXJzZWN0X2RvdWJsZV9kb3VibGVfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYzEsCi0gICAgY29uc3QgR1ZhbHVlICogc3JjMikKLXsKLSAgaWYgKHNyYzItPmRhdGFbMF0udl9kb3VibGUgPD0gc3JjMS0+ZGF0YVswXS52X2RvdWJsZSAmJgotICAgICAgc3JjMi0+ZGF0YVsxXS52X2RvdWJsZSA+PSBzcmMxLT5kYXRhWzBdLnZfZG91YmxlKSB7Ci0gICAgaWYgKGRlc3QpCi0gICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgc3JjMSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2ludGVyc2VjdF9kb3VibGVfcmFuZ2VfZG91YmxlX3JhbmdlIChHVmFsdWUgKiBkZXN0LAotICAgIGNvbnN0IEdWYWx1ZSAqIHNyYzEsIGNvbnN0IEdWYWx1ZSAqIHNyYzIpCi17Ci0gIGdkb3VibGUgbWluOwotICBnZG91YmxlIG1heDsKLQotICBtaW4gPSBNQVggKHNyYzEtPmRhdGFbMF0udl9kb3VibGUsIHNyYzItPmRhdGFbMF0udl9kb3VibGUpOwotICBtYXggPSBNSU4gKHNyYzEtPmRhdGFbMV0udl9kb3VibGUsIHNyYzItPmRhdGFbMV0udl9kb3VibGUpOwotCi0gIGlmIChtaW4gPCBtYXgpIHsKLSAgICBpZiAoZGVzdCkgewotICAgICAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOwotICAgICAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKGRlc3QsIG1pbiwgbWF4KTsKLSAgICB9Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgaWYgKG1pbiA9PSBtYXgpIHsKLSAgICBpZiAoZGVzdCkgewotICAgICAgZ192YWx1ZV9pbml0IChkZXN0LCBHX1RZUEVfRE9VQkxFKTsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAoZGVzdCwgKGludCkgbWluKTsKLSAgICB9Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2ludGVyc2VjdF9saXN0IChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiB2YWx1ZTEsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBndWludCBpLCBzaXplOwotICBHVmFsdWUgaW50ZXJzZWN0aW9uID0geyAwLCB9OwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBzaXplID0gVkFMVUVfTElTVF9TSVpFICh2YWx1ZTEpOwotICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpjdXIgPSBWQUxVRV9MSVNUX0dFVF9WQUxVRSAodmFsdWUxLCBpKTsKLQotICAgIC8qIHF1aWNrZXIgdmVyc2lvbiB3aGVuIHdlIGRvbid0IG5lZWQgdGhlIHJlc3VsdGluZyBzZXQgKi8KLSAgICBpZiAoIWRlc3QpIHsKLSAgICAgIGlmIChnc3RfdmFsdWVfaW50ZXJzZWN0IChOVUxMLCBjdXIsIHZhbHVlMikpIHsKLSAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBpZiAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmludGVyc2VjdGlvbiwgY3VyLCB2YWx1ZTIpKSB7Ci0gICAgICAvKiBhcHBlbmQgdmFsdWUgKi8KLSAgICAgIGlmICghcmV0KSB7Ci0gICAgICAgIGdzdF92YWx1ZV9tb3ZlIChkZXN0LCAmaW50ZXJzZWN0aW9uKTsKLSAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKGRlc3QpKSB7Ci0gICAgICAgIF9nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKGRlc3QsICZpbnRlcnNlY3Rpb24pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1ZhbHVlIHRlbXA7Ci0KLSAgICAgICAgZ3N0X3ZhbHVlX21vdmUgKCZ0ZW1wLCBkZXN0KTsKLSAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UgKGRlc3QsICZ0ZW1wLCAmaW50ZXJzZWN0aW9uKTsKLSAgICAgICAgZ192YWx1ZV91bnNldCAoJnRlbXApOwotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmaW50ZXJzZWN0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9pbnRlcnNlY3RfYXJyYXkgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYzEsCi0gICAgY29uc3QgR1ZhbHVlICogc3JjMikKLXsKLSAgZ3VpbnQgc2l6ZTsKLSAgZ3VpbnQgbjsKLSAgR1ZhbHVlIHZhbCA9IHsgMCB9OwotCi0gIC8qIG9ubHkgd29ya3Mgb24gc2ltaWxhci1zaXplZCBhcnJheXMgKi8KLSAgc2l6ZSA9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoc3JjMSk7Ci0gIGlmIChzaXplICE9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoc3JjMikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIHF1aWNrZXIgdmFsdWUgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZSByZXN1bHRpbmcgc2V0ICovCi0gIGlmICghZGVzdCkgewotICAgIGZvciAobiA9IDA7IG4gPCBzaXplOyBuKyspIHsKLSAgICAgIGlmICghZ3N0X3ZhbHVlX2ludGVyc2VjdCAoTlVMTCwgZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoc3JjMSwgbiksCi0gICAgICAgICAgICAgIGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKHNyYzIsIG4pKSkgewotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgZ192YWx1ZV9pbml0IChkZXN0LCBHU1RfVFlQRV9BUlJBWSk7Ci0KLSAgZm9yIChuID0gMDsgbiA8IHNpemU7IG4rKykgewotICAgIGlmICghZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJnZhbCwgZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoc3JjMSwgbiksCi0gICAgICAgICAgICBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlIChzcmMyLCBuKSkpIHsKLSAgICAgIGdfdmFsdWVfdW5zZXQgKGRlc3QpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICBfZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF9hbmRfdGFrZV92YWx1ZSAoZGVzdCwgJnZhbCk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfaW50ZXJzZWN0X2ZyYWN0aW9uX2ZyYWN0aW9uX3JhbmdlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMxLAotICAgIGNvbnN0IEdWYWx1ZSAqIHNyYzIpCi17Ci0gIGdpbnQgcmVzMSwgcmVzMjsKLSAgR1ZhbHVlICp2YWxzOwotICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7Ci0KLSAgdmFscyA9IHNyYzItPmRhdGFbMF0udl9wb2ludGVyOwotCi0gIGlmICh2YWxzID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICgoY29tcGFyZSA9IGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jIChzcmMxKSkpIHsKLSAgICByZXMxID0gZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jICgmdmFsc1swXSwgc3JjMSwgY29tcGFyZSk7Ci0gICAgcmVzMiA9IGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAoJnZhbHNbMV0sIHNyYzEsIGNvbXBhcmUpOwotCi0gICAgaWYgKChyZXMxID09IEdTVF9WQUxVRV9FUVVBTCB8fCByZXMxID09IEdTVF9WQUxVRV9MRVNTX1RIQU4pICYmCi0gICAgICAgIChyZXMyID09IEdTVF9WQUxVRV9FUVVBTCB8fCByZXMyID09IEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4pKSB7Ci0gICAgICBpZiAoZGVzdCkKLSAgICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIHNyYzEpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9pbnRlcnNlY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb25fcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsCi0gICAgY29uc3QgR1ZhbHVlICogc3JjMSwgY29uc3QgR1ZhbHVlICogc3JjMikKLXsKLSAgR1ZhbHVlICptaW47Ci0gIEdWYWx1ZSAqbWF4OwotICBnaW50IHJlczsKLSAgR1ZhbHVlICp2YWxzMSwgKnZhbHMyOwotICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7Ci0KLSAgdmFsczEgPSBzcmMxLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgdmFsczIgPSBzcmMyLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbHMxICE9IE5VTEwgJiYgdmFsczIgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmICgoY29tcGFyZSA9IGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jICgmdmFsczFbMF0pKSkgewotICAgIC8qIG1pbiA9IE1BWCAoc3JjMS5zdGFydCwgc3JjMi5zdGFydCkgKi8KLSAgICByZXMgPSBnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKCZ2YWxzMVswXSwgJnZhbHMyWzBdLCBjb21wYXJlKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzICE9IEdTVF9WQUxVRV9VTk9SREVSRUQsIEZBTFNFKTsKLSAgICBpZiAocmVzID09IEdTVF9WQUxVRV9MRVNTX1RIQU4pCi0gICAgICBtaW4gPSAmdmFsczJbMF07ICAgICAgICAgIC8qIFRha2UgdGhlIG1heCBvZiB0aGUgMiAqLwotICAgIGVsc2UKLSAgICAgIG1pbiA9ICZ2YWxzMVswXTsKLQotICAgIC8qIG1heCA9IE1JTiAoc3JjMS5lbmQsIHNyYzIuZW5kKSAqLwotICAgIHJlcyA9IGdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAoJnZhbHMxWzFdLCAmdmFsczJbMV0sIGNvbXBhcmUpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZXMgIT0gR1NUX1ZBTFVFX1VOT1JERVJFRCwgRkFMU0UpOwotICAgIGlmIChyZXMgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTikKLSAgICAgIG1heCA9ICZ2YWxzMlsxXTsgICAgICAgICAgLyogVGFrZSB0aGUgbWluIG9mIHRoZSAyICovCi0gICAgZWxzZQotICAgICAgbWF4ID0gJnZhbHMxWzFdOwotCi0gICAgcmVzID0gZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtaW4sIG1heCwgY29tcGFyZSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlcyAhPSBHU1RfVkFMVUVfVU5PUkRFUkVELCBGQUxTRSk7Ci0gICAgaWYgKHJlcyA9PSBHU1RfVkFMVUVfTEVTU19USEFOKSB7Ci0gICAgICBpZiAoZGVzdCkgewotICAgICAgICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgICAgICAgdmFsczEgPSBkZXN0LT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgICAgICAgZ192YWx1ZV9jb3B5IChtaW4sICZ2YWxzMVswXSk7Ci0gICAgICAgIGdfdmFsdWVfY29weSAobWF4LCAmdmFsczFbMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICAgIGlmIChyZXMgPT0gR1NUX1ZBTFVFX0VRVUFMKSB7Ci0gICAgICBpZiAoZGVzdCkKLSAgICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIG1pbik7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIFR3byBmbGFnc2V0cyBpbnRlcnNlY3QgaWYgdGhlIG1hc2tlZCBiaXRzIGluIGJvdGgKLSAqIGZsYWdzZXRzIGFyZSBleGFjdGx5IGVxdWFsICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9pbnRlcnNlY3RfZmxhZ3NldF9mbGFnc2V0IChHVmFsdWUgKiBkZXN0LAotICAgIGNvbnN0IEdWYWx1ZSAqIHNyYzEsIGNvbnN0IEdWYWx1ZSAqIHNyYzIpCi17Ci0gIGd1aW50IGYxLCBmMjsKLSAgZ3VpbnQgbTEsIG0yOwotICBHVHlwZSB0eXBlMSwgdHlwZTIsIGZsYWdzZXRfdHlwZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUIChzcmMxKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUIChzcmMyKSwgRkFMU0UpOwotCi0gIGYxID0gc3JjMS0+ZGF0YVswXS52X3VpbnQ7Ci0gIGYyID0gc3JjMi0+ZGF0YVswXS52X3VpbnQ7Ci0KLSAgbTEgPSBzcmMxLT5kYXRhWzFdLnZfdWludDsKLSAgbTIgPSBzcmMyLT5kYXRhWzFdLnZfdWludDsKLQotICAvKiBEb24ndCBpbnRlcnNlY3QgaWYgbWFza2VkIGJpdHMgZGlzYWdyZWUgKi8KLSAgaWYgKChmMSAmIChtMSAmIG0yKSkgIT0gKGYyICYgKG0xICYgbTIpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogQWxsb3cgaW50ZXJzZWN0aW9uIHdpdGggdGhlIGdlbmVyaWMgRmxhZ1NldCB0eXBlLCBvbiBvbmUKLSAgICogc2lkZSwgYnV0IG5vdCAyIGRpZmZlcmVudCBzdWJ0eXBlcyAtIHRoYXQgbWFrZXMgbm8gc2Vuc2UgKi8KLSAgdHlwZTEgPSBHX1ZBTFVFX1RZUEUgKHNyYzEpOwotICB0eXBlMiA9IEdfVkFMVUVfVFlQRSAoc3JjMik7Ci0gIGZsYWdzZXRfdHlwZSA9IEdTVF9UWVBFX0ZMQUdfU0VUOwotCi0gIGlmICh0eXBlMSAhPSB0eXBlMiAmJiB0eXBlMSAhPSBmbGFnc2V0X3R5cGUgJiYgdHlwZTIgIT0gZmxhZ3NldF90eXBlKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoZGVzdCkgewotICAgIEdUeXBlIGRlc3RfdHlwZTsKLQotICAgIC8qIFByZWZlciBhbiBvdXRwdXQgdHlwZSB0aGF0IG1hdGNoZXMgYSBzdWItdHlwZSwKLSAgICAgKiByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyB0eXBlICovCi0gICAgaWYgKHR5cGUxICE9IGZsYWdzZXRfdHlwZSkKLSAgICAgIGRlc3RfdHlwZSA9IHR5cGUxOwotICAgIGVsc2UKLSAgICAgIGRlc3RfdHlwZSA9IHR5cGUyOwotCi0gICAgZ192YWx1ZV9pbml0IChkZXN0LCBkZXN0X3R5cGUpOwotCi0gICAgLyogVGhlIGNvbXBhdGlibGUgc2V0IGlzIGFsbCB0aGUgYml0cyBmcm9tIHNyYzEgdGhhdCBpdAotICAgICAqIGNhcmVzIGFib3V0IGFuZCBhbGwgdGhlIGJpdHMgZnJvbSBzcmMyIHRoYXQgaXQgY2FyZXMKLSAgICAgKiBhYm91dC4gKi8KLSAgICBkZXN0LT5kYXRhWzBdLnZfdWludCA9IChmMSAmIG0xKSB8IChmMiAmIG0yKTsKLSAgICBkZXN0LT5kYXRhWzFdLnZfdWludCA9IG0xIHwgbTI7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqKioqKioqKioqKioqKgotICogc3VidHJhY3Rpb24gKgotICoqKioqKioqKioqKioqKi8KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfc3VidHJhY3RfaW50X2ludF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKLSAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQotewotICBnaW50IG1pbiA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoc3VidHJhaGVuZCk7Ci0gIGdpbnQgbWF4ID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChzdWJ0cmFoZW5kKTsKLSAgZ2ludCBzdGVwID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2Vfc3RlcCAoc3VidHJhaGVuZCk7Ci0gIGdpbnQgdmFsID0gZ192YWx1ZV9nZXRfaW50IChtaW51ZW5kKTsKLQotICBpZiAoc3RlcCA9PSAwKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBzdWJ0cmFjdGluZyBhIHJhbmdlIGZyb20gYW4gaW50IG9ubHkgd29ya3MgaWYgdGhlIGludCBpcyBub3QgaW4gdGhlCi0gICAqIHJhbmdlICovCi0gIGlmICh2YWwgPCBtaW4gfHwgdmFsID4gbWF4IHx8IHZhbCAlIHN0ZXApIHsKLSAgICAvKiBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgaW50ICovCi0gICAgaWYgKGRlc3QpCi0gICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgbWludWVuZCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKiBjcmVhdGVzIGEgbmV3IGludCByYW5nZSBiYXNlZCBvbiBpbnB1dCB2YWx1ZXMuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2NyZWF0ZV9uZXdfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGdpbnQgbWluMSwgZ2ludCBtYXgxLCBnaW50IG1pbjIsCi0gICAgZ2ludCBtYXgyLCBnaW50IHN0ZXApCi17Ci0gIEdWYWx1ZSB2MSA9IHsgMCwgfTsKLSAgR1ZhbHVlIHYyID0geyAwLCB9OwotICBHVmFsdWUgKnB2MSwgKnB2MjsgICAgICAgICAgICAvKiB5ZWFoLCBodW5nYXJpYW4hICovCi0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0ZXAgPiAwLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW4xICUgc3RlcCA9PSAwLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtYXgxICUgc3RlcCA9PSAwLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW4yICUgc3RlcCA9PSAwLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtYXgyICUgc3RlcCA9PSAwLCBGQUxTRSk7Ci0KLSAgaWYgKG1pbjEgPD0gbWF4MSAmJiBtaW4yIDw9IG1heDIpIHsKLSAgICBwdjEgPSAmdjE7Ci0gICAgcHYyID0gJnYyOwotICB9IGVsc2UgaWYgKG1pbjEgPD0gbWF4MSkgewotICAgIHB2MSA9IGRlc3Q7Ci0gICAgcHYyID0gTlVMTDsKLSAgfSBlbHNlIGlmIChtaW4yIDw9IG1heDIpIHsKLSAgICBwdjEgPSBOVUxMOwotICAgIHB2MiA9IGRlc3Q7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKCFkZXN0KQotICAgIHJldHVybiBUUlVFOwotCi0gIGlmIChtaW4xIDwgbWF4MSkgewotICAgIGdfdmFsdWVfaW5pdCAocHYxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICAgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlX3N0ZXAgKHB2MSwgbWluMSwgbWF4MSwgc3RlcCk7Ci0gIH0gZWxzZSBpZiAobWluMSA9PSBtYXgxKSB7Ci0gICAgZ192YWx1ZV9pbml0IChwdjEsIEdfVFlQRV9JTlQpOwotICAgIGdfdmFsdWVfc2V0X2ludCAocHYxLCBtaW4xKTsKLSAgfQotICBpZiAobWluMiA8IG1heDIpIHsKLSAgICBnX3ZhbHVlX2luaXQgKHB2MiwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZV9zdGVwIChwdjIsIG1pbjIsIG1heDIsIHN0ZXApOwotICB9IGVsc2UgaWYgKG1pbjIgPT0gbWF4MikgewotICAgIGdfdmFsdWVfaW5pdCAocHYyLCBHX1RZUEVfSU5UKTsKLSAgICBnX3ZhbHVlX3NldF9pbnQgKHB2MiwgbWluMik7Ci0gIH0KLQotICBpZiAobWluMSA8PSBtYXgxICYmIG1pbjIgPD0gbWF4MikgewotICAgIGdzdF92YWx1ZV9saXN0X2NvbmNhdF9hbmRfdGFrZV92YWx1ZXMgKGRlc3QsIHB2MSwgcHYyKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfc3VidHJhY3RfaW50X3JhbmdlX2ludCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKLSAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQotewotICBnaW50IG1pbiA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAobWludWVuZCk7Ci0gIGdpbnQgbWF4ID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChtaW51ZW5kKTsKLSAgZ2ludCBzdGVwID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2Vfc3RlcCAobWludWVuZCk7Ci0gIGdpbnQgdmFsID0gZ192YWx1ZV9nZXRfaW50IChzdWJ0cmFoZW5kKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWluIDwgbWF4LCBGQUxTRSk7Ci0KLSAgaWYgKHN0ZXAgPT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2UsIHJldHVybiByYW5nZSB1bmNoYW5nZWQgKi8KLSAgaWYgKHZhbCA8IG1pbiB8fCB2YWwgPiBtYXggfHwgdmFsICUgc3RlcCkgewotICAgIGlmIChkZXN0KQotICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIG1pbnVlbmQpOwotICAgIHJldHVybiBUUlVFOwotICB9IGVsc2UgewotICAgIC8qIG1heCBtdXN0IGJlIE1BWElOVCB0b28gYXMgdmFsIDw9IG1heCAqLwotICAgIGlmICh2YWwgPj0gR19NQVhJTlQgLSBzdGVwICsgMSkgewotICAgICAgbWF4IC09IHN0ZXA7Ci0gICAgICB2YWwgLT0gc3RlcDsKLSAgICB9Ci0gICAgLyogbWluIG11c3QgYmUgTUlOSU5UIHRvbyBhcyB2YWwgPj0gbWF4ICovCi0gICAgaWYgKHZhbCA8PSBHX01JTklOVCArIHN0ZXAgLSAxKSB7Ci0gICAgICBtaW4gKz0gc3RlcDsKLSAgICAgIHZhbCArPSBzdGVwOwotICAgIH0KLSAgICBpZiAoZGVzdCkKLSAgICAgIGdzdF92YWx1ZV9jcmVhdGVfbmV3X3JhbmdlIChkZXN0LCBtaW4sIHZhbCAtIHN0ZXAsIHZhbCArIHN0ZXAsIG1heCwgc3RlcCk7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX3N1YnRyYWN0X2ludF9yYW5nZV9pbnRfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsCi0gICAgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKLXsKLSAgZ2ludCBtaW4xID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluIChtaW51ZW5kKTsKLSAgZ2ludCBtYXgxID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChtaW51ZW5kKTsKLSAgZ2ludCBzdGVwMSA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX3N0ZXAgKG1pbnVlbmQpOwotICBnaW50IG1pbjIgPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHN1YnRyYWhlbmQpOwotICBnaW50IG1heDIgPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHN1YnRyYWhlbmQpOwotICBnaW50IHN0ZXAyID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2Vfc3RlcCAoc3VidHJhaGVuZCk7Ci0gIGdpbnQgc3RlcDsKLQotICBpZiAoc3RlcDEgIT0gc3RlcDIpIHsKLSAgICAvKiBFTk9JTVBMICovCi0gICAgZ19hc3NlcnQgKEZBTFNFKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgc3RlcCA9IHN0ZXAxOwotCi0gIGlmIChzdGVwID09IDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChtYXgyID49IG1heDEgJiYgbWluMiA8PSBtaW4xKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9IGVsc2UgaWYgKG1heDIgPj0gbWF4MSkgewotICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19yYW5nZSAoZGVzdCwgbWluMSwgTUlOIChtaW4yIC0gc3RlcCwgbWF4MSksCi0gICAgICAgIHN0ZXAsIDAsIHN0ZXApOwotICB9IGVsc2UgaWYgKG1pbjIgPD0gbWluMSkgewotICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19yYW5nZSAoZGVzdCwgTUFYIChtYXgyICsgc3RlcCwgbWluMSksIG1heDEsCi0gICAgICAgIHN0ZXAsIDAsIHN0ZXApOwotICB9IGVsc2UgewotICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19yYW5nZSAoZGVzdCwgbWluMSwgTUlOIChtaW4yIC0gc3RlcCwgbWF4MSksCi0gICAgICAgIE1BWCAobWF4MiArIHN0ZXAsIG1pbjEpLCBtYXgxLCBzdGVwKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NF9pbnQ2NF9yYW5nZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKLSAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQotewotICBnaW50NjQgbWluID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHN1YnRyYWhlbmQpOwotICBnaW50NjQgbWF4ID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHN1YnRyYWhlbmQpOwotICBnaW50NjQgc3RlcCA9IGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2Vfc3RlcCAoc3VidHJhaGVuZCk7Ci0gIGdpbnQ2NCB2YWwgPSBnX3ZhbHVlX2dldF9pbnQ2NCAobWludWVuZCk7Ci0KLSAgaWYgKHN0ZXAgPT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIC8qIHN1YnRyYWN0aW5nIGEgcmFuZ2UgZnJvbSBhbiBpbnQ2NCBvbmx5IHdvcmtzIGlmIHRoZSBpbnQ2NCBpcyBub3QgaW4gdGhlCi0gICAqIHJhbmdlICovCi0gIGlmICh2YWwgPCBtaW4gfHwgdmFsID4gbWF4IHx8IHZhbCAlIHN0ZXApIHsKLSAgICAvKiBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgaW50NjQgKi8KLSAgICBpZiAoZGVzdCkKLSAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBtaW51ZW5kKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIGNyZWF0ZXMgYSBuZXcgaW50NjQgcmFuZ2UgYmFzZWQgb24gaW5wdXQgdmFsdWVzLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9jcmVhdGVfbmV3X2ludDY0X3JhbmdlIChHVmFsdWUgKiBkZXN0LCBnaW50NjQgbWluMSwgZ2ludDY0IG1heDEsCi0gICAgZ2ludDY0IG1pbjIsIGdpbnQ2NCBtYXgyLCBnaW50NjQgc3RlcCkKLXsKLSAgR1ZhbHVlIHYxID0geyAwLCB9OwotICBHVmFsdWUgdjIgPSB7IDAsIH07Ci0gIEdWYWx1ZSAqcHYxLCAqcHYyOyAgICAgICAgICAgIC8qIHllYWgsIGh1bmdhcmlhbiEgKi8KLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RlcCA+IDAsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1pbjEgJSBzdGVwID09IDAsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1heDEgJSBzdGVwID09IDAsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1pbjIgJSBzdGVwID09IDAsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1heDIgJSBzdGVwID09IDAsIEZBTFNFKTsKLQotICBpZiAobWluMSA8PSBtYXgxICYmIG1pbjIgPD0gbWF4MikgewotICAgIHB2MSA9ICZ2MTsKLSAgICBwdjIgPSAmdjI7Ci0gIH0gZWxzZSBpZiAobWluMSA8PSBtYXgxKSB7Ci0gICAgcHYxID0gZGVzdDsKLSAgICBwdjIgPSBOVUxMOwotICB9IGVsc2UgaWYgKG1pbjIgPD0gbWF4MikgewotICAgIHB2MSA9IE5VTEw7Ci0gICAgcHYyID0gZGVzdDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoIWRlc3QpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKG1pbjEgPCBtYXgxKSB7Ci0gICAgZ192YWx1ZV9pbml0IChwdjEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlX3N0ZXAgKHB2MSwgbWluMSwgbWF4MSwgc3RlcCk7Ci0gIH0gZWxzZSBpZiAobWluMSA9PSBtYXgxKSB7Ci0gICAgZ192YWx1ZV9pbml0IChwdjEsIEdfVFlQRV9JTlQ2NCk7Ci0gICAgZ192YWx1ZV9zZXRfaW50NjQgKHB2MSwgbWluMSk7Ci0gIH0KLSAgaWYgKG1pbjIgPCBtYXgyKSB7Ci0gICAgZ192YWx1ZV9pbml0IChwdjIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlX3N0ZXAgKHB2MiwgbWluMiwgbWF4Miwgc3RlcCk7Ci0gIH0gZWxzZSBpZiAobWluMiA9PSBtYXgyKSB7Ci0gICAgZ192YWx1ZV9pbml0IChwdjIsIEdfVFlQRV9JTlQ2NCk7Ci0gICAgZ192YWx1ZV9zZXRfaW50NjQgKHB2MiwgbWluMik7Ci0gIH0KLQotICBpZiAobWluMSA8PSBtYXgxICYmIG1pbjIgPD0gbWF4MikgewotICAgIGdzdF92YWx1ZV9saXN0X2NvbmNhdF9hbmRfdGFrZV92YWx1ZXMgKGRlc3QsIHB2MSwgcHYyKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfc3VidHJhY3RfaW50NjRfcmFuZ2VfaW50NjQgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsCi0gICAgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKLXsKLSAgZ2ludDY0IG1pbiA9IGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluIChtaW51ZW5kKTsKLSAgZ2ludDY0IG1heCA9IGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4IChtaW51ZW5kKTsKLSAgZ2ludDY0IHN0ZXAgPSBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXAgKG1pbnVlbmQpOwotICBnaW50NjQgdmFsID0gZ192YWx1ZV9nZXRfaW50NjQgKHN1YnRyYWhlbmQpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW4gPCBtYXgsIEZBTFNFKTsKLQotICBpZiAoc3RlcCA9PSAwKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZSwgcmV0dXJuIHJhbmdlIHVuY2hhbmdlZCAqLwotICBpZiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCB8fCB2YWwgJSBzdGVwKSB7Ci0gICAgaWYgKGRlc3QpCi0gICAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgbWludWVuZCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgLyogbWF4IG11c3QgYmUgTUFYSU5UNjQgdG9vIGFzIHZhbCA8PSBtYXggKi8KLSAgICBpZiAodmFsID49IEdfTUFYSU5UNjQgLSBzdGVwICsgMSkgewotICAgICAgbWF4IC09IHN0ZXA7Ci0gICAgICB2YWwgLT0gc3RlcDsKLSAgICB9Ci0gICAgLyogbWluIG11c3QgYmUgTUlOSU5UNjQgdG9vIGFzIHZhbCA+PSBtYXggKi8KLSAgICBpZiAodmFsIDw9IEdfTUlOSU5UNjQgKyBzdGVwIC0gMSkgewotICAgICAgbWluICs9IHN0ZXA7Ci0gICAgICB2YWwgKz0gc3RlcDsKLSAgICB9Ci0gICAgaWYgKGRlc3QpCi0gICAgICBnc3RfdmFsdWVfY3JlYXRlX25ld19pbnQ2NF9yYW5nZSAoZGVzdCwgbWluLCB2YWwgLSBzdGVwLCB2YWwgKyBzdGVwLCBtYXgsCi0gICAgICAgICAgc3RlcCk7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX3N1YnRyYWN0X2ludDY0X3JhbmdlX2ludDY0X3JhbmdlIChHVmFsdWUgKiBkZXN0LAotICAgIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCi17Ci0gIGdpbnQ2NCBtaW4xID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKG1pbnVlbmQpOwotICBnaW50NjQgbWF4MSA9IGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4IChtaW51ZW5kKTsKLSAgZ2ludDY0IHN0ZXAxID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9zdGVwIChtaW51ZW5kKTsKLSAgZ2ludDY0IG1pbjIgPSBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoc3VidHJhaGVuZCk7Ci0gIGdpbnQ2NCBtYXgyID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHN1YnRyYWhlbmQpOwotICBnaW50NjQgc3RlcDIgPSBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXAgKHN1YnRyYWhlbmQpOwotICBnaW50NjQgc3RlcDsKLQotICBpZiAoc3RlcDEgIT0gc3RlcDIpIHsKLSAgICAvKiBFTk9JTVBMICovCi0gICAgZ19hc3NlcnQgKEZBTFNFKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoc3RlcDEgPT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgc3RlcCA9IHN0ZXAxOwotCi0gIGlmIChtYXgyID49IG1heDEgJiYgbWluMiA8PSBtaW4xKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9IGVsc2UgaWYgKG1heDIgPj0gbWF4MSkgewotICAgIHJldHVybiBnc3RfdmFsdWVfY3JlYXRlX25ld19pbnQ2NF9yYW5nZSAoZGVzdCwgbWluMSwgTUlOIChtaW4yIC0gc3RlcCwKLSAgICAgICAgICAgIG1heDEpLCBzdGVwLCAwLCBzdGVwKTsKLSAgfSBlbHNlIGlmIChtaW4yIDw9IG1pbjEpIHsKLSAgICByZXR1cm4gZ3N0X3ZhbHVlX2NyZWF0ZV9uZXdfaW50NjRfcmFuZ2UgKGRlc3QsIE1BWCAobWF4MiArIHN0ZXAsIG1pbjEpLAotICAgICAgICBtYXgxLCBzdGVwLCAwLCBzdGVwKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZ3N0X3ZhbHVlX2NyZWF0ZV9uZXdfaW50NjRfcmFuZ2UgKGRlc3QsIG1pbjEsIE1JTiAobWluMiAtIHN0ZXAsCi0gICAgICAgICAgICBtYXgxKSwgTUFYIChtYXgyICsgc3RlcCwgbWluMSksIG1heDEsIHN0ZXApOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX3N1YnRyYWN0X2RvdWJsZV9kb3VibGVfcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsCi0gICAgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKLXsKLSAgZ2RvdWJsZSBtaW4gPSBnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKHN1YnRyYWhlbmQpOwotICBnZG91YmxlIG1heCA9IGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoc3VidHJhaGVuZCk7Ci0gIGdkb3VibGUgdmFsID0gZ192YWx1ZV9nZXRfZG91YmxlIChtaW51ZW5kKTsKLQotICBpZiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCkgewotICAgIGlmIChkZXN0KQotICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIG1pbnVlbmQpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfc3VidHJhY3RfZG91YmxlX3JhbmdlX2RvdWJsZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKLSAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQotewotICAvKiBzaW5jZSB3ZSBkb24ndCBoYXZlIG9wZW4gcmFuZ2VzLCB3ZSBjYW5ub3QgY3JlYXRlIGEgaG9sZSBpbgotICAgKiBhIGRvdWJsZSByYW5nZS4gV2UgcmV0dXJuIHRoZSBvcmlnaW5hbCByYW5nZSAqLwotICBpZiAoZGVzdCkKLSAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgbWludWVuZCk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGVfcmFuZ2VfZG91YmxlX3JhbmdlIChHVmFsdWUgKiBkZXN0LAotICAgIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCi17Ci0gIC8qIHNpbmNlIHdlIGRvbid0IGhhdmUgb3BlbiByYW5nZXMsIHdlIGhhdmUgdG8gYXBwcm94aW1hdGUgKi8KLSAgLyogZG9uZSBsaWtlIHdpdGggaW50cyAqLwotICBnZG91YmxlIG1pbjEgPSBnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKG1pbnVlbmQpOwotICBnZG91YmxlIG1heDIgPSBnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXggKG1pbnVlbmQpOwotICBnZG91YmxlIG1heDEgPSBNSU4gKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoc3VidHJhaGVuZCksIG1heDIpOwotICBnZG91YmxlIG1pbjIgPSBNQVggKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoc3VidHJhaGVuZCksIG1pbjEpOwotICBHVmFsdWUgdjEgPSB7IDAsIH07Ci0gIEdWYWx1ZSB2MiA9IHsgMCwgfTsKLSAgR1ZhbHVlICpwdjEsICpwdjI7ICAgICAgICAgICAgLyogeWVhaCwgaHVuZ2FyaWFuISAqLwotCi0gIGlmIChtaW4xIDwgbWF4MSAmJiBtaW4yIDwgbWF4MikgewotICAgIHB2MSA9ICZ2MTsKLSAgICBwdjIgPSAmdjI7Ci0gIH0gZWxzZSBpZiAobWluMSA8IG1heDEpIHsKLSAgICBwdjEgPSBkZXN0OwotICAgIHB2MiA9IE5VTEw7Ci0gIH0gZWxzZSBpZiAobWluMiA8IG1heDIpIHsKLSAgICBwdjEgPSBOVUxMOwotICAgIHB2MiA9IGRlc3Q7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKCFkZXN0KQotICAgIHJldHVybiBUUlVFOwotCi0gIGlmIChtaW4xIDwgbWF4MSkgewotICAgIGdfdmFsdWVfaW5pdCAocHYxLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOwotICAgIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlIChwdjEsIG1pbjEsIG1heDEpOwotICB9Ci0gIGlmIChtaW4yIDwgbWF4MikgewotICAgIGdfdmFsdWVfaW5pdCAocHYyLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOwotICAgIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlIChwdjIsIG1pbjIsIG1heDIpOwotICB9Ci0KLSAgaWYgKG1pbjEgPCBtYXgxICYmIG1pbjIgPCBtYXgyKSB7Ci0gICAgZ3N0X3ZhbHVlX2xpc3RfY29uY2F0X2FuZF90YWtlX3ZhbHVlcyAoZGVzdCwgcHYxLCBwdjIpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9zdWJ0cmFjdF9mcm9tX2xpc3QgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsCi0gICAgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKLXsKLSAgZ3VpbnQgaSwgc2l6ZTsKLSAgR1ZhbHVlIHN1YnRyYWN0aW9uID0geyAwLCB9OwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBzaXplID0gVkFMVUVfTElTVF9TSVpFIChtaW51ZW5kKTsKLSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgIGNvbnN0IEdWYWx1ZSAqY3VyID0gVkFMVUVfTElTVF9HRVRfVkFMVUUgKG1pbnVlbmQsIGkpOwotCi0gICAgLyogcXVpY2tlciB2ZXJzaW9uIHdoZW4gd2UgY2FuIGRpc2NhcmQgdGhlIHJlc3VsdCAqLwotICAgIGlmICghZGVzdCkgewotICAgICAgaWYgKGdzdF92YWx1ZV9zdWJ0cmFjdCAoTlVMTCwgY3VyLCBzdWJ0cmFoZW5kKSkgewotICAgICAgICByZXQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmIChnc3RfdmFsdWVfc3VidHJhY3QgKCZzdWJ0cmFjdGlvbiwgY3VyLCBzdWJ0cmFoZW5kKSkgewotICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgZ3N0X3ZhbHVlX21vdmUgKGRlc3QsICZzdWJ0cmFjdGlvbik7Ci0gICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAoZGVzdCkgPT0gR1NUX1RZUEVfTElTVAotICAgICAgICAgICYmIEdfVkFMVUVfVFlQRSAoJnN1YnRyYWN0aW9uKSAhPSBHU1RfVFlQRV9MSVNUKSB7Ci0gICAgICAgIF9nc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKGRlc3QsICZzdWJ0cmFjdGlvbik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHVmFsdWUgdGVtcDsKLQotICAgICAgICBnc3RfdmFsdWVfbW92ZSAoJnRlbXAsIGRlc3QpOwotICAgICAgICBnc3RfdmFsdWVfbGlzdF9jb25jYXRfYW5kX3Rha2VfdmFsdWVzIChkZXN0LCAmdGVtcCwgJnN1YnRyYWN0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfc3VidHJhY3RfbGlzdCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogbWludWVuZCwKLSAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKQotewotICBndWludCBpLCBzaXplOwotICBHVmFsdWUgZGF0YVsyXSA9IHsgezAsfSwgezAsfSB9OwotICBHVmFsdWUgKnN1YnRyYWN0aW9uID0gJmRhdGFbMF0sICpyZXN1bHQgPSAmZGF0YVsxXTsKLQotICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAocmVzdWx0LCBtaW51ZW5kKTsKLSAgc2l6ZSA9IFZBTFVFX0xJU1RfU0laRSAoc3VidHJhaGVuZCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICBjb25zdCBHVmFsdWUgKmN1ciA9IFZBTFVFX0xJU1RfR0VUX1ZBTFVFIChzdWJ0cmFoZW5kLCBpKTsKLQotICAgIGlmIChnc3RfdmFsdWVfc3VidHJhY3QgKHN1YnRyYWN0aW9uLCByZXN1bHQsIGN1cikpIHsKLSAgICAgIEdWYWx1ZSAqdGVtcCA9IHJlc3VsdDsKLQotICAgICAgcmVzdWx0ID0gc3VidHJhY3Rpb247Ci0gICAgICBzdWJ0cmFjdGlvbiA9IHRlbXA7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0IChzdWJ0cmFjdGlvbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfdmFsdWVfdW5zZXQgKHJlc3VsdCk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9Ci0gIGlmIChkZXN0KSB7Ci0gICAgZ3N0X3ZhbHVlX21vdmUgKGRlc3QsIHJlc3VsdCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ192YWx1ZV91bnNldCAocmVzdWx0KTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fZnJhY3Rpb25fcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsCi0gICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKLXsKLSAgY29uc3QgR1ZhbHVlICptaW4gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAoc3VidHJhaGVuZCk7Ci0gIGNvbnN0IEdWYWx1ZSAqbWF4ID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKHN1YnRyYWhlbmQpOwotICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7Ci0KLSAgaWYgKChjb21wYXJlID0gZ3N0X3ZhbHVlX2dldF9jb21wYXJlX2Z1bmMgKG1pbnVlbmQpKSkgewotICAgIC8qIHN1YnRyYWN0aW5nIGEgcmFuZ2UgZnJvbSBhbiBmcmFjdGlvbiBvbmx5IHdvcmtzIGlmIHRoZSBmcmFjdGlvbgotICAgICAqIGlzIG5vdCBpbiB0aGUgcmFuZ2UgKi8KLSAgICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtaW51ZW5kLCBtaW4sIGNvbXBhcmUpID09Ci0gICAgICAgIEdTVF9WQUxVRV9MRVNTX1RIQU4gfHwKLSAgICAgICAgZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtaW51ZW5kLCBtYXgsIGNvbXBhcmUpID09Ci0gICAgICAgIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4pIHsKLSAgICAgIC8qIGFuZCB0aGUgcmVzdWx0IGlzIHRoZSB2YWx1ZSAqLwotICAgICAgaWYgKGRlc3QpCi0gICAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBtaW51ZW5kKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX3N1YnRyYWN0X2ZyYWN0aW9uX3JhbmdlX2ZyYWN0aW9uIChHVmFsdWUgKiBkZXN0LAotICAgIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCi17Ci0gIC8qIHNpbmNlIHdlIGRvbid0IGhhdmUgb3BlbiByYW5nZXMsIHdlIGNhbm5vdCBjcmVhdGUgYSBob2xlIGluCi0gICAqIGEgcmFuZ2UuIFdlIHJldHVybiB0aGUgb3JpZ2luYWwgcmFuZ2UgKi8KLSAgaWYgKGRlc3QpCi0gICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIG1pbnVlbmQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb25fcmFuZ2UgKEdWYWx1ZSAqIGRlc3QsCi0gICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKLXsKLSAgLyogc2luY2Ugd2UgZG9uJ3QgaGF2ZSBvcGVuIHJhbmdlcywgd2UgaGF2ZSB0byBhcHByb3hpbWF0ZSAqLwotICAvKiBkb25lIGxpa2Ugd2l0aCBpbnRzIGFuZCBkb3VibGVzLiBDcmVhdGVzIGEgbGlzdCBvZiAyIGZyYWN0aW9uIHJhbmdlcyAqLwotICBjb25zdCBHVmFsdWUgKm1pbjEgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAobWludWVuZCk7Ci0gIGNvbnN0IEdWYWx1ZSAqbWF4MiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4IChtaW51ZW5kKTsKLSAgY29uc3QgR1ZhbHVlICptYXgxID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKHN1YnRyYWhlbmQpOwotICBjb25zdCBHVmFsdWUgKm1pbjIgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoc3VidHJhaGVuZCk7Ci0gIGdpbnQgY21wMSwgY21wMjsKLSAgR1ZhbHVlIHYxID0geyAwLCB9OwotICBHVmFsdWUgdjIgPSB7IDAsIH07Ci0gIEdWYWx1ZSAqcHYxLCAqcHYyOyAgICAgICAgICAgIC8qIHllYWgsIGh1bmdhcmlhbiEgKi8KLSAgR3N0VmFsdWVDb21wYXJlRnVuYyBjb21wYXJlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW4xICE9IE5VTEwgJiYgbWF4MSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaW4yICE9IE5VTEwgJiYgbWF4MiAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgY29tcGFyZSA9IGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jIChtaW4xKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbXBhcmUsIEZBTFNFKTsKLQotICBjbXAxID0gZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtYXgyLCBtYXgxLCBjb21wYXJlKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNtcDEgIT0gR1NUX1ZBTFVFX1VOT1JERVJFRCwgRkFMU0UpOwotICBpZiAoY21wMSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKQotICAgIG1heDEgPSBtYXgyOwotICBjbXAxID0gZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtaW4xLCBtaW4yLCBjb21wYXJlKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNtcDEgIT0gR1NUX1ZBTFVFX1VOT1JERVJFRCwgRkFMU0UpOwotICBpZiAoY21wMSA9PSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOKQotICAgIG1pbjIgPSBtaW4xOwotCi0gIGNtcDEgPSBnc3RfdmFsdWVfY29tcGFyZV93aXRoX2Z1bmMgKG1pbjEsIG1heDEsIGNvbXBhcmUpOwotICBjbXAyID0gZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jIChtaW4yLCBtYXgyLCBjb21wYXJlKTsKLQotICBpZiAoY21wMSA9PSBHU1RfVkFMVUVfTEVTU19USEFOICYmIGNtcDIgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTikgewotICAgIHB2MSA9ICZ2MTsKLSAgICBwdjIgPSAmdjI7Ci0gIH0gZWxzZSBpZiAoY21wMSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKSB7Ci0gICAgcHYxID0gZGVzdDsKLSAgICBwdjIgPSBOVUxMOwotICB9IGVsc2UgaWYgKGNtcDIgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTikgewotICAgIHB2MSA9IE5VTEw7Ci0gICAgcHYyID0gZGVzdDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoIWRlc3QpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKGNtcDEgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTikgewotICAgIGdfdmFsdWVfaW5pdCAocHYxLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZSAocHYxLCBtaW4xLCBtYXgxKTsKLSAgfQotICBpZiAoY21wMiA9PSBHU1RfVkFMVUVfTEVTU19USEFOKSB7Ci0gICAgZ192YWx1ZV9pbml0IChwdjIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlIChwdjIsIG1pbjIsIG1heDIpOwotICB9Ci0KLSAgaWYgKGNtcDEgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTiAmJiBjbXAyID09IEdTVF9WQUxVRV9MRVNTX1RIQU4pIHsKLSAgICBnc3RfdmFsdWVfbGlzdF9jb25jYXRfYW5kX3Rha2VfdmFsdWVzIChkZXN0LCBwdjEsIHB2Mik7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoqKioqKioqKioqKioqCi0gKiBjb21wYXJpc29uICoKLSAqKioqKioqKioqKioqKi8KLQotLyoKLSAqIGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jOgotICogQHZhbHVlMTogYSB2YWx1ZSB0byBnZXQgdGhlIGNvbXBhcmUgZnVuY3Rpb24gZm9yCi0gKgotICogRGV0ZXJtaW5lcyB0aGUgY29tcGFyZSBmdW5jdGlvbiB0byBiZSB1c2VkIHdpdGggdmFsdWVzIG9mIHRoZSBzYW1lIHR5cGUgYXMKLSAqIEB2YWx1ZTEuIFRoZSBmdW5jdGlvbiBjYW4gYmUgZ2l2ZW4gdG8gZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jKCkuCi0gKgotICogUmV0dXJuczogQSAjR3N0VmFsdWVDb21wYXJlRnVuYyB2YWx1ZQotICovCi1zdGF0aWMgR3N0VmFsdWVDb21wYXJlRnVuYwotZ3N0X3ZhbHVlX2dldF9jb21wYXJlX2Z1bmMgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSkKLXsKLSAgR3N0VmFsdWVUYWJsZSAqdGFibGUsICpiZXN0ID0gTlVMTDsKLSAgZ3VpbnQgaTsKLSAgR1R5cGUgdHlwZTE7Ci0KLSAgdHlwZTEgPSBHX1ZBTFVFX1RZUEUgKHZhbHVlMSk7Ci0KLSAgLyogdGhpcyBpcyBhIGZhc3QgY2hlY2sgKi8KLSAgYmVzdCA9IGdzdF92YWx1ZV9oYXNoX2xvb2t1cF90eXBlICh0eXBlMSk7Ci0KLSAgLyogc2xvd2VyIGNoZWNrcyAqLwotICBpZiAoR19VTkxJS0VMWSAoIWJlc3QgfHwgIWJlc3QtPmNvbXBhcmUpKSB7Ci0gICAgZ3VpbnQgbGVuID0gZ3N0X3ZhbHVlX3RhYmxlLT5sZW47Ci0KLSAgICBiZXN0ID0gTlVMTDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgIHRhYmxlID0gJmdfYXJyYXlfaW5kZXggKGdzdF92YWx1ZV90YWJsZSwgR3N0VmFsdWVUYWJsZSwgaSk7Ci0gICAgICBpZiAodGFibGUtPmNvbXBhcmUgJiYgZ190eXBlX2lzX2EgKHR5cGUxLCB0YWJsZS0+dHlwZSkpIHsKLSAgICAgICAgaWYgKCFiZXN0IHx8IGdfdHlwZV9pc19hICh0YWJsZS0+dHlwZSwgYmVzdC0+dHlwZSkpCi0gICAgICAgICAgYmVzdCA9IHRhYmxlOwotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAoR19MSUtFTFkgKGJlc3QpKQotICAgIHJldHVybiBiZXN0LT5jb21wYXJlOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1nc3RfdmFsdWVfY2FuX2NvbXBhcmVfdW5jaGVja2VkIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUxKSAhPSBHX1ZBTFVFX1RZUEUgKHZhbHVlMikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBnc3RfdmFsdWVfZ2V0X2NvbXBhcmVfZnVuYyAodmFsdWUxKSAhPSBOVUxMOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9jYW5fY29tcGFyZToKLSAqIEB2YWx1ZTE6IGEgdmFsdWUgdG8gY29tcGFyZQotICogQHZhbHVlMjogYW5vdGhlciB2YWx1ZSB0byBjb21wYXJlCi0gKgotICogRGV0ZXJtaW5lcyBpZiBAdmFsdWUxIGFuZCBAdmFsdWUyIGNhbiBiZSBjb21wYXJlZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWVzIGNhbiBiZSBjb21wYXJlZAotICovCi1nYm9vbGVhbgotZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMiksIEZBTFNFKTsKLQotICByZXR1cm4gZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlX3VuY2hlY2tlZCAodmFsdWUxLCB2YWx1ZTIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9saXN0X2VxdWFsc19yYW5nZSAoY29uc3QgR1ZhbHVlICogbGlzdCwgY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqZmlyc3Q7Ci0gIGd1aW50IGxpc3Rfc2l6ZSwgbjsKLQotICBnX2Fzc2VydCAoR19JU19WQUxVRSAobGlzdCkpOwotICBnX2Fzc2VydCAoR19JU19WQUxVRSAodmFsdWUpKTsKLSAgZ19hc3NlcnQgKEdTVF9WQUxVRV9IT0xEU19MSVNUIChsaXN0KSk7Ci0KLSAgLyogVE9ETzogY29tcGFyZSBhZ2FpbnN0IGFuIGVtcHR5IGxpc3QgPyBObyB0eXBlIHRob3VnaC4uLiAqLwotICBsaXN0X3NpemUgPSBWQUxVRV9MSVNUX1NJWkUgKGxpc3QpOwotICBpZiAobGlzdF9zaXplID09IDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIGNvbXBhcmUgdGhlIGJhc2ljIHR5cGVzIC0gdGhleSBoYXZlIHRvIG1hdGNoICovCi0gIGZpcnN0ID0gVkFMVUVfTElTVF9HRVRfVkFMVUUgKGxpc3QsIDApOwotI2RlZmluZSBDSEVDS19UWVBFUyh0eXBlLHByZWZpeCkgXAotICAocHJlZml4IyNfVkFMVUVfSE9MRFNfIyN0eXBlKGZpcnN0KSAmJiBHU1RfVkFMVUVfSE9MRFNfIyN0eXBlIyNfUkFOR0UgKHZhbHVlKSkKLSAgaWYgKENIRUNLX1RZUEVTIChJTlQsIEcpKSB7Ci0gICAgY29uc3QgZ2ludCBybWluID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICh2YWx1ZSk7Ci0gICAgY29uc3QgZ2ludCBybWF4ID0gZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICh2YWx1ZSk7Ci0gICAgY29uc3QgZ2ludCByc3RlcCA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX3N0ZXAgKHZhbHVlKTsKLSAgICBpZiAocnN0ZXAgPT0gMCkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICAvKiBub3RlOiB0aGlzIHdpbGwgb3ZlcmZsb3cgZm9yIG1pbiAwIGFuZCBtYXggSU5UX01BWCwgYnV0IHRoaXMKLSAgICAgICB3b3VsZCBvbmx5IGJlIGVxdWFsIHRvIGEgbGlzdCBvZiBJTlRfTUFYIGVsZW1lbnRzLCB3aGljaCBzZWVtcwotICAgICAgIHZlcnkgdW5saWtlbHkgKi8KLSAgICBpZiAobGlzdF9zaXplICE9IHJtYXggLyByc3RlcCAtIHJtaW4gLyByc3RlcCArIDEpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgZm9yIChuID0gMDsgbiA8IGxpc3Rfc2l6ZTsgKytuKSB7Ci0gICAgICBnaW50IHYgPSBnX3ZhbHVlX2dldF9pbnQgKFZBTFVFX0xJU1RfR0VUX1ZBTFVFIChsaXN0LCBuKSk7Ci0gICAgICBpZiAodiA8IHJtaW4gfHwgdiA+IHJtYXggfHwgdiAlIHJzdGVwKSB7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZSBpZiAoQ0hFQ0tfVFlQRVMgKElOVDY0LCBHKSkgewotICAgIGNvbnN0IGdpbnQ2NCBybWluID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHZhbHVlKTsKLSAgICBjb25zdCBnaW50NjQgcm1heCA9IGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICh2YWx1ZSk7Ci0gICAgY29uc3QgZ2ludDY0IHJzdGVwID0gZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9zdGVwICh2YWx1ZSk7Ci0gICAgR1NUX0RFQlVHICgiTGlzdC9yYW5nZSBvZiBpbnQ2NHMiKTsKLSAgICBpZiAocnN0ZXAgPT0gMCkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpZiAobGlzdF9zaXplICE9IHJtYXggLyByc3RlcCAtIHJtaW4gLyByc3RlcCArIDEpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgZm9yIChuID0gMDsgbiA8IGxpc3Rfc2l6ZTsgKytuKSB7Ci0gICAgICBnaW50NjQgdiA9IGdfdmFsdWVfZ2V0X2ludDY0IChWQUxVRV9MSVNUX0dFVF9WQUxVRSAobGlzdCwgbikpOwotICAgICAgaWYgKHYgPCBybWluIHx8IHYgPiBybWF4IHx8IHYgJSByc3RlcCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotI3VuZGVmIENIRUNLX1RZUEVTCi0KLSAgLyogb3RoZXIgY29tYmluYXRpb25zIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIGVxdWFsaXR5ICovCi0gIHJldHVybiBGQUxTRTsKLX0KLQotLyogIlB1cmUiIHZhcmlhbnQgb2YgZ3N0X3ZhbHVlX2NvbXBhcmUgd2hpY2ggaXMgZ3VhcmFudGVlZCB0bwotICogbm90IGhhdmUgbGlzdCBhcmd1bWVudHMgYW5kIHRoZXJlZm9yZSBkb2VzIGJhc2ljIGNvbXBhcmlzaW9ucwotICovCi1zdGF0aWMgaW5saW5lIGdpbnQKLV9nc3RfdmFsdWVfY29tcGFyZV9ub2xpc3QgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBHc3RWYWx1ZUNvbXBhcmVGdW5jIGNvbXBhcmU7Ci0KLSAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUxKSAhPSBHX1ZBTFVFX1RZUEUgKHZhbHVlMikpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0KLSAgY29tcGFyZSA9IGdzdF92YWx1ZV9nZXRfY29tcGFyZV9mdW5jICh2YWx1ZTEpOwotICBpZiAoY29tcGFyZSkgewotICAgIHJldHVybiBjb21wYXJlICh2YWx1ZTEsIHZhbHVlMik7Ci0gIH0KLQotICBnX2NyaXRpY2FsICgidW5hYmxlIHRvIGNvbXBhcmUgdmFsdWVzIG9mIHR5cGUgJXNcbiIsCi0gICAgICBnX3R5cGVfbmFtZSAoR19WQUxVRV9UWVBFICh2YWx1ZTEpKSk7Ci0gIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9jb21wYXJlOgotICogQHZhbHVlMTogYSB2YWx1ZSB0byBjb21wYXJlCi0gKiBAdmFsdWUyOiBhbm90aGVyIHZhbHVlIHRvIGNvbXBhcmUKLSAqCi0gKiBDb21wYXJlcyBAdmFsdWUxIGFuZCBAdmFsdWUyLiAgSWYgQHZhbHVlMSBhbmQgQHZhbHVlMiBjYW5ub3QgYmUKLSAqIGNvbXBhcmVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBHU1RfVkFMVUVfVU5PUkRFUkVELiAgT3RoZXJ3aXNlLAotICogaWYgQHZhbHVlMSBpcyBncmVhdGVyIHRoYW4gQHZhbHVlMiwgR1NUX1ZBTFVFX0dSRUFURVJfVEhBTiBpcyByZXR1cm5lZC4KLSAqIElmIEB2YWx1ZTEgaXMgbGVzcyB0aGFuIEB2YWx1ZTIsIEdTVF9WQUxVRV9MRVNTX1RIQU4gaXMgcmV0dXJuZWQuCi0gKiBJZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgR1NUX1ZBTFVFX0VRVUFMIGlzIHJldHVybmVkLgotICoKLSAqIFJldHVybnM6IGNvbXBhcmlzb24gcmVzdWx0Ci0gKi8KLWdpbnQKLWdzdF92YWx1ZV9jb21wYXJlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgZ2Jvb2xlYW4gdmFsdWUxX2lzX2xpc3Q7Ci0gIGdib29sZWFuIHZhbHVlMl9pc19saXN0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZTEpLCBHU1RfVkFMVUVfTEVTU19USEFOKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMiksIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4pOwotCi0gIHZhbHVlMV9pc19saXN0ID0gR19WQUxVRV9UWVBFICh2YWx1ZTEpID09IEdTVF9UWVBFX0xJU1Q7Ci0gIHZhbHVlMl9pc19saXN0ID0gR19WQUxVRV9UWVBFICh2YWx1ZTIpID09IEdTVF9UWVBFX0xJU1Q7Ci0KLSAgLyogU3BlY2lhbCBjYXNlczogbGlzdHMgYW5kIHNjYWxhciB2YWx1ZXMgKCJ7IDEgfSIgYW5kICIxIiBhcmUgZXF1YWwpLAotICAgICBhcyB3ZWxsIGFzIGxpc3RzIGFuZCByYW5nZXMgKCJ7IDEsIDIgfSIgYW5kICJbIDEsIDIgXSIgYXJlIGVxdWFsKSAqLwotICBpZiAodmFsdWUxX2lzX2xpc3QgJiYgIXZhbHVlMl9pc19saXN0KSB7Ci0gICAgZ2ludCBpLCBuLCByZXQ7Ci0KLSAgICBpZiAoZ3N0X3ZhbHVlX2xpc3RfZXF1YWxzX3JhbmdlICh2YWx1ZTEsIHZhbHVlMikpIHsKLSAgICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0gICAgfQotCi0gICAgbiA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWx1ZTEpOwotICAgIGlmIChuID09IDApCi0gICAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqZWx0OwotCi0gICAgICBlbHQgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHZhbHVlMSwgaSk7Ci0gICAgICByZXQgPSBnc3RfdmFsdWVfY29tcGFyZSAoZWx0LCB2YWx1ZTIpOwotICAgICAgaWYgKHJldCAhPSBHU1RfVkFMVUVfRVFVQUwgJiYgbiA9PSAxKQotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgZWxzZSBpZiAocmV0ICE9IEdTVF9WQUxVRV9FUVVBTCkKLSAgICAgICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLSAgfSBlbHNlIGlmICh2YWx1ZTJfaXNfbGlzdCAmJiAhdmFsdWUxX2lzX2xpc3QpIHsKLSAgICBnaW50IGksIG4sIHJldDsKLQotICAgIGlmIChnc3RfdmFsdWVfbGlzdF9lcXVhbHNfcmFuZ2UgKHZhbHVlMiwgdmFsdWUxKSkgewotICAgICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLSAgICB9Ci0KLSAgICBuID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHZhbHVlMik7Ci0gICAgaWYgKG4gPT0gMCkKLSAgICAgIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgY29uc3QgR1ZhbHVlICplbHQ7Ci0KLSAgICAgIGVsdCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsdWUyLCBpKTsKLSAgICAgIHJldCA9IGdzdF92YWx1ZV9jb21wYXJlIChlbHQsIHZhbHVlMSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9WQUxVRV9FUVVBTCAmJiBuID09IDEpCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgICBlbHNlIGlmIChyZXQgIT0gR1NUX1ZBTFVFX0VRVUFMKQotICAgICAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLSAgICB9Ci0KLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotICB9Ci0KLSAgLyogQW5kIG5vdyBoYW5kbGUgdGhlIGdlbmVyaWMgY2FzZSAqLwotICByZXR1cm4gX2dzdF92YWx1ZV9jb21wYXJlX25vbGlzdCAodmFsdWUxLCB2YWx1ZTIpOwotfQotCi0vKgotICogZ3N0X3ZhbHVlX2NvbXBhcmVfd2l0aF9mdW5jOgotICogQHZhbHVlMTogYSB2YWx1ZSB0byBjb21wYXJlCi0gKiBAdmFsdWUyOiBhbm90aGVyIHZhbHVlIHRvIGNvbXBhcmUKLSAqIEBjb21wYXJlOiBjb21wYXJlIGZ1bmN0aW9uCi0gKgotICogQ29tcGFyZXMgQHZhbHVlMSBhbmQgQHZhbHVlMiB1c2luZyB0aGUgQGNvbXBhcmUgZnVuY3Rpb24uIFdvcmtzIGxpa2UKLSAqIGdzdF92YWx1ZV9jb21wYXJlKCkgYnV0IGFsbG93cyB0byBzYXZlIHRpbWUgZGV0ZXJtaW5pbmcgdGhlIGNvbXBhcmUgZnVuY3Rpb24KLSAqIGEgbXVsdGlwbGUgdGltZXMuCi0gKgotICogUmV0dXJuczogY29tcGFyaXNvbiByZXN1bHQKLSAqLwotc3RhdGljIGdpbnQKLWdzdF92YWx1ZV9jb21wYXJlX3dpdGhfZnVuYyAoY29uc3QgR1ZhbHVlICogdmFsdWUxLCBjb25zdCBHVmFsdWUgKiB2YWx1ZTIsCi0gICAgR3N0VmFsdWVDb21wYXJlRnVuYyBjb21wYXJlKQotewotICBnX2Fzc2VydCAoY29tcGFyZSk7Ci0KLSAgaWYgKEdfVkFMVUVfVFlQRSAodmFsdWUxKSAhPSBHX1ZBTFVFX1RZUEUgKHZhbHVlMikpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0KLSAgcmV0dXJuIGNvbXBhcmUgKHZhbHVlMSwgdmFsdWUyKTsKLX0KLQotLyogdW5pb24gKi8KLQotLyoqCi0gKiBnc3RfdmFsdWVfY2FuX3VuaW9uOgotICogQHZhbHVlMTogYSB2YWx1ZSB0byB1bmlvbgotICogQHZhbHVlMjogYW5vdGhlciB2YWx1ZSB0byB1bmlvbgotICoKLSAqIERldGVybWluZXMgaWYgQHZhbHVlMSBhbmQgQHZhbHVlMiBjYW4gYmUgbm9uLXRyaXZpYWxseSB1bmlvbmVkLgotICogQW55IHR3byB2YWx1ZXMgY2FuIGJlIHRyaXZpYWxseSB1bmlvbmVkIGJ5IGFkZGluZyBib3RoIG9mIHRoZW0KLSAqIHRvIGEgR3N0VmFsdWVMaXN0LiAgSG93ZXZlciwgY2VydGFpbiB0eXBlcyBoYXZlIHRoZSBwb3NzaWJpbGl0eQotICogdG8gYmUgdW5pb25lZCBpbiBhIHNpbXBsZXIgd2F5LiAgRm9yIGV4YW1wbGUsIGFuIGludGVnZXIgcmFuZ2UKLSAqIGFuZCBhbiBpbnRlZ2VyIGNhbiBiZSB1bmlvbmVkIGlmIHRoZSBpbnRlZ2VyIGlzIGEgc3Vic2V0IG9mIHRoZQotICogaW50ZWdlciByYW5nZS4gIElmIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHR3byB2YWx1ZXMgY2FuCi0gKiBiZSB1bmlvbmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgJVRSVUUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlcmUgaXMgYSBmdW5jdGlvbiBhbGxvd2luZyB0aGUgdHdvIHZhbHVlcyB0bwotICogYmUgdW5pb25lZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF92YWx1ZV9jYW5fdW5pb24gKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBHc3RWYWx1ZVVuaW9uSW5mbyAqdW5pb25faW5mbzsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZTEpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZTIpLCBGQUxTRSk7Ci0KLSAgbGVuID0gZ3N0X3ZhbHVlX3VuaW9uX2Z1bmNzLT5sZW47Ci0KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgdW5pb25faW5mbyA9ICZnX2FycmF5X2luZGV4IChnc3RfdmFsdWVfdW5pb25fZnVuY3MsIEdzdFZhbHVlVW5pb25JbmZvLCBpKTsKLSAgICBpZiAodW5pb25faW5mby0+dHlwZTEgPT0gR19WQUxVRV9UWVBFICh2YWx1ZTEpICYmCi0gICAgICAgIHVuaW9uX2luZm8tPnR5cGUyID09IEdfVkFMVUVfVFlQRSAodmFsdWUyKSkKLSAgICAgIHJldHVybiBUUlVFOwotICAgIGlmICh1bmlvbl9pbmZvLT50eXBlMSA9PSBHX1ZBTFVFX1RZUEUgKHZhbHVlMikgJiYKLSAgICAgICAgdW5pb25faW5mby0+dHlwZTIgPT0gR19WQUxVRV9UWVBFICh2YWx1ZTEpKQotICAgICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX3VuaW9uOgotICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IHRoZSBkZXN0aW5hdGlvbiB2YWx1ZQotICogQHZhbHVlMTogYSB2YWx1ZSB0byB1bmlvbgotICogQHZhbHVlMjogYW5vdGhlciB2YWx1ZSB0byB1bmlvbgotICoKLSAqIENyZWF0ZXMgYSBHVmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdW5pb24gb2YgQHZhbHVlMSBhbmQgQHZhbHVlMi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdW5pb24gc3VjY2VlZGVkLgotICovCi1nYm9vbGVhbgotZ3N0X3ZhbHVlX3VuaW9uIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgY29uc3QgR3N0VmFsdWVVbmlvbkluZm8gKnVuaW9uX2luZm87Ci0gIGd1aW50IGksIGxlbjsKLSAgR1R5cGUgdHlwZTEsIHR5cGUyOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMiksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF92YWx1ZV9saXN0X29yX2FycmF5X2FyZV9jb21wYXRpYmxlICh2YWx1ZTEsIHZhbHVlMiksCi0gICAgICBGQUxTRSk7Ci0KLSAgbGVuID0gZ3N0X3ZhbHVlX3VuaW9uX2Z1bmNzLT5sZW47Ci0gIHR5cGUxID0gR19WQUxVRV9UWVBFICh2YWx1ZTEpOwotICB0eXBlMiA9IEdfVkFMVUVfVFlQRSAodmFsdWUyKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICB1bmlvbl9pbmZvID0gJmdfYXJyYXlfaW5kZXggKGdzdF92YWx1ZV91bmlvbl9mdW5jcywgR3N0VmFsdWVVbmlvbkluZm8sIGkpOwotICAgIGlmICh1bmlvbl9pbmZvLT50eXBlMSA9PSB0eXBlMSAmJiB1bmlvbl9pbmZvLT50eXBlMiA9PSB0eXBlMikgewotICAgICAgcmV0dXJuIHVuaW9uX2luZm8tPmZ1bmMgKGRlc3QsIHZhbHVlMSwgdmFsdWUyKTsKLSAgICB9Ci0gICAgaWYgKHVuaW9uX2luZm8tPnR5cGUxID09IHR5cGUyICYmIHVuaW9uX2luZm8tPnR5cGUyID09IHR5cGUxKSB7Ci0gICAgICByZXR1cm4gdW5pb25faW5mby0+ZnVuYyAoZGVzdCwgdmFsdWUyLCB2YWx1ZTEpOwotICAgIH0KLSAgfQotCi0gIGdzdF92YWx1ZV9saXN0X2NvbmNhdCAoZGVzdCwgdmFsdWUxLCB2YWx1ZTIpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyogZ3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmM6IChza2lwKQotICogQHR5cGUxOiBhIHR5cGUgdG8gdW5pb24KLSAqIEB0eXBlMjogYW5vdGhlciB0eXBlIHRvIHVuaW9uCi0gKiBAZnVuYzogYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgY3JlYXRpbmcgYSB1bmlvbiBiZXR3ZWVuIHRoZSB0d28gdHlwZXMKLSAqCi0gKiBSZWdpc3RlcnMgYSB1bmlvbiBmdW5jdGlvbiB0aGF0IGNhbiBjcmVhdGUgYSB1bmlvbiBiZXR3ZWVuICNHVmFsdWUgaXRlbXMKLSAqIG9mIHRoZSB0eXBlIEB0eXBlMSBhbmQgQHR5cGUyLgotICoKLSAqIFVuaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgcmVnaXN0ZXJlZCBhdCBzdGFydHVwIGJlZm9yZSBhbnkgcGlwZWxpbmVzIGFyZQotICogc3RhcnRlZCwgYXMgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmMoKSBpcyBub3QgdGhyZWFkLXNhZmUgYW5kIGNhbm5vdAotICogYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGdzdF92YWx1ZV91bmlvbigpIG9yIGdzdF92YWx1ZV9jYW5fdW5pb24oKS4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jIChHVHlwZSB0eXBlMSwgR1R5cGUgdHlwZTIsIEdzdFZhbHVlVW5pb25GdW5jIGZ1bmMpCi17Ci0gIEdzdFZhbHVlVW5pb25JbmZvIHVuaW9uX2luZm87Ci0KLSAgdW5pb25faW5mby50eXBlMSA9IHR5cGUxOwotICB1bmlvbl9pbmZvLnR5cGUyID0gdHlwZTI7Ci0gIHVuaW9uX2luZm8uZnVuYyA9IGZ1bmM7Ci0KLSAgZ19hcnJheV9hcHBlbmRfdmFsIChnc3RfdmFsdWVfdW5pb25fZnVuY3MsIHVuaW9uX2luZm8pOwotfQotCi0vKiBpbnRlcnNlY3Rpb24gKi8KLQotLyoqCi0gKiBnc3RfdmFsdWVfY2FuX2ludGVyc2VjdDoKLSAqIEB2YWx1ZTE6IGEgdmFsdWUgdG8gaW50ZXJzZWN0Ci0gKiBAdmFsdWUyOiBhbm90aGVyIHZhbHVlIHRvIGludGVyc2VjdAotICoKLSAqIERldGVybWluZXMgaWYgaW50ZXJzZWN0aW5nIHR3byB2YWx1ZXMgd2lsbCBwcm9kdWNlIGEgdmFsaWQgcmVzdWx0LgotICogVHdvIHZhbHVlcyB3aWxsIHByb2R1Y2UgYSB2YWxpZCBpbnRlcnNlY3Rpb24gaWYgdGhleSBoYXZlIHRoZSBzYW1lCi0gKiB0eXBlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZXMgY2FuIGludGVyc2VjdAotICovCi1nYm9vbGVhbgotZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3QgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBHc3RWYWx1ZUludGVyc2VjdEluZm8gKmludGVyc2VjdF9pbmZvOwotICBndWludCBpLCBsZW47Ci0gIEdUeXBlIHR5cGUxLCB0eXBlMjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUxKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAodmFsdWUyKSwgRkFMU0UpOwotCi0gIHR5cGUxID0gR19WQUxVRV9UWVBFICh2YWx1ZTEpOwotICB0eXBlMiA9IEdfVkFMVUVfVFlQRSAodmFsdWUyKTsKLQotICAvKiBwcmFjdGljYWxseSBhbGwgR3N0VmFsdWUgdHlwZXMgaGF2ZSBhIGNvbXBhcmUgZnVuY3Rpb24gKF9jYW5fY29tcGFyZT1UUlVFKQotICAgKiBHc3RTdHJ1Y3R1cmUgYW5kIEdzdENhcHMgaGF2ZSBub3QsIGJ1dCBhcmUgaW50ZXJzZWN0YWJsZSAqLwotICBpZiAodHlwZTEgPT0gdHlwZTIpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogc3BlY2lhbCBjYXNlcyAqLwotICBpZiAodHlwZTEgPT0gR1NUX1RZUEVfTElTVCB8fCB0eXBlMiA9PSBHU1RfVFlQRV9MSVNUKQotICAgIHJldHVybiBUUlVFOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHZhbHVlMSkgJiYKLSAgICAgICAgICBHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHZhbHVlMikpKSB7Ci0gICAgR1R5cGUgdHlwZTEsIHR5cGUyLCBmbGFnc2V0X3R5cGU7Ci0KLSAgICB0eXBlMSA9IEdfVkFMVUVfVFlQRSAodmFsdWUxKTsKLSAgICB0eXBlMiA9IEdfVkFMVUVfVFlQRSAodmFsdWUyKTsKLSAgICBmbGFnc2V0X3R5cGUgPSBHU1RfVFlQRV9GTEFHX1NFVDsKLQotICAgIC8qIEFsbG93IGludGVyc2VjdGlvbiB3aXRoIHRoZSBnZW5lcmljIEZsYWdTZXQgdHlwZSwgb24gb25lCi0gICAgICogc2lkZSwgYnV0IG5vdCAyIGRpZmZlcmVudCBzdWJ0eXBlcyAtIHRoYXQgbWFrZXMgbm8gc2Vuc2UgKi8KLSAgICBpZiAodHlwZTEgPT0gdHlwZTIgfHwgdHlwZTEgPT0gZmxhZ3NldF90eXBlIHx8IHR5cGUyID09IGZsYWdzZXRfdHlwZSkKLSAgICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogY2hlY2sgcmVnaXN0ZXJlZCBpbnRlcnNlY3QgZnVuY3Rpb25zICovCi0gIGxlbiA9IGdzdF92YWx1ZV9pbnRlcnNlY3RfZnVuY3MtPmxlbjsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgaW50ZXJzZWN0X2luZm8gPSAmZ19hcnJheV9pbmRleCAoZ3N0X3ZhbHVlX2ludGVyc2VjdF9mdW5jcywKLSAgICAgICAgR3N0VmFsdWVJbnRlcnNlY3RJbmZvLCBpKTsKLSAgICBpZiAoKGludGVyc2VjdF9pbmZvLT50eXBlMSA9PSB0eXBlMSAmJiBpbnRlcnNlY3RfaW5mby0+dHlwZTIgPT0gdHlwZTIpIHx8Ci0gICAgICAgIChpbnRlcnNlY3RfaW5mby0+dHlwZTEgPT0gdHlwZTIgJiYgaW50ZXJzZWN0X2luZm8tPnR5cGUyID09IHR5cGUxKSkKLSAgICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIGdzdF92YWx1ZV9jYW5fY29tcGFyZV91bmNoZWNrZWQgKHZhbHVlMSwgdmFsdWUyKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfaW50ZXJzZWN0OgotICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcykgKHRyYW5zZmVyIGZ1bGwpIChhbGxvdy1ub25lKToKLSAqICAgYSB1bmluaXRpYWxpemVkICNHVmFsdWUgdGhhdCB3aWxsIGhvbGQgdGhlIGNhbGN1bGF0ZWQKLSAqICAgaW50ZXJzZWN0aW9uIHZhbHVlLiBNYXkgYmUgJU5VTEwgaWYgdGhlIHJlc3VsdGluZyBzZXQgaWYgbm90Ci0gKiAgIG5lZWRlZC4KLSAqIEB2YWx1ZTE6IGEgdmFsdWUgdG8gaW50ZXJzZWN0Ci0gKiBAdmFsdWUyOiBhbm90aGVyIHZhbHVlIHRvIGludGVyc2VjdAotICoKLSAqIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gdmFsdWVzLiAgSWYgdGhlIHZhbHVlcyBoYXZlCi0gKiBhIG5vbi1lbXB0eSBpbnRlcnNlY3Rpb24sIHRoZSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGludGVyc2VjdGlvbgotICogaXMgcGxhY2VkIGluIEBkZXN0LCB1bmxlc3MgJU5VTEwuICBJZiB0aGUgaW50ZXJzZWN0aW9uIGlzIG5vbi1lbXB0eSwKLSAqIEBkZXN0IGlzIG5vdCBtb2RpZmllZC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgaW50ZXJzZWN0aW9uIGlzIG5vbi1lbXB0eQotICovCi1nYm9vbGVhbgotZ3N0X3ZhbHVlX2ludGVyc2VjdCAoR1ZhbHVlICogZGVzdCwgY29uc3QgR1ZhbHVlICogdmFsdWUxLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgR3N0VmFsdWVJbnRlcnNlY3RJbmZvICppbnRlcnNlY3RfaW5mbzsKLSAgZ3VpbnQgaSwgbGVuOwotICBHVHlwZSB0eXBlMSwgdHlwZTI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlMiksIEZBTFNFKTsKLQotICB0eXBlMSA9IEdfVkFMVUVfVFlQRSAodmFsdWUxKTsKLSAgdHlwZTIgPSBHX1ZBTFVFX1RZUEUgKHZhbHVlMik7Ci0KLSAgLyogc3BlY2lhbCBjYXNlcyBmaXJzdCAqLwotICBpZiAodHlwZTEgPT0gR1NUX1RZUEVfTElTVCkKLSAgICByZXR1cm4gZ3N0X3ZhbHVlX2ludGVyc2VjdF9saXN0IChkZXN0LCB2YWx1ZTEsIHZhbHVlMik7Ci0gIGlmICh0eXBlMiA9PSBHU1RfVFlQRV9MSVNUKQotICAgIHJldHVybiBnc3RfdmFsdWVfaW50ZXJzZWN0X2xpc3QgKGRlc3QsIHZhbHVlMiwgdmFsdWUxKTsKLQotICBpZiAoX2dzdF92YWx1ZV9jb21wYXJlX25vbGlzdCAodmFsdWUxLCB2YWx1ZTIpID09IEdTVF9WQUxVRV9FUVVBTCkgewotICAgIGlmIChkZXN0KQotICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKGRlc3QsIHZhbHVlMSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBsZW4gPSBnc3RfdmFsdWVfaW50ZXJzZWN0X2Z1bmNzLT5sZW47Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGludGVyc2VjdF9pbmZvID0gJmdfYXJyYXlfaW5kZXggKGdzdF92YWx1ZV9pbnRlcnNlY3RfZnVuY3MsCi0gICAgICAgIEdzdFZhbHVlSW50ZXJzZWN0SW5mbywgaSk7Ci0gICAgaWYgKGludGVyc2VjdF9pbmZvLT50eXBlMSA9PSB0eXBlMSAmJiBpbnRlcnNlY3RfaW5mby0+dHlwZTIgPT0gdHlwZTIpIHsKLSAgICAgIHJldHVybiBpbnRlcnNlY3RfaW5mby0+ZnVuYyAoZGVzdCwgdmFsdWUxLCB2YWx1ZTIpOwotICAgIH0KLSAgICBpZiAoaW50ZXJzZWN0X2luZm8tPnR5cGUxID09IHR5cGUyICYmIGludGVyc2VjdF9pbmZvLT50eXBlMiA9PSB0eXBlMSkgewotICAgICAgcmV0dXJuIGludGVyc2VjdF9pbmZvLT5mdW5jIChkZXN0LCB2YWx1ZTIsIHZhbHVlMSk7Ci0gICAgfQotICB9Ci0KLSAgLyogRmFpbGVkIHRvIGZpbmQgYSBkaXJlY3QgaW50ZXJzZWN0aW9uLCBjaGVjayBpZiB0aGVzZSBhcmUKLSAgICogR3N0RmxhZ1NldCBzdWItdHlwZXMuICovCi0gIGlmIChHX1VOTElLRUxZIChHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHZhbHVlMSkgJiYKLSAgICAgICAgICBHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHZhbHVlMikpKSB7Ci0gICAgcmV0dXJuIGdzdF92YWx1ZV9pbnRlcnNlY3RfZmxhZ3NldF9mbGFnc2V0IChkZXN0LCB2YWx1ZTEsIHZhbHVlMik7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLQotCi0vKiBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmM6IChza2lwKQotICogQHR5cGUxOiB0aGUgZmlyc3QgdHlwZSB0byBpbnRlcnNlY3QKLSAqIEB0eXBlMjogdGhlIHNlY29uZCB0eXBlIHRvIGludGVyc2VjdAotICogQGZ1bmM6IHRoZSBpbnRlcnNlY3Rpb24gZnVuY3Rpb24KLSAqCi0gKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBjYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbgotICogb2YgdGhlIHZhbHVlcyBoYXZpbmcgdGhlIHR5cGVzIEB0eXBlMSBhbmQgQHR5cGUyLgotICoKLSAqIEludGVyc2VjdCBmdW5jdGlvbnMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgYXQgc3RhcnR1cCBiZWZvcmUgYW55IHBpcGVsaW5lcyBhcmUKLSAqIHN0YXJ0ZWQsIGFzIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYygpIGlzIG5vdCB0aHJlYWQtc2FmZSBhbmQKLSAqIGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgZ3N0X3ZhbHVlX2ludGVyc2VjdCgpIG9yCi0gKiBnc3RfdmFsdWVfY2FuX2ludGVyc2VjdCgpLgotICovCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jIChHVHlwZSB0eXBlMSwgR1R5cGUgdHlwZTIsCi0gICAgR3N0VmFsdWVJbnRlcnNlY3RGdW5jIGZ1bmMpCi17Ci0gIEdzdFZhbHVlSW50ZXJzZWN0SW5mbyBpbnRlcnNlY3RfaW5mbzsKLQotICBpbnRlcnNlY3RfaW5mby50eXBlMSA9IHR5cGUxOwotICBpbnRlcnNlY3RfaW5mby50eXBlMiA9IHR5cGUyOwotICBpbnRlcnNlY3RfaW5mby5mdW5jID0gZnVuYzsKLQotICBnX2FycmF5X2FwcGVuZF92YWwgKGdzdF92YWx1ZV9pbnRlcnNlY3RfZnVuY3MsIGludGVyc2VjdF9pbmZvKTsKLX0KLQotCi0vKiBzdWJ0cmFjdGlvbiAqLwotCi0vKioKLSAqIGdzdF92YWx1ZV9zdWJ0cmFjdDoKLSAqIEBkZXN0OiAob3V0IGNhbGxlci1hbGxvY2F0ZXMpIChhbGxvdy1ub25lKTogdGhlIGRlc3RpbmF0aW9uIHZhbHVlCi0gKiAgICAgZm9yIHRoZSByZXN1bHQgaWYgdGhlIHN1YnRyYWN0aW9uIGlzIG5vdCBlbXB0eS4gTWF5IGJlICVOVUxMLAotICogICAgIGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdGluZyBzZXQgd2lsbCBub3QgYmUgY29tcHV0ZWQsIHdoaWNoIGNhbgotICogICAgIGdpdmUgYSBmYWlyIHNwZWVkdXAuCi0gKiBAbWludWVuZDogdGhlIHZhbHVlIHRvIHN1YnRyYWN0IGZyb20KLSAqIEBzdWJ0cmFoZW5kOiB0aGUgdmFsdWUgdG8gc3VidHJhY3QKLSAqCi0gKiBTdWJ0cmFjdHMgQHN1YnRyYWhlbmQgZnJvbSBAbWludWVuZCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gQGRlc3QuCi0gKiBOb3RlIHRoYXQgdGhpcyBtZWFucyBzdWJ0cmFjdGlvbiBhcyBpbiBzZXRzLCBub3QgYXMgaW4gbWF0aGVtYXRpY3MuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHN1YnRyYWN0aW9uIGlzIG5vdCBlbXB0eQotICovCi1nYm9vbGVhbgotZ3N0X3ZhbHVlX3N1YnRyYWN0IChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBtaW51ZW5kLAotICAgIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCi17Ci0gIEdzdFZhbHVlU3VidHJhY3RJbmZvICppbmZvOwotICBndWludCBpLCBsZW47Ci0gIEdUeXBlIG10eXBlLCBzdHlwZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAobWludWVuZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHN1YnRyYWhlbmQpLCBGQUxTRSk7Ci0KLSAgbXR5cGUgPSBHX1ZBTFVFX1RZUEUgKG1pbnVlbmQpOwotICBzdHlwZSA9IEdfVkFMVUVfVFlQRSAoc3VidHJhaGVuZCk7Ci0KLSAgLyogc3BlY2lhbCBjYXNlcyBmaXJzdCAqLwotICBpZiAobXR5cGUgPT0gR1NUX1RZUEVfTElTVCkKLSAgICByZXR1cm4gZ3N0X3ZhbHVlX3N1YnRyYWN0X2Zyb21fbGlzdCAoZGVzdCwgbWludWVuZCwgc3VidHJhaGVuZCk7Ci0gIGlmIChzdHlwZSA9PSBHU1RfVFlQRV9MSVNUKQotICAgIHJldHVybiBnc3RfdmFsdWVfc3VidHJhY3RfbGlzdCAoZGVzdCwgbWludWVuZCwgc3VidHJhaGVuZCk7Ci0KLSAgbGVuID0gZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLT5sZW47Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGluZm8gPSAmZ19hcnJheV9pbmRleCAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLCBHc3RWYWx1ZVN1YnRyYWN0SW5mbywgaSk7Ci0gICAgaWYgKGluZm8tPm1pbnVlbmQgPT0gbXR5cGUgJiYgaW5mby0+c3VidHJhaGVuZCA9PSBzdHlwZSkgewotICAgICAgcmV0dXJuIGluZm8tPmZ1bmMgKGRlc3QsIG1pbnVlbmQsIHN1YnRyYWhlbmQpOwotICAgIH0KLSAgfQotCi0gIGlmIChfZ3N0X3ZhbHVlX2NvbXBhcmVfbm9saXN0IChtaW51ZW5kLCBzdWJ0cmFoZW5kKSAhPSBHU1RfVkFMVUVfRVFVQUwpIHsKLSAgICBpZiAoZGVzdCkKLSAgICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5IChkZXN0LCBtaW51ZW5kKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotI2lmIDAKLWdib29sZWFuCi1nc3RfdmFsdWVfc3VidHJhY3QgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsCi0gICAgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0MiAoZGVzdCwgbWludWVuZCwgc3VidHJhaGVuZCk7Ci0KLSAgZ19wcmludGVyciAoIlwiJXNcIiAgLSAgXCIlc1wiICA9ICBcIiVzXCJcbiIsIGdzdF92YWx1ZV9zZXJpYWxpemUgKG1pbnVlbmQpLAotICAgICAgZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoc3VidHJhaGVuZCksCi0gICAgICByZXQgPyBnc3RfdmFsdWVfc2VyaWFsaXplIChkZXN0KSA6ICItLS0iKTsKLSAgcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF92YWx1ZV9jYW5fc3VidHJhY3Q6Ci0gKiBAbWludWVuZDogdGhlIHZhbHVlIHRvIHN1YnRyYWN0IGZyb20KLSAqIEBzdWJ0cmFoZW5kOiB0aGUgdmFsdWUgdG8gc3VidHJhY3QKLSAqCi0gKiBDaGVja3MgaWYgaXQncyBwb3NzaWJsZSB0byBzdWJ0cmFjdCBAc3VidHJhaGVuZCBmcm9tIEBtaW51ZW5kLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGEgc3VidHJhY3Rpb24gaXMgcG9zc2libGUKLSAqLwotZ2Jvb2xlYW4KLWdzdF92YWx1ZV9jYW5fc3VidHJhY3QgKGNvbnN0IEdWYWx1ZSAqIG1pbnVlbmQsIGNvbnN0IEdWYWx1ZSAqIHN1YnRyYWhlbmQpCi17Ci0gIEdzdFZhbHVlU3VidHJhY3RJbmZvICppbmZvOwotICBndWludCBpLCBsZW47Ci0gIEdUeXBlIG10eXBlLCBzdHlwZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19WQUxVRSAobWludWVuZCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHN1YnRyYWhlbmQpLCBGQUxTRSk7Ci0KLSAgbXR5cGUgPSBHX1ZBTFVFX1RZUEUgKG1pbnVlbmQpOwotICBzdHlwZSA9IEdfVkFMVUVfVFlQRSAoc3VidHJhaGVuZCk7Ci0KLSAgLyogc3BlY2lhbCBjYXNlcyAqLwotICBpZiAobXR5cGUgPT0gR1NUX1RZUEVfTElTVCB8fCBzdHlwZSA9PSBHU1RfVFlQRV9MSVNUKQotICAgIHJldHVybiBUUlVFOwotCi0gIGxlbiA9IGdzdF92YWx1ZV9zdWJ0cmFjdF9mdW5jcy0+bGVuOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBpbmZvID0gJmdfYXJyYXlfaW5kZXggKGdzdF92YWx1ZV9zdWJ0cmFjdF9mdW5jcywgR3N0VmFsdWVTdWJ0cmFjdEluZm8sIGkpOwotICAgIGlmIChpbmZvLT5taW51ZW5kID09IG10eXBlICYmIGluZm8tPnN1YnRyYWhlbmQgPT0gc3R5cGUpCi0gICAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBnc3RfdmFsdWVfY2FuX2NvbXBhcmVfdW5jaGVja2VkIChtaW51ZW5kLCBzdWJ0cmFoZW5kKTsKLX0KLQotLyogZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmM6IChza2lwKQotICogQG1pbnVlbmRfdHlwZTogdHlwZSBvZiB0aGUgbWludWVuZAotICogQHN1YnRyYWhlbmRfdHlwZTogdHlwZSBvZiB0aGUgc3VidHJhaGVuZAotICogQGZ1bmM6IGZ1bmN0aW9uIHRvIHVzZQotICoKLSAqIFJlZ2lzdGVycyBAZnVuYyBhcyBhIGZ1bmN0aW9uIGNhcGFibGUgb2Ygc3VidHJhY3RpbmcgdGhlIHZhbHVlcyBvZgotICogQHN1YnRyYWhlbmRfdHlwZSBmcm9tIHZhbHVlcyBvZiBAbWludWVuZF90eXBlLgotICoKLSAqIFN1YnRyYWN0IGZ1bmN0aW9ucyBzaG91bGQgYmUgcmVnaXN0ZXJlZCBhdCBzdGFydHVwIGJlZm9yZSBhbnkgcGlwZWxpbmVzIGFyZQotICogc3RhcnRlZCwgYXMgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMoKSBpcyBub3QgdGhyZWFkLXNhZmUgYW5kCi0gKiBjYW5ub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGdzdF92YWx1ZV9zdWJ0cmFjdCgpLgotICovCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKEdUeXBlIG1pbnVlbmRfdHlwZSwgR1R5cGUgc3VidHJhaGVuZF90eXBlLAotICAgIEdzdFZhbHVlU3VidHJhY3RGdW5jIGZ1bmMpCi17Ci0gIEdzdFZhbHVlU3VidHJhY3RJbmZvIGluZm87Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoIWdzdF90eXBlX2lzX2ZpeGVkIChtaW51ZW5kX3R5cGUpCi0gICAgICB8fCAhZ3N0X3R5cGVfaXNfZml4ZWQgKHN1YnRyYWhlbmRfdHlwZSkpOwotCi0gIGluZm8ubWludWVuZCA9IG1pbnVlbmRfdHlwZTsKLSAgaW5mby5zdWJ0cmFoZW5kID0gc3VidHJhaGVuZF90eXBlOwotICBpbmZvLmZ1bmMgPSBmdW5jOwotCi0gIGdfYXJyYXlfYXBwZW5kX3ZhbCAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLCBpbmZvKTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfcmVnaXN0ZXI6Ci0gKiBAdGFibGU6IHN0cnVjdHVyZSBjb250YWluaW5nIGZ1bmN0aW9ucyB0byByZWdpc3RlcgotICoKLSAqIFJlZ2lzdGVycyBmdW5jdGlvbnMgdG8gcGVyZm9ybSBjYWxjdWxhdGlvbnMgb24gI0dWYWx1ZSBpdGVtcyBvZiBhIGdpdmVuCi0gKiB0eXBlLiBFYWNoIHR5cGUgY2FuIG9ubHkgYmUgYWRkZWQgb25jZS4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX3JlZ2lzdGVyIChjb25zdCBHc3RWYWx1ZVRhYmxlICogdGFibGUpCi17Ci0gIEdzdFZhbHVlVGFibGUgKmZvdW5kOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRhYmxlICE9IE5VTEwpOwotCi0gIGdfYXJyYXlfYXBwZW5kX3ZhbCAoZ3N0X3ZhbHVlX3RhYmxlLCAqdGFibGUpOwotCi0gIGZvdW5kID0gZ3N0X3ZhbHVlX2hhc2hfbG9va3VwX3R5cGUgKHRhYmxlLT50eXBlKTsKLSAgaWYgKGZvdW5kKQotICAgIGdfd2FybmluZyAoImFkZGluZyB0eXBlICVzIG11bHRpcGxlIHRpbWVzIiwgZ190eXBlX25hbWUgKHRhYmxlLT50eXBlKSk7Ci0KLSAgLyogRklYTUU6IHdlJ3JlIG5vdCByZWFsbHkgZG9pbmcgdGhlIGNvbnN0IGp1c3RpY2UsIHdlIGFzc3VtZSB0aGUgdGFibGUgaXMKLSAgICogc3RhdGljICovCi0gIGdzdF92YWx1ZV9oYXNoX2FkZF90eXBlICh0YWJsZS0+dHlwZSwgdGFibGUpOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5OgotICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6IHRoZSB0YXJnZXQgdmFsdWUKLSAqIEBzcmM6IHRoZSBzb3VyY2UgdmFsdWUKLSAqCi0gKiBJbml0aWFsaXNlcyB0aGUgdGFyZ2V0IHZhbHVlIHRvIGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgc291cmNlIGFuZCB0aGVuIGNvcGllcwotICogdGhlIGNvbnRlbnRzIGZyb20gc291cmNlIHRvIHRhcmdldC4KLSAqLwotdm9pZAotZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKEdWYWx1ZSAqIGRlc3QsIGNvbnN0IEdWYWx1ZSAqIHNyYykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR19JU19WQUxVRSAoc3JjKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCk7Ci0KLSAgZ192YWx1ZV9pbml0IChkZXN0LCBHX1ZBTFVFX1RZUEUgKHNyYykpOwotICBnX3ZhbHVlX2NvcHkgKHNyYywgZGVzdCk7Ci19Ci0KLS8qIG1vdmUgc3JjIGludG8gZGVzdCBhbmQgY2xlYXIgc3JjICovCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX21vdmUgKEdWYWx1ZSAqIGRlc3QsIEdWYWx1ZSAqIHNyYykKLXsKLSAgZ19hc3NlcnQgKEdfSVNfVkFMVUUgKHNyYykpOwotICBnX2Fzc2VydCAoZGVzdCAhPSBOVUxMKTsKLQotICAqZGVzdCA9ICpzcmM7Ci0gIG1lbXNldCAoc3JjLCAwLCBzaXplb2YgKEdWYWx1ZSkpOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXJpYWxpemU6Ci0gKiBAdmFsdWU6IGEgI0dWYWx1ZSB0byBzZXJpYWxpemUKLSAqCi0gKiB0cmllcyB0byB0cmFuc2Zvcm0gdGhlIGdpdmVuIEB2YWx1ZSBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRoYXQgYWxsb3dzCi0gKiBnZXR0aW5nIGJhY2sgdGhpcyBzdHJpbmcgbGF0ZXIgb24gdXNpbmcgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplKCkuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSBzZXJpYWxpemF0aW9uIGZvciBAdmFsdWUKLSAqIG9yICVOVUxMIGlmIG5vbmUgZXhpc3RzCi0gKi8KLWdjaGFyICoKLWdzdF92YWx1ZV9zZXJpYWxpemUgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBndWludCBpLCBsZW47Ci0gIEdWYWx1ZSBzX3ZhbCA9IHsgMCB9OwotICBHc3RWYWx1ZVRhYmxlICp0YWJsZSwgKmJlc3Q7Ci0gIGdjaGFyICpzOwotICBHVHlwZSB0eXBlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFICh2YWx1ZSksIE5VTEwpOwotCi0gIHR5cGUgPSBHX1ZBTFVFX1RZUEUgKHZhbHVlKTsKLQotICBiZXN0ID0gZ3N0X3ZhbHVlX2hhc2hfbG9va3VwX3R5cGUgKHR5cGUpOwotCi0gIGlmIChHX1VOTElLRUxZICghYmVzdCB8fCAhYmVzdC0+c2VyaWFsaXplKSkgewotICAgIGxlbiA9IGdzdF92YWx1ZV90YWJsZS0+bGVuOwotICAgIGJlc3QgPSBOVUxMOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgdGFibGUgPSAmZ19hcnJheV9pbmRleCAoZ3N0X3ZhbHVlX3RhYmxlLCBHc3RWYWx1ZVRhYmxlLCBpKTsKLSAgICAgIGlmICh0YWJsZS0+c2VyaWFsaXplICYmIGdfdHlwZV9pc19hICh0eXBlLCB0YWJsZS0+dHlwZSkpIHsKLSAgICAgICAgaWYgKCFiZXN0IHx8IGdfdHlwZV9pc19hICh0YWJsZS0+dHlwZSwgYmVzdC0+dHlwZSkpCi0gICAgICAgICAgYmVzdCA9IHRhYmxlOwotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAoR19MSUtFTFkgKGJlc3QpKQotICAgIHJldHVybiBiZXN0LT5zZXJpYWxpemUgKHZhbHVlKTsKLQotICBnX3ZhbHVlX2luaXQgKCZzX3ZhbCwgR19UWVBFX1NUUklORyk7Ci0gIGlmIChnX3ZhbHVlX3RyYW5zZm9ybSAodmFsdWUsICZzX3ZhbCkpIHsKLSAgICBzID0gZ3N0X3N0cmluZ193cmFwIChnX3ZhbHVlX2dldF9zdHJpbmcgKCZzX3ZhbCkpOwotICB9IGVsc2UgewotICAgIHMgPSBOVUxMOwotICB9Ci0gIGdfdmFsdWVfdW5zZXQgKCZzX3ZhbCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplOgotICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcyk6ICNHVmFsdWUgdG8gZmlsbCB3aXRoIGNvbnRlbnRzIG9mCi0gKiAgICAgZGVzZXJpYWxpemF0aW9uCi0gKiBAc3JjOiBzdHJpbmcgdG8gZGVzZXJpYWxpemUKLSAqCi0gKiBUcmllcyB0byBkZXNlcmlhbGl6ZSBhIHN0cmluZyBpbnRvIHRoZSB0eXBlIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gR1ZhbHVlLgotICogSWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcywgJVRSVUUgaXMgcmV0dXJuZWQsICVGQUxTRSBvdGhlcndpc2UuCi0gKgotICogUmV0dXJuczogJVRSVUUgb24gc3VjY2VzcwotICovCi1nYm9vbGVhbgotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHNyYykKLXsKLSAgR3N0VmFsdWVUYWJsZSAqdGFibGUsICpiZXN0OwotICBndWludCBpLCBsZW47Ci0gIEdUeXBlIHR5cGU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNyYyAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFIChkZXN0KSwgRkFMU0UpOwotCi0gIHR5cGUgPSBHX1ZBTFVFX1RZUEUgKGRlc3QpOwotCi0gIGJlc3QgPSBnc3RfdmFsdWVfaGFzaF9sb29rdXBfdHlwZSAodHlwZSk7Ci0gIGlmIChHX1VOTElLRUxZICghYmVzdCB8fCAhYmVzdC0+ZGVzZXJpYWxpemUpKSB7Ci0gICAgbGVuID0gZ3N0X3ZhbHVlX3RhYmxlLT5sZW47Ci0gICAgYmVzdCA9IE5VTEw7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICB0YWJsZSA9ICZnX2FycmF5X2luZGV4IChnc3RfdmFsdWVfdGFibGUsIEdzdFZhbHVlVGFibGUsIGkpOwotICAgICAgaWYgKHRhYmxlLT5kZXNlcmlhbGl6ZSAmJiBnX3R5cGVfaXNfYSAodHlwZSwgdGFibGUtPnR5cGUpKSB7Ci0gICAgICAgIGlmICghYmVzdCB8fCBnX3R5cGVfaXNfYSAodGFibGUtPnR5cGUsIGJlc3QtPnR5cGUpKQotICAgICAgICAgIGJlc3QgPSB0YWJsZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKEdfTElLRUxZIChiZXN0KSkKLSAgICByZXR1cm4gYmVzdC0+ZGVzZXJpYWxpemUgKGRlc3QsIHNyYyk7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9pc19maXhlZDoKLSAqIEB2YWx1ZTogdGhlICNHVmFsdWUgdG8gY2hlY2sKLSAqCi0gKiBUZXN0cyBpZiB0aGUgZ2l2ZW4gR1ZhbHVlLCBpZiBhdmFpbGFibGUgaW4gYSBHc3RTdHJ1Y3R1cmUgKG9yIGFueSBvdGhlcgotICogY29udGFpbmVyKSBjb250YWlucyBhICJmaXhlZCIgKHdoaWNoIG1lYW5zOiBvbmUgdmFsdWUpIG9yIGFuICJ1bmZpeGVkIgotICogKHdoaWNoIG1lYW5zOiBtdWx0aXBsZSBwb3NzaWJsZSB2YWx1ZXMsIHN1Y2ggYXMgZGF0YSBsaXN0cyBvciBkYXRhCi0gKiByYW5nZXMpIHZhbHVlLgotICoKLSAqIFJldHVybnM6IHRydWUgaWYgdGhlIHZhbHVlIGlzICJmaXhlZCIuCi0gKi8KLQotZ2Jvb2xlYW4KLWdzdF92YWx1ZV9pc19maXhlZCAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIEdUeXBlIHR5cGU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfVkFMVUUgKHZhbHVlKSwgRkFMU0UpOwotCi0gIHR5cGUgPSBHX1ZBTFVFX1RZUEUgKHZhbHVlKTsKLQotICAvKiB0aGUgbW9zdCBjb21tb24gdHlwZXMgYXJlIGp1c3QgYmFzaWMgcGxhaW4gZ2xpYiB0eXBlcyAqLwotICBpZiAodHlwZSA8PSBHX1RZUEVfTUFLRV9GVU5EQU1FTlRBTCAoR19UWVBFX1JFU0VSVkVEX0dMSUJfTEFTVCkpIHsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmICh0eXBlID09IEdTVF9UWVBFX0FSUkFZKSB7Ci0gICAgZ2ludCBzaXplLCBuOwotICAgIGNvbnN0IEdWYWx1ZSAqa2lkOwotCi0gICAgLyogY2hlY2sgcmVjdXJzaXZlbHkgKi8KLSAgICBzaXplID0gZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplICh2YWx1ZSk7Ci0gICAgZm9yIChuID0gMDsgbiA8IHNpemU7IG4rKykgewotICAgICAga2lkID0gZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAodmFsdWUsIG4pOwotICAgICAgaWYgKCFnc3RfdmFsdWVfaXNfZml4ZWQgKGtpZCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUICh2YWx1ZSkpIHsKLSAgICAvKiBGbGFnc2V0cyBhcmUgb25seSBmaXhlZCBpZiB0aGVyZSBhcmUgbm8gJ2Rvbid0IGNhcmUnIGJpdHMgKi8KLSAgICByZXR1cm4gKGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrICh2YWx1ZSkgPT0gR1NUX0ZMQUdfU0VUX01BU0tfRVhBQ1QpOwotICB9Ci0gIHJldHVybiBnc3RfdHlwZV9pc19maXhlZCAodHlwZSk7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2ZpeGF0ZToKLSAqIEBkZXN0OiB0aGUgI0dWYWx1ZSBkZXN0aW5hdGlvbgotICogQHNyYzogdGhlICNHVmFsdWUgdG8gZml4YXRlCi0gKgotICogRml4YXRlIEBzcmMgaW50byBhIG5ldyB2YWx1ZSBAZGVzdC4KLSAqIEZvciByYW5nZXMsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHRha2VuLiBGb3IgbGlzdHMgYW5kIGFycmF5cywgdGhlCi0gKiBmaXJzdCBpdGVtIGlzIGZpeGF0ZWQgYW5kIHJldHVybmVkLgotICogSWYgQHNyYyBpcyBhbHJlYWR5IGZpeGVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgJUZBTFNFLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBkZXN0IGNvbnRhaW5zIGEgZml4YXRlZCB2ZXJzaW9uIG9mIEBzcmMuCi0gKi8KLWdib29sZWFuCi1nc3RfdmFsdWVfZml4YXRlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBHVmFsdWUgKiBzcmMpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1ZBTFVFIChzcmMpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0ICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoR19WQUxVRV9UWVBFIChzcmMpID09IEdTVF9UWVBFX0lOVF9SQU5HRSkgewotICAgIGdfdmFsdWVfaW5pdCAoZGVzdCwgR19UWVBFX0lOVCk7Ci0gICAgZ192YWx1ZV9zZXRfaW50IChkZXN0LCBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHNyYykpOwotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAoc3JjKSA9PSBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpIHsKLSAgICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdfVFlQRV9ET1VCTEUpOwotICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAoZGVzdCwgZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluIChzcmMpKTsKLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHNyYykgPT0gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpIHsKLSAgICBnc3RfdmFsdWVfaW5pdF9hbmRfY29weSAoZGVzdCwgZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKHNyYykpOwotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAoc3JjKSA9PSBHU1RfVFlQRV9MSVNUKSB7Ci0gICAgR1ZhbHVlIHRlbXAgPSB7IDAgfTsKLQotICAgIC8qIGxpc3QgY291bGQgYmUgZW1wdHkgKi8KLSAgICBpZiAoZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKHNyYykgPD0gMCkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGdzdF92YWx1ZV9pbml0X2FuZF9jb3B5ICgmdGVtcCwgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChzcmMsIDApKTsKLQotICAgIGlmICghZ3N0X3ZhbHVlX2ZpeGF0ZSAoZGVzdCwgJnRlbXApKSB7Ci0gICAgICBnc3RfdmFsdWVfbW92ZSAoZGVzdCwgJnRlbXApOwotICAgIH0gZWxzZSB7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmdGVtcCk7Ci0gICAgfQotICB9IGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAoc3JjKSA9PSBHU1RfVFlQRV9BUlJBWSkgewotICAgIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICAgIGd1aW50IG4sIGxlbjsKLQotICAgIGxlbiA9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoc3JjKTsKLSAgICBnX3ZhbHVlX2luaXQgKGRlc3QsIEdTVF9UWVBFX0FSUkFZKTsKLSAgICBmb3IgKG4gPSAwOyBuIDwgbGVuOyBuKyspIHsKLSAgICAgIEdWYWx1ZSBraWQgPSB7IDAgfTsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqb3JpZ19raWQgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlIChzcmMsIG4pOwotCi0gICAgICBpZiAoIWdzdF92YWx1ZV9maXhhdGUgKCZraWQsIG9yaWdfa2lkKSkKLSAgICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgKCZraWQsIG9yaWdfa2lkKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIF9nc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2FuZF90YWtlX3ZhbHVlIChkZXN0LCAma2lkKTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlcykKLSAgICAgIGdfdmFsdWVfdW5zZXQgKGRlc3QpOwotCi0gICAgcmV0dXJuIHJlczsKLSAgfSBlbHNlIGlmIChHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKHNyYykpIHsKLSAgICBndWludCBmbGFnczsKLQotICAgIGlmIChnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfbWFzayAoc3JjKSA9PSBHU1RfRkxBR19TRVRfTUFTS19FWEFDVCkKLSAgICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgLyogQWxyZWFkeSBmaXhlZCAqLwotCi0gICAgZmxhZ3MgPSBnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3MgKHNyYyk7Ci0gICAgZ192YWx1ZV9pbml0IChkZXN0LCBHX1ZBTFVFX1RZUEUgKHNyYykpOwotICAgIGdzdF92YWx1ZV9zZXRfZmxhZ3NldCAoZGVzdCwgZmxhZ3MsIEdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoqKioqKioqKioqKgotICogZnJhY3Rpb24gKgotICoqKioqKioqKioqKi8KLQotLyogaGVscGVyIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uIChHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgdmFsdWUtPmRhdGFbMF0udl9pbnQgPSAwOwotICB2YWx1ZS0+ZGF0YVsxXS52X2ludCA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfY29weV9mcmFjdGlvbiAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLCBHVmFsdWUgKiBkZXN0X3ZhbHVlKQotewotICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfaW50ID0gc3JjX3ZhbHVlLT5kYXRhWzBdLnZfaW50OwotICBkZXN0X3ZhbHVlLT5kYXRhWzFdLnZfaW50ID0gc3JjX3ZhbHVlLT5kYXRhWzFdLnZfaW50OwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX2NvbGxlY3RfZnJhY3Rpb24gKEdWYWx1ZSAqIHZhbHVlLCBndWludCBuX2NvbGxlY3RfdmFsdWVzLAotICAgIEdUeXBlQ1ZhbHVlICogY29sbGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3RfZmxhZ3MpCi17Ci0gIGlmIChuX2NvbGxlY3RfdmFsdWVzICE9IDIpCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIm5vdCBlbm91Z2ggdmFsdWUgbG9jYXRpb25zIGZvciBgJXMnIHBhc3NlZCIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotICBpZiAoY29sbGVjdF92YWx1ZXNbMV0udl9pbnQgPT0gMCkKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgicGFzc2VkICcwJyBhcyBkZW5vbWluYXRvciBmb3IgYCVzJyIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotICBpZiAoY29sbGVjdF92YWx1ZXNbMF0udl9pbnQgPCAtR19NQVhJTlQpCi0gICAgcmV0dXJuCi0gICAgICAgIGdfc3RyZHVwX3ByaW50ZgotICAgICAgICAoInBhc3NlZCB2YWx1ZSBzbWFsbGVyIHRoYW4gLUdfTUFYSU5UIGFzIG51bWVyYXRvciBmb3IgYCVzJyIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOwotICBpZiAoY29sbGVjdF92YWx1ZXNbMV0udl9pbnQgPCAtR19NQVhJTlQpCi0gICAgcmV0dXJuCi0gICAgICAgIGdfc3RyZHVwX3ByaW50ZgotICAgICAgICAoInBhc3NlZCB2YWx1ZSBzbWFsbGVyIHRoYW4gLUdfTUFYSU5UIGFzIGRlbm9taW5hdG9yIGZvciBgJXMnIiwKLSAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0KLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAodmFsdWUsCi0gICAgICBjb2xsZWN0X3ZhbHVlc1swXS52X2ludCwgY29sbGVjdF92YWx1ZXNbMV0udl9pbnQpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX2xjb3B5X2ZyYWN0aW9uIChjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBnaW50ICpudW1lcmF0b3IgPSBjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7Ci0gIGdpbnQgKmRlbm9taW5hdG9yID0gY29sbGVjdF92YWx1ZXNbMV0udl9wb2ludGVyOwotCi0gIGlmICghbnVtZXJhdG9yKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJudW1lcmF0b3IgZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgaWYgKCFkZW5vbWluYXRvcikKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiZGVub21pbmF0b3IgZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLQotICAqbnVtZXJhdG9yID0gdmFsdWUtPmRhdGFbMF0udl9pbnQ7Ci0gICpkZW5vbWluYXRvciA9IHZhbHVlLT5kYXRhWzFdLnZfaW50OwotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb246Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvICNHU1RfVFlQRV9GUkFDVElPTgotICogQG51bWVyYXRvcjogdGhlIG51bWVyYXRvciBvZiB0aGUgZnJhY3Rpb24KLSAqIEBkZW5vbWluYXRvcjogdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBmcmFjdGlvbgotICoKLSAqIFNldHMgQHZhbHVlIHRvIHRoZSBmcmFjdGlvbiBzcGVjaWZpZWQgYnkgQG51bWVyYXRvciBvdmVyIEBkZW5vbWluYXRvci4KLSAqIFRoZSBmcmFjdGlvbiBnZXRzIHJlZHVjZWQgdG8gdGhlIHNtYWxsZXN0IG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IsCi0gKiBhbmQgaWYgbmVjZXNzYXJ5IHRoZSBzaWduIGlzIG1vdmVkIHRvIHRoZSBudW1lcmF0b3IuCi0gKi8KLXZvaWQKLWdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKEdWYWx1ZSAqIHZhbHVlLCBnaW50IG51bWVyYXRvciwgZ2ludCBkZW5vbWluYXRvcikKLXsKLSAgZ2ludCBnY2QgPSAwOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAodmFsdWUpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZGVub21pbmF0b3IgIT0gMCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGRlbm9taW5hdG9yID49IC1HX01BWElOVCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG51bWVyYXRvciA+PSAtR19NQVhJTlQpOwotCi0gIC8qIG5vcm1hbGl6ZSBzaWduICovCi0gIGlmIChkZW5vbWluYXRvciA8IDApIHsKLSAgICBudW1lcmF0b3IgPSAtbnVtZXJhdG9yOwotICAgIGRlbm9taW5hdG9yID0gLWRlbm9taW5hdG9yOwotICB9Ci0KLSAgLyogY2hlY2sgZm9yIHJlZHVjdGlvbiAqLwotICBnY2QgPSBnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAobnVtZXJhdG9yLCBkZW5vbWluYXRvcik7Ci0gIGlmIChnY2QpIHsKLSAgICBudW1lcmF0b3IgLz0gZ2NkOwotICAgIGRlbm9taW5hdG9yIC89IGdjZDsKLSAgfQotCi0gIGdfYXNzZXJ0IChkZW5vbWluYXRvciA+IDApOwotCi0gIHZhbHVlLT5kYXRhWzBdLnZfaW50ID0gbnVtZXJhdG9yOwotICB2YWx1ZS0+ZGF0YVsxXS52X2ludCA9IGRlbm9taW5hdG9yOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yOgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byAjR1NUX1RZUEVfRlJBQ1RJT04KLSAqCi0gKiBHZXRzIHRoZSBudW1lcmF0b3Igb2YgdGhlIGZyYWN0aW9uIHNwZWNpZmllZCBieSBAdmFsdWUuCi0gKgotICogUmV0dXJuczogdGhlIG51bWVyYXRvciBvZiB0aGUgZnJhY3Rpb24uCi0gKi8KLWdpbnQKLWdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAodmFsdWUpLCAwKTsKLQotICByZXR1cm4gdmFsdWUtPmRhdGFbMF0udl9pbnQ7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcjoKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0ZSQUNUSU9OCi0gKgotICogR2V0cyB0aGUgZGVub21pbmF0b3Igb2YgdGhlIGZyYWN0aW9uIHNwZWNpZmllZCBieSBAdmFsdWUuCi0gKgotICogUmV0dXJuczogdGhlIGRlbm9taW5hdG9yIG9mIHRoZSBmcmFjdGlvbi4KLSAqLwotZ2ludAotZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04gKHZhbHVlKSwgMSk7Ci0KLSAgcmV0dXJuIHZhbHVlLT5kYXRhWzFdLnZfaW50OwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBseToKLSAqIEBwcm9kdWN0OiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byAjR1NUX1RZUEVfRlJBQ1RJT04KLSAqIEBmYWN0b3IxOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byAjR1NUX1RZUEVfRlJBQ1RJT04KLSAqIEBmYWN0b3IyOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byAjR1NUX1RZUEVfRlJBQ1RJT04KLSAqCi0gKiBNdWx0aXBsaWVzIHRoZSB0d28gI0dWYWx1ZSBpdGVtcyBjb250YWluaW5nIGEgI0dTVF9UWVBFX0ZSQUNUSU9OIGFuZCBzZXRzCi0gKiBAcHJvZHVjdCB0byB0aGUgcHJvZHVjdCBvZiB0aGUgdHdvIGZyYWN0aW9ucy4KLSAqCi0gKiBSZXR1cm5zOiAlRkFMU0UgaW4gY2FzZSBvZiBhbiBlcnJvciAobGlrZSBpbnRlZ2VyIG92ZXJmbG93KSwgJVRSVUUgb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5IChHVmFsdWUgKiBwcm9kdWN0LCBjb25zdCBHVmFsdWUgKiBmYWN0b3IxLAotICAgIGNvbnN0IEdWYWx1ZSAqIGZhY3RvcjIpCi17Ci0gIGdpbnQgbjEsIG4yLCBkMSwgZDI7Ci0gIGdpbnQgcmVzX24sIHJlc19kOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwcm9kdWN0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAoZmFjdG9yMSksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAoZmFjdG9yMiksIEZBTFNFKTsKLQotICBuMSA9IGZhY3RvcjEtPmRhdGFbMF0udl9pbnQ7Ci0gIG4yID0gZmFjdG9yMi0+ZGF0YVswXS52X2ludDsKLSAgZDEgPSBmYWN0b3IxLT5kYXRhWzFdLnZfaW50OwotICBkMiA9IGZhY3RvcjItPmRhdGFbMV0udl9pbnQ7Ci0KLSAgaWYgKCFnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSAobjEsIGQxLCBuMiwgZDIsICZyZXNfbiwgJnJlc19kKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAocHJvZHVjdCwgcmVzX24sIHJlc19kKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3Q6Ci0gKiBAZGVzdDogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0ZSQUNUSU9OCi0gKiBAbWludWVuZDogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0ZSQUNUSU9OCi0gKiBAc3VidHJhaGVuZDogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0ZSQUNUSU9OCi0gKgotICogU3VidHJhY3RzIHRoZSBAc3VidHJhaGVuZCBmcm9tIHRoZSBAbWludWVuZCBhbmQgc2V0cyBAZGVzdCB0byB0aGUgcmVzdWx0LgotICoKLSAqIFJldHVybnM6ICVGQUxTRSBpbiBjYXNlIG9mIGFuIGVycm9yIChsaWtlIGludGVnZXIgb3ZlcmZsb3cpLCAlVFJVRSBvdGhlcndpc2UuCi0gKi8KLWdib29sZWFuCi1nc3RfdmFsdWVfZnJhY3Rpb25fc3VidHJhY3QgKEdWYWx1ZSAqIGRlc3QsCi0gICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwgY29uc3QgR1ZhbHVlICogc3VidHJhaGVuZCkKLXsKLSAgZ2ludCBuMSwgbjIsIGQxLCBkMjsKLSAgZ2ludCByZXNfbiwgcmVzX2Q7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc3QgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OIChtaW51ZW5kKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OIChzdWJ0cmFoZW5kKSwgRkFMU0UpOwotCi0gIG4xID0gbWludWVuZC0+ZGF0YVswXS52X2ludDsKLSAgbjIgPSBzdWJ0cmFoZW5kLT5kYXRhWzBdLnZfaW50OwotICBkMSA9IG1pbnVlbmQtPmRhdGFbMV0udl9pbnQ7Ci0gIGQyID0gc3VidHJhaGVuZC0+ZGF0YVsxXS52X2ludDsKLQotICBpZiAoIWdzdF91dGlsX2ZyYWN0aW9uX2FkZCAobjEsIGQxLCAtbjIsIGQyLCAmcmVzX24sICZyZXNfZCkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uIChkZXN0LCByZXNfbiwgcmVzX2QpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mcmFjdGlvbiAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGdpbnQzMiBudW1lcmF0b3IgPSB2YWx1ZS0+ZGF0YVswXS52X2ludDsKLSAgZ2ludDMyIGRlbm9taW5hdG9yID0gdmFsdWUtPmRhdGFbMV0udl9pbnQ7Ci0gIGdib29sZWFuIHBvc2l0aXZlID0gVFJVRTsKLQotICAvKiBnZXQgdGhlIHNpZ24gYW5kIG1ha2UgY29tcG9uZW50cyBhYnNvbHV0ZSAqLwotICBpZiAobnVtZXJhdG9yIDwgMCkgewotICAgIG51bWVyYXRvciA9IC1udW1lcmF0b3I7Ci0gICAgcG9zaXRpdmUgPSAhcG9zaXRpdmU7Ci0gIH0KLSAgaWYgKGRlbm9taW5hdG9yIDwgMCkgewotICAgIGRlbm9taW5hdG9yID0gLWRlbm9taW5hdG9yOwotICAgIHBvc2l0aXZlID0gIXBvc2l0aXZlOwotICB9Ci0KLSAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIiVzJWQvJWQiLAotICAgICAgcG9zaXRpdmUgPyAiIiA6ICItIiwgbnVtZXJhdG9yLCBkZW5vbWluYXRvcik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIGdpbnQgbnVtLCBkZW47Ci0gIGdpbnQgbnVtX2NoYXJzOwotCi0gIGlmIChHX1VOTElLRUxZIChzID09IE5VTEwpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoR19VTkxJS0VMWSAoZGVzdCA9PSBOVUxMIHx8ICFHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04gKGRlc3QpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKHNzY2FuZiAocywgIiVkLyVkJW4iLCAmbnVtLCAmZGVuLCAmbnVtX2NoYXJzKSA+PSAyKSB7Ci0gICAgaWYgKHNbbnVtX2NoYXJzXSAhPSAwKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGlmIChkZW4gPT0gMCkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKGRlc3QsIG51bSwgZGVuKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICIxL21heCIpID09IDApIHsKLSAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uIChkZXN0LCAxLCBHX01BWElOVCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZSBpZiAoc3NjYW5mIChzLCAiJWQlbiIsICZudW0sICZudW1fY2hhcnMpID49IDEpIHsKLSAgICBpZiAoc1tudW1fY2hhcnNdICE9IDApCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoZGVzdCwgbnVtLCAxKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJtaW4iKSA9PSAwKSB7Ci0gICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoZGVzdCwgLUdfTUFYSU5ULCAxKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHMsICJtYXgiKSA9PSAwKSB7Ci0gICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoZGVzdCwgR19NQVhJTlQsIDEpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mcmFjdGlvbl9zdHJpbmcgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwKLSAgICBHVmFsdWUgKiBkZXN0X3ZhbHVlKQotewotICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IGdzdF92YWx1ZV9zZXJpYWxpemVfZnJhY3Rpb24gKHNyY192YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX3N0cmluZ19mcmFjdGlvbiAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAotICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGlmICghZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZyYWN0aW9uIChkZXN0X3ZhbHVlLAotICAgICAgICAgIHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpKQotICAgIC8qIElmIHRoZSBkZXNlcmlhbGl6ZSBmYWlscywgZW5zdXJlIHdlIGxlYXZlIHRoZSBmcmFjdGlvbiBpbiBhCi0gICAgICogdmFsaWQsIGlmIGluY29ycmVjdCwgc3RhdGUgKi8KLSAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uIChkZXN0X3ZhbHVlLCAwLCAxKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV90cmFuc2Zvcm1fZG91YmxlX2ZyYWN0aW9uIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZ2RvdWJsZSBzcmMgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHNyY192YWx1ZSk7Ci0gIGdpbnQgbiwgZDsKLQotICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24gKHNyYywgJm4sICZkKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoZGVzdF92YWx1ZSwgbiwgZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX2Zsb2F0X2ZyYWN0aW9uIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZ2Zsb2F0IHNyYyA9IGdfdmFsdWVfZ2V0X2Zsb2F0IChzcmNfdmFsdWUpOwotICBnaW50IG4sIGQ7Ci0KLSAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uIChzcmMsICZuLCAmZCk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKGRlc3RfdmFsdWUsIG4sIGQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mcmFjdGlvbl9kb3VibGUgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwKLSAgICBHVmFsdWUgKiBkZXN0X3ZhbHVlKQotewotICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfZG91YmxlID0gKChkb3VibGUpIHNyY192YWx1ZS0+ZGF0YVswXS52X2ludCkgLwotICAgICAgKChkb3VibGUpIHNyY192YWx1ZS0+ZGF0YVsxXS52X2ludCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX2ZyYWN0aW9uX2Zsb2F0IChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X2Zsb2F0ID0gKChmbG9hdCkgc3JjX3ZhbHVlLT5kYXRhWzBdLnZfaW50KSAvCi0gICAgICAoKGZsb2F0KSBzcmNfdmFsdWUtPmRhdGFbMV0udl9pbnQpOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3ZhbHVlX2NvbXBhcmVfZnJhY3Rpb24gKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBnaW50IG4xLCBuMjsKLSAgZ2ludCBkMSwgZDI7Ci0gIGdpbnQgcmV0OwotCi0gIG4xID0gdmFsdWUxLT5kYXRhWzBdLnZfaW50OwotICBuMiA9IHZhbHVlMi0+ZGF0YVswXS52X2ludDsKLSAgZDEgPSB2YWx1ZTEtPmRhdGFbMV0udl9pbnQ7Ci0gIGQyID0gdmFsdWUyLT5kYXRhWzFdLnZfaW50OwotCi0gIC8qIGZyYWN0aW9ucyBhcmUgcmVkdWNlZCB3aGVuIHNldCwgc28gd2UgY2FuIHF1aWNrbHkgc2VlIGlmIHRoZXkncmUgZXF1YWwgKi8KLSAgaWYgKG4xID09IG4yICYmIGQxID09IGQyKQotICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0KLSAgaWYgKGQxID09IDAgJiYgZDIgPT0gMCkKLSAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLSAgZWxzZSBpZiAoZDEgPT0gMCkKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTjsKLSAgZWxzZSBpZiAoZDIgPT0gMCkKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0xFU1NfVEhBTjsKLQotICByZXQgPSBnc3RfdXRpbF9mcmFjdGlvbl9jb21wYXJlIChuMSwgZDEsIG4yLCBkMik7Ci0gIGlmIChyZXQgPT0gLTEpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9MRVNTX1RIQU47Ci0gIGVsc2UgaWYgKHJldCA9PSAxKQotICAgIHJldHVybiBHU1RfVkFMVUVfR1JFQVRFUl9USEFOOwotCi0gIC8qIEVxdWFsaXR5IGNhbid0IGhhcHBlbiBoZXJlIGJlY2F1c2Ugd2UgY2hlY2sgZm9yIHRoYXQKLSAgICogZmlyc3QgYWxyZWFkeSAqLwotICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoR1NUX1ZBTFVFX1VOT1JERVJFRCk7Ci19Ci0KLS8qKioqKioqKioKLSAqIEdEYXRlICoKLSAqKioqKioqKiovCi0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9kYXRlIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgY29uc3QgR0RhdGUgKmRhdGUxID0gKGNvbnN0IEdEYXRlICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZTEpOwotICBjb25zdCBHRGF0ZSAqZGF0ZTIgPSAoY29uc3QgR0RhdGUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlMik7Ci0gIGd1aW50MzIgajEsIGoyOwotCi0gIGlmIChkYXRlMSA9PSBkYXRlMikKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotCi0gIGlmICgoZGF0ZTEgPT0gTlVMTCB8fCAhZ19kYXRlX3ZhbGlkIChkYXRlMSkpCi0gICAgICAmJiAoZGF0ZTIgIT0gTlVMTCAmJiBnX2RhdGVfdmFsaWQgKGRhdGUyKSkpIHsKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0xFU1NfVEhBTjsKLSAgfQotCi0gIGlmICgoZGF0ZTIgPT0gTlVMTCB8fCAhZ19kYXRlX3ZhbGlkIChkYXRlMikpCi0gICAgICAmJiAoZGF0ZTEgIT0gTlVMTCAmJiBnX2RhdGVfdmFsaWQgKGRhdGUxKSkpIHsKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTjsKLSAgfQotCi0gIGlmIChkYXRlMSA9PSBOVUxMIHx8IGRhdGUyID09IE5VTEwgfHwgIWdfZGF0ZV92YWxpZCAoZGF0ZTEpCi0gICAgICB8fCAhZ19kYXRlX3ZhbGlkIChkYXRlMikpIHsKLSAgICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLSAgfQotCi0gIGoxID0gZ19kYXRlX2dldF9qdWxpYW4gKGRhdGUxKTsKLSAgajIgPSBnX2RhdGVfZ2V0X2p1bGlhbiAoZGF0ZTIpOwotCi0gIGlmIChqMSA9PSBqMikKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotICBlbHNlIGlmIChqMSA8IGoyKQotICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOwotICBlbHNlCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU47Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX2RhdGUgKGNvbnN0IEdWYWx1ZSAqIHZhbCkKLXsKLSAgY29uc3QgR0RhdGUgKmRhdGUgPSAoY29uc3QgR0RhdGUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbCk7Ci0KLSAgaWYgKGRhdGUgPT0gTlVMTCB8fCAhZ19kYXRlX3ZhbGlkIChkYXRlKSkKLSAgICByZXR1cm4gZ19zdHJkdXAgKCI5OTk5LTk5LTk5Iik7Ci0KLSAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIiUwNHUtJTAydS0lMDJ1IiwgZ19kYXRlX2dldF95ZWFyIChkYXRlKSwKLSAgICAgIGdfZGF0ZV9nZXRfbW9udGggKGRhdGUpLCBnX2RhdGVfZ2V0X2RheSAoZGF0ZSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9kYXRlIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIGd1aW50IHllYXIsIG1vbnRoLCBkYXk7Ci0KLSAgaWYgKCFzIHx8IHNzY2FuZiAocywgIiUwNHUtJTAydS0lMDJ1IiwgJnllYXIsICZtb250aCwgJmRheSkgIT0gMykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnX2RhdGVfdmFsaWRfZG15IChkYXksIG1vbnRoLCB5ZWFyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ192YWx1ZV90YWtlX2JveGVkIChkZXN0LCBnX2RhdGVfbmV3X2RteSAoZGF5LCBtb250aCwgeWVhcikpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqKioqKioqKioqKioKLSAqIEdzdERhdGVUaW1lICoKLSAqKioqKioqKioqKioqLwotCi1zdGF0aWMgZ2ludAotZ3N0X3ZhbHVlX2NvbXBhcmVfZGF0ZV90aW1lIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgY29uc3QgR3N0RGF0ZVRpbWUgKmRhdGUxID0gKGNvbnN0IEdzdERhdGVUaW1lICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZTEpOwotICBjb25zdCBHc3REYXRlVGltZSAqZGF0ZTIgPSAoY29uc3QgR3N0RGF0ZVRpbWUgKikgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlMik7Ci0KLSAgaWYgKGRhdGUxID09IGRhdGUyKQotICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0KLSAgaWYgKChkYXRlMSA9PSBOVUxMKSAmJiAoZGF0ZTIgIT0gTlVMTCkpIHsKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0xFU1NfVEhBTjsKLSAgfQotICBpZiAoKGRhdGUyID09IE5VTEwpICYmIChkYXRlMSAhPSBOVUxMKSkgewotICAgIHJldHVybiBHU1RfVkFMVUVfTEVTU19USEFOOwotICB9Ci0KLSAgLyogcmV0dXJucyBHU1RfVkFMVUVfKiAqLwotICByZXR1cm4gX19nc3RfZGF0ZV90aW1lX2NvbXBhcmUgKGRhdGUxLCBkYXRlMik7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX2RhdGVfdGltZSAoY29uc3QgR1ZhbHVlICogdmFsKQotewotICBHc3REYXRlVGltZSAqZGF0ZSA9IChHc3REYXRlVGltZSAqKSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsKTsKLQotICBpZiAoZGF0ZSA9PSBOVUxMKQotICAgIHJldHVybiBnX3N0cmR1cCAoIm51bGwiKTsKLQotICByZXR1cm4gX19nc3RfZGF0ZV90aW1lX3NlcmlhbGl6ZSAoZGF0ZSwgVFJVRSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RhdGVfdGltZSAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQotewotICBHc3REYXRlVGltZSAqZGF0ZXRpbWU7Ci0KLSAgaWYgKCFzIHx8IHN0cmNtcCAocywgIm51bGwiKSA9PSAwKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZGF0ZXRpbWUgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nIChzKTsKLSAgaWYgKGRhdGV0aW1lICE9IE5VTEwpIHsKLSAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKGRlc3QsIGRhdGV0aW1lKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBkZXNlcmlhbGl6ZSBkYXRlIHRpbWUgc3RyaW5nICclcyciLCBzKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3RyYW5zZm9ybV9kYXRlX3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLCBHVmFsdWUgKiBkZXN0X3ZhbHVlKQotewotICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IGdzdF92YWx1ZV9zZXJpYWxpemVfZGF0ZSAoc3JjX3ZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV90cmFuc2Zvcm1fc3RyaW5nX2RhdGUgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RhdGUgKGRlc3RfdmFsdWUsIHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOwotfQotCi0KLS8qKioqKioqKioqKioKLSAqIGJpdG1hc2sgKgotICoqKioqKioqKioqKi8KLQotLyogaGVscGVyIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9pbml0X2JpdG1hc2sgKEdWYWx1ZSAqIHZhbHVlKQotewotICB2YWx1ZS0+ZGF0YVswXS52X3VpbnQ2NCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfY29weV9iaXRtYXNrIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGRlc3RfdmFsdWUtPmRhdGFbMF0udl91aW50NjQgPSBzcmNfdmFsdWUtPmRhdGFbMF0udl91aW50NjQ7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfY29sbGVjdF9iaXRtYXNrIChHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBpZiAobl9jb2xsZWN0X3ZhbHVlcyAhPSAxKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJub3QgZW5vdWdoIHZhbHVlIGxvY2F0aW9ucyBmb3IgYCVzJyBwYXNzZWQiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLQotICBnc3RfdmFsdWVfc2V0X2JpdG1hc2sgKHZhbHVlLCAoZ3VpbnQ2NCkgY29sbGVjdF92YWx1ZXNbMF0udl9pbnQ2NCk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfbGNvcHlfYml0bWFzayAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsCi0gICAgR1R5cGVDVmFsdWUgKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykKLXsKLSAgZ3VpbnQ2NCAqYml0bWFzayA9IGNvbGxlY3RfdmFsdWVzWzBdLnZfcG9pbnRlcjsKLQotICBpZiAoIWJpdG1hc2spCi0gICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInZhbHVlIGZvciBgJXMnIHBhc3NlZCBhcyBOVUxMIiwKLSAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7Ci0KLSAgKmJpdG1hc2sgPSB2YWx1ZS0+ZGF0YVswXS52X3VpbnQ2NDsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3RfdmFsdWVfc2V0X2JpdG1hc2s6Ci0gKiBAdmFsdWU6IGEgR1ZhbHVlIGluaXRpYWxpemVkIHRvICNHU1RfVFlQRV9CSVRNQVNLCi0gKiBAYml0bWFzazogdGhlIGJpdG1hc2sKLSAqCi0gKiBTZXRzIEB2YWx1ZSB0byB0aGUgYml0bWFzayBzcGVjaWZpZWQgYnkgQGJpdG1hc2suCi0gKi8KLXZvaWQKLWdzdF92YWx1ZV9zZXRfYml0bWFzayAoR1ZhbHVlICogdmFsdWUsIGd1aW50NjQgYml0bWFzaykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0JJVE1BU0sgKHZhbHVlKSk7Ci0KLSAgdmFsdWUtPmRhdGFbMF0udl91aW50NjQgPSBiaXRtYXNrOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9nZXRfYml0bWFzazoKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gI0dTVF9UWVBFX0JJVE1BU0sKLSAqCi0gKiBHZXRzIHRoZSBiaXRtYXNrIHNwZWNpZmllZCBieSBAdmFsdWUuCi0gKgotICogUmV0dXJuczogdGhlIGJpdG1hc2suCi0gKi8KLWd1aW50NjQKLWdzdF92YWx1ZV9nZXRfYml0bWFzayAoY29uc3QgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVkFMVUVfSE9MRFNfQklUTUFTSyAodmFsdWUpLCAwKTsKLQotICByZXR1cm4gdmFsdWUtPmRhdGFbMF0udl91aW50NjQ7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfc2VyaWFsaXplX2JpdG1hc2sgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKQotewotICBndWludDY0IGJpdG1hc2sgPSB2YWx1ZS0+ZGF0YVswXS52X3VpbnQ2NDsKLQotICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiMHglMDE2IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsIGJpdG1hc2spOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9iaXRtYXNrIChHVmFsdWUgKiBkZXN0LCBjb25zdCBnY2hhciAqIHMpCi17Ci0gIGdjaGFyICplbmRwdHIgPSBOVUxMOwotICBndWludDY0IHZhbDsKLQotICBpZiAoR19VTkxJS0VMWSAocyA9PSBOVUxMKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGRlc3QgPT0gTlVMTCB8fCAhR1NUX1ZBTFVFX0hPTERTX0JJVE1BU0sgKGRlc3QpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZXJybm8gPSAwOwotICB2YWwgPSBnX2FzY2lpX3N0cnRvdWxsIChzLCAmZW5kcHRyLCAxNik7Ci0gIGlmICh2YWwgPT0gR19NQVhVSU5UNjQgJiYgKGVycm5vID09IEVSQU5HRSB8fCBlcnJubyA9PSBFSU5WQUwpKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHZhbCA9PSAwICYmIGVuZHB0ciA9PSBzKQotICAgIHJldHVybiBGQUxTRTsKLQotICBnc3RfdmFsdWVfc2V0X2JpdG1hc2sgKGRlc3QsIHZhbCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX2JpdG1hc2tfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBnc3RfdmFsdWVfc2VyaWFsaXplX2JpdG1hc2sgKHNyY192YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfdHJhbnNmb3JtX3N0cmluZ19iaXRtYXNrIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgaWYgKCFnc3RfdmFsdWVfZGVzZXJpYWxpemVfYml0bWFzayAoZGVzdF92YWx1ZSwgc3JjX3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcikpCi0gICAgZ3N0X3ZhbHVlX3NldF9iaXRtYXNrIChkZXN0X3ZhbHVlLCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV90cmFuc2Zvcm1fdWludDY0X2JpdG1hc2sgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwKLSAgICBHVmFsdWUgKiBkZXN0X3ZhbHVlKQotewotICBkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfdWludDY0ID0gc3JjX3ZhbHVlLT5kYXRhWzBdLnZfdWludDY0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3RyYW5zZm9ybV9iaXRtYXNrX3VpbnQ2NCAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAotICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGRlc3RfdmFsdWUtPmRhdGFbMF0udl91aW50NjQgPSBzcmNfdmFsdWUtPmRhdGFbMF0udl91aW50NjQ7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9iaXRtYXNrIChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgZ3VpbnQ2NCB2MSwgdjI7Ci0KLSAgdjEgPSB2YWx1ZTEtPmRhdGFbMF0udl91aW50NjQ7Ci0gIHYyID0gdmFsdWUyLT5kYXRhWzBdLnZfdWludDY0OwotCi0gIGlmICh2MSA9PSB2MikKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotCi0gIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotfQotCi0vKioqKioqKioqKioqCi0gKiBmbGFnc2V0ICoKLSAqKioqKioqKioqKiovCi0KLS8qIGhlbHBlciBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdWVfaW5pdF9mbGFnc2V0IChHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgdmFsdWUtPmRhdGFbMF0udl91aW50ID0gMDsKLSAgdmFsdWUtPmRhdGFbMV0udl91aW50ID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx1ZV9jb3B5X2ZsYWdzZXQgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWx1ZSwgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgZGVzdF92YWx1ZS0+ZGF0YVswXS52X3VpbnQgPSBzcmNfdmFsdWUtPmRhdGFbMF0udl91aW50OwotICBkZXN0X3ZhbHVlLT5kYXRhWzFdLnZfdWludCA9IHNyY192YWx1ZS0+ZGF0YVsxXS52X3VpbnQ7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfY29sbGVjdF9mbGFnc2V0IChHVmFsdWUgKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywKLSAgICBHVHlwZUNWYWx1ZSAqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKQotewotICBpZiAobl9jb2xsZWN0X3ZhbHVlcyAhPSAyKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJub3QgZW5vdWdoIHZhbHVlIGxvY2F0aW9ucyBmb3IgYCVzJyBwYXNzZWQiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLQotICBnc3RfdmFsdWVfc2V0X2ZsYWdzZXQgKHZhbHVlLAotICAgICAgKGd1aW50KSBjb2xsZWN0X3ZhbHVlc1swXS52X2ludCwgKGd1aW50KSBjb2xsZWN0X3ZhbHVlc1sxXS52X2ludCk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfdmFsdWVfbGNvcHlfZmxhZ3NldCAoY29uc3QgR1ZhbHVlICogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsCi0gICAgR1R5cGVDVmFsdWUgKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykKLXsKLSAgZ3VpbnQgKmZsYWdzID0gY29sbGVjdF92YWx1ZXNbMF0udl9wb2ludGVyOwotICBndWludCAqbWFzayA9IGNvbGxlY3RfdmFsdWVzWzFdLnZfcG9pbnRlcjsKLQotICAqZmxhZ3MgPSB2YWx1ZS0+ZGF0YVswXS52X3VpbnQ7Ci0gICptYXNrID0gdmFsdWUtPmRhdGFbMV0udl91aW50OwotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9zZXRfZmxhZ3NldDoKLSAqIEB2YWx1ZTogYSBHVmFsdWUgaW5pdGlhbGl6ZWQgdG8gJUdTVF9UWVBFX0ZMQUdfU0VUCi0gKiBAZmxhZ3M6IFRoZSB2YWx1ZSBvZiB0aGUgZmxhZ3Mgc2V0IG9yIHVuc2V0Ci0gKiBAbWFzazogVGhlIG1hc2sgaW5kaWNhdGUgd2hpY2ggZmxhZ3MgYml0cyBtdXN0IG1hdGNoIGZvciBjb21wYXJpc29ucwotICoKLSAqIFNldHMgQHZhbHVlIHRvIHRoZSBmbGFncyBhbmQgbWFzayB2YWx1ZXMgcHJvdmlkZWQgaW4gQGZsYWdzIGFuZCBAbWFzay4KLSAqIFRoZSBAZmxhZ3MgdmFsdWUgaW5kaWNhdGVzIHRoZSB2YWx1ZXMgb2YgZmxhZ3MsIHRoZSBAbWFzayByZXByZXNlbnRzCi0gKiB3aGljaCBiaXRzIGluIHRoZSBmbGFnIHZhbHVlIGhhdmUgYmVlbiBzZXQsIGFuZCB3aGljaCBhcmUgImRvbid0IGNhcmUiCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfdmFsdWVfc2V0X2ZsYWdzZXQgKEdWYWx1ZSAqIHZhbHVlLCBndWludCBmbGFncywgZ3VpbnQgbWFzaykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1ZBTFVFX0hPTERTX0ZMQUdfU0VUICh2YWx1ZSkpOwotCi0gIC8qIE5vcm1hbGlzZSBhbmQgb25seSBrZWVwIGZsYWdzIG1lbnRpb25lZCBpbiB0aGUgbWFzayAqLwotICB2YWx1ZS0+ZGF0YVswXS52X3VpbnQgPSBmbGFncyAmIG1hc2s7Ci0gIHZhbHVlLT5kYXRhWzFdLnZfdWludCA9IG1hc2s7Ci19Ci0KLS8qKgotICogZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X2ZsYWdzOgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byAjR1NUX1RZUEVfRkxBR19TRVQKLSAqCi0gKiBSZXRyaWV2ZSB0aGUgZmxhZ3MgZmllbGQgb2YgYSBHc3RGbGFnU2V0IEB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgZmxhZ3MgZmllbGQgb2YgdGhlIGZsYWdzZXQgaW5zdGFuY2UuCi0gKgotICogU2luY2U6IDEuNgotICovCi1ndWludAotZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X2ZsYWdzIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GTEFHX1NFVCAodmFsdWUpLCAwKTsKLQotICByZXR1cm4gdmFsdWUtPmRhdGFbMF0udl91aW50OwotfQotCi0vKioKLSAqIGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrOgotICogQHZhbHVlOiBhIEdWYWx1ZSBpbml0aWFsaXplZCB0byAjR1NUX1RZUEVfRkxBR19TRVQKLSAqCi0gKiBSZXRyaWV2ZSB0aGUgbWFzayBmaWVsZCBvZiBhIEdzdEZsYWdTZXQgQHZhbHVlLgotICoKLSAqIFJldHVybnM6IHRoZSBtYXNrIGZpZWxkIG9mIHRoZSBmbGFnc2V0IGluc3RhbmNlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ3VpbnQKLWdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrIChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WQUxVRV9IT0xEU19GTEFHX1NFVCAodmFsdWUpLCAxKTsKLQotICByZXR1cm4gdmFsdWUtPmRhdGFbMV0udl91aW50OwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFnc2V0IChjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgZ3VpbnQgZmxhZ3MgPSB2YWx1ZS0+ZGF0YVswXS52X3VpbnQ7Ci0gIGd1aW50IG1hc2sgPSB2YWx1ZS0+ZGF0YVsxXS52X3VpbnQ7Ci0gIEdzdEZsYWdTZXRDbGFzcyAqc2V0X2tsYXNzID0KLSAgICAgIChHc3RGbGFnU2V0Q2xhc3MgKikgZ190eXBlX2NsYXNzX3JlZiAoR19WQUxVRV9UWVBFICh2YWx1ZSkpOwotICBnY2hhciAqcmVzdWx0OwotCi0gIHJlc3VsdCA9IGdfc3RyZHVwX3ByaW50ZiAoIiV4OiV4IiwgZmxhZ3MsIG1hc2spOwotCi0gIC8qIElmIHRoaXMgZmxhZyBzZXQgY2xhc3MgaGFzIGFuIGFzc29jaWF0ZWQgR0ZsYWdzIEdUeXBlLCBhbmQgc29tZQotICAgKiBiaXRzIGluIHRoZSBtYXNrLCBzZXJpYWxpemUgdGhlIGJpdHMgaW4gaHVtYW4tcmVhZGFibGUgZm9ybSB0bwotICAgKiBhaWQgZGVidWdnaW5nICovCi0gIGlmIChtYXNrICYmIHNldF9rbGFzcy0+ZmxhZ3NfdHlwZSkgewotICAgIEdGbGFnc0NsYXNzICpmbGFnc19rbGFzcyA9Ci0gICAgICAgIChHRmxhZ3NDbGFzcyAqKSAoZ190eXBlX2NsYXNzX3JlZiAoc2V0X2tsYXNzLT5mbGFnc190eXBlKSk7Ci0gICAgR0ZsYWdzVmFsdWUgKmZsOwotICAgIGdjaGFyICp0bXA7Ci0gICAgZ2Jvb2xlYW4gZmlyc3QgPSBUUlVFOwotCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZsYWdzX2tsYXNzLCBOVUxMKTsKLQotICAgIC8qIHNvbWUgYml0cyBpbiB0aGUgbWFzayBhcmUgc2V0LCBzbyBzZXJpYWxpemUgb25lIGJ5IG9uZSwgYWNjb3JkaW5nCi0gICAgICogdG8gd2hldGhlciB0aGF0IGJpdCBpcyBzZXQgb3IgY2xlYXJlZCBpbiB0aGUgZmxhZ3MgdmFsdWUgKi8KLSAgICB3aGlsZSAobWFzaykgewotICAgICAgZmwgPSBnX2ZsYWdzX2dldF9maXJzdF92YWx1ZSAoZmxhZ3Nfa2xhc3MsIG1hc2spOwotICAgICAgaWYgKGZsID09IE5VTEwpIHsKLSAgICAgICAgLyogTm8gbW9yZSBiaXRzIG1hdGNoIGluIHRoZSBmbGFncyBtYXNrIC0gdGltZSB0byBzdG9wICovCi0gICAgICAgIG1hc2sgPSAwOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgdG1wID0gZ19zdHJjb25jYXQgKHJlc3VsdCwKLSAgICAgICAgICBmaXJzdCA/ICI6IiA6ICIiLAotICAgICAgICAgIChmbGFncyAmIGZsLT52YWx1ZSkgPyAiKyIgOiAiLyIsIGZsLT52YWx1ZV9uaWNrLCBOVUxMKTsKLSAgICAgIGdfZnJlZSAocmVzdWx0KTsKLSAgICAgIHJlc3VsdCA9IHRtcDsKLSAgICAgIGZpcnN0ID0gRkFMU0U7Ci0KLSAgICAgIC8qIGNsZWFyIGZsYWcgKi8KLSAgICAgIG1hc2sgJj0gfmZsLT52YWx1ZTsKLSAgICB9Ci0gICAgZ190eXBlX2NsYXNzX3VucmVmIChmbGFnc19rbGFzcyk7Ci0KLSAgfQotICBnX3R5cGVfY2xhc3NfdW5yZWYgKHNldF9rbGFzcyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmFsdWVfZGVzZXJpYWxpemVfZmxhZ3NldCAoR1ZhbHVlICogZGVzdCwgY29uc3QgZ2NoYXIgKiBzKQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgZ3VpbnQgZmxhZ3MsIG1hc2s7Ci0gIGdjaGFyICpjdXIsICpuZXh0OwotCi0gIGlmIChHX1VOTElLRUxZIChzID09IE5VTEwpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoR19VTkxJS0VMWSAoZGVzdCA9PSBOVUxMIHx8ICFHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQgKGRlc3QpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogRmxhZ3NldCBzdHJpbmdzIGxvb2sgbGlrZSAleDoleCAtIGhleCBmbGFncyA6IGhleCBiaXRtYXNrLAotICAgKiAzMi1iaXQgZWFjaCwgb3IgbGlrZSBhIGNvbmNhdGVuYXRlZCBsaXN0IG9mIGZsYWcgbmlja3MsCi0gICAqIHdpdGggZWl0aGVyICcrJyBvciAnLycgaW4gZnJvbnQuIFRoZSBmaXJzdCBmb3JtCi0gICAqIG1heSBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5ICc6JyBhbmQgYSBzZXQgb2YgdGV4dCBmbGFnIGRlc2NyaXB0aW9ucwotICAgKiBmb3IgZWFzaWVyIGRlYnVnZ2luZyAqLwotCi0gIC8qIFRyeSBhbmQgaW50ZXJwcmV0IGFzIGhleCBmb3JtIGZpcnN0LCBhcyBpdCdzIHRoZSBtb3N0IGVmZmljaWVudCAqLwotICAvKiBSZWFkIHRoZSBmbGFncyBmaXJzdCAqLwotICBmbGFncyA9IHN0cnRvdWwgKHMsICZuZXh0LCAxNik7Ci0gIGlmIChHX1VOTElLRUxZICgoZmxhZ3MgPT0gMCAmJiBlcnJubyA9PSBFSU5WQUwpIHx8IHMgPT0gbmV4dCkpCi0gICAgZ290byB0cnlfYXNfZmxhZ3Nfc3RyaW5nOwotICAvKiBOZXh0IGNoYXIgc2hvdWxkIGJlIGEgY29sb24gKi8KLSAgaWYgKG5leHRbMF0gPT0gJzonKQotICAgIG5leHQrKzsKLQotICAvKiBSZWFkIHRoZSBtYXNrICovCi0gIGN1ciA9IG5leHQ7Ci0gIG1hc2sgPSBzdHJ0b3VsIChjdXIsICZuZXh0LCAxNik7Ci0gIGlmIChHX1VOTElLRUxZICgobWFzayA9PSAwICYmIGVycm5vID09IEVJTlZBTCkgfHwgY3VyID09IG5leHQpKQotICAgIGdvdG8gdHJ5X2FzX2ZsYWdzX3N0cmluZzsKLQotICAvKiBOZXh0IGNoYXIgc2hvdWxkIGJlIE5VTEwgdGVybWluYXRvciwgb3IgYSAnOicgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKG5leHRbMF0gIT0gMCAmJiBuZXh0WzBdICE9ICc6JykpCi0gICAgZ290byB0cnlfYXNfZmxhZ3Nfc3RyaW5nOwotCi0gIHJlcyA9IFRSVUU7Ci0KLXRyeV9hc19mbGFnc19zdHJpbmc6Ci0KLSAgaWYgKCFyZXMpIHsKLSAgICBjb25zdCBnY2hhciAqc2V0X2NsYXNzID0gZ190eXBlX25hbWUgKEdfVkFMVUVfVFlQRSAoZGVzdCkpOwotICAgIEdGbGFnc0NsYXNzICpmbGFnc19rbGFzcyA9IE5VTEw7Ci0gICAgY29uc3QgZ2NoYXIgKmVuZDsKLQotICAgIGlmIChnX3N0cl9lcXVhbCAoc2V0X2NsYXNzLCAiR3N0RmxhZ1NldCIpKQotICAgICAgZ290byBkb25lOyAgICAgICAgICAgICAgICAvKiBUaGVyZSdzIG5vIGhvcGUgdG8gcGFyc2UgYSBnZW5lcmljIGZsYWcgc2V0ICovCi0KLSAgICAvKiBGbGFncyBjbGFzcyBpcyB0aGUgRmxhZ1NldCBjbGFzcyB3aXRoICdTZXQnIHJlbW92ZWQgZnJvbSB0aGUgZW5kICovCi0gICAgZW5kID0gZ19zdHJyc3RyIChzZXRfY2xhc3MsICJTZXQiKTsKLQotICAgIGlmIChlbmQgIT0gTlVMTCkgewotICAgICAgZ2NoYXIgKmNsYXNzX25hbWUgPSBnX3N0cm5kdXAgKHNldF9jbGFzcywgZW5kIC0gc2V0X2NsYXNzKTsKLSAgICAgIEdUeXBlIGZsYWdzX3R5cGUgPSBnX3R5cGVfZnJvbV9uYW1lIChjbGFzc19uYW1lKTsKLQotICAgICAgZ19mcmVlIChjbGFzc19uYW1lKTsKLQotICAgICAgaWYgKGZsYWdzX3R5cGUgIT0gMCkKLSAgICAgICAgZmxhZ3Nfa2xhc3MgPSBnX3R5cGVfY2xhc3NfcmVmIChmbGFnc190eXBlKTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3Nfa2xhc3MpIHsKLSAgICAgIHJlcyA9IGdzdF92YWx1ZV9nZmxhZ3Nfc3RyX3RvX2ZsYWdzIChmbGFnc19rbGFzcywgcywgJmZsYWdzLCAmbWFzayk7Ci0gICAgICBnX3R5cGVfY2xhc3NfdW5yZWYgKGZsYWdzX2tsYXNzKTsKLSAgICB9Ci0gIH0KLQotICBpZiAocmVzKQotICAgIGdzdF92YWx1ZV9zZXRfZmxhZ3NldCAoZGVzdCwgZmxhZ3MsIG1hc2spOwotZG9uZToKLSAgcmV0dXJuIHJlczsKLQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mbGFnc2V0X3N0cmluZyAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAotICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZV9mbGFnc2V0IChzcmNfdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3RyYW5zZm9ybV9zdHJpbmdfZmxhZ3NldCAoY29uc3QgR1ZhbHVlICogc3JjX3ZhbHVlLAotICAgIEdWYWx1ZSAqIGRlc3RfdmFsdWUpCi17Ci0gIGlmICghZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2ZsYWdzZXQgKGRlc3RfdmFsdWUsIHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpKSB7Ci0gICAgLyogSWYgdGhlIGRlc2VyaWFsaXplIGZhaWxzLCBlbnN1cmUgd2UgbGVhdmUgdGhlIGZsYWdzIGluIGEKLSAgICAgKiB2YWxpZCwgaWYgaW5jb3JyZWN0LCBzdGF0ZSAqLwotICAgIGdzdF92YWx1ZV9zZXRfZmxhZ3NldCAoZGVzdF92YWx1ZSwgMCwgMCk7Ci0gIH0KLX0KLQotc3RhdGljIGdpbnQKLWdzdF92YWx1ZV9jb21wYXJlX2ZsYWdzZXQgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlMSwgY29uc3QgR1ZhbHVlICogdmFsdWUyKQotewotICBndWludCB2MSwgdjI7Ci0gIGd1aW50IG0xLCBtMjsKLQotICB2MSA9IHZhbHVlMS0+ZGF0YVswXS52X3VpbnQ7Ci0gIHYyID0gdmFsdWUyLT5kYXRhWzBdLnZfdWludDsKLQotICBtMSA9IHZhbHVlMS0+ZGF0YVsxXS52X3VpbnQ7Ci0gIG0yID0gdmFsdWUyLT5kYXRhWzFdLnZfdWludDsKLQotICBpZiAodjEgPT0gdjIgJiYgbTEgPT0gbTIpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9FUVVBTDsKLQotICByZXR1cm4gR1NUX1ZBTFVFX1VOT1JERVJFRDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqCi0gKiBHc3RBbGxvY2F0aW9uUGFyYW1zICoKLSAqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBnaW50Ci1nc3RfdmFsdWVfY29tcGFyZV9hbGxvY2F0aW9uX3BhcmFtcyAoY29uc3QgR1ZhbHVlICogdmFsdWUxLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyAqdjEsICp2MjsKLQotICB2MSA9IHZhbHVlMS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0gIHYyID0gdmFsdWUyLT5kYXRhWzBdLnZfcG9pbnRlcjsKLQotICBpZiAodjEgPT0gTlVMTCAmJiB2MSA9PSB2MikKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotCi0gIGlmICh2MSA9PSBOVUxMIHx8IHYyID09IE5VTEwpCi0gICAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci0KLSAgaWYgKHYxLT5mbGFncyA9PSB2Mi0+ZmxhZ3MgJiYgdjEtPmFsaWduID09IHYyLT5hbGlnbiAmJgotICAgICAgdjEtPnByZWZpeCA9PSB2Mi0+cHJlZml4ICYmIHYxLT5wYWRkaW5nID09IHYyLT5wYWRkaW5nKQotICAgIHJldHVybiBHU1RfVkFMVUVfRVFVQUw7Ci0KLSAgcmV0dXJuIEdTVF9WQUxVRV9VTk9SREVSRUQ7Ci19Ci0KLQotLyoqKioqKioqKioqKgotICogR09iamVjdCAqCi0gKioqKioqKioqKioqLwotCi1zdGF0aWMgZ2ludAotZ3N0X3ZhbHVlX2NvbXBhcmVfb2JqZWN0IChjb25zdCBHVmFsdWUgKiB2YWx1ZTEsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlMikKLXsKLSAgZ3BvaW50ZXIgdjEsIHYyOwotCi0gIHYxID0gdmFsdWUxLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSAgdjIgPSB2YWx1ZTItPmRhdGFbMF0udl9wb2ludGVyOwotCi0gIGlmICh2MSA9PSB2MikKLSAgICByZXR1cm4gR1NUX1ZBTFVFX0VRVUFMOwotCi0gIHJldHVybiBHU1RfVkFMVUVfVU5PUkRFUkVEOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHVlX3RyYW5zZm9ybV9vYmplY3Rfc3RyaW5nIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsdWUsCi0gICAgR1ZhbHVlICogZGVzdF92YWx1ZSkKLXsKLSAgR3N0T2JqZWN0ICpvYmo7Ci0gIGdjaGFyICpzdHI7Ci0KLSAgb2JqID0gZ192YWx1ZV9nZXRfb2JqZWN0IChzcmNfdmFsdWUpOwotICBpZiAob2JqKSB7Ci0gICAgc3RyID0KLSAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiKCVzKSAlcyIsIEdfT0JKRUNUX1RZUEVfTkFNRSAob2JqKSwKLSAgICAgICAgR1NUX09CSkVDVF9OQU1FIChvYmopKTsKLSAgfSBlbHNlIHsKLSAgICBzdHIgPSBnX3N0cmR1cCAoIk5VTEwiKTsKLSAgfQotCi0gIGRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gc3RyOwotfQotCi1zdGF0aWMgR1R5cGVJbmZvIF9pbmZvID0gewotICAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCAwLCBOVUxMLCBOVUxMLAotfTsKLQotc3RhdGljIEdUeXBlRnVuZGFtZW50YWxJbmZvIF9maW5mbyA9IHsKLSAgMAotfTsKLQotI2RlZmluZSBGVU5DX1ZBTFVFX0dFVF9UWVBFX0NMQVNTRUQodHlwZSwgbmFtZSwgY3NpemUsIGZsYWdzKSAgIFwKLUdUeXBlIF9nc3RfICMjIHR5cGUgIyMgX3R5cGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR1R5cGUgZ3N0XyAjIyB0eXBlICMjIF9nZXRfdHlwZSAodm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyB2b2xhdGlsZSBHVHlwZSBnc3RfICMjIHR5cGUgIyMgX3R5cGUgPSAwOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmZ3N0XyAjIyB0eXBlICMjIF90eXBlKSkgeyAgICAgICAgICAgICBcCi0gICAgR1R5cGUgX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9pbmZvLmNsYXNzX3NpemUgPSBjc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfZmluZm8udHlwZV9mbGFncyA9IGZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX2luZm8udmFsdWVfdGFibGUgPSAmIF9nc3RfICMjIHR5cGUgIyMgX3ZhbHVlX3RhYmxlOyAgICAgICAgXAotICAgIF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX2Z1bmRhbWVudGFsICggICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ190eXBlX2Z1bmRhbWVudGFsX25leHQgKCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG5hbWUsICZfaW5mbywgJl9maW5mbywgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9nc3RfICMjIHR5cGUgIyMgX3R5cGUgPSBfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ3N0XyAjIyB0eXBlICMjIF90eXBlLCBfdHlwZSk7ICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIGdzdF8gIyMgdHlwZSAjIyBfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgRlVOQ19WQUxVRV9HRVRfVFlQRSh0eXBlLCBuYW1lKSBcCi0gIEZVTkNfVkFMVUVfR0VUX1RZUEVfQ0xBU1NFRCh0eXBlLCBuYW1lLCAwLCAwKQotCi1zdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfaW50X3JhbmdlX3ZhbHVlX3RhYmxlID0gewotICBnc3RfdmFsdWVfaW5pdF9pbnRfcmFuZ2UsCi0gIE5VTEwsCi0gIGdzdF92YWx1ZV9jb3B5X2ludF9yYW5nZSwKLSAgTlVMTCwKLSAgKGNoYXIgKikgImlpIiwKLSAgZ3N0X3ZhbHVlX2NvbGxlY3RfaW50X3JhbmdlLCAoY2hhciAqKSAicHAiLCBnc3RfdmFsdWVfbGNvcHlfaW50X3JhbmdlCi19OwotCi1GVU5DX1ZBTFVFX0dFVF9UWVBFIChpbnRfcmFuZ2UsICJHc3RJbnRSYW5nZSIpOwotCi1zdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfaW50NjRfcmFuZ2VfdmFsdWVfdGFibGUgPSB7Ci0gIGdzdF92YWx1ZV9pbml0X2ludDY0X3JhbmdlLAotICBnc3RfdmFsdWVfZnJlZV9pbnQ2NF9yYW5nZSwKLSAgZ3N0X3ZhbHVlX2NvcHlfaW50NjRfcmFuZ2UsCi0gIE5VTEwsCi0gIChjaGFyICopICJxcSIsCi0gIGdzdF92YWx1ZV9jb2xsZWN0X2ludDY0X3JhbmdlLAotICAoY2hhciAqKSAicHAiLCBnc3RfdmFsdWVfbGNvcHlfaW50NjRfcmFuZ2UKLX07Ci0KLUZVTkNfVkFMVUVfR0VUX1RZUEUgKGludDY0X3JhbmdlLCAiR3N0SW50NjRSYW5nZSIpOwotCi1zdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfZG91YmxlX3JhbmdlX3ZhbHVlX3RhYmxlID0gewotICBnc3RfdmFsdWVfaW5pdF9kb3VibGVfcmFuZ2UsCi0gIE5VTEwsCi0gIGdzdF92YWx1ZV9jb3B5X2RvdWJsZV9yYW5nZSwKLSAgTlVMTCwKLSAgKGNoYXIgKikgImRkIiwKLSAgZ3N0X3ZhbHVlX2NvbGxlY3RfZG91YmxlX3JhbmdlLAotICAoY2hhciAqKSAicHAiLCBnc3RfdmFsdWVfbGNvcHlfZG91YmxlX3JhbmdlCi19OwotCi1GVU5DX1ZBTFVFX0dFVF9UWVBFIChkb3VibGVfcmFuZ2UsICJHc3REb3VibGVSYW5nZSIpOwotCi1zdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfZnJhY3Rpb25fcmFuZ2VfdmFsdWVfdGFibGUgPSB7Ci0gIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uX3JhbmdlLAotICBnc3RfdmFsdWVfZnJlZV9mcmFjdGlvbl9yYW5nZSwKLSAgZ3N0X3ZhbHVlX2NvcHlfZnJhY3Rpb25fcmFuZ2UsCi0gIE5VTEwsCi0gIChjaGFyICopICJpaWlpIiwKLSAgZ3N0X3ZhbHVlX2NvbGxlY3RfZnJhY3Rpb25fcmFuZ2UsCi0gIChjaGFyICopICJwcHBwIiwgZ3N0X3ZhbHVlX2xjb3B5X2ZyYWN0aW9uX3JhbmdlCi19OwotCi1GVU5DX1ZBTFVFX0dFVF9UWVBFIChmcmFjdGlvbl9yYW5nZSwgIkdzdEZyYWN0aW9uUmFuZ2UiKTsKLQotc3RhdGljIGNvbnN0IEdUeXBlVmFsdWVUYWJsZSBfZ3N0X3ZhbHVlX2xpc3RfdmFsdWVfdGFibGUgPSB7Ci0gIGdzdF92YWx1ZV9pbml0X2xpc3Rfb3JfYXJyYXksCi0gIGdzdF92YWx1ZV9mcmVlX2xpc3Rfb3JfYXJyYXksCi0gIGdzdF92YWx1ZV9jb3B5X2xpc3Rfb3JfYXJyYXksCi0gIGdzdF92YWx1ZV9saXN0X29yX2FycmF5X3BlZWtfcG9pbnRlciwKLSAgKGNoYXIgKikgInAiLAotICBnc3RfdmFsdWVfY29sbGVjdF9saXN0X29yX2FycmF5LAotICAoY2hhciAqKSAicCIsIGdzdF92YWx1ZV9sY29weV9saXN0X29yX2FycmF5Ci19OwotCi1GVU5DX1ZBTFVFX0dFVF9UWVBFICh2YWx1ZV9saXN0LCAiR3N0VmFsdWVMaXN0Iik7Ci0KLXN0YXRpYyBjb25zdCBHVHlwZVZhbHVlVGFibGUgX2dzdF92YWx1ZV9hcnJheV92YWx1ZV90YWJsZSA9IHsKLSAgZ3N0X3ZhbHVlX2luaXRfbGlzdF9vcl9hcnJheSwKLSAgZ3N0X3ZhbHVlX2ZyZWVfbGlzdF9vcl9hcnJheSwKLSAgZ3N0X3ZhbHVlX2NvcHlfbGlzdF9vcl9hcnJheSwKLSAgZ3N0X3ZhbHVlX2xpc3Rfb3JfYXJyYXlfcGVla19wb2ludGVyLAotICAoY2hhciAqKSAicCIsCi0gIGdzdF92YWx1ZV9jb2xsZWN0X2xpc3Rfb3JfYXJyYXksCi0gIChjaGFyICopICJwIiwgZ3N0X3ZhbHVlX2xjb3B5X2xpc3Rfb3JfYXJyYXkKLX07Ci0KLUZVTkNfVkFMVUVfR0VUX1RZUEUgKHZhbHVlX2FycmF5LCAiR3N0VmFsdWVBcnJheSIpOwotCi1zdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfZnJhY3Rpb25fdmFsdWVfdGFibGUgPSB7Ci0gIGdzdF92YWx1ZV9pbml0X2ZyYWN0aW9uLAotICBOVUxMLAotICBnc3RfdmFsdWVfY29weV9mcmFjdGlvbiwKLSAgTlVMTCwKLSAgKGNoYXIgKikgImlpIiwKLSAgZ3N0X3ZhbHVlX2NvbGxlY3RfZnJhY3Rpb24sIChjaGFyICopICJwcCIsIGdzdF92YWx1ZV9sY29weV9mcmFjdGlvbgotfTsKLQotRlVOQ19WQUxVRV9HRVRfVFlQRSAoZnJhY3Rpb24sICJHc3RGcmFjdGlvbiIpOwotCi1zdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfYml0bWFza192YWx1ZV90YWJsZSA9IHsKLSAgZ3N0X3ZhbHVlX2luaXRfYml0bWFzaywKLSAgTlVMTCwKLSAgZ3N0X3ZhbHVlX2NvcHlfYml0bWFzaywKLSAgTlVMTCwKLSAgKGNoYXIgKikgInEiLAotICBnc3RfdmFsdWVfY29sbGVjdF9iaXRtYXNrLCAoY2hhciAqKSAicCIsIGdzdF92YWx1ZV9sY29weV9iaXRtYXNrCi19OwotCi1GVU5DX1ZBTFVFX0dFVF9UWVBFIChiaXRtYXNrLCAiR3N0Qml0bWFzayIpOwotCi1zdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIF9nc3RfZmxhZ3NldF92YWx1ZV90YWJsZSA9IHsKLSAgZ3N0X3ZhbHVlX2luaXRfZmxhZ3NldCwKLSAgTlVMTCwKLSAgZ3N0X3ZhbHVlX2NvcHlfZmxhZ3NldCwKLSAgTlVMTCwKLSAgKGNoYXIgKikgImlpIiwKLSAgZ3N0X3ZhbHVlX2NvbGxlY3RfZmxhZ3NldCwgKGNoYXIgKikgInBwIiwgZ3N0X3ZhbHVlX2xjb3B5X2ZsYWdzZXQKLX07Ci0KLUZVTkNfVkFMVUVfR0VUX1RZUEVfQ0xBU1NFRCAoZmxhZ3NldCwgIkdzdEZsYWdTZXQiLAotICAgIHNpemVvZiAoR3N0RmxhZ1NldENsYXNzKSwgR19UWVBFX0ZMQUdfQ0xBU1NFRCB8IEdfVFlQRV9GTEFHX0RFUklWQUJMRSk7Ci0KLUdUeXBlCi1nc3RfZ190aHJlYWRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHJldHVybiBHX1RZUEVfVEhSRUFEOwotfQotCi0jZGVmaW5lIFNFUklBTF9WVEFCTEUodCxjLHMsZCkgeyB0LCBjLCBzLCBkIH0KLQotI2RlZmluZSBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTlNUKF9ndHlwZSwgX3R5cGUpICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgY29uc3QgR3N0VmFsdWVUYWJsZSBnc3RfdmFsdWUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFNFUklBTF9WVEFCTEUgKF9ndHlwZSwgZ3N0X3ZhbHVlX2NvbXBhcmVfICMjIF90eXBlLCAgICAgICAgICAgICAgICAgXAotICAgIGdzdF92YWx1ZV9zZXJpYWxpemVfICMjIF90eXBlLCBnc3RfdmFsdWVfZGVzZXJpYWxpemVfICMjIF90eXBlKTsgICAgXAotICBnc3RfdmFsdWVfcmVnaXN0ZXIgKCZnc3RfdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgUkVHSVNURVJfU0VSSUFMSVpBVElPTihfZ3R5cGUsIF90eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc3RhdGljIEdzdFZhbHVlVGFibGUgZ3N0X3ZhbHVlID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTRVJJQUxfVlRBQkxFICgwLCBnc3RfdmFsdWVfY29tcGFyZV8gIyMgX3R5cGUsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnc3RfdmFsdWVfc2VyaWFsaXplXyAjIyBfdHlwZSwgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplXyAjIyBfdHlwZSk7ICAgIFwKLSAgZ3N0X3ZhbHVlLnR5cGUgPSBfZ3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyICgmZ3N0X3ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIFJFR0lTVEVSX1NFUklBTElaQVRJT05fTk9fQ09NUEFSRShfZ3R5cGUsIF90eXBlKSAgICAgICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyBHc3RWYWx1ZVRhYmxlIGdzdF92YWx1ZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgU0VSSUFMX1ZUQUJMRSAoMCwgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ3N0X3ZhbHVlX3NlcmlhbGl6ZV8gIyMgX3R5cGUsIGdzdF92YWx1ZV9kZXNlcmlhbGl6ZV8gIyMgX3R5cGUpOyAgICBcCi0gIGdzdF92YWx1ZS50eXBlID0gX2d0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF92YWx1ZV9yZWdpc3RlciAoJmdzdF92YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTVBBUkVfT05MWShfZ3R5cGUsIF90eXBlKSAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgR3N0VmFsdWVUYWJsZSBnc3RfdmFsdWUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFNFUklBTF9WVEFCTEUgKDAsIGdzdF92YWx1ZV9jb21wYXJlXyAjIyBfdHlwZSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBOVUxMLCBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdmFsdWUudHlwZSA9IF9ndHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdmFsdWVfcmVnaXN0ZXIgKCZnc3RfdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLS8qIFRoZXNlIGluaXRpYWwgc2l6ZXMgYXJlIHVzZWQgZm9yIHRoZSB0YWJsZXMKLSAqIGJlbG93LCBhbmQgc2F2ZSBhIGNvdXBsZSBvZiByZWFsbG9jcyBhdCBzdGFydHVwICovCi1zdGF0aWMgY29uc3QgZ2ludCBHU1RfVkFMVUVfVEFCTEVfREVGQVVMVF9TSVpFID0gMzM7Ci1zdGF0aWMgY29uc3QgZ2ludCBHU1RfVkFMVUVfVU5JT05fVEFCTEVfREVGQVVMVF9TSVpFID0gMzsKLXN0YXRpYyBjb25zdCBnaW50IEdTVF9WQUxVRV9JTlRFUlNFQ1RfVEFCTEVfREVGQVVMVF9TSVpFID0gMTA7Ci1zdGF0aWMgY29uc3QgZ2ludCBHU1RfVkFMVUVfU1VCVFJBQ1RfVEFCTEVfREVGQVVMVF9TSVpFID0gMTI7Ci0KLXZvaWQKLV9wcml2X2dzdF92YWx1ZV9pbml0aWFsaXplICh2b2lkKQotewotICBnc3RfdmFsdWVfdGFibGUgPQotICAgICAgZ19hcnJheV9zaXplZF9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChHc3RWYWx1ZVRhYmxlKSwKLSAgICAgIEdTVF9WQUxVRV9UQUJMRV9ERUZBVUxUX1NJWkUpOwotICBnc3RfdmFsdWVfaGFzaCA9IGdfaGFzaF90YWJsZV9uZXcgKE5VTEwsIE5VTEwpOwotICBnc3RfdmFsdWVfdW5pb25fZnVuY3MgPSBnX2FycmF5X3NpemVkX25ldyAoRkFMU0UsIEZBTFNFLAotICAgICAgc2l6ZW9mIChHc3RWYWx1ZVVuaW9uSW5mbyksIEdTVF9WQUxVRV9VTklPTl9UQUJMRV9ERUZBVUxUX1NJWkUpOwotICBnc3RfdmFsdWVfaW50ZXJzZWN0X2Z1bmNzID0gZ19hcnJheV9zaXplZF9uZXcgKEZBTFNFLCBGQUxTRSwKLSAgICAgIHNpemVvZiAoR3N0VmFsdWVJbnRlcnNlY3RJbmZvKSwgR1NUX1ZBTFVFX0lOVEVSU0VDVF9UQUJMRV9ERUZBVUxUX1NJWkUpOwotICBnc3RfdmFsdWVfc3VidHJhY3RfZnVuY3MgPSBnX2FycmF5X3NpemVkX25ldyAoRkFMU0UsIEZBTFNFLAotICAgICAgc2l6ZW9mIChHc3RWYWx1ZVN1YnRyYWN0SW5mbyksIEdTVF9WQUxVRV9TVUJUUkFDVF9UQUJMRV9ERUZBVUxUX1NJWkUpOwotCi0gIFJFR0lTVEVSX1NFUklBTElaQVRJT04gKGdzdF9pbnRfcmFuZ2VfZ2V0X3R5cGUgKCksIGludF9yYW5nZSk7Ci0gIFJFR0lTVEVSX1NFUklBTElaQVRJT04gKGdzdF9pbnQ2NF9yYW5nZV9nZXRfdHlwZSAoKSwgaW50NjRfcmFuZ2UpOwotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChnc3RfZG91YmxlX3JhbmdlX2dldF90eXBlICgpLCBkb3VibGVfcmFuZ2UpOwotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChnc3RfZnJhY3Rpb25fcmFuZ2VfZ2V0X3R5cGUgKCksIGZyYWN0aW9uX3JhbmdlKTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTiAoZ3N0X3ZhbHVlX2xpc3RfZ2V0X3R5cGUgKCksIHZhbHVlX2xpc3QpOwotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChnc3RfdmFsdWVfYXJyYXlfZ2V0X3R5cGUgKCksIHZhbHVlX2FycmF5KTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTiAoZ3N0X2J1ZmZlcl9nZXRfdHlwZSAoKSwgYnVmZmVyKTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTiAoZ3N0X3NhbXBsZV9nZXRfdHlwZSAoKSwgc2FtcGxlKTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTiAoZ3N0X2ZyYWN0aW9uX2dldF90eXBlICgpLCBmcmFjdGlvbik7Ci0gIFJFR0lTVEVSX1NFUklBTElaQVRJT04gKGdzdF9jYXBzX2dldF90eXBlICgpLCBjYXBzKTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTiAoZ3N0X3RhZ19saXN0X2dldF90eXBlICgpLCB0YWdfbGlzdCk7Ci0gIFJFR0lTVEVSX1NFUklBTElaQVRJT04gKEdfVFlQRV9EQVRFLCBkYXRlKTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTiAoZ3N0X2RhdGVfdGltZV9nZXRfdHlwZSAoKSwgZGF0ZV90aW1lKTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTiAoZ3N0X2JpdG1hc2tfZ2V0X3R5cGUgKCksIGJpdG1hc2spOwotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChnc3Rfc3RydWN0dXJlX2dldF90eXBlICgpLCBzdHJ1Y3R1cmUpOwotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OIChnc3RfZmxhZ3NldF9nZXRfdHlwZSAoKSwgZmxhZ3NldCk7Ci0KLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTl9OT19DT01QQVJFIChnc3Rfc2VnbWVudF9nZXRfdHlwZSAoKSwgc2VnbWVudCk7Ci0gIFJFR0lTVEVSX1NFUklBTElaQVRJT05fTk9fQ09NUEFSRSAoZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3R5cGUgKCksCi0gICAgICBjYXBzX2ZlYXR1cmVzKTsKLQotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTVBBUkVfT05MWSAoZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2dldF90eXBlICgpLAotICAgICAgYWxsb2NhdGlvbl9wYXJhbXMpOwotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTVBBUkVfT05MWSAoR19UWVBFX09CSkVDVCwgb2JqZWN0KTsKLQotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTlNUIChHX1RZUEVfRE9VQkxFLCBkb3VibGUpOwotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTlNUIChHX1RZUEVfRkxPQVQsIGZsb2F0KTsKLQotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTlNUIChHX1RZUEVfU1RSSU5HLCBzdHJpbmcpOwotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTlNUIChHX1RZUEVfQk9PTEVBTiwgYm9vbGVhbik7Ci0gIFJFR0lTVEVSX1NFUklBTElaQVRJT05fQ09OU1QgKEdfVFlQRV9FTlVNLCBlbnVtKTsKLQotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTlNUIChHX1RZUEVfRkxBR1MsIGdmbGFncyk7Ci0KLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTl9DT05TVCAoR19UWVBFX0lOVCwgaW50KTsKLQotICBSRUdJU1RFUl9TRVJJQUxJWkFUSU9OX0NPTlNUIChHX1RZUEVfSU5UNjQsIGludDY0KTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTl9DT05TVCAoR19UWVBFX0xPTkcsIGxvbmcpOwotCi0gIFJFR0lTVEVSX1NFUklBTElaQVRJT05fQ09OU1QgKEdfVFlQRV9VSU5ULCB1aW50KTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTl9DT05TVCAoR19UWVBFX1VJTlQ2NCwgdWludDY0KTsKLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTl9DT05TVCAoR19UWVBFX1VMT05HLCB1bG9uZyk7Ci0KLSAgUkVHSVNURVJfU0VSSUFMSVpBVElPTl9DT05TVCAoR19UWVBFX1VDSEFSLCB1Y2hhcik7Ci0KLSAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR1NUX1RZUEVfSU5UX1JBTkdFLCBHX1RZUEVfU1RSSU5HLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9pbnRfcmFuZ2Vfc3RyaW5nKTsKLSAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR1NUX1RZUEVfSU5UNjRfUkFOR0UsIEdfVFlQRV9TVFJJTkcsCi0gICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2ludDY0X3JhbmdlX3N0cmluZyk7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX0RPVUJMRV9SQU5HRSwgR19UWVBFX1NUUklORywKLSAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fZG91YmxlX3JhbmdlX3N0cmluZyk7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLCBHX1RZUEVfU1RSSU5HLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mcmFjdGlvbl9yYW5nZV9zdHJpbmcpOwotICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHU1RfVFlQRV9MSVNULCBHX1RZUEVfU1RSSU5HLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9saXN0X3N0cmluZyk7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX0FSUkFZLCBHX1RZUEVfU1RSSU5HLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9hcnJheV9zdHJpbmcpOwotICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHU1RfVFlQRV9GUkFDVElPTiwgR19UWVBFX1NUUklORywKLSAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fZnJhY3Rpb25fc3RyaW5nKTsKLSAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR19UWVBFX1NUUklORywgR1NUX1RZUEVfRlJBQ1RJT04sCi0gICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX3N0cmluZ19mcmFjdGlvbik7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OLCBHX1RZUEVfRE9VQkxFLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mcmFjdGlvbl9kb3VibGUpOwotICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHU1RfVFlQRV9GUkFDVElPTiwgR19UWVBFX0ZMT0FULAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mcmFjdGlvbl9mbG9hdCk7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdfVFlQRV9ET1VCTEUsIEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9kb3VibGVfZnJhY3Rpb24pOwotICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHX1RZUEVfRkxPQVQsIEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9mbG9hdF9mcmFjdGlvbik7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdfVFlQRV9EQVRFLCBHX1RZUEVfU1RSSU5HLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9kYXRlX3N0cmluZyk7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9EQVRFLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV9zdHJpbmdfZGF0ZSk7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX09CSkVDVCwgR19UWVBFX1NUUklORywKLSAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fb2JqZWN0X3N0cmluZyk7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdTVF9UWVBFX0JJVE1BU0ssIEdfVFlQRV9VSU5UNjQsCi0gICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX2JpdG1hc2tfdWludDY0KTsKLSAgZ192YWx1ZV9yZWdpc3Rlcl90cmFuc2Zvcm1fZnVuYyAoR1NUX1RZUEVfQklUTUFTSywgR19UWVBFX1NUUklORywKLSAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fYml0bWFza19zdHJpbmcpOwotICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHX1RZUEVfVUlOVDY0LCBHU1RfVFlQRV9CSVRNQVNLLAotICAgICAgZ3N0X3ZhbHVlX3RyYW5zZm9ybV91aW50NjRfYml0bWFzayk7Ci0gIGdfdmFsdWVfcmVnaXN0ZXJfdHJhbnNmb3JtX2Z1bmMgKEdfVFlQRV9TVFJJTkcsIEdTVF9UWVBFX0JJVE1BU0ssCi0gICAgICBnc3RfdmFsdWVfdHJhbnNmb3JtX3N0cmluZ19iaXRtYXNrKTsKLQotICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHU1RfVFlQRV9GTEFHX1NFVCwgR19UWVBFX1NUUklORywKLSAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fZmxhZ3NldF9zdHJpbmcpOwotICBnX3ZhbHVlX3JlZ2lzdGVyX3RyYW5zZm9ybV9mdW5jIChHX1RZUEVfU1RSSU5HLCBHU1RfVFlQRV9GTEFHX1NFVCwKLSAgICAgIGdzdF92YWx1ZV90cmFuc2Zvcm1fc3RyaW5nX2ZsYWdzZXQpOwotCi0gIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoR19UWVBFX0lOVCwgR1NUX1RZUEVfSU5UX1JBTkdFLAotICAgICAgZ3N0X3ZhbHVlX2ludGVyc2VjdF9pbnRfaW50X3JhbmdlKTsKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jIChHU1RfVFlQRV9JTlRfUkFOR0UsIEdTVF9UWVBFX0lOVF9SQU5HRSwKLSAgICAgIGdzdF92YWx1ZV9pbnRlcnNlY3RfaW50X3JhbmdlX2ludF9yYW5nZSk7Ci0gIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoR19UWVBFX0lOVDY0LCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSwKLSAgICAgIGdzdF92YWx1ZV9pbnRlcnNlY3RfaW50NjRfaW50NjRfcmFuZ2UpOwotICBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKEdTVF9UWVBFX0lOVDY0X1JBTkdFLAotICAgICAgR1NUX1RZUEVfSU5UNjRfUkFOR0UsIGdzdF92YWx1ZV9pbnRlcnNlY3RfaW50NjRfcmFuZ2VfaW50NjRfcmFuZ2UpOwotICBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKEdfVFlQRV9ET1VCTEUsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSwKLSAgICAgIGdzdF92YWx1ZV9pbnRlcnNlY3RfZG91YmxlX2RvdWJsZV9yYW5nZSk7Ci0gIGdzdF92YWx1ZV9yZWdpc3Rlcl9pbnRlcnNlY3RfZnVuYyAoR1NUX1RZUEVfRE9VQkxFX1JBTkdFLAotICAgICAgR1NUX1RZUEVfRE9VQkxFX1JBTkdFLCBnc3RfdmFsdWVfaW50ZXJzZWN0X2RvdWJsZV9yYW5nZV9kb3VibGVfcmFuZ2UpOwotICBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKEdTVF9UWVBFX0FSUkFZLCBHU1RfVFlQRV9BUlJBWSwKLSAgICAgIGdzdF92YWx1ZV9pbnRlcnNlY3RfYXJyYXkpOwotICBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIGdzdF92YWx1ZV9pbnRlcnNlY3RfZnJhY3Rpb25fZnJhY3Rpb25fcmFuZ2UpOwotICBnc3RfdmFsdWVfcmVnaXN0ZXJfaW50ZXJzZWN0X2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLAotICAgICAgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsCi0gICAgICBnc3RfdmFsdWVfaW50ZXJzZWN0X2ZyYWN0aW9uX3JhbmdlX2ZyYWN0aW9uX3JhbmdlKTsKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX2ludGVyc2VjdF9mdW5jIChHU1RfVFlQRV9GTEFHX1NFVCwgR1NUX1RZUEVfRkxBR19TRVQsCi0gICAgICBnc3RfdmFsdWVfaW50ZXJzZWN0X2ZsYWdzZXRfZmxhZ3NldCk7Ci0KLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKEdfVFlQRV9JTlQsIEdTVF9UWVBFX0lOVF9SQU5HRSwKLSAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnRfaW50X3JhbmdlKTsKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKEdTVF9UWVBFX0lOVF9SQU5HRSwgR19UWVBFX0lOVCwKLSAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnRfcmFuZ2VfaW50KTsKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKEdTVF9UWVBFX0lOVF9SQU5HRSwgR1NUX1RZUEVfSU5UX1JBTkdFLAotICAgICAgZ3N0X3ZhbHVlX3N1YnRyYWN0X2ludF9yYW5nZV9pbnRfcmFuZ2UpOwotICBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR19UWVBFX0lOVDY0LCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSwKLSAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NF9pbnQ2NF9yYW5nZSk7Ci0gIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHU1RfVFlQRV9JTlQ2NF9SQU5HRSwgR19UWVBFX0lOVDY0LAotICAgICAgZ3N0X3ZhbHVlX3N1YnRyYWN0X2ludDY0X3JhbmdlX2ludDY0KTsKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKEdTVF9UWVBFX0lOVDY0X1JBTkdFLAotICAgICAgR1NUX1RZUEVfSU5UNjRfUkFOR0UsIGdzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NF9yYW5nZV9pbnQ2NF9yYW5nZSk7Ci0gIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHX1RZUEVfRE9VQkxFLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UsCi0gICAgICBnc3RfdmFsdWVfc3VidHJhY3RfZG91YmxlX2RvdWJsZV9yYW5nZSk7Ci0gIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHU1RfVFlQRV9ET1VCTEVfUkFOR0UsIEdfVFlQRV9ET1VCTEUsCi0gICAgICBnc3RfdmFsdWVfc3VidHJhY3RfZG91YmxlX3JhbmdlX2RvdWJsZSk7Ci0gIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHU1RfVFlQRV9ET1VCTEVfUkFOR0UsCi0gICAgICBHU1RfVFlQRV9ET1VCTEVfUkFOR0UsIGdzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGVfcmFuZ2VfZG91YmxlX3JhbmdlKTsKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3N1YnRyYWN0X2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIGdzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9mcmFjdGlvbl9yYW5nZSk7Ci0gIGdzdF92YWx1ZV9yZWdpc3Rlcl9zdWJ0cmFjdF9mdW5jIChHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwKLSAgICAgIEdTVF9UWVBFX0ZSQUNUSU9OLCBnc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2VfZnJhY3Rpb24pOwotICBnc3RfdmFsdWVfcmVnaXN0ZXJfc3VidHJhY3RfZnVuYyAoR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsCi0gICAgICBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwKLSAgICAgIGdzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9yYW5nZV9mcmFjdGlvbl9yYW5nZSk7Ci0KLSAgLyogc2VlIGJ1ZyAjMzE3MjQ2LCAjNjQ5OTQsICM2NTA0MSAqLwotICB7Ci0gICAgdm9sYXRpbGUgR1R5cGUgZGF0ZV90eXBlID0gR19UWVBFX0RBVEU7Ci0KLSAgICBnX3R5cGVfbmFtZSAoZGF0ZV90eXBlKTsKLSAgfQotCi0gIGdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jIChHX1RZUEVfSU5ULCBHU1RfVFlQRV9JTlRfUkFOR0UsCi0gICAgICBnc3RfdmFsdWVfdW5pb25faW50X2ludF9yYW5nZSk7Ci0gIGdzdF92YWx1ZV9yZWdpc3Rlcl91bmlvbl9mdW5jIChHU1RfVFlQRV9JTlRfUkFOR0UsIEdTVF9UWVBFX0lOVF9SQU5HRSwKLSAgICAgIGdzdF92YWx1ZV91bmlvbl9pbnRfcmFuZ2VfaW50X3JhbmdlKTsKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmMgKEdTVF9UWVBFX0ZMQUdfU0VULCBHU1RfVFlQRV9GTEFHX1NFVCwKLSAgICAgIGdzdF92YWx1ZV91bmlvbl9mbGFnc2V0X2ZsYWdzZXQpOwotCi0jaWYgR1NUX1ZFUlNJT05fTkFOTyA9PSAxCi0gIC8qIElmIGJ1aWxkaW5nIGZyb20gZ2l0IG1hc3RlciwgY2hlY2sgc3RhcnRpbmcgYXJyYXkgc2l6ZXMgbWF0Y2hlZCBhY3R1YWwgc2l6ZQotICAgKiBzbyB3ZSBjYW4ga2VlcCB0aGUgZGVmaW5lcyBpbiBzeW5jIGFuZCBzYXZlIGEgZmV3IHJlYWxsb2NzIG9uIHN0YXJ0dXAgKi8KLSAgaWYgKGdzdF92YWx1ZV90YWJsZS0+bGVuICE9IEdTVF9WQUxVRV9UQUJMRV9ERUZBVUxUX1NJWkUpIHsKLSAgICBHU1RfRVJST1IgKCJXcm9uZyBpbml0aWFsIGdzdF92YWx1ZV90YWJsZSBzaXplLiAiCi0gICAgICAgICJQbGVhc2Ugc2V0IEdTVF9WQUxVRV9UQUJMRV9ERUZBVUxUX1NJWkUgdG8gJXUgaW4gZ3N0dmFsdWUuYyIsCi0gICAgICAgIGdzdF92YWx1ZV90YWJsZS0+bGVuKTsKLSAgfQotICBpZiAoZ3N0X3ZhbHVlX3VuaW9uX2Z1bmNzLT5sZW4gIT0gR1NUX1ZBTFVFX1VOSU9OX1RBQkxFX0RFRkFVTFRfU0laRSkgewotICAgIEdTVF9FUlJPUiAoIldyb25nIGluaXRpYWwgZ3N0X3ZhbHVlX3VuaW9uX2Z1bmNzIHRhYmxlIHNpemUuICIKLSAgICAgICAgIlBsZWFzZSBzZXQgR1NUX1ZBTFVFX1VOSU9OX1RBQkxFX0RFRkFVTFRfU0laRSB0byAldSBpbiBnc3R2YWx1ZS5jIiwKLSAgICAgICAgZ3N0X3ZhbHVlX3VuaW9uX2Z1bmNzLT5sZW4pOwotICB9Ci0gIGlmIChnc3RfdmFsdWVfaW50ZXJzZWN0X2Z1bmNzLT5sZW4gIT0gR1NUX1ZBTFVFX0lOVEVSU0VDVF9UQUJMRV9ERUZBVUxUX1NJWkUpIHsKLSAgICBHU1RfRVJST1IgKCJXcm9uZyBpbml0aWFsIGdzdF92YWx1ZV9pbnRlcnNlY3RfZnVuY3MgdGFibGUgc2l6ZS4gIgotICAgICAgICAiUGxlYXNlIHNldCBHU1RfVkFMVUVfSU5URVJTRUNUX1RBQkxFX0RFRkFVTFRfU0laRSB0byAldSBpbiBnc3R2YWx1ZS5jIiwKLSAgICAgICAgZ3N0X3ZhbHVlX2ludGVyc2VjdF9mdW5jcy0+bGVuKTsKLSAgfQotICBpZiAoZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLT5sZW4gIT0gR1NUX1ZBTFVFX1NVQlRSQUNUX1RBQkxFX0RFRkFVTFRfU0laRSkgewotICAgIEdTVF9FUlJPUiAoIldyb25nIGluaXRpYWwgZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzIHRhYmxlIHNpemUuICIKLSAgICAgICAgIlBsZWFzZSBzZXQgR1NUX1ZBTFVFX1NVQlRSQUNUX1RBQkxFX0RFRkFVTFRfU0laRSB0byAldSBpbiBnc3R2YWx1ZS5jIiwKLSAgICAgICAgZ3N0X3ZhbHVlX3N1YnRyYWN0X2Z1bmNzLT5sZW4pOwotICB9Ci0jZW5kaWYKLQotI2lmIDAKLSAgLyogSW1wbGVtZW50IHRoZXNlIGlmIG5lZWRlZCAqLwotICBnc3RfdmFsdWVfcmVnaXN0ZXJfdW5pb25fZnVuYyAoR1NUX1RZUEVfRlJBQ1RJT04sIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLAotICAgICAgZ3N0X3ZhbHVlX3VuaW9uX2ZyYWN0aW9uX2ZyYWN0aW9uX3JhbmdlKTsKLSAgZ3N0X3ZhbHVlX3JlZ2lzdGVyX3VuaW9uX2Z1bmMgKEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLAotICAgICAgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIGdzdF92YWx1ZV91bmlvbl9mcmFjdGlvbl9yYW5nZV9mcmFjdGlvbl9yYW5nZSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbGFnc2V0X2NsYXNzX2luaXQgKGdwb2ludGVyIGdfY2xhc3MsIGdwb2ludGVyIGNsYXNzX2RhdGEpCi17Ci0gIEdzdEZsYWdTZXRDbGFzcyAqZl9jbGFzcyA9IChHc3RGbGFnU2V0Q2xhc3MgKikgKGdfY2xhc3MpOwotICBmX2NsYXNzLT5mbGFnc190eXBlID0gKEdUeXBlKSBHUE9JTlRFUl9UT19TSVpFIChjbGFzc19kYXRhKTsKLX0KLQotLyoqCi0gKiBnc3RfZmxhZ3NldF9yZWdpc3RlcjoKLSAqIEBmbGFnc190eXBlOiBhICNHVHlwZSBvZiBhICNHX1RZUEVfRkxBR1MgdHlwZS4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgc3ViLWNsYXNzIG9mICNHU1RfVFlQRV9GTEFHX1NFVAotICogd2hpY2ggd2lsbCBwcmV0dHktcHJpbnQgdGhlIGh1bWFuLXJlYWRhYmxlIGZsYWdzCi0gKiB3aGVuIHNlcmlhbGl6aW5nLCBmb3IgZWFzaWVyIGRlYnVnZ2luZy4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdUeXBlCi1nc3RfZmxhZ3NldF9yZWdpc3RlciAoR1R5cGUgZmxhZ3NfdHlwZSkKLXsKLSAgR1R5cGVJbmZvIGluZm8gPSB7Ci0gICAgc2l6ZW9mIChHc3RGbGFnU2V0Q2xhc3MpLAotICAgIE5VTEwsIE5VTEwsCi0gICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfZmxhZ3NldF9jbGFzc19pbml0LAotICAgIE5VTEwsIEdTSVpFX1RPX1BPSU5URVIgKGZsYWdzX3R5cGUpLCAwLCAwLCBOVUxMLCBOVUxMCi0gIH07Ci0gIEdUeXBlIHQ7Ci0gIGdjaGFyICpjbGFzc19uYW1lOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1RZUEVfSVNfRkxBR1MgKGZsYWdzX3R5cGUpLCAwKTsKLQotICBjbGFzc19uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXNTZXQiLCBnX3R5cGVfbmFtZSAoZmxhZ3NfdHlwZSkpOwotCi0gIHQgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9GTEFHX1NFVCwKLSAgICAgIGdfaW50ZXJuX3N0cmluZyAoY2xhc3NfbmFtZSksICZpbmZvLCAwKTsKLSAgZ19mcmVlIChjbGFzc19uYW1lKTsKLQotICByZXR1cm4gdDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nc3R2YWx1ZS5oIGIvZ3N0L2dzdHZhbHVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NWQ1ZjguLjAwMDAwMDAKLS0tIGEvZ3N0L2dzdHZhbHVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1ZBTFVFX0hfXwotI2RlZmluZSBfX0dTVF9WQUxVRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2Fwcy5oPgotI2luY2x1ZGUgPGdzdC9nc3RzdHJ1Y3R1cmUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotLyoqCi0gKiBHU1RfTUFLRV9GT1VSQ0M6Ci0gKiBAYTogdGhlIGZpcnN0IGNoYXJhY3RlcgotICogQGI6IHRoZSBzZWNvbmQgY2hhcmFjdGVyCi0gKiBAYzogdGhlIHRoaXJkIGNoYXJhY3RlcgotICogQGQ6IHRoZSBmb3VydGggY2hhcmFjdGVyCi0gKgotICogVHJhbnNmb3JtIGZvdXIgY2hhcmFjdGVycyBpbnRvIGEgI2d1aW50MzIgZm91cmNjIHZhbHVlIHdpdGggaG9zdAotICogZW5kaWFubmVzcy4KLSAqIDxpbmZvcm1hbGV4YW1wbGU+Ci0gKiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gKiBndWludDMyIGZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ00nLCAnSicsICdQJywgJ0cnKTsKLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L2luZm9ybWFsZXhhbXBsZT4KLSAqLwotI2RlZmluZSBHU1RfTUFLRV9GT1VSQ0MoYSxiLGMsZCkgICAgICAgICgoZ3VpbnQzMikoKGEpfChiKTw8OHwoYyk8PDE2fChkKTw8MjQpKQotCi0vKioKLSAqIEdTVF9TVFJfRk9VUkNDOgotICogQGY6IGEgc3RyaW5nIHdpdGggYXQgbGVhc3QgZm91ciBjaGFyYWN0ZXJzCi0gKgotICogVHJhbnNmb3JtIGFuIGlucHV0IHN0cmluZyBpbnRvIGEgI2d1aW50MzIgZm91cmNjIHZhbHVlIHdpdGggaG9zdAotICogZW5kaWFubmVzcy4KLSAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhlIGlucHV0IHN0cmluZyBjb25zaXN0cyBvZiBhdCBsZWFzdAotICogZm91ciBjaGFyYWN0ZXJzLgotICogPGluZm9ybWFsZXhhbXBsZT4KLSAqIDxwcm9ncmFtbGlzdGluZz4KLSAqIGd1aW50MzIgZm91cmNjID0gR1NUX1NUUl9GT1VSQ0MgKCJNSlBHIik7Ci0gKiA8L3Byb2dyYW1saXN0aW5nPgotICogPC9pbmZvcm1hbGV4YW1wbGU+Ci0gKi8KLSNkZWZpbmUgR1NUX1NUUl9GT1VSQ0MoZikgICAgICAgICAgICAgICAoKGd1aW50MzIpKCgoZilbMF0pfCgoZilbMV08PDgpfCgoZilbMl08PDE2KXwoKGYpWzNdPDwyNCkpKQotCi0vKioKLSAqIEdTVF9GT1VSQ0NfRk9STUFUOgotICoKLSAqIENhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggI0dTVF9GT1VSQ0NfQVJHUyB0byBwcm9wZXJseSBvdXRwdXQgYQotICogI2d1aW50MzIgZm91cmNjIHZhbHVlIGluIGEgcHJpbnRmKCktc3R5bGUgdGV4dCBtZXNzYWdlLgotICogPGluZm9ybWFsZXhhbXBsZT4KLSAqIDxwcm9ncmFtbGlzdGluZz4KLSAqIHByaW50ZiAoImZvdXJjYzogJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIlxuIiwgR1NUX0ZPVVJDQ19BUkdTIChmY2MpKTsKLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L2luZm9ybWFsZXhhbXBsZT4KLSAqLwotI2RlZmluZSBHU1RfRk9VUkNDX0ZPUk1BVCAiYyVjJWMlYyIKLQotLyoqCi0gKiBHU1RfRk9VUkNDX0FSR1M6Ci0gKiBAZm91cmNjOiBhICNndWludDMyIGZvdXJjYyB2YWx1ZSB0byBvdXRwdXQKLSAqCi0gKiBDYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoICNHU1RfRk9VUkNDX0ZPUk1BVCB0byBwcm9wZXJseSBvdXRwdXQgYQotICogI2d1aW50MzIgZm91cmNjIHZhbHVlIGluIGEgcHJpbnRmKCktc3R5bGUgdGV4dCBtZXNzYWdlLgotICovCi0KLSNkZWZpbmUgX19HU1RfUFJJTlRfQ0hBUihjKSBcCi0gIGdfYXNjaWlfaXNwcmludChjKSA/IChjKSA6ICcuJwotI2RlZmluZSBHU1RfRk9VUkNDX0FSR1MoZm91cmNjKSAgICAgICAgICAgICAgIFwKLSAgX19HU1RfUFJJTlRfQ0hBUigoZm91cmNjKSAmIDB4ZmYpLCAgICAgICAgICBcCi0gIF9fR1NUX1BSSU5UX0NIQVIoKChmb3VyY2MpID4+IDgpICYgMHhmZiksICAgXAotICBfX0dTVF9QUklOVF9DSEFSKCgoZm91cmNjKSA+PiAxNikgJiAweGZmKSwgIFwKLSAgX19HU1RfUFJJTlRfQ0hBUigoKGZvdXJjYykgPj4gMjQpICYgMHhmZikKLS8qKgotICogR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRToKLSAqIEB4OiB0aGUgI0dWYWx1ZSB0byBjaGVjawotICoKLSAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gI0dWYWx1ZSBjb250YWlucyBhICNHU1RfVFlQRV9JTlRfUkFOR0UgdmFsdWUuCi0gKi8KLSNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSh4KSAgICAgICgoeCkgIT0gTlVMTCAmJiBHX1ZBTFVFX1RZUEUoeCkgPT0gX2dzdF9pbnRfcmFuZ2VfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0U6Ci0gKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfSU5UNjRfUkFOR0UgdmFsdWUuCi0gKi8KLSNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFKHgpICAgICgoeCkgIT0gTlVMTCAmJiBHX1ZBTFVFX1RZUEUoeCkgPT0gX2dzdF9pbnQ2NF9yYW5nZV90eXBlKQotCi0vKioKLSAqIEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0U6Ci0gKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfRE9VQkxFX1JBTkdFIHZhbHVlLgotICovCi0jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UoeCkgICAoKHgpICE9IE5VTEwgJiYgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfZG91YmxlX3JhbmdlX3R5cGUpCi0KLS8qKgotICogR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFOgotICogQHg6IHRoZSAjR1ZhbHVlIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIHRoZSBnaXZlbiAjR1ZhbHVlIGNvbnRhaW5zIGEgI0dTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFIHZhbHVlLgotICovCi0jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTl9SQU5HRSh4KSAoKHgpICE9IE5VTEwgJiYgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfZnJhY3Rpb25fcmFuZ2VfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfTElTVDoKLSAqIEB4OiB0aGUgI0dWYWx1ZSB0byBjaGVjawotICoKLSAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gI0dWYWx1ZSBjb250YWlucyBhICNHU1RfVFlQRV9MSVNUIHZhbHVlLgotICovCi0jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19MSVNUKHgpICAgICAgICAgKCh4KSAhPSBOVUxMICYmIEdfVkFMVUVfVFlQRSh4KSA9PSBfZ3N0X3ZhbHVlX2xpc3RfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfQVJSQVk6Ci0gKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfQVJSQVkgdmFsdWUuCi0gKi8KLSNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0FSUkFZKHgpICAgICAgICAoKHgpICE9IE5VTEwgJiYgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfdmFsdWVfYXJyYXlfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfQ0FQUzoKLSAqIEB4OiB0aGUgI0dWYWx1ZSB0byBjaGVjawotICoKLSAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gI0dWYWx1ZSBjb250YWlucyBhICNHU1RfVFlQRV9DQVBTIHZhbHVlLgotICovCi0jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19DQVBTKHgpICAgICAgICAgKCh4KSAhPSBOVUxMICYmIEdfVkFMVUVfVFlQRSh4KSA9PSBfZ3N0X2NhcHNfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFOgotICogQHg6IHRoZSAjR1ZhbHVlIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIHRoZSBnaXZlbiAjR1ZhbHVlIGNvbnRhaW5zIGEgI0dTVF9UWVBFX1NUUlVDVFVSRSB2YWx1ZS4KLSAqLwotI2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFKHgpICAgICAgICAgICAgKEdfVkFMVUVfSE9MRFMoKHgpLCBfZ3N0X3N0cnVjdHVyZV90eXBlKSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfQ0FQU19GRUFUVVJFUzoKLSAqIEB4OiB0aGUgI0dWYWx1ZSB0byBjaGVjawotICoKLSAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gI0dWYWx1ZSBjb250YWlucyBhICNHU1RfVFlQRV9DQVBTX0ZFQVRVUkVTIHZhbHVlLgotICovCi0jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19DQVBTX0ZFQVRVUkVTKHgpICAgICAgICAoR19WQUxVRV9IT0xEUygoeCksIF9nc3RfY2Fwc19mZWF0dXJlc190eXBlKSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfQlVGRkVSOgotICogQHg6IHRoZSAjR1ZhbHVlIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIHRoZSBnaXZlbiAjR1ZhbHVlIGNvbnRhaW5zIGEgI0dTVF9UWVBFX0JVRkZFUiB2YWx1ZS4KLSAqLwotI2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfQlVGRkVSKHgpICAgICAgICgoeCkgIT0gTlVMTCAmJiBHX1ZBTFVFX1RZUEUoeCkgPT0gX2dzdF9idWZmZXJfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfU0FNUExFOgotICogQHg6IHRoZSAjR1ZhbHVlIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIHRoZSBnaXZlbiAjR1ZhbHVlIGNvbnRhaW5zIGEgI0dTVF9UWVBFX1NBTVBMRSB2YWx1ZS4KLSAqLwotI2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfU0FNUExFKHgpICAgICAgICgoeCkgIT0gTlVMTCAmJiBHX1ZBTFVFX1RZUEUoeCkgPT0gX2dzdF9zYW1wbGVfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT046Ci0gKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfRlJBQ1RJT04gdmFsdWUuCi0gKi8KLSNkZWZpbmUgR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OKHgpICAgICAoKHgpICE9IE5VTEwgJiYgR19WQUxVRV9UWVBFKHgpID09IF9nc3RfZnJhY3Rpb25fdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FOgotICogQHg6IHRoZSAjR1ZhbHVlIHRvIGNoZWNrCi0gKgotICogQ2hlY2tzIGlmIHRoZSBnaXZlbiAjR1ZhbHVlIGNvbnRhaW5zIGEgI0dTVF9UWVBFX0RBVEVfVElNRSB2YWx1ZS4KLSAqLwotI2RlZmluZSBHU1RfVkFMVUVfSE9MRFNfREFURV9USU1FKHgpICAgICgoeCkgIT0gTlVMTCAmJiBHX1ZBTFVFX1RZUEUoeCkgPT0gX2dzdF9kYXRlX3RpbWVfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfQklUTUFTSzoKLSAqIEB4OiB0aGUgI0dWYWx1ZSB0byBjaGVjawotICoKLSAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gI0dWYWx1ZSBjb250YWlucyBhICNHU1RfVFlQRV9CSVRNQVNLIHZhbHVlLgotICovCi0jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19CSVRNQVNLKHgpICAgICAgKCh4KSAhPSBOVUxMICYmIEdfVkFMVUVfVFlQRSh4KSA9PSBfZ3N0X2JpdG1hc2tfdHlwZSkKLQotLyoqCi0gKiBHU1RfVkFMVUVfSE9MRFNfRkxBR19TRVQ6Ci0gKiBAeDogdGhlICNHVmFsdWUgdG8gY2hlY2sKLSAqCi0gKiBDaGVja3MgaWYgdGhlIGdpdmVuICNHVmFsdWUgY29udGFpbnMgYSAjR1NUX1RZUEVfRkxBR19TRVQgdmFsdWUuCi0gKgotICogU2luY2U6IDEuNgotICovCi0jZGVmaW5lIEdTVF9WQUxVRV9IT0xEU19GTEFHX1NFVCh4KSAgICAgKEdfVFlQRV9DSEVDS19WQUxVRV9UWVBFICgoeCksIEdTVF9UWVBFX0ZMQUdfU0VUKSkKLQotLyoKLSAqIEdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUOgotICogQSBtYXNrIHZhbHVlIHdpdGggYWxsIGJpdHMgc2V0LCBmb3IgdXNlIGFzIGEKLSAqICNHc3RGbGFnU2V0IG1hc2sgd2hlcmUgYWxsIGZsYWcgYml0cyBtdXN0IG1hdGNoCi0gKiBleGFjdGx5Ci0gKgotICogU2luY2U6IDEuNgotICovCi0jZGVmaW5lIEdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUICgoZ3VpbnQpKC0xKSkKLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X2ludF9yYW5nZV90eXBlOwotCi0vKioKLSAqIEdTVF9UWVBFX0lOVF9SQU5HRToKLSAqCi0gKiBhICNHVmFsdWUgdHlwZSB0aGF0IHJlcHJlc2VudHMgYW4gaW50ZWdlciByYW5nZQotICoKLSAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgR3N0SW50UmFuZ2UKLSAqLwotI2RlZmluZSBHU1RfVFlQRV9JTlRfUkFOR0UgICAgICAgICAgICAgICAoX2dzdF9pbnRfcmFuZ2VfdHlwZSkKLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X2ludDY0X3JhbmdlX3R5cGU7Ci0KLS8qKgotICogR1NUX1RZUEVfSU5UNjRfUkFOR0U6Ci0gKgotICogYSAjR1ZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGFuICNnaW50NjQgcmFuZ2UKLSAqCi0gKiBSZXR1cm5zOiB0aGUgI0dUeXBlIG9mIEdzdEludDY0UmFuZ2UKLSAqLwotI2RlZmluZSBHU1RfVFlQRV9JTlQ2NF9SQU5HRSAgICAgICAgICAgICAoX2dzdF9pbnQ2NF9yYW5nZV90eXBlKQotCi1HU1RfRVhQT1JUIEdUeXBlIF9nc3RfZG91YmxlX3JhbmdlX3R5cGU7Ci0KLS8qKgotICogR1NUX1RZUEVfRE9VQkxFX1JBTkdFOgotICoKLSAqIGEgI0dWYWx1ZSB0eXBlIHRoYXQgcmVwcmVzZW50cyBhIGZsb2F0aW5nIHBvaW50IHJhbmdlIHdpdGggZG91YmxlIHByZWNpc2lvbgotICoKLSAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgR3N0SW50UmFuZ2UKLSAqLwotI2RlZmluZSBHU1RfVFlQRV9ET1VCTEVfUkFOR0UgICAgICAgICAgICAoX2dzdF9kb3VibGVfcmFuZ2VfdHlwZSkKLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X2ZyYWN0aW9uX3JhbmdlX3R5cGU7Ci0KLS8qKgotICogR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0U6Ci0gKgotICogYSAjR1ZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGEgR3N0RnJhY3Rpb24gcmFuZ2UKLSAqCi0gKiBSZXR1cm5zOiB0aGUgI0dUeXBlIG9mIEdzdEZyYWN0aW9uUmFuZ2UKLSAqLwotI2RlZmluZSBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSAgICAgICAgICAgKF9nc3RfZnJhY3Rpb25fcmFuZ2VfdHlwZSkKLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X3ZhbHVlX2xpc3RfdHlwZTsKLQotLyoqCi0gKiBHU1RfVFlQRV9MSVNUOgotICoKLSAqIGEgI0dWYWx1ZSB0eXBlIHRoYXQgcmVwcmVzZW50cyBhbiB1bm9yZGVyZWQgbGlzdCBvZiAjR1ZhbHVlIHZhbHVlcy4gVGhpcwotICogaXMgdXNlZCBmb3IgZXhhbXBsZSB0byBleHByZXNzIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgZmllbGQgaW4KLSAqIGEgY2FwcyBzdHJ1Y3R1cmUsIGxpa2UgYSBsaXN0IG9mIHBvc3NpYmxlIHNhbXBsZSByYXRlcywgb2Ygd2hpY2ggb25seSBvbmUKLSAqIHdpbGwgYmUgY2hvc2VuIGluIHRoZSBlbmQuIFRoaXMgbWVhbnMgdGhhdCBhbGwgdmFsdWVzIGluIHRoZSBsaXN0IGFyZQotICogbWVhbmluZ2Z1bCBvbiB0aGVpciBvd24uCi0gKgotICogUmV0dXJuczogdGhlICNHVHlwZSBvZiBHc3RWYWx1ZUxpc3QgKHdoaWNoIGlzIG5vdCBleHBsaWNpdGx5IHR5cGVkKQotICovCi0jZGVmaW5lIEdTVF9UWVBFX0xJU1QgICAgICAgICAgICAgICAgICAgIChfZ3N0X3ZhbHVlX2xpc3RfdHlwZSkKLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X3ZhbHVlX2FycmF5X3R5cGU7Ci0KLS8qKgotICogR1NUX1RZUEVfQVJSQVk6Ci0gKgotICogYSAjR1ZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGFuIG9yZGVyZWQgbGlzdCBvZiAjR1ZhbHVlIHZhbHVlcy4gVGhpcyBpcwotICogdXNlZCB0byBleHByZXNzIGEgc2V0IG9mIHZhbHVlcyB0aGF0IGlzIG1lYW5pbmdmdWwgb25seSBpbiB0aGVpciBzcGVjaWZpYwotICogY29tYmluYXRpb24gYW5kIG9yZGVyIG9mIHZhbHVlcy4gRWFjaCB2YWx1ZSBvbiBpdHMgb3duIGlzIG5vdCBwYXJ0aWN1bGFybHkKLSAqIG1lYW5pbmdmdWwsIG9ubHkgdGhlIG9yZGVyZWQgYXJyYXkgaW4gaXRzIGVudGlyZXR5IGlzIG1lYW5pbmdmdWwuIFRoaXMgaXMKLSAqIHVzZWQgZm9yIGV4YW1wbGUgdG8gZXhwcmVzcyBjaGFubmVsIGxheW91dHMgZm9yIG11bHRpY2hhbm5lbCBhdWRpbyB3aGVyZQotICogZWFjaCBjaGFubmVsIG5lZWRzIHRvIGJlIG1hcHBlZCB0byBhIHBvc2l0aW9uIGluIHRoZSByb29tLgotICoKLSAqIFJldHVybnM6IHRoZSAjR1R5cGUgb2YgR3N0QXJyYXlMaXN0ICh3aGljaCBpcyBub3QgZXhwbGljaXRseSB0eXBlZCkKLSAqLwotI2RlZmluZSBHU1RfVFlQRV9BUlJBWSAgICAgICAgICAgICAgICAgICAoX2dzdF92YWx1ZV9hcnJheV90eXBlKQotCi1HU1RfRVhQT1JUIEdUeXBlIF9nc3RfZnJhY3Rpb25fdHlwZTsKLQotLyoqCi0gKiBHU1RfVFlQRV9GUkFDVElPTjoKLSAqCi0gKiBhICNHVmFsdWUgdHlwZSB0aGF0IHJlcHJlc2VudHMgYSBmcmFjdGlvbiBvZiBhbiBpbnRlZ2VyIG51bWVyYXRvciBvdmVyCi0gKiBhbiBpbnRlZ2VyIGRlbm9taW5hdG9yCi0gKgotICogUmV0dXJuczogdGhlICNHVHlwZSBvZiBHc3RGcmFjdGlvbiAod2hpY2ggaXMgbm90IGV4cGxpY2l0bHkgdHlwZWQpCi0gKi8KLQotI2RlZmluZSBHU1RfVFlQRV9GUkFDVElPTiAgICAgICAgICAgICAgICAoX2dzdF9mcmFjdGlvbl90eXBlKQotCi1HU1RfRVhQT1JUIEdUeXBlIF9nc3RfYml0bWFza190eXBlOwotCi0vKioKLSAqIEdTVF9UWVBFX0JJVE1BU0s6Ci0gKgotICogYSAjR1ZhbHVlIHR5cGUgdGhhdCByZXByZXNlbnRzIGEgNjQtYml0IGJpdG1hc2suCi0gKgotICogUmV0dXJuczogdGhlICNHVHlwZSBvZiBHc3RCaXRtYXNrICh3aGljaCBpcyBub3QgZXhwbGljaXRseSB0eXBlZCkKLSAqLwotCi0jZGVmaW5lIEdTVF9UWVBFX0JJVE1BU0sgICAgICAgICAgICAgICAgIChfZ3N0X2JpdG1hc2tfdHlwZSkKLQotR1NUX0VYUE9SVCBHVHlwZSBfZ3N0X2ZsYWdzZXRfdHlwZTsKLQotLyoqCi0gKiBHU1RfVFlQRV9GTEFHX1NFVDoKLSAqCi0gKiBhICNHVmFsdWUgdHlwZSB0aGF0IHJlcHJlc2VudHMgYSAzMi1iaXQgZmxhZyBiaXRmaWVsZCwgd2l0aCAzMi1iaXQKLSAqIG1hc2sgaW5kaWNhdGluZyB3aGljaCBvZiB0aGUgYml0cyBpbiB0aGUgZmllbGQgYXJlIGV4cGxpY2l0bHkgc2V0LgotICogVXNlZnVsIGZvciBuZWdvdGlhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgI0dUeXBlIG9mIEdzdEZsYWdzICh3aGljaCBpcyBub3QgZXhwbGljaXRseSB0eXBlZCkKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLSNkZWZpbmUgR1NUX1RZUEVfRkxBR19TRVQgICAgICAgICAgICAgICAgICAgKF9nc3RfZmxhZ3NldF90eXBlKQotCi0vKioKLSAqIEdTVF9UWVBFX0dfVEhSRUFEOgotICoKLSAqIGEgYm94ZWQgI0dWYWx1ZSB0eXBlIGZvciAjR1RocmVhZCB0aGF0IHJlcHJlc2VudHMgYSB0aHJlYWQuCi0gKgotICogUmV0dXJuczogdGhlICNHVHlwZSBvZiBHc3RHVGhyZWFkCi0gKi8KLQotI2RlZmluZSBHU1RfVFlQRV9HX1RIUkVBRCAgICAgICAgICAgICAgICBnc3RfZ190aHJlYWRfZ2V0X3R5cGUgKCkKLQotLyoqCi0gKiBHU1RfVkFMVUVfTEVTU19USEFOOgotICoKLSAqIEluZGljYXRlcyB0aGF0IHRoZSBmaXJzdCB2YWx1ZSBwcm92aWRlZCB0byBhIGNvbXBhcmlzb24gZnVuY3Rpb24KLSAqIChnc3RfdmFsdWVfY29tcGFyZSgpKSBpcyBsZXNzZXIgdGhhbiB0aGUgc2Vjb25kIG9uZS4KLSAqLwotI2RlZmluZSBHU1RfVkFMVUVfTEVTU19USEFOICAgICAgICAgICAgICAoLTEpCi0KLS8qKgotICogR1NUX1ZBTFVFX0VRVUFMOgotICoKLSAqIEluZGljYXRlcyB0aGF0IHRoZSBmaXJzdCB2YWx1ZSBwcm92aWRlZCB0byBhIGNvbXBhcmlzb24gZnVuY3Rpb24KLSAqIChnc3RfdmFsdWVfY29tcGFyZSgpKSBpcyBlcXVhbCB0byB0aGUgc2Vjb25kIG9uZS4KLSAqLwotI2RlZmluZSBHU1RfVkFMVUVfRVFVQUwgICAgICAgICAgICAgICAgICAgMAotCi0vKioKLSAqIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU46Ci0gKgotICogSW5kaWNhdGVzIHRoYXQgdGhlIGZpcnN0IHZhbHVlIHByb3ZpZGVkIHRvIGEgY29tcGFyaXNvbiBmdW5jdGlvbgotICogKGdzdF92YWx1ZV9jb21wYXJlKCkpIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kIG9uZS4KLSAqLwotI2RlZmluZSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOICAgICAgICAgICAgMQotCi0vKioKLSAqIEdTVF9WQUxVRV9VTk9SREVSRUQ6Ci0gKgotICogSW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gKGdzdF92YWx1ZV9jb21wYXJlKCkpIGNhbiBub3QKLSAqIGRldGVybWluZSBhIG9yZGVyIGZvciB0aGUgdHdvIHByb3ZpZGVkIHZhbHVlcy4KLSAqLwotI2RlZmluZSBHU1RfVkFMVUVfVU5PUkRFUkVEICAgICAgICAgICAgICAgMgotCi0vKioKLSAqIEdzdFZhbHVlQ29tcGFyZUZ1bmM6Ci0gKiBAdmFsdWUxOiBmaXJzdCB2YWx1ZSBmb3IgY29tcGFyaXNvbgotICogQHZhbHVlMjogc2Vjb25kIHZhbHVlIGZvciBjb21wYXJpc29uCi0gKgotICogVXNlZCB0b2dldGhlciB3aXRoIGdzdF92YWx1ZV9jb21wYXJlKCkgdG8gY29tcGFyZSAjR1ZhbHVlIGl0ZW1zLgotICoKLSAqIFJldHVybnM6IG9uZSBvZiBHU1RfVkFMVUVfTEVTU19USEFOLCBHU1RfVkFMVUVfRVFVQUwsIEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4KLSAqIG9yIEdTVF9WQUxVRV9VTk9SREVSRUQKLSAqLwotdHlwZWRlZiBnaW50ICAgICAoKiBHc3RWYWx1ZUNvbXBhcmVGdW5jKSAgICAgKGNvbnN0IEdWYWx1ZSAqdmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqdmFsdWUyKTsKLQotLyoqCi0gKiBHc3RWYWx1ZVNlcmlhbGl6ZUZ1bmM6Ci0gKiBAdmFsdWUxOiBhICNHVmFsdWUKLSAqCi0gKiBVc2VkIGJ5IGdzdF92YWx1ZV9zZXJpYWxpemUoKSB0byBvYnRhaW4gYSBub24tYmluYXJ5IGZvcm0gb2YgdGhlICNHVmFsdWUuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZQotICovCi10eXBlZGVmIGdjaGFyICogICgqIEdzdFZhbHVlU2VyaWFsaXplRnVuYykgICAoY29uc3QgR1ZhbHVlICp2YWx1ZTEpOwotCi0vKioKLSAqIEdzdFZhbHVlRGVzZXJpYWxpemVGdW5jOgotICogQGRlc3Q6IGEgI0dWYWx1ZQotICogQHM6IGEgc3RyaW5nCi0gKgotICogVXNlZCBieSBnc3RfdmFsdWVfZGVzZXJpYWxpemUoKSB0byBwYXJzZSBhIG5vbi1iaW5hcnkgZm9ybSBpbnRvIHRoZSAjR1ZhbHVlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGZvciBzdWNjZXNzCi0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gKCogR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMpIChHVmFsdWUgICAgICAgKmRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICpzKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZhbHVlVGFibGUgR3N0VmFsdWVUYWJsZTsKLS8qKgotICogR3N0VmFsdWVUYWJsZToKLSAqIEB0eXBlOiBhICNHVHlwZQotICogQGNvbXBhcmU6IGEgI0dzdFZhbHVlQ29tcGFyZUZ1bmMKLSAqIEBzZXJpYWxpemU6IGEgI0dzdFZhbHVlU2VyaWFsaXplRnVuYwotICogQGRlc2VyaWFsaXplOiBhICNHc3RWYWx1ZURlc2VyaWFsaXplRnVuYwotICoKLSAqIFZUYWJsZSBmb3IgdGhlICNHVmFsdWUgQHR5cGUuCi0gKi8KLXN0cnVjdCBfR3N0VmFsdWVUYWJsZSB7Ci0gIEdUeXBlIHR5cGU7Ci0gIEdzdFZhbHVlQ29tcGFyZUZ1bmMgY29tcGFyZTsKLSAgR3N0VmFsdWVTZXJpYWxpemVGdW5jIHNlcmlhbGl6ZTsKLSAgR3N0VmFsdWVEZXNlcmlhbGl6ZUZ1bmMgZGVzZXJpYWxpemU7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWQgW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlIGdzdF9pbnRfcmFuZ2VfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X2ludDY0X3JhbmdlX2dldF90eXBlICh2b2lkKTsKLUdUeXBlIGdzdF9kb3VibGVfcmFuZ2VfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X2ZyYWN0aW9uX3JhbmdlX2dldF90eXBlICh2b2lkKTsKLUdUeXBlIGdzdF9mcmFjdGlvbl9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3RfdmFsdWVfbGlzdF9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X2JpdG1hc2tfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X2ZsYWdzZXRfZ2V0X3R5cGUgKHZvaWQpOwotCi0vKiBIaWRlIHRoaXMgY29tcGF0aWJpbGl0eSB0eXBlIGZyb20gaW50cm9zcGVjdGlvbiAqLwotI2lmbmRlZiBfX0dJX1NDQU5ORVJfXwotR1R5cGUgZ3N0X2dfdGhyZWFkX2dldF90eXBlICh2b2lkKTsKLSNlbmRpZgotCi12b2lkICAgICAgICAgICAgZ3N0X3ZhbHVlX3JlZ2lzdGVyICAgICAgICAgICAgICAoY29uc3QgR3N0VmFsdWVUYWJsZSAgICp0YWJsZSk7Ci12b2lkICAgICAgICAgICAgZ3N0X3ZhbHVlX2luaXRfYW5kX2NvcHkgICAgICAgICAoR1ZhbHVlICAgICAgICAgICAgICAgICpkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICAgICAgICAqc3JjKTsKLQotZ2NoYXIgKiAgICAgICAgIGdzdF92YWx1ZV9zZXJpYWxpemUgICAgICAgICAgICAgKGNvbnN0IEdWYWx1ZSAgICAgICAgICAqdmFsdWUpIEdfR05VQ19NQUxMT0M7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICAgICAgICAgICAoR1ZhbHVlICAgICAgICAgICAgICAgICpkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqc3JjKTsKLQotLyogbGlzdCAqLwotdm9pZCAgICAgICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAgICAgKEdWYWx1ZSAgICAgICAgICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgICAqYXBwZW5kX3ZhbHVlKTsKLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKEdWYWx1ZSAgICAgICAgICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVmFsdWUgICAqYXBwZW5kX3ZhbHVlKTsKLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9wcmVwZW5kX3ZhbHVlICAgIChHVmFsdWUgICAgICAgICAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnByZXBlbmRfdmFsdWUpOwotdm9pZCAgICAgICAgICAgIGdzdF92YWx1ZV9saXN0X2NvbmNhdCAgICAgICAgICAgKEdWYWx1ZSAgICAgICAgICpkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICp2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnZhbHVlMik7Ci12b2lkICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfbWVyZ2UgICAgICAgICAgICAoR1ZhbHVlICAgICAgICAgKmRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnZhbHVlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgICAqdmFsdWUyKTsKLWd1aW50ICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAgICAgICAgIChjb25zdCBHVmFsdWUgICAqdmFsdWUpOwotY29uc3QgR1ZhbHVlICogIGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAgICAgICAgKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICBpbmRleCk7Ci0KLS8qIGFycmF5ICovCi12b2lkICAgICAgICAgICAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAgICAoR1ZhbHVlICAgICAgICAgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICphcHBlbmRfdmFsdWUpOwotdm9pZCAgICAgICAgICAgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgICAgKEdWYWx1ZSAgICAgICAgICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVmFsdWUgICAqYXBwZW5kX3ZhbHVlKTsKLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfYXJyYXlfcHJlcGVuZF92YWx1ZSAgIChHVmFsdWUgICAgICAgICAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnByZXBlbmRfdmFsdWUpOwotZ3VpbnQgICAgICAgICAgIGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAgICAgICAgKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZSk7Ci1jb25zdCBHVmFsdWUgKiAgZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAgICAgICAoY29uc3QgR1ZhbHVlICAgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGluZGV4KTsKLQotLyogaW50IHJhbmdlICovCi12b2lkICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgICAgICAgICAoR1ZhbHVlICAgICAgICAgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgIGVuZCk7Ci12b2lkICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcCAgICAoR1ZhbHVlICAgICAgICAgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICBzdGVwKTsKLWdpbnQgICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gICAgIChjb25zdCBHVmFsdWUgICAqdmFsdWUpOwotZ2ludCAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAgICAgKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZSk7Ci1naW50ICAgICAgICAgICAgZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2Vfc3RlcCAgICAoY29uc3QgR1ZhbHVlICAgKnZhbHVlKTsKLQotLyogaW50NjQgcmFuZ2UgKi8KLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICAgICAgIChHVmFsdWUgICAgICAgICAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgZW5kKTsKLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlX3N0ZXAgIChHVmFsdWUgICAgICAgICAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAgIHN0ZXApOwotZ2ludDY0ICAgICAgICAgIGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICAgKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZSk7Ci1naW50NjQgICAgICAgICAgZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggICAoY29uc3QgR1ZhbHVlICAgKnZhbHVlKTsKLWdpbnQ2NCAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXAgIChjb25zdCBHVmFsdWUgICAqdmFsdWUpOwotCi0vKiBkb3VibGUgcmFuZ2UgKi8KLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAgICAgIChHVmFsdWUgICAgICAgICAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgZW5kKTsKLWdkb3VibGUgICAgICAgICBnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gIChjb25zdCBHVmFsdWUgICAqdmFsdWUpOwotZ2RvdWJsZSAgICAgICAgIGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAgKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZSk7Ci0KLS8qIGNhcHMgKi8KLWNvbnN0IEdzdENhcHMgKiBnc3RfdmFsdWVfZ2V0X2NhcHMgICAgICAgICAgICAgIChjb25zdCBHVmFsdWUgICAqdmFsdWUpOwotdm9pZCAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfY2FwcyAgICAgICAgICAgICAgKEdWYWx1ZSAgICAgICAgICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RDYXBzICAqY2Fwcyk7Ci0KLS8qIHN0cnVjdHVyZSAqLwotY29uc3QgR3N0U3RydWN0dXJlICoKLSAgICAgICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSAgICAgICAgIChjb25zdCBHVmFsdWUgICAqdmFsdWUpOwotdm9pZCAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfc3RydWN0dXJlICAgICAgICAgKEdWYWx1ZSAgICAgICAgICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgICpzdHJ1Y3R1cmUpOwotCi0vKiBjYXBzIGZlYXR1cmVzICovCi1jb25zdCBHc3RDYXBzRmVhdHVyZXMgKgotICAgICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfY2Fwc19mZWF0dXJlcyAgICAgKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZSk7Ci12b2lkICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9jYXBzX2ZlYXR1cmVzICAgICAoR1ZhbHVlICAgICAgICAgKnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdENhcHNGZWF0dXJlcyAgKmZlYXR1cmVzKTsKLQotLyogZnJhY3Rpb24gKi8KLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICAgICAgICAgIChHVmFsdWUgICAgICAgICAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgbnVtZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgIGRlbm9taW5hdG9yKTsKLWdpbnQgICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAgIChjb25zdCBHVmFsdWUgICp2YWx1ZSk7Ci1naW50ICAgICAgICAgICAgZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAoY29uc3QgR1ZhbHVlICp2YWx1ZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X3ZhbHVlX2ZyYWN0aW9uX211bHRpcGx5ICAgICAgICAoR1ZhbHVlICAgICAgICAgKnByb2R1Y3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKmZhY3RvcjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKmZhY3RvcjIpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCAgICAgKEdWYWx1ZSAqIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICogbWludWVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgKiBzdWJ0cmFoZW5kKTsKLQotLyogZnJhY3Rpb24gcmFuZ2UgKi8KLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlICAgIChHVmFsdWUgICAgICAgICAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICplbmQpOwotdm9pZCAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoR1ZhbHVlICAgICAgICp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IG51bWVyYXRvcl9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRlbm9taW5hdG9yX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbnVtZXJhdG9yX2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRlbm9taW5hdG9yX2VuZCk7Ci1jb25zdCBHVmFsdWUgICAgKmdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluIChjb25zdCBHVmFsdWUgKnZhbHVlKTsKLWNvbnN0IEdWYWx1ZSAgICAqZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKGNvbnN0IEdWYWx1ZSAqdmFsdWUpOwotCi0vKiBiaXRtYXNrICovCi1ndWludDY0ICAgICAgICAgZ3N0X3ZhbHVlX2dldF9iaXRtYXNrICAgICAgICAgICAoY29uc3QgR1ZhbHVlICAgKnZhbHVlKTsKLXZvaWQgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2JpdG1hc2sgICAgICAgICAgIChHVmFsdWUgICAgICAgICAqdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAgICAgICAgIGJpdG1hc2spOwotLyogZmxhZ3NldCAqLwotdm9pZCAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfZmxhZ3NldCAoR1ZhbHVlICogdmFsdWUsIGd1aW50IGZsYWdzLCBndWludCBtYXNrKTsKLWd1aW50ICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3MgKGNvbnN0IEdWYWx1ZSAqIHZhbHVlKTsKLWd1aW50ICAgICAgICAgICBnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfbWFzayAoY29uc3QgR1ZhbHVlICogdmFsdWUpOwotCi0vKiBjb21wYXJlICovCi1naW50ICAgICAgICAgICAgZ3N0X3ZhbHVlX2NvbXBhcmUgICAgICAgICAgICAgICAoY29uc3QgR1ZhbHVlICAgKnZhbHVlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgICAqdmFsdWUyKTsKLWdib29sZWFuICAgICAgICBnc3RfdmFsdWVfY2FuX2NvbXBhcmUgICAgICAgICAgIChjb25zdCBHVmFsdWUgICAqdmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICp2YWx1ZTIpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF92YWx1ZV9pc19zdWJzZXQgICAgICAgICAgICAgKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnZhbHVlMik7Ci0KLS8qIHVuaW9uICovCi1nYm9vbGVhbiAgICAgICAgZ3N0X3ZhbHVlX3VuaW9uICAgICAgICAgICAgICAgICAoR1ZhbHVlICAgICAgICAgKmRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnZhbHVlMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgICAqdmFsdWUyKTsKLWdib29sZWFuICAgICAgICBnc3RfdmFsdWVfY2FuX3VuaW9uICAgICAgICAgICAgIChjb25zdCBHVmFsdWUgICAqdmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICp2YWx1ZTIpOwotCi0vKiBpbnRlcnNlY3Rpb24gKi8KLWdib29sZWFuICAgICAgICBnc3RfdmFsdWVfaW50ZXJzZWN0ICAgICAgICAgICAgIChHVmFsdWUgICAgICAgICAqZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgICAqdmFsdWUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICp2YWx1ZTIpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF92YWx1ZV9jYW5faW50ZXJzZWN0ICAgICAgICAgKGNvbnN0IEdWYWx1ZSAgICp2YWx1ZTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnZhbHVlMik7Ci0KLS8qIHN1YnRyYWN0aW9uICovCi1nYm9vbGVhbiAgICAgICAgZ3N0X3ZhbHVlX3N1YnRyYWN0ICAgICAgICAgICAgICAoR1ZhbHVlICAgICAgICAgKmRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKm1pbnVlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICAgKnN1YnRyYWhlbmQpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF92YWx1ZV9jYW5fc3VidHJhY3QgICAgICAgICAgKGNvbnN0IEdWYWx1ZSAgICptaW51ZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICpzdWJ0cmFoZW5kKTsKLQotLyogZml4YXRpb24gKi8KLWdib29sZWFuICAgICAgICBnc3RfdmFsdWVfaXNfZml4ZWQgICAgICAgICAgICAgIChjb25zdCBHVmFsdWUgICAqdmFsdWUpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF92YWx1ZV9maXhhdGUgICAgICAgICAgICAgICAgKEdWYWx1ZSAgICAgICAgICpkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAgICpzcmMpOwotCi0vKiBGbGFnc2V0IHJlZ2lzdHJhdGlvbiB3cmFwcGVyICovCi1HVHlwZQkJZ3N0X2ZsYWdzZXRfcmVnaXN0ZXIgKEdUeXBlIGZsYWdzX3R5cGUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9nc3QvZ3N0dmVyc2lvbi5oLmluIGIvZ3N0L2dzdHZlcnNpb24uaC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc0YzJkMS4uMDAwMDAwMAotLS0gYS9nc3QvZ3N0dmVyc2lvbi5oLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdHZlcnNpb24uaDogVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgR1N0cmVhbWVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9WRVJTSU9OX0hfXwotI2RlZmluZSBfX0dTVF9WRVJTSU9OX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0vKioKLSAqIFNFQ1RJT046Z3N0dmVyc2lvbgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBHU3RyZWFtZXIgdmVyc2lvbiBtYWNyb3MuCi0gKgotICogVXNlIHRoZSBHU1RfVkVSU0lPTl8qIG1hY3JvcyBlLmcuIHdoZW4gZGVmaW5pbmcgb3duIHBsdWdpbnMuIFRoZSBHU3RyZWFtZXIKLSAqIHJ1bnRpbWUgY2hlY2tzIGlmIHRoZXNlIHBsdWdpbiBhbmQgY29yZSB2ZXJzaW9uIG1hdGNoIGFuZCByZWZ1c2VzIHRvIHVzZSBhCi0gKiBwbHVnaW4gY29tcGlsZWQgYWdhaW5zdCBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIEdTdHJlYW1lci4KLSAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG1hY3JvcyB0byBrZWVwIHRoZSBHU3RyZWFtZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbgotICogeW91ciBhcHBsaWNhdGlvbi4KLSAqCi0gKiBVc2UgdGhlIGdzdF92ZXJzaW9uKCkgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8ga25vdyB3aGljaCB2ZXJzaW9uIG9mCi0gKiBHU3RyZWFtZXIgeW91IGFyZSBjdXJyZW50bHkgbGlua2VkIGFnYWluc3QuCi0gKgotICogVGhlIHZlcnNpb24gbWFjcm9zIGdldCBkZWZpbmVkIGJ5IGluY2x1ZGluZyAiZ3N0L2dzdC5oIi4KLSAqLwotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qKgotICogR1NUX1ZFUlNJT05fTUFKT1I6Ci0gKgotICogVGhlIG1ham9yIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKLSAqLwotI2RlZmluZSBHU1RfVkVSU0lPTl9NQUpPUiAoQEdTVF9WRVJTSU9OX01BSk9SQCkKLS8qKgotICogR1NUX1ZFUlNJT05fTUlOT1I6Ci0gKgotICogVGhlIG1pbm9yIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKLSAqLwotI2RlZmluZSBHU1RfVkVSU0lPTl9NSU5PUiAoQEdTVF9WRVJTSU9OX01JTk9SQCkKLS8qKgotICogR1NUX1ZFUlNJT05fTUlDUk86Ci0gKgotICogVGhlIG1pY3JvIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKLSAqLwotI2RlZmluZSBHU1RfVkVSU0lPTl9NSUNSTyAoQEdTVF9WRVJTSU9OX01JQ1JPQCkKLS8qKgotICogR1NUX1ZFUlNJT05fTkFOTzoKLSAqCi0gKiBUaGUgbmFubyB2ZXJzaW9uIG9mIEdTdHJlYW1lciBhdCBjb21waWxlIHRpbWU6Ci0gKiBBY3R1YWwgcmVsZWFzZXMgaGF2ZSAwLCBHSVQgdmVyc2lvbnMgaGF2ZSAxLCBwcmVyZWxlYXNlIHZlcnNpb25zIGhhdmUgMi0uLi4KLSAqLwotI2RlZmluZSBHU1RfVkVSU0lPTl9OQU5PIChAR1NUX1ZFUlNJT05fTkFOT0ApCi0KLS8qKgotICogR1NUX0NIRUNLX1ZFUlNJT046Ci0gKiBAbWFqb3I6IGEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1ham9yIHZlcnNpb24KLSAqIEBtaW5vcjogYSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWlub3IgdmVyc2lvbgotICogQG1pY3JvOiBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtaWNybyB2ZXJzaW9uCi0gKgotICogQ2hlY2sgd2hldGhlciBhIEdTdHJlYW1lciB2ZXJzaW9uIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbgotICogbWFqb3IubWlub3IubWljcm8gaXMgcHJlc2VudC4KLSAqLwotI2RlZmluZQlHU1RfQ0hFQ0tfVkVSU0lPTihtYWpvcixtaW5vcixtaWNybykJXAotICAgIChHU1RfVkVSU0lPTl9NQUpPUiA+IChtYWpvcikgfHwgXAotICAgICAoR1NUX1ZFUlNJT05fTUFKT1IgPT0gKG1ham9yKSAmJiBHU1RfVkVSU0lPTl9NSU5PUiA+IChtaW5vcikpIHx8IFwKLSAgICAgKEdTVF9WRVJTSU9OX01BSk9SID09IChtYWpvcikgJiYgR1NUX1ZFUlNJT05fTUlOT1IgPT0gKG1pbm9yKSAmJiBcCi0gICAgICBHU1RfVkVSU0lPTl9NSUNSTyA+PSAobWljcm8pKSB8fCBcCi0gICAgIChHU1RfVkVSU0lPTl9NQUpPUiA9PSAobWFqb3IpICYmIEdTVF9WRVJTSU9OX01JTk9SID09IChtaW5vcikgJiYgXAotICAgICAgR1NUX1ZFUlNJT05fTUlDUk8gKyAxID09IChtaWNybykgJiYgR1NUX1ZFUlNJT05fTkFOTyA+IDApKQotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVkVSU0lPTl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tYXRoLWNvbXBhdC5oIGIvZ3N0L21hdGgtY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NzNiM2EuLjAwMDAwMDAKLS0tIGEvZ3N0L21hdGgtY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX01BVEhfQ09NUEFUX0hfXwotI2RlZmluZSBfX0dTVF9NQVRIX0NPTVBBVF9IX18KLQotLyogVGhpcyBoZWFkZXIgaXMgbm90IGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgdmlhIGdzdC9nc3QuaCwgeW91IG5lZWQgdG8KLSAqIGluY2x1ZGUgaXQgZXhwbGljaXRseSBpZiB5b3UgbmVlZCBpdC4gKi8KLQotI2lmbmRlZiBfVVNFX01BVEhfREVGSU5FUwotI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUyAvKiBzbyBNU1ZDIGRlZmluZXMgTV9QSSBldGMuICovCi0jZW5kaWYKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotLyogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXRoLmggKi8KLQotI2RlZmluZSBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlQKLSNkZWZpbmUgX19HU1RfTUFUSF9DT01QQVRfTkVFRF9SSU5URgotI2RlZmluZSBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX0lTTkFOCi0KLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI3VuZGVmIF9fR1NUX01BVEhfQ09NUEFUX05FRURfUklOVAotI3VuZGVmIF9fR1NUX01BVEhfQ09NUEFUX05FRURfUklOVEYKLSN1bmRlZiBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX0lTTkFOCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX1BPU0lYX1ZFUlNJT04pICYmIF9QT1NJWF9WRVJTSU9OID49IDIwMDExMkwKLSN1bmRlZiBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlQKLSN1bmRlZiBfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlRGCi0jdW5kZWYgX19HU1RfTUFUSF9DT01QQVRfTkVFRF9JU05BTgotI2VuZGlmCi0KLSNpZm5kZWYgTV9QSQotI2RlZmluZSBNX1BJIEdfUEkKLSNlbmRpZgotCi0jaWZuZGVmIE1fUElfMgotI2RlZmluZSBNX1BJXzIgR19QSV8yCi0jZW5kaWYKLQotI2lmbmRlZiBNX1BJXzQKLSNkZWZpbmUgTV9QSV80IEdfUElfNAotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgZG91YmxlCi1fX2dzdF9tYXRoX2NvbXBhdF9yaW50IChkb3VibGUgeCkKLXsKLSAgcmV0dXJuIGZsb29yICh4ICsgMC41KTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdAotX19nc3RfbWF0aF9jb21wYXRfcmludGYgKGZsb2F0IHgpCi17Ci0gIHJldHVybiBmbG9vcmYgKHggKyAwLjUpOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fX2dzdF9tYXRoX2NvbXBhdF9pc25hbiAoZG91YmxlIHgpCi17Ci0gIHJldHVybiB4ICE9IHg7Ci19Ci0KLSNpZiBkZWZpbmVkIChfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX1JJTlQpICYmICFkZWZpbmVkIChyaW50KQotI2RlZmluZSByaW50KHgpIF9fZ3N0X21hdGhfY29tcGF0X3JpbnQoeCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX19HU1RfTUFUSF9DT01QQVRfTkVFRF9SSU5URikgJiYgIWRlZmluZWQgKHJpbnRmKQotI2RlZmluZSByaW50Zih4KSBfX2dzdF9tYXRoX2NvbXBhdF9yaW50Zih4KQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfX0dTVF9NQVRIX0NPTVBBVF9ORUVEX0lTTkFOKSAmJiAhZGVmaW5lZCAoaXNuYW4pCi0jZGVmaW5lIGlzbmFuKHgpIF9fZ3N0X21hdGhfY29tcGF0X2lzbmFuICh4KQotI2VuZGlmCi0KLSNpZm5kZWYgTkFOCi0jaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotI2RlZmluZSBfX0dTVF9OQU5fQllURVMgICAgICAgIHsgMHg3ZiwgMHhjMCwgMCwgMCB9Ci0jZWxpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0jZGVmaW5lIF9fR1NUX05BTl9CWVRFUyAgICAgICAgeyAwLCAwLCAweGMwLCAweDdmIH0KLSNlbmRpZgotc3RhdGljIHVuaW9uIHsKLSAgdW5zaWduZWQgY2hhciBfX2NbNF07Ci0gIGZsb2F0IF9fZDsKLX0gX19nc3RfbmFuX3VuaW9uIEdfR05VQ19VTlVTRUQgPSB7Ci0gIF9fR1NUX05BTl9CWVRFUwotfTsKLSNkZWZpbmUgTkFOICAgIChfX2dzdF9uYW5fdW5pb24uX19kKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9NQVRIX0NPTVBBVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9wYXJzZS9NYWtlZmlsZS5hbSBiL2dzdC9wYXJzZS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ0MzQ5YS4uMDAwMDAwMAotLS0gYS9nc3QvcGFyc2UvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIGxpYmdzdHBhcnNlLmxhIGlzIGFuIG9wdGlvbmFsbHkgYnVpbHQgaGVscGVyIGxpYnJhcnkgbGlua2VkIGludG8gY29yZQotbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZ3N0cGFyc2UubGEKLQotQ0xFQU5GSUxFUyA9IGdyYW1tYXIudGFiLmggcGFyc2VfbGV4LmggZ3JhbW1hci5vdXRwdXQKLUVYVFJBX0RJU1QgPSBcCi0JZ3JhbW1hci55IFwKLQlwYXJzZS5sCi0KLSMgdW5jb21tZW50IHRoZXNlIGxpbmVzIHRvIGRpc3QgdGhlIGdlbmVyYXRlZCBzb3VyY2VzCi0jQlVJTFRfU09VUkNFUyA9IGdyYW1tYXIudGFiLmggZ3JhbW1hci50YWIuYyBwYXJzZV9sZXguaCBsZXgucHJpdl9nc3RfcGFyc2VfeXkuYwotI2xpYmdzdHBhcnNlX2xhX1NPVVJDRVMgPSBsZXgucHJpdl9nc3RfcGFyc2VfeXkuYyBncmFtbWFyLnRhYi5jCi0KLSMgdW5jb21tZW50IHRoZXNlIGxpbmVzIHRvIF9OT1RfIGRpc3QgdGhlIGdlbmVyYXRlZCBzb3VyY2VzCi1ub2Rpc3RfbGliZ3N0cGFyc2VfbGFfU09VUkNFUyA9IGxleC5wcml2X2dzdF9wYXJzZV95eS5jIGdyYW1tYXIudGFiLmMgZ3JhbW1hci50YWcuaCBwYXJzZV9sZXguaAotQ0xFQU5GSUxFUyArPSBncmFtbWFyLnRhYi5jIGxleC5wcml2X2dzdF9wYXJzZV95eS5jCi0KLWxpYmdzdHBhcnNlX2xhX0NGTEFHUyA9ICQoR1NUX0FMTF9DRkxBR1MpIC1ER1NUX0VYUE9SVFMgLURZWU1BTExPQz1nX21hbGxvYyAtRFlZRlJFRT1nX2ZyZWUKLWxpYmdzdHBhcnNlX2xhX0xJQkFERCA9ICQoR1NUX0FMTF9MSUJTKQotCi1ub2luc3RfSEVBREVSUyA9IHR5cGVzLmgKLQotZ3JhbW1hci50YWIuYyBncmFtbWFyLnRhYi5oOiBncmFtbWFyLnkKLQkkKEFNX1ZfR0VOKSQoQklTT05fUEFUSCkgLWQgLXYgLXBwcml2X2dzdF9wYXJzZV95eSAkKHNyY2RpcikvZ3JhbW1hci55IC1vIGdyYW1tYXIudGFiLmMgJiYgXAotCW12IGdyYW1tYXIudGFiLmMgZ3JhbW1hci50YWJfdG1wLmMgJiYgXAotCWVjaG8gJyNpZmRlZiBIQVZFX0NPTkZJR19IJyA+IGdyYW1tYXIudGFiX3RtcDIuYyAmJiBcCi0JZWNobyAnI2luY2x1ZGUgPGNvbmZpZy5oPicgPj4gZ3JhbW1hci50YWJfdG1wMi5jICYmIFwKLQllY2hvICcjZW5kaWYnID4+IGdyYW1tYXIudGFiX3RtcDIuYyAmJiBcCi0JY2F0IGdyYW1tYXIudGFiX3RtcC5jID4+IGdyYW1tYXIudGFiX3RtcDIuYyAmJiBcCi0Jcm0gZ3JhbW1hci50YWJfdG1wLmMgJiYgXAotCW12IGdyYW1tYXIudGFiX3RtcDIuYyBncmFtbWFyLnRhYi5jCi0KLWxleC5wcml2X2dzdF9wYXJzZV95eS5jIHBhcnNlX2xleC5oOiBwYXJzZS5sIGdyYW1tYXIudGFiLmgKLQkkKEFNX1ZfR0VOKSQoRkxFWF9QQVRIKSAtLWhlYWRlci1maWxlPXBhcnNlX2xleC5oIC1QcHJpdl9nc3RfcGFyc2VfeXkgJF4gJiYgXAotCW12IGxleC5wcml2X2dzdF9wYXJzZV95eS5jIGxleC5wcml2X2dzdF9wYXJzZV95eV90bXAuYyAmJiBcCi0JZWNobyAnI2lmZGVmIEhBVkVfQ09ORklHX0gnID4gbGV4LnByaXZfZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCi0JZWNobyAnI2luY2x1ZGUgPGNvbmZpZy5oPicgPj4gbGV4LnByaXZfZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCi0JZWNobyAnI2VuZGlmJyA+PiBsZXgucHJpdl9nc3RfcGFyc2VfeXlfdG1wMi5jICYmIFwKLQl7IGdyZXAgLXEgcHJpdl9nc3RfcGFyc2VfeXlnZXRfY29sdW1uIHBhcnNlX2xleC5oIHx8IFwKLQl7IGVjaG8gJ2ludCBwcml2X2dzdF9wYXJzZV95eWdldF9jb2x1bW4gICh2b2lkICogeXlzY2FubmVyKTsnID4+IGxleC5wcml2X2dzdF9wYXJzZV95eV90bXAyLmMgJiYgXAotCWVjaG8gJ3ZvaWQgcHJpdl9nc3RfcGFyc2VfeXlzZXRfY29sdW1uIChpbnQgY29sdW1uX25vICwgdm9pZCAqIHl5c2Nhbm5lcik7JyA+PiBsZXgucHJpdl9nc3RfcGFyc2VfeXlfdG1wMi5jOyB9OyB9ICYmIFwKLQljYXQgbGV4LnByaXZfZ3N0X3BhcnNlX3l5X3RtcC5jID4+IGxleC5wcml2X2dzdF9wYXJzZV95eV90bXAyLmMgJiYgXAotCXJtIGxleC5wcml2X2dzdF9wYXJzZV95eV90bXAuYyAmJiBcCi0JbXYgbGV4LnByaXZfZ3N0X3BhcnNlX3l5X3RtcDIuYyBsZXgucHJpdl9nc3RfcGFyc2VfeXkuYwotCi0uTk9UUEFSQUxMRUw6Ci0KZGlmZiAtLWdpdCBhL2dzdC9wYXJzZS9NYWtlZmlsZS5pbiBiL2dzdC9wYXJzZS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEzYzdhZC4uMDAwMDAwMAotLS0gYS9nc3QvcGFyc2UvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4NjMgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L3BhcnNlCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotTFRMSUJSQVJJRVMgPSAkKG5vaW5zdF9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RwYXJzZV9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLW5vZGlzdF9saWJnc3RwYXJzZV9sYV9PQkpFQ1RTID0gIFwKLQlsaWJnc3RwYXJzZV9sYS1sZXgucHJpdl9nc3RfcGFyc2VfeXkubG8gXAotCWxpYmdzdHBhcnNlX2xhLWdyYW1tYXIudGFiLmxvCi1saWJnc3RwYXJzZV9sYV9PQkpFQ1RTID0gJChub2Rpc3RfbGliZ3N0cGFyc2VfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHBhcnNlX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChsaWJnc3RwYXJzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gXAotCSRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChub2Rpc3RfbGliZ3N0cGFyc2VfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9Ci1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotCi0jIGxpYmdzdHBhcnNlLmxhIGlzIGFuIG9wdGlvbmFsbHkgYnVpbHQgaGVscGVyIGxpYnJhcnkgbGlua2VkIGludG8gY29yZQotbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZ3N0cGFyc2UubGEKLUNMRUFORklMRVMgPSBncmFtbWFyLnRhYi5oIHBhcnNlX2xleC5oIGdyYW1tYXIub3V0cHV0IGdyYW1tYXIudGFiLmMgXAotCWxleC5wcml2X2dzdF9wYXJzZV95eS5jCi1FWFRSQV9ESVNUID0gXAotCWdyYW1tYXIueSBcCi0JcGFyc2UubAotCi0KLSMgdW5jb21tZW50IHRoZXNlIGxpbmVzIHRvIGRpc3QgdGhlIGdlbmVyYXRlZCBzb3VyY2VzCi0jQlVJTFRfU09VUkNFUyA9IGdyYW1tYXIudGFiLmggZ3JhbW1hci50YWIuYyBwYXJzZV9sZXguaCBsZXgucHJpdl9nc3RfcGFyc2VfeXkuYwotI2xpYmdzdHBhcnNlX2xhX1NPVVJDRVMgPSBsZXgucHJpdl9nc3RfcGFyc2VfeXkuYyBncmFtbWFyLnRhYi5jCi0KLSMgdW5jb21tZW50IHRoZXNlIGxpbmVzIHRvIF9OT1RfIGRpc3QgdGhlIGdlbmVyYXRlZCBzb3VyY2VzCi1ub2Rpc3RfbGliZ3N0cGFyc2VfbGFfU09VUkNFUyA9IGxleC5wcml2X2dzdF9wYXJzZV95eS5jIGdyYW1tYXIudGFiLmMgZ3JhbW1hci50YWcuaCBwYXJzZV9sZXguaAotbGliZ3N0cGFyc2VfbGFfQ0ZMQUdTID0gJChHU1RfQUxMX0NGTEFHUykgLURHU1RfRVhQT1JUUyAtRFlZTUFMTE9DPWdfbWFsbG9jIC1EWVlGUkVFPWdfZnJlZQotbGliZ3N0cGFyc2VfbGFfTElCQUREID0gJChHU1RfQUxMX0xJQlMpCi1ub2luc3RfSEVBREVSUyA9IHR5cGVzLmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9wYXJzZS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvcGFyc2UvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLW5vaW5zdExUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQotCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHBhcnNlLmxhOiAkKGxpYmdzdHBhcnNlX2xhX09CSkVDVFMpICQobGliZ3N0cGFyc2VfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHBhcnNlX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RwYXJzZV9sYV9MSU5LKSAgJChsaWJnc3RwYXJzZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdHBhcnNlX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RwYXJzZV9sYS1sZXgucHJpdl9nc3RfcGFyc2VfeXkuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHBhcnNlX2xhLWxleC5wcml2X2dzdF9wYXJzZV95eS5sbzogbGV4LnByaXZfZ3N0X3BhcnNlX3l5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwYXJzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cGFyc2VfbGEtbGV4LnByaXZfZ3N0X3BhcnNlX3l5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RwYXJzZV9sYS1sZXgucHJpdl9nc3RfcGFyc2VfeXkuVHBvIC1jIC1vIGxpYmdzdHBhcnNlX2xhLWxleC5wcml2X2dzdF9wYXJzZV95eS5sbyBgdGVzdCAtZiAnbGV4LnByaXZfZ3N0X3BhcnNlX3l5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxleC5wcml2X2dzdF9wYXJzZV95eS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RwYXJzZV9sYS1sZXgucHJpdl9nc3RfcGFyc2VfeXkuVHBvICQoREVQRElSKS9saWJnc3RwYXJzZV9sYS1sZXgucHJpdl9nc3RfcGFyc2VfeXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbGV4LnByaXZfZ3N0X3BhcnNlX3l5LmMnIG9iamVjdD0nbGliZ3N0cGFyc2VfbGEtbGV4LnByaXZfZ3N0X3BhcnNlX3l5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cGFyc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cGFyc2VfbGEtbGV4LnByaXZfZ3N0X3BhcnNlX3l5LmxvIGB0ZXN0IC1mICdsZXgucHJpdl9nc3RfcGFyc2VfeXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGV4LnByaXZfZ3N0X3BhcnNlX3l5LmMKLQotbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIubG86IGdyYW1tYXIudGFiLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwYXJzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHBhcnNlX2xhLWdyYW1tYXIudGFiLlRwbyAtYyAtbyBsaWJnc3RwYXJzZV9sYS1ncmFtbWFyLnRhYi5sbyBgdGVzdCAtZiAnZ3JhbW1hci50YWIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3JhbW1hci50YWIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIuVHBvICQoREVQRElSKS9saWJnc3RwYXJzZV9sYS1ncmFtbWFyLnRhYi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdncmFtbWFyLnRhYi5jJyBvYmplY3Q9J2xpYmdzdHBhcnNlX2xhLWdyYW1tYXIudGFiLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cGFyc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cGFyc2VfbGEtZ3JhbW1hci50YWIubG8gYHRlc3QgLWYgJ2dyYW1tYXIudGFiLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdyYW1tYXIudGFiLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLWdyYW1tYXIudGFiLmMgZ3JhbW1hci50YWIuaDogZ3JhbW1hci55Ci0JJChBTV9WX0dFTikkKEJJU09OX1BBVEgpIC1kIC12IC1wcHJpdl9nc3RfcGFyc2VfeXkgJChzcmNkaXIpL2dyYW1tYXIueSAtbyBncmFtbWFyLnRhYi5jICYmIFwKLQltdiBncmFtbWFyLnRhYi5jIGdyYW1tYXIudGFiX3RtcC5jICYmIFwKLQllY2hvICcjaWZkZWYgSEFWRV9DT05GSUdfSCcgPiBncmFtbWFyLnRhYl90bXAyLmMgJiYgXAotCWVjaG8gJyNpbmNsdWRlIDxjb25maWcuaD4nID4+IGdyYW1tYXIudGFiX3RtcDIuYyAmJiBcCi0JZWNobyAnI2VuZGlmJyA+PiBncmFtbWFyLnRhYl90bXAyLmMgJiYgXAotCWNhdCBncmFtbWFyLnRhYl90bXAuYyA+PiBncmFtbWFyLnRhYl90bXAyLmMgJiYgXAotCXJtIGdyYW1tYXIudGFiX3RtcC5jICYmIFwKLQltdiBncmFtbWFyLnRhYl90bXAyLmMgZ3JhbW1hci50YWIuYwotCi1sZXgucHJpdl9nc3RfcGFyc2VfeXkuYyBwYXJzZV9sZXguaDogcGFyc2UubCBncmFtbWFyLnRhYi5oCi0JJChBTV9WX0dFTikkKEZMRVhfUEFUSCkgLS1oZWFkZXItZmlsZT1wYXJzZV9sZXguaCAtUHByaXZfZ3N0X3BhcnNlX3l5ICReICYmIFwKLQltdiBsZXgucHJpdl9nc3RfcGFyc2VfeXkuYyBsZXgucHJpdl9nc3RfcGFyc2VfeXlfdG1wLmMgJiYgXAotCWVjaG8gJyNpZmRlZiBIQVZFX0NPTkZJR19IJyA+IGxleC5wcml2X2dzdF9wYXJzZV95eV90bXAyLmMgJiYgXAotCWVjaG8gJyNpbmNsdWRlIDxjb25maWcuaD4nID4+IGxleC5wcml2X2dzdF9wYXJzZV95eV90bXAyLmMgJiYgXAotCWVjaG8gJyNlbmRpZicgPj4gbGV4LnByaXZfZ3N0X3BhcnNlX3l5X3RtcDIuYyAmJiBcCi0JeyBncmVwIC1xIHByaXZfZ3N0X3BhcnNlX3l5Z2V0X2NvbHVtbiBwYXJzZV9sZXguaCB8fCBcCi0JeyBlY2hvICdpbnQgcHJpdl9nc3RfcGFyc2VfeXlnZXRfY29sdW1uICAodm9pZCAqIHl5c2Nhbm5lcik7JyA+PiBsZXgucHJpdl9nc3RfcGFyc2VfeXlfdG1wMi5jICYmIFwKLQllY2hvICd2b2lkIHByaXZfZ3N0X3BhcnNlX3l5c2V0X2NvbHVtbiAoaW50IGNvbHVtbl9ubyAsIHZvaWQgKiB5eXNjYW5uZXIpOycgPj4gbGV4LnByaXZfZ3N0X3BhcnNlX3l5X3RtcDIuYzsgfTsgfSAmJiBcCi0JY2F0IGxleC5wcml2X2dzdF9wYXJzZV95eV90bXAuYyA+PiBsZXgucHJpdl9nc3RfcGFyc2VfeXlfdG1wMi5jICYmIFwKLQlybSBsZXgucHJpdl9nc3RfcGFyc2VfeXlfdG1wLmMgJiYgXAotCW12IGxleC5wcml2X2dzdF9wYXJzZV95eV90bXAyLmMgbGV4LnByaXZfZ3N0X3BhcnNlX3l5LmMKLQotLk5PVFBBUkFMTEVMOgotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvcGFyc2UvZ3JhbW1hci55IGIvZ3N0L3BhcnNlL2dyYW1tYXIueQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjNTlhMy4uMDAwMDAwMAotLS0gYS9nc3QvcGFyc2UvZ3JhbW1hci55CisrKyAvZGV2L251bGwKQEAgLTEsMTE5NSArMCwwIEBACi0lewotI2luY2x1ZGUgIi4uL2dzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSAiLi4vZ3N0LWkxOG4tbGliLmgiCi0KLSNpbmNsdWRlICIuLi9nc3Rjb25maWcuaCIKLSNpbmNsdWRlICIuLi9nc3RwYXJzZS5oIgotI2luY2x1ZGUgIi4uL2dzdGluZm8uaCIKLSNpbmNsdWRlICIuLi9nc3RlcnJvci5oIgotI2luY2x1ZGUgIi4uL2dzdHN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIi4uL2dzdHVyaS5oIgotI2luY2x1ZGUgIi4uL2dzdHV0aWxzLmgiCi0jaW5jbHVkZSAiLi4vZ3N0dmFsdWUuaCIKLSNpbmNsdWRlICIuLi9nc3RjaGlsZHByb3h5LmgiCi0jaW5jbHVkZSAidHlwZXMuaCIKLQotLyogQWxsIGVycm9yIG1lc3NhZ2VzIGluIHRoaXMgZmlsZSBhcmUgdXNlci12aXNpYmxlIGFuZCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0gKiBEb24ndCBzdGFydCB0aGUgbWVzc2FnZSB3aXRoIGEgY2FwaXRhbCwgYW5kIGRvbid0IGVuZCB0aGVtIHdpdGggYSBwZXJpb2QsCi0gKiBhcyB0aGV5IHdpbGwgYmUgcHJlc2VudGVkIGluc2lkZSBhIHNlbnRlbmNlL2Vycm9yLgotICovCi0KLSNkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKLQotI2RlZmluZSBZWUVOQUJMRV9OTFMgMAotCi0jaWZuZGVmIFlZTFRZUEVfSVNfVFJJVklBTAotI2RlZmluZSBZWUxUWVBFX0lTX1RSSVZJQUwgMAotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiogVHJhY2luZyBtZW1vcnkgbGVha3MKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBfX0dTVF9QQVJTRV9UUkFDRQotc3RhdGljIGd1aW50IF9fc3RyaW5nczsKLXN0YXRpYyBndWludCBfX2xpbmtzOwotc3RhdGljIGd1aW50IF9fY2hhaW5zOwotZ2NoYXIgKgotX19nc3RfcGFyc2Vfc3RyZHVwIChnY2hhciAqb3JnKQotewotICBnY2hhciAqcmV0OwotICBfX3N0cmluZ3MrKzsKLSAgcmV0ID0gZ19zdHJkdXAgKG9yZyk7Ci0gIC8qIGdfcHJpbnQgKCJBTExPQ0FURUQgU1RSICAgKCUzdSk6ICVwICVzXG4iLCBfX3N0cmluZ3MsIHJldCwgcmV0KTsgKi8KLSAgcmV0dXJuIHJldDsKLX0KLXZvaWQKLV9fZ3N0X3BhcnNlX3N0cmZyZWUgKGdjaGFyICpzdHIpCi17Ci0gIGlmIChzdHIpIHsKLSAgICAvKiBnX3ByaW50ICgiRlJFRUlORyBTVFIgICAgICglM3UpOiAlcCAlc1xuIiwgX19zdHJpbmdzIC0gMSwgc3RyLCBzdHIpOyAqLwotICAgIGdfZnJlZSAoc3RyKTsKLSAgICBnX3JldHVybl9pZl9mYWlsIChfX3N0cmluZ3MgPiAwKTsKLSAgICBfX3N0cmluZ3MtLTsKLSAgfQotfQotbGlua190ICpfX2dzdF9wYXJzZV9saW5rX25ldyAodm9pZCkKLXsKLSAgbGlua190ICpyZXQ7Ci0gIF9fbGlua3MrKzsKLSAgcmV0ID0gZ19zbGljZV9uZXcwIChsaW5rX3QpOwotICAvKiBnX3ByaW50ICgiQUxMT0NBVEVEIExJTksgICglM3UpOiAlcFxuIiwgX19saW5rcywgcmV0KTsgKi8KLSAgcmV0dXJuIHJldDsKLX0KLXZvaWQKLV9fZ3N0X3BhcnNlX2xpbmtfZnJlZSAobGlua190ICpkYXRhKQotewotICBpZiAoZGF0YSkgewotICAgIC8qIGdfcHJpbnQgKCJGUkVFSU5HIExJTksgICAgKCUzdSk6ICVwXG4iLCBfX2xpbmtzIC0gMSwgZGF0YSk7ICovCi0gICAgZ19zbGljZV9mcmVlIChsaW5rX3QsIGRhdGEpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwgKF9fbGlua3MgPiAwKTsKLSAgICBfX2xpbmtzLS07Ci0gIH0KLX0KLWNoYWluX3QgKgotX19nc3RfcGFyc2VfY2hhaW5fbmV3ICh2b2lkKQotewotICBjaGFpbl90ICpyZXQ7Ci0gIF9fY2hhaW5zKys7Ci0gIHJldCA9IGdfc2xpY2VfbmV3MCAoY2hhaW5fdCk7Ci0gIC8qIGdfcHJpbnQgKCJAJXA6IEFMTE9DQVRFRCBDSEFJTiAoJTN1KTpcbiIsIHJldCwgX19jaGFpbnMpOyAqLwotICByZXR1cm4gcmV0OwotfQotdm9pZAotX19nc3RfcGFyc2VfY2hhaW5fZnJlZSAoY2hhaW5fdCAqZGF0YSkKLXsKLSAgLyogZ19wcmludCAoIkAlcDogRlJFRUlORyBDSEFJTiAgICglM3UpOlxuIiwgZGF0YSwgX19jaGFpbnMgLSAxKTsgKi8KLSAgZ19zbGljZV9mcmVlIChjaGFpbl90LCBkYXRhKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoX19jaGFpbnMgPiAwKTsKLSAgX19jaGFpbnMtLTsKLX0KLQotI2VuZGlmIC8qIF9fR1NUX1BBUlNFX1RSQUNFICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiogZGVmaW5lIFNFVF9FUlJPUiBtYWNyby9mdW5jdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBHX0hBVkVfSVNPX1ZBUkFSR1MKLQotIyAgZGVmaW5lIFNFVF9FUlJPUihlcnJvciwgdHlwZSwgLi4uKSBcCi1HX1NUTVRfU1RBUlQgeyBcCi0gIEdTVF9DQVRfRVJST1IgKEdTVF9DQVRfUElQRUxJTkUsIF9fVkFfQVJHU19fKTsgXAotICBpZiAoKGVycm9yKSAmJiAhKihlcnJvcikpIHsgXAotICAgIGdfc2V0X2Vycm9yICgoZXJyb3IpLCBHU1RfUEFSU0VfRVJST1IsICh0eXBlKSwgX19WQV9BUkdTX18pOyBcCi0gIH0gXAotfSBHX1NUTVRfRU5ECi0KLSNlbGlmIGRlZmluZWQoR19IQVZFX0dOVUNfVkFSQVJHUykKLQotIyAgZGVmaW5lIFNFVF9FUlJPUihlcnJvciwgdHlwZSwgYXJncy4uLikgXAotR19TVE1UX1NUQVJUIHsgXAotICBHU1RfQ0FUX0VSUk9SIChHU1RfQ0FUX1BJUEVMSU5FLCBhcmdzICk7IFwKLSAgaWYgKChlcnJvcikgJiYgISooZXJyb3IpKSB7IFwKLSAgICBnX3NldF9lcnJvciAoKGVycm9yKSwgR1NUX1BBUlNFX0VSUk9SLCAodHlwZSksIGFyZ3MgKTsgXAotICB9IFwKLX0gR19TVE1UX0VORAotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLVNFVF9FUlJPUiAoR0Vycm9yICoqZXJyb3IsIGdpbnQgdHlwZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIGlmIChlcnJvcikgewotICAgIGlmICgqZXJyb3IpIHsKLSAgICAgIGdfd2FybmluZyAoImVycm9yIHdoaWxlIHBhcnNpbmciKTsKLSAgICB9IGVsc2UgewotICAgICAgdmFfbGlzdCB2YXJhcmdzOwotICAgICAgY2hhciAqc3RyaW5nOwotCi0gICAgICB2YV9zdGFydCAodmFyYXJncywgZm9ybWF0KTsKLSAgICAgIHN0cmluZyA9IGdfc3RyZHVwX3ZwcmludGYgKGZvcm1hdCwgdmFyYXJncyk7Ci0gICAgICB2YV9lbmQgKHZhcmFyZ3MpOwotCi0gICAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdTVF9QQVJTRV9FUlJPUiwgdHlwZSwgc3RyaW5nKTsKLQotICAgICAgZ19mcmVlIChzdHJpbmcpOwotICAgIH0KLSAgfQotfQotCi0jZW5kaWYgLyogR19IQVZFX0lTT19WQVJBUkdTICovCi0KLS8qKiogZGVmaW5lIFlZUFJJTlRGIG1hY3JvL2Z1bmN0aW9uIGlmIHdlJ3JlIGRlYnVnZ2luZyAqLwotCi0vKiBiaXNvbiAxLjM1IGNhbGxzIHRoaXMgbWFjcm8gd2l0aCBzaWRlIGVmZmVjdHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZQotICAgc2lkZSBlZmZlY3RzIHdvcmsgLSBjcmFwcHkgYmlzb24gKi8KLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSMgIGRlZmluZSBZWURFQlVHIDEKLQotIyAgaWZkZWYgR19IQVZFX0lTT19WQVJBUkdTCi0KLS8qICMgIGRlZmluZSBZWUZQUklOVEYoYSwgLi4uKSBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BJUEVMSU5FLCBfX1ZBX0FSR1NfXykgKi8KLSMgICAgZGVmaW5lIFlZRlBSSU5URihhLCAuLi4pIFwKLUdfU1RNVF9TVEFSVCB7IFwKLSAgICAgR1NUX0NBVF9MT0cgKEdTVF9DQVRfUElQRUxJTkUsIF9fVkFfQVJHU19fKTsgXAotfSBHX1NUTVRfRU5ECi0KLSMgIGVsaWYgZGVmaW5lZChHX0hBVkVfR05VQ19WQVJBUkdTKQotCi0jICAgIGRlZmluZSBZWUZQUklOVEYoYSwgYXJncy4uLikgXAotR19TVE1UX1NUQVJUIHsgXAotICAgICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9QSVBFTElORSwgYXJncyk7IFwKLX0gR19TVE1UX0VORAotCi0jICBlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotWVlQUklOVEYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLSAgZ2NoYXIgKnRlbXA7Ci0KLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIGZvcm1hdCk7Ci0gIHRlbXAgPSBnX3N0cmR1cF92cHJpbnRmIChmb3JtYXQsIHZhcmFyZ3MpOwotICBHU1RfQ0FUX0xPRyAoR1NUX0NBVF9QSVBFTElORSwgIiVzIiwgdGVtcCk7Ci0gIGdfZnJlZSAodGVtcCk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci19Ci0KLSMgIGVuZGlmIC8qIEdfSEFWRV9JU09fVkFSQVJHUyAqLwotCi0jZW5kaWYgLyogR1NUX0RJU0FCTEVfR1NUX0RFQlVHICovCi0KLQotLyoKLSAqIGluY2x1ZGUgaGVhZGVycyBnZW5lcmF0ZWQgYnkgYmlzb24gJiBmbGV4LCBhZnRlciBkZWZpbmluZyAob3Igbm90IGRlZmluaW5nKSBZWURFQlVHCi0gKi8KLSNpbmNsdWRlICJncmFtbWFyLnRhYi5oIgotI2luY2x1ZGUgInBhcnNlX2xleC5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqIHJlcG9ydCBtaXNzaW5nIGVsZW1lbnRzL2JpbnMvLi4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotc3RhdGljIHZvaWQgIGFkZF9taXNzaW5nX2VsZW1lbnQoZ3JhcGhfdCAqZ3JhcGgsZ2NoYXIgKm5hbWUpewotICBpZiAoKGdyYXBoKS0+Y3R4KXsKLSAgICAoZ3JhcGgpLT5jdHgtPm1pc3NpbmdfZWxlbWVudHMgPSBnX2xpc3RfYXBwZW5kICgoZ3JhcGgpLT5jdHgtPm1pc3NpbmdfZWxlbWVudHMsIGdfc3RyZHVwIChuYW1lKSk7Ci0gICAgfQotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKiogaGVscGVycyBmb3IgcGlwZWxpbmUtc2V0dXAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgVFJZX1NFVFVQX0xJTksobCkgR19TVE1UX1NUQVJUIHsgXAotICAgaWYoICghKGwpLT5zcmMuZWxlbWVudCkgJiYgKCEobCktPnNyYy5uYW1lKSApeyBcCi0gICAgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTElOSywgXygibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIpLCBcCi0JKGwpLT5zaW5rLm5hbWUgPyAobCktPnNpbmsubmFtZSA6ICIiLCBcCi0JKGwpLT5zaW5rLmVsZW1lbnQpOyBcCi0gICAgIGdzdF9wYXJzZV9mcmVlX2xpbmsgKGwpOyBcCi0gICB9ZWxzZSBpZiggKCEobCktPnNpbmsuZWxlbWVudCkgJiYgKCEobCktPnNpbmsubmFtZSkgKXsgXAotICAgICBTRVRfRVJST1IgKGdyYXBoLT5lcnJvciwgR1NUX1BBUlNFX0VSUk9SX0xJTkssIF8oImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iKSwgXAotCShsKS0+c3JjLm5hbWUgPyAobCktPnNyYy5uYW1lIDogIiIsIFwKLQkobCktPnNyYy5lbGVtZW50KTsgXAotICAgICBnc3RfcGFyc2VfZnJlZV9saW5rIChsKTsgXAotICAgfWVsc2V7IFwKLSAgICAgZ3JhcGgtPmxpbmtzID0gZ19zbGlzdF9hcHBlbmQgKGdyYXBoLT5saW5rcywgbCApOyBcCi0gICB9ICAgXAotfSBHX1NUTVRfRU5ECi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgZ2NoYXIgKnNyY19wYWQ7Ci0gIGdjaGFyICpzaW5rX3BhZDsKLSAgR3N0RWxlbWVudCAqc2luazsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3Vsb25nIHBhZF9hZGRlZF9zaWduYWxfaWQsIG5vX21vcmVfcGFkc19zaWduYWxfaWQ7Ci19IERlbGF5ZWRMaW5rOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGdjaGFyICpuYW1lOwotICBnY2hhciAqdmFsdWVfc3RyOwotICBndWxvbmcgc2lnbmFsX2lkOwotfSBEZWxheWVkU2V0OwotCi1zdGF0aWMgaW50ICBnc3RfcmVzb2x2ZV9yZWZlcmVuY2UocmVmZXJlbmNlX3QgKnJyLCBHc3RFbGVtZW50ICpwaXBlbGluZSl7Ci0gIEdzdEJpbiAqYmluOwotCi0gIGlmKHJyLT5lbGVtZW50KSByZXR1cm4gIDA7ICAvKiBhbHJlYWR5IHJlc29sdmVkISAqLwotICBpZighcnItPm5hbWUpICAgcmV0dXJuIC0yOyAgLyogbm8gY2hhbmNlISAqLwotCi0gIGlmIChHU1RfSVNfQklOIChwaXBlbGluZSkpewotICAgIGJpbiA9IEdTVF9CSU4gKHBpcGVsaW5lKTsKLSAgICByci0+ZWxlbWVudCA9IGdzdF9iaW5fZ2V0X2J5X25hbWVfcmVjdXJzZV91cCAoYmluLCByci0+bmFtZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcnItPmVsZW1lbnQgPSBzdHJjbXAgKEdTVF9FTEVNRU5UX05BTUUgKHBpcGVsaW5lKSwgcnItPm5hbWUpID09IDAgPwotCQlnc3Rfb2JqZWN0X3JlZihwaXBlbGluZSkgOiBOVUxMOwotICB9Ci0gIGlmKHJyLT5lbGVtZW50KSByZXR1cm4gMDsgLyogcmVzb2x2ZWQgKi8KLSAgZWxzZSAgICAgICAgICAgIHJldHVybiAtMTsgLyogbm90IGZvdW5kICovCi19Ci0KLXN0YXRpYyB2b2lkIGdzdF9wYXJzZV9mcmVlX2RlbGF5ZWRfc2V0IChEZWxheWVkU2V0ICpzZXQpCi17Ci0gIGdfZnJlZShzZXQtPm5hbWUpOwotICBnX2ZyZWUoc2V0LT52YWx1ZV9zdHIpOwotICBnX3NsaWNlX2ZyZWUoRGVsYXllZFNldCwgc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgZ3N0X3BhcnNlX25ld19jaGlsZChHc3RDaGlsZFByb3h5ICpjaGlsZF9wcm94eSwgR09iamVjdCAqb2JqZWN0LAotICAgIGNvbnN0IGdjaGFyICogbmFtZSwgZ3BvaW50ZXIgZGF0YSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9wYXJzZV9hZGRfZGVsYXllZF9zZXQgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIGdjaGFyICpuYW1lLCBnY2hhciAqdmFsdWVfc3RyKQotewotICBEZWxheWVkU2V0ICpkYXRhID0gZ19zbGljZV9uZXcwIChEZWxheWVkU2V0KTsKLQotICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfUElQRUxJTkUsIGVsZW1lbnQsICJkZWxheWluZyBwcm9wZXJ0eSBzZXQgJXMgdG8gJXMiLAotICAgIG5hbWUsIHZhbHVlX3N0cik7Ci0KLSAgZGF0YS0+bmFtZSA9IGdfc3RyZHVwKG5hbWUpOwotICBkYXRhLT52YWx1ZV9zdHIgPSBnX3N0cmR1cCh2YWx1ZV9zdHIpOwotICBkYXRhLT5zaWduYWxfaWQgPSBnX3NpZ25hbF9jb25uZWN0X2RhdGEoZWxlbWVudCwgImNoaWxkLWFkZGVkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGdzdF9wYXJzZV9uZXdfY2hpbGQpLCBkYXRhLCAoR0Nsb3N1cmVOb3RpZnkpCi0gICAgICBnc3RfcGFyc2VfZnJlZV9kZWxheWVkX3NldCwgKEdDb25uZWN0RmxhZ3MpIDApOwotCi0gIC8qIEZJWE1FOiB3ZSB3b3VsZCBuZWVkIHRvIGxpc3RlbiBvbiBhbGwgaW50ZXJtZWRpYXRlIGJpbnMgdG9vICovCi0gIGlmIChHU1RfSVNfQklOIChlbGVtZW50KSkgewotICAgIGdjaGFyICoqbmFtZXMsICoqY3VycmVudDsKLSAgICBHc3RFbGVtZW50ICpwYXJlbnQsICpjaGlsZDsKLQotICAgIGN1cnJlbnQgPSBuYW1lcyA9IGdfc3Ryc3BsaXQgKG5hbWUsICI6OiIsIC0xKTsKLSAgICBwYXJlbnQgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOX0NBU1QgKGVsZW1lbnQpLCBjdXJyZW50WzBdKTsKLSAgICBjdXJyZW50Kys7Ci0gICAgd2hpbGUgKHBhcmVudCAmJiBjdXJyZW50WzBdKSB7Ci0gICAgICBjaGlsZCA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBhcmVudCksIGN1cnJlbnRbMF0pOwotICAgICAgaWYgKCFjaGlsZCAmJiBjdXJyZW50WzFdKSB7Ci0gICAgICAgIGNoYXIgKnN1Yl9uYW1lID0gZ19zdHJqb2ludiAoIjo6IiwgJmN1cnJlbnRbMF0pOwotCi0gICAgICAgIGdzdF9wYXJzZV9hZGRfZGVsYXllZF9zZXQocGFyZW50LCBzdWJfbmFtZSwgdmFsdWVfc3RyKTsKLSAgICAgICAgZ19mcmVlIChzdWJfbmFtZSk7Ci0gICAgICB9Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOwotICAgICAgcGFyZW50ID0gY2hpbGQ7Ci0gICAgICBjdXJyZW50Kys7Ci0gICAgfQotICAgIGlmIChwYXJlbnQpCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOwotICAgIGdfc3RyZnJlZXYgKG5hbWVzKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBnc3RfcGFyc2VfbmV3X2NoaWxkKEdzdENoaWxkUHJveHkgKmNoaWxkX3Byb3h5LCBHT2JqZWN0ICpvYmplY3QsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lLCBncG9pbnRlciBkYXRhKQotewotICBEZWxheWVkU2V0ICpzZXQgPSAoRGVsYXllZFNldCAqKSBkYXRhOwotICBHUGFyYW1TcGVjICpwc3BlYzsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIEdPYmplY3QgKnRhcmdldCA9IE5VTEw7Ci0gIEdUeXBlIHZhbHVlX3R5cGU7Ci0KLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1BJUEVMSU5FLCBjaGlsZF9wcm94eSwgIm5ldyBjaGlsZCAlcywgY2hlY2tpbmcgcHJvcGVydHkgJXMiLAotICAgICAgbmFtZSwgc2V0LT5uYW1lKTsKLQotICBpZiAoZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAoY2hpbGRfcHJveHksIHNldC0+bmFtZSwgJnRhcmdldCwgJnBzcGVjKSkgewotICAgIGdib29sZWFuIGdvdF92YWx1ZSA9IEZBTFNFOwotCi0gICAgdmFsdWVfdHlwZSA9IHBzcGVjLT52YWx1ZV90eXBlOwotCi0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1BJUEVMSU5FLCBjaGlsZF9wcm94eSwgInBhcnNpbmcgZGVsYXllZCBwcm9wZXJ0eSAlcyBhcyBhICVzIGZyb20gJXMiLAotICAgICAgcHNwZWMtPm5hbWUsIGdfdHlwZV9uYW1lICh2YWx1ZV90eXBlKSwgc2V0LT52YWx1ZV9zdHIpOwotICAgIGdfdmFsdWVfaW5pdCAoJnYsIHZhbHVlX3R5cGUpOwotICAgIGlmIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2LCBzZXQtPnZhbHVlX3N0cikpCi0gICAgICBnb3RfdmFsdWUgPSBUUlVFOwotICAgIGVsc2UgaWYgKGdfdHlwZV9pc19hICh2YWx1ZV90eXBlLCBHU1RfVFlQRV9FTEVNRU5UKSkgewotICAgICAgIEdzdEVsZW1lbnQgKmJpbjsKLQotICAgICAgIGJpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbl9mdWxsIChzZXQtPnZhbHVlX3N0ciwgVFJVRSwgTlVMTCwKLSAgICAgICAgICAgR1NUX1BBUlNFX0ZMQUdfTk9fU0lOR0xFX0VMRU1FTlRfQklOUyB8IEdTVF9QQVJTRV9GTEFHX1BMQUNFX0lOX0JJTiwgTlVMTCk7Ci0gICAgICAgaWYgKGJpbikgewotICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmdiwgYmluKTsKLSAgICAgICAgIGdvdF92YWx1ZSA9IFRSVUU7Ci0gICAgICAgfQotICAgIH0KLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGNoaWxkX3Byb3h5LCBzZXQtPnNpZ25hbF9pZCk7Ci0gICAgaWYgKCFnb3RfdmFsdWUpCi0gICAgICBnb3RvIGVycm9yOwotICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAodGFyZ2V0LCBwc3BlYy0+bmFtZSwgJnYpOwotICB9IGVsc2UgewotICAgIGNvbnN0IGdjaGFyICpvYmpfbmFtZSA9IEdTVF9PQkpFQ1RfTkFNRShvYmplY3QpOwotICAgIGdpbnQgbGVuID0gc3RybGVuIChvYmpfbmFtZSk7Ci0KLSAgICAvKiBkbyBhIGRlbGF5ZWQgc2V0ICovCi0gICAgaWYgKChzdHJsZW4gKHNldC0+bmFtZSkgPiAobGVuICsgMikpICYmICFzdHJuY21wIChzZXQtPm5hbWUsIG9ial9uYW1lLCBsZW4pICYmICFzdHJuY21wICgmc2V0LT5uYW1lW2xlbl0sICI6OiIsIDIpKSB7Ci0gICAgICBnc3RfcGFyc2VfYWRkX2RlbGF5ZWRfc2V0IChHU1RfRUxFTUVOVChjaGlsZF9wcm94eSksIHNldC0+bmFtZSwgc2V0LT52YWx1ZV9zdHIpOwotICAgIH0KLSAgfQotCi1vdXQ6Ci0gIGlmIChHX0lTX1ZBTFVFICgmdikpCi0gICAgZ192YWx1ZV91bnNldCAoJnYpOwotICBpZiAodGFyZ2V0KQotICAgIGdfb2JqZWN0X3VucmVmICh0YXJnZXQpOwotICByZXR1cm47Ci0KLWVycm9yOgotICBHU1RfQ0FUX0VSUk9SIChHU1RfQ0FUX1BJUEVMSU5FLCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gJSIKLSAgICAgIEdTVF9QVFJfRk9STUFULCBwc3BlYy0+bmFtZSwgdGFyZ2V0KTsKLSAgZ290byBvdXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGdzdF9wYXJzZV9lbGVtZW50X3NldCAoZ2NoYXIgKnZhbHVlLCBHc3RFbGVtZW50ICplbGVtZW50LCBncmFwaF90ICpncmFwaCkKLXsKLSAgR1BhcmFtU3BlYyAqcHNwZWMgPSBOVUxMOwotICBnY2hhciAqcG9zID0gdmFsdWU7Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotICBHT2JqZWN0ICp0YXJnZXQgPSBOVUxMOwotICBHVHlwZSB2YWx1ZV90eXBlOwotCi0gIC8qIGRvIG5vdGhpbmcgaWYgYXNzaWdubWVudCBpcyBmb3IgbWlzc2luZyBlbGVtZW50ICovCi0gIGlmIChlbGVtZW50ID09IE5VTEwpCi0gICAgZ290byBvdXQ7Ci0KLSAgLyogcGFyc2UgdGhlIHN0cmluZywgc28gdGhlIHByb3BlcnR5IG5hbWUgaXMgbnVsbC10ZXJtaW5hdGVkIGFuZCBwb3MgcG9pbnRzCi0gICAgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHZhbHVlICovCi0gIHdoaWxlICghZ19hc2NpaV9pc3NwYWNlICgqcG9zKSAmJiAoKnBvcyAhPSAnPScpKSBwb3MrKzsKLSAgaWYgKCpwb3MgPT0gJz0nKSB7Ci0gICAgKnBvcyA9ICdcMCc7Ci0gIH0gZWxzZSB7Ci0gICAgKnBvcyA9ICdcMCc7Ci0gICAgcG9zKys7Ci0gICAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnBvcykpIHBvcysrOwotICB9Ci0gIHBvcysrOwotICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqcG9zKSkgcG9zKys7Ci0gIC8qIHRydW5jYXRlIGEgc3RyaW5nIGlmIGl0IGlzIGRlbGltaXRlZCB3aXRoIGRvdWJsZSBxdW90ZXMgKi8KLSAgaWYgKCpwb3MgPT0gJyInICYmIHBvc1tzdHJsZW4gKHBvcykgLSAxXSA9PSAnIicpIHsKLSAgICBwb3MrKzsKLSAgICBwb3Nbc3RybGVuIChwb3MpIC0gMV0gPSAnXDAnOwotICB9Ci0gIGdzdF9wYXJzZV91bmVzY2FwZSAocG9zKTsKLQotICBpZiAoR1NUX0lTX0NISUxEX1BST1hZIChlbGVtZW50KSkgewotICAgIGlmICghZ3N0X2NoaWxkX3Byb3h5X2xvb2t1cCAoR1NUX0NISUxEX1BST1hZIChlbGVtZW50KSwgdmFsdWUsICZ0YXJnZXQsICZwc3BlYykpIHsKLSAgICAgIC8qIGRvIGEgZGVsYXllZCBzZXQgKi8KLSAgICAgIGdzdF9wYXJzZV9hZGRfZGVsYXllZF9zZXQgKGVsZW1lbnQsIHZhbHVlLCBwb3MpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBwc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKEdfT0JKRUNUX0dFVF9DTEFTUyAoZWxlbWVudCksIHZhbHVlKTsKLSAgICBpZiAocHNwZWMgIT0gTlVMTCkgewotICAgICAgdGFyZ2V0ID0gZ19vYmplY3RfcmVmIChlbGVtZW50KTsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9QSVBFTElORSwgdGFyZ2V0LCAiZm91bmQgJXMgcHJvcGVydHkiLCB2YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9QUk9QRVJUWSwgXAotICAgICAgICAgIF8oIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIpLCB2YWx1ZSwgXAotICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgICB9Ci0gIH0KLQotICBpZiAocHNwZWMgIT0gTlVMTCAmJiB0YXJnZXQgIT0gTlVMTCkgewotICAgIGdib29sZWFuIGdvdF92YWx1ZSA9IEZBTFNFOwotCi0gICAgdmFsdWVfdHlwZSA9IHBzcGVjLT52YWx1ZV90eXBlOwotCi0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1BJUEVMSU5FLCBlbGVtZW50LCAicGFyc2luZyBwcm9wZXJ0eSAlcyBhcyBhICVzIiwKLSAgICAgICAgcHNwZWMtPm5hbWUsIGdfdHlwZV9uYW1lICh2YWx1ZV90eXBlKSk7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ2LCB2YWx1ZV90eXBlKTsKLSAgICBpZiAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdiwgcG9zKSkKLSAgICAgIGdvdF92YWx1ZSA9IFRSVUU7Ci0gICAgZWxzZSBpZiAoZ190eXBlX2lzX2EgKHZhbHVlX3R5cGUsIEdTVF9UWVBFX0VMRU1FTlQpKSB7Ci0gICAgICAgR3N0RWxlbWVudCAqYmluOwotCi0gICAgICAgYmluID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uX2Z1bGwgKHBvcywgVFJVRSwgTlVMTCwKLSAgICAgICAgICAgR1NUX1BBUlNFX0ZMQUdfTk9fU0lOR0xFX0VMRU1FTlRfQklOUyB8IEdTVF9QQVJTRV9GTEFHX1BMQUNFX0lOX0JJTiwgTlVMTCk7Ci0gICAgICAgaWYgKGJpbikgewotICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmdiwgYmluKTsKLSAgICAgICAgIGdvdF92YWx1ZSA9IFRSVUU7Ci0gICAgICAgfQotICAgIH0KLSAgICBpZiAoIWdvdF92YWx1ZSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5ICh0YXJnZXQsIHBzcGVjLT5uYW1lLCAmdik7Ci0gIH0KLQotb3V0OgotICBnc3RfcGFyc2Vfc3RyZnJlZSAodmFsdWUpOwotICBpZiAoR19JU19WQUxVRSAoJnYpKQotICAgIGdfdmFsdWVfdW5zZXQgKCZ2KTsKLSAgaWYgKHRhcmdldCkKLSAgICBnX29iamVjdF91bnJlZiAodGFyZ2V0KTsKLSAgcmV0dXJuOwotCi1lcnJvcjoKLSAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9DT1VMRF9OT1RfU0VUX1BST1BFUlRZLAotICAgICAgICAgXygiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIiksCi0JIHZhbHVlLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSwgcG9zKTsKLSAgZ290byBvdXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGdzdF9wYXJzZV9mcmVlX3JlZmVyZW5jZSAocmVmZXJlbmNlX3QgKnJyKQotewotICBpZihyci0+ZWxlbWVudCkgZ3N0X29iamVjdF91bnJlZihyci0+ZWxlbWVudCk7Ci0gIGdzdF9wYXJzZV9zdHJmcmVlIChyci0+bmFtZSk7Ci0gIGdfc2xpc3RfZm9yZWFjaCAocnItPnBhZHMsIChHRnVuYykgZ3N0X3BhcnNlX3N0cmZyZWUsIE5VTEwpOwotICBnX3NsaXN0X2ZyZWUgKHJyLT5wYWRzKTsKLX0KLQotc3RhdGljIHZvaWQgZ3N0X3BhcnNlX2ZyZWVfbGluayAobGlua190ICpsaW5rKQotewotICBnc3RfcGFyc2VfZnJlZV9yZWZlcmVuY2UgKCYobGluay0+c3JjKSk7Ci0gIGdzdF9wYXJzZV9mcmVlX3JlZmVyZW5jZSAoJihsaW5rLT5zaW5rKSk7Ci0gIGlmIChsaW5rLT5jYXBzKSBnc3RfY2Fwc191bnJlZiAobGluay0+Y2Fwcyk7Ci0gIGdzdF9wYXJzZV9saW5rX2ZyZWUgKGxpbmspOwotfQotCi1zdGF0aWMgdm9pZCBnc3RfcGFyc2VfZnJlZV9jaGFpbiAoY2hhaW5fdCAqY2gpCi17Ci0gIEdTTGlzdCAqd2FsazsKLSAgZ3N0X3BhcnNlX2ZyZWVfcmVmZXJlbmNlICgmKGNoLT5maXJzdCkpOwotICBnc3RfcGFyc2VfZnJlZV9yZWZlcmVuY2UgKCYoY2gtPmxhc3QpKTsKLSAgZm9yKHdhbGs9Y2gtPmVsZW1lbnRzO3dhbGs7d2Fsaz13YWxrLT5uZXh0KQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHdhbGstPmRhdGEpOwotICBnX3NsaXN0X2ZyZWUgKGNoLT5lbGVtZW50cyk7Ci0gIGdzdF9wYXJzZV9jaGFpbl9mcmVlIChjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdzdF9wYXJzZV9mcmVlX2RlbGF5ZWRfbGluayAoRGVsYXllZExpbmsgKmxpbmspCi17Ci0gIGdfZnJlZSAobGluay0+c3JjX3BhZCk7Ci0gIGdfZnJlZSAobGluay0+c2lua19wYWQpOwotICBpZiAobGluay0+Y2FwcykgZ3N0X2NhcHNfdW5yZWYgKGxpbmstPmNhcHMpOwotICBnX3NsaWNlX2ZyZWUgKERlbGF5ZWRMaW5rLCBsaW5rKTsKLX0KLQotI2RlZmluZSBQUkVUVFlfUEFEX05BTUVfRk1UICIlcyAlcyBvZiAlcyBuYW1lZCAlcyIKLSNkZWZpbmUgUFJFVFRZX1BBRF9OQU1FX0FSR1MoZWxlbSwgcGFkX25hbWUpIFwKLSAgKHBhZF9uYW1lID8gInBhZCAiIDogInNvbWUiKSwgKHBhZF9uYW1lID8gcGFkX25hbWUgOiAicGFkIiksIFwKLSAgR19PQkpFQ1RfVFlQRV9OQU1FKGVsZW0pLCBHU1RfU1RSX05VTEwgKEdTVF9FTEVNRU5UX05BTUUgKGVsZW0pKQotCi1zdGF0aWMgdm9pZCBnc3RfcGFyc2Vfbm9fbW9yZV9wYWRzIChHc3RFbGVtZW50ICpzcmMsIGdwb2ludGVyIGRhdGEpCi17Ci0gIERlbGF5ZWRMaW5rICpsaW5rID0gZGF0YTsKLQotICBHU1RfRUxFTUVOVF9XQVJOSU5HKHNyYywgUEFSU0UsIERFTEFZRURfTElOSywKLSAgICAoXygiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iKSksCi0gICAgKCJmYWlsZWQgZGVsYXllZCBsaW5raW5nICIgUFJFVFRZX1BBRF9OQU1FX0ZNVCAiIHRvICIgUFJFVFRZX1BBRF9OQU1FX0ZNVCwKLSAgICAgICAgUFJFVFRZX1BBRF9OQU1FX0FSR1MgKHNyYywgbGluay0+c3JjX3BhZCksCi0gICAgICAgIFBSRVRUWV9QQURfTkFNRV9BUkdTIChsaW5rLT5zaW5rLCBsaW5rLT5zaW5rX3BhZCkpKTsKLSAgLyogd2Uga2VlcCB0aGUgaGFuZGxlcnMgY29ubmVjdGVkLCBzbyB0aGF0IGluIGNhc2UgYW4gZWxlbWVudCBzdGlsbCBhZGRzIGEgcGFkCi0gICAqIGRlc3BpdGUgbm8tbW9yZS1wYWRzLCB3ZSB3aWxsIGNvbnNpZGVyIGl0IGZvciBwZW5kaW5nIGRlbGF5ZWQgbGlua3MgKi8KLX0KLQotc3RhdGljIHZvaWQgZ3N0X3BhcnNlX2ZvdW5kX3BhZCAoR3N0RWxlbWVudCAqc3JjLCBHc3RQYWQgKnBhZCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgRGVsYXllZExpbmsgKmxpbmsgPSBkYXRhOwotCi0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QSVBFTElORSwKLSAgICAgICAgICAgICAgICAidHJ5aW5nIGRlbGF5ZWQgbGlua2luZyAiIFBSRVRUWV9QQURfTkFNRV9GTVQgIiB0byAiIFBSRVRUWV9QQURfTkFNRV9GTVQsCi0gICAgICAgICAgICAgICAgUFJFVFRZX1BBRF9OQU1FX0FSR1MgKHNyYywgbGluay0+c3JjX3BhZCksCi0gICAgICAgICAgICAgICAgUFJFVFRZX1BBRF9OQU1FX0FSR1MgKGxpbmstPnNpbmssIGxpbmstPnNpbmtfcGFkKSk7Ci0KLSAgaWYgKGdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCAoc3JjLCBsaW5rLT5zcmNfcGFkLCBsaW5rLT5zaW5rLAotICAgICAgbGluay0+c2lua19wYWQsIGxpbmstPmNhcHMpKSB7Ci0gICAgLyogZG8gdGhpcyBoZXJlLCB3ZSBkb24ndCB3YW50IHRvIGdldCBhbnkgcHJvYmxlbXMgbGF0ZXIgb24gd2hlbgotICAgICAqIHVubG9ja2luZyBzdGF0ZXMgKi8KLSAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BJUEVMSU5FLAotICAgICAgICAgICAgICAgICAgICJkZWxheWVkIGxpbmtpbmcgIiBQUkVUVFlfUEFEX05BTUVfRk1UICIgdG8gIiBQUkVUVFlfUEFEX05BTUVfRk1UICIgd29ya2VkIiwKLSAgICAgICAgICAgICAgIAkgICBQUkVUVFlfUEFEX05BTUVfQVJHUyAoc3JjLCBsaW5rLT5zcmNfcGFkKSwKLSAgICAgICAgICAgICAgICAgICBQUkVUVFlfUEFEX05BTUVfQVJHUyAobGluay0+c2luaywgbGluay0+c2lua19wYWQpKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKHNyYywgbGluay0+bm9fbW9yZV9wYWRzX3NpZ25hbF9pZCk7Ci0gICAgLyogcmVsZWFzZXMgJ2xpbmsnICovCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChzcmMsIGxpbmstPnBhZF9hZGRlZF9zaWduYWxfaWQpOwotICB9Ci19Ci0KLS8qIGJvdGggcGFkbmFtZXMgYW5kIHRoZSBjYXBzIG1heSBiZSBOVUxMICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wYXJzZV9wZXJmb3JtX2RlbGF5ZWRfbGluayAoR3N0RWxlbWVudCAqc3JjLCBjb25zdCBnY2hhciAqc3JjX3BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RWxlbWVudCAqc2luaywgY29uc3QgZ2NoYXIgKnNpbmtfcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpjYXBzKQotewotICBHTGlzdCAqdGVtcGxzID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0ICgKLSAgICAgIEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoc3JjKSk7Ci0KLSAgZm9yICg7IHRlbXBsczsgdGVtcGxzID0gdGVtcGxzLT5uZXh0KSB7Ci0gICAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsID0gKEdzdFBhZFRlbXBsYXRlICopIHRlbXBscy0+ZGF0YTsKLSAgICBpZiAoKEdTVF9QQURfVEVNUExBVEVfRElSRUNUSU9OICh0ZW1wbCkgPT0gR1NUX1BBRF9TUkMpICYmCi0gICAgICAgIChHU1RfUEFEX1RFTVBMQVRFX1BSRVNFTkNFKHRlbXBsKSA9PSBHU1RfUEFEX1NPTUVUSU1FUykpCi0gICAgewotICAgICAgRGVsYXllZExpbmsgKmRhdGEgPSBnX3NsaWNlX25ldyAoRGVsYXllZExpbmspOwotCi0gICAgICAvKiBUT0RPOiBtYXliZSB3ZSBzaG91bGQgY2hlY2sgaWYgc3JjX3BhZCBtYXRjaGVzIHRoaXMgdGVtcGxhdGUncyBuYW1lcyAqLwotCi0gICAgICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BJUEVMSU5FLAotICAgICAgICAgICAgICAgICAgICAgInRyeWluZyBkZWxheWVkIGxpbmsgIiBQUkVUVFlfUEFEX05BTUVfRk1UICIgdG8gIiBQUkVUVFlfUEFEX05BTUVfRk1ULAotICAgICAgICAgICAgICAgICAgICAgUFJFVFRZX1BBRF9OQU1FX0FSR1MgKHNyYywgc3JjX3BhZCksCi0gICAgICAgICAgICAgICAgICAgICBQUkVUVFlfUEFEX05BTUVfQVJHUyAoc2luaywgc2lua19wYWQpKTsKLQotICAgICAgZGF0YS0+c3JjX3BhZCA9IGdfc3RyZHVwIChzcmNfcGFkKTsKLSAgICAgIGRhdGEtPnNpbmsgPSBzaW5rOwotICAgICAgZGF0YS0+c2lua19wYWQgPSBnX3N0cmR1cCAoc2lua19wYWQpOwotICAgICAgaWYgKGNhcHMpIHsKLSAgICAgIAlkYXRhLT5jYXBzID0gZ3N0X2NhcHNfY29weSAoY2Fwcyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgCWRhdGEtPmNhcHMgPSBOVUxMOwotICAgICAgfQotICAgICAgZGF0YS0+cGFkX2FkZGVkX3NpZ25hbF9pZCA9IGdfc2lnbmFsX2Nvbm5lY3RfZGF0YSAoc3JjLCAicGFkLWFkZGVkIiwKLSAgICAgICAgICBHX0NBTExCQUNLIChnc3RfcGFyc2VfZm91bmRfcGFkKSwgZGF0YSwKLSAgICAgICAgICAoR0Nsb3N1cmVOb3RpZnkpIGdzdF9wYXJzZV9mcmVlX2RlbGF5ZWRfbGluaywgKEdDb25uZWN0RmxhZ3MpIDApOwotICAgICAgZGF0YS0+bm9fbW9yZV9wYWRzX3NpZ25hbF9pZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKHNyYywgIm5vLW1vcmUtcGFkcyIsCi0gICAgICAgICAgR19DQUxMQkFDSyAoZ3N0X3BhcnNlX25vX21vcmVfcGFkcyksIGRhdGEpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoKLSAqIHBlcmZvcm1zIGEgbGluayBhbmQgZnJlZXMgdGhlIHN0cnVjdC4gc3JjIGFuZCBzaW5rIGVsZW1lbnRzIG11c3QgYmUgZ2l2ZW4KLSAqIHJldHVybiB2YWx1ZXMgICAwIC0gbGluayBwZXJmb3JtZWQKLSAqICAgICAgICAgICAgICAgICAxIC0gbGluayBkZWxheWVkCi0gKiAgICAgICAgICAgICAgICA8MCAtIGVycm9yCi0gKi8KLXN0YXRpYyBnaW50Ci1nc3RfcGFyc2VfcGVyZm9ybV9saW5rIChsaW5rX3QgKmxpbmssIGdyYXBoX3QgKmdyYXBoKQotewotICBHc3RFbGVtZW50ICpzcmMgPSBsaW5rLT5zcmMuZWxlbWVudDsKLSAgR3N0RWxlbWVudCAqc2luayA9IGxpbmstPnNpbmsuZWxlbWVudDsKLSAgR1NMaXN0ICpzcmNzID0gbGluay0+c3JjLnBhZHM7Ci0gIEdTTGlzdCAqc2lua3MgPSBsaW5rLT5zaW5rLnBhZHM7Ci0gIGdfYXNzZXJ0IChHU1RfSVNfRUxFTUVOVCAoc3JjKSk7Ci0gIGdfYXNzZXJ0IChHU1RfSVNfRUxFTUVOVCAoc2luaykpOwotCi0gIEdTVF9DQVRfSU5GTyAoR1NUX0NBVF9QSVBFTElORSwKLSAgICAgICJsaW5raW5nICIgUFJFVFRZX1BBRF9OQU1FX0ZNVCAiIHRvICIgUFJFVFRZX1BBRF9OQU1FX0ZNVCAiICgldS8ldSkgd2l0aCBjYXBzIFwiJSIgR1NUX1BUUl9GT1JNQVQgIlwiIiwKLSAgICAgIFBSRVRUWV9QQURfTkFNRV9BUkdTIChzcmMsIGxpbmstPnNyYy5uYW1lKSwKLSAgICAgIFBSRVRUWV9QQURfTkFNRV9BUkdTIChzaW5rLCBsaW5rLT5zaW5rLm5hbWUpLAotICAgICAgZ19zbGlzdF9sZW5ndGggKHNyY3MpLCBnX3NsaXN0X2xlbmd0aCAoc2lua3MpLCBsaW5rLT5jYXBzKTsKLQotICBpZiAoIXNyY3MgfHwgIXNpbmtzKSB7Ci0gICAgaWYgKGdzdF9lbGVtZW50X2xpbmtfcGFkc19maWx0ZXJlZCAoc3JjLAotICAgICAgICBzcmNzID8gKGNvbnN0IGdjaGFyICopIHNyY3MtPmRhdGEgOiBOVUxMLCBzaW5rLAotICAgICAgICBzaW5rcyA/IChjb25zdCBnY2hhciAqKSBzaW5rcy0+ZGF0YSA6IE5VTEwsIGxpbmstPmNhcHMpKSB7Ci0gICAgICBnb3RvIHN1Y2Nlc3M7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChnc3RfcGFyc2VfcGVyZm9ybV9kZWxheWVkX2xpbmsgKHNyYywKLSAgICAgICAgICBzcmNzID8gKGNvbnN0IGdjaGFyICopIHNyY3MtPmRhdGEgOiBOVUxMLAotICAgICAgICAgIHNpbmssIHNpbmtzID8gKGNvbnN0IGdjaGFyICopIHNpbmtzLT5kYXRhIDogTlVMTCwgbGluay0+Y2FwcykpIHsKLQlnb3RvIHN1Y2Nlc3M7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAoZ19zbGlzdF9sZW5ndGggKGxpbmstPnNyYy5wYWRzKSAhPSBnX3NsaXN0X2xlbmd0aCAobGluay0+c2luay5wYWRzKSkgewotICAgIGdvdG8gZXJyb3I7Ci0gIH0KLSAgd2hpbGUgKHNyY3MgJiYgc2lua3MpIHsKLSAgICBjb25zdCBnY2hhciAqc3JjX3BhZCA9IChjb25zdCBnY2hhciAqKSBzcmNzLT5kYXRhOwotICAgIGNvbnN0IGdjaGFyICpzaW5rX3BhZCA9IChjb25zdCBnY2hhciAqKSBzaW5rcy0+ZGF0YTsKLSAgICBzcmNzID0gZ19zbGlzdF9uZXh0IChzcmNzKTsKLSAgICBzaW5rcyA9IGdfc2xpc3RfbmV4dCAoc2lua3MpOwotICAgIGlmIChnc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQgKHNyYywgc3JjX3BhZCwgc2luaywgc2lua19wYWQsCi0gICAgICAgIGxpbmstPmNhcHMpKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKGdzdF9wYXJzZV9wZXJmb3JtX2RlbGF5ZWRfbGluayAoc3JjLCBzcmNfcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luaywgc2lua19wYWQsCi0JCQkJCSAgbGluay0+Y2FwcykpIHsKLQljb250aW51ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLXN1Y2Nlc3M6Ci0gIGdzdF9wYXJzZV9mcmVlX2xpbmsgKGxpbmspOwotICByZXR1cm4gMDsKLQotZXJyb3I6Ci0gIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTElOSywKLSAgICAgIF8oImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIiksIEdTVF9FTEVNRU5UX05BTUUgKHNyYyksCi0gICAgICBHU1RfRUxFTUVOVF9OQU1FIChzaW5rKSk7Ci0gIGdzdF9wYXJzZV9mcmVlX2xpbmsgKGxpbmspOwotICByZXR1cm4gLTE7Ci19Ci0KLQotc3RhdGljIGludCB5eWVycm9yICh2b2lkICpzY2FubmVyLCBncmFwaF90ICpncmFwaCwgY29uc3QgY2hhciAqcyk7Ci0lfQotCi0ldW5pb24gewotICAgIGdjaGFyICpzczsKLSAgICBjaGFpbl90ICpjYzsKLSAgICBsaW5rX3QgKmxsOwotICAgIHJlZmVyZW5jZV90IHJyOwotICAgIEdzdEVsZW1lbnQgKmVlOwotICAgIEdTTGlzdCAqcHA7Ci0gICAgZ3JhcGhfdCAqZ2c7Ci19Ci0KLS8qIE5vIGdyYW1tYXIgYW1iaWd1aXRpZXMgZXhwZWN0ZWQsIEZBSUwgb3RoZXJ3aXNlICovCi0lZXhwZWN0IDAKLQotJXRva2VuIDxzcz4gUEFSU0VfVVJMCi0ldG9rZW4gPHNzPiBJREVOVElGSUVSCi0lbGVmdCAgPHNzPiBSRUYgUEFEUkVGIEJJTlJFRgotJXRva2VuIDxzcz4gQVNTSUdOTUVOVAotJXRva2VuIDxzcz4gTElOSwotCi0ldHlwZSA8c3M+IGJpbm9wZW5lcgotJXR5cGUgPGdnPiBncmFwaAotJXR5cGUgPGNjPiBjaGFpbiBiaW4gY2hhaW5saXN0IG9wZW5jaGFpbiBlbGVtZW50YXJ5Ci0ldHlwZSA8cnI+IHJlZmVyZW5jZQotJXR5cGUgPGxsPiBsaW5rCi0ldHlwZSA8ZWU+IGVsZW1lbnQKLSV0eXBlIDxwcD4gbW9yZXBhZHMgcGFkcyBhc3NpZ25tZW50cwotCi0lZGVzdHJ1Y3RvciB7CWdzdF9wYXJzZV9zdHJmcmVlICgkJCk7CQl9IDxzcz4KLSVkZXN0cnVjdG9yIHsJaWYoJCQpCi0JCSAgZ3N0X3BhcnNlX2ZyZWVfY2hhaW4oJCQpOwl9IDxjYz4KLSVkZXN0cnVjdG9yIHsJZ3N0X3BhcnNlX2ZyZWVfbGluayAoJCQpOwl9IDxsbD4KLSVkZXN0cnVjdG9yIHsJZ3N0X3BhcnNlX2ZyZWVfcmVmZXJlbmNlKCYoJCQpKTt9IDxycj4KLSVkZXN0cnVjdG9yIHsJZ3N0X29iamVjdF91bnJlZiAoJCQpOwkJfSA8ZWU+Ci0lZGVzdHJ1Y3RvciB7CUdTTGlzdCAqd2FsazsKLQkJZm9yKHdhbGs9JCQ7d2Fsazt3YWxrPXdhbGstPm5leHQpCi0JCSAgZ3N0X3BhcnNlX3N0cmZyZWUgKHdhbGstPmRhdGEpOwotCQlnX3NsaXN0X2ZyZWUgKCQkKTsJCX0gPHBwPgotCi0KLQotJWxlZnQgJygnICcpJwotJWxlZnQgJywnCi0lcmlnaHQgJy4nCi0lbGVmdCAnIScgJz0nCi0KLSVsZXgtcGFyYW0geyB2b2lkICpzY2FubmVyIH0KLSVwYXJzZS1wYXJhbSB7IHZvaWQgKnNjYW5uZXIgfQotJXBhcnNlLXBhcmFtIHsgZ3JhcGhfdCAqZ3JhcGggfQotJXB1cmUtcGFyc2VyCi0KLSVzdGFydCBncmFwaAotJSUKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogR3JhbW1hciBleHBsYW5hdGlvbjoKLSogICBfZWxlbWVudF9zIGFyZSBzcGVjaWZpZWQgYnkgYW4gaWRlbnRpZmllciBvZiB0aGVpciB0eXBlLgotKiAgIGEgbmFtZSBjYW4gYmUgZ2l2ZSBpbiB0aGUgb3B0aW9uYWwgcHJvcGVydHktYXNzaWdubWVudHMKLSoJY29mZmVlZWxlbWVudAotKglmYWtlc3JjIG5hbWU9am9obgotKglpZGVudGl0eSBzaWxlbmNlPWZhbHNlIG5hbWU9ZnJvZG8KLSogICAoY29udCdkKQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1lbGVtZW50OglJREVOVElGSUVSICAgICAJCSAgICAgIHsgJCQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCQxLCBOVUxMKTsKLQkJCQkJCWlmICgkJCA9PSBOVUxMKSB7Ci0JCQkJCQkgIGFkZF9taXNzaW5nX2VsZW1lbnQoZ3JhcGgsICQxKTsKLQkJCQkJCSAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQsIF8oIm5vIGVsZW1lbnQgXCIlc1wiIiksICQxKTsKLQkJCQkJCX0KLQkJCQkJCWdzdF9wYXJzZV9zdHJmcmVlICgkMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCXwJZWxlbWVudCBBU1NJR05NRU5UCSAgICAgIHsgZ3N0X3BhcnNlX2VsZW1lbnRfc2V0ICgkMiwgJDEsIGdyYXBoKTsKLQkJCQkJCSQkID0gJDE7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0JOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBHcmFtbWFyIGV4cGxhbmF0aW9uOiAoY29udCdkKQotKiAgIGEgZ3JhcGggaGFzIChwdXJlKSBfZWxlbWVudF9zLCBfYmluX3MgYW5kIF9saW5rX3MuCi0qICAgc2luY2UgYmlucyBhcmUgc3BlY2lhbCBlbGVtZW50cywgYmlucyBhbmQgZWxlbWVudHMgY2FuCi0qICAgYmUgZ2VuZXJhbGl6ZWQgYXMgX2VsZW1lbnRhcnlfLgotKiAgIFRoZSBjb25zdHJ1Y3Rpb24gb2YgX2Jpbl9zIHdpbGwgYmUgZGlzY3Vzc2VkIGxhdGVyLgotKiAgIChjb250J2QpCi0qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWVsZW1lbnRhcnk6Ci0JZWxlbWVudAkJCQkgICAgICB7ICQkID0gZ3N0X3BhcnNlX2NoYWluX25ldyAoKTsKLQkJCQkJCS8qIGdfcHJpbnQgKCJAJXA6IENIQUlOaW5nIGVsZW1lbnRhcnlcbiIsICQkKTsgKi8KLQkJCQkJCSQkLT5maXJzdC5lbGVtZW50ID0gJDE/IGdzdF9vYmplY3RfcmVmKCQxKSA6IE5VTEw7Ci0JCQkJCQkkJC0+bGFzdC5lbGVtZW50ID0gJDE/IGdzdF9vYmplY3RfcmVmKCQxKSA6IE5VTEw7Ci0JCQkJCQkkJC0+Zmlyc3QubmFtZSA9ICQkLT5sYXN0Lm5hbWUgPSBOVUxMOwotCQkJCQkJJCQtPmZpcnN0LnBhZHMgPSAkJC0+bGFzdC5wYWRzID0gTlVMTDsKLQkJCQkJCSQkLT5lbGVtZW50cyA9ICQxID8gZ19zbGlzdF9wcmVwZW5kIChOVUxMLCAkMSkgOiBOVUxMOwotCQkJCQkgICAgICB9Ci0JfCBiaW4JCQkJICAgICAgeyAkJD0kMTsgfQotCTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogR3JhbW1hciBleHBsYW5hdGlvbjogKGNvbnQnZCkKLSogICBhIF9jaGFpbl8gaXMgYSBsaXN0IG9mIF9lbGVtZW50YXJ5X3MgdGhhdCBoYXZlIF9saW5rX3MgaW5iZXR3ZWVuCi0qICAgd2hpY2ggYXJlIHJlcHJlc2VudGVkIHRocm91Z2ggaW5maXgtbm90YXRpb24uCi0qCi0qCWZha2VzcmMgISBzb21ldHJhbnNmb3JtYXRpb24gISBmYWtlc2luawotKgotKiAgIGV2ZXJ5IF9saW5rXyBjYW4gYmUgYXVnbWVudGVkIHdpdGggX3BhZHNfLgotKgotKgljb2ZmZWVzcmMgLnNvdW5kICEgc3BlYWtlcnNpbmsKLSoJbXVsdGlzcmMgIC5tb3ZpZSxhZHMgISAucHJvamVjdG9yLHNtYWxsc2NyZWVuIG11bHRpc2luawotKgotKiAgIGFuZCBldmVyeSBfbGlua18gY2FuIGJlIHNldHVwIHRvIGZpbHRlciBtZWRpYS10eXBlcwotKgltZWRpYXNyYyAhIGF1ZGlvL3gtcmF3LCBzaWduZWQ9VFJVRSAhIHN0ZXJlb3NpbmsKLSoKLSogVXNlciBISU5UOgotKiAgIGlmIHRoZSBsZXhlciBkb2VzIG5vdCByZWNvZ25pemUgeW91ciBtZWRpYS10eXBlIGl0Ci0qICAgd2lsbCBtYWtlIGl0IGFuIGVsZW1lbnQgbmFtZS4gdGhhdCByZXN1bHRzIGluIGVycm9ycwotKiAgIGxpa2UKLSoJTk8gU1VDSCBFTEVNRU5UOiBubyBlbGVtZW50IGF1ZGlvN3gtcmF3Ci0qICAgJzcnIHZzLiAnLycgaW4gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUVdFUlRaCi0qCi0qIFBhcnNpbmcgSElOVDoKLSogICBpbiB0aGUgcGFyc2VyIHdlIG5lZWQgdG8gZGlmZmVyIGJldHdlZW4gY2hhaW5zIHRoYXQgY2FuCi0qICAgYmUgZXh0ZW5kZWQgYnkgbW9yZSBlbGVtZW50YXJpZXMgKF9vcGVuY2hhaW5fKSBhbmQgb3RoZXJzCi0qICAgdGhhdCBhcmUgc3ludGFjdGljYWxseSBjbG9zZWQgKGhhbmRsZWQgbGF0ZXIgaW4gdGhpcyBmaWxlKS4KLSoJKGUuZy4gZmFrZXNyYyAhIHNpbmtyZWZlcmVuY2VuYW1lLnBhZG5hbWUpCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWNoYWluOglvcGVuY2hhaW4JCQkgICAgICB7ICQkPSQxOwotCQkJCQkJaWYoJCQtPmxhc3QubmFtZSl7Ci0JCQkJCQkJU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9TWU5UQVgsCi0JCQkJCQkJXygidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciKSwgJCQtPmxhc3QubmFtZSk7Ci0JCQkJCQkJZ3N0X3BhcnNlX3N0cmZyZWUoJCQtPmxhc3QubmFtZSk7Ci0JCQkJCQkJJCQtPmxhc3QubmFtZT1OVUxMOwotCQkJCQkJfQotCQkJCQkJaWYoJCQtPmxhc3QucGFkcyl7Ci0JCQkJCQkJU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9TWU5UQVgsCi0JCQkJCQkJXygidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIiksIChnY2hhciopJCQtPmxhc3QucGFkcy0+ZGF0YSk7Ci0JCQkJCQkJZ19zbGlzdF9mb3JlYWNoICgkJC0+bGFzdC5wYWRzLCAoR0Z1bmMpIGdzdF9wYXJzZV9zdHJmcmVlLCBOVUxMKTsKLQkJCQkJCQlnX3NsaXN0X2ZyZWUgKCQkLT5sYXN0LnBhZHMpOwotCQkJCQkJCSQkLT5sYXN0LnBhZHM9TlVMTDsKLQkJCQkJCX0KLQkJCQkJICAgICAgfQotCTsKLQotb3BlbmNoYWluOgotCWVsZW1lbnRhcnkgcGFkcwkJCSAgICAgIHsgJCQ9JDE7Ci0JCQkJCQkkJC0+bGFzdC5wYWRzID0gZ19zbGlzdF9jb25jYXQgKCQkLT5sYXN0LnBhZHMsICQyKTsKLQkJCQkJCS8qIGdfcHJpbnQgKCJAJXBAJXA6IEZLSSBlbGVtZW50YXJ5IHBhZHNcbiIsICQxLCAkJC0+bGFzdC5wYWRzKTsgKi8KLQkJCQkJICAgICAgfQotCXwgb3BlbmNoYWluIGxpbmsgcGFkcyBlbGVtZW50YXJ5IHBhZHMKLQkJCQkJICAgICAgewotCQkJCQkJJDItPnNyYyAgPSAkMS0+bGFzdDsKLQkJCQkJCSQyLT5zaW5rID0gJDQtPmZpcnN0OwotCQkJCQkJJDItPnNpbmsucGFkcyA9IGdfc2xpc3RfY29uY2F0ICgkMywgJDItPnNpbmsucGFkcyk7Ci0JCQkJCQlUUllfU0VUVVBfTElOSygkMik7Ci0JCQkJCQkkNC0+Zmlyc3QgPSAkMS0+Zmlyc3Q7Ci0JCQkJCQkkNC0+ZWxlbWVudHMgPSBnX3NsaXN0X2NvbmNhdCAoJDEtPmVsZW1lbnRzLCAkNC0+ZWxlbWVudHMpOwotCQkJCQkJZ3N0X3BhcnNlX2NoYWluX2ZyZWUoJDEpOwotCQkJCQkJJCQgPSAkNDsKLQkJCQkJCSQkLT5sYXN0LnBhZHMgPSBnX3NsaXN0X2NvbmNhdCAoJCQtPmxhc3QucGFkcywgJDUpOwotCQkJCQkgICAgICB9Ci0KLQk7Ci0KLWxpbms6CUxJTksJCQkJICAgICAgeyAkJCA9IGdzdF9wYXJzZV9saW5rX25ldyAoKTsKLQkJCQkJCSQkLT5zcmMuZWxlbWVudCA9IE5VTEw7Ci0JCQkJCQkkJC0+c2luay5lbGVtZW50ID0gTlVMTDsKLQkJCQkJCSQkLT5zcmMubmFtZSA9IE5VTEw7Ci0JCQkJCQkkJC0+c2luay5uYW1lID0gTlVMTDsKLQkJCQkJCSQkLT5zcmMucGFkcyA9IE5VTEw7Ci0JCQkJCQkkJC0+c2luay5wYWRzID0gTlVMTDsKLQkJCQkJCSQkLT5jYXBzID0gTlVMTDsKLQkJCQkJCWlmICgkMSkgewotCQkJCQkJICAkJC0+Y2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgkMSk7Ci0JCQkJCQkgIGlmICgkJC0+Y2FwcyA9PSBOVUxMKQotCQkJCQkJICAgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTElOSywgXygiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIiksICQxKTsKLQkJCQkJCSAgZ3N0X3BhcnNlX3N0cmZyZWUgKCQxKTsKLQkJCQkJCX0KLQkJCQkJICAgICAgfQotCTsKLXBhZHM6CQkvKiBOT1AgKi8JCSAgICAgIHsgJCQgPSBOVUxMOyB9Ci0JfAlQQURSRUYgbW9yZXBhZHMJCSAgICAgIHsgJCQgPSAkMjsKLQkJCQkJCSQkID0gZ19zbGlzdF9wcmVwZW5kICgkJCwgJDEpOwotCQkJCQkgICAgICB9Ci0JOwotbW9yZXBhZHM6CS8qIE5PUCAqLwkJICAgICAgeyAkJCA9IE5VTEw7IH0KLQl8CScsJyBJREVOVElGSUVSIG1vcmVwYWRzCSAgICAgIHsgJCQgPSBnX3NsaXN0X3ByZXBlbmQgKCQzLCAkMik7IH0KLQk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIEdyYW1tYXIgZXhwbGFuYXRpb246IChjb250J2QpCi0qICAgdGhlIGZpcnN0IGFuZCBsYXN0IGVsZW1lbnRzIG9mIGEgX2NoYWluXyBjYW4gYmUgZ2l2ZQotKiAgIGFzIFVSTC4gVGhpcyBjcmVhdGVzIHNwZWNpYWwgZWxlbWVudHMgdGhhdCBmaXQgdGhlIFVSTC4KLSoKLSoJZmFrZXNyYyAhIGh0dHA6Ly9mYWtlLXNpbmsub3JnCi0qICAgICAgIGh0dHA6Ly9zb21lc291cmNlLm9yZyAhIGZha2VzaW5rCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotY2hhaW46CW9wZW5jaGFpbiBsaW5rIFBBUlNFX1VSTAkgICAgICB7IEdzdEVsZW1lbnQgKmVsZW1lbnQgPQotCQkJCQkJCSAgZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoR1NUX1VSSV9TSU5LLCAkMywgTlVMTCwgTlVMTCk7Ci0JCQkJCQkvKiBGSVhNRTogZ2V0IGFuZCBwYXJzZSBlcnJvciBwcm9wZXJseSAqLwotCQkJCQkJaWYgKCFlbGVtZW50KSB7Ci0JCQkJCQkgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5ULAotCQkJCQkJCSAgXygibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIiksICQzKTsKLQkJCQkJCX0KLQkJCQkJCSQkID0gJDE7Ci0JCQkJCQkkMi0+c2luay5lbGVtZW50ID0gZWxlbWVudD9nc3Rfb2JqZWN0X3JlZihlbGVtZW50KTpOVUxMOwotCQkJCQkJJDItPnNyYyA9ICQxLT5sYXN0OwotCQkJCQkJVFJZX1NFVFVQX0xJTksoJDIpOwotCQkJCQkJJCQtPmxhc3QuZWxlbWVudCA9IE5VTEw7Ci0JCQkJCQkkJC0+bGFzdC5uYW1lID0gTlVMTDsKLQkJCQkJCSQkLT5sYXN0LnBhZHMgPSBOVUxMOwotCQkJCQkJaWYoZWxlbWVudCkgJCQtPmVsZW1lbnRzID0gZ19zbGlzdF9hcHBlbmQgKCQkLT5lbGVtZW50cywgZWxlbWVudCk7Ci0JCQkJCQlnX2ZyZWUgKCQzKTsKLQkJCQkJICAgICAgfQotCTsKLW9wZW5jaGFpbjoKLQlQQVJTRV9VUkwJCQkgICAgICB7IEdzdEVsZW1lbnQgKmVsZW1lbnQgPQotCQkJCQkJCSAgZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoR1NUX1VSSV9TUkMsICQxLCBOVUxMLCBOVUxMKTsKLQkJCQkJCS8qIEZJWE1FOiBnZXQgYW5kIHBhcnNlIGVycm9yIHByb3Blcmx5ICovCi0JCQkJCQlpZiAoIWVsZW1lbnQpIHsKLQkJCQkJCSAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQsCi0JCQkJCQkgICAgXygibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiKSwgJDEpOwotCQkJCQkJfQotCQkJCQkJJCQgPSBnc3RfcGFyc2VfY2hhaW5fbmV3ICgpOwotCQkJCQkJLyogZ19wcmludCAoIkAlcDogQ0hBSU5pbmcgc3JjVVJMXG4iLCAkJCk7ICovCi0JCQkJCQkkJC0+Zmlyc3QuZWxlbWVudCA9IE5VTEw7Ci0JCQkJCQkkJC0+Zmlyc3QubmFtZSA9IE5VTEw7Ci0JCQkJCQkkJC0+Zmlyc3QucGFkcyA9IE5VTEw7Ci0JCQkJCQkkJC0+bGFzdC5lbGVtZW50ID0gZWxlbWVudCA/IGdzdF9vYmplY3RfcmVmKGVsZW1lbnQpOk5VTEw7Ci0JCQkJCQkkJC0+bGFzdC5uYW1lID0gTlVMTDsKLQkJCQkJCSQkLT5sYXN0LnBhZHMgPSBOVUxMOwotCQkJCQkJJCQtPmVsZW1lbnRzID0gZWxlbWVudCA/IGdfc2xpc3RfcHJlcGVuZCAoTlVMTCwgZWxlbWVudCkgIDogTlVMTDsKLQkJCQkJCWdfZnJlZSgkMSk7Ci0JCQkJCSAgICAgIH0KLQk7Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogR3JhbW1hciBleHBsYW5hdGlvbjogKGNvbnQnZCkKLSogICB0aGUgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHMgb2YgYSBfY2hhaW5fIGNhbiBiZSBsaW5rZWQKLSogICB0byBhIG5hbWVkIF9yZWZlcmVuY2VfICh3aXRoIG9wdGlvbmFsIHBhZHMpLgotKgotKglmYWtlc3JjICEgbmFtZU9mU2lua0VsZW1lbnQuCi0qCWZha2VzcmMgISBuYW1lT2ZTaW5rRWxlbWVudC5QYWRuYW1lCi0qCWZha2VzcmMgISBuYW1lT2ZTaW5rRWxlbWVudC5QYWRuYW1lLCBhbm90aGVyUGFkCi0qCW5hbWVPZlNvdXJjZS5QYWRuYW1lICEgZmFrZXNpbmsKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1jaGFpbjoJb3BlbmNoYWluIGxpbmsgcmVmZXJlbmNlCSAgICAgIHsgJCQgPSAkMTsKLQkJCQkJCSQyLT5zaW5rPSAkMzsKLQkJCQkJCSQyLT5zcmMgPSAkMS0+bGFzdDsKLQkJCQkJCVRSWV9TRVRVUF9MSU5LKCQyKTsKLQkJCQkJCSQkLT5sYXN0LmVsZW1lbnQgPSBOVUxMOwotCQkJCQkJJCQtPmxhc3QubmFtZSA9IE5VTEw7Ci0JCQkJCQkkJC0+bGFzdC5wYWRzID0gTlVMTDsKLQkJCQkJICAgICAgfQotCTsKLQotCi1vcGVuY2hhaW46Ci0JcmVmZXJlbmNlIAkJCSAgICAgIHsgJCQgPSBnc3RfcGFyc2VfY2hhaW5fbmV3ICgpOwotCQkJCQkJJCQtPmxhc3Q9JDE7Ci0JCQkJCQkkJC0+Zmlyc3QuZWxlbWVudCA9IE5VTEw7Ci0JCQkJCQkkJC0+Zmlyc3QubmFtZSA9IE5VTEw7Ci0JCQkJCQkkJC0+Zmlyc3QucGFkcyA9IE5VTEw7Ci0JCQkJCQkkJC0+ZWxlbWVudHMgPSBOVUxMOwotCQkJCQkgICAgICB9Ci0JOwotcmVmZXJlbmNlOglSRUYgbW9yZXBhZHMJCSAgICAgIHsKLQkJCQkJCWdjaGFyICpwYWRuYW1lID0gJDE7Ci0JCQkJCQlHU0xpc3QgKnBhZHMgPSAkMjsKLQkJCQkJCWlmIChwYWRuYW1lKSB7Ci0JCQkJCQkgIHdoaWxlICgqcGFkbmFtZSAhPSAnLicpIHBhZG5hbWUrKzsKLQkJCQkJCSAgKnBhZG5hbWUgPSAnXDAnOwotCQkJCQkJICBwYWRuYW1lKys7Ci0JCQkJCQkgIGlmICgqcGFkbmFtZSAhPSAnXDAnKQotCQkJCQkJICAgIHBhZHMgPSBnX3NsaXN0X3ByZXBlbmQgKHBhZHMsIGdzdF9wYXJzZV9zdHJkdXAgKHBhZG5hbWUpKTsKLQkJCQkJCX0KLQkJCQkJCSQkLmVsZW1lbnQ9TlVMTDsKLQkJCQkJCSQkLm5hbWU9JDE7Ci0JCQkJCQkkJC5wYWRzPXBhZHM7Ci0JCQkJCSAgICAgIH0KLQk7Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogR3JhbW1hciBleHBsYW5hdGlvbjogKGNvbnQnZCkKLSogICBhIF9jaGFpbmxpc3RfIGlzIGp1c3QgYSBsaXN0IG9mIF9jaGFpbl9zLgotKgotKiAgIFlvdSBjYW4gc3BlY2lmeSBfbGlua19zIHdpdGggbmFtZWQKLSogICBfcmVmZXJlbmNlXyBvbiBlYWNoIHNpZGUuIFRoYXQKLSogICB3b3JrcyBhbHJlYWR5IGFmdGVyIHRoZSBleHBsYW5hdGlvbnMgYWJvdmUuCi0qCXNvbWVTb3VyY2VOYW1lLlBhZCAhIHNvbWVTaW5rTmFtZS4KLSoJc29tZVNvdXJjZU5hbWUuUGFkLGFub3RoZXJQYWQgISBzb21lU2lua05hbWUuQXBhZCxCcGFkCi0qCi0qICAgSWYgYSBzeW50YXggZXJyb3Igb2NjdXJzLCB0aGUgYWxyZWFkeSBmaW5pc2hlZCBfY2hhaW5fcwotKiAgIGFuZCBfbGlua3NfIGFyZSBrZXB0IGludGFjdC4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWNoYWlubGlzdDogLyogTk9QICovCQkJICAgICAgeyAkJCA9IE5VTEw7IH0KLQl8IGNoYWlubGlzdCBjaGFpbgkJICAgICAgeyBpZiAoJDEpewotCQkJCQkJICBnc3RfcGFyc2VfZnJlZV9yZWZlcmVuY2UoJigkMS0+bGFzdCkpOwotCQkJCQkJICBnc3RfcGFyc2VfZnJlZV9yZWZlcmVuY2UoJigkMi0+Zmlyc3QpKTsKLQkJCQkJCSAgJDItPmZpcnN0ID0gJDEtPmZpcnN0OwotCQkJCQkJICAkMi0+ZWxlbWVudHMgPSBnX3NsaXN0X2NvbmNhdCAoJDEtPmVsZW1lbnRzLCAkMi0+ZWxlbWVudHMpOwotCQkJCQkJICBnc3RfcGFyc2VfY2hhaW5fZnJlZSAoJDEpOwotCQkJCQkJfQotCQkJCQkJJCQgPSAkMjsKLQkJCQkJICAgICAgfQotCXwgY2hhaW5saXN0IGVycm9yCQkgICAgICB7ICQkPSQxOwotCQkJCQkJR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QSVBFTElORSwidHJ5aW5nIHRvIHJlY292ZXIgZnJvbSBzeW50YXggZXJyb3IiKTsKLQkJCQkJCVNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfU1lOVEFYLCBfKCJzeW50YXggZXJyb3IiKSk7Ci0JCQkJCSAgICAgIH0KLQk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIEdyYW1tYXIgZXhwbGFuYXRpb246IChjb250J2QpCi0qICAgX2JpbnNfCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLWFzc2lnbm1lbnRzOgkvKiBOT1AgKi8JCSAgICAgIHsgJCQgPSBOVUxMOyB9Ci0JfAlBU1NJR05NRU5UIGFzc2lnbm1lbnRzIAkgICAgICB7ICQkID0gZ19zbGlzdF9wcmVwZW5kICgkMiwgJDEpOyB9Ci0JOwotCi1iaW5vcGVuZXI6CScoJwkJCSAgICAgIHsgJCQgPSBnc3RfcGFyc2Vfc3RyZHVwKCJiaW4iKTsgfQotCXwJQklOUkVGCQkJICAgICAgeyAkJCA9ICQxOyB9Ci0JOwotYmluOgliaW5vcGVuZXIgYXNzaWdubWVudHMgY2hhaW5saXN0ICcpJyAgIHsKLQkJCQkJCWNoYWluX3QgKmNoYWluID0gJDM7Ci0JCQkJCQlHU0xpc3QgKndhbGs7Ci0JCQkJCQlHc3RCaW4gKmJpbiA9IChHc3RCaW4gKikgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgkMSwgTlVMTCk7Ci0JCQkJCQlpZiAoIWNoYWluKSB7Ci0JCQkJCQkgIFNFVF9FUlJPUiAoZ3JhcGgtPmVycm9yLCBHU1RfUEFSU0VfRVJST1JfRU1QVFlfQklOLAotCQkJCQkJICAgIF8oInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIpLCAkMSk7Ci0JCQkJCQkgIGNoYWluID0gZ3N0X3BhcnNlX2NoYWluX25ldyAoKTsKLQkJCQkJCSAgY2hhaW4tPmZpcnN0LmVsZW1lbnQgPSBjaGFpbi0+bGFzdC5lbGVtZW50ID0gTlVMTDsKLQkJCQkJCSAgY2hhaW4tPmZpcnN0Lm5hbWUgICAgPSBjaGFpbi0+bGFzdC5uYW1lICAgID0gTlVMTDsKLQkJCQkJCSAgY2hhaW4tPmZpcnN0LnBhZHMgICAgPSBjaGFpbi0+bGFzdC5wYWRzICAgID0gTlVMTDsKLQkJCQkJCSAgY2hhaW4tPmVsZW1lbnRzID0gTlVMTDsKLQkJCQkJCX0KLQkJCQkJCWlmICghYmluKSB7Ci0JCQkJCQkgIGFkZF9taXNzaW5nX2VsZW1lbnQoZ3JhcGgsICQxKTsKLQkJCQkJCSAgU0VUX0VSUk9SIChncmFwaC0+ZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQsCi0JCQkJCQkgICAgXygibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIiksICQxKTsKLQkJCQkJCSAgLyogY2xlYXIgcHJvcGVydHktbGlzdCAqLwotCQkJCQkJICBnX3NsaXN0X2ZvcmVhY2ggKCQyLCAoR0Z1bmMpIGdzdF9wYXJzZV9zdHJmcmVlLCBOVUxMKTsKLQkJCQkJCSAgZ19zbGlzdF9mcmVlICgkMik7Ci0JCQkJCQkgICQyID0gTlVMTDsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkgIGZvciAod2FsayA9IGNoYWluLT5lbGVtZW50czsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQgKQotCQkJCQkJICAgIGdzdF9iaW5fYWRkIChiaW4sIEdTVF9FTEVNRU5UICh3YWxrLT5kYXRhKSk7Ci0JCQkJCQkgIGdfc2xpc3RfZnJlZSAoY2hhaW4tPmVsZW1lbnRzKTsKLQkJCQkJCSAgY2hhaW4tPmVsZW1lbnRzID0gZ19zbGlzdF9wcmVwZW5kIChOVUxMLCBiaW4pOwotCQkJCQkJfQotCQkJCQkJJCQgPSBjaGFpbjsKLQkJCQkJCS8qIHNldCB0aGUgcHJvcGVydGllcyBub3cKLQkJCQkJCSAqIEhJTlQ6IHByb3BlcnR5LWxpc3QgY2xlYXJlZCBhYm92ZSwgaWYgYmluPT1OVUxMCi0JCQkJCQkgKi8KLQkJCQkJCWZvciAod2FsayA9ICQyOyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkKLQkJCQkJCSAgZ3N0X3BhcnNlX2VsZW1lbnRfc2V0ICgoZ2NoYXIgKikgd2Fsay0+ZGF0YSwKLQkJCQkJCQlHU1RfRUxFTUVOVCAoYmluKSwgZ3JhcGgpOwotCQkJCQkJZ19zbGlzdF9mcmVlICgkMik7Ci0JCQkJCQlnc3RfcGFyc2Vfc3RyZnJlZSAoJDEpOwotCQkJCQkgICAgICB9Ci0JOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBHcmFtbWFyIGV4cGxhbmF0aW9uOiAoY29udCdkKQotKiAgIF9ncmFwaF8KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWdyYXBoOgljaGFpbmxpc3QJCQkgICAgICB7ICQkID0gZ3JhcGg7Ci0JCQkJCQkkJC0+Y2hhaW4gPSAkMTsKLQkJCQkJCWlmKCEkMSkgewotCQkJCQkJICBTRVRfRVJST1IgKGdyYXBoLT5lcnJvciwgR1NUX1BBUlNFX0VSUk9SX0VNUFRZLCBfKCJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIpKTsKLQkJCQkJCX0KLQkJCQkJICAgICAgfQotCTsKLQotJSUKLQotCi1zdGF0aWMgaW50Ci15eWVycm9yICh2b2lkICpzY2FubmVyLCBncmFwaF90ICpncmFwaCwgY29uc3QgY2hhciAqcykKLXsKLSAgLyogRklYTUU6IFRoaXMgc2hvdWxkIGdvIGludG8gdGhlIEdFcnJvciBzb21laG93LCBidXQgaG93PyAqLwotICBHU1RfV0FSTklORyAoIkVycm9yIGR1cmluZyBwYXJzaW5nOiAlcyIsIHMpOwotICByZXR1cm4gLTE7Ci19Ci0KLQotR3N0RWxlbWVudCAqCi1wcml2X2dzdF9wYXJzZV9sYXVuY2ggKGNvbnN0IGdjaGFyICpzdHIsIEdFcnJvciAqKmVycm9yLCBHc3RQYXJzZUNvbnRleHQgKmN0eCwKLSAgICBHc3RQYXJzZUZsYWdzIGZsYWdzKQotewotICBncmFwaF90IGc7Ci0gIGdjaGFyICpkc3RyOwotICBHU0xpc3QgKndhbGs7Ci0gIEdzdEJpbiAqYmluID0gTlVMTDsKLSAgR3N0RWxlbWVudCAqcmV0OwotICB5eXNjYW5fdCBzY2FubmVyOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHIgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlcnJvciA9PSBOVUxMIHx8ICplcnJvciA9PSBOVUxMLCBOVUxMKTsKLQotICBnLmNoYWluID0gTlVMTDsKLSAgZy5saW5rcyA9IE5VTEw7Ci0gIGcuZXJyb3IgPSBlcnJvcjsKLSAgZy5jdHggPSBjdHg7Ci0gIGcuZmxhZ3MgPSBmbGFnczsKLQotI2lmZGVmIF9fR1NUX1BBUlNFX1RSQUNFCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUElQRUxJTkUsICJUUkFDRTogdHJhY2luZyBlbmFibGVkIik7Ci0gIF9fc3RyaW5ncyA9IF9fY2hhaW5zID0gX19saW5rcyA9IDA7Ci0jZW5kaWYgLyogX19HU1RfUEFSU0VfVFJBQ0UgKi8KLQotICAvKiBnX3ByaW50KCJOb3cgc2Nhbm5pbmc6ICVzXG4iLCBzdHIpOyAqLwotCi0gIGRzdHIgPSBnX3N0cmR1cCAoc3RyKTsKLSAgcHJpdl9nc3RfcGFyc2VfeXlsZXhfaW5pdCAoJnNjYW5uZXIpOwotICBwcml2X2dzdF9wYXJzZV95eV9zY2FuX3N0cmluZyAoZHN0ciwgc2Nhbm5lcik7Ci0KLSNpZiBZWURFQlVHCi0gIHl5ZGVidWcgPSAxOwotI2VuZGlmCi0KLSAgaWYgKHl5cGFyc2UgKHNjYW5uZXIsICZnKSAhPSAwKSB7Ci0gICAgU0VUX0VSUk9SIChlcnJvciwgR1NUX1BBUlNFX0VSUk9SX1NZTlRBWCwKLSAgICAgICAgIlVucmVjb3ZlcmFibGUgc3ludGF4IGVycm9yIHdoaWxlIHBhcnNpbmcgcGlwZWxpbmUgJXMiLCBzdHIpOwotCi0gICAgcHJpdl9nc3RfcGFyc2VfeXlsZXhfZGVzdHJveSAoc2Nhbm5lcik7Ci0gICAgZ19mcmVlIChkc3RyKTsKLQotICAgIGdvdG8gZXJyb3IxOwotICB9Ci0gIHByaXZfZ3N0X3BhcnNlX3l5bGV4X2Rlc3Ryb3kgKHNjYW5uZXIpOwotICBnX2ZyZWUgKGRzdHIpOwotCi0gIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUElQRUxJTkUsICJnb3QgJXUgZWxlbWVudHMgYW5kICV1IGxpbmtzIiwKLSAgICAgIGcuY2hhaW4gPyBnX3NsaXN0X2xlbmd0aCAoZy5jaGFpbi0+ZWxlbWVudHMpIDogMCwKLSAgICAgIGdfc2xpc3RfbGVuZ3RoIChnLmxpbmtzKSk7Ci0KLSAgLyogZW5zdXJlIGNoYWluIGlzIG5vdCBOVUxMICovCi0gIGlmICghZy5jaGFpbil7Ci0gICAgZy5jaGFpbj1nc3RfcGFyc2VfY2hhaW5fbmV3ICgpOwotICAgIGcuY2hhaW4tPmVsZW1lbnRzPU5VTEw7Ci0gICAgZy5jaGFpbi0+Zmlyc3QuZWxlbWVudD1OVUxMOwotICAgIGcuY2hhaW4tPmZpcnN0Lm5hbWU9TlVMTDsKLSAgICBnLmNoYWluLT5maXJzdC5wYWRzPU5VTEw7Ci0gICAgZy5jaGFpbi0+bGFzdC5lbGVtZW50PU5VTEw7Ci0gICAgZy5jaGFpbi0+bGFzdC5uYW1lPU5VTEw7Ci0gICAgZy5jaGFpbi0+bGFzdC5wYWRzPU5VTEw7Ci0gIH07Ci0KLSAgLyogZW5zdXJlIGVsZW1lbnRzIGlzIG5vdCBlbXB0eSAqLwotICBpZighZy5jaGFpbi0+ZWxlbWVudHMpewotICAgIGcuY2hhaW4tPmVsZW1lbnRzPSBnX3NsaXN0X3ByZXBlbmQgKE5VTEwsIE5VTEwpOwotICB9OwotCi0gIC8qIHB1dCBhbGwgZWxlbWVudHMgaW4gb3VyIGJpbiBpZiBuZWNlc3NhcnkgKi8KLSAgaWYoZy5jaGFpbi0+ZWxlbWVudHMtPm5leHQpewotICAgIGlmIChmbGFncyAmIEdTVF9QQVJTRV9GTEFHX1BMQUNFX0lOX0JJTikKLSAgICAgIGJpbiA9IEdTVF9CSU4gKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpKTsKLSAgICBlbHNlCi0gICAgICBiaW4gPSBHU1RfQklOIChnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpKTsKLSAgICBnX2Fzc2VydCAoYmluKTsKLQotICAgIGZvciAod2FsayA9IGcuY2hhaW4tPmVsZW1lbnRzOyB3YWxrOyB3YWxrID0gd2Fsay0+bmV4dCkgewotICAgICAgaWYgKHdhbGstPmRhdGEgIT0gTlVMTCkKLSAgICAgICAgZ3N0X2Jpbl9hZGQgKGJpbiwgR1NUX0VMRU1FTlQgKHdhbGstPmRhdGEpKTsKLSAgICB9Ci0gICAgZ19zbGlzdF9mcmVlIChnLmNoYWluLT5lbGVtZW50cyk7Ci0gICAgZy5jaGFpbi0+ZWxlbWVudHMgPSBnX3NsaXN0X3ByZXBlbmQgKE5VTEwsIGJpbik7Ci0gIH0KLQotICByZXQgPSAoR3N0RWxlbWVudCAqKSBnLmNoYWluLT5lbGVtZW50cy0+ZGF0YTsKLSAgZ19zbGlzdF9mcmVlIChnLmNoYWluLT5lbGVtZW50cyk7Ci0gIGcuY2hhaW4tPmVsZW1lbnRzPU5VTEw7Ci0gIGlmIChHU1RfSVNfQklOIChyZXQpKQotICAgIGJpbiA9IEdTVF9CSU4gKHJldCk7Ci0gIGdzdF9wYXJzZV9mcmVlX2NoYWluIChnLmNoYWluKTsKLSAgZy5jaGFpbiA9IE5VTEw7Ci0KLQotICAvKiByZXNvbHZlIGFuZCBwZXJmb3JtIGxpbmtzICovCi0gIGZvciAod2FsayA9IGcubGlua3M7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgbGlua190ICpsID0gKGxpbmtfdCAqKSB3YWxrLT5kYXRhOwotICAgIGludCBlcnI7Ci0gICAgZXJyPWdzdF9yZXNvbHZlX3JlZmVyZW5jZSggJihsLT5zcmMpLCByZXQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICBpZigtMT09ZXJyKXsKLSAgICAgICAgICBTRVRfRVJST1IgKGVycm9yLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5ULAotICAgICAgICAgICAgICAiTm8gc3JjLWVsZW1lbnQgbmFtZWQgXCIlc1wiIC0gb21pdHRpbmcgbGluayIsIGwtPnNyYy5uYW1lKTsKLSAgICAgICB9ZWxzZXsKLSAgICAgICAgICAvKiBwcm9iYWJseSBhIG1pc3NpbmcgZWxlbWVudCB3aGljaCB3ZSd2ZSBoYW5kbGVkIGFscmVhZHkgKi8KLSAgICAgICAgICBTRVRfRVJST1IgKGVycm9yLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5ULAotICAgICAgICAgICAgICAiTm8gc3JjLWVsZW1lbnQgZm91bmQgLSBvbWl0dGluZyBsaW5rIik7Ci0gICAgICAgfQotICAgICAgIGdzdF9wYXJzZV9mcmVlX2xpbmsgKGwpOwotICAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGVycj1nc3RfcmVzb2x2ZV9yZWZlcmVuY2UoICYobC0+c2luayksIHJldCk7Ci0gICAgaWYgKGVycikgewotICAgICAgIGlmKC0xPT1lcnIpewotICAgICAgICAgIFNFVF9FUlJPUiAoZXJyb3IsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQsCi0gICAgICAgICAgICAgICJObyBzaW5rLWVsZW1lbnQgbmFtZWQgXCIlc1wiIC0gb21pdHRpbmcgbGluayIsIGwtPnNyYy5uYW1lKTsKLSAgICAgICB9ZWxzZXsKLSAgICAgICAgICAvKiBwcm9iYWJseSBhIG1pc3NpbmcgZWxlbWVudCB3aGljaCB3ZSd2ZSBoYW5kbGVkIGFscmVhZHkgKi8KLSAgICAgICAgICBTRVRfRVJST1IgKGVycm9yLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5ULAotICAgICAgICAgICAgICAiTm8gc2luay1lbGVtZW50IGZvdW5kIC0gb21pdHRpbmcgbGluayIpOwotICAgICAgIH0KLSAgICAgICBnc3RfcGFyc2VfZnJlZV9saW5rIChsKTsKLSAgICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgZ3N0X3BhcnNlX3BlcmZvcm1fbGluayAobCwgJmcpOwotICB9Ci0gIGdfc2xpc3RfZnJlZSAoZy5saW5rcyk7Ci0KLW91dDoKLSNpZmRlZiBfX0dTVF9QQVJTRV9UUkFDRQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BJUEVMSU5FLAotICAgICAgIlRSQUNFOiAldSBzdHJpbmdzLCAldSBjaGFpbnMgYW5kICV1IGxpbmtzIGxlZnQiLCBfX3N0cmluZ3MsIF9fY2hhaW5zLAotICAgICAgX19saW5rcyk7Ci0gIGlmIChfX3N0cmluZ3MgfHwgX19jaGFpbnMgfHwgX19saW5rcykgewotICAgIGdfd2FybmluZyAoIlRSQUNFOiAldSBzdHJpbmdzLCAldSBjaGFpbnMgYW5kICV1IGxpbmtzIGxlZnQiLCBfX3N0cmluZ3MsCi0gICAgICAgIF9fY2hhaW5zLCBfX2xpbmtzKTsKLSAgfQotI2VuZGlmIC8qIF9fR1NUX1BBUlNFX1RSQUNFICovCi0KLSAgcmV0dXJuIHJldDsKLQotZXJyb3IxOgotICBpZiAoZy5jaGFpbikgewotICAgIGdzdF9wYXJzZV9mcmVlX2NoYWluIChnLmNoYWluKTsKLSAgICBnLmNoYWluPU5VTEw7Ci0gIH0KLQotICBnX3NsaXN0X2ZvcmVhY2ggKGcubGlua3MsIChHRnVuYylnc3RfcGFyc2VfZnJlZV9saW5rLCBOVUxMKTsKLSAgZ19zbGlzdF9mcmVlIChnLmxpbmtzKTsKLQotICBpZiAoZXJyb3IpCi0gICAgZ19hc3NlcnQgKCplcnJvcik7Ci0gIHJldCA9IE5VTEw7Ci0KLSAgZ290byBvdXQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvcGFyc2UvcGFyc2UubCBiL2dzdC9wYXJzZS9wYXJzZS5sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2FmYmE4Li4wMDAwMDAwCi0tLSBhL2dzdC9wYXJzZS9wYXJzZS5sCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLSV7Ci0jaW5jbHVkZSAiLi4vZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgotCi0jaW5jbHVkZSAidHlwZXMuaCIKLSNpbmNsdWRlICIuLi9nc3RpbmZvLmgiCi0jaW5jbHVkZSAiLi4vZ3N0dXJpLmgiCi0jaW5jbHVkZSAiZ3JhbW1hci50YWIuaCIKLQotI2lmZGVmIG1hbGxvYwotI3VuZGVmIG1hbGxvYwotI2VuZGlmCi0KLSNpZmRlZiBmcmVlCi0jdW5kZWYgZnJlZQotI2VuZGlmCi0KLSNpZmRlZiByZWFsbG9jCi0jdW5kZWYgcmVhbGxvYwotI2VuZGlmCi0KLSNkZWZpbmUgbWFsbG9jIGdfbWFsbG9jCi0jZGVmaW5lIGZyZWUgZ19mcmVlCi0jZGVmaW5lIHJlYWxsb2MgZ19yZWFsbG9jCi0KLS8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IEVDSE8gc28gYXMgdG8gYXZvaWQgZm9ydGlmeSB3YXJuaW5ncy4gSWdub3JlIHRoZQotICAgZW1iZWRkZWQtTlVMIGNhc2UgZm9yIG5vdy4gV2Uga25vdyB5eXRleHQgaXMgTlVMLXRlcm1pbmF0ZWQuICovCi0jZGVmaW5lIEVDSE8gZ19mcHJpbnRmKHl5b3V0LCAiJXMiLCB5eXRleHQpCi0KLSNpZmRlZiBHX0hBVkVfSVNPX1ZBUkFSR1MKLSNkZWZpbmUgUFJJTlQoLi4uKSBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BJUEVMSU5FLCAiZmxleDogIiBfX1ZBX0FSR1NfXykKLSNlbGlmIGRlZmluZWQoR19IQVZFX0dOVUNfVkFSQVJHUykKLSNkZWZpbmUgUFJJTlQoYXJncy4uLikgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QSVBFTElORSwgImZsZXg6ICIgYXJncykKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQKLVBSSU5UIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBHU1RfQ0FUX0xFVkVMX0xPR192YWxpc3QgKEdTVF9DQVRfUElQRUxJTkUsIEdTVF9MRVZFTF9ERUJVRywgTlVMTCwKLSAgICBmb3JtYXQsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotI2VuZGlmCi0KLSV9Ci0KLV9vcGVyYXRvciBbKCl7fS4hLDs9XQotX2lkZW50aWZpZXIgW1s6YWxudW06XV9dW1s6YWxudW06XVwtXyU6XSoKLQotX2NoYXIgKCJcXCIuKXwoW15bOnNwYWNlOl1dKQotX3N0cmluZyB7X2NoYXJ9K3woIlwiIihbXlwiXXwiXFxcIiIpKiJcIiIpfCgiJyIoW14nXXwiXFxcJyIpKiInIikKLQotX2Fzc2lnbiBbWzpzcGFjZTpdXSoiPSJbWzpzcGFjZTpdXSoKLQotX3Byb3RvY29sIFtbOmFscGhhOl1dW1s6YWxudW06XSstXC5dKgotX3VybCAoe19wcm90b2NvbH0iOi8vIntfc3RyaW5nfXxbIi4ie19pZGVudGlmaWVyfV0/Ii8ie19zdHJpbmd9KXwoe19wcm90b2NvbH0iOi8vIikKLQotLyogd2UgbXVzdCBkbyB0aGlzIGhlcmUsIGJlY2F1c2UgbmVhcmx5IGV2ZXJ5dGhpbmcgbWF0Y2hlcyBhIHtfc3RyaW5nfSAqLyAKLV9hc3NpZ25tZW50IHtfaWRlbnRpZmllcn17X2Fzc2lnbn17X3N0cmluZ30KLQotLyogZ2V0IHBhZC9lbGVtZW50IHJlZmVyZW5jZXMgYW5kIHN0dWZmIHdpdGggZG90cyByaWdodCAqLwotX3BhZHJlZiAiLiJ7X2lkZW50aWZpZXJ9Ci1fcmVmIHtfaWRlbnRpZmllcn0iLiJ7X2lkZW50aWZpZXJ9PwotX2JpbnJlZiB7X2lkZW50aWZpZXJ9W1s6c3BhY2U6XV0qIi4iW1s6c3BhY2U6XV0qIigiCi0KLS8qIGxpbmtzICovCi1fbWltZWNoYXIgW1s6YWxudW06XS1dCi1fbWltZXR5cGUge19taW1lY2hhcn0rIi8ie19taW1lY2hhcn0rCi1fY2Fwc2NoYXIgKCJcXCIuKXwoW15cOyFdKQotX2NhcHNzdHJpbmcge19jYXBzY2hhcn0rCi1fY2FwcyB7X21pbWV0eXBlfSgiLCJbXiFdfHtfY2Fwc3N0cmluZ30pKgotX2xpbmsgKCIhIltbOnNwYWNlOl1dKntfY2Fwc30oW1s6c3BhY2U6XV0qKCI7IltbOnNwYWNlOl1dKntfY2Fwc30pKltbOnNwYWNlOl1dKikqIiEiKXwoIiEiKQotCi0leCB2YWx1ZQotJW9wdGlvbiBub3l5d3JhcAotJW9wdGlvbiBub3VucHV0Ci0lb3B0aW9uIHJlZW50cmFudAotJW9wdGlvbiBiaXNvbi1icmlkZ2UKLSVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUKLSVvcHRpb24gbm9pbnB1dAotJSUKLQote19hc3NpZ25tZW50fSB7Ci0gICAgLyogIj0iICovCi0gICAgUFJJTlQgKCJBU1NJR05NRU5UOiAlcyIsIHl5dGV4dCk7Ci0gICAgeXlsdmFsLT5zcyA9IGdzdF9wYXJzZV9zdHJkdXAgKHl5dGV4dCk7Ci0gICAgQkVHSU4gKElOSVRJQUwpOwotICAgIHJldHVybiBBU1NJR05NRU5UOwotfQotCi17X3BhZHJlZn0gewotICAgIHl5dGV4dCsrOwotICAgIFBSSU5UICgiUEFEUkVGOiAlcyIsIHl5dGV4dCk7Ci0gICAgeXlsdmFsLT5zcyA9IGdzdF9wYXJzZV9zdHJkdXAgKHl5dGV4dCk7Ci0gICAgQkVHSU4gKElOSVRJQUwpOwotICAgIHJldHVybiBQQURSRUY7Ci19Ci0KLXtfcmVmfSB7Ci0gICAgUFJJTlQgKCJSRUY6ICVzIiwgeXl0ZXh0KTsKLSAgICB5eWx2YWwtPnNzID0gZ3N0X3BhcnNlX3N0cmR1cCAoeXl0ZXh0KTsKLSAgICBCRUdJTiAoSU5JVElBTCk7Ci0gICAgcmV0dXJuIFJFRjsKLX0KLQote19iaW5yZWZ9IHsKLSAgICBnY2hhciAqcG9zID0geXl0ZXh0OwotICAgIHdoaWxlICghZ19hc2NpaV9pc3NwYWNlICgqcG9zKSAmJiAoKnBvcyAhPSAnLicpKSBwb3MrKzsKLSAgICAqcG9zID0gJ1wwJzsKLSAgICBQUklOVCAoIkJJTlJFRjogJXMiLCB5eXRleHQpOwotICAgIHl5bHZhbC0+c3MgPSBnc3RfcGFyc2Vfc3RyZHVwICh5eXRleHQpOwotICAgIEJFR0lOIChJTklUSUFMKTsKLSAgICByZXR1cm4gQklOUkVGOwotfQotCi17X2lkZW50aWZpZXJ9IHsKLSAgICBQUklOVCAoIklERU5USUZJRVI6ICVzIiwgeXl0ZXh0KTsKLSAgICB5eWx2YWwtPnNzID0gZ3N0X3BhcnNlX3N0cmR1cCAoeXl0ZXh0KTsKLSAgICBCRUdJTiAoSU5JVElBTCk7Ci0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0KLXtfbGlua30gewotICAgIGdjaGFyICpjID0geXl0ZXh0OwotICAgIFBSSU5UICgiTElOSzogJXMiLCB5eXRleHQpOwotICAgIGMrKzsKLSAgICBpZiAoKmMpIHsKLSAgICAgIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpjKSkgYysrOwotICAgICAgYyA9IHl5bHZhbC0+c3MgPSBnc3RfcGFyc2Vfc3RyZHVwIChjKTsKLSAgICAgIHdoaWxlICgqYykgYysrOwotICAgICAgaWYgKCotLWMgIT0gJyEnKQotCWdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKi0tYykpOwotICAgICAgKisrYyA9ICdcMCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHl5bHZhbC0+c3MgPSBOVUxMOwotICAgIH0KLSAgICBCRUdJTiAoSU5JVElBTCk7Ci0gICAgcmV0dXJuIExJTks7Ci19Ci17X3VybH0gewotICBQUklOVCAoIlVSTDogJXMiLCB5eXRleHQpOwotICB5eWx2YWwtPnNzID0gZ19zdHJkdXAgKHl5dGV4dCk7Ci0gIGdzdF9wYXJzZV91bmVzY2FwZSAoeXlsdmFsLT5zcyk7Ci0gIEJFR0lOIChJTklUSUFMKTsKLSAgcmV0dXJuIFBBUlNFX1VSTDsKLX0KLQote19vcGVyYXRvcn0geyBQUklOVCAoIk9QRVJBVE9SOiBbJXNdIiwgeXl0ZXh0KTsgcmV0dXJuICp5eXRleHQ7IH0KLQotW1s6c3BhY2U6XV0rIHsgUFJJTlQgKCJTUEFDRTogWyVzXSIsIHl5dGV4dCk7IH0KLQotLiB7Ci0gICAgUFJJTlQgKCJJbnZhbGlkIExleGVyIGVsZW1lbnQ6ICVzXG4iLCB5eXRleHQpOwotICAgIHJldHVybiAqeXl0ZXh0OwotfQotCi0lJQpkaWZmIC0tZ2l0IGEvZ3N0L3BhcnNlL3R5cGVzLmggYi9nc3QvcGFyc2UvdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlYWYyMC4uMDAwMDAwMAotLS0gYS9nc3QvcGFyc2UvdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0jaWZuZGVmIF9fR1NUX1BBUlNFX1RZUEVTX0hfXwotI2RlZmluZSBfX0dTVF9QQVJTRV9UWVBFU19IX18KLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSAiLi4vZ3N0ZWxlbWVudC5oIgotI2luY2x1ZGUgIi4uL2dzdHBhcnNlLmgiCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIEdTTGlzdCAqcGFkczsKLX0gcmVmZXJlbmNlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgcmVmZXJlbmNlX3Qgc3JjOwotICByZWZlcmVuY2VfdCBzaW5rOwotICBHc3RDYXBzICpjYXBzOwotfSBsaW5rX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgR1NMaXN0ICplbGVtZW50czsKLSAgcmVmZXJlbmNlX3QgZmlyc3Q7Ci0gIHJlZmVyZW5jZV90IGxhc3Q7Ci19IGNoYWluX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9ncmFwaF90IGdyYXBoX3Q7Ci1zdHJ1Y3QgX2dyYXBoX3QgewotICBjaGFpbl90ICpjaGFpbjsgLyogbGlua3MgYXJlIHN1cHBvc2VkIHRvIGJlIGRvbmUgbm93ICovCi0gIEdTTGlzdCAqbGlua3M7Ci0gIEdFcnJvciAqKmVycm9yOwotICBHc3RQYXJzZUNvbnRleHQgKmN0eDsgLyogbWF5IGJlIE5VTEwgKi8KLSAgR3N0UGFyc2VGbGFncyBmbGFnczsKLX07Ci0KLQotLyoKLSAqIE1lbW9yeSBjaGVja2luZy4gU2hvdWxkIHByb2JhYmx5IGJlIGRvbmUgd2l0aCBnc3R0cmFjZSBzdHVmZiwgYnV0IHRoYXQKLSAqIGRvZXNuJ3QgcmVhbGx5IHdvcmsuCi0gKiBUaGlzIGlzIG5vdCBzYWZlIGZyb20gcmVlbnRyYW5jZSBpc3N1ZXMsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIGFzIGxvbmcgYXMKLSAqIHdlIGxvY2sgYSBtdXRleCBiZWZvcmUgcGFyc2luZyBhbnl3YXkuCi0gKgotICogRklYTUU6IERpc2FibGUgdGhpcyBmb3Igbm93IGZvciB0aGUgYWJvdmUgcmVhc29ucwotICovCi0jaWYgMAotI2lmZGVmIEdTVF9ERUJVR19FTkFCTEVECi0jICBkZWZpbmUgX19HU1RfUEFSU0VfVFJBQ0UKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBfX0dTVF9QQVJTRV9UUkFDRQotR19HTlVDX0lOVEVSTkFMICBnY2hhciAgKl9fZ3N0X3BhcnNlX3N0cmR1cCAoZ2NoYXIgKm9yZyk7Ci1HX0dOVUNfSU5URVJOQUwgIHZvaWQJX19nc3RfcGFyc2Vfc3RyZnJlZSAoZ2NoYXIgKnN0cik7Ci1HX0dOVUNfSU5URVJOQUwgIGxpbmtfdCAqX19nc3RfcGFyc2VfbGlua19uZXcgKHZvaWQpOwotR19HTlVDX0lOVEVSTkFMICB2b2lkCV9fZ3N0X3BhcnNlX2xpbmtfZnJlZSAobGlua190ICpkYXRhKTsKLUdfR05VQ19JTlRFUk5BTCAgY2hhaW5fdCAqX19nc3RfcGFyc2VfY2hhaW5fbmV3ICh2b2lkKTsKLUdfR05VQ19JTlRFUk5BTCAgdm9pZAlfX2dzdF9wYXJzZV9jaGFpbl9mcmVlIChjaGFpbl90ICpkYXRhKTsKLSMgIGRlZmluZSBnc3RfcGFyc2Vfc3RyZHVwIF9fZ3N0X3BhcnNlX3N0cmR1cAotIyAgZGVmaW5lIGdzdF9wYXJzZV9zdHJmcmVlIF9fZ3N0X3BhcnNlX3N0cmZyZWUKLSMgIGRlZmluZSBnc3RfcGFyc2VfbGlua19uZXcgX19nc3RfcGFyc2VfbGlua19uZXcKLSMgIGRlZmluZSBnc3RfcGFyc2VfbGlua19mcmVlIF9fZ3N0X3BhcnNlX2xpbmtfZnJlZQotIyAgZGVmaW5lIGdzdF9wYXJzZV9jaGFpbl9uZXcgX19nc3RfcGFyc2VfY2hhaW5fbmV3Ci0jICBkZWZpbmUgZ3N0X3BhcnNlX2NoYWluX2ZyZWUgX19nc3RfcGFyc2VfY2hhaW5fZnJlZQotI2Vsc2UgLyogX19HU1RfUEFSU0VfVFJBQ0UgKi8KLSMgIGRlZmluZSBnc3RfcGFyc2Vfc3RyZHVwIGdfc3RyZHVwCi0jICBkZWZpbmUgZ3N0X3BhcnNlX3N0cmZyZWUgZ19mcmVlCi0jICBkZWZpbmUgZ3N0X3BhcnNlX2xpbmtfbmV3KCkgZ19zbGljZV9uZXcwIChsaW5rX3QpCi0jICBkZWZpbmUgZ3N0X3BhcnNlX2xpbmtfZnJlZShsKSBnX3NsaWNlX2ZyZWUgKGxpbmtfdCwgbCkKLSMgIGRlZmluZSBnc3RfcGFyc2VfY2hhaW5fbmV3KCkgZ19zbGljZV9uZXcwIChjaGFpbl90KQotIyAgZGVmaW5lIGdzdF9wYXJzZV9jaGFpbl9mcmVlKGMpIGdfc2xpY2VfZnJlZSAoY2hhaW5fdCwgYykKLSNlbmRpZiAvKiBfX0dTVF9QQVJTRV9UUkFDRSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9wYXJzZV91bmVzY2FwZSAoZ2NoYXIgKnN0cikKLXsKLSAgZ2NoYXIgKndhbGs7Ci0gIGdib29sZWFuIGluX3F1b3RlczsKLQotICBnX3JldHVybl9pZl9mYWlsIChzdHIgIT0gTlVMTCk7Ci0KLSAgd2FsayA9IHN0cjsKLSAgaW5fcXVvdGVzID0gRkFMU0U7Ci0KLSAgR1NUX0RFQlVHICgidW5lc2NhcGluZyAlcyIsIHN0cik7Ci0KLSAgd2hpbGUgKCp3YWxrKSB7Ci0gICAgaWYgKCp3YWxrID09ICdcXCcgJiYgIWluX3F1b3RlcykgewotICAgICAgd2FsaysrOwotICAgICAgLyogbWFrZSBzdXJlIHdlIGRvbid0IHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyAqLwotICAgICAgaWYgKCp3YWxrID09ICdcMCcpCi0gICAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAoKndhbGsgPT0gJyInICYmICghaW5fcXVvdGVzIHx8IChpbl9xdW90ZXMKLSAgICAgICAgICAgICAgICAmJiAoKih3YWxrIC0gMSkgIT0gJ1xcJykpKSkgewotICAgICAgLyogZG9uJ3QgdW5lc2NhcGUgaW5zaWRlIHF1b3RlcyBhbmQgZG9uJ3Qgc3dpdGNoCi0gICAgICAgKiBzdGF0ZSB3aXRoIGVzY2FwZWQgcXVvdGVkIGluc2lkZSBxdW90ZXMgKi8KLSAgICAgIGluX3F1b3RlcyA9ICFpbl9xdW90ZXM7Ci0gICAgfQotICAgICpzdHIgPSAqd2FsazsKLSAgICBzdHIrKzsKLSAgICB3YWxrKys7Ci0gIH0KLSAgKnN0ciA9ICdcMCc7Ci19Ci0KLUdfR05VQ19JTlRFUk5BTCBHc3RFbGVtZW50ICpwcml2X2dzdF9wYXJzZV9sYXVuY2ggKGNvbnN0IGdjaGFyICAgICAgKiBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgKiogZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFyc2VDb250ZXh0ICAqIGN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFBhcnNlRmxhZ3MgICAgICBmbGFncyk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9QQVJTRV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9wcmludGYvTWFrZWZpbGUuYW0gYi9nc3QvcHJpbnRmL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzg4YmU3Li4wMDAwMDAwCi0tLSBhL2dzdC9wcmludGYvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1BTV9DUFBGTEFHUyA9ICQoR0xJQl9DRkxBR1MpIC1EU1RBVElDPUdfR05VQ19JTlRFUk5BTCAkKFdBUk5JTkdfQ0ZMQUdTKSAkKFBSSU5URl9DRkxBR1MpCi0KLSMgZG9uJ3QgaGF2ZSBhIG5lZWQgZm9yIHRoYXQgYW5kIGl0J3Mgbm90IHBvcnRhYmxlIHNvIGp1c3QgaWdub3JlIGZvciBub3cKLUFNX0NQUEZMQUdTICs9IC1VSEFWRV9MT05HX0RPVUJMRQotCi0jIGp1c3QgdXNlIGludGVybmFsIGVtdWxhdGlvbiBmb3IgcHJpbnRpbmcgbG9uZyBsb25ncyBmb3Igbm93Ci1BTV9DUFBGTEFHUyArPSAtVUhBVkVfTE9OR19MT05HX0ZPUk1BVAotCi0jIGRvbid0IG5lZWQgYW55IG9mIHRoaXMgd2lkZWNoYXIgc3R1ZmYsIHNvIGp1c3QgZGlzYWJsZSBpdCBmb3Igbm93Ci1BTV9DUFBGTEFHUyArPSAtVUhBVkVfV0NIQVJfVCAtVUhBVkVfV0NTTEVOIC1VSEFWRV9XSU5UX1QKLQotIyBpbiBjYXNlIGFueW9uZSB3YW50cyB0byBhZGQgYW55dGhpbmcgZWxzZSBvciB1bmRvIHNvbWUgb2YgdGhlIHVuZGVmcwotQU1fQ1BQRkxBR1MgKz0gJChQUklOVEZfRVhUUkFfQ0ZMQUdTKQotCi1ub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJnc3RwcmludGYubGEKLQotbGliZ3N0cHJpbnRmX2xhX0NGTEFHUyA9Ci1saWJnc3RwcmludGZfbGFfU09VUkNFUyA9IAlcCi0JYXNucHJpbnRmLmMgXAotCXByaW50Zi1hcmdzLmMgXAotCXByaW50Zi1hcmdzLmggXAotCXByaW50Zi1wYXJzZS5jIFwKLQlwcmludGYtcGFyc2UuaCBcCi0JdmFzbnByaW50Zi5jIFwKLQl2YXNucHJpbnRmLmggXAotCXByaW50Zi5jIFwKLQlwcmludGYuaCBcCi0JcHJpbnRmLWV4dGVuc2lvbi5jIFwKLQlwcmludGYtZXh0ZW5zaW9uLmggXAotCWdzdC1wcmludGYuaAotCi1FWFRSQV9ESVNUID0gUkVBRE1FCmRpZmYgLS1naXQgYS9nc3QvcHJpbnRmL01ha2VmaWxlLmluIGIvZ3N0L3ByaW50Zi9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVhNjVjYS4uMDAwMDAwMAotLS0gYS9nc3QvcHJpbnRmL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODc2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvcHJpbnRmCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1MVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQotbGliZ3N0cHJpbnRmX2xhX0xJQkFERCA9Ci1hbV9saWJnc3RwcmludGZfbGFfT0JKRUNUUyA9IGxpYmdzdHByaW50Zl9sYS1hc25wcmludGYubG8gXAotCWxpYmdzdHByaW50Zl9sYS1wcmludGYtYXJncy5sbyBsaWJnc3RwcmludGZfbGEtcHJpbnRmLXBhcnNlLmxvIFwKLQlsaWJnc3RwcmludGZfbGEtdmFzbnByaW50Zi5sbyBsaWJnc3RwcmludGZfbGEtcHJpbnRmLmxvIFwKLQlsaWJnc3RwcmludGZfbGEtcHJpbnRmLWV4dGVuc2lvbi5sbwotbGliZ3N0cHJpbnRmX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHByaW50Zl9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0cHJpbnRmX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChsaWJnc3RwcmludGZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0cHJpbnRmX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHByaW50Zl9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcCBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotCi0jIGRvbid0IGhhdmUgYSBuZWVkIGZvciB0aGF0IGFuZCBpdCdzIG5vdCBwb3J0YWJsZSBzbyBqdXN0IGlnbm9yZSBmb3Igbm93Ci0KLSMganVzdCB1c2UgaW50ZXJuYWwgZW11bGF0aW9uIGZvciBwcmludGluZyBsb25nIGxvbmdzIGZvciBub3cKLQotIyBkb24ndCBuZWVkIGFueSBvZiB0aGlzIHdpZGVjaGFyIHN0dWZmLCBzbyBqdXN0IGRpc2FibGUgaXQgZm9yIG5vdwotCi0jIGluIGNhc2UgYW55b25lIHdhbnRzIHRvIGFkZCBhbnl0aGluZyBlbHNlIG9yIHVuZG8gc29tZSBvZiB0aGUgdW5kZWZzCi1BTV9DUFBGTEFHUyA9ICQoR0xJQl9DRkxBR1MpIC1EU1RBVElDPUdfR05VQ19JTlRFUk5BTCBcCi0JJChXQVJOSU5HX0NGTEFHUykgJChQUklOVEZfQ0ZMQUdTKSAtVUhBVkVfTE9OR19ET1VCTEUgXAotCS1VSEFWRV9MT05HX0xPTkdfRk9STUFUIC1VSEFWRV9XQ0hBUl9UIC1VSEFWRV9XQ1NMRU4gXAotCS1VSEFWRV9XSU5UX1QgJChQUklOVEZfRVhUUkFfQ0ZMQUdTKQotbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZ3N0cHJpbnRmLmxhCi1saWJnc3RwcmludGZfbGFfQ0ZMQUdTID0gCi1saWJnc3RwcmludGZfbGFfU09VUkNFUyA9IFwKLQlhc25wcmludGYuYyBcCi0JcHJpbnRmLWFyZ3MuYyBcCi0JcHJpbnRmLWFyZ3MuaCBcCi0JcHJpbnRmLXBhcnNlLmMgXAotCXByaW50Zi1wYXJzZS5oIFwKLQl2YXNucHJpbnRmLmMgXAotCXZhc25wcmludGYuaCBcCi0JcHJpbnRmLmMgXAotCXByaW50Zi5oIFwKLQlwcmludGYtZXh0ZW5zaW9uLmMgXAotCXByaW50Zi1leHRlbnNpb24uaCBcCi0JZ3N0LXByaW50Zi5oCi0KLUVYVFJBX0RJU1QgPSBSRUFETUUKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9wcmludGYvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3ByaW50Zi9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQobm9pbnN0X0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0cHJpbnRmLmxhOiAkKGxpYmdzdHByaW50Zl9sYV9PQkpFQ1RTKSAkKGxpYmdzdHByaW50Zl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0cHJpbnRmX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RwcmludGZfbGFfTElOSykgICQobGliZ3N0cHJpbnRmX2xhX09CSkVDVFMpICQobGliZ3N0cHJpbnRmX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cHJpbnRmX2xhLWFzbnByaW50Zi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYtYXJncy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYtZXh0ZW5zaW9uLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cHJpbnRmX2xhLXByaW50Zi1wYXJzZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RwcmludGZfbGEtdmFzbnByaW50Zi5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0cHJpbnRmX2xhLWFzbnByaW50Zi5sbzogYXNucHJpbnRmLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwcmludGZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHByaW50Zl9sYS1hc25wcmludGYubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1hc25wcmludGYuVHBvIC1jIC1vIGxpYmdzdHByaW50Zl9sYS1hc25wcmludGYubG8gYHRlc3QgLWYgJ2FzbnByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bhc25wcmludGYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cHJpbnRmX2xhLWFzbnByaW50Zi5UcG8gJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1hc25wcmludGYuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXNucHJpbnRmLmMnIG9iamVjdD0nbGliZ3N0cHJpbnRmX2xhLWFzbnByaW50Zi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHByaW50Zl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RwcmludGZfbGEtYXNucHJpbnRmLmxvIGB0ZXN0IC1mICdhc25wcmludGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXNucHJpbnRmLmMKLQotbGliZ3N0cHJpbnRmX2xhLXByaW50Zi1hcmdzLmxvOiBwcmludGYtYXJncy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cHJpbnRmX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RwcmludGZfbGEtcHJpbnRmLWFyZ3MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYtYXJncy5UcG8gLWMgLW8gbGliZ3N0cHJpbnRmX2xhLXByaW50Zi1hcmdzLmxvIGB0ZXN0IC1mICdwcmludGYtYXJncy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwcmludGYtYXJncy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RwcmludGZfbGEtcHJpbnRmLWFyZ3MuVHBvICQoREVQRElSKS9saWJnc3RwcmludGZfbGEtcHJpbnRmLWFyZ3MuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJpbnRmLWFyZ3MuYycgb2JqZWN0PSdsaWJnc3RwcmludGZfbGEtcHJpbnRmLWFyZ3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwcmludGZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cHJpbnRmX2xhLXByaW50Zi1hcmdzLmxvIGB0ZXN0IC1mICdwcmludGYtYXJncy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwcmludGYtYXJncy5jCi0KLWxpYmdzdHByaW50Zl9sYS1wcmludGYtcGFyc2UubG86IHByaW50Zi1wYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cHJpbnRmX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RwcmludGZfbGEtcHJpbnRmLXBhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RwcmludGZfbGEtcHJpbnRmLXBhcnNlLlRwbyAtYyAtbyBsaWJnc3RwcmludGZfbGEtcHJpbnRmLXBhcnNlLmxvIGB0ZXN0IC1mICdwcmludGYtcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJpbnRmLXBhcnNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYtcGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RwcmludGZfbGEtcHJpbnRmLXBhcnNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3ByaW50Zi1wYXJzZS5jJyBvYmplY3Q9J2xpYmdzdHByaW50Zl9sYS1wcmludGYtcGFyc2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwcmludGZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cHJpbnRmX2xhLXByaW50Zi1wYXJzZS5sbyBgdGVzdCAtZiAncHJpbnRmLXBhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHByaW50Zi1wYXJzZS5jCi0KLWxpYmdzdHByaW50Zl9sYS12YXNucHJpbnRmLmxvOiB2YXNucHJpbnRmLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwcmludGZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHByaW50Zl9sYS12YXNucHJpbnRmLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RwcmludGZfbGEtdmFzbnByaW50Zi5UcG8gLWMgLW8gbGliZ3N0cHJpbnRmX2xhLXZhc25wcmludGYubG8gYHRlc3QgLWYgJ3Zhc25wcmludGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdmFzbnByaW50Zi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RwcmludGZfbGEtdmFzbnByaW50Zi5UcG8gJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS12YXNucHJpbnRmLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Zhc25wcmludGYuYycgb2JqZWN0PSdsaWJnc3RwcmludGZfbGEtdmFzbnByaW50Zi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHByaW50Zl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RwcmludGZfbGEtdmFzbnByaW50Zi5sbyBgdGVzdCAtZiAndmFzbnByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2YXNucHJpbnRmLmMKLQotbGliZ3N0cHJpbnRmX2xhLXByaW50Zi5sbzogcHJpbnRmLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwcmludGZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHByaW50Zl9sYS1wcmludGYubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYuVHBvIC1jIC1vIGxpYmdzdHByaW50Zl9sYS1wcmludGYubG8gYHRlc3QgLWYgJ3ByaW50Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwcmludGYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cHJpbnRmX2xhLXByaW50Zi5UcG8gJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJpbnRmLmMnIG9iamVjdD0nbGliZ3N0cHJpbnRmX2xhLXByaW50Zi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHByaW50Zl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RwcmludGZfbGEtcHJpbnRmLmxvIGB0ZXN0IC1mICdwcmludGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJpbnRmLmMKLQotbGliZ3N0cHJpbnRmX2xhLXByaW50Zi1leHRlbnNpb24ubG86IHByaW50Zi1leHRlbnNpb24uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHByaW50Zl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cHJpbnRmX2xhLXByaW50Zi1leHRlbnNpb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYtZXh0ZW5zaW9uLlRwbyAtYyAtbyBsaWJnc3RwcmludGZfbGEtcHJpbnRmLWV4dGVuc2lvbi5sbyBgdGVzdCAtZiAncHJpbnRmLWV4dGVuc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwcmludGYtZXh0ZW5zaW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHByaW50Zl9sYS1wcmludGYtZXh0ZW5zaW9uLlRwbyAkKERFUERJUikvbGliZ3N0cHJpbnRmX2xhLXByaW50Zi1leHRlbnNpb24uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJpbnRmLWV4dGVuc2lvbi5jJyBvYmplY3Q9J2xpYmdzdHByaW50Zl9sYS1wcmludGYtZXh0ZW5zaW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cHJpbnRmX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHByaW50Zl9sYS1wcmludGYtZXh0ZW5zaW9uLmxvIGB0ZXN0IC1mICdwcmludGYtZXh0ZW5zaW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHByaW50Zi1leHRlbnNpb24uYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvcHJpbnRmL1JFQURNRSBiL2dzdC9wcmludGYvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGVhYzM4Li4wMDAwMDAwCi0tLSBhL2dzdC9wcmludGYvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotVGhlIGZpbGVzCi0KLSBhc25wcmludGYuYwotIHByaW50Zi1hcmdzLmMKLSBwcmludGYtYXJncy5oCi0gcHJpbnRmLXBhcnNlLmMKLSBwcmludGYtcGFyc2UuaAotIHZhc25wcmludGYuYwotIHZhc25wcmludGYuaAotCi1hcmUgdGFrZW4gZnJvbSB0aGUgdmFzbnByaW50ZiBtb2R1bGUgb2YgdGhlIEdOVWxpYiBwYWNrYWdlLCB3aGljaCBjYW4KLWJlIGZvdW5kIGF0OgotCi0gaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dudWxpYi8KLQotQWxsIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCB0byBpbmNsdWRlIGctZ251bGliLmguCi0KLXZhc25wcmludGYuYyBoYXMgYWxzbyBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgbG9uZyBsb25nCi1wcmludGluZyBpZiB0aGUgc3lzdGVtIHByaW50ZiBkb2Vzbid0LiBUaGlzIGNvZGUgaXMgcHJvdGVjdGVkIGJ5Ci0jaWZuZGVmIEhBVkVfTE9OR19MT05HX0ZPUk1BVC4KLQotQ29kZSBoYXMgYmVlbiBhZGRlZCB0byBwcmludGYtYXJncy5bY2hdLCBwcmludGYtcGFyc2UuYyBhbmQgdmFzbnByaW50Zi5jCi10byBzdXBwb3J0IHByaW50aW5nIG9mIF9faW50NjQgdmFsdWVzIHdpdGggdGhlIEk2NCBmb3JtYXQgbW9kaWZpZXIuIFRoaXMKLWlzIHByb3RlY3RlZCBieSAjaWZkZWYgSEFWRV9JTlQ2NF9BTkRfSTY0LgotCi1UaGUgZmlsZXMKLQotIHByaW50Zi5oCi0gcHJpbnRmLmMKLSBnLWdudWxpYi5oCi0KLWhhdmUgYmVlbiB3cml0dGVuIGJ5IG1lLiBwcmludGYuW2hjXSBjb250YWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUKLXJlbWFpbmluZyBmdW5jdGlvbnMgaW4gdGhlIHByaW50ZiBmYW1pbHkgYmFzZWQgb24gdmFzbnByaW50Zi4KLWctZ251bGliLmggaXMgaW5jbHVkZWQgYnkgYWxsIHNvdXJjZSBmaWxlcyBpbiBvcmRlciB0byBtb3ZlIGFsbAotZXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHRoZSBfZ19nbnVsaWIgbmFtZXNwYWNlLCByZXBsYWNlIG1hbGxvYyBieQotZ19tYWxsb2MgYW5kIG1ha2Ugc3VyZSB0aGF0IHNucHJpbnRmIGlzIG9ubHkgdXNlZCBpZiBpdCBpbXBsZW1lbnRzCi1DOTkgcmV0dXJuIHZhbHVlIHNlbWFudGljcy4KLQotTWF0dGhpYXMgQ2xhc2VuCi1Ob3ZlbWJlciAxLCAyMDAzCi0KLS0tLS0tCi0KLUdTdHJlYW1lciBtb2RpZmljYXRpb25zCi0KLVRoaXMgd2FzIGltcG9ydGVkIGZyb20gR0xpYidzIGdudWxpYiBzdWJkaXJlY3RvcnkuCi0KLWctZ251bGliLmggYW5kIF9nX2dudWxpYiBuYW1lc3BhY2UgaGFzIGJlZW4gY2hhbmdlZCB0byBnc3QtcHJpbnRmLmggYW5kCi1fX2dzdF9wcmludGYgbmFtZXNwYWNlIGZvciBHU3RyZWFtZXIuIEFsc28gI2RlZmluZSBIQVZFX1NOUFJJTlRGIDAgaGFzCi1iZWVuIGNoYW5nZWQgdG8gI3VuZGVmIEhBVkVfU05QUklOVEYsIGFuZCBIQVZFX0FMTE9DQSBoYXMgYmVlbiByZXBsYWNlZAotYnkgYW4gI2lmIGRlZmluZWQoYWxsb2NhKSB8fCBkZWZpbmVkKEdMSUJfSEFWRV9BTExPQ0FfSCkKLQotcHJpbnRmLWV4dGVuc2lvbi5bY2hdIHdlcmUgYWRkZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBjdXN0b20gcG9pbnRlcgotYXJndW1lbnRzIChlLmcuIGNhcHMsIGV2ZW50cywgZXRjLikKLQotRmlsZXMgaGF2ZSBhbHNvIGJlZW4gaW5kZW50ZWQgd2l0aCBnc3QtaW5kZW50LCBzbyB0aGlzIGlzIGJhc2ljYWxseSBhCi1wZXJtYW5lbnQgZm9yayBhbmQgYW55IHBhdGNoZXMgd2lsbCBoYXZlIHRvIGJlIG1lcmdlZCBtYW51YWxseS4KLQotTWFyY2ggMzAsIDIwMTMuCmRpZmYgLS1naXQgYS9nc3QvcHJpbnRmL2FzbnByaW50Zi5jIGIvZ3N0L3ByaW50Zi9hc25wcmludGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwNmQzOC4uMDAwMDAwMAotLS0gYS9nc3QvcHJpbnRmL2FzbnByaW50Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLgotICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotICAgVVNBLiAgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImdzdC1wcmludGYuaCIKLQotLyogU3BlY2lmaWNhdGlvbi4gICovCi0jaW5jbHVkZSAidmFzbnByaW50Zi5oIgotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLWNoYXIgKgotYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqIGxlbmd0aHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IGFyZ3M7Ci0gIGNoYXIgKnJlc3VsdDsKLQotICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKLSAgcmVzdWx0ID0gdmFzbnByaW50ZiAocmVzdWx0YnVmLCBsZW5ndGhwLCBmb3JtYXQsIGFyZ3MpOwotICB2YV9lbmQgKGFyZ3MpOwotICByZXR1cm4gcmVzdWx0OwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3ByaW50Zi9nc3QtcHJpbnRmLmggYi9nc3QvcHJpbnRmL2dzdC1wcmludGYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI1OTcyYS4uMDAwMDAwMAotLS0gYS9nc3QvcHJpbnRmL2dzdC1wcmludGYuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qIEdMSUIgLSBMaWJyYXJ5IG9mIHVzZWZ1bCByb3V0aW5lcyBmb3IgQyBwcm9ncmFtbWluZwotICogQ29weXJpZ2h0IChDKSAyMDAzICBNYXR0aGlhcyBDbGFzZW4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotI2lmbmRlZiBfX0dfR05VTElCX0hfXwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotCi0vKiBQcml2YXRlIG5hbWVzcGFjZSBmb3IgZ251bGliIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBhc25wcmludGYgICAgICAgIF9fZ3N0X2FzbnByaW50ZgotI2RlZmluZSB2YXNucHJpbnRmICAgICAgIF9fZ3N0X3Zhc25wcmludGYKLSNkZWZpbmUgcHJpbnRmX3BhcnNlICAgICBfX2dzdF9wcmludGZfcGFyc2UKLSNkZWZpbmUgcHJpbnRmX2ZldGNoYXJncyBfX2dzdF9wcmludGZfZmV0Y2hhcmdzCi0KLS8qIFVzZSBHTGliIG1lbW9yeSBhbGxvY2F0aW9uICovCi0jdW5kZWYgbWFsbG9jCi0jdW5kZWYgcmVhbGxvYwotI3VuZGVmIGZyZWUKLSNkZWZpbmUgbWFsbG9jICBnX21hbGxvYwotI2RlZmluZSByZWFsbG9jIGdfcmVhbGxvYwotI2RlZmluZSBmcmVlICAgIGdfZnJlZQotCi0vKiBEb24ndCB1c2Ugc25wcmludGYoKTsgd2UgaGF2ZSB0byB1c2Ugc3ByaW50ZiBpbnN0ZWFkIGFuZCBkbyBvdXIgb3duCi0gKiBsZW5ndGggY2FsY3VsYXRpb25zLCBiZWNhdXNlIGdsaWJjIGRvZXNuJ3QgYWxsb3cgcGFzc2luZyAlbiBpbiBhIGZvcm1hdAotICogc3RyaW5nIGlmIHRoZSBzdHJpbmcgaXMgaW4gd3JpdGFibGUgbWVtb3J5IChpZiBnbGliYyBoYXMgYmVlbiBjb21waWxlZAotICogd2l0aCBfRk9SVElGWV9TT1VSQ0U9MiB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2FzZSBvbiBzb21lIGRpc3Ryb3Mvc3lzdGVtcykgKi8KLSN1bmRlZiBIQVZFX1NOUFJJTlRGCi0KLS8qIGJhc2VkIG9uIGdsaWIncyBjb25maWcuaC53aW4zMi5pbiAqLwotI2lmZGVmIEdfT1NfV0lOMzIKLQotLyogZGVmaW5lIHRvIHN1cHBvcnQgcHJpbnRpbmcgNjQtYml0IGludGVnZXJzIHdpdGggZm9ybWF0IEk2NCAqLwotI2RlZmluZSBIQVZFX0lOVDY0X0FORF9JNjQgMQotCi0jaWYgZGVmaW5lZCAoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE2MDAKLSN1bmRlZiBIQVZFX0lOVE1BWF9UCi0jZGVmaW5lIEhBVkVfSU5UTUFYX1QgMQotI2RlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCAxCi0jZW5kaWYKLQotI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KLQotI2VuZGlmICAvKiBfX0dfR05VTElCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3ByaW50Zi9wcmludGYtYXJncy5jIGIvZ3N0L3ByaW50Zi9wcmludGYtYXJncy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTc3ZGRiLi4wMDAwMDAwCi0tLSBhL2dzdC9wcmludGYvcHJpbnRmLWFyZ3MuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKiBEZWNvbXBvc2VkIHByaW50ZiBhcmd1bWVudCBsaXN0LgotICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCi0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCi0gICBVU0EuICAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0LXByaW50Zi5oIgotCi0vKiBTcGVjaWZpY2F0aW9uLiAgKi8KLSNpbmNsdWRlICJwcmludGYtYXJncy5oIgotCi0jaWZkZWYgU1RBVElDCi1TVEFUSUMKLSNlbmRpZgotICAgIGludAotcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKiBhKQotewotICB1bnNpZ25lZCBpbnQgaTsKLSAgYXJndW1lbnQgKmFwOwotCi0gIGZvciAoaSA9IDAsIGFwID0gJmEtPmFyZ1swXTsgaSA8IGEtPmNvdW50OyBpKyssIGFwKyspCi0gICAgc3dpdGNoIChhcC0+dHlwZSkgewotICAgICAgY2FzZSBUWVBFX1NDSEFSOgotICAgICAgICBhcC0+YS5hX3NjaGFyID0gdmFfYXJnIChhcmdzLCAvKnNpZ25lZCBjaGFyICovIGludCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBUWVBFX1VDSEFSOgotICAgICAgICBhcC0+YS5hX3VjaGFyID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIGNoYXIgKi8gaW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRZUEVfU0hPUlQ6Ci0gICAgICAgIGFwLT5hLmFfc2hvcnQgPSB2YV9hcmcgKGFyZ3MsIC8qc2hvcnQgKi8gaW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRZUEVfVVNIT1JUOgotICAgICAgICBhcC0+YS5hX3VzaG9ydCA9IHZhX2FyZyAoYXJncywgLyp1bnNpZ25lZCBzaG9ydCAqLyBpbnQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVFlQRV9JTlQ6Ci0gICAgICAgIGFwLT5hLmFfaW50ID0gdmFfYXJnIChhcmdzLCBpbnQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVFlQRV9VSU5UOgotICAgICAgICBhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBUWVBFX0xPTkdJTlQ6Ci0gICAgICAgIGFwLT5hLmFfbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgbG9uZyBpbnQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKLSAgICAgICAgYXAtPmEuYV91bG9uZ2ludCA9IHZhX2FyZyAoYXJncywgdW5zaWduZWQgbG9uZyBpbnQpOwotICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgotICAgICAgICBhcC0+YS5hX2xvbmdsb25naW50ID0gdmFfYXJnIChhcmdzLCBsb25nIGxvbmcgaW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRZUEVfVUxPTkdMT05HSU5UOgotICAgICAgICBhcC0+YS5hX3Vsb25nbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgdW5zaWduZWQgbG9uZyBsb25nIGludCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9JTlQ2NF9BTkRfSTY0Ci0gICAgICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAgICAgIGFwLT5hLmFfaW50NjQgPSB2YV9hcmcgKGFyZ3MsIF9faW50NjQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVFlQRV9VSU5UNjQ6Ci0gICAgICAgIGFwLT5hLmFfdWludDY0ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBfX2ludDY0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgIGNhc2UgVFlQRV9ET1VCTEU6Ci0gICAgICAgIGFwLT5hLmFfZG91YmxlID0gdmFfYXJnIChhcmdzLCBkb3VibGUpOwotICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCi0gICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKLSAgICAgICAgYXAtPmEuYV9sb25nZG91YmxlID0gdmFfYXJnIChhcmdzLCBsb25nIGRvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICBjYXNlIFRZUEVfQ0hBUjoKLSAgICAgICAgYXAtPmEuYV9jaGFyID0gdmFfYXJnIChhcmdzLCBpbnQpOwotICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX1dJTlRfVAotICAgICAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKLSNpZmRlZiBfV0lOMzIKLSAgICAgICAgYXAtPmEuYV93aWRlX2NoYXIgPSB2YV9hcmcgKGFyZ3MsIGludCk7Ci0jZWxzZQotICAgICAgICBhcC0+YS5hX3dpZGVfY2hhciA9IHZhX2FyZyAoYXJncywgd2ludF90KTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgY2FzZSBUWVBFX1NUUklORzoKLSAgICAgICAgYXAtPmEuYV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IGNoYXIgKik7Ci0gICAgICAgIGJyZWFrOwotI2lmZGVmIEhBVkVfV0NIQVJfVAotICAgICAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgotICAgICAgICBhcC0+YS5hX3dpZGVfc3RyaW5nID0gdmFfYXJnIChhcmdzLCBjb25zdCB3Y2hhcl90ICopOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgY2FzZSBUWVBFX1BPSU5URVI6Ci0gICAgICBjYXNlIFRZUEVfUE9JTlRFUl9FWFQ6Ci0gICAgICAgIGFwLT5hLmFfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgdm9pZCAqKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjoKLSAgICAgICAgYXAtPmEuYV9jb3VudF9zY2hhcl9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaWduZWQgY2hhciAqKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUjoKLSAgICAgICAgYXAtPmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaG9ydCAqKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6Ci0gICAgICAgIGFwLT5hLmFfY291bnRfaW50X3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIGludCAqKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSOgotICAgICAgICBhcC0+YS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBpbnQgKik7Ci0gICAgICAgIGJyZWFrOwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICBjYXNlIFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUjoKLSAgICAgICAgYXAtPmEuYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBsb25nIGxvbmcgaW50ICopOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLyogVW5rbm93biB0eXBlLiAgKi8KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9nc3QvcHJpbnRmL3ByaW50Zi1hcmdzLmggYi9nc3QvcHJpbnRmL3ByaW50Zi1hcmdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYTNjMTguLjAwMDAwMDAKLS0tIGEvZ3N0L3ByaW50Zi9wcmludGYtYXJncy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qIERlY29tcG9zZWQgcHJpbnRmIGFyZ3VtZW50IGxpc3QuCi0gICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSAgIFVTQS4gICovCi0KLSNpZm5kZWYgX1BSSU5URl9BUkdTX0gKLSNkZWZpbmUgX1BSSU5URl9BUkdTX0gKLQotLyogR2V0IHdjaGFyX3QuICAqLwotI2lmZGVmIEhBVkVfV0NIQVJfVAotIyBpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbmRpZgotCi0vKiBHZXQgd2ludF90LiAgKi8KLSNpZmRlZiBIQVZFX1dJTlRfVAotIyBpbmNsdWRlIDx3Y2hhci5oPgotI2VuZGlmCi0KLS8qIEdldCB2YV9saXN0LiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotI2RlZmluZSBQT0lOVEVSX0VYVF9TSUdOSUZJRVJfQ0hBUiAnXGEnCi0KLS8qIEFyZ3VtZW50IHR5cGVzICovCi10eXBlZGVmIGVudW0KLXsKLSAgVFlQRV9OT05FLAotICBUWVBFX1NDSEFSLAotICBUWVBFX1VDSEFSLAotICBUWVBFX1NIT1JULAotICBUWVBFX1VTSE9SVCwKLSAgVFlQRV9JTlQsCi0gIFRZUEVfVUlOVCwKLSAgVFlQRV9MT05HSU5ULAotICBUWVBFX1VMT05HSU5ULAotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gIFRZUEVfTE9OR0xPTkdJTlQsCi0gIFRZUEVfVUxPTkdMT05HSU5ULAotI2VuZGlmCi0jaWZkZWYgSEFWRV9JTlQ2NF9BTkRfSTY0Ci0gIFRZUEVfSU5UNjQsCi0gIFRZUEVfVUlOVDY0LAotI2VuZGlmCi0gIFRZUEVfRE9VQkxFLAotI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKLSAgVFlQRV9MT05HRE9VQkxFLAotI2VuZGlmCi0gIFRZUEVfQ0hBUiwKLSNpZmRlZiBIQVZFX1dJTlRfVAotICBUWVBFX1dJREVfQ0hBUiwKLSNlbmRpZgotICBUWVBFX1NUUklORywKLSNpZmRlZiBIQVZFX1dDSEFSX1QKLSAgVFlQRV9XSURFX1NUUklORywKLSNlbmRpZgotICBUWVBFX1BPSU5URVIsCi0gIFRZUEVfUE9JTlRFUl9FWFQsCi0gIFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUiwKLSAgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSLAotICBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSLAotICBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUgotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0sIFRZUEVfQ09VTlRfTE9OR0xPTkdJTlRfUE9JTlRFUgotI2VuZGlmCi19IGFyZ190eXBlOwotCi0vKiBQb2x5bW9ycGhpYyBhcmd1bWVudCAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgYXJnX3R5cGUgdHlwZTsKLSAgdW5pb24KLSAgewotICAgIHNpZ25lZCBjaGFyCQkJYV9zY2hhcjsKLSAgICB1bnNpZ25lZCBjaGFyCQlhX3VjaGFyOwotICAgIHNob3J0CQkJYV9zaG9ydDsKLSAgICB1bnNpZ25lZCBzaG9ydAkJYV91c2hvcnQ7Ci0gICAgaW50CQkJCWFfaW50OwotICAgIHVuc2lnbmVkIGludAkJYV91aW50OwotICAgIGxvbmcgaW50CQkJYV9sb25naW50OwotICAgIHVuc2lnbmVkIGxvbmcgaW50CQlhX3Vsb25naW50OwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgbG9uZyBsb25nIGludAkJYV9sb25nbG9uZ2ludDsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CWFfdWxvbmdsb25naW50OwotI2VuZGlmCi0jaWZkZWYgSEFWRV9JTlQ2NF9BTkRfSTY0Ci0gICAgX19pbnQ2NCAgICAgICAgICAgICAgICAgICAgIGFfaW50NjQ7Ci0gICAgdW5zaWduZWQgX19pbnQ2NCAgICAgICAgICAgIGFfdWludDY0OwotI2VuZGlmCi0gICAgZmxvYXQJCQlhX2Zsb2F0OwotICAgIGRvdWJsZQkJCWFfZG91YmxlOwotI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKLSAgICBsb25nIGRvdWJsZQkJCWFfbG9uZ2RvdWJsZTsKLSNlbmRpZgotICAgIGludAkJCQlhX2NoYXI7Ci0jaWZkZWYgSEFWRV9XSU5UX1QKLSAgICB3aW50X3QJCQlhX3dpZGVfY2hhcjsKLSNlbmRpZgotICAgIGNvbnN0IGNoYXIqCQkJYV9zdHJpbmc7Ci0jaWZkZWYgSEFWRV9XQ0hBUl9UCi0gICAgY29uc3Qgd2NoYXJfdCoJCWFfd2lkZV9zdHJpbmc7Ci0jZW5kaWYKLSAgICB2b2lkKgkJCWFfcG9pbnRlcjsKLSAgICBzaWduZWQgY2hhciAqCQlhX2NvdW50X3NjaGFyX3BvaW50ZXI7Ci0gICAgc2hvcnQgKgkJCWFfY291bnRfc2hvcnRfcG9pbnRlcjsKLSAgICBpbnQgKgkJCWFfY291bnRfaW50X3BvaW50ZXI7Ci0gICAgbG9uZyBpbnQgKgkJCWFfY291bnRfbG9uZ2ludF9wb2ludGVyOwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgbG9uZyBsb25nIGludCAqCQlhX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXI7Ci0jZW5kaWYKLSAgfQotICBhOwotCi0gIC8qIHN0cmluZyB0byByZXBsYWNlIHBvaW50ZXIgYXJndW1lbnQgd2l0aCBmb3IgVFlQRV9QT0lOVEVSX0VYVCAqLwotICBjaGFyICpleHRfc3RyaW5nOwotfQotYXJndW1lbnQ7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIHVuc2lnbmVkIGludCBjb3VudDsKLSAgYXJndW1lbnQgKmFyZzsKLX0KLWFyZ3VtZW50czsKLQotCi0vKiBGZXRjaCB0aGUgYXJndW1lbnRzLCBwdXR0aW5nIHRoZW0gaW50byBhLiAqLwotI2lmZGVmIFNUQVRJQwotU1RBVElDCi0jZWxzZQotZXh0ZXJuCi0jZW5kaWYKLWludCBwcmludGZfZmV0Y2hhcmdzICh2YV9saXN0IGFyZ3MsIGFyZ3VtZW50cyAqYSk7Ci0KLSNlbmRpZiAvKiBfUFJJTlRGX0FSR1NfSCAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3ByaW50Zi9wcmludGYtZXh0ZW5zaW9uLmMgYi9nc3QvcHJpbnRmL3ByaW50Zi1leHRlbnNpb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5OGM5Ny4uMDAwMDAwMAotLS0gYS9nc3QvcHJpbnRmL3ByaW50Zi1leHRlbnNpb24uYworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qIEdTdHJlYW1lciBwcmludGYgZXh0ZW5zaW9uIGhvb2tzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAicHJpbnRmLWV4dGVuc2lvbi5oIgotI2luY2x1ZGUgImdzdC1wcmludGYuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1zdGF0aWMgUHJpbnRmUG9pbnRlckV4dGVuc2lvbkZ1bmMgcHRyX2V4dF9mdW5jOyAvKiBOVUxMICovCi0KLXZvaWQKLV9fZ3N0X3ByaW50Zl9wb2ludGVyX2V4dGVuc2lvbl9zZXRfZnVuYyAoUHJpbnRmUG9pbnRlckV4dGVuc2lvbkZ1bmMgZnVuYykKLXsKLSAgLyogc2luY2UgdGhpcyBpcyBpbnRlcm5hbCwgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aHJlYWQtc2FmZXR5ICovCi0gIHB0cl9leHRfZnVuYyA9IGZ1bmM7Ci19Ci0KLWNoYXIgKgotX19nc3RfcHJpbnRmX3BvaW50ZXJfZXh0ZW5zaW9uX3NlcmlhbGl6ZSAoY29uc3QgY2hhciAqZm9ybWF0LCB2b2lkICpwdHIpCi17Ci0gIGNoYXIgKmJ1ZjsKLQotICBpZiAocHRyX2V4dF9mdW5jID09IE5VTEwpIHsKLSAgICBidWYgPSBtYWxsb2MgKDMyKTsKLSAgICBtZW1zZXQgKGJ1ZiwgMCwgMzIpOwotICAgIHNwcmludGYgKGJ1ZiwgIiVwIiwgcHRyKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBub3RlOiB3ZSBtYXAgbWFsbG9jL2ZyZWUgdG8gZ19tYWxsb2MvZ19mcmVlIGluIGdzdC1wcmludGYuaCwgc28gdGhlCi0gICAgICogZmFjdCB0aGF0IGdzdGluZm8gZ2l2ZXMgdXMgYSBnbGliLWFsbG9jYXRlZCBzdHJpbmcgYW5kIHRoZSBwcmludGYKLSAgICAgKiByb3V0aW5lcyBmcmVlIGl0IHdpdGggZnJlZSgpIGFuZCBub3QgZ19mcmVlKCkgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0gKi8KLSAgICBidWYgPSBwdHJfZXh0X2Z1bmMgKGZvcm1hdCwgcHRyKTsKLSAgfQotICByZXR1cm4gYnVmOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3ByaW50Zi9wcmludGYtZXh0ZW5zaW9uLmggYi9nc3QvcHJpbnRmL3ByaW50Zi1leHRlbnNpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwM2ExYS4uMDAwMDAwMAotLS0gYS9nc3QvcHJpbnRmL3ByaW50Zi1leHRlbnNpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qIEdTdHJlYW1lciBwcmludGYgZXh0ZW5zaW9uIGhvb2tzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1BSSU5URl9FWFRFTlNJT05fSF9JTkNMVURFRF9fCi0jZGVmaW5lIF9fR1NUX1BSSU5URl9FWFRFTlNJT05fSF9JTkNMVURFRF9fCi0KLXR5cGVkZWYgY2hhciAqICgqUHJpbnRmUG9pbnRlckV4dGVuc2lvbkZ1bmMpIChjb25zdCBjaGFyICogZm9ybWF0LCB2b2lkICogcHRyKTsKLQotLyogd2Ugb25seSBuZWVkIG9uZSBnbG9iYWwgZnVuY3Rpb24sIHNpbmNlIGl0J3Mgb25seSBHc3RJbmZvIHJlZ2lzdGVyaW5nIGV4dGVuc2lvbnMgKi8KLXZvaWQgICBfX2dzdF9wcmludGZfcG9pbnRlcl9leHRlbnNpb25fc2V0X2Z1bmMgIChQcmludGZQb2ludGVyRXh0ZW5zaW9uRnVuYyBmdW5jKTsKLQotLyogZnVuY3Rpb25zIGZvciBpbnRlcm5hbCBwcmludGYgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIHRoZSBleHRlbnNpb25zICovCi1jaGFyICogX19nc3RfcHJpbnRmX3BvaW50ZXJfZXh0ZW5zaW9uX3NlcmlhbGl6ZSAoY29uc3QgY2hhciAqIGZvcm1hdCwgdm9pZCAqIHB0cik7Ci0KLSNlbmRpZiAvKiBfX0dTVF9QUklOVEZfRVhURU5TSU9OX0hfSU5DTFVERURfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3ByaW50Zi9wcmludGYtcGFyc2UuYyBiL2dzdC9wcmludGYvcHJpbnRmLXBhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNDVhZTguLjAwMDAwMDAKLS0tIGEvZ3N0L3ByaW50Zi9wcmludGYtcGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MSArMCwwIEBACi0vKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MuCi0gICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCwgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotICAgVVNBLiAgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImdzdC1wcmludGYuaCIKLQotLyogU3BlY2lmaWNhdGlvbi4gICovCi0jaW5jbHVkZSAicHJpbnRmLXBhcnNlLmgiCi0KLS8qIEdldCBzaXplX3QsIE5VTEwuICAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCi0vKiBHZXQgaW50bWF4X3QuICAqLwotI2lmZGVmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYCi0jIGluY2x1ZGUgPHN0ZGludC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAotIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2VuZGlmCi0KLS8qIG1hbGxvYygpLCByZWFsbG9jKCksIGZyZWUoKS4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpZmRlZiBTVEFUSUMKLVNUQVRJQwotI2VuZGlmCi0gICAgaW50Ci1wcmludGZfcGFyc2UgKGNvbnN0IGNoYXIgKmZvcm1hdCwgY2hhcl9kaXJlY3RpdmVzICogZCwgYXJndW1lbnRzICogYSkKLXsKLSAgY29uc3QgY2hhciAqY3AgPSBmb3JtYXQ7ICAgICAgLyogcG9pbnRlciBpbnRvIGZvcm1hdCAqLwotICBpbnQgYXJnX3Bvc24gPSAwOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcmVndWxhciBhcmd1bWVudHMgY29uc3VtZWQgKi8KLSAgdW5zaWduZWQgaW50IGRfYWxsb2NhdGVkOyAgICAgLyogYWxsb2NhdGVkIGVsZW1lbnRzIG9mIGQtPmRpciAqLwotICB1bnNpZ25lZCBpbnQgYV9hbGxvY2F0ZWQ7ICAgICAvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgYS0+YXJnICovCi0gIHVuc2lnbmVkIGludCBtYXhfd2lkdGhfbGVuZ3RoID0gMDsKLSAgdW5zaWduZWQgaW50IG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMDsKLQotICBkLT5jb3VudCA9IDA7Ci0gIGRfYWxsb2NhdGVkID0gMTsKLSAgZC0+ZGlyID0gbWFsbG9jIChkX2FsbG9jYXRlZCAqIHNpemVvZiAoY2hhcl9kaXJlY3RpdmUpKTsKLSAgaWYgKGQtPmRpciA9PSBOVUxMKQotICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLwotICAgIHJldHVybiAtMTsKLQotICBhLT5jb3VudCA9IDA7Ci0gIGFfYWxsb2NhdGVkID0gMDsKLSAgYS0+YXJnID0gTlVMTDsKLQotI2RlZmluZSBSRUdJU1RFUl9BUkcoX2luZGV4XyxfdHlwZV8pIFwKLSAgewkJCQkJCQkJCVwKLSAgICB1bnNpZ25lZCBpbnQgbiA9IChfaW5kZXhfKTsJCQkJCQlcCi0gICAgaWYgKG4gPj0gYV9hbGxvY2F0ZWQpCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlhcmd1bWVudCAqbWVtb3J5OwkJCQkJCVwKLQlhX2FsbG9jYXRlZCA9IDIgKiBhX2FsbG9jYXRlZDsJCQkJCVwKLQlpZiAoYV9hbGxvY2F0ZWQgPD0gbikJCQkJCQlcCi0JICBhX2FsbG9jYXRlZCA9IG4gKyAxOwkJCQkJCVwKLQltZW1vcnkgPSAoYS0+YXJnCQkJCQkJXAotCQkgID8gcmVhbGxvYyAoYS0+YXJnLCBhX2FsbG9jYXRlZCAqIHNpemVvZiAoYXJndW1lbnQpKQlcCi0JCSAgOiBtYWxsb2MgKGFfYWxsb2NhdGVkICogc2l6ZW9mIChhcmd1bWVudCkpKTsJCVwKLQlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJXAotCSAgLyogT3V0IG9mIG1lbW9yeS4gICovCQkJCQkJXAotCSAgZ290byBlcnJvcjsJCQkJCQkJXAotCWEtPmFyZyA9IG1lbW9yeTsJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIHdoaWxlIChhLT5jb3VudCA8PSBuKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBhLT5hcmdbYS0+Y291bnRdLnR5cGUgPSBUWVBFX05PTkU7ICAgICAgICAgICAgICAgIFwKLSAgICAgIGEtPmFyZ1thLT5jb3VudF0uZXh0X3N0cmluZyA9IChjaGFyICopIDA7ICAgICAgICAgXAotICAgICAgKythLT5jb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYS0+YXJnW25dLnR5cGUgPT0gVFlQRV9OT05FKQkJCQkJXAotICAgICAgYS0+YXJnW25dLnR5cGUgPSAoX3R5cGVfKTsJCQkJCVwKLSAgICBlbHNlIGlmIChhLT5hcmdbbl0udHlwZSAhPSAoX3R5cGVfKSkJCQkJXAotICAgICAgLyogQW1iaWd1b3VzIHR5cGUgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLwkJCVwKLSAgICAgIGdvdG8gZXJyb3I7CQkJCQkJCVwKLSAgfQotCi0gIHdoaWxlICgqY3AgIT0gJ1wwJykgewotICAgIGNoYXIgYyA9ICpjcCsrOwotICAgIGlmIChjID09ICclJykgewotICAgICAgaW50IGFyZ19pbmRleCA9IC0xOwotICAgICAgY2hhcl9kaXJlY3RpdmUgKmRwID0gJmQtPmRpcltkLT5jb3VudF07ICAgLyogcG9pbnRlciB0byBuZXh0IGRpcmVjdGl2ZSAqLwotCi0gICAgICAvKiBJbml0aWFsaXplIHRoZSBuZXh0IGRpcmVjdGl2ZS4gICovCi0gICAgICBkcC0+ZGlyX3N0YXJ0ID0gY3AgLSAxOwotICAgICAgZHAtPmZsYWdzID0gMDsKLSAgICAgIGRwLT53aWR0aF9zdGFydCA9IE5VTEw7Ci0gICAgICBkcC0+d2lkdGhfZW5kID0gTlVMTDsKLSAgICAgIGRwLT53aWR0aF9hcmdfaW5kZXggPSAtMTsKLSAgICAgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBOVUxMOwotICAgICAgZHAtPnByZWNpc2lvbl9lbmQgPSBOVUxMOwotICAgICAgZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPSAtMTsKLSAgICAgIGRwLT5hcmdfaW5kZXggPSAtMTsKLQotICAgICAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCi0gICAgICBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm5wOwotCi0gICAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKTsKLSAgICAgICAgaWYgKCpucCA9PSAnJCcpIHsKLSAgICAgICAgICB1bnNpZ25lZCBpbnQgbiA9IDA7Ci0KLSAgICAgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKLSAgICAgICAgICAgIG4gPSAxMCAqIG4gKyAoKm5wIC0gJzAnKTsKLSAgICAgICAgICBpZiAobiA9PSAwKQotICAgICAgICAgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgYXJnX2luZGV4ID0gbiAtIDE7Ci0gICAgICAgICAgY3AgPSBucCArIDE7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLyogUmVhZCB0aGUgZmxhZ3MuICAqLwotICAgICAgZm9yICg7OykgewotICAgICAgICBpZiAoKmNwID09ICdcJycpIHsKLSAgICAgICAgICBkcC0+ZmxhZ3MgfD0gRkxBR19HUk9VUDsKLSAgICAgICAgICBjcCsrOwotICAgICAgICB9IGVsc2UgaWYgKCpjcCA9PSAnLScpIHsKLSAgICAgICAgICBkcC0+ZmxhZ3MgfD0gRkxBR19MRUZUOwotICAgICAgICAgIGNwKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmNwID09ICcrJykgewotICAgICAgICAgIGRwLT5mbGFncyB8PSBGTEFHX1NIT1dTSUdOOwotICAgICAgICAgIGNwKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmNwID09ICcgJykgewotICAgICAgICAgIGRwLT5mbGFncyB8PSBGTEFHX1NQQUNFOwotICAgICAgICAgIGNwKys7Ci0gICAgICAgIH0gZWxzZSBpZiAoKmNwID09ICcjJykgewotICAgICAgICAgIGRwLT5mbGFncyB8PSBGTEFHX0FMVDsKLSAgICAgICAgICBjcCsrOwotICAgICAgICB9IGVsc2UgaWYgKCpjcCA9PSAnMCcpIHsKLSAgICAgICAgICBkcC0+ZmxhZ3MgfD0gRkxBR19aRVJPOwotICAgICAgICAgIGNwKys7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiBQYXJzZSB0aGUgZmllbGQgd2lkdGguICAqLwotICAgICAgaWYgKCpjcCA9PSAnKicpIHsKLSAgICAgICAgZHAtPndpZHRoX3N0YXJ0ID0gY3A7Ci0gICAgICAgIGNwKys7Ci0gICAgICAgIGRwLT53aWR0aF9lbmQgPSBjcDsKLSAgICAgICAgaWYgKG1heF93aWR0aF9sZW5ndGggPCAxKQotICAgICAgICAgIG1heF93aWR0aF9sZW5ndGggPSAxOwotCi0gICAgICAgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLwotICAgICAgICBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKSB7Ci0gICAgICAgICAgY29uc3QgY2hhciAqbnA7Ci0KLSAgICAgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKyk7Ci0gICAgICAgICAgaWYgKCpucCA9PSAnJCcpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBuID0gMDsKLQotICAgICAgICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCi0gICAgICAgICAgICAgIG4gPSAxMCAqIG4gKyAoKm5wIC0gJzAnKTsKLSAgICAgICAgICAgIGlmIChuID09IDApCi0gICAgICAgICAgICAgIC8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCi0gICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBkcC0+d2lkdGhfYXJnX2luZGV4ID0gbiAtIDE7Ci0gICAgICAgICAgICBjcCA9IG5wICsgMTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggPCAwKQotICAgICAgICAgIGRwLT53aWR0aF9hcmdfaW5kZXggPSBhcmdfcG9zbisrOwotICAgICAgICBSRUdJU1RFUl9BUkcgKGRwLT53aWR0aF9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKLSAgICAgIH0gZWxzZSBpZiAoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCB3aWR0aF9sZW5ndGg7Ci0KLSAgICAgICAgZHAtPndpZHRoX3N0YXJ0ID0gY3A7Ci0gICAgICAgIGZvciAoOyAqY3AgPj0gJzAnICYmICpjcCA8PSAnOSc7IGNwKyspOwotICAgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7Ci0gICAgICAgIHdpZHRoX2xlbmd0aCA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7Ci0gICAgICAgIGlmIChtYXhfd2lkdGhfbGVuZ3RoIDwgd2lkdGhfbGVuZ3RoKQotICAgICAgICAgIG1heF93aWR0aF9sZW5ndGggPSB3aWR0aF9sZW5ndGg7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFBhcnNlIHRoZSBwcmVjaXNpb24uICAqLwotICAgICAgaWYgKCpjcCA9PSAnLicpIHsKLSAgICAgICAgY3ArKzsKLSAgICAgICAgaWYgKCpjcCA9PSAnKicpIHsKLSAgICAgICAgICBkcC0+cHJlY2lzaW9uX3N0YXJ0ID0gY3AgLSAxOwotICAgICAgICAgIGNwKys7Ci0gICAgICAgICAgZHAtPnByZWNpc2lvbl9lbmQgPSBjcDsKLSAgICAgICAgICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCAyKQotICAgICAgICAgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAyOwotCi0gICAgICAgICAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCi0gICAgICAgICAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykgewotICAgICAgICAgICAgY29uc3QgY2hhciAqbnA7Ci0KLSAgICAgICAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKTsKLSAgICAgICAgICAgIGlmICgqbnAgPT0gJyQnKSB7Ci0gICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuID0gMDsKLQotICAgICAgICAgICAgICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKLSAgICAgICAgICAgICAgICBuID0gMTAgKiBuICsgKCpucCAtICcwJyk7Ci0gICAgICAgICAgICAgIGlmIChuID09IDApCi0gICAgICAgICAgICAgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IG4gLSAxOwotICAgICAgICAgICAgICBjcCA9IG5wICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4IDwgMCkKLSAgICAgICAgICAgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gYXJnX3Bvc24rKzsKLSAgICAgICAgICBSRUdJU1RFUl9BUkcgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4LCBUWVBFX0lOVCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdW5zaWduZWQgaW50IHByZWNpc2lvbl9sZW5ndGg7Ci0KLSAgICAgICAgICBkcC0+cHJlY2lzaW9uX3N0YXJ0ID0gY3AgLSAxOwotICAgICAgICAgIGZvciAoOyAqY3AgPj0gJzAnICYmICpjcCA8PSAnOSc7IGNwKyspOwotICAgICAgICAgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7Ci0gICAgICAgICAgcHJlY2lzaW9uX2xlbmd0aCA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKLSAgICAgICAgICBpZiAobWF4X3ByZWNpc2lvbl9sZW5ndGggPCBwcmVjaXNpb25fbGVuZ3RoKQotICAgICAgICAgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSBwcmVjaXNpb25fbGVuZ3RoOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHsKLSAgICAgICAgYXJnX3R5cGUgdHlwZTsKLQotICAgICAgICAvKiBQYXJzZSBhcmd1bWVudCB0eXBlL3NpemUgc3BlY2lmaWVycy4gICovCi0gICAgICAgIHsKLSAgICAgICAgICBpbnQgZmxhZ3MgPSAwOwotCi0gICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaWYgKCpjcCA9PSAnaCcpIHsKLSAgICAgICAgICAgICAgZmxhZ3MgfD0gKDEgPDwgKGZsYWdzICYgMSkpOwotICAgICAgICAgICAgICBjcCsrOwotICAgICAgICAgICAgfSBlbHNlIGlmICgqY3AgPT0gJ0wnKSB7Ci0gICAgICAgICAgICAgIGZsYWdzIHw9IDQ7Ci0gICAgICAgICAgICAgIGNwKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCpjcCA9PSAnbCcpIHsKLSAgICAgICAgICAgICAgZmxhZ3MgKz0gODsKLSAgICAgICAgICAgICAgY3ArKzsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBIQVZFX0lOVDY0X0FORF9JNjQKLSAgICAgICAgICAgIGVsc2UgaWYgKGNwWzBdID09ICdJJyAmJiBjcFsxXSA9PSAnNicgJiYgY3BbMl0gPT0gJzQnKSB7Ci0gICAgICAgICAgICAgIGZsYWdzID0gNjQ7Ci0gICAgICAgICAgICAgIGNwICs9IDM7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIGVsc2UgaWYgKGNwWzBdID09ICdJJyAmJiBjcFsxXSA9PSAnMycgJiYgY3BbMl0gPT0gJzInKSB7Ci0gICAgICAgICAgICAgIC8vZmxhZ3MgPSAzMjsKLSAgICAgICAgICAgICAgY3AgKz0gMzsKLSAgICAgICAgICAgIH0KLSNpZmRlZiBIQVZFX0lOVE1BWF9UCi0gICAgICAgICAgICBlbHNlIGlmICgqY3AgPT0gJ2onKSB7Ci0gICAgICAgICAgICAgIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAobG9uZykpIHsKLSAgICAgICAgICAgICAgICAvKiBpbnRtYXhfdCA9IGxvbmcgbG9uZyAqLwotICAgICAgICAgICAgICAgIGZsYWdzICs9IDE2OwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpemVvZiAoaW50bWF4X3QpID4gc2l6ZW9mIChpbnQpKSB7Ci0gICAgICAgICAgICAgICAgLyogaW50bWF4X3QgPSBsb25nICovCi0gICAgICAgICAgICAgICAgZmxhZ3MgKz0gODsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjcCsrOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBlbHNlIGlmICgqY3AgPT0gJ3onIHx8ICpjcCA9PSAnWicpIHsKLSAgICAgICAgICAgICAgLyogJ3onIGlzIHN0YW5kYXJkaXplZCBpbiBJU08gQyA5OSwgYnV0IGdsaWJjIHVzZXMgJ1onCi0gICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHdhcm5pbmcgZmFjaWxpdHkgaW4gZ2NjLTIuOTUuMiB1bmRlcnN0YW5kcwotICAgICAgICAgICAgICAgICBvbmx5ICdaJyAoc2VlIGdjYy0yLjk1LjIvZ2NjL2MtY29tbW9uLmM6MTc4NCkuICAqLwotICAgICAgICAgICAgICBpZiAoc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9mIChsb25nKSkgewotICAgICAgICAgICAgICAgIC8qIHNpemVfdCA9IGxvbmcgbG9uZyAqLwotICAgICAgICAgICAgICAgIGZsYWdzICs9IDE2OwotICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpemVvZiAoc2l6ZV90KSA+IHNpemVvZiAoaW50KSkgewotICAgICAgICAgICAgICAgIC8qIHNpemVfdCA9IGxvbmcgKi8KLSAgICAgICAgICAgICAgICBmbGFncyArPSA4OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNwKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCpjcCA9PSAndCcpIHsKLSAgICAgICAgICAgICAgaWYgKHNpemVvZiAocHRyZGlmZl90KSA+IHNpemVvZiAobG9uZykpIHsKLSAgICAgICAgICAgICAgICAvKiBwdHJkaWZmX3QgPSBsb25nIGxvbmcgKi8KLSAgICAgICAgICAgICAgICBmbGFncyArPSAxNjsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGludCkpIHsKLSAgICAgICAgICAgICAgICAvKiBwdHJkaWZmX3QgPSBsb25nICovCi0gICAgICAgICAgICAgICAgZmxhZ3MgKz0gODsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjcCsrOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIFJlYWQgdGhlIGNvbnZlcnNpb24gY2hhcmFjdGVyLiAgKi8KLSAgICAgICAgICBjID0gKmNwKys7Ci0gICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIGNhc2UgJ2knOgotI2lmZGVmIEhBVkVfSU5UNjRfQU5EX0k2NAotICAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gNjQpCi0gICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfSU5UNjQ7Ci0gICAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9MT05HTE9OR0lOVDsKLSAgICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgIGlmIChmbGFncyA+PSA4KQotICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX0xPTkdJTlQ7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMikKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9TQ0hBUjsKLSAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAxKQotICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1NIT1JUOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfSU5UOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ28nOgotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgIGNhc2UgJ1gnOgotI2lmZGVmIEhBVkVfSU5UNjRfQU5EX0k2NAotICAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gNjQpCi0gICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfVUlOVDY0OwotICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCi0gICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfVUxPTkdMT05HSU5UOwotICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgICAgaWYgKGZsYWdzID49IDgpCi0gICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfVUxPTkdJTlQ7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMikKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9VQ0hBUjsKLSAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAxKQotICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1VTSE9SVDsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1VJTlQ7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgICAgY2FzZSAnRSc6Ci0gICAgICAgICAgICBjYXNlICdnJzoKLSAgICAgICAgICAgIGNhc2UgJ0cnOgotICAgICAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBjYXNlICdBJzoKLSNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCi0gICAgICAgICAgICAgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9MT05HRE9VQkxFOwotICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9ET1VCTEU7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICAgIGlmIChmbGFncyA+PSA4KQotI2lmZGVmIEhBVkVfV0lOVF9UCi0gICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotI2VuZGlmCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9DSEFSOwotICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX1dJTlRfVAotICAgICAgICAgICAgY2FzZSAnQyc6Ci0gICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1dJREVfQ0hBUjsKLSAgICAgICAgICAgICAgYyA9ICdjJzsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgICBpZiAoZmxhZ3MgPj0gOCkKLSNpZmRlZiBIQVZFX1dDSEFSX1QKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9XSURFX1NUUklORzsKLSNlbHNlCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSNlbmRpZgotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfU1RSSU5HOwotICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX1dDSEFSX1QKLSAgICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgICB0eXBlID0gVFlQRV9XSURFX1NUUklORzsKLSAgICAgICAgICAgICAgYyA9ICdzJzsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgLyogT2xkIEdTVF9QVFJfRk9STUFULCBoYW5kbGUgZm9yIGJpbmFyeSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICAgICAgY2FzZSAnUCc6Ci0gICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1BPSU5URVJfRVhUOwotICAgICAgICAgICAgICBkcC0+ZmxhZ3MgfD0gRkxBR19QVFJfRVhUOwotICAgICAgICAgICAgICBkcC0+cHRyX2V4dF9jaGFyID0gJ0EnOwotICAgICAgICAgICAgICBjID0gJ3AnOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAgICAvKiBOb3RlOiBjcCBwb2ludHMgYWxyZWFkeSB0byB0aGUgY2hhciBhZnRlciB0aGUgJ3AnIG5vdyAqLwotICAgICAgICAgICAgICBpZiAoY3BbMF0gPT0gUE9JTlRFUl9FWFRfU0lHTklGSUVSX0NIQVIgJiYgY3BbMV0gIT0gJ1wwJykgewotICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1BPSU5URVJfRVhUOwotICAgICAgICAgICAgICAgIGRwLT5mbGFncyB8PSBGTEFHX1BUUl9FWFQ7Ci0gICAgICAgICAgICAgICAgZHAtPnB0cl9leHRfY2hhciA9IGNwWzFdOwotICAgICAgICAgICAgICAgIGNwICs9IDI7Ci0gICAgICAgICAgICAgICAgLyogd2UgZG8gbm90IHVzZSBkcC0+Y29udmVyc2lvbj0ncycgb24gcHVycG9zZSBoZXJlLCBzbyB3ZQotICAgICAgICAgICAgICAgICAqIGNhbiBmYWxsIGJhY2sgdG8gcHJpbnRpbmcganVzdCB0aGUgcG9pbnRlciB3aXRoICVwIGlmIHRoZQotICAgICAgICAgICAgICAgICAqIHNlcmlhbGlzYXRpb24gZnVuY3Rpb24gcmV0dXJuZWQgTlVMTCBmb3Igc29tZSByZWFzb24gKi8KLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9QT0lOVEVSOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAvKiBPbGQgR1NUX1NFR01FTlRfRk9STUFULCBoYW5kbGUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgICAgICBjYXNlICdRJzoKLSAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfUE9JTlRFUl9FWFQ7Ci0gICAgICAgICAgICAgIGRwLT5mbGFncyB8PSBGTEFHX1BUUl9FWFQ7Ci0gICAgICAgICAgICAgIGRwLT5wdHJfZXh0X2NoYXIgPSAnQic7Ci0gICAgICAgICAgICAgIGMgPSAncCc7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnbic6Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI7Ci0gICAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICBpZiAoZmxhZ3MgPj0gOCkKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI7Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMikKLSAgICAgICAgICAgICAgICB0eXBlID0gVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOwotICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIDEpCi0gICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUjsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgICB0eXBlID0gVFlQRV9OT05FOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIC8qIFVua25vd24gY29udmVyc2lvbiBjaGFyYWN0ZXIuICAqLwotICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlICE9IFRZUEVfTk9ORSkgewotICAgICAgICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfaW5kZXg7Ci0gICAgICAgICAgaWYgKGRwLT5hcmdfaW5kZXggPCAwKQotICAgICAgICAgICAgZHAtPmFyZ19pbmRleCA9IGFyZ19wb3NuKys7Ci0gICAgICAgICAgUkVHSVNURVJfQVJHIChkcC0+YXJnX2luZGV4LCB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBkcC0+Y29udmVyc2lvbiA9IGM7Ci0gICAgICAgIGRwLT5kaXJfZW5kID0gY3A7Ci0gICAgICB9Ci0KLSAgICAgIGQtPmNvdW50Kys7Ci0gICAgICBpZiAoZC0+Y291bnQgPj0gZF9hbGxvY2F0ZWQpIHsKLSAgICAgICAgY2hhcl9kaXJlY3RpdmUgKm1lbW9yeTsKLQotICAgICAgICBkX2FsbG9jYXRlZCA9IDIgKiBkX2FsbG9jYXRlZDsKLSAgICAgICAgbWVtb3J5ID0gcmVhbGxvYyAoZC0+ZGlyLCBkX2FsbG9jYXRlZCAqIHNpemVvZiAoY2hhcl9kaXJlY3RpdmUpKTsKLSAgICAgICAgaWYgKG1lbW9yeSA9PSBOVUxMKQotICAgICAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLwotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGQtPmRpciA9IG1lbW9yeTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgZC0+ZGlyW2QtPmNvdW50XS5kaXJfc3RhcnQgPSBjcDsKLQotICBkLT5tYXhfd2lkdGhfbGVuZ3RoID0gbWF4X3dpZHRoX2xlbmd0aDsKLSAgZC0+bWF4X3ByZWNpc2lvbl9sZW5ndGggPSBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKLSAgcmV0dXJuIDA7Ci0KLWVycm9yOgotICBpZiAoYS0+YXJnKQotICAgIGZyZWUgKGEtPmFyZyk7Ci0gIGlmIChkLT5kaXIpCi0gICAgZnJlZSAoZC0+ZGlyKTsKLSAgcmV0dXJuIC0xOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3ByaW50Zi9wcmludGYtcGFyc2UuaCBiL2dzdC9wcmludGYvcHJpbnRmLXBhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YzI0NjIuLjAwMDAwMDAKLS0tIGEvZ3N0L3ByaW50Zi9wcmludGYtcGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qIFBhcnNlIHByaW50ZiBmb3JtYXQgc3RyaW5nLgotICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotICAgVVNBLiAgKi8KLQotI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKLSNkZWZpbmUgX1BSSU5URl9QQVJTRV9ICi0KLSNpbmNsdWRlICJwcmludGYtYXJncy5oIgotCi0vKiBQcml2YXRlIG5hbWVzcGFjZSBmb3IgZ251bGliIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBwcmludGZfcGFyc2UgX19nc3RfcHJpbnRmX3BhcnNlCi0KLS8qIEZsYWdzICovCi0jZGVmaW5lIEZMQUdfR1JPVVAJIDEJLyogJyBmbGFnICovCi0jZGVmaW5lIEZMQUdfTEVGVAkgMgkvKiAtIGZsYWcgKi8KLSNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KLSNkZWZpbmUgRkxBR19TUEFDRQkgOAkvKiBzcGFjZSBmbGFnICovCi0jZGVmaW5lIEZMQUdfQUxUCTE2CS8qICMgZmxhZyAqLwotI2RlZmluZSBGTEFHX1pFUk8JMzIKLQotI2RlZmluZSBGTEFHX1BUUl9FWFQgMTAyNAotCi0vKiBBIHBhcnNlZCBkaXJlY3RpdmUuICAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgY29uc3QgY2hhciogZGlyX3N0YXJ0OwotICBjb25zdCBjaGFyKiBkaXJfZW5kOwotICBpbnQgZmxhZ3M7Ci0gIGNvbnN0IGNoYXIqIHdpZHRoX3N0YXJ0OwotICBjb25zdCBjaGFyKiB3aWR0aF9lbmQ7Ci0gIGludCB3aWR0aF9hcmdfaW5kZXg7Ci0gIGNvbnN0IGNoYXIqIHByZWNpc2lvbl9zdGFydDsKLSAgY29uc3QgY2hhciogcHJlY2lzaW9uX2VuZDsKLSAgaW50IHByZWNpc2lvbl9hcmdfaW5kZXg7Ci0gIGNoYXIgY29udmVyc2lvbjsgLyogZCBpIG8gdSB4IFggZiBlIEUgZyBHIGMgcyBwIG4gVSAlIGJ1dCBub3QgQyBTICovCi0gIGludCBhcmdfaW5kZXg7Ci0KLSAgLyogZXh0ZW5zaW9uIGNoYXIgaW4gY2FzZSBvZiBUWVBFX1BPSU5URVJfRVhULiBXZSBuZWVkIHRvIHN0b3JlIHRoaXMgc28KLSAgICogd2UgY2FuIHBhc3MgaXQgYmFjayB0byBfX2dzdF9wcmludGZfcG9pbnRlcl9leHRlbnNpb25fc2VyaWFsaXplKCkKLSAgICogc28gaXQga25vd3Mgd2hpY2ggcG9pbnRlciBleHRlbnNpb24gaXQgaXMgKi8KLSAgY2hhciBwdHJfZXh0X2NoYXI7Ci19Ci1jaGFyX2RpcmVjdGl2ZTsKLQotLyogQSBwYXJzZWQgZm9ybWF0IHN0cmluZy4gICovCi10eXBlZGVmIHN0cnVjdAotewotICB1bnNpZ25lZCBpbnQgY291bnQ7Ci0gIGNoYXJfZGlyZWN0aXZlICpkaXI7Ci0gIHVuc2lnbmVkIGludCBtYXhfd2lkdGhfbGVuZ3RoOwotICB1bnNpZ25lZCBpbnQgbWF4X3ByZWNpc2lvbl9sZW5ndGg7Ci19Ci1jaGFyX2RpcmVjdGl2ZXM7Ci0KLQotLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscwotICAgaW4gZGlyZWN0aXZlc1swXSwgLi4uLCBkaXJlY3RpdmVzW04tMV0sIGFuZCBzZXRzIGRpcmVjdGl2ZXNbTl0uZGlyX3N0YXJ0Ci0gICB0byB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgc3RyaW5nLiAgQWxzbyBmaWxscyBpbiB0aGUgYXJnX3R5cGUgZmllbGRzIG9mIHRoZQotICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCi0jaWZkZWYgU1RBVElDCi1TVEFUSUMKLSNlbHNlCi1leHRlcm4KLSNlbmRpZgotaW50IHByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7Ci0KLSNlbmRpZiAvKiBfUFJJTlRGX1BBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL2dzdC9wcmludGYvcHJpbnRmLmMgYi9nc3QvcHJpbnRmL3ByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmJiMzczLi4wMDAwMDAwCi0tLSBhL2dzdC9wcmludGYvcHJpbnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyogR0xJQiAtIExpYnJhcnkgb2YgdXNlZnVsIHJvdXRpbmVzIGZvciBDIHByb2dyYW1taW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTWF0dGhpYXMgQ2xhc2VuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotLyoKLSAqIE1vZGlmaWVkIGJ5IHRoZSBHTGliIFRlYW0gYW5kIG90aGVycyAyMDAzLiAgU2VlIHRoZSBBVVRIT1JTCi0gKiBmaWxlIGZvciBhIGxpc3Qgb2YgcGVvcGxlIG9uIHRoZSBHTGliIFRlYW0uICBTZWUgdGhlIENoYW5nZUxvZwotICogZmlsZXMgZm9yIGEgbGlzdCBvZiBjaGFuZ2VzLiAgVGhlc2UgZmlsZXMgYXJlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIEdMaWIgYXQgZnRwOi8vZnRwLmd0ay5vcmcvcHViL2d0ay8uCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImdzdC1wcmludGYuaCIKLSNpbmNsdWRlICJ2YXNucHJpbnRmLmgiCi0jaW5jbHVkZSAicHJpbnRmLmgiCi0KLSNpZiAwCi1pbnQKLV9fZ3N0X3ByaW50ZiAoY2hhciBjb25zdCAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgaW50IHJldHZhbDsKLQotICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKLSAgcmV0dmFsID0gX19nc3RfdnByaW50ZiAoZm9ybWF0LCBhcmdzKTsKLSAgdmFfZW5kIChhcmdzKTsKLQotICByZXR1cm4gcmV0dmFsOwotfQotCi1pbnQKLV9fZ3N0X2ZwcmludGYgKEZJTEUgKiBmaWxlLCBjaGFyIGNvbnN0ICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICBpbnQgcmV0dmFsOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOwotICByZXR2YWwgPSBfX2dzdF92ZnByaW50ZiAoZmlsZSwgZm9ybWF0LCBhcmdzKTsKLSAgdmFfZW5kIChhcmdzKTsKLQotICByZXR1cm4gcmV0dmFsOwotfQotCi1pbnQKLV9fZ3N0X3NwcmludGYgKGNoYXIgKnN0cmluZywgY2hhciBjb25zdCAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgaW50IHJldHZhbDsKLQotICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKLSAgcmV0dmFsID0gX19nc3RfdnNwcmludGYgKHN0cmluZywgZm9ybWF0LCBhcmdzKTsKLSAgdmFfZW5kIChhcmdzKTsKLQotICByZXR1cm4gcmV0dmFsOwotfQotCi1pbnQKLV9fZ3N0X3NucHJpbnRmIChjaGFyICpzdHJpbmcsIHNpemVfdCBuLCBjaGFyIGNvbnN0ICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICBpbnQgcmV0dmFsOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOwotICByZXR2YWwgPSBfX2dzdF92c25wcmludGYgKHN0cmluZywgbiwgZm9ybWF0LCBhcmdzKTsKLSAgdmFfZW5kIChhcmdzKTsKLQotICByZXR1cm4gcmV0dmFsOwotfQotCi1pbnQKLV9fZ3N0X3ZwcmludGYgKGNoYXIgY29uc3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotICByZXR1cm4gX19nc3RfdmZwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKLX0KLQotaW50Ci1fX2dzdF92ZnByaW50ZiAoRklMRSAqIGZpbGUsIGNoYXIgY29uc3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotICBjaGFyICpyZXN1bHQ7Ci0gIHNpemVfdCBsZW5ndGg7Ci0KLSAgcmVzdWx0ID0gdmFzbnByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKLSAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgIHJldHVybiAtMTsKLQotICBmd3JpdGUgKHJlc3VsdCwgMSwgbGVuZ3RoLCBmaWxlKTsKLSAgZnJlZSAocmVzdWx0KTsKLQotICByZXR1cm4gbGVuZ3RoOwotfQotCi1pbnQKLV9fZ3N0X3ZzcHJpbnRmIChjaGFyICpzdHJpbmcsIGNoYXIgY29uc3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotICBjaGFyICpyZXN1bHQ7Ci0gIHNpemVfdCBsZW5ndGg7Ci0KLSAgcmVzdWx0ID0gdmFzbnByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKLSAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgIHJldHVybiAtMTsKLQotICBtZW1jcHkgKHN0cmluZywgcmVzdWx0LCBsZW5ndGggKyAxKTsKLSAgZnJlZSAocmVzdWx0KTsKLQotICByZXR1cm4gbGVuZ3RoOwotfQotCi1pbnQKLV9fZ3N0X3ZzbnByaW50ZiAoY2hhciAqc3RyaW5nLCBzaXplX3QgbiwgY2hhciBjb25zdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCi17Ci0gIGNoYXIgKnJlc3VsdDsKLSAgc2l6ZV90IGxlbmd0aDsKLQotICByZXN1bHQgPSB2YXNucHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOwotICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgcmV0dXJuIC0xOwotCi0gIGlmIChuID4gMCkgewotICAgIG1lbWNweSAoc3RyaW5nLCByZXN1bHQsIE1JTiAobGVuZ3RoICsgMSwgbikpOwotICAgIHN0cmluZ1tuIC0gMV0gPSAwOwotICB9Ci0KLSAgZnJlZSAocmVzdWx0KTsKLQotICByZXR1cm4gbGVuZ3RoOwotfQotI2VuZGlmCi0KLWludAotX19nc3RfdmFzcHJpbnRmIChjaGFyICoqcmVzdWx0LCBjaGFyIGNvbnN0ICpmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgc2l6ZV90IGxlbmd0aDsKLQotICAqcmVzdWx0ID0gdmFzbnByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKLSAgaWYgKCpyZXN1bHQgPT0gTlVMTCkKLSAgICByZXR1cm4gLTE7Ci0KLSAgcmV0dXJuIGxlbmd0aDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9wcmludGYvcHJpbnRmLmggYi9nc3QvcHJpbnRmL3ByaW50Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGUzY2Y5Li4wMDAwMDAwCi0tLSBhL2dzdC9wcmludGYvcHJpbnRmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBHTElCIC0gTGlicmFyeSBvZiB1c2VmdWwgcm91dGluZXMgZm9yIEMgcHJvZ3JhbW1pbmcKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgTWF0dGhpYXMgQ2xhc2VuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLSNpZm5kZWYgX19HTlVMSUJfUFJJTlRGX0hfXwotI2RlZmluZSBfX0dOVUxJQl9QUklOVEZfSF9fCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWYgMAotaW50IF9fZ3N0X3ByaW50ZiAgICAoY2hhciBjb25zdCAqZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgLi4uKTsKLQotaW50IF9fZ3N0X2ZwcmludGYgICAoRklMRSAgICAgICAgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAuLi4pOwotCi1pbnQgX19nc3Rfc3ByaW50ZiAgIChjaGFyICAgICAgICpzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAuLi4pOwotCi1pbnQgX19nc3Rfc25wcmludGYgIChjaGFyICAgICAgICpzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgbiwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgIC4uLik7Ci0KLWludCBfX2dzdF92cHJpbnRmICAgKGNoYXIgY29uc3QgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgICAgICBhcmdzKTsKLQotaW50IF9fZ3N0X3ZmcHJpbnRmICAoRklMRSAgICAgICAgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgYXJncyk7Ci0KLWludCBfX2dzdF92c3ByaW50ZiAgKGNoYXIgICAgICAgKnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgICAgICBhcmdzKTsKLQotaW50IF9fZ3N0X3ZzbnByaW50ZiAoY2hhciAgICAgICAqc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgIG4sCi0gICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICAgICAgYXJncyk7Ci0jZW5kaWYKLQotaW50IF9fZ3N0X3Zhc3ByaW50ZiAoY2hhciAgICAgICAqKnJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgICAgICBhcmdzKTsKLQotCi0jZW5kaWYgLyogX19HTlVMSUJfUFJJTlRGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3ByaW50Zi92YXNucHJpbnRmLmMgYi9nc3QvcHJpbnRmL3Zhc25wcmludGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk3NDA0Yy4uMDAwMDAwMAotLS0gYS9nc3QvcHJpbnRmL3Zhc25wcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNDEgKzAsMCBAQAotLyogdnNwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCi0gICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKLSAgIFVTQS4gICovCi0KLSNpZm5kZWYgX1dJTjMyCi0vKiBUZWxsIGdsaWJjJ3MgPHN0ZGlvLmg+IHRvIHByb3ZpZGUgYSBwcm90b3R5cGUgZm9yIHNucHJpbnRmKCkuCi0gICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKLSAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KLSNpZm5kZWYgX0dOVV9TT1VSQ0UKLSMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3QtcHJpbnRmLmgiCi0KLS8qIFNwZWNpZmljYXRpb24uICAqLwotI2luY2x1ZGUgInZhc25wcmludGYuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgICAgICAgICAvKiBzbnByaW50ZigpLCBzcHJpbnRmKCkgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAgICAgICAgLyogYWJvcnQoKSwgbWFsbG9jKCksIHJlYWxsb2MoKSwgZnJlZSgpICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAgIC8qIG1lbWNweSgpLCBzdHJsZW4oKSAqLwotI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgICAgICAgICAvKiBlcnJubyAqLwotI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgICAgICAgICAvKiBDSEFSX0JJVCAqLwotI2luY2x1ZGUgPGZsb2F0Lmg+ICAgICAgICAgICAgICAvKiBEQkxfTUFYX0VYUCwgTERCTF9NQVhfRVhQICovCi0jaW5jbHVkZSAicHJpbnRmLXBhcnNlLmgiCi0jaW5jbHVkZSAicHJpbnRmLWV4dGVuc2lvbi5oIgotCi0jaWZkZWYgSEFWRV9XQ0hBUl9UCi0jIGlmZGVmIEhBVkVfV0NTTEVOCi0jICBkZWZpbmUgbG9jYWxfd2NzbGVuIHdjc2xlbgotIyBlbHNlCi0gICAvKiBTb2xhcmlzIDIuNS4xIGhhcyB3Y3NsZW4oKSBpbiBhIHNlcGFyYXRlIGxpYnJhcnkgbGlidy5zby4gVG8gYXZvaWQKLSAgICAgIGEgZGVwZW5kZW5jeSB0b3dhcmRzIHRoaXMgbGlicmFyeSwgaGVyZSBpcyBhIGxvY2FsIHN1YnN0aXR1dGUuCi0gICAgICBEZWZpbmUgdGhpcyBzdWJzdGl0dXRlIG9ubHkgb25jZSwgZXZlbiBpZiB0aGlzIGZpbGUgaXMgaW5jbHVkZWQKLSAgICAgIHR3aWNlIGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuICAqLwotIyAgaWZuZGVmIGxvY2FsX3djc2xlbl9kZWZpbmVkCi0jICAgZGVmaW5lIGxvY2FsX3djc2xlbl9kZWZpbmVkIDEKLXN0YXRpYyBzaXplX3QKLWxvY2FsX3djc2xlbiAoY29uc3Qgd2NoYXJfdCAqIHMpCi17Ci0gIGNvbnN0IHdjaGFyX3QgKnB0cjsKLQotICBmb3IgKHB0ciA9IHM7ICpwdHIgIT0gKHdjaGFyX3QpIDA7IHB0cisrKTsKLSAgcmV0dXJuIHB0ciAtIHM7Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmCi0KLS8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlICdhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCi0gICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLwotI2lmIGRlZmluZWQgKGFsbG9jYSkgfHwgZGVmaW5lZCAoR0xJQl9IQVZFX0FMTE9DQV9IKQotIyBkZWZpbmUgZnJlZWEocCkgICAgICAgICAgICAgICAvKiBub3RoaW5nICovCi0jZWxzZQotIyBkZWZpbmUgYWxsb2NhKG4pIG1hbGxvYyAobikKLSMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0xPTkdfTE9OR19GT1JNQVQKLXN0YXRpYyBpbmxpbmUgaW50Ci1wcmludF9sb25nX2xvbmcgKGNoYXIgKmJ1ZiwKLSAgICBpbnQgbGVuLAotICAgIGludCB3aWR0aCwKLSAgICBpbnQgcHJlY2lzaW9uLAotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNoYXIgY29udmVyc2lvbiwgdW5zaWduZWQgbG9uZyBsb25nIG51bWJlcikKLXsKLSAgaW50IG5lZ2F0aXZlID0gRkFMU0U7Ci0gIGNoYXIgYnVmZmVyWzEyOF07Ci0gIGNoYXIgKmJ1ZmZlcmVuZDsKLSAgY2hhciAqcG9pbnRlcjsKLSAgaW50IGJhc2U7Ci0gIHN0YXRpYyBjb25zdCBjaGFyICp1cHBlciA9ICIwMTIzNDU2Nzg5QUJDREVGWCI7Ci0gIHN0YXRpYyBjb25zdCBjaGFyICpsb3dlciA9ICIwMTIzNDU2Nzg5YWJjZGVmeCI7Ci0gIGNvbnN0IGNoYXIgKmRpZ2l0czsKLSAgaW50IGk7Ci0gIGNoYXIgKnA7Ci0gIGludCBjb3VudDsKLQotI2RlZmluZSBFTUlUKGMpICAgICAgICAgICBcCi0gIGlmIChwIC0gYnVmID09IGxlbiAtIDEpIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKnArKyA9ICdcMCc7ICAgICAgICBcCi0gICAgICByZXR1cm4gbGVuOyAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgXAotICBlbHNlICAgICAgICAgICAgICAgICAgICBcCi0gICAgKnArKyA9IGM7Ci0KLSAgcCA9IGJ1ZjsKLQotICBzd2l0Y2ggKGNvbnZlcnNpb24pIHsKLSAgICBjYXNlICdvJzoKLSAgICAgIGJhc2UgPSA4OwotICAgICAgZGlnaXRzID0gbG93ZXI7Ci0gICAgICBuZWdhdGl2ZSA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAneCc6Ci0gICAgICBiYXNlID0gMTY7Ci0gICAgICBkaWdpdHMgPSBsb3dlcjsKLSAgICAgIG5lZ2F0aXZlID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdYJzoKLSAgICAgIGJhc2UgPSAxNjsKLSAgICAgIGRpZ2l0cyA9IHVwcGVyOwotICAgICAgbmVnYXRpdmUgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3UnOgotICAgICAgYmFzZSA9IDEwOwotICAgICAgZGlnaXRzID0gbG93ZXI7Ci0gICAgICBuZWdhdGl2ZSA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJhc2UgPSAxMDsKLSAgICAgIGRpZ2l0cyA9IGxvd2VyOwotICAgICAgbmVnYXRpdmUgPSAobG9uZyBsb25nKSBudW1iZXIgPCAwOwotICAgICAgaWYgKG5lZ2F0aXZlKQotICAgICAgICBudW1iZXIgPSAtKChsb25nIGxvbmcpIG51bWJlcik7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIEJ1aWxkIG51bWJlciAqLwotICBwb2ludGVyID0gYnVmZmVyZW5kID0gJmJ1ZmZlcltzaXplb2YgKGJ1ZmZlcikgLSAxXTsKLSAgKnBvaW50ZXItLSA9ICdcMCc7Ci0gIGZvciAoaSA9IDE7IGkgPCAoaW50KSBzaXplb2YgKGJ1ZmZlcik7IGkrKykgewotICAgICpwb2ludGVyLS0gPSBkaWdpdHNbbnVtYmVyICUgYmFzZV07Ci0gICAgbnVtYmVyIC89IGJhc2U7Ci0gICAgaWYgKG51bWJlciA9PSAwKQotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBBZGp1c3Qgd2lkdGggKi8KLSAgd2lkdGggLT0gKGJ1ZmZlcmVuZCAtIHBvaW50ZXIpIC0gMTsKLQotICAvKiBBZGp1c3QgcHJlY2lzaW9uICovCi0gIGlmIChwcmVjaXNpb24gIT0gLTEpIHsKLSAgICBwcmVjaXNpb24gLT0gKGJ1ZmZlcmVuZCAtIHBvaW50ZXIpIC0gMTsKLSAgICBpZiAocHJlY2lzaW9uIDwgMCkKLSAgICAgIHByZWNpc2lvbiA9IDA7Ci0gICAgZmxhZ3MgfD0gRkxBR19aRVJPOwotICB9Ci0KLSAgLyogQWRqdXN0IHdpZHRoIGZ1cnRoZXIgKi8KLSAgaWYgKG5lZ2F0aXZlIHx8IChmbGFncyAmIEZMQUdfU0hPV1NJR04pIHx8IChmbGFncyAmIEZMQUdfU1BBQ0UpKQotICAgIHdpZHRoLS07Ci0gIGlmIChmbGFncyAmIEZMQUdfQUxUKSB7Ci0gICAgc3dpdGNoIChiYXNlKSB7Ci0gICAgICBjYXNlIDE2OgotICAgICAgICB3aWR0aCAtPSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgODoKLSAgICAgICAgd2lkdGgtLTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvKiBPdXRwdXQgcHJlZml4ZXMgc3BhY2VzIGlmIG5lZWRlZCAqLwotICBpZiAoISgoZmxhZ3MgJiBGTEFHX0xFRlQpIHx8ICgoZmxhZ3MgJiBGTEFHX1pFUk8pICYmIChwcmVjaXNpb24gPT0gLTEpKSkpIHsKLSAgICBjb3VudCA9IChwcmVjaXNpb24gPT0gLTEpID8gMCA6IHByZWNpc2lvbjsKLSAgICB3aGlsZSAod2lkdGgtLSA+IGNvdW50KQotICAgICAgKnArKyA9ICcgJzsKLSAgfQotCi0gIC8qIHdpZHRoIGhhcyBiZWVuIGFkanVzdGVkIGZvciBzaWducyBhbmQgYWx0ZXJuYXRpdmVzICovCi0gIGlmIChuZWdhdGl2ZSkgewotICAgIEVNSVQgKCctJyk7Ci0gIH0gZWxzZSBpZiAoZmxhZ3MgJiBGTEFHX1NIT1dTSUdOKSB7Ci0gICAgRU1JVCAoJysnKTsKLSAgfSBlbHNlIGlmIChmbGFncyAmIEZMQUdfU1BBQ0UpIHsKLSAgICBFTUlUICgnICcpOwotICB9Ci0KLSAgaWYgKGZsYWdzICYgRkxBR19BTFQpIHsKLSAgICBzd2l0Y2ggKGJhc2UpIHsKLSAgICAgIGNhc2UgODoKLSAgICAgICAgRU1JVCAoJzAnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDE2OgotICAgICAgICBFTUlUICgnMCcpOwotICAgICAgICBFTUlUIChkaWdpdHNbMTZdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGJhc2UgKi8KLSAgfQotCi0gIC8qIE91dHB1dCBwcmVmaXhlZCB6ZXJvIHBhZGRpbmcgaWYgbmVlZGVkICovCi0gIGlmIChmbGFncyAmIEZMQUdfWkVSTykgewotICAgIGlmIChwcmVjaXNpb24gPT0gLTEpCi0gICAgICBwcmVjaXNpb24gPSB3aWR0aDsKLSAgICB3aGlsZSAocHJlY2lzaW9uLS0gPiAwKSB7Ci0gICAgICBFTUlUICgnMCcpOwotICAgICAgd2lkdGgtLTsKLSAgICB9Ci0gIH0KLQotICAvKiBPdXRwdXQgdGhlIG51bWJlciBpdHNlbGYgKi8KLSAgd2hpbGUgKCooKytwb2ludGVyKSkgewotICAgIEVNSVQgKCpwb2ludGVyKTsKLSAgfQotCi0gIC8qIE91dHB1dCB0cmFpbGluZyBzcGFjZXMgaWYgbmVlZGVkICovCi0gIGlmIChmbGFncyAmIEZMQUdfTEVGVCkgewotICAgIHdoaWxlICh3aWR0aC0tID4gMCkKLSAgICAgIEVNSVQgKCcgJyk7Ci0gIH0KLQotICBFTUlUICgnXDAnKTsKLQotICByZXR1cm4gcCAtIGJ1ZiAtIDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQKLXByaW50Zl9wb3N0cHJvY2Vzc19hcmdzIChjaGFyX2RpcmVjdGl2ZXMgKiBkaXJlY3RpdmVzLCBhcmd1bWVudHMgKiBhcmd1bWVudHMpCi17Ci0gIGludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBkaXJlY3RpdmVzLT5jb3VudDsgKytpKSB7Ci0gICAgY2hhcl9kaXJlY3RpdmUgKmRwOwotICAgIGFyZ3VtZW50ICphOwotCi0gICAgZHAgPSAmZGlyZWN0aXZlcy0+ZGlyW2ldOwotCi0gICAgLyogJSUgaGFzIG5vIGFyZ3VtZW50cywgZm9yIGV4YW1wbGUgKi8KLSAgICBpZiAoZHAtPmFyZ19pbmRleCA8IDApCi0gICAgICBjb250aW51ZTsKLQotICAgIGEgPSAmYXJndW1lbnRzLT5hcmdbZHAtPmFyZ19pbmRleF07Ci0KLSAgICBpZiAoYS0+dHlwZSA9PSBUWVBFX1BPSU5URVJfRVhUKSB7Ci0gICAgICBjaGFyIGZtdFs0XTsKLQotICAgICAgZm10WzBdID0gJ3AnOwotICAgICAgZm10WzFdID0gUE9JTlRFUl9FWFRfU0lHTklGSUVSX0NIQVI7Ci0gICAgICBmbXRbMl0gPSBkcC0+cHRyX2V4dF9jaGFyOwotICAgICAgZm10WzNdID0gJ1wwJzsKLQotICAgICAgYS0+ZXh0X3N0cmluZyA9Ci0gICAgICAgICAgX19nc3RfcHJpbnRmX3BvaW50ZXJfZXh0ZW5zaW9uX3NlcmlhbGl6ZSAoZm10LCBhLT5hLmFfcG9pbnRlcik7Ci0gICAgfQotICB9Ci19Ci0KLWNoYXIgKgotdmFzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgKiBsZW5ndGhwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgY2hhcl9kaXJlY3RpdmVzIGQ7Ci0gIGFyZ3VtZW50cyBhOwotCi0gIGlmIChwcmludGZfcGFyc2UgKGZvcm1hdCwgJmQsICZhKSA8IDApIHsKLSAgICBlcnJubyA9IEVJTlZBTDsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotI2RlZmluZSBDTEVBTlVQKCkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmcmVlIChkLmRpcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoYS5hcmcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChhLmNvdW50LS0pIHsgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYgKGEuYXJnW2EuY291bnRdLmV4dF9zdHJpbmcpICAgICAgXAotICAgICAgICBmcmVlIChhLmFyZ1thLmNvdW50XS5leHRfc3RyaW5nKTsgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZyZWUgKGEuYXJnKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLSAgaWYgKHByaW50Zl9mZXRjaGFyZ3MgKGFyZ3MsICZhKSA8IDApIHsKLSAgICBDTEVBTlVQICgpOwotICAgIGVycm5vID0gRUlOVkFMOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLyogY29sbGVjdCBUWVBFX1BPSU5URVJfRVhUIGFyZ3VtZW50IHN0cmluZ3MgKi8KLSAgcHJpbnRmX3Bvc3Rwcm9jZXNzX2FyZ3MgKCZkLCAmYSk7Ci0KLSAgewotICAgIGNoYXIgKmJ1ZiA9Ci0gICAgICAgIChjaGFyICopIGFsbG9jYSAoNyArIGQubWF4X3dpZHRoX2xlbmd0aCArIGQubWF4X3ByZWNpc2lvbl9sZW5ndGggKyA2KTsKLSAgICBjb25zdCBjaGFyICpjcDsKLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBjaGFyX2RpcmVjdGl2ZSAqZHA7Ci0gICAgLyogT3V0cHV0IHN0cmluZyBhY2N1bXVsYXRvci4gICovCi0gICAgY2hhciAqcmVzdWx0OwotICAgIHNpemVfdCBhbGxvY2F0ZWQ7Ci0gICAgc2l6ZV90IGxlbmd0aDsKLQotICAgIGlmIChyZXN1bHRidWYgIT0gTlVMTCkgewotICAgICAgcmVzdWx0ID0gcmVzdWx0YnVmOwotICAgICAgYWxsb2NhdGVkID0gKmxlbmd0aHA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IE5VTEw7Ci0gICAgICBhbGxvY2F0ZWQgPSAwOwotICAgIH0KLSAgICBsZW5ndGggPSAwOwotICAgIC8qIEludmFyaWFudHM6Ci0gICAgICAgcmVzdWx0IGlzIGVpdGhlciA9PSByZXN1bHRidWYgb3IgPT0gTlVMTCBvciBtYWxsb2MtYWxsb2NhdGVkLgotICAgICAgIElmIGxlbmd0aCA+IDAsIHRoZW4gcmVzdWx0ICE9IE5VTEwuICAqLwotCi0jZGVmaW5lIEVOU1VSRV9BTExPQ0FUSU9OKG5lZWRlZCkgXAotICAgIGlmICgobmVlZGVkKSA+IGFsbG9jYXRlZCkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCWNoYXIgKm1lbW9yeTsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWFsbG9jYXRlZCA9IChhbGxvY2F0ZWQgPiAwID8gMiAqIGFsbG9jYXRlZCA6IDEyKTsJCVwKLQlpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQlcCi0JICBhbGxvY2F0ZWQgPSAobmVlZGVkKTsJCQkJCQlcCi0JaWYgKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpCQkJXAotCSAgbWVtb3J5ID0gKGNoYXIgKikgbWFsbG9jIChhbGxvY2F0ZWQpOwkJCQlcCi0JZWxzZQkJCQkJCQkJXAotCSAgbWVtb3J5ID0gKGNoYXIgKikgcmVhbGxvYyAocmVzdWx0LCBhbGxvY2F0ZWQpOwkJXAotCQkJCQkJCQkJXAotCWlmIChtZW1vcnkgPT0gTlVMTCkJCQkJCQlcCi0JICB7CQkJCQkJCQlcCi0JICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQkJXAotCSAgICAgIGZyZWUgKHJlc3VsdCk7CQkJCQkJXAotCSAgICBmcmVlYSAoYnVmKTsJCQkJCQlcCi0JICAgIENMRUFOVVAgKCk7CQkJCQkJCVwKLQkgICAgZXJybm8gPSBFTk9NRU07CQkJCQkJXAotCSAgICByZXR1cm4gTlVMTDsJCQkJCQlcCi0JICB9CQkJCQkJCQlcCi0JaWYgKHJlc3VsdCA9PSByZXN1bHRidWYgJiYgbGVuZ3RoID4gMCkJCQkJXAotCSAgbWVtY3B5IChtZW1vcnksIHJlc3VsdCwgbGVuZ3RoKTsJCQkJXAotCXJlc3VsdCA9IG1lbW9yeTsJCQkJCQlcCi0gICAgICB9Ci0KLSAgICBmb3IgKGNwID0gZm9ybWF0LCBpID0gMCwgZHAgPSAmZC5kaXJbMF07OyBjcCA9IGRwLT5kaXJfZW5kLCBpKyssIGRwKyspIHsKLSAgICAgIGlmIChjcCAhPSBkcC0+ZGlyX3N0YXJ0KSB7Ci0gICAgICAgIHNpemVfdCBuID0gZHAtPmRpcl9zdGFydCAtIGNwOwotCi0gICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OIChsZW5ndGggKyBuKTsKLSAgICAgICAgbWVtY3B5IChyZXN1bHQgKyBsZW5ndGgsIGNwLCBuKTsKLSAgICAgICAgbGVuZ3RoICs9IG47Ci0gICAgICB9Ci0gICAgICBpZiAoaSA9PSBkLmNvdW50KQotICAgICAgICBicmVhazsKLQotICAgICAgLyogRXhlY3V0ZSBhIHNpbmdsZSBkaXJlY3RpdmUuICAqLwotICAgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICclJykgewotICAgICAgICBpZiAoIShkcC0+YXJnX2luZGV4IDwgMCkpCi0gICAgICAgICAgYWJvcnQgKCk7Ci0gICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OIChsZW5ndGggKyAxKTsKLSAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSAnJSc7Ci0gICAgICAgIGxlbmd0aCArPSAxOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCEoZHAtPmFyZ19pbmRleCA+PSAwKSkKLSAgICAgICAgICBhYm9ydCAoKTsKLQotICAgICAgICBpZiAoZHAtPmNvbnZlcnNpb24gPT0gJ24nKSB7Ci0gICAgICAgICAgc3dpdGNoIChhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFRZUEVfQ09VTlRfU0NIQVJfUE9JTlRFUjoKLSAgICAgICAgICAgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9zY2hhcl9wb2ludGVyID0gbGVuZ3RoOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOgotICAgICAgICAgICAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X3Nob3J0X3BvaW50ZXIgPSBsZW5ndGg7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOgotICAgICAgICAgICAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2ludF9wb2ludGVyID0gbGVuZ3RoOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6Ci0gICAgICAgICAgICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfbG9uZ2ludF9wb2ludGVyID0gbGVuZ3RoOwotICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6Ci0gICAgICAgICAgICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IGxlbmd0aDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIGFib3J0ICgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBhcmdfdHlwZSB0eXBlID0gYS5hcmdbZHAtPmFyZ19pbmRleF0udHlwZTsKLSAgICAgICAgICBjaGFyICpwOwotICAgICAgICAgIHVuc2lnbmVkIGludCBwcmVmaXhfY291bnQ7Ci0gICAgICAgICAgaW50IHByZWZpeGVzWzJdOwotI2lmbmRlZiBIQVZFX1NOUFJJTlRGCi0gICAgICAgICAgdW5zaWduZWQgaW50IHRtcF9sZW5ndGg7Ci0gICAgICAgICAgY2hhciB0bXBidWZbNzAwXTsKLSAgICAgICAgICBjaGFyICp0bXA7Ci0KLSAgICAgICAgICAvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIGZvciBjYWxsaW5nCi0gICAgICAgICAgICAgc3ByaW50Zi4gICovCi0gICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IHByZWNpc2lvbjsKLQotICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgaWYgKGRwLT53aWR0aF9zdGFydCAhPSBkcC0+d2lkdGhfZW5kKSB7Ci0gICAgICAgICAgICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgYXJnOwotCi0gICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCi0gICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKLSAgICAgICAgICAgICAgICBhcmcgPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OwotICAgICAgICAgICAgICAgIHdpZHRoID0gKGFyZyA8IDAgPyAtYXJnIDogYXJnKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaWdpdHAgPSBkcC0+d2lkdGhfc3RhcnQ7Ci0KLSAgICAgICAgICAgICAgICBkbwotICAgICAgICAgICAgICAgICAgd2lkdGggPSB3aWR0aCAqIDEwICsgKCpkaWdpdHArKyAtICcwJyk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cCAhPSBkcC0+d2lkdGhfZW5kKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcmVjaXNpb24gPSA2OwotICAgICAgICAgICAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpIHsKLSAgICAgICAgICAgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID49IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgYXJnOwotCi0gICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQotICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7Ci0gICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7Ci0gICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gKGFyZyA8IDAgPyAwIDogYXJnKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaWdpdHAgPSBkcC0+cHJlY2lzaW9uX3N0YXJ0ICsgMTsKLQotICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cCAhPSBkcC0+cHJlY2lzaW9uX2VuZCkKLSAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiAqIDEwICsgKCpkaWdpdHArKyAtICcwJyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChkcC0+Y29udmVyc2lvbikgewotICAgICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICAgIGNhc2UgJ3UnOgotIyBpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKLSAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCi0gICAgICAgICAgICAgICAgICAgICAgKiAyICAgICAgIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCi0gICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICsgMSAgICAgICAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLwotICAgICAgICAgICAgICAgICAgICAgICsgMTsgICAgICAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KLSAgICAgICAgICAgICAgICBlbHNlCi0jIGVuZGlmCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0lOVCkKLSAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUICogMC4zMDEwMyAgICAgIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCi0gICAgICAgICAgICAgICAgICAgICAgKiAyICAgICAgIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCi0gICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICsgMSAgICAgICAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLwotICAgICAgICAgICAgICAgICAgICAgICsgMTsgICAgICAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUICogMC4zMDEwMyAgICAgICAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLwotICAgICAgICAgICAgICAgICAgICAgICogMiAgICAgICAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLwotICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICArIDEgICAgICAgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICArIDE7ICAgICAgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSAnbyc6Ci0jIGlmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdMT05HSU5UKQotICAgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVCAqIDAuMzMzMzM0ICAgICAgICAvKiBiaW5hcnkgLT4gb2N0YWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgKyAxICAgICAgIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCi0gICAgICAgICAgICAgICAgICAgICAgKyAxOyAgICAgIC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLwotICAgICAgICAgICAgICAgIGVsc2UKLSMgZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQotICAgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpICogQ0hBUl9CSVQgKiAwLjMzMzMzNCAgICAgLyogYmluYXJ5IC0+IG9jdGFsICovCi0gICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICsgMSAgICAgICAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLwotICAgICAgICAgICAgICAgICAgICAgICsgMTsgICAgICAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUICogMC4zMzMzMzQgICAgICAvKiBiaW5hcnkgLT4gb2N0YWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgKyAxICAgICAgIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCi0gICAgICAgICAgICAgICAgICAgICAgKyAxOyAgICAgIC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICBjYXNlICdYJzoKLSMgaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCi0gICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nKSAqIENIQVJfQklUICogMC4yNSAgICAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgKyAxICAgICAgIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCi0gICAgICAgICAgICAgICAgICAgICAgKyAyOyAgICAgIC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLwotICAgICAgICAgICAgICAgIGVsc2UKLSMgZW5kaWYKLSMgaWZkZWYgSEFWRV9JTlQ2NF9BTkRfSTY0Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9JTlQ2NCB8fCB0eXBlID09IFRZUEVfVUlOVDY0KQotICAgICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIF9faW50NjQpICogQ0hBUl9CSVQgKiAwLjI1ICAgICAgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCi0gICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICsgMSAgICAgICAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLwotICAgICAgICAgICAgICAgICAgICAgICsgMjsgICAgICAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KLSAgICAgICAgICAgICAgICBlbHNlCi0jIGVuZGlmCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9MT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0lOVCkKLSAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgKyAxICAgICAgIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCi0gICAgICAgICAgICAgICAgICAgICAgKyAyOyAgICAgIC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogQ0hBUl9CSVQgKiAwLjI1ICAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgKyAxICAgICAgIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCi0gICAgICAgICAgICAgICAgICAgICAgKyAyOyAgICAgIC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICBjYXNlICdGJzoKLSMgaWZkZWYgSEFWRV9MT05HX0RPVUJMRQotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0RPVUJMRSkKLSAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSAodW5zaWduZWQgaW50KSAoTERCTF9NQVhfRVhQICogMC4zMDEwMyAgIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCi0gICAgICAgICAgICAgICAgICAgICAgKiAyICAgICAgIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCi0gICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICsgMSAgICAgICAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLwotICAgICAgICAgICAgICAgICAgICAgICsgcHJlY2lzaW9uICsgMTA7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgZXRjLiAqLwotICAgICAgICAgICAgICAgIGVsc2UKLSMgZW5kaWYKLSAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSAodW5zaWduZWQgaW50KSAoREJMX01BWF9FWFAgKiAwLjMwMTAzICAgIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCi0gICAgICAgICAgICAgICAgICAgICAgKiAyICAgICAgIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCi0gICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICsgMSAgICAgICAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLwotICAgICAgICAgICAgICAgICAgICAgICsgcHJlY2lzaW9uICsgMTA7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgZXRjLiAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgICAgICBjYXNlICdFJzoKLSAgICAgICAgICAgICAgY2FzZSAnZyc6Ci0gICAgICAgICAgICAgIGNhc2UgJ0cnOgotICAgICAgICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9IHByZWNpc2lvbiArIDEyOyAgICAvKiBzaWduLCBkZWNpbWFsIHBvaW50LCBleHBvbmVudCBldGMuICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSAnYyc6Ci0jIGlmZGVmIEhBVkVfV0lOVF9UCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9XSURFX0NIQVIpCi0gICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gTUJfQ1VSX01BWDsKLSAgICAgICAgICAgICAgICBlbHNlCi0jIGVuZGlmCi0gICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlICdzJzoKLSMgaWZkZWYgSEFWRV9XQ0hBUl9UCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9XSURFX1NUUklORykKLSAgICAgICAgICAgICAgICAgIHRtcF9sZW5ndGggPSAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nID09IE5VTEwgPyA2ICAgICAgICAvKiB3Y3NsZW4oTCIobnVsbCkiKSAqLwotICAgICAgICAgICAgICAgICAgICAgIDogbG9jYWxfd2NzbGVuIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmcpKQotICAgICAgICAgICAgICAgICAgICAgICogTUJfQ1VSX01BWDsKLSAgICAgICAgICAgICAgICBlbHNlCi0jIGVuZGlmCi0gICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3N0cmluZyA9PSBOVUxMID8gNiAgICAgIC8qIHN0cmxlbigiKG51bGwpIikgKi8KLSAgICAgICAgICAgICAgICAgICAgICA6IHN0cmxlbiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3N0cmluZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHZvaWQgKikgKiBDSEFSX0JJVCAqIDAuMjUgIC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLwotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICsgMSAgICAgICAgIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCi0gICAgICAgICAgICAgICAgICAgICsgMjsgICAgICAgIC8qIGFjY291bnQgZm9yIGxlYWRpbmcgMHggKi8KLQotICAgICAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIGEgcGxhaW4gJXAsIHNvICsgKi8KLSAgICAgICAgICAgICAgICBpZiAoZHAtPmZsYWdzICYgRkxBR19QVFJfRVhUICYmIGEuYXJnW2RwLT5hcmdfaW5kZXhdLmV4dF9zdHJpbmcpCi0gICAgICAgICAgICAgICAgICB0bXBfbGVuZ3RoICs9IHN0cmxlbiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uZXh0X3N0cmluZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhYm9ydCAoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRtcF9sZW5ndGggPCB3aWR0aCkKLSAgICAgICAgICAgICAgdG1wX2xlbmd0aCA9IHdpZHRoOwotCi0gICAgICAgICAgICB0bXBfbGVuZ3RoKys7ICAgICAgIC8qIGFjY291bnQgZm9yIHRyYWlsaW5nIE5VTCAqLwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICh0bXBfbGVuZ3RoIDw9IHNpemVvZiAodG1wYnVmKSkKLSAgICAgICAgICAgIHRtcCA9IHRtcGJ1ZjsKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRtcCA9IChjaGFyICopIG1hbGxvYyAodG1wX2xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgLyogT3V0IG9mIG1lbW9yeS4gICovCi0gICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQotICAgICAgICAgICAgICAgIGZyZWUgKHJlc3VsdCk7Ci0gICAgICAgICAgICAgIGZyZWVhIChidWYpOwotICAgICAgICAgICAgICBDTEVBTlVQICgpOwotICAgICAgICAgICAgICBlcnJubyA9IEVOT01FTTsKLSAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAvKiBDb25zdHJ1Y3QgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGNhbGxpbmcgc25wcmludGYgb3IKLSAgICAgICAgICAgICBzcHJpbnRmLiAgKi8KLSAgICAgICAgICBwID0gYnVmOwotICAgICAgICAgICpwKysgPSAnJSc7Ci0gICAgICAgICAgaWYgKGRwLT5mbGFncyAmIEZMQUdfR1JPVVApCi0gICAgICAgICAgICAqcCsrID0gJ1wnJzsKLSAgICAgICAgICBpZiAoZHAtPmZsYWdzICYgRkxBR19MRUZUKQotICAgICAgICAgICAgKnArKyA9ICctJzsKLSAgICAgICAgICBpZiAoZHAtPmZsYWdzICYgRkxBR19TSE9XU0lHTikKLSAgICAgICAgICAgICpwKysgPSAnKyc7Ci0gICAgICAgICAgaWYgKGRwLT5mbGFncyAmIEZMQUdfU1BBQ0UpCi0gICAgICAgICAgICAqcCsrID0gJyAnOwotICAgICAgICAgIGlmIChkcC0+ZmxhZ3MgJiBGTEFHX0FMVCkKLSAgICAgICAgICAgICpwKysgPSAnIyc7Ci0gICAgICAgICAgaWYgKGRwLT5mbGFncyAmIEZMQUdfWkVSTykKLSAgICAgICAgICAgICpwKysgPSAnMCc7Ci0gICAgICAgICAgaWYgKGRwLT53aWR0aF9zdGFydCAhPSBkcC0+d2lkdGhfZW5kKSB7Ci0gICAgICAgICAgICBzaXplX3QgbiA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7Ci0gICAgICAgICAgICBtZW1jcHkgKHAsIGRwLT53aWR0aF9zdGFydCwgbik7Ci0gICAgICAgICAgICBwICs9IG47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkcC0+cHJlY2lzaW9uX3N0YXJ0ICE9IGRwLT5wcmVjaXNpb25fZW5kKSB7Ci0gICAgICAgICAgICBzaXplX3QgbiA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKLSAgICAgICAgICAgIG1lbWNweSAocCwgZHAtPnByZWNpc2lvbl9zdGFydCwgbik7Ci0gICAgICAgICAgICBwICs9IG47Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0jaWZkZWYgSEFWRV9JTlQ2NF9BTkRfSTY0Ci0gICAgICAgICAgICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAgICAgICAgICBjYXNlIFRZUEVfVUlOVDY0OgotICAgICAgICAgICAgICAqcCsrID0gJ0knOwotICAgICAgICAgICAgICAqcCsrID0gJzYnOwotICAgICAgICAgICAgICAqcCsrID0gJzQnOwotICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6Ci0gICAgICAgICAgICBjYXNlIFRZUEVfVUxPTkdMT05HSU5UOgotI2lmZGVmIEhBVkVfSU5UNjRfQU5EX0k2NCAgICAgICAvKiBUaGUgc3lzdGVtIChzbilwcmludGYgdXNlcyAlSTY0LiBBbHNvIGFzc3VtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGF0IGxvbmcgbG9uZyA9PSBfX2ludDY0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgKnArKyA9ICdJJzsKLSAgICAgICAgICAgICAgKnArKyA9ICc2JzsKLSAgICAgICAgICAgICAgKnArKyA9ICc0JzsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQotICAgICAgICAgICAgICAqcCsrID0gJ2wnOwotICAgICAgICAgICAgICAgLypGQUxMVEhST1VHSCovCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICAgICAgY2FzZSBUWVBFX0xPTkdJTlQ6Ci0gICAgICAgICAgICBjYXNlIFRZUEVfVUxPTkdJTlQ6Ci0jaWZkZWYgSEFWRV9XSU5UX1QKLSAgICAgICAgICAgIGNhc2UgVFlQRV9XSURFX0NIQVI6Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1dDSEFSX1QKLSAgICAgICAgICAgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKLSNlbmRpZgotICAgICAgICAgICAgICAqcCsrID0gJ2wnOwotICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCi0gICAgICAgICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKLSAgICAgICAgICAgICAgKnArKyA9ICdMJzsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICAqcCA9IGRwLT5jb252ZXJzaW9uOwotI2lmZGVmIEhBVkVfU05QUklOVEYKLSAgICAgICAgICBwWzFdID0gJyUnOwotICAgICAgICAgIHBbMl0gPSAnbic7Ci0gICAgICAgICAgcFszXSA9ICdcMCc7Ci0jZWxzZQotICAgICAgICAgIHBbMV0gPSAnXDAnOwotI2VuZGlmCi0KLSAgICAgICAgICAvKiBDb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBmb3IgY2FsbGluZyBzbnByaW50ZiBvciBzcHJpbnRmLiAgKi8KLSAgICAgICAgICBwcmVmaXhfY291bnQgPSAwOwotICAgICAgICAgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID49IDApIHsKLSAgICAgICAgICAgIGlmICghKGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQotICAgICAgICAgICAgICBhYm9ydCAoKTsKLSAgICAgICAgICAgIHByZWZpeGVzW3ByZWZpeF9jb3VudCsrXSA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCi0gICAgICAgICAgICAgIGFib3J0ICgpOwotICAgICAgICAgICAgcHJlZml4ZXNbcHJlZml4X2NvdW50KytdID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7Ci0gICAgICAgICAgfQotI2lmZGVmIEhBVkVfU05QUklOVEYKLSAgICAgICAgICAvKiBQcmVwYXJlIGNoZWNraW5nIHdoZXRoZXIgc25wcmludGYgcmV0dXJucyB0aGUgY291bnQKLSAgICAgICAgICAgICB2aWEgJW4uICAqLwotICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OIChsZW5ndGggKyAxKTsKLSAgICAgICAgICByZXN1bHRbbGVuZ3RoXSA9ICdcMCc7Ci0jZW5kaWYKLQotICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHNpemVfdCBtYXhsZW47Ci0gICAgICAgICAgICBpbnQgY291bnQ7Ci0jaWZkZWYgSEFWRV9TTlBSSU5URgotICAgICAgICAgICAgaW50IHJldGNvdW50OwotI2VuZGlmCi0KLSAgICAgICAgICAgIG1heGxlbiA9IGFsbG9jYXRlZCAtIGxlbmd0aDsKLSAgICAgICAgICAgIGNvdW50ID0gLTE7Ci0KLSNpZmRlZiBIQVZFX1NOUFJJTlRGCi0gICAgICAgICAgICByZXRjb3VudCA9IDA7Ci0KLSNkZWZpbmUgU05QUklOVEZfQlVGKGFyZykgXAotCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCi0JCSAgICAgIHsJCQkJCQkJICAgIFwKLQkJICAgICAgY2FzZSAwOgkJCQkJCSAgICBcCi0JCQlyZXRjb3VudCA9IHNucHJpbnRmIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAotCQkJCQkgICAgIGFyZywgJmNvdW50KTsJCSAgICBcCi0JCQlicmVhazsJCQkJCQkgICAgXAotCQkgICAgICBjYXNlIDE6CQkJCQkJICAgIFwKLQkJCXJldGNvdW50ID0gc25wcmludGYgKHJlc3VsdCArIGxlbmd0aCwgbWF4bGVuLCBidWYsICBcCi0JCQkJCSAgICAgcHJlZml4ZXNbMF0sIGFyZywgJmNvdW50KTsJICAgIFwKLQkJCWJyZWFrOwkJCQkJCSAgICBcCi0JCSAgICAgIGNhc2UgMjoJCQkJCQkgICAgXAotCQkJcmV0Y291bnQgPSBzbnByaW50ZiAocmVzdWx0ICsgbGVuZ3RoLCBtYXhsZW4sIGJ1ZiwgIFwKLQkJCQkJICAgICBwcmVmaXhlc1swXSwgcHJlZml4ZXNbMV0sIGFyZywgXAotCQkJCQkgICAgICZjb3VudCk7CQkJICAgIFwKLQkJCWJyZWFrOwkJCQkJCSAgICBcCi0JCSAgICAgIGRlZmF1bHQ6CQkJCQkJICAgIFwKLQkJCWFib3J0ICgpOwkJCQkJICAgIFwKLQkJICAgICAgfQotI2Vsc2UKLSNkZWZpbmUgU05QUklOVEZfQlVGKGFyZykgXAotCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCi0JCSAgICAgIHsJCQkJCQkJICAgIFwKLQkJICAgICAgY2FzZSAwOgkJCQkJCSAgICBcCi0JCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBhcmcpOwkJICAgIFwKLQkJCWJyZWFrOwkJCQkJCSAgICBcCi0JCSAgICAgIGNhc2UgMToJCQkJCQkgICAgXAotCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIGFyZyk7CSAgICBcCi0JCQlicmVhazsJCQkJCQkgICAgXAotCQkgICAgICBjYXNlIDI6CQkJCQkJICAgIFwKLQkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIHByZWZpeGVzWzBdLCBwcmVmaXhlc1sxXSxcCi0JCQkJCSBhcmcpOwkJCQkgICAgXAotCQkJYnJlYWs7CQkJCQkJICAgIFwKLQkJICAgICAgZGVmYXVsdDoJCQkJCQkgICAgXAotCQkJYWJvcnQgKCk7CQkJCQkgICAgXAotCQkgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICAgIGNhc2UgVFlQRV9TQ0hBUjoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc2NoYXI7Ci0gICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVFlQRV9VQ0hBUjoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWNoYXI7Ci0gICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVFlQRV9TSE9SVDoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc2hvcnQ7Ci0gICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgVFlQRV9VU0hPUlQ6Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VzaG9ydDsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX0lOVDoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfaW50OwotICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRZUEVfVUlOVDoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWludDsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX0xPTkdJTlQ6Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2ludDsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX1VMT05HSU5UOgotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3Vsb25naW50OwotICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIEhBVkVfSU5UNjRfQU5EX0k2NAotICAgICAgICAgICAgICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfX2ludDY0IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9pbnQ2NDsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX1VJTlQ2NDoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9faW50NjQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3VpbnQ2NDsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0jaWZuZGVmIEhBVkVfTE9OR19MT05HX0ZPUk1BVAotICAgICAgICAgICAgICBjYXNlIFRZUEVfTE9OR0xPTkdJTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGFyZyA9Ci0gICAgICAgICAgICAgICAgICAgIGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91bG9uZ2xvbmdpbnQ7Ci0gICAgICAgICAgICAgICAgaW50IHdpZHRoOwotICAgICAgICAgICAgICAgIGludCBwcmVjaXNpb247Ci0KLSAgICAgICAgICAgICAgICB3aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGRwLT53aWR0aF9zdGFydCAhPSBkcC0+d2lkdGhfZW5kKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBhcmc7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCi0gICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZyA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gKGFyZyA8IDAgPyAtYXJnIDogYXJnKTsKLSAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpZ2l0cCA9IGRwLT53aWR0aF9zdGFydDsKLQotICAgICAgICAgICAgICAgICAgICBkbwotICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGggKiAxMCArICgqZGlnaXRwKysgLSAnMCcpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlnaXRwICE9IGRwLT53aWR0aF9lbmQpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IC0xOwotICAgICAgICAgICAgICAgIGlmIChkcC0+cHJlY2lzaW9uX3N0YXJ0ICE9IGRwLT5wcmVjaXNpb25fZW5kKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgYXJnOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghKGEuYXJnW2RwLT5wcmVjaXNpb25fYXJnX2luZGV4XS50eXBlID09IFRZUEVfSU5UKSkKLSAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKLSAgICAgICAgICAgICAgICAgICAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IChhcmcgPCAwID8gMCA6IGFyZyk7Ci0gICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaWdpdHAgPSBkcC0+cHJlY2lzaW9uX3N0YXJ0ICsgMTsKLQotICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAwOwotICAgICAgICAgICAgICAgICAgICBkbwotICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiAqIDEwICsgKCpkaWdpdHArKyAtICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChkaWdpdHAgIT0gZHAtPnByZWNpc2lvbl9lbmQpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBIQVZFX1NOUFJJTlRGCi0gICAgICAgICAgICAgICAgY291bnQgPSBwcmludF9sb25nX2xvbmcgKHJlc3VsdCArIGxlbmd0aCwgbWF4bGVuLAotICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJlY2lzaW9uLCBkcC0+ZmxhZ3MsIGRwLT5jb252ZXJzaW9uLCBhcmcpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBjb3VudCA9IHByaW50X2xvbmdfbG9uZyAodG1wLCB0bXBfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJlY2lzaW9uLCBkcC0+ZmxhZ3MsIGRwLT5jb252ZXJzaW9uLCBhcmcpOwotI2VuZGlmCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgICAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdsb25naW50OwotICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRZUEVfVUxPTkdMT05HSU5UOgotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBhcmcgPQotICAgICAgICAgICAgICAgICAgICBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdsb25naW50OwotICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0jZW5kaWYKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX0RPVUJMRToKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfZG91YmxlOwotICAgICAgICAgICAgICAgIFNOUFJJTlRGX0JVRiAoYXJnKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX0xPTkdET1VCTEU6Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgICAgICAgICBjYXNlIFRZUEVfQ0hBUjoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY2hhcjsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX1dJTlRfVAotICAgICAgICAgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2ludF90IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV93aWRlX2NoYXI7Ci0gICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX1NUUklORzoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zdHJpbmcgPT0gTlVMTAotICAgICAgICAgICAgICAgICAgICA/ICIobnVsbCkiIDogYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3N0cmluZzsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBIQVZFX1dDSEFSX1QKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqYXJnID0KLSAgICAgICAgICAgICAgICAgICAgYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nID09Ci0gICAgICAgICAgICAgICAgICAgIE5VTEwgPyBMIihudWxsKSIgOiBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmc7Ci0gICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX1BPSU5URVI6Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2b2lkICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfcG9pbnRlcjsKLSAgICAgICAgICAgICAgICBTTlBSSU5URl9CVUYgKGFyZyk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBUWVBFX1BPSU5URVJfRVhUOgotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdm9pZCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3BvaW50ZXI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uZXh0X3N0cmluZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5leHRfc3RyaW5nOwotICAgICAgICAgICAgICAgICAgKnAgPSAncyc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU05QUklOVEZfQlVGIChhcmcpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYWJvcnQgKCk7Ci0gICAgICAgICAgICB9Ci0KLSNpZmRlZiBIQVZFX1NOUFJJTlRGCi0gICAgICAgICAgICAvKiBQb3J0YWJpbGl0eTogTm90IGFsbCBpbXBsZW1lbnRhdGlvbnMgb2Ygc25wcmludGYoKQotICAgICAgICAgICAgICAgYXJlIElTTyBDIDk5IGNvbXBsaWFudC4gIERldGVybWluZSB0aGUgbnVtYmVyIG9mCi0gICAgICAgICAgICAgICBieXRlcyB0aGF0IHNucHJpbnRmKCkgaGFzIHByb2R1Y2VkIG9yIHdvdWxkIGhhdmUKLSAgICAgICAgICAgICAgIHByb2R1Y2VkLiAgKi8KLSAgICAgICAgICAgIGlmIChjb3VudCA+PSAwKSB7Ci0gICAgICAgICAgICAgIC8qIFZlcmlmeSB0aGF0IHNucHJpbnRmKCkgaGFzIE5VTC10ZXJtaW5hdGVkIGl0cwotICAgICAgICAgICAgICAgICByZXN1bHQuICAqLwotICAgICAgICAgICAgICBpZiAoY291bnQgPCBtYXhsZW4gJiYgcmVzdWx0W2xlbmd0aCArIGNvdW50XSAhPSAnXDAnKQotICAgICAgICAgICAgICAgIGFib3J0ICgpOwotICAgICAgICAgICAgICAvKiBQb3J0YWJpbGl0eSBoYWNrLiAgKi8KLSAgICAgICAgICAgICAgaWYgKHJldGNvdW50ID4gY291bnQpCi0gICAgICAgICAgICAgICAgY291bnQgPSByZXRjb3VudDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8qIHNucHJpbnRmKCkgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAnJW4nCi0gICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS4gICovCi0gICAgICAgICAgICAgIGlmIChwWzFdICE9ICdcMCcpIHsKLSAgICAgICAgICAgICAgICAvKiBEb24ndCB1c2UgdGhlICclbicgZGlyZWN0aXZlOyBpbnN0ZWFkLCBsb29rCi0gICAgICAgICAgICAgICAgICAgYXQgdGhlIHNucHJpbnRmKCkgcmV0dXJuIHZhbHVlLiAgKi8KLSAgICAgICAgICAgICAgICBwWzFdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBjb3VudCA9IHJldGNvdW50OwotICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgIC8qIEF0dGVtcHQgdG8gaGFuZGxlIGZhaWx1cmUuICAqLwotICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICAgICAgICBpZiAoIShyZXN1bHQgPT0gcmVzdWx0YnVmIHx8IHJlc3VsdCA9PSBOVUxMKSkKLSAgICAgICAgICAgICAgICBmcmVlIChyZXN1bHQpOwotICAgICAgICAgICAgICBmcmVlYSAoYnVmKTsKLSAgICAgICAgICAgICAgQ0xFQU5VUCAoKTsKLSAgICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotI2lmbmRlZiBIQVZFX1NOUFJJTlRGCi0gICAgICAgICAgICBpZiAoY291bnQgPj0gdG1wX2xlbmd0aCkKLSAgICAgICAgICAgICAgLyogdG1wX2xlbmd0aCB3YXMgaW5jb3JyZWN0bHkgY2FsY3VsYXRlZCAtIGZpeCB0aGUKLSAgICAgICAgICAgICAgICAgY29kZSBhYm92ZSEgICovCi0gICAgICAgICAgICAgIGFib3J0ICgpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIC8qIE1ha2Ugcm9vbSBmb3IgdGhlIHJlc3VsdC4gICovCi0gICAgICAgICAgICBpZiAoY291bnQgPj0gbWF4bGVuKSB7Ci0gICAgICAgICAgICAgIC8qIE5lZWQgYXQgbGVhc3QgY291bnQgYnl0ZXMuICBCdXQgYWxsb2NhdGUKLSAgICAgICAgICAgICAgICAgcHJvcG9ydGlvbmFsbHksIHRvIGF2b2lkIGxvb3BpbmcgZXRlcm5hbGx5IGlmCi0gICAgICAgICAgICAgICAgIHNucHJpbnRmKCkgcmVwb3J0cyBhIHRvbyBzbWFsbCBjb3VudC4gICovCi0gICAgICAgICAgICAgIHNpemVfdCBuID0gbGVuZ3RoICsgY291bnQ7Ci0KLSAgICAgICAgICAgICAgaWYgKG4gPCAyICogYWxsb2NhdGVkKQotICAgICAgICAgICAgICAgIG4gPSAyICogYWxsb2NhdGVkOwotCi0gICAgICAgICAgICAgIEVOU1VSRV9BTExPQ0FUSU9OIChuKTsKLSNpZmRlZiBIQVZFX1NOUFJJTlRGCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0jaWZkZWYgSEFWRV9TTlBSSU5URgotICAgICAgICAgICAgLyogVGhlIHNucHJpbnRmKCkgcmVzdWx0IGRpZCBmaXQuICAqLwotI2Vsc2UKLSAgICAgICAgICAgIC8qIEFwcGVuZCB0aGUgc3ByaW50ZigpIHJlc3VsdC4gICovCi0gICAgICAgICAgICBtZW1jcHkgKHJlc3VsdCArIGxlbmd0aCwgdG1wLCBjb3VudCk7Ci0gICAgICAgICAgICBpZiAodG1wICE9IHRtcGJ1ZikKLSAgICAgICAgICAgICAgZnJlZSAodG1wKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBsZW5ndGggKz0gY291bnQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBBZGQgdGhlIGZpbmFsIE5VTC4gICovCi0gICAgRU5TVVJFX0FMTE9DQVRJT04gKGxlbmd0aCArIDEpOwotICAgIHJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKLQotICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0YnVmICYmIGxlbmd0aCArIDEgPCBhbGxvY2F0ZWQpIHsKLSAgICAgIC8qIFNocmluayB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpZiBwb3NzaWJsZS4gICovCi0gICAgICBjaGFyICptZW1vcnk7Ci0KLSAgICAgIG1lbW9yeSA9IChjaGFyICopIHJlYWxsb2MgKHJlc3VsdCwgbGVuZ3RoICsgMSk7Ci0gICAgICBpZiAobWVtb3J5ICE9IE5VTEwpCi0gICAgICAgIHJlc3VsdCA9IG1lbW9yeTsKLSAgICB9Ci0KLSAgICBmcmVlYSAoYnVmKTsKLSAgICBDTEVBTlVQICgpOwotICAgICpsZW5ndGhwID0gbGVuZ3RoOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9wcmludGYvdmFzbnByaW50Zi5oIGIvZ3N0L3ByaW50Zi92YXNucHJpbnRmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MjBjZmYuLjAwMDAwMDAKLS0tIGEvZ3N0L3ByaW50Zi92YXNucHJpbnRmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKiB2c3ByaW50ZiB3aXRoIGF1dG9tYXRpYyBtZW1vcnkgYWxsb2NhdGlvbi4KLSAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAotICAgVVNBLiAgKi8KLQotI2lmbmRlZiBfVkFTTlBSSU5URl9ICi0jZGVmaW5lIF9WQVNOUFJJTlRGX0gKLQotLyogR2V0IHZhX2xpc3QuICAqLwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi0vKiBHZXQgc2l6ZV90LiAgKi8KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCi0vKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KLSMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkgfHwgZGVmaW5lZCAoX19TVFJJQ1RfQU5TSV9fKQotIyAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KLSMgZW5kaWYKLS8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKLSAgIGFyZSBhY2NlcHRlZCBieSBnY2MgdmVyc2lvbnMgMi42LjQgKGVmZmVjdGl2ZWx5IDIuNykgYW5kIGxhdGVyLiAgKi8KLSMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNykKLSMgIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAotIyAgZGVmaW5lIF9fcHJpbnRmX18gcHJpbnRmCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmCV9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgotICAgWW91IGNhbiBwYXNzIGEgcHJlYWxsb2NhdGVkIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBpbiBSRVNVTFRCVUYgYW5kIGl0cwotICAgc2l6ZSBpbiAqTEVOR1RIUDsgb3RoZXJ3aXNlIHlvdSBwYXNzIFJFU1VMVEJVRiA9IE5VTEwuCi0gICBJZiBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0cmluZyAodGhpcyBtYXkgYmUgPSBSRVNVTFRCVUYKLSAgIGlmIG5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gd2FzIG5lY2Vzc2FyeSkgYW5kIHNldCAqTEVOR1RIUCB0byB0aGUKLSAgIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgVXBvbiBlcnJvciwgc2V0Ci0gICBlcnJubyBhbmQgcmV0dXJuIE5VTEwuICAqLwotZXh0ZXJuIGNoYXIgKiBhc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLSAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKLWV4dGVybiBjaGFyICogdmFzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwotCi0jaWZkZWYJX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX1ZBU05QUklOVEZfSCAqLwpkaWZmIC0tZ2l0IGEvZ3N0cmVhbWVyLmRvYXAgYi9nc3RyZWFtZXIuZG9hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RlZmY5NS4uMDAwMDAwMAotLS0gYS9nc3RyZWFtZXIuZG9hcAorKysgL2Rldi9udWxsCkBAIC0xLDg5MCArMCwwIEBACi08UHJvamVjdAotICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCi0gIHhtbG5zOnJkZnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSMiCi0gIHhtbG5zPSJodHRwOi8vdXNlZnVsaW5jLmNvbS9ucy9kb2FwIyIKLSAgeG1sbnM6Zm9hZj0iaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS8iCi0gIHhtbG5zOmFkbWluPSJodHRwOi8vd2VibnMubmV0L212Y2IvIj4KLQotIDxuYW1lPkdTdHJlYW1lcjwvbmFtZT4KLSA8c2hvcnRuYW1lPmdzdHJlYW1lcjwvc2hvcnRuYW1lPgotIDxob21lcGFnZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL21vZHVsZXMvZ3N0cmVhbWVyLmh0bWwiIC8+Ci0gPGNyZWF0ZWQ+MTk5OS0xMC0zMTwvY3JlYXRlZD4KLSA8c2hvcnRkZXNjIHhtbDpsYW5nPSJlbiI+Ci1HU3RyZWFtZXIgaXMgYSBzdHJlYW1pbmcgbWVkaWEgZnJhbWV3b3JrCi08L3Nob3J0ZGVzYz4KLSA8ZGVzY3JpcHRpb24geG1sOmxhbmc9ImVuIj4KLUdTdHJlYW1lciBpcyBhIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3MgdGhlIGNvbnN0cnVjdGlvbiBvZgotZ3JhcGhzIG9mIGVsZW1lbnRzIHdoaWNoIG9wZXJhdGUgb24gbWVkaWEgZGF0YS4KLUFwcGxpY2F0aW9ucyB1c2luZyB0aGlzIGxpYnJhcnkgY2FuIGRvIGFueXRoaW5nIGZyb20gcmVhbC10aW1lIHNvdW5kIHByb2Nlc3NpbmcKLW92ZXIgcGxheWluZyB2aWRlbyB0byBjYXB0dXJpbmcgYXVkaW8sIHZpZGVvLCBhbmQgZXZlbiBvdGhlciB0eXBlcyBvZiBtZWRpYQotZGF0YS4KLUl0cyBhcmNoaXRlY3R1cmUgYWxsb3dzIGZvciBhZGRpbmcgbmV3IGRhdGEgdHlwZXMgb3IgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMKLXNpbXBseSBieSBpbnN0YWxsaW5nIG5ldyBwbHVnLWlucy4KLUdTdHJlYW1lciBpcyB0aGUgY29yZSBtb2R1bGUsIGNvbnRhaW5pbmcgbGlicmFyaWVzLCBoZWFkZXJzLCB0aGUgYmFzaWMgb2JqZWN0Ci1oaWVyYXJjaHksIGFuZCBhIHNldCBvZiBtZWRpYS1hZ25vc3RpYyBjb3JlIGVsZW1lbnRzLgotIDwvZGVzY3JpcHRpb24+Ci0gPGNhdGVnb3J5PjwvY2F0ZWdvcnk+Ci0gPGJ1Zy1kYXRhYmFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lciZhbXA7Y29tcG9uZW50PWdzdHJlYW1lcislMjhjb3JlJTI5IiAvPgotIDxzY3JlZW5zaG90cz48L3NjcmVlbnNob3RzPgotIDxtYWlsaW5nLWxpc3QgcmRmOnJlc291cmNlPSJodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZ3N0cmVhbWVyLWRldmVsIiAvPgotIDxwcm9ncmFtbWluZy1sYW5ndWFnZT5DPC9wcm9ncmFtbWluZy1sYW5ndWFnZT4KLSA8bGljZW5zZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly91c2VmdWxpbmMuY29tL2RvYXAvbGljZW5zZXMvbGdwbCIgLz4KLSA8ZG93bmxvYWQtcGFnZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLyIgLz4KLQotIDxyZXBvc2l0b3J5PgotICAgPEdpdFJlcG9zaXRvcnk+Ci0gICAgIDxsb2NhdGlvbiByZGY6cmVzb3VyY2U9ImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIiLz4KLSAgICAgPGJyb3dzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyIi8+Ci0gICA8L0dpdFJlcG9zaXRvcnk+Ci0gPC9yZXBvc2l0b3J5PiAKLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjEwLjQ8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjEwPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE3LTAyLTIzPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuMTAuNC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xMC4zPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4xMDwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNy0wMS0zMDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0xLjEwLjMudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMTAuMjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTYtMTEtMjk8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS4xMC4yLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjEwLjE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjEwPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTExLTE3PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuMTAuMS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xMC4wPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTExLTAxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuMTAuMC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS45LjkwPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTA5LTMwPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuOS45MC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS45LjI8L3JldmlzaW9uPgotICAgPGJyYW5jaD5tYXN0ZXI8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTYtMDktMDE8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS45LjIudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuOS4xPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTA2LTA2PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuOS4xLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjguMDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPm1hc3RlcjwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNi0wMy0yNDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0xLjguMC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS43LjkxPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTAzLTE1PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuNy45MS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS43LjkwPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTAzLTAxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuNy45MC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS43LjI8L3JldmlzaW9uPgotICAgPGJyYW5jaD5tYXN0ZXI8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTYtMDItMTk8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS43LjIudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuNy4xPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE1LTEyLTI0PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuNy4xLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjYuMjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuNjwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNS0xMi0xNDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0xLjYuMi50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS42LjE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjY8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTUtMTAtMzA8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS42LjEudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuNi4wPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS42PC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE1LTA5LTI1PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuNi4wLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjUuOTE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjU8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTUtMDktMTg8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS41LjkxLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjUuOTA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjU8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTUtMDgtMTk8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS41LjkwLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjUuMjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuNTwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNS0wNi0yNDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0xLjUuMi50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS41LjE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjU8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTUtMDYtMDc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS41LjEudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuNC4wPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS40PC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE0LTA3LTE5PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuNC4wLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjMuOTE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjM8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTQtMDctMTE8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS4zLjkxLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjMuOTA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjM8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTQtMDYtMjg8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS4zLjkwLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjMuMzwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuMzwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNC0wNi0yMjwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UKLSAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS4zLjMudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMy4yPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4zPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE0LTA1LTIxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuMy4yLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjMuMTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuMzwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNC0wNS0wMzwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0xLjMuMS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4yLjA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjI8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTMtMDktMjQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS4yLjAudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMS45MDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuMTwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMy0wOS0xOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0xLjEuOTAudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMS40PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4xPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEzLTA4LTI4PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuMS40LnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjEuMzwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuMTwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMy0wNy0yOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0xLjEuMy50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xLjI8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjE8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTMtMDctMTE8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS4xLjIudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMS4xPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4xPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEzLTA2LTA1PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuMS4xLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjAuMjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuMDwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMi0xMC0yNDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0xLjAuMi50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4wLjE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjA8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMTAtMDc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMS4wLjEudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMC4wPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4wPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEyLTA5LTI0PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTEuMC4wLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjExLjk5PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMTwvYnJhbmNoPgotICAgPG5hbWU+QWxsb3cgTWUgdG8gSW50cm9kdWNlIE15c2VsZjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMDktMTc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMS45OS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMS45NDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KLSAgIDxuYW1lPkJ1cm5pbmcgU3BlYXI8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEyLTA5LTE0PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTEuOTQudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTEuOTM8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjExPC9icmFuY2g+Ci0gICA8bmFtZT5CYWxyb2cgQm9vZ2llPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMi0wOC0wODwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjExLjkzLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjExLjkyPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMTwvYnJhbmNoPgotICAgPG5hbWU+SGlnaCBIb3BlczwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMDYtMDc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMS45Mi50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMS45MTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KLSAgIDxuYW1lPkkgd2lsbCBnaXZlIHlvdSBmaXZlIG1hZ2ljIGJlYW5zITwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMDUtMTM8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMS45MS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMS45MDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KLSAgIDxuYW1lPkFuZCBhbGwgd2l0aCBwZWFybCBhbmQgcnVieSBnbG93aW5nIHdhcyB0aGUgZmFpciBwYWxhY2UgZG9vcjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMDQtMTI8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMS45MC50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTEuOTAudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTEuMzwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KLSAgIDxuYW1lPlRocmlsbCBvZiB0aGUgSHVudDwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMDMtMjI8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMS4zLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMS4zLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjExLjI8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjExPC9icmFuY2g+Ci0gICA8bmFtZT5BIFNoaW55IHdoaXRlIFRvb3RoPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMi0wMi0xNjwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjExLjIudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjExLjIudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTEuMTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KLSAgIDxuYW1lPlN3ZWV0IE5ldyBCbG9zc29tPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMS0wOS0yOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjExLjEudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjExLjEudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTEuMDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KLSAgIDxuYW1lPkl0J3MgYSBib3k8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDExLTA4LTAyPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTEuMC50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTEuMC50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4zNTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPk51Y2xlYXIgRmlzc2lvbjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTEtMDYtMTU8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zNS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMzUudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMzQ8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5NaXNmaXRzPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMS0wNS0xMzwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjM0LnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zNC50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4zMzwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPlByaW9yIFNwYWNlZmxpZ2h0IEV4cGVyaWVuY2UgaXMgYW4gQWR2YW50YWdlPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMS0wNS0xMDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjMzLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zMy50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4zMjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPlRha2UgTWUgdG8gdGhlIEJvbnVzIExldmVsPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMS0wMS0yMTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjMyLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zMi50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4zMTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPlNhZmV0eSBQaW5zPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMC0xMS0zMDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjMxLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zMS50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4zMDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPlNhZmV0eSBGaXJzdDwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTAtMDctMTU8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4zMC50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMzAudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjk8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5JdCdzIGEgVHJhcDwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTAtMDQtMjc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yOS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjkudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjg8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5TYW1lIE9sZCwgU2FtZSBPbGQ8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEwLTAzLTA4PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjgudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjI4LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjI3PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+WW91J3JlIFNob2NrZWQsIFdlIEtub3c8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEwLTAzLTA1PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjcudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjI3LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjI2PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+VGhpbmsgVHdpY2U8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEwLTAyLTA5PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjYudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjI2LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjI1PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+RmVlbCB0aGUgYnVybjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDktMTAtMDU8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yNS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjUudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjQ8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5JdCBtYXR0ZXJzPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwOS0wOC0wNDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjI0LnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yNC50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4yMzwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPkFsYWJvbyBBbGFib288L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA5LTA1LTEwPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjMudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjIzLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjIyPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+SSBoZWFyZCBhIGRpc3R1cmJpbmcgc291bmQ8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA5LTAxLTE5PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjIudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjIyLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjIxPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+VGFrZSBUaGVzZSBUaGluZ3MgRnJvbSBNZTwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDgtMTAtMDI8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yMS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjEudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5Zb3UgQ3JhenkgRGlhbW9uZDwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDgtMDYtMTg8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4yMC50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMjAudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMTk8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5NZSBBZ2FpbjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDgtMDQtMDQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4xOS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTkudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPiAgIDxyZXZpc2lvbj4wLjEwLjE4PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+U28gZmFyIGF3YXk8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA4LTAzLTIxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTgudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjE4LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjE3PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+RHVlIE5lZ2xpZ2VuY2U8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA4LTAxLTMwPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTcudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjE3LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjE1PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+T2N0b2JlcjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDctMTEtMTU8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4xNS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTUudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMTQ8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5CcmVhdGhpbmcgVmFjdXVtPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNy0wOC0wMzwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjE0LnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4xNC50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4xMzwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPldpdGggb3Igd2l0aG91dCB5b3U8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA3LTA2LTA1PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTMudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjEzLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjEyPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+SW5ldml0YWJsZSBEZW1pc2U8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA3LTAzLTA3PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTIudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjEyLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjExPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+TG92ZSBuZXZlciBydW5zIG9uIHRpbWU8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA2LTEyLTA2PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTEudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjExLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjEwPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+UGFpczwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDYtMDktMTQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC4xMC50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuMTAudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuOTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPk9uIHRoZSByb2FkIGFnYWluPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNi0wNy0xNDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjkudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjkudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuODwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPlNvZXBla2UsIGlrIHppZSBvdSBub2cgYWx0aWpkIG5pZTwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDYtMDYtMTA8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC44LnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItMC4xMC44LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjc8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5Tb2VwZWtlLCBpayB6aWUgb3U8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA2LTA2LTA5PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuNy50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuNy50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC42PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+TGVhdmUgdGhlIGNhbm5vbGk8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA2LTA1LTE0PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuNi50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLTAuMTAuNi50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjU8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5Gb2dvPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNi0wNC0yODwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjUudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjEwLjUudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuNDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPkxpZ2h0PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNi0wMy0xMDwvY3JlYXRlZD4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjM8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5MaWtlIGEgdmlyZ2luPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNi0wMi0wODwvY3JlYXRlZD4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjI8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5JZiBtYW4gaXMgZml2ZTwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDYtMDEtMTY8L2NyZWF0ZWQ+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4xPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+Tm9sbGFpZyBjaHJpZGhlaWw8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA1LTEyLTIzPC9jcmVhdGVkPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPk1hcm9pbGxlczwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDUtMTItMDU8L2NyZWF0ZWQ+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC44LjEyPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC44PC9icmFuY2g+Ci0gICA8bmFtZT5Db29raWVzPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNi0wMi0wOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjguMTIudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0wLjguMTIudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPG1haW50YWluZXI+Ci0gIDxmb2FmOlBlcnNvbj4KLSAgICAgPGZvYWY6bmFtZT5XaW0gVGF5bWFuczwvZm9hZjpuYW1lPgotICAgICA8Zm9hZjptYm94X3NoYTFzdW0+MGQ5M2ZkZTA1MjgxMmQ1MWEwNWZkODZkZTliZGJmNjc0NDIzZGFhMjwvZm9hZjptYm94X3NoYTFzdW0+Ci0gIDwvZm9hZjpQZXJzb24+Ci0gPC9tYWludGFpbmVyPgotCi08L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9nc3RyZWFtZXIuc3BlYyBiL2dzdHJlYW1lci5zcGVjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDI2MDVmLi4wMDAwMDAwCi0tLSBhL2dzdHJlYW1lci5zcGVjCisrKyAvZGV2L251bGwKQEAgLTEsNTE2ICswLDAgQEAKLSVkZWZpbmUJCWdzdHJlYW1lcglnc3RyZWFtZXIxCi0lZGVmaW5lCQltYWpvcm1pbm9yCTEuMAotCi0lZGVmaW5lIAlfZ2xpYjIJCTIuNDAuMAotCi1OYW1lOiAJCSV7Z3N0cmVhbWVyfQotVmVyc2lvbjogCTEuMTAuNAotUmVsZWFzZTogCTEKLVN1bW1hcnk6IAlHU3RyZWFtZXIgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yayBydW50aW1lCi0KLUdyb3VwOiAJCUFwcGxpY2F0aW9ucy9NdWx0aW1lZGlhCi1MaWNlbnNlOiAJTEdQTAotVVJMOgkJaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCi1Tb3VyY2U6IAlodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0le3ZlcnNpb259LnRhci54egotQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS0le3JlbGVhc2V9LXJvb3QtJSgle19faWRfdX0gLW4pCi0KLUJ1aWxkUmVxdWlyZXM6IAlnbGliMi1kZXZlbCA+PSAle19nbGliMn0KLUJ1aWxkUmVxdWlyZXM6IAliaXNvbgotQnVpbGRSZXF1aXJlczogCWZsZXgKLUJ1aWxkUmVxdWlyZXM6IAltNAotQnVpbGRSZXF1aXJlczogCWNoZWNrLWRldmVsCi1CdWlsZFJlcXVpcmVzOiAJZ3RrLWRvYyA+PSAxLjMKLUJ1aWxkUmVxdWlyZXM6CWdldHRleHQKLQotIyBiZWNhdXNlIEFNX1BST0dfTElCVE9PTCB3YXMgdXNlZCBpbiBjb25maWd1cmUuYWMKLUJ1aWxkUmVxdWlyZXM6CWdjYy1jKysKLQotIyMjIGRvY3VtZW50YXRpb24gcmVxdWlyZW1lbnRzCi1CdWlsZFJlcXVpcmVzOiAgcHl0aG9uMgotQnVpbGRSZXF1aXJlczogIG9wZW5qYWRlCi1CdWlsZFJlcXVpcmVzOiAgamFkZXRleAotQnVpbGRSZXF1aXJlczoJbGlieHNsdAotQnVpbGRSZXF1aXJlczogIGRvY2Jvb2stc3R5bGUtZHNzc2wKLUJ1aWxkUmVxdWlyZXM6ICBkb2Nib29rLXN0eWxlLXhzbAotQnVpbGRSZXF1aXJlczogIGRvY2Jvb2stdXRpbHMKLUJ1aWxkUmVxdWlyZXM6ICBuZXRwYm0tcHJvZ3MKLUJ1aWxkUmVxdWlyZXM6ICB0ZXRleC1kdmlwcwotQnVpbGRSZXF1aXJlczogIGdob3N0c2NyaXB0Ci0KLSVkZXNjcmlwdGlvbgotR1N0cmVhbWVyIGlzIGEgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yaywgYmFzZWQgb24gZ3JhcGhzIG9mIGZpbHRlcnMgd2hpY2gKLW9wZXJhdGUgb24gbWVkaWEgZGF0YS4gQXBwbGljYXRpb25zIHVzaW5nIHRoaXMgbGlicmFyeSBjYW4gZG8gYW55dGhpbmcKLWZyb20gcmVhbC10aW1lIHNvdW5kIHByb2Nlc3NpbmcgdG8gcGxheWluZyB2aWRlb3MsIGFuZCBqdXN0IGFib3V0IGFueXRoaW5nCi1lbHNlIG1lZGlhLXJlbGF0ZWQuICBJdHMgcGx1Z2luLWJhc2VkIGFyY2hpdGVjdHVyZSBtZWFucyB0aGF0IG5ldyBkYXRhCi10eXBlcyBvciBwcm9jZXNzaW5nIGNhcGFiaWxpdGllcyBjYW4gYmUgYWRkZWQgc2ltcGx5IGJ5IGluc3RhbGxpbmcgbmV3IAotcGx1Z2lucy4KLQotJXBhY2thZ2UgZGV2ZWwKLVN1bW1hcnk6IAlMaWJyYXJpZXMvaW5jbHVkZSBmaWxlcyBmb3IgR1N0cmVhbWVyIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmsKLUdyb3VwOiAJCURldmVsb3BtZW50L0xpYnJhcmllcwotCi1SZXF1aXJlczogCSV7bmFtZX0gPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KLVJlcXVpcmVzOiAJZ2xpYjItZGV2ZWwgPj0gJXtfZ2xpYjJ9Ci1SZXF1aXJlczoJY2hlY2stZGV2ZWwKLQotJWRlc2NyaXB0aW9uIGRldmVsCi1HU3RyZWFtZXIgaXMgYSBzdHJlYW1pbmcgbWVkaWEgZnJhbWV3b3JrLCBiYXNlZCBvbiBncmFwaHMgb2YgZmlsdGVycyB3aGljaAotb3BlcmF0ZSBvbiBtZWRpYSBkYXRhLiBBcHBsaWNhdGlvbnMgdXNpbmcgdGhpcyBsaWJyYXJ5IGNhbiBkbyBhbnl0aGluZwotZnJvbSByZWFsLXRpbWUgc291bmQgcHJvY2Vzc2luZyB0byBwbGF5aW5nIHZpZGVvcywgYW5kIGp1c3QgYWJvdXQgYW55dGhpbmcKLWVsc2UgbWVkaWEtcmVsYXRlZC4gIEl0cyBwbHVnaW4tYmFzZWQgYXJjaGl0ZWN0dXJlIG1lYW5zIHRoYXQgbmV3IGRhdGEKLXR5cGVzIG9yIHByb2Nlc3NpbmcgY2FwYWJpbGl0aWVzIGNhbiBiZSBhZGRlZCBzaW1wbHkgYnkgaW5zdGFsbGluZyBuZXcgICAKLXBsdWdpbnMuCi0KLVRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgbGlicmFyaWVzIGFuZCBpbmNsdWRlcyBmaWxlcyBuZWNlc3NhcnkgdG8gZGV2ZWxvcAotYXBwbGljYXRpb25zIGFuZCBwbHVnaW5zIGZvciBHU3RyZWFtZXIsIGFzIHdlbGwgYXMgZ2VuZXJhbCBhbmQgQVBJCi1kb2N1bWVudGF0aW9uLgotCi0lcHJlcAotJXNldHVwIC1xIC1uIGdzdHJlYW1lci0le3ZlcnNpb259Ci0KLSVidWlsZAotIyAwLjEwLjA6IG1hbnVhbHMgZG8gbm90IGJ1aWxkIGR1ZSB0byBhbiBvcGVuamFkZSBlcnJvcjsgZGlzYWJsZSBmb3Igbm93Ci0lY29uZmlndXJlIFwKLSAgLS13aXRoLXBhY2thZ2UtbmFtZT0nZ3N0cmVhbWVyIHBhY2thZ2UnIFwKLSAgLS13aXRoLXBhY2thZ2Utb3JpZ2luPSdodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZycgXAotICAtLWVuYWJsZS1kZWJ1ZyBcCi0gIC0tZW5hYmxlLWd0ay1kb2MgXAotICAtLWVuYWJsZS1kb2Nib29rIFwKLSAgLS1lbmFibGUtaW50cm9zcGVjdGlvbj15ZXMKLQotI21ha2UgJXs/X3NtcF9tZmxhZ3N9Ci0jIEZJWE1FOiBkb2NzIGJ1aWxkaW5nIGRvZXNuJ3Qgd29yayB3aXRoIHNtcCB5ZXQKLW1ha2UKLQotJWluc3RhbGwgIAotcm0gLXJmICRSUE1fQlVJTERfUk9PVAotCi0jIEluc3RhbGwgZG9jIHRlbXBvcmFyaWx5IGluIG9yZGVyIHRvIGJlIGluY2x1ZGVkIGxhdGVyIGJ5IHJwbQotbWFrZSBpbnN0YWxsIERFU1RESVI9JFJQTV9CVUlMRF9ST09UCi0KLSVmaW5kX2xhbmcgZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0KLSMgQ2xlYW4gb3V0IGZpbGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIHRoZSBycG0uIAotbWtkaXIgLXAgJFJQTV9CVUlMRF9ST09UJXtfbG9jYWxzdGF0ZWRpcn0vY2FjaGUvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0KLXJtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vKi5sYQotcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS8qLmEKLXJtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vKi5hCi1ybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9LyoubGEKLSMgQ3JlYXRlIGVtcHR5IGNhY2hlIGRpcmVjdG9yeQotbWtkaXIgLXAgJFJQTV9CVUlMRF9ST09UJXtfbG9jYWxzdGF0ZWRpcn0vY2FjaGUvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0KLQotJWNsZWFuCi1ybSAtcmYgJFJQTV9CVUlMRF9ST09UCi0KLSVwb3N0IC1wIC9zYmluL2xkY29uZmlnCi0KLSVwb3N0dW4gLXAgL3NiaW4vbGRjb25maWcKLQotJWZpbGVzIC1mIGdzdHJlYW1lci0le21ham9ybWlub3J9LmxhbmcKLSVkZWZhdHRyKC0sIHJvb3QsIHJvb3QsIC0pCi0lZG9jIEFVVEhPUlMgQ09QWUlORyBORVdTIFJFQURNRSBSRUxFQVNFIFRPRE8KLSV7X2xpYmRpcn0vbGliZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0uc28uKgotJXtfbGliZGlyfS9saWJnc3RiYXNlLSV7bWFqb3JtaW5vcn0uc28uKgotJXtfbGliZGlyfS9saWJnc3Rjb250cm9sbGVyLSV7bWFqb3JtaW5vcn0uc28uKgotJXtfbGliZGlyfS9saWJnc3RuZXQtJXttYWpvcm1pbm9yfS5zby4qCi0KLSVkaXIgJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfQotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3Rjb3JlZWxlbWVudHMuc28KLQotJXtfYmluZGlyfS9nc3QtaW5zcGVjdC0le21ham9ybWlub3J9Ci0le19iaW5kaXJ9L2dzdC1sYXVuY2gtJXttYWpvcm1pbm9yfQotJXtfYmluZGlyfS9nc3QtdHlwZWZpbmQtJXttYWpvcm1pbm9yfQotJXtfbGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0LXBsdWdpbi1zY2FubmVyCi0lZG9jICV7X21hbmRpcn0vbWFuMS9nc3QtaW5zcGVjdC0le21ham9ybWlub3J9LioKLSVkb2MgJXtfbWFuZGlyfS9tYW4xL2dzdC1sYXVuY2gtJXttYWpvcm1pbm9yfS4qCi0lZG9jICV7X21hbmRpcn0vbWFuMS9nc3QtdHlwZWZpbmQtJXttYWpvcm1pbm9yfS4qCi0lZG9jICV7X2RhdGFkaXJ9L2RvYy9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9tYW51YWwKLSVkb2MgJXtfZGF0YWRpcn0vZG9jL2dzdHJlYW1lci0le21ham9ybWlub3J9L3B3ZwotJWRvYyAle19kYXRhZGlyfS9kb2MvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZmFxLwotJXtfbGliZGlyfS9naXJlcG9zaXRvcnktMS4wL0dzdC0le21ham9ybWlub3J9LnR5cGVsaWIKLSV7X2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC9Hc3RCYXNlLSV7bWFqb3JtaW5vcn0udHlwZWxpYgotJXtfbGliZGlyfS9naXJlcG9zaXRvcnktMS4wL0dzdENoZWNrLSV7bWFqb3JtaW5vcn0udHlwZWxpYgotJXtfbGliZGlyfS9naXJlcG9zaXRvcnktMS4wL0dzdENvbnRyb2xsZXItJXttYWpvcm1pbm9yfS50eXBlbGliCi0le19saWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAvR3N0TmV0LSV7bWFqb3JtaW5vcn0udHlwZWxpYgotJXtfZGF0YWRpcn0vZ2lyLTEuMC9Hc3QtJXttYWpvcm1pbm9yfS5naXIKLSV7X2RhdGFkaXJ9L2dpci0xLjAvR3N0QmFzZS0le21ham9ybWlub3J9LmdpcgotJXtfZGF0YWRpcn0vZ2lyLTEuMC9Hc3RDaGVjay0le21ham9ybWlub3J9LmdpcgotJXtfZGF0YWRpcn0vZ2lyLTEuMC9Hc3RDb250cm9sbGVyLSV7bWFqb3JtaW5vcn0uZ2lyCi0le19kYXRhZGlyfS9naXItMS4wL0dzdE5ldC0le21ham9ybWlub3J9LmdpcgotCi0lZmlsZXMgZGV2ZWwKLSVkZWZhdHRyKC0sIHJvb3QsIHJvb3QsIC0pCi0lZGlyICV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9Ci0lZGlyICV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdAotJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0LyouaAotCi0le19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QvYmFzZQotJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0L2NoZWNrCi0le19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QvY29udHJvbGxlcgotJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0L25ldAotCi0le19saWJkaXJ9L2xpYmdzdHJlYW1lci0le21ham9ybWlub3J9LnNvCi0le19saWJkaXJ9L2xpYmdzdGJhc2UtJXttYWpvcm1pbm9yfS5zbwotJXtfbGliZGlyfS9saWJnc3RjaGVjay0le21ham9ybWlub3J9LnNvKgotJXtfbGliZGlyfS9saWJnc3Rjb250cm9sbGVyLSV7bWFqb3JtaW5vcn0uc28KLSV7X2xpYmRpcn0vbGliZ3N0bmV0LSV7bWFqb3JtaW5vcn0uc28KLQotJXtfZGF0YWRpcn0vYWNsb2NhbC9nc3QtZWxlbWVudC1jaGVjay0le21ham9ybWlub3J9Lm00Ci0le19saWJkaXJ9L3BrZ2NvbmZpZy9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS5wYwotJXtfbGliZGlyfS9wa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtJXttYWpvcm1pbm9yfS5wYwotJXtfbGliZGlyfS9wa2djb25maWcvZ3N0cmVhbWVyLWNvbnRyb2xsZXItJXttYWpvcm1pbm9yfS5wYwotJXtfbGliZGlyfS9wa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLSV7bWFqb3JtaW5vcn0ucGMKLSV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci1uZXQtJXttYWpvcm1pbm9yfS5wYwotCi0lZG9jICV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS8qCi0lZG9jICV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0le21ham9ybWlub3J9LyoKLSVkb2MgJXtfZGF0YWRpcn0vZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1wbHVnaW5zLSV7bWFqb3JtaW5vcn0vKgotCi0lY2hhbmdlbG9nCi0qIFNhdCBBdWcgMDYgMjAxMSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIFVzZSBtYWpvcm1pbm9yIGNvcnJlY3RseSBmb3IgLmdpciBmaWxlcwotLSBSZW1vdmUgZ3N0cmVhbWVyLXRvb2xzIGNvbXBsZXRlbHkgc2luY2UgdGhlIHVudmVyc2lvbmVkIHRvb2xzIGhhdmUgYmVlbgotICByZW1vdmVkCi0tIFJlbmFtZSBwYWNrYWdlIHRvIGdzdHJlYW1lcjAxMSB0byBiZSBwYXJhbGxlbC1pbnN0YWxsYWJsZQotCi0qIFRodSBBcHIgMyAyMDA4IENocmlzdGlhbiBTY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyIGF0IGNvbGxhYm9yYSBjbyB1az4KLS0gVXBkYXRlIHNwZWMgZmlsZSB0byBtYWtlIGluY2x1c2lvbiBvZiBhbGwgZG9jcyBleHBsaWNpdAotCi0qIFR1ZSBEZWMgMTEgMjAwNyBDaHJpc3RpYW4gU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+IAotLSBJbXBvcnQgZnJvbSBGZWRvcmEgcGFja2FnZQotCi0qIEZyaSBOb3YgMTYgMjAwNyAtIEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IC0gMC4xMC4xNS0xCi0tIFVwZGF0ZSB0byAwLjEwLjE1Ci0KLSogTW9uIE9jdCAgMSAyMDA3IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuMTQtNAotLSBBZGQgbWlzc2luZyBSZXF1aXJlcyAoIzMxMjY3MSkKLQotKiBUdWUgQXVnIDE0IDIwMDcgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC4xNC0zCi0tIFJlcXVpcmUgY2hlY2stZGV2ZWwgKCMyNTE5NTYpCi0KLSogU2F0IEF1ZyAwNCAyMDA3IC0gQmFzdGllbiBOb2NlcmEgPGJub2NlcmFAcmVkaGF0LmNvbT4gLSAwLjEwLjE0LTEKLS0gVXBkYXRlIHRvIDAuMTAuMTQKLQotKiBUdWUgSnVuIDA1IDIwMDcgLSBCYXN0aWVuIE5vY2VyYSA8Ym5vY2VyYUByZWRoYXQuY29tPiAtIDAuMTAuMTMtMgotLSBSZW1vdmUgdXBzdHJlYW1lZCBkb2NzIHBhdGNoCi0KLSogVHVlIEp1biAwNSAyMDA3IC0gQmFzdGllbiBOb2NlcmEgPGJub2NlcmFAcmVkaGF0LmNvbT4gLSAwLjEwLjEzLTEKLS0gVXBkYXRlIHRvIDAuMTAuMTMKLQotKiBUaHUgTWFyIDA4IDIwMDcgLSBCYXN0aWVuIE5vY2VyYSA8Ym5vY2VyYUByZWRoYXQuY29tPiAtIDAuMTAuMTItMQotLSBVcGRhdGUgdG8gMC4xMC4xMgotCi0qIFR1ZSBGZWIgMTMgMjAwNyAtIEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IC0gMC4xMC4xMS0yCi0tIFJlbW92ZSBSZXF1aXJlcyBvbiBwYWNrYWdlcyB0aGF0IEJ1aWxkUmVxdWlyZSB1cwotCi0qIFR1ZSBEZWMgMTIgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjExLTEKLS0gVXBkYXRlIHRvIDAuMTAuMTEKLQotKiBGcmkgT2N0IDI3IDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC4xMC0yCi0tIENsZWFudXBzCi0tIEF0dGVtcHQgdG8gZml4IG11bHRpbGliIGNvbmZsaWN0cwotCi0qIE1vbiBPY3QgMjMgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjEwLTEKLS0gVXBkYXRlIHRvIDAuMTAuMTAKLQotKiBUaHUgSnVsIDI3IDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC45LTIKLS0gRGlzYWJsZSBndGstZG9jIHRvIGZpeCBtdWx0aWxpYiBjb25mbGljdHMKLQotKiBUaHUgSnVsIDIwIDIwMDYgSm9obiAoSjUpIFBhbG1pZXJpIDxqb2hucEByZWRoYXQuY29tPiAtIDAuMTAuOS0xCi0tIFVwZGF0ZSB0byBuZXcgdXBzdHJlYW0gdmVyc2lvbgotCi0qIFdlZCBKdWwgMTkgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjgtNAotLSBSZS1hZGQgdGhlIGdzdHJlYW1lci1wbHVnaW5zLWdvb2QgZGVwZW5kZW5jeQotCi0qIFdlZCBKdWwgMTkgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjgtMy4yCi0tIFRlbXBvcmFyaWx5IGJyZWFrIHRoZSBkZXBlbmRlbmN5IGN5Y2xlIHdpdGggZ3N0ZWFtZXItcGx1Z2lucy1nb29kCi0KLSogV2VkIEp1bCAxMiAyMDA2IEplc3NlIEtlYXRpbmcgPGprZWF0aW5nQHJlZGhhdC5jb20+IC0gMC4xMC44LTMuMQotLSByZWJ1aWxkCi0KLSogV2VkIEp1biAyOCAyMDA2IEthcnN0ZW4gSG9wcCA8a2Fyc3RlbkByZWRoYXQuZGU+IDAuMTAuOC0zCi0tIHJlbW92ZSBSUEFUSCBwb2ludGluZyB0byBSUE1fQlVJTERfUk9PVCAoIzE5Njg3MCkKLQotKiBUdWUgSnVuIDEzIDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC44LTIKLS0gUmVidWlsZAotCi0qIFR1ZSBKdW4gMTMgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjgtMQotLSBVcGRhdGUgdG8gMC4xMC44Ci0KLSogTW9uIE1heSAyMiAyMDA2IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuNi0xCi0tIFVwZGF0ZSB0byAwLjEwLjYKLQotKiBUdWUgRmViIDE0IDIwMDYgUmlrIHZhbiBSaWVsIDxyaWVsQHJlZGhhdC5jb20+IC0gMC4xMC0zLTMKLS0gT2Jzb2xldGUgZ3N0cmVhbWVyLXBsdWdpbnMgKCMxODEyOTYpCi0KLSogTW9uIEZlYiAxMyAyMDA2IENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAtIDAuMTAuMy0yCi0tIFJlYnVpbGQKLQotKiBGcmkgRmViIDEwIDIwMDYgQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IC0gMC4xMC4zLTEKLS0gVXBkYXRlIHRvIDAuMTAuMwotCi0qIFR1ZSBGZWIgMDcgMjAwNiBKZXNzZSBLZWF0aW5nIDxqa2VhdGluZ0ByZWRoYXQuY29tPiAtIDAuMTAuMi0xLjEKLS0gcmVidWlsdCBmb3IgbmV3IGdjYzQuMSBzbmFwc2hvdCBhbmQgZ2xpYmMgY2hhbmdlcwotCi0qIFdlZCBKYW4gMTggMjAwNiBKb2huIChKNSkgUGFsbWllcmkgPGpvaG5wQHJlZGhhdC5jb20+IC0gMC4xMC4yLTEKLS0gVXBncmFkZSB0byAwLjEwLjIKLQotKiBGcmkgSmFuIDA2IDIwMDYgSm9obiAoSjUpIFBhbG1pZXJpIDxqb2hucEByZWRoYXQuY29tPiAtIDAuMTAuMS0xCi0tIE5ldyB1cHN0cmVhbSB2ZXJzaW9uCi0KLSogRnJpIERlYyAxNiAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC4xMC4wLTEKLS0gcmVidWlsdCBmb3IgRmVkb3JhIENvcmUgRGV2ZWxvcG1lbnQKLQotKiBXZWQgRGVjIDE0IDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjEwLjAtMC5nc3QuMgotLSByZWJ1aWx0IGFnYWluc3QgbmV3ZXIgR0xpYiBhbmQgZnJpZW5kcwotCi0qIE1vbiBEZWMgMDUgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuMTAuMC0wLmdzdC4xCi0tIG5ldyByZWxlYXNlCi0KLSogVGh1IERlYyAwMSAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC45LjctMC5nc3QuMQotLSBuZXcgcmVsZWFzZSwgd2l0aCAwLjEwIG1ham9ybWlub3IKLS0gcmVtb3ZlZCBjb21wcHJlcCBhbmQgY29tcGxldGUKLS0gYWRkZWQgcGx1Z2lucyBkb2NzCi0tIHJlbmFtZWQgbGliZ3N0Y29yZWxlbWVudHMsIGxpYmdzdGNvcmVpbmRleGVycwotLSBhZGRlZCBsaWJnc3RuZXQKLQotKiBTYXQgTm92IDEyIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjkuNS0wLmdzdC4xCi0tIG5ldyByZWxlYXNlCi0KLSogTW9uIE9jdCAyNCAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC45LjQtMC5nc3QuMQotLSBuZXcgcmVsZWFzZQotCi0qIE1vbiBPY3QgMDMgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOS4zLTAuZ3N0LjEKLS0gbmV3IHJlbGVhc2UKLQotKiBUaHUgU2VwIDA4IDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjkuMi0wLmdzdC4xCi0tIGFkZGVkIGxpYmdzdGNoZWNrCi0tIG5ldyByZWxlYXNlCi0KLSogVGh1IEp1biAwOSAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC45LjEtMC5nc3QuMQotLSBmaXJzdCBkZXZlbG9wbWVudCBzZXJpZXMgcmVsZWFzZQotCi0qIFR1ZSBNYXkgMDMgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC4xMC0wLmdzdC4xCi0tIG5ldyByZWxlYXNlCi0tIHVwIGdsaWIyIHRvIDIuNCBiZWNhdXNlIGRpc3Rpbmcgb24gMi40IGJ1aWxkcyBtYXJzaGFsbGluZyBjb2RlIG5lZWRpbmcgMi40Ci0KLSogTW9uIE1heSAwMiAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjkuMi0wLmdzdC4xCi0tIG5ldyBwcmVyZWxlYXNlCi0KLSogVHVlIEZlYiAwOCAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjktMC5nc3QuMQotLSBuZXcgcmVsZWFzZQotLSBzd2l0Y2ggYmFjayB0byB0aGUgZ3N0IHRhZyBzaW5jZSBmZWRvcmEudXMgaXMgZ29uZQotCi0qIFRodSBGZWIgMDMgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC44LjItMC5mZHIuMQotLSBuZXcgcHJlcmVsZWFzZQotCi0qIFRodSBEZWMgMjMgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC44LTAuZmRyLjEKLS0gbmV3IHVwc3RyZWFtIHJlbGVhc2UKLQotKiBGcmkgRGVjIDE3IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguNy4yLTAuZmRyLjEKLS0gbmV3IHByZXJlbGVhc2UKLS0gYWRkZWQgZmFpciBndGhyZWFkIHNjaGVkdWxlcgotCi0qIFdlZCBPY3QgMDYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC43LTAuZmRyLjEKLS0gdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UKLQotKiBUdWUgT2N0IDA1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguNi0wLmZkci4xCi0tIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCi0KLSogU3VuIFNlcCAyNiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjUuMy0wLmZkci4xCi0tIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciBwcmVyZWxlYXNlCi0KLSogU3VuIFNlcCAxMiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjUuMi0wLmZkci4xCi0tIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciBwcmVyZWxlYXNlCi0KLSogTW9uIEF1ZyAxNiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjUtMC5mZHIuMQotLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQotCi0qIFRodSBBdWcgMTIgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC40LjItMC5mZHIuMQotLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQotLSBzZXQgcGFja2FnZSBuYW1lIGFuZCBvcmlnaW4KLQotKiBUdWUgSnVsIDIwIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguNC0wLmZkci4xCi0tIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCi0tIHVuYnJlYWsgdGhlIHBvc3R1biBzY3JpcHQgYnkgbm90IHJlbW92aW5nIHRoZSBjYWNoZSBkaXIKLQotKiBUdWUgSnVsIDIwIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguMy4zLTAuZmRyLjE6IHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciBwcmVyZWxlYXNlCi0KLSogRnJpIEp1bCAxNiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjMuMi0wLmZkci4xOiB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQotCi0qIFNhdCBKdW4gMDUgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC4zLTAuZmRyLjE6IHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCi0KLSogRnJpIEp1biAwNCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjItMC5mZHIuMTogdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UKLQotKiBUaHUgQXByIDE1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguMS0wLmZkci4xOiB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQotCi0qIFRodSBBcHIgMTUgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIGFkZCBlbnRyeSBzY2hlZHVsZXJzLCBjbGVhbiB1cCBzY2hlZHVsZXIgZmlsZSBzZWN0aW9uCi0KLSogVHVlIE1hciAxNiAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjAtMC5mZHIuMTogdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UsIHJlbmFtZWQgYmFzZSB0byBnc3RyZWFtZXIKLQotKiBUdWUgTWFyIDA5IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjcuNi0wLmZkci4xOiB1cGRhdGVkIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UsIHdpdGggbWFqL21pbiBzZXQgdG8gMC44Ci0KLSogTW9uIE1hciAwOCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC43LjUtMC5mZHIuMzogZml4IHBvc3R1biBzY3JpcHQKLQotKiBGcmkgTWFyIDA1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjcuNS0wLmZkci4yOiBuZXcgcmVsZWFzZQotCi0qIFdlZCBGZWIgMTEgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuNy40LTAuZmRyLjE6IHN5bmNocm9uaXplIHdpdGggTWF0dGhpYXMncyBwYWNrYWdlCi0KLSogU2F0IEZlYiAwNyAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gbWFrZSB0aGUgcGFja2FnZSBuYW1lIGdzdHJlYW1lcjA3IHNpbmNlIHRoaXMgaXMgYW4gdW5zdGFibGUgcmVsZWFzZQotCi0qIFdlZCBGZWIgMDQgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIHB1dCB2ZXJzaW9uZWQgdG9vbHMgaW5zaWRlIGJhc2UgcGFja2FnZSwgYW5kIHB1dCB1bnZlcnNpb25lZCB0b29scyBpbiB0b29scwotCi0qIE1vbiBEZWMgMDEgMjAwMyBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIGNoYW5nZWQgZG9jdW1lbnRhdGlvbiBidWlsZHJlcXVpcmVzCi0KLSogU3VuIE5vdiAwOSAyMDAzIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGdub21lLm9yZz4KLS0gRml4IHNwZWMgdG8gaGFuZGxlIG5ldyBieXRlc3RyZWFtIGxpYnJhcnkgCi0KLSogU3VuIEF1ZyAxNyAyMDAzIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLS0gUmVtb3ZlIGRvY3MgYnVpbGQgZnJvbSBSUE0gYXMgdGhlIGJ1aWxkIGlzIGJyb2tlbgotLSBGaXggc3R1ZmYgc2luY2UgbW9yZSBmaWxlcyBhcmUgdmVyc2lvbmVkIG5vdwotLSBSZW1vdmUgd2luZ28gc2NoZWR1bGVycwotLSBSZW1vdmUgcHV0Yml0cyBzdHVmZgotCi0qIFN1biBNYXkgMTggMjAwMyBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIGRldmhlbHAgZmlsZXMgYXJlIG5vdyBnZW5lcmF0ZWQgYnkgZ3RrLWRvYywgY2hhbmdlZCBhY2NvcmRpbmdseQotCi0qIFN1biBNYXIgMTYgMjAwMyBDaHJpc3RpYW4gRi5LLiBTY2hhbGxlciA8VXJhZXVzQGdub21lLm9yZz4KLS0gQWRkIGd0aHJlYWQgc2NoZWR1bGVyCi0KLSogU2F0IERlYyAwNyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gZGVmaW5lIG1ham9ybWlub3IgYW5kIHVzZSBpdCBldmVyeXdoZXJlCi0tIGZ1bGwgcGFyYWxsZWwgaW5zdGFsbGFiaWxpdHkKLQotKiBUdWUgTm92IDA1IDIwMDIgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBBZGQgb3B0d2luZ28gc2NoZWR1bGVyCi0qIFNhdCBPY3QgMTIgMjAwMiBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0tIFVwZGF0ZWQgdG8gd29yayBiZXR0ZXIgd2l0aCBkZWZhdWx0IFJIOCBycG0KLS0gQWRkZWQgbWlzc2luZyB1bnNwZWNlZCBmaWxlcwotLSBSZW1vdmVkIC5hIGFuZCAubGEgZmlsZXMgZnJvbSBidWlsZHJvb3QKLQotKiBTYXQgU2VwIDIxIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0tIGFkZGVkIGdzdC1tZDVzdW0KLQotKiBUdWUgU2VwIDE3IDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0tIGFkZGluZyBmbGV4IHRvIGJ1aWxkcmVxdWlyZXMKLQotKiBGcmkgU2VwIDEzIDIwMDIgQ2hyaXN0aWFuIEYuSy4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0tIEZpeGVkIHRoZSBzY2hlZHVsZXJzIGFmdGVyIHRoZSByZW5hbWluZwotKiBTdW4gU2VwIDA4IDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0tIGFkZGVkIHRyYW5zZmlnIHRvIHRoZSBCdWlsZFJlcXVpcmVzOgotCi0qIFNhdCBKdW4gMjIgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLS0gbW92ZWQgaGVhZGVyIGxvY2F0aW9uCi0KLSogTW9uIEp1biAxNyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotLSBhZGRlZCBwb3B0Ci0tIHJlbW92ZWQgLmxhCi0KLSogRnJpIEp1biAwNyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotLSBhZGRlZCByZWxlYXNlIG9mIGdzdHJlYW1lciB0byByZXEgb2YgZ3N0cmVhbWVyLWRldmVsCi0tIGNoYW5nZWQgbG9jYXRpb24gb2YgQVBJIGRvY3MgdG8gYmUgaW4gZ3RrLWRvYyBsaWtlIG90aGVyIGd0ay1kb2Mgc3R1ZmYKLS0gcmVvcmRlcmVkIFNQRUMgZmlsZQotCi0qIE1vbiBBcHIgMjkgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLS0gbW92ZWQgaHRtbCBkb2NzIHRvIGd0ay1kb2Mgc3RhbmRhcmQgZGlyZWN0b3J5Ci0KLSogVHVlIE1hciA1IDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0tIG1vdmUgdmVyc2lvbiBkZWZpbmVzIG9mIGdsaWIyIGFuZCBsaWJ4bWwyIHRvIGNvbmZpZ3VyZS5hYwotLSBhZGQgQnVpbGRSZXF1aXJlcyBmb3IgdGhlc2UgdHdvIGxpYnMKLQotKiBTdW4gTWFyIDMgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLS0gcHV0IGh0bWwgZG9jcyBpbiBjYW5vbmljYWwgcGxhY2UsIGF2b2lkaW5nICVkb2MgZXJhc3VyZQotLSBhZGRlZCBkZXZoZWxwIHN1cHBvcnQsIGN1cnJlbnQgaW5zdGFsbCBvZiBpdCBpcyBoYWNraXNoCi0KLSogU2F0IE1hciAyIDIwMDIgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBBZGRlZCBkb2N1bWVudGF0aW9uIHRvIGJ1aWxkCi0KLSogTW9uIEZlYiAxMSAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotLSBhZGRlZCBsaWJnc3RiYXNpY3NjaGVkdWxlcgotLSByZW5hbWVkIGxpYmdzdCB0byBsaWJnc3RyZWFtZXIKLQotKiBGcmkgSmFuIDA0IDIwMDIgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBBZGRlZCBjb25maWdkaXIgcGFyYW1ldGVyIGFzIGl0IHNlZW1zIHRoZSBjb25maWdkaXIgZ2V0cyB3ZWlyZCBvdGhlcndpc2UKLQotKiBUaHUgSmFuIDAzIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0tIHNwbGl0IG9mZiBnc3RyZWFtZXItZWRpdG9yIGZyb20gY29yZQotLSByZW1vdmVkIGdzdHJlYW1lci1nbm9tZS1hcHBzCi0KLSogU2F0IERlYyAyOSAyMDAxIFJvZG5leSBEYXdlcyA8ZG9iZXlAZnJlZS5mcj4KLS0gQ2xlYW5lZCB1cCB0aGUgc3BlYyBmaWxlIGZvciB0aGUgZ3N0cmVhbWVyIGNvcmUvcGx1Zy1pbnMgc3BsaXQKLS0gSW1wcm92ZSBzcGVjIGZpbGUKLQotKiBTYXQgRGVjIDE1IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBTcGxpdCBvZiBtb3JlIHBsdWdpbnMgZnJvbSB0aGUgY29yZSBhbmQgcHV0IHRoZW0gaW50byB0aGVpciBvd24gbW9kdWxlcwotLSBJbmNsdWRlcyBjb2xvcnNwYWNlLCB4ZnJlZSBhbmQgd2F2Ci0tIEltcHJvdmVkIHBhY2thZ2UgUmVxdWlyZSBsaW5lcwotLSBBZGRlZCBtcDNlbmNvZGUgKGxhbWUgYmFzZWQpIHRvIHRoZSBTUEVDCi0KLSogV2VkIERlYyAxMiAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLS0gVGhvbWFzIG1lcmdlZCBtcGVnIHBsdWdpbnMgaW50byBvbmUKLSogU2F0IERlYyAwOCAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLS0gTW9yZSBtaW5vciBjbGVhbnVwcyBpbmNsdWRpbmcgc29tZSBmaXhlZCBkZXNjcmlwdGlvbnMgZnJvbSBBbmRyZXcgTWl0Y2hlbGwKLQotKiBGcmkgRGVjIDA3IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBBZGRlZCBsb2dnaW5nIHRvIHRoZSBtYWtlIHN0YXRlbWVudAotCi0qIFdlZCBEZWMgMDUgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0tIFVwZGF0ZWQgaW4gcHJlcGFyYXRpb24gZm9yIDAuMy4wIHJlbGVhc2UKLQotKiBGcmkgSnVuIDI5IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBVcGRhdGVkIGZvciAwLjIuMSByZWxlYXNlCi0tIFNwbGl0IG91dCB0aGUgR1VJIHBhY2thZ2VzIGludG8gdGhlaXIgb3duIFJQTQotLSBhZGRlZCBuZXcgcGx1Z2lucyAoRkxBQywgZmVzdGl2YWwsIHF1aWNrdGltZSBldGMuKQotCi0qIFNhdCBKdW4gMDkgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0tIFZpc3VhbGlzYXRpb24gcGx1Z2lucyBidW5kbGVkIG91dCB0b2doZXRlcgotLSBNb3ZlZCBmaWxlcyBzZWN0aW9ucyB1cCBjbG9zZSB0byB0aGVpciByZXNwZWN0aXZlIGRlc2NyaXB0aW9ucwotCi0qIFNhdCBKdW4gMDIgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0tIFNwbGl0IHRoZSBwYWNrYWdlIGludG8gc2VwYXJhdGUgUlBNUywgCi0gIHB1dHRpbmcgbW9zdCBwbHVnaW5zIG91dCBieSB0aGVtc2VsdmVzLgotCi0qIEZyaSBKdW4gMDEgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0tIFVwZGF0ZWQgd2l0aCBjaGFuZ2Ugc3VnZ2VzdGlvbnMgZnJvbSBEZW5uaXMgQmpvcmtsdW5kCi0KLSogVHVlIEphbiAwOSAyMDAxIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0tIHVwZGF0ZWQgdG8gYnVpbGQgLWRldmVsIHBhY2thZ2UgYXMgd2VsbAotCi0qIFN1biBKYW4gMzAgMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotLSBmaXJzdCBkcmFmdCBvZiBzcGVjIGZpbGUKLQpkaWZmIC0tZ2l0IGEvZ3N0cmVhbWVyLnNwZWMuaW4gYi9nc3RyZWFtZXIuc3BlYy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3ODdmMi4uMDAwMDAwMAotLS0gYS9nc3RyZWFtZXIuc3BlYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDUxNiArMCwwIEBACi0lZGVmaW5lCQlnc3RyZWFtZXIJZ3N0cmVhbWVyMQotJWRlZmluZQkJbWFqb3JtaW5vcglAR1NUX0FQSV9WRVJTSU9OQAotCi0lZGVmaW5lIAlfZ2xpYjIJCUBHTElCX1JFUUAKLQotTmFtZTogCQkle2dzdHJlYW1lcn0KLVZlcnNpb246IAlAVkVSU0lPTkAKLVJlbGVhc2U6IAlAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1TdW1tYXJ5OiAJR1N0cmVhbWVyIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmsgcnVudGltZQotCi1Hcm91cDogCQlBcHBsaWNhdGlvbnMvTXVsdGltZWRpYQotTGljZW5zZTogCUxHUEwKLVVSTDoJCWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLwotU291cmNlOiAJaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdHJlYW1lci9nc3RyZWFtZXItJXt2ZXJzaW9ufS50YXIueHoKLUJ1aWxkUm9vdDogICAgICAle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfS1yb290LSUoJXtfX2lkX3V9IC1uKQotCi1CdWlsZFJlcXVpcmVzOiAJZ2xpYjItZGV2ZWwgPj0gJXtfZ2xpYjJ9Ci1CdWlsZFJlcXVpcmVzOiAJYmlzb24KLUJ1aWxkUmVxdWlyZXM6IAlmbGV4Ci1CdWlsZFJlcXVpcmVzOiAJbTQKLUJ1aWxkUmVxdWlyZXM6IAljaGVjay1kZXZlbAotQnVpbGRSZXF1aXJlczogCWd0ay1kb2MgPj0gMS4zCi1CdWlsZFJlcXVpcmVzOglnZXR0ZXh0Ci0KLSMgYmVjYXVzZSBBTV9QUk9HX0xJQlRPT0wgd2FzIHVzZWQgaW4gY29uZmlndXJlLmFjCi1CdWlsZFJlcXVpcmVzOglnY2MtYysrCi0KLSMjIyBkb2N1bWVudGF0aW9uIHJlcXVpcmVtZW50cwotQnVpbGRSZXF1aXJlczogIHB5dGhvbjIKLUJ1aWxkUmVxdWlyZXM6ICBvcGVuamFkZQotQnVpbGRSZXF1aXJlczogIGphZGV0ZXgKLUJ1aWxkUmVxdWlyZXM6CWxpYnhzbHQKLUJ1aWxkUmVxdWlyZXM6ICBkb2Nib29rLXN0eWxlLWRzc3NsCi1CdWlsZFJlcXVpcmVzOiAgZG9jYm9vay1zdHlsZS14c2wKLUJ1aWxkUmVxdWlyZXM6ICBkb2Nib29rLXV0aWxzCi1CdWlsZFJlcXVpcmVzOiAgbmV0cGJtLXByb2dzCi1CdWlsZFJlcXVpcmVzOiAgdGV0ZXgtZHZpcHMKLUJ1aWxkUmVxdWlyZXM6ICBnaG9zdHNjcmlwdAotCi0lZGVzY3JpcHRpb24KLUdTdHJlYW1lciBpcyBhIHN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmssIGJhc2VkIG9uIGdyYXBocyBvZiBmaWx0ZXJzIHdoaWNoCi1vcGVyYXRlIG9uIG1lZGlhIGRhdGEuIEFwcGxpY2F0aW9ucyB1c2luZyB0aGlzIGxpYnJhcnkgY2FuIGRvIGFueXRoaW5nCi1mcm9tIHJlYWwtdGltZSBzb3VuZCBwcm9jZXNzaW5nIHRvIHBsYXlpbmcgdmlkZW9zLCBhbmQganVzdCBhYm91dCBhbnl0aGluZwotZWxzZSBtZWRpYS1yZWxhdGVkLiAgSXRzIHBsdWdpbi1iYXNlZCBhcmNoaXRlY3R1cmUgbWVhbnMgdGhhdCBuZXcgZGF0YQotdHlwZXMgb3IgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMgY2FuIGJlIGFkZGVkIHNpbXBseSBieSBpbnN0YWxsaW5nIG5ldyAKLXBsdWdpbnMuCi0KLSVwYWNrYWdlIGRldmVsCi1TdW1tYXJ5OiAJTGlicmFyaWVzL2luY2x1ZGUgZmlsZXMgZm9yIEdTdHJlYW1lciBzdHJlYW1pbmcgbWVkaWEgZnJhbWV3b3JrCi1Hcm91cDogCQlEZXZlbG9wbWVudC9MaWJyYXJpZXMKLQotUmVxdWlyZXM6IAkle25hbWV9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9Ci1SZXF1aXJlczogCWdsaWIyLWRldmVsID49ICV7X2dsaWIyfQotUmVxdWlyZXM6CWNoZWNrLWRldmVsCi0KLSVkZXNjcmlwdGlvbiBkZXZlbAotR1N0cmVhbWVyIGlzIGEgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yaywgYmFzZWQgb24gZ3JhcGhzIG9mIGZpbHRlcnMgd2hpY2gKLW9wZXJhdGUgb24gbWVkaWEgZGF0YS4gQXBwbGljYXRpb25zIHVzaW5nIHRoaXMgbGlicmFyeSBjYW4gZG8gYW55dGhpbmcKLWZyb20gcmVhbC10aW1lIHNvdW5kIHByb2Nlc3NpbmcgdG8gcGxheWluZyB2aWRlb3MsIGFuZCBqdXN0IGFib3V0IGFueXRoaW5nCi1lbHNlIG1lZGlhLXJlbGF0ZWQuICBJdHMgcGx1Z2luLWJhc2VkIGFyY2hpdGVjdHVyZSBtZWFucyB0aGF0IG5ldyBkYXRhCi10eXBlcyBvciBwcm9jZXNzaW5nIGNhcGFiaWxpdGllcyBjYW4gYmUgYWRkZWQgc2ltcGx5IGJ5IGluc3RhbGxpbmcgbmV3ICAgCi1wbHVnaW5zLgotCi1UaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIGxpYnJhcmllcyBhbmQgaW5jbHVkZXMgZmlsZXMgbmVjZXNzYXJ5IHRvIGRldmVsb3AKLWFwcGxpY2F0aW9ucyBhbmQgcGx1Z2lucyBmb3IgR1N0cmVhbWVyLCBhcyB3ZWxsIGFzIGdlbmVyYWwgYW5kIEFQSQotZG9jdW1lbnRhdGlvbi4KLQotJXByZXAKLSVzZXR1cCAtcSAtbiBnc3RyZWFtZXItJXt2ZXJzaW9ufQotCi0lYnVpbGQKLSMgMC4xMC4wOiBtYW51YWxzIGRvIG5vdCBidWlsZCBkdWUgdG8gYW4gb3BlbmphZGUgZXJyb3I7IGRpc2FibGUgZm9yIG5vdwotJWNvbmZpZ3VyZSBcCi0gIC0td2l0aC1wYWNrYWdlLW5hbWU9J2dzdHJlYW1lciBwYWNrYWdlJyBcCi0gIC0td2l0aC1wYWNrYWdlLW9yaWdpbj0naHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcnIFwKLSAgLS1lbmFibGUtZGVidWcgXAotICAtLWVuYWJsZS1ndGstZG9jIFwKLSAgLS1lbmFibGUtZG9jYm9vayBcCi0gIC0tZW5hYmxlLWludHJvc3BlY3Rpb249eWVzCi0KLSNtYWtlICV7P19zbXBfbWZsYWdzfQotIyBGSVhNRTogZG9jcyBidWlsZGluZyBkb2Vzbid0IHdvcmsgd2l0aCBzbXAgeWV0Ci1tYWtlCi0KLSVpbnN0YWxsICAKLXJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKLQotIyBJbnN0YWxsIGRvYyB0ZW1wb3JhcmlseSBpbiBvcmRlciB0byBiZSBpbmNsdWRlZCBsYXRlciBieSBycG0KLW1ha2UgaW5zdGFsbCBERVNURElSPSRSUE1fQlVJTERfUk9PVAotCi0lZmluZF9sYW5nIGdzdHJlYW1lci0le21ham9ybWlub3J9Ci0jIENsZWFuIG91dCBmaWxlcyB0aGF0IHNob3VsZCBub3QgYmUgcGFydCBvZiB0aGUgcnBtLiAKLW1rZGlyIC1wICRSUE1fQlVJTERfUk9PVCV7X2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2dzdHJlYW1lci0le21ham9ybWlub3J9Ci1ybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9LyoubGEKLXJtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vKi5hCi1ybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9LyouYQotcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8qLmxhCi0jIENyZWF0ZSBlbXB0eSBjYWNoZSBkaXJlY3RvcnkKLW1rZGlyIC1wICRSUE1fQlVJTERfUk9PVCV7X2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2dzdHJlYW1lci0le21ham9ybWlub3J9Ci0KLSVjbGVhbgotcm0gLXJmICRSUE1fQlVJTERfUk9PVAotCi0lcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZwotCi0lcG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCi0KLSVmaWxlcyAtZiBnc3RyZWFtZXItJXttYWpvcm1pbm9yfS5sYW5nCi0lZGVmYXR0cigtLCByb290LCByb290LCAtKQotJWRvYyBBVVRIT1JTIENPUFlJTkcgTkVXUyBSRUFETUUgUkVMRUFTRSBUT0RPCi0le19saWJkaXJ9L2xpYmdzdHJlYW1lci0le21ham9ybWlub3J9LnNvLioKLSV7X2xpYmRpcn0vbGliZ3N0YmFzZS0le21ham9ybWlub3J9LnNvLioKLSV7X2xpYmRpcn0vbGliZ3N0Y29udHJvbGxlci0le21ham9ybWlub3J9LnNvLioKLSV7X2xpYmRpcn0vbGliZ3N0bmV0LSV7bWFqb3JtaW5vcn0uc28uKgotCi0lZGlyICV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Y29yZWVsZW1lbnRzLnNvCi0KLSV7X2JpbmRpcn0vZ3N0LWluc3BlY3QtJXttYWpvcm1pbm9yfQotJXtfYmluZGlyfS9nc3QtbGF1bmNoLSV7bWFqb3JtaW5vcn0KLSV7X2JpbmRpcn0vZ3N0LXR5cGVmaW5kLSV7bWFqb3JtaW5vcn0KLSV7X2xpYmV4ZWNkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC1wbHVnaW4tc2Nhbm5lcgotJWRvYyAle19tYW5kaXJ9L21hbjEvZ3N0LWluc3BlY3QtJXttYWpvcm1pbm9yfS4qCi0lZG9jICV7X21hbmRpcn0vbWFuMS9nc3QtbGF1bmNoLSV7bWFqb3JtaW5vcn0uKgotJWRvYyAle19tYW5kaXJ9L21hbjEvZ3N0LXR5cGVmaW5kLSV7bWFqb3JtaW5vcn0uKgotJWRvYyAle19kYXRhZGlyfS9kb2MvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbWFudWFsCi0lZG9jICV7X2RhdGFkaXJ9L2RvYy9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9wd2cKLSVkb2MgJXtfZGF0YWRpcn0vZG9jL2dzdHJlYW1lci0le21ham9ybWlub3J9L2ZhcS8KLSV7X2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC9Hc3QtJXttYWpvcm1pbm9yfS50eXBlbGliCi0le19saWJkaXJ9L2dpcmVwb3NpdG9yeS0xLjAvR3N0QmFzZS0le21ham9ybWlub3J9LnR5cGVsaWIKLSV7X2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC9Hc3RDaGVjay0le21ham9ybWlub3J9LnR5cGVsaWIKLSV7X2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMC9Hc3RDb250cm9sbGVyLSV7bWFqb3JtaW5vcn0udHlwZWxpYgotJXtfbGliZGlyfS9naXJlcG9zaXRvcnktMS4wL0dzdE5ldC0le21ham9ybWlub3J9LnR5cGVsaWIKLSV7X2RhdGFkaXJ9L2dpci0xLjAvR3N0LSV7bWFqb3JtaW5vcn0uZ2lyCi0le19kYXRhZGlyfS9naXItMS4wL0dzdEJhc2UtJXttYWpvcm1pbm9yfS5naXIKLSV7X2RhdGFkaXJ9L2dpci0xLjAvR3N0Q2hlY2stJXttYWpvcm1pbm9yfS5naXIKLSV7X2RhdGFkaXJ9L2dpci0xLjAvR3N0Q29udHJvbGxlci0le21ham9ybWlub3J9LmdpcgotJXtfZGF0YWRpcn0vZ2lyLTEuMC9Hc3ROZXQtJXttYWpvcm1pbm9yfS5naXIKLQotJWZpbGVzIGRldmVsCi0lZGVmYXR0cigtLCByb290LCByb290LCAtKQotJWRpciAle19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfQotJWRpciAle19pbmNsdWRlZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9nc3QKLSV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC8qLmgKLQotJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0L2Jhc2UKLSV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC9jaGVjawotJXtfaW5jbHVkZWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vZ3N0L2NvbnRyb2xsZXIKLSV7X2luY2x1ZGVkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2dzdC9uZXQKLQotJXtfbGliZGlyfS9saWJnc3RyZWFtZXItJXttYWpvcm1pbm9yfS5zbwotJXtfbGliZGlyfS9saWJnc3RiYXNlLSV7bWFqb3JtaW5vcn0uc28KLSV7X2xpYmRpcn0vbGliZ3N0Y2hlY2stJXttYWpvcm1pbm9yfS5zbyoKLSV7X2xpYmRpcn0vbGliZ3N0Y29udHJvbGxlci0le21ham9ybWlub3J9LnNvCi0le19saWJkaXJ9L2xpYmdzdG5ldC0le21ham9ybWlub3J9LnNvCi0KLSV7X2RhdGFkaXJ9L2FjbG9jYWwvZ3N0LWVsZW1lbnQtY2hlY2stJXttYWpvcm1pbm9yfS5tNAotJXtfbGliZGlyfS9wa2djb25maWcvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0ucGMKLSV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLSV7bWFqb3JtaW5vcn0ucGMKLSV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLSV7bWFqb3JtaW5vcn0ucGMKLSV7X2xpYmRpcn0vcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay0le21ham9ybWlub3J9LnBjCi0le19saWJkaXJ9L3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LSV7bWFqb3JtaW5vcn0ucGMKLQotJWRvYyAle19kYXRhZGlyfS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vKgotJWRvYyAle19kYXRhZGlyfS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtJXttYWpvcm1pbm9yfS8qCi0lZG9jICV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy0le21ham9ybWlub3J9LyoKLQotJWNoYW5nZWxvZwotKiBTYXQgQXVnIDA2IDIwMTEgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSBVc2UgbWFqb3JtaW5vciBjb3JyZWN0bHkgZm9yIC5naXIgZmlsZXMKLS0gUmVtb3ZlIGdzdHJlYW1lci10b29scyBjb21wbGV0ZWx5IHNpbmNlIHRoZSB1bnZlcnNpb25lZCB0b29scyBoYXZlIGJlZW4KLSAgcmVtb3ZlZAotLSBSZW5hbWUgcGFja2FnZSB0byBnc3RyZWFtZXIwMTEgdG8gYmUgcGFyYWxsZWwtaW5zdGFsbGFibGUKLQotKiBUaHUgQXByIDMgMjAwOCBDaHJpc3RpYW4gU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlciBhdCBjb2xsYWJvcmEgY28gdWs+Ci0tIFVwZGF0ZSBzcGVjIGZpbGUgdG8gbWFrZSBpbmNsdXNpb24gb2YgYWxsIGRvY3MgZXhwbGljaXQKLQotKiBUdWUgRGVjIDExIDIwMDcgQ2hyaXN0aWFuIFNjaGFsbGVyIDxjaHJpc3RpYW4uc2NoYWxsZXJAY29sbGFib3JhLmNvLnVrPiAKLS0gSW1wb3J0IGZyb20gRmVkb3JhIHBhY2thZ2UKLQotKiBGcmkgTm92IDE2IDIwMDcgLSBCYXN0aWVuIE5vY2VyYSA8Ym5vY2VyYUByZWRoYXQuY29tPiAtIDAuMTAuMTUtMQotLSBVcGRhdGUgdG8gMC4xMC4xNQotCi0qIE1vbiBPY3QgIDEgMjAwNyBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjE0LTQKLS0gQWRkIG1pc3NpbmcgUmVxdWlyZXMgKCMzMTI2NzEpCi0KLSogVHVlIEF1ZyAxNCAyMDA3IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuMTQtMwotLSBSZXF1aXJlIGNoZWNrLWRldmVsICgjMjUxOTU2KQotCi0qIFNhdCBBdWcgMDQgMjAwNyAtIEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IC0gMC4xMC4xNC0xCi0tIFVwZGF0ZSB0byAwLjEwLjE0Ci0KLSogVHVlIEp1biAwNSAyMDA3IC0gQmFzdGllbiBOb2NlcmEgPGJub2NlcmFAcmVkaGF0LmNvbT4gLSAwLjEwLjEzLTIKLS0gUmVtb3ZlIHVwc3RyZWFtZWQgZG9jcyBwYXRjaAotCi0qIFR1ZSBKdW4gMDUgMjAwNyAtIEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IC0gMC4xMC4xMy0xCi0tIFVwZGF0ZSB0byAwLjEwLjEzCi0KLSogVGh1IE1hciAwOCAyMDA3IC0gQmFzdGllbiBOb2NlcmEgPGJub2NlcmFAcmVkaGF0LmNvbT4gLSAwLjEwLjEyLTEKLS0gVXBkYXRlIHRvIDAuMTAuMTIKLQotKiBUdWUgRmViIDEzIDIwMDcgLSBCYXN0aWVuIE5vY2VyYSA8Ym5vY2VyYUByZWRoYXQuY29tPiAtIDAuMTAuMTEtMgotLSBSZW1vdmUgUmVxdWlyZXMgb24gcGFja2FnZXMgdGhhdCBCdWlsZFJlcXVpcmUgdXMKLQotKiBUdWUgRGVjIDEyIDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC4xMS0xCi0tIFVwZGF0ZSB0byAwLjEwLjExCi0KLSogRnJpIE9jdCAyNyAyMDA2IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuMTAtMgotLSBDbGVhbnVwcwotLSBBdHRlbXB0IHRvIGZpeCBtdWx0aWxpYiBjb25mbGljdHMKLQotKiBNb24gT2N0IDIzIDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC4xMC0xCi0tIFVwZGF0ZSB0byAwLjEwLjEwCi0KLSogVGh1IEp1bCAyNyAyMDA2IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuOS0yCi0tIERpc2FibGUgZ3RrLWRvYyB0byBmaXggbXVsdGlsaWIgY29uZmxpY3RzCi0KLSogVGh1IEp1bCAyMCAyMDA2IEpvaG4gKEo1KSBQYWxtaWVyaSA8am9obnBAcmVkaGF0LmNvbT4gLSAwLjEwLjktMQotLSBVcGRhdGUgdG8gbmV3IHVwc3RyZWFtIHZlcnNpb24KLQotKiBXZWQgSnVsIDE5IDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC44LTQKLS0gUmUtYWRkIHRoZSBnc3RyZWFtZXItcGx1Z2lucy1nb29kIGRlcGVuZGVuY3kKLQotKiBXZWQgSnVsIDE5IDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC44LTMuMgotLSBUZW1wb3JhcmlseSBicmVhayB0aGUgZGVwZW5kZW5jeSBjeWNsZSB3aXRoIGdzdGVhbWVyLXBsdWdpbnMtZ29vZAotCi0qIFdlZCBKdWwgMTIgMjAwNiBKZXNzZSBLZWF0aW5nIDxqa2VhdGluZ0ByZWRoYXQuY29tPiAtIDAuMTAuOC0zLjEKLS0gcmVidWlsZAotCi0qIFdlZCBKdW4gMjggMjAwNiBLYXJzdGVuIEhvcHAgPGthcnN0ZW5AcmVkaGF0LmRlPiAwLjEwLjgtMwotLSByZW1vdmUgUlBBVEggcG9pbnRpbmcgdG8gUlBNX0JVSUxEX1JPT1QgKCMxOTY4NzApCi0KLSogVHVlIEp1biAxMyAyMDA2IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuMTAuOC0yCi0tIFJlYnVpbGQKLQotKiBUdWUgSnVuIDEzIDIwMDYgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC4xMC44LTEKLS0gVXBkYXRlIHRvIDAuMTAuOAotCi0qIE1vbiBNYXkgMjIgMjAwNiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAwLjEwLjYtMQotLSBVcGRhdGUgdG8gMC4xMC42Ci0KLSogVHVlIEZlYiAxNCAyMDA2IFJpayB2YW4gUmllbCA8cmllbEByZWRoYXQuY29tPiAtIDAuMTAtMy0zCi0tIE9ic29sZXRlIGdzdHJlYW1lci1wbHVnaW5zICgjMTgxMjk2KQotCi0qIE1vbiBGZWIgMTMgMjAwNiBDaHJpc3RvcGhlciBBaWxsb24gPGNhaWxsb25AcmVkaGF0LmNvbT4gLSAwLjEwLjMtMgotLSBSZWJ1aWxkCi0KLSogRnJpIEZlYiAxMCAyMDA2IENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAtIDAuMTAuMy0xCi0tIFVwZGF0ZSB0byAwLjEwLjMKLQotKiBUdWUgRmViIDA3IDIwMDYgSmVzc2UgS2VhdGluZyA8amtlYXRpbmdAcmVkaGF0LmNvbT4gLSAwLjEwLjItMS4xCi0tIHJlYnVpbHQgZm9yIG5ldyBnY2M0LjEgc25hcHNob3QgYW5kIGdsaWJjIGNoYW5nZXMKLQotKiBXZWQgSmFuIDE4IDIwMDYgSm9obiAoSjUpIFBhbG1pZXJpIDxqb2hucEByZWRoYXQuY29tPiAtIDAuMTAuMi0xCi0tIFVwZ3JhZGUgdG8gMC4xMC4yCi0KLSogRnJpIEphbiAwNiAyMDA2IEpvaG4gKEo1KSBQYWxtaWVyaSA8am9obnBAcmVkaGF0LmNvbT4gLSAwLjEwLjEtMQotLSBOZXcgdXBzdHJlYW0gdmVyc2lvbgotCi0qIEZyaSBEZWMgMTYgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuMTAuMC0xCi0tIHJlYnVpbHQgZm9yIEZlZG9yYSBDb3JlIERldmVsb3BtZW50Ci0KLSogV2VkIERlYyAxNCAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC4xMC4wLTAuZ3N0LjIKLS0gcmVidWlsdCBhZ2FpbnN0IG5ld2VyIEdMaWIgYW5kIGZyaWVuZHMKLQotKiBNb24gRGVjIDA1IDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjEwLjAtMC5nc3QuMQotLSBuZXcgcmVsZWFzZQotCi0qIFRodSBEZWMgMDEgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOS43LTAuZ3N0LjEKLS0gbmV3IHJlbGVhc2UsIHdpdGggMC4xMCBtYWpvcm1pbm9yCi0tIHJlbW92ZWQgY29tcHByZXAgYW5kIGNvbXBsZXRlCi0tIGFkZGVkIHBsdWdpbnMgZG9jcwotLSByZW5hbWVkIGxpYmdzdGNvcmVsZW1lbnRzLCBsaWJnc3Rjb3JlaW5kZXhlcnMKLS0gYWRkZWQgbGliZ3N0bmV0Ci0KLSogU2F0IE5vdiAxMiAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC45LjUtMC5nc3QuMQotLSBuZXcgcmVsZWFzZQotCi0qIE1vbiBPY3QgMjQgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOS40LTAuZ3N0LjEKLS0gbmV3IHJlbGVhc2UKLQotKiBNb24gT2N0IDAzIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjkuMy0wLmdzdC4xCi0tIG5ldyByZWxlYXNlCi0KLSogVGh1IFNlcCAwOCAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC45LjItMC5nc3QuMQotLSBhZGRlZCBsaWJnc3RjaGVjawotLSBuZXcgcmVsZWFzZQotCi0qIFRodSBKdW4gMDkgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOS4xLTAuZ3N0LjEKLS0gZmlyc3QgZGV2ZWxvcG1lbnQgc2VyaWVzIHJlbGVhc2UKLQotKiBUdWUgTWF5IDAzIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguMTAtMC5nc3QuMQotLSBuZXcgcmVsZWFzZQotLSB1cCBnbGliMiB0byAyLjQgYmVjYXVzZSBkaXN0aW5nIG9uIDIuNCBidWlsZHMgbWFyc2hhbGxpbmcgY29kZSBuZWVkaW5nIDIuNAotCi0qIE1vbiBNYXkgMDIgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC45LjItMC5nc3QuMQotLSBuZXcgcHJlcmVsZWFzZQotCi0qIFR1ZSBGZWIgMDggMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC45LTAuZ3N0LjEKLS0gbmV3IHJlbGVhc2UKLS0gc3dpdGNoIGJhY2sgdG8gdGhlIGdzdCB0YWcgc2luY2UgZmVkb3JhLnVzIGlzIGdvbmUKLQotKiBUaHUgRmViIDAzIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguOC4yLTAuZmRyLjEKLS0gbmV3IHByZXJlbGVhc2UKLQotKiBUaHUgRGVjIDIzIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguOC0wLmZkci4xCi0tIG5ldyB1cHN0cmVhbSByZWxlYXNlCi0KLSogRnJpIERlYyAxNyAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjcuMi0wLmZkci4xCi0tIG5ldyBwcmVyZWxlYXNlCi0tIGFkZGVkIGZhaXIgZ3RocmVhZCBzY2hlZHVsZXIKLQotKiBXZWQgT2N0IDA2IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguNy0wLmZkci4xCi0tIHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCi0KLSogVHVlIE9jdCAwNSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjYtMC5mZHIuMQotLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQotCi0qIFN1biBTZXAgMjYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC41LjMtMC5mZHIuMQotLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQotCi0qIFN1biBTZXAgMTIgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC41LjItMC5mZHIuMQotLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQotCi0qIE1vbiBBdWcgMTYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC41LTAuZmRyLjEKLS0gdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UKLQotKiBUaHUgQXVnIDEyIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguNC4yLTAuZmRyLjEKLS0gdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHByZXJlbGVhc2UKLS0gc2V0IHBhY2thZ2UgbmFtZSBhbmQgb3JpZ2luCi0KLSogVHVlIEp1bCAyMCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjQtMC5mZHIuMQotLSB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQotLSB1bmJyZWFrIHRoZSBwb3N0dW4gc2NyaXB0IGJ5IG5vdCByZW1vdmluZyB0aGUgY2FjaGUgZGlyCi0KLSogVHVlIEp1bCAyMCAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjMuMy0wLmZkci4xOiB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcHJlcmVsZWFzZQotCi0qIEZyaSBKdWwgMTYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC4zLjItMC5mZHIuMTogdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHByZXJlbGVhc2UKLQotKiBTYXQgSnVuIDA1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjguMy0wLmZkci4xOiB1cGRhdGUgZm9yIG5ldyBHU3RyZWFtZXIgcmVsZWFzZQotCi0qIEZyaSBKdW4gMDQgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC4yLTAuZmRyLjE6IHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlCi0KLSogVGh1IEFwciAxNSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC44LjEtMC5mZHIuMTogdXBkYXRlIGZvciBuZXcgR1N0cmVhbWVyIHJlbGVhc2UKLQotKiBUaHUgQXByIDE1IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSBhZGQgZW50cnkgc2NoZWR1bGVycywgY2xlYW4gdXAgc2NoZWR1bGVyIGZpbGUgc2VjdGlvbgotCi0qIFR1ZSBNYXIgMTYgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuOC4wLTAuZmRyLjE6IHVwZGF0ZSBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlLCByZW5hbWVkIGJhc2UgdG8gZ3N0cmVhbWVyCi0KLSogVHVlIE1hciAwOSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC43LjYtMC5mZHIuMTogdXBkYXRlZCBmb3IgbmV3IEdTdHJlYW1lciByZWxlYXNlLCB3aXRoIG1hai9taW4gc2V0IHRvIDAuOAotCi0qIE1vbiBNYXIgMDggMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIDAuNy41LTAuZmRyLjM6IGZpeCBwb3N0dW4gc2NyaXB0Ci0KLSogRnJpIE1hciAwNSAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLS0gMC43LjUtMC5mZHIuMjogbmV3IHJlbGVhc2UKLQotKiBXZWQgRmViIDExIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSAwLjcuNC0wLmZkci4xOiBzeW5jaHJvbml6ZSB3aXRoIE1hdHRoaWFzJ3MgcGFja2FnZQotCi0qIFNhdCBGZWIgMDcgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIG1ha2UgdGhlIHBhY2thZ2UgbmFtZSBnc3RyZWFtZXIwNyBzaW5jZSB0aGlzIGlzIGFuIHVuc3RhYmxlIHJlbGVhc2UKLQotKiBXZWQgRmViIDA0IDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSBwdXQgdmVyc2lvbmVkIHRvb2xzIGluc2lkZSBiYXNlIHBhY2thZ2UsIGFuZCBwdXQgdW52ZXJzaW9uZWQgdG9vbHMgaW4gdG9vbHMKLQotKiBNb24gRGVjIDAxIDIwMDMgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSBjaGFuZ2VkIGRvY3VtZW50YXRpb24gYnVpbGRyZXF1aXJlcwotCi0qIFN1biBOb3YgMDkgMjAwMyBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0Bnbm9tZS5vcmc+Ci0tIEZpeCBzcGVjIHRvIGhhbmRsZSBuZXcgYnl0ZXN0cmVhbSBsaWJyYXJ5IAotCi0qIFN1biBBdWcgMTcgMjAwMyBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0tIFJlbW92ZSBkb2NzIGJ1aWxkIGZyb20gUlBNIGFzIHRoZSBidWlsZCBpcyBicm9rZW4KLS0gRml4IHN0dWZmIHNpbmNlIG1vcmUgZmlsZXMgYXJlIHZlcnNpb25lZCBub3cKLS0gUmVtb3ZlIHdpbmdvIHNjaGVkdWxlcnMKLS0gUmVtb3ZlIHB1dGJpdHMgc3R1ZmYKLQotKiBTdW4gTWF5IDE4IDIwMDMgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSBkZXZoZWxwIGZpbGVzIGFyZSBub3cgZ2VuZXJhdGVkIGJ5IGd0ay1kb2MsIGNoYW5nZWQgYWNjb3JkaW5nbHkKLQotKiBTdW4gTWFyIDE2IDIwMDMgQ2hyaXN0aWFuIEYuSy4gU2NoYWxsZXIgPFVyYWV1c0Bnbm9tZS5vcmc+Ci0tIEFkZCBndGhyZWFkIHNjaGVkdWxlcgotCi0qIFNhdCBEZWMgMDcgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0tIGRlZmluZSBtYWpvcm1pbm9yIGFuZCB1c2UgaXQgZXZlcnl3aGVyZQotLSBmdWxsIHBhcmFsbGVsIGluc3RhbGxhYmlsaXR5Ci0KLSogVHVlIE5vdiAwNSAyMDAyIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLS0gQWRkIG9wdHdpbmdvIHNjaGVkdWxlcgotKiBTYXQgT2N0IDEyIDIwMDIgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBVcGRhdGVkIHRvIHdvcmsgYmV0dGVyIHdpdGggZGVmYXVsdCBSSDggcnBtCi0tIEFkZGVkIG1pc3NpbmcgdW5zcGVjZWQgZmlsZXMKLS0gUmVtb3ZlZCAuYSBhbmQgLmxhIGZpbGVzIGZyb20gYnVpbGRyb290Ci0KLSogU2F0IFNlcCAyMSAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotLSBhZGRlZCBnc3QtbWQ1c3VtCi0KLSogVHVlIFNlcCAxNyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotLSBhZGRpbmcgZmxleCB0byBidWlsZHJlcXVpcmVzCi0KLSogRnJpIFNlcCAxMyAyMDAyIENocmlzdGlhbiBGLksuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBGaXhlZCB0aGUgc2NoZWR1bGVycyBhZnRlciB0aGUgcmVuYW1pbmcKLSogU3VuIFNlcCAwOCAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotLSBhZGRlZCB0cmFuc2ZpZyB0byB0aGUgQnVpbGRSZXF1aXJlczoKLQotKiBTYXQgSnVuIDIyIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0tIG1vdmVkIGhlYWRlciBsb2NhdGlvbgotCi0qIE1vbiBKdW4gMTcgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLS0gYWRkZWQgcG9wdAotLSByZW1vdmVkIC5sYQotCi0qIEZyaSBKdW4gMDcgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLS0gYWRkZWQgcmVsZWFzZSBvZiBnc3RyZWFtZXIgdG8gcmVxIG9mIGdzdHJlYW1lci1kZXZlbAotLSBjaGFuZ2VkIGxvY2F0aW9uIG9mIEFQSSBkb2NzIHRvIGJlIGluIGd0ay1kb2MgbGlrZSBvdGhlciBndGstZG9jIHN0dWZmCi0tIHJlb3JkZXJlZCBTUEVDIGZpbGUKLQotKiBNb24gQXByIDI5IDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0tIG1vdmVkIGh0bWwgZG9jcyB0byBndGstZG9jIHN0YW5kYXJkIGRpcmVjdG9yeQotCi0qIFR1ZSBNYXIgNSAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotLSBtb3ZlIHZlcnNpb24gZGVmaW5lcyBvZiBnbGliMiBhbmQgbGlieG1sMiB0byBjb25maWd1cmUuYWMKLS0gYWRkIEJ1aWxkUmVxdWlyZXMgZm9yIHRoZXNlIHR3byBsaWJzCi0KLSogU3VuIE1hciAzIDIwMDIgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0tIHB1dCBodG1sIGRvY3MgaW4gY2Fub25pY2FsIHBsYWNlLCBhdm9pZGluZyAlZG9jIGVyYXN1cmUKLS0gYWRkZWQgZGV2aGVscCBzdXBwb3J0LCBjdXJyZW50IGluc3RhbGwgb2YgaXQgaXMgaGFja2lzaAotCi0qIFNhdCBNYXIgMiAyMDAyIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLS0gQWRkZWQgZG9jdW1lbnRhdGlvbiB0byBidWlsZAotCi0qIE1vbiBGZWIgMTEgMjAwMiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLS0gYWRkZWQgbGliZ3N0YmFzaWNzY2hlZHVsZXIKLS0gcmVuYW1lZCBsaWJnc3QgdG8gbGliZ3N0cmVhbWVyCi0KLSogRnJpIEphbiAwNCAyMDAyIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLS0gQWRkZWQgY29uZmlnZGlyIHBhcmFtZXRlciBhcyBpdCBzZWVtcyB0aGUgY29uZmlnZGlyIGdldHMgd2VpcmQgb3RoZXJ3aXNlCi0KLSogVGh1IEphbiAwMyAyMDAyIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotLSBzcGxpdCBvZmYgZ3N0cmVhbWVyLWVkaXRvciBmcm9tIGNvcmUKLS0gcmVtb3ZlZCBnc3RyZWFtZXItZ25vbWUtYXBwcwotCi0qIFNhdCBEZWMgMjkgMjAwMSBSb2RuZXkgRGF3ZXMgPGRvYmV5QGZyZWUuZnI+Ci0tIENsZWFuZWQgdXAgdGhlIHNwZWMgZmlsZSBmb3IgdGhlIGdzdHJlYW1lciBjb3JlL3BsdWctaW5zIHNwbGl0Ci0tIEltcHJvdmUgc3BlYyBmaWxlCi0KLSogU2F0IERlYyAxNSAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLS0gU3BsaXQgb2YgbW9yZSBwbHVnaW5zIGZyb20gdGhlIGNvcmUgYW5kIHB1dCB0aGVtIGludG8gdGhlaXIgb3duIG1vZHVsZXMKLS0gSW5jbHVkZXMgY29sb3JzcGFjZSwgeGZyZWUgYW5kIHdhdgotLSBJbXByb3ZlZCBwYWNrYWdlIFJlcXVpcmUgbGluZXMKLS0gQWRkZWQgbXAzZW5jb2RlIChsYW1lIGJhc2VkKSB0byB0aGUgU1BFQwotCi0qIFdlZCBEZWMgMTIgMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0tIFRob21hcyBtZXJnZWQgbXBlZyBwbHVnaW5zIGludG8gb25lCi0qIFNhdCBEZWMgMDggMjAwMSBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0tIE1vcmUgbWlub3IgY2xlYW51cHMgaW5jbHVkaW5nIHNvbWUgZml4ZWQgZGVzY3JpcHRpb25zIGZyb20gQW5kcmV3IE1pdGNoZWxsCi0KLSogRnJpIERlYyAwNyAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLS0gQWRkZWQgbG9nZ2luZyB0byB0aGUgbWFrZSBzdGF0ZW1lbnQKLQotKiBXZWQgRGVjIDA1IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBVcGRhdGVkIGluIHByZXBhcmF0aW9uIGZvciAwLjMuMCByZWxlYXNlCi0KLSogRnJpIEp1biAyOSAyMDAxIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLS0gVXBkYXRlZCBmb3IgMC4yLjEgcmVsZWFzZQotLSBTcGxpdCBvdXQgdGhlIEdVSSBwYWNrYWdlcyBpbnRvIHRoZWlyIG93biBSUE0KLS0gYWRkZWQgbmV3IHBsdWdpbnMgKEZMQUMsIGZlc3RpdmFsLCBxdWlja3RpbWUgZXRjLikKLQotKiBTYXQgSnVuIDA5IDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBWaXN1YWxpc2F0aW9uIHBsdWdpbnMgYnVuZGxlZCBvdXQgdG9naGV0ZXIKLS0gTW92ZWQgZmlsZXMgc2VjdGlvbnMgdXAgY2xvc2UgdG8gdGhlaXIgcmVzcGVjdGl2ZSBkZXNjcmlwdGlvbnMKLQotKiBTYXQgSnVuIDAyIDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBTcGxpdCB0aGUgcGFja2FnZSBpbnRvIHNlcGFyYXRlIFJQTVMsIAotICBwdXR0aW5nIG1vc3QgcGx1Z2lucyBvdXQgYnkgdGhlbXNlbHZlcy4KLQotKiBGcmkgSnVuIDAxIDIwMDEgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAbGludXhyaXNpbmcub3JnPgotLSBVcGRhdGVkIHdpdGggY2hhbmdlIHN1Z2dlc3Rpb25zIGZyb20gRGVubmlzIEJqb3JrbHVuZAotCi0qIFR1ZSBKYW4gMDkgMjAwMSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotLSB1cGRhdGVkIHRvIGJ1aWxkIC1kZXZlbCBwYWNrYWdlIGFzIHdlbGwKLQotKiBTdW4gSmFuIDMwIDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLS0gZmlyc3QgZHJhZnQgb2Ygc3BlYyBmaWxlCi0KZGlmZiAtLWdpdCBhL2luc3RhbGwtc2ggYi9pbnN0YWxsLXNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1OTk5MGExLi4wMDAwMDAwCi0tLSBhL2luc3RhbGwtc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MDggKzAsMCBAQAotIyEvYmluL3NoCi0jIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQotCi1zY3JpcHR2ZXJzaW9uPTIwMTQtMDktMTIuMTI7ICMgVVRDCi0KLSMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcwotIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKLSMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KLSMKLSMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQotIwotIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0jIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bwotIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQotIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKLSMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSMKLSMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0jCi0jIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0jIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0jIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQotIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotIwotIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAotIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KLSMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQotIyB0aXVtLgotIwotIwotIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAotIyAnbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAotIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgotIwotIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCi0jIGZyb20gc2NyYXRjaC4KLQotdGFiPScJJwotbmw9JwotJwotSUZTPSIgJHRhYiRubCIKLQotIyBTZXQgRE9JVFBST0cgdG8gImVjaG8iIHRvIHRlc3QgdGhpcyBzY3JpcHQuCi0KLWRvaXQ9JHtET0lUUFJPRy19Ci1kb2l0X2V4ZWM9JHtkb2l0Oi1leGVjfQotCi0jIFB1dCBpbiBhYnNvbHV0ZSBmaWxlIG5hbWVzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOwotIyBvciB1c2UgZW52aXJvbm1lbnQgdmFycy4KLQotY2hncnBwcm9nPSR7Q0hHUlBQUk9HLWNoZ3JwfQotY2htb2Rwcm9nPSR7Q0hNT0RQUk9HLWNobW9kfQotY2hvd25wcm9nPSR7Q0hPV05QUk9HLWNob3dufQotY21wcHJvZz0ke0NNUFBST0ctY21wfQotY3Bwcm9nPSR7Q1BQUk9HLWNwfQotbWtkaXJwcm9nPSR7TUtESVJQUk9HLW1rZGlyfQotbXZwcm9nPSR7TVZQUk9HLW12fQotcm1wcm9nPSR7Uk1QUk9HLXJtfQotc3RyaXBwcm9nPSR7U1RSSVBQUk9HLXN0cmlwfQotCi1wb3NpeF9ta2Rpcj0KLQotIyBEZXNpcmVkIG1vZGUgb2YgaW5zdGFsbGVkIGZpbGUuCi1tb2RlPTA3NTUKLQotY2hncnBjbWQ9Ci1jaG1vZGNtZD0kY2htb2Rwcm9nCi1jaG93bmNtZD0KLW12Y21kPSRtdnByb2cKLXJtY21kPSIkcm1wcm9nIC1mIgotc3RyaXBjbWQ9Ci0KLXNyYz0KLWRzdD0KLWRpcl9hcmc9Ci1kc3RfYXJnPQotCi1jb3B5X29uX2NoYW5nZT1mYWxzZQotaXNfdGFyZ2V0X2FfZGlyZWN0b3J5PXBvc3NpYmx5Ci0KLXVzYWdlPSJcCi1Vc2FnZTogJDAgW09QVElPTl0uLi4gWy1UXSBTUkNGSUxFIERTVEZJTEUKLSAgIG9yOiAkMCBbT1BUSU9OXS4uLiBTUkNGSUxFUy4uLiBESVJFQ1RPUlkKLSAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtdCBESVJFQ1RPUlkgU1JDRklMRVMuLi4KLSAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtZCBESVJFQ1RPUklFUy4uLgotCi1JbiB0aGUgMXN0IGZvcm0sIGNvcHkgU1JDRklMRSB0byBEU1RGSUxFLgotSW4gdGhlIDJuZCBhbmQgM3JkLCBjb3B5IGFsbCBTUkNGSUxFUyB0byBESVJFQ1RPUlkuCi1JbiB0aGUgNHRoLCBjcmVhdGUgRElSRUNUT1JJRVMuCi0KLU9wdGlvbnM6Ci0gICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCi0gICAgIC0tdmVyc2lvbiAgZGlzcGxheSB2ZXJzaW9uIGluZm8gYW5kIGV4aXQuCi0KLSAgLWMgICAgICAgICAgICAoaWdub3JlZCkKLSAgLUMgICAgICAgICAgICBpbnN0YWxsIG9ubHkgaWYgZGlmZmVyZW50IChwcmVzZXJ2ZSB0aGUgbGFzdCBkYXRhIG1vZGlmaWNhdGlvbiB0aW1lKQotICAtZCAgICAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCi0gIC1nIEdST1VQICAgICAgJGNoZ3JwcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gR1JPVVAuCi0gIC1tIE1PREUgICAgICAgJGNobW9kcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gTU9ERS4KLSAgLW8gVVNFUiAgICAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgotICAtcyAgICAgICAgICAgICRzdHJpcHByb2cgaW5zdGFsbGVkIGZpbGVzLgotICAtdCBESVJFQ1RPUlkgIGluc3RhbGwgaW50byBESVJFQ1RPUlkuCi0gIC1UICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCi0KLUVudmlyb25tZW50IHZhcmlhYmxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tYW5kczoKLSAgQ0hHUlBQUk9HIENITU9EUFJPRyBDSE9XTlBST0cgQ01QUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRwotICBSTVBST0cgU1RSSVBQUk9HCi0iCi0KLXdoaWxlIHRlc3QgJCMgLW5lIDA7IGRvCi0gIGNhc2UgJDEgaW4KLSAgICAtYykgOzsKLQotICAgIC1DKSBjb3B5X29uX2NoYW5nZT10cnVlOzsKLQotICAgIC1kKSBkaXJfYXJnPXRydWU7OwotCi0gICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgotICAgICAgICBzaGlmdDs7Ci0KLSAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OwotCi0gICAgLW0pIG1vZGU9JDIKLSAgICAgICAgY2FzZSAkbW9kZSBpbgotICAgICAgICAgIConICcqIHwgKiIkdGFiIiogfCAqIiRubCIqIHwgKicqJyogfCAqJz8nKiB8IConWycqKQotICAgICAgICAgICAgZWNobyAiJDA6IGludmFsaWQgbW9kZTogJG1vZGUiID4mMgotICAgICAgICAgICAgZXhpdCAxOzsKLSAgICAgICAgZXNhYwotICAgICAgICBzaGlmdDs7Ci0KLSAgICAtbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCi0gICAgICAgIHNoaWZ0OzsKLQotICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKLQotICAgIC10KQotICAgICAgICBpc190YXJnZXRfYV9kaXJlY3Rvcnk9YWx3YXlzCi0gICAgICAgIGRzdF9hcmc9JDIKLSAgICAgICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KLSAgICAgICAgY2FzZSAkZHN0X2FyZyBpbgotICAgICAgICAgIC0qIHwgWz1cKFwpIV0pIGRzdF9hcmc9Li8kZHN0X2FyZzs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgc2hpZnQ7OwotCi0gICAgLVQpIGlzX3RhcmdldF9hX2RpcmVjdG9yeT1uZXZlcjs7Ci0KLSAgICAtLXZlcnNpb24pIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7Ci0KLSAgICAtLSkgc2hpZnQKLSAgICAgICAgYnJlYWs7OwotCi0gICAgLSopIGVjaG8gIiQwOiBpbnZhbGlkIG9wdGlvbjogJDEiID4mMgotICAgICAgICBleGl0IDE7OwotCi0gICAgKikgIGJyZWFrOzsKLSAgZXNhYwotICBzaGlmdAotZG9uZQotCi0jIFdlIGFsbG93IHRoZSB1c2Ugb2Ygb3B0aW9ucyAtZCBhbmQgLVQgdG9nZXRoZXIsIGJ5IG1ha2luZyAtZAotIyB0YWtlIHRoZSBwcmVjZWRlbmNlOyB0aGlzIGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggR05VIGluc3RhbGwuCi0KLWlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkZHN0X2FyZyI7IHRoZW4KLSAgICBlY2hvICIkMDogdGFyZ2V0IGRpcmVjdG9yeSBub3QgYWxsb3dlZCB3aGVuIGluc3RhbGxpbmcgYSBkaXJlY3RvcnkuIiA+JjIKLSAgICBleGl0IDEKLSAgZmkKLWZpCi0KLWlmIHRlc3QgJCMgLW5lIDAgJiYgdGVzdCAteiAiJGRpcl9hcmckZHN0X2FyZyI7IHRoZW4KLSAgIyBXaGVuIC1kIGlzIHVzZWQsIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBkaXJlY3RvcmllcyB0byBjcmVhdGUuCi0gICMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCi0gICMgT3RoZXJ3aXNlLCB0aGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgZGVzdGluYXRpb24uICBSZW1vdmUgaXQgZnJvbSAkQC4KLSAgZm9yIGFyZwotICBkbwotICAgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgotICAgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCi0gICAgICBzZXQgZm5vcmQgIiRAIiAiJGRzdF9hcmciCi0gICAgICBzaGlmdCAjIGZub3JkCi0gICAgZmkKLSAgICBzaGlmdCAjIGFyZwotICAgIGRzdF9hcmc9JGFyZwotICAgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCi0gICAgY2FzZSAkZHN0X2FyZyBpbgotICAgICAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKLSAgICBlc2FjCi0gIGRvbmUKLWZpCi0KLWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KLSAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCi0gICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCi0gICAgZXhpdCAxCi0gIGZpCi0gICMgSXQncyBPSyB0byBjYWxsICdpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgotICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgotICBleGl0IDAKLWZpCi0KLWlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgotICBpZiB0ZXN0ICQjIC1ndCAxIHx8IHRlc3QgIiRpc190YXJnZXRfYV9kaXJlY3RvcnkiID0gYWx3YXlzOyB0aGVuCi0gICAgaWYgdGVzdCAhIC1kICIkZHN0X2FyZyI7IHRoZW4KLSAgICAgIGVjaG8gIiQwOiAkZHN0X2FyZzogSXMgbm90IGEgZGlyZWN0b3J5LiIgPiYyCi0gICAgICBleGl0IDEKLSAgICBmaQotICBmaQotZmkKLQotaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCi0gIGRvX2V4aXQ9JyhleGl0ICRyZXQpOyBleGl0ICRyZXQnCi0gIHRyYXAgInJldD0xMjk7ICRkb19leGl0IiAxCi0gIHRyYXAgInJldD0xMzA7ICRkb19leGl0IiAyCi0gIHRyYXAgInJldD0xNDE7ICRkb19leGl0IiAxMwotICB0cmFwICJyZXQ9MTQzOyAkZG9fZXhpdCIgMTUKLQotICAjIFNldCB1bWFzayBzbyBhcyBub3QgdG8gY3JlYXRlIHRlbXBzIHdpdGggdG9vLWdlbmVyb3VzIG1vZGVzLgotICAjIEhvd2V2ZXIsICdzdHJpcCcgcmVxdWlyZXMgYm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGVtcHMuCi0gIGNhc2UgJG1vZGUgaW4KLSAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KLSAgICAqNjQ0KSBjcF91bWFzaz0xMzM7OwotICAgICo3NTUpIGNwX3VtYXNrPTIyOzsKLQotICAgICpbMC03XSkKLSAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KLSAgICAgICAgdV9wbHVzX3J3PQotICAgICAgZWxzZQotICAgICAgICB1X3BsdXNfcnc9JyUgMjAwJwotICAgICAgZmkKLSAgICAgIGNwX3VtYXNrPWBleHByICcoJyA3NzcgLSAkbW9kZSAlIDEwMDAgJyknICR1X3BsdXNfcndgOzsKLSAgICAqKQotICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgotICAgICAgICB1X3BsdXNfcnc9Ci0gICAgICBlbHNlCi0gICAgICAgIHVfcGx1c19ydz0sdStydwotICAgICAgZmkKLSAgICAgIGNwX3VtYXNrPSRtb2RlJHVfcGx1c19ydzs7Ci0gIGVzYWMKLWZpCi0KLWZvciBzcmMKLWRvCi0gICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCi0gIGNhc2UgJHNyYyBpbgotICAgIC0qIHwgWz1cKFwpIV0pIHNyYz0uLyRzcmM7OwotICBlc2FjCi0KLSAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCi0gICAgZHN0PSRzcmMKLSAgICBkc3RkaXI9JGRzdAotICAgIHRlc3QgLWQgIiRkc3RkaXIiCi0gICAgZHN0ZGlyX3N0YXR1cz0kPwotICBlbHNlCi0KLSAgICAjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZAotICAgICMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKLSAgICAjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KLSAgICBpZiB0ZXN0ICEgLWYgIiRzcmMiICYmIHRlc3QgISAtZCAiJHNyYyI7IHRoZW4KLSAgICAgIGVjaG8gIiQwOiAkc3JjIGRvZXMgbm90IGV4aXN0LiIgPiYyCi0gICAgICBleGl0IDEKLSAgICBmaQotCi0gICAgaWYgdGVzdCAteiAiJGRzdF9hcmciOyB0aGVuCi0gICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCi0gICAgICBleGl0IDEKLSAgICBmaQotICAgIGRzdD0kZHN0X2FyZwotCi0gICAgIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgd29uJ3Qgd29yawotICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCi0gICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIiRpc190YXJnZXRfYV9kaXJlY3RvcnkiID0gbmV2ZXI7IHRoZW4KLSAgICAgICAgZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBhIGRpcmVjdG9yeSIgPiYyCi0gICAgICAgIGV4aXQgMQotICAgICAgZmkKLSAgICAgIGRzdGRpcj0kZHN0Ci0gICAgICBkc3Q9JGRzdGRpci9gYmFzZW5hbWUgIiRzcmMiYAotICAgICAgZHN0ZGlyX3N0YXR1cz0wCi0gICAgZWxzZQotICAgICAgZHN0ZGlyPWBkaXJuYW1lICIkZHN0ImAKLSAgICAgIHRlc3QgLWQgIiRkc3RkaXIiCi0gICAgICBkc3RkaXJfc3RhdHVzPSQ/Ci0gICAgZmkKLSAgZmkKLQotICBvYnNvbGV0ZV9ta2Rpcl91c2VkPWZhbHNlCi0KLSAgaWYgdGVzdCAkZHN0ZGlyX3N0YXR1cyAhPSAwOyB0aGVuCi0gICAgY2FzZSAkcG9zaXhfbWtkaXIgaW4KLSAgICAgICcnKQotICAgICAgICAjIENyZWF0ZSBpbnRlcm1lZGlhdGUgZGlycyB1c2luZyBtb2RlIDc1NSBhcyBtb2RpZmllZCBieSB0aGUgdW1hc2suCi0gICAgICAgICMgVGhpcyBpcyBsaWtlIEZyZWVCU0QgJ2luc3RhbGwnIGFzIG9mIDE5OTctMTAtMjguCi0gICAgICAgIHVtYXNrPWB1bWFza2AKLSAgICAgICAgY2FzZSAkc3RyaXBjbWQuJHVtYXNrIGluCi0gICAgICAgICAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCi0gICAgICAgICAgKlsyMzY3XVsyMzY3XSkgbWtkaXJfdW1hc2s9JHVtYXNrOzsKLSAgICAgICAgICAuKjBbMDJdWzAyXSB8IC5bMDJdWzAyXSB8IC5bMDJdKSBta2Rpcl91bWFzaz0yMjs7Ci0KLSAgICAgICAgICAqWzAtN10pCi0gICAgICAgICAgICBta2Rpcl91bWFzaz1gZXhwciAkdW1hc2sgKyAyMiBcCi0gICAgICAgICAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCi0gICAgICAgICAgICAgIC0gJHVtYXNrICUgMTAgJSA0ICsgJHVtYXNrICUgMgotICAgICAgICAgICAgYDs7Ci0gICAgICAgICAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgIyBXaXRoIC1kLCBjcmVhdGUgdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgbW9kZS4KLSAgICAgICAgIyBPdGhlcndpc2UsIHJlbHkgb24gJG1rZGlyX3VtYXNrLgotICAgICAgICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KLSAgICAgICAgICBta2Rpcl9tb2RlPS1tJG1vZGUKLSAgICAgICAgZWxzZQotICAgICAgICAgIG1rZGlyX21vZGU9Ci0gICAgICAgIGZpCi0KLSAgICAgICAgcG9zaXhfbWtkaXI9ZmFsc2UKLSAgICAgICAgY2FzZSAkdW1hc2sgaW4KLSAgICAgICAgICAqWzEyMzU2N11bMC03XVswLTddKQotICAgICAgICAgICAgIyBQT1NJWCBta2RpciAtcCBzZXRzIHUrd3ggYml0cyByZWdhcmRsZXNzIG9mIHVtYXNrLCB3aGljaAotICAgICAgICAgICAgIyBpcyBpbmNvbXBhdGlibGUgd2l0aCBGcmVlQlNEICdpbnN0YWxsJyB3aGVuICh1bWFzayAmIDMwMCkgIT0gMC4KLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgKikKLSAgICAgICAgICAgICMgJFJBTkRPTSBpcyBub3QgcG9ydGFibGUgKGUuZy4gZGFzaCk7ICB1c2UgaXQgd2hlbiBwb3NzaWJsZSB0bwotICAgICAgICAgICAgIyBsb3dlciBjb2xsaXNpb24gY2hhbmNlCi0gICAgICAgICAgICB0bXBkaXI9JHtUTVBESVItL3RtcH0vaW5zJFJBTkRPTS0kJAotICAgICAgICAgICAgdHJhcCAncmV0PSQ/OyBybWRpciAiJHRtcGRpci9hL2IiICIkdG1wZGlyL2EiICIkdG1wZGlyIiAyPi9kZXYvbnVsbDsgZXhpdCAkcmV0JyAwCi0KLSAgICAgICAgICAgICMgQXMgIm1rZGlyIC1wIiBmb2xsb3dzIHN5bWxpbmtzIGFuZCB3ZSB3b3JrIGluIC90bXAgcG9zc2libHk7ICBzbwotICAgICAgICAgICAgIyBjcmVhdGUgdGhlICR0bXBkaXIgZmlyc3QgKGFuZCBmYWlsIGlmIHVuc3VjY2Vzc2Z1bCkgdG8gbWFrZSBzdXJlCi0gICAgICAgICAgICAjIHRoYXQgbm9ib2R5IHRyaWVzIHRvIGd1ZXNzIHRoZSAkdG1wZGlyIG5hbWUuCi0gICAgICAgICAgICBpZiAodW1hc2sgJG1rZGlyX3VtYXNrICYmCi0gICAgICAgICAgICAgICAgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAiJHRtcGRpciIgJiYKLSAgICAgICAgICAgICAgICBleGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiR0bXBkaXIvYS9iIikgPi9kZXYvbnVsbCAyPiYxCi0gICAgICAgICAgICB0aGVuCi0gICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7Ci0gICAgICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KLSAgICAgICAgICAgICAgICAgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgotICAgICAgICAgICAgICAgICAgICMgb3RoZXItd3JpdGFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCi0gICAgICAgICAgICAgICAgICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICAgIHRlc3RfdG1wZGlyPSIkdG1wZGlyL2EiCi0gICAgICAgICAgICAgICAgICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0ZXN0X3RtcGRpciJgCi0gICAgICAgICAgICAgICAgICAgY2FzZSAkbHNfbGRfdG1wZGlyIGluCi0gICAgICAgICAgICAgICAgICAgICBkPz8/Py0/ci0qKSBkaWZmZXJlbnRfbW9kZT03MDA7OwotICAgICAgICAgICAgICAgICAgICAgZD8/Pz8tPy0tKikgZGlmZmVyZW50X21vZGU9NzU1OzsKLSAgICAgICAgICAgICAgICAgICAgICopIGZhbHNlOzsKLSAgICAgICAgICAgICAgICAgICBlc2FjICYmCi0gICAgICAgICAgICAgICAgICAgJG1rZGlycHJvZyAtbSRkaWZmZXJlbnRfbW9kZSAtcCAtLSAiJHRlc3RfdG1wZGlyIiAmJiB7Ci0gICAgICAgICAgICAgICAgICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdGVzdF90bXBkaXIiYAotICAgICAgICAgICAgICAgICAgICAgdGVzdCAiJGxzX2xkX3RtcGRpciIgPSAiJGxzX2xkX3RtcGRpcl8xIgotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB0aGVuIHBvc2l4X21rZGlyPToKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgcm1kaXIgIiR0bXBkaXIvYS9iIiAiJHRtcGRpci9hIiAiJHRtcGRpciIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIyBSZW1vdmUgYW55IGRpcnMgbGVmdCBiZWhpbmQgYnkgYW5jaWVudCBta2RpciBpbXBsZW1lbnRhdGlvbnMuCi0gICAgICAgICAgICAgIHJtZGlyIC4vJG1rZGlyX21vZGUgLi8tcCAuLy0tICIkdG1wZGlyIiAyPi9kZXYvbnVsbAotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIHRyYXAgJycgMDs7Ci0gICAgICAgIGVzYWM7OwotICAgIGVzYWMKLQotICAgIGlmCi0gICAgICAkcG9zaXhfbWtkaXIgJiYgKAotICAgICAgICB1bWFzayAkbWtkaXJfdW1hc2sgJiYKLSAgICAgICAgJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIgotICAgICAgKQotICAgIHRoZW4gOgotICAgIGVsc2UKLQotICAgICAgIyBUaGUgdW1hc2sgaXMgcmlkaWN1bG91cywgb3IgbWtkaXIgZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWCwKLSAgICAgICMgb3IgaXQgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiAgQ3JlYXRlIHRoZQotICAgICAgIyBkaXJlY3RvcnkgdGhlIHNsb3cgd2F5LCBzdGVwIGJ5IHN0ZXAsIGNoZWNraW5nIGZvciByYWNlcyBhcyB3ZSBnby4KLQotICAgICAgY2FzZSAkZHN0ZGlyIGluCi0gICAgICAgIC8qKSBwcmVmaXg9Jy8nOzsKLSAgICAgICAgWy09XChcKSFdKikgcHJlZml4PScuLyc7OwotICAgICAgICAqKSAgcHJlZml4PScnOzsKLSAgICAgIGVzYWMKLQotICAgICAgb0lGUz0kSUZTCi0gICAgICBJRlM9LwotICAgICAgc2V0IC1mCi0gICAgICBzZXQgZm5vcmQgJGRzdGRpcgotICAgICAgc2hpZnQKLSAgICAgIHNldCArZgotICAgICAgSUZTPSRvSUZTCi0KLSAgICAgIHByZWZpeGVzPQotCi0gICAgICBmb3IgZAotICAgICAgZG8KLSAgICAgICAgdGVzdCBYIiRkIiA9IFggJiYgY29udGludWUKLQotICAgICAgICBwcmVmaXg9JHByZWZpeCRkCi0gICAgICAgIGlmIHRlc3QgLWQgIiRwcmVmaXgiOyB0aGVuCi0gICAgICAgICAgcHJlZml4ZXM9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBpZiAkcG9zaXhfbWtkaXI7IHRoZW4KLSAgICAgICAgICAgICh1bWFzaz0kbWtkaXJfdW1hc2sgJiYKLSAgICAgICAgICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhawotICAgICAgICAgICAgIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgotICAgICAgICAgICAgdGVzdCAtZCAiJHByZWZpeCIgfHwgZXhpdCAxCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FzZSAkcHJlZml4IGluCi0gICAgICAgICAgICAgICpcJyopIHFwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKLSAgICAgICAgICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIHByZWZpeGVzPSIkcHJlZml4ZXMgJyRxcHJlZml4JyIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgICBwcmVmaXg9JHByZWZpeC8KLSAgICAgIGRvbmUKLQotICAgICAgaWYgdGVzdCAtbiAiJHByZWZpeGVzIjsgdGhlbgotICAgICAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCi0gICAgICAgICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKLSAgICAgICAgIGV2YWwgIlwkZG9pdF9leGVjIFwkbWtkaXJwcm9nICRwcmVmaXhlcyIpIHx8Ci0gICAgICAgICAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCi0gICAgICAgIG9ic29sZXRlX21rZGlyX3VzZWQ9dHJ1ZQotICAgICAgZmkKLSAgICBmaQotICBmaQotCi0gIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgotICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3QiOyB9ICYmCi0gICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gJiYKLSAgICB7IHRlc3QgIiRvYnNvbGV0ZV9ta2Rpcl91c2VkJGNob3duY21kJGNoZ3JwY21kIiA9IGZhbHNlIHx8Ci0gICAgICB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdCI7IH0gfHwgZXhpdCAxCi0gIGVsc2UKLQotICAgICMgTWFrZSBhIGNvdXBsZSBvZiB0ZW1wIGZpbGUgbmFtZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCi0gICAgZHN0dG1wPSRkc3RkaXIvX2luc3QuJCRfCi0gICAgcm10bXA9JGRzdGRpci9fcm0uJCRfCi0KLSAgICAjIFRyYXAgdG8gY2xlYW4gdXAgdGhvc2UgdGVtcCBmaWxlcyBhdCBleGl0LgotICAgIHRyYXAgJ3JldD0kPzsgcm0gLWYgIiRkc3R0bXAiICIkcm10bXAiICYmIGV4aXQgJHJldCcgMAotCi0gICAgIyBDb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZS4KLSAgICAodW1hc2sgJGNwX3VtYXNrICYmICRkb2l0X2V4ZWMgJGNwcHJvZyAiJHNyYyIgIiRkc3R0bXAiKSAmJgotCi0gICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgotICAgICMKLSAgICAjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCi0gICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCi0gICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgotICAgICMKLSAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSAmJgotICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3R0bXAiOyB9ICYmCi0gICAgeyB0ZXN0IC16ICIkc3RyaXBjbWQiIHx8ICRkb2l0ICRzdHJpcGNtZCAiJGRzdHRtcCI7IH0gJiYKLSAgICB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0dG1wIjsgfSAmJgotCi0gICAgIyBJZiAtQywgZG9uJ3QgYm90aGVyIHRvIGNvcHkgaWYgaXQgd291bGRuJ3QgY2hhbmdlIHRoZSBmaWxlLgotICAgIGlmICRjb3B5X29uX2NoYW5nZSAmJgotICAgICAgIG9sZD1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdCIgICAgIDI+L2Rldi9udWxsYCAmJgotICAgICAgIG5ldz1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdHRtcCIgIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHNldCAtZiAmJgotICAgICAgIHNldCBYICRvbGQgJiYgb2xkPTokMjokNDokNTokNiAmJgotICAgICAgIHNldCBYICRuZXcgJiYgbmV3PTokMjokNDokNTokNiAmJgotICAgICAgIHNldCArZiAmJgotICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCi0gICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKLSAgICB0aGVuCi0gICAgICBybSAtZiAiJGRzdHRtcCIKLSAgICBlbHNlCi0gICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KLSAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8Ci0KLSAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKLSAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90Ci0gICAgICAjIHN1cHBvcnQgLWYuCi0gICAgICB7Ci0gICAgICAgICMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KLSAgICAgICAgIyBXZSB0cnkgdGhpcyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUKLSAgICAgICAgIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgotICAgICAgICAjIHJlYXNvbnMuICBJbiB0aGlzIGNhc2UsIHRoZSBmaW5hbCBjbGVhbnVwIG1pZ2h0IGZhaWwgYnV0IHRoZSBuZXcKLSAgICAgICAgIyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KLSAgICAgICAgewotICAgICAgICAgIHRlc3QgISAtZiAiJGRzdCIgfHwKLSAgICAgICAgICAkZG9pdCAkcm1jbWQgLWYgIiRkc3QiIDI+L2Rldi9udWxsIHx8Ci0gICAgICAgICAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCi0gICAgICAgICAgICB7ICRkb2l0ICRybWNtZCAtZiAiJHJtdG1wIiAyPi9kZXYvbnVsbDsgOjsgfQotICAgICAgICAgIH0gfHwKLSAgICAgICAgICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKLSAgICAgICAgICAgIChleGl0IDEpOyBleGl0IDEKLSAgICAgICAgICB9Ci0gICAgICAgIH0gJiYKLQotICAgICAgICAjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCi0gICAgICAgICRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3QiCi0gICAgICB9Ci0gICAgZmkgfHwgZXhpdCAxCi0KLSAgICB0cmFwICcnIDAKLSAgZmkKLWRvbmUKLQotIyBMb2NhbCB2YXJpYWJsZXM6Ci0jIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCi0jIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvbGlicy9NYWtlZmlsZS5hbSBiL2xpYnMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MmNiNTUuLjAwMDAwMDAKLS0tIGEvbGlicy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVNVQkRJUlMgPSBnc3QKZGlmZiAtLWdpdCBhL2xpYnMvTWFrZWZpbGUuaW4gYi9saWJzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTkwM2FkLi4wMDAwMDAwCi0tLSBhL2xpYnMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4MjUgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBsaWJzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAotCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKLSAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAotICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCi0gICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKLSAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKLQlkaXN0ZGlyCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWFtX19yZWxhdGl2aXplID0gXAotICBkaXIwPWBwd2RgOyBcCi0gIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAotICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAotICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAotICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKLSAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAotICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKLSAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCi0gICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAotICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKLSAgICAgIGVsc2UgXAotICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKLSAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgICAgICAgZWxzZSBcCi0gICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAotICAgICAgICBmaTsgXAotICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAotICAgICAgZmk7IFwKLSAgICBmaTsgXAotICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICBkb25lOyBcCi0gIHJlbGRpcj0iJCRkaXIyIgotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLVNVQkRJUlMgPSBnc3QKLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGxpYnMvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6Ci0JQGZhaWw9OyBcCi0JaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKLQkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAotCWVsc2UgXAotCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZpOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtcmVjdXJzaXZlCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtcmVjdXJzaXZlCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCi0JICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCi0JICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKLQkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCi0JCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKLQkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAotCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgXAotCWNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKLQlwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvTWFrZWZpbGUuYW0gYi9saWJzL2dzdC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg5YWFkMS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLWlmIEhBVkVfQ0hFQ0sKLVNVQkRJUlNfQ0hFQ0sgPSBjaGVjawotZWxzZQotU1VCRElSU19DSEVDSyA9Ci1lbmRpZgotCi1pZiBHU1RfRElTQUJMRV9SRUdJU1RSWQotU1VCRElSU19IRUxQRVJTID0KLWVsc2UKLVNVQkRJUlNfSEVMUEVSUyA9IGhlbHBlcnMKLWVuZGlmCi0KLVNVQkRJUlNfQUxXQVlTID0gYmFzZSBjb250cm9sbGVyIG5ldAotCi1TVUJESVJTID0gJChTVUJESVJTX0FMV0FZUykgJChTVUJESVJTX0NIRUNLKSAkKFNVQkRJUlNfSEVMUEVSUykKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSU19BTFdBWVMpIGNoZWNrIGhlbHBlcnMKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L01ha2VmaWxlLmluIGIvbGlicy9nc3QvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NjYxOGEuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4MzAgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBsaWJzL2dzdAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGNzY29wZWxpc3QtcmVjdXJzaXZlIFwKLQljdGFncy1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWR2aS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAotCWluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgXAotCWluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSBcCi0JdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLVJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCi0gIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLWFtX19yZWN1cnNpdmVfdGFyZ2V0cyA9IFwKLSAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAotICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCi0gICQoYW1fX2V4dHJhX3JlY3Vyc2l2ZV90YXJnZXRzKQotQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCi0JZGlzdGRpcgotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1hbV9fcmVsYXRpdml6ZSA9IFwKLSAgZGlyMD1gcHdkYDsgXAotICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKLSAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKLSAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKLSAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCi0gIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKLSAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCi0gICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAotICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKLSAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCi0gICAgICBlbHNlIFwKLSAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCi0gICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gICAgICAgIGVsc2UgXAotICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKLSAgICAgICAgZmk7IFwKLSAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKLSAgICAgIGZpOyBcCi0gICAgZmk7IFwKLSAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgZG9uZTsgXAotICByZWxkaXI9IiQkZGlyMiIKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ASEFWRV9DSEVDS19GQUxTRUBTVUJESVJTX0NIRUNLID0gCi1ASEFWRV9DSEVDS19UUlVFQFNVQkRJUlNfQ0hFQ0sgPSBjaGVjawotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQFNVQkRJUlNfSEVMUEVSUyA9IGhlbHBlcnMKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9UUlVFQFNVQkRJUlNfSEVMUEVSUyA9IAotU1VCRElSU19BTFdBWVMgPSBiYXNlIGNvbnRyb2xsZXIgbmV0Ci1TVUJESVJTID0gJChTVUJESVJTX0FMV0FZUykgJChTVUJESVJTX0NIRUNLKSAkKFNVQkRJUlNfSEVMUEVSUykKLURJU1RfU1VCRElSUyA9ICQoU1VCRElSU19BTFdBWVMpIGNoZWNrIGhlbHBlcnMKLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKLQlAZmFpbD07IFwKLQlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAotCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCi0JZWxzZSBcCi0JICBmYWlsY29tPSdleGl0IDEnOyBcCi0JZmk7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1yZWN1cnNpdmUKLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1yZWN1cnNpdmUKLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKLQkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKLQkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAotCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKLQkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAotCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCi0JCWFtX19za2lwX21vZGVfZml4PTogXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktcmVjdXJzaXZlCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1yZWN1cnNpdmUKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1yZWN1cnNpdmUKLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBcCi0JY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAotCXBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtIGIvbGlicy9nc3QvYmFzZS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFmZTU2MS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLWxpYl9MVExJQlJBUklFUyA9IGxpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEKLQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9ERVBFTkRFTkNJRVMgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAubGEKLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUyA9IFwKLQlnc3RhZGFwdGVyLmMJCVwKLQlnc3RiYXNlcGFyc2UuYwkJXAotCWdzdGJhc2VzaW5rLmMJCVwKLQlnc3RiYXNlc3JjLmMJCVwKLQlnc3RiYXNldHJhbnNmb3JtLmMJXAotCWdzdGJpdHJlYWRlci5jCQlcCi0JZ3N0Ynl0ZXJlYWRlci5jCQlcCi0JZ3N0Ynl0ZXdyaXRlci5jICAgICAgICAgXAotCWdzdGNvbGxlY3RwYWRzLmMJXAotCWdzdGRhdGFxdWV1ZS5jCQlcCi0JZ3N0Zmxvd2NvbWJpbmVyLmMJXAotCWdzdHB1c2hzcmMuYwkJXAotCWdzdHF1ZXVlYXJyYXkuYwkJXAotCWdzdHR5cGVmaW5kaGVscGVyLmMKLQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9MSUJBREQgPSAkKEdTVF9PQkpfTElCUykKLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfTERGTEFHUyA9ICQoR1NUX0xJQl9MREZMQUdTKSAkKEdTVF9BTExfTERGTEFHUykgJChHU1RfTFRfTERGTEFHUykKLQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIgPQkJXAotCSQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AL2dzdC9iYXNlCi0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMgPQlcCi0JYmFzZS5oCQkJXAotCWdzdGFkYXB0ZXIuaAkJXAotCWdzdGJhc2VwYXJzZS5oCQlcCi0JZ3N0YmFzZXNpbmsuaAkJXAotCWdzdGJhc2VzcmMuaAkJXAotCWdzdGJhc2V0cmFuc2Zvcm0uaAlcCi0JZ3N0Yml0cmVhZGVyLmgJCVwKLQlnc3RieXRlcmVhZGVyLmgJCVwKLQlnc3RieXRld3JpdGVyLmggICAgICAgICBcCi0JZ3N0Y29sbGVjdHBhZHMuaAlcCi0JZ3N0ZGF0YXF1ZXVlLmgJCVwKLQlnc3RmbG93Y29tYmluZXIuaAlcCi0JZ3N0cHVzaHNyYy5oCQlcCi0JZ3N0cXVldWVhcnJheS5oCQlcCi0JZ3N0dHlwZWZpbmRoZWxwZXIuaAotCi1ub2luc3RfSEVBREVSUyA9IFwKLQlnc3RieXRlcmVhZGVyLWRvY3MuaCBcCi0JZ3N0Ynl0ZXdyaXRlci1kb2NzLmggXAotCWdzdGJpdHJlYWRlci1kb2NzLmggXAotCWdzdGluZGV4LmgKLQotRVhUUkFfRElTVCA9IGdzdGluZGV4LmMgZ3N0bWVtaW5kZXguYwotCi1DTEVBTkZJTEVTID0gKi5nY25vICouZ2NkYSAqLmdjb3YKLQotJS5jLmdjb3Y6IC5saWJzL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtJS5nY2RhICUuYwotCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKLQotZ2NvdjogJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVM6PS5nY292KQotCi1pZiBIQVZFX0lOVFJPU1BFQ1RJT04KLUJVSUxUX0dJUlNPVVJDRVMgPSBHc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmdpcgotCi1naXJfaGVhZGVycz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykpCi1naXJfc291cmNlcz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKSkKLQotR3N0QmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi0JJChBTV9WX0dFTilQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT15ZXNcCi0JCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSIiIEdTVF9QTFVHSU5fUEFUSF8xXzA9IiIgR1NUX1JFR0lTVFJZX1VQREFURT1ubyBcCi0JCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIENDPSIkKENDKSIgUEtHX0NPTkZJRz0iJChQS0dfQ09ORklHKSIgRExMVE9PTD0iJChETExUT09MKSIgXAotCQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0QmFzZSBcCi0JCS0tbnN2ZXJzaW9uPUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJLS13YXJuLWFsbCBcCi0JCS0taWRlbnRpZmllci1wcmVmaXg9R3N0IFwKLQkJLS1zeW1ib2wtcHJlZml4PWdzdCBcCi0JCS1JJCh0b3Bfc3JjZGlyKSBcCi0JCS1JJCh0b3Bfc3JjZGlyKS9saWJzIFwKLQkJLUkkKHRvcF9idWlsZGRpcikgXAotCQktSSQodG9wX2J1aWxkZGlyKS9saWJzIFwKLQkJLS1jLWluY2x1ZGUgImdzdC9iYXNlL2Jhc2UuaCIgXAotCQktLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCi0JCS0tbGlicmFyeS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAotCQktLWxpYnJhcnk9bGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAotCQktLWxpYnRvb2w9IiR7TElCVE9PTH0iIFwKLQkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJLS1wa2ctZXhwb3J0IGdzdHJlYW1lci1iYXNlLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJLS1hZGQtaW5pdC1zZWN0aW9uPSIkKElOVFJPU1BFQ1RJT05fSU5JVCkiIFwKLQkJLS1vdXRwdXQgJEAgXAotCQkkKGdpcl9oZWFkZXJzKSBcCi0JCSQoZ2lyX3NvdXJjZXMpCi0KLSMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KLSMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KLWdpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAotZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCi0KLXR5cGVsaWJzZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAvCi0KLXR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKLQotJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCi0JJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikvZ3N0ICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQotCi1DTEVBTkZJTEVTICs9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQotZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuaW4gYi9saWJzL2dzdC9iYXNlL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDFkNjdhLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMTU2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGFtX19hcHBlbmRfMSA9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQotc3ViZGlyID0gbGlicy9nc3QvYmFzZQotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKLQkkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpIFwKLQkkKG5vaW5zdF9IRUFERVJTKSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiBcCi0JIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgXAotCSIkKERFU1RESVIpJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiCi1MVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWFtX2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUyA9ICBcCi0JbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhZGFwdGVyLmxvIFwKLQlsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VwYXJzZS5sbyBcCi0JbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc2luay5sbyBcCi0JbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc3JjLmxvIFwKLQlsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2V0cmFuc2Zvcm0ubG8gXAotCWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Yml0cmVhZGVyLmxvIFwKLQlsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGVyZWFkZXIubG8gXAotCWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Ynl0ZXdyaXRlci5sbyBcCi0JbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb2xsZWN0cGFkcy5sbyBcCi0JbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkYXRhcXVldWUubG8gXAotCWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Zmxvd2NvbWJpbmVyLmxvIFwKLQlsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHB1c2hzcmMubG8gXAotCWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVldWVhcnJheS5sbyBcCi0JbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZGhlbHBlci5sbwotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTID0gIFwKLQkkKGFtX2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1EQVRBID0gJChnaXJfREFUQSkgJCh0eXBlbGlic19EQVRBKQotSEVBREVSUyA9ICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykgXAotCSQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAgUkVBRE1FCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLWxpYl9MVExJQlJBUklFUyA9IGxpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEKLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTID0gXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvbGliZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUyA9IFwKLQlnc3RhZGFwdGVyLmMJCVwKLQlnc3RiYXNlcGFyc2UuYwkJXAotCWdzdGJhc2VzaW5rLmMJCVwKLQlnc3RiYXNlc3JjLmMJCVwKLQlnc3RiYXNldHJhbnNmb3JtLmMJXAotCWdzdGJpdHJlYWRlci5jCQlcCi0JZ3N0Ynl0ZXJlYWRlci5jCQlcCi0JZ3N0Ynl0ZXdyaXRlci5jICAgICAgICAgXAotCWdzdGNvbGxlY3RwYWRzLmMJXAotCWdzdGRhdGFxdWV1ZS5jCQlcCi0JZ3N0Zmxvd2NvbWJpbmVyLmMJXAotCWdzdHB1c2hzcmMuYwkJXAotCWdzdHF1ZXVlYXJyYXkuYwkJXAotCWdzdHR5cGVmaW5kaGVscGVyLmMKLQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9MSUJBREQgPSAkKEdTVF9PQkpfTElCUykKLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfTERGTEFHUyA9ICQoR1NUX0xJQl9MREZMQUdTKSAkKEdTVF9BTExfTERGTEFHUykgJChHU1RfTFRfTERGTEFHUykKLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyID0gXAotCSQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AL2dzdC9iYXNlCi0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMgPSBcCi0JYmFzZS5oCQkJXAotCWdzdGFkYXB0ZXIuaAkJXAotCWdzdGJhc2VwYXJzZS5oCQlcCi0JZ3N0YmFzZXNpbmsuaAkJXAotCWdzdGJhc2VzcmMuaAkJXAotCWdzdGJhc2V0cmFuc2Zvcm0uaAlcCi0JZ3N0Yml0cmVhZGVyLmgJCVwKLQlnc3RieXRlcmVhZGVyLmgJCVwKLQlnc3RieXRld3JpdGVyLmggICAgICAgICBcCi0JZ3N0Y29sbGVjdHBhZHMuaAlcCi0JZ3N0ZGF0YXF1ZXVlLmgJCVwKLQlnc3RmbG93Y29tYmluZXIuaAlcCi0JZ3N0cHVzaHNyYy5oCQlcCi0JZ3N0cXVldWVhcnJheS5oCQlcCi0JZ3N0dHlwZWZpbmRoZWxwZXIuaAotCi1ub2luc3RfSEVBREVSUyA9IFwKLQlnc3RieXRlcmVhZGVyLWRvY3MuaCBcCi0JZ3N0Ynl0ZXdyaXRlci1kb2NzLmggXAotCWdzdGJpdHJlYWRlci1kb2NzLmggXAotCWdzdGluZGV4LmgKLQotRVhUUkFfRElTVCA9IGdzdGluZGV4LmMgZ3N0bWVtaW5kZXguYwotQ0xFQU5GSUxFUyA9ICouZ2NubyAqLmdjZGEgKi5nY292ICQoYW1fX2FwcGVuZF8xKQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEJVSUxUX0dJUlNPVVJDRVMgPSBHc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmdpcgotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9oZWFkZXJzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpKQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9zb3VyY2VzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUykpCi0KLSMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KLSMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJkaXIgPSAkKGRhdGFkaXIpL2dpci0xLjAKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic2RpciA9ICQobGliZGlyKS9naXJlcG9zaXRvcnktMS4wLwotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGxpYnMvZ3N0L2Jhc2UvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvYmFzZS9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLWxpYkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGE6ICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUykgJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhZGFwdGVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlcGFyc2UuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VzaW5rLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNldHJhbnNmb3JtLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaXRyZWFkZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGVyZWFkZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGV3cml0ZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbGxlY3RwYWRzLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkYXRhcXVldWUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZsb3djb21iaW5lci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHVzaHNyYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVldWVhcnJheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRoZWxwZXIuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YWRhcHRlci5sbzogZ3N0YWRhcHRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhZGFwdGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGFkYXB0ZXIuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YWRhcHRlci5sbyBgdGVzdCAtZiAnZ3N0YWRhcHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhZGFwdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YWRhcHRlci5UcG8gJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YWRhcHRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RhZGFwdGVyLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhZGFwdGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGFkYXB0ZXIubG8gYHRlc3QgLWYgJ2dzdGFkYXB0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YWRhcHRlci5jCi0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXBhcnNlLmxvOiBnc3RiYXNlcGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXBhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VwYXJzZS5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlcGFyc2UubG8gYHRlc3QgLWYgJ2dzdGJhc2VwYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiYXNlcGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlcGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VwYXJzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RiYXNlcGFyc2UuYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VwYXJzZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlcGFyc2UubG8gYHRlc3QgLWYgJ2dzdGJhc2VwYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiYXNlcGFyc2UuYwotCi1saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VzaW5rLmxvOiBnc3RiYXNlc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc2luay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc2luay5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc2luay5sbyBgdGVzdCAtZiAnZ3N0YmFzZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmFzZXNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc2luay5UcG8gJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXNpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YmFzZXNpbmsuYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VzaW5rLmxvIGB0ZXN0IC1mICdnc3RiYXNlc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiYXNlc2luay5jCi0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXNyYy5sbzogZ3N0YmFzZXNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VzcmMuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXNyYy5sbyBgdGVzdCAtZiAnZ3N0YmFzZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiYXNlc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXNyYy5UcG8gJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXNyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RiYXNlc3JjLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNlc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2VzcmMubG8gYHRlc3QgLWYgJ2dzdGJhc2VzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmFzZXNyYy5jCi0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5sbzogZ3N0YmFzZXRyYW5zZm9ybS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNldHJhbnNmb3JtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2V0cmFuc2Zvcm0uVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5sbyBgdGVzdCAtZiAnZ3N0YmFzZXRyYW5zZm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiYXNldHJhbnNmb3JtLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5UcG8gJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YmFzZXRyYW5zZm9ybS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RiYXNldHJhbnNmb3JtLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiYXNldHJhbnNmb3JtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJhc2V0cmFuc2Zvcm0ubG8gYHRlc3QgLWYgJ2dzdGJhc2V0cmFuc2Zvcm0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YmFzZXRyYW5zZm9ybS5jCi0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Yml0cmVhZGVyLmxvOiBnc3RiaXRyZWFkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Yml0cmVhZGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJpdHJlYWRlci5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaXRyZWFkZXIubG8gYHRlc3QgLWYgJ2dzdGJpdHJlYWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiaXRyZWFkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaXRyZWFkZXIuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJpdHJlYWRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RiaXRyZWFkZXIuYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJpdHJlYWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RiaXRyZWFkZXIubG8gYHRlc3QgLWYgJ2dzdGJpdHJlYWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RiaXRyZWFkZXIuYwotCi1saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGVyZWFkZXIubG86IGdzdGJ5dGVyZWFkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Ynl0ZXJlYWRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RieXRlcmVhZGVyLlRwbyAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGVyZWFkZXIubG8gYHRlc3QgLWYgJ2dzdGJ5dGVyZWFkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Ynl0ZXJlYWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGVyZWFkZXIuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGVyZWFkZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Ynl0ZXJlYWRlci5jJyBvYmplY3Q9J2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Ynl0ZXJlYWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RieXRlcmVhZGVyLmxvIGB0ZXN0IC1mICdnc3RieXRlcmVhZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ5dGVyZWFkZXIuYwotCi1saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGV3cml0ZXIubG86IGdzdGJ5dGV3cml0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Ynl0ZXdyaXRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RieXRld3JpdGVyLlRwbyAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGV3cml0ZXIubG8gYHRlc3QgLWYgJ2dzdGJ5dGV3cml0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Ynl0ZXdyaXRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGV3cml0ZXIuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ5dGV3cml0ZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Ynl0ZXdyaXRlci5jJyBvYmplY3Q9J2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Ynl0ZXdyaXRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RieXRld3JpdGVyLmxvIGB0ZXN0IC1mICdnc3RieXRld3JpdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ5dGV3cml0ZXIuYwotCi1saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbGxlY3RwYWRzLmxvOiBnc3Rjb2xsZWN0cGFkcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb2xsZWN0cGFkcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb2xsZWN0cGFkcy5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb2xsZWN0cGFkcy5sbyBgdGVzdCAtZiAnZ3N0Y29sbGVjdHBhZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y29sbGVjdHBhZHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb2xsZWN0cGFkcy5UcG8gJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29sbGVjdHBhZHMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Y29sbGVjdHBhZHMuYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbGxlY3RwYWRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbGxlY3RwYWRzLmxvIGB0ZXN0IC1mICdnc3Rjb2xsZWN0cGFkcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb2xsZWN0cGFkcy5jCi0KLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGF0YXF1ZXVlLmxvOiBnc3RkYXRhcXVldWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGF0YXF1ZXVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRhdGFxdWV1ZS5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkYXRhcXVldWUubG8gYHRlc3QgLWYgJ2dzdGRhdGFxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkYXRhcXVldWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkYXRhcXVldWUuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRhdGFxdWV1ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RkYXRhcXVldWUuYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRhdGFxdWV1ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkYXRhcXVldWUubG8gYHRlc3QgLWYgJ2dzdGRhdGFxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkYXRhcXVldWUuYwotCi1saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZsb3djb21iaW5lci5sbzogZ3N0Zmxvd2NvbWJpbmVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGZsb3djb21iaW5lci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RmbG93Y29tYmluZXIuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Zmxvd2NvbWJpbmVyLmxvIGB0ZXN0IC1mICdnc3RmbG93Y29tYmluZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Zmxvd2NvbWJpbmVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Zmxvd2NvbWJpbmVyLlRwbyAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RmbG93Y29tYmluZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Zmxvd2NvbWJpbmVyLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RmbG93Y29tYmluZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Zmxvd2NvbWJpbmVyLmxvIGB0ZXN0IC1mICdnc3RmbG93Y29tYmluZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Zmxvd2NvbWJpbmVyLmMKLQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwdXNoc3JjLmxvOiBnc3RwdXNoc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHB1c2hzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHVzaHNyYy5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwdXNoc3JjLmxvIGB0ZXN0IC1mICdnc3RwdXNoc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHB1c2hzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwdXNoc3JjLlRwbyAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwdXNoc3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHB1c2hzcmMuYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHB1c2hzcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHVzaHNyYy5sbyBgdGVzdCAtZiAnZ3N0cHVzaHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwdXNoc3JjLmMKLQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWV1ZWFycmF5LmxvOiBnc3RxdWV1ZWFycmF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHF1ZXVlYXJyYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVldWVhcnJheS5UcG8gLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWV1ZWFycmF5LmxvIGB0ZXN0IC1mICdnc3RxdWV1ZWFycmF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF1ZXVlYXJyYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWV1ZWFycmF5LlRwbyAkKERFUERJUikvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RxdWV1ZWFycmF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHF1ZXVlYXJyYXkuYycgb2JqZWN0PSdsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHF1ZXVlYXJyYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cXVldWVhcnJheS5sbyBgdGVzdCAtZiAnZ3N0cXVldWVhcnJheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdWV1ZWFycmF5LmMKLQotbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZGhlbHBlci5sbzogZ3N0dHlwZWZpbmRoZWxwZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRoZWxwZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRoZWxwZXIuVHBvIC1jIC1vIGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRoZWxwZXIubG8gYHRlc3QgLWYgJ2dzdHR5cGVmaW5kaGVscGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHR5cGVmaW5kaGVscGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHlwZWZpbmRoZWxwZXIuVHBvICQoREVQRElSKS9saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHR5cGVmaW5kaGVscGVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHR5cGVmaW5kaGVscGVyLmMnIG9iamVjdD0nbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZGhlbHBlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0eXBlZmluZGhlbHBlci5sbyBgdGVzdCAtZiAnZ3N0dHlwZWZpbmRoZWxwZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHlwZWZpbmRoZWxwZXIuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotaW5zdGFsbC1naXJEQVRBOiAkKGdpcl9EQVRBKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChnaXJkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGdpcmRpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZ2lyZGlyKSciOyBcCi0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZ2lyZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1naXJEQVRBOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoZ2lyX0RBVEEpJzsgdGVzdCAtbiAiJChnaXJkaXIpIiB8fCBsaXN0PTsgXAotCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChnaXJkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotaW5zdGFsbC10eXBlbGlic0RBVEE6ICQodHlwZWxpYnNfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJCh0eXBlbGlic19EQVRBKSc7IHRlc3QgLW4gIiQodHlwZWxpYnNkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQodHlwZWxpYnNkaXIpJyI7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtdHlwZWxpYnNEQVRBOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQodHlwZWxpYnNfREFUQSknOyB0ZXN0IC1uICIkKHR5cGVsaWJzZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQodHlwZWxpYnNkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotaW5zdGFsbC1saWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlM6ICQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciknIjsgXAotCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQobGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBleGl0ICQkPzsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKLQlkaXI9JyQoREVTVERJUikkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoREFUQSkgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGdpcmRpcikiICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiICIkKERFU1RESVIpJChsaWJnc3RiYXNlX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWdpckRBVEEgXAotCWluc3RhbGwtbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTIFwKLQlpbnN0YWxsLXR5cGVsaWJzREFUQQotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1saWJMVExJQlJBUklFUwotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1naXJEQVRBIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCi0JdW5pbnN0YWxsLWxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUyBcCi0JdW5pbnN0YWxsLXR5cGVsaWJzREFUQQotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZ2lyREFUQSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAotCWluc3RhbGwtbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbC10eXBlbGlic0RBVEEgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZ2lyREFUQSBcCi0JdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKLQl1bmluc3RhbGwtbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0lLmMuZ2NvdjogLmxpYnMvbGliZ3N0YmFzZV9AR1NUX0FQSV9WRVJTSU9OQF9sYS0lLmdjZGEgJS5jCi0JJChHQ09WKSAtYiAtZiAtbyAkXiA+ICRALm91dAotCi1nY292OiAkKGxpYmdzdGJhc2VfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUzo9Lmdjb3YpCi0KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBHc3RCYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChBTV9WX0dFTilQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT15ZXNcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQlHU1RfUExVR0lOX1NZU1RFTV9QQVRIXzFfMD0iIiBHU1RfUExVR0lOX1BBVEhfMV8wPSIiIEdTVF9SRUdJU1RSWV9VUERBVEU9bm8gXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgQ0M9IiQoQ0MpIiBQS0dfQ09ORklHPSIkKFBLR19DT05GSUcpIiBETExUT09MPSIkKERMTFRPT0wpIiBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0QmFzZSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW5zdmVyc2lvbj1AR1NUX0FQSV9WRVJTSU9OQCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXdhcm4tYWxsIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0taWRlbnRpZmllci1wcmVmaXg9R3N0IFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tc3ltYm9sLXByZWZpeD1nc3QgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9zcmNkaXIpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3Bfc3JjZGlyKS9saWJzIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3BfYnVpbGRkaXIpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1jLWluY2x1ZGUgImdzdC9iYXNlL2Jhc2UuaCIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5LXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnJhcnk9bGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlidG9vbD0iJHtMSUJUT09MfSIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItYmFzZS1AR1NUX0FQSV9WRVJTSU9OQCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWFkZC1pbml0LXNlY3Rpb249IiQoSU5UUk9TUEVDVElPTl9JTklUKSIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1vdXRwdXQgJEAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChnaXJfaGVhZGVycykgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChnaXJfc291cmNlcykKLQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQCUudHlwZWxpYjogJS5naXIgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSAtLWluY2x1ZGVkaXI9JChidWlsZGRpcikgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9nc3QgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX09QVFMpICQ8IC1vICQoQEYpCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvUkVBRE1FIGIvbGlicy9nc3QvYmFzZS9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMTRjZTIuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLUJhc2UgY2xhc3NlcwotLS0tLS0tLS0tLS0tCi0KLUdzdEJhc2VTaW5rCi0gIEZJWE1FOiBub3QgbXVjaCBwb2ludCBtYWtpbmcgaXQgb3BlcmF0ZSBpbiBwdWxsIG1vZGUgYXMgYSBnZW5lcmljCi0gIGJhc2UgY2xhc3MgSSBndWVzcy4uLgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9iYXNlLmggYi9saWJzL2dzdC9iYXNlL2Jhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY0NmNlMy4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2Jhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdTdHJlYW1lciBkZXZlbG9wZXJzCi0gKgotICogYmFzZS5oOiBzaW5nbGUgaW5jbHVkZSBoZWFkZXIgZm9yIGdzdC1iYXNlIGxpYnJhcnkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0JBU0VfSF9fCi0jZGVmaW5lIF9fR1NUX0JBU0VfSF9fCi0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc3JjLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRld3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RkYXRhcXVldWUuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RwdXNoc3JjLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0cXVldWVhcnJheS5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg+Ci0KLSNlbmRpZiAvKiBfX0dTVF9CQVNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmMgYi9saWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThjOWQ0NS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGFkYXB0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDE3OTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0YWRhcHRlcgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBhZGFwdHMgaW5jb21pbmcgZGF0YSBvbiBhIHNpbmsgcGFkIGludG8gY2h1bmtzIG9mIE4gYnl0ZXMKLSAqCi0gKiBUaGlzIGNsYXNzIGlzIGZvciBlbGVtZW50cyB0aGF0IHJlY2VpdmUgYnVmZmVycyBpbiBhbiB1bmRlc2lyZWQgc2l6ZS4KLSAqIFdoaWxlIGZvciBleGFtcGxlIHJhdyB2aWRlbyBjb250YWlucyBvbmUgaW1hZ2UgcGVyIGJ1ZmZlciwgdGhlIHNhbWUgaXMgbm90Ci0gKiB0cnVlIGZvciBhIGxvdCBvZiBvdGhlciBmb3JtYXRzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgY29tZSBkaXJlY3RseSBmcm9tCi0gKiBhIGZpbGUuIFNvIGlmIHlvdSBoYXZlIHVuZGVmaW5lZCBidWZmZXIgc2l6ZXMgYW5kIHJlcXVpcmUgYSBzcGVjaWZpYyBzaXplLAotICogdGhpcyBvYmplY3QgaXMgZm9yIHlvdS4KLSAqCi0gKiBBbiBhZGFwdGVyIGlzIGNyZWF0ZWQgd2l0aCBnc3RfYWRhcHRlcl9uZXcoKS4gSXQgY2FuIGJlIGZyZWVkIGFnYWluIHdpdGgKLSAqIGdfb2JqZWN0X3VucmVmKCkuCi0gKgotICogVGhlIHRoZW9yeSBvZiBvcGVyYXRpb24gaXMgbGlrZSB0aGlzOiBBbGwgYnVmZmVycyByZWNlaXZlZCBhcmUgcHV0Ci0gKiBpbnRvIHRoZSBhZGFwdGVyIHVzaW5nIGdzdF9hZGFwdGVyX3B1c2goKSBhbmQgdGhlIGRhdGEgaXMgdGhlbiByZWFkIGJhY2sKLSAqIGluIGNodW5rcyBvZiB0aGUgZGVzaXJlZCBzaXplIHVzaW5nIGdzdF9hZGFwdGVyX21hcCgpL2dzdF9hZGFwdGVyX3VubWFwKCkKLSAqIGFuZC9vciBnc3RfYWRhcHRlcl9jb3B5KCkuIEFmdGVyIHRoZSBkYXRhIGhhcyBiZWVuIHByb2Nlc3NlZCwgaXQgaXMgZnJlZWQKLSAqIHVzaW5nIGdzdF9hZGFwdGVyX3VubWFwKCkuCi0gKgotICogT3RoZXIgbWV0aG9kcyBzdWNoIGFzIGdzdF9hZGFwdGVyX3Rha2UoKSBhbmQgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIoKQotICogY29tYmluZSBnc3RfYWRhcHRlcl9tYXAoKSBhbmQgZ3N0X2FkYXB0ZXJfdW5tYXAoKSBpbiBvbmUgbWV0aG9kIGFuZCBhcmUKLSAqIHBvdGVudGlhbGx5IG1vcmUgY29udmVuaWVudCBmb3Igc29tZSB1c2UgY2FzZXMuCi0gKgotICogRm9yIGV4YW1wbGUsIGEgc2luayBwYWQncyBjaGFpbiBmdW5jdGlvbiB0aGF0IG5lZWRzIHRvIHBhc3MgZGF0YSB0byBhIGxpYnJhcnkKLSAqIGluIDUxMi1ieXRlIGNodW5rcyBjb3VsZCBiZSBpbXBsZW1lbnRlZCBsaWtlIHRoaXM6Ci0gKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPgotICogc3RhdGljIEdzdEZsb3dSZXR1cm4KLSAqIHNpbmtfcGFkX2NoYWluIChHc3RQYWQgKnBhZCwgR3N0T2JqZWN0ICpwYXJlbnQsIEdzdEJ1ZmZlciAqYnVmZmVyKQotICogewotICogICBNeUVsZW1lbnQgKnRoaXM7Ci0gKiAgIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gKiAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gKgotICogICB0aGlzID0gTVlfRUxFTUVOVCAocGFyZW50KTsKLSAqCi0gKiAgIGFkYXB0ZXIgPSB0aGlzLT5hZGFwdGVyOwotICoKLSAqICAgLy8gcHV0IGJ1ZmZlciBpbnRvIGFkYXB0ZXIKLSAqICAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLSAqCi0gKiAgIC8vIHdoaWxlIHdlIGNhbiByZWFkIG91dCA1MTIgYnl0ZXMsIHByb2Nlc3MgdGhlbQotICogICB3aGlsZSAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKSA+PSA1MTIgJiYgcmV0ID09IEdTVF9GTE9XX09LKSB7Ci0gKiAgICAgY29uc3QgZ3VpbnQ4ICpkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwIChhZGFwdGVyLCA1MTIpOwotICogICAgIC8vIHVzZSBmbG93cmV0dXJuIGFzIGFuIGVycm9yIHZhbHVlCi0gKiAgICAgcmV0ID0gbXlfbGlicmFyeV9mb28gKGRhdGEpOwotICogICAgIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyKTsKLSAqICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgNTEyKTsKLSAqICAgfQotICogICByZXR1cm4gcmV0OwotICogfQotICogXXwKLSAqCi0gKiBGb3IgYW5vdGhlciBleGFtcGxlLCBhIHNpbXBsZSBlbGVtZW50IGluc2lkZSBHU3RyZWFtZXIgdGhhdCB1c2VzICNHc3RBZGFwdGVyCi0gKiBpcyB0aGUgbGlidmlzdWFsIGVsZW1lbnQuCi0gKgotICogQW4gZWxlbWVudCB1c2luZyAjR3N0QWRhcHRlciBpbiBpdHMgc2luayBwYWQgY2hhaW4gZnVuY3Rpb24gc2hvdWxkIGVuc3VyZSB0aGF0Ci0gKiB3aGVuIHRoZSBGTFVTSF9TVE9QIGV2ZW50IGlzIHJlY2VpdmVkLCB0aGF0IGFueSBxdWV1ZWQgZGF0YSBpcyBjbGVhcmVkIHVzaW5nCi0gKiBnc3RfYWRhcHRlcl9jbGVhcigpLiBEYXRhIHNob3VsZCBhbHNvIGJlIGNsZWFyZWQgb3IgcHJvY2Vzc2VkIG9uIEVPUyBhbmQKLSAqIHdoZW4gY2hhbmdpbmcgc3RhdGUgZnJvbSAlR1NUX1NUQVRFX1BBVVNFRCB0byAlR1NUX1NUQVRFX1JFQURZLgotICoKLSAqIEFsc28gY2hlY2sgdGhlIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UIGZsYWcgb24gdGhlIGJ1ZmZlci4gU29tZSBlbGVtZW50cyBtaWdodAotICogbmVlZCB0byBjbGVhciB0aGUgYWRhcHRlciBhZnRlciBhIGRpc2NvbnRpbnVpdHkuCi0gKgotICogVGhlIGFkYXB0ZXIgd2lsbCBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lc3RhbXBzIG9mIHRoZSBidWZmZXJzCi0gKiB0aGF0IHdlcmUgcHVzaGVkLiBUaGUgbGFzdCBzZWVuIHRpbWVzdGFtcCBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24KLSAqIGNhbiBiZSBxdWVyaWVkIHdpdGggZ3N0X2FkYXB0ZXJfcHJldl9wdHMoKS4gVGhpcyBmdW5jdGlvbiBjYW4KLSAqIG9wdGlvbmFsbHkgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciB0aGF0Ci0gKiBjYXJyaWVkIHRoZSB0aW1lc3RhbXAgYW5kIHRoZSBjdXJyZW50IGFkYXB0ZXIgcG9zaXRpb24uIFRoZSBkaXN0YW5jZSBpcwotICogdXNlZnVsIHdoZW4gZGVhbGluZyB3aXRoLCBmb3IgZXhhbXBsZSwgcmF3IGF1ZGlvIHNhbXBsZXMgYmVjYXVzZSBpdCBhbGxvd3MKLSAqIHlvdSB0byBjYWxjdWxhdGUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudCBhZGFwdGVyIHBvc2l0aW9uIGJ5IHVzaW5nIHRoZQotICogbGFzdCBzZWVuIHRpbWVzdGFtcCBhbmQgdGhlIGFtb3VudCBvZiBieXRlcyBzaW5jZS4gIEFkZGl0aW9uYWxseSwgdGhlCi0gKiBnc3RfYWRhcHRlcl9wcmV2X3B0c19hdF9vZmZzZXQoKSBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGxhc3QKLSAqIHNlZW4gdGltZXN0YW1wIGF0IGEgcGFydGljdWxhciBvZmZzZXQgaW4gdGhlIGFkYXB0ZXIuCi0gKgotICogVGhlIGFkYXB0ZXIgd2lsbCBhbHNvIGtlZXAgdHJhY2sgb2YgdGhlIG9mZnNldCBvZiB0aGUgYnVmZmVycwotICogKCNHU1RfQlVGRkVSX09GRlNFVCkgdGhhdCB3ZXJlIHB1c2hlZC4gVGhlIGxhc3Qgc2VlbiBvZmZzZXQgYmVmb3JlIHRoZQotICogY3VycmVudCBwb3NpdGlvbiBjYW4gYmUgcXVlcmllZCB3aXRoIGdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0KCkuIFRoaXMgZnVuY3Rpb24KLSAqIGNhbiBvcHRpb25hbGx5IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIKLSAqIHRoYXQgY2FycmllZCB0aGUgb2Zmc2V0IGFuZCB0aGUgY3VycmVudCBhZGFwdGVyIHBvc2l0aW9uLgotICoKLSAqIEFkZGl0aW9uYWxseSB0aGUgYWRhcHRlciBhbHNvIGtlZXBzIHRyYWNrIG9mIHRoZSBQVFMsIERUUyBhbmQgYnVmZmVyIG9mZnNldAotICogYXQgdGhlIGxhc3QgZGlzY29udGludWl0eSwgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB3aXRoCi0gKiBnc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udCgpLCBnc3RfYWRhcHRlcl9kdHNfYXRfZGlzY29udCgpIGFuZAotICogZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQoKS4gVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUgY29uc3VtZWQKLSAqIHNpbmNlIHRoZW4gY2FuIGJlIHF1ZXJpZWQgd2l0aCBnc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQoKS4KLSAqCi0gKiBBIGxhc3QgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IHdoaWxlICNHc3RBZGFwdGVyIGlzIHByZXR0eSBvcHRpbWl6ZWQsCi0gKiBtZXJnaW5nIGJ1ZmZlcnMgc3RpbGwgbWlnaHQgYmUgYW4gb3BlcmF0aW9uIHRoYXQgcmVxdWlyZXMgYSBtYWxsb2MoKSBhbmQKLSAqIG1lbWNweSgpIG9wZXJhdGlvbiwgYW5kIHRoZXNlIG9wZXJhdGlvbnMgYXJlIG5vdCB0aGUgZmFzdGVzdC4gQmVjYXVzZSBvZgotICogdGhpcywgc29tZSBmdW5jdGlvbnMgbGlrZSBnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCgpIGFyZSBwcm92aWRlZCB0byBoZWxwCi0gKiBzcGVlZCB1cCBzdWNoIGNhc2VzIHNob3VsZCB5b3Ugd2FudCB0by4gVG8gYXZvaWQgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb25zLAotICogZ3N0X2FkYXB0ZXJfY29weSgpIGNhbiBiZSB1c2VkIHRvIGNvcHkgZGF0YSBpbnRvIGEgKHN0YXRpY2FsbHkgYWxsb2NhdGVkKQotICogdXNlciBwcm92aWRlZCBidWZmZXIuCi0gKgotICogI0dzdEFkYXB0ZXIgaXMgbm90IE1UIHNhZmUuIEFsbCBvcGVyYXRpb25zIG9uIGFuIGFkYXB0ZXIgbXVzdCBiZSBzZXJpYWxpemVkIGJ5Ci0gKiB0aGUgY2FsbGVyLiBUaGlzIGlzIG5vdCBub3JtYWxseSBhIHByb2JsZW0sIGhvd2V2ZXIsIGFzIHRoZSBub3JtYWwgdXNlIGNhc2UKLSAqIG9mICNHc3RBZGFwdGVyIGlzIGluc2lkZSBvbmUgcGFkJ3MgY2hhaW4gZnVuY3Rpb24sIGluIHdoaWNoIGNhc2UgYWNjZXNzIGlzCi0gKiBzZXJpYWxpemVkIHZpYSB0aGUgcGFkJ3MgU1RSRUFNX0xPQ0suCi0gKgotICogTm90ZSB0aGF0IGdzdF9hZGFwdGVyX3B1c2goKSB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciBwYXNzZWQuIFVzZQotICogZ3N0X2J1ZmZlcl9yZWYoKSBiZWZvcmUgcHVzaGluZyBpdCBpbnRvIHRoZSBhZGFwdGVyIGlmIHlvdSBzdGlsbCB3YW50IHRvCi0gKiBhY2Nlc3MgdGhlIGJ1ZmZlciBsYXRlci4gVGhlIGFkYXB0ZXIgd2lsbCBuZXZlciBtb2RpZnkgdGhlIGRhdGEgaW4gdGhlCi0gKiBidWZmZXIgcHVzaGVkIGluIGl0LgotICovCi0KLSNpbmNsdWRlIDxnc3QvZ3N0X3ByaXZhdGUuaD4KLSNpbmNsdWRlICJnc3RhZGFwdGVyLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIGRlZmF1bHQgc2l6ZSBmb3IgdGhlIGFzc2VtYmxlZCBkYXRhIGJ1ZmZlciAqLwotI2RlZmluZSBERUZBVUxUX1NJWkUgNDA5NgotCi1zdGF0aWMgdm9pZCBnc3RfYWRhcHRlcl9mbHVzaF91bmNoZWNrZWQgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBmbHVzaCk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9hZGFwdGVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9hZGFwdGVyX2RlYnVnCi0KLXN0cnVjdCBfR3N0QWRhcHRlcgotewotICBHT2JqZWN0IG9iamVjdDsKLQotICAvKjwgcHJpdmF0ZSA+ICovCi0gIEdTTGlzdCAqYnVmbGlzdDsKLSAgR1NMaXN0ICpidWZsaXN0X2VuZDsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3NpemUgc2tpcDsKLSAgZ3VpbnQgY291bnQ7Ci0KLSAgLyogd2Uga2VlcCBzdGF0ZSBvZiBhc3NlbWJsZWQgcGllY2VzICovCi0gIGdwb2ludGVyIGFzc2VtYmxlZF9kYXRhOwotICBnc2l6ZSBhc3NlbWJsZWRfc2l6ZTsKLSAgZ3NpemUgYXNzZW1ibGVkX2xlbjsKLQotICBHc3RDbG9ja1RpbWUgcHRzOwotICBndWludDY0IHB0c19kaXN0YW5jZTsKLSAgR3N0Q2xvY2tUaW1lIGR0czsKLSAgZ3VpbnQ2NCBkdHNfZGlzdGFuY2U7Ci0gIGd1aW50NjQgb2Zmc2V0OwotICBndWludDY0IG9mZnNldF9kaXN0YW5jZTsKLQotICBnc2l6ZSBzY2FuX29mZnNldDsKLSAgR1NMaXN0ICpzY2FuX2VudHJ5OwotCi0gIEdzdENsb2NrVGltZSBwdHNfYXRfZGlzY29udDsKLSAgR3N0Q2xvY2tUaW1lIGR0c19hdF9kaXNjb250OwotICBndWludDY0IG9mZnNldF9hdF9kaXNjb250OwotCi0gIGd1aW50NjQgZGlzdGFuY2VfZnJvbV9kaXNjb250OwotCi0gIEdzdE1hcEluZm8gaW5mbzsKLX07Ci0KLXN0cnVjdCBfR3N0QWRhcHRlckNsYXNzCi17Ci0gIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9hZGFwdGVyX2RlYnVnLCAiYWRhcHRlciIsIDAsICJvYmplY3QgdG8gc3BsaWNlIGFuZCBtZXJnZSBidWZmZXJzIHRvIGRlc2lyZWQgc2l6ZSIpCi0jZGVmaW5lIGdzdF9hZGFwdGVyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RBZGFwdGVyLCBnc3RfYWRhcHRlciwgR19UWVBFX09CSkVDVCwgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZCBnc3RfYWRhcHRlcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9hZGFwdGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQKLWdzdF9hZGFwdGVyX2NsYXNzX2luaXQgKEdzdEFkYXB0ZXJDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdCA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgb2JqZWN0LT5kaXNwb3NlID0gZ3N0X2FkYXB0ZXJfZGlzcG9zZTsKLSAgb2JqZWN0LT5maW5hbGl6ZSA9IGdzdF9hZGFwdGVyX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FkYXB0ZXJfaW5pdCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIpCi17Ci0gIGFkYXB0ZXItPmFzc2VtYmxlZF9kYXRhID0gZ19tYWxsb2MgKERFRkFVTFRfU0laRSk7Ci0gIGFkYXB0ZXItPmFzc2VtYmxlZF9zaXplID0gREVGQVVMVF9TSVpFOwotICBhZGFwdGVyLT5wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBhZGFwdGVyLT5wdHNfZGlzdGFuY2UgPSAwOwotICBhZGFwdGVyLT5kdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBhZGFwdGVyLT5kdHNfZGlzdGFuY2UgPSAwOwotICBhZGFwdGVyLT5vZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICBhZGFwdGVyLT5vZmZzZXRfZGlzdGFuY2UgPSAwOwotICBhZGFwdGVyLT5wdHNfYXRfZGlzY29udCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGFkYXB0ZXItPmR0c19hdF9kaXNjb250ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgYWRhcHRlci0+b2Zmc2V0X2F0X2Rpc2NvbnQgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICBhZGFwdGVyLT5kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FkYXB0ZXJfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlciA9IEdTVF9BREFQVEVSIChvYmplY3QpOwotCi0gIGdzdF9hZGFwdGVyX2NsZWFyIChhZGFwdGVyKTsKLQotICBHU1RfQ0FMTF9QQVJFTlQgKEdfT0JKRUNUX0NMQVNTLCBkaXNwb3NlLCAob2JqZWN0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWRhcHRlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlciA9IEdTVF9BREFQVEVSIChvYmplY3QpOwotCi0gIGdfZnJlZSAoYWRhcHRlci0+YXNzZW1ibGVkX2RhdGEpOwotCi0gIEdTVF9DQUxMX1BBUkVOVCAoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfbmV3OgotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdEFkYXB0ZXIuIEZyZWUgd2l0aCBnX29iamVjdF91bnJlZigpLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEFkYXB0ZXIKLSAqLwotR3N0QWRhcHRlciAqCi1nc3RfYWRhcHRlcl9uZXcgKHZvaWQpCi17Ci0gIHJldHVybiBnX29iamVjdF9uZXd2IChHU1RfVFlQRV9BREFQVEVSLCAwLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl9jbGVhcjoKLSAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCi0gKgotICogUmVtb3ZlcyBhbGwgYnVmZmVycyBmcm9tIEBhZGFwdGVyLgotICovCi12b2lkCi1nc3RfYWRhcHRlcl9jbGVhciAoR3N0QWRhcHRlciAqIGFkYXB0ZXIpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19BREFQVEVSIChhZGFwdGVyKSk7Ci0KLSAgaWYgKGFkYXB0ZXItPmluZm8ubWVtb3J5KQotICAgIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyKTsKLQotICBnX3NsaXN0X2ZvcmVhY2ggKGFkYXB0ZXItPmJ1Zmxpc3QsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19zbGlzdF9mcmVlIChhZGFwdGVyLT5idWZsaXN0KTsKLSAgYWRhcHRlci0+YnVmbGlzdCA9IE5VTEw7Ci0gIGFkYXB0ZXItPmJ1Zmxpc3RfZW5kID0gTlVMTDsKLSAgYWRhcHRlci0+Y291bnQgPSAwOwotICBhZGFwdGVyLT5zaXplID0gMDsKLSAgYWRhcHRlci0+c2tpcCA9IDA7Ci0gIGFkYXB0ZXItPmFzc2VtYmxlZF9sZW4gPSAwOwotICBhZGFwdGVyLT5wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBhZGFwdGVyLT5wdHNfZGlzdGFuY2UgPSAwOwotICBhZGFwdGVyLT5kdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBhZGFwdGVyLT5kdHNfZGlzdGFuY2UgPSAwOwotICBhZGFwdGVyLT5vZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICBhZGFwdGVyLT5vZmZzZXRfZGlzdGFuY2UgPSAwOwotICBhZGFwdGVyLT5wdHNfYXRfZGlzY29udCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGFkYXB0ZXItPmR0c19hdF9kaXNjb250ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgYWRhcHRlci0+b2Zmc2V0X2F0X2Rpc2NvbnQgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICBhZGFwdGVyLT5kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgPSAwOwotICBhZGFwdGVyLT5zY2FuX29mZnNldCA9IDA7Ci0gIGFkYXB0ZXItPnNjYW5fZW50cnkgPSBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXVwZGF0ZV90aW1lc3RhbXBzX2FuZF9vZmZzZXQgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdENsb2NrVGltZSBwdHMsIGR0czsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0KLSAgcHRzID0gR1NUX0JVRkZFUl9QVFMgKGJ1Zik7Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHRzKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAibmV3IHB0cyAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHB0cykpOwotICAgIGFkYXB0ZXItPnB0cyA9IHB0czsKLSAgICBhZGFwdGVyLT5wdHNfZGlzdGFuY2UgPSAwOwotICB9Ci0gIGR0cyA9IEdTVF9CVUZGRVJfRFRTIChidWYpOwotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR0cykpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgIm5ldyBkdHMgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChkdHMpKTsKLSAgICBhZGFwdGVyLT5kdHMgPSBkdHM7Ci0gICAgYWRhcHRlci0+ZHRzX2Rpc3RhbmNlID0gMDsKLSAgfQotICBvZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKTsKLSAgaWYgKG9mZnNldCAhPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJuZXcgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0gICAgYWRhcHRlci0+b2Zmc2V0ID0gb2Zmc2V0OwotICAgIGFkYXB0ZXItPm9mZnNldF9kaXN0YW5jZSA9IDA7Ci0gIH0KLQotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWYpKSB7Ci0gICAgLyogVGFrZSB2YWx1ZXMgYXMtaXMgKG1pZ2h0IGJlIE5PTkUpICovCi0gICAgYWRhcHRlci0+cHRzX2F0X2Rpc2NvbnQgPSBwdHM7Ci0gICAgYWRhcHRlci0+ZHRzX2F0X2Rpc2NvbnQgPSBkdHM7Ci0gICAgYWRhcHRlci0+b2Zmc2V0X2F0X2Rpc2NvbnQgPSBvZmZzZXQ7Ci0gICAgYWRhcHRlci0+ZGlzdGFuY2VfZnJvbV9kaXNjb250ID0gMDsKLSAgfQotfQotCi0vKiBjb3B5IGRhdGEgaW50byBAZGVzdCwgc2tpcHBpbmcgQHNraXAgYnl0ZXMgZnJvbSB0aGUgaGVhZCBidWZmZXJzICovCi1zdGF0aWMgdm9pZAotY29weV9pbnRvX3VuY2hlY2tlZCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGd1aW50OCAqIGRlc3QsIGdzaXplIHNraXAsCi0gICAgZ3NpemUgc2l6ZSkKLXsKLSAgR1NMaXN0ICpnOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3NpemUgYnNpemUsIGNzaXplOwotCi0gIC8qIGZpcnN0IHN0ZXAsIGRvIHNraXBwaW5nICovCi0gIC8qIHdlIG1pZ2h0IHdlbGwgYmUgY29weWluZyB3aGVyZSB3ZSB3ZXJlIHNjYW5uaW5nICovCi0gIGlmIChhZGFwdGVyLT5zY2FuX2VudHJ5ICYmIChhZGFwdGVyLT5zY2FuX29mZnNldCA8PSBza2lwKSkgewotICAgIGcgPSBhZGFwdGVyLT5zY2FuX2VudHJ5OwotICAgIHNraXAgLT0gYWRhcHRlci0+c2Nhbl9vZmZzZXQ7Ci0gIH0gZWxzZSB7Ci0gICAgZyA9IGFkYXB0ZXItPmJ1Zmxpc3Q7Ci0gIH0KLSAgYnVmID0gZy0+ZGF0YTsKLSAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICB3aGlsZSAoR19VTkxJS0VMWSAoc2tpcCA+PSBic2l6ZSkpIHsKLSAgICBza2lwIC09IGJzaXplOwotICAgIGcgPSBnX3NsaXN0X25leHQgKGcpOwotICAgIGJ1ZiA9IGctPmRhdGE7Ci0gICAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICB9Ci0gIC8qIGNvcHkgcGFydGlhbCBidWZmZXIgKi8KLSAgY3NpemUgPSBNSU4gKGJzaXplIC0gc2tpcCwgc2l6ZSk7Ci0gIEdTVF9ERUJVRyAoImJzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIHNraXAgJSIgR19HU0laRV9GT1JNQVQgIiwgY3NpemUgJSIKLSAgICAgIEdfR1NJWkVfRk9STUFULCBic2l6ZSwgc2tpcCwgY3NpemUpOwotICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfUEVSRk9STUFOQ0UsIGFkYXB0ZXIsICJleHRyYWN0ICUiIEdfR1NJWkVfRk9STUFUCi0gICAgICAiIGJ5dGVzIiwgY3NpemUpOwotICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1Ziwgc2tpcCwgZGVzdCwgY3NpemUpOwotICBzaXplIC09IGNzaXplOwotICBkZXN0ICs9IGNzaXplOwotCi0gIC8qIHNlY29uZCBzdGVwLCBjb3B5IHJlbWFpbmRlciAqLwotICB3aGlsZSAoc2l6ZSA+IDApIHsKLSAgICBnID0gZ19zbGlzdF9uZXh0IChnKTsKLSAgICBidWYgPSBnLT5kYXRhOwotICAgIGJzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgICBpZiAoR19MSUtFTFkgKGJzaXplID4gMCkpIHsKLSAgICAgIGNzaXplID0gTUlOIChic2l6ZSwgc2l6ZSk7Ci0gICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKEdTVF9DQVRfUEVSRk9STUFOQ0UsIGFkYXB0ZXIsCi0gICAgICAgICAgImV4dHJhY3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIGNzaXplKTsKLSAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCBkZXN0LCBjc2l6ZSk7Ci0gICAgICBzaXplIC09IGNzaXplOwotICAgICAgZGVzdCArPSBjc2l6ZTsKLSAgICB9Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl9wdXNoOgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBidWY6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QnVmZmVyIHRvIGFkZCB0byBxdWV1ZSBpbiB0aGUgYWRhcHRlcgotICoKLSAqIEFkZHMgdGhlIGRhdGEgZnJvbSBAYnVmIHRvIHRoZSBkYXRhIHN0b3JlZCBpbnNpZGUgQGFkYXB0ZXIgYW5kIHRha2VzCi0gKiBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlci4KLSAqLwotdm9pZAotZ3N0X2FkYXB0ZXJfcHVzaCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ3NpemUgc2l6ZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlcikpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWYpKTsKLQotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgYWRhcHRlci0+c2l6ZSArPSBzaXplOwotCi0gIC8qIE5vdGU6IG1lcmdpbmcgYnVmZmVycyBhdCB0aGlzIHBvaW50IGlzIHByZW1hdHVyZS4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGFkYXB0ZXItPmJ1Zmxpc3QgPT0gTlVMTCkpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgInB1c2hpbmcgJXAgZmlyc3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICAgIGJ1Ziwgc2l6ZSk7Ci0gICAgYWRhcHRlci0+YnVmbGlzdCA9IGFkYXB0ZXItPmJ1Zmxpc3RfZW5kID0gZ19zbGlzdF9hcHBlbmQgKE5VTEwsIGJ1Zik7Ci0gICAgdXBkYXRlX3RpbWVzdGFtcHNfYW5kX29mZnNldCAoYWRhcHRlciwgYnVmKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBPdGhlcndpc2UgYXBwZW5kIHRvIHRoZSBlbmQsIGFuZCBhZHZhbmNlIG91ciBlbmQgcG9pbnRlciAqLwotICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAicHVzaGluZyAlcCAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIGF0IGVuZCwgIgotICAgICAgICAic2l6ZSBub3cgJSIgR19HU0laRV9GT1JNQVQsIGJ1Ziwgc2l6ZSwgYWRhcHRlci0+c2l6ZSk7Ci0gICAgYWRhcHRlci0+YnVmbGlzdF9lbmQgPSBnX3NsaXN0X2FwcGVuZCAoYWRhcHRlci0+YnVmbGlzdF9lbmQsIGJ1Zik7Ci0gICAgYWRhcHRlci0+YnVmbGlzdF9lbmQgPSBnX3NsaXN0X25leHQgKGFkYXB0ZXItPmJ1Zmxpc3RfZW5kKTsKLSAgfQotICArK2FkYXB0ZXItPmNvdW50OwotfQotCi0jaWYgMAotLyogSW50ZXJuYWwgbWV0aG9kIG9ubHkuIFRyaWVzIHRvIG1lcmdlIGJ1ZmZlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlCi0gKiB0byBmb3JtIGEgc2luZ2xlIGxhcmdlciBidWZmZXIgb2Ygc2l6ZSAnc2l6ZScuCi0gKgotICogUmV0dXJucyAlVFJVRSBpZiBpdCBtYW5hZ2VkIHRvIG1lcmdlIGFueXRoaW5nLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hZGFwdGVyX3RyeV90b19tZXJnZV91cCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIHNpemUpCi17Ci0gIEdzdEJ1ZmZlciAqY3VyLCAqaGVhZDsKLSAgR1NMaXN0ICpnOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgZ3NpemUgaHNpemU7Ci0KLSAgZyA9IGFkYXB0ZXItPmJ1Zmxpc3Q7Ci0gIGlmIChnID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGhlYWQgPSBnLT5kYXRhOwotCi0gIGhzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaGVhZCk7Ci0KLSAgLyogUmVtb3ZlIHNraXBwZWQgcGFydCBmcm9tIHRoZSBidWZmZXIgKG90aGVyd2lzZSB0aGUgYnVmZmVyIG1pZ2h0IGdyb3cgaW5kZWZpbml0ZWx5KSAqLwotICBoZWFkID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChoZWFkKTsKLSAgZ3N0X2J1ZmZlcl9yZXNpemUgKGhlYWQsIGFkYXB0ZXItPnNraXAsIGhzaXplIC0gYWRhcHRlci0+c2tpcCk7Ci0gIGhzaXplIC09IGFkYXB0ZXItPnNraXA7Ci0gIGFkYXB0ZXItPnNraXAgPSAwOwotICBnLT5kYXRhID0gaGVhZDsKLQotICBnID0gZ19zbGlzdF9uZXh0IChnKTsKLQotICB3aGlsZSAoZyAhPSBOVUxMICYmIGhzaXplIDwgc2l6ZSkgewotICAgIGN1ciA9IGctPmRhdGE7Ci0gICAgLyogTWVyZ2UgdGhlIGhlYWQgYnVmZmVyIGFuZCB0aGUgbmV4dCBpbiBsaW5lICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJNZXJnaW5nIGJ1ZmZlcnMgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiICYgJSIKLSAgICAgICAgR19HU0laRV9GT1JNQVQgIiBpbiBzZWFyY2ggb2YgdGFyZ2V0ICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgICBoc2l6ZSwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKSwgc2l6ZSk7Ci0KLSAgICBoZWFkID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKGhlYWQsIGN1cik7Ci0gICAgaHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChoZWFkKTsKLSAgICByZXQgPSBUUlVFOwotCi0gICAgLyogRGVsZXRlIHRoZSBmcm9udCBsaXN0IGl0ZW0sIGFuZCBzdG9yZSBvdXIgbmV3IGJ1ZmZlciBpbiB0aGUgMm5kIGxpc3QKLSAgICAgKiBpdGVtICovCi0gICAgYWRhcHRlci0+YnVmbGlzdCA9IGdfc2xpc3RfZGVsZXRlX2xpbmsgKGFkYXB0ZXItPmJ1Zmxpc3QsIGFkYXB0ZXItPmJ1Zmxpc3QpOwotICAgIGctPmRhdGEgPSBoZWFkOwotCi0gICAgLyogaW52YWxpZGF0ZSBzY2FuIHBvc2l0aW9uICovCi0gICAgYWRhcHRlci0+c2Nhbl9vZmZzZXQgPSAwOwotICAgIGFkYXB0ZXItPnNjYW5fZW50cnkgPSBOVUxMOwotCi0gICAgZyA9IGdfc2xpc3RfbmV4dCAoZyk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLS8qKgotICogZ3N0X2FkYXB0ZXJfbWFwOgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG1hcC9wZWVrCi0gKgotICogR2V0cyB0aGUgZmlyc3QgQHNpemUgYnl0ZXMgc3RvcmVkIGluIHRoZSBAYWRhcHRlci4gVGhlIHJldHVybmVkIHBvaW50ZXIgaXMKLSAqIHZhbGlkIHVudGlsIHRoZSBuZXh0IGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB0aGUgYWRhcHRlci4KLSAqCi0gKiBOb3RlIHRoYXQgc2V0dGluZyB0aGUgcmV0dXJuZWQgcG9pbnRlciBhcyB0aGUgZGF0YSBvZiBhICNHc3RCdWZmZXIgaXMKLSAqIGluY29ycmVjdCBmb3IgZ2VuZXJhbC1wdXJwb3NlIHBsdWdpbnMuIFRoZSByZWFzb24gaXMgdGhhdCBpZiBhIGRvd25zdHJlYW0KLSAqIGVsZW1lbnQgc3RvcmVzIHRoZSBidWZmZXIgc28gdGhhdCBpdCBoYXMgYWNjZXNzIHRvIGl0IG91dHNpZGUgb2YgdGhlIGJvdW5kcwotICogb2YgaXRzIGNoYWluIGZ1bmN0aW9uLCB0aGUgYnVmZmVyIHdpbGwgaGF2ZSBhbiBpbnZhbGlkIGRhdGEgcG9pbnRlciBhZnRlcgotICogeW91ciBlbGVtZW50IGZsdXNoZXMgdGhlIGJ5dGVzLiBJbiB0aGF0IGNhc2UgeW91IHNob3VsZCB1c2UKLSAqIGdzdF9hZGFwdGVyX3Rha2UoKSwgd2hpY2ggcmV0dXJucyBhIGZyZXNobHktYWxsb2NhdGVkIGJ1ZmZlciB0aGF0IHlvdSBjYW4gc2V0Ci0gKiBhcyAjR3N0QnVmZmVyIG1lbW9yeSBvciB0aGUgcG90ZW50aWFsbHkgbW9yZSBwZXJmb3JtYW50Ci0gKiBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcigpLgotICoKLSAqIFJldHVybnMgJU5VTEwgaWYgQHNpemUgYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSkgKGVsZW1lbnQtdHlwZSBndWludDgpIChudWxsYWJsZSk6Ci0gKiAgICAgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBAc2l6ZSBieXRlcyBvZiBkYXRhLCBvciAlTlVMTAotICovCi1nY29uc3Rwb2ludGVyCi1nc3RfYWRhcHRlcl9tYXAgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBzaXplKQotewotICBHc3RCdWZmZXIgKmN1cjsKLSAgZ3NpemUgc2tpcCwgY3NpemU7Ci0gIGdzaXplIHRvcmV1c2UsIHRvY29weTsKLSAgZ3VpbnQ4ICpkYXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2l6ZSA+IDAsIE5VTEwpOwotCi0gIGlmIChhZGFwdGVyLT5pbmZvLm1lbW9yeSkKLSAgICBnc3RfYWRhcHRlcl91bm1hcCAoYWRhcHRlcik7Ci0KLSAgLyogd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSwgcmV0dXJuIE5VTEwuIFRoaXMgaXMgdW5saWtlbHkKLSAgICogYXMgb25lIHVzdWFsbHkgZG9lcyBhbiBfYXZhaWxhYmxlKCkgZmlyc3QgaW5zdGVhZCBvZiBwZWVraW5nIGEKLSAgICogcmFuZG9tIHNpemUuICovCi0gIGlmIChHX1VOTElLRUxZIChzaXplID4gYWRhcHRlci0+c2l6ZSkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogd2UgaGF2ZSBlbm91Z2ggYXNzZW1ibGVkIGRhdGEsIHJldHVybiBpdCAqLwotICBpZiAoYWRhcHRlci0+YXNzZW1ibGVkX2xlbiA+PSBzaXplKQotICAgIHJldHVybiBhZGFwdGVyLT5hc3NlbWJsZWRfZGF0YTsKLQotI2lmIDAKLSAgZG8gewotI2VuZGlmCi0gICAgY3VyID0gYWRhcHRlci0+YnVmbGlzdC0+ZGF0YTsKLSAgICBza2lwID0gYWRhcHRlci0+c2tpcDsKLQotICAgIGNzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKTsKLSAgICBpZiAoY3NpemUgPj0gc2l6ZSArIHNraXApIHsKLSAgICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGN1ciwgJmFkYXB0ZXItPmluZm8sIEdTVF9NQVBfUkVBRCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgcmV0dXJuIChndWludDggKikgYWRhcHRlci0+aW5mby5kYXRhICsgc2tpcDsKLSAgICB9Ci0gICAgLyogV2UgbWF5IGJlIGFibGUgdG8gZWZmaWNpZW50bHkgbWVyZ2UgYnVmZmVycyBpbiBvdXIgcG9vbCB0bwotICAgICAqIGdhdGhlciBhIGJpZyBlbm91Z2ggY2h1bmsgdG8gcmV0dXJuIGl0IGZyb20gdGhlIGhlYWQgYnVmZmVyIGRpcmVjdGx5ICovCi0jaWYgMAotICB9IHdoaWxlIChnc3RfYWRhcHRlcl90cnlfdG9fbWVyZ2VfdXAgKGFkYXB0ZXIsIHNpemUpKTsKLSNlbmRpZgotCi0gIC8qIHNlZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXVzZSBmcm9tIHRoZSBhc3NlbWJsZWQgbWVtb3J5IGFuZCBob3cgbXVjaAotICAgKiB3ZSBuZWVkIHRvIGNvcHkgKi8KLSAgdG9yZXVzZSA9IGFkYXB0ZXItPmFzc2VtYmxlZF9sZW47Ci0gIHRvY29weSA9IHNpemUgLSB0b3JldXNlOwotCi0gIC8qIEdvbm5hIG5lZWQgdG8gY29weSBzdHVmZiBvdXQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGFkYXB0ZXItPmFzc2VtYmxlZF9zaXplIDwgc2l6ZSkpIHsKLSAgICBhZGFwdGVyLT5hc3NlbWJsZWRfc2l6ZSA9IChzaXplIC8gREVGQVVMVF9TSVpFICsgMSkgKiBERUZBVUxUX1NJWkU7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYWRhcHRlciwgInJlc2l6aW5nIGludGVybmFsIGJ1ZmZlciB0byAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgYWRhcHRlci0+YXNzZW1ibGVkX3NpemUpOwotICAgIGlmICh0b3JldXNlID09IDApIHsKLSAgICAgIEdTVF9DQVRfREVCVUcgKEdTVF9DQVRfUEVSRk9STUFOQ0UsICJhbGxvYyBuZXcgYnVmZmVyIik7Ci0gICAgICAvKiBubyBnX3JlYWxsb2MgdG8gYXZvaWQgYSBtZW1jcHkgdGhhdCBpcyBub3QgZGVzaXJlZCBoZXJlIHNpbmNlIHdlIGFyZQotICAgICAgICogbm90IGdvaW5nIHRvIHJldXNlIGFueSBkYXRhIGhlcmUgKi8KLSAgICAgIGdfZnJlZSAoYWRhcHRlci0+YXNzZW1ibGVkX2RhdGEpOwotICAgICAgYWRhcHRlci0+YXNzZW1ibGVkX2RhdGEgPSBnX21hbGxvYyAoYWRhcHRlci0+YXNzZW1ibGVkX3NpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiB3ZSBhcmUgZ29pbmcgdG8gcmV1c2UgYWxsIGRhdGEsIHJlYWxsb2MgdGhlbiAqLwotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgInJldXNpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICAgICAgdG9yZXVzZSk7Ci0gICAgICBhZGFwdGVyLT5hc3NlbWJsZWRfZGF0YSA9Ci0gICAgICAgICAgZ19yZWFsbG9jIChhZGFwdGVyLT5hc3NlbWJsZWRfZGF0YSwgYWRhcHRlci0+YXNzZW1ibGVkX3NpemUpOwotICAgIH0KLSAgfQotICBHU1RfQ0FUX0RFQlVHIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCAiY29weSByZW1haW5pbmcgJSIgR19HU0laRV9GT1JNQVQKLSAgICAgICIgYnl0ZXMgZnJvbSBhZGFwdGVyIiwgdG9jb3B5KTsKLSAgZGF0YSA9IGFkYXB0ZXItPmFzc2VtYmxlZF9kYXRhOwotICBjb3B5X2ludG9fdW5jaGVja2VkIChhZGFwdGVyLCBkYXRhICsgdG9yZXVzZSwgc2tpcCArIHRvcmV1c2UsIHRvY29weSk7Ci0gIGFkYXB0ZXItPmFzc2VtYmxlZF9sZW4gPSBzaXplOwotCi0gIHJldHVybiBhZGFwdGVyLT5hc3NlbWJsZWRfZGF0YTsKLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl91bm1hcDoKLSAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCi0gKgotICogUmVsZWFzZXMgdGhlIG1lbW9yeSBvYnRhaW5lZCB3aXRoIHRoZSBsYXN0IGdzdF9hZGFwdGVyX21hcCgpLgotICovCi12b2lkCi1nc3RfYWRhcHRlcl91bm1hcCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19BREFQVEVSIChhZGFwdGVyKSk7Ci0KLSAgaWYgKGFkYXB0ZXItPmluZm8ubWVtb3J5KSB7Ci0gICAgR3N0QnVmZmVyICpjdXIgPSBhZGFwdGVyLT5idWZsaXN0LT5kYXRhOwotICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAidW5tYXAgbWVtb3J5IGJ1ZmZlciAlcCIsIGN1cik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoY3VyLCAmYWRhcHRlci0+aW5mbyk7Ci0gICAgYWRhcHRlci0+aW5mby5tZW1vcnkgPSBOVUxMOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfY29weTogKHNraXApCi0gKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgotICogQGRlc3Q6IChvdXQgY2FsbGVyLWFsbG9jYXRlcykgKGFycmF5IGxlbmd0aD1zaXplKSAoZWxlbWVudC10eXBlIGd1aW50OCk6Ci0gKiAgICAgdGhlIG1lbW9yeSB0byBjb3B5IGludG8KLSAqIEBvZmZzZXQ6IHRoZSBieXRlcyBvZmZzZXQgaW4gdGhlIGFkYXB0ZXIgdG8gc3RhcnQgZnJvbQotICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQotICoKLSAqIENvcGllcyBAc2l6ZSBieXRlcyBvZiBkYXRhIHN0YXJ0aW5nIGF0IEBvZmZzZXQgb3V0IG9mIHRoZSBidWZmZXJzCi0gKiBjb250YWluZWQgaW4gI0dzdEFkYXB0ZXIgaW50byBhbiBhcnJheSBAZGVzdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgotICoKLSAqIFRoZSBhcnJheSBAZGVzdCBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gQHNpemUgYnl0ZXMuCi0gKiBUaGUgdXNlciBzaG91bGQgY2hlY2sgdGhhdCB0aGUgYWRhcHRlciBoYXMgKEBvZmZzZXQgKyBAc2l6ZSkgYnl0ZXMKLSAqIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICovCi12b2lkCi1nc3RfYWRhcHRlcl9jb3B5IChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3BvaW50ZXIgZGVzdCwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlcikpOwotICBnX3JldHVybl9pZl9mYWlsIChzaXplID4gMCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG9mZnNldCArIHNpemUgPD0gYWRhcHRlci0+c2l6ZSk7Ci0KLSAgY29weV9pbnRvX3VuY2hlY2tlZCAoYWRhcHRlciwgZGVzdCwgb2Zmc2V0ICsgYWRhcHRlci0+c2tpcCwgc2l6ZSk7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfY29weV9ieXRlczogKHJlbmFtZS10byBnc3RfYWRhcHRlcl9jb3B5KQotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBvZmZzZXQ6IHRoZSBieXRlcyBvZmZzZXQgaW4gdGhlIGFkYXB0ZXIgdG8gc3RhcnQgZnJvbQotICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weQotICoKLSAqIFNpbWlsYXIgdG8gZ3N0X2FkYXB0ZXJfY29weSwgYnV0IG1vcmUgc3VpdGFibGUgZm9yIGxhbmd1YWdlIGJpbmRpbmdzLiBAc2l6ZQotICogYnl0ZXMgb2YgZGF0YSBzdGFydGluZyBhdCBAb2Zmc2V0IHdpbGwgYmUgY29waWVkIG91dCBvZiB0aGUgYnVmZmVycyBjb250YWluZWQKLSAqIGluIEBhZGFwdGVyIGFuZCBpbnRvIGEgbmV3ICNHQnl0ZXMgc3RydWN0dXJlIHdoaWNoIGlzIHJldHVybmVkLiBEZXBlbmRpbmcgb24KLSAqIHRoZSB2YWx1ZSBvZiB0aGUgQHNpemUgYXJndW1lbnQgYW4gZW1wdHkgI0dCeXRlcyBzdHJ1Y3R1cmUgbWF5IGJlIHJldHVybmVkLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSBuZXcgI0dCeXRlcyBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgY29waWVkIGRhdGEuCi0gKgotICogU2luY2U6IDEuNAotICovCi1HQnl0ZXMgKgotZ3N0X2FkYXB0ZXJfY29weV9ieXRlcyAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKLXsKLSAgZ3BvaW50ZXIgZGF0YTsKLSAgZGF0YSA9IGdfbWFsbG9jIChzaXplKTsKLSAgZ3N0X2FkYXB0ZXJfY29weSAoYWRhcHRlciwgZGF0YSwgb2Zmc2V0LCBzaXplKTsKLSAgcmV0dXJuIGdfYnl0ZXNfbmV3X3Rha2UgKGRhdGEsIHNpemUpOwotfQotCi0vKkZsdXNoZXMgdGhlIGZpcnN0IEBmbHVzaCBieXRlcyBpbiB0aGUgQGFkYXB0ZXIqLwotc3RhdGljIHZvaWQKLWdzdF9hZGFwdGVyX2ZsdXNoX3VuY2hlY2tlZCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIGZsdXNoKQotewotICBHc3RCdWZmZXIgKmN1cjsKLSAgZ3NpemUgc2l6ZTsKLSAgR1NMaXN0ICpnOwotCi0gIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAiZmx1c2hpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIGZsdXNoKTsKLQotICBpZiAoYWRhcHRlci0+aW5mby5tZW1vcnkpCi0gICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGFkYXB0ZXIpOwotCi0gIC8qIGNsZWFyIHN0YXRlICovCi0gIGFkYXB0ZXItPnNpemUgLT0gZmx1c2g7Ci0gIGFkYXB0ZXItPmFzc2VtYmxlZF9sZW4gPSAwOwotCi0gIC8qIHRha2Ugc2tpcCBpbnRvIGFjY291bnQgKi8KLSAgZmx1c2ggKz0gYWRhcHRlci0+c2tpcDsKLSAgLyogZGlzdGFuY2UgaXMgYWx3YXlzIGF0IGxlYXN0IHRoZSBhbW91bnQgb2Ygc2tpcHBlZCBieXRlcyAqLwotICBhZGFwdGVyLT5wdHNfZGlzdGFuY2UgLT0gYWRhcHRlci0+c2tpcDsKLSAgYWRhcHRlci0+ZHRzX2Rpc3RhbmNlIC09IGFkYXB0ZXItPnNraXA7Ci0gIGFkYXB0ZXItPm9mZnNldF9kaXN0YW5jZSAtPSBhZGFwdGVyLT5za2lwOwotICBhZGFwdGVyLT5kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgLT0gYWRhcHRlci0+c2tpcDsKLQotICBnID0gYWRhcHRlci0+YnVmbGlzdDsKLSAgY3VyID0gZy0+ZGF0YTsKLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cik7Ci0gIHdoaWxlIChmbHVzaCA+PSBzaXplKSB7Ci0gICAgLyogY2FuIHNraXAgd2hvbGUgYnVmZmVyICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJmbHVzaGluZyBvdXQgaGVhZCBidWZmZXIiKTsKLSAgICBhZGFwdGVyLT5wdHNfZGlzdGFuY2UgKz0gc2l6ZTsKLSAgICBhZGFwdGVyLT5kdHNfZGlzdGFuY2UgKz0gc2l6ZTsKLSAgICBhZGFwdGVyLT5vZmZzZXRfZGlzdGFuY2UgKz0gc2l6ZTsKLSAgICBhZGFwdGVyLT5kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgKz0gc2l6ZTsKLSAgICBmbHVzaCAtPSBzaXplOwotCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoY3VyKTsKLSAgICBnID0gZ19zbGlzdF9kZWxldGVfbGluayAoZywgZyk7Ci0gICAgLS1hZGFwdGVyLT5jb3VudDsKLQotICAgIGlmIChHX1VOTElLRUxZIChnID09IE5VTEwpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgImFkYXB0ZXIgZW1wdHkgbm93Iik7Ci0gICAgICBhZGFwdGVyLT5idWZsaXN0X2VuZCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgLyogdGhlcmUgaXMgYSBuZXcgaGVhZCBidWZmZXIsIHVwZGF0ZSB0aGUgdGltZXN0YW1wcyAqLwotICAgIGN1ciA9IGctPmRhdGE7Ci0gICAgdXBkYXRlX3RpbWVzdGFtcHNfYW5kX29mZnNldCAoYWRhcHRlciwgY3VyKTsKLSAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKTsKLSAgfQotICBhZGFwdGVyLT5idWZsaXN0ID0gZzsKLSAgLyogYWNjb3VudCBmb3IgdGhlIHJlbWFpbmluZyBieXRlcyAqLwotICBhZGFwdGVyLT5za2lwID0gZmx1c2g7Ci0gIGFkYXB0ZXItPnB0c19kaXN0YW5jZSArPSBmbHVzaDsKLSAgYWRhcHRlci0+ZHRzX2Rpc3RhbmNlICs9IGZsdXNoOwotICBhZGFwdGVyLT5vZmZzZXRfZGlzdGFuY2UgKz0gZmx1c2g7Ci0gIGFkYXB0ZXItPmRpc3RhbmNlX2Zyb21fZGlzY29udCArPSBmbHVzaDsKLSAgLyogaW52YWxpZGF0ZSBzY2FuIHBvc2l0aW9uICovCi0gIGFkYXB0ZXItPnNjYW5fb2Zmc2V0ID0gMDsKLSAgYWRhcHRlci0+c2Nhbl9lbnRyeSA9IE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfZmx1c2g6Ci0gKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgotICogQGZsdXNoOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGZsdXNoCi0gKgotICogRmx1c2hlcyB0aGUgZmlyc3QgQGZsdXNoIGJ5dGVzIGluIHRoZSBAYWRhcHRlci4gVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0Ci0gKiBhdCBsZWFzdCB0aGlzIG1hbnkgYnl0ZXMgYXJlIGF2YWlsYWJsZS4KLSAqCi0gKiBTZWUgYWxzbzogZ3N0X2FkYXB0ZXJfbWFwKCksIGdzdF9hZGFwdGVyX3VubWFwKCkKLSAqLwotdm9pZAotZ3N0X2FkYXB0ZXJfZmx1c2ggKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBmbHVzaCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmx1c2ggPD0gYWRhcHRlci0+c2l6ZSk7Ci0KLSAgLyogZmx1c2hpbmcgb3V0IDAgYnl0ZXMgd2lsbCBkbyBub3RoaW5nICovCi0gIGlmIChHX1VOTElLRUxZIChmbHVzaCA9PSAwKSkKLSAgICByZXR1cm47Ci0KLSAgZ3N0X2FkYXB0ZXJfZmx1c2hfdW5jaGVja2VkIChhZGFwdGVyLCBmbHVzaCk7Ci19Ci0KLS8qIGludGVybmFsIGZ1bmN0aW9uLCBuYnl0ZXMgc2hvdWxkIGJlIGZsdXNoZWQgaWYgbmVlZGVkIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAqLwotc3RhdGljIGd1aW50OCAqCi1nc3RfYWRhcHRlcl9nZXRfaW50ZXJuYWwgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBuYnl0ZXMpCi17Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgdG9yZXVzZSwgdG9jb3B5OwotCi0gIC8qIHNlZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXVzZSBmcm9tIHRoZSBhc3NlbWJsZWQgbWVtb3J5IGFuZCBob3cgbXVjaAotICAgKiB3ZSBuZWVkIHRvIGNvcHkgKi8KLSAgdG9yZXVzZSA9IE1JTiAobmJ5dGVzLCBhZGFwdGVyLT5hc3NlbWJsZWRfbGVuKTsKLSAgdG9jb3B5ID0gbmJ5dGVzIC0gdG9yZXVzZTsKLQotICAvKiBmaW5kIG1lbW9yeSB0byByZXR1cm4gKi8KLSAgaWYgKGFkYXB0ZXItPmFzc2VtYmxlZF9zaXplID49IG5ieXRlcyAmJiB0b3JldXNlID4gMCkgewotICAgIC8qIHdlIHJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBidXQgb25seSB3aGVuIHdlJ3JlIGdvaW5nIHRvIHJldXNlCi0gICAgICogc29tZXRoaW5nIGZyb20gaXQgYmVjYXVzZSBlbHNlIHdlIGFyZSB3b3JzZSB0aGFuIHRoZSBtYWxsb2MgYW5kIGNvcHkKLSAgICAgKiBjYXNlIGJlbG93ICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJyZXVzaW5nICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgb2YgYXNzZW1ibGVkIgotICAgICAgICAiIGRhdGEiLCB0b3JldXNlKTsKLSAgICAvKiB3ZSBoYXZlIGVub3VnaCBmcmVlIHNwYWNlIGluIHRoZSBhc3NlbWJsZWQgYXJyYXkgKi8KLSAgICBkYXRhID0gYWRhcHRlci0+YXNzZW1ibGVkX2RhdGE7Ci0gICAgLyogZmx1c2ggYWZ0ZXIgdGhpcyBmdW5jdGlvbiBzaG91bGQgc2V0IHRoZSBhc3NlbWJsZWRfc2l6ZSB0byAwICovCi0gICAgYWRhcHRlci0+YXNzZW1ibGVkX2RhdGEgPSBnX21hbGxvYyAoYWRhcHRlci0+YXNzZW1ibGVkX3NpemUpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAiYWxsb2NhdGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgbmJ5dGVzKTsKLSAgICAvKiBub3QgZW5vdWdoIGJ5dGVzIGluIHRoZSBhc3NlbWJsZWQgYXJyYXksIGp1c3QgYWxsb2NhdGUgbmV3IHNwYWNlICovCi0gICAgZGF0YSA9IGdfbWFsbG9jIChuYnl0ZXMpOwotICAgIC8qIHJldXNlIHdoYXQgd2UgY2FuIGZyb20gdGhlIGFscmVhZHkgYXNzZW1ibGVkIGRhdGEgKi8KLSAgICBpZiAodG9yZXVzZSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJyZXVzaW5nICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCB0b3JldXNlKTsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgYWRhcHRlciwKLSAgICAgICAgICAibWVtY3B5ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCB0b3JldXNlKTsKLSAgICAgIG1lbWNweSAoZGF0YSwgYWRhcHRlci0+YXNzZW1ibGVkX2RhdGEsIHRvcmV1c2UpOwotICAgIH0KLSAgfQotICBpZiAodG9jb3B5KSB7Ci0gICAgLyogY29weSB0aGUgcmVtYWluaW5nIGRhdGEgKi8KLSAgICBjb3B5X2ludG9fdW5jaGVja2VkIChhZGFwdGVyLCB0b3JldXNlICsgZGF0YSwgdG9yZXVzZSArIGFkYXB0ZXItPnNraXAsCi0gICAgICAgIHRvY29weSk7Ci0gIH0KLSAgcmV0dXJuIGRhdGE7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfdGFrZToKLSAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCi0gKiBAbmJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRha2UKLSAqCi0gKiBSZXR1cm5zIGEgZnJlc2hseSBhbGxvY2F0ZWQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZpcnN0IEBuYnl0ZXMgYnl0ZXMgb2YgdGhlCi0gKiBAYWRhcHRlci4gVGhlIHJldHVybmVkIGJ5dGVzIHdpbGwgYmUgZmx1c2hlZCBmcm9tIHRoZSBhZGFwdGVyLgotICoKLSAqIENhbGxlciBvd25zIHJldHVybmVkIHZhbHVlLiBnX2ZyZWUgYWZ0ZXIgdXNhZ2UuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChhcnJheSBsZW5ndGg9bmJ5dGVzKSAoZWxlbWVudC10eXBlIGd1aW50OCkgKG51bGxhYmxlKToKLSAqICAgICBvdmVuLWZyZXNoIGhvdCBkYXRhLCBvciAlTlVMTCBpZiBAbmJ5dGVzIGJ5dGVzIGFyZSBub3QgYXZhaWxhYmxlCi0gKi8KLWdwb2ludGVyCi1nc3RfYWRhcHRlcl90YWtlIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3NpemUgbmJ5dGVzKQotewotICBncG9pbnRlciBkYXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmJ5dGVzID4gMCwgTlVMTCk7Ci0KLSAgLyogd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSwgcmV0dXJuIE5VTEwuIFRoaXMgaXMgdW5saWtlbHkKLSAgICogYXMgb25lIHVzdWFsbHkgZG9lcyBhbiBfYXZhaWxhYmxlKCkgZmlyc3QgaW5zdGVhZCBvZiBwZWVraW5nIGEKLSAgICogcmFuZG9tIHNpemUuICovCi0gIGlmIChHX1VOTElLRUxZIChuYnl0ZXMgPiBhZGFwdGVyLT5zaXplKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBkYXRhID0gZ3N0X2FkYXB0ZXJfZ2V0X2ludGVybmFsIChhZGFwdGVyLCBuYnl0ZXMpOwotCi0gIGdzdF9hZGFwdGVyX2ZsdXNoX3VuY2hlY2tlZCAoYWRhcHRlciwgbmJ5dGVzKTsKLQotICByZXR1cm4gZGF0YTsKLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl9nZXRfYnVmZmVyX2Zhc3Q6Ci0gKiBAYWRhcHRlcjogIGEgI0dzdEFkYXB0ZXIKLSAqIEBuYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZ2V0Ci0gKgotICogUmV0dXJucyBhICNHc3RCdWZmZXIgY29udGFpbmluZyB0aGUgZmlyc3QgQG5ieXRlcyBvZiB0aGUgQGFkYXB0ZXIsIGJ1dAotICogZG9lcyBub3QgZmx1c2ggdGhlbSBmcm9tIHRoZSBhZGFwdGVyLiBTZWUgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdCgpCi0gKiBmb3IgZGV0YWlscy4KLSAqCi0gKiBDYWxsZXIgb3ducyBhIHJlZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgYnVmZmVyLiBnc3RfYnVmZmVyX3VucmVmKCkgYWZ0ZXIKLSAqIHVzYWdlLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9idWZmZXJfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSAjR3N0QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZpcnN0Ci0gKiAgICAgQG5ieXRlcyBvZiB0aGUgYWRhcHRlciwgb3IgJU5VTEwgaWYgQG5ieXRlcyBieXRlcyBhcmUgbm90IGF2YWlsYWJsZS4KLSAqICAgICBnc3RfYnVmZmVyX3VucmVmKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0QnVmZmVyICoKLWdzdF9hZGFwdGVyX2dldF9idWZmZXJfZmFzdCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIG5ieXRlcykKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBOVUxMOwotICBHc3RCdWZmZXIgKmN1cjsKLSAgR1NMaXN0ICppdGVtOwotICBnc2l6ZSBza2lwOwotICBnc2l6ZSBsZWZ0ID0gbmJ5dGVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmJ5dGVzID4gMCwgTlVMTCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJnZXR0aW5nIGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwKLSAgICAgIG5ieXRlcyk7Ci0KLSAgLyogd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSwgcmV0dXJuIE5VTEwuIFRoaXMgaXMgdW5saWtlbHkKLSAgICogYXMgb25lIHVzdWFsbHkgZG9lcyBhbiBfYXZhaWxhYmxlKCkgZmlyc3QgaW5zdGVhZCBvZiBncmFiYmluZyBhCi0gICAqIHJhbmRvbSBzaXplLiAqLwotICBpZiAoR19VTkxJS0VMWSAobmJ5dGVzID4gYWRhcHRlci0+c2l6ZSkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgc2tpcCA9IGFkYXB0ZXItPnNraXA7Ci0gIGN1ciA9IGFkYXB0ZXItPmJ1Zmxpc3QtPmRhdGE7Ci0KLSAgaWYgKHNraXAgPT0gMCAmJiBnc3RfYnVmZmVyX2dldF9zaXplIChjdXIpID09IG5ieXRlcykgewotICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAicHJvdmlkaW5nIGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIgotICAgICAgICAiIGFzIGhlYWQgYnVmZmVyIiwgbmJ5dGVzKTsKLSAgICBidWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoY3VyKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBmb3IgKGl0ZW0gPSBhZGFwdGVyLT5idWZsaXN0OyBpdGVtICYmIGxlZnQgPiAwOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgIGdzaXplIHNpemUsIGN1cl9zaXplOwotCi0gICAgY3VyID0gaXRlbS0+ZGF0YTsKLSAgICBjdXJfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cik7Ci0gICAgc2l6ZSA9IE1JTiAoY3VyX3NpemUgLSBza2lwLCBsZWZ0KTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAiYXBwZW5kaW5nICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiCi0gICAgICAgICIgdmlhIHJlZ2lvbiBjb3B5Iiwgc2l6ZSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgIGdzdF9idWZmZXJfY29weV9pbnRvIChidWZmZXIsIGN1ciwKLSAgICAgICAgICBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZIHwgR1NUX0JVRkZFUl9DT1BZX01FVEEsIHNraXAsIHNpemUpOwotICAgIGVsc2UKLSAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGN1ciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgc2tpcCwgc2l6ZSk7Ci0gICAgc2tpcCA9IDA7Ci0gICAgbGVmdCAtPSBzaXplOwotICB9Ci0KLWRvbmU6Ci0KLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0OgotICogQGFkYXB0ZXI6ICBhICNHc3RBZGFwdGVyCi0gKiBAbmJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRha2UKLSAqCi0gKiBSZXR1cm5zIGEgI0dzdEJ1ZmZlciBjb250YWluaW5nIHRoZSBmaXJzdCBAbmJ5dGVzIG9mIHRoZSBAYWRhcHRlci4KLSAqIFRoZSByZXR1cm5lZCBieXRlcyB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0aGUgYWRhcHRlci4gIFRoaXMgZnVuY3Rpb24KLSAqIGlzIHBvdGVudGlhbGx5IG1vcmUgcGVyZm9ybWFudCB0aGFuIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKCkgc2luY2UKLSAqIGl0IGNhbiByZXVzZSB0aGUgbWVtb3J5IGluIHB1c2hlZCBidWZmZXJzIGJ5IHN1YmJ1ZmZlcmluZyBvcgotICogbWVyZ2luZy4gVW5saWtlIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKCksIHRoZSByZXR1cm5lZCBidWZmZXIgbWF5Ci0gKiBiZSBjb21wb3NlZCBvZiBtdWx0aXBsZSBub24tY29udGlndW91cyAjR3N0TWVtb3J5IG9iamVjdHMsIG5vCi0gKiBjb3BpZXMgYXJlIG1hZGUuCi0gKgotICogTm90ZSB0aGF0IG5vIGFzc3VtcHRpb25zIHNob3VsZCBiZSBtYWRlIGFzIHRvIHdoZXRoZXIgY2VydGFpbiBidWZmZXIKLSAqIGZsYWdzIHN1Y2ggYXMgdGhlIERJU0NPTlQgZmxhZyBhcmUgc2V0IG9uIHRoZSByZXR1cm5lZCBidWZmZXIsIG9yIG5vdC4KLSAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gZXhwbGljaXRseSBzZXQgb3IgdW5zZXQgZmxhZ3MgdGhhdCBzaG91bGQgYmUgc2V0IG9yCi0gKiB1bnNldC4KLSAqCi0gKiBUaGlzIHdpbGwgYWxzbyBjb3B5IG92ZXIgYWxsIEdzdE1ldGEgb2YgdGhlIGlucHV0IGJ1ZmZlcnMgZXhjZXB0Ci0gKiBmb3IgbWV0YSB3aXRoIHRoZSAlR1NUX01FVEFfRkxBR19QT09MRUQgZmxhZyBvciB3aXRoIHRoZSAibWVtb3J5IiB0YWcuCi0gKgotICogVGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIGJ1ZmZlciB1cCB0byB0aGUgcmV0dXJuIHZhbHVlIG9mCi0gKiBnc3RfYWRhcHRlcl9hdmFpbGFibGUoKSB3aXRob3V0IG1ha2luZyBjb3BpZXMgaWYgcG9zc2libGUuCi0gKgotICogQ2FsbGVyIG93bnMgYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIGJ1ZmZlci4gZ3N0X2J1ZmZlcl91bnJlZigpIGFmdGVyCi0gKiB1c2FnZS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdEJ1ZmZlciBjb250YWluaW5nIHRoZSBmaXJzdAotICogICAgIEBuYnl0ZXMgb2YgdGhlIGFkYXB0ZXIsIG9yICVOVUxMIGlmIEBuYnl0ZXMgYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUuCi0gKiAgICAgZ3N0X2J1ZmZlcl91bnJlZigpIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0IChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3NpemUgbmJ5dGVzKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5ieXRlcyA+IDAsIE5VTEwpOwotCi0gIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX2dldF9idWZmZXJfZmFzdCAoYWRhcHRlciwgbmJ5dGVzKTsKLSAgaWYgKGJ1ZmZlcikKLSAgICBnc3RfYWRhcHRlcl9mbHVzaF91bmNoZWNrZWQgKGFkYXB0ZXIsIG5ieXRlcyk7Ci0KLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mb3JlYWNoX21ldGFkYXRhIChHc3RCdWZmZXIgKiBpbmJ1ZiwgR3N0TWV0YSAqKiBtZXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gdXNlcl9kYXRhOwotICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9ICgqbWV0YSktPmluZm87Ci0gIGdib29sZWFuIGRvX2NvcHkgPSBGQUxTRTsKLQotICBpZiAoZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZyAoaW5mby0+YXBpLCBfZ3N0X21ldGFfdGFnX21lbW9yeSkpIHsKLSAgICAvKiBuZXZlciBjYWxsIHRoZSB0cmFuc2Zvcm1fbWV0YSB3aXRoIG1lbW9yeSBzcGVjaWZpYyBtZXRhZGF0YSAqLwotICAgIEdTVF9ERUJVRyAoIm5vdCBjb3B5aW5nIG1lbW9yeSBzcGVjaWZpYyBtZXRhZGF0YSAlcyIsCi0gICAgICAgIGdfdHlwZV9uYW1lIChpbmZvLT5hcGkpKTsKLSAgICBkb19jb3B5ID0gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgZG9fY29weSA9IFRSVUU7Ci0gICAgR1NUX0RFQlVHICgiY29weWluZyBtZXRhZGF0YSAlcyIsIGdfdHlwZV9uYW1lIChpbmZvLT5hcGkpKTsKLSAgfQotCi0gIGlmIChkb19jb3B5KSB7Ci0gICAgR3N0TWV0YVRyYW5zZm9ybUNvcHkgY29weV9kYXRhID0geyBGQUxTRSwgMCwgLTEgfTsKLSAgICBHU1RfREVCVUcgKCJjb3B5IG1ldGFkYXRhICVzIiwgZ190eXBlX25hbWUgKGluZm8tPmFwaSkpOwotICAgIC8qIHNpbXBseSBjb3B5IHRoZW4gKi8KLSAgICBpbmZvLT50cmFuc2Zvcm1fZnVuYyAob3V0YnVmLCAqbWV0YSwgaW5idWYsCi0gICAgICAgIF9nc3RfbWV0YV90cmFuc2Zvcm1fY29weSwgJmNvcHlfZGF0YSk7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcjoKLSAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCi0gKiBAbmJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldAotICoKLSAqIFJldHVybnMgYSAjR3N0QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZpcnN0IEBuYnl0ZXMgb2YgdGhlIEBhZGFwdGVyLCBidXQKLSAqIGRvZXMgbm90IGZsdXNoIHRoZW0gZnJvbSB0aGUgYWRhcHRlci4gU2VlIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyKCkKLSAqIGZvciBkZXRhaWxzLgotICoKLSAqIENhbGxlciBvd25zIGEgcmVmZXJlbmNlIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuIGdzdF9idWZmZXJfdW5yZWYoKSBhZnRlcgotICogdXNhZ2UuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2J1ZmZlcl91bnJlZgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhICNHc3RCdWZmZXIgY29udGFpbmluZyB0aGUgZmlyc3QKLSAqICAgICBAbmJ5dGVzIG9mIHRoZSBhZGFwdGVyLCBvciAlTlVMTCBpZiBAbmJ5dGVzIGJ5dGVzIGFyZSBub3QgYXZhaWxhYmxlLgotICogICAgIGdzdF9idWZmZXJfdW5yZWYoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RCdWZmZXIgKgotZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlciAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIG5ieXRlcykKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdEJ1ZmZlciAqY3VyOwotICBnc2l6ZSBoc2l6ZSwgc2tpcDsKLSAgZ3VpbnQ4ICpkYXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmJ5dGVzID4gMCwgTlVMTCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJnZXR0aW5nIGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwKLSAgICAgIG5ieXRlcyk7Ci0KLSAgLyogd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSwgcmV0dXJuIE5VTEwuIFRoaXMgaXMgdW5saWtlbHkKLSAgICogYXMgb25lIHVzdWFsbHkgZG9lcyBhbiBfYXZhaWxhYmxlKCkgZmlyc3QgaW5zdGVhZCBvZiBncmFiYmluZyBhCi0gICAqIHJhbmRvbSBzaXplLiAqLwotICBpZiAoR19VTkxJS0VMWSAobmJ5dGVzID4gYWRhcHRlci0+c2l6ZSkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgY3VyID0gYWRhcHRlci0+YnVmbGlzdC0+ZGF0YTsKLSAgc2tpcCA9IGFkYXB0ZXItPnNraXA7Ci0gIGhzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKTsKLQotICAvKiBvdXIgaGVhZCBidWZmZXIgaGFzIGVub3VnaCBkYXRhIGxlZnQsIHJldHVybiBpdCAqLwotICBpZiAoc2tpcCA9PSAwICYmIGhzaXplID09IG5ieXRlcykgewotICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAicHJvdmlkaW5nIGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIgotICAgICAgICAiIGFzIGhlYWQgYnVmZmVyIiwgbmJ5dGVzKTsKLSAgICBidWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoY3VyKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0gZWxzZSBpZiAoaHNpemUgPj0gbmJ5dGVzICsgc2tpcCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAicHJvdmlkaW5nIGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIgotICAgICAgICAiIHZpYSByZWdpb24gY29weSIsIG5ieXRlcyk7Ci0gICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoY3VyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBza2lwLCBuYnl0ZXMpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotI2lmIDAKLSAgaWYgKGdzdF9hZGFwdGVyX3RyeV90b19tZXJnZV91cCAoYWRhcHRlciwgbmJ5dGVzKSkgewotICAgIC8qIE1lcmdlZCBzb21ldGhpbmcsIGxldCdzIHRyeSBhZ2FpbiBmb3Igc3ViLWJ1ZmZlcmluZyAqLwotICAgIGN1ciA9IGFkYXB0ZXItPmJ1Zmxpc3QtPmRhdGE7Ci0gICAgc2tpcCA9IGFkYXB0ZXItPnNraXA7Ci0gICAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cikgPj0gbmJ5dGVzICsgc2tpcCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKGFkYXB0ZXIsICJwcm92aWRpbmcgYnVmZmVyIG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiCi0gICAgICAgICAgIiB2aWEgc3ViLWJ1ZmZlciIsIG5ieXRlcyk7Ci0gICAgICBidWZmZXIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChjdXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIHNraXAsIG5ieXRlcyk7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICBkYXRhID0gZ3N0X2FkYXB0ZXJfZ2V0X2ludGVybmFsIChhZGFwdGVyLCBuYnl0ZXMpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGRhdGEsIG5ieXRlcyk7Ci0KLSAgewotICAgIEdTTGlzdCAqZzsKLSAgICBHc3RCdWZmZXIgKmN1cjsKLSAgICBnc2l6ZSByZWFkX29mZnNldCA9IDA7Ci0KLSAgICBnID0gYWRhcHRlci0+YnVmbGlzdDsKLSAgICB3aGlsZSAoZyAmJiByZWFkX29mZnNldCA8IG5ieXRlcyArIGFkYXB0ZXItPnNraXApIHsKLSAgICAgIGN1ciA9IGctPmRhdGE7Ci0KLSAgICAgIGdzdF9idWZmZXJfZm9yZWFjaF9tZXRhIChjdXIsIGZvcmVhY2hfbWV0YWRhdGEsIGJ1ZmZlcik7Ci0gICAgICByZWFkX29mZnNldCArPSBnc3RfYnVmZmVyX2dldF9zaXplIChjdXIpOwotCi0gICAgICBnID0gZ19zbGlzdF9uZXh0IChnKTsKLSAgICB9Ci0gIH0KLQotZG9uZToKLQotICByZXR1cm4gYnVmZmVyOwotfQotCi0vKioKLSAqIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyOgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBuYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZQotICoKLSAqIFJldHVybnMgYSAjR3N0QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZpcnN0IEBuYnl0ZXMgYnl0ZXMgb2YgdGhlCi0gKiBAYWRhcHRlci4gVGhlIHJldHVybmVkIGJ5dGVzIHdpbGwgYmUgZmx1c2hlZCBmcm9tIHRoZSBhZGFwdGVyLgotICogVGhpcyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBtb3JlIHBlcmZvcm1hbnQgdGhhbgotICogZ3N0X2FkYXB0ZXJfdGFrZSgpIHNpbmNlIGl0IGNhbiByZXVzZSB0aGUgbWVtb3J5IGluIHB1c2hlZCBidWZmZXJzCi0gKiBieSBzdWJidWZmZXJpbmcgb3IgbWVyZ2luZy4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gYQotICogYnVmZmVyIHdpdGggYSBzaW5nbGUgbWVtb3J5IHJlZ2lvbi4KLSAqCi0gKiBOb3RlIHRoYXQgbm8gYXNzdW1wdGlvbnMgc2hvdWxkIGJlIG1hZGUgYXMgdG8gd2hldGhlciBjZXJ0YWluIGJ1ZmZlcgotICogZmxhZ3Mgc3VjaCBhcyB0aGUgRElTQ09OVCBmbGFnIGFyZSBzZXQgb24gdGhlIHJldHVybmVkIGJ1ZmZlciwgb3Igbm90LgotICogVGhlIGNhbGxlciBuZWVkcyB0byBleHBsaWNpdGx5IHNldCBvciB1bnNldCBmbGFncyB0aGF0IHNob3VsZCBiZSBzZXQgb3IKLSAqIHVuc2V0LgotICoKLSAqIFNpbmNlIDEuNiB0aGlzIHdpbGwgYWxzbyBjb3B5IG92ZXIgYWxsIEdzdE1ldGEgb2YgdGhlIGlucHV0IGJ1ZmZlcnMgZXhjZXB0Ci0gKiBmb3IgbWV0YSB3aXRoIHRoZSAlR1NUX01FVEFfRkxBR19QT09MRUQgZmxhZyBvciB3aXRoIHRoZSAibWVtb3J5IiB0YWcuCi0gKgotICogQ2FsbGVyIG93bnMgYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIGJ1ZmZlci4gZ3N0X2J1ZmZlcl91bnJlZigpIGFmdGVyCi0gKiB1c2FnZS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IGEgI0dzdEJ1ZmZlciBjb250YWluaW5nIHRoZSBmaXJzdAotICogICAgIEBuYnl0ZXMgb2YgdGhlIGFkYXB0ZXIsIG9yICVOVUxMIGlmIEBuYnl0ZXMgYnl0ZXMgYXJlIG5vdCBhdmFpbGFibGUuCi0gKiAgICAgZ3N0X2J1ZmZlcl91bnJlZigpIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KLSAqLwotR3N0QnVmZmVyICoKLWdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3NpemUgbmJ5dGVzKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5ieXRlcyA+IDAsIE5VTEwpOwotCi0gIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX2dldF9idWZmZXIgKGFkYXB0ZXIsIG5ieXRlcyk7Ci0gIGlmIChidWZmZXIpCi0gICAgZ3N0X2FkYXB0ZXJfZmx1c2hfdW5jaGVja2VkIChhZGFwdGVyLCBuYnl0ZXMpOwotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfdGFrZV9saXN0OgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBuYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdGFrZQotICoKLSAqIFJldHVybnMgYSAjR0xpc3Qgb2YgYnVmZmVycyBjb250YWluaW5nIHRoZSBmaXJzdCBAbmJ5dGVzIGJ5dGVzIG9mIHRoZQotICogQGFkYXB0ZXIuIFRoZSByZXR1cm5lZCBieXRlcyB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0aGUgYWRhcHRlci4KLSAqIFdoZW4gdGhlIGNhbGxlciBjYW4gZGVhbCB3aXRoIGluZGl2aWR1YWwgYnVmZmVycywgdGhpcyBmdW5jdGlvbiBpcyBtb3JlCi0gKiBwZXJmb3JtYW50IGJlY2F1c2Ugbm8gbWVtb3J5IHNob3VsZCBiZSBjb3BpZWQuCi0gKgotICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgbGlzdCBhbmQgY29udGFpbmVkIGJ1ZmZlcnMuIGdzdF9idWZmZXJfdW5yZWYoKSBlYWNoCi0gKiBidWZmZXIgaW4gdGhlIGxpc3QgYmVmb3JlIGZyZWVpbmcgdGhlIGxpc3QgYWZ0ZXIgdXNhZ2UuCi0gKgotICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBHc3QuQnVmZmVyKSAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSAjR0xpc3Qgb2YKLSAqICAgICBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGZpcnN0IEBuYnl0ZXMgb2YgdGhlIGFkYXB0ZXIsIG9yICVOVUxMIGlmIEBuYnl0ZXMKLSAqICAgICBieXRlcyBhcmUgbm90IGF2YWlsYWJsZQotICovCi1HTGlzdCAqCi1nc3RfYWRhcHRlcl90YWtlX2xpc3QgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBuYnl0ZXMpCi17Ci0gIEdRdWV1ZSBxdWV1ZSA9IEdfUVVFVUVfSU5JVDsKLSAgR3N0QnVmZmVyICpjdXI7Ci0gIGdzaXplIGhzaXplLCBza2lwLCBjdXJfc2l6ZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5ieXRlcyA8PSBhZGFwdGVyLT5zaXplLCBOVUxMKTsKLQotICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgInRha2luZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgbmJ5dGVzKTsKLQotICB3aGlsZSAobmJ5dGVzID4gMCkgewotICAgIGN1ciA9IGFkYXB0ZXItPmJ1Zmxpc3QtPmRhdGE7Ci0gICAgc2tpcCA9IGFkYXB0ZXItPnNraXA7Ci0gICAgY3VyX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChjdXIpOwotICAgIGhzaXplID0gTUlOIChuYnl0ZXMsIGN1cl9zaXplIC0gc2tpcCk7Ci0KLSAgICBjdXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoYWRhcHRlciwgaHNpemUpOwotCi0gICAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZxdWV1ZSwgY3VyKTsKLQotICAgIG5ieXRlcyAtPSBoc2l6ZTsKLSAgfQotICByZXR1cm4gcXVldWUuaGVhZDsKLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl9nZXRfbGlzdDoKLSAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCi0gKiBAbmJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldAotICoKLSAqIFJldHVybnMgYSAjR0xpc3Qgb2YgYnVmZmVycyBjb250YWluaW5nIHRoZSBmaXJzdCBAbmJ5dGVzIGJ5dGVzIG9mIHRoZQotICogQGFkYXB0ZXIsIGJ1dCBkb2VzIG5vdCBmbHVzaCB0aGVtIGZyb20gdGhlIGFkYXB0ZXIuIFNlZQotICogZ3N0X2FkYXB0ZXJfdGFrZV9saXN0KCkgZm9yIGRldGFpbHMuCi0gKgotICogQ2FsbGVyIG93bnMgcmV0dXJuZWQgbGlzdCBhbmQgY29udGFpbmVkIGJ1ZmZlcnMuIGdzdF9idWZmZXJfdW5yZWYoKSBlYWNoCi0gKiBidWZmZXIgaW4gdGhlIGxpc3QgYmVmb3JlIGZyZWVpbmcgdGhlIGxpc3QgYWZ0ZXIgdXNhZ2UuCi0gKgotICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBHc3QuQnVmZmVyKSAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogYSAjR0xpc3Qgb2YKLSAqICAgICBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGZpcnN0IEBuYnl0ZXMgb2YgdGhlIGFkYXB0ZXIsIG9yICVOVUxMIGlmIEBuYnl0ZXMKLSAqICAgICBieXRlcyBhcmUgbm90IGF2YWlsYWJsZQotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR0xpc3QgKgotZ3N0X2FkYXB0ZXJfZ2V0X2xpc3QgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBuYnl0ZXMpCi17Ci0gIEdRdWV1ZSBxdWV1ZSA9IEdfUVVFVUVfSU5JVDsKLSAgR3N0QnVmZmVyICpjdXIsICpidWZmZXI7Ci0gIGdzaXplIGhzaXplLCBza2lwLCBjdXJfc2l6ZTsKLSAgR1NMaXN0ICpnID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5ieXRlcyA8PSBhZGFwdGVyLT5zaXplLCBOVUxMKTsKLQotICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgImdldHRpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIG5ieXRlcyk7Ci0KLSAgZyA9IGFkYXB0ZXItPmJ1Zmxpc3Q7Ci0gIHNraXAgPSBhZGFwdGVyLT5za2lwOwotCi0gIHdoaWxlIChuYnl0ZXMgPiAwKSB7Ci0gICAgY3VyID0gZy0+ZGF0YTsKLSAgICBjdXJfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cik7Ci0gICAgaHNpemUgPSBNSU4gKG5ieXRlcywgY3VyX3NpemUgLSBza2lwKTsKLQotICAgIGlmIChza2lwID09IDAgJiYgY3VyX3NpemUgPT0gaHNpemUpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLAotICAgICAgICAgICJpbnNlcnRpbmcgYSBidWZmZXIgb2YgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIGhzaXplKTsKLSAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChjdXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgImluc2VydGluZyBhIGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIgotICAgICAgICAgICIgdmlhIHJlZ2lvbiBjb3B5IiwgaHNpemUpOwotICAgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoY3VyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBza2lwLCBoc2l6ZSk7Ci0gICAgfQotCi0gICAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZxdWV1ZSwgYnVmZmVyKTsKLQotICAgIG5ieXRlcyAtPSBoc2l6ZTsKLSAgICBza2lwID0gMDsKLSAgICBnID0gZ19zbGlzdF9uZXh0IChnKTsKLSAgfQotCi0gIHJldHVybiBxdWV1ZS5oZWFkOwotfQotCi0vKioKLSAqIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3Q6Ci0gKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgotICogQG5ieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0byB0YWtlCi0gKgotICogUmV0dXJucyBhICNHc3RCdWZmZXJMaXN0IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZmlyc3QgQG5ieXRlcyBieXRlcyBvZgotICogdGhlIEBhZGFwdGVyLiBUaGUgcmV0dXJuZWQgYnl0ZXMgd2lsbCBiZSBmbHVzaGVkIGZyb20gdGhlIGFkYXB0ZXIuCi0gKiBXaGVuIHRoZSBjYWxsZXIgY2FuIGRlYWwgd2l0aCBpbmRpdmlkdWFsIGJ1ZmZlcnMsIHRoaXMgZnVuY3Rpb24gaXMgbW9yZQotICogcGVyZm9ybWFudCBiZWNhdXNlIG5vIG1lbW9yeSBzaG91bGQgYmUgY29waWVkLgotICoKLSAqIENhbGxlciBvd25zIHRoZSByZXR1cm5lZCBsaXN0LiBDYWxsIGdzdF9idWZmZXJfbGlzdF91bnJlZigpIHRvIGZyZWUKLSAqIHRoZSBsaXN0IGFmdGVyIHVzYWdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhICNHc3RCdWZmZXJMaXN0IG9mIGJ1ZmZlcnMgY29udGFpbmluZwotICogICAgIHRoZSBmaXJzdCBAbmJ5dGVzIG9mIHRoZSBhZGFwdGVyLCBvciAlTlVMTCBpZiBAbmJ5dGVzIGJ5dGVzIGFyZSBub3QKLSAqICAgICBhdmFpbGFibGUKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEJ1ZmZlckxpc3QgKgotZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfbGlzdCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIG5ieXRlcykKLXsKLSAgR3N0QnVmZmVyTGlzdCAqYnVmZmVyX2xpc3Q7Ci0gIEdzdEJ1ZmZlciAqY3VyOwotICBnc2l6ZSBoc2l6ZSwgc2tpcCwgY3VyX3NpemU7Ci0gIGd1aW50IG5fYnVmczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBOVUxMKTsKLQotICBpZiAobmJ5dGVzID4gYWRhcHRlci0+c2l6ZSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgInRha2luZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgbmJ5dGVzKTsKLQotICAvKiB0cnkgdG8gY3JlYXRlIGJ1ZmZlciBsaXN0IHdpdGggc3VmZmljaWVudCBzaXplLCBzbyBubyByZXNpemUgaXMgZG9uZSBsYXRlciAqLwotICBpZiAoYWRhcHRlci0+Y291bnQgPCA2NCkKLSAgICBuX2J1ZnMgPSBhZGFwdGVyLT5jb3VudDsKLSAgZWxzZQotICAgIG5fYnVmcyA9IChhZGFwdGVyLT5jb3VudCAqIG5ieXRlcyAqIDEuMiAvIGFkYXB0ZXItPnNpemUpICsgMTsKLQotICBidWZmZXJfbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQgKG5fYnVmcyk7Ci0KLSAgd2hpbGUgKG5ieXRlcyA+IDApIHsKLSAgICBjdXIgPSBhZGFwdGVyLT5idWZsaXN0LT5kYXRhOwotICAgIHNraXAgPSBhZGFwdGVyLT5za2lwOwotICAgIGN1cl9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKTsKLSAgICBoc2l6ZSA9IE1JTiAobmJ5dGVzLCBjdXJfc2l6ZSAtIHNraXApOwotCi0gICAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAoYnVmZmVyX2xpc3QsIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhZGFwdGVyLCBoc2l6ZSkpOwotICAgIG5ieXRlcyAtPSBoc2l6ZTsKLSAgfQotICByZXR1cm4gYnVmZmVyX2xpc3Q7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcl9saXN0OgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBuYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZ2V0Ci0gKgotICogUmV0dXJucyBhICNHc3RCdWZmZXJMaXN0IG9mIGJ1ZmZlcnMgY29udGFpbmluZyB0aGUgZmlyc3QgQG5ieXRlcyBieXRlcyBvZgotICogdGhlIEBhZGFwdGVyIGJ1dCBkb2VzIG5vdCBmbHVzaCB0aGVtIGZyb20gdGhlIGFkYXB0ZXIuIFNlZQotICogZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfbGlzdCgpIGZvciBkZXRhaWxzLgotICoKLSAqIENhbGxlciBvd25zIHRoZSByZXR1cm5lZCBsaXN0LiBDYWxsIGdzdF9idWZmZXJfbGlzdF91bnJlZigpIHRvIGZyZWUKLSAqIHRoZSBsaXN0IGFmdGVyIHVzYWdlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhICNHc3RCdWZmZXJMaXN0IG9mIGJ1ZmZlcnMgY29udGFpbmluZwotICogICAgIHRoZSBmaXJzdCBAbmJ5dGVzIG9mIHRoZSBhZGFwdGVyLCBvciAlTlVMTCBpZiBAbmJ5dGVzIGJ5dGVzIGFyZSBub3QKLSAqICAgICBhdmFpbGFibGUKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEJ1ZmZlckxpc3QgKgotZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcl9saXN0IChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3NpemUgbmJ5dGVzKQotewotICBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdDsKLSAgR3N0QnVmZmVyICpjdXIsICpidWZmZXI7Ci0gIGdzaXplIGhzaXplLCBza2lwLCBjdXJfc2l6ZTsKLSAgZ3VpbnQgbl9idWZzOwotICBHU0xpc3QgKmcgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIE5VTEwpOwotCi0gIGlmIChuYnl0ZXMgPiBhZGFwdGVyLT5zaXplKQotICAgIHJldHVybiBOVUxMOwotCi0gIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLCAiZ2V0dGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgbmJ5dGVzKTsKLQotICAvKiB0cnkgdG8gY3JlYXRlIGJ1ZmZlciBsaXN0IHdpdGggc3VmZmljaWVudCBzaXplLCBzbyBubyByZXNpemUgaXMgZG9uZSBsYXRlciAqLwotICBpZiAoYWRhcHRlci0+Y291bnQgPCA2NCkKLSAgICBuX2J1ZnMgPSBhZGFwdGVyLT5jb3VudDsKLSAgZWxzZQotICAgIG5fYnVmcyA9IChhZGFwdGVyLT5jb3VudCAqIG5ieXRlcyAqIDEuMiAvIGFkYXB0ZXItPnNpemUpICsgMTsKLQotICBidWZmZXJfbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQgKG5fYnVmcyk7Ci0KLSAgZyA9IGFkYXB0ZXItPmJ1Zmxpc3Q7Ci0gIHNraXAgPSBhZGFwdGVyLT5za2lwOwotCi0gIHdoaWxlIChuYnl0ZXMgPiAwKSB7Ci0gICAgY3VyID0gZy0+ZGF0YTsKLSAgICBjdXJfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cik7Ci0gICAgaHNpemUgPSBNSU4gKG5ieXRlcywgY3VyX3NpemUgLSBza2lwKTsKLQotICAgIGlmIChza2lwID09IDAgJiYgY3VyX3NpemUgPT0gaHNpemUpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChhZGFwdGVyLAotICAgICAgICAgICJpbnNlcnRpbmcgYSBidWZmZXIgb2YgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIGhzaXplKTsKLSAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChjdXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoYWRhcHRlciwgImluc2VydGluZyBhIGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIgotICAgICAgICAgICIgdmlhIHJlZ2lvbiBjb3B5IiwgaHNpemUpOwotICAgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoY3VyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBza2lwLCBoc2l6ZSk7Ci0gICAgfQotCi0gICAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAoYnVmZmVyX2xpc3QsIGJ1ZmZlcik7Ci0KLSAgICBuYnl0ZXMgLT0gaHNpemU7Ci0gICAgc2tpcCA9IDA7Ci0gICAgZyA9IGdfc2xpc3RfbmV4dCAoZyk7Ci0gIH0KLQotICByZXR1cm4gYnVmZmVyX2xpc3Q7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlOgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqCi0gKiBHZXRzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBieXRlcyBhdmFpbGFibGUsIHRoYXQgaXMgaXQgcmV0dXJucyB0aGUgbWF4aW11bQotICogdmFsdWUgdGhhdCBjYW4gYmUgc3VwcGxpZWQgdG8gZ3N0X2FkYXB0ZXJfbWFwKCkgd2l0aG91dCB0aGF0IGZ1bmN0aW9uCi0gKiByZXR1cm5pbmcgJU5VTEwuCi0gKgotICogUmV0dXJuczogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiBAYWRhcHRlcgotICovCi1nc2l6ZQotZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChHc3RBZGFwdGVyICogYWRhcHRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BREFQVEVSIChhZGFwdGVyKSwgMCk7Ci0KLSAgcmV0dXJuIGFkYXB0ZXItPnNpemU7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3Q6Ci0gKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgotICoKLSAqIEdldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aXRob3V0Ci0gKiByZXF1aXJpbmcgYW55IGV4cGVuc2l2ZSBvcGVyYXRpb25zIChsaWtlIGNvcHlpbmcgdGhlIGRhdGEgaW50byBhCi0gKiB0ZW1wb3JhcnkgYnVmZmVyKS4KLSAqCi0gKiBSZXR1cm5zOiBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluIEBhZGFwdGVyIHdpdGhvdXQgZXhwZW5zaXZlCi0gKiBvcGVyYXRpb25zCi0gKi8KLWdzaXplCi1nc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIpCi17Ci0gIEdzdEJ1ZmZlciAqY3VyOwotICBnc2l6ZSBzaXplOwotICBHU0xpc3QgKmc7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BREFQVEVSIChhZGFwdGVyKSwgMCk7Ci0KLSAgLyogbm8gZGF0YSAqLwotICBpZiAoYWRhcHRlci0+c2l6ZSA9PSAwKQotICAgIHJldHVybiAwOwotCi0gIC8qIHNvbWUgc3R1ZmYgd2UgYWxyZWFkeSBhc3NlbWJsZWQgKi8KLSAgaWYgKGFkYXB0ZXItPmFzc2VtYmxlZF9sZW4pCi0gICAgcmV0dXJuIGFkYXB0ZXItPmFzc2VtYmxlZF9sZW47Ci0KLSAgLyogdGFrZSB0aGUgZmlyc3Qgbm9uLXplcm8gYnVmZmVyICovCi0gIGcgPSBhZGFwdGVyLT5idWZsaXN0OwotICB3aGlsZSAoVFJVRSkgewotICAgIGN1ciA9IGctPmRhdGE7Ci0gICAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGN1cik7Ci0gICAgaWYgKHNpemUgIT0gMCkKLSAgICAgIGJyZWFrOwotICAgIGcgPSBnX3NsaXN0X25leHQgKGcpOwotICB9Ci0KLSAgLyogd2UgY2FuIHF1aWNrbHkgZ2V0IHRoZSAocmVtYWluaW5nKSBkYXRhIG9mIHRoZSBmaXJzdCBidWZmZXIgKi8KLSAgcmV0dXJuIHNpemUgLSBhZGFwdGVyLT5za2lwOwotfQotCi0vKioKLSAqIGdzdF9hZGFwdGVyX2dldF9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQ6Ci0gKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgotICoKLSAqIEdldCB0aGUgZGlzdGFuY2UgaW4gYnl0ZXMgc2luY2UgdGhlIGxhc3QgYnVmZmVyIHdpdGggdGhlCi0gKiAlR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQgZmxhZy4KLSAqCi0gKiBUaGUgZGlzdGFuY2Ugd2lsbCBiZSByZXNldCB0byAwIGZvciBhbGwgYnVmZmVycyB3aXRoCi0gKiAlR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQgb24gdGhlbSwgYW5kIHRoZW4gY2FsY3VsYXRlZCBmb3IgYWxsIG90aGVyCi0gKiBmb2xsb3dpbmcgYnVmZmVycyBiYXNlZCBvbiB0aGVpciBzaXplLgotICoKLSAqIFNpbmNlOiAxLjEwCi0gKgotICogUmV0dXJuczogVGhlIG9mZnNldC4gQ2FuIGJlICVHU1RfQlVGRkVSX09GRlNFVF9OT05FLgotICovCi1ndWludDY0Ci1nc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyKQotewotICByZXR1cm4gYWRhcHRlci0+ZGlzdGFuY2VfZnJvbV9kaXNjb250OwotfQotCi0vKioKLSAqIGdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250OgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqCi0gKiBHZXQgdGhlIG9mZnNldCB0aGF0IHdhcyBvbiB0aGUgbGFzdCBidWZmZXIgd2l0aCB0aGUgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQKLSAqIGZsYWcsIG9yIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUuCi0gKgotICogU2luY2U6IDEuMTAKLSAqCi0gKiBSZXR1cm5zOiBUaGUgb2Zmc2V0IGF0IHRoZSBsYXN0IGRpc2NvbnQgb3IgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORS4KLSAqLwotZ3VpbnQ2NAotZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBHU1RfQlVGRkVSX09GRlNFVF9OT05FKTsKLQotICByZXR1cm4gYWRhcHRlci0+b2Zmc2V0X2F0X2Rpc2NvbnQ7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnQ6Ci0gKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgotICoKLSAqIEdldCB0aGUgUFRTIHRoYXQgd2FzIG9uIHRoZSBsYXN0IGJ1ZmZlciB3aXRoIHRoZSBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVAotICogZmxhZywgb3IgR1NUX0NMT0NLX1RJTUVfTk9ORS4KLSAqCi0gKiBTaW5jZTogMS4xMAotICoKLSAqIFJldHVybnM6IFRoZSBQVFMgYXQgdGhlIGxhc3QgZGlzY29udCBvciBHU1RfQ0xPQ0tfVElNRV9OT05FLgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250IChHc3RBZGFwdGVyICogYWRhcHRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BREFQVEVSIChhZGFwdGVyKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgcmV0dXJuIGFkYXB0ZXItPnB0c19hdF9kaXNjb250OwotfQotCi0vKioKLSAqIGdzdF9hZGFwdGVyX2R0c19hdF9kaXNjb250OgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqCi0gKiBHZXQgdGhlIERUUyB0aGF0IHdhcyBvbiB0aGUgbGFzdCBidWZmZXIgd2l0aCB0aGUgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQKLSAqIGZsYWcsIG9yIEdTVF9DTE9DS19USU1FX05PTkUuCi0gKgotICogU2luY2U6IDEuMTAKLSAqCi0gKiBSZXR1cm5zOiBUaGUgRFRTIGF0IHRoZSBsYXN0IGRpc2NvbnQgb3IgR1NUX0NMT0NLX1RJTUVfTk9ORS4KLSAqLwotR3N0Q2xvY2tUaW1lCi1nc3RfYWRhcHRlcl9kdHNfYXRfZGlzY29udCAoR3N0QWRhcHRlciAqIGFkYXB0ZXIpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIHJldHVybiBhZGFwdGVyLT5kdHNfYXRfZGlzY29udDsKLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl9wcmV2X29mZnNldDoKLSAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCi0gKiBAZGlzdGFuY2U6IChvdXQpIChhbGxvdy1ub25lKTogcG9pbnRlciB0byBhIGxvY2F0aW9uIGZvciBkaXN0YW5jZSwgb3IgJU5VTEwKLSAqCi0gKiBHZXQgdGhlIG9mZnNldCB0aGF0IHdhcyBiZWZvcmUgdGhlIGN1cnJlbnQgYnl0ZSBpbiB0aGUgYWRhcHRlci4gV2hlbgotICogQGRpc3RhbmNlIGlzIGdpdmVuLCB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIG9mZnNldCBhbmQgdGhlIGN1cnJlbnQKLSAqIHBvc2l0aW9uIGlzIHJldHVybmVkLgotICoKLSAqIFRoZSBvZmZzZXQgaXMgcmVzZXQgdG8gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSBhbmQgdGhlIGRpc3RhbmNlIGlzIHNldCB0byAwCi0gKiB3aGVuIHRoZSBhZGFwdGVyIGlzIGZpcnN0IGNyZWF0ZWQgb3Igd2hlbiBpdCBpcyBjbGVhcmVkLiBUaGlzIGFsc28gbWVhbnMgdGhhdAotICogYmVmb3JlIHRoZSBmaXJzdCBieXRlIHdpdGggYW4gb2Zmc2V0IGlzIHJlbW92ZWQgZnJvbSB0aGUgYWRhcHRlciwgdGhlIG9mZnNldAotICogYW5kIGRpc3RhbmNlIHJldHVybmVkIGFyZSBHU1RfQlVGRkVSX09GRlNFVF9OT05FIGFuZCAwIHJlc3BlY3RpdmVseS4KLSAqCi0gKiBTaW5jZTogMS4xMAotICoKLSAqIFJldHVybnM6IFRoZSBwcmV2aW91cyBzZWVuIG9mZnNldC4KLSAqLwotZ3VpbnQ2NAotZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBndWludDY0ICogZGlzdGFuY2UpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpOwotCi0gIGlmIChkaXN0YW5jZSkKLSAgICAqZGlzdGFuY2UgPSBhZGFwdGVyLT5vZmZzZXRfZGlzdGFuY2U7Ci0KLSAgcmV0dXJuIGFkYXB0ZXItPm9mZnNldDsKLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl9wcmV2X3B0czoKLSAqIEBhZGFwdGVyOiBhICNHc3RBZGFwdGVyCi0gKiBAZGlzdGFuY2U6IChvdXQpIChhbGxvdy1ub25lKTogcG9pbnRlciB0byBsb2NhdGlvbiBmb3IgZGlzdGFuY2UsIG9yICVOVUxMCi0gKgotICogR2V0IHRoZSBwdHMgdGhhdCB3YXMgYmVmb3JlIHRoZSBjdXJyZW50IGJ5dGUgaW4gdGhlIGFkYXB0ZXIuIFdoZW4KLSAqIEBkaXN0YW5jZSBpcyBnaXZlbiwgdGhlIGFtb3VudCBvZiBieXRlcyBiZXR3ZWVuIHRoZSBwdHMgYW5kIHRoZSBjdXJyZW50Ci0gKiBwb3NpdGlvbiBpcyByZXR1cm5lZC4KLSAqCi0gKiBUaGUgcHRzIGlzIHJlc2V0IHRvIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIHRoZSBkaXN0YW5jZSBpcyBzZXQgdG8gMCB3aGVuCi0gKiB0aGUgYWRhcHRlciBpcyBmaXJzdCBjcmVhdGVkIG9yIHdoZW4gaXQgaXMgY2xlYXJlZC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgYmVmb3JlCi0gKiB0aGUgZmlyc3QgYnl0ZSB3aXRoIGEgcHRzIGlzIHJlbW92ZWQgZnJvbSB0aGUgYWRhcHRlciwgdGhlIHB0cwotICogYW5kIGRpc3RhbmNlIHJldHVybmVkIGFyZSBHU1RfQ0xPQ0tfVElNRV9OT05FIGFuZCAwIHJlc3BlY3RpdmVseS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgcHJldmlvdXNseSBzZWVuIHB0cy4KLSAqLwotR3N0Q2xvY2tUaW1lCi1nc3RfYWRhcHRlcl9wcmV2X3B0cyAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGd1aW50NjQgKiBkaXN0YW5jZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BREFQVEVSIChhZGFwdGVyKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgaWYgKGRpc3RhbmNlKQotICAgICpkaXN0YW5jZSA9IGFkYXB0ZXItPnB0c19kaXN0YW5jZTsKLQotICByZXR1cm4gYWRhcHRlci0+cHRzOwotfQotCi0vKioKLSAqIGdzdF9hZGFwdGVyX3ByZXZfZHRzOgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBkaXN0YW5jZTogKG91dCkgKGFsbG93LW5vbmUpOiBwb2ludGVyIHRvIGxvY2F0aW9uIGZvciBkaXN0YW5jZSwgb3IgJU5VTEwKLSAqCi0gKiBHZXQgdGhlIGR0cyB0aGF0IHdhcyBiZWZvcmUgdGhlIGN1cnJlbnQgYnl0ZSBpbiB0aGUgYWRhcHRlci4gV2hlbgotICogQGRpc3RhbmNlIGlzIGdpdmVuLCB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIGR0cyBhbmQgdGhlIGN1cnJlbnQKLSAqIHBvc2l0aW9uIGlzIHJldHVybmVkLgotICoKLSAqIFRoZSBkdHMgaXMgcmVzZXQgdG8gR1NUX0NMT0NLX1RJTUVfTk9ORSBhbmQgdGhlIGRpc3RhbmNlIGlzIHNldCB0byAwIHdoZW4KLSAqIHRoZSBhZGFwdGVyIGlzIGZpcnN0IGNyZWF0ZWQgb3Igd2hlbiBpdCBpcyBjbGVhcmVkLiBUaGlzIGFsc28gbWVhbnMgdGhhdCBiZWZvcmUKLSAqIHRoZSBmaXJzdCBieXRlIHdpdGggYSBkdHMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhZGFwdGVyLCB0aGUgZHRzCi0gKiBhbmQgZGlzdGFuY2UgcmV0dXJuZWQgYXJlIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIDAgcmVzcGVjdGl2ZWx5LgotICoKLSAqIFJldHVybnM6IFRoZSBwcmV2aW91c2x5IHNlZW4gZHRzLgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9hZGFwdGVyX3ByZXZfZHRzIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3VpbnQ2NCAqIGRpc3RhbmNlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0FEQVBURVIgKGFkYXB0ZXIpLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBpZiAoZGlzdGFuY2UpCi0gICAgKmRpc3RhbmNlID0gYWRhcHRlci0+ZHRzX2Rpc3RhbmNlOwotCi0gIHJldHVybiBhZGFwdGVyLT5kdHM7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0OgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgaW4gdGhlIGFkYXB0ZXIgYXQgd2hpY2ggdG8gZ2V0IHRpbWVzdGFtcAotICogQGRpc3RhbmNlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gbG9jYXRpb24gZm9yIGRpc3RhbmNlLCBvciAlTlVMTAotICoKLSAqIEdldCB0aGUgcHRzIHRoYXQgd2FzIGJlZm9yZSB0aGUgYnl0ZSBhdCBvZmZzZXQgQG9mZnNldCBpbiB0aGUgYWRhcHRlci4gV2hlbgotICogQGRpc3RhbmNlIGlzIGdpdmVuLCB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIHB0cyBhbmQgdGhlIGN1cnJlbnQKLSAqIHBvc2l0aW9uIGlzIHJldHVybmVkLgotICoKLSAqIFRoZSBwdHMgaXMgcmVzZXQgdG8gR1NUX0NMT0NLX1RJTUVfTk9ORSBhbmQgdGhlIGRpc3RhbmNlIGlzIHNldCB0byAwIHdoZW4KLSAqIHRoZSBhZGFwdGVyIGlzIGZpcnN0IGNyZWF0ZWQgb3Igd2hlbiBpdCBpcyBjbGVhcmVkLiBUaGlzIGFsc28gbWVhbnMgdGhhdCBiZWZvcmUKLSAqIHRoZSBmaXJzdCBieXRlIHdpdGggYSBwdHMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhZGFwdGVyLCB0aGUgcHRzCi0gKiBhbmQgZGlzdGFuY2UgcmV0dXJuZWQgYXJlIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIDAgcmVzcGVjdGl2ZWx5LgotICoKLSAqIFNpbmNlOiAxLjIKLSAqIFJldHVybnM6IFRoZSBwcmV2aW91c2x5IHNlZW4gcHRzIGF0IGdpdmVuIG9mZnNldC4KLSAqLwotR3N0Q2xvY2tUaW1lCi1nc3RfYWRhcHRlcl9wcmV2X3B0c19hdF9vZmZzZXQgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBvZmZzZXQsCi0gICAgZ3VpbnQ2NCAqIGRpc3RhbmNlKQotewotICBHc3RCdWZmZXIgKmN1cjsKLSAgR1NMaXN0ICpnOwotICBnc2l6ZSByZWFkX29mZnNldCA9IDA7Ci0gIGdzaXplIHB0c19vZmZzZXQgPSAwOwotICBHc3RDbG9ja1RpbWUgcHRzID0gYWRhcHRlci0+cHRzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGcgPSBhZGFwdGVyLT5idWZsaXN0OwotCi0gIHdoaWxlIChnICYmIHJlYWRfb2Zmc2V0IDwgb2Zmc2V0ICsgYWRhcHRlci0+c2tpcCkgewotICAgIGN1ciA9IGctPmRhdGE7Ci0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfUFRTIChjdXIpKSkgewotICAgICAgcHRzID0gR1NUX0JVRkZFUl9QVFMgKGN1cik7Ci0gICAgICBwdHNfb2Zmc2V0ID0gcmVhZF9vZmZzZXQ7Ci0gICAgfQotCi0gICAgcmVhZF9vZmZzZXQgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKTsKLSAgICBnID0gZ19zbGlzdF9uZXh0IChnKTsKLSAgfQotCi0gIGlmIChkaXN0YW5jZSkKLSAgICAqZGlzdGFuY2UgPSBhZGFwdGVyLT5wdHNfZGlzdGFuY2UgKyBvZmZzZXQgLSBwdHNfb2Zmc2V0OwotCi0gIHJldHVybiBwdHM7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfcHJldl9kdHNfYXRfb2Zmc2V0OgotICogQGFkYXB0ZXI6IGEgI0dzdEFkYXB0ZXIKLSAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgaW4gdGhlIGFkYXB0ZXIgYXQgd2hpY2ggdG8gZ2V0IHRpbWVzdGFtcAotICogQGRpc3RhbmNlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gbG9jYXRpb24gZm9yIGRpc3RhbmNlLCBvciAlTlVMTAotICoKLSAqIEdldCB0aGUgZHRzIHRoYXQgd2FzIGJlZm9yZSB0aGUgYnl0ZSBhdCBvZmZzZXQgQG9mZnNldCBpbiB0aGUgYWRhcHRlci4gV2hlbgotICogQGRpc3RhbmNlIGlzIGdpdmVuLCB0aGUgYW1vdW50IG9mIGJ5dGVzIGJldHdlZW4gdGhlIGR0cyBhbmQgdGhlIGN1cnJlbnQKLSAqIHBvc2l0aW9uIGlzIHJldHVybmVkLgotICoKLSAqIFRoZSBkdHMgaXMgcmVzZXQgdG8gR1NUX0NMT0NLX1RJTUVfTk9ORSBhbmQgdGhlIGRpc3RhbmNlIGlzIHNldCB0byAwIHdoZW4KLSAqIHRoZSBhZGFwdGVyIGlzIGZpcnN0IGNyZWF0ZWQgb3Igd2hlbiBpdCBpcyBjbGVhcmVkLiBUaGlzIGFsc28gbWVhbnMgdGhhdCBiZWZvcmUKLSAqIHRoZSBmaXJzdCBieXRlIHdpdGggYSBkdHMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhZGFwdGVyLCB0aGUgZHRzCi0gKiBhbmQgZGlzdGFuY2UgcmV0dXJuZWQgYXJlIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIDAgcmVzcGVjdGl2ZWx5LgotICoKLSAqIFNpbmNlOiAxLjIKLSAqIFJldHVybnM6IFRoZSBwcmV2aW91c2x5IHNlZW4gZHRzIGF0IGdpdmVuIG9mZnNldC4KLSAqLwotR3N0Q2xvY2tUaW1lCi1nc3RfYWRhcHRlcl9wcmV2X2R0c19hdF9vZmZzZXQgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnc2l6ZSBvZmZzZXQsCi0gICAgZ3VpbnQ2NCAqIGRpc3RhbmNlKQotewotICBHc3RCdWZmZXIgKmN1cjsKLSAgR1NMaXN0ICpnOwotICBnc2l6ZSByZWFkX29mZnNldCA9IDA7Ci0gIGdzaXplIGR0c19vZmZzZXQgPSAwOwotICBHc3RDbG9ja1RpbWUgZHRzID0gYWRhcHRlci0+ZHRzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQURBUFRFUiAoYWRhcHRlciksIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGcgPSBhZGFwdGVyLT5idWZsaXN0OwotCi0gIHdoaWxlIChnICYmIHJlYWRfb2Zmc2V0IDwgb2Zmc2V0ICsgYWRhcHRlci0+c2tpcCkgewotICAgIGN1ciA9IGctPmRhdGE7Ci0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfRFRTIChjdXIpKSkgewotICAgICAgZHRzID0gR1NUX0JVRkZFUl9EVFMgKGN1cik7Ci0gICAgICBkdHNfb2Zmc2V0ID0gcmVhZF9vZmZzZXQ7Ci0gICAgfQotCi0gICAgcmVhZF9vZmZzZXQgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY3VyKTsKLSAgICBnID0gZ19zbGlzdF9uZXh0IChnKTsKLSAgfQotCi0gIGlmIChkaXN0YW5jZSkKLSAgICAqZGlzdGFuY2UgPSBhZGFwdGVyLT5kdHNfZGlzdGFuY2UgKyBvZmZzZXQgLSBkdHNfb2Zmc2V0OwotCi0gIHJldHVybiBkdHM7Ci19Ci0KLS8qKgotICogZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWs6Ci0gKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgotICogQG1hc2s6IG1hc2sgdG8gYXBwbHkgdG8gZGF0YSBiZWZvcmUgbWF0Y2hpbmcgYWdhaW5zdCBAcGF0dGVybgotICogQHBhdHRlcm46IHBhdHRlcm4gdG8gbWF0Y2ggKGFmdGVyIG1hc2sgaXMgYXBwbGllZCkKLSAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBhZGFwdGVyIGRhdGEgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgcmV0dXJucwotICogICAgICAgICAgdGhlIGxhc3Qgc2Nhbm5lZCBwb3NpdGlvbi4KLSAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc2NhbiBmcm9tIG9mZnNldAotICogQHZhbHVlOiAob3V0KSAoYWxsb3ctbm9uZSk6IHBvaW50ZXIgdG8gdWludDMyIHRvIHJldHVybiBtYXRjaGluZyBkYXRhCi0gKgotICogU2NhbiBmb3IgcGF0dGVybiBAcGF0dGVybiB3aXRoIGFwcGxpZWQgbWFzayBAbWFzayBpbiB0aGUgYWRhcHRlciBkYXRhLAotICogc3RhcnRpbmcgZnJvbSBvZmZzZXQgQG9mZnNldC4gIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZSB2YWx1ZSB0aGF0IG1hdGNoZWQKLSAqIGlzIHJldHVybmVkIHRocm91Z2ggQHZhbHVlLCBvdGhlcndpc2UgQHZhbHVlIGlzIGxlZnQgdW50b3VjaGVkLgotICoKLSAqIFRoZSBieXRlcyBpbiBAcGF0dGVybiBhbmQgQG1hc2sgYXJlIGludGVycHJldGVkIGxlZnQtdG8tcmlnaHQsIHJlZ2FyZGxlc3MKLSAqIG9mIGVuZGlhbm5lc3MuICBBbGwgZm91ciBieXRlcyBvZiB0aGUgcGF0dGVybiBtdXN0IGJlIHByZXNlbnQgaW4gdGhlCi0gKiBhZGFwdGVyIGZvciBpdCB0byBtYXRjaCwgZXZlbiBpZiB0aGUgZmlyc3Qgb3IgbGFzdCBieXRlcyBhcmUgbWFza2VkIG91dC4KLSAqCi0gKiBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZXJlIGlzCi0gKiBlbm91Z2ggZGF0YSAob2Zmc2V0K3NpemUgYnl0ZXMpIGluIHRoZSBhZGFwdGVyLgotICoKLSAqIFJldHVybnM6IG9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2gsIG9yIC0xIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4KLSAqLwotZ3NzaXplCi1nc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGd1aW50MzIgbWFzaywKLSAgICBndWludDMyIHBhdHRlcm4sIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSwgZ3VpbnQzMiAqIHZhbHVlKQotewotICBHU0xpc3QgKmc7Ci0gIGdzaXplIHNraXAsIGJzaXplLCBpOwotICBndWludDMyIHN0YXRlOwotICBHc3RNYXBJbmZvIGluZm87Ci0gIGd1aW50OCAqYmRhdGE7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaXplID4gMCwgLTEpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAob2Zmc2V0ICsgc2l6ZSA8PSBhZGFwdGVyLT5zaXplLCAtMSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICgoKH5tYXNrKSAmIHBhdHRlcm4pID09IDAsIC0xKTsKLQotICAvKiB3ZSBjYW4ndCBmaW5kIHRoZSBwYXR0ZXJuIHdpdGggbGVzcyB0aGFuIDQgYnl0ZXMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPCA0KSkKLSAgICByZXR1cm4gLTE7Ci0KLSAgc2tpcCA9IG9mZnNldCArIGFkYXB0ZXItPnNraXA7Ci0KLSAgLyogZmlyc3Qgc3RlcCwgZG8gc2tpcHBpbmcgYW5kIHBvc2l0aW9uIG9uIHRoZSBmaXJzdCBidWZmZXIgKi8KLSAgLyogb3B0aW1pc3RpY2FsbHkgYXNzdW1lIHNjYW5uaW5nIGNvbnRpbnVlcyBzZXF1ZW50aWFsbHkgKi8KLSAgaWYgKGFkYXB0ZXItPnNjYW5fZW50cnkgJiYgKGFkYXB0ZXItPnNjYW5fb2Zmc2V0IDw9IHNraXApKSB7Ci0gICAgZyA9IGFkYXB0ZXItPnNjYW5fZW50cnk7Ci0gICAgc2tpcCAtPSBhZGFwdGVyLT5zY2FuX29mZnNldDsKLSAgfSBlbHNlIHsKLSAgICBnID0gYWRhcHRlci0+YnVmbGlzdDsKLSAgICBhZGFwdGVyLT5zY2FuX29mZnNldCA9IDA7Ci0gICAgYWRhcHRlci0+c2Nhbl9lbnRyeSA9IE5VTEw7Ci0gIH0KLSAgYnVmID0gZy0+ZGF0YTsKLSAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICB3aGlsZSAoR19VTkxJS0VMWSAoc2tpcCA+PSBic2l6ZSkpIHsKLSAgICBza2lwIC09IGJzaXplOwotICAgIGcgPSBnX3NsaXN0X25leHQgKGcpOwotICAgIGFkYXB0ZXItPnNjYW5fb2Zmc2V0ICs9IGJzaXplOwotICAgIGFkYXB0ZXItPnNjYW5fZW50cnkgPSBnOwotICAgIGJ1ZiA9IGctPmRhdGE7Ci0gICAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICB9Ci0gIC8qIGdldCB0aGUgZGF0YSBub3cgKi8KLSAgaWYgKCFnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9SRUFEKSkKLSAgICByZXR1cm4gLTE7Ci0KLSAgYmRhdGEgPSAoZ3VpbnQ4ICopIGluZm8uZGF0YSArIHNraXA7Ci0gIGJzaXplID0gaW5mby5zaXplIC0gc2tpcDsKLSAgc2tpcCA9IDA7Ci0KLSAgLyogc2V0IHRoZSBzdGF0ZSB0byBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBtYXRjaCAqLwotICBzdGF0ZSA9IH5wYXR0ZXJuOwotCi0gIC8qIG5vdyBmaW5kIGRhdGEgKi8KLSAgZG8gewotICAgIGJzaXplID0gTUlOIChic2l6ZSwgc2l6ZSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJzaXplOyBpKyspIHsKLSAgICAgIHN0YXRlID0gKChzdGF0ZSA8PCA4KSB8IGJkYXRhW2ldKTsKLSAgICAgIGlmIChHX1VOTElLRUxZICgoc3RhdGUgJiBtYXNrKSA9PSBwYXR0ZXJuKSkgewotICAgICAgICAvKiB3ZSBoYXZlIGEgbWF0Y2ggYnV0IHdlIG5lZWQgdG8gaGF2ZSBza2lwcGVkIGF0Ci0gICAgICAgICAqIGxlYXN0IDQgYnl0ZXMgdG8gZmlsbCB0aGUgc3RhdGUuICovCi0gICAgICAgIGlmIChHX0xJS0VMWSAoc2tpcCArIGkgPj0gMykpIHsKLSAgICAgICAgICBpZiAoR19MSUtFTFkgKHZhbHVlKSkKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRlOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICAgICAgICAgIHJldHVybiBvZmZzZXQgKyBza2lwICsgaSAtIDM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgc2l6ZSAtPSBic2l6ZTsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgYnJlYWs7Ci0KLSAgICAvKiBub3RoaW5nIGZvdW5kIHlldCwgZ28gdG8gbmV4dCBidWZmZXIgKi8KLSAgICBza2lwICs9IGJzaXplOwotICAgIGcgPSBnX3NsaXN0X25leHQgKGcpOwotICAgIGFkYXB0ZXItPnNjYW5fb2Zmc2V0ICs9IGluZm8uc2l6ZTsKLSAgICBhZGFwdGVyLT5zY2FuX2VudHJ5ID0gZzsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLSAgICBidWYgPSBnLT5kYXRhOwotCi0gICAgaWYgKCFnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9SRUFEKSkKLSAgICAgIHJldHVybiAtMTsKLQotICAgIGJzaXplID0gaW5mby5zaXplOwotICAgIGJkYXRhID0gaW5mby5kYXRhOwotICB9IHdoaWxlIChUUlVFKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLQotICAvKiBub3RoaW5nIGZvdW5kICovCi0gIHJldHVybiAtMTsKLX0KLQotLyoqCi0gKiBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzI6Ci0gKiBAYWRhcHRlcjogYSAjR3N0QWRhcHRlcgotICogQG1hc2s6IG1hc2sgdG8gYXBwbHkgdG8gZGF0YSBiZWZvcmUgbWF0Y2hpbmcgYWdhaW5zdCBAcGF0dGVybgotICogQHBhdHRlcm46IHBhdHRlcm4gdG8gbWF0Y2ggKGFmdGVyIG1hc2sgaXMgYXBwbGllZCkKLSAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBhZGFwdGVyIGRhdGEgZnJvbSB3aGljaCB0byBzdGFydCBzY2FubmluZywgcmV0dXJucwotICogICAgICAgICAgdGhlIGxhc3Qgc2Nhbm5lZCBwb3NpdGlvbi4KLSAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc2NhbiBmcm9tIG9mZnNldAotICoKLSAqIFNjYW4gZm9yIHBhdHRlcm4gQHBhdHRlcm4gd2l0aCBhcHBsaWVkIG1hc2sgQG1hc2sgaW4gdGhlIGFkYXB0ZXIgZGF0YSwKLSAqIHN0YXJ0aW5nIGZyb20gb2Zmc2V0IEBvZmZzZXQuCi0gKgotICogVGhlIGJ5dGVzIGluIEBwYXR0ZXJuIGFuZCBAbWFzayBhcmUgaW50ZXJwcmV0ZWQgbGVmdC10by1yaWdodCwgcmVnYXJkbGVzcwotICogb2YgZW5kaWFubmVzcy4gIEFsbCBmb3VyIGJ5dGVzIG9mIHRoZSBwYXR0ZXJuIG11c3QgYmUgcHJlc2VudCBpbiB0aGUKLSAqIGFkYXB0ZXIgZm9yIGl0IHRvIG1hdGNoLCBldmVuIGlmIHRoZSBmaXJzdCBvciBsYXN0IGJ5dGVzIGFyZSBtYXNrZWQgb3V0LgotICoKLSAqIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRob3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlcmUgaXMKLSAqIGVub3VnaCBkYXRhIChvZmZzZXQrc2l6ZSBieXRlcykgaW4gdGhlIGFkYXB0ZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiBjYWxscyBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlaygpIHBhc3NpbmcgJU5VTEwKLSAqIGZvciB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zOiBvZmZzZXQgb2YgdGhlIGZpcnN0IG1hdGNoLCBvciAtMSBpZiBubyBtYXRjaCB3YXMgZm91bmQuCi0gKgotICogRXhhbXBsZToKLSAqIDxwcm9ncmFtbGlzdGluZz4KLSAqIC8vIEFzc3VtZSB0aGUgYWRhcHRlciBjb250YWlucyAweDAwIDB4MDEgMHgwMiAuLi4gMHhmZSAweGZmCi0gKgotICogZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDAwMDEwMjAzLCAwLCAyNTYpOwotICogLy8gLT4gcmV0dXJucyAwCi0gKiBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDEsIDI1NSk7Ci0gKiAvLyAtPiByZXR1cm5zIC0xCi0gKiBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MDEwMjAzMDQsIDEsIDI1NSk7Ci0gKiAvLyAtPiByZXR1cm5zIDEKLSAqIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmLCAweDAwMDEsIDAsIDI1Nik7Ci0gKiAvLyAtPiByZXR1cm5zIC0xCi0gKiBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZiwgMHgwMjAzLCAwLCAyNTYpOwotICogLy8gLT4gcmV0dXJucyAwCi0gKiBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZjAwMDAsIDB4MDIwMzAwMDAsIDAsIDI1Nik7Ci0gKiAvLyAtPiByZXR1cm5zIDIKLSAqIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmMDAwMCwgMHgwMjAzMDAwMCwgMCwgNCk7Ci0gKiAvLyAtPiByZXR1cm5zIC0xCi0gKiA8L3Byb2dyYW1saXN0aW5nPgotICovCi1nc3NpemUKLWdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGd1aW50MzIgbWFzaywKLSAgICBndWludDMyIHBhdHRlcm4sIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKLXsKLSAgcmV0dXJuIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChhZGFwdGVyLCBtYXNrLCBwYXR0ZXJuLCBvZmZzZXQsCi0gICAgICBzaXplLCBOVUxMKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YWRhcHRlci5oIGIvbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzY2MyNTAuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RhZGFwdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaWZuZGVmIF9fR1NUX0FEQVBURVJfSF9fCi0jZGVmaW5lIF9fR1NUX0FEQVBURVJfSF9fCi0KLUdfQkVHSU5fREVDTFMKLQotCi0jZGVmaW5lIEdTVF9UWVBFX0FEQVBURVIgXAotICAoZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0FEQVBURVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfQURBUFRFUiwgR3N0QWRhcHRlcikpCi0jZGVmaW5lIEdTVF9BREFQVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBHU1RfVFlQRV9BREFQVEVSLCBHc3RBZGFwdGVyQ2xhc3MpKQotI2RlZmluZSBHU1RfQURBUFRFUl9HRVRfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQURBUFRFUiwgR3N0QWRhcHRlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FEQVBURVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR1NUX1RZUEVfQURBUFRFUikpCi0jZGVmaW5lIEdTVF9JU19BREFQVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHU1RfVFlQRV9BREFQVEVSKSkKLQotLyoqCi0gKiBHc3RBZGFwdGVyOgotICoKLSAqIFRoZSBvcGFxdWUgI0dzdEFkYXB0ZXIgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RBZGFwdGVyIEdzdEFkYXB0ZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QWRhcHRlckNsYXNzIEdzdEFkYXB0ZXJDbGFzczsKLQotR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7Ci0KLUdzdEFkYXB0ZXIgKiAgICAgICAgICAgIGdzdF9hZGFwdGVyX25ldyAgICAgICAgICAgICAgICAgKHZvaWQpIEdfR05VQ19NQUxMT0M7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX2NsZWFyICAgICAgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfcHVzaCAgICAgICAgICAgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwgR3N0QnVmZmVyKiBidWYpOwotZ2NvbnN0cG9pbnRlciAgICAgICAgICAgZ3N0X2FkYXB0ZXJfbWFwICAgICAgICAgICAgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwgZ3NpemUgc2l6ZSk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl91bm1hcCAgICAgICAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX2NvcHkgICAgICAgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGdwb2ludGVyIGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpOwotR0J5dGVzICogICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfY29weV9ieXRlcyAgICAgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAgICAgICAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyLCBnc2l6ZSBmbHVzaCk7Ci1ncG9pbnRlciAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl90YWtlICAgICAgICAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyLCBnc2l6ZSBuYnl0ZXMpOwotR3N0QnVmZmVyKiAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgICAgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwgZ3NpemUgbmJ5dGVzKTsKLUdMaXN0KiAgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX3Rha2VfbGlzdCAgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGdzaXplIG5ieXRlcyk7Ci1Hc3RCdWZmZXIgKiAgICAgICAgICAgICBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0ICAgIChHc3RBZGFwdGVyICphZGFwdGVyLCBnc2l6ZSBuYnl0ZXMpOwotR3N0QnVmZmVyTGlzdCAqICAgICAgICAgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfbGlzdCAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwgZ3NpemUgbmJ5dGVzKTsKLUdzdEJ1ZmZlciogICAgICAgICAgICAgIGdzdF9hZGFwdGVyX2dldF9idWZmZXIgICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGdzaXplIG5ieXRlcyk7Ci1HTGlzdCogICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9nZXRfbGlzdCAgICAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyLCBnc2l6ZSBuYnl0ZXMpOwotR3N0QnVmZmVyICogICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcl9mYXN0ICAgICAoR3N0QWRhcHRlciAqYWRhcHRlciwgZ3NpemUgbmJ5dGVzKTsKLUdzdEJ1ZmZlckxpc3QgKiAgICAgICAgIGdzdF9hZGFwdGVyX2dldF9idWZmZXJfbGlzdCAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGdzaXplIG5ieXRlcyk7Ci1nc2l6ZSAgICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGUgICAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyKTsKLWdzaXplICAgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0ICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIpOwotCi1Hc3RDbG9ja1RpbWUgICAgICAgICAgICBnc3RfYWRhcHRlcl9wcmV2X3B0cyAgICAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyLCBndWludDY0ICpkaXN0YW5jZSk7Ci1Hc3RDbG9ja1RpbWUgICAgICAgICAgICBnc3RfYWRhcHRlcl9wcmV2X2R0cyAgICAgICAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyLCBndWludDY0ICpkaXN0YW5jZSk7Ci1Hc3RDbG9ja1RpbWUgICAgICAgICAgICBnc3RfYWRhcHRlcl9wcmV2X3B0c19hdF9vZmZzZXQgIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3NpemUgb2Zmc2V0LCBndWludDY0ICogZGlzdGFuY2UpOwotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfcHJldl9kdHNfYXRfb2Zmc2V0ICAoR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdzaXplIG9mZnNldCwgZ3VpbnQ2NCAqIGRpc3RhbmNlKTsKLWd1aW50NjQgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0ICAgICAgICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIsIGd1aW50NjQgKmRpc3RhbmNlKTsKLQotR3N0Q2xvY2tUaW1lICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnQgICAgICAoR3N0QWRhcHRlciAqYWRhcHRlcik7Ci1Hc3RDbG9ja1RpbWUgICAgICAgICAgICBnc3RfYWRhcHRlcl9kdHNfYXRfZGlzY29udCAgICAgIChHc3RBZGFwdGVyICphZGFwdGVyKTsKLWd1aW50NjQgICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250ICAgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIpOwotCi1ndWludDY0ICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgKEdzdEFkYXB0ZXIgKmFkYXB0ZXIpOwotCi1nc3NpemUgICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgIChHc3RBZGFwdGVyICogYWRhcHRlciwgZ3VpbnQzMiBtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBwYXR0ZXJuLCBnc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpOwotCi1nc3NpemUgICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayAgKEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBndWludDMyIG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHBhdHRlcm4sIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSwgZ3VpbnQzMiAqIHZhbHVlKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RBZGFwdGVyLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BREFQVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNmI3YWIuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5NDIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+LgotICogQ29weXJpZ2h0IChDKSAyMDExLCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogICBBdXRob3I6IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiwgQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0YmFzZXBhcnNlCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIHN0cmVhbSBwYXJzZXJzCi0gKiBAc2VlX2Fsc286ICNHc3RCYXNlVHJhbnNmb3JtCi0gKgotICogVGhpcyBiYXNlIGNsYXNzIGlzIGZvciBwYXJzZXIgZWxlbWVudHMgdGhhdCBwcm9jZXNzIGRhdGEgYW5kIHNwbGl0cyBpdAotICogaW50byBzZXBhcmF0ZSBhdWRpby92aWRlby93aGF0ZXZlciBmcmFtZXMuCi0gKgotICogSXQgcHJvdmlkZXMgZm9yOgotICogPGl0ZW1pemVkbGlzdD4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPnByb3ZpZGVzIG9uZSBzaW5rIHBhZCBhbmQgb25lIHNvdXJjZSBwYWQ8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsZXMgc3RhdGUgY2hhbmdlczwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Y2FuIG9wZXJhdGUgaW4gcHVsbCBtb2RlIG9yIHB1c2ggbW9kZTwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxlcyBzZWVraW5nIGluIGJvdGggbW9kZXM8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsZXMgZXZlbnRzIChTRUdNRU5UL0VPUy9GTFVTSCk8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICAgIGhhbmRsZXMgcXVlcmllcyAoUE9TSVRJT04vRFVSQVRJT04vU0VFS0lORy9GT1JNQVQvQ09OVkVSVCkKLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5oYW5kbGVzIGZsdXNoaW5nPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIGJhc2UgY2xhc3MgaXMgdG8gcHJvdmlkZSB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZgotICogYSBwYXJzZXIgYW5kIHNoYXJlIGEgbG90IG9mIHJhdGhlciBjb21wbGV4IGNvZGUuCi0gKgotICogRGVzY3JpcHRpb24gb2YgdGhlIHBhcnNpbmcgbWVjaGFuaXNtOgotICogPG9yZGVyZWRsaXN0PgotICogPGxpc3RpdGVtPgotICogICA8aXRlbWl6ZWRsaXN0Pjx0aXRsZT5TZXQtdXAgcGhhc2U8L3RpdGxlPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgI0dzdEJhc2VQYXJzZSBjYWxscyBAc3RhcnQgdG8gaW5mb3JtIHN1YmNsYXNzIHRoYXQgZGF0YSBwcm9jZXNzaW5nIGlzCi0gKiAgICAgYWJvdXQgdG8gc3RhcnQgbm93LgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICNHc3RCYXNlUGFyc2UgY2xhc3MgY2FsbHMgQHNldF9zaW5rX2NhcHMgdG8gaW5mb3JtIHRoZSBzdWJjbGFzcyBhYm91dAotICogICAgIGluY29taW5nIHNpbmtwYWQgY2Fwcy4gU3ViY2xhc3MgY291bGQgYWxyZWFkeSBzZXQgdGhlIHNyY3BhZCBjYXBzCi0gKiAgICAgYWNjb3JkaW5nbHksIGJ1dCB0aGlzIG1pZ2h0IGJlIGRlbGF5ZWQgdW50aWwgY2FsbGluZwotICogICAgIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZSgpIHdpdGggYSBub24tcXVldWVkIGZyYW1lLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICBBdCBsZWFzdCBhdCB0aGlzIHBvaW50IHN1YmNsYXNzIG5lZWRzIHRvIHRlbGwgdGhlICNHc3RCYXNlUGFyc2UgY2xhc3MKLSAqICAgICAgaG93IGJpZyBkYXRhIGNodW5rcyBpdCB3YW50cyB0byByZWNlaXZlIChtaW5fZnJhbWVfc2l6ZSkuIEl0IGNhbiBkbwotICogICAgICB0aGlzIHdpdGggZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplKCkuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgICNHc3RCYXNlUGFyc2UgY2xhc3Mgc2V0cyB1cCBhcHByb3ByaWF0ZSBkYXRhIHBhc3NpbmcgbW9kZSAocHVsbC9wdXNoKQotICogICAgICBhbmQgc3RhcnRzIHRvIHByb2Nlc3MgdGhlIGRhdGEuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L2l0ZW1pemVkbGlzdD4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDx0aXRsZT5QYXJzaW5nIHBoYXNlPC90aXRsZT4KLSAqICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgICAjR3N0QmFzZVBhcnNlIGdhdGhlcnMgYXQgbGVhc3QgbWluX2ZyYW1lX3NpemUgYnl0ZXMgb2YgZGF0YSBlaXRoZXIKLSAqICAgICAgIGJ5IHB1bGxpbmcgaXQgZnJvbSB1cHN0cmVhbSBvciBjb2xsZWN0aW5nIGJ1ZmZlcnMgaW4gYW4gaW50ZXJuYWwKLSAqICAgICAgICNHc3RBZGFwdGVyLgotICogICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICAgIEEgYnVmZmVyIG9mIChhdCBsZWFzdCkgbWluX2ZyYW1lX3NpemUgYnl0ZXMgaXMgcGFzc2VkIHRvIHN1YmNsYXNzIHdpdGgKLSAqICAgICAgIEBoYW5kbGVfZnJhbWUuIFN1YmNsYXNzIGNoZWNrcyB0aGUgY29udGVudHMgYW5kIGNhbiBvcHRpb25hbGx5Ci0gKiAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0sgYWxvbmcgd2l0aCBhbiBhbW91bnQgb2YgZGF0YSB0byBiZSBza2lwcGVkIHRvIGZpbmQKLSAqICAgICAgIGEgdmFsaWQgZnJhbWUgKHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgc3Vic2VxdWVudCBESVNDT05UKS4KLSAqICAgICAgIElmLCBvdGhlcndpc2UsIHRoZSBidWZmZXIgZG9lcyBub3QgaG9sZCBhIGNvbXBsZXRlIGZyYW1lLAotICogICAgICAgQGhhbmRsZV9mcmFtZSBjYW4gbWVyZWx5IHJldHVybiBhbmQgd2lsbCBiZSBjYWxsZWQgYWdhaW4gd2hlbiBhZGRpdGlvbmFsCi0gKiAgICAgICBkYXRhIGlzIGF2YWlsYWJsZS4gIEluIHB1c2ggbW9kZSB0aGlzIGFtb3VudHMgdG8gYW4KLSAqICAgICAgIGFkZGl0aW9uYWwgaW5wdXQgYnVmZmVyICh0aHVzIG1pbmltYWwgYWRkaXRpb25hbCBsYXRlbmN5KSwgaW4gcHVsbCBtb2RlCi0gKiAgICAgICB0aGlzIGFtb3VudHMgdG8gc29tZSBhcmJpdHJhcnkgcmVhc29uYWJsZSBidWZmZXIgc2l6ZSBpbmNyZWFzZS4KLSAqICAgICAgIE9mIGNvdXJzZSwgZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplKCkgY291bGQgYWxzbyBiZSB1c2VkIGlmIGEKLSAqICAgICAgIHZlcnkgc3BlY2lmaWMga25vd24gYW1vdW50IG9mIGFkZGl0aW9uYWwgZGF0YSBpcyByZXF1aXJlZC4KLSAqICAgICAgIElmLCBob3dldmVyLCB0aGUgYnVmZmVyIGhvbGRzIGEgY29tcGxldGUgdmFsaWQgZnJhbWUsIGl0IGNhbiBwYXNzCi0gKiAgICAgICB0aGUgc2l6ZSBvZiB0aGlzIGZyYW1lIHRvIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZSgpLgotICogICAgICAgSWYgYWN0aW5nIGFzIGEgY29udmVydGVyLCBpdCBjYW4gYWxzbyBtZXJlbHkgaW5kaWNhdGUgY29uc3VtZWQgaW5wdXQgZGF0YQotICogICAgICAgd2hpbGUgc2ltdWx0YW5lb3VzbHkgcHJvdmlkaW5nIGN1c3RvbSBvdXRwdXQgZGF0YS4KLSAqICAgICAgIE5vdGUgdGhhdCBiYXNlY2xhc3MgcGVyZm9ybXMgc29tZSBwcm9jZXNzaW5nIChzdWNoIGFzIHRyYWNraW5nCi0gKiAgICAgICBvdmVyYWxsIGNvbnN1bWVkIGRhdGEgcmF0ZSB2ZXJzdXMgZHVyYXRpb24pIGZvciBlYWNoIGZpbmlzaGVkIGZyYW1lLAotICogICAgICAgYnV0IG90aGVyIHN0YXRlIGlzIG9ubHkgdXBkYXRlZCB1cG9uIGVhY2ggY2FsbCB0byBAaGFuZGxlX2ZyYW1lCi0gKiAgICAgICAoc3VjaCBhcyB0cmFja2luZyB1cHN0cmVhbSBpbnB1dCB0aW1lc3RhbXApLgotICogICAgICAgPC9wYXJhPjxwYXJhPgotICogICAgICAgU3ViY2xhc3MgaXMgYWxzbyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgYnVmZmVyIG1ldGFkYXRhCi0gKiAgICAgICAoZS5nLiBidWZmZXIgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiwgb3Iga2V5ZnJhbWUgaWYgYXBwbGljYWJsZSkuCi0gKiAgICAgICAoYWx0aG91Z2ggdGhlIGxhdHRlciBjYW4gYWxzbyBiZSBkb25lIGJ5ICNHc3RCYXNlUGFyc2UgaWYgaXQgaXMKLSAqICAgICAgIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCwgc2VlIGJlbG93KS4gIEZyYW1lIGlzIHByb3ZpZGVkIHdpdGgKLSAqICAgICAgIHRpbWVzdGFtcCBkZXJpdmVkIGZyb20gdXBzdHJlYW0gKGFzIG11Y2ggYXMgZ2VuZXJhbGx5IHBvc3NpYmxlKSwKLSAqICAgICAgIGR1cmF0aW9uIG9idGFpbmVkIGZyb20gY29uZmlndXJhdGlvbiAoc2VlIGJlbG93KSwgYW5kIG9mZnNldAotICogICAgICAgaWYgbWVhbmluZ2Z1bCAoaW4gcHVsbCBtb2RlKS4KLSAqICAgICAgIDwvcGFyYT48cGFyYT4KLSAqICAgICAgIE5vdGUgdGhhdCBAY2hlY2tfdmFsaWRfZnJhbWUgbWlnaHQgcmVjZWl2ZSBhbnkgc21hbGwKLSAqICAgICAgIGFtb3VudCBvZiBpbnB1dCBkYXRhIHdoZW4gbGVmdG92ZXIgZGF0YSBpcyBiZWluZyBkcmFpbmVkIChlLmcuIGF0IEVPUykuCi0gKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICAgQXMgcGFydCBvZiBmaW5pc2ggZnJhbWUgcHJvY2Vzc2luZywKLSAqICAgICAgIGp1c3QgcHJpb3IgdG8gYWN0dWFsbHkgcHVzaGluZyB0aGUgYnVmZmVyIGluIHF1ZXN0aW9uLAotICogICAgICAgaXQgaXMgcGFzc2VkIHRvIEBwcmVfcHVzaF9mcmFtZSB3aGljaCBnaXZlcyBzdWJjbGFzcyB5ZXQgb25lCi0gKiAgICAgICBsYXN0IGNoYW5jZSB0byBleGFtaW5lIGJ1ZmZlciBtZXRhZGF0YSwgb3IgdG8gc2VuZCBzb21lIGN1c3RvbSAodGFnKQotICogICAgICAgZXZlbnRzLCBvciB0byBwZXJmb3JtIGN1c3RvbSAoc2VnbWVudCkgZmlsdGVyaW5nLgotICogICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICAgIER1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzICNHc3RCYXNlUGFyc2VDbGFzcyB3aWxsIGhhbmRsZSBib3RoIHNyY3BhZAotICogICAgICAgYW5kIHNpbmtwYWQgZXZlbnRzLiBUaGV5IHdpbGwgYmUgcGFzc2VkIHRvIHN1YmNsYXNzIGlmIEBldmVudCBvcgotICogICAgICAgQHNyY19ldmVudCBjYWxsYmFja3MgaGF2ZSBiZWVuIHByb3ZpZGVkLgotICogICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L2l0ZW1pemVkbGlzdD4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPlNodXRkb3duIHBoYXNlPC90aXRsZT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICNHc3RCYXNlUGFyc2UgY2xhc3MgY2FsbHMgQHN0b3AgdG8gaW5mb3JtIHRoZSBzdWJjbGFzcyB0aGF0IGRhdGEKLSAqICAgICBwYXJzaW5nIHdpbGwgYmUgc3RvcHBlZC4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDwvaXRlbWl6ZWRsaXN0PgotICogPC9saXN0aXRlbT4KLSAqIDwvb3JkZXJlZGxpc3Q+Ci0gKgotICogU3ViY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBwYWQgdGVtcGxhdGUgY2FwcyBmb3IKLSAqIHNvdXJjZSBhbmQgc2luayBwYWRzLiBUaGUgcGFkcyBuZWVkIHRvIGJlIG5hbWVkICJzaW5rIiBhbmQgInNyYyIuIEl0IGFsc28KLSAqIG5lZWRzIHRvIHNldCB0aGUgZml4ZWQgY2FwcyBvbiBzcmNwYWQsIHdoZW4gdGhlIGZvcm1hdCBpcyBlbnN1cmVkIChlLmcuCi0gKiB3aGVuIGJhc2UgY2xhc3MgY2FsbHMgc3ViY2xhc3MnIEBzZXRfc2lua19jYXBzIGZ1bmN0aW9uKS4KLSAqCi0gKiBUaGlzIGJhc2UgY2xhc3MgdXNlcyAlR1NUX0ZPUk1BVF9ERUZBVUxUIGFzIGEgbWVhbmluZyBvZiBmcmFtZXMuIFNvLAotICogc3ViY2xhc3MgY29udmVyc2lvbiByb3V0aW5lIG5lZWRzIHRvIGtub3cgdGhhdCBjb252ZXJzaW9uIGZyb20KLSAqICVHU1RfRk9STUFUX1RJTUUgdG8gJUdTVF9GT1JNQVRfREVGQVVMVCBtdXN0IHJldHVybiB0aGUKLSAqIGZyYW1lIG51bWJlciB0aGF0IGNhbiBiZSBmb3VuZCBmcm9tIHRoZSBnaXZlbiBieXRlIHBvc2l0aW9uLgotICoKLSAqICNHc3RCYXNlUGFyc2UgdXNlcyBzdWJjbGFzc2VzIGNvbnZlcnNpb24gbWV0aG9kcyBhbHNvIGZvciBzZWVraW5nIChvcgotICogb3RoZXJ3aXNlIHVzZXMgaXRzIG93biBkZWZhdWx0IG9uZSwgc2VlIGFsc28gYmVsb3cpLgotICoKLSAqIFN1YmNsYXNzIEBzdGFydCBhbmQgQHN0b3AgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIHRvIGluZm9ybSB0aGUgYmVnaW5uaW5nCi0gKiBhbmQgZW5kIG9mIGRhdGEgcHJvY2Vzc2luZy4KLSAqCi0gKiBUaGluZ3MgdGhhdCBzdWJjbGFzcyBuZWVkIHRvIHRha2UgY2FyZSBvZjoKLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIHBhZCB0ZW1wbGF0ZXM8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICBGaXhhdGUgdGhlIHNvdXJjZSBwYWQgY2FwcyB3aGVuIGFwcHJvcHJpYXRlCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgIEluZm9ybSBiYXNlIGNsYXNzIGhvdyBiaWcgZGF0YSBjaHVua3Mgc2hvdWxkIGJlIHJldHJpZXZlZC4gVGhpcyBpcwotICogICAgICBkb25lIHdpdGggZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplKCkgZnVuY3Rpb24uCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgIEV4YW1pbmUgZGF0YSBjaHVua3MgcGFzc2VkIHRvIHN1YmNsYXNzIHdpdGggQGhhbmRsZV9mcmFtZSBhbmQgcGFzcwotICogICAgICBwcm9wZXIgZnJhbWUocykgdG8gZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lKCksIGFuZCBzZXR0aW5nIHNyYyBwYWQKLSAqICAgICAgY2FwcyBhbmQgdGltZXN0YW1wcyBvbiBmcmFtZS4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGNvbnZlcnNpb24gZnVuY3Rpb25zPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICAgVXBkYXRlIHRoZSBkdXJhdGlvbiBpbmZvcm1hdGlvbiB3aXRoIGdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbigpCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgIE9wdGlvbmFsbHkgcGFzc3Rocm91Z2ggdXNpbmcgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoKCkKLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICAgQ29uZmlndXJlIHZhcmlvdXMgYmFzZXBhcnNlIHBhcmFtZXRlcnMgdXNpbmcKLSAqICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSgpLCBnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUoKQotICogICAgICBhbmQgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGUoKS4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICAgSW4gcGFydGljdWxhciwgaWYgc3ViY2xhc3MgaXMgdW5hYmxlIHRvIGRldGVybWluZSBhIGR1cmF0aW9uLCBidXQKLSAqICAgICAgcGFyc2luZyAob3Igc3BlY3MpIHlpZWxkcyBhIGZyYW1lcyBwZXIgc2Vjb25kcyByYXRlLCB0aGVuIHRoaXMgY2FuIGJlCi0gKiAgICAgIHByb3ZpZGVkIHRvICNHc3RCYXNlUGFyc2UgdG8gZW5hYmxlIGl0IHRvIGNhdGVyIGZvcgotICogICAgICBidWZmZXIgdGltZSBtZXRhZGF0YSAod2hpY2ggd2lsbCBiZSB0YWtlbiBmcm9tIHVwc3RyZWFtIGFzIG11Y2ggYXMKLSAqICAgICAgcG9zc2libGUpLiBJbnRlcm5hbGx5IGtlZXBpbmcgdHJhY2sgb2YgZnJhbWUgZHVyYXRpb25zIGFuZCByZXNwZWN0aXZlCi0gKiAgICAgIHNpemVzIHRoYXQgaGF2ZSBiZWVuIHB1c2hlZCBwcm92aWRlcyAjR3N0QmFzZVBhcnNlIHdpdGggYW4gZXN0aW1hdGVkCi0gKiAgICAgIGJpdHJhdGUuIEEgZGVmYXVsdCBAY29udmVydCAodXNlZCBpZiBub3Qgb3ZlcnJpZGRlbikgd2lsbCB0aGVuIHVzZSB0aGVzZQotICogICAgICByYXRlcyB0byBwZXJmb3JtIG9idmlvdXMgY29udmVyc2lvbnMuICBUaGVzZSByYXRlcyBhcmUgYWxzbyB1c2VkIHRvCi0gKiAgICAgIHVwZGF0ZSAoZXN0aW1hdGVkKSBkdXJhdGlvbiBhdCByZWd1bGFyIGZyYW1lIGludGVydmFscy4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqCi0gKi8KLQotLyogVE9ETzoKLSAqICAtIEluIHB1c2ggbW9kZSBwcm92aWRlIGEgcXVldWUgb2YgYWRhcHRlci0icXVldWVkIiBidWZmZXJzIGZvciB1cHN0cmVhbQotICogICAgYnVmZmVyIG1ldGFkYXRhCi0gKiAgLSBRdWV1ZSBidWZmZXJzL2V2ZW50cyB1bnRpbCBjYXBzIGFyZSBzZXQKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi0jaW5jbHVkZSAiZ3N0YmFzZXBhcnNlLmgiCi0KLS8qIEZJWE1FOiBnZXQgcmlkIG9mIG9sZCBHc3RJbmRleCBjb2RlICovCi0jaW5jbHVkZSAiZ3N0aW5kZXguaCIKLSNpbmNsdWRlICJnc3RpbmRleC5jIgotI2luY2x1ZGUgImdzdG1lbWluZGV4LmMiCi0KLSNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRlJBTUVfUFJJVkFURV9GTEFHX05PQUxMT0MgICgxIDw8IDApCi0KLSNkZWZpbmUgTUlOX0ZSQU1FU19UT19QT1NUX0JJVFJBVEUgMTAKLSNkZWZpbmUgVEFSR0VUX0RJRkZFUkVOQ0UgICAgICAgICAgKDIwICogR1NUX1NFQ09ORCkKLSNkZWZpbmUgTUFYX0lOREVYX0VOVFJJRVMgICAgICAgICAgNDA5NgotI2RlZmluZSBVUERBVEVfVEhSRVNIT0xEICAgICAgICAgICAyCi0KLSNkZWZpbmUgQUJTRElGRihhLGIpICgoKGEpID4gKGIpKSA/ICgoYSkgLSAoYikpIDogKChiKSAtIChhKSkpCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9iYXNlX3BhcnNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9iYXNlX3BhcnNlX2RlYnVnCi0KLS8qIFN1cHBvcnRlZCBmb3JtYXRzICovCi1zdGF0aWMgY29uc3QgR3N0Rm9ybWF0IGZtdGxpc3RbXSA9IHsKLSAgR1NUX0ZPUk1BVF9ERUZBVUxULAotICBHU1RfRk9STUFUX0JZVEVTLAotICBHU1RfRk9STUFUX1RJTUUsCi0gIEdTVF9GT1JNQVRfVU5ERUZJTkVECi19OwotCi0jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0dFVF9QUklWQVRFKG9iaikgIFwKLSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfQkFTRV9QQVJTRSwgR3N0QmFzZVBhcnNlUHJpdmF0ZSkpCi0KLXN0cnVjdCBfR3N0QmFzZVBhcnNlUHJpdmF0ZQotewotICBHc3RQYWRNb2RlIHBhZF9tb2RlOwotCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0KLSAgZ2ludDY0IGR1cmF0aW9uOwotICBHc3RGb3JtYXQgZHVyYXRpb25fZm10OwotICBnaW50NjQgZXN0aW1hdGVkX2R1cmF0aW9uOwotICBnaW50NjQgZXN0aW1hdGVkX2RyaWZ0OwotCi0gIGd1aW50IG1pbl9mcmFtZV9zaXplOwotICBnYm9vbGVhbiBkaXNhYmxlX3Bhc3N0aHJvdWdoOwotICBnYm9vbGVhbiBwYXNzdGhyb3VnaDsKLSAgZ2Jvb2xlYW4gcHRzX2ludGVycG9sYXRlOwotICBnYm9vbGVhbiBpbmZlcl90czsKLSAgZ2Jvb2xlYW4gc3luY2FibGU7Ci0gIGdib29sZWFuIGhhc190aW1pbmdfaW5mbzsKLSAgZ3VpbnQgZnBzX251bSwgZnBzX2RlbjsKLSAgZ2ludCB1cGRhdGVfaW50ZXJ2YWw7Ci0gIGd1aW50IGJpdHJhdGU7Ci0gIGd1aW50IGxlYWRfaW4sIGxlYWRfb3V0OwotICBHc3RDbG9ja1RpbWUgbGVhZF9pbl90cywgbGVhZF9vdXRfdHM7Ci0gIEdzdENsb2NrVGltZSBtaW5fbGF0ZW5jeSwgbWF4X2xhdGVuY3k7Ci0KLSAgZ2Jvb2xlYW4gZGlzY29udDsKLSAgZ2Jvb2xlYW4gZmx1c2hpbmc7Ci0gIGdib29sZWFuIGRyYWluOwotICBnYm9vbGVhbiBzYXdfZ2FwczsKLQotICBnaW50NjQgb2Zmc2V0OwotICBnaW50NjQgc3luY19vZmZzZXQ7Ci0gIEdzdENsb2NrVGltZSBuZXh0X3B0czsKLSAgR3N0Q2xvY2tUaW1lIG5leHRfZHRzOwotICBHc3RDbG9ja1RpbWUgcHJldl9wdHM7Ci0gIEdzdENsb2NrVGltZSBwcmV2X2R0czsKLSAgZ2Jvb2xlYW4gcHJldl9kdHNfZnJvbV9wdHM7Ci0gIEdzdENsb2NrVGltZSBmcmFtZV9kdXJhdGlvbjsKLSAgZ2Jvb2xlYW4gc2Vlbl9rZXlmcmFtZTsKLSAgZ2Jvb2xlYW4gaXNfdmlkZW87Ci0gIGdpbnQgZmx1c2hlZDsKLQotICBndWludDY0IGZyYW1lY291bnQ7Ci0gIGd1aW50NjQgYnl0ZWNvdW50OwotICBndWludDY0IGRhdGFfYnl0ZWNvdW50OwotICBndWludDY0IGFjY19kdXJhdGlvbjsKLSAgR3N0Q2xvY2tUaW1lIGZpcnN0X2ZyYW1lX3B0czsKLSAgR3N0Q2xvY2tUaW1lIGZpcnN0X2ZyYW1lX2R0czsKLSAgZ2ludDY0IGZpcnN0X2ZyYW1lX29mZnNldDsKLQotICBnYm9vbGVhbiBwb3N0X21pbl9iaXRyYXRlOwotICBnYm9vbGVhbiBwb3N0X2F2Z19iaXRyYXRlOwotICBnYm9vbGVhbiBwb3N0X21heF9iaXRyYXRlOwotCi0gIGd1aW50IG1pbl9iaXRyYXRlOwotICBndWludCBhdmdfYml0cmF0ZTsKLSAgZ3VpbnQgbWF4X2JpdHJhdGU7Ci0gIGd1aW50IHBvc3RlZF9hdmdfYml0cmF0ZTsKLQotICAvKiBmcmFtZXMvYnVmZmVycyB0aGF0IGFyZSBxdWV1ZWQgYW5kIHJlYWR5IHRvIGdvIG9uIE9LICovCi0gIEdRdWV1ZSBxdWV1ZWRfZnJhbWVzOwotCi0gIEdzdEJ1ZmZlciAqY2FjaGU7Ci0KLSAgLyogaW5kZXggZW50cnkgc3RvcmFnZSwgZWl0aGVyIG91cnMgb3IgcHJvdmlkZWQgKi8KLSAgR3N0SW5kZXggKmluZGV4OwotICBnaW50IGluZGV4X2lkOwotICBnYm9vbGVhbiBvd25faW5kZXg7Ci0gIEdNdXRleCBpbmRleF9sb2NrOwotCi0gIC8qIHNlZWsgdGFibGUgZW50cmllcyBvbmx5IG1haW50YWluZWQgaWYgdXBzdHJlYW0gaXMgQllURSBzZWVrYWJsZSAqLwotICBnYm9vbGVhbiB1cHN0cmVhbV9zZWVrYWJsZTsKLSAgZ2Jvb2xlYW4gdXBzdHJlYW1faGFzX2R1cmF0aW9uOwotICBnaW50NjQgdXBzdHJlYW1fc2l6ZTsKLSAgR3N0Rm9ybWF0IHVwc3RyZWFtX2Zvcm1hdDsKLSAgLyogbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBpbmRleCBlbnRyaWVzICovCi0gIEdzdENsb2NrVGltZURpZmYgaWR4X2ludGVydmFsOwotICBndWludDY0IGlkeF9ieXRlX2ludGVydmFsOwotICAvKiB0cyBhbmQgb2Zmc2V0IG9mIGxhc3QgZW50cnkgYWRkZWQgKi8KLSAgR3N0Q2xvY2tUaW1lIGluZGV4X2xhc3RfdHM7Ci0gIGdpbnQ2NCBpbmRleF9sYXN0X29mZnNldDsKLSAgZ2Jvb2xlYW4gaW5kZXhfbGFzdF92YWxpZDsKLQotICAvKiB0aW1lc3RhbXBzIGN1cnJlbnRseSBwcm9kdWNlZCBhcmUgYWNjdXJhdGUsIGUuZy4gc3RhcnRlZCBmcm9tIDAgb253YXJkcyAqLwotICBnYm9vbGVhbiBleGFjdF9wb3NpdGlvbjsKLSAgLyogc2VlayBldmVudHMgYXJlIHRlbXBvcmFyaWx5IGtlcHQgdG8gbWF0Y2ggdGhlbSB3aXRoIG5ld3NlZ21lbnRzICovCi0gIEdTTGlzdCAqcGVuZGluZ19zZWVrczsKLQotICAvKiByZXZlcnNlIHBsYXliYWNrICovCi0gIEdTTGlzdCAqYnVmZmVyc19wZW5kaW5nOwotICBHU0xpc3QgKmJ1ZmZlcnNfaGVhZDsKLSAgR1NMaXN0ICpidWZmZXJzX3F1ZXVlZDsKLSAgR1NMaXN0ICpidWZmZXJzX3NlbmQ7Ci0gIEdzdENsb2NrVGltZSBsYXN0X3B0czsKLSAgR3N0Q2xvY2tUaW1lIGxhc3RfZHRzOwotICBnaW50NjQgbGFzdF9vZmZzZXQ7Ci0KLSAgLyogUGVuZGluZyBzZXJpYWxpemVkIGV2ZW50cyAqLwotICBHTGlzdCAqcGVuZGluZ19ldmVudHM7Ci0KLSAgLyogSWYgYmFzZXBhcnNlIGhhcyBjaGVja2VkIHRoZSBjYXBzIHRvIGlkZW50aWZ5IGlmIGl0IGlzCi0gICAqIGhhbmRsaW5nIHZpZGVvIG9yIGF1ZGlvICovCi0gIGdib29sZWFuIGNoZWNrZWRfbWVkaWE7Ci0KLSAgLyogb2Zmc2V0IG9mIGxhc3QgcGFyc2VkIGZyYW1lL2RhdGEgKi8KLSAgZ2ludDY0IHByZXZfb2Zmc2V0OwotICAvKiBmb3JjZSBhIG5ldyBmcmFtZSwgcmVnYXJkbGVzcyBvZiBvZmZzZXQgKi8KLSAgZ2Jvb2xlYW4gbmV3X2ZyYW1lOwotICAvKiB3aGV0aGVyIHdlIGFyZSBtZXJlbHkgc2Nhbm5pbmcgZm9yIGEgZnJhbWUgKi8KLSAgZ2Jvb2xlYW4gc2Nhbm5pbmc7Ci0gIC8qIC4uLiBhbmQgcmVzdWx0aW5nIGZyYW1lLCBpZiBhbnkgKi8KLSAgR3N0QmFzZVBhcnNlRnJhbWUgKnNjYW5uZWRfZnJhbWU7Ci0KLSAgLyogVFJVRSBpZiB3ZSdyZSBzdGlsbCBkZXRlY3RpbmcgdGhlIGZvcm1hdCwgaS5lLgotICAgKiBpZiA6OmRldGVjdCgpIGlzIHN0aWxsIGNhbGxlZCBmb3IgZnV0dXJlIGJ1ZmZlcnMgKi8KLSAgZ2Jvb2xlYW4gZGV0ZWN0aW5nOwotICBHTGlzdCAqZGV0ZWN0X2J1ZmZlcnM7Ci0gIGd1aW50IGRldGVjdF9idWZmZXJzX3NpemU7Ci0KLSAgLyogVHJ1ZSB3aGVuIG5vIGJ1ZmZlcnMgaGF2ZSBiZWVuIHJlY2VpdmVkIHlldCAqLwotICBnYm9vbGVhbiBmaXJzdF9idWZmZXI7Ci0KLSAgLyogaWYgVFJVRSwgYSBTVFJFQU1fU1RBUlQgZXZlbnQgbmVlZHMgdG8gYmUgcHVzaGVkICovCi0gIGdib29sZWFuIHB1c2hfc3RyZWFtX3N0YXJ0OwotCi0gIC8qIFdoZW4gd2UgbmVlZCB0byBza2lwIG1vcmUgZGF0YSB0aGFuIHdlIGhhdmUgY3VycmVudGx5ICovCi0gIGd1aW50IHNraXA7Ci0KLSAgLyogVGFnIGhhbmRsaW5nIChzdHJlYW0gdGFncyBvbmx5LCBnbG9iYWwgdGFncyBhcmUgcGFzc2VkIHRocm91Z2ggYXMtaXMpICovCi0gIEdzdFRhZ0xpc3QgKnVwc3RyZWFtX3RhZ3M7Ci0gIEdzdFRhZ0xpc3QgKnBhcnNlcl90YWdzOwotICBHc3RUYWdNZXJnZU1vZGUgcGFyc2VyX3RhZ3NfbWVyZ2VfbW9kZTsKLSAgZ2Jvb2xlYW4gdGFnc19jaGFuZ2VkOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEJhc2VQYXJzZVNlZWsKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBnYm9vbGVhbiBhY2N1cmF0ZTsKLSAgZ2ludDY0IG9mZnNldDsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RzOwotfSBHc3RCYXNlUGFyc2VTZWVrOwotCi0jZGVmaW5lIERFRkFVTFRfRElTQUJMRV9QQVNTVEhST1VHSCAgICAgICAgRkFMU0UKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfRElTQUJMRV9QQVNTVEhST1VHSCwKLSAgUFJPUF9MQVNUCi19OwotCi0jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0lOREVYX0xPQ0socGFyc2UpIFwKLSAgZ19tdXRleF9sb2NrICgmcGFyc2UtPnByaXYtPmluZGV4X2xvY2spOwotI2RlZmluZSBHU1RfQkFTRV9QQVJTRV9JTkRFWF9VTkxPQ0socGFyc2UpIFwKLSAgZ19tdXRleF91bmxvY2sgKCZwYXJzZS0+cHJpdi0+aW5kZXhfbG9jayk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX2NsYXNzX2luaXQgKEdzdEJhc2VQYXJzZUNsYXNzICoga2xhc3MpOwotc3RhdGljIHZvaWQgZ3N0X2Jhc2VfcGFyc2VfaW5pdCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlQ2xhc3MgKiBrbGFzcyk7Ci0KLUdUeXBlCi1nc3RfYmFzZV9wYXJzZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGJhc2VfcGFyc2VfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmYmFzZV9wYXJzZV90eXBlKSkgewotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gYmFzZV9wYXJzZV9pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RCYXNlUGFyc2VDbGFzcyksCi0gICAgICAoR0Jhc2VJbml0RnVuYykgTlVMTCwKLSAgICAgIChHQmFzZUZpbmFsaXplRnVuYykgTlVMTCwKLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X2Jhc2VfcGFyc2VfY2xhc3NfaW5pdCwKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgc2l6ZW9mIChHc3RCYXNlUGFyc2UpLAotICAgICAgMCwKLSAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X2Jhc2VfcGFyc2VfaW5pdCwKLSAgICB9OwotICAgIEdUeXBlIF90eXBlOwotCi0gICAgX3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9FTEVNRU5ULAotICAgICAgICAiR3N0QmFzZVBhcnNlIiwgJmJhc2VfcGFyc2VfaW5mbywgR19UWVBFX0ZMQUdfQUJTVFJBQ1QpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmYmFzZV9wYXJzZV90eXBlLCBfdHlwZSk7Ci0gIH0KLSAgcmV0dXJuIChHVHlwZSkgYmFzZV9wYXJzZV90eXBlOwotfQotCi1zdGF0aWMgdm9pZCBnc3RfYmFzZV9wYXJzZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfYmFzZV9wYXJzZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIHZvaWQgZ3N0X2Jhc2VfcGFyc2VfcmVzZXQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLQotI2lmIDAKLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX3NldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEluZGV4ICogaW5kZXgpOwotc3RhdGljIEdzdEluZGV4ICpnc3RfYmFzZV9wYXJzZV9nZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLSNlbmRpZgotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfcGFyc2Vfc2lua19hY3RpdmF0ZSAoR3N0UGFkICogc2lua3BhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX2hhbmRsZV9zZWVrIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX3NldF91cHN0cmVhbV90YWdzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RUYWdMaXN0ICogdGFnbGlzdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfcGFyc2Vfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9wYXJzZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3BhcnNlX3BhcnNlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnRfZGVmYXVsdCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9wYXJzZV9zcmNfZXZlbnRfZGVmYXVsdCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9wYXJzZV9zaW5rX3F1ZXJ5X2RlZmF1bHQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX3NyY19xdWVyeV9kZWZhdWx0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIHZvaWQgZ3N0X2Jhc2VfcGFyc2VfZHJhaW4gKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLQotc3RhdGljIGdpbnQ2NCBnc3RfYmFzZV9wYXJzZV9maW5kX29mZnNldCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWUsIGdib29sZWFuIGJlZm9yZSwgR3N0Q2xvY2tUaW1lICogX3RzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3BhcnNlX2xvY2F0ZV90aW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RDbG9ja1RpbWUgKiBfdGltZSwgZ2ludDY0ICogX29mZnNldCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3BhcnNlX3N0YXJ0X2ZyYWdtZW50IChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhZ21lbnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIGdib29sZWFuIHByZXZfaGVhZCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9wYXJzZV9zZW5kX2J1ZmZlcnMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLQotc3RhdGljIGlubGluZSBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3BhcnNlX2NoZWNrX3N5bmMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3BhcnNlX2lzX3NlZWthYmxlIChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3BhcnNlX3B1c2hfcGVuZGluZ19ldmVudHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3BhcnNlX2NsZWFyX3F1ZXVlcyAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIGdfc2xpc3RfZm9yZWFjaCAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkLCAoR0Z1bmMpIGdzdF9idWZmZXJfdW5yZWYsIE5VTEwpOwotICBnX3NsaXN0X2ZyZWUgKHBhcnNlLT5wcml2LT5idWZmZXJzX3F1ZXVlZCk7Ci0gIHBhcnNlLT5wcml2LT5idWZmZXJzX3F1ZXVlZCA9IE5VTEw7Ci0gIGdfc2xpc3RfZm9yZWFjaCAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZywgKEdGdW5jKSBnc3RfYnVmZmVyX3VucmVmLAotICAgICAgTlVMTCk7Ci0gIGdfc2xpc3RfZnJlZSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZyk7Ci0gIHBhcnNlLT5wcml2LT5idWZmZXJzX3BlbmRpbmcgPSBOVUxMOwotICBnX3NsaXN0X2ZvcmVhY2ggKHBhcnNlLT5wcml2LT5idWZmZXJzX2hlYWQsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gIGdfc2xpc3RfZnJlZSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfaGVhZCk7Ci0gIHBhcnNlLT5wcml2LT5idWZmZXJzX2hlYWQgPSBOVUxMOwotICBnX3NsaXN0X2ZvcmVhY2ggKHBhcnNlLT5wcml2LT5idWZmZXJzX3NlbmQsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gIGdfc2xpc3RfZnJlZSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfc2VuZCk7Ci0gIHBhcnNlLT5wcml2LT5idWZmZXJzX3NlbmQgPSBOVUxMOwotCi0gIGdfbGlzdF9mb3JlYWNoIChwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnMsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnMpOwotICBwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnMgPSBOVUxMOwotICBwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnNfc2l6ZSA9IDA7Ci0KLSAgZ19xdWV1ZV9mb3JlYWNoICgmcGFyc2UtPnByaXYtPnF1ZXVlZF9mcmFtZXMsCi0gICAgICAoR0Z1bmMpIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUsIE5VTEwpOwotICBnX3F1ZXVlX2NsZWFyICgmcGFyc2UtPnByaXYtPnF1ZXVlZF9mcmFtZXMpOwotCi0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJnBhcnNlLT5wcml2LT5jYWNoZSwgTlVMTCk7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cywgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAocGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzKTsKLSAgcGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzID0gTlVMTDsKLQotICBwYXJzZS0+cHJpdi0+Y2hlY2tlZF9tZWRpYSA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2VfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEJhc2VQYXJzZSAqcGFyc2UgPSBHU1RfQkFTRV9QQVJTRSAob2JqZWN0KTsKLQotICBnX29iamVjdF91bnJlZiAocGFyc2UtPnByaXYtPmFkYXB0ZXIpOwotCi0gIGlmIChwYXJzZS0+cHJpdi0+aW5kZXgpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJzZS0+cHJpdi0+aW5kZXgpOwotICAgIHBhcnNlLT5wcml2LT5pbmRleCA9IE5VTEw7Ci0gIH0KLSAgZ19tdXRleF9jbGVhciAoJnBhcnNlLT5wcml2LT5pbmRleF9sb2NrKTsKLQotICBnc3RfYmFzZV9wYXJzZV9jbGVhcl9xdWV1ZXMgKHBhcnNlKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9wYXJzZV9jbGFzc19pbml0IChHc3RCYXNlUGFyc2VDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RCYXNlUGFyc2VQcml2YXRlKSk7Ci0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX2ZpbmFsaXplKTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX3NldF9wcm9wZXJ0eSk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9wYXJzZV9nZXRfcHJvcGVydHkpOwotCi0gIC8qKgotICAgKiBHc3RCYXNlUGFyc2U6ZGlzYWJsZS1wYXNzdGhyb3VnaDoKLSAgICoKLSAgICogSWYgc2V0IHRvICVUUlVFLCBiYXNlcGFyc2Ugd2lsbCB1bmNvbmRpdGlvbmFsbHkgZm9yY2UgcGFyc2luZyBvZiB0aGUKLSAgICogaW5jb21pbmcgZGF0YS4gVGhpcyBjYW4gYmUgcmVxdWlyZWQgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUgdGhlIGluY29taW5nCi0gICAqIHNpZGUtZGF0YSAoY2FwcywgcHRzLCBkdHMsIC4uLikgaXMgbm90IHRydXN0ZWQgYnkgdGhlIHVzZXIgYW5kIHdhbnRzIHRvCi0gICAqIGZvcmNlIHZhbGlkYXRpb24gYW5kIHBhcnNpbmcgb2YgdGhlIGluY29taW5nIGRhdGEuCi0gICAqIElmIHNldCB0byAlRkFMU0UsIGRlY2lzaW9uIG9mIHdoZXRoZXIgdG8gcGFyc2UgdGhlIGRhdGEgb3Igbm90IGlzIHVwIHRvCi0gICAqIHRoZSBpbXBsZW1lbnRhdGlvbiAoc3RhbmRhcmQgYmVoYXZpb3VyKS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRElTQUJMRV9QQVNTVEhST1VHSCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZGlzYWJsZS1wYXNzdGhyb3VnaCIsICJEaXNhYmxlIHBhc3N0aHJvdWdoIiwKLSAgICAgICAgICAiRm9yY2UgcHJvY2Vzc2luZyAoZGlzYWJsZXMgcGFzc3Rocm91Z2gpIiwKLSAgICAgICAgICBERUZBVUxUX0RJU0FCTEVfUEFTU1RIUk9VR0gsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2VfY2hhbmdlX3N0YXRlKTsKLQotI2lmIDAKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2V0X2luZGV4ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX3NldF9pbmRleCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmdldF9pbmRleCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9wYXJzZV9nZXRfaW5kZXgpOwotI2VuZGlmCi0KLSAgLyogRGVmYXVsdCBoYW5kbGVycyAqLwotICBrbGFzcy0+c2lua19ldmVudCA9IGdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnRfZGVmYXVsdDsKLSAga2xhc3MtPnNyY19ldmVudCA9IGdzdF9iYXNlX3BhcnNlX3NyY19ldmVudF9kZWZhdWx0OwotICBrbGFzcy0+c2lua19xdWVyeSA9IGdzdF9iYXNlX3BhcnNlX3NpbmtfcXVlcnlfZGVmYXVsdDsKLSAga2xhc3MtPnNyY19xdWVyeSA9IGdzdF9iYXNlX3BhcnNlX3NyY19xdWVyeV9kZWZhdWx0OwotICBrbGFzcy0+Y29udmVydCA9IGdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdDsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2Jhc2VfcGFyc2VfZGVidWcsICJiYXNlcGFyc2UiLCAwLAotICAgICAgImJhc2VwYXJzZSBlbGVtZW50Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9wYXJzZV9pbml0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0QmFzZVBhcnNlQ2xhc3MgKiBiY2xhc3MpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICpwYWRfdGVtcGxhdGU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJnc3RfYmFzZV9wYXJzZV9pbml0Iik7Ci0KLSAgcGFyc2UtPnByaXYgPSBHU1RfQkFTRV9QQVJTRV9HRVRfUFJJVkFURSAocGFyc2UpOwotCi0gIHBhZF90ZW1wbGF0ZSA9Ci0gICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChHU1RfRUxFTUVOVF9DTEFTUyAoYmNsYXNzKSwgInNpbmsiKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAocGFkX3RlbXBsYXRlICE9IE5VTEwpOwotICBwYXJzZS0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHBhZF90ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhcnNlLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHBhcnNlLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX3NpbmtfcXVlcnkpKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHBhcnNlLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3BhcnNlX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uIChwYXJzZS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9wYXJzZV9zaW5rX2FjdGl2YXRlKSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAocGFyc2UtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2Vfc2lua19hY3RpdmF0ZV9tb2RlKSk7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04gKHBhcnNlLT5zaW5rcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHBhcnNlKSwgcGFyc2UtPnNpbmtwYWQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2lua3BhZCBjcmVhdGVkIik7Ci0KLSAgcGFkX3RlbXBsYXRlID0KLSAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChiY2xhc3MpLCAic3JjIik7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZF90ZW1wbGF0ZSAhPSBOVUxMKTsKLSAgcGFyc2UtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHBhZF90ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAocGFyc2UtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9wYXJzZV9zcmNfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHBhcnNlLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfcGFyc2Vfc3JjX3F1ZXJ5KSk7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHBhcnNlLT5zcmNwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAocGFyc2UpLCBwYXJzZS0+c3JjcGFkKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzcmMgY3JlYXRlZCIpOwotCi0gIGdfcXVldWVfaW5pdCAoJnBhcnNlLT5wcml2LT5xdWV1ZWRfZnJhbWVzKTsKLQotICBwYXJzZS0+cHJpdi0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLQotICBwYXJzZS0+cHJpdi0+cGFkX21vZGUgPSBHU1RfUEFEX01PREVfTk9ORTsKLQotICBnX211dGV4X2luaXQgKCZwYXJzZS0+cHJpdi0+aW5kZXhfbG9jayk7Ci0KLSAgLyogaW5pdCBzdGF0ZSAqLwotICBnc3RfYmFzZV9wYXJzZV9yZXNldCAocGFyc2UpOwotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImluaXQgb2siKTsKLQotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChwYXJzZSwgR1NUX0VMRU1FTlRfRkxBR19JTkRFWEFCTEUpOwotCi0gIHBhcnNlLT5wcml2LT51cHN0cmVhbV90YWdzID0gTlVMTDsKLSAgcGFyc2UtPnByaXYtPnBhcnNlcl90YWdzID0gTlVMTDsKLSAgcGFyc2UtPnByaXYtPnBhcnNlcl90YWdzX21lcmdlX21vZGUgPSBHU1RfVEFHX01FUkdFX0FQUEVORDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3BhcnNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RCYXNlUGFyc2UgKnBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RJU0FCTEVfUEFTU1RIUk9VR0g6Ci0gICAgICBwYXJzZS0+cHJpdi0+ZGlzYWJsZV9wYXNzdGhyb3VnaCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3BhcnNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RCYXNlUGFyc2UgKnBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RJU0FCTEVfUEFTU1RIUk9VR0g6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcGFyc2UtPnByaXYtPmRpc2FibGVfcGFzc3Rocm91Z2gpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0QmFzZVBhcnNlRnJhbWUgKgotZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfY29weSAoR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0QmFzZVBhcnNlRnJhbWUgKmNvcHk7Ci0KLSAgY29weSA9IGdfc2xpY2VfZHVwIChHc3RCYXNlUGFyc2VGcmFtZSwgZnJhbWUpOwotICBjb3B5LT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoZnJhbWUtPmJ1ZmZlcik7Ci0gIGNvcHktPl9wcml2YXRlX2ZsYWdzICY9IH5HU1RfQkFTRV9QQVJTRV9GUkFNRV9QUklWQVRFX0ZMQUdfTk9BTExPQzsKLQotICBHU1RfVFJBQ0UgKCJjb3BpZWQgZnJhbWUgJXAgLT4gJXAiLCBmcmFtZSwgY29weSk7Ci0KLSAgcmV0dXJuIGNvcHk7Ci19Ci0KLXZvaWQKLWdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUgKEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCi17Ci0gIEdTVF9UUkFDRSAoImZyZWVpbmcgZnJhbWUgJXAiLCBmcmFtZSk7Ci0KLSAgaWYgKGZyYW1lLT5idWZmZXIpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChmcmFtZS0+YnVmZmVyKTsKLSAgICBmcmFtZS0+YnVmZmVyID0gTlVMTDsKLSAgfQotCi0gIGlmICghKGZyYW1lLT5fcHJpdmF0ZV9mbGFncyAmIEdTVF9CQVNFX1BBUlNFX0ZSQU1FX1BSSVZBVEVfRkxBR19OT0FMTE9DKSkgewotICAgIGdfc2xpY2VfZnJlZSAoR3N0QmFzZVBhcnNlRnJhbWUsIGZyYW1lKTsKLSAgfSBlbHNlIHsKLSAgICBtZW1zZXQgKGZyYW1lLCAwLCBzaXplb2YgKCpmcmFtZSkpOwotICB9Ci19Ci0KLUdfREVGSU5FX0JPWEVEX1RZUEUgKEdzdEJhc2VQYXJzZUZyYW1lLCBnc3RfYmFzZV9wYXJzZV9mcmFtZSwKLSAgICAoR0JveGVkQ29weUZ1bmMpIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2NvcHksCi0gICAgKEdCb3hlZEZyZWVGdW5jKSBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlKTsKLQotLyoqCi0gKiBnc3RfYmFzZV9wYXJzZV9mcmFtZV9pbml0OgotICogQGZyYW1lOiAjR3N0QmFzZVBhcnNlRnJhbWUuCi0gKgotICogU2V0cyBhICNHc3RCYXNlUGFyc2VGcmFtZSB0byBpbml0aWFsIHN0YXRlLiAgQ3VycmVudGx5IHRoaXMgbWVhbnMKLSAqIGFsbCBwdWJsaWMgZmllbGRzIGFyZSB6ZXJvLWVkIGFuZCBhIHByaXZhdGUgZmxhZyBpcyBzZXQgdG8gbWFrZQotICogc3VyZSBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlKCkgb25seSBmcmVlcyB0aGUgY29udGVudHMgYnV0IG5vdAotICogdGhlIGFjdHVhbCBmcmFtZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBhICNHc3RCYXNlUGFyc2VGcmFtZQotICogYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4KLSAqLwotdm9pZAotZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCAoR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSkKLXsKLSAgbWVtc2V0IChmcmFtZSwgMCwgc2l6ZW9mIChHc3RCYXNlUGFyc2VGcmFtZSkpOwotICBmcmFtZS0+X3ByaXZhdGVfZmxhZ3MgPSBHU1RfQkFTRV9QQVJTRV9GUkFNRV9QUklWQVRFX0ZMQUdfTk9BTExPQzsKLSAgR1NUX1RSQUNFICgiaW5pdGVkIGZyYW1lICVwIiwgZnJhbWUpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldzoKLSAqIEBidWZmZXI6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0QnVmZmVyCi0gKiBAZmxhZ3M6IHRoZSBmbGFncwotICogQG92ZXJoZWFkOiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyBmcmFtZSB3aGljaCBzaG91bGQgYmUgY291bnRlZCBhcwotICogICAgIG1ldGFkYXRhIG92ZXJoZWFkLCBpZS4gbm90IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhdmVyYWdlIGJpdHJhdGUuCi0gKiAgICAgU2V0IHRvIC0xIHRvIG1hcmsgdGhlIGVudGlyZSBmcmFtZSBhcyBtZXRhZGF0YS4gSWYgaW4gZG91YnQsIHNldCB0byAwLgotICoKLSAqIEFsbG9jYXRlcyBhIG5ldyAjR3N0QmFzZVBhcnNlRnJhbWUuIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IGZvciBiaW5kaW5ncywKLSAqIGVsZW1lbnRzIHdyaXR0ZW4gaW4gQyBzaG91bGQgdXN1YWxseSBhbGxvY2F0ZSB0aGUgZnJhbWUgb24gdGhlIHN0YWNrIGFuZAotICogdGhlbiB1c2UgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCgpIHRvIGluaXRpYWxpc2UgaXQuCi0gKgotICogUmV0dXJuczogYSBuZXdseS1hbGxvY2F0ZWQgI0dzdEJhc2VQYXJzZUZyYW1lLiBGcmVlIHdpdGgKLSAqICAgICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICovCi1Hc3RCYXNlUGFyc2VGcmFtZSAqCi1nc3RfYmFzZV9wYXJzZV9mcmFtZV9uZXcgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0QmFzZVBhcnNlRnJhbWVGbGFncyBmbGFncywKLSAgICBnaW50IG92ZXJoZWFkKQotewotICBHc3RCYXNlUGFyc2VGcmFtZSAqZnJhbWU7Ci0KLSAgZnJhbWUgPSBnX3NsaWNlX25ldzAgKEdzdEJhc2VQYXJzZUZyYW1lKTsKLSAgZnJhbWUtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotCi0gIEdTVF9UUkFDRSAoImNyZWF0ZWQgZnJhbWUgJXAiLCBmcmFtZSk7Ci0gIHJldHVybiBmcmFtZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfYmFzZV9wYXJzZV91cGRhdGVfZmxhZ3MgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBwYXJzZS0+ZmxhZ3MgPSAwOwotCi0gIC8qIHNldCBmbGFncyBvbmUgYnkgb25lIGZvciBjbGFyaXR5ICovCi0gIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+ZHJhaW4pKQotICAgIHBhcnNlLT5mbGFncyB8PSBHU1RfQkFTRV9QQVJTRV9GTEFHX0RSQUlOSU5HOwotCi0gIC8qIGxvc2luZyBzeW5jIGlzIHByZXR0eSBtdWNoIGEgZGlzY29udCAoYW5kIHZpY2UgdmVyc2EpLCBubyA/ICovCi0gIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+ZGlzY29udCkpCi0gICAgcGFyc2UtPmZsYWdzIHw9IEdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9iYXNlX3BhcnNlX3VwZGF0ZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCi17Ci0gIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+ZGlzY29udCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm1hcmtpbmcgRElTQ09OVCIpOwotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGZyYW1lLT5idWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKGZyYW1lLT5idWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgfQotCi0gIGlmIChwYXJzZS0+cHJpdi0+cHJldl9vZmZzZXQgIT0gcGFyc2UtPnByaXYtPm9mZnNldCB8fCBwYXJzZS0+cHJpdi0+bmV3X2ZyYW1lKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAibWFya2luZyBhcyBuZXcgZnJhbWUiKTsKLSAgICBmcmFtZS0+ZmxhZ3MgfD0gR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19ORVdfRlJBTUU7Ci0gIH0KLQotICBmcmFtZS0+b2Zmc2V0ID0gcGFyc2UtPnByaXYtPnByZXZfb2Zmc2V0ID0gcGFyc2UtPnByaXYtPm9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3BhcnNlX3Jlc2V0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZwYXJzZS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgcGFyc2UtPnByaXYtPmR1cmF0aW9uID0gLTE7Ci0gIHBhcnNlLT5wcml2LT5taW5fZnJhbWVfc2l6ZSA9IDE7Ci0gIHBhcnNlLT5wcml2LT5kaXNjb250ID0gVFJVRTsKLSAgcGFyc2UtPnByaXYtPmZsdXNoaW5nID0gRkFMU0U7Ci0gIHBhcnNlLT5wcml2LT5zYXdfZ2FwcyA9IEZBTFNFOwotICBwYXJzZS0+cHJpdi0+b2Zmc2V0ID0gMDsKLSAgcGFyc2UtPnByaXYtPnN5bmNfb2Zmc2V0ID0gMDsKLSAgcGFyc2UtPnByaXYtPnVwZGF0ZV9pbnRlcnZhbCA9IC0xOwotICBwYXJzZS0+cHJpdi0+ZnBzX251bSA9IHBhcnNlLT5wcml2LT5mcHNfZGVuID0gMDsKLSAgcGFyc2UtPnByaXYtPmZyYW1lX2R1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcGFyc2UtPnByaXYtPmxlYWRfaW4gPSBwYXJzZS0+cHJpdi0+bGVhZF9vdXQgPSAwOwotICBwYXJzZS0+cHJpdi0+bGVhZF9pbl90cyA9IHBhcnNlLT5wcml2LT5sZWFkX291dF90cyA9IDA7Ci0gIHBhcnNlLT5wcml2LT5iaXRyYXRlID0gMDsKLSAgcGFyc2UtPnByaXYtPmZyYW1lY291bnQgPSAwOwotICBwYXJzZS0+cHJpdi0+Ynl0ZWNvdW50ID0gMDsKLSAgcGFyc2UtPnByaXYtPmFjY19kdXJhdGlvbiA9IDA7Ci0gIHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV9wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwYXJzZS0+cHJpdi0+Zmlyc3RfZnJhbWVfZHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcGFyc2UtPnByaXYtPmZpcnN0X2ZyYW1lX29mZnNldCA9IC0xOwotICBwYXJzZS0+cHJpdi0+ZXN0aW1hdGVkX2R1cmF0aW9uID0gLTE7Ci0gIHBhcnNlLT5wcml2LT5lc3RpbWF0ZWRfZHJpZnQgPSAwOwotICBwYXJzZS0+cHJpdi0+bmV4dF9wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwYXJzZS0+cHJpdi0+bmV4dF9kdHMgPSAwOwotICBwYXJzZS0+cHJpdi0+c3luY2FibGUgPSBUUlVFOwotICBwYXJzZS0+cHJpdi0+ZGlzYWJsZV9wYXNzdGhyb3VnaCA9IERFRkFVTFRfRElTQUJMRV9QQVNTVEhST1VHSDsKLSAgcGFyc2UtPnByaXYtPnBhc3N0aHJvdWdoID0gRkFMU0U7Ci0gIHBhcnNlLT5wcml2LT5wdHNfaW50ZXJwb2xhdGUgPSBUUlVFOwotICBwYXJzZS0+cHJpdi0+aW5mZXJfdHMgPSBUUlVFOwotICBwYXJzZS0+cHJpdi0+aGFzX3RpbWluZ19pbmZvID0gRkFMU0U7Ci0gIHBhcnNlLT5wcml2LT5taW5fYml0cmF0ZSA9IEdfTUFYVUlOVDsKLSAgcGFyc2UtPnByaXYtPm1heF9iaXRyYXRlID0gMDsKLSAgcGFyc2UtPnByaXYtPmF2Z19iaXRyYXRlID0gMDsKLSAgcGFyc2UtPnByaXYtPnBvc3RlZF9hdmdfYml0cmF0ZSA9IDA7Ci0KLSAgcGFyc2UtPnByaXYtPmluZGV4X2xhc3RfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF9vZmZzZXQgPSAtMTsKLSAgcGFyc2UtPnByaXYtPmluZGV4X2xhc3RfdmFsaWQgPSBUUlVFOwotICBwYXJzZS0+cHJpdi0+dXBzdHJlYW1fc2Vla2FibGUgPSBGQUxTRTsKLSAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX3NpemUgPSAwOwotICBwYXJzZS0+cHJpdi0+dXBzdHJlYW1faGFzX2R1cmF0aW9uID0gRkFMU0U7Ci0gIHBhcnNlLT5wcml2LT51cHN0cmVhbV9mb3JtYXQgPSBHU1RfRk9STUFUX1VOREVGSU5FRDsKLSAgcGFyc2UtPnByaXYtPmlkeF9pbnRlcnZhbCA9IDA7Ci0gIHBhcnNlLT5wcml2LT5pZHhfYnl0ZV9pbnRlcnZhbCA9IDA7Ci0gIHBhcnNlLT5wcml2LT5leGFjdF9wb3NpdGlvbiA9IFRSVUU7Ci0gIHBhcnNlLT5wcml2LT5zZWVuX2tleWZyYW1lID0gRkFMU0U7Ci0gIHBhcnNlLT5wcml2LT5jaGVja2VkX21lZGlhID0gRkFMU0U7Ci0KLSAgcGFyc2UtPnByaXYtPmxhc3RfZHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcGFyc2UtPnByaXYtPmxhc3RfcHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcGFyc2UtPnByaXYtPmxhc3Rfb2Zmc2V0ID0gMDsKLQotICBwYXJzZS0+cHJpdi0+c2tpcCA9IDA7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsCi0gICAgICBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cyk7Ci0gIHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7Ci0KLSAgaWYgKHBhcnNlLT5wcml2LT5jYWNoZSkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKHBhcnNlLT5wcml2LT5jYWNoZSk7Ci0gICAgcGFyc2UtPnByaXYtPmNhY2hlID0gTlVMTDsKLSAgfQotCi0gIGdfc2xpc3RfZm9yZWFjaCAocGFyc2UtPnByaXYtPnBlbmRpbmdfc2Vla3MsIChHRnVuYykgZ19mcmVlLCBOVUxMKTsKLSAgZ19zbGlzdF9mcmVlIChwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWVrcyk7Ci0gIHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZWtzID0gTlVMTDsKLQotICBpZiAocGFyc2UtPnByaXYtPmFkYXB0ZXIpCi0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKLQotICBnc3RfYmFzZV9wYXJzZV9zZXRfdXBzdHJlYW1fdGFncyAocGFyc2UsIE5VTEwpOwotCi0gIGlmIChwYXJzZS0+cHJpdi0+cGFyc2VyX3RhZ3MpIHsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHBhcnNlLT5wcml2LT5wYXJzZXJfdGFncyk7Ci0gICAgcGFyc2UtPnByaXYtPnBhcnNlcl90YWdzID0gTlVMTDsKLSAgfQotICBwYXJzZS0+cHJpdi0+cGFyc2VyX3RhZ3NfbWVyZ2VfbW9kZSA9IEdTVF9UQUdfTUVSR0VfQVBQRU5EOwotCi0gIHBhcnNlLT5wcml2LT5uZXdfZnJhbWUgPSBUUlVFOwotCi0gIHBhcnNlLT5wcml2LT5maXJzdF9idWZmZXIgPSBUUlVFOwotCi0gIGdfbGlzdF9mb3JlYWNoIChwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnMsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnMpOwotICBwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnMgPSBOVUxMOwotICBwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnNfc2l6ZSA9IDA7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfYml0cmF0ZV90YWcgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBjb25zdCBnY2hhciAqIHRhZykKLXsKLSAgZ2Jvb2xlYW4gZ290X3RhZyA9IEZBTFNFOwotICBndWludCBuID0gMDsKLQotICBpZiAocGFyc2UtPnByaXYtPnVwc3RyZWFtX3RhZ3MgIT0gTlVMTCkKLSAgICBnb3RfdGFnID0gZ3N0X3RhZ19saXN0X2dldF91aW50IChwYXJzZS0+cHJpdi0+dXBzdHJlYW1fdGFncywgdGFnLCAmbik7Ci0KLSAgaWYgKCFnb3RfdGFnICYmIHBhcnNlLT5wcml2LT5wYXJzZXJfdGFncyAhPSBOVUxMKQotICAgIGdvdF90YWcgPSBnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKHBhcnNlLT5wcml2LT5wYXJzZXJfdGFncywgdGFnLCAmbik7Ci0KLSAgcmV0dXJuIGdvdF90YWc7Ci19Ci0KLS8qIGNoZWNrIGlmIHVwc3RyZWFtIG9yIHN1YmNsYXNzIHRhZ3MgY29udGFpbiBiaXRyYXRlcyBhbHJlYWR5ICovCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfYml0cmF0ZV90YWdzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgcGFyc2UtPnByaXYtPnBvc3RfbWluX2JpdHJhdGUgPQotICAgICAgIWdzdF9iYXNlX3BhcnNlX2NoZWNrX2JpdHJhdGVfdGFnIChwYXJzZSwgR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUpOwotICBwYXJzZS0+cHJpdi0+cG9zdF9hdmdfYml0cmF0ZSA9Ci0gICAgICAhZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfYml0cmF0ZV90YWcgKHBhcnNlLCBHU1RfVEFHX0JJVFJBVEUpOwotICBwYXJzZS0+cHJpdi0+cG9zdF9tYXhfYml0cmF0ZSA9Ci0gICAgICAhZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfYml0cmF0ZV90YWcgKHBhcnNlLCBHU1RfVEFHX01BWElNVU1fQklUUkFURSk7Ci19Ci0KLS8qIFF1ZXVlcyBuZXcgdGFnIGV2ZW50IHdpdGggdGhlIGN1cnJlbnQgY29tYmluZWQgc3RhdGUgb2YgdGhlIHN0cmVhbSB0YWdzCi0gKiAoaS5lLiB1cHN0cmVhbSB0YWdzIG1lcmdlZCB3aXRoIHN1YmNsYXNzIHRhZ3MgYW5kIGN1cnJlbnQgYmFzZXBhcnNlIHRhZ3MpICovCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2VfcXVldWVfdGFnX2V2ZW50X3VwZGF0ZSAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIEdzdFRhZ0xpc3QgKm1lcmdlZF90YWdzOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInVwc3RyZWFtIDogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBwYXJzZS0+cHJpdi0+dXBzdHJlYW1fdGFncyk7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInBhcnNlciAgIDogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBwYXJzZS0+cHJpdi0+cGFyc2VyX3RhZ3MpOwotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJtb2RlICAgICA6ICVkIiwgcGFyc2UtPnByaXYtPnBhcnNlcl90YWdzX21lcmdlX21vZGUpOwotCi0gIG1lcmdlZF90YWdzID0KLSAgICAgIGdzdF90YWdfbGlzdF9tZXJnZSAocGFyc2UtPnByaXYtPnVwc3RyZWFtX3RhZ3MsIHBhcnNlLT5wcml2LT5wYXJzZXJfdGFncywKLSAgICAgIHBhcnNlLT5wcml2LT5wYXJzZXJfdGFnc19tZXJnZV9tb2RlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm1lcmdlZCAgIDogJSIgR1NUX1BUUl9GT1JNQVQsIG1lcmdlZF90YWdzKTsKLQotICBpZiAobWVyZ2VkX3RhZ3MgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKGdzdF90YWdfbGlzdF9pc19lbXB0eSAobWVyZ2VkX3RhZ3MpKSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChtZXJnZWRfdGFncyk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKHBhcnNlLT5wcml2LT5mcmFtZWNvdW50ID49IE1JTl9GUkFNRVNfVE9fUE9TVF9CSVRSQVRFKSB7Ci0gICAgLyogb25seSBhZGQgYml0cmF0ZSB0YWdzIHRvIG5vbi1lbXB0eSB0YWdsaXN0cyBmb3Igbm93LCBhbmQgb25seSBpZiBuZWl0aGVyCi0gICAgICogdXBzdHJlYW0gdGFncyBub3IgdGhlIHN1YmNsYXNzIHNldHMgdGhlIGJpdHJhdGUgdGFnIGluIHF1ZXN0aW9uIGFscmVhZHkgKi8KLSAgICBpZiAocGFyc2UtPnByaXYtPm1pbl9iaXRyYXRlICE9IEdfTUFYVUlOVCAmJiBwYXJzZS0+cHJpdi0+cG9zdF9taW5fYml0cmF0ZSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiYWRkaW5nIG1pbiBiaXRyYXRlICV1IiwgcGFyc2UtPnByaXYtPm1pbl9iaXRyYXRlKTsKLSAgICAgIGdzdF90YWdfbGlzdF9hZGQgKG1lcmdlZF90YWdzLCBHU1RfVEFHX01FUkdFX0tFRVAsCi0gICAgICAgICAgR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUsIHBhcnNlLT5wcml2LT5taW5fYml0cmF0ZSwgTlVMTCk7Ci0gICAgfQotICAgIGlmIChwYXJzZS0+cHJpdi0+bWF4X2JpdHJhdGUgIT0gMCAmJiBwYXJzZS0+cHJpdi0+cG9zdF9tYXhfYml0cmF0ZSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiYWRkaW5nIG1heCBiaXRyYXRlICV1IiwgcGFyc2UtPnByaXYtPm1heF9iaXRyYXRlKTsKLSAgICAgIGdzdF90YWdfbGlzdF9hZGQgKG1lcmdlZF90YWdzLCBHU1RfVEFHX01FUkdFX0tFRVAsCi0gICAgICAgICAgR1NUX1RBR19NQVhJTVVNX0JJVFJBVEUsIHBhcnNlLT5wcml2LT5tYXhfYml0cmF0ZSwgTlVMTCk7Ci0gICAgfQotICAgIGlmIChwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUgIT0gMCAmJiBwYXJzZS0+cHJpdi0+cG9zdF9hdmdfYml0cmF0ZSkgewotICAgICAgcGFyc2UtPnByaXYtPnBvc3RlZF9hdmdfYml0cmF0ZSA9IHBhcnNlLT5wcml2LT5hdmdfYml0cmF0ZTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImFkZGluZyBhdmcgYml0cmF0ZSAldSIsIHBhcnNlLT5wcml2LT5hdmdfYml0cmF0ZSk7Ci0gICAgICBnc3RfdGFnX2xpc3RfYWRkIChtZXJnZWRfdGFncywgR1NUX1RBR19NRVJHRV9LRUVQLAotICAgICAgICAgIEdTVF9UQUdfQklUUkFURSwgcGFyc2UtPnByaXYtPmF2Z19iaXRyYXRlLCBOVUxMKTsKLSAgICB9Ci0gIH0KLQotICBwYXJzZS0+cHJpdi0+cGVuZGluZ19ldmVudHMgPQotICAgICAgZ19saXN0X3ByZXBlbmQgKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cywKLSAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChtZXJnZWRfdGFncykpOwotfQotCi0vKiBnc3RfYmFzZV9wYXJzZV9wYXJzZV9mcmFtZToKLSAqIEBwYXJzZTogI0dzdEJhc2VQYXJzZS4KLSAqIEBidWZmZXI6ICNHc3RCdWZmZXIuCi0gKgotICogRGVmYXVsdCBjYWxsYmFjayBmb3IgcGFyc2VfZnJhbWUuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9wYXJzZV9wYXJzZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKLQotICBpZiAoIUdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEIChidWZmZXIpICYmCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPnByaXYtPm5leHRfcHRzKSkgewotICAgIEdTVF9CVUZGRVJfUFRTIChidWZmZXIpID0gcGFyc2UtPnByaXYtPm5leHRfcHRzOwotICB9Ci0gIGlmICghR1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQgKGJ1ZmZlcikgJiYKLSAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+cHJpdi0+bmV4dF9kdHMpKSB7Ci0gICAgR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcikgPSBwYXJzZS0+cHJpdi0+bmV4dF9kdHM7Ci0gIH0KLSAgaWYgKCFHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWZmZXIpICYmCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPnByaXYtPmZyYW1lX2R1cmF0aW9uKSkgewotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSBwYXJzZS0+cHJpdi0+ZnJhbWVfZHVyYXRpb247Ci0gIH0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi0vKiBnc3RfYmFzZV9wYXJzZV9jb252ZXJ0OgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgotICogQHNyY19mb3JtYXQ6ICNHc3RGb3JtYXQgZGVzY3JpYmluZyB0aGUgc291cmNlIGZvcm1hdC4KLSAqIEBzcmNfdmFsdWU6IFNvdXJjZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCi0gKiBAZGVzdF9mb3JtYXQ6ICNHc3RGb3JtYXQgZGVmaW5pbmcgdGhlIGNvbnZlcnRlZCBmb3JtYXQuCi0gKiBAZGVzdF92YWx1ZTogUG9pbnRlciB3aGVyZSB0aGUgY29udmVyc2lvbiByZXN1bHQgd2lsbCBiZSBwdXQuCi0gKgotICogQ29udmVydHMgdXNpbmcgY29uZmlndXJlZCAiY29udmVydCIgdm1ldGhvZCBpbiAjR3N0QmFzZVBhcnNlIGNsYXNzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfcGFyc2VfY29udmVydCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsCi0gICAgZ2ludDY0IHNyY192YWx1ZSwgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBHc3RCYXNlUGFyc2VDbGFzcyAqa2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MgKHBhcnNlKTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXN0X3ZhbHVlICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoIWtsYXNzLT5jb252ZXJ0KQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXQgPSBrbGFzcy0+Y29udmVydCAocGFyc2UsIHNyY19mb3JtYXQsIHNyY192YWx1ZSwgZGVzdF9mb3JtYXQsIGRlc3RfdmFsdWUpOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICB7Ci0gICAgaWYgKHJldCkgewotICAgICAgaWYgKHNyY19mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FICYmIGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgIlRJTUUgLT4gQllURVM6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIC0+ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNyY192YWx1ZSksICpkZXN0X3ZhbHVlKTsKLSAgICAgIH0gZWxzZSBpZiAoZGVzdF9mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FICYmCi0gICAgICAgICAgc3JjX2Zvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICJCWVRFUyAtPiBUSU1FOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAtPiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBzcmNfdmFsdWUsIEdTVF9USU1FX0FSR1MgKCpkZXN0X3ZhbHVlKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgICAiJXMgLT4gJXM6ICUiIEdfR0lOVDY0X0ZPUk1BVCAiIC0+ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoc3JjX2Zvcm1hdCkpLAotICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChnc3RfZm9ybWF0X2dldF9uYW1lIChkZXN0X2Zvcm1hdCkpLAotICAgICAgICAgICAgc3JjX3ZhbHVlLCAqZGVzdF92YWx1ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY29udmVyc2lvbiBmYWlsZWQiKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotdXBkYXRlX3Vwc3RyZWFtX3Byb3ZpZGVkIChHUXVhcmsgZmllbGRfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0Q2FwcyAqZGVmYXVsdF9jYXBzID0gdXNlcl9kYXRhOwotICBnaW50IGk7Ci0gIGdpbnQgY2Fwc19zaXplOwotCi0gIGNhcHNfc2l6ZSA9IGdzdF9jYXBzX2dldF9zaXplIChkZWZhdWx0X2NhcHMpOwotICBmb3IgKGkgPSAwOyBpIDwgY2Fwc19zaXplOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGRlZmF1bHRfY2FwcywgaSk7Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkIChzdHJ1Y3R1cmUsIGZpZWxkX2lkKSkKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfaWRfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZpZWxkX2lkLCB2YWx1ZSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2Jhc2VfcGFyc2VfbmVnb3RpYXRlX2RlZmF1bHRfY2FwcyAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIEdzdENhcHMgKmNhcHMsICp0ZW1wbGNhcHM7Ci0gIEdzdENhcHMgKnNpbmtjYXBzID0gTlVMTDsKLSAgR3N0Q2FwcyAqZGVmYXVsdF9jYXBzID0gTlVMTDsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgdGVtcGxjYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSk7Ci0gIGNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCB0ZW1wbGNhcHMpOwotICBpZiAoY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGxjYXBzKTsKLSAgZWxzZQotICAgIGNhcHMgPSB0ZW1wbGNhcHM7Ci0gIHRlbXBsY2FwcyA9IE5VTEw7Ci0KLSAgaWYgKCFjYXBzIHx8IGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSB8fCBnc3RfY2Fwc19pc19hbnkgKGNhcHMpKSB7Ci0gICAgZ290byBjYXBzX2Vycm9yOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAicGVlciBjYXBzICAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgLyogYmVmb3JlIGZpeGF0aW5nLCB0cnkgdG8gdXNlIHdoYXRldmVyIHVwc3RyZWFtIHByb3ZpZGVkICovCi0gIGRlZmF1bHRfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICBzaW5rY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKHBhcnNlKSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiY3VycmVudCBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIgZm9yIHNpbmtwYWQiLAotICAgICAgc2lua2NhcHMpOwotCi0gIGlmIChzaW5rY2FwcykgewotICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHNpbmtjYXBzLCAwKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKHN0cnVjdHVyZSwgdXBkYXRlX3Vwc3RyZWFtX3Byb3ZpZGVkLCBkZWZhdWx0X2NhcHMpOwotICB9Ci0KLSAgZGVmYXVsdF9jYXBzID0gZ3N0X2NhcHNfZml4YXRlIChkZWZhdWx0X2NhcHMpOwotCi0gIGlmICghZGVmYXVsdF9jYXBzKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwgIkZhaWxlZCB0byBjcmVhdGUgZGVmYXVsdCBjYXBzICEiKTsKLSAgICBnb3RvIGNhcHNfZXJyb3I7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLAotICAgICAgIkNob3NlIGRlZmF1bHQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiIGZvciBpbml0aWFsIGdhcCIsIGRlZmF1bHRfY2Fwcyk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHNpbmtjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiBkZWZhdWx0X2NhcHM7Ci0KLWNhcHNfZXJyb3I6Ci0gIHsKLSAgICBpZiAoY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBpZiAoc2lua2NhcHMpCi0gICAgICBnc3RfY2Fwc191bnJlZiAoc2lua2NhcHMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8qIGdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnQ6Ci0gKiBAcGFkOiAjR3N0UGFkIHRoYXQgcmVjZWl2ZWQgdGhlIGV2ZW50LgotICogQGV2ZW50OiAjR3N0RXZlbnQgdG8gYmUgaGFuZGxlZC4KLSAqCi0gKiBIYW5kbGVyIGZvciBzaW5rIHBhZCBldmVudHMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3BhcnNlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RCYXNlUGFyc2UgKnBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKHBhcmVudCk7Ci0gIEdzdEJhc2VQYXJzZUNsYXNzICpiY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MgKHBhcnNlKTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHJldCA9IGJjbGFzcy0+c2lua19ldmVudCAocGFyc2UsIGV2ZW50KTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBnc3RfYmFzZV9wYXJzZV9zaW5rX2V2ZW50X2RlZmF1bHQ6Ci0gKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCi0gKiBAZXZlbnQ6ICNHc3RFdmVudCB0byBiZSBoYW5kbGVkLgotICoKLSAqIEVsZW1lbnQtbGV2ZWwgZXZlbnQgaGFuZGxlciBmdW5jdGlvbi4KLSAqCi0gKiBUaGUgZXZlbnQgd2lsbCBiZSB1bnJlZmZlZCBvbmx5IGlmIGl0IGhhcyBiZWVuIGhhbmRsZWQgYW5kIHRoaXMKLSAqIGZ1bmN0aW9uIHJldHVybnMgJVRSVUUKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQgYW5kIG5vdCBuZWVkIGZvcndhcmRpbmcuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfcGFyc2Vfc2lua19ldmVudF9kZWZhdWx0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgKmtsYXNzID0gR1NUX0JBU0VfUEFSU0VfR0VUX0NMQVNTIChwYXJzZSk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBnYm9vbGVhbiBmb3J3YXJkX2ltbWVkaWF0ZSA9IEZBTFNFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiaGFuZGxpbmcgZXZlbnQgJWQsICVzIiwgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gICAgICBpZiAoa2xhc3MtPnNldF9zaW5rX2NhcHMpCi0gICAgICAgIHJldCA9IGtsYXNzLT5zZXRfc2lua19jYXBzIChwYXJzZSwgY2Fwcyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldCA9IFRSVUU7Ci0KLSAgICAgIC8qIHdpbGwgc2VuZCBvdXIgb3duIGNhcHMgZG93bnN0cmVhbSAqLwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBjb25zdCBHc3RTZWdtZW50ICppbl9zZWdtZW50OwotICAgICAgR3N0U2VnbWVudCBvdXRfc2VnbWVudDsKLSAgICAgIGdpbnQ2NCBvZmZzZXQgPSAwLCBuZXh0X2R0czsKLSAgICAgIGd1aW50MzIgc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmaW5fc2VnbWVudCk7Ci0gICAgICBnc3Rfc2VnbWVudF9pbml0ICgmb3V0X3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgICBvdXRfc2VnbWVudC5yYXRlID0gaW5fc2VnbWVudC0+cmF0ZTsKLSAgICAgIG91dF9zZWdtZW50LmFwcGxpZWRfcmF0ZSA9IGluX3NlZ21lbnQtPmFwcGxpZWRfcmF0ZTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZWdtZW50ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgaW5fc2VnbWVudCk7Ci0KLSAgICAgIHBhcnNlLT5wcml2LT51cHN0cmVhbV9mb3JtYXQgPSBpbl9zZWdtZW50LT5mb3JtYXQ7Ci0gICAgICBpZiAoaW5fc2VnbWVudC0+Zm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICAgICAgR3N0QmFzZVBhcnNlU2VlayAqc2VlayA9IE5VTEw7Ci0gICAgICAgIEdTTGlzdCAqbm9kZTsKLQotICAgICAgICAvKiBzdG9wIHRpbWUgaXMgYWxsb3dlZCB0byBiZSBvcGVuLWVuZGVkLCBidXQgbm90IHN0YXJ0ICYgcG9zICovCi0gICAgICAgIG9mZnNldCA9IGluX3NlZ21lbnQtPnRpbWU7Ci0KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gICAgICAgIGZvciAobm9kZSA9IHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZWtzOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgICAgICAgIEdzdEJhc2VQYXJzZVNlZWsgKnRtcCA9IG5vZGUtPmRhdGE7Ci0KLSAgICAgICAgICBpZiAodG1wLT5vZmZzZXQgPT0gb2Zmc2V0KSB7Ci0gICAgICAgICAgICBzZWVrID0gdG1wOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHBhcnNlLT5wcml2LT5wZW5kaW5nX3NlZWtzID0KLSAgICAgICAgICAgIGdfc2xpc3RfcmVtb3ZlIChwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWVrcywgc2Vlayk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0KLSAgICAgICAgaWYgKHNlZWspIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgIk1hdGNoZWQgbmV3c2VnbWVudCB0byVzIHNlZWs6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICAgICAgICAgc2Vlay0+YWNjdXJhdGUgPyAiIGFjY3VyYXRlIiA6ICIiLCAmc2Vlay0+c2VnbWVudCk7Ci0KLSAgICAgICAgICBvdXRfc2VnbWVudC5zdGFydCA9IHNlZWstPnNlZ21lbnQuc3RhcnQ7Ci0gICAgICAgICAgb3V0X3NlZ21lbnQuc3RvcCA9IHNlZWstPnNlZ21lbnQuc3RvcDsKLSAgICAgICAgICBvdXRfc2VnbWVudC50aW1lID0gc2Vlay0+c2VnbWVudC5zdGFydDsKLQotICAgICAgICAgIG5leHRfZHRzID0gc2Vlay0+c3RhcnRfdHM7Ci0gICAgICAgICAgcGFyc2UtPnByaXYtPmV4YWN0X3Bvc2l0aW9uID0gc2Vlay0+YWNjdXJhdGU7Ci0gICAgICAgICAgZ19mcmVlIChzZWVrKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBiZXN0IGF0dGVtcHQgY29udmVydCAqLwotICAgICAgICAgIC8qIGFzIHRoZXNlIGFyZSBvbmx5IGVzdGltYXRlcywgc3RvcCBpcyBrZXB0IG9wZW4tZW5kZWQgdG8gYXZvaWQKLSAgICAgICAgICAgKiBwcmVtYXR1cmUgY3V0dGluZyAqLwotICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX2NvbnZlcnQgKHBhcnNlLCBHU1RfRk9STUFUX0JZVEVTLCBpbl9zZWdtZW50LT5zdGFydCwKLSAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAoZ2ludDY0ICopICYgbmV4dF9kdHMpOwotCi0gICAgICAgICAgb3V0X3NlZ21lbnQuc3RhcnQgPSBuZXh0X2R0czsKLSAgICAgICAgICBvdXRfc2VnbWVudC5zdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgICAgICBvdXRfc2VnbWVudC50aW1lID0gbmV4dF9kdHM7Ci0KLSAgICAgICAgICBwYXJzZS0+cHJpdi0+ZXhhY3RfcG9zaXRpb24gPSAoaW5fc2VnbWVudC0+c3RhcnQgPT0gMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJm91dF9zZWdtZW50KTsKLSAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBzZXFudW0pOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiQ29udmVydGVkIGluY29taW5nIHNlZ21lbnQgdG8gVElNRS4gJSIKLSAgICAgICAgICAgIEdTVF9TRUdNRU5UX0ZPUk1BVCwgaW5fc2VnbWVudCk7Ci0KLSAgICAgIH0gZWxzZSBpZiAoaW5fc2VnbWVudC0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICAvKiBVbmtub3duIGluY29taW5nIHNlZ21lbnQgZm9ybWF0LiBPdXRwdXQgYSBkZWZhdWx0IG9wZW4tZW5kZWQKLSAgICAgICAgICogVElNRSBzZWdtZW50ICovCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gICAgICAgIG91dF9zZWdtZW50LnN0YXJ0ID0gMDsKLSAgICAgICAgb3V0X3NlZ21lbnQuc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICAgIG91dF9zZWdtZW50LnRpbWUgPSAwOwotCi0gICAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmb3V0X3NlZ21lbnQpOwotICAgICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZXZlbnQsIHNlcW51bSk7Ci0KLSAgICAgICAgbmV4dF9kdHMgPSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogbm90IGNvbnNpZGVyZWQgQllURSBzZWVrYWJsZSBpZiBpdCBpcyB0YWxraW5nIHRvIHVzIGluIFRJTUUsCi0gICAgICAgICAqIHdoYXRldmVyIGVsc2UgaXQgbWlnaHQgY2xhaW0gKi8KLSAgICAgICAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX3NlZWthYmxlID0gRkFMU0U7Ci0gICAgICAgIG5leHRfZHRzID0gaW5fc2VnbWVudC0+c3RhcnQ7Ci0gICAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmb3V0X3NlZ21lbnQpOwotICAgICAgfQotCi0gICAgICBtZW1jcHkgKCZwYXJzZS0+c2VnbWVudCwgJm91dF9zZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLQotICAgICAgLyoKLSAgICAgICAgIGdzdF9zZWdtZW50X3NldF9uZXdzZWdtZW50ICgmcGFyc2UtPnNlZ21lbnQsIHVwZGF0ZSwgcmF0ZSwKLSAgICAgICAgIGFwcGxpZWRfcmF0ZSwgZm9ybWF0LCBzdGFydCwgc3RvcCwgc3RhcnQpOwotICAgICAgICovCi0KLSAgICAgIHJldCA9IFRSVUU7Ci0KLSAgICAgIC8qIHNhdmUgdGhlIHNlZ21lbnQgZm9yIGxhdGVyLCByaWdodCBiZWZvcmUgd2UgcHVzaCBhIG5ldyBidWZmZXIgc28gdGhhdAotICAgICAgICogdGhlIGNhcHMgYXJlIGZpeGVkIGFuZCB0aGUgbmV4dCBsaW5rZWQgZWxlbWVudCBjYW4gcmVjZWl2ZQotICAgICAgICogdGhlIHNlZ21lbnQgYnV0IGZpbmlzaCB0aGUgY3VycmVudCBzZWdtZW50ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImRyYWluaW5nIGN1cnJlbnQgc2VnbWVudCIpOwotICAgICAgaWYgKGluX3NlZ21lbnQtPnJhdGUgPiAwLjApCi0gICAgICAgIGdzdF9iYXNlX3BhcnNlX2RyYWluIChwYXJzZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFnbWVudCAocGFyc2UsIEZBTFNFKTsKLSAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChwYXJzZS0+cHJpdi0+YWRhcHRlcik7Ci0KLSAgICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICBwYXJzZS0+cHJpdi0+c3luY19vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICBwYXJzZS0+cHJpdi0+bmV4dF9kdHMgPSBuZXh0X2R0czsKLSAgICAgIHBhcnNlLT5wcml2LT5uZXh0X3B0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBwYXJzZS0+cHJpdi0+bGFzdF9wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgcGFyc2UtPnByaXYtPmxhc3RfZHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIHBhcnNlLT5wcml2LT5wcmV2X3B0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBwYXJzZS0+cHJpdi0+cHJldl9kdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgcGFyc2UtPnByaXYtPnByZXZfZHRzX2Zyb21fcHRzID0gRkFMU0U7Ci0gICAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gICAgICBwYXJzZS0+cHJpdi0+c2Vlbl9rZXlmcmFtZSA9IEZBTFNFOwotICAgICAgcGFyc2UtPnByaXYtPnNraXAgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVF9ET05FOgotICAgICAgLyogbmVlZCB0byBkcmFpbiBub3csIHJhdGhlciB0aGFuIHVwb24gYSBuZXcgc2VnbWVudCwKLSAgICAgICAqIHNpbmNlIHRoYXQgd291bGQgaGF2ZSBTRUdNRU5UX0RPTkUgY29tZSBiZWZvcmUgcG90ZW50aWFsCi0gICAgICAgKiBkZWxheWVkIGxhc3QgcGFydCBvZiB0aGUgY3VycmVudCBzZWdtZW50ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImRyYWluaW5nIGN1cnJlbnQgc2VnbWVudCIpOwotICAgICAgaWYgKHBhcnNlLT5zZWdtZW50LnJhdGUgPiAwLjApCi0gICAgICAgIGdzdF9iYXNlX3BhcnNlX2RyYWluIChwYXJzZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFnbWVudCAocGFyc2UsIEZBTFNFKTsKLSAgICAgIC8qIEFsc28gZm9yd2FyZCBldmVudCBpbW1lZGlhdGVseSwgdGhlcmUgbWlnaHQgYmUgbm8gbmV3IGRhdGEKLSAgICAgICAqIGNvbWluZyBhZnRlcndhcmRzIHRoYXQgd291bGQgYWxsb3cgdXMgdG8gZm9yd2FyZCBpdCBsYXRlciAqLwotICAgICAgZm9yd2FyZF9pbW1lZGlhdGUgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICAgICAgcGFyc2UtPnByaXYtPmZsdXNoaW5nID0gVFJVRTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocGFyc2UtPnByaXYtPmFkYXB0ZXIpOwotICAgICAgZ3N0X2Jhc2VfcGFyc2VfY2xlYXJfcXVldWVzIChwYXJzZSk7Ci0gICAgICBwYXJzZS0+cHJpdi0+Zmx1c2hpbmcgPSBGQUxTRTsKLSAgICAgIHBhcnNlLT5wcml2LT5kaXNjb250ID0gVFJVRTsKLSAgICAgIHBhcnNlLT5wcml2LT5sYXN0X3B0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBwYXJzZS0+cHJpdi0+bGFzdF9kdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgcGFyc2UtPnByaXYtPm5ld19mcmFtZSA9IFRSVUU7Ci0gICAgICBwYXJzZS0+cHJpdi0+c2tpcCA9IDA7Ci0KLSAgICAgIGZvcndhcmRfaW1tZWRpYXRlID0gVFJVRTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgaWYgKHBhcnNlLT5zZWdtZW50LnJhdGUgPiAwLjApCi0gICAgICAgIGdzdF9iYXNlX3BhcnNlX2RyYWluIChwYXJzZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFnbWVudCAocGFyc2UsIFRSVUUpOwotCi0gICAgICAvKiBJZiB3ZSBTVElMTCBoYXZlIHplcm8gZnJhbWVzIHByb2Nlc3NlZCwgZmlyZSBhbiBlcnJvciAqLwotICAgICAgaWYgKHBhcnNlLT5wcml2LT5mcmFtZWNvdW50ID09IDAgJiYgIXBhcnNlLT5wcml2LT5zYXdfZ2FwcyAmJgotICAgICAgICAgICFwYXJzZS0+cHJpdi0+Zmlyc3RfYnVmZmVyKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBXUk9OR19UWVBFLAotICAgICAgICAgICAgKCJObyB2YWxpZCBmcmFtZXMgZm91bmQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKSwgKE5VTEwpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFwYXJzZS0+cHJpdi0+c2F3X2dhcHMKLSAgICAgICAgICAmJiBwYXJzZS0+cHJpdi0+ZnJhbWVjb3VudCA8IE1JTl9GUkFNRVNfVE9fUE9TVF9CSVRSQVRFKSB7Ci0gICAgICAgIC8qIFdlJ3ZlIG5vdCBwb3N0ZWQgYml0cmF0ZSB0YWdzIHlldCAtIGRvIHNvIG5vdyAqLwotICAgICAgICBnc3RfYmFzZV9wYXJzZV9xdWV1ZV90YWdfZXZlbnRfdXBkYXRlIChwYXJzZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIG5ld3NlZ21lbnQgYW5kIG90aGVyIHNlcmlhbGl6ZWQgZXZlbnRzIGJlZm9yZSBlb3MgKi8KLSAgICAgIGdzdF9iYXNlX3BhcnNlX3B1c2hfcGVuZGluZ19ldmVudHMgKHBhcnNlKTsKLQotICAgICAgZm9yd2FyZF9pbW1lZGlhdGUgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU06ewotICAgICAgLyogRklYTUU6IENvZGUgZHVwbGljYXRlZCBmcm9tIGxpYmdzdHZpZGVvIGJlY2F1c2UgY29yZSBjYW4ndCBkZXBlbmQgb24gLWJhc2UgKi8KLSNpZm5kZWYgR1NUX1ZJREVPX0VWRU5UX1NUSUxMX1NUQVRFX05BTUUKLSNkZWZpbmUgR1NUX1ZJREVPX0VWRU5UX1NUSUxMX1NUQVRFX05BTUUgIkdzdEV2ZW50U3RpbGxGcmFtZSIKLSNlbmRpZgotCi0gICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgICBnYm9vbGVhbiBldl9zdGlsbF9zdGF0ZTsKLQotICAgICAgcyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gICAgICBpZiAocyAhPSBOVUxMICYmCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgR1NUX1ZJREVPX0VWRU5UX1NUSUxMX1NUQVRFX05BTUUpICYmCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbiAocywgInN0aWxsLXN0YXRlIiwgJmV2X3N0aWxsX3N0YXRlKSkgewotICAgICAgICBpZiAoZXZfc3RpbGxfc3RhdGUpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImRyYWluaW5nIGN1cnJlbnQgZGF0YSBmb3Igc3RpbGwtZnJhbWUiKTsKLSAgICAgICAgICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA+IDAuMCkKLSAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX2RyYWluIChwYXJzZSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYWdtZW50IChwYXJzZSwgVFJVRSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yd2FyZF9pbW1lZGlhdGUgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0dBUDoKLSAgICB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImRyYWluaW5nIGN1cnJlbnQgZGF0YSBkdWUgdG8gZ2FwIGV2ZW50Iik7Ci0KLSAgICAgIC8qIEVuc3VyZSB3ZSBoYXZlIGNhcHMgYmVmb3JlIGZvcndhcmRpbmcgdGhlIGV2ZW50ICovCi0gICAgICBpZiAoIWdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKSkgewotICAgICAgICBHc3RDYXBzICpkZWZhdWx0X2NhcHMgPSBOVUxMOwotICAgICAgICBpZiAoKGRlZmF1bHRfY2FwcyA9IGdzdF9iYXNlX3BhcnNlX25lZ290aWF0ZV9kZWZhdWx0X2NhcHMgKHBhcnNlKSkpIHsKLSAgICAgICAgICBHTGlzdCAqbDsKLSAgICAgICAgICBHc3RFdmVudCAqY2Fwc19ldmVudCA9IGdzdF9ldmVudF9uZXdfY2FwcyAoZGVmYXVsdF9jYXBzKTsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAiU3RvcmUgY2FwcyBldmVudCB0byBwZW5kaW5nIGxpc3QgZm9yIGluaXRpYWwgcHJlLXJvbGxpbmciKTsKLQotICAgICAgICAgIC8qIEV2ZW50cyBhcmUgaW4gZGVjcmVhc2luZyBvcmRlci4gR28gZG93biB0aGUgbGlzdCB1bnRpbCB3ZQotICAgICAgICAgICAqIGZpbmQgdGhlIGZpcnN0IHByZS1DQVBTIGV2ZW50IGFuZCBpbnNlcnQgb3VyIENBUFMgZXZlbnQgdGhlcmUuCi0gICAgICAgICAgICoKLSAgICAgICAgICAgKiBUaGVyZSBzaG91bGQgYmUgYSBTRUdNRU5UIGV2ZW50IGFscmVhZHksIHdoaWNoIGlzID4gQ0FQUyAqLwotICAgICAgICAgIGZvciAobCA9IHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50czsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICAgICAgICAgIEdzdEV2ZW50ICplID0gbC0+ZGF0YTsKLQotICAgICAgICAgICAgaWYgKEdTVF9FVkVOVF9UWVBFIChlKSA8IEdTVF9FVkVOVF9DQVBTKSB7Ci0gICAgICAgICAgICAgIHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9Ci0gICAgICAgICAgICAgICAgICBnX2xpc3RfaW5zZXJ0X2JlZm9yZSAocGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzLCBsLAotICAgICAgICAgICAgICAgICAgY2Fwc19ldmVudCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAvKiBObyBwZW5kaW5nIGV2ZW50IHRoYXQgaXMgPCBDQVBTLCBzbyB3ZSBoYXZlIHRvIGFkZCBpdCBhdCB0aGUgdmVyeQotICAgICAgICAgICAqIGVuZCBvZiB0aGUgbGlzdCAqLwotICAgICAgICAgIGlmICghbCkgewotICAgICAgICAgICAgcGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzID0KLSAgICAgICAgICAgICAgICBnX2xpc3RfYXBwZW5kIChwYXJzZS0+cHJpdi0+cGVuZGluZ19ldmVudHMsIGNhcHNfZXZlbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoZGVmYXVsdF9jYXBzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgICBldmVudCA9IE5VTEw7Ci0gICAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHBhcnNlLCBTVFJFQU0sIEZPUk1BVCwgKE5VTEwpLAotICAgICAgICAgICAgICAoIlBhcnNlciBvdXRwdXQgbm90IG5lZ290aWF0ZWQgYmVmb3JlIEdBUCBldmVudC4iKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZ3N0X2Jhc2VfcGFyc2VfcHVzaF9wZW5kaW5nX2V2ZW50cyAocGFyc2UpOwotCi0gICAgICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA+IDAuMCkKLSAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZHJhaW4gKHBhcnNlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYWdtZW50IChwYXJzZSwgVFJVRSk7Ci0gICAgICBmb3J3YXJkX2ltbWVkaWF0ZSA9IFRSVUU7Ci0gICAgICBwYXJzZS0+cHJpdi0+c2F3X2dhcHMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzoKLSAgICB7Ci0gICAgICBHc3RUYWdMaXN0ICp0YWdzID0gTlVMTDsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZ0YWdzKTsKLQotICAgICAgLyogV2Ugb25seSBjYXJlIGFib3V0IHN0cmVhbSB0YWdzIGhlcmUsIGdsb2JhbCB0YWdzIHdlIGp1c3QgZm9yd2FyZCAqLwotICAgICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfc2NvcGUgKHRhZ3MpICE9IEdTVF9UQUdfU0NPUEVfU1RSRUFNKQotICAgICAgICBicmVhazsKLQotICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Vwc3RyZWFtX3RhZ3MgKHBhcnNlLCB0YWdzKTsKLSAgICAgIGdzdF9iYXNlX3BhcnNlX3F1ZXVlX3RhZ19ldmVudF91cGRhdGUgKHBhcnNlKTsKLSAgICAgIHBhcnNlLT5wcml2LT50YWdzX2NoYW5nZWQgPSBGQUxTRTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgZXZlbnQgPSBOVUxMOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6Ci0gICAgewotICAgICAgaWYgKHBhcnNlLT5wcml2LT5wYWRfbW9kZSAhPSBHU1RfUEFEX01PREVfUFVMTCkKLSAgICAgICAgZm9yd2FyZF9pbW1lZGlhdGUgPSBUUlVFOwotCi0gICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfdXBzdHJlYW1fdGFncyAocGFyc2UsIE5VTEwpOwotICAgICAgcGFyc2UtPnByaXYtPnRhZ3NfY2hhbmdlZCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogRm9yd2FyZCBub24tc2VyaWFsaXplZCBldmVudHMgYW5kIEVPUy9GTFVTSF9TVE9QIGltbWVkaWF0ZWx5LgotICAgKiBGb3IgRU9TIHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBubyBidWZmZXIgb3Igc2VyaWFsaXplZCBldmVudAotICAgKiB3aWxsIGNvbWUgYWZ0ZXIgRU9TIGFuZCBub3RoaW5nIGNvdWxkIHRyaWdnZXIgYW5vdGhlcgotICAgKiBfZmluaXNoX2ZyYW1lKCkgY2FsbC4gICAqCi0gICAqIElmIHRoZSBzdWJjbGFzcyBoYW5kbGVzIHNlbmRpbmcgb2YgRU9TIG1hbnVhbGx5IGl0IGNhbiByZXR1cm4KLSAgICogX0RST1BQRUQgZnJvbSA6OmZpbmlzaCgpIGFuZCBhbGwgb3RoZXIgc3ViY2xhc3NlcyBzaG91bGQgaGF2ZQotICAgKiBkZWNvZGVkL2ZsdXNoZWQgYWxsIHJlbWFpbmluZyBkYXRhIGJlZm9yZSB0aGlzCi0gICAqCi0gICAqIEZvciBGTFVTSF9TVE9QIHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBpdCBpcyBleHBlY3RlZAotICAgKiB0byBiZSBmb3J3YXJkZWQgaW1tZWRpYXRlbHkgYW5kIG5vIGJ1ZmZlcnMgYXJlIHF1ZXVlZCBhbnl3YXkuCi0gICAqLwotICBpZiAoZXZlbnQpIHsKLSAgICBpZiAoIUdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkgfHwgZm9yd2FyZF9pbW1lZGlhdGUpIHsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPnNyY3BhZCwgZXZlbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwYXJzZS0+cHJpdi0+cGVuZGluZ19ldmVudHMgPQotICAgICAgICAgIGdfbGlzdF9wcmVwZW5kIChwYXJzZS0+cHJpdi0+cGVuZGluZ19ldmVudHMsIGV2ZW50KTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJldmVudCBoYW5kbGVkIik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9wYXJzZV9zaW5rX3F1ZXJ5X2RlZmF1bHQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RQYWQgKnBhZDsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHBhZCA9IEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChwYXJzZSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RCYXNlUGFyc2VDbGFzcyAqYmNsYXNzOwotCi0gICAgICBiY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MgKHBhcnNlKTsKLQotICAgICAgaWYgKGJjbGFzcy0+Z2V0X3NpbmtfY2FwcykgewotICAgICAgICBHc3RDYXBzICpjYXBzLCAqZmlsdGVyOwotCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICAgIGNhcHMgPSBiY2xhc3MtPmdldF9zaW5rX2NhcHMgKHBhcnNlLCBmaWx0ZXIpOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJzaW5rIGdldGNhcHMgcmV0dXJuaW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICBjYXBzKTsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdzdENhcHMgKmNhcHMsICp0ZW1wbGF0ZV9jYXBzLCAqZmlsdGVyOwotCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICAgIHRlbXBsYXRlX2NhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgICAgICAgaWYgKGZpbHRlciAhPSBOVUxMKSB7Ci0gICAgICAgICAgY2FwcyA9Ci0gICAgICAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHRlbXBsYXRlX2NhcHMsCi0gICAgICAgICAgICAgIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsYXRlX2NhcHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNhcHMgPSB0ZW1wbGF0ZV9jYXBzOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBjYXBzKTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICB7Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgR1NUX09CSkVDVF9DQVNUIChwYXJzZSksIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfcGFyc2Vfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdEJhc2VQYXJzZUNsYXNzICpiY2xhc3M7Ci0gIEdzdEJhc2VQYXJzZSAqcGFyc2U7Ci0gIGdib29sZWFuIHJldDsKLQotICBwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChwYXJlbnQpOwotICBiY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MgKHBhcnNlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIiVzIHF1ZXJ5IiwgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpKTsKLQotICBpZiAoYmNsYXNzLT5zaW5rX3F1ZXJ5KQotICAgIHJldCA9IGJjbGFzcy0+c2lua19xdWVyeSAocGFyc2UsIHF1ZXJ5KTsKLSAgZWxzZQotICAgIHJldCA9IEZBTFNFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIiVzIHF1ZXJ5IHJlc3VsdDogJWQgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSksIHJldCwgcXVlcnkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfcGFyc2Vfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgKmJjbGFzczsKLSAgR3N0QmFzZVBhcnNlICpwYXJzZTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKHBhcmVudCk7Ci0gIGJjbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0dFVF9DTEFTUyAocGFyc2UpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiJXMgcXVlcnk6ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpLCBxdWVyeSk7Ci0KLSAgaWYgKGJjbGFzcy0+c3JjX3F1ZXJ5KQotICAgIHJldCA9IGJjbGFzcy0+c3JjX3F1ZXJ5IChwYXJzZSwgcXVlcnkpOwotICBlbHNlCi0gICAgcmV0ID0gRkFMU0U7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiJXMgcXVlcnkgcmVzdWx0OiAlZCAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSwgcmV0LCBxdWVyeSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogZ3N0X2Jhc2VfcGFyc2Vfc3JjX2V2ZW50OgotICogQHBhZDogI0dzdFBhZCB0aGF0IHJlY2VpdmVkIHRoZSBldmVudC4KLSAqIEBldmVudDogI0dzdEV2ZW50IHRoYXQgd2FzIHJlY2VpdmVkLgotICoKLSAqIEhhbmRsZXIgZm9yIHNvdXJjZSBwYWQgZXZlbnRzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBldmVudCB3YXMgaGFuZGxlZC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9wYXJzZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RCYXNlUGFyc2UgKnBhcnNlOwotICBHc3RCYXNlUGFyc2VDbGFzcyAqYmNsYXNzOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKHBhcmVudCk7Ci0gIGJjbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0dFVF9DTEFTUyAocGFyc2UpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZXZlbnQgJWQsICVzIiwgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgaWYgKGJjbGFzcy0+c3JjX2V2ZW50KQotICAgIHJldCA9IGJjbGFzcy0+c3JjX2V2ZW50IChwYXJzZSwgZXZlbnQpOwotICBlbHNlCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9wYXJzZV9pc19zZWVrYWJsZSAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIC8qIEZJWE1FOiBjb3VsZCBkbyBtb3JlIGhlcmUsIGUuZy4gY2hlY2sgaW5kZXggb3IganVzdCBzZW5kIGRhdGEgZnJvbSAwCi0gICAqIGluIHB1bGwgbW9kZSBhbmQgbGV0IGRlY29kZXIvc2luayBjbGlwICovCi0gIHJldHVybiBwYXJzZS0+cHJpdi0+c3luY2FibGU7Ci19Ci0KLS8qIGdzdF9iYXNlX3BhcnNlX3NyY19ldmVudF9kZWZhdWx0OgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgotICogQGV2ZW50OiAjR3N0RXZlbnQgdGhhdCB3YXMgcmVjZWl2ZWQuCi0gKgotICogRGVmYXVsdCBzcmNwYWQgZXZlbnQgaGFuZGxlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgZXZlbnQgd2FzIGhhbmRsZWQgYW5kIGNhbiBiZSBkcm9wcGVkLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3BhcnNlX3NyY19ldmVudF9kZWZhdWx0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKLSAgICAgIGlmIChnc3RfYmFzZV9wYXJzZV9pc19zZWVrYWJsZSAocGFyc2UpKQotICAgICAgICByZXMgPSBnc3RfYmFzZV9wYXJzZV9oYW5kbGVfc2VlayAocGFyc2UsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhcnNlLT5zcmNwYWQsIEdTVF9PQkpFQ1RfQ0FTVCAocGFyc2UpLAotICAgICAgICAgIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLQotLyoqCi0gKiBnc3RfYmFzZV9wYXJzZV9jb252ZXJ0X2RlZmF1bHQ6Ci0gKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCi0gKiBAc3JjX2Zvcm1hdDogI0dzdEZvcm1hdCBkZXNjcmliaW5nIHRoZSBzb3VyY2UgZm9ybWF0LgotICogQHNyY192YWx1ZTogU291cmNlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAqIEBkZXN0X2Zvcm1hdDogI0dzdEZvcm1hdCBkZWZpbmluZyB0aGUgY29udmVydGVkIGZvcm1hdC4KLSAqIEBkZXN0X3ZhbHVlOiBQb2ludGVyIHdoZXJlIHRoZSBjb252ZXJzaW9uIHJlc3VsdCB3aWxsIGJlIHB1dC4KLSAqCi0gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mICJjb252ZXJ0IiB2bWV0aG9kIGluICNHc3RCYXNlUGFyc2UgY2xhc3MuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsCi0gICAgZ2ludDY0IHNyY192YWx1ZSwgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgZ3VpbnQ2NCBieXRlcywgZHVyYXRpb247Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNyY19mb3JtYXQgPT0gZGVzdF9mb3JtYXQpKSB7Ci0gICAgKmRlc3RfdmFsdWUgPSBzcmNfdmFsdWU7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoc3JjX3ZhbHVlID09IC0xKSkgewotICAgICpkZXN0X3ZhbHVlID0gLTE7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoc3JjX3ZhbHVlID09IDApKSB7Ci0gICAgKmRlc3RfdmFsdWUgPSAwOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogbmVlZCBhdCBsZWFzdCBzb21lIGZyYW1lcyAqLwotICBpZiAoIXBhcnNlLT5wcml2LT5mcmFtZWNvdW50KQotICAgIGdvdG8gbm9fZnJhbWVjb3VudDsKLQotICBkdXJhdGlvbiA9IHBhcnNlLT5wcml2LT5hY2NfZHVyYXRpb24gLyBHU1RfTVNFQ09ORDsKLSAgYnl0ZXMgPSBwYXJzZS0+cHJpdi0+Ynl0ZWNvdW50OwotCi0gIGlmIChHX1VOTElLRUxZICghZHVyYXRpb24gfHwgIWJ5dGVzKSkKLSAgICBnb3RvIG5vX2R1cmF0aW9uX2J5dGVzOwotCi0gIGlmIChzcmNfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICBpZiAoZGVzdF9mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAvKiBCWVRFUyAtPiBUSU1FIGNvbnZlcnNpb24gKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY29udmVydGluZyBieXRlcyAtPiB0aW1lIik7Ci0gICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3JjX3ZhbHVlLCBkdXJhdGlvbiwgYnl0ZXMpOwotICAgICAgKmRlc3RfdmFsdWUgKj0gR1NUX01TRUNPTkQ7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbnZlcnNpb24gcmVzdWx0OiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBtcyIsCi0gICAgICAgICAgKmRlc3RfdmFsdWUgLyBHU1RfTVNFQ09ORCk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbnZlcnRpbmcgYnl0ZXMgLT4gb3RoZXIgbm90IGltcGxlbWVudGVkIik7Ci0gICAgfQotICB9IGVsc2UgaWYgKHNyY19mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgaWYgKGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY29udmVydGluZyB0aW1lIC0+IGJ5dGVzIik7Ci0gICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3JjX3ZhbHVlIC8gR1NUX01TRUNPTkQsIGJ5dGVzLAotICAgICAgICAgIGR1cmF0aW9uKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICJ0aW1lICUiIEdfR0lOVDY0X0ZPUk1BVCAiIG1zIGluIGJ5dGVzID0gJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgICAgIHNyY192YWx1ZSAvIEdTVF9NU0VDT05ELCAqZGVzdF92YWx1ZSk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbnZlcnRpbmcgdGltZSAtPiBvdGhlciBub3QgaW1wbGVtZW50ZWQiKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3JjX2Zvcm1hdCA9PSBHU1RfRk9STUFUX0RFRkFVTFQpIHsKLSAgICAvKiBERUZBVUxUID09IGZyYW1lLWJhc2VkICovCi0gICAgaWYgKGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJjb252ZXJ0aW5nIGRlZmF1bHQgLT4gdGltZSIpOwotICAgICAgaWYgKHBhcnNlLT5wcml2LT5mcHNfZGVuKSB7Ci0gICAgICAgICpkZXN0X3ZhbHVlID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzcmNfdmFsdWUsCi0gICAgICAgICAgICBHU1RfU0VDT05EICogcGFyc2UtPnByaXYtPmZwc19kZW4sIHBhcnNlLT5wcml2LT5mcHNfbnVtKTsKLSAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJjb252ZXJ0aW5nIGRlZmF1bHQgLT4gb3RoZXIgbm90IGltcGxlbWVudGVkIik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY29udmVyc2lvbiBub3QgaW1wbGVtZW50ZWQiKTsKLSAgfQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotbm9fZnJhbWVjb3VudDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibm8gZnJhbWVjb3VudCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fZHVyYXRpb25fYnl0ZXM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIGR1cmF0aW9uICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgYnl0ZXMgJSIKLSAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgZHVyYXRpb24sIGJ5dGVzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2VfdXBkYXRlX2R1cmF0aW9uIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgZ2ludDY0IHB0b3QsIGRlc3RfdmFsdWU7Ci0KLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKHBhcnNlLT5zaW5rcGFkLCBHU1RfRk9STUFUX0JZVEVTLCAmcHRvdCkpCi0gICAgcmV0dXJuOwotCi0gIGlmICghZ3N0X2Jhc2VfcGFyc2VfY29udmVydCAocGFyc2UsIEdTVF9GT1JNQVRfQllURVMsIHB0b3QsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAmZGVzdF92YWx1ZSkpCi0gICAgcmV0dXJuOwotCi0gIC8qIGluZm9ybSBpZiBkdXJhdGlvbiBjaGFuZ2VkLCBidXQgdHJ5IHRvIGF2b2lkIHNwYW1taW5nICovCi0gIHBhcnNlLT5wcml2LT5lc3RpbWF0ZWRfZHJpZnQgKz0gZGVzdF92YWx1ZSAtIHBhcnNlLT5wcml2LT5lc3RpbWF0ZWRfZHVyYXRpb247Ci0KLSAgcGFyc2UtPnByaXYtPmVzdGltYXRlZF9kdXJhdGlvbiA9IGRlc3RfdmFsdWU7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKLSAgICAgICJ1cGRhdGVkIGVzdGltYXRlZCBkdXJhdGlvbiB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChkZXN0X3ZhbHVlKSk7Ci0KLSAgaWYgKHBhcnNlLT5wcml2LT5lc3RpbWF0ZWRfZHJpZnQgPiBHU1RfU0VDT05EIHx8Ci0gICAgICBwYXJzZS0+cHJpdi0+ZXN0aW1hdGVkX2RyaWZ0IDwgLUdTVF9TRUNPTkQpIHsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChwYXJzZSksCi0gICAgICAgIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbl9jaGFuZ2VkIChHU1RfT0JKRUNUIChwYXJzZSkpKTsKLSAgICBwYXJzZS0+cHJpdi0+ZXN0aW1hdGVkX2RyaWZ0ID0gMDsKLSAgfQotfQotCi0vKiBnc3RfYmFzZV9wYXJzZV91cGRhdGVfYml0cmF0ZXM6Ci0gKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCi0gKiBAYnVmZmVyOiBDdXJyZW50IGZyYW1lIGFzIGEgI0dzdEJ1ZmZlcgotICoKLSAqIEtlZXBzIHRyYWNrIG9mIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJpdHJhdGVzLCBhbmQgYWxzbyBtYWludGFpbnMgYQotICogcnVubmluZyBhdmVyYWdlIGJpdHJhdGUgb2YgdGhlIHN0cmVhbSBzbyBmYXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9wYXJzZV91cGRhdGVfYml0cmF0ZXMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQotewotICBndWludDY0IGRhdGFfbGVuLCBmcmFtZV9kdXI7Ci0gIGdpbnQgb3ZlcmhlYWQsIGZyYW1lX2JpdHJhdGU7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKLQotICBvdmVyaGVhZCA9IGZyYW1lLT5vdmVyaGVhZDsKLSAgaWYgKG92ZXJoZWFkID09IC0xKQotICAgIHJldHVybjsKLQotICBkYXRhX2xlbiA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgLSBvdmVyaGVhZDsKLSAgcGFyc2UtPnByaXYtPmRhdGFfYnl0ZWNvdW50ICs9IGRhdGFfbGVuOwotCi0gIC8qIGR1cmF0aW9uIHNob3VsZCBiZSB2YWxpZCBieSBub3csCi0gICAqIGVpdGhlciBzZXQgYnkgc3ViY2xhc3Mgb3IgbWF5YmUgYmFzZWQgb24gZnBzIHNldHRpbmdzICovCi0gIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWZmZXIpICYmIHBhcnNlLT5wcml2LT5hY2NfZHVyYXRpb24gIT0gMCkgewotICAgIC8qIENhbGN1bGF0ZSBkdXJhdGlvbiBvZiBhIGZyYW1lIGZyb20gYnVmZmVyIHByb3BlcnRpZXMgKi8KLSAgICBmcmFtZV9kdXIgPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICAgIHBhcnNlLT5wcml2LT5hdmdfYml0cmF0ZSA9ICg4ICogcGFyc2UtPnByaXYtPmRhdGFfYnl0ZWNvdW50ICogR1NUX1NFQ09ORCkgLwotICAgICAgICBwYXJzZS0+cHJpdi0+YWNjX2R1cmF0aW9uOwotCi0gIH0gZWxzZSB7Ci0gICAgLyogTm8gd2F5IHRvIGZpZ3VyZSBvdXQgZnJhbWUgZHVyYXRpb24gKGlzIHRoaXMgZXZlbiBwb3NzaWJsZT8pICovCi0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogb3ZlcnJpZGUgaWYgc3ViY2xhc3MgcHJvdmlkZWQgYml0cmF0ZSwgZS5nLiBtZXRhZGF0YSBiYXNlZCAqLwotICBpZiAocGFyc2UtPnByaXYtPmJpdHJhdGUpIHsKLSAgICBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUgPSBwYXJzZS0+cHJpdi0+Yml0cmF0ZTsKLSAgICAvKiBzcHJlYWQgdGhpcyAoY29uZmlybWVkKSBpbmZvIEFTQVAgKi8KLSAgICBpZiAocGFyc2UtPnByaXYtPnBvc3RlZF9hdmdfYml0cmF0ZSAhPSBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUpCi0gICAgICBwYXJzZS0+cHJpdi0+dGFnc19jaGFuZ2VkID0gVFJVRTsKLSAgfQotCi0gIGlmIChmcmFtZV9kdXIpCi0gICAgZnJhbWVfYml0cmF0ZSA9ICg4ICogZGF0YV9sZW4gKiBHU1RfU0VDT05EKSAvIGZyYW1lX2R1cjsKLSAgZWxzZQotICAgIHJldHVybjsKLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmcmFtZSBiaXRyYXRlICV1LCBhdmcgYml0cmF0ZSAldSIsIGZyYW1lX2JpdHJhdGUsCi0gICAgICBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUpOwotCi0gIGlmIChwYXJzZS0+cHJpdi0+ZnJhbWVjb3VudCA8IE1JTl9GUkFNRVNfVE9fUE9TVF9CSVRSQVRFKQotICAgIHJldHVybjsKLQotICBpZiAocGFyc2UtPnByaXYtPmZyYW1lY291bnQgPT0gTUlOX0ZSQU1FU19UT19QT1NUX0JJVFJBVEUgJiYKLSAgICAgIChwYXJzZS0+cHJpdi0+cG9zdF9taW5fYml0cmF0ZSB8fCBwYXJzZS0+cHJpdi0+cG9zdF9hdmdfYml0cmF0ZQotICAgICAgICAgIHx8IHBhcnNlLT5wcml2LT5wb3N0X21heF9iaXRyYXRlKSkKLSAgICBwYXJzZS0+cHJpdi0+dGFnc19jaGFuZ2VkID0gVFJVRTsKLQotICBpZiAoR19MSUtFTFkgKHBhcnNlLT5wcml2LT5mcmFtZWNvdW50ID49IE1JTl9GUkFNRVNfVE9fUE9TVF9CSVRSQVRFKSkgewotICAgIGlmIChmcmFtZV9iaXRyYXRlIDwgcGFyc2UtPnByaXYtPm1pbl9iaXRyYXRlKSB7Ci0gICAgICBwYXJzZS0+cHJpdi0+bWluX2JpdHJhdGUgPSBmcmFtZV9iaXRyYXRlOwotICAgICAgaWYgKHBhcnNlLT5wcml2LT5wb3N0X21pbl9iaXRyYXRlKQotICAgICAgICBwYXJzZS0+cHJpdi0+dGFnc19jaGFuZ2VkID0gVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhbWVfYml0cmF0ZSA+IHBhcnNlLT5wcml2LT5tYXhfYml0cmF0ZSkgewotICAgICAgcGFyc2UtPnByaXYtPm1heF9iaXRyYXRlID0gZnJhbWVfYml0cmF0ZTsKLSAgICAgIGlmIChwYXJzZS0+cHJpdi0+cG9zdF9tYXhfYml0cmF0ZSkKLSAgICAgICAgcGFyc2UtPnByaXYtPnRhZ3NfY2hhbmdlZCA9IFRSVUU7Ci0gICAgfQotCi0gICAgLyogT25seSB1cGRhdGUgdGhlIHRhZyBvbiBhIDIlIGNoYW5nZSAqLwotICAgIGlmIChwYXJzZS0+cHJpdi0+cG9zdF9hdmdfYml0cmF0ZSAmJiBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUpIHsKLSAgICAgIGd1aW50NjQgZGlmZnByZXYgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgxMDAsCi0gICAgICAgICAgQUJTRElGRiAocGFyc2UtPnByaXYtPmF2Z19iaXRyYXRlLCBwYXJzZS0+cHJpdi0+cG9zdGVkX2F2Z19iaXRyYXRlKSwKLSAgICAgICAgICBwYXJzZS0+cHJpdi0+YXZnX2JpdHJhdGUpOwotICAgICAgaWYgKGRpZmZwcmV2ID49IFVQREFURV9USFJFU0hPTEQpCi0gICAgICAgIHBhcnNlLT5wcml2LT50YWdzX2NoYW5nZWQgPSBUUlVFOwotICAgIH0KLSAgfQotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyeToKLSAqIEBwYXJzZTogI0dzdEJhc2VQYXJzZS4KLSAqIEBvZmZzZXQ6IG9mZnNldCBvZiBlbnRyeQotICogQHRzOiB0aW1lc3RhbXAgYXNzb2NpYXRlZCB3aXRoIG9mZnNldAotICogQGtleTogd2hldGhlciBlbnRyeSByZWZlcnMgdG8ga2V5ZnJhbWUKLSAqIEBmb3JjZTogYWRkIGVudHJ5IGRpc3JlZ2FyZGluZyBzYW5pdHkgY2hlY2tzCi0gKgotICogQWRkcyBhbiBlbnRyeSB0byB0aGUgaW5kZXggYXNzb2NpYXRpbmcgQG9mZnNldCB0byBAdHMuICBJdCBpcyByZWNvbW1lbmRlZAotICogdG8gb25seSBhZGQga2V5ZnJhbWUgZW50cmllcy4gIEBmb3JjZSBhbGxvd3MgdG8gYnlwYXNzIGNoZWNrcywgc3VjaCBhcwotICogd2hldGhlciB0aGUgc3RyZWFtIGlzICh1cHN0cmVhbSkgc2Vla2FibGUsIGFub3RoZXIgZW50cnkgaXMgYWxyZWFkeSAiY2xvc2UiCi0gKiB0byB0aGUgbmV3IGVudHJ5LCBldGMuCi0gKgotICogUmV0dXJuczogI2dib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBlbnRyeSB3YXMgYWRkZWQKLSAqLwotZ2Jvb2xlYW4KLWdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyeSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIGd1aW50NjQgb2Zmc2V0LAotICAgIEdzdENsb2NrVGltZSB0cywgZ2Jvb2xlYW4ga2V5LCBnYm9vbGVhbiBmb3JjZSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdEluZGV4QXNzb2NpYXRpb24gYXNzb2NpYXRpb25zWzJdOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIkFkZGluZyBrZXk9JWQgaW5kZXggZW50cnkgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiIEAgb2Zmc2V0IDB4JTA4IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsIGtleSwgR1NUX1RJTUVfQVJHUyAodHMpLCBvZmZzZXQpOwotCi0gIGlmIChHX0xJS0VMWSAoIWZvcmNlKSkgewotCi0gICAgaWYgKCFwYXJzZS0+cHJpdi0+dXBzdHJlYW1fc2Vla2FibGUpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAidXBzdHJlYW0gbm90IHNlZWthYmxlOyBkaXNjYXJkaW5nIik7Ci0gICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgLyogRklYTUUgbmVlZCBiZXR0ZXIgaGVscGVyIGRhdGEgc3RydWN0dXJlIHRoYXQgaGFuZGxlcyB0aGVzZSBpc3N1ZXMKLSAgICAgKiByZWxhdGVkIHRvIG9uZ29pbmcgY29sbGVjdGluZyBvZiBpbmRleCBlbnRyaWVzICovCi0gICAgaWYgKHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X29mZnNldCArIHBhcnNlLT5wcml2LT5pZHhfYnl0ZV9pbnRlcnZhbCA+PQotICAgICAgICAoZ2ludDY0KSBvZmZzZXQpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAiYWxyZWFkeSBoYXZlIGVudHJpZXMgdXAgdG8gb2Zmc2V0IDB4JTA4IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsCi0gICAgICAgICAgcGFyc2UtPnByaXYtPmluZGV4X2xhc3Rfb2Zmc2V0ICsgcGFyc2UtPnByaXYtPmlkeF9ieXRlX2ludGVydmFsKTsKLSAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X3RzKSAmJgotICAgICAgICBHU1RfQ0xPQ0tfRElGRiAocGFyc2UtPnByaXYtPmluZGV4X2xhc3RfdHMsIHRzKSA8Ci0gICAgICAgIHBhcnNlLT5wcml2LT5pZHhfaW50ZXJ2YWwpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImVudHJ5IHRvbyBjbG9zZSB0byBsYXN0IHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X3RzKSk7Ci0gICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgLyogaWYgbGFzdCBpcyBub3QgcmVhbGx5IHRoZSBsYXN0IG9uZSAqLwotICAgIGlmICghcGFyc2UtPnByaXYtPmluZGV4X2xhc3RfdmFsaWQpIHsKLSAgICAgIEdzdENsb2NrVGltZSBwcmV2X3RzOwotCi0gICAgICBnc3RfYmFzZV9wYXJzZV9maW5kX29mZnNldCAocGFyc2UsIHRzLCBUUlVFLCAmcHJldl90cyk7Ci0gICAgICBpZiAoR1NUX0NMT0NLX0RJRkYgKHByZXZfdHMsIHRzKSA8IHBhcnNlLT5wcml2LT5pZHhfaW50ZXJ2YWwpIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgImVudHJ5IHRvbyBjbG9zZSB0byBleGlzdGluZyBlbnRyeSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChwcmV2X3RzKSk7Ci0gICAgICAgIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgcGFyc2UtPnByaXYtPmluZGV4X2xhc3RfdHMgPSB0czsKLSAgICAgICAgZ290byBleGl0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGFzc29jaWF0aW9uc1swXS5mb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7Ci0gIGFzc29jaWF0aW9uc1swXS52YWx1ZSA9IHRzOwotICBhc3NvY2lhdGlvbnNbMV0uZm9ybWF0ID0gR1NUX0ZPUk1BVF9CWVRFUzsKLSAgYXNzb2NpYXRpb25zWzFdLnZhbHVlID0gb2Zmc2V0OwotCi0gIC8qIGluZGV4IG1pZ2h0IGNoYW5nZSBvbi10aGUtZmx5LCBhbHRob3VnaCB0aGF0IHdvdWxkIGJlIG51dHR5IGFwcCAuLi4gKi8KLSAgR1NUX0JBU0VfUEFSU0VfSU5ERVhfTE9DSyAocGFyc2UpOwotICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAocGFyc2UtPnByaXYtPmluZGV4LCBwYXJzZS0+cHJpdi0+aW5kZXhfaWQsCi0gICAgICAoa2V5KSA/IEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUIDoKLSAgICAgIEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQsIDIsCi0gICAgICAoY29uc3QgR3N0SW5kZXhBc3NvY2lhdGlvbiAqKSAmYXNzb2NpYXRpb25zKTsKLSAgR1NUX0JBU0VfUEFSU0VfSU5ERVhfVU5MT0NLIChwYXJzZSk7Ci0KLSAgaWYgKGtleSkgewotICAgIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X29mZnNldCA9IG9mZnNldDsKLSAgICBwYXJzZS0+cHJpdi0+aW5kZXhfbGFzdF90cyA9IHRzOwotICB9Ci0KLSAgcmV0ID0gVFJVRTsKLQotZXhpdDoKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogY2hlY2sgZm9yIHNlZWthYmxlIHVwc3RyZWFtLCBhYm92ZSBhbmQgYmV5b25kIGEgbWVyZSBxdWVyeSAqLwotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3BhcnNlX2NoZWNrX3NlZWthYmlsaXR5IChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiBzZWVrYWJsZSA9IEZBTFNFOwotICBnaW50NjQgc3RhcnQgPSAtMSwgc3RvcCA9IC0xOwotICBndWludCBpZHhfaW50ZXJ2YWwgPSAwOwotICBndWludDY0IGlkeF9ieXRlX2ludGVydmFsID0gMDsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2Vla2luZyAoR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChwYXJzZS0+c2lua3BhZCwgcXVlcnkpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZWVraW5nIHF1ZXJ5IGZhaWxlZCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgTlVMTCwgJnNlZWthYmxlLCAmc3RhcnQsICZzdG9wKTsKLQotICAvKiB0cnkgaGFyZGVyIHRvIHF1ZXJ5IHVwc3RyZWFtIHNpemUgaWYgd2UgZGlkbid0IGdldCBpdCB0aGUgZmlyc3QgdGltZSAqLwotICBpZiAoc2Vla2FibGUgJiYgc3RvcCA9PSAtMSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZG9pbmcgZHVyYXRpb24gcXVlcnkgdG8gZml4IHVwIHVuc2V0IHN0b3AiKTsKLSAgICBnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKHBhcnNlLT5zaW5rcGFkLCBHU1RfRk9STUFUX0JZVEVTLCAmc3RvcCk7Ci0gIH0KLQotICAvKiBpZiB1cHN0cmVhbSBkb2Vzbid0IGtub3cgdGhlIHNpemUsIGl0J3MgbGlrZWx5IHRoYXQgaXQncyBub3Qgc2Vla2FibGUgaW4KLSAgICogcHJhY3RpY2UgZXZlbiBpZiBpdCB0ZWNobmljYWxseSBtYXkgYmUgc2Vla2FibGUgKi8KLSAgaWYgKHNlZWthYmxlICYmIChzdGFydCAhPSAwIHx8IHN0b3AgPD0gc3RhcnQpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZWVrYWJsZSBidXQgdW5rbm93biBzdGFydC9zdG9wIC0+IGRpc2FibGUiKTsKLSAgICBzZWVrYWJsZSA9IEZBTFNFOwotICB9Ci0KLSAgLyogbGV0J3Mgbm90IHB1dCBldmVyeSBzaW5nbGUgZnJhbWUgaW50byBvdXIgaW5kZXggKi8KLSAgaWYgKHNlZWthYmxlKSB7Ci0gICAgaWYgKHN0b3AgPCAxMCAqIDEwMjQgKiAxMDI0KQotICAgICAgaWR4X2ludGVydmFsID0gMTAwOwotICAgIGVsc2UgaWYgKHN0b3AgPCAxMDAgKiAxMDI0ICogMTAyNCkKLSAgICAgIGlkeF9pbnRlcnZhbCA9IDUwMDsKLSAgICBlbHNlCi0gICAgICBpZHhfaW50ZXJ2YWwgPSAxMDAwOwotCi0gICAgLyogZW5zdXJlIHRoYXQgZXZlbiBmb3IgbGFyZ2UgZmlsZXMgKGUuZy4gdmVyeSBsb25nIGF1ZGlvIGZpbGVzKSwgdGhlIGluZGV4Ci0gICAgICogc3RheXMgcmVhc29uYWJseS1zaXplLCB3aXRoIHNvbWUgYXJiaXRyYXJ5IGxpbWl0IHRvIHRoZSB0b3RhbCBudW1iZXIgb2YKLSAgICAgKiBpbmRleCBlbnRyaWVzICovCi0gICAgaWR4X2J5dGVfaW50ZXJ2YWwgPSAoc3RvcCAtIHN0YXJ0KSAvIE1BWF9JTkRFWF9FTlRSSUVTOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAiTGltaXRpbmcgaW5kZXggZW50cmllcyB0byAlZCwgaW5kZXhpbmcgYnl0ZSBpbnRlcnZhbCAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMiLCBNQVhfSU5ERVhfRU5UUklFUywgaWR4X2J5dGVfaW50ZXJ2YWwpOwotICB9Ci0KLWRvbmU6Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2Vla2FibGU6ICVkICglIiBHX0dVSU5UNjRfRk9STUFUICIgLSAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiKSIsIHNlZWthYmxlLCBzdGFydCwgc3RvcCk7Ci0gIHBhcnNlLT5wcml2LT51cHN0cmVhbV9zZWVrYWJsZSA9IHNlZWthYmxlOwotICBwYXJzZS0+cHJpdi0+dXBzdHJlYW1fc2l6ZSA9IHNlZWthYmxlID8gc3RvcCA6IDA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJpZHhfaW50ZXJ2YWw6ICV1bXMiLCBpZHhfaW50ZXJ2YWwpOwotICBwYXJzZS0+cHJpdi0+aWR4X2ludGVydmFsID0gaWR4X2ludGVydmFsICogR1NUX01TRUNPTkQ7Ci0gIHBhcnNlLT5wcml2LT5pZHhfYnl0ZV9pbnRlcnZhbCA9IGlkeF9ieXRlX2ludGVydmFsOwotfQotCi0vKiBzb21lIG1pc2MgY2hlY2tzIG9uIHVwc3RyZWFtICovCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfdXBzdHJlYW0gKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBnaW50NjQgc3RvcDsKLQotICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChwYXJzZS0+c2lua3BhZCwgR1NUX0ZPUk1BVF9USU1FLCAmc3RvcCkpCi0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdG9wKSAmJiBzdG9wKSB7Ci0gICAgICAvKiB1cHN0cmVhbSBoYXMgb25lLCBhY2NlcHQgaXQgYWxzbywgYW5kIG5vIGZ1cnRoZXIgdXBkYXRlcyAqLwotICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2R1cmF0aW9uIChwYXJzZSwgR1NUX0ZPUk1BVF9USU1FLCBzdG9wLCAwKTsKLSAgICAgIHBhcnNlLT5wcml2LT51cHN0cmVhbV9oYXNfZHVyYXRpb24gPSBUUlVFOwotICAgIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInVwc3RyZWFtX2hhc19kdXJhdGlvbjogJWQiLAotICAgICAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX2hhc19kdXJhdGlvbik7Ci19Ci0KLS8qIGNoZWNrcyBzcmMgY2FwcyB0byBkZXRlcm1pbmUgaWYgZGVhbGluZyB3aXRoIGF1ZGlvIG9yIHZpZGVvICovCi0vKiBUT0RPIG1heWJlIGZvcmVnbyBhdXRvbWFnaWMgc3R1ZmYgYW5kIGxldCBzdWJjbGFzcyBjb25maWd1cmUgaXQgPyAqLwotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3BhcnNlX2NoZWNrX21lZGlhIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhcnNlLT5zcmNwYWQpOwotICBpZiAoR19MSUtFTFkgKGNhcHMpICYmIChzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCkpKSB7Ci0gICAgcGFyc2UtPnByaXYtPmlzX3ZpZGVvID0KLSAgICAgICAgZ19zdHJfaGFzX3ByZWZpeCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksICJ2aWRlbyIpOwotICB9IGVsc2UgewotICAgIC8qIGhpc3RvcmljYWwgZGVmYXVsdCAqLwotICAgIHBhcnNlLT5wcml2LT5pc192aWRlbyA9IEZBTFNFOwotICB9Ci0gIGlmIChjYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBwYXJzZS0+cHJpdi0+Y2hlY2tlZF9tZWRpYSA9IFRSVUU7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibWVkaWEgaXMgdmlkZW86ICVkIiwgcGFyc2UtPnByaXYtPmlzX3ZpZGVvKTsKLX0KLQotLyogdGFrZXMgb3duZXJzaGlwIG9mIGZyYW1lICovCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2VfcXVldWVfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQotewotICBpZiAoIShmcmFtZS0+X3ByaXZhdGVfZmxhZ3MgJiBHU1RfQkFTRV9QQVJTRV9GUkFNRV9QUklWQVRFX0ZMQUdfTk9BTExPQykpIHsKLSAgICAvKiBmcmFtZSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAsIHdlIGNhbiBqdXN0IHRha2Ugb3duZXJzaGlwICovCi0gICAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZwYXJzZS0+cHJpdi0+cXVldWVkX2ZyYW1lcywgZnJhbWUpOwotICAgIEdTVF9UUkFDRSAoInF1ZXVlZCBmcmFtZSAlcCIsIGZyYW1lKTsKLSAgfSBlbHNlIHsKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqY29weTsKLQotICAgIC8qIHByb2JhYmx5IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2ssIG11c3QgbWFrZSBhIHByb3BlciBjb3B5ICovCi0gICAgY29weSA9IGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2NvcHkgKGZyYW1lKTsKLSAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoJnBhcnNlLT5wcml2LT5xdWV1ZWRfZnJhbWVzLCBjb3B5KTsKLSAgICBHU1RfVFJBQ0UgKCJxdWV1ZWQgZnJhbWUgJXAgKGNvcHkgb2YgJXApIiwgY29weSwgZnJhbWUpOwotICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUgKGZyYW1lKTsKLSAgfQotfQotCi0vKiBtYWtlcyBzdXJlIHRoYXQgQGJ1ZiBpcyBwcm9wZXJseSBwcmVwYXJlZCBhbmQgZGVjb3JhdGVkIGZvciBwYXNzaW5nCi0gKiB0byBiYXNlY2xhc3MsIGFuZCBhbiBlcXVhbGx5IHNldHVwIGZyYW1lIGlzIHJldHVybmVkIHNldHVwIHdpdGggQGJ1Zi4KLSAqIFRha2VzIG93bmVyc2hpcCBvZiBAYnVmLiAqLwotc3RhdGljIEdzdEJhc2VQYXJzZUZyYW1lICoKLWdzdF9iYXNlX3BhcnNlX3ByZXBhcmVfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEJhc2VQYXJzZUZyYW1lICpmcmFtZSA9IE5VTEw7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKLSAgICAgICJwcmVwYXJpbmcgZnJhbWUgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICIgKCUjIiBHX0dJTlQ2NF9NT0RJRklFUiAieCkgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpLCBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikpOwotCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpID0gcGFyc2UtPnByaXYtPm9mZnNldDsKLQotICBnc3RfYmFzZV9wYXJzZV91cGRhdGVfZmxhZ3MgKHBhcnNlKTsKLQotICBmcmFtZSA9IGdzdF9iYXNlX3BhcnNlX2ZyYW1lX25ldyAoYnVmZmVyLCAwLCAwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgZ3N0X2Jhc2VfcGFyc2VfdXBkYXRlX2ZyYW1lIChwYXJzZSwgZnJhbWUpOwotCi0gIC8qIGNsZWFyIGZsYWdzIGZvciBuZXh0IGZyYW1lICovCi0gIHBhcnNlLT5wcml2LT5kaXNjb250ID0gRkFMU0U7Ci0gIHBhcnNlLT5wcml2LT5uZXdfZnJhbWUgPSBGQUxTRTsKLQotICAvKiB1c2UgZGVmYXVsdCBoYW5kbGVyIHRvIHByb3ZpZGUgaW5pdGlhbCAodXBzdHJlYW0pIG1ldGFkYXRhICovCi0gIGdzdF9iYXNlX3BhcnNlX3BhcnNlX2ZyYW1lIChwYXJzZSwgZnJhbWUpOwotCi0gIHJldHVybiBmcmFtZTsKLX0KLQotLyogV3JhcHMgYnVmZmVyIGluIGEgZnJhbWUgYW5kIGRpc3BhdGNoZXMgdG8gc3ViY2xhc3MuCi0gKiBBbHNvIG1hbmFnZXMgZGF0YSBza2lwcGluZyBhbmQgb2Zmc2V0IGhhbmRsaW5nIChpbmNsdWRpbmcgYWRhcHRlciBmbHVzaGluZykuCi0gKiBUYWtlcyBvd25lcnNoaXAgb2YgQGJ1ZmZlciAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3BhcnNlX2hhbmRsZV9idWZmZXIgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgZ2ludCAqIHNraXAsIGdpbnQgKiBmbHVzaGVkKQotewotICBHc3RCYXNlUGFyc2VDbGFzcyAqa2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MgKHBhcnNlKTsKLSAgR3N0QmFzZVBhcnNlRnJhbWUgKmZyYW1lOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2tpcCAhPSBOVUxMIHx8IGZsdXNoZWQgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKLSAgICAgICJoYW5kbGluZyBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIHdpdGggZHRzICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgcHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpLCBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpKSk7Ci0KLSAgLyogdHJhY2sgd2hhdCBpcyBiZWluZyBmbHVzaGVkIGR1cmluZyB0aGlzIHNpbmdsZSByb3VuZCBvZiBmcmFtZSBwcm9jZXNzaW5nICovCi0gIHBhcnNlLT5wcml2LT5mbHVzaGVkID0gMDsKLSAgKnNraXAgPSAwOwotCi0gIC8qIG1ha2UgaXQgZWFzeSBmb3IgX2ZpbmlzaF9mcmFtZSB0byBwaWNrIHVwIGlucHV0IGRhdGEgKi8KLSAgaWYgKHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9PSBHU1RfUEFEX01PREVfUFVMTCkgewotICAgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotICAgIGdzdF9hZGFwdGVyX3B1c2ggKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBidWZmZXIpOwotICB9Ci0KLSAgZnJhbWUgPSBnc3RfYmFzZV9wYXJzZV9wcmVwYXJlX2ZyYW1lIChwYXJzZSwgYnVmZmVyKTsKLSAgcmV0ID0ga2xhc3MtPmhhbmRsZV9mcmFtZSAocGFyc2UsIGZyYW1lLCBza2lwKTsKLQotICAqZmx1c2hlZCA9IHBhcnNlLT5wcml2LT5mbHVzaGVkOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImhhbmRsZV9mcmFtZSBza2lwcGVkICVkLCBmbHVzaGVkICVkIiwKLSAgICAgICpza2lwLCAqZmx1c2hlZCk7Ci0KLSAgLyogc3ViY2xhc3MgY2FuIG9ubHkgZG8gb25lIG9mIHRoZXNlLCBvciBzZW1hbnRpY3MgYXJlIHRvbyB1bmNsZWFyICovCi0gIGdfYXNzZXJ0ICgqc2tpcCA9PSAwIHx8ICpmbHVzaGVkID09IDApOwotCi0gIC8qIHRyYWNrIHNraXBwaW5nICovCi0gIGlmICgqc2tpcCA+IDApIHsKLSAgICBHc3RDbG9ja1RpbWUgcHRzLCBkdHM7Ci0gICAgR3N0QnVmZmVyICpvdXRidWY7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmaW5kaW5nIHN5bmMsIHNraXBwaW5nICVkIGJ5dGVzIiwgKnNraXApOwotICAgIGlmIChwYXJzZS0+c2VnbWVudC5yYXRlIDwgMC4wICYmICFwYXJzZS0+cHJpdi0+YnVmZmVyc19xdWV1ZWQpIHsKLSAgICAgIC8qIHJldmVyc2UgcGxheWJhY2ssIGFuZCBubyBmcmFtZXMgZm91bmQgeWV0LCBzbyB3ZSBhcmUgc2tpcHBpbmcKLSAgICAgICAqIHRoZSBsZWFkaW5nIHBhcnQgb2YgYSBmcmFnbWVudCwgd2hpY2ggbWF5IGZvcm0gdGhlIHRhaWwgb2YKLSAgICAgICAqIGZyYWdtZW50IGNvbWluZyBsYXRlciwgaG9wZWZ1bGx5IHN1YmNsYXNzIHNraXBzIGVmZmljaWVudGx5IC4uLiAqLwotICAgICAgcHRzID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHMgKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBOVUxMKTsKLSAgICAgIGR0cyA9IGdzdF9hZGFwdGVyX3ByZXZfZHRzIChwYXJzZS0+cHJpdi0+YWRhcHRlciwgTlVMTCk7Ci0gICAgICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocGFyc2UtPnByaXYtPmFkYXB0ZXIsICpza2lwKTsKLSAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAob3V0YnVmKTsKLSAgICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gcHRzOwotICAgICAgR1NUX0JVRkZFUl9EVFMgKG91dGJ1ZikgPSBkdHM7Ci0gICAgICBwYXJzZS0+cHJpdi0+YnVmZmVyc19oZWFkID0KLSAgICAgICAgICBnX3NsaXN0X3ByZXBlbmQgKHBhcnNlLT5wcml2LT5idWZmZXJzX2hlYWQsIG91dGJ1Zik7Ci0gICAgICBvdXRidWYgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBJZiB3ZSdyZSBhc2tlZCB0byBza2lwIG1vcmUgdGhhbiBpcyBhdmFpbGFibGUgaW4gdGhlIGFkYXB0ZXIsCi0gICAgICAgICB3ZSBuZWVkIHRvIHJlbWVtYmVyIHdoYXQgd2UgbmVlZCB0byBza2lwIGZvciBuZXh0IGl0ZXJhdGlvbiAqLwotICAgICAgZ3NpemUgYXYgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKLSAgICAgIEdTVF9ERUJVRyAoIkFza2VkIHRvIHNraXAgJXUgKCUiIEdfR1NJWkVfRk9STUFUICIgYXZhaWxhYmxlKSIsICpza2lwLCBhdik7Ci0gICAgICBpZiAoYXYgPj0gKnNraXApIHsKLSAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHBhcnNlLT5wcml2LT5hZGFwdGVyLCAqc2tpcCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUcKLSAgICAgICAgICAgICgiVGhpcyBpcyBtb3JlIHRoYW4gYXZhaWxhYmxlLCBmbHVzaGluZyAlIiBHX0dTSVpFX0ZPUk1BVAotICAgICAgICAgICAgIiwgc3RvcmluZyAldSB0byBza2lwIiwgYXYsIChndWludCkgKCpza2lwIC0gYXYpKTsKLSAgICAgICAgcGFyc2UtPnByaXYtPnNraXAgPSAqc2tpcCAtIGF2OwotICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIGF2KTsKLSAgICAgICAgKnNraXAgPSBhdjsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFwYXJzZS0+cHJpdi0+ZGlzY29udCkKLSAgICAgIHBhcnNlLT5wcml2LT5zeW5jX29mZnNldCA9IHBhcnNlLT5wcml2LT5vZmZzZXQ7Ci0gICAgcGFyc2UtPnByaXYtPm9mZnNldCArPSAqc2tpcDsKLSAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gICAgLyogY2hlY2sgZm9yIGluZGVmaW5pdGUgc2tpcHBpbmcgKi8KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX09LKQotICAgICAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfc3luYyAocGFyc2UpOwotICB9Ci0KLSAgcGFyc2UtPnByaXYtPm9mZnNldCArPSAqZmx1c2hlZDsKLQotICBpZiAocGFyc2UtPnByaXYtPnBhZF9tb2RlID09IEdTVF9QQURfTU9ERV9QVUxMKSB7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKLSAgfQotCi0gIGlmICgqc2tpcCA9PSAwICYmICpmbHVzaGVkID09IDApIHsKLSAgICAvKiBDYXJyeSBvdmVyIGRpc2NvbnQgaWYgd2UgbmVlZCBtb3JlIGRhdGEgKi8KLSAgICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChmcmFtZS0+YnVmZmVyKSkKLSAgICAgIHBhcnNlLT5wcml2LT5kaXNjb250ID0gVFJVRTsKLSAgfQotCi0gIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUgKGZyYW1lKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBnc3RfYmFzZV9wYXJzZV9wdXNoX3BlbmRpbmdfZXZlbnRzOgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlCi0gKgotICogUHVzaGVzIHRoZSBwZW5kaW5nIGV2ZW50cwotICovCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2VfcHVzaF9wZW5kaW5nX2V2ZW50cyAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+cGVuZGluZ19ldmVudHMpKSB7Ci0gICAgR0xpc3QgKnIgPSBnX2xpc3RfcmV2ZXJzZSAocGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzKTsKLSAgICBHTGlzdCAqbDsKLQotICAgIHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7Ci0gICAgZm9yIChsID0gcjsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c3JjcGFkLCBHU1RfRVZFTlRfQ0FTVCAobC0+ZGF0YSkpOwotICAgIH0KLSAgICBnX2xpc3RfZnJlZSAocik7Ci0gIH0KLX0KLQotLyogZ3N0X2Jhc2VfcGFyc2VfaGFuZGxlX2FuZF9wdXNoX2ZyYW1lOgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgotICogQGtsYXNzOiAjR3N0QmFzZVBhcnNlQ2xhc3MuCi0gKiBAZnJhbWU6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0QmFzZVBhcnNlRnJhbWUKLSAqCi0gKiBQYXJzZXMgdGhlIGZyYW1lIGZyb20gZ2l2ZW4gYnVmZmVyIGFuZCBwdXNoZXMgaXQgZm9yd2FyZC4gQWxzbyBwZXJmb3JtcwotICogdGltZXN0YW1wIGhhbmRsaW5nIGFuZCBjaGVja3MgdGhlIHNlZ21lbnQgbGltaXRzLgotICoKLSAqIFRoaXMgaXMgY2FsbGVkIHdpdGggc3JjcGFkIFNUUkVBTV9MT0NLIGhlbGQuCi0gKgotICogUmV0dXJuczogI0dzdEZsb3dSZXR1cm4KLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3BhcnNlX2hhbmRsZV9hbmRfcHVzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSkKLXsKLSAgZ2ludDY0IG9mZnNldDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZyYW1lICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBidWZmZXIgPSBmcmFtZS0+YnVmZmVyOwotICBvZmZzZXQgPSBmcmFtZS0+b2Zmc2V0OwotCi0gIC8qIGNoZWNrIGlmIHN1YmNsYXNzL2Zvcm1hdCBjYW4gcHJvdmlkZSB0cy4KLSAgICogSWYgc28sIHRoYXQgYWxsb3dzIGFuZCBlbmFibGVzIGV4dHJhIHNlZWsgYW5kIGR1cmF0aW9uIGRldGVybWluaW5nIG9wdGlvbnMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV9vZmZzZXQgPCAwKSkgewotICAgIGlmIChHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoYnVmZmVyKSAmJiBwYXJzZS0+cHJpdi0+aGFzX3RpbWluZ19pbmZvCi0gICAgICAgICYmIHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9PSBHU1RfUEFEX01PREVfUFVMTCkgewotICAgICAgcGFyc2UtPnByaXYtPmZpcnN0X2ZyYW1lX29mZnNldCA9IG9mZnNldDsKLSAgICAgIHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV9wdHMgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgICAgIHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV9kdHMgPSBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic3ViY2xhc3MgcHJvdmlkZWQgZHRzICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICIsIHB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiBmb3IgZmlyc3QgZnJhbWUgYXQgb2Zmc2V0ICUiCi0gICAgICAgICAgR19HSU5UNjRfRk9STUFULCBHU1RfVElNRV9BUkdTIChwYXJzZS0+cHJpdi0+Zmlyc3RfZnJhbWVfZHRzKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChwYXJzZS0+cHJpdi0+Zmlyc3RfZnJhbWVfcHRzKSwKLSAgICAgICAgICBwYXJzZS0+cHJpdi0+Zmlyc3RfZnJhbWVfb2Zmc2V0KTsKLSAgICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5wcml2LT5kdXJhdGlvbikpIHsKLSAgICAgICAgZ2ludDY0IG9mZjsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIGxhc3RfdHMgPSBHX01BWElOVDY0OwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibm8gZHVyYXRpb247IHRyeWluZyBzY2FuIHRvIGRldGVybWluZSIpOwotICAgICAgICBnc3RfYmFzZV9wYXJzZV9sb2NhdGVfdGltZSAocGFyc2UsICZsYXN0X3RzLCAmb2ZmKTsKLSAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChsYXN0X3RzKSkKLSAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb24gKHBhcnNlLCBHU1RfRk9STUFUX1RJTUUsIGxhc3RfdHMsIDApOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBkaXNhYmxlIGZ1cnRoZXIgY2hlY2tzICovCi0gICAgICBwYXJzZS0+cHJpdi0+Zmlyc3RfZnJhbWVfb2Zmc2V0ID0gMDsKLSAgICB9Ci0gIH0KLQotICAvKiB0cmFjayB1cHN0cmVhbSB0aW1lIGlmIHByb3ZpZGVkLCBub3Qgc3ViY2xhc3MnIGludGVybmFsIG5vdGlvbiBvZiBpdCAqLwotICBpZiAocGFyc2UtPnByaXYtPnVwc3RyZWFtX2Zvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICBHU1RfQlVGRkVSX1BUUyAoZnJhbWUtPmJ1ZmZlcikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIEdTVF9CVUZGRVJfRFRTIChmcmFtZS0+YnVmZmVyKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLQotICAvKiBpbnRlcnBvbGF0aW5nIGFuZCBubyB2YWxpZCBwdHMgeWV0LAotICAgKiBzdGFydCB3aXRoIGR0cyBhbmQgY2Fycnkgb24gZnJvbSB0aGVyZSAqLwotICBpZiAocGFyc2UtPnByaXYtPmluZmVyX3RzICYmIHBhcnNlLT5wcml2LT5wdHNfaW50ZXJwb2xhdGUKLSAgICAgICYmICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPnByaXYtPm5leHRfcHRzKSkKLSAgICBwYXJzZS0+cHJpdi0+bmV4dF9wdHMgPSBwYXJzZS0+cHJpdi0+bmV4dF9kdHM7Ci0KLSAgLyogYWdhaW4gdXNlIGRlZmF1bHQgaGFuZGxlciB0byBhZGQgbWlzc2luZyBtZXRhZGF0YTsKLSAgICogd2UgbWF5IGhhdmUgbmV3IGluZm9ybWF0aW9uIG9uIGZyYW1lIHByb3BlcnRpZXMgKi8KLSAgZ3N0X2Jhc2VfcGFyc2VfcGFyc2VfZnJhbWUgKHBhcnNlLCBmcmFtZSk7Ci0KLSAgcGFyc2UtPnByaXYtPm5leHRfcHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgaWYgKEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEIChidWZmZXIpICYmIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZmZlcikpIHsKLSAgICBwYXJzZS0+cHJpdi0+bmV4dF9kdHMgPQotICAgICAgICBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSArIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7Ci0gICAgaWYgKHBhcnNlLT5wcml2LT5wdHNfaW50ZXJwb2xhdGUgJiYgR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGJ1ZmZlcikpIHsKLSAgICAgIEdzdENsb2NrVGltZSBuZXh0X3B0cyA9Ci0gICAgICAgICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgKyBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICAgICAgaWYgKG5leHRfcHRzID49IHBhcnNlLT5wcml2LT5uZXh0X2R0cykKLSAgICAgICAgcGFyc2UtPnByaXYtPm5leHRfcHRzID0gbmV4dF9wdHM7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIHdlIGxvc3QgdHJhY2ssIGRvIG5vdCBwcm9kdWNlIGJvZ3VzIHRpbWUgbmV4dCB0aW1lIGFyb3VuZAotICAgICAqIChwcm9iYWJseSBtZWFucyBwYXJzZXIgc3ViY2xhc3MgaGFzIGdpdmVuIHVwIG9uIHBhcnNpbmcgYXMgd2VsbCkgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIG5leHQgZmFsbGJhY2sgdGltZXN0YW1wIik7Ci0gICAgcGFyc2UtPnByaXYtPm5leHRfZHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIGlmIChwYXJzZS0+cHJpdi0+dXBzdHJlYW1fc2Vla2FibGUgJiYgcGFyc2UtPnByaXYtPmV4YWN0X3Bvc2l0aW9uICYmCi0gICAgICBHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoYnVmZmVyKSkKLSAgICBnc3RfYmFzZV9wYXJzZV9hZGRfaW5kZXhfZW50cnkgKHBhcnNlLCBvZmZzZXQsCi0gICAgICAgIEdTVF9CVUZGRVJfUFRTIChidWZmZXIpLAotICAgICAgICAhR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCksIEZBTFNFKTsKLQotICAvKiBBbGwgT0ssIHB1c2ggcXVldWVkIGZyYW1lcyBpZiB0aGVyZSBhcmUgYW55ICovCi0gIGlmIChHX1VOTElLRUxZICghZ19xdWV1ZV9pc19lbXB0eSAoJnBhcnNlLT5wcml2LT5xdWV1ZWRfZnJhbWVzKSkpIHsKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqcXVldWVkX2ZyYW1lOwotCi0gICAgd2hpbGUgKChxdWV1ZWRfZnJhbWUgPSBnX3F1ZXVlX3BvcF9oZWFkICgmcGFyc2UtPnByaXYtPnF1ZXVlZF9mcmFtZXMpKSkgewotICAgICAgZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSAocGFyc2UsIHF1ZXVlZF9mcmFtZSk7Ci0gICAgICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlIChxdWV1ZWRfZnJhbWUpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lIChwYXJzZSwgZnJhbWUpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWU6Ci0gKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCi0gKiBAZnJhbWU6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0QmFzZVBhcnNlRnJhbWUKLSAqCi0gKiBQdXNoZXMgdGhlIGZyYW1lJ3MgYnVmZmVyIGRvd25zdHJlYW0sIHNlbmRzIGFueSBwZW5kaW5nIGV2ZW50cyBhbmQKLSAqIGRvZXMgc29tZSB0aW1lc3RhbXAgYW5kIHNlZ21lbnQgaGFuZGxpbmcuIFRha2VzIG93bmVyc2hpcCBvZgotICogZnJhbWUncyBidWZmZXIsIHRob3VnaCBjYWxsZXIgcmV0YWlucyBvd25lcnNoaXAgb2YgQGZyYW1lLgotICoKLSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBzaW5rcGFkIFNUUkVBTV9MT0NLIGhlbGQuCi0gKgotICogUmV0dXJuczogI0dzdEZsb3dSZXR1cm4KLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdENsb2NrVGltZSBsYXN0X3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR3N0Q2xvY2tUaW1lIGxhc3Rfc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdzdEJhc2VQYXJzZUNsYXNzICprbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0dFVF9DTEFTUyAocGFyc2UpOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgZ3NpemUgc2l6ZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnJhbWUgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnJhbWUtPmJ1ZmZlciAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX1RSQUNFX09CSkVDVCAocGFyc2UsICJwdXNoaW5nIGZyYW1lICVwIiwgZnJhbWUpOwotCi0gIGJ1ZmZlciA9IGZyYW1lLT5idWZmZXI7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAotICAgICAgInByb2Nlc3NpbmcgYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiB3aXRoIGR0cyAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIsIHB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFRTIChidWZmZXIpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChidWZmZXIpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikpKTsKLQotICAvKiB1cGRhdGUgc3RhdHMgKi8KLSAgcGFyc2UtPnByaXYtPmJ5dGVjb3VudCArPSBmcmFtZS0+c2l6ZTsKLSAgaWYgKEdfTElLRUxZICghKGZyYW1lLT5mbGFncyAmIEdTVF9CQVNFX1BBUlNFX0ZSQU1FX0ZMQUdfTk9fRlJBTUUpKSkgewotICAgIHBhcnNlLT5wcml2LT5mcmFtZWNvdW50Kys7Ci0gICAgaWYgKEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZmZlcikpIHsKLSAgICAgIHBhcnNlLT5wcml2LT5hY2NfZHVyYXRpb24gKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLSAgICB9Ci0gIH0KLSAgLyogMCBtZWFucyBkaXNhYmxlZCAqLwotICBpZiAocGFyc2UtPnByaXYtPnVwZGF0ZV9pbnRlcnZhbCA8IDApCi0gICAgcGFyc2UtPnByaXYtPnVwZGF0ZV9pbnRlcnZhbCA9IDUwOwotICBlbHNlIGlmIChwYXJzZS0+cHJpdi0+dXBkYXRlX2ludGVydmFsID4gMCAmJgotICAgICAgKHBhcnNlLT5wcml2LT5mcmFtZWNvdW50ICUgcGFyc2UtPnByaXYtPnVwZGF0ZV9pbnRlcnZhbCkgPT0gMCkKLSAgICBnc3RfYmFzZV9wYXJzZV91cGRhdGVfZHVyYXRpb24gKHBhcnNlKTsKLQotICBpZiAoR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGJ1ZmZlcikpCi0gICAgbGFzdF9zdGFydCA9IGxhc3Rfc3RvcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotICBpZiAobGFzdF9zdGFydCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FCi0gICAgICAmJiBHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWZmZXIpKQotICAgIGxhc3Rfc3RvcCA9IGxhc3Rfc3RhcnQgKyBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotCi0gIC8qIHNob3VsZCBoYXZlIGNhcHMgYnkgbm93ICovCi0gIGlmICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChwYXJzZS0+c3JjcGFkKSkKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFwYXJzZS0+cHJpdi0+Y2hlY2tlZF9tZWRpYSkpIHsKLSAgICAvKiBoYXZlIGNhcHM7IGNoZWNrIGlkZW50aXR5ICovCi0gICAgZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfbWVkaWEgKHBhcnNlKTsKLSAgfQotCi0gIGlmIChwYXJzZS0+cHJpdi0+dGFnc19jaGFuZ2VkKSB7Ci0gICAgZ3N0X2Jhc2VfcGFyc2VfcXVldWVfdGFnX2V2ZW50X3VwZGF0ZSAocGFyc2UpOwotICAgIHBhcnNlLT5wcml2LT50YWdzX2NoYW5nZWQgPSBGQUxTRTsKLSAgfQotCi0gIC8qIFB1c2ggcGVuZGluZyBldmVudHMsIGluY2x1ZGluZyBTRUdNRU5UIGV2ZW50cyAqLwotICBnc3RfYmFzZV9wYXJzZV9wdXNoX3BlbmRpbmdfZXZlbnRzIChwYXJzZSk7Ci0KLSAgLyogc2VnbWVudCBhZGp1c3RtZW50IG1hZ2ljOyBvbmx5IGlmIHdlIGFyZSBydW5uaW5nIHRoZSB3aG9sZSBzaG93ICovCi0gIGlmICghcGFyc2UtPnByaXYtPnBhc3N0aHJvdWdoICYmIHBhcnNlLT5zZWdtZW50LnJhdGUgPiAwLjAgJiYKLSAgICAgIChwYXJzZS0+cHJpdi0+cGFkX21vZGUgPT0gR1NUX1BBRF9NT0RFX1BVTEwgfHwKLSAgICAgICAgICBwYXJzZS0+cHJpdi0+dXBzdHJlYW1fc2Vla2FibGUpKSB7Ci0gICAgLyogaGFuZGxlIGdhcHMgKi8KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uKSAmJgotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFzdF9zdGFydCkpIHsKLSAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLQotICAgICAgLyogb25seSBzZW5kIG5ld3NlZ21lbnRzIHdpdGggaW5jcmVhc2luZyBzdGFydCB0aW1lcywKLSAgICAgICAqIG90aGVyd2lzZSBpZiB0aGVzZSBnbyBiYWNrIGFuZCBmb3J0aCBkb3duc3RyZWFtIChzaW5rcykgaW5jcmVhc2UKLSAgICAgICAqIGFjY3VtdWxhdGVkIHRpbWUgYW5kIHJ1bm5pbmdfdGltZSAqLwotICAgICAgZGlmZiA9IEdTVF9DTE9DS19ESUZGIChwYXJzZS0+c2VnbWVudC5wb3NpdGlvbiwgbGFzdF9zdGFydCk7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoZGlmZiA+IDIgKiBHU1RfU0VDT05ECi0gICAgICAgICAgICAgICYmIGxhc3Rfc3RhcnQgPiBwYXJzZS0+c2VnbWVudC5zdGFydAotICAgICAgICAgICAgICAmJiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+c2VnbWVudC5zdG9wKQotICAgICAgICAgICAgICAgICAgfHwgbGFzdF9zdGFydCA8IHBhcnNlLT5zZWdtZW50LnN0b3ApKSkgewotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgIkdhcCBvZiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBucyBkZXRlY3RlZCBpbiBzdHJlYW0gIiAiKCUiCi0gICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiAtPiAlIiBHU1RfVElNRV9GT1JNQVQgIikuICIKLSAgICAgICAgICAgICJTZW5kaW5nIHVwZGF0ZWQgU0VHTUVOVCBldmVudHMiLCBkaWZmLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFyc2UtPnNlZ21lbnQucG9zaXRpb24pLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGFzdF9zdGFydCkpOwotCi0gICAgICAgIC8qIHNraXAgZ2FwIEZJWE1FICovCi0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPnNyY3BhZCwKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnBhcnNlLT5zZWdtZW50KSk7Ci0KLSAgICAgICAgcGFyc2UtPnNlZ21lbnQucG9zaXRpb24gPSBsYXN0X3N0YXJ0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIHVwZGF0ZSBiaXRyYXRlcyBhbmQgb3B0aW9uYWxseSBwb3N0IGNvcnJlc3BvbmRpbmcgdGFncwotICAgKiAoZm9sbG93aW5nIG5ld3NlZ21lbnQpICovCi0gIGdzdF9iYXNlX3BhcnNlX3VwZGF0ZV9iaXRyYXRlcyAocGFyc2UsIGZyYW1lKTsKLQotICBpZiAoa2xhc3MtPnByZV9wdXNoX2ZyYW1lKSB7Ci0gICAgcmV0ID0ga2xhc3MtPnByZV9wdXNoX2ZyYW1lIChwYXJzZSwgZnJhbWUpOwotICB9IGVsc2UgewotICAgIGZyYW1lLT5mbGFncyB8PSBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVA7Ci0gIH0KLQotICAvKiBQdXNoIHBlbmRpbmcgZXZlbnRzLCBpZiB0aGVyZSBhcmUgYW55IG5ldyBvbmVzCi0gICAqIGxpa2UgdGFncyBhZGRlZCBieSBwcmVfcHVzaF9mcmFtZSAqLwotICBpZiAocGFyc2UtPnByaXYtPnRhZ3NfY2hhbmdlZCkgewotICAgIGdzdF9iYXNlX3BhcnNlX3F1ZXVlX3RhZ19ldmVudF91cGRhdGUgKHBhcnNlKTsKLSAgICBwYXJzZS0+cHJpdi0+dGFnc19jaGFuZ2VkID0gRkFMU0U7Ci0gIH0KLSAgZ3N0X2Jhc2VfcGFyc2VfcHVzaF9wZW5kaW5nX2V2ZW50cyAocGFyc2UpOwotCi0gIC8qIHRha2UgZmluYWwgb3duZXJzaGlwIG9mIGZyYW1lIGJ1ZmZlciAqLwotICBpZiAoZnJhbWUtPm91dF9idWZmZXIpIHsKLSAgICBidWZmZXIgPSBmcmFtZS0+b3V0X2J1ZmZlcjsKLSAgICBmcmFtZS0+b3V0X2J1ZmZlciA9IE5VTEw7Ci0gICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmZnJhbWUtPmJ1ZmZlciwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKLSAgICBmcmFtZS0+YnVmZmVyID0gTlVMTDsKLSAgfQotCi0gIC8qIHN1YmNsYXNzIG11c3QgcGxheSBuaWNlICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotCi0gIHBhcnNlLT5wcml2LT5zZWVuX2tleWZyYW1lIHw9IHBhcnNlLT5wcml2LT5pc192aWRlbyAmJgotICAgICAgIUdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gIGlmIChmcmFtZS0+ZmxhZ3MgJiBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVApIHsKLSAgICBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgKGJ1ZmZlcikgJiYKLSAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5zZWdtZW50LnN0b3ApICYmCi0gICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID4KLSAgICAgICAgcGFyc2UtPnNlZ21lbnQuc3RvcCArIHBhcnNlLT5wcml2LT5sZWFkX291dF90cykgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiRHJvcHBlZCBmcmFtZSwgYWZ0ZXIgc2VnbWVudCIpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIH0gZWxzZSBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgKGJ1ZmZlcikgJiYKLSAgICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmZmVyKSAmJgotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPnNlZ21lbnQuc3RhcnQpICYmCi0gICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpICsgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSArCi0gICAgICAgIHBhcnNlLT5wcml2LT5sZWFkX2luX3RzIDwgcGFyc2UtPnNlZ21lbnQuc3RhcnQpIHsKLSAgICAgIGlmIChwYXJzZS0+cHJpdi0+c2Vlbl9rZXlmcmFtZSkgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJGcmFtZSBiZWZvcmUgc2VnbWVudCwgYWZ0ZXIga2V5ZnJhbWUiKTsKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJEcm9wcGVkIGZyYW1lLCBiZWZvcmUgc2VnbWVudCIpOwotICAgICAgICByZXQgPSBHU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQ7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgIH0KLSAgfQotCi0gIGlmIChyZXQgPT0gR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZnJhbWUgKCUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMpIGRyb3BwZWQiLCBzaXplKTsKLSAgICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpCi0gICAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spIHsKLSAgICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA+IDAuMCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAicHVzaGluZyBmcmFtZSAoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcykgbm93Li4iLAotICAgICAgICAgIHNpemUpOwotICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYXJzZS0+c3JjcGFkLCBidWZmZXIpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZnJhbWUgcHVzaGVkLCBmbG93ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIH0gZWxzZSBpZiAoIXBhcnNlLT5wcml2LT5kaXNhYmxlX3Bhc3N0aHJvdWdoICYmIHBhcnNlLT5wcml2LT5wYXNzdGhyb3VnaCkgewotCi0gICAgICAvKiBpbiBiYWNrd2FyZHMgcGxheWJhY2sgbW9kZSwgaWYgb24gcGFzc3Rocm91Z2ggd2UgbmVlZCB0byBwdXNoIGJ1ZmZlcnMKLSAgICAgICAqIGRpcmVjdGx5IHdpdGhvdXQgYWNjdW11bGF0aW5nIHRoZW0gaW50byB0aGUgYnVmZmVyc19xdWV1ZWQgYXMgYmFzZXBhcnNlCi0gICAgICAgKiB3aWxsIG5ldmVyIGNoZWNrIGZvciBhIERJU0NPTlQgd2hpbGUgb24gcGFzc3Rocm91Z2ggYW5kIHRob3NlIGJ1ZmZlcnMKLSAgICAgICAqIHdpbGwgbmV2ZXIgYmUgcHVzaGVkLgotICAgICAgICoKLSAgICAgICAqIGFsc28sIGFzIHdlIGFyZSBvbiByZXZlcnNlIHBsYXliYWNrLCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0aGF0Ci0gICAgICAgKiBwYXNzdGhyb3VnaCBtaWdodCBoYXZlIGp1c3QgYmVlbiBlbmFibGVkLCBzbyBtYWtlIHN1cmUgdG8gZHJhaW4gdGhlCi0gICAgICAgKiBidWZmZXJzX3F1ZXVlZCBsaXN0ICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkICE9IE5VTEwpKSB7Ci0gICAgICAgIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFnbWVudCAocGFyc2UsIFRSVUUpOwotICAgICAgICByZXQgPSBnc3RfYmFzZV9wYXJzZV9zZW5kX2J1ZmZlcnMgKHBhcnNlKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgICAicHVzaGluZyBmcmFtZSAoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcykgbm93Li4iLCBzaXplKTsKLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYXJzZS0+c3JjcGFkLCBidWZmZXIpOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmcmFtZSBwdXNoZWQsIGZsb3cgJXMiLAotICAgICAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgImZyYW1lICglIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzKSBub3QgcHVzaGVkOiAlcyIsIHNpemUsCi0gICAgICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZnJhbWUgKCUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMpIHF1ZXVlZCBmb3Igbm93IiwKLSAgICAgICAgICBzaXplKTsKLSAgICAgIHBhcnNlLT5wcml2LT5idWZmZXJzX3F1ZXVlZCA9Ci0gICAgICAgICAgZ19zbGlzdF9wcmVwZW5kIChwYXJzZS0+cHJpdi0+YnVmZmVyc19xdWV1ZWQsIGJ1ZmZlcik7Ci0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZnJhbWUgKCUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMpIG5vdCBwdXNoZWQ6ICVzIiwKLSAgICAgICAgc2l6ZSwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgLyogaWYgd2UgYXJlIG5vdCBzdWZmaWNpZW50bHkgaW4gY29udHJvbCwgbGV0IHVwc3RyZWFtIGRlY2lkZSBvbiBFT1MgKi8KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUyAmJiAhcGFyc2UtPnByaXYtPmRpc2FibGVfcGFzc3Rocm91Z2ggJiYKLSAgICAgICAgKHBhcnNlLT5wcml2LT5wYXNzdGhyb3VnaCB8fAotICAgICAgICAgICAgKHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9PSBHU1RfUEFEX01PREVfUFVTSCAmJgotICAgICAgICAgICAgICAgICFwYXJzZS0+cHJpdi0+dXBzdHJlYW1fc2Vla2FibGUpKSkKLSAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgLyogVXBkYXRlIGN1cnJlbnQgcnVubmluZyBzZWdtZW50IHBvc2l0aW9uICovCi0gIGlmICgocmV0ID09IEdTVF9GTE9XX09LIHx8IHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKQotICAgICAgJiYgbGFzdF9zdG9wICE9IEdTVF9DTE9DS19USU1FX05PTkUKLSAgICAgICYmIHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uIDwgbGFzdF9zdG9wKQotICAgIHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uID0gbGFzdF9zdG9wOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1ub19jYXBzOgotICB7Ci0gICAgaWYgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhcnNlLT5zcmNwYWQpKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBhcnNlLCBTVFJFQU0sIERFQ09ERSwgKCJObyBjYXBzIHNldCIpLCAoTlVMTCkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZToKLSAqIEBwYXJzZTogYSAjR3N0QmFzZVBhcnNlCi0gKiBAZnJhbWU6IGEgI0dzdEJhc2VQYXJzZUZyYW1lCi0gKiBAc2l6ZTogY29uc3VtZWQgaW5wdXQgZGF0YSByZXByZXNlbnRlZCBieSBmcmFtZQotICoKLSAqIENvbGxlY3RzIHBhcnNlZCBkYXRhIGFuZCBwdXNoZXMgdGhpcyBkb3duc3RyZWFtLgotICogU291cmNlIHBhZCBjYXBzIG11c3QgYmUgc2V0IHdoZW4gdGhpcyBpcyBjYWxsZWQuCi0gKgotICogSWYgQGZyYW1lJ3Mgb3V0X2J1ZmZlciBpcyBzZXQsIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHN1YnNlcXVlbnQgZnJhbWUgZGF0YS4KLSAqIE90aGVyd2lzZSwgQHNpemUgc2FtcGxlcyB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGlucHV0IGFuZCB1c2VkIGZvciBvdXRwdXQsCi0gKiBhbmQgdGhlIG91dHB1dCdzIG1ldGFkYXRhICh0aW1lc3RhbXBzIGV0Yykgd2lsbCBiZSB0YWtlbiBhcyAob3B0aW9uYWxseSkKLSAqIHNldCBieSB0aGUgc3ViY2xhc3Mgb24gQGZyYW1lJ3MgKGlucHV0KSBidWZmZXIgKHdoaWNoIGlzIG90aGVyd2lzZQotICogaWdub3JlZCBmb3IgYW55IGJ1dCB0aGUgYWJvdmUgcHVycG9zZS9pbmZvcm1hdGlvbikuCi0gKgotICogTm90ZSB0aGF0IHRoZSBsYXR0ZXIgYnVmZmVyIGlzIGludmFsaWRhdGVkIGJ5IHRoaXMgY2FsbCwgd2hlcmVhcyB0aGUKLSAqIGNhbGxlciByZXRhaW5zIG93bmVyc2hpcCBvZiBAZnJhbWUuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiB0aGF0IHNob3VsZCBiZSBlc2NhbGF0ZWQgdG8gY2FsbGVyIChvZiBjYWxsZXIpCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUsCi0gICAgZ2ludCBzaXplKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmcmFtZSAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmcmFtZS0+YnVmZmVyICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpemUgPiAwIHx8IGZyYW1lLT5vdXRfYnVmZmVyLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKSA+PSBzaXplLAotICAgICAgR1NUX0ZMT1dfRVJST1IpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImZpbmlzaGVkIGZyYW1lIGF0IG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICIsICIKLSAgICAgICJmbHVzaGluZyBzaXplICVkIiwgZnJhbWUtPm9mZnNldCwgc2l6ZSk7Ci0KLSAgLyogc29tZSBvbmUtdGltZSBzdGFydC11cCAqLwotICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPmZyYW1lY291bnQgPT0gMCkpIHsKLSAgICBnc3RfYmFzZV9wYXJzZV9jaGVja19zZWVrYWJpbGl0eSAocGFyc2UpOwotICAgIGdzdF9iYXNlX3BhcnNlX2NoZWNrX3Vwc3RyZWFtIChwYXJzZSk7Ci0gIH0KLQotICBwYXJzZS0+cHJpdi0+Zmx1c2hlZCArPSBzaXplOwotCi0gIGlmIChwYXJzZS0+cHJpdi0+c2Nhbm5pbmcgJiYgZnJhbWUtPmJ1ZmZlcikgewotICAgIGlmICghcGFyc2UtPnByaXYtPnNjYW5uZWRfZnJhbWUpIHsKLSAgICAgIHBhcnNlLT5wcml2LT5zY2FubmVkX2ZyYW1lID0gZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfY29weSAoZnJhbWUpOwotICAgIH0KLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLQotICAvKiBlaXRoZXIgUFVTSCBvciBQVUxMIG1vZGUgYXJyYW5nZXMgZm9yIGFkYXB0ZXIgZGF0YSAqLwotICAvKiBlbnN1cmUgb3V0cHV0IGJ1ZmZlciAqLwotICBpZiAoIWZyYW1lLT5vdXRfYnVmZmVyKSB7Ci0gICAgR3N0QnVmZmVyICpzcmMsICpkZXN0OwotCi0gICAgZnJhbWUtPm91dF9idWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIHNpemUpOwotICAgIGRlc3QgPSBmcmFtZS0+b3V0X2J1ZmZlcjsKLSAgICBzcmMgPSBmcmFtZS0+YnVmZmVyOwotICAgIEdTVF9CVUZGRVJfUFRTIChkZXN0KSA9IEdTVF9CVUZGRVJfUFRTIChzcmMpOwotICAgIEdTVF9CVUZGRVJfRFRTIChkZXN0KSA9IEdTVF9CVUZGRVJfRFRTIChzcmMpOwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChkZXN0KSA9IEdTVF9CVUZGRVJfT0ZGU0VUIChzcmMpOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGRlc3QpID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoc3JjKTsKLSAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGRlc3QpID0gR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChzcmMpOwotICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHUyAoZGVzdCkgPSBHU1RfTUlOSV9PQkpFQ1RfRkxBR1MgKHNyYyk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBzaXplKTsKLSAgfQotCi0gIC8qIHVzZSBhcyBpbnB1dCBmb3Igc3Vic2VxdWVudCBwcm9jZXNzaW5nICovCi0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJmZyYW1lLT5idWZmZXIsIGZyYW1lLT5vdXRfYnVmZmVyKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZnJhbWUtPm91dF9idWZmZXIpOwotICBmcmFtZS0+b3V0X2J1ZmZlciA9IE5VTEw7Ci0KLSAgLyogbWFyayBpbnB1dCBzaXplIGNvbnN1bWVkICovCi0gIGZyYW1lLT5zaXplID0gc2l6ZTsKLQotICAvKiBzdWJjbGFzcyBtaWdodCBxdWV1ZSBmcmFtZXMvZGF0YSBpbnRlcm5hbGx5IGlmIGl0IG5lZWRzIG1vcmUKLSAgICogZnJhbWVzIHRvIGRlY2lkZSBvbiB0aGUgZm9ybWF0LCBvciBtaWdodCByZXF1ZXN0IHVzIHRvIHF1ZXVlIGhlcmUuICovCi0gIGlmIChmcmFtZS0+ZmxhZ3MgJiBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0RST1ApIHsKLSAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZmcmFtZS0+YnVmZmVyLCBOVUxMKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0gZWxzZSBpZiAoZnJhbWUtPmZsYWdzICYgR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19RVUVVRSkgewotICAgIEdzdEJhc2VQYXJzZUZyYW1lICpjb3B5OwotCi0gICAgY29weSA9IGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2NvcHkgKGZyYW1lKTsKLSAgICBjb3B5LT5mbGFncyAmPSB+R1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19RVUVVRTsKLSAgICBnc3RfYmFzZV9wYXJzZV9xdWV1ZV9mcmFtZSAocGFyc2UsIGNvcHkpOwotICAgIGdvdG8gZXhpdDsKLSAgfQotCi0gIHJldCA9IGdzdF9iYXNlX3BhcnNlX2hhbmRsZV9hbmRfcHVzaF9mcmFtZSAocGFyc2UsIGZyYW1lKTsKLQotZXhpdDoKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogZ3N0X2Jhc2VfcGFyc2VfZHJhaW46Ci0gKgotICogRHJhaW5zIHRoZSBhZGFwdGVyIHVudGlsIGl0IGlzIGVtcHR5LiBJdCBkZWNyZWFzZXMgdGhlIG1pbl9mcmFtZV9zaXplIHRvCi0gKiBtYXRjaCB0aGUgY3VycmVudCBhZGFwdGVyIHNpemUgYW5kIGNhbGxzIGNoYWluIG1ldGhvZCB1bnRpbCB0aGUgYWRhcHRlcgotICogaXMgZW1wdGllZCBvciBjaGFpbiByZXR1cm5zIHdpdGggZXJyb3IuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9wYXJzZV9kcmFpbiAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIGd1aW50IGF2YWlsOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZHJhaW5pbmciKTsKLSAgcGFyc2UtPnByaXYtPmRyYWluID0gVFJVRTsKLQotICBmb3IgKDs7KSB7Ci0gICAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKLSAgICBpZiAoIWF2YWlsKQotICAgICAgYnJlYWs7Ci0KLSAgICBpZiAoZ3N0X2Jhc2VfcGFyc2VfY2hhaW4gKHBhcnNlLT5zaW5rcGFkLCBHU1RfT0JKRUNUX0NBU1QgKHBhcnNlKSwKLSAgICAgICAgICAgIE5VTEwpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvKiBub3RoaW5nIGNoYW5nZWQsIG1heWJlIGR1ZSB0byB0cnVuY2F0ZWQgZnJhbWU7IGJyZWFrIGluZmluaXRlIGxvb3AgKi8KLSAgICBpZiAoYXZhaWwgPT0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChwYXJzZS0+cHJpdi0+YWRhcHRlcikpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibm8gY2hhbmdlIGR1cmluZyBkcmFpbmluZzsgZmx1c2hpbmciKTsKLSAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChwYXJzZS0+cHJpdi0+YWRhcHRlcik7Ci0gICAgfQotICB9Ci0KLSAgcGFyc2UtPnByaXYtPmRyYWluID0gRkFMU0U7Ci19Ci0KLS8qIGdzdF9iYXNlX3BhcnNlX3NlbmRfYnVmZmVycwotICoKLSAqIFNlbmRzIGJ1ZmZlcnMgY29sbGVjdGVkIGluIHNlbmRfYnVmZmVycyBkb3duc3RyZWFtLCBhbmQgZW5zdXJlcyB0aGF0IGxpc3QKLSAqIGlzIGVtcHR5IGF0IHRoZSBlbmQgKGVycm9ycyBvciBub3QpLgotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfcGFyc2Vfc2VuZF9idWZmZXJzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR1NMaXN0ICpzZW5kID0gTlVMTDsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGdib29sZWFuIGZpcnN0ID0gVFJVRTsKLQotICBzZW5kID0gcGFyc2UtPnByaXYtPmJ1ZmZlcnNfc2VuZDsKLQotICAvKiBzZW5kIGJ1ZmZlcnMgKi8KLSAgd2hpbGUgKHNlbmQpIHsKLSAgICBidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHNlbmQtPmRhdGEpOwotICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInB1c2hpbmcgYnVmZmVyICVwLCBkdHMgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIsIHB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIsIG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsIGJ1ZiwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVFMgKGJ1ZikpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAoYnVmKSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpLCBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhlIGZpcnN0IGJ1ZmZlciBpcyBhbHdheXMgRElTQ09OVC4gSWYgd2Ugc3BsaXQKLSAgICAgKiBHT1BzIGluc2lkZSB0aGUgcGFyc2VyIHRoaXMgaXMgb3RoZXJ3aXNlIG5vdCBndWFyYW50ZWVkICovCi0gICAgaWYgKGZpcnN0KSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICAgIGZpcnN0ID0gRkFMU0U7Ci0gICAgfQotCi0gICAgLyogaXRlcmF0ZSBvdXRwdXQgcXVldWUgYW4gcHVzaCBkb3duc3RyZWFtICovCi0gICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYXJzZS0+c3JjcGFkLCBidWYpOwotICAgIHNlbmQgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChzZW5kLCBzZW5kKTsKLQotICAgIC8qIGNsZWFyIGFueSBsZWZ0b3ZlciBpZiBlcnJvciAqLwotICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKSB7Ci0gICAgICB3aGlsZSAoc2VuZCkgewotICAgICAgICBidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHNlbmQtPmRhdGEpOwotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICBzZW5kID0gZ19zbGlzdF9kZWxldGVfbGluayAoc2VuZCwgc2VuZCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfc2VuZCA9IHNlbmQ7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogZ3N0X2Jhc2VfcGFyc2Vfc3RhcnRfZnJhZ21lbnQ6Ci0gKgotICogUHJlcGFyZXMgZm9yIHByb2Nlc3NpbmcgYSByZXZlcnNlIHBsYXliYWNrIChmb3J3YXJkKSBmcmFnbWVudAotICogYnkgKHJlKXNldHRpbmcgcHJvcGVyIHN0YXRlIHZhcmlhYmxlcy4KLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3BhcnNlX3N0YXJ0X2ZyYWdtZW50IChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAic3RhcnRpbmcgZnJhZ21lbnQiKTsKLQotICAvKiBpbnZhbGlkYXRlIHNvIG5vIGZhbGwtYmFjayB0aW1lc3RhbXBpbmcgaXMgcGVyZm9ybWVkOwotICAgKiBvayBpZiB0YWtlbiBmcm9tIHN1YmNsYXNzIG9yIHVwc3RyZWFtICovCi0gIHBhcnNlLT5wcml2LT5uZXh0X3B0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHBhcnNlLT5wcml2LT5wcmV2X3B0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHBhcnNlLT5wcml2LT5uZXh0X2R0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHBhcnNlLT5wcml2LT5wcmV2X2R0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHBhcnNlLT5wcml2LT5wcmV2X2R0c19mcm9tX3B0cyA9IEZBTFNFOwotICAvKiBwcmV2ZW50IGl0IGhhbmdpbmcgYXJvdW5kIHN0b3AgYWxsIHRoZSB0aW1lICovCi0gIHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgLyogbWFyayBuZXh0IHJ1biAqLwotICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0KLSAgLyogaGVhZCBvZiBwcmV2aW91cyBmcmFnbWVudCBpcyBub3cgcGVuZGluZyB0YWlsIG9mIGN1cnJlbnQgZnJhZ21lbnQgKi8KLSAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZyA9IHBhcnNlLT5wcml2LT5idWZmZXJzX2hlYWQ7Ci0gIHBhcnNlLT5wcml2LT5idWZmZXJzX2hlYWQgPSBOVUxMOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotCi0vKiBnc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhZ21lbnQ6Ci0gKgotICogUHJvY2Vzc2VzIGEgcmV2ZXJzZSBwbGF5YmFjayAoZm9yd2FyZCkgZnJhZ21lbnQ6Ci0gKiAtIGFwcGVuZCBoZWFkIG9mIGxhc3QgZnJhZ21lbnQgdGhhdCB3YXMgc2tpcHBlZCB0byBjdXJyZW50IGZyYWdtZW50IGRhdGEKLSAqIC0gZHJhaW4gdGhlIHJlc3VsdGluZyBjdXJyZW50IGZyYWdtZW50IGRhdGEgKGkuZS4gcmVwZWF0ZWQgY2hhaW4pCi0gKiAtIGFkZCB0aW1lL2R1cmF0aW9uIChpZiBuZWVkZWQpIHRvIGZyYW1lcyBxdWV1ZWQgYnkgY2hhaW4KLSAqIC0gcHVzaCBxdWV1ZWQgZGF0YQotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYWdtZW50IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgZ2Jvb2xlYW4gcHJldl9oZWFkKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2Jvb2xlYW4gc2Vlbl9rZXkgPSBGQUxTRSwgc2Vlbl9kZWx0YSA9IEZBTFNFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImZpbmlzaGluZyBmcmFnbWVudCIpOwotCi0gIC8qIHJlc3RvcmUgb3JkZXIgKi8KLSAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZyA9IGdfc2xpc3RfcmV2ZXJzZSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcGVuZGluZyk7Ci0gIHdoaWxlIChwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nKSB7Ci0gICAgYnVmID0gR1NUX0JVRkZFUl9DQVNUIChwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nLT5kYXRhKTsKLSAgICBpZiAocHJldl9oZWFkKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJhZGRpbmcgcGVuZGluZyBidWZmZXIgKHNpemUgJSIgR19HU0laRV9GT1JNQVQgIikiLAotICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpOwotICAgICAgZ3N0X2FkYXB0ZXJfcHVzaCAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIGJ1Zik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImRpc2NhcmRpbmcgaGVhZCBidWZmZXIiKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgfQotICAgIHBhcnNlLT5wcml2LT5idWZmZXJzX3BlbmRpbmcgPQotICAgICAgICBnX3NsaXN0X2RlbGV0ZV9saW5rIChwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nLAotICAgICAgICBwYXJzZS0+cHJpdi0+YnVmZmVyc19wZW5kaW5nKTsKLSAgfQotCi0gIC8qIGNoYWluIGxvb2tzIGZvciBmcmFtZXMgYW5kIHF1ZXVlcyByZXN1bHRpbmcgb25lcyAoaW4gc3RlYWQgb2YgcHVzaGluZykgKi8KLSAgLyogaW5pdGlhbCBza2lwcGVkIGRhdGEgaXMgYWRkZWQgdG8gYnVmZmVyc19wZW5kaW5nICovCi0gIGdzdF9iYXNlX3BhcnNlX2RyYWluIChwYXJzZSk7Ci0KLSAgaWYgKHBhcnNlLT5wcml2LT5idWZmZXJzX3NlbmQpIHsKLSAgICBidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHBhcnNlLT5wcml2LT5idWZmZXJzX3NlbmQtPmRhdGEpOwotICAgIHNlZW5fa2V5IHw9ICFHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgfQotCi0gIC8qIGFkZCBtZXRhZGF0YSAoaWYgbmVlZGVkIHRvIHF1ZXVlZCBidWZmZXJzICovCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImxhc3QgdGltZXN0YW1wOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChwYXJzZS0+cHJpdi0+bGFzdF9wdHMpKTsKLSAgd2hpbGUgKHBhcnNlLT5wcml2LT5idWZmZXJzX3F1ZXVlZCkgewotICAgIGJ1ZiA9IEdTVF9CVUZGRVJfQ0FTVCAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkLT5kYXRhKTsKLQotICAgIC8qIG5vIHRvdWNoaW5nIGlmIHVwc3RyZWFtIG9yIHBhcnNpbmcgcHJvdmlkZWQgdGltZSAqLwotICAgIGlmIChHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoYnVmKSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiYnVmZmVyIGhhcyB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAoYnVmKSkpOwotICAgIH0gZWxzZSBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmKSkgewotICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+cHJpdi0+bGFzdF9wdHMpKSB7Ci0gICAgICAgIGlmIChHX0xJS0VMWSAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA8PSBwYXJzZS0+cHJpdi0+bGFzdF9wdHMpKQotICAgICAgICAgIHBhcnNlLT5wcml2LT5sYXN0X3B0cyAtPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyc2UtPnByaXYtPmxhc3RfcHRzID0gMDsKLSAgICAgICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSBwYXJzZS0+cHJpdi0+bGFzdF9wdHM7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImFwcGxpZWQgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAoYnVmKSkpOwotICAgICAgfQotICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+cHJpdi0+bGFzdF9kdHMpKSB7Ci0gICAgICAgIGlmIChHX0xJS0VMWSAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA8PSBwYXJzZS0+cHJpdi0+bGFzdF9kdHMpKQotICAgICAgICAgIHBhcnNlLT5wcml2LT5sYXN0X2R0cyAtPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcGFyc2UtPnByaXYtPmxhc3RfZHRzID0gMDsKLSAgICAgICAgR1NUX0JVRkZFUl9EVFMgKGJ1ZikgPSBwYXJzZS0+cHJpdi0+bGFzdF9kdHM7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImFwcGxpZWQgZHRzICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFRTIChidWYpKSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5vIGlkZWEsIHZlcnkgYmFkICovCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiY291bGQgbm90IGRldGVybWluZSB0aW1lIGZvciBidWZmZXIiKTsKLSAgICB9Ci0KLSAgICBwYXJzZS0+cHJpdi0+bGFzdF9wdHMgPSBHU1RfQlVGRkVSX1BUUyAoYnVmKTsKLSAgICBwYXJzZS0+cHJpdi0+bGFzdF9kdHMgPSBHU1RfQlVGRkVSX0RUUyAoYnVmKTsKLQotICAgIC8qIHJldmVyc2Ugb3JkZXIgZm9yIGFzY2VuZGluZyBzZW5kaW5nICovCi0gICAgLyogc2VuZCBkb3duc3RyZWFtIGF0IGtleWZyYW1lIG5vdCBwcmVjZWRlZCBieSBhIGtleWZyYW1lCi0gICAgICogKGUuZy4gdGhhdCBzaG91bGQgaWRlbnRpZnkgc3RhcnQgb2YgY29sbGVjdGlvbiBvZiBJRFIgbmFscykgKi8KLSAgICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpIHsKLSAgICAgIGlmIChzZWVuX2tleSkgewotICAgICAgICByZXQgPSBnc3RfYmFzZV9wYXJzZV9zZW5kX2J1ZmZlcnMgKHBhcnNlKTsKLSAgICAgICAgLyogaWYgYSBwcm9ibGVtLCB0aHJvdyBhbGwgdG8gc2VuZGluZyAqLwotICAgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfc2VuZCA9Ci0gICAgICAgICAgICAgIGdfc2xpc3RfcmV2ZXJzZSAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkKTsKLSAgICAgICAgICBwYXJzZS0+cHJpdi0+YnVmZmVyc19xdWV1ZWQgPSBOVUxMOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHNlZW5fa2V5ID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBzZWVuX2RlbHRhID0gVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgc2Vlbl9rZXkgPSBUUlVFOwotICAgIH0KLQotICAgIHBhcnNlLT5wcml2LT5idWZmZXJzX3NlbmQgPQotICAgICAgICBnX3NsaXN0X3ByZXBlbmQgKHBhcnNlLT5wcml2LT5idWZmZXJzX3NlbmQsIGJ1Zik7Ci0gICAgcGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkID0KLSAgICAgICAgZ19zbGlzdF9kZWxldGVfbGluayAocGFyc2UtPnByaXYtPmJ1ZmZlcnNfcXVldWVkLAotICAgICAgICBwYXJzZS0+cHJpdi0+YnVmZmVyc19xdWV1ZWQpOwotICB9Ci0KLSAgLyogYXVkaW8gbWF5IGhhdmUgYWxsIG1hcmtlZCBhcyBrZXlmcmFtZSwgc28gYXJyYW5nZSB0byBzZW5kIGhlcmUuIEFsc28KLSAgICogd2UgbWlnaHQgaGF2ZSBlbmRlZCB0aGUgbG9vcCBhYm92ZSBvbiBhIGtleWZyYW1lLCBpbiB3aGljaCBjYXNlIHdlCi0gICAqIHNob3VsZCAqLwotICBpZiAoIXNlZW5fZGVsdGEgfHwgc2Vlbl9rZXkpCi0gICAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2Vfc2VuZF9idWZmZXJzIChwYXJzZSk7Ci0KLSAgLyogYW55IHRyYWlsaW5nIHVudXNlZCBubyBsb25nZXIgdXNhYmxlIChpZGVhbGx5IG5vbmUpICovCi0gIGlmIChHX1VOTElLRUxZIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImRpc2NhcmRpbmcgJSIgR19HU0laRV9GT1JNQVQgIiB0cmFpbGluZyBieXRlcyIsCi0gICAgICAgIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocGFyc2UtPnByaXYtPmFkYXB0ZXIpKTsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAocGFyc2UtPnByaXYtPmFkYXB0ZXIpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogc21hbGwgaGVscGVyIHRoYXQgY2hlY2tzIHdoZXRoZXIgd2UgaGF2ZSBiZWVuIHRyeWluZyB0byByZXN5bmMgdG9vIGxvbmcgKi8KLXN0YXRpYyBpbmxpbmUgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfc3luYyAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+ZGlzY29udCAmJgotICAgICAgICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgLSBwYXJzZS0+cHJpdi0+c3luY19vZmZzZXQgPiAyICogMTAyNCAqIDEwMjQpKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBhcnNlLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJGYWlsZWQgdG8gcGFyc2Ugc3RyZWFtIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfcGFyc2VfcHJvY2Vzc19zdHJlYW1oZWFkZXIgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBHc3RDYXBzICpjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cjsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAocGFyc2UpKTsKLSAgaWYgKGNhcHMgPT0gTlVMTCkKLSAgICBnb3RvIG5vdGZvdW5kOwotCi0gIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHIsICJzdHJlYW1oZWFkZXIiKTsKLSAgaWYgKHZhbHVlID09IE5VTEwpCi0gICAgZ290byBub3Rmb3VuZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkZvdW5kIHN0cmVhbWhlYWRlciBmaWVsZCBvbiBpbnB1dCBjYXBzIik7Ci0KLSAgaWYgKEdTVF9WQUxVRV9IT0xEU19BUlJBWSAodmFsdWUpKSB7Ci0gICAgZ2ludCBpOwotICAgIGdzaXplIGxlbiA9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAodmFsdWUpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9Ci0gICAgICAgICAgZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKHZhbHVlLCBpKSk7Ci0gICAgICByZXQgPQotICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX2NoYWluIChHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAocGFyc2UpLAotICAgICAgICAgIEdTVF9PQkpFQ1RfQ0FTVCAocGFyc2UpLCBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSk7Ci0gICAgfQotCi0gIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0JVRkZFUiAodmFsdWUpKSB7Ci0gICAgR3N0QnVmZmVyICpidWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAodmFsdWUpOwotICAgIHJldCA9Ci0gICAgICAgIGdzdF9iYXNlX3BhcnNlX2NoYWluIChHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAocGFyc2UpLAotICAgICAgICBHU1RfT0JKRUNUX0NBU1QgKHBhcnNlKSwgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiByZXQ7Ci0KLW5vdGZvdW5kOgotICB7Ci0gICAgaWYgKGNhcHMpIHsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIk5vIHN0cmVhbWhlYWRlciBvbiBjYXBzIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9wYXJzZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgKmJjbGFzczsKLSAgR3N0QmFzZVBhcnNlICpwYXJzZTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0Rmxvd1JldHVybiBvbGRfcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdEJ1ZmZlciAqdG1wYnVmID0gTlVMTDsKLSAgZ3VpbnQgZnNpemUgPSAxOwotICBnaW50IHNraXAgPSAtMTsKLSAgZ3VpbnQgbWluX3NpemUsIGF2OwotICBHc3RDbG9ja1RpbWUgcHRzLCBkdHM7Ci0KLSAgcGFyc2UgPSBHU1RfQkFTRV9QQVJTRSAocGFyZW50KTsKLSAgYmNsYXNzID0gR1NUX0JBU0VfUEFSU0VfR0VUX0NMQVNTIChwYXJzZSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcmVudCwgImNoYWluIik7Ci0KLSAgLyogZWFybHkgb3V0IGZvciBzcGVlZCwgaWYgd2UgbmVlZCB0byBza2lwICovCi0gIGlmIChidWZmZXIgJiYgR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWZmZXIpKQotICAgIHBhcnNlLT5wcml2LT5za2lwID0gMDsKLSAgaWYgKHBhcnNlLT5wcml2LT5za2lwID4gMCkgewotICAgIGdzaXplIGJzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLSAgICBHU1RfREVCVUcgKCJHb3QgJSIgR19HU0laRV9GT1JNQVQgIiBidWZmZXIsIG5lZWQgdG8gc2tpcCAldSIsIGJzaXplLAotICAgICAgICBwYXJzZS0+cHJpdi0+c2tpcCk7Ci0gICAgaWYgKHBhcnNlLT5wcml2LT5za2lwID49IGJzaXplKSB7Ci0gICAgICBwYXJzZS0+cHJpdi0+c2tpcCAtPSBic2l6ZTsKLSAgICAgIEdTVF9ERUJVRyAoIkFsbCB0aGUgYnVmZmVyIGlzIHNraXBwZWQiKTsKLSAgICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgKz0gYnNpemU7Ci0gICAgICBwYXJzZS0+cHJpdi0+c3luY19vZmZzZXQgPSBwYXJzZS0+cHJpdi0+b2Zmc2V0OwotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0KLSAgICBidWZmZXIgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1ZmZlcik7Ci0gICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZmZlciwgcGFyc2UtPnByaXYtPnNraXAsIGJzaXplIC0gcGFyc2UtPnByaXYtPnNraXApOwotICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgKz0gcGFyc2UtPnByaXYtPnNraXA7Ci0gICAgR1NUX0RFQlVHICgiRG9uZSBza2lwcGluZywgd2UgaGF2ZSAldSBsZWZ0IG9uIHRoaXMgYnVmZmVyIiwKLSAgICAgICAgKHVuc2lnbmVkKSAoYnNpemUgLSBwYXJzZS0+cHJpdi0+c2tpcCkpOwotICAgIHBhcnNlLT5wcml2LT5za2lwID0gMDsKLSAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPnByaXYtPmZpcnN0X2J1ZmZlcikpIHsKLSAgICBwYXJzZS0+cHJpdi0+Zmlyc3RfYnVmZmVyID0gRkFMU0U7Ci0gICAgaWYgKCFHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpKSB7Ci0gICAgICAvKiB0aGlzIHN0cmVhbSBoYXMgbm8gaGVhZGVyIGJ1ZmZlcnMsIGNoZWNrIGlmIHdlIGp1c3QgcHJlcGVuZCB0aGUKLSAgICAgICAqIHN0cmVhbWhlYWRlciBmcm9tIGNhcHMgdG8gdGhlIHN0cmVhbSAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJMb29raW5nIGZvciBzdHJlYW1oZWFkZXIgZmllbGQgb24gY2FwcyB0byAiCi0gICAgICAgICAgInByZXBlbmQgdG8gdGhlIHN0cmVhbSIpOwotICAgICAgZ3N0X2Jhc2VfcGFyc2VfcHJvY2Vzc19zdHJlYW1oZWFkZXIgKHBhcnNlKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJTdHJlYW0gaGFzIGhlYWRlciBidWZmZXJzLCBub3QgcHJlcGVuZGluZyAiCi0gICAgICAgICAgInN0cmVhbWhlYWRlciBmcm9tIGNhcHMiKTsKLSAgICB9Ci0gIH0KLQotICBpZiAocGFyc2UtPnByaXYtPmRldGVjdGluZykgewotICAgIEdzdEJ1ZmZlciAqZGV0ZWN0X2J1ZjsKLQotICAgIGlmIChwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnNfc2l6ZSA9PSAwKSB7Ci0gICAgICBkZXRlY3RfYnVmID0gZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdMaXN0ICpsOwotICAgICAgZ3VpbnQgb2Zmc2V0ID0gMDsKLQotICAgICAgZGV0ZWN0X2J1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gICAgICBmb3IgKGwgPSBwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICAgIGdzaXplIHRtcHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChsLT5kYXRhKTsKLQotICAgICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAoZGV0ZWN0X2J1ZiwgR1NUX0JVRkZFUl9DQVNUIChsLT5kYXRhKSwKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfQ09QWV9NRU1PUlksIG9mZnNldCwgdG1wc2l6ZSk7Ci0gICAgICAgIG9mZnNldCArPSB0bXBzaXplOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKGRldGVjdF9idWYsIGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX01FTU9SWSwKLSAgICAgICAgICAgIG9mZnNldCwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSk7Ci0gICAgfQotCi0gICAgcmV0ID0gYmNsYXNzLT5kZXRlY3QgKHBhcnNlLCBkZXRlY3RfYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChkZXRlY3RfYnVmKTsKLQotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIEdMaXN0ICpsOwotCi0gICAgICAvKiBEZXRlY3RlZCBzb21ldGhpbmcgKi8KLSAgICAgIHBhcnNlLT5wcml2LT5kZXRlY3RpbmcgPSBGQUxTRTsKLQotICAgICAgZm9yIChsID0gcGFyc2UtPnByaXYtPmRldGVjdF9idWZmZXJzOyBsOyBsID0gbC0+bmV4dCkgewotICAgICAgICBpZiAocmV0ID09IEdTVF9GTE9XX09LICYmICFwYXJzZS0+cHJpdi0+Zmx1c2hpbmcpCi0gICAgICAgICAgcmV0ID0KLSAgICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfY2hhaW4gKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChwYXJzZSksCi0gICAgICAgICAgICAgIHBhcmVudCwgR1NUX0JVRkZFUl9DQVNUIChsLT5kYXRhKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChHU1RfQlVGRkVSX0NBU1QgKGwtPmRhdGEpKTsKLSAgICAgIH0KLSAgICAgIGdfbGlzdF9mcmVlIChwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnMpOwotICAgICAgcGFyc2UtPnByaXYtPmRldGVjdF9idWZmZXJzID0gTlVMTDsKLSAgICAgIHBhcnNlLT5wcml2LT5kZXRlY3RfYnVmZmVyc19zaXplID0gMDsKLQotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgfQotCi0gICAgICAvKiBIYW5kbGUgdGhlIGN1cnJlbnQgYnVmZmVyICovCi0gICAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpIHsKLSAgICAgIC8qIFN0aWxsIGRldGVjdGluZywgYXBwZW5kIGJ1ZmZlciBvciBlcnJvciBvdXQgaWYgZHJhaW5pbmcgKi8KLQotICAgICAgaWYgKHBhcnNlLT5wcml2LT5kcmFpbikgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkRyYWluaW5nIGJ1dCBkaWQgbm90IGRldGVjdCBmb3JtYXQgeWV0Iik7Ci0gICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgICAgIH0gZWxzZSBpZiAocGFyc2UtPnByaXYtPmZsdXNoaW5nKSB7Ci0gICAgICAgIGdfbGlzdF9mb3JlYWNoIChwYXJzZS0+cHJpdi0+ZGV0ZWN0X2J1ZmZlcnMsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwKLSAgICAgICAgICAgIE5VTEwpOwotICAgICAgICBnX2xpc3RfZnJlZSAocGFyc2UtPnByaXYtPmRldGVjdF9idWZmZXJzKTsKLSAgICAgICAgcGFyc2UtPnByaXYtPmRldGVjdF9idWZmZXJzID0gTlVMTDsKLSAgICAgICAgcGFyc2UtPnByaXYtPmRldGVjdF9idWZmZXJzX3NpemUgPSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcGFyc2UtPnByaXYtPmRldGVjdF9idWZmZXJzID0KLSAgICAgICAgICAgIGdfbGlzdF9hcHBlbmQgKHBhcnNlLT5wcml2LT5kZXRlY3RfYnVmZmVycywgYnVmZmVyKTsKLSAgICAgICAgcGFyc2UtPnByaXYtPmRldGVjdF9idWZmZXJzX3NpemUgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBTb21ldGhpbmcgd2VudCB3cm9uZywgc3ViY2xhc3MgcmVzcG9uc2libGUgZm9yIGVycm9yIHJlcG9ydGluZyAqLwotICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICAvKiBBbmQgbm93IGhhbmRsZSB0aGUgY3VycmVudCBidWZmZXIgaWYgZGV0ZWN0aW9uIHdvcmtlZCAqLwotICB9Ci0KLSAgaWYgKEdfTElLRUxZIChidWZmZXIpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAiYnVmZmVyIHNpemU6ICUiIEdfR1NJWkVfRk9STUFUICIsIG9mZnNldCA9ICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAiLCBkdHMgJSIgR1NUX1RJTUVfRk9STUFUICIsIHB0cyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlciksIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChidWZmZXIpKSk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIXBhcnNlLT5wcml2LT5kaXNhYmxlX3Bhc3N0aHJvdWdoCi0gICAgICAgICAgICAmJiBwYXJzZS0+cHJpdi0+cGFzc3Rocm91Z2gpKSB7Ci0gICAgICBHc3RCYXNlUGFyc2VGcmFtZSBmcmFtZTsKLQotICAgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCAoJmZyYW1lKTsKLSAgICAgIGZyYW1lLmJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmZmVyKTsKLSAgICAgIHJldCA9IGdzdF9iYXNlX3BhcnNlX3B1c2hfZnJhbWUgKHBhcnNlLCAmZnJhbWUpOwotICAgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSAoJmZyYW1lKTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIGlmIChHX1VOTElLRUxZIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKSkpIHsKLSAgICAgIC8qIHVwc3RyZWFtIGZlZWRpbmcgdXMgaW4gcmV2ZXJzZSBwbGF5YmFjazsKLSAgICAgICAqIGZpbmlzaCBwcmV2aW91cyBmcmFnbWVudCBhbmQgc3RhcnQgbmV3IHVwb24gRElTQ09OVCAqLwotICAgICAgaWYgKHBhcnNlLT5zZWdtZW50LnJhdGUgPCAwLjApIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJidWZmZXIgc3RhcnRzIG5ldyByZXZlcnNlIHBsYXliYWNrIGZyYWdtZW50Iik7Ci0gICAgICAgIHJldCA9IGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFnbWVudCAocGFyc2UsIFRSVUUpOwotICAgICAgICBnc3RfYmFzZV9wYXJzZV9zdGFydF9mcmFnbWVudCAocGFyc2UpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogZGlzY29udCBpbiB0aGUgc3RyZWFtLCBkcmFpbiBhbmQgbWFyayBkaXNjb250IGZvciBuZXh0IG91dHB1dCAqLwotICAgICAgICBnc3RfYmFzZV9wYXJzZV9kcmFpbiAocGFyc2UpOwotICAgICAgICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9hZGFwdGVyX3B1c2ggKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBidWZmZXIpOwotICB9Ci0KLSAgLyogUGFyc2UgYW5kIHB1c2ggYXMgbWFueSBmcmFtZXMgYXMgcG9zc2libGUgKi8KLSAgLyogU3RvcCBlaXRoZXIgd2hlbiBhZGFwdGVyIGlzIGVtcHR5IG9yIHdlIGFyZSBmbHVzaGluZyAqLwotICB3aGlsZSAoIXBhcnNlLT5wcml2LT5mbHVzaGluZykgewotICAgIGdpbnQgZmx1c2ggPSAwOwotICAgIGdib29sZWFuIHVwZGF0ZWRfcHJldl9wdHMgPSBGQUxTRTsKLQotICAgIC8qIG5vdGU6IGlmIHN1YmNsYXNzIGluZGljYXRlcyBNQVggZnNpemUsCi0gICAgICogdGhpcyB3aWxsIG5vdCBsaWtlbHkgYmUgYXZhaWxhYmxlIGFueXdheSAuLi4gKi8KLSAgICBtaW5fc2l6ZSA9IE1BWCAocGFyc2UtPnByaXYtPm1pbl9mcmFtZV9zaXplLCBmc2l6ZSk7Ci0gICAgYXYgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBhcnNlLT5wcml2LT5hZGFwdGVyKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChwYXJzZS0+cHJpdi0+ZHJhaW4pKSB7Ci0gICAgICBtaW5fc2l6ZSA9IGF2OwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJkcmFpbmluZywgZGF0YSBsZWZ0OiAlZCIsIG1pbl9zaXplKTsKLSAgICAgIGlmIChHX1VOTElLRUxZICghbWluX3NpemUpKSB7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBDb2xsZWN0IGF0IGxlYXN0IG1pbl9mcmFtZV9zaXplIGJ5dGVzICovCi0gICAgaWYgKGF2IDwgbWluX3NpemUpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibm90IGVub3VnaCBkYXRhIGF2YWlsYWJsZSAob25seSAlZCBieXRlcykiLCBhdik7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotCi0gICAgLyogbW92ZSBhbG9uZyB3aXRoIHVwc3RyZWFtIHRpbWVzdGFtcCAoaWYgYW55KSwKLSAgICAgKiBidXQgaW50ZXJwb2xhdGUgaW4gYmV0d2VlbiAqLwotICAgIHB0cyA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChwYXJzZS0+cHJpdi0+YWRhcHRlciwgTlVMTCk7Ci0gICAgZHRzID0gZ3N0X2FkYXB0ZXJfcHJldl9kdHMgKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBOVUxMKTsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHB0cykgJiYgKHBhcnNlLT5wcml2LT5wcmV2X3B0cyAhPSBwdHMpKSB7Ci0gICAgICBwYXJzZS0+cHJpdi0+cHJldl9wdHMgPSBwYXJzZS0+cHJpdi0+bmV4dF9wdHMgPSBwdHM7Ci0gICAgICB1cGRhdGVkX3ByZXZfcHRzID0gVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR0cykgJiYgKHBhcnNlLT5wcml2LT5wcmV2X2R0cyAhPSBkdHMpKSB7Ci0gICAgICBwYXJzZS0+cHJpdi0+cHJldl9kdHMgPSBwYXJzZS0+cHJpdi0+bmV4dF9kdHMgPSBkdHM7Ci0gICAgICBwYXJzZS0+cHJpdi0+cHJldl9kdHNfZnJvbV9wdHMgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICAvKiB3ZSBjYW4gbWVzcyB3aXRoLCBlcm0gaW50ZXJwb2xhdGUsIHRpbWVzdGFtcHMsCi0gICAgICogYW5kIGluY29taW5nIHN0dWZmIGhhcyBQVFMgYnV0IG5vIERUUyBzZWVuIHNvIGZhciwKLSAgICAgKiB0aGVuIHBpY2sgdXAgRFRTIGZyb20gUFRTIGFuZCBob3BlIGZvciB0aGUgYmVzdCAuLi4gKi8KLSAgICBpZiAocGFyc2UtPnByaXYtPmluZmVyX3RzICYmCi0gICAgICAgIHBhcnNlLT5wcml2LT5wdHNfaW50ZXJwb2xhdGUgJiYKLSAgICAgICAgIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdHMpICYmCi0gICAgICAgICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5wcml2LT5wcmV2X2R0cykKLSAgICAgICAgICAgIHx8IChwYXJzZS0+cHJpdi0+cHJldl9kdHNfZnJvbV9wdHMgJiYgdXBkYXRlZF9wcmV2X3B0cykpCi0gICAgICAgICYmIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwdHMpKSB7Ci0gICAgICBwYXJzZS0+cHJpdi0+cHJldl9kdHMgPSBwYXJzZS0+cHJpdi0+bmV4dF9kdHMgPSBwdHM7Ci0gICAgICBwYXJzZS0+cHJpdi0+cHJldl9kdHNfZnJvbV9wdHMgPSBUUlVFOwotICAgIH0KLQotICAgIC8qIGFsd2F5cyBwYXNzIGFsbCBhdmFpbGFibGUgZGF0YSAqLwotICAgIHRtcGJ1ZiA9IGdzdF9hZGFwdGVyX2dldF9idWZmZXIgKHBhcnNlLT5wcml2LT5hZGFwdGVyLCBhdik7Ci0KLSAgICAvKiBhbHJlYWR5IGluZm9ybSBzdWJjbGFzcyB3aGF0IHRpbWVzdGFtcHMgd2UgaGF2ZSBwbGFubmVkLAotICAgICAqIGF0IGxlYXN0IGlmIHByb3ZpZGVkIGJ5IHRpbWUtYmFzZWQgdXBzdHJlYW0gKi8KLSAgICBpZiAocGFyc2UtPnByaXYtPnVwc3RyZWFtX2Zvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgIHRtcGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodG1wYnVmKTsKLSAgICAgIEdTVF9CVUZGRVJfUFRTICh0bXBidWYpID0gcGFyc2UtPnByaXYtPm5leHRfcHRzOwotICAgICAgR1NUX0JVRkZFUl9EVFMgKHRtcGJ1ZikgPSBwYXJzZS0+cHJpdi0+bmV4dF9kdHM7Ci0gICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OICh0bXBidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICB9Ci0KLSAgICAvKiBrZWVwIHRoZSBhZGFwdGVyIG1hcHBlZCwgc28ga2VlcCB0cmFjayBvZiB3aGF0IGhhcyB0byBiZSBmbHVzaGVkICovCi0gICAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2VfaGFuZGxlX2J1ZmZlciAocGFyc2UsIHRtcGJ1ZiwgJnNraXAsICZmbHVzaCk7Ci0gICAgdG1wYnVmID0gTlVMTDsKLQotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQpIHsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgaWYgKHNraXAgPT0gMCAmJiBmbHVzaCA9PSAwKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJub3RoaW5nIHNraXBwZWQgYW5kIG5vIGZyYW1lcyBmaW5pc2hlZCwgIgotICAgICAgICAgICJicmVha2luZyB0byBnZXQgbW9yZSBkYXRhIik7Ci0gICAgICAvKiBpZ25vcmUgdGhpcyByZXR1cm4gYXMgaXQgcHJvZHVjZWQgbm8gZGF0YSAqLwotICAgICAgcmV0ID0gb2xkX3JldDsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgb2xkX3JldCA9IHJldDsKLSAgfQotCi1kb25lOgotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJjaGFpbiBsZWF2aW5nIik7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIHB1bGwgQHNpemUgYnl0ZXMgYXQgY3VycmVudCBvZmZzZXQsCi0gKiBpLmUuIGF0IGxlYXN0IHRyeSB0byBhbmQgcG9zc2libHkgcmV0dXJuIGEgc2hvcnRlciBidWZmZXIgaWYgbmVhciB0aGUgZW5kICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfcGFyc2VfcHVsbF9yYW5nZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIGd1aW50IHNpemUsCi0gICAgR3N0QnVmZmVyICoqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmZmVyICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICAvKiBDYWNoaW5nIGhlcmUgYWN0dWFsbHkgbWFrZXMgbXVjaCBsZXNzIGRpZmZlcmVuY2UgdGhhbiBvbmUgd291bGQgZXhwZWN0LgotICAgKiBXZSBkbyBpdCBtYWlubHkgdG8gYXZvaWQgcHVsbGluZyBidWZmZXJzIG9mIDEgYnl0ZSBhbGwgdGhlIHRpbWUgKi8KLSAgaWYgKHBhcnNlLT5wcml2LT5jYWNoZSkgewotICAgIGdpbnQ2NCBjYWNoZV9vZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVCAocGFyc2UtPnByaXYtPmNhY2hlKTsKLSAgICBnaW50IGNhY2hlX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChwYXJzZS0+cHJpdi0+Y2FjaGUpOwotCi0gICAgaWYgKGNhY2hlX29mZnNldCA8PSBwYXJzZS0+cHJpdi0+b2Zmc2V0ICYmCi0gICAgICAgIChwYXJzZS0+cHJpdi0+b2Zmc2V0ICsgc2l6ZSkgPD0gKGNhY2hlX29mZnNldCArIGNhY2hlX3NpemUpKSB7Ci0gICAgICAqYnVmZmVyID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAocGFyc2UtPnByaXYtPmNhY2hlLCBHU1RfQlVGRkVSX0NPUFlfQUxMLAotICAgICAgICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgLSBjYWNoZV9vZmZzZXQsIHNpemUpOwotICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKCpidWZmZXIpID0gcGFyc2UtPnByaXYtPm9mZnNldDsKLSAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9Ci0gICAgLyogbm90IGVub3VnaCBkYXRhIGluIHRoZSBjYWNoZSwgZnJlZSBjYWNoZSBhbmQgZ2V0IGEgbmV3IG9uZSAqLwotICAgIGdzdF9idWZmZXJfdW5yZWYgKHBhcnNlLT5wcml2LT5jYWNoZSk7Ci0gICAgcGFyc2UtPnByaXYtPmNhY2hlID0gTlVMTDsKLSAgfQotCi0gIC8qIHJlZmlsbCB0aGUgY2FjaGUgKi8KLSAgcmV0ID0KLSAgICAgIGdzdF9wYWRfcHVsbF9yYW5nZSAocGFyc2UtPnNpbmtwYWQsIHBhcnNlLT5wcml2LT5vZmZzZXQsIE1BWCAoc2l6ZSwKLSAgICAgICAgICA2NCAqIDEwMjQpLCAmcGFyc2UtPnByaXYtPmNhY2hlKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgIHBhcnNlLT5wcml2LT5jYWNoZSA9IE5VTEw7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIGlmIChnc3RfYnVmZmVyX2dldF9zaXplIChwYXJzZS0+cHJpdi0+Y2FjaGUpID49IHNpemUpIHsKLSAgICAqYnVmZmVyID0KLSAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAocGFyc2UtPnByaXYtPmNhY2hlLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCAwLAotICAgICAgICBzaXplKTsKLSAgICBHU1RfQlVGRkVSX09GRlNFVCAoKmJ1ZmZlcikgPSBwYXJzZS0+cHJpdi0+b2Zmc2V0OwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIC8qIE5vdCBwb3NzaWJsZSB0byBnZXQgZW5vdWdoIGRhdGEsIHRyeSBhIGxhc3QgdGltZSB3aXRoCi0gICAqIHJlcXVlc3RpbmcgZXhhY3RseSB0aGUgc2l6ZSB3ZSBuZWVkICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKHBhcnNlLT5wcml2LT5jYWNoZSk7Ci0gIHBhcnNlLT5wcml2LT5jYWNoZSA9IE5VTEw7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChwYXJzZS0+c2lua3BhZCwgcGFyc2UtPnByaXYtPm9mZnNldCwgc2l6ZSwKLSAgICAgICZwYXJzZS0+cHJpdi0+Y2FjaGUpOwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInB1bGxfcmFuZ2UgcmV0dXJuZWQgJWQiLCByZXQpOwotICAgICpidWZmZXIgPSBOVUxMOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAocGFyc2UtPnByaXYtPmNhY2hlKSA8IHNpemUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlJldHVybmluZyBzaG9ydCBidWZmZXIgYXQgb2Zmc2V0ICUiCi0gICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIjogd2FudGVkICV1IGJ5dGVzLCBnb3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICAgIHBhcnNlLT5wcml2LT5vZmZzZXQsIHNpemUsIGdzdF9idWZmZXJfZ2V0X3NpemUgKHBhcnNlLT5wcml2LT5jYWNoZSkpOwotCi0gICAgKmJ1ZmZlciA9IHBhcnNlLT5wcml2LT5jYWNoZTsKLSAgICBwYXJzZS0+cHJpdi0+Y2FjaGUgPSBOVUxMOwotCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci0KLSAgKmJ1ZmZlciA9Ci0gICAgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChwYXJzZS0+cHJpdi0+Y2FjaGUsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIHNpemUpOwotICBHU1RfQlVGRkVSX09GRlNFVCAoKmJ1ZmZlcikgPSBwYXJzZS0+cHJpdi0+b2Zmc2V0OwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3BhcnNlX2hhbmRsZV9wcmV2aW91c19mcmFnbWVudCAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIGdpbnQ2NCBvZmZzZXQgPSAwOwotICBHc3RDbG9ja1RpbWUgdHMgPSAwOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJmcmFnbWVudCBlbmRlZDsgbGFzdF90cyA9ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgbGFzdF9vZmZzZXQgPSAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChwYXJzZS0+cHJpdi0+bGFzdF9wdHMpLCBwYXJzZS0+cHJpdi0+bGFzdF9vZmZzZXQpOwotCi0gIGlmICghcGFyc2UtPnByaXYtPmxhc3Rfb2Zmc2V0Ci0gICAgICB8fCBwYXJzZS0+cHJpdi0+bGFzdF9wdHMgPD0gcGFyc2UtPnNlZ21lbnQuc3RhcnQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInBhc3Qgc3RhcnQgb2Ygc2VnbWVudCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHBhcnNlLT5zZWdtZW50LnN0YXJ0KSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIGdvdG8gZXhpdDsKLSAgfQotCi0gIC8qIGxhc3QgZnJhZ21lbnQgc3RhcnRlZCBhdCBsYXN0X29mZnNldCAvIGxhc3RfdHM7Ci0gICAqIHNlZWsgYmFjayAxMHMgY2FwcGVkIGF0IDFNQiAqLwotICBpZiAocGFyc2UtPnByaXYtPmxhc3RfcHRzID49IDEwICogR1NUX1NFQ09ORCkKLSAgICB0cyA9IHBhcnNlLT5wcml2LT5sYXN0X3B0cyAtIDEwICogR1NUX1NFQ09ORDsKLSAgLyogaWYgd2UgYXJlIGV4YWN0IG5vdywgd2Ugd2lsbCBiZSBtb3JlIHNvIGdvaW5nIGJhY2t3YXJkcyAqLwotICBpZiAocGFyc2UtPnByaXYtPmV4YWN0X3Bvc2l0aW9uKSB7Ci0gICAgb2Zmc2V0ID0gZ3N0X2Jhc2VfcGFyc2VfZmluZF9vZmZzZXQgKHBhcnNlLCB0cywgVFJVRSwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKCFnc3RfYmFzZV9wYXJzZV9jb252ZXJ0IChwYXJzZSwgR1NUX0ZPUk1BVF9USU1FLCB0cywKLSAgICAgICAgICAgIEdTVF9GT1JNQVRfQllURVMsICZvZmZzZXQpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbnZlcnNpb24gZmFpbGVkLCBvbmx5IEJZVEUgYmFzZWQiKTsKLSAgICB9Ci0gIH0KLSAgb2Zmc2V0ID0gQ0xBTVAgKG9mZnNldCwgcGFyc2UtPnByaXYtPmxhc3Rfb2Zmc2V0IC0gMTAyNCAqIDEwMjQsCi0gICAgICBwYXJzZS0+cHJpdi0+bGFzdF9vZmZzZXQgLSAxMDI0KTsKLSAgb2Zmc2V0ID0gTUFYICgwLCBvZmZzZXQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibmV4dCBmcmFnbWVudCBmcm9tIG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICBvZmZzZXQpOwotICBwYXJzZS0+cHJpdi0+b2Zmc2V0ID0gb2Zmc2V0OwotCi0gIHJldCA9IGdzdF9iYXNlX3BhcnNlX3B1bGxfcmFuZ2UgKHBhcnNlLCBwYXJzZS0+cHJpdi0+bGFzdF9vZmZzZXQgLSBvZmZzZXQsCi0gICAgICAmYnVmZmVyKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIGV4aXQ7Ci0KLSAgLyogb2Zmc2V0IHdpbGwgaW5jcmVhc2UgYWdhaW4gYXMgZnJhZ21lbnQgaXMgcHJvY2Vzc2VkL3BhcnNlZCAqLwotICBwYXJzZS0+cHJpdi0+bGFzdF9vZmZzZXQgPSBvZmZzZXQ7Ci0KLSAgZ3N0X2Jhc2VfcGFyc2Vfc3RhcnRfZnJhZ21lbnQgKHBhcnNlKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIGJ1ZmZlcik7Ci0gIHJldCA9IGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFnbWVudCAocGFyc2UsIFRSVUUpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gZXhpdDsKLQotICAvKiBmb3JjZSBwcmV2aW91cyBmcmFnbWVudCAqLwotICBwYXJzZS0+cHJpdi0+b2Zmc2V0ID0gLTE7Ci0KLWV4aXQ6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIFBVTEwgbW9kZToKLSAqIHB1bGwgYW5kIHNjYW4gZm9yIG5leHQgZnJhbWUgc3RhcnRpbmcgZnJvbSBjdXJyZW50IG9mZnNldAotICogYWp1c3RzIHN5bmMsIGRyYWluIGFuZCBvZmZzZXQgZ29pbmcgYWxvbmcgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9wYXJzZV9zY2FuX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0QmFzZVBhcnNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50IGZzaXplLCBtaW5fc2l6ZTsKLSAgZ2ludCBmbHVzaGVkID0gMDsKLSAgZ2ludCBza2lwID0gMDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJzY2FubmluZyBmb3IgZnJhbWUgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICIgKCUjIiBHX0dJTlQ2NF9NT0RJRklFUiAieCkiLCBwYXJzZS0+cHJpdi0+b2Zmc2V0LCBwYXJzZS0+cHJpdi0+b2Zmc2V0KTsKLQotICAvKiBsZXQncyBtYWtlIHRoaXMgZWZmaWNpZW50IGZvciBhbGwgc3ViY2xhc3Mgb25jZSBhbmQgZm9yIGFsbDsKLSAgICogbWF5YmUgaXQgZG9lcyBub3QgbmVlZCB0aGlzIG11Y2gsIGJ1dCBpbiB0aGUgbGF0dGVyIGNhc2UsIHdlIGtub3cgd2UgYXJlCi0gICAqIGluIHB1bGwgbW9kZSBoZXJlIGFuZCBtaWdodCBhcyB3ZWxsIHRyeSB0byByZWFkIGFuZCBzdXBwbHkgbW9yZSBhbnl3YXkKLSAgICogKHNvIGRvZXMgdGhlIGJ1ZmZlciBjYWNoaW5nIG1lY2hhbmlzbSkgKi8KLSAgZnNpemUgPSA2NCAqIDEwMjQ7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBtaW5fc2l6ZSA9IE1BWCAocGFyc2UtPnByaXYtPm1pbl9mcmFtZV9zaXplLCBmc2l6ZSk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJyZWFkaW5nIGJ1ZmZlciBzaXplICV1IiwgbWluX3NpemUpOwotCi0gICAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2VfcHVsbF9yYW5nZSAocGFyc2UsIG1pbl9zaXplLCAmYnVmZmVyKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBkb25lOwotCi0gICAgLyogaWYgd2UgZ290IGEgc2hvcnQgcmVhZCwgaW5mb3JtIHN1YmNsYXNzIHdlIGFyZSBkcmFpbmluZyBsZWZ0b3ZlcgotICAgICAqIGFuZCBubyBtb3JlIGlzIHRvIGJlIGV4cGVjdGVkICovCi0gICAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPCBtaW5fc2l6ZSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiLi4uIGJ1dCBkaWQgbm90IGdldCB0aGF0OyBtYXJrZWQgZHJhaW5pbmciKTsKLSAgICAgIHBhcnNlLT5wcml2LT5kcmFpbiA9IFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKHBhcnNlLT5wcml2LT5kZXRlY3RpbmcpIHsKLSAgICAgIHJldCA9IGtsYXNzLT5kZXRlY3QgKHBhcnNlLCBidWZmZXIpOwotICAgICAgaWYgKHJldCA9PSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCkgewotICAgICAgICAvKiBJZiBkcmFpbmluZyB3ZSBlcnJvciBvdXQsIG90aGVyd2lzZSByZXF1ZXN0IGEgYnVmZmVyCi0gICAgICAgICAqIHdpdGggNjRrYiBtb3JlICovCi0gICAgICAgIGlmIChwYXJzZS0+cHJpdi0+ZHJhaW4pIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhcnNlLCAiRmFpbGVkIHRvIGRldGVjdCBmb3JtYXQgYnV0IGRyYWluaW5nIik7Ci0gICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZzaXplICs9IDY0ICogMTAyNDsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChwYXJzZSwgImRldGVjdCgpIHJldHVybmVkICVzIiwKLSAgICAgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgIH0KLQotICAgICAgLyogRWxzZSBoYW5kbGUgdGhpcyBidWZmZXIgbm9ybWFsbHkgKi8KLSAgICB9Ci0KLSAgICByZXQgPSBnc3RfYmFzZV9wYXJzZV9oYW5kbGVfYnVmZmVyIChwYXJzZSwgYnVmZmVyLCAmc2tpcCwgJmZsdXNoZWQpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIC8qIElmIGEgbGFyZ2UgYW1vdW50IG9mIGRhdGEgd2FzIHJlcXVlc3RlZCB0byBiZSBza2lwcGVkLCBfaGFuZGxlX2J1ZmZlcgotICAgICAgIG1pZ2h0IGhhdmUgc2V0IHRoZSBwcml2LT5za2lwIGZsYWcgdG8gYW4gZXh0cmEgYW1vdW50IG9uIHRvcCBvZiBza2lwLgotICAgICAgIEluIHB1bGwgbW9kZSwgd2UgY2FuIGp1c3QgcHVsbCBmcm9tIHRoZSBuZXcgb2Zmc2V0IGRpcmVjdGx5LiAqLwotICAgIHBhcnNlLT5wcml2LT5vZmZzZXQgKz0gcGFyc2UtPnByaXYtPnNraXA7Ci0gICAgcGFyc2UtPnByaXYtPnNraXAgPSAwOwotCi0gICAgLyogc29tZXRoaW5nIGZsdXNoZWQgbWVhbnMgc29tZXRoaW5nIGhhcHBlbmVkLAotICAgICAqIGFuZCB3ZSBzaG91bGQgYmFpbCBvdXQgb2YgdGhpcyBsb29wIHNvIGFzIG5vdCB0byBvY2N1cHkKLSAgICAgKiB0aGUgdGFzayB0aHJlYWQgaW5kZWZpbml0ZWx5ICovCi0gICAgaWYgKGZsdXNoZWQpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImZyYW1lIGZpbmlzaGVkLCBicmVha2luZyBsb29wIik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgLyogbm90aGluZyBmbHVzaGVkLCBubyBza2lwIGFuZCBkcmFpbmluZywgc28gbm90aGluZyBsZWZ0IHRvIGRvICovCi0gICAgaWYgKCFza2lwICYmIHBhcnNlLT5wcml2LT5kcmFpbikgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAibm8gYWN0aXZpdHkgb3IgcmVzdWx0IHdoZW4gZHJhaW5pbmc7ICIKLSAgICAgICAgICAiYnJlYWtpbmcgbG9vcCBhbmQgbWFya2luZyBFT1MiKTsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvKiBvdGhlcndpc2UsIGdldCBzb21lIG1vcmUgZGF0YQotICAgICAqIG5vdGUgdGhhdCBpcyBjaGVja2VkIHRoaXMgZG9lcyBub3QgaGFwcGVuIGluZGVmaW5pdGVseSAqLwotICAgIGlmICghc2tpcCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZ2V0dGluZyBzb21lIG1vcmUgZGF0YSIpOwotICAgICAgZnNpemUgKz0gNjQgKiAxMDI0OwotICAgIH0KLSAgICBwYXJzZS0+cHJpdi0+ZHJhaW4gPSBGQUxTRTsKLSAgfQotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi0vKiBMb29wIHRoYXQgaXMgdXNlZCBpbiBwdWxsIG1vZGUgdG8gcmV0cmlldmUgZGF0YSBmcm9tIHVwc3RyZWFtICovCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2VfbG9vcCAoR3N0UGFkICogcGFkKQotewotICBHc3RCYXNlUGFyc2UgKnBhcnNlOwotICBHc3RCYXNlUGFyc2VDbGFzcyAqa2xhc3M7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgcGFyc2UgPSBHU1RfQkFTRV9QQVJTRSAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKLSAga2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1MgKHBhcnNlKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJFbnRlcmluZyBwYXJzZSBsb29wIik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHBhcnNlLT5wcml2LT5wdXNoX3N0cmVhbV9zdGFydCkpIHsKLSAgICBnY2hhciAqc3RyZWFtX2lkOwotICAgIEdzdEV2ZW50ICpldmVudDsKLQotICAgIHN0cmVhbV9pZCA9Ci0gICAgICAgIGdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZCAocGFyc2UtPnNyY3BhZCwgR1NUX0VMRU1FTlRfQ0FTVCAocGFyc2UpLAotICAgICAgICBOVUxMKTsKLQotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKHN0cmVhbV9pZCk7Ci0gICAgZ3N0X2V2ZW50X3NldF9ncm91cF9pZCAoZXZlbnQsIGdzdF91dGlsX2dyb3VwX2lkX25leHQgKCkpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJQdXNoaW5nIFNUUkVBTV9TVEFSVCIpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPnNyY3BhZCwgZXZlbnQpOwotICAgIHBhcnNlLT5wcml2LT5wdXNoX3N0cmVhbV9zdGFydCA9IEZBTFNFOwotICAgIGdfZnJlZSAoc3RyZWFtX2lkKTsKLSAgfQotCi0gIC8qIHJldmVyc2UgcGxheWJhY2s6Ci0gICAqIGZpcnN0IGZyYWdtZW50IChjbG9zZXN0IHRvIHN0b3AgdGltZSkgaXMgaGFuZGxlZCBub3JtYWxseSBiZWxvdywKLSAgICogdGhlbiB3ZSBwdWxsIGluIGZyYWdtZW50cyBnb2luZyBiYWNrd2FyZHMgKi8KLSAgaWYgKHBhcnNlLT5zZWdtZW50LnJhdGUgPCAwLjApIHsKLSAgICAvKiBjaGVjayBpZiB3ZSBqdW1wZWQgYmFjayB0byBhIHByZXZpb3VzIGZyYWdtZW50LAotICAgICAqIHdoaWNoIGlzIGEgcG9zdC1maXJzdCBmcmFnbWVudCAqLwotICAgIGlmIChwYXJzZS0+cHJpdi0+b2Zmc2V0IDwgMCkgewotICAgICAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2VfaGFuZGxlX3ByZXZpb3VzX2ZyYWdtZW50IChwYXJzZSk7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotICB9Ci0KLSAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2Vfc2Nhbl9mcmFtZSAocGFyc2UsIGtsYXNzKTsKLQotICAvKiBlYXQgZXhwZWN0ZWQgZW9zIHNpZ25hbGxpbmcgcGFzdCBzZWdtZW50IGluIHJldmVyc2UgcGxheWJhY2sgKi8KLSAgaWYgKHBhcnNlLT5zZWdtZW50LnJhdGUgPCAwLjAgJiYgcmV0ID09IEdTVF9GTE9XX0VPUyAmJgotICAgICAgcGFyc2UtPnNlZ21lbnQucG9zaXRpb24gPj0gcGFyc2UtPnNlZ21lbnQuc3RvcCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZG93bnN0cmVhbSBoYXMgcmVhY2hlZCBlbmQgb2Ygc2VnbWVudCIpOwotICAgIC8qIHB1c2ggd2hhdCB3YXMgYWNjdW11bGF0ZWQgZHVyaW5nIGxvb3AgcnVuICovCi0gICAgZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYWdtZW50IChwYXJzZSwgRkFMU0UpOwotICAgIC8qIGZvcmNlIHByZXZpb3VzIGZyYWdtZW50ICovCi0gICAgcGFyc2UtPnByaXYtPm9mZnNldCA9IC0xOwotICAgIGdvdG8gZW9zOwotICB9Ci0KLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIGRvbmU7Ci0KLWRvbmU6Ci0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfRU9TKQotICAgIGdvdG8gZW9zOwotICBlbHNlIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBwYXVzZTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwYXJzZSk7Ci0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLWVvczoKLSAgewotICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImVvcyIpOwotICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICB9Ci1wYXVzZToKLSAgewotICAgIGdib29sZWFuIHB1c2hfZW9zID0gRkFMU0U7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInBhdXNpbmcgdGFzaywgcmVhc29uICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocGFyc2UtPnNpbmtwYWQpOwotCi0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIGhhbmRsZSBlbmQtb2Ytc3RyZWFtL3NlZ21lbnQgKi8KLSAgICAgIGlmIChwYXJzZS0+c2VnbWVudC5mbGFncyAmIEdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVCkgewotICAgICAgICBnaW50NjQgc3RvcDsKLQotICAgICAgICBpZiAoKHN0b3AgPSBwYXJzZS0+c2VnbWVudC5zdG9wKSA9PSAtMSkKLSAgICAgICAgICBzdG9wID0gcGFyc2UtPnNlZ21lbnQuZHVyYXRpb247Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZW5kaW5nIHNlZ21lbnRfZG9uZSIpOwotCi0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZQotICAgICAgICAgICAgKEdTVF9FTEVNRU5UX0NBU1QgKHBhcnNlKSwKLSAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUgKEdTVF9PQkpFQ1RfQ0FTVCAocGFyc2UpLAotICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgc3RvcCkpOwotICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhcnNlLT5zcmNwYWQsCi0gICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX0ZPUk1BVF9USU1FLCBzdG9wKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBJZiB3ZSBTVElMTCBoYXZlIHplcm8gZnJhbWVzIHByb2Nlc3NlZCwgZmlyZSBhbiBlcnJvciAqLwotICAgICAgICBpZiAocGFyc2UtPnByaXYtPmZyYW1lY291bnQgPT0gMCkgewotICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBXUk9OR19UWVBFLAotICAgICAgICAgICAgICAoIk5vIHZhbGlkIGZyYW1lcyBmb3VuZCBiZWZvcmUgZW5kIG9mIHN0cmVhbSIpLCAoTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2hfZW9zID0gVFJVRTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEIHx8IHJldCA8IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogZm9yIGZhdGFsIGVycm9ycyB3ZSBwb3N0IGFuIGVycm9yIG1lc3NhZ2UsIHdyb25nLXN0YXRlIGlzCi0gICAgICAgKiBub3QgZmF0YWwgYmVjYXVzZSBpdCBoYXBwZW5zIGR1ZSB0byBmbHVzaGVzIGFuZCBvbmx5IG1lYW5zCi0gICAgICAgKiB0aGF0IHdlIHNob3VsZCBzdG9wIG5vdy4gKi8KLSAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKHBhcnNlLCByZXQpOwotICAgICAgcHVzaF9lb3MgPSBUUlVFOwotICAgIH0KLSAgICBpZiAocHVzaF9lb3MpIHsKLSAgICAgIGlmIChwYXJzZS0+cHJpdi0+ZXN0aW1hdGVkX2R1cmF0aW9uIDw9IDApIHsKLSAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfdXBkYXRlX2R1cmF0aW9uIChwYXJzZSk7Ci0gICAgICB9Ci0gICAgICAvKiBQdXNoIHBlbmRpbmcgZXZlbnRzLCBpbmNsdWRpbmcgU0VHTUVOVCBldmVudHMgKi8KLSAgICAgIGdzdF9iYXNlX3BhcnNlX3B1c2hfcGVuZGluZ19ldmVudHMgKHBhcnNlKTsKLQotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgfQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcnNlKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3BhcnNlX3NpbmtfYWN0aXZhdGUgKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgR3N0U2NoZWR1bGluZ0ZsYWdzIHNjaGVkX2ZsYWdzOwotICBHc3RCYXNlUGFyc2UgKnBhcnNlOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHB1bGxfbW9kZTsKLQotICBwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2luayBhY3RpdmF0ZSIpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nICgpOwotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoc2lua3BhZCwgcXVlcnkpKSB7Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0gICAgZ290byBiYXNlcGFyc2VfcHVzaDsKLSAgfQotCi0gIGdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nIChxdWVyeSwgJnNjaGVkX2ZsYWdzLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICBwdWxsX21vZGUgPSBnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZSAocXVlcnksIEdTVF9QQURfTU9ERV9QVUxMKQotICAgICAgJiYgKChzY2hlZF9mbGFncyAmIEdTVF9TQ0hFRFVMSU5HX0ZMQUdfU0VFS0FCTEUpICE9IDApOwotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGlmICghcHVsbF9tb2RlKQotICAgIGdvdG8gYmFzZXBhcnNlX3B1c2g7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ0cnlpbmcgdG8gYWN0aXZhdGUgaW4gcHVsbCBtb2RlIik7Ci0gIGlmICghZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChzaW5rcGFkLCBHU1RfUEFEX01PREVfUFVMTCwgVFJVRSkpCi0gICAgZ290byBiYXNlcGFyc2VfcHVzaDsKLQotICBwYXJzZS0+cHJpdi0+cHVzaF9zdHJlYW1fc3RhcnQgPSBUUlVFOwotCi0gIHJldHVybiBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHNpbmtwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9iYXNlX3BhcnNlX2xvb3AsCi0gICAgICBzaW5rcGFkLCBOVUxMKTsKLSAgLyogZmFsbGJhY2sgKi8KLWJhc2VwYXJzZV9wdXNoOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ0cnlpbmcgdG8gYWN0aXZhdGUgaW4gcHVzaCBtb2RlIik7Ci0gICAgcmV0dXJuIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoc2lua3BhZCwgR1NUX1BBRF9NT0RFX1BVU0gsIFRSVUUpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfcGFyc2VfYWN0aXZhdGUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIEdzdEJhc2VQYXJzZUNsYXNzICprbGFzczsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImFjdGl2YXRlICVkIiwgYWN0aXZlKTsKLQotICBrbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0dFVF9DTEFTUyAocGFyc2UpOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBpZiAocGFyc2UtPnByaXYtPnBhZF9tb2RlID09IEdTVF9QQURfTU9ERV9OT05FICYmIGtsYXNzLT5zdGFydCkKLSAgICAgIHJlc3VsdCA9IGtsYXNzLT5zdGFydCAocGFyc2UpOwotCi0gICAgLyogSWYgdGhlIHN1YmNsYXNzIGltcGxlbWVudHMgOjpkZXRlY3Qgd2Ugd2FudCB0bwotICAgICAqIGNhbGwgaXQgZm9yIHRoZSBmaXJzdCBidWZmZXJzIG5vdyAqLwotICAgIHBhcnNlLT5wcml2LT5kZXRlY3RpbmcgPSAoa2xhc3MtPmRldGVjdCAhPSBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBXZSBtdXN0IG1ha2Ugc3VyZSBzdHJlYW1pbmcgaGFzIGZpbmlzaGVkIGJlZm9yZSByZXNldHRpbmcgdGhpbmdzCi0gICAgICogYW5kIGNhbGxpbmcgdGhlIDo6c3RvcCB2ZnVuYyAqLwotICAgIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHBhcnNlLT5zaW5rcGFkKTsKLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhcnNlLT5zaW5rcGFkKTsKLQotICAgIGlmIChwYXJzZS0+cHJpdi0+cGFkX21vZGUgIT0gR1NUX1BBRF9NT0RFX05PTkUgJiYga2xhc3MtPnN0b3ApCi0gICAgICByZXN1bHQgPSBrbGFzcy0+c3RvcCAocGFyc2UpOwotCi0gICAgcGFyc2UtPnByaXYtPnBhZF9tb2RlID0gR1NUX1BBRF9NT0RFX05PTkU7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJhY3RpdmF0ZSByZXR1cm46ICVkIiwgcmVzdWx0KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9wYXJzZV9zaW5rX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0gIEdzdEJhc2VQYXJzZSAqcGFyc2U7Ci0KLSAgcGFyc2UgPSBHU1RfQkFTRV9QQVJTRSAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNpbmsgJXNhY3RpdmF0ZSBpbiAlcyBtb2RlIiwKLSAgICAgIChhY3RpdmUpID8gIiIgOiAiZGUiLCBnc3RfcGFkX21vZGVfZ2V0X25hbWUgKG1vZGUpKTsKLQotICBpZiAoIWdzdF9iYXNlX3BhcnNlX2FjdGl2YXRlIChwYXJzZSwgYWN0aXZlKSkKLSAgICBnb3RvIGFjdGl2YXRlX2ZhaWxlZDsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVUxMOgotICAgICAgaWYgKGFjdGl2ZSkgewotICAgICAgICBwYXJzZS0+cHJpdi0+cGVuZGluZ19ldmVudHMgPQotICAgICAgICAgICAgZ19saXN0X3ByZXBlbmQgKHBhcnNlLT5wcml2LT5wZW5kaW5nX2V2ZW50cywKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnBhcnNlLT5zZWdtZW50KSk7Ci0gICAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBnc3RfcGFkX3N0b3BfdGFzayAocGFkKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgaWYgKHJlc3VsdCkKLSAgICBwYXJzZS0+cHJpdi0+cGFkX21vZGUgPSBhY3RpdmUgPyBtb2RlIDogR1NUX1BBRF9NT0RFX05PTkU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzaW5rIGFjdGl2YXRlIHJldHVybjogJWQiLCByZXN1bHQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1hY3RpdmF0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImFjdGl2YXRlIGZhaWxlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbjoKLSAqIEBwYXJzZTogI0dzdEJhc2VQYXJzZS4KLSAqIEBmbXQ6ICNHc3RGb3JtYXQuCi0gKiBAZHVyYXRpb246IGR1cmF0aW9uIHZhbHVlLgotICogQGludGVydmFsOiBob3cgb2Z0ZW4gdG8gdXBkYXRlIHRoZSBkdXJhdGlvbiBlc3RpbWF0ZSBiYXNlZCBvbiBiaXRyYXRlLCBvciAwLgotICoKLSAqIFNldHMgdGhlIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBtZWRpYS4gU3ViY2xhc3MgY2FuIHVzZSB0aGlzCi0gKiB3aGVuIGl0IGlzIGFibGUgdG8gZGV0ZXJtaW5lIGR1cmF0aW9uIGFuZC9vciBub3RpY2VzIGEgY2hhbmdlIGluIHRoZSBtZWRpYQotICogZHVyYXRpb24uICBBbHRlcm5hdGl2ZWx5LCBpZiBAaW50ZXJ2YWwgaXMgbm9uLXplcm8gKGRlZmF1bHQpLCB0aGVuIHN0cmVhbQotICogZHVyYXRpb24gaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiBlc3RpbWF0ZWQgYml0cmF0ZSwgYW5kIHVwZGF0ZWQgZXZlcnkgQGludGVydmFsCi0gKiBmcmFtZXMuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbiAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Rm9ybWF0IGZtdCwgZ2ludDY0IGR1cmF0aW9uLCBnaW50IGludGVydmFsKQotewotICBnX3JldHVybl9pZl9mYWlsIChwYXJzZSAhPSBOVUxMKTsKLQotICBpZiAocGFyc2UtPnByaXYtPnVwc3RyZWFtX2hhc19kdXJhdGlvbikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAidXNpbmcgdXBzdHJlYW0gZHVyYXRpb247IGRpc2NhcmRpbmcgdXBkYXRlIik7Ci0gICAgZ290byBleGl0OwotICB9Ci0KLSAgaWYgKGR1cmF0aW9uICE9IHBhcnNlLT5wcml2LT5kdXJhdGlvbikgewotICAgIEdzdE1lc3NhZ2UgKm07Ci0KLSAgICBtID0gZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQgKEdTVF9PQkpFQ1QgKHBhcnNlKSk7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAocGFyc2UpLCBtKTsKLQotICAgIC8qIFRPRE86IHdoYXQgYWJvdXQgZHVyYXRpb24gdGFnPyAqLwotICB9Ci0gIHBhcnNlLT5wcml2LT5kdXJhdGlvbiA9IGR1cmF0aW9uOwotICBwYXJzZS0+cHJpdi0+ZHVyYXRpb25fZm10ID0gZm10OwotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNldCBkdXJhdGlvbjogJSIgR19HSU5UNjRfRk9STUFULCBkdXJhdGlvbik7Ci0gIGlmIChmbXQgPT0gR1NUX0ZPUk1BVF9USU1FICYmIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdXJhdGlvbikpIHsKLSAgICBpZiAoaW50ZXJ2YWwgIT0gMCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ2YWxpZCBkdXJhdGlvbiBwcm92aWRlZCwgZGlzYWJsaW5nIGVzdGltYXRlIik7Ci0gICAgICBpbnRlcnZhbCA9IDA7Ci0gICAgfQotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2V0IHVwZGF0ZSBpbnRlcnZhbDogJWQiLCBpbnRlcnZhbCk7Ci0gIHBhcnNlLT5wcml2LT51cGRhdGVfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKLWV4aXQ6Ci0gIHJldHVybjsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9wYXJzZV9zZXRfYXZlcmFnZV9iaXRyYXRlOgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgotICogQGJpdHJhdGU6IGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3NlY29uZAotICoKLSAqIE9wdGlvbmFsbHkgc2V0cyB0aGUgYXZlcmFnZSBiaXRyYXRlIGRldGVjdGVkIGluIG1lZGlhIChpZiBub24temVybyksCi0gKiBlLmcuIGJhc2VkIG9uIG1ldGFkYXRhLCBhcyBpdCB3aWxsIGJlIHBvc3RlZCB0byB0aGUgYXBwbGljYXRpb24uCi0gKgotICogQnkgZGVmYXVsdCwgYW5ub3VuY2VkIGF2ZXJhZ2UgYml0cmF0ZSBpcyBlc3RpbWF0ZWQuIFRoZSBhdmVyYWdlIGJpdHJhdGUKLSAqIGlzIHVzZWQgdG8gZXN0aW1hdGUgdGhlIHRvdGFsIGR1cmF0aW9uIG9mIHRoZSBzdHJlYW0gYW5kIHRvIGVzdGltYXRlCi0gKiBhIHNlZWsgcG9zaXRpb24sIGlmIHRoZXJlJ3Mgbm8gaW5kZXggYW5kIHRoZSBmb3JtYXQgaXMgc3luY2FibGUKLSAqIChzZWUgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlKCkpLgotICovCi12b2lkCi1nc3RfYmFzZV9wYXJzZV9zZXRfYXZlcmFnZV9iaXRyYXRlIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgZ3VpbnQgYml0cmF0ZSkKLXsKLSAgcGFyc2UtPnByaXYtPmJpdHJhdGUgPSBiaXRyYXRlOwotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImJpdHJhdGUgJXUiLCBiaXRyYXRlKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemU6Ci0gKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCi0gKiBAbWluX3NpemU6IE1pbmltdW0gc2l6ZSBvZiB0aGUgZGF0YSB0aGF0IHRoaXMgYmFzZSBjbGFzcyBzaG91bGQgZ2l2ZSB0bwotICogICAgICAgICAgICBzdWJjbGFzcy4KLSAqCi0gKiBTdWJjbGFzcyBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gdGVsbCB0aGUgYmFzZSBjbGFzcyB0aGF0IGl0IG5lZWRzIHRvCi0gKiBnaXZlIGF0IGxlYXN0ICNtaW5fc2l6ZSBidWZmZXJzLgotICovCi12b2lkCi1nc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBndWludCBtaW5fc2l6ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAocGFyc2UgIT0gTlVMTCk7Ci0KLSAgcGFyc2UtPnByaXYtPm1pbl9mcmFtZV9zaXplID0gbWluX3NpemU7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInNldCBmcmFtZV9taW5fc2l6ZTogJWQiLCBtaW5fc2l6ZSk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGU6Ci0gKiBAcGFyc2U6IHRoZSAjR3N0QmFzZVBhcnNlIHRvIHNldAotICogQGZwc19udW06IGZyYW1lcyBwZXIgc2Vjb25kIChudW1lcmF0b3IpLgotICogQGZwc19kZW46IGZyYW1lcyBwZXIgc2Vjb25kIChkZW5vbWluYXRvcikuCi0gKiBAbGVhZF9pbjogZnJhbWVzIG5lZWRlZCBiZWZvcmUgYSBzZWdtZW50IGZvciBzdWJzZXF1ZW50IGRlY29kZQotICogQGxlYWRfb3V0OiBmcmFtZXMgbmVlZGVkIGFmdGVyIGEgc2VnbWVudAotICoKLSAqIElmIGZyYW1lcyBwZXIgc2Vjb25kIGlzIGNvbmZpZ3VyZWQsIHBhcnNlciBjYW4gdGFrZSBjYXJlIG9mIGJ1ZmZlciBkdXJhdGlvbgotICogYW5kIHRpbWVzdGFtcGluZy4gIFdoZW4gcGVyZm9ybWluZyBzZWdtZW50IGNsaXBwaW5nLCBvciBzZWVraW5nIHRvIGEgc3BlY2lmaWMKLSAqIGxvY2F0aW9uLCBhIGNvcnJlc3BvbmRpbmcgZGVjb2RlciBtaWdodCBuZWVkIGFuIGluaXRpYWwgQGxlYWRfaW4gYW5kIGEKLSAqIGZvbGxvd2luZyBAbGVhZF9vdXQgbnVtYmVyIG9mIGZyYW1lcyB0byBlbnN1cmUgdGhlIGRlc2lyZWQgc2VnbWVudCBpcwotICogZW50aXJlbHkgZmlsbGVkIHVwb24gZGVjb2RpbmcuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgZ3VpbnQgZnBzX251bSwKLSAgICBndWludCBmcHNfZGVuLCBndWludCBsZWFkX2luLCBndWludCBsZWFkX291dCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAocGFyc2UgIT0gTlVMTCk7Ci0KLSAgcGFyc2UtPnByaXYtPmZwc19udW0gPSBmcHNfbnVtOwotICBwYXJzZS0+cHJpdi0+ZnBzX2RlbiA9IGZwc19kZW47Ci0gIGlmICghZnBzX251bSB8fCAhZnBzX2RlbikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiaW52YWxpZCBmcHMgKCVkLyVkKSwgaWdub3JpbmcgcGFyYW1ldGVycyIsCi0gICAgICAgIGZwc19udW0sIGZwc19kZW4pOwotICAgIGZwc19udW0gPSBmcHNfZGVuID0gMDsKLSAgICBwYXJzZS0+cHJpdi0+ZnJhbWVfZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIHBhcnNlLT5wcml2LT5sZWFkX2luID0gcGFyc2UtPnByaXYtPmxlYWRfb3V0ID0gMDsKLSAgICBwYXJzZS0+cHJpdi0+bGVhZF9pbl90cyA9IHBhcnNlLT5wcml2LT5sZWFkX291dF90cyA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgcGFyc2UtPnByaXYtPmZyYW1lX2R1cmF0aW9uID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfU0VDT05ELCBmcHNfZGVuLCBmcHNfbnVtKTsKLSAgICBwYXJzZS0+cHJpdi0+bGVhZF9pbiA9IGxlYWRfaW47Ci0gICAgcGFyc2UtPnByaXYtPmxlYWRfb3V0ID0gbGVhZF9vdXQ7Ci0gICAgcGFyc2UtPnByaXYtPmxlYWRfaW5fdHMgPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdTVF9TRUNPTkQsIGZwc19kZW4gKiBsZWFkX2luLCBmcHNfbnVtKTsKLSAgICBwYXJzZS0+cHJpdi0+bGVhZF9vdXRfdHMgPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdTVF9TRUNPTkQsIGZwc19kZW4gKiBsZWFkX291dCwgZnBzX251bSk7Ci0gICAgLyogYWltIGZvciBhYm91dCAxLjVzIHRvIGVzdGltYXRlIGR1cmF0aW9uICovCi0gICAgaWYgKHBhcnNlLT5wcml2LT51cGRhdGVfaW50ZXJ2YWwgPCAwKSB7Ci0gICAgICBwYXJzZS0+cHJpdi0+dXBkYXRlX2ludGVydmFsID0gZnBzX251bSAqIDMgLyAoZnBzX2RlbiAqIDIpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZXN0aW1hdGVkIHVwZGF0ZSBpbnRlcnZhbCB0byAlZCBmcmFtZXMiLAotICAgICAgICAgIHBhcnNlLT5wcml2LT51cGRhdGVfaW50ZXJ2YWwpOwotICAgIH0KLSAgfQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJzZXQgZnBzOiAlZC8lZCA9PiBkdXJhdGlvbjogJSIgR19HSU5UNjRfRk9STUFUICIgbXMiLAotICAgICAgZnBzX251bSwgZnBzX2RlbiwgcGFyc2UtPnByaXYtPmZyYW1lX2R1cmF0aW9uIC8gR1NUX01TRUNPTkQpOwotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJzZXQgbGVhZCBpbjogJWQgZnJhbWVzID0gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIG1zLCAiCi0gICAgICAibGVhZCBvdXQ6ICVkIGZyYW1lcyA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBtcyIsCi0gICAgICBsZWFkX2luLCBwYXJzZS0+cHJpdi0+bGVhZF9pbl90cyAvIEdTVF9NU0VDT05ELAotICAgICAgbGVhZF9vdXQsIHBhcnNlLT5wcml2LT5sZWFkX291dF90cyAvIEdTVF9NU0VDT05EKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9wYXJzZV9zZXRfaGFzX3RpbWluZ19pbmZvOgotICogQHBhcnNlOiBhICNHc3RCYXNlUGFyc2UKLSAqIEBoYXNfdGltaW5nOiB3aGV0aGVyIGZyYW1lcyBjYXJyeSB0aW1pbmcgaW5mb3JtYXRpb24KLSAqCi0gKiBTZXQgaWYgZnJhbWVzIGNhcnJ5IHRpbWluZyBpbmZvcm1hdGlvbiB3aGljaCB0aGUgc3ViY2xhc3MgY2FuIChnZW5lcmFsbHkpCi0gKiBwYXJzZSBhbmQgcHJvdmlkZS4gIEluIHBhcnRpY3VsYXIsIGludHJpbnNpYyAocmF0aGVyIHRoYW4gZXN0aW1hdGVkKSB0aW1lCi0gKiBjYW4gYmUgb2J0YWluZWQgZm9sbG93aW5nIGEgc2Vlay4KLSAqLwotdm9pZAotZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbyAoR3N0QmFzZVBhcnNlICogcGFyc2UsIGdib29sZWFuIGhhc190aW1pbmcpCi17Ci0gIHBhcnNlLT5wcml2LT5oYXNfdGltaW5nX2luZm8gPSBoYXNfdGltaW5nOwotICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiaGFzX3RpbWluZzogJXMiLCAoaGFzX3RpbWluZykgPyAieWVzIiA6ICJubyIpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZToKLSAqIEBwYXJzZTogYSAjR3N0QmFzZVBhcnNlCi0gKiBAc3luY2FibGU6IHNldCBpZiBmcmFtZSBzdGFydHMgY2FuIGJlIGlkZW50aWZpZWQKLSAqCi0gKiBTZXQgaWYgZnJhbWUgc3RhcnRzIGNhbiBiZSBpZGVudGlmaWVkLiBUaGlzIGlzIHNldCBieSBkZWZhdWx0IGFuZAotICogZGV0ZXJtaW5lcyB3aGV0aGVyIHNlZWtpbmcgYmFzZWQgb24gYml0cmF0ZSBhdmVyYWdlcwotICogaXMgcG9zc2libGUgZm9yIGEgZm9ybWF0L3N0cmVhbS4KLSAqLwotdm9pZAotZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgZ2Jvb2xlYW4gc3luY2FibGUpCi17Ci0gIHBhcnNlLT5wcml2LT5zeW5jYWJsZSA9IHN5bmNhYmxlOwotICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAic3luY2FibGU6ICVzIiwgKHN5bmNhYmxlKSA/ICJ5ZXMiIDogIm5vIik7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoOgotICogQHBhcnNlOiBhICNHc3RCYXNlUGFyc2UKLSAqIEBwYXNzdGhyb3VnaDogJVRSVUUgaWYgcGFyc2VyIHNob3VsZCBydW4gaW4gcGFzc3Rocm91Z2ggbW9kZQotICoKLSAqIFNldCBpZiB0aGUgbmF0dXJlIG9mIHRoZSBmb3JtYXQgb3IgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBhbGxvdyAobXVjaCkKLSAqIHBhcnNpbmcsIGFuZCB0aGUgcGFyc2VyIHNob3VsZCBvcGVyYXRlIGluIHBhc3N0aHJvdWdoIG1vZGUgKHdoaWNoIG9ubHkKLSAqIGFwcGxpZXMgd2hlbiBvcGVyYXRpbmcgaW4gcHVzaCBtb2RlKS4gVGhhdCBpcywgaW5jb21pbmcgYnVmZmVycyBhcmUKLSAqIHB1c2hlZCB0aHJvdWdoIHVubW9kaWZpZWQsIGkuZS4gbm8gQGNoZWNrX3ZhbGlkX2ZyYW1lIG9yIEBwYXJzZV9mcmFtZQotICogY2FsbGJhY2tzIHdpbGwgYmUgaW52b2tlZCwgYnV0IEBwcmVfcHVzaF9mcmFtZSB3aWxsIHN0aWxsIGJlIGludm9rZWQsCi0gKiBzbyBzdWJjbGFzcyBjYW4gcGVyZm9ybSBhcyBtdWNoIG9yIGFzIGxpdHRsZSBpcyBhcHByb3ByaWF0ZSBmb3IKLSAqIHBhc3N0aHJvdWdoIHNlbWFudGljcyBpbiBAcHJlX3B1c2hfZnJhbWUuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaCAoR3N0QmFzZVBhcnNlICogcGFyc2UsIGdib29sZWFuIHBhc3N0aHJvdWdoKQotewotICBwYXJzZS0+cHJpdi0+cGFzc3Rocm91Z2ggPSBwYXNzdGhyb3VnaDsKLSAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgInBhc3N0aHJvdWdoOiAlcyIsIChwYXNzdGhyb3VnaCkgPyAieWVzIiA6ICJubyIpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX3NldF9wdHNfaW50ZXJwb2xhdGlvbjoKLSAqIEBwYXJzZTogYSAjR3N0QmFzZVBhcnNlCi0gKiBAcHRzX2ludGVycG9sYXRlOiAlVFJVRSBpZiBwYXJzZXIgc2hvdWxkIGludGVycG9sYXRlIFBUUyB0aW1lc3RhbXBzCi0gKgotICogQnkgZGVmYXVsdCwgdGhlIGJhc2UgY2xhc3Mgd2lsbCBndWVzcyBQVFMgdGltZXN0YW1wcyB1c2luZyBhIHNpbXBsZQotICogaW50ZXJwb2xhdGlvbiAocHJldmlvdXMgdGltZXN0YW1wICsgZHVyYXRpb24pLCB3aGljaCBpcyBpbmNvcnJlY3QgZm9yCi0gKiBkYXRhIHN0cmVhbXMgd2l0aCByZW9yZGVyaW5nLCB3aGVyZSBQVFMgY2FuIGdvIGJhY2t3YXJkLiBTdWItY2xhc3NlcwotICogaW1wbGVtZW50aW5nIHN1Y2ggZm9ybWF0cyBzaG91bGQgZGlzYWJsZSBQVFMgaW50ZXJwb2xhdGlvbi4KLSAqLwotdm9pZAotZ3N0X2Jhc2VfcGFyc2Vfc2V0X3B0c19pbnRlcnBvbGF0aW9uIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBnYm9vbGVhbiBwdHNfaW50ZXJwb2xhdGUpCi17Ci0gIHBhcnNlLT5wcml2LT5wdHNfaW50ZXJwb2xhdGUgPSBwdHNfaW50ZXJwb2xhdGU7Ci0gIEdTVF9JTkZPX09CSkVDVCAocGFyc2UsICJQVFMgaW50ZXJwb2xhdGlvbjogJXMiLAotICAgICAgKHB0c19pbnRlcnBvbGF0ZSkgPyAieWVzIiA6ICJubyIpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX3NldF9pbmZlcl90czoKLSAqIEBwYXJzZTogYSAjR3N0QmFzZVBhcnNlCi0gKiBAaW5mZXJfdHM6ICVUUlVFIGlmIHBhcnNlciBzaG91bGQgaW5mZXIgRFRTL1BUUyBmcm9tIGVhY2ggb3RoZXIKLSAqCi0gKiBCeSBkZWZhdWx0LCB0aGUgYmFzZSBjbGFzcyBtaWdodCB0cnkgdG8gaW5mZXIgUFRTIGZyb20gRFRTIGFuZCB2aWNlCi0gKiB2ZXJzYS4gIFdoaWxlIHRoaXMgaXMgZ2VuZXJhbGx5IGNvcnJlY3QgZm9yIGF1ZGlvIGRhdGEsIGl0IG1heSBub3QKLSAqIGJlIG90aGVyd2lzZS4gU3ViLWNsYXNzZXMgaW1wbGVtZW50aW5nIHN1Y2ggZm9ybWF0cyBzaG91bGQgZGlzYWJsZQotICogdGltZXN0YW1wIGluZmVycmluZy4KLSAqLwotdm9pZAotZ3N0X2Jhc2VfcGFyc2Vfc2V0X2luZmVyX3RzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgZ2Jvb2xlYW4gaW5mZXJfdHMpCi17Ci0gIHBhcnNlLT5wcml2LT5pbmZlcl90cyA9IGluZmVyX3RzOwotICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiVFMgaW5mZXJyaW5nOiAlcyIsIChpbmZlcl90cykgPyAieWVzIiA6ICJubyIpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3BhcnNlX3NldF9sYXRlbmN5OgotICogQHBhcnNlOiBhICNHc3RCYXNlUGFyc2UKLSAqIEBtaW5fbGF0ZW5jeTogbWluaW11bSBwYXJzZSBsYXRlbmN5Ci0gKiBAbWF4X2xhdGVuY3k6IG1heGltdW0gcGFyc2UgbGF0ZW5jeQotICoKLSAqIFNldHMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gKHdoaWNoIG1heSBsaWtlbHkgYmUgZXF1YWwpIGxhdGVuY3kgaW50cm9kdWNlZAotICogYnkgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIElmIHRoZXJlIGlzIHN1Y2ggYSBsYXRlbmN5LCB3aGljaCBkZXBlbmRzIG9uIHRoZQotICogcGFydGljdWxhciBwYXJzaW5nIG9mIHRoZSBmb3JtYXQsIGl0IHR5cGljYWxseSBjb3JyZXNwb25kcyB0byAxIGZyYW1lIGR1cmF0aW9uLgotICovCi12b2lkCi1nc3RfYmFzZV9wYXJzZV9zZXRfbGF0ZW5jeSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdENsb2NrVGltZSBtaW5fbGF0ZW5jeSwKLSAgICBHc3RDbG9ja1RpbWUgbWF4X2xhdGVuY3kpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1pbl9sYXRlbmN5ICE9IEdTVF9DTE9DS19USU1FX05PTkUpOwotICBnX3JldHVybl9pZl9mYWlsIChtaW5fbGF0ZW5jeSA8PSBtYXhfbGF0ZW5jeSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gIHBhcnNlLT5wcml2LT5taW5fbGF0ZW5jeSA9IG1pbl9sYXRlbmN5OwotICBwYXJzZS0+cHJpdi0+bWF4X2xhdGVuY3kgPSBtYXhfbGF0ZW5jeTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhcnNlKTsKLSAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgIm1pbi9tYXggbGF0ZW5jeSAlIiBHU1RfVElNRV9GT1JNQVQgIiwgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobWluX2xhdGVuY3kpLAotICAgICAgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuY3kpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9wYXJzZV9nZXRfZHVyYXRpb24gKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIEdzdENsb2NrVGltZSAqIGR1cmF0aW9uKQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZHVyYXRpb24gIT0gTlVMTCwgRkFMU0UpOwotCi0gICpkdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGlmIChwYXJzZS0+cHJpdi0+ZHVyYXRpb24gIT0gLTEgJiYgZm9ybWF0ID09IHBhcnNlLT5wcml2LT5kdXJhdGlvbl9mbXQpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJ1c2luZyBwcm92aWRlZCBkdXJhdGlvbiIpOwotICAgICpkdXJhdGlvbiA9IHBhcnNlLT5wcml2LT5kdXJhdGlvbjsKLSAgICByZXMgPSBUUlVFOwotICB9IGVsc2UgaWYgKHBhcnNlLT5wcml2LT5kdXJhdGlvbiAhPSAtMSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImNvbnZlcnRpbmcgcHJvdmlkZWQgZHVyYXRpb24iKTsKLSAgICByZXMgPSBnc3RfYmFzZV9wYXJzZV9jb252ZXJ0IChwYXJzZSwgcGFyc2UtPnByaXYtPmR1cmF0aW9uX2ZtdCwKLSAgICAgICAgcGFyc2UtPnByaXYtPmR1cmF0aW9uLCBmb3JtYXQsIChnaW50NjQgKikgZHVyYXRpb24pOwotICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUgJiYgcGFyc2UtPnByaXYtPmVzdGltYXRlZF9kdXJhdGlvbiAhPSAtMSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInVzaW5nIGVzdGltYXRlZCBkdXJhdGlvbiIpOwotICAgICpkdXJhdGlvbiA9IHBhcnNlLT5wcml2LT5lc3RpbWF0ZWRfZHVyYXRpb247Ci0gICAgcmVzID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJjYW5ub3QgZXN0aW1hdGUgZHVyYXRpb24iKTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInJlczogJWQsIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgcmVzLAotICAgICAgR1NUX1RJTUVfQVJHUyAoKmR1cmF0aW9uKSk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfcGFyc2Vfc3JjX3F1ZXJ5X2RlZmF1bHQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR3N0UGFkICpwYWQ7Ci0KLSAgcGFkID0gR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIHsKLSAgICAgIGdpbnQ2NCBkZXN0X3ZhbHVlOwotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJwb3NpdGlvbiBxdWVyeSIpOwotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0KLSAgICAgIC8qIHRyeSB1cHN0cmVhbSBmaXJzdCAqLwotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIEdTVF9PQkpFQ1RfQ0FTVCAocGFyc2UpLCBxdWVyeSk7Ci0gICAgICBpZiAoIXJlcykgewotICAgICAgICAvKiBGYWxsIGJhY2sgb24gaW50ZXJwcmV0aW5nIHNlZ21lbnQgKi8KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gICAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUykgewotICAgICAgICAgIGRlc3RfdmFsdWUgPSBwYXJzZS0+cHJpdi0+b2Zmc2V0OwotICAgICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IHBhcnNlLT5zZWdtZW50LmZvcm1hdCAmJgotICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uKSkgewotICAgICAgICAgIGRlc3RfdmFsdWUgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnBhcnNlLT5zZWdtZW50LAotICAgICAgICAgICAgICBwYXJzZS0+c2VnbWVudC5mb3JtYXQsIHBhcnNlLT5zZWdtZW50LnBvc2l0aW9uKTsKLSAgICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0gICAgICAgIGlmICghcmVzKSB7Ci0gICAgICAgICAgLyogbm8gcHJlY2lzZSByZXN1bHQsIHVwc3RyZWFtIG5vIGlkZWEgZWl0aGVyLCB0aGVuIGJlc3QgZXN0aW1hdGUgKi8KLSAgICAgICAgICAvKiBwcml2LT5vZmZzZXQgaXMgdXBkYXRlZCBpbiBib3RoIFBVU0gvUFVMTCBtb2RlcyAqLwotICAgICAgICAgIHJlcyA9IGdzdF9iYXNlX3BhcnNlX2NvbnZlcnQgKHBhcnNlLAotICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBwYXJzZS0+cHJpdi0+b2Zmc2V0LCBmb3JtYXQsICZkZXN0X3ZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzKQotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIGRlc3RfdmFsdWUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZHVyYXRpb24gcXVlcnkiKTsKLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gICAgICAvKiBjb25zdWx0IHVwc3RyZWFtICovCi0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgR1NUX09CSkVDVF9DQVNUIChwYXJzZSksIHF1ZXJ5KTsKLQotICAgICAgLyogb3RoZXJ3aXNlIGJlc3QgZXN0aW1hdGUgZnJvbSB1cyAqLwotICAgICAgaWYgKCFyZXMpIHsKLSAgICAgICAgcmVzID0gZ3N0X2Jhc2VfcGFyc2VfZ2V0X2R1cmF0aW9uIChwYXJzZSwgZm9ybWF0LCAmZHVyYXRpb24pOwotICAgICAgICBpZiAocmVzKQotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBmb3JtYXQsIGR1cmF0aW9uKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0gICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgZ2Jvb2xlYW4gc2Vla2FibGUgPSBGQUxTRTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZWVraW5nIHF1ZXJ5Iik7Ci0gICAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmbXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgICAvKiBjb25zdWx0IHVwc3RyZWFtICovCi0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgR1NUX09CSkVDVF9DQVNUIChwYXJzZSksIHF1ZXJ5KTsKLQotICAgICAgLyogd2UgbWF5IGJlIGFibGUgdG8gaGVscCBpZiBpbiBUSU1FICovCi0gICAgICBpZiAoZm10ID09IEdTVF9GT1JNQVRfVElNRSAmJiBnc3RfYmFzZV9wYXJzZV9pc19zZWVrYWJsZSAocGFyc2UpKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZtdCwgJnNlZWthYmxlLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgLyogYWxyZWFkeSBPSyBpZiB1cHN0cmVhbSB0YWtlcyBjYXJlICovCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInVwc3RyZWFtIGhhbmRsZWQgJWQsIHNlZWthYmxlICVkIiwKLSAgICAgICAgICAgIHJlcywgc2Vla2FibGUpOwotICAgICAgICBpZiAoIShyZXMgJiYgc2Vla2FibGUpKSB7Ci0gICAgICAgICAgaWYgKCFnc3RfYmFzZV9wYXJzZV9nZXRfZHVyYXRpb24gKHBhcnNlLCBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbikKLSAgICAgICAgICAgICAgfHwgZHVyYXRpb24gPT0gLTEpIHsKLSAgICAgICAgICAgIC8qIHNlZWthYmxlIGlmIHdlIHN0aWxsIGhhdmUgYSBjaGFuY2UgdG8gZ2V0IGR1cmF0aW9uIGxhdGVyIG9uICovCi0gICAgICAgICAgICBzZWVrYWJsZSA9Ci0gICAgICAgICAgICAgICAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX3NlZWthYmxlICYmIHBhcnNlLT5wcml2LT51cGRhdGVfaW50ZXJ2YWw7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNlZWthYmxlID0gcGFyc2UtPnByaXYtPnVwc3RyZWFtX3NlZWthYmxlOwotICAgICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiYWxyZWFkeSBkZXRlcm1pbmUgdXBzdHJlYW0gc2Vla2FibGVkOiAlZCIsCi0gICAgICAgICAgICAgICAgc2Vla2FibGUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X3NlZWtpbmcgKHF1ZXJ5LCBHU1RfRk9STUFUX1RJTUUsIHNlZWthYmxlLCAwLCBkdXJhdGlvbik7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0ZPUk1BVFM6Ci0gICAgICBnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2IChxdWVyeSwgMywgZm10bGlzdCk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ09OVkVSVDoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZGVzdF9mb3JtYXQ7Ci0gICAgICBnaW50NjQgc3JjX3ZhbHVlLCBkZXN0X3ZhbHVlOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAocXVlcnksICZzcmNfZm9ybWF0LCAmc3JjX3ZhbHVlLAotICAgICAgICAgICZkZXN0X2Zvcm1hdCwgJmRlc3RfdmFsdWUpOwotCi0gICAgICByZXMgPSBnc3RfYmFzZV9wYXJzZV9jb252ZXJ0IChwYXJzZSwgc3JjX2Zvcm1hdCwgc3JjX3ZhbHVlLAotICAgICAgICAgIGRlc3RfZm9ybWF0LCAmZGVzdF92YWx1ZSk7Ci0gICAgICBpZiAocmVzKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfY29udmVydCAocXVlcnksIHNyY19mb3JtYXQsIHNyY192YWx1ZSwKLSAgICAgICAgICAgIGRlc3RfZm9ybWF0LCBkZXN0X3ZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIGlmICgocmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChwYXJzZS0+c2lua3BhZCwgcXVlcnkpKSkgewotICAgICAgICBnYm9vbGVhbiBsaXZlOwotICAgICAgICBHc3RDbG9ja1RpbWUgbWluX2xhdGVuY3ksIG1heF9sYXRlbmN5OwotCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5IChxdWVyeSwgJmxpdmUsICZtaW5fbGF0ZW5jeSwgJm1heF9sYXRlbmN5KTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJQZWVyIGxhdGVuY3k6IGxpdmUgJWQsIG1pbiAlIgotICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCwgbGl2ZSwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSwgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuY3kpKTsKLQotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhcnNlKTsKLSAgICAgICAgLyogYWRkIG91ciBsYXRlbmN5ICovCi0gICAgICAgIG1pbl9sYXRlbmN5ICs9IHBhcnNlLT5wcml2LT5taW5fbGF0ZW5jeTsKLSAgICAgICAgaWYgKG1heF9sYXRlbmN5ID09IC0xIHx8IHBhcnNlLT5wcml2LT5tYXhfbGF0ZW5jeSA9PSAtMSkKLSAgICAgICAgICBtYXhfbGF0ZW5jeSA9IC0xOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbWF4X2xhdGVuY3kgKz0gcGFyc2UtPnByaXYtPm1heF9sYXRlbmN5OwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOwotCi0gICAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGxpdmUsIG1pbl9sYXRlbmN5LCBtYXhfbGF0ZW5jeSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotCi0gICAgICBmb3JtYXQgPSBwYXJzZS0+c2VnbWVudC5mb3JtYXQ7Ci0KLSAgICAgIHN0YXJ0ID0KLSAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnBhcnNlLT5zZWdtZW50LCBmb3JtYXQsCi0gICAgICAgICAgcGFyc2UtPnNlZ21lbnQuc3RhcnQpOwotICAgICAgaWYgKChzdG9wID0gcGFyc2UtPnNlZ21lbnQuc3RvcCkgPT0gLTEpCi0gICAgICAgIHN0b3AgPSBwYXJzZS0+c2VnbWVudC5kdXJhdGlvbjsKLSAgICAgIGVsc2UKLSAgICAgICAgc3RvcCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmcGFyc2UtPnNlZ21lbnQsIGZvcm1hdCwgc3RvcCk7Ci0KLSAgICAgIGdzdF9xdWVyeV9zZXRfc2VnbWVudCAocXVlcnksIHBhcnNlLT5zZWdtZW50LnJhdGUsIGZvcm1hdCwgc3RhcnQsIHN0b3ApOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIEdTVF9PQkpFQ1RfQ0FTVCAocGFyc2UpLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0vKiBzY2FucyBmb3IgYSBjbHVzdGVyIHN0YXJ0IGZyb20gQHBvcywKLSAqIHJldHVybiBHU1RfRkxPV19PSyBhbmQgZnJhbWUgcG9zaXRpb24vdGltZSBpbiBAcG9zL0B0aW1lIGlmIGZvdW5kICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfcGFyc2VfZmluZF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIGdpbnQ2NCAqIHBvcywKLSAgICBHc3RDbG9ja1RpbWUgKiB0aW1lLCBHc3RDbG9ja1RpbWUgKiBkdXJhdGlvbikKLXsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgKmtsYXNzOwotICBnaW50NjQgb3JpZ19vZmZzZXQ7Ci0gIGdib29sZWFuIG9yaWdfZHJhaW4sIG9yaWdfZGlzY29udDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotICBHc3RCYXNlUGFyc2VGcmFtZSAqc2ZyYW1lID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocG9zICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRpbWUgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZHVyYXRpb24gIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIGtsYXNzID0gR1NUX0JBU0VfUEFSU0VfR0VUX0NMQVNTIChwYXJzZSk7Ci0KLSAgKnRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAqZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIC8qIHNhdmUgc3RhdGUgKi8KLSAgb3JpZ19vZmZzZXQgPSBwYXJzZS0+cHJpdi0+b2Zmc2V0OwotICBvcmlnX2Rpc2NvbnQgPSBwYXJzZS0+cHJpdi0+ZGlzY29udDsKLSAgb3JpZ19kcmFpbiA9IHBhcnNlLT5wcml2LT5kcmFpbjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNjYW5uaW5nIGZvciBmcmFtZSBzdGFydGluZyBhdCAlIiBHX0dJTlQ2NF9GT1JNQVQKLSAgICAgICIgKCUjIiBHX0dJTlQ2NF9NT0RJRklFUiAieCkiLCAqcG9zLCAqcG9zKTsKLQotICAvKiBqdW1wIGVsc2V3aGVyZSBhbmQgbG9jYXRlIG5leHQgZnJhbWUgKi8KLSAgcGFyc2UtPnByaXYtPm9mZnNldCA9ICpwb3M7Ci0gIC8qIG1hcmsgYXMgc2Nhbm5pbmcgc28gZnJhbWVzIGRvbid0IGdldCBwcm9jZXNzZWQgYWxsIHRoZSB3YXkgKi8KLSAgcGFyc2UtPnByaXYtPnNjYW5uaW5nID0gVFJVRTsKLSAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2Vfc2Nhbl9mcmFtZSAocGFyc2UsIGtsYXNzKTsKLSAgcGFyc2UtPnByaXYtPnNjYW5uaW5nID0gRkFMU0U7Ci0gIC8qIHJldHJpZXZlIGZyYW1lIGZvdW5kIGR1cmluZyBzY2FuICovCi0gIHNmcmFtZSA9IHBhcnNlLT5wcml2LT5zY2FubmVkX2ZyYW1lOwotICBwYXJzZS0+cHJpdi0+c2Nhbm5lZF9mcmFtZSA9IE5VTEw7Ci0KLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyB8fCAhc2ZyYW1lKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBnZXQgb2Zmc2V0IGZpcnN0LCBzdWJjbGFzcyBwYXJzaW5nIG1pZ2h0IGR1bXAgb3RoZXIgc3R1ZmYgaW4gdGhlcmUgKi8KLSAgKnBvcyA9IHNmcmFtZS0+b2Zmc2V0OwotICBidWYgPSBzZnJhbWUtPmJ1ZmZlcjsKLSAgZ19hc3NlcnQgKGJ1Zik7Ci0KLSAgLyogYnV0IGl0IHNob3VsZCBwcm92aWRlIHByb3BlciB0aW1lICovCi0gICp0aW1lID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gICpkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAotICAgICAgImZyYW1lIHdpdGggdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiBhdCBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoKnRpbWUpLCAqcG9zKTsKLQotZG9uZToKLSAgaWYgKHNmcmFtZSkKLSAgICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9mcmVlIChzZnJhbWUpOwotCi0gIC8qIHJlc3RvcmUgc3RhdGUgKi8KLSAgcGFyc2UtPnByaXYtPm9mZnNldCA9IG9yaWdfb2Zmc2V0OwotICBwYXJzZS0+cHJpdi0+ZGlzY29udCA9IG9yaWdfZGlzY29udDsKLSAgcGFyc2UtPnByaXYtPmRyYWluID0gb3JpZ19kcmFpbjsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBiaXNlY3QgYW5kIHNjYW4gdGhyb3VnaCBmaWxlIGZvciBmcmFtZSBzdGFydGluZyBiZWZvcmUgQHRpbWUsCi0gKiByZXR1cm5zIE9LIGFuZCBAdGltZS9Ab2Zmc2V0IGlmIGZvdW5kLCBOT05FIGFuZC9vciBlcnJvciBvdGhlcndpc2UKLSAqIElmIEB0aW1lID09IEdfTUFYSU5UNjQsIHNjYW4gZm9yIGR1cmF0aW9uICggPT0gbGFzdCBmcmFtZSkgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9wYXJzZV9sb2NhdGVfdGltZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdENsb2NrVGltZSAqIF90aW1lLAotICAgIGdpbnQ2NCAqIF9vZmZzZXQpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGdpbnQ2NCBscG9zLCBocG9zLCBuZXdwb3M7Ci0gIEdzdENsb2NrVGltZSB0aW1lLCBsdGltZSwgaHRpbWUsIG5ld3RpbWUsIGR1cjsKLSAgZ2Jvb2xlYW4gY29udCA9IFRSVUU7Ci0gIGNvbnN0IEdzdENsb2NrVGltZSB0b2xlcmFuY2UgPSBUQVJHRVRfRElGRkVSRU5DRTsKLSAgY29uc3QgZ3VpbnQgY2h1bmsgPSA0ICogMTAyNDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoX3RpbWUgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoX29mZnNldCAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJCaXNlY3RpbmcgZm9yIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoKl90aW1lKSk7Ci0KLSAgLyogVE9ETyBhbHNvIG1ha2Uga2V5ZnJhbWUgYXdhcmUgaWYgdXNlZnVsIHNvbWUgZGF5ICovCi0KLSAgdGltZSA9ICpfdGltZTsKLQotICAvKiBiYXNpYyBjYXNlcyAqLwotICBpZiAodGltZSA9PSAwKSB7Ci0gICAgKl9vZmZzZXQgPSAwOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIGlmICh0aW1lID09IC0xKSB7Ci0gICAgKl9vZmZzZXQgPSAtMTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICAvKiBkbyBub3Qga25vdyBhdCBmaXJzdCAqLwotICAqX29mZnNldCA9IC0xOwotICAqX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIC8qIG5lZWQgaW5pdGlhbCBwb3NpdGlvbnM7IHN0YXJ0IGFuZCBlbmQgKi8KLSAgbHBvcyA9IHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV9vZmZzZXQ7Ci0gIGx0aW1lID0gcGFyc2UtPnByaXYtPmZpcnN0X2ZyYW1lX3B0czsKLSAgLyogdHJ5IG90aGVyIG9uZSBpZiBubyBsdWNrICovCi0gIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGx0aW1lKSkKLSAgICBsdGltZSA9IHBhcnNlLT5wcml2LT5maXJzdF9mcmFtZV9kdHM7Ci0gIGlmICghZ3N0X2Jhc2VfcGFyc2VfZ2V0X2R1cmF0aW9uIChwYXJzZSwgR1NUX0ZPUk1BVF9USU1FLCAmaHRpbWUpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJVbmtub3duIHRpbWUgZHVyYXRpb24sIGNhbm5vdCBiaXNlY3QiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLSAgaHBvcyA9IHBhcnNlLT5wcml2LT51cHN0cmVhbV9zaXplOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgIkJpc2VjdGlvbiBpbml0aWFsIGJvdW5kczogYnl0ZXMgJSIgR19HSU5UNjRfRk9STUFUICIgJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAiLCB0aW1lcyAlIiBHU1RfVElNRV9GT1JNQVQgIiAlIiBHU1RfVElNRV9GT1JNQVQsIGxwb3MsIGhwb3MsCi0gICAgICBHU1RfVElNRV9BUkdTIChsdGltZSksIEdTVF9USU1FX0FSR1MgKGh0aW1lKSk7Ci0KLSAgLyogY2hlY2sgcHJlY29uZGl0aW9ucyBhcmUgc2F0aXNmaWVkOwotICAgKiBzdGFydCBhbmQgZW5kIGFyZSBuZWVkZWQsIGV4Y2VwdCBmb3Igc3BlY2lhbCBjYXNlIHdoZXJlIHdlIHNjYW4gZm9yCi0gICAqIGxhc3QgZnJhbWUgdG8gZGV0ZXJtaW5lIGR1cmF0aW9uICovCi0gIGlmIChwYXJzZS0+cHJpdi0+cGFkX21vZGUgIT0gR1NUX1BBRF9NT0RFX1BVTEwgfHwgIWhwb3MgfHwKLSAgICAgICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobHRpbWUpIHx8Ci0gICAgICAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChodGltZSkgJiYgdGltZSAhPSBHX01BWElOVDY0KSkgewotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIC8qIHNob3J0Y3V0IGNhc2VzICovCi0gIGlmICh0aW1lIDwgbHRpbWUpIHsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0gZWxzZSBpZiAodGltZSA8IGx0aW1lICsgdG9sZXJhbmNlKSB7Ci0gICAgKl9vZmZzZXQgPSBscG9zOwotICAgICpfdGltZSA9IGx0aW1lOwotICAgIGdvdG8gZXhpdDsKLSAgfSBlbHNlIGlmICh0aW1lID49IGh0aW1lKSB7Ci0gICAgKl9vZmZzZXQgPSBocG9zOwotICAgICpfdGltZSA9IGh0aW1lOwotICAgIGdvdG8gZXhpdDsKLSAgfQotCi0gIHdoaWxlIChodGltZSA+IGx0aW1lICYmIGNvbnQpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCi0gICAgICAgICJscG9zOiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGx0aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQsIGxwb3MsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGx0aW1lKSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAiaHBvczogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBodGltZTogJSIgR1NUX1RJTUVfRk9STUFULCBocG9zLAotICAgICAgICBHU1RfVElNRV9BUkdTIChodGltZSkpOwotICAgIGlmIChHX1VOTElLRUxZICh0aW1lID09IEdfTUFYSU5UNjQpKSB7Ci0gICAgICBuZXdwb3MgPSBocG9zOwotICAgIH0gZWxzZSBpZiAoR19MSUtFTFkgKGhwb3MgPiBscG9zKSkgewotICAgICAgbmV3cG9zID0KLSAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGhwb3MgLSBscG9zLCB0aW1lIC0gbHRpbWUsIGh0aW1lIC0gbHRpbWUpICsKLSAgICAgICAgICBscG9zIC0gY2h1bms7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHNob3VsZCBtZWFuIGxwb3MgPT0gaHBvcywgc2luY2UgbHBvcyA8PSBocG9zIGlzIGludmFyaWFudCAqLwotICAgICAgbmV3cG9zID0gbHBvczsKLSAgICAgIC8qIHdlIGNoZWNrIHRoaXMgY2FzZSBvbmNlLCBidXQgbm90IGZvcmV2ZXIsIHNvIGJyZWFrIGxvb3AgKi8KLSAgICAgIGNvbnQgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICAvKiBlbnN1cmUgKi8KLSAgICBuZXdwb3MgPSBDTEFNUCAobmV3cG9zLCBscG9zLCBocG9zKTsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsCi0gICAgICAgICJlc3RpbWF0ZWQgX29mZnNldCBmb3IgJSIgR1NUX1RJTUVfRk9STUFUICI6ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAodGltZSksIG5ld3Bvcyk7Ci0KLSAgICByZXQgPSBnc3RfYmFzZV9wYXJzZV9maW5kX2ZyYW1lIChwYXJzZSwgJm5ld3BvcywgJm5ld3RpbWUsICZkdXIpOwotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICAvKiBoZXVyaXN0aWMgSEFDSyAqLwotICAgICAgaHBvcyA9IE1BWCAobHBvcywgaHBvcyAtIGNodW5rKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0gZWxzZSBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgaWYgKG5ld3RpbWUgPT0gLTEgfHwgbmV3cG9zID09IC0xKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInN1YmNsYXNzIGRpZCBub3QgcHJvdmlkZSBtZXRhZGF0YTsgYWJvcnRpbmciKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChHX1VOTElLRUxZICh0aW1lID09IEdfTUFYSU5UNjQpKSB7Ci0gICAgICAqX29mZnNldCA9IG5ld3BvczsKLSAgICAgICpfdGltZSA9IG5ld3RpbWU7Ci0gICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cikpCi0gICAgICAgICpfdGltZSArPSBkdXI7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgaWYgKG5ld3RpbWUgPiB0aW1lKSB7Ci0gICAgICAvKiBvdmVyc2hvb3QgKi8KLSAgICAgIGhwb3MgPSAobmV3cG9zID49IGhwb3MpID8gTUFYIChscG9zLCBocG9zIC0gY2h1bmspIDogTUFYIChscG9zLCBuZXdwb3MpOwotICAgICAgaHRpbWUgPSBuZXd0aW1lOwotICAgIH0gZWxzZSBpZiAobmV3dGltZSArIHRvbGVyYW5jZSA+IHRpbWUpIHsKLSAgICAgIC8qIGNsb3NlIGVub3VnaCB1bmRlcnNob290ICovCi0gICAgICAqX29mZnNldCA9IG5ld3BvczsKLSAgICAgICpfdGltZSA9IG5ld3RpbWU7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgaWYgKG5ld3RpbWUgPCBsdGltZSkgewotICAgICAgLyogc28gYSBwb3NpdGlvbiBiZXlvbmQgbHBvcyByZXN1bHRlZCBpbiBlYXJsaWVyIHRpbWUgdGhhbiBsdGltZSAuLi4gKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibm9uLWFzY2VuZGluZyB0aW1lOyBhYm9ydGluZyIpOwotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHVuZGVyc2hvb3QgdG9vIGZhciAqLwotICAgICAgbmV3cG9zICs9IG5ld3BvcyA9PSBscG9zID8gY2h1bmsgOiAwOwotICAgICAgbHBvcyA9IENMQU1QIChuZXdwb3MsIGxwb3MsIGhwb3MpOwotICAgICAgbHRpbWUgPSBuZXd0aW1lOwotICAgIH0KLSAgfQotCi1leGl0OgotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJyZXR1cm4gb2Zmc2V0ICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCB0aW1lICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsICpfb2Zmc2V0LCBHU1RfVElNRV9BUkdTICgqX3RpbWUpKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdpbnQ2NAotZ3N0X2Jhc2VfcGFyc2VfZmluZF9vZmZzZXQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RDbG9ja1RpbWUgdGltZSwKLSAgICBnYm9vbGVhbiBiZWZvcmUsIEdzdENsb2NrVGltZSAqIF90cykKLXsKLSAgZ2ludDY0IGJ5dGVzID0gMCwgdHMgPSAwOwotICBHc3RJbmRleEVudHJ5ICplbnRyeSA9IE5VTEw7Ci0KLSAgaWYgKHRpbWUgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgIHRzID0gdGltZTsKLSAgICBieXRlcyA9IC0xOwotICAgIGdvdG8gZXhpdDsKLSAgfQotCi0gIEdTVF9CQVNFX1BBUlNFX0lOREVYX0xPQ0sgKHBhcnNlKTsKLSAgaWYgKHBhcnNlLT5wcml2LT5pbmRleCkgewotICAgIC8qIExldCdzIGNoZWNrIGlmIHdlIGhhdmUgYW4gaW5kZXggZW50cnkgZm9yIHRoYXQgdGltZSAqLwotICAgIGVudHJ5ID0gZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeSAocGFyc2UtPnByaXYtPmluZGV4LAotICAgICAgICBwYXJzZS0+cHJpdi0+aW5kZXhfaWQsCi0gICAgICAgIGJlZm9yZSA/IEdTVF9JTkRFWF9MT09LVVBfQkVGT1JFIDogR1NUX0lOREVYX0xPT0tVUF9BRlRFUiwKLSAgICAgICAgR1NUX0lOREVYX0FTU09DSUFUSU9OX0ZMQUdfS0VZX1VOSVQsIEdTVF9GT1JNQVRfVElNRSwgdGltZSk7Ci0gIH0KLQotICBpZiAoZW50cnkpIHsKLSAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChlbnRyeSwgR1NUX0ZPUk1BVF9CWVRFUywgJmJ5dGVzKTsKLSAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChlbnRyeSwgR1NUX0ZPUk1BVF9USU1FLCAmdHMpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJmb3VuZCBpbmRleCBlbnRyeSBmb3IgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIsIG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWUpLCBHU1RfVElNRV9BUkdTICh0cyksIGJ5dGVzKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIGluZGV4IGVudHJ5IGZvdW5kIGZvciAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWUpKTsKLSAgICBpZiAoIWJlZm9yZSkgewotICAgICAgYnl0ZXMgPSAtMTsKLSAgICAgIHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICB9Ci0gIH0KLSAgR1NUX0JBU0VfUEFSU0VfSU5ERVhfVU5MT0NLIChwYXJzZSk7Ci0KLWV4aXQ6Ci0gIGlmIChfdHMpCi0gICAgKl90cyA9IHRzOwotCi0gIHJldHVybiBieXRlczsKLX0KLQotLyogcmV0dXJucyBUUlVFIGlmIHNlZWsgc3VjY2VlZGVkICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3BhcnNlX2hhbmRsZV9zZWVrIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2RvdWJsZSByYXRlOwotICBHc3RGb3JtYXQgZm9ybWF0OwotICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUgPSBHU1RfU0VFS19UWVBFX05PTkUsIHN0b3BfdHlwZTsKLSAgZ2Jvb2xlYW4gZmx1c2gsIHVwZGF0ZSwgcmVzID0gVFJVRSwgYWNjdXJhdGU7Ci0gIGdpbnQ2NCBzdGFydCwgc3RvcCwgc2Vla3Bvcywgc2Vla3N0b3A7Ci0gIEdzdFNlZ21lbnQgc2Vla3NlZ21lbnQgPSB7IDAsIH07Ci0gIEdzdENsb2NrVGltZSBzdGFydF90czsKLSAgZ3VpbnQzMiBzZXFudW07Ci0gIEdzdEV2ZW50ICpzZWdtZW50X2V2ZW50OwotCi0gIC8qIHRyeSB1cHN0cmVhbSBmaXJzdCwgdW5sZXNzIHdlJ3JlIGRyaXZpbmcgdGhlIHN0cmVhbWluZyB0aHJlYWQgb3Vyc2VsdmVzICovCi0gIGlmIChwYXJzZS0+cHJpdi0+cGFkX21vZGUgIT0gR1NUX1BBRF9NT0RFX1BVTEwpIHsKLSAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhcnNlLT5zaW5rcGFkLCBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotICAgIGlmIChyZXMpCi0gICAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsCi0gICAgICAmc3RhcnRfdHlwZSwgJnN0YXJ0LCAmc3RvcF90eXBlLCAmc3RvcCk7Ci0gIHNlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZWVrIHRvIGZvcm1hdCAlcywgcmF0ZSAlZiwgIgotICAgICAgInN0YXJ0IHR5cGUgJWQgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIsIGVuZCB0eXBlICVkIGF0ICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCksIHJhdGUsCi0gICAgICBzdGFydF90eXBlLCBHU1RfVElNRV9BUkdTIChzdGFydCksIHN0b3BfdHlwZSwgR1NUX1RJTUVfQVJHUyAoc3RvcCkpOwotCi0gIC8qIHdlIGNhbiBvbmx5IGhhbmRsZSBUSU1FLCBzbyBjaGVjayBpZiBzdWJjbGFzcyBjYW4gY29udmVydAotICAgKiB0byBUSU1FIGZvcm1hdCBpZiBpdCdzIHNvbWUgb3RoZXIgZm9ybWF0IChzdWNoIGFzIERFRkFVTFQpICovCi0gIGlmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgaWYgKCFnc3RfYmFzZV9wYXJzZV9jb252ZXJ0IChwYXJzZSwgZm9ybWF0LCBzdGFydCwgR1NUX0ZPUk1BVF9USU1FLCAmc3RhcnQpCi0gICAgICAgIHx8ICFnc3RfYmFzZV9wYXJzZV9jb252ZXJ0IChwYXJzZSwgZm9ybWF0LCBzdG9wLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICAmc3RvcCkpCi0gICAgICBnb3RvIG5vX2NvbnZlcnRfdG9fdGltZTsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAocGFyc2UsICJjb252ZXJ0ZWQgJXMgZm9ybWF0IHRvIHN0YXJ0IHRpbWUgIgotICAgICAgICAiJSIgR1NUX1RJTUVfRk9STUFUICIgYW5kIHN0b3AgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCksIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3RvcCkpOwotCi0gICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICB9Ci0KLSAgLyogbm8gbmVnYXRpdmUgcmF0ZXMgaW4gcHVzaCBtb2RlICh1bmxlc3MgdXBzdHJlYW0gdGFrZXMgY2FyZSBvZiB0aGF0LCBidXQKLSAgICogd2UndmUgYWxyZWFkeSB0cmllZCB1cHN0cmVhbSBhbmQgaXQgZGlkbid0IGhhbmRsZSB0aGUgc2VlayByZXF1ZXN0KSAqLwotICBpZiAocmF0ZSA8IDAuMCAmJiBwYXJzZS0+cHJpdi0+cGFkX21vZGUgPT0gR1NUX1BBRF9NT0RFX1BVU0gpCi0gICAgZ290byBuZWdhdGl2ZV9yYXRlOwotCi0gIGlmIChzdGFydF90eXBlICE9IEdTVF9TRUVLX1RZUEVfU0VUIHx8Ci0gICAgICAoc3RvcF90eXBlICE9IEdTVF9TRUVLX1RZUEVfU0VUICYmIHN0b3BfdHlwZSAhPSBHU1RfU0VFS19UWVBFX05PTkUpKQotICAgIGdvdG8gd3JvbmdfdHlwZTsKLQotICAvKiBnZXQgZmx1c2ggZmxhZyAqLwotICBmbHVzaCA9IGZsYWdzICYgR1NUX1NFRUtfRkxBR19GTFVTSDsKLQotICAvKiBjb3B5IHNlZ21lbnQsIHdlIG5lZWQgdGhpcyBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdGhlIG9sZAotICAgKiBzZWdtZW50IHdoZW4gd2UgY2xvc2UgdGhlIGN1cnJlbnQgc2VnbWVudC4gKi8KLSAgZ3N0X3NlZ21lbnRfY29weV9pbnRvICgmcGFyc2UtPnNlZ21lbnQsICZzZWVrc2VnbWVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJjb25maWd1cmluZyBzZWVrIik7Ci0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWVrc2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKLSAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotCi0gIC8qIGFjY3VyYXRlIHNlZWtpbmcgaW1wbGllcyBzZWVrIHRhYmxlcyBhcmUgdXNlZCB0byBvYnRhaW4gcG9zaXRpb24sCi0gICAqIGFuZCB0aGUgcmVxdWVzdGVkIHNlZ21lbnQgaXMgbWFpbnRhaW5lZCBleGFjdGx5LCBub3QgYWRqdXN0ZWQgYW55IHdheSAqLwotICBhY2N1cmF0ZSA9IGZsYWdzICYgR1NUX1NFRUtfRkxBR19BQ0NVUkFURTsKLQotICAvKiBtYXliZSB3ZSBjYW4gYmUgYWNjdXJhdGUgZm9yIChhbG1vc3QpIGZyZWUgKi8KLSAgZ3N0X2Jhc2VfcGFyc2VfZmluZF9vZmZzZXQgKHBhcnNlLCBzZWVrc2VnbWVudC5wb3NpdGlvbiwgVFJVRSwgJnN0YXJ0X3RzKTsKLSAgaWYgKHNlZWtzZWdtZW50LnBvc2l0aW9uIDw9IHN0YXJ0X3RzICsgVEFSR0VUX0RJRkZFUkVOQ0UpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImFjY3VyYXRlIHNlZWsgcG9zc2libGUiKTsKLSAgICBhY2N1cmF0ZSA9IFRSVUU7Ci0gIH0KLQotICBpZiAoYWNjdXJhdGUpIHsKLSAgICBHc3RDbG9ja1RpbWUgc3RhcnRwb3M7Ci0gICAgaWYgKHJhdGUgPj0gMCkKLSAgICAgIHN0YXJ0cG9zID0gc2Vla3NlZ21lbnQucG9zaXRpb247Ci0gICAgZWxzZQotICAgICAgc3RhcnRwb3MgPSBzdGFydDsKLQotICAgIC8qIGFjY3VyYXRlIHJlcXVlc3RlZCwgc28gLi4uIHNlZWsgYSBiaXQgYmVmb3JlIHRhcmdldCAqLwotICAgIGlmIChzdGFydHBvcyA8IHBhcnNlLT5wcml2LT5sZWFkX2luX3RzKQotICAgICAgc3RhcnRwb3MgPSAwOwotICAgIGVsc2UKLSAgICAgIHN0YXJ0cG9zIC09IHBhcnNlLT5wcml2LT5sZWFkX2luX3RzOwotCi0gICAgaWYgKHNlZWtzZWdtZW50LnN0b3AgPT0gLTEgJiYgc2Vla3NlZ21lbnQuZHVyYXRpb24gIT0gLTEpCi0gICAgICBzZWVrc2VnbWVudC5zdG9wID0gc2Vla3NlZ21lbnQuc3RhcnQgKyBzZWVrc2VnbWVudC5kdXJhdGlvbjsKLQotICAgIHNlZWtwb3MgPSBnc3RfYmFzZV9wYXJzZV9maW5kX29mZnNldCAocGFyc2UsIHN0YXJ0cG9zLCBUUlVFLCAmc3RhcnRfdHMpOwotICAgIHNlZWtzdG9wID0gZ3N0X2Jhc2VfcGFyc2VfZmluZF9vZmZzZXQgKHBhcnNlLCBzZWVrc2VnbWVudC5zdG9wLCBGQUxTRSwKLSAgICAgICAgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKHJhdGUgPj0gMCkKLSAgICAgIHN0YXJ0X3RzID0gc2Vla3NlZ21lbnQucG9zaXRpb247Ci0gICAgZWxzZQotICAgICAgc3RhcnRfdHMgPSBzdGFydDsKLQotICAgIGlmIChzZWVrc2VnbWVudC5zdG9wID09IC0xICYmIHNlZWtzZWdtZW50LmR1cmF0aW9uICE9IC0xKQotICAgICAgc2Vla3NlZ21lbnQuc3RvcCA9IHNlZWtzZWdtZW50LnN0YXJ0ICsgc2Vla3NlZ21lbnQuZHVyYXRpb247Ci0KLSAgICBpZiAoIWdzdF9iYXNlX3BhcnNlX2NvbnZlcnQgKHBhcnNlLCBmb3JtYXQsIHN0YXJ0X3RzLAotICAgICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgJnNlZWtwb3MpKQotICAgICAgZ290byBjb252ZXJ0X2ZhaWxlZDsKLSAgICBpZiAoIWdzdF9iYXNlX3BhcnNlX2NvbnZlcnQgKHBhcnNlLCBmb3JtYXQsIHNlZWtzZWdtZW50LnN0b3AsCi0gICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCAmc2Vla3N0b3ApKQotICAgICAgZ290byBjb252ZXJ0X2ZhaWxlZDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgInNlZWsgcG9zaXRpb24gJSIgR19HSU5UNjRfRk9STUFUICIgaW4gYnl0ZXM6ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgIHN0YXJ0X3RzLCBzZWVrcG9zKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCi0gICAgICAic2VlayBzdG9wICUiIEdfR0lOVDY0X0ZPUk1BVCAiIGluIGJ5dGVzOiAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICBzZWVrc2VnbWVudC5zdG9wLCBzZWVrc3RvcCk7Ci0KLSAgaWYgKHBhcnNlLT5wcml2LT5wYWRfbW9kZSA9PSBHU1RfUEFEX01PREVfUFVMTCkgewotICAgIGdpbnQ2NCBsYXN0X3N0b3A7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWsgaW4gUFVMTCBtb2RlIik7Ci0KLSAgICBpZiAoZmx1c2gpIHsKLSAgICAgIGlmIChwYXJzZS0+c3JjcGFkKSB7Ci0gICAgICAgIEdzdEV2ZW50ICpmZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlbmRpbmcgZmx1c2ggc3RhcnQiKTsKLQotICAgICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZmV2ZW50LCBzZXFudW0pOwotCi0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPnNyY3BhZCwgZ3N0X2V2ZW50X3JlZiAoZmV2ZW50KSk7Ci0gICAgICAgIC8qIHVubG9jayB1cHN0cmVhbSBwdWxsX3JhbmdlICovCi0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPnNpbmtwYWQsIGZldmVudCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocGFyc2UtPnNpbmtwYWQpOwotICAgIH0KLQotICAgIC8qIHdlIHNob3VsZCBub3cgYmUgYWJsZSB0byBncmFiIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGJlY2F1c2Ugd2Ugc3RvcHBlZCBpdAotICAgICAqIHdpdGggdGhlIGFib3ZlIGZsdXNoL3BhdXNlIGNvZGUgKi8KLSAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYXJzZS0+c2lua3BhZCk7Ci0KLSAgICAvKiBzYXZlIGN1cnJlbnQgcG9zaXRpb24gKi8KLSAgICBsYXN0X3N0b3AgPSBwYXJzZS0+c2VnbWVudC5wb3NpdGlvbjsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInN0b3BwZWQgc3RyZWFtaW5nIGF0ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgbGFzdF9zdG9wKTsKLQotICAgIC8qIG5vdyBjb21taXQgdG8gbmV3IHBvc2l0aW9uICovCi0KLSAgICAvKiBwcmVwYXJlIGZvciBzdHJlYW1pbmcgYWdhaW4gKi8KLSAgICBpZiAoZmx1c2gpIHsKLSAgICAgIEdzdEV2ZW50ICpmZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzZW5kaW5nIGZsdXNoIHN0b3AiKTsKLSAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChmZXZlbnQsIHNlcW51bSk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhcnNlLT5zcmNwYWQsIGdzdF9ldmVudF9yZWYgKGZldmVudCkpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c2lua3BhZCwgZmV2ZW50KTsKLSAgICAgIGdzdF9iYXNlX3BhcnNlX2NsZWFyX3F1ZXVlcyAocGFyc2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBrZWVwIHRyYWNrIG9mIG91ciBwb3NpdGlvbiAqLwotICAgICAgc2Vla3NlZ21lbnQuYmFzZSA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlZWtzZWdtZW50LAotICAgICAgICAgIHNlZWtzZWdtZW50LmZvcm1hdCwgcGFyc2UtPnNlZ21lbnQucG9zaXRpb24pOwotICAgIH0KLQotICAgIG1lbWNweSAoJnBhcnNlLT5zZWdtZW50LCAmc2Vla3NlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOwotCi0gICAgLyogc3RvcmUgdGhlIG5ld3NlZ21lbnQgZXZlbnQgc28gaXQgY2FuIGJlIHNlbnQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZC4gKi8KLSAgICAvKiBUaGlzIHdpbGwgYmUgc2VudCBsYXRlciBpbiBfbG9vcCgpICovCi0gICAgc2VnbWVudF9ldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnBhcnNlLT5zZWdtZW50KTsKLSAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoc2VnbWVudF9ldmVudCwgc2VxbnVtKTsKLSAgICBwYXJzZS0+cHJpdi0+cGVuZGluZ19ldmVudHMgPQotICAgICAgICBnX2xpc3RfcHJlcGVuZCAocGFyc2UtPnByaXYtPnBlbmRpbmdfZXZlbnRzLCBzZWdtZW50X2V2ZW50KTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiQ3JlYXRlZCBuZXdzZWcgZm9ybWF0ICVkLCAiCi0gICAgICAgICJzdGFydCA9ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzdG9wID0gJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIsIHRpbWUgPSAlIiBHU1RfVElNRV9GT1JNQVQsIGZvcm1hdCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFyc2UtPnNlZ21lbnQuc3RhcnQpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChwYXJzZS0+c2VnbWVudC5zdG9wKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFyc2UtPnNlZ21lbnQudGltZSkpOwotCi0gICAgLyogb25lIGxhc3QgY2hhbmNlIGluIHB1bGwgbW9kZSB0byBzdGF5IGFjY3VyYXRlOwotICAgICAqIG1heWJlIHNjYW4gYW5kIHN1YmNsYXNzIGNhbiBmaW5kIHdoZXJlIHRvIGdvICovCi0gICAgaWYgKCFhY2N1cmF0ZSkgewotICAgICAgZ2ludDY0IHNjYW5wb3M7Ci0gICAgICBHc3RDbG9ja1RpbWUgdHMgPSBzZWVrc2VnbWVudC5wb3NpdGlvbjsKLQotICAgICAgZ3N0X2Jhc2VfcGFyc2VfbG9jYXRlX3RpbWUgKHBhcnNlLCAmdHMsICZzY2FucG9zKTsKLSAgICAgIGlmIChzY2FucG9zID49IDApIHsKLSAgICAgICAgYWNjdXJhdGUgPSBUUlVFOwotICAgICAgICBzZWVrcG9zID0gc2NhbnBvczsKLSAgICAgICAgLyogcnVubmluZyBjb2xsZWN0ZWQgaW5kZXggbm93IGNvbnNpc3RzIG9mIHNldmVyYWwgaW50ZXJ2YWxzLAotICAgICAgICAgKiBzbyBvcHRpbWl6ZWQgY2hlY2sgbm8gbG9uZ2VyIHBvc3NpYmxlICovCi0gICAgICAgIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X3ZhbGlkID0gRkFMU0U7Ci0gICAgICAgIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X29mZnNldCA9IDA7Ci0gICAgICAgIHBhcnNlLT5wcml2LT5pbmRleF9sYXN0X3RzID0gMDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBtYXJrIGRpc2NvbnQgaWYgd2UgYXJlIGdvaW5nIHRvIHN0cmVhbSBmcm9tIGFub3RoZXIgcG9zaXRpb24uICovCi0gICAgaWYgKHNlZWtwb3MgIT0gcGFyc2UtPnByaXYtPm9mZnNldCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgIm1hcmsgRElTQ09OVCwgd2UgZGlkIGEgc2VlayB0byBhbm90aGVyIHBvc2l0aW9uIik7Ci0gICAgICBwYXJzZS0+cHJpdi0+b2Zmc2V0ID0gc2Vla3BvczsKLSAgICAgIHBhcnNlLT5wcml2LT5sYXN0X29mZnNldCA9IHNlZWtwb3M7Ci0gICAgICBwYXJzZS0+cHJpdi0+c2Vlbl9rZXlmcmFtZSA9IEZBTFNFOwotICAgICAgcGFyc2UtPnByaXYtPmRpc2NvbnQgPSBUUlVFOwotICAgICAgcGFyc2UtPnByaXYtPm5leHRfZHRzID0gc3RhcnRfdHM7Ci0gICAgICBwYXJzZS0+cHJpdi0+bmV4dF9wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgcGFyc2UtPnByaXYtPmxhc3RfZHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIHBhcnNlLT5wcml2LT5sYXN0X3B0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBwYXJzZS0+cHJpdi0+c3luY19vZmZzZXQgPSBzZWVrcG9zOwotICAgICAgcGFyc2UtPnByaXYtPmV4YWN0X3Bvc2l0aW9uID0gYWNjdXJhdGU7Ci0gICAgfQotCi0gICAgLyogU3RhcnQgc3RyZWFtaW5nIHRocmVhZCBpZiBwYXVzZWQgKi8KLSAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHBhcnNlLT5zaW5rcGFkLAotICAgICAgICAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfYmFzZV9wYXJzZV9sb29wLCBwYXJzZS0+c2lua3BhZCwgTlVMTCk7Ci0KLSAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhcnNlLT5zaW5rcGFkKTsKLQotICAgIC8qIGhhbmRsZWQgc2VlayAqLwotICAgIHJlcyA9IFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgR3N0RXZlbnQgKm5ld19ldmVudDsKLSAgICBHc3RCYXNlUGFyc2VTZWVrICpzZWVrOwotICAgIEdzdFNlZWtGbGFncyBmbGFncyA9IChmbHVzaCA/IEdTVF9TRUVLX0ZMQUdfRkxVU0ggOiBHU1RfU0VFS19GTEFHX05PTkUpOwotCi0gICAgLyogVGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBkbyBpbiBQVVNILW1vZGUgaXMgdG8gc2VuZCB0aGUKLSAgICAgICBzZWVrIGV2ZW50IChpbiBieXRlcykgdG8gdXBzdHJlYW0uIFNlZ21lbnQgLyBmbHVzaCBoYW5kbGluZyBoYXBwZW5zCi0gICAgICAgaW4gY29ycmVzcG9uZGluZyBzcmMgZXZlbnQgaGFuZGxlcnMgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWsgaW4gUFVTSCBtb2RlIik7Ci0gICAgaWYgKHNlZWtzdG9wID49IDAgJiYgc2Vla3N0b3AgPD0gc2Vla3BvcykKLSAgICAgIHNlZWtzdG9wID0gc2Vla3BvczsKLSAgICBuZXdfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKHJhdGUsIEdTVF9GT1JNQVRfQllURVMsIGZsYWdzLAotICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgc2Vla3Bvcywgc3RvcF90eXBlLCBzZWVrc3RvcCk7Ci0gICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKG5ld19ldmVudCwgc2VxbnVtKTsKLQotICAgIC8qIHN0b3JlIHNlZ21lbnQgaW5mbyBzbyBpdHMgcHJlY2lzZSBkZXRhaWxzIGNhbiBiZSByZWNvbnN0cnVjdGVkIHdoZW4KLSAgICAgKiByZWNlaXZpbmcgbmV3c2VnbWVudDsKLSAgICAgKiB0aGlzIG1hdHRlcnMgZm9yIGFsbCBkZXRhaWxzIHdoZW4gYWNjdXJhdGUgc2Vla2luZywKLSAgICAgKiBpcyBtb3N0IHVzZWZ1bCB0byBwcmVzZXJ2ZSBOT05FIHN0b3AgdGltZSBvdGhlcndpc2UgKi8KLSAgICBzZWVrID0gZ19uZXcwIChHc3RCYXNlUGFyc2VTZWVrLCAxKTsKLSAgICBzZWVrLT5zZWdtZW50ID0gc2Vla3NlZ21lbnQ7Ci0gICAgc2Vlay0+YWNjdXJhdGUgPSBhY2N1cmF0ZTsKLSAgICBzZWVrLT5vZmZzZXQgPSBzZWVrcG9zOwotICAgIHNlZWstPnN0YXJ0X3RzID0gc3RhcnRfdHM7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gICAgLyogbGVzcyBvcHRpbWFsLCBidXQgcHJlc2VydmVzIG9yZGVyICovCi0gICAgcGFyc2UtPnByaXYtPnBlbmRpbmdfc2Vla3MgPQotICAgICAgICBnX3NsaXN0X2FwcGVuZCAocGFyc2UtPnByaXYtPnBlbmRpbmdfc2Vla3MsIHNlZWspOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0KLSAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhcnNlLT5zaW5rcGFkLCBuZXdfZXZlbnQpOwotCi0gICAgaWYgKCFyZXMpIHsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICAgICAgcGFyc2UtPnByaXYtPnBlbmRpbmdfc2Vla3MgPQotICAgICAgICAgIGdfc2xpc3RfcmVtb3ZlIChwYXJzZS0+cHJpdi0+cGVuZGluZ19zZWVrcywgc2Vlayk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOwotICAgICAgZ19mcmVlIChzZWVrKTsKLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1uZWdhdGl2ZV9yYXRlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJuZWdhdGl2ZSBwbGF5YmFjayByYXRlcyBkZWxlZ2F0ZWQgdXBzdHJlYW0uIik7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci13cm9uZ190eXBlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ1bnN1cHBvcnRlZCBzZWVrIHR5cGUuIik7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci1ub19jb252ZXJ0X3RvX3RpbWU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWsgaW4gJXMgZm9ybWF0IHdhcyByZXF1ZXN0ZWQsIGJ1dCBzdWJjbGFzcyAiCi0gICAgICAgICJjb3VsZG4ndCBjb252ZXJ0IHRoYXQgaW50byBUSU1FIGZvcm1hdCIsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCkpOwotICAgIHJlcyA9IEZBTFNFOwotICAgIGdvdG8gZG9uZTsKLSAgfQotY29udmVydF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNvbnZlcnNpb24gVElNRSB0byBCWVRFUyBmYWlsZWQuIik7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9wYXJzZV9zZXRfdXBzdHJlYW1fdGFncyAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdFRhZ0xpc3QgKiB0YWdsaXN0KQotewotICBpZiAodGFnbGlzdCA9PSBwYXJzZS0+cHJpdi0+dXBzdHJlYW1fdGFncykKLSAgICByZXR1cm47Ci0KLSAgaWYgKHBhcnNlLT5wcml2LT51cHN0cmVhbV90YWdzKSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChwYXJzZS0+cHJpdi0+dXBzdHJlYW1fdGFncyk7Ci0gICAgcGFyc2UtPnByaXYtPnVwc3RyZWFtX3RhZ3MgPSBOVUxMOwotICB9Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgInVwc3RyZWFtIHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCB0YWdsaXN0KTsKLQotICBpZiAodGFnbGlzdCAhPSBOVUxMKQotICAgIHBhcnNlLT5wcml2LT51cHN0cmVhbV90YWdzID0gZ3N0X3RhZ19saXN0X3JlZiAodGFnbGlzdCk7Ci0KLSAgZ3N0X2Jhc2VfcGFyc2VfY2hlY2tfYml0cmF0ZV90YWdzIChwYXJzZSk7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfcGFyc2Vfc2V0X2luZGV4IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgR3N0QmFzZVBhcnNlICpwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChlbGVtZW50KTsKLQotICBHU1RfQkFTRV9QQVJTRV9JTkRFWF9MT0NLIChwYXJzZSk7Ci0gIGlmIChwYXJzZS0+cHJpdi0+aW5kZXgpCi0gICAgZ3N0X29iamVjdF91bnJlZiAocGFyc2UtPnByaXYtPmluZGV4KTsKLSAgaWYgKGluZGV4KSB7Ci0gICAgcGFyc2UtPnByaXYtPmluZGV4ID0gZ3N0X29iamVjdF9yZWYgKGluZGV4KTsKLSAgICBnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoaW5kZXgsIEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCi0gICAgICAgICZwYXJzZS0+cHJpdi0+aW5kZXhfaWQpOwotICAgIHBhcnNlLT5wcml2LT5vd25faW5kZXggPSBGQUxTRTsKLSAgfSBlbHNlIHsKLSAgICBwYXJzZS0+cHJpdi0+aW5kZXggPSBOVUxMOwotICB9Ci0gIEdTVF9CQVNFX1BBUlNFX0lOREVYX1VOTE9DSyAocGFyc2UpOwotfQotCi1zdGF0aWMgR3N0SW5kZXggKgotZ3N0X2Jhc2VfcGFyc2VfZ2V0X2luZGV4IChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0QmFzZVBhcnNlICpwYXJzZSA9IEdTVF9CQVNFX1BBUlNFIChlbGVtZW50KTsKLSAgR3N0SW5kZXggKnJlc3VsdCA9IE5VTEw7Ci0KLSAgR1NUX0JBU0VfUEFSU0VfSU5ERVhfTE9DSyAocGFyc2UpOwotICBpZiAocGFyc2UtPnByaXYtPmluZGV4KQotICAgIHJlc3VsdCA9IGdzdF9vYmplY3RfcmVmIChwYXJzZS0+cHJpdi0+aW5kZXgpOwotICBHU1RfQkFTRV9QQVJTRV9JTkRFWF9VTkxPQ0sgKHBhcnNlKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2Jhc2VfcGFyc2VfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0QmFzZVBhcnNlICpwYXJzZTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0OwotCi0gIHBhcnNlID0gR1NUX0JBU0VfUEFSU0UgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICAvKiBJZiB0aGlzIGlzIG91ciBvd24gaW5kZXggZGVzdHJveSBpdCBhcyB0aGUKLSAgICAgICAqIG9sZCBlbnRyaWVzIG1pZ2h0IGJlIHdyb25nIGZvciB0aGUgbmV3IHN0cmVhbSAqLwotICAgICAgR1NUX0JBU0VfUEFSU0VfSU5ERVhfTE9DSyAocGFyc2UpOwotICAgICAgaWYgKHBhcnNlLT5wcml2LT5vd25faW5kZXgpIHsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFyc2UtPnByaXYtPmluZGV4KTsKLSAgICAgICAgcGFyc2UtPnByaXYtPmluZGV4ID0gTlVMTDsKLSAgICAgICAgcGFyc2UtPnByaXYtPm93bl9pbmRleCA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICAvKiBJZiBubyBpbmRleCB3YXMgY3JlYXRlZCwgZ2VuZXJhdGUgb25lICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAoIXBhcnNlLT5wcml2LT5pbmRleCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJubyBpbmRleCBwcm92aWRlZCBjcmVhdGluZyBvdXIgb3duIik7Ci0KLSAgICAgICAgcGFyc2UtPnByaXYtPmluZGV4ID0gZ19vYmplY3RfbmV3IChnc3RfbWVtX2luZGV4X2dldF90eXBlICgpLCBOVUxMKTsKLSAgICAgICAgZ3N0X2luZGV4X2dldF93cml0ZXJfaWQgKHBhcnNlLT5wcml2LT5pbmRleCwgR1NUX09CSkVDVCAocGFyc2UpLAotICAgICAgICAgICAgJnBhcnNlLT5wcml2LT5pbmRleF9pZCk7Ci0gICAgICAgIHBhcnNlLT5wcml2LT5vd25faW5kZXggPSBUUlVFOwotICAgICAgfQotICAgICAgR1NUX0JBU0VfUEFSU0VfSU5ERVhfVU5MT0NLIChwYXJzZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXN1bHQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2Jhc2VfcGFyc2VfcmVzZXQgKHBhcnNlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfcGFyc2Vfc2V0X3RzX2F0X29mZnNldDoKLSAqIEBwYXJzZTogYSAjR3N0QmFzZVBhcnNlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgaW50byBjdXJyZW50IGJ1ZmZlcgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gYSBAaGFuZGxlX2ZyYW1lIGltcGxlbWVudGF0aW9uLgotICoKLSAqICNHc3RCYXNlUGFyc2UgY3JlYXRlcyBpbml0aWFsIHRpbWVzdGFtcHMgZm9yIGZyYW1lcyBieSB1c2luZyB0aGUgbGFzdAotICogdGltZXN0YW1wIHNlZW4gaW4gdGhlIHN0cmVhbSBiZWZvcmUgdGhlIGZyYW1lIHN0YXJ0cy4gIEluIGNlcnRhaW4KLSAqIGNhc2VzLCB0aGUgY29ycmVjdCB0aW1lc3RhbXBzIHdpbGwgb2NjdXIgaW4gdGhlIHN0cmVhbSBhZnRlciB0aGUKLSAqIHN0YXJ0IG9mIHRoZSBmcmFtZSwgYnV0IGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGFjdHVhbCBwaWN0dXJlIGRhdGEuCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgdGltZXN0YW1wcyBiYXNlZCBvbiB0aGUgb2Zmc2V0Ci0gKiBpbnRvIHRoZSBmcmFtZSBkYXRhIHRoYXQgdGhlIHBpY3R1cmUgc3RhcnRzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X2Jhc2VfcGFyc2Vfc2V0X3RzX2F0X29mZnNldCAoR3N0QmFzZVBhcnNlICogcGFyc2UsIGdzaXplIG9mZnNldCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHB0cywgZHRzOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1BBUlNFIChwYXJzZSkpOwotCi0gIHB0cyA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzX2F0X29mZnNldCAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIG9mZnNldCwgTlVMTCk7Ci0gIGR0cyA9IGdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldCAocGFyc2UtPnByaXYtPmFkYXB0ZXIsIG9mZnNldCwgTlVMTCk7Ci0KLSAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHRzKSB8fCAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR0cykpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgIm9mZnNldCBhZGFwdGVyIHRpbWVzdGFtcHMgZHRzPSUiIEdTVF9USU1FX0ZPUk1BVCAiIHB0cz0lIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGR0cyksIEdTVF9USU1FX0FSR1MgKHB0cykpOwotICB9Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHRzKSAmJiAocGFyc2UtPnByaXYtPnByZXZfcHRzICE9IHB0cykpCi0gICAgcGFyc2UtPnByaXYtPnByZXZfcHRzID0gcGFyc2UtPnByaXYtPm5leHRfcHRzID0gcHRzOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHRzKSAmJiAocGFyc2UtPnByaXYtPnByZXZfZHRzICE9IGR0cykpIHsKLSAgICBwYXJzZS0+cHJpdi0+cHJldl9kdHMgPSBwYXJzZS0+cHJpdi0+bmV4dF9kdHMgPSBkdHM7Ci0gICAgcGFyc2UtPnByaXYtPnByZXZfZHRzX2Zyb21fcHRzID0gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9wYXJzZV9tZXJnZV90YWdzOgotICogQHBhcnNlOiBhICNHc3RCYXNlUGFyc2UKLSAqIEB0YWdzOiAoYWxsb3ctbm9uZSk6IGEgI0dzdFRhZ0xpc3QgdG8gbWVyZ2UsIG9yIE5VTEwgdG8gdW5zZXQKLSAqICAgICBwcmV2aW91c2x5LXNldCB0YWdzCi0gKiBAbW9kZTogdGhlICNHc3RUYWdNZXJnZU1vZGUgdG8gdXNlLCB1c3VhbGx5ICNHU1RfVEFHX01FUkdFX1JFUExBQ0UKLSAqCi0gKiBTZXRzIHRoZSBwYXJzZXIgc3ViY2xhc3MncyB0YWdzIGFuZCBob3cgdGhleSBzaG91bGQgYmUgbWVyZ2VkIHdpdGggYW55Ci0gKiB1cHN0cmVhbSBzdHJlYW0gdGFncy4gVGhpcyB3aWxsIG92ZXJyaWRlIGFueSB0YWdzIHByZXZpb3VzbHktc2V0Ci0gKiB3aXRoIGdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MoKS4KLSAqCi0gKiBOb3RlIHRoYXQgdGhpcyBpcyBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UsIGFuZCB0aGUgc3ViY2xhc3MgaXMKLSAqIG5vdCByZXF1aXJlZCB0byB1c2UgdGhpcyBhbmQgY2FuIHN0aWxsIGRvIHRhZyBoYW5kbGluZyBvbiBpdHMgb3duLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFncyAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdFRhZ0xpc3QgKiB0YWdzLAotICAgIEdzdFRhZ01lcmdlTW9kZSBtb2RlKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9QQVJTRSAocGFyc2UpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAodGFncyA9PSBOVUxMIHx8IEdTVF9JU19UQUdfTElTVCAodGFncykpOwotICBnX3JldHVybl9pZl9mYWlsICh0YWdzID09IE5VTEwgfHwgbW9kZSAhPSBHU1RfVEFHX01FUkdFX1VOREVGSU5FRCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0KLSAgaWYgKHRhZ3MgIT0gcGFyc2UtPnByaXYtPnBhcnNlcl90YWdzKSB7Ci0gICAgaWYgKHBhcnNlLT5wcml2LT5wYXJzZXJfdGFncykgewotICAgICAgZ3N0X3RhZ19saXN0X3VucmVmIChwYXJzZS0+cHJpdi0+cGFyc2VyX3RhZ3MpOwotICAgICAgcGFyc2UtPnByaXYtPnBhcnNlcl90YWdzID0gTlVMTDsKLSAgICAgIHBhcnNlLT5wcml2LT5wYXJzZXJfdGFnc19tZXJnZV9tb2RlID0gR1NUX1RBR19NRVJHRV9BUFBFTkQ7Ci0gICAgfQotICAgIGlmICh0YWdzKSB7Ci0gICAgICBwYXJzZS0+cHJpdi0+cGFyc2VyX3RhZ3MgPSBnc3RfdGFnX2xpc3RfcmVmICh0YWdzKTsKLSAgICAgIHBhcnNlLT5wcml2LT5wYXJzZXJfdGFnc19tZXJnZV9tb2RlID0gbW9kZTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNldHRpbmcgcGFyc2VyIHRhZ3MgdG8gJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICAgIiAobW9kZSAlZCkiLCB0YWdzLCBwYXJzZS0+cHJpdi0+cGFyc2VyX3RhZ3NfbWVyZ2VfbW9kZSk7Ci0KLSAgICBnc3RfYmFzZV9wYXJzZV9jaGVja19iaXRyYXRlX3RhZ3MgKHBhcnNlKTsKLSAgICBwYXJzZS0+cHJpdi0+dGFnc19jaGFuZ2VkID0gVFJVRTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNlcGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMwODFlZi4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VwYXJzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9CQVNFX1BBUlNFX0hfXwotI2RlZmluZSBfX0dTVF9CQVNFX1BBUlNFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQkFTRV9QQVJTRSAgICAgICAgICAgIChnc3RfYmFzZV9wYXJzZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQkFTRV9QQVJTRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0JBU0VfUEFSU0UsR3N0QmFzZVBhcnNlKSkKLSNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfUEFSU0UsR3N0QmFzZVBhcnNlQ2xhc3MpKQotI2RlZmluZSBHU1RfQkFTRV9QQVJTRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksR1NUX1RZUEVfQkFTRV9QQVJTRSxHc3RCYXNlUGFyc2VDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19CQVNFX1BBUlNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQkFTRV9QQVJTRSkpCi0jZGVmaW5lIEdTVF9JU19CQVNFX1BBUlNFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9CQVNFX1BBUlNFKSkKLSNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfQ0FTVChvYmopICAgICAgICgoR3N0QmFzZVBhcnNlICopKG9iaikpCi0KLS8qKgotICogR1NUX0JBU0VfUEFSU0VfU1JDX1BBRDoKLSAqIEBvYmo6IGJhc2UgcGFyc2UgaW5zdGFuY2UKLSAqCi0gKiBHaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgc291cmNlICNHc3RQYWQgb2JqZWN0IG9mIHRoZSBlbGVtZW50LgotICovCi0jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQob2JqKSAgICAoR1NUX0JBU0VfUEFSU0VfQ0FTVCAob2JqKS0+c3JjcGFkKQotCi0vKioKLSAqIEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEOgotICogQG9iajogYmFzZSBwYXJzZSBpbnN0YW5jZQotICoKLSAqIEdpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSBzaW5rICNHc3RQYWQgb2JqZWN0IG9mIHRoZSBlbGVtZW50LgotICovCi0jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEKG9iaikgICAgKEdTVF9CQVNFX1BBUlNFX0NBU1QgKG9iaiktPnNpbmtwYWQpCi0KLS8qKgotICogR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEOgotICoKLSAqIEEgI0dzdEZsb3dSZXR1cm4gdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSBwYXJzZV9mcmFtZSB0bwotICogaW5kaWNhdGUgdGhhdCBubyBvdXRwdXQgYnVmZmVyIHdhcyBnZW5lcmF0ZWQsIG9yIGZyb20gcHJlX3B1c2hfZnJhbWUgdG8KLSAqIHRvIGZvcmVnbyBwdXNoaW5nIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBHU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQgICAgIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTCi0KLS8qIG5vdCBwdWJsaWMgQVBJLCB1c2UgYWNjZXNzb3IgbWFjcm9zIGJlbG93ICovCi0jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DICgxIDw8IDApCi0jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0ZMQUdfRFJBSU5JTkcgICgxIDw8IDEpCi0KLS8qKgotICogR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DOgotICogQHBhcnNlOiBiYXNlIHBhcnNlIGluc3RhbmNlCi0gKgotICogT2J0YWlucyBjdXJyZW50IHN5bmMgc3RhdHVzLgotICovCi0jZGVmaW5lIEdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQyhwYXJzZSkgKCEhKEdTVF9CQVNFX1BBUlNFX0NBU1QocGFyc2UpLT5mbGFncyAmIEdTVF9CQVNFX1BBUlNFX0ZMQUdfTE9TVF9TWU5DKSkKLQotLyoqCi0gKiBHU1RfQkFTRV9QQVJTRV9EUkFJTklORzoKLSAqIEBwYXJzZTogYmFzZSBwYXJzZSBpbnN0YW5jZQotICoKLSAqIE9idGFpbnMgY3VycmVudCBkcmFpbiBzdGF0dXMgKGllLiB3aGV0aGVyIEVPUyBoYXMgYmVlbiByZWNlaXZlZCBhbmQKLSAqIHRoZSBwYXJzZXIgaXMgbm93IHByb2Nlc3NpbmcgdGhlIGZyYW1lcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0pCi0gKi8KLSNkZWZpbmUgR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcocGFyc2UpICAoISEoR1NUX0JBU0VfUEFSU0VfQ0FTVChwYXJzZSktPmZsYWdzICYgR1NUX0JBU0VfUEFSU0VfRkxBR19EUkFJTklORykpCi0KLS8qKgotICogR3N0QmFzZVBhcnNlRnJhbWVGbGFnczoKLSAqIEBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PTkU6IG5vIGZsYWcKLSAqIEBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05FV19GUkFNRTogc2V0IGJ5IGJhc2VjbGFzcyBpZiBjdXJyZW50IGZyYW1lCi0gKiAgIGlzIHBhc3NlZCBmb3IgcHJvY2Vzc2luZyB0byB0aGUgc3ViY2xhc3MgZm9yIHRoZSBmaXJzdCB0aW1lCi0gKiAgIChhbmQgbm90IHNldCBvbiBzdWJzZXF1ZW50IGNhbGxzIHdpdGggc2FtZSBkYXRhKS4KLSAqIEBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PX0ZSQU1FOiBzZXQgdG8gaW5kaWNhdGUgdGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZQotICogICBjb3VudGVkIGFzIGZyYW1lLCBlLmcuIGlmIHRoaXMgZnJhbWUgaXMgZGVwZW5kZW50IG9uIGEgcHJldmlvdXMgb25lLgotICogICBBcyBpdCBpcyBub3QgY291bnRlZCBhcyBhIGZyYW1lLCBiaXRyYXRlIGluY3JlYXNlcyBidXQgZnJhbWUgdG8gdGltZQotICogICBjb252ZXJzaW9ucyBhcmUgbWFpbnRhaW5lZC4KLSAqIEBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVA6IEBwcmVfcHVzaF9mcmFtZSBjYW4gc2V0IHRoaXMgdG8gaW5kaWNhdGUKLSAqICAgIHRoYXQgcmVndWxhciBzZWdtZW50IGNsaXBwaW5nIGNhbiBzdGlsbCBiZSBwZXJmb3JtZWQgKGFzIG9wcG9zZWQgdG8KLSAqICAgIGFueSBjdXN0b20gb25lIGhhdmluZyBiZWVuIGRvbmUpLgotICogQEdTVF9CQVNFX1BBUlNFX0ZSQU1FX0ZMQUdfRFJPUDogaW5kaWNhdGVzIHRvIEBmaW5pc2hfZnJhbWUgdGhhdCB0aGUKLSAqICAgIHRoZSBmcmFtZSBzaG91bGQgYmUgZHJvcHBlZCAoYW5kIG1pZ2h0IGJlIGhhbmRsZWQgaW50ZXJuYWxseSBieSBzdWJjbGFzcykKLSAqIEBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX1FVRVVFOiBpbmRpY2F0ZXMgdG8gQGZpbmlzaF9mcmFtZSB0aGF0IHRoZQotICogICAgdGhlIGZyYW1lIHNob3VsZCBiZSBxdWV1ZWQgZm9yIG5vdyBhbmQgcHJvY2Vzc2VkIGZ1bGx5IGxhdGVyCi0gKiAgICB3aGVuIHRoZSBmaXJzdCBub24tcXVldWVkIGZyYW1lIGlzIGZpbmlzaGVkCi0gKgotICogRmxhZ3MgdG8gYmUgdXNlZCBpbiBhICNHc3RCYXNlUGFyc2VGcmFtZS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19OT05FICAgICAgICAgPSAwLAotICBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05FV19GUkFNRSAgICA9ICgxIDw8IDApLAotICBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX05PX0ZSQU1FICAgICA9ICgxIDw8IDEpLAotICBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVAgICAgICAgICA9ICgxIDw8IDIpLAotICBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0RST1AgICAgICAgICA9ICgxIDw8IDMpLAotICBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX1FVRVVFICAgICAgICA9ICgxIDw8IDQpCi19IEdzdEJhc2VQYXJzZUZyYW1lRmxhZ3M7Ci0KLS8qKgotICogR3N0QmFzZVBhcnNlRnJhbWU6Ci0gKiBAYnVmZmVyOiBpbnB1dCBkYXRhIHRvIGJlIHBhcnNlZCBmb3IgZnJhbWVzLgotICogQG91dF9idWZmZXI6IG91dHB1dCBkYXRhLgotICogQG9mZnNldDogbWVkaWEgc3BlY2lmaWMgb2Zmc2V0IG9mIGlucHV0IGZyYW1lCi0gKiAgIE5vdGUgdGhhdCBhIGNvbnZlcnRlciBtYXkgaGF2ZSBhIGRpZmZlcmVudCBvbmUgb24gdGhlIGZyYW1lJ3MgYnVmZmVyLgotICogQG92ZXJoZWFkOiBzdWJjbGFzcyBjYW4gc2V0IHRoaXMgdG8gaW5kaWNhdGVzIHRoZSBtZXRhZGF0YSBvdmVyaGVhZAotICogICBmb3IgdGhlIGdpdmVuIGZyYW1lLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gZW5hYmxlIG1vcmUgYWNjdXJhdGUgYml0cmF0ZQotICogICBjb21wdXRhdGlvbnMuIElmIHRoaXMgaXMgLTEsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGlzIGZyYW1lIHNob3VsZCBiZQotICogICBza2lwcGVkIGluIGJpdHJhdGUgY2FsY3VsYXRpb24uCi0gKiBAZmxhZ3M6IGEgY29tYmluYXRpb24gb2YgaW5wdXQgYW5kIG91dHB1dCAjR3N0QmFzZVBhcnNlRnJhbWVGbGFncyB0aGF0Ci0gKiAgY29udmV5IGFkZGl0aW9uYWwgY29udGV4dCB0byBzdWJjbGFzcyBvciBhbGxvdyBzdWJjbGFzcyB0byB0dW5lCi0gKiAgc3Vic2VxdWVudCAjR3N0QmFzZVBhcnNlIGFjdGlvbnMuCi0gKgotICogRnJhbWUgKGNvbnRleHQpIGRhdGEgcGFzc2VkIHRvIGVhY2ggZnJhbWUgcGFyc2luZyB2aXJ0dWFsIG1ldGhvZHMuICBJbgotICogYWRkaXRpb24gdG8gcHJvdmlkaW5nIHRoZSBkYXRhIHRvIGJlIGNoZWNrZWQgZm9yIGEgdmFsaWQgZnJhbWUgb3IgYW4gYWxyZWFkeQotICogaWRlbnRpZmllZCBmcmFtZSwgaXQgY29udmV5cyBhZGRpdGlvbmFsIG1ldGFkYXRhIG9yIGNvbnRyb2wgaW5mb3JtYXRpb24KLSAqIGZyb20gYW5kIHRvIHRoZSBzdWJjbGFzcyB3LnIudC4gdGhlIHBhcnRpY3VsYXIgZnJhbWUgaW4gcXVlc3Rpb24gKHJhdGhlcgotICogdGhhbiBnbG9iYWwgcGFyYW1ldGVycykuICBTb21lIG9mIHRoZXNlIG1heSBhcHBseSB0byBlYWNoIHBhcnNpbmcgc3RhZ2UsIG90aGVycwotICogb25seSB0byBzb21lIGEgcGFydGljdWxhciBvbmUuICBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBlZmZlY3RpdmVseSB6ZXJvZWQgYXQgc3RhcnQKLSAqIG9mIGVhY2ggZnJhbWUncyBwcm9jZXNzaW5nLCBpLmUuIHBhcnNpbmcgdmlydHVhbCBtZXRob2QgaW52b2NhdGlvbiBzZXF1ZW5jZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBHc3RCdWZmZXIgKiBidWZmZXI7Ci0gIEdzdEJ1ZmZlciAqIG91dF9idWZmZXI7Ci0gIGd1aW50ICAgICAgIGZsYWdzOwotICBndWludDY0ICAgICBvZmZzZXQ7Ci0gIGdpbnQgICAgICAgIG92ZXJoZWFkOwotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ2ludCAgICAgICAgc2l6ZTsKLSAgZ3VpbnQgICAgICAgX2dzdF9yZXNlcnZlZF9pWzJdOwotICBncG9pbnRlciAgICBfZ3N0X3Jlc2VydmVkX3BbMl07Ci0gIGd1aW50ICAgICAgIF9wcml2YXRlX2ZsYWdzOwotfSBHc3RCYXNlUGFyc2VGcmFtZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEJhc2VQYXJzZSBHc3RCYXNlUGFyc2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVBhcnNlQ2xhc3MgR3N0QmFzZVBhcnNlQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVBhcnNlUHJpdmF0ZSBHc3RCYXNlUGFyc2VQcml2YXRlOwotCi0vKioKLSAqIEdzdEJhc2VQYXJzZToKLSAqIEBlbGVtZW50OiB0aGUgcGFyZW50IGVsZW1lbnQuCi0gKgotICogVGhlIG9wYXF1ZSAjR3N0QmFzZVBhcnNlIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdEJhc2VQYXJzZSB7Ci0gIC8qPCBwdWJsaWMgPiovCi0gIEdzdEVsZW1lbnQgICAgIGVsZW1lbnQ7Ci0KLSAgLyo8IHByb3RlY3RlZCA+Ki8KLSAgLyogc291cmNlIGFuZCBzaW5rIHBhZHMgKi8KLSAgR3N0UGFkICAgICAgICAgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAgICAgICAgICpzcmNwYWQ7Ci0KLSAgZ3VpbnQgICAgICAgICAgIGZsYWdzOwotCi0gIC8qIE1ULXByb3RlY3RlZCAod2l0aCBTVFJFQU1fTE9DSykgKi8KLSAgR3N0U2VnbWVudCAgICAgIHNlZ21lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyICAgICAgIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkdfTEFSR0VdOwotICBHc3RCYXNlUGFyc2VQcml2YXRlICpwcml2OwotfTsKLQotLyoqCi0gKiBHc3RCYXNlUGFyc2VDbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IHRoZSBwYXJlbnQgY2xhc3MKLSAqIEBzdGFydDogICAgICAgICAgT3B0aW9uYWwuCi0gKiAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IHN0YXJ0cyBwcm9jZXNzaW5nLgotICogICAgICAgICAgICAgICAgICBBbGxvd3Mgb3BlbmluZyBleHRlcm5hbCByZXNvdXJjZXMuCi0gKiBAc3RvcDogICAgICAgICAgIE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBzdG9wcyBwcm9jZXNzaW5nLgotICogICAgICAgICAgICAgICAgICBBbGxvd3MgY2xvc2luZyBleHRlcm5hbCByZXNvdXJjZXMuCi0gKiBAc2V0X3NpbmtfY2FwczogIE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICBBbGxvd3MgdGhlIHN1YmNsYXNzIHRvIGJlIG5vdGlmaWVkIG9mIHRoZSBhY3R1YWwgY2FwcyBzZXQuCi0gKiBAZ2V0X3NpbmtfY2FwczogIE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICBBbGxvd3MgdGhlIHN1YmNsYXNzIHRvIGRvIGl0cyBvd24gc2luayBnZXQgY2FwcyBpZiBuZWVkZWQuCi0gKiBAaGFuZGxlX2ZyYW1lOiAgIFBhcnNlcyB0aGUgaW5wdXQgZGF0YSBpbnRvIHZhbGlkIGZyYW1lcyBhcyBkZWZpbmVkIGJ5IHN1YmNsYXNzCi0gKiAgICAgICAgICAgICAgICAgIHdoaWNoIHNob3VsZCBiZSBwYXNzZWQgdG8gZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lKCkuCi0gKiAgICAgICAgICAgICAgICAgIFRoZSBmcmFtZSdzIGlucHV0IGJ1ZmZlciBpcyBndWFyYW50ZWVkIHdyaXRhYmxlLAotICogICAgICAgICAgICAgICAgICB3aGVyZWFzIHRoZSBpbnB1dCBmcmFtZSBvd25lcnNoaXAgaXMgaGVsZCBieSBjYWxsZXIKLSAqICAgICAgICAgICAgICAgICAgKHNvIHN1YmNsYXNzIHNob3VsZCBtYWtlIGEgY29weSBpZiBpdCBuZWVkcyB0byBoYW5nIG9uKS4KLSAqICAgICAgICAgICAgICAgICAgSW5wdXQgYnVmZmVyIChkYXRhKSBpcyBwcm92aWRlZCBieSBiYXNlY2xhc3Mgd2l0aCBhcyBtdWNoCi0gKiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhIHNldCBhcyBwb3NzaWJsZSBieSBiYXNlY2xhc3MgYWNjb3JkaW5nIHRvIHVwc3RyZWFtCi0gKiAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFuZC9vciBzdWJjbGFzcyBzZXR0aW5ncywKLSAqICAgICAgICAgICAgICAgICAgdGhvdWdoIHN1YmNsYXNzIG1heSBzdGlsbCBzZXQgYnVmZmVyIHRpbWVzdGFtcCBhbmQgZHVyYXRpb24KLSAqICAgICAgICAgICAgICAgICAgaWYgZGVzaXJlZC4KLSAqIEBjb252ZXJ0OiAgICAgICAgT3B0aW9uYWwuCi0gKiAgICAgICAgICAgICAgICAgIENvbnZlcnQgYmV0d2VlbiBmb3JtYXRzLgotICogQHNpbmtfZXZlbnQ6ICAgICBPcHRpb25hbC4KLSAqICAgICAgICAgICAgICAgICAgRXZlbnQgaGFuZGxlciBvbiB0aGUgc2luayBwYWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNoYWluCi0gKiAgICAgICAgICAgICAgICAgIHVwIHRvIHRoZSBwYXJlbnQgaW1wbGVtZW50YXRpb24gdG8gbGV0IHRoZSBkZWZhdWx0IGhhbmRsZXIKLSAqICAgICAgICAgICAgICAgICAgcnVuLgotICogQHNyY19ldmVudDogICAgICBPcHRpb25hbC4KLSAqICAgICAgICAgICAgICAgICAgRXZlbnQgaGFuZGxlciBvbiB0aGUgc291cmNlIHBhZC4gU2hvdWxkIGNoYWluIHVwIHRvIHRoZQotICogICAgICAgICAgICAgICAgICBwYXJlbnQgdG8gbGV0IHRoZSBkZWZhdWx0IGhhbmRsZXIgcnVuLgotICogQHByZV9wdXNoX2ZyYW1lOiBPcHRpb25hbC4KLSAqICAgICAgICAgICAgICAgICAgIENhbGxlZCBqdXN0IHByaW9yIHRvIHB1c2hpbmcgYSBmcmFtZSAoYWZ0ZXIgYW55IHBlbmRpbmcKLSAqICAgICAgICAgICAgICAgICAgIGV2ZW50cyBoYXZlIGJlZW4gc2VudCkgdG8gZ2l2ZSBzdWJjbGFzcyBhIGNoYW5jZSB0byBwZXJmb3JtCi0gKiAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGFjdGlvbnMgYXQgdGhpcyB0aW1lIChlLmcuIHRhZyBzZW5kaW5nKSBvciB0bwotICogICAgICAgICAgICAgICAgICAgZGVjaWRlIHdoZXRoZXIgdGhpcyBidWZmZXIgc2hvdWxkIGJlIGRyb3BwZWQgb3Igbm90Ci0gKiAgICAgICAgICAgICAgICAgICAoZS5nLiBjdXN0b20gc2VnbWVudCBjbGlwcGluZykuCi0gKiBAZGV0ZWN0OiAgICAgICAgIE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICAgQ2FsbGVkIHVudGlsIGl0IGRvZXNuJ3QgcmV0dXJuIEdTVF9GTE9XX09LIGFueW1vcmUgZm9yCi0gKiAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgYnVmZmVycy4gQ2FuIGJlIHVzZWQgYnkgdGhlIHN1YmNsYXNzIHRvIGRldGVjdAotICogICAgICAgICAgICAgICAgICAgdGhlIHN0cmVhbSBmb3JtYXQuCi0gKiBAc2lua19xdWVyeTogICAgIE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICAgUXVlcnkgaGFuZGxlciBvbiB0aGUgc2luayBwYWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNoYWluCi0gKiAgICAgICAgICAgICAgICAgICB1cCB0byB0aGUgcGFyZW50IGltcGxlbWVudGF0aW9uIHRvIGxldCB0aGUgZGVmYXVsdCBoYW5kbGVyCi0gKiAgICAgICAgICAgICAgICAgICBydW4gKFNpbmNlIDEuMikKLSAqIEBzcmNfcXVlcnk6ICAgICAgT3B0aW9uYWwuCi0gKiAgICAgICAgICAgICAgICAgICBRdWVyeSBoYW5kbGVyIG9uIHRoZSBzb3VyY2UgcGFkLiBTaG91bGQgY2hhaW4gdXAgdG8gdGhlCi0gKiAgICAgICAgICAgICAgICAgICBwYXJlbnQgdG8gbGV0IHRoZSBkZWZhdWx0IGhhbmRsZXIgcnVuIChTaW5jZSAxLjIpCi0gKgotICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZSBhdmFpbGFibGUgdmlydHVhbCBtZXRob2RzIG9yIG5vdCwgYXMKLSAqIG5lZWRlZC4gQXQgbWluaW11bSBAaGFuZGxlX2ZyYW1lIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4uCi0gKi8KLXN0cnVjdCBfR3N0QmFzZVBhcnNlQ2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qPCBwdWJsaWMgPiovCi0gIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLwotCi0gIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgICAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7Ci0KLSAgZ2Jvb2xlYW4gICAgICAoKnN0b3ApICAgICAgICAgICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLQotICBnYm9vbGVhbiAgICAgICgqc2V0X3NpbmtfY2FwcykgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgKiBjYXBzKTsKLQotICBHc3RGbG93UmV0dXJuICgqaGFuZGxlX2ZyYW1lKSAgICAgICAoR3N0QmFzZVBhcnNlICAgICAgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAqIHNraXBzaXplKTsKLQotICBHc3RGbG93UmV0dXJuICgqcHJlX3B1c2hfZnJhbWUpICAgICAoR3N0QmFzZVBhcnNlICAgICAgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpOwotCi0gIGdib29sZWFuICAgICAgKCpjb252ZXJ0KSAgICAgICAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCAgICAgIHNyY19mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgICBzcmNfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgICAgICBkZXN0X2Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAqIGRlc3RfdmFsdWUpOwotCi0gIGdib29sZWFuICAgICAgKCpzaW5rX2V2ZW50KSAgICAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEV2ZW50ICAgICAqIGV2ZW50KTsKLQotICBnYm9vbGVhbiAgICAgICgqc3JjX2V2ZW50KSAgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFdmVudCAgICAgKiBldmVudCk7Ci0KLSAgR3N0Q2FwcyAqICAgICAoKmdldF9zaW5rX2NhcHMpICAgICAgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAgICAgICogZmlsdGVyKTsKLQotICBHc3RGbG93UmV0dXJuICgqZGV0ZWN0KSAgICAgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgICAgKiBidWZmZXIpOwotCi0gIGdib29sZWFuICAgICAgKCpzaW5rX3F1ZXJ5KSAgICAgICAgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFF1ZXJ5ICAgICAqIHF1ZXJ5KTsKLQotICBnYm9vbGVhbiAgICAgICgqc3JjX3F1ZXJ5KSAgICAgICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAgICAgKiBxdWVyeSk7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyICAgICAgIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkdfTEFSR0UgLSAyXTsKLX07Ci0KLUdUeXBlICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdUeXBlICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9mcmFtZV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdzdEJhc2VQYXJzZUZyYW1lICogZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfbmV3ICAoR3N0QnVmZmVyICAgICAgICAgICAgICAqIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QmFzZVBhcnNlRnJhbWVGbGFncyAgIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgICAgICAgb3ZlcmhlYWQpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfaW5pdCAgICAgIChHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUgICAgICAoR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7Ci0KLUdzdEZsb3dSZXR1cm4gICBnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lICAgICAgKEdzdEJhc2VQYXJzZSAgICAgICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKTsKLQotR3N0Rmxvd1JldHVybiAgIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZSAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBzaXplKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbiAgICAoR3N0QmFzZVBhcnNlICAgICAgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCAgICAgICAgICAgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0ICAgICAgICAgICAgICBkdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICAgaW50ZXJ2YWwpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSAoR3N0QmFzZVBhcnNlICAgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgIGJpdHJhdGUpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplIChHc3RCYXNlUGFyc2UgICAgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgIG1pbl9zaXplKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9oYXNfdGltaW5nX2luZm8gKEdzdEJhc2VQYXJzZSAgICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICBoYXNfdGltaW5nKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZSAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICBzeW5jYWJsZSk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2ggKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgcGFzc3Rocm91Z2gpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3B0c19pbnRlcnBvbGF0aW9uIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHB0c19pbnRlcnBvbGF0ZSk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfaW5mZXJfdHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaW5mZXJfdHMpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGUgIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGZwc19udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICBmcHNfZGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgbGVhZF9pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGxlYWRfb3V0KTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9sYXRlbmN5ICAgICAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgbWluX2xhdGVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgbWF4X2xhdGVuY3kpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfY29udmVydF9kZWZhdWx0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCAgICAgIHNyY19mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgICBzcmNfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgICAgICBkZXN0X2Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAqIGRlc3RfdmFsdWUpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAgIHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgZm9yY2UpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3RzX2F0X29mZnNldCAoR3N0QmFzZVBhcnNlICpwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBvZmZzZXQpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFncyAgICAgICAoR3N0QmFzZVBhcnNlICAqIHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRhZ0xpc3QgICAgKiB0YWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRhZ01lcmdlTW9kZSBtb2RlKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RCYXNlUGFyc2VGcmFtZSwgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSkKLSNlbmRpZgotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdEJhc2VQYXJzZSwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQkFTRV9QQVJTRV9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdkODU5Ni4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTkzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBnc3RiYXNlc2luay5jOiBCYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGJhc2VzaW5rCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIHNpbmsgZWxlbWVudHMKLSAqIEBzZWVfYWxzbzogI0dzdEJhc2VUcmFuc2Zvcm0sICNHc3RCYXNlU3JjCi0gKgotICogI0dzdEJhc2VTaW5rIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBzaW5rIGVsZW1lbnRzIGluIEdTdHJlYW1lciwgc3VjaCBhcwotICogeHZpbWFnZXNpbmsgb3IgZmlsZXNpbmsuIEl0IGlzIGEgbGF5ZXIgb24gdG9wIG9mICNHc3RFbGVtZW50IHRoYXQgcHJvdmlkZXMgYQotICogc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gcGx1Z2luIHdyaXRlcnMuICNHc3RCYXNlU2luayBoYW5kbGVzIG1hbnkgZGV0YWlscwotICogZm9yIHlvdSwgZm9yIGV4YW1wbGU6IHByZXJvbGwsIGNsb2NrIHN5bmNocm9uaXphdGlvbiwgc3RhdGUgY2hhbmdlcywKLSAqIGFjdGl2YXRpb24gaW4gcHVzaCBvciBwdWxsIG1vZGUsIGFuZCBxdWVyaWVzLgotICoKLSAqIEluIG1vc3QgY2FzZXMsIHdoZW4gd3JpdGluZyBzaW5rIGVsZW1lbnRzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGltcGxlbWVudAotICogY2xhc3MgbWV0aG9kcyBmcm9tICNHc3RFbGVtZW50IG9yIHRvIHNldCBmdW5jdGlvbnMgb24gcGFkcywgYmVjYXVzZSB0aGUKLSAqICNHc3RCYXNlU2luayBpbmZyYXN0cnVjdHVyZSBzaG91bGQgYmUgc3VmZmljaWVudC4KLSAqCi0gKiAjR3N0QmFzZVNpbmsgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZXhhY3RseSBvbmUgc2luayBwYWQsIHdoaWNoIHNob3VsZCBiZQotICogbmFtZWQgInNpbmsiLiBBIHNpbmsgaW1wbGVtZW50YXRpb24gKHN1YmNsYXNzIG9mICNHc3RCYXNlU2luaykgc2hvdWxkCi0gKiBpbnN0YWxsIGEgcGFkIHRlbXBsYXRlIGluIGl0cyBjbGFzc19pbml0IGZ1bmN0aW9uLCBsaWtlIHNvOgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqIHN0YXRpYyB2b2lkCi0gKiBteV9lbGVtZW50X2NsYXNzX2luaXQgKEdzdE15RWxlbWVudENsYXNzICprbGFzcykKLSAqIHsKLSAqICAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAqCi0gKiAgIC8vIHNpbmt0ZW1wbGF0ZSBzaG91bGQgYmUgYSAjR3N0U3RhdGljUGFkVGVtcGxhdGUgd2l0aCBkaXJlY3Rpb24KLSAqICAgLy8gJUdTVF9QQURfU0lOSyBhbmQgbmFtZSAic2luayIKLSAqICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZhbXA7c2lua3RlbXBsYXRlKTsKLSAqCi0gKiAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gKiAgICAgICAiU2luayBuYW1lIiwKLSAqICAgICAgICJTaW5rIiwKLSAqICAgICAgICJNeSBTaW5rIGVsZW1lbnQiLAotICogICAgICAgIlRoZSBhdXRob3IgJmx0O215LnNpbmtAbXkuZW1haWwmZ3Q7Iik7Ci0gKiB9Ci0gKiBdfAotICoKLSAqICNHc3RCYXNlU2luayB3aWxsIGhhbmRsZSB0aGUgcHJlcm9sbGluZyBjb3JyZWN0bHkuIFRoaXMgbWVhbnMgdGhhdCBpdCB3aWxsCi0gKiByZXR1cm4gJUdTVF9TVEFURV9DSEFOR0VfQVNZTkMgZnJvbSBhIHN0YXRlIGNoYW5nZSB0byBQQVVTRUQgdW50aWwgdGhlIGZpcnN0Ci0gKiBidWZmZXIgYXJyaXZlcyBpbiB0aGlzIGVsZW1lbnQuIFRoZSBiYXNlIGNsYXNzIHdpbGwgY2FsbCB0aGUKLSAqICNHc3RCYXNlU2lua0NsYXNzLnByZXJvbGwoKSB2bWV0aG9kIHdpdGggdGhpcyBwcmVyb2xsIGJ1ZmZlciBhbmQgd2lsbCB0aGVuCi0gKiBjb21taXQgdGhlIHN0YXRlIGNoYW5nZSB0byB0aGUgbmV4dCBhc3luY2hyb25vdXNseSBwZW5kaW5nIHN0YXRlLgotICoKLSAqIFdoZW4gdGhlIGVsZW1lbnQgaXMgc2V0IHRvIFBMQVlJTkcsICNHc3RCYXNlU2luayB3aWxsIHN5bmNocm9uaXNlIG9uIHRoZQotICogY2xvY2sgdXNpbmcgdGhlIHRpbWVzIHJldHVybmVkIGZyb20gI0dzdEJhc2VTaW5rQ2xhc3MuZ2V0X3RpbWVzKCkuIElmIHRoaXMKLSAqIGZ1bmN0aW9uIHJldHVybnMgJUdTVF9DTE9DS19USU1FX05PTkUgZm9yIHRoZSBzdGFydCB0aW1lLCBubyBzeW5jaHJvbmlzYXRpb24KLSAqIHdpbGwgYmUgZG9uZS4gU3luY2hyb25pc2F0aW9uIGNhbiBiZSBkaXNhYmxlZCBlbnRpcmVseSBieSBzZXR0aW5nIHRoZSBvYmplY3QKLSAqICNHc3RCYXNlU2luazpzeW5jIHByb3BlcnR5IHRvICVGQUxTRS4KLSAqCi0gKiBBZnRlciBzeW5jaHJvbmlzYXRpb24gdGhlIHZpcnR1YWwgbWV0aG9kICNHc3RCYXNlU2lua0NsYXNzLnJlbmRlcigpIHdpbGwgYmUKLSAqIGNhbGxlZC4gU3ViY2xhc3NlcyBzaG91bGQgbWluaW1hbGx5IGltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAqCi0gKiBTdWJjbGFzc2VzIHRoYXQgc3luY2hyb25pc2Ugb24gdGhlIGNsb2NrIGluIHRoZSAjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKQotICogbWV0aG9kIGFyZSBzdXBwb3J0ZWQgYXMgd2VsbC4gVGhlc2UgY2xhc3NlcyB0eXBpY2FsbHkgcmVjZWl2ZSBhIGJ1ZmZlciBpbgotICogdGhlIHJlbmRlciBtZXRob2QgYW5kIGNhbiB0aGVuIHBvdGVudGlhbGx5IGJsb2NrIG9uIHRoZSBjbG9jayB3aGlsZQotICogcmVuZGVyaW5nLiBBIHR5cGljYWwgZXhhbXBsZSBpcyBhbiBhdWRpb3NpbmsuCi0gKiBUaGVzZSBzdWJjbGFzc2VzIGNhbiB1c2UgZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwoKSB0byBwZXJmb3JtIHRoZQotICogYmxvY2tpbmcgd2FpdC4KLSAqCi0gKiBVcG9uIHJlY2VpdmluZyB0aGUgRU9TIGV2ZW50IGluIHRoZSBQTEFZSU5HIHN0YXRlLCAjR3N0QmFzZVNpbmsgd2lsbCB3YWl0Ci0gKiBmb3IgdGhlIGNsb2NrIHRvIHJlYWNoIHRoZSB0aW1lIGluZGljYXRlZCBieSB0aGUgc3RvcCB0aW1lIG9mIHRoZSBsYXN0Ci0gKiAjR3N0QmFzZVNpbmtDbGFzcy5nZXRfdGltZXMoKSBjYWxsIGJlZm9yZSBwb3N0aW5nIGFuIEVPUyBtZXNzYWdlLiBXaGVuIHRoZQotICogZWxlbWVudCByZWNlaXZlcyBFT1MgaW4gUEFVU0VELCBwcmVyb2xsIGNvbXBsZXRlcywgdGhlIGV2ZW50IGlzIHF1ZXVlZCBhbmQgYW4KLSAqIEVPUyBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIGdvaW5nIHRvIFBMQVlJTkcuCi0gKgotICogI0dzdEJhc2VTaW5rIHdpbGwgaW50ZXJuYWxseSB1c2UgdGhlICVHU1RfRVZFTlRfU0VHTUVOVCBldmVudHMgdG8gc2NoZWR1bGUKLSAqIHN5bmNocm9uaXNhdGlvbiBhbmQgY2xpcHBpbmcgb2YgYnVmZmVycy4gQnVmZmVycyB0aGF0IGZhbGwgY29tcGxldGVseSBvdXRzaWRlCi0gKiBvZiB0aGUgY3VycmVudCBzZWdtZW50IGFyZSBkcm9wcGVkLiBCdWZmZXJzIHRoYXQgZmFsbCBwYXJ0aWFsbHkgaW4gdGhlCi0gKiBzZWdtZW50IGFyZSByZW5kZXJlZCAoYW5kIHByZXJvbGxlZCkuIFN1YmNsYXNzZXMgc2hvdWxkIGRvIGFueSBzdWJidWZmZXIKLSAqIGNsaXBwaW5nIHRoZW1zZWx2ZXMgd2hlbiBuZWVkZWQuCi0gKgotICogI0dzdEJhc2VTaW5rIHdpbGwgYnkgZGVmYXVsdCByZXBvcnQgdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gaW4KLSAqICVHU1RfRk9STUFUX1RJTUUgYmFzZWQgb24gdGhlIGN1cnJlbnQgY2xvY2sgdGltZSBhbmQgc2VnbWVudCBpbmZvcm1hdGlvbi4KLSAqIElmIG5vIGNsb2NrIGhhcyBiZWVuIHNldCBvbiB0aGUgZWxlbWVudCwgdGhlIHF1ZXJ5IHdpbGwgYmUgZm9yd2FyZGVkCi0gKiB1cHN0cmVhbS4KLSAqCi0gKiBUaGUgI0dzdEJhc2VTaW5rQ2xhc3Muc2V0X2NhcHMoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzdWJjbGFzcwotICogc2hvdWxkIGNvbmZpZ3VyZSBpdHNlbGYgdG8gcHJvY2VzcyBhIHNwZWNpZmljIG1lZGlhIHR5cGUuCi0gKgotICogVGhlICNHc3RCYXNlU2lua0NsYXNzLnN0YXJ0KCkgYW5kICNHc3RCYXNlU2lua0NsYXNzLnN0b3AoKSB2aXJ0dWFsIG1ldGhvZHMKLSAqIHdpbGwgYmUgY2FsbGVkIHdoZW4gcmVzb3VyY2VzIHNob3VsZCBiZSBhbGxvY2F0ZWQuIEFueSAKLSAqICNHc3RCYXNlU2lua0NsYXNzLnByZXJvbGwoKSwgI0dzdEJhc2VTaW5rQ2xhc3MucmVuZGVyKCkgYW5kCi0gKiAjR3N0QmFzZVNpbmtDbGFzcy5zZXRfY2FwcygpIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJldHdlZW4gdGhlCi0gKiAjR3N0QmFzZVNpbmtDbGFzcy5zdGFydCgpIGFuZCAjR3N0QmFzZVNpbmtDbGFzcy5zdG9wKCkgY2FsbHMuCi0gKgotICogVGhlICNHc3RCYXNlU2lua0NsYXNzLmV2ZW50KCkgdmlydHVhbCBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2hlbiBhbiBldmVudCBpcwotICogcmVjZWl2ZWQgYnkgI0dzdEJhc2VTaW5rLiBOb3JtYWxseSB0aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBvdmVycmlkZGVuIGJ5Ci0gKiB2ZXJ5IHNwZWNpZmljIGVsZW1lbnRzIChzdWNoIGFzIGZpbGUgc2lua3MpIHdoaWNoIG5lZWQgdG8gaGFuZGxlIHRoZQotICogbmV3c2VnbWVudCBldmVudCBzcGVjaWFsbHkuCi0gKgotICogVGhlICNHc3RCYXNlU2lua0NsYXNzLnVubG9jaygpIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudHMgc2hvdWxkCi0gKiB1bmJsb2NrIGFueSBibG9ja2luZyBvcGVyYXRpb25zIHRoZXkgcGVyZm9ybSBpbiB0aGUKLSAqICNHc3RCYXNlU2lua0NsYXNzLnJlbmRlcigpIG1ldGhvZC4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gdGhlCi0gKiAjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKSBtZXRob2QgcGVyZm9ybXMgYSBibG9ja2luZyB3cml0ZSBvbiBhIGZpbGUKLSAqIGRlc2NyaXB0b3IsIGZvciBleGFtcGxlLgotICoKLSAqIFRoZSAjR3N0QmFzZVNpbms6bWF4LWxhdGVuZXNzIHByb3BlcnR5IGFmZmVjdHMgaG93IHRoZSBzaW5rIGRlYWxzIHdpdGgKLSAqIGJ1ZmZlcnMgdGhhdCBhcnJpdmUgdG9vIGxhdGUgaW4gdGhlIHNpbmsuIEEgYnVmZmVyIGFycml2ZXMgdG9vIGxhdGUgaW4gdGhlCi0gKiBzaW5rIHdoZW4gdGhlIHByZXNlbnRhdGlvbiB0aW1lIChhcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBsYXN0IHNlZ21lbnQsIGJ1ZmZlcgotICogdGltZXN0YW1wIGFuZCBlbGVtZW50IGJhc2VfdGltZSkgcGx1cyB0aGUgZHVyYXRpb24gaXMgYmVmb3JlIHRoZSBjdXJyZW50Ci0gKiB0aW1lIG9mIHRoZSBjbG9jay4KLSAqIElmIHRoZSBmcmFtZSBpcyBsYXRlciB0aGFuIG1heC1sYXRlbmVzcywgdGhlIHNpbmsgd2lsbCBkcm9wIHRoZSBidWZmZXIKLSAqIHdpdGhvdXQgY2FsbGluZyB0aGUgcmVuZGVyIG1ldGhvZC4KLSAqIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBpZiBzeW5jIGlzIGRpc2FibGVkLCB0aGUKLSAqICNHc3RCYXNlU2lua0NsYXNzLmdldF90aW1lcygpIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYSB2YWxpZCBzdGFydCB0aW1lIG9yCi0gKiBtYXgtbGF0ZW5lc3MgaXMgc2V0IHRvIC0xICh0aGUgZGVmYXVsdCkuCi0gKiBTdWJjbGFzc2VzIGNhbiB1c2UgZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzKCkgdG8gY29uZmlndXJlIHRoZQotICogbWF4LWxhdGVuZXNzIHZhbHVlLgotICoKLSAqIFRoZSAjR3N0QmFzZVNpbms6cW9zIHByb3BlcnR5IHdpbGwgZW5hYmxlIHRoZSBxdWFsaXR5LW9mLXNlcnZpY2UgZmVhdHVyZXMgb2YKLSAqIHRoZSBiYXNlc2luayB3aGljaCBnYXRoZXIgc3RhdGlzdGljcyBhYm91dCB0aGUgcmVhbC10aW1lIHBlcmZvcm1hbmNlIG9mIHRoZQotICogY2xvY2sgc3luY2hyb25pc2F0aW9uLiBGb3IgZWFjaCBidWZmZXIgcmVjZWl2ZWQgaW4gdGhlIHNpbmssIHN0YXRpc3RpY3MgYXJlCi0gKiBnYXRoZXJlZCBhbmQgYSBRT1MgZXZlbnQgaXMgc2VudCB1cHN0cmVhbSB3aXRoIHRoZXNlIG51bWJlcnMuIFRoaXMKLSAqIGluZm9ybWF0aW9uIGNhbiB0aGVuIGJlIHVzZWQgYnkgdXBzdHJlYW0gZWxlbWVudHMgdG8gcmVkdWNlIHRoZWlyIHByb2Nlc3NpbmcKLSAqIHJhdGUsIGZvciBleGFtcGxlLgotICoKLSAqIFRoZSAjR3N0QmFzZVNpbms6YXN5bmMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gaW5zdHJ1Y3QgdGhlIHNpbmsgdG8gbmV2ZXIKLSAqIHBlcmZvcm0gYW4gQVNZTkMgc3RhdGUgY2hhbmdlLiBUaGlzIGZlYXR1cmUgaXMgbW9zdGx5IHVzYWJsZSB3aGVuIGRlYWxpbmcKLSAqIHdpdGggbm9uLXN5bmNocm9uaXplZCBzdHJlYW1zIG9yIHNwYXJzZSBzdHJlYW1zLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdF9wcml2YXRlLmg+Ci0KLSNpbmNsdWRlICJnc3RiYXNlc2luay5oIgotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1saWIuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2Jhc2Vfc2lua19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYmFzZV9zaW5rX2RlYnVnCi0KLSNkZWZpbmUgR1NUX0JBU0VfU0lOS19HRVRfUFJJVkFURShvYmopICBcCi0gICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfQkFTRV9TSU5LLCBHc3RCYXNlU2lua1ByaXZhdGUpKQotCi0jZGVmaW5lIEdTVF9GTE9XX1NURVAgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdib29sZWFuIHZhbGlkOyAgICAgICAgICAgICAgIC8qIGlmIHRoaXMgaW5mbyBpcyB2YWxpZCAqLwotICBndWludDMyIHNlcW51bTsgICAgICAgICAgICAgICAvKiB0aGUgc2VxbnVtIG9mIHRoZSBTVEVQIGV2ZW50ICovCi0gIEdzdEZvcm1hdCBmb3JtYXQ7ICAgICAgICAgICAgIC8qIHRoZSBmb3JtYXQgb2YgdGhlIGFtb3VudCAqLwotICBndWludDY0IGFtb3VudDsgICAgICAgICAgICAgICAvKiB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgdG8gc2tpcCAqLwotICBndWludDY0IHBvc2l0aW9uOyAgICAgICAgICAgICAvKiB0aGUgcG9zaXRpb24gaW4gdGhlIHN0ZXBwZWQgZGF0YSAqLwotICBndWludDY0IGR1cmF0aW9uOyAgICAgICAgICAgICAvKiB0aGUgZHVyYXRpb24gaW4gdGltZSBvZiB0aGUgc2tpcHBlZCBkYXRhICovCi0gIGd1aW50NjQgc3RhcnQ7ICAgICAgICAgICAgICAgIC8qIHJ1bm5pbmdfdGltZSBvZiB0aGUgc3RhcnQgKi8KLSAgZ2RvdWJsZSByYXRlOyAgICAgICAgICAgICAgICAgLyogcmF0ZSBvZiBza2lwcGluZyAqLwotICBnZG91YmxlIHN0YXJ0X3JhdGU7ICAgICAgICAgICAvKiByYXRlIGJlZm9yZSBza2lwcGluZyAqLwotICBndWludDY0IHN0YXJ0X3N0YXJ0OyAgICAgICAgICAvKiBzdGFydCBwb3NpdGlvbiBza2lwcGluZyAqLwotICBndWludDY0IHN0YXJ0X3N0b3A7ICAgICAgICAgICAvKiBzdG9wIHBvc2l0aW9uIHNraXBwaW5nICovCi0gIGdib29sZWFuIGZsdXNoOyAgICAgICAgICAgICAgIC8qIGlmIHRoaXMgd2FzIGEgZmx1c2hpbmcgc3RlcCAqLwotICBnYm9vbGVhbiBpbnRlcm1lZGlhdGU7ICAgICAgICAvKiBpZiB0aGlzIGlzIGFuIGludGVybWVkaWF0ZSBzdGVwICovCi0gIGdib29sZWFuIG5lZWRfcHJlcm9sbDsgICAgICAgIC8qIGlmIHdlIG5lZWQgcHJlcm9sbCBhZnRlciB0aGlzIHN0ZXAgKi8KLX0gR3N0U3RlcEluZm87Ci0KLXN0cnVjdCBfR3N0QmFzZVNpbmtQcml2YXRlCi17Ci0gIGdpbnQgcW9zX2VuYWJsZWQ7ICAgICAgICAgICAgIC8qIEFUT01JQyAqLwotICBnYm9vbGVhbiBhc3luY19lbmFibGVkOwotICBHc3RDbG9ja1RpbWVEaWZmIHRzX29mZnNldDsKLSAgR3N0Q2xvY2tUaW1lIHJlbmRlcl9kZWxheTsKLQotICAvKiBzdGFydCwgc3RvcCBvZiBjdXJyZW50IGJ1ZmZlciwgc3RyZWFtIHRpbWUsIHVzZWQgdG8gcmVwb3J0IHBvc2l0aW9uICovCi0gIEdzdENsb2NrVGltZSBjdXJyZW50X3NzdGFydDsKLSAgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfc3N0b3A7Ci0KLSAgLyogc3RhcnQsIHN0b3AgYW5kIGppdHRlciBvZiBjdXJyZW50IGJ1ZmZlciwgcnVubmluZyB0aW1lICovCi0gIEdzdENsb2NrVGltZSBjdXJyZW50X3JzdGFydDsKLSAgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfcnN0b3A7Ci0gIEdzdENsb2NrVGltZURpZmYgY3VycmVudF9qaXR0ZXI7Ci0gIC8qIHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlIHByZXZpb3VzIGJ1ZmZlciAqLwotICBHc3RDbG9ja1RpbWUgcHJldl9yc3RhcnQ7Ci0KLSAgLyogRU9TIHN5bmMgdGltZSBpbiBydW5uaW5nIHRpbWUgKi8KLSAgR3N0Q2xvY2tUaW1lIGVvc19ydGltZTsKLQotICAvKiBsYXN0IGJ1ZmZlciB0aGF0IGFycml2ZWQgaW4gdGltZSwgcnVubmluZyB0aW1lICovCi0gIEdzdENsb2NrVGltZSBsYXN0X3JlbmRlcl90aW1lOwotICAvKiB3aGVuIHRoZSBsYXN0IGJ1ZmZlciBsZWZ0IHRoZSBzaW5rLCBydW5uaW5nIHRpbWUgKi8KLSAgR3N0Q2xvY2tUaW1lIGxhc3RfbGVmdDsKLQotICAvKiBydW5uaW5nIGF2ZXJhZ2VzIGdvIGhlcmUgdGhlc2UgYXJlIGRvbmUgb24gcnVubmluZyB0aW1lICovCi0gIEdzdENsb2NrVGltZSBhdmdfcHQsIGF2Z19pbl9kaWZmOwotICBnZG91YmxlIGF2Z19yYXRlOyAgICAgICAgICAgICAvKiBhdmVyYWdlIHdpdGggaW5maW5pdGUgd2luZG93ICovCi0KLSAgLyogbnVtYmVyIG9mIHJlbmRlcmVkIGFuZCBkcm9wcGVkIGZyYW1lcyAqLwotICBndWludDY0IHJlbmRlcmVkOwotICBndWludDY0IGRyb3BwZWQ7Ci0KLSAgLyogbGF0ZW5jeSBzdHVmZiAqLwotICBHc3RDbG9ja1RpbWUgbGF0ZW5jeTsKLQotICAvKiBpZiB3ZSBhbHJlYWR5IGNvbW1pdGVkIHRoZSBzdGF0ZSAqLwotICBnYm9vbGVhbiBjb21taXRlZDsKLSAgLyogc3RhdGUgY2hhbmdlIHRvIHBsYXlpbmcgb25nb2luZyAqLwotICBnYm9vbGVhbiB0b19wbGF5aW5nOwotCi0gIC8qIHdoZW4gd2UgcmVjZWl2ZWQgRU9TICovCi0gIGdib29sZWFuIHJlY2VpdmVkX2VvczsKLQotICAvKiB3aGVuIHdlIGFyZSBwcmVyb2xsZWQgYW5kIGFibGUgdG8gcmVwb3J0IGxhdGVuY3kgKi8KLSAgZ2Jvb2xlYW4gaGF2ZV9sYXRlbmN5OwotCi0gIC8qIHRoZSBsYXN0IGJ1ZmZlciB3ZSBwcmVyb2xsZWQgb3IgcmVuZGVyZWQuIFVzZWZ1bCBmb3IgbWFraW5nIHNuYXBzaG90cyAqLwotICBnaW50IGVuYWJsZV9sYXN0X3NhbXBsZTsgICAgICAvKiBhdG9taWMgKi8KLSAgR3N0QnVmZmVyICpsYXN0X2J1ZmZlcjsKLSAgR3N0Q2FwcyAqbGFzdF9jYXBzOwotICBHc3RCdWZmZXJMaXN0ICpsYXN0X2J1ZmZlcl9saXN0OwotCi0gIC8qIG5lZ290aWF0ZWQgY2FwcyAqLwotICBHc3RDYXBzICpjYXBzOwotCi0gIC8qIGJsb2Nrc2l6ZSBmb3IgcHVsbGluZyAqLwotICBndWludCBibG9ja3NpemU7Ci0KLSAgZ2Jvb2xlYW4gZGlzY29udDsKLQotICAvKiBzZXFudW0gb2YgdGhlIHN0cmVhbSAqLwotICBndWludDMyIHNlcW51bTsKLQotICBnYm9vbGVhbiBjYWxsX3ByZXJvbGw7Ci0gIGdib29sZWFuIHN0ZXBfdW5sb2NrOwotCi0gIC8qIHdlIGhhdmUgYSBwZW5kaW5nIGFuZCBhIGN1cnJlbnQgc3RlcCBvcGVyYXRpb24gKi8KLSAgR3N0U3RlcEluZm8gY3VycmVudF9zdGVwOwotICBHc3RTdGVwSW5mbyBwZW5kaW5nX3N0ZXA7Ci0KLSAgLyogQ2FjaGVkIEdzdENsb2NrSUQgKi8KLSAgR3N0Q2xvY2tJRCBjYWNoZWRfY2xvY2tfaWQ7Ci0KLSAgLyogZm9yIHRocm90dGxpbmcgYW5kIFFvUyAqLwotICBHc3RDbG9ja1RpbWUgZWFybGllc3RfaW5fdGltZTsKLSAgR3N0Q2xvY2tUaW1lIHRocm90dGxlX3RpbWU7Ci0KLSAgLyogZm9yIHJhdGUgY29udHJvbCAqLwotICBndWludDY0IG1heF9iaXRyYXRlOwotICBHc3RDbG9ja1RpbWUgcmNfdGltZTsKLSAgR3N0Q2xvY2tUaW1lIHJjX25leHQ7Ci0gIGdzaXplIHJjX2FjY3VtdWxhdGVkOwotfTsKLQotI2RlZmluZSBET19SVU5OSU5HX0FWRyhhdmcsdmFsLHNpemUpICgoKHZhbCkgKyAoKHNpemUpLTEpICogKGF2ZykpIC8gKHNpemUpKQotCi0vKiBnZW5lcmljIHJ1bm5pbmcgYXZlcmFnZSwgdGhpcyBoYXMgYSBuZXV0cmFsIHdpbmRvdyBzaXplICovCi0jZGVmaW5lIFVQREFURV9SVU5OSU5HX0FWRyhhdmcsdmFsKSAgIERPX1JVTk5JTkdfQVZHKGF2Zyx2YWwsOCkKLQotLyogdGhlIHdpbmRvd3MgZm9yIHRoZXNlIHJ1bm5pbmcgYXZlcmFnZXMgYXJlIGV4cGVyaW1lbnRhbGx5IG9idGFpbmVkLgotICogcG9zaXRpdmUgdmFsdWVzIGdldCBhdmVyYWdlZCBtb3JlIHdoaWxlIG5lZ2F0aXZlIHZhbHVlcyB1c2UgYSBzbWFsbAotICogd2luZG93IHNvIHdlIGNhbiByZWFjdCBmYXN0ZXIgdG8gYmFkbmVzcy4gKi8KLSNkZWZpbmUgVVBEQVRFX1JVTk5JTkdfQVZHX1AoYXZnLHZhbCkgRE9fUlVOTklOR19BVkcoYXZnLHZhbCwxNikKLSNkZWZpbmUgVVBEQVRFX1JVTk5JTkdfQVZHX04oYXZnLHZhbCkgRE9fUlVOTklOR19BVkcoYXZnLHZhbCw0KQotCi0vKiBCYXNlU2luayBwcm9wZXJ0aWVzICovCi0KLSNkZWZpbmUgREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVMTCBGQUxTRSAvKiBmaXhtZTogZW5hYmxlIG1lICovCi0jZGVmaW5lIERFRkFVTFRfQ0FOX0FDVElWQVRFX1BVU0ggVFJVRQotCi0jZGVmaW5lIERFRkFVTFRfU1lOQyAgICAgICAgICAgICAgICBUUlVFCi0jZGVmaW5lIERFRkFVTFRfTUFYX0xBVEVORVNTICAgICAgICAtMQotI2RlZmluZSBERUZBVUxUX1FPUyAgICAgICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9BU1lOQyAgICAgICAgICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9UU19PRkZTRVQgICAgICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9CTE9DS1NJWkUgICAgICAgICAgIDQwOTYKLSNkZWZpbmUgREVGQVVMVF9SRU5ERVJfREVMQVkgICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9FTkFCTEVfTEFTVF9TQU1QTEUgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9USFJPVFRMRV9USU1FICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9NQVhfQklUUkFURSAgICAgICAgIDAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfU1lOQywKLSAgUFJPUF9NQVhfTEFURU5FU1MsCi0gIFBST1BfUU9TLAotICBQUk9QX0FTWU5DLAotICBQUk9QX1RTX09GRlNFVCwKLSAgUFJPUF9FTkFCTEVfTEFTVF9TQU1QTEUsCi0gIFBST1BfTEFTVF9TQU1QTEUsCi0gIFBST1BfQkxPQ0tTSVpFLAotICBQUk9QX1JFTkRFUl9ERUxBWSwKLSAgUFJPUF9USFJPVFRMRV9USU1FLAotICBQUk9QX01BWF9CSVRSQVRFLAotICBQUk9QX0xBU1QKLX07Ci0KLXN0YXRpYyBHc3RFbGVtZW50Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3NpbmtfY2xhc3NfaW5pdCAoR3N0QmFzZVNpbmtDbGFzcyAqIGtsYXNzKTsKLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3NpbmtfaW5pdCAoR3N0QmFzZVNpbmsgKiB0cmFucywgZ3BvaW50ZXIgZ19jbGFzcyk7Ci1zdGF0aWMgdm9pZCBnc3RfYmFzZV9zaW5rX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotR1R5cGUKLWdzdF9iYXNlX3NpbmtfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBiYXNlX3NpbmtfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmYmFzZV9zaW5rX3R5cGUpKSB7Ci0gICAgR1R5cGUgX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBiYXNlX3NpbmtfaW5mbyA9IHsKLSAgICAgIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0LAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICBzaXplb2YgKEdzdEJhc2VTaW5rKSwKLSAgICAgIDAsCi0gICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9iYXNlX3NpbmtfaW5pdCwKLSAgICB9OwotCi0gICAgX3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9FTEVNRU5ULAotICAgICAgICAiR3N0QmFzZVNpbmsiLCAmYmFzZV9zaW5rX2luZm8sIEdfVFlQRV9GTEFHX0FCU1RSQUNUKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmJhc2Vfc2lua190eXBlLCBfdHlwZSk7Ci0gIH0KLSAgcmV0dXJuIGJhc2Vfc2lua190eXBlOwotfQotCi1zdGF0aWMgdm9pZCBnc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc2lua19zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBkZWZhdWx0X2VsZW1lbnRfcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9iYXNlX3NpbmtfZGVmYXVsdF9nZXRfY2FwcyAoR3N0QmFzZVNpbmsgKiBzaW5rLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX2RlZmF1bHRfc2V0X2NhcHMgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3RfYmFzZV9zaW5rX2RlZmF1bHRfZ2V0X3RpbWVzIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0Q2xvY2tUaW1lICogc3RhcnQsIEdzdENsb2NrVGltZSAqIGVuZCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc2lua19zZXRfZmx1c2hpbmcgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssCi0gICAgR3N0UGFkICogcGFkLCBnYm9vbGVhbiBmbHVzaGluZyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2FjdGl2YXRlX3B1bGwgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssCi0gICAgZ2Jvb2xlYW4gYWN0aXZlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX2RlZmF1bHRfZG9fc2VlayAoR3N0QmFzZVNpbmsgKiBzaW5rLAotICAgIEdzdFNlZ21lbnQgKiBzZWdtZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX2RlZmF1bHRfcHJlcGFyZV9zZWVrX3NlZ21lbnQgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RFdmVudCAqIGV2ZW50LCBHc3RTZWdtZW50ICogc2VnbWVudCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Jhc2Vfc2lua19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3NpbmtfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyTGlzdCAqIGxpc3QpOwotCi1zdGF0aWMgdm9pZCBnc3RfYmFzZV9zaW5rX2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2V2ZW50IChHc3RCYXNlU2luayAqIGJhc2VzaW5rLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X3dhaXRfZXZlbnQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX2RlZmF1bHRfcXVlcnkgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NpbmtfbmVnb3RpYXRlX3B1bGwgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspOwotc3RhdGljIEdzdENhcHMgKmdzdF9iYXNlX3NpbmtfZGVmYXVsdF9maXhhdGUgKEdzdEJhc2VTaW5rICogYnNpbmssCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9iYXNlX3NpbmtfZml4YXRlIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RDYXBzICogY2Fwcyk7Ci0KLS8qIGNoZWNrIGlmIGFuIG9iamVjdCB3YXMgdG9vIGxhdGUgKi8KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zaW5rX2lzX3Rvb19sYXRlIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLAotICAgIEdzdE1pbmlPYmplY3QgKiBvYmosIEdzdENsb2NrVGltZSByc3RhcnQsIEdzdENsb2NrVGltZSByc3RvcCwKLSAgICBHc3RDbG9ja1JldHVybiBzdGF0dXMsIEdzdENsb2NrVGltZURpZmYgaml0dGVyLCBnYm9vbGVhbiByZW5kZXIpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2Vfc2lua19jbGFzc19pbml0IChHc3RCYXNlU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2Jhc2Vfc2lua19kZWJ1ZywgImJhc2VzaW5rIiwgMCwKLSAgICAgICJiYXNlc2luayBlbGVtZW50Iik7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RCYXNlU2lua1ByaXZhdGUpKTsKLQotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9iYXNlX3NpbmtfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9iYXNlX3Npbmtfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NZTkMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMiLCAiU3luYyIsICJTeW5jIG9uIHRoZSBjbG9jayIsIERFRkFVTFRfU1lOQywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9MQVRFTkVTUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQ2NCAoIm1heC1sYXRlbmVzcyIsICJNYXggTGF0ZW5lc3MiLAotICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBuYW5vc2Vjb25kcyB0aGF0IGEgYnVmZmVyIGNhbiBiZSBsYXRlIGJlZm9yZSBpdCAiCi0gICAgICAgICAgImlzIGRyb3BwZWQgKC0xIHVubGltaXRlZCkiLCAtMSwgR19NQVhJTlQ2NCwgREVGQVVMVF9NQVhfTEFURU5FU1MsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9RT1MsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInFvcyIsICJRb3MiLAotICAgICAgICAgICJHZW5lcmF0ZSBRdWFsaXR5LW9mLVNlcnZpY2UgZXZlbnRzIHVwc3RyZWFtIiwgREVGQVVMVF9RT1MsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RCYXNlU2luazphc3luYzoKLSAgICoKLSAgICogSWYgc2V0IHRvICVUUlVFLCB0aGUgYmFzZXNpbmsgd2lsbCBwZXJmb3JtIGFzeW5jaHJvbm91cyBzdGF0ZSBjaGFuZ2VzLgotICAgKiBXaGVuIHNldCB0byAlRkFMU0UsIHRoZSBzaW5rIHdpbGwgbm90IHNpZ25hbCB0aGUgcGFyZW50IHdoZW4gaXQgcHJlcm9sbHMuCi0gICAqIFVzZSB0aGlzIG9wdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBzcGFyc2Ugc3RyZWFtcyBvciB3aGVuIHN5bmNocm9uaXNhdGlvbiBpcwotICAgKiBub3QgcmVxdWlyZWQuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FTWU5DLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhc3luYyIsICJBc3luYyIsCi0gICAgICAgICAgIkdvIGFzeW5jaHJvbm91c2x5IHRvIFBBVVNFRCIsIERFRkFVTFRfQVNZTkMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RCYXNlU2luazp0cy1vZmZzZXQ6Ci0gICAqCi0gICAqIENvbnRyb2xzIHRoZSBmaW5hbCBzeW5jaHJvbmlzYXRpb24sIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCByZW5kZXIgdGhlIGJ1ZmZlcgotICAgKiBlYXJsaWVyIHdoaWxlIGEgcG9zaXRpdmUgdmFsdWUgZGVsYXlzIHBsYXliYWNrLiBUaGlzIHByb3BlcnR5IGNhbiBiZQotICAgKiB1c2VkIHRvIGZpeCBzeW5jaHJvbmlzYXRpb24gaW4gYmFkIGZpbGVzLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UU19PRkZTRVQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50NjQgKCJ0cy1vZmZzZXQiLCAiVFMgT2Zmc2V0IiwKLSAgICAgICAgICAiVGltZXN0YW1wIG9mZnNldCBpbiBuYW5vc2Vjb25kcyIsIEdfTUlOSU5UNjQsIEdfTUFYSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9UU19PRkZTRVQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RCYXNlU2luazplbmFibGUtbGFzdC1zYW1wbGU6Ci0gICAqCi0gICAqIEVuYWJsZSB0aGUgbGFzdC1zYW1wbGUgcHJvcGVydHkuIElmICVGQUxTRSwgYmFzZXNpbmsgZG9lc24ndCBrZWVwIGEKLSAgICogcmVmZXJlbmNlIHRvIHRoZSBsYXN0IGJ1ZmZlciBhcnJpdmVkIGFuZCB0aGUgbGFzdC1zYW1wbGUgcHJvcGVydHkgaXMgYWx3YXlzCi0gICAqIHNldCB0byAlTlVMTC4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBuZWVkIGJ1ZmZlcnMgdG8gYmUgcmVsZWFzZWQgYXMgc29vbgotICAgKiBhcyBwb3NzaWJsZSwgZWcuIGlmIHlvdSdyZSB1c2luZyBhIGJ1ZmZlciBwb29sLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9FTkFCTEVfTEFTVF9TQU1QTEUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImVuYWJsZS1sYXN0LXNhbXBsZSIsICJFbmFibGUgTGFzdCBCdWZmZXIiLAotICAgICAgICAgICJFbmFibGUgdGhlIGxhc3Qtc2FtcGxlIHByb3BlcnR5IiwgREVGQVVMVF9FTkFCTEVfTEFTVF9TQU1QTEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdEJhc2VTaW5rOmxhc3Qtc2FtcGxlOgotICAgKgotICAgKiBUaGUgbGFzdCBidWZmZXIgdGhhdCBhcnJpdmVkIGluIHRoZSBzaW5rIGFuZCB3YXMgdXNlZCBmb3IgcHJlcm9sbCBvciBmb3IKLSAgICogcmVuZGVyaW5nLiBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHRodW1ibmFpbHMuIFRoaXMgcHJvcGVydHkKLSAgICogY2FuIGJlICVOVUxMIHdoZW4gdGhlIHNpbmsgaGFzIG5vdCB5ZXQgcmVjZWl2ZWQgYSBidWZmZXIuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xBU1RfU0FNUExFLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgibGFzdC1zYW1wbGUiLCAiTGFzdCBTYW1wbGUiLAotICAgICAgICAgICJUaGUgbGFzdCBzYW1wbGUgcmVjZWl2ZWQgaW4gdGhlIHNpbmsiLCBHU1RfVFlQRV9TQU1QTEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdEJhc2VTaW5rOmJsb2Nrc2l6ZToKLSAgICoKLSAgICogVGhlIGFtb3VudCBvZiBieXRlcyB0byBwdWxsIHdoZW4gb3BlcmF0aW5nIGluIHB1bGwgbW9kZS4KLSAgICovCi0gIC8qIEZJWE1FIDIuMDogYmxvY2tzaXplIHByb3BlcnR5IHNob3VsZCBiZSBpbnQsIG90aGVyd2lzZSBtaW4+bWF4Li4gKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CTE9DS1NJWkUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImJsb2Nrc2l6ZSIsICJCbG9jayBzaXplIiwKLSAgICAgICAgICAiU2l6ZSBpbiBieXRlcyB0byBwdWxsIHBlciBidWZmZXIgKDAgPSBkZWZhdWx0KSIsIDAsIEdfTUFYVUlOVCwKLSAgICAgICAgICBERUZBVUxUX0JMT0NLU0laRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RCYXNlU2luazpyZW5kZXItZGVsYXk6Ci0gICAqCi0gICAqIFRoZSBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gc3luY2hyb25pc2F0aW9uIGFuZCBhY3R1YWwgcmVuZGVyaW5nIG9mIHRoZQotICAgKiBtZWRpYS4gVGhpcyBwcm9wZXJ0eSB3aWxsIGFkZCBhZGRpdGlvbmFsIGxhdGVuY3kgdG8gdGhlIGRldmljZSBpbiBvcmRlciB0bwotICAgKiBtYWtlIG90aGVyIHNpbmtzIGNvbXBlbnNhdGUgZm9yIHRoZSBkZWxheS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVOREVSX0RFTEFZLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInJlbmRlci1kZWxheSIsICJSZW5kZXIgRGVsYXkiLAotICAgICAgICAgICJBZGRpdGlvbmFsIHJlbmRlciBkZWxheSBvZiB0aGUgc2luayBpbiBuYW5vc2Vjb25kcyIsIDAsIEdfTUFYVUlOVDY0LAotICAgICAgICAgIERFRkFVTFRfUkVOREVSX0RFTEFZLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdEJhc2VTaW5rOnRocm90dGxlLXRpbWU6Ci0gICAqCi0gICAqIFRoZSB0aW1lIHRvIGluc2VydCBiZXR3ZWVuIGJ1ZmZlcnMuIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gY29udHJvbAotICAgKiB0aGUgbWF4aW11bSBhbW91bnQgb2YgYnVmZmVycyBwZXIgc2Vjb25kIHRvIHJlbmRlci4gU2V0dGluZyB0aGlzIHByb3BlcnR5Ci0gICAqIHRvIGEgdmFsdWUgYmlnZ2VyIHRoYW4gMCB3aWxsIG1ha2UgdGhlIHNpbmsgY3JlYXRlIFRIUk9UVExFIFFvUyBldmVudHMuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RIUk9UVExFX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgidGhyb3R0bGUtdGltZSIsICJUaHJvdHRsZSB0aW1lIiwKLSAgICAgICAgICAiVGhlIHRpbWUgdG8ga2VlcCBiZXR3ZWVuIHJlbmRlcmVkIGJ1ZmZlcnMgKDAgPSBkaXNhYmxlZCkiLCAwLAotICAgICAgICAgIEdfTUFYVUlOVDY0LCBERUZBVUxUX1RIUk9UVExFX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RCYXNlU2luazptYXgtYml0cmF0ZToKLSAgICoKLSAgICogQ29udHJvbCB0aGUgbWF4aW11bSBhbW91bnQgb2YgYml0cyB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgcGVyIHNlY29uZC4KLSAgICogU2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIGEgdmFsdWUgYmlnZ2VyIHRoYW4gMCB3aWxsIG1ha2UgdGhlIHNpbmsgZGVsYXkKLSAgICogcmVuZGVyaW5nIG9mIHRoZSBidWZmZXJzIHdoZW4gaXQgd291bGQgZXhjZWVkIHRvIG1heC1iaXRyYXRlLgotICAgKgotICAgKiBTaW5jZTogMS4yCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9CSVRSQVRFLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoIm1heC1iaXRyYXRlIiwgIk1heCBCaXRyYXRlIiwKLSAgICAgICAgICAiVGhlIG1heGltdW0gYml0cyBwZXIgc2Vjb25kIHRvIHJlbmRlciAoMCA9IGRpc2FibGVkKSIsIDAsCi0gICAgICAgICAgR19NQVhVSU5UNjQsIERFRkFVTFRfTUFYX0JJVFJBVEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zaW5rX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnNlbmRfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19zZW5kX2V2ZW50KTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZGVmYXVsdF9lbGVtZW50X3F1ZXJ5KTsKLQotICBrbGFzcy0+Z2V0X2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2dldF9jYXBzKTsKLSAga2xhc3MtPnNldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NpbmtfZGVmYXVsdF9zZXRfY2Fwcyk7Ci0gIGtsYXNzLT5maXhhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2ZpeGF0ZSk7Ci0gIGtsYXNzLT5hY3RpdmF0ZV9wdWxsID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zaW5rX2RlZmF1bHRfYWN0aXZhdGVfcHVsbCk7Ci0gIGtsYXNzLT5nZXRfdGltZXMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2dldF90aW1lcyk7Ci0gIGtsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zaW5rX2RlZmF1bHRfcXVlcnkpOwotICBrbGFzcy0+ZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2V2ZW50KTsKLSAga2xhc3MtPndhaXRfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X3dhaXRfZXZlbnQpOwotCi0gIC8qIFJlZ2lzdGVyaW5nIGRlYnVnIHN5bWJvbHMgZm9yIGZ1bmN0aW9uIHBvaW50ZXJzICovCi0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zaW5rX2ZpeGF0ZSk7Ci0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZSk7Ci0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zaW5rX3BhZF9hY3RpdmF0ZV9tb2RlKTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9iYXNlX3NpbmtfZXZlbnQpOwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19jaGFpbik7Ci0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zaW5rX2NoYWluX2xpc3QpOwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc2lua19zaW5rX3F1ZXJ5KTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2Jhc2Vfc2lua19xdWVyeV9jYXBzIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmJjbGFzczsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIGdib29sZWFuIGZpeGVkOwotCi0gIGJjbGFzcyA9IEdTVF9CQVNFX1NJTktfR0VUX0NMQVNTIChic2luayk7Ci0gIGZpeGVkID0gR1NUX1BBRF9JU19GSVhFRF9DQVBTIChwYWQpOwotCi0gIGlmIChmaXhlZCB8fCBic2luay0+cGFkX21vZGUgPT0gR1NUX1BBRF9NT0RFX1BVTEwpIHsKLSAgICAvKiBpZiB3ZSBhcmUgb3BlcmF0aW5nIGluIHB1bGwgbW9kZSBvciBmaXhlZCBjYXBzLCB3ZSBvbmx5IGFjY2VwdCB0aGUKLSAgICAgKiBjdXJyZW50bHkgbmVnb3RpYXRlZCBjYXBzICovCi0gICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgfQotICBpZiAoY2FwcyA9PSBOVUxMKSB7Ci0gICAgaWYgKGJjbGFzcy0+Z2V0X2NhcHMpCi0gICAgICBjYXBzID0gYmNsYXNzLT5nZXRfY2FwcyAoYnNpbmssIGZpbHRlcik7Ci0KLSAgICBpZiAoY2FwcyA9PSBOVUxMKSB7Ci0gICAgICBHc3RQYWRUZW1wbGF0ZSAqcGFkX3RlbXBsYXRlOwotCi0gICAgICBwYWRfdGVtcGxhdGUgPQotICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChiY2xhc3MpLAotICAgICAgICAgICJzaW5rIik7Ci0gICAgICBpZiAocGFkX3RlbXBsYXRlICE9IE5VTEwpIHsKLSAgICAgICAgY2FwcyA9IGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKHBhZF90ZW1wbGF0ZSk7Ci0KLSAgICAgICAgaWYgKGZpbHRlcikgewotICAgICAgICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgICAgICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgICAgIGNhcHMgPSBpbnRlcnNlY3Rpb247Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2ZpeGF0ZSAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJzaW5rLCAidXNpbmcgZGVmYXVsdCBjYXBzIGZpeGF0ZSBmdW5jdGlvbiIpOwotICByZXR1cm4gZ3N0X2NhcHNfZml4YXRlIChjYXBzKTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2Jhc2Vfc2lua19maXhhdGUgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJzaW5rKTsKLQotICBpZiAoYmNsYXNzLT5maXhhdGUpCi0gICAgY2FwcyA9IGJjbGFzcy0+Zml4YXRlIChic2luaywgY2Fwcyk7Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9zaW5rX2luaXQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIGdwb2ludGVyIGdfY2xhc3MpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICpwYWRfdGVtcGxhdGU7Ci0gIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKLQotICBiYXNlc2luay0+cHJpdiA9IHByaXYgPSBHU1RfQkFTRV9TSU5LX0dFVF9QUklWQVRFIChiYXNlc2luayk7Ci0KLSAgcGFkX3RlbXBsYXRlID0KLSAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKSwgInNpbmsiKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAocGFkX3RlbXBsYXRlICE9IE5VTEwpOwotCi0gIGJhc2VzaW5rLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkX3RlbXBsYXRlLCAic2luayIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uIChiYXNlc2luay0+c2lua3BhZCwgZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKGJhc2VzaW5rLT5zaW5rcGFkLAotICAgICAgZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGVfbW9kZSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChiYXNlc2luay0+c2lua3BhZCwgZ3N0X2Jhc2Vfc2lua19zaW5rX3F1ZXJ5KTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGJhc2VzaW5rLT5zaW5rcGFkLCBnc3RfYmFzZV9zaW5rX2V2ZW50KTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGJhc2VzaW5rLT5zaW5rcGFkLCBnc3RfYmFzZV9zaW5rX2NoYWluKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAoYmFzZXNpbmstPnNpbmtwYWQsIGdzdF9iYXNlX3NpbmtfY2hhaW5fbGlzdCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwgYmFzZXNpbmstPnNpbmtwYWQpOwotCi0gIGJhc2VzaW5rLT5wYWRfbW9kZSA9IEdTVF9QQURfTU9ERV9OT05FOwotICBnX211dGV4X2luaXQgKCZiYXNlc2luay0+cHJlcm9sbF9sb2NrKTsKLSAgZ19jb25kX2luaXQgKCZiYXNlc2luay0+cHJlcm9sbF9jb25kKTsKLSAgcHJpdi0+aGF2ZV9sYXRlbmN5ID0gRkFMU0U7Ci0KLSAgYmFzZXNpbmstPmNhbl9hY3RpdmF0ZV9wdXNoID0gREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVTSDsKLSAgYmFzZXNpbmstPmNhbl9hY3RpdmF0ZV9wdWxsID0gREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVMTDsKLQotICBiYXNlc2luay0+c3luYyA9IERFRkFVTFRfU1lOQzsKLSAgYmFzZXNpbmstPm1heF9sYXRlbmVzcyA9IERFRkFVTFRfTUFYX0xBVEVORVNTOwotICBnX2F0b21pY19pbnRfc2V0ICgmcHJpdi0+cW9zX2VuYWJsZWQsIERFRkFVTFRfUU9TKTsKLSAgcHJpdi0+YXN5bmNfZW5hYmxlZCA9IERFRkFVTFRfQVNZTkM7Ci0gIHByaXYtPnRzX29mZnNldCA9IERFRkFVTFRfVFNfT0ZGU0VUOwotICBwcml2LT5yZW5kZXJfZGVsYXkgPSBERUZBVUxUX1JFTkRFUl9ERUxBWTsKLSAgcHJpdi0+YmxvY2tzaXplID0gREVGQVVMVF9CTE9DS1NJWkU7Ci0gIHByaXYtPmNhY2hlZF9jbG9ja19pZCA9IE5VTEw7Ci0gIGdfYXRvbWljX2ludF9zZXQgKCZwcml2LT5lbmFibGVfbGFzdF9zYW1wbGUsIERFRkFVTFRfRU5BQkxFX0xBU1RfU0FNUExFKTsKLSAgcHJpdi0+dGhyb3R0bGVfdGltZSA9IERFRkFVTFRfVEhST1RUTEVfVElNRTsKLSAgcHJpdi0+bWF4X2JpdHJhdGUgPSBERUZBVUxUX01BWF9CSVRSQVRFOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGJhc2VzaW5rLCBHU1RfRUxFTUVOVF9GTEFHX1NJTkspOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2Vfc2lua19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOwotCi0gIGJhc2VzaW5rID0gR1NUX0JBU0VfU0lOSyAob2JqZWN0KTsKLQotICBnX211dGV4X2NsZWFyICgmYmFzZXNpbmstPnByZXJvbGxfbG9jayk7Ci0gIGdfY29uZF9jbGVhciAoJmJhc2VzaW5rLT5wcmVyb2xsX2NvbmQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX3NldF9zeW5jOgotICogQHNpbms6IHRoZSBzaW5rCi0gKiBAc3luYzogdGhlIG5ldyBzeW5jIHZhbHVlLgotICoKLSAqIENvbmZpZ3VyZXMgQHNpbmsgdG8gc3luY2hyb25pemUgb24gdGhlIGNsb2NrIG9yIG5vdC4gV2hlbgotICogQHN5bmMgaXMgJUZBTFNFLCBpbmNvbWluZyBzYW1wbGVzIHdpbGwgYmUgcGxheWVkIGFzIGZhc3QgYXMKLSAqIHBvc3NpYmxlLiBJZiBAc3luYyBpcyAlVFJVRSwgdGhlIHRpbWVzdGFtcHMgb2YgdGhlIGluY29taW5nCi0gKiBidWZmZXJzIHdpbGwgYmUgdXNlZCB0byBzY2hlZHVsZSB0aGUgZXhhY3QgcmVuZGVyIHRpbWUgb2YgaXRzCi0gKiBjb250ZW50cy4KLSAqLwotdm9pZAotZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBnYm9vbGVhbiBzeW5jKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgc2luay0+c3luYyA9IHN5bmM7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX2dldF9zeW5jOgotICogQHNpbms6IHRoZSBzaW5rCi0gKgotICogQ2hlY2tzIGlmIEBzaW5rIGlzIGN1cnJlbnRseSBjb25maWd1cmVkIHRvIHN5bmNocm9uaXplIGFnYWluc3QgdGhlCi0gKiBjbG9jay4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc2luayBpcyBjb25maWd1cmVkIHRvIHN5bmNocm9uaXplIGFnYWluc3QgdGhlIGNsb2NrLgotICovCi1nYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19nZXRfc3luYyAoR3N0QmFzZVNpbmsgKiBzaW5rKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgcmVzID0gc2luay0+c3luYzsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzOgotICogQHNpbms6IHRoZSBzaW5rCi0gKiBAbWF4X2xhdGVuZXNzOiB0aGUgbmV3IG1heCBsYXRlbmVzcyB2YWx1ZS4KLSAqCi0gKiBTZXRzIHRoZSBuZXcgbWF4IGxhdGVuZXNzIHZhbHVlIHRvIEBtYXhfbGF0ZW5lc3MuIFRoaXMgdmFsdWUgaXMKLSAqIHVzZWQgdG8gZGVjaWRlIGlmIGEgYnVmZmVyIHNob3VsZCBiZSBkcm9wcGVkIG9yIG5vdCBiYXNlZCBvbiB0aGUKLSAqIGJ1ZmZlciB0aW1lc3RhbXAgYW5kIHRoZSBjdXJyZW50IGNsb2NrIHRpbWUuIEEgdmFsdWUgb2YgLTEgbWVhbnMKLSAqIGFuIHVubGltaXRlZCB0aW1lLgotICovCi12b2lkCi1nc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3MgKEdzdEJhc2VTaW5rICogc2luaywgZ2ludDY0IG1heF9sYXRlbmVzcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luaykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gIHNpbmstPm1heF9sYXRlbmVzcyA9IG1heF9sYXRlbmVzczsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzczoKLSAqIEBzaW5rOiB0aGUgc2luawotICoKLSAqIEdldHMgdGhlIG1heCBsYXRlbmVzcyB2YWx1ZS4gU2VlIGdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgbWF4aW11bSB0aW1lIGluIG5hbm9zZWNvbmRzIHRoYXQgYSBidWZmZXIgY2FuIGJlIGxhdGUKLSAqIGJlZm9yZSBpdCBpcyBkcm9wcGVkIGFuZCBub3QgcmVuZGVyZWQuIEEgdmFsdWUgb2YgLTEgbWVhbnMgYW4KLSAqIHVubGltaXRlZCB0aW1lLgotICovCi1naW50NjQKLWdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzcyAoR3N0QmFzZVNpbmsgKiBzaW5rKQotewotICBnaW50NjQgcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSwgLTEpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gIHJlcyA9IHNpbmstPm1heF9sYXRlbmVzczsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQ6Ci0gKiBAc2luazogdGhlIHNpbmsKLSAqIEBlbmFibGVkOiB0aGUgbmV3IHFvcyB2YWx1ZS4KLSAqCi0gKiBDb25maWd1cmVzIEBzaW5rIHRvIHNlbmQgUXVhbGl0eS1vZi1TZXJ2aWNlIGV2ZW50cyB1cHN0cmVhbS4KLSAqLwotdm9pZAotZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQgKEdzdEJhc2VTaW5rICogc2luaywgZ2Jvb2xlYW4gZW5hYmxlZCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luaykpOwotCi0gIGdfYXRvbWljX2ludF9zZXQgKCZzaW5rLT5wcml2LT5xb3NfZW5hYmxlZCwgZW5hYmxlZCk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZDoKLSAqIEBzaW5rOiB0aGUgc2luawotICoKLSAqIENoZWNrcyBpZiBAc2luayBpcyBjdXJyZW50bHkgY29uZmlndXJlZCB0byBzZW5kIFF1YWxpdHktb2YtU2VydmljZSBldmVudHMKLSAqIHVwc3RyZWFtLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBzaW5rIGlzIGNvbmZpZ3VyZWQgdG8gcGVyZm9ybSBRdWFsaXR5LW9mLVNlcnZpY2UuCi0gKi8KLWdib29sZWFuCi1nc3RfYmFzZV9zaW5rX2lzX3Fvc19lbmFibGVkIChHc3RCYXNlU2luayAqIHNpbmspCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luayksIEZBTFNFKTsKLQotICByZXMgPSBnX2F0b21pY19pbnRfZ2V0ICgmc2luay0+cHJpdi0+cW9zX2VuYWJsZWQpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZDoKLSAqIEBzaW5rOiB0aGUgc2luawotICogQGVuYWJsZWQ6IHRoZSBuZXcgYXN5bmMgdmFsdWUuCi0gKgotICogQ29uZmlndXJlcyBAc2luayB0byBwZXJmb3JtIGFsbCBzdGF0ZSBjaGFuZ2VzIGFzeW5jaHJvbm91c2x5LiBXaGVuIGFzeW5jIGlzCi0gKiBkaXNhYmxlZCwgdGhlIHNpbmsgd2lsbCBpbW1lZGlhdGVseSBnbyB0byBQQVVTRUQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBhCi0gKiBwcmVyb2xsIGJ1ZmZlci4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCBpZiB0aGUgc2luayBkb2VzIG5vdCBzeW5jaHJvbml6ZQotICogYWdhaW5zdCB0aGUgY2xvY2sgb3Igd2hlbiBpdCBpcyBkZWFsaW5nIHdpdGggc3BhcnNlIHN0cmVhbXMuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQgKEdzdEJhc2VTaW5rICogc2luaywgZ2Jvb2xlYW4gZW5hYmxlZCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luaykpOwotCi0gIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChzaW5rKTsKLSAgZ19hdG9taWNfaW50X3NldCAoJnNpbmstPnByaXYtPmFzeW5jX2VuYWJsZWQsIGVuYWJsZWQpOwotICBHU1RfTE9HX09CSkVDVCAoc2luaywgInNldCBhc3luYyBlbmFibGVkIHRvICVkIiwgZW5hYmxlZCk7Ci0gIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sgKHNpbmspOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZDoKLSAqIEBzaW5rOiB0aGUgc2luawotICoKLSAqIENoZWNrcyBpZiBAc2luayBpcyBjdXJyZW50bHkgY29uZmlndXJlZCB0byBwZXJmb3JtIGFzeW5jaHJvbm91cyBzdGF0ZQotICogY2hhbmdlcyB0byBQQVVTRUQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHNpbmsgaXMgY29uZmlndXJlZCB0byBwZXJmb3JtIGFzeW5jaHJvbm91cyBzdGF0ZQotICogY2hhbmdlcy4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZCAoR3N0QmFzZVNpbmsgKiBzaW5rKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspLCBGQUxTRSk7Ci0KLSAgcmVzID0gZ19hdG9taWNfaW50X2dldCAoJnNpbmstPnByaXYtPmFzeW5jX2VuYWJsZWQpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0OgotICogQHNpbms6IHRoZSBzaW5rCi0gKiBAb2Zmc2V0OiB0aGUgbmV3IG9mZnNldAotICoKLSAqIEFkanVzdCB0aGUgc3luY2hyb25pc2F0aW9uIG9mIEBzaW5rIHdpdGggQG9mZnNldC4gQSBuZWdhdGl2ZSB2YWx1ZSB3aWxsCi0gKiByZW5kZXIgYnVmZmVycyBlYXJsaWVyIHRoYW4gdGhlaXIgdGltZXN0YW1wLiBBIHBvc2l0aXZlIHZhbHVlIHdpbGwgZGVsYXkKLSAqIHJlbmRlcmluZy4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaXggcGxheWJhY2sgb2YgYmFkbHkgdGltZXN0YW1wZWQKLSAqIGJ1ZmZlcnMuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RDbG9ja1RpbWVEaWZmIG9mZnNldCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luaykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gIHNpbmstPnByaXYtPnRzX29mZnNldCA9IG9mZnNldDsKLSAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJzZXQgdGltZSBvZmZzZXQgdG8gJSIgR19HSU5UNjRfRk9STUFULCBvZmZzZXQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19nZXRfdHNfb2Zmc2V0OgotICogQHNpbms6IHRoZSBzaW5rCi0gKgotICogR2V0IHRoZSBzeW5jaHJvbmlzYXRpb24gb2Zmc2V0IG9mIEBzaW5rLgotICoKLSAqIFJldHVybnM6IFRoZSBzeW5jaHJvbmlzYXRpb24gb2Zmc2V0LgotICovCi1Hc3RDbG9ja1RpbWVEaWZmCi1nc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgR3N0Q2xvY2tUaW1lRGlmZiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspLCAwKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICByZXMgPSBzaW5rLT5wcml2LT50c19vZmZzZXQ7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NpbmtfZ2V0X2xhc3Rfc2FtcGxlOgotICogQHNpbms6IHRoZSBzaW5rCi0gKgotICogR2V0IHRoZSBsYXN0IHNhbXBsZSB0aGF0IGFycml2ZWQgaW4gdGhlIHNpbmsgYW5kIHdhcyB1c2VkIGZvciBwcmVyb2xsIG9yIGZvcgotICogcmVuZGVyaW5nLiBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHRodW1ibmFpbHMuCi0gKgotICogVGhlICNHc3RDYXBzIG9uIHRoZSBzYW1wbGUgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSBidWZmZXIuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X3NhbXBsZV91bnJlZgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBhICNHc3RTYW1wbGUuIGdzdF9zYW1wbGVfdW5yZWYoKSBhZnRlcgotICogICAgIHVzYWdlLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zICVOVUxMIHdoZW4gbm8gYnVmZmVyIGhhcyBhcnJpdmVkIGluIHRoZQotICogICAgIHNpbmsgeWV0IG9yIHdoZW4gdGhlIHNpbmsgaXMgbm90IGluIFBBVVNFRCBvciBQTEFZSU5HLgotICovCi1Hc3RTYW1wbGUgKgotZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9zYW1wbGUgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgR3N0U2FtcGxlICpyZXMgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgaWYgKHNpbmstPnByaXYtPmxhc3RfYnVmZmVyX2xpc3QpIHsKLSAgICBHc3RCdWZmZXIgKmZpcnN0X2J1ZmZlciA9IE5VTEw7Ci0KLSAgICAvKiBTZXQgdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgbGlzdCB0byBsYXN0IHNhbXBsZSdzIGJ1ZmZlciAqLwotICAgIGZpcnN0X2J1ZmZlciA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKHNpbmstPnByaXYtPmxhc3RfYnVmZmVyX2xpc3QsIDApOwotICAgIHJlcyA9Ci0gICAgICAgIGdzdF9zYW1wbGVfbmV3IChmaXJzdF9idWZmZXIsIHNpbmstPnByaXYtPmxhc3RfY2FwcywgJnNpbmstPnNlZ21lbnQsCi0gICAgICAgIE5VTEwpOwotICAgIGdzdF9zYW1wbGVfc2V0X2J1ZmZlcl9saXN0IChyZXMsIHNpbmstPnByaXYtPmxhc3RfYnVmZmVyX2xpc3QpOwotICB9IGVsc2UgaWYgKHNpbmstPnByaXYtPmxhc3RfYnVmZmVyKSB7Ci0gICAgcmVzID0gZ3N0X3NhbXBsZV9uZXcgKHNpbmstPnByaXYtPmxhc3RfYnVmZmVyLAotICAgICAgICBzaW5rLT5wcml2LT5sYXN0X2NhcHMsICZzaW5rLT5zZWdtZW50LCBOVUxMKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogd2l0aCBPQkpFQ1RfTE9DSyAqLwotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX3VubG9ja2VkIChHc3RCYXNlU2luayAqIHNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0QnVmZmVyICpvbGQ7Ci0KLSAgb2xkID0gc2luay0+cHJpdi0+bGFzdF9idWZmZXI7Ci0gIGlmIChHX0xJS0VMWSAob2xkICE9IGJ1ZmZlcikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2V0dGluZyBsYXN0IGJ1ZmZlciB0byAlcCIsIGJ1ZmZlcik7Ci0gICAgaWYgKEdfTElLRUxZIChidWZmZXIpKQotICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gICAgc2luay0+cHJpdi0+bGFzdF9idWZmZXIgPSBidWZmZXI7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgIC8qIGNvcHkgb3ZlciB0aGUgY2FwcyAqLwotICAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNpbmstPnByaXYtPmxhc3RfY2Fwcywgc2luay0+cHJpdi0+Y2Fwcyk7Ci0gICAgZWxzZQotICAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNpbmstPnByaXYtPmxhc3RfY2FwcywgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgb2xkID0gTlVMTDsKLSAgfQotICAvKiBhdm9pZCB1bnJlZmZpbmcgd2l0aCB0aGUgbG9jayBiZWNhdXNlIGNsZWFudXAgY29kZSBtaWdodCB3YW50IHRvIHRha2UgdGhlCi0gICAqIGxvY2sgdG9vICovCi0gIGlmIChHX0xJS0VMWSAob2xkKSkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvbGQpOwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gIH0KLX0KLQotLyogd2l0aCBPQkpFQ1RfTE9DSyAqLwotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2xpc3RfdW5sb2NrZWQgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RCdWZmZXJMaXN0ICogYnVmZmVyX2xpc3QpCi17Ci0gIEdzdEJ1ZmZlckxpc3QgKm9sZDsKLQotICBvbGQgPSBzaW5rLT5wcml2LT5sYXN0X2J1ZmZlcl9saXN0OwotICBpZiAoR19MSUtFTFkgKG9sZCAhPSBidWZmZXJfbGlzdCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2V0dGluZyBsYXN0IGJ1ZmZlciBsaXN0IHRvICVwIiwgYnVmZmVyX2xpc3QpOwotICAgIGlmIChHX0xJS0VMWSAoYnVmZmVyX2xpc3QpKQotICAgICAgZ3N0X21pbmlfb2JqZWN0X3JlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlcl9saXN0KSk7Ci0gICAgc2luay0+cHJpdi0+bGFzdF9idWZmZXJfbGlzdCA9IGJ1ZmZlcl9saXN0OwotICB9IGVsc2UgewotICAgIG9sZCA9IE5VTEw7Ci0gIH0KLQotICAvKiBhdm9pZCB1bnJlZmZpbmcgd2l0aCB0aGUgbG9jayBiZWNhdXNlIGNsZWFudXAgY29kZSBtaWdodCB3YW50IHRvIHRha2UgdGhlCi0gICAqIGxvY2sgdG9vICovCi0gIGlmIChHX0xJS0VMWSAob2xkKSkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChvbGQpKTsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlciAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIGlmICghZ19hdG9taWNfaW50X2dldCAoJnNpbmstPnByaXYtPmVuYWJsZV9sYXN0X3NhbXBsZSkpCi0gICAgcmV0dXJuOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX3VubG9ja2VkIChzaW5rLCBidWZmZXIpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9saXN0IChHc3RCYXNlU2luayAqIHNpbmssCi0gICAgR3N0QnVmZmVyTGlzdCAqIGJ1ZmZlcl9saXN0KQotewotICBpZiAoIWdfYXRvbWljX2ludF9nZXQgKCZzaW5rLT5wcml2LT5lbmFibGVfbGFzdF9zYW1wbGUpKQotICAgIHJldHVybjsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9saXN0X3VubG9ja2VkIChzaW5rLCBidWZmZXJfbGlzdCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X3NhbXBsZV9lbmFibGVkOgotICogQHNpbms6IHRoZSBzaW5rCi0gKiBAZW5hYmxlZDogdGhlIG5ldyBlbmFibGUtbGFzdC1zYW1wbGUgdmFsdWUuCi0gKgotICogQ29uZmlndXJlcyBAc2luayB0byBzdG9yZSB0aGUgbGFzdCByZWNlaXZlZCBzYW1wbGUgaW4gdGhlIGxhc3Qtc2FtcGxlCi0gKiBwcm9wZXJ0eS4KLSAqLwotdm9pZAotZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9zYW1wbGVfZW5hYmxlZCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBnYm9vbGVhbiBlbmFibGVkKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSk7Ci0KLSAgLyogT25seSB0YWtlIGxvY2sgaWYgd2UgY2hhbmdlIHRoZSB2YWx1ZSAqLwotICBpZiAoZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmc2luay0+cHJpdi0+ZW5hYmxlX2xhc3Rfc2FtcGxlLAotICAgICAgICAgICFlbmFibGVkLCBlbmFibGVkKSAmJiAhZW5hYmxlZCkgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXJfdW5sb2NrZWQgKHNpbmssIE5VTEwpOwotICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2xpc3RfdW5sb2NrZWQgKHNpbmssIE5VTEwpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NpbmtfaXNfbGFzdF9zYW1wbGVfZW5hYmxlZDoKLSAqIEBzaW5rOiB0aGUgc2luawotICoKLSAqIENoZWNrcyBpZiBAc2luayBpcyBjdXJyZW50bHkgY29uZmlndXJlZCB0byBzdG9yZSB0aGUgbGFzdCByZWNlaXZlZCBzYW1wbGUgaW4KLSAqIHRoZSBsYXN0LXNhbXBsZSBwcm9wZXJ0eS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc2luayBpcyBjb25maWd1cmVkIHRvIHN0b3JlIHRoZSBsYXN0IHJlY2VpdmVkIHNhbXBsZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfaXNfbGFzdF9zYW1wbGVfZW5hYmxlZCAoR3N0QmFzZVNpbmsgKiBzaW5rKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luayksIEZBTFNFKTsKLQotICByZXR1cm4gZ19hdG9taWNfaW50X2dldCAoJnNpbmstPnByaXYtPmVuYWJsZV9sYXN0X3NhbXBsZSk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeToKLSAqIEBzaW5rOiB0aGUgc2luawotICoKLSAqIEdldCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgbGF0ZW5jeS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgY29uZmlndXJlZCBsYXRlbmN5LgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9iYXNlX3NpbmtfZ2V0X2xhdGVuY3kgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgR3N0Q2xvY2tUaW1lIHJlczsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICByZXMgPSBzaW5rLT5wcml2LT5sYXRlbmN5OwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3k6Ci0gKiBAc2luazogdGhlIHNpbmsKLSAqIEBsaXZlOiAob3V0KSAoYWxsb3ctbm9uZSk6IGlmIHRoZSBzaW5rIGlzIGxpdmUKLSAqIEB1cHN0cmVhbV9saXZlOiAob3V0KSAoYWxsb3ctbm9uZSk6IGlmIGFuIHVwc3RyZWFtIGVsZW1lbnQgaXMgbGl2ZQotICogQG1pbl9sYXRlbmN5OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBtaW4gbGF0ZW5jeSBvZiB0aGUgdXBzdHJlYW0gZWxlbWVudHMKLSAqIEBtYXhfbGF0ZW5jeTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgbWF4IGxhdGVuY3kgb2YgdGhlIHVwc3RyZWFtIGVsZW1lbnRzCi0gKgotICogUXVlcnkgdGhlIHNpbmsgZm9yIHRoZSBsYXRlbmN5IHBhcmFtZXRlcnMuIFRoZSBsYXRlbmN5IHdpbGwgYmUgcXVlcmllZCBmcm9tCi0gKiB0aGUgdXBzdHJlYW0gZWxlbWVudHMuIEBsaXZlIHdpbGwgYmUgJVRSVUUgaWYgQHNpbmsgaXMgY29uZmlndXJlZCB0bwotICogc3luY2hyb25pemUgYWdhaW5zdCB0aGUgY2xvY2suIEB1cHN0cmVhbV9saXZlIHdpbGwgYmUgJVRSVUUgaWYgYW4gdXBzdHJlYW0KLSAqIGVsZW1lbnQgaXMgbGl2ZS4KLSAqCi0gKiBJZiBib3RoIEBsaXZlIGFuZCBAdXBzdHJlYW1fbGl2ZSBhcmUgJVRSVUUsIHRoZSBzaW5rIHdpbGwgd2FudCB0byBjb21wZW5zYXRlCi0gKiBmb3IgdGhlIGxhdGVuY3kgaW50cm9kdWNlZCBieSB0aGUgdXBzdHJlYW0gZWxlbWVudHMgYnkgc2V0dGluZyB0aGUKLSAqIEBtaW5fbGF0ZW5jeSB0byBhIHN0cmljdGx5IHBvc2l0aXZlIHZhbHVlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWQgYnkgc3ViY2xhc3Nlcy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVlcnkgc3VjY2VlZGVkLgotICovCi1nYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19xdWVyeV9sYXRlbmN5IChHc3RCYXNlU2luayAqIHNpbmssIGdib29sZWFuICogbGl2ZSwKLSAgICBnYm9vbGVhbiAqIHVwc3RyZWFtX2xpdmUsIEdzdENsb2NrVGltZSAqIG1pbl9sYXRlbmN5LAotICAgIEdzdENsb2NrVGltZSAqIG1heF9sYXRlbmN5KQotewotICBnYm9vbGVhbiBsLCB1c19saXZlLCByZXMsIGhhdmVfbGF0ZW5jeTsKLSAgR3N0Q2xvY2tUaW1lIG1pbiwgbWF4LCByZW5kZXJfZGVsYXk7Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgR3N0Q2xvY2tUaW1lIHVzX21pbiwgdXNfbWF4OwotCi0gIC8qIHdlIGFyZSBsaXZlIHdoZW4gd2Ugc3luYyB0byB0aGUgY2xvY2sgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgbCA9IHNpbmstPnN5bmM7Ci0gIGhhdmVfbGF0ZW5jeSA9IHNpbmstPnByaXYtPmhhdmVfbGF0ZW5jeTsKLSAgcmVuZGVyX2RlbGF5ID0gc2luay0+cHJpdi0+cmVuZGVyX2RlbGF5OwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0KLSAgLyogYXNzdW1lIG5vIGxhdGVuY3kgKi8KLSAgbWluID0gMDsKLSAgbWF4ID0gLTE7Ci0gIHVzX2xpdmUgPSBGQUxTRTsKLQotICBpZiAoaGF2ZV9sYXRlbmN5KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIndlIGFyZSByZWFkeSBmb3IgTEFURU5DWSBxdWVyeSIpOwotICAgIC8qIHdlIGFyZSByZWFkeSBmb3IgYSBsYXRlbmN5IHF1ZXJ5IHRoaXMgaXMgd2hlbiB3ZSBwcmVyb2xsIG9yIHdoZW4gd2UgYXJlCi0gICAgICogbm90IGFzeW5jLiAqLwotICAgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19sYXRlbmN5ICgpOwotCi0gICAgLyogYXNrIHRoZSBwZWVyIGZvciB0aGUgbGF0ZW5jeSAqLwotICAgIGlmICgocmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzaW5rLT5zaW5rcGFkLCBxdWVyeSkpKSB7Ci0gICAgICAvKiBnZXQgdXBzdHJlYW0gbWluIGFuZCBtYXggbGF0ZW5jeSAqLwotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKHF1ZXJ5LCAmdXNfbGl2ZSwgJnVzX21pbiwgJnVzX21heCk7Ci0KLSAgICAgIGlmICh1c19saXZlKSB7Ci0gICAgICAgIC8qIHVwc3RyZWFtIGxpdmUsIHVzZSBpdHMgbGF0ZW5jeSwgc3ViY2xhc3NlcyBzaG91bGQgdXNlIHRoZXNlCi0gICAgICAgICAqIHZhbHVlcyB0byBjcmVhdGUgdGhlIGNvbXBsZXRlIGxhdGVuY3kuICovCi0gICAgICAgIG1pbiA9IHVzX21pbjsKLSAgICAgICAgbWF4ID0gdXNfbWF4OwotICAgICAgfQotICAgICAgaWYgKGwpIHsKLSAgICAgICAgLyogd2UgbmVlZCB0byBhZGQgdGhlIHJlbmRlciBkZWxheSBpZiB3ZSBhcmUgbGl2ZSAqLwotICAgICAgICBtaW4gKz0gcmVuZGVyX2RlbGF5OwotICAgICAgICBpZiAobWF4ICE9IC0xKQotICAgICAgICAgIG1heCArPSByZW5kZXJfZGVsYXk7Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJ3ZSBhcmUgbm90IHlldCByZWFkeSBmb3IgTEFURU5DWSBxdWVyeSIpOwotICAgIHJlcyA9IEZBTFNFOwotICB9Ci0KLSAgLyogbm90IGxpdmUsIHdlIHRyaWVkIHRvIGRvIHRoZSBxdWVyeSwgaWYgaXQgZmFpbGVkIHdlIHJldHVybiBUUlVFIGFueXdheSAqLwotICBpZiAoIXJlcykgewotICAgIGlmICghbCkgewotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJsYXRlbmN5IHF1ZXJ5IGZhaWxlZCBidXQgd2UgYXJlIG5vdCBsaXZlIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJsYXRlbmN5IHF1ZXJ5IGZhaWxlZCBhbmQgd2UgYXJlIGxpdmUiKTsKLSAgICB9Ci0gIH0KLQotICBpZiAocmVzKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImxhdGVuY3kgcXVlcnk6IGxpdmU6ICVkLCBoYXZlX2xhdGVuY3kgJWQsIgotICAgICAgICAiIHVwc3RyZWFtOiAlZCwgbWluICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBtYXggJSIgR1NUX1RJTUVfRk9STUFULCBsLAotICAgICAgICBoYXZlX2xhdGVuY3ksIHVzX2xpdmUsIEdTVF9USU1FX0FSR1MgKG1pbiksIEdTVF9USU1FX0FSR1MgKG1heCkpOwotCi0gICAgaWYgKGxpdmUpCi0gICAgICAqbGl2ZSA9IGw7Ci0gICAgaWYgKHVwc3RyZWFtX2xpdmUpCi0gICAgICAqdXBzdHJlYW1fbGl2ZSA9IHVzX2xpdmU7Ci0gICAgaWYgKG1pbl9sYXRlbmN5KQotICAgICAgKm1pbl9sYXRlbmN5ID0gbWluOwotICAgIGlmIChtYXhfbGF0ZW5jeSkKLSAgICAgICptYXhfbGF0ZW5jeSA9IG1heDsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheToKLSAqIEBzaW5rOiBhICNHc3RCYXNlU2luawotICogQGRlbGF5OiB0aGUgbmV3IGRlbGF5Ci0gKgotICogU2V0IHRoZSByZW5kZXIgZGVsYXkgaW4gQHNpbmsgdG8gQGRlbGF5LiBUaGUgcmVuZGVyIGRlbGF5IGlzIHRoZSB0aW1lCi0gKiBiZXR3ZWVuIGFjdHVhbCByZW5kZXJpbmcgb2YgYSBidWZmZXIgYW5kIGl0cyBzeW5jaHJvbmlzYXRpb24gdGltZS4gU29tZQotICogZGV2aWNlcyBtaWdodCBkZWxheSBtZWRpYSByZW5kZXJpbmcgd2hpY2ggY2FuIGJlIGNvbXBlbnNhdGVkIGZvciB3aXRoIHRoaXMKLSAqIGZ1bmN0aW9uLgotICoKLSAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhpcyBzaW5rIHdpbGwgcmVwb3J0IGFkZGl0aW9uYWwgbGF0ZW5jeSBhbmQKLSAqIG90aGVyIHNpbmtzIHdpbGwgYWRqdXN0IHRoZWlyIGxhdGVuY3kgdG8gZGVsYXkgdGhlIHJlbmRlcmluZyBvZiB0aGVpciBtZWRpYS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGJ5IHN1YmNsYXNzZXMuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RDbG9ja1RpbWUgZGVsYXkpCi17Ci0gIEdzdENsb2NrVGltZSBvbGRfcmVuZGVyX2RlbGF5OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICBvbGRfcmVuZGVyX2RlbGF5ID0gc2luay0+cHJpdi0+cmVuZGVyX2RlbGF5OwotICBzaW5rLT5wcml2LT5yZW5kZXJfZGVsYXkgPSBkZWxheTsKLSAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJzZXQgcmVuZGVyIGRlbGF5IHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGRlbGF5KSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLQotICBpZiAoZGVsYXkgIT0gb2xkX3JlbmRlcl9kZWxheSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwb3N0aW5nIGxhdGVuY3kgY2hhbmdlZCIpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2luayksCi0gICAgICAgIGdzdF9tZXNzYWdlX25ld19sYXRlbmN5IChHU1RfT0JKRUNUX0NBU1QgKHNpbmspKSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX2dldF9yZW5kZXJfZGVsYXk6Ci0gKiBAc2luazogYSAjR3N0QmFzZVNpbmsKLSAqCi0gKiBHZXQgdGhlIHJlbmRlciBkZWxheSBvZiBAc2luay4gc2VlIGdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSgpIGZvciBtb3JlCi0gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVuZGVyIGRlbGF5LgotICoKLSAqIFJldHVybnM6IHRoZSByZW5kZXIgZGVsYXkgb2YgQHNpbmsuCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5IChHc3RCYXNlU2luayAqIHNpbmspCi17Ci0gIEdzdENsb2NrVGltZURpZmYgcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSwgMCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgcmVzID0gc2luay0+cHJpdi0+cmVuZGVyX2RlbGF5OwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemU6Ci0gKiBAc2luazogYSAjR3N0QmFzZVNpbmsKLSAqIEBibG9ja3NpemU6IHRoZSBibG9ja3NpemUgaW4gYnl0ZXMKLSAqCi0gKiBTZXQgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBzaW5rIHdpbGwgcHVsbCB3aGVuIGl0IGlzIG9wZXJhdGluZyBpbiBwdWxsCi0gKiBtb2RlLgotICovCi0vKiBGSVhNRSAyLjA6IGJsb2Nrc2l6ZSBwcm9wZXJ0eSBzaG91bGQgYmUgaW50LCBvdGhlcndpc2UgbWluPm1heC4uICovCi12b2lkCi1nc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemUgKEdzdEJhc2VTaW5rICogc2luaywgZ3VpbnQgYmxvY2tzaXplKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgc2luay0+cHJpdi0+YmxvY2tzaXplID0gYmxvY2tzaXplOwotICBHU1RfTE9HX09CSkVDVCAoc2luaywgInNldCBibG9ja3NpemUgdG8gJXUiLCBibG9ja3NpemUpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19nZXRfYmxvY2tzaXplOgotICogQHNpbms6IGEgI0dzdEJhc2VTaW5rCi0gKgotICogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgc2luayB3aWxsIHB1bGwgd2hlbiBpdCBpcyBvcGVyYXRpbmcgaW4gcHVsbAotICogbW9kZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIEBzaW5rIHdpbGwgcHVsbCBpbiBwdWxsIG1vZGUuCi0gKi8KLS8qIEZJWE1FIDIuMDogYmxvY2tzaXplIHByb3BlcnR5IHNob3VsZCBiZSBpbnQsIG90aGVyd2lzZSBtaW4+bWF4Li4gKi8KLWd1aW50Ci1nc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemUgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgZ3VpbnQgcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSwgMCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgcmVzID0gc2luay0+cHJpdi0+YmxvY2tzaXplOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lOgotICogQHNpbms6IGEgI0dzdEJhc2VTaW5rCi0gKiBAdGhyb3R0bGU6IHRoZSB0aHJvdHRsZSB0aW1lIGluIG5hbm9zZWNvbmRzCi0gKgotICogU2V0IHRoZSB0aW1lIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCBiZXR3ZWVuIHJlbmRlcmVkIGJ1ZmZlcnMuIFRoaXMKLSAqIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG1heGltdW0gYnVmZmVycyBwZXIgc2Vjb25kIHRoYXQgdGhlIHNpbmsKLSAqIHdpbGwgcmVuZGVyLiAKLSAqLwotdm9pZAotZ3N0X2Jhc2Vfc2lua19zZXRfdGhyb3R0bGVfdGltZSAoR3N0QmFzZVNpbmsgKiBzaW5rLCBndWludDY0IHRocm90dGxlKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TSU5LIChzaW5rKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgc2luay0+cHJpdi0+dGhyb3R0bGVfdGltZSA9IHRocm90dGxlOwotICBHU1RfTE9HX09CSkVDVCAoc2luaywgInNldCB0aHJvdHRsZV90aW1lIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHRocm90dGxlKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWU6Ci0gKiBAc2luazogYSAjR3N0QmFzZVNpbmsKLSAqCi0gKiBHZXQgdGhlIHRpbWUgdGhhdCB3aWxsIGJlIGluc2VydGVkIGJldHdlZW4gZnJhbWVzIHRvIGNvbnRyb2wgdGhlIAotICogbWF4aW11bSBidWZmZXJzIHBlciBzZWNvbmQuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBAc2luayB3aWxsIHB1dCBiZXR3ZWVuIGZyYW1lcy4KLSAqLwotZ3VpbnQ2NAotZ3N0X2Jhc2Vfc2lua19nZXRfdGhyb3R0bGVfdGltZSAoR3N0QmFzZVNpbmsgKiBzaW5rKQotewotICBndWludDY0IHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luayksIDApOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gIHJlcyA9IHNpbmstPnByaXYtPnRocm90dGxlX3RpbWU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3Npbmtfc2V0X21heF9iaXRyYXRlOgotICogQHNpbms6IGEgI0dzdEJhc2VTaW5rCi0gKiBAbWF4X2JpdHJhdGU6IHRoZSBtYXhfYml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQKLSAqCi0gKiBTZXQgdGhlIG1heGltdW0gYW1vdW50IG9mIGJpdHMgcGVyIHNlY29uZCB0aGF0IHRoZSBzaW5rIHdpbGwgcmVuZGVyLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2JpdHJhdGUgKEdzdEJhc2VTaW5rICogc2luaywgZ3VpbnQ2NCBtYXhfYml0cmF0ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU0lOSyAoc2luaykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gIHNpbmstPnByaXYtPm1heF9iaXRyYXRlID0gbWF4X2JpdHJhdGU7Ci0gIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAic2V0IG1heF9iaXRyYXRlIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG1heF9iaXRyYXRlKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NpbmtfZ2V0X21heF9iaXRyYXRlOgotICogQHNpbms6IGEgI0dzdEJhc2VTaW5rCi0gKgotICogR2V0IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBiaXRzIHBlciBzZWNvbmQgdGhhdCB0aGUgc2luayB3aWxsIHJlbmRlci4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYml0cyBwZXIgc2Vjb25kIEBzaW5rIHdpbGwgcmVuZGVyLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ3VpbnQ2NAotZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2JpdHJhdGUgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgZ3VpbnQ2NCByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NJTksgKHNpbmspLCAwKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICByZXMgPSBzaW5rLT5wcml2LT5tYXhfYml0cmF0ZTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RCYXNlU2luayAqc2luayA9IEdTVF9CQVNFX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NZTkM6Ci0gICAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jIChzaW5rLCBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9MQVRFTkVTUzoKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyAoc2luaywgZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUU9TOgotICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQgKHNpbmssIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVNZTkM6Ci0gICAgICBnc3RfYmFzZV9zaW5rX3NldF9hc3luY19lbmFibGVkIChzaW5rLCBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RTX09GRlNFVDoKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCAoc2luaywgZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgotICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfYmxvY2tzaXplIChzaW5rLCBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFTkRFUl9ERUxBWToKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheSAoc2luaywgZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VOQUJMRV9MQVNUX1NBTVBMRToKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3Rfc2FtcGxlX2VuYWJsZWQgKHNpbmssIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEhST1RUTEVfVElNRToKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3Rocm90dGxlX3RpbWUgKHNpbmssIGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfQklUUkFURToKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X21heF9iaXRyYXRlIChzaW5rLCBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RCYXNlU2luayAqc2luayA9IEdTVF9CQVNFX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NZTkM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0X2Jhc2Vfc2lua19nZXRfc3luYyAoc2luaykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9MQVRFTkVTUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzIChzaW5rKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUU9TOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdzdF9iYXNlX3NpbmtfaXNfcW9zX2VuYWJsZWQgKHNpbmspKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BU1lOQzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3RfYmFzZV9zaW5rX2lzX2FzeW5jX2VuYWJsZWQgKHNpbmspKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UU19PRkZTRVQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQ2NCAodmFsdWUsIGdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldCAoc2luaykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xBU1RfU0FNUExFOgotICAgICAgZ3N0X3ZhbHVlX3Rha2Vfc2FtcGxlICh2YWx1ZSwgZ3N0X2Jhc2Vfc2lua19nZXRfbGFzdF9zYW1wbGUgKHNpbmspKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FTkFCTEVfTEFTVF9TQU1QTEU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0X2Jhc2Vfc2lua19pc19sYXN0X3NhbXBsZV9lbmFibGVkIChzaW5rKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZSAoc2luaykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFTkRFUl9ERUxBWToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGdzdF9iYXNlX3NpbmtfZ2V0X3JlbmRlcl9kZWxheSAoc2luaykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RIUk9UVExFX1RJTUU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBnc3RfYmFzZV9zaW5rX2dldF90aHJvdHRsZV90aW1lIChzaW5rKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0JJVFJBVEU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBnc3RfYmFzZV9zaW5rX2dldF9tYXhfYml0cmF0ZSAoc2luaykpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9iYXNlX3NpbmtfZGVmYXVsdF9nZXRfY2FwcyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RDYXBzICogZmlsdGVyKQotewotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX2RlZmF1bHRfc2V0X2NhcHMgKEdzdEJhc2VTaW5rICogc2luaywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiB3aXRoIFBSRVJPTExfTE9DSywgU1RSRUFNX0xPQ0sgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19jb21taXRfc3RhdGUgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCi17Ci0gIC8qIGNvbW1pdCBzdGF0ZSBhbmQgcHJvY2VlZCB0byBuZXh0IHBlbmRpbmcgc3RhdGUgKi8KLSAgR3N0U3RhdGUgY3VycmVudCwgbmV4dCwgcGVuZGluZywgcG9zdF9wZW5kaW5nOwotICBnYm9vbGVhbiBwb3N0X3BhdXNlZCA9IEZBTFNFOwotICBnYm9vbGVhbiBwb3N0X2FzeW5jX2RvbmUgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gcG9zdF9wbGF5aW5nID0gRkFMU0U7Ci0KLSAgLyogd2UgYXJlIGNlcnRhaW5seSBub3QgcGxheWluZyBhc3luYyBhbnltb3JlIG5vdyAqLwotICBiYXNlc2luay0+cGxheWluZ19hc3luYyA9IEZBTFNFOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOwotICBjdXJyZW50ID0gR1NUX1NUQVRFIChiYXNlc2luayk7Ci0gIG5leHQgPSBHU1RfU1RBVEVfTkVYVCAoYmFzZXNpbmspOwotICBwZW5kaW5nID0gR1NUX1NUQVRFX1BFTkRJTkcgKGJhc2VzaW5rKTsKLSAgcG9zdF9wZW5kaW5nID0gcGVuZGluZzsKLQotICBzd2l0Y2ggKHBlbmRpbmcpIHsKLSAgICBjYXNlIEdTVF9TVEFURV9QTEFZSU5HOgotICAgIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiY29tbWl0aW5nIHN0YXRlIHRvIFBMQVlJTkciKTsKLQotICAgICAgYmFzZXNpbmstPm5lZWRfcHJlcm9sbCA9IEZBTFNFOwotICAgICAgcG9zdF9hc3luY19kb25lID0gVFJVRTsKLSAgICAgIGJhc2VzaW5rLT5wcml2LT5jb21taXRlZCA9IFRSVUU7Ci0gICAgICBwb3N0X3BsYXlpbmcgPSBUUlVFOwotICAgICAgLyogcG9zdCBQQVVTRUQgdG9vIHdoZW4gd2Ugd2VyZSBSRUFEWSAqLwotICAgICAgaWYgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgIHBvc3RfcGF1c2VkID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImNvbW1pdGluZyBzdGF0ZSB0byBQQVVTRUQiKTsKLSAgICAgIHBvc3RfcGF1c2VkID0gVFJVRTsKLSAgICAgIHBvc3RfYXN5bmNfZG9uZSA9IFRSVUU7Ci0gICAgICBiYXNlc2luay0+cHJpdi0+Y29tbWl0ZWQgPSBUUlVFOwotICAgICAgcG9zdF9wZW5kaW5nID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX1JFQURZOgotICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6Ci0gICAgICBnb3RvIHN0b3BwaW5nOwotICAgIGNhc2UgR1NUX1NUQVRFX1ZPSURfUEVORElORzoKLSAgICAgIGdvdG8gbm90aGluZ19wZW5kaW5nOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIHdlIGNhbiByZXBvcnQgbGF0ZW5jeSBxdWVyaWVzIG5vdyAqLwotICBiYXNlc2luay0+cHJpdi0+aGF2ZV9sYXRlbmN5ID0gVFJVRTsKLQotICBHU1RfU1RBVEUgKGJhc2VzaW5rKSA9IHBlbmRpbmc7Ci0gIEdTVF9TVEFURV9ORVhUIChiYXNlc2luaykgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOwotICBHU1RfU1RBVEVfUEVORElORyAoYmFzZXNpbmspID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLSAgR1NUX1NUQVRFX1JFVFVSTiAoYmFzZXNpbmspID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOwotCi0gIGlmIChwb3N0X3BhdXNlZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicG9zdGluZyBQQVVTRUQgc3RhdGUgY2hhbmdlIG1lc3NhZ2UiKTsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0YXRlX2NoYW5nZWQgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspLAotICAgICAgICAgICAgY3VycmVudCwgbmV4dCwgcG9zdF9wZW5kaW5nKSk7Ci0gIH0KLSAgaWYgKHBvc3RfYXN5bmNfZG9uZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicG9zdGluZyBhc3luYy1kb25lIG1lc3NhZ2UiKTsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmUgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspLAotICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSkpOwotICB9Ci0gIGlmIChwb3N0X3BsYXlpbmcpIHsKLSAgICBpZiAocG9zdF9wYXVzZWQpIHsKLSAgICAgIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3M7Ci0KLSAgICAgIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChiYXNlc2luayk7Ci0gICAgICBiYXNlc2luay0+aGF2ZV9wcmVyb2xsID0gVFJVRTsKLSAgICAgIC8qIGFmdGVyIHJlbGVhc2luZyB0aGlzIGxvY2ssIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24KLSAgICAgICAqIGNhbiBleGVjdXRlIGNvbmN1cnJlbnRseSB3aXRoIHRoaXMgdGhyZWFkLiBUaGVyZSBpcyBub3RoaW5nIHdlIGRvIHRvCi0gICAgICAgKiBwcmV2ZW50IHRoaXMgZm9yIG5vdy4gc3ViY2xhc3NlcyBzaG91bGQgYmUgcHJlcGFyZWQgdG8gaGFuZGxlIGl0LiAqLwotICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoYmFzZXNpbmspOwotCi0gICAgICBpZiAoa2xhc3MtPmNoYW5nZV9zdGF0ZSkKLSAgICAgICAga2xhc3MtPmNoYW5nZV9zdGF0ZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLAotICAgICAgICAgICAgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORyk7Ci0KLSAgICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChiYXNlc2luayk7Ci0gICAgICAvKiBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gY291bGQgaGF2ZSBiZWVuIGV4ZWN1dGVkIGFuZCB3ZSBjb3VsZCBiZQotICAgICAgICogZmx1c2hpbmcgbm93ICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPmZsdXNoaW5nKSkKLSAgICAgICAgZ290byBzdG9wcGluZ191bmxvY2tlZDsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwb3N0aW5nIFBMQVlJTkcgc3RhdGUgY2hhbmdlIG1lc3NhZ2UiKTsKLSAgICAvKiBGSVhNRSwgd2UgcmVsZWFzZWQgdGhlIFBSRVJPTEwgbG9jayBhYm92ZSwgaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMKLSAgICAgKiBtZXNzYWdlIGlzIG5vdCBjb3JyZWN0IGFueW1vcmUgd2hlbiB0aGUgZWxlbWVudCB3ZW50IGJhY2sgdG8gUEFVU0VEICovCi0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksCi0gICAgICAgIGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkIChHU1RfT0JKRUNUX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgICAgIG5leHQsIHBlbmRpbmcsIEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpKTsKLSAgfQotCi0gIEdTVF9TVEFURV9CUk9BRENBU1QgKGJhc2VzaW5rKTsKLQotICByZXR1cm4gVFJVRTsKLQotbm90aGluZ19wZW5kaW5nOgotICB7Ci0gICAgLyogRGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSwgc2V0IG91ciB2YXJzLiBXZSBnZXQgaW4gdGhpcyBzaXR1YXRpb24gd2hlbiB0aGUKLSAgICAgKiBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gZ290IGEgY2hhbmdlIHRvIHVwZGF0ZSB0aGUgc3RhdGUgdmFycyBiZWZvcmUgdGhlCi0gICAgICogc3RyZWFtaW5nIHRocmVhZCBkaWQuIFRoaXMgaXMgZmluZSBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZQotICAgICAqIHVwZGF0ZSB0aGUgbmVlZF9wcmVyb2xsIHZhciBzaW5jZSBpdCB3YXMgJVRSVUUgd2hlbiB3ZSBnb3QgaGVyZSBhbmQgbWlnaHQKLSAgICAgKiBiZWNvbWUgJUZBTFNFIGlmIHdlIGdvdCB0byBQTEFZSU5HLiAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAibm90aGluZyB0byBjb21taXQsIG5vdyBpbiAlcyIsCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChjdXJyZW50KSk7Ci0gICAgc3dpdGNoIChjdXJyZW50KSB7Ci0gICAgICBjYXNlIEdTVF9TVEFURV9QTEFZSU5HOgotICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfU1RBVEVfUEFVU0VEOgotICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gRkFMU0U7Ci0gICAgICAgIGJhc2VzaW5rLT5mbHVzaGluZyA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvKiB3ZSBjYW4gcmVwb3J0IGxhdGVuY3kgcXVlcmllcyBub3cgKi8KLSAgICBiYXNlc2luay0+cHJpdi0+aGF2ZV9sYXRlbmN5ID0gVFJVRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOwotICAgIHJldHVybiBUUlVFOwotICB9Ci1zdG9wcGluZ191bmxvY2tlZDoKLSAgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOwotICAgIGdvdG8gc3RvcHBpbmc7Ci0gIH0KLXN0b3BwaW5nOgotICB7Ci0gICAgLyogYXBwIGlzIGdvaW5nIHRvIFJFQURZICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJzdG9wcGluZyIpOwotICAgIGJhc2VzaW5rLT5uZWVkX3ByZXJvbGwgPSBGQUxTRTsKLSAgICBiYXNlc2luay0+Zmx1c2hpbmcgPSBUUlVFOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdGFydF9zdGVwcGluZyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RTZWdtZW50ICogc2VnbWVudCwKLSAgICBHc3RTdGVwSW5mbyAqIHBlbmRpbmcsIEdzdFN0ZXBJbmZvICogY3VycmVudCkKLXsKLSAgZ2ludDY0IGVuZDsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAidXBkYXRlIHBlbmRpbmcgc3RlcCIpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gIG1lbWNweSAoY3VycmVudCwgcGVuZGluZywgc2l6ZW9mIChHc3RTdGVwSW5mbykpOwotICBwZW5kaW5nLT52YWxpZCA9IEZBTFNFOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0KLSAgLyogcG9zdCBtZXNzYWdlIGZpcnN0ICovCi0gIG1lc3NhZ2UgPQotICAgICAgZ3N0X21lc3NhZ2VfbmV3X3N0ZXBfc3RhcnQgKEdTVF9PQkpFQ1QgKHNpbmspLCBUUlVFLCBjdXJyZW50LT5mb3JtYXQsCi0gICAgICBjdXJyZW50LT5hbW91bnQsIGN1cnJlbnQtPnJhdGUsIGN1cnJlbnQtPmZsdXNoLCBjdXJyZW50LT5pbnRlcm1lZGlhdGUpOwotICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtZXNzYWdlLCBjdXJyZW50LT5zZXFudW0pOwotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChzaW5rKSwgbWVzc2FnZSk7Ci0KLSAgLyogZ2V0IHRoZSBydW5uaW5nIHRpbWUgb2Ygd2hlcmUgd2UgcGF1c2VkIGFuZCByZW1lbWJlciBpdCAqLwotICBjdXJyZW50LT5zdGFydCA9IGdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lIChHU1RfRUxFTUVOVF9DQVNUIChzaW5rKSk7Ci0gIGdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUgKHNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgY3VycmVudC0+c3RhcnQpOwotCi0gIC8qIHNldCB0aGUgbmV3IHJhdGUgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHNlZ21lbnQgKi8KLSAgY3VycmVudC0+c3RhcnRfcmF0ZSA9IHNlZ21lbnQtPnJhdGU7Ci0gIHNlZ21lbnQtPnJhdGUgKj0gY3VycmVudC0+cmF0ZTsKLQotICAvKiBzYXZlIHZhbHVlcyAqLwotICBpZiAoc2VnbWVudC0+cmF0ZSA+IDAuMCkKLSAgICBjdXJyZW50LT5zdGFydF9zdG9wID0gc2VnbWVudC0+c3RvcDsKLSAgZWxzZQotICAgIGN1cnJlbnQtPnN0YXJ0X3N0YXJ0ID0gc2VnbWVudC0+c3RhcnQ7Ci0KLSAgaWYgKGN1cnJlbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAvKiBjYWxjdWxhdGUgdGhlIHJ1bm5pbmctdGltZSB3aGVuIHRoZSBzdGVwIG9wZXJhdGlvbiBzaG91bGQgc3RvcCAqLwotICAgIGlmIChjdXJyZW50LT5hbW91bnQgIT0gLTEpCi0gICAgICBlbmQgPSBjdXJyZW50LT5zdGFydCArIGN1cnJlbnQtPmFtb3VudDsKLSAgICBlbHNlCi0gICAgICBlbmQgPSAtMTsKLQotICAgIGlmICghY3VycmVudC0+Zmx1c2gpIHsKLSAgICAgIGdpbnQ2NCBwb3NpdGlvbjsKLQotICAgICAgLyogdXBkYXRlIHRoZSBzZWdtZW50IGNsaXBwaW5nIHJlZ2lvbnMgZm9yIG5vbi1mbHVzaGluZyBzZWVrcyAqLwotICAgICAgaWYgKHNlZ21lbnQtPnJhdGUgPiAwLjApIHsKLSAgICAgICAgaWYgKGVuZCAhPSAtMSkKLSAgICAgICAgICBwb3NpdGlvbiA9Ci0gICAgICAgICAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICAgIGVuZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwb3NpdGlvbiA9IHNlZ21lbnQtPnN0b3A7Ci0KLSAgICAgICAgc2VnbWVudC0+c3RvcCA9IHBvc2l0aW9uOwotICAgICAgICBzZWdtZW50LT5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGVuZCAhPSAtMSkKLSAgICAgICAgICBwb3NpdGlvbiA9Ci0gICAgICAgICAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICAgIGVuZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBwb3NpdGlvbiA9IHNlZ21lbnQtPnN0YXJ0OwotCi0gICAgICAgIHNlZ21lbnQtPnRpbWUgPSBwb3NpdGlvbjsKLSAgICAgICAgc2VnbWVudC0+c3RhcnQgPSBwb3NpdGlvbjsKLSAgICAgICAgc2VnbWVudC0+cG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2VnbWVudCBub3cgJSIgR1NUX1NFR01FTlRfRk9STUFULCBzZWdtZW50KTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInN0ZXAgc3RhcnRlZCBhdCBydW5uaW5nX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoY3VycmVudC0+c3RhcnQpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RlcCBhbW91bnQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZm9ybWF0OiAlcywgIgotICAgICAgInJhdGU6ICVmIiwgY3VycmVudC0+YW1vdW50LCBnc3RfZm9ybWF0X2dldF9uYW1lIChjdXJyZW50LT5mb3JtYXQpLAotICAgICAgY3VycmVudC0+cmF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdG9wX3N0ZXBwaW5nIChHc3RCYXNlU2luayAqIHNpbmssIEdzdFNlZ21lbnQgKiBzZWdtZW50LAotICAgIEdzdFN0ZXBJbmZvICogY3VycmVudCwgZ2ludDY0IHJzdGFydCwgZ2ludDY0IHJzdG9wLCBnYm9vbGVhbiBlb3MpCi17Ci0gIGdpbnQ2NCBzdG9wLCBwb3NpdGlvbjsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RlcCBjb21wbGV0ZSIpOwotCi0gIGlmIChzZWdtZW50LT5yYXRlID4gMC4wKQotICAgIHN0b3AgPSByc3RhcnQ7Ci0gIGVsc2UKLSAgICBzdG9wID0gcnN0b3A7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywKLSAgICAgICJzdGVwIHN0b3AgYXQgcnVubmluZ190aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RvcCkpOwotCi0gIGlmIChzdG9wID09IC0xKQotICAgIGN1cnJlbnQtPmR1cmF0aW9uID0gY3VycmVudC0+cG9zaXRpb247Ci0gIGVsc2UKLSAgICBjdXJyZW50LT5kdXJhdGlvbiA9IHN0b3AgLSBjdXJyZW50LT5zdGFydDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RlcCBlbGFwc2VkIHJ1bm5pbmdfdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChjdXJyZW50LT5kdXJhdGlvbikpOwotCi0gIHBvc2l0aW9uID0gY3VycmVudC0+c3RhcnQgKyBjdXJyZW50LT5kdXJhdGlvbjsKLQotICAvKiBub3cgbW92ZSB0aGUgc2VnbWVudCB0byB0aGUgbmV3IHJ1bm5pbmcgdGltZSAqLwotICBnc3Rfc2VnbWVudF9zZXRfcnVubmluZ190aW1lIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHBvc2l0aW9uKTsKLQotICBpZiAoY3VycmVudC0+Zmx1c2gpIHsKLSAgICAvKiBhbmQgcmVtb3ZlIHRoZSB0aW1lIHdlIGZsdXNoZWQsIHN0YXJ0IHRpbWUgZGlkIG5vdCBjaGFuZ2UgKi8KLSAgICBzZWdtZW50LT5iYXNlID0gY3VycmVudC0+c3RhcnQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogc3RhcnQgdGltZSBpcyBub3cgdGhlIHN0ZXBwZWQgcG9zaXRpb24gKi8KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhcnRfdGltZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2luayksIHBvc2l0aW9uKTsKLSAgfQotCi0gIC8qIHJlc3RvcmUgdGhlIHByZXZpb3VzIHJhdGUgKi8KLSAgc2VnbWVudC0+cmF0ZSA9IGN1cnJlbnQtPnN0YXJ0X3JhdGU7Ci0KLSAgaWYgKHNlZ21lbnQtPnJhdGUgPiAwLjApCi0gICAgc2VnbWVudC0+c3RvcCA9IGN1cnJlbnQtPnN0YXJ0X3N0b3A7Ci0gIGVsc2UKLSAgICBzZWdtZW50LT5zdGFydCA9IGN1cnJlbnQtPnN0YXJ0X3N0YXJ0OwotCi0gIC8qIHBvc3QgdGhlIHN0ZXAgZG9uZSB3aGVuIHdlIGtub3cgdGhlIHN0ZXBwZWQgZHVyYXRpb24gaW4gVElNRSAqLwotICBtZXNzYWdlID0KLSAgICAgIGdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmUgKEdTVF9PQkpFQ1RfQ0FTVCAoc2luayksIGN1cnJlbnQtPmZvcm1hdCwKLSAgICAgIGN1cnJlbnQtPmFtb3VudCwgY3VycmVudC0+cmF0ZSwgY3VycmVudC0+Zmx1c2gsIGN1cnJlbnQtPmludGVybWVkaWF0ZSwKLSAgICAgIGN1cnJlbnQtPmR1cmF0aW9uLCBlb3MpOwotICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtZXNzYWdlLCBjdXJyZW50LT5zZXFudW0pOwotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHNpbmspLCBtZXNzYWdlKTsKLQotICBpZiAoIWN1cnJlbnQtPmludGVybWVkaWF0ZSkKLSAgICBzaW5rLT5uZWVkX3ByZXJvbGwgPSBjdXJyZW50LT5uZWVkX3ByZXJvbGw7Ci0KLSAgLyogYW5kIHRoZSBjdXJyZW50IHN0ZXAgaW5mbyBmaW5pc2hlZCBhbmQgYmVjb21lcyBpbnZhbGlkICovCi0gIGN1cnJlbnQtPnZhbGlkID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaGFuZGxlX3N0ZXBwaW5nIChHc3RCYXNlU2luayAqIHNpbmssIEdzdFNlZ21lbnQgKiBzZWdtZW50LAotICAgIEdzdFN0ZXBJbmZvICogY3VycmVudCwgZ3VpbnQ2NCAqIGNzdGFydCwgZ3VpbnQ2NCAqIGNzdG9wLCBndWludDY0ICogcnN0YXJ0LAotICAgIGd1aW50NjQgKiByc3RvcCkKLXsKLSAgZ2Jvb2xlYW4gc3RlcF9lbmQgPSBGQUxTRTsKLQotICAvKiBzdGVwcGluZyBuZXZlciBzdG9wcyAqLwotICBpZiAoY3VycmVudC0+YW1vdW50ID09IC0xKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBzZWUgaWYgd2UgbmVlZCB0byBza2lwIHRoaXMgYnVmZmVyIGJlY2F1c2Ugb2Ygc3RlcHBpbmcgKi8KLSAgc3dpdGNoIChjdXJyZW50LT5mb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICB7Ci0gICAgICBndWludDY0IGVuZDsKLSAgICAgIGd1aW50NjQgZmlyc3QsIGxhc3Q7Ci0gICAgICBnZG91YmxlIGFic19yYXRlOwotCi0gICAgICBpZiAoc2VnbWVudC0+cmF0ZSA+IDAuMCkgewotICAgICAgICBpZiAoc2VnbWVudC0+c3RvcCA9PSAqY3N0b3ApCi0gICAgICAgICAgKnJzdG9wID0gKnJzdGFydCArIGN1cnJlbnQtPmFtb3VudDsKLQotICAgICAgICBmaXJzdCA9ICpyc3RhcnQ7Ci0gICAgICAgIGxhc3QgPSAqcnN0b3A7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoc2VnbWVudC0+c3RhcnQgPT0gKmNzdGFydCkKLSAgICAgICAgICAqcnN0YXJ0ID0gKnJzdG9wICsgY3VycmVudC0+YW1vdW50OwotCi0gICAgICAgIGZpcnN0ID0gKnJzdG9wOwotICAgICAgICBsYXN0ID0gKnJzdGFydDsKLSAgICAgIH0KLQotICAgICAgZW5kID0gY3VycmVudC0+c3RhcnQgKyBjdXJyZW50LT5hbW91bnQ7Ci0gICAgICBjdXJyZW50LT5wb3NpdGlvbiA9IGZpcnN0IC0gY3VycmVudC0+c3RhcnQ7Ci0KLSAgICAgIGFic19yYXRlID0gQUJTIChzZWdtZW50LT5yYXRlKTsKLSAgICAgIGlmIChHX1VOTElLRUxZIChhYnNfcmF0ZSAhPSAxLjApKQotICAgICAgICBjdXJyZW50LT5wb3NpdGlvbiAvPSBhYnNfcmF0ZTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywKLSAgICAgICAgICAiYnVmZmVyOiAlIiBHU1RfVElNRV9GT1JNQVQgIi0lIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZmlyc3QpLCBHU1RfVElNRV9BUkdTIChsYXN0KSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLAotICAgICAgICAgICJnb3QgdGltZSBzdGVwICUiIEdTVF9USU1FX0ZPUk1BVCAiLSUiIEdTVF9USU1FX0ZPUk1BVCAiLyUiCi0gICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChjdXJyZW50LT5wb3NpdGlvbiksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGFzdCAtIGN1cnJlbnQtPnN0YXJ0KSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChjdXJyZW50LT5hbW91bnQpKTsKLQotICAgICAgaWYgKChjdXJyZW50LT5mbHVzaCAmJiBjdXJyZW50LT5wb3NpdGlvbiA+PSBjdXJyZW50LT5hbW91bnQpCi0gICAgICAgICAgfHwgbGFzdCA+PSBlbmQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInN0ZXAgZW5kZWQsIHdlIG5lZWQgY2xpcHBpbmciKTsKLSAgICAgICAgc3RlcF9lbmQgPSBUUlVFOwotICAgICAgICBpZiAoc2VnbWVudC0+cmF0ZSA+IDAuMCkgewotICAgICAgICAgICpyc3RhcnQgPSBlbmQ7Ci0gICAgICAgICAgKmNzdGFydCA9Ci0gICAgICAgICAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICAgIGVuZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgKnJzdG9wID0gZW5kOwotICAgICAgICAgICpjc3RvcCA9Ci0gICAgICAgICAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lIChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICAgIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssCi0gICAgICAgICAgImNzdGFydCAlIiBHU1RfVElNRV9GT1JNQVQgIiwgcnN0YXJ0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTICgqY3N0YXJ0KSwgR1NUX1RJTUVfQVJHUyAoKnJzdGFydCkpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywKLSAgICAgICAgICAiY3N0b3AgJSIgR1NUX1RJTUVfRk9STUFUICIsIHJzdG9wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTICgqY3N0b3ApLCBHU1RfVElNRV9BUkdTICgqcnN0b3ApKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9GT1JNQVRfQlVGRkVSUzoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssCi0gICAgICAgICAgImdvdCBkZWZhdWx0IHN0ZXAgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLyUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgY3VycmVudC0+cG9zaXRpb24sIGN1cnJlbnQtPmFtb3VudCk7Ci0KLSAgICAgIGlmIChjdXJyZW50LT5wb3NpdGlvbiA8IGN1cnJlbnQtPmFtb3VudCkgewotICAgICAgICBjdXJyZW50LT5wb3NpdGlvbisrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RlcF9lbmQgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssCi0gICAgICAgICAgImdvdCB1bmtub3duIHN0ZXAgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLyUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgY3VycmVudC0+cG9zaXRpb24sIGN1cnJlbnQtPmFtb3VudCk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gc3RlcF9lbmQ7Ci19Ci0KLS8qIHdpdGggU1RSRUFNX0xPQ0ssIFBSRVJPTExfTE9DSwotICoKLSAqIFJldHVybnMgJVRSVUUgaWYgdGhlIG9iamVjdCBuZWVkcyBzeW5jaHJvbmlzYXRpb24gYW5kIHRha2VzIHRoZXJlZm9yZQotICogcGFydCBpbiBwcmVyb2xsaW5nLgotICoKLSAqIHJzc3RhcnQvcnNzdG9wIGNvbnRhaW4gdGhlIHN0YXJ0L3N0b3AgaW4gc3RyZWFtIHRpbWUuCi0gKiBycnN0YXJ0L3Jyc3RvcCBjb250YWluIHRoZSBzdGFydC9zdG9wIGluIHJ1bm5pbmcgdGltZS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX2dldF9zeW5jX3RpbWVzIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RNaW5pT2JqZWN0ICogb2JqLAotICAgIEdzdENsb2NrVGltZSAqIHJzc3RhcnQsIEdzdENsb2NrVGltZSAqIHJzc3RvcCwKLSAgICBHc3RDbG9ja1RpbWUgKiBycnN0YXJ0LCBHc3RDbG9ja1RpbWUgKiBycnN0b3AsIEdzdENsb2NrVGltZSAqIHJybmV4dCwKLSAgICBnYm9vbGVhbiAqIGRvX3N5bmMsIGdib29sZWFuICogc3RlcHBlZCwgR3N0U3RlcEluZm8gKiBzdGVwLAotICAgIGdib29sZWFuICogc3RlcF9lbmQpCi17Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmJjbGFzczsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBzdG9wOyAgICAgLyogcmF3IHN0YXJ0L3N0b3AgdGltZXN0YW1wcyAqLwotICBndWludDY0IGNzdGFydCwgY3N0b3A7ICAgICAgICAvKiBjbGlwcGVkIHJhdyB0aW1lc3RhbXBzICovCi0gIGd1aW50NjQgcnN0YXJ0LCByc3RvcCwgcm5leHQ7IC8qIGNsaXBwZWQgdGltZXN0YW1wcyBjb252ZXJ0ZWQgdG8gcnVubmluZyB0aW1lICovCi0gIEdzdENsb2NrVGltZSBzc3RhcnQsIHNzdG9wOyAgIC8qIGNsaXBwZWQgdGltZXN0YW1wcyBjb252ZXJ0ZWQgdG8gc3RyZWFtIHRpbWUgKi8KLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgR3N0QmFzZVNpbmtQcml2YXRlICpwcml2OwotICBHc3RTZWdtZW50ICpzZWdtZW50OwotICBnYm9vbGVhbiBlb3M7Ci0KLSAgcHJpdiA9IGJhc2VzaW5rLT5wcml2OwotICBzZWdtZW50ID0gJmJhc2VzaW5rLT5zZWdtZW50OwotCi0gIGJjbGFzcyA9IEdTVF9CQVNFX1NJTktfR0VUX0NMQVNTIChiYXNlc2luayk7Ci0KLWFnYWluOgotICAvKiBzdGFydCB3aXRoIG5vdGhpbmcgKi8KLSAgc3RhcnQgPSBzdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZW9zID0gRkFMU0U7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9JU19FVkVOVCAob2JqKSkpIHsKLSAgICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfRVZFTlRfQ0FTVCAob2JqKTsKLQotICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgICAgICAvKiBFT1MgZXZlbnQgbmVlZHMgc3luY2luZyAqLwotICAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgewotICAgICAgICBpZiAoc2VnbWVudC0+cmF0ZSA+PSAwLjApIHsKLSAgICAgICAgICBzc3RhcnQgPSBzc3RvcCA9IHByaXYtPmN1cnJlbnRfc3N0b3A7Ci0gICAgICAgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3N0YXJ0KSkgewotICAgICAgICAgICAgLyogd2UgaGF2ZSBub3Qgc2VlbiBhIGJ1ZmZlciB5ZXQsIHVzZSB0aGUgc2VnbWVudCB2YWx1ZXMgKi8KLSAgICAgICAgICAgIHNzdGFydCA9IHNzdG9wID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKHNlZ21lbnQsCi0gICAgICAgICAgICAgICAgc2VnbWVudC0+Zm9ybWF0LCBzZWdtZW50LT5zdG9wKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3N0YXJ0ID0gc3N0b3AgPSBwcml2LT5jdXJyZW50X3NzdGFydDsKLSAgICAgICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzc3RhcnQpKSB7Ci0gICAgICAgICAgICAvKiB3ZSBoYXZlIG5vdCBzZWVuIGEgYnVmZmVyIHlldCwgdXNlIHRoZSBzZWdtZW50IHZhbHVlcyAqLwotICAgICAgICAgICAgc3N0YXJ0ID0gc3N0b3AgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoc2VnbWVudCwKLSAgICAgICAgICAgICAgICBzZWdtZW50LT5mb3JtYXQsIHNlZ21lbnQtPnN0YXJ0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByc3RhcnQgPSByc3RvcCA9IHJuZXh0ID0gcHJpdi0+ZW9zX3J0aW1lOwotICAgICAgICAqZG9fc3luYyA9IHJzdGFydCAhPSAtMTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJzeW5jIHRpbWVzIGZvciBFT1MgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocnN0YXJ0KSk7Ci0gICAgICAgIC8qIGlmIHdlIGFyZSBzdGVwcGluZywgd2UgZW5kIG5vdyAqLwotICAgICAgICAqc3RlcF9lbmQgPSBzdGVwLT52YWxpZDsKLSAgICAgICAgZW9zID0gVFJVRTsKLSAgICAgICAgZ290byBlb3NfZG9uZTsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0VWRU5UX0dBUDoKLSAgICAgIHsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgZHVyYXRpb247Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9nYXAgKGV2ZW50LCAmdGltZXN0YW1wLCAmZHVyYXRpb24pOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiR290IEdhcCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICAgIiBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLCBHU1RfVElNRV9BUkdTIChkdXJhdGlvbikpOwotCi0gICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkgewotICAgICAgICAgIHN0YXJ0ID0gdGltZXN0YW1wOwotICAgICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHVyYXRpb24pKQotICAgICAgICAgICAgc3RvcCA9IHN0YXJ0ICsgZHVyYXRpb247Ci0gICAgICAgIH0KLSAgICAgICAgKmRvX3N5bmMgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIG90aGVyIGV2ZW50cyBkbyBub3QgbmVlZCBzeW5jaW5nICovCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogZWxzZSBkbyBidWZmZXIgc3luYyBjb2RlICovCi0gICAgR3N0QnVmZmVyICpidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKG9iaik7Ci0KLSAgICAvKiBqdXN0IGdldCB0aGUgdGltZXMgdG8gc2VlIGlmIHdlIG5lZWQgc3luY2luZywgaWYgdGhlIHN0YXJ0IHJldHVybnMgLTEgd2UKLSAgICAgKiBkb24ndCBzeW5jLiAqLwotICAgIGlmIChiY2xhc3MtPmdldF90aW1lcykKLSAgICAgIGJjbGFzcy0+Z2V0X3RpbWVzIChiYXNlc2luaywgYnVmZmVyLCAmc3RhcnQsICZzdG9wKTsKLQotICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXJ0KSkgewotICAgICAgLyogd2UgZG9uJ3QgbmVlZCB0byBzeW5jIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIGdldCB0aGUgdGltZXN0YW1wcyBmb3IKLSAgICAgICAqIHRyYWNraW5nIHRoZSBwb3NpdGlvbiAqLwotICAgICAgZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2dldF90aW1lcyAoYmFzZXNpbmssIGJ1ZmZlciwgJnN0YXJ0LCAmc3RvcCk7Ci0gICAgICAqZG9fc3luYyA9IEZBTFNFOwotICAgIH0gZWxzZSB7Ci0gICAgICAqZG9fc3luYyA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJnb3QgdGltZXMgc3RhcnQ6ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgc3RvcDogJSIgR1NUX1RJTUVfRk9STUFUICIsIGRvX3N5bmMgJWQiLCBHU1RfVElNRV9BUkdTIChzdGFydCksCi0gICAgICBHU1RfVElNRV9BUkdTIChzdG9wKSwgKmRvX3N5bmMpOwotCi0gIC8qIGNvbGxlY3Qgc2VnbWVudCBhbmQgZm9ybWF0IGZvciBjb2RlIGNsYXJpdHkgKi8KLSAgZm9ybWF0ID0gc2VnbWVudC0+Zm9ybWF0OwotCi0gIC8qIGNsaXAgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc2VnbWVudF9jbGlwIChzZWdtZW50LCBmb3JtYXQsCi0gICAgICAgICAgICAgIHN0YXJ0LCBzdG9wLCAmY3N0YXJ0LCAmY3N0b3ApKSkgewotICAgIGlmIChzdGVwLT52YWxpZCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJzdGVwIG91dCBvZiBzZWdtZW50Iik7Ci0gICAgICAvKiB3aGVuIHdlIGFyZSBzdGVwcGluZywgcHJldGVuZCB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50ICovCi0gICAgICBpZiAoc2VnbWVudC0+cmF0ZSA+IDAuMCkgewotICAgICAgICBjc3RhcnQgPSBzZWdtZW50LT5zdG9wOwotICAgICAgICBjc3RvcCA9IHNlZ21lbnQtPnN0b3A7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjc3RhcnQgPSBzZWdtZW50LT5zdGFydDsKLSAgICAgICAgY3N0b3AgPSBzZWdtZW50LT5zdGFydDsKLSAgICAgIH0KLSAgICAgIGdvdG8gZG9fdGltZXM7Ci0gICAgfQotICAgIGdvdG8gb3V0X29mX3NlZ21lbnQ7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoc3RhcnQgIT0gY3N0YXJ0IHx8IHN0b3AgIT0gY3N0b3ApKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJjbGlwcGVkIHRvOiBzdGFydCAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiwgc3RvcDogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChjc3RhcnQpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChjc3RvcCkpOwotICB9Ci0KLSAgLyogc2V0IGxhc3Qgc3RvcCBwb3NpdGlvbiAqLwotICBpZiAoR19MSUtFTFkgKHN0b3AgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJiBjc3RvcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSkKLSAgICBzZWdtZW50LT5wb3NpdGlvbiA9IGNzdG9wOwotICBlbHNlCi0gICAgc2VnbWVudC0+cG9zaXRpb24gPSBjc3RhcnQ7Ci0KLWRvX3RpbWVzOgotICByc3RhcnQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKHNlZ21lbnQsIGZvcm1hdCwgY3N0YXJ0KTsKLSAgcnN0b3AgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKHNlZ21lbnQsIGZvcm1hdCwgY3N0b3ApOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RvcCkpCi0gICAgcm5leHQgPSByc3RvcDsKLSAgZWxzZQotICAgIHJuZXh0ID0gcnN0YXJ0OwotCi0gIGlmIChHX1VOTElLRUxZIChzdGVwLT52YWxpZCkpIHsKLSAgICBpZiAoISgqc3RlcF9lbmQgPSBoYW5kbGVfc3RlcHBpbmcgKGJhc2VzaW5rLCBzZWdtZW50LCBzdGVwLCAmY3N0YXJ0LCAmY3N0b3AsCi0gICAgICAgICAgICAgICAgJnJzdGFydCwgJnJzdG9wKSkpIHsKLSAgICAgIC8qIHN0ZXAgaXMgc3RpbGwgYnVzeSwgd2UgZGlzY2FyZCBkYXRhIHdoZW4gd2UgYXJlIGZsdXNoaW5nICovCi0gICAgICAqc3RlcHBlZCA9IHN0ZXAtPmZsdXNoOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJzdGVwcGluZyBidXN5Iik7Ci0gICAgfQotICB9Ci0gIC8qIHRoaXMgY2FuIHByb2R1Y2Ugd3JvbmcgdmFsdWVzIGlmIHdlIGFjY3VtdWxhdGVkIG5vbi1USU1FIHNlZ21lbnRzLiBJZiB0aGlzIGhhcHBlbnMsCi0gICAqIHVwc3RyZWFtIGlzIGJlaGF2aW5nIHZlcnkgYmFkbHkgKi8KLSAgc3N0YXJ0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKHNlZ21lbnQsIGZvcm1hdCwgY3N0YXJ0KTsKLSAgc3N0b3AgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoc2VnbWVudCwgZm9ybWF0LCBjc3RvcCk7Ci0KLWVvc19kb25lOgotICAvKiBlb3NfZG9uZSBsYWJlbCBvbmx5IGNhbGxlZCB3aGVuIGRvaW5nIEVPUywgd2UgYWxzbyBzdG9wIHN0ZXBwaW5nIHRoZW4gKi8KLSAgaWYgKCpzdGVwX2VuZCAmJiBzdGVwLT5mbHVzaCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZmx1c2hpbmcgc3RlcCBlbmRlZCIpOwotICAgIHN0b3Bfc3RlcHBpbmcgKGJhc2VzaW5rLCBzZWdtZW50LCBzdGVwLCByc3RhcnQsIHJzdG9wLCBlb3MpOwotICAgICpzdGVwX2VuZCA9IEZBTFNFOwotICAgIC8qIHJlLWRldGVybWluZSBydW5uaW5nIHN0YXJ0IHRpbWVzIGZvciBhZGp1c3RlZCBzZWdtZW50Ci0gICAgICogKHdoaWNoIGhhcyBhIGZsdXNoZWQgYW1vdW50IG9mIHJ1bm5pbmcvYWNjdW11bGF0ZWQgdGltZSByZW1vdmVkKSAqLwotICAgIGlmICghR1NUX0lTX0VWRU5UIChvYmopKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInJlZnJlc2ggc3luYyB0aW1lcyIpOwotICAgICAgZ290byBhZ2FpbjsKLSAgICB9Ci0gIH0KLQotICAvKiBzYXZlIHRpbWVzICovCi0gICpyc3N0YXJ0ID0gc3N0YXJ0OwotICAqcnNzdG9wID0gc3N0b3A7Ci0gICpycnN0YXJ0ID0gcnN0YXJ0OwotICAqcnJzdG9wID0gcnN0b3A7Ci0gICpycm5leHQgPSBybmV4dDsKLQotICAvKiBidWZmZXJzIGFuZCBFT1MgYWx3YXlzIG5lZWQgc3luY2luZyBhbmQgcHJlcm9sbCAqLwotICByZXR1cm4gVFJVRTsKLQotICAvKiBzcGVjaWFsIGNhc2VzICovCi1vdXRfb2Zfc2VnbWVudDoKLSAgewotICAgIC8qIHdlIHVzdWFsbHkgY2xpcCBpbiB0aGUgY2hhaW4gZnVuY3Rpb24gYWxyZWFkeSBidXQgc3RlcHBpbmcgY291bGQgY2F1c2UKLSAgICAgKiB0aGUgc2VnbWVudCB0byBiZSB1cGRhdGVkIGxhdGVyLiB3ZSByZXR1cm4gJUZBTFNFIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5Ci0gICAgICogdG8gc3luYyBvbiBpdC4gKi8KLSAgICBHU1RfTE9HX09CSkVDVCAoYmFzZXNpbmssICJidWZmZXIgc2tpcHBlZCwgbm90IGluIHNlZ21lbnQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogd2l0aCBTVFJFQU1fTE9DSywgUFJFUk9MTF9MT0NLLCBMT0NLCi0gKiBhZGp1c3QgYSB0aW1lc3RhbXAgd2l0aCB0aGUgbGF0ZW5jeSBhbmQgdGltZXN0YW1wIG9mZnNldC4gVGhpcyBmdW5jdGlvbiBkb2VzCi0gKiBub3QgYWRqdXN0IGZvciB0aGUgcmVuZGVyIGRlbGF5LiAqLwotc3RhdGljIEdzdENsb2NrVGltZQotZ3N0X2Jhc2Vfc2lua19hZGp1c3RfdGltZSAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0Q2xvY2tUaW1lIHRpbWUpCi17Ci0gIEdzdENsb2NrVGltZURpZmYgdHNfb2Zmc2V0OwotCi0gIC8qIGRvbid0IGRvIGFueXRoaW5nIGZ1bm55IHdpdGggaW52YWxpZCB0aW1lc3RhbXBzICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWUpKSkKLSAgICByZXR1cm4gdGltZTsKLQotICB0aW1lICs9IGJhc2VzaW5rLT5wcml2LT5sYXRlbmN5OwotCi0gIC8qIGFwcGx5IG9mZnNldCwgYmUgY2FyZWZ1bCBmb3IgdW5kZXJmbG93cyAqLwotICB0c19vZmZzZXQgPSBiYXNlc2luay0+cHJpdi0+dHNfb2Zmc2V0OwotICBpZiAodHNfb2Zmc2V0IDwgMCkgewotICAgIHRzX29mZnNldCA9IC10c19vZmZzZXQ7Ci0gICAgaWYgKHRzX29mZnNldCA8IHRpbWUpCi0gICAgICB0aW1lIC09IHRzX29mZnNldDsKLSAgICBlbHNlCi0gICAgICB0aW1lID0gMDsKLSAgfSBlbHNlCi0gICAgdGltZSArPSB0c19vZmZzZXQ7Ci0KLSAgLyogc3VidHJhY3QgdGhlIHJlbmRlciBkZWxheSBhZ2Fpbiwgd2hpY2ggd2FzIGluY2x1ZGVkIGluIHRoZSBsYXRlbmN5ICovCi0gIGlmICh0aW1lID4gYmFzZXNpbmstPnByaXYtPnJlbmRlcl9kZWxheSkKLSAgICB0aW1lIC09IGJhc2VzaW5rLT5wcml2LT5yZW5kZXJfZGVsYXk7Ci0gIGVsc2UKLSAgICB0aW1lID0gMDsKLQotICByZXR1cm4gdGltZTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2s6Ci0gKiBAc2luazogdGhlIHNpbmsKLSAqIEB0aW1lOiB0aGUgcnVubmluZ190aW1lIHRvIGJlIHJlYWNoZWQKLSAqIEBqaXR0ZXI6IChvdXQpIChhbGxvdy1ub25lKTogdGhlIGppdHRlciB0byBiZSBmaWxsZWQgd2l0aCB0aW1lIGRpZmYsIG9yICVOVUxMCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIEB0aW1lIGlzIHJlYWNoZWQuIEl0IGlzIHVzdWFsbHkgY2FsbGVkIGJ5Ci0gKiBzdWJjbGFzc2VzIHRoYXQgdXNlIHRoZWlyIG93biBpbnRlcm5hbCBzeW5jaHJvbmlzYXRpb24uCi0gKgotICogSWYgQHRpbWUgaXMgbm90IHZhbGlkLCBubyBzeW5jaHJvbmlzYXRpb24gaXMgZG9uZSBhbmQgJUdTVF9DTE9DS19CQURUSU1FIGlzCi0gKiByZXR1cm5lZC4gTGlrZXdpc2UsIGlmIHN5bmNocm9uaXNhdGlvbiBpcyBkaXNhYmxlZCBpbiB0aGUgZWxlbWVudCBvciB0aGVyZQotICogaXMgbm8gY2xvY2ssIG5vIHN5bmNocm9uaXNhdGlvbiBpcyBkb25lIGFuZCAlR1NUX0NMT0NLX0JBRFRJTUUgaXMgcmV0dXJuZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCB0aGUgUFJFUk9MTF9MT0NLIGhlbGQsIGxpa2Ugd2hlbgotICogcmVjZWl2aW5nIGFuIEVPUyBldmVudCBpbiB0aGUgI0dzdEJhc2VTaW5rQ2xhc3MuZXZlbnQoKSB2bWV0aG9kIG9yIHdoZW4KLSAqIHJlY2VpdmluZyBhIGJ1ZmZlciBpbgotICogdGhlICNHc3RCYXNlU2lua0NsYXNzLnJlbmRlcigpIHZtZXRob2QuCi0gKgotICogVGhlIEB0aW1lIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgcnVubmluZ190aW1lIG9mIHdoZW4gdGhpcyBtZXRob2Qgc2hvdWxkCi0gKiByZXR1cm4gYW5kIGlzIG5vdCBhZGp1c3RlZCB3aXRoIGFueSBsYXRlbmN5IG9yIG9mZnNldCBjb25maWd1cmVkIGluIHRoZQotICogc2luay4KLSAqCi0gKiBSZXR1cm5zOiAjR3N0Q2xvY2tSZXR1cm4KLSAqLwotR3N0Q2xvY2tSZXR1cm4KLWdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RDbG9ja1RpbWUgdGltZSwKLSAgICBHc3RDbG9ja1RpbWVEaWZmICogaml0dGVyKQotewotICBHc3RDbG9ja1JldHVybiByZXQ7Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tUaW1lIGJhc2VfdGltZTsKLQotICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKSkpCi0gICAgZ290byBpbnZhbGlkX3RpbWU7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgaWYgKEdfVU5MSUtFTFkgKCFzaW5rLT5zeW5jKSkKLSAgICBnb3RvIG5vX3N5bmM7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKChjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChzaW5rKSkgPT0gTlVMTCkpCi0gICAgZ290byBub19jbG9jazsKLQotICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVF9DQVNUIChzaW5rKS0+YmFzZV90aW1lOwotICBHU1RfTE9HX09CSkVDVCAoc2luaywKLSAgICAgICJ0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBiYXNlX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZSksIEdTVF9USU1FX0FSR1MgKGJhc2VfdGltZSkpOwotCi0gIC8qIGFkZCBiYXNlX3RpbWUgdG8gcnVubmluZ190aW1lIHRvIGdldCB0aGUgdGltZSBhZ2FpbnN0IHRoZSBjbG9jayAqLwotICB0aW1lICs9IGJhc2VfdGltZTsKLQotICAvKiBSZS11c2UgZXhpc3RpbmcgY2xvY2tpZCBpZiBhdmFpbGFibGUgKi8KLSAgLyogRklYTUU6IENhc3RpbmcgdG8gR3N0Q2xvY2tFbnRyeSBvbmx5IHdvcmtzIGJlY2F1c2UgdGhlIHR5cGVzCi0gICAqIGFyZSB0aGUgc2FtZSAqLwotICBpZiAoR19MSUtFTFkgKHNpbmstPnByaXYtPmNhY2hlZF9jbG9ja19pZCAhPSBOVUxMCi0gICAgICAgICAgJiYgR1NUX0NMT0NLX0VOVFJZX0NMT0NLICgoR3N0Q2xvY2tFbnRyeSAqKSBzaW5rLT4KLSAgICAgICAgICAgICAgcHJpdi0+Y2FjaGVkX2Nsb2NrX2lkKSA9PSBjbG9jaykpIHsKLSAgICBpZiAoIWdzdF9jbG9ja19zaW5nbGVfc2hvdF9pZF9yZWluaXQgKGNsb2NrLCBzaW5rLT5wcml2LT5jYWNoZWRfY2xvY2tfaWQsCi0gICAgICAgICAgICB0aW1lKSkgewotICAgICAgZ3N0X2Nsb2NrX2lkX3VucmVmIChzaW5rLT5wcml2LT5jYWNoZWRfY2xvY2tfaWQpOwotICAgICAgc2luay0+cHJpdi0+Y2FjaGVkX2Nsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIHRpbWUpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoc2luay0+cHJpdi0+Y2FjaGVkX2Nsb2NrX2lkICE9IE5VTEwpCi0gICAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHNpbmstPnByaXYtPmNhY2hlZF9jbG9ja19pZCk7Ci0gICAgc2luay0+cHJpdi0+Y2FjaGVkX2Nsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIHRpbWUpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLQotICAvKiBBIGJsb2NraW5nIHdhaXQgaXMgcGVyZm9ybWVkIG9uIHRoZSBjbG9jay4gV2Ugc2F2ZSB0aGUgQ2xvY2tJRAotICAgKiBzbyB3ZSBjYW4gdW5sb2NrIHRoZSBlbnRyeSBhdCBhbnkgdGltZS4gV2hpbGUgd2UgYXJlIGJsb2NraW5nLCB3ZQotICAgKiByZWxlYXNlIHRoZSBQUkVST0xMX0xPQ0sgc28gdGhhdCBvdGhlciB0aHJlYWRzIGNhbiBpbnRlcnJ1cHQgdGhlCi0gICAqIGVudHJ5LiAqLwotICBzaW5rLT5jbG9ja19pZCA9IHNpbmstPnByaXYtPmNhY2hlZF9jbG9ja19pZDsKLSAgLyogcmVsZWFzZSB0aGUgcHJlcm9sbCBsb2NrIHdoaWxlIHdhaXRpbmcgKi8KLSAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoc2luayk7Ci0KLSAgcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKHNpbmstPnByaXYtPmNhY2hlZF9jbG9ja19pZCwgaml0dGVyKTsKLQotICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyAoc2luayk7Ci0gIHNpbmstPmNsb2NrX2lkID0gTlVMTDsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIG5vIHN5bmNpbmcgbmVlZGVkICovCi1pbnZhbGlkX3RpbWU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAidGltZSBub3QgdmFsaWQsIG5vIHN5bmMgbmVlZGVkIik7Ci0gICAgcmV0dXJuIEdTVF9DTE9DS19CQURUSU1FOwotICB9Ci1ub19zeW5jOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInN5bmMgZGlzYWJsZWQiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0gICAgcmV0dXJuIEdTVF9DTE9DS19CQURUSU1FOwotICB9Ci1ub19jbG9jazoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJubyBjbG9jaywgY2FuJ3Qgc3luYyIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLSAgICByZXR1cm4gR1NUX0NMT0NLX0JBRFRJTUU7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zaW5rX3dhaXRfcHJlcm9sbDoKLSAqIEBzaW5rOiB0aGUgc2luawotICoKLSAqIElmIHRoZSAjR3N0QmFzZVNpbmtDbGFzcy5yZW5kZXIoKSBtZXRob2QgcGVyZm9ybXMgaXRzIG93biBzeW5jaHJvbmlzYXRpb24KLSAqIGFnYWluc3QgdGhlIGNsb2NrIGl0IG11c3QgdW5ibG9jayB3aGVuIGdvaW5nIGZyb20gUExBWUlORyB0byB0aGUgUEFVU0VEIHN0YXRlCi0gKiBhbmQgY2FsbCB0aGlzIG1ldGhvZCBiZWZvcmUgY29udGludWluZyB0byByZW5kZXIgdGhlIHJlbWFpbmluZyBkYXRhLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBhIHN0YXRlIGNoYW5nZSB0byBQTEFZSU5HIGhhcHBlbnMgKGluIHdoaWNoCi0gKiBjYXNlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAlR1NUX0ZMT1dfT0spIG9yIHRoZSBwcm9jZXNzaW5nIG11c3QgYmUgc3RvcHBlZCBkdWUKLSAqIHRvIGEgc3RhdGUgY2hhbmdlIHRvIFJFQURZIG9yIGEgRkxVU0ggZXZlbnQgKGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbgotICogcmV0dXJucyAlR1NUX0ZMT1dfRkxVU0hJTkcpLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIFBSRVJPTExfTE9DSyBoZWxkLCBsaWtlIGluIHRoZQotICogcmVuZGVyIGZ1bmN0aW9uLgotICoKLSAqIFJldHVybnM6ICVHU1RfRkxPV19PSyBpZiB0aGUgcHJlcm9sbCBjb21wbGV0ZWQgYW5kIHByb2Nlc3NpbmcgY2FuCi0gKiBjb250aW51ZS4gQW55IG90aGVyIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVuZGVyIHZtZXRob2QuCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsIChHc3RCYXNlU2luayAqIHNpbmspCi17Ci0gIHNpbmstPmhhdmVfcHJlcm9sbCA9IFRSVUU7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJ3YWl0aW5nIGluIHByZXJvbGwgZm9yIGZsdXNoIG9yIFBMQVlJTkciKTsKLSAgLyogYmxvY2sgdW50aWwgdGhlIHN0YXRlIGNoYW5nZXMsIG9yIHdlIGdldCBhIGZsdXNoLCBvciBzb21ldGhpbmcgKi8KLSAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVQgKHNpbmspOwotICBzaW5rLT5oYXZlX3ByZXJvbGwgPSBGQUxTRTsKLSAgaWYgKEdfVU5MSUtFTFkgKHNpbmstPmZsdXNoaW5nKSkKLSAgICBnb3RvIHN0b3BwaW5nOwotICBpZiAoR19VTkxJS0VMWSAoc2luay0+cHJpdi0+c3RlcF91bmxvY2spKQotICAgIGdvdG8gc3RlcF91bmxvY2tlZDsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNvbnRpbnVlIGFmdGVyIHByZXJvbGwiKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1zdG9wcGluZzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwcmVyb2xsIGludGVycnVwdGVkIGJlY2F1c2Ugb2YgZmx1c2giKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLXN0ZXBfdW5sb2NrZWQ6Ci0gIHsKLSAgICBzaW5rLT5wcml2LT5zdGVwX3VubG9jayA9IEZBTFNFOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwcmVyb2xsIGludGVycnVwdGVkIGJlY2F1c2Ugb2Ygc3RlcCIpOwotICAgIHJldHVybiBHU1RfRkxPV19TVEVQOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsOgotICogQHNpbms6IHRoZSBzaW5rCi0gKiBAb2JqOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBtaW5pIG9iamVjdCB0aGF0IGNhdXNlZCB0aGUgcHJlcm9sbAotICoKLSAqIElmIHRoZSBAc2luayBzcGF3bnMgaXRzIG93biB0aHJlYWQgZm9yIHB1bGxpbmcgYnVmZmVycyBmcm9tIHVwc3RyZWFtIGl0Ci0gKiBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciBpdCBoYXMgcHVsbGVkIGEgYnVmZmVyLiBJZiB0aGUgZWxlbWVudCBuZWVkZWQKLSAqIHRvIHByZXJvbGwsIHRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZSBwcmVyb2xsIGFuZCB3aWxsIHRoZW4gYmxvY2sKLSAqIHVudGlsIHRoZSBlbGVtZW50IHN0YXRlIGlzIGNoYW5nZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIFBSRVJPTExfTE9DSyBoZWxkLgotICoKLSAqIFJldHVybnM6ICVHU1RfRkxPV19PSyBpZiB0aGUgcHJlcm9sbCBjb21wbGV0ZWQgYW5kIHByb2Nlc3NpbmcgY2FuCi0gKiBjb250aW51ZS4gQW55IG90aGVyIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVuZGVyIHZtZXRob2QuCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3NpbmtfZG9fcHJlcm9sbCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RNaW5pT2JqZWN0ICogb2JqKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICB3aGlsZSAoR19VTkxJS0VMWSAoc2luay0+bmVlZF9wcmVyb2xsKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwcmVyb2xsaW5nIG9iamVjdCAlcCIsIG9iaik7Ci0KLSAgICAvKiBpZiBpdCdzIGEgYnVmZmVyLCB3ZSBuZWVkIHRvIGNhbGwgdGhlIHByZXJvbGwgbWV0aG9kICovCi0gICAgaWYgKHNpbmstPnByaXYtPmNhbGxfcHJlcm9sbCkgewotICAgICAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOwotICAgICAgR3N0QnVmZmVyICpidWY7Ci0KLSAgICAgIGlmIChHU1RfSVNfQlVGRkVSX0xJU1QgKG9iaikpIHsKLSAgICAgICAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAoR1NUX0JVRkZFUl9MSVNUX0NBU1QgKG9iaiksIDApOwotICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlciAoc2luaywgYnVmKTsKLSAgICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXJfbGlzdCAoc2luaywgR1NUX0JVRkZFUl9MSVNUX0NBU1QgKG9iaikpOwotICAgICAgICBnX2Fzc2VydCAoTlVMTCAhPSBidWYpOwotICAgICAgfSBlbHNlIGlmIChHU1RfSVNfQlVGRkVSIChvYmopKSB7Ci0gICAgICAgIGJ1ZiA9IEdTVF9CVUZGRVJfQ0FTVCAob2JqKTsKLSAgICAgICAgLyogRm9yIGJ1ZmZlciBsaXN0cyBkbyBub3Qgc2V0IGxhc3QgYnVmZmVyIGZvciBub3cgKi8KLSAgICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXIgKHNpbmssIGJ1Zik7Ci0gICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2xpc3QgKHNpbmssIE5VTEwpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYnVmID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgaWYgKGJ1ZikgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAicHJlcm9sbCBidWZmZXIgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpKTsKLQotICAgICAgICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoc2luayk7Ci0KLSAgICAgICAgaWYgKGJjbGFzcy0+cHJlcGFyZSkKLSAgICAgICAgICBpZiAoKHJldCA9IGJjbGFzcy0+cHJlcGFyZSAoc2luaywgYnVmKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICBnb3RvIHByZXBhcmVfY2FuY2VsZWQ7Ci0KLSAgICAgICAgaWYgKGJjbGFzcy0+cHJlcm9sbCkKLSAgICAgICAgICBpZiAoKHJldCA9IGJjbGFzcy0+cHJlcm9sbCAoc2luaywgYnVmKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICBnb3RvIHByZXJvbGxfY2FuY2VsZWQ7Ci0KLSAgICAgICAgc2luay0+cHJpdi0+Y2FsbF9wcmVyb2xsID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogY29tbWl0IHN0YXRlICovCi0gICAgaWYgKEdfTElLRUxZIChzaW5rLT5wbGF5aW5nX2FzeW5jKSkgewotICAgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYmFzZV9zaW5rX2NvbW1pdF9zdGF0ZSAoc2luaykpKQotICAgICAgICBnb3RvIHN0b3BwaW5nOwotICAgIH0KLQotICAgIC8qIG5lZWQgdG8gcmVjaGVjayBoZXJlIGJlY2F1c2UgdGhlIGNvbW1pdCBzdGF0ZSBjb3VsZCBoYXZlCi0gICAgICogbWFkZSB1cyBub3QgbmVlZCB0aGUgcHJlcm9sbCBhbnltb3JlICovCi0gICAgaWYgKEdfTElLRUxZIChzaW5rLT5uZWVkX3ByZXJvbGwpKSB7Ci0gICAgICAvKiBibG9jayB1bnRpbCB0aGUgc3RhdGUgY2hhbmdlcywgb3Igd2UgZ2V0IGEgZmx1c2gsIG9yIHNvbWV0aGluZyAqLwotICAgICAgcmV0ID0gZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwgKHNpbmspOwotICAgICAgaWYgKChyZXQgIT0gR1NUX0ZMT1dfT0spICYmIChyZXQgIT0gR1NUX0ZMT1dfU1RFUCkpCi0gICAgICAgIGdvdG8gcHJlcm9sbF9mYWlsZWQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLXByZXBhcmVfY2FuY2VsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAicHJlcGFyZSBmYWlsZWQsIGFib3J0IHN0YXRlIik7Ci0gICAgZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKHNpbmspKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci1wcmVyb2xsX2NhbmNlbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInByZXJvbGwgZmFpbGVkLCBhYm9ydCBzdGF0ZSIpOwotICAgIGdzdF9lbGVtZW50X2Fib3J0X3N0YXRlIChHU1RfRUxFTUVOVF9DQVNUIChzaW5rKSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotc3RvcHBpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RvcHBpbmcgd2hpbGUgY29tbWl0aW5nIHN0YXRlIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1wcmVyb2xsX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwcmVyb2xsIGZhaWxlZDogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9iYXNlX3Npbmtfd2FpdDoKLSAqIEBzaW5rOiB0aGUgc2luawotICogQHRpbWU6IHRoZSBydW5uaW5nX3RpbWUgdG8gYmUgcmVhY2hlZAotICogQGppdHRlcjogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgaml0dGVyIHRvIGJlIGZpbGxlZCB3aXRoIHRpbWUgZGlmZiwgb3IgJU5VTEwKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCBmb3IgcHJlcm9sbCB0byBjb21wbGV0ZSBhbmQgd2lsbCB0aGVuIGJsb2NrIHVudGlsIEB0aW1lCi0gKiBpcyByZWFjaGVkLiBJdCBpcyB1c3VhbGx5IGNhbGxlZCBieSBzdWJjbGFzc2VzIHRoYXQgdXNlIHRoZWlyIG93biBpbnRlcm5hbAotICogc3luY2hyb25pc2F0aW9uIGJ1dCB3YW50IHRvIGxldCBzb21lIHN5bmNocm9uaXphdGlvbiAobGlrZSBFT1MpIGJlIGhhbmRsZWQKLSAqIGJ5IHRoZSBiYXNlIGNsYXNzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggdGhlIFBSRVJPTExfTE9DSyBoZWxkIChsaWtlIHdoZW4KLSAqIHJlY2VpdmluZyBhbiBFT1MgZXZlbnQgaW4gdGhlIDo6ZXZlbnQgdm1ldGhvZCBvciB3aGVuIGhhbmRsaW5nIGJ1ZmZlcnMgaW4KLSAqIDo6cmVuZGVyKS4KLSAqCi0gKiBUaGUgQHRpbWUgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBydW5uaW5nX3RpbWUgb2Ygd2hlbiB0aGUgdGltZW91dCBzaG91bGQgaGFwcGVuCi0gKiBhbmQgd2lsbCBiZSBhZGp1c3RlZCB3aXRoIGFueSBsYXRlbmN5IGFuZCBvZmZzZXQgY29uZmlndXJlZCBpbiB0aGUgc2luay4KLSAqCi0gKiBSZXR1cm5zOiAjR3N0Rmxvd1JldHVybgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9zaW5rX3dhaXQgKEdzdEJhc2VTaW5rICogc2luaywgR3N0Q2xvY2tUaW1lIHRpbWUsCi0gICAgR3N0Q2xvY2tUaW1lRGlmZiAqIGppdHRlcikKLXsKLSAgR3N0Q2xvY2tSZXR1cm4gc3RhdHVzOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBkbyB7Ci0gICAgR3N0Q2xvY2tUaW1lIHN0aW1lOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNoZWNraW5nIHByZXJvbGwiKTsKLQotICAgIC8qIGZpcnN0IHdhaXQgZm9yIHRoZSBwbGF5aW5nIHN0YXRlIGJlZm9yZSB3ZSBjYW4gY29udGludWUgKi8KLSAgICB3aGlsZSAoR19VTkxJS0VMWSAoc2luay0+bmVlZF9wcmVyb2xsKSkgewotICAgICAgcmV0ID0gZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwgKHNpbmspOwotICAgICAgaWYgKChyZXQgIT0gR1NUX0ZMT1dfT0spICYmIChyZXQgIT0gR1NUX0ZMT1dfU1RFUCkpCi0gICAgICAgIGdvdG8gZmx1c2hpbmc7Ci0gICAgfQotCi0gICAgLyogcHJlcm9sbCBkb25lLCB3ZSBjYW4gc3luYyBzaW5jZSB3ZSBhcmUgaW4gUExBWUlORyBub3cuICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInBvc3NpYmx5IHdhaXRpbmcgZm9yIGNsb2NrIHRvIHJlYWNoICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodGltZSkpOwotCi0gICAgLyogY29tcGVuc2F0ZSBmb3IgbGF0ZW5jeSwgdHNfb2Zmc2V0IGFuZCByZW5kZXIgZGVsYXkgKi8KLSAgICBzdGltZSA9IGdzdF9iYXNlX3NpbmtfYWRqdXN0X3RpbWUgKHNpbmssIHRpbWUpOwotCi0gICAgLyogd2FpdCBmb3IgdGhlIGNsb2NrLCB0aGlzIGNhbiBiZSBpbnRlcnJ1cHRlZCBiZWNhdXNlIHdlIGdvdCBzaHV0IGRvd24gb3IKLSAgICAgKiB3ZSBQQVVTRUQuICovCi0gICAgc3RhdHVzID0gZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrIChzaW5rLCBzdGltZSwgaml0dGVyKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJjbG9jayByZXR1cm5lZCAlZCIsIHN0YXR1cyk7Ci0KLSAgICAvKiBpbnZhbGlkIHRpbWUsIG5vIGNsb2NrIG9yIHN5bmMgZGlzYWJsZWQsIGp1c3QgY29udGludWUgdGhlbiAqLwotICAgIGlmIChzdGF0dXMgPT0gR1NUX0NMT0NLX0JBRFRJTUUpCi0gICAgICBicmVhazsKLQotICAgIC8qIHdhaXRpbmcgY291bGQgaGF2ZSBiZWVuIGludGVycnVwdGVkIGFuZCB3ZSBjYW4gYmUgZmx1c2hpbmcgbm93ICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHNpbmstPmZsdXNoaW5nKSkKLSAgICAgIGdvdG8gZmx1c2hpbmc7Ci0KLSAgICAvKiByZXRyeSBpZiB3ZSBnb3QgdW5zY2hlZHVsZWQsIHdoaWNoIG1lYW5zIHdlIGRpZCBub3QgcmVhY2ggdGhlIHRpbWVvdXQKLSAgICAgKiB5ZXQuIGlmIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJlcywgd2UgY29udGludWUuICovCi0gIH0gd2hpbGUgKHN0YXR1cyA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJlbmQgb2Ygc3RyZWFtIik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAid2UgYXJlIGZsdXNoaW5nIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci19Ci0KLS8qIHdpdGggU1RSRUFNX0xPQ0ssIFBSRVJPTExfTE9DSwotICoKLSAqIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gUExBWUlORyBhbmQgc3luY2hyb25pemUgYW4gb2JqZWN0IHRvIHRoZSBjbG9jay4KLSAqCi0gKiBJZiB3ZSBuZWVkIHByZXJvbGwsIHdlIGFyZSBub3QgaW4gUExBWUlORy4gV2UgdHJ5IHRvIGNvbW1pdCB0aGUgc3RhdGUKLSAqIGlmIG5lZWRlZCBhbmQgdGhlbiBibG9jayBpZiB3ZSBzdGlsbCBhcmUgbm90IFBMQVlJTkcuCi0gKgotICogV2Ugc3RhcnQgd2FpdGluZyBvbiB0aGUgY2xvY2sgaW4gUExBWUlORy4gSWYgd2UgZ290IGludGVycnVwdGVkLCB3ZQotICogaW1tZWRpYXRlbHkgdHJ5IHRvIHJlLXByZXJvbGwuCi0gKgotICogU29tZSBvYmplY3RzIGRvIG5vdCBuZWVkIHN5bmNocm9uaXNhdGlvbiAobW9zdCBldmVudHMpIGFuZCBzbyB0aGlzIGZ1bmN0aW9uCi0gKiBpbW1lZGlhdGVseSByZXR1cm5zIEdTVF9GTE9XX09LLgotICoKLSAqIGZvciBvYmplY3RzIHRoYXQgYXJyaXZlIGxhdGVyIHRoYW4gbWF4LWxhdGVuZXNzIHRvIGJlIHN5bmNocm9uaXplZCB0byB0aGUKLSAqIGNsb2NrIGhhdmUgdGhlIEBsYXRlIGJvb2xlYW4gc2V0IHRvICVUUlVFLgotICoKLSAqIFRoaXMgZnVuY3Rpb24ga2VlcHMgYSBydW5uaW5nIGF2ZXJhZ2Ugb2YgdGhlIGppdHRlciAodGhlIGRpZmYgYmV0d2VlbiB0aGUKLSAqIGNsb2NrIHRpbWUgYW5kIHRoZSByZXF1ZXN0ZWQgc3luYyB0aW1lKS4gVGhlIGppdHRlciBpcyBuZWdhdGl2ZSBmb3IKLSAqIG9iamVjdHMgdGhhdCBhcnJpdmUgaW4gdGltZSBhbmQgcG9zaXRpdmUgZm9yIGxhdGUgYnVmZmVycy4KLSAqCi0gKiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiBvYmouCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9zaW5rX2RvX3N5bmMgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssCi0gICAgR3N0TWluaU9iamVjdCAqIG9iaiwgZ2Jvb2xlYW4gKiBsYXRlLCBnYm9vbGVhbiAqIHN0ZXBfZW5kKQotewotICBHc3RDbG9ja1RpbWVEaWZmIGppdHRlciA9IDA7Ci0gIGdib29sZWFuIHN5bmNhYmxlOwotICBHc3RDbG9ja1JldHVybiBzdGF0dXMgPSBHU1RfQ0xPQ0tfT0s7Ci0gIEdzdENsb2NrVGltZSByc3RhcnQsIHJzdG9wLCBybmV4dCwgc3N0YXJ0LCBzc3RvcCwgc3RpbWU7Ci0gIGdib29sZWFuIGRvX3N5bmM7Ci0gIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdFN0ZXBJbmZvICpjdXJyZW50LCAqcGVuZGluZzsKLSAgZ2Jvb2xlYW4gc3RlcHBlZDsKLQotICBwcml2ID0gYmFzZXNpbmstPnByaXY7Ci0KLWRvX3N0ZXA6Ci0gIHNzdGFydCA9IHNzdG9wID0gcnN0YXJ0ID0gcnN0b3AgPSBybmV4dCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGRvX3N5bmMgPSBUUlVFOwotICBzdGVwcGVkID0gRkFMU0U7Ci0KLSAgcHJpdi0+Y3VycmVudF9yc3RhcnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIC8qIGdldCBzdGVwcGluZyBpbmZvICovCi0gIGN1cnJlbnQgPSAmcHJpdi0+Y3VycmVudF9zdGVwOwotICBwZW5kaW5nID0gJnByaXYtPnBlbmRpbmdfc3RlcDsKLQotICAvKiBnZXQgdGltaW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIG9iamVjdCBhZ2FpbnN0IHRoZSByZW5kZXIgc2VnbWVudCAqLwotICBzeW5jYWJsZSA9IGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmNfdGltZXMgKGJhc2VzaW5rLCBvYmosCi0gICAgICAmc3N0YXJ0LCAmc3N0b3AsICZyc3RhcnQsICZyc3RvcCwgJnJuZXh0LCAmZG9fc3luYywgJnN0ZXBwZWQsIGN1cnJlbnQsCi0gICAgICBzdGVwX2VuZCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHN0ZXBwZWQpKQotICAgIGdvdG8gc3RlcF9za2lwcGVkOwotCi0gIC8qIGEgc3luY2FibGUgb2JqZWN0IG5lZWRzIHRvIHBhcnRpY2lwYXRlIGluIHByZXJvbGwgYW5kCi0gICAqIGNsb2NraW5nLiBBbGwgYnVmZmVycyBhbmQgRU9TIGFyZSBzeW5jYWJsZS4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFzeW5jYWJsZSkpCi0gICAgZ290byBub3Rfc3luY2FibGU7Ci0KLSAgLyogc3RvcmUgdGltaW5nIGluZm8gZm9yIGN1cnJlbnQgb2JqZWN0ICovCi0gIHByaXYtPmN1cnJlbnRfcnN0YXJ0ID0gcnN0YXJ0OwotICBwcml2LT5jdXJyZW50X3JzdG9wID0gKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChyc3RvcCkgPyByc3RvcCA6IHJzdGFydCk7Ci0KLSAgLyogc2F2ZSBzeW5jIHRpbWUgZm9yIGVvcyB3aGVuIHRoZSBwcmV2aW91cyBvYmplY3QgbmVlZGVkIHN5bmMgKi8KLSAgcHJpdi0+ZW9zX3J0aW1lID0gKGRvX3N5bmMgPyBybmV4dCA6IEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIC8qIGNhbGN1bGF0ZSBpbnRlciBmcmFtZSBzcGFjaW5nICovCi0gIGlmIChHX1VOTElLRUxZIChwcml2LT5wcmV2X3JzdGFydCAhPSAtMSAmJiBwcml2LT5wcmV2X3JzdGFydCA8IHJzdGFydCkpIHsKLSAgICBHc3RDbG9ja1RpbWUgaW5fZGlmZjsKLQotICAgIGluX2RpZmYgPSByc3RhcnQgLSBwcml2LT5wcmV2X3JzdGFydDsKLQotICAgIGlmIChwcml2LT5hdmdfaW5fZGlmZiA9PSAtMSkKLSAgICAgIHByaXYtPmF2Z19pbl9kaWZmID0gaW5fZGlmZjsKLSAgICBlbHNlCi0gICAgICBwcml2LT5hdmdfaW5fZGlmZiA9IFVQREFURV9SVU5OSU5HX0FWRyAocHJpdi0+YXZnX2luX2RpZmYsIGluX2RpZmYpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGJhc2VzaW5rLCAiYXZnIGZyYW1lIGRpZmYgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChwcml2LT5hdmdfaW5fZGlmZikpOwotCi0gIH0KLSAgcHJpdi0+cHJldl9yc3RhcnQgPSByc3RhcnQ7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHByaXYtPmVhcmxpZXN0X2luX3RpbWUgIT0gLTEKLSAgICAgICAgICAmJiByc3RhcnQgPCBwcml2LT5lYXJsaWVzdF9pbl90aW1lKSkKLSAgICBnb3RvIHFvc19kcm9wcGVkOwotCi1hZ2FpbjoKLSAgLyogZmlyc3QgZG8gcHJlcm9sbCwgdGhpcyBtYWtlcyBzdXJlIHdlIGNvbW1pdCBvdXIgc3RhdGUKLSAgICogdG8gUEFVU0VEIGFuZCBjYW4gY29udGludWUgdG8gUExBWUlORy4gV2UgY2Fubm90IHBlcmZvcm0KLSAgICogYW55IGNsb2NrIHN5bmMgaW4gUEFVU0VEIGJlY2F1c2UgdGhlcmUgaXMgbm8gY2xvY2suICovCi0gIHJldCA9IGdzdF9iYXNlX3NpbmtfZG9fcHJlcm9sbCAoYmFzZXNpbmssIG9iaik7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gcHJlcm9sbF9mYWlsZWQ7Ci0KLSAgLyogdXBkYXRlIHRoZSBzZWdtZW50IHdpdGggYSBwZW5kaW5nIHN0ZXAgaWYgdGhlIGN1cnJlbnQgb25lIGlzIGludmFsaWQgYW5kIHdlCi0gICAqIGhhdmUgYSBuZXcgcGVuZGluZyBvbmUuIFdlIG9ubHkgYWNjZXB0IG5ldyBzdGVwIHVwZGF0ZXMgYWZ0ZXIgYSBwcmVyb2xsICovCi0gIGlmIChHX1VOTElLRUxZIChwZW5kaW5nLT52YWxpZCAmJiAhY3VycmVudC0+dmFsaWQpKSB7Ci0gICAgc3RhcnRfc3RlcHBpbmcgKGJhc2VzaW5rLCAmYmFzZXNpbmstPnNlZ21lbnQsIHBlbmRpbmcsIGN1cnJlbnQpOwotICAgIGdvdG8gZG9fc3RlcDsKLSAgfQotCi0gIC8qIEFmdGVyIHJlbmRlcmluZyB3ZSBzdG9yZSB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgYnVmZmVyIHNvIHRoYXQgd2UgY2FuIHVzZQotICAgKiBpdCB0byByZXBvcnQgdGhlIHBvc2l0aW9uLiBXZSBuZWVkIHRvIHRha2UgdGhlIGxvY2sgaGVyZS4gKi8KLSAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7Ci0gIHByaXYtPmN1cnJlbnRfc3N0YXJ0ID0gc3N0YXJ0OwotICBwcml2LT5jdXJyZW50X3NzdG9wID0gKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzc3RvcCkgPyBzc3RvcCA6IHNzdGFydCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7Ci0KLSAgaWYgKCFkb19zeW5jKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBhZGp1c3QgZm9yIGxhdGVuY3kgKi8KLSAgc3RpbWUgPSBnc3RfYmFzZV9zaW5rX2FkanVzdF90aW1lIChiYXNlc2luaywgcnN0YXJ0KTsKLQotICAvKiBhZGp1c3QgZm9yIHJhdGUgY29udHJvbCAqLwotICBpZiAocHJpdi0+cmNfbmV4dCA9PSAtMSB8fCAoc3RpbWUgIT0gLTEgJiYgc3RpbWUgPj0gcHJpdi0+cmNfbmV4dCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInJlc2V0IHJjX3RpbWUgdG8gdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHN0aW1lKSk7Ci0gICAgcHJpdi0+cmNfdGltZSA9IHN0aW1lOwotICAgIHByaXYtPnJjX2FjY3VtdWxhdGVkID0gMDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInJhdGUgY29udHJvbCBuZXh0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+cmNfbmV4dCkpOwotICAgIHN0aW1lID0gcHJpdi0+cmNfbmV4dDsKLSAgfQotCi0gIC8qIHByZXJvbGwgZG9uZSwgd2UgY2FuIHN5bmMgc2luY2Ugd2UgYXJlIGluIFBMQVlJTkcgbm93LiAqLwotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInBvc3NpYmx5IHdhaXRpbmcgZm9yIGNsb2NrIHRvIHJlYWNoICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQgIiwgYWRqdXN0ZWQgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAocnN0YXJ0KSwgR1NUX1RJTUVfQVJHUyAoc3RpbWUpKTsKLQotICAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHN0YXJ0ID09IC0xLCBubyBjbG9jawotICAgKiBvciBzeW5jIGlzIGRpc2FibGVkIHdpdGggR1NUX0NMT0NLX0JBRFRJTUUuICovCi0gIHN0YXR1cyA9IGdzdF9iYXNlX3Npbmtfd2FpdF9jbG9jayAoYmFzZXNpbmssIHN0aW1lLCAmaml0dGVyKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImNsb2NrIHJldHVybmVkICVkLCBqaXR0ZXIgJWMlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBzdGF0dXMsIChqaXR0ZXIgPCAwID8gJy0nIDogJyAnKSwgR1NUX1RJTUVfQVJHUyAoQUJTIChqaXR0ZXIpKSk7Ci0KLSAgLyogaW52YWxpZCB0aW1lLCBubyBjbG9jayBvciBzeW5jIGRpc2FibGVkLCBqdXN0IHJlbmRlciAqLwotICBpZiAoc3RhdHVzID09IEdTVF9DTE9DS19CQURUSU1FKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiB3YWl0aW5nIGNvdWxkIGhhdmUgYmVlbiBpbnRlcnJ1cHRlZCBhbmQgd2UgY2FuIGJlIGZsdXNoaW5nIG5vdyAqLwotICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPmZsdXNoaW5nKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIC8qIGNoZWNrIGZvciB1bmxvY2tlZCBieSBhIHN0YXRlIGNoYW5nZSwgd2UgYXJlIG5vdCBmbHVzaGluZyBzbwotICAgKiB3ZSBjYW4gdHJ5IHRvIHByZXJvbGwgb24gdGhlIGN1cnJlbnQgYnVmZmVyLiAqLwotICBpZiAoR19VTkxJS0VMWSAoc3RhdHVzID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInVuc2NoZWR1bGVkLCB3YWl0aW5nIHNvbWUgbW9yZSIpOwotICAgIHByaXYtPmNhbGxfcHJlcm9sbCA9IFRSVUU7Ci0gICAgZ290byBhZ2FpbjsKLSAgfQotCi0gIC8qIHN1Y2Nlc3NmdWwgc3luY2luZyBkb25lLCByZWNvcmQgb2JzZXJ2YXRpb24gKi8KLSAgcHJpdi0+Y3VycmVudF9qaXR0ZXIgPSBqaXR0ZXI7Ci0KLSAgLyogY2hlY2sgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgZHJvcHBlZCAqLwotICAqbGF0ZSA9IGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCi0gICAgICBzdGF0dXMsIGppdHRlciwgVFJVRSk7Ci0KLWRvbmU6Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLXN0ZXBfc2tpcHBlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAic2tpcHBlZCBzdGVwcGVkIG9iamVjdCAlcCIsIG9iaik7Ci0gICAgKmxhdGUgPSBUUlVFOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotbm90X3N5bmNhYmxlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJub24gc3luY2FibGUgb2JqZWN0ICVwIiwgb2JqKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLXFvc19kcm9wcGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJkcm9wcGVkIGJlY2F1c2Ugb2YgUW9TICVwIiwgb2JqKTsKLSAgICAqbGF0ZSA9IFRSVUU7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1mbHVzaGluZzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAid2UgYXJlIGZsdXNoaW5nIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1wcmVyb2xsX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicHJlcm9sbCBmYWlsZWQiKTsKLSAgICAqc3RlcF9lbmQgPSBGQUxTRTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19zZW5kX3FvcyAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0UU9TVHlwZSB0eXBlLAotICAgIGdkb3VibGUgcHJvcG9ydGlvbiwgR3N0Q2xvY2tUaW1lIHRpbWUsIEdzdENsb2NrVGltZURpZmYgZGlmZikKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgLyogZ2VuZXJhdGUgUXVhbGl0eS1vZi1TZXJ2aWNlIGV2ZW50ICovCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgYmFzZXNpbmssCi0gICAgICAicW9zOiB0eXBlICVkLCBwcm9wb3J0aW9uOiAlbGYsIGRpZmYgJSIgR19HSU5UNjRfRk9STUFUICIsIHRpbWVzdGFtcCAlIgotICAgICAgR1NUX1RJTUVfRk9STUFULCB0eXBlLCBwcm9wb3J0aW9uLCBkaWZmLCBHU1RfVElNRV9BUkdTICh0aW1lKSk7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3FvcyAodHlwZSwgcHJvcG9ydGlvbiwgZGlmZiwgdGltZSk7Ci0KLSAgLyogc2VuZCB1cHN0cmVhbSAqLwotICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGJhc2VzaW5rLT5zaW5rcGFkLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NpbmtfcGVyZm9ybV9xb3MgKEdzdEJhc2VTaW5rICogc2luaywgZ2Jvb2xlYW4gZHJvcHBlZCkKLXsKLSAgR3N0QmFzZVNpbmtQcml2YXRlICpwcml2OwotICBHc3RDbG9ja1RpbWUgc3RhcnQsIHN0b3A7Ci0gIEdzdENsb2NrVGltZURpZmYgaml0dGVyOwotICBHc3RDbG9ja1RpbWUgcHQsIGVudGVyZWQsIGxlZnQ7Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLSAgZ2RvdWJsZSByYXRlOwotCi0gIHByaXYgPSBzaW5rLT5wcml2OwotCi0gIHN0YXJ0ID0gcHJpdi0+Y3VycmVudF9yc3RhcnQ7Ci0KLSAgaWYgKHByaXYtPmN1cnJlbnRfc3RlcC52YWxpZCkKLSAgICByZXR1cm47Ci0KLSAgLyogaWYgUXVhbGl0eS1vZi1TZXJ2aWNlIGRpc2FibGVkLCBkbyBub3RoaW5nICovCi0gIGlmICghZ19hdG9taWNfaW50X2dldCAoJnByaXYtPnFvc19lbmFibGVkKSB8fAotICAgICAgIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdGFydCkpCi0gICAgcmV0dXJuOwotCi0gIHN0b3AgPSBwcml2LT5jdXJyZW50X3JzdG9wOwotICBqaXR0ZXIgPSBwcml2LT5jdXJyZW50X2ppdHRlcjsKLQotICBpZiAoaml0dGVyIDwgMCkgewotICAgIC8qIHRoaXMgaXMgdGhlIHRpbWUgdGhlIGJ1ZmZlciBlbnRlcmVkIHRoZSBzaW5rICovCi0gICAgaWYgKHN0YXJ0IDwgLWppdHRlcikKLSAgICAgIGVudGVyZWQgPSAwOwotICAgIGVsc2UKLSAgICAgIGVudGVyZWQgPSBzdGFydCArIGppdHRlcjsKLSAgICBsZWZ0ID0gc3RhcnQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogdGhpcyBpcyB0aGUgdGltZSB0aGUgYnVmZmVyIGVudGVyZWQgdGhlIHNpbmsgKi8KLSAgICBlbnRlcmVkID0gc3RhcnQgKyBqaXR0ZXI7Ci0gICAgLyogdGhpcyBpcyB0aGUgdGltZSB0aGUgYnVmZmVyIGxlZnQgdGhlIHNpbmsgKi8KLSAgICBsZWZ0ID0gc3RhcnQgKyBqaXR0ZXI7Ci0gIH0KLQotICAvKiBjYWxjdWxhdGUgZHVyYXRpb24gb2YgdGhlIGJ1ZmZlciwgb25seSB1c2UgYnVmZmVyIGR1cmF0aW9ucyBpZiBub3QgaW4KLSAgICogdHJpY2sgbW9kZSBvciBrZXktdW5pdCBtb2RlLiBPdGhlcndpc2UgdGhlIGJ1ZmZlciBkdXJhdGlvbnMgd2lsbCBiZQotICAgKiBtZWFuaW5nbGVzcyBhcyBmcmFtZXMgYXJlIGJlaW5nIGRyb3BwZWQgaW4tYmV0d2VlbiB3aXRob3V0IHVwZGF0aW5nIHRoZQotICAgKiBkdXJhdGlvbnMuICovCi0gIGR1cmF0aW9uID0gcHJpdi0+YXZnX2luX2RpZmY7Ci0KLSAgLyogaWYgd2UgaGF2ZSB0aGUgdGltZSB3aGVuIHRoZSBsYXN0IGJ1ZmZlciBsZWZ0IHVzLCBjYWxjdWxhdGUKLSAgICogcHJvY2Vzc2luZyB0aW1lICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHJpdi0+bGFzdF9sZWZ0KSkgewotICAgIGlmIChlbnRlcmVkID4gcHJpdi0+bGFzdF9sZWZ0KSB7Ci0gICAgICBwdCA9IGVudGVyZWQgLSBwcml2LT5sYXN0X2xlZnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHB0ID0gMDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcHQgPSBwcml2LT5hdmdfcHQ7Ci0gIH0KLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIHNpbmssICJzdGFydDogJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiLCBzdG9wICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBlbnRlcmVkICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBsZWZ0ICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQgIiwgcHQ6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIsaml0dGVyICUiIEdfR0lOVDY0X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLCBHU1RfVElNRV9BUkdTIChzdG9wKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGVudGVyZWQpLCBHU1RfVElNRV9BUkdTIChsZWZ0KSwgR1NUX1RJTUVfQVJHUyAocHQpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pLCBqaXR0ZXIpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgc2luaywKLSAgICAgICJhdmdfcHQ6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBhdmdfcmF0ZTogJWciLAotICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+YXZnX3B0KSwgcHJpdi0+YXZnX3JhdGUpOwotCi0gIC8qIGNvbGxlY3QgcnVubmluZyBhdmVyYWdlcy4gZm9yIGZpcnN0IG9ic2VydmF0aW9ucywgd2UgY29weSB0aGUKLSAgICogdmFsdWVzICovCi0gIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHByaXYtPmF2Z19wdCkpCi0gICAgcHJpdi0+YXZnX3B0ID0gcHQ7Ci0gIGVsc2UKLSAgICBwcml2LT5hdmdfcHQgPSBVUERBVEVfUlVOTklOR19BVkcgKHByaXYtPmF2Z19wdCwgcHQpOwotCi0gIGlmIChkdXJhdGlvbiAhPSAtMSAmJiBkdXJhdGlvbiAhPSAwKSB7Ci0gICAgcmF0ZSA9Ci0gICAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHByaXYtPmF2Z19wdCkgLwotICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChkdXJhdGlvbik7Ci0gIH0gZWxzZSB7Ci0gICAgcmF0ZSA9IDEuMDsKLSAgfQotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHJpdi0+bGFzdF9sZWZ0KSkgewotICAgIGlmIChkcm9wcGVkIHx8IHByaXYtPmF2Z19yYXRlIDwgMC4wKSB7Ci0gICAgICBwcml2LT5hdmdfcmF0ZSA9IHJhdGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChyYXRlID4gMS4wKQotICAgICAgICBwcml2LT5hdmdfcmF0ZSA9IFVQREFURV9SVU5OSU5HX0FWR19OIChwcml2LT5hdmdfcmF0ZSwgcmF0ZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHByaXYtPmF2Z19yYXRlID0gVVBEQVRFX1JVTk5JTkdfQVZHX1AgKHByaXYtPmF2Z19yYXRlLCByYXRlKTsKLSAgICB9Ci0gIH0KLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIHNpbmssCi0gICAgICAidXBkYXRlZDogYXZnX3B0OiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIsIGF2Z19yYXRlOiAlZyIsIEdTVF9USU1FX0FSR1MgKHByaXYtPmF2Z19wdCksIHByaXYtPmF2Z19yYXRlKTsKLQotCi0gIGlmIChwcml2LT5hdmdfcmF0ZSA+PSAwLjApIHsKLSAgICBHc3RRT1NUeXBlIHR5cGU7Ci0gICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmOwotCi0gICAgLyogaWYgd2UgaGF2ZSBhIHZhbGlkIHJhdGUsIHN0YXJ0IHNlbmRpbmcgUW9TIG1lc3NhZ2VzICovCi0gICAgaWYgKHByaXYtPmN1cnJlbnRfaml0dGVyIDwgMCkgewotICAgICAgLyogbWFrZSBzdXJlIHdlIG5ldmVyIGdvIGJlbG93IDAgd2hlbiBhZGRpbmcgdGhlIGppdHRlciB0byB0aGUKLSAgICAgICAqIHRpbWVzdGFtcC4gKi8KLSAgICAgIGlmIChwcml2LT5jdXJyZW50X3JzdGFydCA8IC1wcml2LT5jdXJyZW50X2ppdHRlcikKLSAgICAgICAgcHJpdi0+Y3VycmVudF9qaXR0ZXIgPSAtcHJpdi0+Y3VycmVudF9yc3RhcnQ7Ci0gICAgfQotCi0gICAgaWYgKHByaXYtPnRocm90dGxlX3RpbWUgPiAwKSB7Ci0gICAgICBkaWZmID0gcHJpdi0+dGhyb3R0bGVfdGltZTsKLSAgICAgIHR5cGUgPSBHU1RfUU9TX1RZUEVfVEhST1RUTEU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRpZmYgPSBwcml2LT5jdXJyZW50X2ppdHRlcjsKLSAgICAgIGlmIChkaWZmIDw9IDApCi0gICAgICAgIHR5cGUgPSBHU1RfUU9TX1RZUEVfT1ZFUkZMT1c7Ci0gICAgICBlbHNlCi0gICAgICAgIHR5cGUgPSBHU1RfUU9TX1RZUEVfVU5ERVJGTE9XOwotICAgIH0KLQotICAgIGdzdF9iYXNlX3Npbmtfc2VuZF9xb3MgKHNpbmssIHR5cGUsIHByaXYtPmF2Z19yYXRlLCBwcml2LT5jdXJyZW50X3JzdGFydCwKLSAgICAgICAgZGlmZik7Ci0gIH0KLQotICAvKiByZWNvcmQgd2hlbiB0aGlzIGJ1ZmZlciB3aWxsIGxlYXZlIHVzICovCi0gIHByaXYtPmxhc3RfbGVmdCA9IGxlZnQ7Ci19Ci0KLS8qIHJlc2V0IGFsbCBxb3MgbWVhc3VyaW5nICovCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgR3N0QmFzZVNpbmtQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSBzaW5rLT5wcml2OwotCi0gIHByaXYtPmxhc3RfcmVuZGVyX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwcml2LT5wcmV2X3JzdGFydCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHByaXYtPmVhcmxpZXN0X2luX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwcml2LT5sYXN0X2xlZnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwcml2LT5hdmdfcHQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwcml2LT5hdmdfcmF0ZSA9IC0xLjA7Ci0gIHByaXYtPmF2Z19pbl9kaWZmID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcHJpdi0+cmVuZGVyZWQgPSAwOwotICBwcml2LT5kcm9wcGVkID0gMDsKLQotfQotCi0vKiBDaGVja3MgaWYgdGhlIG9iamVjdCB3YXMgc2NoZWR1bGVkIHRvbyBsYXRlLgotICoKLSAqIHJzdGFydC9yc3RvcCBjb250YWluIHRoZSBydW5uaW5nX3RpbWUgc3RhcnQgYW5kIHN0b3AgdmFsdWVzCi0gKiBvZiB0aGUgb2JqZWN0LgotICoKLSAqIHN0YXR1cyBhbmQgaml0dGVyIGNvbnRhaW4gdGhlIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgY2xvY2sgd2FpdC4KLSAqCi0gKiByZXR1cm5zICVUUlVFIGlmIHRoZSBidWZmZXIgd2FzIHRvbyBsYXRlLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdE1pbmlPYmplY3QgKiBvYmosCi0gICAgR3N0Q2xvY2tUaW1lIHJzdGFydCwgR3N0Q2xvY2tUaW1lIHJzdG9wLAotICAgIEdzdENsb2NrUmV0dXJuIHN0YXR1cywgR3N0Q2xvY2tUaW1lRGlmZiBqaXR0ZXIsIGdib29sZWFuIHJlbmRlcikKLXsKLSAgZ2Jvb2xlYW4gbGF0ZTsKLSAgZ3VpbnQ2NCBtYXhfbGF0ZW5lc3M7Ci0gIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKLQotICBwcml2ID0gYmFzZXNpbmstPnByaXY7Ci0KLSAgbGF0ZSA9IEZBTFNFOwotCi0gIC8qIG9ubHkgZm9yIG9iamVjdHMgdGhhdCB3ZXJlIHRvbyBsYXRlICovCi0gIGlmIChHX0xJS0VMWSAoc3RhdHVzICE9IEdTVF9DTE9DS19FQVJMWSkpCi0gICAgZ290byBpbl90aW1lOwotCi0gIG1heF9sYXRlbmVzcyA9IGJhc2VzaW5rLT5tYXhfbGF0ZW5lc3M7Ci0KLSAgLyogY2hlY2sgaWYgZnJhbWUgZHJvcHBpbmcgaXMgZW5hYmxlZCAqLwotICBpZiAobWF4X2xhdGVuZXNzID09IC0xKQotICAgIGdvdG8gbm9fZHJvcDsKLQotICAvKiBvbmx5IGNoZWNrIGZvciBidWZmZXJzICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0lTX0JVRkZFUiAob2JqKSkpCi0gICAgZ290byBub3RfYnVmZmVyOwotCi0gIC8qIGNhbid0IGRvIGNoZWNrIGlmIHdlIGRvbid0IGhhdmUgYSB0aW1lc3RhbXAgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocnN0YXJ0KSkpCi0gICAgZ290byBub190aW1lc3RhbXA7Ci0KLSAgLyogd2UgY2FuIGFkZCBhIHZhbGlkIHN0b3AgdGltZSAqLwotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHJzdG9wKSkKLSAgICBtYXhfbGF0ZW5lc3MgKz0gcnN0b3A7Ci0gIGVsc2UgewotICAgIG1heF9sYXRlbmVzcyArPSByc3RhcnQ7Ci0gICAgLyogbm8gc3RvcCB0aW1lLCB1c2UgYXZnIGZyYW1lIGRpZmYgKi8KLSAgICBpZiAocHJpdi0+YXZnX2luX2RpZmYgIT0gLTEpCi0gICAgICBtYXhfbGF0ZW5lc3MgKz0gcHJpdi0+YXZnX2luX2RpZmY7Ci0gIH0KLQotICAvKiBpZiB0aGUgaml0dGVyIGJpZ2dlciB0aGFuIGR1cmF0aW9uIGFuZCBsYXRlbmVzcyB3ZSBhcmUgdG9vIGxhdGUgKi8KLSAgaWYgKChsYXRlID0gcnN0YXJ0ICsgaml0dGVyID4gbWF4X2xhdGVuZXNzKSkgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCBiYXNlc2luaywKLSAgICAgICAgImJ1ZmZlciBpcyB0b28gbGF0ZSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocnN0YXJ0ICsgaml0dGVyKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuZXNzKSk7Ci0gICAgLyogISFlbWVyZ2VuY3khISwgaWYgd2UgZGlkIG5vdCByZWNlaXZlIGFueXRoaW5nIHZhbGlkIGZvciBtb3JlIHRoYW4gYQotICAgICAqIHNlY29uZCwgcmVuZGVyIGl0IGFueXdheSBzbyB0aGUgdXNlciBzZWVzIHNvbWV0aGluZyAqLwotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHJpdi0+bGFzdF9yZW5kZXJfdGltZSkgJiYKLSAgICAgICAgcnN0YXJ0IC0gcHJpdi0+bGFzdF9yZW5kZXJfdGltZSA+IEdTVF9TRUNPTkQpIHsKLSAgICAgIGxhdGUgPSBGQUxTRTsKLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKGJhc2VzaW5rLCBDT1JFLCBDTE9DSywKLSAgICAgICAgICAoXygiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iKSksCi0gICAgICAgICAgKCJUaGVyZSBtYXkgYmUgYSB0aW1lc3RhbXBpbmcgcHJvYmxlbSwgb3IgdGhpcyBjb21wdXRlciBpcyB0b28gc2xvdy4iKSk7Ci0gICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9QRVJGT1JNQU5DRSwgYmFzZXNpbmssCi0gICAgICAgICAgIioqZW1lcmdlbmN5KiogbGFzdCBidWZmZXIgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIgPiBHU1RfU0VDT05EIiwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChwcml2LT5sYXN0X3JlbmRlcl90aW1lKSk7Ci0gICAgfQotICB9Ci0KLWRvbmU6Ci0gIGlmIChyZW5kZXIgJiYgKCFsYXRlIHx8ICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHJpdi0+bGFzdF9yZW5kZXJfdGltZSkpKSB7Ci0gICAgcHJpdi0+bGFzdF9yZW5kZXJfdGltZSA9IHJzdGFydDsKLSAgICAvKiB0aGUgbmV4dCBhbGxvd2VkIGlucHV0IHRpbWVzdGFtcCAqLwotICAgIGlmIChwcml2LT50aHJvdHRsZV90aW1lID4gMCkKLSAgICAgIHByaXYtPmVhcmxpZXN0X2luX3RpbWUgPSByc3RhcnQgKyBwcml2LT50aHJvdHRsZV90aW1lOwotICB9Ci0gIHJldHVybiBsYXRlOwotCi0gIC8qIGFsbCBpcyBmaW5lICovCi1pbl90aW1lOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJvYmplY3Qgd2FzIHNjaGVkdWxlZCBpbiB0aW1lIik7Ci0gICAgZ290byBkb25lOwotICB9Ci1ub19kcm9wOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJmcmFtZSBkcm9wcGluZyBkaXNhYmxlZCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotbm90X2J1ZmZlcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAib2JqZWN0IGlzIG5vdCBhIGJ1ZmZlciIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fdGltZXN0YW1wOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJidWZmZXIgaGFzIG5vIHRpbWVzdGFtcCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2Vfc2lua191cGRhdGVfc3RhcnRfdGltZSAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOwotICBpZiAoR1NUX1NUQVRFIChiYXNlc2luaykgPT0gR1NUX1NUQVRFX1BMQVlJTkcKLSAgICAgICYmIChjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChiYXNlc2luaykpKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIG5vdzsKLQotICAgIGdzdF9vYmplY3RfcmVmIChjbG9jayk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKLQotICAgIC8qIGNhbGN1bGF0ZSB0aGUgdGltZSB3aGVuIHdlIHN0b3BwZWQgKi8KLSAgICBub3cgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKLSAgICAvKiBzdG9yZSB0aGUgY3VycmVudCBydW5uaW5nIHRpbWUgKi8KLSAgICBpZiAoR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAoYmFzZXNpbmspICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgIGlmIChub3cgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAoYmFzZXNpbmspID0KLSAgICAgICAgICAgIG5vdyAtIEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKS0+YmFzZV90aW1lOwotICAgICAgZWxzZQotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VzaW5rLAotICAgICAgICAgICAgIkNsb2NrICVzIHJldHVybmVkIGludmFsaWQgdGltZSwgY2FuJ3QgY2FsY3VsYXRlICIKLSAgICAgICAgICAgICJydW5uaW5nX3RpbWUgd2hlbiBnb2luZyB0byB0aGUgUEFVU0VEIHN0YXRlIiwKLSAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKTsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssCi0gICAgICAgICJzdGFydF90aW1lPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCBub3c9JSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIsIGJhc2VfdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9FTEVNRU5UX1NUQVJUX1RJTUUgKGJhc2VzaW5rKSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKG5vdyksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKS0+YmFzZV90aW1lKSk7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NpbmtfZmx1c2hfc3RhcnQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCkKLXsKLSAgLyogbWFrZSBzdXJlIHdlIGFyZSBub3QgYmxvY2tlZCBvbiB0aGUgY2xvY2sgYWxzbyBjbGVhciBhbnkgcGVuZGluZwotICAgKiBlb3Mgc3RhdGUuICovCi0gIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBUUlVFKTsKLQotICAvKiB3ZSBncmFiIHRoZSBzdHJlYW0gbG9jayBidXQgdGhhdCBpcyBub3QgbmVlZGVkIHNpbmNlIHNldHRpbmcgdGhlCi0gICAqIHNpbmsgdG8gZmx1c2hpbmcgd291bGQgbWFrZSBzdXJlIG5vIHN0YXRlIGNvbW1pdCBpcyBiZWluZyBkb25lCi0gICAqIGFueW1vcmUgKi8KLSAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKLSAgZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MgKGJhc2VzaW5rKTsKLSAgLyogYW5kIHdlIG5lZWQgdG8gY29tbWl0IG91ciBzdGF0ZSBhZ2FpbiBvbiB0aGUgbmV4dAotICAgKiBwcmVyb2xsZWQgYnVmZmVyICovCi0gIGJhc2VzaW5rLT5wbGF5aW5nX2FzeW5jID0gVFJVRTsKLSAgaWYgKGJhc2VzaW5rLT5wcml2LT5hc3luY19lbmFibGVkKSB7Ci0gICAgZ3N0X2Jhc2Vfc2lua191cGRhdGVfc3RhcnRfdGltZSAoYmFzZXNpbmspOwotICAgIGdzdF9lbGVtZW50X2xvc3Rfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogc3RhcnQgdGltZSByZXNldCBpbiBhYm92ZSBjYXNlIGFzIHdlbGw7Ci0gICAgICogYXJyYW5nZXMgZm9yIGEuby4gcHJvcGVyIHBvc2l0aW9uIHJlcG9ydGluZyB3aGVuIGZsdXNoaW5nIGluIFBBVVNFRCAqLwotICAgIGdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksIDApOwotICAgIGJhc2VzaW5rLT5wcml2LT5oYXZlX2xhdGVuY3kgPSBUUlVFOwotICB9Ci0gIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyIChiYXNlc2luaywgTlVMTCk7Ci0gIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2xpc3QgKGJhc2VzaW5rLCBOVUxMKTsKLSAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChwYWQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2Vfc2lua19mbHVzaF9zdG9wIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RQYWQgKiBwYWQsCi0gICAgZ2Jvb2xlYW4gcmVzZXRfdGltZSkKLXsKLSAgLyogdW5zZXQgZmx1c2hpbmcgc28gd2UgY2FuIGFjY2VwdCBuZXcgZGF0YSwgdGhpcyBhbHNvIGZsdXNoZXMgb3V0IGFueSBFT1MKLSAgICogZXZlbnQuICovCi0gIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBGQUxTRSk7Ci0KLSAgLyogZm9yIHBvc2l0aW9uIHJlcG9ydGluZyAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKLSAgYmFzZXNpbmstPnByaXYtPmN1cnJlbnRfc3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgYmFzZXNpbmstPnByaXYtPmN1cnJlbnRfc3N0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBiYXNlc2luay0+cHJpdi0+ZW9zX3J0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgYmFzZXNpbmstPnByaXYtPmNhbGxfcHJlcm9sbCA9IFRSVUU7Ci0gIGJhc2VzaW5rLT5wcml2LT5jdXJyZW50X3N0ZXAudmFsaWQgPSBGQUxTRTsKLSAgYmFzZXNpbmstPnByaXYtPnBlbmRpbmdfc3RlcC52YWxpZCA9IEZBTFNFOwotICBpZiAoYmFzZXNpbmstPnBhZF9tb2RlID09IEdTVF9QQURfTU9ERV9QVVNIKSB7Ci0gICAgLyogd2UgbmVlZCBuZXcgc2VnbWVudCBpbmZvIGFmdGVyIHRoZSBmbHVzaC4gKi8KLSAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gRkFMU0U7Ci0gICAgaWYgKHJlc2V0X3RpbWUpIHsKLSAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZiYXNlc2luay0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICAgICAgR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAoYmFzZXNpbmspID0gMDsKLSAgICB9Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKLQotICBpZiAocmVzZXRfdGltZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicG9zdGluZyByZXNldC10aW1lIG1lc3NhZ2UiKTsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3Jlc2V0X3RpbWUgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspLCAwKSk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3NpbmtfZGVmYXVsdF93YWl0X2V2ZW50IChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ2Jvb2xlYW4gbGF0ZSwgc3RlcF9lbmQgPSBGQUxTRTsKLQotICByZXQgPSBnc3RfYmFzZV9zaW5rX2RvX3N5bmMgKGJhc2VzaW5rLCBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZXZlbnQpLAotICAgICAgJmxhdGUsICZzdGVwX2VuZCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3Npbmtfd2FpdF9ldmVudCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmJjbGFzczsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoYmFzZXNpbmspOwotCi0gIGlmIChHX0xJS0VMWSAoYmNsYXNzLT53YWl0X2V2ZW50KSkKLSAgICByZXQgPSBiY2xhc3MtPndhaXRfZXZlbnQgKGJhc2VzaW5rLCBldmVudCk7Ci0gIGVsc2UKLSAgICByZXQgPSBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2V2ZW50IChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOwotICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImZsdXNoLXN0YXJ0ICVwIiwgZXZlbnQpOwotICAgICAgZ3N0X2Jhc2Vfc2lua19mbHVzaF9zdGFydCAoYmFzZXNpbmssIGJhc2VzaW5rLT5zaW5rcGFkKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgIHsKLSAgICAgIGdib29sZWFuIHJlc2V0X3RpbWU7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wIChldmVudCwgJnJlc2V0X3RpbWUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJmbHVzaC1zdG9wICVwLCByZXNldF90aW1lOiAlZCIsIGV2ZW50LAotICAgICAgICAgIHJlc2V0X3RpbWUpOwotICAgICAgZ3N0X2Jhc2Vfc2lua19mbHVzaF9zdG9wIChiYXNlc2luaywgYmFzZXNpbmstPnNpbmtwYWQsIHJlc2V0X3RpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICB7Ci0gICAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotICAgICAgZ3VpbnQzMiBzZXFudW07Ci0KLSAgICAgIC8qIHdlIHNldCB0aGUgcmVjZWl2ZWQgRU9TIGZsYWcgaGVyZSBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgd2hlbiB0ZXN0aW5nIGlmCi0gICAgICAgKiB3ZSBhcmUgcHJlcm9sbGVkIGFuZCB0byByZWZ1c2UgbW9yZSBidWZmZXJzLiAqLwotICAgICAgYmFzZXNpbmstPnByaXYtPnJlY2VpdmVkX2VvcyA9IFRSVUU7Ci0KLSAgICAgIC8qIHdhaXQgZm9yIEVPUyAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKGdzdF9iYXNlX3Npbmtfd2FpdF9ldmVudCAoYmFzZXNpbmssCi0gICAgICAgICAgICAgICAgICBldmVudCkgIT0gR1NUX0ZMT1dfT0spKSB7Ci0gICAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHRoZSBFT1MgZXZlbnQgaXMgY29tcGxldGVseSBoYW5kbGVkIHNvIHdlIG1hcmsKLSAgICAgICAqIG91cnNlbHZlcyBhcyBiZWluZyBpbiB0aGUgRU9TIHN0YXRlLiBlb3MgaXMgYWxzbwotICAgICAgICogcHJvdGVjdGVkIGJ5IHRoZSBvYmplY3QgbG9jayBzbyB3ZSBjYW4gcmVhZCBpdCB3aGVuCi0gICAgICAgKiBhbnN3ZXJpbmcgdGhlIFBPU0lUSU9OIHF1ZXJ5LiAqLwotICAgICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7Ci0gICAgICBiYXNlc2luay0+ZW9zID0gVFJVRTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7Ci0KLSAgICAgIC8qIG9rLCBub3cgd2UgY2FuIHBvc3QgdGhlIG1lc3NhZ2UgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiTm93IHBvc3RpbmcgRU9TIik7Ci0KLSAgICAgIHNlcW51bSA9IGJhc2VzaW5rLT5wcml2LT5zZXFudW0gPSBnc3RfZXZlbnRfZ2V0X3NlcW51bSAoZXZlbnQpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJHb3Qgc2VxbnVtICMlIiBHX0dVSU5UMzJfRk9STUFULCBzZXFudW0pOwotCi0gICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2VvcyAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luaykpOwotICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobWVzc2FnZSwgc2VxbnVtKTsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLCBtZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6Ci0gICAgewotICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgICAgIGd1aW50MzIgc2VxbnVtOwotICAgICAgZ3VpbnQgZ3JvdXBfaWQ7Ci0KLSAgICAgIHNlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIk5vdyBwb3N0aW5nIFNUUkVBTV9TVEFSVCAoc2VxbnVtOiVkKSIsCi0gICAgICAgICAgc2VxbnVtKTsKLSAgICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKGJhc2VzaW5rKSk7Ci0gICAgICBpZiAoZ3N0X2V2ZW50X3BhcnNlX2dyb3VwX2lkIChldmVudCwgJmdyb3VwX2lkKSkgewotICAgICAgICBnc3RfbWVzc2FnZV9zZXRfZ3JvdXBfaWQgKG1lc3NhZ2UsIGdyb3VwX2lkKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9GSVhNRV9PQkpFQ1QgKGJhc2VzaW5rLCAic3RyZWFtLXN0YXJ0IGV2ZW50IHdpdGhvdXQgZ3JvdXAtaWQuICIKLSAgICAgICAgICAgICJDb25zaWRlciBpbXBsZW1lbnRpbmcgZ3JvdXAtaWQgaGFuZGxpbmcgaW4gdGhlIHVwc3RyZWFtICIKLSAgICAgICAgICAgICJlbGVtZW50cyIpOwotICAgICAgfQotICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobWVzc2FnZSwgc2VxbnVtKTsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLCBtZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHMsICpjdXJyZW50X2NhcHM7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiY2FwcyAlcCIsIGV2ZW50KTsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICBjdXJyZW50X2NhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9CQVNFX1NJTktfUEFEIChiYXNlc2luaykpOwotCi0gICAgICBpZiAoY3VycmVudF9jYXBzICYmIGdzdF9jYXBzX2lzX2VxdWFsIChjdXJyZW50X2NhcHMsIGNhcHMpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLAotICAgICAgICAgICAgIk5ldyBjYXBzIGVxdWFsIHRvIG9sZCBvbmVzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYmNsYXNzLT5zZXRfY2FwcykKLSAgICAgICAgICByZXN1bHQgPSBiY2xhc3MtPnNldF9jYXBzIChiYXNlc2luaywgY2Fwcyk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOwotICAgICAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZiYXNlc2luay0+cHJpdi0+Y2FwcywgY2Fwcyk7Ci0gICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKGN1cnJlbnRfY2FwcykKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGN1cnJlbnRfY2Fwcyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICAgIC8qIGNvbmZpZ3VyZSB0aGUgc2VnbWVudCAqLwotICAgICAgLyogVGhlIHNlZ21lbnQgaXMgcHJvdGVjdGVkIHdpdGggYm90aCB0aGUgU1RSRUFNX0xPQ0sgYW5kIHRoZSBPQkpFQ1RfTE9DSy4KLSAgICAgICAqIFdlIHByb3RlY3Qgd2l0aCB0aGUgT0JKRUNUX0xPQ0sgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZSB2YWx1ZXMgdG8KLSAgICAgICAqIHNhZmVseSBhbnN3ZXIgYSBQT1NJVElPTiBxdWVyeS4gKi8KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOwotICAgICAgLyogdGhlIG5ld3NlZ21lbnQgZXZlbnQgaXMgbmVlZGVkIHRvIGJyaW5nIHRoZSBidWZmZXIgdGltZXN0YW1wcyB0byB0aGUKLSAgICAgICAqIHN0cmVhbSB0aW1lIGFuZCB0byBkcm9wIHNhbXBsZXMgb3V0c2lkZSBvZiB0aGUgcGxheWJhY2sgc2VnbWVudC4gKi8KLSAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmYmFzZXNpbmstPnNlZ21lbnQpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJjb25maWd1cmVkIHNlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULAotICAgICAgICAgICZiYXNlc2luay0+c2VnbWVudCk7Ci0gICAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gVFJVRTsKLSAgICAgIGdzdF9iYXNlX3NpbmtfcmVzZXRfcW9zIChiYXNlc2luayk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfR0FQOgotICAgIHsKLSAgICAgIGlmIChHX1VOTElLRUxZIChnc3RfYmFzZV9zaW5rX3dhaXRfZXZlbnQgKGJhc2VzaW5rLAotICAgICAgICAgICAgICAgICAgZXZlbnQpICE9IEdTVF9GTE9XX09LKSkKLSAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOgotICAgIHsKLSAgICAgIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmdGFnbGlzdCk7Ci0KLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLAotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld190YWcgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspLAotICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfY29weSAodGFnbGlzdCkpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9UT0M6Ci0gICAgewotICAgICAgR3N0VG9jICp0b2M7Ci0gICAgICBnYm9vbGVhbiB1cGRhdGVkOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfdG9jIChldmVudCwgJnRvYywgJnVwZGF0ZWQpOwotCi0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfdG9jIChHU1RfT0JKRUNUX0NBU1QgKGJhc2VzaW5rKSwgdG9jLCB1cGRhdGVkKSk7Ci0KLSAgICAgIGdzdF90b2NfdW5yZWYgKHRvYyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0lOS19NRVNTQUdFOgotICAgIHsKLSAgICAgIEdzdE1lc3NhZ2UgKm1zZyA9IE5VTEw7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2UgKGV2ZW50LCAmbXNnKTsKLSAgICAgIGlmIChtc2cpCi0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLCBtc2cpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotZG9uZToKLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOwotICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOwotICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7Ci0KLSAgYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LX0NBU1QgKHBhcmVudCk7Ci0gIGJjbGFzcyA9IEdTVF9CQVNFX1NJTktfR0VUX0NMQVNTIChiYXNlc2luayk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJyZWNlaXZlZCBldmVudCAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQsCi0gICAgICBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgdGhpcyBzZXJpYWxpemVkIGV2ZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBncmFiCi0gICAgICAgKiB0aGUgUFJFUk9MTCBsb2NrIG9yIGNoZWNrIGlmIHdlIHdlcmUgZmx1c2hpbmcgKi8KLSAgICAgIGlmIChiY2xhc3MtPmV2ZW50KQotICAgICAgICByZXN1bHQgPSBiY2xhc3MtPmV2ZW50IChiYXNlc2luaywgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpKSB7Ci0gICAgICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChiYXNlc2luayk7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZIChiYXNlc2luay0+Zmx1c2hpbmcpKQotICAgICAgICAgIGdvdG8gZmx1c2hpbmc7Ci0KLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rLT5wcml2LT5yZWNlaXZlZF9lb3MpKQotICAgICAgICAgIGdvdG8gYWZ0ZXJfZW9zOwotCi0gICAgICAgIGlmIChiY2xhc3MtPmV2ZW50KQotICAgICAgICAgIHJlc3VsdCA9IGJjbGFzcy0+ZXZlbnQgKGJhc2VzaW5rLCBldmVudCk7Ci0KLSAgICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoYmFzZXNpbmspOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGJjbGFzcy0+ZXZlbnQpCi0gICAgICAgICAgcmVzdWx0ID0gYmNsYXNzLT5ldmVudCAoYmFzZXNpbmssIGV2ZW50KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci1kb25lOgotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIndlIGFyZSBmbHVzaGluZyIpOwotICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sgKGJhc2VzaW5rKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXN1bHQgPSBGQUxTRTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotYWZ0ZXJfZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJFdmVudCByZWNlaXZlZCBhZnRlciBFT1MsIGRyb3BwaW5nIik7Ci0gICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoYmFzZXNpbmspOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJlc3VsdCA9IEZBTFNFOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi0vKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgc3RhcnQgYW5kIGVuZAotICogdGltZXN0YW1wcyBvbiBhIGJ1ZmZlciwgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUKLSAqLwotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NpbmtfZGVmYXVsdF9nZXRfdGltZXMgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBHc3RDbG9ja1RpbWUgKiBzdGFydCwgR3N0Q2xvY2tUaW1lICogZW5kKQotewotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLQotICAvKiBmaXJzdCBzeW5jIG9uIERUUywgZWxzZSB1c2UgUFRTICovCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfRFRTIChidWZmZXIpOwotICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKQotICAgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkgewotICAgIC8qIGdldCBkdXJhdGlvbiB0byBjYWxjdWxhdGUgZW5kIHRpbWUgKi8KLSAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdXJhdGlvbikpIHsKLSAgICAgICplbmQgPSB0aW1lc3RhbXAgKyBkdXJhdGlvbjsKLSAgICB9Ci0gICAgKnN0YXJ0ID0gdGltZXN0YW1wOwotICB9Ci19Ci0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggUFJFUk9MTF9MT0NLICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgZ2Jvb2xlYW4gaXNfcHJlcm9sbGVkLCByZXM7Ci0KLSAgLyogd2UgaGF2ZSAyIGNhc2VzIHdoZXJlIHRoZSBQUkVST0xMX0xPQ0sgaXMgcmVsZWFzZWQ6Ci0gICAqICAxKSB3ZSBhcmUgYmxvY2tpbmcgaW4gdGhlIFBSRVJPTExfTE9DSyBhbmQgdGh1cyBhcmUgcHJlcm9sbGVkLgotICAgKiAgMikgd2UgYXJlIHN5bmNpbmcgb24gdGhlIGNsb2NrCi0gICAqLwotICBpc19wcmVyb2xsZWQgPSBiYXNlc2luay0+aGF2ZV9wcmVyb2xsIHx8IGJhc2VzaW5rLT5wcml2LT5yZWNlaXZlZF9lb3M7Ci0gIHJlcyA9ICFpc19wcmVyb2xsZWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJoYXZlX3ByZXJvbGw6ICVkLCBFT1M6ICVkID0+IG5lZWRzIHByZXJvbGw6ICVkIiwKLSAgICAgIGJhc2VzaW5rLT5oYXZlX3ByZXJvbGwsIGJhc2VzaW5rLT5wcml2LT5yZWNlaXZlZF9lb3MsIHJlcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1jb3VudF9saXN0X2J5dGVzIChHc3RCdWZmZXIgKiogYnVmZmVyLCBndWludCBpZHgsIEdzdEJhc2VTaW5rUHJpdmF0ZSAqIHByaXYpCi17Ci0gIHByaXYtPnJjX2FjY3VtdWxhdGVkICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWZmZXIpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyogd2l0aCBTVFJFQU1fTE9DSywgUFJFUk9MTF9MT0NLCi0gKgotICogVGFrZXMgYSBidWZmZXIgYW5kIGNvbXBhcmUgdGhlIHRpbWVzdGFtcHMgd2l0aCB0aGUgbGFzdCBzZWdtZW50LgotICogSWYgdGhlIGJ1ZmZlciBmYWxscyBvdXRzaWRlIG9mIHRoZSBzZWdtZW50IGJvdW5kYXJpZXMsIGRyb3AgaXQuCi0gKiBFbHNlIHNlbmQgdGhlIGJ1ZmZlciBmb3IgcHJlcm9sbCBhbmQgcmVuZGVyaW5nLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBidWZmZXIuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RQYWQgKiBwYWQsCi0gICAgZ3BvaW50ZXIgb2JqLCBnYm9vbGVhbiBpc19saXN0KQotewotICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7Ci0gIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdiA9IGJhc2VzaW5rLT5wcml2OwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RDbG9ja1RpbWUgc3RhcnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FLCBlbmQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHc3RTZWdtZW50ICpzZWdtZW50OwotICBHc3RCdWZmZXIgKnN5bmNfYnVmOwotICBnYm9vbGVhbiBsYXRlLCBzdGVwX2VuZCwgcHJlcGFyZWQgPSBGQUxTRTsKLQotICBpZiAoR19VTkxJS0VMWSAoYmFzZXNpbmstPmZsdXNoaW5nKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIGlmIChHX1VOTElLRUxZIChwcml2LT5yZWNlaXZlZF9lb3MpKQotICAgIGdvdG8gd2FzX2VvczsKLQotICBpZiAoaXNfbGlzdCkgewotICAgIEdzdEJ1ZmZlckxpc3QgKmJ1ZmZlcl9saXN0ID0gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKG9iaik7Ci0KLSAgICBpZiAoZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAoYnVmZmVyX2xpc3QpID09IDApCi0gICAgICBnb3RvIGVtcHR5X2xpc3Q7Ci0KLSAgICBzeW5jX2J1ZiA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKGJ1ZmZlcl9saXN0LCAwKTsKLSAgICBnX2Fzc2VydCAoTlVMTCAhPSBzeW5jX2J1Zik7Ci0gIH0gZWxzZSB7Ci0gICAgc3luY19idWYgPSBHU1RfQlVGRkVSX0NBU1QgKG9iaik7Ci0gIH0KLQotICAvKiBmb3IgY29kZSBjbGFyaXR5ICovCi0gIHNlZ21lbnQgPSAmYmFzZXNpbmstPnNlZ21lbnQ7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50KSkgewotICAgIGdib29sZWFuIHN5bmM7Ci0KLSAgICBzeW5jID0gZ3N0X2Jhc2Vfc2lua19nZXRfc3luYyAoYmFzZXNpbmspOwotICAgIGlmIChzeW5jKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChiYXNlc2luaywgU1RSRUFNLCBGQUlMRUQsCi0gICAgICAgICAgKF8oIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIpKSwKLSAgICAgICAgICAoIlJlY2VpdmVkIGJ1ZmZlciB3aXRob3V0IGEgbmV3LXNlZ21lbnQuIEFzc3VtaW5nIHRpbWVzdGFtcHMgc3RhcnQgZnJvbSAwLiIpKTsKLSAgICB9Ci0KLSAgICAvKiB0aGlzIG1lYW5zIHRoaXMgc2luayB3aWxsIGFzc3VtZSB0aW1lc3RhbXBzIHN0YXJ0IGZyb20gMCAqLwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOwotICAgIHNlZ21lbnQtPnN0YXJ0ID0gMDsKLSAgICBzZWdtZW50LT5zdG9wID0gLTE7Ci0gICAgYmFzZXNpbmstPnNlZ21lbnQuc3RhcnQgPSAwOwotICAgIGJhc2VzaW5rLT5zZWdtZW50LnN0b3AgPSAtMTsKLSAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gVFJVRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOwotICB9Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKLQotICAvKiBjaGVjayBpZiB0aGUgYnVmZmVyIG5lZWRzIHRvIGJlIGRyb3BwZWQsIHdlIGZpcnN0IGFzayB0aGUgc3ViY2xhc3MgZm9yIHRoZQotICAgKiBzdGFydCBhbmQgZW5kICovCi0gIGlmIChiY2xhc3MtPmdldF90aW1lcykKLSAgICBiY2xhc3MtPmdldF90aW1lcyAoYmFzZXNpbmssIHN5bmNfYnVmLCAmc3RhcnQsICZlbmQpOwotCi0gIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXJ0KSkgewotICAgIC8qIGlmIHRoZSBzdWJjbGFzcyBkb2VzIG5vdCB3YW50IHN5bmMsIHdlIHVzZSBvdXIgb3duIHZhbHVlcyBzbyB0aGF0IHdlIGF0Ci0gICAgICogbGVhc3QgY2xpcCB0aGUgYnVmZmVyIHRvIHRoZSBzZWdtZW50ICovCi0gICAgZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2dldF90aW1lcyAoYmFzZXNpbmssIHN5bmNfYnVmLCAmc3RhcnQsICZlbmQpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJnb3QgdGltZXMgc3RhcnQ6ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgZW5kOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSwgR1NUX1RJTUVfQVJHUyAoZW5kKSk7Ci0KLSAgLyogYSBkcm9wcGVkIGJ1ZmZlciBkb2VzIG5vdCBwYXJ0aWNpcGF0ZSBpbiBhbnl0aGluZy4gQnVmZmVyIGNhbiBvbmx5IGJlCi0gICAqIGRyb3BwZWQgaWYgdGhlaXIgUFRTIGZhbGxzIGNvbXBsZXRseSBvdXRzaWRlIHRoZSBzZWdtZW50LCB3aGlsZSB3ZSBzeW5jCi0gICAqIHByZWZlcmFibHkgb24gRFRTICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RhcnQpICYmIChzZWdtZW50LT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSkgewotICAgIEdzdENsb2NrVGltZSBwdHMgPSBHU1RfQlVGRkVSX1BUUyAoc3luY19idWYpOwotICAgIEdzdENsb2NrVGltZSBwdHNfZW5kID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHB0cykpCi0gICAgICBwdHMgPSBzdGFydDsKLQotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZW5kKSkKLSAgICAgIHB0c19lbmQgPSBwdHMgKyAoZW5kIC0gc3RhcnQpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3Rfc2VnbWVudF9jbGlwIChzZWdtZW50LAotICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgcHRzLCBwdHNfZW5kLCBOVUxMLCBOVUxMKSkpCi0gICAgICBnb3RvIG91dF9vZl9zZWdtZW50OwotICB9Ci0KLSAgaWYgKGJjbGFzcy0+cHJlcGFyZSB8fCBiY2xhc3MtPnByZXBhcmVfbGlzdCkgewotICAgIGdib29sZWFuIGRvX3N5bmMgPSBUUlVFLCBzdGVwcGVkID0gRkFMU0UsIHN5bmNhYmxlID0gVFJVRTsKLSAgICBHc3RDbG9ja1RpbWUgc3N0YXJ0LCBzc3RvcCwgcnN0YXJ0LCByc3RvcCwgcm5leHQ7Ci0gICAgR3N0U3RlcEluZm8gKmN1cnJlbnQ7Ci0KLSAgICBsYXRlID0gRkFMU0U7Ci0gICAgc3RlcF9lbmQgPSBGQUxTRTsKLQotICAgIGN1cnJlbnQgPSAmcHJpdi0+Y3VycmVudF9zdGVwOwotICAgIHN5bmNhYmxlID0KLSAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfc3luY190aW1lcyAoYmFzZXNpbmssIG9iaiwgJnNzdGFydCwgJnNzdG9wLCAmcnN0YXJ0LAotICAgICAgICAmcnN0b3AsICZybmV4dCwgJmRvX3N5bmMsICZzdGVwcGVkLCBjdXJyZW50LCAmc3RlcF9lbmQpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHN0ZXBwZWQpKQotICAgICAgZ290byBkcm9wcGVkOwotCi0gICAgaWYgKHN5bmNhYmxlICYmIGRvX3N5bmMgJiYgZ3N0X2Jhc2Vfc2lua19nZXRfc3luYyAoYmFzZXNpbmspKSB7Ci0gICAgICBHc3RDbG9jayAqY2xvY2s7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOwotICAgICAgY2xvY2sgPSBHU1RfRUxFTUVOVF9DTE9DSyAoYmFzZXNpbmspOwotICAgICAgaWYgKGNsb2NrICYmIEdTVF9TVEFURSAoYmFzZXNpbmspID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0gICAgICAgIEdzdENsb2NrVGltZSBiYXNlX3RpbWU7Ci0gICAgICAgIEdzdENsb2NrVGltZSBzdGltZTsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIG5vdzsKLQotICAgICAgICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayktPmJhc2VfdGltZTsKLSAgICAgICAgc3RpbWUgPSBiYXNlX3RpbWUgKyBnc3RfYmFzZV9zaW5rX2FkanVzdF90aW1lIChiYXNlc2luaywgcnN0YXJ0KTsKLSAgICAgICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7Ci0KLSAgICAgICAgbGF0ZSA9Ci0gICAgICAgICAgICBnc3RfYmFzZV9zaW5rX2lzX3Rvb19sYXRlIChiYXNlc2luaywgb2JqLCByc3RhcnQsIHJzdG9wLAotICAgICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCBHU1RfQ0xPQ0tfRElGRiAoc3RpbWUsIG5vdyksIEZBTFNFKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKEdfVU5MSUtFTFkgKGxhdGUpKQotICAgICAgZ290byBkcm9wcGVkOwotCi0gICAgaWYgKCFpc19saXN0KSB7Ci0gICAgICBpZiAoYmNsYXNzLT5wcmVwYXJlKSB7Ci0gICAgICAgIHJldCA9IGJjbGFzcy0+cHJlcGFyZSAoYmFzZXNpbmssIEdTVF9CVUZGRVJfQ0FTVCAob2JqKSk7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgICAgICAgIGdvdG8gcHJlcGFyZV9mYWlsZWQ7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChiY2xhc3MtPnByZXBhcmVfbGlzdCkgewotICAgICAgICByZXQgPSBiY2xhc3MtPnByZXBhcmVfbGlzdCAoYmFzZXNpbmssIEdTVF9CVUZGRVJfTElTVF9DQVNUIChvYmopKTsKLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgICAgICAgZ290byBwcmVwYXJlX2ZhaWxlZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcmVwYXJlZCA9IFRSVUU7Ci0gIH0KLQotYWdhaW46Ci0gIGxhdGUgPSBGQUxTRTsKLSAgc3RlcF9lbmQgPSBGQUxTRTsKLQotICAvKiBzeW5jaHJvbml6ZSB0aGlzIG9iamVjdCwgbm9uIHN5bmNhYmxlIG9iamVjdHMgcmV0dXJuIE9LCi0gICAqIGltbWVkaWF0ZWx5LiAqLwotICByZXQgPSBnc3RfYmFzZV9zaW5rX2RvX3N5bmMgKGJhc2VzaW5rLCBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoc3luY19idWYpLAotICAgICAgJmxhdGUsICZzdGVwX2VuZCk7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gc3luY19mYWlsZWQ7Ci0KLSAgLyogRG9uJ3Qgc2tpcCBpZiBwcmVwYXJlKCkgd2FzIGNhbGxlZCBvbiB0aW1lICovCi0gIGxhdGUgPSBsYXRlICYmICFwcmVwYXJlZDsKLQotICAvKiBkcm9wIGxhdGUgYnVmZmVycyB1bmNvbmRpdGlvbmFsbHksIGxldCdzIGhvcGUgaXQncyB1bmxpa2VseSAqLwotICBpZiAoR19VTkxJS0VMWSAobGF0ZSkpCi0gICAgZ290byBkcm9wcGVkOwotCi0gIGlmIChwcml2LT5tYXhfYml0cmF0ZSkgewotICAgIGlmIChpc19saXN0KSB7Ci0gICAgICBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCAoR1NUX0JVRkZFUl9MSVNUX0NBU1QgKG9iaiksCi0gICAgICAgICAgKEdzdEJ1ZmZlckxpc3RGdW5jKSBjb3VudF9saXN0X2J5dGVzLCBwcml2KTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpdi0+cmNfYWNjdW11bGF0ZWQgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoR1NUX0JVRkZFUl9DQVNUIChvYmopKTsKLSAgICB9Ci0gICAgcHJpdi0+cmNfbmV4dCA9IHByaXYtPnJjX3RpbWUgKyBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHByaXYtPnJjX2FjY3VtdWxhdGVkLAotICAgICAgICA4ICogR1NUX1NFQ09ORCwgcHJpdi0+bWF4X2JpdHJhdGUpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJyZW5kZXJpbmcgb2JqZWN0ICVwIiwgb2JqKTsKLQotICBpZiAoIWlzX2xpc3QpIHsKLSAgICAvKiBGb3IgYnVmZmVyIGxpc3RzIGRvIG5vdCBzZXQgbGFzdCBidWZmZXIgZm9yIG5vdy4gKi8KLSAgICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlciAoYmFzZXNpbmssIEdTVF9CVUZGRVJfQ0FTVCAob2JqKSk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXJfbGlzdCAoYmFzZXNpbmssIE5VTEwpOwotCi0gICAgaWYgKGJjbGFzcy0+cmVuZGVyKQotICAgICAgcmV0ID0gYmNsYXNzLT5yZW5kZXIgKGJhc2VzaW5rLCBHU1RfQlVGRkVSX0NBU1QgKG9iaikpOwotICB9IGVsc2UgewotICAgIEdzdEJ1ZmZlckxpc3QgKmJ1ZmZlcl9saXN0ID0gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKG9iaik7Ci0KLSAgICBpZiAoYmNsYXNzLT5yZW5kZXJfbGlzdCkKLSAgICAgIHJldCA9IGJjbGFzcy0+cmVuZGVyX2xpc3QgKGJhc2VzaW5rLCBidWZmZXJfbGlzdCk7Ci0KLSAgICAvKiBTZXQgdGhlIGZpcnN0IGJ1ZmZlciBhbmQgYnVmZmVyIGxpc3QgdG8gYmUgaW5jbHVkZWQgaW4gbGFzdCBzYW1wbGUgKi8KLSAgICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlciAoYmFzZXNpbmssIHN5bmNfYnVmKTsKLSAgICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlcl9saXN0IChiYXNlc2luaywgYnVmZmVyX2xpc3QpOwotICB9Ci0KLSAgaWYgKHJldCA9PSBHU1RfRkxPV19TVEVQKQotICAgIGdvdG8gYWdhaW47Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rLT5mbHVzaGluZykpCi0gICAgZ290byBmbHVzaGluZzsKLQotICBwcml2LT5yZW5kZXJlZCsrOwotCi1kb25lOgotICBpZiAoc3RlcF9lbmQpIHsKLSAgICAvKiB0aGUgc3RlcCBlbmRlZCwgY2hlY2sgaWYgd2UgbmVlZCB0byBhY3RpdmF0ZSBhIG5ldyBzdGVwICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJzdGVwIGVuZGVkIik7Ci0gICAgc3RvcF9zdGVwcGluZyAoYmFzZXNpbmssICZiYXNlc2luay0+c2VnbWVudCwgJnByaXYtPmN1cnJlbnRfc3RlcCwKLSAgICAgICAgcHJpdi0+Y3VycmVudF9yc3RhcnQsIHByaXYtPmN1cnJlbnRfcnN0b3AsIGJhc2VzaW5rLT5lb3MpOwotICAgIGdvdG8gYWdhaW47Ci0gIH0KLQotICBnc3RfYmFzZV9zaW5rX3BlcmZvcm1fcW9zIChiYXNlc2luaywgbGF0ZSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJvYmplY3QgdW5yZWYgYWZ0ZXIgcmVuZGVyICVwIiwgb2JqKTsKLSAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAob2JqKSk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJzaW5rIGlzIGZsdXNoaW5nIik7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAob2JqKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci13YXNfZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJ3ZSBhcmUgRU9TLCBkcm9wcGluZyBvYmplY3QsIHJldHVybiBFT1MiKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChvYmopKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci1lbXB0eV9saXN0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJidWZmZXIgbGlzdCB3aXRoIG5vIGJ1ZmZlcnMiKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChvYmopKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLW91dF9vZl9zZWdtZW50OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJkcm9wcGluZyBidWZmZXIsIG91dCBvZiBjbGlwcGluZyBzZWdtZW50Iik7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAob2JqKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1wcmVwYXJlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicHJlcGFyZSBidWZmZXIgZmFpbGVkICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKG9iaikpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLXN5bmNfZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJkb19zeW5jIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotZHJvcHBlZDoKLSAgewotICAgIHByaXYtPmRyb3BwZWQrKzsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImJ1ZmZlciBsYXRlLCBkcm9wcGluZyIpOwotCi0gICAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZwcml2LT5xb3NfZW5hYmxlZCkpIHsKLSAgICAgIEdzdE1lc3NhZ2UgKnFvc19tc2c7Ci0gICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLQotICAgICAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKEdTVF9CVUZGRVJfQ0FTVCAoc3luY19idWYpKTsKLSAgICAgIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoR1NUX0JVRkZFUl9DQVNUIChzeW5jX2J1ZikpOwotCi0gICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIGJhc2VzaW5rLAotICAgICAgICAgICJxb3M6IGRyb3BwZWQgYnVmZmVyIHJ0ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzdCAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAiLCB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZHVyICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChwcml2LT5jdXJyZW50X3JzdGFydCksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+Y3VycmVudF9zc3RhcnQpLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7Ci0gICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9RT1MsIGJhc2VzaW5rLAotICAgICAgICAgICJxb3M6IHJlbmRlcmVkICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZHJvcHBlZCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgIHByaXYtPnJlbmRlcmVkLCBwcml2LT5kcm9wcGVkKTsKLQotICAgICAgcW9zX21zZyA9Ci0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3FvcyAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luayksIGJhc2VzaW5rLT5zeW5jLAotICAgICAgICAgIHByaXYtPmN1cnJlbnRfcnN0YXJ0LCBwcml2LT5jdXJyZW50X3NzdGFydCwgdGltZXN0YW1wLCBkdXJhdGlvbik7Ci0gICAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcyAocW9zX21zZywgcHJpdi0+Y3VycmVudF9qaXR0ZXIsIHByaXYtPmF2Z19yYXRlLAotICAgICAgICAgIDEwMDAwMDApOwotICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0cyAocW9zX21zZywgR1NUX0ZPUk1BVF9CVUZGRVJTLCBwcml2LT5yZW5kZXJlZCwKLSAgICAgICAgICBwcml2LT5kcm9wcGVkKTsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLCBxb3NfbXNnKTsKLSAgICB9Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLS8qIHdpdGggU1RSRUFNX0xPQ0sKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3NpbmtfY2hhaW5fbWFpbiAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0UGFkICogcGFkLCBncG9pbnRlciBvYmosCi0gICAgZ2Jvb2xlYW4gaXNfbGlzdCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQ7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rLT5wYWRfbW9kZSAhPSBHU1RfUEFEX01PREVfUFVTSCkpCi0gICAgZ290byB3cm9uZ19tb2RlOwotCi0gIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChiYXNlc2luayk7Ci0gIHJlc3VsdCA9IGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQgKGJhc2VzaW5rLCBwYWQsIG9iaiwgaXNfbGlzdCk7Ci0gIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sgKGJhc2VzaW5rKTsKLQotZG9uZToKLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX21vZGU6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChiYXNlc2luaywKLSAgICAgICAgIlB1c2ggb24gcGFkICVzOiVzLCBidXQgaXQgd2FzIG5vdCBhY3RpdmF0ZWQgaW4gcHVzaCBtb2RlIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChvYmopKTsKLSAgICAvKiB3ZSBkb24ndCBwb3N0IGFuIGVycm9yIG1lc3NhZ2UgdGhpcyB3aWxsIHNpZ25hbCB0byB0aGUgcGVlcgotICAgICAqIHB1c2hpbmcgdGhhdCBFT1MgaXMgcmVhY2hlZC4gKi8KLSAgICByZXN1bHQgPSBHU1RfRkxPV19FT1M7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RCYXNlU2luayAqYmFzZXNpbms7Ci0KLSAgYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LIChwYXJlbnQpOwotCi0gIHJldHVybiBnc3RfYmFzZV9zaW5rX2NoYWluX21haW4gKGJhc2VzaW5rLCBwYWQsIGJ1ZiwgRkFMU0UpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2Vfc2lua19jaGFpbl9saXN0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXJMaXN0ICogbGlzdCkKLXsKLSAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOwotICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzdWx0OwotCi0gIGJhc2VzaW5rID0gR1NUX0JBU0VfU0lOSyAocGFyZW50KTsKLSAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKLQotICBpZiAoR19MSUtFTFkgKGJjbGFzcy0+cmVuZGVyX2xpc3QpKSB7Ci0gICAgcmVzdWx0ID0gZ3N0X2Jhc2Vfc2lua19jaGFpbl9tYWluIChiYXNlc2luaywgcGFkLCBsaXN0LCBUUlVFKTsKLSAgfSBlbHNlIHsKLSAgICBndWludCBpLCBsZW47Ci0gICAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiY2hhaW5pbmcgZWFjaCBidWZmZXIgaW4gbGlzdCIpOwotCi0gICAgbGVuID0gZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCk7Ci0KLSAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIGkpOwotICAgICAgcmVzdWx0ID0gZ3N0X2Jhc2Vfc2lua19jaGFpbl9tYWluIChiYXNlc2luaywgcGFkLAotICAgICAgICAgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpLCBGQUxTRSk7Ci0gICAgICBpZiAocmVzdWx0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0KTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2RvX3NlZWsgKEdzdEJhc2VTaW5rICogc2luaywgR3N0U2VnbWVudCAqIHNlZ21lbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0KLSAgLyogdXBkYXRlIG91ciBvZmZzZXQgaWYgdGhlIHN0YXJ0L3N0b3AgcG9zaXRpb24gd2FzIHVwZGF0ZWQgKi8KLSAgaWYgKHNlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgc2VnbWVudC0+dGltZSA9IHNlZ21lbnQtPnN0YXJ0OwotICB9IGVsc2UgaWYgKHNlZ21lbnQtPnN0YXJ0ID09IDApIHsKLSAgICAvKiBzZWVrIHRvIHN0YXJ0LCB3ZSBjYW4gaW1wbGVtZW50IGEgZGVmYXVsdCBmb3IgdGhpcy4gKi8KLSAgICBzZWdtZW50LT50aW1lID0gMDsKLSAgfSBlbHNlIHsKLSAgICByZXMgPSBGQUxTRTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNpbmssICJDYW4ndCBkbyBhIGRlZmF1bHQgc2VlayIpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotI2RlZmluZSBTRUVLX1RZUEVfSVNfUkVMQVRJVkUodCkgKCgodCkgIT0gR1NUX1NFRUtfVFlQRV9OT05FKSAmJiAoKHQpICE9IEdTVF9TRUVLX1RZUEVfU0VUKSkKLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX2RlZmF1bHRfcHJlcGFyZV9zZWVrX3NlZ21lbnQgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RFdmVudCAqIGV2ZW50LCBHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgLyogQnkgZGVmYXVsdCwgd2UgdHJ5IG9uZSBvZiAyIHRoaW5nczoKLSAgICogICAtIEZvciBhYnNvbHV0ZSBzZWVrIHBvc2l0aW9ucywgY29udmVydCB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHRvIG91cgotICAgKiAgICAgY29uZmlndXJlZCBwcm9jZXNzaW5nIGZvcm1hdCBhbmQgcGxhY2UgaXQgaW4gdGhlIG91dHB1dCBzZWdtZW50IFwKLSAgICogICAtIEZvciByZWxhdGl2ZSBzZWVrIHBvc2l0aW9ucywgY29udmVydCBvdXIgY3VycmVudCAoaW5wdXQpIHZhbHVlcyB0byB0aGUKLSAgICogICAgIHNlZWsgZm9ybWF0LCBhZGp1c3QgYnkgdGhlIHJlbGF0aXZlIHNlZWsgb2Zmc2V0IGFuZCB0aGVuIGNvbnZlcnQgYmFjayB0bwotICAgKiAgICAgdGhlIHByb2Nlc3NpbmcgZm9ybWF0Ci0gICAqLwotICBHc3RTZWVrVHlwZSBzdGFydF90eXBlLCBzdG9wX3R5cGU7Ci0gIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RGb3JtYXQgc2Vla19mb3JtYXQ7Ci0gIGdkb3VibGUgcmF0ZTsKLSAgZ2Jvb2xlYW4gdXBkYXRlOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGdzdF9ldmVudF9wYXJzZV9zZWVrIChldmVudCwgJnJhdGUsICZzZWVrX2Zvcm1hdCwgJmZsYWdzLAotICAgICAgJnN0YXJ0X3R5cGUsICZzdGFydCwgJnN0b3BfdHlwZSwgJnN0b3ApOwotCi0gIGlmIChzZWVrX2Zvcm1hdCA9PSBzZWdtZW50LT5mb3JtYXQpIHsKLSAgICBnc3Rfc2VnbWVudF9kb19zZWVrIChzZWdtZW50LCByYXRlLCBzZWVrX2Zvcm1hdCwgZmxhZ3MsCi0gICAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgaWYgKHN0YXJ0X3R5cGUgIT0gR1NUX1NFRUtfVFlQRV9OT05FKSB7Ci0gICAgLyogRklYTUU6IEhhbmRsZSBzZWVrX2VuZCBieSBjb252ZXJ0aW5nIHRoZSBpbnB1dCBzZWdtZW50IHZhbHMgKi8KLSAgICByZXMgPQotICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHNpbmstPnNpbmtwYWQsIHNlZWtfZm9ybWF0LCBzdGFydCwKLSAgICAgICAgc2VnbWVudC0+Zm9ybWF0LCAmc3RhcnQpOwotICAgIHN0YXJ0X3R5cGUgPSBHU1RfU0VFS19UWVBFX1NFVDsKLSAgfQotCi0gIGlmIChyZXMgJiYgc3RvcF90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkgewotICAgIC8qIEZJWE1FOiBIYW5kbGUgc2Vla19lbmQgYnkgY29udmVydGluZyB0aGUgaW5wdXQgc2VnbWVudCB2YWxzICovCi0gICAgcmVzID0KLSAgICAgICAgZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChzaW5rLT5zaW5rcGFkLCBzZWVrX2Zvcm1hdCwgc3RvcCwKLSAgICAgICAgc2VnbWVudC0+Zm9ybWF0LCAmc3RvcCk7Ci0gICAgc3RvcF90eXBlID0gR1NUX1NFRUtfVFlQRV9TRVQ7Ci0gIH0KLQotICAvKiBBbmQgZmluYWxseSwgY29uZmlndXJlIG91ciBvdXRwdXQgc2VnbWVudCBpbiB0aGUgZGVzaXJlZCBmb3JtYXQgKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoc2VnbWVudCwgcmF0ZSwgc2VnbWVudC0+Zm9ybWF0LCBmbGFncywgc3RhcnRfdHlwZSwgc3RhcnQsCi0gICAgICBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotCi0gIGlmICghcmVzKQotICAgIGdvdG8gbm9fZm9ybWF0OwotCi0gIHJldHVybiByZXM7Ci0KLW5vX2Zvcm1hdDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJ1bmRlZmluZWQgZm9ybWF0IGdpdmVuLCBzZWVrIGFib3J0ZWQuIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIHBlcmZvcm0gYSBzZWVrLCBvbmx5IGV4ZWN1dGVkIGluIHB1bGwgbW9kZSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX3BlcmZvcm1fc2VlayAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIGZsdXNoOwotICBnZG91YmxlIHJhdGU7Ci0gIEdzdEZvcm1hdCBzZWVrX2Zvcm1hdCwgZGVzdF9mb3JtYXQ7Ci0gIEdzdFNlZWtGbGFncyBmbGFnczsKLSAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgc3RvcF90eXBlOwotICBnYm9vbGVhbiBzZWVrc2VnX2NvbmZpZ3VyZWQgPSBGQUxTRTsKLSAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotICBnYm9vbGVhbiB1cGRhdGUsIHJlcyA9IFRSVUU7Ci0gIEdzdFNlZ21lbnQgc2Vla3NlZ21lbnQ7Ci0KLSAgZGVzdF9mb3JtYXQgPSBzaW5rLT5zZWdtZW50LmZvcm1hdDsKLQotICBpZiAoZXZlbnQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAicGVyZm9ybWluZyBzZWVrIHdpdGggZXZlbnQgJXAiLCBldmVudCk7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJnNlZWtfZm9ybWF0LCAmZmxhZ3MsCi0gICAgICAgICZzdGFydF90eXBlLCAmc3RhcnQsICZzdG9wX3R5cGUsICZzdG9wKTsKLQotICAgIGZsdXNoID0gZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwZXJmb3JtaW5nIHNlZWsgd2l0aG91dCBldmVudCIpOwotICAgIGZsdXNoID0gRkFMU0U7Ci0gIH0KLQotICBpZiAoZmx1c2gpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiZmx1c2hpbmcgdXBzdHJlYW0iKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19mbHVzaF9zdGFydCAoc2luaywgcGFkKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAicGF1c2luZyBwdWxsaW5nIHRocmVhZCIpOwotICB9Ci0KLSAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKLQotICAvKiBJZiB3ZSBjb25maWd1cmVkIHRoZSBzZWVrc2VnbWVudCBhYm92ZSwgZG9uJ3Qgb3ZlcndyaXRlIGl0IG5vdy4gT3RoZXJ3aXNlCi0gICAqIGNvcHkgdGhlIGN1cnJlbnQgc2VnbWVudCBpbmZvIGludG8gdGhlIHRlbXAgc2VnbWVudCB0aGF0IHdlIGNhbiBhY3R1YWxseQotICAgKiBhdHRlbXB0IHRoZSBzZWVrIHdpdGguIFdlIG9ubHkgdXBkYXRlIHRoZSByZWFsIHNlZ21lbnQgaWYgdGhlIHNlZWsgc3VjY2VlZHMuICovCi0gIGlmICghc2Vla3NlZ19jb25maWd1cmVkKSB7Ci0gICAgbWVtY3B5ICgmc2Vla3NlZ21lbnQsICZzaW5rLT5zZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLQotICAgIC8qIG5vdyBjb25maWd1cmUgdGhlIGZpbmFsIHNlZWsgc2VnbWVudCAqLwotICAgIGlmIChldmVudCkgewotICAgICAgaWYgKHNpbmstPnNlZ21lbnQuZm9ybWF0ICE9IHNlZWtfZm9ybWF0KSB7Ci0gICAgICAgIC8qIE9LLCBoZXJlJ3Mgd2hlcmUgd2UgZ2l2ZSB0aGUgc3ViY2xhc3MgYSBjaGFuY2UgdG8gY29udmVydCB0aGUgcmVsYXRpdmUKLSAgICAgICAgICogc2VlayBpbnRvIGFuIGFic29sdXRlIG9uZSBpbiB0aGUgcHJvY2Vzc2luZyBmb3JtYXQuIFdlIHNldCB1cCBhbnkKLSAgICAgICAgICogYWJzb2x1dGUgc2VlayBhYm92ZSwgYmVmb3JlIHRha2luZyB0aGUgc3RyZWFtIGxvY2suICovCi0gICAgICAgIGlmICghZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X3ByZXBhcmVfc2Vla19zZWdtZW50IChzaW5rLCBldmVudCwKLSAgICAgICAgICAgICAgICAmc2Vla3NlZ21lbnQpKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywKLSAgICAgICAgICAgICAgIlByZXBhcmluZyB0aGUgc2VlayBmYWlsZWQgYWZ0ZXIgZmx1c2hpbmcuICIgIkFib3J0aW5nIHNlZWsiKTsKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogVGhlIHNlZWsgZm9ybWF0IG1hdGNoZXMgb3VyIHByb2Nlc3NpbmcgZm9ybWF0LCBubyBuZWVkIHRvIGFzayB0aGUKLSAgICAgICAgICogdGhlIHN1YmNsYXNzIHRvIGNvbmZpZ3VyZSB0aGUgc2VnbWVudC4gKi8KLSAgICAgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZWtzZWdtZW50LCByYXRlLCBzZWVrX2Zvcm1hdCwgZmxhZ3MsCi0gICAgICAgICAgICBzdGFydF90eXBlLCBzdGFydCwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLyogRWxzZSwgbm8gc2VlayBldmVudCBwYXNzZWQsIHNvIHdlJ3JlIGp1c3QgKHJlKXN0YXJ0aW5nIHRoZQotICAgICAgIGN1cnJlbnQgc2VnbWVudC4gKi8KLSAgfQotCi0gIGlmIChyZXMpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2VnbWVudCBjb25maWd1cmVkIGZyb20gJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICIgdG8gJSIgR19HSU5UNjRfRk9STUFUICIsIHBvc2l0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgc2Vla3NlZ21lbnQuc3RhcnQsIHNlZWtzZWdtZW50LnN0b3AsIHNlZWtzZWdtZW50LnBvc2l0aW9uKTsKLQotICAgIC8qIGRvIHRoZSBzZWVrLCBzZWdtZW50LnBvc2l0aW9uIGNvbnRhaW5zIHRoZSBuZXcgcG9zaXRpb24uICovCi0gICAgcmVzID0gZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2RvX3NlZWsgKHNpbmssICZzZWVrc2VnbWVudCk7Ci0gIH0KLQotICBpZiAoZmx1c2gpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RvcCBmbHVzaGluZyB1cHN0cmVhbSIpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKLSAgICBnc3RfYmFzZV9zaW5rX2ZsdXNoX3N0b3AgKHNpbmssIHBhZCwgVFJVRSk7Ci0gIH0gZWxzZSBpZiAocmVzICYmIHNpbmstPnJ1bm5pbmcpIHsKLSAgICAvKiB3ZSBhcmUgcnVubmluZyB0aGUgY3VycmVudCBzZWdtZW50IGFuZCBkb2luZyBhIG5vbi1mbHVzaGluZyBzZWVrLAotICAgICAqIGNsb3NlIHRoZSBzZWdtZW50IGZpcnN0IGJhc2VkIG9uIHRoZSBwb3NpdGlvbi4gKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiY2xvc2luZyBydW5uaW5nIHNlZ21lbnQgJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICIgdG8gJSIgR19HSU5UNjRfRk9STUFULCBzaW5rLT5zZWdtZW50LnN0YXJ0LCBzaW5rLT5zZWdtZW50LnBvc2l0aW9uKTsKLSAgfQotCi0gIC8qIFRoZSBzdWJjbGFzcyBtdXN0IGhhdmUgY29udmVydGVkIHRoZSBzZWdtZW50IHRvIHRoZSBwcm9jZXNzaW5nIGZvcm1hdAotICAgKiBieSBub3cgKi8KLSAgaWYgKHJlcyAmJiBzZWVrc2VnbWVudC5mb3JtYXQgIT0gZGVzdF9mb3JtYXQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiU3ViY2xhc3MgZmFpbGVkIHRvIHByZXBhcmUgYSBzZWVrIHNlZ21lbnQgIgotICAgICAgICAiaW4gdGhlIGNvcnJlY3QgZm9ybWF0LiBBYm9ydGluZyBzZWVrLiIpOwotICAgIHJlcyA9IEZBTFNFOwotICB9Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChzaW5rLCAic2Vla2luZyBkb25lICVkOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsIHJlcywKLSAgICAgICZzZWVrc2VnbWVudCk7Ci0KLSAgLyogaWYgc3VjY2Vzc2Z1bCBzZWVrLCB3ZSB1cGRhdGUgb3VyIHJlYWwgc2VnbWVudCBhbmQgcHVzaAotICAgKiBvdXQgdGhlIG5ldyBzZWdtZW50LiAqLwotICBpZiAocmVzKSB7Ci0gICAgZ3N0X3NlZ21lbnRfY29weV9pbnRvICgmc2Vla3NlZ21lbnQsICZzaW5rLT5zZWdtZW50KTsKLQotICAgIGlmIChzaW5rLT5zZWdtZW50LmZsYWdzICYgR1NUX1NFR01FTlRfRkxBR19TRUdNRU5UKSB7Ci0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChzaW5rKSwKLSAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoR1NUX09CSkVDVCAoc2luayksCi0gICAgICAgICAgICAgIHNpbmstPnNlZ21lbnQuZm9ybWF0LCBzaW5rLT5zZWdtZW50LnBvc2l0aW9uKSk7Ci0gICAgfQotICB9Ci0KLSAgc2luay0+cHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gIHNpbmstPnJ1bm5pbmcgPSBUUlVFOwotCi0gIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X3N0ZXBfaW5mbyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RTdGVwSW5mbyAqIGN1cnJlbnQsIEdzdFN0ZXBJbmZvICogcGVuZGluZywKLSAgICBndWludCBzZXFudW0sIEdzdEZvcm1hdCBmb3JtYXQsIGd1aW50NjQgYW1vdW50LCBnZG91YmxlIHJhdGUsCi0gICAgZ2Jvb2xlYW4gZmx1c2gsIGdib29sZWFuIGludGVybWVkaWF0ZSkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgcGVuZGluZy0+c2VxbnVtID0gc2VxbnVtOwotICBwZW5kaW5nLT5mb3JtYXQgPSBmb3JtYXQ7Ci0gIHBlbmRpbmctPmFtb3VudCA9IGFtb3VudDsKLSAgcGVuZGluZy0+cG9zaXRpb24gPSAwOwotICBwZW5kaW5nLT5yYXRlID0gcmF0ZTsKLSAgcGVuZGluZy0+Zmx1c2ggPSBmbHVzaDsKLSAgcGVuZGluZy0+aW50ZXJtZWRpYXRlID0gaW50ZXJtZWRpYXRlOwotICBwZW5kaW5nLT52YWxpZCA9IFRSVUU7Ci0gIC8qIGZsdXNoIGludmFsaWRhdGVzIHRoZSBjdXJyZW50IHN0ZXBwaW5nIHNlZ21lbnQgKi8KLSAgaWYgKGZsdXNoKQotICAgIGN1cnJlbnQtPnZhbGlkID0gRkFMU0U7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX3BlcmZvcm1fc3RlcCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEJhc2VTaW5rUHJpdmF0ZSAqcHJpdjsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOwotICBnYm9vbGVhbiBmbHVzaCwgaW50ZXJtZWRpYXRlOwotICBnZG91YmxlIHJhdGU7Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gIGd1aW50NjQgYW1vdW50OwotICBndWludCBzZXFudW07Ci0gIEdzdFN0ZXBJbmZvICpwZW5kaW5nLCAqY3VycmVudDsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoc2luayk7Ci0gIHByaXYgPSBzaW5rLT5wcml2OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJwZXJmb3JtaW5nIHN0ZXAgd2l0aCBldmVudCAlcCIsIGV2ZW50KTsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc3RlcCAoZXZlbnQsICZmb3JtYXQsICZhbW91bnQsICZyYXRlLCAmZmx1c2gsICZpbnRlcm1lZGlhdGUpOwotICBzZXFudW0gPSBnc3RfZXZlbnRfZ2V0X3NlcW51bSAoZXZlbnQpOwotCi0gIHBlbmRpbmcgPSAmcHJpdi0+cGVuZGluZ19zdGVwOwotICBjdXJyZW50ID0gJnByaXYtPmN1cnJlbnRfc3RlcDsKLQotICAvKiBwb3N0IG1lc3NhZ2UgZmlyc3QgKi8KLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19zdGVwX3N0YXJ0IChHU1RfT0JKRUNUIChzaW5rKSwgRkFMU0UsIGZvcm1hdCwKLSAgICAgIGFtb3VudCwgcmF0ZSwgZmx1c2gsIGludGVybWVkaWF0ZSk7Ci0gIGdzdF9tZXNzYWdlX3NldF9zZXFudW0gKG1lc3NhZ2UsIHNlcW51bSk7Ci0gIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHNpbmspLCBtZXNzYWdlKTsKLQotICBpZiAoZmx1c2gpIHsKLSAgICAvKiB3ZSBuZWVkIHRvIGNhbGwgOjp1bmxvY2sgYmVmb3JlIGxvY2tpbmcgUFJFUk9MTF9MT0NLCi0gICAgICogc2luY2Ugd2UgbG9jayBpdCBiZWZvcmUgZ29pbmcgaW50byA6OnJlbmRlciAqLwotICAgIGlmIChiY2xhc3MtPnVubG9jaykKLSAgICAgIGJjbGFzcy0+dW5sb2NrIChzaW5rKTsKLQotICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChzaW5rKTsKLSAgICAvKiBub3cgdGhhdCB3ZSBoYXZlIHRoZSBQUkVST0xMIGxvY2ssIGNsZWFyIG91ciB1bmxvY2sgcmVxdWVzdCAqLwotICAgIGlmIChiY2xhc3MtPnVubG9ja19zdG9wKQotICAgICAgYmNsYXNzLT51bmxvY2tfc3RvcCAoc2luayk7Ci0KLSAgICAvKiB1cGRhdGUgdGhlIHN0ZXBpbmZvIGFuZCBtYWtlIGl0IHZhbGlkICovCi0gICAgc2V0X3N0ZXBfaW5mbyAoc2luaywgY3VycmVudCwgcGVuZGluZywgc2VxbnVtLCBmb3JtYXQsIGFtb3VudCwgcmF0ZSwgZmx1c2gsCi0gICAgICAgIGludGVybWVkaWF0ZSk7Ci0KLSAgICBpZiAoc2luay0+cHJpdi0+YXN5bmNfZW5hYmxlZCkgewotICAgICAgLyogYW5kIHdlIG5lZWQgdG8gY29tbWl0IG91ciBzdGF0ZSBhZ2FpbiBvbiB0aGUgbmV4dAotICAgICAgICogcHJlcm9sbGVkIGJ1ZmZlciAqLwotICAgICAgc2luay0+cGxheWluZ19hc3luYyA9IFRSVUU7Ci0gICAgICBwcml2LT5wZW5kaW5nX3N0ZXAubmVlZF9wcmVyb2xsID0gVFJVRTsKLSAgICAgIHNpbmstPm5lZWRfcHJlcm9sbCA9IEZBTFNFOwotICAgICAgZ3N0X2Jhc2Vfc2lua191cGRhdGVfc3RhcnRfdGltZSAoc2luayk7Ci0gICAgICBnc3RfZWxlbWVudF9sb3N0X3N0YXRlIChHU1RfRUxFTUVOVF9DQVNUIChzaW5rKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNpbmstPnByaXYtPmhhdmVfbGF0ZW5jeSA9IFRSVUU7Ci0gICAgICBzaW5rLT5uZWVkX3ByZXJvbGwgPSBGQUxTRTsKLSAgICB9Ci0gICAgcHJpdi0+Y3VycmVudF9zc3RhcnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIHByaXYtPmN1cnJlbnRfc3N0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIHByaXYtPmVvc19ydGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgcHJpdi0+Y2FsbF9wcmVyb2xsID0gVFJVRTsKLSAgICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X2J1ZmZlciAoc2luaywgTlVMTCk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXJfbGlzdCAoc2luaywgTlVMTCk7Ci0gICAgZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MgKHNpbmspOwotCi0gICAgaWYgKHNpbmstPmNsb2NrX2lkKSB7Ci0gICAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoc2luay0+Y2xvY2tfaWQpOwotICAgIH0KLQotICAgIGlmIChzaW5rLT5oYXZlX3ByZXJvbGwpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJzaWduYWwgd2FpdGVyIik7Ci0gICAgICBwcml2LT5zdGVwX3VubG9jayA9IFRSVUU7Ci0gICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfU0lHTkFMIChzaW5rKTsKLSAgICB9Ci0gICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoc2luayk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogdXBkYXRlIHRoZSBzdGVwaW5mbyBhbmQgbWFrZSBpdCB2YWxpZCAqLwotICAgIHNldF9zdGVwX2luZm8gKHNpbmssIGN1cnJlbnQsIHBlbmRpbmcsIHNlcW51bSwgZm9ybWF0LCBhbW91bnQsIHJhdGUsIGZsdXNoLAotICAgICAgICBpbnRlcm1lZGlhdGUpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIHdpdGggU1RSRUFNX0xPQ0sKLSAqLwotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NpbmtfbG9vcCAoR3N0UGFkICogcGFkKQotewotICBHc3RPYmplY3QgKnBhcmVudDsKLSAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOwotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzdWx0OwotICBndWludCBibG9ja3NpemU7Ci0gIGd1aW50NjQgb2Zmc2V0OwotCi0gIHBhcmVudCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpOwotICBiYXNlc2luayA9IEdTVF9CQVNFX1NJTksgKHBhcmVudCk7Ci0KLSAgZ19hc3NlcnQgKGJhc2VzaW5rLT5wYWRfbW9kZSA9PSBHU1RfUEFEX01PREVfUFVMTCk7Ci0KLSAgaWYgKChibG9ja3NpemUgPSBiYXNlc2luay0+cHJpdi0+YmxvY2tzaXplKSA9PSAwKQotICAgIGJsb2Nrc2l6ZSA9IC0xOwotCi0gIG9mZnNldCA9IGJhc2VzaW5rLT5zZWdtZW50LnBvc2l0aW9uOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicHVsbGluZyAlIiBHX0dVSU5UNjRfRk9STUFUICIsICV1IiwKLSAgICAgIG9mZnNldCwgYmxvY2tzaXplKTsKLQotICByZXN1bHQgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKHBhZCwgb2Zmc2V0LCBibG9ja3NpemUsICZidWYpOwotICBpZiAoR19VTkxJS0VMWSAocmVzdWx0ICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIHBhdXNlZDsKLQotICBpZiAoR19VTkxJS0VMWSAoYnVmID09IE5VTEwpKQotICAgIGdvdG8gbm9fYnVmZmVyOwotCi0gIG9mZnNldCArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotCi0gIGJhc2VzaW5rLT5zZWdtZW50LnBvc2l0aW9uID0gb2Zmc2V0OwotCi0gIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9MT0NLIChiYXNlc2luayk7Ci0gIHJlc3VsdCA9IGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQgKGJhc2VzaW5rLCBwYWQsIGJ1ZiwgRkFMU0UpOwotICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7Ci0gIGlmIChHX1VOTElLRUxZIChyZXN1bHQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gcGF1c2VkOwotCi0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLXBhdXNlZDoKLSAgewotICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc2luaywgInBhdXNpbmcgdGFzaywgcmVhc29uICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlc3VsdCkpOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocGFkKTsKLSAgICBpZiAocmVzdWx0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogcGVyZm9ybSBFT1MgbG9naWMgKi8KLSAgICAgIGlmIChiYXNlc2luay0+c2VnbWVudC5mbGFncyAmIEdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVCkgewotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUgKEdTVF9PQkpFQ1RfQ0FTVCAoYmFzZXNpbmspLAotICAgICAgICAgICAgICAgIGJhc2VzaW5rLT5zZWdtZW50LmZvcm1hdCwgYmFzZXNpbmstPnNlZ21lbnQucG9zaXRpb24pKTsKLSAgICAgICAgZ3N0X2Jhc2Vfc2lua19ldmVudCAocGFkLCBwYXJlbnQsCi0gICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZSAoYmFzZXNpbmstPnNlZ21lbnQuZm9ybWF0LAotICAgICAgICAgICAgICAgIGJhc2VzaW5rLT5zZWdtZW50LnBvc2l0aW9uKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfYmFzZV9zaW5rX2V2ZW50IChwYWQsIHBhcmVudCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQgfHwgcmVzdWx0IDw9IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogZm9yIGZhdGFsIGVycm9ycyB3ZSBwb3N0IGFuIGVycm9yIG1lc3NhZ2UsIHBvc3QgdGhlIGVycm9yCi0gICAgICAgKiBmaXJzdCBzbyB0aGUgYXBwIGtub3dzIGFib3V0IHRoZSBlcnJvciBmaXJzdC4gCi0gICAgICAgKiB3cm9uZy1zdGF0ZSBpcyBub3QgYSBmYXRhbCBlcnJvciBiZWNhdXNlIGl0IGhhcHBlbnMgZHVlIHRvCi0gICAgICAgKiBmbHVzaGluZyBhbmQgcG9zdGluZyBhbiBlcnJvciBtZXNzYWdlIGluIHRoYXQgY2FzZSBpcyB0aGUKLSAgICAgICAqIHdyb25nIHRoaW5nIHRvIGRvLCBlLmcuIHdoZW4gYmFzZXNyYyBpcyBkb2luZyBhIGZsdXNoaW5nCi0gICAgICAgKiBzZWVrLiAqLwotICAgICAgR1NUX0VMRU1FTlRfRkxPV19FUlJPUiAoYmFzZXNpbmssIHJlc3VsdCk7Ci0gICAgICBnc3RfYmFzZV9zaW5rX2V2ZW50IChwYWQsIHBhcmVudCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLW5vX2J1ZmZlcjoKLSAgewotICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc2luaywgIm5vIGJ1ZmZlciwgcGF1c2luZyIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChiYXNlc2luaywgU1RSRUFNLCBGQUlMRUQsCi0gICAgICAgIChfKCJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIikpLCAoImVsZW1lbnQgcmV0dXJuZWQgTlVMTCBidWZmZXIiKSk7Ci0gICAgcmVzdWx0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBwYXVzZWQ7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX3NldF9mbHVzaGluZyAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0UGFkICogcGFkLAotICAgIGdib29sZWFuIGZsdXNoaW5nKQotewotICBHc3RCYXNlU2lua0NsYXNzICpiY2xhc3M7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKLQotICBpZiAoZmx1c2hpbmcpIHsKLSAgICAvKiB1bmxvY2sgYW55IHN1YmNsYXNzZXMsIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgZ3JhYmJpbmcgdGhlCi0gICAgICogUFJFUk9MTF9MT0NLIHNpbmNlIHdlIGhvbGQgdGhpcyBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIDo6cmVuZGVyLiAqLwotICAgIGlmIChiY2xhc3MtPnVubG9jaykKLSAgICAgIGJjbGFzcy0+dW5sb2NrIChiYXNlc2luayk7Ci0gIH0KLQotICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyAoYmFzZXNpbmspOwotICBiYXNlc2luay0+Zmx1c2hpbmcgPSBmbHVzaGluZzsKLSAgaWYgKGZsdXNoaW5nKSB7Ci0gICAgLyogc3RlcCAxLCBub3cgdGhhdCB3ZSBoYXZlIHRoZSBQUkVST0xMIGxvY2ssIGNsZWFyIG91ciB1bmxvY2sgcmVxdWVzdCAqLwotICAgIGlmIChiY2xhc3MtPnVubG9ja19zdG9wKQotICAgICAgYmNsYXNzLT51bmxvY2tfc3RvcCAoYmFzZXNpbmspOwotCi0gICAgLyogc2V0IG5lZWRfcHJlcm9sbCBiZWZvcmUgd2UgdW5ibG9jayB0aGUgY2xvY2suIElmIHRoZSBjbG9jayBpcyB1bmJsb2NrZWQKLSAgICAgKiBiZWZvcmUgdGltaW5nIG91dCwgd2UgY2FuIHJldXNlIHRoZSBidWZmZXIgZm9yIHByZXJvbGwuICovCi0gICAgYmFzZXNpbmstPm5lZWRfcHJlcm9sbCA9IFRSVUU7Ci0KLSAgICAvKiBzdGVwIDIsIHVuYmxvY2sgY2xvY2sgc3luYyAoaWYgYW55KSBvciBhbnkgb3RoZXIgYmxvY2tpbmcgdGhpbmcgKi8KLSAgICBpZiAoYmFzZXNpbmstPmNsb2NrX2lkKSB7Ci0gICAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoYmFzZXNpbmstPmNsb2NrX2lkKTsKLSAgICB9Ci0KLSAgICAvKiBmbHVzaCBvdXQgdGhlIGRhdGEgdGhyZWFkIGlmIGl0J3MgbG9ja2VkIGluIGZpbmlzaF9wcmVyb2xsLCB0aGlzIHdpbGwKLSAgICAgKiBhbHNvIGZsdXNoIG91dCB0aGUgRU9TIHN0YXRlICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssCi0gICAgICAgICJmbHVzaGluZyBvdXQgZGF0YSB0aHJlYWQsIG5lZWQgcHJlcm9sbCB0byBUUlVFIik7Ci0KLSAgICAvKiB3ZSBjYW4ndCBoYXZlIEVPUyBhbnltb3JlIG5vdyAqLwotICAgIGJhc2VzaW5rLT5lb3MgPSBGQUxTRTsKLSAgICBiYXNlc2luay0+cHJpdi0+cmVjZWl2ZWRfZW9zID0gRkFMU0U7Ci0gICAgYmFzZXNpbmstPmhhdmVfcHJlcm9sbCA9IEZBTFNFOwotICAgIGJhc2VzaW5rLT5wcml2LT5zdGVwX3VubG9jayA9IEZBTFNFOwotICAgIC8qIGNhbid0IHJlcG9ydCBsYXRlbmN5IGFueW1vcmUgdW50aWwgd2UgcHJlcm9sbCBhZ2FpbiAqLwotICAgIGlmIChiYXNlc2luay0+cHJpdi0+YXN5bmNfZW5hYmxlZCkgewotICAgICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7Ci0gICAgICBiYXNlc2luay0+cHJpdi0+aGF2ZV9sYXRlbmN5ID0gRkFMU0U7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOwotICAgIH0KLSAgICAvKiBhbmQgc2lnbmFsIGFueSB3YWl0ZXJzIG5vdyAqLwotICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9TSUdOQUwgKGJhc2VzaW5rKTsKLSAgfQotICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19kZWZhdWx0X2FjdGl2YXRlX3B1bGwgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICAvKiBzdGFydCB0YXNrICovCi0gICAgcmVzdWx0ID0gZ3N0X3BhZF9zdGFydF90YXNrIChiYXNlc2luay0+c2lua3BhZCwKLSAgICAgICAgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2Jhc2Vfc2lua19sb29wLCBiYXNlc2luay0+c2lua3BhZCwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogc3RlcCAyLCBtYWtlIHN1cmUgc3RyZWFtaW5nIGZpbmlzaGVzICovCi0gICAgcmVzdWx0ID0gZ3N0X3BhZF9zdG9wX3Rhc2sgKGJhc2VzaW5rLT5zaW5rcGFkKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50KQotewotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLSAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHB1bGxfbW9kZTsKLQotICBiYXNlc2luayA9IEdTVF9CQVNFX1NJTksgKHBhcmVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJUcnlpbmcgcHVsbCBtb2RlIGZpcnN0Iik7Ci0KLSAgZ3N0X2Jhc2Vfc2lua19zZXRfZmx1c2hpbmcgKGJhc2VzaW5rLCBwYWQsIEZBTFNFKTsKLQotICAvKiB3ZSBuZWVkIHRvIGhhdmUgdGhlIHB1bGwgbW9kZSBlbmFibGVkICovCi0gIGlmICghYmFzZXNpbmstPmNhbl9hY3RpdmF0ZV9wdWxsKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJwdWxsIG1vZGUgZGlzYWJsZWQiKTsKLSAgICBnb3RvIGZhbGxiYWNrOwotICB9Ci0KLSAgLyogY2hlY2sgaWYgZG93bnN0cmVhbXMgc3VwcG9ydHMgcHVsbCBtb2RlIGF0IGFsbCAqLwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAoKTsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSkpIHsKLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInBlZXIgcXVlcnkgZmFpbGQsIG5vIHB1bGwgbW9kZSIpOwotICAgIGdvdG8gZmFsbGJhY2s7Ci0gIH0KLQotICAvKiBwYXJzZSByZXN1bHQgb2YgdGhlIHF1ZXJ5ICovCi0gIHB1bGxfbW9kZSA9IGdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlIChxdWVyeSwgR1NUX1BBRF9NT0RFX1BVTEwpOwotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICBpZiAoIXB1bGxfbW9kZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicHVsbCBtb2RlIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICBnb3RvIGZhbGxiYWNrOwotICB9Ci0KLSAgLyogc2V0IHRoZSBwYWQgbW9kZSBiZWZvcmUgc3RhcnRpbmcgdGhlIHRhc2sgc28gdGhhdCBpdCdzIGluIHRoZQotICAgKiBjb3JyZWN0IHN0YXRlIGZvciB0aGUgbmV3IHRocmVhZC4gYWxzbyB0aGUgc2luayBzZXRfY2FwcyBhbmQgZ2V0X2NhcHMKLSAgICogZnVuY3Rpb24gY2hlY2tzIHRoaXMgKi8KLSAgYmFzZXNpbmstPnBhZF9tb2RlID0gR1NUX1BBRF9NT0RFX1BVTEw7Ci0KLSAgLyogd2UgZmlyc3QgdHJ5IHRvIG5lZ290aWF0ZSBhIGZvcm1hdCBzbyB0aGF0IHdoZW4gd2UgdHJ5IHRvIGFjdGl2YXRlCi0gICAqIGRvd25zdHJlYW0sIGl0IGtub3dzIGFib3V0IG91ciBmb3JtYXQgKi8KLSAgaWYgKCFnc3RfYmFzZV9zaW5rX25lZ290aWF0ZV9wdWxsIChiYXNlc2luaykpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImZhaWxlZCB0byBuZWdvdGlhdGUgaW4gcHVsbCBtb2RlIik7Ci0gICAgZ290byBmYWxsYmFjazsKLSAgfQotCi0gIC8qIG9rIGFjdGl2YXRlIG5vdyAqLwotICBpZiAoIWdzdF9wYWRfYWN0aXZhdGVfbW9kZSAocGFkLCBHU1RfUEFEX01PREVfUFVMTCwgVFJVRSkpIHsKLSAgICAvKiBjbGVhciBhbnkgcGVuZGluZyBjYXBzICovCi0gICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7Ci0gICAgZ3N0X2NhcHNfcmVwbGFjZSAoJmJhc2VzaW5rLT5wcml2LT5jYXBzLCBOVUxMKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZmFpbGVkIHRvIGFjdGl2YXRlIGluIHB1bGwgbW9kZSIpOwotICAgIGdvdG8gZmFsbGJhY2s7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIlN1Y2Nlc3MgYWN0aXZhdGluZyBwdWxsIG1vZGUiKTsKLSAgcmVzdWx0ID0gVFJVRTsKLSAgZ290byBkb25lOwotCi0gIC8qIHB1c2ggbW9kZSBmYWxsYmFjayAqLwotZmFsbGJhY2s6Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiRmFsbGluZyBiYWNrIHRvIHB1c2ggbW9kZSIpOwotICBpZiAoKHJlc3VsdCA9IGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAocGFkLCBHU1RfUEFEX01PREVfUFVTSCwgVFJVRSkpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJTdWNjZXNzIGFjdGl2YXRpbmcgcHVzaCBtb2RlIik7Ci0gIH0KLQotZG9uZToKLSAgaWYgKCFyZXN1bHQpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VzaW5rLCAiQ291bGQgbm90IGFjdGl2YXRlIHBhZCBpbiBlaXRoZXIgbW9kZSIpOwotICAgIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBUUlVFKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc2lua19wYWRfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0gIEdzdEJhc2VTaW5rICpiYXNlc2luazsKLQotICBiYXNlc2luayA9IEdTVF9CQVNFX1NJTksgKHBhcmVudCk7Ci0KLSAgaWYgKGFjdGl2ZSkgewotICAgIGlmICghYmFzZXNpbmstPmNhbl9hY3RpdmF0ZV9wdXNoKSB7Ci0gICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAgIGJhc2VzaW5rLT5wYWRfbW9kZSA9IEdTVF9QQURfTU9ERV9OT05FOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgYmFzZXNpbmstPnBhZF9tb2RlID0gR1NUX1BBRF9NT0RFX1BVU0g7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmIChHX1VOTElLRUxZIChiYXNlc2luay0+cGFkX21vZGUgIT0gR1NUX1BBRF9NT0RFX1BVU0gpKSB7Ci0gICAgICBnX3dhcm5pbmcgKCJJbnRlcm5hbCBHU3RyZWFtZXIgYWN0aXZhdGlvbiBlcnJvciEhISIpOwotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2ZsdXNoaW5nIChiYXNlc2luaywgcGFkLCBUUlVFKTsKLSAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICBiYXNlc2luay0+cGFkX21vZGUgPSBHU1RfUEFEX01PREVfTk9ORTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfbmVnb3RpYXRlX3B1bGwgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICByZXN1bHQgPSBGQUxTRTsKLQotICAvKiB0aGlzIHJldHVybnMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIG91ciBjYXBzIGFuZCB0aGUgcGVlciBjYXBzLiBJZiB0aGVyZQotICAgKiBpcyBubyBwZWVyLCBpdCByZXR1cm5zICVOVUxMIGFuZCB3ZSBjYW4ndCBvcGVyYXRlIGluIHB1bGwgbW9kZSBzbyB3ZSBjYW4KLSAgICogZmFpbCB0aGUgbmVnb3RpYXRpb24uICovCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKEdTVF9CQVNFX1NJTktfUEFEIChiYXNlc2luaykpOwotICBpZiAoY2FwcyA9PSBOVUxMIHx8IGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSkKLSAgICBnb3RvIG5vX2NhcHNfcG9zc2libGU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJhbGxvd2VkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiY2FwcyB3ZXJlIEFOWSBhZnRlciBmaXhhdGluZywgIgotICAgICAgICAiYWxsb3dpbmcgcHVsbCgpIik7Ci0gICAgLyogbmVpdGhlciBzaWRlIGhhcyB0ZW1wbGF0ZSBjYXBzIGluIHRoaXMgY2FzZSwgc28gdGhleSBhcmUgcHJlcGFyZWQgZm9yCi0gICAgICAgcHVsbCgpIHdpdGhvdXQgc2V0Y2FwcygpICovCi0gICAgcmVzdWx0ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICAvKiB0cnkgdG8gZml4YXRlICovCi0gICAgY2FwcyA9IGdzdF9iYXNlX3NpbmtfZml4YXRlIChiYXNlc2luaywgY2Fwcyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJmaXhhdGVkIHRvOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgICBpZiAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKSB7Ci0gICAgICBpZiAoIWdzdF9wYWRfc2V0X2NhcHMgKEdTVF9CQVNFX1NJTktfUEFEIChiYXNlc2luayksIGNhcHMpKQotICAgICAgICBnb3RvIGNvdWxkX25vdF9zZXRfY2FwczsKLQotICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICB9Ci0gIH0KLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotbm9fY2Fwc19wb3NzaWJsZToKLSAgewotICAgIEdTVF9JTkZPX09CSkVDVCAoYmFzZXNpbmssICJQaXBlbGluZSBjb3VsZCBub3QgYWdyZWUgb24gY2FwcyIpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZ2V0X2FsbG93ZWRfY2FwcygpIHJldHVybmVkIEVNUFRZIik7Ci0gICAgaWYgKGNhcHMpCi0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1jb3VsZF9ub3Rfc2V0X2NhcHM6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGJhc2VzaW5rLCAiQ291bGQgbm90IHNldCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiB0aGlzIHdvbid0IGdldCBjYWxsZWQgdW50aWwgd2UgaW1wbGVtZW50IGFuIGFjdGl2YXRlIGZ1bmN0aW9uICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0gIEdzdEJhc2VTaW5rICpiYXNlc2luazsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOwotCi0gIGJhc2VzaW5rID0gR1NUX0JBU0VfU0lOSyAocGFyZW50KTsKLSAgYmNsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKLQotICBpZiAoYWN0aXZlKSB7Ci0gICAgZ2ludDY0IGR1cmF0aW9uOwotCi0gICAgLyogd2UgbWFyayB3ZSBoYXZlIGEgbmV3c2VnbWVudCBoZXJlIGJlY2F1c2UgcHVsbCBiYXNlZAotICAgICAqIG1vZGUgd29ya3MganVzdCBmaW5lIHdpdGhvdXQgaGF2aW5nIGEgbmV3c2VnbWVudCBiZWZvcmUgdGhlCi0gICAgICogZmlyc3QgYnVmZmVyICovCi0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmJhc2VzaW5rLT5zZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKLSAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gVFJVRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOwotCi0gICAgLyogZ2V0IHRoZSBwZWVyIGR1cmF0aW9uIGluIGJ5dGVzICovCi0gICAgcmVzdWx0ID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChwYWQsIEdTVF9GT1JNQVRfQllURVMsICZkdXJhdGlvbik7Ci0gICAgaWYgKHJlc3VsdCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssCi0gICAgICAgICAgInNldHRpbmcgZHVyYXRpb24gaW4gYnl0ZXMgdG8gJSIgR19HSU5UNjRfRk9STUFULCBkdXJhdGlvbik7Ci0gICAgICBiYXNlc2luay0+c2VnbWVudC5kdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInVua25vd24gZHVyYXRpb24iKTsKLSAgICB9Ci0KLSAgICBpZiAoYmNsYXNzLT5hY3RpdmF0ZV9wdWxsKQotICAgICAgcmVzdWx0ID0gYmNsYXNzLT5hY3RpdmF0ZV9wdWxsIChiYXNlc2luaywgVFJVRSk7Ci0gICAgZWxzZQotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0KLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgIGdvdG8gYWN0aXZhdGVfZmFpbGVkOwotCi0gIH0gZWxzZSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGJhc2VzaW5rLT5wYWRfbW9kZSAhPSBHU1RfUEFEX01PREVfUFVMTCkpIHsKLSAgICAgIGdfd2FybmluZyAoIkludGVybmFsIEdTdHJlYW1lciBhY3RpdmF0aW9uIGVycm9yISEhIik7Ci0gICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzdWx0ID0gZ3N0X2Jhc2Vfc2lua19zZXRfZmx1c2hpbmcgKGJhc2VzaW5rLCBwYWQsIFRSVUUpOwotICAgICAgaWYgKGJjbGFzcy0+YWN0aXZhdGVfcHVsbCkKLSAgICAgICAgcmVzdWx0ICY9IGJjbGFzcy0+YWN0aXZhdGVfcHVsbCAoYmFzZXNpbmssIEZBTFNFKTsKLSAgICAgIGJhc2VzaW5rLT5wYWRfbW9kZSA9IEdTVF9QQURfTU9ERV9OT05FOwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1hY3RpdmF0ZV9mYWlsZWQ6Ci0gIHsKLSAgICAvKiByZXNldCwgYXMgc3RhcnRpbmcgdGhlIHRocmVhZCBmYWlsZWQgKi8KLSAgICBiYXNlc2luay0+cGFkX21vZGUgPSBHU1RfUEFEX01PREVfTk9ORTsKLQotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGJhc2VzaW5rLCAic3ViY2xhc3MgZmFpbGVkIHRvIGFjdGl2YXRlIGluIHB1bGwgbW9kZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVMTDoKLSAgICAgIHJlcyA9IGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1bGwgKHBhZCwgcGFyZW50LCBhY3RpdmUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIHJlcyA9IGdzdF9iYXNlX3NpbmtfcGFkX2FjdGl2YXRlX3B1c2ggKHBhZCwgcGFyZW50LCBhY3RpdmUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJ1bmtub3duIGFjdGl2YXRpb24gbW9kZSAlZCIsIG1vZGUpOwotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0vKiBzZW5kIGFuIGV2ZW50IHRvIG91ciBzaW5rcGFkIHBlZXIuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3Npbmtfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFBhZCAqcGFkOwotICBHc3RCYXNlU2luayAqYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LIChlbGVtZW50KTsKLSAgZ2Jvb2xlYW4gZm9yd2FyZCwgcmVzdWx0ID0gVFJVRTsKLSAgR3N0UGFkTW9kZSBtb2RlOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZWxlbWVudCk7Ci0gIC8qIGdldCB0aGUgcGFkIGFuZCB0aGUgc2NoZWR1bGluZyBtb2RlICovCi0gIHBhZCA9IGdzdF9vYmplY3RfcmVmIChiYXNlc2luay0+c2lua3BhZCk7Ci0gIG1vZGUgPSBiYXNlc2luay0+cGFkX21vZGU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChlbGVtZW50KTsKLQotICAvKiBvbmx5IHB1c2ggVVBTVFJFQU0gZXZlbnRzIHVwc3RyZWFtICovCi0gIGZvcndhcmQgPSBHU1RfRVZFTlRfSVNfVVBTVFJFQU0gKGV2ZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImhhbmRsaW5nIGV2ZW50ICVwICUiIEdTVF9QVFJfRk9STUFULCBldmVudCwKLSAgICAgIGV2ZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9MQVRFTkNZOgotICAgIHsKLSAgICAgIEdzdENsb2NrVGltZSBsYXRlbmN5OwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeSAoZXZlbnQsICZsYXRlbmN5KTsKLQotICAgICAgLyogc3RvcmUgdGhlIGxhdGVuY3kuIFdlIHVzZSB0aGlzIHRvIGFkanVzdCB0aGUgcnVubmluZ190aW1lIGJlZm9yZSBzeW5jaW5nCi0gICAgICAgKiBpdCB0byB0aGUgY2xvY2suICovCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICAgICAgYmFzZXNpbmstPnByaXYtPmxhdGVuY3kgPSBsYXRlbmN5OwotICAgICAgaWYgKCFiYXNlc2luay0+cHJpdi0+aGF2ZV9sYXRlbmN5KQotICAgICAgICBmb3J3YXJkID0gRkFMU0U7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImxhdGVuY3kgc2V0IHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChsYXRlbmN5KSk7Ci0KLSAgICAgIC8qIFdlIGZvcndhcmQgdGhpcyBldmVudCBzbyB0aGF0IGFsbCBlbGVtZW50cyBrbm93IGFib3V0IHRoZSBnbG9iYWwgcGlwZWxpbmUKLSAgICAgICAqIGxhdGVuY3kuIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGFuIGVsZW1lbnQgd2hlbiBpdCB3YW50cyB0byBmaWd1cmUgb3V0Ci0gICAgICAgKiB3aGVuIGEgcGFydGljdWxhciBwaWVjZSBvZiBkYXRhIHdpbGwgYmUgcmVuZGVyZWQuICovCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKLSAgICAgIC8qIGluIHB1bGwgbW9kZSB3ZSB3aWxsIGV4ZWN1dGUgdGhlIHNlZWsgKi8KLSAgICAgIGlmIChtb2RlID09IEdTVF9QQURfTU9ERV9QVUxMKQotICAgICAgICByZXN1bHQgPSBnc3RfYmFzZV9zaW5rX3BlcmZvcm1fc2VlayAoYmFzZXNpbmssIHBhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU1RFUDoKLSAgICAgIHJlc3VsdCA9IGdzdF9iYXNlX3NpbmtfcGVyZm9ybV9zdGVwIChiYXNlc2luaywgcGFkLCBldmVudCk7Ci0gICAgICBmb3J3YXJkID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoZm9yd2FyZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAic2VuZGluZyBldmVudCAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQsCi0gICAgICAgIGV2ZW50KTsKLSAgICByZXN1bHQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpOwotICB9IGVsc2UgewotICAgIC8qIG5vdCBmb3J3YXJkZWQsIHVucmVmIHRoZSBldmVudCAqLwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImhhbmRsZWQgZXZlbnQ6ICVkIiwgcmVzdWx0KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIGdpbnQ2NCAqIGN1ciwgZ2Jvb2xlYW4gKiB1cHN0cmVhbSkKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrID0gTlVMTDsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdEZvcm1hdCBvZm9ybWF0OwotICBHc3RTZWdtZW50ICpzZWdtZW50OwotICBHc3RDbG9ja1RpbWUgbm93LCBsYXRlbmN5OwotICBHc3RDbG9ja1RpbWVEaWZmIGJhc2VfdGltZTsKLSAgZ2ludDY0IHRpbWUsIGJhc2UsIGR1cmF0aW9uOwotICBnZG91YmxlIHJhdGU7Ci0gIGdpbnQ2NCBsYXN0OwotICBnYm9vbGVhbiBsYXN0X3NlZW4sIHdpdGhfY2xvY2ssIGluX3BhdXNlZDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKLSAgLyogd2UgY2FuIG9ubHkgZ2V0IHRoZSBzZWdtZW50IHdoZW4gd2UgYXJlIG5vdCBOVUxMIG9yIFJFQURZICovCi0gIGlmICghYmFzZXNpbmstPmhhdmVfbmV3c2VnbWVudCkKLSAgICBnb3RvIHdyb25nX3N0YXRlOwotCi0gIGluX3BhdXNlZCA9IEZBTFNFOwotICAvKiB3aGVuIG5vdCBpbiBQTEFZSU5HIG9yIHdoZW4gd2UncmUgYnVzeSB3aXRoIGEgc3RhdGUgY2hhbmdlLCB3ZQotICAgKiBjYW5ub3QgcmVhZCBmcm9tIHRoZSBjbG9jayBzbyB3ZSByZXBvcnQgdGltZSBiYXNlZCBvbiB0aGUKLSAgICogbGFzdCBzZWVuIHRpbWVzdGFtcC4gKi8KLSAgaWYgKEdTVF9TVEFURSAoYmFzZXNpbmspICE9IEdTVF9TVEFURV9QTEFZSU5HIHx8Ci0gICAgICBHU1RfU1RBVEVfUEVORElORyAoYmFzZXNpbmspICE9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpIHsKLSAgICBpbl9wYXVzZWQgPSBUUlVFOwotICB9Ci0KLSAgc2VnbWVudCA9ICZiYXNlc2luay0+c2VnbWVudDsKLQotICAvKiBnZXQgdGhlIGZvcm1hdCBpbiB0aGUgc2VnbWVudCAqLwotICBvZm9ybWF0ID0gc2VnbWVudC0+Zm9ybWF0OwotCi0gIC8qIHJlcG9ydCB3aXRoIGxhc3Qgc2VlbiBwb3NpdGlvbiB3aGVuIEVPUyAqLwotICBsYXN0X3NlZW4gPSBiYXNlc2luay0+ZW9zOwotCi0gIC8qIGFzc3VtZSB3ZSB3aWxsIHVzZSB0aGUgY2xvY2sgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KLSAgd2l0aF9jbG9jayA9IFRSVUU7Ci0gIGlmICghYmFzZXNpbmstPnN5bmMpCi0gICAgd2l0aF9jbG9jayA9IEZBTFNFOwotCi0gIC8qIGFuZCB3ZSBuZWVkIGEgY2xvY2sgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKChjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChiYXNlc2luaykpID09IE5VTEwpKQotICAgIHdpdGhfY2xvY2sgPSBGQUxTRTsKLSAgZWxzZQotICAgIGdzdF9vYmplY3RfcmVmIChjbG9jayk7Ci0KLSAgLyogbWFpbmxvb3AgbWlnaHQgYmUgcXVlcnlpbmcgcG9zaXRpb24gd2hlbiBnb2luZyB0byBwbGF5aW5nIGFzeW5jLAotICAgKiB3aGlsZSAoYXVkaW8pIHJlbmRlcmluZyBtaWdodCBiZSBxdWlja2x5IGFkdmFuY2luZyBzdHJlYW0gcG9zaXRpb24sCi0gICAqIHNvIHVzZSBjbG9jayBhc2FwIHJhdGhlciB0aGFuIGxhc3QgcmVwb3J0ZWQgcG9zaXRpb24gKi8KLSAgaWYgKGluX3BhdXNlZCAmJiB3aXRoX2Nsb2NrICYmIGdfYXRvbWljX2ludF9nZXQgKCZiYXNlc2luay0+cHJpdi0+dG9fcGxheWluZykpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImdvaW5nIHRvIFBMQVlJTkcsIHNvIG5vdCBQQVVTRUQiKTsKLSAgICBpbl9wYXVzZWQgPSBGQUxTRTsKLSAgfQotCi0gIC8qIGNvbGxlY3QgYWxsIGRhdGEgd2UgbmVlZCBob2xkaW5nIHRoZSBsb2NrICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc2VnbWVudC0+dGltZSkpCi0gICAgdGltZSA9IHNlZ21lbnQtPnRpbWU7Ci0gIGVsc2UKLSAgICB0aW1lID0gMDsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNlZ21lbnQtPnN0b3ApKQotICAgIGR1cmF0aW9uID0gc2VnbWVudC0+c3RvcCAtIHNlZ21lbnQtPnN0YXJ0OwotICBlbHNlCi0gICAgZHVyYXRpb24gPSAwOwotCi0gIGJhc2UgPSBzZWdtZW50LT5iYXNlOwotICByYXRlID0gc2VnbWVudC0+cmF0ZSAqIHNlZ21lbnQtPmFwcGxpZWRfcmF0ZTsKLSAgbGF0ZW5jeSA9IGJhc2VzaW5rLT5wcml2LT5sYXRlbmN5OwotCi0gIGlmIChpbl9wYXVzZWQpIHsKLSAgICAvKiBpbiBwYXVzZWQsIHVzZSBzdGFydF90aW1lICovCi0gICAgYmFzZV90aW1lID0gR1NUX0VMRU1FTlRfU1RBUlRfVElNRSAoYmFzZXNpbmspOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiaW4gcGF1c2VkLCB1c2luZyBzdGFydCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoYmFzZV90aW1lKSk7Ci0gIH0gZWxzZSBpZiAod2l0aF9jbG9jaykgewotICAgIC8qIGVsc2UgdXNlIGNsb2NrIHdoZW4gbmVlZGVkICovCi0gICAgYmFzZV90aW1lID0gR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLT5iYXNlX3RpbWU7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJ1c2luZyBjbG9jayBhbmQgYmFzZSB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoYmFzZV90aW1lKSk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogZWxzZSwgbm8gc3luYyBvciBjbG9jayAtPiBubyBiYXNlIHRpbWUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIm5vIHN5bmMgb3Igbm8gY2xvY2siKTsKLSAgICBiYXNlX3RpbWUgPSAtMTsKLSAgfQotCi0gIC8qIG5vIGJhc2VfdGltZSwgd2UgY2FuJ3QgY2FsY3VsYXRlIHJ1bm5pbmdfdGltZSwgdXNlIGxhc3Qgc2VlbSB0aW1lc3RhbXAgdG8gcmVwb3J0Ci0gICAqIHRpbWUgKi8KLSAgaWYgKGJhc2VfdGltZSA9PSAtMSkKLSAgICBsYXN0X3NlZW4gPSBUUlVFOwotCi0gIGlmIChvZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKLQotICAgIHN0YXJ0ID0gYmFzZXNpbmstPnByaXYtPmN1cnJlbnRfc3N0YXJ0OwotICAgIHN0b3AgPSBiYXNlc2luay0+cHJpdi0+Y3VycmVudF9zc3RvcDsKLQotICAgIGlmIChsYXN0X3NlZW4pIHsKLSAgICAgIC8qIHdoZW4gd2UgZG9uJ3QgdXNlIHRoZSBjbG9jaywgd2UgdXNlIHRoZSBsYXN0IHBvc2l0aW9uIGFzIGEgbG93ZXIgYm91bmQgKi8KLSAgICAgIGlmIChzdG9wID09IC0xIHx8IHNlZ21lbnQtPnJhdGUgPiAwLjApCi0gICAgICAgIGxhc3QgPSBzdGFydDsKLSAgICAgIGVsc2UKLSAgICAgICAgbGFzdCA9IHN0b3A7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiaW4gUEFVU0VEIHVzaW5nIGxhc3QgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGxhc3QpKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogaW4gcGxheWluZyBhbmQgcGF1c2VkLCB1c2UgbGFzdCBzdG9wIHRpbWUgYXMgdXBwZXIgYm91bmQgKi8KLSAgICAgIGlmIChzdGFydCA9PSAtMSB8fCBzZWdtZW50LT5yYXRlID4gMC4wKQotICAgICAgICBsYXN0ID0gc3RvcDsKLSAgICAgIGVsc2UKLSAgICAgICAgbGFzdCA9IHN0YXJ0OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImluIFBMQVlJTkcgdXNpbmcgbGFzdCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGFzdCkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBjb252ZXJ0IHBvc2l0aW9uIHRvIHN0cmVhbSB0aW1lICovCi0gICAgbGFzdCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lIChzZWdtZW50LCBvZm9ybWF0LCBzZWdtZW50LT5wb3NpdGlvbik7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImluIHVzaW5nIGxhc3QgJSIgR19HSU5UNjRfRk9STUFULCBsYXN0KTsKLSAgfQotCi0gIC8qIG5lZWQgdG8gcmVsZWFzZSB0aGUgb2JqZWN0IGxvY2sgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHRpbWUsCi0gICAqIGEgY2xvY2sgbWlnaHQgdGFrZSB0aGUgTE9DSyBvZiB0aGUgcHJvdmlkZXIsIHdoaWNoIGNvdWxkIGJlCi0gICAqIGEgYmFzZXNpbmsgc3ViY2xhc3MuICovCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7Ci0KLSAgaWYgKGxhc3Rfc2VlbikgewotICAgIC8qIGluIEVPUyBvciB3aGVuIG5vIHZhbGlkIHN0cmVhbV90aW1lLCByZXBvcnQgdGhlIHZhbHVlIG9mIGxhc3Qgc2VlbgotICAgICAqIHRpbWVzdGFtcCAqLwotICAgIGlmIChsYXN0ID09IC0xKSB7Ci0gICAgICAvKiBubyB0aW1lc3RhbXAsIHdlIG5lZWQgdG8gYXNrIHVwc3RyZWFtICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIm5vIGxhc3Qgc2VlbiB0aW1lc3RhbXAsIGFza2luZyB1cHN0cmVhbSIpOwotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAqdXBzdHJlYW0gPSBUUlVFOwotICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInVzaW5nIGxhc3Qgc2VlbiB0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChsYXN0KSk7Ci0gICAgKmN1ciA9IGxhc3Q7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKG9mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAvKiBjb252ZXJ0IGJhc2UsIHRpbWUgYW5kIGR1cmF0aW9uIHRvIHRpbWUgKi8KLSAgICAgIGlmICghZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChiYXNlc2luay0+c2lua3BhZCwgb2Zvcm1hdCwgYmFzZSwKLSAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAmYmFzZSkpCi0gICAgICAgIGdvdG8gY29udmVydF9mYWlsZWQ7Ci0gICAgICBpZiAoIWdzdF9wYWRfcXVlcnlfY29udmVydCAoYmFzZXNpbmstPnNpbmtwYWQsIG9mb3JtYXQsIGR1cmF0aW9uLAotICAgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbikpCi0gICAgICAgIGdvdG8gY29udmVydF9mYWlsZWQ7Ci0gICAgICBpZiAoIWdzdF9wYWRfcXVlcnlfY29udmVydCAoYmFzZXNpbmstPnNpbmtwYWQsIG9mb3JtYXQsIHRpbWUsCi0gICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgJnRpbWUpKQotICAgICAgICBnb3RvIGNvbnZlcnRfZmFpbGVkOwotICAgICAgaWYgKCFnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKGJhc2VzaW5rLT5zaW5rcGFkLCBvZm9ybWF0LCBsYXN0LAotICAgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsICZsYXN0KSkKLSAgICAgICAgZ290byBjb252ZXJ0X2ZhaWxlZDsKLQotICAgICAgLyogYXNzdW1lIHRpbWUgZm9ybWF0IGZyb20gbm93IG9uICovCi0gICAgICBvZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICAgIH0KLQotICAgIGlmICghaW5fcGF1c2VkICYmIHdpdGhfY2xvY2spIHsKLSAgICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgIH0gZWxzZSB7Ci0gICAgICBub3cgPSBiYXNlX3RpbWU7Ci0gICAgICBiYXNlX3RpbWUgPSAwOwotICAgIH0KLQotICAgIC8qIHN1YnRyYWN0IGJhc2UgdGltZSBhbmQgYmFzZSB0aW1lIGZyb20gdGhlIGNsb2NrIHRpbWUuCi0gICAgICogTWFrZSBzdXJlIHdlIGRvbid0IGdvIG5lZ2F0aXZlLiBUaGlzIGlzIHRoZSBjdXJyZW50IHRpbWUgaW4KLSAgICAgKiB0aGUgc2VnbWVudCB3aGljaCB3ZSBuZWVkIHRvIHNjYWxlIHdpdGggdGhlIGNvbWJpbmVkCi0gICAgICogcmF0ZSBhbmQgYXBwbGllZCByYXRlLiAqLwotICAgIGJhc2VfdGltZSArPSBiYXNlOwotICAgIGJhc2VfdGltZSArPSBsYXRlbmN5OwotICAgIGlmIChHU1RfQ0xPQ0tfRElGRiAoYmFzZV90aW1lLCBub3cpIDwgMCkKLSAgICAgIGJhc2VfdGltZSA9IG5vdzsKLQotICAgIC8qIGZvciBuZWdhdGl2ZSByYXRlcyB3ZSBuZWVkIHRvIGNvdW50IGJhY2sgZnJvbSB0aGUgc2VnbWVudAotICAgICAqIGR1cmF0aW9uLiAqLwotICAgIGlmIChyYXRlIDwgMC4wKQotICAgICAgdGltZSArPSBkdXJhdGlvbjsKLQotICAgICpjdXIgPSB0aW1lICsgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAobm93IC0gYmFzZV90aW1lKSAqIHJhdGU7Ci0KLSAgICAvKiBuZXZlciByZXBvcnQgbW9yZSB0aGFuIGxhc3Qgc2VlbiBwb3NpdGlvbiAqLwotICAgIGlmIChsYXN0ICE9IC0xKSB7Ci0gICAgICBpZiAocmF0ZSA+IDAuMCkKLSAgICAgICAgKmN1ciA9IE1JTiAobGFzdCwgKmN1cik7Ci0gICAgICBlbHNlCi0gICAgICAgICpjdXIgPSBNQVggKGxhc3QsICpjdXIpOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLAotICAgICAgICAibm93ICUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gYmFzZV90aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gYmFzZSAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiArIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIgIGxhc3QgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChub3cpLCBHU1RfVElNRV9BUkdTIChiYXNlX3RpbWUpLCBHU1RfVElNRV9BUkdTIChiYXNlKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAodGltZSksIEdTVF9USU1FX0FSR1MgKGxhc3QpKTsKLSAgfQotCi0gIGlmIChvZm9ybWF0ICE9IGZvcm1hdCkgewotICAgIC8qIGNvbnZlcnQgdG8gZmluYWwgZm9ybWF0ICovCi0gICAgaWYgKCFnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKGJhc2VzaW5rLT5zaW5rcGFkLCBvZm9ybWF0LCAqY3VyLCBmb3JtYXQsIGN1cikpCi0gICAgICBnb3RvIGNvbnZlcnRfZmFpbGVkOwotICB9Ci0KLSAgcmVzID0gVFJVRTsKLQotZG9uZToKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJyZXM6ICVkLCBQT1NJVElPTjogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgcmVzLCBHU1RfVElNRV9BUkdTICgqY3VyKSk7Ci0KLSAgaWYgKGNsb2NrKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIHNwZWNpYWwgY2FzZXMgKi8KLXdyb25nX3N0YXRlOgotICB7Ci0gICAgLyogaW4gTlVMTCBvciBSRUFEWSB3ZSBhbHdheXMgcmV0dXJuIEZBTFNFIGFuZCAtMSAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicG9zaXRpb24gaW4gd3Jvbmcgc3RhdGUsIHJldHVybiAtMSIpOwotICAgIHJlcyA9IEZBTFNFOwotICAgICpjdXIgPSAtMTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOwotICAgIGdvdG8gZG9uZTsKLSAgfQotY29udmVydF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImNvbnZlcnQgZmFpbGVkLCB0cnkgdXBzdHJlYW0iKTsKLSAgICAqdXBzdHJlYW0gPSBUUlVFOwotICAgIHJlcyA9IEZBTFNFOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NpbmtfZ2V0X2R1cmF0aW9uIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RGb3JtYXQgZm9ybWF0LAotICAgIGdpbnQ2NCAqIGR1ciwgZ2Jvb2xlYW4gKiB1cHN0cmVhbSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgaWYgKGJhc2VzaW5rLT5wYWRfbW9kZSA9PSBHU1RfUEFEX01PREVfUFVMTCkgewotICAgIGdpbnQ2NCB1ZHVyYXRpb247Ci0KLSAgICAvKiBnZXQgdGhlIGR1cmF0aW9uIGluIGJ5dGVzLCBpbiBwdWxsIG1vZGUgdGhhdCdzIGFsbCB3ZSBhcmUgc3VyZSB0bwotICAgICAqIGtub3cuIFdlIGhhdmUgdG8gZXhwbGljaXRseSBnZXQgdGhpcyB2YWx1ZSBmcm9tIHVwc3RyZWFtIGluc3RlYWQgb2YKLSAgICAgKiB1c2luZyBvdXIgY2FjaGVkIHZhbHVlIGJlY2F1c2UgaXQgbWlnaHQgY2hhbmdlLiBEdXJhdGlvbiBjYWNoaW5nCi0gICAgICogc2hvdWxkIGJlIGRvbmUgYXQgYSBoaWdoZXIgbGV2ZWwuICovCi0gICAgcmVzID0KLSAgICAgICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChiYXNlc2luay0+c2lua3BhZCwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgICAgJnVkdXJhdGlvbik7Ci0gICAgaWYgKHJlcykgewotICAgICAgYmFzZXNpbmstPnNlZ21lbnQuZHVyYXRpb24gPSB1ZHVyYXRpb247Ci0gICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICAgICAgLyogY29udmVydCB0byB0aGUgcmVxdWVzdGVkIGZvcm1hdCAqLwotICAgICAgICByZXMgPQotICAgICAgICAgICAgZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChiYXNlc2luay0+c2lua3BhZCwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgICAgICAgIHVkdXJhdGlvbiwgZm9ybWF0LCBkdXIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgKmR1ciA9IHVkdXJhdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0gICAgKnVwc3RyZWFtID0gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgKnVwc3RyZWFtID0gVFJVRTsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZGVmYXVsdF9lbGVtZW50X3F1ZXJ5IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgR3N0QmFzZVNpbmsgKmJhc2VzaW5rID0gR1NUX0JBU0VfU0lOSyAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfUE9TSVRJT046Ci0gICAgewotICAgICAgZ2ludDY0IGN1ciA9IDA7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgZ2Jvb2xlYW4gdXBzdHJlYW0gPSBGQUxTRTsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAicG9zaXRpb24gcXVlcnkgaW4gZm9ybWF0ICVzIiwKLSAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpKTsKLQotICAgICAgLyogZmlyc3QgdHJ5IHRvIGdldCB0aGUgcG9zaXRpb24gYmFzZWQgb24gdGhlIGNsb2NrICovCi0gICAgICBpZiAoKHJlcyA9Ci0gICAgICAgICAgICAgIGdzdF9iYXNlX3NpbmtfZ2V0X3Bvc2l0aW9uIChiYXNlc2luaywgZm9ybWF0LCAmY3VyLCAmdXBzdHJlYW0pKSkgewotICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm9ybWF0LCBjdXIpOwotICAgICAgfSBlbHNlIGlmICh1cHN0cmVhbSkgewotICAgICAgICAvKiBmYWxsYmFjayB0byBwZWVyIHF1ZXJ5ICovCi0gICAgICAgIHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAoYmFzZXNpbmstPnNpbmtwYWQsIHF1ZXJ5KTsKLSAgICAgIH0KLSAgICAgIGlmICghcmVzKSB7Ci0gICAgICAgIC8qIHdlIGNhbiBoYW5kbGUgYSBmZXcgdGhpbmdzIGlmIHVwc3RyZWFtIGZhaWxlZCAqLwotICAgICAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfUEVSQ0VOVCkgewotICAgICAgICAgIGdpbnQ2NCBkdXIgPSAwOwotCi0gICAgICAgICAgcmVzID0gZ3N0X2Jhc2Vfc2lua19nZXRfcG9zaXRpb24gKGJhc2VzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZjdXIsCi0gICAgICAgICAgICAgICZ1cHN0cmVhbSk7Ci0gICAgICAgICAgaWYgKCFyZXMgJiYgdXBzdHJlYW0pIHsKLSAgICAgICAgICAgIHJlcyA9Ci0gICAgICAgICAgICAgICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X3Bvc2l0aW9uIChiYXNlc2luay0+c2lua3BhZCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgICAgICZjdXIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocmVzKSB7Ci0gICAgICAgICAgICByZXMgPSBnc3RfYmFzZV9zaW5rX2dldF9kdXJhdGlvbiAoYmFzZXNpbmssIEdTVF9GT1JNQVRfVElNRSwgJmR1ciwKLSAgICAgICAgICAgICAgICAmdXBzdHJlYW0pOwotICAgICAgICAgICAgaWYgKCFyZXMgJiYgdXBzdHJlYW0pIHsKLSAgICAgICAgICAgICAgcmVzID0KLSAgICAgICAgICAgICAgICAgIGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoYmFzZXNpbmstPnNpbmtwYWQsCi0gICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsICZkdXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAocmVzKSB7Ci0gICAgICAgICAgICBnaW50NjQgcG9zOwotCi0gICAgICAgICAgICBwb3MgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKDEwMCAqIEdTVF9GT1JNQVRfUEVSQ0VOVF9TQ0FMRSwgY3VyLAotICAgICAgICAgICAgICAgIGR1cik7Ci0gICAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9QRVJDRU5ULCBwb3MpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgotICAgIHsKLSAgICAgIGdpbnQ2NCBkdXIgPSAwOwotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgIGdib29sZWFuIHVwc3RyZWFtID0gRkFMU0U7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsCi0gICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSk7Ci0KLSAgICAgIGlmICgocmVzID0KLSAgICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfZHVyYXRpb24gKGJhc2VzaW5rLCBmb3JtYXQsICZkdXIsICZ1cHN0cmVhbSkpKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBmb3JtYXQsIGR1cik7Ci0gICAgICB9IGVsc2UgaWYgKHVwc3RyZWFtKSB7Ci0gICAgICAgIC8qIGZhbGxiYWNrIHRvIHBlZXIgcXVlcnkgKi8KLSAgICAgICAgcmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChiYXNlc2luay0+c2lua3BhZCwgcXVlcnkpOwotICAgICAgfQotICAgICAgaWYgKCFyZXMpIHsKLSAgICAgICAgLyogd2UgY2FuIGhhbmRsZSBhIGZldyB0aGluZ3MgaWYgdXBzdHJlYW0gZmFpbGVkICovCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9QRVJDRU5UKSB7Ci0gICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfUEVSQ0VOVCwKLSAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCk7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0xBVEVOQ1k6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gbGl2ZSwgdXNfbGl2ZTsKLSAgICAgIEdzdENsb2NrVGltZSBtaW4sIG1heDsKLQotICAgICAgaWYgKChyZXMgPSBnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3kgKGJhc2VzaW5rLCAmbGl2ZSwgJnVzX2xpdmUsICZtaW4sCi0gICAgICAgICAgICAgICAgICAmbWF4KSkpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5IChxdWVyeSwgbGl2ZSwgbWluLCBtYXgpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0pJVFRFUjoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FVRVJZX1JBVEU6Ci0gICAgICAvKiBnc3RfcXVlcnlfc2V0X3JhdGUgKHF1ZXJ5LCBiYXNlc2luay0+c2VnbWVudF9yYXRlKTsgKi8KLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVUVSWV9TRUdNRU5UOgotICAgIHsKLSAgICAgIGlmIChiYXNlc2luay0+cGFkX21vZGUgPT0gR1NUX1BBRF9NT0RFX1BVTEwpIHsKLSAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotCi0gICAgICAgIGZvcm1hdCA9IGJhc2VzaW5rLT5zZWdtZW50LmZvcm1hdDsKLQotICAgICAgICBzdGFydCA9Ci0gICAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmJhc2VzaW5rLT5zZWdtZW50LCBmb3JtYXQsCi0gICAgICAgICAgICBiYXNlc2luay0+c2VnbWVudC5zdGFydCk7Ci0gICAgICAgIGlmICgoc3RvcCA9IGJhc2VzaW5rLT5zZWdtZW50LnN0b3ApID09IC0xKQotICAgICAgICAgIHN0b3AgPSBiYXNlc2luay0+c2VnbWVudC5kdXJhdGlvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0b3AgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmJhc2VzaW5rLT5zZWdtZW50LCBmb3JtYXQsIHN0b3ApOwotCi0gICAgICAgIGdzdF9xdWVyeV9zZXRfc2VnbWVudCAocXVlcnksIGJhc2VzaW5rLT5zZWdtZW50LnJhdGUsIGZvcm1hdCwgc3RhcnQsCi0gICAgICAgICAgICBzdG9wKTsKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAoYmFzZXNpbmstPnNpbmtwYWQsIHF1ZXJ5KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOgotICAgIGNhc2UgR1NUX1FVRVJZX0NPTlZFUlQ6Ci0gICAgY2FzZSBHU1RfUVVFUllfRk9STUFUUzoKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChiYXNlc2luay0+c2lua3BhZCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJxdWVyeSAlcyByZXR1cm5zICVkIiwKLSAgICAgIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSwgcmVzKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NpbmtfZHJhaW4gKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCi17Ci0gIEdzdEJ1ZmZlciAqb2xkOwotICBHc3RCdWZmZXJMaXN0ICpvbGRfbGlzdDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKLSAgaWYgKChvbGQgPSBiYXNlc2luay0+cHJpdi0+bGFzdF9idWZmZXIpKQotICAgIGJhc2VzaW5rLT5wcml2LT5sYXN0X2J1ZmZlciA9IGdzdF9idWZmZXJfY29weV9kZWVwIChvbGQpOwotCi0gIGlmICgob2xkX2xpc3QgPSBiYXNlc2luay0+cHJpdi0+bGFzdF9idWZmZXJfbGlzdCkpCi0gICAgYmFzZXNpbmstPnByaXYtPmxhc3RfYnVmZmVyX2xpc3QgPSBnc3RfYnVmZmVyX2xpc3RfY29weV9kZWVwIChvbGRfbGlzdCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc2luayk7Ci0KLSAgaWYgKG9sZCkKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvbGQpOwotICBpZiAob2xkX2xpc3QpCi0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAob2xkX2xpc3QpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX2RlZmF1bHRfcXVlcnkgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOwotCi0gIGJjbGFzcyA9IEdTVF9CQVNFX1NJTktfR0VUX0NMQVNTIChiYXNlc2luayk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQUxMT0NBVElPTjoKLSAgICB7Ci0gICAgICBnc3RfYmFzZV9zaW5rX2RyYWluIChiYXNlc2luayk7Ci0gICAgICBpZiAoYmNsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24pCi0gICAgICAgIHJlcyA9IGJjbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uIChiYXNlc2luaywgcXVlcnkpOwotICAgICAgZWxzZQotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHMsICpmaWx0ZXI7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICBjYXBzID0gZ3N0X2Jhc2Vfc2lua19xdWVyeV9jYXBzIChiYXNlc2luaywgYmFzZXNpbmstPnNpbmtwYWQsIGZpbHRlcik7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0FDQ0VQVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHMsICphbGxvd2VkOwotICAgICAgZ2Jvb2xlYW4gc3Vic2V0OwotCi0gICAgICAvKiBzbGlnaHRseSBmYXN0ZXIgdGhhbiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLwotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzIChxdWVyeSwgJmNhcHMpOwotICAgICAgYWxsb3dlZCA9IGdzdF9iYXNlX3NpbmtfcXVlcnlfY2FwcyAoYmFzZXNpbmssIGJhc2VzaW5rLT5zaW5rcGFkLCBOVUxMKTsKLSAgICAgIHN1YnNldCA9IGdzdF9jYXBzX2lzX3N1YnNldCAoY2FwcywgYWxsb3dlZCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIkNoZWNraW5nIGlmIHJlcXVlc3RlZCBjYXBzICUiIEdTVF9QVFJfRk9STUFUCi0gICAgICAgICAgIiBhcmUgYSBzdWJzZXQgb2YgcGFkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiByZXN1bHQgJWQiLCBjYXBzLAotICAgICAgICAgIGFsbG93ZWQsIHN1YnNldCk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoYWxsb3dlZCk7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksIHN1YnNldCk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0RSQUlOOgotICAgIHsKLSAgICAgIGdzdF9iYXNlX3NpbmtfZHJhaW4gKGJhc2VzaW5rKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfUE9TSVRJT046Ci0gICAgewotICAgICAgcmVzID0gZGVmYXVsdF9lbGVtZW50X3F1ZXJ5IChHU1RfRUxFTUVOVCAoYmFzZXNpbmspLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9Ci0gICAgICAgICAgZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChiYXNlc2luay0+c2lua3BhZCwgR1NUX09CSkVDVF9DQVNUIChiYXNlc2luayksCi0gICAgICAgICAgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zaW5rX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RCYXNlU2luayAqYmFzZXNpbms7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmJjbGFzczsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGJhc2VzaW5rID0gR1NUX0JBU0VfU0lOS19DQVNUIChwYXJlbnQpOwotICBiY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0dFVF9DTEFTUyAoYmFzZXNpbmspOwotCi0gIGlmIChiY2xhc3MtPnF1ZXJ5KQotICAgIHJlcyA9IGJjbGFzcy0+cXVlcnkgKGJhc2VzaW5rLCBxdWVyeSk7Ci0gIGVsc2UKLSAgICByZXMgPSBGQUxTRTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9iYXNlX3NpbmtfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICBHc3RCYXNlU2luayAqYmFzZXNpbmsgPSBHU1RfQkFTRV9TSU5LIChlbGVtZW50KTsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqYmNsYXNzOwotICBHc3RCYXNlU2lua1ByaXZhdGUgKnByaXY7Ci0KLSAgcHJpdiA9IGJhc2VzaW5rLT5wcml2OwotCi0gIGJjbGFzcyA9IEdTVF9CQVNFX1NJTktfR0VUX0NMQVNTIChiYXNlc2luayk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBpZiAoYmNsYXNzLT5zdGFydCkKLSAgICAgICAgaWYgKCFiY2xhc3MtPnN0YXJ0IChiYXNlc2luaykpCi0gICAgICAgICAgZ290byBzdGFydF9mYWlsZWQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgLyogbmVlZCB0byBjb21wbGV0ZSBwcmVyb2xsIGJlZm9yZSB0aGlzIHN0YXRlIGNoYW5nZSBjb21wbGV0ZXMsIHRoZXJlCi0gICAgICAgKiBpcyBubyBkYXRhIGZsb3cgaW4gUkVBRFkgc28gd2UgY2FuIHNhZmVseSBhc3N1bWUgd2UgbmVlZCB0byBwcmVyb2xsLiAqLwotICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sgKGJhc2VzaW5rKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiUkVBRFkgdG8gUEFVU0VEIik7Ci0gICAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gRkFMU0U7Ci0gICAgICBnc3Rfc2VnbWVudF9pbml0ICgmYmFzZXNpbmstPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIGJhc2VzaW5rLT5vZmZzZXQgPSAwOwotICAgICAgYmFzZXNpbmstPmhhdmVfcHJlcm9sbCA9IEZBTFNFOwotICAgICAgcHJpdi0+c3RlcF91bmxvY2sgPSBGQUxTRTsKLSAgICAgIGJhc2VzaW5rLT5uZWVkX3ByZXJvbGwgPSBUUlVFOwotICAgICAgYmFzZXNpbmstPnBsYXlpbmdfYXN5bmMgPSBUUlVFOwotICAgICAgcHJpdi0+Y3VycmVudF9zc3RhcnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgcHJpdi0+Y3VycmVudF9zc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBwcml2LT5lb3NfcnRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgcHJpdi0+bGF0ZW5jeSA9IDA7Ci0gICAgICBiYXNlc2luay0+ZW9zID0gRkFMU0U7Ci0gICAgICBwcml2LT5yZWNlaXZlZF9lb3MgPSBGQUxTRTsKLSAgICAgIGdzdF9iYXNlX3NpbmtfcmVzZXRfcW9zIChiYXNlc2luayk7Ci0gICAgICBwcml2LT5yY19uZXh0ID0gLTE7Ci0gICAgICBwcml2LT5jb21taXRlZCA9IEZBTFNFOwotICAgICAgcHJpdi0+Y2FsbF9wcmVyb2xsID0gVFJVRTsKLSAgICAgIHByaXYtPmN1cnJlbnRfc3RlcC52YWxpZCA9IEZBTFNFOwotICAgICAgcHJpdi0+cGVuZGluZ19zdGVwLnZhbGlkID0gRkFMU0U7Ci0gICAgICBpZiAocHJpdi0+YXN5bmNfZW5hYmxlZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgImRvaW5nIGFzeW5jIHN0YXRlIGNoYW5nZSIpOwotICAgICAgICAvKiB3aGVuIGFzeW5jIGVuYWJsZWQsIHBvc3QgYXN5bmMtc3RhcnQgbWVzc2FnZSBhbmQgcmV0dXJuIEFTWU5DIGZyb20KLSAgICAgICAgICogdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiAqLwotICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFydCAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luaykpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaXYtPmhhdmVfbGF0ZW5jeSA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyAoYmFzZXNpbmspOwotICAgICAgZ19hdG9taWNfaW50X3NldCAoJmJhc2VzaW5rLT5wcml2LT50b19wbGF5aW5nLCBUUlVFKTsKLSAgICAgIGlmICghZ3N0X2Jhc2Vfc2lua19uZWVkc19wcmVyb2xsIChiYXNlc2luaykpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJQQVVTRUQgdG8gUExBWUlORywgZG9uJ3QgbmVlZCBwcmVyb2xsIik7Ci0gICAgICAgIC8qIG5vIHByZXJvbGwgbmVlZGVkIGFueW1vcmUgbm93LiAqLwotICAgICAgICBiYXNlc2luay0+cGxheWluZ19hc3luYyA9IEZBTFNFOwotICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gRkFMU0U7Ci0gICAgICAgIGlmIChiYXNlc2luay0+ZW9zKSB7Ci0gICAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICAgICAgICAgIC8qIG5lZWQgdG8gcG9zdCBFT1MgbWVzc2FnZSBoZXJlICovCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJOb3cgcG9zdGluZyBFT1MiKTsKLSAgICAgICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2VvcyAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luaykpOwotICAgICAgICAgIGdzdF9tZXNzYWdlX3NldF9zZXFudW0gKG1lc3NhZ2UsIGJhc2VzaW5rLT5wcml2LT5zZXFudW0pOwotICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLCBtZXNzYWdlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInNpZ25hbCBwcmVyb2xsIik7Ci0gICAgICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTCAoYmFzZXNpbmspOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIlBBVVNFRCB0byBQTEFZSU5HLCB3ZSBhcmUgbm90IHByZXJvbGxlZCIpOwotICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gVFJVRTsKLSAgICAgICAgYmFzZXNpbmstPnBsYXlpbmdfYXN5bmMgPSBUUlVFOwotICAgICAgICBwcml2LT5jYWxsX3ByZXJvbGwgPSBUUlVFOwotICAgICAgICBwcml2LT5jb21taXRlZCA9IEZBTFNFOwotICAgICAgICBpZiAocHJpdi0+YXN5bmNfZW5hYmxlZCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZG9pbmcgYXN5bmMgc3RhdGUgY2hhbmdlIik7Ci0gICAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzsKLSAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKGJhc2VzaW5rKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfVU5MT0NLIChiYXNlc2luayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICB7Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gYnJldDsKLQotICAgIGJyZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoYnJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpKQotICAgICAgZ290byBhY3RpdmF0ZV9mYWlsZWQ7Ci0gIH0KLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICAvKiBjb21wbGV0ZWQgdHJhbnNpdGlvbiwgc28gbmVlZCBub3QgYmUgbWFya2VkIGFueSBsb25nZXIKLSAgICAgICAqIEFuZCBpdCBzaG91bGQgYmUgdW5tYXJrZWQsIHNpbmNlIGUuZy4gbG9zaW5nIG91ciBwb3NpdGlvbiB1cG9uIGZsdXNoCi0gICAgICAgKiBkb2VzIG5vdCByZWFsbHkgY2hhbmdlIHN0YXRlIHRvIFBBVVNFRCAuLi4gKi8KLSAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZiYXNlc2luay0+cHJpdi0+dG9fcGxheWluZywgRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgZ19hdG9taWNfaW50X3NldCAoJmJhc2VzaW5rLT5wcml2LT50b19wbGF5aW5nLCBGQUxTRSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgIlBMQVlJTkcgdG8gUEFVU0VEIik7Ci0gICAgICAvKiBGSVhNRSwgbWFrZSBzdXJlIHdlIGNhbm5vdCBlbnRlciBfcmVuZGVyIGZpcnN0ICovCi0KLSAgICAgIC8qIHdlIG5lZWQgdG8gY2FsbCA6OnVubG9jayBiZWZvcmUgbG9ja2luZyBQUkVST0xMX0xPQ0sKLSAgICAgICAqIHNpbmNlIHdlIGxvY2sgaXQgYmVmb3JlIGdvaW5nIGludG8gOjpyZW5kZXIgKi8KLSAgICAgIGlmIChiY2xhc3MtPnVubG9jaykKLSAgICAgICAgYmNsYXNzLT51bmxvY2sgKGJhc2VzaW5rKTsKLQotICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sgKGJhc2VzaW5rKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZ290IHByZXJvbGwgbG9jayIpOwotICAgICAgLyogbm93IHRoYXQgd2UgaGF2ZSB0aGUgUFJFUk9MTCBsb2NrLCBjbGVhciBvdXIgdW5sb2NrIHJlcXVlc3QgKi8KLSAgICAgIGlmIChiY2xhc3MtPnVubG9ja19zdG9wKQotICAgICAgICBiY2xhc3MtPnVubG9ja19zdG9wIChiYXNlc2luayk7Ci0KLSAgICAgIGlmIChiYXNlc2luay0+Y2xvY2tfaWQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJ1bnNjaGVkdWxlIGNsb2NrIik7Ci0gICAgICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChiYXNlc2luay0+Y2xvY2tfaWQpOwotICAgICAgfQotCi0gICAgICAvKiBpZiB3ZSBkb24ndCBoYXZlIGEgcHJlcm9sbCBidWZmZXIgd2UgbmVlZCB0byB3YWl0IGZvciBhIHByZXJvbGwgYW5kCi0gICAgICAgKiByZXR1cm4gQVNZTkMuICovCi0gICAgICBpZiAoIWdzdF9iYXNlX3NpbmtfbmVlZHNfcHJlcm9sbCAoYmFzZXNpbmspKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiUExBWUlORyB0byBQQVVTRUQsIHdlIGFyZSBwcmVyb2xsZWQiKTsKLSAgICAgICAgYmFzZXNpbmstPnBsYXlpbmdfYXN5bmMgPSBGQUxTRTsKLSAgICAgICAgYmFzZXNpbmstPm5lZWRfcHJlcm9sbCA9IEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdTVF9TVEFURV9UQVJHRVQgKEdTVF9FTEVNRU5UIChiYXNlc2luaykpIDw9IEdTVF9TVEFURV9SRUFEWSkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZWxlbWVudCBpcyA8PSBSRUFEWSIpOwotICAgICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywKLSAgICAgICAgICAgICAgIlBMQVlJTkcgdG8gUEFVU0VELCB3ZSBhcmUgbm90IHByZXJvbGxlZCIpOwotICAgICAgICAgIGJhc2VzaW5rLT5wbGF5aW5nX2FzeW5jID0gVFJVRTsKLSAgICAgICAgICBiYXNlc2luay0+bmVlZF9wcmVyb2xsID0gVFJVRTsKLSAgICAgICAgICBwcml2LT5jb21taXRlZCA9IEZBTFNFOwotICAgICAgICAgIHByaXYtPmNhbGxfcHJlcm9sbCA9IFRSVUU7Ci0gICAgICAgICAgaWYgKHByaXYtPmFzeW5jX2VuYWJsZWQpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZG9pbmcgYXN5bmMgc3RhdGUgY2hhbmdlIik7Ci0gICAgICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksCi0gICAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKGJhc2VzaW5rKSkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJyZW5kZXJlZDogJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAgICIsIGRyb3BwZWQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnJlbmRlcmVkLCBwcml2LT5kcm9wcGVkKTsKLQotICAgICAgZ3N0X2Jhc2Vfc2lua19yZXNldF9xb3MgKGJhc2VzaW5rKTsKLSAgICAgIEdTVF9CQVNFX1NJTktfUFJFUk9MTF9VTkxPQ0sgKGJhc2VzaW5rKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBHU1RfQkFTRV9TSU5LX1BSRVJPTExfTE9DSyAoYmFzZXNpbmspOwotICAgICAgLyogc3RhcnQgYnkgcmVzZXR0aW5nIG91ciBwb3NpdGlvbiBzdGF0ZSB3aXRoIHRoZSBvYmplY3QgbG9jayBzbyB0aGF0IHRoZQotICAgICAgICogcG9zaXRpb24gcXVlcnkgZ2V0cyB0aGUgcmlnaHQgaWRlYS4gV2UgZG8gdGhpcyBiZWZvcmUgd2UgcG9zdCB0aGUKLSAgICAgICAqIG1lc3NhZ2VzIHNvIHRoYXQgdGhlIG1lc3NhZ2UgaGFuZGxlcnMgcGljayB0aGlzIHVwLiAqLwotICAgICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc2luayk7Ci0gICAgICBiYXNlc2luay0+aGF2ZV9uZXdzZWdtZW50ID0gRkFMU0U7Ci0gICAgICBwcml2LT5jdXJyZW50X3NzdGFydCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBwcml2LT5jdXJyZW50X3NzdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIHByaXYtPmhhdmVfbGF0ZW5jeSA9IEZBTFNFOwotICAgICAgaWYgKHByaXYtPmNhY2hlZF9jbG9ja19pZCkgewotICAgICAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHByaXYtPmNhY2hlZF9jbG9ja19pZCk7Ci0gICAgICAgIHByaXYtPmNhY2hlZF9jbG9ja19pZCA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBnc3RfY2Fwc19yZXBsYWNlICgmYmFzZXNpbmstPnByaXYtPmNhcHMsIE5VTEwpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKLQotICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXIgKGJhc2VzaW5rLCBOVUxMKTsKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2xpc3QgKGJhc2VzaW5rLCBOVUxMKTsKLSAgICAgIHByaXYtPmNhbGxfcHJlcm9sbCA9IEZBTFNFOwotCi0gICAgICBpZiAoIXByaXYtPmNvbW1pdGVkKSB7Ci0gICAgICAgIGlmIChwcml2LT5hc3luY19lbmFibGVkKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJQQVVTRUQgdG8gUkVBRFksIHBvc3RpbmcgYXN5bmMtZG9uZSIpOwotCi0gICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlc2luayksCi0gICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zdGF0ZV9jaGFuZ2VkIChHU1RfT0JKRUNUX0NBU1QgKGJhc2VzaW5rKSwKLSAgICAgICAgICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HLCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUkVBRFkpKTsKLQotICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLAotICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChiYXNlc2luayksCi0gICAgICAgICAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpdi0+Y29tbWl0ZWQgPSBUUlVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNpbmssICJQQVVTRUQgdG8gUkVBRFksIGRvbid0IG5lZWRfcHJlcm9sbCIpOwotICAgICAgfQotICAgICAgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyAoYmFzZXNpbmspOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBpZiAoYmNsYXNzLT5zdG9wKSB7Ci0gICAgICAgIGlmICghYmNsYXNzLT5zdG9wIChiYXNlc2luaykpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VzaW5rLCAiZmFpbGVkIHRvIHN0b3AiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfbGFzdF9idWZmZXIgKGJhc2VzaW5rLCBOVUxMKTsKLSAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3RfYnVmZmVyX2xpc3QgKGJhc2VzaW5rLCBOVUxMKTsKLSAgICAgIHByaXYtPmNhbGxfcHJlcm9sbCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXN0YXJ0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzaW5rLCAiZmFpbGVkIHRvIHN0YXJ0Iik7Ci0gICAgLyogc3ViY2xhc3MgaXMgc3VwcG9zZWQgdG8gcG9zdCBhIG1lc3NhZ2UgYnV0IHdlIHBvc3Qgb25lIGFzIGEgZmFsbGJhY2sKLSAgICAgKiBqdXN0IGluIGNhc2UgKi8KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYmFzZXNpbmssIENPUkUsIFNUQVRFX0NIQU5HRSwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byBzdGFydCIpKTsKLSAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICB9Ci1hY3RpdmF0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywKLSAgICAgICAgImVsZW1lbnQgZmFpbGVkIHRvIGNoYW5nZSBzdGF0ZXMgLS0gYWN0aXZhdGlvbiBwcm9ibGVtPyIpOwotICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaCBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmNWQ2NS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdGJhc2VzaW5rLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9CQVNFX1NJTktfSF9fCi0jZGVmaW5lIF9fR1NUX0JBU0VfU0lOS19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0KLSNkZWZpbmUgR1NUX1RZUEVfQkFTRV9TSU5LICAgICAgICAgICAgICAoZ3N0X2Jhc2Vfc2lua19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQkFTRV9TSU5LKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9CQVNFX1NJTkssR3N0QmFzZVNpbmspKQotI2RlZmluZSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfU0lOSyxHc3RCYXNlU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1Mob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0JBU0VfU0lOSywgR3N0QmFzZVNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19CQVNFX1NJTksob2JqKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0JBU0VfU0lOSykpCi0jZGVmaW5lIEdTVF9JU19CQVNFX1NJTktfQ0xBU1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQkFTRV9TSU5LKSkKLSNkZWZpbmUgR1NUX0JBU0VfU0lOS19DQVNUKG9iaikgICAgICAgICAoKEdzdEJhc2VTaW5rICopIChvYmopKQotCi0vKioKLSAqIEdTVF9CQVNFX1NJTktfUEFEOgotICogQG9iajogYmFzZSBzaW5rIGluc3RhbmNlCi0gKgotICogR2l2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlICNHc3RQYWQgb2JqZWN0IG9mIHRoZSBlbGVtZW50LgotICovCi0jZGVmaW5lIEdTVF9CQVNFX1NJTktfUEFEKG9iaikgICAgICAgICAgKEdTVF9CQVNFX1NJTktfQ0FTVCAob2JqKS0+c2lua3BhZCkKLQotI2RlZmluZSBHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0xPQ0sob2JqKSAgICgmR1NUX0JBU0VfU0lOS19DQVNUKG9iaiktPnByZXJvbGxfbG9jaykKLSNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX0xPQ0sob2JqKSAgICAgICAoZ19tdXRleF9sb2NrKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSyhvYmopKSkKLSNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX1RSWUxPQ0sob2JqKSAgICAoZ19tdXRleF90cnlsb2NrKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSyhvYmopKSkKLSNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX1VOTE9DSyhvYmopICAgICAoZ19tdXRleF91bmxvY2soR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLKG9iaikpKQotCi0jZGVmaW5lIEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfQ09ORChvYmopICAgKCZHU1RfQkFTRV9TSU5LX0NBU1Qob2JqKS0+cHJlcm9sbF9jb25kKQotI2RlZmluZSBHU1RfQkFTRV9TSU5LX1BSRVJPTExfV0FJVChvYmopICAgICAgIFwKLSAgICAgIGdfY29uZF93YWl0IChHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0NPTkQgKG9iaiksIEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfTE9DSyAob2JqKSkKLSNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX1dBSVRfVU5USUwob2JqLCBlbmRfdGltZSkgXAotICAgICAgZ19jb25kX3dhaXRfdW50aWwgKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfQ09ORCAob2JqKSwgR1NUX0JBU0VfU0lOS19HRVRfUFJFUk9MTF9MT0NLIChvYmopLCBlbmRfdGltZSkKLSNkZWZpbmUgR1NUX0JBU0VfU0lOS19QUkVST0xMX1NJR05BTChvYmopICAgICBnX2NvbmRfc2lnbmFsIChHU1RfQkFTRV9TSU5LX0dFVF9QUkVST0xMX0NPTkQgKG9iaikpOwotI2RlZmluZSBHU1RfQkFTRV9TSU5LX1BSRVJPTExfQlJPQURDQVNUKG9iaikgIGdfY29uZF9icm9hZGNhc3QgKEdTVF9CQVNFX1NJTktfR0VUX1BSRVJPTExfQ09ORCAob2JqKSk7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RCYXNlU2luayBHc3RCYXNlU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RCYXNlU2lua0NsYXNzIEdzdEJhc2VTaW5rQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVNpbmtQcml2YXRlIEdzdEJhc2VTaW5rUHJpdmF0ZTsKLQotLyoqCi0gKiBHc3RCYXNlU2luazoKLSAqCi0gKiBUaGUgb3BhcXVlICNHc3RCYXNlU2luayBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RCYXNlU2luayB7Ci0gIEdzdEVsZW1lbnQgICAgIGVsZW1lbnQ7Ci0KLSAgLyo8IHByb3RlY3RlZCA+Ki8KLSAgR3N0UGFkICAgICAgICAqc2lua3BhZDsKLSAgR3N0UGFkTW9kZSAgICAgcGFkX21vZGU7Ci0KLSAgLyo8IHByb3RlY3RlZCA+Ki8gLyogd2l0aCBMT0NLICovCi0gIGd1aW50NjQgICAgICAgIG9mZnNldDsKLSAgZ2Jvb2xlYW4gICAgICAgY2FuX2FjdGl2YXRlX3B1bGw7Ci0gIGdib29sZWFuICAgICAgIGNhbl9hY3RpdmF0ZV9wdXNoOwotCi0gIC8qPCBwcm90ZWN0ZWQgPiovIC8qIHdpdGggUFJFUk9MTF9MT0NLICovCi0gIEdNdXRleCAgICAgICAgIHByZXJvbGxfbG9jazsKLSAgR0NvbmQgICAgICAgICAgcHJlcm9sbF9jb25kOwotICBnYm9vbGVhbiAgICAgICBlb3M7Ci0gIGdib29sZWFuICAgICAgIG5lZWRfcHJlcm9sbDsKLSAgZ2Jvb2xlYW4gICAgICAgaGF2ZV9wcmVyb2xsOwotICBnYm9vbGVhbiAgICAgICBwbGF5aW5nX2FzeW5jOwotCi0gIC8qPCBwcm90ZWN0ZWQgPiovIC8qIHdpdGggU1RSRUFNX0xPQ0sgKi8KLSAgZ2Jvb2xlYW4gICAgICAgaGF2ZV9uZXdzZWdtZW50OwotICBHc3RTZWdtZW50ICAgICBzZWdtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLyAvKiB3aXRoIExPQ0sgKi8KLSAgR3N0Q2xvY2tJRCAgICAgY2xvY2tfaWQ7Ci0gIGdib29sZWFuICAgICAgIHN5bmM7Ci0gIGdib29sZWFuICAgICAgIGZsdXNoaW5nOwotICBnYm9vbGVhbiAgICAgICBydW5uaW5nOwotCi0gIGdpbnQ2NCAgICAgICAgIG1heF9sYXRlbmVzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0QmFzZVNpbmtQcml2YXRlICpwcml2OwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkdfTEFSR0VdOwotfTsKLQotLyoqCi0gKiBHc3RCYXNlU2lua0NsYXNzOgotICogQHBhcmVudF9jbGFzczogRWxlbWVudCBwYXJlbnQgY2xhc3MKLSAqIEBnZXRfY2FwczogQ2FsbGVkIHRvIGdldCBzaW5rIHBhZCBjYXBzIGZyb20gdGhlIHN1YmNsYXNzCi0gKiBAc2V0X2NhcHM6IE5vdGlmeSBzdWJjbGFzcyBvZiBjaGFuZ2VkIGNhcHMKLSAqIEBmaXhhdGU6IE9ubHkgdXNlZnVsIGluIHB1bGwgbW9kZS4gSW1wbGVtZW50IGlmIHlvdSBoYXZlCi0gKiAgICAgaWRlYXMgYWJvdXQgd2hhdCBzaG91bGQgYmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY2FwcyB5b3Ugc3VwcG9ydC4KLSAqIEBhY3RpdmF0ZV9wdWxsOiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIHdoZW4gdGhleSBjYW4gcHJvdmlkZSBhbgotICogICAgIGFsdGVybmF0ZSBtZXRob2Qgb2Ygc3Bhd25pbmcgYSB0aHJlYWQgdG8gZHJpdmUgdGhlIHBpcGVsaW5lIGluIHB1bGwgbW9kZS4KLSAqICAgICBTaG91bGQgc3RhcnQgb3Igc3RvcCB0aGUgcHVsbGluZyB0aHJlYWQsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlCi0gKiAgICAgImFjdGl2ZSIgYXJndW1lbnQuIENhbGxlZCBhZnRlciBhY3R1YWxseSBhY3RpdmF0aW5nIHRoZSBzaW5rIHBhZCBpbiBwdWxsCi0gKiAgICAgbW9kZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc3RhcnRzIGEgdGFzayBvbiB0aGUgc2luayBwYWQuCi0gKiBAZ2V0X3RpbWVzOiBDYWxsZWQgdG8gZ2V0IHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzIGZvciBzeW5jaHJvbmlzaW5nCi0gKiAgICAgdGhlIHBhc3NlZCBidWZmZXIgdG8gdGhlIGNsb2NrCi0gKiBAcHJvcG9zZV9hbGxvY2F0aW9uOiBjb25maWd1cmUgdGhlIGFsbG9jYXRpb24gcXVlcnkKLSAqIEBzdGFydDogU3RhcnQgcHJvY2Vzc2luZy4gSWRlYWwgZm9yIG9wZW5pbmcgcmVzb3VyY2VzIGluIHRoZSBzdWJjbGFzcwotICogQHN0b3A6IFN0b3AgcHJvY2Vzc2luZy4gU3ViY2xhc3NlcyBzaG91bGQgdXNlIHRoaXMgdG8gY2xvc2UgcmVzb3VyY2VzLgotICogQHVubG9jazogVW5sb2NrIGFueSBwZW5kaW5nIGFjY2VzcyB0byB0aGUgcmVzb3VyY2UuIFN1YmNsYXNzZXMgc2hvdWxkCi0gKiAgICAgdW5ibG9jayBhbnkgYmxvY2tlZCBmdW5jdGlvbiBBU0FQCi0gKiBAdW5sb2NrX3N0b3A6IENsZWFyIHRoZSBwcmV2aW91cyB1bmxvY2sgcmVxdWVzdC4gU3ViY2xhc3NlcyBzaG91bGQgY2xlYXIKLSAqICAgICBhbnkgc3RhdGUgdGhleSBzZXQgZHVyaW5nIHVubG9jaygpLCBzdWNoIGFzIGNsZWFyaW5nIGNvbW1hbmQgcXVldWVzLgotICogQHF1ZXJ5OiBwZXJmb3JtIGEgI0dzdFF1ZXJ5IG9uIHRoZSBlbGVtZW50LgotICogQGV2ZW50OiBPdmVycmlkZSB0aGlzIHRvIGhhbmRsZSBldmVudHMgYXJyaXZpbmcgb24gdGhlIHNpbmsgcGFkCi0gKiBAd2FpdF9ldmVudDogT3ZlcnJpZGUgdGhpcyB0byBpbXBsZW1lbnQgY3VzdG9tIGxvZ2ljIHRvIHdhaXQgZm9yIHRoZSBldmVudAotICogICAgIHRpbWUgKGZvciBldmVudHMgbGlrZSBFT1MgYW5kIEdBUCkuIFN1YmNsYXNzZXMgc2hvdWxkIGFsd2F5cyBmaXJzdAotICogICAgIGNoYWluIHVwIHRvIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotICogQHByZXBhcmU6IENhbGxlZCB0byBwcmVwYXJlIHRoZSBidWZmZXIgZm9yIEByZW5kZXIgYW5kIEBwcmVyb2xsLiBUaGlzCi0gKiAgICAgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBzeW5jaHJvbmlzYXRpb24gaXMgcGVyZm9ybWVkLgotICogQHByZXBhcmVfbGlzdDogQ2FsbGVkIHRvIHByZXBhcmUgdGhlIGJ1ZmZlciBsaXN0IGZvciBAcmVuZGVyX2xpc3QuIFRoaXMKLSAqICAgICBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHN5bmNocm9uaXNhdGlvbiBpcyBwZXJmb3JtZWQuCi0gKiBAcHJlcm9sbDogQ2FsbGVkIHRvIHByZXNlbnQgdGhlIHByZXJvbGwgYnVmZmVyIGlmIGRlc2lyZWQuCi0gKiBAcmVuZGVyOiBDYWxsZWQgd2hlbiBhIGJ1ZmZlciBzaG91bGQgYmUgcHJlc2VudGVkIG9yIG91dHB1dCwgYXQgdGhlCi0gKiAgICAgY29ycmVjdCBtb21lbnQgaWYgdGhlICNHc3RCYXNlU2luayBoYXMgYmVlbiBzZXQgdG8gc3luYyB0byB0aGUgY2xvY2suCi0gKiBAcmVuZGVyX2xpc3Q6IFNhbWUgYXMgQHJlbmRlciBidXQgdXNlZCB3aXRoIGJ1ZmZlciBsaXN0cyBpbnN0ZWFkIG9mCi0gKiAgICAgYnVmZmVycy4KLSAqCi0gKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBhbnkgb2YgdGhlIGF2YWlsYWJsZSB2aXJ0dWFsIG1ldGhvZHMgb3Igbm90LCBhcwotICogbmVlZGVkLiBBdCB0aGUgbWluaW11bSwgdGhlIEByZW5kZXIgbWV0aG9kIHNob3VsZCBiZSBvdmVycmlkZGVuIHRvCi0gKiBvdXRwdXQvcHJlc2VudCBidWZmZXJzLgotICovCi1zdHJ1Y3QgX0dzdEJhc2VTaW5rQ2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIGdldCBjYXBzIGZyb20gc3ViY2xhc3MgKi8KLSAgR3N0Q2FwcyogICAgICAoKmdldF9jYXBzKSAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RDYXBzICpmaWx0ZXIpOwotICAvKiBub3RpZnkgc3ViY2xhc3Mgb2YgbmV3IGNhcHMgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKnNldF9jYXBzKSAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RDYXBzICpjYXBzKTsKLQotICAvKiBmaXhhdGUgc2luayBjYXBzIGR1cmluZyBwdWxsLW1vZGUgbmVnb3RpYXRpb24gKi8KLSAgR3N0Q2FwcyAqICAgICAoKmZpeGF0ZSkgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RDYXBzICpjYXBzKTsKLSAgLyogc3RhcnQgb3Igc3RvcCBhIHB1bGxpbmcgdGhyZWFkICovCi0gIGdib29sZWFuICAgICAgKCphY3RpdmF0ZV9wdWxsKShHc3RCYXNlU2luayAqc2luaywgZ2Jvb2xlYW4gYWN0aXZlKTsKLQotICAvKiBnZXQgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgZm9yIHN5bmNpbmcgb24gdGhpcyBidWZmZXIgKi8KLSAgdm9pZCAgICAgICAgICAoKmdldF90aW1lcykgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXIgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqc3RhcnQsIEdzdENsb2NrVGltZSAqZW5kKTsKLQotICAvKiBwcm9wb3NlIGFsbG9jYXRpb24gcGFyYW1ldGVycyBmb3IgdXBzdHJlYW0gKi8KLSAgZ2Jvb2xlYW4gICAgICAoKnByb3Bvc2VfYWxsb2NhdGlvbikgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdFF1ZXJ5ICpxdWVyeSk7Ci0KLSAgLyogc3RhcnQgYW5kIHN0b3AgcHJvY2Vzc2luZywgaWRlYWwgZm9yIG9wZW5pbmcvY2xvc2luZyB0aGUgcmVzb3VyY2UgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKnN0YXJ0KSAgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKLSAgZ2Jvb2xlYW4gICAgICAoKnN0b3ApICAgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKLQotICAvKiB1bmxvY2sgYW55IHBlbmRpbmcgYWNjZXNzIHRvIHRoZSByZXNvdXJjZS4gc3ViY2xhc3NlcyBzaG91bGQgdW5sb2NrCi0gICAqIGFueSBmdW5jdGlvbiBBU0FQLiAqLwotICBnYm9vbGVhbiAgICAgICgqdW5sb2NrKSAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmspOwotICAvKiBDbGVhciBhIHByZXZpb3VzbHkgaW5kaWNhdGVkIHVubG9jayByZXF1ZXN0IG5vdCB0aGF0IHVubG9ja2luZyBpcwotICAgKiBjb21wbGV0ZS4gU3ViLWNsYXNzZXMgc2hvdWxkIGNsZWFyIGFueSBjb21tYW5kIHF1ZXVlIG9yIGluZGljYXRvciB0aGV5Ci0gICAqIHNldCBkdXJpbmcgdW5sb2NrICovCi0gIGdib29sZWFuICAgICAgKCp1bmxvY2tfc3RvcCkgIChHc3RCYXNlU2luayAqc2luayk7Ci0KLSAgLyogbm90aWZ5IHN1YmNsYXNzIG9mIHF1ZXJ5ICovCi0gIGdib29sZWFuICAgICAgKCpxdWVyeSkgICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0UXVlcnkgKnF1ZXJ5KTsKLQotICAvKiBub3RpZnkgc3ViY2xhc3Mgb2YgZXZlbnQgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKmV2ZW50KSAgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RFdmVudCAqZXZlbnQpOwotICAvKiB3YWl0IGZvciBlb3Mgb3IgZ2FwLCBzdWJjbGFzc2VzIHNob3VsZCBjaGFpbiB1cCB0byBwYXJlbnQgZmlyc3QgKi8KLSAgR3N0Rmxvd1JldHVybiAoKndhaXRfZXZlbnQpICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RFdmVudCAqZXZlbnQpOwotCi0gIC8qIG5vdGlmeSBzdWJjbGFzcyBvZiBidWZmZXIgb3IgbGlzdCBiZWZvcmUgZG9pbmcgc3luYyAqLwotICBHc3RGbG93UmV0dXJuICgqcHJlcGFyZSkgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgR3N0Rmxvd1JldHVybiAoKnByZXBhcmVfbGlzdCkgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdCk7Ci0KLSAgLyogbm90aWZ5IHN1YmNsYXNzIG9mIHByZXJvbGwgYnVmZmVyIG9yIHJlYWwgYnVmZmVyICovCi0gIEdzdEZsb3dSZXR1cm4gKCpwcmVyb2xsKSAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0QnVmZmVyICpidWZmZXIpOwotICBHc3RGbG93UmV0dXJuICgqcmVuZGVyKSAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdEJ1ZmZlciAqYnVmZmVyKTsKLSAgLyogUmVuZGVyIGEgQnVmZmVyTGlzdCAqLwotICBHc3RGbG93UmV0dXJuICgqcmVuZGVyX2xpc3QpICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdEJ1ZmZlckxpc3QgKmJ1ZmZlcl9saXN0KTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgICAgICAgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR19MQVJHRV07Ci19OwotCi1HVHlwZSBnc3RfYmFzZV9zaW5rX2dldF90eXBlKHZvaWQpOwotCi1Hc3RGbG93UmV0dXJuICAgZ3N0X2Jhc2Vfc2lua19kb19wcmVyb2xsICAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdE1pbmlPYmplY3QgKm9iaik7Ci1Hc3RGbG93UmV0dXJuICAgZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwgICAgICAoR3N0QmFzZVNpbmsgKnNpbmspOwotCi0vKiBzeW5jaHJvbml6aW5nIGFnYWluc3QgdGhlIGNsb2NrICovCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyAgICAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIGdib29sZWFuIHN5bmMpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NpbmtfZ2V0X3N5bmMgICAgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKLQotLyogZHJvcHBpbmcgbGF0ZSBidWZmZXJzICovCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2xhdGVuZXNzICAoR3N0QmFzZVNpbmsgKnNpbmssIGdpbnQ2NCBtYXhfbGF0ZW5lc3MpOwotZ2ludDY0ICAgICAgICAgIGdzdF9iYXNlX3NpbmtfZ2V0X21heF9sYXRlbmVzcyAgKEdzdEJhc2VTaW5rICpzaW5rKTsKLQotLyogcGVyZm9ybWluZyBRb1MgKi8KLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZCAgIChHc3RCYXNlU2luayAqc2luaywgZ2Jvb2xlYW4gZW5hYmxlZCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZCAgICAoR3N0QmFzZVNpbmsgKnNpbmspOwotCi0vKiBkb2luZyBhc3luYyBzdGF0ZSBjaGFuZ2VzICovCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfYXN5bmNfZW5hYmxlZCAoR3N0QmFzZVNpbmsgKnNpbmssIGdib29sZWFuIGVuYWJsZWQpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfYXN5bmNfZW5hYmxlZCAgKEdzdEJhc2VTaW5rICpzaW5rKTsKLQotLyogdHVuaW5nIHN5bmNocm9uaXNhdGlvbiAqLwotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X3RzX29mZnNldCAgICAgKEdzdEJhc2VTaW5rICpzaW5rLCBHc3RDbG9ja1RpbWVEaWZmIG9mZnNldCk7Ci1Hc3RDbG9ja1RpbWVEaWZmIGdzdF9iYXNlX3NpbmtfZ2V0X3RzX29mZnNldCAgICAoR3N0QmFzZVNpbmsgKnNpbmspOwotCi0vKiBsYXN0IHNhbXBsZSAqLwotR3N0U2FtcGxlICogICAgIGdzdF9iYXNlX3NpbmtfZ2V0X2xhc3Rfc2FtcGxlICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9sYXN0X3NhbXBsZV9lbmFibGVkIChHc3RCYXNlU2luayAqc2luaywgZ2Jvb2xlYW4gZW5hYmxlZCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc19sYXN0X3NhbXBsZV9lbmFibGVkIChHc3RCYXNlU2luayAqc2luayk7Ci0KLS8qIGxhdGVuY3kgKi8KLWdib29sZWFuICAgICAgICBnc3RfYmFzZV9zaW5rX3F1ZXJ5X2xhdGVuY3kgICAgIChHc3RCYXNlU2luayAqc2luaywgZ2Jvb2xlYW4gKmxpdmUsIGdib29sZWFuICp1cHN0cmVhbV9saXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqbWluX2xhdGVuY3ksIEdzdENsb2NrVGltZSAqbWF4X2xhdGVuY3kpOwotR3N0Q2xvY2tUaW1lICAgIGdzdF9iYXNlX3NpbmtfZ2V0X2xhdGVuY3kgICAgICAgKEdzdEJhc2VTaW5rICpzaW5rKTsKLQotLyogcmVuZGVyIGRlbGF5ICovCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19zZXRfcmVuZGVyX2RlbGF5ICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdENsb2NrVGltZSBkZWxheSk7Ci1Hc3RDbG9ja1RpbWUgICAgZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5ICAoR3N0QmFzZVNpbmsgKnNpbmspOwotCi0vKiBibG9ja3NpemUgKi8KLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemUgICAgIChHc3RCYXNlU2luayAqc2luaywgZ3VpbnQgYmxvY2tzaXplKTsKLWd1aW50ICAgICAgICAgICBnc3RfYmFzZV9zaW5rX2dldF9ibG9ja3NpemUgICAgIChHc3RCYXNlU2luayAqc2luayk7Ci0KLS8qIHRocm90dGxlLXRpbWUgKi8KLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lIChHc3RCYXNlU2luayAqc2luaywgZ3VpbnQ2NCB0aHJvdHRsZSk7Ci1ndWludDY0ICAgICAgICAgZ3N0X2Jhc2Vfc2lua19nZXRfdGhyb3R0bGVfdGltZSAoR3N0QmFzZVNpbmsgKnNpbmspOwotCi0vKiBtYXgtYml0cmF0ZSAqLwotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3Npbmtfc2V0X21heF9iaXRyYXRlICAgKEdzdEJhc2VTaW5rICpzaW5rLCBndWludDY0IG1heF9iaXRyYXRlKTsKLWd1aW50NjQgICAgICAgICBnc3RfYmFzZV9zaW5rX2dldF9tYXhfYml0cmF0ZSAgIChHc3RCYXNlU2luayAqc2luayk7Ci0KLUdzdENsb2NrUmV0dXJuICBnc3RfYmFzZV9zaW5rX3dhaXRfY2xvY2sgICAgICAgIChHc3RCYXNlU2luayAqc2luaywgR3N0Q2xvY2tUaW1lIHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiAqIGppdHRlcik7Ci1Hc3RGbG93UmV0dXJuICAgZ3N0X2Jhc2Vfc2lua193YWl0ICAgICAgICAgICAgICAoR3N0QmFzZVNpbmsgKnNpbmssIEdzdENsb2NrVGltZSB0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZURpZmYgKmppdHRlcik7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0QmFzZVNpbmssIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0JBU0VfU0lOS19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NzE5ZjQuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTExICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0YmFzZXNyYy5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RiYXNlc3JjCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIGdldHJhbmdlIGJhc2VkIHNvdXJjZSBlbGVtZW50cwotICogQHNlZV9hbHNvOiAjR3N0UHVzaFNyYywgI0dzdEJhc2VUcmFuc2Zvcm0sICNHc3RCYXNlU2luawotICoKLSAqIFRoaXMgaXMgYSBnZW5lcmljIGJhc2UgY2xhc3MgZm9yIHNvdXJjZSBlbGVtZW50cy4gVGhlIGZvbGxvd2luZwotICogdHlwZXMgb2Ygc291cmNlcyBhcmUgc3VwcG9ydGVkOgotICogPGl0ZW1pemVkbGlzdD4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPnJhbmRvbSBhY2Nlc3Mgc291cmNlcyBsaWtlIGZpbGVzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5zZWVrYWJsZSBzb3VyY2VzPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5saXZlIHNvdXJjZXM8L3BhcmE+PC9saXN0aXRlbT4KLSAqIDwvaXRlbWl6ZWRsaXN0PgotICoKLSAqIFRoZSBzb3VyY2UgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gb3BlcmF0ZSBpbiBhbnkgI0dzdEZvcm1hdCB3aXRoIHRoZQotICogZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQoKSBtZXRob2QuIFRoZSBjdXJyZW50bHkgc2V0IGZvcm1hdCBkZXRlcm1pbmVzCi0gKiB0aGUgZm9ybWF0IG9mIHRoZSBpbnRlcm5hbCAjR3N0U2VnbWVudCBhbmQgYW55ICVHU1RfRVZFTlRfU0VHTUVOVAotICogZXZlbnRzLiBUaGUgZGVmYXVsdCBmb3JtYXQgZm9yICNHc3RCYXNlU3JjIGlzICVHU1RfRk9STUFUX0JZVEVTLgotICoKLSAqICNHc3RCYXNlU3JjIGFsd2F5cyBzdXBwb3J0cyBwdXNoIG1vZGUgc2NoZWR1bGluZy4gSWYgdGhlIGZvbGxvd2luZwotICogY29uZGl0aW9ucyBhcmUgbWV0LCBpdCBhbHNvIHN1cHBvcnRzIHB1bGwgbW9kZSBzY2hlZHVsaW5nOgotICogPGl0ZW1pemVkbGlzdD4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmb3JtYXQgaXMgc2V0IHRvICVHU1RfRk9STUFUX0JZVEVTIChkZWZhdWx0KS48L3BhcmE+Ci0gKiAgIDwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4jR3N0QmFzZVNyY0NsYXNzLmlzX3NlZWthYmxlKCkgcmV0dXJucyAlVFJVRS48L3BhcmE+Ci0gKiAgIDwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqCi0gKiBJZiBhbGwgdGhlIGNvbmRpdGlvbnMgYXJlIG1ldCBmb3Igb3BlcmF0aW5nIGluIHB1bGwgbW9kZSwgI0dzdEJhc2VTcmMgaXMKLSAqIGF1dG9tYXRpY2FsbHkgc2Vla2FibGUgaW4gcHVzaCBtb2RlIGFzIHdlbGwuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0Ci0gKiBiZSBtZXQgdG8gbWFrZSB0aGUgZWxlbWVudCBzZWVrYWJsZSBpbiBwdXNoIG1vZGUgd2hlbiB0aGUgZm9ybWF0IGlzIG5vdAotICogJUdTVF9GT1JNQVRfQllURVM6Ci0gKiA8aXRlbWl6ZWRsaXN0PgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgI0dzdEJhc2VTcmNDbGFzcy5pc19zZWVrYWJsZSgpIHJldHVybnMgJVRSVUUuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgI0dzdEJhc2VTcmNDbGFzcy5xdWVyeSgpIGNhbiBjb252ZXJ0IGFsbCBzdXBwb3J0ZWQgc2VlayBmb3JtYXRzIHRvIHRoZQotICogICAgIGludGVybmFsIGZvcm1hdCBhcyBzZXQgd2l0aCBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCgpLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICNHc3RCYXNlU3JjQ2xhc3MuZG9fc2VlaygpIGlzIGltcGxlbWVudGVkLCBwZXJmb3JtcyB0aGUgc2VlayBhbmQgcmV0dXJucwotICogICAgICAlVFJVRS4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqCi0gKiBXaGVuIHRoZSBlbGVtZW50IGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50cyB0byBvcGVyYXRlIGluIHB1bGwgbW9kZSwgdGhlCi0gKiBvZmZzZXQgYW5kIGxlbmd0aCBpbiB0aGUgI0dzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKSBtZXRob2Qgc2hvdWxkIGJlIGlnbm9yZWQuCi0gKiBJdCBpcyByZWNvbW1lbmRlZCB0byBzdWJjbGFzcyAjR3N0UHVzaFNyYyBpbnN0ZWFkLCBpbiB0aGlzIHNpdHVhdGlvbi4gSWYgdGhlCi0gKiBlbGVtZW50IGNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSBidXQgb25seSB3aXRoIHNwZWNpZmljIG9mZnNldHMgYW5kCi0gKiBsZW5ndGhzLCBpdCBpcyBhbGxvd2VkIHRvIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gdGhlIHdyb25nIHZhbHVlcyBhcmUgcGFzc2VkCi0gKiB0byB0aGUgI0dzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKSBmdW5jdGlvbi4KLSAqCi0gKiAjR3N0QmFzZVNyYyBoYXMgc3VwcG9ydCBmb3IgbGl2ZSBzb3VyY2VzLiBMaXZlIHNvdXJjZXMgYXJlIHNvdXJjZXMgdGhhdCB3aGVuCi0gKiBwYXVzZWQgZGlzY2FyZCBkYXRhLCBzdWNoIGFzIGF1ZGlvIG9yIHZpZGVvIGNhcHR1cmUgZGV2aWNlcy4gQSB0eXBpY2FsIGxpdmUKLSAqIHNvdXJjZSBhbHNvIHByb2R1Y2VzIGRhdGEgYXQgYSBmaXhlZCByYXRlIGFuZCB0aHVzIHByb3ZpZGVzIGEgY2xvY2sgdG8gcHVibGlzaAotICogdGhpcyByYXRlLgotICogVXNlIGdzdF9iYXNlX3NyY19zZXRfbGl2ZSgpIHRvIGFjdGl2YXRlIHRoZSBsaXZlIHNvdXJjZSBtb2RlLgotICoKLSAqIEEgbGl2ZSBzb3VyY2UgZG9lcyBub3QgcHJvZHVjZSBkYXRhIGluIHRoZSBQQVVTRUQgc3RhdGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUKLSAqICNHc3RCYXNlU3JjQ2xhc3MuY3JlYXRlKCkgbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZCBpbiBQQVVTRUQgYnV0IG9ubHkgaW4KLSAqIFBMQVlJTkcuIFRvIHNpZ25hbCB0aGUgcGlwZWxpbmUgdGhhdCB0aGUgZWxlbWVudCB3aWxsIG5vdCBwcm9kdWNlIGRhdGEsIHRoZQotICogcmV0dXJuIHZhbHVlIGZyb20gdGhlIFJFQURZIHRvIFBBVVNFRCBzdGF0ZSB3aWxsIGJlCi0gKiAlR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLgotICoKLSAqIEEgdHlwaWNhbCBsaXZlIHNvdXJjZSB3aWxsIHRpbWVzdGFtcCB0aGUgYnVmZmVycyBpdCBjcmVhdGVzIHdpdGggdGhlCi0gKiBjdXJyZW50IHJ1bm5pbmcgdGltZSBvZiB0aGUgcGlwZWxpbmUuIFRoaXMgaXMgb25lIHJlYXNvbiB3aHkgYSBsaXZlIHNvdXJjZQotICogY2FuIG9ubHkgcHJvZHVjZSBkYXRhIGluIHRoZSBQTEFZSU5HIHN0YXRlLCB3aGVuIHRoZSBjbG9jayBpcyBhY3R1YWxseQotICogZGlzdHJpYnV0ZWQgYW5kIHJ1bm5pbmcuCi0gKgotICogTGl2ZSBzb3VyY2VzIHRoYXQgc3luY2hyb25pemUgYW5kIGJsb2NrIG9uIHRoZSBjbG9jayAoYW4gYXVkaW8gc291cmNlLCBmb3IKLSAqIGV4YW1wbGUpIGNhbiB1c2UgZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZygpIHdoZW4gdGhlCi0gKiAjR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSgpIGZ1bmN0aW9uIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHN0YXRlIGNoYW5nZSB0bwotICogUEFVU0VELgotICoKLSAqIFRoZSAjR3N0QmFzZVNyY0NsYXNzLmdldF90aW1lcygpIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgcHNldWRvLWxpdmUKLSAqIHNvdXJjZXMuIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gaW1wbGVtZW50IHRoZSAjR3N0QmFzZVNyY0NsYXNzLmdldF90aW1lcygpCi0gKiBmdW5jdGlvbiBpZiB0aGUgc291cmNlIGlzIGEgbGl2ZSBzb3VyY2UuIFRoZSAjR3N0QmFzZVNyY0NsYXNzLmdldF90aW1lcygpCi0gKiBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRpbWVzdGFtcHMgc3RhcnRpbmcgZnJvbSAwLCBhcyBpZiBpdCB3ZXJlIGEgbm9uLWxpdmUKLSAqIHNvdXJjZS4gVGhlIGJhc2UgY2xhc3Mgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgdGltZXN0YW1wcyBhcmUgdHJhbnNmb3JtZWQKLSAqIGludG8gdGhlIGN1cnJlbnQgcnVubmluZ190aW1lLiBUaGUgYmFzZSBzb3VyY2Ugd2lsbCB0aGVuIHdhaXQgZm9yIHRoZQotICogY2FsY3VsYXRlZCBydW5uaW5nX3RpbWUgYmVmb3JlIHB1c2hpbmcgb3V0IHRoZSBidWZmZXIuCi0gKgotICogRm9yIGxpdmUgc291cmNlcywgdGhlIGJhc2UgY2xhc3Mgd2lsbCBieSBkZWZhdWx0IHJlcG9ydCBhIGxhdGVuY3kgb2YgMC4KLSAqIEZvciBwc2V1ZG8gbGl2ZSBzb3VyY2VzLCB0aGUgYmFzZSBjbGFzcyB3aWxsIGJ5IGRlZmF1bHQgbWVhc3VyZSB0aGUgZGlmZmVyZW5jZQotICogYmV0d2VlbiB0aGUgZmlyc3QgYnVmZmVyIHRpbWVzdGFtcCBhbmQgdGhlIHN0YXJ0IHRpbWUgb2YgZ2V0X3RpbWVzIGFuZCB3aWxsCi0gKiByZXBvcnQgdGhpcyB2YWx1ZSBhcyB0aGUgbGF0ZW5jeS4KLSAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoZSBxdWVyeSBmdW5jdGlvbiB3aGVuIHRoaXMgYmVoYXZpb3VyIGlzIG5vdAotICogYWNjZXB0YWJsZS4KLSAqCi0gKiBUaGVyZSBpcyBvbmx5IHN1cHBvcnQgaW4gI0dzdEJhc2VTcmMgZm9yIGV4YWN0bHkgb25lIHNvdXJjZSBwYWQsIHdoaWNoCi0gKiBzaG91bGQgYmUgbmFtZWQgInNyYyIuIEEgc291cmNlIGltcGxlbWVudGF0aW9uIChzdWJjbGFzcyBvZiAjR3N0QmFzZVNyYykKLSAqIHNob3VsZCBpbnN0YWxsIGEgcGFkIHRlbXBsYXRlIGluIGl0cyBjbGFzc19pbml0IGZ1bmN0aW9uLCBsaWtlIHNvOgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqIHN0YXRpYyB2b2lkCi0gKiBteV9lbGVtZW50X2NsYXNzX2luaXQgKEdzdE15RWxlbWVudENsYXNzICprbGFzcykKLSAqIHsKLSAqICAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAqICAgLy8gc3JjdGVtcGxhdGUgc2hvdWxkIGJlIGEgI0dzdFN0YXRpY1BhZFRlbXBsYXRlIHdpdGggZGlyZWN0aW9uCi0gKiAgIC8vICVHU1RfUEFEX1NSQyBhbmQgbmFtZSAic3JjIgotICogICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJmFtcDtzcmN0ZW1wbGF0ZSk7Ci0gKgotICogICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICogICAgICAiU291cmNlIG5hbWUiLAotICogICAgICAiU291cmNlIiwKLSAqICAgICAgIk15IFNvdXJjZSBlbGVtZW50IiwKLSAqICAgICAgIlRoZSBhdXRob3IgJmx0O215LnNpbmtAbXkuZW1haWwmZ3Q7Iik7Ci0gKiB9Ci0gKiBdfAotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5Db250cm9sbGVkIHNodXRkb3duIG9mIGxpdmUgc291cmNlcyBpbiBhcHBsaWNhdGlvbnM8L3RpdGxlPgotICogPHBhcmE+Ci0gKiBBcHBsaWNhdGlvbnMgdGhhdCByZWNvcmQgZnJvbSBhIGxpdmUgc291cmNlIG1heSB3YW50IHRvIHN0b3AgcmVjb3JkaW5nCi0gKiBpbiBhIGNvbnRyb2xsZWQgd2F5LCBzbyB0aGF0IHRoZSByZWNvcmRpbmcgaXMgc3RvcHBlZCwgYnV0IHRoZSBkYXRhCi0gKiBhbHJlYWR5IGluIHRoZSBwaXBlbGluZSBpcyBwcm9jZXNzZWQgdG8gdGhlIGVuZCAocmVtZW1iZXIgdGhhdCBtYW55IGxpdmUKLSAqIHNvdXJjZXMgd291bGQgZ28gb24gcmVjb3JkaW5nIGZvcmV2ZXIgb3RoZXJ3aXNlKS4gRm9yIHRoYXQgdG8gaGFwcGVuIHRoZQotICogYXBwbGljYXRpb24gbmVlZHMgdG8gbWFrZSB0aGUgc291cmNlIHN0b3AgcmVjb3JkaW5nIGFuZCBzZW5kIGFuIEVPUwotICogZXZlbnQgZG93biB0aGUgcGlwZWxpbmUuIFRoZSBhcHBsaWNhdGlvbiB3b3VsZCB0aGVuIHdhaXQgZm9yIGFuCi0gKiBFT1MgbWVzc2FnZSBwb3N0ZWQgb24gdGhlIHBpcGVsaW5lJ3MgYnVzIHRvIGtub3cgd2hlbiBhbGwgZGF0YSBoYXMKLSAqIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgcGlwZWxpbmUgY2FuIHNhZmVseSBiZSBzdG9wcGVkLgotICoKLSAqIEFuIGFwcGxpY2F0aW9uIG1heSBzZW5kIGFuIEVPUyBldmVudCB0byBhIHNvdXJjZSBlbGVtZW50IHRvIG1ha2UgaXQKLSAqIHBlcmZvcm0gdGhlIEVPUyBsb2dpYyAoc2VuZCBFT1MgZXZlbnQgZG93bnN0cmVhbSBvciBwb3N0IGEKLSAqICVHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUgb24gdGhlIGJ1cykuIFRoaXMgY2FuIHR5cGljYWxseSBiZSBkb25lCi0gKiB3aXRoIHRoZSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KCkgZnVuY3Rpb24gb24gdGhlIGVsZW1lbnQgb3IgaXRzIHBhcmVudCBiaW4uCi0gKgotICogQWZ0ZXIgdGhlIEVPUyBoYXMgYmVlbiBzZW50IHRvIHRoZSBlbGVtZW50LCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIHdhaXQgZm9yCi0gKiBhbiBFT1MgbWVzc2FnZSB0byBiZSBwb3N0ZWQgb24gdGhlIHBpcGVsaW5lJ3MgYnVzLiBPbmNlIHRoaXMgRU9TIG1lc3NhZ2UgaXMKLSAqIHJlY2VpdmVkLCBpdCBtYXkgc2FmZWx5IHNodXQgZG93biB0aGUgZW50aXJlIHBpcGVsaW5lLgotICogPC9wYXJhPgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdF9wcml2YXRlLmg+Ci0jaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0LXByaXZhdGUuaD4KLQotI2luY2x1ZGUgImdzdGJhc2VzcmMuaCIKLSNpbmNsdWRlICJnc3R0eXBlZmluZGhlbHBlci5oIgotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1saWIuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2Jhc2Vfc3JjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9iYXNlX3NyY19kZWJ1ZwotCi0jZGVmaW5lIEdTVF9MSVZFX0dFVF9MT0NLKGVsZW0pICAgICAgICAgICAgICAgKCZHU1RfQkFTRV9TUkNfQ0FTVChlbGVtKS0+bGl2ZV9sb2NrKQotI2RlZmluZSBHU1RfTElWRV9MT0NLKGVsZW0pICAgICAgICAgICAgICAgICAgIGdfbXV0ZXhfbG9jayhHU1RfTElWRV9HRVRfTE9DSyhlbGVtKSkKLSNkZWZpbmUgR1NUX0xJVkVfVFJZTE9DSyhlbGVtKSAgICAgICAgICAgICAgICBnX211dGV4X3RyeWxvY2soR1NUX0xJVkVfR0VUX0xPQ0soZWxlbSkpCi0jZGVmaW5lIEdTVF9MSVZFX1VOTE9DSyhlbGVtKSAgICAgICAgICAgICAgICAgZ19tdXRleF91bmxvY2soR1NUX0xJVkVfR0VUX0xPQ0soZWxlbSkpCi0jZGVmaW5lIEdTVF9MSVZFX0dFVF9DT05EKGVsZW0pICAgICAgICAgICAgICAgKCZHU1RfQkFTRV9TUkNfQ0FTVChlbGVtKS0+bGl2ZV9jb25kKQotI2RlZmluZSBHU1RfTElWRV9XQUlUKGVsZW0pICAgICAgICAgICAgICAgICAgIGdfY29uZF93YWl0IChHU1RfTElWRV9HRVRfQ09ORCAoZWxlbSksIEdTVF9MSVZFX0dFVF9MT0NLIChlbGVtKSkKLSNkZWZpbmUgR1NUX0xJVkVfV0FJVF9VTlRJTChlbGVtLCBlbmRfdGltZSkgICBnX2NvbmRfdGltZWRfd2FpdCAoR1NUX0xJVkVfR0VUX0NPTkQgKGVsZW0pLCBHU1RfTElWRV9HRVRfTE9DSyAoZWxlbSksIGVuZF90aW1lKQotI2RlZmluZSBHU1RfTElWRV9TSUdOQUwoZWxlbSkgICAgICAgICAgICAgICAgIGdfY29uZF9zaWduYWwgKEdTVF9MSVZFX0dFVF9DT05EIChlbGVtKSk7Ci0jZGVmaW5lIEdTVF9MSVZFX0JST0FEQ0FTVChlbGVtKSAgICAgICAgICAgICAgZ19jb25kX2Jyb2FkY2FzdCAoR1NUX0xJVkVfR0VUX0NPTkQgKGVsZW0pKTsKLQotCi0jZGVmaW5lIEdTVF9BU1lOQ19HRVRfQ09ORChlbGVtKSAgICAgICAgICAgICAgKCZHU1RfQkFTRV9TUkNfQ0FTVChlbGVtKS0+cHJpdi0+YXN5bmNfY29uZCkKLSNkZWZpbmUgR1NUX0FTWU5DX1dBSVQoZWxlbSkgICAgICAgICAgICAgICAgICBnX2NvbmRfd2FpdCAoR1NUX0FTWU5DX0dFVF9DT05EIChlbGVtKSwgR1NUX09CSkVDVF9HRVRfTE9DSyAoZWxlbSkpCi0jZGVmaW5lIEdTVF9BU1lOQ19TSUdOQUwoZWxlbSkgICAgICAgICAgICAgICAgZ19jb25kX3NpZ25hbCAoR1NUX0FTWU5DX0dFVF9DT05EIChlbGVtKSk7Ci0KLSNkZWZpbmUgQ0xFQVJfUEVORElOR19FT1MoYnNyYykgXAotICBHX1NUTVRfU1RBUlQgeyBcCi0gICAgZ19hdG9taWNfaW50X3NldCAoJmJzcmMtPnByaXYtPmhhc19wZW5kaW5nX2VvcywgRkFMU0UpOyBcCi0gICAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZic3JjLT5wcml2LT5wZW5kaW5nX2VvcywgTlVMTCk7IFwKLSAgfSBHX1NUTVRfRU5ECi0KLQotLyogQmFzZVNyYyBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9CTE9DS1NJWkUgICAgICAgNDA5NgotI2RlZmluZSBERUZBVUxUX05VTV9CVUZGRVJTICAgICAtMQotI2RlZmluZSBERUZBVUxUX1RZUEVGSU5EICAgICAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX0RPX1RJTUVTVEFNUCAgICBGQUxTRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9CTE9DS1NJWkUsCi0gIFBST1BfTlVNX0JVRkZFUlMsCi0gIFBST1BfVFlQRUZJTkQsCi0gIFBST1BfRE9fVElNRVNUQU1QCi19OwotCi0jZGVmaW5lIEdTVF9CQVNFX1NSQ19HRVRfUFJJVkFURShvYmopICBcCi0gICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfQkFTRV9TUkMsIEdzdEJhc2VTcmNQcml2YXRlKSkKLQotc3RydWN0IF9Hc3RCYXNlU3JjUHJpdmF0ZQotewotICBnYm9vbGVhbiBkaXNjb250OwotICBnYm9vbGVhbiBmbHVzaGluZzsKLQotICBHc3RGbG93UmV0dXJuIHN0YXJ0X3Jlc3VsdDsKLSAgZ2Jvb2xlYW4gYXN5bmM7Ci0KLSAgLyogaWYgYSBzdHJlYW0tc3RhcnQgZXZlbnQgc2hvdWxkIGJlIHNlbnQgKi8KLSAgZ2Jvb2xlYW4gc3RyZWFtX3N0YXJ0X3BlbmRpbmc7Ci0KLSAgLyogaWYgc2VnbWVudCBzaG91bGQgYmUgc2VudCBhbmQgYQotICAgKiBzZXFudW0gaWYgaXQgd2FzIG9yaWdpbmF0ZWQgYnkgYSBzZWVrICovCi0gIGdib29sZWFuIHNlZ21lbnRfcGVuZGluZzsKLSAgZ3VpbnQzMiBzZWdtZW50X3NlcW51bTsKLQotICAvKiBpZiBFT1MgaXMgcGVuZGluZyAoYXRvbWljKSAqLwotICBHc3RFdmVudCAqcGVuZGluZ19lb3M7Ci0gIGdpbnQgaGFzX3BlbmRpbmdfZW9zOwotCi0gIC8qIGlmIHRoZSBlb3Mgd2FzIGNhdXNlZCBieSBhIGZvcmNlZCBlb3MgZnJvbSB0aGUgYXBwbGljYXRpb24gKi8KLSAgZ2Jvb2xlYW4gZm9yY2VkX2VvczsKLQotICAvKiBzdGFydHVwIGxhdGVuY3kgaXMgdGhlIHRpbWUgaXQgdGFrZXMgYmV0d2VlbiBnb2luZyB0byBQTEFZSU5HIGFuZCBwcm9kdWNpbmcKLSAgICogdGhlIGZpcnN0IEJVRkZFUiB3aXRoIHJ1bm5pbmdfdGltZSAwLiBUaGlzIHZhbHVlIGlzIGluY2x1ZGVkIGluIHRoZSBsYXRlbmN5Ci0gICAqIHJlcG9ydGluZy4gKi8KLSAgR3N0Q2xvY2tUaW1lIGxhdGVuY3k7Ci0gIC8qIHRpbWVzdGFtcCBvZmZzZXQsIHRoaXMgaXMgdGhlIG9mZnNldCBhZGQgdG8gdGhlIHZhbHVlcyBvZiBnc3RfdGltZXMgZm9yCi0gICAqIHBzZXVkbyBsaXZlIHNvdXJjZXMgKi8KLSAgR3N0Q2xvY2tUaW1lRGlmZiB0c19vZmZzZXQ7Ci0KLSAgZ2Jvb2xlYW4gZG9fdGltZXN0YW1wOwotICB2b2xhdGlsZSBnaW50IGR5bmFtaWNfc2l6ZTsKLSAgdm9sYXRpbGUgZ2ludCBhdXRvbWF0aWNfZW9zOwotCi0gIC8qIHN0cmVhbSBzZXF1ZW5jZSBudW1iZXIgKi8KLSAgZ3VpbnQzMiBzZXFudW07Ci0KLSAgLyogcGVuZGluZyBldmVudHMgKFRBRywgQ1VTVE9NX0JPVEgsIENVU1RPTV9ET1dOU1RSRUFNKSB0byBiZQotICAgKiBwdXNoZWQgaW4gdGhlIGRhdGEgc3RyZWFtICovCi0gIEdMaXN0ICpwZW5kaW5nX2V2ZW50czsKLSAgdm9sYXRpbGUgZ2ludCBoYXZlX2V2ZW50czsKLQotICAvKiBRb1MgKi8vKiB3aXRoIExPQ0sgKi8KLSAgZ2Jvb2xlYW4gcW9zX2VuYWJsZWQ7Ci0gIGdkb3VibGUgcHJvcG9ydGlvbjsKLSAgR3N0Q2xvY2tUaW1lIGVhcmxpZXN0X3RpbWU7Ci0KLSAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLSAgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7Ci0gIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zOwotCi0gIEdDb25kIGFzeW5jX2NvbmQ7Ci19OwotCi1zdGF0aWMgR3N0RWxlbWVudENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOwotCi1zdGF0aWMgdm9pZCBnc3RfYmFzZV9zcmNfY2xhc3NfaW5pdCAoR3N0QmFzZVNyY0NsYXNzICoga2xhc3MpOwotc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX2luaXQgKEdzdEJhc2VTcmMgKiBzcmMsIGdwb2ludGVyIGdfY2xhc3MpOwotc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotCi1HVHlwZQotZ3N0X2Jhc2Vfc3JjX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgYmFzZV9zcmNfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmYmFzZV9zcmNfdHlwZSkpIHsKLSAgICBHVHlwZSBfdHlwZTsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGJhc2Vfc3JjX2luZm8gPSB7Ci0gICAgICBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X2Jhc2Vfc3JjX2NsYXNzX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIHNpemVvZiAoR3N0QmFzZVNyYyksCi0gICAgICAwLAotICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKSBnc3RfYmFzZV9zcmNfaW5pdCwKLSAgICB9OwotCi0gICAgX3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9FTEVNRU5ULAotICAgICAgICAiR3N0QmFzZVNyYyIsICZiYXNlX3NyY19pbmZvLCBHX1RZUEVfRkxBR19BQlNUUkFDVCk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZiYXNlX3NyY190eXBlLCBfdHlwZSk7Ci0gIH0KLSAgcmV0dXJuIGJhc2Vfc3JjX3R5cGU7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfYmFzZV9zcmNfZGVmYXVsdF9nZXRfY2FwcyAoR3N0QmFzZVNyYyAqIGJzcmMsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZml4YXRlIChHc3RCYXNlU3JjICogc3JjLCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X2Jhc2Vfc3JjX2ZpeGF0ZSAoR3N0QmFzZVNyYyAqIHNyYywgR3N0Q2FwcyAqIGNhcHMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX2lzX3JhbmRvbV9hY2Nlc3MgKEdzdEJhc2VTcmMgKiBzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgdm9pZCBnc3RfYmFzZV9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbSwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZXZlbnQgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9wb29sIChHc3RCYXNlU3JjICogYmFzZXNyYywKLSAgICBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19kZWZhdWx0X25lZ290aWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19kZWZhdWx0X2RvX3NlZWsgKEdzdEJhc2VTcmMgKiBzcmMsCi0gICAgR3N0U2VnbWVudCAqIHNlZ21lbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19kZWZhdWx0X3F1ZXJ5IChHc3RCYXNlU3JjICogc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfZGVmYXVsdF9wcmVwYXJlX3NlZWtfc2VnbWVudCAoR3N0QmFzZVNyYyAqIHNyYywKLSAgICBHc3RFdmVudCAqIGV2ZW50LCBHc3RTZWdtZW50ICogc2VnbWVudCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9zcmNfZGVmYXVsdF9jcmVhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLAotICAgIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLCBHc3RCdWZmZXIgKiogYnVmKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3NyY19kZWZhdWx0X2FsbG9jIChHc3RCYXNlU3JjICogYmFzZXNyYywKLSAgICBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwgR3N0QnVmZmVyICoqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX2RlY2lkZV9hbGxvY2F0aW9uX2RlZmF1bHQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2Vfc3JjX3NldF9mbHVzaGluZyAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsCi0gICAgZ2Jvb2xlYW4gZmx1c2hpbmcsIGdib29sZWFuIGxpdmVfcGxheSwgZ2Jvb2xlYW4gKiBwbGF5aW5nKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYyk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQgZ3N0X2Jhc2Vfc3JjX2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYmFzZV9zcmNfZ2V0cmFuZ2UgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWYpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3NyY19uZWdvdGlhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgKiBsZW5ndGgsIGdib29sZWFuIGZvcmNlKTsKLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NyY19jbGFzc19pbml0IChHc3RCYXNlU3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfYmFzZV9zcmNfZGVidWcsICJiYXNlc3JjIiwgMCwgImJhc2VzcmMgZWxlbWVudCIpOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0QmFzZVNyY1ByaXZhdGUpKTsKLQotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9iYXNlX3NyY19maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Jhc2Vfc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2Jhc2Vfc3JjX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JMT0NLU0laRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiYmxvY2tzaXplIiwgIkJsb2NrIHNpemUiLAotICAgICAgICAgICJTaXplIGluIGJ5dGVzIHRvIHJlYWQgcGVyIGJ1ZmZlciAoLTEgPSBkZWZhdWx0KSIsIDAsIEdfTUFYVUlOVCwKLSAgICAgICAgICBERUZBVUxUX0JMT0NLU0laRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTlVNX0JVRkZFUlMsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgibnVtLWJ1ZmZlcnMiLCAibnVtLWJ1ZmZlcnMiLAotICAgICAgICAgICJOdW1iZXIgb2YgYnVmZmVycyB0byBvdXRwdXQgYmVmb3JlIHNlbmRpbmcgRU9TICgtMSA9IHVubGltaXRlZCkiLAotICAgICAgICAgIC0xLCBHX01BWElOVCwgREVGQVVMVF9OVU1fQlVGRkVSUywgR19QQVJBTV9SRUFEV1JJVEUgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UWVBFRklORCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgidHlwZWZpbmQiLCAiVHlwZWZpbmQiLAotICAgICAgICAgICJSdW4gdHlwZWZpbmQgYmVmb3JlIG5lZ290aWF0aW5nIiwgREVGQVVMVF9UWVBFRklORCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ET19USU1FU1RBTVAsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImRvLXRpbWVzdGFtcCIsICJEbyB0aW1lc3RhbXAiLAotICAgICAgICAgICJBcHBseSBjdXJyZW50IHN0cmVhbSB0aW1lIHRvIGJ1ZmZlcnMiLCBERUZBVUxUX0RPX1RJTUVTVEFNUCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19jaGFuZ2Vfc3RhdGUpOwotICBnc3RlbGVtZW50X2NsYXNzLT5zZW5kX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19zZW5kX2V2ZW50KTsKLQotICBrbGFzcy0+Z2V0X2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZ2V0X2NhcHMpOwotICBrbGFzcy0+bmVnb3RpYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19kZWZhdWx0X25lZ290aWF0ZSk7Ci0gIGtsYXNzLT5maXhhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZml4YXRlKTsKLSAga2xhc3MtPnByZXBhcmVfc2Vla19zZWdtZW50ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9wcmVwYXJlX3NlZWtfc2VnbWVudCk7Ci0gIGtsYXNzLT5kb19zZWVrID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2RvX3NlZWspOwotICBrbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkpOwotICBrbGFzcy0+ZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZXZlbnQpOwotICBrbGFzcy0+Y3JlYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19kZWZhdWx0X2NyZWF0ZSk7Ci0gIGtsYXNzLT5hbGxvYyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV9zcmNfZGVmYXVsdF9hbGxvYyk7Ci0gIGtsYXNzLT5kZWNpZGVfYWxsb2NhdGlvbiA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX2RlY2lkZV9hbGxvY2F0aW9uX2RlZmF1bHQpOwotCi0gIC8qIFJlZ2lzdGVyaW5nIGRlYnVnIHN5bWJvbHMgZm9yIGZ1bmN0aW9uIHBvaW50ZXJzICovCi0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zcmNfYWN0aXZhdGVfbW9kZSk7Ci0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zcmNfZXZlbnQpOwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9iYXNlX3NyY19nZXRyYW5nZSk7Ci0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfYmFzZV9zcmNfZml4YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NyY19pbml0IChHc3RCYXNlU3JjICogYmFzZXNyYywgZ3BvaW50ZXIgZ19jbGFzcykKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdzdFBhZFRlbXBsYXRlICpwYWRfdGVtcGxhdGU7Ci0KLSAgYmFzZXNyYy0+cHJpdiA9IEdTVF9CQVNFX1NSQ19HRVRfUFJJVkFURSAoYmFzZXNyYyk7Ci0KLSAgYmFzZXNyYy0+aXNfbGl2ZSA9IEZBTFNFOwotICBnX211dGV4X2luaXQgKCZiYXNlc3JjLT5saXZlX2xvY2spOwotICBnX2NvbmRfaW5pdCAoJmJhc2VzcmMtPmxpdmVfY29uZCk7Ci0gIGJhc2VzcmMtPm51bV9idWZmZXJzID0gREVGQVVMVF9OVU1fQlVGRkVSUzsKLSAgYmFzZXNyYy0+bnVtX2J1ZmZlcnNfbGVmdCA9IC0xOwotICBiYXNlc3JjLT5wcml2LT5hdXRvbWF0aWNfZW9zID0gVFJVRTsKLQotICBiYXNlc3JjLT5jYW5fYWN0aXZhdGVfcHVzaCA9IFRSVUU7Ci0KLSAgcGFkX3RlbXBsYXRlID0KLSAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKSwgInNyYyIpOwotICBnX3JldHVybl9pZl9mYWlsIChwYWRfdGVtcGxhdGUgIT0gTlVMTCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImNyZWF0aW5nIHNyYyBwYWQiKTsKLSAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkX3RlbXBsYXRlLCAic3JjIik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInNldHRpbmcgZnVuY3Rpb25zIG9uIHNyYyBwYWQiKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uIChwYWQsIGdzdF9iYXNlX3NyY19hY3RpdmF0ZV9tb2RlKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhZCwgZ3N0X2Jhc2Vfc3JjX2V2ZW50KTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHBhZCwgZ3N0X2Jhc2Vfc3JjX3F1ZXJ5KTsKLSAgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24gKHBhZCwgZ3N0X2Jhc2Vfc3JjX2dldHJhbmdlKTsKLQotICAvKiBob2xkIHBvaW50ZXIgdG8gcGFkICovCi0gIGJhc2VzcmMtPnNyY3BhZCA9IHBhZDsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImFkZGluZyBzcmMgcGFkIik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChiYXNlc3JjKSwgcGFkKTsKLQotICBiYXNlc3JjLT5ibG9ja3NpemUgPSBERUZBVUxUX0JMT0NLU0laRTsKLSAgYmFzZXNyYy0+Y2xvY2tfaWQgPSBOVUxMOwotICAvKiB3ZSBvcGVyYXRlIGluIEJZVEVTIGJ5IGRlZmF1bHQgKi8KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKGJhc2VzcmMsIEdTVF9GT1JNQVRfQllURVMpOwotICBiYXNlc3JjLT50eXBlZmluZCA9IERFRkFVTFRfVFlQRUZJTkQ7Ci0gIGJhc2VzcmMtPnByaXYtPmRvX3RpbWVzdGFtcCA9IERFRkFVTFRfRE9fVElNRVNUQU1QOwotICBnX2F0b21pY19pbnRfc2V0ICgmYmFzZXNyYy0+cHJpdi0+aGF2ZV9ldmVudHMsIEZBTFNFKTsKLQotICBnX2NvbmRfaW5pdCAoJmJhc2VzcmMtPnByaXYtPmFzeW5jX2NvbmQpOwotICBiYXNlc3JjLT5wcml2LT5zdGFydF9yZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChiYXNlc3JjLCBHU1RfQkFTRV9TUkNfRkxBR19TVEFSVEVEKTsKLSAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChiYXNlc3JjLCBHU1RfQkFTRV9TUkNfRkxBR19TVEFSVElORyk7Ci0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGJhc2VzcmMsIEdTVF9FTEVNRU5UX0ZMQUdfU09VUkNFKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiaW5pdCBkb25lIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYmFzZV9zcmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEJhc2VTcmMgKmJhc2VzcmM7Ci0gIEdzdEV2ZW50ICoqZXZlbnRfcDsKLQotICBiYXNlc3JjID0gR1NUX0JBU0VfU1JDIChvYmplY3QpOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZiYXNlc3JjLT5saXZlX2xvY2spOwotICBnX2NvbmRfY2xlYXIgKCZiYXNlc3JjLT5saXZlX2NvbmQpOwotICBnX2NvbmRfY2xlYXIgKCZiYXNlc3JjLT5wcml2LT5hc3luY19jb25kKTsKLQotICBldmVudF9wID0gJmJhc2VzcmMtPnBlbmRpbmdfc2VlazsKLSAgZ3N0X2V2ZW50X3JlcGxhY2UgKGV2ZW50X3AsIE5VTEwpOwotCi0gIGlmIChiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cykgewotICAgIGdfbGlzdF9mb3JlYWNoIChiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cywgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsCi0gICAgICAgIE5VTEwpOwotICAgIGdfbGlzdF9mcmVlIChiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cyk7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZzoKLSAqIEBzcmM6IHRoZSBzcmMKLSAqCi0gKiBJZiB0aGUgI0dzdEJhc2VTcmNDbGFzcy5jcmVhdGUoKSBtZXRob2QgcGVyZm9ybXMgaXRzIG93biBzeW5jaHJvbmlzYXRpb24KLSAqIGFnYWluc3QgdGhlIGNsb2NrIGl0IG11c3QgdW5ibG9jayB3aGVuIGdvaW5nIGZyb20gUExBWUlORyB0byB0aGUgUEFVU0VEIHN0YXRlCi0gKiBhbmQgY2FsbCB0aGlzIG1ldGhvZCBiZWZvcmUgY29udGludWluZyB0byBwcm9kdWNlIHRoZSByZW1haW5pbmcgZGF0YS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgYSBzdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBoYXBwZW5zIChpbiB3aGljaAotICogY2FzZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgJUdTVF9GTE9XX09LKSBvciB0aGUgcHJvY2Vzc2luZyBtdXN0IGJlIHN0b3BwZWQgZHVlCi0gKiB0byBhIHN0YXRlIGNoYW5nZSB0byBSRUFEWSBvciBhIEZMVVNIIGV2ZW50IChpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24KLSAqIHJldHVybnMgJUdTVF9GTE9XX0ZMVVNISU5HKS4KLSAqCi0gKiBSZXR1cm5zOiAlR1NUX0ZMT1dfT0sgaWYgQHNyYyBpcyBQTEFZSU5HIGFuZCBwcm9jZXNzaW5nIGNhbgotICogY29udGludWUuIEFueSBvdGhlciByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGZyb20gdGhlIGNyZWF0ZSB2bWV0aG9kLgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nIChHc3RCYXNlU3JjICogc3JjKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgZG8gewotICAgIC8qIGJsb2NrIHVudGlsIHRoZSBzdGF0ZSBjaGFuZ2VzLCBvciB3ZSBnZXQgYSBmbHVzaCwgb3Igc29tZXRoaW5nICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAibGl2ZSBzb3VyY2Ugd2FpdGluZyBmb3IgcnVubmluZyBzdGF0ZSIpOwotICAgIEdTVF9MSVZFX1dBSVQgKHNyYyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAibGl2ZSBzb3VyY2UgdW5sb2NrZWQiKTsKLSAgICBpZiAoc3JjLT5wcml2LT5mbHVzaGluZykKLSAgICAgIGdvdG8gZmx1c2hpbmc7Ci0gIH0gd2hpbGUgKEdfVU5MSUtFTFkgKCFzcmMtPmxpdmVfcnVubmluZykpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLWZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAid2UgYXJlIGZsdXNoaW5nIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc3JjX3NldF9saXZlOgotICogQHNyYzogYmFzZSBzb3VyY2UgaW5zdGFuY2UKLSAqIEBsaXZlOiBuZXcgbGl2ZS1tb2RlCi0gKgotICogSWYgdGhlIGVsZW1lbnQgbGlzdGVucyB0byBhIGxpdmUgc291cmNlLCBAbGl2ZSBzaG91bGQKLSAqIGJlIHNldCB0byAlVFJVRS4KLSAqCi0gKiBBIGxpdmUgc291cmNlIHdpbGwgbm90IHByb2R1Y2UgZGF0YSBpbiB0aGUgUEFVU0VEIHN0YXRlIGFuZAotICogd2lsbCB0aGVyZWZvcmUgbm90IGJlIGFibGUgdG8gcGFydGljaXBhdGUgaW4gdGhlIFBSRVJPTEwgcGhhc2UKLSAqIG9mIGEgcGlwZWxpbmUuIFRvIHNpZ25hbCB0aGlzIGZhY3QgdG8gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUKLSAqIHBpcGVsaW5lLCB0aGUgc3RhdGUgY2hhbmdlIHJldHVybiB2YWx1ZSBvZiB0aGUgbGl2ZSBzb3VyY2Ugd2lsbAotICogYmUgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLgotICovCi12b2lkCi1nc3RfYmFzZV9zcmNfc2V0X2xpdmUgKEdzdEJhc2VTcmMgKiBzcmMsIGdib29sZWFuIGxpdmUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NSQyAoc3JjKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBzcmMtPmlzX2xpdmUgPSBsaXZlOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfaXNfbGl2ZToKLSAqIEBzcmM6IGJhc2Ugc291cmNlIGluc3RhbmNlCi0gKgotICogQ2hlY2sgaWYgYW4gZWxlbWVudCBpcyBpbiBsaXZlIG1vZGUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgZWxlbWVudCBpcyBpbiBsaXZlIG1vZGUuCi0gKi8KLWdib29sZWFuCi1nc3RfYmFzZV9zcmNfaXNfbGl2ZSAoR3N0QmFzZVNyYyAqIHNyYykKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TUkMgKHNyYyksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gIHJlc3VsdCA9IHNyYy0+aXNfbGl2ZTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdDoKLSAqIEBzcmM6IGJhc2Ugc291cmNlIGluc3RhbmNlCi0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRvIHVzZQotICoKLSAqIFNldHMgdGhlIGRlZmF1bHQgZm9ybWF0IG9mIHRoZSBzb3VyY2UuIFRoaXMgd2lsbCBiZSB0aGUgZm9ybWF0IHVzZWQKLSAqIGZvciBzZW5kaW5nIFNFR01FTlQgZXZlbnRzIGFuZCBmb3IgcGVyZm9ybWluZyBzZWVrcy4KLSAqCi0gKiBJZiBhIGZvcm1hdCBvZiBHU1RfRk9STUFUX0JZVEVTIGlzIHNldCwgdGhlIGVsZW1lbnQgd2lsbCBiZSBhYmxlIHRvCi0gKiBvcGVyYXRlIGluIHB1bGwgbW9kZSBpZiB0aGUgI0dzdEJhc2VTcmNDbGFzcy5pc19zZWVrYWJsZSgpIHJldHVybnMgJVRSVUUuCi0gKgotICogVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgY2FsbGVkIGluIHN0YXRlcyA8ICVHU1RfU1RBVEVfUEFVU0VELgotICovCi12b2lkCi1nc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoR3N0QmFzZVNyYyAqIHNyYywgR3N0Rm9ybWF0IGZvcm1hdCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX1NUQVRFIChzcmMpIDw9IEdTVF9TVEFURV9SRUFEWSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc3JjLT5zZWdtZW50LCBmb3JtYXQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZToKLSAqIEBzcmM6IGJhc2Ugc291cmNlIGluc3RhbmNlCi0gKiBAZHluYW1pYzogbmV3IGR5bmFtaWMgc2l6ZSBtb2RlCi0gKgotICogSWYgbm90IEBkeW5hbWljLCBzaXplIGlzIG9ubHkgdXBkYXRlZCB3aGVuIG5lZWRlZCwgc3VjaCBhcyB3aGVuIHRyeWluZyB0bwotICogcmVhZCBwYXN0IGN1cnJlbnQgdHJhY2tlZCBzaXplLiAgT3RoZXJ3aXNlLCBzaXplIGlzIGNoZWNrZWQgZm9yIHVwb24gZWFjaAotICogcmVhZC4KLSAqLwotdm9pZAotZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemUgKEdzdEJhc2VTcmMgKiBzcmMsIGdib29sZWFuIGR5bmFtaWMpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NSQyAoc3JjKSk7Ci0KLSAgZ19hdG9taWNfaW50X3NldCAoJnNyYy0+cHJpdi0+ZHluYW1pY19zaXplLCBkeW5hbWljKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3M6Ci0gKiBAc3JjOiBiYXNlIHNvdXJjZSBpbnN0YW5jZQotICogQGF1dG9tYXRpY19lb3M6IGF1dG9tYXRpYyBlb3MKLSAqCi0gKiBJZiBAYXV0b21hdGljX2VvcyBpcyAlVFJVRSwgQHNyYyB3aWxsIGF1dG9tYXRpY2FsbHkgZ28gRU9TIGlmIGEgYnVmZmVyCi0gKiBhZnRlciB0aGUgdG90YWwgc2l6ZSBpcyByZXR1cm5lZC4gQnkgZGVmYXVsdCB0aGlzIGlzICVUUlVFIGJ1dCBzb3VyY2VzCi0gKiB0aGF0IGNhbid0IHJldHVybiBhbiBhdXRob3JpdGF0aXZlIHNpemUgYW5kIG9ubHkga25vdyB0aGF0IHRoZXkncmUgRU9TCi0gKiB3aGVuIHRyeWluZyB0byByZWFkIG1vcmUgc2hvdWxkIHNldCB0aGlzIHRvICVGQUxTRS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9iYXNlX3NyY19zZXRfYXV0b21hdGljX2VvcyAoR3N0QmFzZVNyYyAqIHNyYywgZ2Jvb2xlYW4gYXV0b21hdGljX2VvcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpKTsKLQotICBnX2F0b21pY19pbnRfc2V0ICgmc3JjLT5wcml2LT5hdXRvbWF0aWNfZW9zLCBhdXRvbWF0aWNfZW9zKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfc2V0X2FzeW5jOgotICogQHNyYzogYmFzZSBzb3VyY2UgaW5zdGFuY2UKLSAqIEBhc3luYzogbmV3IGFzeW5jIG1vZGUKLSAqCi0gKiBDb25maWd1cmUgYXN5bmMgYmVoYXZpb3VyIGluIEBzcmMsIG5vIHN0YXRlIGNoYW5nZSB3aWxsIGJsb2NrLiBUaGUgb3BlbiwKLSAqIGNsb3NlLCBzdGFydCwgc3RvcCwgcGxheSBhbmQgcGF1c2UgdmlydHVhbCBtZXRob2RzIHdpbGwgYmUgZXhlY3V0ZWQgaW4gYQotICogZGlmZmVyZW50IHRocmVhZCBhbmQgYXJlIHRodXMgYWxsb3dlZCB0byBwZXJmb3JtIGJsb2NraW5nIG9wZXJhdGlvbnMuIEFueQotICogYmxvY2tpbmcgb3BlcmF0aW9uIHNob3VsZCBiZSB1bmJsb2NrZWQgd2l0aCB0aGUgdW5sb2NrIHZtZXRob2QuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3NyY19zZXRfYXN5bmMgKEdzdEJhc2VTcmMgKiBzcmMsIGdib29sZWFuIGFzeW5jKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TUkMgKHNyYykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgc3JjLT5wcml2LT5hc3luYyA9IGFzeW5jOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfaXNfYXN5bmM6Ci0gKiBAc3JjOiBiYXNlIHNvdXJjZSBpbnN0YW5jZQotICoKLSAqIEdldCB0aGUgY3VycmVudCBhc3luYyBiZWhhdmlvdXIgb2YgQHNyYy4gU2VlIGFsc28gZ3N0X2Jhc2Vfc3JjX3NldF9hc3luYygpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBzcmMgaXMgb3BlcmF0aW5nIGluIGFzeW5jIG1vZGUuCi0gKi8KLWdib29sZWFuCi1nc3RfYmFzZV9zcmNfaXNfYXN5bmMgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICByZXMgPSBzcmMtPnByaXYtPmFzeW5jOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0KLS8qKgotICogZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3k6Ci0gKiBAc3JjOiB0aGUgc291cmNlCi0gKiBAbGl2ZTogKG91dCkgKGFsbG93LW5vbmUpOiBpZiB0aGUgc291cmNlIGlzIGxpdmUKLSAqIEBtaW5fbGF0ZW5jeTogKG91dCkgKGFsbG93LW5vbmUpOiB0aGUgbWluIGxhdGVuY3kgb2YgdGhlIHNvdXJjZQotICogQG1heF9sYXRlbmN5OiAob3V0KSAoYWxsb3ctbm9uZSk6IHRoZSBtYXggbGF0ZW5jeSBvZiB0aGUgc291cmNlCi0gKgotICogUXVlcnkgdGhlIHNvdXJjZSBmb3IgdGhlIGxhdGVuY3kgcGFyYW1ldGVycy4gQGxpdmUgd2lsbCBiZSAlVFJVRSB3aGVuIEBzcmMgaXMKLSAqIGNvbmZpZ3VyZWQgYXMgYSBsaXZlIHNvdXJjZS4gQG1pbl9sYXRlbmN5IGFuZCBAbWF4X2xhdGVuY3kgd2lsbCBiZSBzZXQKLSAqIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHJ1bm5pbmcgdGltZSBhbmQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgZmlyc3QKLSAqIGJ1ZmZlci4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSB1c2VkIGJ5IHN1YmNsYXNzZXMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHF1ZXJ5IHN1Y2NlZWRlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5IChHc3RCYXNlU3JjICogc3JjLCBnYm9vbGVhbiAqIGxpdmUsCi0gICAgR3N0Q2xvY2tUaW1lICogbWluX2xhdGVuY3ksIEdzdENsb2NrVGltZSAqIG1heF9sYXRlbmN5KQotewotICBHc3RDbG9ja1RpbWUgbWluOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TUkMgKHNyYyksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gIGlmIChsaXZlKQotICAgICpsaXZlID0gc3JjLT5pc19saXZlOwotCi0gIC8qIGlmIHdlIGhhdmUgYSBzdGFydHVwIGxhdGVuY3ksIHJlcG9ydCB0aGlzIG9uZSwgZWxzZSByZXBvcnQgMC4gU3ViY2xhc3NlcwotICAgKiBhcmUgc3VwcG9zZWQgdG8gb3ZlcnJpZGUgdGhlIHF1ZXJ5IGZ1bmN0aW9uIGlmIHRoZXkgd2FudCBzb21ldGhpbmcKLSAgICogZWxzZS4gKi8KLSAgaWYgKHNyYy0+cHJpdi0+bGF0ZW5jeSAhPSAtMSkKLSAgICBtaW4gPSBzcmMtPnByaXYtPmxhdGVuY3k7Ci0gIGVsc2UKLSAgICBtaW4gPSAwOwotCi0gIGlmIChtaW5fbGF0ZW5jeSkKLSAgICAqbWluX2xhdGVuY3kgPSBtaW47Ci0gIGlmIChtYXhfbGF0ZW5jeSkKLSAgICAqbWF4X2xhdGVuY3kgPSBtaW47Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNyYywgImxhdGVuY3k6IGxpdmUgJWQsIG1pbiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIsIG1heCAlIiBHU1RfVElNRV9GT1JNQVQsIHNyYy0+aXNfbGl2ZSwgR1NUX1RJTUVfQVJHUyAobWluKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKG1pbikpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZToKLSAqIEBzcmM6IHRoZSBzb3VyY2UKLSAqIEBibG9ja3NpemU6IHRoZSBuZXcgYmxvY2tzaXplIGluIGJ5dGVzCi0gKgotICogU2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBAc3JjIHdpbGwgcHVzaCBvdXQgd2l0aCBlYWNoIGJ1ZmZlci4gV2hlbgotICogQGJsb2Nrc2l6ZSBpcyBzZXQgdG8gLTEsIGEgZGVmYXVsdCBsZW5ndGggd2lsbCBiZSB1c2VkLgotICovCi12b2lkCi1nc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQgYmxvY2tzaXplKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TUkMgKHNyYykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgc3JjLT5ibG9ja3NpemUgPSBibG9ja3NpemU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplOgotICogQHNyYzogdGhlIHNvdXJjZQotICoKLSAqIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgQHNyYyB3aWxsIHB1c2ggb3V0IHdpdGggZWFjaCBidWZmZXIuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiBieXRlcyBwdXNoZWQgd2l0aCBlYWNoIGJ1ZmZlci4KLSAqLwotZ3VpbnQKLWdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplIChHc3RCYXNlU3JjICogc3JjKQotewotICBnaW50IHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpLCAwKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gIHJlcyA9IHNyYy0+YmxvY2tzaXplOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0KLS8qKgotICogZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXA6Ci0gKiBAc3JjOiB0aGUgc291cmNlCi0gKiBAdGltZXN0YW1wOiBlbmFibGUgb3IgZGlzYWJsZSB0aW1lc3RhbXBpbmcKLSAqCi0gKiBDb25maWd1cmUgQHNyYyB0byBhdXRvbWF0aWNhbGx5IHRpbWVzdGFtcCBvdXRnb2luZyBidWZmZXJzIGJhc2VkIG9uIHRoZQotICogY3VycmVudCBydW5uaW5nX3RpbWUgb2YgdGhlIHBpcGVsaW5lLiBUaGlzIHByb3BlcnR5IGlzIG1vc3RseSB1c2VmdWwgZm9yIGxpdmUKLSAqIHNvdXJjZXMuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wIChHc3RCYXNlU3JjICogc3JjLCBnYm9vbGVhbiB0aW1lc3RhbXApCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1NSQyAoc3JjKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBzcmMtPnByaXYtPmRvX3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgaWYgKHRpbWVzdGFtcCAmJiBzcmMtPnNlZ21lbnQuZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkKLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmc3JjLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcDoKLSAqIEBzcmM6IHRoZSBzb3VyY2UKLSAqCi0gKiBRdWVyeSBpZiBAc3JjIHRpbWVzdGFtcHMgb3V0Z29pbmcgYnVmZmVycyBiYXNlZCBvbiB0aGUgY3VycmVudCBydW5uaW5nX3RpbWUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGJhc2UgY2xhc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHRpbWVzdGFtcCBvdXRnb2luZyBidWZmZXJzLgotICovCi1nYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX2dldF9kb190aW1lc3RhbXAgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfU1JDIChzcmMpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICByZXMgPSBzcmMtPnByaXYtPmRvX3RpbWVzdGFtcDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQ6Ci0gKiBAc3JjOiBUaGUgc291cmNlCi0gKiBAc3RhcnQ6IFRoZSBuZXcgc3RhcnQgdmFsdWUgZm9yIHRoZSBzZWdtZW50Ci0gKiBAc3RvcDogU3RvcCB2YWx1ZSBmb3IgdGhlIG5ldyBzZWdtZW50Ci0gKiBAdGltZTogVGhlIG5ldyB0aW1lIHZhbHVlIGZvciB0aGUgc3RhcnQgb2YgdGhlIG5ldyBzZWdtZW50Ci0gKgotICogUHJlcGFyZSBhIG5ldyBzZWFtbGVzcyBzZWdtZW50IGZvciBlbWlzc2lvbiBkb3duc3RyZWFtLiBUaGlzIGZ1bmN0aW9uIG11c3QKLSAqIG9ubHkgYmUgY2FsbGVkIGJ5IGRlcml2ZWQgc3ViLWNsYXNzZXMsIGFuZCBvbmx5IGZyb20gdGhlIGNyZWF0ZSgpIGZ1bmN0aW9uLAotICogYXMgdGhlIHN0cmVhbS1sb2NrIG5lZWRzIHRvIGJlIGhlbGQuCi0gKgotICogVGhlIGZvcm1hdCBmb3IgdGhlIG5ldyBzZWdtZW50IHdpbGwgYmUgdGhlIGN1cnJlbnQgZm9ybWF0IG9mIHRoZSBzb3VyY2UsIGFzCi0gKiBjb25maWd1cmVkIHdpdGggZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQoKQotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHByZXBhcmF0aW9uIG9mIHRoZSBzZWFtbGVzcyBzZWdtZW50IHN1Y2NlZWRlZC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19uZXdfc2VhbWxlc3Nfc2VnbWVudCAoR3N0QmFzZVNyYyAqIHNyYywgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCwKLSAgICBnaW50NjQgdGltZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0KLSAgc3JjLT5zZWdtZW50LmJhc2UgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzcmMtPnNlZ21lbnQsCi0gICAgICBzcmMtPnNlZ21lbnQuZm9ybWF0LCBzcmMtPnNlZ21lbnQucG9zaXRpb24pOwotICBzcmMtPnNlZ21lbnQucG9zaXRpb24gPSBzcmMtPnNlZ21lbnQuc3RhcnQgPSBzdGFydDsKLSAgc3JjLT5zZWdtZW50LnN0b3AgPSBzdG9wOwotICBzcmMtPnNlZ21lbnQudGltZSA9IHRpbWU7Ci0KLSAgLyogTWFyayBwZW5kaW5nIHNlZ21lbnQuIFdpbGwgYmUgc2VudCBiZWZvcmUgbmV4dCBkYXRhICovCi0gIHNyYy0+cHJpdi0+c2VnbWVudF9wZW5kaW5nID0gVFJVRTsKLSAgc3JjLT5wcml2LT5zZWdtZW50X3NlcW51bSA9IGdzdF91dGlsX3NlcW51bV9uZXh0ICgpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywKLSAgICAgICJTdGFydGluZyBuZXcgc2VhbWxlc3Mgc2VnbWVudC4gU3RhcnQgJSIgR1NUX1RJTUVfRk9STUFUICIgc3RvcCAlIgotICAgICAgR1NUX1RJTUVfRk9STUFUICIgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiBiYXNlICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSwgR1NUX1RJTUVfQVJHUyAoc3RvcCksIEdTVF9USU1FX0FSR1MgKHRpbWUpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoc3JjLT5zZWdtZW50LmJhc2UpKTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICBzcmMtPnByaXYtPmRpc2NvbnQgPSBUUlVFOwotICBzcmMtPnJ1bm5pbmcgPSBUUlVFOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX3NlbmRfc3RyZWFtX3N0YXJ0IChHc3RCYXNlU3JjICogc3JjKQotewotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIGlmIChzcmMtPnByaXYtPnN0cmVhbV9zdGFydF9wZW5kaW5nKSB7Ci0gICAgZ2NoYXIgKnN0cmVhbV9pZDsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBzdHJlYW1faWQgPQotICAgICAgICBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWQgKHNyYy0+c3JjcGFkLCBHU1RfRUxFTUVOVF9DQVNUIChzcmMpLCBOVUxMKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlB1c2hpbmcgU1RSRUFNX1NUQVJUIik7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc3RyZWFtX2lkKTsKLSAgICBnc3RfZXZlbnRfc2V0X2dyb3VwX2lkIChldmVudCwgZ3N0X3V0aWxfZ3JvdXBfaWRfbmV4dCAoKSk7Ci0KLSAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYy0+c3JjcGFkLCBldmVudCk7Ci0gICAgc3JjLT5wcml2LT5zdHJlYW1fc3RhcnRfcGVuZGluZyA9IEZBTFNFOwotICAgIGdfZnJlZSAoc3RyZWFtX2lkKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2Vfc3JjX3NldF9jYXBzOgotICogQHNyYzogYSAjR3N0QmFzZVNyYwotICogQGNhcHM6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0Q2FwcwotICoKLSAqIFNldCBuZXcgY2FwcyBvbiB0aGUgYmFzZXNyYyBzb3VyY2UgcGFkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjYXBzIGNvdWxkIGJlIHNldAotICovCi1nYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX3NldF9jYXBzIChHc3RCYXNlU3JjICogc3JjLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdENhcHMgKmN1cnJlbnRfY2FwczsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOwotCi0gIGdzdF9iYXNlX3NyY19zZW5kX3N0cmVhbV9zdGFydCAoc3JjKTsKLQotICBjdXJyZW50X2NhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9CQVNFX1NSQ19QQUQgKHNyYykpOwotICBpZiAoY3VycmVudF9jYXBzICYmIGdzdF9jYXBzX2lzX2VxdWFsIChjdXJyZW50X2NhcHMsIGNhcHMpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiTmV3IGNhcHMgZXF1YWwgdG8gb2xkIG9uZXM6ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICBjYXBzKTsKLSAgICByZXMgPSBUUlVFOwotICB9IGVsc2UgewotICAgIGlmIChiY2xhc3MtPnNldF9jYXBzKQotICAgICAgcmVzID0gYmNsYXNzLT5zZXRfY2FwcyAoc3JjLCBjYXBzKTsKLQotICAgIGlmIChyZXMpCi0gICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYy0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgfQotCi0gIGlmIChjdXJyZW50X2NhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGN1cnJlbnRfY2Fwcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfZ2V0X2NhcHMgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgR3N0UGFkVGVtcGxhdGUgKnBhZF90ZW1wbGF0ZTsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoYnNyYyk7Ci0KLSAgcGFkX3RlbXBsYXRlID0KLSAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChiY2xhc3MpLCAic3JjIik7Ci0KLSAgaWYgKHBhZF90ZW1wbGF0ZSAhPSBOVUxMKSB7Ci0gICAgY2FwcyA9IGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKHBhZF90ZW1wbGF0ZSk7Ci0KLSAgICBpZiAoZmlsdGVyKSB7Ci0gICAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgY2FwcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgIGNhcHMgPSBpbnRlcnNlY3Rpb247Ci0gICAgfQotICB9Ci0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfYmFzZV9zcmNfZGVmYXVsdF9maXhhdGUgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYnNyYywgInVzaW5nIGRlZmF1bHQgY2FwcyBmaXhhdGUgZnVuY3Rpb24iKTsKLSAgcmV0dXJuIGdzdF9jYXBzX2ZpeGF0ZSAoY2Fwcyk7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9iYXNlX3NyY19maXhhdGUgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoYnNyYyk7Ci0KLSAgaWYgKGJjbGFzcy0+Zml4YXRlKQotICAgIGNhcHMgPSBiY2xhc3MtPmZpeGF0ZSAoYnNyYywgY2Fwcyk7Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfcXVlcnkgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicG9zaXRpb24gcXVlcnkgaW4gZm9ybWF0ICVzIiwKLSAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpKTsKLQotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX1BFUkNFTlQ6Ci0gICAgICAgIHsKLSAgICAgICAgICBnaW50NjQgcGVyY2VudDsKLSAgICAgICAgICBnaW50NjQgcG9zaXRpb247Ci0gICAgICAgICAgZ2ludDY0IGR1cmF0aW9uOwotCi0gICAgICAgICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICAgICAgICAgIHBvc2l0aW9uID0gc3JjLT5zZWdtZW50LnBvc2l0aW9uOwotICAgICAgICAgIGR1cmF0aW9uID0gc3JjLT5zZWdtZW50LmR1cmF0aW9uOwotICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotCi0gICAgICAgICAgaWYgKHBvc2l0aW9uICE9IC0xICYmIGR1cmF0aW9uICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPCBkdXJhdGlvbikKLSAgICAgICAgICAgICAgcGVyY2VudCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCwgcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICBkdXJhdGlvbik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHBlcmNlbnQgPSBHU1RfRk9STUFUX1BFUkNFTlRfTUFYOwotICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGVyY2VudCA9IC0xOwotCi0gICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfUEVSQ0VOVCwgcGVyY2VudCk7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAgZ2ludDY0IHBvc2l0aW9uOwotICAgICAgICAgIEdzdEZvcm1hdCBzZWdfZm9ybWF0OwotCi0gICAgICAgICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICAgICAgICAgIHBvc2l0aW9uID0KLSAgICAgICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzcmMtPnNlZ21lbnQsIHNyYy0+c2VnbWVudC5mb3JtYXQsCi0gICAgICAgICAgICAgIHNyYy0+c2VnbWVudC5wb3NpdGlvbik7Ci0gICAgICAgICAgc2VnX2Zvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7Ci0gICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgICAgICAgICBpZiAocG9zaXRpb24gIT0gLTEpIHsKLSAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gcmVxdWVzdGVkIGZvcm1hdCAqLwotICAgICAgICAgICAgcmVzID0KLSAgICAgICAgICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHNyYy0+c3JjcGFkLCBzZWdfZm9ybWF0LAotICAgICAgICAgICAgICAgIHBvc2l0aW9uLCBmb3JtYXQsICZwb3NpdGlvbik7Ci0gICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXMgPSBUUlVFOwotCi0gICAgICAgICAgaWYgKHJlcykKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIHBvc2l0aW9uKTsKLQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046Ci0gICAgewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsCi0gICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSk7Ci0KLSAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9QRVJDRU5UOgotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX1BFUkNFTlQsCi0gICAgICAgICAgICAgIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgpOwotICAgICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICBnaW50NjQgZHVyYXRpb247Ci0gICAgICAgICAgR3N0Rm9ybWF0IHNlZ19mb3JtYXQ7Ci0gICAgICAgICAgZ3VpbnQgbGVuZ3RoID0gMDsKLQotICAgICAgICAgIC8qIG1heSBoYXZlIHRvIHJlZnJlc2ggZHVyYXRpb24gKi8KLSAgICAgICAgICBnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCAoc3JjLCAwLCAmbGVuZ3RoLAotICAgICAgICAgICAgICBnX2F0b21pY19pbnRfZ2V0ICgmc3JjLT5wcml2LT5keW5hbWljX3NpemUpKTsKLQotICAgICAgICAgIC8qIHRoaXMgaXMgdGhlIGR1cmF0aW9uIGFzIGNvbmZpZ3VyZWQgYnkgdGhlIHN1YmNsYXNzLiAqLwotICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICAgICAgICBkdXJhdGlvbiA9IHNyYy0+c2VnbWVudC5kdXJhdGlvbjsKLSAgICAgICAgICBzZWdfZm9ybWF0ID0gc3JjLT5zZWdtZW50LmZvcm1hdDsKLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJkdXJhdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgZm9ybWF0ICVzIiwKLSAgICAgICAgICAgICAgZHVyYXRpb24sIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNlZ19mb3JtYXQpKTsKLQotICAgICAgICAgIGlmIChkdXJhdGlvbiAhPSAtMSkgewotICAgICAgICAgICAgLyogY29udmVydCB0byByZXF1ZXN0ZWQgZm9ybWF0LCBpZiB0aGlzIGZhaWxzLCB3ZSBoYXZlIGEgZHVyYXRpb24KLSAgICAgICAgICAgICAqIGJ1dCB3ZSBjYW5ub3QgYW5zd2VyIHRoZSBxdWVyeSwgd2UgbXVzdCByZXR1cm4gRkFMU0UuICovCi0gICAgICAgICAgICByZXMgPQotICAgICAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfY29udmVydCAoc3JjLT5zcmNwYWQsIHNlZ19mb3JtYXQsCi0gICAgICAgICAgICAgICAgZHVyYXRpb24sIGZvcm1hdCwgJmR1cmF0aW9uKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogVGhlIHN1YmNsYXNzIGRpZCBub3QgY29uZmlndXJlIGEgZHVyYXRpb24sIHdlIGFzc3VtZSB0aGF0IHRoZQotICAgICAgICAgICAgICogbWVkaWEgaGFzIGFuIHVua25vd24gZHVyYXRpb24gdGhlbiBhbmQgd2UgcmV0dXJuIFRSVUUgdG8gcmVwb3J0Ci0gICAgICAgICAgICAgKiB0aGlzLiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuaW5nIEZBTFNFLCB3aGljaAotICAgICAgICAgICAgICogbWVhbnMgdGhhdCB3ZSBjYW5ub3QgcmVwb3J0IHRoZSBkdXJhdGlvbiBhdCBhbGwuICovCi0gICAgICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChyZXMpCi0gICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgZm9ybWF0LCBkdXJhdGlvbik7Ci0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBHU1RfUVVFUllfU0VFS0lORzoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0LCBzZWdfZm9ybWF0OwotICAgICAgZ2ludDY0IGR1cmF0aW9uOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gICAgICBkdXJhdGlvbiA9IHNyYy0+c2VnbWVudC5kdXJhdGlvbjsKLSAgICAgIHNlZ19mb3JtYXQgPSBzcmMtPnNlZ21lbnQuZm9ybWF0OwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZiAoZm9ybWF0ID09IHNlZ19mb3JtYXQpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgc2VnX2Zvcm1hdCwKLSAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zZWVrYWJsZSAoc3JjKSwgMCwgZHVyYXRpb24pOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogRklYTUUgMi4wOiByZXR1cm4gVFJVRSArIHNlZWthYmxlPUZBTFNFIGZvciBTRUVLSU5HIHF1ZXJ5IGhlcmUgKi8KLSAgICAgICAgLyogRG9uJ3QgcmVwbHkgdG8gdGhlIHF1ZXJ5IHRvIG1ha2UgdXAgZm9yIGRlbXV4ZXJzIHdoaWNoIGRvbid0Ci0gICAgICAgICAqIGhhbmRsZSB0aGUgU0VFS0lORyBxdWVyeSB5ZXQuIFBsYXllcnMgbGlrZSBUb3RlbSB3aWxsIGZhbGwgYmFjawotICAgICAgICAgKiB0byB0aGUgZHVyYXRpb24gd2hlbiB0aGUgU0VFS0lORyBxdWVyeSBpc24ndCBhbnN3ZXJlZC4gKi8KLSAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0KLSAgICAgIGZvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7Ci0KLSAgICAgIHN0YXJ0ID0KLSAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNyYy0+c2VnbWVudCwgZm9ybWF0LAotICAgICAgICAgIHNyYy0+c2VnbWVudC5zdGFydCk7Ci0gICAgICBpZiAoKHN0b3AgPSBzcmMtPnNlZ21lbnQuc3RvcCkgPT0gLTEpCi0gICAgICAgIHN0b3AgPSBzcmMtPnNlZ21lbnQuZHVyYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIHN0b3AgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNyYy0+c2VnbWVudCwgZm9ybWF0LCBzdG9wKTsKLQotICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWdtZW50IChxdWVyeSwgc3JjLT5zZWdtZW50LnJhdGUsIGZvcm1hdCwgc3RhcnQsIHN0b3ApOwotCi0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdTVF9RVUVSWV9GT1JNQVRTOgotICAgIHsKLSAgICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDMsIEdTVF9GT1JNQVRfREVGQVVMVCwKLSAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBHU1RfRk9STUFUX1BFUkNFTlQpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9DT05WRVJUOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBzcmNfZm10LCBkZXN0X2ZtdDsKLSAgICAgIGdpbnQ2NCBzcmNfdmFsLCBkZXN0X3ZhbDsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnQgKHF1ZXJ5LCAmc3JjX2ZtdCwgJnNyY192YWwsICZkZXN0X2ZtdCwgJmRlc3RfdmFsKTsKLQotICAgICAgLyogd2UgY2FuIG9ubHkgY29udmVydCBiZXR3ZWVuIGVxdWFsIGZvcm1hdHMuLi4gKi8KLSAgICAgIGlmIChzcmNfZm10ID09IGRlc3RfZm10KSB7Ci0gICAgICAgIGRlc3RfdmFsID0gc3JjX3ZhbDsKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIH0gZWxzZQotICAgICAgICByZXMgPSBGQUxTRTsKLQotICAgICAgZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0IChxdWVyeSwgc3JjX2ZtdCwgc3JjX3ZhbCwgZGVzdF9mbXQsIGRlc3RfdmFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIEdzdENsb2NrVGltZSBtaW4sIG1heDsKLSAgICAgIGdib29sZWFuIGxpdmU7Ci0KLSAgICAgIC8qIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGFuZCBpbXBsZW1lbnQgc29tZXRoaW5nIHVzZWZ1bCAqLwotICAgICAgcmVzID0gZ3N0X2Jhc2Vfc3JjX3F1ZXJ5X2xhdGVuY3kgKHNyYywgJmxpdmUsICZtaW4sICZtYXgpOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAicmVwb3J0IGxhdGVuY3k6IGxpdmUgJWQsIG1pbiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAiLCBtYXggJSIgR1NUX1RJTUVfRk9STUFULCBsaXZlLCBHU1RfVElNRV9BUkdTIChtaW4pLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1heCkpOwotCi0gICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKHF1ZXJ5LCBsaXZlLCBtaW4sIG1heCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfSklUVEVSOgotICAgIGNhc2UgR1NUX1FVRVJZX1JBVEU6Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FVRVJZX0JVRkZFUklORzoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0LCBzZWdfZm9ybWF0OwotICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wLCBlc3RpbWF0ZWQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYnVmZmVyaW5nIHF1ZXJ5IGluIGZvcm1hdCAlcyIsCi0gICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSk7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICAgIGlmIChzcmMtPnJhbmRvbV9hY2Nlc3MpIHsKLSAgICAgICAgZXN0aW1hdGVkID0gMDsKLSAgICAgICAgc3RhcnQgPSAwOwotICAgICAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfUEVSQ0VOVCkKLSAgICAgICAgICBzdG9wID0gR1NUX0ZPUk1BVF9QRVJDRU5UX01BWDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHN0b3AgPSBzcmMtPnNlZ21lbnQuZHVyYXRpb247Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlc3RpbWF0ZWQgPSAtMTsKLSAgICAgICAgc3RhcnQgPSAtMTsKLSAgICAgICAgc3RvcCA9IC0xOwotICAgICAgfQotICAgICAgc2VnX2Zvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICAgICAgLyogY29udmVydCB0byByZXF1aXJlZCBmb3JtYXQuIFdoZW4gdGhlIGNvbnZlcnNpb24gZmFpbHMsIHdlIGNhbid0IGFuc3dlcgotICAgICAgICogdGhlIHF1ZXJ5LiBXaGVuIHRoZSB2YWx1ZSBpcyB1bmtub3duLCB3ZSBjYW4gZG9uJ3QgcGVyZm9ybSBjb252ZXJzaW9uCi0gICAgICAgKiBidXQgcmVwb3J0IFRSVUUuICovCi0gICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfUEVSQ0VOVCAmJiBzdG9wICE9IC0xKSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfY29udmVydCAoc3JjLT5zcmNwYWQsIHNlZ19mb3JtYXQsCi0gICAgICAgICAgICBzdG9wLCBmb3JtYXQsICZzdG9wKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBpZiAocmVzICYmIGZvcm1hdCAhPSBHU1RfRk9STUFUX1BFUkNFTlQgJiYgc3RhcnQgIT0gLTEpCi0gICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfY29udmVydCAoc3JjLT5zcmNwYWQsIHNlZ19mb3JtYXQsCi0gICAgICAgICAgICBzdGFydCwgZm9ybWF0LCAmc3RhcnQpOwotCi0gICAgICBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZSAocXVlcnksIGZvcm1hdCwgc3RhcnQsIHN0b3AsIGVzdGltYXRlZCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzoKLSAgICB7Ci0gICAgICBnYm9vbGVhbiByYW5kb21fYWNjZXNzOwotCi0gICAgICByYW5kb21fYWNjZXNzID0gZ3N0X2Jhc2Vfc3JjX2lzX3JhbmRvbV9hY2Nlc3MgKHNyYyk7Ci0KLSAgICAgIC8qIHdlIGNhbiBvcGVyYXRlIGluIGdldHJhbmdlIG1vZGUgaWYgdGhlIG5hdGl2ZSBmb3JtYXQgaXMgYnl0ZXMKLSAgICAgICAqIGFuZCB3ZSBhcmUgc2Vla2FibGUsIHRoaXMgY29uZGl0aW9uIGlzIHNldCBpbiB0aGUgcmFuZG9tX2FjY2VzcwotICAgICAgICogZmxhZyBhbmQgaXMgc2V0IGluIHRoZSBfc3RhcnQoKSBtZXRob2QuICovCi0gICAgICBnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKHF1ZXJ5LCBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFLCAxLCAtMSwgMCk7Ci0gICAgICBpZiAocmFuZG9tX2FjY2VzcykKLSAgICAgICAgZ3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGUgKHF1ZXJ5LCBHU1RfUEFEX01PREVfUFVMTCk7Ci0gICAgICBnc3RfcXVlcnlfYWRkX3NjaGVkdWxpbmdfbW9kZSAocXVlcnksIEdTVF9QQURfTU9ERV9QVVNIKTsKLQotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgIHsKLSAgICAgIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOwotICAgICAgR3N0Q2FwcyAqY2FwcywgKmZpbHRlcjsKLQotICAgICAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoc3JjKTsKLSAgICAgIGlmIChiY2xhc3MtPmdldF9jYXBzKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICAgIGlmICgoY2FwcyA9IGJjbGFzcy0+Z2V0X2NhcHMgKHNyYywgZmlsdGVyKSkpIHsKLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZQotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9VUkk6ewotICAgICAgaWYgKEdTVF9JU19VUklfSEFORExFUiAoc3JjKSkgewotICAgICAgICBnY2hhciAqdXJpID0gZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKEdTVF9VUklfSEFORExFUiAoc3JjKSk7Ci0KLSAgICAgICAgaWYgKHVyaSAhPSBOVUxMKSB7Ci0gICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkgKHF1ZXJ5LCB1cmkpOwotICAgICAgICAgIGdfZnJlZSAodXJpKTsKLSAgICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJxdWVyeSAlcyByZXR1cm5zICVkIiwgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpLAotICAgICAgcmVzKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdEJhc2VTcmMgKnNyYzsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotCi0gIHNyYyA9IEdTVF9CQVNFX1NSQyAocGFyZW50KTsKLSAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoc3JjKTsKLQotICBpZiAoYmNsYXNzLT5xdWVyeSkKLSAgICByZXN1bHQgPSBiY2xhc3MtPnF1ZXJ5IChzcmMsIHF1ZXJ5KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19kZWZhdWx0X2RvX3NlZWsgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFNlZ21lbnQgKiBzZWdtZW50KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIC8qIHVwZGF0ZSBvdXIgb2Zmc2V0IGlmIHRoZSBzdGFydC9zdG9wIHBvc2l0aW9uIHdhcyB1cGRhdGVkICovCi0gIGlmIChzZWdtZW50LT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUykgewotICAgIHNlZ21lbnQtPnRpbWUgPSBzZWdtZW50LT5zdGFydDsKLSAgfSBlbHNlIGlmIChzZWdtZW50LT5zdGFydCA9PSAwKSB7Ci0gICAgLyogc2VlayB0byBzdGFydCwgd2UgY2FuIGltcGxlbWVudCBhIGRlZmF1bHQgZm9yIHRoaXMuICovCi0gICAgc2VnbWVudC0+dGltZSA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJDYW4ndCBkbyBhIGRlZmF1bHQgc2VlayIpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zcmNfZG9fc2VlayAoR3N0QmFzZVNyYyAqIHNyYywgR3N0U2VnbWVudCAqIHNlZ21lbnQpCi17Ci0gIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOwotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOwotCi0gIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAic2Vla2luZzogJSIgR1NUX1NFR01FTlRfRk9STUFULCBzZWdtZW50KTsKLQotICBpZiAoYmNsYXNzLT5kb19zZWVrKQotICAgIHJlc3VsdCA9IGJjbGFzcy0+ZG9fc2VlayAoc3JjLCBzZWdtZW50KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0jZGVmaW5lIFNFRUtfVFlQRV9JU19SRUxBVElWRSh0KSAoKCh0KSAhPSBHU1RfU0VFS19UWVBFX05PTkUpICYmICgodCkgIT0gR1NUX1NFRUtfVFlQRV9TRVQpKQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19kZWZhdWx0X3ByZXBhcmVfc2Vla19zZWdtZW50IChHc3RCYXNlU3JjICogc3JjLCBHc3RFdmVudCAqIGV2ZW50LAotICAgIEdzdFNlZ21lbnQgKiBzZWdtZW50KQotewotICAvKiBCeSBkZWZhdWx0LCB3ZSB0cnkgb25lIG9mIDIgdGhpbmdzOgotICAgKiAgIC0gRm9yIGFic29sdXRlIHNlZWsgcG9zaXRpb25zLCBjb252ZXJ0IHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gdG8gb3VyCi0gICAqICAgICBjb25maWd1cmVkIHByb2Nlc3NpbmcgZm9ybWF0IGFuZCBwbGFjZSBpdCBpbiB0aGUgb3V0cHV0IHNlZ21lbnQgXAotICAgKiAgIC0gRm9yIHJlbGF0aXZlIHNlZWsgcG9zaXRpb25zLCBjb252ZXJ0IG91ciBjdXJyZW50IChpbnB1dCkgdmFsdWVzIHRvIHRoZQotICAgKiAgICAgc2VlayBmb3JtYXQsIGFkanVzdCBieSB0aGUgcmVsYXRpdmUgc2VlayBvZmZzZXQgYW5kIHRoZW4gY29udmVydCBiYWNrIHRvCi0gICAqICAgICB0aGUgcHJvY2Vzc2luZyBmb3JtYXQKLSAgICovCi0gIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUsIHN0b3BfdHlwZTsKLSAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gIEdzdEZvcm1hdCBzZWVrX2Zvcm1hdCwgZGVzdF9mb3JtYXQ7Ci0gIGdkb3VibGUgcmF0ZTsKLSAgZ2Jvb2xlYW4gdXBkYXRlOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGdzdF9ldmVudF9wYXJzZV9zZWVrIChldmVudCwgJnJhdGUsICZzZWVrX2Zvcm1hdCwgJmZsYWdzLAotICAgICAgJnN0YXJ0X3R5cGUsICZzdGFydCwgJnN0b3BfdHlwZSwgJnN0b3ApOwotICBkZXN0X2Zvcm1hdCA9IHNlZ21lbnQtPmZvcm1hdDsKLQotICBpZiAoc2Vla19mb3JtYXQgPT0gZGVzdF9mb3JtYXQpIHsKLSAgICBnc3Rfc2VnbWVudF9kb19zZWVrIChzZWdtZW50LCByYXRlLCBzZWVrX2Zvcm1hdCwgZmxhZ3MsCi0gICAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgaWYgKHN0YXJ0X3R5cGUgIT0gR1NUX1NFRUtfVFlQRV9OT05FKSB7Ci0gICAgLyogRklYTUU6IEhhbmRsZSBzZWVrX2VuZCBieSBjb252ZXJ0aW5nIHRoZSBpbnB1dCBzZWdtZW50IHZhbHMgKi8KLSAgICByZXMgPQotICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHNyYy0+c3JjcGFkLCBzZWVrX2Zvcm1hdCwgc3RhcnQsIGRlc3RfZm9ybWF0LAotICAgICAgICAmc3RhcnQpOwotICAgIHN0YXJ0X3R5cGUgPSBHU1RfU0VFS19UWVBFX1NFVDsKLSAgfQotCi0gIGlmIChyZXMgJiYgc3RvcF90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkgewotICAgIC8qIEZJWE1FOiBIYW5kbGUgc2Vla19lbmQgYnkgY29udmVydGluZyB0aGUgaW5wdXQgc2VnbWVudCB2YWxzICovCi0gICAgcmVzID0KLSAgICAgICAgZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChzcmMtPnNyY3BhZCwgc2Vla19mb3JtYXQsIHN0b3AsIGRlc3RfZm9ybWF0LAotICAgICAgICAmc3RvcCk7Ci0gICAgc3RvcF90eXBlID0gR1NUX1NFRUtfVFlQRV9TRVQ7Ci0gIH0KLQotICAvKiBBbmQgZmluYWxseSwgY29uZmlndXJlIG91ciBvdXRwdXQgc2VnbWVudCBpbiB0aGUgZGVzaXJlZCBmb3JtYXQgKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoc2VnbWVudCwgcmF0ZSwgZGVzdF9mb3JtYXQsIGZsYWdzLCBzdGFydF90eXBlLCBzdGFydCwKLSAgICAgIHN0b3BfdHlwZSwgc3RvcCwgJnVwZGF0ZSk7Ci0KLSAgaWYgKCFyZXMpCi0gICAgZ290byBub19mb3JtYXQ7Ci0KLSAgcmV0dXJuIHJlczsKLQotbm9fZm9ybWF0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAidW5kZWZpbmVkIGZvcm1hdCBnaXZlbiwgc2VlayBhYm9ydGVkLiIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19wcmVwYXJlX3NlZWtfc2VnbWVudCAoR3N0QmFzZVNyYyAqIHNyYywgR3N0RXZlbnQgKiBldmVudCwKLSAgICBHc3RTZWdtZW50ICogc2Vla3NlZ21lbnQpCi17Ci0gIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOwotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOwotCi0gIGlmIChiY2xhc3MtPnByZXBhcmVfc2Vla19zZWdtZW50KQotICAgIHJlc3VsdCA9IGJjbGFzcy0+cHJlcGFyZV9zZWVrX3NlZ21lbnQgKHNyYywgZXZlbnQsIHNlZWtzZWdtZW50KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2Vfc3JjX2RlZmF1bHRfYWxsb2MgKEdzdEJhc2VTcmMgKiBzcmMsIGd1aW50NjQgb2Zmc2V0LAotICAgIGd1aW50IHNpemUsIEdzdEJ1ZmZlciAqKiBidWZmZXIpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCYXNlU3JjUHJpdmF0ZSAqcHJpdiA9IHNyYy0+cHJpdjsKLQotICBpZiAocHJpdi0+cG9vbCkgewotICAgIHJldCA9IGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAocHJpdi0+cG9vbCwgYnVmZmVyLCBOVUxMKTsKLSAgfSBlbHNlIGlmIChzaXplICE9IC0xKSB7Ci0gICAgKmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChwcml2LT5hbGxvY2F0b3IsIHNpemUsICZwcml2LT5wYXJhbXMpOwotICAgIGlmIChHX1VOTElLRUxZICgqYnVmZmVyID09IE5VTEwpKQotICAgICAgZ290byBhbGxvY19mYWlsZWQ7Ci0KLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIk5vdCB0cnlpbmcgdG8gYWxsb2MgJXUgYnl0ZXMuIEJsb2Nrc2l6ZSBub3Qgc2V0PyIsCi0gICAgICAgIHNpemUpOwotICAgIGdvdG8gYWxsb2NfZmFpbGVkOwotICB9Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1hbGxvY19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJGYWlsZWQgdG8gYWxsb2NhdGUgJXUgYnl0ZXMiLCBzaXplKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9iYXNlX3NyY19kZWZhdWx0X2NyZWF0ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgc2l6ZSwgR3N0QnVmZmVyICoqIGJ1ZmZlcikKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXIgKnJlc19idWY7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoc3JjKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIWJjbGFzcy0+YWxsb2MpKQotICAgIGdvdG8gbm9fZnVuY3Rpb247Ci0gIGlmIChHX1VOTElLRUxZICghYmNsYXNzLT5maWxsKSkKLSAgICBnb3RvIG5vX2Z1bmN0aW9uOwotCi0gIGlmICgqYnVmZmVyID09IE5VTEwpIHsKLSAgICAvKiBkb3duc3RyZWFtIGRpZCBub3QgcHJvdmlkZSB1cyB3aXRoIGEgYnVmZmVyIHRvIGZpbGwsIGFsbG9jYXRlIG9uZQotICAgICAqIG91cnNlbHZlcyAqLwotICAgIHJldCA9IGJjbGFzcy0+YWxsb2MgKHNyYywgb2Zmc2V0LCBzaXplLCAmcmVzX2J1Zik7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgICBnb3RvIGFsbG9jX2ZhaWxlZDsKLSAgfSBlbHNlIHsKLSAgICByZXNfYnVmID0gKmJ1ZmZlcjsKLSAgfQotCi0gIGlmIChHX0xJS0VMWSAoc2l6ZSA+IDApKSB7Ci0gICAgLyogb25seSBjYWxsIGZpbGwgd2hlbiB0aGVyZSBpcyBhIHNpemUgKi8KLSAgICByZXQgPSBiY2xhc3MtPmZpbGwgKHNyYywgb2Zmc2V0LCBzaXplLCByZXNfYnVmKTsKLSAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICAgIGdvdG8gbm90X29rOwotICB9Ci0KLSAgKmJ1ZmZlciA9IHJlc19idWY7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fZnVuY3Rpb246Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJubyBmaWxsIG9yIGFsbG9jIGZ1bmN0aW9uIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gIH0KLWFsbG9jX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIkZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgb2YgJXUgYnl0ZXMiLCBzaXplKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci1ub3Rfb2s6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmaWxsIHJldHVybmVkICVkICglcykiLCByZXQsCi0gICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICBpZiAoKmJ1ZmZlciA9PSBOVUxMKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocmVzX2J1Zik7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi0vKiB0aGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgc2Vla2luZy4gSXQgaXMgYSBnb29kIGV4YW1wbGUKLSAqIGhhbmRsaW5nIGFsbCBjYXNlcy4KLSAqCi0gKiBBIHNlZWsgdXBkYXRlcyB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgc2VnbWVudC5zdGFydAotICogYW5kIHNlZ21lbnQuc3RvcCB2YWx1ZXMgYmFzZWQgb24gdGhlIFNFRUtfVFlQRS4gSWYgdGhlCi0gKiBzZWdtZW50LnN0YXJ0IHZhbHVlIGlzIHVwZGF0ZWQsIGEgc2VlayB0byB0aGlzIG5ldyBwb3NpdGlvbgotICogc2hvdWxkIGJlIHBlcmZvcm1lZC4KLSAqCi0gKiBUaGUgc2VlayBjYW4gb25seSBiZSBleGVjdXRlZCB3aGVuIHdlIGFyZSBub3QgY3VycmVudGx5Ci0gKiBzdHJlYW1pbmcgYW55IGRhdGEsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgdGhlIGNhc2UsIHdlCi0gKiBhY3F1aXJlIHRoZSBTVFJFQU1fTE9DSyB3aGljaCBpcyB0YWtlbiB3aGVuIHdlIGFyZSBpbiB0aGUKLSAqIF9sb29wKCkgZnVuY3Rpb24gb3Igd2hlbiBhIGdldHJhbmdlKCkgaXMgY2FsbGVkLiBOb3JtYWxseQotICogd2Ugd2lsbCBub3QgcmVjZWl2ZSBhIHNlZWsgaWYgd2UgYXJlIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUKLSAqIHRob3VnaC4gV2hlbiB3ZSBvcGVyYXRlIGFzIGEgbGl2ZSBzb3VyY2Ugd2UgbWlnaHQgYmxvY2sgb24gdGhlIGxpdmUKLSAqIGNvbmQsIHdoaWNoIGRvZXMgbm90IHJlbGVhc2UgdGhlIFNUUkVBTV9MT0NLLiBUaGVyZWZvcmUgd2Ugd2lsbCB0cnkKLSAqIHRvIGdyYWIgdGhlIExJVkVfTE9DSyBpbnN0ZWFkIG9mIHRoZSBTVFJFQU1fTE9DSyB0byBtYWtlIHN1cmUgaXQgaXMKLSAqIHNhZmUgdG8gcGVyZm9ybSB0aGUgc2Vlay4KLSAqCi0gKiBXaGVuIHdlIGFyZSBpbiB0aGUgbG9vcCgpIGZ1bmN0aW9uLCB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlCi0gKiBvZiBwdXNoaW5nIGEgYnVmZmVyLCB3aGljaCBtaWdodCBibG9jayBpbiBhIHNpbmsuIFRvIG1ha2Ugc3VyZQotICogdGhhdCB0aGUgcHVzaCBnZXRzIHVuYmxvY2tlZCB3ZSBwdXNoIG91dCBhIEZMVVNIX1NUQVJUIGV2ZW50LgotICogT3VyIGxvb3AgZnVuY3Rpb24gd2lsbCBnZXQgYSBGTFVTSElORyByZXR1cm4gdmFsdWUgZnJvbQotICogdGhlIHB1c2ggYW5kIHdpbGwgcGF1c2UsIGVmZmVjdGl2ZWx5IHJlbGVhc2luZyB0aGUgU1RSRUFNX0xPQ0suCi0gKgotICogRm9yIGEgbm9uLWZsdXNoaW5nIHNlZWssIHdlIHBhdXNlIHRoZSB0YXNrLCB3aGljaCBtaWdodCBldmVudHVhbGx5Ci0gKiByZWxlYXNlIHRoZSBTVFJFQU1fTE9DSy4gV2Ugc2F5IGV2ZW50dWFsbHkgYmVjYXVzZSB3aGVuIHRoZSBzaW5rCi0gKiBibG9ja3Mgb24gdGhlIHNhbXBsZSB3ZSBtaWdodCB3YWl0IGEgdmVyeSBsb25nIHRpbWUgdW50aWwgdGhlIHNpbmsKLSAqIHVuYmxvY2tzIHRoZSBzYW1wbGUuIEluIGFueSBjYXNlIHdlIGFjcXVpcmUgdGhlIFNUUkVBTV9MT0NLIGFuZAotICogY2FuIGNvbnRpbnVlIHRoZSBzZWVrLiBBIG5vbi1mbHVzaGluZyBzZWVrIGlzIG5vcm1hbGx5IGRvbmUgaW4gYQotICogcnVubmluZyBwaXBlbGluZSB0byBwZXJmb3JtIHNlYW1sZXNzIHBsYXliYWNrLCB0aGlzIG1lYW5zIHRoYXQgdGhlIHNpbmsgaXMKLSAqIFBMQVlJTkcgYW5kIHdpbGwgcmV0dXJuIGZyb20gaXRzIGNoYWluIGZ1bmN0aW9uLgotICogSW4gdGhlIGNhc2Ugb2YgYSBub24tZmx1c2hpbmcgc2VlayB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQotICogZGF0YSB3ZSBvdXRwdXQgYWZ0ZXIgdGhlIHNlZWsgaXMgY29udGludW91cyB3aXRoIHRoZSBwcmV2aW91cyBkYXRhLAotICogdGhpcyBpcyBiZWNhdXNlIGEgbm9uLWZsdXNoaW5nIHNlZWsgZG9lcyBub3QgcmVzZXQgdGhlIHJ1bm5pbmctdGltZQotICogdG8gMC4gV2UgZG8gdGhpcyBieSBjbG9zaW5nIHRoZSBjdXJyZW50bHkgcnVubmluZyBzZWdtZW50LCBpZS4gc2VuZGluZwotICogYSBuZXdfc2VnbWVudCBldmVudCB3aXRoIHRoZSBzdG9wIHBvc2l0aW9uIHNldCB0byB0aGUgbGFzdCBwcm9jZXNzZWQKLSAqIHBvc2l0aW9uLgotICoKLSAqIEFmdGVyIHVwZGF0aW5nIHRoZSBzZWdtZW50LnN0YXJ0L3N0b3AgdmFsdWVzLCB3ZSBwcmVwYXJlIGZvcgotICogc3RyZWFtaW5nIGFnYWluLiBXZSBwdXNoIG91dCBhIEZMVVNIX1NUT1AgdG8gbWFrZSB0aGUgcGVlciBwYWQKLSAqIGFjY2VwdCBkYXRhIGFnYWluIGFuZCB3ZSBzdGFydCBvdXIgdGFzayBhZ2Fpbi4KLSAqCi0gKiBBIHNlZ21lbnQgc2VlayBwb3N0cyBhIG1lc3NhZ2Ugb24gdGhlIGJ1cyBzYXlpbmcgdGhhdCB0aGUgcGxheWJhY2sKLSAqIG9mIHRoZSBzZWdtZW50IHN0YXJ0ZWQuIFdlIHN0b3JlIHRoZSBzZWdtZW50IGZsYWcgaW50ZXJuYWxseSBiZWNhdXNlCi0gKiB3aGVuIHdlIHJlYWNoIHRoZSBzZWdtZW50LnN0b3Agd2UgaGF2ZSB0byBwb3N0IGEgc2VnbWVudC5kb25lCi0gKiBpbnN0ZWFkIG9mIEVPUyB3aGVuIGRvaW5nIGEgc2VnbWVudCBzZWVrLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19wZXJmb3JtX3NlZWsgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdEV2ZW50ICogZXZlbnQsIGdib29sZWFuIHVubG9jaykKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRSwgdHJlczsKLSAgZ2RvdWJsZSByYXRlOwotICBHc3RGb3JtYXQgc2Vla19mb3JtYXQsIGRlc3RfZm9ybWF0OwotICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUsIHN0b3BfdHlwZTsKLSAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotICBnYm9vbGVhbiBmbHVzaCwgcGxheWluZzsKLSAgZ2Jvb2xlYW4gdXBkYXRlOwotICBnYm9vbGVhbiByZWxhdGl2ZV9zZWVrID0gRkFMU0U7Ci0gIGdib29sZWFuIHNlZWtzZWdfY29uZmlndXJlZCA9IEZBTFNFOwotICBHc3RTZWdtZW50IHNlZWtzZWdtZW50OwotICBndWludDMyIHNlcW51bTsKLSAgR3N0RXZlbnQgKnRldmVudDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJkb2luZyBzZWVrOiAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgZGVzdF9mb3JtYXQgPSBzcmMtPnNlZ21lbnQuZm9ybWF0OwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICBpZiAoZXZlbnQpIHsKLSAgICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmc2Vla19mb3JtYXQsICZmbGFncywKLSAgICAgICAgJnN0YXJ0X3R5cGUsICZzdGFydCwgJnN0b3BfdHlwZSwgJnN0b3ApOwotCi0gICAgcmVsYXRpdmVfc2VlayA9IFNFRUtfVFlQRV9JU19SRUxBVElWRSAoc3RhcnRfdHlwZSkgfHwKLSAgICAgICAgU0VFS19UWVBFX0lTX1JFTEFUSVZFIChzdG9wX3R5cGUpOwotCi0gICAgaWYgKGRlc3RfZm9ybWF0ICE9IHNlZWtfZm9ybWF0ICYmICFyZWxhdGl2ZV9zZWVrKSB7Ci0gICAgICAvKiBJZiB3ZSBoYXZlIGFuIEFCU09MVVRFIHBvc2l0aW9uIChTRUVLX1NFVCBvbmx5KSwgd2UgY2FuIGNvbnZlcnQgaXQKLSAgICAgICAqIGhlcmUgYmVmb3JlIHRha2luZyB0aGUgc3RyZWFtIGxvY2ssIG90aGVyd2lzZSB3ZSBtdXN0IGNvbnZlcnQgaXQgbGF0ZXIsCi0gICAgICAgKiBvbmNlIHdlIGhhdmUgdGhlIHN0cmVhbSBsb2NrIGFuZCBjYW4gcmVhZCB0aGUgbGFzdCBjb25maWd1cmVzIHNlZ21lbnQKLSAgICAgICAqIHN0YXJ0IGFuZCBzdG9wIHBvc2l0aW9ucyAqLwotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZWtzZWdtZW50LCBkZXN0X2Zvcm1hdCk7Ci0KLSAgICAgIGlmICghZ3N0X2Jhc2Vfc3JjX3ByZXBhcmVfc2Vla19zZWdtZW50IChzcmMsIGV2ZW50LCAmc2Vla3NlZ21lbnQpKQotICAgICAgICBnb3RvIHByZXBhcmVfZmFpbGVkOwotCi0gICAgICBzZWVrc2VnX2NvbmZpZ3VyZWQgPSBUUlVFOwotICAgIH0KLQotICAgIGZsdXNoID0gZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIOwotICAgIHNlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0gIH0gZWxzZSB7Ci0gICAgZmx1c2ggPSBGQUxTRTsKLSAgICAvKiBnZXQgbmV4dCBzZXFudW0gKi8KLSAgICBzZXFudW0gPSBnc3RfdXRpbF9zZXFudW1fbmV4dCAoKTsKLSAgfQotCi0gIC8qIHNlbmQgZmx1c2ggc3RhcnQgKi8KLSAgaWYgKGZsdXNoKSB7Ci0gICAgdGV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKTsKLSAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAodGV2ZW50LCBzZXFudW0pOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLT5zcmNwYWQsIHRldmVudCk7Ci0gIH0gZWxzZQotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoc3JjLT5zcmNwYWQpOwotCi0gIC8qIHVuYmxvY2sgc3RyZWFtaW5nIHRocmVhZC4gKi8KLSAgaWYgKHVubG9jaykKLSAgICBnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nIChzcmMsIFRSVUUsIEZBTFNFLCAmcGxheWluZyk7Ci0KLSAgLyogZ3JhYiBzdHJlYW1pbmcgbG9jaywgdGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSBwb3NzaWJsZSwgZWl0aGVyCi0gICAqIGJlY2F1c2UgdGhlIHRhc2sgaXMgcGF1c2VkLCBvdXIgc3RyZWFtaW5nIHRocmVhZCBzdG9wcGVkCi0gICAqIG9yIGJlY2F1c2Ugb3VyIHBlZXIgaXMgZmx1c2hpbmcuICovCi0gIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHNyYy0+c3JjcGFkKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHNyYy0+cHJpdi0+c2VxbnVtID09IHNlcW51bSkpIHsKLSAgICAvKiB3ZSBoYXZlIHNlZW4gdGhpcyBldmVudCBiZWZvcmUsIGlzc3VlIGEgd2FybmluZyBmb3Igbm93ICovCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJkdXBsaWNhdGUgZXZlbnQgZm91bmQgJSIgR19HVUlOVDMyX0ZPUk1BVCwKLSAgICAgICAgc2VxbnVtKTsKLSAgfSBlbHNlIHsKLSAgICBzcmMtPnByaXYtPnNlcW51bSA9IHNlcW51bTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZWVrIHdpdGggc2VxbnVtICUiIEdfR1VJTlQzMl9GT1JNQVQsIHNlcW51bSk7Ci0gIH0KLQotICBpZiAodW5sb2NrKQotICAgIGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKHNyYywgRkFMU0UsIHBsYXlpbmcsIE5VTEwpOwotCi0gIC8qIElmIHdlIGNvbmZpZ3VyZWQgdGhlIHNlZWtzZWdtZW50IGFib3ZlLCBkb24ndCBvdmVyd3JpdGUgaXQgbm93LiBPdGhlcndpc2UKLSAgICogY29weSB0aGUgY3VycmVudCBzZWdtZW50IGluZm8gaW50byB0aGUgdGVtcCBzZWdtZW50IHRoYXQgd2UgY2FuIGFjdHVhbGx5Ci0gICAqIGF0dGVtcHQgdGhlIHNlZWsgd2l0aC4gV2Ugb25seSB1cGRhdGUgdGhlIHJlYWwgc2VnbWVudCBpZiB0aGUgc2VlayBzdWNjZWVkcy4gKi8KLSAgaWYgKCFzZWVrc2VnX2NvbmZpZ3VyZWQpIHsKLSAgICBtZW1jcHkgKCZzZWVrc2VnbWVudCwgJnNyYy0+c2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7Ci0KLSAgICAvKiBub3cgY29uZmlndXJlIHRoZSBmaW5hbCBzZWVrIHNlZ21lbnQgKi8KLSAgICBpZiAoZXZlbnQpIHsKLSAgICAgIGlmIChzZWVrc2VnbWVudC5mb3JtYXQgIT0gc2Vla19mb3JtYXQpIHsKLSAgICAgICAgLyogT0ssIGhlcmUncyB3aGVyZSB3ZSBnaXZlIHRoZSBzdWJjbGFzcyBhIGNoYW5jZSB0byBjb252ZXJ0IHRoZSByZWxhdGl2ZQotICAgICAgICAgKiBzZWVrIGludG8gYW4gYWJzb2x1dGUgb25lIGluIHRoZSBwcm9jZXNzaW5nIGZvcm1hdC4gV2Ugc2V0IHVwIGFueQotICAgICAgICAgKiBhYnNvbHV0ZSBzZWVrIGFib3ZlLCBiZWZvcmUgdGFraW5nIHRoZSBzdHJlYW0gbG9jay4gKi8KLSAgICAgICAgaWYgKCFnc3RfYmFzZV9zcmNfcHJlcGFyZV9zZWVrX3NlZ21lbnQgKHNyYywgZXZlbnQsICZzZWVrc2VnbWVudCkpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJQcmVwYXJpbmcgdGhlIHNlZWsgZmFpbGVkIGFmdGVyIGZsdXNoaW5nLiAiCi0gICAgICAgICAgICAgICJBYm9ydGluZyBzZWVrIik7Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIFRoZSBzZWVrIGZvcm1hdCBtYXRjaGVzIG91ciBwcm9jZXNzaW5nIGZvcm1hdCwgbm8gbmVlZCB0byBhc2sgdGhlCi0gICAgICAgICAqIHRoZSBzdWJjbGFzcyB0byBjb25maWd1cmUgdGhlIHNlZ21lbnQuICovCi0gICAgICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWVrc2VnbWVudCwgcmF0ZSwgc2Vla19mb3JtYXQsIGZsYWdzLAotICAgICAgICAgICAgc3RhcnRfdHlwZSwgc3RhcnQsIHN0b3BfdHlwZSwgc3RvcCwgJnVwZGF0ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIEVsc2UsIG5vIHNlZWsgZXZlbnQgcGFzc2VkLCBzbyB3ZSdyZSBqdXN0IChyZSlzdGFydGluZyB0aGUKLSAgICAgICBjdXJyZW50IHNlZ21lbnQuICovCi0gIH0KLQotICBpZiAocmVzKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2VnbWVudCBjb25maWd1cmVkIGZyb20gJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICIgdG8gJSIgR19HSU5UNjRfRk9STUFUICIsIHBvc2l0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgc2Vla3NlZ21lbnQuc3RhcnQsIHNlZWtzZWdtZW50LnN0b3AsIHNlZWtzZWdtZW50LnBvc2l0aW9uKTsKLQotICAgIC8qIGRvIHRoZSBzZWVrLCBzZWdtZW50LnBvc2l0aW9uIGNvbnRhaW5zIHRoZSBuZXcgcG9zaXRpb24uICovCi0gICAgcmVzID0gZ3N0X2Jhc2Vfc3JjX2RvX3NlZWsgKHNyYywgJnNlZWtzZWdtZW50KTsKLSAgfQotCi0gIC8qIGFuZCBwcmVwYXJlIHRvIGNvbnRpbnVlIHN0cmVhbWluZyAqLwotICBpZiAoZmx1c2gpIHsKLSAgICB0ZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpOwotICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtICh0ZXZlbnQsIHNlcW51bSk7Ci0gICAgLyogc2VuZCBmbHVzaCBzdG9wLCBwZWVyIHdpbGwgYWNjZXB0IGRhdGEgYW5kIGV2ZW50cyBhZ2Fpbi4gV2UKLSAgICAgKiBhcmUgbm90IHlldCBwcm92aWRpbmcgZGF0YSBhcyB3ZSBzdGlsbCBoYXZlIHRoZSBTVFJFQU1fTE9DSy4gKi8KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYy0+c3JjcGFkLCB0ZXZlbnQpOwotICB9Ci0KLSAgLyogVGhlIHN1YmNsYXNzIG11c3QgaGF2ZSBjb252ZXJ0ZWQgdGhlIHNlZ21lbnQgdG8gdGhlIHByb2Nlc3NpbmcgZm9ybWF0Ci0gICAqIGJ5IG5vdyAqLwotICBpZiAocmVzICYmIHNlZWtzZWdtZW50LmZvcm1hdCAhPSBkZXN0X2Zvcm1hdCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlN1YmNsYXNzIGZhaWxlZCB0byBwcmVwYXJlIGEgc2VlayBzZWdtZW50ICIKLSAgICAgICAgImluIHRoZSBjb3JyZWN0IGZvcm1hdC4gQWJvcnRpbmcgc2Vlay4iKTsKLSAgICByZXMgPSBGQUxTRTsKLSAgfQotCi0gIC8qIGlmIHRoZSBzZWVrIHdhcyBzdWNjZXNzZnVsLCB3ZSB1cGRhdGUgb3VyIHJlYWwgc2VnbWVudCBhbmQgcHVzaAotICAgKiBvdXQgdGhlIG5ldyBzZWdtZW50LiAqLwotICBpZiAocmVzKSB7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICAgIG1lbWNweSAoJnNyYy0+c2VnbWVudCwgJnNlZWtzZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICAgIGlmIChzZWVrc2VnbWVudC5mbGFncyAmIEdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVCkgewotICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICAgICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0IChHU1RfT0JKRUNUIChzcmMpLAotICAgICAgICAgIHNlZWtzZWdtZW50LmZvcm1hdCwgc2Vla3NlZ21lbnQucG9zaXRpb24pOwotICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobWVzc2FnZSwgc2VxbnVtKTsKLQotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoc3JjKSwgbWVzc2FnZSk7Ci0gICAgfQotCi0gICAgc3JjLT5wcml2LT5zZWdtZW50X3BlbmRpbmcgPSBUUlVFOwotICAgIHNyYy0+cHJpdi0+c2VnbWVudF9zZXFudW0gPSBzZXFudW07Ci0gIH0KLQotICBzcmMtPnByaXYtPmRpc2NvbnQgPSBUUlVFOwotICBzcmMtPnJ1bm5pbmcgPSBUUlVFOwotICAvKiBhbmQgcmVzdGFydCB0aGUgdGFzayBpbiBjYXNlIGl0IGdvdCBwYXVzZWQgZXhwbGljaXRseSBvciBieQotICAgKiB0aGUgRkxVU0hfU1RBUlQgZXZlbnQgd2UgcHVzaGVkIG91dC4gKi8KLSAgdHJlcyA9IGdzdF9wYWRfc3RhcnRfdGFzayAoc3JjLT5zcmNwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9iYXNlX3NyY19sb29wLAotICAgICAgc3JjLT5zcmNwYWQsIE5VTEwpOwotICBpZiAocmVzICYmICF0cmVzKQotICAgIHJlcyA9IEZBTFNFOwotCi0gIC8qIGFuZCByZWxlYXNlIHRoZSBsb2NrIGFnYWluIHNvIHdlIGNhbiBjb250aW51ZSBzdHJlYW1pbmcgKi8KLSAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChzcmMtPnNyY3BhZCk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUiAqLwotcHJlcGFyZV9mYWlsZWQ6Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlByZXBhcmluZyB0aGUgc2VlayBmYWlsZWQgYmVmb3JlIGZsdXNoaW5nLiAiCi0gICAgICAiQWJvcnRpbmcgc2VlayIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIGFsbCBldmVudHMgc2VuZCB0byB0aGlzIGVsZW1lbnQgZGlyZWN0bHkuIFRoaXMgaXMgbWFpbmx5IGRvbmUgZnJvbSB0aGUKLSAqIGFwcGxpY2F0aW9uLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0QmFzZVNyYyAqc3JjOwotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0KLSAgc3JjID0gR1NUX0JBU0VfU1JDIChlbGVtZW50KTsKLSAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoc3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJoYW5kbGluZyBldmVudCAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQsIGV2ZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgIC8qIGJpZGlyZWN0aW9uYWwgZXZlbnRzICovCi0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwdXNoaW5nIGZsdXNoLXN0YXJ0IGV2ZW50IGRvd25zdHJlYW0iKTsKLSAgICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLT5zcmNwYWQsIGV2ZW50KTsKLSAgICAgIC8qIGFsc28gdW5ibG9jayB0aGUgY3JlYXRlIGZ1bmN0aW9uICovCi0gICAgICBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoc3JjLCBGQUxTRSk7Ci0gICAgICAvKiB1bmxvY2sgYW55IHN1YmNsYXNzZXMsIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgZ3JhYmJpbmcgdGhlCi0gICAgICAgKiBMSVZFX0xPQ0sgc2luY2Ugd2UgaG9sZCB0aGlzIGxvY2sgYmVmb3JlIGdvaW5nIGludG8gOjpjcmVhdGUuIFdlIHBhc3MgYW4KLSAgICAgICAqIHVubG9jayB0byB0aGUgcGFyYW1zIGJlY2F1c2Ugb2YgYmFja3dhcmRzIGNvbXBhdCAoc2VlIHNlZWsgaGFuZGxlcikqLwotICAgICAgaWYgKGJjbGFzcy0+dW5sb2NrKQotICAgICAgICBiY2xhc3MtPnVubG9jayAoc3JjKTsKLQotICAgICAgLyogdGhlIGxpdmUgbG9jayBpcyByZWxlYXNlZCB3aGVuIHdlIGFyZSBibG9ja2VkLCB3YWl0aW5nIGZvciBwbGF5aW5nIG9yCi0gICAgICAgKiB3aGVuIHdlIHN5bmMgdG8gdGhlIGNsb2NrLiAqLwotICAgICAgR1NUX0xJVkVfTE9DSyAoc3JjKTsKLSAgICAgIHNyYy0+cHJpdi0+Zmx1c2hpbmcgPSBUUlVFOwotICAgICAgLyogY2xlYXIgcGVuZGluZyBFT1MgaWYgYW55ICovCi0gICAgICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnNyYy0+cHJpdi0+aGFzX3BlbmRpbmdfZW9zKSkgewotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gICAgICAgIENMRUFSX1BFTkRJTkdfRU9TIChzcmMpOwotICAgICAgICBzcmMtPnByaXYtPmZvcmNlZF9lb3MgPSBGQUxTRTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYmNsYXNzLT51bmxvY2tfc3RvcCkKLSAgICAgICAgYmNsYXNzLT51bmxvY2tfc3RvcCAoc3JjKTsKLSAgICAgIGlmIChzcmMtPmNsb2NrX2lkKQotICAgICAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoc3JjLT5jbG9ja19pZCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzaWduYWwiKTsKLSAgICAgIEdTVF9MSVZFX1NJR05BTCAoc3JjKTsKLSAgICAgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKLSAgICAgIGV2ZW50ID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gc3RhcnQ7Ci0KLSAgICAgIEdTVF9MSVZFX0xPQ0sgKHNyYyk7Ci0gICAgICBzcmMtPnByaXYtPnNlZ21lbnRfcGVuZGluZyA9IFRSVUU7Ci0gICAgICBzcmMtPnByaXYtPmZsdXNoaW5nID0gRkFMU0U7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwdXNoaW5nIGZsdXNoLXN0b3AgZXZlbnQgZG93bnN0cmVhbSIpOwotICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMtPnNyY3BhZCwgZXZlbnQpOwotCi0gICAgICBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoc3JjLCBUUlVFKTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcmMtPnNyY3BhZCk7Ci0gICAgICBzdGFydCA9IChHU1RfUEFEX01PREUgKHNyYy0+c3JjcGFkKSA9PSBHU1RfUEFEX01PREVfUFVTSCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjLT5zcmNwYWQpOwotCi0gICAgICBpZiAoc3JjLT5pc19saXZlKSB7Ci0gICAgICAgIGlmICghc3JjLT5saXZlX3J1bm5pbmcpCi0gICAgICAgICAgc3RhcnQgPSBGQUxTRTsKLSAgICAgIH0KLQotICAgICAgaWYgKHN0YXJ0KQotICAgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHNyYy0+c3JjcGFkLCAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfYmFzZV9zcmNfbG9vcCwKLSAgICAgICAgICAgIHNyYy0+c3JjcGFkLCBOVUxMKTsKLSAgICAgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKLSAgICAgIGV2ZW50ID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgICAgLyogZG93bnN0cmVhbSBzZXJpYWxpemVkIGV2ZW50cyAqLwotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICB7Ci0gICAgICAvKiBxdWV1ZSBFT1MgYW5kIG1ha2Ugc3VyZSB0aGUgdGFzayBvciBwdWxsIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBFT1MKLSAgICAgICAqIGFjdGlvbnMuCi0gICAgICAgKgotICAgICAgICogV2UgaGF2ZSB0d28gcG9zc2liaWxpdGllczoKLSAgICAgICAqCi0gICAgICAgKiAgLSBCZWZvcmUgd2UgYXJlIHRvIGVudGVyIHRoZSBfY3JlYXRlIGZ1bmN0aW9uLCB3ZSBjaGVjayB0aGUgaGFzX3BlbmRpbmdfZW9zCi0gICAgICAgKiAgICBmaXJzdCBhbmQgZG8gRU9TIGluc3RlYWQgb2YgZW50ZXJpbmcgaXQuCi0gICAgICAgKiAgLSBJZiB3ZSBhcmUgaW4gdGhlIF9jcmVhdGUgZnVuY3Rpb24gb3Igd2UgZGlkIG5vdCBtYW5hZ2UgdG8gc2V0IHRoZQotICAgICAgICogICAgZmxhZyBmYXN0IGVub3VnaCBhbmQgd2UgYXJlIGFib3V0IHRvIGVudGVyIHRoZSBfY3JlYXRlIGZ1bmN0aW9uLAotICAgICAgICogICAgd2UgdW5sb2NrIGl0IHNvIHRoYXQgd2UgZXhpdCB3aXRoIEZMVVNISU5HIGltbWVkaWF0ZWx5LiBXZSB0aGVuCi0gICAgICAgKiAgICBjaGVjayB0aGUgRU9TIGZsYWcgYW5kIGRvIHRoZSBFT1MgbG9naWMuCi0gICAgICAgKi8KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZzcmMtPnByaXYtPmhhc19wZW5kaW5nX2VvcywgVFJVRSk7Ci0gICAgICBpZiAoc3JjLT5wcml2LT5wZW5kaW5nX2VvcykKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChzcmMtPnByaXYtPnBlbmRpbmdfZW9zKTsKLSAgICAgIHNyYy0+cHJpdi0+cGVuZGluZ19lb3MgPSBldmVudDsKLSAgICAgIGV2ZW50ID0gTlVMTDsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJFT1MgbWFya2VkLCBjYWxsaW5nIHVubG9jayIpOwotCi0gICAgICAvKiB1bmxvY2sgdGhlIF9jcmVhdGUgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gY2hlY2sgdGhlIGhhc19wZW5kaW5nX2VvcyBmbGFnCi0gICAgICAgKiBhbmQgd2UgY2FuIGRvIEVPUy4gVGhpcyB3aWxsIGV2ZW50dWFsbHkgcmVsZWFzZSB0aGUgTElWRV9MT0NLIGFnYWluIHNvCi0gICAgICAgKiB0aGF0IHdlIGNhbiBncmFiIGl0IGFuZCBzdG9wIHRoZSB1bmxvY2sgYWdhaW4uIFdlIGRvbid0IHRha2UgdGhlIHN0cmVhbQotICAgICAgICogbG9jayBzbyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIGd1YXJhbnRlZWQgdG8gbmV2ZXIgYmxvY2suICovCi0gICAgICBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoc3JjLCBGQUxTRSk7Ci0gICAgICBpZiAoYmNsYXNzLT51bmxvY2spCi0gICAgICAgIGJjbGFzcy0+dW5sb2NrIChzcmMpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ1bmxvY2sgY2FsbGVkLCB3YWl0aW5nIGZvciBMSVZFX0xPQ0siKTsKLQotICAgICAgR1NUX0xJVkVfTE9DSyAoc3JjKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIkxJVkVfTE9DSyBhY3F1aXJlZCwgY2FsbGluZyB1bmxvY2tfc3RvcCIpOwotICAgICAgLyogbm93IHN0b3AgdGhlIHVubG9jayBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZCBhZ2Fpbi4gR3JhYmJpbmcgdGhlIGxpdmUKLSAgICAgICAqIGxvY2sgaXMgZW5vdWdoIGJlY2F1c2UgdGhhdCBwcm90ZWN0cyB0aGUgY3JlYXRlIGZ1bmN0aW9uLiAqLwotICAgICAgaWYgKGJjbGFzcy0+dW5sb2NrX3N0b3ApCi0gICAgICAgIGJjbGFzcy0+dW5sb2NrX3N0b3AgKHNyYyk7Ci0gICAgICBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoc3JjLCBUUlVFKTsKLSAgICAgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKLQotICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgICAgLyogc2VuZGluZyByYW5kb20gU0VHTUVOVCBkb3duc3RyZWFtIGNhbiBicmVhayBzeW5jLiAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOgotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNOgotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIOgotICAgICAgLyogSW5zZXJ0IFRBRywgQ1VTVE9NX0RPV05TVFJFQU0sIENVU1RPTV9CT1RIIGluIHRoZSBkYXRhZmxvdyAqLwotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICAgICAgc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9Ci0gICAgICAgICAgZ19saXN0X2FwcGVuZCAoc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cywgZXZlbnQpOwotICAgICAgZ19hdG9taWNfaW50X3NldCAoJnNyYy0+cHJpdi0+aGF2ZV9ldmVudHMsIFRSVUUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQlVGRkVSU0laRToKLSAgICAgIC8qIGRvZXMgbm90IHNlZW0gdG8gbWFrZSBtdWNoIHNlbnNlIGN1cnJlbnRseSAqLwotICAgICAgYnJlYWs7Ci0KLSAgICAgIC8qIHVwc3RyZWFtIGV2ZW50cyAqLwotICAgIGNhc2UgR1NUX0VWRU5UX1FPUzoKLSAgICAgIC8qIGVsZW1lbnRzIHNob3VsZCBvdmVycmlkZSBzZW5kX2V2ZW50IGFuZCBkbyBzb21ldGhpbmcgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gc3RhcnRlZDsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcmMtPnNyY3BhZCk7Ci0gICAgICBpZiAoR1NUX1BBRF9NT0RFIChzcmMtPnNyY3BhZCkgPT0gR1NUX1BBRF9NT0RFX1BVTEwpCi0gICAgICAgIGdvdG8gd3JvbmdfbW9kZTsKLSAgICAgIHN0YXJ0ZWQgPSBHU1RfUEFEX01PREUgKHNyYy0+c3JjcGFkKSA9PSBHU1RfUEFEX01PREVfUFVTSDsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMtPnNyY3BhZCk7Ci0KLSAgICAgIGlmIChzdGFydGVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBlcmZvcm1pbmcgc2VlayIpOwotICAgICAgICAvKiB3aGVuIHdlIGFyZSBydW5uaW5nIGluIHB1c2ggbW9kZSwgd2UgY2FuIGV4ZWN1dGUgdGhlCi0gICAgICAgICAqIHNlZWsgcmlnaHQgbm93LiAqLwotICAgICAgICByZXN1bHQgPSBnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrIChzcmMsIGV2ZW50LCBUUlVFKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdzdEV2ZW50ICoqZXZlbnRfcDsKLQotICAgICAgICAvKiBlbHNlIHdlIHN0b3JlIHRoZSBldmVudCBhbmQgZXhlY3V0ZSB0aGUgc2VlayB3aGVuIHdlCi0gICAgICAgICAqIGdldCBhY3RpdmF0ZWQgKi8KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJxdWV1ZWluZyBzZWVrIik7Ci0gICAgICAgIGV2ZW50X3AgPSAmc3JjLT5wZW5kaW5nX3NlZWs7Ci0gICAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgoR3N0RXZlbnQgKiopIGV2ZW50X3AsIGV2ZW50KTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0gICAgICAgIC8qIGFzc3VtZSB0aGUgc2VlayB3aWxsIHdvcmsgKi8KLSAgICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9OQVZJR0FUSU9OOgotICAgICAgLyogY291bGQgbWFrZSBzZW5zZSBmb3IgZWxlbWVudHMgdGhhdCBkbyBzb21ldGhpbmcgd2l0aCBuYXZpZ2F0aW9uIGV2ZW50cwotICAgICAgICogYnV0IHRoZW4gdGhleSB3b3VsZCBuZWVkIHRvIG92ZXJyaWRlIHRoZSBzZW5kX2V2ZW50IGZ1bmN0aW9uICovCi0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9MQVRFTkNZOgotICAgICAgLyogZG9lcyBub3Qgc2VlbSB0byBtYWtlIHNlbnNlIGN1cnJlbnRseSAqLwotICAgICAgYnJlYWs7Ci0KLSAgICAgIC8qIGN1c3RvbSBldmVudHMgKi8KLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU06Ci0gICAgICAvKiBvdmVycmlkZSBzZW5kX2V2ZW50IGlmIHlvdSB3YW50IHRoaXMgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQjoKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0I6Ci0gICAgICAvKiBpbnNlcnQgYSByYW5kb20gY3VzdG9tIGV2ZW50IGludG8gdGhlIHBpcGVsaW5lICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwdXNoaW5nIGN1c3RvbSBPT0IgZXZlbnQgZG93bnN0cmVhbSIpOwotICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgLyogd2UgZ2F2ZSBhd2F5IHRoZSByZWYgdG8gdGhlIGV2ZW50IGluIHRoZSBwdXNoICovCi0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLWRvbmU6Ci0gIC8qIGlmIHdlIHN0aWxsIGhhdmUgYSByZWYgdG8gdGhlIGV2ZW50LCB1bnJlZiBpdCBub3cgKi8KLSAgaWYgKGV2ZW50KQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19tb2RlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY2Fubm90IHBlcmZvcm0gc2VlayB3aGVuIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjLT5zcmNwYWQpOwotICAgIHJlc3VsdCA9IEZBTFNFOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19zZWVrYWJsZSAoR3N0QmFzZVNyYyAqIHNyYykKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0gIGJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKHNyYyk7Ci0gIGlmIChiY2xhc3MtPmlzX3NlZWthYmxlKQotICAgIHJldHVybiBiY2xhc3MtPmlzX3NlZWthYmxlIChzcmMpOwotICBlbHNlCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9xb3MgKEdzdEJhc2VTcmMgKiBzcmMsCi0gICAgZ2RvdWJsZSBwcm9wb3J0aW9uLCBHc3RDbG9ja1RpbWVEaWZmIGRpZmYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCi17Ci0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgc3JjLAotICAgICAgInFvczogcHJvcG9ydGlvbjogJWxmLCBkaWZmICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCB0aW1lc3RhbXAgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgcHJvcG9ydGlvbiwgZGlmZiwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBzcmMtPnByaXYtPnByb3BvcnRpb24gPSBwcm9wb3J0aW9uOwotICBzcmMtPnByaXYtPmVhcmxpZXN0X3RpbWUgPSB0aW1lc3RhbXAgKyBkaWZmOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19kZWZhdWx0X2V2ZW50IChHc3RCYXNlU3JjICogc3JjLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiaGFuZGxlIGV2ZW50ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKLSAgICAgIC8qIGlzIG5vcm1hbGx5IGNhbGxlZCB3aGVuIGluIHB1c2ggbW9kZSAqLwotICAgICAgaWYgKCFnc3RfYmFzZV9zcmNfc2Vla2FibGUgKHNyYykpCi0gICAgICAgIGdvdG8gbm90X3NlZWthYmxlOwotCi0gICAgICByZXN1bHQgPSBnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrIChzcmMsIGV2ZW50LCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgLyogY2FuY2VsIGFueSBibG9ja2luZyBnZXRyYW5nZSwgaXMgbm9ybWFsbHkgY2FsbGVkCi0gICAgICAgKiB3aGVuIGluIHB1bGwgbW9kZS4gKi8KLSAgICAgIHJlc3VsdCA9IGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKHNyYywgVFJVRSwgRkFMU0UsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIHJlc3VsdCA9IGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKHNyYywgRkFMU0UsIFRSVUUsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfUU9TOgotICAgIHsKLSAgICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKLSAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLSAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9xb3MgKGV2ZW50LCBOVUxMLCAmcHJvcG9ydGlvbiwgJmRpZmYsICZ0aW1lc3RhbXApOwotICAgICAgZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9xb3MgKHNyYywgcHJvcG9ydGlvbiwgZGlmZiwgdGltZXN0YW1wKTsKLSAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfUkVDT05GSUdVUkU6Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfTEFURU5DWToKLSAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotbm90X3NlZWthYmxlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiaXMgbm90IHNlZWthYmxlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0QmFzZVNyYyAqc3JjOwotICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0KLSAgc3JjID0gR1NUX0JBU0VfU1JDIChwYXJlbnQpOwotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOwotCi0gIGlmIChiY2xhc3MtPmV2ZW50KSB7Ci0gICAgaWYgKCEocmVzdWx0ID0gYmNsYXNzLT5ldmVudCAoc3JjLCBldmVudCkpKQotICAgICAgZ290byBzdWJjbGFzc19mYWlsZWQ7Ci0gIH0KLQotZG9uZToKLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLXN1YmNsYXNzX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInN1YmNsYXNzIHJlZnVzZWQgZXZlbnQiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QmFzZVNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9CQVNFX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgotICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUgKHNyYywgZ192YWx1ZV9nZXRfdWludCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVU1fQlVGRkVSUzoKLSAgICAgIHNyYy0+bnVtX2J1ZmZlcnMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UWVBFRklORDoKLSAgICAgIHNyYy0+dHlwZWZpbmQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fVElNRVNUQU1QOgotICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXAgKHNyYywgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QmFzZVNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9CQVNFX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplIChzcmMpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVU1fQlVGRkVSUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+bnVtX2J1ZmZlcnMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RZUEVGSU5EOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNyYy0+dHlwZWZpbmQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPX1RJTUVTVEFNUDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3RfYmFzZV9zcmNfZ2V0X2RvX3RpbWVzdGFtcCAoc3JjKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLS8qIHdpdGggU1RSRUFNX0xPQ0sgYW5kIExPQ0sgKi8KLXN0YXRpYyBHc3RDbG9ja1JldHVybgotZ3N0X2Jhc2Vfc3JjX3dhaXQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSkKLXsKLSAgR3N0Q2xvY2tSZXR1cm4gcmV0OwotICBHc3RDbG9ja0lEIGlkOwotCi0gIGlkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIHRpbWUpOwotCi0gIGJhc2VzcmMtPmNsb2NrX2lkID0gaWQ7Ci0gIC8qIHJlbGVhc2UgdGhlIGxpdmUgbG9jayB3aGlsZSB3YWl0aW5nICovCi0gIEdTVF9MSVZFX1VOTE9DSyAoYmFzZXNyYyk7Ci0KLSAgcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCBOVUxMKTsKLQotICBHU1RfTElWRV9MT0NLIChiYXNlc3JjKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0gIGJhc2VzcmMtPmNsb2NrX2lkID0gTlVMTDsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBwZXJmb3JtIHN5bmNocm9uaXNhdGlvbiBvbiBhIGJ1ZmZlci4KLSAqIHdpdGggU1RSRUFNX0xPQ0suCi0gKi8KLXN0YXRpYyBHc3RDbG9ja1JldHVybgotZ3N0X2Jhc2Vfc3JjX2RvX3N5bmMgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdENsb2NrUmV0dXJuIHJlc3VsdDsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBlbmQ7Ci0gIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOwotICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lOwotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrVGltZSBub3cgPSBHU1RfQ0xPQ0tfVElNRV9OT05FLCBwdHMsIGR0cywgdGltZXN0YW1wOwotICBnYm9vbGVhbiBkb190aW1lc3RhbXAsIGZpcnN0LCBwc2V1ZG9fbGl2ZSwgaXNfbGl2ZTsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChiYXNlc3JjKTsKLQotICBzdGFydCA9IGVuZCA9IC0xOwotICBpZiAoYmNsYXNzLT5nZXRfdGltZXMpCi0gICAgYmNsYXNzLT5nZXRfdGltZXMgKGJhc2VzcmMsIGJ1ZmZlciwgJnN0YXJ0LCAmZW5kKTsKLQotICAvKiBnZXQgYnVmZmVyIHRpbWVzdGFtcCAqLwotICBkdHMgPSBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKTsKLSAgcHRzID0gR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcik7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdHMpKQotICAgIHRpbWVzdGFtcCA9IGR0czsKLSAgZWxzZQotICAgIHRpbWVzdGFtcCA9IHB0czsKLQotICAvKiBncmFiIHRoZSBsb2NrIHRvIHByZXBhcmUgZm9yIGNsb2NraW5nIGFuZCBjYWxjdWxhdGUgdGhlIHN0YXJ0dXAKLSAgICogbGF0ZW5jeS4gKi8KLSAgR1NUX09CSkVDVF9MT0NLIChiYXNlc3JjKTsKLQotICBpc19saXZlID0gYmFzZXNyYy0+aXNfbGl2ZTsKLSAgLyogaWYgd2UgYXJlIGFza2VkIHRvIHN5bmMgYWdhaW5zdCB0aGUgY2xvY2sgd2UgYXJlIGEgcHNldWRvIGxpdmUgZWxlbWVudCAqLwotICBwc2V1ZG9fbGl2ZSA9IChzdGFydCAhPSAtMSAmJiBpc19saXZlKTsKLSAgLyogY2hlY2sgZm9yIHRoZSBmaXJzdCBidWZmZXIgKi8KLSAgZmlyc3QgPSAoYmFzZXNyYy0+cHJpdi0+bGF0ZW5jeSA9PSAtMSk7Ci0KLSAgaWYgKHRpbWVzdGFtcCAhPSAtMSAmJiBwc2V1ZG9fbGl2ZSkgewotICAgIEdzdENsb2NrVGltZSBsYXRlbmN5OwotCi0gICAgLyogd2UgaGF2ZSBhIHRpbWVzdGFtcCBhbmQgYSBzeW5jIHRpbWUsIGxhdGVuY3kgaXMgdGhlIGRpZmYgKi8KLSAgICBpZiAodGltZXN0YW1wIDw9IHN0YXJ0KQotICAgICAgbGF0ZW5jeSA9IHN0YXJ0IC0gdGltZXN0YW1wOwotICAgIGVsc2UKLSAgICAgIGxhdGVuY3kgPSAwOwotCi0gICAgaWYgKGZpcnN0KSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAicHNldWRvX2xpdmUgd2l0aCBsYXRlbmN5ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChsYXRlbmN5KSk7Ci0gICAgICAvKiBmaXJzdCB0aW1lIHdlIGNhbGN1bGF0ZSBsYXRlbmN5LCBqdXN0IGNvbmZpZ3VyZSAqLwotICAgICAgYmFzZXNyYy0+cHJpdi0+bGF0ZW5jeSA9IGxhdGVuY3k7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChiYXNlc3JjLT5wcml2LT5sYXRlbmN5ICE9IGxhdGVuY3kpIHsKLSAgICAgICAgLyogd2UgaGF2ZSBhIG5ldyBsYXRlbmN5LCBGSVhNRSBwb3N0IGxhdGVuY3kgbWVzc2FnZSAqLwotICAgICAgICBiYXNlc3JjLT5wcml2LT5sYXRlbmN5ID0gbGF0ZW5jeTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImxhdGVuY3kgY2hhbmdlZCB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChsYXRlbmN5KSk7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgaWYgKGZpcnN0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIm5vIGxhdGVuY3kgbmVlZGVkLCBsaXZlICVkLCBzeW5jICVkIiwKLSAgICAgICAgaXNfbGl2ZSwgc3RhcnQgIT0gLTEpOwotICAgIGJhc2VzcmMtPnByaXYtPmxhdGVuY3kgPSAwOwotICB9Ci0KLSAgLyogZ2V0IGNsb2NrLCBpZiBubyBjbG9jaywgd2UgY2FuJ3Qgc3luYyBvciBkbyB0aW1lc3RhbXBzICovCi0gIGlmICgoY2xvY2sgPSBHU1RfRUxFTUVOVF9DTE9DSyAoYmFzZXNyYykpID09IE5VTEwpCi0gICAgZ290byBub19jbG9jazsKLSAgZWxzZQotICAgIGdzdF9vYmplY3RfcmVmIChjbG9jayk7Ci0KLSAgYmFzZV90aW1lID0gR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNyYyktPmJhc2VfdGltZTsKLQotICBkb190aW1lc3RhbXAgPSBiYXNlc3JjLT5wcml2LT5kb190aW1lc3RhbXA7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKLQotICAvKiBmaXJzdCBidWZmZXIsIGNhbGN1bGF0ZSB0aGUgdGltZXN0YW1wIG9mZnNldCAqLwotICBpZiAoZmlyc3QpIHsKLSAgICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lOwotCi0gICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0gICAgcnVubmluZ190aW1lID0gbm93IC0gYmFzZV90aW1lOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGJhc2VzcmMsCi0gICAgICAgICJzdGFydHVwIFBUUzogJSIgR1NUX1RJTUVfRk9STUFUICIsIERUUyAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiwgcnVubmluZ190aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocHRzKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZHRzKSwgR1NUX1RJTUVfQVJHUyAocnVubmluZ190aW1lKSk7Ci0KLSAgICBpZiAocHNldWRvX2xpdmUgJiYgdGltZXN0YW1wICE9IC0xKSB7Ci0gICAgICAvKiBsaXZlIHNvdXJjZSBhbmQgd2UgbmVlZCB0byBzeW5jLCBhZGQgc3RhcnR1cCBsYXRlbmN5IHRvIGFsbCB0aW1lc3RhbXBzCi0gICAgICAgKiB0byBnZXQgdGhlIHJlYWwgcnVubmluZ190aW1lLiBMaXZlIHNvdXJjZXMgc2hvdWxkIGFsd2F5cyB0aW1lc3RhbXAKLSAgICAgICAqIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBydW5uaW5nIHRpbWUuICovCi0gICAgICBiYXNlc3JjLT5wcml2LT50c19vZmZzZXQgPSBHU1RfQ0xPQ0tfRElGRiAodGltZXN0YW1wLCBydW5uaW5nX3RpbWUpOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAoYmFzZXNyYywgImxpdmUgd2l0aCBzeW5jLCB0c19vZmZzZXQgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGJhc2VzcmMtPnByaXYtPnRzX29mZnNldCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBiYXNlc3JjLT5wcml2LT50c19vZmZzZXQgPSAwOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGJhc2VzcmMsICJubyB0aW1lc3RhbXAgb2Zmc2V0IG5lZWRlZCIpOwotICAgIH0KLQotICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR0cykpIHsKLSAgICAgIGlmIChkb190aW1lc3RhbXApIHsKLSAgICAgICAgZHRzID0gcnVubmluZ190aW1lOwotICAgICAgfSBlbHNlIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHB0cykpIHsKLSAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChiYXNlc3JjLT5zZWdtZW50LnN0YXJ0KSkgewotICAgICAgICAgIGR0cyA9IGJhc2VzcmMtPnNlZ21lbnQuc3RhcnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZHRzID0gMDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcikgPSBkdHM7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc3JjLCAiY3JlYXRlZCBEVFMgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGR0cykpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBub3QgdGhlIGZpcnN0IGJ1ZmZlciwgdGhlIHRpbWVzdGFtcCBpcyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSBjbG9jayBhbmQKLSAgICAgKiBiYXNlX3RpbWUgKi8KLSAgICBpZiAoZG9fdGltZXN0YW1wICYmICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHRzKSkgewotICAgICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0KLSAgICAgIGR0cyA9IG5vdyAtIGJhc2VfdGltZTsKLSAgICAgIEdTVF9CVUZGRVJfRFRTIChidWZmZXIpID0gZHRzOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAoYmFzZXNyYywgImNyZWF0ZWQgRFRTICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChkdHMpKTsKLSAgICB9Ci0gIH0KLSAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHRzKSkgewotICAgIGlmICghR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpCi0gICAgICBwdHMgPSBkdHM7Ci0KLSAgICBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9IGR0czsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChiYXNlc3JjLCAiY3JlYXRlZCBQVFMgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChwdHMpKTsKLSAgfQotCi0gIC8qIGlmIHdlIGRvbid0IGhhdmUgYSBidWZmZXIgdGltZXN0YW1wLCB3ZSBkb24ndCBzeW5jICovCi0gIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXJ0KSkKLSAgICBnb3RvIG5vX3N5bmM7Ci0KLSAgaWYgKGlzX2xpdmUpIHsKLSAgICAvKiBmb3IgcHNldWRvIGxpdmUgc291cmNlcywgYWRkIG91ciB0c19vZmZzZXQgdG8gdGhlIHRpbWVzdGFtcCAqLwotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHRzKSkKLSAgICAgIEdTVF9CVUZGRVJfUFRTIChidWZmZXIpICs9IGJhc2VzcmMtPnByaXYtPnRzX29mZnNldDsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR0cykpCi0gICAgICBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSArPSBiYXNlc3JjLT5wcml2LT50c19vZmZzZXQ7Ci0gICAgc3RhcnQgKz0gYmFzZXNyYy0+cHJpdi0+dHNfb2Zmc2V0OwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGJhc2VzcmMsCi0gICAgICAid2FpdGluZyBmb3IgY2xvY2ssIGJhc2UgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIsIHN0cmVhbV9zdGFydCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChiYXNlX3RpbWUpLCBHU1RfVElNRV9BUkdTIChzdGFydCkpOwotCi0gIHJlc3VsdCA9IGdzdF9iYXNlX3NyY193YWl0IChiYXNlc3JjLCBjbG9jaywgc3RhcnQgKyBiYXNlX3RpbWUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICBHU1RfTE9HX09CSkVDVCAoYmFzZXNyYywgImNsb2NrIGVudHJ5IGRvbmU6ICVkIiwgcmVzdWx0KTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIHNwZWNpYWwgY2FzZXMgKi8KLW5vX2Nsb2NrOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIndlIGhhdmUgbm8gY2xvY2siKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7Ci0gICAgcmV0dXJuIEdTVF9DTE9DS19PSzsKLSAgfQotbm9fc3luYzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJubyBzeW5jIG5lZWRlZCIpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgICByZXR1cm4gR1NUX0NMT0NLX09LOwotICB9Ci19Ci0KLS8qIENhbGxlZCB3aXRoIFNUUkVBTV9MT0NLIGFuZCBMSVZFX0xPQ0sgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX3VwZGF0ZV9sZW5ndGggKEdzdEJhc2VTcmMgKiBzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCAqIGxlbmd0aCwKLSAgICBnYm9vbGVhbiBmb3JjZSkKLXsKLSAgZ3VpbnQ2NCBzaXplLCBtYXhzaXplOwotICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKLSAgZ2ludDY0IHN0b3A7Ci0KLSAgLyogb25seSBvcGVyYXRlIGlmIHdlIGFyZSB3b3JraW5nIHdpdGggYnl0ZXMgKi8KLSAgaWYgKHNyYy0+c2VnbWVudC5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUykKLSAgICByZXR1cm4gVFJVRTsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOwotCi0gIHN0b3AgPSBzcmMtPnNlZ21lbnQuc3RvcDsKLSAgLyogZ2V0IHRvdGFsIGZpbGUgc2l6ZSAqLwotICBzaXplID0gc3JjLT5zZWdtZW50LmR1cmF0aW9uOwotCi0gIC8qIHdoZW4gbm90IGRvaW5nIGF1dG9tYXRpYyBFT1MsIGp1c3QgdXNlIHRoZSBzdG9wIHBvc2l0aW9uLiBXZSBkb24ndCB1c2UKLSAgICogdGhlIHNpemUgdG8gY2hlY2sgZm9yIEVPUyAqLwotICBpZiAoIWdfYXRvbWljX2ludF9nZXQgKCZzcmMtPnByaXYtPmF1dG9tYXRpY19lb3MpKQotICAgIG1heHNpemUgPSBzdG9wOwotICAvKiBPdGhlcndpc2UsIHRoZSBtYXggYW1vdW50IG9mIGJ5dGVzIHRvIHJlYWQgaXMgdGhlIHRvdGFsCi0gICAqIHNpemUgb3IgdXAgdG8gdGhlIHNlZ21lbnQuc3RvcCBpZiBwcmVzZW50LiAqLwotICBlbHNlIGlmIChzdG9wICE9IC0xKQotICAgIG1heHNpemUgPSBzaXplICE9IC0xID8gTUlOIChzaXplLCBzdG9wKSA6IHN0b3A7Ci0gIGVsc2UKLSAgICBtYXhzaXplID0gc2l6ZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCi0gICAgICAicmVhZGluZyBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBsZW5ndGggJXUsIHNpemUgJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAiLCBzZWdtZW50LnN0b3AgJSIgR19HSU5UNjRfRk9STUFUICIsIG1heHNpemUgJSIgR19HSU5UNjRfRk9STUFULCBvZmZzZXQsCi0gICAgICAqbGVuZ3RoLCBzaXplLCBzdG9wLCBtYXhzaXplKTsKLQotICAvKiBjaGVjayBzaXplIGlmIHdlIGhhdmUgb25lICovCi0gIGlmIChtYXhzaXplICE9IC0xKSB7Ci0gICAgLyogaWYgd2UgcnVuIHBhc3QgdGhlIGVuZCwgY2hlY2sgaWYgdGhlIGZpbGUgYmVjYW1lIGJpZ2dlciBhbmQKLSAgICAgKiByZXRyeS4gIE1pbmQgd3JhcCB3aGVuIGNoZWNraW5nLiAqLwotICAgIGlmIChHX1VOTElLRUxZIChvZmZzZXQgPj0gbWF4c2l6ZSB8fCBvZmZzZXQgKyAqbGVuZ3RoID49IG1heHNpemUgfHwgZm9yY2UpKSB7Ci0gICAgICAvKiBzZWUgaWYgbGVuZ3RoIG9mIHRoZSBmaWxlIGNoYW5nZWQgKi8KLSAgICAgIGlmIChiY2xhc3MtPmdldF9zaXplKQotICAgICAgICBpZiAoIWJjbGFzcy0+Z2V0X3NpemUgKHNyYywgJnNpemUpKQotICAgICAgICAgIHNpemUgPSAtMTsKLQotICAgICAgLyogd2hlbiBub3QgZG9pbmcgYXV0b21hdGljIEVPUywganVzdCB1c2UgdGhlIHN0b3AgcG9zaXRpb24uIFdlIGRvbid0IHVzZQotICAgICAgICogdGhlIHNpemUgdG8gY2hlY2sgZm9yIEVPUyAqLwotICAgICAgaWYgKCFnX2F0b21pY19pbnRfZ2V0ICgmc3JjLT5wcml2LT5hdXRvbWF0aWNfZW9zKSkKLSAgICAgICAgbWF4c2l6ZSA9IHN0b3A7Ci0gICAgICAvKiBPdGhlcndpc2UsIHRoZSBtYXggYW1vdW50IG9mIGJ5dGVzIHRvIHJlYWQgaXMgdGhlIHRvdGFsCi0gICAgICAgKiBzaXplIG9yIHVwIHRvIHRoZSBzZWdtZW50LnN0b3AgaWYgcHJlc2VudC4gKi8KLSAgICAgIGVsc2UgaWYgKHN0b3AgIT0gLTEpCi0gICAgICAgIG1heHNpemUgPSBzaXplICE9IC0xID8gTUlOIChzaXplLCBzdG9wKSA6IHN0b3A7Ci0gICAgICBlbHNlCi0gICAgICAgIG1heHNpemUgPSBzaXplOwotCi0gICAgICBpZiAobWF4c2l6ZSAhPSAtMSkgewotICAgICAgICAvKiBpZiB3ZSBhcmUgYXQgb3IgcGFzdCB0aGUgZW5kLCBFT1MgKi8KLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKG9mZnNldCA+PSBtYXhzaXplKSkKLSAgICAgICAgICBnb3RvIHVuZXhwZWN0ZWRfbGVuZ3RoOwotCi0gICAgICAgIC8qIGVsc2Ugd2UgY2FuIGNsaXAgdG8gdGhlIGVuZCAqLwotICAgICAgICBpZiAoR19VTkxJS0VMWSAob2Zmc2V0ICsgKmxlbmd0aCA+PSBtYXhzaXplKSkKLSAgICAgICAgICAqbGVuZ3RoID0gbWF4c2l6ZSAtIG9mZnNldDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgZHVyYXRpb24uIHNlZ21lbnQgaXMgaW4gYnl0ZXMsIHdlIGNoZWNrZWQKLSAgICogdGhhdCBhYm92ZS4gKi8KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBzcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBzaXplOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXVuZXhwZWN0ZWRfbGVuZ3RoOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJwcm9jZXNzaW5nIGF0IG9yIHBhc3QgRU9TIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggTElWRV9MT0NLICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2Vfc3JjX2dldF9yYW5nZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IGxlbmd0aCwKLSAgICBHc3RCdWZmZXIgKiogYnVmKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0gIEdzdENsb2NrUmV0dXJuIHN0YXR1czsKLSAgR3N0QnVmZmVyICpyZXNfYnVmOwotICBHc3RCdWZmZXIgKmluX2J1ZjsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChzcmMpOwotCi1hZ2FpbjoKLSAgaWYgKHNyYy0+aXNfbGl2ZSkgewotICAgIGlmIChHX1VOTElLRUxZICghc3JjLT5saXZlX3J1bm5pbmcpKSB7Ci0gICAgICByZXQgPSBnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nIChzcmMpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBzdG9wcGVkOwotICAgIH0KLSAgfQotCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0JBU0VfU1JDX0lTX1NUQVJURUQgKHNyYykKLSAgICAgICAgICAmJiAhR1NUX0JBU0VfU1JDX0lTX1NUQVJUSU5HIChzcmMpKSkKLSAgICBnb3RvIG5vdF9zdGFydGVkOwotCi0gIGlmIChHX1VOTElLRUxZICghYmNsYXNzLT5jcmVhdGUpKQotICAgIGdvdG8gbm9fZnVuY3Rpb247Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYmFzZV9zcmNfdXBkYXRlX2xlbmd0aCAoc3JjLCBvZmZzZXQsICZsZW5ndGgsIEZBTFNFKSkpCi0gICAgZ290byB1bmV4cGVjdGVkX2xlbmd0aDsKLQotICAvKiB0cmFjayBwb3NpdGlvbiAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gIGlmIChzcmMtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpCi0gICAgc3JjLT5zZWdtZW50LnBvc2l0aW9uID0gb2Zmc2V0OwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICAvKiBub3JtYWxseSB3ZSBkb24ndCBjb3VudCBidWZmZXJzICovCi0gIGlmIChHX1VOTElLRUxZIChzcmMtPm51bV9idWZmZXJzX2xlZnQgPj0gMCkpIHsKLSAgICBpZiAoc3JjLT5udW1fYnVmZmVyc19sZWZ0ID09IDApCi0gICAgICBnb3RvIHJlYWNoZWRfbnVtX2J1ZmZlcnM7Ci0gICAgZWxzZQotICAgICAgc3JjLT5udW1fYnVmZmVyc19sZWZ0LS07Ci0gIH0KLQotICAvKiBkb24ndCBlbnRlciB0aGUgY3JlYXRlIGZ1bmN0aW9uIGlmIGEgcGVuZGluZyBFT1MgZXZlbnQgd2FzIHNldC4gRm9yIHRoZQotICAgKiBsb2dpYyBvZiB0aGUgaGFzX3BlbmRpbmdfZW9zLCBjaGVjayB0aGUgZXZlbnQgZnVuY3Rpb24gb2YgdGhpcyBjbGFzcy4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGdfYXRvbWljX2ludF9nZXQgKCZzcmMtPnByaXYtPmhhc19wZW5kaW5nX2VvcykpKSB7Ci0gICAgc3JjLT5wcml2LT5mb3JjZWRfZW9zID0gVFJVRTsKLSAgICBnb3RvIGVvczsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywKLSAgICAgICJjYWxsaW5nIGNyZWF0ZSBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiIGxlbmd0aCAldSwgdGltZSAlIgotICAgICAgR19HSU5UNjRfRk9STUFULCBvZmZzZXQsIGxlbmd0aCwgc3JjLT5zZWdtZW50LnRpbWUpOwotCi0gIHJlc19idWYgPSBpbl9idWYgPSAqYnVmOwotCi0gIHJldCA9IGJjbGFzcy0+Y3JlYXRlIChzcmMsIG9mZnNldCwgbGVuZ3RoLCAmcmVzX2J1Zik7Ci0KLSAgLyogVGhlIGNyZWF0ZSBmdW5jdGlvbiBjb3VsZCBiZSB1bmxvY2tlZCBiZWNhdXNlIHdlIGhhdmUgYSBwZW5kaW5nIEVPUy4gSXQncwotICAgKiBwb3NzaWJsZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBidWZmZXIgZnJvbSBjcmVhdGUgdGhhdCB3ZSBuZWVkIHRvCi0gICAqIGRpc2NhcmQgd2hlbiB0aGUgY3JlYXRlIGZ1bmN0aW9uIHJldHVybmVkIF9PSy4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGdfYXRvbWljX2ludF9nZXQgKCZzcmMtPnByaXYtPmhhc19wZW5kaW5nX2VvcykpKSB7Ci0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykgewotICAgICAgaWYgKCpidWYgPT0gTlVMTCkKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocmVzX2J1Zik7Ci0gICAgfQotICAgIHNyYy0+cHJpdi0+Zm9yY2VkX2VvcyA9IFRSVUU7Ci0gICAgZ290byBlb3M7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIG5vdF9vazsKLQotICAvKiBmYWxsYmFjayBpbiBjYXNlIHRoZSBjcmVhdGUgZnVuY3Rpb24gZGlkbid0IGZpbGwgYSBwcm92aWRlZCBidWZmZXIgKi8KLSAgaWYgKGluX2J1ZiAhPSBOVUxMICYmIHJlc19idWYgIT0gaW5fYnVmKSB7Ci0gICAgR3N0TWFwSW5mbyBpbmZvOwotICAgIGdzaXplIGNvcGllZF9zaXplOwotCi0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUEVSRk9STUFOQ0UsIHNyYywgImNyZWF0ZSBmdW5jdGlvbiBkaWRuJ3QgIgotICAgICAgICAiZmlsbCB0aGUgcHJvdmlkZWQgYnVmZmVyLCBjb3B5aW5nIik7Ci0KLSAgICBpZiAoIWdzdF9idWZmZXJfbWFwIChpbl9idWYsICZpbmZvLCBHU1RfTUFQX1dSSVRFKSkKLSAgICAgIGdvdG8gbWFwX2ZhaWxlZDsKLQotICAgIGNvcGllZF9zaXplID0gZ3N0X2J1ZmZlcl9leHRyYWN0IChyZXNfYnVmLCAwLCBpbmZvLmRhdGEsIGluZm8uc2l6ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5fYnVmLCAmaW5mbyk7Ci0gICAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAoaW5fYnVmLCBjb3BpZWRfc2l6ZSk7Ci0KLSAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAoaW5fYnVmLCByZXNfYnVmLCBHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEsIDAsIC0xKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHJlc19idWYpOwotICAgIHJlc19idWYgPSBpbl9idWY7Ci0gIH0KLQotICAvKiBubyB0aW1lc3RhbXAgc2V0IGFuZCB3ZSBhcmUgYXQgb2Zmc2V0IDAsIHdlIGNhbiB0aW1lc3RhbXAgd2l0aCAwICovCi0gIGlmIChvZmZzZXQgPT0gMCAmJiBzcmMtPnNlZ21lbnQudGltZSA9PSAwCi0gICAgICAmJiBHU1RfQlVGRkVSX0RUUyAocmVzX2J1ZikgPT0gLTEgJiYgIXNyYy0+aXNfbGl2ZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNldHRpbmcgZmlyc3QgdGltZXN0YW1wIHRvIDAiKTsKLSAgICByZXNfYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChyZXNfYnVmKTsKLSAgICBHU1RfQlVGRkVSX0RUUyAocmVzX2J1ZikgPSAwOwotICB9Ci0KLSAgLyogbm93IHN5bmMgYmVmb3JlIHB1c2hpbmcgdGhlIGJ1ZmZlciAqLwotICBzdGF0dXMgPSBnc3RfYmFzZV9zcmNfZG9fc3luYyAoc3JjLCByZXNfYnVmKTsKLQotICAvKiB3YWl0aW5nIGZvciB0aGUgY2xvY2sgY291bGQgaGF2ZSBtYWRlIHVzIGZsdXNoaW5nICovCi0gIGlmIChHX1VOTElLRUxZIChzcmMtPnByaXYtPmZsdXNoaW5nKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgY2FzZSBHU1RfQ0xPQ0tfRUFSTFk6Ci0gICAgICAvKiB0aGUgYnVmZmVyIGlzIHRvbyBsYXRlLiBXZSBjdXJyZW50bHkgZG9uJ3QgZHJvcCB0aGUgYnVmZmVyLiAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYnVmZmVyIHRvbyBsYXRlISwgcmV0dXJuaW5nIGFueXdheSIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQ0xPQ0tfT0s6Ci0gICAgICAvKiBidWZmZXIgc3luY2hyb25pc2VkIHByb3Blcmx5ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJidWZmZXIgb2siKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0NMT0NLX1VOU0NIRURVTEVEOgotICAgICAgLyogdGhpcyBjYXNlIGlzIHRyaWdnZXJlZCB3aGVuIHdlIHdlcmUgd2FpdGluZyBmb3IgdGhlIGNsb2NrIGFuZAotICAgICAgICogaXQgZ290IHVubG9ja2VkIGJlY2F1c2Ugd2UgZGlkIGEgc3RhdGUgY2hhbmdlLiBJbiBhbnkgY2FzZSwgZ2V0IHJpZCBvZgotICAgICAgICogdGhlIGJ1ZmZlci4gKi8KLSAgICAgIGlmICgqYnVmID09IE5VTEwpCi0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHJlc19idWYpOwotCi0gICAgICBpZiAoIXNyYy0+bGl2ZV9ydW5uaW5nKSB7Ci0gICAgICAgIC8qIFdlIHJldHVybiBGTFVTSElORyB3aGVuIHdlIGFyZSBub3QgcnVubmluZyB0byBzdG9wIHRoZSBkYXRhZmxvdyBhbHNvCi0gICAgICAgICAqIGdldCByaWQgb2YgdGhlIHByb2R1Y2VkIGJ1ZmZlci4gKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLAotICAgICAgICAgICAgImNsb2NrIHdhcyB1bnNjaGVkdWxlZCAoJWQpLCByZXR1cm5pbmcgRkxVU0hJTkciLCBzdGF0dXMpOwotICAgICAgICByZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIElmIHdlIGFyZSBydW5uaW5nIHdoZW4gdGhpcyBoYXBwZW5zLCB3ZSBxdWlja2x5IHN3aXRjaGVkIGJldHdlZW4KLSAgICAgICAgICogcGF1c2UgYW5kIHBsYXlpbmcuIFdlIHRyeSB0byBwcm9kdWNlIGEgbmV3IGJ1ZmZlciAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCi0gICAgICAgICAgICAiY2xvY2sgd2FzIHVuc2NoZWR1bGVkICglZCksIGJ1dCB3ZSBhcmUgcnVubmluZyIsIHN0YXR1cyk7Ci0gICAgICAgIGdvdG8gYWdhaW47Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyogYWxsIG90aGVyIHJlc3VsdCB2YWx1ZXMgYXJlIHVuZXhwZWN0ZWQgYW5kIGVycm9ycyAqLwotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgQ09SRSwgQ0xPQ0ssCi0gICAgICAgICAgKF8oIkludGVybmFsIGNsb2NrIGVycm9yLiIpKSwKLSAgICAgICAgICAoImNsb2NrIHJldHVybmVkIHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlICVkIiwgc3RhdHVzKSk7Ci0gICAgICBpZiAoKmJ1ZiA9PSBOVUxMKQotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChyZXNfYnVmKTsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgaWYgKEdfTElLRUxZIChyZXQgPT0gR1NUX0ZMT1dfT0spKQotICAgICpidWYgPSByZXNfYnVmOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1IgKi8KLXN0b3BwZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3YWl0X3BsYXlpbmcgcmV0dXJuZWQgJWQgKCVzKSIsIHJldCwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLW5vdF9vazoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNyZWF0ZSByZXR1cm5lZCAlZCAoJXMpIiwgcmV0LAotICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotbWFwX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBCVVNZLAotICAgICAgICAoXygiRmFpbGVkIHRvIG1hcCBidWZmZXIuIikpLAotICAgICAgICAoImZhaWxlZCB0byBtYXAgcmVzdWx0IGJ1ZmZlciBpbiBXUklURSBtb2RlIikpOwotICAgIGlmICgqYnVmID09IE5VTEwpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChyZXNfYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLW5vdF9zdGFydGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ2V0cmFuZ2UgYnV0IG5vdCBzdGFydGVkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1ub19mdW5jdGlvbjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5vIGNyZWF0ZSBmdW5jdGlvbiIpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICB9Ci11bmV4cGVjdGVkX2xlbmd0aDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVuZXhwZWN0ZWQgbGVuZ3RoICV1IChvZmZzZXQ9JSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiLCBzaXplPSUiIEdfR0lOVDY0X0ZPUk1BVCAiKSIsIGxlbmd0aCwgb2Zmc2V0LCBzcmMtPnNlZ21lbnQuZHVyYXRpb24pOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLXJlYWNoZWRfbnVtX2J1ZmZlcnM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZW50IGFsbCBidWZmZXJzIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICBpZiAoKmJ1ZiA9PSBOVUxMKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocmVzX2J1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3ZSBhcmUgRU9TIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2Vfc3JjX2dldHJhbmdlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmKQotewotICBHc3RCYXNlU3JjICpzcmM7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotCi0gIHNyYyA9IEdTVF9CQVNFX1NSQ19DQVNUIChwYXJlbnQpOwotCi0gIEdTVF9MSVZFX0xPQ0sgKHNyYyk7Ci0gIGlmIChHX1VOTElLRUxZIChzcmMtPnByaXYtPmZsdXNoaW5nKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIHJlcyA9IGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UgKHNyYywgb2Zmc2V0LCBsZW5ndGgsIGJ1Zik7Ci0KLWRvbmU6Ci0gIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICByZXMgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zcmNfaXNfcmFuZG9tX2FjY2VzcyAoR3N0QmFzZVNyYyAqIHNyYykKLXsKLSAgLyogd2UgbmVlZCB0byBzdGFydCB0aGUgYmFzZXNyYyB0byBjaGVjayByYW5kb20gYWNjZXNzICovCi0gIGlmICghR1NUX0JBU0VfU1JDX0lTX1NUQVJURUQgKHNyYykpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAiZG9pbmcgc3RhcnQvc3RvcCB0byBjaGVjayBnZXRfcmFuZ2Ugc3VwcG9ydCIpOwotICAgIGlmIChHX0xJS0VMWSAoZ3N0X2Jhc2Vfc3JjX3N0YXJ0IChzcmMpKSkgewotICAgICAgaWYgKGdzdF9iYXNlX3NyY19zdGFydF93YWl0IChzcmMpICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIHN0YXJ0X2ZhaWxlZDsKLSAgICAgIGdzdF9iYXNlX3NyY19zdG9wIChzcmMpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBzcmMtPnJhbmRvbV9hY2Nlc3M7Ci0KLSAgLyogRVJST1JTICovCi1zdGFydF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmYWlsZWQgdG8gc3RhcnQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3NyY19sb29wIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdEJhc2VTcmMgKnNyYzsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ2ludDY0IHBvc2l0aW9uOwotICBnYm9vbGVhbiBlb3M7Ci0gIGd1aW50IGJsb2Nrc2l6ZTsKLSAgR0xpc3QgKnBlbmRpbmdfZXZlbnRzID0gTlVMTCwgKnRtcDsKLQotICBlb3MgPSBGQUxTRTsKLQotICBzcmMgPSBHU1RfQkFTRV9TUkMgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpKTsKLQotICAvKiBKdXN0IGxlYXZlIGltbWVkaWF0ZWx5IGlmIHdlJ3JlIGZsdXNoaW5nICovCi0gIEdTVF9MSVZFX0xPQ0sgKHNyYyk7Ci0gIGlmIChHX1VOTElLRUxZIChzcmMtPnByaXYtPmZsdXNoaW5nIHx8IEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQotICAgIGdvdG8gZmx1c2hpbmc7Ci0gIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKLQotICBnc3RfYmFzZV9zcmNfc2VuZF9zdHJlYW1fc3RhcnQgKHNyYyk7Ci0KLSAgLyogVGhlIHN0cmVhbS1zdGFydCBldmVudCBjb3VsZCd2ZSBjYXVzZWQgc29tZXRoaW5nIHRvIGZsdXNoIHVzICovCi0gIEdTVF9MSVZFX0xPQ0sgKHNyYyk7Ci0gIGlmIChHX1VOTElLRUxZIChzcmMtPnByaXYtPmZsdXNoaW5nIHx8IEdTVF9QQURfSVNfRkxVU0hJTkcgKHBhZCkpKQotICAgIGdvdG8gZmx1c2hpbmc7Ci0gIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKLQotICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHJlbmVnb3RpYXRlICovCi0gIGlmIChnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlIChwYWQpKSB7Ci0gICAgaWYgKCFnc3RfYmFzZV9zcmNfbmVnb3RpYXRlIChzcmMpKSB7Ci0gICAgICBnc3RfcGFkX21hcmtfcmVjb25maWd1cmUgKHBhZCk7Ci0gICAgICBpZiAoR1NUX1BBRF9JU19GTFVTSElORyAocGFkKSkgewotICAgICAgICBHU1RfTElWRV9MT0NLIChzcmMpOwotICAgICAgICBnb3RvIGZsdXNoaW5nOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ290byBuZWdvdGlhdGVfZmFpbGVkOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEdTVF9MSVZFX0xPQ0sgKHNyYyk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNyYy0+cHJpdi0+Zmx1c2hpbmcgfHwgR1NUX1BBRF9JU19GTFVTSElORyAocGFkKSkpCi0gICAgZ290byBmbHVzaGluZzsKLQotICBibG9ja3NpemUgPSBzcmMtPmJsb2Nrc2l6ZTsKLQotICAvKiBpZiB3ZSBvcGVyYXRlIGluIGJ5dGVzLCB3ZSBjYW4gY2FsY3VsYXRlIGFuIG9mZnNldCAqLwotICBpZiAoc3JjLT5zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgcG9zaXRpb24gPSBzcmMtPnNlZ21lbnQucG9zaXRpb247Ci0gICAgLyogZm9yIG5lZ2F0aXZlIHJhdGVzLCBzdGFydCB3aXRoIHN1YnRyYWN0aW5nIHRoZSBibG9ja3NpemUgKi8KLSAgICBpZiAoc3JjLT5zZWdtZW50LnJhdGUgPCAwLjApIHsKLSAgICAgIC8qIHdlIGNhbm5vdCBnbyBiZWxvdyBzZWdtZW50LnN0YXJ0ICovCi0gICAgICBpZiAocG9zaXRpb24gPiBzcmMtPnNlZ21lbnQuc3RhcnQgKyBibG9ja3NpemUpCi0gICAgICAgIHBvc2l0aW9uIC09IGJsb2Nrc2l6ZTsKLSAgICAgIGVsc2UgewotICAgICAgICAvKiBsYXN0IGJsb2NrLCByZW1haW5kZXIgdXAgdG8gc2VnbWVudC5zdGFydCAqLwotICAgICAgICBibG9ja3NpemUgPSBwb3NpdGlvbiAtIHNyYy0+c2VnbWVudC5zdGFydDsKLSAgICAgICAgcG9zaXRpb24gPSBzcmMtPnNlZ21lbnQuc3RhcnQ7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UKLSAgICBwb3NpdGlvbiA9IC0xOwotCi0gIEdTVF9MT0dfT0JKRUNUIChzcmMsICJuZXh0X3RzICUiIEdTVF9USU1FX0ZPUk1BVCAiIHNpemUgJXUiLAotICAgICAgR1NUX1RJTUVfQVJHUyAocG9zaXRpb24pLCBibG9ja3NpemUpOwotCi0gIHJldCA9IGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UgKHNyYywgcG9zaXRpb24sIGJsb2Nrc2l6ZSwgJmJ1Zik7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJwYXVzaW5nIGFmdGVyIGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UoKSA9ICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKLSAgICBnb3RvIHBhdXNlOwotICB9Ci0gIC8qIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGJ1ZiA9PSBOVUxMKSkKLSAgICBnb3RvIG51bGxfYnVmZmVyOwotCi0gIC8qIHB1c2ggZXZlbnRzIHRvIGNsb3NlL3N0YXJ0IG91ciBzZWdtZW50IGJlZm9yZSB3ZSBwdXNoIHRoZSBidWZmZXIuICovCi0gIGlmIChHX1VOTElLRUxZIChzcmMtPnByaXYtPnNlZ21lbnRfcGVuZGluZykpIHsKLSAgICBHc3RFdmVudCAqc2VnX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc3JjLT5zZWdtZW50KTsKLQotICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChzZWdfZXZlbnQsIHNyYy0+cHJpdi0+c2VnbWVudF9zZXFudW0pOwotICAgIHNyYy0+cHJpdi0+c2VnbWVudF9zZXFudW0gPSBnc3RfdXRpbF9zZXFudW1fbmV4dCAoKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgc2VnX2V2ZW50KTsKLSAgICBzcmMtPnByaXYtPnNlZ21lbnRfcGVuZGluZyA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZzcmMtPnByaXYtPmhhdmVfZXZlbnRzKSkgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICAvKiB0YWtlIHRoZSBldmVudHMgKi8KLSAgICBwZW5kaW5nX2V2ZW50cyA9IHNyYy0+cHJpdi0+cGVuZGluZ19ldmVudHM7Ci0gICAgc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7Ci0gICAgZ19hdG9taWNfaW50X3NldCAoJnNyYy0+cHJpdi0+aGF2ZV9ldmVudHMsIEZBTFNFKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLSAgfQotCi0gIC8qIFB1c2ggb3V0IHBlbmRpbmcgZXZlbnRzIGlmIGFueSAqLwotICBpZiAoR19VTkxJS0VMWSAocGVuZGluZ19ldmVudHMgIT0gTlVMTCkpIHsKLSAgICBmb3IgKHRtcCA9IHBlbmRpbmdfZXZlbnRzOyB0bXA7IHRtcCA9IGdfbGlzdF9uZXh0ICh0bXApKSB7Ci0gICAgICBHc3RFdmVudCAqZXYgPSAoR3N0RXZlbnQgKikgdG1wLT5kYXRhOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGV2KTsKLSAgICB9Ci0gICAgZ19saXN0X2ZyZWUgKHBlbmRpbmdfZXZlbnRzKTsKLSAgfQotCi0gIC8qIGZpZ3VyZSBvdXQgdGhlIG5ldyBwb3NpdGlvbiAqLwotICBzd2l0Y2ggKHNyYy0+c2VnbWVudC5mb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgewotICAgICAgZ3VpbnQgYnVmc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0KLSAgICAgIC8qIHdlIHN1YnRyYWN0ZWQgYWJvdmUgZm9yIG5lZ2F0aXZlIHJhdGVzICovCi0gICAgICBpZiAoc3JjLT5zZWdtZW50LnJhdGUgPj0gMC4wKQotICAgICAgICBwb3NpdGlvbiArPSBidWZzaXplOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgIHsKLSAgICAgIEdzdENsb2NrVGltZSBzdGFydCwgZHVyYXRpb247Ci0KLSAgICAgIHN0YXJ0ID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gICAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7Ci0KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RhcnQpKQotICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0OwotICAgICAgZWxzZQotICAgICAgICBwb3NpdGlvbiA9IHNyYy0+c2VnbWVudC5wb3NpdGlvbjsKLQotICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdXJhdGlvbikpIHsKLSAgICAgICAgaWYgKHNyYy0+c2VnbWVudC5yYXRlID49IDAuMCkKLSAgICAgICAgICBwb3NpdGlvbiArPSBkdXJhdGlvbjsKLSAgICAgICAgZWxzZSBpZiAocG9zaXRpb24gPiBkdXJhdGlvbikKLSAgICAgICAgICBwb3NpdGlvbiAtPSBkdXJhdGlvbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHBvc2l0aW9uID0gMDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgIGlmIChzcmMtPnNlZ21lbnQucmF0ZSA+PSAwLjApCi0gICAgICAgIHBvc2l0aW9uID0gR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpOwotICAgICAgZWxzZQotICAgICAgICBwb3NpdGlvbiA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHBvc2l0aW9uID0gLTE7Ci0gICAgICBicmVhazsKLSAgfQotICBpZiAocG9zaXRpb24gIT0gLTEpIHsKLSAgICBpZiAoc3JjLT5zZWdtZW50LnJhdGUgPj0gMC4wKSB7Ci0gICAgICAvKiBwb3NpdGl2ZSByYXRlLCBjaGVjayBpZiB3ZSByZWFjaGVkIHRoZSBzdG9wICovCi0gICAgICBpZiAoc3JjLT5zZWdtZW50LnN0b3AgIT0gLTEpIHsKLSAgICAgICAgaWYgKHBvc2l0aW9uID49IHNyYy0+c2VnbWVudC5zdG9wKSB7Ci0gICAgICAgICAgZW9zID0gVFJVRTsKLSAgICAgICAgICBwb3NpdGlvbiA9IHNyYy0+c2VnbWVudC5zdG9wOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5lZ2F0aXZlIHJhdGUsIGNoZWNrIGlmIHdlIHJlYWNoZWQgdGhlIHN0YXJ0LiBzdGFydCBpcyBhbHdheXMgc2V0IHRvCi0gICAgICAgKiBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gLTEgKi8KLSAgICAgIGlmIChwb3NpdGlvbiA8PSBzcmMtPnNlZ21lbnQuc3RhcnQpIHsKLSAgICAgICAgZW9zID0gVFJVRTsKLSAgICAgICAgcG9zaXRpb24gPSBzcmMtPnNlZ21lbnQuc3RhcnQ7Ci0gICAgICB9Ci0gICAgICAvKiB3aGVuIGdvaW5nIHJldmVyc2UsIGFsbCBidWZmZXJzIGFyZSBESVNDT05UICovCi0gICAgICBzcmMtPnByaXYtPmRpc2NvbnQgPSBUUlVFOwotICAgIH0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gICAgc3JjLT5zZWdtZW50LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoc3JjLT5wcml2LT5kaXNjb250KSkgewotICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAibWFya2luZyBwZW5kaW5nIERJU0NPTlQiKTsKLSAgICBidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgc3JjLT5wcml2LT5kaXNjb250ID0gRkFMU0U7Ci0gIH0KLSAgR1NUX0xJVkVfVU5MT0NLIChzcmMpOwotCi0gIHJldCA9IGdzdF9wYWRfcHVzaCAocGFkLCBidWYpOwotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkgewotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpIHsKLSAgICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0gICAgfQotICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAicGF1c2luZyBhZnRlciBnc3RfcGFkX3B1c2goKSA9ICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdvdG8gcGF1c2U7Ci0gIH0KLQotICAvKiBTZWdtZW50IHBlbmRpbmcgbWVhbnMgdGhhdCBhIG5ldyBzZWdtZW50IHdhcyBjb25maWd1cmVkCi0gICAqIGR1cmluZyB0aGlzIGxvb3AgcnVuICovCi0gIGlmIChHX1VOTElLRUxZIChlb3MgJiYgIXNyYy0+cHJpdi0+c2VnbWVudF9wZW5kaW5nKSkgewotICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAicGF1c2luZyBhZnRlciBlbmQgb2Ygc2VnbWVudCIpOwotICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICBnb3RvIHBhdXNlOwotICB9Ci0KLWRvbmU6Ci0gIHJldHVybjsKLQotICAvKiBzcGVjaWFsIGNhc2VzICovCi1ub3RfbmVnb3RpYXRlZDoKLSAgewotICAgIGlmIChnc3RfcGFkX25lZWRzX3JlY29uZmlndXJlIChwYWQpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJSZXRyeWluZyB0byByZW5lZ290aWF0ZSIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBmYWxsdGhyb3VnaCB3aGVuIHB1c2ggcmV0dXJucyBOT1RfTkVHT1RJQVRFRCBhbmQgd2UgZG9uJ3QgaGF2ZQotICAgICAqIGEgcGVuZGluZyBuZWdvdGlhdGlvbiByZXF1ZXN0IG9uIG91ciBzcmNwYWQgKi8KLSAgfQotbmVnb3RpYXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIk5vdCBuZWdvdGlhdGVkIik7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gICAgZ290byBwYXVzZTsKLSAgfQotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICBHU1RfTElWRV9VTkxPQ0sgKHNyYyk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgZ290byBwYXVzZTsKLSAgfQotcGF1c2U6Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqcmVhc29uID0gZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCk7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicGF1c2luZyB0YXNrLCByZWFzb24gJXMiLCByZWFzb24pOwotICAgIHNyYy0+cnVubmluZyA9IEZBTFNFOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocGFkKTsKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgZ2Jvb2xlYW4gZmxhZ19zZWdtZW50OwotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgIGdpbnQ2NCBwb3NpdGlvbjsKLQotICAgICAgZmxhZ19zZWdtZW50ID0gKHNyYy0+c2VnbWVudC5mbGFncyAmIEdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVCkgIT0gMDsKLSAgICAgIGZvcm1hdCA9IHNyYy0+c2VnbWVudC5mb3JtYXQ7Ci0gICAgICBwb3NpdGlvbiA9IHNyYy0+c2VnbWVudC5wb3NpdGlvbjsKLQotICAgICAgLyogcGVyZm9ybSBFT1MgbG9naWMgKi8KLSAgICAgIGlmIChzcmMtPnByaXYtPmZvcmNlZF9lb3MpIHsKLSAgICAgICAgZ19hc3NlcnQgKGdfYXRvbWljX2ludF9nZXQgKCZzcmMtPnByaXYtPmhhc19wZW5kaW5nX2VvcykpOwotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gICAgICAgIGV2ZW50ID0gc3JjLT5wcml2LT5wZW5kaW5nX2VvczsKLSAgICAgICAgc3JjLT5wcml2LT5wZW5kaW5nX2VvcyA9IE5VTEw7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotCi0gICAgICB9IGVsc2UgaWYgKGZsYWdfc2VnbWVudCkgewotICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gICAgICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHU1RfT0JKRUNUX0NBU1QgKHNyYyksCi0gICAgICAgICAgICBmb3JtYXQsIHBvc2l0aW9uKTsKLSAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobWVzc2FnZSwgc3JjLT5wcml2LT5zZXFudW0pOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHNyYyksIG1lc3NhZ2UpOwotICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lIChmb3JtYXQsIHBvc2l0aW9uKTsKLSAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBzcmMtPnByaXYtPnNlcW51bSk7Ci0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgc3JjLT5wcml2LT5zZXFudW0pOwotICAgICAgfQotCi0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpOwotICAgICAgc3JjLT5wcml2LT5mb3JjZWRfZW9zID0gRkFMU0U7Ci0KLSAgICB9IGVsc2UgaWYgKHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEIHx8IHJldCA8PSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZXZlbnQsIHNyYy0+cHJpdi0+c2VxbnVtKTsKLSAgICAgIC8qIGZvciBmYXRhbCBlcnJvcnMgd2UgcG9zdCBhbiBlcnJvciBtZXNzYWdlLCBwb3N0IHRoZSBlcnJvcgotICAgICAgICogZmlyc3Qgc28gdGhlIGFwcCBrbm93cyBhYm91dCB0aGUgZXJyb3IgZmlyc3QuCi0gICAgICAgKiBBbHNvIGRvbid0IGRvIHRoaXMgZm9yIEZMVVNISU5HIGJlY2F1c2UgaXQgaGFwcGVucwotICAgICAgICogZHVlIHRvIGZsdXNoaW5nIGFuZCBwb3N0aW5nIGFuIGVycm9yIG1lc3NhZ2UgYmVjYXVzZSBvZgotICAgICAgICogdGhhdCBpcyB0aGUgd3JvbmcgdGhpbmcgdG8gZG8sIGUuZy4gd2hlbiB3ZSdyZSBkb2luZwotICAgICAgICogYSBmbHVzaGluZyBzZWVrLiAqLwotICAgICAgR1NUX0VMRU1FTlRfRkxPV19FUlJPUiAoc3JjLCByZXQpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGV2ZW50KTsKLSAgICB9Ci0gICAgZ290byBkb25lOwotICB9Ci1udWxsX2J1ZmZlcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFNUUkVBTSwgRkFJTEVELAotICAgICAgICAoXygiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIpKSwgKCJlbGVtZW50IHJldHVybmVkIE5VTEwgYnVmZmVyIikpOwotICAgIEdTVF9MSVZFX1VOTE9DSyAoc3JjKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zcmNfc2V0X2FsbG9jYXRpb24gKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RCdWZmZXJQb29sICogcG9vbCwKLSAgICBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCi17Ci0gIEdzdEFsbG9jYXRvciAqb2xkYWxsb2M7Ci0gIEdzdEJ1ZmZlclBvb2wgKm9sZHBvb2w7Ci0gIEdzdEJhc2VTcmNQcml2YXRlICpwcml2ID0gYmFzZXNyYy0+cHJpdjsKLQotICBpZiAocG9vbCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJhY3RpdmF0ZSBwb29sIik7Ci0gICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgVFJVRSkpCi0gICAgICBnb3RvIGFjdGl2YXRlX2ZhaWxlZDsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNyYyk7Ci0gIG9sZHBvb2wgPSBwcml2LT5wb29sOwotICBwcml2LT5wb29sID0gcG9vbDsKLQotICBvbGRhbGxvYyA9IHByaXYtPmFsbG9jYXRvcjsKLSAgcHJpdi0+YWxsb2NhdG9yID0gYWxsb2NhdG9yOwotCi0gIGlmIChwcml2LT5wb29sKQotICAgIGdzdF9vYmplY3RfcmVmIChwcml2LT5wb29sKTsKLSAgaWYgKHByaXYtPmFsbG9jYXRvcikKLSAgICBnc3Rfb2JqZWN0X3JlZiAocHJpdi0+YWxsb2NhdG9yKTsKLQotICBpZiAocGFyYW1zKQotICAgIHByaXYtPnBhcmFtcyA9ICpwYXJhbXM7Ci0gIGVsc2UKLSAgICBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdCAoJnByaXYtPnBhcmFtcyk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKLQotICBpZiAob2xkcG9vbCkgewotICAgIC8qIG9ubHkgZGVhY3RpdmF0ZSBpZiB0aGUgcG9vbCBpcyBub3QgdGhlIG9uZSB3ZSdyZSB1c2luZyAqLwotICAgIGlmIChvbGRwb29sICE9IHBvb2wpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJkZWFjdGl2YXRlIG9sZCBwb29sIik7Ci0gICAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAob2xkcG9vbCwgRkFMU0UpOwotICAgIH0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGRwb29sKTsKLSAgfQotICBpZiAob2xkYWxsb2MpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGRhbGxvYyk7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1hY3RpdmF0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChiYXNlc3JjLCAiZmFpbGVkIHRvIGFjdGl2YXRlIGJ1ZmZlcnBvb2wuIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3Bvb2wgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIEdzdEJhc2VTcmNQcml2YXRlICpwcml2ID0gYmFzZXNyYy0+cHJpdjsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOwotICBpZiAoKHBvb2wgPSBwcml2LT5wb29sKSkKLSAgICBwb29sID0gZ3N0X29iamVjdF9yZWYgKHBvb2wpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7Ci0KLSAgaWYgKHBvb2wpIHsKLSAgICByZXMgPSBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgYWN0aXZlKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX2RlY2lkZV9hbGxvY2F0aW9uX2RlZmF1bHQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RDYXBzICpvdXRjYXBzOwotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBndWludCBzaXplLCBtaW4sIG1heDsKLSAgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7Ci0gIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zOwotICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZzsKLSAgZ2Jvb2xlYW4gdXBkYXRlX2FsbG9jYXRvcjsKLQotICBnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbiAocXVlcnksICZvdXRjYXBzLCBOVUxMKTsKLQotICAvKiB3ZSBnb3QgY29uZmlndXJhdGlvbiBmcm9tIG91ciBwZWVyIG9yIHRoZSBkZWNpZGVfYWxsb2NhdGlvbiBtZXRob2QsCi0gICAqIHBhcnNlIHRoZW0gKi8KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3BhcmFtcyAocXVlcnkpID4gMCkgewotICAgIC8qIHRyeSB0aGUgYWxsb2NhdG9yICovCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3BhcmFtIChxdWVyeSwgMCwgJmFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gICAgdXBkYXRlX2FsbG9jYXRvciA9IFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgYWxsb2NhdG9yID0gTlVMTDsKLSAgICBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdCAoJnBhcmFtcyk7Ci0gICAgdXBkYXRlX2FsbG9jYXRvciA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzIChxdWVyeSkgPiAwKSB7Ci0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCAwLCAmcG9vbCwgJnNpemUsICZtaW4sICZtYXgpOwotCi0gICAgaWYgKHBvb2wgPT0gTlVMTCkgewotICAgICAgLyogbm8gcG9vbCwgd2UgY2FuIG1ha2Ugb3VyIG93biAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIm5vIHBvb2wsIG1ha2luZyBuZXcgcG9vbCIpOwotICAgICAgcG9vbCA9IGdzdF9idWZmZXJfcG9vbF9uZXcgKCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHBvb2wgPSBOVUxMOwotICAgIHNpemUgPSBtaW4gPSBtYXggPSAwOwotICB9Ci0KLSAgLyogbm93IGNvbmZpZ3VyZSAqLwotICBpZiAocG9vbCkgewotICAgIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKLSAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKGNvbmZpZywgb3V0Y2Fwcywgc2l6ZSwgbWluLCBtYXgpOwotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvciAoY29uZmlnLCBhbGxvY2F0b3IsICZwYXJhbXMpOwotCi0gICAgLyogYnVmZmVyIHBvb2wgbWF5IGhhdmUgdG8gZG8gc29tZSBjaGFuZ2VzICovCi0gICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAocG9vbCwgY29uZmlnKSkgewotICAgICAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotCi0gICAgICAvKiBJZiBjaGFuZ2UgYXJlIG5vdCBhY2NlcHRhYmxlLCBmYWxsYmFjayB0byBnZW5lcmljIHBvb2wgKi8KLSAgICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ192YWxpZGF0ZV9wYXJhbXMgKGNvbmZpZywgb3V0Y2Fwcywgc2l6ZSwgbWluLAotICAgICAgICAgICAgICBtYXgpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJ1bnN1cHBvcnRlZCBwb29sLCBtYWtpbmcgbmV3IHBvb2wiKTsKLQotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgICAgICAgcG9vbCA9IGdzdF9idWZmZXJfcG9vbF9uZXcgKCk7Ci0gICAgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCBvdXRjYXBzLCBzaXplLCBtaW4sIG1heCk7Ci0gICAgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X2FsbG9jYXRvciAoY29uZmlnLCBhbGxvY2F0b3IsICZwYXJhbXMpOwotICAgICAgfQotCi0gICAgICBpZiAoIWdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25maWcpKQotICAgICAgICBnb3RvIGNvbmZpZ19mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHVwZGF0ZV9hbGxvY2F0b3IpCi0gICAgZ3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wYXJhbSAocXVlcnksIDAsIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gIGVsc2UKLSAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcGFyYW0gKHF1ZXJ5LCBhbGxvY2F0b3IsICZwYXJhbXMpOwotICBpZiAoYWxsb2NhdG9yKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGFsbG9jYXRvcik7Ci0KLSAgaWYgKHBvb2wpIHsKLSAgICBnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCAwLCBwb29sLCBzaXplLCBtaW4sIG1heCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocG9vbCk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotY29uZmlnX2ZhaWxlZDoKLSAgR1NUX0VMRU1FTlRfRVJST1IgKGJhc2VzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICgiRmFpbGVkIHRvIGNvbmZpZ3VyZSB0aGUgYnVmZmVyIHBvb2wiKSwKLSAgICAgICgiQ29uZmlndXJhdGlvbiBpcyBtb3N0IGxpa2VseSBpbnZhbGlkLCBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuIikpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19wcmVwYXJlX2FsbG9jYXRpb24gKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0gIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IE5VTEw7Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yID0gTlVMTDsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoYmFzZXNyYyk7Ci0KLSAgLyogbWFrZSBxdWVyeSBhbmQgbGV0IHBlZXIgcGFkIGFuc3dlciwgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgaWYgaXQgd29ya2VkIG9yCi0gICAqIG5vdCwgaWYgaXQgZmFpbGVkLCB0aGUgYWxsb2NhdGlvbiBxdWVyeSB3b3VsZCBjb250YWluIGRlZmF1bHRzIGFuZCB0aGUKLSAgICogc3ViY2xhc3Mgd291bGQgdGhlbiBzZXQgYmV0dGVyIHZhbHVlcyBpZiBuZWVkZWQgKi8KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2FsbG9jYXRpb24gKGNhcHMsIFRSVUUpOwotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoYmFzZXNyYy0+c3JjcGFkLCBxdWVyeSkpIHsKLSAgICAvKiBub3QgYSBwcm9ibGVtLCBqdXN0IGRlYnVnIGEgbGl0dGxlICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInBlZXIgQUxMT0NBVElPTiBxdWVyeSBmYWlsZWQiKTsKLSAgfQotCi0gIGdfYXNzZXJ0IChiY2xhc3MtPmRlY2lkZV9hbGxvY2F0aW9uICE9IE5VTEwpOwotICByZXN1bHQgPSBiY2xhc3MtPmRlY2lkZV9hbGxvY2F0aW9uIChiYXNlc3JjLCBxdWVyeSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgIkFMTE9DQVRJT04gKCVkKSBwYXJhbXM6ICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQsCi0gICAgICBxdWVyeSk7Ci0KLSAgaWYgKCFyZXN1bHQpCi0gICAgZ290byBub19kZWNpZGVfYWxsb2NhdGlvbjsKLQotICAvKiB3ZSBnb3QgY29uZmlndXJhdGlvbiBmcm9tIG91ciBwZWVyIG9yIHRoZSBkZWNpZGVfYWxsb2NhdGlvbiBtZXRob2QsCi0gICAqIHBhcnNlIHRoZW0gKi8KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3BhcmFtcyAocXVlcnkpID4gMCkgewotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wYXJhbSAocXVlcnksIDAsICZhbGxvY2F0b3IsICZwYXJhbXMpOwotICB9IGVsc2UgewotICAgIGFsbG9jYXRvciA9IE5VTEw7Ci0gICAgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXQgKCZwYXJhbXMpOwotICB9Ci0KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzIChxdWVyeSkgPiAwKQotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sIChxdWVyeSwgMCwgJnBvb2wsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gIHJlc3VsdCA9IGdzdF9iYXNlX3NyY19zZXRfYWxsb2NhdGlvbiAoYmFzZXNyYywgcG9vbCwgYWxsb2NhdG9yLCAmcGFyYW1zKTsKLQotICBpZiAoYWxsb2NhdG9yKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGFsbG9jYXRvcik7Ci0gIGlmIChwb29sKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRXJyb3JzICovCi1ub19kZWNpZGVfYWxsb2NhdGlvbjoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmFzZXNyYywgIlN1YmNsYXNzIGZhaWxlZCB0byBkZWNpZGUgYWxsb2NhdGlvbiIpOwotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi0vKiBkZWZhdWx0IG5lZ290aWF0aW9uIGNvZGUuCi0gKgotICogVGFrZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBzcmMgYW5kIHNpbmsgcGFkcywgdGFrZSBmaXJzdAotICogY2FwcyBhbmQgZml4YXRlLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19kZWZhdWx0X25lZ290aWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIEdzdENhcHMgKnRoaXNjYXBzOwotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMgPSBOVUxMOwotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLQotICAvKiBmaXJzdCBzZWUgd2hhdCBpcyBwb3NzaWJsZSBvbiBvdXIgc291cmNlIHBhZCAqLwotICB0aGlzY2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYyksIE5VTEwpOwotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiY2FwcyBvZiBzcmM6ICUiIEdTVF9QVFJfRk9STUFULCB0aGlzY2Fwcyk7Ci0gIC8qIG5vdGhpbmcgb3IgYW55dGhpbmcgaXMgYWxsb3dlZCwgd2UncmUgZG9uZSAqLwotICBpZiAodGhpc2NhcHMgPT0gTlVMTCB8fCBnc3RfY2Fwc19pc19hbnkgKHRoaXNjYXBzKSkKLSAgICBnb3RvIG5vX25lZ29fbmVlZGVkOwotCi0gIGlmIChHX1VOTElLRUxZIChnc3RfY2Fwc19pc19lbXB0eSAodGhpc2NhcHMpKSkKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgLyogZ2V0IHRoZSBwZWVyIGNhcHMgKi8KLSAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYyksIHRoaXNjYXBzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImNhcHMgb2YgcGVlcjogJSIgR1NUX1BUUl9GT1JNQVQsIHBlZXJjYXBzKTsKLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgLyogVGhlIHJlc3VsdCBpcyBhbHJlYWR5IGEgc3Vic2V0IG9mIG91ciBjYXBzICovCi0gICAgY2FwcyA9IHBlZXJjYXBzOwotICAgIGdzdF9jYXBzX3VucmVmICh0aGlzY2Fwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogbm8gcGVlciwgd29yayB3aXRoIG91ciBvd24gY2FwcyB0aGVuICovCi0gICAgY2FwcyA9IHRoaXNjYXBzOwotICB9Ci0gIGlmIChjYXBzICYmICFnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICAvKiBub3cgZml4YXRlICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImhhdmUgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgIGlmIChnc3RfY2Fwc19pc19hbnkgKGNhcHMpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiYW55IGNhcHMsIHdlIHN0b3AiKTsKLSAgICAgIC8qIGhtbSwgc3RpbGwgYW55dGhpbmcsIHNvIGVsZW1lbnQgY2FuIGRvIGFueXRoaW5nIGFuZAotICAgICAgICogbmVnbyBpcyBub3QgbmVlZGVkICovCi0gICAgICByZXN1bHQgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBjYXBzID0gZ3N0X2Jhc2Vfc3JjX2ZpeGF0ZSAoYmFzZXNyYywgY2Fwcyk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiZml4YXRlZCB0bzogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgICAgaWYgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSkgewotICAgICAgICAvKiB5YXksIGZpeGVkIGNhcHMsIHVzZSB0aG9zZSB0aGVuLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHN1YmNsYXNzIGRvZXMKLSAgICAgICAgICogbm90IGFjY2VwdCB0aGlzIGNhcHMgYWZ0ZXIgYWxsIGFuZCB3ZSBoYXZlIHRvIGZhaWwuICovCi0gICAgICAgIHJlc3VsdCA9IGdzdF9iYXNlX3NyY19zZXRfY2FwcyAoYmFzZXNyYywgY2Fwcyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAibm8gY29tbW9uIGNhcHMiKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotCi1ub19uZWdvX25lZWRlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJubyBuZWdvdGlhdGlvbiBuZWVkZWQiKTsKLSAgICBpZiAodGhpc2NhcHMpCi0gICAgICBnc3RfY2Fwc191bnJlZiAodGhpc2NhcHMpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci1ub19jYXBzOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGJhc2VzcmMsIFNUUkVBTSwgRk9STUFULAotICAgICAgICAoIk5vIHN1cHBvcnRlZCBmb3JtYXRzIGZvdW5kIiksCi0gICAgICAgICgiVGhpcyBlbGVtZW50IGRpZCBub3QgcHJvZHVjZSB2YWxpZCBjYXBzIikpOwotICAgIGlmICh0aGlzY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmICh0aGlzY2Fwcyk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zcmNfbmVnb3RpYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChiYXNlc3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAic3RhcnRpbmcgbmVnb3RpYXRpb24iKTsKLQotICBpZiAoR19MSUtFTFkgKGJjbGFzcy0+bmVnb3RpYXRlKSkKLSAgICByZXN1bHQgPSBiY2xhc3MtPm5lZ290aWF0ZSAoYmFzZXNyYyk7Ci0gIGVsc2UKLSAgICByZXN1bHQgPSBUUlVFOwotCi0gIGlmIChHX0xJS0VMWSAocmVzdWx0KSkgewotICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChiYXNlc3JjLT5zcmNwYWQpOwotCi0gICAgcmVzdWx0ID0gZ3N0X2Jhc2Vfc3JjX3ByZXBhcmVfYWxsb2NhdGlvbiAoYmFzZXNyYywgY2Fwcyk7Ci0KLSAgICBpZiAoY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOwotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgR1NUX0xJVkVfTE9DSyAoYmFzZXNyYyk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChiYXNlc3JjKTsKLSAgaWYgKEdTVF9CQVNFX1NSQ19JU19TVEFSVElORyAoYmFzZXNyYykpCi0gICAgZ290byB3YXNfc3RhcnRpbmc7Ci0gIGlmIChHU1RfQkFTRV9TUkNfSVNfU1RBUlRFRCAoYmFzZXNyYykpCi0gICAgZ290byB3YXNfc3RhcnRlZDsKLQotICBiYXNlc3JjLT5wcml2LT5zdGFydF9yZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoYmFzZXNyYywgR1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRJTkcpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmYmFzZXNyYy0+c2VnbWVudCwgYmFzZXNyYy0+c2VnbWVudC5mb3JtYXQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7Ci0KLSAgYmFzZXNyYy0+bnVtX2J1ZmZlcnNfbGVmdCA9IGJhc2VzcmMtPm51bV9idWZmZXJzOwotICBiYXNlc3JjLT5ydW5uaW5nID0gRkFMU0U7Ci0gIGJhc2VzcmMtPnByaXYtPnNlZ21lbnRfcGVuZGluZyA9IEZBTFNFOwotICBiYXNlc3JjLT5wcml2LT5zZWdtZW50X3NlcW51bSA9IGdzdF91dGlsX3NlcW51bV9uZXh0ICgpOwotICBiYXNlc3JjLT5wcml2LT5mb3JjZWRfZW9zID0gRkFMU0U7Ci0gIEdTVF9MSVZFX1VOTE9DSyAoYmFzZXNyYyk7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoYmFzZXNyYyk7Ci0gIGlmIChiY2xhc3MtPnN0YXJ0KQotICAgIHJlc3VsdCA9IGJjbGFzcy0+c3RhcnQgKGJhc2VzcmMpOwotICBlbHNlCi0gICAgcmVzdWx0ID0gVFJVRTsKLQotICBpZiAoIXJlc3VsdCkKLSAgICBnb3RvIGNvdWxkX25vdF9zdGFydDsKLQotICBpZiAoIWdzdF9iYXNlX3NyY19pc19hc3luYyAoYmFzZXNyYykpIHsKLSAgICBnc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGUgKGJhc2VzcmMsIEdTVF9GTE9XX09LKTsKLSAgICAvKiBub3QgcmVhbGx5IHdhaXRpbmcgaGVyZSwgd2UgY2FsbCB0aGlzIHRvIGdldCB0aGUgcmVzdWx0Ci0gICAgICogZnJvbSB0aGUgc3RhcnRfY29tcGxldGUgY2FsbCAqLwotICAgIHJlc3VsdCA9IGdzdF9iYXNlX3NyY19zdGFydF93YWl0IChiYXNlc3JjKSA9PSBHU1RfRkxPV19PSzsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1IgKi8KLXdhc19zdGFydGluZzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJ3YXMgc3RhcnRpbmciKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7Ci0gICAgR1NUX0xJVkVfVU5MT0NLIChiYXNlc3JjKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotd2FzX3N0YXJ0ZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAid2FzIHN0YXJ0ZWQiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7Ci0gICAgR1NUX0xJVkVfVU5MT0NLIChiYXNlc3JjKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotY291bGRfbm90X3N0YXJ0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImNvdWxkIG5vdCBzdGFydCIpOwotICAgIC8qIHN1YmNsYXNzIGlzIHN1cHBvc2VkIHRvIHBvc3QgYSBtZXNzYWdlIGJ1dCB3ZSBwb3N0IG9uZSBhcyBhIGZhbGxiYWNrCi0gICAgICoganVzdCBpbiBjYXNlLiBXZSBkb24ndCBoYXZlIHRvIGNhbGwgX3N0b3AuICovCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGJhc2VzcmMsIENPUkUsIFNUQVRFX0NIQU5HRSwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byBzdGFydCIpKTsKLSAgICBnc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGUgKGJhc2VzcmMsIEdTVF9GTE9XX0VSUk9SKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGU6Ci0gKiBAYmFzZXNyYzogYmFzZSBzb3VyY2UgaW5zdGFuY2UKLSAqIEByZXQ6IGEgI0dzdEZsb3dSZXR1cm4KLSAqCi0gKiBDb21wbGV0ZSBhbiBhc3luY2hyb25vdXMgc3RhcnQgb3BlcmF0aW9uLiBXaGVuIHRoZSBzdWJjbGFzcyBvdmVycmlkZXMgdGhlCi0gKiBzdGFydCBtZXRob2QsIGl0IHNob3VsZCBjYWxsIGdzdF9iYXNlX3NyY19zdGFydF9jb21wbGV0ZSgpIHdoZW4gdGhlIHN0YXJ0Ci0gKiBvcGVyYXRpb24gY29tcGxldGVzIGVpdGhlciBmcm9tIHRoZSBzYW1lIHRocmVhZCBvciBmcm9tIGFuIGFzeW5jaHJvbm91cwotICogaGVscGVyIHRocmVhZC4KLSAqLwotdm9pZAotZ3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBsZXRlIChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0Rmxvd1JldHVybiByZXQpCi17Ci0gIGdib29sZWFuIGhhdmVfc2l6ZTsKLSAgZ3VpbnQ2NCBzaXplOwotICBnYm9vbGVhbiBzZWVrYWJsZTsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgR3N0UGFkTW9kZSBtb2RlOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIGVycm9yOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJzdGFydGluZyBzb3VyY2UiKTsKLSAgZm9ybWF0ID0gYmFzZXNyYy0+c2VnbWVudC5mb3JtYXQ7Ci0KLSAgLyogZmlndXJlIG91dCB0aGUgc2l6ZSAqLwotICBoYXZlX3NpemUgPSBGQUxTRTsKLSAgc2l6ZSA9IC0xOwotICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKGJhc2VzcmMpOwotCi0gICAgaWYgKGJjbGFzcy0+Z2V0X3NpemUpIHsKLSAgICAgIGlmICghKGhhdmVfc2l6ZSA9IGJjbGFzcy0+Z2V0X3NpemUgKGJhc2VzcmMsICZzaXplKSkpCi0gICAgICAgIHNpemUgPSAtMTsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInNldHRpbmcgc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFULCBzaXplKTsKLSAgICAvKiBvbmx5IHVwZGF0ZSB0aGUgc2l6ZSB3aGVuIG9wZXJhdGluZyBpbiBieXRlcywgc3ViY2xhc3MgaXMgc3VwcG9zZWQKLSAgICAgKiB0byBzZXQgZHVyYXRpb24gaW4gdGhlIHN0YXJ0IG1ldGhvZCBmb3Igb3RoZXIgZm9ybWF0cyAqLwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNyYyk7Ci0gICAgYmFzZXNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IHNpemU7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzcmMpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywKLSAgICAgICJmb3JtYXQ6ICVzLCBoYXZlIHNpemU6ICVkLCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGR1cmF0aW9uOiAlIgotICAgICAgR19HSU5UNjRfRk9STUFULCBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpLCBoYXZlX3NpemUsIHNpemUsCi0gICAgICBiYXNlc3JjLT5zZWdtZW50LmR1cmF0aW9uKTsKLQotICBzZWVrYWJsZSA9IGdzdF9iYXNlX3NyY19zZWVrYWJsZSAoYmFzZXNyYyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJpcyBzZWVrYWJsZTogJWQiLCBzZWVrYWJsZSk7Ci0KLSAgLyogdXBkYXRlIGZvciByYW5kb20gYWNjZXNzIGZsYWcgKi8KLSAgYmFzZXNyYy0+cmFuZG9tX2FjY2VzcyA9IHNlZWthYmxlICYmIGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJpcyByYW5kb21fYWNjZXNzOiAlZCIsIGJhc2VzcmMtPnJhbmRvbV9hY2Nlc3MpOwotCi0gIC8qIHN0b3AgZmx1c2hpbmcgbm93IGJ1dCBmb3IgbGl2ZSBzb3VyY2VzLCBzdGlsbCBibG9jayBpbiB0aGUgTElWRSBsb2NrIHdoZW4KLSAgICogd2UgYXJlIG5vdCB5ZXQgUExBWUlORyAqLwotICBnc3RfYmFzZV9zcmNfc2V0X2ZsdXNoaW5nIChiYXNlc3JjLCBGQUxTRSwgRkFMU0UsIE5VTEwpOwotCi0gIGdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZSAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNyYy0+c3JjcGFkKTsKLSAgbW9kZSA9IEdTVF9QQURfTU9ERSAoYmFzZXNyYy0+c3JjcGFkKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzcmMtPnNyY3BhZCk7Ci0KLSAgLyogdGFrZSB0aGUgc3RyZWFtIGxvY2sgaGVyZSwgd2Ugb25seSB3YW50IHRvIGxldCB0aGUgdGFzayBydW4gd2hlbiB3ZSBoYXZlCi0gICAqIHNldCB0aGUgU1RBUlRFRCBmbGFnICovCi0gIEdTVF9QQURfU1RSRUFNX0xPQ0sgKGJhc2VzcmMtPnNyY3BhZCk7Ci0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICAvKiBkbyBpbml0aWFsIHNlZWssIHdoaWNoIHdpbGwgc3RhcnQgdGhlIHRhc2sgKi8KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNyYyk7Ci0gICAgICBldmVudCA9IGJhc2VzcmMtPnBlbmRpbmdfc2VlazsKLSAgICAgIGJhc2VzcmMtPnBlbmRpbmdfc2VlayA9IE5VTEw7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7Ci0KLSAgICAgIC8qIFRoZSBwZXJmb3JtIHNlZWsgY29kZSB3aWxsIHN0YXJ0IHRoZSB0YXNrIHdoZW4gZmluaXNoZWQuIFdlIGRvbid0IGhhdmUgdG8KLSAgICAgICAqIHVubG9jayB0aGUgc3RyZWFtaW5nIHRocmVhZCBiZWNhdXNlIGl0IGlzIG5vdCBydW5uaW5nIHlldCAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYmFzZV9zcmNfcGVyZm9ybV9zZWVrIChiYXNlc3JjLCBldmVudCwgRkFMU0UpKSkKLSAgICAgICAgZ290byBzZWVrX2ZhaWxlZDsKLQotICAgICAgaWYgKGV2ZW50KQotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICAvKiBpZiBub3QgcmFuZG9tX2FjY2Vzcywgd2UgY2Fubm90IG9wZXJhdGUgaW4gcHVsbCBtb2RlIGZvciBub3cgKi8KLSAgICAgIGlmIChHX1VOTElLRUxZICghYmFzZXNyYy0+cmFuZG9tX2FjY2VzcykpCi0gICAgICAgIGdvdG8gbm9fZ2V0X3JhbmdlOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdvdG8gbm90X2FjdGl2YXRlZF95ZXQ7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNyYyk7Ci0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGJhc2VzcmMsIEdTVF9CQVNFX1NSQ19GTEFHX1NUQVJURUQpOwotICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKGJhc2VzcmMsIEdTVF9CQVNFX1NSQ19GTEFHX1NUQVJUSU5HKTsKLSAgYmFzZXNyYy0+cHJpdi0+c3RhcnRfcmVzdWx0ID0gcmV0OwotICBHU1RfQVNZTkNfU0lHTkFMIChiYXNlc3JjKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzcmMpOwotCi0gIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAoYmFzZXNyYy0+c3JjcGFkKTsKLQotICByZXR1cm47Ci0KLXNlZWtfZmFpbGVkOgotICB7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChiYXNlc3JjLT5zcmNwYWQpOwotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGJhc2VzcmMsICJGYWlsZWQgdG8gcGVyZm9ybSBpbml0aWFsIHNlZWsiKTsKLSAgICBnc3RfYmFzZV9zcmNfc3RvcCAoYmFzZXNyYyk7Ci0gICAgaWYgKGV2ZW50KQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotbm9fZ2V0X3JhbmdlOgotICB7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChiYXNlc3JjLT5zcmNwYWQpOwotICAgIGdzdF9iYXNlX3NyY19zdG9wIChiYXNlc3JjKTsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChiYXNlc3JjLCAiQ2Fubm90IG9wZXJhdGUgaW4gcHVsbCBtb2RlLCBzdG9wcGluZyIpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZXJyb3I7Ci0gIH0KLW5vdF9hY3RpdmF0ZWRfeWV0OgotICB7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChiYXNlc3JjLT5zcmNwYWQpOwotICAgIGdzdF9iYXNlX3NyY19zdG9wIChiYXNlc3JjKTsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VzcmMsICJwYWQgbm90IGFjdGl2YXRlZCB5ZXQiKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGVycm9yOwotICB9Ci1lcnJvcjoKLSAgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNyYyk7Ci0gICAgYmFzZXNyYy0+cHJpdi0+c3RhcnRfcmVzdWx0ID0gcmV0OwotICAgIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAoYmFzZXNyYywgR1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRJTkcpOwotICAgIEdTVF9BU1lOQ19TSUdOQUwgKGJhc2VzcmMpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYmFzZV9zcmNfc3RhcnRfd2FpdDoKLSAqIEBiYXNlc3JjOiBiYXNlIHNvdXJjZSBpbnN0YW5jZQotICoKLSAqIFdhaXQgdW50aWwgdGhlIHN0YXJ0IG9wZXJhdGlvbiBjb21wbGV0ZXMuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybi4KLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2Vfc3JjX3N0YXJ0X3dhaXQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQotewotICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOwotICB3aGlsZSAoR1NUX0JBU0VfU1JDX0lTX1NUQVJUSU5HIChiYXNlc3JjKSkgewotICAgIEdTVF9BU1lOQ19XQUlUIChiYXNlc3JjKTsKLSAgfQotICByZXN1bHQgPSBiYXNlc3JjLT5wcml2LT5zdGFydF9yZXN1bHQ7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiZ290ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlc3VsdCkpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX3N0b3AgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQotewotICBHc3RCYXNlU3JjQ2xhc3MgKmJjbGFzczsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAic3RvcHBpbmcgc291cmNlIik7Ci0KLSAgLyogZmx1c2ggYWxsICovCi0gIGdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKGJhc2VzcmMsIFRSVUUsIEZBTFNFLCBOVUxMKTsKLSAgLyogc3RvcCB0aGUgdGFzayAqLwotICBnc3RfcGFkX3N0b3BfdGFzayAoYmFzZXNyYy0+c3JjcGFkKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOwotICBpZiAoIUdTVF9CQVNFX1NSQ19JU19TVEFSVEVEIChiYXNlc3JjKSAmJiAhR1NUX0JBU0VfU1JDX0lTX1NUQVJUSU5HIChiYXNlc3JjKSkKLSAgICBnb3RvIHdhc19zdG9wcGVkOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19VTlNFVCAoYmFzZXNyYywgR1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRJTkcpOwotICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKGJhc2VzcmMsIEdTVF9CQVNFX1NSQ19GTEFHX1NUQVJURUQpOwotICBiYXNlc3JjLT5wcml2LT5zdGFydF9yZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgR1NUX0FTWU5DX1NJR05BTCAoYmFzZXNyYyk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKLQotICBiY2xhc3MgPSBHU1RfQkFTRV9TUkNfR0VUX0NMQVNTIChiYXNlc3JjKTsKLSAgaWYgKGJjbGFzcy0+c3RvcCkKLSAgICByZXN1bHQgPSBiY2xhc3MtPnN0b3AgKGJhc2VzcmMpOwotCi0gIGdzdF9iYXNlX3NyY19zZXRfYWxsb2NhdGlvbiAoYmFzZXNyYywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotd2FzX3N0b3BwZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAid2FzIHN0b3BwZWQiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNyYyk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotLyogc3RhcnQgb3Igc3RvcCBmbHVzaGluZyBkYXRhcHJvY2Vzc2luZwotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3NyY19zZXRfZmx1c2hpbmcgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLAotICAgIGdib29sZWFuIGZsdXNoaW5nLCBnYm9vbGVhbiBsaXZlX3BsYXksIGdib29sZWFuICogcGxheWluZykKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpiY2xhc3M7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfU1JDX0dFVF9DTEFTUyAoYmFzZXNyYyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImZsdXNoaW5nICVkLCBsaXZlX3BsYXkgJWQiLCBmbHVzaGluZywgbGl2ZV9wbGF5KTsKLQotICBpZiAoZmx1c2hpbmcpIHsKLSAgICBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcG9vbCAoYmFzZXNyYywgRkFMU0UpOwotICAgIC8qIHVubG9jayBhbnkgc3ViY2xhc3Nlcywgd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBncmFiYmluZyB0aGUKLSAgICAgKiBMSVZFX0xPQ0sgc2luY2Ugd2UgaG9sZCB0aGlzIGxvY2sgYmVmb3JlIGdvaW5nIGludG8gOjpjcmVhdGUuIFdlIHBhc3MgYW4KLSAgICAgKiB1bmxvY2sgdG8gdGhlIHBhcmFtcyBiZWNhdXNlIG9mIGJhY2t3YXJkcyBjb21wYXQgKHNlZSBzZWVrIGhhbmRsZXIpKi8KLSAgICBpZiAoYmNsYXNzLT51bmxvY2spCi0gICAgICBiY2xhc3MtPnVubG9jayAoYmFzZXNyYyk7Ci0gIH0KLQotICAvKiB0aGUgbGl2ZSBsb2NrIGlzIHJlbGVhc2VkIHdoZW4gd2UgYXJlIGJsb2NrZWQsIHdhaXRpbmcgZm9yIHBsYXlpbmcgb3IKLSAgICogd2hlbiB3ZSBzeW5jIHRvIHRoZSBjbG9jay4gKi8KLSAgR1NUX0xJVkVfTE9DSyAoYmFzZXNyYyk7Ci0gIGlmIChwbGF5aW5nKQotICAgICpwbGF5aW5nID0gYmFzZXNyYy0+bGl2ZV9ydW5uaW5nOwotICBiYXNlc3JjLT5wcml2LT5mbHVzaGluZyA9IGZsdXNoaW5nOwotICBpZiAoZmx1c2hpbmcpIHsKLSAgICAvKiBpZiB3ZSBhcmUgbG9ja2VkIGluIHRoZSBsaXZlIGxvY2ssIHNpZ25hbCBpdCB0byBtYWtlIGl0IGZsdXNoICovCi0gICAgYmFzZXNyYy0+bGl2ZV9ydW5uaW5nID0gVFJVRTsKLQotICAgIC8qIGNsZWFyIHBlbmRpbmcgRU9TIGlmIGFueSAqLwotICAgIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmYmFzZXNyYy0+cHJpdi0+aGFzX3BlbmRpbmdfZW9zKSkgewotICAgICAgR1NUX09CSkVDVF9MT0NLIChiYXNlc3JjKTsKLSAgICAgIENMRUFSX1BFTkRJTkdfRU9TIChiYXNlc3JjKTsKLSAgICAgIGJhc2VzcmMtPnByaXYtPmZvcmNlZF9lb3MgPSBGQUxTRTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKLSAgICB9Ci0KLSAgICAvKiBzdGVwIDEsIG5vdyB0aGF0IHdlIGhhdmUgdGhlIExJVkUgbG9jaywgY2xlYXIgb3VyIHVubG9jayByZXF1ZXN0ICovCi0gICAgaWYgKGJjbGFzcy0+dW5sb2NrX3N0b3ApCi0gICAgICBiY2xhc3MtPnVubG9ja19zdG9wIChiYXNlc3JjKTsKLQotICAgIC8qIHN0ZXAgMiwgdW5ibG9jayBjbG9jayBzeW5jIChpZiBhbnkpIG9yIGFueSBvdGhlciBibG9ja2luZyB0aGluZyAqLwotICAgIGlmIChiYXNlc3JjLT5jbG9ja19pZCkKLSAgICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChiYXNlc3JjLT5jbG9ja19pZCk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogc2lnbmFsIHRoZSBsaXZlIHNvdXJjZSB0aGF0IGl0IGNhbiBzdGFydCBwbGF5aW5nICovCi0gICAgYmFzZXNyYy0+bGl2ZV9ydW5uaW5nID0gbGl2ZV9wbGF5OwotCi0gICAgZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3Bvb2wgKGJhc2VzcmMsIFRSVUUpOwotCi0gICAgLyogRHJvcCBhbGwgZGVsYXllZCBldmVudHMgKi8KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOwotICAgIGlmIChiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cykgewotICAgICAgZ19saXN0X2ZvcmVhY2ggKGJhc2VzcmMtPnByaXYtPnBlbmRpbmdfZXZlbnRzLCAoR0Z1bmMpIGdzdF9ldmVudF91bnJlZiwKLSAgICAgICAgICBOVUxMKTsKLSAgICAgIGdfbGlzdF9mcmVlIChiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cyk7Ci0gICAgICBiYXNlc3JjLT5wcml2LT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7Ci0gICAgICBnX2F0b21pY19pbnRfc2V0ICgmYmFzZXNyYy0+cHJpdi0+aGF2ZV9ldmVudHMsIEZBTFNFKTsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzcmMpOwotICB9Ci0gIEdTVF9MSVZFX1NJR05BTCAoYmFzZXNyYyk7Ci0gIEdTVF9MSVZFX1VOTE9DSyAoYmFzZXNyYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gbWFrZSBzdXJlIHRoYXQgYSBsaXZlIHNvdXJjZSBibG9ja3MgaW4gdGhlCi0gKiBMSVZFIGxvY2sgb3IgbGVhdmVzIHRoZSBMSVZFIGxvY2sgYW5kIGNvbnRpbnVlcyBwbGF5aW5nLiAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zcmNfc2V0X3BsYXlpbmcgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBnYm9vbGVhbiBsaXZlX3BsYXkpCi17Ci0gIEdzdEJhc2VTcmNDbGFzcyAqYmNsYXNzOwotCi0gIGJjbGFzcyA9IEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1MgKGJhc2VzcmMpOwotCi0gIC8qIHVubG9jayBzdWJjbGFzc2VzIGxvY2tlZCBpbiA6OmNyZWF0ZSwgd2Ugb25seSBkbyB0aGlzIHdoZW4gd2Ugc3RvcCBwbGF5aW5nLiAqLwotICBpZiAoIWxpdmVfcGxheSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJ1bmxvY2siKTsKLSAgICBpZiAoYmNsYXNzLT51bmxvY2spCi0gICAgICBiY2xhc3MtPnVubG9jayAoYmFzZXNyYyk7Ci0gIH0KLQotICAvKiB3ZSBhcmUgbm93IGFibGUgdG8gZ3JhYiB0aGUgTElWRSBsb2NrLCB3aGVuIHdlIGdldCBpdCwgd2UgY2FuIGJlCi0gICAqIHdhaXRpbmcgZm9yIFBMQVlJTkcgd2hpbGUgYmxvY2tlZCBpbiB0aGUgTElWRSBjb25kIG9yIHdlIGNhbiBiZSB3YWl0aW5nCi0gICAqIGZvciB0aGUgY2xvY2suICovCi0gIEdTVF9MSVZFX0xPQ0sgKGJhc2VzcmMpOwotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAidW5zY2hlZHVsZSBjbG9jayIpOwotCi0gIC8qIHVuYmxvY2sgY2xvY2sgc3luYyAoaWYgYW55KSAqLwotICBpZiAoYmFzZXNyYy0+Y2xvY2tfaWQpCi0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGJhc2VzcmMtPmNsb2NrX2lkKTsKLQotICAvKiBjb25maWd1cmUgd2hhdCB0byBkbyB3aGVuIHdlIGdldCB0byB0aGUgTElWRSBsb2NrLiAqLwotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAibGl2ZSBydW5uaW5nICVkIiwgbGl2ZV9wbGF5KTsKLSAgYmFzZXNyYy0+bGl2ZV9ydW5uaW5nID0gbGl2ZV9wbGF5OwotCi0gIGlmIChsaXZlX3BsYXkpIHsKLSAgICBnYm9vbGVhbiBzdGFydDsKLQotICAgIC8qIGNsZWFyIG91ciB1bmxvY2sgcmVxdWVzdCB3aGVuIGdvaW5nIHRvIFBMQVlJTkcgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAidW5sb2NrIHN0b3AiKTsKLSAgICBpZiAoYmNsYXNzLT51bmxvY2tfc3RvcCkKLSAgICAgIGJjbGFzcy0+dW5sb2NrX3N0b3AgKGJhc2VzcmMpOwotCi0gICAgLyogZm9yIGxpdmUgc291cmNlcyB3ZSByZXN0YXJ0IHRoZSB0aW1lc3RhbXAgY29ycmVjdGlvbiAqLwotICAgIGJhc2VzcmMtPnByaXYtPmxhdGVuY3kgPSAtMTsKLSAgICAvKiBoYXZlIHRvIHJlc3RhcnQgdGhlIHRhc2sgaW4gY2FzZSBpdCBzdG9wcGVkIGJlY2F1c2Ugb2YgdGhlIHVubG9jayB3aGVuCi0gICAgICogd2Ugd2VudCB0byBQQVVTRUQuIE9ubHkgZG8gdGhpcyBpZiB3ZSBvcGVyYXRpbmcgaW4gcHVzaCBtb2RlLiAqLwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNyYy0+c3JjcGFkKTsKLSAgICBzdGFydCA9IChHU1RfUEFEX01PREUgKGJhc2VzcmMtPnNyY3BhZCkgPT0gR1NUX1BBRF9NT0RFX1BVU0gpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjLT5zcmNwYWQpOwotICAgIGlmIChzdGFydCkKLSAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayAoYmFzZXNyYy0+c3JjcGFkLCAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfYmFzZV9zcmNfbG9vcCwKLSAgICAgICAgICBiYXNlc3JjLT5zcmNwYWQsIE5VTEwpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJzaWduYWwiKTsKLSAgICBHU1RfTElWRV9TSUdOQUwgKGJhc2VzcmMpOwotICB9Ci0gIEdTVF9MSVZFX1VOTE9DSyAoYmFzZXNyYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1c2ggKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIEdzdEJhc2VTcmMgKmJhc2VzcmM7Ci0KLSAgYmFzZXNyYyA9IEdTVF9CQVNFX1NSQyAocGFyZW50KTsKLQotICAvKiBwcmVwYXJlIHN1YmNsYXNzIGZpcnN0ICovCi0gIGlmIChhY3RpdmUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiQWN0aXZhdGluZyBpbiBwdXNoIG1vZGUiKTsKLQotICAgIGlmIChHX1VOTElLRUxZICghYmFzZXNyYy0+Y2FuX2FjdGl2YXRlX3B1c2gpKQotICAgICAgZ290byBub19wdXNoX2FjdGl2YXRpb247Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9iYXNlX3NyY19zdGFydCAoYmFzZXNyYykpKQotICAgICAgZ290byBlcnJvcl9zdGFydDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiRGVhY3RpdmF0aW5nIGluIHB1c2ggbW9kZSIpOwotICAgIC8qIG5vdyB3ZSBjYW4gc3RvcCB0aGUgc291cmNlICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYmFzZV9zcmNfc3RvcCAoYmFzZXNyYykpKQotICAgICAgZ290byBlcnJvcl9zdG9wOwotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fcHVzaF9hY3RpdmF0aW9uOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChiYXNlc3JjLCAiU3ViY2xhc3MgZGlzYWJsZWQgcHVzaC1tb2RlIGFjdGl2YXRpb24iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWVycm9yX3N0YXJ0OgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChiYXNlc3JjLCAiRmFpbGVkIHRvIHN0YXJ0IGluIHB1c2ggbW9kZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZXJyb3Jfc3RvcDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJGYWlsZWQgdG8gc3RvcCBpbiBwdXNoIG1vZGUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVsbCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgR3N0QmFzZVNyYyAqYmFzZXNyYzsKLQotICBiYXNlc3JjID0gR1NUX0JBU0VfU1JDIChwYXJlbnQpOwotCi0gIC8qIHByZXBhcmUgc3ViY2xhc3MgZmlyc3QgKi8KLSAgaWYgKGFjdGl2ZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJBY3RpdmF0aW5nIGluIHB1bGwgbW9kZSIpOwotICAgIGlmIChHX1VOTElLRUxZICghZ3N0X2Jhc2Vfc3JjX3N0YXJ0IChiYXNlc3JjKSkpCi0gICAgICBnb3RvIGVycm9yX3N0YXJ0OwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJEZWFjdGl2YXRpbmcgaW4gcHVsbCBtb2RlIik7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYmFzZV9zcmNfc3RvcCAoYmFzZXNyYykpKQotICAgICAgZ290byBlcnJvcl9zdG9wOwotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotZXJyb3Jfc3RhcnQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChiYXNlc3JjLCAiRmFpbGVkIHRvIHN0YXJ0IGluIHB1bGwgbW9kZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZXJyb3Jfc3RvcDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGJhc2VzcmMsICJGYWlsZWQgdG8gc3RvcCBpbiBwdWxsIG1vZGUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV9zcmNfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0QmFzZVNyYyAqc3JjID0gR1NUX0JBU0VfU1JDIChwYXJlbnQpOwotCi0gIHNyYy0+cHJpdi0+c3RyZWFtX3N0YXJ0X3BlbmRpbmcgPSBGQUxTRTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhY3RpdmF0aW5nIGluIG1vZGUgJWQiLCBtb2RlKTsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVUxMOgotICAgICAgcmVzID0gZ3N0X2Jhc2Vfc3JjX2FjdGl2YXRlX3B1bGwgKHBhZCwgcGFyZW50LCBhY3RpdmUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIHNyYy0+cHJpdi0+c3RyZWFtX3N0YXJ0X3BlbmRpbmcgPSBhY3RpdmU7Ci0gICAgICByZXMgPSBnc3RfYmFzZV9zcmNfYWN0aXZhdGVfcHVzaCAocGFkLCBwYXJlbnQsIGFjdGl2ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInVua25vd24gYWN0aXZhdGlvbiBtb2RlICVkIiwgbW9kZSk7Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfYmFzZV9zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0QmFzZVNyYyAqYmFzZXNyYzsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0OwotICBnYm9vbGVhbiBub19wcmVyb2xsID0gRkFMU0U7Ci0KLSAgYmFzZXNyYyA9IEdTVF9CQVNFX1NSQyAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgbm9fcHJlcm9sbCA9IGdzdF9iYXNlX3NyY19pc19saXZlIChiYXNlc3JjKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJQQVVTRUQtPlBMQVlJTkciKTsKLSAgICAgIGlmIChnc3RfYmFzZV9zcmNfaXNfbGl2ZSAoYmFzZXNyYykpIHsKLSAgICAgICAgLyogbm93IHdlIGNhbiBzdGFydCBwbGF5YmFjayAqLwotICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X3BsYXlpbmcgKGJhc2VzcmMsIFRSVUUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKChyZXN1bHQgPQotICAgICAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsCi0gICAgICAgICAgICAgIHRyYW5zaXRpb24pKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgZ290byBmYWlsdXJlOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJQTEFZSU5HLT5QQVVTRUQiKTsKLSAgICAgIGlmIChnc3RfYmFzZV9zcmNfaXNfbGl2ZSAoYmFzZXNyYykpIHsKLSAgICAgICAgLyogbWFrZSBzdXJlIHdlIGJsb2NrIGluIHRoZSBsaXZlIGxvY2sgaW4gUEFVU0VEICovCi0gICAgICAgIGdzdF9iYXNlX3NyY19zZXRfcGxheWluZyAoYmFzZXNyYywgRkFMU0UpOwotICAgICAgICBub19wcmVyb2xsID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgewotICAgICAgLyogd2UgZG9uJ3QgbmVlZCB0byB1bmJsb2NrIGFueXRoaW5nIGhlcmUsIHRoZSBwYWQgZGVhY3RpdmF0aW9uIGNvZGUKLSAgICAgICAqIGFscmVhZHkgZGlkIHRoaXMgKi8KLSAgICAgIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmYmFzZXNyYy0+cHJpdi0+aGFzX3BlbmRpbmdfZW9zKSkgewotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzcmMpOwotICAgICAgICBDTEVBUl9QRU5ESU5HX0VPUyAoYmFzZXNyYyk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChiYXNlc3JjKTsKLSAgICAgIH0KLSAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmYmFzZXNyYy0+cGVuZGluZ19zZWVrLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChub19wcmVyb2xsICYmIHJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpCi0gICAgcmVzdWx0ID0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1mYWlsdXJlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgInBhcmVudCBmYWlsZWQgc3RhdGUgY2hhbmdlIik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NyY19nZXRfYnVmZmVyX3Bvb2w6Ci0gKiBAc3JjOiBhICNHc3RCYXNlU3JjCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgaW5zdGFuY2Ugb2YgdGhlICNHc3RCdWZmZXJQb29sIHVzZWQKLSAqIGJ5IHRoZSBzcmM7IHVucmVmIGl0IGFmdGVyIHVzYWdlLgotICovCi1Hc3RCdWZmZXJQb29sICoKLWdzdF9iYXNlX3NyY19nZXRfYnVmZmVyX3Bvb2wgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9TUkMgKHNyYyksIE5VTEwpOwotCi0gIGlmIChzcmMtPnByaXYtPnBvb2wpCi0gICAgcmV0dXJuIGdzdF9vYmplY3RfcmVmIChzcmMtPnByaXYtPnBvb2wpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3NyY19nZXRfYWxsb2NhdG9yOgotICogQHNyYzogYSAjR3N0QmFzZVNyYwotICogQGFsbG9jYXRvcjogKG91dCkgKGFsbG93LW5vbmUpICh0cmFuc2ZlciBmdWxsKTogdGhlICNHc3RBbGxvY2F0b3IKLSAqIHVzZWQKLSAqIEBwYXJhbXM6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgZnVsbCk6IHRoZQotICogI0dzdEFsbG9jYXRpb25QYXJhbXMgb2YgQGFsbG9jYXRvcgotICoKLSAqIExldHMgI0dzdEJhc2VTcmMgc3ViLWNsYXNzZXMgdG8ga25vdyB0aGUgbWVtb3J5IEBhbGxvY2F0b3IKLSAqIHVzZWQgYnkgdGhlIGJhc2UgY2xhc3MgYW5kIGl0cyBAcGFyYW1zLgotICoKLSAqIFVucmVmIHRoZSBAYWxsb2NhdG9yIGFmdGVyIHVzYWdlLgotICovCi12b2lkCi1nc3RfYmFzZV9zcmNfZ2V0X2FsbG9jYXRvciAoR3N0QmFzZVNyYyAqIHNyYywKLSAgICBHc3RBbGxvY2F0b3IgKiogYWxsb2NhdG9yLCBHc3RBbGxvY2F0aW9uUGFyYW1zICogcGFyYW1zKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9TUkMgKHNyYykpOwotCi0gIGlmIChhbGxvY2F0b3IpCi0gICAgKmFsbG9jYXRvciA9IHNyYy0+cHJpdi0+YWxsb2NhdG9yID8KLSAgICAgICAgZ3N0X29iamVjdF9yZWYgKHNyYy0+cHJpdi0+YWxsb2NhdG9yKSA6IE5VTEw7Ci0KLSAgaWYgKHBhcmFtcykKLSAgICAqcGFyYW1zID0gc3JjLT5wcml2LT5wYXJhbXM7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzcmMuaCBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODljOGE4Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjgxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0YmFzZXNyYy5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQkFTRV9TUkNfSF9fCi0jZGVmaW5lIF9fR1NUX0JBU0VfU1JDX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQkFTRV9TUkMgICAgICAgICAgICAgICAoZ3N0X2Jhc2Vfc3JjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9CQVNFX1NSQyhvYmopICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0JBU0VfU1JDLEdzdEJhc2VTcmMpKQotI2RlZmluZSBHU1RfQkFTRV9TUkNfQ0xBU1Moa2xhc3MpICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfU1JDLEdzdEJhc2VTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9CQVNFX1NSQ19HRVRfQ0xBU1Mob2JqKSAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9CQVNFX1NSQywgR3N0QmFzZVNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0JBU0VfU1JDKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQkFTRV9TUkMpKQotI2RlZmluZSBHU1RfSVNfQkFTRV9TUkNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfU1JDKSkKLSNkZWZpbmUgR1NUX0JBU0VfU1JDX0NBU1Qob2JqKSAgICAgICAgICAoKEdzdEJhc2VTcmMgKikob2JqKSkKLQotLyoqCi0gKiBHc3RCYXNlU3JjRmxhZ3M6Ci0gKiBAR1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRJTkc6IGhhcyBzb3VyY2UgaXMgc3RhcnRpbmcKLSAqIEBHU1RfQkFTRV9TUkNfRkxBR19TVEFSVEVEOiBoYXMgc291cmNlIGJlZW4gc3RhcnRlZAotICogQEdTVF9CQVNFX1NSQ19GTEFHX0xBU1Q6IG9mZnNldCB0byBkZWZpbmUgbW9yZSBmbGFncwotICoKLSAqIFRoZSAjR3N0RWxlbWVudCBmbGFncyB0aGF0IGEgYmFzZXNyYyBlbGVtZW50IG1heSBoYXZlLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfQkFTRV9TUkNfRkxBR19TVEFSVElORyAgICAgPSAoR1NUX0VMRU1FTlRfRkxBR19MQVNUIDw8IDApLAotICBHU1RfQkFTRV9TUkNfRkxBR19TVEFSVEVEICAgICAgPSAoR1NUX0VMRU1FTlRfRkxBR19MQVNUIDw8IDEpLAotICAvKiBwYWRkaW5nICovCi0gIEdTVF9CQVNFX1NSQ19GTEFHX0xBU1QgICAgICAgICA9IChHU1RfRUxFTUVOVF9GTEFHX0xBU1QgPDwgNikKLX0gR3N0QmFzZVNyY0ZsYWdzOwotCi0jZGVmaW5lIEdTVF9CQVNFX1NSQ19JU19TVEFSVElORyhvYmopIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKChvYmopLCBHU1RfQkFTRV9TUkNfRkxBR19TVEFSVElORykKLSNkZWZpbmUgR1NUX0JBU0VfU1JDX0lTX1NUQVJURUQob2JqKSAgR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoKG9iaiksIEdTVF9CQVNFX1NSQ19GTEFHX1NUQVJURUQpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RCYXNlU3JjIEdzdEJhc2VTcmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVNyY0NsYXNzIEdzdEJhc2VTcmNDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RCYXNlU3JjUHJpdmF0ZSBHc3RCYXNlU3JjUHJpdmF0ZTsKLQotLyoqCi0gKiBHU1RfQkFTRV9TUkNfUEFEOgotICogQG9iajogYmFzZSBzb3VyY2UgaW5zdGFuY2UKLSAqCi0gKiBHaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgI0dzdFBhZCBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuCi0gKi8KLSNkZWZpbmUgR1NUX0JBU0VfU1JDX1BBRChvYmopICAgICAgICAgICAgICAgICAoR1NUX0JBU0VfU1JDX0NBU1QgKG9iaiktPnNyY3BhZCkKLQotCi0vKioKLSAqIEdzdEJhc2VTcmM6Ci0gKgotICogVGhlIG9wYXF1ZSAjR3N0QmFzZVNyYyBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RCYXNlU3JjIHsKLSAgR3N0RWxlbWVudCAgICAgZWxlbWVudDsKLQotICAvKjwgcHJvdGVjdGVkID4qLwotICBHc3RQYWQgICAgICAgICpzcmNwYWQ7Ci0KLSAgLyogYXZhaWxhYmxlIHRvIHN1YmNsYXNzIGltcGxlbWVudGF0aW9ucyAqLwotICAvKiBNVC1wcm90ZWN0ZWQgKHdpdGggTElWRV9MT0NLKSAqLwotICBHTXV0ZXggICAgICAgICBsaXZlX2xvY2s7Ci0gIEdDb25kICAgICAgICAgIGxpdmVfY29uZDsKLSAgZ2Jvb2xlYW4gICAgICAgaXNfbGl2ZTsKLSAgZ2Jvb2xlYW4gICAgICAgbGl2ZV9ydW5uaW5nOwotCi0gIC8qIE1ULXByb3RlY3RlZCAod2l0aCBMT0NLKSAqLwotICBndWludCAgICAgICAgICBibG9ja3NpemU7ICAgICAvKiBzaXplIG9mIGJ1ZmZlcnMgd2hlbiBvcGVyYXRpbmcgcHVzaCBiYXNlZCAqLwotICBnYm9vbGVhbiAgICAgICBjYW5fYWN0aXZhdGVfcHVzaDsgICAgIC8qIHNvbWUgc2NoZWR1bGluZyBwcm9wZXJ0aWVzICovCi0gIGdib29sZWFuICAgICAgIHJhbmRvbV9hY2Nlc3M7Ci0KLSAgR3N0Q2xvY2tJRCAgICAgY2xvY2tfaWQ7ICAgICAgLyogZm9yIHN5bmNpbmcgKi8KLQotICAvKiBNVC1wcm90ZWN0ZWQgKHdpdGggU1RSRUFNX0xPQ0sgKmFuZCogT0JKRUNUX0xPQ0spICovCi0gIEdzdFNlZ21lbnQgICAgIHNlZ21lbnQ7Ci0gIC8qIE1ULXByb3RlY3RlZCAod2l0aCBTVFJFQU1fTE9DSykgKi8KLSAgZ2Jvb2xlYW4gICAgICAgbmVlZF9uZXdzZWdtZW50OwotCi0gIGdpbnQgICAgICAgICAgIG51bV9idWZmZXJzOwotICBnaW50ICAgICAgICAgICBudW1fYnVmZmVyc19sZWZ0OwotCi0gIGdib29sZWFuICAgICAgIHR5cGVmaW5kOwotICBnYm9vbGVhbiAgICAgICBydW5uaW5nOwotICBHc3RFdmVudCAgICAgICpwZW5kaW5nX3NlZWs7Ci0KLSAgR3N0QmFzZVNyY1ByaXZhdGUgKnByaXY7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyICAgICAgIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkdfTEFSR0VdOwotfTsKLQotLyoqCi0gKiBHc3RCYXNlU3JjQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBFbGVtZW50IHBhcmVudCBjbGFzcwotICogQGdldF9jYXBzOiBDYWxsZWQgdG8gZ2V0IHRoZSBjYXBzIHRvIHJlcG9ydAotICogQG5lZ290aWF0ZTogTmVnb3RpYXRlZCB0aGUgY2FwcyB3aXRoIHRoZSBwZWVyLgotICogQGZpeGF0ZTogQ2FsbGVkIGR1cmluZyBuZWdvdGlhdGlvbiBpZiBjYXBzIG5lZWQgZml4YXRpbmcuIEltcGxlbWVudCBpbnN0ZWFkIG9mCi0gKiAgIHNldHRpbmcgYSBmaXhhdGUgZnVuY3Rpb24gb24gdGhlIHNvdXJjZSBwYWQuCi0gKiBAc2V0X2NhcHM6IE5vdGlmeSBzdWJjbGFzcyBvZiBjaGFuZ2VkIG91dHB1dCBjYXBzCi0gKiBAZGVjaWRlX2FsbG9jYXRpb246IGNvbmZpZ3VyZSB0aGUgYWxsb2NhdGlvbiBxdWVyeQotICogQHN0YXJ0OiBTdGFydCBwcm9jZXNzaW5nLiBTdWJjbGFzc2VzIHNob3VsZCBvcGVuIHJlc291cmNlcyBhbmQgcHJlcGFyZQotICogICAgdG8gcHJvZHVjZSBkYXRhLiBJbXBsZW1lbnRhdGlvbiBzaG91bGQgY2FsbCBnc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGUoKQotICogICAgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcywgZWl0aGVyIGZyb20gdGhlIGN1cnJlbnQgdGhyZWFkIG9yIGFueSBvdGhlcgotICogICAgdGhyZWFkIHRoYXQgZmluaXNoZXMgdGhlIHN0YXJ0IG9wZXJhdGlvbiBhc3luY2hyb25vdXNseS4KLSAqIEBzdG9wOiBTdG9wIHByb2Nlc3NpbmcuIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSB0aGlzIHRvIGNsb3NlIHJlc291cmNlcy4KLSAqIEBnZXRfdGltZXM6IEdpdmVuIGEgYnVmZmVyLCByZXR1cm4gdGhlIHN0YXJ0IGFuZCBzdG9wIHRpbWUgd2hlbiBpdAotICogICAgc2hvdWxkIGJlIHB1c2hlZCBvdXQuIFRoZSBiYXNlIGNsYXNzIHdpbGwgc3luYyBvbiB0aGUgY2xvY2sgdXNpbmcKLSAqICAgIHRoZXNlIHRpbWVzLgotICogQGdldF9zaXplOiBSZXR1cm4gdGhlIHRvdGFsIHNpemUgb2YgdGhlIHJlc291cmNlLCBpbiB0aGUgZm9ybWF0IHNldCBieQotICogICAgIGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KCkuCi0gKiBAaXNfc2Vla2FibGU6IENoZWNrIGlmIHRoZSBzb3VyY2UgY2FuIHNlZWsKLSAqIEBwcmVwYXJlX3NlZWtfc2VnbWVudDogUHJlcGFyZSB0aGUgI0dzdFNlZ21lbnQgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUKLSAqICAgI0dzdEJhc2VTcmNDbGFzcy5kb19zZWVrKCkgdm1ldGhvZCBmb3IgZXhlY3V0aW5nIGEgc2VlawotICogICByZXF1ZXN0LiBTdWItY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBpZiB0aGV5IHN1cHBvcnQgc2Vla2luZyBpbgotICogICBmb3JtYXRzIG90aGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgbmF0aXZlIGZvcm1hdC4gQnkgZGVmYXVsdCwgaXQgdHJpZXMgdG8KLSAqICAgY29udmVydCB0aGUgc2VlayBhcmd1bWVudHMgdG8gdGhlIGNvbmZpZ3VyZWQgbmF0aXZlIGZvcm1hdCBhbmQgcHJlcGFyZSBhCi0gKiAgIHNlZ21lbnQgaW4gdGhhdCBmb3JtYXQuCi0gKiBAZG9fc2VlazogUGVyZm9ybSBzZWVraW5nIG9uIHRoZSByZXNvdXJjZSB0byB0aGUgaW5kaWNhdGVkIHNlZ21lbnQuCi0gKiBAdW5sb2NrOiBVbmxvY2sgYW55IHBlbmRpbmcgYWNjZXNzIHRvIHRoZSByZXNvdXJjZS4gU3ViY2xhc3NlcyBzaG91bGQgdW5ibG9jawotICogICAgYW55IGJsb2NrZWQgZnVuY3Rpb24gQVNBUC4gSW4gcGFydGljdWxhciwgYW55IGNyZWF0ZSgpIGZ1bmN0aW9uIGluCi0gKiAgICBwcm9ncmVzcyBzaG91bGQgYmUgdW5ibG9ja2VkIGFuZCBzaG91bGQgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HLiBBbnkKLSAqICAgIGZ1dHVyZSAjR3N0QmFzZVNyY0NsYXNzLmNyZWF0ZSgpIGZ1bmN0aW9uIGNhbGwgc2hvdWxkIGFsc28gcmV0dXJuCi0gKiAgICBHU1RfRkxPV19GTFVTSElORyB1bnRpbCB0aGUgI0dzdEJhc2VTcmNDbGFzcy51bmxvY2tfc3RvcCgpIGZ1bmN0aW9uIGhhcwotICogICAgYmVlbiBjYWxsZWQuCi0gKiBAdW5sb2NrX3N0b3A6IENsZWFyIHRoZSBwcmV2aW91cyB1bmxvY2sgcmVxdWVzdC4gU3ViY2xhc3NlcyBzaG91bGQgY2xlYXIgYW55Ci0gKiAgICBzdGF0ZSB0aGV5IHNldCBkdXJpbmcgI0dzdEJhc2VTcmNDbGFzcy51bmxvY2soKSwgc3VjaCBhcyBjbGVhcmluZyBjb21tYW5kCi0gKiAgICBxdWV1ZXMuCi0gKiBAcXVlcnk6IEhhbmRsZSBhIHJlcXVlc3RlZCBxdWVyeS4KLSAqIEBldmVudDogT3ZlcnJpZGUgdGhpcyB0byBpbXBsZW1lbnQgY3VzdG9tIGV2ZW50IGhhbmRsaW5nLgotICogQGNyZWF0ZTogQXNrIHRoZSBzdWJjbGFzcyB0byBjcmVhdGUgYSBidWZmZXIgd2l0aCBvZmZzZXQgYW5kIHNpemUuICBXaGVuIHRoZQotICogICBzdWJjbGFzcyByZXR1cm5zIEdTVF9GTE9XX09LLCBpdCBNVVNUIHJldHVybiBhIGJ1ZmZlciBvZiB0aGUgcmVxdWVzdGVkIHNpemUKLSAqICAgdW5sZXNzIGZld2VyIGJ5dGVzIGFyZSBhdmFpbGFibGUgYmVjYXVzZSBhbiBFT1MgY29uZGl0aW9uIGlzIG5lYXIuIE5vCi0gKiAgIGJ1ZmZlciBzaG91bGQgYmUgcmV0dXJuZWQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tCi0gKiAgIEdTVF9GTE9XX09LLiBBIHJldHVybiB2YWx1ZSBvZiBHU1RfRkxPV19FT1Mgc2lnbmlmaWVzIHRoYXQgdGhlIGVuZCBvZgotICogICBzdHJlYW0gaXMgcmVhY2hlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBjYWxsCi0gKiAgICNHc3RCYXNlU3JjQ2xhc3MuYWxsb2MoKSBhbmQgdGhlbiBjYWxsICNHc3RCYXNlU3JjQ2xhc3MuZmlsbCgpLgotICogQGFsbG9jOiBBc2sgdGhlIHN1YmNsYXNzIHRvIGFsbG9jYXRlIGEgYnVmZmVyIHdpdGggZm9yIG9mZnNldCBhbmQgc2l6ZS4gVGhlCi0gKiAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBjcmVhdGUgYSBuZXcgYnVmZmVyIGZyb20gdGhlIG5lZ290aWF0ZWQgYWxsb2NhdG9yLgotICogQGZpbGw6IEFzayB0aGUgc3ViY2xhc3MgdG8gZmlsbCB0aGUgYnVmZmVyIHdpdGggZGF0YSBmb3Igb2Zmc2V0IGFuZCBzaXplLiBUaGUKLSAqICAgcGFzc2VkIGJ1ZmZlciBpcyBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgYnl0ZXMuCi0gKgotICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZSBhdmFpbGFibGUgdmlydHVhbCBtZXRob2RzIG9yIG5vdCwgYXMKLSAqIG5lZWRlZC4gQXQgdGhlIG1pbmltdW0sIHRoZSBAY3JlYXRlIG1ldGhvZCBzaG91bGQgYmUgb3ZlcnJpZGRlbiB0byBwcm9kdWNlCi0gKiBidWZmZXJzLgotICovCi1zdHJ1Y3QgX0dzdEJhc2VTcmNDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8KLSAgLyogdmlydHVhbCBtZXRob2RzIGZvciBzdWJjbGFzc2VzICovCi0KLSAgLyogZ2V0IGNhcHMgZnJvbSBzdWJjbGFzcyAqLwotICBHc3RDYXBzKiAgICAgICgqZ2V0X2NhcHMpICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RDYXBzICpmaWx0ZXIpOwotICAvKiBkZWNpZGUgb24gY2FwcyAqLwotICBnYm9vbGVhbiAgICAgICgqbmVnb3RpYXRlKSAgICAoR3N0QmFzZVNyYyAqc3JjKTsKLSAgLyogY2FsbGVkIGlmLCBpbiBuZWdvdGlhdGlvbiwgY2FwcyBuZWVkIGZpeGF0aW5nICovCi0gIEdzdENhcHMgKiAgICAgKCpmaXhhdGUpICAgICAgIChHc3RCYXNlU3JjICpzcmMsIEdzdENhcHMgKmNhcHMpOwotICAvKiBub3RpZnkgdGhlIHN1YmNsYXNzIG9mIG5ldyBjYXBzICovCi0gIGdib29sZWFuICAgICAgKCpzZXRfY2FwcykgICAgIChHc3RCYXNlU3JjICpzcmMsIEdzdENhcHMgKmNhcHMpOwotCi0gIC8qIHNldHVwIGFsbG9jYXRpb24gcXVlcnkgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKmRlY2lkZV9hbGxvY2F0aW9uKSAgIChHc3RCYXNlU3JjICpzcmMsIEdzdFF1ZXJ5ICpxdWVyeSk7Ci0KLSAgLyogc3RhcnQgYW5kIHN0b3AgcHJvY2Vzc2luZywgaWRlYWwgZm9yIG9wZW5pbmcvY2xvc2luZyB0aGUgcmVzb3VyY2UgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKnN0YXJ0KSAgICAgICAgKEdzdEJhc2VTcmMgKnNyYyk7Ci0gIGdib29sZWFuICAgICAgKCpzdG9wKSAgICAgICAgIChHc3RCYXNlU3JjICpzcmMpOwotCi0gIC8qIGdpdmVuIGEgYnVmZmVyLCByZXR1cm4gc3RhcnQgYW5kIHN0b3AgdGltZSB3aGVuIGl0IHNob3VsZCBiZSBwdXNoZWQKLSAgICogb3V0LiBUaGUgYmFzZSBjbGFzcyB3aWxsIHN5bmMgb24gdGhlIGNsb2NrIHVzaW5nIHRoZXNlIHRpbWVzLiAqLwotICB2b2lkICAgICAgICAgICgqZ2V0X3RpbWVzKSAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RCdWZmZXIgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqc3RhcnQsIEdzdENsb2NrVGltZSAqZW5kKTsKLQotICAvKiBnZXQgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHJlc291cmNlIGluIHRoZSBmb3JtYXQgc2V0IGJ5Ci0gICAqIGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0KCkgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKmdldF9zaXplKSAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ3VpbnQ2NCAqc2l6ZSk7Ci0KLSAgLyogY2hlY2sgaWYgdGhlIHJlc291cmNlIGlzIHNlZWthYmxlICovCi0gIGdib29sZWFuICAgICAgKCppc19zZWVrYWJsZSkgIChHc3RCYXNlU3JjICpzcmMpOwotCi0gIC8qIFByZXBhcmUgdGhlIHNlZ21lbnQgb24gd2hpY2ggdG8gcGVyZm9ybSBkb19zZWVrKCksIGNvbnZlcnRpbmcgdG8gdGhlCi0gICAqIGN1cnJlbnQgYmFzZXNyYyBmb3JtYXQuICovCi0gIGdib29sZWFuICAgICAgKCpwcmVwYXJlX3NlZWtfc2VnbWVudCkgKEdzdEJhc2VTcmMgKnNyYywgR3N0RXZlbnQgKnNlZWssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFNlZ21lbnQgKnNlZ21lbnQpOwotICAvKiBub3RpZnkgc3ViY2xhc3NlcyBvZiBhIHNlZWsgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKmRvX3NlZWspICAgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0U2VnbWVudCAqc2VnbWVudCk7Ci0KLSAgLyogdW5sb2NrIGFueSBwZW5kaW5nIGFjY2VzcyB0byB0aGUgcmVzb3VyY2UuIHN1YmNsYXNzZXMgc2hvdWxkIHVubG9jawotICAgKiBhbnkgZnVuY3Rpb24gQVNBUC4gKi8KLSAgZ2Jvb2xlYW4gICAgICAoKnVubG9jaykgICAgICAgKEdzdEJhc2VTcmMgKnNyYyk7Ci0gIC8qIENsZWFyIGFueSBwZW5kaW5nIHVubG9jayByZXF1ZXN0LCBhcyB3ZSBzdWNjZWVkZWQgaW4gdW5sb2NraW5nICovCi0gIGdib29sZWFuICAgICAgKCp1bmxvY2tfc3RvcCkgIChHc3RCYXNlU3JjICpzcmMpOwotCi0gIC8qIG5vdGlmeSBzdWJjbGFzc2VzIG9mIGEgcXVlcnkgKi8KLSAgZ2Jvb2xlYW4gICAgICAoKnF1ZXJ5KSAgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0UXVlcnkgKnF1ZXJ5KTsKLQotICAvKiBub3RpZnkgc3ViY2xhc3NlcyBvZiBhbiBldmVudCAqLwotICBnYm9vbGVhbiAgICAgICgqZXZlbnQpICAgICAgICAoR3N0QmFzZVNyYyAqc3JjLCBHc3RFdmVudCAqZXZlbnQpOwotCi0gIC8qIGFzayB0aGUgc3ViY2xhc3MgdG8gY3JlYXRlIGEgYnVmZmVyIHdpdGggb2Zmc2V0IGFuZCBzaXplLCB0aGUgZGVmYXVsdAotICAgKiBpbXBsZW1lbnRhdGlvbiB3aWxsIGNhbGwgYWxsb2MgYW5kIGZpbGwuICovCi0gIEdzdEZsb3dSZXR1cm4gKCpjcmVhdGUpICAgICAgIChHc3RCYXNlU3JjICpzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICoqYnVmKTsKLSAgLyogYXNrIHRoZSBzdWJjbGFzcyB0byBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotICAgKiB3aWxsIHVzZSB0aGUgbmVnb3RpYXRlZCBhbGxvY2F0b3IuICovCi0gIEdzdEZsb3dSZXR1cm4gKCphbGxvYykgICAgICAgIChHc3RCYXNlU3JjICpzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICoqYnVmKTsKLSAgLyogYXNrIHRoZSBzdWJjbGFzcyB0byBmaWxsIHRoZSBidWZmZXIgd2l0aCBkYXRhIGZyb20gb2Zmc2V0IGFuZCBzaXplICovCi0gIEdzdEZsb3dSZXR1cm4gKCpmaWxsKSAgICAgICAgIChHc3RCYXNlU3JjICpzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpidWYpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciAgICAgICBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HX0xBUkdFXTsKLX07Ci0KLUdUeXBlIGdzdF9iYXNlX3NyY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdzdEZsb3dSZXR1cm4gICBnc3RfYmFzZV9zcmNfd2FpdF9wbGF5aW5nICAgICAoR3N0QmFzZVNyYyAqc3JjKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zZXRfbGl2ZSAgICAgICAgIChHc3RCYXNlU3JjICpzcmMsIGdib29sZWFuIGxpdmUpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NyY19pc19saXZlICAgICAgICAgIChHc3RCYXNlU3JjICpzcmMpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgR3N0Rm9ybWF0IGZvcm1hdCk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ2Jvb2xlYW4gZHluYW1pYyk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3MgKEdzdEJhc2VTcmMgKiBzcmMsIGdib29sZWFuIGF1dG9tYXRpY19lb3MpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9hc3luYyAgICAgICAgKEdzdEJhc2VTcmMgKnNyYywgZ2Jvb2xlYW4gYXN5bmMpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NyY19pc19hc3luYyAgICAgICAgIChHc3RCYXNlU3JjICpzcmMpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX3N0YXJ0X2NvbXBsZXRlICAgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RGbG93UmV0dXJuIHJldCk7Ci1Hc3RGbG93UmV0dXJuICAgZ3N0X2Jhc2Vfc3JjX3N0YXJ0X3dhaXQgICAgICAgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NyY19xdWVyeV9sYXRlbmN5ICAgIChHc3RCYXNlU3JjICpzcmMsIGdib29sZWFuICogbGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICogbWluX2xhdGVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSAqIG1heF9sYXRlbmN5KTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplICAgIChHc3RCYXNlU3JjICpzcmMsIGd1aW50IGJsb2Nrc2l6ZSk7Ci1ndWludCAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUgICAgKEdzdEJhc2VTcmMgKnNyYyk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCAoR3N0QmFzZVNyYyAqc3JjLCBnYm9vbGVhbiB0aW1lc3RhbXApOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wIChHc3RCYXNlU3JjICpzcmMpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2Jhc2Vfc3JjX25ld19zZWFtbGVzc19zZWdtZW50IChHc3RCYXNlU3JjICpzcmMsIGdpbnQ2NCBzdGFydCwgZ2ludDY0IHN0b3AsIGdpbnQ2NCB0aW1lKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9iYXNlX3NyY19zZXRfY2FwcyAgICAgICAgIChHc3RCYXNlU3JjICpzcmMsIEdzdENhcHMgKmNhcHMpOwotCi1Hc3RCdWZmZXJQb29sICogZ3N0X2Jhc2Vfc3JjX2dldF9idWZmZXJfcG9vbCAgKEdzdEJhc2VTcmMgKnNyYyk7Ci12b2lkICAgICAgICAgICAgZ3N0X2Jhc2Vfc3JjX2dldF9hbGxvY2F0b3IgICAgKEdzdEJhc2VTcmMgKnNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QWxsb2NhdG9yICoqYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBbGxvY2F0aW9uUGFyYW1zICpwYXJhbXMpOwotCi0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0QmFzZVNyYywgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQkFTRV9TUkNfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjA4Y2VjLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjkxNiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwOCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RiYXNldHJhbnNmb3JtCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEJhc2UgY2xhc3MgZm9yIHNpbXBsZSB0cmFuc2Zvcm0gZmlsdGVycwotICogQHNlZV9hbHNvOiAjR3N0QmFzZVNyYywgI0dzdEJhc2VTaW5rCi0gKgotICogVGhpcyBiYXNlIGNsYXNzIGlzIGZvciBmaWx0ZXIgZWxlbWVudHMgdGhhdCBwcm9jZXNzIGRhdGEuIEVsZW1lbnRzCi0gKiB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgaW1wbGVtZW50YXRpb24gdXNpbmcgI0dzdEJhc2VUcmFuc2Zvcm0gYXJlIG9uZXMKLSAqIHdoZXJlIHRoZSBzaXplIGFuZCBjYXBzIG9mIHRoZSBvdXRwdXQgaXMga25vd24gZW50aXJlbHkgZnJvbSB0aGUgaW5wdXQKLSAqIGNhcHMgYW5kIGJ1ZmZlciBzaXplcy4gVGhlc2UgaW5jbHVkZSBlbGVtZW50cyB0aGF0IGRpcmVjdGx5IHRyYW5zZm9ybQotICogb25lIGJ1ZmZlciBpbnRvIGFub3RoZXIsIG1vZGlmeSB0aGUgY29udGVudHMgb2YgYSBidWZmZXIgaW4tcGxhY2UsIGFzCi0gKiB3ZWxsIGFzIGVsZW1lbnRzIHRoYXQgY29sbGF0ZSBtdWx0aXBsZSBpbnB1dCBidWZmZXJzIGludG8gb25lIG91dHB1dCBidWZmZXIsCi0gKiBvciB0aGF0IGV4cGFuZCBvbmUgaW5wdXQgYnVmZmVyIGludG8gbXVsdGlwbGUgb3V0cHV0IGJ1ZmZlcnMuIFNlZSBiZWxvdwotICogZm9yIG1vcmUgY29uY3JldGUgdXNlIGNhc2VzLgotICoKLSAqIEl0IHByb3ZpZGVzIGZvcjoKLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5vbmUgc2lua3BhZCBhbmQgb25lIHNyY3BhZDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgIFBvc3NpYmxlIGZvcm1hdHMgb24gc2luayBhbmQgc291cmNlIHBhZCBpbXBsZW1lbnRlZAotICogICAgICB3aXRoIGN1c3RvbSB0cmFuc2Zvcm1fY2FwcyBmdW5jdGlvbi4gQnkgZGVmYXVsdCB1c2VzCi0gKiAgICAgIHNhbWUgZm9ybWF0IG9uIHNpbmsgYW5kIHNvdXJjZS4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT5IYW5kbGVzIHN0YXRlIGNoYW5nZXM8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPkRvZXMgZmx1c2hpbmc8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPlB1c2ggbW9kZTwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgICBQdWxsIG1vZGUgaWYgdGhlIHN1Yi1jbGFzcyB0cmFuc2Zvcm0gY2FuIG9wZXJhdGUgb24gYXJiaXRyYXJ5IGRhdGEKLSAqICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPlVzZSBDYXNlczwvdGl0bGU+Ci0gKiA8cGFyYT4KLSAqIDxvcmRlcmVkbGlzdD4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPGl0ZW1pemVkbGlzdD48dGl0bGU+UGFzc3Rocm91Z2ggbW9kZTwvdGl0bGU+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBFbGVtZW50IGhhcyBubyBpbnRlcmVzdCBpbiBtb2RpZnlpbmcgdGhlIGJ1ZmZlci4gSXQgbWF5IHdhbnQgdG8gaW5zcGVjdCBpdCwKLSAqICAgICBpbiB3aGljaCBjYXNlIHRoZSBlbGVtZW50IHNob3VsZCBoYXZlIGEgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLiBJZiB0aGVyZQotICogICAgIGlzIG5vIHRyYW5zZm9ybV9pcCBmdW5jdGlvbiBpbiBwYXNzdGhyb3VnaCBtb2RlLCB0aGUgYnVmZmVyIGlzIHB1c2hlZAotICogICAgIGludGFjdC4KLSAqICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBUaGUgI0dzdEJhc2VUcmFuc2Zvcm1DbGFzcy5wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMgdmFyaWFibGUKLSAqICAgICB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0L3Vuc2V0IHBhc3N0aHJvdWdoIGJhc2VkIG9uIHdoZXRoZXIgdGhlCi0gKiAgICAgZWxlbWVudCBuZWdvdGlhdGVzIHRoZSBzYW1lIGNhcHMgb24gYm90aCBwYWRzLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICNHc3RCYXNlVHJhbnNmb3JtQ2xhc3MucGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzIG9uIGFuIGVsZW1lbnQgdGhhdAotICogICAgIGRvZXNuJ3QgaW1wbGVtZW50IGEgdHJhbnNmb3JtX2NhcHMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBlbGVtZW50cyB0aGF0Ci0gKiAgICAgb25seSBpbnNwZWN0IGRhdGEgKHN1Y2ggYXMgbGV2ZWwpCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L2l0ZW1pemVkbGlzdD4KLSAqICAgPGl0ZW1pemVkbGlzdD4KLSAqICAgPHRpdGxlPkV4YW1wbGUgZWxlbWVudHM8L3RpdGxlPgotICogICAgIDxsaXN0aXRlbT5MZXZlbDwvbGlzdGl0ZW0+Ci0gKiAgICAgPGxpc3RpdGVtPlZpZGVvc2NhbGUsIGF1ZGlvY29udmVydCwgdmlkZW9jb252ZXJ0LCBhdWRpb3Jlc2FtcGxlIGluCi0gKiAgICAgY2VydGFpbiBtb2Rlcy48L2xpc3RpdGVtPgotICogICA8L2l0ZW1pemVkbGlzdD4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+Ci0gKiAgICAgPHRpdGxlPk1vZGlmaWNhdGlvbnMgaW4tcGxhY2UgLSBpbnB1dCBidWZmZXIgYW5kIG91dHB1dCBidWZmZXIgYXJlIHRoZQotICogICAgIHNhbWUgdGhpbmcuPC90aXRsZT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIFRoZSBlbGVtZW50IG11c3QgaW1wbGVtZW50IGEgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIE91dHB1dCBidWZmZXIgc2l6ZSBtdXN0IDw9IGlucHV0IGJ1ZmZlciBzaXplCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgSWYgdGhlIGFsd2F5c19pbl9wbGFjZSBmbGFnIGlzIHNldCwgbm9uLXdyaXRhYmxlIGJ1ZmZlcnMgd2lsbCBiZSBjb3BpZWQKLSAqICAgICBhbmQgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm1faXAgZnVuY3Rpb24sIG90aGVyd2lzZSBhIG5ldyBidWZmZXIgd2lsbCBiZQotICogICAgIGNyZWF0ZWQgYW5kIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gY2FsbGVkLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIEluY29taW5nIHdyaXRhYmxlIGJ1ZmZlcnMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybV9pcCBmdW5jdGlvbgotICogICAgIGltbWVkaWF0ZWx5LiAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBvbmx5IGltcGxlbWVudGluZyB0cmFuc2Zvcm1faXAgYW5kIG5vdCB0cmFuc2Zvcm0gaW1wbGllcyBhbHdheXNfaW5fcGxhY2UKLSAqICAgICA9ICVUUlVFCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L2l0ZW1pemVkbGlzdD4KLSAqICAgPGl0ZW1pemVkbGlzdD4KLSAqICAgPHRpdGxlPkV4YW1wbGUgZWxlbWVudHM8L3RpdGxlPgotICogICAgIDxsaXN0aXRlbT5Wb2x1bWU8L2xpc3RpdGVtPgotICogICAgIDxsaXN0aXRlbT5BdWRpb2NvbnZlcnQgaW4gY2VydGFpbiBtb2RlcyAoc2lnbmVkL3Vuc2lnbmVkCi0gKiAgICAgY29udmVyc2lvbik8L2xpc3RpdGVtPgotICogICAgIDxsaXN0aXRlbT52aWRlb2NvbnZlcnQgaW4gY2VydGFpbiBtb2RlcyAoZW5kaWFubmVzcwotICogICAgIHN3YXBwaW5nKTwvbGlzdGl0ZW0+Ci0gKiAgIDwvaXRlbWl6ZWRsaXN0PgotICogIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDx0aXRsZT5Nb2RpZmljYXRpb25zIG9ubHkgdG8gdGhlIGNhcHMvbWV0YWRhdGEgb2YgYSBidWZmZXI8L3RpdGxlPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVxdWlyZSB3cml0YWJsZSBkYXRhLCBidXQgbm9uLXdyaXRhYmxlIGJ1ZmZlcnMKLSAqICAgICBzaG91bGQgYmUgc3ViYnVmZmVyZWQgc28gdGhhdCB0aGUgbWV0YS1pbmZvcm1hdGlvbiBjYW4gYmUgcmVwbGFjZWQuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgRWxlbWVudHMgd2lzaGluZyB0byBvcGVyYXRlIGluIHRoaXMgbW9kZSBzaG91bGQgcmVwbGFjZSB0aGUKLSAqICAgICBwcmVwYXJlX291dHB1dF9idWZmZXIgbWV0aG9kIHRvIGNyZWF0ZSBzdWJidWZmZXJzIG9mIHRoZSBpbnB1dCBidWZmZXIKLSAqICAgICBhbmQgc2V0IGFsd2F5c19pbl9wbGFjZSB0byAlVFJVRQotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPC9pdGVtaXplZGxpc3Q+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDx0aXRsZT5FeGFtcGxlIGVsZW1lbnRzPC90aXRsZT4KLSAqICAgICA8bGlzdGl0ZW0+Q2Fwc2ZpbHRlciB3aGVuIHNldHRpbmcgY2FwcyBvbiBvdXRnb2luZyBidWZmZXJzIHRoYXQgaGF2ZQotICogICAgIG5vbmUuPC9saXN0aXRlbT4KLSAqICAgICA8bGlzdGl0ZW0+aWRlbnRpdHkgd2hlbiBpdCBpcyBnb2luZyB0byByZS10aW1lc3RhbXAgYnVmZmVycyBieQotICogICAgIGRhdGFyYXRlLjwvbGlzdGl0ZW0+Ci0gKiAgIDwvaXRlbWl6ZWRsaXN0PgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPGl0ZW1pemVkbGlzdD48dGl0bGU+Tm9ybWFsIG1vZGU8L3RpdGxlPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgYWx3YXlzX2luX3BsYWNlIGZsYWcgaXMgbm90IHNldCwgb3IgdGhlcmUgaXMgbm8gdHJhbnNmb3JtX2lwIGZ1bmN0aW9uCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgRWxlbWVudCB3aWxsIHJlY2VpdmUgYW4gaW5wdXQgYnVmZmVyIGFuZCBvdXRwdXQgYnVmZmVyIHRvIG9wZXJhdGUgb24uCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgT3V0cHV0IGJ1ZmZlciBpcyBhbGxvY2F0ZWQgYnkgY2FsbGluZyB0aGUgcHJlcGFyZV9vdXRwdXRfYnVmZmVyIGZ1bmN0aW9uLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPC9pdGVtaXplZGxpc3Q+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDx0aXRsZT5FeGFtcGxlIGVsZW1lbnRzPC90aXRsZT4KLSAqICAgICA8bGlzdGl0ZW0+VmlkZW9zY2FsZSwgdmlkZW9jb252ZXJ0LCBhdWRpb2NvbnZlcnQgd2hlbiBkb2luZwotICogICAgIHNjYWxpbmcvY29udmVyc2lvbnM8L2xpc3RpdGVtPgotICogICA8L2l0ZW1pemVkbGlzdD4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPlNwZWNpYWwgb3V0cHV0IGJ1ZmZlciBhbGxvY2F0aW9uczwvdGl0bGU+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBFbGVtZW50cyB3aGljaCBuZWVkIHRvIGRvIHNwZWNpYWwgYWxsb2NhdGlvbiBvZiB0aGVpciBvdXRwdXQgYnVmZmVycwotICogICAgIGJleW9uZCBhbGxvY2F0aW5nIG91dHB1dCBidWZmZXJzIHZpYSB0aGUgbmVnb3RpYXRlZCBhbGxvY2F0b3Igb3IKLSAqICAgICBidWZmZXIgcG9vbCBzaG91bGQgaW1wbGVtZW50IHRoZSBwcmVwYXJlX291dHB1dF9idWZmZXIgbWV0aG9kLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPC9pdGVtaXplZGxpc3Q+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDx0aXRsZT5FeGFtcGxlIGVsZW1lbnRzPC90aXRsZT4KLSAqICAgICA8bGlzdGl0ZW0+ZWZlbmNlPC9saXN0aXRlbT4KLSAqICAgPC9pdGVtaXplZGxpc3Q+Ci0gKiA8L2xpc3RpdGVtPgotICogPC9vcmRlcmVkbGlzdD4KLSAqIDwvcGFyYT4KLSAqIDwvcmVmc2VjdDI+Ci0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+U3ViLWNsYXNzIHNldHRhYmxlIGZsYWdzIG9uIEdzdEJhc2VUcmFuc2Zvcm08L3RpdGxlPgotICogPHBhcmE+Ci0gKiA8aXRlbWl6ZWRsaXN0PgotICogPGxpc3RpdGVtPjxwYXJhPgotICogICA8aXRlbWl6ZWRsaXN0Pjx0aXRsZT5wYXNzdGhyb3VnaDwvdGl0bGU+Ci0gKiAgICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICAgSW1wbGllcyB0aGF0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHRoZSBzdWItY2xhc3MgaXMgbm90Ci0gKiAgICAgICBpbnRlcmVzdGVkIGluIG1vZGlmeWluZyB0aGUgYnVmZmVycy4KLSAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgICBFbGVtZW50cyB3aGljaCBhcmUgYWx3YXlzIGluIHBhc3N0aHJvdWdoIG1vZGUgd2hlbmV2ZXIgdGhlIHNhbWUgY2FwcwotICogICAgICAgaGFzIGJlZW4gbmVnb3RpYXRlZCBvbiBib3RoIHBhZHMgY2FuIHNldCB0aGUgY2xhc3MgdmFyaWFibGUKLSAqICAgICAgIHBhc3N0aHJvdWdoX29uX3NhbWVfY2FwcyB0byBoYXZlIHRoaXMgYmVoYXZpb3VyIGF1dG9tYXRpY2FsbHkuCi0gKiAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiAgIDwvaXRlbWl6ZWRsaXN0PgotICogPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPmFsd2F5c19pbl9wbGFjZTwvdGl0bGU+Ci0gKiAgICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgICAgRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbm9uLXdyaXRhYmxlIGJ1ZmZlciB3aWxsIGJlIGNvcGllZCBiZWZvcmUgcGFzc2luZwotICogICAgICAgdG8gdGhlIHRyYW5zZm9ybV9pcCBmdW5jdGlvbi4KLSAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgICBJbXBsaWVkICVUUlVFIGlmIG5vIHRyYW5zZm9ybSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4KLSAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgICBJbXBsaWVkICVGQUxTRSBpZiBPTkxZIHRyYW5zZm9ybSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4KLSAqICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPC9pdGVtaXplZGxpc3Q+Ci0gKiA8L3BhcmE+PC9saXN0aXRlbT4KLSAqIDwvaXRlbWl6ZWRsaXN0PgotICogPC9wYXJhPgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiLi4vLi4vLi4vZ3N0L2dzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiLi4vLi4vLi4vZ3N0L2dzdC1pMThuLWxpYi5oIgotI2luY2x1ZGUgIi4uLy4uLy4uL2dzdC9nbGliLWNvbXBhdC1wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0YmFzZXRyYW5zZm9ybS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfYmFzZV90cmFuc2Zvcm1fZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlYnVnCi0KLS8qIEJhc2VUcmFuc2Zvcm0gc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9RT1MJRkFMU0UKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfUU9TCi19OwotCi0jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfUFJJVkFURShvYmopICBcCi0gICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNLCBHc3RCYXNlVHJhbnNmb3JtUHJpdmF0ZSkpCi0KLXN0cnVjdCBfR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUKLXsKLSAgLyogU2V0IGJ5IHN1Yi1jbGFzcyAqLwotICBnYm9vbGVhbiBwYXNzdGhyb3VnaDsKLSAgZ2Jvb2xlYW4gYWx3YXlzX2luX3BsYWNlOwotCi0gIEdzdENhcHMgKmNhY2hlX2NhcHMxOwotICBnc2l6ZSBjYWNoZV9jYXBzMV9zaXplOwotICBHc3RDYXBzICpjYWNoZV9jYXBzMjsKLSAgZ3NpemUgY2FjaGVfY2FwczJfc2l6ZTsKLSAgZ2Jvb2xlYW4gaGF2ZV9zYW1lX2NhcHM7Ci0KLSAgZ2Jvb2xlYW4gbmVnb3RpYXRlZDsKLQotICAvKiBRb1MgKi8vKiB3aXRoIExPQ0sgKi8KLSAgZ2Jvb2xlYW4gcW9zX2VuYWJsZWQ7Ci0gIGdkb3VibGUgcHJvcG9ydGlvbjsKLSAgR3N0Q2xvY2tUaW1lIGVhcmxpZXN0X3RpbWU7Ci0gIC8qIHByZXZpb3VzIGJ1ZmZlciBoYWQgYSBkaXNjb250ICovCi0gIGdib29sZWFuIGRpc2NvbnQ7Ci0KLSAgR3N0UGFkTW9kZSBwYWRfbW9kZTsKLQotICBnYm9vbGVhbiBnYXBfYXdhcmU7Ci0gIGdib29sZWFuIHByZWZlcl9wYXNzdGhyb3VnaDsKLQotICAvKiBRb1Mgc3RhdHMgKi8KLSAgZ3VpbnQ2NCBwcm9jZXNzZWQ7Ci0gIGd1aW50NjQgZHJvcHBlZDsKLQotICBHc3RDbG9ja1RpbWUgcG9zaXRpb25fb3V0OwotCi0gIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gIGdib29sZWFuIHBvb2xfYWN0aXZlOwotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLX07Ci0KLQotc3RhdGljIEdzdEVsZW1lbnRDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKLQotc3RhdGljIHZvaWQgZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQgKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqIGtsYXNzKTsKLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3RyYW5zZm9ybV9pbml0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICoga2xhc3MpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZGVmYXVsdF9zdWJtaXRfaW5wdXRfYnVmZmVyIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgZ2Jvb2xlYW4gaXNfZGlzY29udCwgR3N0QnVmZmVyICogaW5wdXQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZGVmYXVsdF9nZW5lcmF0ZV9vdXRwdXQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RCdWZmZXIgKiogb3V0YnVmKTsKLQotLyogd2UgY2FuJ3QgdXNlIEdfREVGSU5FX0FCU1RSQUNUX1RZUEUgYmVjYXVzZSB3ZSBuZWVkIHRoZSBrbGFzcyBpbiB0aGUgX2luaXQKLSAqIG1ldGhvZCB0byBnZXQgdG8gdGhlIHBhZHRlbXBsYXRlcyAqLwotR1R5cGUKLWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGJhc2VfdHJhbnNmb3JtX3R5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmJhc2VfdHJhbnNmb3JtX3R5cGUpKSB7Ci0gICAgR1R5cGUgX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBiYXNlX3RyYW5zZm9ybV9pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0LAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLAotICAgICAgMCwKLSAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQsCi0gICAgfTsKLQotICAgIF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwKLSAgICAgICAgIkdzdEJhc2VUcmFuc2Zvcm0iLCAmYmFzZV90cmFuc2Zvcm1faW5mbywgR19UWVBFX0ZMQUdfQUJTVFJBQ1QpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmYmFzZV90cmFuc2Zvcm1fdHlwZSwgX3R5cGUpOwotICB9Ci0gIHJldHVybiBiYXNlX3RyYW5zZm9ybV90eXBlOwotfQotCi1zdGF0aWMgdm9pZCBnc3RfYmFzZV90cmFuc2Zvcm1fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9hY3RpdmF0ZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF91bml0X3NpemUgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RDYXBzICogY2FwcywgZ3NpemUgKiBzaXplKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9zcmNfZXZlbnRmdW5jIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50ZnVuYyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBHc3RDYXBzICpnc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF90cmFuc2Zvcm1fY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqCi0gICAgdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBHc3RDYXBzICpnc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF9maXhhdGVfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqCi0gICAgdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogb3RoZXJjYXBzKTsKLXN0YXRpYyBHc3RDYXBzICpnc3RfYmFzZV90cmFuc2Zvcm1fcXVlcnlfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjY2VwdGNhcHNfZGVmYXVsdCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X2RlY2lkZV9hbGxvY2F0aW9uIChHc3RCYXNlVHJhbnNmb3JtCi0gICAgKiB0cmFucywgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlZmF1bHRfcHJvcG9zZV9hbGxvY2F0aW9uIChHc3RCYXNlVHJhbnNmb3JtCi0gICAgKiB0cmFucywgR3N0UXVlcnkgKiBkZWNpZGVfcXVlcnksIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIGdib29sZWFuIGdzdF9iYXNlX3RyYW5zZm9ybV9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlZmF1bHRfcXVlcnkgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF90cmFuc2Zvcm1fc2l6ZSAoR3N0QmFzZVRyYW5zZm9ybSAqCi0gICAgdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplLAotICAgIEdzdENhcHMgKiBvdGhlcmNhcHMsIGdzaXplICogb3RoZXJzaXplKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZGVmYXVsdF9wcmVwYXJlX291dHB1dF9idWZmZXIgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RCdWZmZXIgKiBpbmJ1ZiwgR3N0QnVmZmVyICoqIG91dGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZGVmYXVsdF9jb3B5X21ldGFkYXRhIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogaW5idWYsIEdzdEJ1ZmZlciAqIG91dGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X3RyYW5zZm9ybV9tZXRhIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogaW5idWYsIEdzdE1ldGEgKiBtZXRhLCBHc3RCdWZmZXIgKiBvdXRidWYpOwotCi0vKiBzdGF0aWMgZ3VpbnQgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07ICovCi0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3RyYW5zZm9ybV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfdHJhbnNmb3JtX2NsYXNzX2luaXQgKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9iYXNlX3RyYW5zZm9ybV9kZWJ1ZywgImJhc2V0cmFuc2Zvcm0iLCAwLAotICAgICAgImJhc2V0cmFuc2Zvcm0gZWxlbWVudCIpOwotCi0gIEdTVF9ERUJVRyAoImdzdF9iYXNlX3RyYW5zZm9ybV9jbGFzc19pbml0Iik7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtUHJpdmF0ZSkpOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9RT1MsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInFvcyIsICJRb1MiLCAiSGFuZGxlIFF1YWxpdHktb2YtU2VydmljZSBldmVudHMiLAotICAgICAgICAgIERFRkFVTFRfUFJPUF9RT1MsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmFsaXplOwotCi0gIGtsYXNzLT5wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMgPSBGQUxTRTsKLSAga2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaCA9IFRSVUU7Ci0KLSAga2xhc3MtPnRyYW5zZm9ybV9jYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF90cmFuc2Zvcm1fY2Fwcyk7Ci0gIGtsYXNzLT5maXhhdGVfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlZmF1bHRfZml4YXRlX2NhcHMpOwotICBrbGFzcy0+YWNjZXB0X2NhcHMgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9hY2NlcHRjYXBzX2RlZmF1bHQpOwotICBrbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlZmF1bHRfcXVlcnkpOwotICBrbGFzcy0+ZGVjaWRlX2FsbG9jYXRpb24gPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X2RlY2lkZV9hbGxvY2F0aW9uKTsKLSAga2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbiA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlZmF1bHRfcHJvcG9zZV9hbGxvY2F0aW9uKTsKLSAga2xhc3MtPnRyYW5zZm9ybV9zaXplID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF90cmFuc2Zvcm1fc2l6ZSk7Ci0gIGtsYXNzLT50cmFuc2Zvcm1fbWV0YSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlZmF1bHRfdHJhbnNmb3JtX21ldGEpOwotCi0gIGtsYXNzLT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50ZnVuYyk7Ci0gIGtsYXNzLT5zcmNfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19ldmVudGZ1bmMpOwotICBrbGFzcy0+cHJlcGFyZV9vdXRwdXRfYnVmZmVyID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChkZWZhdWx0X3ByZXBhcmVfb3V0cHV0X2J1ZmZlcik7Ci0gIGtsYXNzLT5jb3B5X21ldGFkYXRhID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGRlZmF1bHRfY29weV9tZXRhZGF0YSk7Ci0gIGtsYXNzLT5zdWJtaXRfaW5wdXRfYnVmZmVyID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGRlZmF1bHRfc3VibWl0X2lucHV0X2J1ZmZlcik7Ci0gIGtsYXNzLT5nZW5lcmF0ZV9vdXRwdXQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZGVmYXVsdF9nZW5lcmF0ZV9vdXRwdXQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfdHJhbnNmb3JtX2luaXQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKiBiY2xhc3MpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICpwYWRfdGVtcGxhdGU7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2OwotCi0gIEdTVF9ERUJVRyAoImdzdF9iYXNlX3RyYW5zZm9ybV9pbml0Iik7Ci0KLSAgcHJpdiA9IHRyYW5zLT5wcml2ID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9QUklWQVRFICh0cmFucyk7Ci0KLSAgcGFkX3RlbXBsYXRlID0KLSAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChiY2xhc3MpLCAic2luayIpOwotICBnX3JldHVybl9pZl9mYWlsIChwYWRfdGVtcGxhdGUgIT0gTlVMTCk7Ci0gIHRyYW5zLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkX3RlbXBsYXRlLCAic2luayIpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAodHJhbnMtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHRyYW5zLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9jaGFpbikpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKHRyYW5zLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2FjdGl2YXRlX21vZGUpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHRyYW5zLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9xdWVyeSkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAodHJhbnMpLCB0cmFucy0+c2lua3BhZCk7Ci0KLSAgcGFkX3RlbXBsYXRlID0KLSAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChiY2xhc3MpLCAic3JjIik7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZF90ZW1wbGF0ZSAhPSBOVUxMKTsKLSAgdHJhbnMtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHBhZF90ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAodHJhbnMtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uICh0cmFucy0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRyYW5nZSkpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKHRyYW5zLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19hY3RpdmF0ZV9tb2RlKSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uICh0cmFucy0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9iYXNlX3RyYW5zZm9ybV9xdWVyeSkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAodHJhbnMpLCB0cmFucy0+c3JjcGFkKTsKLQotICBwcml2LT5xb3NfZW5hYmxlZCA9IERFRkFVTFRfUFJPUF9RT1M7Ci0gIHByaXYtPmNhY2hlX2NhcHMxID0gTlVMTDsKLSAgcHJpdi0+Y2FjaGVfY2FwczIgPSBOVUxMOwotICBwcml2LT5wYWRfbW9kZSA9IEdTVF9QQURfTU9ERV9OT05FOwotICBwcml2LT5nYXBfYXdhcmUgPSBGQUxTRTsKLSAgcHJpdi0+cHJlZmVyX3Bhc3N0aHJvdWdoID0gVFJVRTsKLQotICBwcml2LT5wYXNzdGhyb3VnaCA9IEZBTFNFOwotICBpZiAoYmNsYXNzLT50cmFuc2Zvcm0gPT0gTlVMTCkgewotICAgIC8qIElmIG5vIHRyYW5zZm9ybSBmdW5jdGlvbiwgYWx3YXlzX2luX3BsYWNlIGlzIFRSVUUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInNldHRpbmcgaW5fcGxhY2UgVFJVRSIpOwotICAgIHByaXYtPmFsd2F5c19pbl9wbGFjZSA9IFRSVUU7Ci0KLSAgICBpZiAoYmNsYXNzLT50cmFuc2Zvcm1faXAgPT0gTlVMTCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzZXR0aW5nIHBhc3N0aHJvdWdoIFRSVUUiKTsKLSAgICAgIHByaXYtPnBhc3N0aHJvdWdoID0gVFJVRTsKLSAgICB9Ci0gIH0KLQotICBwcml2LT5wcm9jZXNzZWQgPSAwOwotICBwcml2LT5kcm9wcGVkID0gMDsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2RlZmF1bHRfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmV0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiaWRlbnRpdHkgZnJvbTogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAvKiBubyB0cmFuc2Zvcm0gZnVuY3Rpb24sIHVzZSB0aGUgaWRlbnRpdHkgdHJhbnNmb3JtICovCi0gIGlmIChmaWx0ZXIpIHsKLSAgICByZXQgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICB9IGVsc2UgewotICAgIHJldCA9IGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogZ2l2ZW4gQGNhcHMgb24gdGhlIHNyYyBvciBzaW5rIHBhZCAoZ2l2ZW4gYnkgQGRpcmVjdGlvbikKLSAqIGNhbGN1bGF0ZSB0aGUgcG9zc2libGUgY2FwcyBvbiB0aGUgb3RoZXIgcGFkLgotICoKLSAqIFJldHVybnMgbmV3IGNhcHMsIHVucmVmIGFmdGVyIHVzYWdlLgotICovCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmV0ID0gTlVMTDsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICprbGFzczsKLQotICBpZiAoY2FwcyA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIGtsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotCi0gIC8qIGlmIHRoZXJlIGlzIGEgY3VzdG9tIHRyYW5zZm9ybSBmdW5jdGlvbiwgdXNlIHRoaXMgKi8KLSAgaWYgKGtsYXNzLT50cmFuc2Zvcm1fY2FwcykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAidHJhbnNmb3JtIGNhcHMgKGRpcmVjdGlvbiA9ICVkKSIsIGRpcmVjdGlvbik7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJmcm9tOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gICAgcmV0ID0ga2xhc3MtPnRyYW5zZm9ybV9jYXBzICh0cmFucywgZGlyZWN0aW9uLCBjYXBzLCBmaWx0ZXIpOwotICAgIEdTVF9MT0dfT0JKRUNUICh0cmFucywgIiAgdG86ICUiIEdTVF9QVFJfRk9STUFULCByZXQpOwotCi0jaWZkZWYgR1NUX0VOQUJMRV9FWFRSQV9DSEVDS1MKLSAgICBpZiAoZmlsdGVyKSB7Ci0gICAgICBpZiAoIWdzdF9jYXBzX2lzX3N1YnNldCAocmV0LCBmaWx0ZXIpKSB7Ci0gICAgICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgICAgICBHU1RfRVJST1JfT0JKRUNUICh0cmFucywKLSAgICAgICAgICAgICJ0cmFuc2Zvcm1fY2FwcyByZXR1cm5lZCBjYXBzICUiIEdTVF9QVFJfRk9STUFUCi0gICAgICAgICAgICAiIHdoaWNoIGFyZSBub3QgYSByZWFsIHN1YnNldCBvZiB0aGUgZmlsdGVyIGNhcHMgJSIKLSAgICAgICAgICAgIEdTVF9QVFJfRk9STUFULCByZXQsIGZpbHRlcik7Ci0gICAgICAgIGdfd2FybmluZyAoIiVzOiB0cmFuc2Zvcm1fY2FwcyByZXR1cm5lZCBjYXBzIHdoaWNoIGFyZSBub3QgYSByZWFsICIKLSAgICAgICAgICAgICJzdWJzZXQgb2YgdGhlIGZpbHRlciBjYXBzIiwgR1NUX0VMRU1FTlRfTkFNRSAodHJhbnMpKTsKLQotICAgICAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmV0LCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAocmV0KTsKLSAgICAgICAgcmV0ID0gaW50ZXJzZWN0aW9uOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ0bzogJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF90cmFuc2Zvcm1fbWV0YSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RNZXRhICogbWV0YSwgR3N0QnVmZmVyICogb3V0YnVmKQotewotICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9IG1ldGEtPmluZm87Ci0gIGNvbnN0IGdjaGFyICpjb25zdCAqdGFnczsKLQotICB0YWdzID0gZ3N0X21ldGFfYXBpX3R5cGVfZ2V0X3RhZ3MgKGluZm8tPmFwaSk7Ci0KLSAgaWYgKCF0YWdzKQotICAgIHJldHVybiBUUlVFOwotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF90cmFuc2Zvcm1fc2l6ZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplLAotICAgIEdzdENhcHMgKiBvdGhlcmNhcHMsIGdzaXplICogb3RoZXJzaXplKQotewotICBnc2l6ZSBpbnVuaXRzaXplLCBvdXR1bml0c2l6ZSwgdW5pdHM7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7Ci0KLSAga2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7Ci0KLSAgaWYgKGtsYXNzLT5nZXRfdW5pdF9zaXplID09IE5VTEwpIHsKLSAgICAvKiBpZiB0aGVyZSBpcyBubyB0cmFuc2Zvcm1fc2l6ZSBhbmQgbm8gdW5pdF9zaXplLCBpdCBtZWFucyB0aGUKLSAgICAgKiBlbGVtZW50IGRvZXMgbm90IG1vZGlmeSB0aGUgc2l6ZSBvZiBhIGJ1ZmZlciAqLwotICAgICpvdGhlcnNpemUgPSBzaXplOwotICB9IGVsc2UgewotICAgIC8qIHRoZXJlIGlzIG5vIHRyYW5zZm9ybV9zaXplIGZ1bmN0aW9uLCB3ZSBoYXZlIHRvIHVzZSB0aGUgdW5pdF9zaXplCi0gICAgICogZnVuY3Rpb25zLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoZXJlIGlzIGEgZml4ZWQgdW5pdF9zaXplIGFzc29jaWF0ZWQgd2l0aAotICAgICAqIGVhY2ggY2Fwcy4gV2UgcHJvdmlkZSB0aGUgc2FtZSBhbW91bnQgb2YgdW5pdHMgb24gYm90aCBzaWRlcy4gKi8KLSAgICBpZiAoIWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdW5pdF9zaXplICh0cmFucywgY2FwcywgJmludW5pdHNpemUpKQotICAgICAgZ290byBub19pbl9zaXplOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCi0gICAgICAgICJpbnB1dCBzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIGlucHV0IHVuaXQgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgc2l6ZSwgaW51bml0c2l6ZSk7Ci0KLSAgICAvKiBpbnB1dCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgdW5pdF9zaXplIG9mIHRoZSBpbnB1dCBjYXBzICovCi0gICAgaWYgKGludW5pdHNpemUgPT0gMCB8fCAoc2l6ZSAlIGludW5pdHNpemUgIT0gMCkpCi0gICAgICBnb3RvIG5vX211bHRpcGxlOwotCi0gICAgLyogZ2V0IHRoZSBhbW91bnQgb2YgdW5pdHMgKi8KLSAgICB1bml0cyA9IHNpemUgLyBpbnVuaXRzaXplOwotCi0gICAgLyogbm93IGdldCB0aGUgdW5pdCBzaXplIG9mIHRoZSBvdXRwdXQgKi8KLSAgICBpZiAoIWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdW5pdF9zaXplICh0cmFucywgb3RoZXJjYXBzLCAmb3V0dW5pdHNpemUpKQotICAgICAgZ290byBub19vdXRfc2l6ZTsKLQotICAgIC8qIHRoZSBvdXRwdXQgc2l6ZSBpcyB0aGUgdW5pdF9zaXplIHRpbWVzIHRoZSBhbW91bnQgb2YgdW5pdHMgb24gdGhlCi0gICAgICogaW5wdXQgKi8KLSAgICAqb3RoZXJzaXplID0gdW5pdHMgKiBvdXR1bml0c2l6ZTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInRyYW5zZm9ybWVkIHNpemUgdG8gJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICAgICpvdGhlcnNpemUpOwotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9faW5fc2l6ZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiY291bGQgbm90IGdldCBpbl9zaXplIik7Ci0gICAgZ193YXJuaW5nICgiJXM6IGNvdWxkIG5vdCBnZXQgaW5fc2l6ZSIsIEdTVF9FTEVNRU5UX05BTUUgKHRyYW5zKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19tdWx0aXBsZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiU2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGlzIG5vdCBhIG11bHRpcGxlIG9mIgotICAgICAgICAidW5pdCBzaXplICUiIEdfR1NJWkVfRk9STUFULCBzaXplLCBpbnVuaXRzaXplKTsKLSAgICBnX3dhcm5pbmcgKCIlczogc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGlzIG5vdCBhIG11bHRpcGxlIG9mIHVuaXQgc2l6ZSAlIgotICAgICAgICBHX0dTSVpFX0ZPUk1BVCwgR1NUX0VMRU1FTlRfTkFNRSAodHJhbnMpLCBzaXplLCBpbnVuaXRzaXplKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX291dF9zaXplOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJjb3VsZCBub3QgZ2V0IG91dF9zaXplIik7Ci0gICAgZ193YXJuaW5nICgiJXM6IGNvdWxkIG5vdCBnZXQgb3V0X3NpemUiLCBHU1RfRUxFTUVOVF9OQU1FICh0cmFucykpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiB0cmFuc2Zvcm0gYSBidWZmZXIgb2YgQHNpemUgd2l0aCBAY2FwcyBvbiB0aGUgcGFkIHdpdGggQGRpcmVjdGlvbiB0bwotICogdGhlIHNpemUgb2YgYSBidWZmZXIgd2l0aCBAb3RoZXJjYXBzIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIEBvdGhlcnNpemUKLSAqCi0gKiBXZSBoYXZlIHR3byB3YXlzIG9mIGRvaW5nIHRoaXM6Ci0gKiAgMSkgdXNlIGEgY3VzdG9tIHRyYW5zZm9ybSBzaXplIGZ1bmN0aW9uLCB0aGlzIGlzIGZvciBjb21wbGljYXRlZCBjdXN0b20KLSAqICAgICBjYXNlcyB3aXRoIG5vIGZpeGVkIHVuaXRfc2l6ZS4KLSAqICAyKSB1c2UgdGhlIHVuaXRfc2l6ZSBmdW5jdGlvbnMgd2hlcmUgdGhlcmUgaXMgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUKLSAqICAgICBjYXBzIGFuZCB0aGUgc2l6ZSBvZiBhIGJ1ZmZlci4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX3NpemUgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywKLSAgICBnc2l6ZSBzaXplLCBHc3RDYXBzICogb3RoZXJjYXBzLCBnc2l6ZSAqIG90aGVyc2l6ZSkKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICprbGFzczsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAga2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCi0gICAgICAiYXNrZWQgdG8gdHJhbnNmb3JtIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiBmb3IgY2FwcyAlIgotICAgICAgR1NUX1BUUl9GT1JNQVQgIiB0byBzaXplIGZvciBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIgaW4gZGlyZWN0aW9uICVzIiwKLSAgICAgIHNpemUsIGNhcHMsIG90aGVyY2FwcywgZGlyZWN0aW9uID09IEdTVF9QQURfU1JDID8gIlNSQyIgOiAiU0lOSyIpOwotCi0gIGlmIChrbGFzcy0+dHJhbnNmb3JtX3NpemUpIHsKLSAgICAvKiBpZiB0aGVyZSBpcyBhIGN1c3RvbSB0cmFuc2Zvcm0gZnVuY3Rpb24sIHVzZSB0aGlzICovCi0gICAgcmV0ID0ga2xhc3MtPnRyYW5zZm9ybV9zaXplICh0cmFucywgZGlyZWN0aW9uLCBjYXBzLCBzaXplLCBvdGhlcmNhcHMsCi0gICAgICAgIG90aGVyc2l6ZSk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogZ2V0IHRoZSBjYXBzIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgQHBhZC4gV2UgcGVyZm9ybToKLSAqCi0gKiAgLSB0YWtlIHRoZSBjYXBzIG9mIHBlZXIgb2Ygb3RoZXJwYWQsCi0gKiAgLSBmaWx0ZXIgYWdhaW5zdCB0aGUgcGFkdGVtcGxhdGUgb2Ygb3RoZXJwYWQsIAotICogIC0gY2FsY3VsYXRlIGFsbCB0cmFuc2Zvcm1zIG9mIHJlbWFpbmluZyBjYXBzCi0gKiAgLSBmaWx0ZXIgYWdhaW5zdCB0ZW1wbGF0ZSBvZiBAcGFkCi0gKgotICogSWYgdGhlcmUgaXMgbm8gcGVlciwgd2Ugc2ltcGx5IHJldHVybiB0aGUgY2FwcyBvZiB0aGUgcGFkdGVtcGxhdGUgb2YgcGFkLgotICovCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfYmFzZV90cmFuc2Zvcm1fcXVlcnlfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0UGFkICpvdGhlcnBhZDsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMgPSBOVUxMLCAqY2FwcywgKnRlbXAsICpwZWVyZmlsdGVyID0gTlVMTDsKLSAgR3N0Q2FwcyAqdGVtcGwsICpvdGVtcGw7Ci0KLSAgb3RoZXJwYWQgPSAocGFkID09IHRyYW5zLT5zcmNwYWQpID8gdHJhbnMtPnNpbmtwYWQgOiB0cmFucy0+c3JjcGFkOwotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0gIG90ZW1wbCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChvdGhlcnBhZCk7Ci0KLSAgLyogZmlyc3QgcHJlcGFyZSB0aGUgZmlsdGVyIHRvIGJlIHNlbmQgb253YXJkcy4gV2UgbmVlZCB0byBmaWx0ZXIgYW5kCi0gICAqIHRyYW5zZm9ybSBpdCB0byB2YWxpZCBjYXBzIGZvciB0aGUgb3RoZXJwYWQuICovCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJmaWx0ZXIgY2FwcyAgJSIgR1NUX1BUUl9GT1JNQVQsIGZpbHRlcik7Ci0KLSAgICAvKiBmaWx0ZXJlZCBhZ2FpbnN0IG91ciBwYWR0ZW1wbGF0ZSBvZiB0aGlzIHBhZCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm91ciB0ZW1wbGF0ZSAgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXBsKTsKLSAgICB0ZW1wID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaW50ZXJzZWN0ZWQgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXApOwotCi0gICAgLyogdGhlbiBzZWUgd2hhdCB3ZSBjYW4gdHJhbnNmb3JtIHRoaXMgdG8gKi8KLSAgICBwZWVyZmlsdGVyID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzICh0cmFucywKLSAgICAgICAgR1NUX1BBRF9ESVJFQ1RJT04gKHBhZCksIHRlbXAsIE5VTEwpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInRyYW5zZm9ybWVkICAlIiBHU1RfUFRSX0ZPUk1BVCwgcGVlcmZpbHRlcik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXApOwotCi0gICAgaWYgKCFnc3RfY2Fwc19pc19lbXB0eSAocGVlcmZpbHRlcikpIHsKLSAgICAgIC8qIGFuZCBmaWx0ZXIgYWdhaW5zdCB0aGUgdGVtcGxhdGUgb2YgdGhlIG90aGVyIHBhZCAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAib3VyIHRlbXBsYXRlICAlIiBHU1RfUFRSX0ZPUk1BVCwgb3RlbXBsKTsKLSAgICAgIC8qIFdlIGtlZXAgdGhlIGNhcHMgc29ydGVkIGxpa2UgdGhlIHJldHVybmVkIGNhcHMgKi8KLSAgICAgIHRlbXAgPQotICAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyZmlsdGVyLCBvdGVtcGwsCi0gICAgICAgICAgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImludGVyc2VjdGVkICUiIEdTVF9QVFJfRk9STUFULCB0ZW1wKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChwZWVyZmlsdGVyKTsKLSAgICAgIHBlZXJmaWx0ZXIgPSB0ZW1wOwotICAgIH0KLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBlZXIgZmlsdGVyIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHBlZXJmaWx0ZXIpOwotCi0gIGlmIChwZWVyZmlsdGVyICYmIGdzdF9jYXBzX2lzX2VtcHR5IChwZWVyZmlsdGVyKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBlZXIgZmlsdGVyIGNhcHMgYXJlIGVtcHR5Iik7Ci0gICAgY2FwcyA9IHBlZXJmaWx0ZXI7Ci0gICAgcGVlcmZpbHRlciA9IE5VTEw7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgLyogcXVlcnkgdGhlIHBlZXIgd2l0aCB0aGUgdHJhbnNmb3JtZWQgZmlsdGVyICovCi0gIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKG90aGVycGFkLCBwZWVyZmlsdGVyKTsKLQotICBpZiAocGVlcmZpbHRlcikKLSAgICBnc3RfY2Fwc191bnJlZiAocGVlcmZpbHRlcik7Ci0KLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicGVlciBjYXBzICAlIiBHU1RfUFRSX0ZPUk1BVCwgcGVlcmNhcHMpOwotCi0gICAgLyogZmlsdGVyZWQgYWdhaW5zdCBvdXIgcGFkdGVtcGxhdGUgb24gdGhlIG90aGVyIHNpZGUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJvdXIgdGVtcGxhdGUgICUiIEdTVF9QVFJfRk9STUFULCBvdGVtcGwpOwotICAgIHRlbXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAocGVlcmNhcHMsIG90ZW1wbCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJpbnRlcnNlY3RlZCAlIiBHU1RfUFRSX0ZPUk1BVCwgdGVtcCk7Ci0gIH0gZWxzZSB7Ci0gICAgdGVtcCA9IGdzdF9jYXBzX3JlZiAob3RlbXBsKTsKLSAgfQotCi0gIC8qIHRoZW4gc2VlIHdoYXQgd2UgY2FuIHRyYW5zZm9ybSB0aGlzIHRvICovCi0gIGNhcHMgPSBnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMgKHRyYW5zLAotICAgICAgR1NUX1BBRF9ESVJFQ1RJT04gKG90aGVycGFkKSwgdGVtcCwgZmlsdGVyKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAidHJhbnNmb3JtZWQgICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlbXApOwotICBpZiAoY2FwcyA9PSBOVUxMIHx8IGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgLyogYW5kIGZpbHRlciBhZ2FpbnN0IHRoZSB0ZW1wbGF0ZSBvZiB0aGlzIHBhZCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm91ciB0ZW1wbGF0ZSAgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXBsKTsKLSAgICAvKiBXZSBrZWVwIHRoZSBjYXBzIHNvcnRlZCBsaWtlIHRoZSByZXR1cm5lZCBjYXBzICovCi0gICAgdGVtcCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzLCB0ZW1wbCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJpbnRlcnNlY3RlZCAlIiBHU1RfUFRSX0ZPUk1BVCwgdGVtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGNhcHMgPSB0ZW1wOwotCi0gICAgaWYgKHRyYW5zLT5wcml2LT5wcmVmZXJfcGFzc3Rocm91Z2gpIHsKLSAgICAgIC8qIE5vdyB0cnkgaWYgd2UgY2FuIHB1dCB0aGUgdW50cmFuc2Zvcm1lZCBkb3duc3RyZWFtIGNhcHMgZmlyc3QgKi8KLSAgICAgIHRlbXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAocGVlcmNhcHMsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5ICh0ZW1wKSkgewotICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2UgKHRlbXAsIGNhcHMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXApOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgLyogbm8gcGVlciBvciB0aGUgcGVlciBjYW4gZG8gYW55dGhpbmcsIG91ciBwYWR0ZW1wbGF0ZSBpcyBlbm91Z2ggdGhlbiAqLwotICAgIGlmIChmaWx0ZXIpIHsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCB0ZW1wbCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICB9IGVsc2UgewotICAgICAgY2FwcyA9IGdzdF9jYXBzX3JlZiAodGVtcGwpOwotICAgIH0KLSAgfQotCi1kb25lOgotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInJldHVybmluZyAgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIGlmIChwZWVyY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotCi0gIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdGVtcGwpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi0vKiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHBvb2wsIGFsbG9jYXRvciBhbmQgcXVlcnkgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9hbGxvY2F0aW9uIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwKLSAgICBHc3RBbGxvY2F0aW9uUGFyYW1zICogcGFyYW1zLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RBbGxvY2F0b3IgKm9sZGFsbG9jOwotICBHc3RCdWZmZXJQb29sICpvbGRwb29sOwotICBHc3RRdWVyeSAqb2xkcXVlcnk7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7Ci0gIG9sZHBvb2wgPSBwcml2LT5wb29sOwotICBwcml2LT5wb29sID0gcG9vbDsKLSAgcHJpdi0+cG9vbF9hY3RpdmUgPSBGQUxTRTsKLQotICBvbGRhbGxvYyA9IHByaXYtPmFsbG9jYXRvcjsKLSAgcHJpdi0+YWxsb2NhdG9yID0gYWxsb2NhdG9yOwotCi0gIG9sZHF1ZXJ5ID0gcHJpdi0+cXVlcnk7Ci0gIHByaXYtPnF1ZXJ5ID0gcXVlcnk7Ci0KLSAgaWYgKHBhcmFtcykKLSAgICBwcml2LT5wYXJhbXMgPSAqcGFyYW1zOwotICBlbHNlCi0gICAgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXQgKCZwcml2LT5wYXJhbXMpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOwotCi0gIGlmIChvbGRwb29sKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJkZWFjdGl2YXRpbmcgb2xkIHBvb2wgJXAiLCBvbGRwb29sKTsKLSAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAob2xkcG9vbCwgRkFMU0UpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKG9sZHBvb2wpOwotICB9Ci0gIGlmIChvbGRhbGxvYykgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKG9sZGFsbG9jKTsKLSAgfQotICBpZiAob2xkcXVlcnkpIHsKLSAgICBnc3RfcXVlcnlfdW5yZWYgKG9sZHF1ZXJ5KTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF9kZWNpZGVfYWxsb2NhdGlvbiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGd1aW50IGksIG5fbWV0YXM7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7Ci0gIEdzdENhcHMgKm91dGNhcHM7Ci0gIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gIGd1aW50IHNpemUsIG1pbiwgbWF4OwotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci0gIEdzdFN0cnVjdHVyZSAqY29uZmlnOwotICBnYm9vbGVhbiB1cGRhdGVfYWxsb2NhdG9yOwotCi0gIGtsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotCi0gIG5fbWV0YXMgPSBnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcyAocXVlcnkpOwotICBmb3IgKGkgPSAwOyBpIDwgbl9tZXRhczsgaSsrKSB7Ci0gICAgR1R5cGUgYXBpOwotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcGFyYW1zOwotICAgIGdib29sZWFuIHJlbW92ZTsKLQotICAgIGFwaSA9IGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhIChxdWVyeSwgaSwgJnBhcmFtcyk7Ci0KLSAgICAvKiBieSBkZWZhdWx0IHdlIHJlbW92ZSBhbGwgbWV0YWRhdGEsIHN1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCBhCi0gICAgICogZmlsdGVyX21ldGEgZnVuY3Rpb24gKi8KLSAgICBpZiAoZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZyAoYXBpLCBfZ3N0X21ldGFfdGFnX21lbW9yeSkpIHsKLSAgICAgIC8qIHJlbW92ZSBhbGwgbWVtb3J5IGRlcGVuZGVudCBtZXRhZGF0YSBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBoYXZlIHRvCi0gICAgICAgKiBhbGxvY2F0ZSBkaWZmZXJlbnQgbWVtb3J5IGZvciBpbnB1dCBhbmQgb3V0cHV0LiAqLwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHRyYW5zLCAicmVtb3ZpbmcgbWVtb3J5IHNwZWNpZmljIG1ldGFkYXRhICVzIiwKLSAgICAgICAgICBnX3R5cGVfbmFtZSAoYXBpKSk7Ci0gICAgICByZW1vdmUgPSBUUlVFOwotICAgIH0gZWxzZSBpZiAoR19MSUtFTFkgKGtsYXNzLT5maWx0ZXJfbWV0YSkpIHsKLSAgICAgIC8qIHJlbW92ZSBpZiB0aGUgc3ViY2xhc3Mgc2FpZCBzbyAqLwotICAgICAgcmVtb3ZlID0gIWtsYXNzLT5maWx0ZXJfbWV0YSAodHJhbnMsIHF1ZXJ5LCBhcGksIHBhcmFtcyk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJmaWx0ZXJfbWV0YSBmb3IgYXBpICVzIHJldHVybmVkOiAlcyIsCi0gICAgICAgICAgZ190eXBlX25hbWUgKGFwaSksIChyZW1vdmUgPyAicmVtb3ZlIiA6ICJrZWVwIikpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJyZW1vdmluZyBtZXRhZGF0YSAlcyIsIGdfdHlwZV9uYW1lIChhcGkpKTsKLSAgICAgIHJlbW92ZSA9IFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKHJlbW92ZSkgewotICAgICAgZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9tZXRhIChxdWVyeSwgaSk7Ci0gICAgICBpLS07Ci0gICAgICBuX21ldGFzLS07Ci0gICAgfQotICB9Ci0KLSAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24gKHF1ZXJ5LCAmb3V0Y2FwcywgTlVMTCk7Ci0KLSAgLyogd2UgZ290IGNvbmZpZ3VyYXRpb24gZnJvbSBvdXIgcGVlciBvciB0aGUgZGVjaWRlX2FsbG9jYXRpb24gbWV0aG9kLAotICAgKiBwYXJzZSB0aGVtICovCi0gIGlmIChnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wYXJhbXMgKHF1ZXJ5KSA+IDApIHsKLSAgICAvKiB0cnkgdGhlIGFsbG9jYXRvciAqLwotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wYXJhbSAocXVlcnksIDAsICZhbGxvY2F0b3IsICZwYXJhbXMpOwotICAgIHVwZGF0ZV9hbGxvY2F0b3IgPSBUUlVFOwotICB9IGVsc2UgewotICAgIGFsbG9jYXRvciA9IE5VTEw7Ci0gICAgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXQgKCZwYXJhbXMpOwotICAgIHVwZGF0ZV9hbGxvY2F0b3IgPSBGQUxTRTsKLSAgfQotCi0gIGlmIChnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29scyAocXVlcnkpID4gMCkgewotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sIChxdWVyeSwgMCwgJnBvb2wsICZzaXplLCAmbWluLCAmbWF4KTsKLQotICAgIGlmIChwb29sID09IE5VTEwpIHsKLSAgICAgIC8qIG5vIHBvb2wsIHdlIGNhbiBtYWtlIG91ciBvd24gKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAibm8gcG9vbCwgbWFraW5nIG5ldyBwb29sIik7Ci0gICAgICBwb29sID0gZ3N0X2J1ZmZlcl9wb29sX25ldyAoKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcG9vbCA9IE5VTEw7Ci0gICAgc2l6ZSA9IG1pbiA9IG1heCA9IDA7Ci0gIH0KLQotICAvKiBub3cgY29uZmlndXJlICovCi0gIGlmIChwb29sKSB7Ci0gICAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCBvdXRjYXBzLCBzaXplLCBtaW4sIG1heCk7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yIChjb25maWcsIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0KLSAgICAvKiBidWZmZXIgcG9vbCBtYXkgaGF2ZSB0byBkbyBzb21lIGNoYW5nZXMgKi8KLSAgICBpZiAoIWdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25maWcpKSB7Ci0gICAgICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0KLSAgICAgIC8qIElmIGNoYW5nZSBhcmUgbm90IGFjY2VwdGFibGUsIGZhbGxiYWNrIHRvIGdlbmVyaWMgcG9vbCAqLwotICAgICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3ZhbGlkYXRlX3BhcmFtcyAoY29uZmlnLCBvdXRjYXBzLCBzaXplLCBtaW4sCi0gICAgICAgICAgICAgIG1heCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ1bnN1cG9ydGVkIHBvb2wsIG1ha2luZyBuZXcgcG9vbCIpOwotCi0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotICAgICAgICBwb29sID0gZ3N0X2J1ZmZlcl9wb29sX25ldyAoKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zIChjb25maWcsIG91dGNhcHMsIHNpemUsIG1pbiwgbWF4KTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yIChjb25maWcsIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZykpCi0gICAgICAgIGdvdG8gY29uZmlnX2ZhaWxlZDsKLSAgICB9Ci0gIH0KLQotICBpZiAodXBkYXRlX2FsbG9jYXRvcikKLSAgICBnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3BhcmFtIChxdWVyeSwgMCwgYWxsb2NhdG9yLCAmcGFyYW1zKTsKLSAgZWxzZQotICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wYXJhbSAocXVlcnksIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gIGlmIChhbGxvY2F0b3IpCi0gICAgZ3N0X29iamVjdF91bnJlZiAoYWxsb2NhdG9yKTsKLQotICBpZiAocG9vbCkgewotICAgIGdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsIHBvb2wsIHNpemUsIG1pbiwgbWF4KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi1jb25maWdfZmFpbGVkOgotICBpZiAocG9vbCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLQotICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICgiRmFpbGVkIHRvIGNvbmZpZ3VyZSB0aGUgYnVmZmVyIHBvb2wiKSwKLSAgICAgICgiQ29uZmlndXJhdGlvbiBpcyBtb3N0IGxpa2VseSBpbnZhbGlkLCBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuIikpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2RvX2J1ZmZlcnBvb2wgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIG91dGNhcHMpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IE5VTEw7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtczsKLQotICAvKiB0aGVyZSBhcmUgdGhlc2UgcG9zc2liaWxpdGllczoKLSAgICoKLSAgICogMSkgd2UgbmVnb3RpYXRlZCBwYXNzdGhyb3VnaCwgd2UgY2FuIHByb3h5IHRoZSBidWZmZXJwb29sIGRpcmVjdGx5IGFuZCB3ZQotICAgKiAgICB3aWxsIGRvIHRoYXQgd2hlbmV2ZXIgc29tZSB1cHN0cmVhbSBkb2VzIGFuIGFsbG9jYXRpb24gcXVlcnkuCi0gICAqIDIpIHdlIG5lZWQgdG8gZG8gYSB0cmFuc2Zvcm0sIHdlIG5lZWQgdG8gZ2V0IGEgYnVmZmVycG9vbCBmcm9tIGRvd25zdHJlYW0KLSAgICogICAgYW5kIGNvbmZpZ3VyZSBpdC4gV2hlbiB1cHN0cmVhbSBkb2VzIHRoZSBBTExPQ0FUSU9OIHF1ZXJ5LCB0aGUKLSAgICogICAgcHJvcG9zZV9hbGxvY2F0aW9uIHZtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHdlIHdpbGwgY29uZmlndXJlIHRoZQotICAgKiAgICB1cHN0cmVhbSBhbGxvY2F0b3Igd2l0aCBvdXIgcHJvcG9zZWQgdmFsdWVzIHRoZW4uCi0gICAqLwotICBpZiAocHJpdi0+cGFzc3Rocm91Z2ggfHwgcHJpdi0+YWx3YXlzX2luX3BsYWNlKSB7Ci0gICAgLyogd2UgYXJlIGluIHBhc3N0aHJvdWdoLCB0aGUgaW5wdXQgYnVmZmVyIGlzIG5ldmVyIGNvcGllZCBhbmQgYWx3YXlzIHBhc3NlZAotICAgICAqIGFsb25nLiBXZSBuZXZlciBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIG9uIHRoZSBzcmNwYWQuIFdoYXQgd2UgZG8gaXMKLSAgICAgKiBsZXQgdGhlIHVwc3RyZWFtIGVsZW1lbnQgZGVjaWRlIGlmIGl0IHdhbnRzIHRvIHVzZSBhIGJ1ZmZlcnBvb2wgYW5kCi0gICAgICogdGhlbiB3ZSB3aWxsIHByb3h5IHRoZSBkb3duc3RyZWFtIHBvb2wgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIndlJ3JlIHBhc3N0aG91Z2gsIGRlbGF5IGJ1ZmZlcnBvb2wiKTsKLSAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2FsbG9jYXRpb24gKHRyYW5zLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIC8qIG5vdCBwYXNzdGhyb3VnaCwgd2UgbmVlZCB0byBhbGxvY2F0ZSAqLwotICAvKiBmaW5kIGEgcG9vbCBmb3IgdGhlIG5lZ290aWF0ZWQgY2FwcyBub3cgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJkb2luZyBhbGxvY2F0aW9uIHF1ZXJ5Iik7Ci0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uIChvdXRjYXBzLCBUUlVFKTsKLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKHRyYW5zLT5zcmNwYWQsIHF1ZXJ5KSkgewotICAgIC8qIG5vdCBhIHByb2JsZW0sIGp1c3QgZGVidWcgYSBsaXR0bGUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInBlZXIgQUxMT0NBVElPTiBxdWVyeSBmYWlsZWQiKTsKLSAgfQotCi0gIGtsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiY2FsbGluZyBkZWNpZGVfYWxsb2NhdGlvbiIpOwotICBnX2Fzc2VydCAoa2xhc3MtPmRlY2lkZV9hbGxvY2F0aW9uICE9IE5VTEwpOwotICByZXN1bHQgPSBrbGFzcy0+ZGVjaWRlX2FsbG9jYXRpb24gKHRyYW5zLCBxdWVyeSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJBTExPQ0FUSU9OICglZCkgcGFyYW1zOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0LAotICAgICAgcXVlcnkpOwotCi0gIGlmICghcmVzdWx0KQotICAgIGdvdG8gbm9fZGVjaWRlX2FsbG9jYXRpb247Ci0KLSAgLyogd2UgZ290IGNvbmZpZ3VyYXRpb24gZnJvbSBvdXIgcGVlciBvciB0aGUgZGVjaWRlX2FsbG9jYXRpb24gbWV0aG9kLAotICAgKiBwYXJzZSB0aGVtICovCi0gIGlmIChnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wYXJhbXMgKHF1ZXJ5KSA+IDApIHsKLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW0gKHF1ZXJ5LCAwLCAmYWxsb2NhdG9yLCAmcGFyYW1zKTsKLSAgfSBlbHNlIHsKLSAgICBhbGxvY2F0b3IgPSBOVUxMOwotICAgIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0ICgmcGFyYW1zKTsKLSAgfQotCi0gIGlmIChnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29scyAocXVlcnkpID4gMCkKLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsICZwb29sLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAvKiBub3cgc3RvcmUgKi8KLSAgcmVzdWx0ID0KLSAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfYWxsb2NhdGlvbiAodHJhbnMsIHBvb2wsIGFsbG9jYXRvciwgJnBhcmFtcywKLSAgICAgIHF1ZXJ5KTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVycm9ycyAqLwotbm9fZGVjaWRlX2FsbG9jYXRpb246Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHRyYW5zLCAiU3ViY2xhc3MgZmFpbGVkIHRvIGRlY2lkZSBhbGxvY2F0aW9uIik7Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19Ci0KLS8qIGZ1bmN0aW9uIHRyaWdnZXJlZCB3aGVuIHRoZSBpbiBhbmQgb3V0IGNhcHMgYXJlIG5lZ290aWF0ZWQgYW5kIG5lZWQKLSAqIHRvIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIHN1YmNsYXNzLiAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fY29uZmlndXJlX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGluLAotICAgIEdzdENhcHMgKiBvdXQpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0KLSAga2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJpbiBjYXBzOiAgJSIgR1NUX1BUUl9GT1JNQVQsIGluKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJvdXQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG91dCk7Ci0KLSAgLyogY2xlYXIgdGhlIGNhY2hlICovCi0gIGdzdF9jYXBzX3JlcGxhY2UgKCZwcml2LT5jYWNoZV9jYXBzMSwgTlVMTCk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZwcml2LT5jYWNoZV9jYXBzMiwgTlVMTCk7Ci0KLSAgLyogZmlndXJlIG91dCBzYW1lIGNhcHMgc3RhdGUgKi8KLSAgcHJpdi0+aGF2ZV9zYW1lX2NhcHMgPSBnc3RfY2Fwc19pc19lcXVhbCAoaW4sIG91dCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiaGF2ZV9zYW1lX2NhcHM6ICVkIiwgcHJpdi0+aGF2ZV9zYW1lX2NhcHMpOwotCi0gIC8qIFNldCB0aGUgcGFzc3Rocm91Z2ggaWYgdGhlIGNsYXNzIHdhbnRzIHBhc3N0aHJvdWdoX29uX3NhbWVfY2FwcwotICAgKiBhbmQgd2UgaGF2ZSB0aGUgc2FtZSBjYXBzIG9uIGVhY2ggcGFkICovCi0gIGlmIChrbGFzcy0+cGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzKQotICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKHRyYW5zLCBwcml2LT5oYXZlX3NhbWVfY2Fwcyk7Ci0KLSAgLyogbm93IGNvbmZpZ3VyZSB0aGUgZWxlbWVudCB3aXRoIHRoZSBjYXBzICovCi0gIGlmIChrbGFzcy0+c2V0X2NhcHMpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIkNhbGxpbmcgc2V0X2NhcHMgbWV0aG9kIHRvIHNldHVwIGNhcHMiKTsKLSAgICByZXQgPSBrbGFzcy0+c2V0X2NhcHMgKHRyYW5zLCBpbiwgb3V0KTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X2ZpeGF0ZV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHMgKiBvdGhlcmNhcHMpCi17Ci0gIG90aGVyY2FwcyA9IGdzdF9jYXBzX2ZpeGF0ZSAob3RoZXJjYXBzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJmaXhhdGVkIHRvICUiIEdTVF9QVFJfRk9STUFULCBvdGhlcmNhcHMpOwotCi0gIHJldHVybiBvdGhlcmNhcHM7Ci19Ci0KLS8qIGdpdmVuIGEgZml4ZWQgQGNhcHMgb24gQHBhZCwgY3JlYXRlIHRoZSBiZXN0IHBvc3NpYmxlIGNhcHMgZm9yIHRoZQotICogb3RoZXIgcGFkLgotICogQGNhcHMgbXVzdCBiZSBmaXhlZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSB0cmFuc2Zvcm0gY2FwcyB2bWV0aG9kIG9mIHRoZSBiYXNldHJhbnNmb3JtIHRvIGZpZ3VyZQotICogb3V0IHRoZSBwb3NzaWJsZSB0YXJnZXQgZm9ybWF0cy4gSXQgdGhlbiB0cmllcyB0byBzZWxlY3QgdGhlIGJlc3QgZm9ybWF0IGZyb20KLSAqIHRoaXMgbGlzdCBieToKLSAqCi0gKiAtIGF0dGVtcHQgcGFzc3Rocm91Z2ggaWYgdGhlIHRhcmdldCBjYXBzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGlucHV0IGNhcHMKLSAqIC0gZml4YXRpbmcgYnkgdXNpbmcgcGVlciBjYXBzCi0gKiAtIGZpeGF0aW5nIHdpdGggdHJhbnNmb3JtIGZpeGF0ZSBmdW5jdGlvbgotICogLSBmaXhhdGluZyB3aXRoIHBhZCBmaXhhdGUgZnVuY3Rpb25zLgotICoKLSAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNhcHMgdGhhdCBjYW4gYmUgdHJhbnNmb3JtZWQgaW50byBhbmQgaXMgYWNjZXB0ZWQgYnkKLSAqIHRoZSBwZWVyIGVsZW1lbnQuCi0gKi8KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9iYXNlX3RyYW5zZm9ybV9maW5kX3RyYW5zZm9ybSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7Ci0gIEdzdFBhZCAqb3RoZXJwYWQsICpvdGhlcnBlZXI7Ci0gIEdzdENhcHMgKm90aGVyY2FwczsKLSAgZ2Jvb2xlYW4gaXNfZml4ZWQ7Ci0KLSAgLyogY2FwcyBtdXN0IGJlIGZpeGVkIGhlcmUsIHRoaXMgaXMgYSBwcm9ncmFtbWluZyBlcnJvciBpZiBpdCdzIG5vdCAqLwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpLCBOVUxMKTsKLQotICBrbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKLQotICBvdGhlcnBhZCA9IChwYWQgPT0gdHJhbnMtPnNyY3BhZCkgPyB0cmFucy0+c2lua3BhZCA6IHRyYW5zLT5zcmNwYWQ7Ci0gIG90aGVycGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKG90aGVycGFkKTsKLQotICAvKiBzZWUgaG93IHdlIGNhbiB0cmFuc2Zvcm0gdGhlIGlucHV0IGNhcHMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGZvcgotICAgKiBwYXNzdGhyb3VnaCBiZWNhdXNlIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRoYXQgdGhpcyBlbGVtZW50IGNhbm5vdCBzdXBwb3J0Ci0gICAqIHBhc3N0aHJvdWdoIGF0IGFsbC4gKi8KLSAgb3RoZXJjYXBzID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX3RyYW5zZm9ybV9jYXBzICh0cmFucywKLSAgICAgIEdTVF9QQURfRElSRUNUSU9OIChwYWQpLCBjYXBzLCBOVUxMKTsKLQotICAvKiBUaGUgY2FwcyB3ZSBjYW4gYWN0dWFsbHkgb3V0cHV0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHRyYW5zZm9ybWVkCi0gICAqIGNhcHMgd2l0aCB0aGUgcGFkIHRlbXBsYXRlIGZvciB0aGUgcGFkICovCi0gIGlmIChvdGhlcmNhcHMgJiYgIWdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcmNhcHMpKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0LCAqdGVtcGxfY2FwczsKLQotICAgIHRlbXBsX2NhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAob3RoZXJwYWQpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAotICAgICAgICAiaW50ZXJzZWN0aW5nIGFnYWluc3QgcGFkdGVtcGxhdGUgJSIgR1NUX1BUUl9GT1JNQVQsIHRlbXBsX2NhcHMpOwotCi0gICAgaW50ZXJzZWN0ID0KLSAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKG90aGVyY2FwcywgdGVtcGxfY2FwcywKLSAgICAgICAgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLQotICAgIGdzdF9jYXBzX3VucmVmIChvdGhlcmNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbF9jYXBzKTsKLSAgICBvdGhlcmNhcHMgPSBpbnRlcnNlY3Q7Ci0gIH0KLQotICAvKiBjaGVjayBpZiB0cmFuc2Zvcm0gaXMgZW1wdHkgKi8KLSAgaWYgKCFvdGhlcmNhcHMgfHwgZ3N0X2NhcHNfaXNfZW1wdHkgKG90aGVyY2FwcykpCi0gICAgZ290byBub190cmFuc2Zvcm07Ci0KLSAgLyogaWYgdGhlIG90aGVyY2FwcyBhcmUgbm90IGZpeGVkLCB3ZSBuZWVkIHRvIGZpeGF0ZSB0aGVtLCBmaXJzdCBhdHRlbXB0Ci0gICAqIGlzIGJ5IGF0dGVtcHRpbmcgcGFzc3Rocm91Z2ggaWYgdGhlIG90aGVyY2FwcyBhcmUgYSBzdXBlcnNldCBvZiBjYXBzLiAqLwotICAvKiBGSVhNRS4gbWF5YmUgdGhlIGNhcHMgaXMgbm90IGZpeGVkIGJlY2F1c2UgaXQgaGFzIG11bHRpcGxlIHN0cnVjdHVyZXMgb2YKLSAgICogZml4ZWQgY2FwcyAqLwotICBpc19maXhlZCA9IGdzdF9jYXBzX2lzX2ZpeGVkIChvdGhlcmNhcHMpOwotICBpZiAoIWlzX2ZpeGVkKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCi0gICAgICAgICJ0cmFuc2Zvcm0gcmV0dXJuZWQgbm9uIGZpeGVkICAlIiBHU1RfUFRSX0ZPUk1BVCwgb3RoZXJjYXBzKTsKLQotICAgIC8qIE5vdyBsZXQncyBzZWUgd2hhdCB0aGUgcGVlciBzdWdnZXN0cyBiYXNlZCBvbiBvdXIgdHJhbnNmb3JtZWQgY2FwcyAqLwotICAgIGlmIChvdGhlcnBlZXIpIHsKLSAgICAgIEdzdENhcHMgKnBlZXJjYXBzLCAqaW50ZXJzZWN0aW9uLCAqdGVtcGxfY2FwczsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCi0gICAgICAgICAgIkNoZWNraW5nIHBlZXIgY2FwcyB3aXRoIGZpbHRlciAlIiBHU1RfUFRSX0ZPUk1BVCwgb3RoZXJjYXBzKTsKLQotICAgICAgcGVlcmNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKG90aGVycGVlciwgb3RoZXJjYXBzKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiUmVzdWx0ZWQgaW4gJSIgR1NUX1BUUl9GT1JNQVQsIHBlZXJjYXBzKTsKLSAgICAgIGlmICghZ3N0X2NhcHNfaXNfZW1wdHkgKHBlZXJjYXBzKSkgewotICAgICAgICB0ZW1wbF9jYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKG90aGVycGFkKTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKLSAgICAgICAgICAgICJJbnRlcnNlY3Rpbmcgd2l0aCB0ZW1wbGF0ZSBjYXBzICUiIEdTVF9QVFJfRk9STUFULCB0ZW1wbF9jYXBzKTsKLQotICAgICAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKHBlZXJjYXBzLCB0ZW1wbF9jYXBzLAotICAgICAgICAgICAgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJJbnRlcnNlY3Rpb246ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgICAgaW50ZXJzZWN0aW9uKTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsX2NhcHMpOwotICAgICAgICBwZWVyY2FwcyA9IGludGVyc2VjdGlvbjsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKLSAgICAgICAgICAgICJJbnRlcnNlY3Rpbmcgd2l0aCB0cmFuc2Zvcm1lZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBvdGhlcmNhcHMpOwotICAgICAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKHBlZXJjYXBzLCBvdGhlcmNhcHMsCi0gICAgICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIkludGVyc2VjdGlvbjogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICBpbnRlcnNlY3Rpb24pOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKLSAgICAgICAgb3RoZXJjYXBzID0gaW50ZXJzZWN0aW9uOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKG90aGVyY2Fwcyk7Ci0gICAgICAgIG90aGVyY2FwcyA9IHBlZXJjYXBzOwotICAgICAgfQotCi0gICAgICBpc19maXhlZCA9IGdzdF9jYXBzX2lzX2ZpeGVkIChvdGhlcmNhcHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIm5vIHBlZXIsIGRvaW5nIHBhc3N0aHJvdWdoIik7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKLSAgICAgIG90aGVyY2FwcyA9IGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gICAgICBpc19maXhlZCA9IFRSVUU7Ci0gICAgfQotICB9Ci0gIGlmIChnc3RfY2Fwc19pc19lbXB0eSAob3RoZXJjYXBzKSkKLSAgICBnb3RvIG5vX3RyYW5zZm9ybV9wb3NzaWJsZTsKLQotICBHU1RfREVCVUcgKCJoYXZlICVzZml4ZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgKGlzX2ZpeGVkID8gIiIgOiAibm9uLSIpLAotICAgICAgb3RoZXJjYXBzKTsKLQotICAvKiBzZWNvbmQgYXR0ZW1wdCBhdCBmaXhhdGlvbiwgY2FsbCB0aGUgZml4YXRlIHZtZXRob2QgKi8KLSAgLyogY2FwcyBjb3VsZCBiZSBmaXhlZCBidXQgdGhlIHN1YmNsYXNzIG1heSB3YW50IHRvIGFkZCBmaWVsZHMgKi8KLSAgaWYgKGtsYXNzLT5maXhhdGVfY2FwcykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiY2FsbGluZyBmaXhhdGVfY2FwcyBmb3IgJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICAgIiB1c2luZyBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIgb24gcGFkICVzOiVzIiwgb3RoZXJjYXBzLCBjYXBzLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKG90aGVycGFkKSk7Ci0gICAgLyogbm90ZSB0aGF0IHdlIHBhc3MgdGhlIGNvbXBsZXRlIGFycmF5IG9mIHN0cnVjdHVyZXMgdG8gdGhlIGZpeGF0ZQotICAgICAqIGZ1bmN0aW9uLCBpdCBuZWVkcyB0byB0cnVuY2F0ZSBpdHNlbGYgKi8KLSAgICBvdGhlcmNhcHMgPQotICAgICAgICBrbGFzcy0+Zml4YXRlX2NhcHMgKHRyYW5zLCBHU1RfUEFEX0RJUkVDVElPTiAocGFkKSwgY2Fwcywgb3RoZXJjYXBzKTsKLSAgICBpc19maXhlZCA9IGdzdF9jYXBzX2lzX2ZpeGVkIChvdGhlcmNhcHMpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWZ0ZXIgZml4YXRpbmcgJSIgR1NUX1BUUl9GT1JNQVQsIG90aGVyY2Fwcyk7Ci0gIH0KLQotICAvKiBjYXBzIHNob3VsZCBiZSBmaXhlZCBub3csIGlmIG5vdCB3ZSBoYXZlIHRvIGZhaWwuICovCi0gIGlmICghaXNfZml4ZWQpCi0gICAgZ290byBjb3VsZF9ub3RfZml4YXRlOwotCi0gIC8qIGFuZCBwZWVyIHNob3VsZCBhY2NlcHQgKi8KLSAgaWYgKG90aGVycGVlciAmJiAhZ3N0X3BhZF9xdWVyeV9hY2NlcHRfY2FwcyAob3RoZXJwZWVyLCBvdGhlcmNhcHMpKQotICAgIGdvdG8gcGVlcl9ub19hY2NlcHQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJJbnB1dCBjYXBzIHdlcmUgJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICIsIGFuZCBnb3QgZmluYWwgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcywgb3RoZXJjYXBzKTsKLQotICBpZiAob3RoZXJwZWVyKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKG90aGVycGVlcik7Ci0KLSAgcmV0dXJuIG90aGVyY2FwczsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3RyYW5zZm9ybToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAotICAgICAgICAidHJhbnNmb3JtIHJldHVybmVkIHVzZWxlc3MgICUiIEdTVF9QVFJfRk9STUFULCBvdGhlcmNhcHMpOwotICAgIGdvdG8gZXJyb3JfY2xlYW51cDsKLSAgfQotbm9fdHJhbnNmb3JtX3Bvc3NpYmxlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCi0gICAgICAgICJ0cmFuc2Zvcm0gY291bGQgbm90IHRyYW5zZm9ybSAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgICAiIGluIGFueXRoaW5nIHdlIHN1cHBvcnQiLCBjYXBzKTsKLSAgICBnb3RvIGVycm9yX2NsZWFudXA7Ci0gIH0KLWNvdWxkX25vdF9maXhhdGU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIkZBSUxFRCB0byBmaXhhdGUgJSIgR1NUX1BUUl9GT1JNQVQsIG90aGVyY2Fwcyk7Ci0gICAgZ290byBlcnJvcl9jbGVhbnVwOwotICB9Ci1wZWVyX25vX2FjY2VwdDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiRkFJTEVEIHRvIGdldCBwZWVyIG9mICUiIEdTVF9QVFJfRk9STUFUCi0gICAgICAgICIgdG8gYWNjZXB0ICUiIEdTVF9QVFJfRk9STUFULCBvdGhlcnBhZCwgb3RoZXJjYXBzKTsKLSAgICBnb3RvIGVycm9yX2NsZWFudXA7Ci0gIH0KLWVycm9yX2NsZWFudXA6Ci0gIHsKLSAgICBpZiAob3RoZXJwZWVyKQotICAgICAgZ3N0X29iamVjdF91bnJlZiAob3RoZXJwZWVyKTsKLSAgICBpZiAob3RoZXJjYXBzKQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKG90aGVyY2Fwcyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fYWNjZXB0Y2Fwc19kZWZhdWx0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFBhZCAqcGFkLCAqb3RoZXJwYWQ7Ci0gIEdzdENhcHMgKnRlbXBsLCAqb3RlbXBsLCAqb2NhcHMgPSBOVUxMOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHBhZCA9Ci0gICAgICAoZGlyZWN0aW9uID09Ci0gICAgICBHU1RfUEFEX1NJTkspID8gR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEICh0cmFucykgOgotICAgICAgR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQgKHRyYW5zKTsKLSAgb3RoZXJwYWQgPQotICAgICAgKGRpcmVjdGlvbiA9PQotICAgICAgR1NUX1BBRF9TSU5LKSA/IEdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEICh0cmFucykgOgotICAgICAgR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEICh0cmFucyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhY2NlcHQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgb3RlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKG90aGVycGFkKTsKLQotICAvKiBnZXQgYWxsIHRoZSBmb3JtYXRzIHdlIGNhbiBoYW5kbGUgb24gdGhpcyBwYWQgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJpbnRlcnNlY3Qgd2l0aCBwYWQgdGVtcGxhdGU6ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgdGVtcGwpOwotICBpZiAoIWdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGNhcHMsIHRlbXBsKSkKLSAgICBnb3RvIHJlamVjdF9jYXBzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAidHJ5aW5nIHRvIHRyYW5zZm9ybSB3aXRoIGZpbHRlcjogJSIKLSAgICAgIEdTVF9QVFJfRk9STUFUICIgKHRoZSBvdGhlciBwYWQgdGVtcGxhdGUpIiwgb3RlbXBsKTsKLSAgb2NhcHMgPSBnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMgKHRyYW5zLCBkaXJlY3Rpb24sIGNhcHMsIG90ZW1wbCk7Ci0gIGlmICghb2NhcHMgfHwgZ3N0X2NhcHNfaXNfZW1wdHkgKG9jYXBzKSkKLSAgICBnb3RvIG5vX3RyYW5zZm9ybV9wb3NzaWJsZTsKLQotZG9uZToKLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJhY2NlcHQtY2FwcyByZXN1bHQ6ICVkIiwgcmV0KTsKLSAgaWYgKG9jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChvY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdGVtcGwpOwotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotcmVqZWN0X2NhcHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImNhcHMgY2FuJ3QgaW50ZXJzZWN0IHdpdGggdGhlIHRlbXBsYXRlIik7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci1ub190cmFuc2Zvcm1fcG9zc2libGU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKLSAgICAgICAgInRyYW5zZm9ybSBjb3VsZCBub3QgdHJhbnNmb3JtICUiIEdTVF9QVFJfRk9STUFUCi0gICAgICAgICIgaW4gYW55dGhpbmcgd2Ugc3VwcG9ydCIsIGNhcHMpOwotICAgIHJldCA9IEZBTFNFOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi0vKiBjYWxsZWQgd2hlbiBuZXcgY2FwcyBhcnJpdmUgb24gdGhlIHNpbmsgcGFkLAotICogV2UgdHJ5IHRvIGZpbmQgdGhlIGJlc3QgY2FwcyBmb3IgdGhlIG90aGVyIHNpZGUgdXNpbmcgb3VyIF9maW5kX3RyYW5zZm9ybSgpCi0gKiBmdW5jdGlvbi4gSWYgdGhlcmUgYXJlIGNhcHMsIHdlIGNvbmZpZ3VyZSB0aGUgdHJhbnNmb3JtIGZvciB0aGlzIG5ldwotICogdHJhbnNmb3JtYXRpb24uCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldGNhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0UGFkICogcGFkLAotICAgIEdzdENhcHMgKiBpbmNhcHMpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0gIEdzdENhcHMgKm91dGNhcHMsICpwcmV2X2luY2FwcyA9IE5VTEwsICpwcmV2X291dGNhcHMgPSBOVUxMOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImhhdmUgbmV3IGNhcHMgJXAgJSIgR1NUX1BUUl9GT1JNQVQsIGluY2FwcywgaW5jYXBzKTsKLQotICAvKiBmaW5kIGJlc3QgcG9zc2libGUgY2FwcyBmb3IgdGhlIG90aGVyIHBhZCAqLwotICBvdXRjYXBzID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX2ZpbmRfdHJhbnNmb3JtICh0cmFucywgcGFkLCBpbmNhcHMpOwotICBpZiAoIW91dGNhcHMgfHwgZ3N0X2NhcHNfaXNfZW1wdHkgKG91dGNhcHMpKQotICAgIGdvdG8gbm9fdHJhbnNmb3JtX3Bvc3NpYmxlOwotCi0gIC8qIGNvbmZpZ3VyZSB0aGUgZWxlbWVudCBub3cgKi8KLQotICAvKiBpZiB3ZSBoYXZlIHRoZSBzYW1lIGNhcHMsIHdlIGNhbiBvcHRpbWl6ZSBhbmQgcmV1c2UgdGhlIGlucHV0IGNhcHMgKi8KLSAgaWYgKGdzdF9jYXBzX2lzX2VxdWFsIChpbmNhcHMsIG91dGNhcHMpKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUICh0cmFucywgInJldXNlIGNhcHMiKTsKLSAgICBnc3RfY2Fwc191bnJlZiAob3V0Y2Fwcyk7Ci0gICAgb3V0Y2FwcyA9IGdzdF9jYXBzX3JlZiAoaW5jYXBzKTsKLSAgfQotCi0gIHByZXZfaW5jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICh0cmFucy0+c2lua3BhZCk7Ci0gIHByZXZfb3V0Y2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAodHJhbnMtPnNyY3BhZCk7Ci0gIGlmIChwcmV2X2luY2FwcyAmJiBwcmV2X291dGNhcHMgJiYgZ3N0X2NhcHNfaXNfZXF1YWwgKHByZXZfaW5jYXBzLCBpbmNhcHMpCi0gICAgICAmJiBnc3RfY2Fwc19pc19lcXVhbCAocHJldl9vdXRjYXBzLCBvdXRjYXBzKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAotICAgICAgICAiTmV3IGNhcHMgZXF1YWwgdG8gb2xkIG9uZXM6ICUiIEdTVF9QVFJfRk9STUFUICIgLT4gJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIGluY2Fwcywgb3V0Y2Fwcyk7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICAvKiBjYWxsIGNvbmZpZ3VyZSBub3cgKi8KLSAgICBpZiAoIShyZXQgPSBnc3RfYmFzZV90cmFuc2Zvcm1fY29uZmlndXJlX2NhcHMgKHRyYW5zLCBpbmNhcHMsIG91dGNhcHMpKSkKLSAgICAgIGdvdG8gZmFpbGVkX2NvbmZpZ3VyZTsKLQotICAgIGlmICghcHJldl9vdXRjYXBzIHx8ICFnc3RfY2Fwc19pc19lcXVhbCAob3V0Y2FwcywgcHJldl9vdXRjYXBzKSkKLSAgICAgIC8qIGxldCBkb3duc3RyZWFtIGtub3cgYWJvdXQgb3VyIGNhcHMgKi8KLSAgICAgIHJldCA9IGdzdF9wYWRfc2V0X2NhcHMgKHRyYW5zLT5zcmNwYWQsIG91dGNhcHMpOwotICB9Ci0KLSAgaWYgKHJldCkgewotICAgIC8qIHRyeSB0byBnZXQgYSBwb29sIHdoZW4gbmVlZGVkICovCi0gICAgcmV0ID0gZ3N0X2Jhc2VfdHJhbnNmb3JtX2RvX2J1ZmZlcnBvb2wgKHRyYW5zLCBvdXRjYXBzKTsKLSAgfQotCi1kb25lOgotICBpZiAob3V0Y2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAob3V0Y2Fwcyk7Ci0gIGlmIChwcmV2X2luY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAocHJldl9pbmNhcHMpOwotICBpZiAocHJldl9vdXRjYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChwcmV2X291dGNhcHMpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodHJhbnMpOwotICBwcml2LT5uZWdvdGlhdGVkID0gcmV0OwotICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1ub190cmFuc2Zvcm1fcG9zc2libGU6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHRyYW5zLAotICAgICAgICAidHJhbnNmb3JtIGNvdWxkIG5vdCB0cmFuc2Zvcm0gJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICAgIiBpbiBhbnl0aGluZyB3ZSBzdXBwb3J0IiwgaW5jYXBzKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLWZhaWxlZF9jb25maWd1cmU6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHRyYW5zLCAiRkFJTEVEIHRvIGNvbmZpZ3VyZSBpbmNhcHMgJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICAgIiBhbmQgb3V0Y2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzLCBvdXRjYXBzKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fZGVmYXVsdF9wcm9wb3NlX2FsbG9jYXRpb24gKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RRdWVyeSAqIGRlY2lkZV9xdWVyeSwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGlmIChkZWNpZGVfcXVlcnkgPT0gTlVMTCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZG9pbmcgcGFzc3Rocm91Z2ggcXVlcnkiKTsKLSAgICByZXQgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHRyYW5zLT5zcmNwYWQsIHF1ZXJ5KTsKLSAgfSBlbHNlIHsKLSAgICBndWludCBpLCBuX21ldGFzOwotICAgIC8qIG5vbi1wYXNzdGhyb3VnaCwgY29weSBhbGwgbWV0YWRhdGEsIGRlY2lkZV9xdWVyeSBkb2VzIG5vdCBjb250YWluIHRoZQotICAgICAqIG1ldGFkYXRhIGFueW1vcmUgdGhhdCBkZXBlbmRzIG9uIHRoZSBidWZmZXIgbWVtb3J5ICovCi0gICAgbl9tZXRhcyA9IGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX21ldGFzIChkZWNpZGVfcXVlcnkpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuX21ldGFzOyBpKyspIHsKLSAgICAgIEdUeXBlIGFwaTsKLSAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcGFyYW1zOwotCi0gICAgICBhcGkgPSBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fbWV0YSAoZGVjaWRlX3F1ZXJ5LCBpLCAmcGFyYW1zKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAicHJvcG9zaW5nIG1ldGFkYXRhICVzIiwgZ190eXBlX25hbWUgKGFwaSkpOwotICAgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEgKHF1ZXJ5LCBhcGksIHBhcmFtcyk7Ci0gICAgfQotICAgIHJldCA9IFRSVUU7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgZ2Jvb2xlYW4gcmVjb25maWd1cmUsIHJldCA9IFRSVUU7Ci0KLSAgcmVjb25maWd1cmUgPSBnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlICh0cmFucy0+c3JjcGFkKTsKLQotICBpZiAoR19VTkxJS0VMWSAocmVjb25maWd1cmUpKSB7Ci0gICAgR3N0Q2FwcyAqaW5jYXBzOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ3ZSBoYWQgYSBwZW5kaW5nIHJlY29uZmlndXJlIik7Ci0KLSAgICBpbmNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHRyYW5zLT5zaW5rcGFkKTsKLSAgICBpZiAoaW5jYXBzID09IE5VTEwpCi0gICAgICBnb3RvIGRvbmU7Ci0KLSAgICAvKiBpZiB3ZSBuZWVkIHRvIHJlY29uZmlndXJlIHdlIHByZXRlbmQgbmV3IGNhcHMgYXJyaXZlZC4gVGhpcwotICAgICAqIHdpbGwgcmVjb25maWd1cmUgdGhlIHRyYW5zZm9ybSB3aXRoIHRoZSBuZXcgb3V0cHV0IGZvcm1hdC4gKi8KLSAgICBpZiAoIWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRjYXBzICh0cmFucywgdHJhbnMtPnNpbmtwYWQsIGluY2FwcykpIHsKLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHRyYW5zLCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgICAoIm5vdCBuZWdvdGlhdGVkIiksICgibm90IG5lZ290aWF0ZWQiKSk7Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAoaW5jYXBzKTsKLSAgfQotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3RyYW5zZm9ybV9kZWZhdWx0X3F1ZXJ5IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdFBhZCAqcGFkLCAqb3RoZXJwYWQ7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0KLSAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykgewotICAgIHBhZCA9IHRyYW5zLT5zcmNwYWQ7Ci0gICAgb3RoZXJwYWQgPSB0cmFucy0+c2lua3BhZDsKLSAgfSBlbHNlIHsKLSAgICBwYWQgPSB0cmFucy0+c2lua3BhZDsKLSAgICBvdGhlcnBhZCA9IHRyYW5zLT5zcmNwYWQ7Ci0gIH0KLQotICBrbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9BTExPQ0FUSU9OOgotICAgIHsKLSAgICAgIEdzdFF1ZXJ5ICpkZWNpZGVfcXVlcnkgPSBOVUxMOwotCi0gICAgICAvKiBjYW4gb25seSBiZSBkb25lIG9uIHRoZSBzaW5rcGFkICovCi0gICAgICBpZiAoZGlyZWN0aW9uICE9IEdTVF9QQURfU0lOSykKLSAgICAgICAgZ290byBkb25lOwotCi0gICAgICByZXQgPSBnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmUgKHRyYW5zKTsKLSAgICAgIGlmIChHX1VOTElLRUxZICghcmV0KSkKLSAgICAgICAgZ290byBkb25lOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKLSAgICAgIGlmICghcHJpdi0+bmVnb3RpYXRlZCAmJiAhcHJpdi0+cGFzc3Rocm91Z2ggJiYgKGtsYXNzLT5zZXRfY2FwcyAhPSBOVUxMKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKLSAgICAgICAgICAgICJub3QgbmVnb3RpYXRlZCB5ZXQgYnV0IG5lZWQgbmVnb3RpYXRpb24sIGNhbid0IGFuc3dlciBBTExPQ0FUSU9OIHF1ZXJ5Iik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLQotICAgICAgZGVjaWRlX3F1ZXJ5ID0gdHJhbnMtPnByaXYtPnF1ZXJ5OwotICAgICAgdHJhbnMtPnByaXYtPnF1ZXJ5ID0gTlVMTDsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAotICAgICAgICAgICJjYWxsaW5nIHByb3Bvc2UgYWxsb2NhdGlvbiB3aXRoIHF1ZXJ5ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgIGRlY2lkZV9xdWVyeSk7Ci0KLSAgICAgIC8qIHBhc3MgdGhlIHF1ZXJ5IHRvIHRoZSBwcm9wb3NlX2FsbG9jYXRpb24gdm1ldGhvZCBpZiBhbnkgKi8KLSAgICAgIGlmIChHX0xJS0VMWSAoa2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbikpCi0gICAgICAgIHJldCA9IGtsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gKHRyYW5zLCBkZWNpZGVfcXVlcnksIHF1ZXJ5KTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0KLSAgICAgIGlmIChkZWNpZGVfcXVlcnkpIHsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7Ci0KLSAgICAgICAgaWYgKHRyYW5zLT5wcml2LT5xdWVyeSA9PSBOVUxMKQotICAgICAgICAgIHRyYW5zLT5wcml2LT5xdWVyeSA9IGRlY2lkZV9xdWVyeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGdzdF9xdWVyeV91bnJlZiAoZGVjaWRlX3F1ZXJ5KTsKLQotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOwotICAgICAgfQotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIkFMTE9DQVRJT04gcmV0ICVkLCAlIiBHU1RfUFRSX0ZPUk1BVCwgcmV0LAotICAgICAgICAgIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLSAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FICYmIHRyYW5zLT5zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgZ2ludDY0IHBvczsKLSAgICAgICAgcmV0ID0gVFJVRTsKLQotICAgICAgICBpZiAoKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkspCi0gICAgICAgICAgICB8fCAodHJhbnMtPnByaXYtPnBvc2l0aW9uX291dCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKSkgewotICAgICAgICAgIHBvcyA9Ci0gICAgICAgICAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmdHJhbnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgdHJhbnMtPnNlZ21lbnQucG9zaXRpb24pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHBvcyA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmdHJhbnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgdHJhbnMtPnByaXYtPnBvc2l0aW9uX291dCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAocXVlcnksIGZvcm1hdCwgcG9zKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IGdzdF9wYWRfcGVlcl9xdWVyeSAob3RoZXJwYWQsIHF1ZXJ5KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHMgKHF1ZXJ5LCAmY2Fwcyk7Ci0gICAgICBpZiAoa2xhc3MtPmFjY2VwdF9jYXBzKSB7Ci0gICAgICAgIHJldCA9IGtsYXNzLT5hY2NlcHRfY2FwcyAodHJhbnMsIGRpcmVjdGlvbiwgY2Fwcyk7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfYWNjZXB0X2NhcHNfcmVzdWx0IChxdWVyeSwgcmV0KTsKLSAgICAgICAgLyogcmV0dXJuIFRSVUUsIHdlIGFuc3dlcmVkIHRoZSBxdWVyeSAqLwotICAgICAgICByZXQgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqZmlsdGVyLCAqY2FwczsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICAgIGNhcHMgPSBnc3RfYmFzZV90cmFuc2Zvcm1fcXVlcnlfY2FwcyAodHJhbnMsIHBhZCwgZmlsdGVyKTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBjYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfcGVlcl9xdWVyeSAob3RoZXJwYWQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLWRvbmU6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnM7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmNsYXNzOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICB0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAocGFyZW50KTsKLSAgYmNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotCi0gIGlmIChiY2xhc3MtPnF1ZXJ5KQotICAgIHJldCA9IGJjbGFzcy0+cXVlcnkgKHRyYW5zLCBHU1RfUEFEX0RJUkVDVElPTiAocGFkKSwgcXVlcnkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIHRoaXMgZnVuY3Rpb24gZWl0aGVyIHJldHVybnMgdGhlIGlucHV0IGJ1ZmZlciB3aXRob3V0IGluY3JlbWVudGluZyB0aGUKLSAqIHJlZmNvdW50IG9yIGl0IGFsbG9jYXRlcyBhIG5ldyAod3JpdGFibGUpIGJ1ZmZlciAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWRlZmF1bHRfcHJlcGFyZV9vdXRwdXRfYnVmZmVyIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogaW5idWYsIEdzdEJ1ZmZlciAqKiBvdXRidWYpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiY2xhc3M7Ci0gIEdzdENhcHMgKmluY2FwcywgKm91dGNhcHM7Ci0gIGdzaXplIGluc2l6ZSwgb3V0c2l6ZTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHByaXYgPSB0cmFucy0+cHJpdjsKLSAgYmNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotCi0gIC8qIGZpZ3VyZSBvdXQgaG93IHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgKi8KLSAgaWYgKHByaXYtPnBhc3N0aHJvdWdoKSB7Ci0gICAgLyogcGFzc3Rocm91Z2gsIHdlIHdpbGwgbm90IG1vZGlmeSB0aGUgaW5jb21pbmcgYnVmZmVyIHNvIHdlIGNhbiBqdXN0Ci0gICAgICogcmV1c2UgaXQgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInBhc3N0aHJvdWdoOiByZXVzaW5nIGlucHV0IGJ1ZmZlciIpOwotICAgICpvdXRidWYgPSBpbmJ1ZjsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICAvKiB3ZSBjYW4ndCByZXVzZSB0aGUgaW5wdXQgYnVmZmVyICovCi0gIGlmIChwcml2LT5wb29sKSB7Ci0gICAgaWYgKCFwcml2LT5wb29sX2FjdGl2ZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzZXR0aW5nIHBvb2wgJXAgYWN0aXZlIiwgcHJpdi0+cG9vbCk7Ci0gICAgICBpZiAoIWdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwcml2LT5wb29sLCBUUlVFKSkKLSAgICAgICAgZ290byBhY3RpdmF0ZV9mYWlsZWQ7Ci0gICAgICBwcml2LT5wb29sX2FjdGl2ZSA9IFRSVUU7Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAidXNpbmcgcG9vbCBhbGxvYyIpOwotICAgIHJldCA9IGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAocHJpdi0+cG9vbCwgb3V0YnVmLCBOVUxMKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBhbGxvY19mYWlsZWQ7Ci0KLSAgICBnb3RvIGNvcHlfbWV0YTsKLSAgfQotCi0gIC8qIG5vIHBvb2wsIHdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBmaXJzdCAqLwotICBpZiAoKGJjbGFzcy0+dHJhbnNmb3JtX2lwICE9IE5VTEwpICYmIHByaXYtPmFsd2F5c19pbl9wbGFjZSkgewotICAgIC8qIHdlIHdhbnQgdG8gZG8gYW4gaW4tcGxhY2UgYWxsb2MgKi8KLSAgICBpZiAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoaW5idWYpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImlucGxhY2UgcmV1c2Ugd3JpdGFibGUgaW5wdXQgYnVmZmVyIik7Ci0gICAgICAqb3V0YnVmID0gaW5idWY7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAibWFraW5nIHdyaXRhYmxlIGJ1ZmZlciBjb3B5Iik7Ci0gICAgICAvKiB3ZSBtYWtlIGEgY29weSBvZiB0aGUgaW5wdXQgYnVmZmVyICovCi0gICAgICAqb3V0YnVmID0gZ3N0X2J1ZmZlcl9jb3B5IChpbmJ1Zik7Ci0gICAgfQotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIGVsc2UgdXNlIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gZ2V0IHRoZSBzaXplICovCi0gIGluY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAodHJhbnMtPnNpbmtwYWQpOwotICBvdXRjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICh0cmFucy0+c3JjcGFkKTsKLQotICAvKiBzcmNwYWQgbWlnaHQgYmUgZmx1c2hpbmcgYWxyZWFkeSBpZiB3ZSdyZSBiZWluZyBzaHV0IGRvd24gKi8KLSAgaWYgKG91dGNhcHMgPT0gTlVMTCkKLSAgICBnb3RvIG5vX291dGNhcHM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJnZXR0aW5nIG91dHB1dCBzaXplIGZvciBhbGxvYyIpOwotICAvKiBjb3B5IHRyYW5zZm9ybSwgZmlndXJlIG91dCB0aGUgb3V0cHV0IHNpemUgKi8KLSAgaW5zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW5idWYpOwotICByZXMgPSBnc3RfYmFzZV90cmFuc2Zvcm1fdHJhbnNmb3JtX3NpemUgKHRyYW5zLAotICAgICAgR1NUX1BBRF9TSU5LLCBpbmNhcHMsIGluc2l6ZSwgb3V0Y2FwcywgJm91dHNpemUpOwotCi0gIGdzdF9jYXBzX3VucmVmIChpbmNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAob3V0Y2Fwcyk7Ci0KLSAgaWYgKCFyZXMpCi0gICAgZ290byB1bmtub3duX3NpemU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJkb2luZyBhbGxvYyBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULCBvdXRzaXplKTsKLSAgKm91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChwcml2LT5hbGxvY2F0b3IsIG91dHNpemUsICZwcml2LT5wYXJhbXMpOwotICBpZiAoISpvdXRidWYpIHsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGFsbG9jX2ZhaWxlZDsKLSAgfQotCi1jb3B5X21ldGE6Ci0gIC8qIGNvcHkgdGhlIG1ldGFkYXRhICovCi0gIGlmIChiY2xhc3MtPmNvcHlfbWV0YWRhdGEpCi0gICAgaWYgKCFiY2xhc3MtPmNvcHlfbWV0YWRhdGEgKHRyYW5zLCBpbmJ1ZiwgKm91dGJ1ZikpIHsKLSAgICAgIC8qIHNvbWV0aGluZyBmYWlsZWQsIHBvc3QgYSB3YXJuaW5nICovCi0gICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HICh0cmFucywgU1RSRUFNLCBOT1RfSU1QTEVNRU5URUQsCi0gICAgICAgICAgKCJjb3VsZCBub3QgY29weSBtZXRhZGF0YSIpLCAoTlVMTCkpOwotICAgIH0KLQotZG9uZToKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotYWN0aXZhdGVfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHRyYW5zLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgICgiZmFpbGVkIHRvIGFjdGl2YXRlIGJ1ZmZlcnBvb2wiKSwgKCJmYWlsZWQgdG8gYWN0aXZhdGUgYnVmZmVycG9vbCIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXVua25vd25fc2l6ZToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHRyYW5zLCAidW5rbm93biBvdXRwdXQgc2l6ZSIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotYWxsb2NfZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJjb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyIGZyb20gcG9vbCIpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLW5vX291dGNhcHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIm5vIG91dHB1dCBjYXBzLCBzb3VyY2UgcGFkIGhhcyBiZWVuIGRlYWN0aXZhdGVkIik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLX0gQ29weU1ldGFEYXRhOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcmVhY2hfbWV0YWRhdGEgKEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RNZXRhICoqIG1ldGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgQ29weU1ldGFEYXRhICpkYXRhID0gdXNlcl9kYXRhOwotICBHc3RCYXNlVHJhbnNmb3JtICp0cmFucyA9IGRhdGEtPnRyYW5zOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmtsYXNzOwotICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9ICgqbWV0YSktPmluZm87Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gZGF0YS0+b3V0YnVmOwotICBnYm9vbGVhbiBkb19jb3B5ID0gRkFMU0U7Ci0KLSAga2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7Ci0KLSAgaWYgKGdzdF9tZXRhX2FwaV90eXBlX2hhc190YWcgKGluZm8tPmFwaSwgX2dzdF9tZXRhX3RhZ19tZW1vcnkpKSB7Ci0gICAgLyogbmV2ZXIgY2FsbCB0aGUgdHJhbnNmb3JtX21ldGEgd2l0aCBtZW1vcnkgc3BlY2lmaWMgbWV0YWRhdGEgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIm5vdCBjb3B5aW5nIG1lbW9yeSBzcGVjaWZpYyBtZXRhZGF0YSAlcyIsCi0gICAgICAgIGdfdHlwZV9uYW1lIChpbmZvLT5hcGkpKTsKLSAgICBkb19jb3B5ID0gRkFMU0U7Ci0gIH0gZWxzZSBpZiAoa2xhc3MtPnRyYW5zZm9ybV9tZXRhKSB7Ci0gICAgZG9fY29weSA9IGtsYXNzLT50cmFuc2Zvcm1fbWV0YSAodHJhbnMsIG91dGJ1ZiwgKm1ldGEsIGluYnVmKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInRyYW5zZm9ybWVkIG1ldGFkYXRhICVzOiBjb3B5OiAlZCIsCi0gICAgICAgIGdfdHlwZV9uYW1lIChpbmZvLT5hcGkpLCBkb19jb3B5KTsKLSAgfQotCi0gIC8qIHdlIG9ubHkgY29weSBtZXRhZGF0YSB3aGVuIHRoZSBzdWJjbGFzcyBpbXBsZW1lbnRlZCBhIHRyYW5zZm9ybV9tZXRhCi0gICAqIGZ1bmN0aW9uIGFuZCB3aGVuIGl0IHJldHVybnMgJVRSVUUgKi8KLSAgaWYgKGRvX2NvcHkpIHsKLSAgICBHc3RNZXRhVHJhbnNmb3JtQ29weSBjb3B5X2RhdGEgPSB7IEZBTFNFLCAwLCAtMSB9OwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiY29weSBtZXRhZGF0YSAlcyIsIGdfdHlwZV9uYW1lIChpbmZvLT5hcGkpKTsKLSAgICAvKiBzaW1wbHkgY29weSB0aGVuICovCi0gICAgaW5mby0+dHJhbnNmb3JtX2Z1bmMgKG91dGJ1ZiwgKm1ldGEsIGluYnVmLAotICAgICAgICBfZ3N0X21ldGFfdHJhbnNmb3JtX2NvcHksICZjb3B5X2RhdGEpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRlZmF1bHRfY29weV9tZXRhZGF0YSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RCdWZmZXIgKiBvdXRidWYpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0gIENvcHlNZXRhRGF0YSBkYXRhOwotCi0gIC8qIG5vdyBjb3B5IHRoZSBtZXRhZGF0YSAqLwotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImNvcHlpbmcgbWV0YWRhdGEiKTsKLQotICAvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBidWZmZXJzIGFsbG9jYXRlZCBmcm9tIGEgcG9vbCBvciB3aXRoCi0gICAqIG5ld19hbGxvY2F0ZSBzaG91bGQgYWx3YXlzIGJlIHdyaXRhYmxlLiAqLwotICBpZiAoIWdzdF9idWZmZXJfaXNfd3JpdGFibGUgKG91dGJ1ZikpCi0gICAgZ290byBub3Rfd3JpdGFibGU7Ci0KLSAgLyogd2hlbiB3ZSBnZXQgaGVyZSwgdGhlIG1ldGFkYXRhIHNob3VsZCBiZSB3cml0YWJsZSAqLwotICBnc3RfYnVmZmVyX2NvcHlfaW50byAob3V0YnVmLCBpbmJ1ZiwKLSAgICAgIEdTVF9CVUZGRVJfQ09QWV9GTEFHUyB8IEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTLCAwLCAtMSk7Ci0KLSAgLyogY2xlYXIgdGhlIEdBUCBmbGFnIHdoZW4gdGhlIHN1YmNsYXNzIGRvZXMgbm90IHVuZGVyc3RhbmQgaXQgKi8KLSAgaWYgKCFwcml2LT5nYXBfYXdhcmUpCi0gICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19HQVApOwotCi0KLSAgZGF0YS50cmFucyA9IHRyYW5zOwotICBkYXRhLm91dGJ1ZiA9IG91dGJ1ZjsKLQotICBnc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YSAoaW5idWYsIGZvcmVhY2hfbWV0YWRhdGEsICZkYXRhKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF93cml0YWJsZToKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodHJhbnMsICJidWZmZXIgJXAgbm90IHdyaXRhYmxlIiwgb3V0YnVmKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogR2l2ZW4gQGNhcHMgY2FsY3VsdGF0ZSB0aGUgc2l6ZSBvZiBvbmUgdW5pdC4KLSAqCi0gKiBGb3IgdmlkZW8gY2FwcywgdGhpcyBpcyB0aGUgc2l6ZSBvZiBvbmUgZnJhbWUgKGFuZCB0aHVzIG9uZSBidWZmZXIpLgotICogRm9yIGF1ZGlvIGNhcHMsIHRoaXMgaXMgdGhlIHNpemUgb2Ygb25lIHNhbXBsZS4KLSAqCi0gKiBUaGVzZSB2YWx1ZXMgYXJlIGNhY2hlZCBzaW5jZSB0aGV5IGRvIG5vdCBjaGFuZ2UgYW5kIHRoZSBjYWxjdWxhdGlvbgotICogcG90ZW50aWFsbHkgaW52b2x2ZXMgcGFyc2luZyBjYXBzIGFuZCBvdGhlciBleHBlbnNpdmUgc3R1ZmYuCi0gKgotICogV2UgaGF2ZSB0d28gY2FjaGUgbG9jYXRpb25zIHRvIHN0b3JlIHRoZSBzaXplLCBvbmUgZm9yIHRoZSBzb3VyY2UgY2FwcwotICogYW5kIG9uZSBmb3IgdGhlIHNpbmsgY2Fwcy4KLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgJUZBTFNFIGlmIG5vIHNpemUgY291bGQgYmUgY2FsY3VsYXRlZC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fZ2V0X3VuaXRfc2l6ZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RDYXBzICogY2FwcywKLSAgICBnc2l6ZSAqIHNpemUpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJjbGFzczsKLSAgR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUgKnByaXYgPSB0cmFucy0+cHJpdjsKLQotICAvKiBzZWUgaWYgd2UgaGF2ZSB0aGUgcmVzdWx0IGNhY2hlZCAqLwotICBpZiAocHJpdi0+Y2FjaGVfY2FwczEgPT0gY2FwcykgewotICAgICpzaXplID0gcHJpdi0+Y2FjaGVfY2FwczFfc2l6ZTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKLSAgICAgICAgInJldHVybmVkICUiIEdfR1NJWkVfRk9STUFUICIgZnJvbSBmaXJzdCBjYWNoZSIsICpzaXplKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICBpZiAocHJpdi0+Y2FjaGVfY2FwczIgPT0gY2FwcykgewotICAgICpzaXplID0gcHJpdi0+Y2FjaGVfY2FwczJfc2l6ZTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKLSAgICAgICAgInJldHVybmVkICUiIEdfR1NJWkVfRk9STUFUICIgZnJvbSBzZWNvbmQgY2FjaGVkIiwgKnNpemUpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotICByZXMgPSBiY2xhc3MtPmdldF91bml0X3NpemUgKHRyYW5zLCBjYXBzLCBzaXplKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCi0gICAgICAiY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiKSBoYXMgdW5pdCBzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIHJlcyAlcyIsCi0gICAgICBjYXBzLCAqc2l6ZSwgcmVzID8gIlRSVUUiIDogIkZBTFNFIik7Ci0KLSAgaWYgKHJlcykgewotICAgIC8qIGFuZCBjYWNoZSB0aGUgdmFsdWVzICovCi0gICAgaWYgKHByaXYtPmNhY2hlX2NhcHMxID09IE5VTEwpIHsKLSAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZwcml2LT5jYWNoZV9jYXBzMSwgY2Fwcyk7Ci0gICAgICBwcml2LT5jYWNoZV9jYXBzMV9zaXplID0gKnNpemU7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKLSAgICAgICAgICAiY2FjaGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGluIGZpcnN0IGNhY2hlIiwgKnNpemUpOwotICAgIH0gZWxzZSBpZiAocHJpdi0+Y2FjaGVfY2FwczIgPT0gTlVMTCkgewotICAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnByaXYtPmNhY2hlX2NhcHMyLCBjYXBzKTsKLSAgICAgIHByaXYtPmNhY2hlX2NhcHMyX3NpemUgPSAqc2l6ZTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAotICAgICAgICAgICJjYWNoaW5nICUiIEdfR1NJWkVfRk9STUFUICIgaW4gc2Vjb25kIGNhY2hlIiwgKnNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIm5vIGZyZWUgc3BvdCB0byBjYWNoZSB1bml0X3NpemUiKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnM7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmNsYXNzOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChwYXJlbnQpOwotICBiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7Ci0KLSAgaWYgKGJjbGFzcy0+c2lua19ldmVudCkKLSAgICByZXQgPSBiY2xhc3MtPnNpbmtfZXZlbnQgKHRyYW5zLCBldmVudCk7Ci0gIGVsc2UKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9iYXNlX3RyYW5zZm9ybV9zaW5rX2V2ZW50ZnVuYyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXQgPSBUUlVFLCBmb3J3YXJkID0gVFJVRTsKLSAgR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUgKnByaXYgPSB0cmFucy0+cHJpdjsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKLSAgICAgIC8qIHJlc2V0IFFvUyBwYXJhbWV0ZXJzICovCi0gICAgICBwcml2LT5wcm9wb3J0aW9uID0gMS4wOwotICAgICAgcHJpdi0+ZWFybGllc3RfdGltZSA9IC0xOwotICAgICAgcHJpdi0+ZGlzY29udCA9IEZBTFNFOwotICAgICAgcHJpdi0+cHJvY2Vzc2VkID0gMDsKLSAgICAgIHByaXYtPmRyb3BwZWQgPSAwOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zKTsKLSAgICAgIC8qIHdlIG5lZWQgbmV3IHNlZ21lbnQgaW5mbyBhZnRlciB0aGUgZmx1c2guICovCi0gICAgICB0cmFucy0+aGF2ZV9zZWdtZW50ID0gRkFMU0U7Ci0gICAgICBnc3Rfc2VnbWVudF9pbml0ICgmdHJhbnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIHByaXYtPnBvc2l0aW9uX291dCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9UQUc6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgLyogY2xlYXIgYW55IHBlbmRpbmcgcmVjb25maWd1cmUgZmxhZyAqLwotICAgICAgZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAodHJhbnMtPnNyY3BhZCk7Ci0gICAgICByZXQgPSBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0Y2FwcyAodHJhbnMsIHRyYW5zLT5zaW5rcGFkLCBjYXBzKTsKLQotICAgICAgZm9yd2FyZCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZ0cmFucy0+c2VnbWVudCk7Ci0gICAgICB0cmFucy0+aGF2ZV9zZWdtZW50ID0gVFJVRTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJyZWNlaXZlZCBTRUdNRU5UICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICAgICAmdHJhbnMtPnNlZ21lbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChyZXQgJiYgZm9yd2FyZCkKLSAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zcmNwYWQsIGV2ZW50KTsKLSAgZWxzZQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnM7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmNsYXNzOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChwYXJlbnQpOwotICBiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7Ci0KLSAgaWYgKGJjbGFzcy0+c3JjX2V2ZW50KQotICAgIHJldCA9IGJjbGFzcy0+c3JjX2V2ZW50ICh0cmFucywgZXZlbnQpOwotICBlbHNlCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYmFzZV90cmFuc2Zvcm1fc3JjX2V2ZW50ZnVuYyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJoYW5kbGluZyBldmVudCAlcCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQsIGV2ZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfTkFWSUdBVElPTjoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1FPUzoKLSAgICB7Ci0gICAgICBnZG91YmxlIHByb3BvcnRpb247Ci0gICAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmY7Ci0gICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfcW9zIChldmVudCwgTlVMTCwgJnByb3BvcnRpb24sICZkaWZmLCAmdGltZXN0YW1wKTsKLSAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfcW9zICh0cmFucywgcHJvcG9ydGlvbiwgZGlmZiwgdGltZXN0YW1wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zaW5rcGFkLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogVGFrZXMgdGhlIGlucHV0IGJ1ZmZlciAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWRlZmF1bHRfc3VibWl0X2lucHV0X2J1ZmZlciAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBnYm9vbGVhbiBpc19kaXNjb250LAotICAgIEdzdEJ1ZmZlciAqIGluYnVmKQotewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJjbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKLSAgR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUgKnByaXYgPSB0cmFucy0+cHJpdjsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZSAodHJhbnMpKSkKLSAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOwotCi0gIGlmIChHU1RfQlVGRkVSX09GRlNFVF9JU19WQUxJRCAoaW5idWYpKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAotICAgICAgICAiaGFuZGxpbmcgYnVmZmVyICVwIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiwgUFRTICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiIGFuZCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgaW5idWYsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGluYnVmKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKGluYnVmKSksIEdTVF9CVUZGRVJfT0ZGU0VUIChpbmJ1ZikpOwotICBlbHNlCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsCi0gICAgICAgICJoYW5kbGluZyBidWZmZXIgJXAgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiLCBQVFMgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIgYW5kIG9mZnNldCBOT05FIiwgaW5idWYsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGluYnVmKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKGluYnVmKSkpOwotCi0gIC8qIERvbid0IGFsbG93IGJ1ZmZlciBoYW5kbGluZyBiZWZvcmUgbmVnb3RpYXRpb24sIGV4Y2VwdCBpbiBwYXNzdGhyb3VnaCBtb2RlCi0gICAqIG9yIGlmIHRoZSBjbGFzcyBkb2Vzbid0IGltcGxlbWVudCBhIHNldF9jYXBzIGZ1bmN0aW9uIChpbiB3aGljaCBjYXNlIGl0IGRvZXNuJ3QKLSAgICogY2FyZSBhYm91dCBjYXBzKQotICAgKi8KLSAgaWYgKCFwcml2LT5uZWdvdGlhdGVkICYmICFwcml2LT5wYXNzdGhyb3VnaCAmJiAoYmNsYXNzLT5zZXRfY2FwcyAhPSBOVUxMKSkKLSAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOwotCi0gIC8qIGNhbiBvbmx5IGRvIFFvUyBpZiB0aGUgc2VnbWVudCBpcyBpbiBUSU1FICovCi0gIGlmICh0cmFucy0+c2VnbWVudC5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKQotICAgIGdvdG8gbm9fcW9zOwotCi0gIC8qIFFPUyBpcyBkb25lIG9uIHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlIGJ1ZmZlciwgZ2V0IGl0IG5vdyAqLwotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWYpOwotICBydW5uaW5nX3RpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgdGltZXN0YW1wKTsKLQotICBpZiAocnVubmluZ190aW1lICE9IC0xKSB7Ci0gICAgZ2Jvb2xlYW4gbmVlZF9za2lwOwotICAgIEdzdENsb2NrVGltZSBlYXJsaWVzdF90aW1lOwotICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKLQotICAgIC8qIGxvY2sgZm9yIGdldHRpbmcgdGhlIFFvUyBwYXJhbWV0ZXJzIHRoYXQgYXJlIHNldCAoaW4gYSBkaWZmZXJlbnQgdGhyZWFkKQotICAgICAqIHdpdGggdGhlIFFPUyBldmVudHMgKi8KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKLSAgICBlYXJsaWVzdF90aW1lID0gcHJpdi0+ZWFybGllc3RfdGltZTsKLSAgICBwcm9wb3J0aW9uID0gcHJpdi0+cHJvcG9ydGlvbjsKLSAgICAvKiBjaGVjayBmb3IgUW9TLCBkb24ndCBwZXJmb3JtIGNvbnZlcnNpb24gZm9yIGJ1ZmZlcnMKLSAgICAgKiB0aGF0IGFyZSBrbm93biB0byBiZSBsYXRlLiAqLwotICAgIG5lZWRfc2tpcCA9IHByaXYtPnFvc19lbmFibGVkICYmCi0gICAgICAgIGVhcmxpZXN0X3RpbWUgIT0gLTEgJiYgcnVubmluZ190aW1lIDw9IGVhcmxpZXN0X3RpbWU7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zKTsKLQotICAgIGlmIChuZWVkX3NraXApIHsKLSAgICAgIEdzdE1lc3NhZ2UgKnFvc19tc2c7Ci0gICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0gICAgICBndWludDY0IHN0cmVhbV90aW1lOwotICAgICAgZ2ludDY0IGppdHRlcjsKLQotICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKEdTVF9DQVRfUU9TLCB0cmFucywgInNraXBwaW5nIHRyYW5zZm9ybTogcW9zdGltZSAlIgotICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIDw9ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChydW5uaW5nX3RpbWUpLCBHU1RfVElNRV9BUkdTIChlYXJsaWVzdF90aW1lKSk7Ci0KLSAgICAgIHByaXYtPmRyb3BwZWQrKzsKLQotICAgICAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChpbmJ1Zik7Ci0gICAgICBzdHJlYW1fdGltZSA9Ci0gICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIHRpbWVzdGFtcCk7Ci0gICAgICBqaXR0ZXIgPSBHU1RfQ0xPQ0tfRElGRiAocnVubmluZ190aW1lLCBlYXJsaWVzdF90aW1lKTsKLQotICAgICAgcW9zX21zZyA9Ci0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3FvcyAoR1NUX09CSkVDVF9DQVNUICh0cmFucyksIEZBTFNFLCBydW5uaW5nX3RpbWUsCi0gICAgICAgICAgc3RyZWFtX3RpbWUsIHRpbWVzdGFtcCwgZHVyYXRpb24pOwotICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3Fvc192YWx1ZXMgKHFvc19tc2csIGppdHRlciwgcHJvcG9ydGlvbiwgMTAwMDAwMCk7Ci0gICAgICBnc3RfbWVzc2FnZV9zZXRfcW9zX3N0YXRzIChxb3NfbXNnLCBHU1RfRk9STUFUX0JVRkZFUlMsCi0gICAgICAgICAgcHJpdi0+cHJvY2Vzc2VkLCBwcml2LT5kcm9wcGVkKTsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAodHJhbnMpLCBxb3NfbXNnKTsKLQotICAgICAgLyogbWFyayBkaXNjb250IGZvciBuZXh0IGJ1ZmZlciAqLwotICAgICAgcHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gICAgICByZXQgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEOwotICAgICAgZ290byBza2lwOwotICAgIH0KLSAgfQotCi1ub19xb3M6Ci0gIC8qIFN0YXNoIGlucHV0IGJ1ZmZlciB3aGVyZSB0aGUgZGVmYXVsdCBnZW5lcmF0ZV9vdXRwdXQKLSAgICogZnVuY3Rpb24gY2FuIGZpbmQgaXQgKi8KLSAgaWYgKHRyYW5zLT5xdWV1ZWRfYnVmKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHRyYW5zLT5xdWV1ZWRfYnVmKTsKLSAgdHJhbnMtPnF1ZXVlZF9idWYgPSBpbmJ1ZjsKLSAgcmV0dXJuIHJldDsKLXNraXA6Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGluYnVmKTsKLSAgcmV0dXJuIHJldDsKLQotbm90X25lZ290aWF0ZWQ6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7Ci0gICAgaWYgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHRyYW5zLT5zcmNwYWQpKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZGVmYXVsdF9nZW5lcmF0ZV9vdXRwdXQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICoqIG91dGJ1ZikKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucyk7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdEJ1ZmZlciAqaW5idWY7Ci0gIGdib29sZWFuIHdhbnRfaW5fcGxhY2U7Ci0KLSAgLyogUmV0cmlldmUgc3Rhc2hlZCBpbnB1dCBidWZmZXIsIGlmIHRoZSBkZWZhdWx0IHN1Ym1pdF9pbnB1dF9idWZmZXIKLSAgICogd2FzIHJ1bi4gVGFrZXMgb3duZXJzaGlwIGJhY2sgZnJvbSB0aGVyZSAqLwotICBpbmJ1ZiA9IHRyYW5zLT5xdWV1ZWRfYnVmOwotICB0cmFucy0+cXVldWVkX2J1ZiA9IE5VTEw7Ci0KLSAgLyogVGhpcyBkZWZhdWx0IHByb2Nlc3NpbmcgbWV0aG9kIG5lZWRzIG9uZSBpbnB1dCBidWZmZXIgdG8gZmVlZCB0bwotICAgKiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9ucywgd2UgY2FuJ3QgZG8gYW55dGhpbmcgd2l0aG91dCBpdCAqLwotICBpZiAoaW5idWYgPT0gTlVMTCkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogZmlyc3QgdHJ5IHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgYmFzZWQgb24gdGhlIGN1cnJlbnRseSBuZWdvdGlhdGVkCi0gICAqIGZvcm1hdC4gb3V0YnVmIHdpbGwgY29udGFpbiBhIGJ1ZmZlciBzdWl0YWJsZSBmb3IgZG9pbmcgdGhlIGNvbmZpZ3VyZWQKLSAgICogdHJhbnNmb3JtIGFmdGVyIHRoaXMgZnVuY3Rpb24uICovCi0gIGlmIChiY2xhc3MtPnByZXBhcmVfb3V0cHV0X2J1ZmZlciA9PSBOVUxMKQotICAgIGdvdG8gbm9fcHJlcGFyZTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImNhbGxpbmcgcHJlcGFyZSBidWZmZXIiKTsKLSAgcmV0ID0gYmNsYXNzLT5wcmVwYXJlX291dHB1dF9idWZmZXIgKHRyYW5zLCBpbmJ1Ziwgb3V0YnVmKTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LIHx8ICpvdXRidWYgPT0gTlVMTCkKLSAgICBnb3RvIG5vX2J1ZmZlcjsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInVzaW5nIGFsbG9jYXRlZCBidWZmZXIgaW4gJXAsIG91dCAlcCIsIGluYnVmLAotICAgICAgKm91dGJ1Zik7Ci0KLSAgLyogbm93IHBlcmZvcm0gdGhlIG5lZWRlZCB0cmFuc2Zvcm0gKi8KLSAgaWYgKHByaXYtPnBhc3N0aHJvdWdoKSB7Ci0gICAgLyogSW4gcGFzc3Rocm91Z2ggbW9kZSwgZ2l2ZSB0cmFuc2Zvcm1faXAgYSBsb29rIGF0IHRoZQotICAgICAqIGJ1ZmZlciwgd2l0aG91dCBtYWtpbmcgaXQgd3JpdGFibGUsIG9yIGp1c3QgcHVzaCB0aGUKLSAgICAgKiBkYXRhIHRocm91Z2ggKi8KLSAgICBpZiAoYmNsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2ggJiYgYmNsYXNzLT50cmFuc2Zvcm1faXApIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZG9pbmcgcGFzc3Rocm91Z2ggdHJhbnNmb3JtX2lwIik7Ci0gICAgICByZXQgPSBiY2xhc3MtPnRyYW5zZm9ybV9pcCAodHJhbnMsICpvdXRidWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImVsZW1lbnQgaXMgaW4gcGFzc3Rocm91Z2giKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgd2FudF9pbl9wbGFjZSA9IChiY2xhc3MtPnRyYW5zZm9ybV9pcCAhPSBOVUxMKSAmJiBwcml2LT5hbHdheXNfaW5fcGxhY2U7Ci0KLSAgICBpZiAod2FudF9pbl9wbGFjZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJkb2luZyBpbnBsYWNlIHRyYW5zZm9ybSIpOwotICAgICAgcmV0ID0gYmNsYXNzLT50cmFuc2Zvcm1faXAgKHRyYW5zLCAqb3V0YnVmKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJkb2luZyBub24taW5wbGFjZSB0cmFuc2Zvcm0iKTsKLQotICAgICAgaWYgKGJjbGFzcy0+dHJhbnNmb3JtKQotICAgICAgICByZXQgPSBiY2xhc3MtPnRyYW5zZm9ybSAodHJhbnMsIGluYnVmLCAqb3V0YnVmKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKLSAgICB9Ci0gIH0KLQotICAvKiBvbmx5IHVucmVmIGlucHV0IGJ1ZmZlciBpZiB3ZSBhbGxvY2F0ZWQgYSBuZXcgb3V0YnVmIGJ1ZmZlci4gSWYgd2UgcmV1c2VkCi0gICAqIHRoZSBpbnB1dCBidWZmZXIsIG5vIHJlZmNvdW50IGlzIGNoYW5nZWQgdG8ga2VlcCB0aGUgaW5wdXQgYnVmZmVyIHdyaXRhYmxlCi0gICAqIHdoZW4gbmVlZGVkLiAqLwotICBpZiAoKm91dGJ1ZiAhPSBpbmJ1ZikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3ByZXBhcmU6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHRyYW5zLCBTVFJFQU0sIE5PVF9JTVBMRU1FTlRFRCwKLSAgICAgICAgKCJTdWItY2xhc3MgaGFzIG5vIHByZXBhcmVfb3V0cHV0X2J1ZmZlciBpbXBsZW1lbnRhdGlvbiIpLCAoTlVMTCkpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfU1VQUE9SVEVEOwotICB9Ci1ub19idWZmZXI6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7Ci0gICAgKm91dGJ1ZiA9IE5VTEw7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh0cmFucywgImNvdWxkIG5vdCBnZXQgYnVmZmVyIGZyb20gcG9vbDogJXMiLAotICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi0vKiBGSVhNRSwgZ2V0cmFuZ2UgaXMgYnJva2VuLCBuZWVkIHRvIHB1bGwgcmFuZ2UgZnJvbSB0aGUgb3RoZXIKLSAqIGVuZCBiYXNlZCBvbiB0aGUgdHJhbnNmb3JtX3NpemUgcmVzdWx0LgotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldHJhbmdlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKQotewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmtsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAocGFyZW50KTsKLSAgR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMgPSBHU1RfQkFTRV9UUkFOU0ZPUk0gKHBhcmVudCk7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXIgKmluYnVmID0gTlVMTDsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotCi0gIC8qIFRyeSBhbmQgZ2VuZXJhdGUgYSBidWZmZXIsIGlmIHRoZSBzdWItY2xhc3Mgd2FudHMgbW9yZSBkYXRhLAotICAgKiBwdWxsIHNvbWUgYW5kIHJlcGVhdCB1bnRpbCBhIGJ1ZmZlciAob3IgZXJyb3IpIGlzIHByb2R1Y2VkICovCi0gIGRvIHsKLSAgICByZXQgPSBrbGFzcy0+Z2VuZXJhdGVfb3V0cHV0ICh0cmFucywgJm91dGJ1Zik7Ci0KLSAgICAvKiBDb25zdW1lIHRoZSBEUk9QUEVEIHJldHVybiB2YWx1ZSBhbmQgZ28gZ2V0IG1vcmUgZGF0YSAqLwotICAgIGlmIChyZXQgPT0gR1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRCkKLSAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotCi0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyB8fCBvdXRidWYgIT0gTlVMTCkKLSAgICAgIGJyZWFrOwotCi0gICAgLyogTm8gYnVmZmVyIGdlbmVyYXRlZCwgdHJ5IGFuZCBwdWxsIGRhdGEgKi8KLSAgICByZXQgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKHRyYW5zLT5zaW5rcGFkLCBvZmZzZXQsIGxlbmd0aCwgJmluYnVmKTsKLSAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICAgIGdvdG8gcHVsbF9lcnJvcjsKLQotICAgIGlmIChrbGFzcy0+YmVmb3JlX3RyYW5zZm9ybSkKLSAgICAgIGtsYXNzLT5iZWZvcmVfdHJhbnNmb3JtICh0cmFucywgaW5idWYpOwotCi0gICAgLyogU2V0IGRpc2NvbnQgZmxhZyBzbyB3ZSBjYW4gbWFyayB0aGUgbmV4dCBvdXRnb2luZyBidWZmZXIgKi8KLSAgICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChpbmJ1ZikpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZ290IERJU0NPTlQgYnVmZmVyICVwIiwgaW5idWYpOwotICAgICAgcHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gICAgfQotCi0gICAgLyogRklYTUU6IElucHV0IG9mZnNldHMgYW5kIGxlbmd0aHMgbmVlZCB0byBiZSB0cmFuc2xhdGVkLCBhcyBwZXIKLSAgICAgKiB0aGUgRklYTUUgYWJvdmUuIEZvciBub3csIGp1c3QgYWR2YW5jZSBzb21ld2hhdCAqLwotICAgIG9mZnNldCArPSBnc3RfYnVmZmVyX2dldF9zaXplIChpbmJ1Zik7Ci0KLSAgICByZXQgPSBrbGFzcy0+c3VibWl0X2lucHV0X2J1ZmZlciAodHJhbnMsIHByaXYtPmRpc2NvbnQsIGluYnVmKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBpZiAocmV0ID09IEdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQpCi0gICAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgICAgZ290byBkb25lOwotICAgIH0KLSAgfSB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIG91dGJ1ZiA9PSBOVUxMKTsKLQotICAqYnVmZmVyID0gb3V0YnVmOwotICBpZiAob3V0YnVmKSB7Ci0gICAgLyogYXBwbHkgRElTQ09OVCBmbGFnIGlmIHRoZSBidWZmZXIgaXMgbm90IHlldCBtYXJrZWQgYXMgc3VjaCAqLwotICAgIGlmIChwcml2LT5kaXNjb250KSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIndlIGhhdmUgYSBwZW5kaW5nIERJU0NPTlQiKTsKLSAgICAgIGlmICghR1NUX0JVRkZFUl9JU19ESVNDT05UIChvdXRidWYpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAibWFya2luZyBESVNDT05UIG9uIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOwotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICAgIH0KLSAgICAgIHByaXYtPmRpc2NvbnQgPSBGQUxTRTsKLSAgICB9Ci0gICAgcHJpdi0+cHJvY2Vzc2VkKys7Ci0gIH0KLWRvbmU6Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1wdWxsX2Vycm9yOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJmYWlsZWQgdG8gcHVsbCBhIGJ1ZmZlcjogJXMiLAotICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLS8qIFRoZSBmbG93IG9mIHRoZSBjaGFpbiBmdW5jdGlvbiBpcyB0aGUgcmV2ZXJzZSBvZiB0aGUKLSAqIGdldHJhbmdlKCkgZnVuY3Rpb24gLSB3ZSBoYXZlIGRhdGEsIGZlZWQgaXQgdG8gdGhlIHN1Yi1jbGFzcwotICogYW5kIHRoZW4gaXRlcmF0ZSwgcHVzaGluZyBidWZmZXJzIGl0IGdlbmVyYXRlcyB1bnRpbCBpdCBlaXRoZXIKLSAqIHdhbnRzIG1vcmUgZGF0YSBvciByZXR1cm5zIGFuIGVycm9yICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RCYXNlVHJhbnNmb3JtICp0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAocGFyZW50KTsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICprbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHRyYW5zKTsKLSAgR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUgKnByaXYgPSB0cmFucy0+cHJpdjsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdENsb2NrVGltZSBwb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGR1cmF0aW9uOwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7Ci0gIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLQotICAvKiBjYWxjdWxhdGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBpbmNvbWluZyBidWZmZXIgKi8KLSAgaWYgKHRpbWVzdGFtcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgaWYgKGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICBwb3NpdGlvbiA9IHRpbWVzdGFtcCArIGR1cmF0aW9uOwotICAgIGVsc2UKLSAgICAgIHBvc2l0aW9uID0gdGltZXN0YW1wOwotICB9Ci0KLSAgaWYgKGtsYXNzLT5iZWZvcmVfdHJhbnNmb3JtKQotICAgIGtsYXNzLT5iZWZvcmVfdHJhbnNmb3JtICh0cmFucywgYnVmZmVyKTsKLQotICAvKiBTZXQgZGlzY29udCBmbGFnIHNvIHdlIGNhbiBtYXJrIHRoZSBvdXRnb2luZyBidWZmZXIgKi8KLSAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAoYnVmZmVyKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiZ290IERJU0NPTlQgYnVmZmVyICVwIiwgYnVmZmVyKTsKLSAgICBwcml2LT5kaXNjb250ID0gVFJVRTsKLSAgfQotCi0gIC8qIFRha2VzIG93bmVyc2hpcCBvZiBpbnB1dCBidWZmZXIgKi8KLSAgcmV0ID0ga2xhc3MtPnN1Ym1pdF9pbnB1dF9idWZmZXIgKHRyYW5zLCBwcml2LT5kaXNjb250LCBidWZmZXIpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gZG9uZTsKLQotICBkbyB7Ci0gICAgb3V0YnVmID0gTlVMTDsKLQotICAgIHJldCA9IGtsYXNzLT5nZW5lcmF0ZV9vdXRwdXQgKHRyYW5zLCAmb3V0YnVmKTsKLQotICAgIC8qIG91dGJ1ZiBjYW4gYmUgTlVMTCwgdGhpcyBtZWFucyBhIGRyb3BwZWQgYnVmZmVyLCBpZiB3ZSBoYXZlIGEgYnVmZmVyIGJ1dAotICAgICAqIEdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQgd2Ugd2lsbCBub3QgcHVzaCBlaXRoZXIuICovCi0gICAgaWYgKG91dGJ1ZiAhPSBOVUxMKSB7Ci0gICAgICBpZiAocmV0ID09IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgIEdzdENsb2NrVGltZSBwb3NpdGlvbl9vdXQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgICAgIC8qIFJlbWVtYmVyIGxhc3Qgc3RvcCBwb3NpdGlvbiAqLwotICAgICAgICBpZiAocG9zaXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJgotICAgICAgICAgICAgdHJhbnMtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkKLSAgICAgICAgICB0cmFucy0+c2VnbWVudC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotCi0gICAgICAgIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRCAob3V0YnVmKSkgewotICAgICAgICAgIHBvc2l0aW9uX291dCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpOwotICAgICAgICAgIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChvdXRidWYpKQotICAgICAgICAgICAgcG9zaXRpb25fb3V0ICs9IEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1Zik7Ci0gICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgICAgIHBvc2l0aW9uX291dCA9IHBvc2l0aW9uOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3NpdGlvbl9vdXQgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORQotICAgICAgICAgICAgJiYgdHJhbnMtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkKLSAgICAgICAgICBwcml2LT5wb3NpdGlvbl9vdXQgPSBwb3NpdGlvbl9vdXQ7Ci0KLSAgICAgICAgLyogYXBwbHkgRElTQ09OVCBmbGFnIGlmIHRoZSBidWZmZXIgaXMgbm90IHlldCBtYXJrZWQgYXMgc3VjaCAqLwotICAgICAgICBpZiAodHJhbnMtPnByaXYtPmRpc2NvbnQpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIndlIGhhdmUgYSBwZW5kaW5nIERJU0NPTlQiKTsKLSAgICAgICAgICBpZiAoIUdTVF9CVUZGRVJfSVNfRElTQ09OVCAob3V0YnVmKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJtYXJraW5nIERJU0NPTlQgb24gb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOwotICAgICAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHByaXYtPmRpc2NvbnQgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBwcml2LT5wcm9jZXNzZWQrKzsKLQotICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHRyYW5zLT5zcmNwYWQsIG91dGJ1Zik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIndlIGdvdCByZXR1cm4gJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgb3V0YnVmICE9IE5VTEwpOwotCi1kb25lOgotICAvKiBjb252ZXJ0IGludGVybmFsIGZsb3cgdG8gT0sgYW5kIG1hcmsgZGlzY29udCBmb3IgdGhlIG5leHQgYnVmZmVyLiAqLwotICBpZiAocmV0ID09IEdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImRyb3BwZWQgYSBidWZmZXIsIG1hcmtpbmcgRElTQ09OVCIpOwotICAgIHByaXYtPmRpc2NvbnQgPSBUUlVFOwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnM7Ci0KLSAgdHJhbnMgPSBHU1RfQkFTRV9UUkFOU0ZPUk0gKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1FPUzoKLSAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQgKHRyYW5zLCBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RCYXNlVHJhbnNmb3JtICp0cmFuczsKLQotICB0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUU9TOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZCAodHJhbnMpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyogbm90IGEgdm1ldGhvZCBvZiBhbnl0aGluZywganVzdCBhbiBpbnRlcm5hbCBtZXRob2QgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2FjdGl2YXRlIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiY2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1Qcml2YXRlICpwcml2ID0gdHJhbnMtPnByaXY7Ci0gIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBHc3RDYXBzICppbmNhcHMsICpvdXRjYXBzOwotCi0gICAgaWYgKHByaXYtPnBhZF9tb2RlID09IEdTVF9QQURfTU9ERV9OT05FICYmIGJjbGFzcy0+c3RhcnQpCi0gICAgICByZXN1bHQgJj0gYmNsYXNzLT5zdGFydCAodHJhbnMpOwotCi0gICAgaW5jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICh0cmFucy0+c2lua3BhZCk7Ci0gICAgb3V0Y2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAodHJhbnMtPnNyY3BhZCk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKLSAgICBpZiAoaW5jYXBzICYmIG91dGNhcHMpCi0gICAgICBwcml2LT5oYXZlX3NhbWVfY2FwcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfaXNfZXF1YWwgKGluY2Fwcywgb3V0Y2FwcykgfHwgcHJpdi0+cGFzc3Rocm91Z2g7Ci0gICAgZWxzZQotICAgICAgcHJpdi0+aGF2ZV9zYW1lX2NhcHMgPSBwcml2LT5wYXNzdGhyb3VnaDsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImhhdmVfc2FtZV9jYXBzICVkIiwgcHJpdi0+aGF2ZV9zYW1lX2NhcHMpOwotICAgIHByaXYtPm5lZ290aWF0ZWQgPSBGQUxTRTsKLSAgICB0cmFucy0+aGF2ZV9zZWdtZW50ID0gRkFMU0U7Ci0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnRyYW5zLT5zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gICAgcHJpdi0+cG9zaXRpb25fb3V0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBwcml2LT5wcm9wb3J0aW9uID0gMS4wOwotICAgIHByaXYtPmVhcmxpZXN0X3RpbWUgPSAtMTsKLSAgICBwcml2LT5kaXNjb250ID0gRkFMU0U7Ci0gICAgcHJpdi0+cHJvY2Vzc2VkID0gMDsKLSAgICBwcml2LT5kcm9wcGVkID0gMDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOwotCi0gICAgaWYgKGluY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChpbmNhcHMpOwotICAgIGlmIChvdXRjYXBzKQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOwotICB9IGVsc2UgewotICAgIC8qIFdlIG11c3QgbWFrZSBzdXJlIHN0cmVhbWluZyBoYXMgZmluaXNoZWQgYmVmb3JlIHJlc2V0dGluZyB0aGluZ3MKLSAgICAgKiBhbmQgY2FsbGluZyB0aGUgOjpzdG9wIHZmdW5jICovCi0gICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAodHJhbnMtPnNpbmtwYWQpOwotICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAodHJhbnMtPnNpbmtwYWQpOwotCi0gICAgcHJpdi0+aGF2ZV9zYW1lX2NhcHMgPSBGQUxTRTsKLSAgICAvKiBXZSBjYW4gb25seSByZXNldCB0aGUgcGFzc3Rocm91Z2ggbW9kZSBpZiB0aGUgaW5zdGFuY2UgdG9sZCB1cyB0byAKLSAgICAgICBoYW5kbGUgaXQgaW4gY29uZmlndXJlX2NhcHMgKi8KLSAgICBpZiAoYmNsYXNzLT5wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMpIHsKLSAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKHRyYW5zLCBGQUxTRSk7Ci0gICAgfQotICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZwcml2LT5jYWNoZV9jYXBzMSwgTlVMTCk7Ci0gICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnByaXYtPmNhY2hlX2NhcHMyLCBOVUxMKTsKLQotICAgIC8qIE1ha2Ugc3VyZSBhbnkgbGVmdCBvdmVyIGJ1ZmZlciBpcyBmcmVlZCAqLwotICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJnRyYW5zLT5xdWV1ZWRfYnVmLCBOVUxMKTsKLQotICAgIGlmIChwcml2LT5wYWRfbW9kZSAhPSBHU1RfUEFEX01PREVfTk9ORSAmJiBiY2xhc3MtPnN0b3ApCi0gICAgICByZXN1bHQgJj0gYmNsYXNzLT5zdG9wICh0cmFucyk7Ci0KLSAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2FsbG9jYXRpb24gKHRyYW5zLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotICBHc3RCYXNlVHJhbnNmb3JtICp0cmFuczsKLQotICB0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAocGFyZW50KTsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVVNIOgotICAgIHsKLSAgICAgIHJlc3VsdCA9IGdzdF9iYXNlX3RyYW5zZm9ybV9hY3RpdmF0ZSAodHJhbnMsIGFjdGl2ZSk7Ci0KLSAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHRyYW5zLT5wcml2LT5wYWRfbW9kZSA9IGFjdGl2ZSA/IEdTVF9QQURfTU9ERV9QVVNIIDogR1NUX1BBRF9NT0RFX05PTkU7Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NyY19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zOwotCi0gIHRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgewotICAgICAgcmVzdWx0ID0KLSAgICAgICAgICBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHRyYW5zLT5zaW5rcGFkLCBHU1RfUEFEX01PREVfUFVMTCwgYWN0aXZlKTsKLQotICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmVzdWx0ICY9IGdzdF9iYXNlX3RyYW5zZm9ybV9hY3RpdmF0ZSAodHJhbnMsIGFjdGl2ZSk7Ci0KLSAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHRyYW5zLT5wcml2LT5wYWRfbW9kZSA9IGFjdGl2ZSA/IG1vZGUgOiBHU1RfUEFEX01PREVfTk9ORTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoOgotICogQHRyYW5zOiB0aGUgI0dzdEJhc2VUcmFuc2Zvcm0gdG8gc2V0Ci0gKiBAcGFzc3Rocm91Z2g6IGJvb2xlYW4gaW5kaWNhdGluZyBwYXNzdGhyb3VnaCBtb2RlLgotICoKLSAqIFNldCBwYXNzdGhyb3VnaCBtb2RlIGZvciB0aGlzIGZpbHRlciBieSBkZWZhdWx0LiBUaGlzIGlzIG1vc3RseQotICogdXNlZnVsIGZvciBmaWx0ZXJzIHRoYXQgZG8gbm90IGNhcmUgYWJvdXQgbmVnb3RpYXRpb24uCi0gKgotICogQWx3YXlzICVUUlVFIGZvciBmaWx0ZXJzIHdoaWNoIGRvbid0IGltcGxlbWVudCBlaXRoZXIgYSB0cmFuc2Zvcm0KLSAqIG9yIHRyYW5zZm9ybV9pcCBtZXRob2QuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIGdib29sZWFuIHBhc3N0aHJvdWdoKQotewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJjbGFzczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9UUkFOU0ZPUk0gKHRyYW5zKSk7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodHJhbnMpOwotICBpZiAoIXBhc3N0aHJvdWdoKSB7Ci0gICAgaWYgKGJjbGFzcy0+dHJhbnNmb3JtX2lwIHx8IGJjbGFzcy0+dHJhbnNmb3JtKQotICAgICAgdHJhbnMtPnByaXYtPnBhc3N0aHJvdWdoID0gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgdHJhbnMtPnByaXYtPnBhc3N0aHJvdWdoID0gVFJVRTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic2V0IHBhc3N0aHJvdWdoICVkIiwgdHJhbnMtPnByaXYtPnBhc3N0aHJvdWdoKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zKTsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2g6Ci0gKiBAdHJhbnM6IHRoZSAjR3N0QmFzZVRyYW5zZm9ybSB0byBxdWVyeQotICoKLSAqIFNlZSBpZiBAdHJhbnMgaXMgY29uZmlndXJlZCBhcyBhIHBhc3N0aHJvdWdoIHRyYW5zZm9ybS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpcyB0aGUgdHJhbnNmb3JtIGlzIGNvbmZpZ3VyZWQgaW4gcGFzc3Rocm91Z2ggbW9kZS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi1nYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucyksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKLSAgcmVzdWx0ID0gdHJhbnMtPnByaXYtPnBhc3N0aHJvdWdoOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZToKLSAqIEB0cmFuczogdGhlICNHc3RCYXNlVHJhbnNmb3JtIHRvIG1vZGlmeQotICogQGluX3BsYWNlOiBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIG9wZXJhdGUKLSAqIG9uIGluX3BsYWNlIGJ1ZmZlcnMuCi0gKgotICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbm9uLXdyaXRhYmxlIGJ1ZmZlciB3aWxsIGJlIGNvcGllZCBiZWZvcmUgcGFzc2luZwotICogdG8gdGhlIHRyYW5zZm9ybV9pcCBmdW5jdGlvbi4KLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiAgIDxsaXN0aXRlbT5BbHdheXMgJVRSVUUgaWYgbm8gdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLjwvbGlzdGl0ZW0+Ci0gKiAgIDxsaXN0aXRlbT5BbHdheXMgJUZBTFNFIGlmIE9OTFkgdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLjwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIGdib29sZWFuIGluX3BsYWNlKQotewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJjbGFzczsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQkFTRV9UUkFOU0ZPUk0gKHRyYW5zKSk7Ci0KLSAgYmNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodHJhbnMpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodHJhbnMpOwotCi0gIGlmIChpbl9wbGFjZSkgewotICAgIGlmIChiY2xhc3MtPnRyYW5zZm9ybV9pcCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzZXR0aW5nIGluX3BsYWNlIFRSVUUiKTsKLSAgICAgIHRyYW5zLT5wcml2LT5hbHdheXNfaW5fcGxhY2UgPSBUUlVFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoYmNsYXNzLT50cmFuc2Zvcm0pIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic2V0dGluZyBpbl9wbGFjZSBGQUxTRSIpOwotICAgICAgdHJhbnMtPnByaXYtPmFsd2F5c19pbl9wbGFjZSA9IEZBTFNFOwotICAgIH0KLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX2luX3BsYWNlOgotICogQHRyYW5zOiB0aGUgI0dzdEJhc2VUcmFuc2Zvcm0gdG8gcXVlcnkKLSAqCi0gKiBTZWUgaWYgQHRyYW5zIGlzIGNvbmZpZ3VyZWQgYXMgYSBpbl9wbGFjZSB0cmFuc2Zvcm0uCi0gKgotICogUmV0dXJuczogJVRSVUUgaXMgdGhlIHRyYW5zZm9ybSBpcyBjb25maWd1cmVkIGluIGluX3BsYWNlIG1vZGUuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7Ci0gIHJlc3VsdCA9IHRyYW5zLT5wcml2LT5hbHdheXNfaW5fcGxhY2U7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvczoKLSAqIEB0cmFuczogYSAjR3N0QmFzZVRyYW5zZm9ybQotICogQHByb3BvcnRpb246IHRoZSBwcm9wb3J0aW9uCi0gKiBAZGlmZjogdGhlIGRpZmYgYWdhaW5zdCB0aGUgY2xvY2sKLSAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciBnZW5lcmF0aW5nIHRoZSBRb1MgZXhwcmVzc2VkIGluCi0gKiBydW5uaW5nX3RpbWUuCi0gKgotICogU2V0IHRoZSBRb1MgcGFyYW1ldGVycyBpbiB0aGUgdHJhbnNmb3JtLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbnRlcm5hbGx5Ci0gKiB3aGVuIGEgUU9TIGV2ZW50IGlzIHJlY2VpdmVkIGJ1dCBzdWJjbGFzc2VzIGNhbiBwcm92aWRlIGN1c3RvbSBpbmZvcm1hdGlvbgotICogd2hlbiBuZWVkZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9xb3MgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBnZG91YmxlIHByb3BvcnRpb24sIEdzdENsb2NrVGltZURpZmYgZGlmZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucykpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgdHJhbnMsCi0gICAgICAicW9zOiBwcm9wb3J0aW9uOiAlbGYsIGRpZmYgJSIgR19HSU5UNjRfRk9STUFUICIsIHRpbWVzdGFtcCAlIgotICAgICAgR1NUX1RJTUVfRk9STUFULCBwcm9wb3J0aW9uLCBkaWZmLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKLSAgdHJhbnMtPnByaXYtPnByb3BvcnRpb24gPSBwcm9wb3J0aW9uOwotICB0cmFucy0+cHJpdi0+ZWFybGllc3RfdGltZSA9IHRpbWVzdGFtcCArIGRpZmY7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9xb3NfZW5hYmxlZDoKLSAqIEB0cmFuczogYSAjR3N0QmFzZVRyYW5zZm9ybQotICogQGVuYWJsZWQ6IG5ldyBzdGF0ZQotICoKLSAqIEVuYWJsZSBvciBkaXNhYmxlIFFvUyBoYW5kbGluZyBpbiB0aGUgdHJhbnNmb3JtLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgZ2Jvb2xlYW4gZW5hYmxlZCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucykpOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1FPUywgdHJhbnMsICJlbmFibGVkOiAlZCIsIGVuYWJsZWQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodHJhbnMpOwotICB0cmFucy0+cHJpdi0+cW9zX2VuYWJsZWQgPSBlbmFibGVkOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhbnMpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZDoKLSAqIEB0cmFuczogYSAjR3N0QmFzZVRyYW5zZm9ybQotICoKLSAqIFF1ZXJpZXMgaWYgdGhlIHRyYW5zZm9ybSB3aWxsIGhhbmRsZSBRb1MuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgUW9TIGlzIGVuYWJsZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0cmFucyk7Ci0gIHJlc3VsdCA9IHRyYW5zLT5wcml2LT5xb3NfZW5hYmxlZDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRyYW5zKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlOgotICogQHRyYW5zOiBhICNHc3RCYXNlVHJhbnNmb3JtCi0gKiBAZ2FwX2F3YXJlOiBOZXcgc3RhdGUKLSAqCi0gKiBJZiBAZ2FwX2F3YXJlIGlzICVGQUxTRSAodGhlIGRlZmF1bHQpLCBvdXRwdXQgYnVmZmVycyB3aWxsIGhhdmUgdGhlCi0gKiAlR1NUX0JVRkZFUl9GTEFHX0dBUCBmbGFnIHVuc2V0LgotICoKLSAqIElmIHNldCB0byAlVFJVRSwgdGhlIGVsZW1lbnQgbXVzdCBoYW5kbGUgb3V0cHV0IGJ1ZmZlcnMgd2l0aCB0aGlzIGZsYWcgc2V0Ci0gKiBjb3JyZWN0bHksIGkuZS4gaXQgY2FuIGFzc3VtZSB0aGF0IHRoZSBidWZmZXIgY29udGFpbnMgbmV1dHJhbCBkYXRhIGJ1dCBtdXN0Ci0gKiB1bnNldCB0aGUgZmxhZyBpZiB0aGUgb3V0cHV0IGlzIG5vIG5ldXRyYWwgZGF0YS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBnYm9vbGVhbiBnYXBfYXdhcmUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRyYW5zKTsKLSAgdHJhbnMtPnByaXYtPmdhcF9hd2FyZSA9IGdhcF9hd2FyZTsKLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzZXQgZ2FwIGF3YXJlICVkIiwgdHJhbnMtPnByaXYtPmdhcF9hd2FyZSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcmVmZXJfcGFzc3Rocm91Z2g6Ci0gKiBAdHJhbnM6IGEgI0dzdEJhc2VUcmFuc2Zvcm0KLSAqIEBwcmVmZXJfcGFzc3Rocm91Z2g6IE5ldyBzdGF0ZQotICoKLSAqIElmIEBwcmVmZXJfcGFzc3Rocm91Z2ggaXMgJVRSVUUgKHRoZSBkZWZhdWx0KSwgQHRyYW5zIHdpbGwgY2hlY2sgYW5kCi0gKiBwcmVmZXIgcGFzc3Rocm91Z2ggY2FwcyBmcm9tIHRoZSBsaXN0IG9mIGNhcHMgcmV0dXJuZWQgYnkgdGhlCi0gKiB0cmFuc2Zvcm1fY2FwcyB2bWV0aG9kLgotICoKLSAqIElmIHNldCB0byAlRkFMU0UsIHRoZSBlbGVtZW50IG11c3Qgb3JkZXIgdGhlIGNhcHMgcmV0dXJuZWQgZnJvbSB0aGUKLSAqIHRyYW5zZm9ybV9jYXBzIGZ1bmN0aW9uIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgcHJlZmVycmVkIGZvcm1hdCBpcwotICogZmlyc3QgaW4gdGhlIGxpc3QuIFRoaXMgY2FuIGJlIGludGVyZXN0aW5nIGZvciB0cmFuc2Zvcm1zIHRoYXQgY2FuIGRvCi0gKiBwYXNzdGhyb3VnaCB0cmFuc2Zvcm1zIGJ1dCBwcmVmZXIgdG8gZG8gc29tZXRoaW5nIGVsc2UsIGxpa2UgYQotICogY2Fwc2ZpbHRlci4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjAuMQotICovCi12b2lkCi1nc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3ByZWZlcl9wYXNzdGhyb3VnaCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIGdib29sZWFuIHByZWZlcl9wYXNzdGhyb3VnaCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodHJhbnMpOwotICB0cmFucy0+cHJpdi0+cHJlZmVyX3Bhc3N0aHJvdWdoID0gcHJlZmVyX3Bhc3N0aHJvdWdoOwotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInByZWZlciBwYXNzdGhyb3VnaCAlZCIsIHByZWZlcl9wYXNzdGhyb3VnaCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0cmFucyk7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3Npbms6Ci0gKiBAdHJhbnM6IGEgI0dzdEJhc2VUcmFuc2Zvcm0KLSAqCi0gKiBJbnN0cnVjdHMgQHRyYW5zIHRvIHJlcXVlc3QgcmVuZWdvdGlhdGlvbiB1cHN0cmVhbS4gVGhpcyBmdW5jdGlvbiBpcwotICogdHlwaWNhbGx5IGNhbGxlZCBhZnRlciBwcm9wZXJ0aWVzIG9uIHRoZSB0cmFuc2Zvcm0gd2VyZSBzZXQgdGhhdAotICogaW5mbHVlbmNlIHRoZSBpbnB1dCBmb3JtYXQuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpKTsKLQotICAvKiBwdXNoIHRoZSByZW5lZ290aWF0ZSBldmVudCAqLwotICBpZiAoIWdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEICh0cmFucyksCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZSAoKSkpCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJSZW5lZ290aWF0ZSBldmVudCB3YXNuJ3QgaGFuZGxlZCIpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zcmM6Ci0gKiBAdHJhbnM6IGEgI0dzdEJhc2VUcmFuc2Zvcm0KLSAqCi0gKiBJbnN0cnVjdHMgQHRyYW5zIHRvIHJlbmVnb3RpYXRlIGEgbmV3IGRvd25zdHJlYW0gdHJhbnNmb3JtIG9uIHRoZSBuZXh0Ci0gKiBidWZmZXIuIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCBhZnRlciBwcm9wZXJ0aWVzIG9uIHRoZSB0cmFuc2Zvcm0KLSAqIHdlcmUgc2V0IHRoYXQgaW5mbHVlbmNlIHRoZSBvdXRwdXQgZm9ybWF0LgotICovCi12b2lkCi1nc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc3JjIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpKTsKLQotICBnc3RfcGFkX21hcmtfcmVjb25maWd1cmUgKHRyYW5zLT5zcmNwYWQpOwotfQotCi0vKioKLSAqIGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYnVmZmVyX3Bvb2w6Ci0gKiBAdHJhbnM6IGEgI0dzdEJhc2VUcmFuc2Zvcm0KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBpbnN0YW5jZSBvZiB0aGUgI0dzdEJ1ZmZlclBvb2wgdXNlZAotICogYnkgQHRyYW5zOyBmcmVlIGl0IGFmdGVyIHVzZSBpdAotICovCi1Hc3RCdWZmZXJQb29sICoKLWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYnVmZmVyX3Bvb2wgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CQVNFX1RSQU5TRk9STSAodHJhbnMpLCBOVUxMKTsKLQotICBpZiAodHJhbnMtPnByaXYtPnBvb2wpCi0gICAgcmV0dXJuIGdzdF9vYmplY3RfcmVmICh0cmFucy0+cHJpdi0+cG9vbCk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9hbGxvY2F0b3I6Ci0gKiBAdHJhbnM6IGEgI0dzdEJhc2VUcmFuc2Zvcm0KLSAqIEBhbGxvY2F0b3I6IChvdXQpIChhbGxvdy1ub25lKSAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0QWxsb2NhdG9yCi0gKiB1c2VkCi0gKiBAcGFyYW1zOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiB0aGUKLSAqICNHc3RBbGxvY2F0aW9uUGFyYW1zIG9mIEBhbGxvY2F0b3IKLSAqCi0gKiBMZXRzICNHc3RCYXNlVHJhbnNmb3JtIHN1Yi1jbGFzc2VzIHRvIGtub3cgdGhlIG1lbW9yeSBAYWxsb2NhdG9yCi0gKiB1c2VkIGJ5IHRoZSBiYXNlIGNsYXNzIGFuZCBpdHMgQHBhcmFtcy4KLSAqCi0gKiBVbnJlZiB0aGUgQGFsbG9jYXRvciBhZnRlciB1c2UgaXQuCi0gKi8KLXZvaWQKLWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYWxsb2NhdG9yIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QWxsb2NhdG9yICoqIGFsbG9jYXRvciwgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0JBU0VfVFJBTlNGT1JNICh0cmFucykpOwotCi0gIGlmIChhbGxvY2F0b3IpCi0gICAgKmFsbG9jYXRvciA9IHRyYW5zLT5wcml2LT5hbGxvY2F0b3IgPwotICAgICAgICBnc3Rfb2JqZWN0X3JlZiAodHJhbnMtPnByaXYtPmFsbG9jYXRvcikgOiBOVUxMOwotCi0gIGlmIChwYXJhbXMpCi0gICAgKnBhcmFtcyA9IHRyYW5zLT5wcml2LT5wYXJhbXM7Ci19Ci0KLS8qKgotICogZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9zcmNfY2FwczoKLSAqIEB0cmFuczogYSAjR3N0QmFzZVRyYW5zZm9ybQotICogQHVwZGF0ZWRfY2FwczogQW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBzcmNwYWQgY2FwcyB0byBiZSBwdXNoZWQKLSAqIGRvd25zdHJlYW0KLSAqCi0gKiBVcGRhdGVzIHRoZSBzcmNwYWQgY2FwcyBhbmQgc2VuZCB0aGUgY2FwcyBkb3duc3RyZWFtLiBUaGlzIGZ1bmN0aW9uCi0gKiBjYW4gYmUgdXNlZCBieSBzdWJjbGFzc2VzIHdoZW4gdGhleSBoYXZlIGFscmVhZHkgbmVnb3RpYXRlZCB0aGVpciBjYXBzCi0gKiBidXQgZm91bmQgYSBjaGFuZ2UgaW4gdGhlbSAob3IgY29tcHV0ZWQgbmV3IGluZm9ybWF0aW9ucykuIFRoaXMgd2F5LAotICogdGhleSBjYW4gbm90aWZ5IGRvd25zdHJlYW0gYWJvdXQgdGhhdCBjaGFuZ2Ugd2l0aG91dCBsb29zaW5nIGFueQotICogYnVmZmVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjYXBzIGNvdWxkIGJlIHNlbmQgZG93bnN0cmVhbSAlRkFMU0Ugb3RoZXJ3aXNlCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9zcmNfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdENhcHMgKiB1cGRhdGVkX2NhcHMpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQkFTRV9UUkFOU0ZPUk0gKHRyYW5zKSwgRkFMU0UpOwotCi0gIGlmIChnc3RfcGFkX3B1c2hfZXZlbnQgKEdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEICh0cmFucyksCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19jYXBzICh1cGRhdGVkX2NhcHMpKSkgewotICAgIGdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZSAodHJhbnMtPnNyY3BhZCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZTI1ZWMuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0JBU0VfVFJBTlNGT1JNX0hfXwotI2RlZmluZSBfX0dTVF9CQVNFX1RSQU5TRk9STV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNCQkgICAoZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STShvYmopCQkgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0sR3N0QmFzZVRyYW5zZm9ybSkpCi0jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0sR3N0QmFzZVRyYW5zZm9ybUNsYXNzKSkKLSNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSxHU1RfVFlQRV9CQVNFX1RSQU5TRk9STSxHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQkFTRV9UUkFOU0ZPUk0ob2JqKQkgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0pKQotI2RlZmluZSBHU1RfSVNfQkFTRV9UUkFOU0ZPUk1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKSkKLSNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1Qob2JqKQkoKEdzdEJhc2VUcmFuc2Zvcm0gKikob2JqKSkKLQotLyoqCi0gKiBHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FOgotICoKLSAqIFRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZXMgZm9yIHRoZSBzaW5rIHBhZC4KLSAqLwotI2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19OQU1FCSJzaW5rIgotLyoqCi0gKiBHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX05BTUU6Ci0gKgotICogVGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlcyBmb3IgdGhlIHNvdXJjZSBwYWQuCi0gKi8KLSNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19OQU1FCSJzcmMiCi0KLS8qKgotICogR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQ6Ci0gKiBAb2JqOiBiYXNlIHRyYW5zZm9ybSBpbnN0YW5jZQotICoKLSAqIEdpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgI0dzdFBhZCBvYmplY3Qgb2YgdGhlIGVsZW1lbnQuCi0gKi8KLSNkZWZpbmUgR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQob2JqKQkJKEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChvYmopLT5zcmNwYWQpCi0KLS8qKgotICogR1NUX0JBU0VfVFJBTlNGT1JNX1NJTktfUEFEOgotICogQG9iajogYmFzZSB0cmFuc2Zvcm0gaW5zdGFuY2UKLSAqCi0gKiBHaXZlcyB0aGUgcG9pbnRlciB0byB0aGUgc2luayAjR3N0UGFkIG9iamVjdCBvZiB0aGUgZWxlbWVudC4KLSAqLwotI2RlZmluZSBHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQob2JqKQkoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKG9iaiktPnNpbmtwYWQpCi0KLS8qKgotICogR1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRDoKLSAqCi0gKiBBICNHc3RGbG93UmV0dXJuIHRoYXQgY2FuIGJlIHJldHVybmVkIGZyb20gdHJhbnNmb3JtIGFuZCB0cmFuc2Zvcm1faXAgdG8KLSAqIGluZGljYXRlIHRoYXQgbm8gb3V0cHV0IGJ1ZmZlciB3YXMgZ2VuZXJhdGVkLgotICovCi0jZGVmaW5lIEdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQgICBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVRyYW5zZm9ybSBHc3RCYXNlVHJhbnNmb3JtOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEJhc2VUcmFuc2Zvcm1DbGFzcyBHc3RCYXNlVHJhbnNmb3JtQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QmFzZVRyYW5zZm9ybVByaXZhdGUgR3N0QmFzZVRyYW5zZm9ybVByaXZhdGU7Ci0KLS8qKgotICogR3N0QmFzZVRyYW5zZm9ybToKLSAqCi0gKiBUaGUgb3BhcXVlICNHc3RCYXNlVHJhbnNmb3JtIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdEJhc2VUcmFuc2Zvcm0gewotICBHc3RFbGVtZW50CSBlbGVtZW50OwotCi0gIC8qPCBwcm90ZWN0ZWQgPiovCi0gIC8qIHNvdXJjZSBhbmQgc2luayBwYWRzICovCi0gIEdzdFBhZAkqc2lua3BhZDsKLSAgR3N0UGFkCSpzcmNwYWQ7Ci0KLSAgLyogTVQtcHJvdGVjdGVkICh3aXRoIFNUUkVBTV9MT0NLKSAqLwotICBnYm9vbGVhbiAgICAgICBoYXZlX3NlZ21lbnQ7Ci0gIEdzdFNlZ21lbnQgICAgIHNlZ21lbnQ7Ci0gIC8qIERlZmF1bHQgc3VibWl0X2lucHV0X2J1ZmZlciBwbGFjZXMgdGhlIGJ1ZmZlciBoZXJlLAotICAgKiBmb3IgY29uc3VtcHRpb24gYnkgdGhlIGdlbmVyYXRlX291dHB1dCBtZXRob2Q6ICovCi0gIEdzdEJ1ZmZlciAgICAgICpxdWV1ZWRfYnVmOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RCYXNlVHJhbnNmb3JtUHJpdmF0ZSAqcHJpdjsKLQotICBncG9pbnRlciAgICAgICBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HX0xBUkdFLTFdOwotfTsKLQotLyoqCi0gKiBHc3RCYXNlVHJhbnNmb3JtQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiAgIEVsZW1lbnQgcGFyZW50IGNsYXNzCi0gKiBAcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzOiBJZiBzZXQgdG8gJVRSVUUsIHBhc3N0aHJvdWdoIG1vZGUgd2lsbCBiZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHRoZSBjYXBzIGFyZSB0aGUgc2FtZS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0byAlRkFMU0UgYnkgZGVmYXVsdC4KLSAqIEB0cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2g6IElmIHNldCB0byAlVFJVRSwgQHRyYW5zZm9ybV9pcCB3aWxsIGJlIGNhbGxlZCBpbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzdGhyb3VnaCBtb2RlLiBUaGUgcGFzc2VkIGJ1ZmZlciBtaWdodCBub3QgYmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGUuIFdoZW4gJUZBTFNFLCBuZWl0aGVyIEB0cmFuc2Zvcm0gbm9yCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0cmFuc2Zvcm1faXAgd2lsbCBiZSBjYWxsZWQgaW4gcGFzc3Rocm91Z2ggbW9kZS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvICVUUlVFIGJ5IGRlZmF1bHQuCi0gKiBAdHJhbnNmb3JtX2NhcHM6IE9wdGlvbmFsLiAgR2l2ZW4gdGhlIHBhZCBpbiB0aGlzIGRpcmVjdGlvbiBhbmQgdGhlIGdpdmVuCi0gKiAgICAgICAgICAgICAgICAgIGNhcHMsIHdoYXQgY2FwcyBhcmUgYWxsb3dlZCBvbiB0aGUgb3RoZXIgcGFkIGluIHRoaXMKLSAqICAgICAgICAgICAgICAgICAgZWxlbWVudCA/Ci0gKiBAZml4YXRlX2NhcHM6ICAgIE9wdGlvbmFsLiBHaXZlbiB0aGUgcGFkIGluIHRoaXMgZGlyZWN0aW9uIGFuZCB0aGUgZ2l2ZW4KLSAqICAgICAgICAgICAgICAgICAgY2FwcywgZml4YXRlIHRoZSBjYXBzIG9uIHRoZSBvdGhlciBwYWQuIFRoZSBmdW5jdGlvbiB0YWtlcwotICogICAgICAgICAgICAgICAgICBvd25lcnNoaXAgb2YgQG90aGVyY2FwcyBhbmQgcmV0dXJucyBhIGZpeGF0ZWQgdmVyc2lvbiBvZgotICogICAgICAgICAgICAgICAgICBAb3RoZXJjYXBzLiBAb3RoZXJjYXBzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHdyaXRhYmxlLgotICogQGFjY2VwdF9jYXBzOiAgICBPcHRpb25hbC4KLSAqICAgICAgICAgICAgICAgICAgU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hlY2sgaWYgQGNhcHMgY2FuIGJlCi0gKiAgICAgICAgICAgICAgICAgIGhhbmRsZWQgYnkgdGhlIGVsZW1lbnQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBiZQotICogICAgICAgICAgICAgICAgICB0aGUgbW9zdCBvcHRpbWFsIHdheSB0byBjaGVjayB0aGlzIGluIGFsbCBjYXNlcy4KLSAqIEBzZXRfY2FwczogICAgICAgYWxsb3dzIHRoZSBzdWJjbGFzcyB0byBiZSBub3RpZmllZCBvZiB0aGUgYWN0dWFsIGNhcHMgc2V0LgotICogQHF1ZXJ5OiAgICAgICAgICBPcHRpb25hbC4KLSAqICAgICAgICAgICAgICAgICAgSGFuZGxlIGEgcmVxdWVzdGVkIHF1ZXJ5LiBTdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoaXMKLSAqICAgICAgICAgICAgICAgICAgc2hvdWxkIG11c3QgY2hhaW4gdXAgdG8gdGhlIHBhcmVudCBpZiB0aGV5IGRpZG4ndCBoYW5kbGUgdGhlCi0gKiAgICAgICAgICAgICAgICAgIHF1ZXJ5Ci0gKiBAZGVjaWRlX2FsbG9jYXRpb246IFNldHVwIHRoZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgZm9yIGFsbG9jYXRpbmcgb3V0cHV0Ci0gKiAgICAgICAgICAgICAgICAgICAgYnVmZmVycy4gVGhlIHBhc3NlZCBpbiBxdWVyeSBjb250YWlucyB0aGUgcmVzdWx0IG9mIHRoZQotICogICAgICAgICAgICAgICAgICAgIGRvd25zdHJlYW0gYWxsb2NhdGlvbiBxdWVyeS4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZAotICogICAgICAgICAgICAgICAgICAgIHdoZW4gbm90IG9wZXJhdGluZyBpbiBwYXNzdGhyb3VnaCBtb2RlLiBUaGUgZGVmYXVsdAotICogICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIHdpbGwgcmVtb3ZlIGFsbCBtZW1vcnkgZGVwZW5kZW50IG1ldGFkYXRhLgotICogICAgICAgICAgICAgICAgICAgIElmIHRoZXJlIGlzIGEgQGZpbHRlcl9tZXRhIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiwgaXQgd2lsbAotICogICAgICAgICAgICAgICAgICAgIGJlIGNhbGxlZCBmb3IgYWxsIG1ldGFkYXRhIEFQSSBpbiB0aGUgZG93bnN0cmVhbSBxdWVyeSwKLSAqICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdGhlIG1ldGFkYXRhIEFQSSBpcyByZW1vdmVkLgotICogQGZpbHRlcl9tZXRhOiBSZXR1cm4gJVRSVUUgaWYgdGhlIG1ldGFkYXRhIEFQSSBzaG91bGQgYmUgcHJvcG9zZWQgaW4gdGhlCi0gKiAgICAgICAgICAgICAgIHVwc3RyZWFtIGFsbG9jYXRpb24gcXVlcnkuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzICVOVUxMCi0gKiAgICAgICAgICAgICAgIGFuZCB3aWxsIGNhdXNlIGFsbCBtZXRhZGF0YSB0byBiZSByZW1vdmVkLgotICogQHByb3Bvc2VfYWxsb2NhdGlvbjogUHJvcG9zZSBidWZmZXIgYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIGZvciB1cHN0cmVhbSBlbGVtZW50cy4KLSAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbXBsZW1lbnRlZCBpZiB0aGUgZWxlbWVudCByZWFkcyBvcgotICogICAgICAgICAgICAgICAgICAgICAgd3JpdGVzIHRoZSBidWZmZXIgY29udGVudC4gVGhlIHF1ZXJ5IHRoYXQgd2FzIHBhc3NlZCB0bwotICogICAgICAgICAgICAgICAgICAgICAgdGhlIGRlY2lkZV9hbGxvY2F0aW9uIGlzIHBhc3NlZCBpbiB0aGlzIG1ldGhvZCAob3IgJU5VTEwKLSAqICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGVsZW1lbnQgaXMgaW4gcGFzc3Rocm91Z2ggbW9kZSkuIFRoZSBkZWZhdWx0Ci0gKiAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiB3aWxsIHBhc3MgdGhlIHF1ZXJ5IGRvd25zdHJlYW0gd2hlbiBpbgotICogICAgICAgICAgICAgICAgICAgICAgcGFzc3Rocm91Z2ggbW9kZSBhbmQgd2lsbCBjb3B5IGFsbCB0aGUgZmlsdGVyZWQgbWV0YWRhdGEKLSAqICAgICAgICAgICAgICAgICAgICAgIEFQSSBpbiBub24tcGFzc3Rocm91Z2ggbW9kZS4KLSAqIEB0cmFuc2Zvcm1fc2l6ZTogT3B0aW9uYWwuIEdpdmVuIHRoZSBzaXplIG9mIGEgYnVmZmVyIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24KLSAqICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gY2FwcywgY2FsY3VsYXRlIHRoZSBzaXplIGluIGJ5dGVzIG9mIGEgYnVmZmVyCi0gKiAgICAgICAgICAgICAgICAgIG9uIHRoZSBvdGhlciBwYWQgd2l0aCB0aGUgZ2l2ZW4gb3RoZXIgY2Fwcy4KLSAqICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyBnZXRfdW5pdF9zaXplIGFuZCBrZWVwcwotICogICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHVuaXRzIHRoZSBzYW1lLgotICogQGdldF91bml0X3NpemU6ICBSZXF1aXJlZCBpZiB0aGUgdHJhbnNmb3JtIGlzIG5vdCBpbi1wbGFjZS4KLSAqICAgICAgICAgICAgICAgICAgZ2V0IHRoZSBzaXplIGluIGJ5dGVzIG9mIG9uZSB1bml0IGZvciB0aGUgZ2l2ZW4gY2Fwcy4KLSAqIEBzdGFydDogICAgICAgICAgT3B0aW9uYWwuCi0gKiAgICAgICAgICAgICAgICAgIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IHN0YXJ0cyBwcm9jZXNzaW5nLgotICogICAgICAgICAgICAgICAgICBBbGxvd3Mgb3BlbmluZyBleHRlcm5hbCByZXNvdXJjZXMuCi0gKiBAc3RvcDogICAgICAgICAgIE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBzdG9wcyBwcm9jZXNzaW5nLgotICogICAgICAgICAgICAgICAgICBBbGxvd3MgY2xvc2luZyBleHRlcm5hbCByZXNvdXJjZXMuCi0gKiBAc2lua19ldmVudDogICAgIE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICBFdmVudCBoYW5kbGVyIG9uIHRoZSBzaW5rIHBhZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAqICAgICAgICAgICAgICAgICAgaGFuZGxlcyB0aGUgZXZlbnQgYW5kIGZvcndhcmRzIGl0IGRvd25zdHJlYW0uCi0gKiBAc3JjX2V2ZW50OiAgICAgIE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICBFdmVudCBoYW5kbGVyIG9uIHRoZSBzb3VyY2UgcGFkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotICogICAgICAgICAgICAgICAgICBoYW5kbGVzIHRoZSBldmVudCBhbmQgZm9yd2FyZHMgaXQgdXBzdHJlYW0uCi0gKiBAcHJlcGFyZV9vdXRwdXRfYnVmZmVyOiBPcHRpb25hbC4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgdG8gZG8gdGhlaXIgb3duCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9uIG9mIG91dHB1dCBidWZmZXJzLiAgRWxlbWVudHMgdGhhdCBvbmx5IGRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmFseXNpcyBjYW4gcmV0dXJuIGEgc3ViYnVmZmVyIG9yIGV2ZW4ganVzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBidWZmZXIgKGlmIGluCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzdGhyb3VnaCBtb2RlKS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbAotICogICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBuZWdvdGlhdGVkIGFsbG9jYXRvciBvciBidWZmZXJwb29sIGFuZAotICogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3NpemUgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBvciBpdAotICogICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCByZXR1cm4gdGhlIGlucHV0IGJ1ZmZlciBpbiBwYXNzdGhyb3VnaCBtb2RlLgotICogQGNvcHlfbWV0YWRhdGE6IE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgIENvcHkgdGhlIG1ldGFkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KLSAqICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGNvcHkgdGhlIGZsYWdzLCB0aW1lc3RhbXBzIGFuZAotICogICAgICAgICAgICAgICAgIG9mZnNldHMgb2YgdGhlIGJ1ZmZlci4KLSAqIEB0cmFuc2Zvcm1fbWV0YTogT3B0aW9uYWwuIFRyYW5zZm9ybSB0aGUgbWV0YWRhdGEgb24gdGhlIGlucHV0IGJ1ZmZlciB0byB0aGUKLSAqICAgICAgICAgICAgICAgICAgb3V0cHV0IGJ1ZmZlci4gQnkgZGVmYXVsdCB0aGlzIG1ldGhvZCBjb3BpZXMgYWxsIG1ldGEgd2l0aG91dAotICogICAgICAgICAgICAgICAgICB0YWdzLiBzdWJjbGFzc2VzIGNhbiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgYW5kIHJldHVybiAlVFJVRSBpZgotICogICAgICAgICAgICAgICAgICB0aGUgbWV0YWRhdGEgaXMgdG8gYmUgY29waWVkLgotICogQGJlZm9yZV90cmFuc2Zvcm06IE9wdGlvbmFsLgotICogICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgdGhlIGJhc2UgY2xhc3Mgd2lsbAotICogICAgICAgICAgICAgICAgICAgIHN0YXJ0IHByb2Nlc3NpbmcuIER5bmFtaWMgcHJvcGVydGllcyBvciBvdGhlciBkZWxheWVkCi0gKiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBjb3VsZCBiZSBwZXJmb3JtZWQgaW4gdGhpcyBtZXRob2QuCi0gKiBAdHJhbnNmb3JtOiAgICAgIFJlcXVpcmVkIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IG9wZXJhdGUgaW4tcGxhY2UuCi0gKiAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMgb25lIGluY29taW5nIGJ1ZmZlciB0byBvbmUgb3V0Z29pbmcgYnVmZmVyLgotICogICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBjaGFuZ2Ugc2l6ZS90aW1lc3RhbXAvZHVyYXRpb24KLSAqICAgICAgICAgICAgICAgICAgb2YgdGhlIG91dGdvaW5nIGJ1ZmZlci4KLSAqIEB0cmFuc2Zvcm1faXA6ICAgUmVxdWlyZWQgaWYgdGhlIGVsZW1lbnQgb3BlcmF0ZXMgaW4tcGxhY2UuCi0gKiAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybSB0aGUgaW5jb21pbmcgYnVmZmVyIGluLXBsYWNlLgotICogQHN1Ym1pdF9pbnB1dF9idWZmZXI6IEZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgYSBuZXcgaW5wdXQgYnVmZmVyIGFuZCBwcmUtcHJvY2Vzc2VzIGl0LgotICogICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwZXJmb3JtcyBjYXBzIChyZSluZWdvdGlhdGlvbiwgdGhlbgotICogICAgICAgICAgICAgICAgICBRb1MgaWYgbmVlZGVkLCBhbmQgcGxhY2VzIHRoZSBpbnB1dCBidWZmZXIgaW50byB0aGUgQHF1ZXVlZF9idWYKLSAqICAgICAgICAgICAgICAgICAgbWVtYmVyIHZhcmlhYmxlLiBJZiB0aGUgYnVmZmVyIGlzIGRyb3BwZWQgZHVlIHRvIFFvUywgaXQgcmV0dXJucwotICogICAgICAgICAgICAgICAgICBHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVELiBJZiB0aGlzIGlucHV0IGJ1ZmZlciBpcyBub3QKLSAqICAgICAgICAgICAgICAgICAgY29udGlndW91cyB3aXRoIGFueSBwcmV2aW91cyBpbnB1dCBidWZmZXIsIHRoZW4gQGlzX2Rpc2NvbnQKLSAqICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICNUUlVFLiAoU2luY2UgMS42KQotICogQGdlbmVyYXRlX291dHB1dDogQ2FsbGVkIGFmdGVyIGVhY2ggbmV3IGlucHV0IGJ1ZmZlciBpcyBzdWJtaXR0ZWQgcmVwZWF0ZWRseQotICogICAgICAgICAgICAgICAgICAgdW50aWwgaXQgZWl0aGVyIGdlbmVyYXRlcyBhbiBlcnJvciBvciBmYWlscyB0byBnZW5lcmF0ZSBhbiBvdXRwdXQKLSAqICAgICAgICAgICAgICAgICAgIGJ1ZmZlci4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdGFrZXMgdGhlIGNvbnRlbnRzIG9mIHRoZQotICogICAgICAgICAgICAgICAgICAgQHF1ZXVlZF9idWYgdmFyaWFibGUsIGdlbmVyYXRlcyBhbiBvdXRwdXQgYnVmZmVyIGlmIG5lZWRlZAotICogICAgICAgICAgICAgICAgICAgYnkgY2FsbGluZyB0aGUgY2xhc3MgQHByZXBhcmVfb3V0cHV0X2J1ZmZlciwgYW5kIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgIGNhbGxzIGVpdGhlciBAdHJhbnNmb3JtIG9yIEB0cmFuc2Zvcm1faXAuIEVsZW1lbnRzIHRoYXQgZG9uJ3QKLSAqICAgICAgICAgICAgICAgICAgIGRvIDEtdG8tMSB0cmFuc2Zvcm1hdGlvbnMgb24gaW5wdXQgdG8gb3V0cHV0IGJ1ZmZlcnMgY2FuIGVpdGhlcgotICogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9GTE9XX0RST1BQRUQgb3Igc2ltcGx5IG5vdCBnZW5lcmF0ZQotICogICAgICAgICAgICAgICAgICAgYW4gb3V0cHV0IGJ1ZmZlciB1bnRpbCB0aGV5IGFyZSByZWFkeSB0byBkbyBzby4gKFNpbmNlIDEuNikKLSAqICAgICAgICAgICAgICAgICAgIAotICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZSBhdmFpbGFibGUgdmlydHVhbCBtZXRob2RzIG9yIG5vdCwgYXMKLSAqIG5lZWRlZC4gQXQgbWluaW11bSBlaXRoZXIgQHRyYW5zZm9ybSBvciBAdHJhbnNmb3JtX2lwIG5lZWQgdG8gYmUgb3ZlcnJpZGRlbi4KLSAqIElmIHRoZSBlbGVtZW50IGNhbiBvdmVyd3JpdGUgdGhlIGlucHV0IGRhdGEgd2l0aCB0aGUgcmVzdWx0cyAoZGF0YSBpcyBvZiB0aGUKLSAqIHNhbWUgdHlwZSBhbmQgcXVhbnRpdHkpIGl0IHNob3VsZCBwcm92aWRlIEB0cmFuc2Zvcm1faXAuCi0gKi8KLXN0cnVjdCBfR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHVibGljID4qLwotICBnYm9vbGVhbiAgICAgICBwYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHM7Ci0gIGdib29sZWFuICAgICAgIHRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaDsKLQotICAvKiB2aXJ0dWFsIG1ldGhvZHMgZm9yIHN1YmNsYXNzZXMgKi8KLSAgR3N0Q2FwcyoJKCp0cmFuc2Zvcm1fY2FwcykgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpjYXBzLCBHc3RDYXBzICpmaWx0ZXIpOwotICBHc3RDYXBzKgkoKmZpeGF0ZV9jYXBzKQkgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAqb3RoZXJjYXBzKTsKLSAgZ2Jvb2xlYW4gICAgICAoKmFjY2VwdF9jYXBzKSAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKmNhcHMpOwotICBnYm9vbGVhbiAgICAgICgqc2V0X2NhcHMpICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0Q2FwcyAqaW5jYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpvdXRjYXBzKTsKLSAgZ2Jvb2xlYW4gICAgICAoKnF1ZXJ5KSAgICAgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFF1ZXJ5ICpxdWVyeSk7Ci0KLSAgLyogZGVjaWRlIGFsbG9jYXRpb24gcXVlcnkgZm9yIG91dHB1dCBidWZmZXJzICovCi0gIGdib29sZWFuICAgICAgKCpkZWNpZGVfYWxsb2NhdGlvbikgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0UXVlcnkgKnF1ZXJ5KTsKLSAgZ2Jvb2xlYW4gICAgICAoKmZpbHRlcl9tZXRhKSAgICAgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RRdWVyeSAqcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSBhcGksIGNvbnN0IEdzdFN0cnVjdHVyZSAqcGFyYW1zKTsKLQotICAvKiBwcm9wb3NlIGFsbG9jYXRpb24gcXVlcnkgcGFyYW1ldGVycyBmb3IgaW5wdXQgYnVmZmVycyAqLwotICBnYm9vbGVhbiAgICAgICgqcHJvcG9zZV9hbGxvY2F0aW9uKSAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdFF1ZXJ5ICpkZWNpZGVfcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAqcXVlcnkpOwotCi0gIC8qIHRyYW5zZm9ybSBzaXplICovCi0gIGdib29sZWFuICAgICAgKCp0cmFuc2Zvcm1fc2l6ZSkgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpjYXBzLCBnc2l6ZSBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpvdGhlcmNhcHMsIGdzaXplICpvdGhlcnNpemUpOwotCi0gIGdib29sZWFuICAgICAgKCpnZXRfdW5pdF9zaXplKSAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RDYXBzICpjYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqc2l6ZSk7Ci0KLSAgLyogc3RhdGVzICovCi0gIGdib29sZWFuICAgICAgKCpzdGFydCkgICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucyk7Ci0gIGdib29sZWFuICAgICAgKCpzdG9wKSAgICAgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucyk7Ci0KLSAgLyogc2luayBhbmQgc3JjIHBhZCBldmVudCBoYW5kbGVycyAqLwotICBnYm9vbGVhbiAgICAgICgqc2lua19ldmVudCkgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsIEdzdEV2ZW50ICpldmVudCk7Ci0gIGdib29sZWFuICAgICAgKCpzcmNfZXZlbnQpICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0RXZlbnQgKmV2ZW50KTsKLQotICBHc3RGbG93UmV0dXJuICgqcHJlcGFyZV9vdXRwdXRfYnVmZmVyKSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICppbnB1dCwgR3N0QnVmZmVyICoqb3V0YnVmKTsKLQotICAvKiBtZXRhZGF0YSAqLwotICBnYm9vbGVhbiAgICAgICgqY29weV9tZXRhZGF0YSkgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICpvdXRidWYpOwotICBnYm9vbGVhbiAgICAgICgqdHJhbnNmb3JtX21ldGEpICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICpvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1ldGEgKm1ldGEsIEdzdEJ1ZmZlciAqaW5idWYpOwotCi0gIHZvaWQgICAgICAgICAgKCpiZWZvcmVfdHJhbnNmb3JtKSAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0KLSAgLyogdHJhbnNmb3JtICovCi0gIEdzdEZsb3dSZXR1cm4gKCp0cmFuc2Zvcm0pICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICppbmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqb3V0YnVmKTsKLSAgR3N0Rmxvd1JldHVybiAoKnRyYW5zZm9ybV9pcCkgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLCBHc3RCdWZmZXIgKmJ1Zik7Ci0KLSAgR3N0Rmxvd1JldHVybiAoKnN1Ym1pdF9pbnB1dF9idWZmZXIpIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgZ2Jvb2xlYW4gaXNfZGlzY29udCwgR3N0QnVmZmVyICppbnB1dCk7Ci0gIEdzdEZsb3dSZXR1cm4gKCpnZW5lcmF0ZV9vdXRwdXQpIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywgR3N0QnVmZmVyICoqb3V0YnVmKTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgICAgICAgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR19MQVJHRSAtIDJdOwotfTsKLQotR1R5cGUgICAgICAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdHlwZSAgICAgICAgICh2b2lkKTsKLQotdm9pZAkJZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHBhc3N0aHJvdWdoKTsKLWdib29sZWFuCWdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaCAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucyk7Ci0KLXZvaWQJCWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5fcGxhY2UgICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBpbl9wbGFjZSk7Ci1nYm9vbGVhbglnc3RfYmFzZV90cmFuc2Zvcm1faXNfaW5fcGxhY2UgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMpOwotCi12b2lkCQlnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvcyAgICAgICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsCi0JCQkJCQkgICAgIGdkb3VibGUgcHJvcG9ydGlvbiwKLQkJCQkJCSAgICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmLAotCQkJCQkJICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKTsKLXZvaWQJCWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGVuYWJsZWQpOwotZ2Jvb2xlYW4JZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Fvc19lbmFibGVkICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlICAgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZ2FwX2F3YXJlKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcHJlZmVyX3Bhc3N0aHJvdWdoIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gcHJlZmVyX3Bhc3N0aHJvdWdoKTsKLQotR3N0QnVmZmVyUG9vbCAqIGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYnVmZmVyX3Bvb2wgIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucyk7Ci12b2lkICAgICAgICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9hbGxvY2F0b3IgICAgKEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBbGxvY2F0b3IgKiphbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKnBhcmFtcyk7Ci0KLXZvaWQJCWdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rIChHc3RCYXNlVHJhbnNmb3JtICp0cmFucyk7Ci12b2lkCQlnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc3JjICAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMpOwotZ2Jvb2xlYW4gZ3N0X2Jhc2VfdHJhbnNmb3JtX3VwZGF0ZV9zcmNfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqdHJhbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICp1cGRhdGVkX2NhcHMpOwotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RCYXNlVHJhbnNmb3JtLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9CQVNFX1RSQU5TRk9STV9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLWRvY3MuaCBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLWRvY3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4NDJkNi4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci1kb2NzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyogR1N0cmVhbWVyIGJpdCByZWFkZXIgZHVtbXkgaGVhZGVyIGZvciBndGstZG9jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogVGhpcyBoZWFkZXIgaXMgbm90IGluc3RhbGxlZCwgaXQganVzdCBjb250YWlucyBzdHVmZiBmb3IgZ3RrLWRvYyB0byBwYXJzZSwKLSAqIGluIHBhcnRpY3VsYXIgZG9jcyBhbmQgc29tZSBkdW1teSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBzdGF0aWMKLSAqIGlubGluZSBmdW5jdGlvbnMgd2UgZ2VuZXJhdGUgdmlhIG1hY3JvcyBpbiBnc3RiaXRyZWFkZXIuaC4KLSAqLwotCi0jZXJyb3IgIlRoaXMgaGVhZGVyIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBpbiBjb2RlLCBpdCBpcyBvbmx5IGZvciBndGstZG9jIgotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAbmJpdHM6IHRoZSBudW1iZXIgb2YgYml0cyB0byBza2lwCi0gKgotICogU2tpcHMgQG5iaXRzIGJpdHMgb2YgdGhlICNHc3RCaXRSZWFkZXIgaW5zdGFuY2Ugd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZQotICogYXJlIGVub3VnaCBiaXRzIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlci4KLSAqLwotdm9pZCBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICogcmVhZGVyLCBndWludCBuYml0cyk7Ci0KLS8qKgotICogZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICoKLSAqIFNraXBzIHVudGlsIHRoZSBuZXh0IGJ5dGUgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMKLSAqIGF2YWlsYWJsZSBpbiB0aGUgYml0IHJlYWRlci4KLSAqLwotdm9pZCBnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkIChHc3RCaXRSZWFkZXIgKiByZWFkZXIpOwotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICogQG5iaXRzOiBudW1iZXIgb2YgYml0cyB0byByZWFkCi0gKgotICogUmVhZCBAbmJpdHMgYml0cyBpbnRvIEB2YWwgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyLgotICoKLSAqIFJldHVybnM6IHVuc2lnbmVkIDggYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KLSAqLwotZ3VpbnQ4IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDhfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgOCBiaXQgaW50ZWdlciB3aXRoIHRoZSBiaXRzLgotICovCi1ndWludDggZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTZfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgMTYgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KLSAqLwotZ3VpbnQxNiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTZfdW5jaGVja2VkIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQgbmJpdHMpOwotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgMTYgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KLSAqLwotZ3VpbnQxNiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2X3VuY2hlY2tlZCAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgMzIgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KLSAqLwotZ3VpbnQzMiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzJfdW5jaGVja2VkIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQgbmJpdHMpOwotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzJfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgMzIgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KLSAqLwotZ3VpbnQzMiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX3VuY2hlY2tlZCAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYml0cyBhdmFpbGFibGUgaW4gdGhlIGJpdCByZWFkZXIuCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgNjQgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KLSAqLwotZ3VpbnQ2NCBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50NjRfdW5jaGVja2VkIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQgbmJpdHMpOwotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbiB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJpdHMgYXZhaWxhYmxlIGluIHRoZSBiaXQgcmVhZGVyCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgNjQgYml0IGludGVnZXIgd2l0aCB0aGUgYml0cy4KLSAqLwotZ3VpbnQ2NCBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0X3VuY2hlY2tlZCAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKLQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NzkzNzIuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2RlZmluZSBHU1RfQklUX1JFQURFUl9ESVNBQkxFX0lOTElORVMKLSNpbmNsdWRlICJnc3RiaXRyZWFkZXIuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKioKLSAqIFNFQ1RJT046Z3N0Yml0cmVhZGVyCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFJlYWRzIGFueSBudW1iZXIgb2YgYml0cyBmcm9tIGEgbWVtb3J5IGJ1ZmZlcgotICoKLSAqICNHc3RCaXRSZWFkZXIgcHJvdmlkZXMgYSBiaXQgcmVhZGVyIHRoYXQgY2FuIHJlYWQgYW55IG51bWJlciBvZiBiaXRzCi0gKiBmcm9tIGEgbWVtb3J5IGJ1ZmZlci4gSXQgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFueSBudW1iZXIgb2YgYml0cwotICogaW50byA4LCAxNiwgMzIgYW5kIDY0IGJpdCB2YXJpYWJsZXMuCi0gKi8KLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9uZXc6IChza2lwKQotICogQGRhdGE6IChhcnJheSBsZW5ndGg9c2l6ZSk6IERhdGEgZnJvbSB3aGljaCB0aGUgI0dzdEJpdFJlYWRlcgotICogICBzaG91bGQgcmVhZAotICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKLSAqCi0gKiBDcmVhdGUgYSBuZXcgI0dzdEJpdFJlYWRlciBpbnN0YW5jZSwgd2hpY2ggd2lsbCByZWFkIGZyb20gQGRhdGEuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2JpdF9yZWFkZXJfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICovCi1Hc3RCaXRSZWFkZXIgKgotZ3N0X2JpdF9yZWFkZXJfbmV3IChjb25zdCBndWludDggKiBkYXRhLCBndWludCBzaXplKQotewotICBHc3RCaXRSZWFkZXIgKnJldCA9IGdfc2xpY2VfbmV3MCAoR3N0Qml0UmVhZGVyKTsKLQotICByZXQtPmRhdGEgPSBkYXRhOwotICByZXQtPnNpemUgPSBzaXplOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2JpdF9yZWFkZXJfZnJlZToKLSAqIEByZWFkZXI6IChpbikgKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBGcmVlcyBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UsIHdoaWNoIHdhcyBwcmV2aW91c2x5IGFsbG9jYXRlZCBieQotICogZ3N0X2JpdF9yZWFkZXJfbmV3KCkuCi0gKi8KLXZvaWQKLWdzdF9iaXRfcmVhZGVyX2ZyZWUgKEdzdEJpdFJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAocmVhZGVyICE9IE5VTEwpOwotCi0gIGdfc2xpY2VfZnJlZSAoR3N0Qml0UmVhZGVyLCByZWFkZXIpOwotfQotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX2luaXQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKLSAqIEBkYXRhOiAoaW4pIChhcnJheSBsZW5ndGg9c2l6ZSk6IGRhdGEgZnJvbSB3aGljaCB0aGUgYml0IHJlYWRlciBzaG91bGQgcmVhZAotICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKLSAqCi0gKiBJbml0aWFsaXplcyBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UgdG8gcmVhZCBmcm9tIEBkYXRhLiBUaGlzIGZ1bmN0aW9uCi0gKiBjYW4gYmUgY2FsbGVkIG9uIGFscmVhZHkgaW5pdGlhbGl6ZWQgaW5zdGFuY2VzLgotICovCi12b2lkCi1nc3RfYml0X3JlYWRlcl9pbml0IChHc3RCaXRSZWFkZXIgKiByZWFkZXIsIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMKTsKLQotICByZWFkZXItPmRhdGEgPSBkYXRhOwotICByZWFkZXItPnNpemUgPSBzaXplOwotICByZWFkZXItPmJ5dGUgPSByZWFkZXItPmJpdCA9IDA7Ci19Ci0KLS8qKgotICogZ3N0X2JpdF9yZWFkZXJfc2V0X3BvczoKLSAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICogQHBvczogVGhlIG5ldyBwb3NpdGlvbiBpbiBiaXRzCi0gKgotICogU2V0cyB0aGUgbmV3IHBvc2l0aW9uIG9mIGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZSB0byBAcG9zIGluIGJpdHMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIHNldCBzdWNjZXNzZnVsbHksICVGQUxTRQotICogb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2JpdF9yZWFkZXJfc2V0X3BvcyAoR3N0Qml0UmVhZGVyICogcmVhZGVyLCBndWludCBwb3MpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChwb3MgPiByZWFkZXItPnNpemUgKiA4KQotICAgIHJldHVybiBGQUxTRTsKLQotICByZWFkZXItPmJ5dGUgPSBwb3MgLyA4OwotICByZWFkZXItPmJpdCA9IHBvcyAlIDg7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvczoKLSAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlIGluIGJpdHMuCi0gKgotICogUmV0dXJuczogVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgQHJlYWRlciBpbiBiaXRzLgotICovCi1ndWludAotZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoY29uc3QgR3N0Qml0UmVhZGVyICogcmVhZGVyKQotewotICByZXR1cm4gX2dzdF9iaXRfcmVhZGVyX2dldF9wb3NfaW5saW5lIChyZWFkZXIpOwotfQotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmc6Ci0gKiBAcmVhZGVyOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZXR1cm5zIHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJpdHMgb2YgYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlLgotICoKLSAqIFJldHVybnM6IFRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJpdHMgb2YgQHJlYWRlciBpbnN0YW5jZS4KLSAqLwotZ3VpbnQKLWdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgKGNvbnN0IEdzdEJpdFJlYWRlciAqIHJlYWRlcikKLXsKLSAgcmV0dXJuIF9nc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nX2lubGluZSAocmVhZGVyKTsKLX0KLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9nZXRfc2l6ZToKLSAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIG9mIGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgb2YgQHJlYWRlciBpbnN0YW5jZS4KLSAqLwotZ3VpbnQKLWdzdF9iaXRfcmVhZGVyX2dldF9zaXplIChjb25zdCBHc3RCaXRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiBfZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemVfaW5saW5lIChyZWFkZXIpOwotfQotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX3NraXA6Ci0gKiBAcmVhZGVyOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKLSAqIEBuYml0czogdGhlIG51bWJlciBvZiBiaXRzIHRvIHNraXAKLSAqCi0gKiBTa2lwcyBAbmJpdHMgYml0cyBvZiB0aGUgI0dzdEJpdFJlYWRlciBpbnN0YW5jZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAbmJpdHMgYml0cyBjb3VsZCBiZSBza2lwcGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2JpdF9yZWFkZXJfc2tpcCAoR3N0Qml0UmVhZGVyICogcmVhZGVyLCBndWludCBuYml0cykKLXsKLSAgcmV0dXJuIF9nc3RfYml0X3JlYWRlcl9za2lwX2lubGluZSAocmVhZGVyLCBuYml0cyk7Ci19Ci0KLS8qKgotICogZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKgotICogU2tpcHMgdW50aWwgdGhlIG5leHQgYnl0ZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlIChHc3RCaXRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiBfZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlX2lubGluZSAocmVhZGVyKTsKLX0KLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50ODoKLSAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAotICoKLSAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNjoKLSAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQxNiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKiBAbmJpdHM6IG51bWJlciBvZiBiaXRzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIEBuYml0cyBiaXRzIGludG8gQHZhbCBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzI6Ci0gKiBAcmVhZGVyOiBhICNHc3RCaXRSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAotICogQG5iaXRzOiBudW1iZXIgb2YgYml0cyB0byByZWFkCi0gKgotICogUmVhZCBAbmJpdHMgYml0cyBpbnRvIEB2YWwgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0OgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAotICoKLSAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50ODoKLSAqIEByZWFkZXI6IGEgI0dzdEJpdFJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAotICoKLSAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2OgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAotICoKLSAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyOgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDMyIHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAotICoKLSAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDY0OgotICogQHJlYWRlcjogYSAjR3N0Qml0UmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqIEBuYml0czogbnVtYmVyIG9mIGJpdHMgdG8gcmVhZAotICoKLSAqIFJlYWQgQG5iaXRzIGJpdHMgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotI2RlZmluZSBHU1RfQklUX1JFQURFUl9SRUFEX0JJVFMoYml0cykgXAotZ2Jvb2xlYW4gXAotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQjI2JpdHMgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludCMjYml0cyAqdmFsLCBndWludCBuYml0cykgXAoteyBcCi0gIHJldHVybiBfZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQjI2JpdHMjI19pbmxpbmUgKHJlYWRlciwgdmFsLCBuYml0cyk7IFwKLX0gXAotXAotZ2Jvb2xlYW4gXAotZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludCMjYml0cyAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IyNiaXRzICp2YWwsIGd1aW50IG5iaXRzKSBcCi17IFwKLSAgcmV0dXJuIF9nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIyNfaW5saW5lIChyZWFkZXIsIHZhbCwgbmJpdHMpOyBcCi19Ci0KLUdTVF9CSVRfUkVBREVSX1JFQURfQklUUyAoOCk7Ci1HU1RfQklUX1JFQURFUl9SRUFEX0JJVFMgKDE2KTsKLUdTVF9CSVRfUkVBREVSX1JFQURfQklUUyAoMzIpOwotR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTICg2NCk7CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oIGIvbGlicy9nc3QvYmFzZS9nc3RiaXRyZWFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQwYTdhMy4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGJpdHJlYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9CSVRfUkVBREVSX0hfXwotI2RlZmluZSBfX0dTVF9CSVRfUkVBREVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0vKiBGSVhNRTogaW5saW5lIGZ1bmN0aW9ucyAqLwotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX0JJVF9SRUFERVIocmVhZGVyKSAoKEdzdEJpdFJlYWRlciAqKSAocmVhZGVyKSkKLQotLyoqCi0gKiBHc3RCaXRSZWFkZXI6Ci0gKiBAZGF0YTogKGFycmF5IGxlbmd0aD1zaXplKTogRGF0YSBmcm9tIHdoaWNoIHRoZSBiaXQgcmVhZGVyIHdpbGwKLSAqICAgcmVhZAotICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKLSAqIEBieXRlOiBDdXJyZW50IGJ5dGUgcG9zaXRpb24KLSAqIEBiaXQ6IEJpdCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBieXRlCi0gKgotICogQSBiaXQgcmVhZGVyIGluc3RhbmNlLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgc2l6ZTsKLQotICBndWludCBieXRlOyAgLyogQnl0ZSBwb3NpdGlvbiAqLwotICBndWludCBiaXQ7ICAgLyogQml0IHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IGJ5dGUgKi8KLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX0gR3N0Qml0UmVhZGVyOwotCi1Hc3RCaXRSZWFkZXIgKiAgZ3N0X2JpdF9yZWFkZXJfbmV3ICAgICAgICAgICAgICAoY29uc3QgZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX2ZyZWUgICAgICAgICAgICAgKEdzdEJpdFJlYWRlciAqcmVhZGVyKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9iaXRfcmVhZGVyX2luaXQgICAgICAgICAgICAgKEdzdEJpdFJlYWRlciAqcmVhZGVyLCBjb25zdCBndWludDggKmRhdGEsIGd1aW50IHNpemUpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2JpdF9yZWFkZXJfc2V0X3BvcyAgICAgICAgICAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IHBvcyk7Ci1ndWludCAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAgICAgICAgICAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIpOwotCi1ndWludCAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyAgICAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIpOwotCi1ndWludCAgICAgICAgICAgZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemUgICAgICAgICAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2JpdF9yZWFkZXJfc2tpcCAgICAgICAgICAgICAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IG5iaXRzKTsKLWdib29sZWFuICAgICAgICBnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUgICAgIChHc3RCaXRSZWFkZXIgKnJlYWRlcik7Ci0KLWdib29sZWFuICAgICAgICBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAgIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQ4ICp2YWwsIGd1aW50IG5iaXRzKTsKLWdib29sZWFuICAgICAgICBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTYgIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQxNiAqdmFsLCBndWludCBuYml0cyk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyICAoR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50MzIgKnZhbCwgZ3VpbnQgbmJpdHMpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ2NCAgKEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludDY0ICp2YWwsIGd1aW50IG5iaXRzKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OCAgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludDggKnZhbCwgZ3VpbnQgbmJpdHMpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTYgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludDE2ICp2YWwsIGd1aW50IG5iaXRzKTsKLWdib29sZWFuICAgICAgICBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyIChjb25zdCBHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsLCBndWludCBuYml0cyk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NCAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50NjQgKnZhbCwgZ3VpbnQgbmJpdHMpOwotCi0vKioKLSAqIEdTVF9CSVRfUkVBREVSX0lOSVQ6Ci0gKiBAZGF0YTogRGF0YSBmcm9tIHdoaWNoIHRoZSAjR3N0Qml0UmVhZGVyIHNob3VsZCByZWFkCi0gKiBAc2l6ZTogU2l6ZSBvZiBAZGF0YSBpbiBieXRlcwotICoKLSAqIEEgI0dzdEJpdFJlYWRlciBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggdGhpcyBtYWNybywgYmVmb3JlIGl0IGNhbiBiZQotICogdXNlZC4gVGhpcyBtYWNybyBjYW4gdXNlZCBiZSB0byBpbml0aWFsaXplIGEgdmFyaWFibGUsIGJ1dCBpdCBjYW5ub3QKLSAqIGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUuIEluIHRoYXQgY2FzZSB5b3UgaGF2ZSB0byB1c2UKLSAqIGdzdF9iaXRfcmVhZGVyX2luaXQoKS4KLSAqLwotI2RlZmluZSBHU1RfQklUX1JFQURFUl9JTklUKGRhdGEsIHNpemUpIHtkYXRhLCBzaXplLCAwLCAwfQotCi0vKiBVbmNoZWNrZWQgdmFyaWFudHMgKi8KLQotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoR3N0Qml0UmVhZGVyICogcmVhZGVyLCBndWludCBuYml0cykKLXsKLSAgcmVhZGVyLT5iaXQgKz0gbmJpdHM7Ci0gIHJlYWRlci0+Ynl0ZSArPSByZWFkZXItPmJpdCAvIDg7Ci0gIHJlYWRlci0+Yml0ID0gcmVhZGVyLT5iaXQgJSA4OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV91bmNoZWNrZWQgKEdzdEJpdFJlYWRlciAqIHJlYWRlcikKLXsKLSAgaWYgKHJlYWRlci0+Yml0KSB7Ci0gICAgcmVhZGVyLT5iaXQgPSAwOwotICAgIHJlYWRlci0+Ynl0ZSsrOwotICB9Ci19Ci0KLSNkZWZpbmUgX19HU1RfQklUX1JFQURFUl9SRUFEX0JJVFNfVU5DSEVDS0VEKGJpdHMpIFwKLXN0YXRpYyBpbmxpbmUgZ3VpbnQjI2JpdHMgXAotZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQjI2JpdHMjI191bmNoZWNrZWQgKGNvbnN0IEdzdEJpdFJlYWRlciAqcmVhZGVyLCBndWludCBuYml0cykgXAoteyBcCi0gIGd1aW50IyNiaXRzIHJldCA9IDA7IFwKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOyBcCi0gIGd1aW50IGJ5dGUsIGJpdDsgXAotICBcCi0gIGRhdGEgPSByZWFkZXItPmRhdGE7IFwKLSAgYnl0ZSA9IHJlYWRlci0+Ynl0ZTsgXAotICBiaXQgPSByZWFkZXItPmJpdDsgXAotICBcCi0gIHdoaWxlIChuYml0cyA+IDApIHsgXAotICAgIGd1aW50IHRvcmVhZCA9IE1JTiAobmJpdHMsIDggLSBiaXQpOyBcCi0gICAgXAotICAgIHJldCA8PD0gdG9yZWFkOyBcCi0gICAgcmV0IHw9IChkYXRhW2J5dGVdICYgKDB4ZmYgPj4gYml0KSkgPj4gKDggLSB0b3JlYWQgLSBiaXQpOyBcCi0gICAgXAotICAgIGJpdCArPSB0b3JlYWQ7IFwKLSAgICBpZiAoYml0ID49IDgpIHsgXAotICAgICAgYnl0ZSsrOyBcCi0gICAgICBiaXQgPSAwOyBcCi0gICAgfSBcCi0gICAgbmJpdHMgLT0gdG9yZWFkOyBcCi0gIH0gXAotICBcCi0gIHJldHVybiByZXQ7IFwKLX0gXAotXAotc3RhdGljIGlubGluZSBndWludCMjYml0cyBcCi1nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIyNfdW5jaGVja2VkIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQgbmJpdHMpIFwKLXsgXAotICBndWludCMjYml0cyByZXQ7IFwKLSAgXAotICByZXQgPSBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludCMjYml0cyMjX3VuY2hlY2tlZCAocmVhZGVyLCBuYml0cyk7IFwKLSAgXAotICBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAocmVhZGVyLCBuYml0cyk7IFwKLSAgXAotICByZXR1cm4gcmV0OyBcCi19Ci0KLV9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX1VOQ0hFQ0tFRCAoOCkKLV9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX1VOQ0hFQ0tFRCAoMTYpCi1fX0dTVF9CSVRfUkVBREVSX1JFQURfQklUU19VTkNIRUNLRUQgKDMyKQotX19HU1RfQklUX1JFQURFUl9SRUFEX0JJVFNfVU5DSEVDS0VEICg2NCkKLQotI3VuZGVmIF9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX1VOQ0hFQ0tFRAotCi0vKiB1bmNoZWNrZWQgdmFyaWFudHMgLS0gZG8gbm90IHVzZSAqLwotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1fZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemVfdW5jaGVja2VkIChjb25zdCBHc3RCaXRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiByZWFkZXItPnNpemUgKiA4OwotfQotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1fZ3N0X2JpdF9yZWFkZXJfZ2V0X3Bvc191bmNoZWNrZWQgKGNvbnN0IEdzdEJpdFJlYWRlciAqIHJlYWRlcikKLXsKLSAgcmV0dXJuIHJlYWRlci0+Ynl0ZSAqIDggKyByZWFkZXItPmJpdDsKLX0KLQotc3RhdGljIGlubGluZSBndWludAotX2dzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChjb25zdCBHc3RCaXRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiByZWFkZXItPnNpemUgKiA4IC0gKHJlYWRlci0+Ynl0ZSAqIDggKyByZWFkZXItPmJpdCk7Ci19Ci0KLS8qIGlubGluZWQgdmFyaWFudHMgLS0gZG8gbm90IHVzZSBkaXJlY3RseSAqLwotc3RhdGljIGlubGluZSBndWludAotX2dzdF9iaXRfcmVhZGVyX2dldF9zaXplX2lubGluZSAoY29uc3QgR3N0Qml0UmVhZGVyICogcmVhZGVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIDApOwotCi0gIHJldHVybiBfZ3N0X2JpdF9yZWFkZXJfZ2V0X3NpemVfdW5jaGVja2VkIChyZWFkZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1fZ3N0X2JpdF9yZWFkZXJfZ2V0X3Bvc19pbmxpbmUgKGNvbnN0IEdzdEJpdFJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCAwKTsKLQotICByZXR1cm4gX2dzdF9iaXRfcmVhZGVyX2dldF9wb3NfdW5jaGVja2VkIChyZWFkZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1fZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ19pbmxpbmUgKGNvbnN0IEdzdEJpdFJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCAwKTsKLQotICByZXR1cm4gX2dzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fZ3N0X2JpdF9yZWFkZXJfc2tpcF9pbmxpbmUgKEdzdEJpdFJlYWRlciAqIHJlYWRlciwgZ3VpbnQgbmJpdHMpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ191bmNoZWNrZWQgKHJlYWRlcikgPCBuYml0cykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKHJlYWRlciwgbmJpdHMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlX2lubGluZSAoR3N0Qml0UmVhZGVyICogcmVhZGVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAocmVhZGVyLT5ieXRlID4gcmVhZGVyLT5zaXplKQotICAgIHJldHVybiBGQUxTRTsKLQotICBnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGVfdW5jaGVja2VkIChyZWFkZXIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0jZGVmaW5lIF9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX0lOTElORShiaXRzKSBcCi1zdGF0aWMgaW5saW5lIGdib29sZWFuIFwKLV9nc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIyNfaW5saW5lIChHc3RCaXRSZWFkZXIgKnJlYWRlciwgZ3VpbnQjI2JpdHMgKnZhbCwgZ3VpbnQgbmJpdHMpIFwKLXsgXAotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsgXAotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsICE9IE5VTEwsIEZBTFNFKTsgXAotICBnX3JldHVybl92YWxfaWZfZmFpbCAobmJpdHMgPD0gYml0cywgRkFMU0UpOyBcCi0gIFwKLSAgaWYgKF9nc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nX3VuY2hlY2tlZCAocmVhZGVyKSA8IG5iaXRzKSBcCi0gICAgcmV0dXJuIEZBTFNFOyBcCi1cCi0gICp2YWwgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIyNfdW5jaGVja2VkIChyZWFkZXIsIG5iaXRzKTsgXAotICByZXR1cm4gVFJVRTsgXAotfSBcCi1cCi1zdGF0aWMgaW5saW5lIGdib29sZWFuIFwKLV9nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludCMjYml0cyMjX2lubGluZSAoY29uc3QgR3N0Qml0UmVhZGVyICpyZWFkZXIsIGd1aW50IyNiaXRzICp2YWwsIGd1aW50IG5iaXRzKSBcCi17IFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCBGQUxTRSk7IFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbCAhPSBOVUxMLCBGQUxTRSk7IFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5iaXRzIDw9IGJpdHMsIEZBTFNFKTsgXAotICBcCi0gIGlmIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ191bmNoZWNrZWQgKHJlYWRlcikgPCBuYml0cykgXAotICAgIHJldHVybiBGQUxTRTsgXAotXAotICAqdmFsID0gZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQjI2JpdHMjI191bmNoZWNrZWQgKHJlYWRlciwgbmJpdHMpOyBcCi0gIHJldHVybiBUUlVFOyBcCi19Ci0KLV9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX0lOTElORSAoOCkKLV9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX0lOTElORSAoMTYpCi1fX0dTVF9CSVRfUkVBREVSX1JFQURfQklUU19JTkxJTkUgKDMyKQotX19HU1RfQklUX1JFQURFUl9SRUFEX0JJVFNfSU5MSU5FICg2NCkKLQotI3VuZGVmIF9fR1NUX0JJVF9SRUFERVJfUkVBRF9CSVRTX0lOTElORQotCi0jaWZuZGVmIEdTVF9CSVRfUkVBREVSX0RJU0FCTEVfSU5MSU5FUwotCi0jZGVmaW5lIGdzdF9iaXRfcmVhZGVyX2dldF9zaXplKHJlYWRlcikgXAotICAgIF9nc3RfYml0X3JlYWRlcl9nZXRfc2l6ZV9pbmxpbmUgKHJlYWRlcikKLSNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyhyZWFkZXIpIFwKLSAgICBfZ3N0X2JpdF9yZWFkZXJfZ2V0X3Bvc19pbmxpbmUgKHJlYWRlcikKLSNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyhyZWFkZXIpIFwKLSAgICBfZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZ19pbmxpbmUgKHJlYWRlcikKLQotLyogd2UgdXNlIGRlZmluZXMgaGVyZSBzbyB3ZSBjYW4gYWRkIHRoZSBHX0xJS0VMWSgpICovCi0KLSNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfc2tpcChyZWFkZXIsIG5iaXRzKVwKLSAgICBHX0xJS0VMWSAoX2dzdF9iaXRfcmVhZGVyX3NraXBfaW5saW5lKHJlYWRlciwgbmJpdHMpKQotI2RlZmluZSBnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUocmVhZGVyKVwKLSAgICBHX0xJS0VMWSAoX2dzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZV9pbmxpbmUocmVhZGVyKSkKLQotI2RlZmluZSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OChyZWFkZXIsIHZhbCwgbmJpdHMpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKLSNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2KHJlYWRlciwgdmFsLCBuYml0cykgXAotICAgIEdfTElLRUxZIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKLSNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyKHJlYWRlciwgdmFsLCBuYml0cykgXAotICAgIEdfTElLRUxZIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyX2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKLSNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0KHJlYWRlciwgdmFsLCBuYml0cykgXAotICAgIEdfTElLRUxZIChfZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0X2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKLQotI2RlZmluZSBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDgocmVhZGVyLCB2YWwsIG5iaXRzKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDhfaW5saW5lIChyZWFkZXIsIHZhbCwgbmJpdHMpKQotI2RlZmluZSBnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDE2KHJlYWRlciwgdmFsLCBuYml0cykgXAotICAgIEdfTElLRUxZIChfZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNl9pbmxpbmUgKHJlYWRlciwgdmFsLCBuYml0cykpCi0jZGVmaW5lIGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MzIocmVhZGVyLCB2YWwsIG5iaXRzKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyX2lubGluZSAocmVhZGVyLCB2YWwsIG5iaXRzKSkKLSNkZWZpbmUgZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NChyZWFkZXIsIHZhbCwgbmJpdHMpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50NjRfaW5saW5lIChyZWFkZXIsIHZhbCwgbmJpdHMpKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9CSVRfUkVBREVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLWRvY3MuaCBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci1kb2NzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2Njk1NGYuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLWRvY3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1MiArMCwwIEBACi0vKiBHU3RyZWFtZXIgYnl0ZSByZWFkZXIgZHVtbXkgaGVhZGVyIGZvciBndGstZG9jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBUaGlzIGhlYWRlciBpcyBub3QgaW5zdGFsbGVkLCBpdCBqdXN0IGNvbnRhaW5zIHN0dWZmIGZvciBndGstZG9jIHRvIHBhcnNlLAotICogaW4gcGFydGljdWxhciBkb2NzIGFuZCBzb21lIGR1bW15IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhlIHN0YXRpYwotICogaW5saW5lIGZ1bmN0aW9ucyB3ZSBnZW5lcmF0ZSB2aWEgbWFjcm9zIGluIGdzdGJ5dGVyZWFkZXIuaC4KLSAqLwotCi0jZXJyb3IgIlRoaXMgaGVhZGVyIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBpbiBjb2RlLCBpdCBpcyBvbmx5IGZvciBndGstZG9jIgotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEBuYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcAotICoKLSAqIFNraXBzIEBuYnl0ZXMgYnl0ZXMgb2YgdGhlICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlIHdpdGhvdXQgY2hlY2tpbmcgaWYKLSAqIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlci4KLSAqLwotdm9pZCBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IG5ieXRlcyk7Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhbiB1bnNpZ25lZCA4IGJpdCBpbnRlZ2VyIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcwotICogYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHVuc2lnbmVkIDggYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDhfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgOCBiaXQgaW50ZWdlciB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMKLSAqIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZSB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHVuc2lnbmVkIDggYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4X3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGFuIHNpZ25lZCA4IGJpdCBpbnRlZ2VyIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcwotICogYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHNpZ25lZCA4IGJpdCBpbnRlZ2VyLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDhfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYW4gc2lnbmVkIDggYml0IGludGVnZXIgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzCi0gKiBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBzaWduZWQgOCBiaXQgaW50ZWdlci4KLSAqLwotZ3VpbnQ4ICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAgICAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ3VpbnQ4ICBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF91bmNoZWNrZWQgICAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2ludDggICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDhfdW5jaGVja2VkICAgICAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2ludDggICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X3VuY2hlY2tlZCAgICAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotICogY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlci4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfbGVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgMTYgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKLSAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotICogY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiB1bnNpZ25lZCAxNiBiaXQgaW50ZWdlci4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgMTYgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKLSAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi0gKiBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHNpZ25lZCAxNiBiaXQgaW50ZWdlci4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhIHNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYSBzaWduZWQgMTYgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi0gKiBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHNpZ25lZCAxNiBiaXQgaW50ZWdlci4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhIHNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgotICovCi1ndWludDE2IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlX3VuY2hlY2tlZCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ3VpbnQxNiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZV91bmNoZWNrZWQgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWd1aW50MTYgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1ndWludDE2IGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2ludDE2ICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlX3VuY2hlY2tlZCAgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWdpbnQxNiAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV91bmNoZWNrZWQgICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1naW50MTYgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlX3VuY2hlY2tlZCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2ludDE2ICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZV91bmNoZWNrZWQgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLSAqIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgMjQgYml0IGludGVnZXIgKGFzIGd1aW50MzIpCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi0gKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ3VpbnQzMikKLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLSAqIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgMjQgYml0IGludGVnZXIgKGFzIGd1aW50MzIpCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi0gKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiB1bnNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ3VpbnQzMikKLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotICogY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBzaWduZWQgMjQgYml0IGludGVnZXIgKGFzIGdpbnQzMikKLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBnaW50MzIpCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhIHNpZ25lZCAyNCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLSAqIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogc2lnbmVkIDI0IGJpdCBpbnRlZ2VyIChhcyBnaW50MzIpCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYSBzaWduZWQgMjQgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKLSAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHNpZ25lZCAyNCBiaXQgaW50ZWdlciAoYXMgZ2ludDMyKQotICovCi1ndWludDMyIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlX3VuY2hlY2tlZCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ3VpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZV91bmNoZWNrZWQgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWd1aW50MzIgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1ndWludDMyIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9iZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2ludDMyICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlX3VuY2hlY2tlZCAgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWdpbnQzMiAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV91bmNoZWNrZWQgICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1naW50MzIgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX3VuY2hlY2tlZCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2ludDMyICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV91bmNoZWNrZWQgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLSAqIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgMzIgYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi0gKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLSAqIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgMzIgYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi0gKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotICogY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBzaWduZWQgMzIgYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYSBzaWduZWQgMzIgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKLSAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHNpZ25lZCAzMiBiaXQgaW50ZWdlci4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciBhbmQgdXBkYXRlIHRoZQotICogY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBzaWduZWQgMzIgYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYSBzaWduZWQgMzIgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyLCBidXQgZG8gbm90IGFkdmFuY2UKLSAqIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHNpZ25lZCAzMiBiaXQgaW50ZWdlci4KLSAqLwotZ3VpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZV91bmNoZWNrZWQgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWd1aW50MzIgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1ndWludDMyIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ3VpbnQzMiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWdpbnQzMiAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZV91bmNoZWNrZWQgICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1naW50MzIgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmVfdW5jaGVja2VkICAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2ludDMyICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZV91bmNoZWNrZWQgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWdpbnQzMiAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmVfdW5jaGVja2VkICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGludGVnZXIgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi0gKiBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9sZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgNjQgYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGludGVnZXIgaW4gYmlnIGVuZGlhbiBmb3JtYXQgd2l0aG91dCBjaGVja2luZwotICogaWYgdGhlcmUgYXJlIGVub3VnaCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgcmVhZGVyIGFuZCB1cGRhdGUgdGhlCi0gKiBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIsIGJ1dCBkbyBub3QgYWR2YW5jZQotICogdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogdW5zaWduZWQgNjQgYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhIHNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLSAqIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi0gKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBzaWduZWQgNjQgYml0IGludGVnZXIuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhIHNpZ25lZCA2NCBiaXQgaW50ZWdlciBpbiBiaWcgZW5kaWFuIGZvcm1hdCB3aXRob3V0IGNoZWNraW5nCi0gKiBpZiB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSByZWFkZXIgYW5kIHVwZGF0ZSB0aGUKLSAqIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogc2lnbmVkIDY0IGJpdCBpbnRlZ2VyLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGluIGJpZyBlbmRpYW4gZm9ybWF0IHdpdGhvdXQgY2hlY2tpbmcKLSAqIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBieXRlIHJlYWRlciwgYnV0IGRvIG5vdCBhZHZhbmNlCi0gKiB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBzaWduZWQgNjQgYml0IGludGVnZXIuCi0gKi8KLWd1aW50NjQgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGVfdW5jaGVja2VkICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1ndWludDY0IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ3VpbnQ2NCBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWd1aW50NjQgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1naW50NjQgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGVfdW5jaGVja2VkICAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2ludDY0ICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlX3VuY2hlY2tlZCAgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWdpbnQ2NCAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGVfdW5jaGVja2VkICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1naW50NjQgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlX3VuY2hlY2tlZCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmVhZCBhIDMyIGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0IHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoCi0gKiBkYXRhIGF2YWlsYWJsZSBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgMzIgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXQgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2gKLSAqIGRhdGEgYXZhaWxhYmxlLCBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBmbG9hdGluZyBwb2ludCB2YWx1ZSByZWFkCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgMzIgYml0IGJpZyBlbmRpYW4gZmxvYXQgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2gKLSAqIGRhdGEgYXZhaWxhYmxlIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogZmxvYXRpbmcgcG9pbnQgdmFsdWUgcmVhZAotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYSAzMiBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAotICogZGF0YSBhdmFpbGFibGUsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6IGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYSA2NCBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAotICogZGF0YSBhdmFpbGFibGUgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgNjQgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXQgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2gKLSAqIGRhdGEgYXZhaWxhYmxlLCBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmVfdW5jaGVja2VkOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJlYWQgYSA2NCBiaXQgYmlnIGVuZGlhbiBmbG9hdCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaAotICogZGF0YSBhdmFpbGFibGUgYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZWFkIGEgNjQgYml0IGJpZyBlbmRpYW4gZmxvYXQgd2l0aG91dCBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2gKLSAqIGRhdGEgYXZhaWxhYmxlLCBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlIHJlYWQKLSAqLwotCi1nZmxvYXQgIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV91bmNoZWNrZWQgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWdmbG9hdCAgZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlX3VuY2hlY2tlZCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2RvdWJsZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfbGVfdW5jaGVja2VkICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1nZG91YmxlIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQgIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLQotZ2Zsb2F0ICBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1nZmxvYXQgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLWdkb3VibGUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2RvdWJsZSBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbgotICovCi1jb25zdCBndWludDggKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YV91bmNoZWNrZWQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAc2l6ZTogU2l6ZSBpbiBieXRlcwotICoKLSAqIFJldHVybnMgYSBjb25zdGFudCBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGRhdGEgcG9zaXRpb24gd2l0aG91dCBjaGVja2luZwotICogaWYgYXQgbGVhc3QgQHNpemUgYnl0ZXMgYXJlIGxlZnQuIEFkdmFuY2VzIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkKLSAqIEBzaXplIGJ5dGVzLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgbGVuZ3RoPXNpemUpOiBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlCi0gKiAgICAgY3VycmVudCBkYXRhIHBvc2l0aW9uLgotICovCi1jb25zdCBndWludDggKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBzaXplKTsKLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZDoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEBzaXplOiBTaXplIGluIGJ5dGVzCi0gKgotICogUmV0dXJucyBhIG5ld2x5LWFsbG9jYXRlZCBjb3B5IG9mIHRoZSBkYXRhIGF0IHRoZSBjdXJyZW50IGRhdGEgcG9zaXRpb24KLSAqIHdpdGhvdXQgY2hlY2tpbmcgaWYgYXQgbGVhc3QgQHNpemUgYnl0ZXMgYXJlIGxlZnQuIEFkdmFuY2VzIHRoZSBjdXJyZW50IHJlYWQKLSAqIHBvc2l0aW9uIGJ5IEBzaXplIGJ5dGVzLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAoYXJyYXkgbGVuZ3RoPXNpemUpOiBhIG5ld2x5LWFsbG9jYXRlZCBjb3B5IG9mIHRoZQotICogICAgIGRhdGEgQHNpemUgYnl0ZXMgaW4gc2l6ZS4gRnJlZSB3aXRoIGdfZnJlZSgpIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KLSAqLwotZ3VpbnQ4ICogZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSk7Ci0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5jIGIvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNWY4NzkuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYwICswLDAgQEAKLS8qIEdTdHJlYW1lciBieXRlIHJlYWRlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksMjAxNCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2RlZmluZSBHU1RfQllURV9SRUFERVJfRElTQUJMRV9JTkxJTkVTCi0jaW5jbHVkZSAiZ3N0Ynl0ZXJlYWRlci5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qKgotICogU0VDVElPTjpnc3RieXRlcmVhZGVyCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFJlYWRzIGRpZmZlcmVudCBpbnRlZ2VyLCBzdHJpbmcgYW5kIGZsb2F0aW5nIHBvaW50Ci0gKiAgICAgdHlwZXMgZnJvbSBhIG1lbW9yeSBidWZmZXIKLSAqCi0gKiAjR3N0Qnl0ZVJlYWRlciBwcm92aWRlcyBhIGJ5dGUgcmVhZGVyIHRoYXQgY2FuIHJlYWQgZGlmZmVyZW50IGludGVnZXIgYW5kCi0gKiBmbG9hdGluZyBwb2ludCB0eXBlcyBmcm9tIGEgbWVtb3J5IGJ1ZmZlci4gSXQgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nCi0gKiBzaWduZWQvdW5zaWduZWQsIGxpdHRsZS9iaWcgZW5kaWFuIGludGVnZXJzIG9mIDgsIDE2LCAyNCwgMzIgYW5kIDY0IGJpdHMKLSAqIGFuZCBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgbGl0dGxlL2JpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnRzIG51bWJlcnMgb2YKLSAqIDMyIGFuZCA2NCBiaXRzLiBJdCBhbHNvIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byByZWFkIE5VTC10ZXJtaW5hdGVkIHN0cmluZ3MKLSAqIGluIHZhcmlvdXMgY2hhcmFjdGVyIGVuY29kaW5ncy4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9uZXc6IChza2lwKQotICogQGRhdGE6IChpbikgKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IGRhdGEgZnJvbSB3aGljaCB0aGUKLSAqICAgICAjR3N0Qnl0ZVJlYWRlciBzaG91bGQgcmVhZAotICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKLSAqCi0gKiBDcmVhdGUgYSBuZXcgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UsIHdoaWNoIHdpbGwgcmVhZCBmcm9tIEBkYXRhLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9ieXRlX3JlYWRlcl9mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICovCi1Hc3RCeXRlUmVhZGVyICoKLWdzdF9ieXRlX3JlYWRlcl9uZXcgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpCi17Ci0gIEdzdEJ5dGVSZWFkZXIgKnJldCA9IGdfc2xpY2VfbmV3MCAoR3N0Qnl0ZVJlYWRlcik7Ci0KLSAgcmV0LT5kYXRhID0gZGF0YTsKLSAgcmV0LT5zaXplID0gc2l6ZTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9mcmVlOgotICogQHJlYWRlcjogKGluKSAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBGcmVlcyBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlLCB3aGljaCB3YXMgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkKLSAqIGdzdF9ieXRlX3JlYWRlcl9uZXcoKS4KLSAqLwotdm9pZAotZ3N0X2J5dGVfcmVhZGVyX2ZyZWUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMKTsKLQotICBnX3NsaWNlX2ZyZWUgKEdzdEJ5dGVSZWFkZXIsIHJlYWRlcik7Ci19Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2luaXQ6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAZGF0YTogKGluKSAodHJhbnNmZXIgbm9uZSkgKGFycmF5IGxlbmd0aD1zaXplKTogZGF0YSBmcm9tIHdoaWNoCi0gKiAgICAgdGhlICNHc3RCeXRlUmVhZGVyIHNob3VsZCByZWFkCi0gKiBAc2l6ZTogU2l6ZSBvZiBAZGF0YSBpbiBieXRlcwotICoKLSAqIEluaXRpYWxpemVzIGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UgdG8gcmVhZCBmcm9tIEBkYXRhLiBUaGlzIGZ1bmN0aW9uCi0gKiBjYW4gYmUgY2FsbGVkIG9uIGFscmVhZHkgaW5pdGlhbGl6ZWQgaW5zdGFuY2VzLgotICovCi12b2lkCi1nc3RfYnl0ZV9yZWFkZXJfaW5pdCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAocmVhZGVyICE9IE5VTEwpOwotCi0gIHJlYWRlci0+ZGF0YSA9IGRhdGE7Ci0gIHJlYWRlci0+c2l6ZSA9IHNpemU7Ci0gIHJlYWRlci0+Ynl0ZSA9IDA7Ci19Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlcjogKHNraXApCi0gKiBAcmVhZGVyOiBhbiBleGlzdGluZyBhbmQgaW5pdGlhbGl6ZWQgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEBzdWJfcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlIHRvIGluaXRpYWxpemUgYXMgc3ViLXJlYWRlcgotICogQHNpemU6IHNpemUgb2YgQHN1Yl9yZWFkZXIgaW4gYnl0ZXMKLSAqCi0gKiBJbml0aWFsaXplcyBhICNHc3RCeXRlUmVhZGVyIHN1Yi1yZWFkZXIgaW5zdGFuY2UgdG8gY29udGFpbiBAc2l6ZSBieXRlcyBvZgotICogZGF0YSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIEByZWFkZXIuIFRoaXMgaXMgdXNlZnVsIHRvIHJlYWQgY2h1bmtlZAotICogZm9ybWF0cyBhbmQgbWFrZSBzdXJlIHRoYXQgb25lIGRvZXNuJ3QgcmVhZCBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIHN1Yi1jaHVuay4KLSAqCi0gKiBVbmxpa2UgZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVyKCksIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IHRoZQotICogY3VycmVudCBwb3NpdGlvbiBvZiBAcmVhZGVyLgotICoKLSAqIFJldHVybnM6IEZBTFNFIG9uIGVycm9yIG9yIGlmIEByZWFkZXIgZG9lcyBub3QgY29udGFpbiBAc2l6ZSBtb3JlIGJ5dGVzIGZyb20KLSAqICAgICB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIG90aGVyd2lzZSBUUlVFCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlciAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RCeXRlUmVhZGVyICogc3ViX3JlYWRlciwgZ3VpbnQgc2l6ZSkKLXsKLSAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfcGVla19zdWJfcmVhZGVyX2lubGluZSAocmVhZGVyLCBzdWJfcmVhZGVyLCBzaXplKTsKLX0KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXI6IChza2lwKQotICogQHJlYWRlcjogYW4gZXhpc3RpbmcgYW5kIGluaXRpYWxpemVkICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAc3ViX3JlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSB0byBpbml0aWFsaXplIGFzIHN1Yi1yZWFkZXIKLSAqIEBzaXplOiBzaXplIG9mIEBzdWJfcmVhZGVyIGluIGJ5dGVzCi0gKgotICogSW5pdGlhbGl6ZXMgYSAjR3N0Qnl0ZVJlYWRlciBzdWItcmVhZGVyIGluc3RhbmNlIHRvIGNvbnRhaW4gQHNpemUgYnl0ZXMgb2YKLSAqIGRhdGEgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBAcmVhZGVyLiBUaGlzIGlzIHVzZWZ1bCB0byByZWFkIGNodW5rZWQKLSAqIGZvcm1hdHMgYW5kIG1ha2Ugc3VyZSB0aGF0IG9uZSBkb2Vzbid0IHJlYWQgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBzdWItY2h1bmsuCi0gKgotICogVW5saWtlIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXIoKSwgdGhpcyBmdW5jdGlvbiBhbHNvIG1vZGlmaWVzIHRoZQotICogcG9zaXRpb24gb2YgQHJlYWRlciBhbmQgbW92ZXMgaXQgZm9yd2FyZCBieSBAc2l6ZSBieXRlcy4KLSAqCi0gKiBSZXR1cm5zOiBGQUxTRSBvbiBlcnJvciBvciBpZiBAcmVhZGVyIGRvZXMgbm90IGNvbnRhaW4gQHNpemUgbW9yZSBieXRlcyBmcm9tCi0gKiAgICAgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGFuZCBvdGhlcndpc2UgVFJVRQotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlciAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RCeXRlUmVhZGVyICogc3ViX3JlYWRlciwgZ3VpbnQgc2l6ZSkKLXsKLSAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXJfaW5saW5lIChyZWFkZXIsIHN1Yl9yZWFkZXIsIHNpemUpOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHBvczogVGhlIG5ldyBwb3NpdGlvbiBpbiBieXRlcwotICoKLSAqIFNldHMgdGhlIG5ldyBwb3NpdGlvbiBvZiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlIHRvIEBwb3MgaW4gYnl0ZXMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBvc2l0aW9uIGNvdWxkIGJlIHNldCBzdWNjZXNzZnVsbHksICVGQUxTRQotICogb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHBvcykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKHBvcyA+IHJlYWRlci0+c2l6ZSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmVhZGVyLT5ieXRlID0gcG9zOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSBpbiBieXRlcy4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiBAcmVhZGVyIGluIGJ5dGVzLgotICovCi1ndWludAotZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3NfaW5saW5lIChyZWFkZXIpOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFJldHVybnMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgb2YgYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcyBvZiBAcmVhZGVyIGluc3RhbmNlLgotICovCi1ndWludAotZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfaW5saW5lIChyZWFkZXIpOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqCi0gKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb2YgYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG9mIEByZWFkZXIgaW5zdGFuY2UuCi0gKi8KLWd1aW50Ci1nc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemUgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplX2lubGluZSAocmVhZGVyKTsKLX0KLQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfaW5saW5lCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZSBfZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplX2lubGluZQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9za2lwOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQG5ieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwCi0gKgotICogU2tpcHMgQG5ieXRlcyBieXRlcyBvZiB0aGUgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQG5ieXRlcyBieXRlcyBjb3VsZCBiZSBza2lwcGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2J5dGVfcmVhZGVyX3NraXAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IG5ieXRlcykKLXsKLSAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfc2tpcF9pbmxpbmUgKHJlYWRlciwgbmJ5dGVzKTsKLX0KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4OgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDggYml0IGludGVnZXIgaW50byBAdmFsIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50ODoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDggYml0IGludGVnZXIgaW50byBAdmFsIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4OgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQ4IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDggYml0IGludGVnZXIgaW50byBAdmFsIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4OgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDggdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYSBzaWduZWQgOCBiaXQgaW50ZWdlciBpbnRvIEB2YWwgYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQxNiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQxNiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhIHNpZ25lZCAxNiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQxNiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAxNiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDE2IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MTZfYmU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDE2IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDE2IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50MTYgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYSBzaWduZWQgMTYgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYSBzaWduZWQgMjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQyNF9sZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgMjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhIHNpZ25lZCAyNCBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhIHNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAyNCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDMyIHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDI0IGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgMzIgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfbGU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYSBzaWduZWQgMzIgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50MzIgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgMzIgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhIHNpZ25lZCAzMiBiaXQgbGl0dGxlIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhIHNpZ25lZCAzMiBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ3VpbnQzMiB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhbiB1bnNpZ25lZCAzMiBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDMyIHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDMyIGJpdCBiaWcgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2ludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgc2lnbmVkIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50NjRfbGU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNndWludDY0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGFuIHVuc2lnbmVkIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGludGVnZXIgaW50byBAdmFsCi0gKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50NjQgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYSBzaWduZWQgNjQgYml0IGxpdHRsZSBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50NjQgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnaW50NjQgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYSBzaWduZWQgNjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2d1aW50NjQgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYW4gdW5zaWduZWQgNjQgYml0IGJpZyBlbmRpYW4gaW50ZWdlciBpbnRvIEB2YWwKLSAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dpbnQ2NCB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhIHNpZ25lZCA2NCBiaXQgYmlnIGVuZGlhbiBpbnRlZ2VyIGludG8gQHZhbAotICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi0jZGVmaW5lIEdTVF9CWVRFX1JFQURFUl9QRUVLX0dFVChiaXRzLHR5cGUsbmFtZSkgXAotZ2Jvb2xlYW4gXAotZ3N0X2J5dGVfcmVhZGVyX2dldF8jI25hbWUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIHR5cGUgKiB2YWwpIFwKLXsgXAotICByZXR1cm4gX2dzdF9ieXRlX3JlYWRlcl9nZXRfIyNuYW1lIyNfaW5saW5lIChyZWFkZXIsIHZhbCk7IFwKLX0gXAotXAotZ2Jvb2xlYW4gXAotZ3N0X2J5dGVfcmVhZGVyX3BlZWtfIyNuYW1lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCB0eXBlICogdmFsKSBcCi17IFwKLSAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfcGVla18jI25hbWUjI19pbmxpbmUgKHJlYWRlciwgdmFsKTsgXAotfQotCi0vKiAqSU5ERU5ULU9GRiogKi8KLQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDgsZ3VpbnQ4LHVpbnQ4KQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDgsZ2ludDgsaW50OCkKLQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDE2LGd1aW50MTYsdWludDE2X2xlKQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDE2LGd1aW50MTYsdWludDE2X2JlKQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDE2LGdpbnQxNixpbnQxNl9sZSkKLUdTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCgxNixnaW50MTYsaW50MTZfYmUpCi0KLUdTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCgyNCxndWludDMyLHVpbnQyNF9sZSkKLUdTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCgyNCxndWludDMyLHVpbnQyNF9iZSkKLUdTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCgyNCxnaW50MzIsaW50MjRfbGUpCi1HU1RfQllURV9SRUFERVJfUEVFS19HRVQoMjQsZ2ludDMyLGludDI0X2JlKQotCi1HU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ3VpbnQzMix1aW50MzJfbGUpCi1HU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ3VpbnQzMix1aW50MzJfYmUpCi1HU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ2ludDMyLGludDMyX2xlKQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDMyLGdpbnQzMixpbnQzMl9iZSkKLQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDY0LGd1aW50NjQsdWludDY0X2xlKQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDY0LGd1aW50NjQsdWludDY0X2JlKQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDY0LGdpbnQ2NCxpbnQ2NF9sZSkKLUdTVF9CWVRFX1JFQURFUl9QRUVLX0dFVCg2NCxnaW50NjQsaW50NjRfYmUpCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2xlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2Zsb2F0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgMzIgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCi0gKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2Zsb2F0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgMzIgYml0IGxpdHRsZSBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCi0gKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDMyX2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2Zsb2F0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgMzIgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCi0gKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2Zsb2F0IHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgMzIgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCi0gKiBidXQga2VlcCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdDY0X2xlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2RvdWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhIDY0IGJpdCBsaXR0bGUgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gQHZhbAotICogYW5kIHVwZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEB2YWw6IChvdXQpOiBQb2ludGVyIHRvIGEgI2dkb3VibGUgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIFJlYWQgYSA2NCBiaXQgbGl0dGxlIGVuZGlhbiBmbG9hdGluZyBwb2ludCB2YWx1ZSBpbnRvIEB2YWwKLSAqIGJ1dCBrZWVwIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmU6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAdmFsOiAob3V0KTogUG9pbnRlciB0byBhICNnZG91YmxlIHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZWFkIGEgNjQgYml0IGJpZyBlbmRpYW4gZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW50byBAdmFsCi0gKiBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHZhbDogKG91dCk6IFBvaW50ZXIgdG8gYSAjZ2RvdWJsZSB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmVhZCBhIDY0IGJpdCBiaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gQHZhbAotICogYnV0IGtlZXAgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotCi1HU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ2Zsb2F0LGZsb2F0MzJfbGUpCi1HU1RfQllURV9SRUFERVJfUEVFS19HRVQoMzIsZ2Zsb2F0LGZsb2F0MzJfYmUpCi1HU1RfQllURV9SRUFERVJfUEVFS19HRVQoNjQsZ2RvdWJsZSxmbG9hdDY0X2xlKQotR1NUX0JZVEVfUkVBREVSX1BFRUtfR0VUKDY0LGdkb3VibGUsZmxvYXQ2NF9iZSkKLQotLyogKklOREVOVC1PTiogKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGE6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAc2l6ZTogU2l6ZSBpbiBieXRlcwotICogQHZhbDogKG91dCkgKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IGFkZHJlc3Mgb2YgYQotICogICAgICNndWludDggcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YQotICogcG9zaXRpb24gaWYgYXQgbGVhc3QgQHNpemUgYnl0ZXMgYXJlIGxlZnQgYW5kCi0gKiB1cGRhdGVzIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBzdWNjZXNzZnVsLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBzaXplLAotICAgIGNvbnN0IGd1aW50OCAqKiB2YWwpCi17Ci0gIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX2lubGluZSAocmVhZGVyLCBzaXplLCB2YWwpOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGE6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAc2l6ZTogU2l6ZSBpbiBieXRlcwotICogQHZhbDogKG91dCkgKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IGFkZHJlc3Mgb2YgYQotICogICAgICNndWludDggcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YQotICogcG9zaXRpb24gaWYgYXQgbGVhc3QgQHNpemUgYnl0ZXMgYXJlIGxlZnQgYW5kCi0gKiBrZWVwcyB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgc3VjY2Vzc2Z1bCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGEgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHNpemUsCi0gICAgY29uc3QgZ3VpbnQ4ICoqIHZhbCkKLXsKLSAgcmV0dXJuIF9nc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX2lubGluZSAocmVhZGVyLCBzaXplLCB2YWwpOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YToKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEBzaXplOiBTaXplIGluIGJ5dGVzCi0gKiBAdmFsOiAob3V0KSAodHJhbnNmZXIgZnVsbCkgKGFycmF5IGxlbmd0aD1zaXplKTogYWRkcmVzcyBvZiBhCi0gKiAgICAgI2d1aW50OCBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKLSAqCi0gKiBSZXR1cm5zIGEgbmV3bHktYWxsb2NhdGVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgZGF0YQotICogcG9zaXRpb24gaWYgYXQgbGVhc3QgQHNpemUgYnl0ZXMgYXJlIGxlZnQgYW5kCi0gKiB1cGRhdGVzIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBGcmVlIHdpdGggZ19mcmVlKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLWdib29sZWFuCi1nc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHNpemUsIGd1aW50OCAqKiB2YWwpCi17Ci0gIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX2lubGluZSAocmVhZGVyLCBzaXplLCB2YWwpOwotfQotCi0vKiBTcGVjaWFsIG9wdGltaXplZCBzY2FuIGZvciBtYXNrIDB4ZmZmZmZmMDAgYW5kIHBhdHRlcm4gMHgwMDAwMDEwMCAqLwotc3RhdGljIGlubGluZSBnaW50Ci1fc2Nhbl9mb3Jfc3RhcnRfY29kZSAoY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSkKLXsKLSAgZ3VpbnQ4ICpwZGF0YSA9IChndWludDggKikgZGF0YTsKLSAgZ3VpbnQ4ICpwZW5kID0gKGd1aW50OCAqKSAoZGF0YSArIHNpemUgLSA0KTsKLQotICB3aGlsZSAocGRhdGEgPD0gcGVuZCkgewotICAgIGlmIChwZGF0YVsyXSA+IDEpIHsKLSAgICAgIHBkYXRhICs9IDM7Ci0gICAgfSBlbHNlIGlmIChwZGF0YVsxXSkgewotICAgICAgcGRhdGEgKz0gMjsKLSAgICB9IGVsc2UgaWYgKHBkYXRhWzBdIHx8IHBkYXRhWzJdICE9IDEpIHsKLSAgICAgIHBkYXRhKys7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAocGRhdGEgLSBkYXRhKTsKLSAgICB9Ci0gIH0KLQotICAvKiBub3RoaW5nIGZvdW5kICovCi0gIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBndWludAotX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgIGd1aW50MzIgbWFzaywgZ3VpbnQzMiBwYXR0ZXJuLCBndWludCBvZmZzZXQsIGd1aW50IHNpemUsIGd1aW50MzIgKiB2YWx1ZSkKLXsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICBndWludDMyIHN0YXRlOwotICBndWludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaXplID4gMCwgLTEpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoKGd1aW50NjQpIG9mZnNldCArIHNpemUgPD0gcmVhZGVyLT5zaXplIC0gcmVhZGVyLT5ieXRlLAotICAgICAgLTEpOwotCi0gIC8qIHdlIGNhbid0IGZpbmQgdGhlIHBhdHRlcm4gd2l0aCBsZXNzIHRoYW4gNCBieXRlcyAqLwotICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA8IDQpKQotICAgIHJldHVybiAtMTsKLQotICBkYXRhID0gcmVhZGVyLT5kYXRhICsgcmVhZGVyLT5ieXRlICsgb2Zmc2V0OwotCi0gIC8qIEhhbmRsZSBzcGVjaWFsIGNhc2UgZm91bmQgaW4gTVBFRyBhbmQgSDI2NCAqLwotICBpZiAoKHBhdHRlcm4gPT0gMHgwMDAwMDEwMCkgJiYgKG1hc2sgPT0gMHhmZmZmZmYwMCkpIHsKLSAgICBnaW50IHJldCA9IF9zY2FuX2Zvcl9zdGFydF9jb2RlIChkYXRhLCBzaXplKTsKLQotICAgIGlmIChyZXQgPT0gLTEpCi0gICAgICByZXR1cm4gcmV0OwotCi0gICAgaWYgKHZhbHVlICE9IE5VTEwpCi0gICAgICAqdmFsdWUgPSAoMSA8PCA4KSB8IGRhdGFbcmV0ICsgM107Ci0KLSAgICByZXR1cm4gcmV0ICsgb2Zmc2V0OwotICB9Ci0KLSAgLyogc2V0IHRoZSBzdGF0ZSB0byBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBtYXRjaCAqLwotICBzdGF0ZSA9IH5wYXR0ZXJuOwotCi0gIC8qIG5vdyBmaW5kIGRhdGEgKi8KLSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgIC8qIHRocm93IGF3YXkgb25lIGJ5dGUgYW5kIG1vdmUgaW4gdGhlIG5leHQgYnl0ZSAqLwotICAgIHN0YXRlID0gKChzdGF0ZSA8PCA4KSB8IGRhdGFbaV0pOwotICAgIGlmIChHX1VOTElLRUxZICgoc3RhdGUgJiBtYXNrKSA9PSBwYXR0ZXJuKSkgewotICAgICAgLyogd2UgaGF2ZSBhIG1hdGNoIGJ1dCB3ZSBuZWVkIHRvIGhhdmUgc2tpcHBlZCBhdAotICAgICAgICogbGVhc3QgNCBieXRlcyB0byBmaWxsIHRoZSBzdGF0ZS4gKi8KLSAgICAgIGlmIChHX0xJS0VMWSAoaSA+PSAzKSkgewotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgKnZhbHVlID0gc3RhdGU7Ci0gICAgICAgIHJldHVybiBvZmZzZXQgKyBpIC0gMzsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBub3RoaW5nIGZvdW5kICovCi0gIHJldHVybiAtMTsKLX0KLQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzI6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyCi0gKiBAbWFzazogbWFzayB0byBhcHBseSB0byBkYXRhIGJlZm9yZSBtYXRjaGluZyBhZ2FpbnN0IEBwYXR0ZXJuCi0gKiBAcGF0dGVybjogcGF0dGVybiB0byBtYXRjaCAoYWZ0ZXIgbWFzayBpcyBhcHBsaWVkKQotICogQG9mZnNldDogb2Zmc2V0IGZyb20gd2hpY2ggdG8gc3RhcnQgc2Nhbm5pbmcsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50Ci0gKiAgICAgcG9zaXRpb24KLSAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gc2NhbiBmcm9tIG9mZnNldAotICoKLSAqIFNjYW4gZm9yIHBhdHRlcm4gQHBhdHRlcm4gd2l0aCBhcHBsaWVkIG1hc2sgQG1hc2sgaW4gdGhlIGJ5dGUgcmVhZGVyIGRhdGEsCi0gKiBzdGFydGluZyBmcm9tIG9mZnNldCBAb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIFRoZSBieXRlcyBpbiBAcGF0dGVybiBhbmQgQG1hc2sgYXJlIGludGVycHJldGVkIGxlZnQtdG8tcmlnaHQsIHJlZ2FyZGxlc3MKLSAqIG9mIGVuZGlhbm5lc3MuICBBbGwgZm91ciBieXRlcyBvZiB0aGUgcGF0dGVybiBtdXN0IGJlIHByZXNlbnQgaW4gdGhlCi0gKiBieXRlIHJlYWRlciBkYXRhIGZvciBpdCB0byBtYXRjaCwgZXZlbiBpZiB0aGUgZmlyc3Qgb3IgbGFzdCBieXRlcyBhcmUgbWFza2VkCi0gKiBvdXQuCi0gKgotICogSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgbWFraW5nIHN1cmUgdGhhdCB0aGVyZSBpcwotICogZW5vdWdoIGRhdGEgKG9mZnNldCtzaXplIGJ5dGVzKSBpbiB0aGUgYnl0ZSByZWFkZXIuCi0gKgotICogUmV0dXJuczogb2Zmc2V0IG9mIHRoZSBmaXJzdCBtYXRjaCwgb3IgLTEgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLgotICoKLSAqIEV4YW1wbGU6Ci0gKiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gKiAvLyBBc3N1bWUgdGhlIHJlYWRlciBjb250YWlucyAweDAwIDB4MDEgMHgwMiAuLi4gMHhmZSAweGZmCi0gKgotICogZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAocmVhZGVyLCAweGZmZmZmZmZmLCAweDAwMDEwMjAzLCAwLCAyNTYpOwotICogLy8gLT4gcmV0dXJucyAwCi0gKiBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDEsIDI1NSk7Ci0gKiAvLyAtPiByZXR1cm5zIC0xCi0gKiBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDEwMjAzMDQsIDEsIDI1NSk7Ci0gKiAvLyAtPiByZXR1cm5zIDEKLSAqIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmLCAweDAwMDEsIDAsIDI1Nik7Ci0gKiAvLyAtPiByZXR1cm5zIC0xCi0gKiBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZiwgMHgwMjAzLCAwLCAyNTYpOwotICogLy8gLT4gcmV0dXJucyAwCi0gKiBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZjAwMDAsIDB4MDIwMzAwMDAsIDAsIDI1Nik7Ci0gKiAvLyAtPiByZXR1cm5zIDIKLSAqIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmMDAwMCwgMHgwMjAzMDAwMCwgMCwgNCk7Ci0gKiAvLyAtPiByZXR1cm5zIC0xCi0gKiA8L3Byb2dyYW1saXN0aW5nPgotICovCi1ndWludAotZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQzMiBtYXNrLAotICAgIGd1aW50MzIgcGF0dGVybiwgZ3VpbnQgb2Zmc2V0LCBndWludCBzaXplKQotewotICByZXR1cm4gX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChyZWFkZXIsIG1hc2ssIHBhdHRlcm4sIG9mZnNldCwgc2l6ZSwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlcgotICogQG1hc2s6IG1hc2sgdG8gYXBwbHkgdG8gZGF0YSBiZWZvcmUgbWF0Y2hpbmcgYWdhaW5zdCBAcGF0dGVybgotICogQHBhdHRlcm46IHBhdHRlcm4gdG8gbWF0Y2ggKGFmdGVyIG1hc2sgaXMgYXBwbGllZCkKLSAqIEBvZmZzZXQ6IG9mZnNldCBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNjYW5uaW5nLCByZWxhdGl2ZSB0byB0aGUgY3VycmVudAotICogICAgIHBvc2l0aW9uCi0gKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRvIHNjYW4gZnJvbSBvZmZzZXQKLSAqIEB2YWx1ZTogcG9pbnRlciB0byB1aW50MzIgdG8gcmV0dXJuIG1hdGNoaW5nIGRhdGEKLSAqCi0gKiBTY2FuIGZvciBwYXR0ZXJuIEBwYXR0ZXJuIHdpdGggYXBwbGllZCBtYXNrIEBtYXNrIGluIHRoZSBieXRlIHJlYWRlciBkYXRhLAotICogc3RhcnRpbmcgZnJvbSBvZmZzZXQgQG9mZnNldCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAqCi0gKiBUaGUgYnl0ZXMgaW4gQHBhdHRlcm4gYW5kIEBtYXNrIGFyZSBpbnRlcnByZXRlZCBsZWZ0LXRvLXJpZ2h0LCByZWdhcmRsZXNzCi0gKiBvZiBlbmRpYW5uZXNzLiAgQWxsIGZvdXIgYnl0ZXMgb2YgdGhlIHBhdHRlcm4gbXVzdCBiZSBwcmVzZW50IGluIHRoZQotICogYnl0ZSByZWFkZXIgZGF0YSBmb3IgaXQgdG8gbWF0Y2gsIGV2ZW4gaWYgdGhlIGZpcnN0IG9yIGxhc3QgYnl0ZXMgYXJlIG1hc2tlZAotICogb3V0LgotICoKLSAqIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRob3V0IG1ha2luZyBzdXJlIHRoYXQgdGhlcmUgaXMKLSAqIGVub3VnaCBkYXRhIChvZmZzZXQrc2l6ZSBieXRlcykgaW4gdGhlIGJ5dGUgcmVhZGVyLgotICoKLSAqIFJldHVybnM6IG9mZnNldCBvZiB0aGUgZmlyc3QgbWF0Y2gsIG9yIC0xIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWd1aW50Ci1nc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWsgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsCi0gICAgZ3VpbnQzMiBtYXNrLCBndWludDMyIHBhdHRlcm4sIGd1aW50IG9mZnNldCwgZ3VpbnQgc2l6ZSwgZ3VpbnQzMiAqIHZhbHVlKQotewotICByZXR1cm4gX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChyZWFkZXIsIG1hc2ssIHBhdHRlcm4sIG9mZnNldCwgc2l6ZSwgdmFsdWUpOwotfQotCi0jZGVmaW5lIEdTVF9CWVRFX1JFQURFUl9TQ0FOX1NUUklORyhiaXRzKSBcCi1zdGF0aWMgZ3VpbnQgXAotZ3N0X2J5dGVfcmVhZGVyX3NjYW5fc3RyaW5nX3V0ZiMjYml0cyAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikgXAoteyBcCi0gIGd1aW50IGxlbiwgb2ZmLCBtYXhfbGVuOyBcCi0gIFwKLSAgbWF4X2xlbiA9IChyZWFkZXItPnNpemUgLSByZWFkZXItPmJ5dGUpIC8gc2l6ZW9mIChndWludCMjYml0cyk7IFwKLSAgXAotICAvKiBuZWVkIGF0IGxlYXN0IGEgc2luZ2xlIE5VTCB0ZXJtaW5hdG9yICovIFwKLSAgaWYgKG1heF9sZW4gPCAxKSBcCi0gICAgcmV0dXJuIDA7IFwKLSAgXAotICBsZW4gPSAwOyBcCi0gIG9mZiA9IHJlYWRlci0+Ynl0ZTsgXAotICAvKiBlbmRpYW5uZXNzIGRvZXMgbm90IG1hdHRlciBpZiB3ZSBhcmUgbG9va2luZyBmb3IgYSBOVUwgdGVybWluYXRvciAqLyBcCi0gIHdoaWxlIChHU1RfUkVBRF9VSU5UIyNiaXRzIyNfTEUgKCZyZWFkZXItPmRhdGFbb2ZmXSkgIT0gMCkgeyBcCi0gICAgKytsZW47IFwKLSAgICBvZmYgKz0gc2l6ZW9mIChndWludCMjYml0cyk7IFwKLSAgICAvKiBoYXZlIHdlIHJlYWNoZWQgdGhlIGVuZCB3aXRob3V0IGZpbmRpbmcgYSBOVUwgdGVybWluYXRvcj8gKi8gXAotICAgIGlmIChsZW4gPT0gbWF4X2xlbikgXAotICAgICAgcmV0dXJuIDA7IFwKLSAgfSBcCi0gIC8qIHJldHVybiBzaXplIGluIGJ5dGVzIGluY2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3IgKGhlbmNlIHRoZSArMSkgKi8gXAotICByZXR1cm4gKGxlbiArIDEpICogc2l6ZW9mIChndWludCMjYml0cyk7IFwKLX0KLQotI2RlZmluZSBHU1RfUkVBRF9VSU5UOF9MRSBHU1RfUkVBRF9VSU5UOAotR1NUX0JZVEVfUkVBREVSX1NDQU5fU1RSSU5HICg4KTsKLSN1bmRlZiBHU1RfUkVBRF9VSU5UOF9MRQotR1NUX0JZVEVfUkVBREVSX1NDQU5fU1RSSU5HICgxNik7Ci1HU1RfQllURV9SRUFERVJfU0NBTl9TVFJJTkcgKDMyKTsKLQotI2RlZmluZSBHU1RfQllURV9SRUFERVJfU0tJUF9TVFJJTkcoYml0cykgXAotZ2Jvb2xlYW4gXAotZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZiMjYml0cyAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikgXAoteyBcCi0gIGd1aW50IHNpemU7IC8qIHNpemUgaW4gYnl0ZXMgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yICovIFwKLSAgXAotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsgXAotICBcCi0gIHNpemUgPSBnc3RfYnl0ZV9yZWFkZXJfc2Nhbl9zdHJpbmdfdXRmIyNiaXRzIChyZWFkZXIpOyBcCi0gIHJlYWRlci0+Ynl0ZSArPSBzaXplOyBcCi0gIHJldHVybiAoc2l6ZSA+IDApOyBcCi19Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFNraXBzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHRoZSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSwgYWR2YW5jaW5nCi0gKiB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yayBmb3IKLSAqIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAotICogVVRGLTgsIElTTy04ODU5LU4gZXRjLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsIGlmIG5vIE5VTC10ZXJtaW5hdG9yIHdhcyBmb3VuZCBpbiBpbiB0aGUgZGF0YS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBhIHN0cmluZyBjb3VsZCBiZSBza2lwcGVkLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4OgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFNraXBzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHRoZSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSwgYWR2YW5jaW5nCi0gKiB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yayBmb3IKLSAqIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAotICogVVRGLTgsIElTTy04ODU5LU4gZXRjLiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTggaXMgZG9uZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotR1NUX0JZVEVfUkVBREVSX1NLSVBfU1RSSU5HICg4KTsKLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMTY6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKgotICogU2tpcHMgYSBOVUwtdGVybWluYXRlZCBVVEYtMTYgc3RyaW5nIGluIHRoZSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSwKLSAqIGFkdmFuY2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLgotICoKLSAqIE5vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtMTYgaXMgZG9uZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotR1NUX0JZVEVfUkVBREVSX1NLSVBfU1RSSU5HICgxNik7Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICoKLSAqIFNraXBzIGEgTlVMLXRlcm1pbmF0ZWQgVVRGLTMyIHN0cmluZyBpbiB0aGUgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UsCi0gKiBhZHZhbmNpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGJ5dGUgYWZ0ZXIgdGhlIHN0cmluZy4KLSAqCi0gKiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTMyIGlzIGRvbmUuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGEgc3RyaW5nIGNvdWxkIGJlIHNraXBwZWQsICVGQUxTRSBvdGhlcndpc2UuCi0gKi8KLUdTVF9CWVRFX1JFQURFUl9TS0lQX1NUUklORyAoMzIpOwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZzoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEBzdHI6IChvdXQpICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBhZGRyZXNzIG9mIGEKLSAqICAgICAjZ2NoYXIgcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcwotICogYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUganVzdCBhIE5VTCB0ZXJtaW5hdG9yKS4KLSAqIFRoZSBjdXJyZW50IHBvc2l0aW9uIHdpbGwgYmUgbWFpbnRhaW5lZC4gVGhpcyB3aWxsIHdvcmsgZm9yIGFueQotICogTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKLSAqIFVURi04LCBJU08tODg1OS1OIGV0Yy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmODoKLSAqIEByZWFkZXI6IGEgI0dzdEJ5dGVSZWFkZXIgaW5zdGFuY2UKLSAqIEBzdHI6IChvdXQpICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBhZGRyZXNzIG9mIGEKLSAqICAgICAjZ2NoYXIgcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogUmV0dXJucyBhIGNvbnN0YW50IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZGF0YSBwb3NpdGlvbiBpZiB0aGVyZSBpcwotICogYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUganVzdCBhIE5VTCB0ZXJtaW5hdG9yKS4KLSAqIFRoZSBjdXJyZW50IHBvc2l0aW9uIHdpbGwgYmUgbWFpbnRhaW5lZC4gVGhpcyB3aWxsIHdvcmsgZm9yIGFueQotICogTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBjaGFyYWN0ZXIgd2lkdGggb2YgOCBiaXRzLCBzbyBBU0NJSSwKLSAqIFVURi04LCBJU08tODg1OS1OIGV0Yy4KLSAqCi0gKiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTggaXMgZG9uZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgc2tpcHBlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZ191dGY4IChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgIGNvbnN0IGdjaGFyICoqIHN0cikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHIgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChnc3RfYnl0ZV9yZWFkZXJfc2Nhbl9zdHJpbmdfdXRmOCAocmVhZGVyKSA+IDApIHsKLSAgICAqc3RyID0gKGNvbnN0IGdjaGFyICopIChyZWFkZXItPmRhdGEgKyByZWFkZXItPmJ5dGUpOwotICB9IGVsc2UgewotICAgICpzdHIgPSBOVUxMOwotICB9Ci0gIHJldHVybiAoKnN0ciAhPSBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4OgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHN0cjogKG91dCkgKHRyYW5zZmVyIG5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSk6IGFkZHJlc3Mgb2YgYQotICogICAgICNnY2hhciBwb2ludGVyIHZhcmlhYmxlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZXN1bHQKLSAqCi0gKiBSZXR1cm5zIGEgY29uc3RhbnQgcG9pbnRlciB0byB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uIGlmIHRoZXJlIGlzCi0gKiBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBpbiB0aGUgZGF0YSAodGhpcyBjb3VsZCBiZSBqdXN0IGEgTlVMIHRlcm1pbmF0b3IpLAotICogYWR2YW5jaW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBieXRlIGFmdGVyIHRoZSBzdHJpbmcuIFRoaXMgd2lsbCB3b3JrCi0gKiBmb3IgYW55IE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIGEgY2hhcmFjdGVyIHdpZHRoIG9mIDggYml0cywgc28gQVNDSUksCi0gKiBVVEYtOCwgSVNPLTg4NTktTiBldGMuCi0gKgotICogTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi04IGlzIGRvbmUuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGEgc3RyaW5nIGNvdWxkIGJlIGZvdW5kLCAlRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmOCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgY29uc3QgZ2NoYXIgKiogc3RyKQotewotICBndWludCBzaXplOyAgICAgICAgICAgICAgICAgICAvKiBzaXplIGluIGJ5dGVzIGluY2x1ZGluZyB0aGUgdGVybWluYXRvciAqLwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyICE9IE5VTEwsIEZBTFNFKTsKLQotICBzaXplID0gZ3N0X2J5dGVfcmVhZGVyX3NjYW5fc3RyaW5nX3V0ZjggKHJlYWRlcik7Ci0gIGlmIChzaXplID09IDApIHsKLSAgICAqc3RyID0gTlVMTDsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAqc3RyID0gKGNvbnN0IGdjaGFyICopIChyZWFkZXItPmRhdGEgKyByZWFkZXItPmJ5dGUpOwotICByZWFkZXItPmJ5dGUgKz0gc2l6ZTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNkZWZpbmUgR1NUX0JZVEVfUkVBREVSX0RVUF9TVFJJTkcoYml0cyx0eXBlKSBcCi1nYm9vbGVhbiBcCi1nc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYjI2JpdHMgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIHR5cGUgKiogc3RyKSBcCi17IFwKLSAgZ3VpbnQgc2l6ZTsgLyogc2l6ZSBpbiBieXRlcyBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IgKi8gXAotICBcCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOyBcCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHIgIT0gTlVMTCwgRkFMU0UpOyBcCi0gIFwKLSAgc2l6ZSA9IGdzdF9ieXRlX3JlYWRlcl9zY2FuX3N0cmluZ191dGYjI2JpdHMgKHJlYWRlcik7IFwKLSAgaWYgKHNpemUgPT0gMCkgeyBcCi0gICAgKnN0ciA9IE5VTEw7IFwKLSAgICByZXR1cm4gRkFMU0U7IFwKLSAgfSBcCi0gICpzdHIgPSBnX21lbWR1cCAocmVhZGVyLT5kYXRhICsgcmVhZGVyLT5ieXRlLCBzaXplKTsgXAotICByZWFkZXItPmJ5dGUgKz0gc2l6ZTsgXAotICByZXR1cm4gVFJVRTsgXAotfQotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0Zjg6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAc3RyOiAob3V0KSAodHJhbnNmZXIgZnVsbCkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogYWRkcmVzcyBvZiBhCi0gKiAgICAgI2djaGFyIHBvaW50ZXIgdmFyaWFibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQotICoKLSAqIEZJWE1FOlJlYWRzIChjb3BpZXMpIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGluIHRoZSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZSwKLSAqIGFkdmFuY2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgYnl0ZSBhZnRlciB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgd29yawotICogZm9yIGFueSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIGNoYXJhY3RlciB3aWR0aCBvZiA4IGJpdHMsIHNvIEFTQ0lJLAotICogVVRGLTgsIElTTy04ODU5LU4gZXRjLiBObyBpbnB1dCBjaGVja2luZyBmb3IgdmFsaWQgVVRGLTggaXMgZG9uZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgcmVhZCBpbnRvIEBzdHIsICVGQUxTRSBvdGhlcndpc2UuIFRoZQotICogICAgIHN0cmluZyBwdXQgaW50byBAc3RyIG11c3QgYmUgZnJlZWQgd2l0aCBnX2ZyZWUoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gKi8KLUdTVF9CWVRFX1JFQURFUl9EVVBfU1RSSU5HICg4LCBnY2hhcik7Ci0KLS8qKgotICogZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTY6Ci0gKiBAcmVhZGVyOiBhICNHc3RCeXRlUmVhZGVyIGluc3RhbmNlCi0gKiBAc3RyOiAob3V0KSAodHJhbnNmZXIgZnVsbCkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKTogYWRkcmVzcyBvZiBhCi0gKiAgICAgI2d1aW50MTYgcG9pbnRlciB2YXJpYWJsZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0Ci0gKgotICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCi0gKgotICogUmV0dXJucyBhIG5ld2x5LWFsbG9jYXRlZCBjb3B5IG9mIHRoZSBjdXJyZW50IGRhdGEgcG9zaXRpb24gaWYgdGhlcmUgaXMKLSAqIGEgTlVMLXRlcm1pbmF0ZWQgVVRGLTE2IHN0cmluZyBpbiB0aGUgZGF0YSAodGhpcyBjb3VsZCBiZSBhbiBlbXB0eSBzdHJpbmcKLSAqIGFzIHdlbGwpLCBhbmQgYWR2YW5jZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gKgotICogTm8gaW5wdXQgY2hlY2tpbmcgZm9yIHZhbGlkIFVURi0xNiBpcyBkb25lLiBUaGlzIGZ1bmN0aW9uIGlzIGVuZGlhbm5lc3MKLSAqIGFnbm9zdGljIC0geW91IHNob3VsZCBub3QgYXNzdW1lIHRoZSBVVEYtMTYgY2hhcmFjdGVycyBhcmUgaW4gaG9zdAotICogZW5kaWFubmVzcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmFpbCBpZiBubyBOVUwtdGVybWluYXRvciB3YXMgZm91bmQgaW4gaW4gdGhlIGRhdGEuCi0gKgotICogTm90ZTogdGhlcmUgaXMgbm8gcGVlayBvciBnZXQgdmFyaWFudCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGVuc3VyZSBjb3JyZWN0Ci0gKiBieXRlIGFsaWdubWVudCBvZiB0aGUgVVRGLTE2IHN0cmluZy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBhIHN0cmluZyBjb3VsZCBiZSByZWFkLCAlRkFMU0Ugb3RoZXJ3aXNlLiBUaGUKLSAqICAgICBzdHJpbmcgcHV0IGludG8gQHN0ciBtdXN0IGJlIGZyZWVkIHdpdGggZ19mcmVlKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICovCi1HU1RfQllURV9SRUFERVJfRFVQX1NUUklORyAoMTYsIGd1aW50MTYpOwotCi0vKioKLSAqIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyOgotICogQHJlYWRlcjogYSAjR3N0Qnl0ZVJlYWRlciBpbnN0YW5jZQotICogQHN0cjogKG91dCkgKHRyYW5zZmVyIGZ1bGwpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSk6IGFkZHJlc3Mgb2YgYQotICogICAgICNndWludDMyIHBvaW50ZXIgdmFyaWFibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdfZnJlZQotICoKLSAqIFJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgY29weSBvZiB0aGUgY3VycmVudCBkYXRhIHBvc2l0aW9uIGlmIHRoZXJlIGlzCi0gKiBhIE5VTC10ZXJtaW5hdGVkIFVURi0zMiBzdHJpbmcgaW4gdGhlIGRhdGEgKHRoaXMgY291bGQgYmUgYW4gZW1wdHkgc3RyaW5nCi0gKiBhcyB3ZWxsKSwgYW5kIGFkdmFuY2VzIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICoKLSAqIE5vIGlucHV0IGNoZWNraW5nIGZvciB2YWxpZCBVVEYtMzIgaXMgZG9uZS4gVGhpcyBmdW5jdGlvbiBpcyBlbmRpYW5uZXNzCi0gKiBhZ25vc3RpYyAtIHlvdSBzaG91bGQgbm90IGFzc3VtZSB0aGUgVVRGLTMyIGNoYXJhY3RlcnMgYXJlIGluIGhvc3QKLSAqIGVuZGlhbm5lc3MuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgbm8gTlVMLXRlcm1pbmF0b3Igd2FzIGZvdW5kIGluIGluIHRoZSBkYXRhLgotICoKLSAqIE5vdGU6IHRoZXJlIGlzIG5vIHBlZWsgb3IgZ2V0IHZhcmlhbnQgb2YgdGhpcyBmdW5jdGlvbiB0byBlbnN1cmUgY29ycmVjdAotICogYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIFVURi0zMiBzdHJpbmcuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYSBzdHJpbmcgY291bGQgYmUgcmVhZCwgJUZBTFNFIG90aGVyd2lzZS4gVGhlCi0gKiAgICAgc3RyaW5nIHB1dCBpbnRvIEBzdHIgbXVzdCBiZSBmcmVlZCB3aXRoIGdfZnJlZSgpIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KLSAqLwotR1NUX0JZVEVfUkVBREVSX0RVUF9TVFJJTkcgKDMyLCBndWludDMyKTsKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oIGIvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNjYwMTEuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RieXRlcmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NjYgKzAsMCBAQAotLyogR1N0cmVhbWVyIGJ5dGUgcmVhZGVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPi4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQllURV9SRUFERVJfSF9fCi0jZGVmaW5lIF9fR1NUX0JZVEVfUkVBREVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX0JZVEVfUkVBREVSKHJlYWRlcikgKChHc3RCeXRlUmVhZGVyICopIChyZWFkZXIpKQotCi0vKioKLSAqIEdzdEJ5dGVSZWFkZXI6Ci0gKiBAZGF0YTogKGFycmF5IGxlbmd0aD1zaXplKTogRGF0YSBmcm9tIHdoaWNoIHRoZSBiaXQgcmVhZGVyIHdpbGwKLSAqICAgcmVhZAotICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKLSAqIEBieXRlOiBDdXJyZW50IGJ5dGUgcG9zaXRpb24KLSAqCi0gKiBBIGJ5dGUgcmVhZGVyIGluc3RhbmNlLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgc2l6ZTsKLQotICBndWludCBieXRlOyAgLyogQnl0ZSBwb3NpdGlvbiAqLwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfSBHc3RCeXRlUmVhZGVyOwotCi1Hc3RCeXRlUmVhZGVyICogZ3N0X2J5dGVfcmVhZGVyX25ldyAgICAgICAgICAgICAoY29uc3QgZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplKSBHX0dOVUNfTUFMTE9DOwotdm9pZCAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9mcmVlICAgICAgICAgICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlcik7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAgICAgICAgICAgIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGNvbnN0IGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSk7Ci0KLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19zdWJfcmVhZGVyIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ5dGVSZWFkZXIgKiBzdWJfcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICBzaXplKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlciAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Qnl0ZVJlYWRlciAqIHN1Yl9yZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgIHNpemUpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgICAgICAgICAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludCBwb3MpOwotZ3VpbnQgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICAgICAgICAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlcik7Ci0KLWd1aW50ICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAgIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIpOwotCi1ndWludCAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplICAgICAgICAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwICAgICAgICAgICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQgbmJ5dGVzKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggICAgICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQ4ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OCAgICAgICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDggKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgICAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDE2ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfbGUgICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDE2ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQxNiAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlICAgIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQxNiAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZSAgIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGd1aW50MzIgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZSAgICAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnaW50MzIgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmUgICAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDMyICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfYmUgICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDMyICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlICAgIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQzMiAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAgIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGd1aW50MzIgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZSAgICAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnaW50MzIgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGUgICAoR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDY0ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfbGUgICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDY0ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlICAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQ2NCAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlICAgIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQ2NCAqdmFsKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ4ICAgICAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQ4ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDggICAgICAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDggKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlICAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDE2ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2xlICAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDE2ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZSAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQxNiAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9iZSAgIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQxNiAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGUgIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGd1aW50MzIgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfbGUgICAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnaW50MzIgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlICAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDMyICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2JlICAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDMyICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZSAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQzMiAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZSAgIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQzMiAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmUgIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGd1aW50MzIgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmUgICAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnaW50MzIgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlICAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBndWludDY0ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2xlICAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2ludDY0ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZSAgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ3VpbnQ2NCAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9iZSAgIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdpbnQ2NCAqdmFsKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZSAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2Zsb2F0ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZSAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2Zsb2F0ICp2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZSAgKEdzdEJ5dGVSZWFkZXIgKnJlYWRlciwgZ2RvdWJsZSAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmUgIChHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdkb3VibGUgKnZhbCk7Ci0KLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdmbG9hdCAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2JlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdmbG9hdCAqdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlIChjb25zdCBHc3RCeXRlUmVhZGVyICpyZWFkZXIsIGdkb3VibGUgKnZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9iZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyLCBnZG91YmxlICp2YWwpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhICAgICAgICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSwgZ3VpbnQ4ICAgICAgICoqIHZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhICAgICAgICAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSwgY29uc3QgZ3VpbnQ4ICoqIHZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSAgICAgICAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSwgY29uc3QgZ3VpbnQ4ICoqIHZhbCk7Ci0KLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmcocmVhZGVyLHN0cikgXAotICAgIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjgocmVhZGVyLHN0cikKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjggIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBnY2hhciAgICoqIHN0cik7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50MTYgKiogc3RyKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMiAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQzMiAqKiBzdHIpOwotCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZyhyZWFkZXIpIFwKLSAgICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOChyZWFkZXIpCi0KLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOCAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNiAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcik7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyIChHc3RCeXRlUmVhZGVyICogcmVhZGVyKTsKLQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZyhyZWFkZXIsc3RyKSBcCi0gICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmdfdXRmOChyZWFkZXIsc3RyKQotCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZyhyZWFkZXIsc3RyKSBcCi0gICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjgocmVhZGVyLHN0cikKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjggICAgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGNvbnN0IGdjaGFyICoqIHN0cik7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjggICAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgY29uc3QgZ2NoYXIgKiogc3RyKTsKLQotZ3VpbnQgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICAgICAgICAgIG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICAgICAgICAgIHBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgc2l6ZSk7Ci1ndWludCAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBwYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgKiB2YWx1ZSk7Ci0KLS8qKgotICogR1NUX0JZVEVfUkVBREVSX0lOSVQ6Ci0gKiBAZGF0YTogRGF0YSBmcm9tIHdoaWNoIHRoZSAjR3N0Qnl0ZVJlYWRlciBzaG91bGQgcmVhZAotICogQHNpemU6IFNpemUgb2YgQGRhdGEgaW4gYnl0ZXMKLSAqCi0gKiBBICNHc3RCeXRlUmVhZGVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIG1hY3JvLCBiZWZvcmUgaXQgY2FuIGJlCi0gKiB1c2VkLiBUaGlzIG1hY3JvIGNhbiB1c2VkIGJlIHRvIGluaXRpYWxpemUgYSB2YXJpYWJsZSwgYnV0IGl0IGNhbm5vdAotICogYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZS4gSW4gdGhhdCBjYXNlIHlvdSBoYXZlIHRvIHVzZQotICogZ3N0X2J5dGVfcmVhZGVyX2luaXQoKS4KLSAqLwotI2RlZmluZSBHU1RfQllURV9SRUFERVJfSU5JVChkYXRhLCBzaXplKSB7ZGF0YSwgc2l6ZSwgMH0KLQotLyogdW5jaGVja2VkIHZhcmlhbnRzICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgbmJ5dGVzKQotewotICByZWFkZXItPmJ5dGUgKz0gbmJ5dGVzOwotfQotCi0jZGVmaW5lIF9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKGJpdHMsdHlwZSxsb3dlcix1cHBlcixhZGopIFwKLVwKLXN0YXRpYyBpbmxpbmUgdHlwZSBcCi1nc3RfYnl0ZV9yZWFkZXJfcGVla18jI2xvd2VyIyNfdW5jaGVja2VkIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyKSBcCi17IFwKLSAgdHlwZSB2YWwgPSAodHlwZSkgR1NUX1JFQURfIyN1cHBlciAocmVhZGVyLT5kYXRhICsgcmVhZGVyLT5ieXRlKTsgXAotICBhZGogXAotICByZXR1cm4gdmFsOyBcCi19IFwKLVwKLXN0YXRpYyBpbmxpbmUgdHlwZSBcCi1nc3RfYnl0ZV9yZWFkZXJfZ2V0XyMjbG93ZXIjI191bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpIFwKLXsgXAotICB0eXBlIHZhbCA9IGdzdF9ieXRlX3JlYWRlcl9wZWVrXyMjbG93ZXIjI191bmNoZWNrZWQgKHJlYWRlcik7IFwKLSAgcmVhZGVyLT5ieXRlICs9IGJpdHMgLyA4OyBcCi0gIHJldHVybiB2YWw7IFwKLX0KLQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoOCxndWludDgsdWludDgsVUlOVDgsLyogKi8pCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCg4LGdpbnQ4LGludDgsVUlOVDgsLyogKi8pCi0KLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDE2LGd1aW50MTYsdWludDE2X2xlLFVJTlQxNl9MRSwvKiAqLykKLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDE2LGd1aW50MTYsdWludDE2X2JlLFVJTlQxNl9CRSwvKiAqLykKLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDE2LGdpbnQxNixpbnQxNl9sZSxVSU5UMTZfTEUsLyogKi8pCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgxNixnaW50MTYsaW50MTZfYmUsVUlOVDE2X0JFLC8qICovKQotCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgzMixndWludDMyLHVpbnQzMl9sZSxVSU5UMzJfTEUsLyogKi8pCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgzMixndWludDMyLHVpbnQzMl9iZSxVSU5UMzJfQkUsLyogKi8pCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgzMixnaW50MzIsaW50MzJfbGUsVUlOVDMyX0xFLC8qICovKQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoMzIsZ2ludDMyLGludDMyX2JlLFVJTlQzMl9CRSwvKiAqLykKLQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoMjQsZ3VpbnQzMix1aW50MjRfbGUsVUlOVDI0X0xFLC8qICovKQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoMjQsZ3VpbnQzMix1aW50MjRfYmUsVUlOVDI0X0JFLC8qICovKQotCi0vKiBmaXggdXAgdGhlIHNpZ24gZm9yIDI0LWJpdCBzaWduZWQgaW50cyBzdG9yZWQgaW4gMzItYml0IHNpZ25lZCBpbnRzICovCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgyNCxnaW50MzIsaW50MjRfbGUsVUlOVDI0X0xFLAotICAgIGlmICh2YWwgJiAweDAwODAwMDAwKSB2YWwgfD0gMHhmZjAwMDAwMDspCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgyNCxnaW50MzIsaW50MjRfYmUsVUlOVDI0X0JFLAotICAgIGlmICh2YWwgJiAweDAwODAwMDAwKSB2YWwgfD0gMHhmZjAwMDAwMDspCi0KLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDY0LGd1aW50NjQsdWludDY0X2xlLFVJTlQ2NF9MRSwvKiAqLykKLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDY0LGd1aW50NjQsdWludDY0X2JlLFVJTlQ2NF9CRSwvKiAqLykKLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDY0LGdpbnQ2NCxpbnQ2NF9sZSxVSU5UNjRfTEUsLyogKi8pCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCg2NCxnaW50NjQsaW50NjRfYmUsVUlOVDY0X0JFLC8qICovKQotCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX1VOQ0hFQ0tFRCgzMixnZmxvYXQsZmxvYXQzMl9sZSxGTE9BVF9MRSwvKiAqLykKLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDMyLGdmbG9hdCxmbG9hdDMyX2JlLEZMT0FUX0JFLC8qICovKQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19VTkNIRUNLRUQoNjQsZ2RvdWJsZSxmbG9hdDY0X2xlLERPVUJMRV9MRSwvKiAqLykKLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VEKDY0LGdkb3VibGUsZmxvYXQ2NF9iZSxET1VCTEVfQkUsLyogKi8pCi0KLSN1bmRlZiBfX0dFVF9QRUVLX0JJVFNfVU5DSEVDS0VECi0KLXN0YXRpYyBpbmxpbmUgY29uc3QgZ3VpbnQ4ICoKLWdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyKQotewotICByZXR1cm4gKGNvbnN0IGd1aW50OCAqKSAocmVhZGVyLT5kYXRhICsgcmVhZGVyLT5ieXRlKTsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBndWludDggKgotZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSkKLXsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotCi0gIGRhdGEgPSBnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkIChyZWFkZXIsIHNpemUpOwotICByZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIGlubGluZSBndWludDggKgotZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgZ3VpbnQgc2l6ZSkKLXsKLSAgZ2NvbnN0cG9pbnRlciBkYXRhID0gZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhX3VuY2hlY2tlZCAocmVhZGVyLCBzaXplKTsKLSAgcmV0dXJuIChndWludDggKikgZ19tZW1kdXAgKGRhdGEsIHNpemUpOwotfQotCi0vKiBVbmNoZWNrZWQgdmFyaWFudHMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgKi8KLXN0YXRpYyBpbmxpbmUgZ3VpbnQKLV9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3Bvc191bmNoZWNrZWQgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiByZWFkZXItPmJ5dGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQKLV9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZ191bmNoZWNrZWQgKGNvbnN0IEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHJldHVybiByZWFkZXItPnNpemUgLSByZWFkZXItPmJ5dGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQKLV9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3NpemVfdW5jaGVja2VkIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyKQotewotICByZXR1cm4gcmVhZGVyLT5zaXplOwotfQotCi0vKiBpbmxpbmVkIHZhcmlhbnRzIChkbyBub3QgdXNlIGRpcmVjdGx5KSAqLwotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1fZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfaW5saW5lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIDApOwotCi0gIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1fZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplX2lubGluZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCAwKTsKLQotICByZXR1cm4gX2dzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZV91bmNoZWNrZWQgKHJlYWRlcik7Ci19Ci0KLSNkZWZpbmUgX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoYml0cyx0eXBlLG5hbWUpIFwKLVwKLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4gXAotX2dzdF9ieXRlX3JlYWRlcl9wZWVrXyMjbmFtZSMjX2lubGluZSAoY29uc3QgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgdHlwZSAqIHZhbCkgXAoteyBcCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOyBcCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWwgIT0gTlVMTCwgRkFMU0UpOyBcCi0gIFwKLSAgaWYgKF9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZ191bmNoZWNrZWQgKHJlYWRlcikgPCAoYml0cyAvIDgpKSBcCi0gICAgcmV0dXJuIEZBTFNFOyBcCi1cCi0gICp2YWwgPSBnc3RfYnl0ZV9yZWFkZXJfcGVla18jI25hbWUjI191bmNoZWNrZWQgKHJlYWRlcik7IFwKLSAgcmV0dXJuIFRSVUU7IFwKLX0gXAotXAotc3RhdGljIGlubGluZSBnYm9vbGVhbiBcCi1fZ3N0X2J5dGVfcmVhZGVyX2dldF8jI25hbWUjI19pbmxpbmUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIHR5cGUgKiB2YWwpIFwKLXsgXAotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsgXAotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsICE9IE5VTEwsIEZBTFNFKTsgXAotICBcCi0gIGlmIChfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpIDwgKGJpdHMgLyA4KSkgXAotICAgIHJldHVybiBGQUxTRTsgXAotXAotICAqdmFsID0gZ3N0X2J5dGVfcmVhZGVyX2dldF8jI25hbWUjI191bmNoZWNrZWQgKHJlYWRlcik7IFwKLSAgcmV0dXJuIFRSVUU7IFwKLX0KLQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoOCxndWludDgsdWludDgpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSg4LGdpbnQ4LGludDgpCi0KLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDE2LGd1aW50MTYsdWludDE2X2xlKQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoMTYsZ3VpbnQxNix1aW50MTZfYmUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgxNixnaW50MTYsaW50MTZfbGUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgxNixnaW50MTYsaW50MTZfYmUpCi0KLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDMyLGd1aW50MzIsdWludDMyX2xlKQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoMzIsZ3VpbnQzMix1aW50MzJfYmUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgzMixnaW50MzIsaW50MzJfbGUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgzMixnaW50MzIsaW50MzJfYmUpCi0KLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDI0LGd1aW50MzIsdWludDI0X2xlKQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoMjQsZ3VpbnQzMix1aW50MjRfYmUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgyNCxnaW50MzIsaW50MjRfbGUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSgyNCxnaW50MzIsaW50MjRfYmUpCi0KLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDY0LGd1aW50NjQsdWludDY0X2xlKQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoNjQsZ3VpbnQ2NCx1aW50NjRfYmUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSg2NCxnaW50NjQsaW50NjRfbGUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSg2NCxnaW50NjQsaW50NjRfYmUpCi0KLV9fR1NUX0JZVEVfUkVBREVSX0dFVF9QRUVLX0JJVFNfSU5MSU5FKDMyLGdmbG9hdCxmbG9hdDMyX2xlKQotX19HU1RfQllURV9SRUFERVJfR0VUX1BFRUtfQklUU19JTkxJTkUoMzIsZ2Zsb2F0LGZsb2F0MzJfYmUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSg2NCxnZG91YmxlLGZsb2F0NjRfbGUpCi1fX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORSg2NCxnZG91YmxlLGZsb2F0NjRfYmUpCi0KLSN1bmRlZiBfX0dTVF9CWVRFX1JFQURFUl9HRVRfUEVFS19CSVRTX0lOTElORQotCi0jaWZuZGVmIEdTVF9CWVRFX1JFQURFUl9ESVNBQkxFX0lOTElORVMKLQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfaW5pdChyZWFkZXIsZGF0YSxzaXplKSBcCi0gICAgX2dzdF9ieXRlX3JlYWRlcl9pbml0X2lubGluZShyZWFkZXIsZGF0YSxzaXplKQotCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nKHJlYWRlcikgXAotICAgIF9nc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZ19pbmxpbmUocmVhZGVyKQotCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZShyZWFkZXIpIFwKLSAgICBfZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplX2lubGluZShyZWFkZXIpCi0KLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MocmVhZGVyKSBcCi0gICAgX2dzdF9ieXRlX3JlYWRlcl9nZXRfcG9zX2lubGluZShyZWFkZXIpCi0KLS8qIHdlIHVzZSBkZWZpbmVzIGhlcmUgc28gd2UgY2FuIGFkZCB0aGUgR19MSUtFTFkoKSAqLwotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4KHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OChyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfaW50OF9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQxNl9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfbGVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDI0X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfbGVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0KLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDgocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50OF9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDgocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4X2lubGluZShyZWFkZXIsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlX2lubGluZShyZWFkZXIsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGUocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQxNl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQxNl9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfYmVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGUocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MjRfbGVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9sZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlX2lubGluZShyZWFkZXIsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlX2lubGluZShyZWFkZXIsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MjRfYmUocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfbGVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmUocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla191aW50MzJfYmVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9iZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDMyX2JlX2lubGluZShyZWFkZXIsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlX2lubGluZShyZWFkZXIsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGUocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ2NF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfYmVfaW5saW5lKHJlYWRlcix2YWwpKQotCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGUocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDMyX2xlX2lubGluZShyZWFkZXIsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZShyZWFkZXIsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfYmVfaW5saW5lKHJlYWRlcix2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2xlKHJlYWRlcix2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZV9pbmxpbmUocmVhZGVyLHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0NjRfYmUocmVhZGVyLHZhbCkgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlX2lubGluZShyZWFkZXIsdmFsKSkKLQotI2VuZGlmIC8qIEdTVF9CWVRFX1JFQURFUl9ESVNBQkxFX0lOTElORVMgKi8KLQotc3RhdGljIGlubGluZSB2b2lkCi1fZ3N0X2J5dGVfcmVhZGVyX2luaXRfaW5saW5lIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBjb25zdCBndWludDggKiBkYXRhLCBndWludCBzaXplKQotewotICBnX3JldHVybl9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCk7Ci0KLSAgcmVhZGVyLT5kYXRhID0gZGF0YTsKLSAgcmVhZGVyLT5zaXplID0gc2l6ZTsKLSAgcmVhZGVyLT5ieXRlID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2dzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXJfaW5saW5lIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgIEdzdEJ5dGVSZWFkZXIgKiBzdWJfcmVhZGVyLCBndWludCBzaXplKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN1Yl9yZWFkZXIgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpIDwgc2l6ZSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgc3ViX3JlYWRlci0+ZGF0YSA9IHJlYWRlci0+ZGF0YSArIHJlYWRlci0+Ynl0ZTsKLSAgc3ViX3JlYWRlci0+Ynl0ZSA9IDA7Ci0gIHN1Yl9yZWFkZXItPnNpemUgPSBzaXplOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2dzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlcl9pbmxpbmUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsCi0gICAgR3N0Qnl0ZVJlYWRlciAqIHN1Yl9yZWFkZXIsIGd1aW50IHNpemUpCi17Ci0gIGlmICghX2dzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXJfaW5saW5lIChyZWFkZXIsIHN1Yl9yZWFkZXIsIHNpemUpKQotICAgIHJldHVybiBGQUxTRTsKLSAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkIChyZWFkZXIsIHNpemUpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2dzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YV9pbmxpbmUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHNpemUsIGd1aW50OCAqKiB2YWwpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA+IHJlYWRlci0+c2l6ZSB8fCBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpIDwgc2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gICp2YWwgPSBnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGFfdW5jaGVja2VkIChyZWFkZXIsIHNpemUpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2dzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YV9pbmxpbmUgKEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIGd1aW50IHNpemUsIGNvbnN0IGd1aW50OCAqKiB2YWwpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA+IHJlYWRlci0+c2l6ZSB8fCBfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpIDwgc2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gICp2YWwgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGFfdW5jaGVja2VkIChyZWFkZXIsIHNpemUpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2dzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfaW5saW5lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBzaXplLCBjb25zdCBndWludDggKiogdmFsKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhbCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPiByZWFkZXItPnNpemUgfHwgX2dzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nX3VuY2hlY2tlZCAocmVhZGVyKSA8IHNpemUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAqdmFsID0gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1fZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3NfaW5saW5lIChjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVhZGVyICE9IE5VTEwsIDApOwotCi0gIHJldHVybiBfZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3NfdW5jaGVja2VkIChyZWFkZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fZ3N0X2J5dGVfcmVhZGVyX3NraXBfaW5saW5lIChHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCBuYnl0ZXMpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZWFkZXIgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChHX1VOTElLRUxZIChfZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmdfdW5jaGVja2VkIChyZWFkZXIpIDwgbmJ5dGVzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmVhZGVyLT5ieXRlICs9IG5ieXRlczsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNpZm5kZWYgR1NUX0JZVEVfUkVBREVSX0RJU0FCTEVfSU5MSU5FUwotCi0jZGVmaW5lIGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YShyZWFkZXIsc2l6ZSx2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhX2lubGluZShyZWFkZXIsc2l6ZSx2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEocmVhZGVyLHNpemUsdmFsKSBcCi0gICAgR19MSUtFTFkoX2dzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YV9pbmxpbmUocmVhZGVyLHNpemUsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YShyZWFkZXIsc2l6ZSx2YWwpIFwKLSAgICBHX0xJS0VMWShfZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YV9pbmxpbmUocmVhZGVyLHNpemUsdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfcmVhZGVyX3NraXAocmVhZGVyLG5ieXRlcykgXAotICAgIEdfTElLRUxZKF9nc3RfYnl0ZV9yZWFkZXJfc2tpcF9pbmxpbmUocmVhZGVyLG5ieXRlcykpCi0KLSNlbmRpZiAvKiBHU1RfQllURV9SRUFERVJfRElTQUJMRV9JTkxJTkVTICovCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9CWVRFX1JFQURFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci1kb2NzLmggYi9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXItZG9jcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2M1OTYyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci1kb2NzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyogR1N0cmVhbWVyIGJ5dGUgd3JpdGVyIGR1bW15IGhlYWRlciBmb3IgZ3RrLWRvYwotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIFRoaXMgaGVhZGVyIGlzIG5vdCBpbnN0YWxsZWQsIGl0IGp1c3QgY29udGFpbnMgc3R1ZmYgZm9yIGd0ay1kb2MgdG8gcGFyc2UsCi0gKiBpbiBwYXJ0aWN1bGFyIGRvY3MgYW5kIHNvbWUgZHVtbXkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgc3RhdGljCi0gKiBpbmxpbmUgZnVuY3Rpb25zIHdlIGdlbmVyYXRlIHZpYSBtYWNyb3MgaW4gZ3N0Yml0cmVhZGVyLmguCi0gKi8KLQotI2Vycm9yICJUaGlzIGhlYWRlciBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgaW4gY29kZSwgaXQgaXMgb25seSBmb3IgZ3RrLWRvYyIKLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZDoKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHVuc2lnbmVkIDggYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0IGNoZWNraW5nIGlmIHRoZXJlCi0gKiBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50OCB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZDoKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDE2IHZhbCk7Ci0KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCi0gKi8KLXZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50MzIgdmFsKTsKLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZV91bmNoZWNrZWQ6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAotICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KLSAqLwotdm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQzMiB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZDoKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDY0IHZhbCk7Ci0KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCi0gKi8KLXZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50MTYgdmFsKTsKLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV91bmNoZWNrZWQ6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIgd2l0aG91dAotICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KLSAqLwotdm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQzMiB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZDoKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDMyIHZhbCk7Ci0KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCi0gKi8KLXZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50NjQgdmFsKTsKLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDg6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSBzaWduZWQgOCBiaXQgaW50ZWdlciB0byBAd3JpdGVyIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCi0gKi8KLXZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4X3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50OCB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfYmVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQxNiB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQzMiB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQzMiB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfYmVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQ2NCB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQxNiB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQzMiB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQzMiB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGVfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQ2NCB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZV91bmNoZWNrZWQ6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSBiaWcgZW5kaWFuIDMyIGJpdCBmbG9hdCB0byBAd3JpdGVyIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCi0gKi8KLXZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnZmxvYXQgdmFsKTsKLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgYmlnIGVuZGlhbiA2NCBiaXQgZmxvYXQgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9iZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2RvdWJsZSB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV91bmNoZWNrZWQ6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSBsaXR0bGUgZW5kaWFuIDMyIGJpdCBmbG9hdCB0byBAd3JpdGVyIHdpdGhvdXQKLSAqIGNoZWNraW5nIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgYnl0ZSB3cml0ZXIuCi0gKi8KLXZvaWQgZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnZmxvYXQgdmFsKTsKLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGVfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgbGl0dGxlIGVuZGlhbiA2NCBiaXQgZmxvYXQgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2RvdWJsZSB2YWwpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWQ6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQGRhdGE6IChpbikgKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IERhdGEgdG8gd3JpdGUKLSAqIEBzaXplOiBTaXplIG9mIEBkYXRhIGluIGJ5dGVzCi0gKgotICogV3JpdGVzIEBzaXplIGJ5dGVzIG9mIEBkYXRhIHRvIEB3cml0ZXIgd2l0aG91dAotICogY2hlY2tpbmcgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBieXRlIHdyaXRlci4KLSAqLwotdm9pZCBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGNvbnN0IGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSk7Ci0KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfdW5jaGVja2VkOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWx1ZTogVmFsdWUgdG8gYmUgd3JpdHRlbgotICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuCi0KLSAqCi0gKiBXcml0ZXMgQHNpemUgYnl0ZXMgY29udGFpbmluZyBAdmFsdWUgdG8gQHdyaXRlciB3aXRob3V0Ci0gKiBjaGVja2luZyBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGJ5dGUgd3JpdGVyLgotICovCi12b2lkIGdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDggdmFsdWUsIGd1aW50IHNpemUpOwotCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDVhYzU4Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjgzICswLDAgQEAKLS8qIEdTdHJlYW1lciBieXRlIHdyaXRlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jZGVmaW5lIEdTVF9CWVRFX1dSSVRFUl9ESVNBQkxFX0lOTElORVMKLSNpbmNsdWRlICJnc3RieXRld3JpdGVyLmgiCi0KLS8qKgotICogU0VDVElPTjpnc3RieXRld3JpdGVyCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFdyaXRlcyBkaWZmZXJlbnQgaW50ZWdlciwgc3RyaW5nIGFuZCBmbG9hdGluZyBwb2ludAotICogICAgIHR5cGVzIHRvIGEgbWVtb3J5IGJ1ZmZlciBhbmQgYWxsb3dzIHJlYWRpbmcKLSAqCi0gKiAjR3N0Qnl0ZVdyaXRlciBwcm92aWRlcyBhIGJ5dGUgd3JpdGVyIGFuZCByZWFkZXIgdGhhdCBjYW4gd3JpdGUvcmVhZCBkaWZmZXJlbnQKLSAqIGludGVnZXIgYW5kIGZsb2F0aW5nIHBvaW50IHR5cGVzIHRvL2Zyb20gYSBtZW1vcnkgYnVmZmVyLiBJdCBwcm92aWRlcyBmdW5jdGlvbnMKLSAqIGZvciB3cml0aW5nL3JlYWRpbmcgc2lnbmVkL3Vuc2lnbmVkLCBsaXR0bGUvYmlnIGVuZGlhbiBpbnRlZ2VycyBvZiA4LCAxNiwgMjQsCi0gKiAzMiBhbmQgNjQgYml0cyBhbmQgZnVuY3Rpb25zIGZvciByZWFkaW5nIGxpdHRsZS9iaWcgZW5kaWFuIGZsb2F0aW5nIHBvaW50cyBudW1iZXJzIG9mCi0gKiAzMiBhbmQgNjQgYml0cy4gSXQgYWxzbyBwcm92aWRlcyBmdW5jdGlvbnMgdG8gd3JpdGUvcmVhZCBOVUwtdGVybWluYXRlZCBzdHJpbmdzCi0gKiBpbiB2YXJpb3VzIGNoYXJhY3RlciBlbmNvZGluZ3MuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfbmV3OiAoc2tpcCkKLSAqCi0gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9ieXRlX3dyaXRlcl9mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldywgZW1wdHkgI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqLwotR3N0Qnl0ZVdyaXRlciAqCi1nc3RfYnl0ZV93cml0ZXJfbmV3ICh2b2lkKQotewotICBHc3RCeXRlV3JpdGVyICpyZXQgPSBnX3NsaWNlX25ldzAgKEdzdEJ5dGVXcml0ZXIpOwotCi0gIHJldC0+b3duZWQgPSBUUlVFOwotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9zaXplOiAoc2tpcCkKLSAqIEBzaXplOiBJbml0aWFsIHNpemUgb2YgZGF0YQotICogQGZpeGVkOiBJZiAlVFJVRSB0aGUgZGF0YSBjYW4ndCBiZSByZWFsbG9jYXRlZAotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4KLSAqIGluaXRpYWwgZGF0YSBzaXplLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9ieXRlX3dyaXRlcl9mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICovCi1Hc3RCeXRlV3JpdGVyICoKLWdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9zaXplIChndWludCBzaXplLCBnYm9vbGVhbiBmaXhlZCkKLXsKLSAgR3N0Qnl0ZVdyaXRlciAqcmV0ID0gZ3N0X2J5dGVfd3JpdGVyX25ldyAoKTsKLQotICByZXQtPmFsbG9jX3NpemUgPSBzaXplOwotICByZXQtPnBhcmVudC5kYXRhID0gZ19tYWxsb2MgKHJldC0+YWxsb2Nfc2l6ZSk7Ci0gIHJldC0+Zml4ZWQgPSBmaXhlZDsKLSAgcmV0LT5vd25lZCA9IFRSVUU7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfZGF0YTogKHNraXApCi0gKiBAZGF0YTogTWVtb3J5IGFyZWEgZm9yIHdyaXRpbmcKLSAqIEBzaXplOiBTaXplIG9mIEBkYXRhIGluIGJ5dGVzCi0gKiBAaW5pdGlhbGl6ZWQ6IElmICVUUlVFIHRoZSBjb21wbGV0ZSBkYXRhIGNhbiBiZSByZWFkIGZyb20gdGhlIGJlZ2lubmluZwotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4KLSAqIG1lbW9yeSBhcmVhLiBJZiBAaW5pdGlhbGl6ZWQgaXMgJVRSVUUgaXQgaXMgcG9zc2libGUgdG8KLSAqIHJlYWQgQHNpemUgYnl0ZXMgZnJvbSB0aGUgI0dzdEJ5dGVXcml0ZXIgZnJvbSB0aGUgYmVnaW5uaW5nLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9ieXRlX3dyaXRlcl9mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICovCi1Hc3RCeXRlV3JpdGVyICoKLWdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhIChndWludDggKiBkYXRhLCBndWludCBzaXplLCBnYm9vbGVhbiBpbml0aWFsaXplZCkKLXsKLSAgR3N0Qnl0ZVdyaXRlciAqcmV0ID0gZ3N0X2J5dGVfd3JpdGVyX25ldyAoKTsKLQotICByZXQtPnBhcmVudC5kYXRhID0gZGF0YTsKLSAgcmV0LT5wYXJlbnQuc2l6ZSA9IChpbml0aWFsaXplZCkgPyBzaXplIDogMDsKLSAgcmV0LT5hbGxvY19zaXplID0gc2l6ZTsKLSAgcmV0LT5maXhlZCA9IFRSVUU7Ci0gIHJldC0+b3duZWQgPSBGQUxTRTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9pbml0OgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqCi0gKiBJbml0aWFsaXplcyBAd3JpdGVyIHRvIGFuIGVtcHR5IGluc3RhbmNlCi0gKi8KLXZvaWQKLWdzdF9ieXRlX3dyaXRlcl9pbml0IChHc3RCeXRlV3JpdGVyICogd3JpdGVyKQotewotICBnX3JldHVybl9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCk7Ci0KLSAgbWVtc2V0ICh3cml0ZXIsIDAsIHNpemVvZiAoR3N0Qnl0ZVdyaXRlcikpOwotCi0gIHdyaXRlci0+b3duZWQgPSBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAc2l6ZTogSW5pdGlhbCBzaXplIG9mIGRhdGEKLSAqIEBmaXhlZDogSWYgJVRSVUUgdGhlIGRhdGEgY2FuJ3QgYmUgcmVhbGxvY2F0ZWQKLSAqCi0gKiBJbml0aWFsaXplcyBAd3JpdGVyIHdpdGggdGhlIGdpdmVuIGluaXRpYWwgZGF0YSBzaXplLgotICovCi12b2lkCi1nc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX3NpemUgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGd1aW50IHNpemUsCi0gICAgZ2Jvb2xlYW4gZml4ZWQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMKTsKLQotICBnc3RfYnl0ZV93cml0ZXJfaW5pdCAod3JpdGVyKTsKLQotICB3cml0ZXItPnBhcmVudC5kYXRhID0gZ19tYWxsb2MgKHNpemUpOwotICB3cml0ZXItPmFsbG9jX3NpemUgPSBzaXplOwotICB3cml0ZXItPmZpeGVkID0gZml4ZWQ7Ci0gIHdyaXRlci0+b3duZWQgPSBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAZGF0YTogKGFycmF5IGxlbmd0aD1zaXplKSAodHJhbnNmZXIgbm9uZSk6IE1lbW9yeSBhcmVhIGZvciB3cml0aW5nCi0gKiBAc2l6ZTogU2l6ZSBvZiBAZGF0YSBpbiBieXRlcwotICogQGluaXRpYWxpemVkOiBJZiAlVFJVRSB0aGUgY29tcGxldGUgZGF0YSBjYW4gYmUgcmVhZCBmcm9tIHRoZSBiZWdpbm5pbmcKLSAqCi0gKiBJbml0aWFsaXplcyBAd3JpdGVyIHdpdGggdGhlIGdpdmVuCi0gKiBtZW1vcnkgYXJlYS4gSWYgQGluaXRpYWxpemVkIGlzICVUUlVFIGl0IGlzIHBvc3NpYmxlIHRvCi0gKiByZWFkIEBzaXplIGJ5dGVzIGZyb20gdGhlICNHc3RCeXRlV3JpdGVyIGZyb20gdGhlIGJlZ2lubmluZy4KLSAqLwotdm9pZAotZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBndWludDggKiBkYXRhLAotICAgIGd1aW50IHNpemUsIGdib29sZWFuIGluaXRpYWxpemVkKQotewotICBnX3JldHVybl9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCk7Ci0KLSAgZ3N0X2J5dGVfd3JpdGVyX2luaXQgKHdyaXRlcik7Ci0KLSAgd3JpdGVyLT5wYXJlbnQuZGF0YSA9IGRhdGE7Ci0gIHdyaXRlci0+cGFyZW50LnNpemUgPSAoaW5pdGlhbGl6ZWQpID8gc2l6ZSA6IDA7Ci0gIHdyaXRlci0+YWxsb2Nfc2l6ZSA9IHNpemU7Ci0gIHdyaXRlci0+Zml4ZWQgPSBUUlVFOwotICB3cml0ZXItPm93bmVkID0gRkFMU0U7Ci19Ci0KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0OgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqCi0gKiBSZXNldHMgQHdyaXRlciBhbmQgZnJlZXMgdGhlIGRhdGEgaWYgaXQncwotICogb3duZWQgYnkgQHdyaXRlci4KLSAqLwotdm9pZAotZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0IChHc3RCeXRlV3JpdGVyICogd3JpdGVyKQotewotICBnX3JldHVybl9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCk7Ci0KLSAgaWYgKHdyaXRlci0+b3duZWQpCi0gICAgZ19mcmVlICgoZ3VpbnQ4ICopIHdyaXRlci0+cGFyZW50LmRhdGEpOwotICBtZW1zZXQgKHdyaXRlciwgMCwgc2l6ZW9mIChHc3RCeXRlV3JpdGVyKSk7Ci19Ci0KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKgotICogUmVzZXRzIEB3cml0ZXIgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgZGF0YS4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnX2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAoYXJyYXkpICh0cmFuc2ZlciBmdWxsKTogdGhlIGN1cnJlbnQgZGF0YS4gZ19mcmVlKCkgYWZ0ZXIKLSAqIHVzYWdlLgotICovCi1ndWludDggKgotZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YSAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlcikKLXsKLSAgZ3VpbnQ4ICpkYXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZGF0YSA9IChndWludDggKikgd3JpdGVyLT5wYXJlbnQuZGF0YTsKLSAgaWYgKCF3cml0ZXItPm93bmVkKQotICAgIGRhdGEgPSBnX21lbWR1cCAoZGF0YSwgd3JpdGVyLT5wYXJlbnQuc2l6ZSk7Ci0gIHdyaXRlci0+cGFyZW50LmRhdGEgPSBOVUxMOwotICBnc3RfYnl0ZV93cml0ZXJfcmVzZXQgKHdyaXRlcik7Ci0KLSAgcmV0dXJuIGRhdGE7Ci19Ci0KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfYnVmZmVyOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqCi0gKiBSZXNldHMgQHdyaXRlciBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBkYXRhIGFzIGJ1ZmZlci4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgY3VycmVudCBkYXRhIGFzIGJ1ZmZlci4gZ3N0X2J1ZmZlcl91bnJlZigpCi0gKiAgICAgYWZ0ZXIgdXNhZ2UuCi0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBncG9pbnRlciBkYXRhOwotICBnc2l6ZSBzaXplOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgc2l6ZSA9IHdyaXRlci0+cGFyZW50LnNpemU7Ci0gIGRhdGEgPSBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICh3cml0ZXIpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBpZiAoZGF0YSAhPSBOVUxMKSB7Ci0gICAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWZmZXIsCi0gICAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEsIHNpemUsIDAsIHNpemUsIGRhdGEsIGdfZnJlZSkpOwotICB9Ci0KLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfZnJlZToKLSAqIEB3cml0ZXI6IChpbikgKHRyYW5zZmVyIGZ1bGwpOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICoKLSAqIEZyZWVzIEB3cml0ZXIgYW5kIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGl0LgotICovCi12b2lkCi1nc3RfYnl0ZV93cml0ZXJfZnJlZSAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlcikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAod3JpdGVyICE9IE5VTEwpOwotCi0gIGdzdF9ieXRlX3dyaXRlcl9yZXNldCAod3JpdGVyKTsKLSAgZ19zbGljZV9mcmVlIChHc3RCeXRlV3JpdGVyLCB3cml0ZXIpOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YToKLSAqIEB3cml0ZXI6IChpbikgKHRyYW5zZmVyIGZ1bGwpOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICoKLSAqIEZyZWVzIEB3cml0ZXIgYW5kIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGl0IGV4Y2VwdAotICogdGhlIGN1cnJlbnQgZGF0YSwgd2hpY2ggaXMgcmV0dXJuZWQuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ19mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgY3VycmVudCBkYXRhLiBnX2ZyZWUoKSBhZnRlciB1c2FnZS4KLSAqLwotZ3VpbnQ4ICoKLWdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YSAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlcikKLXsKLSAgZ3VpbnQ4ICpkYXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZGF0YSA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKHdyaXRlcik7Ci0gIGdfc2xpY2VfZnJlZSAoR3N0Qnl0ZVdyaXRlciwgd3JpdGVyKTsKLQotICByZXR1cm4gZGF0YTsKLX0KLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlcjoKLSAqIEB3cml0ZXI6IChpbikgKHRyYW5zZmVyIGZ1bGwpOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICoKLSAqIEZyZWVzIEB3cml0ZXIgYW5kIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGl0IGV4Y2VwdAotICogdGhlIGN1cnJlbnQgZGF0YSwgd2hpY2ggaXMgcmV0dXJuZWQgYXMgI0dzdEJ1ZmZlci4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfYnVmZmVyX3VucmVmCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgY3VycmVudCBkYXRhIGFzIGJ1ZmZlci4gZ3N0X2J1ZmZlcl91bnJlZigpCi0gKiAgICAgYWZ0ZXIgdXNhZ2UuCi0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlciAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlcikKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMLCBOVUxMKTsKLQotICBidWZmZXIgPSBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgKHdyaXRlcik7Ci0gIGdfc2xpY2VfZnJlZSAoR3N0Qnl0ZVdyaXRlciwgd3JpdGVyKTsKLQotICByZXR1cm4gYnVmZmVyOwotfQotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqCi0gKiBSZXR1cm5zIHRoZSByZW1haW5pbmcgc2l6ZSBvZiBkYXRhIHRoYXQgY2FuIHN0aWxsIGJlIHdyaXR0ZW4uIElmCi0gKiAtMSBpcyByZXR1cm5lZCB0aGUgcmVtYWluaW5nIHNpemUgaXMgb25seSBsaW1pdGVkIGJ5IHN5c3RlbSByZXNvdXJjZXMuCi0gKgotICogUmV0dXJuczogdGhlIHJlbWFpbmluZyBzaXplIG9mIGRhdGEgdGhhdCBjYW4gc3RpbGwgYmUgd3JpdHRlbgotICovCi1ndWludAotZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKGNvbnN0IEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgLTEpOwotCi0gIGlmICghd3JpdGVyLT5maXhlZCkKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UKLSAgICByZXR1cm4gd3JpdGVyLT5hbGxvY19zaXplIC0gd3JpdGVyLT5wYXJlbnQuYnl0ZTsKLX0KLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2U6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHNpemU6IE51bWJlciBvZiBieXRlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUKLSAqCi0gKiBDaGVja3MgaWYgZW5vdWdoIGZyZWUgc3BhY2UgZnJvbSB0aGUgY3VycmVudCB3cml0ZSBjdXJzb3IgaXMKLSAqIGF2YWlsYWJsZSBhbmQgcmVhbGxvY2F0ZXMgaWYgbmVjZXNzYXJ5LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGF0IGxlYXN0IEBzaXplIGJ5dGVzIGFyZSBzdGlsbCBhdmFpbGFibGUKLSAqLwotZ2Jvb2xlYW4KLWdzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZSAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlciwgZ3VpbnQgc2l6ZSkKLXsKLSAgcmV0dXJuIF9nc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2VfaW5saW5lICh3cml0ZXIsIHNpemUpOwotfQotCi0KLSNkZWZpbmUgQ1JFQVRFX1dSSVRFX0ZVTkMoYml0cyx0eXBlLG5hbWUsd3JpdGVfZnVuYykgXAotZ2Jvb2xlYW4gXAotZ3N0X2J5dGVfd3JpdGVyX3B1dF8jI25hbWUgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgdHlwZSB2YWwpIFwKLXsgXAotICByZXR1cm4gX2dzdF9ieXRlX3dyaXRlcl9wdXRfIyNuYW1lIyNfaW5saW5lICh3cml0ZXIsIHZhbCk7IFwKLX0KLQotQ1JFQVRFX1dSSVRFX0ZVTkMgKDgsIGd1aW50OCwgdWludDgsIEdTVF9XUklURV9VSU5UOCk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoOCwgZ2ludDgsIGludDgsIEdTVF9XUklURV9VSU5UOCk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoMTYsIGd1aW50MTYsIHVpbnQxNl9sZSwgR1NUX1dSSVRFX1VJTlQxNl9MRSk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoMTYsIGd1aW50MTYsIHVpbnQxNl9iZSwgR1NUX1dSSVRFX1VJTlQxNl9CRSk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoMTYsIGdpbnQxNiwgaW50MTZfbGUsIEdTVF9XUklURV9VSU5UMTZfTEUpOwotQ1JFQVRFX1dSSVRFX0ZVTkMgKDE2LCBnaW50MTYsIGludDE2X2JlLCBHU1RfV1JJVEVfVUlOVDE2X0JFKTsKLUNSRUFURV9XUklURV9GVU5DICgyNCwgZ3VpbnQzMiwgdWludDI0X2xlLCBHU1RfV1JJVEVfVUlOVDI0X0xFKTsKLUNSRUFURV9XUklURV9GVU5DICgyNCwgZ3VpbnQzMiwgdWludDI0X2JlLCBHU1RfV1JJVEVfVUlOVDI0X0JFKTsKLUNSRUFURV9XUklURV9GVU5DICgyNCwgZ2ludDMyLCBpbnQyNF9sZSwgR1NUX1dSSVRFX1VJTlQyNF9MRSk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoMjQsIGdpbnQzMiwgaW50MjRfYmUsIEdTVF9XUklURV9VSU5UMjRfQkUpOwotQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBndWludDMyLCB1aW50MzJfbGUsIEdTVF9XUklURV9VSU5UMzJfTEUpOwotQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBndWludDMyLCB1aW50MzJfYmUsIEdTVF9XUklURV9VSU5UMzJfQkUpOwotQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnaW50MzIsIGludDMyX2xlLCBHU1RfV1JJVEVfVUlOVDMyX0xFKTsKLUNSRUFURV9XUklURV9GVU5DICgzMiwgZ2ludDMyLCBpbnQzMl9iZSwgR1NUX1dSSVRFX1VJTlQzMl9CRSk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGd1aW50NjQsIHVpbnQ2NF9sZSwgR1NUX1dSSVRFX1VJTlQ2NF9MRSk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGd1aW50NjQsIHVpbnQ2NF9iZSwgR1NUX1dSSVRFX1VJTlQ2NF9CRSk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGdpbnQ2NCwgaW50NjRfbGUsIEdTVF9XUklURV9VSU5UNjRfTEUpOwotQ1JFQVRFX1dSSVRFX0ZVTkMgKDY0LCBnaW50NjQsIGludDY0X2JlLCBHU1RfV1JJVEVfVUlOVDY0X0JFKTsKLQotQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnZmxvYXQsIGZsb2F0MzJfYmUsIEdTVF9XUklURV9GTE9BVF9CRSk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoMzIsIGdmbG9hdCwgZmxvYXQzMl9sZSwgR1NUX1dSSVRFX0ZMT0FUX0xFKTsKLUNSRUFURV9XUklURV9GVU5DICg2NCwgZ2RvdWJsZSwgZmxvYXQ2NF9iZSwgR1NUX1dSSVRFX0RPVUJMRV9CRSk7Ci1DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGdkb3VibGUsIGZsb2F0NjRfbGUsIEdTVF9XUklURV9ET1VCTEVfTEUpOwotCi1nYm9vbGVhbgotZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBjb25zdCBndWludDggKiBkYXRhLAotICAgIGd1aW50IHNpemUpCi17Ci0gIHJldHVybiBfZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX2lubGluZSAod3JpdGVyLCBkYXRhLCBzaXplKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ieXRlX3dyaXRlcl9maWxsIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBndWludDggdmFsdWUsIGd1aW50IHNpemUpCi17Ci0gIHJldHVybiBfZ3N0X2J5dGVfd3JpdGVyX2ZpbGxfaW5saW5lICh3cml0ZXIsIHZhbHVlLCBzaXplKTsKLX0KLQotI2RlZmluZSBDUkVBVEVfV1JJVEVfU1RSSU5HX0ZVTkMoYml0cyx0eXBlKSBcCi1nYm9vbGVhbiBcCi1nc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYjI2JpdHMgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgY29uc3QgdHlwZSAqIGRhdGEpIFwKLXsgXAotICBndWludCBzaXplID0gMDsgXAotICBcCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgRkFMU0UpOyBcCi0gIFwKLSAgLyogZW5kaWFubmVzcyBkb2VzIG5vdCBtYXR0ZXIgaWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgTlVMIHRlcm1pbmF0b3IgKi8gXAotICB3aGlsZSAoZGF0YVtzaXplXSAhPSAwKSB7IFwKLSAgICAvKiBoYXZlIHByZXZlbnQgb3ZlcmZsb3cgKi8gXAotICAgIGlmIChHX1VOTElLRUxZIChzaXplID09IEdfTUFYVUlOVCkpIFwKLSAgICAgIHJldHVybiBGQUxTRTsgXAotICAgICsrc2l6ZTsgXAotICB9IFwKLSAgKytzaXplOyBcCi0gIFwKLSAgaWYgKEdfVU5MSUtFTFkgKCFfZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlX2lubGluZSh3cml0ZXIsIHNpemUgKiAoYml0cyAvIDgpKSkpIFwKLSAgICByZXR1cm4gRkFMU0U7IFwKLSAgXAotICBfZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX2lubGluZSAod3JpdGVyLCAoY29uc3QgZ3VpbnQ4ICopIGRhdGEsIHNpemUgKiAoYml0cyAvIDgpKTsgXAotICBcCi0gIHJldHVybiBUUlVFOyBcCi19Ci0KLUNSRUFURV9XUklURV9TVFJJTkdfRlVOQyAoOCwgZ2NoYXIpOwotQ1JFQVRFX1dSSVRFX1NUUklOR19GVU5DICgxNiwgZ3VpbnQxNik7Ci1DUkVBVEVfV1JJVEVfU1RSSU5HX0ZVTkMgKDMyLCBndWludDMyKTsKLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50ODoKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHVuc2lnbmVkIDggYml0IGludGVnZXIgdG8gQHdyaXRlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiAxNiBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmU6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSB1bnNpZ25lZCBiaWcgZW5kaWFuIDI0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHVuc2lnbmVkIGJpZyBlbmRpYW4gMzIgYml0IGludGVnZXIgdG8gQHdyaXRlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgdW5zaWduZWQgYmlnIGVuZGlhbiA2NCBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGU6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHVuc2lnbmVkIGxpdHRsZSBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gQHdyaXRlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgdW5zaWduZWQgbGl0dGxlIGVuZGlhbiAzMiBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGU6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSB1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDg6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSBzaWduZWQgOCBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDE2IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2JlOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGJpZyBlbmRpYW4gMjQgYml0IGludGVnZXIgdG8gQHdyaXRlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmU6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSBzaWduZWQgYmlnIGVuZGlhbiAzMiBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHNpZ25lZCBiaWcgZW5kaWFuIDY0IGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gMTYgYml0IGludGVnZXIgdG8gQHdyaXRlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGU6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSBzaWduZWQgbGl0dGxlIGVuZGlhbiAyNCBiaXQgaW50ZWdlciB0byBAd3JpdGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9sZToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIHNpZ25lZCBsaXR0bGUgZW5kaWFuIDMyIGJpdCBpbnRlZ2VyIHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgc2lnbmVkIGxpdHRsZSBlbmRpYW4gNjQgYml0IGludGVnZXIgdG8gQHdyaXRlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIGJpZyBlbmRpYW4gMzIgYml0IGZsb2F0IHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmU6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSBiaWcgZW5kaWFuIDY0IGJpdCBmbG9hdCB0byBAd3JpdGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2xlOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEB2YWw6IFZhbHVlIHRvIHdyaXRlCi0gKgotICogV3JpdGVzIGEgbGl0dGxlIGVuZGlhbiAzMiBiaXQgZmxvYXQgdG8gQHdyaXRlci4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIGxpdHRsZSBlbmRpYW4gNjQgYml0IGZsb2F0IHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4OgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEBkYXRhOiAodHJhbnNmZXIgbm9uZSkgKGFycmF5IHplcm8tdGVybWluYXRlZD0xKSAodHlwZSB1dGY4KTogVVRGOCBzdHJpbmcgdG8KLSAqICAgICB3cml0ZQotICoKLSAqIFdyaXRlcyBhIE5VTC10ZXJtaW5hdGVkIFVURjggc3RyaW5nIHRvIEB3cml0ZXIgKGluY2x1ZGluZyB0aGUgdGVybWluYXRvcikuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYxNjoKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAZGF0YTogKHRyYW5zZmVyIG5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSk6IFVURjE2IHN0cmluZyB0byB3cml0ZQotICoKLSAqIFdyaXRlcyBhIE5VTC10ZXJtaW5hdGVkIFVURjE2IHN0cmluZyB0byBAd3JpdGVyIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzI6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICogQGRhdGE6ICh0cmFuc2ZlciBub25lKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBVVEYzMiBzdHJpbmcgdG8gd3JpdGUKLSAqCi0gKiBXcml0ZXMgYSBOVUwtdGVybWluYXRlZCBVVEYzMiBzdHJpbmcgdG8gQHdyaXRlciAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgdmFsdWUgY291bGQgYmUgd3JpdHRlbgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YToKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAZGF0YTogKHRyYW5zZmVyIG5vbmUpIChhcnJheSBsZW5ndGg9c2l6ZSk6IERhdGEgdG8gd3JpdGUKLSAqIEBzaXplOiBTaXplIG9mIEBkYXRhIGluIGJ5dGVzCi0gKgotICogV3JpdGVzIEBzaXplIGJ5dGVzIG9mIEBkYXRhIHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHZhbHVlIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfZmlsbDoKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAdmFsdWU6IFZhbHVlIHRvIGJlIHdyaXR0ZW4KLSAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbgotICoKLSAqIFdyaXRlcyBAc2l6ZSBieXRlcyBjb250YWluaW5nIEB2YWx1ZSB0byBAd3JpdGVyLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSB2YWx1ZSBjb3VsZCBiZSB3cml0dGVuCi0gKi8KLQotLyoqCi0gKiBnc3RfYnl0ZV93cml0ZXJfcHV0X2J1ZmZlcjoKLSAqIEB3cml0ZXI6ICNHc3RCeXRlV3JpdGVyIGluc3RhbmNlCi0gKiBAYnVmZmVyOiAodHJhbnNmZXIgbm9uZSk6IHNvdXJjZSAjR3N0QnVmZmVyCi0gKiBAb2Zmc2V0OiBvZmZzZXQgdG8gY29weSBmcm9tCi0gKiBAc2l6ZTogdG90YWwgc2l6ZSB0byBjb3B5LiBJZiAtMSwgYWxsIGRhdGEgaXMgY29waWVkCi0gKgotICogV3JpdGVzIEBzaXplIGJ5dGVzIG9mIEBkYXRhIHRvIEB3cml0ZXIuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGRhdGEgY291bGQgYmUgd3JpdHRlbgotICoKLSAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RieXRld3JpdGVyLmggYi9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxYmZjYi4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBACi0vKiBHU3RyZWFtZXIgYnl0ZSB3cml0ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQllURV9XUklURVJfSF9fCi0jZGVmaW5lIF9fR1NUX0JZVEVfV1JJVEVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX0JZVEVfV1JJVEVSKHdyaXRlcikgKChHc3RCeXRlV3JpdGVyICopICh3cml0ZXIpKQotCi0vKioKLSAqIEdzdEJ5dGVXcml0ZXI6Ci0gKiBAcGFyZW50OiAjR3N0Qnl0ZVJlYWRlciBwYXJlbnQKLSAqIEBhbGxvY19zaXplOiBBbGxvY2F0aW9uIHNpemUgb2YgdGhlIGRhdGEKLSAqIEBmaXhlZDogSWYgJVRSVUUgbm8gcmVhbGxvY2F0aW9ucyBhcmUgYWxsb3dlZAotICogQG93bmVkOiBJZiAlRkFMU0Ugbm8gcmVhbGxvY2F0aW9ucyBhcmUgYWxsb3dlZCBhbmQgY29waWVzIG9mIGRhdGEgYXJlIHJldHVybmVkCi0gKgotICogQSBieXRlIHdyaXRlciBpbnN0YW5jZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBHc3RCeXRlUmVhZGVyIHBhcmVudDsKLQotICBndWludCBhbGxvY19zaXplOwotCi0gIGdib29sZWFuIGZpeGVkOwotICBnYm9vbGVhbiBvd25lZDsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX0gR3N0Qnl0ZVdyaXRlcjsKLQotR3N0Qnl0ZVdyaXRlciAqIGdzdF9ieXRlX3dyaXRlcl9uZXcgICAgICAgICAgICAgKHZvaWQpIEdfR05VQ19NQUxMT0M7Ci1Hc3RCeXRlV3JpdGVyICogZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUgICAoZ3VpbnQgc2l6ZSwgZ2Jvb2xlYW4gZml4ZWQpIEdfR05VQ19NQUxMT0M7Ci1Hc3RCeXRlV3JpdGVyICogZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX2RhdGEgICAoZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplLCBnYm9vbGVhbiBpbml0aWFsaXplZCkgR19HTlVDX01BTExPQzsKLQotdm9pZCAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9pbml0ICAgICAgICAgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlcik7Ci12b2lkICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludCBzaXplLCBnYm9vbGVhbiBmaXhlZCk7Ci12b2lkICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDggKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgc2l6ZSwgZ2Jvb2xlYW4gaW5pdGlhbGl6ZWQpOwotCi12b2lkICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2ZyZWUgICAgICAgICAgICAgICAgICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIpOwotZ3VpbnQ4ICogICAgICAgIGdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YSAgICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKTsKLUdzdEJ1ZmZlciAqICAgICBnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2J1ZmZlciAgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlcikgR19HTlVDX01BTExPQzsKLQotdm9pZCAgICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9yZXNldCAgICAgICAgICAgICAgICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKTsKLWd1aW50OCAqICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICAgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlcik7Ci1Hc3RCdWZmZXIgKiAgICAgZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfYnVmZmVyICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIpIEdfR05VQ19NQUxMT0M7Ci0KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3M6Ci0gKiBAd3JpdGVyOiAjR3N0Qnl0ZVdyaXRlciBpbnN0YW5jZQotICoKLSAqIFJldHVybnM6IFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSByZWFkL3dyaXRlIGN1cnNvcgotICovCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEBwb3M6IG5ldyBwb3NpdGlvbgotICoKLSAqIFNldHMgdGhlIGN1cnJlbnQgcmVhZC93cml0ZSBjdXJzb3Igb2YgQHdyaXRlci4gVGhlIG5ldyBwb3NpdGlvbgotICogY2FuIG9ubHkgYmUgYmV0d2VlbiAwIGFuZCB0aGUgY3VycmVudCBzaXplLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBuZXcgcG9zaXRpb24gY291bGQgYmUgc2V0Ci0gKi8KLS8qKgotICogZ3N0X2J5dGVfd3JpdGVyX2dldF9zaXplOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqCi0gKiBSZXR1cm5zOiBUaGUgY3VycmVudCwgaW5pdGlhbGl6ZWQgc2l6ZSBvZiB0aGUgZGF0YQotICovCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1nc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoY29uc3QgR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKQotewotICByZXR1cm4gZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKChjb25zdCBHc3RCeXRlUmVhZGVyICopIHdyaXRlcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50IHBvcykKLXsKLSAgcmV0dXJuIGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zIChHU1RfQllURV9SRUFERVIgKHdyaXRlciksIHBvcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQKLWdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoY29uc3QgR3N0Qnl0ZVdyaXRlciAqd3JpdGVyKQotewotICByZXR1cm4gZ3N0X2J5dGVfcmVhZGVyX2dldF9zaXplICgoY29uc3QgR3N0Qnl0ZVJlYWRlciAqKSB3cml0ZXIpOwotfQotCi1ndWludCAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgICAgIChjb25zdCBHc3RCeXRlV3JpdGVyICp3cml0ZXIpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZSAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludCBzaXplKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggICAgICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDggdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDggICAgICAgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2ludDggdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZSAgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQxNiB2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDE2IHZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9iZSAgICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQxNiB2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MTZfbGUgICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50MTYgdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZSAgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQzMiB2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDMyIHZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZSAgICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQzMiB2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfbGUgICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50MzIgdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZSAgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQzMiB2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDMyIHZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZSAgICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQzMiB2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGUgICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50MzIgdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZSAgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ3VpbnQ2NCB2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBndWludDY0IHZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9iZSAgICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdpbnQ2NCB2YWwpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50NjRfbGUgICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnaW50NjQgdmFsKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZSAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBnZmxvYXQgdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGUgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2Zsb2F0IHZhbCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGdkb3VibGUgdmFsKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGUgICAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgZ2RvdWJsZSB2YWwpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICAgICAgICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGNvbnN0IGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2ZpbGwgICAgICAgICAgICAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGd1aW50OCB2YWx1ZSwgZ3VpbnQgc2l6ZSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmOCAgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGNvbnN0IGdjaGFyICpkYXRhKTsKLWdib29sZWFuICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGYxNiAgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgY29uc3QgZ3VpbnQxNiAqZGF0YSk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzIgIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIGNvbnN0IGd1aW50MzIgKmRhdGEpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfYnVmZmVyICAgICAgICAoR3N0Qnl0ZVdyaXRlciAqd3JpdGVyLCBHc3RCdWZmZXIgKiBidWZmZXIsIGdzaXplIG9mZnNldCwgZ3NzaXplIHNpemUpOwotCi0vKioKLSAqIGdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nOgotICogQHdyaXRlcjogI0dzdEJ5dGVXcml0ZXIgaW5zdGFuY2UKLSAqIEBkYXRhOiAoaW4pIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSk6IE51bGwgdGVybWluYXRlZCBzdHJpbmcKLSAqCi0gKiBXcml0ZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBAd3JpdGVyIChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IpLiBUaGUKLSAqIHN0cmluZyBpcyBhc3N1bWVkIHRvIGJlIGluIGFuIDgtYml0IGVuY29kaW5nIChlLmcuIEFTQ0lJLFVURi04IG9yCi0gKiBJU08tODg1OS0xKS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgc3RyaW5nIGNvdWxkIGJlIHdyaXR0ZW4KLSAqLwotI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZyh3cml0ZXIsIGRhdGEpIFwKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmOCh3cml0ZXIsIGRhdGEpCi0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQKLV9nc3RfYnl0ZV93cml0ZXJfbmV4dF9wb3cyIChndWludCBuKQotewotICBndWludCByZXQgPSAxNjsKLQotICAvKiBXZSBzdGFydCB3aXRoIDE2LCBzbWFsbGVyIGFsbG9jYXRpb25zIG1ha2Ugbm8gc2Vuc2UgKi8KLQotICB3aGlsZSAocmV0IDwgbiAmJiByZXQgPiAwKQotICAgIHJldCA8PD0gMTsKLQotICByZXR1cm4gcmV0ID8gcmV0IDogbjsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2dzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZV9pbmxpbmUgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGd1aW50IHNpemUpCi17Ci0gIGdwb2ludGVyIGRhdGE7Ci0KLSAgaWYgKEdfTElLRUxZIChzaXplIDw9IHdyaXRlci0+YWxsb2Nfc2l6ZSAtIHdyaXRlci0+cGFyZW50LmJ5dGUpKQotICAgIHJldHVybiBUUlVFOwotICBpZiAoR19VTkxJS0VMWSAod3JpdGVyLT5maXhlZCB8fCAhd3JpdGVyLT5vd25lZCkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoR19VTkxJS0VMWSAod3JpdGVyLT5wYXJlbnQuYnl0ZSA+IEdfTUFYVUlOVCAtIHNpemUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICB3cml0ZXItPmFsbG9jX3NpemUgPSBfZ3N0X2J5dGVfd3JpdGVyX25leHRfcG93MiAod3JpdGVyLT5wYXJlbnQuYnl0ZSArIHNpemUpOwotICBkYXRhID0gZ190cnlfcmVhbGxvYyAoKGd1aW50OCAqKSB3cml0ZXItPnBhcmVudC5kYXRhLCB3cml0ZXItPmFsbG9jX3NpemUpOwotICBpZiAoR19VTkxJS0VMWSAoZGF0YSA9PSBOVUxMKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgd3JpdGVyLT5wYXJlbnQuZGF0YSA9IChndWludDggKikgZGF0YTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotI2RlZmluZSBfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyhiaXRzLHR5cGUsbmFtZSx3cml0ZV9mdW5jKSBcCi1zdGF0aWMgaW5saW5lIHZvaWQgXAotZ3N0X2J5dGVfd3JpdGVyX3B1dF8jI25hbWUjI191bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKndyaXRlciwgdHlwZSB2YWwpIFwKLXsgXAotICBndWludDggKndyaXRlX2RhdGE7IFwKLSAgXAotICB3cml0ZV9kYXRhID0gKGd1aW50OCAqKSB3cml0ZXItPnBhcmVudC5kYXRhICsgd3JpdGVyLT5wYXJlbnQuYnl0ZTsgXAotICB3cml0ZV9mdW5jICh3cml0ZV9kYXRhLCB2YWwpOyBcCi0gIHdyaXRlci0+cGFyZW50LmJ5dGUgKz0gYml0cy84OyBcCi0gIHdyaXRlci0+cGFyZW50LnNpemUgPSBNQVggKHdyaXRlci0+cGFyZW50LnNpemUsIHdyaXRlci0+cGFyZW50LmJ5dGUpOyBcCi19IFwKLVwKLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4gXAotX2dzdF9ieXRlX3dyaXRlcl9wdXRfIyNuYW1lIyNfaW5saW5lIChHc3RCeXRlV3JpdGVyICp3cml0ZXIsIHR5cGUgdmFsKSBcCi17IFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMLCBGQUxTRSk7IFwKLSAgXAotICBpZiAoR19VTkxJS0VMWSAoIV9nc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2VfaW5saW5lKHdyaXRlciwgYml0cy84KSkpIFwKLSAgICByZXR1cm4gRkFMU0U7IFwKLSAgXAotICBnc3RfYnl0ZV93cml0ZXJfcHV0XyMjbmFtZSMjX3VuY2hlY2tlZCAod3JpdGVyLCB2YWwpOyBcCi0gIFwKLSAgcmV0dXJuIFRSVUU7IFwKLX0KLQotX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDgsIGd1aW50OCwgdWludDgsIEdTVF9XUklURV9VSU5UOCkKLV9fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICg4LCBnaW50OCwgaW50OCwgR1NUX1dSSVRFX1VJTlQ4KQotX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDE2LCBndWludDE2LCB1aW50MTZfbGUsIEdTVF9XUklURV9VSU5UMTZfTEUpCi1fX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoMTYsIGd1aW50MTYsIHVpbnQxNl9iZSwgR1NUX1dSSVRFX1VJTlQxNl9CRSkKLV9fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgxNiwgZ2ludDE2LCBpbnQxNl9sZSwgR1NUX1dSSVRFX1VJTlQxNl9MRSkKLV9fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgxNiwgZ2ludDE2LCBpbnQxNl9iZSwgR1NUX1dSSVRFX1VJTlQxNl9CRSkKLV9fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgyNCwgZ3VpbnQzMiwgdWludDI0X2xlLCBHU1RfV1JJVEVfVUlOVDI0X0xFKQotX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDI0LCBndWludDMyLCB1aW50MjRfYmUsIEdTVF9XUklURV9VSU5UMjRfQkUpCi1fX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoMjQsIGdpbnQzMiwgaW50MjRfbGUsIEdTVF9XUklURV9VSU5UMjRfTEUpCi1fX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoMjQsIGdpbnQzMiwgaW50MjRfYmUsIEdTVF9XUklURV9VSU5UMjRfQkUpCi1fX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoMzIsIGd1aW50MzIsIHVpbnQzMl9sZSwgR1NUX1dSSVRFX1VJTlQzMl9MRSkKLV9fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgzMiwgZ3VpbnQzMiwgdWludDMyX2JlLCBHU1RfV1JJVEVfVUlOVDMyX0JFKQotX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnaW50MzIsIGludDMyX2xlLCBHU1RfV1JJVEVfVUlOVDMyX0xFKQotX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnaW50MzIsIGludDMyX2JlLCBHU1RfV1JJVEVfVUlOVDMyX0JFKQotX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDY0LCBndWludDY0LCB1aW50NjRfbGUsIEdTVF9XUklURV9VSU5UNjRfTEUpCi1fX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGd1aW50NjQsIHVpbnQ2NF9iZSwgR1NUX1dSSVRFX1VJTlQ2NF9CRSkKLV9fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICg2NCwgZ2ludDY0LCBpbnQ2NF9sZSwgR1NUX1dSSVRFX1VJTlQ2NF9MRSkKLV9fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICg2NCwgZ2ludDY0LCBpbnQ2NF9iZSwgR1NUX1dSSVRFX1VJTlQ2NF9CRSkKLQotX19HU1RfQllURV9XUklURVJfQ1JFQVRFX1dSSVRFX0ZVTkMgKDMyLCBnZmxvYXQsIGZsb2F0MzJfYmUsIEdTVF9XUklURV9GTE9BVF9CRSkKLV9fR1NUX0JZVEVfV1JJVEVSX0NSRUFURV9XUklURV9GVU5DICgzMiwgZ2Zsb2F0LCBmbG9hdDMyX2xlLCBHU1RfV1JJVEVfRkxPQVRfTEUpCi1fX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGdkb3VibGUsIGZsb2F0NjRfYmUsIEdTVF9XUklURV9ET1VCTEVfQkUpCi1fX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQyAoNjQsIGdkb3VibGUsIGZsb2F0NjRfbGUsIEdTVF9XUklURV9ET1VCTEVfTEUpCi0KLSN1bmRlZiBfX0dTVF9CWVRFX1dSSVRFUl9DUkVBVEVfV1JJVEVfRlVOQwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWQgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGNvbnN0IGd1aW50OCAqIGRhdGEsCi0gICAgZ3VpbnQgc2l6ZSkKLXsKLSAgbWVtY3B5ICgoZ3VpbnQ4ICopICYgd3JpdGVyLT5wYXJlbnQuZGF0YVt3cml0ZXItPnBhcmVudC5ieXRlXSwgZGF0YSwgc2l6ZSk7Ci0gIHdyaXRlci0+cGFyZW50LmJ5dGUgKz0gc2l6ZTsKLSAgd3JpdGVyLT5wYXJlbnQuc2l6ZSA9IE1BWCAod3JpdGVyLT5wYXJlbnQuc2l6ZSwgd3JpdGVyLT5wYXJlbnQuYnl0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLV9nc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfaW5saW5lIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBjb25zdCBndWludDggKiBkYXRhLAotICAgIGd1aW50IHNpemUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh3cml0ZXIgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChHX1VOTElLRUxZICghX2dzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZV9pbmxpbmUgKHdyaXRlciwgc2l6ZSkpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGFfdW5jaGVja2VkICh3cml0ZXIsIGRhdGEsIHNpemUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZCAoR3N0Qnl0ZVdyaXRlciAqIHdyaXRlciwgZ3VpbnQ4IHZhbHVlLCBndWludCBzaXplKQotewotICBtZW1zZXQgKChndWludDggKikgJiB3cml0ZXItPnBhcmVudC5kYXRhW3dyaXRlci0+cGFyZW50LmJ5dGVdLCB2YWx1ZSwgc2l6ZSk7Ci0gIHdyaXRlci0+cGFyZW50LmJ5dGUgKz0gc2l6ZTsKLSAgd3JpdGVyLT5wYXJlbnQuc2l6ZSA9IE1BWCAod3JpdGVyLT5wYXJlbnQuc2l6ZSwgd3JpdGVyLT5wYXJlbnQuYnl0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLV9nc3RfYnl0ZV93cml0ZXJfZmlsbF9pbmxpbmUgKEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGd1aW50OCB2YWx1ZSwgZ3VpbnQgc2l6ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFfZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlX2lubGluZSAod3JpdGVyLCBzaXplKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZCAod3JpdGVyLCB2YWx1ZSwgc2l6ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXJfdW5jaGVja2VkIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgZ3NpemUgb2Zmc2V0LCBnc3NpemUgc2l6ZSkKLXsKLSAgaWYgKHNpemUgPT0gLTEpIHsKLSAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLQotICAgIGlmIChvZmZzZXQgPj0gKGdzaXplKSBzaXplKQotICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZSAtPSBvZmZzZXQ7Ci0gIH0KLQotICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZmZlciwgb2Zmc2V0LAotICAgICAgKGd1aW50OCAqKSAmIHdyaXRlci0+cGFyZW50LmRhdGFbd3JpdGVyLT5wYXJlbnQuYnl0ZV0sIHNpemUpOwotICB3cml0ZXItPnBhcmVudC5ieXRlICs9IHNpemU7Ci0gIHdyaXRlci0+cGFyZW50LnNpemUgPSBNQVggKHdyaXRlci0+cGFyZW50LnNpemUsIHdyaXRlci0+cGFyZW50LmJ5dGUpOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXJfaW5saW5lIChHc3RCeXRlV3JpdGVyICogd3JpdGVyLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgZ3NpemUgb2Zmc2V0LCBnc3NpemUgc2l6ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaXplID49IC0xLCBGQUxTRSk7Ci0KLSAgaWYgKHNpemUgPT0gLTEpIHsKLSAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLQotICAgIGlmIChvZmZzZXQgPj0gKGdzaXplKSBzaXplKQotICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBzaXplIC09IG9mZnNldDsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZICghX2dzdF9ieXRlX3dyaXRlcl9lbnN1cmVfZnJlZV9zcGFjZV9pbmxpbmUgKHdyaXRlciwgc2l6ZSkpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBnc3RfYnl0ZV93cml0ZXJfcHV0X2J1ZmZlcl91bmNoZWNrZWQgKHdyaXRlciwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0jaWZuZGVmIEdTVF9CWVRFX1dSSVRFUl9ESVNBQkxFX0lOTElORVMKLQotLyogd2UgdXNlIGRlZmluZXMgaGVyZSBzbyB3ZSBjYW4gYWRkIHRoZSBHX0xJS0VMWSgpICovCi0KLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlKHdyaXRlciwgc2l6ZSkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX2Vuc3VyZV9mcmVlX3NwYWNlX2lubGluZSAod3JpdGVyLCBzaXplKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OCh3cml0ZXIsIHZhbCkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF9pbmxpbmUgKHdyaXRlciwgdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ4KHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDhfaW5saW5lICh3cml0ZXIsIHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlKHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGUod3JpdGVyLCB2YWwpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlX2lubGluZSAod3JpdGVyLCB2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlKHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlX2lubGluZSAod3JpdGVyLCB2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlKHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2xlX2lubGluZSAod3JpdGVyLCB2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9iZSh3cml0ZXIsIHZhbCkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmVfaW5saW5lICh3cml0ZXIsIHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2xlKHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQyNF9sZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZSh3cml0ZXIsIHZhbCkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9iZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZSh3cml0ZXIsIHZhbCkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQyNF9sZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmUod3JpdGVyLCB2YWwpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX2lubGluZSAod3JpdGVyLCB2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSh3cml0ZXIsIHZhbCkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfaW5saW5lICh3cml0ZXIsIHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmUod3JpdGVyLCB2YWwpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfYmVfaW5saW5lICh3cml0ZXIsIHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGUod3JpdGVyLCB2YWwpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGVfaW5saW5lICh3cml0ZXIsIHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlKHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfbGUod3JpdGVyLCB2YWwpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2xlX2lubGluZSAod3JpdGVyLCB2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlKHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlX2lubGluZSAod3JpdGVyLCB2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlKHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2xlX2lubGluZSAod3JpdGVyLCB2YWwpKQotCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9iZSh3cml0ZXIsIHZhbCkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDMyX2JlX2lubGluZSAod3JpdGVyLCB2YWwpKQotI2RlZmluZSBnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGUod3JpdGVyLCB2YWwpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQzMl9sZV9pbmxpbmUgKHdyaXRlciwgdmFsKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2JlKHdyaXRlciwgdmFsKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmVfaW5saW5lICh3cml0ZXIsIHZhbCkpCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfZmxvYXQ2NF9sZSh3cml0ZXIsIHZhbCkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9mbG9hdDY0X2xlX2lubGluZSAod3JpdGVyLCB2YWwpKQotCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YSh3cml0ZXIsIGRhdGEsIHNpemUpIFwKLSAgICBHX0xJS0VMWSAoX2dzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV9pbmxpbmUgKHdyaXRlciwgZGF0YSwgc2l6ZSkpCi0jZGVmaW5lIGdzdF9ieXRlX3dyaXRlcl9maWxsKHdyaXRlciwgdmFsLCBzaXplKSBcCi0gICAgR19MSUtFTFkgKF9nc3RfYnl0ZV93cml0ZXJfZmlsbF9pbmxpbmUgKHdyaXRlciwgdmFsLCBzaXplKSkKLSNkZWZpbmUgZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXIod3JpdGVyLCBidWZmZXIsIG9mZnNldCwgc2l6ZSkgXAotICAgIEdfTElLRUxZIChfZ3N0X2J5dGVfd3JpdGVyX3B1dF9idWZmZXJfaW5saW5lICh3cml0ZXIsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKSkKLQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9CWVRFX1dSSVRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5ZWRmMy4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzI2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIGdzdGNvbGxlY3RwYWRzLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3Rjb2xsZWN0cGFkcwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBtYW5hZ2VzIGEgc2V0IG9mIHBhZHMgdGhhdCBvcGVyYXRlIGluIGNvbGxlY3QgbW9kZQotICogQHNlZV9hbHNvOgotICoKLSAqIE1hbmFnZXMgYSBzZXQgb2YgcGFkcyB0aGF0IG9wZXJhdGUgaW4gY29sbGVjdCBtb2RlLiBUaGlzIG1lYW5zIHRoYXQgY29udHJvbAotICogaXMgZ2l2ZW4gdG8gdGhlIG1hbmFnZXIgb2YgdGhpcyBvYmplY3Qgd2hlbiBhbGwgcGFkcyBoYXZlIGRhdGEuCi0gKiA8aXRlbWl6ZWRsaXN0PgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgQ29sbGVjdHBhZHMgYXJlIGNyZWF0ZWQgd2l0aCBnc3RfY29sbGVjdF9wYWRzX25ldygpLiBBIGNhbGxiYWNrIHNob3VsZCB0aGVuCi0gKiAgICAgYmUgaW5zdGFsbGVkIHdpdGggZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKCkuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgUGFkcyBhcmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gd2l0aCBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQoKS8KLSAqICAgICBnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQoKS4gVGhlIHBhZAotICogICAgIGhhcyB0byBiZSBhIHNpbmtwYWQuIFRoZSBjaGFpbiBhbmQgZXZlbnQgZnVuY3Rpb25zIG9mIHRoZSBwYWQgYXJlCi0gKiAgICAgb3ZlcnJpZGRlbi4gVGhlIGVsZW1lbnRfcHJpdmF0ZSBvZiB0aGUgcGFkIGlzIHVzZWQgdG8gc3RvcmUKLSAqICAgICBwcml2YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgY29sbGVjdHBhZHMuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgRm9yIGVhY2ggcGFkLCBkYXRhIGlzIHF1ZXVlZCBpbiB0aGUgX2NoYWluIGZ1bmN0aW9uIG9yIGJ5Ci0gKiAgICAgcGVyZm9ybWluZyBhIHB1bGxfcmFuZ2UuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgV2hlbiBkYXRhIGlzIHF1ZXVlZCBvbiBhbGwgcGFkcyBpbiB3YWl0aW5nIG1vZGUsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgRGF0YSBjYW4gYmUgZGVxdWV1ZWQgZnJvbSB0aGUgcGFkIHdpdGggdGhlIGdzdF9jb2xsZWN0X3BhZHNfcG9wKCkgbWV0aG9kLgotICogICAgIE9uZSBjYW4gcGVlayBhdCB0aGUgZGF0YSB3aXRoIHRoZSBnc3RfY29sbGVjdF9wYWRzX3BlZWsoKSBmdW5jdGlvbi4KLSAqICAgICBUaGVzZSBmdW5jdGlvbnMgd2lsbCByZXR1cm4gJU5VTEwgaWYgdGhlIHBhZCByZWNlaXZlZCBhbiBFT1MgZXZlbnQuIFdoZW4gYWxsCi0gKiAgICAgcGFkcyByZXR1cm4gJU5VTEwgZnJvbSBhIGdzdF9jb2xsZWN0X3BhZHNfcGVlaygpLCB0aGUgZWxlbWVudCBjYW4gZW1pdCBhbiBFT1MKLSAqICAgICBldmVudCBpdHNlbGYuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgRGF0YSBjYW4gYWxzbyBiZSBkZXF1ZXVlZCBpbiBieXRlIHVuaXRzIHVzaW5nIHRoZSBnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSgpLAotICogICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIoKSBhbmQgZ3N0X2NvbGxlY3RfcGFkc19mbHVzaCgpIGNhbGxzLgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPjxwYXJhPgotICogICAgIEVsZW1lbnRzIHNob3VsZCBjYWxsIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQoKSBhbmQgZ3N0X2NvbGxlY3RfcGFkc19zdG9wKCkgaW4KLSAqICAgICB0aGVpciBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBjb2xsZWN0cGFkcy4KLSAqICAgICBUaGUgZ3N0X2NvbGxlY3RfcGFkc19zdG9wKCkgY2FsbCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJlbnQKLSAqICAgICBlbGVtZW50IHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBpbiB0aGUgUEFVU0VEX1RPX1JFQURZIHN0YXRlIGNoYW5nZSB0byBlbnN1cmUKLSAqICAgICBubyBwYWQgaXMgYmxvY2tlZCBhbmQgdGhlIGVsZW1lbnQgY2FuIGZpbmlzaCBzdHJlYW1pbmcuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZygpIHNldHMgYSBwYWQgdG8gd2FpdGluZyBvciBub24td2FpdGluZyBtb2RlLgotICogICAgIENvbGxlY3RQYWRzIGVsZW1lbnQgaXMgbm90IHdhaXRpbmcgZm9yIGRhdGEgdG8gYmUgY29sbGVjdGVkIG9uIG5vbi13YWl0aW5nIHBhZHMuCi0gKiAgICAgVGh1cyB0aGVzZSBwYWRzIG1heSBidXQgbmVlZCBub3QgaGF2ZSBkYXRhIHdoZW4gdGhlIGNhbGxiYWNrIGlzIGNhbGxlZC4KLSAqICAgICBBbGwgcGFkcyBhcmUgaW4gd2FpdGluZyBtb2RlIGJ5IGRlZmF1bHQuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0X3ByaXZhdGUuaD4KLQotI2luY2x1ZGUgImdzdGNvbGxlY3RwYWRzLmgiCi0KLSNpbmNsdWRlICIuLi8uLi8uLi9nc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChjb2xsZWN0X3BhZHNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY29sbGVjdF9wYWRzX2RlYnVnCi0KLSNkZWZpbmUgcGFyZW50X2NsYXNzIGdzdF9jb2xsZWN0X3BhZHNfcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RDb2xsZWN0UGFkcywgZ3N0X2NvbGxlY3RfcGFkcywgR1NUX1RZUEVfT0JKRUNUKTsKLQotc3RydWN0IF9Hc3RDb2xsZWN0RGF0YVByaXZhdGUKLXsKLSAgLyogcmVmY291bnRpbmcgZm9yIHN0cnVjdCwgYW5kIGRlc3Ryb3kgY2FsbGJhY2sgKi8KLSAgR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5OwotICBnaW50IHJlZmNvdW50OwotfTsKLQotc3RydWN0IF9Hc3RDb2xsZWN0UGFkc1ByaXZhdGUKLXsKLSAgLyogd2l0aCBMT0NLIGFuZC9vciBTVFJFQU1fTE9DSyAqLwotICBnYm9vbGVhbiBzdGFydGVkOwotCi0gIC8qIHdpdGggU1RSRUFNX0xPQ0sgKi8KLSAgZ3VpbnQzMiBjb29raWU7ICAgICAgICAgICAgICAgLyogQGRhdGEgbGlzdCBjb29raWUgKi8KLSAgZ3VpbnQgbnVtcGFkczsgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBhZHMgaW4gQGRhdGEgKi8KLSAgZ3VpbnQgcXVldWVkcGFkczsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBhZHMgd2l0aCBhIGJ1ZmZlciAqLwotICBndWludCBlb3NwYWRzOyAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGFkcyB0aGF0IGFyZSBFT1MgKi8KLSAgR3N0Q2xvY2tUaW1lIGVhcmxpZXN0X3RpbWU7ICAgLyogQ3VycmVudCBlYXJsaWVzdCB0aW1lICovCi0gIEdzdENvbGxlY3REYXRhICplYXJsaWVzdF9kYXRhOyAgICAgICAgLyogUGFkIGRhdGEgZm9yIGN1cnJlbnQgZWFybGllc3QgdGltZSAqLwotCi0gIC8qIHdpdGggTE9DSyAqLwotICBHU0xpc3QgKnBhZF9saXN0OyAgICAgICAgICAgICAvKiB1cGRhdGVkIHBhZCBsaXN0ICovCi0gIGd1aW50MzIgcGFkX2Nvb2tpZTsgICAgICAgICAgIC8qIHVwZGF0ZWQgY29va2llICovCi0KLSAgR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiBmdW5jOyAgLyogZnVuY3Rpb24gYW5kIHVzZXJfZGF0YSBmb3IgY2FsbGJhY2sgKi8KLSAgZ3BvaW50ZXIgdXNlcl9kYXRhOwotICBHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uIGJ1ZmZlcl9mdW5jOyAgICAgLyogZnVuY3Rpb24gYW5kIHVzZXJfZGF0YSBmb3IgYnVmZmVyIGNhbGxiYWNrICovCi0gIGdwb2ludGVyIGJ1ZmZlcl91c2VyX2RhdGE7Ci0gIEdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uIGNvbXBhcmVfZnVuYzsKLSAgZ3BvaW50ZXIgY29tcGFyZV91c2VyX2RhdGE7Ci0gIEdzdENvbGxlY3RQYWRzRXZlbnRGdW5jdGlvbiBldmVudF9mdW5jOyAgICAgICAvKiBmdW5jdGlvbiBhbmQgZGF0YSBmb3IgZXZlbnQgY2FsbGJhY2sgKi8KLSAgZ3BvaW50ZXIgZXZlbnRfdXNlcl9kYXRhOwotICBHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb24gcXVlcnlfZnVuYzsKLSAgZ3BvaW50ZXIgcXVlcnlfdXNlcl9kYXRhOwotICBHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiBjbGlwX2Z1bmM7Ci0gIGdwb2ludGVyIGNsaXBfdXNlcl9kYXRhOwotICBHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb24gZmx1c2hfZnVuYzsKLSAgZ3BvaW50ZXIgZmx1c2hfdXNlcl9kYXRhOwotCi0gIC8qIG5vIG90aGVyIGxvY2sgbmVlZGVkICovCi0gIEdNdXRleCBldnRfbG9jazsgICAgICAgICAgICAgIC8qIHRoZXNlIG1ha2UgdXAgc29ydCBvZiBwb29yIG1hbidzIGV2ZW50IHNpZ25hbGluZyAqLwotICBHQ29uZCBldnRfY29uZDsKLSAgZ3VpbnQzMiBldnRfY29va2llOwotCi0gIGdib29sZWFuIHNlZWtpbmc7Ci0gIGdib29sZWFuIHBlbmRpbmdfZmx1c2hfc3RhcnQ7Ci0gIGdib29sZWFuIHBlbmRpbmdfZmx1c2hfc3RvcDsKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9jb2xsZWN0X3BhZHNfY2xlYXIgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0RGF0YSAqIGRhdGEpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2NvbGxlY3RfcGFkc19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfY29sbGVjdF9wYWRzX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfY29sbGVjdF9wYWRzX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyB2b2lkIGdzdF9jb2xsZWN0X3BhZHNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2NvbGxlY3RfcGFkc19kZWZhdWx0X2NvbGxlY3RlZCAoR3N0Q29sbGVjdFBhZHMgKgotICAgIHBhZHMsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1zdGF0aWMgZ2ludCBnc3RfY29sbGVjdF9wYWRzX2RlZmF1bHRfY29tcGFyZV9mdW5jIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0Q29sbGVjdERhdGEgKiBkYXRhMSwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDEsIEdzdENvbGxlY3REYXRhICogZGF0YTIsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDIsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2NvbGxlY3RfcGFkc19yZWNhbGN1bGF0ZV9mdWxsIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMpOwotc3RhdGljIHZvaWQgcmVmX2RhdGEgKEdzdENvbGxlY3REYXRhICogZGF0YSk7Ci1zdGF0aWMgdm9pZCB1bnJlZl9kYXRhIChHc3RDb2xsZWN0RGF0YSAqIGRhdGEpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0X2ludGVybmFsIChHc3RDb2xsZWN0UGFkcyAqCi0gICAgcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLCBHc3RFdmVudCAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpOwotc3RhdGljIGdib29sZWFuIGdzdF9jb2xsZWN0X3BhZHNfcXVlcnlfZGVmYXVsdF9pbnRlcm5hbCAoR3N0Q29sbGVjdFBhZHMgKgotICAgIHBhZHMsIEdzdENvbGxlY3REYXRhICogZGF0YSwgR3N0UXVlcnkgKiBxdWVyeSwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotCi0vKiBTb21lIHByb3BlcnRpZXMgYXJlIHByb3RlY3RlZCBieSBMT0NLLCBvdGhlcnMgYnkgU1RSRUFNX0xPQ0sKLSAqIEhvd2V2ZXIsIG1hbmlwdWxhdGluZyBlaXRoZXIgb2YgdGhlc2UgcGFydGl0aW9ucyBtYXkgcmVxdWlyZQotICogdG8gc2lnbmFsL3dha2UgYSBfV0FJVCwgc28gdXNlIGEgc2VwYXJhdGUgKHNvcnQgb2YpIGV2ZW50IHRvIHByZXZlbnQgcmFjZXMKLSAqIEFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucyBhcmUgcG9zc2libGUsIGUuZy4gc29tZSBsb3ctbGV2ZWwgcmUtaW1wbGVtZW50aW5nCi0gKiBvZiB0aGUgMiBhYm92ZSBsb2NrcyB0byBkcm9wIGJvdGggb2YgdGhlbSBhdG9taWNhbGx5IHdoZW4gZ29pbmcgaW50byBfV0FJVC4KLSAqLwotI2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfQ09ORChwYWRzKSAoJigoR3N0Q29sbGVjdFBhZHMgKilwYWRzKS0+cHJpdi0+ZXZ0X2NvbmQpCi0jZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFNfR0VUX0VWVF9MT0NLKHBhZHMpICgmKChHc3RDb2xsZWN0UGFkcyAqKXBhZHMpLT5wcml2LT5ldnRfbG9jaykKLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19FVlRfV0FJVChwYWRzLCBjb29raWUpIEdfU1RNVF9TVEFSVCB7ICAgIFwKLSAgZ19tdXRleF9sb2NrIChHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfTE9DSyAocGFkcykpOyAgICAgICAgICAgIFwKLSAgLyogc2hvdWxkIHdvcmsgdW5sZXNzIGEgbG90IG9mIGV2ZW50J2luZyBhbmQgdGhyZWFkIHN0YXJ2YXRpb24gKi9cCi0gIHdoaWxlIChjb29raWUgPT0gKChHc3RDb2xsZWN0UGFkcyAqKSBwYWRzKS0+cHJpdi0+ZXZ0X2Nvb2tpZSkgICAgICAgICBcCi0gICAgZ19jb25kX3dhaXQgKEdTVF9DT0xMRUNUX1BBRFNfR0VUX0VWVF9DT05EIChwYWRzKSwgICAgICAgICAgICBcCi0gICAgICAgIEdTVF9DT0xMRUNUX1BBRFNfR0VUX0VWVF9MT0NLIChwYWRzKSk7ICAgICAgICAgICAgICAgICAgICBcCi0gIGNvb2tpZSA9ICgoR3N0Q29sbGVjdFBhZHMgKikgcGFkcyktPnByaXYtPmV2dF9jb29raWU7ICAgICAgICAgICAgICAgICBcCi0gIGdfbXV0ZXhfdW5sb2NrIChHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfTE9DSyAocGFkcykpOyAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19FVlRfV0FJVF9USU1FRChwYWRzLCBjb29raWUsIHRpbWVvdXQpIEdfU1RNVF9TVEFSVCB7IFwKLSAgR1RpbWVWYWwgX190djsgXAotICBcCi0gIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnR2KTsgXAotICBnX3RpbWVfdmFsX2FkZCAoJnR2LCB0aW1lb3V0KTsgXAotICBcCi0gIGdfbXV0ZXhfbG9jayAoR1NUX0NPTExFQ1RfUEFEU19HRVRfRVZUX0xPQ0sgKHBhZHMpKTsgICAgICAgICAgICBcCi0gIC8qIHNob3VsZCB3b3JrIHVubGVzcyBhIGxvdCBvZiBldmVudCdpbmcgYW5kIHRocmVhZCBzdGFydmF0aW9uICovXAotICB3aGlsZSAoY29va2llID09ICgoR3N0Q29sbGVjdFBhZHMgKikgcGFkcyktPnByaXYtPmV2dF9jb29raWUpICAgICAgICAgXAotICAgIGdfY29uZF90aW1lZF93YWl0IChHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfQ09ORCAocGFkcyksICAgICAgICAgICAgXAotICAgICAgICBHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfTE9DSyAocGFkcyksICZ0dik7ICAgICAgICAgICAgICAgICAgICBcCi0gIGNvb2tpZSA9ICgoR3N0Q29sbGVjdFBhZHMgKikgcGFkcyktPnByaXYtPmV2dF9jb29raWU7ICAgICAgICAgICAgICAgICBcCi0gIGdfbXV0ZXhfdW5sb2NrIChHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfTE9DSyAocGFkcykpOyAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19FVlRfQlJPQURDQVNUKHBhZHMpIEdfU1RNVF9TVEFSVCB7ICAgICAgIFwKLSAgZ19tdXRleF9sb2NrIChHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfTE9DSyAocGFkcykpOyAgICAgICAgICAgIFwKLSAgLyogbmV2ZXIgbWluZCB3cmFwLWFyb3VuZCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICsrKCgoR3N0Q29sbGVjdFBhZHMgKikgcGFkcyktPnByaXYtPmV2dF9jb29raWUpOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfY29uZF9icm9hZGNhc3QgKEdTVF9DT0xMRUNUX1BBRFNfR0VUX0VWVF9DT05EIChwYWRzKSk7ICAgICAgICBcCi0gIGdfbXV0ZXhfdW5sb2NrIChHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfTE9DSyAocGFkcykpOyAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19FVlRfSU5JVChjb29raWUpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgIFwKLSAgZ19tdXRleF9sb2NrIChHU1RfQ09MTEVDVF9QQURTX0dFVF9FVlRfTE9DSyAocGFkcykpOyAgICAgICAgICAgIFwKLSAgY29va2llID0gKChHc3RDb2xsZWN0UGFkcyAqKSBwYWRzKS0+cHJpdi0+ZXZ0X2Nvb2tpZTsgICAgICAgICAgICAgICAgIFwKLSAgZ19tdXRleF91bmxvY2sgKEdTVF9DT0xMRUNUX1BBRFNfR0VUX0VWVF9MT0NLIChwYWRzKSk7ICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbGxlY3RfcGFkc19jbGFzc19pbml0IChHc3RDb2xsZWN0UGFkc0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RDb2xsZWN0UGFkc1ByaXZhdGUpKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoY29sbGVjdF9wYWRzX2RlYnVnLCAiY29sbGVjdHBhZHMiLCAwLAotICAgICAgIkdzdENvbGxlY3RQYWRzIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY29sbGVjdF9wYWRzX2luaXQgKEdzdENvbGxlY3RQYWRzICogcGFkcykKLXsKLSAgcGFkcy0+cHJpdiA9Ci0gICAgICBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHBhZHMsIEdTVF9UWVBFX0NPTExFQ1RfUEFEUywKLSAgICAgIEdzdENvbGxlY3RQYWRzUHJpdmF0ZSk7Ci0KLSAgcGFkcy0+ZGF0YSA9IE5VTEw7Ci0gIHBhZHMtPnByaXYtPmNvb2tpZSA9IDA7Ci0gIHBhZHMtPnByaXYtPm51bXBhZHMgPSAwOwotICBwYWRzLT5wcml2LT5xdWV1ZWRwYWRzID0gMDsKLSAgcGFkcy0+cHJpdi0+ZW9zcGFkcyA9IDA7Ci0gIHBhZHMtPnByaXYtPnN0YXJ0ZWQgPSBGQUxTRTsKLQotICBnX3JlY19tdXRleF9pbml0ICgmcGFkcy0+c3RyZWFtX2xvY2spOwotCi0gIHBhZHMtPnByaXYtPmZ1bmMgPSBnc3RfY29sbGVjdF9wYWRzX2RlZmF1bHRfY29sbGVjdGVkOwotICBwYWRzLT5wcml2LT51c2VyX2RhdGEgPSBOVUxMOwotICBwYWRzLT5wcml2LT5ldmVudF9mdW5jID0gTlVMTDsKLSAgcGFkcy0+cHJpdi0+ZXZlbnRfdXNlcl9kYXRhID0gTlVMTDsKLQotICAvKiBtZW1iZXJzIGZvciBkZWZhdWx0IG11eGluZyAqLwotICBwYWRzLT5wcml2LT5idWZmZXJfZnVuYyA9IE5VTEw7Ci0gIHBhZHMtPnByaXYtPmJ1ZmZlcl91c2VyX2RhdGEgPSBOVUxMOwotICBwYWRzLT5wcml2LT5jb21wYXJlX2Z1bmMgPSBnc3RfY29sbGVjdF9wYWRzX2RlZmF1bHRfY29tcGFyZV9mdW5jOwotICBwYWRzLT5wcml2LT5jb21wYXJlX3VzZXJfZGF0YSA9IE5VTEw7Ci0gIHBhZHMtPnByaXYtPmVhcmxpZXN0X2RhdGEgPSBOVUxMOwotICBwYWRzLT5wcml2LT5lYXJsaWVzdF90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBwYWRzLT5wcml2LT5ldmVudF9mdW5jID0gZ3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0X2ludGVybmFsOwotICBwYWRzLT5wcml2LT5xdWVyeV9mdW5jID0gZ3N0X2NvbGxlY3RfcGFkc19xdWVyeV9kZWZhdWx0X2ludGVybmFsOwotCi0gIC8qIG1lbWJlcnMgdG8gbWFuYWdlIHRoZSBwYWQgbGlzdCAqLwotICBwYWRzLT5wcml2LT5wYWRfY29va2llID0gMDsKLSAgcGFkcy0+cHJpdi0+cGFkX2xpc3QgPSBOVUxMOwotCi0gIC8qIG1lbWJlcnMgZm9yIGV2ZW50ICovCi0gIGdfbXV0ZXhfaW5pdCAoJnBhZHMtPnByaXYtPmV2dF9sb2NrKTsKLSAgZ19jb25kX2luaXQgKCZwYWRzLT5wcml2LT5ldnRfY29uZCk7Ci0gIHBhZHMtPnByaXYtPmV2dF9jb29raWUgPSAwOwotCi0gIHBhZHMtPnByaXYtPnNlZWtpbmcgPSBGQUxTRTsKLSAgcGFkcy0+cHJpdi0+cGVuZGluZ19mbHVzaF9zdGFydCA9IEZBTFNFOwotICBwYWRzLT5wcml2LT5wZW5kaW5nX2ZsdXNoX3N0b3AgPSBGQUxTRTsKLQotICAvKiBjbGVhciBmbG9hdGluZyBmbGFnICovCi0gIGdzdF9vYmplY3RfcmVmX3NpbmsgKHBhZHMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbGxlY3RfcGFkc19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0Q29sbGVjdFBhZHMgKnBhZHMgPSBHU1RfQ09MTEVDVF9QQURTIChvYmplY3QpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG9iamVjdCwgImZpbmFsaXplIik7Ci0KLSAgZ19yZWNfbXV0ZXhfY2xlYXIgKCZwYWRzLT5zdHJlYW1fbG9jayk7Ci0KLSAgZ19jb25kX2NsZWFyICgmcGFkcy0+cHJpdi0+ZXZ0X2NvbmQpOwotICBnX211dGV4X2NsZWFyICgmcGFkcy0+cHJpdi0+ZXZ0X2xvY2spOwotCi0gIC8qIFJlbW92ZSBwYWRzIGFuZCBmcmVlIHBhZHMgbGlzdCAqLwotICBnX3NsaXN0X2ZvcmVhY2ggKHBhZHMtPnByaXYtPnBhZF9saXN0LCAoR0Z1bmMpIHVucmVmX2RhdGEsIE5VTEwpOwotICBnX3NsaXN0X2ZvcmVhY2ggKHBhZHMtPmRhdGEsIChHRnVuYykgdW5yZWZfZGF0YSwgTlVMTCk7Ci0gIGdfc2xpc3RfZnJlZSAocGFkcy0+ZGF0YSk7Ci0gIGdfc2xpc3RfZnJlZSAocGFkcy0+cHJpdi0+cGFkX2xpc3QpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX25ldzoKLSAqCi0gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgI0dzdENvbGxlY3RQYWRzLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyAjR3N0Q29sbGVjdFBhZHMsIG9yICVOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0gKi8KLUdzdENvbGxlY3RQYWRzICoKLWdzdF9jb2xsZWN0X3BhZHNfbmV3ICh2b2lkKQotewotICBHc3RDb2xsZWN0UGFkcyAqbmV3Y29sbDsKLQotICBuZXdjb2xsID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9DT0xMRUNUX1BBRFMsIE5VTEwpOwotCi0gIHJldHVybiBuZXdjb2xsOwotfQotCi0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIEdzdE9iamVjdCBsb2NrISAqLwotc3RhdGljIHZvaWQKLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbl9sb2NrZWQgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcGFkcy0+cHJpdi0+YnVmZmVyX2Z1bmMgPSBmdW5jOwotICBwYWRzLT5wcml2LT5idWZmZXJfdXNlcl9kYXRhID0gdXNlcl9kYXRhOwotfQotCi0vKioKLSAqIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbjoKLSAqIEBwYWRzOiB0aGUgY29sbGVjdHBhZHMgdG8gdXNlCi0gKiBAZnVuYzogKHNjb3BlIGNhbGwpOiB0aGUgZnVuY3Rpb24gdG8gc2V0Ci0gKiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCi0gKgotICogU2V0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdXNlciBkYXRhIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aAotICogdGhlIG9sZGVzdCBidWZmZXIgd2hlbiBhbGwgcGFkcyBoYXZlIGJlZW4gY29sbGVjdGVkLCBvciAlTlVMTCBvbiBFT1MuCi0gKiBJZiBhIGJ1ZmZlciBpcyBwYXNzZWQsIHRoZSBjYWxsYmFjayBvd25zIGEgcmVmZXJlbmNlIGFuZCBtdXN0IHVucmVmCi0gKiBpdC4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfY29sbGVjdF9wYWRzX3NldF9idWZmZXJfZnVuY3Rpb24gKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAocGFkcyAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbl9sb2NrZWQgKHBhZHMsIGZ1bmMsIHVzZXJfZGF0YSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWRzKTsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX3NldF9jb21wYXJlX2Z1bmN0aW9uOgotICogQHBhZHM6IHRoZSBwYWRzIHRvIHVzZQotICogQGZ1bmM6IChzY29wZSBjYWxsKTogdGhlIGZ1bmN0aW9uIHRvIHNldAotICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbgotICoKLSAqIFNldCB0aGUgdGltZXN0YW1wIGNvbXBhcmlzb24gZnVuY3Rpb24uCi0gKgotICogTVQgc2FmZS4KLSAqLwotLyogTk9URSBhbGxvd2luZyB0byBjaGFuZ2UgY29tcGFyaXNvbiBzZWVtcyBub3QgYWR2aXNhYmxlOwotbm8ga25vd24gdXNlLWNhc2UsIGFuZCBjb2xsYWJvcmF0aW9uIHdpdGggZGVmYXVsdCBhbGdvcml0aG0gaXMgdW5wcmVkaWN0YWJsZS4KLUlmIGN1c3RvbSBjb21wYWlyaW5nL29wZXJhdGlvbiBpcyBuZWVkZWQsIGp1c3QgdXNlIGEgY29sbGVjdCBmdW5jdGlvbiBvZgoteW91ciBvd24gKi8KLXZvaWQKLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2NvbXBhcmVfZnVuY3Rpb24gKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbiBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOwotICBwYWRzLT5wcml2LT5jb21wYXJlX2Z1bmMgPSBmdW5jOwotICBwYWRzLT5wcml2LT5jb21wYXJlX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotfQotCi0vKioKLSAqIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uOgotICogQHBhZHM6IHRoZSBjb2xsZWN0cGFkcyB0byB1c2UKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IHRoZSBmdW5jdGlvbiB0byBzZXQKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCi0gKgotICogQ29sbGVjdFBhZHMgcHJvdmlkZXMgYSBkZWZhdWx0IGNvbGxlY3Rpb24gYWxnb3JpdGhtIHRoYXQgd2lsbCBkZXRlcm1pbmUKLSAqIHRoZSBvbGRlc3QgYnVmZmVyIGF2YWlsYWJsZSBvbiBhbGwgb2YgaXRzIHBhZHMsIGFuZCB0aGVuIGRlbGVnYXRlCi0gKiB0byBhIGNvbmZpZ3VyZWQgY2FsbGJhY2suCi0gKiBIb3dldmVyLCBpZiBjaXJjdW1zdGFuY2VzIGFyZSBtb3JlIGNvbXBsaWNhdGVkIGFuZC9vciBtb3JlIGNvbnRyb2wKLSAqIGlzIGRlc2lyZWQsIHRoaXMgc2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBpbnZva2VkIGluc3RlYWQgd2hlbgotICogYWxsIHRoZSBwYWRzIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uIGhhdmUgYnVmZmVycyBxdWV1ZWQuCi0gKiBFdmlkZW50bHksIHRoaXMgY2FsbGJhY2sgaXMgbm90IGNvbXBhdGlibGUgd2l0aAotICogZ3N0X2NvbGxlY3RfcGFkc19zZXRfYnVmZmVyX2Z1bmN0aW9uKCkgY2FsbGJhY2suCi0gKiBJZiB0aGlzIGNhbGxiYWNrIGlzIHNldCwgdGhlIGZvcm1lciB3aWxsIGJlIHVuc2V0LgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiBmdW5jLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOwotICBwYWRzLT5wcml2LT5mdW5jID0gZnVuYzsKLSAgcGFkcy0+cHJpdi0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9idWZmZXJfZnVuY3Rpb25fbG9ja2VkIChwYWRzLCBOVUxMLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotfQotCi1zdGF0aWMgdm9pZAotcmVmX2RhdGEgKEdzdENvbGxlY3REYXRhICogZGF0YSkKLXsKLSAgZ19hc3NlcnQgKGRhdGEgIT0gTlVMTCk7Ci0KLSAgZ19hdG9taWNfaW50X2luYyAoJihkYXRhLT5wcml2LT5yZWZjb3VudCkpOwotfQotCi1zdGF0aWMgdm9pZAotdW5yZWZfZGF0YSAoR3N0Q29sbGVjdERhdGEgKiBkYXRhKQotewotICBnX2Fzc2VydCAoZGF0YSAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKGRhdGEtPnByaXYtPnJlZmNvdW50ID4gMCk7Ci0KLSAgaWYgKCFnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmKGRhdGEtPnByaXYtPnJlZmNvdW50KSkpCi0gICAgcmV0dXJuOwotCi0gIGlmIChkYXRhLT5wcml2LT5kZXN0cm95X25vdGlmeSkKLSAgICBkYXRhLT5wcml2LT5kZXN0cm95X25vdGlmeSAoZGF0YSk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGRhdGEtPnBhZCk7Ci0gIGlmIChkYXRhLT5idWZmZXIpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChkYXRhLT5idWZmZXIpOwotICB9Ci0gIGdfZnJlZSAoZGF0YS0+cHJpdik7Ci0gIGdfZnJlZSAoZGF0YSk7Ci19Ci0KLS8qKgotICogZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb246Ci0gKiBAcGFkczogdGhlIGNvbGxlY3RwYWRzIHRvIHVzZQotICogQGZ1bmM6IChzY29wZSBjYWxsKTogdGhlIGZ1bmN0aW9uIHRvIHNldAotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24KLSAqCi0gKiBTZXQgdGhlIGV2ZW50IGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB1c2VyIGRhdGEgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuCi0gKiBjb2xsZWN0cGFkcyBoYXMgcmVjZWl2ZWQgYW4gZXZlbnQgb3JpZ2luYXRpbmcgZnJvbSBvbmUgb2YgdGhlIGNvbGxlY3RlZAotICogcGFkcy4gIElmIHRoZSBldmVudCBiZWluZyBwcm9jZXNzZWQgaXMgYSBzZXJpYWxpemVkIG9uZSwgdGhpcyBjYWxsYmFjayBpcwotICogY2FsbGVkIHdpdGggQHBhZHMgU1RSRUFNX0xPQ0sgaGVsZCwgb3RoZXJ3aXNlIG5vdC4gIEFzIHRoaXMgbG9jayBzaG91bGQgYmUKLSAqIGhlbGQgd2hlbiBjYWxsaW5nIGEgbnVtYmVyIG9mIENvbGxlY3RQYWRzIGZ1bmN0aW9ucywgaXQgc2hvdWxkIGJlIGFjcXVpcmVkCi0gKiBpZiBzbyAodW51c3VhbGx5KSBuZWVkZWQuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24gKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnX3JldHVybl9pZl9mYWlsIChwYWRzICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWRzKTsKLSAgcGFkcy0+cHJpdi0+ZXZlbnRfZnVuYyA9IGZ1bmM7Ci0gIHBhZHMtPnByaXYtPmV2ZW50X3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotfQotCi0vKioKLSAqIGdzdF9jb2xsZWN0X3BhZHNfc2V0X3F1ZXJ5X2Z1bmN0aW9uOgotICogQHBhZHM6IHRoZSBjb2xsZWN0cGFkcyB0byB1c2UKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IHRoZSBmdW5jdGlvbiB0byBzZXQKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCi0gKgotICogU2V0IHRoZSBxdWVyeSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdXNlciBkYXRhIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIKLSAqIGNvbGxlY3RwYWRzIGhhcyByZWNlaXZlZCBhIHF1ZXJ5IG9yaWdpbmF0aW5nIGZyb20gb25lIG9mIHRoZSBjb2xsZWN0ZWQKLSAqIHBhZHMuICBJZiB0aGUgcXVlcnkgYmVpbmcgcHJvY2Vzc2VkIGlzIGEgc2VyaWFsaXplZCBvbmUsIHRoaXMgY2FsbGJhY2sgaXMKLSAqIGNhbGxlZCB3aXRoIEBwYWRzIFNUUkVBTV9MT0NLIGhlbGQsIG90aGVyd2lzZSBub3QuICBBcyB0aGlzIGxvY2sgc2hvdWxkIGJlCi0gKiBoZWxkIHdoZW4gY2FsbGluZyBhIG51bWJlciBvZiBDb2xsZWN0UGFkcyBmdW5jdGlvbnMsIGl0IHNob3VsZCBiZSBhY3F1aXJlZAotICogaWYgc28gKHVudXN1YWxseSkgbmVlZGVkLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9jb2xsZWN0X3BhZHNfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0Q29sbGVjdFBhZHNRdWVyeUZ1bmN0aW9uIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAocGFkcyAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcykpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7Ci0gIHBhZHMtPnByaXYtPnF1ZXJ5X2Z1bmMgPSBmdW5jOwotICBwYWRzLT5wcml2LT5xdWVyeV91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWRzKTsKLX0KLQotLyoqCi0qIGdzdF9jb2xsZWN0X3BhZHNfY2xpcF9ydW5uaW5nX3RpbWU6Ci0qIEBwYWRzOiB0aGUgY29sbGVjdHBhZHMgdG8gdXNlCi0qIEBjZGF0YTogY29sbGVjdCBkYXRhIG9mIGNvcnJlc3BvbmRpbmcgcGFkCi0qIEBidWY6IGJ1ZmZlciBiZWluZyBjbGlwcGVkCi0qIEBvdXRidWY6IChhbGxvdy1ub25lKTogb3V0cHV0IGJ1ZmZlciB3aXRoIHJ1bm5pbmcgdGltZSwgb3IgTlVMTCBpZiBjbGlwcGVkCi0qIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSAodW51c2VkKQotKgotKiBDb252ZW5pZW5jZSBjbGlwcGluZyBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGluY29taW5nIGJ1ZmZlcidzIHRpbWVzdGFtcAotKiB0byBydW5uaW5nIHRpbWUsIG9yIGNsaXBzIHRoZSBidWZmZXIgaWYgb3V0c2lkZSBjb25maWd1cmVkIHNlZ21lbnQuCi0qCi0qIFNpbmNlIDEuNiwgdGhpcyBjbGlwcGluZyBmdW5jdGlvbiBhbHNvIHNldHMgdGhlIERUUyBwYXJhbWV0ZXIgb2YgdGhlCi0qIEdzdENvbGxlY3REYXRhIHN0cnVjdHVyZS4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBydW5uaW5nIHRpbWUgRFRTIGNhbiBiZQotKiBuZWdhdGl2ZS4gR19NSU5JTlQ2NCBpcyB1c2VkIHRvIGluZGljYXRlIGludmFsaWQgdmFsdWUuCi0qLwotR3N0Rmxvd1JldHVybgotZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3J1bm5pbmdfdGltZSAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdENvbGxlY3REYXRhICogY2RhdGEsIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0QnVmZmVyICoqIG91dGJ1ZiwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gICpvdXRidWYgPSBidWY7Ci0KLSAgLyogaW52YWxpZCBsZWZ0IGFsb25lIGFuZCBwYXNzZWQgKi8KLSAgaWYgKEdfTElLRUxZIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoR1NUX0JVRkZFUl9EVFNfT1JfUFRTIChidWYpKSkpIHsKLSAgICBHc3RDbG9ja1RpbWUgdGltZTsKLSAgICBHc3RDbG9ja1RpbWUgYnVmX2R0cywgYWJzX2R0czsKLSAgICBnaW50IGR0c19zaWduOwotCi0gICAgdGltZSA9IEdTVF9CVUZGRVJfUFRTIChidWYpOwotCi0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKSkgewotICAgICAgdGltZSA9Ci0gICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmY2RhdGEtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZSk7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKSkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY2RhdGEtPnBhZCwgImNsaXBwaW5nIGJ1ZmZlciBvbiBwYWQgb3V0c2lkZSBzZWdtZW50ICUiCi0gICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChidWYpKSk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICpvdXRidWYgPSBOVUxMOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGNkYXRhLT5wYWQsICJidWZmZXIgcHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiIC0+ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIHJ1bm5pbmcgdGltZSIsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChidWYpKSwgR1NUX1RJTUVfQVJHUyAodGltZSkpOwotICAgICpvdXRidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0gICAgR1NUX0JVRkZFUl9QVFMgKCpvdXRidWYpID0gdGltZTsKLQotICAgIGR0c19zaWduID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lX2Z1bGwgKCZjZGF0YS0+c2VnbWVudCwKLSAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfQlVGRkVSX0RUUyAoKm91dGJ1ZiksICZhYnNfZHRzKTsKLSAgICBidWZfZHRzID0gR1NUX0JVRkZFUl9EVFMgKCpvdXRidWYpOwotICAgIGlmIChkdHNfc2lnbiA+IDApIHsKLSAgICAgIEdTVF9CVUZGRVJfRFRTICgqb3V0YnVmKSA9IGFic19kdHM7Ci0gICAgICBHU1RfQ09MTEVDVF9QQURTX0RUUyAoY2RhdGEpID0gYWJzX2R0czsKLSAgICB9IGVsc2UgaWYgKGR0c19zaWduIDwgMCkgewotICAgICAgR1NUX0JVRkZFUl9EVFMgKCpvdXRidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIEdTVF9DT0xMRUNUX1BBRFNfRFRTIChjZGF0YSkgPSAtKChnaW50NjQpIGFic19kdHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQlVGRkVSX0RUUyAoKm91dGJ1ZikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgR1NUX0NPTExFQ1RfUEFEU19EVFMgKGNkYXRhKSA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNUIChjZGF0YS0+cGFkLCAiYnVmZmVyIGR0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiAtPiAlIgotICAgICAgICBHU1RfU1RJTUVfRk9STUFUICIgcnVubmluZyB0aW1lIiwgR1NUX1RJTUVfQVJHUyAoYnVmX2R0cyksCi0gICAgICAgIEdTVF9TVElNRV9BUkdTIChHU1RfQ09MTEVDVF9QQURTX0RUUyAoY2RhdGEpKSk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLS8qKgotICogZ3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbjoKLSAqIEBwYWRzOiB0aGUgY29sbGVjdHBhZHMgdG8gdXNlCi0gKiBAY2xpcGZ1bmM6IChzY29wZSBjYWxsKTogY2xpcCBmdW5jdGlvbiB0byBpbnN0YWxsCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgdG8gcGFzcyB0byBAY2xpcF9mdW5jCi0gKgotICogSW5zdGFsbCBhIGNsaXBwaW5nIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHJpZ2h0IGFmdGVyIGEgYnVmZmVyIGlzIHJlY2VpdmVkCi0gKiBvbiBhIHBhZCBtYW5hZ2VkIGJ5IEBwYWRzLiBTZWUgI0dzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uIGZvciBtb3JlIGluZm8uCi0gKi8KLXZvaWQKLWdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24gKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiBjbGlwZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnX3JldHVybl9pZl9mYWlsIChwYWRzICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSk7Ci0KLSAgcGFkcy0+cHJpdi0+Y2xpcF9mdW5jID0gY2xpcGZ1bmM7Ci0gIHBhZHMtPnByaXYtPmNsaXBfdXNlcl9kYXRhID0gdXNlcl9kYXRhOwotfQotCi0vKioKLSAqIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoX2Z1bmN0aW9uOgotICogQHBhZHM6IHRoZSBjb2xsZWN0cGFkcyB0byB1c2UKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IGZsdXNoIGZ1bmN0aW9uIHRvIGluc3RhbGwKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSB0byBwYXNzIHRvIEBmdW5jCi0gKgotICogSW5zdGFsbCBhIGZsdXNoIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGludGVybmFsCi0gKiBzdGF0ZSBvZiBhbGwgcGFkcyBzaG91bGQgYmUgZmx1c2hlZCBhcyBwYXJ0IG9mIGZsdXNoaW5nIHNlZWsKLSAqIGhhbmRsaW5nLiBTZWUgI0dzdENvbGxlY3RQYWRzRmx1c2hGdW5jdGlvbiBmb3IgbW9yZSBpbmZvLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotdm9pZAotZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hfZnVuY3Rpb24gKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnX3JldHVybl9pZl9mYWlsIChwYWRzICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSk7Ci0KLSAgcGFkcy0+cHJpdi0+Zmx1c2hfZnVuYyA9IGZ1bmM7Ci0gIHBhZHMtPnByaXYtPmZsdXNoX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQ6Ci0gKiBAcGFkczogdGhlIGNvbGxlY3RwYWRzIHRvIHVzZQotICogQHBhZDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgcGFkIHRvIGFkZAotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSByZXR1cm5lZCAjR3N0Q29sbGVjdERhdGEgc3RydWN0dXJlCi0gKiBAZGVzdHJveV9ub3RpZnk6IChzY29wZSBhc3luYyk6IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHJldHVybmVkCi0gKiAgICNHc3RDb2xsZWN0RGF0YSBzdHJ1Y3R1cmUgaXMgZnJlZWQKLSAqIEBsb2NrOiB3aGV0aGVyIHRvIGxvY2sgdGhpcyBwYWQgaW4gdXN1YWwgd2FpdGluZyBzdGF0ZQotICoKLSAqIEFkZCBhIHBhZCB0byB0aGUgY29sbGVjdGlvbiBvZiBjb2xsZWN0IHBhZHMuIFRoZSBwYWQgaGFzIHRvIGJlCi0gKiBhIHNpbmtwYWQuIFRoZSByZWZjb3VudCBvZiB0aGUgcGFkIGlzIGluY3JlbWVudGVkLiBVc2UKLSAqIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCgpIHRvIHJlbW92ZSB0aGUgcGFkIGZyb20gdGhlIGNvbGxlY3Rpb24KLSAqIGFnYWluLgotICoKLSAqIFlvdSBzcGVjaWZ5IGEgc2l6ZSBmb3IgdGhlIHJldHVybmVkICNHc3RDb2xsZWN0RGF0YSBzdHJ1Y3R1cmUKLSAqIHNvIHRoYXQgeW91IGNhbiB1c2UgaXQgdG8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KLSAqCi0gKiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhICNHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkgdGhhdCB3aWxsIGJlIGNhbGxlZAotICoganVzdCBiZWZvcmUgdGhlICNHc3RDb2xsZWN0RGF0YSBzdHJ1Y3R1cmUgaXMgZnJlZWQuIEl0IGlzIHBhc3NlZCB0aGUKLSAqIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBhbmQgc2hvdWxkIGZyZWUgYW55IGN1c3RvbSBtZW1vcnkgYW5kIHJlc291cmNlcwotICogYWxsb2NhdGVkIGZvciBpdC4KLSAqCi0gKiBLZWVwaW5nIGEgcGFkIGxvY2tlZCBpbiB3YWl0aW5nIHN0YXRlIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB1c2luZwotICogdGhlIGRlZmF1bHQgY29sbGVjdGlvbiBhbGdvcml0aG0gKHByb3ZpZGluZyB0aGUgb2xkZXN0IGJ1ZmZlcikuCi0gKiBJdCBlbnN1cmVzIGEgYnVmZmVyIG11c3QgYmUgYXZhaWxhYmxlIG9uIHRoaXMgcGFkIGZvciBhIGNvbGxlY3Rpb24KLSAqIHRvIHRha2UgcGxhY2UuICBUaGlzIGlzIG9mIHR5cGljYWwgdXNlIHRvIGEgbXV4ZXIgZWxlbWVudCB3aGVyZQotICogbm9uLXN1YnRpdGxlIHN0cmVhbXMgc2hvdWxkIGFsd2F5cyBiZSBpbiB3YWl0aW5nIHN0YXRlLAotICogZS5nLiB0byBhc3N1cmUgdGhhdCBjYXBzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBvbiBhbGwgdGhlc2Ugc3RyZWFtcwotICogd2hlbiBpbml0aWFsIGhlYWRlcnMgaGF2ZSB0byBiZSB3cml0dGVuLgotICoKLSAqIFRoZSBwYWQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlZCBpbiBwdXNoIG1vZGUgd2hlbiBAcGFkcyBpcwotICogc3RhcnRlZC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSkgKHRyYW5zZmVyIG5vbmUpOiBhIG5ldyAjR3N0Q29sbGVjdERhdGEgdG8gaWRlbnRpZnkgdGhlCi0gKiAgIG5ldyBwYWQuIE9yICVOVUxMIGlmIHdyb25nIHBhcmFtZXRlcnMgYXJlIHN1cHBsaWVkLgotICovCi1Hc3RDb2xsZWN0RGF0YSAqCi1nc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0UGFkICogcGFkLCBndWludCBzaXplLAotICAgIEdzdENvbGxlY3REYXRhRGVzdHJveU5vdGlmeSBkZXN0cm95X25vdGlmeSwgZ2Jvb2xlYW4gbG9jaykKLXsKLSAgR3N0Q29sbGVjdERhdGEgKmRhdGE7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWQgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfUEFEX0lTX1NJTksgKHBhZCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2l6ZSA+PSBzaXplb2YgKEdzdENvbGxlY3REYXRhKSwgTlVMTCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywgImFkZGluZyBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGRhdGEgPSBnX21hbGxvYzAgKHNpemUpOwotICBkYXRhLT5wcml2ID0gZ19uZXcwIChHc3RDb2xsZWN0RGF0YVByaXZhdGUsIDEpOwotICBkYXRhLT5jb2xsZWN0ID0gcGFkczsKLSAgZGF0YS0+cGFkID0gZ3N0X29iamVjdF9yZWYgKHBhZCk7Ci0gIGRhdGEtPmJ1ZmZlciA9IE5VTEw7Ci0gIGRhdGEtPnBvcyA9IDA7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZkYXRhLT5zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGRhdGEtPnN0YXRlID0gR1NUX0NPTExFQ1RfUEFEU19TVEFURV9XQUlUSU5HOwotICBkYXRhLT5zdGF0ZSB8PSBsb2NrID8gR1NUX0NPTExFQ1RfUEFEU19TVEFURV9MT0NLRUQgOiAwOwotICBkYXRhLT5wcml2LT5yZWZjb3VudCA9IDE7Ci0gIGRhdGEtPnByaXYtPmRlc3Ryb3lfbm90aWZ5ID0gZGVzdHJveV9ub3RpZnk7Ci0gIGRhdGEtPkFCSS5hYmkuZHRzID0gR19NSU5JTlQ2NDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOwotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkLCBkYXRhKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gIHBhZHMtPnByaXYtPnBhZF9saXN0ID0gZ19zbGlzdF9hcHBlbmQgKHBhZHMtPnByaXYtPnBhZF9saXN0LCBkYXRhKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHBhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb2xsZWN0X3BhZHNfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb2xsZWN0X3BhZHNfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHBhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb2xsZWN0X3BhZHNfcXVlcnkpKTsKLSAgLyogYmFja3dhcmQgY29tcGF0LCBhbHNvIGFkZCB0byBkYXRhIGlmIHN0b3BwZWQsIHNvIHRoYXQgdGhlIGVsZW1lbnQgYWxyZWFkeQotICAgKiBoYXMgdGhpcyBpbiB0aGUgcHVibGljIGRhdGEgbGlzdCBiZWZvcmUgZ29pbmcgUEFVU0VEICh0eXBpY2FsbHkpCi0gICAqIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSB3aGVuIHdlIGFyZSBzdG9wcGVkIGJlY2F1c2Ugd2UgZG9uJ3QgdGFrZSB0aGUKLSAgICogU1RSRUFNX0xPQ0sgdG8gcHJvdGVjdCB0aGUgcGFkcy0+ZGF0YSBsaXN0LiAqLwotICBpZiAoIXBhZHMtPnByaXYtPnN0YXJ0ZWQpIHsKLSAgICBwYWRzLT5kYXRhID0gZ19zbGlzdF9hcHBlbmQgKHBhZHMtPmRhdGEsIGRhdGEpOwotICAgIHJlZl9kYXRhIChkYXRhKTsKLSAgfQotICAvKiBhY3RpdmF0ZSB0aGUgcGFkIHdoZW4gbmVlZGVkICovCi0gIGlmIChwYWRzLT5wcml2LT5zdGFydGVkKQotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKLSAgcGFkcy0+cHJpdi0+cGFkX2Nvb2tpZSsrOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkcyk7Ci0KLSAgcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBnaW50Ci1maW5kX3BhZCAoR3N0Q29sbGVjdERhdGEgKiBkYXRhLCBHc3RQYWQgKiBwYWQpCi17Ci0gIGlmIChkYXRhLT5wYWQgPT0gcGFkKQotICAgIHJldHVybiAwOwotICByZXR1cm4gMTsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQ6Ci0gKiBAcGFkczogdGhlIGNvbGxlY3RwYWRzIHRvIHVzZQotICogQHBhZDogKHRyYW5zZmVyIG5vbmUpOiB0aGUgcGFkIHRvIHJlbW92ZQotICoKLSAqIFJlbW92ZSBhIHBhZCBmcm9tIHRoZSBjb2xsZWN0aW9uIG9mIGNvbGxlY3QgcGFkcy4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28KLSAqIGZyZWUgdGhlICNHc3RDb2xsZWN0RGF0YSBhbmQgYWxsIHRoZSByZXNvdXJjZXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCB3aXRoCi0gKiBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQoKS4KLSAqCi0gKiBUaGUgcGFkIHdpbGwgYmUgZGVhY3RpdmF0ZWQgYXV0b21hdGljYWxseSB3aGVuIEBwYWRzIGlzIHN0b3BwZWQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIGNvdWxkIGJlIHJlbW92ZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0UGFkICogcGFkKQotewotICBHc3RDb2xsZWN0RGF0YSAqZGF0YTsKLSAgR1NMaXN0ICpsaXN0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWRzICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWQgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BBRCAocGFkKSwgRkFMU0UpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZHMsICJyZW1vdmluZyBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7Ci0gIGxpc3QgPQotICAgICAgZ19zbGlzdF9maW5kX2N1c3RvbSAocGFkcy0+cHJpdi0+cGFkX2xpc3QsIHBhZCwgKEdDb21wYXJlRnVuYykgZmluZF9wYWQpOwotICBpZiAoIWxpc3QpCi0gICAgZ290byB1bmtub3duX3BhZDsKLQotICBkYXRhID0gKEdzdENvbGxlY3REYXRhICopIGxpc3QtPmRhdGE7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywgImZvdW5kIHBhZCAlczolcyBhdCAlcCIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSwKLSAgICAgIGRhdGEpOwotCi0gIC8qIGNsZWFyIHRoZSBzdHVmZiB3ZSBjb25maWd1cmVkICovCi0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChwYWQsIE5VTEwpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAocGFkLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUgKHBhZCwgTlVMTCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIC8qIGJhY2t3YXJkIGNvbXBhdCwgYWxzbyByZW1vdmUgZnJvbSBkYXRhIGlmIHN0b3BwZWQsIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uCi0gICAqIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHdlIGFyZSBzdG9wcGVkIGJlY2F1c2Ugd2UgZG9uJ3QgdGFrZSB0aGUKLSAgICogU1RSRUFNX0xPQ0sgdG8gcHJvdGVjdCB0aGUgcGFkcy0+ZGF0YSBsaXN0LiAqLwotICBpZiAoIXBhZHMtPnByaXYtPnN0YXJ0ZWQpIHsKLSAgICBHU0xpc3QgKmRsaXN0OwotCi0gICAgZGxpc3QgPSBnX3NsaXN0X2ZpbmRfY3VzdG9tIChwYWRzLT5kYXRhLCBwYWQsIChHQ29tcGFyZUZ1bmMpIGZpbmRfcGFkKTsKLSAgICBpZiAoZGxpc3QpIHsKLSAgICAgIEdzdENvbGxlY3REYXRhICpwZGF0YSA9IGRsaXN0LT5kYXRhOwotCi0gICAgICBwYWRzLT5kYXRhID0gZ19zbGlzdF9kZWxldGVfbGluayAocGFkcy0+ZGF0YSwgZGxpc3QpOwotICAgICAgdW5yZWZfZGF0YSAocGRhdGEpOwotICAgIH0KLSAgfQotICAvKiByZW1vdmUgZnJvbSB0aGUgcGFkIGxpc3QgKi8KLSAgcGFkcy0+cHJpdi0+cGFkX2xpc3QgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChwYWRzLT5wcml2LT5wYWRfbGlzdCwgbGlzdCk7Ci0gIHBhZHMtPnByaXYtPnBhZF9jb29raWUrKzsKLQotICAvKiBzaWduYWwgd2FpdGVycyBiZWNhdXNlIHNvbWV0aGluZyBjaGFuZ2VkICovCi0gIEdTVF9DT0xMRUNUX1BBRFNfRVZUX0JST0FEQ0FTVCAocGFkcyk7Ci0KLSAgLyogZGVhY3RpdmF0ZSB0aGUgcGFkIHdoZW4gbmVlZGVkICovCi0gIGlmICghcGFkcy0+cHJpdi0+c3RhcnRlZCkKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOwotCi0gIC8qIGNsZWFuIGFuZCBmcmVlIHRoZSBjb2xsZWN0IGRhdGEgKi8KLSAgdW5yZWZfZGF0YSAoZGF0YSk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotCi0gIHJldHVybiBUUlVFOwotCi11bmtub3duX3BhZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFkcywgImNhbm5vdCByZW1vdmUgdW5rbm93biBwYWQgJXM6JXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWRzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggU1RSRUFNX0xPQ0sgYW5kIE9CSkVDVF9MT0NLLgotICovCi1zdGF0aWMgdm9pZAotZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmdfdW5sb2NrZWQgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBnYm9vbGVhbiBmbHVzaGluZykKLXsKLSAgR1NMaXN0ICp3YWxrID0gTlVMTDsKLQotICAvKiBVcGRhdGUgdGhlIHBhZHMgZmx1c2hpbmcgZmxhZyAqLwotICBmb3IgKHdhbGsgPSBwYWRzLT5wcml2LT5wYWRfbGlzdDsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RDb2xsZWN0RGF0YSAqY2RhdGEgPSB3YWxrLT5kYXRhOwotCi0gICAgaWYgKEdTVF9JU19QQUQgKGNkYXRhLT5wYWQpKSB7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGNkYXRhLT5wYWQpOwotICAgICAgaWYgKGZsdXNoaW5nKQotICAgICAgICBHU1RfUEFEX1NFVF9GTFVTSElORyAoY2RhdGEtPnBhZCk7Ci0gICAgICBlbHNlCi0gICAgICAgIEdTVF9QQURfVU5TRVRfRkxVU0hJTkcgKGNkYXRhLT5wYWQpOwotICAgICAgaWYgKGZsdXNoaW5nKQotICAgICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1NFVCAoY2RhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRkxVU0hJTkcpOwotICAgICAgZWxzZQotICAgICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1VOU0VUIChjZGF0YSwgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9GTFVTSElORyk7Ci0gICAgICBnc3RfY29sbGVjdF9wYWRzX2NsZWFyIChwYWRzLCBjZGF0YSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoY2RhdGEtPnBhZCk7Ci0gICAgfQotICB9Ci0KLSAgLyogaW5mb3JtIF9jaGFpbiBvZiBjaGFuZ2VzICovCi0gIEdTVF9DT0xMRUNUX1BBRFNfRVZUX0JST0FEQ0FTVCAocGFkcyk7Ci19Ci0KLS8qKgotICogZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmc6Ci0gKiBAcGFkczogdGhlIGNvbGxlY3RwYWRzIHRvIHVzZQotICogQGZsdXNoaW5nOiBkZXNpcmVkIHN0YXRlIG9mIHRoZSBwYWRzCi0gKgotICogQ2hhbmdlIHRoZSBmbHVzaGluZyBzdGF0ZSBvZiBhbGwgdGhlIHBhZHMgaW4gdGhlIGNvbGxlY3Rpb24uIE5vIHBhZAotICogaXMgYWJsZSB0byBhY2NlcHQgYW55bW9yZSBkYXRhIHdoZW4gQGZsdXNoaW5nIGlzICVUUlVFLiBDYWxsaW5nIHRoaXMKLSAqIGZ1bmN0aW9uIHdpdGggQGZsdXNoaW5nICVGQUxTRSBtYWtlcyBAcGFkcyBhY2NlcHQgZGF0YSBhZ2Fpbi4KLSAqIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IGRvd25zdHJlYW0gc3RyZWFtaW5nICh0aHJlYWQpIGlzIG5vdCBibG9ja2VkLAotICogZS5nLiBieSBzZW5kaW5nIGEgRkxVU0hfU1RBUlQgZG93bnN0cmVhbS4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZyAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBnYm9vbGVhbiBmbHVzaGluZykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAocGFkcyAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcykpOwotCi0gIC8qIE5PVEUgc2luY2UgdGhpcyBldmVudHVhbGx5IGNhbGxzIF9wb3AsIHNvbWUgKFNUUkVBTV8pTE9DSyBpcyBuZWVkZWQgaGVyZSAqLwotICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLIChwYWRzKTsKLSAgR1NUX09CSkVDVF9MT0NLIChwYWRzKTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmdfdW5sb2NrZWQgKHBhZHMsIGZsdXNoaW5nKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9VTkxPQ0sgKHBhZHMpOwotfQotCi0vKioKLSAqIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQ6Ci0gKiBAcGFkczogdGhlIGNvbGxlY3RwYWRzIHRvIHVzZQotICoKLSAqIFN0YXJ0cyB0aGUgcHJvY2Vzc2luZyBvZiBkYXRhIGluIHRoZSBjb2xsZWN0X3BhZHMuCi0gKgotICogTVQgc2FmZS4KLSAqLwotdm9pZAotZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzKQotewotICBHU0xpc3QgKmNvbGxlY3RlZDsKLQotICBnX3JldHVybl9pZl9mYWlsIChwYWRzICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywgInN0YXJ0aW5nIGNvbGxlY3QgcGFkcyIpOwotCi0gIC8qIG1ha2Ugc3VyZSBzdG9wIGFuZCBjb2xsZWN0IGNhbm5vdCBiZSBjYWxsZWQgYW55bW9yZSAqLwotICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLIChwYWRzKTsKLQotICAvKiBtYWtlIHBhZHMgc3RyZWFtYWJsZSAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOwotCi0gIC8qIGxvb3Agb3ZlciB0aGUgbWFzdGVyIHBhZCBsaXN0IGFuZCByZXNldCB0aGUgc2VnbWVudCAqLwotICBjb2xsZWN0ZWQgPSBwYWRzLT5wcml2LT5wYWRfbGlzdDsKLSAgZm9yICg7IGNvbGxlY3RlZDsgY29sbGVjdGVkID0gZ19zbGlzdF9uZXh0IChjb2xsZWN0ZWQpKSB7Ci0gICAgR3N0Q29sbGVjdERhdGEgKmRhdGE7Ci0KLSAgICBkYXRhID0gY29sbGVjdGVkLT5kYXRhOwotICAgIGdzdF9zZWdtZW50X2luaXQgKCZkYXRhLT5zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIH0KLQotICBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZ191bmxvY2tlZCAocGFkcywgRkFMU0UpOwotCi0gIC8qIFN0YXJ0IGNvbGxlY3QgcGFkcyAqLwotICBwYWRzLT5wcml2LT5zdGFydGVkID0gVFJVRTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9VTkxPQ0sgKHBhZHMpOwotfQotCi0vKioKLSAqIGdzdF9jb2xsZWN0X3BhZHNfc3RvcDoKLSAqIEBwYWRzOiB0aGUgY29sbGVjdHBhZHMgdG8gdXNlCi0gKgotICogU3RvcHMgdGhlIHByb2Nlc3Npbmcgb2YgZGF0YSBpbiB0aGUgY29sbGVjdF9wYWRzLiB0aGlzIGZ1bmN0aW9uCi0gKiB3aWxsIGFsc28gdW5ibG9jayBhbnkgYmxvY2tpbmcgb3BlcmF0aW9ucy4KLSAqCi0gKiBNVCBzYWZlLgotICovCi12b2lkCi1nc3RfY29sbGVjdF9wYWRzX3N0b3AgKEdzdENvbGxlY3RQYWRzICogcGFkcykKLXsKLSAgR1NMaXN0ICpjb2xsZWN0ZWQ7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAocGFkcyAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcykpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZHMsICJzdG9wcGluZyBjb2xsZWN0IHBhZHMiKTsKLQotICAvKiBtYWtlIHN1cmUgY29sbGVjdCBhbmQgc3RhcnQgY2Fubm90IGJlIGNhbGxlZCBhbnltb3JlICovCi0gIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX0xPQ0sgKHBhZHMpOwotCi0gIC8qIG1ha2UgcGFkcyBub3QgYWNjZXB0IGRhdGEgYW55bW9yZSAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZ191bmxvY2tlZCAocGFkcywgVFJVRSk7Ci0KLSAgLyogU3RvcCBjb2xsZWN0IHBhZHMgKi8KLSAgcGFkcy0+cHJpdi0+c3RhcnRlZCA9IEZBTFNFOwotICBwYWRzLT5wcml2LT5lb3NwYWRzID0gMDsKLSAgcGFkcy0+cHJpdi0+cXVldWVkcGFkcyA9IDA7Ci0KLSAgLyogbG9vcCBvdmVyIHRoZSBtYXN0ZXIgcGFkIGxpc3QgYW5kIGZsdXNoIGJ1ZmZlcnMgKi8KLSAgY29sbGVjdGVkID0gcGFkcy0+cHJpdi0+cGFkX2xpc3Q7Ci0gIGZvciAoOyBjb2xsZWN0ZWQ7IGNvbGxlY3RlZCA9IGdfc2xpc3RfbmV4dCAoY29sbGVjdGVkKSkgewotICAgIEdzdENvbGxlY3REYXRhICpkYXRhOwotICAgIEdzdEJ1ZmZlciAqKmJ1ZmZlcl9wOwotCi0gICAgZGF0YSA9IGNvbGxlY3RlZC0+ZGF0YTsKLSAgICBpZiAoZGF0YS0+YnVmZmVyKSB7Ci0gICAgICBidWZmZXJfcCA9ICZkYXRhLT5idWZmZXI7Ci0gICAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKGJ1ZmZlcl9wLCBOVUxMKTsKLSAgICAgIGRhdGEtPnBvcyA9IDA7Ci0gICAgfQotICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfVU5TRVQgKGRhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRU9TKTsKLSAgfQotCi0gIGlmIChwYWRzLT5wcml2LT5lYXJsaWVzdF9kYXRhKQotICAgIHVucmVmX2RhdGEgKHBhZHMtPnByaXYtPmVhcmxpZXN0X2RhdGEpOwotICBwYWRzLT5wcml2LT5lYXJsaWVzdF9kYXRhID0gTlVMTDsKLSAgcGFkcy0+cHJpdi0+ZWFybGllc3RfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotICAvKiBXYWtlIHRoZW0gdXAgc28gdGhleSBjYW4gZW5kIHRoZSBjaGFpbiBmdW5jdGlvbnMuICovCi0gIEdTVF9DT0xMRUNUX1BBRFNfRVZUX0JST0FEQ0FTVCAocGFkcyk7Ci0KLSAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLIChwYWRzKTsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX3BlZWs6Ci0gKiBAcGFkczogdGhlIGNvbGxlY3RwYWRzIHRvIHBlZWsKLSAqIEBkYXRhOiB0aGUgZGF0YSB0byB1c2UKLSAqCi0gKiBQZWVrIGF0IHRoZSBidWZmZXIgY3VycmVudGx5IHF1ZXVlZCBpbiBAZGF0YS4gVGhpcyBmdW5jdGlvbgotICogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBAcGFkcyBTVFJFQU1fTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZSBjYWxsYmFjawotICogaGFuZGxlci4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBUaGUgYnVmZmVyIGluIEBkYXRhIG9yICVOVUxMIGlmIG5vCi0gKiBidWZmZXIgaXMgcXVldWVkLiBzaG91bGQgdW5yZWYgdGhlIGJ1ZmZlciBhZnRlciB1c2FnZS4KLSAqLwotR3N0QnVmZmVyICoKLWdzdF9jb2xsZWN0X3BhZHNfcGVlayAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGRhdGEpCi17Ci0gIEdzdEJ1ZmZlciAqcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWRzICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGF0YSAhPSBOVUxMLCBOVUxMKTsKLQotICBpZiAoKHJlc3VsdCA9IGRhdGEtPmJ1ZmZlcikpCi0gICAgZ3N0X2J1ZmZlcl9yZWYgKHJlc3VsdCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywgIlBlZWtpbmcgYXQgcGFkICVzOiVzOiBidWZmZXI9JSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGRhdGEtPnBhZCksIHJlc3VsdCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX3BvcDoKLSAqIEBwYWRzOiB0aGUgY29sbGVjdHBhZHMgdG8gcG9wCi0gKiBAZGF0YTogdGhlIGRhdGEgdG8gdXNlCi0gKgotICogUG9wIHRoZSBidWZmZXIgY3VycmVudGx5IHF1ZXVlZCBpbiBAZGF0YS4gVGhpcyBmdW5jdGlvbgotICogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBAcGFkcyBTVFJFQU1fTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZSBjYWxsYmFjawotICogaGFuZGxlci4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiBUaGUgYnVmZmVyIGluIEBkYXRhIG9yICVOVUxMIGlmIG5vCi0gKiBidWZmZXIgd2FzIHF1ZXVlZC4gWW91IHNob3VsZCB1bnJlZiB0aGUgYnVmZmVyIGFmdGVyIHVzYWdlLgotICovCi1Hc3RCdWZmZXIgKgotZ3N0X2NvbGxlY3RfcGFkc19wb3AgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhKQotewotICBHc3RCdWZmZXIgKnJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFkcyAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGEgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgaWYgKChyZXN1bHQgPSBkYXRhLT5idWZmZXIpKSB7Ci0gICAgZGF0YS0+YnVmZmVyID0gTlVMTDsKLSAgICBkYXRhLT5wb3MgPSAwOwotICAgIC8qIG9uZSBsZXNzIHBhZCB3aXRoIHF1ZXVlZCBkYXRhIG5vdyAqLwotICAgIGlmIChHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0lTX1NFVCAoZGF0YSwgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9XQUlUSU5HKSkKLSAgICAgIHBhZHMtPnByaXYtPnF1ZXVlZHBhZHMtLTsKLSAgfQotCi0gIEdTVF9DT0xMRUNUX1BBRFNfRVZUX0JST0FEQ0FTVCAocGFkcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywgIlBvcCBidWZmZXIgb24gcGFkICVzOiVzOiBidWZmZXI9JSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGRhdGEtPnBhZCksIHJlc3VsdCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogcG9wIGFuZCB1bnJlZiB0aGUgY3VycmVudGx5IHF1ZXVlZCBidWZmZXIsIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBTVFJFQU1fTE9DSwotICogaGVsZCAqLwotc3RhdGljIHZvaWQKLWdzdF9jb2xsZWN0X3BhZHNfY2xlYXIgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICBpZiAoKGJ1ZiA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChwYWRzLCBkYXRhKSkpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZToKLSAqIEBwYWRzOiB0aGUgY29sbGVjdHBhZHMgdG8gcXVlcnkKLSAqCi0gKiBRdWVyeSBob3cgbXVjaCBieXRlcyBjYW4gYmUgcmVhZCBmcm9tIGVhY2ggcXVldWVkIGJ1ZmZlci4gVGhpcyBtZWFucwotICogdGhhdCB0aGUgcmVzdWx0IG9mIHRoaXMgY2FsbCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4KLSAqIGJlIHJlYWQgZnJvbSBlYWNoIG9mIHRoZSBwYWRzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIEBwYWRzIFNUUkVBTV9MT0NLIGhlbGQsIHN1Y2ggYXMKLSAqIGluIHRoZSBjYWxsYmFjay4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBxdWV1ZWQgb24gYWxsIHBhZHMuIFRoaXMgZnVuY3Rpb24KLSAqIHJldHVybnMgMCBpZiBhIHBhZCBoYXMgbm8gcXVldWVkIGJ1ZmZlci4KLSAqLwotLyogd2UgbWlnaHQgcHJlLWNhbGN1bGF0ZSB0aGlzIGluIHNvbWUgc3RydWN0IGZpZWxkLAotICogYnV0IHdvdWxkIHRoZW4gaGF2ZSB0byBtYWludGFpbiB0aGlzIGluIF9jaGFpbiBhbmQgcGFydGljdWxhcmx5IF9wb3AsIGV0YywKLSAqIGV2ZW4gaWYgZWxlbWVudCBpcyBuZXZlciBpbnRlcmVzdGVkIGluIHRoaXMgaW5mb3JtYXRpb24gKi8KLWd1aW50Ci1nc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzKQotewotICBHU0xpc3QgKmNvbGxlY3RlZDsKLSAgZ3VpbnQgcmVzdWx0ID0gR19NQVhVSU5UOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWRzICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIDApOwotCi0gIGNvbGxlY3RlZCA9IHBhZHMtPmRhdGE7Ci0gIGZvciAoOyBjb2xsZWN0ZWQ7IGNvbGxlY3RlZCA9IGdfc2xpc3RfbmV4dCAoY29sbGVjdGVkKSkgewotICAgIEdzdENvbGxlY3REYXRhICpwZGF0YTsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBnaW50IHNpemU7Ci0KLSAgICBwZGF0YSA9IChHc3RDb2xsZWN0RGF0YSAqKSBjb2xsZWN0ZWQtPmRhdGE7Ci0KLSAgICAvKiBpZ25vcmUgcGFkIHdpdGggRU9TICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChwZGF0YSwKLSAgICAgICAgICAgICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0VPUykpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWRzLCAicGFkICVwIGlzIEVPUyIsIHBkYXRhKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIGFuIGVtcHR5IGJ1ZmZlciB3aXRob3V0IEVPUyBpcyB3ZWlyZCB3aGVuIHdlIGdldCBoZXJlLi4gKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoKGJ1ZmZlciA9IHBkYXRhLT5idWZmZXIpID09IE5VTEwpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhZHMsICJwYWQgJXAgaGFzIG5vIGJ1ZmZlciIsIHBkYXRhKTsKLSAgICAgIGdvdG8gbm90X2ZpbGxlZDsKLSAgICB9Ci0KLSAgICAvKiB0aGlzIGlzIHRoZSBzaXplIGxlZnQgb2YgdGhlIGJ1ZmZlciAqLwotICAgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpIC0gcGRhdGEtPnBvczsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWRzLCAicGFkICVwIGhhcyAlZCBieXRlcyBsZWZ0IiwgcGRhdGEsIHNpemUpOwotCi0gICAgLyogbmVlZCB0byByZXR1cm4gdGhlIG1pbiBvZiBhbGwgYXZhaWxhYmxlIGRhdGEgKi8KLSAgICBpZiAoc2l6ZSA8IHJlc3VsdCkKLSAgICAgIHJlc3VsdCA9IHNpemU7Ci0gIH0KLSAgLyogbm90aGluZyBjaGFuZ2VkLCBhbGwgbXVzdCBiZSBFT1MgdGhlbiwgcmV0dXJuIDAgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHJlc3VsdCA9PSBHX01BWFVJTlQpKQotICAgIHJlc3VsdCA9IDA7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotbm90X2ZpbGxlZDoKLSAgewotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2NvbGxlY3RfcGFkc19mbHVzaDoKLSAqIEBwYWRzOiB0aGUgY29sbGVjdHBhZHMgdG8gcXVlcnkKLSAqIEBkYXRhOiB0aGUgZGF0YSB0byB1c2UKLSAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGZsdXNoCi0gKgotICogRmx1c2ggQHNpemUgYnl0ZXMgZnJvbSB0aGUgcGFkIEBkYXRhLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIEBwYWRzIFNUUkVBTV9MT0NLIGhlbGQsIHN1Y2ggYXMKLSAqIGluIHRoZSBjYWxsYmFjay4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgZmx1c2hlZCBUaGlzIGNhbiBiZSBsZXNzIHRoYW4gQHNpemUgYW5kCi0gKiBpcyAwIGlmIHRoZSBwYWQgd2FzIGVuZC1vZi1zdHJlYW0uCi0gKi8KLWd1aW50Ci1nc3RfY29sbGVjdF9wYWRzX2ZsdXNoIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogZGF0YSwKLSAgICBndWludCBzaXplKQotewotICBndWludCBmbHVzaHNpemU7Ci0gIGdzaXplIGJzaXplOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFkcyAhPSBOVUxMLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRhdGEgIT0gTlVMTCwgMCk7Ci0KLSAgLyogbm8gYnVmZmVyLCBtdXN0IGJlIEVPUyAqLwotICBpZiAoKGJ1ZmZlciA9IGRhdGEtPmJ1ZmZlcikgPT0gTlVMTCkKLSAgICByZXR1cm4gMDsKLQotICBic2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7Ci0KLSAgLyogdGhpcyBpcyB3aGF0IHdlIGNhbiBmbHVzaCBhdCBtYXggKi8KLSAgZmx1c2hzaXplID0gTUlOIChzaXplLCBic2l6ZSAtIGRhdGEtPnBvcyk7Ci0KLSAgZGF0YS0+cG9zICs9IHNpemU7Ci0KLSAgaWYgKGRhdGEtPnBvcyA+PSBic2l6ZSkKLSAgICAvKiBfY2xlYXIgd2lsbCBhbHNvIHJlc2V0IGRhdGEtPnBvcyB0byAwICovCi0gICAgZ3N0X2NvbGxlY3RfcGFkc19jbGVhciAocGFkcywgZGF0YSk7Ci0KLSAgcmV0dXJuIGZsdXNoc2l6ZTsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVyOgotICogQHBhZHM6IHRoZSBjb2xsZWN0cGFkcyB0byBxdWVyeQotICogQGRhdGE6IHRoZSBkYXRhIHRvIHVzZQotICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICoKLSAqIEdldCBhIHN1YmJ1ZmZlciBvZiBAc2l6ZSBieXRlcyBmcm9tIHRoZSBnaXZlbiBwYWQgQGRhdGEuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggQHBhZHMgU1RSRUFNX0xPQ0sgaGVsZCwgc3VjaCBhcyBpbiB0aGUKLSAqIGNhbGxiYWNrLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IEEgc3ViIGJ1ZmZlci4gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBjYW4KLSAqIGJlIGxlc3MgdGhhdCByZXF1ZXN0ZWQuIEEgcmV0dXJuIG9mICVOVUxMIHNpZ25hbHMgdGhhdCB0aGUgcGFkIGlzCi0gKiBlbmQtb2Ytc3RyZWFtLiBVbnJlZiB0aGUgYnVmZmVyIGFmdGVyIHVzZS4KLSAqLwotR3N0QnVmZmVyICoKLWdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgIGd1aW50IHNpemUpCi17Ci0gIGd1aW50IHJlYWRzaXplLCBidWZfc2l6ZTsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRhICE9IE5VTEwsIE5VTEwpOwotCi0gIC8qIG5vIGJ1ZmZlciwgbXVzdCBiZSBFT1MgKi8KLSAgaWYgKChidWZmZXIgPSBkYXRhLT5idWZmZXIpID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgYnVmX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotICByZWFkc2l6ZSA9IE1JTiAoc2l6ZSwgYnVmX3NpemUgLSBkYXRhLT5wb3MpOwotCi0gIHJldHVybiBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIGRhdGEtPnBvcywKLSAgICAgIHJlYWRzaXplKTsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyOgotICogQHBhZHM6IHRoZSBjb2xsZWN0cGFkcyB0byBxdWVyeQotICogQGRhdGE6IHRoZSBkYXRhIHRvIHVzZQotICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICoKLSAqIEdldCBhIHN1YmJ1ZmZlciBvZiBAc2l6ZSBieXRlcyBmcm9tIHRoZSBnaXZlbiBwYWQgQGRhdGEuIEZsdXNoZXMgdGhlIGFtb3VudAotICogb2YgcmVhZCBieXRlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBAcGFkcyBTVFJFQU1fTE9DSyBoZWxkLCBzdWNoIGFzIGluIHRoZQotICogY2FsbGJhY2suCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogQSBzdWIgYnVmZmVyLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGNhbgotICogYmUgbGVzcyB0aGF0IHJlcXVlc3RlZC4gQSByZXR1cm4gb2YgJU5VTEwgc2lnbmFscyB0aGF0IHRoZSBwYWQgaXMKLSAqIGVuZC1vZi1zdHJlYW0uIFVucmVmIHRoZSBidWZmZXIgYWZ0ZXIgdXNlLgotICovCi1Hc3RCdWZmZXIgKgotZ3N0X2NvbGxlY3RfcGFkc190YWtlX2J1ZmZlciAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGRhdGEsCi0gICAgZ3VpbnQgc2l6ZSkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBnc3RfY29sbGVjdF9wYWRzX3JlYWRfYnVmZmVyIChwYWRzLCBkYXRhLCBzaXplKTsKLQotICBpZiAoYnVmZmVyKSB7Ci0gICAgZ3N0X2NvbGxlY3RfcGFkc19mbHVzaCAocGFkcywgZGF0YSwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSk7Ci0gIH0KLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX3NldF93YWl0aW5nOgotICogQHBhZHM6IHRoZSBjb2xsZWN0cGFkcwotICogQGRhdGE6IHRoZSBkYXRhIHRvIHVzZQotICogQHdhaXRpbmc6IGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgcGFkIHNob3VsZCBvcGVyYXRlCi0gKiAgICAgICAgICAgaW4gd2FpdGluZyBvciBub24td2FpdGluZyBtb2RlCi0gKgotICogU2V0cyBhIHBhZCB0byB3YWl0aW5nIG9yIG5vbi13YWl0aW5nIG1vZGUsIGlmIGF0IGxlYXN0IHRoaXMgcGFkCi0gKiBoYXMgbm90IGJlZW4gY3JlYXRlZCB3aXRoIGxvY2tlZCB3YWl0aW5nIHN0YXRlLAotICogaW4gd2hpY2ggY2FzZSBub3RoaW5nIGhhcHBlbnMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggQHBhZHMgU1RSRUFNX0xPQ0sgaGVsZCwgc3VjaCBhcwotICogaW4gdGhlIGNhbGxiYWNrLgotICoKLSAqIE1UIHNhZmUuCi0gKi8KLXZvaWQKLWdzdF9jb2xsZWN0X3BhZHNfc2V0X3dhaXRpbmcgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgIGdib29sZWFuIHdhaXRpbmcpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHBhZHMgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DT0xMRUNUX1BBRFMgKHBhZHMpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZGF0YSAhPSBOVUxMKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWRzLCAiU2V0dGluZyBwYWQgJXMgdG8gd2FpdGluZyAlZCwgbG9ja2VkICVkIiwKLSAgICAgIEdTVF9QQURfTkFNRSAoZGF0YS0+cGFkKSwgd2FpdGluZywKLSAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChkYXRhLCBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0xPQ0tFRCkpOwotCi0gIC8qIERvIHNvbWV0aGluZyBvbmx5IG9uIGEgY2hhbmdlIGFuZCBpZiBub3QgbG9ja2VkICovCi0gIGlmICghR1NUX0NPTExFQ1RfUEFEU19TVEFURV9JU19TRVQgKGRhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfTE9DS0VEKSAmJgotICAgICAgKEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChkYXRhLCBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1dBSVRJTkcpICE9Ci0gICAgICAgICAgISAhd2FpdGluZykpIHsKLSAgICAvKiBTZXQgd2FpdGluZyBzdGF0ZSBmb3IgdGhpcyBwYWQgKi8KLSAgICBpZiAod2FpdGluZykKLSAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfU0VUIChkYXRhLCBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1dBSVRJTkcpOwotICAgIGVsc2UKLSAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfVU5TRVQgKGRhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfV0FJVElORyk7Ci0gICAgLyogVXBkYXRlIG51bWJlciBvZiBxdWV1ZWQgcGFkcyBpZiBuZWVkZWQgKi8KLSAgICBpZiAoIWRhdGEtPmJ1ZmZlciAmJgotICAgICAgICAhR1NUX0NPTExFQ1RfUEFEU19TVEFURV9JU19TRVQgKGRhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRU9TKSkgewotICAgICAgaWYgKHdhaXRpbmcpCi0gICAgICAgIHBhZHMtPnByaXYtPnF1ZXVlZHBhZHMtLTsKLSAgICAgIGVsc2UKLSAgICAgICAgcGFkcy0+cHJpdi0+cXVldWVkcGFkcysrOwotICAgIH0KLQotICAgIC8qIHNpZ25hbCB3YWl0ZXJzIGJlY2F1c2Ugc29tZXRoaW5nIGNoYW5nZWQgKi8KLSAgICBHU1RfQ09MTEVDVF9QQURTX0VWVF9CUk9BRENBU1QgKHBhZHMpOwotICB9Ci19Ci0KLS8qIHNlZSBpZiBwYWRzIHdlcmUgYWRkZWQgb3IgcmVtb3ZlZCBhbmQgdXBkYXRlIG91ciBzdGF0cy4gQW55IHBhZAotICogYWRkZWQgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBMT0NLIHdpbGwgZ2V0IGNvbGxlY3RlZCBpbiB0aGUgbmV4dAotICogcm91bmQuCi0gKgotICogV2UgY2FuIGRvIGEgcXVpY2sgY2hlY2sgYnkgY2hlY2tpbmcgdGhlIGNvb2tpZXMsIHRoYXQgZ2V0IGNoYW5nZWQKLSAqIHdoZW5ldmVyIHRoZSBwYWQgbGlzdCBpcyB1cGRhdGVkLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggU1RSRUFNX0xPQ0suCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfY29sbGVjdF9wYWRzX2NoZWNrX3BhZHMgKEdzdENvbGxlY3RQYWRzICogcGFkcykKLXsKLSAgLyogdGhlIG1hc3RlciBsaXN0IGFuZCBjb29raWUgYXJlIHByb3RlY3RlZCB3aXRoIExPQ0sgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChwYWRzKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHBhZHMtPnByaXYtPnBhZF9jb29raWUgIT0gcGFkcy0+cHJpdi0+Y29va2llKSkgewotICAgIEdTTGlzdCAqY29sbGVjdGVkOwotCi0gICAgLyogY2xlYXIgbGlzdCBhbmQgc3RhdHMgKi8KLSAgICBnX3NsaXN0X2ZvcmVhY2ggKHBhZHMtPmRhdGEsIChHRnVuYykgdW5yZWZfZGF0YSwgTlVMTCk7Ci0gICAgZ19zbGlzdF9mcmVlIChwYWRzLT5kYXRhKTsKLSAgICBwYWRzLT5kYXRhID0gTlVMTDsKLSAgICBwYWRzLT5wcml2LT5udW1wYWRzID0gMDsKLSAgICBwYWRzLT5wcml2LT5xdWV1ZWRwYWRzID0gMDsKLSAgICBwYWRzLT5wcml2LT5lb3NwYWRzID0gMDsKLSAgICBpZiAocGFkcy0+cHJpdi0+ZWFybGllc3RfZGF0YSkKLSAgICAgIHVucmVmX2RhdGEgKHBhZHMtPnByaXYtPmVhcmxpZXN0X2RhdGEpOwotICAgIHBhZHMtPnByaXYtPmVhcmxpZXN0X2RhdGEgPSBOVUxMOwotICAgIHBhZHMtPnByaXYtPmVhcmxpZXN0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgLyogbG9vcCBvdmVyIHRoZSBtYXN0ZXIgcGFkIGxpc3QgKi8KLSAgICBjb2xsZWN0ZWQgPSBwYWRzLT5wcml2LT5wYWRfbGlzdDsKLSAgICBmb3IgKDsgY29sbGVjdGVkOyBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKLSAgICAgIEdzdENvbGxlY3REYXRhICpkYXRhOwotCi0gICAgICAvKiB1cGRhdGUgdGhlIHN0YXRzICovCi0gICAgICBwYWRzLT5wcml2LT5udW1wYWRzKys7Ci0gICAgICBkYXRhID0gY29sbGVjdGVkLT5kYXRhOwotICAgICAgaWYgKEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChkYXRhLCBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0VPUykpCi0gICAgICAgIHBhZHMtPnByaXYtPmVvc3BhZHMrKzsKLSAgICAgIGVsc2UgaWYgKGRhdGEtPmJ1ZmZlciB8fCAhR1NUX0NPTExFQ1RfUEFEU19TVEFURV9JU19TRVQgKGRhdGEsCi0gICAgICAgICAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfV0FJVElORykpCi0gICAgICAgIHBhZHMtPnByaXYtPnF1ZXVlZHBhZHMrKzsKLQotICAgICAgLyogYWRkIHRvIHRoZSBsaXN0IG9mIHBhZHMgdG8gY29sbGVjdCAqLwotICAgICAgcmVmX2RhdGEgKGRhdGEpOwotICAgICAgLyogcHJlc2VydmUgb3JkZXIgb2YgYWRkaW5nL3JlcXVlc3RpbmcgcGFkcyAqLwotICAgICAgcGFkcy0+ZGF0YSA9IGdfc2xpc3RfYXBwZW5kIChwYWRzLT5kYXRhLCBkYXRhKTsKLSAgICB9Ci0gICAgLyogYW5kIHVwZGF0ZSB0aGUgY29va2llICovCi0gICAgcGFkcy0+cHJpdi0+Y29va2llID0gcGFkcy0+cHJpdi0+cGFkX2Nvb2tpZTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkcyk7Ci19Ci0KLS8qIGNoZWNrcyBpZiBhbGwgdGhlIHBhZHMgYXJlIGNvbGxlY3RlZCBhbmQgY2FsbCB0aGUgY29sbGVjdGZ1bmN0aW9uCi0gKgotICogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIFNUUkVBTV9MT0NLLgotICoKLSAqIFJldHVybnM6IFRoZSAjR3N0Rmxvd1JldHVybiBvZiBjb2xsZWN0aW9uLgotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2NvbGxlY3RfcGFkc19jaGVja19jb2xsZWN0ZWQgKEdzdENvbGxlY3RQYWRzICogcGFkcykKLXsKLSAgR3N0Rmxvd1JldHVybiBmbG93X3JldCA9IEdTVF9GTE9XX09LOwotICBHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uIGZ1bmM7Ci0gIGdwb2ludGVyIHVzZXJfZGF0YTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0NPTExFQ1RfUEFEUyAocGFkcyksIEdTVF9GTE9XX0VSUk9SKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOwotICBmdW5jID0gcGFkcy0+cHJpdi0+ZnVuYzsKLSAgdXNlcl9kYXRhID0gcGFkcy0+cHJpdi0+dXNlcl9kYXRhOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkcyk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZHMtPnByaXYtPmZ1bmMgIT0gTlVMTCwgR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRCk7Ci0KLSAgLyogY2hlY2sgZm9yIG5ldyBwYWRzLCB1cGRhdGUgc3RhdHMgZXRjLi4gKi8KLSAgZ3N0X2NvbGxlY3RfcGFkc19jaGVja19wYWRzIChwYWRzKTsKLQotICBpZiAoR19VTkxJS0VMWSAocGFkcy0+cHJpdi0+ZW9zcGFkcyA9PSBwYWRzLT5wcml2LT5udW1wYWRzKSkgewotICAgIC8qIElmIGFsbCBvdXIgcGFkcyBhcmUgRU9TIGp1c3QgY29sbGVjdCBvbmNlIHRvIGxldCB0aGUgZWxlbWVudAotICAgICAqIGRvIGl0cyBmaW5hbCBFT1MgaGFuZGxpbmcuICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywgIkFsbCBhY3RpdmUgcGFkcyAoJWQpIGFyZSBFT1MsIGNhbGxpbmcgJXMiLAotICAgICAgICBwYWRzLT5wcml2LT5udW1wYWRzLCBHU1RfREVCVUdfRlVOQ1BUUl9OQU1FIChmdW5jKSk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmcGFkcy0+cHJpdi0+c2Vla2luZywKLSAgICAgICAgICAgICAgICBUUlVFLCBGQUxTRSkpKSB7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhZHMsICJmaW5pc2hlZCBzZWVraW5nIik7Ci0gICAgfQotICAgIGRvIHsKLSAgICAgIGZsb3dfcmV0ID0gZnVuYyAocGFkcywgdXNlcl9kYXRhKTsKLSAgICB9IHdoaWxlIChmbG93X3JldCA9PSBHU1RfRkxPV19PSyk7Ci0gIH0gZWxzZSB7Ci0gICAgZ2Jvb2xlYW4gY29sbGVjdGVkID0gRkFMU0U7Ci0KLSAgICAvKiBXZSBjYWxsIHRoZSBjb2xsZWN0ZWQgZnVuY3Rpb24gYXMgbG9uZyBhcyBvdXIgY29uZGl0aW9uIG1hdGNoZXMuICovCi0gICAgd2hpbGUgKCgocGFkcy0+cHJpdi0+cXVldWVkcGFkcyArIHBhZHMtPnByaXYtPmVvc3BhZHMpID49Ci0gICAgICAgICAgICBwYWRzLT5wcml2LT5udW1wYWRzKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywKLSAgICAgICAgICAiQWxsIGFjdGl2ZSBwYWRzICglZCArICVkID49ICVkKSBoYXZlIGRhdGEsICIgImNhbGxpbmcgJXMiLAotICAgICAgICAgIHBhZHMtPnByaXYtPnF1ZXVlZHBhZHMsIHBhZHMtPnByaXYtPmVvc3BhZHMsIHBhZHMtPnByaXYtPm51bXBhZHMsCi0gICAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFJfTkFNRSAoZnVuYykpOwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmcGFkcy0+cHJpdi0+c2Vla2luZywKLSAgICAgICAgICAgICAgICAgIFRSVUUsIEZBTFNFKSkpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChwYWRzLCAiZmluaXNoZWQgc2Vla2luZyIpOwotICAgICAgfQotICAgICAgZmxvd19yZXQgPSBmdW5jIChwYWRzLCB1c2VyX2RhdGEpOwotICAgICAgY29sbGVjdGVkID0gVFJVRTsKLQotICAgICAgLyogYnJlYWsgb24gZXJyb3IgKi8KLSAgICAgIGlmIChmbG93X3JldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgYnJlYWs7Ci0gICAgICAvKiBEb24ndCBrZWVwIGxvb3BpbmcgYWZ0ZXIgdGVsbGluZyB0aGUgZWxlbWVudCBFT1Mgb3IgZmx1c2hpbmcgKi8KLSAgICAgIGlmIChwYWRzLT5wcml2LT5xdWV1ZWRwYWRzID09IDApCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoIWNvbGxlY3RlZCkKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZHMsICJOb3QgYWxsIGFjdGl2ZSBwYWRzICglZCkgaGF2ZSBkYXRhLCBjb250aW51aW5nIiwKLSAgICAgICAgICBwYWRzLT5wcml2LT5udW1wYWRzKTsKLSAgfQotICByZXR1cm4gZmxvd19yZXQ7Ci19Ci0KLQotLyogR2VuZXJhbCBvdmVydmlldzoKLSAqIC0gb25seSBwYWQgd2l0aCBhIGJ1ZmZlciBjYW4gZGV0ZXJtaW5lIGVhcmxpZXN0X2RhdGEgKGFuZCBlYXJsaWVzdF90aW1lKQotICogLSBvbmx5IHNlZ21lbnQgaW5mbyBkZXRlcm1pbmVzIChub24tKXdhaXRpbmcgc3RhdGUKLSAqIC0gPyBwZXJoYXBzIHVzZSBfc3RyZWFtX3RpbWUgZm9yIGNvbXBhcmlzb24KLSAqICAgKHdoaWNoIG11eGVycyBtaWdodCBoYXZlIHVzZSBhcyB3ZWxsID8pCi0gKi8KLQotLyoKLSAqIEZ1bmN0aW9uIHRvIHJlY2FsY3VsYXRlIHRoZSB3YWl0aW5nIHN0YXRlIG9mIGFsbCBwYWRzLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggU1RSRUFNX0xPQ0suCi0gKgotICogUmV0dXJucyAlVFJVRSBpZiBhIHBhZCB3YXMgc2V0IHRvIHdhaXRpbmcKLSAqIChmcm9tIG5vbi13YWl0aW5nIHN0YXRlKS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfY29sbGVjdF9wYWRzX3JlY2FsY3VsYXRlX3dhaXRpbmcgKEdzdENvbGxlY3RQYWRzICogcGFkcykKLXsKLSAgR1NMaXN0ICpjb2xsZWN0ZWQ7Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotCi0gIC8qIElmIGVhcmxpZXN0IHRpbWUgaXMgbm90IGtub3duLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLiAqLwotICBpZiAocGFkcy0+cHJpdi0+ZWFybGllc3RfZGF0YSA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBmb3IgKGNvbGxlY3RlZCA9IHBhZHMtPmRhdGE7IGNvbGxlY3RlZDsgY29sbGVjdGVkID0gZ19zbGlzdF9uZXh0IChjb2xsZWN0ZWQpKSB7Ci0gICAgR3N0Q29sbGVjdERhdGEgKmRhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgY29sbGVjdGVkLT5kYXRhOwotICAgIGludCBjbXBfcmVzOwotICAgIEdzdENsb2NrVGltZSBjb21wX3RpbWU7Ci0KLSAgICAvKiBjaGVjayBpZiBwYWQgaGFzIGEgc2VnbWVudCAqLwotICAgIGlmIChkYXRhLT5zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1VOREVGSU5FRCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWRzLAotICAgICAgICAgICJHc3RDb2xsZWN0UGFkcyBoYXMgbm8gdGltZSBzZWdtZW50LCBhc3N1bWluZyAwIGJhc2VkLiIpOwotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmRhdGEtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1NFVCAoZGF0YSwgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9ORVdfU0VHTUVOVCk7Ci0gICAgfQotCi0gICAgLyogY2hlY2sgc2VnbWVudCBmb3JtYXQgKi8KLSAgICBpZiAoZGF0YS0+c2VnbWVudC5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChwYWRzLCAiR3N0Q29sbGVjdFBhZHMgY2FuIGhhbmRsZSBvbmx5IHRpbWUgc2VnbWVudHMuIik7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvKiBjaGVjayBpZiB0aGUgd2FpdGluZyBzdGF0ZSBzaG91bGQgYmUgY2hhbmdlZCAqLwotICAgIGNvbXBfdGltZSA9IGRhdGEtPnNlZ21lbnQucG9zaXRpb247Ci0gICAgY21wX3JlcyA9IHBhZHMtPnByaXYtPmNvbXBhcmVfZnVuYyAocGFkcywgZGF0YSwgY29tcF90aW1lLAotICAgICAgICBwYWRzLT5wcml2LT5lYXJsaWVzdF9kYXRhLCBwYWRzLT5wcml2LT5lYXJsaWVzdF90aW1lLAotICAgICAgICBwYWRzLT5wcml2LT5jb21wYXJlX3VzZXJfZGF0YSk7Ci0gICAgaWYgKGNtcF9yZXMgPiAwKQotICAgICAgLyogc3RvcCB3YWl0aW5nICovCi0gICAgICBnc3RfY29sbGVjdF9wYWRzX3NldF93YWl0aW5nIChwYWRzLCBkYXRhLCBGQUxTRSk7Ci0gICAgZWxzZSB7Ci0gICAgICBpZiAoIUdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChkYXRhLCBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1dBSVRJTkcpKSB7Ci0gICAgICAgIC8qIHN0YXJ0IHdhaXRpbmcgKi8KLSAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZyAocGFkcywgZGF0YSwgVFJVRSk7Ci0gICAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfY29sbGVjdF9wYWRzX2ZpbmRfYmVzdF9wYWQ6Ci0gKiBAcGFkczogdGhlIGNvbGxlY3RwYWRzIHRvIHVzZQotICogQGRhdGE6IHJldHVybnMgdGhlIGNvbGxlY3RkYXRhIGZvciBlYXJsaWVzdCBkYXRhCi0gKiBAdGltZTogcmV0dXJucyB0aGUgZWFybGllc3QgYXZhaWxhYmxlIGJ1ZmZlcnRpbWUKLSAqCi0gKiBGaW5kIHRoZSBvbGRlc3QvYmVzdCBwYWQsIGkuZS4gcGFkIGhvbGRpbmcgdGhlIG9sZGVzdCBidWZmZXIgYW5kCi0gKiBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nICNHc3RDb2xsZWN0RGF0YSBhbmQgYnVmZmVydGltZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBTVFJFQU1fTE9DSyBoZWxkLAotICogc3VjaCBhcyBpbiB0aGUgY2FsbGJhY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfY29sbGVjdF9wYWRzX2ZpbmRfYmVzdF9wYWQgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0RGF0YSAqKiBkYXRhLCBHc3RDbG9ja1RpbWUgKiB0aW1lKQotewotICBHU0xpc3QgKmNvbGxlY3RlZDsKLSAgR3N0Q29sbGVjdERhdGEgKmJlc3QgPSBOVUxMOwotICBHc3RDbG9ja1RpbWUgYmVzdF90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBnX3JldHVybl9pZl9mYWlsIChkYXRhICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsICh0aW1lICE9IE5VTEwpOwotCi0gIGZvciAoY29sbGVjdGVkID0gcGFkcy0+ZGF0YTsgY29sbGVjdGVkOyBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBHc3RDb2xsZWN0RGF0YSAqZGF0YSA9IChHc3RDb2xsZWN0RGF0YSAqKSBjb2xsZWN0ZWQtPmRhdGE7Ci0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICAgIGJ1ZmZlciA9IGdzdF9jb2xsZWN0X3BhZHNfcGVlayAocGFkcywgZGF0YSk7Ci0gICAgLyogaWYgd2UgaGF2ZSBhIGJ1ZmZlciBjaGVjayBpZiBpdCBpcyBiZXR0ZXIgdGhlbiB0aGUgY3VycmVudCBiZXN0IG9uZSAqLwotICAgIGlmIChidWZmZXIgIT0gTlVMTCkgewotICAgICAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9EVFNfT1JfUFRTIChidWZmZXIpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICAgIGlmIChiZXN0ID09IE5VTEwgfHwgcGFkcy0+cHJpdi0+Y29tcGFyZV9mdW5jIChwYWRzLCBkYXRhLCB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgIGJlc3QsIGJlc3RfdGltZSwgcGFkcy0+cHJpdi0+Y29tcGFyZV91c2VyX2RhdGEpIDwgMCkgewotICAgICAgICBiZXN0ID0gZGF0YTsKLSAgICAgICAgYmVzdF90aW1lID0gdGltZXN0YW1wOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIHNldCBlYXJsaWVzdCB0aW1lICovCi0gICpkYXRhID0gYmVzdDsKLSAgKnRpbWUgPSBiZXN0X3RpbWU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywgImJlc3QgcGFkICVzLCBiZXN0IHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgYmVzdCA/IEdTVF9QQURfTkFNRSAoKChHc3RDb2xsZWN0RGF0YSAqKSBiZXN0KS0+cGFkKSA6ICIobmlsKSIsCi0gICAgICBHU1RfVElNRV9BUkdTIChiZXN0X3RpbWUpKTsKLX0KLQotLyoKLSAqIEZ1bmN0aW9uIHRvIHJlY2FsY3VsYXRlIGVhcmxpZXN0X2RhdGEgYW5kIGVhcmxpZXN0X3RpbWVzdGFtcC4gVGhpcyBhbHNvIGNhbGxzCi0gKiBnc3RfY29sbGVjdF9wYWRzX3JlY2FsY3VsYXRlX3dhaXRpbmcKLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFNUUkVBTV9MT0NLLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb2xsZWN0X3BhZHNfcmVjYWxjdWxhdGVfZnVsbCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzKQotewotICBpZiAocGFkcy0+cHJpdi0+ZWFybGllc3RfZGF0YSkKLSAgICB1bnJlZl9kYXRhIChwYWRzLT5wcml2LT5lYXJsaWVzdF9kYXRhKTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19maW5kX2Jlc3RfcGFkIChwYWRzLCAmcGFkcy0+cHJpdi0+ZWFybGllc3RfZGF0YSwKLSAgICAgICZwYWRzLT5wcml2LT5lYXJsaWVzdF90aW1lKTsKLSAgaWYgKHBhZHMtPnByaXYtPmVhcmxpZXN0X2RhdGEpCi0gICAgcmVmX2RhdGEgKHBhZHMtPnByaXYtPmVhcmxpZXN0X2RhdGEpOwotICByZXR1cm4gZ3N0X2NvbGxlY3RfcGFkc19yZWNhbGN1bGF0ZV93YWl0aW5nIChwYWRzKTsKLX0KLQotLyoKLSAqIERlZmF1bHQgY29sbGVjdCBjYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiAjR3N0Q29sbGVjdFBhZHMgZ2F0aGVyZWQgYWxsIGRhdGEuCi0gKgotICogQ2FsbGVkIHdpdGggU1RSRUFNX0xPQ0suCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfY29sbGVjdF9wYWRzX2RlZmF1bHRfY29sbGVjdGVkIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0Q29sbGVjdERhdGEgKmJlc3QgPSBOVUxMOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbiBmdW5jOwotICBncG9pbnRlciBidWZmZXJfdXNlcl9kYXRhOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQ09MTEVDVF9QQURTIChwYWRzKSwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkcyk7Ci0gIGZ1bmMgPSBwYWRzLT5wcml2LT5idWZmZXJfZnVuYzsKLSAgYnVmZmVyX3VzZXJfZGF0YSA9IHBhZHMtPnByaXYtPmJ1ZmZlcl91c2VyX2RhdGE7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWRzKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZnVuYyAhPSBOVUxMLCBHU1RfRkxPV19OT1RfU1VQUE9SVEVEKTsKLQotICAvKiBGaW5kIHRoZSBvbGRlc3QgcGFkIGF0IGFsbCBjb3N0ICovCi0gIGlmIChnc3RfY29sbGVjdF9wYWRzX3JlY2FsY3VsYXRlX2Z1bGwgKHBhZHMpKSB7Ci0gICAgLyogd2FpdGluZyB3YXMgc3dpdGNoZWQgb24sCi0gICAgICogc28gZ2l2ZSBhbm90aGVyIHRocmVhZCBhIGNoYW5jZSB0byBkZWxpdmVyIGEgcG9zc2libHkKLSAgICAgKiBvbGRlciBidWZmZXI7IGRvbid0IGNoYXJnZSBvbiB5ZXQgd2l0aCB0aGUgY3VycmVudCBvbGRlc3QgKi8KLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBiZXN0ID0gcGFkcy0+cHJpdi0+ZWFybGllc3RfZGF0YTsKLQotICAvKiBObyBkYXRhIGNvbGxlY3RlZCBtZWFucyBFT1MuICovCi0gIGlmIChHX1VOTElLRUxZIChiZXN0ID09IE5VTEwpKSB7Ci0gICAgcmV0ID0gZnVuYyAocGFkcywgYmVzdCwgTlVMTCwgYnVmZmVyX3VzZXJfZGF0YSk7Ci0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICAvKiBtYWtlIHN1cmUgdGhhdCB0aGUgcGFkIHdlIHRha2UgYSBidWZmZXIgZnJvbSBpcyB3YWl0aW5nOwotICAgKiBvdGhlcndpc2UgcG9wcGluZyBhIGJ1ZmZlciB3aWxsIHNlZW0gbm90IHRvIGhhdmUgaGFwcGVuZWQKLSAgICogYW5kIGNvbGxlY3RwYWRzIGNhbiBnZXQgaW50byBhIGJ1c3kgbG9vcCAqLwotICBnc3RfY29sbGVjdF9wYWRzX3NldF93YWl0aW5nIChwYWRzLCBiZXN0LCBUUlVFKTsKLQotICAvKiBTZW5kIGJ1ZmZlciAqLwotICBidWZmZXIgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAocGFkcywgYmVzdCk7Ci0gIHJldCA9IGZ1bmMgKHBhZHMsIGJlc3QsIGJ1ZmZlciwgYnVmZmVyX3VzZXJfZGF0YSk7Ci0KLSAgLyogbWF5YmUgbm9uLXdhaXRpbmcgd2FzIGZvcmNlZCB0byB3YWl0aW5nIGFib3ZlIGR1ZSB0bwotICAgKiBuZXdzZWdtZW50IGV2ZW50cyBjb21pbmcgdG9vIHNwYXJzZWx5LAotICAgKiBzbyByZS1jaGVjayB0byByZXN0b3JlIHN0YXRlIHRvIGF2b2lkIGhhbmdpbmcvd2FpdGluZyAqLwotICBnc3RfY29sbGVjdF9wYWRzX3JlY2FsY3VsYXRlX2Z1bGwgKHBhZHMpOwotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi0vKgotICogRGVmYXVsdCB0aW1lc3RhbXAgY29tcGFyZSBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGdpbnQKLWdzdF9jb2xsZWN0X3BhZHNfZGVmYXVsdF9jb21wYXJlX2Z1bmMgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0RGF0YSAqIGRhdGExLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wMSwKLSAgICBHc3RDb2xsZWN0RGF0YSAqIGRhdGEyLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wMiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWRzLCAiY29tcGFyaW5nICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiBhbmQgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXAxKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcDIpKTsKLSAgLyogbm9uLXZhbGlkIHRpbWVzdGFtcHMgZ28gZmlyc3QgYXMgdGhleSBhcmUgcHJvYmFibHkgaGVhZGVycyBvciBzbyAqLwotICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXAxKSkpCi0gICAgcmV0dXJuIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXAyKSA/IC0xIDogMDsKLQotICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXAyKSkpCi0gICAgcmV0dXJuIDE7Ci0KLSAgLyogY29tcGFyZSB0aW1lc3RhbXAgKi8KLSAgaWYgKHRpbWVzdGFtcDEgPCB0aW1lc3RhbXAyKQotICAgIHJldHVybiAtMTsKLQotICBpZiAodGltZXN0YW1wMSA+IHRpbWVzdGFtcDIpCi0gICAgcmV0dXJuIDE7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIGNhbGxlZCB3aXRoIFNUUkVBTV9MT0NLICovCi1zdGF0aWMgdm9pZAotZ3N0X2NvbGxlY3RfcGFkc19oYW5kbGVfcG9zaXRpb25fdXBkYXRlIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0Q29sbGVjdERhdGEgKiBkYXRhLCBHc3RDbG9ja1RpbWUgbmV3X3BvcykKLXsKLSAgZ2ludCBjbXBfcmVzOwotCi0gIC8qIElmIG9sZGVzdCB0aW1lIGlzIG5vdCBrbm93biwgb3IgY3VycmVudCBwYWQgZ290IG5ld3NlZ21lbnQ7Ci0gICAqIHJlY2FsY3VsYXRlIHRoZSBzdGF0ZSAqLwotICBpZiAoIXBhZHMtPnByaXYtPmVhcmxpZXN0X2RhdGEgfHwgcGFkcy0+cHJpdi0+ZWFybGllc3RfZGF0YSA9PSBkYXRhKSB7Ci0gICAgZ3N0X2NvbGxlY3RfcGFkc19yZWNhbGN1bGF0ZV9mdWxsIChwYWRzKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLQotICAvKiBDaGVjayBpZiB0aGUgd2FpdGluZyBzdGF0ZSBvZiB0aGUgcGFkIHNob3VsZCBjaGFuZ2UuICovCi0gIGNtcF9yZXMgPQotICAgICAgcGFkcy0+cHJpdi0+Y29tcGFyZV9mdW5jIChwYWRzLCBkYXRhLCBuZXdfcG9zLAotICAgICAgcGFkcy0+cHJpdi0+ZWFybGllc3RfZGF0YSwgcGFkcy0+cHJpdi0+ZWFybGllc3RfdGltZSwKLSAgICAgIHBhZHMtPnByaXYtPmNvbXBhcmVfdXNlcl9kYXRhKTsKLQotICBpZiAoY21wX3JlcyA+IDApCi0gICAgLyogU3RvcCB3YWl0aW5nICovCi0gICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfd2FpdGluZyAocGFkcywgZGF0YSwgRkFMU0UpOwotCi1leGl0OgotICByZXR1cm47Ci0KLX0KLQotc3RhdGljIEdzdENsb2NrVGltZQotZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3RpbWUgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgIEdzdENsb2NrVGltZSB0aW1lKQotewotICBHc3RDbG9ja1RpbWUgb3RpbWUgPSB0aW1lOwotICBHc3RCdWZmZXIgKmluLCAqb3V0ID0gTlVMTDsKLQotICBpZiAocGFkcy0+cHJpdi0+Y2xpcF9mdW5jKSB7Ci0gICAgaW4gPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICBHU1RfQlVGRkVSX1BUUyAoaW4pID0gdGltZTsKLSAgICBHU1RfQlVGRkVSX0RUUyAoaW4pID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBwYWRzLT5wcml2LT5jbGlwX2Z1bmMgKHBhZHMsIGRhdGEsIGluLCAmb3V0LCBwYWRzLT5wcml2LT5jbGlwX3VzZXJfZGF0YSk7Ci0gICAgaWYgKG91dCkgewotICAgICAgb3RpbWUgPSBHU1RfQlVGRkVSX1BUUyAob3V0KTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIEZJWE1FIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFoZWFkIG9yIGFmdGVyIHNlZ21lbnQsCi0gICAgICAgKiBsZXQncyBhc3N1bWUgYWZ0ZXIgc2VnbWVudCBhbmQgdXNlIHNvbWUgbGFyZ2UgdGltZSAuLi4gKi8KLSAgICAgIG90aW1lID0gR19NQVhJTlQ2NCAvIDI7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIG90aW1lOwotfQotCi0vKioKLSAqIGdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdDoKLSAqIEBwYWRzOiB0aGUgY29sbGVjdHBhZHMgdG8gdXNlCi0gKiBAZGF0YTogY29sbGVjdCBkYXRhIG9mIGNvcnJlc3BvbmRpbmcgcGFkCi0gKiBAZXZlbnQ6IGV2ZW50IGJlaW5nIHByb2Nlc3NlZAotICogQGRpc2NhcmQ6IHByb2Nlc3MgYnV0IGRvIG5vdCBzZW5kIGV2ZW50IGRvd25zdHJlYW0KLSAqCi0gKiBEZWZhdWx0ICNHc3RDb2xsZWN0UGFkcyBldmVudCBoYW5kbGluZyB0aGF0IGVsZW1lbnRzIHNob3VsZCBhbHdheXMKLSAqIGNoYWluIHVwIHRvIHRvIGVuc3VyZSBwcm9wZXIgb3BlcmF0aW9uLiAgRWxlbWVudCBtaWdodCBob3dldmVyIGluZGljYXRlCi0gKiBldmVudCBzaG91bGQgbm90IGJlIGZvcndhcmRlZCBkb3duc3RyZWFtLgotICovCi1nYm9vbGVhbgotZ3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogZGF0YSwKLSAgICBHc3RFdmVudCAqIGV2ZW50LCBnYm9vbGVhbiBkaXNjYXJkKQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHc3RDb2xsZWN0UGFkc0J1ZmZlckZ1bmN0aW9uIGJ1ZmZlcl9mdW5jOwotICBHc3RPYmplY3QgKnBhcmVudDsKLSAgR3N0UGFkICpwYWQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWRzKTsKLSAgYnVmZmVyX2Z1bmMgPSBwYWRzLT5wcml2LT5idWZmZXJfZnVuYzsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotCi0gIHBhZCA9IGRhdGEtPnBhZDsKLSAgcGFyZW50ID0gR1NUX09CSkVDVF9QQVJFTlQgKHBhZCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgewotICAgICAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZwYWRzLT5wcml2LT5zZWVraW5nKSkgewotICAgICAgICAvKiBkcm9wIGFsbCBidXQgdGhlIGZpcnN0IEZMVVNIX1NUQVJUcyB3aGVuIHNlZWtpbmcgKi8KLSAgICAgICAgaWYgKCFnX2F0b21pY19pbnRfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZwYWRzLT4KLSAgICAgICAgICAgICAgICBwcml2LT5wZW5kaW5nX2ZsdXNoX3N0YXJ0LCBUUlVFLCBGQUxTRSkpCi0gICAgICAgICAgZ290byBlYXQ7Ci0KLSAgICAgICAgLyogdW5ibG9jayBjb2xsZWN0IHBhZHMgKi8KLSAgICAgICAgZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgICBldmVudCA9IE5VTEw7Ci0KLSAgICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSyAocGFkcyk7Ci0gICAgICAgIC8qIFN0YXJ0IGZsdXNoaW5nLiBXZSBuZXZlciBjYWxsIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nIChGQUxTRSksIHdlCi0gICAgICAgICAqIGluc3RlYWQgd2FpdCB1bnRpbCBlYWNoIHBhZCBnZXRzIGl0cyBGTFVTSF9TVE9QIGFuZCBsZXQgdGhhdCByZXNldCB0aGUgcGFkIHRvCi0gICAgICAgICAqIG5vbi1mbHVzaGluZyAod2hpY2ggaGFwcGVucyBpbiBnc3RfY29sbGVjdF9wYWRzX2V2ZW50X2RlZmF1bHQpLgotICAgICAgICAgKi8KLSAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmcgKHBhZHMsIFRSVUUpOwotCi0gICAgICAgIGlmIChwYWRzLT5wcml2LT5mbHVzaF9mdW5jKQotICAgICAgICAgIHBhZHMtPnByaXYtPmZsdXNoX2Z1bmMgKHBhZHMsIHBhZHMtPnByaXYtPmZsdXNoX3VzZXJfZGF0YSk7Ci0KLSAgICAgICAgZ19hdG9taWNfaW50X3NldCAoJnBhZHMtPnByaXYtPnBlbmRpbmdfZmx1c2hfc3RvcCwgVFJVRSk7Ci0gICAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSyAocGFkcyk7Ci0KLSAgICAgICAgZ290byBlYXQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBmb3J3YXJkIGV2ZW50IHRvIHVuYmxvY2sgY2hlY2tfY29sbGVjdGVkICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImZvcndhcmRpbmcgZmx1c2ggc3RhcnQiKTsKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgICBldmVudCA9IE5VTEw7Ci0KLSAgICAgICAgLyogbm93IHVuYmxvY2sgdGhlIGNoYWluIGZ1bmN0aW9uLgotICAgICAgICAgKiBubyBjb25kIHBlciBwYWQsIHNvIHRoZXkgYWxsIHVuYmxvY2ssCi0gICAgICAgICAqIG5vbi1mbHVzaGluZyBibG9jayBhZ2FpbiAqLwotICAgICAgICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLIChwYWRzKTsKLSAgICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9TRVQgKGRhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRkxVU0hJTkcpOwotICAgICAgICBnc3RfY29sbGVjdF9wYWRzX2NsZWFyIChwYWRzLCBkYXRhKTsKLQotICAgICAgICAvKiBjYXRlciBmb3IgcG9zc2libGUgZGVmYXVsdCBtdXhpbmcgZnVuY3Rpb25hbGl0eSAqLwotICAgICAgICBpZiAoYnVmZmVyX2Z1bmMpIHsKLSAgICAgICAgICAvKiByZXN0b3JlIHRvIGluaXRpYWwgc3RhdGUgKi8KLSAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3NldF93YWl0aW5nIChwYWRzLCBkYXRhLCBUUlVFKTsKLSAgICAgICAgICAvKiBpZiB0aGUgY3VycmVudCBwYWQgaXMgYWZmZWN0ZWQsIHJlc2V0IHN0YXRlLCByZWNhbGN1bGF0ZSBsYXRlciAqLwotICAgICAgICAgIGlmIChwYWRzLT5wcml2LT5lYXJsaWVzdF9kYXRhID09IGRhdGEpIHsKLSAgICAgICAgICAgIHVucmVmX2RhdGEgKGRhdGEpOwotICAgICAgICAgICAgcGFkcy0+cHJpdi0+ZWFybGllc3RfZGF0YSA9IE5VTEw7Ci0gICAgICAgICAgICBwYWRzLT5wcml2LT5lYXJsaWVzdF90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9VTkxPQ0sgKHBhZHMpOwotCi0gICAgICAgIGdvdG8gZWF0OwotICAgICAgfQotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgIHsKLSAgICAgIC8qIGZsdXNoIHRoZSAxIGJ1ZmZlciBxdWV1ZSAqLwotICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSyAocGFkcyk7Ci0gICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1VOU0VUIChkYXRhLCBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0ZMVVNISU5HKTsKLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfY2xlYXIgKHBhZHMsIGRhdGEpOwotICAgICAgLyogd2UgbmVlZCBuZXcgc2VnbWVudCBpbmZvIGFmdGVyIHRoZSBmbHVzaCAqLwotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmRhdGEtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfVU5TRVQgKGRhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfTkVXX1NFR01FTlQpOwotICAgICAgLyogaWYgdGhlIHBhZCB3YXMgRU9TLCByZW1vdmUgdGhlIEVPUyBmbGFnIGFuZAotICAgICAgICogZGVjcmVtZW50IHRoZSBudW1iZXIgb2YgZW9zcGFkcyAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChkYXRhLAotICAgICAgICAgICAgICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9FT1MpKSkgewotICAgICAgICBpZiAoIUdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChkYXRhLAotICAgICAgICAgICAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfV0FJVElORykpCi0gICAgICAgICAgcGFkcy0+cHJpdi0+cXVldWVkcGFkcysrOwotICAgICAgICBpZiAoIWdfYXRvbWljX2ludF9nZXQgKCZwYWRzLT5wcml2LT5zZWVraW5nKSkgewotICAgICAgICAgIHBhZHMtPnByaXYtPmVvc3BhZHMtLTsKLSAgICAgICAgfQotICAgICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1VOU0VUIChkYXRhLCBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0VPUyk7Ci0gICAgICB9Ci0gICAgICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9VTkxPQ0sgKHBhZHMpOwotCi0gICAgICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnBhZHMtPnByaXYtPnNlZWtpbmcpKSB7Ci0gICAgICAgIGlmIChnX2F0b21pY19pbnRfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZwYWRzLT5wcml2LT5wZW5kaW5nX2ZsdXNoX3N0b3AsCi0gICAgICAgICAgICAgICAgVFJVRSwgRkFMU0UpKQotICAgICAgICAgIGdvdG8gZm9yd2FyZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGdvdG8gZWF0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ290byBmb3J3YXJkOwotICAgICAgfQotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgewotICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSyAocGFkcyk7Ci0gICAgICAvKiBpZiB0aGUgcGFkIHdhcyBub3QgRU9TLCBtYWtlIGl0IEVPUyBhbmQgc28gd2UKLSAgICAgICAqIGhhdmUgb25lIG1vcmUgZW9zcGFkICovCi0gICAgICBpZiAoR19MSUtFTFkgKCFHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0lTX1NFVCAoZGF0YSwKLSAgICAgICAgICAgICAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRU9TKSkpIHsKLSAgICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9TRVQgKGRhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRU9TKTsKLSAgICAgICAgaWYgKCFHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0lTX1NFVCAoZGF0YSwKLSAgICAgICAgICAgICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1dBSVRJTkcpKQotICAgICAgICAgIHBhZHMtPnByaXYtPnF1ZXVlZHBhZHMtLTsKLSAgICAgICAgcGFkcy0+cHJpdi0+ZW9zcGFkcysrOwotICAgICAgfQotICAgICAgLyogY2hlY2sgaWYgd2UgbmVlZCBjb2xsZWN0aW5nIGFueXRoaW5nLCB3ZSBpZ25vcmUgdGhlIHJlc3VsdC4gKi8KLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfY2hlY2tfY29sbGVjdGVkIChwYWRzKTsKLSAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSyAocGFkcyk7Ci0KLSAgICAgIGdvdG8gZWF0OwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgIHsKLSAgICAgIEdzdFNlZ21lbnQgc2VnOwotCi0gICAgICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLIChwYWRzKTsKLQotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWcpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkYXRhLT5wYWQsICJnb3Qgc2VnbWVudCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzZWcpOwotCi0gICAgICAvKiBkZWZhdWx0IGNvbGxlY3Rpb24gY2FuIG5vdCBoYW5kbGUgb3RoZXIgc2VnbWVudCBmb3JtYXRzIHRoYW4gdGltZSAqLwotICAgICAgaWYgKGJ1ZmZlcl9mdW5jICYmIHNlZy5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFkcywgIkdzdENvbGxlY3RQYWRzIGRlZmF1bHQgY29sbGVjdGluZyAiCi0gICAgICAgICAgICAiY2FuIG9ubHkgaGFuZGxlIHRpbWUgc2VnbWVudHMuIE5vbiB0aW1lIHNlZ21lbnQgaWdub3JlZC4iKTsKLSAgICAgICAgZ290byBuZXdzZWdtZW50X2RvbmU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIG5lZWQgdG8gdXBkYXRlIHNlZ21lbnQgZmlyc3QgKi8KLSAgICAgIGRhdGEtPnNlZ21lbnQgPSBzZWc7Ci0gICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX1NFVCAoZGF0YSwgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9ORVdfU0VHTUVOVCk7Ci0KLSAgICAgIC8qIG5vdyB3ZSBjYW4gdXNlIGZvciBlLmcuIHJ1bm5pbmcgdGltZSAqLwotICAgICAgc2VnLnBvc2l0aW9uID0KLSAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX2NsaXBfdGltZSAocGFkcywgZGF0YSwgc2VnLnN0YXJ0ICsgc2VnLm9mZnNldCk7Ci0gICAgICAvKiB1cGRhdGUgYWdhaW4gKi8KLSAgICAgIGRhdGEtPnNlZ21lbnQgPSBzZWc7Ci0KLSAgICAgIC8qIGRlZmF1bHQgbXV4aW5nIGZ1bmN0aW9uYWxpdHkgKi8KLSAgICAgIGlmICghYnVmZmVyX2Z1bmMpCi0gICAgICAgIGdvdG8gbmV3c2VnbWVudF9kb25lOwotCi0gICAgICBnc3RfY29sbGVjdF9wYWRzX2hhbmRsZV9wb3NpdGlvbl91cGRhdGUgKHBhZHMsIGRhdGEsIHNlZy5wb3NpdGlvbik7Ci0KLSAgICBuZXdzZWdtZW50X2RvbmU6Ci0gICAgICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9VTkxPQ0sgKHBhZHMpOwotICAgICAgLyogd2UgbXVzdCBub3QgZm9yd2FyZCB0aGlzIGV2ZW50IHNpbmNlIG11bHRpcGxlIHNlZ21lbnRzIHdpbGwgYmUKLSAgICAgICAqIGFjY3VtdWxhdGVkIGFuZCB0aGlzIGlzIGNlcnRhaW5seSBub3Qgd2hhdCB3ZSB3YW50LiAqLwotICAgICAgZ290byBlYXQ7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0dBUDoKLSAgICB7Ci0gICAgICBHc3RDbG9ja1RpbWUgc3RhcnQsIGR1cmF0aW9uOwotCi0gICAgICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLIChwYWRzKTsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2dhcCAoZXZlbnQsICZzdGFydCwgJmR1cmF0aW9uKTsKLSAgICAgIC8qIEZJWE1FLCBoYW5kbGUgcmV2ZXJzZSBwbGF5YmFjayBjYXNlICovCi0gICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkKLSAgICAgICAgc3RhcnQgKz0gZHVyYXRpb247Ci0gICAgICAvKiB3ZSBkbyBub3QgZXhwZWN0IGFub3RoZXIgYnVmZmVyIHVudGlsIGFmdGVyIGdhcCwKLSAgICAgICAqIHNvIHRoYXQgaXMgb3VyIHBvc2l0aW9uIG5vdyAqLwotICAgICAgZGF0YS0+c2VnbWVudC5wb3NpdGlvbiA9IGdzdF9jb2xsZWN0X3BhZHNfY2xpcF90aW1lIChwYWRzLCBkYXRhLCBzdGFydCk7Ci0KLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfaGFuZGxlX3Bvc2l0aW9uX3VwZGF0ZSAocGFkcywgZGF0YSwKLSAgICAgICAgICBkYXRhLT5zZWdtZW50LnBvc2l0aW9uKTsKLQotICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLIChwYWRzKTsKLSAgICAgIGdvdG8gZWF0OwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6Ci0gICAgICAvKiBkcm9wIHN0cmVhbSBzdGFydCBldmVudHMsIGVsZW1lbnQgbXVzdCBjcmVhdGUgaXRzIG93biBzdGFydCBldmVudCwKLSAgICAgICAqIHdlIGNhbid0IGp1c3QgZm9yd2FyZCB0aGUgZmlyc3QgcmFuZG9tIHN0cmVhbSBzdGFydCBldmVudCB3ZSBnZXQgKi8KLSAgICAgIGdvdG8gZWF0OwotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgICBnb3RvIGVhdDsKLSAgICBkZWZhdWx0OgotICAgICAgLyogZm9yd2FyZCBvdGhlciBldmVudHMgKi8KLSAgICAgIGdvdG8gZm9yd2FyZDsKLSAgfQotCi1lYXQ6Ci0gIGlmIChldmVudCkKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgcmV0dXJuIHJlczsKLQotZm9yd2FyZDoKLSAgaWYgKGRpc2NhcmQpCi0gICAgZ290byBlYXQ7Ci0gIGVsc2UKLSAgICByZXR1cm4gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdib29sZWFuIHJlc3VsdDsKLX0gRXZlbnREYXRhOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWV2ZW50X2ZvcndhcmRfZnVuYyAoR3N0UGFkICogcGFkLCBFdmVudERhdGEgKiBkYXRhKQotewotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBHc3RQYWQgKnBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpOwotCi0gIGlmIChwZWVyKSB7Ci0gICAgcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChwZWVyLCBnc3RfZXZlbnRfcmVmIChkYXRhLT5ldmVudCkpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotICB9Ci0KLSAgZGF0YS0+cmVzdWx0ICY9IHJldDsKLSAgLyogQWx3YXlzIHNlbmQgdG8gYWxsIHBhZHMgKi8KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcndhcmRfZXZlbnRfdG9fYWxsX3NpbmtwYWRzIChHc3RQYWQgKiBzcmNwYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEV2ZW50RGF0YSBkYXRhOwotCi0gIGRhdGEuZXZlbnQgPSBldmVudDsKLSAgZGF0YS5yZXN1bHQgPSBUUlVFOwotCi0gIGdzdF9wYWRfZm9yd2FyZCAoc3JjcGFkLCAoR3N0UGFkRm9yd2FyZEZ1bmN0aW9uKSBldmVudF9mb3J3YXJkX2Z1bmMsICZkYXRhKTsKLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICByZXR1cm4gZGF0YS5yZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X2NvbGxlY3RfcGFkc19zcmNfZXZlbnRfZGVmYXVsdDoKLSAqIEBwYWRzOiB0aGUgI0dzdENvbGxlY3RQYWRzIHRvIHVzZQotICogQHBhZDogc3JjICNHc3RQYWQgdGhhdCByZWNlaXZlZCB0aGUgZXZlbnQKLSAqIEBldmVudDogZXZlbnQgYmVpbmcgcHJvY2Vzc2VkCi0gKgotICogRGVmYXVsdCAjR3N0Q29sbGVjdFBhZHMgZXZlbnQgaGFuZGxpbmcgZm9yIHRoZSBzcmMgcGFkIG9mIGVsZW1lbnRzLgotICogRWxlbWVudHMgY2FuIGNoYWluIHVwIHRvIHRoaXMgdG8gbGV0IGZsdXNoaW5nIHNlZWsgZXZlbnQgaGFuZGxpbmcKLSAqIGJlIGRvbmUgYnkgI0dzdENvbGxlY3RQYWRzLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotZ2Jvb2xlYW4KLWdzdF9jb2xsZWN0X3BhZHNfc3JjX2V2ZW50X2RlZmF1bHQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0UGFkICogcGFkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIHBhcmVudCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6ewotICAgICAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotCi0gICAgICBwYWRzLT5wcml2LT5lb3NwYWRzID0gMDsKLQotICAgICAgR1NUX0lORk9fT0JKRUNUIChwYWRzLCAic3RhcnRpbmcgc2VlayIpOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsIE5VTEwsIE5VTEwsICZmbGFncywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZiAoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIKSB7Ci0gICAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZwYWRzLT5wcml2LT5zZWVraW5nLCBUUlVFKTsKLSAgICAgICAgZ19hdG9taWNfaW50X3NldCAoJnBhZHMtPnByaXYtPnBlbmRpbmdfZmx1c2hfc3RhcnQsIFRSVUUpOwotICAgICAgICAvKiBmb3J3YXJkIHRoZSBzZWVrIHVwc3RyZWFtICovCi0gICAgICAgIHJlcyA9IGZvcndhcmRfZXZlbnRfdG9fYWxsX3NpbmtwYWRzIChwYWQsIGV2ZW50KTsKLSAgICAgICAgZXZlbnQgPSBOVUxMOwotICAgICAgICBpZiAoIXJlcykgewotICAgICAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZwYWRzLT5wcml2LT5zZWVraW5nLCBGQUxTRSk7Ci0gICAgICAgICAgZ19hdG9taWNfaW50X3NldCAoJnBhZHMtPnByaXYtPnBlbmRpbmdfZmx1c2hfc3RhcnQsIEZBTFNFKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhZHMsICJzZWVrIGRvbmUsIHJlc3VsdDogJWQiLCByZXMpOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGV2ZW50KQotICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdF9pbnRlcm5hbCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdENvbGxlY3REYXRhICogZGF0YSwgR3N0RXZlbnQgKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICByZXR1cm4gZ3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0IChwYWRzLCBkYXRhLCBldmVudCwgRkFMU0UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb2xsZWN0X3BhZHNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRSwgbmVlZF91bmxvY2sgPSBGQUxTRTsKLSAgR3N0Q29sbGVjdERhdGEgKmRhdGE7Ci0gIEdzdENvbGxlY3RQYWRzICpwYWRzOwotICBHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb24gZXZlbnRfZnVuYzsKLSAgZ3BvaW50ZXIgZXZlbnRfdXNlcl9kYXRhOwotCi0gIC8qIHNvbWUgbWFnaWMgdG8gZ2V0IHRoZSBtYW5hZ2luZyBjb2xsZWN0X3BhZHMgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBkYXRhID0gKEdzdENvbGxlY3REYXRhICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgaWYgKEdfVU5MSUtFTFkgKGRhdGEgPT0gTlVMTCkpCi0gICAgZ290byBwYWRfcmVtb3ZlZDsKLSAgcmVmX2RhdGEgKGRhdGEpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXMgPSBGQUxTRTsKLQotICBwYWRzID0gZGF0YS0+Y29sbGVjdDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkYXRhLT5wYWQsICJHb3QgJXMgZXZlbnQgb24gc2luayBwYWQiLAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZHMpOwotICBldmVudF9mdW5jID0gcGFkcy0+cHJpdi0+ZXZlbnRfZnVuYzsKLSAgZXZlbnRfdXNlcl9kYXRhID0gcGFkcy0+cHJpdi0+ZXZlbnRfdXNlcl9kYXRhOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkcyk7Ci0KLSAgaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpIHsKLSAgICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLIChwYWRzKTsKLSAgICBuZWVkX3VubG9jayA9IFRSVUU7Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKGV2ZW50X2Z1bmMpKSB7Ci0gICAgcmVzID0gZXZlbnRfZnVuYyAocGFkcywgZGF0YSwgZXZlbnQsIGV2ZW50X3VzZXJfZGF0YSk7Ci0gIH0KLQotICBpZiAobmVlZF91bmxvY2spCi0gICAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLIChwYWRzKTsKLQotICB1bnJlZl9kYXRhIChkYXRhKTsKLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLXBhZF9yZW1vdmVkOgotICB7Ci0gICAgR1NUX0RFQlVHICgiJXMgZ290IHJlbW92ZWQgZnJvbSBjb2xsZWN0cGFkcyIsIEdTVF9PQkpFQ1RfTkFNRSAocGFkKSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X2NvbGxlY3RfcGFkc19xdWVyeV9kZWZhdWx0OgotICogQHBhZHM6IHRoZSBjb2xsZWN0cGFkcyB0byB1c2UKLSAqIEBkYXRhOiBjb2xsZWN0IGRhdGEgb2YgY29ycmVzcG9uZGluZyBwYWQKLSAqIEBxdWVyeTogcXVlcnkgYmVpbmcgcHJvY2Vzc2VkCi0gKiBAZGlzY2FyZDogcHJvY2VzcyBidXQgZG8gbm90IHNlbmQgZXZlbnQgZG93bnN0cmVhbQotICoKLSAqIERlZmF1bHQgI0dzdENvbGxlY3RQYWRzIHF1ZXJ5IGhhbmRsaW5nIHRoYXQgZWxlbWVudHMgc2hvdWxkIGFsd2F5cwotICogY2hhaW4gdXAgdG8gdG8gZW5zdXJlIHByb3BlciBvcGVyYXRpb24uICBFbGVtZW50IG1pZ2h0IGhvd2V2ZXIgaW5kaWNhdGUKLSAqIHF1ZXJ5IHNob3VsZCBub3QgYmUgZm9yd2FyZGVkIGRvd25zdHJlYW0uCi0gKi8KLWdib29sZWFuCi1nc3RfY29sbGVjdF9wYWRzX3F1ZXJ5X2RlZmF1bHQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgIEdzdFF1ZXJ5ICogcXVlcnksIGdib29sZWFuIGRpc2NhcmQpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotICBHc3RQYWQgKnBhZDsKLQotICBwYWQgPSBkYXRhLT5wYWQ7Ci0gIHBhcmVudCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1NFRUtJTkc6Ci0gICAgewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICAgICAgLyogZG9uJ3QgcGFzcyBpdCBhbG9uZyBhcyBzb21lIChmaWxlKXNpbmsgbWlnaHQgY2xhaW0gaXQgZG9lcwotICAgICAgICogd2hlcmVhcyB3aXRoIGEgY29sbGVjdHBhZHMgaW4gYmV0d2VlbiB0aGF0IHdpbGwgbm90IGxpa2VseSB3b3JrICovCi0gICAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgZm9ybWF0LCBGQUxTRSwgMCwgLTEpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGRpc2NhcmQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmICghZGlzY2FyZCkKLSAgICByZXR1cm4gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICBlbHNlCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY29sbGVjdF9wYWRzX3F1ZXJ5X2RlZmF1bHRfaW50ZXJuYWwgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0RGF0YSAqIGRhdGEsIEdzdFF1ZXJ5ICogcXVlcnksIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcmV0dXJuIGdzdF9jb2xsZWN0X3BhZHNfcXVlcnlfZGVmYXVsdCAocGFkcywgZGF0YSwgcXVlcnksIEZBTFNFKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY29sbGVjdF9wYWRzX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0UsIG5lZWRfdW5sb2NrID0gRkFMU0U7Ci0gIEdzdENvbGxlY3REYXRhICpkYXRhOwotICBHc3RDb2xsZWN0UGFkcyAqcGFkczsKLSAgR3N0Q29sbGVjdFBhZHNRdWVyeUZ1bmN0aW9uIHF1ZXJ5X2Z1bmM7Ci0gIGdwb2ludGVyIHF1ZXJ5X3VzZXJfZGF0YTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJHb3QgJXMgcXVlcnkgb24gc2luayBwYWQiLAotICAgICAgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpKTsKLQotICAvKiBzb21lIG1hZ2ljIHRvIGdldCB0aGUgbWFuYWdpbmcgY29sbGVjdF9wYWRzICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgZGF0YSA9IChHc3RDb2xsZWN0RGF0YSAqKSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIGlmIChHX1VOTElLRUxZIChkYXRhID09IE5VTEwpKQotICAgIGdvdG8gcGFkX3JlbW92ZWQ7Ci0gIHJlZl9kYXRhIChkYXRhKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0KLSAgcGFkcyA9IGRhdGEtPmNvbGxlY3Q7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWRzKTsKLSAgcXVlcnlfZnVuYyA9IHBhZHMtPnByaXYtPnF1ZXJ5X2Z1bmM7Ci0gIHF1ZXJ5X3VzZXJfZGF0YSA9IHBhZHMtPnByaXYtPnF1ZXJ5X3VzZXJfZGF0YTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZHMpOwotCi0gIGlmIChHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCAocXVlcnkpKSB7Ci0gICAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSyAocGFkcyk7Ci0gICAgbmVlZF91bmxvY2sgPSBUUlVFOwotICB9Ci0KLSAgaWYgKEdfTElLRUxZIChxdWVyeV9mdW5jKSkgewotICAgIHJlcyA9IHF1ZXJ5X2Z1bmMgKHBhZHMsIGRhdGEsIHF1ZXJ5LCBxdWVyeV91c2VyX2RhdGEpOwotICB9Ci0KLSAgaWYgKG5lZWRfdW5sb2NrKQotICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSyAocGFkcyk7Ci0KLSAgdW5yZWZfZGF0YSAoZGF0YSk7Ci0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1wYWRfcmVtb3ZlZDoKLSAgewotICAgIEdTVF9ERUJVRyAoIiVzIGdvdCByZW1vdmVkIGZyb20gY29sbGVjdHBhZHMiLCBHU1RfT0JKRUNUX05BTUUgKHBhZCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0KLS8qIEZvciBlYWNoIGJ1ZmZlciB3ZSByZWNlaXZlIHdlIGNoZWNrIGlmIG91ciBjb2xsZWN0ZWQgY29uZGl0aW9uIGlzIHJlYWNoZWQKLSAqIGFuZCBpZiBzbyB3ZSBjYWxsIHRoZSBjb2xsZWN0ZWQgZnVuY3Rpb24uIFdoZW4gdGhpcyBpcyBkb25lIHdlIGNoZWNrIGlmCi0gKiBkYXRhIGhhcyBiZWVuIHVucXVldWVkLiBJZiBkYXRhIGlzIHN0aWxsIHF1ZXVlZCB3ZSB3YWl0IGhvbGRpbmcgdGhlIHN0cmVhbQotICogbG9jayB0byBtYWtlIHN1cmUgbm8gRU9TIGV2ZW50IGNhbiBoYXBwZW4gd2hpbGUgd2UgYXJlIHJlYWR5IHRvIGJlCi0gKiBjb2xsZWN0ZWQgCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfY29sbGVjdF9wYWRzX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RDb2xsZWN0RGF0YSAqZGF0YTsKLSAgR3N0Q29sbGVjdFBhZHMgKnBhZHM7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXIgKipidWZmZXJfcDsKLSAgZ3VpbnQzMiBjb29raWU7Ci0KLSAgR1NUX0RFQlVHICgiR290IGJ1ZmZlciBmb3IgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLQotICAvKiBzb21lIG1hZ2ljIHRvIGdldCB0aGUgbWFuYWdpbmcgY29sbGVjdF9wYWRzICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgZGF0YSA9IChHc3RDb2xsZWN0RGF0YSAqKSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIGlmIChHX1VOTElLRUxZIChkYXRhID09IE5VTEwpKQotICAgIGdvdG8gbm9fZGF0YTsKLSAgcmVmX2RhdGEgKGRhdGEpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICBwYWRzID0gZGF0YS0+Y29sbGVjdDsKLQotICBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLIChwYWRzKTsKLSAgLyogaWYgbm90IHN0YXJ0ZWQsIGJhaWwgb3V0ICovCi0gIGlmIChHX1VOTElLRUxZICghcGFkcy0+cHJpdi0+c3RhcnRlZCkpCi0gICAgZ290byBub3Rfc3RhcnRlZDsKLSAgLyogY2hlY2sgaWYgdGhpcyBwYWQgaXMgZmx1c2hpbmcgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChkYXRhLAotICAgICAgICAgICAgICBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0ZMVVNISU5HKSkpCi0gICAgZ290byBmbHVzaGluZzsKLSAgLyogcGFkIHdhcyBFT1MsIHdlIGNhbiByZWZ1c2UgdGhpcyBkYXRhICovCi0gIGlmIChHX1VOTElLRUxZIChHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0lTX1NFVCAoZGF0YSwKLSAgICAgICAgICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9FT1MpKSkKLSAgICBnb3RvIGVvczsKLQotICAvKiBzZWUgaWYgd2UgbmVlZCB0byBjbGlwICovCi0gIGlmIChwYWRzLT5wcml2LT5jbGlwX2Z1bmMpIHsKLSAgICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gICAgcmV0ID0KLSAgICAgICAgcGFkcy0+cHJpdi0+Y2xpcF9mdW5jIChwYWRzLCBkYXRhLCBidWZmZXIsICZvdXRidWYsCi0gICAgICAgIHBhZHMtPnByaXYtPmNsaXBfdXNlcl9kYXRhKTsKLSAgICBidWZmZXIgPSBvdXRidWY7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAob3V0YnVmID09IE5VTEwpKQotICAgICAgZ290byBjbGlwcGVkOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJldCA9PSBHU1RfRkxPV19FT1MpKQotICAgICAgZ290byBlb3M7Ci0gICAgZWxzZSBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWRzLCAiUXVldWluZyBidWZmZXIgJXAgZm9yIHBhZCAlczolcyIsIGJ1ZmZlciwKLSAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgLyogT25lIG1vcmUgcGFkIGhhcyBkYXRhIHF1ZXVlZCAqLwotICBpZiAoR1NUX0NPTExFQ1RfUEFEU19TVEFURV9JU19TRVQgKGRhdGEsIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfV0FJVElORykpCi0gICAgcGFkcy0+cHJpdi0+cXVldWVkcGFkcysrOwotICBidWZmZXJfcCA9ICZkYXRhLT5idWZmZXI7Ci0gIGdzdF9idWZmZXJfcmVwbGFjZSAoYnVmZmVyX3AsIGJ1ZmZlcik7Ci0KLSAgLyogdXBkYXRlIHNlZ21lbnQgbGFzdCBwb3NpdGlvbiBpZiBpbiBUSU1FICovCi0gIGlmIChHX0xJS0VMWSAoZGF0YS0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSkgewotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0KLSAgICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX0RUU19PUl9QVFMgKGJ1ZmZlcik7Ci0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCkpCi0gICAgICBkYXRhLT5zZWdtZW50LnBvc2l0aW9uID0gdGltZXN0YW1wOwotICB9Ci0KLSAgLyogV2hpbGUgd2UgaGF2ZSBkYXRhIHF1ZXVlZCBvbiB0aGlzIHBhZCB0cnkgdG8gY29sbGVjdCBzdHVmZiAqLwotICBkbyB7Ci0gICAgLyogQ2hlY2sgaWYgb3VyIGNvbGxlY3RlZCBjb25kaXRpb24gaXMgbWF0Y2hlZCBhbmQgY2FsbCB0aGUgY29sbGVjdGVkCi0gICAgICogZnVuY3Rpb24gaWYgaXQgaXMgKi8KLSAgICByZXQgPSBnc3RfY29sbGVjdF9wYWRzX2NoZWNrX2NvbGxlY3RlZCAocGFkcyk7Ci0gICAgLyogd2hlbiBhbiBlcnJvciBvY2N1cnMsIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgYmFjayB0byB0aGUgY2FsbGVyIEFTQVAKLSAgICAgKiB3aXRob3V0IGhhdmluZyB0byBibG9jayBpZiB0aGUgYnVmZmVyIHdhcyBub3QgcG9wcGVkICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgLyogZGF0YSB3YXMgY29uc3VtZWQsIHdlIGNhbiBleGl0IGFuZCBhY2NlcHQgbmV3IGRhdGEgKi8KLSAgICBpZiAoZGF0YS0+YnVmZmVyID09IE5VTEwpCi0gICAgICBicmVhazsKLQotICAgIC8qIEhhdmluZyB0aGUgX0lOSVQgaGVyZSBtZWFucyB3ZSBkb24ndCBjYXJlIGFib3V0IGFueSBicm9hZGNhc3QgdXAgdG8gaGVyZQotICAgICAqIChtb3N0IG9mIHdoaWNoIG9jY3VyIHdpdGggU1RSRUFNX0xPQ0sgaGVsZCwgc28gY291bGQgbm90IGhhdmUgaGFwcGVuZWQKLSAgICAgKiBhbnl3YXkpLiAgV2UgZG8gY2FyZSBhYm91dCBlLmcuIGEgcmVtb3ZlIGluaXRpYXRlZCBicm9hZGNhc3QgYXMgb2YgdGhpcwotICAgICAqIHBvaW50LiAgUHV0dGluZyBpdCBoZXJlIGFsc28gbWFrZXMgdGhpcyB0aHJlYWQgaWdub3JlcyBhbnkgZXZ0IGl0IHJhaXNlZAotICAgICAqIGl0c2VsZiAoYXMgaXMgYSB1c3VhbCBXQUlUIHNlbWFudGljKS4KLSAgICAgKi8KLSAgICBHU1RfQ09MTEVDVF9QQURTX0VWVF9JTklUIChjb29raWUpOwotCi0gICAgLyogcGFkIGNvdWxkIGJlIHJlbW92ZWQgYW5kIHJlLWFkZGVkICovCi0gICAgdW5yZWZfZGF0YSAoZGF0YSk7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICAgIGlmIChHX1VOTElLRUxZICgoZGF0YSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKSkgPT0gTlVMTCkpCi0gICAgICBnb3RvIHBhZF9yZW1vdmVkOwotICAgIHJlZl9kYXRhIChkYXRhKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZHMsICJQYWQgJXM6JXMgaGFzIGEgYnVmZmVyIHF1ZXVlZCwgd2FpdGluZyIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgICAvKiB3YWl0IHRvIGJlIGNvbGxlY3RlZCwgdGhpcyBtdXN0IGhhcHBlbiBmcm9tIGFub3RoZXIgdGhyZWFkIHRyaWdnZXJlZAotICAgICAqIGJ5IHRoZSBfY2hhaW4gZnVuY3Rpb24gb2YgYW5vdGhlciBwYWQuIFdlIHJlbGVhc2UgdGhlIGxvY2sgc28gd2UKLSAgICAgKiBjYW4gZ2V0IHN0b3BwZWQgb3IgZmx1c2hlZCBhcyB3ZWxsLiBXZSBjYW4gaG93ZXZlciBub3QgZ2V0IEVPUwotICAgICAqIGJlY2F1c2Ugd2Ugc3RpbGwgaG9sZCB0aGUgU1RSRUFNX0xPQ0suCi0gICAgICovCi0gICAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLIChwYWRzKTsKLSAgICBHU1RfQ09MTEVDVF9QQURTX0VWVF9XQUlUIChwYWRzLCBjb29raWUpOwotICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX0xPQ0sgKHBhZHMpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkcywgIlBhZCAlczolcyByZXN1bWluZyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgICAvKiBhZnRlciBhIHNpZ25hbCwgd2UgY291bGQgYmUgc3RvcHBlZCAqLwotICAgIGlmIChHX1VOTElLRUxZICghcGFkcy0+cHJpdi0+c3RhcnRlZCkpCi0gICAgICBnb3RvIG5vdF9zdGFydGVkOwotICAgIC8qIGNoZWNrIGlmIHRoaXMgcGFkIGlzIGZsdXNoaW5nICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUIChkYXRhLAotICAgICAgICAgICAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRkxVU0hJTkcpKSkKLSAgICAgIGdvdG8gZmx1c2hpbmc7Ci0gIH0KLSAgd2hpbGUgKGRhdGEtPmJ1ZmZlciAhPSBOVUxMKTsKLQotdW5sb2NrX2RvbmU6Ci0gIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSyAocGFkcyk7Ci0gIC8qIGRhdGEgaXMgZGVmaW5pdGVseSBOVUxMIGlmIHBhZF9yZW1vdmVkIGdvdG8gd2FzIHJ1bi4gKi8KLSAgaWYgKGRhdGEpCi0gICAgdW5yZWZfZGF0YSAoZGF0YSk7Ci0gIGlmIChidWZmZXIpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgcmV0dXJuIHJldDsKLQotcGFkX3JlbW92ZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoIiVzIGdvdCByZW1vdmVkIGZyb20gY29sbGVjdHBhZHMiLCBHU1RfT0JKRUNUX05BTUUgKHBhZCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgIHJldCA9IEdTVF9GTE9XX05PVF9MSU5LRUQ7Ci0gICAgZ290byB1bmxvY2tfZG9uZTsKLSAgfQotICAvKiBFUlJPUlMgKi8KLW5vX2RhdGE6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCIlcyBnb3QgcmVtb3ZlZCBmcm9tIGNvbGxlY3RwYWRzIiwgR1NUX09CSkVDVF9OQU1FIChwYWQpKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfTElOS0VEOwotICB9Ci1ub3Rfc3RhcnRlZDoKLSAgewotICAgIEdTVF9ERUJVRyAoIm5vdCBzdGFydGVkIik7Ci0gICAgZ3N0X2NvbGxlY3RfcGFkc19jbGVhciAocGFkcywgZGF0YSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgZ290byB1bmxvY2tfZG9uZTsKLSAgfQotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJwYWQgJXM6JXMgaXMgZmx1c2hpbmciLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIGdzdF9jb2xsZWN0X3BhZHNfY2xlYXIgKHBhZHMsIGRhdGEpOwotICAgIHJldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIGdvdG8gdW5sb2NrX2RvbmU7Ci0gIH0KLWVvczoKLSAgewotICAgIC8qIHdlIHNob3VsZCBub3QgcG9zdCBhbiBlcnJvciBmb3IgdGhpcywganVzdCBpbmZvcm0gdXBzdHJlYW0gdGhhdAotICAgICAqIHdlIGRvbid0IGV4cGVjdCBhbnl0aGluZyBhbnltb3JlICovCi0gICAgR1NUX0RFQlVHICgicGFkICVzOiVzIGlzIGVvcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIGdvdG8gdW5sb2NrX2RvbmU7Ci0gIH0KLWNsaXBwZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJjbGlwcGVkIGJ1ZmZlciBvbiBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgIGdvdG8gdW5sb2NrX2RvbmU7Ci0gIH0KLWVycm9yOgotICB7Ci0gICAgLyogd2UgcHJpbnQgdGhlIGVycm9yLCB0aGUgZWxlbWVudCBzaG91bGQgcG9zdCBhIHJlYXNvbmFibGUgZXJyb3IKLSAgICAgKiBtZXNzYWdlIGZvciBmYXRhbCBlcnJvcnMgKi8KLSAgICBHU1RfREVCVUcgKCJjb2xsZWN0IGZhaWxlZCwgcmVhc29uICVkICglcykiLCByZXQsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICBnc3RfY29sbGVjdF9wYWRzX2NsZWFyIChwYWRzLCBkYXRhKTsKLSAgICBnb3RvIHVubG9ja19kb25lOwotICB9Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmggYi9saWJzL2dzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNzM3ODUuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotICoKLSAqIGdzdGNvbGxlY3RwYWRzLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9DT0xMRUNUX1BBRFNfSF9fCi0jZGVmaW5lIF9fR1NUX0NPTExFQ1RfUEFEU19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0NPTExFQ1RfUEFEUyAgICAgICAgICAgIChnc3RfY29sbGVjdF9wYWRzX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMsR3N0Q29sbGVjdFBhZHMpKQotI2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMsR3N0Q29sbGVjdFBhZHNDbGFzcykpCi0jZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMsR3N0Q29sbGVjdFBhZHNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19DT0xMRUNUX1BBRFMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMpKQotI2RlZmluZSBHU1RfSVNfQ09MTEVDVF9QQURTX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9DT0xMRUNUX1BBRFMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0Q29sbGVjdERhdGEgR3N0Q29sbGVjdERhdGE7Ci10eXBlZGVmIHN0cnVjdCBfR3N0Q29sbGVjdERhdGFQcml2YXRlIEdzdENvbGxlY3REYXRhUHJpdmF0ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDb2xsZWN0UGFkcyBHc3RDb2xsZWN0UGFkczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDb2xsZWN0UGFkc1ByaXZhdGUgR3N0Q29sbGVjdFBhZHNQcml2YXRlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdENvbGxlY3RQYWRzQ2xhc3MgR3N0Q29sbGVjdFBhZHNDbGFzczsKLQotLyoqCi0gKiBHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnk6Ci0gKiBAZGF0YTogdGhlICNHc3RDb2xsZWN0RGF0YSB0aGF0IHdpbGwgYmUgZnJlZWQKLSAqCi0gKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgI0dzdENvbGxlY3REYXRhIHdpbGwgYmUgZnJlZWQuCi0gKiBJdCBpcyBwYXNzZWQgdGhlIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBhbmQgc2hvdWxkIGZyZWUgYW55IGN1c3RvbQotICogbWVtb3J5IGFuZCByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBpdC4KLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5KSAoR3N0Q29sbGVjdERhdGEgKmRhdGEpOwotCi0vKioKLSAqIEdzdENvbGxlY3RQYWRzU3RhdGVGbGFnczoKLSAqIEBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0VPUzogICAgICAgICBTZXQgaWYgY29sbGVjdGRhdGEncyBwYWQgaXMgRU9TLgotICogQEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRkxVU0hJTkc6ICAgIFNldCBpZiBjb2xsZWN0ZGF0YSdzIHBhZCBpcyBmbHVzaGluZy4KLSAqIEBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX05FV19TRUdNRU5UOiBTZXQgaWYgY29sbGVjdGRhdGEncyBwYWQgcmVjZWl2ZWQgYQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zZWdtZW50IGV2ZW50LgotICogQEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfV0FJVElORzogICAgIFNldCBpZiBjb2xsZWN0ZGF0YSdzIHBhZCBtdXN0IGJlIHdhaXRlZAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aGVuIGNvbGxlY3RpbmcuCi0gKiBAR1NUX0NPTExFQ1RfUEFEU19TVEFURV9MT0NLRUQ6ICAgICAgU2V0IGNvbGxlY3RkYXRhJ3MgcGFkIFdBSVRJTkcgc3RhdGUgbXVzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBiZSBjaGFuZ2VkLgotICogI0dzdENvbGxlY3RQYWRzU3RhdGVGbGFncyBpbmRpY2F0ZSBwcml2YXRlIHN0YXRlIG9mIGEgY29sbGVjdGRhdGEoJ3MgcGFkKS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9FT1MgPSAxIDw8IDAsCi0gIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRkxVU0hJTkcgPSAxIDw8IDEsCi0gIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfTkVXX1NFR01FTlQgPSAxIDw8IDIsCi0gIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfV0FJVElORyA9IDEgPDwgMywKLSAgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9MT0NLRUQgPSAxIDw8IDQKLX0gR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzOwotCi0vKioKLSAqIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEU6Ci0gKiBAZGF0YTogYSAjR3N0Q29sbGVjdERhdGEuCi0gKgotICogQSBmbGFncyB3b3JkIGNvbnRhaW5pbmcgI0dzdENvbGxlY3RQYWRzU3RhdGVGbGFncyBmbGFncyBzZXQKLSAqIG9uIHRoaXMgY29sbGVjdGVkIHBhZC4KLSAqLwotI2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX1NUQVRFKGRhdGEpICAgICAgICAgICAgICAgICAoKChHc3RDb2xsZWN0RGF0YSAqKSBkYXRhKS0+c3RhdGUpCi0vKioKLSAqIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfSVNfU0VUOgotICogQGRhdGE6IGEgI0dzdENvbGxlY3REYXRhLgotICogQGZsYWc6IHRoZSAjR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzIHRvIGNoZWNrLgotICoKLSAqIEdpdmVzIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBmbGFnIG9uIGEgY29sbGVjdGVkIHBhZC4KLSAqLwotI2RlZmluZSBHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0lTX1NFVChkYXRhLGZsYWcpICAgICAhIShHU1RfQ09MTEVDVF9QQURTX1NUQVRFIChkYXRhKSAmIGZsYWcpCi0vKioKLSAqIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfU0VUOgotICogQGRhdGE6IGEgI0dzdENvbGxlY3REYXRhLgotICogQGZsYWc6IHRoZSAjR3N0Q29sbGVjdFBhZHNTdGF0ZUZsYWdzIHRvIHNldC4KLSAqCi0gKiBTZXRzIGEgc3RhdGUgZmxhZyBvbiBhIGNvbGxlY3RlZCBwYWQuCi0gKi8KLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9TRVQoZGF0YSxmbGFnKSAgICAgICAgKEdTVF9DT0xMRUNUX1BBRFNfU1RBVEUgKGRhdGEpIHw9IGZsYWcpCi0vKioKLSAqIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfVU5TRVQ6Ci0gKiBAZGF0YTogYSAjR3N0Q29sbGVjdERhdGEuCi0gKiBAZmxhZzogdGhlICNHc3RDb2xsZWN0UGFkc1N0YXRlRmxhZ3MgdG8gY2xlYXIuCi0gKgotICogQ2xlYXJzIGEgc3RhdGUgZmxhZyBvbiBhIGNvbGxlY3RlZCBwYWQuCi0gKi8KLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9VTlNFVChkYXRhLGZsYWcpICAgICAgKEdTVF9DT0xMRUNUX1BBRFNfU1RBVEUgKGRhdGEpICY9IH4oZmxhZykpCi0KLS8qKgotICogR1NUX0NPTExFQ1RfUEFEU19EVFM6Ci0gKiBAZGF0YTogQSAjR3N0Q29sbGVjdERhdGEuCi0gKgotICogUmV0dXJucyB0aGUgRFRTIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIHJ1bm5pbmcgdGltZSB3aGVuIHVzaW5nCi0gKiBnc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lKCkuIFVubGlrZSB0aGUgdmFsdWUgc2F2ZWQgaW50bwotICogdGhlIGJ1ZmZlciwgdGhpcyB2YWx1ZSBpcyBvZiB0eXBlIGdpbnQ2NCBhbmQgbWF5IGJlIG5lZ2F0aXZlLiBUaGlzIGFsbG93Ci0gKiBwcm9wZXJseSBoYW5kbGluZyBzdHJlYW1zIHdpdGggZnJhbWUgcmVvcmRlcmluZyB3aGVyZSB0aGUgZmlyc3QgRFRTIG1heQotICogYmUgbmVnYXRpdmUuIElmIHRoZSBpbml0aWFsIERUUyB3YXMgbm90IHNldCwgdGhpcyB2YWx1ZSB3aWxsIGJlCi0gKiBzZXQgdG8gJUdfTUlOSU5UNjQuCi0gKgotICogU2luY2U6IDEuNgotICovCi0jZGVmaW5lIEdTVF9DT0xMRUNUX1BBRFNfRFRTKGRhdGEpICAgICAgICAgICAgICAgICAgICgoKEdzdENvbGxlY3REYXRhICopIGRhdGEpLT5BQkkuYWJpLmR0cykKLQotLyoqCi0gKiBHU1RfQ09MTEVDVF9QQURTX0RUU19JU19WQUxJRDoKLSAqIEBkYXRhOiBBICNHc3RDb2xsZWN0RGF0YS4KLSAqCi0gKiBDaGVjayBpZiBydW5uaW5nIERUUyB2YWx1ZSBzdG9yZSBpcyB2YWxpZC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19EVFNfSVNfVkFMSUQoZGF0YSkgICAgICAgICAgKEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAoR1NUX0NPTExFQ1RfUEFEU19EVFMgKGRhdGEpKSkKLQotLyoqCi0gKiBHc3RDb2xsZWN0RGF0YToKLSAqIEBjb2xsZWN0OiBvd25lciAjR3N0Q29sbGVjdFBhZHMKLSAqIEBwYWQ6ICNHc3RQYWQgbWFuYWdlZCBieSB0aGlzIGRhdGEKLSAqIEBidWZmZXI6IGN1cnJlbnRseSBxdWV1ZWQgYnVmZmVyLgotICogQHBvczogcG9zaXRpb24gaW4gdGhlIGJ1ZmZlcgotICogQHNlZ21lbnQ6IGxhc3Qgc2VnbWVudCByZWNlaXZlZC4KLSAqIEBkdHM6IHRoZSBzaWduZWQgdmVyc2lvbiBvZiB0aGUgRFRTIGNvbnZlcnRlZCB0byBydW5uaW5nIHRpbWUuIFRvIGFjY2VzcwotICogICAgICAgdGhpcyBtZW1lYmVyLCB1c2UgJUdTVF9DT0xMRUNUX1BBRFNfRFRTIG1hY3JvLiAoU2luY2UgMS42KQotICoKLSAqIFN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBjb2xsZWN0X3BhZHMuCi0gKi8KLXN0cnVjdCBfR3N0Q29sbGVjdERhdGEKLXsKLSAgLyogd2l0aCBTVFJFQU1fTE9DSyBvZiBAY29sbGVjdCAqLwotICBHc3RDb2xsZWN0UGFkcyAgICAgICAgKmNvbGxlY3Q7Ci0gIEdzdFBhZCAgICAgICAgICAgICAgICAqcGFkOwotICBHc3RCdWZmZXIgICAgICAgICAgICAgKmJ1ZmZlcjsKLSAgZ3VpbnQgICAgICAgICAgICAgICAgICBwb3M7Ci0gIEdzdFNlZ21lbnQgICAgICAgICAgICAgc2VnbWVudDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgLyogc3RhdGU6IGJpdGZpZWxkIGZvciBlYXNpZXIgZXh0ZW5zaW9uOwotICAgKiBlb3MsIGZsdXNoaW5nLCBuZXdfc2VnbWVudCwgd2FpdGluZyAqLwotICBHc3RDb2xsZWN0UGFkc1N0YXRlRmxhZ3MgICAgc3RhdGU7Ci0KLSAgR3N0Q29sbGVjdERhdGFQcml2YXRlICpwcml2OwotCi0gIHVuaW9uIHsKLSAgICBzdHJ1Y3QgewotICAgICAgLyo8IHB1YmxpYyA+Ki8KLSAgICAgIGdpbnQ2NCBkdHM7Ci0gICAgICAvKjwgcHJpdmF0ZSA+Ki8KLSAgICB9IGFiaTsKLSAgICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLSAgfSBBQkk7Ci19OwotCi0vKioKLSAqIEdzdENvbGxlY3RQYWRzRnVuY3Rpb246Ci0gKiBAcGFkczogdGhlICNHc3RDb2xsZWN0UGFkcyB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbGJhY2sKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24oKQotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGFsbCBwYWRzIGhhdmUgcmVjZWl2ZWQgZGF0YS4KLSAqCi0gKiBSZXR1cm5zOiAlR1NUX0ZMT1dfT0sgZm9yIHN1Y2Nlc3MKLSAqLwotdHlwZWRlZiBHc3RGbG93UmV0dXJuICgqR3N0Q29sbGVjdFBhZHNGdW5jdGlvbikgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIEdzdENvbGxlY3RQYWRzQnVmZmVyRnVuY3Rpb246Ci0gKiBAcGFkczogdGhlICNHc3RDb2xsZWN0UGFkcyB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbGJhY2sKLSAqIEBkYXRhOiB0aGUgI0dzdENvbGxlY3REYXRhIG9mIHBhZCB0aGF0IGhhcyByZWNlaXZlZCB0aGUgYnVmZmVyCi0gKiBAYnVmZmVyOiAodHJhbnNmZXIgZnVsbCk6IHRoZSAjR3N0QnVmZmVyCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIHRvIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbigpCi0gKgotICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSAoY29uc2lkZXJlZCBvbGRlc3QpIGJ1ZmZlciBjYW4gYmUgbXV4ZWQuCi0gKiBJZiBhbGwgcGFkcyBoYXZlIHJlYWNoZWQgRU9TLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoICVOVUxMIEBidWZmZXIKLSAqIGFuZCAlTlVMTCBAZGF0YS4KLSAqCi0gKiBSZXR1cm5zOiAlR1NUX0ZMT1dfT0sgZm9yIHN1Y2Nlc3MKLSAqLwotdHlwZWRlZiBHc3RGbG93UmV0dXJuICgqR3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbikgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBHc3RDb2xsZWN0RGF0YSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKmJ1ZmZlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RDb2xsZWN0UGFkc0NvbXBhcmVGdW5jdGlvbjoKLSAqIEBwYWRzOiB0aGUgI0dzdENvbGxlY3RQYWRzIHRoYXQgaXMgY29tcGFyaW5nIHRoZSB0aW1lc3RhbXBzCi0gKiBAZGF0YTE6IHRoZSBmaXJzdCAjR3N0Q29sbGVjdERhdGEKLSAqIEB0aW1lc3RhbXAxOiB0aGUgZmlyc3QgdGltZXN0YW1wCi0gKiBAZGF0YTI6IHRoZSBzZWNvbmQgI0dzdENvbGxlY3REYXRhCi0gKiBAdGltZXN0YW1wMjogdGhlIHNlY29uZCB0aW1lc3RhbXAKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gZ3N0X2NvbGxlY3RfcGFkc19zZXRfY29tcGFyZV9mdW5jdGlvbigpCi0gKgotICogQSBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHR3byB0aW1lc3RhbXBzIG9mIGJ1ZmZlcnMgb3IgbmV3c2VnbWVudHMgY29sbGVjdGVkIG9uIG9uZSBwYWQuCi0gKgotICogUmV0dXJuczogSW50ZWdlciBsZXNzIHRoYW4gemVybyB3aGVuIGZpcnN0IHRpbWVzdGFtcCBpcyBkZWVtZWQgb2xkZXIgdGhhbiB0aGUgc2Vjb25kIG9uZS4KLSAqICAgICAgICAgIFplcm8gaWYgdGhlIHRpbWVzdGFtcHMgYXJlIGRlZW1lZCBlcXVhbGx5IG9sZC4KLSAqICAgICAgICAgIEludGVnZXIgZ3JlYXRlciB0aGFuIHplcm8gd2hlbiBzZWNvbmQgdGltZXN0YW1wIGlzIGRlZW1lZCBvbGRlciB0aGFuIHRoZSBmaXJzdCBvbmUuCi0gKi8KLXR5cGVkZWYgZ2ludCAoKkdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uKSAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENvbGxlY3REYXRhICogZGF0YTEsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDb2xsZWN0RGF0YSAqIGRhdGEyLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb246Ci0gKiBAcGFkczogdGhlICNHc3RDb2xsZWN0UGFkcyB0aGF0IHRyaWdnZXJlZCB0aGUgY2FsbGJhY2sKLSAqIEBwYWQ6IHRoZSAjR3N0UGFkIHRoYXQgcmVjZWl2ZWQgYW4gZXZlbnQKLSAqIEBldmVudDogdGhlICNHc3RFdmVudCByZWNlaXZlZAotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byBnc3RfY29sbGVjdF9wYWRzX3NldF9ldmVudF9mdW5jdGlvbigpCi0gKgotICogQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoaWxlIHByb2Nlc3NpbmcgYW4gZXZlbnQuIEl0IHRha2VzCi0gKiBvd25lcnNoaXAgb2YgdGhlIGV2ZW50IGFuZCBpcyByZXNwb25zaWJsZSBmb3IgY2hhaW5pbmcgdXAgKHRvCi0gKiBnc3RfY29sbGVjdF9wYWRzX2V2ZW50X2RlZmF1bHQoKSkgb3IgZHJvcHBpbmcgZXZlbnRzIChzdWNoIHR5cGljYWwgY2FzZXMKLSAqIGJlaW5nIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQgaGFuZGxlcikuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhZCBjb3VsZCBoYW5kbGUgdGhlIGV2ZW50Ci0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb24pICAgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdENvbGxlY3REYXRhICogcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFdmVudCAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0KLS8qKgotICogR3N0Q29sbGVjdFBhZHNRdWVyeUZ1bmN0aW9uOgotICogQHBhZHM6IHRoZSAjR3N0Q29sbGVjdFBhZHMgdGhhdCB0cmlnZ2VyZWQgdGhlIGNhbGxiYWNrCi0gKiBAcGFkOiB0aGUgI0dzdFBhZCB0aGF0IHJlY2VpdmVkIGFuIGV2ZW50Ci0gKiBAcXVlcnk6IHRoZSAjR3N0RXZlbnQgcmVjZWl2ZWQKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gZ3N0X2NvbGxlY3RfcGFkc19zZXRfcXVlcnlfZnVuY3Rpb24oKQotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGlsZSBwcm9jZXNzaW5nIGEgcXVlcnkuIEl0IHRha2VzCi0gKiBvd25lcnNoaXAgb2YgdGhlIHF1ZXJ5IGFuZCBpcyByZXNwb25zaWJsZSBmb3IgY2hhaW5pbmcgdXAgKHRvCi0gKiBldmVudHMgZG93bnN0cmVhbSAod2l0aCBnc3RfcGFkX2V2ZW50X2RlZmF1bHQoKSkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHBhZCBjb3VsZCBoYW5kbGUgdGhlIGV2ZW50Ci0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb24pICAgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdENvbGxlY3REYXRhICogcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAqIHF1ZXJ5LCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIEdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uOgotICogQHBhZHM6IGEgI0dzdENvbGxlY3RQYWRzCi0gKiBAZGF0YTogYSAjR3N0Q29sbGVjdERhdGEKLSAqIEBpbmJ1ZmZlcjogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgaW5wdXQgI0dzdEJ1ZmZlcgotICogQG91dGJ1ZmZlcjogdGhlIG91dHB1dCAjR3N0QnVmZmVyCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEKLSAqCi0gKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBAaW5idWZmZXIgaXMgcmVjZWl2ZWQgb24gdGhlIHBhZCBtYW5hZ2VkCi0gKiBieSBAZGF0YSBpbiB0aGUgY29sbGVjdHBhZCBvYmplY3QgQHBhZHMuCi0gKgotICogVGhlIGZ1bmN0aW9uIHNob3VsZCB1c2UgdGhlIHNlZ21lbnQgb2YgQGRhdGEgYW5kIHRoZSBuZWdvdGlhdGVkIG1lZGlhIHR5cGUgb24KLSAqIHRoZSBwYWQgdG8gcGVyZm9ybSBjbGlwcGluZyBvZiBAaW5idWZmZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgQGluYnVmZmVyIGFuZCBzaG91bGQgb3V0cHV0IGEgYnVmZmVyIGluCi0gKiBAb3V0YnVmZmVyIG9yIHJldHVybiAlTlVMTCBpbiBAb3V0YnVmZmVyIGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIGRyb3BwZWQuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSByZXN1bHQgb2YgY2xpcHBpbmcuCi0gKi8KLXR5cGVkZWYgR3N0Rmxvd1JldHVybiAoKkdzdENvbGxlY3RQYWRzQ2xpcEZ1bmN0aW9uKSAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdENvbGxlY3REYXRhICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKmluYnVmZmVyLCBHc3RCdWZmZXIgKipvdXRidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLQotLyoqCi0gKiBHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb246Ci0gKiBAcGFkczogYSAjR3N0Q29sbGVjdFBhZHMKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YQotICoKLSAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGlsZSBwcm9jZXNzaW5nIGEgZmx1c2hpbmcgc2VlayBldmVudC4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gc2hvdWxkIGZsdXNoIGFueSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgZWxlbWVudCBhbmQgdGhlIHN0YXRlIG9mCi0gKiBhbGwgdGhlIHBhZHMuIEl0IHNob3VsZCBjbGVhciBvbmx5IHRoZSBzdGF0ZSBub3QgZGlyZWN0bHkgbWFuYWdlZCBieSB0aGUKLSAqIEBwYWRzIG9iamVjdC4gSXQgaXMgdGhlcmVmb3JlIG5vdCBuZWNlc3NhcnkgdG8gY2FsbAotICogZ3N0X2NvbGxlY3RfcGFkc19zZXRfZmx1c2hpbmcgbm9yIGdzdF9jb2xsZWN0X3BhZHNfY2xlYXIgZnJvbSB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotdHlwZWRlZiB2b2lkICgqR3N0Q29sbGVjdFBhZHNGbHVzaEZ1bmN0aW9uKSAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogR1NUX0NPTExFQ1RfUEFEU19HRVRfU1RSRUFNX0xPQ0s6Ci0gKiBAcGFkczogYSAjR3N0Q29sbGVjdFBhZHMKLSAqCi0gKiBHZXQgdGhlIHN0cmVhbSBsb2NrIG9mIEBwYWRzLiBUaGUgc3RyZWFtIGxvY2sgaXMgdXNlZCB0byBjb29yZGluYXRlIGFuZAotICogc2VyaWFsaXplIGV4ZWN1dGlvbiBhbW9uZyB0aGUgdmFyaW91cyBzdHJlYW1zIGJlaW5nIGNvbGxlY3RlZCwgYW5kIGluCi0gKiBwcm90ZWN0aW5nIHRoZSByZXNvdXJjZXMgdXNlZCB0byBhY2NvbXBsaXNoIHRoaXMuCi0gKi8KLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19HRVRfU1RSRUFNX0xPQ0socGFkcykgKCYoKEdzdENvbGxlY3RQYWRzICopcGFkcyktPnN0cmVhbV9sb2NrKQotLyoqCi0gKiBHU1RfQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLOgotICogQHBhZHM6IGEgI0dzdENvbGxlY3RQYWRzCi0gKgotICogTG9jayB0aGUgc3RyZWFtIGxvY2sgb2YgQHBhZHMuCi0gKi8KLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fTE9DSyhwYWRzKSAgICAgZ19yZWNfbXV0ZXhfbG9jayhHU1RfQ09MTEVDVF9QQURTX0dFVF9TVFJFQU1fTE9DSyAocGFkcykpCi0vKioKLSAqIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSzoKLSAqIEBwYWRzOiBhICNHc3RDb2xsZWN0UGFkcwotICoKLSAqIFVubG9jayB0aGUgc3RyZWFtIGxvY2sgb2YgQHBhZHMuCi0gKi8KLSNkZWZpbmUgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLKHBhZHMpICAgZ19yZWNfbXV0ZXhfdW5sb2NrKEdTVF9DT0xMRUNUX1BBRFNfR0VUX1NUUkVBTV9MT0NLIChwYWRzKSkKLQotLyoqCi0gKiBHc3RDb2xsZWN0UGFkczoKLSAqIEBkYXRhOiAoZWxlbWVudC10eXBlIEdzdEJhc2UuQ29sbGVjdERhdGEpOiAjR0xpc3Qgb2YgI0dzdENvbGxlY3REYXRhIG1hbmFnZWQKLSAqICAgYnkgdGhpcyAjR3N0Q29sbGVjdFBhZHMuCi0gKgotICogQ29sbGVjdHBhZHMgb2JqZWN0LgotICovCi1zdHJ1Y3QgX0dzdENvbGxlY3RQYWRzIHsKLSAgR3N0T2JqZWN0ICAgICAgb2JqZWN0OwotCi0gIC8qPCBwdWJsaWMgPiovIC8qIHdpdGggTE9DSyBhbmQvb3IgU1RSRUFNX0xPQ0sgKi8KLSAgR1NMaXN0ICAgICAgICAqZGF0YTsgICAgICAgICAgICAgICAgICAvKiBsaXN0IG9mIENvbGxlY3REYXRhIGl0ZW1zICovCi0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdSZWNNdXRleCAgICAgIHN0cmVhbV9sb2NrOyAgICAgICAgICAvKiB1c2VkIHRvIHNlcmlhbGl6ZSBjb2xsZWN0aW9uIGFtb25nIHNldmVyYWwgc3RyZWFtcyAqLwotCi0gIEdzdENvbGxlY3RQYWRzUHJpdmF0ZSAqcHJpdjsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLXN0cnVjdCBfR3N0Q29sbGVjdFBhZHNDbGFzcyB7Ci0gIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSBnc3RfY29sbGVjdF9wYWRzX2dldF90eXBlKHZvaWQpOwotCi0vKiBjcmVhdGluZyB0aGUgb2JqZWN0ICovCi1Hc3RDb2xsZWN0UGFkcyogICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfbmV3ICAgICAgICAgICAodm9pZCk7Ci0KLS8qIHNldCB0aGUgY2FsbGJhY2tzICovCi12b2lkICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gICAgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q29sbGVjdFBhZHNGdW5jdGlvbiBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci12b2lkICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfYnVmZmVyX2Z1bmN0aW9uICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q29sbGVjdFBhZHNCdWZmZXJGdW5jdGlvbiBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci12b2lkICAgICAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24gICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q29sbGVjdFBhZHNFdmVudEZ1bmN0aW9uIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXZvaWQgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3NldF9xdWVyeV9mdW5jdGlvbiAgIChHc3RDb2xsZWN0UGFkcyAqcGFkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb24gZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotdm9pZCAgICAgICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2NvbXBhcmVfZnVuY3Rpb24gKEdzdENvbGxlY3RQYWRzICpwYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENvbGxlY3RQYWRzQ29tcGFyZUZ1bmN0aW9uIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXZvaWQgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3NldF9jbGlwX2Z1bmN0aW9uICAgIChHc3RDb2xsZWN0UGFkcyAqcGFkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbiBjbGlwZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotdm9pZCAgICAgICAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoX2Z1bmN0aW9uICAgIChHc3RDb2xsZWN0UGFkcyAqcGFkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDb2xsZWN0UGFkc0ZsdXNoRnVuY3Rpb24gZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKiBwYWQgbWFuYWdlbWVudCAqLwotR3N0Q29sbGVjdERhdGEqIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdFBhZCAqcGFkLCBndWludCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfbm90aWZ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gbG9jayk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkICAgIChHc3RDb2xsZWN0UGFkcyAqcGFkcywgR3N0UGFkICpwYWQpOwotCi0vKiBzdGFydC9zdG9wIGNvbGxlY3Rpb24gKi8KLXZvaWQgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3N0YXJ0ICAgICAgICAgKEdzdENvbGxlY3RQYWRzICpwYWRzKTsKLXZvaWQgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgICAgICAgICAgKEdzdENvbGxlY3RQYWRzICpwYWRzKTsKLXZvaWQgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZyAgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBnYm9vbGVhbiBmbHVzaGluZyk7Ci0KLS8qIGdldCBjb2xsZWN0ZWQgYnVmZmVycyAqLwotR3N0QnVmZmVyKiAgICAgIGdzdF9jb2xsZWN0X3BhZHNfcGVlayAgICAgICAgICAoR3N0Q29sbGVjdFBhZHMgKnBhZHMsIEdzdENvbGxlY3REYXRhICpkYXRhKTsKLUdzdEJ1ZmZlciogICAgICBnc3RfY29sbGVjdF9wYWRzX3BvcCAgICAgICAgICAgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBHc3RDb2xsZWN0RGF0YSAqZGF0YSk7Ci0KLS8qIGdldCBjb2xsZWN0ZWQgYnl0ZXMgKi8KLWd1aW50ICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX2F2YWlsYWJsZSAgICAgKEdzdENvbGxlY3RQYWRzICpwYWRzKTsKLWd1aW50ICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX2ZsdXNoICAgICAgICAgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBHc3RDb2xsZWN0RGF0YSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNpemUpOwotR3N0QnVmZmVyKiAgICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVhZF9idWZmZXIgICAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBzaXplKTsKLUdzdEJ1ZmZlciogICAgICBnc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyICAgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgc2l6ZSk7Ci0KLS8qIHNldHRpbmcgYW5kIHVuc2V0dGluZyB3YWl0aW5nIG1vZGUgKi8KLXZvaWQgICAgICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3NldF93YWl0aW5nICAgKEdzdENvbGxlY3RQYWRzICpwYWRzLCBHc3RDb2xsZWN0RGF0YSAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHdhaXRpbmcpOwotCi0vKiBjb252ZW5pZW5jZSBoZWxwZXIgKi8KLUdzdEZsb3dSZXR1cm4JZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3J1bm5pbmdfdGltZSAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENvbGxlY3REYXRhICogY2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICogYnVmLCBHc3RCdWZmZXIgKiogb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qIGRlZmF1bHQgaGFuZGxlcnMgKi8KLWdib29sZWFuICAgICAgICBnc3RfY29sbGVjdF9wYWRzX2V2ZW50X2RlZmF1bHQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RXZlbnQgKiBldmVudCwgZ2Jvb2xlYW4gZGlzY2FyZCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zcmNfZXZlbnRfZGVmYXVsdCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RQYWQgKiBwYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RXZlbnQgKiBldmVudCk7Ci1nYm9vbGVhbiAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19xdWVyeV9kZWZhdWx0IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFF1ZXJ5ICogcXVlcnksIGdib29sZWFuIGRpc2NhcmQpOwotCi0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0Q29sbGVjdFBhZHMsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NPTExFQ1RfUEFEU19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmMgYi9saWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjljMTZhLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGRhdGFxdWV1ZS5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RkYXRhcXVldWUKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogVGhyZWFkc2FmZSBxdWV1ZWluZyBvYmplY3QKLSAqCi0gKiAjR3N0RGF0YVF1ZXVlIGlzIGFuIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhyZWFkc2FmZSBxdWV1ZWluZyBvZiBvYmplY3RzLiBJdAotICogYWxzbyBwcm92aWRlcyBzaXplLXJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gVGhpcyBvYmplY3Qgc2hvdWxkIGJlIHVzZWQgZm9yCi0gKiBhbnkgI0dzdEVsZW1lbnQgdGhhdCB3aXNoZXMgdG8gcHJvdmlkZSBzb21lIHNvcnQgb2YgcXVldWVpbmcgZnVuY3Rpb25hbGl0eS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgInN0cmluZy5oIgotI2luY2x1ZGUgImdzdGRhdGFxdWV1ZS5oIgotI2luY2x1ZGUgImdzdHF1ZXVlYXJyYXkuaCIKLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChkYXRhX3F1ZXVlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChkYXRhX3F1ZXVlX2RlYnVnKQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZGF0YV9xdWV1ZV9kYXRhZmxvdyk7Ci0KLQotLyogUXVldWUgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBTSUdOQUxfRU1QVFksCi0gIFNJR05BTF9GVUxMLAotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ1VSX0xFVkVMX1ZJU0lCTEUsCi0gIFBST1BfQ1VSX0xFVkVMX0JZVEVTLAotICBQUk9QX0NVUl9MRVZFTF9USU1FCi0gICAgICAvKiBGSUxMIE1FICovCi19OwotCi1zdHJ1Y3QgX0dzdERhdGFRdWV1ZVByaXZhdGUKLXsKLSAgLyogdGhlIGFycmF5IG9mIGRhdGEgd2UncmUga2VlcGluZyBvdXIgZ3J1YmJ5IGhhbmRzIG9uICovCi0gIEdzdFF1ZXVlQXJyYXkgKnF1ZXVlOwotCi0gIEdzdERhdGFRdWV1ZVNpemUgY3VyX2xldmVsOyAgIC8qIHNpemUgb2YgdGhlIHF1ZXVlICovCi0gIEdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIGNoZWNrZnVsbDsgICAgICAvKiBDYWxsYmFjayB0byBjaGVjayBpZiB0aGUgcXVldWUgaXMgZnVsbCAqLwotICBncG9pbnRlciAqY2hlY2tkYXRhOwotCi0gIEdNdXRleCBxbG9jazsgICAgICAgICAgICAgICAgIC8qIGxvY2sgZm9yIHF1ZXVlICh2cyBvYmplY3QgbG9jaykgKi8KLSAgZ2Jvb2xlYW4gd2FpdGluZ19hZGQ7Ci0gIEdDb25kIGl0ZW1fYWRkOyAgICAgICAgICAgICAgIC8qIHNpZ25hbHMgYnVmZmVycyBub3cgYXZhaWxhYmxlIGZvciByZWFkaW5nICovCi0gIGdib29sZWFuIHdhaXRpbmdfZGVsOwotICBHQ29uZCBpdGVtX2RlbDsgICAgICAgICAgICAgICAvKiBzaWduYWxzIHNwYWNlIG5vdyBhdmFpbGFibGUgZm9yIHdyaXRpbmcgKi8KLSAgZ2Jvb2xlYW4gZmx1c2hpbmc7ICAgICAgICAgICAgLyogaW5kaWNhdGVzIHdoZXRoZXIgY29uZGl0aW9ucyB3aGVyZSBzaWduYWxsZWQgYmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiBleHRlcm5hbCBmbHVzaGluZyAqLwotICBHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2sgZnVsbGNhbGxiYWNrOwotICBHc3REYXRhUXVldWVFbXB0eUNhbGxiYWNrIGVtcHR5Y2FsbGJhY2s7Ci19OwotCi0jZGVmaW5lIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0socSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR1NUX0NBVF9UUkFDRSAoZGF0YV9xdWV1ZV9kYXRhZmxvdywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAibG9ja2luZyBxbG9jayBmcm9tIHRocmVhZCAlcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnX3RocmVhZF9zZWxmICgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfbXV0ZXhfbG9jayAoJnEtPnByaXYtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdTVF9DQVRfVFJBQ0UgKGRhdGFfcXVldWVfZGF0YWZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAibG9ja2VkIHFsb2NrIGZyb20gdGhyZWFkICVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnX3RocmVhZF9zZWxmICgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLKHEsIGxhYmVsKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgXAotICAgIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0sgKHEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChxLT5wcml2LT5mbHVzaGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0socSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9DQVRfVFJBQ0UgKGRhdGFfcXVldWVfZGF0YWZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgInVubG9ja2luZyBxbG9jayBmcm9tIHRocmVhZCAlcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ190aHJlYWRfc2VsZiAoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX211dGV4X3VubG9jayAoJnEtPnByaXYtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgU1RBVFVTKHEsIG1zZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR1NUX0NBVF9MT0cgKGRhdGFfcXVldWVfZGF0YWZsb3csICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICJxdWV1ZTolcCAiIG1zZyAiOiAldSB2aXNpYmxlIGl0ZW1zLCAldSAiICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICJieXRlcywgJSJHX0dVSU5UNjRfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICIgbnMsICV1IGVsZW1lbnRzIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIHF1ZXVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIHEtPnByaXYtPmN1cl9sZXZlbC52aXNpYmxlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIHEtPnByaXYtPmN1cl9sZXZlbC5ieXRlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIHEtPnByaXYtPmN1cl9sZXZlbC50aW1lLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgIGdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoIChxLT5wcml2LT5xdWV1ZSkpCi0KLXN0YXRpYyB2b2lkIGdzdF9kYXRhX3F1ZXVlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2RhdGFfcXVldWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2RhdGFfcXVldWVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ3VpbnQgZ3N0X2RhdGFfcXVldWVfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotI2RlZmluZSBfZG9faW5pdCBcCi17IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGRhdGFfcXVldWVfZGVidWcsICJkYXRhcXVldWUiLCAwLCBcCi0gICAgICAiZGF0YSBxdWV1ZSBvYmplY3QiKTsgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZGF0YV9xdWV1ZV9kYXRhZmxvdywgImRhdGFfcXVldWVfZGF0YWZsb3ciLCAwLCBcCi0gICAgICAiZGF0YWZsb3cgaW5zaWRlIHRoZSBkYXRhIHF1ZXVlIG9iamVjdCIpOyBcCi19Ci0KLSNkZWZpbmUgcGFyZW50X2NsYXNzIGdzdF9kYXRhX3F1ZXVlX3BhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdERhdGFRdWV1ZSwgZ3N0X2RhdGFfcXVldWUsIEdfVFlQRV9PQkpFQ1QsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQKLWdzdF9kYXRhX3F1ZXVlX2NsYXNzX2luaXQgKEdzdERhdGFRdWV1ZUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3REYXRhUXVldWVQcml2YXRlKSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2RhdGFfcXVldWVfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZGF0YV9xdWV1ZV9nZXRfcHJvcGVydHk7Ci0KLSAgLyogc2lnbmFscyAqLwotICAvKioKLSAgICogR3N0RGF0YVF1ZXVlOjplbXB0eTogKHNraXApCi0gICAqIEBxdWV1ZTogdGhlIHF1ZXVlIGluc3RhbmNlCi0gICAqCi0gICAqIFJlcG9ydHMgdGhhdCB0aGUgcXVldWUgYmVjYW1lIGVtcHR5IChlbXB0eSkuCi0gICAqIEEgcXVldWUgaXMgZW1wdHkgaWYgdGhlIHRvdGFsIGFtb3VudCBvZiB2aXNpYmxlIGl0ZW1zIGluc2lkZSBpdCAobnVtLXZpc2libGUsIHRpbWUsCi0gICAqIHNpemUpIGlzIGxvd2VyIHRoYW4gdGhlIGJvdW5kYXJ5IHZhbHVlcyB3aGljaCBjYW4gYmUgc2V0IHRocm91Z2ggdGhlIEdPYmplY3QKLSAgICogcHJvcGVydGllcy4KLSAgICovCi0gIGdzdF9kYXRhX3F1ZXVlX3NpZ25hbHNbU0lHTkFMX0VNUFRZXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJlbXB0eSIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9GSVJTVCwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0RGF0YVF1ZXVlQ2xhc3MsIGVtcHR5KSwgTlVMTCwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgLyoqCi0gICAqIEdzdERhdGFRdWV1ZTo6ZnVsbDogKHNraXApCi0gICAqIEBxdWV1ZTogdGhlIHF1ZXVlIGluc3RhbmNlCi0gICAqCi0gICAqIFJlcG9ydHMgdGhhdCB0aGUgcXVldWUgYmVjYW1lIGZ1bGwgKGZ1bGwpLgotICAgKiBBIHF1ZXVlIGlzIGZ1bGwgaWYgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIGluc2lkZSBpdCAobnVtLXZpc2libGUsIHRpbWUsCi0gICAqIHNpemUpIGlzIGhpZ2hlciB0aGFuIHRoZSBib3VuZGFyeSB2YWx1ZXMgd2hpY2ggY2FuIGJlIHNldCB0aHJvdWdoIHRoZSBHT2JqZWN0Ci0gICAqIHByb3BlcnRpZXMuCi0gICAqLwotICBnc3RfZGF0YV9xdWV1ZV9zaWduYWxzW1NJR05BTF9GVUxMXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJmdWxsIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0ZJUlNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3REYXRhUXVldWVDbGFzcywgZnVsbCksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDApOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DVVJfTEVWRUxfQllURVMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImN1cnJlbnQtbGV2ZWwtYnl0ZXMiLCAiQ3VycmVudCBsZXZlbCAoa0IpIiwKLSAgICAgICAgICAiQ3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCAwLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NVUl9MRVZFTF9WSVNJQkxFLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjdXJyZW50LWxldmVsLXZpc2libGUiLAotICAgICAgICAgICJDdXJyZW50IGxldmVsICh2aXNpYmxlIGl0ZW1zKSIsCi0gICAgICAgICAgIkN1cnJlbnQgbnVtYmVyIG9mIHZpc2libGUgaXRlbXMgaW4gdGhlIHF1ZXVlIiwgMCwgR19NQVhVSU5ULCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1VSX0xFVkVMX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgiY3VycmVudC1sZXZlbC10aW1lIiwgIkN1cnJlbnQgbGV2ZWwgKG5zKSIsCi0gICAgICAgICAgIkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucykiLCAwLCBHX01BWFVJTlQ2NCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2RhdGFfcXVldWVfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGF0YV9xdWV1ZV9pbml0IChHc3REYXRhUXVldWUgKiBxdWV1ZSkKLXsKLSAgcXVldWUtPnByaXYgPQotICAgICAgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChxdWV1ZSwgR1NUX1RZUEVfREFUQV9RVUVVRSwKLSAgICAgIEdzdERhdGFRdWV1ZVByaXZhdGUpOwotCi0gIHF1ZXVlLT5wcml2LT5jdXJfbGV2ZWwudmlzaWJsZSA9IDA7ICAgLyogbm8gY29udGVudCAqLwotICBxdWV1ZS0+cHJpdi0+Y3VyX2xldmVsLmJ5dGVzID0gMDsgICAgIC8qIG5vIGNvbnRlbnQgKi8KLSAgcXVldWUtPnByaXYtPmN1cl9sZXZlbC50aW1lID0gMDsgICAgICAvKiBubyBjb250ZW50ICovCi0KLSAgcXVldWUtPnByaXYtPmNoZWNrZnVsbCA9IE5VTEw7Ci0KLSAgZ19tdXRleF9pbml0ICgmcXVldWUtPnByaXYtPnFsb2NrKTsKLSAgZ19jb25kX2luaXQgKCZxdWV1ZS0+cHJpdi0+aXRlbV9hZGQpOwotICBnX2NvbmRfaW5pdCAoJnF1ZXVlLT5wcml2LT5pdGVtX2RlbCk7Ci0gIHF1ZXVlLT5wcml2LT5xdWV1ZSA9IGdzdF9xdWV1ZV9hcnJheV9uZXcgKDUwKTsKLQotICBHU1RfREVCVUcgKCJpbml0aWFsaXplZCBxdWV1ZSdzIG5vdF9lbXB0eSAmIG5vdF9mdWxsIGNvbmRpdGlvbnMiKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0YV9xdWV1ZV9uZXc6IChza2lwKQotICogQGNoZWNrZnVsbDogdGhlIGNhbGxiYWNrIHVzZWQgdG8gdGVsbCBpZiB0aGUgZWxlbWVudCBjb25zaWRlcnMgdGhlIHF1ZXVlIGZ1bGwKLSAqIG9yIG5vdC4KLSAqIEBmdWxsY2FsbGJhY2s6IHRoZSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBxdWV1ZSBpcyBjb25zaWRlcmVkIGZ1bGwuCi0gKiBAZW1wdHljYWxsYmFjazogdGhlIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGNvbnNpZGVyZWQgZW1wdHkuCi0gKiBAY2hlY2tkYXRhOiBhICNncG9pbnRlciB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBAY2hlY2tmdWxsLCBAZnVsbGNhbGxiYWNrLAotICogICBhbmQgQGVtcHR5Y2FsbGJhY2sgY2FsbGJhY2tzLgotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdERhdGFRdWV1ZS4gSWYgQGZ1bGxjYWxsYmFjayBvciBAZW1wdHljYWxsYmFjayBhcmUgc3VwcGxpZWQsIHRoZW4KLSAqIHRoZSAjR3N0RGF0YVF1ZXVlIHdpbGwgY2FsbCB0aGUgcmVzcGVjdGl2ZSBjYWxsYmFjayB0byBzaWduYWwgZnVsbCBvciBlbXB0eSBjb25kaXRpb24uCi0gKiBJZiB0aGUgY2FsbGJhY2tzIGFyZSBOVUxMIHRoZSAjR3N0RGF0YVF1ZXVlIHdpbGwgaW5zdGVhZCBlbWl0ICdmdWxsJyBhbmQgJ2VtcHR5JwotICogc2lnbmFscy4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyAjR3N0RGF0YVF1ZXVlLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotR3N0RGF0YVF1ZXVlICoKLWdzdF9kYXRhX3F1ZXVlX25ldyAoR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24gY2hlY2tmdWxsLAotICAgIEdzdERhdGFRdWV1ZUZ1bGxDYWxsYmFjayBmdWxsY2FsbGJhY2ssCi0gICAgR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjayBlbXB0eWNhbGxiYWNrLCBncG9pbnRlciBjaGVja2RhdGEpCi17Ci0gIEdzdERhdGFRdWV1ZSAqcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjaGVja2Z1bGwgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgcmV0ID0gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfREFUQV9RVUVVRSwgMCwgTlVMTCk7Ci0gIHJldC0+cHJpdi0+Y2hlY2tmdWxsID0gY2hlY2tmdWxsOwotICByZXQtPnByaXYtPmNoZWNrZGF0YSA9IGNoZWNrZGF0YTsKLSAgcmV0LT5wcml2LT5mdWxsY2FsbGJhY2sgPSBmdWxsY2FsbGJhY2s7Ci0gIHJldC0+cHJpdi0+ZW1wdHljYWxsYmFjayA9IGVtcHR5Y2FsbGJhY2s7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kYXRhX3F1ZXVlX2NsZWFudXAgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKQotewotICBHc3REYXRhUXVldWVQcml2YXRlICpwcml2ID0gcXVldWUtPnByaXY7Ci0KLSAgd2hpbGUgKCFnc3RfcXVldWVfYXJyYXlfaXNfZW1wdHkgKHByaXYtPnF1ZXVlKSkgewotICAgIEdzdERhdGFRdWV1ZUl0ZW0gKml0ZW0gPSBnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWQgKHByaXYtPnF1ZXVlKTsKLQotICAgIC8qIEp1c3QgY2FsbCB0aGUgZGVzdHJveSBub3RpZnkgb24gdGhlIGl0ZW0gKi8KLSAgICBpdGVtLT5kZXN0cm95IChpdGVtKTsKLSAgfQotICBwcml2LT5jdXJfbGV2ZWwudmlzaWJsZSA9IDA7Ci0gIHByaXYtPmN1cl9sZXZlbC5ieXRlcyA9IDA7Ci0gIHByaXYtPmN1cl9sZXZlbC50aW1lID0gMDsKLX0KLQotLyogY2FsbGVkIG9ubHkgb25jZSwgYXMgb3Bwb3NlZCB0byBkaXNwb3NlICovCi1zdGF0aWMgdm9pZAotZ3N0X2RhdGFfcXVldWVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdERhdGFRdWV1ZSAqcXVldWUgPSBHU1RfREFUQV9RVUVVRSAob2JqZWN0KTsKLSAgR3N0RGF0YVF1ZXVlUHJpdmF0ZSAqcHJpdiA9IHF1ZXVlLT5wcml2OwotCi0gIEdTVF9ERUJVRyAoImZpbmFsaXppbmcgcXVldWUiKTsKLQotICBnc3RfZGF0YV9xdWV1ZV9jbGVhbnVwIChxdWV1ZSk7Ci0gIGdzdF9xdWV1ZV9hcnJheV9mcmVlIChwcml2LT5xdWV1ZSk7Ci0KLSAgR1NUX0RFQlVHICgiZnJlZSBtdXRleCIpOwotICBnX211dGV4X2NsZWFyICgmcHJpdi0+cWxvY2spOwotICBHU1RfREVCVUcgKCJkb25lIGZyZWUgbXV0ZXgiKTsKLQotICBnX2NvbmRfY2xlYXIgKCZwcml2LT5pdGVtX2FkZCk7Ci0gIGdfY29uZF9jbGVhciAoJnByaXYtPml0ZW1fZGVsKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2ZsdXNoIChHc3REYXRhUXVldWUgKiBxdWV1ZSkKLXsKLSAgR3N0RGF0YVF1ZXVlUHJpdmF0ZSAqcHJpdiA9IHF1ZXVlLT5wcml2OwotCi0gIFNUQVRVUyAocXVldWUsICJiZWZvcmUgZmx1c2hpbmciKTsKLSAgZ3N0X2RhdGFfcXVldWVfY2xlYW51cCAocXVldWUpOwotICBTVEFUVVMgKHF1ZXVlLCAiYWZ0ZXIgZmx1c2hpbmciKTsKLSAgLyogd2UgZGVsZXRlZCBzb21ldGhpbmcuLi4gKi8KLSAgaWYgKHByaXYtPndhaXRpbmdfZGVsKQotICAgIGdfY29uZF9zaWduYWwgKCZwcml2LT5pdGVtX2RlbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9kYXRhX3F1ZXVlX2xvY2tlZF9pc19lbXB0eSAoR3N0RGF0YVF1ZXVlICogcXVldWUpCi17Ci0gIEdzdERhdGFRdWV1ZVByaXZhdGUgKnByaXYgPSBxdWV1ZS0+cHJpdjsKLQotICByZXR1cm4gKGdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoIChwcml2LT5xdWV1ZSkgPT0gMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9kYXRhX3F1ZXVlX2xvY2tlZF9pc19mdWxsIChHc3REYXRhUXVldWUgKiBxdWV1ZSkKLXsKLSAgR3N0RGF0YVF1ZXVlUHJpdmF0ZSAqcHJpdiA9IHF1ZXVlLT5wcml2OwotCi0gIHJldHVybiBwcml2LT5jaGVja2Z1bGwgKHF1ZXVlLCBwcml2LT5jdXJfbGV2ZWwudmlzaWJsZSwKLSAgICAgIHByaXYtPmN1cl9sZXZlbC5ieXRlcywgcHJpdi0+Y3VyX2xldmVsLnRpbWUsIHByaXYtPmNoZWNrZGF0YSk7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGFfcXVldWVfZmx1c2g6IChza2lwKQotICogQHF1ZXVlOiBhICNHc3REYXRhUXVldWUuCi0gKgotICogRmx1c2hlcyBhbGwgdGhlIGNvbnRlbnRzIG9mIHRoZSBAcXVldWUuIEFueSBjYWxsIHRvICNnc3RfZGF0YV9xdWV1ZV9wdXNoIGFuZAotICogI2dzdF9kYXRhX3F1ZXVlX3BvcCB3aWxsIGJlIHJlbGVhc2VkLgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9kYXRhX3F1ZXVlX2ZsdXNoIChHc3REYXRhUXVldWUgKiBxdWV1ZSkKLXsKLSAgR1NUX0RFQlVHICgicXVldWU6JXAiLCBxdWV1ZSk7Ci0gIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2ZsdXNoIChxdWV1ZSk7Ci0gIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotfQotCi0vKioKLSAqIGdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5OiAoc2tpcCkKLSAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgotICoKLSAqIFF1ZXJpZXMgaWYgdGhlcmUgYXJlIGFueSBpdGVtcyBpbiB0aGUgQHF1ZXVlLgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAcXVldWUgaXMgZW1wdHkuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOwotICByZXMgPSBnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZW1wdHkgKHF1ZXVlKTsKLSAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfZGF0YV9xdWV1ZV9pc19mdWxsOiAoc2tpcCkKLSAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgotICoKLSAqIFF1ZXJpZXMgaWYgQHF1ZXVlIGlzIGZ1bGwuIFRoaXMgY2hlY2sgd2lsbCBiZSBkb25lIHVzaW5nIHRoZQotICogI0dzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIHJlZ2lzdGVyZWQgd2l0aCBAcXVldWUuCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBxdWV1ZSBpcyBmdWxsLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ2Jvb2xlYW4KLWdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGwgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOwotICByZXMgPSBnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZnVsbCAocXVldWUpOwotICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZzogKHNraXApCi0gKiBAcXVldWU6IGEgI0dzdERhdGFRdWV1ZS4KLSAqIEBmbHVzaGluZzogYSAjZ2Jvb2xlYW4gc3RhdGluZyBpZiB0aGUgcXVldWUgd2lsbCBiZSBmbHVzaGluZyBvciBub3QuCi0gKgotICogU2V0cyB0aGUgcXVldWUgdG8gZmx1c2hpbmcgc3RhdGUgaWYgQGZsdXNoaW5nIGlzICVUUlVFLiBJZiBzZXQgdG8gZmx1c2hpbmcKLSAqIHN0YXRlLCBhbnkgaW5jb21pbmcgZGF0YSBvbiB0aGUgQHF1ZXVlIHdpbGwgYmUgZGlzY2FyZGVkLiBBbnkgY2FsbCBjdXJyZW50bHkKLSAqIGJsb2NraW5nIG9uICNnc3RfZGF0YV9xdWV1ZV9wdXNoIG9yICNnc3RfZGF0YV9xdWV1ZV9wb3Agd2lsbCByZXR1cm4gc3RyYWlnaHQKLSAqIGF3YXkgd2l0aCBhIHJldHVybiB2YWx1ZSBvZiAlRkFMU0UuIFdoaWxlIHRoZSBAcXVldWUgaXMgaW4gZmx1c2hpbmcgc3RhdGUsIAotICogYWxsIGNhbGxzIHRvIHRob3NlIHR3byBmdW5jdGlvbnMgd2lsbCByZXR1cm4gJUZBTFNFLgotICoKLSAqIE1UIFNhZmUuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBnYm9vbGVhbiBmbHVzaGluZykKLXsKLSAgR3N0RGF0YVF1ZXVlUHJpdmF0ZSAqcHJpdiA9IHF1ZXVlLT5wcml2OwotCi0gIEdTVF9ERUJVRyAoInF1ZXVlOiVwICwgZmx1c2hpbmc6JWQiLCBxdWV1ZSwgZmx1c2hpbmcpOwotCi0gIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgcHJpdi0+Zmx1c2hpbmcgPSBmbHVzaGluZzsKLSAgaWYgKGZsdXNoaW5nKSB7Ci0gICAgLyogcmVsZWFzZSBwdXNoL3BvcCBmdW5jdGlvbnMgKi8KLSAgICBpZiAocHJpdi0+d2FpdGluZ19hZGQpCi0gICAgICBnX2NvbmRfc2lnbmFsICgmcHJpdi0+aXRlbV9hZGQpOwotICAgIGlmIChwcml2LT53YWl0aW5nX2RlbCkKLSAgICAgIGdfY29uZF9zaWduYWwgKCZwcml2LT5pdGVtX2RlbCk7Ci0gIH0KLSAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlX3VubG9ja2VkIChHc3REYXRhUXVldWUgKiBxdWV1ZSwKLSAgICBHc3REYXRhUXVldWVJdGVtICogaXRlbSkKLXsKLSAgR3N0RGF0YVF1ZXVlUHJpdmF0ZSAqcHJpdiA9IHF1ZXVlLT5wcml2OwotCi0gIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKHByaXYtPnF1ZXVlLCBpdGVtKTsKLQotICBpZiAoaXRlbS0+dmlzaWJsZSkKLSAgICBwcml2LT5jdXJfbGV2ZWwudmlzaWJsZSsrOwotICBwcml2LT5jdXJfbGV2ZWwuYnl0ZXMgKz0gaXRlbS0+c2l6ZTsKLSAgcHJpdi0+Y3VyX2xldmVsLnRpbWUgKz0gaXRlbS0+ZHVyYXRpb247Ci19Ci0KLS8qKgotICogZ3N0X2RhdGFfcXVldWVfcHVzaF9mb3JjZTogKHNraXApCi0gKiBAcXVldWU6IGEgI0dzdERhdGFRdWV1ZS4KLSAqIEBpdGVtOiBhICNHc3REYXRhUXVldWVJdGVtLgotICoKLSAqIFB1c2hlcyBhICNHc3REYXRhUXVldWVJdGVtIChvciBhIHN0cnVjdHVyZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBzYW1lIGZpZWxkcykKLSAqIG9uIHRoZSBAcXVldWUuIEl0IGlnbm9yZXMgaWYgdGhlIEBxdWV1ZSBpcyBmdWxsIG9yIG5vdCBhbmQgZm9yY2VzIHRoZSBAaXRlbQotICogdG8gYmUgcHVzaGVkIGFueXdheS4KLSAqIE1UIHNhZmUuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaGFzIHNsaWdodGx5IGRpZmZlcmVudCBzZW1hbnRpY3MgdGhhbiBnc3RfcGFkX3B1c2goKQotICogYW5kIGdzdF9wYWRfcHVzaF9ldmVudCgpOiB0aGlzIGZ1bmN0aW9uIG9ubHkgdGFrZXMgb3duZXJzaGlwIG9mIEBpdGVtIGFuZAotICogdGhlICNHc3RNaW5pT2JqZWN0IGNvbnRhaW5lZCBpbiBAaXRlbSBpZiB0aGUgcHVzaCB3YXMgc3VjY2Vzc2Z1bC4gSWYgJUZBTFNFCi0gKiBpcyByZXR1cm5lZCwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBAaXRlbSBhbmQgaXRzIGNvbnRlbnRzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBAaXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IHB1c2hlZCBvbiB0aGUgQHF1ZXVlLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ2Jvb2xlYW4KLWdzdF9kYXRhX3F1ZXVlX3B1c2hfZm9yY2UgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBHc3REYXRhUXVldWVJdGVtICogaXRlbSkKLXsKLSAgR3N0RGF0YVF1ZXVlUHJpdmF0ZSAqcHJpdiA9IHF1ZXVlLT5wcml2OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREFUQV9RVUVVRSAocXVldWUpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpdGVtICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgZmx1c2hpbmcpOwotCi0gIFNUQVRVUyAocXVldWUsICJiZWZvcmUgcHVzaGluZyIpOwotICBnc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlX3VubG9ja2VkIChxdWV1ZSwgaXRlbSk7Ci0gIFNUQVRVUyAocXVldWUsICJhZnRlciBwdXNoaW5nIik7Ci0gIGlmIChwcml2LT53YWl0aW5nX2FkZCkKLSAgICBnX2NvbmRfc2lnbmFsICgmcHJpdi0+aXRlbV9hZGQpOwotCi0gIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJxdWV1ZTolcCwgd2UgYXJlIGZsdXNoaW5nIiwgcXVldWUpOwotICAgIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9kYXRhX3F1ZXVlX3B1c2g6IChza2lwKQotICogQHF1ZXVlOiBhICNHc3REYXRhUXVldWUuCi0gKiBAaXRlbTogYSAjR3N0RGF0YVF1ZXVlSXRlbS4KLSAqCi0gKiBQdXNoZXMgYSAjR3N0RGF0YVF1ZXVlSXRlbSAob3IgYSBzdHJ1Y3R1cmUgdGhhdCBiZWdpbnMgd2l0aCB0aGUgc2FtZSBmaWVsZHMpCi0gKiBvbiB0aGUgQHF1ZXVlLiBJZiB0aGUgQHF1ZXVlIGlzIGZ1bGwsIHRoZSBjYWxsIHdpbGwgYmxvY2sgdW50aWwgc3BhY2UgaXMKLSAqIGF2YWlsYWJsZSwgT1IgdGhlIEBxdWV1ZSBpcyBzZXQgdG8gZmx1c2hpbmcgc3RhdGUuCi0gKiBNVCBzYWZlLgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWNzIHRoYW4gZ3N0X3BhZF9wdXNoKCkKLSAqIGFuZCBnc3RfcGFkX3B1c2hfZXZlbnQoKTogdGhpcyBmdW5jdGlvbiBvbmx5IHRha2VzIG93bmVyc2hpcCBvZiBAaXRlbSBhbmQKLSAqIHRoZSAjR3N0TWluaU9iamVjdCBjb250YWluZWQgaW4gQGl0ZW0gaWYgdGhlIHB1c2ggd2FzIHN1Y2Nlc3NmdWwuIElmICVGQUxTRQotICogaXMgcmV0dXJuZWQsIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgQGl0ZW0gYW5kIGl0cyBjb250ZW50cy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgQGl0ZW0gd2FzIHN1Y2Nlc3NmdWxseSBwdXNoZWQgb24gdGhlIEBxdWV1ZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLWdib29sZWFuCi1nc3RfZGF0YV9xdWV1ZV9wdXNoIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR3N0RGF0YVF1ZXVlSXRlbSAqIGl0ZW0pCi17Ci0gIEdzdERhdGFRdWV1ZVByaXZhdGUgKnByaXYgPSBxdWV1ZS0+cHJpdjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RBVEFfUVVFVUUgKHF1ZXVlKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaXRlbSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIGZsdXNoaW5nKTsKLQotICBTVEFUVVMgKHF1ZXVlLCAiYmVmb3JlIHB1c2hpbmciKTsKLQotICAvKiBXZSBBTFdBWVMgbmVlZCB0byBjaGVjayBmb3IgcXVldWUgZmlsbG5lc3MgKi8KLSAgaWYgKGdzdF9kYXRhX3F1ZXVlX2xvY2tlZF9pc19mdWxsIChxdWV1ZSkpIHsKLSAgICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICBpZiAoR19MSUtFTFkgKHByaXYtPmZ1bGxjYWxsYmFjaykpCi0gICAgICBwcml2LT5mdWxsY2FsbGJhY2sgKHF1ZXVlLCBwcml2LT5jaGVja2RhdGEpOwotICAgIGVsc2UKLSAgICAgIGdfc2lnbmFsX2VtaXQgKHF1ZXVlLCBnc3RfZGF0YV9xdWV1ZV9zaWduYWxzW1NJR05BTF9GVUxMXSwgMCk7Ci0gICAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIGZsdXNoaW5nKTsKLQotICAgIC8qIHNpZ25hbCBtaWdodCBoYXZlIHJlbW92ZWQgc29tZSBpdGVtcyAqLwotICAgIHdoaWxlIChnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZnVsbCAocXVldWUpKSB7Ci0gICAgICBwcml2LT53YWl0aW5nX2RlbCA9IFRSVUU7Ci0gICAgICBnX2NvbmRfd2FpdCAoJnByaXYtPml0ZW1fZGVsLCAmcHJpdi0+cWxvY2spOwotICAgICAgcHJpdi0+d2FpdGluZ19kZWwgPSBGQUxTRTsKLSAgICAgIGlmIChwcml2LT5mbHVzaGluZykKLSAgICAgICAgZ290byBmbHVzaGluZzsKLSAgICB9Ci0gIH0KLQotICBnc3RfZGF0YV9xdWV1ZV9wdXNoX2ZvcmNlX3VubG9ja2VkIChxdWV1ZSwgaXRlbSk7Ci0KLSAgU1RBVFVTIChxdWV1ZSwgImFmdGVyIHB1c2hpbmciKTsKLSAgaWYgKHByaXYtPndhaXRpbmdfYWRkKQotICAgIGdfY29uZF9zaWduYWwgKCZwcml2LT5pdGVtX2FkZCk7Ci0KLSAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1mbHVzaGluZzoKLSAgewotICAgIEdTVF9ERUJVRyAoInF1ZXVlOiVwLCB3ZSBhcmUgZmx1c2hpbmciLCBxdWV1ZSk7Ci0gICAgR1NUX0RBVEFfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF9kYXRhX3F1ZXVlX3dhaXRfbm9uX2VtcHR5IChHc3REYXRhUXVldWUgKiBxdWV1ZSkKLXsKLSAgR3N0RGF0YVF1ZXVlUHJpdmF0ZSAqcHJpdiA9IHF1ZXVlLT5wcml2OwotCi0gIHdoaWxlIChnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZW1wdHkgKHF1ZXVlKSkgewotICAgIHByaXYtPndhaXRpbmdfYWRkID0gVFJVRTsKLSAgICBnX2NvbmRfd2FpdCAoJnByaXYtPml0ZW1fYWRkLCAmcHJpdi0+cWxvY2spOwotICAgIHByaXYtPndhaXRpbmdfYWRkID0gRkFMU0U7Ci0gICAgaWYgKHByaXYtPmZsdXNoaW5nKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9kYXRhX3F1ZXVlX3BvcDogKHNraXApCi0gKiBAcXVldWU6IGEgI0dzdERhdGFRdWV1ZS4KLSAqIEBpdGVtOiBwb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm5lZCAjR3N0RGF0YVF1ZXVlSXRlbS4KLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IEBpdGVtIGF2YWlsYWJsZSBvbiB0aGUgQHF1ZXVlLiBJZiB0aGUgcXVldWUgaXMgY3VycmVudGx5Ci0gKiBlbXB0eSwgdGhlIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhdCBsZWFzdCBvbmUgaXRlbSBpcyBhdmFpbGFibGUsIE9SIHRoZQotICogQHF1ZXVlIGlzIHNldCB0byB0aGUgZmx1c2hpbmcgc3RhdGUuCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGFuIEBpdGVtIHdhcyBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gdGhlIEBxdWV1ZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLWdib29sZWFuCi1nc3RfZGF0YV9xdWV1ZV9wb3AgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBHc3REYXRhUXVldWVJdGVtICoqIGl0ZW0pCi17Ci0gIEdzdERhdGFRdWV1ZVByaXZhdGUgKnByaXYgPSBxdWV1ZS0+cHJpdjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RBVEFfUVVFVUUgKHF1ZXVlKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaXRlbSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIGZsdXNoaW5nKTsKLQotICBTVEFUVVMgKHF1ZXVlLCAiYmVmb3JlIHBvcHBpbmciKTsKLQotICBpZiAoZ3N0X2RhdGFfcXVldWVfbG9ja2VkX2lzX2VtcHR5IChxdWV1ZSkpIHsKLSAgICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICBpZiAoR19MSUtFTFkgKHByaXYtPmVtcHR5Y2FsbGJhY2spKQotICAgICAgcHJpdi0+ZW1wdHljYWxsYmFjayAocXVldWUsIHByaXYtPmNoZWNrZGF0YSk7Ci0gICAgZWxzZQotICAgICAgZ19zaWduYWxfZW1pdCAocXVldWUsIGdzdF9kYXRhX3F1ZXVlX3NpZ25hbHNbU0lHTkFMX0VNUFRZXSwgMCk7Ci0gICAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIGZsdXNoaW5nKTsKLQotICAgIGlmICghX2dzdF9kYXRhX3F1ZXVlX3dhaXRfbm9uX2VtcHR5IChxdWV1ZSkpCi0gICAgICBnb3RvIGZsdXNoaW5nOwotICB9Ci0KLSAgLyogR2V0IHRoZSBpdGVtIGZyb20gdGhlIEdRdWV1ZSAqLwotICAqaXRlbSA9IGdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZCAocHJpdi0+cXVldWUpOwotCi0gIC8qIHVwZGF0ZSBjdXJyZW50IGxldmVsIGNvdW50ZXIgKi8KLSAgaWYgKCgqaXRlbSktPnZpc2libGUpCi0gICAgcHJpdi0+Y3VyX2xldmVsLnZpc2libGUtLTsKLSAgcHJpdi0+Y3VyX2xldmVsLmJ5dGVzIC09ICgqaXRlbSktPnNpemU7Ci0gIHByaXYtPmN1cl9sZXZlbC50aW1lIC09ICgqaXRlbSktPmR1cmF0aW9uOwotCi0gIFNUQVRVUyAocXVldWUsICJhZnRlciBwb3BwaW5nIik7Ci0gIGlmIChwcml2LT53YWl0aW5nX2RlbCkKLSAgICBnX2NvbmRfc2lnbmFsICgmcHJpdi0+aXRlbV9kZWwpOwotCi0gIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJxdWV1ZTolcCwgd2UgYXJlIGZsdXNoaW5nIiwgcXVldWUpOwotICAgIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2ludAotaXNfb2ZfdHlwZSAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCi17Ci0gIHJldHVybiAhR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKGEsIEdQT0lOVEVSX1RPX1NJWkUgKGIpKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0YV9xdWV1ZV9wZWVrOiAoc2tpcCkKLSAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgotICogQGl0ZW06IHBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybmVkICNHc3REYXRhUXVldWVJdGVtLgotICoKLSAqIFJldHJpZXZlcyB0aGUgZmlyc3QgQGl0ZW0gYXZhaWxhYmxlIG9uIHRoZSBAcXVldWUgd2l0aG91dCByZW1vdmluZyBpdC4KLSAqIElmIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHRoZSBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYXQgbGVhc3QKLSAqIG9uZSBpdGVtIGlzIGF2YWlsYWJsZSwgT1IgdGhlIEBxdWV1ZSBpcyBzZXQgdG8gdGhlIGZsdXNoaW5nIHN0YXRlLgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBhbiBAaXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmcm9tIHRoZSBAcXVldWUuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2RhdGFfcXVldWVfcGVlayAoR3N0RGF0YVF1ZXVlICogcXVldWUsIEdzdERhdGFRdWV1ZUl0ZW0gKiogaXRlbSkKLXsKLSAgR3N0RGF0YVF1ZXVlUHJpdmF0ZSAqcHJpdiA9IHF1ZXVlLT5wcml2OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfREFUQV9RVUVVRSAocXVldWUpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpdGVtICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgZmx1c2hpbmcpOwotCi0gIFNUQVRVUyAocXVldWUsICJiZWZvcmUgcGVla2luZyIpOwotCi0gIGlmIChnc3RfZGF0YV9xdWV1ZV9sb2NrZWRfaXNfZW1wdHkgKHF1ZXVlKSkgewotICAgIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgIGlmIChHX0xJS0VMWSAocHJpdi0+ZW1wdHljYWxsYmFjaykpCi0gICAgICBwcml2LT5lbXB0eWNhbGxiYWNrIChxdWV1ZSwgcHJpdi0+Y2hlY2tkYXRhKTsKLSAgICBlbHNlCi0gICAgICBnX3NpZ25hbF9lbWl0IChxdWV1ZSwgZ3N0X2RhdGFfcXVldWVfc2lnbmFsc1tTSUdOQUxfRU1QVFldLCAwKTsKLSAgICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgZmx1c2hpbmcpOwotCi0gICAgaWYgKCFfZ3N0X2RhdGFfcXVldWVfd2FpdF9ub25fZW1wdHkgKHF1ZXVlKSkKLSAgICAgIGdvdG8gZmx1c2hpbmc7Ci0gIH0KLQotICAvKiBHZXQgdGhlIGl0ZW0gZnJvbSB0aGUgR1F1ZXVlICovCi0gICppdGVtID0gZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZCAocHJpdi0+cXVldWUpOwotCi0gIFNUQVRVUyAocXVldWUsICJhZnRlciBwZWVraW5nIik7Ci0gIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJxdWV1ZTolcCwgd2UgYXJlIGZsdXNoaW5nIiwgcXVldWUpOwotICAgIEdTVF9EQVRBX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZDogKHNraXApCi0gKiBAcXVldWU6IFRoZSAjR3N0RGF0YVF1ZXVlIHRvIGRyb3AgYW4gaXRlbSBmcm9tLgotICogQHR5cGU6IFRoZSAjR1R5cGUgb2YgdGhlIGl0ZW0gdG8gZHJvcC4KLSAqCi0gKiBQb3AgYW5kIHVucmVmIHRoZSBoZWFkLW1vc3QgI0dzdE1pbmlPYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gI0dUeXBlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGFuIGVsZW1lbnQgd2FzIHJlbW92ZWQuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X2RhdGFfcXVldWVfZHJvcF9oZWFkIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR1R5cGUgdHlwZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdERhdGFRdWV1ZUl0ZW0gKmxlYWsgPSBOVUxMOwotICBndWludCBpZHg7Ci0gIEdzdERhdGFRdWV1ZVByaXZhdGUgKnByaXYgPSBxdWV1ZS0+cHJpdjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0RBVEFfUVVFVUUgKHF1ZXVlKSwgRkFMU0UpOwotCi0gIEdTVF9ERUJVRyAoInF1ZXVlOiVwIiwgcXVldWUpOwotCi0gIEdTVF9EQVRBX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgaWR4ID0gZ3N0X3F1ZXVlX2FycmF5X2ZpbmQgKHByaXYtPnF1ZXVlLCBpc19vZl90eXBlLCBHU0laRV9UT19QT0lOVEVSICh0eXBlKSk7Ci0KLSAgaWYgKGlkeCA9PSAtMSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgbGVhayA9IGdzdF9xdWV1ZV9hcnJheV9kcm9wX2VsZW1lbnQgKHByaXYtPnF1ZXVlLCBpZHgpOwotCi0gIGlmIChsZWFrLT52aXNpYmxlKQotICAgIHByaXYtPmN1cl9sZXZlbC52aXNpYmxlLS07Ci0gIHByaXYtPmN1cl9sZXZlbC5ieXRlcyAtPSBsZWFrLT5zaXplOwotICBwcml2LT5jdXJfbGV2ZWwudGltZSAtPSBsZWFrLT5kdXJhdGlvbjsKLQotICBsZWFrLT5kZXN0cm95IChsZWFrKTsKLQotICByZXMgPSBUUlVFOwotCi1kb25lOgotICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICBHU1RfREVCVUcgKCJxdWV1ZTolcCAsIHJlczolZCIsIHF1ZXVlLCByZXMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qKgotICogZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQ6IChza2lwKQotICogQHF1ZXVlOiBUaGUgI0dzdERhdGFRdWV1ZQotICoKLSAqIEluZm9ybSB0aGUgcXVldWUgdGhhdCB0aGUgbGltaXRzIGZvciB0aGUgZnVsbG5lc3MgY2hlY2sgaGF2ZSBjaGFuZ2VkIGFuZCB0aGF0Ci0gKiBhbnkgYmxvY2tpbmcgZ3N0X2RhdGFfcXVldWVfcHVzaCgpIHNob3VsZCBiZSB1bmJsb2NrZWQgdG8gcmVjaGVjayB0aGUgbGltaXRzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKQotewotICBHc3REYXRhUXVldWVQcml2YXRlICpwcml2ID0gcXVldWUtPnByaXY7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0RBVEFfUVVFVUUgKHF1ZXVlKSk7Ci0KLSAgR1NUX0RBVEFfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOwotICBpZiAocHJpdi0+d2FpdGluZ19kZWwpIHsKLSAgICBHU1RfREVCVUcgKCJzaWduYWwgZGVsIik7Ci0gICAgZ19jb25kX3NpZ25hbCAoJnByaXYtPml0ZW1fZGVsKTsKLSAgfQotICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLX0KLQotLyoqCi0gKiBnc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWw6IChza2lwKQotICogQHF1ZXVlOiBUaGUgI0dzdERhdGFRdWV1ZQotICogQGxldmVsOiB0aGUgbG9jYXRpb24gdG8gc3RvcmUgdGhlIHJlc3VsdAotICoKLSAqIEdldCB0aGUgY3VycmVudCBsZXZlbCBvZiB0aGUgcXVldWUuCi0gKgotICogU2luY2U6IDEuMgotICovCi12b2lkCi1nc3RfZGF0YV9xdWV1ZV9nZXRfbGV2ZWwgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBHc3REYXRhUXVldWVTaXplICogbGV2ZWwpCi17Ci0gIEdzdERhdGFRdWV1ZVByaXZhdGUgKnByaXYgPSBxdWV1ZS0+cHJpdjsKLQotICBtZW1jcHkgKGxldmVsLCAoJnByaXYtPmN1cl9sZXZlbCksIHNpemVvZiAoR3N0RGF0YVF1ZXVlU2l6ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RhdGFfcXVldWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kYXRhX3F1ZXVlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REYXRhUXVldWUgKnF1ZXVlID0gR1NUX0RBVEFfUVVFVUUgKG9iamVjdCk7Ci0gIEdzdERhdGFRdWV1ZVByaXZhdGUgKnByaXYgPSBxdWV1ZS0+cHJpdjsKLQotICBHU1RfREFUQV9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NVUl9MRVZFTF9CWVRFUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBwcml2LT5jdXJfbGV2ZWwuYnl0ZXMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NVUl9MRVZFTF9WSVNJQkxFOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHByaXYtPmN1cl9sZXZlbC52aXNpYmxlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DVVJfTEVWRUxfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHByaXYtPmN1cl9sZXZlbC50aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBHU1RfREFUQV9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmggYi9saWJzL2dzdC9iYXNlL2dzdGRhdGFxdWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWZkOWJlLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGRhdGFxdWV1ZS5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9EQVRBX1FVRVVFX0hfXwotI2RlZmluZSBfX0dTVF9EQVRBX1FVRVVFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX0RBVEFfUVVFVUUgXAotICAoZ3N0X2RhdGFfcXVldWVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0RBVEFfUVVFVUUob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9EQVRBX1FVRVVFLEdzdERhdGFRdWV1ZSkpCi0jZGVmaW5lIEdTVF9EQVRBX1FVRVVFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0RBVEFfUVVFVUUsR3N0RGF0YVF1ZXVlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfREFUQV9RVUVVRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0RBVEFfUVVFVUUpKQotI2RlZmluZSBHU1RfSVNfREFUQV9RVUVVRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9EQVRBX1FVRVVFKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3REYXRhUXVldWUgR3N0RGF0YVF1ZXVlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERhdGFRdWV1ZUNsYXNzIEdzdERhdGFRdWV1ZUNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERhdGFRdWV1ZVNpemUgR3N0RGF0YVF1ZXVlU2l6ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3REYXRhUXVldWVJdGVtIEdzdERhdGFRdWV1ZUl0ZW07Ci10eXBlZGVmIHN0cnVjdCBfR3N0RGF0YVF1ZXVlUHJpdmF0ZSBHc3REYXRhUXVldWVQcml2YXRlOwotCi0vKioKLSAqIEdzdERhdGFRdWV1ZUl0ZW06IChza2lwKQotICogQG9iamVjdDogdGhlICNHc3RNaW5pT2JqZWN0IHRvIHF1ZXVlLgotICogQHNpemU6IHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBtaW5pb2JqZWN0LgotICogQGR1cmF0aW9uOiB0aGUgZHVyYXRpb24gaW4gI0dzdENsb2NrVGltZSBvZiB0aGUgbWluaW9iamVjdC4gQ2FuIG5vdCBiZQotICogJUdTVF9DTE9DS19USU1FX05PTkUuCi0gKiBAdmlzaWJsZTogJVRSVUUgaWYgQG9iamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBhIHZpc2libGUgb2JqZWN0LgotICogQGRlc3Ryb3k6IFRoZSAjR0Rlc3Ryb3lOb3RpZnkgZnVuY3Rpb24gdG8gdXNlIHRvIGZyZWUgdGhlICNHc3REYXRhUXVldWVJdGVtLgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWxzbyBkcm9wIHRoZSByZWZlcmVuY2UgdG8gQG9iamVjdCB0aGUgb3duZXIgb2YgdGhlCi0gKiAjR3N0RGF0YVF1ZXVlSXRlbSBpcyBhc3N1bWVkIHRvIGhvbGQuCi0gKgotICogU3RydWN0dXJlIHVzZWQgYnkgI0dzdERhdGFRdWV1ZS4gWW91IGNhbiBzdXBwbHkgYSBkaWZmZXJlbnQgc3RydWN0dXJlLCBhcwotICogbG9uZyBhcyB0aGUgdG9wIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgaWRlbnRpY2FsIHRvIHRoaXMgc3RydWN0dXJlLgotICovCi0KLXN0cnVjdCBfR3N0RGF0YVF1ZXVlSXRlbQotewotICBHc3RNaW5pT2JqZWN0ICpvYmplY3Q7Ci0gIGd1aW50IHNpemU7Ci0gIGd1aW50NjQgZHVyYXRpb247Ci0gIGdib29sZWFuIHZpc2libGU7Ci0KLSAgLyogdXNlciBzdXBwbGllZCBkZXN0cm95IGZ1bmN0aW9uICovCi0gIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0vKioKLSAqIEdzdERhdGFRdWV1ZVNpemU6IChza2lwKQotICogQHZpc2libGU6IG51bWJlciBvZiBidWZmZXJzCi0gKiBAYnl0ZXM6IG51bWJlciBvZiBieXRlcwotICogQHRpbWU6IGFtb3VudCBvZiB0aW1lCi0gKgotICogU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIHNpemUgb2YgYSBxdWV1ZS4KLSAqLwotc3RydWN0IF9Hc3REYXRhUXVldWVTaXplCi17Ci0gIGd1aW50IHZpc2libGU7Ci0gIGd1aW50IGJ5dGVzOwotICBndWludDY0IHRpbWU7Ci19OwotCi0vKioKLSAqIEdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uOiAoc2tpcCkKLSAqIEBxdWV1ZTogYSAjR3N0RGF0YVF1ZXVlLgotICogQHZpc2libGU6IFRoZSBudW1iZXIgb2YgdmlzaWJsZSBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLgotICogQGJ5dGVzOiBUaGUgYW1vdW50IG9mIGJ5dGVzIGN1cnJlbnRseSBpbiB0aGUgcXVldWUuCi0gKiBAdGltZTogVGhlIGFjY3VtdWxhdGVkIGR1cmF0aW9uIG9mIHRoZSBpdGVtcyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLgotICogQGNoZWNrZGF0YTogVGhlICNncG9pbnRlciByZWdpc3RlcmVkIHdoZW4gdGhlICNHc3REYXRhUXVldWUgd2FzIGNyZWF0ZWQuCi0gKiAKLSAqIFRoZSBwcm90b3R5cGUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gaW5mb3JtIHRoZSBxdWV1ZSB0aGF0IGl0IHNob3VsZCBiZQotICogY29uc2lkZXJlZCBhcyBmdWxsLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBxdWV1ZSBzaG91bGQgYmUgY29uc2lkZXJlZCBmdWxsLgotICovCi10eXBlZGVmIGdib29sZWFuICgqR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24pIChHc3REYXRhUXVldWUgKiBxdWV1ZSwKLSAgICBndWludCB2aXNpYmxlLCBndWludCBieXRlcywgZ3VpbnQ2NCB0aW1lLCBncG9pbnRlciBjaGVja2RhdGEpOwotCi10eXBlZGVmIHZvaWQgKCpHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2spIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgZ3BvaW50ZXIgY2hlY2tkYXRhKTsKLXR5cGVkZWYgdm9pZCAoKkdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2spIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgZ3BvaW50ZXIgY2hlY2tkYXRhKTsKLQotLyoqCi0gKiBHc3REYXRhUXVldWU6Ci0gKiBAb2JqZWN0OiB0aGUgcGFyZW50IHN0cnVjdHVyZQotICoKLSAqIE9wYXF1ZSAjR3N0RGF0YVF1ZXVlIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3REYXRhUXVldWUKLXsKLSAgR09iamVjdCBvYmplY3Q7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdERhdGFRdWV1ZVByaXZhdGUgKnByaXY7Ci0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotLyoqCi0gKiBHc3REYXRhUXVldWVDbGFzczoKLSAqLwotc3RydWN0IF9Hc3REYXRhUXVldWVDbGFzcwotewotICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIHNpZ25hbHMgKi8KLSAgdm9pZCAoKmVtcHR5KSAoR3N0RGF0YVF1ZXVlICogcXVldWUpOwotICB2b2lkICgqZnVsbCkgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKTsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlIGdzdF9kYXRhX3F1ZXVlX2dldF90eXBlICh2b2lkKTsKLQotR3N0RGF0YVF1ZXVlICogZ3N0X2RhdGFfcXVldWVfbmV3ICAgICAgICAgICAgKEdzdERhdGFRdWV1ZUNoZWNrRnVsbEZ1bmN0aW9uIGNoZWNrZnVsbCwKLQkJCQkJICAgICAgR3N0RGF0YVF1ZXVlRnVsbENhbGxiYWNrIGZ1bGxjYWxsYmFjaywKLQkJCQkJICAgICAgR3N0RGF0YVF1ZXVlRW1wdHlDYWxsYmFjayBlbXB0eWNhbGxiYWNrLAotCQkJCQkgICAgICBncG9pbnRlciBjaGVja2RhdGEpIEdfR05VQ19NQUxMT0M7Ci0KLWdib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX3B1c2ggICAgICAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR3N0RGF0YVF1ZXVlSXRlbSAqIGl0ZW0pOwotZ2Jvb2xlYW4gICAgICAgZ3N0X2RhdGFfcXVldWVfcHVzaF9mb3JjZSAgICAgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBHc3REYXRhUXVldWVJdGVtICogaXRlbSk7Ci0KLWdib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX3BvcCAgICAgICAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR3N0RGF0YVF1ZXVlSXRlbSAqKiBpdGVtKTsKLWdib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX3BlZWsgICAgICAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR3N0RGF0YVF1ZXVlSXRlbSAqKiBpdGVtKTsKLQotdm9pZCAgICAgICAgICAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggICAgICAgICAgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlKTsKLQotdm9pZCAgICAgICAgICAgZ3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nICAgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLCBnYm9vbGVhbiBmbHVzaGluZyk7Ci0KLWdib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX2Ryb3BfaGVhZCAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR1R5cGUgdHlwZSk7Ci0KLWdib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGwgICAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSk7Ci0KLWdib29sZWFuICAgICAgIGdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5ICAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSk7Ci0KLXZvaWQgICAgICAgICAgIGdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbCAgICAgIChHc3REYXRhUXVldWUgKiBxdWV1ZSwgR3N0RGF0YVF1ZXVlU2l6ZSAqbGV2ZWwpOwotCi12b2lkICAgICAgICAgICBnc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZCAoR3N0RGF0YVF1ZXVlICogcXVldWUpOwotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdERhdGFRdWV1ZSwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfREFUQV9RVUVVRV9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmMgYi9saWJzL2dzdC9iYXNlL2dzdGZsb3djb21iaW5lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzcxOThmLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIEF1dGhvcjogVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0gKgotICogZ3N0Zmxvd2NvbWJpbmVyLmM6IHV0aWxpdHkgdG8gY29tYmluZSBtdWx0aXBsZSBmbG93IHJldHVybnMgaW50byBhIHNpbmdsZSBvbmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0Zmxvd2NvbWJpbmVyCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFV0aWxpdHkgdG8gY29tYmluZSBtdWx0aXBsZSBmbG93IHJldHVybnMgaW50byBvbmUKLSAqCi0gKiBVdGlsaXR5IHN0cnVjdCB0byBoZWxwIGhhbmRsaW5nICNHc3RGbG93UmV0dXJuIGNvbWJpbmF0aW9uLiBVc2VmdWwgZm9yCi0gKiAjR3N0RWxlbWVudDwhLS0gLS0+cyB0aGF0IGhhdmUgbXVsdGlwbGUgc291cmNlIHBhZHMgYW5kIG5lZWQgdG8gY29tYmluZQotICogdGhlIGRpZmZlcmVudCAjR3N0Rmxvd1JldHVybiBmb3IgdGhvc2UgcGFkcy4KLSAqCi0gKiAjR3N0Rmxvd0NvbWJpbmVyIHdvcmtzIGJ5IHVzaW5nIHRoZSBsYXN0ICNHc3RGbG93UmV0dXJuIGZvciBhbGwgI0dzdFBhZAotICogaXQgaGFzIGluIGl0cyBsaXN0IGFuZCBjb21wdXRlcyB0aGUgY29tYmluZWQgcmV0dXJuIHZhbHVlIGFuZCBwcm92aWRlcwotICogaXQgdG8gdGhlIGNhbGxlci4KLSAqCi0gKiBUbyBhZGQgYSBuZXcgcGFkIHRvIHRoZSAjR3N0Rmxvd0NvbWJpbmVyIHVzZSBnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkKCkuCi0gKiBUaGUgbmV3ICNHc3RQYWQgaXMgc3RvcmVkIHdpdGggYSBkZWZhdWx0IHZhbHVlIG9mICVHU1RfRkxPV19PSy4KLSAqCi0gKiBJbiBjYXNlIHlvdSB3YW50IGEgI0dzdFBhZCB0byBiZSByZW1vdmVkLCB1c2UgZ3N0X2Zsb3dfY29tYmluZXJfcmVtb3ZlX3BhZCgpLgotICoKLSAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoaXMgc3RydWN0IGlzbid0IHRocmVhZCBzYWZlIGFzIGl0cyBkZXNpZ25lZCB0byBiZQotICogIHVzZWQgYnkgZGVtdXhlcnMsIHRob3NlIHVzdWFsbHkgd2lsbCBoYXZlIGEgc2luZ2xlIHRocmVhZCBvcGVyYXRpbmcgaXQuCi0gKgotICogVGhlc2UgZnVuY3Rpb25zIHdpbGwgdGFrZSByZWZzIG9uIHRoZSBwYXNzZWQgI0dzdFBhZDwhLS0gLS0+cy4KLSAqCi0gKiBBc2lkZSBmcm9tIHJlZHVjaW5nIHRoZSB1c2VyJ3MgY29kZSBzaXplLCB0aGUgbWFpbiBhZHZhbnRhZ2Ugb2YgdXNpbmcgdGhpcwotICogaGVscGVyIHN0cnVjdCBpcyB0byBmb2xsb3cgdGhlIHN0YW5kYXJkIHJ1bGVzIGZvciAjR3N0Rmxvd1JldHVybiBjb21iaW5hdGlvbi4KLSAqIFRoZXNlIHJ1bGVzIGFyZToKLSAqCi0gKiAqICVHU1RfRkxPV19FT1M6IG9ubHkgaWYgYWxsIHJldHVybnMgYXJlIEVPUyB0b28KLSAqICogJUdTVF9GTE9XX05PVF9MSU5LRUQ6IG9ubHkgaWYgYWxsIHJldHVybnMgYXJlIE5PVF9MSU5LRUQgdG9vCi0gKiAqICVHU1RfRkxPV19FUlJPUiBvciBiZWxvdzogaWYgYXQgbGVhc3Qgb25lIHJldHVybnMgYW4gZXJyb3IgcmV0dXJuCi0gKiAqICVHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDogaWYgYXQgbGVhc3Qgb25lIHJldHVybnMgYSBub3QtbmVnb3RpYXRlZCByZXR1cm4KLSAqICogJUdTVF9GTE9XX0ZMVVNISU5HOiBpZiBhdCBsZWFzdCBvbmUgcmV0dXJucyBmbHVzaGluZwotICogKiAlR1NUX0ZMT1dfT0s6IG90aGVyd2lzZQotICoKLSAqICVHU1RfRkxPV19FUlJPUiBvciBiZWxvdywgR1NUX0ZMT1dfTk9UX05FR09USUFURUQgYW5kIEdTVF9GTE9XX0ZMVVNISU5HIGFyZQotICogcmV0dXJuZWQgaW1tZWRpYXRlbGx5IGZyb20gdGhlIGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93KCkgZnVuY3Rpb24uCi0gKgotICogU2luY2U6IDEuNAotICovCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAiZ3N0Zmxvd2NvbWJpbmVyLmgiCi0KLXN0cnVjdCBfR3N0Rmxvd0NvbWJpbmVyCi17Ci0gIEdRdWV1ZSBwYWRzOwotCi0gIEdzdEZsb3dSZXR1cm4gbGFzdF9yZXQ7Ci0gIHZvbGF0aWxlIGdpbnQgcmVmX2NvdW50OwotfTsKLQotc3RhdGljIEdzdEZsb3dDb21iaW5lciAqZ3N0X2Zsb3dfY29tYmluZXJfcmVmIChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lcik7Ci1zdGF0aWMgdm9pZCBnc3RfZmxvd19jb21iaW5lcl91bnJlZiAoR3N0Rmxvd0NvbWJpbmVyICogY29tYmluZXIpOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChmbG93Y29tYmluZXJfZGJnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGZsb3djb21iaW5lcl9kYmcKLQotR19ERUZJTkVfQk9YRURfVFlQRV9XSVRIX0NPREUgKEdzdEZsb3dDb21iaW5lciwgZ3N0X2Zsb3dfY29tYmluZXIsCi0gICAgKEdCb3hlZENvcHlGdW5jKSBnc3RfZmxvd19jb21iaW5lcl9yZWYsCi0gICAgKEdCb3hlZEZyZWVGdW5jKSBnc3RfZmxvd19jb21iaW5lcl91bnJlZiwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZmxvd2NvbWJpbmVyX2RiZywgImZsb3djb21iaW5lciIsIDAsCi0gICAgICAgICJGbG93IENvbWJpbmVyIikpOwotCi0vKioKLSAqIGdzdF9mbG93X2NvbWJpbmVyX25ldzoKLSAqCi0gKiBDcmVhdGVzIGEgbmV3ICNHc3RGbG93Q29tYmluZXIsIHVzZSBnc3RfZmxvd19jb21iaW5lcl9mcmVlKCkgdG8gZnJlZSBpdC4KLSAqCi0gKiBSZXR1cm5zOiBBIG5ldyAjR3N0Rmxvd0NvbWJpbmVyCi0gKiBTaW5jZTogMS40Ci0gKi8KLUdzdEZsb3dDb21iaW5lciAqCi1nc3RfZmxvd19jb21iaW5lcl9uZXcgKHZvaWQpCi17Ci0gIEdzdEZsb3dDb21iaW5lciAqY29tYmluZXIgPSBnX3NsaWNlX25ldyAoR3N0Rmxvd0NvbWJpbmVyKTsKLQotICBnX3F1ZXVlX2luaXQgKCZjb21iaW5lci0+cGFkcyk7Ci0gIGNvbWJpbmVyLT5sYXN0X3JldCA9IEdTVF9GTE9XX09LOwotICBjb21iaW5lci0+cmVmX2NvdW50ID0gMTsKLQotICAvKiBNYWtlIHN1cmUgZGVidWcgY2F0ZWdvcnkgaXMgaW5pdGlhbGlzZWQgKi8KLSAgZ3N0X2Zsb3dfY29tYmluZXJfZ2V0X3R5cGUgKCk7Ci0KLSAgcmV0dXJuIGNvbWJpbmVyOwotfQotCi0vKioKLSAqIGdzdF9mbG93X2NvbWJpbmVyX2ZyZWU6Ci0gKiBAY29tYmluZXI6IHRoZSAjR3N0Rmxvd0NvbWJpbmVyIHRvIGZyZWUKLSAqCi0gKiBGcmVlcyBhICNHc3RGbG93Q29tYmluZXIgc3RydWN0IGFuZCBhbGwgaXRzIGludGVybmFsIGRhdGEuCi0gKgotICogU2luY2U6IDEuNAotICovCi12b2lkCi1nc3RfZmxvd19jb21iaW5lcl9mcmVlIChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lcikKLXsKLSAgZ3N0X2Zsb3dfY29tYmluZXJfdW5yZWYgKGNvbWJpbmVyKTsKLX0KLQotc3RhdGljIEdzdEZsb3dDb21iaW5lciAqCi1nc3RfZmxvd19jb21iaW5lcl9yZWYgKEdzdEZsb3dDb21iaW5lciAqIGNvbWJpbmVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY29tYmluZXIgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZ19hdG9taWNfaW50X2luYyAoJmNvbWJpbmVyLT5yZWZfY291bnQpOwotCi0gIHJldHVybiBjb21iaW5lcjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbG93X2NvbWJpbmVyX3VucmVmIChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lcikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY29tYmluZXIgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNvbWJpbmVyLT5yZWZfY291bnQgPiAwKTsKLQotICBpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCAoJmNvbWJpbmVyLT5yZWZfY291bnQpKSB7Ci0gICAgR3N0UGFkICpwYWQ7Ci0KLSAgICB3aGlsZSAoKHBhZCA9IGdfcXVldWVfcG9wX2hlYWQgKCZjb21iaW5lci0+cGFkcykpKQotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICAgIGdfc2xpY2VfZnJlZSAoR3N0Rmxvd0NvbWJpbmVyLCBjb21iaW5lcik7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfZmxvd19jb21iaW5lcl9jbGVhcjoKLSAqIEBjb21iaW5lcjogdGhlICNHc3RGbG93Q29tYmluZXIgdG8gY2xlYXIKLSAqCi0gKiBSZW1vdmVzIGFsbCBwYWRzIGZyb20gYSAjR3N0Rmxvd0NvbWJpbmVyIGFuZCByZXNldHMgaXQgdG8gaXRzIGluaXRpYWwgc3RhdGUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfZmxvd19jb21iaW5lcl9jbGVhciAoR3N0Rmxvd0NvbWJpbmVyICogY29tYmluZXIpCi17Ci0gIEdzdFBhZCAqcGFkOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNvbWJpbmVyICE9IE5VTEwpOwotCi0gIHdoaWxlICgocGFkID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmNvbWJpbmVyLT5wYWRzKSkpCi0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgY29tYmluZXItPmxhc3RfcmV0ID0gR1NUX0ZMT1dfT0s7Ci19Ci0KLS8qKgotICogZ3N0X2Zsb3dfY29tYmluZXJfcmVzZXQ6Ci0gKiBAY29tYmluZXI6IHRoZSAjR3N0Rmxvd0NvbWJpbmVyIHRvIGNsZWFyCi0gKgotICogUmVzZXQgZmxvdyBjb21iaW5lciBhbmQgYWxsIHBhZHMgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZSB3aXRob3V0IHJlbW92aW5nIHBhZHMuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfZmxvd19jb21iaW5lcl9yZXNldCAoR3N0Rmxvd0NvbWJpbmVyICogY29tYmluZXIpCi17Ci0gIEdMaXN0ICppdGVyOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNvbWJpbmVyICE9IE5VTEwpOwotCi0gIEdTVF9ERUJVRyAoIlJlc2V0IGZsb3cgcmV0dXJucyIpOwotCi0gIGZvciAoaXRlciA9IGNvbWJpbmVyLT5wYWRzLmhlYWQ7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7Ci0gICAgR1NUX1BBRF9MQVNUX0ZMT1dfUkVUVVJOIChpdGVyLT5kYXRhKSA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgY29tYmluZXItPmxhc3RfcmV0ID0gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmxvd19jb21iaW5lcl9nZXRfZmxvdyAoR3N0Rmxvd0NvbWJpbmVyICogY29tYmluZXIpCi17Ci0gIEdzdEZsb3dSZXR1cm4gY3JldCA9IEdTVF9GTE9XX09LOwotICBnYm9vbGVhbiBhbGxfZW9zID0gVFJVRTsKLSAgZ2Jvb2xlYW4gYWxsX25vdGxpbmtlZCA9IFRSVUU7Ci0gIEdMaXN0ICppdGVyOwotCi0gIEdTVF9ERUJVRyAoIkNvbWJpbmluZyBmbG93IHJldHVybnMiKTsKLQotICBmb3IgKGl0ZXIgPSBjb21iaW5lci0+cGFkcy5oZWFkOyBpdGVyOyBpdGVyID0gaXRlci0+bmV4dCkgewotICAgIEdzdEZsb3dSZXR1cm4gZnJldCA9IEdTVF9QQURfTEFTVF9GTE9XX1JFVFVSTiAoaXRlci0+ZGF0YSk7Ci0KLSAgICBpZiAoZnJldCA8PSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCB8fCBmcmV0ID09IEdTVF9GTE9XX0ZMVVNISU5HKSB7Ci0gICAgICBHU1RfREVCVUcgKCJFcnJvciBmbG93IHJldHVybiBmb3VuZCwgcmV0dXJuaW5nIik7Ci0gICAgICBjcmV0ID0gZnJldDsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBpZiAoZnJldCAhPSBHU1RfRkxPV19OT1RfTElOS0VEKSB7Ci0gICAgICBhbGxfbm90bGlua2VkID0gRkFMU0U7Ci0gICAgICBpZiAoZnJldCAhPSBHU1RfRkxPV19FT1MpCi0gICAgICAgIGFsbF9lb3MgPSBGQUxTRTsKLSAgICB9Ci0gIH0KLSAgaWYgKGFsbF9ub3RsaW5rZWQpCi0gICAgY3JldCA9IEdTVF9GTE9XX05PVF9MSU5LRUQ7Ci0gIGVsc2UgaWYgKGFsbF9lb3MpCi0gICAgY3JldCA9IEdTVF9GTE9XX0VPUzsKLQotZG9uZToKLSAgR1NUX0RFQlVHICgiQ29tYmluZWQgZmxvdyByZXR1cm46ICVzICglZCkiLCBnc3RfZmxvd19nZXRfbmFtZSAoY3JldCksIGNyZXQpOwotICByZXR1cm4gY3JldDsKLX0KLQotLyoqCi0gKiBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfZmxvdzoKLSAqIEBjb21iaW5lcjogdGhlICNHc3RGbG93Q29tYmluZXIKLSAqIEBmcmV0OiB0aGUgbGF0ZXN0ICNHc3RGbG93UmV0dXJuIHJlY2VpdmVkIGZvciBhIHBhZCBpbiB0aGlzICNHc3RGbG93Q29tYmluZXIKLSAqCi0gKiBDb21wdXRlcyB0aGUgY29tYmluZWQgZmxvdyByZXR1cm4gZm9yIHRoZSBwYWRzIGluIGl0LgotICoKLSAqIFRoZSAjR3N0Rmxvd1JldHVybiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBsYXN0IGZsb3cgcmV0dXJuIHVwZGF0ZSBmb3IgYSBwYWQKLSAqIGluIHRoaXMgI0dzdEZsb3dDb21iaW5lci4gSXQgd2lsbCB1c2UgdGhpcyB2YWx1ZSB0byBiZSBhYmxlIHRvIHNob3J0Y3V0IHNvbWUKLSAqIGNvbWJpbmF0aW9ucyBhbmQgYXZvaWQgbG9va2luZyBvdmVyIGFsbCBwYWRzIGFnYWluLiBlLmcuIFRoZSBsYXN0IGNvbWJpbmVkCi0gKiByZXR1cm4gaXMgdGhlIHNhbWUgYXMgdGhlIGxhdGVzdCBvYnRhaW5lZCAjR3N0Rmxvd1JldHVybi4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgY29tYmluZWQgI0dzdEZsb3dSZXR1cm4KLSAqIFNpbmNlOiAxLjQKLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX2Zsb3cgKEdzdEZsb3dDb21iaW5lciAqIGNvbWJpbmVyLCBHc3RGbG93UmV0dXJuIGZyZXQpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb21iaW5lciAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgaWYgKGNvbWJpbmVyLT5sYXN0X3JldCA9PSBmcmV0KSB7Ci0gICAgcmV0dXJuIGZyZXQ7Ci0gIH0KLQotICBpZiAoZnJldCA8PSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCB8fCBmcmV0ID09IEdTVF9GTE9XX0ZMVVNISU5HKSB7Ci0gICAgcmV0ID0gZnJldDsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSBnc3RfZmxvd19jb21iaW5lcl9nZXRfZmxvdyAoY29tYmluZXIpOwotICB9Ci0gIGNvbWJpbmVyLT5sYXN0X3JldCA9IHJldDsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfcGFkX2Zsb3c6Ci0gKiBAY29tYmluZXI6IHRoZSAjR3N0Rmxvd0NvbWJpbmVyCi0gKiBAcGFkOiB0aGUgI0dzdFBhZCB3aG9zZSAjR3N0Rmxvd1JldHVybiB0byB1cGRhdGUKLSAqIEBmcmV0OiB0aGUgbGF0ZXN0ICNHc3RGbG93UmV0dXJuIHJlY2VpdmVkIGZvciBhIHBhZCBpbiB0aGlzICNHc3RGbG93Q29tYmluZXIKLSAqCi0gKiBTZXRzIHRoZSBwcm92aWRlZCBwYWQncyBsYXN0IGZsb3cgcmV0dXJuIHRvIHByb3ZpZGVkIHZhbHVlIGFuZCBjb21wdXRlcwotICogdGhlIGNvbWJpbmVkIGZsb3cgcmV0dXJuIGZvciB0aGUgcGFkcyBpbiBpdC4KLSAqCi0gKiBUaGUgI0dzdEZsb3dSZXR1cm4gcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgbGFzdCBmbG93IHJldHVybiB1cGRhdGUgZm9yIGEgcGFkCi0gKiBpbiB0aGlzICNHc3RGbG93Q29tYmluZXIuIEl0IHdpbGwgdXNlIHRoaXMgdmFsdWUgdG8gYmUgYWJsZSB0byBzaG9ydGN1dCBzb21lCi0gKiBjb21iaW5hdGlvbnMgYW5kIGF2b2lkIGxvb2tpbmcgb3ZlciBhbGwgcGFkcyBhZ2Fpbi4gZS5nLiBUaGUgbGFzdCBjb21iaW5lZAotICogcmV0dXJuIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXRlc3Qgb2J0YWluZWQgI0dzdEZsb3dSZXR1cm4uCi0gKgotICogUmV0dXJuczogVGhlIGNvbWJpbmVkICNHc3RGbG93UmV0dXJuCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdyAoR3N0Rmxvd0NvbWJpbmVyICogY29tYmluZXIsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RGbG93UmV0dXJuIGZyZXQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWQgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIEdTVF9QQURfTEFTVF9GTE9XX1JFVFVSTiAocGFkKSA9IGZyZXQ7Ci0KLSAgcmV0dXJuIGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93IChjb21iaW5lciwgZnJldCk7Ci19Ci0KLS8qKgotICogZ3N0X2Zsb3dfY29tYmluZXJfYWRkX3BhZDoKLSAqIEBjb21iaW5lcjogdGhlICNHc3RGbG93Q29tYmluZXIKLSAqIEBwYWQ6ICh0cmFuc2ZlciBub25lKTogdGhlICNHc3RQYWQgdGhhdCBpcyBiZWluZyBhZGRlZAotICoKLSAqIEFkZHMgYSBuZXcgI0dzdFBhZCB0byB0aGUgI0dzdEZsb3dDb21iaW5lci4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWQgKEdzdEZsb3dDb21iaW5lciAqIGNvbWJpbmVyLCBHc3RQYWQgKiBwYWQpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNvbWJpbmVyICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChwYWQgIT0gTlVMTCk7Ci0KLSAgZ19xdWV1ZV9wdXNoX2hlYWQgKCZjb21iaW5lci0+cGFkcywgZ3N0X29iamVjdF9yZWYgKHBhZCkpOwotfQotCi0vKioKLSAqIGdzdF9mbG93X2NvbWJpbmVyX3JlbW92ZV9wYWQ6Ci0gKiBAY29tYmluZXI6IHRoZSAjR3N0Rmxvd0NvbWJpbmVyCi0gKiBAcGFkOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0UGFkIHRvIHJlbW92ZQotICoKLSAqIFJlbW92ZXMgYSAjR3N0UGFkIGZyb20gdGhlICNHc3RGbG93Q29tYmluZXIuCi0gKgotICogU2luY2U6IDEuNAotICovCi12b2lkCi1nc3RfZmxvd19jb21iaW5lcl9yZW1vdmVfcGFkIChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lciwgR3N0UGFkICogcGFkKQotewotICBnX3JldHVybl9pZl9mYWlsIChjb21iaW5lciAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAocGFkICE9IE5VTEwpOwotCi0gIGlmIChnX3F1ZXVlX3JlbW92ZSAoJmNvbWJpbmVyLT5wYWRzLCBwYWQpKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGZsb3djb21iaW5lci5oIGIvbGlicy9nc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVhMzkzNy4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdGZsb3djb21iaW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIEF1dGhvcjogVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0gKgotICogZ3N0Zmxvd2NvbWJpbmVyLmg6IHV0aWxpdHkgdG8gY29tYmluZSBtdWx0aXBsZSBmbG93IHJldHVybnMgaW50byBhIHNpbmdsZSBvbmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfRkxPV19DT01CSU5FUl9IX18KLSNkZWZpbmUgX19HU1RfRkxPV19DT01CSU5FUl9IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9GTE9XX0NPTUJJTkVSIGdzdF9mbG93X2NvbWJpbmVyX2dldF90eXBlKCkKLQotLyoqCi0gKiBHc3RGbG93Q29tYmluZXI6Ci0gKgotICogT3BhcXVlIGhlbHBlciBzdHJ1Y3R1cmUgdG8gYWdncmVnYXRlIGZsb3cgcmV0dXJucy4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RGbG93Q29tYmluZXIgR3N0Rmxvd0NvbWJpbmVyOwotCi1Hc3RGbG93Q29tYmluZXIgKiBnc3RfZmxvd19jb21iaW5lcl9uZXcgKHZvaWQpOwotCi12b2lkICAgICAgICAgICAgICBnc3RfZmxvd19jb21iaW5lcl9mcmVlIChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lcik7Ci0KLUdzdEZsb3dSZXR1cm4gICAgIGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93IChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lciwgR3N0Rmxvd1JldHVybiBmcmV0KTsKLQotR3N0Rmxvd1JldHVybiAgICAgZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93IChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lciwgR3N0UGFkICogcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGbG93UmV0dXJuIGZyZXQpOwotCi12b2lkICAgICAgICAgICAgICBnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkICAgIChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lciwgR3N0UGFkICogcGFkKTsKLQotdm9pZCAgICAgICAgICAgICAgZ3N0X2Zsb3dfY29tYmluZXJfcmVtb3ZlX3BhZCAoR3N0Rmxvd0NvbWJpbmVyICogY29tYmluZXIsIEdzdFBhZCAqIHBhZCk7Ci0KLXZvaWQgICAgICAgICAgICAgIGdzdF9mbG93X2NvbWJpbmVyX2NsZWFyIChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lcik7Ci0KLXZvaWQgICAgICAgICAgICAgIGdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0IChHc3RGbG93Q29tYmluZXIgKiBjb21iaW5lcik7Ci0KLUdUeXBlICAgICAgICAgICAgIGdzdF9mbG93X2NvbWJpbmVyX2dldF90eXBlICh2b2lkKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RGbG93Q29tYmluZXIsIGdzdF9mbG93X2NvbWJpbmVyX2ZyZWUpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZMT1dfQ09NQklORVJfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGluZGV4LmMgYi9saWJzL2dzdC9iYXNlL2dzdGluZGV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NWMyYzcuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RpbmRleC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAwMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biAoaHR0cDovL3d3dy5yaWRnZXJ1bi5jb20vKQotICogV3JpdHRlbiBieSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQHJpZGdlcnVuLmNvbT4KLSAqCi0gKiBnc3RpbmRleC5jOiBJbmRleCBmb3IgbWFwcGluZ3MgYW5kIG90aGVyIGRhdGEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKgotICogU0VDVElPTjpnc3RpbmRleAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBHZW5lcmF0ZSBpbmRleGVzIG9uIG9iamVjdHMKLSAqIEBzZWVfYWxzbzogI0dzdEluZGV4RmFjdG9yeQotICoKLSAqICNHc3RJbmRleCBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgc3RyZWFtIGluZGV4IG9mIG9uZSBvciBtb3JlIGVsZW1lbnRzCi0gKiBpbiBhIHBpcGVsaW5lLgotICoKLSAqIEVsZW1lbnRzIHdpbGwgb3ZlcmxvYWQgdGhlIHNldF9pbmRleCBhbmQgZ2V0X2luZGV4IHZpcnR1YWwgbWV0aG9kcyBpbgotICogI0dzdEVsZW1lbnQuIFdoZW4gc3RyZWFtaW5nIGRhdGEsIHRoZSBlbGVtZW50IHdpbGwgYWRkIGluZGV4IGVudHJpZXMgaWYgaXQKLSAqIGhhcyBhbiBpbmRleCBzZXQuCi0gKgotICogRWFjaCBlbGVtZW50IHRoYXQgYWRkcyB0byB0aGUgaW5kZXggd2lsbCBkbyB0aGF0IHVzaW5nIGEgd3JpdGVyX2lkLiBUaGUKLSAqIHdyaXRlcl9pZCBpcyBvYnRhaW5lZCBmcm9tIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkKCkuCi0gKgotICogVGhlIGFwcGxpY2F0aW9uIHRoYXQgd2FudHMgdG8gaW5kZXggdGhlIHN0cmVhbSB3aWxsIGNyZWF0ZSBhIG5ldyBpbmRleCBvYmplY3QKLSAqIHVzaW5nIGdzdF9pbmRleF9uZXcoKSBvciBnc3RfaW5kZXhfZmFjdG9yeV9tYWtlKCkuIFRoZSBpbmRleCBpcyBhc3NpZ25lZCB0byBhCi0gKiBzcGVjaWZpYyBlbGVtZW50LCBhIGJpbiBvciB0aGUgd2hvbGUgcGlwZWxpbmUuIFRoaXMgd2lsbCBjYXVzZSBpbmRleGFibGUKLSAqIGVsZW1lbnRzIHRvIGFkZCBlbnRpcmVzIHRvIHRoZSBpbmRleCB3aGlsZSBwbGF5aW5nLgotICovCi0KLS8qIEZJWE1FOiBjb21wbGV0ZSBnb2JqZWN0IGFubm90YXRpb25zICovCi0vKiBGSVhNRS0wLjExOiBjbGVhbnVwIEFQSQotICogLSBubyBvbmUgc2VlbXMgdG8gdXNlIEdzdEluZGV4R3JvdXAsIEdzdEluZGV4Q2VydGFpbnR5Ci0gKgotICogLSB0aGUgQVBJIGZvciBhcHBsaWNhdGlvbiB0byB1c2UgdGhlIGluZGV4IGlzIG1vc3RseSBtaXNzaW5nCi0gKiAgIC0gYXBwcyBuZWVkIHRvIGdldCBhIGxpc3Qgb2Ygd3JpdGVycwotICogICAtIGFwcHMgbmVlZCB0byBiZSBhYmxlIHRvIGl0ZXJhdGUgb3ZlciBlYWNoIHdyaXRlcnMgaW5kZXggZW50cnkgY29sbGVjdGlvbgotICogLSBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5KCkgc2hvdWxkIHBhc3Mgb3duZXJzaGlwCi0gKiAgIC0gdGhlIEdzdEluZGV4RW50cnkgc3RydWN0dXJlIGlzIGxhcmdlIGFuZCBjb250YWlucyByZXBldGl0aXZlIGluZm9ybWF0aW9uCi0gKiAgIC0gd2Ugd2FudCB0byBhbGxvdyBJbmRleGVycyB0byBpbXBsZW1lbnQgYSBzYW5lciBzdG9yYWdlIGFuZCBjcmVhdGUKLSAqICAgICBHc3RJbmRleEVudHJpZXMgb24gZGVtYW5kICh0aGUgYXBwIGhhcyB0byBmcmVlIHRoZW0pLCBtaWdodCBldmVuIG1ha2UKLSAqICAgICBzZW5zZSB0byBhc2sgdGhlIGFwcCB0byBwcm92aWRlIGEgcHRyIGFuZCBmaWxsIGl0LgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotLyogSW5kZXggc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBFTlRSWV9BRERFRCwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgQVJHXzAsCi0gIEFSR19SRVNPTFZFUgotICAgICAgLyogRklMTCBNRSAqLwotfTsKLQotI2lmIDAKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGluZGV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGluZGV4X2RlYnVnCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgZ3N0X2luZGV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2luZGV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9pbmRleF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RJbmRleEdyb3VwICpnc3RfaW5kZXhfZ3JvdXBfbmV3IChndWludCBncm91cG51bSk7Ci1zdGF0aWMgdm9pZCBnc3RfaW5kZXhfZ3JvdXBfZnJlZSAoR3N0SW5kZXhHcm91cCAqIGdyb3VwKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9pbmRleF9wYXRoX3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LCBHc3RPYmplY3QgKiB3cml0ZXIsCi0gICAgZ2NoYXIgKiogd3JpdGVyX3N0cmluZywgZ3BvaW50ZXIgZGF0YSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2luZGV4X2d0eXBlX3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LCBHc3RPYmplY3QgKiB3cml0ZXIsCi0gICAgZ2NoYXIgKiogd3JpdGVyX3N0cmluZywgZ3BvaW50ZXIgZGF0YSk7Ci1zdGF0aWMgdm9pZCBnc3RfaW5kZXhfYWRkX2VudHJ5IChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpOwotCi1zdGF0aWMgZ3VpbnQgZ3N0X2luZGV4X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEluZGV4UmVzb2x2ZXJNZXRob2QgbWV0aG9kOwotICBHc3RJbmRleFJlc29sdmVyIHJlc29sdmVyOwotICBncG9pbnRlciB1c2VyX2RhdGE7Ci19Ci1SZXNvbHZlckVudHJ5OwotCi1zdGF0aWMgY29uc3QgUmVzb2x2ZXJFbnRyeSByZXNvbHZlcnNbXSA9IHsKLSAge0dTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00sIE5VTEwsIE5VTEx9LAotICB7R1NUX0lOREVYX1JFU09MVkVSX0dUWVBFLCBnc3RfaW5kZXhfZ3R5cGVfcmVzb2x2ZXIsIE5VTEx9LAotICB7R1NUX0lOREVYX1JFU09MVkVSX1BBVEgsIGdzdF9pbmRleF9wYXRoX3Jlc29sdmVyLCBOVUxMfSwKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfSU5ERVhfUkVTT0xWRVIgKGdzdF9pbmRleF9yZXNvbHZlcl9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfaW5kZXhfcmVzb2x2ZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBpbmRleF9yZXNvbHZlcl90eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgaW5kZXhfcmVzb2x2ZXJbXSA9IHsKLSAgICB7R1NUX0lOREVYX1JFU09MVkVSX0NVU1RPTSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00iLCAiY3VzdG9tIn0sCi0gICAge0dTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSIsICJndHlwZSJ9LAotICAgIHtHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSCwgIkdTVF9JTkRFWF9SRVNPTFZFUl9QQVRIIiwgInBhdGgifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFpbmRleF9yZXNvbHZlcl90eXBlKSB7Ci0gICAgaW5kZXhfcmVzb2x2ZXJfdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RJbmRleFJlc29sdmVyIiwgaW5kZXhfcmVzb2x2ZXIpOwotICB9Ci0gIHJldHVybiBpbmRleF9yZXNvbHZlcl90eXBlOwotfQotCi1HX0RFRklORV9CT1hFRF9UWVBFIChHc3RJbmRleEVudHJ5LCBnc3RfaW5kZXhfZW50cnksCi0gICAgKEdCb3hlZENvcHlGdW5jKSBnc3RfaW5kZXhfZW50cnlfY29weSwKLSAgICAoR0JveGVkRnJlZUZ1bmMpIGdzdF9pbmRleF9lbnRyeV9mcmVlKTsKLQotI2lmIDAKLSNkZWZpbmUgX2RvX2luaXQgXAoteyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChpbmRleF9kZWJ1ZywgIkdTVF9JTkRFWCIsIEdTVF9ERUJVR19CT0xELCBcCi0gICAgICAiR2VuZXJpYyBpbmRleGluZyBzdXBwb3J0Iik7IFwKLX0KLSNlbmRpZgotCi1HX0RFRklORV9UWVBFIChHc3RJbmRleCwgZ3N0X2luZGV4LCBHU1RfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2luZGV4X2NsYXNzX2luaXQgKEdzdEluZGV4Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICAvKioKLSAgICogR3N0SW5kZXg6OmVudHJ5LWFkZGVkCi0gICAqIEBnc3RpbmRleDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsLgotICAgKiBAYXJnMTogVGhlIGVudHJ5IGFkZGVkIHRvIHRoZSBpbmRleC4KLSAgICoKLSAgICogSXMgZW1pdHRlZCB3aGVuIGEgbmV3IGVudHJ5IGlzIGFkZGVkIHRvIHRoZSBpbmRleC4KLSAgICovCi0gIGdzdF9pbmRleF9zaWduYWxzW0VOVFJZX0FEREVEXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJlbnRyeS1hZGRlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RJbmRleENsYXNzLCBlbnRyeV9hZGRlZCksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX0lOREVYX0VOVFJZKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfaW5kZXhfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaW5kZXhfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9pbmRleF9maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfUkVTT0xWRVIsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInJlc29sdmVyIiwgIlJlc29sdmVyIiwKLSAgICAgICAgICAiU2VsZWN0IGEgcHJlZGVmaW5lZCBvYmplY3QgdG8gc3RyaW5nIG1hcHBlciIsCi0gICAgICAgICAgR1NUX1RZUEVfSU5ERVhfUkVTT0xWRVIsIEdTVF9JTkRFWF9SRVNPTFZFUl9QQVRILAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2luZGV4X2luaXQgKEdzdEluZGV4ICogaW5kZXgpCi17Ci0gIGluZGV4LT5jdXJncm91cCA9IGdzdF9pbmRleF9ncm91cF9uZXcgKDApOwotICBpbmRleC0+bWF4Z3JvdXAgPSAwOwotICBpbmRleC0+Z3JvdXBzID0gZ19saXN0X3ByZXBlbmQgKE5VTEwsIGluZGV4LT5jdXJncm91cCk7Ci0KLSAgaW5kZXgtPndyaXRlcnMgPSBnX2hhc2hfdGFibGVfbmV3IChOVUxMLCBOVUxMKTsKLSAgaW5kZXgtPmxhc3RfaWQgPSAwOwotCi0gIGluZGV4LT5tZXRob2QgPSBHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSDsKLSAgaW5kZXgtPnJlc29sdmVyID0gcmVzb2x2ZXJzW2luZGV4LT5tZXRob2RdLnJlc29sdmVyOwotICBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhID0gcmVzb2x2ZXJzW2luZGV4LT5tZXRob2RdLnVzZXJfZGF0YTsKLQotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChpbmRleCwgR1NUX0lOREVYX1dSSVRBQkxFKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoaW5kZXgsIEdTVF9JTkRFWF9SRUFEQUJMRSk7Ci0KLSAgR1NUX0RFQlVHICgiY3JlYXRlZCBuZXcgaW5kZXgiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbmRleF9mcmVlX3dyaXRlciAoZ3BvaW50ZXIga2V5LCBncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RJbmRleEVudHJ5ICplbnRyeSA9IChHc3RJbmRleEVudHJ5ICopIHZhbHVlOwotCi0gIGlmIChlbnRyeSkgewotICAgIGdzdF9pbmRleF9lbnRyeV9mcmVlIChlbnRyeSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbmRleF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0SW5kZXggKmluZGV4ID0gR1NUX0lOREVYIChvYmplY3QpOwotCi0gIGlmIChpbmRleC0+Z3JvdXBzKSB7Ci0gICAgZ19saXN0X2ZvcmVhY2ggKGluZGV4LT5ncm91cHMsIChHRnVuYykgZ3N0X2luZGV4X2dyb3VwX2ZyZWUsIE5VTEwpOwotICAgIGdfbGlzdF9mcmVlIChpbmRleC0+Z3JvdXBzKTsKLSAgICBpbmRleC0+Z3JvdXBzID0gTlVMTDsKLSAgfQotCi0gIGlmIChpbmRleC0+d3JpdGVycykgewotICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoIChpbmRleC0+d3JpdGVycywgZ3N0X2luZGV4X2ZyZWVfd3JpdGVyLCBOVUxMKTsKLSAgICBnX2hhc2hfdGFibGVfZGVzdHJveSAoaW5kZXgtPndyaXRlcnMpOwotICAgIGluZGV4LT53cml0ZXJzID0gTlVMTDsKLSAgfQotCi0gIGlmIChpbmRleC0+ZmlsdGVyX3VzZXJfZGF0YSAmJiBpbmRleC0+ZmlsdGVyX3VzZXJfZGF0YV9kZXN0cm95KQotICAgIGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kgKGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhKTsKLQotICBpZiAoaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YSAmJiBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kpCi0gICAgaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YV9kZXN0cm95IChpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X2luZGV4X3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2luZGV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RJbmRleCAqaW5kZXg7Ci0KLSAgaW5kZXggPSBHU1RfSU5ERVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBBUkdfUkVTT0xWRVI6Ci0gICAgICBpbmRleC0+bWV0aG9kID0gKEdzdEluZGV4UmVzb2x2ZXJNZXRob2QpIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGluZGV4LT5yZXNvbHZlciA9IHJlc29sdmVyc1tpbmRleC0+bWV0aG9kXS5yZXNvbHZlcjsKLSAgICAgIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGEgPSByZXNvbHZlcnNbaW5kZXgtPm1ldGhvZF0udXNlcl9kYXRhOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2luZGV4X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RJbmRleCAqaW5kZXg7Ci0KLSAgaW5kZXggPSBHU1RfSU5ERVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBBUkdfUkVTT0xWRVI6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgaW5kZXgtPm1ldGhvZCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RJbmRleEdyb3VwICoKLWdzdF9pbmRleF9ncm91cF9uZXcgKGd1aW50IGdyb3VwbnVtKQotewotICBHc3RJbmRleEdyb3VwICppbmRleGdyb3VwID0gZ19zbGljZV9uZXcgKEdzdEluZGV4R3JvdXApOwotCi0gIGluZGV4Z3JvdXAtPmdyb3VwbnVtID0gZ3JvdXBudW07Ci0gIGluZGV4Z3JvdXAtPmVudHJpZXMgPSBOVUxMOwotICBpbmRleGdyb3VwLT5jZXJ0YWludHkgPSBHU1RfSU5ERVhfVU5LTk9XTjsKLSAgaW5kZXhncm91cC0+cGVlcmdyb3VwID0gLTE7Ci0KLSAgR1NUX0RFQlVHICgiY3JlYXRlZCBuZXcgaW5kZXggZ3JvdXAgJWQiLCBncm91cG51bSk7Ci0KLSAgcmV0dXJuIGluZGV4Z3JvdXA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5kZXhfZ3JvdXBfZnJlZSAoR3N0SW5kZXhHcm91cCAqIGdyb3VwKQotewotICBnX3NsaWNlX2ZyZWUgKEdzdEluZGV4R3JvdXAsIGdyb3VwKTsKLX0KLQotLyogZG8gbm90IHJlc3VycmVjdCB0aGlzLCBhZGQgYSBkZXJpdmVkIGR1bW15IGluZGV4IGNsYXNzIGluc3RlYWQgKi8KLSNpZiAwCi0vKioKLSAqIGdzdF9pbmRleF9uZXc6Ci0gKgotICogQ3JlYXRlIGEgbmV3IGR1bW15IGluZGV4IG9iamVjdC4gVXNlIGdzdF9lbGVtZW50X3NldF9pbmRleCgpIHRvIGFzc2lnbiB0aGF0Ci0gKiB0byBhbiBlbGVtZW50IG9yIHBpcGVsaW5lLiBUaGlzIGluZGV4IGlzIG5vdCBzdG9yaW5nIGFueXRoaW5nLCBidXQgd2lsbAotICogc3RpbGwgZW1pdCBlLmcuIHRoZSAjR3N0SW5kZXg6OmVudHJ5LWFkZGVkIHNpZ25hbC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGluZGV4IG9iamVjdAotICovCi1Hc3RJbmRleCAqCi1nc3RfaW5kZXhfbmV3ICh2b2lkKQotewotICBHc3RJbmRleCAqaW5kZXg7Ci0KLSAgaW5kZXggPSBnX29iamVjdF9uZXd2IChnc3RfaW5kZXhfZ2V0X3R5cGUgKCksIDAsIE5VTEwpOwotCi0gIHJldHVybiBpbmRleDsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfY29tbWl0OgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gY29tbWl0Ci0gKiBAaWQ6IHRoZSB3cml0ZXIgdGhhdCBjb21taXRlZCB0aGUgaW5kZXgKLSAqCi0gKiBUZWxsIHRoZSBpbmRleCB0aGF0IHRoZSB3cml0ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgaXMgZG9uZQotICogd2l0aCB0aGlzIGluZGV4IGFuZCBpcyBub3QgZ29pbmcgdG8gd3JpdGUgYW55IG1vcmUgZW50cmllcwotICogdG8gaXQuCi0gKi8KLXZvaWQKLWdzdF9pbmRleF9jb21taXQgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQpCi17Ci0gIEdzdEluZGV4Q2xhc3MgKmljbGFzczsKLQotICBpY2xhc3MgPSBHU1RfSU5ERVhfR0VUX0NMQVNTIChpbmRleCk7Ci0KLSAgaWYgKGljbGFzcy0+Y29tbWl0KQotICAgIGljbGFzcy0+Y29tbWl0IChpbmRleCwgaWQpOwotfQotCi0vKioKLSAqIGdzdF9pbmRleF9nZXRfZ3JvdXA6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBnZXQgdGhlIGN1cnJlbnQgZ3JvdXAgZnJvbQotICoKLSAqIEdldCB0aGUgaWQgb2YgdGhlIGN1cnJlbnQgZ3JvdXAuCi0gKgotICogUmV0dXJuczogdGhlIGlkIG9mIHRoZSBjdXJyZW50IGdyb3VwLgotICovCi1naW50Ci1nc3RfaW5kZXhfZ2V0X2dyb3VwIChHc3RJbmRleCAqIGluZGV4KQotewotICByZXR1cm4gaW5kZXgtPmN1cmdyb3VwLT5ncm91cG51bTsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfbmV3X2dyb3VwOgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gY3JlYXRlIHRoZSBuZXcgZ3JvdXAgaW4KLSAqCi0gKiBDcmVhdGUgYSBuZXcgZ3JvdXAgZm9yIHRoZSBnaXZlbiBpbmRleC4gSXQgd2lsbCBiZQotICogc2V0IGFzIHRoZSBjdXJyZW50IGdyb3VwLgotICoKLSAqIFJldHVybnM6IHRoZSBpZCBvZiB0aGUgbmV3bHkgY3JlYXRlZCBncm91cC4KLSAqLwotZ2ludAotZ3N0X2luZGV4X25ld19ncm91cCAoR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgaW5kZXgtPmN1cmdyb3VwID0gZ3N0X2luZGV4X2dyb3VwX25ldyAoKytpbmRleC0+bWF4Z3JvdXApOwotICBpbmRleC0+Z3JvdXBzID0gZ19saXN0X2FwcGVuZCAoaW5kZXgtPmdyb3VwcywgaW5kZXgtPmN1cmdyb3VwKTsKLSAgR1NUX0RFQlVHICgiY3JlYXRlZCBuZXcgZ3JvdXAgJWQgaW4gaW5kZXgiLCBpbmRleC0+bWF4Z3JvdXApOwotICByZXR1cm4gaW5kZXgtPm1heGdyb3VwOwotfQotCi0vKioKLSAqIGdzdF9pbmRleF9zZXRfZ3JvdXA6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBzZXQgdGhlIG5ldyBncm91cCBpbgotICogQGdyb3VwbnVtOiB0aGUgZ3JvdXBudW1iZXIgdG8gc2V0Ci0gKgotICogU2V0IHRoZSBjdXJyZW50IGdyb3VwbnVtYmVyIHRvIHRoZSBnaXZlbiBhcmd1bWVudC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCwgJUZBTFNFIGlmIHRoZSBncm91cAotICogZGlkIG5vdCBleGlzdC4KLSAqLwotZ2Jvb2xlYW4KLWdzdF9pbmRleF9zZXRfZ3JvdXAgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgZ3JvdXBudW0pCi17Ci0gIEdMaXN0ICpsaXN0OwotICBHc3RJbmRleEdyb3VwICppbmRleGdyb3VwOwotCi0gIC8qIGZpcnN0IGNoZWNrIGZvciBudWxsIGNoYW5nZSAqLwotICBpZiAoZ3JvdXBudW0gPT0gaW5kZXgtPmN1cmdyb3VwLT5ncm91cG51bSkKLSAgICByZXR1cm4gVFJVRTsKLQotICAvKiBlbHNlIHNlYXJjaCBmb3IgdGhlIHByb3BlciBncm91cCAqLwotICBsaXN0ID0gaW5kZXgtPmdyb3VwczsKLSAgd2hpbGUgKGxpc3QpIHsKLSAgICBpbmRleGdyb3VwID0gKEdzdEluZGV4R3JvdXAgKikgKGxpc3QtPmRhdGEpOwotICAgIGxpc3QgPSBnX2xpc3RfbmV4dCAobGlzdCk7Ci0gICAgaWYgKGluZGV4Z3JvdXAtPmdyb3VwbnVtID09IGdyb3VwbnVtKSB7Ci0gICAgICBpbmRleC0+Y3VyZ3JvdXAgPSBpbmRleGdyb3VwOwotICAgICAgR1NUX0RFQlVHICgic3dpdGNoZWQgdG8gaW5kZXggZ3JvdXAgJWQiLCBpbmRleGdyb3VwLT5ncm91cG51bSk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLQotICAvKiBjb3VsZG4ndCBmaW5kIHRoZSBncm91cCBpbiBxdWVzdGlvbiAqLwotICBHU1RfREVCVUcgKCJjb3VsZG4ndCBmaW5kIGluZGV4IGdyb3VwICVkIiwgZ3JvdXBudW0pOwotICByZXR1cm4gRkFMU0U7Ci19Ci0jZW5kaWYKLQotI2lmIDAKLS8qKgotICogZ3N0X2luZGV4X3NldF9jZXJ0YWludHk6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBzZXQgdGhlIGNlcnRhaW50eSBvbgotICogQGNlcnRhaW50eTogdGhlIGNlcnRhaW50eSB0byBzZXQKLSAqCi0gKiBTZXQgdGhlIGNlcnRhaW50eSBvZiB0aGUgZ2l2ZW4gaW5kZXguCi0gKi8KLXZvaWQKLWdzdF9pbmRleF9zZXRfY2VydGFpbnR5IChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleENlcnRhaW50eSBjZXJ0YWludHkpCi17Ci0gIGluZGV4LT5jdXJncm91cC0+Y2VydGFpbnR5ID0gY2VydGFpbnR5OwotfQotCi0vKioKLSAqIGdzdF9pbmRleF9nZXRfY2VydGFpbnR5OgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gZ2V0IHRoZSBjZXJ0YWludHkgb2YKLSAqCi0gKiBHZXQgdGhlIGNlcnRhaW50eSBvZiB0aGUgZ2l2ZW4gaW5kZXguCi0gKgotICogUmV0dXJuczogdGhlIGNlcnRhaW50eSBvZiB0aGUgaW5kZXguCi0gKi8KLUdzdEluZGV4Q2VydGFpbnR5Ci1nc3RfaW5kZXhfZ2V0X2NlcnRhaW50eSAoR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgcmV0dXJuIGluZGV4LT5jdXJncm91cC0+Y2VydGFpbnR5OwotfQotI2VuZGlmCi0KLSNpZiAwCi0vKioKLSAqIGdzdF9pbmRleF9zZXRfZmlsdGVyOgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIGZpbHRlciBvbgotICogQGZpbHRlcjogdGhlIGZpbHRlciB0byByZWdpc3RlcgotICogQHVzZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbgotICoKLSAqIExldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmaWx0ZXIgZnVuY3Rpb24gc28gdGhhdAotICogaXQgY2FuIHNlbGVjdCB3aGF0IGVudHJpZXMgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW5kZXguCi0gKi8KLXZvaWQKLWdzdF9pbmRleF9zZXRfZmlsdGVyIChHc3RJbmRleCAqIGluZGV4LAotICAgIEdzdEluZGV4RmlsdGVyIGZpbHRlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSk7Ci0KLSAgZ3N0X2luZGV4X3NldF9maWx0ZXJfZnVsbCAoaW5kZXgsIGZpbHRlciwgdXNlcl9kYXRhLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsOgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIGZpbHRlciBvbgotICogQGZpbHRlcjogdGhlIGZpbHRlciB0byByZWdpc3RlcgotICogQHVzZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gdGhlIGZpbHRlciBmdW5jdGlvbgotICogQHVzZXJfZGF0YV9kZXN0cm95OiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gQHVzZXJfZGF0YSBpcyB1bnNldAotICoKLSAqIExldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmaWx0ZXIgZnVuY3Rpb24gc28gdGhhdAotICogaXQgY2FuIHNlbGVjdCB3aGF0IGVudHJpZXMgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgaW5kZXguCi0gKi8KLXZvaWQKLWdzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGwgKEdzdEluZGV4ICogaW5kZXgsCi0gICAgR3N0SW5kZXhGaWx0ZXIgZmlsdGVyLCBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IHVzZXJfZGF0YV9kZXN0cm95KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSk7Ci0KLSAgaWYgKGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhICYmIGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kpCi0gICAgaW5kZXgtPmZpbHRlcl91c2VyX2RhdGFfZGVzdHJveSAoaW5kZXgtPmZpbHRlcl91c2VyX2RhdGEpOwotCi0gIGluZGV4LT5maWx0ZXIgPSBmaWx0ZXI7Ci0gIGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhID0gdXNlcl9kYXRhOwotICBpbmRleC0+ZmlsdGVyX3VzZXJfZGF0YV9kZXN0cm95ID0gdXNlcl9kYXRhX2Rlc3Ryb3k7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X3NldF9yZXNvbHZlcjoKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIHJlZ2lzdGVyIHRoZSByZXNvbHZlciBvbgotICogQHJlc29sdmVyOiB0aGUgcmVzb2x2ZXIgdG8gcmVnaXN0ZXIKLSAqIEB1c2VyX2RhdGE6IGRhdGEgcGFzc2VkIHRvIHRoZSByZXNvbHZlciBmdW5jdGlvbgotICoKLSAqIExldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmdW5jdGlvbiB0byBtYXAgaW5kZXgKLSAqIGlkcyB0byB3cml0ZXIgZGVzY3JpcHRpb25zLgotICovCi12b2lkCi1nc3RfaW5kZXhfc2V0X3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LAotICAgIEdzdEluZGV4UmVzb2x2ZXIgcmVzb2x2ZXIsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsIChpbmRleCwgcmVzb2x2ZXIsIHVzZXJfZGF0YSwgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsOgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIHJlc29sdmVyIG9uCi0gKiBAcmVzb2x2ZXI6IHRoZSByZXNvbHZlciB0byByZWdpc3RlcgotICogQHVzZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uCi0gKiBAdXNlcl9kYXRhX2Rlc3Ryb3k6IGRlc3Ryb3kgZnVuY3Rpb24gZm9yIEB1c2VyX2RhdGEKLSAqCi0gKiBMZXRzIHRoZSBhcHAgcmVnaXN0ZXIgYSBjdXN0b20gZnVuY3Rpb24gdG8gbWFwIGluZGV4Ci0gKiBpZHMgdG8gd3JpdGVyIGRlc2NyaXB0aW9ucy4KLSAqLwotdm9pZAotZ3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsIChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleFJlc29sdmVyIHJlc29sdmVyLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgdXNlcl9kYXRhX2Rlc3Ryb3kpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19JTkRFWCAoaW5kZXgpKTsKLQotICBpZiAoaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YSAmJiBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kpCi0gICAgaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YV9kZXN0cm95IChpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhKTsKLQotICBpbmRleC0+cmVzb2x2ZXIgPSByZXNvbHZlcjsKLSAgaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YV9kZXN0cm95ID0gdXNlcl9kYXRhX2Rlc3Ryb3k7Ci0gIGluZGV4LT5tZXRob2QgPSBHU1RfSU5ERVhfUkVTT0xWRVJfQ1VTVE9NOwotfQotI2VuZGlmCi0KLS8qKgotICogZ3N0X2luZGV4X2VudHJ5X2NvcHk6Ci0gKiBAZW50cnk6IHRoZSBlbnRyeSB0byBjb3B5Ci0gKgotICogQ29waWVzIGFuIGVudHJ5IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2luZGV4X2VudHJ5X2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3bHkgYWxsb2NhdGVkICNHc3RJbmRleEVudHJ5LgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9lbnRyeV9jb3B5IChHc3RJbmRleEVudHJ5ICogZW50cnkpCi17Ci0gIEdzdEluZGV4RW50cnkgKm5ld19lbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RJbmRleEVudHJ5KTsKLQotICBtZW1jcHkgKG5ld19lbnRyeSwgZW50cnksIHNpemVvZiAoR3N0SW5kZXhFbnRyeSkpOwotICByZXR1cm4gbmV3X2VudHJ5OwotfQotCi0vKioKLSAqIGdzdF9pbmRleF9lbnRyeV9mcmVlOgotICogQGVudHJ5OiAodHJhbnNmZXIgZnVsbCk6IHRoZSBlbnRyeSB0byBmcmVlCi0gKgotICogRnJlZSB0aGUgbWVtb3J5IHVzZWQgYnkgdGhlIGdpdmVuIGVudHJ5LgotICovCi12b2lkCi1nc3RfaW5kZXhfZW50cnlfZnJlZSAoR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQotewotICBzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0gICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfSUQ6Ci0gICAgICBpZiAoZW50cnktPmRhdGEuaWQuZGVzY3JpcHRpb24pIHsKLSAgICAgICAgZ19mcmVlIChlbnRyeS0+ZGF0YS5pZC5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGVudHJ5LT5kYXRhLmlkLmRlc2NyaXB0aW9uID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0lOREVYX0VOVFJZX0FTU09DSUFUSU9OOgotICAgICAgaWYgKGVudHJ5LT5kYXRhLmFzc29jLmFzc29jcykgewotICAgICAgICBnX2ZyZWUgKGVudHJ5LT5kYXRhLmFzc29jLmFzc29jcyk7Ci0gICAgICAgIGVudHJ5LT5kYXRhLmFzc29jLmFzc29jcyA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9PQkpFQ1Q6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9GT1JNQVQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGdfc2xpY2VfZnJlZSAoR3N0SW5kZXhFbnRyeSwgZW50cnkpOwotfQotCi0jaWYgMAotLyoqCi0gKiBnc3RfaW5kZXhfYWRkX2Zvcm1hdDoKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIGFkZCB0aGUgZW50cnkgdG8KLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgdG8gYWRkIHRvIHRoZSBpbmRleAotICoKLSAqIEFkZHMgYSBmb3JtYXQgZW50cnkgaW50byB0aGUgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMKLSAqIHVzZWQgdG8gbWFwIGR5bmFtaWMgI0dzdEZvcm1hdCBpZHMgdG8gdGhlaXIgb3JpZ2luYWwKLSAqIGZvcm1hdCBrZXkuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2luZGV4X2VudHJ5X2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWRkZWQgZW50cnkgaW4gdGhlIGluZGV4LgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9hZGRfZm9ybWF0IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLCBHc3RGb3JtYXQgZm9ybWF0KQotewotICBHc3RJbmRleEVudHJ5ICplbnRyeTsKLSAgY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZGVmOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gMCwgTlVMTCk7Ci0KLSAgaWYgKCFHU1RfSU5ERVhfSVNfV1JJVEFCTEUgKGluZGV4KSB8fCBpZCA9PSAtMSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBlbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RJbmRleEVudHJ5KTsKLSAgZW50cnktPnR5cGUgPSBHU1RfSU5ERVhfRU5UUllfRk9STUFUOwotICBlbnRyeS0+aWQgPSBpZDsKLSAgZW50cnktPmRhdGEuZm9ybWF0LmZvcm1hdCA9IGZvcm1hdDsKLQotICBkZWYgPSBnc3RfZm9ybWF0X2dldF9kZXRhaWxzIChmb3JtYXQpOwotICBlbnRyeS0+ZGF0YS5mb3JtYXQua2V5ID0gZGVmLT5uaWNrOwotCi0gIGdzdF9pbmRleF9hZGRfZW50cnkgKGluZGV4LCBlbnRyeSk7Ci0KLSAgcmV0dXJuIGVudHJ5OwotfQotI2VuZGlmCi0KLS8qKgotICogZ3N0X2luZGV4X2FkZF9pZDoKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIGFkZCB0aGUgZW50cnkgdG8KLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqIEBkZXNjcmlwdGlvbjogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqCi0gKiBBZGQgYW4gaWQgZW50cnkgaW50byB0aGUgaW5kZXguCi0gKgotICogUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhZGRlZCBlbnRyeSBpbiB0aGUgaW5kZXguCi0gKi8KLUdzdEluZGV4RW50cnkgKgotZ3N0X2luZGV4X2FkZF9pZCAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwgZ2NoYXIgKiBkZXNjcmlwdGlvbikKLXsKLSAgR3N0SW5kZXhFbnRyeSAqZW50cnk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19JTkRFWCAoaW5kZXgpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc2NyaXB0aW9uICE9IE5VTEwsIE5VTEwpOwotCi0gIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZW50cnkgPSBnX3NsaWNlX25ldyAoR3N0SW5kZXhFbnRyeSk7Ci0gIGVudHJ5LT50eXBlID0gR1NUX0lOREVYX0VOVFJZX0lEOwotICBlbnRyeS0+aWQgPSBpZDsKLSAgZW50cnktPmRhdGEuaWQuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQotICBnc3RfaW5kZXhfYWRkX2VudHJ5IChpbmRleCwgZW50cnkpOwotCi0gIHJldHVybiBlbnRyeTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaW5kZXhfcGF0aF9yZXNvbHZlciAoR3N0SW5kZXggKiBpbmRleCwgR3N0T2JqZWN0ICogd3JpdGVyLAotICAgIGdjaGFyICoqIHdyaXRlcl9zdHJpbmcsIGdwb2ludGVyIGRhdGEpCi17Ci0gICp3cml0ZXJfc3RyaW5nID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKHdyaXRlcik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2luZGV4X2d0eXBlX3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LCBHc3RPYmplY3QgKiB3cml0ZXIsCi0gICAgZ2NoYXIgKiogd3JpdGVyX3N0cmluZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKEdTVF9JU19QQUQgKHdyaXRlcikpIHsKLSAgICBHc3RPYmplY3QgKmVsZW1lbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKEdTVF9PQkpFQ1QgKHdyaXRlcikpOwotICAgIGdjaGFyICpuYW1lOwotCi0gICAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKHdyaXRlcik7Ci0gICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICp3cml0ZXJfc3RyaW5nID0gZ19zdHJkdXBfcHJpbnRmICgiJXMuJXMiLAotICAgICAgICAgIEdfT0JKRUNUX1RZUEVfTkFNRSAoZWxlbWVudCksIG5hbWUpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICp3cml0ZXJfc3RyaW5nID0gbmFtZTsKLSAgICAgIG5hbWUgPSBOVUxMOwotICAgIH0KLQotICAgIGdfZnJlZSAobmFtZSk7Ci0KLSAgfSBlbHNlIHsKLSAgICAqd3JpdGVyX3N0cmluZyA9IGdfc3RyZHVwIChHX09CSkVDVF9UWVBFX05BTUUgKHdyaXRlcikpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2dldF93cml0ZXJfaWQ6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBnZXQgYSB1bmlxdWUgd3JpdGUgaWQgZm9yCi0gKiBAd3JpdGVyOiB0aGUgI0dzdE9iamVjdCB0byBhbGxvY2F0ZSBhbiBpZCBmb3IKLSAqIEBpZDogYSBwb2ludGVyIHRvIGEgZ2ludCB0byBob2xkIHRoZSBpZAotICoKLSAqIEJlZm9yZSBlbnRyaWVzIGNhbiBiZSBhZGRlZCB0byB0aGUgaW5kZXgsIGEgd3JpdGVyCi0gKiBzaG91bGQgb2J0YWluIGEgdW5pcXVlIGlkLiBUaGUgbWV0aG9kcyB0byBhZGQgbmV3IGVudHJpZXMKLSAqIHRvIHRoZSBpbmRleCByZXF1aXJlIHRoaXMgaWQgYXMgYW4gYXJndW1lbnQuCi0gKgotICogVGhlIGFwcGxpY2F0aW9uIGNhbiBpbXBsZW1lbnQgYSBjdXN0b20gZnVuY3Rpb24gdG8gbWFwIHRoZSB3cml0ZXIgb2JqZWN0Ci0gKiB0byBhIHN0cmluZy4gVGhhdCBzdHJpbmcgd2lsbCBiZSB1c2VkIHRvIHJlZ2lzdGVyIG9yIGxvb2sgdXAgYW4gaWQKLSAqIGluIHRoZSBpbmRleC4KLSAqCi0gKiA8bm90ZT4KLSAqIFRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBAd3JpdGVyJ3MgR1NUX09CSkVDVF9MT0NLKCksIGFzIHRoZSBkZWZhdWx0Ci0gKiByZXNvbHZlciBtYXkgY2FsbCBmdW5jdGlvbnMgdGhhdCB0YWtlIHRoZSBvYmplY3QgbG9jayBhcyB3ZWxsLCBhbmQKLSAqIHRoZSBsb2NrIGlzIG5vdCByZWN1cnNpdmUuCi0gKiA8L25vdGU+Ci0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHdyaXRlciB3b3VsZCBiZSBtYXBwZWQgdG8gYW4gaWQuCi0gKi8KLWdib29sZWFuCi1nc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoR3N0SW5kZXggKiBpbmRleCwgR3N0T2JqZWN0ICogd3JpdGVyLCBnaW50ICogaWQpCi17Ci0gIGdjaGFyICp3cml0ZXJfc3RyaW5nID0gTlVMTDsKLSAgR3N0SW5kZXhFbnRyeSAqZW50cnk7Ci0gIEdzdEluZGV4Q2xhc3MgKmljbGFzczsKLSAgZ2Jvb2xlYW4gc3VjY2VzcyA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX09CSkVDVCAod3JpdGVyKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWQsIEZBTFNFKTsKLQotICAqaWQgPSAtMTsKLQotICAvKiBmaXJzdCB0cnkgdG8gZ2V0IGEgcHJldmlvdXNseSBjYWNoZWQgaWQgKi8KLSAgZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChpbmRleC0+d3JpdGVycywgd3JpdGVyKTsKLSAgaWYgKGVudHJ5ID09IE5VTEwpIHsKLQotICAgIGljbGFzcyA9IEdTVF9JTkRFWF9HRVRfQ0xBU1MgKGluZGV4KTsKLQotICAgIC8qIGxldCB0aGUgYXBwIG1ha2UgYSBzdHJpbmcgKi8KLSAgICBpZiAoaW5kZXgtPnJlc29sdmVyKSB7Ci0gICAgICBnYm9vbGVhbiByZXM7Ci0KLSAgICAgIHJlcyA9Ci0gICAgICAgICAgaW5kZXgtPnJlc29sdmVyIChpbmRleCwgd3JpdGVyLCAmd3JpdGVyX3N0cmluZywKLSAgICAgICAgICBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhKTsKLSAgICAgIGlmICghcmVzKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfd2FybmluZyAoIm5vIHJlc29sdmVyIGZvdW5kIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgLyogaWYgdGhlIGluZGV4IGhhcyBhIHJlc29sdmVyLCBtYWtlIGl0IG1hcCB0aGlzIHN0cmluZyB0byBhbiBpZCAqLwotICAgIGlmIChpY2xhc3MtPmdldF93cml0ZXJfaWQpIHsKLSAgICAgIHN1Y2Nlc3MgPSBpY2xhc3MtPmdldF93cml0ZXJfaWQgKGluZGV4LCBpZCwgd3JpdGVyX3N0cmluZyk7Ci0gICAgfQotICAgIC8qIGlmIHRoZSBpbmRleCBjb3VsZCBub3QgcmVzb2x2ZSwgd2UgYWxsb2NhdGUgb25lIG91cnNlbHZlcyAqLwotICAgIGlmICghc3VjY2VzcykgewotICAgICAgKmlkID0gKytpbmRleC0+bGFzdF9pZDsKLSAgICB9Ci0KLSAgICBlbnRyeSA9IGdzdF9pbmRleF9hZGRfaWQgKGluZGV4LCAqaWQsIHdyaXRlcl9zdHJpbmcpOwotICAgIGlmICghZW50cnkpIHsKLSAgICAgIC8qIGluZGV4IGlzIHByb2JhYmx5IG5vdCB3cml0YWJsZSwgbWFrZSBhbiBlbnRyeSBhbnl3YXkKLSAgICAgICAqIHRvIGtlZXAgaXQgaW4gb3VyIGNhY2hlICovCi0gICAgICBlbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RJbmRleEVudHJ5KTsKLSAgICAgIGVudHJ5LT50eXBlID0gR1NUX0lOREVYX0VOVFJZX0lEOwotICAgICAgZW50cnktPmlkID0gKmlkOwotICAgICAgZW50cnktPmRhdGEuaWQuZGVzY3JpcHRpb24gPSB3cml0ZXJfc3RyaW5nOwotICAgIH0KLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChpbmRleC0+d3JpdGVycywgd3JpdGVyLCBlbnRyeSk7Ci0gIH0gZWxzZSB7Ci0gICAgKmlkID0gZW50cnktPmlkOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5kZXhfYWRkX2VudHJ5IChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpCi17Ci0gIEdzdEluZGV4Q2xhc3MgKmljbGFzczsKLQotICBpY2xhc3MgPSBHU1RfSU5ERVhfR0VUX0NMQVNTIChpbmRleCk7Ci0KLSAgaWYgKGljbGFzcy0+YWRkX2VudHJ5KSB7Ci0gICAgaWNsYXNzLT5hZGRfZW50cnkgKGluZGV4LCBlbnRyeSk7Ci0gIH0KLQotICBnX3NpZ25hbF9lbWl0IChpbmRleCwgZ3N0X2luZGV4X3NpZ25hbHNbRU5UUllfQURERURdLCAwLCBlbnRyeSk7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbnY6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBhZGQgdGhlIGVudHJ5IHRvCi0gKiBAaWQ6IHRoZSBpZCBvZiB0aGUgaW5kZXggd3JpdGVyCi0gKiBAZmxhZ3M6IG9wdGluYWwgZmxhZ3MgZm9yIHRoaXMgZW50cnkKLSAqIEBuOiBudW1iZXIgb2YgYXNzb2NpYXRpb25zCi0gKiBAbGlzdDogKGFycmF5IGxlbmd0aD1uKTogbGlzdCBvZiBhc3NvY2lhdGlvbnMKLSAqCi0gKiBBc3NvY2lhdGUgZ2l2ZW4gZm9ybWF0L3ZhbHVlIHBhaXJzIHdpdGggZWFjaCBvdGhlci4KLSAqCi0gKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFkZGVkIGVudHJ5IGluIHRoZSBpbmRleC4KLSAqLwotR3N0SW5kZXhFbnRyeSAqCi1nc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwKLSAgICBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsIGdpbnQgbiwgY29uc3QgR3N0SW5kZXhBc3NvY2lhdGlvbiAqIGxpc3QpCi17Ci0gIEdzdEluZGV4RW50cnkgKmVudHJ5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuID4gMCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsaXN0ICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0lOREVYIChpbmRleCksIE5VTEwpOwotCi0gIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZW50cnkgPSBnX3NsaWNlX25ldyAoR3N0SW5kZXhFbnRyeSk7Ci0KLSAgZW50cnktPnR5cGUgPSBHU1RfSU5ERVhfRU5UUllfQVNTT0NJQVRJT047Ci0gIGVudHJ5LT5pZCA9IGlkOwotICBlbnRyeS0+ZGF0YS5hc3NvYy5mbGFncyA9IGZsYWdzOwotICBlbnRyeS0+ZGF0YS5hc3NvYy5hc3NvY3MgPSBnX21lbWR1cCAobGlzdCwgc2l6ZW9mIChHc3RJbmRleEFzc29jaWF0aW9uKSAqIG4pOwotICBlbnRyeS0+ZGF0YS5hc3NvYy5uYXNzb2NzID0gbjsKLQotICBnc3RfaW5kZXhfYWRkX2VudHJ5IChpbmRleCwgZW50cnkpOwotCi0gIHJldHVybiBlbnRyeTsKLX0KLQotI2lmIDAKLS8qKgotICogZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbjoKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIGFkZCB0aGUgZW50cnkgdG8KLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqIEBmbGFnczogb3B0aW5hbCBmbGFncyBmb3IgdGhpcyBlbnRyeQotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUKLSAqIEB2YWx1ZTogdGhlIHZhbHVlCi0gKiBALi4uOiBvdGhlciBmb3JtYXQvdmFsdWUgcGFpcnMgb3IgMCB0byBlbmQgdGhlIGxpc3QKLSAqCi0gKiBBc3NvY2lhdGUgZ2l2ZW4gZm9ybWF0L3ZhbHVlIHBhaXJzIHdpdGggZWFjaCBvdGhlci4KLSAqIEJlIHN1cmUgdG8gcGFzcyBnaW50NjQgdmFsdWVzIHRvIHRoaXMgZnVuY3Rpb25zIHZhcmFyZ3MsCi0gKiB5b3UgbWlnaHQgd2FudCB0byB1c2UgYSBnaW50NjQgY2FzdCB0byBiZSBzdXJlLgotICoKLSAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWRkZWQgZW50cnkgaW4gdGhlIGluZGV4LgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsCi0gICAgR3N0SW5kZXhBc3NvY2lhdGlvbkZsYWdzIGZsYWdzLCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICBHc3RJbmRleEVudHJ5ICplbnRyeTsKLSAgR3N0SW5kZXhBc3NvY2lhdGlvbiAqbGlzdDsKLSAgZ2ludCBuX2Fzc29jcyA9IDA7Ci0gIEdzdEZvcm1hdCBjdXJfZm9ybWF0OwotICBHQXJyYXkgKmFycmF5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gMCwgTlVMTCk7Ci0KLSAgaWYgKCFHU1RfSU5ERVhfSVNfV1JJVEFCTEUgKGluZGV4KSB8fCBpZCA9PSAtMSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBhcnJheSA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoR3N0SW5kZXhBc3NvY2lhdGlvbikpOwotCi0gIHsKLSAgICBHc3RJbmRleEFzc29jaWF0aW9uIGE7Ci0KLSAgICBhLmZvcm1hdCA9IGZvcm1hdDsKLSAgICBhLnZhbHVlID0gdmFsdWU7Ci0gICAgbl9hc3NvY3MgPSAxOwotICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyYXksIGEpOwotICB9Ci0KLSAgdmFfc3RhcnQgKGFyZ3MsIHZhbHVlKTsKLQotICB3aGlsZSAoKGN1cl9mb3JtYXQgPSB2YV9hcmcgKGFyZ3MsIEdzdEZvcm1hdCkpKSB7Ci0gICAgR3N0SW5kZXhBc3NvY2lhdGlvbiBhOwotCi0gICAgYS5mb3JtYXQgPSBjdXJfZm9ybWF0OwotICAgIGEudmFsdWUgPSB2YV9hcmcgKGFyZ3MsIGdpbnQ2NCk7Ci0gICAgbl9hc3NvY3MrKzsKLSAgICBnX2FycmF5X2FwcGVuZF92YWwgKGFycmF5LCBhKTsKLSAgfQotCi0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgbGlzdCA9IChHc3RJbmRleEFzc29jaWF0aW9uICopIGdfYXJyYXlfZnJlZSAoYXJyYXksIEZBTFNFKTsKLQotICBlbnRyeSA9IGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252IChpbmRleCwgaWQsIGZsYWdzLCBuX2Fzc29jcywgbGlzdCk7Ci0gIGdfZnJlZSAobGlzdCk7Ci0KLSAgcmV0dXJuIGVudHJ5OwotfQotCi0vKioKLSAqIGdzdF9pbmRleF9hZGRfb2JqZWN0OgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gYWRkIHRoZSBvYmplY3QgdG8KLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqIEBrZXk6IGEga2V5IGZvciB0aGUgb2JqZWN0Ci0gKiBAdHlwZTogdGhlIEdUeXBlIG9mIHRoZSBvYmplY3QKLSAqIEBvYmplY3Q6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IHRvIGFkZAotICoKLSAqIEFkZCB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBpbmRleCB3aXRoIHRoZSBnaXZlbiBrZXkuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkLgotICoKLSAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWRkZWQgZW50cnkgaW4gdGhlIGluZGV4LgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9hZGRfb2JqZWN0IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLCBnY2hhciAqIGtleSwKLSAgICBHVHlwZSB0eXBlLCBncG9pbnRlciBvYmplY3QpCi17Ci0gIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGdpbnQKLWdzdF9pbmRleF9jb21wYXJlX2Z1bmMgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmIChhIDwgYikKLSAgICByZXR1cm4gLTE7Ci0gIGlmIChhID4gYikKLSAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeToKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIHNlYXJjaAotICogQGlkOiB0aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcgotICogQG1ldGhvZDogVGhlIGxvb2t1cCBtZXRob2QgdG8gdXNlCi0gKiBAZmxhZ3M6IEZsYWdzIGZvciB0aGUgZW50cnkKLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlCi0gKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byBmaW5kCi0gKgotICogRmluZHMgdGhlIGdpdmVuIGZvcm1hdC92YWx1ZSBpbiB0aGUgaW5kZXgKLSAqCi0gKiBSZXR1cm5zOiAobnVsbGFibGUpOiB0aGUgZW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSBvciAlTlVMTCBpZiB0aGUKLSAqICAgdmFsdWUgd2FzIG5vdCBmb3VuZC4KLSAqLwotR3N0SW5kZXhFbnRyeSAqCi1nc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLAotICAgIEdzdEluZGV4TG9va3VwTWV0aG9kIG1ldGhvZCwgR3N0SW5kZXhBc3NvY2lhdGlvbkZsYWdzIGZsYWdzLAotICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCB2YWx1ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19JTkRFWCAoaW5kZXgpLCBOVUxMKTsKLQotICBpZiAoaWQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0dXJuIGdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbCAoaW5kZXgsIGlkLCBtZXRob2QsIGZsYWdzLCBmb3JtYXQsCi0gICAgICB2YWx1ZSwgZ3N0X2luZGV4X2NvbXBhcmVfZnVuYywgTlVMTCk7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeV9mdWxsOgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gc2VhcmNoCi0gKiBAaWQ6IHRoZSBpZCBvZiB0aGUgaW5kZXggd3JpdGVyCi0gKiBAbWV0aG9kOiBUaGUgbG9va3VwIG1ldGhvZCB0byB1c2UKLSAqIEBmbGFnczogRmxhZ3MgZm9yIHRoZSBlbnRyeQotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUKLSAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIGZpbmQKLSAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gdXNlZCB0byBjb21wYXJlIGVudHJpZXMKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGNvbXBhcmUgZnVuY3Rpb24KLSAqCi0gKiBGaW5kcyB0aGUgZ2l2ZW4gZm9ybWF0L3ZhbHVlIGluIHRoZSBpbmRleCB3aXRoIHRoZSBnaXZlbgotICogY29tcGFyZSBmdW5jdGlvbiBhbmQgdXNlcl9kYXRhLgotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSk6IHRoZSBlbnRyeSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIG9yICVOVUxMIGlmIHRoZQotICogICB2YWx1ZSB3YXMgbm90IGZvdW5kLgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbCAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwKLSAgICBHc3RJbmRleExvb2t1cE1ldGhvZCBtZXRob2QsIEdzdEluZGV4QXNzb2NpYXRpb25GbGFncyBmbGFncywKLSAgICBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUsIEdDb21wYXJlRGF0YUZ1bmMgZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RJbmRleENsYXNzICppY2xhc3M7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19JTkRFWCAoaW5kZXgpLCBOVUxMKTsKLQotICBpZiAoaWQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWNsYXNzID0gR1NUX0lOREVYX0dFVF9DTEFTUyAoaW5kZXgpOwotCi0gIGlmIChpY2xhc3MtPmdldF9hc3NvY19lbnRyeSkKLSAgICByZXR1cm4gaWNsYXNzLT5nZXRfYXNzb2NfZW50cnkgKGluZGV4LCBpZCwgbWV0aG9kLCBmbGFncywgZm9ybWF0LCB2YWx1ZSwKLSAgICAgICAgZnVuYywgdXNlcl9kYXRhKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwOgotICogQGVudHJ5OiB0aGUgaW5kZXggdG8gc2VhcmNoCi0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSB2YWx1ZSB0aGUgZmluZAotICogQHZhbHVlOiBhIHBvaW50ZXIgdG8gc3RvcmUgdGhlIHZhbHVlCi0gKgotICogR2V0cyBhbHRlcm5hdGl2ZSBmb3JtYXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXhlbnRyeS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGVyZSB3YXMgYSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuCi0gKiBmb3JtYXQuCi0gKi8KLWdib29sZWFuCi1nc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChHc3RJbmRleEVudHJ5ICogZW50cnksCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICogdmFsdWUpCi17Ci0gIGdpbnQgaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHU1RfSU5ERVhfTkFTU09DUyAoZW50cnkpOyBpKyspIHsKLSAgICBpZiAoR1NUX0lOREVYX0FTU09DX0ZPUk1BVCAoZW50cnksIGkpID09IGZvcm1hdCkgewotICAgICAgKnZhbHVlID0gR1NUX0lOREVYX0FTU09DX1ZBTFVFIChlbnRyeSwgaSk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RpbmRleC5oIGIvbGlicy9nc3QvYmFzZS9nc3RpbmRleC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODBmYTZjLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0aW5kZXguaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgotICoKLSAqIGdzdGluZGV4Lmg6IEhlYWRlciBmb3IgR3N0SW5kZXgsIGJhc2UgY2xhc3MgdG8gaGFuZGxlIGVmZmljaWVudAotICogICAgICAgICAgICAgc3RvcmFnZSBvciBjYWNoaW5nIG9mIHNlZWtpbmcgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9JTkRFWF9IX18KLSNkZWZpbmUgX19HU1RfSU5ERVhfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGZvcm1hdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9JTkRFWCAgICAgICAgICAgICAgICAgIChnc3RfaW5kZXhfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JTkRFWChvYmopICAgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfSU5ERVgsIEdzdEluZGV4KSkKLSNkZWZpbmUgR1NUX0lTX0lOREVYKG9iaikgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9JTkRFWCkpCi0jZGVmaW5lIEdTVF9JTkRFWF9DTEFTUyhrbGFzcykgICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9JTkRFWCwgR3N0SW5kZXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19JTkRFWF9DTEFTUyhrbGFzcykgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9JTkRFWCkpCi0jZGVmaW5lIEdTVF9JTkRFWF9HRVRfQ0xBU1Mob2JqKSAgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9JTkRFWCwgR3N0SW5kZXhDbGFzcykpCi0KLSNkZWZpbmUgR1NUX1RZUEVfSU5ERVhfRU5UUlkgICAgICAgICAgICAoZ3N0X2luZGV4X2VudHJ5X2dldF90eXBlKCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJbmRleEVudHJ5IEdzdEluZGV4RW50cnk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SW5kZXhHcm91cCBHc3RJbmRleEdyb3VwOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEluZGV4IEdzdEluZGV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEluZGV4Q2xhc3MgR3N0SW5kZXhDbGFzczsKLQotLyoqCi0gKiBHc3RJbmRleENlcnRhaW50eToKLSAqIEBHU1RfSU5ERVhfVU5LTk9XTjogYWNjdXJhY3kgaXMgbm90IGtub3duCi0gKiBAR1NUX0lOREVYX0NFUlRBSU46IGFjY3VyYWN5IGlzIHBlcmZlY3QKLSAqIEBHU1RfSU5ERVhfRlVaWlk6IGFjY3VyYWN5IGlzIGZ1enp5Ci0gKgotICogVGhlIGNlcnRhaW50eSBvZiBhIGdyb3VwIGluIHRoZSBpbmRleC4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lOREVYX1VOS05PV04sCi0gIEdTVF9JTkRFWF9DRVJUQUlOLAotICBHU1RfSU5ERVhfRlVaWlkKLX0gR3N0SW5kZXhDZXJ0YWludHk7Ci0KLS8qKgotICogR3N0SW5kZXhFbnRyeVR5cGU6Ci0gKiBAR1NUX0lOREVYX0VOVFJZX0lEOiBUaGlzIGVudHJ5IGlzIGFuIGlkIHRoYXQgbWFwcyBhbiBpbmRleCBpZCB0byBpdHMgb3duZXIgb2JqZWN0Ci0gKiBAR1NUX0lOREVYX0VOVFJZX0FTU09DSUFUSU9OOiBUaGlzIGVudHJ5IGlzIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gZm9ybWF0cwotICogQEdTVF9JTkRFWF9FTlRSWV9PQkpFQ1Q6IEFuIG9iamVjdAotICogQEdTVF9JTkRFWF9FTlRSWV9GT1JNQVQ6IEEgZm9ybWF0IGRlZmluaXRpb24KLSAqCi0gKiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIGVudHJpZXMgaW4gdGhlIGluZGV4LgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfSU5ERVhfRU5UUllfSUQsCi0gIEdTVF9JTkRFWF9FTlRSWV9BU1NPQ0lBVElPTiwKLSAgR1NUX0lOREVYX0VOVFJZX09CSkVDVCwKLSAgR1NUX0lOREVYX0VOVFJZX0ZPUk1BVAotfSBHc3RJbmRleEVudHJ5VHlwZTsKLQotLyoqCi0gKiBHc3RJbmRleExvb2t1cE1ldGhvZDoKLSAqIEBHU1RfSU5ERVhfTE9PS1VQX0VYQUNUOiBUaGVyZSBoYXMgdG8gYmUgYW4gZXhhY3QgaW5kZXhlbnRyeSB3aXRoIHRoZSBnaXZlbiBmb3JtYXQvdmFsdWUKLSAqIEBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRTogVGhlIGV4YWN0IGVudHJ5IG9yIHRoZSBvbmUgYmVmb3JlIGl0Ci0gKiBAR1NUX0lOREVYX0xPT0tVUF9BRlRFUjogVGhlIGV4YWN0IGVudHJ5IG9yIHRoZSBvbmUgYWZ0ZXIgaXQKLSAqCi0gKiBTcGVjaWZ5IHRoZSBtZXRob2QgdG8gZmluZCBhbiBpbmRleCBlbnRyeSBpbiB0aGUgaW5kZXguCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9JTkRFWF9MT09LVVBfRVhBQ1QsCi0gIEdTVF9JTkRFWF9MT09LVVBfQkVGT1JFLAotICBHU1RfSU5ERVhfTE9PS1VQX0FGVEVSCi19IEdzdEluZGV4TG9va3VwTWV0aG9kOwotCi0vKioKLSAqIEdTVF9JTkRFWF9OQVNTT0NTOgotICogQGVudHJ5OiBUaGUgZW50cnkgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIG51bWJlciBvZiBhc3NvY2lhdGlvbnMgaW4gdGhlIGVudHJ5LgotICovCi0jZGVmaW5lIEdTVF9JTkRFWF9OQVNTT0NTKGVudHJ5KSAgICAgICAgICAgICAgICAoKGVudHJ5KS0+ZGF0YS5hc3NvYy5uYXNzb2NzKQotCi0vKioKLSAqIEdTVF9JTkRFWF9BU1NPQ19GTEFHUzoKLSAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogIEdldCB0aGUgZmxhZ3MgZm9yIHRoaXMgZW50cnkuCi0gKi8KLSNkZWZpbmUgR1NUX0lOREVYX0FTU09DX0ZMQUdTKGVudHJ5KSAgICAgICAgICAgICgoZW50cnkpLT5kYXRhLmFzc29jLmZsYWdzKQotCi0vKioKLSAqIEdTVF9JTkRFWF9BU1NPQ19GT1JNQVQ6Ci0gKiBAZW50cnk6IFRoZSBlbnRyeSB0byBxdWVyeQotICogQGk6IFRoZSBmb3JtYXQgaW5kZXgKLSAqCi0gKiBHZXQgdGhlIGktdGggZm9ybWF0IG9mIHRoZSBlbnRyeS4KLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfQVNTT0NfRk9STUFUKGVudHJ5LGkpICAgICAgICAgKChlbnRyeSktPmRhdGEuYXNzb2MuYXNzb2NzWyhpKV0uZm9ybWF0KQotCi0vKioKLSAqIEdTVF9JTkRFWF9BU1NPQ19WQUxVRToKLSAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKiBAaTogVGhlIHZhbHVlIGluZGV4Ci0gKgotICogR2V0IHRoZSBpLXRoIHZhbHVlIG9mIHRoZSBlbnRyeS4KLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfQVNTT0NfVkFMVUUoZW50cnksaSkgICAgICAgICAgKChlbnRyeSktPmRhdGEuYXNzb2MuYXNzb2NzWyhpKV0udmFsdWUpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJbmRleEFzc29jaWF0aW9uIEdzdEluZGV4QXNzb2NpYXRpb247Ci0KLS8qKgotICogR3N0SW5kZXhBc3NvY2lhdGlvbjoKLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIGFzc29jaWF0aW9uCi0gKiBAdmFsdWU6IHRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRpb24KLSAqCi0gKiBBbiBhc3NvY2lhdGlvbiBpbiBhbiBlbnRyeS4KLSAqLwotc3RydWN0IF9Hc3RJbmRleEFzc29jaWF0aW9uIHsKLSAgR3N0Rm9ybWF0ICAgICBmb3JtYXQ7Ci0gIGdpbnQ2NCAgICAgICAgdmFsdWU7Ci19OwotCi0vKioKLSAqIEdzdEluZGV4QXNzb2NpYXRpb25GbGFnczoKLSAqIEBHU1RfSU5ERVhfQVNTT0NJQVRJT05fRkxBR19OT05FOiBubyBleHRyYSBmbGFncwotICogQEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUOiB0aGUgZW50cnkgbWFya3MgYSBrZXkgdW5pdCwgYSBrZXkgdW5pdCBpcyBvbmUKLSAqICB0aGF0IG1hcmtzIGEgcGxhY2Ugd2hlcmUgb25lIGNhbiByYW5kb21seSBzZWVrIHRvLgotICogQEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQ6IHRoZSBlbnRyeSBtYXJrcyBhIGRlbHRhIHVuaXQsIGEgZGVsdGEgdW5pdAotICogIGlzIG9uZSB0aGF0IG1hcmtzIGEgcGxhY2Ugd2hlcmUgb25lIGNhbiByZWxhdGl2ZWx5IHNlZWsgdG8uCi0gKiBAR1NUX0lOREVYX0FTU09DSUFUSU9OX0ZMQUdfTEFTVDogZXh0cmEgdXNlciBkZWZpbmVkIGZsYWdzIHNob3VsZCBzdGFydCBoZXJlLgotICoKLSAqIEZsYWdzIGZvciBhbiBhc3NvY2lhdGlvbiBlbnRyeS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lOREVYX0FTU09DSUFUSU9OX0ZMQUdfTk9ORSAgICAgICA9IDAsCi0gIEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUICAgPSAoMSA8PCAwKSwKLSAgR1NUX0lOREVYX0FTU09DSUFUSU9OX0ZMQUdfREVMVEFfVU5JVCA9ICgxIDw8IDEpLAotCi0gIC8qIG5ldyBmbGFncyBzaG91bGQgc3RhcnQgaGVyZSAqLwotICBHU1RfSU5ERVhfQVNTT0NJQVRJT05fRkxBR19MQVNUICAgICA9ICgxIDw8IDgpCi19IEdzdEluZGV4QXNzb2NpYXRpb25GbGFnczsKLQotLyoqCi0gKiBHU1RfSU5ERVhfRk9STUFUX0ZPUk1BVDoKLSAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSBmb3JtYXQgb2YgdGhlIGZvcm1hdCBlbnRyeQotICovCi0jZGVmaW5lIEdTVF9JTkRFWF9GT1JNQVRfRk9STUFUKGVudHJ5KSAgICAgICAgICAoKGVudHJ5KS0+ZGF0YS5mb3JtYXQuZm9ybWF0KQotCi0vKioKLSAqIEdTVF9JTkRFWF9GT1JNQVRfS0VZOgotICogQGVudHJ5OiBUaGUgZW50cnkgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIGtleSBvZiB0aGUgZm9ybWF0IGVudHJ5Ci0gKi8KLSNkZWZpbmUgR1NUX0lOREVYX0ZPUk1BVF9LRVkoZW50cnkpICAgICAgICAgICAgICgoZW50cnkpLT5kYXRhLmZvcm1hdC5rZXkpCi0KLS8qKgotICogR1NUX0lOREVYX0lEX0lOVkFMSUQ6Ci0gKgotICogQ29uc3RhbnQgZm9yIGFuIGludmFsaWQgaW5kZXggaWQKLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfSURfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgKC0xKQotCi0vKioKLSAqIEdTVF9JTkRFWF9JRF9ERVNDUklQVElPTjoKLSAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaWQgZW50cnkKLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfSURfREVTQ1JJUFRJT04oZW50cnkpICAgICAgICAgKChlbnRyeSktPmRhdGEuaWQuZGVzY3JpcHRpb24pCi0KLS8qKgotICogR3N0SW5kZXhFbnRyeToKLSAqCi0gKiBUaGUgYmFzaWMgZWxlbWVudCBvZiBhbiBpbmRleC4KLSAqLwotc3RydWN0IF9Hc3RJbmRleEVudHJ5IHsKLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdEluZGV4RW50cnlUeXBlICAgICAgdHlwZTsKLSAgZ2ludCAgICAgICAgICAgICAgICAgICBpZDsKLQotICB1bmlvbiB7Ci0gICAgc3RydWN0IHsKLSAgICAgIGdjaGFyICAgICAgICAgICAgICpkZXNjcmlwdGlvbjsKLSAgICB9IGlkOwotICAgIHN0cnVjdCB7Ci0gICAgICBnaW50ICAgICAgICAgICAgICAgbmFzc29jczsKLSAgICAgIEdzdEluZGV4QXNzb2NpYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICphc3NvY3M7Ci0gICAgICBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgICAgICBmbGFnczsKLSAgICB9IGFzc29jOwotICAgIHN0cnVjdCB7Ci0gICAgICBnY2hhciAgICAgICAgICAgICAqa2V5OwotICAgICAgR1R5cGUgICAgICAgICAgICAgIHR5cGU7Ci0gICAgICBncG9pbnRlciAgICAgICAgICAgb2JqZWN0OwotICAgIH0gb2JqZWN0OwotICAgIHN0cnVjdCB7Ci0gICAgICBHc3RGb3JtYXQgICAgICAgICAgZm9ybWF0OwotICAgICAgY29uc3QgZ2NoYXIgICAgICAgKmtleTsKLSAgICB9IGZvcm1hdDsKLSAgfSBkYXRhOwotICAvLyBGSVhNRSAyLjA6IGFkZCBwYWRkaW5nCi19OwotCi0vKioKLSAqIEdzdEluZGV4R3JvdXA6Ci0gKgotICogQSBncm91cCBvZiByZWxhdGVkIGVudHJpZXMgaW4gYW4gaW5kZXguCi0gKi8KLQotc3RydWN0IF9Hc3RJbmRleEdyb3VwIHsKLSAgLyo8IHByaXZhdGUgPiovCi0gIC8qIHVuaXF1ZSBJRCBvZiBncm91cCBpbiBpbmRleCAqLwotICBnaW50IGdyb3VwbnVtOwotCi0gIC8qIGxpc3Qgb2YgZW50cmllcyAqLwotICBHTGlzdCAqZW50cmllczsKLQotICAvKiB0aGUgY2VydGFpbnR5IGxldmVsIG9mIHRoZSBncm91cCAqLwotICBHc3RJbmRleENlcnRhaW50eSBjZXJ0YWludHk7Ci0KLSAgLyogcGVlciBncm91cCB0aGF0IGNvbnRhaW5zIG1vcmUgY2VydGFpbiBlbnRyaWVzICovCi0gIGdpbnQgcGVlcmdyb3VwOwotICAvLyBGSVhNRSAyLjA6IGFkZCBwYWRkaW5nCi19OwotCi0vKioKLSAqIEdzdEluZGV4RmlsdGVyOgotICogQGluZGV4OiBUaGUgaW5kZXggYmVpbmcgcXVlcmllZAotICogQGVudHJ5OiBUaGUgZW50cnkgdG8gYmUgYWRkZWQuCi0gKiBAdXNlcl9kYXRhOiBVc2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KLSAqCi0gKiBGdW5jdGlvbiB0byBmaWx0ZXIgb3V0IGVudHJpZXMgaW4gdGhlIGluZGV4LgotICoKLSAqIFJldHVybnM6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiAlVFJVRSBpZiB0aGUgZW50cnkgaXMgdG8gYmUgYWRkZWQKLSAqIHRvIHRoZSBpbmRleCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gICAgICAgICgqR3N0SW5kZXhGaWx0ZXIpICAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEluZGV4RW50cnkgKmVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLS8qKgotICogR3N0SW5kZXhSZXNvbHZlck1ldGhvZDoKLSAqIEBHU1RfSU5ERVhfUkVTT0xWRVJfQ1VTVE9NOiBVc2UgYSBjdXN0b20gcmVzb2x2ZXIKLSAqIEBHU1RfSU5ERVhfUkVTT0xWRVJfR1RZUEU6IFJlc29sdmUgYmFzZWQgb24gdGhlIEdUeXBlIG9mIHRoZSBvYmplY3QKLSAqIEBHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSDogUmVzb2x2ZSBvbiB0aGUgcGF0aCBpbiBncmFwaAotICoKLSAqIFRoZSBtZXRob2QgdXNlZCB0byByZXNvbHZlIGluZGV4IHdyaXRlcnMKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lOREVYX1JFU09MVkVSX0NVU1RPTSwKLSAgR1NUX0lOREVYX1JFU09MVkVSX0dUWVBFLAotICBHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSAotfSBHc3RJbmRleFJlc29sdmVyTWV0aG9kOwotCi0vKioKLSAqIEdzdEluZGV4UmVzb2x2ZXI6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCBiZWluZyBxdWVyaWVkLgotICogQHdyaXRlcjogVGhlIG9iamVjdCB0aGF0IHdhbnRzIHRvIHdyaXRlCi0gKiBAd3JpdGVyX3N0cmluZzogQSBkZXNjcmlwdGlvbiBvZiB0aGUgd3JpdGVyLgotICogQHVzZXJfZGF0YTogdXNlcl9kYXRhIGFzIHJlZ2lzdGVyZWQKLSAqCi0gKiBGdW5jdGlvbiB0byByZXNvbHZlIGlkcyB0byB3cml0ZXIgZGVzY3JpcHRpb25zLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIGFuIGlkIGNvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSB3cml0ZXIuCi0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gICAgICAgICgqR3N0SW5kZXhSZXNvbHZlcikgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE9iamVjdCAqd3JpdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKip3cml0ZXJfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBHc3RJbmRleEZsYWdzOgotICogQEdTVF9JTkRFWF9XUklUQUJMRTogVGhlIGluZGV4IGlzIHdyaXRhYmxlCi0gKiBAR1NUX0lOREVYX1JFQURBQkxFOiBUaGUgaW5kZXggaXMgcmVhZGFibGUKLSAqIEBHU1RfSU5ERVhfRkxBR19MQVNUOiBGaXJzdCBmbGFnIHRoYXQgY2FuIGJlIHVzZWQgYnkgc3ViY2xhc3NlcwotICoKLSAqIEZsYWdzIGZvciB0aGlzIGluZGV4Ci0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9JTkRFWF9XUklUQUJMRSAgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCAwKSwKLSAgR1NUX0lOREVYX1JFQURBQkxFICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDEpLAotCi0gIEdTVF9JTkRFWF9GTEFHX0xBU1QgICA9IChHU1RfT0JKRUNUX0ZMQUdfTEFTVCA8PCA4KQotfSBHc3RJbmRleEZsYWdzOwotCi0vKioKLSAqIEdTVF9JTkRFWF9JU19SRUFEQUJMRToKLSAqIEBvYmo6IFRoZSBpbmRleCB0byBjaGVjawotICoKLSAqIENoZWNrIGlmIHRoZSBpbmRleCBjYW4gYmUgcmVhZCBmcm9tCi0gKi8KLSNkZWZpbmUgR1NUX0lOREVYX0lTX1JFQURBQkxFKG9iaikgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKG9iaiwgR1NUX0lOREVYX1JFQURBQkxFKSkKLQotLyoqCi0gKiBHU1RfSU5ERVhfSVNfV1JJVEFCTEU6Ci0gKiBAb2JqOiBUaGUgaW5kZXggdG8gY2hlY2sKLSAqCi0gKiBDaGVjayBpZiB0aGUgaW5kZXggY2FuIGJlIHdyaXR0ZW4gdG8KLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfSVNfV1JJVEFCTEUob2JqKSAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAob2JqLCBHU1RfSU5ERVhfV1JJVEFCTEUpKQotCi0vKioKLSAqIEdzdEluZGV4OgotICoKLSAqIE9wYXF1ZSAjR3N0SW5kZXggc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdEluZGV4IHsKLSAgR3N0T2JqZWN0ICAgICAgICAgICAgICBvYmplY3Q7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdMaXN0ICAgICAgICAgICAgICAgICAqZ3JvdXBzOwotICBHc3RJbmRleEdyb3VwICAgICAgICAgKmN1cmdyb3VwOwotICBnaW50ICAgICAgICAgICAgICAgICAgIG1heGdyb3VwOwotCi0gIEdzdEluZGV4UmVzb2x2ZXJNZXRob2QgbWV0aG9kOwotICBHc3RJbmRleFJlc29sdmVyICAgICAgIHJlc29sdmVyOwotICBncG9pbnRlciAgICAgICAgICAgICAgIHJlc29sdmVyX3VzZXJfZGF0YTsKLSAgR0Rlc3Ryb3lOb3RpZnkgICAgICAgICByZXNvbHZlcl91c2VyX2RhdGFfZGVzdHJveTsKLQotICBHc3RJbmRleEZpbHRlciAgICAgICAgIGZpbHRlcjsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgICBmaWx0ZXJfdXNlcl9kYXRhOwotICBHRGVzdHJveU5vdGlmeSAgICAgICAgIGZpbHRlcl91c2VyX2RhdGFfZGVzdHJveTsKLQotICBHSGFzaFRhYmxlICAgICAgICAgICAgKndyaXRlcnM7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICAgbGFzdF9pZDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdEluZGV4Q2xhc3MgewotICBHc3RPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHByb3RlY3RlZCA+Ki8KLSAgZ2Jvb2xlYW4gICAgICAoKmdldF93cml0ZXJfaWQpICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50ICppZCwgZ2NoYXIgKndyaXRlcik7Ci0KLSAgdm9pZCAgICAgICAgICAoKmNvbW1pdCkgICAgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGlkKTsKLQotICAvKiBhYnN0cmFjdCBtZXRob2RzICovCi0gIHZvaWQgICAgICAgICAgKCphZGRfZW50cnkpICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgR3N0SW5kZXhFbnRyeSAqZW50cnkpOwotCi0gIEdzdEluZGV4RW50cnkqICgqZ2V0X2Fzc29jX2VudHJ5KSAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SW5kZXhMb29rdXBNZXRob2QgbWV0aG9kLCBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NvbXBhcmVEYXRhRnVuYyBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotICAvKiBzaWduYWxzICovCi0gIHZvaWQgICAgICAgICAgKCplbnRyeV9hZGRlZCkgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgR3N0SW5kZXhFbnRyeSAqZW50cnkpOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLXN0YXRpYwotR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X2dldF90eXBlICAgICAgICAgICAgICAodm9pZCk7Ci0KLSNpZiAwCi1Hc3RJbmRleCogICAgICAgICAgICAgICBnc3RfaW5kZXhfbmV3ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9jb21taXQgICAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCk7Ci0KLWdpbnQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9nZXRfZ3JvdXAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCk7Ci1naW50ICAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfbmV3X2dyb3VwICAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9ncm91cCAgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGdyb3VwbnVtKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9jZXJ0YWludHkgICAgICAgICAoR3N0SW5kZXggKmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SW5kZXhDZXJ0YWludHkgY2VydGFpbnR5KTsKLUdzdEluZGV4Q2VydGFpbnR5ICAgICAgIGdzdF9pbmRleF9nZXRfY2VydGFpbnR5ICAgICAgICAgKEdzdEluZGV4ICppbmRleCk7Ci0KLXN0YXRpYwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9maWx0ZXIgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SW5kZXhGaWx0ZXIgZmlsdGVyLCBncG9pbnRlciB1c2VyX2RhdGEpOwotc3RhdGljCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsICAgICAgIChHc3RJbmRleCAqaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleEZpbHRlciBmaWx0ZXIsIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IHVzZXJfZGF0YV9kZXN0cm95KTsKLQotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9yZXNvbHZlciAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SW5kZXhSZXNvbHZlciByZXNvbHZlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCAgICAgKEdzdEluZGV4ICppbmRleCwgR3N0SW5kZXhSZXNvbHZlciByZXNvbHZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IHVzZXJfZGF0YV9kZXN0cm95KTsKLSNlbmRpZgotCi1zdGF0aWMKLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgR3N0T2JqZWN0ICp3cml0ZXIsIGdpbnQgKmlkKTsKLQotI2lmIDAKLUdzdEluZGV4RW50cnkqICAgICAgICAgIGdzdF9pbmRleF9hZGRfZm9ybWF0ICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCwgR3N0Rm9ybWF0IGZvcm1hdCk7Ci0jZW5kaWYKLQotc3RhdGljCi1Hc3RJbmRleEVudHJ5KiAgICAgICAgICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAgICAgIChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLCBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IG4sIGNvbnN0IEdzdEluZGV4QXNzb2NpYXRpb24gKiBsaXN0KTsKLSNpZiAwCi1Hc3RJbmRleEVudHJ5KiAgICAgICAgICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQsIEdzdEluZGV4QXNzb2NpYXRpb25GbGFncyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCB2YWx1ZSwgLi4uKQotR3N0SW5kZXhFbnRyeSogICAgICAgICAgZ3N0X2luZGV4X2FkZF9vYmplY3QgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGlkLCBnY2hhciAqa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1R5cGUgdHlwZSwgZ3BvaW50ZXIgb2JqZWN0KTsKLSNlbmRpZgotCi1zdGF0aWMKLUdzdEluZGV4RW50cnkqICAgICAgICAgIGdzdF9pbmRleF9hZGRfaWQgICAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICpkZXNjcmlwdGlvbik7Ci0KLXN0YXRpYwotR3N0SW5kZXhFbnRyeSogICAgICAgICAgZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeSAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SW5kZXhMb29rdXBNZXRob2QgbWV0aG9kLCBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUpOwotc3RhdGljCi1Hc3RJbmRleEVudHJ5KiAgICAgICAgICBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5X2Z1bGwgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleExvb2t1cE1ldGhvZCBtZXRob2QsIEdzdEluZGV4QXNzb2NpYXRpb25GbGFncyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDb21wYXJlRGF0YUZ1bmMgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qIHdvcmtpbmcgd2l0aCBpbmRleCBlbnRyaWVzICovCi1zdGF0aWMKLUdUeXBlIGdzdF9pbmRleF9lbnRyeV9nZXRfdHlwZSAodm9pZCk7Ci1zdGF0aWMKLUdzdEluZGV4RW50cnkgKiAgICAgICAgIGdzdF9pbmRleF9lbnRyeV9jb3B5ICAgICAgICAgICAgKEdzdEluZGV4RW50cnkgKmVudHJ5KTsKLXN0YXRpYwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X2VudHJ5X2ZyZWUgICAgICAgICAgICAoR3N0SW5kZXhFbnRyeSAqZW50cnkpOwotc3RhdGljCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwICAgICAgIChHc3RJbmRleEVudHJ5ICplbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCAqdmFsdWUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfSU5ERVhfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdG1lbWluZGV4LmMgYi9saWJzL2dzdC9iYXNlL2dzdG1lbWluZGV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Njc0NDcuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RtZW1pbmRleC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jZGVmaW5lIEdTVF9UWVBFX01FTV9JTkRFWCAgICAgICAgICAgICAgXAotICAoZ3N0X2luZGV4X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfTUVNX0lOREVYKG9iaikgICAgICAgICAgICAgIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfTUVNX0lOREVYLCBHc3RNZW1JbmRleCkpCi0jZGVmaW5lIEdTVF9NRU1fSU5ERVhfQ0xBU1Moa2xhc3MpICAgICAgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX01FTV9JTkRFWCwgR3N0TWVtSW5kZXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19NRU1fSU5ERVgob2JqKSAgICAgICAgICAgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9NRU1fSU5ERVgpKQotI2RlZmluZSBHU1RfSVNfTUVNX0lOREVYX0NMQVNTKGtsYXNzKSAgICAgXAotICAoR1NUX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfTUVNX0lOREVYKSkKLQotLyoKLSAqIE9iamVjdCBtb2RlbDoKLSAqCi0gKiBBbGwgZW50cmllcyBhcmUgc2ltcGx5IGFkZGVkIHRvIGEgR0xpc3QgZmlyc3QuIFRoZW4gd2UgYnVpbGQKLSAqIGFuIGluZGV4IHRvIGVhY2ggZW50cnkgZm9yIGVhY2ggaWQvZm9ybWF0Ci0gKgotICoKLSAqICBtZW1pbmRleAotICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uLi4KLSAqICAgICEgICAgICAgICAgICAgICAgICAhCi0gKiAgIGlkMSAgICAgICAgICAgICAgICAgaWQyCi0gKiAgICAtLS0tLS0tLS0tLS0KLSAqICAgICEgICAgICAgICAgIQotICogICBmb3JtYXQxICBmb3JtYXQyCi0gKiAgICAhICAgICAgICAgICEKLSAqICAgR1RyZWUgICAgICBHVHJlZQotICoKLSAqCi0gKiBUaGUgbWVtaW5kZXggY3JlYXRlcyBhIE1lbUluZGV4SWQgb2JqZWN0IGZvciBlYWNoIHdyaXRlciBpZCwgYQotICogSGFzaHRhYmxlIGlzIGtlcHQgdG8gbWFwIHRoZSBpZCB0byB0aGUgTWVtSW5kZXhJZAotICoKLSAqIFRoZSBNZW1JbmRleElkIGtlZXBzIGEgTWVtSW5kZXhGb3JtYXRJbmRleCBmb3IgZWFjaCBmb3JtYXQgdGhlCi0gKiBzcGVjaWZpYyB3cml0ZXIgd2FudHMgaW5kZXhlZC4KLSAqCi0gKiBUaGUgTWVtSW5kZXhGb3JtYXRJbmRleCBrZWVwcyBhbGwgdGhlIHZhbHVlcyBvZiB0aGUgcGFydGljdWxhcgotICogZm9ybWF0IGluIGEgR1RyZWUsIFRoZSB2YWx1ZXMgb2YgdGhlIEdUcmVlIHBvaW50IGJhY2sgdG8gdGhlIGVudHJ5LgotICoKLSAqIEZpbmRpbmcgYSB2YWx1ZSBmb3IgYW4gaWQvZm9ybWF0IHJlcXVpcmVzIGxvY2F0aW5nIHRoZSBjb3JyZWN0IEdUcmVlLAotICogdGhlbiBkbyBhIGxvb2t1cCBpbiB0aGUgVHJlZSB0byBnZXQgdGhlIHJlcXVpcmVkIHZhbHVlLgotICovCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gIGdpbnQgb2Zmc2V0OwotICBHVHJlZSAqdHJlZTsKLX0KLUdzdE1lbUluZGV4Rm9ybWF0SW5kZXg7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdpbnQgaWQ7Ci0gIEdIYXNoVGFibGUgKmZvcm1hdF9pbmRleDsKLX0KLUdzdE1lbUluZGV4SWQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNZW1JbmRleCBHc3RNZW1JbmRleDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RNZW1JbmRleENsYXNzIEdzdE1lbUluZGV4Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0TWVtSW5kZXgKLXsKLSAgR3N0SW5kZXggcGFyZW50OwotCi0gIEdMaXN0ICphc3NvY2lhdGlvbnM7Ci0KLSAgR0hhc2hUYWJsZSAqaWRfaW5kZXg7Ci19OwotCi1zdHJ1Y3QgX0dzdE1lbUluZGV4Q2xhc3MKLXsKLSAgR3N0SW5kZXhDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1zdGF0aWMgdm9pZCBnc3RfbWVtX2luZGV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X21lbV9pbmRleF9hZGRfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIEdzdEluZGV4RW50cnkgKiBlbnRyeSk7Ci1zdGF0aWMgR3N0SW5kZXhFbnRyeSAqZ3N0X21lbV9pbmRleF9nZXRfYXNzb2NfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsCi0gICAgR3N0SW5kZXhMb29rdXBNZXRob2QgbWV0aG9kLCBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLCBHQ29tcGFyZURhdGFGdW5jIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLSNkZWZpbmUgQ0xBU1MobWVtX2luZGV4KSAgR1NUX01FTV9JTkRFWF9DTEFTUyAoR19PQkpFQ1RfR0VUX0NMQVNTIChtZW1faW5kZXgpKQotCi1zdGF0aWMgR1R5cGUgZ3N0X21lbV9pbmRleF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdE1lbUluZGV4LCBnc3RfbWVtX2luZGV4LCBHU1RfVFlQRV9JTkRFWCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWVtX2luZGV4X2NsYXNzX2luaXQgKEdzdE1lbUluZGV4Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RJbmRleENsYXNzICpnc3RpbmRleF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0aW5kZXhfY2xhc3MgPSAoR3N0SW5kZXhDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9tZW1faW5kZXhfZmluYWxpemU7Ci0KLSAgZ3N0aW5kZXhfY2xhc3MtPmFkZF9lbnRyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWVtX2luZGV4X2FkZF9lbnRyeSk7Ci0gIGdzdGluZGV4X2NsYXNzLT5nZXRfYXNzb2NfZW50cnkgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tZW1faW5kZXhfZ2V0X2Fzc29jX2VudHJ5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfaW5pdCAoR3N0TWVtSW5kZXggKiBpbmRleCkKLXsKLSAgR1NUX0RFQlVHICgiY3JlYXRlZCBuZXcgbWVtIGluZGV4Iik7Ci0KLSAgaW5kZXgtPmFzc29jaWF0aW9ucyA9IE5VTEw7Ci0gIGluZGV4LT5pZF9pbmRleCA9IGdfaGFzaF90YWJsZV9uZXcgKGdfaW50X2hhc2gsIGdfaW50X2VxdWFsKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfZnJlZV9mb3JtYXQgKGdwb2ludGVyIGtleSwgZ3BvaW50ZXIgdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0TWVtSW5kZXhGb3JtYXRJbmRleCAqaW5kZXggPSAoR3N0TWVtSW5kZXhGb3JtYXRJbmRleCAqKSB2YWx1ZTsKLQotICBpZiAoaW5kZXgtPnRyZWUpIHsKLSAgICBnX3RyZWVfZGVzdHJveSAoaW5kZXgtPnRyZWUpOwotICB9Ci0KLSAgZ19zbGljZV9mcmVlIChHc3RNZW1JbmRleEZvcm1hdEluZGV4LCBpbmRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWVtX2luZGV4X2ZyZWVfaWQgKGdwb2ludGVyIGtleSwgZ3BvaW50ZXIgdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0TWVtSW5kZXhJZCAqaWRfaW5kZXggPSAoR3N0TWVtSW5kZXhJZCAqKSB2YWx1ZTsKLQotICBpZiAoaWRfaW5kZXgtPmZvcm1hdF9pbmRleCkgewotICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoIChpZF9pbmRleC0+Zm9ybWF0X2luZGV4LCBnc3RfbWVtX2luZGV4X2ZyZWVfZm9ybWF0LAotICAgICAgICBOVUxMKTsKLSAgICBnX2hhc2hfdGFibGVfZGVzdHJveSAoaWRfaW5kZXgtPmZvcm1hdF9pbmRleCk7Ci0gICAgaWRfaW5kZXgtPmZvcm1hdF9pbmRleCA9IE5VTEw7Ci0gIH0KLQotICBnX3NsaWNlX2ZyZWUgKEdzdE1lbUluZGV4SWQsIGlkX2luZGV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE1lbUluZGV4ICptZW1pbmRleCA9IEdTVF9NRU1fSU5ERVggKG9iamVjdCk7Ci0KLSAgLyogRGVsZXRlIHRoZSB0cmVlcyByZWZlcmVuY2luZyB0aGUgYXNzb2NpYXRpb25zIGZpcnN0ICovCi0gIGlmIChtZW1pbmRleC0+aWRfaW5kZXgpIHsKLSAgICBnX2hhc2hfdGFibGVfZm9yZWFjaCAobWVtaW5kZXgtPmlkX2luZGV4LCBnc3RfbWVtX2luZGV4X2ZyZWVfaWQsIE5VTEwpOwotICAgIGdfaGFzaF90YWJsZV9kZXN0cm95IChtZW1pbmRleC0+aWRfaW5kZXgpOwotICAgIG1lbWluZGV4LT5pZF9pbmRleCA9IE5VTEw7Ci0gIH0KLQotICAvKiBUaGVuIGRlbGV0ZSB0aGUgYXNzb2NpYXRpb25zIHRoZW1zZWx2ZXMgKi8KLSAgaWYgKG1lbWluZGV4LT5hc3NvY2lhdGlvbnMpIHsKLSAgICBnX2xpc3RfZm9yZWFjaCAobWVtaW5kZXgtPmFzc29jaWF0aW9ucywgKEdGdW5jKSBnc3RfaW5kZXhfZW50cnlfZnJlZSwgTlVMTCk7Ci0gICAgZ19saXN0X2ZyZWUgKG1lbWluZGV4LT5hc3NvY2lhdGlvbnMpOwotICAgIG1lbWluZGV4LT5hc3NvY2lhdGlvbnMgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9tZW1faW5kZXhfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWVtX2luZGV4X2FkZF9pZCAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQotewotICBHc3RNZW1JbmRleCAqbWVtaW5kZXggPSBHU1RfTUVNX0lOREVYIChpbmRleCk7Ci0gIEdzdE1lbUluZGV4SWQgKmlkX2luZGV4OwotCi0gIGlkX2luZGV4ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAobWVtaW5kZXgtPmlkX2luZGV4LCAmZW50cnktPmlkKTsKLQotICBpZiAoIWlkX2luZGV4KSB7Ci0gICAgaWRfaW5kZXggPSBnX3NsaWNlX25ldzAgKEdzdE1lbUluZGV4SWQpOwotCi0gICAgaWRfaW5kZXgtPmlkID0gZW50cnktPmlkOwotICAgIGlkX2luZGV4LT5mb3JtYXRfaW5kZXggPSBnX2hhc2hfdGFibGVfbmV3IChnX2ludF9oYXNoLCBnX2ludF9lcXVhbCk7Ci0gICAgZ19oYXNoX3RhYmxlX2luc2VydCAobWVtaW5kZXgtPmlkX2luZGV4LCAmaWRfaW5kZXgtPmlkLCBpZF9pbmRleCk7Ci0gIH0KLX0KLQotc3RhdGljIGdpbnQKLW1lbV9pbmRleF9jb21wYXJlIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RNZW1JbmRleEZvcm1hdEluZGV4ICppbmRleCA9IHVzZXJfZGF0YTsKLSAgZ2ludDY0IHZhbDEsIHZhbDI7Ci0gIGdpbnQ2NCBkaWZmOwotCi0gIHZhbDEgPSBHU1RfSU5ERVhfQVNTT0NfVkFMVUUgKCgoR3N0SW5kZXhFbnRyeSAqKSBhKSwgaW5kZXgtPm9mZnNldCk7Ci0gIHZhbDIgPSBHU1RfSU5ERVhfQVNTT0NfVkFMVUUgKCgoR3N0SW5kZXhFbnRyeSAqKSBiKSwgaW5kZXgtPm9mZnNldCk7Ci0KLSAgZGlmZiA9ICh2YWwyIC0gdmFsMSk7Ci0KLSAgcmV0dXJuIChkaWZmID09IDAgPyAwIDogKGRpZmYgPiAwID8gMSA6IC0xKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWVtX2luZGV4X2luZGV4X2Zvcm1hdCAoR3N0TWVtSW5kZXhJZCAqIGlkX2luZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnksCi0gICAgZ2ludCBhc3NvYykKLXsKLSAgR3N0TWVtSW5kZXhGb3JtYXRJbmRleCAqaW5kZXg7Ci0gIEdzdEZvcm1hdCAqZm9ybWF0OwotCi0gIGZvcm1hdCA9ICZHU1RfSU5ERVhfQVNTT0NfRk9STUFUIChlbnRyeSwgYXNzb2MpOwotCi0gIGluZGV4ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoaWRfaW5kZXgtPmZvcm1hdF9pbmRleCwgZm9ybWF0KTsKLQotICBpZiAoIWluZGV4KSB7Ci0gICAgaW5kZXggPSBnX3NsaWNlX25ldzAgKEdzdE1lbUluZGV4Rm9ybWF0SW5kZXgpOwotCi0gICAgaW5kZXgtPmZvcm1hdCA9ICpmb3JtYXQ7Ci0gICAgaW5kZXgtPm9mZnNldCA9IGFzc29jOwotICAgIGluZGV4LT50cmVlID0gZ190cmVlX25ld193aXRoX2RhdGEgKG1lbV9pbmRleF9jb21wYXJlLCBpbmRleCk7Ci0KLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChpZF9pbmRleC0+Zm9ybWF0X2luZGV4LCAmaW5kZXgtPmZvcm1hdCwgaW5kZXgpOwotICB9Ci0KLSAgZ190cmVlX2luc2VydCAoaW5kZXgtPnRyZWUsIGVudHJ5LCBlbnRyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWVtX2luZGV4X2FkZF9hc3NvY2lhdGlvbiAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQotewotICBHc3RNZW1JbmRleCAqbWVtaW5kZXggPSBHU1RfTUVNX0lOREVYIChpbmRleCk7Ci0gIEdzdE1lbUluZGV4SWQgKmlkX2luZGV4OwotCi0gIG1lbWluZGV4LT5hc3NvY2lhdGlvbnMgPSBnX2xpc3RfcHJlcGVuZCAobWVtaW5kZXgtPmFzc29jaWF0aW9ucywgZW50cnkpOwotCi0gIGlkX2luZGV4ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAobWVtaW5kZXgtPmlkX2luZGV4LCAmZW50cnktPmlkKTsKLSAgaWYgKGlkX2luZGV4KSB7Ci0gICAgZ2ludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IEdTVF9JTkRFWF9OQVNTT0NTIChlbnRyeSk7IGkrKykgewotICAgICAgZ3N0X21lbV9pbmRleF9pbmRleF9mb3JtYXQgKGlkX2luZGV4LCBlbnRyeSwgaSk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWVtX2luZGV4X2FkZF9vYmplY3QgKEdzdEluZGV4ICogaW5kZXgsIEdzdEluZGV4RW50cnkgKiBlbnRyeSkKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfYWRkX2Zvcm1hdCAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21lbV9pbmRleF9hZGRfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIEdzdEluZGV4RW50cnkgKiBlbnRyeSkKLXsKLSAgR1NUX0xPR19PQkpFQ1QgKGluZGV4LCAiYWRkZWQgdGhpcyBlbnRyeSIpOwotCi0gIHN3aXRjaCAoZW50cnktPnR5cGUpIHsKLSAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9JRDoKLSAgICAgIGdzdF9tZW1faW5kZXhfYWRkX2lkIChpbmRleCwgZW50cnkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfQVNTT0NJQVRJT046Ci0gICAgICBnc3RfbWVtX2luZGV4X2FkZF9hc3NvY2lhdGlvbiAoaW5kZXgsIGVudHJ5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0lOREVYX0VOVFJZX09CSkVDVDoKLSAgICAgIGdzdF9tZW1faW5kZXhfYWRkX29iamVjdCAoaW5kZXgsIGVudHJ5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0lOREVYX0VOVFJZX0ZPUk1BVDoKLSAgICAgIGdzdF9tZW1faW5kZXhfYWRkX2Zvcm1hdCAoaW5kZXgsIGVudHJ5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBnaW50NjQgdmFsdWU7Ci0gIEdzdE1lbUluZGV4Rm9ybWF0SW5kZXggKmluZGV4OwotICBnYm9vbGVhbiBleGFjdDsKLSAgR3N0SW5kZXhFbnRyeSAqbG93ZXI7Ci0gIGdpbnQ2NCBsb3dfZGlmZjsKLSAgR3N0SW5kZXhFbnRyeSAqaGlnaGVyOwotICBnaW50NjQgaGlnaF9kaWZmOwotfQotR3N0TWVtSW5kZXhTZWFyY2hEYXRhOwotCi1zdGF0aWMgZ2ludAotbWVtX2luZGV4X3NlYXJjaCAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCi17Ci0gIEdzdE1lbUluZGV4U2VhcmNoRGF0YSAqZGF0YSA9IChHc3RNZW1JbmRleFNlYXJjaERhdGEgKikgYjsKLSAgR3N0TWVtSW5kZXhGb3JtYXRJbmRleCAqaW5kZXggPSBkYXRhLT5pbmRleDsKLSAgZ2ludDY0IHZhbDEsIHZhbDI7Ci0gIGdpbnQ2NCBkaWZmOwotCi0gIHZhbDEgPSBHU1RfSU5ERVhfQVNTT0NfVkFMVUUgKCgoR3N0SW5kZXhFbnRyeSAqKSBhKSwgaW5kZXgtPm9mZnNldCk7Ci0gIHZhbDIgPSBkYXRhLT52YWx1ZTsKLQotICBkaWZmID0gKHZhbDEgLSB2YWwyKTsKLSAgaWYgKGRpZmYgPT0gMCkKLSAgICByZXR1cm4gMDsKLQotICAvKiBleGFjdCBtYXRjaGluZywgZG9uJ3QgdXBkYXRlIGxvdy9oaWdoICovCi0gIGlmIChkYXRhLT5leGFjdCkKLSAgICByZXR1cm4gKGRpZmYgPiAwID8gMSA6IC0xKTsKLQotICBpZiAoZGlmZiA8IDApIHsKLSAgICBpZiAoZGlmZiA+IGRhdGEtPmxvd19kaWZmKSB7Ci0gICAgICBkYXRhLT5sb3dfZGlmZiA9IGRpZmY7Ci0gICAgICBkYXRhLT5sb3dlciA9IChHc3RJbmRleEVudHJ5ICopIGE7Ci0gICAgfQotICAgIGRpZmYgPSAtMTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoZGlmZiA8IGRhdGEtPmhpZ2hfZGlmZikgewotICAgICAgZGF0YS0+aGlnaF9kaWZmID0gZGlmZjsKLSAgICAgIGRhdGEtPmhpZ2hlciA9IChHc3RJbmRleEVudHJ5ICopIGE7Ci0gICAgfQotICAgIGRpZmYgPSAxOwotICB9Ci0KLSAgcmV0dXJuIGRpZmY7Ci19Ci0KLXN0YXRpYyBHc3RJbmRleEVudHJ5ICoKLWdzdF9tZW1faW5kZXhfZ2V0X2Fzc29jX2VudHJ5IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLAotICAgIEdzdEluZGV4TG9va3VwTWV0aG9kIG1ldGhvZCwKLSAgICBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLCBHQ29tcGFyZURhdGFGdW5jIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0TWVtSW5kZXggKm1lbWluZGV4ID0gR1NUX01FTV9JTkRFWCAoaW5kZXgpOwotICBHc3RNZW1JbmRleElkICppZF9pbmRleDsKLSAgR3N0TWVtSW5kZXhGb3JtYXRJbmRleCAqZm9ybWF0X2luZGV4OwotICBHc3RJbmRleEVudHJ5ICplbnRyeTsKLSAgR3N0TWVtSW5kZXhTZWFyY2hEYXRhIGRhdGE7Ci0KLSAgaWRfaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChtZW1pbmRleC0+aWRfaW5kZXgsICZpZCk7Ci0gIGlmICghaWRfaW5kZXgpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZm9ybWF0X2luZGV4ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoaWRfaW5kZXgtPmZvcm1hdF9pbmRleCwgJmZvcm1hdCk7Ci0gIGlmICghZm9ybWF0X2luZGV4KQotICAgIHJldHVybiBOVUxMOwotCi0gIGRhdGEudmFsdWUgPSB2YWx1ZTsKLSAgZGF0YS5pbmRleCA9IGZvcm1hdF9pbmRleDsKLSAgZGF0YS5leGFjdCA9IChtZXRob2QgPT0gR1NUX0lOREVYX0xPT0tVUF9FWEFDVCk7Ci0KLSAgLyogc2V0dXAgZGF0YSBmb3IgbG93L2hpZ2ggY2hlY2tzIGlmIHdlIGFyZSBub3QgbG9va2luZwotICAgKiBmb3IgYW4gZXhhY3QgbWF0Y2ggKi8KLSAgaWYgKCFkYXRhLmV4YWN0KSB7Ci0gICAgZGF0YS5sb3dfZGlmZiA9IEdfTUlOSU5UNjQ7Ci0gICAgZGF0YS5sb3dlciA9IE5VTEw7Ci0gICAgZGF0YS5oaWdoX2RpZmYgPSBHX01BWElOVDY0OwotICAgIGRhdGEuaGlnaGVyID0gTlVMTDsKLSAgfQotCi0gIGVudHJ5ID0gZ190cmVlX3NlYXJjaCAoZm9ybWF0X2luZGV4LT50cmVlLCBtZW1faW5kZXhfc2VhcmNoLCAmZGF0YSk7Ci0KLSAgLyogZ2V0IHRoZSBsb3cvaGlnaCB2YWx1ZXMgaWYgd2UncmUgbm90IGV4YWN0ICovCi0gIGlmIChlbnRyeSA9PSBOVUxMICYmICFkYXRhLmV4YWN0KSB7Ci0gICAgaWYgKG1ldGhvZCA9PSBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRSkKLSAgICAgIGVudHJ5ID0gZGF0YS5sb3dlcjsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gR1NUX0lOREVYX0xPT0tVUF9BRlRFUikgewotICAgICAgZW50cnkgPSBkYXRhLmhpZ2hlcjsKLSAgICB9Ci0gIH0KLQotICBpZiAoZW50cnkgJiYgKChHU1RfSU5ERVhfQVNTT0NfRkxBR1MgKGVudHJ5KSAmIGZsYWdzKSAhPSBmbGFncykpIHsKLSAgICBpZiAobWV0aG9kICE9IEdTVF9JTkRFWF9MT09LVVBfRVhBQ1QpIHsKLSAgICAgIEdMaXN0ICpsX2VudHJ5ID0gZ19saXN0X2ZpbmQgKG1lbWluZGV4LT5hc3NvY2lhdGlvbnMsIGVudHJ5KTsKLQotICAgICAgZW50cnkgPSBOVUxMOwotCi0gICAgICB3aGlsZSAobF9lbnRyeSkgewotICAgICAgICBlbnRyeSA9IChHc3RJbmRleEVudHJ5ICopIGxfZW50cnktPmRhdGE7Ci0KLSAgICAgICAgaWYgKGVudHJ5LT5pZCA9PSBpZCAmJiAoR1NUX0lOREVYX0FTU09DX0ZMQUdTIChlbnRyeSkgJiBmbGFncykgPT0gZmxhZ3MpCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKG1ldGhvZCA9PSBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRSkKLSAgICAgICAgICBsX2VudHJ5ID0gZ19saXN0X25leHQgKGxfZW50cnkpOwotICAgICAgICBlbHNlIGlmIChtZXRob2QgPT0gR1NUX0lOREVYX0xPT0tVUF9BRlRFUikgewotICAgICAgICAgIGxfZW50cnkgPSBnX2xpc3RfcHJldmlvdXMgKGxfZW50cnkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVudHJ5ID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gZW50cnk7Ci19Ci0KLSNpZiAwCi1nYm9vbGVhbgotZ3N0X21lbV9pbmRleF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHc3RJbmRleEZhY3RvcnkgKmZhY3Rvcnk7Ci0KLSAgZmFjdG9yeSA9IGdzdF9pbmRleF9mYWN0b3J5X25ldyAoIm1lbWluZGV4IiwKLSAgICAgICJBIGluZGV4IHRoYXQgc3RvcmVzIGVudHJpZXMgaW4gbWVtb3J5IiwgZ3N0X21lbV9pbmRleF9nZXRfdHlwZSAoKSk7Ci0KLSAgaWYgKGZhY3RvcnkgPT0gTlVMTCkgewotICAgIGdfd2FybmluZyAoImZhaWxlZCB0byBjcmVhdGUgbWVtaW5kZXggZmFjdG9yeSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSktPnBsdWdpbl9uYW1lID0gcGx1Z2luLT5kZXNjLm5hbWU7Ci0gIEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSktPmxvYWRlZCA9IFRSVUU7Ci0KLSAgZ3N0X3JlZ2lzdHJ5X2FkZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0X2RlZmF1bHQgKCksCi0gICAgICBHU1RfUExVR0lOX0ZFQVRVUkUgKGZhY3RvcnkpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RwdXNoc3JjLmMgYi9saWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmODE0Ny4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDAsMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdHB1c2hzcmMuYzoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0cHVzaHNyYwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBCYXNlIGNsYXNzIGZvciBwdXNoIGJhc2VkIHNvdXJjZSBlbGVtZW50cwotICogQHNlZV9hbHNvOiAjR3N0QmFzZVNyYwotICoKLSAqIFRoaXMgY2xhc3MgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZWxlbWVudHMgdGhhdCBjYW5ub3QgZG8KLSAqIHJhbmRvbSBhY2Nlc3MsIG9yIGF0IGxlYXN0IHZlcnkgc2xvd2x5LiBUaGUgc291cmNlIHVzdWFsbHkKLSAqIHByZWZlcnMgdG8gcHVzaCBvdXQgYSBmaXhlZCBzaXplIGJ1ZmZlci4KLSAqCi0gKiBTdWJjbGFzc2VzIHVzdWFsbHkgb3BlcmF0ZSBpbiBhIGZvcm1hdCB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZQotICogZGVmYXVsdCBHU1RfRk9STUFUX0JZVEVTIGZvcm1hdCBvZiAjR3N0QmFzZVNyYy4KLSAqCi0gKiBDbGFzc2VzIGV4dGVuZGluZyB0aGlzIGJhc2UgY2xhc3Mgd2lsbCB1c3VhbGx5IGJlIHNjaGVkdWxlZAotICogaW4gYSBwdXNoIGJhc2VkIG1vZGUuIElmIHRoZSBwZWVyIGFjY2VwdHMgdG8gb3BlcmF0ZSB3aXRob3V0Ci0gKiBvZmZzZXRzIGFuZCB3aXRoaW4gdGhlIGxpbWl0cyBvZiB0aGUgYWxsb3dlZCBibG9jayBzaXplLCB0aGlzCi0gKiBjbGFzcyBjYW4gb3BlcmF0ZSBpbiBnZXRyYW5nZSBiYXNlZCBtb2RlIGF1dG9tYXRpY2FsbHkuIFRvIG1ha2UKLSAqIHRoaXMgcG9zc2libGUsIHRoZSBzdWJjbGFzcyBzaG91bGQgaW1wbGVtZW50IGFuZCBvdmVycmlkZSB0aGUKLSAqIFNDSEVEVUxJTkcgcXVlcnkuCi0gKgotICogVGhlIHN1YmNsYXNzIHNob3VsZCBleHRlbmQgdGhlIG1ldGhvZHMgZnJvbSB0aGUgYmFzZWNsYXNzIGluCi0gKiBhZGRpdGlvbiB0byB0aGUgOjpjcmVhdGUgbWV0aG9kLgotICoKLSAqIFNlZWtpbmcsIGZsdXNoaW5nLCBzY2hlZHVsaW5nIGFuZCBzeW5jIGlzIGFsbCBoYW5kbGVkIGJ5IHRoaXMKLSAqIGJhc2UgY2xhc3MuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdHB1c2hzcmMuaCIKLSNpbmNsdWRlICJnc3R0eXBlZmluZGhlbHBlci5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcHVzaF9zcmNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3B1c2hfc3JjX2RlYnVnCi0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfcHVzaF9zcmNfZGVidWcsICJwdXNoc3JjIiwgMCwgXAotICAgICAgICAicHVzaHNyYyBlbGVtZW50Iik7Ci0KLSNkZWZpbmUgZ3N0X3B1c2hfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RQdXNoU3JjLCBnc3RfcHVzaF9zcmMsIEdTVF9UWVBFX0JBU0VfU1JDLCBfZG9faW5pdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHVzaF9zcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3B1c2hfc3JjX2NyZWF0ZSAoR3N0QmFzZVNyYyAqIGJzcmMsIGd1aW50NjQgb2Zmc2V0LAotICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICoqIHJldCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcHVzaF9zcmNfYWxsb2MgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0IG9mZnNldCwKLSAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiByZXQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3B1c2hfc3JjX2ZpbGwgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0IG9mZnNldCwKLSAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqIHJldCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVzaF9zcmNfY2xhc3NfaW5pdCAoR3N0UHVzaFNyY0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEJhc2VTcmNDbGFzcyAqZ3N0YmFzZXNyY19jbGFzcyA9IChHc3RCYXNlU3JjQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0YmFzZXNyY19jbGFzcy0+Y3JlYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdXNoX3NyY19jcmVhdGUpOwotICBnc3RiYXNlc3JjX2NsYXNzLT5hbGxvYyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVzaF9zcmNfYWxsb2MpOwotICBnc3RiYXNlc3JjX2NsYXNzLT5maWxsID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdXNoX3NyY19maWxsKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1c2hfc3JjX3F1ZXJ5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdXNoX3NyY19pbml0IChHc3RQdXNoU3JjICogcHVzaHNyYykKLXsKLSAgLyogbm9wICovCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1c2hfc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBnYm9vbGVhbiByZXQ7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzoKLSAgICB7Ci0gICAgICAvKiBhIHB1c2hzcmMgY2FuIGJ5IGRlZmF1bHQgbmV2ZXIgb3BlcmF0ZSBpbiBwdWxsIG1vZGUgb3ZlcnJpZGUKLSAgICAgICAqIGlmIHlvdSB3YW50IHNvbWV0aGluZyBkaWZmZXJlbnQuICovCi0gICAgICBnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKHF1ZXJ5LCBHU1RfU0NIRURVTElOR19GTEFHX1NFUVVFTlRJQUwsIDEsIC0xLAotICAgICAgICAgIDApOwotICAgICAgZ3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGUgKHF1ZXJ5LCBHU1RfUEFEX01PREVfUFVTSCk7Ci0KLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IEdTVF9CQVNFX1NSQ19DTEFTUyAocGFyZW50X2NsYXNzKS0+cXVlcnkgKHNyYywgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3B1c2hfc3JjX2NyZWF0ZSAoR3N0QmFzZVNyYyAqIGJzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsCi0gICAgR3N0QnVmZmVyICoqIHJldCkKLXsKLSAgR3N0Rmxvd1JldHVybiBmcmV0OwotICBHc3RQdXNoU3JjICpzcmM7Ci0gIEdzdFB1c2hTcmNDbGFzcyAqcGNsYXNzOwotCi0gIHNyYyA9IEdTVF9QVVNIX1NSQyAoYnNyYyk7Ci0gIHBjbGFzcyA9IEdTVF9QVVNIX1NSQ19HRVRfQ0xBU1MgKHNyYyk7Ci0gIGlmIChwY2xhc3MtPmNyZWF0ZSkKLSAgICBmcmV0ID0gcGNsYXNzLT5jcmVhdGUgKHNyYywgcmV0KTsKLSAgZWxzZQotICAgIGZyZXQgPQotICAgICAgICBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNyZWF0ZSAoYnNyYywgb2Zmc2V0LCBsZW5ndGgsIHJldCk7Ci0KLSAgcmV0dXJuIGZyZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcHVzaF9zcmNfYWxsb2MgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLAotICAgIEdzdEJ1ZmZlciAqKiByZXQpCi17Ci0gIEdzdEZsb3dSZXR1cm4gZnJldDsKLSAgR3N0UHVzaFNyYyAqc3JjOwotICBHc3RQdXNoU3JjQ2xhc3MgKnBjbGFzczsKLQotICBzcmMgPSBHU1RfUFVTSF9TUkMgKGJzcmMpOwotICBwY2xhc3MgPSBHU1RfUFVTSF9TUkNfR0VUX0NMQVNTIChzcmMpOwotICBpZiAocGNsYXNzLT5hbGxvYykKLSAgICBmcmV0ID0gcGNsYXNzLT5hbGxvYyAoc3JjLCByZXQpOwotICBlbHNlCi0gICAgZnJldCA9IEdTVF9CQVNFX1NSQ19DTEFTUyAocGFyZW50X2NsYXNzKS0+YWxsb2MgKGJzcmMsIG9mZnNldCwgbGVuZ3RoLCByZXQpOwotCi0gIHJldHVybiBmcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3B1c2hfc3JjX2ZpbGwgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLAotICAgIEdzdEJ1ZmZlciAqIHJldCkKLXsKLSAgR3N0Rmxvd1JldHVybiBmcmV0OwotICBHc3RQdXNoU3JjICpzcmM7Ci0gIEdzdFB1c2hTcmNDbGFzcyAqcGNsYXNzOwotCi0gIHNyYyA9IEdTVF9QVVNIX1NSQyAoYnNyYyk7Ci0gIHBjbGFzcyA9IEdTVF9QVVNIX1NSQ19HRVRfQ0xBU1MgKHNyYyk7Ci0gIGlmIChwY2xhc3MtPmZpbGwpCi0gICAgZnJldCA9IHBjbGFzcy0+ZmlsbCAoc3JjLCByZXQpOwotICBlbHNlCi0gICAgZnJldCA9IEdTVF9CQVNFX1NSQ19DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmlsbCAoYnNyYywgb2Zmc2V0LCBsZW5ndGgsIHJldCk7Ci0KLSAgcmV0dXJuIGZyZXQ7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdHB1c2hzcmMuaCBiL2xpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDE5NzMwLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0cHVzaHNyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RwdXNoc3JjLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9QVVNIX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfUFVTSF9TUkNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUFVTSF9TUkMgICAgICAgICAgICAgICAoZ3N0X3B1c2hfc3JjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9QVVNIX1NSQyhvYmopICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1BVU0hfU1JDLEdzdFB1c2hTcmMpKQotI2RlZmluZSBHU1RfUFVTSF9TUkNfQ0xBU1Moa2xhc3MpICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1BVU0hfU1JDLEdzdFB1c2hTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9QVVNIX1NSQ19HRVRfQ0xBU1Mob2JqKSAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUFVTSF9TUkMsIEdzdFB1c2hTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19QVVNIX1NSQyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1BVU0hfU1JDKSkKLSNkZWZpbmUgR1NUX0lTX1BVU0hfU1JDX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9QVVNIX1NSQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQdXNoU3JjIEdzdFB1c2hTcmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UHVzaFNyY0NsYXNzIEdzdFB1c2hTcmNDbGFzczsKLQotLyoqCi0gKiBHc3RQdXNoU3JjOgotICoKLSAqIFRoZSBvcGFxdWUgI0dzdFB1c2hTcmMgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0UHVzaFNyYyB7Ci0gIEdzdEJhc2VTcmMgICAgIHBhcmVudDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0vKioKLSAqIEdzdFB1c2hTcmNDbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IEVsZW1lbnQgcGFyZW50IGNsYXNzCi0gKiBAY3JlYXRlOiBBc2sgdGhlIHN1YmNsYXNzIHRvIGNyZWF0ZSBhIGJ1ZmZlci4gVGhlIHN1YmNsYXNzIGRlY2lkZXMgd2hpY2gKLSAqICAgICAgICAgIHNpemUgdGhpcyBidWZmZXIgc2hvdWxkIGJlLiBPdGhlciB0aGVuIHRoYXQsIHJlZmVyIHRvCi0gKiAgICAgICAgICAjR3N0QmFzZVNyYzwhLS0gLS0+LmNyZWF0ZSgpIGZvciBtb3JlIGRldGFpbHMuIElmIHRoaXMgbWV0aG9kIGlzCi0gKiAgICAgICAgICBub3QgaW1wbGVtZW50ZWQsIEBhbGxvYyBmb2xsb3dlZCBieSBAZmlsbCB3aWxsIGJlIGNhbGxlZC4KLSAqIEBhbGxvYzogQXNrIHRoZSBzdWJjbGFzcyB0byBhbGxvY2F0ZSBhIGJ1ZmZlci4gVGhlIHN1YmNsYXNzIGRlY2lkZXMgd2hpY2gKLSAqICAgICAgICAgc2l6ZSB0aGlzIGJ1ZmZlciBzaG91bGQgYmUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgY3JlYXRlCi0gKiAgICAgICAgIGEgbmV3IGJ1ZmZlciBmcm9tIHRoZSBuZWdvdGlhdGVkIGFsbG9jYXRvci4KLSAqIEBmaWxsOiBBc2sgdGhlIHN1YmNsYXNzIHRvIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIGRhdGEuCi0gKgotICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgYW55IG9mIHRoZSBhdmFpbGFibGUgdmlydHVhbCBtZXRob2RzIG9yIG5vdCwgYXMKLSAqIG5lZWRlZC4gQXQgdGhlIG1pbmltdW0sIHRoZSBAZmlsbCBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gdG8gcHJvZHVjZQotICogYnVmZmVycy4KLSAqLwotc3RydWN0IF9Hc3RQdXNoU3JjQ2xhc3MgewotICBHc3RCYXNlU3JjQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIGFzayB0aGUgc3ViY2xhc3MgdG8gY3JlYXRlIGEgYnVmZmVyLCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotICAgKiB1c2VzIGFsbG9jIGFuZCBmaWxsICovCi0gIEdzdEZsb3dSZXR1cm4gKCpjcmVhdGUpIChHc3RQdXNoU3JjICpzcmMsIEdzdEJ1ZmZlciAqKmJ1Zik7Ci0gIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBidWZmZXIgKi8KLSAgR3N0Rmxvd1JldHVybiAoKmFsbG9jKSAgKEdzdFB1c2hTcmMgKnNyYywgR3N0QnVmZmVyICoqYnVmKTsKLSAgLyogYXNrIHRoZSBzdWJjbGFzcyB0byBmaWxsIGEgYnVmZmVyICovCi0gIEdzdEZsb3dSZXR1cm4gKCpmaWxsKSAgIChHc3RQdXNoU3JjICpzcmMsIEdzdEJ1ZmZlciAqYnVmKTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSBnc3RfcHVzaF9zcmNfZ2V0X3R5cGUodm9pZCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0UHVzaFNyYywgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUFVTSF9TUkNfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuYyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0cXVldWVhcnJheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTY0NDQ2Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2Jhc2UvZ3N0cXVldWVhcnJheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTA0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBnc3RxdWV1ZWFycmF5LmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHF1ZXVlYXJyYXkKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQXJyYXkgYmFzZWQgcXVldWUgb2JqZWN0Ci0gKgotICogI0dzdFF1ZXVlQXJyYXkgaXMgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgc3RhbmRhcmQgcXVldWUgZnVuY3Rpb25hbGl0eQotICogYmFzZWQgb24gYW4gYXJyYXkgaW5zdGVhZCBvZiBsaW5rZWQgbGlzdHMuIFRoaXMgcmVkdWNlcyB0aGUgb3ZlcmhlYWQKLSAqIGNhdXNlZCBieSBtZW1vcnkgbWFuYWdlbWVudCBieSBhIGxhcmdlIGZhY3Rvci4KLSAqLwotCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAiZ3N0cXVldWVhcnJheS5oIgotCi1zdHJ1Y3QgX0dzdFF1ZXVlQXJyYXkKLXsKLSAgLyogPCBwcml2YXRlID4gKi8KLSAgZ3VpbnQ4ICphcnJheTsKLSAgZ3VpbnQgc2l6ZTsKLSAgZ3VpbnQgaGVhZDsKLSAgZ3VpbnQgdGFpbDsKLSAgZ3VpbnQgbGVuZ3RoOwotICBndWludCBlbHRfc2l6ZTsKLSAgZ2Jvb2xlYW4gc3RydWN0X2FycmF5OwotfTsKLQotLyoqCi0gKiBnc3RfcXVldWVfYXJyYXlfbmV3X2Zvcl9zdHJ1Y3Q6IChza2lwKQotICogQHN0cnVjdF9zaXplOiBTaXplIG9mIGVhY2ggZWxlbWVudCAoZS5nLiBzdHJ1Y3R1cmUpIGluIHRoZSBhcnJheQotICogQGluaXRpYWxfc2l6ZTogSW5pdGlhbCBzaXplIG9mIHRoZSBuZXcgcXVldWUKLSAqCi0gKiBBbGxvY2F0ZXMgYSBuZXcgI0dzdFF1ZXVlQXJyYXkgb2JqZWN0IGZvciBlbGVtZW50cyAoZS5nLiBzdHJ1Y3R1cmVzKQotICogb2Ygc2l6ZSBAc3RydWN0X3NpemUsIHdpdGggYW4gaW5pdGlhbCBxdWV1ZSBzaXplIG9mIEBpbml0aWFsX3NpemUuCi0gKgotICogUmV0dXJuczogYSBuZXcgI0dzdFF1ZXVlQXJyYXkgb2JqZWN0Ci0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RRdWV1ZUFycmF5ICoKLWdzdF9xdWV1ZV9hcnJheV9uZXdfZm9yX3N0cnVjdCAoZ3NpemUgc3RydWN0X3NpemUsIGd1aW50IGluaXRpYWxfc2l6ZSkKLXsKLSAgR3N0UXVldWVBcnJheSAqYXJyYXk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cnVjdF9zaXplID4gMCwgTlVMTCk7Ci0KLSAgYXJyYXkgPSBnX3NsaWNlX25ldyAoR3N0UXVldWVBcnJheSk7Ci0gIGFycmF5LT5lbHRfc2l6ZSA9IHN0cnVjdF9zaXplOwotICBhcnJheS0+c2l6ZSA9IGluaXRpYWxfc2l6ZTsKLSAgYXJyYXktPmFycmF5ID0gZ19tYWxsb2MwIChzdHJ1Y3Rfc2l6ZSAqIGluaXRpYWxfc2l6ZSk7Ci0gIGFycmF5LT5oZWFkID0gMDsKLSAgYXJyYXktPnRhaWwgPSAwOwotICBhcnJheS0+bGVuZ3RoID0gMDsKLSAgYXJyYXktPnN0cnVjdF9hcnJheSA9IFRSVUU7Ci0gIHJldHVybiBhcnJheTsKLX0KLQotLyoqCi0gKiBnc3RfcXVldWVfYXJyYXlfbmV3OiAoc2tpcCkKLSAqIEBpbml0aWFsX3NpemU6IEluaXRpYWwgc2l6ZSBvZiB0aGUgbmV3IHF1ZXVlCi0gKgotICogQWxsb2NhdGVzIGEgbmV3ICNHc3RRdWV1ZUFycmF5IG9iamVjdCB3aXRoIGFuIGluaXRpYWwKLSAqIHF1ZXVlIHNpemUgb2YgQGluaXRpYWxfc2l6ZS4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdFF1ZXVlQXJyYXkgKgotZ3N0X3F1ZXVlX2FycmF5X25ldyAoZ3VpbnQgaW5pdGlhbF9zaXplKQotewotICBHc3RRdWV1ZUFycmF5ICphcnJheTsKLQotICBhcnJheSA9IGdzdF9xdWV1ZV9hcnJheV9uZXdfZm9yX3N0cnVjdCAoc2l6ZW9mIChncG9pbnRlciksIGluaXRpYWxfc2l6ZSk7Ci0gIGFycmF5LT5zdHJ1Y3RfYXJyYXkgPSBGQUxTRTsKLSAgcmV0dXJuIGFycmF5OwotfQotCi0vKioKLSAqIGdzdF9xdWV1ZV9hcnJheV9mcmVlOiAoc2tpcCkKLSAqIEBhcnJheTogYSAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqCi0gKiBGcmVlcyBxdWV1ZSBAYXJyYXkgYW5kIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB0byBpdC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9xdWV1ZV9hcnJheV9mcmVlIChHc3RRdWV1ZUFycmF5ICogYXJyYXkpCi17Ci0gIGdfZnJlZSAoYXJyYXktPmFycmF5KTsKLSAgZ19zbGljZV9mcmVlIChHc3RRdWV1ZUFycmF5LCBhcnJheSk7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkX3N0cnVjdDogKHNraXApCi0gKiBAYXJyYXk6IGEgI0dzdFF1ZXVlQXJyYXkgb2JqZWN0Ci0gKgotICogUmV0dXJucyB0aGUgaGVhZCBvZiB0aGUgcXVldWUgQGFycmF5IGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIHF1ZXVlLgotICoKLSAqIFJldHVybnM6IHBvaW50ZXIgdG8gZWxlbWVudCBvciBzdHJ1Y3QsIG9yIE5VTEwgaWYgQGFycmF5IHdhcyBlbXB0eS4gVGhlCi0gKiAgICBkYXRhIHBvaW50ZWQgdG8gYnkgdGhlIHJldHVybmVkIHBvaW50ZXIgc3RheXMgdmFsaWQgb25seSBhcyBsb25nIGFzCi0gKiAgICB0aGUgcXVldWUgYXJyYXkgaXMgbm90IG1vZGlmaWVkIGZ1cnRoZXIhCi0gKgotICogU2luY2U6IDEuNgotICovCi1ncG9pbnRlcgotZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkX3N0cnVjdCAoR3N0UXVldWVBcnJheSAqIGFycmF5KQotewotICBncG9pbnRlciBwX3N0cnVjdDsKLQotICAvKiBlbXB0eSBhcnJheSAqLwotICBpZiAoR19VTkxJS0VMWSAoYXJyYXktPmxlbmd0aCA9PSAwKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBwX3N0cnVjdCA9IGFycmF5LT5hcnJheSArIChhcnJheS0+ZWx0X3NpemUgKiBhcnJheS0+aGVhZCk7Ci0KLSAgYXJyYXktPmhlYWQrKzsKLSAgYXJyYXktPmhlYWQgJT0gYXJyYXktPnNpemU7Ci0gIGFycmF5LT5sZW5ndGgtLTsKLQotICByZXR1cm4gcF9zdHJ1Y3Q7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkOiAoc2tpcCkKLSAqIEBhcnJheTogYSAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqCi0gKiBSZXR1cm5zIGFuZCBoZWFkIG9mIHRoZSBxdWV1ZSBAYXJyYXkgYW5kIHJlbW92ZXMKLSAqIGl0IGZyb20gdGhlIHF1ZXVlLgotICoKLSAqIFJldHVybnM6IFRoZSBoZWFkIG9mIHRoZSBxdWV1ZQotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotZ3BvaW50ZXIKLWdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZCAoR3N0UXVldWVBcnJheSAqIGFycmF5KQotewotICBncG9pbnRlciByZXQ7Ci0KLSAgLyogZW1wdHkgYXJyYXkgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGFycmF5LT5sZW5ndGggPT0gMCkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0ID0gKihncG9pbnRlciAqKSAoYXJyYXktPmFycmF5ICsgKHNpemVvZiAoZ3BvaW50ZXIpICogYXJyYXktPmhlYWQpKTsKLSAgYXJyYXktPmhlYWQrKzsKLSAgYXJyYXktPmhlYWQgJT0gYXJyYXktPnNpemU7Ci0gIGFycmF5LT5sZW5ndGgtLTsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfcXVldWVfYXJyYXlfcGVla19oZWFkX3N0cnVjdDogKHNraXApCi0gKiBAYXJyYXk6IGEgI0dzdFF1ZXVlQXJyYXkgb2JqZWN0Ci0gKgotICogUmV0dXJucyB0aGUgaGVhZCBvZiB0aGUgcXVldWUgQGFycmF5IHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgcXVldWUuCi0gKgotICogUmV0dXJuczogcG9pbnRlciB0byBlbGVtZW50IG9yIHN0cnVjdCwgb3IgTlVMTCBpZiBAYXJyYXkgd2FzIGVtcHR5LiBUaGUKLSAqICAgIGRhdGEgcG9pbnRlZCB0byBieSB0aGUgcmV0dXJuZWQgcG9pbnRlciBzdGF5cyB2YWxpZCBvbmx5IGFzIGxvbmcgYXMKLSAqICAgIHRoZSBxdWV1ZSBhcnJheSBpcyBub3QgbW9kaWZpZWQgZnVydGhlciEKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdwb2ludGVyCi1nc3RfcXVldWVfYXJyYXlfcGVla19oZWFkX3N0cnVjdCAoR3N0UXVldWVBcnJheSAqIGFycmF5KQotewotICAvKiBlbXB0eSBhcnJheSAqLwotICBpZiAoR19VTkxJS0VMWSAoYXJyYXktPmxlbmd0aCA9PSAwKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gYXJyYXktPmFycmF5ICsgKGFycmF5LT5lbHRfc2l6ZSAqIGFycmF5LT5oZWFkKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVldWVfYXJyYXlfcGVla19oZWFkOiAoc2tpcCkKLSAqIEBhcnJheTogYSAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqCi0gKiBSZXR1cm5zIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBAYXJyYXkgYW5kIGRvZXMgbm90Ci0gKiByZW1vdmUgaXQgZnJvbSB0aGUgcXVldWUuCi0gKgotICogUmV0dXJuczogVGhlIGhlYWQgb2YgdGhlIHF1ZXVlCi0gKgotICogU2luY2U6IDEuMgotICovCi1ncG9pbnRlcgotZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZCAoR3N0UXVldWVBcnJheSAqIGFycmF5KQotewotICAvKiBlbXB0eSBhcnJheSAqLwotICBpZiAoR19VTkxJS0VMWSAoYXJyYXktPmxlbmd0aCA9PSAwKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gKihncG9pbnRlciAqKSAoYXJyYXktPmFycmF5ICsgKHNpemVvZiAoZ3BvaW50ZXIpICogYXJyYXktPmhlYWQpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZV9hcnJheV9kb19leHBhbmQgKEdzdFF1ZXVlQXJyYXkgKiBhcnJheSkKLXsKLSAgZ3VpbnQgZWx0X3NpemUgPSBhcnJheS0+ZWx0X3NpemU7Ci0gIC8qIG5ld3NpemUgaXMgNTAlIGJpZ2dlciAqLwotICBndWludCBvbGRzaXplID0gYXJyYXktPnNpemU7Ci0gIGd1aW50IG5ld3NpemUgPSBNQVggKCgzICogb2xkc2l6ZSkgLyAyLCBvbGRzaXplICsgMSk7Ci0KLSAgLyogY29weSBvdmVyIGRhdGEgKi8KLSAgaWYgKGFycmF5LT50YWlsICE9IDApIHsKLSAgICBndWludDggKmFycmF5MiA9IGdfbWFsbG9jMCAoZWx0X3NpemUgKiBuZXdzaXplKTsKLSAgICBndWludCB0MSA9IGFycmF5LT5oZWFkOwotICAgIGd1aW50IHQyID0gb2xkc2l6ZSAtIGFycmF5LT5oZWFkOwotCi0gICAgLyogWzAtLS0tLVRBSUxdW0hFQUQtLS0tLS1TSVpFXQotICAgICAqCi0gICAgICogV2Ugd2FudCB0byBlbmQgdXAgd2l0aAotICAgICAqIFtIRUFELS0tLS0tLS0tLS0tLS0tLS0tVEFJTF1bLS0tLUZSRUVEQVRBLS0tLS0tTkVXU0laRV0KLSAgICAgKgotICAgICAqIDEpIG1vdmUgW0hFQUQtLS0tLVNJWkVdIHBhcnQgdG8gYmVnaW5uaW5nIG9mIG5ldyBhcnJheQotICAgICAqIDIpIG1vdmUgWzAtLS0tLS0tVEFJTF0gcGFydCBuZXcgYXJyYXksIGFmdGVyIHByZXZpb3VzIHBhcnQKLSAgICAgKi8KLQotICAgIG1lbWNweSAoYXJyYXkyLCBhcnJheS0+YXJyYXkgKyAoZWx0X3NpemUgKiBhcnJheS0+aGVhZCksIHQyICogZWx0X3NpemUpOwotICAgIG1lbWNweSAoYXJyYXkyICsgdDIgKiBlbHRfc2l6ZSwgYXJyYXktPmFycmF5LCB0MSAqIGVsdF9zaXplKTsKLQotICAgIGdfZnJlZSAoYXJyYXktPmFycmF5KTsKLSAgICBhcnJheS0+YXJyYXkgPSBhcnJheTI7Ci0gICAgYXJyYXktPmhlYWQgPSAwOwotICB9IGVsc2UgewotICAgIC8qIEZhc3QgcGF0aCwgd2UganVzdCBuZWVkIHRvIGdyb3cgdGhlIGFycmF5ICovCi0gICAgYXJyYXktPmFycmF5ID0gZ19yZWFsbG9jIChhcnJheS0+YXJyYXksIGVsdF9zaXplICogbmV3c2l6ZSk7Ci0gICAgbWVtc2V0IChhcnJheS0+YXJyYXkgKyBlbHRfc2l6ZSAqIG9sZHNpemUsIDAsCi0gICAgICAgIGVsdF9zaXplICogKG5ld3NpemUgLSBvbGRzaXplKSk7Ci0gIH0KLSAgYXJyYXktPnRhaWwgPSBvbGRzaXplOwotICBhcnJheS0+c2l6ZSA9IG5ld3NpemU7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXVlX2FycmF5X3B1c2hfZWxlbWVudF90YWlsOiAoc2tpcCkKLSAqIEBhcnJheTogYSAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqIEBwX3N0cnVjdDogYWRkcmVzcyBvZiBlbGVtZW50IG9yIHN0cnVjdHVyZSB0byBwdXNoIHRvIHRoZSB0YWlsIG9mIHRoZSBxdWV1ZQotICoKLSAqIFB1c2hlcyB0aGUgZWxlbWVudCBhdCBhZGRyZXNzIEBwX3N0cnVjdCB0byB0aGUgdGFpbCBvZiB0aGUgcXVldWUgQGFycmF5Ci0gKiAoQ29waWVzIHRoZSBjb250ZW50cyBvZiBhIHN0cnVjdHVyZSBvZiB0aGUgc3RydWN0X3NpemUgc3BlY2lmaWVkIHdoZW4KLSAqIGNyZWF0aW5nIHRoZSBxdWV1ZSBpbnRvIHRoZSBhcnJheSkuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsX3N0cnVjdCAoR3N0UXVldWVBcnJheSAqIGFycmF5LCBncG9pbnRlciBwX3N0cnVjdCkKLXsKLSAgZ3VpbnQgZWx0X3NpemU7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAocF9zdHJ1Y3QgIT0gTlVMTCk7Ci0KLSAgZWx0X3NpemUgPSBhcnJheS0+ZWx0X3NpemU7Ci0KLSAgLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBtYWtlIHJvb20gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGFycmF5LT5sZW5ndGggPT0gYXJyYXktPnNpemUpKQotICAgIGdzdF9xdWV1ZV9hcnJheV9kb19leHBhbmQgKGFycmF5KTsKLQotICBtZW1jcHkgKGFycmF5LT5hcnJheSArIGVsdF9zaXplICogYXJyYXktPnRhaWwsIHBfc3RydWN0LCBlbHRfc2l6ZSk7Ci0gIGFycmF5LT50YWlsKys7Ci0gIGFycmF5LT50YWlsICU9IGFycmF5LT5zaXplOwotICBhcnJheS0+bGVuZ3RoKys7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbDogKHNraXApCi0gKiBAYXJyYXk6IGEgI0dzdFF1ZXVlQXJyYXkgb2JqZWN0Ci0gKiBAZGF0YTogb2JqZWN0IHRvIHB1c2gKLSAqCi0gKiBQdXNoZXMgQGRhdGEgdG8gdGhlIHRhaWwgb2YgdGhlIHF1ZXVlIEBhcnJheS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKEdzdFF1ZXVlQXJyYXkgKiBhcnJheSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBtYWtlIHJvb20gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGFycmF5LT5sZW5ndGggPT0gYXJyYXktPnNpemUpKQotICAgIGdzdF9xdWV1ZV9hcnJheV9kb19leHBhbmQgKGFycmF5KTsKLQotICAqKGdwb2ludGVyICopIChhcnJheS0+YXJyYXkgKyBzaXplb2YgKGdwb2ludGVyKSAqIGFycmF5LT50YWlsKSA9IGRhdGE7Ci0gIGFycmF5LT50YWlsKys7Ci0gIGFycmF5LT50YWlsICU9IGFycmF5LT5zaXplOwotICBhcnJheS0+bGVuZ3RoKys7Ci19Ci0KLS8qKgotICogZ3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5OiAoc2tpcCkKLSAqIEBhcnJheTogYSAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqCi0gKiBDaGVja3MgaWYgdGhlIHF1ZXVlIEBhcnJheSBpcyBlbXB0eS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcXVldWUgQGFycmF5IGlzIGVtcHR5Ci0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5IChHc3RRdWV1ZUFycmF5ICogYXJyYXkpCi17Ci0gIHJldHVybiAoYXJyYXktPmxlbmd0aCA9PSAwKTsKLX0KLQotCi0vKioKLSAqIGdzdF9xdWV1ZV9hcnJheV9kcm9wX3N0cnVjdDogKHNraXApCi0gKiBAYXJyYXk6IGEgI0dzdFF1ZXVlQXJyYXkgb2JqZWN0Ci0gKiBAaWR4OiBpbmRleCB0byBkcm9wCi0gKiBAcF9zdHJ1Y3Q6IGFkZHJlc3MgaW50byB3aGljaCB0byBzdG9yZSB0aGUgZGF0YSBvZiB0aGUgZHJvcHBlZCBzdHJ1Y3R1cmUsIG9yIE5VTEwKLSAqCi0gKiBEcm9wcyB0aGUgcXVldWUgZWxlbWVudCBhdCBwb3NpdGlvbiBAaWR4IGZyb20gcXVldWUgQGFycmF5IGFuZCBjb3BpZXMgdGhlCi0gKiBkYXRhIG9mIHRoZSBlbGVtZW50IG9yIHN0cnVjdHVyZSB0aGF0IHdhcyByZW1vdmVkIGludG8gQHBfc3RydWN0IGlmCi0gKiBAcF9zdHJ1Y3QgaXMgc2V0IChub3QgTlVMTCkuCi0gKgotICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBlcnJvcgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF9xdWV1ZV9hcnJheV9kcm9wX3N0cnVjdCAoR3N0UXVldWVBcnJheSAqIGFycmF5LCBndWludCBpZHgsCi0gICAgZ3BvaW50ZXIgcF9zdHJ1Y3QpCi17Ci0gIGludCBmaXJzdF9pdGVtX2luZGV4LCBsYXN0X2l0ZW1faW5kZXg7Ci0gIGd1aW50IGVsdF9zaXplOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChhcnJheS0+bGVuZ3RoID4gMCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWR4IDwgYXJyYXktPnNpemUsIEZBTFNFKTsKLQotICBlbHRfc2l6ZSA9IGFycmF5LT5lbHRfc2l6ZTsKLQotICBmaXJzdF9pdGVtX2luZGV4ID0gYXJyYXktPmhlYWQ7Ci0KLSAgLyogdGFpbCBwb2ludHMgdG8gdGhlIGZpcnN0IGZyZWUgc3BvdCAqLwotICBsYXN0X2l0ZW1faW5kZXggPSAoYXJyYXktPnRhaWwgLSAxICsgYXJyYXktPnNpemUpICUgYXJyYXktPnNpemU7Ci0KLSAgaWYgKHBfc3RydWN0ICE9IE5VTEwpCi0gICAgbWVtY3B5IChwX3N0cnVjdCwgYXJyYXktPmFycmF5ICsgZWx0X3NpemUgKiBpZHgsIGVsdF9zaXplKTsKLQotICAvKiBzaW1wbGUgY2FzZSBpZHggPT0gZmlyc3QgaXRlbSAqLwotICBpZiAoaWR4ID09IGZpcnN0X2l0ZW1faW5kZXgpIHsKLSAgICAvKiBtb3ZlIHRoZSBoZWFkIHBsdXMgb25lICovCi0gICAgYXJyYXktPmhlYWQrKzsKLSAgICBhcnJheS0+aGVhZCAlPSBhcnJheS0+c2l6ZTsKLSAgICBhcnJheS0+bGVuZ3RoLS07Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBzaW1wbGUgY2FzZSBpZHggPT0gbGFzdCBpdGVtICovCi0gIGlmIChpZHggPT0gbGFzdF9pdGVtX2luZGV4KSB7Ci0gICAgLyogbW92ZSB0YWlsIG1pbnVzIG9uZSwgcG90ZW50aWFsbHkgd3JhcHBpbmcgKi8KLSAgICBhcnJheS0+dGFpbCA9IChhcnJheS0+dGFpbCAtIDEgKyBhcnJheS0+c2l6ZSkgJSBhcnJheS0+c2l6ZTsKLSAgICBhcnJheS0+bGVuZ3RoLS07Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBub24td3JhcHBlZCBjYXNlICovCi0gIGlmIChmaXJzdF9pdGVtX2luZGV4IDwgbGFzdF9pdGVtX2luZGV4KSB7Ci0gICAgZ19hc3NlcnQgKGZpcnN0X2l0ZW1faW5kZXggPCBpZHggJiYgaWR4IDwgbGFzdF9pdGVtX2luZGV4KTsKLSAgICAvKiBtb3ZlIGV2ZXJ5dGhpbmcgYmV5b25kIGlkeCBvbmUgc3RlcCB0b3dhcmRzIHplcm8gaW4gYXJyYXkgKi8KLSAgICBtZW1tb3ZlIChhcnJheS0+YXJyYXkgKyBlbHRfc2l6ZSAqIGlkeCwKLSAgICAgICAgYXJyYXktPmFycmF5ICsgZWx0X3NpemUgKiAoaWR4ICsgMSksCi0gICAgICAgIChsYXN0X2l0ZW1faW5kZXggLSBpZHgpICogZWx0X3NpemUpOwotICAgIC8qIHRhaWwgbWlnaHQgd3JhcCwgaWUgaWYgdGFpbCA9PSAwIChhbmQgbGFzdF9pdGVtX2luZGV4ID09IHNpemUpICovCi0gICAgYXJyYXktPnRhaWwgPSAoYXJyYXktPnRhaWwgLSAxICsgYXJyYXktPnNpemUpICUgYXJyYXktPnNpemU7Ci0gICAgYXJyYXktPmxlbmd0aC0tOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogb25seSB3cmFwcGVkIGNhc2VzIGxlZnQgKi8KLSAgZ19hc3NlcnQgKGZpcnN0X2l0ZW1faW5kZXggPiBsYXN0X2l0ZW1faW5kZXgpOwotCi0gIGlmIChpZHggPCBsYXN0X2l0ZW1faW5kZXgpIHsKLSAgICAvKiBpZHggaXMgYmVmb3JlIGxhc3RfaXRlbV9pbmRleCwgbW92ZSBkYXRhIHRvd2FyZHMgemVybyAqLwotICAgIG1lbW1vdmUgKGFycmF5LT5hcnJheSArIGVsdF9zaXplICogaWR4LAotICAgICAgICBhcnJheS0+YXJyYXkgKyBlbHRfc2l6ZSAqIChpZHggKyAxKSwKLSAgICAgICAgKGxhc3RfaXRlbV9pbmRleCAtIGlkeCkgKiBlbHRfc2l6ZSk7Ci0gICAgLyogdGFpbCBzaG91bGQgbm90IHdyYXAgaW4gdGhpcyBjYXNlISAqLwotICAgIGdfYXNzZXJ0IChhcnJheS0+dGFpbCA+IDApOwotICAgIGFycmF5LT50YWlsLS07Ci0gICAgYXJyYXktPmxlbmd0aC0tOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgaWYgKGlkeCA+IGZpcnN0X2l0ZW1faW5kZXgpIHsKLSAgICAvKiBpZHggaXMgYWZ0ZXIgZmlyc3RfaXRlbV9pbmRleCwgbW92ZSBkYXRhIHRvIGhpZ2hlciBpbmRpY2VzICovCi0gICAgbWVtbW92ZSAoYXJyYXktPmFycmF5ICsgZWx0X3NpemUgKiAoZmlyc3RfaXRlbV9pbmRleCArIDEpLAotICAgICAgICBhcnJheS0+YXJyYXkgKyBlbHRfc2l6ZSAqIGZpcnN0X2l0ZW1faW5kZXgsCi0gICAgICAgIChpZHggLSBmaXJzdF9pdGVtX2luZGV4KSAqIGVsdF9zaXplKTsKLSAgICBhcnJheS0+aGVhZCsrOwotICAgIC8qIGhlYWQgc2hvdWxkIG5vdCB3cmFwIGluIHRoaXMgY2FzZSEgKi8KLSAgICBnX2Fzc2VydCAoYXJyYXktPmhlYWQgPCBhcnJheS0+c2l6ZSk7Ci0gICAgYXJyYXktPmxlbmd0aC0tOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKEZBTFNFKTsKLX0KLQotLyoqCi0gKiBnc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50OiAoc2tpcCkKLSAqIEBhcnJheTogYSAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqIEBpZHg6IGluZGV4IHRvIGRyb3AKLSAqCi0gKiBEcm9wcyB0aGUgcXVldWUgZWxlbWVudCBhdCBwb3NpdGlvbiBAaWR4IGZyb20gcXVldWUgQGFycmF5LgotICoKLSAqIFJldHVybnM6IHRoZSBkcm9wcGVkIGVsZW1lbnQKLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLWdwb2ludGVyCi1nc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50IChHc3RRdWV1ZUFycmF5ICogYXJyYXksIGd1aW50IGlkeCkKLXsKLSAgZ3BvaW50ZXIgcHRyOwotCi0gIGlmICghZ3N0X3F1ZXVlX2FycmF5X2Ryb3Bfc3RydWN0IChhcnJheSwgaWR4LCAmcHRyKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gcHRyOwotfQotCi0vKioKLSAqIGdzdF9xdWV1ZV9hcnJheV9maW5kOiAoc2tpcCkKLSAqIEBhcnJheTogYSAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqIEBmdW5jOiAoYWxsb3ctbm9uZSk6IGNvbXBhcmlzb24gZnVuY3Rpb24sIG9yICVOVUxMIHRvIGZpbmQgQGRhdGEgYnkgdmFsdWUKLSAqIEBkYXRhOiBkYXRhIGZvciBjb21wYXJpc29uIGZ1bmN0aW9uCi0gKgotICogRmluZHMgYW4gZWxlbWVudCBpbiB0aGUgcXVldWUgQGFycmF5LCBlaXRoZXIgYnkgY29tcGFyaW5nIGV2ZXJ5IGVsZW1lbnQKLSAqIHdpdGggQGZ1bmMgb3IgYnkgbG9va2luZyB1cCBAZGF0YSBpZiBubyBjb21wYXJlIGZ1bmN0aW9uIEBmdW5jIGlzIHByb3ZpZGVkLAotICogYW5kIHJldHVybmluZyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQuCi0gKgotICogTm90ZSB0aGF0IHRoZSBpbmRleCBpcyBub3QgMC1iYXNlZCwgYnV0IGFuIGludGVybmFsIGluZGV4IG51bWJlciB3aXRoIGEKLSAqIHJhbmRvbSBvZmZzZXQuIFRoZSBpbmRleCBjYW4gYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGgKLSAqIGdzdF9xdWV1ZV9hcnJheV9kcm9wX2VsZW1lbnQoKS4gRklYTUU6IHJldHVybiBpbmRleCAwLWJhc2VkIGFuZCBtYWtlCi0gKiBnc3RfcXVldWVfYXJyYXlfZHJvcF9lbGVtZW50KCkgdGFrZSBhIDAtYmFzZWQgaW5kZXguCi0gKgotICogUmV0dXJuczogSW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQgb3IgLTEgaWYgbm90aGluZyB3YXMgZm91bmQuCi0gKgotICogU2luY2U6IDEuMgotICovCi1ndWludAotZ3N0X3F1ZXVlX2FycmF5X2ZpbmQgKEdzdFF1ZXVlQXJyYXkgKiBhcnJheSwgR0NvbXBhcmVGdW5jIGZ1bmMsIGdwb2ludGVyIGRhdGEpCi17Ci0gIGdwb2ludGVyIHBfZWxlbWVudDsKLSAgZ3VpbnQgZWx0X3NpemU7Ci0gIGd1aW50IGk7Ci0KLSAgLyogRm9yIHN0cnVjdCBhcnJheXMgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBkaWZmZXJlbnRseSBzbyB0aGF0Ci0gICAqIHRoZSB1c2VyIGdldHMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50IGRhdGEgbm90IHRoZSBkZXJlZmVyZW5jZWQKLSAgICogcG9pbnRlciBpdHNlbGYgKi8KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFycmF5LT5zdHJ1Y3RfYXJyYXkgPT0gRkFMU0UsIC0xKTsKLQotICBlbHRfc2l6ZSA9IGFycmF5LT5lbHRfc2l6ZTsKLQotICBpZiAoZnVuYyAhPSBOVUxMKSB7Ci0gICAgLyogU2NhbiBmcm9tIGhlYWQgdG8gdGFpbCAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoOyBpKyspIHsKLSAgICAgIHBfZWxlbWVudCA9IGFycmF5LT5hcnJheSArICgoaSArIGFycmF5LT5oZWFkKSAlIGFycmF5LT5zaXplKSAqIGVsdF9zaXplOwotICAgICAgaWYgKGZ1bmMgKCooZ3BvaW50ZXIgKikgcF9lbGVtZW50LCBkYXRhKSA9PSAwKQotICAgICAgICByZXR1cm4gKGkgKyBhcnJheS0+aGVhZCkgJSBhcnJheS0+c2l6ZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5sZW5ndGg7IGkrKykgewotICAgICAgcF9lbGVtZW50ID0gYXJyYXktPmFycmF5ICsgKChpICsgYXJyYXktPmhlYWQpICUgYXJyYXktPnNpemUpICogZWx0X3NpemU7Ci0gICAgICBpZiAoKihncG9pbnRlciAqKSBwX2VsZW1lbnQgPT0gZGF0YSkKLSAgICAgICAgcmV0dXJuIChpICsgYXJyYXktPmhlYWQpICUgYXJyYXktPnNpemU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIC0xOwotfQotCi0vKioKLSAqIGdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoOiAoc2tpcCkKLSAqIEBhcnJheTogYSAjR3N0UXVldWVBcnJheSBvYmplY3QKLSAqCi0gKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHF1ZXVlIEBhcnJheQotICoKLSAqIFJldHVybnM6IHRoZSBsZW5ndGggb2YgdGhlIHF1ZXVlIEBhcnJheS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLWd1aW50Ci1nc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoR3N0UXVldWVBcnJheSAqIGFycmF5KQotewotICByZXR1cm4gYXJyYXktPmxlbmd0aDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2Jhc2UvZ3N0cXVldWVhcnJheS5oIGIvbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOTQ0NjIuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RxdWV1ZWFycmF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0gKgotICogZ3N0cXVldWVhcnJheS5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpZm5kZWYgX19HU1RfUVVFVUVfQVJSQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1FVRVVFX0FSUkFZX0hfXwotCi0vKioKLSAqIEdzdFF1ZXVlQXJyYXk6IChza2lwKQotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0UXVldWVBcnJheSBHc3RRdWV1ZUFycmF5OwotCi1Hc3RRdWV1ZUFycmF5ICogZ3N0X3F1ZXVlX2FycmF5X25ldyAgICAgICAoZ3VpbnQgaW5pdGlhbF9zaXplKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9xdWV1ZV9hcnJheV9mcmVlICAgICAgKEdzdFF1ZXVlQXJyYXkgKiBhcnJheSk7Ci0KLWdwb2ludGVyICAgICAgICBnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWQgIChHc3RRdWV1ZUFycmF5ICogYXJyYXkpOwotZ3BvaW50ZXIgICAgICAgIGdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWQgKEdzdFF1ZXVlQXJyYXkgKiBhcnJheSk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsIChHc3RRdWV1ZUFycmF5ICogYXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgIGRhdGEpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3F1ZXVlX2FycmF5X2lzX2VtcHR5ICAoR3N0UXVldWVBcnJheSAqIGFycmF5KTsKLQotZ3BvaW50ZXIgICAgICAgIGdzdF9xdWV1ZV9hcnJheV9kcm9wX2VsZW1lbnQgKEdzdFF1ZXVlQXJyYXkgKiBhcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgaWR4KTsKLQotZ3VpbnQgICAgICAgICAgIGdzdF9xdWV1ZV9hcnJheV9maW5kIChHc3RRdWV1ZUFycmF5ICogYXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDb21wYXJlRnVuYyAgICBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgZGF0YSk7Ci0KLWd1aW50ICAgICAgICAgICBnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoR3N0UXVldWVBcnJheSAqIGFycmF5KTsKLQotLyogRnVuY3Rpb25zIGZvciB1c2Ugd2l0aCBzdHJ1Y3R1cmVzICovCi0KLUdzdFF1ZXVlQXJyYXkgKiBnc3RfcXVldWVfYXJyYXlfbmV3X2Zvcl9zdHJ1Y3QgKGdzaXplIHN0cnVjdF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5pdGlhbF9zaXplKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWxfc3RydWN0IChHc3RRdWV1ZUFycmF5ICogYXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICBwX3N0cnVjdCk7Ci0KLWdwb2ludGVyICAgICAgICBnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWRfc3RydWN0ICAoR3N0UXVldWVBcnJheSAqIGFycmF5KTsKLQotZ3BvaW50ZXIgICAgICAgIGdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWRfc3RydWN0IChHc3RRdWV1ZUFycmF5ICogYXJyYXkpOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3F1ZXVlX2FycmF5X2Ryb3Bfc3RydWN0ICAgICAgKEdzdFF1ZXVlQXJyYXkgKiBhcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgIGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgIHBfc3RydWN0KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMgYi9saWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZWNlYjQuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIGdzdHR5cGVmaW5kaGVscGVyLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHR5cGVmaW5kaGVscGVyCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0eXBlZmluZGluZyAKLSAqCi0gKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgZWxlbWVudHMgZG9pbmcgdHlwZWZpbmRpbmc6Ci0gKiBnc3RfdHlwZV9maW5kX2hlbHBlcigpIGRvZXMgdHlwZWZpbmRpbmcgaW4gcHVsbCBtb2RlLCB3aGlsZQotICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcigpIGlzIHVzZWZ1bCBmb3IgZWxlbWVudHMgbmVlZGluZyB0byBkbwotICogdHlwZWZpbmRpbmcgaW4gcHVzaCBtb2RlIGZyb20gYSBjaGFpbiBmdW5jdGlvbi4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0dHlwZWZpbmRoZWxwZXIuaCIKLQotLyogKioqKioqKioqKioqKioqKioqKioqKiB0eXBlZmluZGluZyBpbiBwdWxsIG1vZGUgKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLXN0YXRpYyB2b2lkCi1oZWxwZXJfZmluZF9zdWdnZXN0IChncG9pbnRlciBkYXRhLCBHc3RUeXBlRmluZFByb2JhYmlsaXR5IHByb2JhYmlsaXR5LAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotfSBHc3RNYXBwZWRCdWZmZXI7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdTTGlzdCAqYnVmZmVyczsgICAgICAgICAgICAgIC8qIGJ1ZmZlciBjYWNoZSAqLwotICBndWludDY0IHNpemU7Ci0gIGd1aW50NjQgbGFzdF9vZmZzZXQ7Ci0gIEdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiBmdW5jOwotICBHc3RUeXBlRmluZFByb2JhYmlsaXR5IGJlc3RfcHJvYmFiaWxpdHk7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFR5cGVGaW5kRmFjdG9yeSAqZmFjdG9yeTsgIC8qIGZvciBsb2dnaW5nICovCi0gIEdzdE9iamVjdCAqb2JqOyAgICAgICAgICAgICAgIC8qIGZvciBsb2dnaW5nICovCi0gIEdzdE9iamVjdCAqcGFyZW50OwotfSBHc3RUeXBlRmluZEhlbHBlcjsKLQotLyoKLSAqIGhlbHBlcl9maW5kX3BlZWs6Ci0gKiBAZGF0YTogaGVscGVyIGRhdGEgc3RydWN0Ci0gKiBAb2ZmOiBzdHJlYW0gb2Zmc2V0Ci0gKiBAc2l6ZTogYmxvY2sgc2l6ZQotICoKLSAqIEdldCBkYXRhIHBvaW50ZXIgd2l0aGluIGEgc3RyZWFtLiBLZWVwcyBhIGNhY2hlIG9mIHJlYWQgYnVmZmVycyAocGFydGx5Ci0gKiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgYnV0IG1vc3RseSBiZWNhdXNlIHBvaW50ZXJzIHJldHVybmVkIGJ5IHVzIG5lZWQKLSAqIHRvIHN0YXkgdmFsaWQgdW50aWwgdHlwZWZpbmRpbmcgaGFzIGZpbmlzaGVkKQotICoKLSAqIFJldHVybnM6IChudWxsYWJsZSk6IGFkZHJlc3Mgb2YgdGhlIGRhdGEgb3IgJU5VTEwgaWYgYnVmZmVyIGRvZXMgbm90IGNvdmVyCi0gKiB0aGUgcmVxdWVzdGVkIHJhbmdlLgotICovCi1zdGF0aWMgY29uc3QgZ3VpbnQ4ICoKLWhlbHBlcl9maW5kX3BlZWsgKGdwb2ludGVyIGRhdGEsIGdpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUpCi17Ci0gIEdzdFR5cGVGaW5kSGVscGVyICpoZWxwZXI7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR1NMaXN0ICppbnNlcnRfcG9zID0gTlVMTDsKLSAgZ3NpemUgYnVmX3NpemU7Ci0gIGd1aW50NjQgYnVmX29mZnNldDsKLSAgR3N0TWFwcGVkQnVmZmVyICpibWFwOwotI2lmIDAKLSAgR3N0Q2FwcyAqY2FwczsKLSNlbmRpZgotCi0gIGhlbHBlciA9IChHc3RUeXBlRmluZEhlbHBlciAqKSBkYXRhOwotCi0gIEdTVF9MT0dfT0JKRUNUIChoZWxwZXItPm9iaiwgIiclcycgY2FsbGVkIHBlZWsgKCUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgIiwgJXUpIiwgR1NUX09CSkVDVF9OQU1FIChoZWxwZXItPmZhY3RvcnkpLCBvZmZzZXQsIHNpemUpOwotCi0gIGlmIChzaXplID09IDApCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKG9mZnNldCA8IDApIHsKLSAgICBpZiAoaGVscGVyLT5zaXplID09IC0xIHx8IGhlbHBlci0+c2l6ZSA8IC1vZmZzZXQpCi0gICAgICByZXR1cm4gTlVMTDsKLQotICAgIG9mZnNldCArPSBoZWxwZXItPnNpemU7Ci0gIH0KLQotICAvKiBzZWUgaWYgd2UgaGF2ZSBhIG1hdGNoaW5nIGJ1ZmZlciBhbHJlYWR5IGluIG91ciBsaXN0ICovCi0gIGlmIChzaXplID4gMCAmJiBvZmZzZXQgPD0gaGVscGVyLT5sYXN0X29mZnNldCkgewotICAgIEdTTGlzdCAqd2FsazsKLQotICAgIGZvciAod2FsayA9IGhlbHBlci0+YnVmZmVyczsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICAgIEdzdE1hcHBlZEJ1ZmZlciAqYm1wID0gKEdzdE1hcHBlZEJ1ZmZlciAqKSB3YWxrLT5kYXRhOwotICAgICAgR3N0QnVmZmVyICpidWYgPSBHU1RfQlVGRkVSX0NBU1QgKGJtcC0+YnVmZmVyKTsKLQotICAgICAgYnVmX29mZnNldCA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpOwotICAgICAgYnVmX3NpemUgPSBibXAtPm1hcC5zaXplOwotCi0gICAgICAvKiBidWZmZXJzIGFyZSBrZXB0IHNvcnRlZCBieSBlbmQgb2Zmc2V0IChoaWdoZXN0IGZpcnN0KSBpbiB0aGUgbGlzdCwgc28KLSAgICAgICAqIGF0IHRoaXMgcG9pbnQgd2Ugc2F2ZSB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgc3RvcCBzZWFyY2hpbmcgaWYgCi0gICAgICAgKiB3ZSdyZSBhZnRlciB0aGUgc2VhcmNoZWQgZW5kIG9mZnNldCAqLwotICAgICAgaWYgKGJ1Zl9vZmZzZXQgPD0gb2Zmc2V0KSB7Ci0gICAgICAgIGlmICgob2Zmc2V0ICsgc2l6ZSkgPCAoYnVmX29mZnNldCArIGJ1Zl9zaXplKSkgewotICAgICAgICAgIC8qIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gbWFwcGVkIGJlZm9yZSAqLwotICAgICAgICAgIHJldHVybiAoZ3VpbnQ4ICopIGJtcC0+bWFwLmRhdGEgKyAob2Zmc2V0IC0gYnVmX29mZnNldCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ICsgc2l6ZSA+PSBidWZfb2Zmc2V0ICsgYnVmX3NpemUpIHsKLSAgICAgICAgaW5zZXJ0X3BvcyA9IHdhbGs7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGJ1ZmZlciA9IE5VTEw7Ci0gIC8qIHNvbWUgdHlwZWZpbmRlcnMgZ28gaW4gMSBieXRlIHN0ZXBzIG92ZXIgMWsgb2YgZGF0YSBhbmQgcmVxdWVzdAotICAgKiBzbWFsbCBidWZmZXJzLiBJdCBpcyByZWFsbHkgaW5lZmZpY2llbnQgdG8gcHVsbCBlYWNoIHRpbWUsIGFuZCBwdWxsaW5nCi0gICAqIGEgbGFyZ2VyIGNodW5rIGlzIGFsbW9zdCBmcmVlLiBUcnlpbmcgdG8gcHVsbCBhIGxhcmdlciBjaHVuayBhdCB0aGUgZW5kCi0gICAqIG9mIHRoZSBmaWxlIGlzIGFsc28gbm90IGEgcHJvYmxlbSBoZXJlLCB3ZSdsbCBqdXN0IGdldCBhIHRydW5jYXRlZCBidWZmZXIKLSAgICogaW4gdGhhdCBjYXNlIChhbmQgd2UnbGwgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhlIHNpemUgd2UgYWN0dWFsbHkgZ2V0Ci0gICAqIGFueXdheSwgc2VlIGJlbG93KSAqLwotICByZXQgPQotICAgICAgaGVscGVyLT5mdW5jIChoZWxwZXItPm9iaiwgaGVscGVyLT5wYXJlbnQsIG9mZnNldCwgTUFYIChzaXplLCA0MDk2KSwKLSAgICAgICZidWZmZXIpOwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBlcnJvcjsKLQotI2lmIDAKLSAgY2FwcyA9IEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKTsKLQotICBpZiAoY2FwcyAmJiAhZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpICYmICFnc3RfY2Fwc19pc19hbnkgKGNhcHMpKSB7Ci0gICAgR1NUX0RFQlVHICgiYnVmZmVyIGhhcyBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIsIHN1Z2dlc3QgbWF4IHByb2JhYmlsaXR5IiwKLSAgICAgICAgY2Fwcyk7Ci0KLSAgICBnc3RfY2Fwc19yZXBsYWNlICgmaGVscGVyLT5jYXBzLCBjYXBzKTsKLSAgICBoZWxwZXItPmJlc3RfcHJvYmFiaWxpdHkgPSBHU1RfVFlQRV9GSU5EX01BWElNVU07Ci0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0jZW5kaWYKLQotICAvKiBnZXRyYW5nZSBtaWdodCBzaWxlbnRseSByZXR1cm4gc2hvcnRlbmVkIGJ1ZmZlcnMgYXQgdGhlIGVuZCBvZiBhIGZpbGUsCi0gICAqIHdlIG11c3QsIGhvd2V2ZXIsIGFsd2F5cyByZXR1cm4gZWl0aGVyIHRoZSBmdWxsIHJlcXVlc3RlZCBkYXRhIG9yICVOVUxMICovCi0gIGJ1Zl9vZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKTsKLSAgYnVmX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotCi0gIGlmICgoYnVmX29mZnNldCAhPSAtMSAmJiBidWZfb2Zmc2V0ICE9IG9mZnNldCkgfHwgYnVmX3NpemUgPCBzaXplKSB7Ci0gICAgR1NUX0RFQlVHICgiZHJvcHBpbmcgc2hvcnQgYnVmZmVyOiAlIiBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIGluc3RlYWQgb2YgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGJ1Zl9vZmZzZXQsIGJ1Zl9vZmZzZXQgKyBidWZfc2l6ZSAtIDEsIG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSAtIDEpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBibWFwID0gZ19zbGljZV9uZXcwIChHc3RNYXBwZWRCdWZmZXIpOwotCi0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmJtYXAtPm1hcCwgR1NUX01BUF9SRUFEKSkKLSAgICBnb3RvIG1hcF9mYWlsZWQ7Ci0KLSAgYm1hcC0+YnVmZmVyID0gYnVmZmVyOwotCi0gIGlmIChpbnNlcnRfcG9zKSB7Ci0gICAgaGVscGVyLT5idWZmZXJzID0gZ19zbGlzdF9pbnNlcnRfYmVmb3JlIChoZWxwZXItPmJ1ZmZlcnMsIGluc2VydF9wb3MsIGJtYXApOwotICB9IGVsc2UgewotICAgIC8qIGlmIGluc2VydF9wb3MgaXMgbm90IHNldCwgb3VyIG9mZnNldCBpcyBiaWdnZXIgdGhhbiB0aGUgbGFyZ2VzdCBvZmZzZXQKLSAgICAgKiB3ZSBoYXZlIHNvIGZhcjsgc2luY2Ugd2Uga2VlcCB0aGUgbGlzdCBzb3J0ZWQgd2l0aCBoaWdoZXN0IG9mZnNldHMKLSAgICAgKiBmaXJzdCwgd2UgbmVlZCB0byBwcmVwZW5kIHRoZSBidWZmZXIgdG8gdGhlIGxpc3QgKi8KLSAgICBoZWxwZXItPmxhc3Rfb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgKyBidWZfc2l6ZTsKLSAgICBoZWxwZXItPmJ1ZmZlcnMgPSBnX3NsaXN0X3ByZXBlbmQgKGhlbHBlci0+YnVmZmVycywgYm1hcCk7Ci0gIH0KLQotICByZXR1cm4gYm1hcC0+bWFwLmRhdGE7Ci0KLWVycm9yOgotICB7Ci0gICAgR1NUX0lORk8gKCJ0eXBlZmluZCBmdW5jdGlvbiByZXR1cm5lZDogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW1hcF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1IgKCJtYXAgZmFpbGVkIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdE1hcHBlZEJ1ZmZlciwgYm1hcCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoKLSAqIGhlbHBlcl9maW5kX3N1Z2dlc3Q6Ci0gKiBAZGF0YTogaGVscGVyIGRhdGEgc3RydWN0Ci0gKiBAcHJvYmFiaWxpdHk6IHByb2JhYmlsaXR5IG9mIHRoZSBtYXRjaAotICogQGNhcHM6IGNhcHMgb2YgdGhlIHR5cGUKLSAqCi0gKiBJZiBnaXZlbiBAcHJvYmFiaWxpdHkgaXMgaGlnaGVyLCByZXBsYWNlIHByZXZpb3VzbHkgc3RvcmUgY2Fwcy4KLSAqLwotc3RhdGljIHZvaWQKLWhlbHBlcl9maW5kX3N1Z2dlc3QgKGdwb2ludGVyIGRhdGEsIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgcHJvYmFiaWxpdHksCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFR5cGVGaW5kSGVscGVyICpoZWxwZXIgPSAoR3N0VHlwZUZpbmRIZWxwZXIgKikgZGF0YTsKLQotICBHU1RfTE9HX09CSkVDVCAoaGVscGVyLT5vYmosCi0gICAgICAiJyVzJyBjYWxsZWQgc3VnZ2VzdCAoJXUsICUiIEdTVF9QVFJfRk9STUFUICIpIiwKLSAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoaGVscGVyLT5mYWN0b3J5KSwgcHJvYmFiaWxpdHksIGNhcHMpOwotCi0gIGlmIChwcm9iYWJpbGl0eSA+IGhlbHBlci0+YmVzdF9wcm9iYWJpbGl0eSkgewotICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZoZWxwZXItPmNhcHMsIGNhcHMpOwotICAgIGhlbHBlci0+YmVzdF9wcm9iYWJpbGl0eSA9IHByb2JhYmlsaXR5OwotICB9Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1oZWxwZXJfZmluZF9nZXRfbGVuZ3RoIChncG9pbnRlciBkYXRhKQotewotICBHc3RUeXBlRmluZEhlbHBlciAqaGVscGVyID0gKEdzdFR5cGVGaW5kSGVscGVyICopIGRhdGE7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGhlbHBlci0+b2JqLCAiJyVzJyBjYWxsZWQgZ2V0X2xlbmd0aCwgcmV0dXJuaW5nICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFULCBHU1RfT0JKRUNUX05BTUUgKGhlbHBlci0+ZmFjdG9yeSksIGhlbHBlci0+c2l6ZSk7Ci0KLSAgcmV0dXJuIGhlbHBlci0+c2l6ZTsKLX0KLQotLyoqCi0gKiBnc3RfdHlwZV9maW5kX2hlbHBlcl9nZXRfcmFuZ2U6Ci0gKiBAb2JqOiBBICNHc3RPYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudCB0byBAZnVuYwotICogQHBhcmVudDogKGFsbG93LW5vbmUpOiB0aGUgcGFyZW50IG9mIEBvYmogb3IgJU5VTEwKLSAqIEBmdW5jOiAoc2NvcGUgY2FsbCk6IEEgZ2VuZXJpYyAjR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIHRoYXQgd2lsbAotICogICAgICAgIGJlIHVzZWQgdG8gYWNjZXNzIGRhdGEgYXQgcmFuZG9tIG9mZnNldHMgd2hlbiBkb2luZyB0aGUgdHlwZWZpbmRpbmcKLSAqIEBzaXplOiBUaGUgbGVuZ3RoIGluIGJ5dGVzCi0gKiBAZXh0ZW5zaW9uOiBleHRlbnNpb24gb2YgdGhlIG1lZGlhCi0gKiBAcHJvYjogKG91dCkgKGFsbG93LW5vbmUpOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGZvdW5kCi0gKiAgICAgY2Fwcywgb3IgJU5VTEwKLSAqCi0gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGRvIHB1bGwtYmFzZWQgdHlwZWZpbmRpbmcuIFVubGlrZSBnc3RfdHlwZV9maW5kX2hlbHBlcigpCi0gKiBob3dldmVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gQGZ1bmMgdG8gb2J0YWluIHRoZQotICogZGF0YSBuZWVkZWQgYnkgdGhlIHR5cGVmaW5kIGZ1bmN0aW9ucywgcmF0aGVyIHRoYW4gb3BlcmF0aW5nIG9uIGEgZ2l2ZW4KLSAqIHNvdXJjZSBwYWQuIFRoaXMgaXMgdXNlZnVsIG1vc3RseSBmb3IgZWxlbWVudHMgbGlrZSB0YWcgZGVtdXhlcnMgd2hpY2gKLSAqIHN0cmlwIG9mZiBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgYW5kL29yIGVuZCBvZiBhIGZpbGUgYW5kIHdhbnQgdG8gdHlwZWZpbmQKLSAqIHRoZSBzdHJpcHBlZCBkYXRhIHN0cmVhbSBiZWZvcmUgYWRkaW5nIHRoZWlyIG93biBzb3VyY2UgcGFkICh0aGUgc3BlY2lmaWVkCi0gKiBjYWxsYmFjayBjYW4gdGhlbiBjYWxsIHRoZSB1cHN0cmVhbSBwZWVyIHBhZCB3aXRoIG9mZnNldHMgYWRqdXN0ZWQgZm9yIHRoZQotICogdGFnIHNpemUsIGZvciBleGFtcGxlKS4KLSAqCi0gKiBXaGVuIEBleHRlbnNpb24gaXMgbm90ICVOVUxMLCB0aGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgdHJ5IHRoZSB0eXBlZmluZAotICogZnVuY3Rpb25zIGZvciB0aGUgZ2l2ZW4gZXh0ZW5zaW9uLCB3aGljaCBtaWdodCBzcGVlZCB1cCB0aGUgdHlwZWZpbmRpbmcKLSAqIGluIG1hbnkgY2FzZXMuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdGhlICNHc3RDYXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGEKLSAqICAgICBzdHJlYW0uICBSZXR1cm5zICVOVUxMIGlmIG5vICNHc3RDYXBzIG1hdGNoZXMgdGhlIGRhdGEgc3RyZWFtLgotICovCi1Hc3RDYXBzICoKLWdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSAoR3N0T2JqZWN0ICogb2JqLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIGZ1bmMsIGd1aW50NjQgc2l6ZSwKLSAgICBjb25zdCBnY2hhciAqIGV4dGVuc2lvbiwgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSAqIHByb2IpCi17Ci0gIEdzdFR5cGVGaW5kSGVscGVyIGhlbHBlcjsKLSAgR3N0VHlwZUZpbmQgZmluZDsKLSAgR1NMaXN0ICp3YWxrOwotICBHTGlzdCAqbCwgKnR5cGVfbGlzdDsKLSAgR3N0Q2FwcyAqcmVzdWx0ID0gTlVMTDsKLSAgZ2ludCBwb3MgPSAwOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfT0JKRUNUIChvYmopLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZ1bmMgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgaGVscGVyLmJ1ZmZlcnMgPSBOVUxMOwotICBoZWxwZXIuc2l6ZSA9IHNpemU7Ci0gIGhlbHBlci5sYXN0X29mZnNldCA9IDA7Ci0gIGhlbHBlci5mdW5jID0gZnVuYzsKLSAgaGVscGVyLmJlc3RfcHJvYmFiaWxpdHkgPSBHU1RfVFlQRV9GSU5EX05PTkU7Ci0gIGhlbHBlci5jYXBzID0gTlVMTDsKLSAgaGVscGVyLm9iaiA9IG9iajsKLSAgaGVscGVyLnBhcmVudCA9IHBhcmVudDsKLQotICBmaW5kLmRhdGEgPSAmaGVscGVyOwotICBmaW5kLnBlZWsgPSBoZWxwZXJfZmluZF9wZWVrOwotICBmaW5kLnN1Z2dlc3QgPSBoZWxwZXJfZmluZF9zdWdnZXN0OwotCi0gIGlmIChzaXplID09IDAgfHwgc2l6ZSA9PSAoZ3VpbnQ2NCkgLSAxKSB7Ci0gICAgZmluZC5nZXRfbGVuZ3RoID0gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICBmaW5kLmdldF9sZW5ndGggPSBoZWxwZXJfZmluZF9nZXRfbGVuZ3RoOwotICB9Ci0KLSAgdHlwZV9saXN0ID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9saXN0ICgpOwotCi0gIC8qIG1vdmUgdGhlIHR5cGVmaW5kZXJzIGZvciB0aGUgZXh0ZW5zaW9uIGZpcnN0IGluIHRoZSBsaXN0LiBUaGUgaWRlYSBpcyB0aGF0Ci0gICAqIHdoZW4gb25lIG9mIHRoZW0gcmV0dXJucyBNQVggd2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggZnVydGhlciBhcyB0aGVyZSBpcyBhCi0gICAqIHZlcnkgaGlnaCBjaGFuY2Ugd2UgZ290IHRoZSByaWdodCB0eXBlLiAqLwotICBpZiAoZXh0ZW5zaW9uKSB7Ci0gICAgR0xpc3QgKm5leHQ7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAob2JqLCAic29ydGluZyB0eXBlZmluZCBmb3IgZXh0ZW5zaW9uICVzIHRvIGhlYWQiLAotICAgICAgICBleHRlbnNpb24pOwotCi0gICAgZm9yIChsID0gdHlwZV9saXN0OyBsOyBsID0gbmV4dCkgewotICAgICAgY29uc3QgZ2NoYXIgKmNvbnN0ICpleHQ7Ci0gICAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3Rvcnk7Ci0KLSAgICAgIG5leHQgPSBsLT5uZXh0OwotCi0gICAgICBmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChsLT5kYXRhKTsKLQotICAgICAgZXh0ID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zIChmYWN0b3J5KTsKLSAgICAgIGlmIChleHQgPT0gTlVMTCkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChvYmosICJ0ZXN0aW5nIGZhY3RvcnkgJXMgZm9yIGV4dGVuc2lvbiAlcyIsCi0gICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChmYWN0b3J5KSwgZXh0ZW5zaW9uKTsKLQotICAgICAgd2hpbGUgKCpleHQgIT0gTlVMTCkgewotICAgICAgICBpZiAoc3RyY21wICgqZXh0LCBleHRlbnNpb24pID09IDApIHsKLSAgICAgICAgICAvKiBmb3VuZCBleHRlbnNpb24sIG1vdmUgaW4gZnJvbnQgKi8KLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAob2JqLCAibW92aW5nIHR5cGVmaW5kIGZvciBleHRlbnNpb24gJXMgdG8gaGVhZCIsCi0gICAgICAgICAgICAgIGV4dGVuc2lvbik7Ci0gICAgICAgICAgLyogcmVtb3ZlIGVudHJ5IGZyb20gbGlzdCAqLwotICAgICAgICAgIHR5cGVfbGlzdCA9IGdfbGlzdF9kZWxldGVfbGluayAodHlwZV9saXN0LCBsKTsKLSAgICAgICAgICAvKiBpbnNlcnQgYXQgdGhlIHBvc2l0aW9uICovCi0gICAgICAgICAgdHlwZV9saXN0ID0gZ19saXN0X2luc2VydCAodHlwZV9saXN0LCBmYWN0b3J5LCBwb3MpOwotICAgICAgICAgIC8qIG5leHQgZWxlbWVudCB3aWxsIGJlIGluc2VydGVkIGFmdGVyIHRoaXMgb25lICovCi0gICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgKytleHQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZm9yIChsID0gdHlwZV9saXN0OyBsOyBsID0gbC0+bmV4dCkgewotICAgIGhlbHBlci5mYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChsLT5kYXRhKTsKLSAgICBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbiAoaGVscGVyLmZhY3RvcnksICZmaW5kKTsKLSAgICBpZiAoaGVscGVyLmJlc3RfcHJvYmFiaWxpdHkgPj0gR1NUX1RZUEVfRklORF9NQVhJTVVNKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAodHlwZV9saXN0KTsKLQotICBmb3IgKHdhbGsgPSBoZWxwZXIuYnVmZmVyczsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICBHc3RNYXBwZWRCdWZmZXIgKmJtYXAgPSAoR3N0TWFwcGVkQnVmZmVyICopIHdhbGstPmRhdGE7Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChibWFwLT5idWZmZXIsICZibWFwLT5tYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJtYXAtPmJ1ZmZlcik7Ci0gICAgZ19zbGljZV9mcmVlIChHc3RNYXBwZWRCdWZmZXIsIGJtYXApOwotICB9Ci0gIGdfc2xpc3RfZnJlZSAoaGVscGVyLmJ1ZmZlcnMpOwotCi0gIGlmIChoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eSA+IDApCi0gICAgcmVzdWx0ID0gaGVscGVyLmNhcHM7Ci0KLSAgaWYgKHByb2IpCi0gICAgKnByb2IgPSBoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eTsKLQotICBHU1RfTE9HX09CSkVDVCAob2JqLCAiUmV0dXJuaW5nICUiIEdTVF9QVFJfRk9STUFUICIgKHByb2JhYmlsaXR5ID0gJXUpIiwKLSAgICAgIHJlc3VsdCwgKGd1aW50KSBoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfdHlwZV9maW5kX2hlbHBlcjoKLSAqIEBzcmM6IEEgc291cmNlICNHc3RQYWQKLSAqIEBzaXplOiBUaGUgbGVuZ3RoIGluIGJ5dGVzCi0gKgotICogVHJpZXMgdG8gZmluZCB3aGF0IHR5cGUgb2YgZGF0YSBpcyBmbG93aW5nIGZyb20gdGhlIGdpdmVuIHNvdXJjZSAjR3N0UGFkLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSAjR3N0Q2FwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRhCi0gKiAgICAgc3RyZWFtLiAgUmV0dXJucyAlTlVMTCBpZiBubyAjR3N0Q2FwcyBtYXRjaGVzIHRoZSBkYXRhIHN0cmVhbS4KLSAqLwotCi1Hc3RDYXBzICoKLWdzdF90eXBlX2ZpbmRfaGVscGVyIChHc3RQYWQgKiBzcmMsIGd1aW50NjQgc2l6ZSkKLXsKLSAgR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uIGZ1bmM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19PQkpFQ1QgKHNyYyksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1BBRF9HRVRSQU5HRUZVTkMgKHNyYykgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZnVuYyA9IChHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb24pIChHU1RfUEFEX0dFVFJBTkdFRlVOQyAoc3JjKSk7Ci0KLSAgcmV0dXJuIGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSAoR1NUX09CSkVDVCAoc3JjKSwKLSAgICAgIEdTVF9PQkpFQ1RfUEFSRU5UIChzcmMpLCBmdW5jLCBzaXplLCBOVUxMLCBOVUxMKTsKLX0KLQotLyogKioqKioqKioqKioqKioqKioqKioqKiB0eXBlZmluZGluZyBmb3IgYnVmZmVycyAqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGd1aW50OCAqZGF0YTsgICAgICAgICAgIC8qIGJ1ZmZlciBkYXRhICovCi0gIGdzaXplIHNpemU7Ci0gIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgYmVzdF9wcm9iYWJpbGl0eTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0VHlwZUZpbmRGYWN0b3J5ICpmYWN0b3J5OyAgLyogZm9yIGxvZ2dpbmcgKi8KLSAgR3N0T2JqZWN0ICpvYmo7ICAgICAgICAgICAgICAgLyogZm9yIGxvZ2dpbmcgKi8KLX0gR3N0VHlwZUZpbmRCdWZIZWxwZXI7Ci0KLS8qCi0gKiBidWZfaGVscGVyX2ZpbmRfcGVlazoKLSAqIEBkYXRhOiBoZWxwZXIgZGF0YSBzdHJ1Y3QKLSAqIEBvZmY6IHN0cmVhbSBvZmZzZXQKLSAqIEBzaXplOiBibG9jayBzaXplCi0gKgotICogR2V0IGRhdGEgcG9pbnRlciB3aXRoaW4gYSBidWZmZXIuCi0gKgotICogUmV0dXJuczogKG51bGxhYmxlKTogYWRkcmVzcyBpbnNpZGUgdGhlIGJ1ZmZlciBvciAlTlVMTCBpZiBidWZmZXIgZG9lcyBub3QKLSAqIGNvdmVyIHRoZSByZXF1ZXN0ZWQgcmFuZ2UuCi0gKi8KLXN0YXRpYyBjb25zdCBndWludDggKgotYnVmX2hlbHBlcl9maW5kX3BlZWsgKGdwb2ludGVyIGRhdGEsIGdpbnQ2NCBvZmYsIGd1aW50IHNpemUpCi17Ci0gIEdzdFR5cGVGaW5kQnVmSGVscGVyICpoZWxwZXI7Ci0KLSAgaGVscGVyID0gKEdzdFR5cGVGaW5kQnVmSGVscGVyICopIGRhdGE7Ci0gIEdTVF9MT0dfT0JKRUNUIChoZWxwZXItPm9iaiwgIiclcycgY2FsbGVkIHBlZWsgKCUiIEdfR0lOVDY0X0ZPUk1BVCAiLCAldSkiLAotICAgICAgR1NUX09CSkVDVF9OQU1FIChoZWxwZXItPmZhY3RvcnkpLCBvZmYsIHNpemUpOwotCi0gIGlmIChzaXplID09IDApCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKG9mZiA8IDApIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoaGVscGVyLT5vYmosICInJXMnIHdhbnRlZCB0byBwZWVrIGF0IGVuZDsgbm90IHN1cHBvcnRlZCIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoaGVscGVyLT5mYWN0b3J5KSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoKG9mZiArIHNpemUpIDw9IGhlbHBlci0+c2l6ZSkKLSAgICByZXR1cm4gaGVscGVyLT5kYXRhICsgb2ZmOwotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKgotICogYnVmX2hlbHBlcl9maW5kX3N1Z2dlc3Q6Ci0gKiBAZGF0YTogaGVscGVyIGRhdGEgc3RydWN0Ci0gKiBAcHJvYmFiaWxpdHk6IHByb2JhYmlsaXR5IG9mIHRoZSBtYXRjaAotICogQGNhcHM6IGNhcHMgb2YgdGhlIHR5cGUKLSAqCi0gKiBJZiBnaXZlbiBAcHJvYmFiaWxpdHkgaXMgaGlnaGVyLCByZXBsYWNlIHByZXZpb3VzbHkgc3RvcmUgY2Fwcy4KLSAqLwotc3RhdGljIHZvaWQKLWJ1Zl9oZWxwZXJfZmluZF9zdWdnZXN0IChncG9pbnRlciBkYXRhLCBHc3RUeXBlRmluZFByb2JhYmlsaXR5IHByb2JhYmlsaXR5LAotICAgIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RUeXBlRmluZEJ1ZkhlbHBlciAqaGVscGVyID0gKEdzdFR5cGVGaW5kQnVmSGVscGVyICopIGRhdGE7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGhlbHBlci0+b2JqLAotICAgICAgIiclcycgY2FsbGVkIHN1Z2dlc3QgKCV1LCAlIiBHU1RfUFRSX0ZPUk1BVCAiKSIsCi0gICAgICBHU1RfT0JKRUNUX05BTUUgKGhlbHBlci0+ZmFjdG9yeSksIHByb2JhYmlsaXR5LCBjYXBzKTsKLQotICAvKiBOb3RlOiBub3QgPj0gYXMgd2UgY2FsbCB0eXBlZmluZGVycyBpbiBvcmRlciBvZiByYW5rLCBoaWdoZXN0IGZpcnN0ICovCi0gIGlmIChwcm9iYWJpbGl0eSA+IGhlbHBlci0+YmVzdF9wcm9iYWJpbGl0eSkgewotICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZoZWxwZXItPmNhcHMsIGNhcHMpOwotICAgIGhlbHBlci0+YmVzdF9wcm9iYWJpbGl0eSA9IHByb2JhYmlsaXR5OwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGE6Ci0gKiBAb2JqOiAoYWxsb3ctbm9uZSk6IG9iamVjdCBkb2luZyB0aGUgdHlwZWZpbmRpbmcsIG9yICVOVUxMICh1c2VkIGZvciBsb2dnaW5nKQotICogQGRhdGE6IChpbikgKHRyYW5zZmVyIG5vbmUpOiBhIHBvaW50ZXIgd2l0aCBkYXRhIHRvIHR5cGVmaW5kCi0gKiBAc2l6ZTogKGluKTogdGhlIHNpemUgb2YgQGRhdGEKLSAqIEBwcm9iOiAob3V0KSAoYWxsb3ctbm9uZSk6IGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgZm91bmQKLSAqICAgICBjYXBzLCBvciAlTlVMTAotICoKLSAqIFRyaWVzIHRvIGZpbmQgd2hhdCB0eXBlIG9mIGRhdGEgaXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiBAZGF0YSwgdGhlCi0gKiBhc3N1bXB0aW9uIGJlaW5nIHRoYXQgdGhlIGRhdGEgcmVwcmVzZW50cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0gb3IKLSAqIGZpbGUuCi0gKgotICogQWxsIGF2YWlsYWJsZSB0eXBlZmluZGVycyB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgZGF0YSBpbiBvcmRlciBvZiByYW5rLiBJZgotICogYSB0eXBlZmluZGluZyBmdW5jdGlvbiByZXR1cm5zIGEgcHJvYmFiaWxpdHkgb2YgJUdTVF9UWVBFX0ZJTkRfTUFYSU1VTSwKLSAqIHR5cGVmaW5kaW5nIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBmb3VuZCBjYXBzIHdpbGwgYmUgcmV0dXJuZWQKLSAqIHJpZ2h0IGF3YXkuIE90aGVyd2lzZSwgYWxsIGF2YWlsYWJsZSB0eXBlZmluZCBmdW5jdGlvbnMgd2lsbCB0aGUgdHJpZWQsCi0gKiBhbmQgdGhlIGNhcHMgd2l0aCB0aGUgaGlnaGVzdCBwcm9iYWJpbGl0eSB3aWxsIGJlIHJldHVybmVkLCBvciAlTlVMTCBpZgotICogdGhlIGNvbnRlbnQgb2YgQGRhdGEgY291bGQgbm90IGJlIGlkZW50aWZpZWQuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2NhcHNfdW5yZWYKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKG51bGxhYmxlKTogdGhlICNHc3RDYXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRhdGEsCi0gKiAgICAgb3IgJU5VTEwgaWYgbm8gdHlwZSBjb3VsZCBiZSBmb3VuZC4gVGhlIGNhbGxlciBzaG91bGQgZnJlZSB0aGUgY2FwcwotICogICAgIHJldHVybmVkIHdpdGggZ3N0X2NhcHNfdW5yZWYoKS4KLSAqLwotR3N0Q2FwcyAqCi1nc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZGF0YSAoR3N0T2JqZWN0ICogb2JqLCBjb25zdCBndWludDggKiBkYXRhLCBnc2l6ZSBzaXplLAotICAgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgKiBwcm9iKQotewotICBHc3RUeXBlRmluZEJ1ZkhlbHBlciBoZWxwZXI7Ci0gIEdzdFR5cGVGaW5kIGZpbmQ7Ci0gIEdMaXN0ICpsLCAqdHlwZV9saXN0OwotICBHc3RDYXBzICpyZXN1bHQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRhICE9IE5VTEwsIE5VTEwpOwotCi0gIGhlbHBlci5kYXRhID0gZGF0YTsKLSAgaGVscGVyLnNpemUgPSBzaXplOwotICBoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eSA9IEdTVF9UWVBFX0ZJTkRfTk9ORTsKLSAgaGVscGVyLmNhcHMgPSBOVUxMOwotICBoZWxwZXIub2JqID0gb2JqOwotCi0gIGlmIChoZWxwZXIuZGF0YSA9PSBOVUxMIHx8IGhlbHBlci5zaXplID09IDApCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZmluZC5kYXRhID0gJmhlbHBlcjsKLSAgZmluZC5wZWVrID0gYnVmX2hlbHBlcl9maW5kX3BlZWs7Ci0gIGZpbmQuc3VnZ2VzdCA9IGJ1Zl9oZWxwZXJfZmluZF9zdWdnZXN0OwotICBmaW5kLmdldF9sZW5ndGggPSBOVUxMOwotCi0gIHR5cGVfbGlzdCA9IGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdCAoKTsKLQotICBmb3IgKGwgPSB0eXBlX2xpc3Q7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgaGVscGVyLmZhY3RvcnkgPSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkgKGwtPmRhdGEpOwotICAgIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uIChoZWxwZXIuZmFjdG9yeSwgJmZpbmQpOwotICAgIGlmIChoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eSA+PSBHU1RfVFlQRV9GSU5EX01BWElNVU0pCi0gICAgICBicmVhazsKLSAgfQotICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlICh0eXBlX2xpc3QpOwotCi0gIGlmIChoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eSA+IDApCi0gICAgcmVzdWx0ID0gaGVscGVyLmNhcHM7Ci0KLSAgaWYgKHByb2IpCi0gICAgKnByb2IgPSBoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eTsKLQotICBHU1RfTE9HX09CSkVDVCAob2JqLCAiUmV0dXJuaW5nICUiIEdTVF9QVFJfRk9STUFUICIgKHByb2JhYmlsaXR5ID0gJXUpIiwKLSAgICAgIHJlc3VsdCwgKGd1aW50KSBoZWxwZXIuYmVzdF9wcm9iYWJpbGl0eSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyOgotICogQG9iajogKGFsbG93LW5vbmUpOiBvYmplY3QgZG9pbmcgdGhlIHR5cGVmaW5kaW5nLCBvciAlTlVMTCAodXNlZCBmb3IgbG9nZ2luZykKLSAqIEBidWY6IChpbikgKHRyYW5zZmVyIG5vbmUpOiBhICNHc3RCdWZmZXIgd2l0aCBkYXRhIHRvIHR5cGVmaW5kCi0gKiBAcHJvYjogKG91dCkgKGFsbG93LW5vbmUpOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGZvdW5kCi0gKiAgICAgY2Fwcywgb3IgJU5VTEwKLSAqCi0gKiBUcmllcyB0byBmaW5kIHdoYXQgdHlwZSBvZiBkYXRhIGlzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gI0dzdEJ1ZmZlciwgdGhlCi0gKiBhc3N1bXB0aW9uIGJlaW5nIHRoYXQgdGhlIGJ1ZmZlciByZXByZXNlbnRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSBvcgotICogZmlsZS4KLSAqCi0gKiBBbGwgYXZhaWxhYmxlIHR5cGVmaW5kZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBkYXRhIGluIG9yZGVyIG9mIHJhbmsuIElmCi0gKiBhIHR5cGVmaW5kaW5nIGZ1bmN0aW9uIHJldHVybnMgYSBwcm9iYWJpbGl0eSBvZiAlR1NUX1RZUEVfRklORF9NQVhJTVVNLAotICogdHlwZWZpbmRpbmcgaXMgc3RvcHBlZCBpbW1lZGlhdGVseSBhbmQgdGhlIGZvdW5kIGNhcHMgd2lsbCBiZSByZXR1cm5lZAotICogcmlnaHQgYXdheS4gT3RoZXJ3aXNlLCBhbGwgYXZhaWxhYmxlIHR5cGVmaW5kIGZ1bmN0aW9ucyB3aWxsIHRoZSB0cmllZCwKLSAqIGFuZCB0aGUgY2FwcyB3aXRoIHRoZSBoaWdoZXN0IHByb2JhYmlsaXR5IHdpbGwgYmUgcmV0dXJuZWQsIG9yICVOVUxMIGlmCi0gKiB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyIGNvdWxkIG5vdCBiZSBpZGVudGlmaWVkLgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9jYXBzX3VucmVmCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChudWxsYWJsZSk6IHRoZSAjR3N0Q2FwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkYXRhLAotICogICAgIG9yICVOVUxMIGlmIG5vIHR5cGUgY291bGQgYmUgZm91bmQuIFRoZSBjYWxsZXIgc2hvdWxkIGZyZWUgdGhlIGNhcHMKLSAqICAgICByZXR1cm5lZCB3aXRoIGdzdF9jYXBzX3VucmVmKCkuCi0gKi8KLUdzdENhcHMgKgotZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlciAoR3N0T2JqZWN0ICogb2JqLCBHc3RCdWZmZXIgKiBidWYsCi0gICAgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSAqIHByb2IpCi17Ci0gIEdzdENhcHMgKnJlc3VsdDsKLSAgR3N0TWFwSW5mbyBpbmZvOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidWYgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWYpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID09IDAgfHwKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID09IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUsIE5VTEwpOwotCi0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfUkVBRCkpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIHJlc3VsdCA9IGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhIChvYmosIGluZm8uZGF0YSwgaW5mby5zaXplLCBwcm9iKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mbyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfZXh0ZW5zaW9uOgotICogQG9iajogKGFsbG93LW5vbmUpOiBvYmplY3QgZG9pbmcgdGhlIHR5cGVmaW5kaW5nLCBvciAlTlVMTCAodXNlZCBmb3IgbG9nZ2luZykKLSAqIEBleHRlbnNpb246IGFuIGV4dGVuc2lvbgotICoKLSAqIFRyaWVzIHRvIGZpbmQgdGhlIGJlc3QgI0dzdENhcHMgYXNzb2NpYXRlZCB3aXRoIEBleHRlbnNpb24uCi0gKgotICogQWxsIGF2YWlsYWJsZSB0eXBlZmluZGVycyB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgZXh0ZW5zaW9uIGluIG9yZGVyCi0gKiBvZiByYW5rLiBUaGUgY2FwcyBvZiB0aGUgZmlyc3QgdHlwZWZpbmRlciB0aGF0IGNhbiBoYW5kbGUgQGV4dGVuc2lvbiB3aWxsIGJlCi0gKiByZXR1cm5lZC4KLSAqCi0gKiBGcmVlLWZ1bmN0aW9uOiBnc3RfY2Fwc191bnJlZgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKSAobnVsbGFibGUpOiB0aGUgI0dzdENhcHMgY29ycmVzcG9uZGluZyB0bwotICogICAgIEBleHRlbnNpb24sIG9yICVOVUxMIGlmIG5vIHR5cGUgY291bGQgYmUgZm91bmQuIFRoZSBjYWxsZXIgc2hvdWxkIGZyZWUKLSAqICAgICB0aGUgY2FwcyByZXR1cm5lZCB3aXRoIGdzdF9jYXBzX3VucmVmKCkuCi0gKi8KLUdzdENhcHMgKgotZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbiAoR3N0T2JqZWN0ICogb2JqLCBjb25zdCBnY2hhciAqIGV4dGVuc2lvbikKLXsKLSAgR0xpc3QgKmwsICp0eXBlX2xpc3Q7Ci0gIEdzdENhcHMgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV4dGVuc2lvbiAhPSBOVUxMLCBOVUxMKTsKLQotICBHU1RfTE9HX09CSkVDVCAob2JqLCAiZmluZGluZyBjYXBzIGZvciBleHRlbnNpb24gJXMiLCBleHRlbnNpb24pOwotCi0gIHR5cGVfbGlzdCA9IGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdCAoKTsKLQotICBmb3IgKGwgPSB0eXBlX2xpc3Q7IGw7IGwgPSBnX2xpc3RfbmV4dCAobCkpIHsKLSAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3Rvcnk7Ci0gICAgY29uc3QgZ2NoYXIgKmNvbnN0ICpleHQ7Ci0KLSAgICBmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChsLT5kYXRhKTsKLQotICAgIC8qIHdlIG9ubHkgd2FudCB0byBjaGVjayB0aG9zZSBmYWN0b3JpZXMgd2l0aG91dCBhIGZ1bmN0aW9uICovCi0gICAgaWYgKGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9oYXNfZnVuY3Rpb24gKGZhY3RvcnkpKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBnZXQgdGhlIGV4dGVuc2lvbiB0aGF0IHRoaXMgdHlwZWZpbmQgZmFjdG9yeSBjYW4gaGFuZGxlICovCi0gICAgZXh0ID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9leHRlbnNpb25zIChmYWN0b3J5KTsKLSAgICBpZiAoZXh0ID09IE5VTEwpCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIHRoZXJlIGFyZSBleHRlbnNpb24sIHNlZSBpZiBvbmUgb2YgdGhlbSBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQKLSAgICAgKiBleHRlbnNpb24gKi8KLSAgICB3aGlsZSAoKmV4dCAhPSBOVUxMKSB7Ci0gICAgICBpZiAoc3RyY21wICgqZXh0LCBleHRlbnNpb24pID09IDApIHsKLSAgICAgICAgLyogd2UgZm91bmQgYSBtYXRjaGluZyBleHRlbnNpb24sIHRha2UgdGhlIGNhcHMgKi8KLSAgICAgICAgaWYgKChyZXN1bHQgPSBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHMgKGZhY3RvcnkpKSkgewotICAgICAgICAgIGdzdF9jYXBzX3JlZiAocmVzdWx0KTsKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICsrZXh0OwotICAgIH0KLSAgfQotZG9uZToKLSAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAodHlwZV9saXN0KTsKLQotICBHU1RfTE9HX09CSkVDVCAob2JqLCAiUmV0dXJuaW5nICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmggYi9saWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NzBlNGYuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSAyMDAwLDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNiAgICAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogZ3N0dHlwZWZpbmRoZWxwZXIuaDoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1RZUEVGSU5ESEVMUEVSX0hfXwotI2RlZmluZSBfX0dTVF9UWVBFRklOREhFTFBFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi1Hc3RDYXBzICogZ3N0X3R5cGVfZmluZF9oZWxwZXIgKEdzdFBhZCAqc3JjLCBndWludDY0IHNpemUpOwotCi1Hc3RDYXBzICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2RhdGEgICAoR3N0T2JqZWN0ICAgICAgICAgICAgICAqb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGd1aW50OCAgICAgICAgICAgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgICAgICAgICAgICAgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUeXBlRmluZFByb2JhYmlsaXR5ICpwcm9iKTsKLUdzdENhcHMgKiBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyIChHc3RPYmplY3QgICAgICAgICAgICAgICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICAgICAgICAgICAgICAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgKnByb2IpOwotCi1Hc3RDYXBzICogZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbiAoR3N0T2JqZWN0ICogb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZXh0ZW5zaW9uKTsKLQotLyoqCi0gKiBHc3RUeXBlRmluZEhlbHBlckdldFJhbmdlRnVuY3Rpb246Ci0gKiBAb2JqOiBhICNHc3RPYmplY3QgdGhhdCB3aWxsIGhhbmRsZSB0aGUgZ2V0cmFuZ2UgcmVxdWVzdAotICogQHBhcmVudDogKGFsbG93LW5vbmUpOiB0aGUgcGFyZW50IG9mIEBvYmogb3IgJU5VTEwKLSAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgb2YgdGhlIHJhbmdlCi0gKiBAbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSByYW5nZQotICogQGJ1ZmZlcjogYSBtZW1vcnkgbG9jYXRpb24gdG8gaG9sZCB0aGUgcmVzdWx0IGJ1ZmZlcgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlKCkgd2hlbgotICogdHlwZWZpbmRpbmcgZnVuY3Rpb25zIHJlcXVlc3QgdG8gcGVlayBhdCB0aGUgZGF0YSBvZiBhIHN0cmVhbSBhdCBjZXJ0YWluCi0gKiBvZmZzZXRzLiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgR1NUX0ZMT1dfT0ssIHRoZSByZXN1bHQgYnVmZmVyIHdpbGwgYmUKLSAqIHN0b3JlZCBpbiBAYnVmZmVyLiBUaGUgIGNvbnRlbnRzIG9mIEBidWZmZXIgaXMgaW52YWxpZCBmb3IgYW55IG90aGVyCi0gKiByZXR1cm4gdmFsdWUuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZWhhdmUgZXhhY3RseSBsaWtlIGEgI0dzdFBhZEdldFJhbmdlRnVuY3Rpb24uCi0gKgotICogUmV0dXJuczogR1NUX0ZMT1dfT0sgZm9yIHN1Y2Nlc3MKLSAqLwotdHlwZWRlZiBHc3RGbG93UmV0dXJuICgqR3N0VHlwZUZpbmRIZWxwZXJHZXRSYW5nZUZ1bmN0aW9uKSAoR3N0T2JqZWN0ICAqb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0T2JqZWN0ICAqcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAgICAgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICoqYnVmZmVyKTsKLQotR3N0Q2FwcyAqIGdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZSAoR3N0T2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbiAgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICAgICAqZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSAgICAgICAgICAgICpwcm9iKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RZUEVGSU5ESEVMUEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuYW0gYi9saWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwZDQ5NC4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi1saWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYQotCi1TWU1CT0xTX0ZJTEUgPSBleHBvcnRzLnN5bQotCi1saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9ERVBFTkRFTkNJRVMgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoU1lNQk9MU19GSUxFKQotbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUyA9CVwKLQlnc3RidWZmZXJzdHJhdy5jCQkJXAotCWdzdGNoZWNrLmMJCQkJXAotCWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5jCQkJXAotCWdzdGhhcm5lc3MuYwkJCQlcCi0JZ3N0dGVzdGNsb2NrLmMKLQotbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgXAotCS1VR19ESVNBQkxFX0FTU0VSVCBcCi0JLUkkKHRvcF9idWlsZGRpcikvbGlicyBcCi0JLUkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2sgXAotCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrCi1saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9MSUJBREQgPSAkKEdTVF9PQkpfTElCUykgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjaGVja2ludGVybmFsLmxhIFwKLQkkKExJQk0pCi1saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9MREZMQUdTID0gXAotCS1leHBvcnQtc3ltYm9scyAkKFNZTUJPTFNfRklMRSkgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCi0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciA9CQlcCi0JJChpbmNsdWRlZGlyKS9nc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAvZ3N0L2NoZWNrCi0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZV9IRUFERVJTID0JXAotCWNoZWNrLmgJCQkJCVwKLQlnc3RidWZmZXJzdHJhdy5oCQkJXAotCWdzdGNoZWNrLmgJCQkJXAotCWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5oCQkJXAotCWdzdGhhcm5lc3MuaAkJCQlcCi0JZ3N0dGVzdGNsb2NrLmgKLQotbm9kaXN0X2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZV9IRUFERVJTID0JXAotCWludGVybmFsLWNoZWNrLmgKLQotQ0xFQU5GSUxFUyA9ICouZ2NubyAqLmdjZGEgKi5nY292ICQoU1lNQk9MU19GSUxFKQotCi0lLmMuZ2NvdjogLmxpYnMvbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtJS5nY2RhICUuYwotCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKLQotZ2NvdjogJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTOj0uZ2NvdikKLQotU1VCRElSUyA9IGxpYmNoZWNrCi0KLUxJQkdTVENIRUNLX0VYUE9SVEVEX1ZBUlMgPSBcCi0JX2dzdF9jaGVja190aHJlYWRzX3J1bm5pbmcgXAotCV9nc3RfY2hlY2tfcmFpc2VkX2NyaXRpY2FsIFwKLQlfZ3N0X2NoZWNrX3JhaXNlZF93YXJuaW5nIFwKLQlfZ3N0X2NoZWNrX2V4cGVjdGluZ19sb2cgXAotCWJ1ZmZlcnMgXAotCWNoZWNrX2NvbmQgXAotCWNoZWNrX2RlYnVnIFwKLQljaGVja19tdXRleCBcCi0JbXV0ZXggXAotCXN0YXJ0X2NvbmQgXAotCXN5bmNfY29uZCBcCi0JdGhyZWFkX2xpc3QKLQotTElCR1NUQ0hFQ0tfRVhQT1JURURfRlVOQ1MgPSBcCi0JX2dzdF9jaGVja19ydW5fdGVzdF9mdW5jIFwKLQlnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIgXAotCWdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgXAotCWdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZSBcCi0JZ3N0X2NoZWNrX2FiaV9saXN0IFwKLQlnc3RfY2hlY2tfY2Fwc19lcXVhbCBcCi0JZ3N0X2NoZWNrX2J1ZmZlcl9kYXRhIFwKLQlnc3RfY2hlY2tfY2hhaW5fZnVuYyBcCi0JZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyBcCi0JZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIgXAotCWdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QgXAotCWdzdF9jaGVja19pbml0IFwKLQlnc3RfY2hlY2tfbWVzc2FnZV9lcnJvciBcCi0JZ3N0X2NoZWNrX3J1bl9zdWl0ZSBcCi0JZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgXAotCWdzdF9jaGVja19zZXR1cF9ldmVudHMgXAotCWdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWQgXAotCWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCBcCi0JZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2Zyb21fdGVtcGxhdGUgXAotCWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lIFwKLQlnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlIFwKLQlnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCBcCi0JZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfZnJvbV90ZW1wbGF0ZSBcCi0JZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSBcCi0JZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlIFwKLQlnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCBcCi0JZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lIFwKLQlnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgXAotCWdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIFwKLQlnc3RfY2hlY2tfb2JqZWN0c19kZXN0cm95ZWRfb25fdW5yZWYgXAotCWdzdF9jaGVja19vYmplY3RfZGVzdHJveWVkX29uX3VucmVmIFwKLQlnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9hZGRfcGFkIFwKLQlnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXcgXAotCWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0IFwKLQlnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlIFwKLQlnc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxsIFwKLQlnc3RfaGFybmVzc19hZGRfZWxlbWVudF9zcmNfcGFkIFwKLQlnc3RfaGFybmVzc19hZGRfcGFyc2UgXAotCWdzdF9oYXJuZXNzX2FkZF9wcm9iZSBcCi0JZ3N0X2hhcm5lc3NfYWRkX3NpbmsgXAotCWdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3MgXAotCWdzdF9oYXJuZXNzX2FkZF9zaW5rX3BhcnNlIFwKLQlnc3RfaGFybmVzc19hZGRfc3JjIFwKLQlnc3RfaGFybmVzc19hZGRfc3JjX2hhcm5lc3MgXAotCWdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2UgXAotCWdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgXAotCWdzdF9oYXJuZXNzX2J1ZmZlcnNfaW5fcXVldWUgXAotCWdzdF9oYXJuZXNzX2NyYW5rX211bHRpcGxlX2Nsb2NrX3dhaXRzIFwKLQlnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCBcCi0JZ3N0X2hhcm5lc3NfY3JlYXRlX2J1ZmZlciBcCi0JZ3N0X2hhcm5lc3NfZHVtcF90b19maWxlIFwKLQlnc3RfaGFybmVzc19ldmVudHNfcmVjZWl2ZWQgXAotCWdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZSBcCi0JZ3N0X2hhcm5lc3NfZmluZF9lbGVtZW50IFwKLQlnc3RfaGFybmVzc19nZXQgXAotCWdzdF9oYXJuZXNzX2dldF9hbGxvY2F0b3IgXAotCWdzdF9oYXJuZXNzX2dldF9sYXN0X3B1c2hlZF90aW1lc3RhbXAgXAotCWdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgXAotCWdzdF9oYXJuZXNzX25ldyBcCi0JZ3N0X2hhcm5lc3NfbmV3X2VtcHR5IFwKLQlnc3RfaGFybmVzc19uZXdfZnVsbCBcCi0JZ3N0X2hhcm5lc3NfbmV3X3BhcnNlIFwKLQlnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50IFwKLQlnc3RfaGFybmVzc19uZXdfd2l0aF9wYWRuYW1lcyBcCi0JZ3N0X2hhcm5lc3NfbmV3X3dpdGhfdGVtcGxhdGVzIFwKLQlnc3RfaGFybmVzc19wbGF5IFwKLQlnc3RfaGFybmVzc19wdWxsIFwKLQlnc3RfaGFybmVzc19wdWxsX2V2ZW50IFwKLQlnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IFwKLQlnc3RfaGFybmVzc19wdXNoIFwKLQlnc3RfaGFybmVzc19wdXNoX2FuZF9wdWxsIFwKLQlnc3RfaGFybmVzc19wdXNoX2V2ZW50IFwKLQlnc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjIFwKLQlnc3RfaGFybmVzc19wdXNoX3RvX3NpbmsgXAotCWdzdF9oYXJuZXNzX3F1ZXJ5X2xhdGVuY3kgXAotCWdzdF9oYXJuZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnQgXAotCWdzdF9oYXJuZXNzX3NldCBcCi0JZ3N0X2hhcm5lc3Nfc2V0X2NhcHMgXAotCWdzdF9oYXJuZXNzX3NldF9jYXBzX3N0ciBcCi0JZ3N0X2hhcm5lc3Nfc2V0X2Ryb3BfYnVmZmVycyBcCi0JZ3N0X2hhcm5lc3Nfc2V0X2Jsb2NraW5nX3B1c2hfbW9kZSBcCi0JZ3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmcgXAotCWdzdF9oYXJuZXNzX3NldF9wcm9wb3NlX2FsbG9jYXRvciBcCi0JZ3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2FwcyBcCi0JZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIFwKLQlnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIFwKLQlnc3RfaGFybmVzc19zZXRfc2lua19jYXBzX3N0ciBcCi0JZ3N0X2hhcm5lc3Nfc2V0X3RpbWUgXAotCWdzdF9oYXJuZXNzX3NldF91cHN0cmVhbV9sYXRlbmN5IFwKLQlnc3RfaGFybmVzc19zaW5rX3B1c2hfbWFueSBcCi0JZ3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnkgXAotCWdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50IFwKLQlnc3RfaGFybmVzc19zdHJlc3NfY3VzdG9tX3N0YXJ0IFwKLQlnc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnRfZnVsbCBcCi0JZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0X2Z1bGwgXAotCWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGwgXAotCWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0X2Z1bGwgXAotCWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnRfZnVsbCBcCi0JZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfc3RhcnRfZnVsbCBcCi0JZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIFwKLQlnc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydF9mdWxsIFwKLQlnc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2Vfc3RhcnRfZnVsbCBcCi0JZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wIFwKLQlnc3RfaGFybmVzc190ZWFyZG93biBcCi0JZ3N0X2hhcm5lc3NfdHJ5X3B1bGwgXAotCWdzdF9oYXJuZXNzX3RyeV9wdWxsX2V2ZW50IFwKLQlnc3RfaGFybmVzc190cnlfcHVsbF91cHN0cmVhbV9ldmVudCBcCi0JZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX3JlY2VpdmVkIFwKLQlnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgXAotCWdzdF9oYXJuZXNzX3VzZV9zeXN0ZW1jbG9jayBcCi0JZ3N0X2hhcm5lc3NfdXNlX3Rlc3RjbG9jayBcCi0JZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMgXAotCWdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSBcCi0JZ3N0X3Rlc3RfY2xvY2tfY3JhbmsgXAotCWdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWUgXAotCWdzdF90ZXN0X2Nsb2NrX2dldF90eXBlIFwKLQlnc3RfdGVzdF9jbG9ja19oYXNfaWQgXAotCWdzdF90ZXN0X2Nsb2NrX2lkX2xpc3RfZ2V0X2xhdGVzdF90aW1lIFwKLQlnc3RfdGVzdF9jbG9ja19uZXcgXAotCWdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgXAotCWdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnQgXAotCWdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkIFwKLQlnc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3QgXAotCWdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCBcCi0JZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgXAotCWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzIFwKLQlnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgXAotCWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX3BlbmRpbmdfaWRfY291bnQKLQotIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBHU3RyZWFtZXIgPCAxLjUKLUxJQkdTVENIRUNLX0VYUE9SVEVEX0NPTVBBVF9GVU5DUyA9IFwKLQlfZmFpbF91bmxlc3MKLQotTElCR1NUQ0hFQ0tfRVhQT1JURURfU1lNQk9MUyA9IFwKLQkkKExJQkdTVENIRUNLX0VYUE9SVEVEX1ZBUlMpIFwKLQkkKExJQkdTVENIRUNLX0VYUE9SVEVEX0ZVTkNTKSBcCi0JJChMSUJHU1RDSEVDS19FWFBPUlRFRF9DT01QQVRfRlVOQ1MpCi0KLSMgUGxlYXNlIGRvIG5vdCBldmVuIHRoaW5rIGFib3V0IGNoYW5naW5nIHRoZSBhbHBoYWJldCBiZWxvdyBpbnRvIEEtWmEtei4KLSMgSXQgaXMgdGhlcmUgZm9yIHB1cnBvc2UuIChCdWcgIzYwMjA5MykKLUNIRUNLX1NZTVM9YCQoU0VEKSAtbiAtZSAncy9eLi4qQ0tfRVhQT1JUWyBdXHsxLFx9XChbXzAtOUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpdXHsxLFx9XCkuLiokJC9cMS9wJyBAdG9wX3NyY2RpckAvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaC5pbmAKLXByaW50LWNoZWNrLXN5bWJvbHM6Ci0JQGZvciBzIGluICQoQ0hFQ0tfU1lNUyk7IGRvIFwKLQkgIGVjaG8gJCRzOyBcCi0JZG9uZTsKLQotJChTWU1CT0xTX0ZJTEUpOiAkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZV9IRUFERVJTKSBpbnRlcm5hbC1jaGVjay5oCi0JJChBTV9WX0dFTilybSAtZiAkKFNZTUJPTFNfRklMRSkgMj4vZGV2L251bGw7IFwKLQlmb3IgcyBpbiAkKExJQkdTVENIRUNLX0VYUE9SVEVEX1NZTUJPTFMpICQoQ0hFQ0tfU1lNUyk7IGRvIFwKLQkgIGVjaG8gJCRzID4+ICQoU1lNQk9MU19GSUxFKTsgXAotCWRvbmUKLQotaWYgSEFWRV9JTlRST1NQRUNUSU9OCi1CVUlMVF9HSVJTT1VSQ0VTID0gR3N0Q2hlY2stQEdTVF9BUElfVkVSU0lPTkAuZ2lyCi0KLWdpcl9oZWFkZXJzPSQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykpCi1naXJfc291cmNlcz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUykpCi0KLUdzdENoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi0JJChBTV9WX0dFTilQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT15ZXNcCi0JCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSIiIEdTVF9QTFVHSU5fUEFUSF8xXzA9IiIgR1NUX1JFR0lTVFJZX1VQREFURT1ubyBcCi0JCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIENDPSIkKENDKSIgUEtHX0NPTkZJRz0iJChQS0dfQ09ORklHKSIgRExMVE9PTD0iJChETExUT09MKSIgXAotCQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0Q2hlY2sgXAotCQktLW5zdmVyc2lvbj1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JCS0taWRlbnRpZmllci1wcmVmaXg9R3N0IFwKLQkJLS1zeW1ib2wtcHJlZml4PWdzdCBcCi0JCS0td2Fybi1hbGwgXAotCQktSSQodG9wX3NyY2RpcikgXAotCQktSSQodG9wX3NyY2RpcikvbGlicyBcCi0JCS1JJCh0b3BfYnVpbGRkaXIpIFwKLQkJLUkkKHRvcF9idWlsZGRpcikvbGlicyBcCi0JCS0tYy1pbmNsdWRlICJnc3QvY2hlY2svY2hlY2suaCIgXAotCQktLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCi0JCS0tbGlicmFyeS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAotCQktLWxpYnJhcnk9bGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJLS1saWJ0b29sPSIke0xJQlRPT0x9IiBcCi0JCS0tcGtnIGdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItY2hlY2stQEdTVF9BUElfVkVSU0lPTkAgXAotCQktLWFkZC1pbml0LXNlY3Rpb249IiQoSU5UUk9TUEVDVElPTl9JTklUKSIgXAotCQktLW91dHB1dCAkQCBcCi0JCSQoZ2lyX2hlYWRlcnMpIFwKLQkJJChnaXJfc291cmNlcykKLQotIyBJTlRST1NQRUNUSU9OX0dJUkRJUi9JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgYXJlbid0IHRoZSByaWdodCBwbGFjZSB0bwotIyBpbnN0YWxsIGFueXRoaW5nIC0gd2UgbmVlZCB0byBpbnN0YWxsIGluc2lkZSBvdXIgcHJlZml4LgotZ2lyZGlyID0gJChkYXRhZGlyKS9naXItMS4wCi1naXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKLQotdHlwZWxpYnNkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMC8KLQotdHlwZWxpYnNfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUzouZ2lyPS50eXBlbGliKQotCi0lLnR5cGVsaWI6ICUuZ2lyICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKLQkkKEFNX1ZfR0VOKSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSAtLWluY2x1ZGVkaXI9JChidWlsZGRpcikgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9nc3QgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX09QVFMpICQ8IC1vICQoQEYpCi0KLUNMRUFORklMRVMgKz0gJChCVUlMVF9HSVJTT1VSQ0VTKSAkKHR5cGVsaWJzX0RBVEEpCi1lbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svTWFrZWZpbGUuaW4gYi9saWJzL2dzdC9jaGVjay9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzYmQ5YS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEzODAgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAYW1fX2FwcGVuZF8xID0gJChCVUlMVF9HSVJTT1VSQ0VTKSAkKHR5cGVsaWJzX0RBVEEpCi1zdWJkaXIgPSBsaWJzL2dzdC9jaGVjawotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKLQkkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZV9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0gaW50ZXJuYWwtY2hlY2suaAotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiBcCi0JIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgXAotCSIkKERFU1RESVIpJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiBcCi0JIiQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiCi1MVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWFtX2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcnN0cmF3LmxvIFwKLQlsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjaGVjay5sbyBcCi0JbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmxvIFwKLQlsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RoYXJuZXNzLmxvIFwKLQlsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0ZXN0Y2xvY2subG8KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX09CSkVDVFMgPSAgXAotCSQoYW1fbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBcCi0JY3RhZ3MtcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaHRtbC1yZWN1cnNpdmUgXAotCWluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1wZGYtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKLQlpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgXAotCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1EQVRBID0gJChnaXJfREFUQSkgJCh0eXBlbGlic19EQVRBKQotSEVBREVSUyA9ICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpIFwKLQkkKG5vZGlzdF9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykKLVJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCi0gIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLWFtX19yZWN1cnNpdmVfdGFyZ2V0cyA9IFwKLSAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAotICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCi0gICQoYW1fX2V4dHJhX3JlY3Vyc2l2ZV90YXJnZXRzKQotQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCi0JZGlzdGRpcgotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wIFwKLQkkKHRvcF9zcmNkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW4KLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1hbV9fcmVsYXRpdml6ZSA9IFwKLSAgZGlyMD1gcHdkYDsgXAotICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKLSAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKLSAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKLSAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCi0gIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKLSAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCi0gICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAotICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKLSAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCi0gICAgICBlbHNlIFwKLSAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCi0gICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gICAgICAgIGVsc2UgXAotICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKLSAgICAgICAgZmk7IFwKLSAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKLSAgICAgIGZpOyBcCi0gICAgZmk7IFwKLSAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgZG9uZTsgXAotICByZWxkaXI9IiQkZGlyMiIKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1saWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYQotU1lNQk9MU19GSUxFID0gZXhwb3J0cy5zeW0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0RFUEVOREVOQ0lFUyA9IFwKLQkkKHRvcF9idWlsZGRpcikvZ3N0L2xpYmdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChTWU1CT0xTX0ZJTEUpCi0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBcCi0JZ3N0YnVmZmVyc3RyYXcuYwkJCVwKLQlnc3RjaGVjay5jCQkJCVwKLQlnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYwkJCVwKLQlnc3RoYXJuZXNzLmMJCQkJXAotCWdzdHRlc3RjbG9jay5jCi0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpIFwKLQktVUdfRElTQUJMRV9BU1NFUlQgXAotCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMgXAotCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrIFwKLQktSSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJjaGVjawotCi1saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9MSUJBREQgPSAkKEdTVF9PQkpfTElCUykgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjaGVja2ludGVybmFsLmxhIFwKLQkkKExJQk0pCi0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xERkxBR1MgPSBcCi0JLWV4cG9ydC1zeW1ib2xzICQoU1lNQk9MU19GSUxFKSAkKEdTVF9BTExfTERGTEFHUykgJChHU1RfTFRfTERGTEFHUykKLQotbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyID0gXAotCSQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AL2dzdC9jaGVjawotCi1saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyA9IFwKLQljaGVjay5oCQkJCQlcCi0JZ3N0YnVmZmVyc3RyYXcuaAkJCVwKLQlnc3RjaGVjay5oCQkJCVwKLQlnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuaAkJCVwKLQlnc3RoYXJuZXNzLmgJCQkJXAotCWdzdHRlc3RjbG9jay5oCi0KLW5vZGlzdF9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyA9IFwKLQlpbnRlcm5hbC1jaGVjay5oCi0KLUNMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdiAkKFNZTUJPTFNfRklMRSkgJChhbV9fYXBwZW5kXzEpCi1TVUJESVJTID0gbGliY2hlY2sKLUxJQkdTVENIRUNLX0VYUE9SVEVEX1ZBUlMgPSBcCi0JX2dzdF9jaGVja190aHJlYWRzX3J1bm5pbmcgXAotCV9nc3RfY2hlY2tfcmFpc2VkX2NyaXRpY2FsIFwKLQlfZ3N0X2NoZWNrX3JhaXNlZF93YXJuaW5nIFwKLQlfZ3N0X2NoZWNrX2V4cGVjdGluZ19sb2cgXAotCWJ1ZmZlcnMgXAotCWNoZWNrX2NvbmQgXAotCWNoZWNrX2RlYnVnIFwKLQljaGVja19tdXRleCBcCi0JbXV0ZXggXAotCXN0YXJ0X2NvbmQgXAotCXN5bmNfY29uZCBcCi0JdGhyZWFkX2xpc3QKLQotTElCR1NUQ0hFQ0tfRVhQT1JURURfRlVOQ1MgPSBcCi0JX2dzdF9jaGVja19ydW5fdGVzdF9mdW5jIFwKLQlnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIgXAotCWdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUgXAotCWdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZSBcCi0JZ3N0X2NoZWNrX2FiaV9saXN0IFwKLQlnc3RfY2hlY2tfY2Fwc19lcXVhbCBcCi0JZ3N0X2NoZWNrX2J1ZmZlcl9kYXRhIFwKLQlnc3RfY2hlY2tfY2hhaW5fZnVuYyBcCi0JZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyBcCi0JZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIgXAotCWdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QgXAotCWdzdF9jaGVja19pbml0IFwKLQlnc3RfY2hlY2tfbWVzc2FnZV9lcnJvciBcCi0JZ3N0X2NoZWNrX3J1bl9zdWl0ZSBcCi0JZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgXAotCWdzdF9jaGVja19zZXR1cF9ldmVudHMgXAotCWdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWQgXAotCWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCBcCi0JZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2Zyb21fdGVtcGxhdGUgXAotCWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lIFwKLQlnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlIFwKLQlnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCBcCi0JZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfZnJvbV90ZW1wbGF0ZSBcCi0JZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSBcCi0JZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlIFwKLQlnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCBcCi0JZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lIFwKLQlnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgXAotCWdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIFwKLQlnc3RfY2hlY2tfb2JqZWN0c19kZXN0cm95ZWRfb25fdW5yZWYgXAotCWdzdF9jaGVja19vYmplY3RfZGVzdHJveWVkX29uX3VucmVmIFwKLQlnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9hZGRfcGFkIFwKLQlnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXcgXAotCWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0IFwKLQlnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlIFwKLQlnc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxsIFwKLQlnc3RfaGFybmVzc19hZGRfZWxlbWVudF9zcmNfcGFkIFwKLQlnc3RfaGFybmVzc19hZGRfcGFyc2UgXAotCWdzdF9oYXJuZXNzX2FkZF9wcm9iZSBcCi0JZ3N0X2hhcm5lc3NfYWRkX3NpbmsgXAotCWdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3MgXAotCWdzdF9oYXJuZXNzX2FkZF9zaW5rX3BhcnNlIFwKLQlnc3RfaGFybmVzc19hZGRfc3JjIFwKLQlnc3RfaGFybmVzc19hZGRfc3JjX2hhcm5lc3MgXAotCWdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2UgXAotCWdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgXAotCWdzdF9oYXJuZXNzX2J1ZmZlcnNfaW5fcXVldWUgXAotCWdzdF9oYXJuZXNzX2NyYW5rX211bHRpcGxlX2Nsb2NrX3dhaXRzIFwKLQlnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCBcCi0JZ3N0X2hhcm5lc3NfY3JlYXRlX2J1ZmZlciBcCi0JZ3N0X2hhcm5lc3NfZHVtcF90b19maWxlIFwKLQlnc3RfaGFybmVzc19ldmVudHNfcmVjZWl2ZWQgXAotCWdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZSBcCi0JZ3N0X2hhcm5lc3NfZmluZF9lbGVtZW50IFwKLQlnc3RfaGFybmVzc19nZXQgXAotCWdzdF9oYXJuZXNzX2dldF9hbGxvY2F0b3IgXAotCWdzdF9oYXJuZXNzX2dldF9sYXN0X3B1c2hlZF90aW1lc3RhbXAgXAotCWdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgXAotCWdzdF9oYXJuZXNzX25ldyBcCi0JZ3N0X2hhcm5lc3NfbmV3X2VtcHR5IFwKLQlnc3RfaGFybmVzc19uZXdfZnVsbCBcCi0JZ3N0X2hhcm5lc3NfbmV3X3BhcnNlIFwKLQlnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50IFwKLQlnc3RfaGFybmVzc19uZXdfd2l0aF9wYWRuYW1lcyBcCi0JZ3N0X2hhcm5lc3NfbmV3X3dpdGhfdGVtcGxhdGVzIFwKLQlnc3RfaGFybmVzc19wbGF5IFwKLQlnc3RfaGFybmVzc19wdWxsIFwKLQlnc3RfaGFybmVzc19wdWxsX2V2ZW50IFwKLQlnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IFwKLQlnc3RfaGFybmVzc19wdXNoIFwKLQlnc3RfaGFybmVzc19wdXNoX2FuZF9wdWxsIFwKLQlnc3RfaGFybmVzc19wdXNoX2V2ZW50IFwKLQlnc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjIFwKLQlnc3RfaGFybmVzc19wdXNoX3RvX3NpbmsgXAotCWdzdF9oYXJuZXNzX3F1ZXJ5X2xhdGVuY3kgXAotCWdzdF9oYXJuZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnQgXAotCWdzdF9oYXJuZXNzX3NldCBcCi0JZ3N0X2hhcm5lc3Nfc2V0X2NhcHMgXAotCWdzdF9oYXJuZXNzX3NldF9jYXBzX3N0ciBcCi0JZ3N0X2hhcm5lc3Nfc2V0X2Ryb3BfYnVmZmVycyBcCi0JZ3N0X2hhcm5lc3Nfc2V0X2Jsb2NraW5nX3B1c2hfbW9kZSBcCi0JZ3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmcgXAotCWdzdF9oYXJuZXNzX3NldF9wcm9wb3NlX2FsbG9jYXRvciBcCi0JZ3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2FwcyBcCi0JZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIFwKLQlnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIFwKLQlnc3RfaGFybmVzc19zZXRfc2lua19jYXBzX3N0ciBcCi0JZ3N0X2hhcm5lc3Nfc2V0X3RpbWUgXAotCWdzdF9oYXJuZXNzX3NldF91cHN0cmVhbV9sYXRlbmN5IFwKLQlnc3RfaGFybmVzc19zaW5rX3B1c2hfbWFueSBcCi0JZ3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnkgXAotCWdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50IFwKLQlnc3RfaGFybmVzc19zdHJlc3NfY3VzdG9tX3N0YXJ0IFwKLQlnc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnRfZnVsbCBcCi0JZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0X2Z1bGwgXAotCWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGwgXAotCWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0X2Z1bGwgXAotCWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnRfZnVsbCBcCi0JZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfc3RhcnRfZnVsbCBcCi0JZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIFwKLQlnc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydF9mdWxsIFwKLQlnc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2Vfc3RhcnRfZnVsbCBcCi0JZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wIFwKLQlnc3RfaGFybmVzc190ZWFyZG93biBcCi0JZ3N0X2hhcm5lc3NfdHJ5X3B1bGwgXAotCWdzdF9oYXJuZXNzX3RyeV9wdWxsX2V2ZW50IFwKLQlnc3RfaGFybmVzc190cnlfcHVsbF91cHN0cmVhbV9ldmVudCBcCi0JZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX3JlY2VpdmVkIFwKLQlnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgXAotCWdzdF9oYXJuZXNzX3VzZV9zeXN0ZW1jbG9jayBcCi0JZ3N0X2hhcm5lc3NfdXNlX3Rlc3RjbG9jayBcCi0JZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMgXAotCWdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSBcCi0JZ3N0X3Rlc3RfY2xvY2tfY3JhbmsgXAotCWdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWUgXAotCWdzdF90ZXN0X2Nsb2NrX2dldF90eXBlIFwKLQlnc3RfdGVzdF9jbG9ja19oYXNfaWQgXAotCWdzdF90ZXN0X2Nsb2NrX2lkX2xpc3RfZ2V0X2xhdGVzdF90aW1lIFwKLQlnc3RfdGVzdF9jbG9ja19uZXcgXAotCWdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgXAotCWdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnQgXAotCWdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkIFwKLQlnc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3QgXAotCWdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCBcCi0JZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgXAotCWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzIFwKLQlnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgXAotCWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX3BlbmRpbmdfaWRfY291bnQKLQotCi0jIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIEdTdHJlYW1lciA8IDEuNQotTElCR1NUQ0hFQ0tfRVhQT1JURURfQ09NUEFUX0ZVTkNTID0gXAotCV9mYWlsX3VubGVzcwotCi1MSUJHU1RDSEVDS19FWFBPUlRFRF9TWU1CT0xTID0gXAotCSQoTElCR1NUQ0hFQ0tfRVhQT1JURURfVkFSUykgXAotCSQoTElCR1NUQ0hFQ0tfRVhQT1JURURfRlVOQ1MpIFwKLQkkKExJQkdTVENIRUNLX0VYUE9SVEVEX0NPTVBBVF9GVU5DUykKLQotCi0jIFBsZWFzZSBkbyBub3QgZXZlbiB0aGluayBhYm91dCBjaGFuZ2luZyB0aGUgYWxwaGFiZXQgYmVsb3cgaW50byBBLVphLXouCi0jIEl0IGlzIHRoZXJlIGZvciBwdXJwb3NlLiAoQnVnICM2MDIwOTMpCi1DSEVDS19TWU1TID0gYCQoU0VEKSAtbiAtZSAncy9eLi4qQ0tfRVhQT1JUWyBdXHsxLFx9XChbXzAtOUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpdXHsxLFx9XCkuLiokJC9cMS9wJyBAdG9wX3NyY2RpckAvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2suaC5pbmAKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBCVUlMVF9HSVJTT1VSQ0VTID0gR3N0Q2hlY2stQEdTVF9BUElfVkVSU0lPTkAuZ2lyCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX2hlYWRlcnMgPSAkKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpKQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9zb3VyY2VzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMpKQotCi0jIElOVFJPU1BFQ1RJT05fR0lSRElSL0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiBhcmVuJ3QgdGhlIHJpZ2h0IHBsYWNlIHRvCi0jIGluc3RhbGwgYW55dGhpbmcgLSB3ZSBuZWVkIHRvIGluc3RhbGwgaW5zaWRlIG91ciBwcmVmaXguCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyZGlyID0gJChkYXRhZGlyKS9naXItMS4wCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAdHlwZWxpYnNkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMC8KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic19EQVRBID0gJChCVUlMVF9HSVJTT1VSQ0VTOi5naXI9LnR5cGVsaWIpCi1hbGw6IGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvY2hlY2svTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvY2hlY2svTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci1pbnRlcm5hbC1jaGVjay5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHRvcF9zcmNkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotCi1pbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobGliZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJkaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQobGliZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQobGliZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1saWJMVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKGxpYmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tbGliTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQobGliX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChsaWJfTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGE6ICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUykgJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVyc3RyYXcuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjaGVjay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGhhcm5lc3MuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0ZXN0Y2xvY2suUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcnN0cmF3LmxvOiBnc3RidWZmZXJzdHJhdy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcnN0cmF3LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJzdHJhdy5UcG8gLWMgLW8gbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVyc3RyYXcubG8gYHRlc3QgLWYgJ2dzdGJ1ZmZlcnN0cmF3LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGJ1ZmZlcnN0cmF3LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcnN0cmF3LlRwbyAkKERFUERJUikvbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YnVmZmVyc3RyYXcuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YnVmZmVyc3RyYXcuYycgb2JqZWN0PSdsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RidWZmZXJzdHJhdy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGJ1ZmZlcnN0cmF3LmxvIGB0ZXN0IC1mICdnc3RidWZmZXJzdHJhdy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RidWZmZXJzdHJhdy5jCi0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNoZWNrLmxvOiBnc3RjaGVjay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNoZWNrLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjaGVjay5UcG8gLWMgLW8gbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2hlY2subG8gYHRlc3QgLWYgJ2dzdGNoZWNrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNoZWNrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNoZWNrLlRwbyAkKERFUERJUikvbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y2hlY2suUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Y2hlY2suYycgb2JqZWN0PSdsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RjaGVjay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNoZWNrLmxvIGB0ZXN0IC1mICdnc3RjaGVjay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjaGVjay5jCi0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5sbzogZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuVHBvIC1jIC1vIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGNvbnNpc3RlbmN5Y2hlY2tlci5sbyBgdGVzdCAtZiAnZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNvbnNpc3RlbmN5Y2hlY2tlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuVHBvICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmMnIG9iamVjdD0nbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmxvIGB0ZXN0IC1mICdnc3Rjb25zaXN0ZW5jeWNoZWNrZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmMKLQotbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aGFybmVzcy5sbzogZ3N0aGFybmVzcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGhhcm5lc3MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGhhcm5lc3MuVHBvIC1jIC1vIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGhhcm5lc3MubG8gYHRlc3QgLWYgJ2dzdGhhcm5lc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aGFybmVzcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RoYXJuZXNzLlRwbyAkKERFUERJUikvbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aGFybmVzcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RoYXJuZXNzLmMnIG9iamVjdD0nbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aGFybmVzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGhhcm5lc3MubG8gYHRlc3QgLWYgJ2dzdGhhcm5lc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aGFybmVzcy5jCi0KLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRlc3RjbG9jay5sbzogZ3N0dGVzdGNsb2NrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGVzdGNsb2NrLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0ZXN0Y2xvY2suVHBvIC1jIC1vIGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRlc3RjbG9jay5sbyBgdGVzdCAtZiAnZ3N0dGVzdGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRlc3RjbG9jay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0ZXN0Y2xvY2suVHBvICQoREVQRElSKS9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0ZXN0Y2xvY2suUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dGVzdGNsb2NrLmMnIG9iamVjdD0nbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGVzdGNsb2NrLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGVzdGNsb2NrLmxvIGB0ZXN0IC1mICdnc3R0ZXN0Y2xvY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGVzdGNsb2NrLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLWluc3RhbGwtZ2lyREFUQTogJChnaXJfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChnaXJfREFUQSknOyB0ZXN0IC1uICIkKGdpcmRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoZ2lyZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChnaXJkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGdpcmRpciknIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGdpcmRpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtZ2lyREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQoZ2lyZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLWluc3RhbGwtdHlwZWxpYnNEQVRBOiAkKHR5cGVsaWJzX0RBVEEpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQodHlwZWxpYnNfREFUQSknOyB0ZXN0IC1uICIkKHR5cGVsaWJzZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJCh0eXBlbGlic2RpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSciOyBcCi0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiB8fCBleGl0ICQkPzsgXAotCWRvbmUKLQotdW5pbnN0YWxsLXR5cGVsaWJzREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHR5cGVsaWJzX0RBVEEpJzsgdGVzdCAtbiAiJCh0eXBlbGlic2RpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKLQlkaXI9JyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLWluc3RhbGwtbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUzogJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSciOyBcCi0JICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBleGl0ICQkPzsgXAotCWRvbmUKLQotdW5pbnN0YWxsLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKLQlkaXI9JyQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCi1pbnN0YWxsLW5vZGlzdF9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTOiAkKG5vZGlzdF9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSIgfHwgZXhpdCAxOyBcCi0JZmk7IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBlY2hvICIkJGQkJHAiOyBcCi0JZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCi0Jd2hpbGUgcmVhZCBmaWxlczsgZG8gXAotCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciknIjsgXAotCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1ub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKG5vZGlzdF9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKLQlkaXI9JyQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6Ci0JQGZhaWw9OyBcCi0JaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKLQkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAotCWVsc2UgXAotCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZpOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtcmVjdXJzaXZlCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtcmVjdXJzaXZlCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCi0JICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCi0JICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKLQkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCi0JCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKLQkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAotCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKERBVEEpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKLWluc3RhbGxkaXJzLWFtOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiAiJChERVNURElSKSQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlZGlyKSIgIiQoREVTVERJUikkKGxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZWRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCi11bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1naXJEQVRBIFwKLQlpbnN0YWxsLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlMgXAotCWluc3RhbGwtbm9kaXN0X2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlMgXAotCWluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1saWJMVExJQlJBUklFUwotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLXJlY3Vyc2l2ZQotCi1wZGYtYW06Ci0KLXBzOiBwcy1yZWN1cnNpdmUKLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWdpckRBVEEgdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKLQl1bmluc3RhbGwtbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUyBcCi0JdW5pbnN0YWxsLW5vZGlzdF9saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLS5NQUtFOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBcCi0JY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBcCi0JY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIGN0YWdzLWFtIGRpc3RjbGVhbiBcCi0JZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWdpckRBVEEgXAotCWluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCi0JaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCi0JaW5zdGFsbC1saWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVIRUFERVJTIFwKLQlpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1ub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUyBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGwtdHlwZWxpYnNEQVRBIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWdpckRBVEEgXAotCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCi0JdW5pbnN0YWxsLWxpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AaW5jbHVkZUhFQURFUlMgXAotCXVuaW5zdGFsbC1ub2Rpc3RfbGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBpbmNsdWRlSEVBREVSUyBcCi0JdW5pbnN0YWxsLXR5cGVsaWJzREFUQQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotJS5jLmdjb3Y6IC5saWJzL2xpYmdzdGNoZWNrX0BHU1RfQVBJX1ZFUlNJT05AX2xhLSUuZ2NkYSAlLmMKLQkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0Ci0KLWdjb3Y6ICQobGliZ3N0Y2hlY2tfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUzo9Lmdjb3YpCi1wcmludC1jaGVjay1zeW1ib2xzOgotCUBmb3IgcyBpbiAkKENIRUNLX1NZTVMpOyBkbyBcCi0JICBlY2hvICQkczsgXAotCWRvbmU7Ci0KLSQoU1lNQk9MU19GSUxFKTogJChsaWJnc3RjaGVja19AR1NUX0FQSV9WRVJTSU9OQGluY2x1ZGVfSEVBREVSUykgaW50ZXJuYWwtY2hlY2suaAotCSQoQU1fVl9HRU4pcm0gLWYgJChTWU1CT0xTX0ZJTEUpIDI+L2Rldi9udWxsOyBcCi0JZm9yIHMgaW4gJChMSUJHU1RDSEVDS19FWFBPUlRFRF9TWU1CT0xTKSAkKENIRUNLX1NZTVMpOyBkbyBcCi0JICBlY2hvICQkcyA+PiAkKFNZTUJPTFNfRklMRSk7IFwKLQlkb25lCi0KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBHc3RDaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKVBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPXllc1wKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSIiIEdTVF9QTFVHSU5fUEFUSF8xXzA9IiIgR1NUX1JFR0lTVFJZX1VQREFURT1ubyBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQlDUFBGTEFHUz0iJChDUFBGTEFHUykiIENGTEFHUz0iJChDRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBDQz0iJChDQykiIFBLR19DT05GSUc9IiQoUEtHX0NPTkZJRykiIERMTFRPT0w9IiQoRExMVE9PTCkiIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSAtdiAtLW5hbWVzcGFjZSBHc3RDaGVjayBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW5zdmVyc2lvbj1AR1NUX0FQSV9WRVJTSU9OQCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWlkZW50aWZpZXItcHJlZml4PUdzdCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXN5bWJvbC1wcmVmaXg9Z3N0IFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0td2Fybi1hbGwgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9zcmNkaXIpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3Bfc3JjZGlyKS9saWJzIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3BfYnVpbGRkaXIpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1jLWluY2x1ZGUgImdzdC9jaGVjay9jaGVjay5oIiBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnJhcnktcGF0aD0kKHRvcF9idWlsZGRpcikvZ3N0IFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlicmFyeT1saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlidG9vbD0iJHtMSUJUT09MfSIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItY2hlY2stQEdTVF9BUElfVkVSU0lPTkAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1hZGQtaW5pdC1zZWN0aW9uPSIkKElOVFJPU1BFQ1RJT05fSU5JVCkiIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tb3V0cHV0ICRAIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoZ2lyX2hlYWRlcnMpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoZ2lyX3NvdXJjZXMpCi0KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAlLnR5cGVsaWI6ICUuZ2lyICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikvZ3N0ICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9jaGVjay5oIGIvbGlicy9nc3QvY2hlY2svY2hlY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY1ODE2NC4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9jaGVjay5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR1N0cmVhbWVyIGRldmVsb3BlcnMKLSAqCi0gKiBjaGVjay5oOiBzaW5nbGUgaW5jbHVkZSBoZWFkZXIgZm9yIGdzdC1jaGVjayBsaWJyYXJ5Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9DSEVDS19fSF9fCi0jZGVmaW5lIF9fR1NUX0NIRUNLX19IX18KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0aGFybmVzcy5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3R0ZXN0Y2xvY2suaD4KLQotI2VuZGlmIC8qIF9fR1NUX0NIRUNLX19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmMgYi9saWJzL2dzdC9jaGVjay9nc3RidWZmZXJzdHJhdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTQ0MDkwLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0aW5nIGhlbHBlciBsaWIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW5keSBXaW5nbyA8d2luZ28gYXQgcG9ib3guY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RjaGVja2J1ZmZlcnN0cmF3Ci0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEJ1ZmZlciBpbnRlcmNlcHRpb24gY29kZSBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHMKLSAqCi0gKiBUaGVzZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBhcmUgZm9yIGludGVybmFsIHVzZSBvZiB0aGUgdW5pdCB0ZXN0cyBmb3VuZAotICogaW5zaWRlIHRoZSAnY2hlY2snIGRpcmVjdG9yaWVzIG9mIHZhcmlvdXMgR1N0cmVhbWVyIHBhY2thZ2VzLgotICovCi0KLSNpbmNsdWRlICJnc3RidWZmZXJzdHJhdy5oIgotCi1zdGF0aWMgR0NvbmQgY29uZDsKLXN0YXRpYyBHTXV0ZXggbG9jazsKLXN0YXRpYyBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci1zdGF0aWMgZ3Vsb25nIGlkOwotCi0vKiBjYWxsZWQgZm9yIGV2ZXJ5IGJ1ZmZlci4gIFdhaXRzIHVudGlsIHRoZSBnbG9iYWwgImJ1ZiIgdmFyaWFibGUgaXMgdW5zZXQsCi0gKiB0aGVuIHNldHMgaXQgdG8gdGhlIGJ1ZmZlciByZWNlaXZlZCwgYW5kIHNpZ25hbHMuICovCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWJ1ZmZlcl9wcm9iZSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1bnVzZWQpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUiAoaW5mbyk7Ci0KLSAgZ19tdXRleF9sb2NrICgmbG9jayk7Ci0KLSAgd2hpbGUgKGJ1ZiAhPSBOVUxMKQotICAgIGdfY29uZF93YWl0ICgmY29uZCwgJmxvY2spOwotCi0gIC8qIGluY3JlYXNlIHRoZSByZWZjb3VudCBiZWNhdXNlIHdlIHN0b3JlIGl0IGdsb2JhbGx5IGZvciBvdGhlcnMgdG8gdXNlICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotCi0gIGdfY29uZF9zaWduYWwgKCZjb25kKTsKLQotICBnX211dGV4X3VubG9jayAoJmxvY2spOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmU6Ci0gKiBAYmluOiB0aGUgcGlwZWxpbmUgdG8gcnVuCi0gKiBAcGFkOiBhIHBhZCBvbiBhbiBlbGVtZW50IGluIEBiaW4KLSAqCi0gKiBTZXRzIHVwIGEgcGlwZWxpbmUgZm9yIGJ1ZmZlciBzdWNraW5nLiBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNhbGwKLSAqIGdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlcigpIHRvIGFjY2VzcyBidWZmZXJzIGFzIHRoZXkgcGFzcyBvdmVyIEBwYWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseSB1c2VkIGluIHVuaXQgdGVzdHMgdGhhdCB3YW50IHRvIHZlcmlmeSB0aGF0IGEKLSAqIHBhcnRpY3VsYXIgZWxlbWVudCBpcyBvdXRwdXR0aW5nIGNvcnJlY3QgYnVmZmVycy4gRm9yIGV4YW1wbGUsIHlvdSB3b3VsZCBtYWtlCi0gKiBhIHBpcGVsaW5lIHZpYSBnc3RfcGFyc2VfbGF1bmNoKCksIHB1bGwgb3V0IHRoZSBwYWQgeW91IHdhbnQgdG8gbW9uaXRvciwgdGhlbgotICogY2FsbCBnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIoKSB0byBnZXQgdGhlIGJ1ZmZlcnMgdGhhdCBwYXNzIHRocm91Z2ggQHBhZC4KLSAqIFRoZSBwaXBlbGluZSB3aWxsIGJsb2NrIHVudGlsIHlvdSBoYXZlIHN1Y2tlZCBvZmYgdGhlIGJ1ZmZlcnMuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgc3RhdGUgb2YgQGJpbiB0byBQTEFZSU5HOyB0byBjbGVhbiB1cCwgYmUgc3VyZSB0bwotICogY2FsbCBnc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmUoKS4KLSAqCi0gKiBOb3RlIHRoYXQgeW91IG1heSBub3Qgc3RhcnQgdHdvIGJ1ZmZlciBzdHJhd3MgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBmdW5jdGlvbgotICogaXMgaW50ZW5kZWQgZm9yIHVuaXQgdGVzdHMsIG5vdCBnZW5lcmFsIEFQSSB1c2UuIEluIGZhY3QgaXQgY2FsbHMgZmFpbF9pZgotICogZnJvbSBsaWJjaGVjaywgc28geW91IGNhbm5vdCB1c2UgaXQgb3V0c2lkZSB1bml0IHRlc3RzLgotICovCi12b2lkCi1nc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lIChHc3RFbGVtZW50ICogYmluLCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsCi0gICAgICBidWZmZXJfcHJvYmUsIE5VTEwsIE5VTEwpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsICJDb3VsZCBub3Qgc3RhcnQgdGVzdCBwaXBlbGluZSIpOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpIHsKLSAgICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKGJpbiwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gICAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIkNvdWxkIG5vdCBzdGFydCB0ZXN0IHBpcGVsaW5lIik7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXI6Ci0gKiBAYmluOiB0aGUgcGlwZWxpbmUgcHJldmlvdXNseSBzdGFydGVkIHZpYSBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkKLSAqIEBwYWQ6IHRoZSBwYWQgcHJldmlvdXNseSBwYXNzZWQgdG8gZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpCi0gKgotICogR2V0IG9uZSBidWZmZXIgZnJvbSBAcGFkLiBJbXBsZW1lbnRlZCB2aWEgYnVmZmVyIHByb2Jlcy4gVGhpcyBmdW5jdGlvbiB3aWxsCi0gKiBibG9jayB1bnRpbCB0aGUgcGlwZWxpbmUgcGFzc2VzIGEgYnVmZmVyIG92ZXIgQHBhZCwgc28gZm9yIHJvYnVzdCBiZWhhdmlvcgotICogaW4gdW5pdCB0ZXN0cywgeW91IG5lZWQgdG8gdXNlIGNoZWNrJ3MgdGltZW91dCB0byBmYWlsIG91dCBpbiB0aGUgY2FzZSB0aGF0IGEKLSAqIGJ1ZmZlciBuZXZlciBhcnJpdmVzLgotICoKLSAqIFlvdSBtdXN0IGhhdmUgcHJldmlvdXNseSBjYWxsZWQgZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSgpIG9uCi0gKiBAcGlwZWxpbmUgYW5kIEBwYWQuCi0gKgotICogUmV0dXJuczogdGhlIGNhcHR1cmVkICNHc3RCdWZmZXIuCi0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfYnVmZmVyX3N0cmF3X2dldF9idWZmZXIgKEdzdEVsZW1lbnQgKiBiaW4sIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0QnVmZmVyICpyZXQ7Ci0KLSAgZ19tdXRleF9sb2NrICgmbG9jayk7Ci0KLSAgd2hpbGUgKGJ1ZiA9PSBOVUxMKQotICAgIGdfY29uZF93YWl0ICgmY29uZCwgJmxvY2spOwotCi0gIHJldCA9IGJ1ZjsKLSAgYnVmID0gTlVMTDsKLQotICBnX2NvbmRfc2lnbmFsICgmY29uZCk7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZsb2NrKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfc3RyYXdfc3RvcF9waXBlbGluZToKLSAqIEBiaW46IHRoZSBwaXBlbGluZSBwcmV2aW91c2x5IHN0YXJ0ZWQgdmlhIGdzdF9idWZmZXJfc3RyYXdfc3RhcnRfcGlwZWxpbmUoKQotICogQHBhZDogdGhlIHBhZCBwcmV2aW91c2x5IHBhc3NlZCB0byBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkKLSAqCi0gKiBTZXQgQGJpbiB0byAjR1NUX1NUQVRFX05VTEwgYW5kIHJlbGVhc2UgcmVzb3VyY2UgYWxsb2NhdGVkIGluCi0gKiBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkuCi0gKgotICogWW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IGNhbGxlZCBnc3RfYnVmZmVyX3N0cmF3X3N0YXJ0X3BpcGVsaW5lKCkgb24KLSAqIEBwaXBlbGluZSBhbmQgQHBhZC4KLSAqLwotdm9pZAotZ3N0X2J1ZmZlcl9zdHJhd19zdG9wX3BpcGVsaW5lIChHc3RFbGVtZW50ICogYmluLCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBnX211dGV4X2xvY2sgKCZsb2NrKTsKLSAgaWYgKGJ1ZikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBidWYgPSBOVUxMOwotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCAoZ3VpbnQpIGlkKTsKLSAgaWQgPSAwOwotICBnX2NvbmRfc2lnbmFsICgmY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbG9jayk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF9pZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgIkNvdWxkIG5vdCBzdG9wIHRlc3QgcGlwZWxpbmUiKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7Ci0gICAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChiaW4sIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgIGZhaWxfaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJDb3VsZCBub3Qgc3RvcCB0ZXN0IHBpcGVsaW5lIik7Ci0gIH0KLQotICBnX211dGV4X2xvY2sgKCZsb2NrKTsKLSAgaWYgKGJ1ZikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBidWYgPSBOVUxMOwotICBnX211dGV4X3VubG9jayAoJmxvY2spOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuaCBiL2xpYnMvZ3N0L2NoZWNrL2dzdGJ1ZmZlcnN0cmF3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0Y2NjN2YuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svZ3N0YnVmZmVyc3RyYXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBbmR5IFdpbmdvIDx3aW5nbyBhdCBwb2JveC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9CVUZGRVJfU1RSQVdfSF9fCi0jZGVmaW5lIF9fR1NUX0JVRkZFUl9TVFJBV19IX18KLQotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdm9pZCAgICAgICAgZ3N0X2J1ZmZlcl9zdHJhd19zdGFydF9waXBlbGluZSAoR3N0RWxlbWVudCAqIGJpbiwgR3N0UGFkICogcGFkKTsKLUdzdEJ1ZmZlciAqIGdzdF9idWZmZXJfc3RyYXdfZ2V0X2J1ZmZlciAgICAgKEdzdEVsZW1lbnQgKiBiaW4sIEdzdFBhZCAqIHBhZCk7Ci12b2lkICAgICAgICBnc3RfYnVmZmVyX3N0cmF3X3N0b3BfcGlwZWxpbmUgIChHc3RFbGVtZW50ICogYmluLCBHc3RQYWQgKiBwYWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQlVGRkVSX1NUUkFXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYyBiL2xpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwOWUyOWMuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svZ3N0Y2hlY2suYworKysgL2Rldi9udWxsCkBAIC0xLDEwNDAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29tbW9uIGNvZGUgZm9yIEdTdHJlYW1lciB1bml0dGVzdHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmdzdGNoZWNrCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IENvbW1vbiBjb2RlIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0cwotICoKLSAqIFRoZXNlIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9mIHRoZSB1bml0IHRlc3RzIGZvdW5kCi0gKiBpbnNpZGUgdGhlICdjaGVjaycgZGlyZWN0b3JpZXMgb2YgdmFyaW91cyBHU3RyZWFtZXIgcGFja2FnZXMuCi0gKgotICogT25lIG5vdGFibGUgZmVhdHVyZSBpcyB0aGF0IG9uZSBjYW4gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgR1NUX0NIRUNLUwotICogYW5kIEdTVF9DSEVDS1NfSUdOT1JFIHRvIHNlbGVjdCB3aGljaCB0ZXN0cyB0byBydW4gb3Igc2tpcC4gQm90aCB2YXJpYWJsZXMKLSAqIGNhbiBjb250YWluIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdGVzdCBuYW1lIGdsb2JzIChlLmcuIHRlc3RfKikuCi0gKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGNoZWNrLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWSAoY2hlY2tfZGVidWcpOwotCi0vKiBsb2dnaW5nIGZ1bmN0aW9uIGZvciB0ZXN0cwotICogYSB0ZXN0IHVzZXMgZ19tZXNzYWdlKCkgdG8gbG9nIGEgZGVidWcgbGluZQotICogYSBnc3QgdW5pdCB0ZXN0IGNhbiBiZSBydW4gd2l0aCBHU1RfVEVTVF9ERUJVRyBlbnYgdmFyIHNldCB0byBzZWUgdGhlCi0gKiBtZXNzYWdlcwotICovCi0KLWdib29sZWFuIF9nc3RfY2hlY2tfdGhyZWFkc19ydW5uaW5nID0gRkFMU0U7Ci1HTGlzdCAqdGhyZWFkX2xpc3QgPSBOVUxMOwotR011dGV4IG11dGV4OwotR0NvbmQgc3RhcnRfY29uZDsgICAgICAgICAgICAgICAvKiB1c2VkIHRvIG5vdGlmeSBtYWluIHRocmVhZCBvZiB0aHJlYWQgc3RhcnR1cHMgKi8KLUdDb25kIHN5bmNfY29uZDsgICAgICAgICAgICAgICAgLyogdXNlZCB0byBzeW5jaHJvbml6ZSBhbGwgdGhyZWFkcyBhbmQgbWFpbiB0aHJlYWQgKi8KLQotR0xpc3QgKmJ1ZmZlcnMgPSBOVUxMOwotR011dGV4IGNoZWNrX211dGV4OwotR0NvbmQgY2hlY2tfY29uZDsKLQotLyogRklYTUUgMi4wOiBzaG91bGRuJ3QgX2dzdF9jaGVja19kZWJ1ZyBiZSBzdGF0aWM/IE5vdCB1c2VkIGFueXdoZXJlICovCi1nYm9vbGVhbiBfZ3N0X2NoZWNrX2RlYnVnID0gRkFMU0U7Ci1nYm9vbGVhbiBfZ3N0X2NoZWNrX3JhaXNlZF9jcml0aWNhbCA9IEZBTFNFOwotZ2Jvb2xlYW4gX2dzdF9jaGVja19yYWlzZWRfd2FybmluZyA9IEZBTFNFOwotZ2Jvb2xlYW4gX2dzdF9jaGVja19leHBlY3RpbmdfbG9nID0gRkFMU0U7Ci0KLXN0YXRpYyB2b2lkIGdzdF9jaGVja19sb2dfbWVzc2FnZV9mdW5jCi0gICAgKGNvbnN0IGdjaGFyICogbG9nX2RvbWFpbiwgR0xvZ0xldmVsRmxhZ3MgbG9nX2xldmVsLAotICAgIGNvbnN0IGdjaGFyICogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZiAoX2dzdF9jaGVja19kZWJ1ZykgewotICAgIGdfcHJpbnQgKCIlc1xuIiwgbWVzc2FnZSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgZ3N0X2NoZWNrX2xvZ19jcml0aWNhbF9mdW5jCi0gICAgKGNvbnN0IGdjaGFyICogbG9nX2RvbWFpbiwgR0xvZ0xldmVsRmxhZ3MgbG9nX2xldmVsLAotICAgIGNvbnN0IGdjaGFyICogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZiAoIV9nc3RfY2hlY2tfZXhwZWN0aW5nX2xvZykgewotICAgIGdfcHJpbnQgKCJcblxuVW5leHBlY3RlZCBjcml0aWNhbC93YXJuaW5nOiAlc1xuIiwgbWVzc2FnZSk7Ci0gICAgZmFpbCAoIlVuZXhwZWN0ZWQgY3JpdGljYWwvd2FybmluZzogJXMiLCBtZXNzYWdlKTsKLSAgfQotCi0gIGlmIChfZ3N0X2NoZWNrX2RlYnVnKSB7Ci0gICAgZ19wcmludCAoIlxuRXhwZWN0ZWQgY3JpdGljYWwvd2FybmluZzogJXNcbiIsIG1lc3NhZ2UpOwotICB9Ci0KLSAgaWYgKGxvZ19sZXZlbCAmIEdfTE9HX0xFVkVMX0NSSVRJQ0FMKQotICAgIF9nc3RfY2hlY2tfcmFpc2VkX2NyaXRpY2FsID0gVFJVRTsKLSAgaWYgKGxvZ19sZXZlbCAmIEdfTE9HX0xFVkVMX1dBUk5JTkcpCi0gICAgX2dzdF9jaGVja19yYWlzZWRfd2FybmluZyA9IFRSVUU7Ci19Ci0KLXN0YXRpYyBnaW50Ci1zb3J0X3BsdWdpbnMgKEdzdFBsdWdpbiAqIGEsIEdzdFBsdWdpbiAqIGIpCi17Ci0gIGludCByZXQ7Ci0KLSAgcmV0ID0gc3RyY21wIChnc3RfcGx1Z2luX2dldF9zb3VyY2UgKGEpLCBnc3RfcGx1Z2luX2dldF9zb3VyY2UgKGIpKTsKLSAgaWYgKHJldCA9PSAwKQotICAgIHJldCA9IHN0cmNtcCAoZ3N0X3BsdWdpbl9nZXRfbmFtZSAoYSksIGdzdF9wbHVnaW5fZ2V0X25hbWUgKGIpKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X3BsdWdpbnMgKHZvaWQpCi17Ci0gIEdMaXN0ICpwbHVnaW5zLCAqbDsKLQotICBwbHVnaW5zID0gZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSk7Ci0gIHBsdWdpbnMgPSBnX2xpc3Rfc29ydCAocGx1Z2lucywgKEdDb21wYXJlRnVuYykgc29ydF9wbHVnaW5zKTsKLSAgZm9yIChsID0gcGx1Z2luczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdFBsdWdpbiAqcGx1Z2luID0gR1NUX1BMVUdJTiAobC0+ZGF0YSk7Ci0KLSAgICBpZiAoc3RyY21wIChnc3RfcGx1Z2luX2dldF9zb3VyY2UgKHBsdWdpbiksICJCTEFDS0xJU1QiKSAhPSAwKSB7Ci0gICAgICBHU1RfTE9HICgiJTIwc0AlcyIsIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbiksCi0gICAgICAgICAgR1NUX1NUUl9OVUxMIChnc3RfcGx1Z2luX2dldF9maWxlbmFtZSAocGx1Z2luKSkpOwotICAgIH0KLSAgfQotICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAocGx1Z2lucyk7Ci19Ci0KLS8qIGluaXRpYWxpemUgR1N0cmVhbWVyIHRlc3RpbmcgKi8KLXZvaWQKLWdzdF9jaGVja19pbml0IChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2W10pCi17Ci0gIGd1aW50IHRpbWVvdXRfbXVsdGlwbGllciA9IDE7Ci0KLSAgZ3N0X2luaXQgKGFyZ2MsIGFyZ3YpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChjaGVja19kZWJ1ZywgImNoZWNrIiwgMCwgImNoZWNrIHJlZ3Jlc3Npb24gdGVzdHMiKTsKLQotICBpZiAoYXRleGl0IChnc3RfZGVpbml0KSAhPSAwKSB7Ci0gICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHNldCBnc3RfZGVpbml0IGFzIGV4aXQgZnVuY3Rpb24iKTsKLSAgfQotCi0gIGlmIChnX2dldGVudiAoIkdTVF9URVNUX0RFQlVHIikpCi0gICAgX2dzdF9jaGVja19kZWJ1ZyA9IFRSVUU7Ci0KLSAgZ19sb2dfc2V0X2hhbmRsZXIgKE5VTEwsIEdfTE9HX0xFVkVMX01FU1NBR0UsIGdzdF9jaGVja19sb2dfbWVzc2FnZV9mdW5jLAotICAgICAgTlVMTCk7Ci0gIGdfbG9nX3NldF9oYW5kbGVyIChOVUxMLCBHX0xPR19MRVZFTF9DUklUSUNBTCB8IEdfTE9HX0xFVkVMX1dBUk5JTkcsCi0gICAgICBnc3RfY2hlY2tfbG9nX2NyaXRpY2FsX2Z1bmMsIE5VTEwpOwotICBnX2xvZ19zZXRfaGFuZGxlciAoIkdTdHJlYW1lciIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMIHwgR19MT0dfTEVWRUxfV0FSTklORywKLSAgICAgIGdzdF9jaGVja19sb2dfY3JpdGljYWxfZnVuYywgTlVMTCk7Ci0gIGdfbG9nX3NldF9oYW5kbGVyICgiR0xpYi1HT2JqZWN0IiwgR19MT0dfTEVWRUxfQ1JJVElDQUwgfCBHX0xPR19MRVZFTF9XQVJOSU5HLAotICAgICAgZ3N0X2NoZWNrX2xvZ19jcml0aWNhbF9mdW5jLCBOVUxMKTsKLSAgZ19sb2dfc2V0X2hhbmRsZXIgKCJHTGliLUdJTyIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMIHwgR19MT0dfTEVWRUxfV0FSTklORywKLSAgICAgIGdzdF9jaGVja19sb2dfY3JpdGljYWxfZnVuYywgTlVMTCk7Ci0gIGdfbG9nX3NldF9oYW5kbGVyICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMIHwgR19MT0dfTEVWRUxfV0FSTklORywKLSAgICAgIGdzdF9jaGVja19sb2dfY3JpdGljYWxfZnVuYywgTlVMTCk7Ci0KLSAgcHJpbnRfcGx1Z2lucyAoKTsKLQotI2lmZGVmIFRBUkdFVF9DUFUKLSAgR1NUX0lORk8gKCJ0YXJnZXQgQ1BVOiAlcyIsIFRBUkdFVF9DUFUpOwotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX0NQVV9BUk0KLSAgdGltZW91dF9tdWx0aXBsaWVyID0gMTA7Ci0jZW5kaWYKLQotICBpZiAodGltZW91dF9tdWx0aXBsaWVyID4gMSkgewotICAgIGNvbnN0IGdjaGFyICp0bXVsdCA9IGdfZ2V0ZW52ICgiQ0tfVElNRU9VVF9NVUxUSVBMSUVSIik7Ci0KLSAgICBpZiAodG11bHQgPT0gTlVMTCkgewotICAgICAgZ2NoYXIgbnVtX3N0clszMl07Ci0KLSAgICAgIGdfc25wcmludGYgKG51bV9zdHIsIHNpemVvZiAobnVtX3N0ciksICIlZCIsIHRpbWVvdXRfbXVsdGlwbGllcik7Ci0gICAgICBHU1RfSU5GTyAoInNsb3cgQ1BVLCBzZXR0aW5nIENLX1RJTUVPVVRfTVVMVElQTElFUiB0byAlcyIsIG51bV9zdHIpOwotICAgICAgZ19zZXRlbnYgKCJDS19USU1FT1VUX01VTFRJUExJRVIiLCBudW1fc3RyLCBUUlVFKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0lORk8gKCJDS19USU1FT1VUX01VTFRJUExJRVIgYWxyZWFkeSBzZXQgdG8gJyVzJyIsIHRtdWx0KTsKLSAgICB9Ci0gIH0KLX0KLQotLyogbWVzc2FnZSBjaGVja2luZyAqLwotdm9pZAotZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3IgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RNZXNzYWdlVHlwZSB0eXBlLAotICAgIEdRdWFyayBkb21haW4sIGdpbnQgY29kZSkKLXsKLSAgR0Vycm9yICplcnJvcjsKLSAgZ2NoYXIgKmRlYnVnOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSB0eXBlLAotICAgICAgIm1lc3NhZ2UgaXMgb2YgdHlwZSAlcyBpbnN0ZWFkIG9mIGV4cGVjdGVkIHR5cGUgJXMiLAotICAgICAgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpLAotICAgICAgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAodHlwZSkpOwotICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmVycm9yLCAmZGVidWcpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChlcnJvci0+ZG9tYWluLCBkb21haW4pOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChlcnJvci0+Y29kZSwgY29kZSk7Ci0gIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICBnX2ZyZWUgKGRlYnVnKTsKLX0KLQotLyogaGVscGVyIGZ1bmN0aW9ucyAqLwotR3N0Rmxvd1JldHVybgotZ3N0X2NoZWNrX2NoYWluX2Z1bmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImNoYWluX2Z1bmM6IHJlY2VpdmVkIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7Ci0gIGJ1ZmZlcnMgPSBnX2xpc3RfYXBwZW5kIChidWZmZXJzLCBidWZmZXIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmNoZWNrX211dGV4KTsKLSAgZ19jb25kX3NpZ25hbCAoJmNoZWNrX2NvbmQpOwotICBnX211dGV4X3VubG9jayAoJmNoZWNrX211dGV4KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLS8qKgotICogZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQ6Ci0gKiBAZmFjdG9yeTogZmFjdG9yeQotICoKLSAqIHNldHVwIGFuIGVsZW1lbnQgZm9yIGEgZmlsdGVyIHRlc3Qgd2l0aCBteXNyY3BhZCBhbmQgbXlzaW5rcGFkCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBlbGVtZW50Ci0gKi8KLUdzdEVsZW1lbnQgKgotZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKGNvbnN0IGdjaGFyICogZmFjdG9yeSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9lbGVtZW50Iik7Ci0KLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZmFjdG9yeSwgZmFjdG9yeSk7Ci0gIGZhaWxfaWYgKGVsZW1lbnQgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYSAnJXMnIGVsZW1lbnQiLCBmYWN0b3J5KTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZWxlbWVudCwgZmFjdG9yeSwgMSk7Ci0gIHJldHVybiBlbGVtZW50OwotfQotCi12b2lkCi1nc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdTVF9ERUJVRyAoInRlYXJkb3duX2VsZW1lbnQiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfTlVMTCkgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChlbGVtZW50LCAiZWxlbWVudCIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKLX0KLQotLyoqCi0gKiBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZDoKLSAqIEBlbGVtZW50OiBlbGVtZW50IHRvIHNldHVwIHBhZCBvbgotICogQHRtcGw6IHBhZCB0ZW1wbGF0ZQotICoKLSAqIERvZXMgdGhlIHNhbWUgYXMgI2dzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgd2l0aCB0aGUgPGVtcGhhc2lzPiBuYW1lIDwvZW1waGFzaXM+IHBhcmFtZXRlciBlcXVhbCB0byAic2luayIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIG5ldyBwYWQgdGhhdCBjYW4gYmUgdXNlZCB0byBpbmplY3QgZGF0YSBvbiBAZWxlbWVudAotICovCi1Hc3RQYWQgKgotZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRtcGwpCi17Ci0gIHJldHVybiBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lIChlbGVtZW50LCB0bXBsLCAic2luayIpOwotfQotCi0vKioKLSAqIGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWU6Ci0gKiBAZWxlbWVudDogZWxlbWVudCB0byBzZXR1cCBzcmMgcGFkIG9uCi0gKiBAdG1wbDogcGFkIHRlbXBsYXRlCi0gKiBAbmFtZTogTmFtZSBvZiB0aGUgQGVsZW1lbnQgc2luayBwYWQgdGhhdCB3aWxsIGJlIGxpbmtlZCB0byB0aGUgc3JjIHBhZCB0aGF0IHdpbGwgYmUgc2V0dXAKLSAqCi0gKiBDcmVhdGVzIGEgbmV3IHNyYyBwYWQgKGJhc2VkIG9uIHRoZSBnaXZlbiBAdG1wbCkgYW5kIGxpbmtzIGl0IHRvIHRoZSBnaXZlbiBAZWxlbWVudCBzaW5rIHBhZCAodGhlIHBhZCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIEBuYW1lKS4KLSAqIEJlZm9yZSB1c2luZyB0aGUgc3JjIHBhZCB0byBwdXNoIGRhdGEgb24gQGVsZW1lbnQgeW91IG5lZWQgdG8gY2FsbCAjZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyBvbiB0aGUgY3JlYXRlZCBzcmMgcGFkLgotICoKLSAqIEV4YW1wbGUgb2YgaG93IHRvIHB1c2ggYSBidWZmZXIgb24gQGVsZW1lbnQ6Ci0gKgotICogfFs8IS0tIGxhbmd1YWdlPSJDIiAtLT4KLSAqIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICogR1NUX1BBRF9TSU5LLAotICogR1NUX1BBRF9BTFdBWVMsCi0gKiBHU1RfU1RBVElDX0NBUFMgKFlPVVJfQ0FQU19URU1QTEFURV9TVFJJTkcpCi0gKiApOwotICogc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICogR1NUX1BBRF9TUkMsCi0gKiBHU1RfUEFEX0FMV0FZUywKLSAqIEdTVF9TVEFUSUNfQ0FQUyAoWU9VUl9DQVBTX1RFTVBMQVRFX1NUUklORykKLSAqICk7Ci0gKgotICogR3N0RWxlbWVudCAqIGVsZW1lbnQgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImVsZW1lbnQiKTsKLSAqIEdzdFBhZCAqIG15c3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKGVsZW1lbnQsICZzcmN0ZW1wbGF0ZSk7Ci0gKiBHc3RQYWQgKiBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGVsZW1lbnQsICZzaW5rdGVtcGxhdGUpOwotICoKLSAqIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICogZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotICogZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotICoKLSAqIEdzdENhcHMgKiBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFlPVVJfREVTSVJFRF9TSU5LX0NBUFMpOwotICogZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGVsZW1lbnQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gKiBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gKgotICogZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYygyKSkgPT0gR1NUX0ZMT1dfT0spOwotICogXXwKLSAqCi0gKiBGb3IgdmVyeSBzaW1wbGUgaW5wdXQvb3V0cHV0IHRlc3Qgc2NlbmFyaW9zIGNoZWNrb3V0ICNnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0IGFuZCAjZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIG5ldyBwYWQgdGhhdCBjYW4gYmUgdXNlZCB0byBpbmplY3QgZGF0YSBvbiBAZWxlbWVudAotICovCi1Hc3RQYWQgKgotZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICpwdG1wbCA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAodG1wbCk7Ci0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIHNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZSAoZWxlbWVudCwgcHRtcGwsIG5hbWUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHB0bXBsKTsKLQotICByZXR1cm4gc3JjcGFkOwotfQotCi0vKioKLSAqIGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2Zyb21fdGVtcGxhdGU6Ci0gKiBAZWxlbWVudDogZWxlbWVudCB0byBzZXR1cCBwYWQgb24KLSAqIEB0bXBsOiBwYWQgdGVtcGxhdGUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHBhZAotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotR3N0UGFkICoKLWdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2Zyb21fdGVtcGxhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdG1wbCkKLXsKLSAgcmV0dXJuIGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZSAoZWxlbWVudCwgdG1wbCwgInNpbmsiKTsKLX0KLQotLyoqCi0gKiBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGU6Ci0gKiBAZWxlbWVudDogZWxlbWVudCB0byBzZXR1cCBwYWQgb24KLSAqIEB0bXBsOiBwYWQgdGVtcGxhdGUKLSAqIEBuYW1lOiBuYW1lCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBwYWQKLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLUdzdFBhZCAqCi1nc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdG1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgLyogc2VuZGluZyBwYWQgKi8KLSAgc3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodG1wbCwgInNyYyIpOwotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAic2V0dGluZyB1cCBzZW5kaW5nIHBhZCAlcCIsIHNyY3BhZCk7Ci0gIGZhaWxfaWYgKHNyY3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBhIHNyY3BhZCIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmNwYWQsICJzcmNwYWQiLCAxKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsIG5hbWUpOwotICBpZiAoc2lua3BhZCA9PSBOVUxMKQotICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGVsZW1lbnQsIG5hbWUpOwotICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHNpbmsgcGFkIGZyb20gJXMiLAotICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpID09IEdTVF9QQURfTElOS19PSywKLSAgICAgICJDb3VsZCBub3QgbGluayBzb3VyY2UgYW5kICVzIHNpbmsgcGFkcyIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7ICAgLyogYmVjYXVzZSB3ZSBnb3QgaXQgaGlnaGVyIHVwICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmtwYWQsICJzaW5rcGFkIiwgMSk7Ci0KLSAgcmV0dXJuIHNyY3BhZDsKLX0KLQotdm9pZAotZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lIChHc3RFbGVtZW50ICogZWxlbWVudCwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RQYWQgKnBhZF9wZWVyLCAqcGFkX2VsZW1lbnQ7Ci0KLSAgLyogY2xlYW4gdXAgZmxvYXRpbmcgc3JjIHBhZCAqLwotICBwYWRfZWxlbWVudCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCBuYW1lKTsKLSAgLyogV2UgZG9uJ3QgY2hlY2sgdGhlIHJlZmNvdW50IGhlcmUgc2luY2UgdGhlcmUgKm1pZ2h0KiBiZQotICAgKiBhIHBhZCBjYWNoZSBob2xkaW5nIGFuIGV4dHJhIHJlZmVyZW5jZSBvbiBwYWRfZWxlbWVudC4KLSAgICogVG8gZ2V0IHRvIGEgc3RhdGUgd2hlcmUgbm8gcGFkIGNhY2hlIHdpbGwgZXhpc3QsCi0gICAqIHdlIGZpcnN0IHVubGluayB0aGF0IHBhZC4gKi8KLSAgcGFkX3BlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWRfZWxlbWVudCk7Ci0KLSAgaWYgKHBhZF9wZWVyKSB7Ci0gICAgaWYgKGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkX2VsZW1lbnQpID09IEdTVF9QQURfU0lOSykKLSAgICAgIGdzdF9wYWRfdW5saW5rIChwYWRfcGVlciwgcGFkX2VsZW1lbnQpOwotICAgIGVsc2UKLSAgICAgIGdzdF9wYWRfdW5saW5rIChwYWRfZWxlbWVudCwgcGFkX3BlZXIpOwotICB9Ci0KLSAgLyogcGFkIHJlZnMgaGVsZCBieSBib3RoIGNyZWF0b3IgYW5kIHRoaXMgZnVuY3Rpb24gKHRocm91Z2ggX2dldCkgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGFkX2VsZW1lbnQsICJlbGVtZW50IHBhZF9lbGVtZW50IiwgMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZF9lbGVtZW50KTsKLSAgLyogb25lIG1vcmUgcmVmIGlzIGhlbGQgYnkgZWxlbWVudCBpdHNlbGYgKi8KLQotICBpZiAocGFkX3BlZXIpIHsKLSAgICAvKiBwYWQgcmVmcyBoZWxkIGJ5IGJvdGggY3JlYXRvciBhbmQgdGhpcyBmdW5jdGlvbiAodGhyb3VnaCBfZ2V0X3BlZXIpICovCi0gICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGFkX3BlZXIsICJjaGVjayBwYWRfcGVlciIsIDIpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZF9wZWVyKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWRfcGVlcik7Ci0gIH0KLX0KLQotdm9pZAotZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUgKGVsZW1lbnQsICJzaW5rIik7Ci19Ci0KLS8qKgotICogZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkOgotICogQGVsZW1lbnQ6IGVsZW1lbnQgdG8gc2V0dXAgcGFkIG9uCi0gKiBAdG1wbDogcGFkIHRlbXBsYXRlCi0gKgotICogRG9lcyB0aGUgc2FtZSBhcyAjZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWUgd2l0aCB0aGUgPGVtcGhhc2lzPiBuYW1lIDwvZW1waGFzaXM+IHBhcmFtZXRlciBlcXVhbCB0byAic3JjIi4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHBhZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoZSBvdXRwdXQgb2YgQGVsZW1lbnQKLSAqLwotR3N0UGFkICoKLWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdG1wbCkKLXsKLSAgcmV0dXJuIGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lIChlbGVtZW50LCB0bXBsLCAic3JjIik7Ci19Ci0KLS8qKgotICogZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWU6Ci0gKiBAZWxlbWVudDogZWxlbWVudCB0byBzZXR1cCBwYWQgb24KLSAqIEB0bXBsOiBwYWQgdGVtcGxhdGUKLSAqIEBuYW1lOiBOYW1lIG9mIHRoZSBAZWxlbWVudCBzcmMgcGFkIHRoYXQgd2lsbCBiZSBsaW5rZWQgdG8gdGhlIHNpbmsgcGFkIHRoYXQgd2lsbCBiZSBzZXR1cAotICoKLSAqIENyZWF0ZXMgYSBuZXcgc2luayBwYWQgKGJhc2VkIG9uIHRoZSBnaXZlbiBAdG1wbCkgYW5kIGxpbmtzIGl0IHRvIHRoZSBnaXZlbiBAZWxlbWVudCBzcmMgcGFkCi0gKiAodGhlIHBhZCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIEBuYW1lKS4KLSAqIFlvdSBjYW4gc2V0IGV2ZW50L2NoYWluL3F1ZXJ5IGZ1bmN0aW9ucyBvbiB0aGlzIHBhZCB0byBjaGVjayB0aGUgb3V0cHV0IG9mIHRoZSBAZWxlbWVudC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IHBhZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoZSBvdXRwdXQgb2YgQGVsZW1lbnQKLSAqLwotR3N0UGFkICoKLWdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRtcGwsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0UGFkVGVtcGxhdGUgKnB0bXBsID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICh0bXBsKTsKLSAgR3N0UGFkICpzaW5rcGFkOwotCi0gIHNpbmtwYWQgPQotICAgICAgZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZSAoZWxlbWVudCwgcHRtcGwsIG5hbWUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHB0bXBsKTsKLQotICByZXR1cm4gc2lua3BhZDsKLX0KLQotLyoqCi0gKiBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfZnJvbV90ZW1wbGF0ZToKLSAqIEBlbGVtZW50OiBlbGVtZW50IHRvIHNldHVwIHBhZCBvbgotICogQHRtcGw6IHBhZCB0ZW1wbGF0ZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcGFkCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3RQYWQgKgotZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2Zyb21fdGVtcGxhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdG1wbCkKLXsKLSAgcmV0dXJuIGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lX2Zyb21fdGVtcGxhdGUgKGVsZW1lbnQsIHRtcGwsICJzcmMiKTsKLX0KLQotLyoqCi0gKiBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlOgotICogQGVsZW1lbnQ6IGVsZW1lbnQgdG8gc2V0dXAgcGFkIG9uCi0gKiBAdG1wbDogcGFkIHRlbXBsYXRlCi0gKiBAbmFtZTogbmFtZQotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgcGFkCi0gKgotICogU2luY2U6IDEuNAotICovCi1Hc3RQYWQgKgotZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWVfZnJvbV90ZW1wbGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0bXBsLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICAvKiByZWNlaXZpbmcgcGFkICovCi0gIHNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0bXBsLCAic2luayIpOwotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAic2V0dGluZyB1cCByZWNlaXZpbmcgcGFkICVwIiwgc2lua3BhZCk7Ci0gIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYSBzaW5rcGFkIik7Ci0KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsIG5hbWUpOwotICBpZiAoc3JjcGFkID09IE5VTEwpCi0gICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChlbGVtZW50LCBuYW1lKTsKLSAgZmFpbF9pZiAoc3JjcGFkID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHNvdXJjZSBwYWQgZnJvbSAlcyIsCi0gICAgICBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rcGFkLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgIkxpbmtpbmcgZWxlbWVudCBzcmMgcGFkIGFuZCByZWNlaXZpbmcgc2luayBwYWQiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0ssCi0gICAgICAiQ291bGQgbm90IGxpbmsgJXMgc291cmNlIGFuZCBzaW5rIHBhZHMiLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7ICAgIC8qIGJlY2F1c2Ugd2UgZ290IGl0IGhpZ2hlciB1cCAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmNwYWQsICJzcmNwYWQiLCAxKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAic2V0IHVwIHNyY3BhZCwgcmVmY291bnQgaXMgMSIpOwotICByZXR1cm4gc2lua3BhZDsKLX0KLQotdm9pZAotZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lIChlbGVtZW50LCAic3JjIik7Ci19Ci0KLS8qKgotICogZ3N0X2NoZWNrX2Ryb3BfYnVmZmVyczoKLSAqCi0gKiBVbnJlZiBhbmQgcmVtb3ZlIGFsbCBidWZmZXJzIHRoYXQgYXJlIGluIHRoZSBnbG9iYWwgQGJ1ZmZlcnMgR0xpc3QsCi0gKiBlbXB0eWluZyB0aGUgbGlzdC4KLSAqLwotdm9pZAotZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAodm9pZCkKLXsKLSAgd2hpbGUgKGJ1ZmZlcnMgIT0gTlVMTCkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpKTsKLSAgICBidWZmZXJzID0gZ19saXN0X2RlbGV0ZV9saW5rIChidWZmZXJzLCBidWZmZXJzKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9jaGVja19jYXBzX2VxdWFsOgotICogQGNhcHMxOiBmaXJzdCBjYXBzIHRvIGNvbXBhcmUKLSAqIEBjYXBzMjogc2Vjb25kIGNhcHMgdG8gY29tcGFyZQotICoKLSAqIENvbXBhcmUgdHdvIGNhcHMgd2l0aCBnc3RfY2Fwc19pc19lcXVhbCBhbmQgZmFpbCB1bmxlc3MgdGhleSBhcmUKLSAqIGVxdWFsLgotICovCi12b2lkCi1nc3RfY2hlY2tfY2Fwc19lcXVhbCAoR3N0Q2FwcyAqIGNhcHMxLCBHc3RDYXBzICogY2FwczIpCi17Ci0gIGdjaGFyICpuYW1lMSA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2FwczEpOwotICBnY2hhciAqbmFtZTIgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMyKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMxLCBjYXBzMiksCi0gICAgICAiY2FwcyAoJyVzJykgaXMgbm90IGVxdWFsIHRvIGNhcHMgKCclcycpIiwgbmFtZTEsIG5hbWUyKTsKLSAgZ19mcmVlIChuYW1lMSk7Ci0gIGdfZnJlZSAobmFtZTIpOwotfQotCi0KLS8qKgotICogZ3N0X2NoZWNrX2J1ZmZlcl9kYXRhOgotICogQGJ1ZmZlcjogYnVmZmVyIHRvIGNvbXBhcmUKLSAqIEBkYXRhOiBkYXRhIHRvIGNvbXBhcmUgdG8KLSAqIEBzaXplOiBzaXplIG9mIGRhdGEgdG8gY29tcGFyZQotICoKLSAqIENvbXBhcmUgdGhlIGJ1ZmZlciBjb250ZW50cyB3aXRoIEBkYXRhIGFuZCBAc2l6ZS4KLSAqLwotdm9pZAotZ3N0X2NoZWNrX2J1ZmZlcl9kYXRhIChHc3RCdWZmZXIgKiBidWZmZXIsIGdjb25zdHBvaW50ZXIgZGF0YSwgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0TWFwSW5mbyBpbmZvOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gIEdTVF9NRU1EVU1QICgiQ29udmVydGVkIGRhdGEiLCBpbmZvLmRhdGEsIGluZm8uc2l6ZSk7Ci0gIEdTVF9NRU1EVU1QICgiRXhwZWN0ZWQgZGF0YSIsIGRhdGEsIHNpemUpOwotICBpZiAobWVtY21wIChpbmZvLmRhdGEsIGRhdGEsIHNpemUpICE9IDApIHsKLSAgICBnX3ByaW50ICgiXG5Db252ZXJ0ZWQgZGF0YTpcbiIpOwotICAgIGdzdF91dGlsX2R1bXBfbWVtIChpbmZvLmRhdGEsIGluZm8uc2l6ZSk7Ci0gICAgZ19wcmludCAoIlxuRXhwZWN0ZWQgZGF0YTpcbiIpOwotICAgIGdzdF91dGlsX2R1bXBfbWVtIChkYXRhLCBzaXplKTsKLSAgICBmYWlsICgiYnVmZmVyIGNvbnRlbnRzIG5vdCBlcXVhbCIpOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1ZmZlcl9ldmVudF9mdW5jdGlvbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBub3BhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0NBUFMpIHsKLSAgICBHc3RDYXBzICpldmVudF9jYXBzOwotICAgIEdzdENhcHMgKmV4cGVjdGVkX2NhcHMgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0KLSAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZldmVudF9jYXBzKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZml4ZWQgKGV4cGVjdGVkX2NhcHMpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZml4ZWQgKGV2ZW50X2NhcHMpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQgKGV2ZW50X2NhcHMsIGV4cGVjdGVkX2NhcHMpKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgbm9wYXJlbnQsIGV2ZW50KTsKLX0KLQotLyoqCi0gKiBnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0OgotICogQGVsZW1lbnRfbmFtZTogbmFtZSBvZiB0aGUgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIGNyZWF0ZWQKLSAqIEBidWZmZXJfaW46IChlbGVtZW50LXR5cGUgR3N0QnVmZmVyKSAodHJhbnNmZXIgZnVsbCk6IGEgbGlzdCBvZiBidWZmZXJzIHRoYXQgbmVlZHMgdG8gYmUKLSAqICBwdXNoZWQgdG8gdGhlIGVsZW1lbnQKLSAqIEBjYXBzX2luOiB0aGUgI0dzdENhcHMgZXhwZWN0ZWQgb2YgdGhlIHNpbmtwYWQgb2YgdGhlIGVsZW1lbnQKLSAqIEBidWZmZXJfb3V0OiAoZWxlbWVudC10eXBlIEdzdEJ1ZmZlcikgKHRyYW5zZmVyIGZ1bGwpOiBhIGxpc3Qgb2YgYnVmZmVycyB0aGF0IHdlIGV4cGVjdCBmcm9tCi0gKiB0aGUgZWxlbWVudAotICogQGNhcHNfb3V0OiB0aGUgI0dzdENhcHMgZXhwZWN0ZWQgb2YgdGhlIHNyY3BhZCBvZiB0aGUgZWxlbWVudAotICogQGxhc3RfZmxvd19yZXR1cm46IHRoZSBsYXN0IGJ1ZmZlciBwdXNoIG5lZWRzIHRvIGdpdmUgdGhpcyBHc3RGbG93UmV0dXJuCi0gKgotICogQ3JlYXRlIGFuIGVsZW1lbnQgdXNpbmcgdGhlIGZhY3RvcnkgcHJvdmlkaW5nIHRoZSBAZWxlbWVudF9uYW1lIGFuZCBwdXNoIHRoZQotICogYnVmZmVycyBpbiBAYnVmZmVyX2luIHRvIHRoaXMgZWxlbWVudC4gVGhlIGVsZW1lbnQgc2hvdWxkIGNyZWF0ZSB0aGUgYnVmZmVycwotICogZXF1YWwgdG8gdGhlIGJ1ZmZlcnMgaW4gQGJ1ZmZlcl9vdXQuIFdlIG9ubHkgY2hlY2sgdGhlIHNpemUgYW5kIHRoZSBkYXRhIG9mCi0gKiB0aGUgYnVmZmVycy4gVGhpcyBmdW5jdGlvbiB1bnJlZnMgdGhlIGJ1ZmZlcnMgaW4gdGhlIHR3byBsaXN0cy4KLSAqIFRoZSBsYXN0X2Zsb3dfcmV0dXJuIHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIGV4cGVjdGVkIGZsb3cgcmV0dXJuIHZhbHVlIGZyb20KLSAqIHB1c2hpbmcgdGhlIGZpbmFsIGJ1ZmZlciBpbiB0aGUgbGlzdC4KLSAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIGEgdGVzdCB3aGljaCBwdXNoZXMgc29tZSBidWZmZXJzIGFuZCB0aGVuIGFuCi0gKiBpbnZhbGlkIGJ1ZmZlciwgd2hlbiB0aGUgZmluYWwgYnVmZmVyIGlzIGV4cGVjdGVkIHRvIGZhaWwsIGZvciBleGFtcGxlLgotICovCi0vKiBGSVhNRSAyLjA6IHJlbmFtZSB0aGlzIGZ1bmN0aW9uIG5vdyB0aGF0IHRoZXJlJ3MgR3N0QnVmZmVyTGlzdD8gKi8KLXZvaWQKLWdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLAotICAgIEdMaXN0ICogYnVmZmVyX2luLCBHc3RDYXBzICogY2Fwc19pbiwgR0xpc3QgKiBidWZmZXJfb3V0LAotICAgIEdzdENhcHMgKiBjYXBzX291dCwgR3N0Rmxvd1JldHVybiBsYXN0X2Zsb3dfcmV0dXJuKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHc3RQYWQgKnBhZF9wZWVyOwotICBHc3RQYWQgKnNpbmtfcGFkID0gTlVMTDsKLSAgR3N0UGFkICpzcmNfcGFkOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICAvKiBjaGVjayB0aGF0IHRoZXJlIGFyZSBubyBidWZmZXJzIHdhaXRpbmcgKi8KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgLyogY3JlYXRlIHRoZSBlbGVtZW50ICovCi0gIGVsZW1lbnQgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoZWxlbWVudF9uYW1lKTsKLSAgZmFpbF9pZiAoZWxlbWVudCA9PSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgZWxlbWVudCAnJXMnIiwgZWxlbWVudF9uYW1lKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19FTEVNRU5UIChlbGVtZW50KSwgInRoZSBlbGVtZW50IGlzIG5vIGVsZW1lbnQiKTsKLSAgLyogY3JlYXRlIHRoZSBzcmMgcGFkICovCi0gIGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcl9pbi0+ZGF0YSk7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksICJUaGVyZSBzaG91bGQgYmUgYSBidWZmZXIgaW4gYnVmZmVyX2luIik7Ci0gIHNyY19wYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgaWYgKGNhcHNfaW4pIHsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHNfaW4pKTsKLSAgICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChzcmNfcGFkKTsKLSAgfQotICAvKiBhY3RpdmF0ZSB0aGUgcGFkICovCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjX3BhZCwgVFJVRSk7Ci0gIEdTVF9ERUJVRyAoInNyYyBwYWQgYWN0aXZhdGVkIik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKHNyY19wYWQsIGVsZW1lbnQsIGNhcHNfaW4sIEdTVF9GT1JNQVRfQllURVMpOwotICBwYWRfcGVlciA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCAic2luayIpOwotICBmYWlsX2lmIChwYWRfcGVlciA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjX3BhZCwgcGFkX3BlZXIpID09IEdTVF9QQURfTElOS19PSywKLSAgICAgICJDb3VsZCBub3QgbGluayBzb3VyY2UgYW5kICVzIHNpbmsgcGFkcyIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkX3BlZXIpOwotICAvKiBkb24ndCBjcmVhdGUgdGhlIHNpbmtfcGFkIGlmIHRoZXJlIGlzIG5vIGJ1ZmZlcl9vdXQgbGlzdCAqLwotICBpZiAoYnVmZmVyX291dCAhPSBOVUxMKSB7Ci0KLSAgICBHU1RfREVCVUcgKCJidWZmZXIgb3V0IGRldGVjdGVkLCBjcmVhdGluZyB0aGUgc2luayBwYWQiKTsKLSAgICAvKiBnZXQgdGhlIHNpbmsgY2FwcyAqLwotICAgIGlmIChjYXBzX291dCkgewotICAgICAgZ2NoYXIgKnRlbXA7Ci0KLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19maXhlZCAoY2Fwc19vdXQpKTsKLSAgICAgIHRlbXAgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHNfb3V0KTsKLQotICAgICAgR1NUX0RFQlVHICgic2luayBjYXBzIHJlcXVlc3RlZCBieSBidWZmZXIgb3V0OiAnJXMnIiwgdGVtcCk7Ci0gICAgICBnX2ZyZWUgKHRlbXApOwotICAgIH0KLQotICAgIC8qIGdldCB0aGUgc2luayBwYWQgKi8KLSAgICBzaW5rX3BhZCA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9JU19QQUQgKHNpbmtfcGFkKSk7Ci0gICAgLyogY29uZmlndXJlIHRoZSBzaW5rIHBhZCAqLwotICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rX3BhZCwgZ3N0X2NoZWNrX2NoYWluX2Z1bmMpOwotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua19wYWQsIFRSVUUpOwotICAgIGlmIChjYXBzX291dCkgewotICAgICAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzaW5rX3BhZCwgY2Fwc19vdXQpOwotICAgICAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNpbmtfcGFkLCBidWZmZXJfZXZlbnRfZnVuY3Rpb24pOwotICAgIH0KLSAgICAvKiBnZXQgdGhlIHBlZXIgcGFkICovCi0gICAgcGFkX3BlZXIgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgInNyYyIpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHBhZF9wZWVyLCBzaW5rX3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LLAotICAgICAgICAiQ291bGQgbm90IGxpbmsgc2luayBhbmQgJXMgc291cmNlIHBhZHMiLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkX3BlZXIpOwotICB9Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLSAgLyogcHVzaCBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGJ1ZmZlcl9pbiBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJfaW4pID4gMCwgInRoZSBidWZmZXJfaW4gbGlzdCBpcyBlbXB0eSIpOwotICB3aGlsZSAoYnVmZmVyX2luICE9IE5VTEwpIHsKLSAgICBHc3RCdWZmZXIgKm5leHRfYnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVyX2luLT5kYXRhKTsKLQotICAgIGZhaWxfdW5sZXNzIChHU1RfSVNfQlVGRkVSIChuZXh0X2J1ZmZlciksCi0gICAgICAgICJkYXRhIGluIGJ1ZmZlcl9pbiBzaG91bGQgYmUgYSBidWZmZXIiKTsKLSAgICAvKiByZW1vdmUgdGhlIGJ1ZmZlciBmcm9tIHRoZSBsaXN0ICovCi0gICAgYnVmZmVyX2luID0gZ19saXN0X3JlbW92ZSAoYnVmZmVyX2luLCBuZXh0X2J1ZmZlcik7Ci0gICAgaWYgKGJ1ZmZlcl9pbiA9PSBOVUxMKSB7Ci0gICAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmNfcGFkLCBuZXh0X2J1ZmZlcikgPT0gbGFzdF9mbG93X3JldHVybiwKLSAgICAgICAgICAid2UgZXhwZWN0IHNvbWV0aGluZyBlbHNlIGZyb20gdGhlIGxhc3QgYnVmZmVyIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY19wYWQsIG5leHRfYnVmZmVyKSA9PSBHU1RfRkxPV19PSywKLSAgICAgICAgICAiRmFpbGVkIHRvIHB1c2ggYnVmZmVyIGluIik7Ci0gICAgfQotICB9Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGEgYnVmZmVyIG91dCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgZ19saXN0X2xlbmd0aCAoYnVmZmVyX291dCkpOwotICB3aGlsZSAoYnVmZmVycyAhPSBOVUxMKSB7Ci0gICAgR3N0QnVmZmVyICpuZXcgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgICBHc3RCdWZmZXIgKm9yaWcgPSBHU1RfQlVGRkVSIChidWZmZXJfb3V0LT5kYXRhKTsKLSAgICBHc3RNYXBJbmZvIG5ld2luZm8sIG9yaWdpbmZvOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChuZXcsICZuZXdpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKG9yaWcsICZvcmlnaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0KLSAgICBHU1RfTE9HICgib3JpZyBidWZmZXI6IHNpemUgJSIgR19HU0laRV9GT1JNQVQsIG9yaWdpbmZvLnNpemUpOwotICAgIEdTVF9MT0cgKCJuZXcgIGJ1ZmZlcjogc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwgbmV3aW5mby5zaXplKTsKLSAgICBHU1RfTUVNRFVNUCAoIm9yaWcgYnVmZmVyIiwgb3JpZ2luZm8uZGF0YSwgb3JpZ2luZm8uc2l6ZSk7Ci0gICAgR1NUX01FTURVTVAgKCJuZXcgIGJ1ZmZlciIsIG5ld2luZm8uZGF0YSwgbmV3aW5mby5zaXplKTsKLQotICAgIC8qIHJlbW92ZSB0aGUgYnVmZmVycyAqLwotICAgIGJ1ZmZlcnMgPSBnX2xpc3RfcmVtb3ZlIChidWZmZXJzLCBuZXcpOwotICAgIGJ1ZmZlcl9vdXQgPSBnX2xpc3RfcmVtb3ZlIChidWZmZXJfb3V0LCBvcmlnKTsKLQotICAgIGZhaWxfdW5sZXNzIChvcmlnaW5mby5zaXplID09IG5ld2luZm8uc2l6ZSwKLSAgICAgICAgInNpemUgb2YgdGhlIGJ1ZmZlcnMgYXJlIG5vdCB0aGUgc2FtZSIpOwotICAgIGZhaWxfdW5sZXNzIChtZW1jbXAgKG9yaWdpbmZvLmRhdGEsIG5ld2luZm8uZGF0YSwgbmV3aW5mby5zaXplKSA9PSAwLAotICAgICAgICAiZGF0YSBpcyBub3QgdGhlIHNhbWUiKTsKLSNpZiAwCi0gICAgZ3N0X2NoZWNrX2NhcHNfZXF1YWwgKEdTVF9CVUZGRVJfQ0FQUyAob3JpZyksIEdTVF9CVUZGRVJfQ0FQUyAobmV3KSk7Ci0jZW5kaWYKLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKG9yaWcsICZvcmlnaW5mbyk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAobmV3LCAmbmV3aW5mbyk7Ci0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChuZXcpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKG9yaWcpOwotICB9Ci0gIC8qIHRlYXJkb3duIHRoZSBlbGVtZW50IGFuZCBwYWRzICovCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjX3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoZWxlbWVudCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua19wYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChlbGVtZW50KTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGVsZW1lbnQpOwotfQotCi0vKioKLSAqIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyOgotICogQGVsZW1lbnRfbmFtZTogbmFtZSBvZiB0aGUgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIGNyZWF0ZWQKLSAqIEBidWZmZXJfaW46IHB1c2ggdGhpcyBidWZmZXIgdG8gdGhlIGVsZW1lbnQKLSAqIEBjYXBzX2luOiB0aGUgI0dzdENhcHMgZXhwZWN0ZWQgb2YgdGhlIHNpbmtwYWQgb2YgdGhlIGVsZW1lbnQKLSAqIEBidWZmZXJfb3V0OiBjb21wYXJlIHRoZSByZXN1bHQgd2l0aCB0aGlzIGJ1ZmZlcgotICogQGNhcHNfb3V0OiB0aGUgI0dzdENhcHMgZXhwZWN0ZWQgb2YgdGhlIHNyY3BhZCBvZiB0aGUgZWxlbWVudAotICoKLSAqIENyZWF0ZSBhbiBlbGVtZW50IHVzaW5nIHRoZSBmYWN0b3J5IHByb3ZpZGluZyB0aGUgQGVsZW1lbnRfbmFtZSBhbmQKLSAqIHB1c2ggdGhlIEBidWZmZXJfaW4gdG8gdGhpcyBlbGVtZW50LiBUaGUgZWxlbWVudCBzaG91bGQgY3JlYXRlIG9uZSBidWZmZXIKLSAqIGFuZCB0aGlzIHdpbGwgYmUgY29tcGFyZWQgd2l0aCBAYnVmZmVyX291dC4gV2Ugb25seSBjaGVjayB0aGUgY2FwcwotICogYW5kIHRoZSBkYXRhIG9mIHRoZSBidWZmZXJzLiBUaGlzIGZ1bmN0aW9uIHVucmVmcyB0aGUgYnVmZmVycy4KLSAqLwotdm9pZAotZ3N0X2NoZWNrX2VsZW1lbnRfcHVzaF9idWZmZXIgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcl9pbiwgR3N0Q2FwcyAqIGNhcHNfaW4sIEdzdEJ1ZmZlciAqIGJ1ZmZlcl9vdXQsCi0gICAgR3N0Q2FwcyAqIGNhcHNfb3V0KQotewotICBHTGlzdCAqaW4gPSBOVUxMOwotICBHTGlzdCAqb3V0ID0gTlVMTDsKLQotICBpbiA9IGdfbGlzdF9hcHBlbmQgKGluLCBidWZmZXJfaW4pOwotICBvdXQgPSBnX2xpc3RfYXBwZW5kIChvdXQsIGJ1ZmZlcl9vdXQpOwotCi0gIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyX2xpc3QgKGVsZW1lbnRfbmFtZSwgaW4sIGNhcHNfaW4sIG91dCwgY2Fwc19vdXQsCi0gICAgICBHU1RfRkxPV19PSyk7Ci19Ci0KLXZvaWQKLWdzdF9jaGVja19hYmlfbGlzdCAoR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdLCBnYm9vbGVhbiBoYXZlX2FiaV9zaXplcykKLXsKLSAgaWYgKGhhdmVfYWJpX3NpemVzKSB7Ci0gICAgZ2Jvb2xlYW4gb2sgPSBUUlVFOwotICAgIGdpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGxpc3RbaV0ubmFtZTsgaSsrKSB7Ci0gICAgICBpZiAobGlzdFtpXS5zaXplICE9IGxpc3RbaV0uYWJpX3NpemUpIHsKLSAgICAgICAgb2sgPSBGQUxTRTsKLSAgICAgICAgZ19wcmludCAoInNpemVvZiglcykgaXMgJWQsIGV4cGVjdGVkICVkXG4iLAotICAgICAgICAgICAgbGlzdFtpXS5uYW1lLCBsaXN0W2ldLnNpemUsIGxpc3RbaV0uYWJpX3NpemUpOwotICAgICAgfQotICAgIH0KLSAgICBmYWlsX3VubGVzcyAob2ssICJmYWlsZWQgQUJJIGNoZWNrIik7Ci0gIH0gZWxzZSB7Ci0gICAgY29uc3QgZ2NoYXIgKmZuOwotCi0gICAgaWYgKChmbiA9IGdfZ2V0ZW52ICgiR1NUX0FCSSIpKSkgewotICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotICAgICAgR1N0cmluZyAqczsKLSAgICAgIGdpbnQgaTsKLQotICAgICAgcyA9IGdfc3RyaW5nX25ldyAoIlxuR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdID0ge1xuIik7Ci0gICAgICBmb3IgKGkgPSAwOyBsaXN0W2ldLm5hbWU7IGkrKykgewotICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzLCAiICB7XCIlc1wiLCBzaXplb2YgKCVzKSwgJWR9LFxuIiwKLSAgICAgICAgICAgIGxpc3RbaV0ubmFtZSwgbGlzdFtpXS5uYW1lLCBsaXN0W2ldLnNpemUpOwotICAgICAgfQotICAgICAgZ19zdHJpbmdfYXBwZW5kIChzLCAiICB7TlVMTCwgMCwgMH1cbiIpOwotICAgICAgZ19zdHJpbmdfYXBwZW5kIChzLCAifTtcbiIpOwotICAgICAgaWYgKCFnX2ZpbGVfc2V0X2NvbnRlbnRzIChmbiwgcy0+c3RyLCBzLT5sZW4sICZlcnIpKSB7Ci0gICAgICAgIGdfcHJpbnQgKCIlcyIsIHMtPnN0cik7Ci0gICAgICAgIGdfcHJpbnRlcnIgKCJcbkZhaWxlZCB0byB3cml0ZSBBQkkgaW5mb3JtYXRpb246ICVzXG4iLCBlcnItPm1lc3NhZ2UpOwotICAgICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfcHJpbnQgKCJcbldyb3RlIEFCSSBpbmZvcm1hdGlvbiB0byAnJXMnLlxuIiwgZm4pOwotICAgICAgfQotICAgICAgZ19zdHJpbmdfZnJlZSAocywgVFJVRSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfcHJpbnQgKCJObyBzdHJ1Y3R1cmUgc2l6ZSBsaXN0IHdhcyBnZW5lcmF0ZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLlxuIik7Ci0gICAgICBnX3ByaW50ICgiUnVuIHdpdGggR1NUX0FCSSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQgdG8gb3V0cHV0IGhlYWRlci5cbiIpOwotICAgIH0KLSAgfQotfQotCi1naW50Ci1nc3RfY2hlY2tfcnVuX3N1aXRlIChTdWl0ZSAqIHN1aXRlLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IGdjaGFyICogZm5hbWUpCi17Ci0gIFNSdW5uZXIgKnNyOwotICBnY2hhciAqeG1sZmlsZW5hbWUgPSBOVUxMOwotICBnaW50IG5mOwotCi0gIHNyID0gc3J1bm5lcl9jcmVhdGUgKHN1aXRlKTsKLQotICBpZiAoZ19nZXRlbnYgKCJHU1RfQ0hFQ0tfWE1MIikpIHsKLSAgICAvKiBob3cgbHVja3kgd2UgYXJlIHRvIGhhdmUgX19GSUxFX18gZW5kIGluIC5jICovCi0gICAgeG1sZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIlc2hlY2sueG1sIiwgZm5hbWUpOwotCi0gICAgc3J1bm5lcl9zZXRfeG1sIChzciwgeG1sZmlsZW5hbWUpOwotICB9Ci0KLSAgc3J1bm5lcl9ydW5fYWxsIChzciwgQ0tfTk9STUFMKTsKLSAgbmYgPSBzcnVubmVyX250ZXN0c19mYWlsZWQgKHNyKTsKLSAgZ19mcmVlICh4bWxmaWxlbmFtZSk7Ci0gIHNydW5uZXJfZnJlZSAoc3IpOwotICByZXR1cm4gbmY7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NoZWNrX2hhdmVfY2hlY2tzX2xpc3QgKGNvbnN0IGdjaGFyICogZW52X3Zhcl9uYW1lKQotewotICBjb25zdCBnY2hhciAqZW52X3ZhbDsKLQotICBlbnZfdmFsID0gZ19nZXRlbnYgKGVudl92YXJfbmFtZSk7Ci0gIHJldHVybiAoZW52X3ZhbCAhPSBOVUxMICYmICplbnZfdmFsICE9ICdcMCcpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jaGVja19mdW5jX2lzX2luX2xpc3QgKGNvbnN0IGdjaGFyICogZW52X3ZhciwgY29uc3QgZ2NoYXIgKiBmdW5jX25hbWUpCi17Ci0gIGNvbnN0IGdjaGFyICpnc3RfY2hlY2tzOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgZ2NoYXIgKipmdW5jcywgKipmOwotCi0gIGdzdF9jaGVja3MgPSBnX2dldGVudiAoZW52X3Zhcik7Ci0KLSAgaWYgKGdzdF9jaGVja3MgPT0gTlVMTCB8fCAqZ3N0X2NoZWNrcyA9PSAnXDAnKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBvbmx5IHJ1biBzcGVjaWZpZWQgZnVuY3Rpb25zICovCi0gIGZ1bmNzID0gZ19zdHJzcGxpdCAoZ3N0X2NoZWNrcywgIiwiLCAtMSk7Ci0gIGZvciAoZiA9IGZ1bmNzOyBmICE9IE5VTEwgJiYgKmYgIT0gTlVMTDsgKytmKSB7Ci0gICAgaWYgKGdfcGF0dGVybl9tYXRjaF9zaW1wbGUgKCpmLCBmdW5jX25hbWUpKSB7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGdfc3RyZnJlZXYgKGZ1bmNzKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotZ2Jvb2xlYW4KLV9nc3RfY2hlY2tfcnVuX3Rlc3RfZnVuYyAoY29uc3QgZ2NoYXIgKiBmdW5jX25hbWUpCi17Ci0gIC8qIGlmIHdlIGhhdmUgYSB3aGl0ZWxpc3QsIHJ1biBpdCBvbmx5IGlmIGl0J3MgaW4gdGhlIHdoaXRlbGlzdCAqLwotICBpZiAoZ3N0X2NoZWNrX2hhdmVfY2hlY2tzX2xpc3QgKCJHU1RfQ0hFQ0tTIikpCi0gICAgcmV0dXJuIGdzdF9jaGVja19mdW5jX2lzX2luX2xpc3QgKCJHU1RfQ0hFQ0tTIiwgZnVuY19uYW1lKTsKLQotICAvKiBpZiB3ZSBoYXZlIGEgYmxhY2tsaXN0LCBydW4gaXQgb25seSBpZiBpdCdzIG5vdCBpbiB0aGUgYmxhY2tsaXN0ICovCi0gIGlmIChnc3RfY2hlY2tfaGF2ZV9jaGVja3NfbGlzdCAoIkdTVF9DSEVDS1NfSUdOT1JFIikpCi0gICAgcmV0dXJuICFnc3RfY2hlY2tfZnVuY19pc19pbl9saXN0ICgiR1NUX0NIRUNLU19JR05PUkUiLCBmdW5jX25hbWUpOwotCi0gIC8qIG5vIGZpbHRlciBzcGVjaWZpZWQgPT4gcnVuIGFsbCBjaGVja3MgKi8KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2NoZWNrX3NldHVwX2V2ZW50c193aXRoX3N0cmVhbV9pZDoKLSAqIEBzcmNwYWQ6IFRoZSBzcmMgI0dzdFBhZCB0byBwdXNoIG9uCi0gKiBAZWxlbWVudDogVGhlICNHc3RFbGVtZW50IHVzZSB0byBjcmVhdGUgdGhlIHN0cmVhbSBpZAotICogQGNhcHM6IChhbGxvdy1ub25lKTogI0dzdENhcHMgaW4gY2FzZSBjYXBzIGV2ZW50IG11c3QgYmUgc2VudAotICogQGZvcm1hdDogVGhlICNHc3RGb3JtYXQgb2YgdGhlIGRlZmF1bHQgc2VnbWVudCB0byBzZW5kCi0gKiBAc3RyZWFtX2lkOiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RyZWFtCi0gKgotICogUHVzaCBzdHJlYW0tc3RhcnQsIGNhcHMgYW5kIHNlZ21lbnQgZXZlbnQsIHdoaWNoIGNvbnNpc3Qgb2YgdGhlIG1pbmltdW0KLSAqIHJlcXVpcmVkIGV2ZW50cyB0byBhbGxvdyBzdHJlYW1pbmcuIENhcHMgaXMgb3B0aW9uYWwgdG8gYWxsb3cgcmF3IHNyYwotICogdGVzdGluZy4KLSAqLwotdm9pZAotZ3N0X2NoZWNrX3NldHVwX2V2ZW50c193aXRoX3N0cmVhbV9pZCAoR3N0UGFkICogc3JjcGFkLCBHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RDYXBzICogY2FwcywgR3N0Rm9ybWF0IGZvcm1hdCwgY29uc3QgZ2NoYXIgKiBzdHJlYW1faWQpCi17Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgZm9ybWF0KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKHN0cmVhbV9pZCkpKTsKLSAgaWYgKGNhcHMpCi0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLX0KLQotLyoqCi0gKiBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzOgotICogQHNyY3BhZDogVGhlIHNyYyAjR3N0UGFkIHRvIHB1c2ggb24KLSAqIEBlbGVtZW50OiBUaGUgI0dzdEVsZW1lbnQgdXNlIHRvIGNyZWF0ZSB0aGUgc3RyZWFtIGlkCi0gKiBAY2FwczogKGFsbG93LW5vbmUpOiAjR3N0Q2FwcyBpbiBjYXNlIGNhcHMgZXZlbnQgbXVzdCBiZSBzZW50Ci0gKiBAZm9ybWF0OiBUaGUgI0dzdEZvcm1hdCBvZiB0aGUgZGVmYXVsdCBzZWdtZW50IHRvIHNlbmQKLSAqCi0gKiBQdXNoIHN0cmVhbS1zdGFydCwgY2FwcyBhbmQgc2VnbWVudCBldmVudCwgd2hpY2ggY29uc2lzdCBvZiB0aGUgbWluaW11bQotICogcmVxdWlyZWQgZXZlbnRzIHRvIGFsbG93IHN0cmVhbWluZy4gQ2FwcyBpcyBvcHRpb25hbCB0byBhbGxvdyByYXcgc3JjCi0gKiB0ZXN0aW5nLiBJZiBAZWxlbWVudCBoYXMgbW9yZSB0aGFuIG9uZSBzcmMgb3Igc2luayBwYWQsIHVzZQotICogZ3N0X2NoZWNrX3NldHVwX2V2ZW50c193aXRoX3N0cmVhbV9pZCgpIGluc3RlYWQuCi0gKi8KLXZvaWQKLWdzdF9jaGVja19zZXR1cF9ldmVudHMgKEdzdFBhZCAqIHNyY3BhZCwgR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0Q2FwcyAqIGNhcHMsIEdzdEZvcm1hdCBmb3JtYXQpCi17Ci0gIGdjaGFyICpzdHJlYW1faWQ7Ci0KLSAgc3RyZWFtX2lkID0gZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkIChzcmNwYWQsIGVsZW1lbnQsIE5VTEwpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkIChzcmNwYWQsIGVsZW1lbnQsIGNhcHMsIGZvcm1hdCwKLSAgICAgIHN0cmVhbV9pZCk7Ci0gIGdfZnJlZSAoc3RyZWFtX2lkKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgX0Rlc3Ryb3llZE9iamVjdFN0cnVjdAotewotICBHT2JqZWN0ICpvYmplY3Q7Ci0gIGdib29sZWFuIGRlc3Ryb3llZDsKLX0gRGVzdHJveWVkT2JqZWN0U3RydWN0OwotCi1zdGF0aWMgdm9pZAotd2Vha19ub3RpZnkgKERlc3Ryb3llZE9iamVjdFN0cnVjdCAqIGRlc3Ryb3llZCwgR09iamVjdCAqKiBvYmplY3QpCi17Ci0gIGRlc3Ryb3llZC0+ZGVzdHJveWVkID0gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfY2hlY2tfb2JqZWN0c19kZXN0cm95ZWRfb25fdW5yZWY6Ci0gKiBAb2JqZWN0X3RvX3VucmVmOiBUaGUgI0dPYmplY3QgdG8gdW5yZWYKLSAqIEBmaXJzdF9vYmplY3Q6IChhbGxvdy1ub25lKTogVGhlIGZpcnN0IG9iamVjdCB0aGF0IHNob3VsZCBiZSBkZXN0cm95ZWQgYXMgYQotICogY29uY2VxdWVuY2Ugb2YgdW5yZWZpbmcgQG9iamVjdF90b191bnJlZi4KLSAqIEAuLi4gOiBBZGRpdGlvbmFsIG9iamVjdCB0aGF0IHNob3VsZCBoYXZlIGJlZW4gZGVzdHJveWVkLgotICoKLSAqIFVucmVmcyBAb2JqZWN0X3RvX3VucmVmIGFuZCBjaGVja3MgdGhhdCBpcyBoYXMgcHJvcGVybHkgYmVlbgotICogZGVzdHJveWVkLCBhbHNvIGNoZWNrcyB0aGF0IHRoZSBvdGhlciBvYmplY3RzIHBhc3NlZCBpbgotICogcGFyYW1ldHRlciBoYXZlIGJlZW4gZGVzdHJveWVkIGFzIGEgY29uY2VxdWVuY2Ugb2YKLSAqIHVucmVmaW5nIEBvYmplY3RfdG9fdW5yZWYuIExhc3QgdmFyaWFibGUgYXJndW1lbnQgc2hvdWxkIGJlIE5VTEwuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfY2hlY2tfb2JqZWN0c19kZXN0cm95ZWRfb25fdW5yZWYgKGdwb2ludGVyIG9iamVjdF90b191bnJlZiwKLSAgICBncG9pbnRlciBmaXJzdF9vYmplY3QsIC4uLikKLXsKLSAgR09iamVjdCAqb2JqZWN0OwotICBHTGlzdCAqb2JqcyA9IE5VTEwsICp0bXA7Ci0gIERlc3Ryb3llZE9iamVjdFN0cnVjdCAqZGVzdHJveWVkID0gZ19zbGljZV9uZXcwIChEZXN0cm95ZWRPYmplY3RTdHJ1Y3QpOwotCi0gIGRlc3Ryb3llZC0+b2JqZWN0ID0gb2JqZWN0X3RvX3VucmVmOwotICBnX29iamVjdF93ZWFrX3JlZiAob2JqZWN0X3RvX3VucmVmLCAoR1dlYWtOb3RpZnkpIHdlYWtfbm90aWZ5LCBkZXN0cm95ZWQpOwotICBvYmpzID0gZ19saXN0X3ByZXBlbmQgKG9ianMsIGRlc3Ryb3llZCk7Ci0KLSAgaWYgKGZpcnN0X29iamVjdCkgewotICAgIHZhX2xpc3QgdmFyYXJnczsKLQotICAgIG9iamVjdCA9IGZpcnN0X29iamVjdDsKLQotICAgIHZhX3N0YXJ0ICh2YXJhcmdzLCBmaXJzdF9vYmplY3QpOwotICAgIHdoaWxlIChvYmplY3QpIHsKLSAgICAgIGRlc3Ryb3llZCA9IGdfc2xpY2VfbmV3MCAoRGVzdHJveWVkT2JqZWN0U3RydWN0KTsKLSAgICAgIGRlc3Ryb3llZC0+b2JqZWN0ID0gb2JqZWN0OwotICAgICAgZ19vYmplY3Rfd2Vha19yZWYgKG9iamVjdCwgKEdXZWFrTm90aWZ5KSB3ZWFrX25vdGlmeSwgZGVzdHJveWVkKTsKLSAgICAgIG9ianMgPSBnX2xpc3RfcHJlcGVuZCAob2JqcywgZGVzdHJveWVkKTsKLSAgICAgIG9iamVjdCA9IHZhX2FyZyAodmFyYXJncywgR09iamVjdCAqKTsKLSAgICB9Ci0gICAgdmFfZW5kICh2YXJhcmdzKTsKLSAgfQotICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3RfdG9fdW5yZWYpOwotCi0gIGZvciAodG1wID0gb2JqczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKLSAgICBEZXN0cm95ZWRPYmplY3RTdHJ1Y3QgKmRlc3Ryb3llZCA9IHRtcC0+ZGF0YTsKLQotICAgIGlmICghZGVzdHJveWVkLT5kZXN0cm95ZWQpIHsKLSAgICAgIGZhaWxfdW5sZXNzIChkZXN0cm95ZWQtPmRlc3Ryb3llZCwKLSAgICAgICAgICAiJXNfJXAgaXMgbm90IGRlc3Ryb3llZCwgJWQgcmVmY291bnRzIGxlZnQhIiwKLSAgICAgICAgICBHU1RfSVNfT0JKRUNUIChkZXN0cm95ZWQtPgotICAgICAgICAgICAgICBvYmplY3QpID8gR1NUX09CSkVDVF9OQU1FIChkZXN0cm95ZWQtPm9iamVjdCkgOgotICAgICAgICAgIEdfT0JKRUNUX1RZUEVfTkFNRSAoZGVzdHJveWVkKSwgZGVzdHJveWVkLT5vYmplY3QsCi0gICAgICAgICAgZGVzdHJveWVkLT5vYmplY3QtPnJlZl9jb3VudCk7Ci0gICAgfQotICAgIGdfc2xpY2VfZnJlZSAoRGVzdHJveWVkT2JqZWN0U3RydWN0LCB0bXAtPmRhdGEpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChvYmpzKTsKLX0KLQotLyoqCi0gKiBnc3RfY2hlY2tfb2JqZWN0X2Rlc3Ryb3llZF9vbl91bnJlZjoKLSAqIEBvYmplY3RfdG9fdW5yZWY6IFRoZSAjR09iamVjdCB0byB1bnJlZgotICoKLSAqIFVucmVmcyBAb2JqZWN0X3RvX3VucmVmIGFuZCBjaGVja3MgdGhhdCBpcyBoYXMgcHJvcGVybHkgYmVlbgotICogZGVzdHJveWVkLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2NoZWNrX29iamVjdF9kZXN0cm95ZWRfb25fdW5yZWYgKGdwb2ludGVyIG9iamVjdF90b191bnJlZikKLXsKLSAgZ3N0X2NoZWNrX29iamVjdHNfZGVzdHJveWVkX29uX3VucmVmIChvYmplY3RfdG9fdW5yZWYsIE5VTEwsIE5VTEwpOwotfQotCi0vKiBGb3IgQUJJIGNvbXBhdGliaWxpdHkgd2l0aCBHU3RyZWFtZXIgPCAxLjUgKi8KLS8qICpJTkRFTlQtT0ZGKiAqLwotdm9pZAotX2ZhaWxfdW5sZXNzIChpbnQgcmVzdWx0LCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZXhwciwgLi4uKQotR19HTlVDX1BSSU5URiAoNCwgNSk7Ci0vKiAqSU5ERU5ULU9OKiAqLwotCi12b2lkCi1fZmFpbF91bmxlc3MgKGludCByZXN1bHQsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpleHByLCAuLi4pCi17Ci0gIGdjaGFyICptc2c7Ci0gIHZhX2xpc3QgYXJnczsKLQotICBpZiAocmVzdWx0KSB7Ci0gICAgX21hcmtfcG9pbnQgKGZpbGUsIGxpbmUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHZhX3N0YXJ0IChhcmdzLCBleHByKTsKLSAgbXNnID0gZ19zdHJkdXBfdnByaW50ZiAoZXhwciwgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgX2NrX2Fzc2VydF9mYWlsZWQgKGZpbGUsIGxpbmUsIG1zZywgTlVMTCk7Ci0gIGdfZnJlZSAobXNnKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmggYi9saWJzL2dzdC9jaGVjay9nc3RjaGVjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGRjMzI0Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2dzdGNoZWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MjkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29tbW9uIGNvZGUgZm9yIEdTdHJlYW1lciB1bml0dGVzdHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA0PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA4PiBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQ0hFQ0tfSF9fCi0jZGVmaW5lIF9fR1NUX0NIRUNLX0hfXwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2ludGVybmFsLWNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoY2hlY2tfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY2hlY2tfZGVidWcKLQotLyogbG9nZ2luZyBmdW5jdGlvbiBmb3IgdGVzdHMKLSAqIGEgdGVzdCB1c2VzIGdfbWVzc2FnZSgpIHRvIGxvZyBhIGRlYnVnIGxpbmUKLSAqIGEgZ3N0IHVuaXQgdGVzdCBjYW4gYmUgcnVuIHdpdGggR1NUX1RFU1RfREVCVUcgZW52IHZhciBzZXQgdG8gc2VlIHRoZQotICogbWVzc2FnZXMKLSAqLwotZXh0ZXJuIGdib29sZWFuIF9nc3RfY2hlY2tfdGhyZWFkc19ydW5uaW5nOwotZXh0ZXJuIGdib29sZWFuIF9nc3RfY2hlY2tfcmFpc2VkX2NyaXRpY2FsOwotZXh0ZXJuIGdib29sZWFuIF9nc3RfY2hlY2tfcmFpc2VkX3dhcm5pbmc7Ci1leHRlcm4gZ2Jvb2xlYW4gX2dzdF9jaGVja19leHBlY3RpbmdfbG9nOwotCi0vKiBnbG9iYWwgdmFyaWFibGVzIHVzZWQgaW4gdGVzdCBtZXRob2RzICovCi1leHRlcm4gR0xpc3QgKiBidWZmZXJzOwotCi1leHRlcm4gR011dGV4IGNoZWNrX211dGV4OwotZXh0ZXJuIEdDb25kIGNoZWNrX2NvbmQ7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIGludCBzaXplOwotICBpbnQgYWJpX3NpemU7Ci19Ci1Hc3RDaGVja0FCSVN0cnVjdDsKLQotdm9pZCBnc3RfY2hlY2tfaW5pdCAoaW50ICphcmdjLCBjaGFyICoqYXJndltdKTsKLQotR3N0Rmxvd1JldHVybiBnc3RfY2hlY2tfY2hhaW5fZnVuYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXZvaWQgZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3IgKEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RNZXNzYWdlVHlwZSB0eXBlLAotICAgIEdRdWFyayBkb21haW4sIGdpbnQgY29kZSk7Ci0KLUdzdEVsZW1lbnQgKmdzdF9jaGVja19zZXR1cF9lbGVtZW50IChjb25zdCBnY2hhciAqIGZhY3RvcnkpOwotdm9pZCBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotR3N0UGFkICpnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsKTsKLUdzdFBhZCAqZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfZnJvbV90ZW1wbGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0bXBsKTsKLUdzdFBhZCAqIGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgICAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdG1wbCwgY29uc3QgZ2NoYXIgKm5hbWUpOwotR3N0UGFkICogZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICAgICAgICBHc3RQYWRUZW1wbGF0ZSAqIHRtcGwsIGNvbnN0IGdjaGFyICpuYW1lKTsKLUdzdFBhZCAqZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRtcGwpOwotR3N0UGFkICpnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfZnJvbV90ZW1wbGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0bXBsKTsKLUdzdFBhZCAqIGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lIChHc3RFbGVtZW50ICogZWxlbWVudCwgCi0gICAgICAgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsLCBjb25zdCBnY2hhciAqbmFtZSk7Ci1Hc3RQYWQgKiBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWRfYnlfbmFtZV9mcm9tX3RlbXBsYXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgCi0gICAgICAgICAgR3N0UGFkVGVtcGxhdGUgKiB0bXBsLCBjb25zdCBnY2hhciAqbmFtZSk7Ci12b2lkIGdzdF9jaGVja190ZWFyZG93bl9wYWRfYnlfbmFtZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGNvbnN0IGdjaGFyICpuYW1lKTsKLXZvaWQgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLXZvaWQgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAodm9pZCk7Ci12b2lkIGdzdF9jaGVja19jYXBzX2VxdWFsIChHc3RDYXBzICogY2FwczEsIEdzdENhcHMgKiBjYXBzMik7Ci12b2lkIGdzdF9jaGVja19idWZmZXJfZGF0YSAoR3N0QnVmZmVyICogYnVmZmVyLCBnY29uc3Rwb2ludGVyIGRhdGEsIGdzaXplIHNpemUpOwotdm9pZCBnc3RfY2hlY2tfZWxlbWVudF9wdXNoX2J1ZmZlcl9saXN0IChjb25zdCBnY2hhciAqIGVsZW1lbnRfbmFtZSwKLSAgICBHTGlzdCAqIGJ1ZmZlcl9pbiwgR3N0Q2FwcyAqIGNhcHNfaW4sIEdMaXN0ICogYnVmZmVyX291dCwKLSAgICBHc3RDYXBzICogY2Fwc19vdXQsIEdzdEZsb3dSZXR1cm4gbGFzdF9mbG93X3JldHVybik7Ci12b2lkIGdzdF9jaGVja19lbGVtZW50X3B1c2hfYnVmZmVyIChjb25zdCBnY2hhciAqIGVsZW1lbnRfbmFtZSwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXJfaW4sIEdzdENhcHMgKiBjYXBzX2luLCBHc3RCdWZmZXIgKiBidWZmZXJfb3V0LAotICAgIEdzdENhcHMgKmNhcHNfb3V0KTsKLXZvaWQgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCk7Ci12b2lkIGdzdF9jaGVja19hYmlfbGlzdCAoR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdLCBnYm9vbGVhbiBoYXZlX2FiaV9zaXplcyk7Ci1naW50IGdzdF9jaGVja19ydW5fc3VpdGUgKFN1aXRlICogc3VpdGUsIGNvbnN0IGdjaGFyICogbmFtZSwKLSAgICBjb25zdCBnY2hhciAqIGZuYW1lKTsKLXZvaWQgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAoR3N0UGFkICogc3JjcGFkLCBHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RDYXBzICogY2FwcywgR3N0Rm9ybWF0IGZvcm1hdCk7Ci12b2lkIGdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWQgKEdzdFBhZCAqIHNyY3BhZCwKLSAgICBHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0Q2FwcyAqIGNhcHMsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgY29uc3QgZ2NoYXIgKiBzdHJlYW1faWQpOwotdm9pZCBnc3RfY2hlY2tfb2JqZWN0c19kZXN0cm95ZWRfb25fdW5yZWYgKGdwb2ludGVyIG9iamVjdF90b191bnJlZiwgZ3BvaW50ZXIgZmlyc3Rfb2JqZWN0LCAuLi4pCi0gIEdfR05VQ19OVUxMX1RFUk1JTkFURUQ7Ci12b2lkIGdzdF9jaGVja19vYmplY3RfZGVzdHJveWVkX29uX3VucmVmIChncG9pbnRlciBvYmplY3RfdG9fdW5yZWYpOwotCi0jZGVmaW5lIGZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3IobXNnLCBkb21haW4sIGNvZGUpICAgICAgICAgICAgXAotZ3N0X2NoZWNrX21lc3NhZ2VfZXJyb3IgKG1zZywgR1NUX01FU1NBR0VfRVJST1IsICAgICAgICAgICAgICAgIFwKLSAgR1NUXyAjIyBkb21haW4gIyMgX0VSUk9SLCBHU1RfICMjIGRvbWFpbiAjIyBfRVJST1JfICMjIGNvZGUpCi0jZGVmaW5lIGFzc2VydF9tZXNzYWdlX2Vycm9yKG0sIGQsIGMpIGZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3IobSwgZCwgYykKLQotI2lmZGVmIEdTVF9DSEVDS19URVNUX0VOVklST05NRU5UX0JFQUNPTgotI2RlZmluZSBHU1RfRE9fQ0hFQ0tfVEVTVF9FTlZJUk9OTUVOVCBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGdfZ2V0ZW52IChHU1RfQ0hFQ0tfVEVTVF9FTlZJUk9OTUVOVF9CRUFDT04pID09IE5VTEwpIFwKLSAgICBmYWlsICgiVGVzdCBlbnZpcm9ubWVudCBub3Qgc2V0IHVwIGNvcnJlY3RseSEgRXhwZWN0ZWQgZW52aXJvbm1lbnQgIiBcCi0gICAgICAgInZhcmlhYmxlICclcycgdG8gYmUgc2V0LiIsIEdTVF9DSEVDS19URVNUX0VOVklST05NRU5UX0JFQUNPTik7IFwKLX0gR19TVE1UX0VORAotCi0jZWxzZQotI2RlZmluZSBHU1RfRE9fQ0hFQ0tfVEVTVF9FTlZJUk9OTUVOVCAvKiBub3RoaW5nIHRvIGNoZWNrICovCi0jZW5kaWYKLQotLyoqCi0gKiBHU1RfU1RBUlRfVEVTVDoKLSAqIEBfX3Rlc3RuYW1lOiB0ZXN0IGZ1bmN0aW9uIG5hbWUKLSAqCi0gKiB3cmFwcGVyIGZvciBjaGVja3MgU1RBUlRfVEVTVAotICovCi0vKioKLSAqIEdTVF9FTkRfVEVTVDoKLSAqCi0gKiB3cmFwcGVyIGZvciBjaGVja3MgRU5EX1RFU1QKLSAqLwotI2RlZmluZSBHU1RfU1RBUlRfVEVTVChfX3Rlc3RuYW1lKSBcCi1zdGF0aWMgdm9pZCBfX3Rlc3RuYW1lIChpbnQgR19HTlVDX1VOVVNFRCBfX2lfXykgXAote1wKLSAgR1NUX0RFQlVHICgidGVzdCBzdGFydCIpOyBcCi0gIEdTVF9ET19DSEVDS19URVNUX0VOVklST05NRU5UOyBcCi0gIHRjYXNlX2ZuX3N0YXJ0ICgiIiMgX190ZXN0bmFtZSwgX19GSUxFX18sIF9fTElORV9fKTsKLQotI2RlZmluZSBHU1RfRU5EX1RFU1QgR1NUX0xPRyAoImNsZWFuaW5nIHVwIHRhc2tzIik7IFwKLSAgICAgICAgICAgICAgICAgICAgIGdzdF90YXNrX2NsZWFudXBfYWxsICgpOyBcCi0gICAgICAgICAgICAgICAgICAgICBFTkRfVEVTVAotCi0vKiBhZGRpdGlvbmFsIGZhaWwgbWFjcm9zICovCi0vKioKLSAqIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ6Ci0gKiBAYTogYSAjZ2ludCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKiBAYjogYSAjZ2ludCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKgotICogVGhpcyBtYWNybyBjaGVja3MgdGhhdCBAYSBhbmQgQGIgYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCi0gKiBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvLiBUaGlzCi0gKiBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCi0gKi8KLSNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX2ludChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW50IGZpcnN0ID0gYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW50IHNlY29uZCA9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZmFpbF91bmxlc3MoZmlyc3QgPT0gc2Vjb25kLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiJyIgI2EgIicgKCVkKSBpcyBub3QgZXF1YWwgdG8gJyIgI2IiJyAoJWQpIiwgZmlyc3QsIHNlY29uZCk7ICAgICAgIFwKLX0gR19TVE1UX0VORDsKLS8qKgotICogYXNzZXJ0X2VxdWFsc19pbnQ6Ci0gKiBAYTogYSAjZ2ludCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKiBAYjogYSAjZ2ludCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKgotICogVGhpcyBtYWNybyBjaGVja3MgdGhhdCBAYSBhbmQgQGIgYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCi0gKiBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvLiBUaGlzCi0gKiBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCi0gKi8KLSNkZWZpbmUgYXNzZXJ0X2VxdWFsc19pbnQoYSwgYikgZmFpbF91bmxlc3NfZXF1YWxzX2ludChhLCBiKQotCi0vKioKLSAqIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4OgotICogQGE6IGEgI2dpbnQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICogQGI6IGEgI2dpbnQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0byBpbgotICogaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLSNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXgoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7CQkJCQkJCQlcCi0gIGludCBmaXJzdCA9IGE7CQkJCQkJCVwKLSAgaW50IHNlY29uZCA9IGI7CQkJCQkJCVwKLSAgZmFpbF91bmxlc3MoZmlyc3QgPT0gc2Vjb25kLAkJCQkJCVwKLSAgICAiJyIgI2EgIicgKDB4JTA4eCkgaXMgbm90IGVxdWFsIHRvICciICNiIicgKDB4JTA4eCkiLCBmaXJzdCwgc2Vjb25kKTtcCi19IEdfU1RNVF9FTkQ7Ci0KLS8qKgotICogYXNzZXJ0X2VxdWFsc19pbnRfaGV4OgotICogQGE6IGEgI2dpbnQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICogQGI6IGEgI2dpbnQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0byBpbgotICogaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLSNkZWZpbmUgYXNzZXJ0X2VxdWFsc19pbnRfaGV4KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4KGEsIGIpCi0KLS8qKgotICogZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0OgotICogQGE6IGEgI2dpbnQ2NCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKiBAYjogYSAjZ2ludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqCi0gKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKLSAqIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8uIFRoaXMKLSAqIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqLwotI2RlZmluZSBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnaW50NjQgZmlyc3QgPSBhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnaW50NjQgc2Vjb25kID0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmYWlsX3VubGVzcyhmaXJzdCA9PSBzZWNvbmQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICInIiAjYSAiJyAoJSIgR19HSU5UNjRfRk9STUFUIikgaXMgbm90IGVxdWFsIHRvICciICNiIicgKCUiICAgICAgICAgXAotICAgIEdfR0lOVDY0X0ZPUk1BVCIpIiwgZmlyc3QsIHNlY29uZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5EOwotLyoqCi0gKiBhc3NlcnRfZXF1YWxzX2ludDY0OgotICogQGE6IGEgI2dpbnQ2NCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKiBAYjogYSAjZ2ludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqCi0gKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKLSAqIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8uIFRoaXMKLSAqIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqLwotI2RlZmluZSBhc3NlcnRfZXF1YWxzX2ludDY0KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NChhLCBiKQotCi0vKioKLSAqIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXg6Ci0gKiBAYTogYSAjZ2ludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqIEBiOiBhICNnaW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0byBpbgotICogaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLSNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0X2hleChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7CQkJCQkJCQlcCi0gIGdpbnQ2NCBmaXJzdCA9IGE7CQkJCQkJCVwKLSAgZ2ludDY0IHNlY29uZCA9IGI7CQkJCQkJCVwKLSAgZmFpbF91bmxlc3MoZmlyc3QgPT0gc2Vjb25kLAkJCQkJCVwKLSAgICAiJyIgI2EgIicgKDB4JTAxNngpIGlzIG5vdCBlcXVhbCB0byAnIiAjYiInICgweCUwMTZ4KSIsIGZpcnN0LCBzZWNvbmQpO1wKLX0gR19TVE1UX0VORDsKLS8qKgotICogYXNzZXJ0X2VxdWFsc19pbnQ2NF9oZXg6Ci0gKiBAYTogYSAjZ2ludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqIEBiOiBhICNnaW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0byBpbgotICogaGV4YWRlY2ltYWwgZm9ybWF0LiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLSNkZWZpbmUgYXNzZXJ0X2VxdWFsc19pbnQ2NF9oZXgoYSxiKSBmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4KGEsYikKLQotLyoqCi0gKiBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0OgotICogQGE6IGEgI2d1aW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICogQGI6IGEgI2d1aW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcwotICogbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgotICovCi0jZGVmaW5lIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGd1aW50NjQgZmlyc3QgPSBhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGd1aW50NjQgc2Vjb25kID0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZhaWxfdW5sZXNzKGZpcnN0ID09IHNlY29uZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiciICNhICInICglIiBHX0dVSU5UNjRfRk9STUFUICIpIGlzIG5vdCBlcXVhbCB0byAnIiAjYiInICglIiAgICAgICBcCi0gICAgR19HVUlOVDY0X0ZPUk1BVCAiKSIsIGZpcnN0LCBzZWNvbmQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQ7Ci0vKioKLSAqIGFzc2VydF9lcXVhbHNfdWludDY0OgotICogQGE6IGEgI2d1aW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICogQGI6IGEgI2d1aW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMgaXMgbm90IHRoZQotICogY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5IGV2YWx1YXRlZCB0by4gVGhpcwotICogbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgotICovCi0jZGVmaW5lIGFzc2VydF9lcXVhbHNfdWludDY0KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQoYSwgYikKLQotLyoqCi0gKiBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0X2hleDoKLSAqIEBhOiBhICNnaW50NjQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICogQGI6IGEgI2dpbnQ2NCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKgotICogVGhpcyBtYWNybyBjaGVja3MgdGhhdCBAYSBhbmQgQGIgYXJlIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcyBpcyBub3QgdGhlCi0gKiBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkIHRvIGluCi0gKiBoZXhhZGVjaW1hbCBmb3JtYXQuIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotI2RlZmluZSBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0X2hleChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsJCQkJCQkJCVwKLSAgZ3VpbnQ2NCBmaXJzdCA9IGE7CQkJCQkJCVwKLSAgZ3VpbnQ2NCBzZWNvbmQgPSBiOwkJCQkJCQlcCi0gIGZhaWxfdW5sZXNzKGZpcnN0ID09IHNlY29uZCwJCQkJCQlcCi0gICAgIiciICNhICInICgweCUwMTZ4KSBpcyBub3QgZXF1YWwgdG8gJyIgI2IiJyAoMHglMDE2eCkiLCBmaXJzdCwgc2Vjb25kKTtcCi19IEdfU1RNVF9FTkQ7Ci0vKioKLSAqIGFzc2VydF9lcXVhbHNfdWludDY0X2hleDoKLSAqIEBhOiBhICNndWludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqIEBiOiBhICNndWludDY0IHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqCi0gKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzIGlzIG5vdCB0aGUKLSAqIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQgdG8gaW4KLSAqIGhleGFkZWNpbWFsIGZvcm1hdC4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCi0gKgotICogU2luY2U6IDEuMgotICovCi0jZGVmaW5lIGFzc2VydF9lcXVhbHNfdWludDY0X2hleChhLGIpIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjRfaGV4KGEsYikKLQotLyoqCi0gKiBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nOgotICogQGE6IGEgc3RyaW5nIGxpdGVyYWwgb3IgZXhwcmVzc2lvbgotICogQGI6IGEgc3RyaW5nIGxpdGVyYWwgb3IgZXhwcmVzc2lvbgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCAoYXMgcGVyIHN0cmNtcCkgYW5kIGFib3J0cyBpZgotICogdGhpcyBpcyBub3QgdGhlIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleQotICogZXZhbHVhdGVkIHRvLiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqLwotI2RlZmluZSBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY29uc3QgZ2NoYXIgKiBmaXJzdCA9IGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjb25zdCBnY2hhciAqIHNlY29uZCA9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZhaWxfdW5sZXNzKGdfc3RyY21wMCAoZmlyc3QsIHNlY29uZCkgPT0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiJyIgI2EgIicgKCVzKSBpcyBub3QgZXF1YWwgdG8gJyIgI2IiJyAoJXMpIiwgZmlyc3QsIHNlY29uZCk7ICAgXAotfSBHX1NUTVRfRU5EOwotLyoqCi0gKiBhc3NlcnRfZXF1YWxzX3N0cmluZzoKLSAqIEBhOiBhIHN0cmluZyBsaXRlcmFsIG9yIGV4cHJlc3Npb24KLSAqIEBiOiBhIHN0cmluZyBsaXRlcmFsIG9yIGV4cHJlc3Npb24KLSAqCi0gKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgZXF1YWwgKGFzIHBlciBzdHJjbXApIGFuZCBhYm9ydHMgaWYKLSAqIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkKLSAqIGV2YWx1YXRlZCB0by4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCi0gKi8KLSNkZWZpbmUgYXNzZXJ0X2VxdWFsc19zdHJpbmcoYSwgYikgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyhhLCBiKQotCi0vKioKLSAqIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdDoKLSAqIEBhOiBhICNnZG91YmxlIG9yICNnZmxvYXQgdmFsdWUgb3IgZXhwcmVzc2lvbgotICogQGI6IGEgI2dkb3VibGUgb3IgI2dmbG9hdCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKgotICogVGhpcyBtYWNybyBjaGVja3MgdGhhdCBAYSBhbmQgQGIgYXJlIChhbG1vc3QpIGVxdWFsIGFuZCBhYm9ydHMgaWYgdGhpcwotICogaXMgbm90IHRoZSBjYXNlLCBwcmludGluZyBib3RoIGV4cHJlc3Npb25zIGFuZCB0aGUgdmFsdWVzIHRoZXkgZXZhbHVhdGVkCi0gKiB0by4gVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHVuaXQgdGVzdHMuCi0gKi8KLSNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG91YmxlIGZpcnN0ID0gYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG91YmxlIHNlY29uZCA9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLyogVGhpcyB3aWxsIG9ubHkgd29yayBmb3IgJ25vcm1hbCcgdmFsdWVzIGFuZCB2YWx1ZXMgYXJvdW5kIDAsIFwKLSAgICogd2hpY2ggc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBvdXIgcHVycG9zZXMgaGVyZSAqLyAgICAgICAgIFwKLSAgZmFpbF91bmxlc3MoZmFicyAoZmlyc3QgLSBzZWNvbmQpIDwgMC4wMDAwMDAxLCAgICAgICAgICAgICAgICAgIFwKLSAgICAiJyIgI2EgIicgKCVnKSBpcyBub3QgZXF1YWwgdG8gJyIgI2IgIicgKCVnKSIsIGZpcnN0LCBzZWNvbmQpO1wKLX0gR19TVE1UX0VORDsKLQotLyoqCi0gKiBhc3NlcnRfZXF1YWxzX2Zsb2F0OgotICogQGE6IGEgI2dkb3VibGUgb3IgI2dmbG9hdCB2YWx1ZSBvciBleHByZXNzaW9uCi0gKiBAYjogYSAjZ2RvdWJsZSBvciAjZ2Zsb2F0IHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqCi0gKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgKGFsbW9zdCkgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzCi0gKiBpcyBub3QgdGhlIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleSBldmFsdWF0ZWQKLSAqIHRvLiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqLwotI2RlZmluZSBhc3NlcnRfZXF1YWxzX2Zsb2F0KGEsIGIpIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdChhLCBiKQotCi0vKioKLSAqIGZhaWxfdW5sZXNzX2VxdWFsc19wb2ludGVyOgotICogQGE6IGEgcG9pbnRlciB2YWx1ZSBvciBleHByZXNzaW9uCi0gKiBAYjogYSBwb2ludGVyIHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqCi0gKiBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IEBhIGFuZCBAYiBhcmUgZXF1YWwgYW5kIGFib3J0cyBpZiB0aGlzCi0gKiBpcyBub3QgdGhlIGNhc2UsIHByaW50aW5nIGJvdGggZXhwcmVzc2lvbnMgYW5kIHRoZSB2YWx1ZXMgdGhleQotICogZXZhbHVhdGVkIHRvLiBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gdW5pdCB0ZXN0cy4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLSNkZWZpbmUgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3BvaW50ZXIgZmlyc3QgPSBhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3BvaW50ZXIgc2Vjb25kID0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZmFpbF91bmxlc3MoZmlyc3QgPT0gc2Vjb25kLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiJyIgI2EgIicgKCVwKSBpcyBub3QgZXF1YWwgdG8gJyIgI2IgIicgKCVwKSIsIGZpcnN0LCBzZWNvbmQpO1wKLX0gR19TVE1UX0VORDsKLQotLyoqCi0gKiBhc3NlcnRfZXF1YWxzX3BvaW50ZXI6Ci0gKiBAYTogYSBwb2ludGVyIHZhbHVlIG9yIGV4cHJlc3Npb24KLSAqIEBiOiBhIHBvaW50ZXIgdmFsdWUgb3IgZXhwcmVzc2lvbgotICoKLSAqIFRoaXMgbWFjcm8gY2hlY2tzIHRoYXQgQGEgYW5kIEBiIGFyZSBlcXVhbCBhbmQgYWJvcnRzIGlmIHRoaXMKLSAqIGlzIG5vdCB0aGUgY2FzZSwgcHJpbnRpbmcgYm90aCBleHByZXNzaW9ucyBhbmQgdGhlIHZhbHVlcyB0aGV5Ci0gKiBldmFsdWF0ZWQgdG8uIFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiB1bml0IHRlc3RzLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotI2RlZmluZSBhc3NlcnRfZXF1YWxzX3BvaW50ZXIoYSwgYikgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIoYSwgYikKLQotLyoqKgotICogdGhyZWFkIHRlc3QgbWFjcm9zIGFuZCB2YXJpYWJsZXMKLSAqLwotZXh0ZXJuIEdMaXN0ICp0aHJlYWRfbGlzdDsKLWV4dGVybiBHTXV0ZXggbXV0ZXg7Ci1leHRlcm4gR0NvbmQgc3RhcnRfY29uZDsgICAgICAgLyogdXNlZCB0byBub3RpZnkgbWFpbiB0aHJlYWQgb2YgdGhyZWFkIHN0YXJ0dXBzICovCi1leHRlcm4gR0NvbmQgc3luY19jb25kOyAgICAgICAgLyogdXNlZCB0byBzeW5jaHJvbml6ZSBhbGwgdGhyZWFkcyBhbmQgbWFpbiB0aHJlYWQgKi8KLQotI2RlZmluZSBNQUlOX1NUQVJUX1RIUkVBRFMoY291bnQsIGZ1bmN0aW9uLCBkYXRhKSAgICAgICAgICAgICAgIFwKLU1BSU5fSU5JVCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1NQUlOX1NUQVJUX1RIUkVBRF9GVU5DVElPTlMoY291bnQsIGZ1bmN0aW9uLCBkYXRhKTsgICAgICAgICAgICAgXAotTUFJTl9TWU5DSFJPTklaRSgpOwotCi0jZGVmaW5lIE1BSU5fSU5JVCgpICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19tdXRleF9pbml0ICgmbXV0ZXgpOyAgICAgICAgICAgICAgICBcCi0gIGdfY29uZF9pbml0ICgmc3RhcnRfY29uZCk7ICAgICAgICAgICAgXAotICBnX2NvbmRfaW5pdCAoJnN5bmNfY29uZCk7ICAgICAgICAgICAgIFwKLSAgX2dzdF9jaGVja190aHJlYWRzX3J1bm5pbmcgPSBUUlVFOyAgICBcCi19IEdfU1RNVF9FTkQ7Ci0KLSNkZWZpbmUgTUFJTl9TVEFSVF9USFJFQURfRlVOQ1RJT05TKGNvdW50LCBmdW5jdGlvbiwgZGF0YSkgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbnQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFJTl9TVEFSVF9USFJFQURfRlVOQ1RJT04gKGksIGZ1bmN0aW9uLCBkYXRhKTsgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORDsKLQotI2RlZmluZSBNQUlOX1NUQVJUX1RIUkVBRF9GVU5DVElPTihpLCBmdW5jdGlvbiwgZGF0YSkgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR1RocmVhZCAqdGhyZWFkID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9ERUJVRyAoIk1BSU46IGNyZWF0aW5nIHRocmVhZCAlZCIsIGkpOyAgICAgICAgICAgICAgICAgIFwKLSAgICBnX211dGV4X2xvY2sgKCZtdXRleCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdGhyZWFkID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoR1RocmVhZEZ1bmMpIGZ1bmN0aW9uLCBkYXRhLCBOVUxMKTsgICAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiB3YWl0IGZvciB0aHJlYWQgdG8gc2lnbmFsIHVzIHRoYXQgaXQncyByZWFkeSAqLyAgICAgICAgICBcCi0gICAgR1NUX0RFQlVHICgiTUFJTjogd2FpdGluZyBmb3IgdGhyZWFkICVkIiwgaSk7ICAgICAgICAgICAgICAgXAotICAgIGdfY29uZF93YWl0ICgmc3RhcnRfY29uZCwgJm11dGV4KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX211dGV4X3VubG9jayAoJm11dGV4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRocmVhZF9saXN0ID0gZ19saXN0X2FwcGVuZCAodGhyZWFkX2xpc3QsIHRocmVhZCk7ICAgICAgICAgIFwKLX0gR19TVE1UX0VORDsKLQotCi0jZGVmaW5lIE1BSU5fU1lOQ0hST05JWkUoKSAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR1NUX0RFQlVHICgiTUFJTjogc3luY2hyb25pemluZyIpOyAgICBcCi0gIGdfY29uZF9icm9hZGNhc3QgKCZzeW5jX2NvbmQpOyAgICAgICAgXAotICBHU1RfREVCVUcgKCJNQUlOOiBzeW5jaHJvbml6ZWQiKTsgICAgIFwKLX0gR19TVE1UX0VORDsKLQotI2RlZmluZSBNQUlOX1NUT1BfVEhSRUFEUygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9nc3RfY2hlY2tfdGhyZWFkc19ydW5uaW5nID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLyogam9pbiBhbGwgdGhyZWFkcyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdTVF9ERUJVRyAoIk1BSU46IGpvaW5pbmciKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX2xpc3RfZm9yZWFjaCAodGhyZWFkX2xpc3QsIChHRnVuYykgZ190aHJlYWRfam9pbiwgTlVMTCk7ICAgIFwKLSAgZ19saXN0X2ZyZWUgKHRocmVhZF9saXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRocmVhZF9saXN0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX211dGV4X2NsZWFyICgmbXV0ZXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19jb25kX2NsZWFyICgmc3RhcnRfY29uZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfY29uZF9jbGVhciAoJnN5bmNfY29uZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJNQUlOOiBqb2luZWQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORDsKLQotI2RlZmluZSBUSFJFQURfU1RBUlQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLVRIUkVBRF9TVEFSVEVEKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1USFJFQURfU1lOQ0hST05JWkUoKTsKLQotI2RlZmluZSBUSFJFQURfU1RBUlRFRCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC8qIHNpZ25hbCBtYWluIHRocmVhZCB0aGF0IHdlIHN0YXJ0ZWQgKi8gICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJUSFJFQUQgJXA6IHN0YXJ0ZWQiLCBnX3RocmVhZF9zZWxmICgpKTsgICAgICAgICAgIFwKLSAgZ19tdXRleF9sb2NrICgmbXV0ZXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfY29uZF9zaWduYWwgKCZzdGFydF9jb25kKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5EOwotCi0jZGVmaW5lIFRIUkVBRF9TWU5DSFJPTklaRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgLyogc3luY2hyb25pemUgZXZlcnlvbmUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdTVF9ERUJVRyAoIlRIUkVBRCAlcDogc3luY2luZyIsIGdfdGhyZWFkX3NlbGYgKCkpOyAgICAgICAgICAgXAotICBmYWlsX2lmIChnX211dGV4X3RyeWxvY2sgKCZtdXRleCksICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICJidWcgaW4gdW5pdCB0ZXN0LCBtdXRleCBzaG91bGQgYmUgbG9ja2VkIGF0IHRoaXMgcG9pbnQiKTtcCi0gIGdfY29uZF93YWl0ICgmc3luY19jb25kLCAmbXV0ZXgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJUSFJFQUQgJXA6IHN5bmNlZCIsIGdfdGhyZWFkX3NlbGYgKCkpOyAgICAgICAgICAgIFwKLSAgZ19tdXRleF91bmxvY2sgKCZtdXRleCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQ7Ci0KLSNkZWZpbmUgVEhSRUFEX1NXSVRDSCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBhIG1pbmltYWwgc2xlZXAgaXMgYSBjb250ZXh0IHN3aXRjaCAqLyAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ191c2xlZXAgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQ7Ci0KLSNkZWZpbmUgVEhSRUFEX1RFU1RfUlVOTklORygpICAgKCEhX2dzdF9jaGVja190aHJlYWRzX3J1bm5pbmcpCi0KLS8qIGFkZGl0aW9uYWwgYXNzZXJ0aW9ucyAqLwotI2RlZmluZSBBU1NFUlRfQ1JJVElDQUwoY29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9nc3RfY2hlY2tfZXhwZWN0aW5nX2xvZyA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfZ3N0X2NoZWNrX3JhaXNlZF9jcml0aWNhbCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICghX2dzdF9jaGVja19yYWlzZWRfY3JpdGljYWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9ja19hc3NlcnRfZmFpbGVkIChfX0ZJTEVfXywgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIkV4cGVjdGVkIGdfY3JpdGljYWwsIGdvdCBub3RoaW5nIiwgTlVMTCk7ICAgICAgICAgICAgICBcCi0gIF9nc3RfY2hlY2tfZXhwZWN0aW5nX2xvZyA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgQVNTRVJUX1dBUk5JTkcoY29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfZ3N0X2NoZWNrX2V4cGVjdGluZ19sb2cgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX2dzdF9jaGVja19yYWlzZWRfd2FybmluZyA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoIV9nc3RfY2hlY2tfcmFpc2VkX3dhcm5pbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfY2tfYXNzZXJ0X2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJFeHBlY3RlZCBnX3dhcm5pbmcsIGdvdCBub3RoaW5nIiwgTlVMTCk7ICAgICAgICAgICAgICAgXAotICBfZ3N0X2NoZWNrX2V4cGVjdGluZ19sb2cgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0KLSNkZWZpbmUgQVNTRVJUX09CSkVDVF9SRUZDT1VOVChvYmplY3QsIG5hbWUsIHZhbHVlKSAgICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbnQgcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmMgPSBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChvYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZhaWxfdW5sZXNzIChyYyA9PSB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIiVzICglcCkgcmVmY291bnQgaXMgJWQgaW5zdGVhZCBvZiAlZCIsICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIG5hbWUsIG9iamVjdCwgcmMsIHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UX0JFVFdFRU4ob2JqZWN0LCBuYW1lLCBsb3dlciwgdXBwZXIpICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbnQgcmMgPSBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChvYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbnQgbG8gPSBsb3dlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbnQgaGkgPSB1cHBlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmYWlsX3VubGVzcyAocmMgPj0gbG8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIiVzICglcCkgcmVmY291bnQgJWQgaXMgc21hbGxlciB0aGFuICVkIiwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgbmFtZSwgb2JqZWN0LCByYywgbG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmYWlsX3VubGVzcyAocmMgPD0gaGksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgIiVzICglcCkgcmVmY291bnQgJWQgaXMgYmlnZ2VyIHRoYW4gJWQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgbmFtZSwgb2JqZWN0LCByYywgaGkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLQotI2RlZmluZSBBU1NFUlRfQ0FQU19SRUZDT1VOVChjYXBzLCBuYW1lLCB2YWx1ZSkgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UKGNhcHMsIG5hbWUsIHZhbHVlKQotCi0jZGVmaW5lIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQoYnVmZmVyLCBuYW1lLCB2YWx1ZSkgICAgICAgICAgICAgXAotICAgICAgICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQoYnVmZmVyLCBuYW1lLCB2YWx1ZSkKLQotI2RlZmluZSBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQobWluaW9iaiwgbmFtZSwgdmFsdWUpICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludCByYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByYyA9IEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAobWluaW9iaik7ICAgICAgICAgICAgICAgIFwKLSAgZmFpbF91bmxlc3MgKHJjID09IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBuYW1lICIgKCVwKSByZWZjb3VudCBpcyAlZCBpbnN0ZWFkIG9mICVkIiwgbWluaW9iaiwgcmMsIHZhbHVlKTsgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgQVNTRVJUX1NFVF9TVEFURShlbGVtZW50LCBzdGF0ZSwgcmV0KSAgICAgICAgICAgICAgICAgICBcCi1mYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVChlbGVtZW50KSwgICAgICAgXAotICBzdGF0ZSkgPT0gcmV0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgImNvdWxkIG5vdCBjaGFuZ2Ugc3RhdGUgdG8gIiAjc3RhdGUpOwotCi0jZGVmaW5lIEdTVF9DSEVDS19NQUlOKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFN1aXRlICpzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfY2hlY2tfaW5pdCAoJmFyZ2MsICZhcmd2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcyA9IG5hbWUgIyMgX3N1aXRlICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiBnc3RfY2hlY2tfcnVuX3N1aXRlIChzLCAjIG5hbWUsIF9fRklMRV9fKTsgICAgICAgICAgICAgXAotfQotCi0vKiBIYWNrIHRvIGFsbG93IHJ1bi10aW1lIHNlbGVjdGlvbiBvZiB1bml0IHRlc3RzIHRvIHJ1biB2aWEgdGhlCi0gKiBHU1RfQ0hFQ0tTIGVudmlyb25tZW50IHZhcmlhYmxlICh0ZXN0IGZ1bmN0aW9uIG5hbWVzIGdsb2JzLCBjb21tYQotICogc2VwYXJhdGVkKSwgb3IgR1NUX0NIRUNLU19JR05PUkUgd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MgKi8KLQotZ2Jvb2xlYW4gX2dzdF9jaGVja19ydW5fdGVzdF9mdW5jIChjb25zdCBnY2hhciAqIGZ1bmNfbmFtZSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotX19nc3RfdGNhc2VfYWRkX3Rlc3QgKFRDYXNlICogdGMsIFRGdW4gdGYsIGNvbnN0IGNoYXIgKiBmbmFtZSwgaW50IHNpZ25hbCwKLSAgICBpbnQgYWxsb3dlZF9leGl0X3ZhbHVlLCBpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0gIGlmIChfZ3N0X2NoZWNrX3J1bl90ZXN0X2Z1bmMgKGZuYW1lKSkgewotICAgIF90Y2FzZV9hZGRfdGVzdCAodGMsIHRmLCBmbmFtZSwgc2lnbmFsLCBhbGxvd2VkX2V4aXRfdmFsdWUsIHN0YXJ0LCBlbmQpOwotICB9Ci19Ci0KLSNkZWZpbmUgX3RjYXNlX2FkZF90ZXN0IF9fZ3N0X3RjYXNlX2FkZF90ZXN0Ci0KLS8qIEEgc3BlY2lhbCB2YXJpYW50IHRvIGFkZCBicm9rZW4gdGVzdHMuIFRoZXNlIGFyZSBub3JtYWxseSBza2lwcGVkLCBidXQgY2FuIGJlIAotICogZm9yY2VkIHRvIHJ1biB2aWEgR1NUX0NIRUNLUyAqLwotI2RlZmluZSB0Y2FzZV9za2lwX2Jyb2tlbl90ZXN0KGNoYWluLHRlc3RfZnVuYykgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY29uc3QgY2hhciAqZW52ID0gZ19nZXRlbnYgKCJHU1RfQ0hFQ0tTIik7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoZW52ICE9IE5VTEwgJiYgZ19wYXR0ZXJuX21hdGNoX3NpbXBsZSAoZW52LCBHX1NUUklOR0lGWSAodGVzdF9mdW5jKSkpIHsgICBcCi0gICAgdGNhc2VfYWRkX3Rlc3QoY2hhaW4sdGVzdF9mdW5jKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX3ByaW50ZXJyICgiRklYTUU6IHNraXBwaW5nIHRlc3QgJXMgYmVjYXVzZSBpdCdzIGJyb2tlblxuIiwgR19TVFJJTkdJRlkgKHRlc3RfZnVuYykpOyBcCi0gIH0gXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgdGNhc2Vfc2tpcF9icm9rZW5fbG9vcF90ZXN0KGNoYWluLHRlc3RfZnVuYyxhLGIpICAgICAgICBcCi0gIHRjYXNlX3NraXBfYnJva2VuX3Rlc3QgKGNoYWluLCB0ZXN0X2Z1bmMpCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9DSEVDS19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5jIGIvbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNTJjNmEuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0aW5nIGhlbHBlciBsaWIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3RjaGVja2NvbnNpc3RlbmN5Y2hlY2tlcgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBEYXRhIGZsb3cgY29uc2lzdGVuY3kgY2hlY2tlciBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHMuCi0gKgotICogVGhlc2UgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb2YgdGhlIHVuaXQgdGVzdHMgZm91bmQKLSAqIGluc2lkZSB0aGUgJ2NoZWNrJyBkaXJlY3RvcmllcyBvZiB2YXJpb3VzIEdTdHJlYW1lciBwYWNrYWdlcy4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmgiCi0KLXN0cnVjdCBfR3N0U3RyZWFtQ29uc2lzdGVuY3kKLXsKLSAgLyogRklYTUU6IGRvIHdlIHdhbnQgdG8gdHJhY2sgc29tZSBzdGF0ZXMgcGVyIHBhZD8gKi8KLSAgdm9sYXRpbGUgZ2Jvb2xlYW4gZmx1c2hpbmc7Ci0gIHZvbGF0aWxlIGdib29sZWFuIHNlZ21lbnQ7Ci0gIHZvbGF0aWxlIGdib29sZWFuIGVvczsKLSAgdm9sYXRpbGUgZ2Jvb2xlYW4gZXhwZWN0X2ZsdXNoOwotICB2b2xhdGlsZSBnYm9vbGVhbiBzYXdfc2VyaWFsaXplZF9ldmVudDsKLSAgdm9sYXRpbGUgZ2Jvb2xlYW4gc2F3X3N0cmVhbV9zdGFydDsKLSAgR3N0T2JqZWN0ICpwYXJlbnQ7Ci0gIEdMaXN0ICpwYWRzOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbUNvbnNpc3RlbmN5UHJvYmUKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIGd1bG9uZyBwcm9iZWlkOwotfSBHc3RTdHJlYW1Db25zaXN0ZW5jeVByb2JlOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNvdXJjZV9wYWRfZGF0YV9jYiAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLAotICAgIEdzdFN0cmVhbUNvbnNpc3RlbmN5ICogY29uc2lzdCkKLXsKLSAgR3N0TWluaU9iamVjdCAqZGF0YSA9IEdTVF9QQURfUFJPQkVfSU5GT19EQVRBIChpbmZvKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICIlcDogJWQgJWQgJWQgJWQiLCBjb25zaXN0LCBjb25zaXN0LT5mbHVzaGluZywKLSAgICAgIGNvbnNpc3QtPnNlZ21lbnQsIGNvbnNpc3QtPmVvcywgY29uc2lzdC0+ZXhwZWN0X2ZsdXNoKTsKLQotICBpZiAoR1NUX0lTX0JVRkZFUiAoZGF0YSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsCi0gICAgICAgICJCdWZmZXIgcHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdHMgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAoR1NUX0JVRkZFUl9DQVNUIChkYXRhKSkpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RUUyAoR1NUX0JVRkZFUl9DQVNUIChkYXRhKSkpKTsKLSAgICAvKiBJZiBhbiBFT1Mgd2VudCB0aHJvdWdoLCBhIGJ1ZmZlciB3b3VsZCBiZSBpbnZhbGlkICovCi0gICAgZmFpbF9pZiAoY29uc2lzdC0+ZW9zLCAiQnVmZmVyIHJlY2VpdmVkIGFmdGVyIEVPUyBvbiBwYWQgJXM6JXMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIC8qIEJ1ZmZlcnMgbmVlZCB0byBiZSBwcmVjZWRlZCBieSBhIHNlZ21lbnQgZXZlbnQgKi8KLSAgICBmYWlsX3VubGVzcyAoY29uc2lzdC0+c2VnbWVudCwgIkJ1ZmZlciByZWNlaXZlZCB3aXRob3V0IHNlZ21lbnQgIgotICAgICAgICAib24gcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgfSBlbHNlIGlmIChHU1RfSVNfRVZFTlQgKGRhdGEpKSB7Ci0gICAgR3N0RXZlbnQgKmV2ZW50ID0gKEdzdEV2ZW50ICopIGRhdGE7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJFdmVudCA6ICVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgICAvKiBnZXR0aW5nIHR3byBmbHVzaF9zdGFydCBpbiBhIHJvdyBzZWVtcyB0byBiZSBva2F5Ci0gICAgICAgICAgIGZhaWxfaWYgKGNvbnNpc3QtPmZsdXNoaW5nLCAiUmVjZWl2ZWQgYW5vdGhlciBGTFVTSF9TVEFSVCIpOwotICAgICAgICAgKi8KLSAgICAgICAgY29uc2lzdC0+Zmx1c2hpbmcgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICAgIC8qIFJlY2VpdmluZyBhIGZsdXNoLXN0b3AgaXMgb25seSB2YWxpZCBhZnRlciByZWNlaXZpbmcgYSBmbHVzaC1zdGFydCAqLwotICAgICAgICBmYWlsX3VubGVzcyAoY29uc2lzdC0+Zmx1c2hpbmcsCi0gICAgICAgICAgICAiUmVjZWl2ZWQgYSBGTFVTSF9TVE9QIHdpdGhvdXQgYSBGTFVTSF9TVEFSVCBvbiBwYWQgJXM6JXMiLAotICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICAgICAgZmFpbF9pZiAoY29uc2lzdC0+ZW9zLCAiUmVjZWl2ZWQgYSBGTFVTSF9TVE9QIGFmdGVyIGFuIEVPUyBvbiAiCi0gICAgICAgICAgICAicGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICAgICAgY29uc2lzdC0+Zmx1c2hpbmcgPSBjb25zaXN0LT5leHBlY3RfZmx1c2ggPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6Ci0gICAgICAgIGZhaWxfaWYgKGNvbnNpc3QtPnNhd19zZXJpYWxpemVkX2V2ZW50ICYmICFjb25zaXN0LT5zYXdfc3RyZWFtX3N0YXJ0LAotICAgICAgICAgICAgIkdvdCBhIFNUUkVBTV9TVEFSVCBldmVudCBhZnRlciBhIHNlcmlhbGl6ZWQgZXZlbnQgb24gcGFkICVzOiVzIiwKLSAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgICAgIGNvbnNpc3QtPnNhd19zdHJlYW1fc3RhcnQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgICAgIC8qIG9rIHRvIGhhdmUgdGhlc2UgYmVmb3JlIHNlZ21lbnQgZXZlbnQgKi8KLSAgICAgICAgLyogRklYTUUgY2hlY2sgb3JkZXIgbW9yZSBwcmVjaXNlbHksIGlmIHNvIHNwZWMnZWQgc29tZWhvdyA/ICovCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICAgICAgZmFpbF9pZiAoKGNvbnNpc3QtPmV4cGVjdF9mbHVzaCAmJiBjb25zaXN0LT5mbHVzaGluZyksCi0gICAgICAgICAgICAiUmVjZWl2ZWQgU0VHTUVOVCB3aGlsZSBpbiBhIGZsdXNoaW5nIHNlZWsgb24gcGFkICVzOiVzIiwKLSAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgICAgIGNvbnNpc3QtPnNlZ21lbnQgPSBUUlVFOwotICAgICAgICBjb25zaXN0LT5lb3MgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICAgIC8qIEZJWE1FIDogbm90IDEwMCUgc3VyZSBhYm91dCB3aGV0aGVyIHR3byBlb3MgaW4gYSByb3cgaXMgdmFsaWQgKi8KLSAgICAgICAgZmFpbF9pZiAoY29uc2lzdC0+ZW9zLCAiUmVjZWl2ZWQgRU9TIGp1c3QgYWZ0ZXIgYW5vdGhlciBFT1Mgb24gIgotICAgICAgICAgICAgInBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgICAgIGNvbnNpc3QtPmVvcyA9IFRSVUU7Ci0gICAgICAgIGNvbnNpc3QtPnNlZ21lbnQgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9UQUc6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInRhZyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgICAgIGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCkpOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpICYmIEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpIHsKLSAgICAgICAgICBmYWlsX2lmIChjb25zaXN0LT5lb3MsICJFdmVudCByZWNlaXZlZCBhZnRlciBFT1MiKTsKLSAgICAgICAgICBmYWlsX3VubGVzcyAoY29uc2lzdC0+c2VnbWVudCwgIkV2ZW50ICVzIHJlY2VpdmVkIGJlZm9yZSBzZWdtZW50ICIKLSAgICAgICAgICAgICAgIm9uIHBhZCAlczolcyIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwKLSAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICAgICAgfQotICAgICAgICAvKiBGSVhNRSA6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBmb3Igb3RoZXIgZXZlbnRzICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSkgewotICAgICAgZmFpbF9pZiAoIWNvbnNpc3QtPnNhd19zdHJlYW1fc3RhcnQKLSAgICAgICAgICAmJiBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpICE9IEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsCi0gICAgICAgICAgIkdvdCBhIHNlcmlhbGl6ZWQgZXZlbnQgKCVzKSBiZWZvcmUgYSBTVFJFQU1fU1RBUlQgb24gcGFkICVzOiVzIiwKLSAgICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgICBjb25zaXN0LT5zYXdfc2VyaWFsaXplZF9ldmVudCA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2lua19wYWRfZGF0YV9jYiAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLAotICAgIEdzdFN0cmVhbUNvbnNpc3RlbmN5ICogY29uc2lzdCkKLXsKLSAgR3N0TWluaU9iamVjdCAqZGF0YSA9IEdTVF9QQURfUFJPQkVfSU5GT19EQVRBIChpbmZvKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICIlcDogJWQgJWQgJWQgJWQiLCBjb25zaXN0LCBjb25zaXN0LT5mbHVzaGluZywKLSAgICAgIGNvbnNpc3QtPnNlZ21lbnQsIGNvbnNpc3QtPmVvcywgY29uc2lzdC0+ZXhwZWN0X2ZsdXNoKTsKLQotICBpZiAoR1NUX0lTX0JVRkZFUiAoZGF0YSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJCdWZmZXIgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoR1NUX0JVRkZFUiAoZGF0YSkpKSk7Ci0gICAgLyogSWYgYW4gRU9TIHdlbnQgdGhyb3VnaCwgYSBidWZmZXIgd291bGQgYmUgaW52YWxpZCAqLwotICAgIGZhaWxfaWYgKGNvbnNpc3QtPmVvcywgIkJ1ZmZlciByZWNlaXZlZCBhZnRlciBFT1Mgb24gcGFkICVzOiVzIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLSAgICAvKiBCdWZmZXJzIG5lZWQgdG8gYmUgcHJlY2VkZWQgYnkgYSBzZWdtZW50IGV2ZW50ICovCi0gICAgZmFpbF91bmxlc3MgKGNvbnNpc3QtPnNlZ21lbnQsICJCdWZmZXIgcmVjZWl2ZWQgd2l0aG91dCBzZWdtZW50ICIKLSAgICAgICAgIm9uIHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChkYXRhKSkgewotICAgIEdzdEV2ZW50ICpldmVudCA9IChHc3RFdmVudCAqKSBkYXRhOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiJXMiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKLSAgICAgIHsKLSAgICAgICAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotCi0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWVrIChldmVudCwgTlVMTCwgTlVMTCwgJmZsYWdzLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGNvbnNpc3QtPmV4cGVjdF9mbHVzaCA9Ci0gICAgICAgICAgICAoKGZsYWdzICYgR1NUX1NFRUtfRkxBR19GTFVTSCkgPT0gR1NUX1NFRUtfRkxBR19GTFVTSCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICAgICAgZmFpbF9pZiAoKGNvbnNpc3QtPmV4cGVjdF9mbHVzaCAmJiBjb25zaXN0LT5mbHVzaGluZyksCi0gICAgICAgICAgICAiUmVjZWl2ZWQgU0VHTUVOVCB3aGlsZSBpbiBhIGZsdXNoaW5nIHNlZWsgb24gcGFkICVzOiVzIiwKLSAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0gICAgICAgIGNvbnNpc3QtPnNlZ21lbnQgPSBUUlVFOwotICAgICAgICBjb25zaXN0LT5lb3MgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAvKiBGSVhNRSA6IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBmb3Igb3RoZXIgZXZlbnRzICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotYWRkX3BhZCAoR3N0U3RyZWFtQ29uc2lzdGVuY3kgKiBjb25zaXN0LCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFN0cmVhbUNvbnNpc3RlbmN5UHJvYmUgKnA7Ci0gIEdzdFBhZERpcmVjdGlvbiBkaXI7Ci0KLSAgcCA9IGdfbmV3MCAoR3N0U3RyZWFtQ29uc2lzdGVuY3lQcm9iZSwgMSk7Ci0gIHAtPnBhZCA9IGdfb2JqZWN0X3JlZiAocGFkKTsKLSAgZGlyID0gZ3N0X3BhZF9nZXRfZGlyZWN0aW9uIChwYWQpOwotICBpZiAoZGlyID09IEdTVF9QQURfU1JDKSB7Ci0KLSAgICBwLT5wcm9iZWlkID0KLSAgICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfRE9XTlNUUkVBTSwKLSAgICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIHNvdXJjZV9wYWRfZGF0YV9jYiwgY29uc2lzdCwgTlVMTCk7Ci0KLSAgfSBlbHNlIGlmIChkaXIgPT0gR1NUX1BBRF9TSU5LKSB7Ci0gICAgcC0+cHJvYmVpZCA9Ci0gICAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0RPV05TVFJFQU0sCi0gICAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBzaW5rX3BhZF9kYXRhX2NiLCBjb25zaXN0LCBOVUxMKTsKLSAgfQotICBjb25zaXN0LT5wYWRzID0gZ19saXN0X3ByZXBlbmQgKGNvbnNpc3QtPnBhZHMsIHApOwotfQotCi0vKioKLSAqIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX25ldzogKHNraXApCi0gKiBAcGFkOiBUaGUgI0dzdFBhZCBvbiB3aGljaCB0aGUgZGF0YWZsb3cgd2lsbCBiZSBjaGVja2VkLgotICoKLSAqIFNldHMgdXAgYSBkYXRhIHByb2JlIG9uIHRoZSBnaXZlbiBwYWQgd2hpY2ggd2lsbCByYWlzZSBhc3NlcnRpb25zIGlmIHRoZQotICogZGF0YSBmbG93IGlzIGluY29uc2lzdGVudC4KLSAqCi0gKiBSZXR1cm5zOiBBICNHc3RTdHJlYW1Db25zaXN0ZW5jeSBzdHJ1Y3R1cmUgdXNlZCB0byB0cmFjayBkYXRhIGZsb3cuCi0gKi8KLUdzdFN0cmVhbUNvbnNpc3RlbmN5ICoKLWdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX25ldyAoR3N0UGFkICogcGFkKQotewotICBHc3RTdHJlYW1Db25zaXN0ZW5jeSAqY29uc2lzdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFkICE9IE5VTEwsIE5VTEwpOwotCi0gIGNvbnNpc3QgPSBnX25ldzAgKEdzdFN0cmVhbUNvbnNpc3RlbmN5LCAxKTsKLQotICBpZiAoIWNvbnNpc3QtPnBhZHMpIHsKLSAgICBjb25zaXN0LT5wYXJlbnQgPSBHU1RfT0JKRUNUX1BBUkVOVCAocGFkKTsKLSAgfQotICBhZGRfcGFkIChjb25zaXN0LCBwYWQpOwotICByZXR1cm4gY29uc2lzdDsKLX0KLQotLyoqCi0gKiBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9hZGRfcGFkOgotICogQGNvbnNpc3Q6IFRoZSAjR3N0U3RyZWFtQ29uc2lzdGVuY3kgaGFuZGxlCi0gKiBAcGFkOiBUaGUgI0dzdFBhZCBvbiB3aGljaCB0aGUgZGF0YWZsb3cgd2lsbCBiZSBjaGVja2VkLgotICoKLSAqIFNldHMgdXAgYSBkYXRhIHByb2JlIG9uIHRoZSBnaXZlbiBwYWQgd2hpY2ggd2lsbCByYWlzZSBhc3NlcnRpb25zIGlmIHRoZQotICogZGF0YSBmbG93IGlzIGluY29uc2lzdGVudC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcGFkIHdhcyBhZGRlZAotICovCi1nYm9vbGVhbgotZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfYWRkX3BhZCAoR3N0U3RyZWFtQ29uc2lzdGVuY3kgKiBjb25zaXN0LCBHc3RQYWQgKiBwYWQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb25zaXN0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBhZCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfT0JKRUNUX1BBUkVOVCAocGFkKSA9PSBjb25zaXN0LT5wYXJlbnQsIEZBTFNFKTsKLQotICBhZGRfcGFkIChjb25zaXN0LCBwYWQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9yZXNldDoKLSAqIEBjb25zaXN0OiBUaGUgI0dzdFN0cmVhbUNvbnNpc3RlbmN5IHRvIHJlc2V0LgotICoKLSAqIFJlc2V0IHRoZSBzdHJlYW0gY2hlY2tlcidzIGludGVybmFsIHZhcmlhYmxlcy4KLSAqLwotCi12b2lkCi1nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9yZXNldCAoR3N0U3RyZWFtQ29uc2lzdGVuY3kgKiBjb25zaXN0KQotewotICBjb25zaXN0LT5mbHVzaGluZyA9IEZBTFNFOwotICBjb25zaXN0LT5zZWdtZW50ID0gRkFMU0U7Ci0gIGNvbnNpc3QtPmVvcyA9IEZBTFNFOwotICBjb25zaXN0LT5leHBlY3RfZmx1c2ggPSBGQUxTRTsKLSAgY29uc2lzdC0+c2F3X3NlcmlhbGl6ZWRfZXZlbnQgPSBGQUxTRTsKLSAgY29uc2lzdC0+c2F3X3N0cmVhbV9zdGFydCA9IEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWU6Ci0gKiBAY29uc2lzdDogVGhlICNHc3RTdHJlYW1Db25zaXN0ZW5jeSB0byBmcmVlLgotICoKLSAqIEZyZWVzIHRoZSBhbGxvY2F0ZWQgZGF0YSBhbmQgcHJvYmVzIGFzc29jaWF0ZWQgd2l0aCBAY29uc2lzdC4KLSAqLwotCi12b2lkCi1nc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlIChHc3RTdHJlYW1Db25zaXN0ZW5jeSAqIGNvbnNpc3QpCi17Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTdHJlYW1Db25zaXN0ZW5jeVByb2JlICpwOwotCi0gIC8qIFJlbW92ZSB0aGUgZGF0YSBwcm9iZXMgKi8KLSAgZm9yIChub2RlID0gY29uc2lzdC0+cGFkczsgbm9kZTsgbm9kZSA9IGdfbGlzdF9uZXh0IChub2RlKSkgewotICAgIHAgPSAoR3N0U3RyZWFtQ29uc2lzdGVuY3lQcm9iZSAqKSBub2RlLT5kYXRhOwotICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwLT5wYWQsIHAtPnByb2JlaWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHAtPnBhZCk7Ci0gICAgZ19mcmVlIChwKTsKLSAgfQotICBnX2xpc3RfZnJlZSAoY29uc2lzdC0+cGFkcyk7Ci0gIGdfZnJlZSAoY29uc2lzdCk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuaCBiL2xpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzVkYjZiLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0aW5nIGhlbHBlciBsaWIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0NPTlNJU1RFTkNZX0NIRUNLRVJfSF9fCi0jZGVmaW5lIF9fR1NUX0NPTlNJU1RFTkNZX0NIRUNLRVJfSF9fCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKioKLSAqIEdzdFN0cmVhbUNvbnNpc3RlbmN5OgotICoKLSAqIE9wYXF1ZSBjb25zaXN0ZW5jeSBjaGVja2VyIGhhbmRsZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbUNvbnNpc3RlbmN5IEdzdFN0cmVhbUNvbnNpc3RlbmN5OwotCi0KLUdzdFN0cmVhbUNvbnNpc3RlbmN5ICogZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3ICAgICAoR3N0UGFkICogcGFkKTsKLWdib29sZWFuICAgICAgICAgICAgICAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfYWRkX3BhZCAoR3N0U3RyZWFtQ29uc2lzdGVuY3kgKiBjb25zaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWQgKiBwYWQpOwotCi12b2lkICAgICAgICAgICAgICAgICAgIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0ICAgKEdzdFN0cmVhbUNvbnNpc3RlbmN5ICogY29uc2lzdCk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAgICAoR3N0U3RyZWFtQ29uc2lzdGVuY3kgKiBjb25zaXN0KTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NPTlNJU1RFTkNZX0NIRUNLRVJfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmMgYi9saWJzL2dzdC9jaGVjay9nc3RoYXJuZXNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMjZiN2UuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIyOCArMCwwIEBACi0vKiBHc3RIYXJuZXNzIC0gQSB0ZXN0LWhhcm5lc3MgZm9yIEdTdHJlYW1lciB0ZXN0aW5nCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgUGV4aXAgPHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0aGFybmVzcwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBIHRlc3QtaGFybmVzcyBmb3Igd3JpdGluZyBHU3RyZWFtZXIgdW5pdCB0ZXN0cwotICogQHNlZV9hbHNvOiAjR3N0VGVzdENsb2NrLFwKLSAqCi0gKiAjR3N0SGFybmVzcyBpcyBtZWFudCB0byBtYWtlIHdyaXRpbmcgdW5pdCB0ZXN0IGZvciBHU3RyZWFtZXIgbXVjaCBlYXNpZXIuCi0gKiBJdCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIHdheSBvZiB0cmVhdGluZyBhICNHc3RFbGVtZW50IGFzIGEgYmxhY2sgYm94LAotICogZGV0ZXJtaW5pc3RpY2FsbHkgZmVlZGluZyBpdCBkYXRhLCBhbmQgY29udHJvbGxpbmcgd2hhdCBkYXRhIGl0IG91dHB1dHMuCi0gKgotICogVGhlIGJhc2ljIHN0cnVjdHVyZSBvZiAjR3N0SGFybmVzcyBpcyB0d28gImZsb2F0aW5nIiAjR3N0UGFkcyB0aGF0IGNvbm5lY3QKLSAqIHRvIHRoZSBoYXJuZXNzZWQgI0dzdEVsZW1lbnQgc3JjIGFuZCBzaW5rICNHc3RQYWRzIGxpa2Ugc286Ci0gKgotICogPHByb2dyYW1saXN0aW5nPgotICogICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fCi0gKiAgX19fX18gICB8ICBfX19fXyAgICAgICAgICAgIF9fX19fICB8ICAgX19fX18KLSAqIHwgICAgIHwgIHwgfCAgICAgfCAgICAgICAgICB8ICAgICB8IHwgIHwgICAgIHwKLSAqIHwgc3JjIHwtLSstfCBzaW5rfCAgRWxlbWVudCB8IHNyYyB8LSstLXwgc2lua3wKLSAqIHxfX19fX3wgIHwgfF9fX19ffCAgICAgICAgICB8X19fX198IHwgIHxfX19fX3wKLSAqICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX3wKLSAqCi0gKiA8L3Byb2dyYW1saXN0aW5nPgotICoKLSAqIFdpdGggdGhpcywgeW91IGNhbiBub3cgc2ltdWxhdGUgYW55IGVudmlyb25tZW50IHRoZSAjR3N0RWxlbWVudCBtaWdodCBmaW5kCi0gKiBpdHNlbGYgaW4uIEJ5IHNwZWNpZnlpbmcgdGhlICNHc3RDYXBzIG9mIHRoZSBoYXJuZXNzICNHc3RQYWRzLCB1c2luZwotICogZnVuY3Rpb25zIGxpa2UgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzKCkgb3IgZ3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2Fwc19zdHIoKSwKLSAqIHlvdSBjYW4gdGVzdCBob3cgdGhlICNHc3RFbGVtZW50IGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBjYXBzIHNldHMuCi0gKgotICogWW91ciBoYXJuZXNzZWQgI0dzdEVsZW1lbnQgY2FuIG9mIGNvdXJzZSBhbHNvIGJlIGEgYmluLCBhbmQgdXNpbmcKLSAqIGdzdF9oYXJuZXNzX25ld19wYXJzZSgpIHN1cHBvcnRpbmcgc3RhbmRhcmQgZ3N0LWxhdW5jaCBzeW50YXgsIHlvdSBjYW4KLSAqIGVhc2lseSB0ZXN0IGEgd2hvbGUgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LgotICoKLSAqIFlvdSBjYW4gdGhlbiBnbyBvbiB0byBwdXNoICNHc3RCdWZmZXJzIGFuZCAjR3N0RXZlbnRzIG9uIHRvIHRoZSBzcmNwYWQsCi0gKiB1c2luZyBmdW5jdGlvbnMgbGlrZSBnc3RfaGFybmVzc19wdXNoKCkgYW5kIGdzdF9oYXJuZXNzX3B1c2hfZXZlbnQoKSwgYW5kCi0gKiB0aGVuIHB1bGwgdGhlbSBvdXQgdG8gZXhhbWluZSB0aGVtIHdpdGggZ3N0X2hhcm5lc3NfcHVsbCgpIGFuZAotICogZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCgpLgotICoKLSAqIDxleGFtcGxlPgotICogPHRpdGxlPkEgc2ltcGxlIGJ1ZmZlci1pbiBidWZmZXItb3V0IGV4YW1wbGU8L3RpdGxlPgotICogICA8cHJvZ3JhbWxpc3RpbmcgbGFuZ3VhZ2U9ImMiPgotICogICAjaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotICogICAjaW5jbHVkZSAmbHQ7Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaCZndDsKLSAqICAgR3N0SGFybmVzcyAqaDsKLSAqICAgR3N0QnVmZmVyICppbl9idWY7Ci0gKiAgIEdzdEJ1ZmZlciAqb3V0X2J1ZjsKLSAqCi0gKiAgIC8vIGF0dGFjaCB0aGUgaGFybmVzcyB0byB0aGUgc3JjIGFuZCBzaW5rIHBhZCBvZiBHc3RRdWV1ZQotICogICBoID0gZ3N0X2hhcm5lc3NfbmV3ICgicXVldWUiKTsKLSAqCi0gKiAgIC8vIHdlIG11c3Qgc3BlY2lmeSBhIGNhcHMgYmVmb3JlIHB1c2hpbmcgYnVmZmVycwotICogICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAibXljYXBzIik7Ci0gKgotICogICAvLyBjcmVhdGUgYSBidWZmZXIgb2Ygc2l6ZSA0MgotICogICBpbl9idWYgPSBnc3RfaGFybmVzc19jcmVhdGVfYnVmZmVyIChoLCA0Mik7Ci0gKgotICogICAvLyBwdXNoIHRoZSBidWZmZXIgaW50byB0aGUgcXVldWUKLSAqICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgaW5fYnVmKTsKLSAqCi0gKiAgIC8vIHB1bGwgdGhlIGJ1ZmZlciBmcm9tIHRoZSBxdWV1ZQotICogICBvdXRfYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gKgotICogICAvLyB2YWxpZGF0ZSB0aGUgYnVmZmVyIGluIGlzIHRoZSBzYW1lIGFzIGJ1ZmZlciBvdXQKLSAqICAgZmFpbF91bmxlc3MgKGluX2J1ZiA9PSBvdXRfYnVmKTsKLSAqCi0gKiAgIC8vIGNsZWFudXAKLSAqICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0X2J1Zik7Ci0gKiAgIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLSAqCi0gKiAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L2V4YW1wbGU+Ci0gKgotICogQW5vdGhlciBtYWluIGZlYXR1cmUgb2YgdGhlICNHc3RIYXJuZXNzIGlzIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZQotICogI0dzdFRlc3RDbG9jay4gT3BlcmF0aW5nIHRoZSAjR3N0VGVzdENsb2NrIGNhbiBiZSB2ZXJ5IGNoYWxsZW5naW5nLCBidXQKLSAqICNHc3RIYXJuZXNzIHNpbXBsaWZpZXMgc29tZSBvZiB0aGUgbW9zdCBkZXNpcmVkIGFjdGlvbnMgYSBsb3QsIGxpa2Ugd2FudGluZwotICogdG8gbWFudWFsbHkgYWR2YW5jZSB0aGUgY2xvY2sgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSByZWxlYXNpbmcgYSAjR3N0Q2xvY2tJRAotICogdGhhdCBpcyB3YWl0aW5nLCB3aXRoIGZ1bmN0aW9ucyBsaWtlIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0KCkuCi0gKgotICogI0dzdEhhcm5lc3MgYWxzbyBzdXBwb3J0cyBzdWItaGFybmVzc2VzLCBhcyBhIHdheSBvZiBnZW5lcmF0aW5nIGFuZAotICogdmFsaWRhdGluZyBkYXRhLiBBIHN1Yi1oYXJuZXNzIGlzIGFub3RoZXIgI0dzdEhhcm5lc3MgdGhhdCBpcyBtYW5hZ2VkIGJ5Ci0gKiB0aGUgInBhcmVudCIgaGFybmVzcywgYW5kIGNhbiBlaXRoZXIgYmUgY3JlYXRlZCBieSB1c2luZyB0aGUgc3RhbmRhcmQKLSAqIGdzdF9oYXJuZXNzX25ldyB0eXBlIGZ1bmN0aW9ucyBkaXJlY3RseSBvbiB0aGUgKEdzdEhhcm5lc3MgKiktPnNyY19oYXJuZXNzLAotICogb3IgdXNpbmcgdGhlIG11Y2ggbW9yZSBjb252ZW5pZW50IGdzdF9oYXJuZXNzX2FkZF9zcmMoKSBvcgotICogZ3N0X2hhcm5lc3NfYWRkX3NpbmtfcGFyc2UoKS4gSWYgeW91IGhhdmUgYSBkZWNvZGVyLWVsZW1lbnQgeW91IHdhbnQgdG8gdGVzdCwKLSAqIChsaWtlIHZwOGRlYykgaXQgY2FuIGJlIHZlcnkgdXNlZnVsIHRvIGFkZCBhIHNyYy1oYXJuZXNzIHdpdGggYm90aCBhCi0gKiBzcmMtZWxlbWVudCAodmlkZW90ZXN0c3JjKSBhbmQgYW4gZW5jb2RlciAodnA4ZW5jKSB0byBmZWVkIHRoZSBkZWNvZGVyIGRhdGEKLSAqIHdpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLCBieSBzaW1wbHkgZG9pbmc6Ci0gKgotICogPGV4YW1wbGU+Ci0gKiA8cHJvZ3JhbWxpc3RpbmcgbGFuZ3VhZ2U9ImMiPgotICogICBHc3RIYXJuZXNzICogaCA9IGdzdF9oYXJuZXNzX25ldyAoaCwgInZwOGRlYyIpOwotICogICBnc3RfaGFybmVzc19hZGRfc3JjX3BhcnNlIChoLCAidmlkZW90ZXN0c3JjIGlzLWxpdmU9MSAhIHZwOGVuYyIsIFRSVUUpOwotICogPC9wcm9ncmFtbGlzdGluZz4KLSAqIDwvZXhhbXBsZT4KLSAqCi0gKiBhbmQgdGhlbiBmZWVkaW5nIGl0IGRhdGEgd2l0aDoKLSAqCi0gKiA8ZXhhbXBsZT4KLSAqIDxwcm9ncmFtbGlzdGluZyBsYW5ndWFnZT0iYyI+Ci0gKiBnc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjIChoKTsKLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L2V4YW1wbGU+Ci0gKgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLS8qIHdlIGhhdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyBpbiBhc3NlcnRzLCBzbyBtYWtlIHN1cmUgdGhleSBhcmUgYWN0aXZlICovCi0jaWZkZWYgR19ESVNBQkxFX0FTU0VSVAotI2Vycm9yICJHc3RIYXJuZXNzIG11c3QgYmUgY29tcGlsZWQgd2l0aCBHX0RJU0FCTEVfQVNTRVJUIHVuZGVmaW5lZCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0aGFybmVzcy5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLXN0YXRpYyB2b2lkIGdzdF9oYXJuZXNzX3N0cmVzc19mcmVlIChHc3RIYXJuZXNzVGhyZWFkICogdCk7Ci0KLSNkZWZpbmUgSEFSTkVTU19LRVkgImhhcm5lc3MiCi0jZGVmaW5lIEhBUk5FU1NfUkVGICJoYXJuZXNzLXJlZiIKLSNkZWZpbmUgSEFSTkVTU19MT0NLKGgpIGdfbXV0ZXhfbG9jayAoJihoKS0+cHJpdi0+cHJpdl9tdXRleCkKLSNkZWZpbmUgSEFSTkVTU19VTkxPQ0soaCkgZ19tdXRleF91bmxvY2sgKCYoaCktPnByaXYtPnByaXZfbXV0ZXgpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBoc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgaHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdHJ1Y3QgX0dzdEhhcm5lc3NQcml2YXRlCi17Ci0gIGdjaGFyICplbGVtZW50X3NpbmtwYWRfbmFtZTsKLSAgZ2NoYXIgKmVsZW1lbnRfc3JjcGFkX25hbWU7Ci0KLSAgR3N0Q2FwcyAqc3JjX2NhcHM7Ci0gIEdzdENhcHMgKnNpbmtfY2FwczsKLQotICBnYm9vbGVhbiBmb3J3YXJkaW5nOwotICBHc3RQYWQgKnNpbmtfZm9yd2FyZF9wYWQ7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotCi0gIHZvbGF0aWxlIGdpbnQgcmVjdl9idWZmZXJzOwotICB2b2xhdGlsZSBnaW50IHJlY3ZfZXZlbnRzOwotICB2b2xhdGlsZSBnaW50IHJlY3ZfdXBzdHJlYW1fZXZlbnRzOwotCi0gIEdBc3luY1F1ZXVlICpidWZmZXJfcXVldWU7Ci0gIEdBc3luY1F1ZXVlICpzcmNfZXZlbnRfcXVldWU7Ci0gIEdBc3luY1F1ZXVlICpzaW5rX2V2ZW50X3F1ZXVlOwotCi0gIEdzdENsb2NrVGltZSBsYXRlbmN5X21pbjsKLSAgR3N0Q2xvY2tUaW1lIGxhdGVuY3lfbWF4OwotICBnYm9vbGVhbiBoYXNfY2xvY2tfd2FpdDsKLSAgZ2Jvb2xlYW4gZHJvcF9idWZmZXJzOwotICBHc3RDbG9ja1RpbWUgbGFzdF9wdXNoX3RzOwotCi0gIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIGFsbG9jYXRpb25fcGFyYW1zOwotICBHc3RBbGxvY2F0b3IgKnByb3Bvc2VfYWxsb2NhdG9yOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIHByb3Bvc2VfYWxsb2NhdGlvbl9wYXJhbXM7Ci0KLSAgZ2Jvb2xlYW4gYmxvY2tpbmdfcHVzaF9tb2RlOwotICBHQ29uZCBibG9ja2luZ19wdXNoX2NvbmQ7Ci0gIEdNdXRleCBibG9ja2luZ19wdXNoX211dGV4OwotICBHTXV0ZXggcHJpdl9tdXRleDsKLQotICBHUHRyQXJyYXkgKnN0cmVzczsKLX07Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfaGFybmVzc19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAocGFkKSwgSEFSTkVTU19LRVkpOwotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gICh2b2lkKSBwYXJlbnQ7Ci0gIGdfYXNzZXJ0IChoICE9IE5VTEwpOwotICBnX211dGV4X2xvY2sgKCZwcml2LT5ibG9ja2luZ19wdXNoX211dGV4KTsKLSAgZ19hdG9taWNfaW50X2luYyAoJnByaXYtPnJlY3ZfYnVmZmVycyk7Ci0KLSAgaWYgKHByaXYtPmRyb3BfYnVmZmVycykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICBlbHNlCi0gICAgZ19hc3luY19xdWV1ZV9wdXNoIChwcml2LT5idWZmZXJfcXVldWUsIGJ1ZmZlcik7Ci0KLSAgaWYgKHByaXYtPmJsb2NraW5nX3B1c2hfbW9kZSkgewotICAgIGdfY29uZF93YWl0ICgmcHJpdi0+YmxvY2tpbmdfcHVzaF9jb25kLCAmcHJpdi0+YmxvY2tpbmdfcHVzaF9tdXRleCk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZwcml2LT5ibG9ja2luZ19wdXNoX211dGV4KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2hhcm5lc3Nfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAocGFkKSwgSEFSTkVTU19LRVkpOwotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gICh2b2lkKSBwYXJlbnQ7Ci0gIGdfYXNzZXJ0IChoICE9IE5VTEwpOwotICBnX2F0b21pY19pbnRfaW5jICgmcHJpdi0+cmVjdl91cHN0cmVhbV9ldmVudHMpOwotICBnX2FzeW5jX3F1ZXVlX3B1c2ggKHByaXYtPnNyY19ldmVudF9xdWV1ZSwgZXZlbnQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaGFybmVzc19zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAocGFkKSwgSEFSTkVTU19LRVkpOwotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIGdib29sZWFuIGZvcndhcmQ7Ci0KLSAgZ19hc3NlcnQgKGggIT0gTlVMTCk7Ci0gICh2b2lkKSBwYXJlbnQ7Ci0gIGdfYXRvbWljX2ludF9pbmMgKCZwcml2LT5yZWN2X2V2ZW50cyk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOgotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICAgIGZvcndhcmQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGZvcndhcmQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgSEFSTkVTU19MT0NLIChoKTsKLSAgaWYgKHByaXYtPmZvcndhcmRpbmcgJiYgZm9yd2FyZCAmJiBwcml2LT5zaW5rX2ZvcndhcmRfcGFkKSB7Ci0gICAgR3N0UGFkICpmd2RwYWQgPSBnc3Rfb2JqZWN0X3JlZiAocHJpdi0+c2lua19mb3J3YXJkX3BhZCk7Ci0gICAgSEFSTkVTU19VTkxPQ0sgKGgpOwotICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZndkcGFkLCBldmVudCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZndkcGFkKTsKLSAgICBIQVJORVNTX0xPQ0sgKGgpOwotICB9IGVsc2UgewotICAgIGdfYXN5bmNfcXVldWVfcHVzaCAocHJpdi0+c2lua19ldmVudF9xdWV1ZSwgZXZlbnQpOwotICB9Ci0gIEhBUk5FU1NfVU5MT0NLIChoKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2hhcm5lc3NfZGVjaWRlX2FsbG9jYXRpb24gKEdzdEhhcm5lc3MgKiBoLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtczsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IE5VTEw7Ci0gIGd1aW50IHNpemUsIG1pbiwgbWF4OwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uIChjYXBzLCBGQUxTRSk7Ci0gIGdzdF9wYWRfcGVlcl9xdWVyeSAoaC0+c3JjcGFkLCBxdWVyeSk7Ci0KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3BhcmFtcyAocXVlcnkpID4gMCkgewotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wYXJhbSAocXVlcnksIDAsICZhbGxvY2F0b3IsICZwYXJhbXMpOwotICB9IGVsc2UgewotICAgIGFsbG9jYXRvciA9IE5VTEw7Ci0gICAgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXQgKCZwYXJhbXMpOwotICB9Ci0KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzIChxdWVyeSkgPiAwKSB7Ci0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCAwLCAmcG9vbCwgJnNpemUsICZtaW4sICZtYXgpOwotI2lmIDAKLSAgICAvKiBNb3N0IGVsZW1lbnRzIGNyZWF0ZSB0aGVpciBvd24gcG9vbHMgaWYgcG9vbCA9PSBOVUxMLiBOb3Qgc3VyZSBpZiB3ZQotICAgICAqIHdhbnQgdG8gZG8gdGhhdCBpbiB0aGUgaGFybmVzcyBzaW5jZSB3ZSBtYXkgd2FudCB0byB0ZXN0IHRoZSBwb29sCi0gICAgICogaW1wbGVtZW50YXRpb24gb2YgdGhlIGVsZW1lbnRzLiBOb3QgY3JlYXRpbmcgYSBwb29sIHdpbGwgaG93ZXZlciBpZ25vcmUKLSAgICAgKiB0aGUgcmV0dXJuZWQgc2l6ZS4gKi8KLSAgICBpZiAocG9vbCA9PSBOVUxMKQotICAgICAgcG9vbCA9IGdzdF9idWZmZXJfcG9vbF9uZXcgKCk7Ci0jZW5kaWYKLSAgfSBlbHNlIHsKLSAgICBwb29sID0gTlVMTDsKLSAgICBzaXplID0gbWluID0gbWF4ID0gMDsKLSAgfQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICBpZiAocG9vbCkgewotICAgIEdzdFN0cnVjdHVyZSAqY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCBjYXBzLCBzaXplLCBtaW4sIG1heCk7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yIChjb25maWcsIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZyk7Ci0gIH0KLQotICBpZiAocG9vbCAhPSBwcml2LT5wb29sKSB7Ci0gICAgaWYgKHByaXYtPnBvb2wgIT0gTlVMTCkKLSAgICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwcml2LT5wb29sLCBGQUxTRSk7Ci0gICAgaWYgKHBvb2wpCi0gICAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgVFJVRSk7Ci0gIH0KLQotICBwcml2LT5hbGxvY2F0aW9uX3BhcmFtcyA9IHBhcmFtczsKLSAgaWYgKHByaXYtPmFsbG9jYXRvcikKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwcml2LT5hbGxvY2F0b3IpOwotICBwcml2LT5hbGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0gIGlmIChwcml2LT5wb29sKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHByaXYtPnBvb2wpOwotICBwcml2LT5wb29sID0gcG9vbDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9oYXJuZXNzX25lZ290aWF0ZSAoR3N0SGFybmVzcyAqIGgpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoaC0+c3JjcGFkKTsKLSAgaWYgKGNhcHMgIT0gTlVMTCkgewotICAgIGdzdF9oYXJuZXNzX2RlY2lkZV9hbGxvY2F0aW9uIChoLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0ZJWE1FX09CSkVDVCAoaCwgIkNhbm5vdCBuZWdvdGlhdGUgYWxsb2NhdGlvbiBiZWNhdXNlIGNhcHMgaXMgbm90IHNldCIpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2hhcm5lc3Nfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnX29iamVjdF9nZXRfZGF0YSAoR19PQkpFQ1QgKHBhZCksIEhBUk5FU1NfS0VZKTsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBnX2Fzc2VydCAoaCAhPSBOVUxMKTsKLQotICAvLyBGSVhNRTogZm9yd2FyZCBhbGwgcXVlcmllcz8KLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgICAgZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5IChxdWVyeSwgVFJVRSwgcHJpdi0+bGF0ZW5jeV9taW4sIHByaXYtPmxhdGVuY3lfbWF4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwcywgKmZpbHRlciA9IE5VTEw7Ci0KLSAgICAgIGlmIChwcml2LT5zaW5rX2NhcHMpIHsKLSAgICAgICAgY2FwcyA9IGdzdF9jYXBzX3JlZiAocHJpdi0+c2lua19jYXBzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICAgIGlmIChmaWx0ZXIgIT0gTlVMTCkgewotICAgICAgICBnc3RfY2Fwc190YWtlICgmY2FwcywKLSAgICAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCkpOwotICAgICAgfQotCi0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVVFUllfQUxMT0NBVElPTjoKLSAgICB7Ci0gICAgICBIQVJORVNTX0xPQ0sgKGgpOwotICAgICAgaWYgKHByaXYtPmZvcndhcmRpbmcgJiYgcHJpdi0+c2lua19mb3J3YXJkX3BhZCAhPSBOVUxMKSB7Ci0gICAgICAgIEdzdFBhZCAqcGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHByaXYtPnNpbmtfZm9yd2FyZF9wYWQpOwotICAgICAgICBnX2Fzc2VydCAocGVlciAhPSBOVUxMKTsKLSAgICAgICAgSEFSTkVTU19VTkxPQ0sgKGgpOwotICAgICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5IChwZWVyLCBxdWVyeSk7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotICAgICAgICBIQVJORVNTX0xPQ0sgKGgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR3N0Q2FwcyAqY2FwczsKLSAgICAgICAgZ2Jvb2xlYW4gbmVlZF9wb29sOwotICAgICAgICBndWludCBzaXplOwotCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uIChxdWVyeSwgJmNhcHMsICZuZWVkX3Bvb2wpOwotCi0gICAgICAgIC8qIEZJWE1FOiBDYW4gdGhpcyBiZSByZW1vdmVkPyAqLwotICAgICAgICBzaXplID0gZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcGFyYW1zIChxdWVyeSk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQgKDAsID09LCBzaXplKTsKLSAgICAgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3BhcmFtIChxdWVyeSwKLSAgICAgICAgICAgIHByaXYtPnByb3Bvc2VfYWxsb2NhdG9yLCAmcHJpdi0+cHJvcG9zZV9hbGxvY2F0aW9uX3BhcmFtcyk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicHJvcG9zaW5nIGFsbG9jYXRpb24gJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICBwcml2LT5wcm9wb3NlX2FsbG9jYXRvcik7Ci0gICAgICB9Ci0gICAgICBIQVJORVNTX1VOTE9DSyAoaCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2hhcm5lc3Nfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAocGFkKSwgSEFSTkVTU19LRVkpOwotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIGdfYXNzZXJ0IChoICE9IE5VTEwpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0xBVEVOQ1k6Ci0gICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKHF1ZXJ5LCBUUlVFLCBwcml2LT5sYXRlbmN5X21pbiwgcHJpdi0+bGF0ZW5jeV9tYXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzLCAqZmlsdGVyID0gTlVMTDsKLQotICAgICAgaWYgKHByaXYtPnNyY19jYXBzKSB7Ci0gICAgICAgIGNhcHMgPSBnc3RfY2Fwc19yZWYgKHByaXYtPnNyY19jYXBzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICAgIGlmIChmaWx0ZXIgIT0gTlVMTCkgewotICAgICAgICBnc3RfY2Fwc190YWtlICgmY2FwcywKLSAgICAgICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCkpOwotICAgICAgfQotCi0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2hhcm5lc3NfZWxlbWVudF9yZWYgKEdzdEhhcm5lc3MgKiBoKQotewotICBndWludCAqZGF0YTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGgtPmVsZW1lbnQpOwotICBkYXRhID0gZ19vYmplY3RfZ2V0X2RhdGEgKEdfT0JKRUNUIChoLT5lbGVtZW50KSwgSEFSTkVTU19SRUYpOwotICBpZiAoZGF0YSA9PSBOVUxMKSB7Ci0gICAgZGF0YSA9IGdfbmV3MCAoZ3VpbnQsIDEpOwotICAgICpkYXRhID0gMTsKLSAgICBnX29iamVjdF9zZXRfZGF0YV9mdWxsIChHX09CSkVDVCAoaC0+ZWxlbWVudCksIEhBUk5FU1NfUkVGLCBkYXRhLCBnX2ZyZWUpOwotICB9IGVsc2UgewotICAgICgqZGF0YSkrKzsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoaC0+ZWxlbWVudCk7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X2hhcm5lc3NfZWxlbWVudF91bnJlZiAoR3N0SGFybmVzcyAqIGgpCi17Ci0gIGd1aW50ICpkYXRhOwotICBndWludCByZXQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChoLT5lbGVtZW50KTsKLSAgZGF0YSA9IGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAoaC0+ZWxlbWVudCksIEhBUk5FU1NfUkVGKTsKLSAgZ19hc3NlcnQgKGRhdGEgIT0gTlVMTCk7Ci0gICgqZGF0YSktLTsKLSAgcmV0ID0gKmRhdGE7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChoLT5lbGVtZW50KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2hhcm5lc3NfbGlua19lbGVtZW50X3NyY3BhZCAoR3N0SGFybmVzcyAqIGgsCi0gICAgY29uc3QgZ2NoYXIgKiBlbGVtZW50X3NyY3BhZF9uYW1lKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIEdzdFBhZCAqc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGgtPmVsZW1lbnQsCi0gICAgICBlbGVtZW50X3NyY3BhZF9uYW1lKTsKLSAgR3N0UGFkTGlua1JldHVybiBsaW5rOwotICBpZiAoc3JjcGFkID09IE5VTEwpCi0gICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChoLT5lbGVtZW50LCBlbGVtZW50X3NyY3BhZF9uYW1lKTsKLSAgZ19hc3NlcnQgKHNyY3BhZCk7Ci0gIGxpbmsgPSBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgaC0+c2lua3BhZCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAobGluaywgPT0sIEdTVF9QQURfTElOS19PSyk7Ci0gIGdfZnJlZSAocHJpdi0+ZWxlbWVudF9zcmNwYWRfbmFtZSk7Ci0gIHByaXYtPmVsZW1lbnRfc3JjcGFkX25hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChzcmNwYWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc19saW5rX2VsZW1lbnRfc2lua3BhZCAoR3N0SGFybmVzcyAqIGgsCi0gICAgY29uc3QgZ2NoYXIgKiBlbGVtZW50X3NpbmtwYWRfbmFtZSkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICBHc3RQYWQgKnNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoaC0+ZWxlbWVudCwKLSAgICAgIGVsZW1lbnRfc2lua3BhZF9uYW1lKTsKLSAgR3N0UGFkTGlua1JldHVybiBsaW5rOwotICBpZiAoc2lua3BhZCA9PSBOVUxMKQotICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGgtPmVsZW1lbnQsIGVsZW1lbnRfc2lua3BhZF9uYW1lKTsKLSAgZ19hc3NlcnQgKHNpbmtwYWQpOwotICBsaW5rID0gZ3N0X3BhZF9saW5rIChoLT5zcmNwYWQsIHNpbmtwYWQpOwotICBnX2Fzc2VydF9jbXBpbnQgKGxpbmssID09LCBHU1RfUEFEX0xJTktfT0spOwotICBnX2ZyZWUgKHByaXYtPmVsZW1lbnRfc2lua3BhZF9uYW1lKTsKLSAgcHJpdi0+ZWxlbWVudF9zaW5rcGFkX25hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChzaW5rcGFkKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9oYXJuZXNzX3NldHVwX3NyY19wYWQgKEdzdEhhcm5lc3MgKiBoLAotICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogc3JjX3RtcGwsIGNvbnN0IGdjaGFyICogZWxlbWVudF9zaW5rcGFkX25hbWUpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLSAgZ19hc3NlcnQgKHNyY190bXBsKTsKLSAgZ19hc3NlcnQgKGgtPnNyY3BhZCA9PSBOVUxMKTsKLQotICBwcml2LT5zcmNfZXZlbnRfcXVldWUgPQotICAgICAgZ19hc3luY19xdWV1ZV9uZXdfZnVsbCAoKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotCi0gIC8qIHNlbmRpbmcgcGFkICovCi0gIGgtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlIChzcmNfdG1wbCwgInNyYyIpOwotICBnX2Fzc2VydCAoaC0+c3JjcGFkKTsKLSAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChoLT5zcmNwYWQpLCBIQVJORVNTX0tFWSwgaCk7Ci0KLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGgtPnNyY3BhZCwgZ3N0X2hhcm5lc3Nfc3JjX3F1ZXJ5KTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGgtPnNyY3BhZCwgZ3N0X2hhcm5lc3Nfc3JjX2V2ZW50KTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKGgtPnNyY3BhZCwgVFJVRSk7Ci0KLSAgaWYgKGVsZW1lbnRfc2lua3BhZF9uYW1lKQotICAgIGdzdF9oYXJuZXNzX2xpbmtfZWxlbWVudF9zaW5rcGFkIChoLCBlbGVtZW50X3NpbmtwYWRfbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc19zZXR1cF9zaW5rX3BhZCAoR3N0SGFybmVzcyAqIGgsCi0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBzaW5rX3RtcGwsIGNvbnN0IGdjaGFyICogZWxlbWVudF9zcmNwYWRfbmFtZSkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICBnX2Fzc2VydCAoc2lua190bXBsKTsKLSAgZ19hc3NlcnQgKGgtPnNpbmtwYWQgPT0gTlVMTCk7Ci0KLSAgcHJpdi0+YnVmZmVyX3F1ZXVlID0gZ19hc3luY19xdWV1ZV9uZXdfZnVsbCAoCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBwcml2LT5zaW5rX2V2ZW50X3F1ZXVlID0gZ19hc3luY19xdWV1ZV9uZXdfZnVsbCAoCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9ldmVudF91bnJlZik7Ci0KLSAgLyogcmVjZWl2aW5nIHBhZCAqLwotICBoLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKHNpbmtfdG1wbCwgInNpbmsiKTsKLSAgZ19hc3NlcnQgKGgtPnNpbmtwYWQpOwotICBnX29iamVjdF9zZXRfZGF0YSAoR19PQkpFQ1QgKGgtPnNpbmtwYWQpLCBIQVJORVNTX0tFWSwgaCk7Ci0KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGgtPnNpbmtwYWQsIGdzdF9oYXJuZXNzX2NoYWluKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGgtPnNpbmtwYWQsIGdzdF9oYXJuZXNzX3NpbmtfcXVlcnkpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoaC0+c2lua3BhZCwgZ3N0X2hhcm5lc3Nfc2lua19ldmVudCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChoLT5zaW5rcGFkLCBUUlVFKTsKLQotICBpZiAoZWxlbWVudF9zcmNwYWRfbmFtZSkKLSAgICBnc3RfaGFybmVzc19saW5rX2VsZW1lbnRfc3JjcGFkIChoLCBlbGVtZW50X3NyY3BhZF9uYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX2VsZW1lbnRfdHlwZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdib29sZWFuICogaGFzX3NpbmtwYWQsCi0gICAgZ2Jvb2xlYW4gKiBoYXNfc3JjcGFkKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotICBjb25zdCBHTGlzdCAqdG1wbF9saXN0OwotCi0gICpoYXNfc3JjcGFkID0gZWxlbWVudC0+bnVtc3JjcGFkcyA+IDA7Ci0gICpoYXNfc2lua3BhZCA9IGVsZW1lbnQtPm51bXNpbmtwYWRzID4gMDsKLQotICB0bXBsX2xpc3QgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QgKGVsZW1lbnRfY2xhc3MpOwotCi0gIHdoaWxlICh0bXBsX2xpc3QpIHsKLSAgICBHc3RQYWRUZW1wbGF0ZSAqcGFkX3RtcGwgPSAoR3N0UGFkVGVtcGxhdGUgKikgdG1wbF9saXN0LT5kYXRhOwotICAgIHRtcGxfbGlzdCA9IGdfbGlzdF9uZXh0ICh0bXBsX2xpc3QpOwotICAgIGlmIChHU1RfUEFEX1RFTVBMQVRFX0RJUkVDVElPTiAocGFkX3RtcGwpID09IEdTVF9QQURfU1JDKQotICAgICAgKmhhc19zcmNwYWQgfD0gVFJVRTsKLSAgICBpZiAoR1NUX1BBRF9URU1QTEFURV9ESVJFQ1RJT04gKHBhZF90bXBsKSA9PSBHU1RfUEFEX1NJTkspCi0gICAgICAqaGFzX3NpbmtwYWQgfD0gVFJVRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotdHVybl9hc3luY19hbmRfc3luY19vZmYgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHT2JqZWN0Q2xhc3MgKmNsYXNzID0gR19PQkpFQ1RfR0VUX0NMQVNTIChlbGVtZW50KTsKLSAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKGNsYXNzLCAiYXN5bmMiKSkKLSAgICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKLSAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKGNsYXNzLCAic3luYyIpKQotICAgIGdfb2JqZWN0X3NldCAoZWxlbWVudCwgInN5bmMiLCBGQUxTRSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BhZF9pc19yZXF1ZXN0X3BhZCAoR3N0UGFkICogcGFkKQotewotICBHc3RQYWRUZW1wbGF0ZSAqdGVtcDsKLSAgZ2Jvb2xlYW4gaXNfcmVxdWVzdDsKLQotICBpZiAocGFkID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotICB0ZW1wID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlIChwYWQpOwotICBpZiAodGVtcCA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLSAgaXNfcmVxdWVzdCA9IEdTVF9QQURfVEVNUExBVEVfUFJFU0VOQ0UgKHRlbXApID09IEdTVF9QQURfUkVRVUVTVDsKLSAgZ3N0X29iamVjdF91bnJlZiAodGVtcCk7Ci0gIHJldHVybiBpc19yZXF1ZXN0OwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX25ld19lbXB0eTogKHNraXApCi0gKgotICogQ3JlYXRlcyBhIG5ldyBlbXB0eSBoYXJuZXNzLiBVc2UgZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfZnVsbCgpIHRvIGFkZAotICogYW4gI0dzdEVsZW1lbnQgdG8gaXQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEhhcm5lc3MsIG9yICVOVUxMIGlmIHRoZSBoYXJuZXNzIGNvdWxkCi0gKiBub3QgYmUgY3JlYXRlZAotICoKLSAqIFNpbmNlOiAxLjgKLSAqLwotR3N0SGFybmVzcyAqCi1nc3RfaGFybmVzc19uZXdfZW1wdHkgKHZvaWQpCi17Ci0gIEdzdEhhcm5lc3MgKmg7Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2OwotCi0gIGggPSBnX25ldzAgKEdzdEhhcm5lc3MsIDEpOwotICBnX2Fzc2VydCAoaCAhPSBOVUxMKTsKLSAgaC0+cHJpdiA9IGdfbmV3MCAoR3N0SGFybmVzc1ByaXZhdGUsIDEpOwotICBwcml2ID0gaC0+cHJpdjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChoLCAiYWJvdXQgdG8gY3JlYXRlIG5ldyBoYXJuZXNzICVwIiwgaCk7Ci0gIHByaXYtPmxhc3RfcHVzaF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHByaXYtPmxhdGVuY3lfbWluID0gMDsKLSAgcHJpdi0+bGF0ZW5jeV9tYXggPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwcml2LT5kcm9wX2J1ZmZlcnMgPSBGQUxTRTsKLSAgcHJpdi0+dGVzdGNsb2NrID0gR1NUX1RFU1RfQ0xPQ0tfQ0FTVCAoZ3N0X3Rlc3RfY2xvY2tfbmV3ICgpKTsKLQotICBwcml2LT5wcm9wb3NlX2FsbG9jYXRvciA9IE5VTEw7Ci0gIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0ICgmcHJpdi0+cHJvcG9zZV9hbGxvY2F0aW9uX3BhcmFtcyk7Ci0KLSAgZ19tdXRleF9pbml0ICgmcHJpdi0+YmxvY2tpbmdfcHVzaF9tdXRleCk7Ci0gIGdfY29uZF9pbml0ICgmcHJpdi0+YmxvY2tpbmdfcHVzaF9jb25kKTsKLSAgZ19tdXRleF9pbml0ICgmcHJpdi0+cHJpdl9tdXRleCk7Ci0KLSAgcHJpdi0+c3RyZXNzID0gZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jICgKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2hhcm5lc3Nfc3RyZXNzX2ZyZWUpOwotCi0gIC8qIHdlIGhhdmUgZm9yd2FyZGluZyBvbiBhcyBhIGRlZmF1bHQgKi8KLSAgZ3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmcgKGgsIFRSVUUpOwotCi0gIHJldHVybiBoOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X2Z1bGw6IChza2lwKQotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBlbGVtZW50OiBhICNHc3RFbGVtZW50IHRvIGFkZCB0byB0aGUgaGFybmVzcyAodHJhbnNmZXIgbm9uZSkKLSAqIEBoc3JjOiAoYWxsb3ctbm9uZSk6IGEgI0dzdFN0YXRpY1BhZFRlbXBsYXRlIGRlc2NyaWJpbmcgdGhlIGhhcm5lc3Mgc3JjcGFkLgotICogJU5VTEwgd2lsbCBub3QgY3JlYXRlIGEgaGFybmVzcyBzcmNwYWQuCi0gKiBAZWxlbWVudF9zaW5rcGFkX25hbWU6IChhbGxvdy1ub25lKTogYSAjZ2NoYXIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudAotICogc2lua3BhZCB0aGF0IGlzIHRoZW4gbGlua2VkIHRvIHRoZSBoYXJuZXNzIHNyY3BhZC4gQ2FuIGJlIGEgc3RhdGljIG9yIHJlcXVlc3QKLSAqIG9yIGEgc29tZXRpbWVzIHBhZCB0aGF0IGhhcyBiZWVuIGFkZGVkLiAlTlVMTCB3aWxsIG5vdCBnZXQvcmVxdWVzdCBhIHNpbmtwYWQKLSAqIGZyb20gdGhlIGVsZW1lbnQuIChMaWtlIGlmIHRoZSBlbGVtZW50IGlzIGEgc3JjLikKLSAqIEBoc2luazogKGFsbG93LW5vbmUpOiBhICNHc3RTdGF0aWNQYWRUZW1wbGF0ZSBkZXNjcmliaW5nIHRoZSBoYXJuZXNzIHNpbmtwYWQuCi0gKiAlTlVMTCB3aWxsIG5vdCBjcmVhdGUgYSBoYXJuZXNzIHNpbmtwYWQuCi0gKiBAZWxlbWVudF9zcmNwYWRfbmFtZTogKGFsbG93LW5vbmUpOiBhICNnY2hhciB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50Ci0gKiBzcmNwYWQgdGhhdCBpcyB0aGVuIGxpbmtlZCB0byB0aGUgaGFybmVzcyBzaW5rcGFkLCBzaW1pbGFyIHRvIHRoZQotICogQGVsZW1lbnRfc2lua3BhZF9uYW1lLgotICoKLSAqIEFkZHMgYSAjR3N0RWxlbWVudCB0byBhbiBlbXB0eSAjR3N0SGFybmVzcwotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc19hZGRfZWxlbWVudF9mdWxsIChHc3RIYXJuZXNzICogaCwgR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBoc3JjLCBjb25zdCBnY2hhciAqIGVsZW1lbnRfc2lua3BhZF9uYW1lLAotICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogaHNpbmssIGNvbnN0IGdjaGFyICogZWxlbWVudF9zcmNwYWRfbmFtZSkKLXsKLSAgR3N0Q2xvY2sgKmVsZW1lbnRfY2xvY2s7Ci0gIGdib29sZWFuIGhhc19zaW5rcGFkLCBoYXNfc3JjcGFkOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGVsZW1lbnQgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGgtPmVsZW1lbnQgPT0gTlVMTCk7Ci0KLSAgZWxlbWVudF9jbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChlbGVtZW50KTsKLSAgaC0+ZWxlbWVudCA9IGdzdF9vYmplY3RfcmVmIChlbGVtZW50KTsKLSAgY2hlY2tfZWxlbWVudF90eXBlIChlbGVtZW50LCAmaGFzX3NpbmtwYWQsICZoYXNfc3JjcGFkKTsKLQotICAvKiBzZXR1cCB0aGUgbG9vc2Ugc3JjcGFkIGxpbmtlZCB0byB0aGUgZWxlbWVudCBzaW5rcGFkICovCi0gIGlmIChoYXNfc2lua3BhZCkKLSAgICBnc3RfaGFybmVzc19zZXR1cF9zcmNfcGFkIChoLCBoc3JjLCBlbGVtZW50X3NpbmtwYWRfbmFtZSk7Ci0KLSAgLyogc2V0dXAgdGhlIGxvb3NlIHNpbmtwYWQgbGlua2VkIHRvIHRoZSBlbGVtZW50IHNyY3BhZCAqLwotICBpZiAoaGFzX3NyY3BhZCkKLSAgICBnc3RfaGFybmVzc19zZXR1cF9zaW5rX3BhZCAoaCwgaHNpbmssIGVsZW1lbnRfc3JjcGFkX25hbWUpOwotCi0gIC8qIGFzIGEgaGFybmVzcyBzaW5rLCB3ZSBzaG91bGQgbm90IG5lZWQgc3luYyBhbmQgYXN5bmMgKi8KLSAgaWYgKGhhc19zaW5rcGFkICYmICFoYXNfc3JjcGFkKQotICAgIHR1cm5fYXN5bmNfYW5kX3N5bmNfb2ZmIChoLT5lbGVtZW50KTsKLQotICBpZiAoaC0+c3JjcGFkICE9IE5VTEwpIHsKLSAgICBnYm9vbGVhbiBoYW5kbGVkOwotICAgIGdjaGFyICpzdHJlYW1faWQgPSBnX3N0cmR1cF9wcmludGYgKCIlcy0lcCIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoaC0+ZWxlbWVudCksIGgpOwotICAgIGhhbmRsZWQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGgtPnNyY3BhZCwKLSAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKHN0cmVhbV9pZCkpOwotICAgIGdfYXNzZXJ0IChoYW5kbGVkKTsKLSAgICBnX2ZyZWUgKHN0cmVhbV9pZCk7Ci0gIH0KLQotICAvKiBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHRlc3RjbG9jayBhdHRhY2hlZCwKLSAgICAgd2UgcmVwbGFjZSBvdXIgb3duIHdpdGggaXQsIGlmIG5vIGNsb2NrIHdlIGF0dGFjaCB0aGUgdGVzdGNsb2NrICovCi0gIGlmIChlbGVtZW50X2Nsb2NrKSB7Ci0gICAgaWYgKEdTVF9JU19URVNUX0NMT0NLIChlbGVtZW50X2Nsb2NrKSkgewotICAgICAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIGgtPnByaXYtPnRlc3RjbG9jaywKLSAgICAgICAgICAoR3N0T2JqZWN0ICopIEdTVF9FTEVNRU5UX0NMT0NLIChlbGVtZW50KSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2sgKGgpOwotICB9Ci0KLSAgLyogZG9uJ3Qgc3RhcnQgc291cmNlcywgdGhleSBzdGFydCBwcm9kdWNpbmcgZGF0YSEgKi8KLSAgaWYgKGhhc19zaW5rcGFkKQotICAgIGdzdF9oYXJuZXNzX3BsYXkgKGgpOwotCi0gIGdzdF9oYXJuZXNzX2VsZW1lbnRfcmVmIChoKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChoLCAiYWRkZWQgZWxlbWVudCB0byBoYXJuZXNzICVwICIKLSAgICAgICJ3aXRoIGVsZW1lbnRfc3JjcGFkX25hbWUgKCVwLCAlcywgJXMpIGFuZCBlbGVtZW50X3NpbmtwYWRfbmFtZSAoJXAsICVzLCAlcykiLAotICAgICAgaCwgaC0+c3JjcGFkLCBHU1RfREVCVUdfUEFEX05BTUUgKGgtPnNyY3BhZCksCi0gICAgICBoLT5zaW5rcGFkLCBHU1RfREVCVUdfUEFEX05BTUUgKGgtPnNpbmtwYWQpKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19uZXdfZnVsbDogKHNraXApCi0gKiBAZWxlbWVudDogYSAjR3N0RWxlbWVudCB0byBhdHRhY2ggdGhlIGhhcm5lc3MgdG8gKHRyYW5zZmVyIG5vbmUpCi0gKiBAaHNyYzogKGFsbG93LW5vbmUpOiBhICNHc3RTdGF0aWNQYWRUZW1wbGF0ZSBkZXNjcmliaW5nIHRoZSBoYXJuZXNzIHNyY3BhZC4KLSAqICVOVUxMIHdpbGwgbm90IGNyZWF0ZSBhIGhhcm5lc3Mgc3JjcGFkLgotICogQGVsZW1lbnRfc2lua3BhZF9uYW1lOiAoYWxsb3ctbm9uZSk6IGEgI2djaGFyIHdpdGggdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKLSAqIHNpbmtwYWQgdGhhdCBpcyB0aGVuIGxpbmtlZCB0byB0aGUgaGFybmVzcyBzcmNwYWQuIENhbiBiZSBhIHN0YXRpYyBvciByZXF1ZXN0Ci0gKiBvciBhIHNvbWV0aW1lcyBwYWQgdGhhdCBoYXMgYmVlbiBhZGRlZC4gJU5VTEwgd2lsbCBub3QgZ2V0L3JlcXVlc3QgYSBzaW5rcGFkCi0gKiBmcm9tIHRoZSBlbGVtZW50LiAoTGlrZSBpZiB0aGUgZWxlbWVudCBpcyBhIHNyYy4pCi0gKiBAaHNpbms6IChhbGxvdy1ub25lKTogYSAjR3N0U3RhdGljUGFkVGVtcGxhdGUgZGVzY3JpYmluZyB0aGUgaGFybmVzcyBzaW5rcGFkLgotICogJU5VTEwgd2lsbCBub3QgY3JlYXRlIGEgaGFybmVzcyBzaW5rcGFkLgotICogQGVsZW1lbnRfc3JjcGFkX25hbWU6IChhbGxvdy1ub25lKTogYSAjZ2NoYXIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudAotICogc3JjcGFkIHRoYXQgaXMgdGhlbiBsaW5rZWQgdG8gdGhlIGhhcm5lc3Mgc2lua3BhZCwgc2ltaWxhciB0byB0aGUKLSAqIEBlbGVtZW50X3NpbmtwYWRfbmFtZS4KLSAqCi0gKiBDcmVhdGVzIGEgbmV3IGhhcm5lc3MuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEhhcm5lc3MsIG9yICVOVUxMIGlmIHRoZSBoYXJuZXNzIGNvdWxkCi0gKiBub3QgYmUgY3JlYXRlZAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0SGFybmVzcyAqCi1nc3RfaGFybmVzc19uZXdfZnVsbCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBoc3JjLCBjb25zdCBnY2hhciAqIGVsZW1lbnRfc2lua3BhZF9uYW1lLAotICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogaHNpbmssIGNvbnN0IGdjaGFyICogZWxlbWVudF9zcmNwYWRfbmFtZSkKLXsKLSAgR3N0SGFybmVzcyAqaDsKLSAgaCA9IGdzdF9oYXJuZXNzX25ld19lbXB0eSAoKTsKLSAgZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfZnVsbCAoaCwgZWxlbWVudCwKLSAgICAgIGhzcmMsIGVsZW1lbnRfc2lua3BhZF9uYW1lLCBoc2luaywgZWxlbWVudF9zcmNwYWRfbmFtZSk7Ci0gIHJldHVybiBoOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQ6IChza2lwKQotICogQGVsZW1lbnQ6IGEgI0dzdEVsZW1lbnQgdG8gYXR0YWNoIHRoZSBoYXJuZXNzIHRvICh0cmFuc2ZlciBub25lKQotICogQGVsZW1lbnRfc2lua3BhZF9uYW1lOiAoYWxsb3ctbm9uZSk6IGEgI2djaGFyIHdpdGggdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKLSAqIHNpbmtwYWQgdGhhdCBpcyB0aGVuIGxpbmtlZCB0byB0aGUgaGFybmVzcyBzcmNwYWQuICVOVUxMIGRvZXMgbm90IGF0dGFjaCBhCi0gKiBzaW5rcGFkCi0gKiBAZWxlbWVudF9zcmNwYWRfbmFtZTogKGFsbG93LW5vbmUpOiBhICNnY2hhciB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50Ci0gKiBzcmNwYWQgdGhhdCBpcyB0aGVuIGxpbmtlZCB0byB0aGUgaGFybmVzcyBzaW5rcGFkLiAlTlVMTCBkb2VzIG5vdCBhdHRhY2ggYQotICogc3JjcGFkCi0gKgotICogQ3JlYXRlcyBhIG5ldyBoYXJuZXNzLiBXb3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgZ3N0X2hhcm5lc3NfbmV3X2Z1bGwoKSwgb25seQotICogdGhhdCBnZW5lcmljIHBhZHRlbXBsYXRlcyBhcmUgdXNlZCBmb3IgdGhlIGhhcm5lc3Mgc3JjIGFuZCBzaW5rcGFkcywgd2hpY2gKLSAqIHdpbGwgYmUgc3VmZmljaWVudCBpbiBtb3N0IHVzZWNhc2VzLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RIYXJuZXNzLCBvciAlTlVMTCBpZiB0aGUgaGFybmVzcyBjb3VsZAotICogbm90IGJlIGNyZWF0ZWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEhhcm5lc3MgKgotZ3N0X2hhcm5lc3NfbmV3X3dpdGhfZWxlbWVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgY29uc3QgZ2NoYXIgKiBlbGVtZW50X3NpbmtwYWRfbmFtZSwgY29uc3QgZ2NoYXIgKiBlbGVtZW50X3NyY3BhZF9uYW1lKQotewotICByZXR1cm4gZ3N0X2hhcm5lc3NfbmV3X2Z1bGwgKGVsZW1lbnQsCi0gICAgICAmaHNyY3RlbXBsYXRlLCBlbGVtZW50X3NpbmtwYWRfbmFtZSwgJmhzaW5rdGVtcGxhdGUsIGVsZW1lbnRfc3JjcGFkX25hbWUpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzOiAoc2tpcCkKLSAqIEBlbGVtZW50X25hbWU6IGEgI2djaGFyIGRlc2NyaWJpbmcgdGhlICNHc3RFbGVtZW50IG5hbWUKLSAqIEBlbGVtZW50X3NpbmtwYWRfbmFtZTogKGFsbG93LW5vbmUpOiBhICNnY2hhciB3aXRoIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50Ci0gKiBzaW5rcGFkIHRoYXQgaXMgdGhlbiBsaW5rZWQgdG8gdGhlIGhhcm5lc3Mgc3JjcGFkLiAlTlVMTCBkb2VzIG5vdCBhdHRhY2ggYQotICogc2lua3BhZAotICogQGVsZW1lbnRfc3JjcGFkX25hbWU6IChhbGxvdy1ub25lKTogYSAjZ2NoYXIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudAotICogc3JjcGFkIHRoYXQgaXMgdGhlbiBsaW5rZWQgdG8gdGhlIGhhcm5lc3Mgc2lua3BhZC4gJU5VTEwgZG9lcyBub3QgYXR0YWNoIGEKLSAqIHNyY3BhZAotICoKLSAqIENyZWF0ZXMgYSBuZXcgaGFybmVzcy4gV29ya3MgbGlrZSBnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50KCksCi0gKiBleGNlcHQgeW91IHNwZWNpZnkgdGhlIGZhY3RvcnluYW1lIG9mIHRoZSAjR3N0RWxlbWVudAotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RIYXJuZXNzLCBvciAlTlVMTCBpZiB0aGUgaGFybmVzcyBjb3VsZAotICogbm90IGJlIGNyZWF0ZWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEhhcm5lc3MgKgotZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLAotICAgIGNvbnN0IGdjaGFyICogZWxlbWVudF9zaW5rcGFkX25hbWUsIGNvbnN0IGdjaGFyICogZWxlbWVudF9zcmNwYWRfbmFtZSkKLXsKLSAgR3N0SGFybmVzcyAqaDsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZWxlbWVudF9uYW1lLCBOVUxMKTsKLSAgZ19hc3NlcnQgKGVsZW1lbnQgIT0gTlVMTCk7Ci0KLSAgaCA9IGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgKGVsZW1lbnQsIGVsZW1lbnRfc2lua3BhZF9uYW1lLAotICAgICAgZWxlbWVudF9zcmNwYWRfbmFtZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotICByZXR1cm4gaDsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19uZXdfd2l0aF90ZW1wbGF0ZXM6IChza2lwKQotICogQGVsZW1lbnRfbmFtZTogYSAjZ2NoYXIgZGVzY3JpYmluZyB0aGUgI0dzdEVsZW1lbnQgbmFtZQotICogQGhzcmM6IChhbGxvdy1ub25lKTogYSAjR3N0U3RhdGljUGFkVGVtcGxhdGUgZGVzY3JpYmluZyB0aGUgaGFybmVzcyBzcmNwYWQuCi0gKiAlTlVMTCB3aWxsIG5vdCBjcmVhdGUgYSBoYXJuZXNzIHNyY3BhZC4KLSAqIEBoc2luazogKGFsbG93LW5vbmUpOiBhICNHc3RTdGF0aWNQYWRUZW1wbGF0ZSBkZXNjcmliaW5nIHRoZSBoYXJuZXNzIHNpbmtwYWQuCi0gKiAlTlVMTCB3aWxsIG5vdCBjcmVhdGUgYSBoYXJuZXNzIHNpbmtwYWQuCi0gKgotICogQ3JlYXRlcyBhIG5ldyBoYXJuZXNzLCBsaWtlIGdzdF9oYXJuZXNzX25ld19mdWxsKCksIGV4Y2VwdCBpdAotICogYXNzdW1lcyB0aGUgI0dzdEVsZW1lbnQgc2lua3BhZCBpcyBuYW1lZCAic2luayIgYW5kIHNyY3BhZCBpcyBuYW1lZCAic3JjIgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RIYXJuZXNzLCBvciAlTlVMTCBpZiB0aGUgaGFybmVzcyBjb3VsZAotICogbm90IGJlIGNyZWF0ZWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEhhcm5lc3MgKgotZ3N0X2hhcm5lc3NfbmV3X3dpdGhfdGVtcGxhdGVzIChjb25zdCBnY2hhciAqIGVsZW1lbnRfbmFtZSwKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIGhzcmMsIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogaHNpbmspCi17Ci0gIEdzdEhhcm5lc3MgKmg7Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGVsZW1lbnRfbmFtZSwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChlbGVtZW50ICE9IE5VTEwpOwotCi0gIGggPSBnc3RfaGFybmVzc19uZXdfZnVsbCAoZWxlbWVudCwgaHNyYywgInNpbmsiLCBoc2luaywgInNyYyIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKLSAgcmV0dXJuIGg7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfbmV3OiAoc2tpcCkKLSAqIEBlbGVtZW50X25hbWU6IGEgI2djaGFyIGRlc2NyaWJpbmcgdGhlICNHc3RFbGVtZW50IG5hbWUKLSAqCi0gKiBDcmVhdGVzIGEgbmV3IGhhcm5lc3MuIFdvcmtzIGxpa2UgZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMoKSwgZXhjZXB0IGl0Ci0gKiBhc3N1bWVzIHRoZSAjR3N0RWxlbWVudCBzaW5rcGFkIGlzIG5hbWVkICJzaW5rIiBhbmQgc3JjcGFkIGlzIG5hbWVkICJzcmMiCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEhhcm5lc3MsIG9yICVOVUxMIGlmIHRoZSBoYXJuZXNzIGNvdWxkCi0gKiBub3QgYmUgY3JlYXRlZAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0SGFybmVzcyAqCi1nc3RfaGFybmVzc19uZXcgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lKQotewotICByZXR1cm4gZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMgKGVsZW1lbnRfbmFtZSwgInNpbmsiLCAic3JjIik7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfYWRkX3BhcnNlOiAoc2tpcCkKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAbGF1bmNobGluZTogYSAjZ2NoYXIgZGVzY3JpYmluZyBhIGdzdC1sYXVuY2ggdHlwZSBsaW5lCi0gKgotICogUGFyc2VzIHRoZSBAbGF1bmNobGluZSBhbmQgcHV0cyB0aGF0IGluIGEgI0dzdEJpbiwKLSAqIGFuZCB0aGVuIGF0dGNoZXMgdGhlIHN1cHBsaWVkICNHc3RIYXJuZXNzIHRvIHRoZSBiaW4uCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2FkZF9wYXJzZSAoR3N0SGFybmVzcyAqIGgsIGNvbnN0IGdjaGFyICogbGF1bmNobGluZSkKLXsKLSAgR3N0QmluICpiaW47Ci0gIGdjaGFyICpkZXNjOwotICBHc3RQYWQgKnBhZDsKLSAgR3N0SXRlcmF0b3IgKml0ZXI7Ci0gIGdib29sZWFuIGRvbmUgPSBGQUxTRTsKLQotICBnX3JldHVybl9pZl9mYWlsIChsYXVuY2hsaW5lICE9IE5VTEwpOwotCi0gIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJiaW4uKCAlcyApIiwgbGF1bmNobGluZSk7Ci0gIGJpbiA9Ci0gICAgICAoR3N0QmluICopIGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoZGVzYywgTlVMTCwgR1NUX1BBUlNFX0ZMQUdfTk9ORSwgTlVMTCk7Ci0gIGdfZnJlZSAoZGVzYyk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGJpbiA9PSBOVUxMKSkKLSAgICByZXR1cm47Ci0KLSAgLyogZmluZCBwYWRzIGFuZCBnaG9zdCB0aGVtIGlmIG5lY2Vzc2FyeSAqLwotICBpZiAoKHBhZCA9IGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQgKGJpbiwgR1NUX1BBRF9TUkMpKSAhPSBOVUxMKSB7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGJpbiksIGdzdF9naG9zdF9wYWRfbmV3ICgic3JjIiwgcGFkKSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgfQotICBpZiAoKHBhZCA9IGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQgKGJpbiwgR1NUX1BBRF9TSU5LKSkgIT0gTlVMTCkgewotICAgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBwYWQpKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9Ci0KLSAgaXRlciA9IGdzdF9iaW5faXRlcmF0ZV9zaW5rcyAoYmluKTsKLSAgd2hpbGUgKCFkb25lKSB7Ci0gICAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07Ci0KLSAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0IChpdGVyLCAmaXRlbSkpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOgotICAgICAgICB0dXJuX2FzeW5jX2FuZF9zeW5jX29mZiAoR1NUX0VMRU1FTlQgKGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pKSk7Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotICAgICAgICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0gICAgICAgIGdfcmV0dXJuX2lmX3JlYWNoZWQgKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0KLSAgZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfZnVsbCAoaCwgR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwKLSAgICAgICZoc3JjdGVtcGxhdGUsICJzaW5rIiwgJmhzaW5rdGVtcGxhdGUsICJzcmMiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19uZXdfcGFyc2U6IChza2lwKQotICogQGxhdW5jaGxpbmU6IGEgI2djaGFyIGRlc2NyaWJpbmcgYSBnc3QtbGF1bmNoIHR5cGUgbGluZQotICoKLSAqIENyZWF0ZXMgYSBuZXcgaGFybmVzcywgcGFyc2luZyB0aGUgQGxhdW5jaGxpbmUgYW5kIHB1dHRpbmcgdGhhdCBpbiBhICNHc3RCaW4sCi0gKiBhbmQgdGhlbiBhdHRjaGVzIHRoZSBoYXJuZXNzIHRvIHRoZSBiaW4uCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdEhhcm5lc3MsIG9yICVOVUxMIGlmIHRoZSBoYXJuZXNzIGNvdWxkCi0gKiBub3QgYmUgY3JlYXRlZAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0SGFybmVzcyAqCi1nc3RfaGFybmVzc19uZXdfcGFyc2UgKGNvbnN0IGdjaGFyICogbGF1bmNobGluZSkKLXsKLSAgR3N0SGFybmVzcyAqaDsKLSAgaCA9IGdzdF9oYXJuZXNzX25ld19lbXB0eSAoKTsKLSAgZ3N0X2hhcm5lc3NfYWRkX3BhcnNlIChoLCBsYXVuY2hsaW5lKTsKLSAgcmV0dXJuIGg7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfdGVhcmRvd246Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIFRlYXJzIGRvd24gYSBAR3N0SGFybmVzcywgZnJlZWluZyBhbGwgcmVzb3VyY2VzIGFsbG9jYXRlZCB1c2luZyBpdC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2hhcm5lc3NfdGVhcmRvd24gKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0KLSAgaWYgKHByaXYtPmJsb2NraW5nX3B1c2hfbW9kZSkgewotICAgIGdfbXV0ZXhfbG9jayAoJnByaXYtPmJsb2NraW5nX3B1c2hfbXV0ZXgpOwotICAgIHByaXYtPmJsb2NraW5nX3B1c2hfbW9kZSA9IEZBTFNFOwotICAgIGdfY29uZF9zaWduYWwgKCZwcml2LT5ibG9ja2luZ19wdXNoX2NvbmQpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmcHJpdi0+YmxvY2tpbmdfcHVzaF9tdXRleCk7Ci0gIH0KLQotICBpZiAoaC0+c3JjX2hhcm5lc3MpIHsKLSAgICBnc3RfaGFybmVzc190ZWFyZG93biAoaC0+c3JjX2hhcm5lc3MpOwotICB9Ci0KLSAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIHByaXYtPnNpbmtfZm9yd2FyZF9wYWQsIE5VTEwpOwotICBpZiAoaC0+c2lua19oYXJuZXNzKSB7Ci0gICAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgtPnNpbmtfaGFybmVzcyk7Ci0gIH0KLQotICBpZiAocHJpdi0+c3JjX2NhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHByaXYtPnNyY19jYXBzKTsKLQotICBpZiAocHJpdi0+c2lua19jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChwcml2LT5zaW5rX2NhcHMpOwotCi0gIGlmIChoLT5zcmNwYWQpIHsKLSAgICBpZiAoZ3N0X3BhZF9pc19yZXF1ZXN0X3BhZCAoR1NUX1BBRF9QRUVSIChoLT5zcmNwYWQpKSkKLSAgICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGgtPmVsZW1lbnQsIEdTVF9QQURfUEVFUiAoaC0+c3JjcGFkKSk7Ci0gICAgZ19mcmVlIChwcml2LT5lbGVtZW50X3NpbmtwYWRfbmFtZSk7Ci0KLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGgtPnNyY3BhZCwgRkFMU0UpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGgtPnNyY3BhZCk7Ci0KLSAgICBnX2FzeW5jX3F1ZXVlX3VucmVmIChwcml2LT5zcmNfZXZlbnRfcXVldWUpOwotICB9Ci0KLSAgaWYgKGgtPnNpbmtwYWQpIHsKLSAgICBpZiAoZ3N0X3BhZF9pc19yZXF1ZXN0X3BhZCAoR1NUX1BBRF9QRUVSIChoLT5zaW5rcGFkKSkpCi0gICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChoLT5lbGVtZW50LCBHU1RfUEFEX1BFRVIgKGgtPnNpbmtwYWQpKTsKLSAgICBnX2ZyZWUgKHByaXYtPmVsZW1lbnRfc3JjcGFkX25hbWUpOwotCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChoLT5zaW5rcGFkLCBGQUxTRSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoaC0+c2lua3BhZCk7Ci0KLSAgICBnX2FzeW5jX3F1ZXVlX3VucmVmIChwcml2LT5idWZmZXJfcXVldWUpOwotICAgIGdfYXN5bmNfcXVldWVfdW5yZWYgKHByaXYtPnNpbmtfZXZlbnRfcXVldWUpOwotICB9Ci0KLSAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIHByaXYtPnByb3Bvc2VfYWxsb2NhdG9yLCBOVUxMKTsKLSAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIHByaXYtPmFsbG9jYXRvciwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiBwcml2LT5wb29sLCBOVUxMKTsKLQotICAvKiBpZiB3ZSBob2xkIHRoZSBsYXN0IHJlZiwgc2V0IHRvIE5VTEwgKi8KLSAgaWYgKGdzdF9oYXJuZXNzX2VsZW1lbnRfdW5yZWYgKGgpID09IDApIHsKLSAgICBnYm9vbGVhbiBzdGF0ZV9jaGFuZ2U7Ci0gICAgR3N0U3RhdGUgc3RhdGUsIHBlbmRpbmc7Ci0gICAgc3RhdGVfY2hhbmdlID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChoLT5lbGVtZW50LCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgZ19hc3NlcnQgKHN0YXRlX2NoYW5nZSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICAgIHN0YXRlX2NoYW5nZSA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoaC0+ZWxlbWVudCwgJnN0YXRlLCAmcGVuZGluZywgMCk7Ci0gICAgZ19hc3NlcnQgKHN0YXRlX2NoYW5nZSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICAgIGdfYXNzZXJ0IChzdGF0ZSA9PSBHU1RfU1RBVEVfTlVMTCk7Ci0gIH0KLQotICBnX2NvbmRfY2xlYXIgKCZwcml2LT5ibG9ja2luZ19wdXNoX2NvbmQpOwotICBnX211dGV4X2NsZWFyICgmcHJpdi0+YmxvY2tpbmdfcHVzaF9tdXRleCk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZwcml2LT5wcml2X211dGV4KTsKLQotICBnX3B0cl9hcnJheV91bnJlZiAocHJpdi0+c3RyZXNzKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChoLT5lbGVtZW50KTsKLQotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopICYgcHJpdi0+dGVzdGNsb2NrLCBOVUxMKTsKLQotICBnX2ZyZWUgKGgtPnByaXYpOwotICBnX2ZyZWUgKGgpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NyY19wYWQ6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQHNyY3BhZDogYSAjR3N0UGFkIHRvIGxpbmsgdG8gdGhlIGhhcm5lc3Mgc2lua3BhZAotICoKLSAqIExpbmtzIHRoZSBzcGVjaWZlZCAjR3N0UGFkIHRoZSBAR3N0SGFybmVzcyBzaW5rcGFkLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYKLSAqIHBlcmhhcHMgdGhlIHNyY3BhZCBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIG9mIGNyZWF0aW5nIHRoZSBoYXJuZXNzLAotICogbGlrZSBhIGRlbXV4ZXIgdGhhdCBwcm92aWRlcyBhIHNvbWV0aW1lcy1wYWQgYWZ0ZXIgcmVjZWl2aW5nIGRhdGEuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NyY19wYWQgKEdzdEhhcm5lc3MgKiBoLCBHc3RQYWQgKiBzcmNwYWQpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLSAgR3N0UGFkTGlua1JldHVybiBsaW5rOwotICBpZiAoaC0+c2lua3BhZCA9PSBOVUxMKQotICAgIGdzdF9oYXJuZXNzX3NldHVwX3NpbmtfcGFkIChoLCAmaHNpbmt0ZW1wbGF0ZSwgTlVMTCk7Ci0gIGxpbmsgPSBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgaC0+c2lua3BhZCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAobGluaywgPT0sIEdTVF9QQURfTElOS19PSyk7Ci0gIGdfZnJlZSAocHJpdi0+ZWxlbWVudF9zcmNwYWRfbmFtZSk7Ci0gIHByaXYtPmVsZW1lbnRfc3JjcGFkX25hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChzcmNwYWQpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NpbmtfcGFkOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBzaW5rcGFkOiBhICNHc3RQYWQgdG8gbGluayB0byB0aGUgaGFybmVzcyBzcmNwYWQKLSAqCi0gKiBMaW5rcyB0aGUgc3BlY2lmZWQgI0dzdFBhZCB0aGUgQEdzdEhhcm5lc3Mgc3JjcGFkLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc19hZGRfZWxlbWVudF9zaW5rX3BhZCAoR3N0SGFybmVzcyAqIGgsIEdzdFBhZCAqIHNpbmtwYWQpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLSAgR3N0UGFkTGlua1JldHVybiBsaW5rOwotICBpZiAoaC0+c3JjcGFkID09IE5VTEwpCi0gICAgZ3N0X2hhcm5lc3Nfc2V0dXBfc3JjX3BhZCAoaCwgJmhzcmN0ZW1wbGF0ZSwgTlVMTCk7Ci0gIGxpbmsgPSBnc3RfcGFkX2xpbmsgKGgtPnNyY3BhZCwgc2lua3BhZCk7Ci0gIGdfYXNzZXJ0X2NtcGludCAobGluaywgPT0sIEdTVF9QQURfTElOS19PSyk7Ci0gIGdfZnJlZSAocHJpdi0+ZWxlbWVudF9zaW5rcGFkX25hbWUpOwotICBwcml2LT5lbGVtZW50X3NpbmtwYWRfbmFtZSA9IGdzdF9wYWRfZ2V0X25hbWUgKHNpbmtwYWQpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwczoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAY2FwczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RDYXBzIHRvIHNldCBvbiB0aGUgaGFybmVzcyBzcmNwYWQKLSAqCi0gKiBTZXRzIHRoZSBAR3N0SGFybmVzcyBzcmNwYWQgY2Fwcy4gVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIGFueSBidWZmZXJzCi0gKiBjYW4gbGVnYWxseSBiZSBwdXNoZWQgZnJvbSB0aGUgaGFybmVzcyB0byB0aGUgZWxlbWVudC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChHc3RIYXJuZXNzICogaCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBnYm9vbGVhbiBoYW5kbGVkOwotCi0gIGhhbmRsZWQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7Ci0gIGdfYXNzZXJ0IChoYW5kbGVkKTsKLSAgZ3N0X2NhcHNfdGFrZSAoJnByaXYtPnNyY19jYXBzLCBjYXBzKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgaGFuZGxlZCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoaC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfc2V0X3NpbmtfY2FwczoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAY2FwczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RDYXBzIHRvIHNldCBvbiB0aGUgaGFybmVzcyBzaW5rcGFkCi0gKgotICogU2V0cyB0aGUgQEdzdEhhcm5lc3Mgc2lua3BhZCBjYXBzLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc19zZXRfc2lua19jYXBzIChHc3RIYXJuZXNzICogaCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLQotICBnc3RfY2Fwc190YWtlICgmcHJpdi0+c2lua19jYXBzLCBjYXBzKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChoLT5zaW5rcGFkLCBnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICgpKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19zZXRfY2FwczoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAaW46ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2FwcyB0byBzZXQgb24gdGhlIGhhcm5lc3Mgc3JjcGFkCi0gKiBAb3V0OiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdENhcHMgdG8gc2V0IG9uIHRoZSBoYXJuZXNzIHNpbmtwYWQKLSAqCi0gKiBTZXRzIHRoZSBAR3N0SGFybmVzcyBzcmNwYWQgYW5kIHNpbmtwYWQgY2Fwcy4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2hhcm5lc3Nfc2V0X2NhcHMgKEdzdEhhcm5lc3MgKiBoLCBHc3RDYXBzICogaW4sIEdzdENhcHMgKiBvdXQpCi17Ci0gIGdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHMgKGgsIG91dCk7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgaW4pOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHI6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQHN0cjogYSBAZ2NoYXIgZGVzY3JpYmluZyBhICNHc3RDYXBzIHRvIHNldCBvbiB0aGUgaGFybmVzcyBzcmNwYWQKLSAqCi0gKiBTZXRzIHRoZSBAR3N0SGFybmVzcyBzcmNwYWQgY2FwcyB1c2luZyBhIHN0cmluZy4gVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlCi0gKiBhbnkgYnVmZmVycyBjYW4gbGVnYWxseSBiZSBwdXNoZWQgZnJvbSB0aGUgaGFybmVzcyB0byB0aGUgZWxlbWVudC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoR3N0SGFybmVzcyAqIGgsIGNvbnN0IGdjaGFyICogc3RyKQotewotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdzdF9jYXBzX2Zyb21fc3RyaW5nIChzdHIpKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19zZXRfc2lua19jYXBzX3N0cjoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAc3RyOiBhIEBnY2hhciBkZXNjcmliaW5nIGEgI0dzdENhcHMgdG8gc2V0IG9uIHRoZSBoYXJuZXNzIHNpbmtwYWQKLSAqCi0gKiBTZXRzIHRoZSBAR3N0SGFybmVzcyBzaW5rcGFkIGNhcHMgdXNpbmcgYSBzdHJpbmcuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHNfc3RyIChHc3RIYXJuZXNzICogaCwgY29uc3QgZ2NoYXIgKiBzdHIpCi17Ci0gIGdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHMgKGgsIGdzdF9jYXBzX2Zyb21fc3RyaW5nIChzdHIpKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19zZXRfY2Fwc19zdHI6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGluOiBhIEBnY2hhciBkZXNjcmliaW5nIGEgI0dzdENhcHMgdG8gc2V0IG9uIHRoZSBoYXJuZXNzIHNyY3BhZAotICogQG91dDogYSBAZ2NoYXIgZGVzY3JpYmluZyBhICNHc3RDYXBzIHRvIHNldCBvbiB0aGUgaGFybmVzcyBzaW5rcGFkCi0gKgotICogU2V0cyB0aGUgQEdzdEhhcm5lc3Mgc3JjcGFkIGFuZCBzaW5rcGFkIGNhcHMgdXNpbmcgc3RyaW5ncy4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2hhcm5lc3Nfc2V0X2NhcHNfc3RyIChHc3RIYXJuZXNzICogaCwgY29uc3QgZ2NoYXIgKiBpbiwgY29uc3QgZ2NoYXIgKiBvdXQpCi17Ci0gIGdzdF9oYXJuZXNzX3NldF9zaW5rX2NhcHNfc3RyIChoLCBvdXQpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCBpbik7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfdXNlX3N5c3RlbWNsb2NrOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqCi0gKiBTZXRzIHRoZSBzeXN0ZW0gI0dzdENsb2NrIG9uIHRoZSBAR3N0SGFybmVzcyAjR3N0RWxlbWVudAotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc191c2Vfc3lzdGVtY2xvY2sgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RDbG9jayAqY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLSAgZ19hc3NlcnQgKGNsb2NrICE9IE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfY2xvY2sgKGgtPmVsZW1lbnQsIGNsb2NrKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2s6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIFNldHMgdGhlICNHc3RUZXN0Q2xvY2sgb24gdGhlICNHc3RIYXJuZXNzICNHc3RFbGVtZW50Ci0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2sgKEdzdEhhcm5lc3MgKiBoKQotewotICBnc3RfZWxlbWVudF9zZXRfY2xvY2sgKGgtPmVsZW1lbnQsIEdTVF9DTE9DS19DQVNUIChoLT5wcml2LT50ZXN0Y2xvY2spKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqCi0gKiBHZXQgdGhlICNHc3RUZXN0Q2xvY2suIFVzZWZ1bCBpZiBzcGVjaWZpYyBvcGVyYXRpb25zIG9uIHRoZSB0ZXN0Y2xvY2sgaXMKLSAqIG5lZWRlZC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0VGVzdENsb2NrLCBvciAlTlVMTCBpZiB0aGUgdGVzdGNsb2NrIGlzIG5vdAotICogcHJlc2VudC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdFRlc3RDbG9jayAqCi1nc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChHc3RIYXJuZXNzICogaCkKLXsKLSAgcmV0dXJuIGdzdF9vYmplY3RfcmVmIChoLT5wcml2LT50ZXN0Y2xvY2spOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3NldF90aW1lOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEB0aW1lOiBhICNHc3RDbG9ja1RpbWUgdG8gYWR2YW5jZSB0aGUgY2xvY2sgdG8KLSAqCi0gKiBBZHZhbmNlIHRoZSAjR3N0VGVzdENsb2NrIHRvIGEgc3BlY2lmaWMgdGltZS4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgQGdib29sZWFuICVUUlVFIGlmIHRoZSB0aW1lIGNvdWxkIGJlIHNldC4gJUZBTFNFIGlmIG5vdC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfaGFybmVzc19zZXRfdGltZSAoR3N0SGFybmVzcyAqIGgsIEdzdENsb2NrVGltZSB0aW1lKQotewotICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAoaC0+cHJpdi0+dGVzdGNsb2NrLCB0aW1lKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHM6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQHdhaXRzOiBhICNndWludCBkZXNjcmliaW5nIHRoZSBudW1iZXJzIG9mICNHc3RDbG9ja0lEIHJlZ2lzdGVyZWQgd2l0aAotICogdGhlICNHc3RUZXN0Q2xvY2sKLSAqIEB0aW1lb3V0OiBhICNndWludCBkZXNjcmliaW5nIGhvdyBtYW55IHNlY29uZHMgdG8gd2FpdCBmb3IgQHdhaXRzIHRvIGJlIHRydWUKLSAqCi0gKiBXYWl0cyBmb3IgQHRpbWVvdXQgc2Vjb25kcyB1bnRpbCBAd2FpdHMgbnVtYmVyIG9mICNHc3RDbG9ja0lEIHdhaXRzIGlzCi0gKiByZWdpc3RlcmVkIHdpdGggdGhlICNHc3RUZXN0Q2xvY2suIFVzZWZ1bCBmb3Igd3JpdGluZyBkZXRlcm1pbmlzdGljIHRlc3RzLAotICogd2hlcmUgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgYW4gZXhwZWN0ZWQgbnVtYmVyIG9mIHdhaXRzIGhhdmUgYmVlbgotICogcmVhY2hlZC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgQGdib29sZWFuICVUUlVFIGlmIHRoZSB3YWl0cyBoYXZlIGJlZW4gcmVnaXN0ZXJlZCwgJUZBTFNFIGlmIG5vdC4KLSAqIChDb3VsZCBiZSB0aGF0IGl0IHRpbWVkIG91dCB3YWl0aW5nIG9yIHRoYXQgbW9yZSB3YWl0cyB0aGVuIHdhaXRzIHdhcyBmb3VuZCkKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0cyAoR3N0SGFybmVzcyAqIGgsIGd1aW50IHdhaXRzLCBndWludCB0aW1lb3V0KQotewotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jayA9IGgtPnByaXYtPnRlc3RjbG9jazsKLSAgZ2ludDY0IHN0YXJ0X3RpbWU7Ci0gIGdib29sZWFuIHJldDsKLQotICBzdGFydF90aW1lID0gZ19nZXRfbW9ub3RvbmljX3RpbWUgKCk7Ci0gIHdoaWxlIChnc3RfdGVzdF9jbG9ja19wZWVrX2lkX2NvdW50ICh0ZXN0Y2xvY2spIDwgd2FpdHMpIHsKLSAgICBnaW50NjQgdGltZV9zcGVudDsKLQotICAgIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAvIDEwMDApOwotICAgIHRpbWVfc3BlbnQgPSBnX2dldF9tb25vdG9uaWNfdGltZSAoKSAtIHN0YXJ0X3RpbWU7Ci0gICAgaWYgKCh0aW1lX3NwZW50IC8gR19VU0VDX1BFUl9TRUMpID4gdGltZW91dCkKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gKHdhaXRzID09IGdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnQgKHRlc3RjbG9jaykpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQ6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIEEgImNyYW5rIiBjb25zaXN0cyBvZiB0aHJlZSBzdGVwczoKLSAqIDE6IFdhaXQgZm9yIGEgI0dzdENsb2NrSUQgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSAjR3N0VGVzdENsb2NrLgotICogMjogQWR2YW5jZSB0aGUgI0dzdFRlc3RDbG9jayB0byB0aGUgdGltZSB0aGUgI0dzdENsb2NrSUQgaXMgd2FpdGluZyBmb3IuCi0gKiAzOiBSZWxlYXNlIHRoZSAjR3N0Q2xvY2tJRCB3YWl0LgotICogVG9nZXRoZXIsIHRoaXMgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gbm90IGhhdmUgdG8gdGhpbmsgYWJvdXQgdGhlIGRldGFpbHMKLSAqIGFyb3VuZCBjbG9ja3MgYW5kIHRpbWUsIGJ1dCBzdGlsbCBiZWluZyBhYmxlIHRvIHdyaXRlIGRldGVybWluaXN0aWMgdGVzdHMKLSAqIHRoYXQgYXJlIGRlcGVuZGFudCBvbiB0aGlzLiBBICJjcmFuayIgY2FuIGJlIHRob3VnaCBvZiBhcyB0aGUgbm90aW9uIG9mCi0gKiBtYW51YWxseSBkcml2aW5nIHRoZSBjbG9jayBmb3J3YXJkIHRvIGl0cyBuZXh0IGxvZ2ljYWwgc3RlcC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgQGdib29sZWFuICVUUlVFIGlmIHRoZSAiY3JhbmsiIHdhcyBzdWNjZXNzZnVsLCAlRkFMU0UgaWYgbm90LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ2Jvb2xlYW4KLWdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChHc3RIYXJuZXNzICogaCkKLXsKLSAgcmV0dXJuIGdzdF90ZXN0X2Nsb2NrX2NyYW5rIChoLT5wcml2LT50ZXN0Y2xvY2spOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2NyYW5rX211bHRpcGxlX2Nsb2NrX3dhaXRzOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEB3YWl0czogYSAjZ3VpbnQgZGVzY3JpYmluZyB0aGUgbnVtYmVyIG9mICNHc3RDbG9ja0lEcyB0byBjcmFuawotICoKLSAqIFNpbWlsYXIgdG8gZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQoKSwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdG8gdXNlCi0gKiBpZiB5b3VyIGhhcm5lc3NlZCBlbGVtZW50KHMpIGFyZSB1c2luZyBtb3JlIHRoZW4gb25lIGdzdF9jbG9ja19pZF93YWl0LgotICogRmFpbGluZyB0byBkbyBzbyBjYW4gKGFuZCB3aWxsKSBtYWtlIGl0IHJhY3kgd2hpY2ggI0dzdENsb2NrSUQgeW91IGFjdHVhbGx5Ci0gKiBhcmUgcmVsZWFzaW5nLCB3aGVyZSBhcyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvY2VzcyBhbGwgdGhlIHdhaXRzIGF0IHRoZQotICogc2FtZSB0aW1lLCBlbnN1cmluZyB0aGF0IG9uZSB0aHJlYWQgY2FuJ3QgcmVnaXN0ZXIgYW5vdGhlciB3YWl0IGJlZm9yZQotICogYm90aCBhcmUgcmVsZWFzZWQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhIEBnYm9vbGVhbiAlVFJVRSBpZiB0aGUgImNyYW5rIiB3YXMgc3VjY2Vzc2Z1bCwgJUZBTFNFIGlmIG5vdC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfaGFybmVzc19jcmFua19tdWx0aXBsZV9jbG9ja193YWl0cyAoR3N0SGFybmVzcyAqIGgsIGd1aW50IHdhaXRzKQotewotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jayA9IGgtPnByaXYtPnRlc3RjbG9jazsKLSAgR0xpc3QgKnBlbmRpbmc7Ci0gIGd1aW50IHByb2Nlc3NlZDsKLQotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkcyAodGVzdGNsb2NrLCB3YWl0cywgJnBlbmRpbmcpOwotICBnc3RfaGFybmVzc19zZXRfdGltZSAoaCwgZ3N0X3Rlc3RfY2xvY2tfaWRfbGlzdF9nZXRfbGF0ZXN0X3RpbWUgKHBlbmRpbmcpKTsKLSAgcHJvY2Vzc2VkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19pZF9saXN0ICh0ZXN0Y2xvY2ssIHBlbmRpbmcpOwotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKHBlbmRpbmcsIGdzdF9jbG9ja19pZF91bnJlZik7Ci0gIHJldHVybiBwcm9jZXNzZWQgPT0gd2FpdHM7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfcGxheToKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogVGhpcyB3aWxsIHNldCB0aGUgaGFybmVzc2VkICNHc3RFbGVtZW50IHRvICVHU1RfU1RBVEVfUExBWUlORy4KLSAqICNHc3RFbGVtZW50cyB3aXRob3V0IGEgc2luay0jR3N0UGFkIGFuZCB3aXRoIHRoZSAlR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UKLSAqIGZsYWcgc2V0IGlzIGNvbmNpZGVyZWQgYSBzcmMgI0dzdEVsZW1lbnQKLSAqIE5vbi1zcmMgI0dzdEVsZW1lbnRzIChsaWtlIHNpbmtzIGFuZCBmaWx0ZXJzKSBhcmUgYXV0b21hdGljYWxseSBzZXQgdG8KLSAqIHBsYXlpbmcgYnkgdGhlICNHc3RIYXJuZXNzLCBidXQgc3JjICNHc3RFbGVtZW50cyBhcmUgbm90IHRvIGF2b2lkIHRoZW0KLSAqIHN0YXJ0aW5nIHRvIHByb2R1Y2UgYnVmZmVycy4KLSAqIEhlbmNlLCBmb3Igc3JjICNHc3RFbGVtZW50IHlvdSBtdXN0IGNhbGwgZ3N0X2hhcm5lc3NfcGxheSgpIGV4cGxpY2l0bHkuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX3BsYXkgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsKLSAgZ2Jvb2xlYW4gc3RhdGVfY2hhbmdlOwotICBzdGF0ZV9jaGFuZ2UgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGgtPmVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ19hc3NlcnRfY21waW50IChHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsID09LCBzdGF0ZV9jaGFuZ2UpOwotICBzdGF0ZV9jaGFuZ2UgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKGgtPmVsZW1lbnQsICZzdGF0ZSwgJnBlbmRpbmcsIDApOwotICBnX2Fzc2VydF9jbXBpbnQgKEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgPT0sIHN0YXRlX2NoYW5nZSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoR1NUX1NUQVRFX1BMQVlJTkcsID09LCBzdGF0ZSk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfc2V0X2Jsb2NraW5nX3B1c2hfbW9kZToKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogU2V0dGluZyB0aGlzIHdpbGwgbWFrZSB0aGUgaGFybmVzcyBibG9jayBpbiB0aGUgY2hhaW4tZnVuY3Rpb24sIGFuZAotICogdGhlbiByZWxlYXNlIHdoZW4gZ3N0X2hhcm5lc3NfcHVsbCgpIG9yIGdzdF9oYXJuZXNzX3RyeV9wdWxsKCkgaXMgY2FsbGVkLgotICogQ2FuIGJlIHVzZWZ1bCB3aGVuIHdhbnRpbmcgdG8gY29udHJvbCBhIHNyYy1lbGVtZW50IHRoYXQgaXMgbm90IGltcGxlbWVudGluZwotICogZ3N0X2Nsb2NrX2lkX3dhaXQoKSBzbyBpdCBjYW4ndCBiZSBjb250cm9sbGVkIGJ5IHRoZSAjR3N0VGVzdENsb2NrLCBzaW5jZQotICogaXQgb3RoZXJ3aXNlIHdvdWxkIHByb2R1Y2UgYnVmZmVycyBhcyBmYXN0IGFzIHBvc3NpYmxlLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc19zZXRfYmxvY2tpbmdfcHVzaF9tb2RlIChHc3RIYXJuZXNzICogaCkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICBwcml2LT5ibG9ja2luZ19wdXNoX21vZGUgPSBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3NldF9mb3J3YXJkaW5nOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBmb3J3YXJkaW5nOiBhICNnYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBmb3J3YXJkaW5nCi0gKgotICogQXMgYSBjb252ZW5pZW5jZSwgYSBzcmMtaGFybmVzcyB3aWxsIGZvcndhcmQgJUdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsCi0gKiAlR1NUX0VWRU5UX0NBUFMgYW5kICVHU1RfRVZFTlRfU0VHTUVOVCB0byB0aGUgbWFpbi1oYXJuZXNzIGlmIGZvcndhcmRpbmcKLSAqIGlzIGVuYWJsZWQsIGFuZCBmb3J3YXJkIGFueSBzdGlja3ktZXZlbnRzIGZyb20gdGhlIG1haW4taGFybmVzcyB0bwotICogdGhlIHNpbmstaGFybmVzcy4gSXQgd2lsbCBhbHNvIGZvcndhcmQgdGhlICVHU1RfUVVFUllfQUxMT0NBVElPTi4KLSAqCi0gKiBJZiBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCB0aGUgdXNlciB3aWxsIGhhdmUgdG8gZWl0aGVyIG1hbnVhbGx5IHB1c2gKLSAqIHRoZXNlIGV2ZW50cyBmcm9tIHRoZSBzcmMtaGFybmVzcyB1c2luZyBnc3RfaGFybmVzc19zcmNfcHVzaF9ldmVudCgpLCBvcgotICogY3JlYXRlIGFuZCBwdXNoIHRoZW0gbWFudWFsbHkuIFdoaWxlIHRoaXMgd2lsbCBhbGxvdyBmdWxsIGNvbnRyb2wgYW5kCi0gKiBpbnNwZWN0aW9uIG9mIHRoZXNlIGV2ZW50cywgZm9yIHRoZSBtb3N0IGNhc2VzIGhhdmluZyBmb3J3YXJkaW5nIGVuYWJsZWQKLSAqIHdpbGwgYmUgc3VmZmljaWVudCB3aGVuIHdyaXRpbmcgYSB0ZXN0IHdoZXJlIHRoZSBzcmMtaGFybmVzcycgbWFpbiBmdW5jdGlvbgotICogaXMgcHJvdmlkaW5nIGRhdGEgZm9yIHRoZSBtYWluLWhhcm5lc3MuCi0gKgotICogRm9yd2FyZGluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX3NldF9mb3J3YXJkaW5nIChHc3RIYXJuZXNzICogaCwgZ2Jvb2xlYW4gZm9yd2FyZGluZykKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICBwcml2LT5mb3J3YXJkaW5nID0gZm9yd2FyZGluZzsKLSAgaWYgKGgtPnNyY19oYXJuZXNzKQotICAgIGdzdF9oYXJuZXNzX3NldF9mb3J3YXJkaW5nIChoLT5zcmNfaGFybmVzcywgZm9yd2FyZGluZyk7Ci0gIGlmIChoLT5zaW5rX2hhcm5lc3MpCi0gICAgZ3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmcgKGgtPnNpbmtfaGFybmVzcywgZm9yd2FyZGluZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc19zZXRfZm9yd2FyZF9wYWQgKEdzdEhhcm5lc3MgKiBoLCBHc3RQYWQgKiBmd2RwYWQpCi17Ci0gIEhBUk5FU1NfTE9DSyAoaCk7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiBoLT5wcml2LT5zaW5rX2ZvcndhcmRfcGFkLAotICAgICAgKEdzdE9iamVjdCAqKSBmd2RwYWQpOwotICBIQVJORVNTX1VOTE9DSyAoaCk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfY3JlYXRlX2J1ZmZlcjoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAc2l6ZTogYSAjZ3NpemUgc3BlY2lmeWluZyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCi0gKgotICogQWxsb2NhdGVzIGEgYnVmZmVyIHVzaW5nIGEgI0dzdEJ1ZmZlclBvb2wgaWYgcHJlc2VudCwgb3IgZWxzZSB1c2luZyB0aGUKLSAqIGNvbmZpZ3VyZWQgI0dzdEFsbG9jYXRvciBhbmQgI0dzdEFsbG9jYXRpb25QYXJhbXMKLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEJ1ZmZlciBvZiBzaXplIEBzaXplCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RCdWZmZXIgKgotZ3N0X2hhcm5lc3NfY3JlYXRlX2J1ZmZlciAoR3N0SGFybmVzcyAqIGgsIGdzaXplIHNpemUpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLSAgR3N0QnVmZmVyICpyZXQgPSBOVUxMOwotICBHc3RGbG93UmV0dXJuIGZsb3c7Ci0KLSAgaWYgKGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKGgtPnNyY3BhZCkpCi0gICAgZ3N0X2hhcm5lc3NfbmVnb3RpYXRlIChoKTsKLQotICBpZiAocHJpdi0+cG9vbCkgewotICAgIGZsb3cgPSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHByaXYtPnBvb2wsICZyZXQsIE5VTEwpOwotICAgIGdfYXNzZXJ0X2NtcGludCAoZmxvdywgPT0sIEdTVF9GTE9XX09LKTsKLSAgICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAocmV0KSAhPSBzaXplKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChoLAotICAgICAgICAgICJ1c2UgZmFsbGJhY2ssIHBvb2wgaXMgY29uZmlndXJlZCB3aXRoIGEgZGlmZmVyZW50IHNpemUgKCV6dSAhPSAlenUpIiwKLSAgICAgICAgICBzaXplLCBnc3RfYnVmZmVyX2dldF9zaXplIChyZXQpKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHJldCk7Ci0gICAgICByZXQgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGlmICghcmV0KQotICAgIHJldCA9Ci0gICAgICAgIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChwcml2LT5hbGxvY2F0b3IsIHNpemUsCi0gICAgICAgICZwcml2LT5hbGxvY2F0aW9uX3BhcmFtcyk7Ci0KLSAgZ19hc3NlcnQgKHJldCAhPSBOVUxMKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19wdXNoOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlciB0byBwdXNoCi0gKgotICogUHVzaGVzIGEgI0dzdEJ1ZmZlciBvbiB0aGUgI0dzdEhhcm5lc3Mgc3JjcGFkLiBUaGUgc3RhbmRhcmQgd2F5IG9mCi0gKiBpbnRlcmFjdGluZyB3aXRoIGFuIGhhcm5lc3NlZCBlbGVtZW50LgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybiB3aXRoIHRoZSByZXN1bHQgZnJvbSB0aGUgcHVzaAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X2hhcm5lc3NfcHVzaCAoR3N0SGFybmVzcyAqIGgsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICBnX2Fzc2VydCAoYnVmZmVyICE9IE5VTEwpOwotICBwcml2LT5sYXN0X3B1c2hfdHMgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKTsKLSAgcmV0dXJuIGdzdF9wYWRfcHVzaCAoaC0+c3JjcGFkLCBidWZmZXIpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3B1bGw6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIFB1bGxzIGEgI0dzdEJ1ZmZlciBmcm9tIHRoZSAjR0FzeW5jUXVldWUgb24gdGhlICNHc3RIYXJuZXNzIHNpbmtwYWQuIFRoZSBwdWxsCi0gKiB3aWxsIHRpbWVvdXQgaW4gNjAgc2Vjb25kcy4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgd2F5IG9mIGdldHRpbmcgYSBidWZmZXIKLSAqIGZyb20gYSBoYXJuZXNzZWQgI0dzdEVsZW1lbnQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RCdWZmZXIgb3IgJU5VTEwgaWYgdGltZWQgb3V0LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0QnVmZmVyICoKLWdzdF9oYXJuZXNzX3B1bGwgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gKEdzdEJ1ZmZlciAqKSBnX2FzeW5jX3F1ZXVlX3RpbWVvdXRfcG9wIChwcml2LT5idWZmZXJfcXVldWUsCi0gICAgICBHX1VTRUNfUEVSX1NFQyAqIDYwKTsKLQotICBpZiAocHJpdi0+YmxvY2tpbmdfcHVzaF9tb2RlKSB7Ci0gICAgZ19tdXRleF9sb2NrICgmcHJpdi0+YmxvY2tpbmdfcHVzaF9tdXRleCk7Ci0gICAgZ19jb25kX3NpZ25hbCAoJnByaXYtPmJsb2NraW5nX3B1c2hfY29uZCk7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZwcml2LT5ibG9ja2luZ19wdXNoX211dGV4KTsKLSAgfQotCi0gIHJldHVybiBidWY7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfdHJ5X3B1bGw6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIFB1bGxzIGEgI0dzdEJ1ZmZlciBmcm9tIHRoZSAjR0FzeW5jUXVldWUgb24gdGhlICNHc3RIYXJuZXNzIHNpbmtwYWQuIFVubGlrZQotICogZ3N0X2hhcm5lc3NfcHVsbCB0aGlzIHdpbGwgbm90IHdhaXQgZm9yIGFueSBidWZmZXJzIGlmIG5vdCBhbnkgYXJlIHByZXNlbnQsCi0gKiBhbmQgcmV0dXJuICVOVUxMIHN0cmFpZ2h0IGF3YXkuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RCdWZmZXIgb3IgJU5VTEwgaWYgbm8gYnVmZmVycyBhcmUgcHJlc2VudCBpbiB0aGUgI0dBc3luY1F1ZXVlCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RCdWZmZXIgKgotZ3N0X2hhcm5lc3NfdHJ5X3B1bGwgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gKEdzdEJ1ZmZlciAqKSBnX2FzeW5jX3F1ZXVlX3RyeV9wb3AgKHByaXYtPmJ1ZmZlcl9xdWV1ZSk7Ci0KLSAgaWYgKHByaXYtPmJsb2NraW5nX3B1c2hfbW9kZSkgewotICAgIGdfbXV0ZXhfbG9jayAoJnByaXYtPmJsb2NraW5nX3B1c2hfbXV0ZXgpOwotICAgIGdfY29uZF9zaWduYWwgKCZwcml2LT5ibG9ja2luZ19wdXNoX2NvbmQpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmcHJpdi0+YmxvY2tpbmdfcHVzaF9tdXRleCk7Ci0gIH0KLQotICByZXR1cm4gYnVmOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3B1c2hfYW5kX3B1bGw6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyIHRvIHB1c2gKLSAqCi0gKiBCYXNpY2FsbHkgYSBnc3RfaGFybmVzc19wdXNoIGFuZCBhIGdzdF9oYXJuZXNzX3B1bGwgaW4gb25lIGxpbmUuIFJlZmxlY3RzCi0gKiB0aGUgZmFjdCB0aGF0IHlvdSBvZnRlbiB3YW50IHRvIGRvIGV4YWN0bHkgdGhpcyBpbiB5b3VyIHRlc3Q6IFB1c2ggb25lIGJ1ZmZlcgotICogaW4sIGFuZCBpbnNwZWN0IHRoZSBvdXRjb21lLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjR3N0QnVmZmVyIG9yICVOVUxMIGlmIHRpbWVkIG91dC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEJ1ZmZlciAqCi1nc3RfaGFybmVzc19wdXNoX2FuZF9wdWxsIChHc3RIYXJuZXNzICogaCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBnc3RfaGFybmVzc19wdXNoIChoLCBidWZmZXIpOwotICByZXR1cm4gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZDoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogVGhlIHRvdGFsIG51bWJlciBvZiAjR3N0QnVmZmVycyB0aGF0IGhhcyBhcnJpdmVkIG9uIHRoZSAjR3N0SGFybmVzcyBzaW5rcGFkLgotICogVGhpcyBudW1iZXIgaW5jbHVkZXMgYnVmZmVycyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGFzIHdlbGwgYXMgYnVmZmVycwotICogdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwdWxsZWQgb3V0LgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjZ3VpbnQgbnVtYmVyIG9mIGJ1ZmZlcnMgcmVjZWl2ZWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWd1aW50Ci1nc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChHc3RIYXJuZXNzICogaCkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICByZXR1cm4gZ19hdG9taWNfaW50X2dldCAoJnByaXYtPnJlY3ZfYnVmZmVycyk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZToKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogVGhlIG51bWJlciBvZiAjR3N0QnVmZmVycyBjdXJyZW50bHkgaW4gdGhlICNHc3RIYXJuZXNzIHNpbmtwYWQgI0dBc3luY1F1ZXVlCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNndWludCBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWd1aW50Ci1nc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlIChHc3RIYXJuZXNzICogaCkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICByZXR1cm4gZ19hc3luY19xdWV1ZV9sZW5ndGggKHByaXYtPmJ1ZmZlcl9xdWV1ZSk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfc2V0X2Ryb3BfYnVmZmVyczoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAZHJvcF9idWZmZXJzOiBhICNnYm9vbGVhbiBzcGVjaWZ5aW5nIHRvIGRyb3Agb3V0Z29pbmcgYnVmZmVycyBvciBub3QKLSAqCi0gKiBXaGVuIHNldCB0byAlVFJVRSwgaW5zdGVhZCBvZiBwbGFjaW5nIHRoZSBidWZmZXJzIGFycml2aW5nIGZyb20gdGhlIGhhcm5lc3NlZAotICogI0dzdEVsZW1lbnQgaW5zaWRlIHRoZSBzaW5rcGFkcyAjR0FzeW5jUXVldWUsIHRoZXkgYXJlIGluc3RlYWQgdW5yZWZmZWQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX3NldF9kcm9wX2J1ZmZlcnMgKEdzdEhhcm5lc3MgKiBoLCBnYm9vbGVhbiBkcm9wX2J1ZmZlcnMpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLSAgcHJpdi0+ZHJvcF9idWZmZXJzID0gZHJvcF9idWZmZXJzOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2R1bXBfdG9fZmlsZToKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAZmlsZW5hbWU6IGEgI2djaGFyIHdpdGggYSB0aGUgbmFtZSBvZiBhIGZpbGUKLSAqCi0gKiBBbGxvd3MgeW91IHRvIGR1bXAgdGhlICNHc3RCdWZmZXJzIHRoZSAjR3N0SGFybmVzcyBzaW5rcGFkICNHQXN5bmNRdWV1ZQotICogdG8gYSBmaWxlLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc19kdW1wX3RvX2ZpbGUgKEdzdEhhcm5lc3MgKiBoLCBjb25zdCBnY2hhciAqIGZpbGVuYW1lKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIEZJTEUgKmZkOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZmQgPSBmb3BlbiAoZmlsZW5hbWUsICJ3YiIpOwotICBnX2Fzc2VydCAoZmQpOwotCi0gIHdoaWxlICgoYnVmID0gZ19hc3luY19xdWV1ZV90cnlfcG9wIChwcml2LT5idWZmZXJfcXVldWUpKSkgewotICAgIEdzdE1hcEluZm8gaW5mbzsKLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKLSAgICBmd3JpdGUgKGluZm8uZGF0YSwgMSwgaW5mby5zaXplLCBmZCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mbyk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfQotCi0gIGZmbHVzaCAoZmQpOwotICBmY2xvc2UgKGZkKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19nZXRfbGFzdF9wdXNoZWRfdGltZXN0YW1wOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqCi0gKiBHZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCAjR3N0QnVmZmVyIHB1c2hlZCBvbiB0aGUgI0dzdEhhcm5lc3Mgc3JjcGFkLAotICogdHlwaWNhbGx5IHdpdGggZ3N0X2hhcm5lc3NfcHVzaCBvciBnc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjR3N0Q2xvY2tUaW1lIHdpdGggdGhlIHRpbWVzdGFtcCBvciAlR1NUX0NMT0NLX1RJTUVfTk9ORSBpZiBubwotICogI0dzdEJ1ZmZlciBoYXMgYmVlbiBwdXNoZWQgb24gdGhlICNHc3RIYXJuZXNzIHNyY3BhZAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0Q2xvY2tUaW1lCi1nc3RfaGFybmVzc19nZXRfbGFzdF9wdXNoZWRfdGltZXN0YW1wIChHc3RIYXJuZXNzICogaCkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICByZXR1cm4gcHJpdi0+bGFzdF9wdXNoX3RzOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3B1c2hfZXZlbnQ6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGV2ZW50OiBhICNHc3RFdmVudCB0byBwdXNoCi0gKgotICogUHVzaGVzIGFuICNHc3RFdmVudCBvbiB0aGUgI0dzdEhhcm5lc3Mgc3JjcGFkLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjZ2Jvb2xlYW4gd2l0aCB0aGUgcmVzdWx0IGZyb20gdGhlIHB1c2gKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfaGFybmVzc19wdXNoX2V2ZW50IChHc3RIYXJuZXNzICogaCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgcmV0dXJuIGdzdF9wYWRfcHVzaF9ldmVudCAoaC0+c3JjcGFkLCBldmVudCk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfcHVsbF9ldmVudDoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogUHVsbHMgYW4gI0dzdEV2ZW50IGZyb20gdGhlICNHQXN5bmNRdWV1ZSBvbiB0aGUgI0dzdEhhcm5lc3Mgc2lua3BhZC4KLSAqIFRpbWVvdXRzIGFmdGVyIDYwIHNlY29uZHMgc2ltaWxhciB0byBnc3RfaGFybmVzc19wdWxsLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjR3N0RXZlbnQgb3IgJU5VTEwgaWYgdGltZWQgb3V0LgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0RXZlbnQgKgotZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoR3N0SGFybmVzcyAqIGgpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLSAgcmV0dXJuIChHc3RFdmVudCAqKSBnX2FzeW5jX3F1ZXVlX3RpbWVvdXRfcG9wIChwcml2LT5zaW5rX2V2ZW50X3F1ZXVlLAotICAgICAgR19VU0VDX1BFUl9TRUMgKiA2MCk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfZXZlbnQ6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIFB1bGxzIGFuICNHc3RFdmVudCBmcm9tIHRoZSAjR0FzeW5jUXVldWUgb24gdGhlICNHc3RIYXJuZXNzIHNpbmtwYWQuCi0gKiBTZWUgZ3N0X2hhcm5lc3NfdHJ5X3B1bGwgZm9yIGRldGFpbHMuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RFdmVudCBvciAlTlVMTCBpZiBubyBidWZmZXJzIGFyZSBwcmVzZW50IGluIHRoZSAjR0FzeW5jUXVldWUKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEV2ZW50ICoKLWdzdF9oYXJuZXNzX3RyeV9wdWxsX2V2ZW50IChHc3RIYXJuZXNzICogaCkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICByZXR1cm4gKEdzdEV2ZW50ICopIGdfYXN5bmNfcXVldWVfdHJ5X3BvcCAocHJpdi0+c2lua19ldmVudF9xdWV1ZSk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfZXZlbnRzX3JlY2VpdmVkOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqCi0gKiBUaGUgdG90YWwgbnVtYmVyIG9mICNHc3RFdmVudHMgdGhhdCBoYXMgYXJyaXZlZCBvbiB0aGUgI0dzdEhhcm5lc3Mgc2lua3BhZAotICogVGhpcyBudW1iZXIgaW5jbHVkZXMgZXZlbnRzIGhhbmRsZWQgYnkgdGhlIGhhcm5lc3MgYXMgd2VsbCBhcyBldmVudHMKLSAqIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcHVsbGVkIG91dC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI2d1aW50IG51bWJlciBvZiBldmVudHMgcmVjZWl2ZWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWd1aW50Ci1nc3RfaGFybmVzc19ldmVudHNfcmVjZWl2ZWQgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIHJldHVybiBnX2F0b21pY19pbnRfZ2V0ICgmcHJpdi0+cmVjdl9ldmVudHMpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZToKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogVGhlIG51bWJlciBvZiAjR3N0RXZlbnRzIGN1cnJlbnRseSBpbiB0aGUgI0dzdEhhcm5lc3Mgc2lua3BhZCAjR0FzeW5jUXVldWUKLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI2d1aW50IG51bWJlciBvZiBldmVudHMgaW4gdGhlIHF1ZXVlCi0gKgotICogU2luY2U6IDEuNgotICovCi1ndWludAotZ3N0X2hhcm5lc3NfZXZlbnRzX2luX3F1ZXVlIChHc3RIYXJuZXNzICogaCkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICByZXR1cm4gZ19hc3luY19xdWV1ZV9sZW5ndGggKHByaXYtPnNpbmtfZXZlbnRfcXVldWUpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnQ6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGV2ZW50OiBhICNHc3RFdmVudCB0byBwdXNoCi0gKgotICogUHVzaGVzIGFuICNHc3RFdmVudCBvbiB0aGUgI0dzdEhhcm5lc3Mgc2lua3BhZC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI2dib29sZWFuIHdpdGggdGhlIHJlc3VsdCBmcm9tIHRoZSBwdXNoCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudCAoR3N0SGFybmVzcyAqIGgsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChldmVudCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfRVZFTlRfSVNfVVBTVFJFQU0gKGV2ZW50KSwgRkFMU0UpOwotCi0gIHJldHVybiBnc3RfcGFkX3B1c2hfZXZlbnQgKGgtPnNpbmtwYWQsIGV2ZW50KTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50OgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqCi0gKiBQdWxscyBhbiAjR3N0RXZlbnQgZnJvbSB0aGUgI0dBc3luY1F1ZXVlIG9uIHRoZSAjR3N0SGFybmVzcyBzcmNwYWQuCi0gKiBUaW1lb3V0cyBhZnRlciA2MCBzZWNvbmRzIHNpbWlsYXIgdG8gZ3N0X2hhcm5lc3NfcHVsbC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEV2ZW50IG9yICVOVUxMIGlmIHRpbWVkIG91dC4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEV2ZW50ICoKLWdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIHJldHVybiAoR3N0RXZlbnQgKikgZ19hc3luY19xdWV1ZV90aW1lb3V0X3BvcCAocHJpdi0+c3JjX2V2ZW50X3F1ZXVlLAotICAgICAgR19VU0VDX1BFUl9TRUMgKiA2MCk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfdXBzdHJlYW1fZXZlbnQ6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIFB1bGxzIGFuICNHc3RFdmVudCBmcm9tIHRoZSAjR0FzeW5jUXVldWUgb24gdGhlICNHc3RIYXJuZXNzIHNyY3BhZC4KLSAqIFNlZSBnc3RfaGFybmVzc190cnlfcHVsbCBmb3IgZGV0YWlscy4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEV2ZW50IG9yICVOVUxMIGlmIG5vIGJ1ZmZlcnMgYXJlIHByZXNlbnQgaW4gdGhlICNHQXN5bmNRdWV1ZQotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0RXZlbnQgKgotZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfdXBzdHJlYW1fZXZlbnQgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIHJldHVybiAoR3N0RXZlbnQgKikgZ19hc3luY19xdWV1ZV90cnlfcG9wIChwcml2LT5zcmNfZXZlbnRfcXVldWUpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19yZWNlaXZlZDoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogVGhlIHRvdGFsIG51bWJlciBvZiAjR3N0RXZlbnRzIHRoYXQgaGFzIGFycml2ZWQgb24gdGhlICNHc3RIYXJuZXNzIHNyY3BhZAotICogVGhpcyBudW1iZXIgaW5jbHVkZXMgZXZlbnRzIGhhbmRsZWQgYnkgdGhlIGhhcm5lc3MgYXMgd2VsbCBhcyBldmVudHMKLSAqIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcHVsbGVkIG91dC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI2d1aW50IG51bWJlciBvZiBldmVudHMgcmVjZWl2ZWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWd1aW50Ci1nc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfcmVjZWl2ZWQgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIHJldHVybiBnX2F0b21pY19pbnRfZ2V0ICgmcHJpdi0+cmVjdl91cHN0cmVhbV9ldmVudHMpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19pbl9xdWV1ZToKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogVGhlIG51bWJlciBvZiAjR3N0RXZlbnRzIGN1cnJlbnRseSBpbiB0aGUgI0dzdEhhcm5lc3Mgc3JjcGFkICNHQXN5bmNRdWV1ZQotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjZ3VpbnQgbnVtYmVyIG9mIGV2ZW50cyBpbiB0aGUgcXVldWUKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWd1aW50Ci1nc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIHJldHVybiBnX2FzeW5jX3F1ZXVlX2xlbmd0aCAocHJpdi0+c3JjX2V2ZW50X3F1ZXVlKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19xdWVyeV9sYXRlbmN5OgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqCi0gKiBHZXQgdGhlIG1pbiBsYXRlbmN5IHJlcG9ydGVkIGJ5IGFueSBoYXJuZXNzZWQgI0dzdEVsZW1lbnQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RDbG9ja1RpbWUgd2l0aCBtaW4gbGF0ZW5jeQotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0Q2xvY2tUaW1lCi1nc3RfaGFybmVzc19xdWVyeV9sYXRlbmN5IChHc3RIYXJuZXNzICogaCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiBpc19saXZlOwotICBHc3RDbG9ja1RpbWUgbWluID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR3N0Q2xvY2tUaW1lIG1heDsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfbGF0ZW5jeSAoKTsKLQotICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5IChoLT5zaW5rcGFkLCBxdWVyeSkpIHsKLSAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAocXVlcnksICZpc19saXZlLCAmbWluLCAmbWF4KTsKLSAgfQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICByZXR1cm4gbWluOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3NldF91cHN0cmVhbV9sYXRlbmN5OgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBsYXRlbmN5OiBhICNHc3RDbG9ja1RpbWUgc3BlY2lmeWluZyB0aGUgbGF0ZW5jeQotICoKLSAqIFNldHMgdGhlIG1pbiBsYXRlbmN5IHJlcG9ydGVkIGJ5ICNHc3RIYXJuZXNzIHdoZW4gcmVjZWl2aW5nIGEgbGF0ZW5jeS1xdWVyeQotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdm9pZAotZ3N0X2hhcm5lc3Nfc2V0X3Vwc3RyZWFtX2xhdGVuY3kgKEdzdEhhcm5lc3MgKiBoLCBHc3RDbG9ja1RpbWUgbGF0ZW5jeSkKLXsKLSAgR3N0SGFybmVzc1ByaXZhdGUgKnByaXYgPSBoLT5wcml2OwotICBwcml2LT5sYXRlbmN5X21pbiA9IGxhdGVuY3k7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfZ2V0X2FsbG9jYXRvcjoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAYWxsb2NhdG9yOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIG5vbmUpOiB0aGUgI0dzdEFsbG9jYXRvciB1c2VkCi0gKiBAcGFyYW1zOiAob3V0KSAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiB0aGUgI0dzdEFsbG9jYXRpb25QYXJhbXMgb2YKLSAqICAgQGFsbG9jYXRvcgotICoKLSAqIEdldHMgdGhlIEBhbGxvY2F0b3IgYW5kIGl0cyBAcGFyYW1zIHRoYXQgaGFzIGJlZW4gZGVjaWRlZCB0byB1c2UgYWZ0ZXIgYW4KLSAqIGFsbG9jYXRpb24gcXVlcnkuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2dldF9hbGxvY2F0b3IgKEdzdEhhcm5lc3MgKiBoLCBHc3RBbGxvY2F0b3IgKiogYWxsb2NhdG9yLAotICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCi17Ci0gIEdzdEhhcm5lc3NQcml2YXRlICpwcml2ID0gaC0+cHJpdjsKLSAgaWYgKGFsbG9jYXRvcikKLSAgICAqYWxsb2NhdG9yID0gcHJpdi0+YWxsb2NhdG9yOwotICBpZiAocGFyYW1zKQotICAgICpwYXJhbXMgPSBwcml2LT5hbGxvY2F0aW9uX3BhcmFtczsKLX0KLQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3NldF9wcm9wb3NlX2FsbG9jYXRvcjoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAYWxsb2NhdG9yOiAoYWxsb3ctbm9uZSkgKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RBbGxvY2F0b3IKLSAqIEBwYXJhbXM6IChhbGxvdy1ub25lKSAodHJhbnNmZXIgbm9uZSk6IGEgI0dzdEFsbG9jYXRpb25QYXJhbXMKLSAqCi0gKiBTZXRzIHRoZSBAYWxsb2NhdG9yIGFuZCBAcGFyYW1zIHRvIHByb3Bvc2Ugd2hlbiByZWNlaXZpbmcgYW4gYWxsb2NhdGlvbgotICogcXVlcnkuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX3NldF9wcm9wb3NlX2FsbG9jYXRvciAoR3N0SGFybmVzcyAqIGgsIEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwKLSAgICBjb25zdCBHc3RBbGxvY2F0aW9uUGFyYW1zICogcGFyYW1zKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0gIGlmIChhbGxvY2F0b3IpCi0gICAgcHJpdi0+cHJvcG9zZV9hbGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0gIGlmIChwYXJhbXMpCi0gICAgcHJpdi0+cHJvcG9zZV9hbGxvY2F0aW9uX3BhcmFtcyA9ICpwYXJhbXM7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfYWRkX3NyY19oYXJuZXNzOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBzcmNfaGFybmVzczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RIYXJuZXNzIHRvIGJlIGFkZGVkIGFzIGEgc3JjLWhhcm5lc3MuCi0gKiBAaGFzX2Nsb2NrX3dhaXQ6IGEgI2dib29sZWFuIHNwZWNpZnlpbmcgaWYgdGhlICNHc3RFbGVtZW50IHVzZXMKLSAqIGdzdF9jbG9ja193YWl0X2lkIGludGVybmFsbHkuCi0gKgotICogQSBzcmMtaGFybmVzcyBpcyBhIGdyZWF0IHdheSBvZiBwcm92aWRpbmcgdGhlICNHc3RIYXJuZXNzIHdpdGggZGF0YS4KLSAqIEJ5IGFkZGluZyBhIHNyYy10eXBlICNHc3RFbGVtZW50LCBpdCBpcyB0aGVuIGVhc3kgdG8gdXNlIGZ1bmN0aW9ucyBsaWtlCi0gKiBnc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjIG9yIGdzdF9oYXJuZXNzX3NyY19jcmFua19hbmRfcHVzaF9tYW55Ci0gKiB0byBwcm92aWRlIHlvdXIgaGFybmVzc2VkIGVsZW1lbnQgd2l0aCBpbnB1dC4gVGhlIEBoYXNfY2xvY2tfd2FpdCB2YXJpYWJsZQotICogaXMgYSBncmVhdGUgd2F5IHRvIGNvbnRyb2wgeW91IHNyYy1lbGVtZW50IHdpdGgsIGluIHRoYXQgeW91IGNhbiBoYXZlIGl0Ci0gKiBwcm9kdWNlIGEgYnVmZmVyIGZvciB5b3UgYnkgc2ltcGx5IGNyYW5raW5nIHRoZSBjbG9jaywgYW5kIG5vdCBoYXZlIGl0Ci0gKiBzcGluIG91dCBvZiBjb250cm9sIHByb2R1Y2luZyBidWZmZXJzIGFzIGZhc3QgYXMgcG9zc2libGUuCi0gKgotICogSWYgYSBzcmMtaGFybmVzcyBhbHJlYWR5IGV4aXN0cyBpdCB3aWxsIGJlIHJlcGxhY2VkLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc19hZGRfc3JjX2hhcm5lc3MgKEdzdEhhcm5lc3MgKiBoLAotICAgIEdzdEhhcm5lc3MgKiBzcmNfaGFybmVzcywgZ2Jvb2xlYW4gaGFzX2Nsb2NrX3dhaXQpCi17Ci0gIGlmIChoLT5zcmNfaGFybmVzcykKLSAgICBnc3RfaGFybmVzc190ZWFyZG93biAoaC0+c3JjX2hhcm5lc3MpOwotICBoLT5zcmNfaGFybmVzcyA9IHNyY19oYXJuZXNzOwotICBnc3RfaGFybmVzc19zZXRfZm9yd2FyZF9wYWQgKGgtPnNyY19oYXJuZXNzLCBoLT5zcmNwYWQpOwotICBoLT5zcmNfaGFybmVzcy0+cHJpdi0+aGFzX2Nsb2NrX3dhaXQgPSBoYXNfY2xvY2tfd2FpdDsKLSAgZ3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmcgKGgtPnNyY19oYXJuZXNzLCBoLT5wcml2LT5mb3J3YXJkaW5nKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19hZGRfc3JjOgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBzcmNfZWxlbWVudF9uYW1lOiBhICNnY2hhciB3aXRoIHRoZSBuYW1lIG9mIGEgI0dzdEVsZW1lbnQKLSAqIEBoYXNfY2xvY2tfd2FpdDogYSAjZ2Jvb2xlYW4gc3BlY2lmeWluZyBpZiB0aGUgI0dzdEVsZW1lbnQgdXNlcwotICogZ3N0X2Nsb2NrX3dhaXRfaWQgaW50ZXJuYWxseS4KLSAqCi0gKiBTaW1pbGFyIHRvIGdzdF9oYXJuZXNzX2FkZF9zcmNfaGFybmVzcywgdGhpcyBpcyBhIGNvbnZlbmllbmNlIHRvCi0gKiBkaXJlY3RseSBjcmVhdGUgYSBzcmMtaGFybmVzcyB1c2luZyB0aGUgQHNyY19lbGVtZW50X25hbWUgbmFtZSBzcGVjaWZpZWQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2FkZF9zcmMgKEdzdEhhcm5lc3MgKiBoLAotICAgIGNvbnN0IGdjaGFyICogc3JjX2VsZW1lbnRfbmFtZSwgZ2Jvb2xlYW4gaGFzX2Nsb2NrX3dhaXQpCi17Ci0gIEdzdEhhcm5lc3MgKnNyY19oYXJuZXNzID0gZ3N0X2hhcm5lc3NfbmV3IChzcmNfZWxlbWVudF9uYW1lKTsKLSAgZ3N0X2hhcm5lc3NfYWRkX3NyY19oYXJuZXNzIChoLCBzcmNfaGFybmVzcywgaGFzX2Nsb2NrX3dhaXQpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2U6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGxhdW5jaGxpbmU6IGEgI2djaGFyIGRlc2NyaWJpbmcgYSBnc3QtbGF1bmNoIHR5cGUgbGluZQotICogQGhhc19jbG9ja193YWl0OiBhICNnYm9vbGVhbiBzcGVjaWZ5aW5nIGlmIHRoZSAjR3N0RWxlbWVudCB1c2VzCi0gKiBnc3RfY2xvY2tfd2FpdF9pZCBpbnRlcm5hbGx5LgotICoKLSAqIFNpbWlsYXIgdG8gZ3N0X2hhcm5lc3NfYWRkX3NyYywgdGhpcyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBsYXVuY2gtbGluZSwKLSAqIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIGJvdGggaGF2aW5nIG1vcmUgdGhlbiBvbmUgI0dzdEVsZW1lbnQgYWN0aW5nIGFzIHlvdXIKLSAqIHNyYyAoTGlrZSBhIHNyYyBwcm9kdWNpbmcgcmF3IGJ1ZmZlcnMsIGFuZCB0aGVuIGFuIGVuY29kZXIsIHByb3ZpZGluZyBlbmNvZGVkCi0gKiBkYXRhKSwgYnV0IGFsc28gYnkgYWxsb3dpbmcgeW91IHRvIHNldCBwcm9wZXJ0aWVzIGxpa2UgImlzLWxpdmUiIGRpcmVjdGx5IG9uCi0gKiB0aGUgZWxlbWVudHMuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2UgKEdzdEhhcm5lc3MgKiBoLAotICAgIGNvbnN0IGdjaGFyICogbGF1bmNobGluZSwgZ2Jvb2xlYW4gaGFzX2Nsb2NrX3dhaXQpCi17Ci0gIEdzdEhhcm5lc3MgKnNyY19oYXJuZXNzID0gZ3N0X2hhcm5lc3NfbmV3X3BhcnNlIChsYXVuY2hsaW5lKTsKLSAgZ3N0X2hhcm5lc3NfYWRkX3NyY19oYXJuZXNzIChoLCBzcmNfaGFybmVzcywgaGFzX2Nsb2NrX3dhaXQpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3B1c2hfZnJvbV9zcmM6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIFRyYW5zZmVyIGRhdGEgZnJvbSB0aGUgc3JjLSNHc3RIYXJuZXNzIHRvIHRoZSBtYWluLSNHc3RIYXJuZXNzLiBJdCBjb25zaXN0cwotICogb2YgNCBzdGVwczoKLSAqIDE6IE1ha2Ugc3VyZSB0aGUgc3JjIGlzIHN0YXJ0ZWQuIChzZWU6IGdzdF9oYXJuZXNzX3BsYXkpCi0gKiAyOiBDcmFuayB0aGUgY2xvY2sgKHNlZTogZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQpCi0gKiAzOiBQdWxsIGEgI0dzdEJ1ZmZlciBmcm9tIHRoZSBzcmMtI0dzdEhhcm5lc3MgKHNlZTogZ3N0X2hhcm5lc3NfcHVsbCkKLSAqIDQ6IFB1c2ggdGhlIHNhbWUgI0dzdEJ1ZmZlciBpbnRvIHRoZSBtYWluLSNHc3RIYXJuZXNzIChzZWU6IGdzdF9oYXJuZXNzX3B1c2gpCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgcHVzaAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYyAoR3N0SGFybmVzcyAqIGgpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBnYm9vbGVhbiBjcmFuazsKLQotICBnX2Fzc2VydCAoaC0+c3JjX2hhcm5lc3MpOwotCi0gIC8qIEZJWE1FOiB0aGlzICppcyogdGhlIHJpZ2h0IHRpbWUgdG8gc3RhcnQgdGhlIHNyYywKLSAgICAgYnV0IG1heWJlIGEgZmxhZyBzbyB3ZSBkb24ndCBrZWVwIHRlbGxpbmcgaXQgdG8gcGxheT8gKi8KLSAgZ3N0X2hhcm5lc3NfcGxheSAoaC0+c3JjX2hhcm5lc3MpOwotCi0gIGlmIChoLT5zcmNfaGFybmVzcy0+cHJpdi0+aGFzX2Nsb2NrX3dhaXQpIHsKLSAgICBjcmFuayA9IGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoLT5zcmNfaGFybmVzcyk7Ci0gICAgZ19hc3NlcnQgKGNyYW5rKTsKLSAgfQotCi0gIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgtPnNyY19oYXJuZXNzKTsKLSAgZ19hc3NlcnQgKGJ1ZiAhPSBOVUxMKTsKLSAgcmV0dXJuIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGJ1Zik7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnk6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGNyYW5rczogYSAjZ2ludCB3aXRoIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQKLSAqIEBwdXNoZXM6IGEgI2dpbnQgd2l0aCB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGdzdF9oYXJuZXNzX3B1c2gKLSAqCi0gKiBUcmFuc2ZlciBkYXRhIGZyb20gdGhlIHNyYy0jR3N0SGFybmVzcyB0byB0aGUgbWFpbi0jR3N0SGFybmVzcy4gU2ltaWxhciB0bwotICogZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYywgdGhpcyB2YXJpYW50IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBob3cgbWFueSBjcmFua3MKLSAqIGFuZCBob3cgbWFueSBwdXNoZXMgdG8gcGVyZm9ybS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBib3RoIG1vdmluZyBhIGxvdAotICogb2YgZGF0YSBhdCB0aGUgc2FtZSB0aW1lLCBhcyB3ZWxsIGFzIGNhc2VzIHdoZW4gb25lIGNyYW5rIGRvZXMgbm90IGVxdWFsIG9uZQotICogYnVmZmVyIHRvIHB1c2ggYW5kIHYudi4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBwdXNoCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfaGFybmVzc19zcmNfY3JhbmtfYW5kX3B1c2hfbWFueSAoR3N0SGFybmVzcyAqIGgsIGdpbnQgY3JhbmtzLCBnaW50IHB1c2hlcykKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2Jvb2xlYW4gY3Jhbms7Ci0gIGludCBpOwotCi0gIGdfYXNzZXJ0IChoLT5zcmNfaGFybmVzcyk7Ci0gIGdzdF9oYXJuZXNzX3BsYXkgKGgtPnNyY19oYXJuZXNzKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY3JhbmtzOyBpKyspIHsKLSAgICBjcmFuayA9IGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoLT5zcmNfaGFybmVzcyk7Ci0gICAgZ19hc3NlcnQgKGNyYW5rKTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBwdXNoZXM7IGkrKykgewotICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgtPnNyY19oYXJuZXNzKTsKLSAgICBnX2Fzc2VydCAoYnVmICE9IE5VTEwpOwotICAgIHJldCA9IGdzdF9oYXJuZXNzX3B1c2ggKGgsIGJ1Zik7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19zcmNfcHVzaF9ldmVudDoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKgotICogU2ltaWxhciB0byB3aGF0IGdzdF9oYXJuZXNzX3NyY19wdXNoIGRvZXMgd2l0aCAjR3N0QnVmZmVycywgdGhpcyB0cmFuc2ZlcnMKLSAqIGEgI0dzdEV2ZW50IGZyb20gdGhlIHNyYy0jR3N0SGFybmVzcyB0byB0aGUgbWFpbi0jR3N0SGFybmVzcy4gTm90ZSB0aGF0Ci0gKiBzb21lICNHc3RFdmVudHMgYXJlIGJlaW5nIHRyYW5zZmVycmVkIGF1dG9tYWdpY2FsbHkuIExvb2sgYXQgc2lua19mb3J3YXJkX3BhZAotICogZm9yIGRldGFpbHMuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNnYm9vbGVhbiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIHB1c2gKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLWdib29sZWFuCi1nc3RfaGFybmVzc19zcmNfcHVzaF9ldmVudCAoR3N0SGFybmVzcyAqIGgpCi17Ci0gIHJldHVybiBnc3RfaGFybmVzc19wdXNoX2V2ZW50IChoLCBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoLT5zcmNfaGFybmVzcykpOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZm9yd2FyZF9zdGlja3lfZXZlbnRzIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICoqIGV2LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSB1c2VyX2RhdGE7Ci0gIHJldHVybiBnc3RfcGFkX3B1c2hfZXZlbnQgKGgtPnByaXYtPnNpbmtfZm9yd2FyZF9wYWQsIGdzdF9ldmVudF9yZWYgKCpldikpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3M6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQHNpbmtfaGFybmVzczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RIYXJuZXNzIHRvIGJlIGFkZGVkIGFzIGEgc2luay1oYXJuZXNzLgotICoKLSAqIFNpbWlsYXIgdG8gZ3N0X2hhcm5lc3NfYWRkX3NyYywgdGhpcyBhbGxvd3MgeW91IHRvIHNlbmQgdGhlIGRhdGEgY29taW5nIG91dAotICogb2YgeW91ciBoYXJuZXNzZWQgI0dzdEVsZW1lbnQgdG8gYSBzaW5rLWVsZW1lbnQsIGFsbG93aW5nIHRvIHRlc3QgZGlmZmVyZW50Ci0gKiByZXNwb25zZXMgdGhlIGVsZW1lbnQgb3V0cHV0IG1pZ2h0IGNyZWF0ZSBpbiBzaW5rIGVsZW1lbnRzLiBBbiBleGFtcGxlIG1pZ2h0Ci0gKiBiZSBhbiBleGlzdGluZyBzaW5rIHByb3ZpZGluZyBzb21lIGFuYWx5dGljYWwgZGF0YSBvbiB0aGUgaW5wdXQgaXQgcmVjZWl2ZXMgdGhhdAotICogY2FuIGJlIHVzZWZ1bCB0byB5b3VyIHRlc3RpbmcuIElmIHRoZSBnb2FsIGlzIHRvIHRlc3QgYSBzaW5rLWVsZW1lbnQgaXRzZWxmLAotICogdGhpcyBpcyBiZXR0ZXIgYWNoZWl2ZWQgdXNpbmcgZ3N0X2hhcm5lc3NfbmV3IGRpcmVjdGx5IG9uIHRoZSBzaW5rLgotICoKLSAqIElmIGEgc2luay1oYXJuZXNzIGFscmVhZHkgZXhpc3RzIGl0IHdpbGwgYmUgcmVwbGFjZWQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3MgKEdzdEhhcm5lc3MgKiBoLCBHc3RIYXJuZXNzICogc2lua19oYXJuZXNzKQotewotICBHc3RIYXJuZXNzUHJpdmF0ZSAqcHJpdiA9IGgtPnByaXY7Ci0KLSAgaWYgKGgtPnNpbmtfaGFybmVzcykgewotICAgIGdzdF9oYXJuZXNzX3NldF9mb3J3YXJkX3BhZCAoaCwgTlVMTCk7Ci0gICAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgtPnNpbmtfaGFybmVzcyk7Ci0gIH0KLSAgaC0+c2lua19oYXJuZXNzID0gc2lua19oYXJuZXNzOwotICBnc3RfaGFybmVzc19zZXRfZm9yd2FyZF9wYWQgKGgsIGgtPnNpbmtfaGFybmVzcy0+c3JjcGFkKTsKLSAgaWYgKHByaXYtPmZvcndhcmRpbmcgJiYgaC0+c2lua3BhZCkKLSAgICBnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAoaC0+c2lua3BhZCwgZm9yd2FyZF9zdGlja3lfZXZlbnRzLCBoKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X2ZvcndhcmRpbmcgKGgtPnNpbmtfaGFybmVzcywgcHJpdi0+Zm9yd2FyZGluZyk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfYWRkX3Npbms6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQHNpbmtfZWxlbWVudF9uYW1lOiBhICNnY2hhciB3aXRoIHRoZSBuYW1lIG9mIGEgI0dzdEVsZW1lbnQKLSAqCi0gKiBTaW1pbGFyIHRvIGdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3MsIHRoaXMgaXMgYSBjb252ZW5pZW5jZSB0bwotICogZGlyZWN0bHkgY3JlYXRlIGEgc2luay1oYXJuZXNzIHVzaW5nIHRoZSBAc2lua19lbGVtZW50X25hbWUgbmFtZSBzcGVjaWZpZWQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2FkZF9zaW5rIChHc3RIYXJuZXNzICogaCwgY29uc3QgZ2NoYXIgKiBzaW5rX2VsZW1lbnRfbmFtZSkKLXsKLSAgR3N0SGFybmVzcyAqc2lua19oYXJuZXNzID0gZ3N0X2hhcm5lc3NfbmV3IChzaW5rX2VsZW1lbnRfbmFtZSk7Ci0gIGdzdF9oYXJuZXNzX2FkZF9zaW5rX2hhcm5lc3MgKGgsIHNpbmtfaGFybmVzcyk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3NfYWRkX3NpbmtfcGFyc2U6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGxhdW5jaGxpbmU6IGEgI2djaGFyIHdpdGggdGhlIG5hbWUgb2YgYSAjR3N0RWxlbWVudAotICoKLSAqIFNpbWlsYXIgdG8gZ3N0X2hhcm5lc3NfYWRkX3NpbmssIHRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgbGF1bmNoLWxpbmUKLSAqIGluc3RlYWQgb2YganVzdCBhbiBlbGVtZW50IG5hbWUuIFNlZSBnc3RfaGFybmVzc19hZGRfc3JjX3BhcnNlIGZvciBkZXRhaWxzLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc19hZGRfc2lua19wYXJzZSAoR3N0SGFybmVzcyAqIGgsIGNvbnN0IGdjaGFyICogbGF1bmNobGluZSkKLXsKLSAgR3N0SGFybmVzcyAqc2lua19oYXJuZXNzID0gZ3N0X2hhcm5lc3NfbmV3X3BhcnNlIChsYXVuY2hsaW5lKTsKLSAgZ3N0X2hhcm5lc3NfYWRkX3NpbmtfaGFybmVzcyAoaCwgc2lua19oYXJuZXNzKTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19wdXNoX3RvX3Npbms6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICoKLSAqIFRyYW5zZmVyIG9uZSAjR3N0QnVmZmVyIGZyb20gdGhlIG1haW4tI0dzdEhhcm5lc3MgdG8gdGhlIHNpbmstI0dzdEhhcm5lc3MuCi0gKiBTZWUgZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYyBmb3IgZGV0YWlscy4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4gd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBwdXNoCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfaGFybmVzc19wdXNoX3RvX3NpbmsgKEdzdEhhcm5lc3MgKiBoKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ19hc3NlcnQgKGgtPnNpbmtfaGFybmVzcyk7Ci0gIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBnX2Fzc2VydCAoYnVmICE9IE5VTEwpOwotICByZXR1cm4gZ3N0X2hhcm5lc3NfcHVzaCAoaC0+c2lua19oYXJuZXNzLCBidWYpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3NpbmtfcHVzaF9tYW55OgotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBwdXNoZXM6IGEgI2dpbnQgd2l0aCB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGdzdF9oYXJuZXNzX3B1c2hfdG9fc2luawotICoKLSAqIENvbnZlbmllbmNlIHRoYXQgY2FsbHMgZ3N0X2hhcm5lc3NfcHVzaF90b19zaW5rIEBwdXNoZXMgbnVtYmVyIG9mIHRpbWVzLgotICogV2lsbCBhYm9ydCB0aGUgcHVzaGluZyBpZiBhbnkgb25lIHB1c2ggZmFpbHMuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgcHVzaAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0Rmxvd1JldHVybgotZ3N0X2hhcm5lc3Nfc2lua19wdXNoX21hbnkgKEdzdEhhcm5lc3MgKiBoLCBnaW50IHB1c2hlcykKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgaW50IGk7Ci0gIGdfYXNzZXJ0IChoLT5zaW5rX2hhcm5lc3MpOwotICBmb3IgKGkgPSAwOyBpIDwgcHVzaGVzOyBpKyspIHsKLSAgICByZXQgPSBnc3RfaGFybmVzc19wdXNoX3RvX3NpbmsgKGgpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2ZpbmRfZWxlbWVudDoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAZWxlbWVudF9uYW1lOiBhICNnY2hhciB3aXRoIGEgI0dzdEVsZW1lbnRGYWN0b3J5IG5hbWUKLSAqCi0gKiBNb3N0IHVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIGdzdF9oYXJuZXNzX25ld19wYXJzZSwgdGhpcyB3aWxsIHNjYW4gdGhlCi0gKiAjR3N0RWxlbWVudHMgaW5zaWRlIHRoZSAjR3N0SGFybmVzcywgYW5kIGNoZWNrIGlmIGFueSBvZiB0aGVtIG1hdGNoZXMKLSAqIEBlbGVtZW50X25hbWUuIFR5cGljYWwgdXNlY2FzZSBiZWluZyB0aGF0IHlvdSBuZWVkIHRvIGFjY2VzcyBvbmUgb2YgdGhlCi0gKiBoYXJuZXNzZWQgZWxlbWVudHMgZm9yIHByb3BlcnRpZXMgYW5kL29yIHNpZ25hbHMuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiBhICNHc3RFbGVtZW50IG9yICVOVUxMIGlmIG5vdCBmb3VuZAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0RWxlbWVudCAqCi1nc3RfaGFybmVzc19maW5kX2VsZW1lbnQgKEdzdEhhcm5lc3MgKiBoLCBjb25zdCBnY2hhciAqIGVsZW1lbnRfbmFtZSkKLXsKLSAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOwotICBHc3RJdGVyYXRvciAqaXRlcjsKLSAgR1ZhbHVlIGRhdGEgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgaXRlciA9IGdzdF9iaW5faXRlcmF0ZV9lbGVtZW50cyAoR1NUX0JJTiAoaC0+ZWxlbWVudCkpOwotICBkb25lID0gRkFMU0U7Ci0KLSAgd2hpbGUgKCFkb25lKSB7Ci0gICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXRlciwgJmRhdGEpKSB7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLSAgICAgIHsKLSAgICAgICAgR3N0RWxlbWVudCAqZWxlbWVudCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJmRhdGEpOwotICAgICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0KLSAgICAgICAgICAgIEdTVF9QTFVHSU5fRkVBVFVSRSAoZ3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkgKGVsZW1lbnQpKTsKLSAgICAgICAgaWYgKCFzdHJjbXAgKGVsZW1lbnRfbmFtZSwgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSkpIHsKLSAgICAgICAgICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJmRhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19zZXQ6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGVsZW1lbnRfbmFtZTogYSAjZ2NoYXIgd2l0aCBhICNHc3RFbGVtZW50RmFjdG9yeSBuYW1lCi0gKiBAZmlyc3RfcHJvcGVydHlfbmFtZTogYSAjZ2NoYXIgd2l0aCB0aGUgZmlyc3QgcHJvcGVydHkgbmFtZQotICogQC4uLjogdmFsdWUgZm9yIHRoZSBmaXJzdCBwcm9wZXJ0eSwgZm9sbG93ZWQgb3B0aW9uYWxseSBieSBtb3JlCi0gKiAgbmFtZS92YWx1ZSBwYWlycywgZm9sbG93ZWQgYnkgJU5VTEwKLSAqCi0gKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGFsbG93cyB5b3UgdG8gY2FsbCBnX29iamVjdF9zZXQgb24gYSAjR3N0RWxlbWVudAotICogdGhhdCBhcmUgcmVzaWRpbmcgaW5zaWRlIHRoZSAjR3N0SGFybmVzcywgYnkgdXNpbmcgbm9ybWFsIGdfb2JqZWN0X3NldAotICogc3ludGF4LgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogU2luY2U6IDEuNgotICovCi12b2lkCi1nc3RfaGFybmVzc19zZXQgKEdzdEhhcm5lc3MgKiBoLAotICAgIGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLCBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJfYXJnczsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IGdzdF9oYXJuZXNzX2ZpbmRfZWxlbWVudCAoaCwgZWxlbWVudF9uYW1lKTsKLSAgdmFfc3RhcnQgKHZhcl9hcmdzLCBmaXJzdF9wcm9wZXJ0eV9uYW1lKTsKLSAgZ19vYmplY3Rfc2V0X3ZhbGlzdCAoR19PQkpFQ1QgKGVsZW1lbnQpLCBmaXJzdF9wcm9wZXJ0eV9uYW1lLCB2YXJfYXJncyk7Ci0gIHZhX2VuZCAodmFyX2FyZ3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19nZXQ6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGVsZW1lbnRfbmFtZTogYSAjZ2NoYXIgd2l0aCBhICNHc3RFbGVtZW50RmFjdG9yeSBuYW1lCi0gKiBAZmlyc3RfcHJvcGVydHlfbmFtZTogYSAjZ2NoYXIgd2l0aCB0aGUgZmlyc3QgcHJvcGVydHkgbmFtZQotICogQC4uLjogcmV0dXJuIGxvY2F0aW9uIGZvciB0aGUgZmlyc3QgcHJvcGVydHksIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgbW9yZQotICogIG5hbWUvcmV0dXJuIGxvY2F0aW9uIHBhaXJzLCBmb2xsb3dlZCBieSAlTlVMTAotICoKLSAqIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gYWxsb3dzIHlvdSB0byBjYWxsIGdfb2JqZWN0X2dldCBvbiBhICNHc3RFbGVtZW50Ci0gKiB0aGF0IGFyZSByZXNpZGluZyBpbnNpZGUgdGhlICNHc3RIYXJuZXNzLCBieSB1c2luZyBub3JtYWwgZ19vYmplY3RfZ2V0Ci0gKiBzeW50YXguCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2dldCAoR3N0SGFybmVzcyAqIGgsCi0gICAgY29uc3QgZ2NoYXIgKiBlbGVtZW50X25hbWUsIGNvbnN0IGdjaGFyICogZmlyc3RfcHJvcGVydHlfbmFtZSwgLi4uKQotewotICB2YV9saXN0IHZhcl9hcmdzOwotICBHc3RFbGVtZW50ICplbGVtZW50ID0gZ3N0X2hhcm5lc3NfZmluZF9lbGVtZW50IChoLCBlbGVtZW50X25hbWUpOwotICB2YV9zdGFydCAodmFyX2FyZ3MsIGZpcnN0X3Byb3BlcnR5X25hbWUpOwotICBnX29iamVjdF9nZXRfdmFsaXN0IChHX09CSkVDVCAoZWxlbWVudCksIGZpcnN0X3Byb3BlcnR5X25hbWUsIHZhcl9hcmdzKTsKLSAgdmFfZW5kICh2YXJfYXJncyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX2FkZF9wcm9iZToKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAZWxlbWVudF9uYW1lOiBhICNnY2hhciB3aXRoIGEgI0dzdEVsZW1lbnRGYWN0b3J5IG5hbWUKLSAqIEBwYWRfbmFtZTogYSAjZ2NoYXIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcGFkIHRvIGF0dGFjaCB0aGUgcHJvYmUgdG8KLSAqIEBtYXNrOiBhICNHc3RQYWRQcm9iZVR5cGUgKHNlZSBnc3RfcGFkX2FkZF9wcm9iZSkKLSAqIEBjYWxsYmFjazogYSAjR3N0UGFkUHJvYmVDYWxsYmFjayAoc2VlIGdzdF9wYWRfYWRkX3Byb2JlKQotICogQHVzZXJfZGF0YTogYSAjZ3BvaW50ZXIgKHNlZSBnc3RfcGFkX2FkZF9wcm9iZSkKLSAqIEBkZXN0cm95X2RhdGE6IGEgI0dEZXN0cm95Tm90aWZ5IChzZWUgZ3N0X3BhZF9hZGRfcHJvYmUpCi0gKgotICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBhbGxvd3MgeW91IHRvIGNhbGwgZ3N0X3BhZF9hZGRfcHJvYmUgb24gYQotICogI0dzdFBhZCBvZiBhICNHc3RFbGVtZW50IHRoYXQgYXJlIHJlc2lkaW5nIGluc2lkZSB0aGUgI0dzdEhhcm5lc3MsCi0gKiBieSB1c2luZyBub3JtYWwgZ3N0X3BhZF9hZGRfcHJvYmUgc3ludGF4Ci0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9oYXJuZXNzX2FkZF9wcm9iZSAoR3N0SGFybmVzcyAqIGgsCi0gICAgY29uc3QgZ2NoYXIgKiBlbGVtZW50X25hbWUsIGNvbnN0IGdjaGFyICogcGFkX25hbWUsIEdzdFBhZFByb2JlVHlwZSBtYXNrLAotICAgIEdzdFBhZFByb2JlQ2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSwKLSAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBnc3RfaGFybmVzc19maW5kX2VsZW1lbnQgKGgsIGVsZW1lbnRfbmFtZSk7Ci0gIEdzdFBhZCAqcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsIHBhZF9uYW1lKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgbWFzaywgY2FsbGJhY2ssIHVzZXJfZGF0YSwgZGVzdHJveV9kYXRhKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICBTVFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0cnVjdCBfR3N0SGFybmVzc1RocmVhZAotewotICBHc3RIYXJuZXNzICpoOwotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIGdib29sZWFuIHJ1bm5pbmc7Ci0KLSAgZ3Vsb25nIHNsZWVwOwotCi0gIEdEZXN0cm95Tm90aWZ5IGZyZWVmdW5jOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0SGFybmVzc1RocmVhZCB0OwotCi0gIEdGdW5jIGluaXQ7Ci0gIEdGdW5jIGNhbGxiYWNrOwotICBncG9pbnRlciBkYXRhOwotfSBHc3RIYXJuZXNzQ3VzdG9tVGhyZWFkOwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RIYXJuZXNzVGhyZWFkIHQ7Ci0KLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RIYXJuZXNzUHJlcGFyZUJ1ZmZlckZ1bmMgZnVuYzsKLSAgZ3BvaW50ZXIgZGF0YTsKLSAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5OwotfSBHc3RIYXJuZXNzUHVzaEJ1ZmZlclRocmVhZDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0SGFybmVzc1RocmVhZCB0OwotCi0gIEdzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jIGZ1bmM7Ci0gIGdwb2ludGVyIGRhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5IG5vdGlmeTsKLX0gR3N0SGFybmVzc1B1c2hFdmVudFRocmVhZDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0SGFybmVzc1RocmVhZCB0OwotCi0gIGdjaGFyICpuYW1lOwotICBHVmFsdWUgdmFsdWU7Ci19IEdzdEhhcm5lc3NQcm9wVGhyZWFkOwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RIYXJuZXNzVGhyZWFkIHQ7Ci0KLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotICBnY2hhciAqbmFtZTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Jvb2xlYW4gcmVsZWFzZTsKLQotICBHU0xpc3QgKnBhZHM7Ci19IEdzdEhhcm5lc3NSZXFQYWRUaHJlYWQ7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc190aHJlYWRfaW5pdCAoR3N0SGFybmVzc1RocmVhZCAqIHQsIEdEZXN0cm95Tm90aWZ5IGZyZWVmdW5jLAotICAgIEdzdEhhcm5lc3MgKiBoLCBndWxvbmcgc2xlZXApCi17Ci0gIHQtPmZyZWVmdW5jID0gZnJlZWZ1bmM7Ci0gIHQtPmggPSBoOwotICB0LT5zbGVlcCA9IHNsZWVwOwotCi0gIGdfcHRyX2FycmF5X2FkZCAoaC0+cHJpdi0+c3RyZXNzLCB0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9oYXJuZXNzX3RocmVhZF9mcmVlIChHc3RIYXJuZXNzVGhyZWFkICogdCkKLXsKLSAgZ19zbGljZV9mcmVlIChHc3RIYXJuZXNzVGhyZWFkLCB0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9oYXJuZXNzX2N1c3RvbV90aHJlYWRfZnJlZSAoR3N0SGFybmVzc0N1c3RvbVRocmVhZCAqIHQpCi17Ci0gIGdfc2xpY2VfZnJlZSAoR3N0SGFybmVzc0N1c3RvbVRocmVhZCwgdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc19wdXNoX2J1ZmZlcl90aHJlYWRfZnJlZSAoR3N0SGFybmVzc1B1c2hCdWZmZXJUaHJlYWQgKiB0KQotewotICBpZiAodCAhPSBOVUxMKSB7Ci0gICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnQtPmNhcHMsIE5VTEwpOwotICAgIGlmICh0LT5ub3RpZnkgIT0gTlVMTCkKLSAgICAgIHQtPm5vdGlmeSAodC0+ZGF0YSk7Ci0gICAgZ19zbGljZV9mcmVlIChHc3RIYXJuZXNzUHVzaEJ1ZmZlclRocmVhZCwgdCk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9oYXJuZXNzX3B1c2hfZXZlbnRfdGhyZWFkX2ZyZWUgKEdzdEhhcm5lc3NQdXNoRXZlbnRUaHJlYWQgKiB0KQotewotICBpZiAodCAhPSBOVUxMKSB7Ci0gICAgaWYgKHQtPm5vdGlmeSAhPSBOVUxMKQotICAgICAgdC0+bm90aWZ5ICh0LT5kYXRhKTsKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdEhhcm5lc3NQdXNoRXZlbnRUaHJlYWQsIHQpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc19wcm9wZXJ0eV90aHJlYWRfZnJlZSAoR3N0SGFybmVzc1Byb3BUaHJlYWQgKiB0KQotewotICBpZiAodCAhPSBOVUxMKSB7Ci0gICAgZ19mcmVlICh0LT5uYW1lKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdC0+dmFsdWUpOwotICAgIGdfc2xpY2VfZnJlZSAoR3N0SGFybmVzc1Byb3BUaHJlYWQsIHQpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc19yZXF1ZXN0cGFkX3JlbGVhc2UgKEdzdFBhZCAqIHBhZCwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGVsZW1lbnQsIHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc19yZXF1ZXN0cGFkX3JlbGVhc2VfcGFkcyAoR3N0SGFybmVzc1JlcVBhZFRocmVhZCAqIHJwdCkKLXsKLSAgZ19zbGlzdF9mb3JlYWNoIChycHQtPnBhZHMsIChHRnVuYykgZ3N0X2hhcm5lc3NfcmVxdWVzdHBhZF9yZWxlYXNlLAotICAgICAgcnB0LT50LmgtPmVsZW1lbnQpOwotICBnX3NsaXN0X2ZyZWUgKHJwdC0+cGFkcyk7Ci0gIHJwdC0+cGFkcyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGFybmVzc19yZXF1ZXN0cGFkX3RocmVhZF9mcmVlIChHc3RIYXJuZXNzUmVxUGFkVGhyZWFkICogdCkKLXsKLSAgaWYgKHQgIT0gTlVMTCkgewotICAgIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiB0LT50ZW1wbCwgTlVMTCk7Ci0gICAgZ19mcmVlICh0LT5uYW1lKTsKLSAgICBnc3RfY2Fwc19yZXBsYWNlICgmdC0+Y2FwcywgTlVMTCk7Ci0KLSAgICBnc3RfaGFybmVzc19yZXF1ZXN0cGFkX3JlbGVhc2VfcGFkcyAodCk7Ci0gICAgZ19zbGljZV9mcmVlIChHc3RIYXJuZXNzUmVxUGFkVGhyZWFkLCB0KTsKLSAgfQotfQotCi0jZGVmaW5lIEdTVF9IQVJORVNTX1RIUkVBRF9TVEFSVChJRCwgdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKChHc3RIYXJuZXNzVGhyZWFkICopdCktPnJ1bm5pbmcgPSBUUlVFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChHc3RIYXJuZXNzVGhyZWFkICopdCktPnRocmVhZCA9IGdfdGhyZWFkX25ldyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAiZ3N0LWhhcm5lc3Mtc3RyZXNzLSJHX1NUUklOR0lGWShJRCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKEdUaHJlYWRGdW5jKWdzdF9oYXJuZXNzX3N0cmVzc18jI0lEIyNfZnVuYywgdCkpCi0jZGVmaW5lIEdTVF9IQVJORVNTX1RIUkVBRF9FTkQodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKHQtPnJ1bm5pbmcgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIEdQT0lOVEVSX1RPX1VJTlQgKGdfdGhyZWFkX2pvaW4gKHQtPnRocmVhZCkpKQotCi1zdGF0aWMgdm9pZAotZ3N0X2hhcm5lc3Nfc3RyZXNzX2ZyZWUgKEdzdEhhcm5lc3NUaHJlYWQgKiB0KQotewotICBpZiAodCAhPSBOVUxMICYmIHQtPmZyZWVmdW5jICE9IE5VTEwpCi0gICAgdC0+ZnJlZWZ1bmMgKHQpOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLWdzdF9oYXJuZXNzX3N0cmVzc19jdXN0b21fZnVuYyAoR3N0SGFybmVzc1RocmVhZCAqIHQpCi17Ci0gIEdzdEhhcm5lc3NDdXN0b21UaHJlYWQgKmN0ID0gKEdzdEhhcm5lc3NDdXN0b21UaHJlYWQgKikgdDsKLSAgZ3VpbnQgY291bnQgPSAwOwotCi0gIGlmIChjdC0+aW5pdCAhPSBOVUxMKQotICAgIGN0LT5pbml0IChjdCwgY3QtPmRhdGEpOwotCi0gIHdoaWxlICh0LT5ydW5uaW5nKSB7Ci0gICAgY3QtPmNhbGxiYWNrIChjdCwgY3QtPmRhdGEpOwotCi0gICAgY291bnQrKzsKLSAgICBnX3VzbGVlcCAodC0+c2xlZXApOwotICB9Ci0gIHJldHVybiBHVUlOVF9UT19QT0lOVEVSIChjb3VudCk7Ci19Ci0KLQotc3RhdGljIGdwb2ludGVyCi1nc3RfaGFybmVzc19zdHJlc3Nfc3RhdGVjaGFuZ2VfZnVuYyAoR3N0SGFybmVzc1RocmVhZCAqIHQpCi17Ci0gIGd1aW50IGNvdW50ID0gMDsKLQotICB3aGlsZSAodC0+cnVubmluZykgewotICAgIEdzdENsb2NrICpjbG9jayA9IGdzdF9lbGVtZW50X2dldF9jbG9jayAodC0+aC0+ZWxlbWVudCk7Ci0gICAgR3N0SXRlcmF0b3IgKml0OwotICAgIGdib29sZWFuIGRvbmUgPSBGQUxTRTsKLSAgICBnYm9vbGVhbiBjaGFuZ2U7Ci0KLSAgICBjaGFuZ2UgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHQtPmgtPmVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKLSAgICBnX2Fzc2VydCAoY2hhbmdlID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gICAgZ190aHJlYWRfeWllbGQgKCk7Ci0KLSAgICBpdCA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzICh0LT5oLT5lbGVtZW50KTsKLSAgICB3aGlsZSAoIWRvbmUpIHsKLSAgICAgIEdWYWx1ZSBpdGVtID0gR19WQUxVRV9JTklUOwotICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSkgewotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLSAgICAgICAgewotICAgICAgICAgIEdzdFBhZCAqc2lua3BhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pOwotICAgICAgICAgIEdzdFBhZCAqc3JjcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoc2lua3BhZCk7Ci0gICAgICAgICAgaWYgKHNyY3BhZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBnc3RfcGFkX3VubGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgICAgICAgICAgIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKLSAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKLSAgICB9Ci0gICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQotICAgIGlmIChjbG9jayAhPSBOVUxMKSB7Ci0gICAgICBnc3RfZWxlbWVudF9zZXRfY2xvY2sgKHQtPmgtPmVsZW1lbnQsIGNsb2NrKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgICB9Ci0gICAgY2hhbmdlID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0LT5oLT5lbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgZ19hc3NlcnQgKGNoYW5nZSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gICAgY291bnQrKzsKLSAgICBnX3VzbGVlcCAodC0+c2xlZXApOwotICB9Ci0gIHJldHVybiBHVUlOVF9UT19QT0lOVEVSIChjb3VudCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotZ3N0X2hhcm5lc3Nfc3RyZXNzX2J1ZmZlcl9mdW5jIChHc3RIYXJuZXNzVGhyZWFkICogdCkKLXsKLSAgR3N0SGFybmVzc1B1c2hCdWZmZXJUaHJlYWQgKnB0ID0gKEdzdEhhcm5lc3NQdXNoQnVmZmVyVGhyZWFkICopIHQ7Ci0gIGd1aW50IGNvdW50ID0gMDsKLSAgZ2NoYXIgKnNpZDsKLSAgZ2Jvb2xlYW4gaGFuZGxlZDsKLQotICAvKiBQdXNoIHN0cmVhbSBzdGFydCwgY2FwcyBhbmQgc2VnbWVudCBldmVudHMgKi8KLSAgc2lkID0gZ19zdHJkdXBfcHJpbnRmICgiJXMtJXAiLCBHU1RfT0JKRUNUX05BTUUgKHQtPmgtPmVsZW1lbnQpLCB0LT5oKTsKLSAgaGFuZGxlZCA9IGdzdF9wYWRfcHVzaF9ldmVudCAodC0+aC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc2lkKSk7Ci0gIGdfYXNzZXJ0IChoYW5kbGVkKTsKLSAgZ19mcmVlIChzaWQpOwotICBoYW5kbGVkID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0LT5oLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAocHQtPmNhcHMpKTsKLSAgZ19hc3NlcnQgKGhhbmRsZWQpOwotICBoYW5kbGVkID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0LT5oLT5zcmNwYWQsCi0gICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZwdC0+c2VnbWVudCkpOwotICBnX2Fzc2VydCAoaGFuZGxlZCk7Ci0KLSAgd2hpbGUgKHQtPnJ1bm5pbmcpIHsKLSAgICBnc3RfaGFybmVzc19wdXNoICh0LT5oLCBwdC0+ZnVuYyAodC0+aCwgcHQtPmRhdGEpKTsKLQotICAgIGNvdW50Kys7Ci0gICAgZ191c2xlZXAgKHQtPnNsZWVwKTsKLSAgfQotICByZXR1cm4gR1VJTlRfVE9fUE9JTlRFUiAoY291bnQpOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLWdzdF9oYXJuZXNzX3N0cmVzc19ldmVudF9mdW5jIChHc3RIYXJuZXNzVGhyZWFkICogdCkKLXsKLSAgR3N0SGFybmVzc1B1c2hFdmVudFRocmVhZCAqcGV0ID0gKEdzdEhhcm5lc3NQdXNoRXZlbnRUaHJlYWQgKikgdDsKLSAgZ3VpbnQgY291bnQgPSAwOwotCi0gIHdoaWxlICh0LT5ydW5uaW5nKSB7Ci0gICAgZ3N0X2hhcm5lc3NfcHVzaF9ldmVudCAodC0+aCwgcGV0LT5mdW5jICh0LT5oLCBwZXQtPmRhdGEpKTsKLQotICAgIGNvdW50Kys7Ci0gICAgZ191c2xlZXAgKHQtPnNsZWVwKTsKLSAgfQotICByZXR1cm4gR1VJTlRfVE9fUE9JTlRFUiAoY291bnQpOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLWdzdF9oYXJuZXNzX3N0cmVzc191cHN0cmVhbV9ldmVudF9mdW5jIChHc3RIYXJuZXNzVGhyZWFkICogdCkKLXsKLSAgR3N0SGFybmVzc1B1c2hFdmVudFRocmVhZCAqcGV0ID0gKEdzdEhhcm5lc3NQdXNoRXZlbnRUaHJlYWQgKikgdDsKLSAgZ3VpbnQgY291bnQgPSAwOwotCi0gIHdoaWxlICh0LT5ydW5uaW5nKSB7Ci0gICAgZ3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudCAodC0+aCwgcGV0LT5mdW5jICh0LT5oLCBwZXQtPmRhdGEpKTsKLQotICAgIGNvdW50Kys7Ci0gICAgZ191c2xlZXAgKHQtPnNsZWVwKTsKLSAgfQotICByZXR1cm4gR1VJTlRfVE9fUE9JTlRFUiAoY291bnQpOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLWdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9mdW5jIChHc3RIYXJuZXNzVGhyZWFkICogdCkKLXsKLSAgR3N0SGFybmVzc1Byb3BUaHJlYWQgKnB0ID0gKEdzdEhhcm5lc3NQcm9wVGhyZWFkICopIHQ7Ci0gIGd1aW50IGNvdW50ID0gMDsKLQotICB3aGlsZSAodC0+cnVubmluZykgewotICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKLQotICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHQtPmgtPmVsZW1lbnQpLCBwdC0+bmFtZSwgJnB0LT52YWx1ZSk7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR19WQUxVRV9UWVBFICgmcHQtPnZhbHVlKSk7Ci0gICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAodC0+aC0+ZWxlbWVudCksIHB0LT5uYW1lLCAmdmFsdWUpOwotICAgIGdfdmFsdWVfcmVzZXQgKCZ2YWx1ZSk7Ci0KLSAgICBjb3VudCsrOwotICAgIGdfdXNsZWVwICh0LT5zbGVlcCk7Ci0gIH0KLSAgcmV0dXJuIEdVSU5UX1RPX1BPSU5URVIgKGNvdW50KTsKLX0KLQotc3RhdGljIGdwb2ludGVyCi1nc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9mdW5jIChHc3RIYXJuZXNzVGhyZWFkICogdCkKLXsKLSAgR3N0SGFybmVzc1JlcVBhZFRocmVhZCAqcnB0ID0gKEdzdEhhcm5lc3NSZXFQYWRUaHJlYWQgKikgdDsKLSAgZ3VpbnQgY291bnQgPSAwOwotCi0gIHdoaWxlICh0LT5ydW5uaW5nKSB7Ci0gICAgR3N0UGFkICpyZXFwYWQ7Ci0KLSAgICBpZiAocnB0LT5yZWxlYXNlKQotICAgICAgZ3N0X2hhcm5lc3NfcmVxdWVzdHBhZF9yZWxlYXNlX3BhZHMgKHJwdCk7Ci0KLSAgICBnX3RocmVhZF95aWVsZCAoKTsKLQotICAgIHJlcXBhZCA9IGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICh0LT5oLT5lbGVtZW50LAotICAgICAgICBycHQtPnRlbXBsLCBycHQtPm5hbWUsIHJwdC0+Y2Fwcyk7Ci0KLSAgICBnX2Fzc2VydCAocmVxcGFkICE9IE5VTEwpOwotCi0gICAgcnB0LT5wYWRzID0gZ19zbGlzdF9wcmVwZW5kIChycHQtPnBhZHMsIHJlcXBhZCk7Ci0KLSAgICBjb3VudCsrOwotICAgIGdfdXNsZWVwICh0LT5zbGVlcCk7Ci0gIH0KLSAgcmV0dXJuIEdVSU5UX1RPX1BPSU5URVIgKGNvdW50KTsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19zdHJlc3NfdGhyZWFkX3N0b3A6Ci0gKiBAdDogYSAjR3N0SGFybmVzc1RocmVhZAotICoKLSAqIFN0b3AgdGhlIHJ1bm5pbmcgI0dzdEhhcm5lc3NUaHJlYWQKLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotZ3VpbnQKLWdzdF9oYXJuZXNzX3N0cmVzc190aHJlYWRfc3RvcCAoR3N0SGFybmVzc1RocmVhZCAqIHQpCi17Ci0gIGd1aW50IHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodCAhPSBOVUxMLCAwKTsKLQotICByZXQgPSBHU1RfSEFSTkVTU19USFJFQURfRU5EICh0KTsKLSAgZ19wdHJfYXJyYXlfcmVtb3ZlICh0LT5oLT5wcml2LT5zdHJlc3MsIHQpOwotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3N0cmVzc19jdXN0b21fc3RhcnQ6IChza2lwKQotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBpbml0OiAoYWxsb3ctbm9uZSk6IGEgI0dGdW5jIHRoYXQgaXMgY2FsbGVkIGluaXRpYWxseSBhbmQgb25seSBvbmNlCi0gKiBAY2FsbGJhY2s6IGEgI0dGdW5jIHRoYXQgaXMgY2FsbGVkIGFzIG9mdGVuIGFzIHBvc3NpYmxlCi0gKiBAZGF0YTogYSAjZ3BvaW50ZXIgd2l0aCBjdXN0b20gZGF0YSB0byBwYXNzIHRvIHRoZSBAY2FsbGJhY2sgZnVuY3Rpb24KLSAqIEBzbGVlcDogYSAjZ3Vsb25nIHNwZWNpZnlpbmcgaG93IGxvbmcgdG8gc2xlZXAgaW4gKG1pY3Jvc2Vjb25kcykgZm9yCi0gKiBlYWNoIGNhbGwgdG8gdGhlIEBjYWxsYmFjawotICoKLSAqIFN0YXJ0IGEgY3VzdG9tIHN0cmVzcy10aHJlYWQgdGhhdCB3aWxsIGNhbGwgeW91ciBAY2FsbGJhY2sgZm9yIGV2ZXJ5Ci0gKiBpdGVyYXRpb24gYWxsb3dpbmcgeW91IHRvIGRvIHNvbWV0aGluZyBuYXN0eS4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEhhcm5lc3NUaHJlYWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEhhcm5lc3NUaHJlYWQgKgotZ3N0X2hhcm5lc3Nfc3RyZXNzX2N1c3RvbV9zdGFydCAoR3N0SGFybmVzcyAqIGgsCi0gICAgR0Z1bmMgaW5pdCwgR0Z1bmMgY2FsbGJhY2ssIGdwb2ludGVyIGRhdGEsIGd1bG9uZyBzbGVlcCkKLXsKLSAgR3N0SGFybmVzc0N1c3RvbVRocmVhZCAqdCA9IGdfc2xpY2VfbmV3MCAoR3N0SGFybmVzc0N1c3RvbVRocmVhZCk7Ci0gIGdzdF9oYXJuZXNzX3RocmVhZF9pbml0ICgmdC0+dCwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2hhcm5lc3NfY3VzdG9tX3RocmVhZF9mcmVlLCBoLCBzbGVlcCk7Ci0KLSAgdC0+aW5pdCA9IGluaXQ7Ci0gIHQtPmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gIHQtPmRhdGEgPSBkYXRhOwotCi0gIEdTVF9IQVJORVNTX1RIUkVBRF9TVEFSVCAoY3VzdG9tLCB0KTsKLSAgcmV0dXJuICZ0LT50OwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydF9mdWxsOiAoc2tpcCkKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAc2xlZXA6IGEgI2d1bG9uZyBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotICogZWFjaCBzdGF0ZS1jaGFuZ2UKLSAqCi0gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIHlvdXIgaGFybmVzc2VkICNHc3RFbGVtZW50IGZyb20gTlVMTCB0byBQTEFZSU5HIGFuZAotICogYmFjayBhZ2Fpbiwgb25seSBwYXVzaW5nIGZvciBAc2xlZXAgbWljcm9zZWNvbmRzIGV2ZXJ5IHRpbWUuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RIYXJuZXNzVGhyZWFkCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RIYXJuZXNzVGhyZWFkICoKLWdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydF9mdWxsIChHc3RIYXJuZXNzICogaCwgZ3Vsb25nIHNsZWVwKQotewotICBHc3RIYXJuZXNzVGhyZWFkICp0ID0gZ19zbGljZV9uZXcwIChHc3RIYXJuZXNzVGhyZWFkKTsKLSAgZ3N0X2hhcm5lc3NfdGhyZWFkX2luaXQgKHQsCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9oYXJuZXNzX3RocmVhZF9mcmVlLCBoLCBzbGVlcCk7Ci0gIEdTVF9IQVJORVNTX1RIUkVBRF9TVEFSVCAoc3RhdGVjaGFuZ2UsIHQpOwotICByZXR1cm4gdDsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfaGFybmVzc19yZWZfYnVmZmVyIChHc3RIYXJuZXNzICogaCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgKHZvaWQpIGg7Ci0gIHJldHVybiBnc3RfYnVmZmVyX3JlZiAoR1NUX0JVRkZFUl9DQVNUIChkYXRhKSk7Ci19Ci0KLXN0YXRpYyBHc3RFdmVudCAqCi1nc3RfaGFybmVzc19yZWZfZXZlbnQgKEdzdEhhcm5lc3MgKiBoLCBncG9pbnRlciBkYXRhKQotewotICAodm9pZCkgaDsKLSAgcmV0dXJuIGdzdF9ldmVudF9yZWYgKEdTVF9FVkVOVF9DQVNUIChkYXRhKSk7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0X2Z1bGw6IChza2lwKQotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBjYXBzOiBhICNHc3RDYXBzIGZvciB0aGUgI0dzdEJ1ZmZlcgotICogQHNlZ21lbnQ6IGEgI0dzdFNlZ21lbnQKLSAqIEBidWY6IGEgI0dzdEJ1ZmZlciB0byBwdXNoCi0gKiBAc2xlZXA6IGEgI2d1bG9uZyBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotICogZWFjaCBjYWxsIHRvIGdzdF9wYWRfcHVzaAotICoKLSAqIFB1c2ggYSAjR3N0QnVmZmVyIGluIGludGVydmFscyBvZiBAc2xlZXAgbWljcm9zZWNvbmRzLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjR3N0SGFybmVzc1RocmVhZAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0SGFybmVzc1RocmVhZCAqCi1nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnRfZnVsbCAoR3N0SGFybmVzcyAqIGgsCi0gICAgR3N0Q2FwcyAqIGNhcHMsIGNvbnN0IEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RCdWZmZXIgKiBidWYsIGd1bG9uZyBzbGVlcCkKLXsKLSAgcmV0dXJuIGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGwgKGgsIGNhcHMsIHNlZ21lbnQsCi0gICAgICBnc3RfaGFybmVzc19yZWZfYnVmZmVyLCBnc3RfYnVmZmVyX3JlZiAoYnVmKSwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZiwgc2xlZXApOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGw6IChza2lwKQotICogQGg6IGEgI0dzdEhhcm5lc3MKLSAqIEBjYXBzOiBhICNHc3RDYXBzIGZvciB0aGUgI0dzdEJ1ZmZlcgotICogQHNlZ21lbnQ6IGEgI0dzdFNlZ21lbnQKLSAqIEBmdW5jOiBhICNHc3RIYXJuZXNzUHJlcGFyZUJ1ZmZlckZ1bmMgZnVuY3Rpb24gY2FsbGVkIGJlZm9yZSBldmVyeSBpdGVyYXRpb24KLSAqIHRvIHByZXBhcmUgLyBjcmVhdGUgYSAjR3N0QnVmZmVyIGZvciBwdXNoaW5nCi0gKiBAZGF0YTogYSAjZ3BvaW50ZXIgd2l0aCBkYXRhIHRvIHRoZSAjR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jIGZ1bmN0aW9uCi0gKiBAbm90aWZ5OiBhICNHRGVzdHJveU5vdGlmeSB0aGF0IGlzIGNhbGxlZCB3aGVuIHRocmVhZCBpcyBzdG9wcGVkCi0gKiBAc2xlZXA6IGEgI2d1bG9uZyBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotICogZWFjaCBjYWxsIHRvIGdzdF9wYWRfcHVzaAotICoKLSAqIFB1c2ggYSAjR3N0QnVmZmVyIHJldHVybmVkIGJ5IEBmdW5jIGluIGludGVydmFscyBvZiBAc2xlZXAgbWljcm9zZWNvbmRzLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjR3N0SGFybmVzc1RocmVhZAotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0SGFybmVzc1RocmVhZCAqCi1nc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfd2l0aF9jYl9zdGFydF9mdWxsIChHc3RIYXJuZXNzICogaCwKLSAgICBHc3RDYXBzICogY2FwcywgY29uc3QgR3N0U2VnbWVudCAqIHNlZ21lbnQsCi0gICAgR3N0SGFybmVzc1ByZXBhcmVCdWZmZXJGdW5jIGZ1bmMsIGdwb2ludGVyIGRhdGEsIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSwKLSAgICBndWxvbmcgc2xlZXApCi17Ci0gIEdzdEhhcm5lc3NQdXNoQnVmZmVyVGhyZWFkICp0ID0gZ19zbGljZV9uZXcwIChHc3RIYXJuZXNzUHVzaEJ1ZmZlclRocmVhZCk7Ci0gIGdzdF9oYXJuZXNzX3RocmVhZF9pbml0ICgmdC0+dCwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2hhcm5lc3NfcHVzaF9idWZmZXJfdGhyZWFkX2ZyZWUsIGgsIHNsZWVwKTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmdC0+Y2FwcywgY2Fwcyk7Ci0gIHQtPnNlZ21lbnQgPSAqc2VnbWVudDsKLSAgdC0+ZnVuYyA9IGZ1bmM7Ci0gIHQtPmRhdGEgPSBkYXRhOwotICB0LT5ub3RpZnkgPSBub3RpZnk7Ci0KLSAgR1NUX0hBUk5FU1NfVEhSRUFEX1NUQVJUIChidWZmZXIsIHQpOwotICByZXR1cm4gJnQtPnQ7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnRfZnVsbDogKHNraXApCi0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGV2ZW50OiBhICNHc3RFdmVudCB0byBwdXNoCi0gKiBAc2xlZXA6IGEgI2d1bG9uZyBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotICogZWFjaCBnc3RfZXZlbnRfcHVzaCB3aXRoIEBldmVudAotICoKLSAqIFB1c2ggdGhlIEBldmVudCBvbnRvIHRoZSBoYXJuZXNzZWQgI0dzdEVsZW1lbnQgc2lua3BhZCBpbiBpbnRlcnZhbHMgb2YKLSAqIEBzbGVlcCBtaWNyb3NlY29uZHMKLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEhhcm5lc3NUaHJlYWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEhhcm5lc3NUaHJlYWQgKgotZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnRfZnVsbCAoR3N0SGFybmVzcyAqIGgsCi0gICAgR3N0RXZlbnQgKiBldmVudCwgZ3Vsb25nIHNsZWVwKQotewotICByZXR1cm4gZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIChoLAotICAgICAgZ3N0X2hhcm5lc3NfcmVmX2V2ZW50LCBnc3RfZXZlbnRfcmVmIChldmVudCksCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9ldmVudF91bnJlZiwgc2xlZXApOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnRfZnVsbDogKHNraXApCi0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGZ1bmM6IGEgI0dzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jIGZ1bmN0aW9uIGNhbGxlZCBiZWZvcmUgZXZlcnkgaXRlcmF0aW9uCi0gKiB0byBwcmVwYXJlIC8gY3JlYXRlIGEgI0dzdEV2ZW50IGZvciBwdXNoaW5nCi0gKiBAZGF0YTogYSAjZ3BvaW50ZXIgd2l0aCBkYXRhIHRvIHRoZSAjR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMgZnVuY3Rpb24KLSAqIEBub3RpZnk6IGEgI0dEZXN0cm95Tm90aWZ5IHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhyZWFkIGlzIHN0b3BwZWQKLSAqIEBzbGVlcDogYSAjZ3Vsb25nIHNwZWNpZnlpbmcgaG93IGxvbmcgdG8gc2xlZXAgaW4gKG1pY3Jvc2Vjb25kcykgZm9yCi0gKiBlYWNoIGNhbGwgdG8gZ3N0X3BhZF9wdXNoCi0gKgotICogUHVzaCBhICNHc3RFdmVudCByZXR1cm5lZCBieSBAZnVuYyBvbnRvIHRoZSBoYXJuZXNzZWQgI0dzdEVsZW1lbnQgc2lua3BhZAotICogaW4gaW50ZXJ2YWxzIG9mIEBzbGVlcCBtaWNyb3NlY29uZHMuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RIYXJuZXNzVGhyZWFkCi0gKgotICogU2luY2U6IDEuOAotICovCi1Hc3RIYXJuZXNzVGhyZWFkICoKLWdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnRfZnVsbCAoR3N0SGFybmVzcyAqIGgsCi0gICAgR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMgZnVuYywgZ3BvaW50ZXIgZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5LAotICAgIGd1bG9uZyBzbGVlcCkKLXsKLSAgR3N0SGFybmVzc1B1c2hFdmVudFRocmVhZCAqdCA9IGdfc2xpY2VfbmV3MCAoR3N0SGFybmVzc1B1c2hFdmVudFRocmVhZCk7Ci0gIGdzdF9oYXJuZXNzX3RocmVhZF9pbml0ICgmdC0+dCwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2hhcm5lc3NfcHVzaF9ldmVudF90aHJlYWRfZnJlZSwgaCwgc2xlZXApOwotCi0gIHQtPmZ1bmMgPSBmdW5jOwotICB0LT5kYXRhID0gZGF0YTsKLSAgdC0+bm90aWZ5ID0gbm90aWZ5OwotCi0gIEdTVF9IQVJORVNTX1RIUkVBRF9TVEFSVCAoZXZlbnQsIHQpOwotICByZXR1cm4gJnQtPnQ7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfc3RhcnRfZnVsbDogKHNraXApCi0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGV2ZW50OiBhICNHc3RFdmVudCB0byBwdXNoCi0gKiBAc2xlZXA6IGEgI2d1bG9uZyBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotICogZWFjaCBnc3RfZXZlbnRfcHVzaCB3aXRoIEBldmVudAotICoKLSAqIFB1c2ggdGhlIEBldmVudCBvbnRvIHRoZSBoYXJuZXNzZWQgI0dzdEVsZW1lbnQgc3JjcGFkIGluIGludGVydmFscyBvZgotICogQHNsZWVwIG1pY3Jvc2Vjb25kcy4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEhhcm5lc3NUaHJlYWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEhhcm5lc3NUaHJlYWQgKgotZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfc3RhcnRfZnVsbCAoR3N0SGFybmVzcyAqIGgsCi0gICAgR3N0RXZlbnQgKiBldmVudCwgZ3Vsb25nIHNsZWVwKQotewotICByZXR1cm4gZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIChoLAotICAgICAgZ3N0X2hhcm5lc3NfcmVmX2V2ZW50LCBnc3RfZXZlbnRfcmVmIChldmVudCksCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9ldmVudF91bnJlZiwgc2xlZXApOwotfQotCi0vKioKLSAqIGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50X3dpdGhfY2Jfc3RhcnRfZnVsbDogKHNraXApCi0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGZ1bmM6IGEgI0dzdEhhcm5lc3NQcmVwYXJlRXZlbnRGdW5jIGZ1bmN0aW9uIGNhbGxlZCBiZWZvcmUgZXZlcnkgaXRlcmF0aW9uCi0gKiB0byBwcmVwYXJlIC8gY3JlYXRlIGEgI0dzdEV2ZW50IGZvciBwdXNoaW5nCi0gKiBAZGF0YTogYSAjZ3BvaW50ZXIgd2l0aCBkYXRhIHRvIHRoZSAjR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMgZnVuY3Rpb24KLSAqIEBub3RpZnk6IGEgI0dEZXN0cm95Tm90aWZ5IHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhyZWFkIGlzIHN0b3BwZWQKLSAqIEBzbGVlcDogYSAjZ3Vsb25nIHNwZWNpZnlpbmcgaG93IGxvbmcgdG8gc2xlZXAgaW4gKG1pY3Jvc2Vjb25kcykgZm9yCi0gKiBlYWNoIGNhbGwgdG8gZ3N0X3BhZF9wdXNoCi0gKgotICogUHVzaCBhICNHc3RFdmVudCByZXR1cm5lZCBieSBAZnVuYyBvbnRvIHRoZSBoYXJuZXNzZWQgI0dzdEVsZW1lbnQgc3JjcGFkCi0gKiBpbiBpbnRlcnZhbHMgb2YgQHNsZWVwIG1pY3Jvc2Vjb25kcy4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEhhcm5lc3NUaHJlYWQKLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLUdzdEhhcm5lc3NUaHJlYWQgKgotZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIChHc3RIYXJuZXNzICogaCwKLSAgICBHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYyBmdW5jLCBncG9pbnRlciBkYXRhLCBHRGVzdHJveU5vdGlmeSBub3RpZnksCi0gICAgZ3Vsb25nIHNsZWVwKQotewotICBHc3RIYXJuZXNzUHVzaEV2ZW50VGhyZWFkICp0ID0gZ19zbGljZV9uZXcwIChHc3RIYXJuZXNzUHVzaEV2ZW50VGhyZWFkKTsKLSAgZ3N0X2hhcm5lc3NfdGhyZWFkX2luaXQgKCZ0LT50LAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfaGFybmVzc19wdXNoX2V2ZW50X3RocmVhZF9mcmVlLCBoLCBzbGVlcCk7Ci0KLSAgdC0+ZnVuYyA9IGZ1bmM7Ci0gIHQtPmRhdGEgPSBkYXRhOwotICB0LT5ub3RpZnkgPSBub3RpZnk7Ci0KLSAgR1NUX0hBUk5FU1NfVEhSRUFEX1NUQVJUICh1cHN0cmVhbV9ldmVudCwgdCk7Ci0gIHJldHVybiAmdC0+dDsKLX0KLQotLyoqCi0gKiBnc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnRfZnVsbDogKHNraXApCi0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQG5hbWU6IGEgI2djaGFyIHNwZWNpZnlpbmcgYSBwcm9wZXJ0eSBuYW1lCi0gKiBAdmFsdWU6IGEgI0dWYWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvCi0gKiBAc2xlZXA6IGEgI2d1bG9uZyBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotICogZWFjaCBnX29iamVjdF9zZXQgd2l0aCBAbmFtZSBhbmQgQHZhbHVlCi0gKgotICogQ2FsbCBnX29iamVjdF9zZXQgd2l0aCBAbmFtZSBhbmQgQHZhbHVlIGluIGludGVydmFscyBvZiBAc2xlZXAgbWljcm9zZWNvbmRzCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RIYXJuZXNzVGhyZWFkCi0gKgotICogU2luY2U6IDEuNgotICovCi1Hc3RIYXJuZXNzVGhyZWFkICoKLWdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydF9mdWxsIChHc3RIYXJuZXNzICogaCwKLSAgICBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBndWxvbmcgc2xlZXApCi17Ci0gIEdzdEhhcm5lc3NQcm9wVGhyZWFkICp0ID0gZ19zbGljZV9uZXcwIChHc3RIYXJuZXNzUHJvcFRocmVhZCk7Ci0gIGdzdF9oYXJuZXNzX3RocmVhZF9pbml0ICgmdC0+dCwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2hhcm5lc3NfcHJvcGVydHlfdGhyZWFkX2ZyZWUsIGgsIHNsZWVwKTsKLQotICB0LT5uYW1lID0gZ19zdHJkdXAgKG5hbWUpOwotICBnX3ZhbHVlX2luaXQgKCZ0LT52YWx1ZSwgR19WQUxVRV9UWVBFICh2YWx1ZSkpOwotICBnX3ZhbHVlX2NvcHkgKHZhbHVlLCAmdC0+dmFsdWUpOwotCi0gIEdTVF9IQVJORVNTX1RIUkVBRF9TVEFSVCAocHJvcGVydHksIHQpOwotICByZXR1cm4gJnQtPnQ7Ci19Ci0KLS8qKgotICogZ3N0X2hhcm5lc3Nfc3RyZXNzX3JlcXVlc3RwYWRfc3RhcnRfZnVsbDogKHNraXApCi0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQHRlbXBsOiBhICNHc3RQYWRUZW1wbGF0ZQotICogQG5hbWU6IGEgI2djaGFyCi0gKiBAY2FwczogYSAjR3N0Q2FwcwotICogQHJlbGVhc2U6IGEgI2dib29sZWFuCi0gKiBAc2xlZXA6IGEgI2d1bG9uZyBzcGVjaWZ5aW5nIGhvdyBsb25nIHRvIHNsZWVwIGluIChtaWNyb3NlY29uZHMpIGZvcgotICogZWFjaCBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZAotICoKLSAqIENhbGwgZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgaW4gaW50ZXJ2YWxzIG9mIEBzbGVlcCBtaWNyb3NlY29uZHMKLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEhhcm5lc3NUaHJlYWQKLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdEhhcm5lc3NUaHJlYWQgKgotZ3N0X2hhcm5lc3Nfc3RyZXNzX3JlcXVlc3RwYWRfc3RhcnRfZnVsbCAoR3N0SGFybmVzcyAqIGgsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RDYXBzICogY2FwcywKLSAgICBnYm9vbGVhbiByZWxlYXNlLCBndWxvbmcgc2xlZXApCi17Ci0gIEdzdEhhcm5lc3NSZXFQYWRUaHJlYWQgKnQgPSBnX3NsaWNlX25ldzAgKEdzdEhhcm5lc3NSZXFQYWRUaHJlYWQpOwotICBnc3RfaGFybmVzc190aHJlYWRfaW5pdCAoJnQtPnQsCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9oYXJuZXNzX3JlcXVlc3RwYWRfdGhyZWFkX2ZyZWUsIGgsIHNsZWVwKTsKLQotICB0LT50ZW1wbCA9IGdzdF9vYmplY3RfcmVmICh0ZW1wbCk7Ci0gIHQtPm5hbWUgPSBnX3N0cmR1cCAobmFtZSk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZ0LT5jYXBzLCBjYXBzKTsKLSAgdC0+cmVsZWFzZSA9IHJlbGVhc2U7Ci0KLSAgR1NUX0hBUk5FU1NfVEhSRUFEX1NUQVJUIChyZXF1ZXN0cGFkLCB0KTsKLSAgcmV0dXJuICZ0LT50OwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5oIGIvbGlicy9nc3QvY2hlY2svZ3N0aGFybmVzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTM3YmE3Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2dzdGhhcm5lc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NCArMCwwIEBACi0vKiBHc3RIYXJuZXNzIC0gQSB0ZXN0LWhhcm5lc3MgZm9yIEdTdHJlYW1lciB0ZXN0aW5nCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgUGV4aXAgPHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0hBUk5FU1NfSF9fCi0jZGVmaW5lIF9fR1NUX0hBUk5FU1NfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdHRlc3RjbG9jay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qKgotICogR3N0SGFybmVzc1RocmVhZDoKLSAqCi0gKiBPcGFxdWUgaGFuZGxlIHJlcHJlc2VudGluZyBhIEdzdEhhcm5lc3Mgc3RyZXNzIHRlc3RpbmcgdGhyZWFkLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEhhcm5lc3NUaHJlYWQgR3N0SGFybmVzc1RocmVhZDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEhhcm5lc3MgR3N0SGFybmVzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RIYXJuZXNzUHJpdmF0ZSBHc3RIYXJuZXNzUHJpdmF0ZTsKLQotLyoqCi0gKiBHc3RIYXJuZXNzOgotICogQGVsZW1lbnQ6IHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaGFybmVzcwotICogQHNyY3BhZDogdGhlIGludGVybmFsIGhhcm5lc3Mgc291cmNlIHBhZAotICogQHNpbmtwYWQ6IHRoZSBpbnRlcm5hbCBoYXJuZXNzIHNpbmsgcGFkCi0gKiBAc3JjX2hhcm5lc3M6IHRoZSBzb3VyY2UgKGlucHV0KSBoYXJuZXNzIChpZiBhbnkpCi0gKiBAc2lua19oYXJuZXNzOiB0aGUgc2luayAob3V0cHV0KSBoYXJuZXNzIChpZiBhbnkpCi0gKgotICogU2luY2U6IDEuNgotICovCi1zdHJ1Y3QgX0dzdEhhcm5lc3MgewotICBHc3RFbGVtZW50ICogZWxlbWVudDsKLQotICBHc3RQYWQgKiBzcmNwYWQ7Ci0gIEdzdFBhZCAqIHNpbmtwYWQ7Ci0KLSAgR3N0SGFybmVzcyAqIHNyY19oYXJuZXNzOwotICBHc3RIYXJuZXNzICogc2lua19oYXJuZXNzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RIYXJuZXNzUHJpdmF0ZSAqIHByaXY7Ci19OwotCi0vKiBIYXJuZXNzIGNyZWF0aW9uICovCi0KLUdzdEhhcm5lc3MgKiBnc3RfaGFybmVzc19uZXdfZW1wdHkgKHZvaWQpOwotCi12b2lkICAgICAgICAgZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfZnVsbCAoR3N0SGFybmVzcyAgICAgICAgICAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQgICAgICAgICAgICogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIGhzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKiBlbGVtZW50X3NpbmtwYWRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIGhzaW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICogZWxlbWVudF9zcmNwYWRfbmFtZSk7Ci0KLUdzdEhhcm5lc3MgKiBnc3RfaGFybmVzc19uZXdfZnVsbCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogaHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKiBlbGVtZW50X3NpbmtwYWRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBoc2luaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKiBlbGVtZW50X3NyY3BhZF9uYW1lKTsKLQotR3N0SGFybmVzcyAqIGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgIChHc3RFbGVtZW50ICAqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZWxlbWVudF9zaW5rcGFkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZWxlbWVudF9zcmNwYWRfbmFtZSk7Ci0KLUdzdEhhcm5lc3MgKiBnc3RfaGFybmVzc19uZXdfd2l0aF9wYWRuYW1lcyAoY29uc3QgZ2NoYXIgKiBlbGVtZW50X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZWxlbWVudF9zaW5rcGFkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZWxlbWVudF9zcmNwYWRfbmFtZSk7Ci0KLUdzdEhhcm5lc3MgKiBnc3RfaGFybmVzc19uZXdfd2l0aF90ZW1wbGF0ZXMgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBoc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBoc2luayk7Ci0KLUdzdEhhcm5lc3MgKiBnc3RfaGFybmVzc19uZXcgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lKTsKLQotR3N0SGFybmVzcyAqIGdzdF9oYXJuZXNzX25ld19wYXJzZSAoY29uc3QgZ2NoYXIgKiBsYXVuY2hsaW5lKTsKLQotdm9pZCAgICAgICAgIGdzdF9oYXJuZXNzX2FkZF9wYXJzZSAoR3N0SGFybmVzcyAqIGgsIGNvbnN0IGdjaGFyICogbGF1bmNobGluZSk7Ci0KLXZvaWQgICAgICAgICBnc3RfaGFybmVzc190ZWFyZG93biAoR3N0SGFybmVzcyAqIGgpOwotCi12b2lkICAgICAgICAgZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfc3JjX3BhZCAgKEdzdEhhcm5lc3MgKiBoLCBHc3RQYWQgKiBzcmNwYWQpOwotCi12b2lkICAgICAgICAgZ3N0X2hhcm5lc3NfYWRkX2VsZW1lbnRfc2lua19wYWQgKEdzdEhhcm5lc3MgKiBoLCBHc3RQYWQgKiBzaW5rcGFkKTsKLQotLyogQ2FwcyBGdW5jdGlvbnMgKi8KLQotdm9pZCAgICAgICAgIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAgKEdzdEhhcm5lc3MgKiBoLCBHc3RDYXBzICogY2Fwcyk7Ci0KLXZvaWQgICAgICAgICBnc3RfaGFybmVzc19zZXRfc2lua19jYXBzIChHc3RIYXJuZXNzICogaCwgR3N0Q2FwcyAqIGNhcHMpOwotCi12b2lkICAgICAgICAgZ3N0X2hhcm5lc3Nfc2V0X2NhcHMgKEdzdEhhcm5lc3MgKiBoLCBHc3RDYXBzICogaW4sIEdzdENhcHMgKiBvdXQpOwotCi12b2lkICAgICAgICAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAgKEdzdEhhcm5lc3MgKiBoLCBjb25zdCBnY2hhciAqIHN0cik7Ci0KLXZvaWQgICAgICAgICBnc3RfaGFybmVzc19zZXRfc2lua19jYXBzX3N0ciAoR3N0SGFybmVzcyAqIGgsIGNvbnN0IGdjaGFyICogc3RyKTsKLQotdm9pZCAgICAgICAgIGdzdF9oYXJuZXNzX3NldF9jYXBzX3N0ciAoR3N0SGFybmVzcyAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogb3V0KTsKLQotLyogQ2xvY2sgRnVuY3Rpb25zICovCi0KLXZvaWQgICAgICAgICAgIGdzdF9oYXJuZXNzX3VzZV9zeXN0ZW1jbG9jayAoR3N0SGFybmVzcyAqIGgpOwotCi12b2lkICAgICAgICAgICBnc3RfaGFybmVzc191c2VfdGVzdGNsb2NrIChHc3RIYXJuZXNzICogaCk7Ci0KLUdzdFRlc3RDbG9jayAqIGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKEdzdEhhcm5lc3MgKiBoKTsKLQotZ2Jvb2xlYW4gICAgICAgZ3N0X2hhcm5lc3Nfc2V0X3RpbWUgKEdzdEhhcm5lc3MgKiBoLCBHc3RDbG9ja1RpbWUgdGltZSk7Ci0KLWdib29sZWFuICAgICAgIGdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzIChHc3RIYXJuZXNzICogaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCB3YWl0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCB0aW1lb3V0KTsKLQotZ2Jvb2xlYW4gICAgICAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKEdzdEhhcm5lc3MgKiBoKTsKLQotZ2Jvb2xlYW4gICAgICAgZ3N0X2hhcm5lc3NfY3JhbmtfbXVsdGlwbGVfY2xvY2tfd2FpdHMgKEdzdEhhcm5lc3MgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHdhaXRzKTsKLQotLyogbWlzYyAqLwotdm9pZCAgICAgICAgICAgZ3N0X2hhcm5lc3NfcGxheSAoR3N0SGFybmVzcyAqIGgpOwotCi12b2lkICAgICAgICAgICBnc3RfaGFybmVzc19zZXRfYmxvY2tpbmdfcHVzaF9tb2RlIChHc3RIYXJuZXNzICogaCk7Ci0KLXZvaWQgICAgICAgICAgIGdzdF9oYXJuZXNzX3NldF9mb3J3YXJkaW5nIChHc3RIYXJuZXNzICogaCwgZ2Jvb2xlYW4gZm9yd2FyZGluZyk7Ci0KLS8qIGJ1ZmZlcnMgKi8KLQotR3N0QnVmZmVyICogICAgZ3N0X2hhcm5lc3NfY3JlYXRlX2J1ZmZlciAoR3N0SGFybmVzcyAqIGgsIGdzaXplIHNpemUpOwotCi1Hc3RGbG93UmV0dXJuICBnc3RfaGFybmVzc19wdXNoIChHc3RIYXJuZXNzICogaCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotR3N0QnVmZmVyICogICAgZ3N0X2hhcm5lc3NfcHVsbCAoR3N0SGFybmVzcyAqIGgpOwotCi1Hc3RCdWZmZXIgKiAgICBnc3RfaGFybmVzc190cnlfcHVsbCAoR3N0SGFybmVzcyAqIGgpOwotCi1Hc3RCdWZmZXIgKiAgICBnc3RfaGFybmVzc19wdXNoX2FuZF9wdWxsIChHc3RIYXJuZXNzICogaCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotZ3VpbnQgICAgICAgICAgZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZCAoR3N0SGFybmVzcyAqIGgpOwotCi1ndWludCAgICAgICAgICBnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlIChHc3RIYXJuZXNzICogaCk7Ci0KLXZvaWQgICAgICAgICAgIGdzdF9oYXJuZXNzX3NldF9kcm9wX2J1ZmZlcnMgKEdzdEhhcm5lc3MgKiBoLCBnYm9vbGVhbiBkcm9wX2J1ZmZlcnMpOwotCi12b2lkICAgICAgICAgICBnc3RfaGFybmVzc19kdW1wX3RvX2ZpbGUgKEdzdEhhcm5lc3MgKiBoLCBjb25zdCBnY2hhciAqIGZpbGVuYW1lKTsKLQotR3N0Q2xvY2tUaW1lICAgZ3N0X2hhcm5lc3NfZ2V0X2xhc3RfcHVzaGVkX3RpbWVzdGFtcCAoR3N0SGFybmVzcyAqIGgpOwotCi0vKiBkb3duc3RyZWFtIGV2ZW50cyAqLwotCi1nYm9vbGVhbiAgICAgICBnc3RfaGFybmVzc19wdXNoX2V2ZW50IChHc3RIYXJuZXNzICogaCwgR3N0RXZlbnQgKiBldmVudCk7Ci0KLUdzdEV2ZW50ICogICAgIGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKEdzdEhhcm5lc3MgKiBoKTsKLQotR3N0RXZlbnQgKiAgICAgZ3N0X2hhcm5lc3NfdHJ5X3B1bGxfZXZlbnQgIChHc3RIYXJuZXNzICogaCk7Ci0KLWd1aW50ICAgICAgICAgIGdzdF9oYXJuZXNzX2V2ZW50c19yZWNlaXZlZCAoR3N0SGFybmVzcyAqIGgpOwotCi1ndWludCAgICAgICAgICBnc3RfaGFybmVzc19ldmVudHNfaW5fcXVldWUgKEdzdEhhcm5lc3MgKiBoKTsKLQotLyogdXBzdHJlYW0gZXZlbnRzICovCi0KLWdib29sZWFuICAgZ3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudCAoR3N0SGFybmVzcyAqIGgsIEdzdEV2ZW50ICogZXZlbnQpOwotCi1Hc3RFdmVudCAqIGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKEdzdEhhcm5lc3MgKiBoKTsKLQotR3N0RXZlbnQgKiBnc3RfaGFybmVzc190cnlfcHVsbF91cHN0cmVhbV9ldmVudCAgKEdzdEhhcm5lc3MgKiBoKTsKLQotZ3VpbnQgICAgICBnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfcmVjZWl2ZWQgKEdzdEhhcm5lc3MgKiBoKTsKLQotZ3VpbnQgICAgICBnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgKEdzdEhhcm5lc3MgKiBoKTsKLQotLyogbGF0ZW5jeSAqLwotCi1Hc3RDbG9ja1RpbWUgZ3N0X2hhcm5lc3NfcXVlcnlfbGF0ZW5jeSAoR3N0SGFybmVzcyAqIGgpOwotCi12b2lkICAgICAgICAgZ3N0X2hhcm5lc3Nfc2V0X3Vwc3RyZWFtX2xhdGVuY3kgKEdzdEhhcm5lc3MgKiBoLCBHc3RDbG9ja1RpbWUgbGF0ZW5jeSk7Ci0KLS8qIGFsbG9jYXRvciBhbmQgYWxsb2NhdGlvbiBwYXJhbXMgKi8KLQotdm9pZCAgICAgICAgIGdzdF9oYXJuZXNzX3NldF9wcm9wb3NlX2FsbG9jYXRvciAoR3N0SGFybmVzcyAgICAgICAgICAgICAgICAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBbGxvY2F0b3IgICAgICAgICAgICAgICogYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcyk7Ci0KLXZvaWQgICAgICAgICBnc3RfaGFybmVzc19nZXRfYWxsb2NhdG9yICAgICAgICAgKEdzdEhhcm5lc3MgICAgICAgICAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QWxsb2NhdG9yICAgICAgICoqIGFsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpOwotCi0vKiBzcmMtaGFybmVzcyAqLwotCi12b2lkICAgICAgICAgIGdzdF9oYXJuZXNzX2FkZF9zcmNfaGFybmVzcyAoR3N0SGFybmVzcyAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SGFybmVzcyAqIHNyY19oYXJuZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGhhc19jbG9ja193YWl0KTsKLQotdm9pZCAgICAgICAgICBnc3RfaGFybmVzc19hZGRfc3JjIChHc3RIYXJuZXNzICAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogc3JjX2VsZW1lbnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICBoYXNfY2xvY2tfd2FpdCk7Ci0KLXZvaWQgICAgICAgICAgZ3N0X2hhcm5lc3NfYWRkX3NyY19wYXJzZSAoR3N0SGFybmVzcyAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGxhdW5jaGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgaGFzX2Nsb2NrX3dhaXQpOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9oYXJuZXNzX3B1c2hfZnJvbV9zcmMgKEdzdEhhcm5lc3MgKiBoKTsKLQotR3N0Rmxvd1JldHVybiBnc3RfaGFybmVzc19zcmNfY3JhbmtfYW5kX3B1c2hfbWFueSAoR3N0SGFybmVzcyAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgY3JhbmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgIHB1c2hlcyk7Ci0KLWdib29sZWFuICAgICAgZ3N0X2hhcm5lc3Nfc3JjX3B1c2hfZXZlbnQgKEdzdEhhcm5lc3MgKiBoKTsKLQotLyogc2luay1oYXJuZXNzICovCi0KLXZvaWQgICAgICAgICAgZ3N0X2hhcm5lc3NfYWRkX3NpbmtfaGFybmVzcyAoR3N0SGFybmVzcyAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEhhcm5lc3MgKiBzaW5rX2hhcm5lc3MpOwotCi12b2lkICAgICAgICAgIGdzdF9oYXJuZXNzX2FkZF9zaW5rIChHc3RIYXJuZXNzICAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHNpbmtfZWxlbWVudF9uYW1lKTsKLQotdm9pZCAgICAgICAgICBnc3RfaGFybmVzc19hZGRfc2lua19wYXJzZSAoR3N0SGFybmVzcyAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBsYXVuY2hsaW5lKTsKLQotR3N0Rmxvd1JldHVybiBnc3RfaGFybmVzc19wdXNoX3RvX3NpbmsgICAoR3N0SGFybmVzcyAqIGgpOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9oYXJuZXNzX3NpbmtfcHVzaF9tYW55IChHc3RIYXJuZXNzICogaCwgZ2ludCBwdXNoZXMpOwotCi0vKiBjb252ZW5pZW5jZSBmdW5jdGlvbnMgKi8KLQotR3N0RWxlbWVudCAqICBnc3RfaGFybmVzc19maW5kX2VsZW1lbnQgKEdzdEhhcm5lc3MgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBlbGVtZW50X25hbWUpOwotCi12b2lkICAgICAgICAgIGdzdF9oYXJuZXNzX3NldCAoR3N0SGFybmVzcyAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZmlyc3RfcHJvcGVydHlfbmFtZSwgLi4uKTsKLQotdm9pZCAgICAgICAgICBnc3RfaGFybmVzc19nZXQgKEdzdEhhcm5lc3MgICogaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGVsZW1lbnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGZpcnN0X3Byb3BlcnR5X25hbWUsIC4uLik7Ci0KLXZvaWQgICAgICAgICAgZ3N0X2hhcm5lc3NfYWRkX3Byb2JlIChHc3RIYXJuZXNzICAgICAgICAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgKiBlbGVtZW50X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgKiBwYWRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRQcm9iZVR5cGUgICAgIG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGFkUHJvYmVDYWxsYmFjayBjYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgIHVzZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSAgICAgIGRlc3Ryb3lfZGF0YSk7Ci0KLS8qIFN0cmVzcyAqLwotCi1ndWludCAgICAgICAgICAgICAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wICAoR3N0SGFybmVzc1RocmVhZCAqIHQpOwotCi1Hc3RIYXJuZXNzVGhyZWFkICogZ3N0X2hhcm5lc3Nfc3RyZXNzX2N1c3RvbV9zdGFydCAoR3N0SGFybmVzcyAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Z1bmMgICAgICAgIGluaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Z1bmMgICAgICAgIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1bG9uZyAgICAgICBzbGVlcCk7Ci0KLSNkZWZpbmUgZ3N0X2hhcm5lc3Nfc3RyZXNzX3N0YXRlY2hhbmdlX3N0YXJ0KGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydF9mdWxsIChoLCBHX1VTRUNfUEVSX1NFQyAvIDEwMCkKLQotR3N0SGFybmVzc1RocmVhZCAqIGdzdF9oYXJuZXNzX3N0cmVzc19zdGF0ZWNoYW5nZV9zdGFydF9mdWxsIChHc3RIYXJuZXNzICogaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgIHNsZWVwKTsKLQotI2RlZmluZSBnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnQoaCwgYywgcywgYikgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0X2Z1bGwgKGgsIGMsIHMsIGIsIDApCi0KLUdzdEhhcm5lc3NUaHJlYWQgKiBnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfc3RhcnRfZnVsbCAoR3N0SGFybmVzcyAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgICAgKiBjYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RTZWdtZW50ICogc2VnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICAqIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgIHNsZWVwKTsKLQotLyoqCi0gKiBHc3RIYXJuZXNzUHJlcGFyZUJ1ZmZlckZ1bmM6Ci0gKiBAaDogYSAjR3N0SGFybmVzcwotICogQGRhdGE6IHVzZXIgZGF0YQotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotdHlwZWRlZiBHc3RCdWZmZXIgKiAoKkdzdEhhcm5lc3NQcmVwYXJlQnVmZmVyRnVuYykgKEdzdEhhcm5lc3MgKiBoLCBncG9pbnRlciBkYXRhKTsKLQotI2RlZmluZSBnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9idWZmZXJfd2l0aF9jYl9zdGFydChoLCBjLCBzLCBmLCBkLCBuKSAgICAgICAgIFwKLSAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3dpdGhfY2Jfc3RhcnRfZnVsbCAoaCwgYywgcywgZiwgZCwgbiwgMCkKLQotR3N0SGFybmVzc1RocmVhZCAqIGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2J1ZmZlcl93aXRoX2NiX3N0YXJ0X2Z1bGwgKEdzdEhhcm5lc3MgICAqIGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAgICAgICogY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RTZWdtZW50ICogc2VnbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RIYXJuZXNzUHJlcGFyZUJ1ZmZlckZ1bmMgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IG5vdGlmeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgICAgICAgICBzbGVlcCk7Ci0KLSNkZWZpbmUgZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfc3RhcnQoaCwgZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3N0YXJ0X2Z1bGwgKGgsIGUsIDApCi0KLUdzdEhhcm5lc3NUaHJlYWQgKiBnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF9zdGFydF9mdWxsIChHc3RIYXJuZXNzICogaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFdmVudCAgICogZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgIHNsZWVwKTsKLQotLyoqCi0gKiBHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYzoKLSAqIEBoOiBhICNHc3RIYXJuZXNzCi0gKiBAZGF0YTogdXNlciBkYXRhCi0gKgotICogU2luY2U6IDEuOAotICovCi10eXBlZGVmIEdzdEV2ZW50ICogKCpHc3RIYXJuZXNzUHJlcGFyZUV2ZW50RnVuYykgKEdzdEhhcm5lc3MgKiBoLCBncG9pbnRlciBkYXRhKTsKLQotI2RlZmluZSBnc3RfaGFybmVzc19zdHJlc3NfcHVzaF9ldmVudF93aXRoX2NiX3N0YXJ0KGgsIGYsIGQsIG4pICAgICAgICAgICAgICAgIFwKLSAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIChoLCBmLCBkLCBuLCAwKQotCi1Hc3RIYXJuZXNzVGhyZWFkICogZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIChHc3RIYXJuZXNzICAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgICAgICAgICBzbGVlcCk7Ci0KLSNkZWZpbmUgZ3N0X2hhcm5lc3Nfc3RyZXNzX3NlbmRfdXBzdHJlYW1fZXZlbnRfc3RhcnQoaCwgZSkgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50X3N0YXJ0X2Z1bGwgKGgsIGUsIDApCi0KLUdzdEhhcm5lc3NUaHJlYWQgKiBnc3RfaGFybmVzc19zdHJlc3NfcHVzaF91cHN0cmVhbV9ldmVudF9zdGFydF9mdWxsIChHc3RIYXJuZXNzICogaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFdmVudCAgICogZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgIHNsZWVwKTsKLQotI2RlZmluZSBnc3RfaGFybmVzc19zdHJlc3Nfc2VuZF91cHN0cmVhbV9ldmVudF93aXRoX2NiX3N0YXJ0KGgsIGYsIGQsIG4pICAgICAgIFwKLSAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIChoLCBmLCBkLCBuLCAwKQotCi1Hc3RIYXJuZXNzVGhyZWFkICogZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfdXBzdHJlYW1fZXZlbnRfd2l0aF9jYl9zdGFydF9mdWxsIChHc3RIYXJuZXNzICAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SGFybmVzc1ByZXBhcmVFdmVudEZ1bmMgZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgICAgICAgICBzbGVlcCk7Ci0KLQotI2RlZmluZSBnc3RfaGFybmVzc19zdHJlc3NfcHJvcGVydHlfc3RhcnQoaCwgbiwgdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3Byb3BlcnR5X3N0YXJ0X2Z1bGwgKGgsIG4sIHYsIEdfVVNFQ19QRVJfU0VDIC8gMTAwMCkKLQotR3N0SGFybmVzc1RocmVhZCAqIGdzdF9oYXJuZXNzX3N0cmVzc19wcm9wZXJ0eV9zdGFydF9mdWxsIChHc3RIYXJuZXNzICAgKiBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgICAgc2xlZXApOwotCi0jZGVmaW5lIGdzdF9oYXJuZXNzX3N0cmVzc19yZXF1ZXN0cGFkX3N0YXJ0KGgsIHQsIG4sIGMsIHIpICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfaGFybmVzc19zdHJlc3NfcmVxdWVzdHBhZF9zdGFydF9mdWxsIChoLCB0LCBuLCBjLCByLCBHX1VTRUNfUEVSX1NFQyAvIDEwMCkKLQotR3N0SGFybmVzc1RocmVhZCAqIGdzdF9oYXJuZXNzX3N0cmVzc19yZXF1ZXN0cGFkX3N0YXJ0X2Z1bGwgKEdzdEhhcm5lc3MgICAgICogaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICAgICAgICAqIGNhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICByZWxlYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1bG9uZyAgICAgICAgICAgc2xlZXApOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfSEFSTkVTU19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5jIGIvbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMzY2N2YuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQ1ICswLDAgQEAKLS8qIEdzdFRlc3RDbG9jayAtIEEgZGV0ZXJtaW5pc3RpYyBjbG9jayBmb3IgR1N0cmVhbWVyIHVuaXQgdGVzdHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJhc3RpYW4ucmFzbXVzc2VuQGF4aXMuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIEhhdmFyZCBHcmFmZiA8aGF2YXJkQHBleGlwLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBIYWFrb24gU3BvcnNoZWltIDxoYWFrb25AcGV4aXAuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjpnc3R0ZXN0Y2xvY2sKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQ29udHJvbGxhYmxlLCBkZXRlcm1pbmlzdGljIGNsb2NrIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0cwotICogQHNlZV9hbHNvOiAjR3N0U3lzdGVtQ2xvY2ssICNHc3RDbG9jawotICoKLSAqIEdzdFRlc3RDbG9jayBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiAjR3N0Q2xvY2sgd2hpY2ggaGFzIGRpZmZlcmVudAotICogYmVoYXZpb3VyIGNvbXBhcmVkIHRvICNHc3RTeXN0ZW1DbG9jay4gVGltZSBmb3IgI0dzdFN5c3RlbUNsb2NrIGFkdmFuY2VzCi0gKiBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSB0aW1lLCB3aGlsZSB0aW1lIGZvciAjR3N0VGVzdENsb2NrIGNoYW5nZXMgb25seQotICogd2hlbiBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSgpIG9yIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSgpIGFyZQotICogY2FsbGVkLiAjR3N0VGVzdENsb2NrIHByb3ZpZGVzIHVuaXQgdGVzdHMgd2l0aCB0aGUgcG9zc2liaWxpdHkgdG8KLSAqIHByZWNpc2VseSBhZHZhbmNlIHRoZSB0aW1lIGluIGEgZGV0ZXJtaW5pc3RpYyBtYW5uZXIsIGluZGVwZW5kZW50IG9mIHRoZQotICogc3lzdGVtIHRpbWUgb3IgYW55IG90aGVyIGV4dGVybmFsIGZhY3RvcnMuCi0gKgotICogPGV4YW1wbGU+Ci0gKiA8dGl0bGU+QWR2YW5jaW5nIHRoZSB0aW1lIG9mIGEgI0dzdFRlc3RDbG9jazwvdGl0bGU+Ci0gKiAgIDxwcm9ncmFtbGlzdGluZyBsYW5ndWFnZT0iYyI+Ci0gKiAgICNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0gKiAgICNpbmNsdWRlICZsdDtnc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmgmZ3Q7Ci0gKgotICogICBHc3RDbG9jayAqY2xvY2s7Ci0gKiAgIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jazsKLSAqCi0gKiAgIGNsb2NrID0gZ3N0X3Rlc3RfY2xvY2tfbmV3ICgpOwotICogICB0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLSAqICAgR1NUX0lORk8gKCJUaW1lOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spKSk7Ci0gKiAgIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAoIHRlc3RfY2xvY2ssIDEgKiBHU1RfU0VDT05EKTsKLSAqICAgR1NUX0lORk8gKCJUaW1lOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spKSk7Ci0gKiAgIGdfdXNsZWVwICgxMCAqIEdfVVNFQ19QRVJfU0VDKTsKLSAqICAgR1NUX0lORk8gKCJUaW1lOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spKSk7Ci0gKiAgIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0X2Nsb2NrLCA0MiAqIEdTVF9TRUNPTkQpOwotICogICBHU1RfSU5GTyAoIlRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykpKTsKLSAqICAgLi4uCi0gKiAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L2V4YW1wbGU+Ci0gKgotICogI0dzdENsb2NrIGFsbG93cyBmb3Igc2V0dGluZyB1cCBzaW5nbGUgc2hvdCBvciBwZXJpb2RpYyBjbG9jayBub3RpZmljYXRpb25zCi0gKiBhcyB3ZWxsIGFzIHdhaXRpbmcgZm9yIHRoZXNlIG5vdGlmaWNhdGlvbnMgc3luY2hyb25vdXNseSAodXNpbmcKLSAqIGdzdF9jbG9ja19pZF93YWl0KCkpIG9yIGFzeW5jaHJvbm91c2x5ICh1c2luZyBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYygpIG9yCi0gKiBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYygpKS4gVGhpcyBpcyB1c2VkIGJ5IG1hbnkgR1N0cmVhbWVyIGVsZW1lbnRzLAotICogYW1vbmcgdGhlbSAjR3N0QmFzZVNyYyBhbmQgI0dzdEJhc2VTaW5rLgotICoKLSAqICNHc3RUZXN0Q2xvY2sga2VlcHMgdHJhY2sgb2YgdGhlc2UgY2xvY2sgbm90aWZpY2F0aW9ucy4gQnkgY2FsbGluZwotICogZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkKCkgb3IKLSAqIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzKCkgYSB1bml0IHRlc3RzIG1heSB3YWl0IGZvciB0aGUKLSAqIG5leHQgb25lIG9yIHNldmVyYWwgY2xvY2sgbm90aWZpY2F0aW9ucyB0byBiZSByZXF1ZXN0ZWQuIEFkZGl0aW9uYWxseSB1bml0Ci0gKiB0ZXN0cyBtYXkgcmVsZWFzZSBibG9ja2VkIHdhaXRzIGluIGEgY29udHJvbGxlZCBmYXNoaW9uIGJ5IGNhbGxpbmcKLSAqIGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCgpLiBUaGlzIHdheSBhIHVuaXQgdGVzdCBjYW4gY29udHJvbCB0aGUKLSAqIGluYWNjdXJhY3kgKGppdHRlcikgb2YgY2xvY2sgbm90aWZpY2F0aW9ucywgc2luY2UgdGhlIHRlc3QgY2FuIGRlY2lkZSB0bwotICogcmVsZWFzZSBibG9ja2VkIHdhaXRzIHdoZW4gdGhlIGNsb2NrIHRpbWUgaGFzIGFkdmFuY2VkIGV4YWN0bHkgdG8sIG9yIHBhc3QsCi0gKiB0aGUgcmVxdWVzdGVkIGNsb2NrIG5vdGlmaWNhdGlvbiB0aW1lLgotICoKLSAqIFRoZXJlIGFyZSBhbHNvIGludGVyZmFjZXMgZm9yIGRldGVybWluaW5nIGlmIGEgbm90aWZpY2F0aW9uIGJlbG9uZ3MgdG8gYQotICogI0dzdFRlc3RDbG9jayBvciBub3QsIGFzIHdlbGwgYXMgZ2V0dGluZyB0aGUgbnVtYmVyIG9mIHJlcXVlc3RlZCBjbG9jawotICogbm90aWZpY2F0aW9ucyBzbyBmYXIuCi0gKgotICogTi5CLjogV2hlbiBhIHVuaXQgdGVzdCB3YWl0cyBmb3IgYSBjZXJ0YWluIGFtb3VudCBvZiBjbG9jayBub3RpZmljYXRpb25zIHRvCi0gKiBiZSByZXF1ZXN0ZWQgaW4gZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkKCkgb3IKLSAqIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzKCkgdGhlbiB0aGVzZSBmdW5jdGlvbnMgbWF5IGJsb2NrCi0gKiBmb3IgYSBsb25nIHRpbWUuIElmIHRoZXkgYmxvY2sgZm9yZXZlciB0aGVuIHRoZSBleHBlY3RlZCBjbG9jayBub3RpZmljYXRpb25zCi0gKiB3ZXJlIG5ldmVyIHJlcXVlc3RlZCBmcm9tICNHc3RUZXN0Q2xvY2ssIGFuZCBzbyB0aGUgYXNzdW1wdGlvbnMgaW4gdGhlIGNvZGUKLSAqIG9mIHRoZSB1bml0IHRlc3QgYXJlIHdyb25nLiBUaGUgdW5pdCB0ZXN0IGNhc2UgcnVubmVyIGluIGdzdGNoZWNrIGlzCi0gKiBleHBlY3RlZCB0byBjYXRjaCB0aGVzZSBjYXNlcyBlaXRoZXIgYnkgdGhlIGRlZmF1bHQgdGVzdCBjYXNlIHRpbWVvdXQgb3IgdGhlCi0gKiBvbmUgc2V0IGZvciB0aGUgdW5pdCB0ZXN0IGJ5IGNhbGxpbmcgdGNhc2Vfc2V0X3RpbWVvdXRcKFwpLgotICoKLSAqIFRoZSBzYW1wbGUgY29kZSBiZWxvdyBhc3N1bWVzIHRoYXQgdGhlIGVsZW1lbnQgdW5kZXIgdGVzdCB3aWxsIGRlbGF5IGEKLSAqIGJ1ZmZlciBwdXNoZWQgb24gdGhlIHNvdXJjZSBwYWQgYnkgc29tZSBsYXRlbmN5IHVudGlsIGl0IGFycml2ZXMgb24gdGhlIHNpbmsKLSAqIHBhZC4gTW9yZW92ZXIgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBlbGVtZW50IHdpbGwgYXQgc29tZSBwb2ludCBjYWxsCi0gKiBnc3RfY2xvY2tfaWRfd2FpdCgpIHRvIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgYSBzcGVjaWZpYyB0aW1lLiBUaGUgZmlyc3QKLSAqIGJ1ZmZlciBzZW50IHdpbGwgYXJyaXZlIGV4YWN0bHkgb24gdGltZSBvbmx5IGRlbGF5ZWQgYnkgdGhlIGxhdGVuY3kuIFRoZQotICogc2Vjb25kIGJ1ZmZlciB3aWxsIGFycml2ZSBhIGxpdHRsZSBsYXRlICg3bXMpIGR1ZSB0byBzaW11bGF0ZWQgaml0dGVyIGluIHRoZQotICogY2xvY2sgbm90aWZpY2F0aW9uLgotICoKLSAqIDxleGFtcGxlPgotICogPHRpdGxlPkRlbW9uc3RyYXRpb24gb2YgaG93IHRvIHdvcmsgd2l0aCBjbG9jayBub3RpZmljYXRpb25zIGFuZCAjR3N0VGVzdENsb2NrPC90aXRsZT4KLSAqICAgPHByb2dyYW1saXN0aW5nIGxhbmd1YWdlPSJjIj4KLSAqICAgI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLSAqICAgI2luY2x1ZGUgJmx0O2dzdC9jaGVjay9nc3RjaGVjay5oJmd0OwotICogICAjaW5jbHVkZSAmbHQ7Z3N0L2NoZWNrL2dzdHRlc3RjbG9jay5oJmd0OwotICoKLSAqICAgR3N0Q2xvY2tUaW1lIGxhdGVuY3k7Ci0gKiAgIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gKiAgIEdzdFBhZCAqc3JjcGFkOwotICogICBHc3RDbG9jayAqY2xvY2s7Ci0gKiAgIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jazsKLSAqICAgR3N0QnVmZmVyIGJ1ZjsKLSAqICAgR3N0Q2xvY2tJRCBwZW5kaW5nX2lkOwotICogICBHc3RDbG9ja0lEIHByb2Nlc3NlZF9pZDsKLSAqCi0gKiAgIGxhdGVuY3kgPSA0MiAqIEdTVF9NU0VDT05EOwotICogICBlbGVtZW50ID0gY3JlYXRlX2VsZW1lbnQgKGxhdGVuY3ksIC4uLik7Ci0gKiAgIHNyY3BhZCA9IGdldF9zb3VyY2VfcGFkIChlbGVtZW50KTsKLSAqCi0gKiAgIGNsb2NrID0gZ3N0X3Rlc3RfY2xvY2tfbmV3ICgpOwotICogICB0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLSAqICAgZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrIChlbGVtZW50LCBjbG9jayk7Ci0gKgotICogICBHU1RfSU5GTyAoIlNldCB0aW1lLCBjcmVhdGUgYW5kIHB1c2ggdGhlIGZpcnN0IGJ1ZmZlclxuIik7Ci0gKiAgIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0X2Nsb2NrLCAwKTsKLSAqICAgYnVmID0gY3JlYXRlX3Rlc3RfYnVmZmVyIChnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSwgLi4uKTsKLSAqICAgZ3N0X2Fzc2VydF9jbXBpbnQgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBidWYpLCA9PSwgR1NUX0ZMT1dfT0spOwotICoKLSAqICAgR1NUX0lORk8gKCJCbG9jayB1bnRpbCBlbGVtZW50IGlzIHdhaXRpbmcgZm9yIGEgY2xvY2sgbm90aWZpY2F0aW9uXG4iKTsKLSAqICAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkICh0ZXN0X2Nsb2NrLCAmcGVuZGluZ19pZCk7Ci0gKiAgIEdTVF9JTkZPICgiQWR2YW5jZSB0byB0aGUgcmVxdWVzdGVkIHRpbWUgb2YgdGhlIGNsb2NrIG5vdGlmaWNhdGlvblxuIik7Ci0gKiAgIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAodGVzdF9jbG9jaywgbGF0ZW5jeSk7Ci0gKiAgIEdTVF9JTkZPICgiUmVsZWFzZSB0aGUgbmV4dCBibG9ja2luZyB3YWl0IGFuZCBtYWtlIHN1cmUgaXQgaXMgdGhlIG9uZSBmcm9tIGVsZW1lbnRcbiIpOwotICogICBwcm9jZXNzZWRfaWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKHRlc3RfY2xvY2spOwotICogICBnX2Fzc2VydCAocHJvY2Vzc2VkX2lkID09IHBlbmRpbmdfaWQpOwotICogICBnX2Fzc2VydF9jbXBpbnQgKEdTVF9DTE9DS19FTlRSWV9TVEFUVVMgKHByb2Nlc3NlZF9pZCksID09LCBHU1RfQ0xPQ0tfT0spOwotICogICBnc3RfY2xvY2tfaWRfdW5yZWYgKHBlbmRpbmdfaWQpOwotICogICBnc3RfY2xvY2tfaWRfdW5yZWYgKHByb2Nlc3NlZF9pZCk7Ci0gKgotICogICBHU1RfSU5GTyAoIlZhbGlkYXRlIHRoYXQgZWxlbWVudCBwcm9kdWNlZCBhbiBvdXRwdXQgYnVmZmVyIGFuZCBjaGVjayBpdHMgdGltZXN0YW1wXG4iKTsKLSAqICAgZ19hc3NlcnRfY21waW50IChnZXRfbnVtYmVyX29mX291dHB1dF9idWZmZXIgKC4uLiksID09LCAxKTsKLSAqICAgYnVmID0gZ2V0X2J1ZmZlcl9wdXNoZWRfYnlfZWxlbWVudCAoZWxlbWVudCwgLi4uKTsKLSAqICAgZ19hc3NlcnRfY21waW50IChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSwgPT0sIGxhdGVuY3kpOwotICogICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICogICBHU1RfSU5GTyAoIkNoZWNrIHRoYXQgZWxlbWVudCBkb2VzIG5vdCB3YWl0IGZvciBhbnkgY2xvY2sgbm90aWZpY2F0aW9uXG4iKTsKLSAqICAgZ19hc3NlcnQgKCFnc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZCAodGVzdF9jbG9jaywgTlVMTCkpOwotICoKLSAqICAgR1NUX0lORk8gKCJTZXQgdGltZSwgY3JlYXRlIGFuZCBwdXNoIHRoZSBzZWNvbmQgYnVmZmVyXG4iKTsKLSAqICAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lICh0ZXN0X2Nsb2NrLCAxMCAqIEdTVF9TRUNPTkQpOwotICogICBidWYgPSBjcmVhdGVfdGVzdF9idWZmZXIgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spLCAuLi4pOwotICogICBnc3RfYXNzZXJ0X2NtcGludCAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGJ1ZiksID09LCBHU1RfRkxPV19PSyk7Ci0gKgotICogICBHU1RfSU5GTyAoIkJsb2NrIHVudGlsIGVsZW1lbnQgaXMgd2FpdGluZyBmb3IgYSBuZXcgY2xvY2sgbm90aWZpY2F0aW9uXG4iKTsKLSAqICAgKGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAodGVzdF9jbG9jaywgJnBlbmRpbmdfaWQpOwotICogICBHU1RfSU5GTyAoIkFkdmFuY2UgcGFzdCA3bXMgYmV5b25kIHRoZSByZXF1ZXN0ZWQgdGltZSBvZiB0aGUgY2xvY2sgbm90aWZpY2F0aW9uXG4iKTsKLSAqICAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lICh0ZXN0X2Nsb2NrLCBsYXRlbmN5ICsgNyAqIEdTVF9NU0VDT05EKTsKLSAqICAgR1NUX0lORk8gKCJSZWxlYXNlIHRoZSBuZXh0IGJsb2NraW5nIHdhaXQgYW5kIG1ha2Ugc3VyZSBpdCBpcyB0aGUgb25lIGZyb20gZWxlbWVudFxuIik7Ci0gKiAgIHByb2Nlc3NlZF9pZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAodGVzdF9jbG9jayk7Ci0gKiAgIGdfYXNzZXJ0IChwcm9jZXNzZWRfaWQgPT0gcGVuZGluZ19pZCk7Ci0gKiAgIGdfYXNzZXJ0X2NtcGludCAoR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyAocHJvY2Vzc2VkX2lkKSwgPT0sIEdTVF9DTE9DS19PSyk7Ci0gKiAgIGdzdF9jbG9ja19pZF91bnJlZiAocGVuZGluZ19pZCk7Ci0gKiAgIGdzdF9jbG9ja19pZF91bnJlZiAocHJvY2Vzc2VkX2lkKTsKLSAqCi0gKiAgIEdTVF9JTkZPICgiVmFsaWRhdGUgdGhhdCBlbGVtZW50IHByb2R1Y2VkIGFuIG91dHB1dCBidWZmZXIgYW5kIGNoZWNrIGl0cyB0aW1lc3RhbXBcbiIpOwotICogICBnX2Fzc2VydF9jbXBpbnQgKGdldF9udW1iZXJfb2Zfb3V0cHV0X2J1ZmZlciAoLi4uKSwgPT0sIDEpOwotICogICBidWYgPSBnZXRfYnVmZmVyX3B1c2hlZF9ieV9lbGVtZW50IChlbGVtZW50LCAuLi4pOwotICogICBnX2Fzc2VydF9jbXBpbnQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpLCA9PSwKLSAqICAgICAgIDEwICogR1NUX1NFQ09ORCArIGxhdGVuY3kgKyA3ICogR1NUX01TRUNPTkQpOwotICogICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICogICBHU1RfSU5GTyAoIkNoZWNrIHRoYXQgZWxlbWVudCBkb2VzIG5vdCB3YWl0IGZvciBhbnkgY2xvY2sgbm90aWZpY2F0aW9uXG4iKTsKLSAqICAgZ19hc3NlcnQgKCFnc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZCAodGVzdF9jbG9jaywgTlVMTCkpOwotICogICAuLi4KLSAqICAgPC9wcm9ncmFtbGlzdGluZz4KLSAqIDwvZXhhbXBsZT4KLSAqCi0gKiBTaW5jZSAjR3N0VGVzdENsb2NrIGlzIG9ubHkgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiB1bml0IHRlc3RzIGl0IGNhbGxzCi0gKiBnX2Fzc2VydCgpLCBnX2Fzc2VydF9jbXBpbnQoKSBvciBnX2Fzc2VydF9jbXB1aW50KCkgdG8gdmFsaWRhdGUgYWxsIGZ1bmN0aW9uCi0gKiBhcmd1bWVudHMuIFRoaXMgd2lsbCBoaWdobGlnaHQgYW55IGlzc3VlcyB3aXRoIHRoZSB1bml0IHRlc3QgY29kZSBpdHNlbGYuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0dGVzdGNsb2NrLmgiCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NUQVJUX1RJTUUsCi0gIFBST1BfQ0xPQ0tfVFlQRQotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdENsb2NrRW50cnlDb250ZXh0IEdzdENsb2NrRW50cnlDb250ZXh0OwotCi1zdHJ1Y3QgX0dzdENsb2NrRW50cnlDb250ZXh0Ci17Ci0gIEdzdENsb2NrRW50cnkgKmNsb2NrX2VudHJ5OwotICBHc3RDbG9ja1RpbWVEaWZmIHRpbWVfZGlmZjsKLX07Ci0KLXN0cnVjdCBfR3N0VGVzdENsb2NrUHJpdmF0ZQotewotICBHc3RDbG9ja1R5cGUgY2xvY2tfdHlwZTsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWU7Ci0gIEdzdENsb2NrVGltZSBpbnRlcm5hbF90aW1lOwotICBHTGlzdCAqZW50cnlfY29udGV4dHM7Ci0gIEdDb25kIGVudHJ5X2FkZGVkX2NvbmQ7Ci0gIEdDb25kIGVudHJ5X3Byb2Nlc3NlZF9jb25kOwotfTsKLQotI2RlZmluZSBERUZBVUxUX0NMT0NLX1RZUEUgR1NUX0NMT0NLX1RZUEVfTU9OT1RPTklDCi0KLSNkZWZpbmUgR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUob2JqKSAoKEdTVF9URVNUX0NMT0NLX0NBU1QgKG9iaikpLT5wcml2KQotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh0ZXN0X2Nsb2NrX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9URVNUX0NMT0NLIHRlc3RfY2xvY2tfZGVidWcKLQotI2RlZmluZSBfZG9faW5pdCBcCi1HX1NUTVRfU1RBUlQgeyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh0ZXN0X2Nsb2NrX2RlYnVnLCAiR1NUX1RFU1RfQ0xPQ0siLCBcCi0gICAgICBHU1RfREVCVUdfQk9MRCwgIlRlc3QgY2xvY2tzIGZvciB1bml0IHRlc3RzIik7IFwKLX0gR19TVE1UX0VORAotCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VGVzdENsb2NrLCBnc3RfdGVzdF9jbG9jaywKLSAgICBHU1RfVFlQRV9DTE9DSywgX2RvX2luaXQpOwotCi1zdGF0aWMgR3N0T2JqZWN0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIGdzdF90ZXN0X2Nsb2NrX2NvbnN0cnVjdGVkIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF90ZXN0X2Nsb2NrX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3Rlc3RfY2xvY2tfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3Rlc3RfY2xvY2tfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wZXJ0eV9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF90ZXN0X2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDbG9ja1RpbWUgZ3N0X3Rlc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24gKEdzdENsb2NrICogY2xvY2spOwotc3RhdGljIEdzdENsb2NrVGltZSBnc3RfdGVzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoR3N0Q2xvY2sgKiBjbG9jayk7Ci1zdGF0aWMgR3N0Q2xvY2tSZXR1cm4gZ3N0X3Rlc3RfY2xvY2tfd2FpdCAoR3N0Q2xvY2sgKiBjbG9jaywKLSAgICBHc3RDbG9ja0VudHJ5ICogZW50cnksIEdzdENsb2NrVGltZURpZmYgKiBqaXR0ZXIpOwotc3RhdGljIEdzdENsb2NrUmV0dXJuIGdzdF90ZXN0X2Nsb2NrX3dhaXRfYXN5bmMgKEdzdENsb2NrICogY2xvY2ssCi0gICAgR3N0Q2xvY2tFbnRyeSAqIGVudHJ5KTsKLXN0YXRpYyB2b2lkIGdzdF90ZXN0X2Nsb2NrX3Vuc2NoZWR1bGUgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrRW50cnkgKiBlbnRyeSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZF91bmxvY2tlZCAoR3N0VGVzdENsb2NrICoKLSAgICB0ZXN0X2Nsb2NrLCBHc3RDbG9ja0lEICogcGVuZGluZ19pZCk7Ci1zdGF0aWMgZ3VpbnQgZ3N0X3Rlc3RfY2xvY2tfcGVla19pZF9jb3VudF91bmxvY2tlZCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jayk7Ci0KLXN0YXRpYyB2b2lkIGdzdF90ZXN0X2Nsb2NrX2FkZF9lbnRyeSAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICBHc3RDbG9ja0VudHJ5ICogZW50cnksIEdzdENsb2NrVGltZURpZmYgKiBqaXR0ZXIpOwotc3RhdGljIHZvaWQgZ3N0X3Rlc3RfY2xvY2tfcmVtb3ZlX2VudHJ5IChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrLAotICAgIEdzdENsb2NrRW50cnkgKiBlbnRyeSk7Ci1zdGF0aWMgR3N0Q2xvY2tFbnRyeUNvbnRleHQgKmdzdF90ZXN0X2Nsb2NrX2xvb2t1cF9lbnRyeV9jb250ZXh0IChHc3RUZXN0Q2xvY2sgKgotICAgIHRlc3RfY2xvY2ssIEdzdENsb2NrRW50cnkgKiBjbG9ja19lbnRyeSk7Ci0KLXN0YXRpYyBnaW50IGdzdF9jbG9ja19lbnRyeV9jb250ZXh0X2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLAotICAgIGdjb25zdHBvaW50ZXIgYik7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9jbG9ja19jbGFzc19pbml0IChHc3RUZXN0Q2xvY2tDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RDbG9ja0NsYXNzICpnc3RjbG9ja19jbGFzcyA9IEdTVF9DTE9DS19DTEFTUyAoa2xhc3MpOwotICBHUGFyYW1TcGVjICpwc3BlYzsKLQotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdFRlc3RDbG9ja1ByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVzdF9jbG9ja19jb25zdHJ1Y3RlZCk7Ci0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Rlc3RfY2xvY2tfZGlzcG9zZSk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZXN0X2Nsb2NrX2ZpbmFsaXplKTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZXN0X2Nsb2NrX2dldF9wcm9wZXJ0eSk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVzdF9jbG9ja19zZXRfcHJvcGVydHkpOwotCi0gIGdzdGNsb2NrX2NsYXNzLT5nZXRfcmVzb2x1dGlvbiA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Rlc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24pOwotICBnc3RjbG9ja19jbGFzcy0+Z2V0X2ludGVybmFsX3RpbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZXN0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lKTsKLSAgZ3N0Y2xvY2tfY2xhc3MtPndhaXQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Rlc3RfY2xvY2tfd2FpdCk7Ci0gIGdzdGNsb2NrX2NsYXNzLT53YWl0X2FzeW5jID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZXN0X2Nsb2NrX3dhaXRfYXN5bmMpOwotICBnc3RjbG9ja19jbGFzcy0+dW5zY2hlZHVsZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVzdF9jbG9ja191bnNjaGVkdWxlKTsKLQotICAvKioKLSAgICogR3N0VGVzdENsb2NrOnN0YXJ0LXRpbWU6Ci0gICAqCi0gICAqIFdoZW4gYSAjR3N0VGVzdENsb2NrIGlzIGNvbnN0cnVjdGVkIGl0IHdpbGwgaGF2ZSBhIGNlcnRhaW4gc3RhcnQgdGltZSBzZXQuCi0gICAqIElmIHRoZSBjbG9jayB3YXMgY3JlYXRlZCB1c2luZyBnc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lKCkgdGhlbgotICAgKiB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgQHN0YXJ0X3RpbWUgYXJndW1lbnQuIElmCi0gICAqIGdzdF90ZXN0X2Nsb2NrX25ldygpIHdhcyBjYWxsZWQgdGhlIGNsb2NrIHN0YXJ0ZWQgYXQgdGltZSB6ZXJvLCBhbmQgdGh1cwotICAgKiB0aGlzIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB2YWx1ZSAwLgotICAgKi8KLSAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfdWludDY0ICgic3RhcnQtdGltZSIsICJTdGFydCBUaW1lIiwKLSAgICAgICJTdGFydCBUaW1lIG9mIHRoZSBDbG9jayIsIDAsIEdfTUFYVUlOVDY0LCAwLAotICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RBUlRfVElNRSwgcHNwZWMpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0xPQ0tfVFlQRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiY2xvY2stdHlwZSIsICJDbG9jayB0eXBlIiwKLSAgICAgICAgICAiVGhlIGtpbmQgb2YgY2xvY2sgaW1wbGVtZW50YXRpb24gdG8gYmUgcmVwb3J0ZWQgYnkgdGhpcyBjbG9jayIsCi0gICAgICAgICAgR1NUX1RZUEVfQ0xPQ0tfVFlQRSwgREVGQVVMVF9DTE9DS19UWVBFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9jbG9ja19pbml0IChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrKQotewotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2OwotCi0gIHRlc3RfY2xvY2stPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2ssCi0gICAgICBHU1RfVFlQRV9URVNUX0NMT0NLLCBHc3RUZXN0Q2xvY2tQcml2YXRlKTsKLQotICBwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotCi0gIGdfY29uZF9pbml0ICgmcHJpdi0+ZW50cnlfYWRkZWRfY29uZCk7Ci0gIGdfY29uZF9pbml0ICgmcHJpdi0+ZW50cnlfcHJvY2Vzc2VkX2NvbmQpOwotICBwcml2LT5jbG9ja190eXBlID0gREVGQVVMVF9DTE9DS19UWVBFOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHRlc3RfY2xvY2ssCi0gICAgICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX1NZTkMgfAotICAgICAgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9BU1lOQyB8Ci0gICAgICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfU1lOQyB8Ci0gICAgICBHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fUEVSSU9ESUNfQVNZTkMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfY2xvY2tfY29uc3RydWN0ZWQgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChvYmplY3QpOwotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotCi0gIHByaXYtPmludGVybmFsX3RpbWUgPSBwcml2LT5zdGFydF90aW1lOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2Nsb2NrX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChvYmplY3QpOwotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGVzdF9jbG9jayk7Ci0KLSAgd2hpbGUgKHByaXYtPmVudHJ5X2NvbnRleHRzICE9IE5VTEwpIHsKLSAgICBHc3RDbG9ja0VudHJ5Q29udGV4dCAqY3R4ID0gcHJpdi0+ZW50cnlfY29udGV4dHMtPmRhdGE7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfcmVtb3ZlX2VudHJ5ICh0ZXN0X2Nsb2NrLCBjdHgtPmNsb2NrX2VudHJ5KTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZXN0X2Nsb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2Nsb2NrX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RUZXN0Q2xvY2sgKnRlc3RfY2xvY2sgPSBHU1RfVEVTVF9DTE9DSyAob2JqZWN0KTsKLSAgR3N0VGVzdENsb2NrUHJpdmF0ZSAqcHJpdiA9IEdTVF9URVNUX0NMT0NLX0dFVF9QUklWQVRFICh0ZXN0X2Nsb2NrKTsKLQotICBnX2NvbmRfY2xlYXIgKCZwcml2LT5lbnRyeV9hZGRlZF9jb25kKTsKLSAgZ19jb25kX2NsZWFyICgmcHJpdi0+ZW50cnlfcHJvY2Vzc2VkX2NvbmQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2Nsb2NrX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKG9iamVjdCk7Ci0gIEdzdFRlc3RDbG9ja1ByaXZhdGUgKnByaXYgPSBHU1RfVEVTVF9DTE9DS19HRVRfUFJJVkFURSAodGVzdF9jbG9jayk7Ci0KLSAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgewotICAgIGNhc2UgUFJPUF9TVEFSVF9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgcHJpdi0+c3RhcnRfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xPQ0tfVFlQRToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBwcml2LT5jbG9ja190eXBlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9jbG9ja19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BlcnR5X2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChvYmplY3QpOwotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotCi0gIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKLSAgICBjYXNlIFBST1BfU1RBUlRfVElNRToKLSAgICAgIHByaXYtPnN0YXJ0X3RpbWUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIEdTVF9DQVRfVFJBQ0VfT0JKRUNUIChHU1RfQ0FUX1RFU1RfQ0xPQ0ssIHRlc3RfY2xvY2ssCi0gICAgICAgICAgInRlc3QgY2xvY2sgc3RhcnQgdGltZSBpbml0aWFsaXplZCBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+c3RhcnRfdGltZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMT0NLX1RZUEU6Ci0gICAgICBwcml2LT5jbG9ja190eXBlID0gKEdzdENsb2NrVHlwZSkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgR1NUX0NBVF9ERUJVRyAoR1NUX0NBVF9URVNUX0NMT0NLLCAiY2xvY2stdHlwZSBzZXQgdG8gJWQiLAotICAgICAgICAgIHByaXYtPmNsb2NrX3R5cGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENsb2NrVGltZQotZ3N0X3Rlc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24gKEdzdENsb2NrICogY2xvY2spCi17Ci0gICh2b2lkKSBjbG9jazsKLSAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWdzdF90ZXN0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3RUZXN0Q2xvY2sgKnRlc3RfY2xvY2sgPSBHU1RfVEVTVF9DTE9DSyAoY2xvY2spOwotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotICBHc3RDbG9ja1RpbWUgcmVzdWx0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGVzdF9jbG9jayk7Ci0KLSAgR1NUX0NBVF9UUkFDRV9PQkpFQ1QgKEdTVF9DQVRfVEVTVF9DTE9DSywgdGVzdF9jbG9jaywKLSAgICAgICJyZXRyaWV2aW5nIHRlc3QgY2xvY2sgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChwcml2LT5pbnRlcm5hbF90aW1lKSk7Ci0gIHJlc3VsdCA9IHByaXYtPmludGVybmFsX3RpbWU7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBHc3RDbG9ja1JldHVybgotZ3N0X3Rlc3RfY2xvY2tfd2FpdCAoR3N0Q2xvY2sgKiBjbG9jaywKLSAgICBHc3RDbG9ja0VudHJ5ICogZW50cnksIEdzdENsb2NrVGltZURpZmYgKiBqaXR0ZXIpCi17Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChjbG9jayk7Ci0gIEdzdFRlc3RDbG9ja1ByaXZhdGUgKnByaXYgPSBHU1RfVEVTVF9DTE9DS19HRVRfUFJJVkFURSAodGVzdF9jbG9jayk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZXN0X2Nsb2NrKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9URVNUX0NMT0NLLCB0ZXN0X2Nsb2NrLAotICAgICAgInJlcXVlc3Rpbmcgc3luY2hyb25vdXMgY2xvY2sgbm90aWZpY2F0aW9uIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9DTE9DS19FTlRSWV9USU1FIChlbnRyeSkpKTsKLQotICBpZiAoR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyAoZW50cnkpID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCkKLSAgICBnb3RvIHdhc191bnNjaGVkdWxlZDsKLQotICBpZiAoZ3N0X3Rlc3RfY2xvY2tfbG9va3VwX2VudHJ5X2NvbnRleHQgKHRlc3RfY2xvY2ssIGVudHJ5KSA9PSBOVUxMKQotICAgIGdzdF90ZXN0X2Nsb2NrX2FkZF9lbnRyeSAodGVzdF9jbG9jaywgZW50cnksIGppdHRlcik7Ci0KLSAgR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyAoZW50cnkpID0gR1NUX0NMT0NLX0JVU1k7Ci0KLSAgd2hpbGUgKEdTVF9DTE9DS19FTlRSWV9TVEFUVVMgKGVudHJ5KSA9PSBHU1RfQ0xPQ0tfQlVTWSkKLSAgICBnX2NvbmRfd2FpdCAoJnByaXYtPmVudHJ5X3Byb2Nlc3NlZF9jb25kLCBHU1RfT0JKRUNUX0dFVF9MT0NLICh0ZXN0X2Nsb2NrKSk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotCi0gIHJldHVybiBHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTIChlbnRyeSk7Ci0KLSAgLyogRVJST1JTICovCi13YXNfdW5zY2hlZHVsZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9URVNUX0NMT0NLLCB0ZXN0X2Nsb2NrLAotICAgICAgICAiZW50cnkgd2FzIHVuc2NoZWR1bGVkIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotICAgIHJldHVybiBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENsb2NrUmV0dXJuCi1nc3RfdGVzdF9jbG9ja193YWl0X2FzeW5jIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja0VudHJ5ICogZW50cnkpCi17Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChjbG9jayk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZXN0X2Nsb2NrKTsKLQotICBpZiAoR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyAoZW50cnkpID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCkKLSAgICBnb3RvIHdhc191bnNjaGVkdWxlZDsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9URVNUX0NMT0NLLCB0ZXN0X2Nsb2NrLAotICAgICAgInJlcXVlc3RpbmcgYXN5bmNocm9ub3VzIGNsb2NrIG5vdGlmaWNhdGlvbiBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQ0xPQ0tfRU5UUllfVElNRSAoZW50cnkpKSk7Ci0KLSAgZ3N0X3Rlc3RfY2xvY2tfYWRkX2VudHJ5ICh0ZXN0X2Nsb2NrLCBlbnRyeSwgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotCi0gIHJldHVybiBHU1RfQ0xPQ0tfT0s7Ci0KLSAgLyogRVJST1JTICovCi13YXNfdW5zY2hlZHVsZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9URVNUX0NMT0NLLCB0ZXN0X2Nsb2NrLAotICAgICAgICAiZW50cnkgd2FzIHVuc2NoZWR1bGVkIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotICAgIHJldHVybiBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2Nsb2NrX3Vuc2NoZWR1bGUgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrRW50cnkgKiBlbnRyeSkKLXsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRlc3RfY2xvY2spOwotCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1RFU1RfQ0xPQ0ssIHRlc3RfY2xvY2ssCi0gICAgICAidW5zY2hlZHVsaW5nIHJlcXVlc3RlZCBjbG9jayBub3RpZmljYXRpb24gYXQgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5KSkpOwotCi0gIEdTVF9DTE9DS19FTlRSWV9TVEFUVVMgKGVudHJ5KSA9IEdTVF9DTE9DS19VTlNDSEVEVUxFRDsKLSAgZ3N0X3Rlc3RfY2xvY2tfcmVtb3ZlX2VudHJ5ICh0ZXN0X2Nsb2NrLCBlbnRyeSk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkX3VubG9ja2VkIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrLAotICAgIEdzdENsb2NrSUQgKiBwZW5kaW5nX2lkKQotewotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotICBHTGlzdCAqaW1taW5lbnRfY2xvY2tfaWQgPSBnX2xpc3RfZmlyc3QgKHByaXYtPmVudHJ5X2NvbnRleHRzKTsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0KLSAgaWYgKGltbWluZW50X2Nsb2NrX2lkICE9IE5VTEwpIHsKLSAgICBHc3RDbG9ja0VudHJ5Q29udGV4dCAqY3R4ID0gaW1taW5lbnRfY2xvY2tfaWQtPmRhdGE7Ci0KLSAgICBpZiAocGVuZGluZ19pZCAhPSBOVUxMKSB7Ci0gICAgICAqcGVuZGluZ19pZCA9IGdzdF9jbG9ja19pZF9yZWYgKGN0eC0+Y2xvY2tfZW50cnkpOwotICAgIH0KLQotICAgIHJlc3VsdCA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnRfdW5sb2NrZWQgKEdzdFRlc3RDbG9jayAqIHRlc3RfY2xvY2spCi17Ci0gIEdzdFRlc3RDbG9ja1ByaXZhdGUgKnByaXYgPSBHU1RfVEVTVF9DTE9DS19HRVRfUFJJVkFURSAodGVzdF9jbG9jayk7Ci0KLSAgcmV0dXJuIGdfbGlzdF9sZW5ndGggKHByaXYtPmVudHJ5X2NvbnRleHRzKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2Nsb2NrX2FkZF9lbnRyeSAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICBHc3RDbG9ja0VudHJ5ICogZW50cnksIEdzdENsb2NrVGltZURpZmYgKiBqaXR0ZXIpCi17Ci0gIEdzdFRlc3RDbG9ja1ByaXZhdGUgKnByaXYgPSBHU1RfVEVTVF9DTE9DS19HRVRfUFJJVkFURSAodGVzdF9jbG9jayk7Ci0gIEdzdENsb2NrVGltZSBub3c7Ci0gIEdzdENsb2NrRW50cnlDb250ZXh0ICpjdHg7Ci0KLSAgbm93ID0gZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZCAoR1NUX0NMT0NLICh0ZXN0X2Nsb2NrKSwgcHJpdi0+aW50ZXJuYWxfdGltZSk7Ci0KLSAgaWYgKGppdHRlciAhPSBOVUxMKQotICAgICpqaXR0ZXIgPSBHU1RfQ0xPQ0tfRElGRiAoR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5KSwgbm93KTsKLQotICBjdHggPSBnX3NsaWNlX25ldyAoR3N0Q2xvY2tFbnRyeUNvbnRleHQpOwotICBjdHgtPmNsb2NrX2VudHJ5ID0gR1NUX0NMT0NLX0VOVFJZIChnc3RfY2xvY2tfaWRfcmVmIChlbnRyeSkpOwotICBjdHgtPnRpbWVfZGlmZiA9IEdTVF9DTE9DS19ESUZGIChub3csIEdTVF9DTE9DS19FTlRSWV9USU1FIChlbnRyeSkpOwotCi0gIHByaXYtPmVudHJ5X2NvbnRleHRzID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKHByaXYtPmVudHJ5X2NvbnRleHRzLCBjdHgsCi0gICAgICBnc3RfY2xvY2tfZW50cnlfY29udGV4dF9jb21wYXJlX2Z1bmMpOwotCi0gIGdfY29uZF9icm9hZGNhc3QgKCZwcml2LT5lbnRyeV9hZGRlZF9jb25kKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2Nsb2NrX3JlbW92ZV9lbnRyeSAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywgR3N0Q2xvY2tFbnRyeSAqIGVudHJ5KQotewotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotICBHc3RDbG9ja0VudHJ5Q29udGV4dCAqY3R4OwotCi0gIGN0eCA9IGdzdF90ZXN0X2Nsb2NrX2xvb2t1cF9lbnRyeV9jb250ZXh0ICh0ZXN0X2Nsb2NrLCBlbnRyeSk7Ci0gIGlmIChjdHggIT0gTlVMTCkgewotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoY3R4LT5jbG9ja19lbnRyeSk7Ci0gICAgcHJpdi0+ZW50cnlfY29udGV4dHMgPSBnX2xpc3RfcmVtb3ZlIChwcml2LT5lbnRyeV9jb250ZXh0cywgY3R4KTsKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdENsb2NrRW50cnlDb250ZXh0LCBjdHgpOwotCi0gICAgZ19jb25kX2Jyb2FkY2FzdCAoJnByaXYtPmVudHJ5X3Byb2Nlc3NlZF9jb25kKTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2xvY2tFbnRyeUNvbnRleHQgKgotZ3N0X3Rlc3RfY2xvY2tfbG9va3VwX2VudHJ5X2NvbnRleHQgKEdzdFRlc3RDbG9jayAqIHRlc3RfY2xvY2ssCi0gICAgR3N0Q2xvY2tFbnRyeSAqIGNsb2NrX2VudHJ5KQotewotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotICBHc3RDbG9ja0VudHJ5Q29udGV4dCAqcmVzdWx0ID0gTlVMTDsKLSAgR0xpc3QgKmN1cjsKLQotICBmb3IgKGN1ciA9IHByaXYtPmVudHJ5X2NvbnRleHRzOyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5uZXh0KSB7Ci0gICAgR3N0Q2xvY2tFbnRyeUNvbnRleHQgKmN0eCA9IGN1ci0+ZGF0YTsKLQotICAgIGlmIChjdHgtPmNsb2NrX2VudHJ5ID09IGNsb2NrX2VudHJ5KSB7Ci0gICAgICByZXN1bHQgPSBjdHg7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X2Nsb2NrX2VudHJ5X2NvbnRleHRfY29tcGFyZV9mdW5jIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLSAgY29uc3QgR3N0Q2xvY2tFbnRyeUNvbnRleHQgKmN0eF9hID0gYTsKLSAgY29uc3QgR3N0Q2xvY2tFbnRyeUNvbnRleHQgKmN0eF9iID0gYjsKLQotICByZXR1cm4gZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYyAoY3R4X2EtPmNsb2NrX2VudHJ5LCBjdHhfYi0+Y2xvY2tfZW50cnkpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvY2Vzc19lbnRyeV9jb250ZXh0X3VubG9ja2VkIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrLAotICAgIEdzdENsb2NrRW50cnlDb250ZXh0ICogY3R4KQotewotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotICBHc3RDbG9ja0VudHJ5ICplbnRyeSA9IGN0eC0+Y2xvY2tfZW50cnk7Ci0KLSAgaWYgKGN0eC0+dGltZV9kaWZmID49IDApCi0gICAgR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyAoZW50cnkpID0gR1NUX0NMT0NLX09LOwotICBlbHNlCi0gICAgR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyAoZW50cnkpID0gR1NUX0NMT0NLX0VBUkxZOwotCi0gIGlmIChlbnRyeS0+ZnVuYyAhPSBOVUxMKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotICAgIGVudHJ5LT5mdW5jIChHU1RfQ0xPQ0sgKHRlc3RfY2xvY2spLCBwcml2LT5pbnRlcm5hbF90aW1lLCBlbnRyeSwKLSAgICAgICAgZW50cnktPnVzZXJfZGF0YSk7Ci0gICAgR1NUX09CSkVDVF9MT0NLICh0ZXN0X2Nsb2NrKTsKLSAgfQotCi0gIGdzdF90ZXN0X2Nsb2NrX3JlbW92ZV9lbnRyeSAodGVzdF9jbG9jaywgZW50cnkpOwotCi0gIGlmIChHU1RfQ0xPQ0tfRU5UUllfVFlQRSAoZW50cnkpID09IEdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQykgewotICAgIEdTVF9DTE9DS19FTlRSWV9USU1FIChlbnRyeSkgKz0gR1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMIChlbnRyeSk7Ci0KLSAgICBpZiAoZW50cnktPmZ1bmMgIT0gTlVMTCkKLSAgICAgIGdzdF90ZXN0X2Nsb2NrX2FkZF9lbnRyeSAodGVzdF9jbG9jaywgZW50cnksIE5VTEwpOwotICB9Ci19Ci0KLXN0YXRpYyBHTGlzdCAqCi1nc3RfdGVzdF9jbG9ja19nZXRfcGVuZGluZ19pZF9saXN0X3VubG9ja2VkIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrKQotewotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotICBHUXVldWUgcXVldWUgPSBHX1FVRVVFX0lOSVQ7Ci0gIEdMaXN0ICpjdXI7Ci0KLSAgZm9yIChjdXIgPSBwcml2LT5lbnRyeV9jb250ZXh0czsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+bmV4dCkgewotICAgIEdzdENsb2NrRW50cnlDb250ZXh0ICpjdHggPSBjdXItPmRhdGE7Ci0KLSAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoJnF1ZXVlLCBnc3RfY2xvY2tfaWRfcmVmIChjdHgtPmNsb2NrX2VudHJ5KSk7Ci0gIH0KLQotICByZXR1cm4gcXVldWUuaGVhZDsKLX0KLQotLyoqCi0gKiBnc3RfdGVzdF9jbG9ja19uZXc6Ci0gKgotICogQ3JlYXRlcyBhIG5ldyB0ZXN0IGNsb2NrIHdpdGggaXRzIHRpbWUgc2V0IHRvIHplcm8uCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdFRlc3RDbG9jayBjYXN0IHRvICNHc3RDbG9jay4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdENsb2NrICoKLWdzdF90ZXN0X2Nsb2NrX25ldyAodm9pZCkKLXsKLSAgcmV0dXJuIGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKDApOwotfQotCi0vKioKLSAqIGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWU6Ci0gKiBAc3RhcnRfdGltZTogYSAjR3N0Q2xvY2tUaW1lIHNldCB0byB0aGUgZGVzaXJlZCBzdGFydCB0aW1lIG9mIHRoZSBjbG9jay4KLSAqCi0gKiBDcmVhdGVzIGEgbmV3IHRlc3QgY2xvY2sgd2l0aCBpdHMgdGltZSBzZXQgdG8gdGhlIHNwZWNpZmllZCB0aW1lLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RUZXN0Q2xvY2sgY2FzdCB0byAjR3N0Q2xvY2suCi0gKgotICogU2luY2U6IDEuMgotICovCi1Hc3RDbG9jayAqCi1nc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lIChHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSkKLXsKLSAgZ19hc3NlcnRfY21wdWludCAoc3RhcnRfdGltZSwgIT0sIEdTVF9DTE9DS19USU1FX05PTkUpOwotICByZXR1cm4gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9URVNUX0NMT0NLLCAic3RhcnQtdGltZSIsIHN0YXJ0X3RpbWUsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lOgotICogQHRlc3RfY2xvY2s6IGEgI0dzdFRlc3RDbG9jayBvZiB3aGljaCB0byBzZXQgdGhlIHRpbWUKLSAqIEBuZXdfdGltZTogYSAjR3N0Q2xvY2tUaW1lIGxhdGVyIHRoYW4gdGhhdCByZXR1cm5lZCBieSBnc3RfY2xvY2tfZ2V0X3RpbWUoKQotICoKLSAqIFNldHMgdGhlIHRpbWUgb2YgQHRlc3RfY2xvY2sgdG8gdGhlIHRpbWUgZ2l2ZW4gYnkgQG5ld190aW1lLiBUaGUgdGltZSBvZgotICogQHRlc3RfY2xvY2sgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLCB0aGVyZWZvcmUgcHJvdmlkaW5nIGEgQG5ld190aW1lCi0gKiB3aGljaCBpcyBlYXJsaWVyIG9yIGVxdWFsIHRvIHRoZSB0aW1lIG9mIHRoZSBjbG9jayBhcyBnaXZlbiBieQotICogZ3N0X2Nsb2NrX2dldF90aW1lKCkgaXMgYSBwcm9ncmFtbWluZyBlcnJvci4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotdm9pZAotZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKEdzdFRlc3RDbG9jayAqIHRlc3RfY2xvY2ssIEdzdENsb2NrVGltZSBuZXdfdGltZSkKLXsKLSAgR3N0VGVzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEVTVF9DTE9DSyAodGVzdF9jbG9jaykpOwotCi0gIHByaXYgPSBHU1RfVEVTVF9DTE9DS19HRVRfUFJJVkFURSAodGVzdF9jbG9jayk7Ci0KLSAgZ19hc3NlcnRfY21wdWludCAobmV3X3RpbWUsICE9LCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRlc3RfY2xvY2spOwotCi0gIGdfYXNzZXJ0X2NtcHVpbnQgKG5ld190aW1lLCA+PSwgcHJpdi0+aW50ZXJuYWxfdGltZSk7Ci0KLSAgcHJpdi0+aW50ZXJuYWxfdGltZSA9IG5ld190aW1lOwotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9URVNUX0NMT0NLLCB0ZXN0X2Nsb2NrLAotICAgICAgImNsb2NrIHNldCB0byAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKG5ld190aW1lKSk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotfQotCi0vKioKLSAqIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZToKLSAqIEB0ZXN0X2Nsb2NrOiBhICNHc3RUZXN0Q2xvY2sgZm9yIHdoaWNoIHRvIGluY3JlYXNlIHRoZSB0aW1lCi0gKiBAZGVsdGE6IGEgcG9zaXRpdmUgI0dzdENsb2NrVGltZURpZmYgdG8gYmUgYWRkZWQgdG8gdGhlIHRpbWUgb2YgdGhlIGNsb2NrCi0gKgotICogQWR2YW5jZXMgdGhlIHRpbWUgb2YgdGhlIEB0ZXN0X2Nsb2NrIGJ5IHRoZSBhbW91bnQgZ2l2ZW4gYnkgQGRlbHRhLiBUaGUKLSAqIHRpbWUgb2YgQHRlc3RfY2xvY2sgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLCB0aGVyZWZvcmUgcHJvdmlkaW5nIGEKLSAqIEBkZWx0YSB3aGljaCBpcyBuZWdhdGl2ZSBvciB6ZXJvIGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywgR3N0Q2xvY2tUaW1lRGlmZiBkZWx0YSkKLXsKLSAgR3N0VGVzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEVTVF9DTE9DSyAodGVzdF9jbG9jaykpOwotCi0gIHByaXYgPSBHU1RfVEVTVF9DTE9DS19HRVRfUFJJVkFURSAodGVzdF9jbG9jayk7Ci0KLSAgZ19hc3NlcnRfY21waW50IChkZWx0YSwgPj0sIDApOwotICBnX2Fzc2VydF9jbXB1aW50IChkZWx0YSwgPCwgR19NQVhVSU5UNjQgLSBkZWx0YSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZXN0X2Nsb2NrKTsKLQotICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAoR1NUX0NBVF9URVNUX0NMT0NLLCB0ZXN0X2Nsb2NrLAotICAgICAgImFkdmFuY2luZyBjbG9jayBieSAlIiBHU1RfVElNRV9GT1JNQVQgIiB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChkZWx0YSksIEdTVF9USU1FX0FSR1MgKHByaXYtPmludGVybmFsX3RpbWUgKyBkZWx0YSkpOwotICBwcml2LT5pbnRlcm5hbF90aW1lICs9IGRlbHRhOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZXN0X2Nsb2NrKTsKLX0KLQotLyoqCi0gKiBnc3RfdGVzdF9jbG9ja19wZWVrX2lkX2NvdW50OgotICogQHRlc3RfY2xvY2s6IGEgI0dzdFRlc3RDbG9jayBmb3Igd2hpY2ggdG8gY291bnQgbm90aWZpY2F0aW9ucwotICoKLSAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgY2xvY2sgbm90aWZpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbgotICogcmVxdWVzdGVkIGZyb20gdGhlIEB0ZXN0X2Nsb2NrLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiBwZW5kaW5nIGNsb2NrIG5vdGlmaWNhdGlvbnMuCi0gKgotICogU2luY2U6IDEuMgotICovCi1ndWludAotZ3N0X3Rlc3RfY2xvY2tfcGVla19pZF9jb3VudCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaykKLXsKLSAgZ3VpbnQgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEVTVF9DTE9DSyAodGVzdF9jbG9jayksIDApOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGVzdF9jbG9jayk7Ci0gIHJlc3VsdCA9IGdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnRfdW5sb2NrZWQgKHRlc3RfY2xvY2spOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVzdF9jbG9jayk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfdGVzdF9jbG9ja19oYXNfaWQ6Ci0gKiBAdGVzdF9jbG9jazogYSAjR3N0VGVzdENsb2NrIHRvIGFzayBpZiBpdCBwcm92aWRlZCB0aGUgbm90aWZpY2F0aW9uCi0gKiBAaWQ6ICh0cmFuc2ZlciBub25lKTogYSAjR3N0Q2xvY2tJRCBjbG9jayBub3RpZmljYXRpb24KLSAqCi0gKiBDaGVja3Mgd2hldGhlciBAdGVzdF9jbG9jayB3YXMgcmVxdWVzdGVkIHRvIHByb3ZpZGUgdGhlIGNsb2NrIG5vdGlmaWNhdGlvbgotICogZ2l2ZW4gYnkgQGlkLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNsb2NrIGhhcyBiZWVuIGFza2VkIHRvIHByb3ZpZGUgdGhlIGdpdmVuIGNsb2NrCi0gKiBub3RpZmljYXRpb24sICVGQUxTRSBvdGhlcndpc2UuCi0gKgotICogU2luY2U6IDEuMgotICovCi1nYm9vbGVhbgotZ3N0X3Rlc3RfY2xvY2tfaGFzX2lkIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrLCBHc3RDbG9ja0lEIGlkKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19URVNUX0NMT0NLICh0ZXN0X2Nsb2NrKSwgRkFMU0UpOwotICBnX2Fzc2VydCAoaWQgIT0gTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZXN0X2Nsb2NrKTsKLSAgcmVzdWx0ID0gZ3N0X3Rlc3RfY2xvY2tfbG9va3VwX2VudHJ5X2NvbnRleHQgKHRlc3RfY2xvY2ssIGlkKSAhPSBOVUxMOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVzdF9jbG9jayk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZDoKLSAqIEB0ZXN0X2Nsb2NrOiBhICNHc3RUZXN0Q2xvY2sgdG8gY2hlY2sgdGhlIGNsb2NrIG5vdGlmaWNhdGlvbnMgZm9yCi0gKiBAcGVuZGluZ19pZDogKGFsbG93LW5vbmUpIChvdXQpICh0cmFuc2ZlciBmdWxsKTogYSAjR3N0Q2xvY2tJRCBjbG9jawotICogbm90aWZpY2F0aW9uIHRvIGxvb2sgZm9yCi0gKgotICogRGV0ZXJtaW5lcyBpZiB0aGUgQHBlbmRpbmdfaWQgaXMgdGhlIG5leHQgY2xvY2sgbm90aWZpY2F0aW9uIHNjaGVkdWxlZCB0bwotICogYmUgdHJpZ2dlcmVkIGdpdmVuIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIEB0ZXN0X2Nsb2NrLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuOiAlVFJVRSBpZiBAcGVuZGluZ19pZCBpcyB0aGUgbmV4dCBjbG9jayBub3RpZmljYXRpb24gdG8gYmUKLSAqIHRyaWdnZXJlZCwgJUZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLWdib29sZWFuCi1nc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICBHc3RDbG9ja0lEICogcGVuZGluZ19pZCkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEVTVF9DTE9DSyAodGVzdF9jbG9jayksIEZBTFNFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRlc3RfY2xvY2spOwotICByZXN1bHQgPSBnc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZF91bmxvY2tlZCAodGVzdF9jbG9jaywKLSAgICAgIHBlbmRpbmdfaWQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVzdF9jbG9jayk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQ6Ci0gKiBAdGVzdF9jbG9jazogI0dzdFRlc3RDbG9jayBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBwZW5kaW5nIGNsb2NrIG5vdGlmaWNhdGlvbgotICogQHBlbmRpbmdfaWQ6IChhbGxvdy1ub25lKSAob3V0KSAodHJhbnNmZXIgZnVsbCk6ICNHc3RDbG9ja0lECi0gKiB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW5kaW5nIGNsb2NrIG5vdGlmaWNhdGlvbgotICoKLSAqIFdhaXRzIHVudGlsIGEgY2xvY2sgbm90aWZpY2F0aW9uIGlzIHJlcXVlc3RlZCBmcm9tIEB0ZXN0X2Nsb2NrLiBUaGVyZSBpcyBubwotICogdGltZW91dCBmb3IgdGhpcyB3YWl0LCBzZWUgdGhlIG1haW4gZGVzY3JpcHRpb24gb2YgI0dzdFRlc3RDbG9jay4gQSByZWZlcmVuY2UKLSAqIHRvIHRoZSBwZW5kaW5nIGNsb2NrIG5vdGlmaWNhdGlvbiBpcyBzdG9yZWQgaW4gQHBlbmRpbmdfaWQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXZvaWQKLWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICBHc3RDbG9ja0lEICogcGVuZGluZ19pZCkKLXsKLSAgR3N0VGVzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVEVTVF9DTE9DSyAodGVzdF9jbG9jaykpOwotCi0gIHByaXYgPSBHU1RfVEVTVF9DTE9DS19HRVRfUFJJVkFURSAodGVzdF9jbG9jayk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZXN0X2Nsb2NrKTsKLQotICB3aGlsZSAocHJpdi0+ZW50cnlfY29udGV4dHMgPT0gTlVMTCkKLSAgICBnX2NvbmRfd2FpdCAoJnByaXYtPmVudHJ5X2FkZGVkX2NvbmQsIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKHRlc3RfY2xvY2spKTsKLQotICBpZiAoIWdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkX3VubG9ja2VkICh0ZXN0X2Nsb2NrLCBwZW5kaW5nX2lkKSkKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVzdF9jbG9jayk7Ci19Ci0KLS8qKgotICogZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfcGVuZGluZ19pZF9jb3VudDoKLSAqIEB0ZXN0X2Nsb2NrOiAjR3N0VGVzdENsb2NrIGZvciB3aGljaCB0byBhd2FpdCBoYXZpbmcgZW5vdWdoIHBlbmRpbmcgY2xvY2sKLSAqIEBjb3VudDogdGhlIG51bWJlciBvZiBwZW5kaW5nIGNsb2NrIG5vdGlmaWNhdGlvbnMgdG8gd2FpdCBmb3IKLSAqCi0gKiBCbG9ja3MgdW50aWwgYXQgbGVhc3QgQGNvdW50IGNsb2NrIG5vdGlmaWNhdGlvbnMgaGF2ZSBiZWVuIHJlcXVlc3RlZCBmcm9tCi0gKiBAdGVzdF9jbG9jay4gVGhlcmUgaXMgbm8gdGltZW91dCBmb3IgdGhpcyB3YWl0LCBzZWUgdGhlIG1haW4gZGVzY3JpcHRpb24gb2YKLSAqICNHc3RUZXN0Q2xvY2suCi0gKgotICogU2luY2U6IDEuMgotICoKLSAqIERlcHJlY2F0ZWQ6IHVzZSBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkcygpIGluc3RlYWQuCi0gKi8KLSNpZm5kZWYgR1NUX1JFTU9WRV9ERVBSRUNBVEVECi0jaWZkZWYgR1NUX0RJU0FCTEVfREVQUkVDQVRFRAotdm9pZCBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9wZW5kaW5nX2lkX2NvdW50IChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrLAotICAgIGd1aW50IGNvdW50KTsKLSNlbmRpZgotdm9pZAotZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfcGVuZGluZ19pZF9jb3VudCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICBndWludCBjb3VudCkKLXsKLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHMgKHRlc3RfY2xvY2ssIGNvdW50LCBOVUxMKTsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZDoKLSAqIEB0ZXN0X2Nsb2NrOiBhICNHc3RUZXN0Q2xvY2sgZm9yIHdoaWNoIHRvIHJldHJpZXZlIHRoZSBuZXh0IHBlbmRpbmcgY2xvY2sKLSAqIG5vdGlmaWNhdGlvbgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhICNHc3RDbG9ja0lEIGNvbnRhaW5pbmcgdGhlIG5leHQgcGVuZGluZyBjbG9jawotICogbm90aWZpY2F0aW9uLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotR3N0Q2xvY2tJRAotZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrKQotewotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2OwotICBHc3RDbG9ja0lEIHJlc3VsdCA9IE5VTEw7Ci0gIEdzdENsb2NrRW50cnlDb250ZXh0ICpjdHggPSBOVUxMOwotICBHTGlzdCAqY3VyOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVEVTVF9DTE9DSyAodGVzdF9jbG9jayksIE5VTEwpOwotCi0gIHByaXYgPSBHU1RfVEVTVF9DTE9DS19HRVRfUFJJVkFURSAodGVzdF9jbG9jayk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZXN0X2Nsb2NrKTsKLQotICBmb3IgKGN1ciA9IHByaXYtPmVudHJ5X2NvbnRleHRzOyBjdXIgIT0gTlVMTCAmJiByZXN1bHQgPT0gTlVMTDsKLSAgICAgIGN1ciA9IGN1ci0+bmV4dCkgewotICAgIGN0eCA9IGN1ci0+ZGF0YTsKLQotICAgIGlmIChwcml2LT5pbnRlcm5hbF90aW1lID49IEdTVF9DTE9DS19FTlRSWV9USU1FIChjdHgtPmNsb2NrX2VudHJ5KSkKLSAgICAgIHJlc3VsdCA9IGdzdF9jbG9ja19pZF9yZWYgKGN0eC0+Y2xvY2tfZW50cnkpOwotICB9Ci0KLSAgaWYgKHJlc3VsdCAhPSBOVUxMKQotICAgIHByb2Nlc3NfZW50cnlfY29udGV4dF91bmxvY2tlZCAodGVzdF9jbG9jaywgY3R4KTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVzdF9jbG9jayk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3RfdGVzdF9jbG9ja19nZXRfbmV4dF9lbnRyeV90aW1lOgotICogQHRlc3RfY2xvY2s6IGEgI0dzdFRlc3RDbG9jayB0byBmZXRjaCB0aGUgbmV4dCBjbG9jayBub3RpZmljYXRpb24gdGltZSBmb3IKLSAqCi0gKiBSZXRyaWV2ZSB0aGUgcmVxdWVzdGVkIHRpbWUgZm9yIHRoZSBuZXh0IHBlbmRpbmcgY2xvY2sgbm90aWZpY2F0aW9uLgotICoKLSAqIE1UIHNhZmUuCi0gKgotICogUmV0dXJuczogYSAjR3N0Q2xvY2tUaW1lIHNldCB0byB0aGUgdGltZSBvZiB0aGUgbmV4dCBwZW5kaW5nIGNsb2NrCi0gKiBub3RpZmljYXRpb24uIElmIG5vIGNsb2NrIG5vdGlmaWNhdGlvbnMgaGF2ZSBiZWVuIHJlcXVlc3RlZAotICogJUdTVF9DTE9DS19USU1FX05PTkUgd2lsbCBiZSByZXR1cm5lZC4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLUdzdENsb2NrVGltZQotZ3N0X3Rlc3RfY2xvY2tfZ2V0X25leHRfZW50cnlfdGltZSAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaykKLXsKLSAgR3N0VGVzdENsb2NrUHJpdmF0ZSAqcHJpdjsKLSAgR3N0Q2xvY2tUaW1lIHJlc3VsdCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdMaXN0ICppbW1pbmVudF9jbG9ja19pZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RFU1RfQ0xPQ0sgKHRlc3RfY2xvY2spLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBwcml2ID0gR1NUX1RFU1RfQ0xPQ0tfR0VUX1BSSVZBVEUgKHRlc3RfY2xvY2spOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGVzdF9jbG9jayk7Ci0KLSAgLyogVGhlIGxpc3Qgb2YgcGVuZGluZyBjbG9jayBub3RpZmljYXRpb25zIGlzIHNvcnRlZCBieSB0aW1lLAotICAgICBzbyB0aGUgbW9zdCBpbW1pbmVudCBvbmUgaXMgdGhlIGZpcnN0IG9uZSBpbiB0aGUgbGlzdC4gKi8KLSAgaW1taW5lbnRfY2xvY2tfaWQgPSBnX2xpc3RfZmlyc3QgKHByaXYtPmVudHJ5X2NvbnRleHRzKTsKLSAgaWYgKGltbWluZW50X2Nsb2NrX2lkICE9IE5VTEwpIHsKLSAgICBHc3RDbG9ja0VudHJ5Q29udGV4dCAqY3R4ID0gaW1taW5lbnRfY2xvY2tfaWQtPmRhdGE7Ci0gICAgcmVzdWx0ID0gR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGN0eC0+Y2xvY2tfZW50cnkpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3RfY2xvY2spOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHM6Ci0gKiBAdGVzdF9jbG9jazogI0dzdFRlc3RDbG9jayBmb3Igd2hpY2ggdG8gYXdhaXQgaGF2aW5nIGVub3VnaCBwZW5kaW5nIGNsb2NrCi0gKiBAY291bnQ6IHRoZSBudW1iZXIgb2YgcGVuZGluZyBjbG9jayBub3RpZmljYXRpb25zIHRvIHdhaXQgZm9yCi0gKiBAcGVuZGluZ19saXN0OiAob3V0KSAoZWxlbWVudC10eXBlIEdzdC5DbG9ja0lEKSAodHJhbnNmZXIgZnVsbCkgKGFsbG93LW5vbmUpOiBBZGRyZXNzCi0gKiAgICAgb2YgYSAjR0xpc3QgcG9pbnRlciB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbGlzdCBvZiBwZW5kaW5nICNHc3RDbG9ja0lEcwotICogICAgIHRoYXQgZXhwaXJlZCwgb3IgJU5VTEwKLSAqCi0gKiBCbG9ja3MgdW50aWwgYXQgbGVhc3QgQGNvdW50IGNsb2NrIG5vdGlmaWNhdGlvbnMgaGF2ZSBiZWVuIHJlcXVlc3RlZCBmcm9tCi0gKiBAdGVzdF9jbG9jay4gVGhlcmUgaXMgbm8gdGltZW91dCBmb3IgdGhpcyB3YWl0LCBzZWUgdGhlIG1haW4gZGVzY3JpcHRpb24gb2YKLSAqICNHc3RUZXN0Q2xvY2suCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLXZvaWQKLWdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrLAotICAgIGd1aW50IGNvdW50LCBHTGlzdCAqKiBwZW5kaW5nX2xpc3QpCi17Ci0gIEdzdFRlc3RDbG9ja1ByaXZhdGUgKnByaXY7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RFU1RfQ0xPQ0sgKHRlc3RfY2xvY2spKTsKLSAgcHJpdiA9IEdTVF9URVNUX0NMT0NLX0dFVF9QUklWQVRFICh0ZXN0X2Nsb2NrKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRlc3RfY2xvY2spOwotCi0gIHdoaWxlIChnX2xpc3RfbGVuZ3RoIChwcml2LT5lbnRyeV9jb250ZXh0cykgPCBjb3VudCkKLSAgICBnX2NvbmRfd2FpdCAoJnByaXYtPmVudHJ5X2FkZGVkX2NvbmQsIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKHRlc3RfY2xvY2spKTsKLQotICBpZiAocGVuZGluZ19saXN0KQotICAgICpwZW5kaW5nX2xpc3QgPSBnc3RfdGVzdF9jbG9ja19nZXRfcGVuZGluZ19pZF9saXN0X3VubG9ja2VkICh0ZXN0X2Nsb2NrKTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVzdF9jbG9jayk7Ci19Ci0KLS8qKgotICogZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19pZF9saXN0OgotICogQHRlc3RfY2xvY2s6ICNHc3RUZXN0Q2xvY2sgZm9yIHdoaWNoIHRvIHByb2Nlc3MgdGhlIHBlbmRpbmcgSURzCi0gKiBAcGVuZGluZ19saXN0OiAoZWxlbWVudC10eXBlIEdzdC5DbG9ja0lEKSAodHJhbnNmZXIgbm9uZSkgKGFsbG93LW5vbmUpOiBMaXN0Ci0gKiAgICAgb2YgcGVuZGluZyAjR3N0Q2xvY2tJRHMKLSAqCi0gKiBQcm9jZXNzZXMgYW5kIHJlbGVhc2VzIHRoZSBwZW5kaW5nIElEcyBpbiB0aGUgbGlzdC4KLSAqCi0gKiBNVCBzYWZlLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotZ3VpbnQKLWdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfaWRfbGlzdCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICBjb25zdCBHTGlzdCAqIHBlbmRpbmdfbGlzdCkKLXsKLSAgY29uc3QgR0xpc3QgKmN1cjsKLSAgZ3VpbnQgcmVzdWx0ID0gMDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RFU1RfQ0xPQ0sgKHRlc3RfY2xvY2spLCAwKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRlc3RfY2xvY2spOwotCi0gIGZvciAoY3VyID0gcGVuZGluZ19saXN0OyBjdXIgIT0gTlVMTDsgY3VyID0gY3VyLT5uZXh0KSB7Ci0gICAgR3N0Q2xvY2tJRCBwZW5kaW5nX2lkID0gY3VyLT5kYXRhOwotICAgIEdzdENsb2NrRW50cnlDb250ZXh0ICpjdHggPQotICAgICAgICBnc3RfdGVzdF9jbG9ja19sb29rdXBfZW50cnlfY29udGV4dCAodGVzdF9jbG9jaywgcGVuZGluZ19pZCk7Ci0gICAgaWYgKGN0eCkgewotICAgICAgcHJvY2Vzc19lbnRyeV9jb250ZXh0X3VubG9ja2VkICh0ZXN0X2Nsb2NrLCBjdHgpOwotICAgICAgcmVzdWx0Kys7Ci0gICAgfQotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZXN0X2Nsb2NrKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF90ZXN0X2Nsb2NrX2lkX2xpc3RfZ2V0X2xhdGVzdF90aW1lOgotICogQHBlbmRpbmdfbGlzdDogIChlbGVtZW50LXR5cGUgR3N0LkNsb2NrSUQpICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IExpc3QKLSAqICAgICBvZiBvZiBwZW5kaW5nICNHc3RDbG9ja0lEcwotICoKLSAqIEZpbmRzIHRoZSBsYXRlc3QgdGltZSBpbnNpZGUgdGhlIGxpc3QuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS40Ci0gKi8KLUdzdENsb2NrVGltZQotZ3N0X3Rlc3RfY2xvY2tfaWRfbGlzdF9nZXRfbGF0ZXN0X3RpbWUgKGNvbnN0IEdMaXN0ICogcGVuZGluZ19saXN0KQotewotICBjb25zdCBHTGlzdCAqY3VyOwotICBHc3RDbG9ja1RpbWUgcmVzdWx0ID0gMDsKLQotICBmb3IgKGN1ciA9IHBlbmRpbmdfbGlzdDsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+bmV4dCkgewotICAgIEdzdENsb2NrSUQgKnBlbmRpbmdfaWQgPSBjdXItPmRhdGE7Ci0gICAgR3N0Q2xvY2tUaW1lIHRpbWUgPSBnc3RfY2xvY2tfaWRfZ2V0X3RpbWUgKHBlbmRpbmdfaWQpOwotICAgIGlmICh0aW1lID4gcmVzdWx0KQotICAgICAgcmVzdWx0ID0gdGltZTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogZ3N0X3Rlc3RfY2xvY2tfY3Jhbms6Ci0gKiBAdGVzdF9jbG9jazogI0dzdFRlc3RDbG9jayB0byBjcmFuawotICoKLSAqIEEgImNyYW5rIiBjb25zaXN0cyBvZiB0aHJlZSBzdGVwczoKLSAqIDE6IFdhaXQgZm9yIGEgI0dzdENsb2NrSUQgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSAjR3N0VGVzdENsb2NrLgotICogMjogQWR2YW5jZSB0aGUgI0dzdFRlc3RDbG9jayB0byB0aGUgdGltZSB0aGUgI0dzdENsb2NrSUQgaXMgd2FpdGluZyBmb3IuCi0gKiAzOiBSZWxlYXNlIHRoZSAjR3N0Q2xvY2tJRCB3YWl0LgotICogQSAiY3JhbmsiIGNhbiBiZSB0aG91Z2ggb2YgYXMgdGhlIG5vdGlvbiBvZgotICogbWFudWFsbHkgZHJpdmluZyB0aGUgY2xvY2sgZm9yd2FyZCB0byBpdHMgbmV4dCBsb2dpY2FsIHN0ZXAuCi0gKgotICogUmV0dXJuOiAlVFJVRSBpZiB0aGUgY3Jhbmsgd2FzIHN1Y2Nlc3NmdWwsICVGQUxTRSBvdGhlcndpc2UuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBTaW5jZTogMS44Ci0gKi8KLWdib29sZWFuCi1nc3RfdGVzdF9jbG9ja19jcmFuayAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaykKLXsKLSAgR3N0Q2xvY2tJRCByZXMsIHBlbmRpbmc7Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RfY2xvY2ssICZwZW5kaW5nKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RfY2xvY2ssIGdzdF9jbG9ja19pZF9nZXRfdGltZSAocGVuZGluZykpOwotICByZXMgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKHRlc3RfY2xvY2spOwotICBpZiAoR19MSUtFTFkgKHJlcyA9PSBwZW5kaW5nKSkgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChHU1RfQ0FUX1RFU1RfQ0xPQ0ssIHRlc3RfY2xvY2ssCi0gICAgICAgICJjcmFua2VkIHRvIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdF9jbG9jaykpKSk7Ci0gICAgcmVzdWx0ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUIChHU1RfQ0FUX1RFU1RfQ0xPQ0ssIHRlc3RfY2xvY2ssCi0gICAgICAgICJ0ZXN0Y2xvY2sgbmV4dCBpZCAhPSBwZW5kaW5nICglcCAhPSAlcCkiLCByZXMsIHBlbmRpbmcpOwotICAgIHJlc3VsdCA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKEdfTElLRUxZIChyZXMgIT0gTlVMTCkpCi0gICAgZ3N0X2Nsb2NrX2lkX3VucmVmIChyZXMpOwotCi0gIGdzdF9jbG9ja19pZF91bnJlZiAocGVuZGluZyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2dzdHRlc3RjbG9jay5oIGIvbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NTA1YzIuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyogR3N0VGVzdENsb2NrIC0gQSBkZXRlcm1pbmlzdGljIGNsb2NrIGZvciBHU3RyZWFtZXIgdW5pdCB0ZXN0cwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYmFzdGlhbi5yYXNtdXNzZW5AYXhpcy5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSGF2YXJkIEdyYWZmIDxoYXZhcmRAcGV4aXAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEzIEhhYWtvbiBTcG9yc2hlaW0gPGhhYWtvbkBwZXhpcC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9URVNUX0NMT0NLX0hfXwotI2RlZmluZSBfX0dTVF9URVNUX0NMT0NLX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVEVTVF9DTE9DSyAoZ3N0X3Rlc3RfY2xvY2tfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9URVNUX0NMT0NLKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSxcCi0gICAgR1NUX1RZUEVfVEVTVF9DTE9DSywgR3N0VGVzdENsb2NrKSkKLSNkZWZpbmUgR1NUX0lTX1RFU1RfQ0xPQ0sob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLFwKLSAgICBHU1RfVFlQRV9URVNUX0NMT0NLKSkKLSNkZWZpbmUgR1NUX1RFU1RfQ0xPQ0tfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSxcCi0gICAgR1NUX1RZUEVfVEVTVF9DTE9DSywgR3N0VGVzdENsb2NrQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVEVTVF9DTE9DS19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFIChcCi0gICAgKGtsYXNzKSwgR1NUX1RZUEVfVEVTVF9DTE9DSykpCi0jZGVmaW5lIEdTVF9URVNUX0NMT0NLX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTIChcCi0gICAgKG9iaiksIEdTVF9UWVBFX1RFU1RfQ0xPQ0ssIEdzdFRlc3RDbG9ja0NsYXNzKSkKLSNkZWZpbmUgR1NUX1RFU1RfQ0xPQ0tfQ0FTVChvYmopICgoR3N0VGVzdENsb2NrKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RDbG9jayBHc3RUZXN0Q2xvY2s7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdENsb2NrQ2xhc3MgR3N0VGVzdENsb2NrQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdENsb2NrUHJpdmF0ZSBHc3RUZXN0Q2xvY2tQcml2YXRlOwotCi0vKioKLSAqIEdzdFRlc3RDbG9jazoKLSAqCi0gKiBBICNHc3RUZXN0Q2xvY2sgc3RydWN0dXJlIHdoaWNoIGlzIGJhc2VkIG9uIGEgI0dzdENsb2NrIGFsb25nIHdpdGggc29tZQotICogcHJpdmF0ZSBkYXRhLgotICoKLSAqIFNpbmNlOiAxLjIKLSAqLwotc3RydWN0IF9Hc3RUZXN0Q2xvY2sKLXsKLSAgR3N0Q2xvY2sgcGFyZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RUZXN0Q2xvY2tQcml2YXRlICpwcml2OwotfTsKLQotLyoqCi0gKiBHc3RUZXN0Q2xvY2tDbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IHRoZSBwYXJlbnQgY2xhc3Mgc3RydWN0dXJlCi0gKgotICogVGhlIGNsYXNzIG9mIGEgI0dzdFRlc3RDbG9jaywgd2hpY2ggaGFzIG5vIHZpcnR1YWwgbWV0aG9kcyB0byBvdmVycmlkZS4KLSAqCi0gKiBTaW5jZTogMS4yCi0gKi8KLXN0cnVjdCBfR3N0VGVzdENsb2NrQ2xhc3MKLXsKLSAgR3N0Q2xvY2tDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSAgICAgICAgIGdzdF90ZXN0X2Nsb2NrX2dldF90eXBlICh2b2lkKTsKLQotR3N0Q2xvY2sgKiAgICBnc3RfdGVzdF9jbG9ja19uZXcgKHZvaWQpOwotCi1Hc3RDbG9jayAqICAgIGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdzdENsb2NrVGltZSBzdGFydF90aW1lKTsKLQotdm9pZCAgICAgICAgICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lICAgbmV3X3RpbWUpOwotCi12b2lkICAgICAgICAgIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAoR3N0VGVzdENsb2NrICogICB0ZXN0X2Nsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiBkZWx0YSk7Ci0KLWd1aW50ICAgICAgICAgZ3N0X3Rlc3RfY2xvY2tfcGVla19pZF9jb3VudCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jayk7Ci0KLWdib29sZWFuICAgICAgZ3N0X3Rlc3RfY2xvY2tfaGFzX2lkIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrLCBHc3RDbG9ja0lEIGlkKTsKLQotZ2Jvb2xlYW4gICAgICBnc3RfdGVzdF9jbG9ja19wZWVrX25leHRfcGVuZGluZ19pZCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrSUQgICAqIHBlbmRpbmdfaWQpOwotCi12b2lkICAgICAgICAgIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja0lEICAgKiBwZW5kaW5nX2lkKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9ERVBSRUNBVEVECi12b2lkICAgICAgICAgIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX3BlbmRpbmdfaWRfY291bnQgKEdzdFRlc3RDbG9jayAqIHRlc3RfY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGNvdW50KTsKLSNlbmRpZgotCi1Hc3RDbG9ja0lEICAgIGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jayk7Ci0KLUdzdENsb2NrVGltZSAgZ3N0X3Rlc3RfY2xvY2tfZ2V0X25leHRfZW50cnlfdGltZSAgIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrKTsKLQotdm9pZCAgICAgICAgICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkcyAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgICAgICAgKiogcGVuZGluZ19saXN0KTsKLQotZ3VpbnQgICAgICAgICBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3QgKEdzdFRlc3RDbG9jayAqIHRlc3RfY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xpc3QgICogcGVuZGluZ19saXN0KTsKLQotR3N0Q2xvY2tUaW1lICBnc3RfdGVzdF9jbG9ja19pZF9saXN0X2dldF9sYXRlc3RfdGltZSAoY29uc3QgR0xpc3QgKiBwZW5kaW5nX2xpc3QpOwotCi1nYm9vbGVhbiAgICAgIGdzdF90ZXN0X2Nsb2NrX2NyYW5rIChHc3RUZXN0Q2xvY2sgKiB0ZXN0X2Nsb2NrKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RUZXN0Q2xvY2ssIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RFU1RfQ0xPQ0tfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZS5hbSBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmEyMDYyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotbm9pbnN0X0xUTElCUkFSSUVTCT0gbGliY2hlY2tpbnRlcm5hbC5sYQotCi1FWFRSQV9ESVNUID0gY2hlY2suaC5pbgotCi1DRklMRVMgPVwKLQljaGVjay5jCQlcCi0JY2hlY2tfZXJyb3IuYwlcCi0JY2hlY2tfbGlzdC5jCVwKLQljaGVja19sb2cuYwlcCi0JY2hlY2tfbXNnLmMJXAotCWNoZWNrX3BhY2suYwlcCi0JY2hlY2tfcHJpbnQuYwlcCi0JY2hlY2tfcnVuLmMJXAotCWNoZWNrX3N0ci5jCVwKLQlsaWJjb21wYXQuYwotCi1pZiAhSEFWRV9BTEFSTQotQ0ZJTEVTICs9IGFsYXJtLmMKLWVuZGlmCi0KLWlmICFIQVZFX0NMT0NLX0dFVFRJTUUKLUNGSUxFUyArPSBjbG9ja19nZXR0aW1lLmMKLWVuZGlmCi0KLWlmICFIQVZFX1NUUlNJR05BTAotQ0ZJTEVTICs9IHN0cnNpZ25hbC5jCi1lbmRpZgotCi1pZiAhSEFWRV9USU1FUl9DUkVBVEVfU0VUVElNRV9ERUxFVEUKLUNGSUxFUyArPVwKLQl0aW1lcl9jcmVhdGUuYwlcCi0JdGltZXJfc2V0dGltZS5jCVwKLQl0aW1lcl9kZWxldGUuYwotZW5kaWYKLQotSEZJTEVTID1cCi0JY2hlY2tfZXJyb3IuaAlcCi0JY2hlY2tfaW1wbC5oCVwKLQljaGVja19saXN0LmgJXAotCWNoZWNrX2xvZy5oCVwKLQljaGVja19tc2cuaAlcCi0JY2hlY2tfcGFjay5oCVwKLQljaGVja19wcmludC5oCVwKLQljaGVja19zdHIuaAlcCi0JbGliY29tcGF0LmgKLQotbm9pbnN0X0hFQURFUlMgPSAkKEhGSUxFUykKLQotbGliY2hlY2tpbnRlcm5hbF9sYV9TT1VSQ0VTCT0gJChDRklMRVMpICQoSEZJTEVTKQotCi1saWJjaGVja2ludGVybmFsX2xhX0NGTEFHUwk9IC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrCi1saWJjaGVja2ludGVybmFsX2xhX0xJQkFERAk9Ci0KLSMgZGVmaW5lIEhBVkVfUFRIUkVBRCBoZXJlIGFzIHdlbGwgc28gd2Uga2VlcCBjaGFuZ2VzIHRvIHRoZSBjb2RlIHRvIGEgbWluaW11bQotaWYgSEFWRV9QVEhSRUFECi1saWJjaGVja2ludGVybmFsX2xhX0NGTEFHUwkrPSAkKFBUSFJFQURfQ0ZMQUdTKSAtRF9HTlVfU09VUkNFIC1ESEFWRV9QVEhSRUFECi1saWJjaGVja2ludGVybmFsX2xhX0xJQkFERAkrPSAkKFBUSFJFQURfTElCUykKLWVsc2UKLWxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTCSs9IC1EX0dOVV9TT1VSQ0UKLWVuZGlmCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9NYWtlZmlsZS5pbiBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjFiYzA0Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTkwICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLUBIQVZFX0FMQVJNX0ZBTFNFQGFtX19hcHBlbmRfMSA9IGFsYXJtLmMKLUBIQVZFX0NMT0NLX0dFVFRJTUVfRkFMU0VAYW1fX2FwcGVuZF8yID0gY2xvY2tfZ2V0dGltZS5jCi1ASEFWRV9TVFJTSUdOQUxfRkFMU0VAYW1fX2FwcGVuZF8zID0gc3Ryc2lnbmFsLmMKLUBIQVZFX1RJTUVSX0NSRUFURV9TRVRUSU1FX0RFTEVURV9GQUxTRUBhbV9fYXBwZW5kXzQgPSBcCi1ASEFWRV9USU1FUl9DUkVBVEVfU0VUVElNRV9ERUxFVEVfRkFMU0VACXRpbWVyX2NyZWF0ZS5jCVwKLUBIQVZFX1RJTUVSX0NSRUFURV9TRVRUSU1FX0RFTEVURV9GQUxTRUAJdGltZXJfc2V0dGltZS5jCVwKLUBIQVZFX1RJTUVSX0NSRUFURV9TRVRUSU1FX0RFTEVURV9GQUxTRUAJdGltZXJfZGVsZXRlLmMKLQotCi0jIGRlZmluZSBIQVZFX1BUSFJFQUQgaGVyZSBhcyB3ZWxsIHNvIHdlIGtlZXAgY2hhbmdlcyB0byB0aGUgY29kZSB0byBhIG1pbmltdW0KLUBIQVZFX1BUSFJFQURfVFJVRUBhbV9fYXBwZW5kXzUgPSAkKFBUSFJFQURfQ0ZMQUdTKSAtRF9HTlVfU09VUkNFIC1ESEFWRV9QVEhSRUFECi1ASEFWRV9QVEhSRUFEX1RSVUVAYW1fX2FwcGVuZF82ID0gJChQVEhSRUFEX0xJQlMpCi1ASEFWRV9QVEhSRUFEX0ZBTFNFQGFtX19hcHBlbmRfNyA9IC1EX0dOVV9TT1VSQ0UKLXN1YmRpciA9IGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotTFRMSUJSQVJJRVMgPSAkKG5vaW5zdF9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1ASEFWRV9QVEhSRUFEX1RSVUVAYW1fX0RFUEVOREVOQ0lFU18yID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1saWJjaGVja2ludGVybmFsX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKQotYW1fX2xpYmNoZWNraW50ZXJuYWxfbGFfU09VUkNFU19ESVNUID0gY2hlY2suYyBjaGVja19lcnJvci5jIFwKLQljaGVja19saXN0LmMgY2hlY2tfbG9nLmMgY2hlY2tfbXNnLmMgY2hlY2tfcGFjay5jIFwKLQljaGVja19wcmludC5jIGNoZWNrX3J1bi5jIGNoZWNrX3N0ci5jIGxpYmNvbXBhdC5jIGFsYXJtLmMgXAotCWNsb2NrX2dldHRpbWUuYyBzdHJzaWduYWwuYyB0aW1lcl9jcmVhdGUuYyB0aW1lcl9zZXR0aW1lLmMgXAotCXRpbWVyX2RlbGV0ZS5jIGNoZWNrX2Vycm9yLmggY2hlY2tfaW1wbC5oIGNoZWNrX2xpc3QuaCBcCi0JY2hlY2tfbG9nLmggY2hlY2tfbXNnLmggY2hlY2tfcGFjay5oIGNoZWNrX3ByaW50LmggY2hlY2tfc3RyLmggXAotCWxpYmNvbXBhdC5oCi1ASEFWRV9BTEFSTV9GQUxTRUBhbV9fb2JqZWN0c18xID0gbGliY2hlY2tpbnRlcm5hbF9sYS1hbGFybS5sbwotQEhBVkVfQ0xPQ0tfR0VUVElNRV9GQUxTRUBhbV9fb2JqZWN0c18yID0gbGliY2hlY2tpbnRlcm5hbF9sYS1jbG9ja19nZXR0aW1lLmxvCi1ASEFWRV9TVFJTSUdOQUxfRkFMU0VAYW1fX29iamVjdHNfMyA9ICBcCi1ASEFWRV9TVFJTSUdOQUxfRkFMU0VACWxpYmNoZWNraW50ZXJuYWxfbGEtc3Ryc2lnbmFsLmxvCi1ASEFWRV9USU1FUl9DUkVBVEVfU0VUVElNRV9ERUxFVEVfRkFMU0VAYW1fX29iamVjdHNfNCA9IGxpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfY3JlYXRlLmxvIFwKLUBIQVZFX1RJTUVSX0NSRUFURV9TRVRUSU1FX0RFTEVURV9GQUxTRUAJbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9zZXR0aW1lLmxvIFwKLUBIQVZFX1RJTUVSX0NSRUFURV9TRVRUSU1FX0RFTEVURV9GQUxTRUAJbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9kZWxldGUubG8KLWFtX19vYmplY3RzXzUgPSBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrLmxvIFwKLQlsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLmxvIFwKLQlsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xpc3QubG8gXAotCWxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbG9nLmxvIFwKLQlsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX21zZy5sbyBcCi0JbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wYWNrLmxvIFwKLQlsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3ByaW50LmxvIFwKLQlsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3J1bi5sbyBcCi0JbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19zdHIubG8gXAotCWxpYmNoZWNraW50ZXJuYWxfbGEtbGliY29tcGF0LmxvICQoYW1fX29iamVjdHNfMSkgXAotCSQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSAkKGFtX19vYmplY3RzXzQpCi1hbV9fb2JqZWN0c182ID0KLWFtX2xpYmNoZWNraW50ZXJuYWxfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfNSkgJChhbV9fb2JqZWN0c182KQotbGliY2hlY2tpbnRlcm5hbF9sYV9PQkpFQ1RTID0gJChhbV9saWJjaGVja2ludGVybmFsX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJjaGVja2ludGVybmFsX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoYW1fX2xpYmNoZWNraW50ZXJuYWxfbGFfU09VUkNFU19ESVNUKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLW5vaW5zdF9MVExJQlJBUklFUyA9IGxpYmNoZWNraW50ZXJuYWwubGEKLUVYVFJBX0RJU1QgPSBjaGVjay5oLmluCi1DRklMRVMgPSBjaGVjay5jIGNoZWNrX2Vycm9yLmMgY2hlY2tfbGlzdC5jIGNoZWNrX2xvZy5jIGNoZWNrX21zZy5jIFwKLQljaGVja19wYWNrLmMgY2hlY2tfcHJpbnQuYyBjaGVja19ydW4uYyBjaGVja19zdHIuYyBsaWJjb21wYXQuYyBcCi0JJChhbV9fYXBwZW5kXzEpICQoYW1fX2FwcGVuZF8yKSAkKGFtX19hcHBlbmRfMykgXAotCSQoYW1fX2FwcGVuZF80KQotSEZJTEVTID0gXAotCWNoZWNrX2Vycm9yLmgJXAotCWNoZWNrX2ltcGwuaAlcCi0JY2hlY2tfbGlzdC5oCVwKLQljaGVja19sb2cuaAlcCi0JY2hlY2tfbXNnLmgJXAotCWNoZWNrX3BhY2suaAlcCi0JY2hlY2tfcHJpbnQuaAlcCi0JY2hlY2tfc3RyLmgJXAotCWxpYmNvbXBhdC5oCi0KLW5vaW5zdF9IRUFERVJTID0gJChIRklMRVMpCi1saWJjaGVja2ludGVybmFsX2xhX1NPVVJDRVMgPSAkKENGSUxFUykgJChIRklMRVMpCi1saWJjaGVja2ludGVybmFsX2xhX0NGTEFHUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrIFwKLQkkKGFtX19hcHBlbmRfNSkgJChhbV9fYXBwZW5kXzcpCi1saWJjaGVja2ludGVybmFsX2xhX0xJQkFERCA9ICQoYW1fX2FwcGVuZF82KQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvY2hlY2svbGliY2hlY2svTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLW5vaW5zdExUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKG5vaW5zdF9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xUTElCUkFSSUVTKQotCUBsaXN0PSckKG5vaW5zdF9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmNoZWNraW50ZXJuYWwubGE6ICQobGliY2hlY2tpbnRlcm5hbF9sYV9PQkpFQ1RTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmNoZWNraW50ZXJuYWxfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmNoZWNraW50ZXJuYWxfbGFfTElOSykgICQobGliY2hlY2tpbnRlcm5hbF9sYV9PQkpFQ1RTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWFsYXJtLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVjay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfZXJyb3IuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xpc3QuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xvZy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbXNnLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wYWNrLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wcmludC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcnVuLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19zdHIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNsb2NrX2dldHRpbWUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWxpYmNvbXBhdC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtc3Ryc2lnbmFsLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9jcmVhdGUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLXRpbWVyX2RlbGV0ZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfc2V0dGltZS5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVjay5sbzogY2hlY2suYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2suVHBvIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2subG8gYHRlc3QgLWYgJ2NoZWNrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2suVHBvICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NoZWNrLmMnIG9iamVjdD0nbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVjay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVjay5sbyBgdGVzdCAtZiAnY2hlY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2suYwotCi1saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLmxvOiBjaGVja19lcnJvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19lcnJvci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19lcnJvci5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19lcnJvci5sbyBgdGVzdCAtZiAnY2hlY2tfZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfZXJyb3IuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19lcnJvci5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfZXJyb3IuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2hlY2tfZXJyb3IuYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2Vycm9yLmxvIGB0ZXN0IC1mICdjaGVja19lcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19lcnJvci5jCi0KLWxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbGlzdC5sbzogY2hlY2tfbGlzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19saXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xpc3QuVHBvIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbGlzdC5sbyBgdGVzdCAtZiAnY2hlY2tfbGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19saXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbGlzdC5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbGlzdC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjaGVja19saXN0LmMnIG9iamVjdD0nbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19saXN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xpc3QubG8gYHRlc3QgLWYgJ2NoZWNrX2xpc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfbGlzdC5jCi0KLWxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbG9nLmxvOiBjaGVja19sb2cuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbG9nLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xvZy5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19sb2cubG8gYHRlc3QgLWYgJ2NoZWNrX2xvZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19sb2cuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19sb2cuVHBvICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xvZy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjaGVja19sb2cuYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX2xvZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19sb2cubG8gYHRlc3QgLWYgJ2NoZWNrX2xvZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19sb2cuYwotCi1saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX21zZy5sbzogY2hlY2tfbXNnLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX21zZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19tc2cuVHBvIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbXNnLmxvIGB0ZXN0IC1mICdjaGVja19tc2cuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfbXNnLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbXNnLlRwbyAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19tc2cuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2hlY2tfbXNnLmMnIG9iamVjdD0nbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19tc2cubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfbXNnLmxvIGB0ZXN0IC1mICdjaGVja19tc2cuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfbXNnLmMKLQotbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wYWNrLmxvOiBjaGVja19wYWNrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3BhY2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcGFjay5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wYWNrLmxvIGB0ZXN0IC1mICdjaGVja19wYWNrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX3BhY2suYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wYWNrLlRwbyAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wYWNrLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NoZWNrX3BhY2suYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3BhY2subG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcGFjay5sbyBgdGVzdCAtZiAnY2hlY2tfcGFjay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjaGVja19wYWNrLmMKLQotbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wcmludC5sbzogY2hlY2tfcHJpbnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcHJpbnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcHJpbnQuVHBvIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcHJpbnQubG8gYHRlc3QgLWYgJ2NoZWNrX3ByaW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX3ByaW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcHJpbnQuVHBvICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3ByaW50LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NoZWNrX3ByaW50LmMnIG9iamVjdD0nbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wcmludC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19wcmludC5sbyBgdGVzdCAtZiAnY2hlY2tfcHJpbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfcHJpbnQuYwotCi1saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3J1bi5sbzogY2hlY2tfcnVuLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3J1bi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19ydW4uVHBvIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcnVuLmxvIGB0ZXN0IC1mICdjaGVja19ydW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfcnVuLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcnVuLlRwbyAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19ydW4uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2hlY2tfcnVuLmMnIG9iamVjdD0nbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19ydW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfcnVuLmxvIGB0ZXN0IC1mICdjaGVja19ydW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2tfcnVuLmMKLQotbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19zdHIubG86IGNoZWNrX3N0ci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS1jaGVja19zdHIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfc3RyLlRwbyAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3N0ci5sbyBgdGVzdCAtZiAnY2hlY2tfc3RyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX3N0ci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3N0ci5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfc3RyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NoZWNrX3N0ci5jJyBvYmplY3Q9J2xpYmNoZWNraW50ZXJuYWxfbGEtY2hlY2tfc3RyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNoZWNrX3N0ci5sbyBgdGVzdCAtZiAnY2hlY2tfc3RyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrX3N0ci5jCi0KLWxpYmNoZWNraW50ZXJuYWxfbGEtbGliY29tcGF0LmxvOiBsaWJjb21wYXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNoZWNraW50ZXJuYWxfbGEtbGliY29tcGF0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWxpYmNvbXBhdC5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1saWJjb21wYXQubG8gYHRlc3QgLWYgJ2xpYmNvbXBhdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJjb21wYXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1saWJjb21wYXQuVHBvICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWxpYmNvbXBhdC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdsaWJjb21wYXQuYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWxpYmNvbXBhdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1saWJjb21wYXQubG8gYHRlc3QgLWYgJ2xpYmNvbXBhdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJjb21wYXQuYwotCi1saWJjaGVja2ludGVybmFsX2xhLWFsYXJtLmxvOiBhbGFybS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS1hbGFybS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1hbGFybS5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1hbGFybS5sbyBgdGVzdCAtZiAnYWxhcm0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWxhcm0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1hbGFybS5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtYWxhcm0uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWxhcm0uYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLWFsYXJtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWFsYXJtLmxvIGB0ZXN0IC1mICdhbGFybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhbGFybS5jCi0KLWxpYmNoZWNraW50ZXJuYWxfbGEtY2xvY2tfZ2V0dGltZS5sbzogY2xvY2tfZ2V0dGltZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS1jbG9ja19nZXR0aW1lLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLWNsb2NrX2dldHRpbWUuVHBvIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtY2xvY2tfZ2V0dGltZS5sbyBgdGVzdCAtZiAnY2xvY2tfZ2V0dGltZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjbG9ja19nZXR0aW1lLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2xvY2tfZ2V0dGltZS5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtY2xvY2tfZ2V0dGltZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjbG9ja19nZXR0aW1lLmMnIG9iamVjdD0nbGliY2hlY2tpbnRlcm5hbF9sYS1jbG9ja19nZXR0aW1lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLWNsb2NrX2dldHRpbWUubG8gYHRlc3QgLWYgJ2Nsb2NrX2dldHRpbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2xvY2tfZ2V0dGltZS5jCi0KLWxpYmNoZWNraW50ZXJuYWxfbGEtc3Ryc2lnbmFsLmxvOiBzdHJzaWduYWwuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmNoZWNraW50ZXJuYWxfbGEtc3Ryc2lnbmFsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLXN0cnNpZ25hbC5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1zdHJzaWduYWwubG8gYHRlc3QgLWYgJ3N0cnNpZ25hbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdHJzaWduYWwuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS1zdHJzaWduYWwuVHBvICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLXN0cnNpZ25hbC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzdHJzaWduYWwuYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLXN0cnNpZ25hbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmNoZWNraW50ZXJuYWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS1zdHJzaWduYWwubG8gYHRlc3QgLWYgJ3N0cnNpZ25hbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdHJzaWduYWwuYwotCi1saWJjaGVja2ludGVybmFsX2xhLXRpbWVyX2NyZWF0ZS5sbzogdGltZXJfY3JlYXRlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjaGVja2ludGVybmFsX2xhLXRpbWVyX2NyZWF0ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9jcmVhdGUuVHBvIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfY3JlYXRlLmxvIGB0ZXN0IC1mICd0aW1lcl9jcmVhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGltZXJfY3JlYXRlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfY3JlYXRlLlRwbyAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9jcmVhdGUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGltZXJfY3JlYXRlLmMnIG9iamVjdD0nbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9jcmVhdGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfY3JlYXRlLmxvIGB0ZXN0IC1mICd0aW1lcl9jcmVhdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGltZXJfY3JlYXRlLmMKLQotbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9zZXR0aW1lLmxvOiB0aW1lcl9zZXR0aW1lLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJjaGVja2ludGVybmFsX2xhLXRpbWVyX3NldHRpbWUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfc2V0dGltZS5UcG8gLWMgLW8gbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9zZXR0aW1lLmxvIGB0ZXN0IC1mICd0aW1lcl9zZXR0aW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRpbWVyX3NldHRpbWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9zZXR0aW1lLlRwbyAkKERFUERJUikvbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9zZXR0aW1lLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWVyX3NldHRpbWUuYycgb2JqZWN0PSdsaWJjaGVja2ludGVybmFsX2xhLXRpbWVyX3NldHRpbWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJjaGVja2ludGVybmFsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfc2V0dGltZS5sbyBgdGVzdCAtZiAndGltZXJfc2V0dGltZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1lcl9zZXR0aW1lLmMKLQotbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9kZWxldGUubG86IHRpbWVyX2RlbGV0ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliY2hlY2tpbnRlcm5hbF9sYS10aW1lcl9kZWxldGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfZGVsZXRlLlRwbyAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLXRpbWVyX2RlbGV0ZS5sbyBgdGVzdCAtZiAndGltZXJfZGVsZXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRpbWVyX2RlbGV0ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJjaGVja2ludGVybmFsX2xhLXRpbWVyX2RlbGV0ZS5UcG8gJChERVBESVIpL2xpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfZGVsZXRlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWVyX2RlbGV0ZS5jJyBvYmplY3Q9J2xpYmNoZWNraW50ZXJuYWxfbGEtdGltZXJfZGVsZXRlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliY2hlY2tpbnRlcm5hbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJjaGVja2ludGVybmFsX2xhLXRpbWVyX2RlbGV0ZS5sbyBgdGVzdCAtZiAndGltZXJfZGVsZXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRpbWVyX2RlbGV0ZS5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svYWxhcm0uYyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2FsYXJtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODcwMTkuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svYWxhcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI2luY2x1ZGUgImxpYmNvbXBhdC5oIgotCi11bnNpZ25lZCBpbnQKLWFsYXJtICh1bnNpZ25lZCBpbnQgc2Vjb25kcyBDS19BVFRSSUJVVEVfVU5VU0VEKQotewotICBhc3NlcnQgKDApOwotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTUwZDdkLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTggKzAsMCBAQAotLyoKLSAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBcmllbiBNYWxlYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImxpYmNvbXBhdC5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJpbnRlcm5hbC1jaGVjay5oIgotI2luY2x1ZGUgImNoZWNrX2Vycm9yLmgiCi0jaW5jbHVkZSAiY2hlY2tfbGlzdC5oIgotI2luY2x1ZGUgImNoZWNrX2ltcGwuaCIKLSNpbmNsdWRlICJjaGVja19tc2cuaCIKLQotI2lmZGVmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgICAgLyogZm9yIF9QT1NJWF9WRVJTSU9OICovCi0jZW5kaWYKLQotI2lmbmRlZiBERUZBVUxUX1RJTUVPVVQKLSNkZWZpbmUgREVGQVVMVF9USU1FT1VUIDQKLSNlbmRpZgotCi0vKgotICogV2hlbiBhIHByb2Nlc3MgZXhpdHMgZWl0aGVyIG5vcm1hbGx5LCB3aXRoIGV4aXQoKSwgb3IKLSAqIGJ5IGFuIHVuY2F1Z2h0IHNpZ25hbCwgVGhlIGxvd2VyIDB4Mzc3IGJpdHMgYXJlIHBhc3NlZAotICogdG8gdGhlIHBhcmVudC4gT2YgdGhvc2UsIG9ubHkgdGhlIGxvd2VyIDggYml0cyBhcmUKLSAqIHJldHVybmVkIGJ5IHRoZSBXRVhJVFNUQVRVUygpIG1hY3JvLgotICovCi0jZGVmaW5lIFdFWElUU1RBVFVTX01BU0sgMHhGRgotCi1pbnQgY2hlY2tfbWFqb3JfdmVyc2lvbiA9IENIRUNLX01BSk9SX1ZFUlNJT047Ci1pbnQgY2hlY2tfbWlub3JfdmVyc2lvbiA9IENIRUNLX01JTk9SX1ZFUlNJT047Ci1pbnQgY2hlY2tfbWljcm9fdmVyc2lvbiA9IENIRUNLX01JQ1JPX1ZFUlNJT047Ci0KLXN0YXRpYyBpbnQgbm9uX3Bhc3MgKGludCB2YWwpOwotc3RhdGljIEZpeHR1cmUgKmZpeHR1cmVfY3JlYXRlIChTRnVuIGZ1biwgaW50IGlzY2hlY2tlZCk7Ci1zdGF0aWMgdm9pZCB0Y2FzZV9hZGRfZml4dHVyZSAoVENhc2UgKiB0YywgU0Z1biBzZXR1cCwgU0Z1biB0ZWFyZG93biwKLSAgICBpbnQgaXNjaGVja2VkKTsKLXN0YXRpYyB2b2lkIHRyX2luaXQgKFRlc3RSZXN1bHQgKiB0cik7Ci1zdGF0aWMgdm9pZCBzdWl0ZV9mcmVlIChTdWl0ZSAqIHMpOwotc3RhdGljIHZvaWQgdGNhc2VfZnJlZSAoVENhc2UgKiB0Yyk7Ci0KLVN1aXRlICoKLXN1aXRlX2NyZWF0ZSAoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgU3VpdGUgKnM7Ci0KLSAgcyA9IChTdWl0ZSAqKSBlbWFsbG9jIChzaXplb2YgKFN1aXRlKSk7ICAgICAgIC8qIGZyZWVkIGluIHN1aXRlX2ZyZWUgKi8KLSAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICBzLT5uYW1lID0gIiI7Ci0gIGVsc2UKLSAgICBzLT5uYW1lID0gbmFtZTsKLSAgcy0+dGNsc3QgPSBjaGVja19saXN0X2NyZWF0ZSAoKTsKLSAgcmV0dXJuIHM7Ci19Ci0KLWludAotc3VpdGVfdGNhc2UgKFN1aXRlICogcywgY29uc3QgY2hhciAqdGNuYW1lKQotewotICBMaXN0ICpsOwotICBUQ2FzZSAqdGM7Ci0KLSAgaWYgKHMgPT0gTlVMTCkKLSAgICByZXR1cm4gMDsKLQotICBsID0gcy0+dGNsc3Q7Ci0gIGZvciAoY2hlY2tfbGlzdF9mcm9udCAobCk7ICFjaGVja19saXN0X2F0X2VuZCAobCk7IGNoZWNrX2xpc3RfYWR2YW5jZSAobCkpIHsKLSAgICB0YyA9IChUQ2FzZSAqKSBjaGVja19saXN0X3ZhbCAobCk7Ci0gICAgaWYgKHN0cmNtcCAodGNuYW1lLCB0Yy0+bmFtZSkgPT0gMCkKLSAgICAgIHJldHVybiAxOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdWl0ZV9mcmVlIChTdWl0ZSAqIHMpCi17Ci0gIExpc3QgKmw7Ci0KLSAgaWYgKHMgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0gIGwgPSBzLT50Y2xzdDsKLSAgZm9yIChjaGVja19saXN0X2Zyb250IChsKTsgIWNoZWNrX2xpc3RfYXRfZW5kIChsKTsgY2hlY2tfbGlzdF9hZHZhbmNlIChsKSkgewotICAgIHRjYXNlX2ZyZWUgKChUQ2FzZSAqKSBjaGVja19saXN0X3ZhbCAobCkpOwotICB9Ci0gIGNoZWNrX2xpc3RfZnJlZSAocy0+dGNsc3QpOwotICBmcmVlIChzKTsKLX0KLQotVENhc2UgKgotdGNhc2VfY3JlYXRlIChjb25zdCBjaGFyICpuYW1lKQotewotICBjaGFyICplbnY7Ci0gIGRvdWJsZSB0aW1lb3V0X3NlYyA9IERFRkFVTFRfVElNRU9VVDsKLQotICBUQ2FzZSAqdGMgPSAoVENhc2UgKikgZW1hbGxvYyAoc2l6ZW9mIChUQ2FzZSkpOyAgICAgICAvKmZyZWVkIGluIHRjYXNlX2ZyZWUgKi8KLQotICBpZiAobmFtZSA9PSBOVUxMKQotICAgIHRjLT5uYW1lID0gIiI7Ci0gIGVsc2UKLSAgICB0Yy0+bmFtZSA9IG5hbWU7Ci0KLSAgZW52ID0gZ2V0ZW52ICgiQ0tfREVGQVVMVF9USU1FT1VUIik7Ci0gIGlmIChlbnYgIT0gTlVMTCkgewotICAgIGNoYXIgKmVuZHB0ciA9IE5VTEw7Ci0gICAgZG91YmxlIHRtcCA9IHN0cnRvZCAoZW52LCAmZW5kcHRyKTsKLQotICAgIGlmICh0bXAgPj0gMCAmJiBlbmRwdHIgIT0gZW52ICYmICgqZW5kcHRyKSA9PSAnXDAnKSB7Ci0gICAgICB0aW1lb3V0X3NlYyA9IHRtcDsKLSAgICB9Ci0gIH0KLQotICBlbnYgPSBnZXRlbnYgKCJDS19USU1FT1VUX01VTFRJUExJRVIiKTsKLSAgaWYgKGVudiAhPSBOVUxMKSB7Ci0gICAgY2hhciAqZW5kcHRyID0gTlVMTDsKLSAgICBkb3VibGUgdG1wID0gc3RydG9kIChlbnYsICZlbmRwdHIpOwotCi0gICAgaWYgKHRtcCA+PSAwICYmIGVuZHB0ciAhPSBlbnYgJiYgKCplbmRwdHIpID09ICdcMCcpIHsKLSAgICAgIHRpbWVvdXRfc2VjID0gdGltZW91dF9zZWMgKiB0bXA7Ci0gICAgfQotICB9Ci0KLSAgdGMtPnRpbWVvdXQudHZfc2VjID0gKHRpbWVfdCkgZmxvb3IgKHRpbWVvdXRfc2VjKTsKLSAgdGMtPnRpbWVvdXQudHZfbnNlYyA9Ci0gICAgICAobG9uZykgKCh0aW1lb3V0X3NlYyAtIGZsb29yICh0aW1lb3V0X3NlYykpICogKGRvdWJsZSkgTkFOT1NfUEVSX1NFQ09ORFMpOwotCi0gIHRjLT50ZmxzdCA9IGNoZWNrX2xpc3RfY3JlYXRlICgpOwotICB0Yy0+dW5jaF9zZmxzdCA9IGNoZWNrX2xpc3RfY3JlYXRlICgpOwotICB0Yy0+Y2hfc2Zsc3QgPSBjaGVja19saXN0X2NyZWF0ZSAoKTsKLSAgdGMtPnVuY2hfdGZsc3QgPSBjaGVja19saXN0X2NyZWF0ZSAoKTsKLSAgdGMtPmNoX3RmbHN0ID0gY2hlY2tfbGlzdF9jcmVhdGUgKCk7Ci0KLSAgcmV0dXJuIHRjOwotfQotCi0KLXN0YXRpYyB2b2lkCi10Y2FzZV9mcmVlIChUQ2FzZSAqIHRjKQotewotICBjaGVja19saXN0X2FwcGx5ICh0Yy0+dGZsc3QsIGZyZWUpOwotICBjaGVja19saXN0X2FwcGx5ICh0Yy0+dW5jaF9zZmxzdCwgZnJlZSk7Ci0gIGNoZWNrX2xpc3RfYXBwbHkgKHRjLT5jaF9zZmxzdCwgZnJlZSk7Ci0gIGNoZWNrX2xpc3RfYXBwbHkgKHRjLT51bmNoX3RmbHN0LCBmcmVlKTsKLSAgY2hlY2tfbGlzdF9hcHBseSAodGMtPmNoX3RmbHN0LCBmcmVlKTsKLSAgY2hlY2tfbGlzdF9mcmVlICh0Yy0+dGZsc3QpOwotICBjaGVja19saXN0X2ZyZWUgKHRjLT51bmNoX3NmbHN0KTsKLSAgY2hlY2tfbGlzdF9mcmVlICh0Yy0+Y2hfc2Zsc3QpOwotICBjaGVja19saXN0X2ZyZWUgKHRjLT51bmNoX3RmbHN0KTsKLSAgY2hlY2tfbGlzdF9mcmVlICh0Yy0+Y2hfdGZsc3QpOwotCi0gIGZyZWUgKHRjKTsKLX0KLQotdm9pZAotc3VpdGVfYWRkX3RjYXNlIChTdWl0ZSAqIHMsIFRDYXNlICogdGMpCi17Ci0gIGlmIChzID09IE5VTEwgfHwgdGMgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0gIGNoZWNrX2xpc3RfYWRkX2VuZCAocy0+dGNsc3QsIHRjKTsKLX0KLQotdm9pZAotX3RjYXNlX2FkZF90ZXN0IChUQ2FzZSAqIHRjLCBURnVuIGZuLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgX3NpZ25hbCwKLSAgICBpbnQgYWxsb3dlZF9leGl0X3ZhbHVlLCBpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0gIFRGICp0ZjsKLQotICBpZiAodGMgPT0gTlVMTCB8fCBmbiA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0gIHRmID0gKFRGICopIGVtYWxsb2MgKHNpemVvZiAoVEYpKTsgICAgLyogZnJlZWQgaW4gdGNhc2VfZnJlZSAqLwotICB0Zi0+Zm4gPSBmbjsKLSAgdGYtPmxvb3Bfc3RhcnQgPSBzdGFydDsKLSAgdGYtPmxvb3BfZW5kID0gZW5kOwotICB0Zi0+c2lnbmFsID0gX3NpZ25hbDsgICAgICAgICAvKiAwIG1lYW5zIG5vIHNpZ25hbCBleHBlY3RlZCAqLwotICB0Zi0+YWxsb3dlZF9leGl0X3ZhbHVlID0gKFdFWElUU1RBVFVTX01BU0sgJiBhbGxvd2VkX2V4aXRfdmFsdWUpOyAgICAgLyogMCBpcyBkZWZhdWx0IHN1Y2Nlc3NmdWwgZXhpdCAqLwotICB0Zi0+bmFtZSA9IG5hbWU7Ci0gIGNoZWNrX2xpc3RfYWRkX2VuZCAodGMtPnRmbHN0LCB0Zik7Ci19Ci0KLXN0YXRpYyBGaXh0dXJlICoKLWZpeHR1cmVfY3JlYXRlIChTRnVuIGZ1biwgaW50IGlzY2hlY2tlZCkKLXsKLSAgRml4dHVyZSAqZjsKLQotICBmID0gKEZpeHR1cmUgKikgZW1hbGxvYyAoc2l6ZW9mIChGaXh0dXJlKSk7Ci0gIGYtPmZ1biA9IGZ1bjsKLSAgZi0+aXNjaGVja2VkID0gaXNjaGVja2VkOwotCi0gIHJldHVybiBmOwotfQotCi12b2lkCi10Y2FzZV9hZGRfdW5jaGVja2VkX2ZpeHR1cmUgKFRDYXNlICogdGMsIFNGdW4gc2V0dXAsIFNGdW4gdGVhcmRvd24pCi17Ci0gIHRjYXNlX2FkZF9maXh0dXJlICh0Yywgc2V0dXAsIHRlYXJkb3duLCAwKTsKLX0KLQotdm9pZAotdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAoVENhc2UgKiB0YywgU0Z1biBzZXR1cCwgU0Z1biB0ZWFyZG93bikKLXsKLSAgdGNhc2VfYWRkX2ZpeHR1cmUgKHRjLCBzZXR1cCwgdGVhcmRvd24sIDEpOwotfQotCi1zdGF0aWMgdm9pZAotdGNhc2VfYWRkX2ZpeHR1cmUgKFRDYXNlICogdGMsIFNGdW4gc2V0dXAsIFNGdW4gdGVhcmRvd24sIGludCBpc2NoZWNrZWQpCi17Ci0gIGlmIChzZXR1cCkgewotICAgIGlmIChpc2NoZWNrZWQpCi0gICAgICBjaGVja19saXN0X2FkZF9lbmQgKHRjLT5jaF9zZmxzdCwgZml4dHVyZV9jcmVhdGUgKHNldHVwLCBpc2NoZWNrZWQpKTsKLSAgICBlbHNlCi0gICAgICBjaGVja19saXN0X2FkZF9lbmQgKHRjLT51bmNoX3NmbHN0LCBmaXh0dXJlX2NyZWF0ZSAoc2V0dXAsIGlzY2hlY2tlZCkpOwotICB9Ci0KLSAgLyogQWRkIHRlYXJkb3ducyBhdCBmcm9udCBzbyB0aGV5IGFyZSBydW4gaW4gcmV2ZXJzZSBvcmRlci4gKi8KLSAgaWYgKHRlYXJkb3duKSB7Ci0gICAgaWYgKGlzY2hlY2tlZCkKLSAgICAgIGNoZWNrX2xpc3RfYWRkX2Zyb250ICh0Yy0+Y2hfdGZsc3QsIGZpeHR1cmVfY3JlYXRlICh0ZWFyZG93biwgaXNjaGVja2VkKSk7Ci0gICAgZWxzZQotICAgICAgY2hlY2tfbGlzdF9hZGRfZnJvbnQgKHRjLT51bmNoX3RmbHN0LAotICAgICAgICAgIGZpeHR1cmVfY3JlYXRlICh0ZWFyZG93biwgaXNjaGVja2VkKSk7Ci0gIH0KLX0KLQotdm9pZAotdGNhc2Vfc2V0X3RpbWVvdXQgKFRDYXNlICogdGMsIGRvdWJsZSB0aW1lb3V0KQotewotI2lmIGRlZmluZWQoSEFWRV9GT1JLKQotICBpZiAodGltZW91dCA+PSAwKSB7Ci0gICAgY2hhciAqZW52ID0gZ2V0ZW52ICgiQ0tfVElNRU9VVF9NVUxUSVBMSUVSIik7Ci0KLSAgICBpZiAoZW52ICE9IE5VTEwpIHsKLSAgICAgIGNoYXIgKmVuZHB0ciA9IE5VTEw7Ci0gICAgICBkb3VibGUgdG1wID0gc3RydG9kIChlbnYsICZlbmRwdHIpOwotCi0gICAgICBpZiAodG1wID49IDAgJiYgZW5kcHRyICE9IGVudiAmJiAoKmVuZHB0cikgPT0gJ1wwJykgewotICAgICAgICB0aW1lb3V0ID0gdGltZW91dCAqIHRtcDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB0Yy0+dGltZW91dC50dl9zZWMgPSAodGltZV90KSBmbG9vciAodGltZW91dCk7Ci0gICAgdGMtPnRpbWVvdXQudHZfbnNlYyA9Ci0gICAgICAgIChsb25nKSAoKHRpbWVvdXQgLSBmbG9vciAodGltZW91dCkpICogKGRvdWJsZSkgTkFOT1NfUEVSX1NFQ09ORFMpOwotICB9Ci0jZWxzZQotICAodm9pZCkgdGM7Ci0gICh2b2lkKSB0aW1lb3V0OwotICBlcHJpbnRmCi0gICAgICAoIlRoaXMgdmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRpbWVvdXRzLCBhcyBmb3JrIGlzIG5vdCBzdXBwb3J0ZWQiLAotICAgICAgX19GSUxFX18sIF9fTElORV9fKTsKLSNlbmRpZiAvKiBIQVZFX0ZPUksgKi8KLX0KLQotdm9pZAotdGNhc2VfZm5fc3RhcnQgKGNvbnN0IGNoYXIgKmZuYW1lIENLX0FUVFJJQlVURV9VTlVTRUQsIGNvbnN0IGNoYXIgKmZpbGUsCi0gICAgaW50IGxpbmUpCi17Ci0gIHNlbmRfY3R4X2luZm8gKENLX0NUWF9URVNUKTsKLSAgc2VuZF9sb2NfaW5mbyAoZmlsZSwgbGluZSk7Ci19Ci0KLXZvaWQKLV9tYXJrX3BvaW50IChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKLXsKLSAgc2VuZF9sb2NfaW5mbyAoZmlsZSwgbGluZSk7Ci19Ci0KLXZvaWQKLV9ja19hc3NlcnRfZmFpbGVkIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZXhwciwgLi4uKQotewotICBjb25zdCBjaGFyICptc2c7Ci0gIHZhX2xpc3QgYXA7Ci0gIGNoYXIgYnVmW0JVRlNJWl07Ci0KLSAgc2VuZF9sb2NfaW5mbyAoZmlsZSwgbGluZSk7Ci0KLSAgdmFfc3RhcnQgKGFwLCBleHByKTsKLSAgbXNnID0gKGNvbnN0IGNoYXIgKikgdmFfYXJnIChhcCwgY2hhciAqKTsKLQotICBpZiAobXNnID09IE5VTEwpCi0gICAgbXNnID0gZXhwcjsKLSAgdnNucHJpbnRmIChidWYsIEJVRlNJWiwgbXNnLCBhcCk7Ci0gIHZhX2VuZCAoYXApOwotICBzZW5kX2ZhaWx1cmVfaW5mbyAoYnVmKTsKLSAgaWYgKGN1cl9mb3JrX3N0YXR1cyAoKSA9PSBDS19GT1JLKSB7Ci0jaWYgZGVmaW5lZChIQVZFX0ZPUkspICYmIEhBVkVfRk9SSz09MQotICAgIF9leGl0ICgxKTsKLSNlbmRpZiAvKiBIQVZFX0ZPUksgKi8KLSAgfSBlbHNlIHsKLSAgICBsb25nam1wIChlcnJvcl9qbXBfYnVmZmVyLCAxKTsKLSAgfQotfQotCi1TUnVubmVyICoKLXNydW5uZXJfY3JlYXRlIChTdWl0ZSAqIHMpCi17Ci0gIFNSdW5uZXIgKnNyID0gKFNSdW5uZXIgKikgZW1hbGxvYyAoc2l6ZW9mIChTUnVubmVyKSk7IC8qIGZyZWVkIGluIHNydW5uZXJfZnJlZSAqLwotCi0gIHNyLT5zbHN0ID0gY2hlY2tfbGlzdF9jcmVhdGUgKCk7Ci0gIGlmIChzICE9IE5VTEwpCi0gICAgY2hlY2tfbGlzdF9hZGRfZW5kIChzci0+c2xzdCwgcyk7Ci0gIHNyLT5zdGF0cyA9IChUZXN0U3RhdHMgKikgZW1hbGxvYyAoc2l6ZW9mIChUZXN0U3RhdHMpKTsgICAgICAgLyogZnJlZWQgaW4gc3J1bm5lcl9mcmVlICovCi0gIHNyLT5zdGF0cy0+bl9jaGVja2VkID0gc3ItPnN0YXRzLT5uX2ZhaWxlZCA9IHNyLT5zdGF0cy0+bl9lcnJvcnMgPSAwOwotICBzci0+cmVzdWx0bHN0ID0gY2hlY2tfbGlzdF9jcmVhdGUgKCk7Ci0gIHNyLT5sb2dfZm5hbWUgPSBOVUxMOwotICBzci0+eG1sX2ZuYW1lID0gTlVMTDsKLSAgc3ItPnRhcF9mbmFtZSA9IE5VTEw7Ci0gIHNyLT5sb2dsc3QgPSBOVUxMOwotCi0jaWYgZGVmaW5lZChIQVZFX0ZPUkspCi0gIHNyLT5mc3RhdCA9IENLX0ZPUktfR0VURU5WOwotI2Vsc2UKLSAgLyoKLSAgICogT3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBvZiBydW5uaW5nIHRlc3RzIGluIGZvcmsgbW9kZSwKLSAgICogYXMgdGhpcyBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBmb3JrKCkKLSAgICovCi0gIHNyLT5mc3RhdCA9IENLX05PRk9SSzsKLSNlbmRpZiAvKiBIQVZFX0ZPUksgKi8KLQotICByZXR1cm4gc3I7Ci19Ci0KLXZvaWQKLXNydW5uZXJfYWRkX3N1aXRlIChTUnVubmVyICogc3IsIFN1aXRlICogcykKLXsKLSAgaWYgKHMgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgY2hlY2tfbGlzdF9hZGRfZW5kIChzci0+c2xzdCwgcyk7Ci19Ci0KLXZvaWQKLXNydW5uZXJfZnJlZSAoU1J1bm5lciAqIHNyKQotewotICBMaXN0ICpsOwotICBUZXN0UmVzdWx0ICp0cjsKLQotICBpZiAoc3IgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgZnJlZSAoc3ItPnN0YXRzKTsKLSAgbCA9IHNyLT5zbHN0OwotICBmb3IgKGNoZWNrX2xpc3RfZnJvbnQgKGwpOyAhY2hlY2tfbGlzdF9hdF9lbmQgKGwpOyBjaGVja19saXN0X2FkdmFuY2UgKGwpKSB7Ci0gICAgc3VpdGVfZnJlZSAoKFN1aXRlICopIGNoZWNrX2xpc3RfdmFsIChsKSk7Ci0gIH0KLSAgY2hlY2tfbGlzdF9mcmVlIChzci0+c2xzdCk7Ci0KLSAgbCA9IHNyLT5yZXN1bHRsc3Q7Ci0gIGZvciAoY2hlY2tfbGlzdF9mcm9udCAobCk7ICFjaGVja19saXN0X2F0X2VuZCAobCk7IGNoZWNrX2xpc3RfYWR2YW5jZSAobCkpIHsKLSAgICB0ciA9IChUZXN0UmVzdWx0ICopIGNoZWNrX2xpc3RfdmFsIChsKTsKLSAgICB0cl9mcmVlICh0cik7Ci0gIH0KLSAgY2hlY2tfbGlzdF9mcmVlIChzci0+cmVzdWx0bHN0KTsKLQotICBmcmVlIChzcik7Ci19Ci0KLWludAotc3J1bm5lcl9udGVzdHNfZmFpbGVkIChTUnVubmVyICogc3IpCi17Ci0gIHJldHVybiBzci0+c3RhdHMtPm5fZmFpbGVkICsgc3ItPnN0YXRzLT5uX2Vycm9yczsKLX0KLQotaW50Ci1zcnVubmVyX250ZXN0c19ydW4gKFNSdW5uZXIgKiBzcikKLXsKLSAgcmV0dXJuIHNyLT5zdGF0cy0+bl9jaGVja2VkOwotfQotCi1UZXN0UmVzdWx0ICoqCi1zcnVubmVyX2ZhaWx1cmVzIChTUnVubmVyICogc3IpCi17Ci0gIGludCBpID0gMDsKLSAgVGVzdFJlc3VsdCAqKnRyYXJyYXk7Ci0gIExpc3QgKnJsc3Q7Ci0KLSAgdHJhcnJheSA9Ci0gICAgICAoVGVzdFJlc3VsdCAqKikgZW1hbGxvYyAoc2l6ZW9mICh0cmFycmF5WzBdKSAqCi0gICAgICBzcnVubmVyX250ZXN0c19mYWlsZWQgKHNyKSk7Ci0KLSAgcmxzdCA9IHNyLT5yZXN1bHRsc3Q7Ci0gIGZvciAoY2hlY2tfbGlzdF9mcm9udCAocmxzdCk7ICFjaGVja19saXN0X2F0X2VuZCAocmxzdCk7Ci0gICAgICBjaGVja19saXN0X2FkdmFuY2UgKHJsc3QpKSB7Ci0gICAgVGVzdFJlc3VsdCAqdHIgPSAoVGVzdFJlc3VsdCAqKSBjaGVja19saXN0X3ZhbCAocmxzdCk7Ci0KLSAgICBpZiAobm9uX3Bhc3MgKHRyLT5ydHlwZSkpCi0gICAgICB0cmFycmF5W2krK10gPSB0cjsKLQotICB9Ci0gIHJldHVybiB0cmFycmF5OwotfQotCi1UZXN0UmVzdWx0ICoqCi1zcnVubmVyX3Jlc3VsdHMgKFNSdW5uZXIgKiBzcikKLXsKLSAgaW50IGkgPSAwOwotICBUZXN0UmVzdWx0ICoqdHJhcnJheTsKLSAgTGlzdCAqcmxzdDsKLQotICB0cmFycmF5ID0KLSAgICAgIChUZXN0UmVzdWx0ICoqKSBlbWFsbG9jIChzaXplb2YgKHRyYXJyYXlbMF0pICogc3J1bm5lcl9udGVzdHNfcnVuIChzcikpOwotCi0gIHJsc3QgPSBzci0+cmVzdWx0bHN0OwotICBmb3IgKGNoZWNrX2xpc3RfZnJvbnQgKHJsc3QpOyAhY2hlY2tfbGlzdF9hdF9lbmQgKHJsc3QpOwotICAgICAgY2hlY2tfbGlzdF9hZHZhbmNlIChybHN0KSkgewotICAgIHRyYXJyYXlbaSsrXSA9IChUZXN0UmVzdWx0ICopIGNoZWNrX2xpc3RfdmFsIChybHN0KTsKLSAgfQotICByZXR1cm4gdHJhcnJheTsKLX0KLQotc3RhdGljIGludAotbm9uX3Bhc3MgKGludCB2YWwpCi17Ci0gIHJldHVybiB2YWwgIT0gQ0tfUEFTUzsKLX0KLQotVGVzdFJlc3VsdCAqCi10cl9jcmVhdGUgKHZvaWQpCi17Ci0gIFRlc3RSZXN1bHQgKnRyOwotCi0gIHRyID0gKFRlc3RSZXN1bHQgKikgZW1hbGxvYyAoc2l6ZW9mIChUZXN0UmVzdWx0KSk7Ci0gIHRyX2luaXQgKHRyKTsKLSAgcmV0dXJuIHRyOwotfQotCi1zdGF0aWMgdm9pZAotdHJfaW5pdCAoVGVzdFJlc3VsdCAqIHRyKQotewotICB0ci0+Y3R4ID0gQ0tfQ1RYX0lOVkFMSUQ7Ci0gIHRyLT5saW5lID0gLTE7Ci0gIHRyLT5ydHlwZSA9IENLX1RFU1RfUkVTVUxUX0lOVkFMSUQ7Ci0gIHRyLT5tc2cgPSBOVUxMOwotICB0ci0+ZmlsZSA9IE5VTEw7Ci0gIHRyLT50Y25hbWUgPSBOVUxMOwotICB0ci0+dG5hbWUgPSBOVUxMOwotICB0ci0+ZHVyYXRpb24gPSAtMTsKLX0KLQotdm9pZAotdHJfZnJlZSAoVGVzdFJlc3VsdCAqIHRyKQotewotICBmcmVlICh0ci0+ZmlsZSk7Ci0gIGZyZWUgKHRyLT5tc2cpOwotICBmcmVlICh0cik7Ci19Ci0KLQotY29uc3QgY2hhciAqCi10cl9tc2cgKFRlc3RSZXN1bHQgKiB0cikKLXsKLSAgcmV0dXJuIHRyLT5tc2c7Ci19Ci0KLWludAotdHJfbG5vIChUZXN0UmVzdWx0ICogdHIpCi17Ci0gIHJldHVybiB0ci0+bGluZTsKLX0KLQotY29uc3QgY2hhciAqCi10cl9sZmlsZSAoVGVzdFJlc3VsdCAqIHRyKQotewotICByZXR1cm4gdHItPmZpbGU7Ci19Ci0KLWludAotdHJfcnR5cGUgKFRlc3RSZXN1bHQgKiB0cikKLXsKLSAgcmV0dXJuIHRyLT5ydHlwZTsKLX0KLQotZW51bSBja19yZXN1bHRfY3R4Ci10cl9jdHggKFRlc3RSZXN1bHQgKiB0cikKLXsKLSAgcmV0dXJuIHRyLT5jdHg7Ci19Ci0KLWNvbnN0IGNoYXIgKgotdHJfdGNuYW1lIChUZXN0UmVzdWx0ICogdHIpCi17Ci0gIHJldHVybiB0ci0+dGNuYW1lOwotfQotCi1zdGF0aWMgZW51bSBmb3JrX3N0YXR1cyBfZnN0YXQgPSBDS19GT1JLOwotCi12b2lkCi1zZXRfZm9ya19zdGF0dXMgKGVudW0gZm9ya19zdGF0dXMgZnN0YXQpCi17Ci0gIGlmIChmc3RhdCA9PSBDS19GT1JLIHx8IGZzdGF0ID09IENLX05PRk9SSyB8fCBmc3RhdCA9PSBDS19GT1JLX0dFVEVOVikKLSAgICBfZnN0YXQgPSBmc3RhdDsKLSAgZWxzZQotICAgIGVwcmludGYgKCJCYWQgc3RhdHVzIGluIHNldF9mb3JrX3N0YXR1cyIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLWVudW0gZm9ya19zdGF0dXMKLWN1cl9mb3JrX3N0YXR1cyAodm9pZCkKLXsKLSAgcmV0dXJuIF9mc3RhdDsKLX0KLQotLyoqCi0gKiBOb3QgYWxsIHN5c3RlbXMgc3VwcG9ydCB0aGUgc2FtZSBjbG9ja2lkX3Qncy4gVGhpcyBjYWxsIGNoZWNrcwotICogaWYgdGhlIENMT0NLX01PTk9UT05JQyBjbG9ja2lkX3QgaXMgdmFsaWQuIElmIHNvLCB0aGF0IGlzIHJldHVybmVkLAotICogb3RoZXJ3aXNlLCBDTE9DS19SRUFMVElNRSBpcyByZXR1cm5lZC4KLSAqCi0gKiBUaGUgY2xvY2tpZF90IHRoYXQgd2FzIGZvdW5kIHRvIHdvcmsgb24gdGhlIGZpcnN0IGNhbGwgaXMKLSAqIGNhY2hlZCBmb3Igc3Vic2VxdWVudCBjYWxscy4KLSAqLwotY2xvY2tpZF90Ci1jaGVja19nZXRfY2xvY2tpZCAoKQotewotICBzdGF0aWMgY2xvY2tpZF90IGNsb2NraWQgPSAtMTsKLQotICBpZiAoY2xvY2tpZCA9PSAtMSkgewotLyoKLSAqIE9ubHkgY2hlY2sgaWYgd2UgaGF2ZSBsaWJydCBhdmFpbGFibGUuIE90aGVyd2lzZSwgdGhlIGNsb2NraWQKLSAqIHdpbGwgYmUgaWdub3JlZCBhbnl3YXksIGFzIHRoZSBjbG9ja19nZXR0aW1lKCkgYW5kCi0gKiB0aW1lcl9jcmVhdGUoKSBmdW5jdGlvbnMgd2lsbCBiZSByZS1pbXBsZW1lbnRlZCBpbiBsaWJjb21wYXQuCi0gKiBXb3JzZSwgaWYgbGlicnQgYW5kIGFsYXJtKCkgYXJlIHVuYXZhaWxhYmxlLCB0aGlzIGNoZWNrCi0gKiB3aWxsIHJlc3VsdCBpbiBhbiBhc3NlcnQoMCkuCi0gKi8KLSNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfVElNRVJTKSAmJiBkZWZpbmVkKEhBVkVfTU9OT1RPTklDX0NMT0NLKQotICAgIHRpbWVyX3QgdGltZXJpZDsKLQotICAgIGlmICh0aW1lcl9jcmVhdGUgKENMT0NLX01PTk9UT05JQywgTlVMTCwgJnRpbWVyaWQpID09IDApIHsKLSAgICAgIHRpbWVyX2RlbGV0ZSAodGltZXJpZCk7Ci0gICAgICBjbG9ja2lkID0gQ0xPQ0tfTU9OT1RPTklDOwotICAgIH0gZWxzZSB7Ci0gICAgICBjbG9ja2lkID0gQ0xPQ0tfUkVBTFRJTUU7Ci0gICAgfQotI2Vsc2UKLSAgICBjbG9ja2lkID0gQ0xPQ0tfTU9OT1RPTklDOwotI2VuZGlmCi0gIH0KLQotICByZXR1cm4gY2xvY2tpZDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW4gYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVjay5oLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTZiZTdiLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrLmguaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMjQyICswLDAgQEAKLS8qLSotIG1vZGU6QzsgLSotICovCi0vKgotICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQwotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCBBcmllbiBNYWxlYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBDSEVDS19ICi0jZGVmaW5lIENIRUNLX0gKLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKgotICAgTWFjcm9zIGFuZCBmdW5jdGlvbnMgc3RhcnRpbmcgd2l0aCBfICh1bmRlcnNjb3JlKSBhcmUgaW50ZXJuYWwgYW5kCi0gICBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBZb3UgaGF2ZSBiZWVuIHdhcm5lZCEuCi0qLwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBDS19DUFBTVEFSVCBleHRlcm4gIkMiIHsKLSNkZWZpbmUgQ0tfQ1BQRU5EIH0KLUNLX0NQUFNUQVJUCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fR05VQ19NSU5PUl9fKQotI2RlZmluZSBHQ0NfVkVSU0lPTl9BVF9MRUFTVChtYWpvciwgbWlub3IpIFwKLSgoX19HTlVDX18gPiAobWFqb3IpKSB8fCBcCi0gKF9fR05VQ19fID09IChtYWpvcikgJiYgX19HTlVDX01JTk9SX18gPj0gKG1pbm9yKSkpCi0jZWxzZQotI2RlZmluZSBHQ0NfVkVSU0lPTl9BVF9MRUFTVChtYWpvciwgbWlub3IpIDAKLSNlbmRpZgotI2lmIEdDQ19WRVJTSU9OX0FUX0xFQVNUKDIsOTUpCi0jZGVmaW5lIENLX0FUVFJJQlVURV9VTlVTRUQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCi0jZWxzZQotI2RlZmluZSBDS19BVFRSSUJVVEVfVU5VU0VECi0jZW5kaWYgLyogR0NDIDIuOTUgKi8KLSNpZiBHQ0NfVkVSU0lPTl9BVF9MRUFTVCgyLDUpCi0jZGVmaW5lIENLX0FUVFJJQlVURV9OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKQotI2Vsc2UKLSNkZWZpbmUgQ0tfQVRUUklCVVRFX05PUkVUVVJOCi0jZW5kaWYgLyogR0NDIDIuNSAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotLyoKLSAqIFVzZWQgdG8gY3JlYXRlIHRoZSBsaW5rZXIgc2NyaXB0IGZvciBoaWRpbmcgbGliLWxvY2FsIHN5bWJvbHMuIFNoYWxsCi0gKiBiZSBwdXQgZGlyZWN0bHkgaW4gZnJvbnQgb2YgdGhlIGV4cG9ydGVkIHN5bWJvbC4KLSAqLwotI2RlZmluZSBDS19FWFBPUlQKLS8qCi0gKiBVc2VkIGZvciBNU1ZDIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGF0dHJpYnV0ZQotICogQ0tfRExMX0VYUCBpcyBkZWZpbmVkIGR1cmluZyB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGxpYnJhcnkKLSAqIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gKi8KLSNpZm5kZWYgQ0tfRExMX0VYUAotI2RlZmluZSBDS19ETExfRVhQCi0jZW5kaWYKLS8qIGNoZWNrIHZlcnNpb24gbnVtYmVycyAqLwotI2RlZmluZSBDSEVDS19NQUpPUl9WRVJTSU9OIChAQ0hFQ0tfTUFKT1JfVkVSU0lPTkApCi0jZGVmaW5lIENIRUNLX01JTk9SX1ZFUlNJT04gKEBDSEVDS19NSU5PUl9WRVJTSU9OQCkKLSNkZWZpbmUgQ0hFQ0tfTUlDUk9fVkVSU0lPTiAoQENIRUNLX01JQ1JPX1ZFUlNJT05AKQotQ0tfRExMX0VYUCBleHRlcm4gaW50IENLX0VYUE9SVCBjaGVja19tYWpvcl92ZXJzaW9uOwotQ0tfRExMX0VYUCBleHRlcm4gaW50IENLX0VYUE9SVCBjaGVja19taW5vcl92ZXJzaW9uOwotQ0tfRExMX0VYUCBleHRlcm4gaW50IENLX0VYUE9SVCBjaGVja19taWNyb192ZXJzaW9uOwotCi0jaWZuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAoKHZvaWQqKTApCi0jZW5kaWYKLQotLyoqCi0gKiBUeXBlIGZvciBhIHRlc3QgY2FzZQotICoKLSAqIEEgVENhc2UgcmVwcmVzZW50cyBhIHRlc3QgY2FzZS4gIENyZWF0ZSB3aXRoIHRjYXNlX2NyZWF0ZSwgZnJlZQotICogd2l0aCB0Y2FzZV9mcmVlLiAgRm9yIHRoZSBtb21lbnQsIHRlc3QgY2FzZXMgY2FuIG9ubHkgYmUgcnVuCi0gKiB0aHJvdWdoIGEgc3VpdGUKLSovCi10eXBlZGVmIHN0cnVjdCBUQ2FzZSBUQ2FzZTsKLQotLyoqCi0gKiBUeXBlIGZvciBhIHRlc3QgZnVuY3Rpb24KLSAqLwotdHlwZWRlZiB2b2lkICgqVEZ1bikgKGludCk7Ci0KLS8qKgotICogVHlwZSBmb3IgYSBzZXR1cC90ZWFyZG93biBmdW5jdGlvbgotICovCi10eXBlZGVmIHZvaWQgKCpTRnVuKSAodm9pZCk7Ci0KLS8qKgotICogVHlwZSBmb3IgYSB0ZXN0IHN1aXRlCi0gKi8KLXR5cGVkZWYgc3RydWN0IFN1aXRlIFN1aXRlOwotCi0vKioKLSAqIENyZWF0ZXMgYSB0ZXN0IHN1aXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gKgotICogQ3JlYXRlIGEgc3VpdGUsIHdoaWNoIHdpbGwgY29udGFpbiB0ZXN0IGNhc2VzLiBPbmNlCi0gKiBjcmVhdGVkLCB1c2Ugc3VpdGVfYWRkX3RjYXNlKCkgdG8gYWRkIHRlc3QgY2FzZXMuCi0gKiBXaGVuIGZpbmlzaGVkLCBjcmVhdGUgYSBzdWl0ZSBydW5uZXIgZnJvbSB0aGUKLSAqIHN1aXRlIHVzaW5nIHNydW5uZXJfY3JlYXRlKCkKLSAqCi0gKiBAcGFyYW0gbmFtZSBuYW1lIG9mIHRoZSBzdWl0ZQotICoKLSAqIEByZXR1cm4gc3VpdGUKLSAqCi0gKiBAc2luY2UgMC42LjAKLSAqLwotQ0tfRExMX0VYUCBTdWl0ZSAqQ0tfRVhQT1JUIHN1aXRlX2NyZWF0ZSAoY29uc3QgY2hhciAqbmFtZSk7Ci0KLS8qKgotICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gdGVzdCBzdWl0ZSBjb250YWlucyBhIGNhc2UgbmFtZWQgYWZ0ZXIgYQotICogZ2l2ZW4gc3RyaW5nLgotICoKLSAqIEBwYXJhbSBzIHN1aXRlIHRvIGNoZWNrCi0gKiBAcGFyYW0gdGNuYW1lIHRlc3QgY2FzZSB0byBsb29rIGZvcgotICoKLSAqIEByZXR1cm4gMSBpZmYgdGhlIGdpdmVuIHRlc3QgY2FzZSBpcyB3aXRoaW4gdGhlIGdpdmVuIHN1aXRlOwotICogICAgICAgICAgMCBvdGhlcndpc2UKLSAqCi0gKiBAc2luY2UgMC45LjkKLSAqLwotQ0tfRExMX0VYUCBpbnQgQ0tfRVhQT1JUIHN1aXRlX3RjYXNlIChTdWl0ZSAqIHMsIGNvbnN0IGNoYXIgKnRjbmFtZSk7Ci0KLS8qKgotICogQWRkIGEgdGVzdCBjYXNlIHRvIGEgc3VpdGUKLSAqCi0gKiBAcGFyYW0gcyBzdWl0ZSB0byBhZGQgdGVzdCBjYXNlIHRvCi0gKiBAcGFyYW0gdGMgdGVzdCBjYXNlIHRvIGFkZCB0byBzdWl0ZQotICoKLSAqIEBzaW5jZSAwLjYuMAotICovCi1DS19ETExfRVhQIHZvaWQgQ0tfRVhQT1JUIHN1aXRlX2FkZF90Y2FzZSAoU3VpdGUgKiBzLCBUQ2FzZSAqIHRjKTsKLQotLyoqCi0gKiBDcmVhdGUgYSB0ZXN0IGNhc2UuCi0gKgotICogT25jZSBjcmVhdGVkLCB0ZXN0cyBjYW4gYmUgYWRkZWQgd2l0aCB0aGUgdGNhc2VfYWRkX3Rlc3QoKQotICogZnVuY3Rpb24sIGFuZCB0aGUgdGVzdCBjYXNlIGFzc2lnbmVkIHRvIGEgc3VpdGUgd2l0aCB0aGUKLSAqIHN1aXRlX2FkZF90Y2FzZSgpIGZ1bmN0aW9uLgotICoKLSAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHRlc3QgY2FzZQotICoKLSAqIEByZXR1cm4gdGVzdCBjYXNlIGNvbnRhaW5pbmcgbm8gdGVzdHMKLSAqCi0gKiBAc2luY2UgMC42LjAKLSAqICovCi1DS19ETExfRVhQIFRDYXNlICpDS19FWFBPUlQgdGNhc2VfY3JlYXRlIChjb25zdCBjaGFyICpuYW1lKTsKLQotLyoqCi0gKiBBZGQgYSB0ZXN0IGZ1bmN0aW9uIHRvIGEgdGVzdCBjYXNlCi0gKgotICogQHBhcmFtIHRjIHRlc3QgY2FzZSB0byBhZGQgdGVzdCB0bwotICogQHBhcmFtIHRmIHRlc3QgZnVuY3Rpb24gdG8gYWRkIHRvIHRlc3QgY2FzZQotICoKLSAqIEBzaW5jZSAwLjYuMAotICogKi8KLSNkZWZpbmUgdGNhc2VfYWRkX3Rlc3QodGMsdGYpIHRjYXNlX2FkZF90ZXN0X3JhaXNlX3NpZ25hbCh0Yyx0ZiwwKQotCi0vKioKLSAqIEFkZCBhIHRlc3QgZnVuY3Rpb24gd2l0aCBzaWduYWwgaGFuZGxpbmcgdG8gYSB0ZXN0IGNhc2UKLSAqCi0gKiBUaGUgYWRkZWQgdGVzdCBpcyBleHBlY3RlZCB0byB0ZXJtaW5hdGUgYnkgdGhyb3dpbmcgdGhlIGdpdmVuIHNpZ25hbAotICoKLSAqIEBwYXJhbSB0YyB0ZXN0IGNhc2UgdG8gYWRkIHRlc3QgdG8KLSAqIEBwYXJhbSB0ZiB0ZXN0IGZ1bmN0aW9uIHRvIGFkZCB0byB0ZXN0IGNhc2UKLSAqIEBwYXJhbSBzaWduYWwgZXhwZWN0ZWQgc2lnbmFsIGZvciB0ZXN0IGZ1bmN0aW9uIHRvIHRocm93IGluIG9yZGVyIGZvcgotICogICAgICAgICAgICAgICAgdGhlIHRlc3QgdG8gYmUgY29uc2lkZXJlZCBwYXNzaW5nCi0gKgotICogQHNpbmNlIDAuOS4yCi0gKiAqLwotI2RlZmluZSB0Y2FzZV9hZGRfdGVzdF9yYWlzZV9zaWduYWwodGMsdGYsc2lnbmFsKSBcCi0gICBfdGNhc2VfYWRkX3Rlc3QoKHRjKSwodGYpLCIiICMgdGYgIiIsKHNpZ25hbCksIDAsIDAsIDEpCi0KLS8qKgotICogQWRkIGEgdGVzdCBmdW5jdGlvbiB3aXRoIGFuIGV4cGVjdGVkIGV4aXQgdmFsdWUgdG8gYSB0ZXN0IGNhc2UKLSAqCi0gKiBUaGUgYWRkZWQgdGVzdCBpcyBleHBlY3RlZCB0byB0ZXJtaW5hdGUgYnkgZXhpdGluZyB3aXRoIHRoZSBnaXZlbiB2YWx1ZQotICoKLSAqIEBwYXJhbSB0YyB0ZXN0IGNhc2UgdG8gYWRkIHRlc3QgdG8KLSAqIEBwYXJhbSB0ZiB0ZXN0IGZ1bmN0aW9uIHRvIGFkZCB0byB0ZXN0IGNhc2UKLSAqIEBwYXJhbSBleHBlY3RlZF9leGl0X3ZhbHVlIGV4aXQgdmFsdWUgZm9yIHRlc3QgZnVuY3Rpb24gdG8gcmV0dXJuIGluCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgZm9yIHRoZSB0ZXN0IHRvIGJlIGNvbnNpZGVyZWQgcGFzc2luZwotICoKLSAqIEBzaW5jZSAwLjkuNwotICovCi0jZGVmaW5lIHRjYXNlX2FkZF9leGl0X3Rlc3QodGMsIHRmLCBleHBlY3RlZF9leGl0X3ZhbHVlKSBcCi0gIF90Y2FzZV9hZGRfdGVzdCgodGMpLCh0ZiksIiIgIyB0ZiAiIiwwLChleHBlY3RlZF9leGl0X3ZhbHVlKSwwLDEpCi0KLS8qKgotICogQWRkIGEgbG9vcGluZyB0ZXN0IGZ1bmN0aW9uIHRvIGEgdGVzdCBjYXNlCi0gKgotICogVGhlIHRlc3Qgd2lsbCBiZSBjYWxsZWQgaW4gYSBmb3IoaSA9IHM7IGkgPCBlOyBpKyspIGxvb3Agd2l0aCBlYWNoCi0gKiBpdGVyYXRpb24gYmVpbmcgZXhlY3V0ZWQgaW4gYSBuZXcgY29udGV4dC4gVGhlIGxvb3AgdmFyaWFibGUgJ2knIGlzCi0gKiBhdmFpbGFibGUgaW4gdGhlIHRlc3QuCi0gKgotICogQHBhcmFtIHRjIHRlc3QgY2FzZSB0byBhZGQgdGVzdCB0bwotICogQHBhcmFtIHRmIGZ1bmN0aW9uIHRvIGFkZCB0byB0ZXN0IGNhc2UKLSAqIEBwYXJhbSBzIHN0YXJ0aW5nIGluZGV4IGZvciB2YWx1ZSAiaSIgaW4gdGVzdAotICogQHBhcmFtIGUgZW5kaW5nIGluZGV4IGZvciB2YWx1ZSAiaSIgaW4gdGVzdAotICoKLSAqIEBzaW5jZSAwLjkuNAotICovCi0jZGVmaW5lIHRjYXNlX2FkZF9sb29wX3Rlc3QodGMsdGYscyxlKSBcCi0gIF90Y2FzZV9hZGRfdGVzdCgodGMpLCh0ZiksIiIgIyB0ZiAiIiwwLDAsKHMpLChlKSkKLQotLyoqCi0gKiBBZGQgYSBsb29waW5nIHRlc3QgZnVuY3Rpb24gd2l0aCBzaWduYWwgaGFuZGxpbmcgdG8gYSB0ZXN0IGNhc2UKLSAqCi0gKiBUaGUgdGVzdCB3aWxsIGJlIGNhbGxlZCBpbiBhIGZvcihpID0gczsgaSA8IGU7IGkrKykgbG9vcCB3aXRoIGVhY2gKLSAqIGl0ZXJhdGlvbiBiZWluZyBleGVjdXRlZCBpbiBhIG5ldyBjb250ZXh0LiBUaGUgbG9vcCB2YXJpYWJsZSAnaScgaXMKLSAqIGF2YWlsYWJsZSBpbiB0aGUgdGVzdC4KLSAqCi0gKiBUaGUgYWRkZWQgdGVzdCBpcyBleHBlY3RlZCB0byB0ZXJtaW5hdGUgYnkgdGhyb3dpbmcgdGhlIGdpdmVuIHNpZ25hbAotICoKLSAqIEBwYXJhbSB0YyB0ZXN0IGNhc2UgdG8gYWRkIHRlc3QgdG8KLSAqIEBwYXJhbSB0ZiBmdW5jdGlvbiB0byBhZGQgdG8gdGVzdCBjYXNlCi0gKiBAcGFyYW0gc2lnbmFsIGV4cGVjdGVkIHNpZ25hbCBmb3IgdGVzdCBmdW5jdGlvbiB0byB0aHJvdyBpbiBvcmRlciBmb3IKLSAqICAgICAgICAgICAgICAgIHRoZSB0ZXN0IHRvIGJlIGNvbnNpZGVyZWQgcGFzc2luZwotICogQHBhcmFtIHMgc3RhcnRpbmcgaW5kZXggZm9yIHZhbHVlICJpIiBpbiB0ZXN0Ci0gKiBAcGFyYW0gZSBlbmRpbmcgaW5kZXggZm9yIHZhbHVlICJpIiBpbiB0ZXN0Ci0gKgotICogQHNpbmNlIDAuOS41Ci0gKi8KLSNkZWZpbmUgdGNhc2VfYWRkX2xvb3BfdGVzdF9yYWlzZV9zaWduYWwodGMsdGYsc2lnbmFsLHMsZSkgXAotICBfdGNhc2VfYWRkX3Rlc3QoKHRjKSwodGYpLCIiICMgdGYgIiIsKHNpZ25hbCksMCwocyksKGUpKQotCi0vKioKLSAqIEFkZCBhIGxvb3BpbmcgdGVzdCBmdW5jdGlvbiB3aXRoIGFuIGV4cGVjdGVkIGV4aXQgdmFsdWUgdG8gYSB0ZXN0IGNhc2UKLSAqCi0gKiBUaGUgdGVzdCB3aWxsIGJlIGNhbGxlZCBpbiBhIGZvcihpID0gczsgaSA8IGU7IGkrKykgbG9vcCB3aXRoIGVhY2gKLSAqIGl0ZXJhdGlvbiBiZWluZyBleGVjdXRlZCBpbiBhIG5ldyBjb250ZXh0LiBUaGUgbG9vcCB2YXJpYWJsZSAnaScgaXMKLSAqIGF2YWlsYWJsZSBpbiB0aGUgdGVzdC4KLSAqCi0gKiBUaGUgYWRkZWQgdGVzdCBpcyBleHBlY3RlZCB0byB0ZXJtaW5hdGUgYnkgZXhpdGluZyB3aXRoIHRoZSBnaXZlbiB2YWx1ZQotICoKLSAqIEBwYXJhbSB0YyB0ZXN0IGNhc2UgdG8gYWRkIHRlc3QgdG8KLSAqIEBwYXJhbSB0ZiBmdW5jdGlvbiB0byBhZGQgdG8gdGVzdCBjYXNlCi0gKiBAcGFyYW0gZXhwZWN0ZWRfZXhpdF92YWx1ZSBleGl0IHZhbHVlIGZvciB0ZXN0IGZ1bmN0aW9uIHRvIHJldHVybiBpbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyIGZvciB0aGUgdGVzdCB0byBiZSBjb25zaWRlcmVkIHBhc3NpbmcKLSAqIEBwYXJhbSBzIHN0YXJ0aW5nIGluZGV4IGZvciB2YWx1ZSAiaSIgaW4gdGVzdAotICogQHBhcmFtIGUgZW5kaW5nIGluZGV4IGZvciB2YWx1ZSAiaSIgaW4gdGVzdAotICoKLSAqIEBzaW5jZSAwLjkuNwotICovCi0jZGVmaW5lIHRjYXNlX2FkZF9sb29wX2V4aXRfdGVzdCh0Yyx0ZixleHBlY3RlZF9leGl0X3ZhbHVlLHMsZSkgXAotICBfdGNhc2VfYWRkX3Rlc3QoKHRjKSwodGYpLCIiICMgdGYgIiIsMCwoZXhwZWN0ZWRfZXhpdF92YWx1ZSksKHMpLChlKSkKLQotLyogQWRkIGEgdGVzdCBmdW5jdGlvbiB0byBhIHRlc3QgY2FzZQotICAoZnVuY3Rpb24gdmVyc2lvbiAtLSB1c2UgdGhpcyB3aGVuIHRoZSBtYWNybyB3b24ndCB3b3JrCi0qLwotQ0tfRExMX0VYUCB2b2lkIENLX0VYUE9SVCBfdGNhc2VfYWRkX3Rlc3QgKFRDYXNlICogdGMsIFRGdW4gdGYsCi0gICAgY29uc3QgY2hhciAqZm5hbWUsIGludCBfc2lnbmFsLCBpbnQgYWxsb3dlZF9leGl0X3ZhbHVlLCBpbnQgc3RhcnQsIGludCBlbmQpOwotCi0vKioKLSAqIEFkZCB1bmNoZWNrZWQgZml4dHVyZSBzZXR1cC90ZWFyZG93biBmdW5jdGlvbnMgdG8gYSB0ZXN0IGNhc2UKLSAqCi0gKiBVbmNoZWNrZWQgZml4dHVyZSBmdW5jdGlvbnMgYXJlIHJ1biBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUKLSAqIHRlc3QgY2FzZSwgYW5kIG5vdCBiZWZvcmUgYW5kIGFmdGVyIHVuaXQgdGVzdHMuIEZ1cnRoZXIsCi0gKiB1bmNoZWNrZWQgZml4dHVyZSBmdW5jdGlvbnMgYXJlIG5vdCBydW4gaW4gYSBzZXBhcmF0ZSBhZGRyZXNzIHNwYWNlLAotICogbGlrZSB0ZXN0IGZ1bmN0aW9ucywgYW5kIHNvIG11c3Qgbm90IGV4aXQgb3Igc2lnbmFsIChlLmcuLAotICogc2VnZmF1bHQpLgotICoKLSAqIEFsc28sIHdoZW4gcnVuIGluIENLX05PRk9SSyBtb2RlLCB1bmNoZWNrZWQgZml4dHVyZSBmdW5jdGlvbnMgbWF5Ci0gKiBsZWFkIHRvIGRpZmZlcmVudCB1bml0IHRlc3QgYmVoYXZpb3IgaWYgdW5pdCB0ZXN0cyBjaGFuZ2UgZGF0YQotICogc2V0dXAgYnkgdGhlIGZpeHR1cmUgZnVuY3Rpb25zLgotICoKLSAqIE5vdGUgdGhhdCBpZiBhIHNldHVwIGZ1bmN0aW9uIGZhaWxzLCB0aGUgcmVtYWluaW5nIHNldHVwIGZ1bmN0aW9ucwotICogd2lsbCBiZSBvbWl0dGVkLCBhcyB3aWxsIHRoZSB0ZXN0IGNhc2UgYW5kIHRoZSB0ZWFyZG93biBmdW5jdGlvbnMuCi0gKiBJZiBhIHRlYXJkb3duIGZ1bmN0aW9uIGZhaWxzIHRoZSByZW1haW5pbmcgdGVhcmRvd24gZnVuY3RpbnMgd2lsbCBiZQotICogb21pdHRlZC4KLSAqCi0gKiBAcGFyYW0gdGMgdGVzdCBjYXNlIHRvIGFkZCB1bmNoZWNrZWQgZml4dHVyZSBzZXR1cC90ZWFyZG93biB0bwotICogQHBhcmFtIHNldHVwIGZ1bmN0aW9uIHRvIGFkZCB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3QgY2FzZTsKLSAqICAgICAgICAgICAgICAgaWYgTlVMTCBubyBzZXR1cCBmdW5jdGlvbiBpcyBhZGRlZAotICogQHBhcmFtIHRlYXJkb3duIGZ1bmN0aW9uIHRvIGFkZCB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdCBjYXNlOwotICogICAgICAgICAgICAgICBpZiBOVUxMIG5vIHRlYXJkb3duIGZ1bmN0aW9uIGlzIGFkZGVkCi0gKiBAc2luY2UgMC44LjAKLSAqLwotQ0tfRExMX0VYUCB2b2lkIENLX0VYUE9SVCB0Y2FzZV9hZGRfdW5jaGVja2VkX2ZpeHR1cmUgKFRDYXNlICogdGMsIFNGdW4gc2V0dXAsCi0gICAgU0Z1biB0ZWFyZG93bik7Ci0KLS8qKgotICogQWRkIGNoZWNrZWQgZml4dHVyZSBzZXR1cC90ZWFyZG93biBmdW5jdGlvbnMgdG8gYSB0ZXN0IGNhc2UKLSAqCi0gKiBDaGVja2VkIGZpeHR1cmUgZnVuY3Rpb25zIGFyZSBydW4gYmVmb3JlIGFuZCBhZnRlciBlYWNoIHVuaXQgdGVzdCBpbnNpZGUKLSAqIG9mIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSB0ZXN0LiBUaHVzLCBpZiB1c2luZyBDS19GT1JLCi0gKiBtb2RlIHRoZSBzZXBhcmF0ZSBwcm9jZXNzIHJ1bm5pbmcgdGhlIHVuaXQgdGVzdCB3aWxsIHN1cnZpdmUgc2lnbmFscwotICogb3IgdW5leHBlY3RlZCBleGl0cyBpbiB0aGUgZml4dHVyZSBmdW5jdGlvbi4gQWxzbywgaWYgdGhlIHNldHVwCi0gKiBmdW5jdGlvbiBpcyBpZGVtcG90ZW50LCB1bml0IHRlc3QgYmVoYXZpb3Igd2lsbCBiZSB0aGUgc2FtZSBpbgotICogQ0tfRk9SSyBhbmQgQ0tfTk9GT1JLIG1vZGVzLgotICoKLSAqIEhvd2V2ZXIsIHNpbmNlIGZpeHR1cmUgZnVuY3Rpb25zIGFyZSBydW4gYmVmb3JlIGFuZCBhZnRlciBlYWNoIHVuaXQKLSAqIHRlc3QsIHRoZXkgc2hvdWxkIG5vdCBiZSBleHBlbnNpdmUgY29kZS4KLSAqCi0gKiBOb3RlIHRoYXQgaWYgYSBzZXR1cCBmdW5jdGlvbiBmYWlscywgdGhlIHJlbWFpbmluZyBzZXR1cCBmdW5jdGlvbnMKLSAqIHdpbGwgYmUgb21pdHRlZCwgYXMgd2lsbCB0aGUgdGVzdCBhbmQgdGhlIHRlYXJkb3duIGZ1bmN0aW9ucy4gSWYgYQotICogdGVhcmRvd24gZnVuY3Rpb24gZmFpbHMgdGhlIHJlbWFpbmluZyB0ZWFyZG93biBmdW5jdGlucyB3aWxsIGJlCi0gKiBvbWl0dGVkLgotICoKLSAqIEBwYXJhbSB0YyB0ZXN0IGNhc2UgdG8gYWRkIGNoZWNrZWQgZml4dHVyZSBzZXR1cC90ZWFyZG93biB0bwotICogQHBhcmFtIHNldHVwIGZ1bmN0aW9uIHRvIGFkZCB0byBiZSBleGVjdXRlZCBiZWZvcmUgZWFjaCB1bml0IHRlc3QgaW4KLSAqICAgICAgICAgICAgICAgdGhlIHRlc3QgY2FzZTsgIGlmIE5VTEwgbm8gc2V0dXAgZnVuY3Rpb24gaXMgYWRkZWQKLSAqIEBwYXJhbSB0ZWFyZG93biBmdW5jdGlvbiB0byBhZGQgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgZWFjaCB1bml0IHRlc3QgaW4KLSAqICAgICAgICAgICAgICAgdGhlIHRlc3QgY2FzZTsgaWYgTlVMTCBubyB0ZWFyZG93biBmdW5jdGlvbiBpcyBhZGRlZAotICoKLSAqIEBzaW5jZSAwLjguMAotKi8KLUNLX0RMTF9FWFAgdm9pZCBDS19FWFBPUlQgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAoVENhc2UgKiB0YywgU0Z1biBzZXR1cCwKLSAgICBTRnVuIHRlYXJkb3duKTsKLQotLyoqCi0gKiBTZXQgdGhlIHRpbWVvdXQgZm9yIGFsbCB0ZXN0cyBpbiBhIHRlc3QgY2FzZS4KLSAqCi0gKiBBIHRlc3QgdGhhdCBsYXN0cyBsb25nZXIgdGhhbiB0aGUgdGltZW91dCAoaW4gc2Vjb25kcykgd2lsbCBiZSBraWxsZWQKLSAqIGFuZCB0aHVzIGZhaWwgd2l0aCBhbiBlcnJvci4KLSAqCi0gKiBJZiBub3Qgc2V0LCB0aGUgZGVmYXVsdCB0aW1lb3V0IGlzIG9uZSBhc3NpZ25lZCBhdCBjb21waWxlIHRpbWUuIElmCi0gKiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQ0tfREVGQVVMVF9USU1FT1VUIGlzIGRlZmluZWQgYW5kIG5vIHRpbWVvdXQKLSAqIGlzIHNldCwgdGhlIHZhbHVlIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1c2VkLgotICoKLSAqIEBwYXJhbSB0YyB0ZXN0IGNhc2UgdG8gYXNzaWduIHRpbWVvdXQgdG8KLSAqIEBwYXJhbSB0aW1lb3V0IHRvIHVzZSwgaW4gc2Vjb25kcy4gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGEgZGVjaW1hbAotICogICAgICAgICAgICAgICAgIHBvcnRpb24sIGJ1dCBubyBoaWdoIHJlc29sdXRpb24gdGltZXIgaXMgYXZhaWxhYmxlLAotICogICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBpcyByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IHNlY29uZC4KLSAqCi0gKiBAc2luY2UgMC45LjIKLSAqLwotQ0tfRExMX0VYUCB2b2lkIENLX0VYUE9SVCB0Y2FzZV9zZXRfdGltZW91dCAoVENhc2UgKiB0YywgZG91YmxlIHRpbWVvdXQpOwotCi0vKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBtYXJrIHRoZSBzdGFydCBvZiBhIHRlc3QgZnVuY3Rpb24gKi8KLUNLX0RMTF9FWFAgdm9pZCBDS19FWFBPUlQgdGNhc2VfZm5fc3RhcnQgKGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpmaWxlLAotICAgIGludCBsaW5lKTsKLQotLyoqCi0gKiBTdGFydCBhIHVuaXQgdGVzdCB3aXRoIFNUQVJUX1RFU1QodW5pdF9uYW1lKSwgZW5kIHdpdGggRU5EX1RFU1QuCi0gKgotICogT25lIG11c3QgdXNlIGJyYWNlcyB3aXRoaW4gYSBTVEFSVF8vRU5EXyBwYWlyIHRvIGRlY2xhcmUgbmV3IHZhcmlhYmxlcwotICoKLSAqIEBzaW5jZSAwLjYuMAotICovCi0jZGVmaW5lIFNUQVJUX1RFU1QoX190ZXN0bmFtZSlcCi1zdGF0aWMgdm9pZCBfX3Rlc3RuYW1lIChpbnQgX2kgQ0tfQVRUUklCVVRFX1VOVVNFRClcCi17XAotICB0Y2FzZV9mbl9zdGFydCAoIiIjIF9fdGVzdG5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0KLS8qKgotICogIEVuZCBhIHVuaXQgdGVzdAotICoKLSAqIEBzaW5jZSAwLjYuMAotICovCi0jZGVmaW5lIEVORF9URVNUIH0KLQotLyoKLSAqIEZhaWwgdGhlIHRlc3QgY2FzZSB1bmxlc3MgZXhwciBpcyBmYWxzZQotICoKLSAqIFRoaXMgY2FsbCBpcyBkZXByZWNhdGVkLgotICovCi0jZGVmaW5lIGZhaWxfdW5sZXNzIGNrX2Fzc2VydF9tc2cKLQotLyoKLSAqIEZhaWwgdGhlIHRlc3QgY2FzZSBpZiBleHByIGlzIGZhbHNlCi0gKgotICogVGhpcyBjYWxsIGlzIGRlcHJlY2F0ZWQuCi0gKgotICogTk9URTogVGhlIHNwYWNlIGJlZm9yZSB0aGUgY29tbWEgc2lnbiBiZWZvcmUgIyMgaXMgZXNzZW50aWFsIHRvIGJlIGNvbXBhdGlibGUKLSAqIHdpdGggZ2NjIDIuOTUuMyBhbmQgZWFybGllci4KLSAqIEZJWE1FOiB0aGVzZSBtYWNyb3MgbWF5IGNvbmZsaWN0IHdpdGggQzg5IGlmIGV4cHIgaXMKLSAqIEZJWE1FOiAgIHN0cmNtcCAoc3RyMSwgc3RyMikgZHVlIHRvIGV4Y2Vzc2l2ZSBzdHJpbmcgbGVuZ3RoLgotICovCi0jZGVmaW5lIGZhaWxfaWYoZXhwciwgLi4uKVwKLSAgKGV4cHIpID8gXAotICAgICBfY2tfYXNzZXJ0X2ZhaWxlZChfX0ZJTEVfXywgX19MSU5FX18sICJGYWlsdXJlICciI2V4cHIiJyBvY2N1cnJlZCIgLCAjIyBfX1ZBX0FSR1NfXywgTlVMTCkgXAotICAgICA6IF9tYXJrX3BvaW50KF9fRklMRV9fLCBfX0xJTkVfXykKLQotLyoKLSAqIEZhaWwgdGhlIHRlc3QKLSAqCi0gKiBUaGlzIGNhbGwgaXMgZGVwcmVjYXRlZC4KLSAqLwotI2RlZmluZSBmYWlsIGNrX2Fib3J0X21zZwotCi0vKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gYXNzZXJ0aW9uIGZhaWxzLgotICogTm90ZSB0aGF0IGl0IG9ubHkgaGFzIHRoZSBub3JldHVybiBtb2RpZmllciB3aGVuCi0gKiB1c2luZyBmb3JrLiBJZiBmb3JrIGlzIHVuYXZhaWxhYmxlLCB0aGUgZnVuY3Rpb24KLSAqIGNhbGxzIGxvbmdqbXAoKSB3aGVuIGEgdGVzdCBhc3NlcnRpb24gZmFpbHMuIE1hcmtpbmcKLSAqIHRoZSBmdW5jdGlvbiBhcyBub3JldHVybiBjYXVzZXMgZ2NjIHRvIG1ha2UgYXNzdW1wdGlvbnMKLSAqIHdoaWNoIGFyZSBub3QgdmFsaWQsIGFzIGxvbmdqbXAoKSBpcyBsaWtlIGEgcmV0dXJuLgotICovCi0jaWYgQEhBVkVfRk9SS0AKLUNLX0RMTF9FWFAgdm9pZCBDS19FWFBPUlQKLV9ja19hc3NlcnRfZmFpbGVkIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZXhwciwgLi4uKQotICAgIENLX0FUVFJJQlVURV9OT1JFVFVSTjsKLSNlbHNlCi1DS19ETExfRVhQIHZvaWQgQ0tfRVhQT1JUIF9ja19hc3NlcnRfZmFpbGVkIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKLSAgICBjb25zdCBjaGFyICpleHByLCAuLi4pOwotI2VuZGlmCi0KLS8qKgotICogRmFpbCB0aGUgdGVzdCBpZiBleHByZXNzaW9uIGlzIGZhbHNlCi0gKgotICogQHBhcmFtIGV4cHIgZXhwcmVzc2lvbiB0byBldmFsdWF0ZQotICoKLSAqIEBub3RlIElmIHRoZSBjaGVjayBmYWlscywgdGhlIHJlbWFpbmluZyBvZiB0aGUgdGVzdCBpcyBhYm9ydGVkCi0gKgotICogQHNpbmNlIDAuOS42Ci0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0KGV4cHIpIGNrX2Fzc2VydF9tc2coZXhwciwgTlVMTCkKLQotLyogVGhlIHNwYWNlIGJlZm9yZSB0aGUgY29tbWEgc2lnbiBiZWZvcmUgIyMgaXMgZXNzZW50aWFsIHRvIGJlIGNvbXBhdGlibGUKLSAgIHdpdGggZ2NjIDIuOTUuMyBhbmQgZWFybGllci4KLSovCi0vKioKLSAqIEZhaWwgdGhlIHRlc3QgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2U7IHByaW50IG1lc3NhZ2Ugb24gZmFpbHVyZQotICoKLSAqIEBwYXJhbSBleHByIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUKLSAqIEBwYXJhbSAuLi4gbWVzc2FnZSB0byBwcmludCAoaW4gcHJpbnRmIGZvcm1hdCkgaWYgZXhwcmVzc2lvbiBpcyBmYWxzZQotICoKLSAqIEBub3RlIElmIHRoZSBjaGVjayBmYWlscywgdGhlIHJlbWFpbmluZyBvZiB0aGUgdGVzdCBpcyBhYm9ydGVkCi0gKgotICogQHNpbmNlIDAuOS42Ci0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X21zZyhleHByLCAuLi4pIFwKLSAgKGV4cHIpID8gXAotICAgICBfbWFya19wb2ludChfX0ZJTEVfXywgX19MSU5FX18pIDogXAotICAgICBfY2tfYXNzZXJ0X2ZhaWxlZChfX0ZJTEVfXywgX19MSU5FX18sICJBc3NlcnRpb24gJyIjZXhwciInIGZhaWxlZCIgLCAjIyBfX1ZBX0FSR1NfXywgTlVMTCkKLQotLyoqCi0gKiBVbmNvbmRpdGlvbmFsbHkgZmFpbCB0aGUgdGVzdAotICoKLSAqIEBub3RlIE9uY2UgY2FsbGVkLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjYKLSAqLwotI2RlZmluZSBja19hYm9ydCgpIGNrX2Fib3J0X21zZyhOVUxMKQotLyoqCi0gKiBVbmNvbmRpdGlvbmFsbHkgZmFpbCB0aGUgdGVzdDsgcHJpbnQgYSBtZXNzYWdlCi0gKgotICogQHBhcmFtIC4uLiBtZXNzYWdlIHRvIHByaW50IChpbiBwcmludGYgZm9ybWF0KQotICoKLSAqIEBub3RlIE9uY2UgY2FsbGVkLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjYKLSAqLwotI2RlZmluZSBja19hYm9ydF9tc2coLi4uKSBfY2tfYXNzZXJ0X2ZhaWxlZChfX0ZJTEVfXywgX19MSU5FX18sICJGYWlsZWQiICwgIyMgX19WQV9BUkdTX18sIE5VTEwpCi0KLS8qIFNpZ25lZCBhbmQgdW5zaWduZWQgaW50ZWdlciBjb21wYXJpc29uIG1hY3JvcyB3aXRoIGltcHJvdmVkIG91dHB1dCBjb21wYXJlZCB0byBja19hc3NlcnQoKS4gKi8KLS8qIE9QIG1heSBiZSBhbnkgY29tcGFyaXNvbiBvcGVyYXRvci4gKi8KLSNkZWZpbmUgX2NrX2Fzc2VydF9pbnQoWCwgT1AsIFkpIGRvIHsgXAotICBnaW50NjQgX2NrX3ggPSAoWCk7IFwKLSAgZ2ludDY0IF9ja195ID0gKFkpOyBcCi0gIGNrX2Fzc2VydF9tc2coX2NrX3ggT1AgX2NrX3ksICJBc3NlcnRpb24gJyVzJyBmYWlsZWQ6ICIgXAotICAgICAgIiVzPT0lIiBHX0dJTlQ2NF9GT1JNQVQgIiwgJXM9PSUiIEdfR0lOVDY0X0ZPUk1BVCwgI1gjT1AjWSwgI1gsIF9ja194LCAjWSwgX2NrX3kpOyBcCi19IHdoaWxlICgwKQotCi0vKioKLSAqIENoZWNrIHR3byBzaWduZWQgaW50ZWdlcnMgdG8gZGV0ZXJtaW5lIGlmIFg9PVkKLSAqCi0gKiBJZiBub3QgWD09WSwgdGhlIHRlc3QgZmFpbHMuCi0gKgotICogQHBhcmFtIFggc2lnbmVkIGludGVnZXIKLSAqIEBwYXJhbSBZIHNpZ25lZCBpbnRlZ2VyIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjYKLSAqLwotI2RlZmluZSBja19hc3NlcnRfaW50X2VxKFgsIFkpIF9ja19hc3NlcnRfaW50KFgsID09LCBZKQotLyoqCi0gKiBDaGVjayB0d28gc2lnbmVkIGludGVnZXJzIHRvIGRldGVybWluZSBpZiBYIT1ZCi0gKgotICogSWYgbm90IFghPVksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHNpZ25lZCBpbnRlZ2VyCi0gKiBAcGFyYW0gWSBzaWduZWQgaW50ZWdlciB0byBjb21wYXJlIGFnYWluc3QgWAotICoKLSAqIEBub3RlIElmIHRoZSBjaGVjayBmYWlscywgdGhlIHJlbWFpbmluZyBvZiB0aGUgdGVzdCBpcyBhYm9ydGVkCi0gKgotICogQHNpbmNlIDAuOS42Ci0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X2ludF9uZShYLCBZKSBfY2tfYXNzZXJ0X2ludChYLCAhPSwgWSkKLS8qKgotICogQ2hlY2sgdHdvIHNpZ25lZCBpbnRlZ2VycyB0byBkZXRlcm1pbmUgaWYgWDxZCi0gKgotICogSWYgbm90IFg8WSwgdGhlIHRlc3QgZmFpbHMuCi0gKgotICogQHBhcmFtIFggc2lnbmVkIGludGVnZXIKLSAqIEBwYXJhbSBZIHNpZ25lZCBpbnRlZ2VyIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjEwCi0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X2ludF9sdChYLCBZKSBfY2tfYXNzZXJ0X2ludChYLCA8LCBZKQotLyoqCi0gKiBDaGVjayB0d28gc2lnbmVkIGludGVnZXJzIHRvIGRldGVybWluZSBpZiBYPD1ZCi0gKgotICogSWYgbm90IFg8PVksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHNpZ25lZCBpbnRlZ2VyCi0gKiBAcGFyYW0gWSBzaWduZWQgaW50ZWdlciB0byBjb21wYXJlIGFnYWluc3QgWAotICoKLSAqIEBub3RlIElmIHRoZSBjaGVjayBmYWlscywgdGhlIHJlbWFpbmluZyBvZiB0aGUgdGVzdCBpcyBhYm9ydGVkCi0gKgotICogQHNpbmNlIDAuOS4xMAotICovCi0jZGVmaW5lIGNrX2Fzc2VydF9pbnRfbGUoWCwgWSkgX2NrX2Fzc2VydF9pbnQoWCwgPD0sIFkpCi0vKioKLSAqIENoZWNrIHR3byBzaWduZWQgaW50ZWdlcnMgdG8gZGV0ZXJtaW5lIGlmIFg+WQotICoKLSAqIElmIG5vdCBYPlksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHNpZ25lZCBpbnRlZ2VyCi0gKiBAcGFyYW0gWSBzaWduZWQgaW50ZWdlciB0byBjb21wYXJlIGFnYWluc3QgWAotICoKLSAqIEBub3RlIElmIHRoZSBjaGVjayBmYWlscywgdGhlIHJlbWFpbmluZyBvZiB0aGUgdGVzdCBpcyBhYm9ydGVkCi0gKgotICogQHNpbmNlIDAuOS4xMAotICovCi0jZGVmaW5lIGNrX2Fzc2VydF9pbnRfZ3QoWCwgWSkgX2NrX2Fzc2VydF9pbnQoWCwgPiwgWSkKLS8qKgotICogQ2hlY2sgdHdvIHNpZ25lZCBpbnRlZ2VycyB0byBkZXRlcm1pbmUgaWYgWD49WQotICoKLSAqIElmIG5vdCBYPj1ZLCB0aGUgdGVzdCBmYWlscy4KLSAqCi0gKiBAcGFyYW0gWCBzaWduZWQgaW50ZWdlcgotICogQHBhcmFtIFkgc2lnbmVkIGludGVnZXIgdG8gY29tcGFyZSBhZ2FpbnN0IFgKLSAqCi0gKiBAbm90ZSBJZiB0aGUgY2hlY2sgZmFpbHMsIHRoZSByZW1haW5pbmcgb2YgdGhlIHRlc3QgaXMgYWJvcnRlZAotICoKLSAqIEBzaW5jZSAwLjkuMTAKLSAqLwotI2RlZmluZSBja19hc3NlcnRfaW50X2dlKFgsIFkpIF9ja19hc3NlcnRfaW50KFgsID49LCBZKQotCi0jZGVmaW5lIF9ja19hc3NlcnRfdWludChYLCBPUCwgWSkgZG8geyBcCi0gIGd1aW50NjQgX2NrX3ggPSAoWCk7IFwKLSAgZ3VpbnQ2NCBfY2tfeSA9IChZKTsgXAotICBja19hc3NlcnRfbXNnKF9ja194IE9QIF9ja195LCAiQXNzZXJ0aW9uICclcycgZmFpbGVkOiAiIFwKLSAgICAgICIlcz09JSIgR19HVUlOVDY0X0ZPUk1BVCAiLCAlcz09JSIgR19HVUlOVDY0X0ZPUk1BVCwgI1gjT1AjWSwgI1gsIF9ja194LCAjWSwgX2NrX3kpOyBcCi19IHdoaWxlICgwKQotLyoqCi0gKiBDaGVjayB0d28gdW5zaWduZWQgaW50ZWdlcnMgdG8gZGV0ZXJtaW5lIGlmIFg9PVkKLSAqCi0gKiBJZiBub3QgWD09WSwgdGhlIHRlc3QgZmFpbHMuCi0gKgotICogQHBhcmFtIFggc2lnbmVkIGludGVnZXIKLSAqIEBwYXJhbSBZIHNpZ25lZCBpbnRlZ2VyIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjEwCi0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X3VpbnRfZXEoWCwgWSkgX2NrX2Fzc2VydF91aW50KFgsID09LCBZKQotLyoqCi0gKiBDaGVjayB0d28gdW5zaWduZWQgaW50ZWdlcnMgdG8gZGV0ZXJtaW5lIGlmIFghPVkKLSAqCi0gKiBJZiBub3QgWCE9WSwgdGhlIHRlc3QgZmFpbHMuCi0gKgotICogQHBhcmFtIFggc2lnbmVkIGludGVnZXIKLSAqIEBwYXJhbSBZIHNpZ25lZCBpbnRlZ2VyIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjEwCi0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X3VpbnRfbmUoWCwgWSkgX2NrX2Fzc2VydF91aW50KFgsICE9LCBZKQotLyoqCi0gKiBDaGVjayB0d28gdW5zaWduZWQgaW50ZWdlcnMgdG8gZGV0ZXJtaW5lIGlmIFg8WQotICoKLSAqIElmIG5vdCBYPFksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHNpZ25lZCBpbnRlZ2VyCi0gKiBAcGFyYW0gWSBzaWduZWQgaW50ZWdlciB0byBjb21wYXJlIGFnYWluc3QgWAotICoKLSAqIEBub3RlIElmIHRoZSBjaGVjayBmYWlscywgdGhlIHJlbWFpbmluZyBvZiB0aGUgdGVzdCBpcyBhYm9ydGVkCi0gKgotICogQHNpbmNlIDAuOS4xMAotICovCi0jZGVmaW5lIGNrX2Fzc2VydF91aW50X2x0KFgsIFkpIF9ja19hc3NlcnRfdWludChYLCA8LCBZKQotLyoqCi0gKiBDaGVjayB0d28gdW5zaWduZWQgaW50ZWdlcnMgdG8gZGV0ZXJtaW5lIGlmIFg8PVkKLSAqCi0gKiBJZiBub3QgWDw9WSwgdGhlIHRlc3QgZmFpbHMuCi0gKgotICogQHBhcmFtIFggc2lnbmVkIGludGVnZXIKLSAqIEBwYXJhbSBZIHNpZ25lZCBpbnRlZ2VyIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjEwCi0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X3VpbnRfbGUoWCwgWSkgX2NrX2Fzc2VydF91aW50KFgsIDw9LCBZKQotLyoqCi0gKiBDaGVjayB0d28gdW5zaWduZWQgaW50ZWdlcnMgdG8gZGV0ZXJtaW5lIGlmIFg+WQotICoKLSAqIElmIG5vdCBYPlksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHNpZ25lZCBpbnRlZ2VyCi0gKiBAcGFyYW0gWSBzaWduZWQgaW50ZWdlciB0byBjb21wYXJlIGFnYWluc3QgWAotICoKLSAqIEBub3RlIElmIHRoZSBjaGVjayBmYWlscywgdGhlIHJlbWFpbmluZyBvZiB0aGUgdGVzdCBpcyBhYm9ydGVkCi0gKgotICogQHNpbmNlIDAuOS4xMAotICovCi0jZGVmaW5lIGNrX2Fzc2VydF91aW50X2d0KFgsIFkpIF9ja19hc3NlcnRfdWludChYLCA+LCBZKQotLyoqCi0gKiBDaGVjayB0d28gdW5zaWduZWQgaW50ZWdlcnMgdG8gZGV0ZXJtaW5lIGlmIFg+PVkKLSAqCi0gKiBJZiBub3QgWD49WSwgdGhlIHRlc3QgZmFpbHMuCi0gKgotICogQHBhcmFtIFggc2lnbmVkIGludGVnZXIKLSAqIEBwYXJhbSBZIHNpZ25lZCBpbnRlZ2VyIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjEwCi0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X3VpbnRfZ2UoWCwgWSkgX2NrX2Fzc2VydF91aW50KFgsID49LCBZKQotCi0vKiBTdHJpbmcgY29tcGFyaXNvbiBtYWNyb3Mgd2l0aCBpbXByb3ZlZCBvdXRwdXQgY29tcGFyZWQgdG8gY2tfYXNzZXJ0KCkgKi8KLS8qIE9QIG1pZ2h0IGJlIGFueSBvcGVyYXRvciB0aGF0IGNhbiBiZSB1c2VkIGluICcwIE9QIHN0cmNtcChYLFkpJyBjb21wYXJpc29uICovCi0vKiBUaGUgeCBhbmQgeSBwYXJhbWV0ZXIgc3dhcCBpbiBzdHJjbXAoKSBpcyBuZWVkZWQgdG8gaGFuZGxlID4sID49LCA8LCA8PSBvcGVyYXRvcnMgKi8KLSNkZWZpbmUgX2NrX2Fzc2VydF9zdHIoWCwgT1AsIFkpIGRvIHsgXAotICBjb25zdCBjaGFyKiBfY2tfeCA9IChYKTsgXAotICBjb25zdCBjaGFyKiBfY2tfeSA9IChZKTsgXAotICBja19hc3NlcnRfbXNnKDAgT1Agc3RyY21wKF9ja195LCBfY2tfeCksIFwKLSAgICAiQXNzZXJ0aW9uICclcycgZmFpbGVkOiAlcz09XCIlc1wiLCAlcz09XCIlc1wiIiwgI1gjT1AjWSwgI1gsIF9ja194LCAjWSwgX2NrX3kpOyBcCi19IHdoaWxlICgwKQotLyoqCi0gKiBDaGVjayB0d28gc3RyaW5ncyB0byBkZXRlcm1pbmUgaWYgMD09c3RyY21wKFgsWSkKLSAqCi0gKiBJZiBub3QgMD09c3RyY21wKFgsWSksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHN0cmluZwotICogQHBhcmFtIFkgc3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjYKLSAqLwotI2RlZmluZSBja19hc3NlcnRfc3RyX2VxKFgsIFkpIF9ja19hc3NlcnRfc3RyKFgsID09LCBZKQotLyoqCi0gKiBDaGVjayB0d28gc3RyaW5ncyB0byBkZXRlcm1pbmUgaWYgMCE9c3RyY21wKFgsWSkKLSAqCi0gKiBJZiBub3QgMCE9c3RyY21wKFgsWSksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHN0cmluZwotICogQHBhcmFtIFkgc3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjYKLSAqLwotI2RlZmluZSBja19hc3NlcnRfc3RyX25lKFgsIFkpIF9ja19hc3NlcnRfc3RyKFgsICE9LCBZKQotLyoqCi0gKiBDaGVjayB0d28gc3RyaW5ncyB0byBkZXRlcm1pbmUgaWYgMDxzdHJjbXAoWCxZKSwgKGUuZy4gc3RyY21wKFgsWSk+MCkKLSAqCi0gKiBJZiBub3QgMDxzdHJjbXAoWCxZKSwgdGhlIHRlc3QgZmFpbHMuCi0gKgotICogQHBhcmFtIFggc3RyaW5nCi0gKiBAcGFyYW0gWSBzdHJpbmcgdG8gY29tcGFyZSBhZ2FpbnN0IFgKLSAqCi0gKiBAbm90ZSBJZiB0aGUgY2hlY2sgZmFpbHMsIHRoZSByZW1haW5pbmcgb2YgdGhlIHRlc3QgaXMgYWJvcnRlZAotICoKLSAqIEBzaW5jZSAwLjkuMTAKLSAqLwotI2RlZmluZSBja19hc3NlcnRfc3RyX2x0KFgsIFkpIF9ja19hc3NlcnRfc3RyKFgsIDwsIFkpCi0vKioKLSAqIENoZWNrIHR3byBzdHJpbmdzIHRvIGRldGVybWluZSBpZiAwPD1zdHJjbXAoWCxZKSAoZS5nLiBzdHJjbXAoWCxZKT49MCkKLSAqCi0gKiBJZiBub3QgMDw9c3RyY21wKFgsWSksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHN0cmluZwotICogQHBhcmFtIFkgc3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjEwCi0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X3N0cl9sZShYLCBZKSBfY2tfYXNzZXJ0X3N0cihYLCA8PSwgWSkKLS8qKgotICogQ2hlY2sgdHdvIHN0cmluZ3MgdG8gZGV0ZXJtaW5lIGlmIDA8c3RyY21wKFgsWSkgKGUuZy4gc3RyY21wKFgsWSk+MCkKLSAqCi0gKiBJZiBub3QgMDxzdHJjbXAoWCxZKSwgdGhlIHRlc3QgZmFpbHMuCi0gKgotICogQHBhcmFtIFggc3RyaW5nCi0gKiBAcGFyYW0gWSBzdHJpbmcgdG8gY29tcGFyZSBhZ2FpbnN0IFgKLSAqCi0gKiBAbm90ZSBJZiB0aGUgY2hlY2sgZmFpbHMsIHRoZSByZW1haW5pbmcgb2YgdGhlIHRlc3QgaXMgYWJvcnRlZAotICoKLSAqIEBzaW5jZSAwLjkuMTAKLSAqLwotI2RlZmluZSBja19hc3NlcnRfc3RyX2d0KFgsIFkpIF9ja19hc3NlcnRfc3RyKFgsID4sIFkpCi0vKioKLSAqIENoZWNrIHR3byBzdHJpbmdzIHRvIGRldGVybWluZSBpZiAwPj1zdHJjbXAoWCxZKSAoZS5nLiBzdHJjbXAoWCxZKTw9MCkKLSAqCi0gKiBJZiBub3QgMD49c3RyY21wKFgsWSksIHRoZSB0ZXN0IGZhaWxzLgotICoKLSAqIEBwYXJhbSBYIHN0cmluZwotICogQHBhcmFtIFkgc3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQG5vdGUgSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgcmVtYWluaW5nIG9mIHRoZSB0ZXN0IGlzIGFib3J0ZWQKLSAqCi0gKiBAc2luY2UgMC45LjEwCi0gKi8KLSNkZWZpbmUgY2tfYXNzZXJ0X3N0cl9nZShYLCBZKSBfY2tfYXNzZXJ0X3N0cihYLCA+PSwgWSkKLQotLyogUG9pbnRlciBjb21wYXJpc29uIG1hY3JvcyB3aXRoIGltcHJvdmVkIG91dHB1dCBjb21wYXJlZCB0byBja19hc3NlcnQoKS4gKi8KLS8qIE9QIG1heSBvbmx5IGJlID09IG9yICE9ICAqLwotI2RlZmluZSBfY2tfYXNzZXJ0X3B0cihYLCBPUCwgWSkgZG8geyBcCi0gIGNvbnN0IHZvaWQqIF9ja194ID0gKFgpOyBcCi0gIGNvbnN0IHZvaWQqIF9ja195ID0gKFkpOyBcCi0gIGNrX2Fzc2VydF9tc2coX2NrX3ggT1AgX2NrX3ksICJBc3NlcnRpb24gJyVzJyBmYWlsZWQ6ICVzPT0lI3gsICVzPT0lI3giLCAjWCNPUCNZLCAjWCwgX2NrX3gsICNZLCBfY2tfeSk7IFwKLX0gd2hpbGUgKDApCi0KLS8qKgotICogQ2hlY2sgaWYgdHdvIHBvaW50ZXJzIGFyZSBlcXVhbC4KLSAqCi0gKiBJZiB0aGUgdHdvIHBhc3NlZCBwb2ludGVycyBhcmUgbm90IGVxdWFsLCB0aGUgdGVzdAotICogZmFpbHMuCi0gKgotICogQHBhcmFtIFggcG9pbnRlcgotICogQHBhcmFtIFkgcG9pbnRlciB0byBjb21wYXJlIGFnYWluc3QgWAotICoKLSAqIEBub3RlIElmIHRoZSBjaGVjayBmYWlscywgdGhlIHJlbWFpbmluZyBvZiB0aGUgdGVzdCBpcyBhYm9ydGVkCi0gKgotICogQHNpbmNlIDAuOS4xMAotICovCi0jZGVmaW5lIGNrX2Fzc2VydF9wdHJfZXEoWCwgWSkgX2NrX2Fzc2VydF9wdHIoWCwgPT0sIFkpCi0KLS8qKgotICogQ2hlY2sgaWYgdHdvIHBvaW50ZXJzIGFyZSBub3QuCi0gKgotICogSWYgdGhlIHR3byBwYXNzZWQgcG9pbnRlcnMgYXJlIGVxdWFsLCB0aGUgdGVzdCBmYWlscy4KLSAqCi0gKiBAcGFyYW0gWCBwb2ludGVyCi0gKiBAcGFyYW0gWSBwb2ludGVyIHRvIGNvbXBhcmUgYWdhaW5zdCBYCi0gKgotICogQHNpbmNlIDAuOS4xMAotICovCi0jZGVmaW5lIGNrX2Fzc2VydF9wdHJfbmUoWCwgWSkgX2NrX2Fzc2VydF9wdHIoWCwgIT0sIFkpCi0KLS8qKgotICogTWFyayB0aGUgbGFzdCBwb2ludCByZWFjaGVkIGluIGEgdW5pdCB0ZXN0LgotICoKLSAqIElmIHRoZSB0ZXN0IHRocm93cyBhIHNpZ25hbCBvciBleGl0cywgdGhlIGxvY2F0aW9uIG5vdGVkIHdpdGggdGhlCi0gKiBmYWlsdXJlIGlzIHRoZSBsYXN0IGxvY2F0aW9uIG9mIGEgY2tfYXNzZXJ0KigpIG9yIGNrX2Fib3J0KCkgY2FsbC4KLSAqIFVzZSBtYXJrX3BvaW50KCkgdG8gcmVjb3JkIGludGVybWVkaWF0ZSBsb2NhdGlvbnMgKHVzZWZ1bCBmb3IgdHJhY2tpbmcgZG93bgotICogY3Jhc2hlcyBvciBleGl0cykuCi0gKgotICogQHNpbmNlIDAuNi4wCi0qLwotI2RlZmluZSBtYXJrX3BvaW50KCkgX21hcmtfcG9pbnQoX19GSUxFX18sX19MSU5FX18pCi0KLS8qIE5vbiBtYWNybyB2ZXJzaW9uIG9mICNtYXJrX3BvaW50ICovCi1DS19ETExfRVhQIHZvaWQgQ0tfRVhQT1JUIF9tYXJrX3BvaW50IChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7Ci0KLS8qKgotICogRW51bSBkZXNjcmliaW5nIHRoZSBwb3NzaWJsZSByZXN1bHRzIG9mIGEgdGVzdAotICovCi1lbnVtIHRlc3RfcmVzdWx0Ci17Ci0gIENLX1RFU1RfUkVTVUxUX0lOVkFMSUQsICAgICAgIC8qKjwgRGVmYXVsdCB2YWx1ZTsgc2hvdWxkIG5vdCBlbmNvdW50ZXIgdGhpcyAqLwotICBDS19QQVNTLCAgICAgICAgICAgICAgICAgICAgICAvKio8IFRlc3QgcGFzc2VkICovCi0gIENLX0ZBSUxVUkUsICAgICAgICAgICAgICAgICAgIC8qKjwgVGVzdCBjb21wbGV0ZWQgYnV0IGZhaWxlZCAqLwotICBDS19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAvKio8IFRlc3QgZmFpbGVkIHRvIGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bmV4cGVjdGVkIHNpZ25hbCBvciBub24temVybyBlYXJseSBleGl0KSAqLwotfTsKLQotLyoqCi0gKiBFbnVtIHNwZWNpZnlpbmcgdGhlIHZlcmJvc2l0eSBvZiBvdXRwdXQgYSBTUnVubmVyIHNob3VsZCBwcm9kdWNlCi0gKi8KLWVudW0gcHJpbnRfb3V0cHV0Ci17Ci0gIENLX1NJTEVOVCwgICAgICAgICAgICAgICAgICAgIC8qKjwgTm8gb3V0cHV0ICovCi0gIENLX01JTklNQUwsICAgICAgICAgICAgICAgICAgIC8qKjwgT25seSBzdW1tYXJ5IG91dHB1dCAqLwotICBDS19OT1JNQUwsICAgICAgICAgICAgICAgICAgICAvKio8IEFsbCBmYWlsZWQgdGVzdHMgKi8KLSAgQ0tfVkVSQk9TRSwgICAgICAgICAgICAgICAgICAgLyoqPCBBbGwgdGVzdHMgKi8KLSAgQ0tfRU5WLCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBMb29rIGF0IGVudmlyb25tZW50IHZhciBDS19WRVJCT1NJVFkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igd2hhdCB2ZXJib3NpdHkgdG8gdXNlLCB3aGljaCBjYW4gYmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaXRoZXIgInNpbGVudCIsICJtaW5pbWFsIiwgIm5vcm1hbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgInZlcmJvc2UiLiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc2V0LCB0aGVuIENLX05PUk1BTCB3aWxsIGJlIHVzZWQuKi8KLSNpZiBARU5BQkxFX1NVQlVOSVRACi0gIENLX1NVQlVOSVQsICAgICAgICAgICAgICAgICAgIC8qKjwgUnVuIGFzIGEgc3VidW5pdCBjaGlsZCBwcm9jZXNzICovCi0jZW5kaWYKLSAgQ0tfTEFTVCAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBOb3QgYSB2YWxpZCBvcHRpb24gKi8KLX07Ci0KLS8qKgotICogSG9sZHMgc3RhdGUgZm9yIGEgcnVubmluZyBvZiBhIHRlc3Qgc3VpdGUKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgU1J1bm5lciBTUnVubmVyOwotCi0vKioKLSAqIE9wYXF1ZSB0eXBlIGZvciBhIHRlc3QgZmFpbHVyZQotICovCi10eXBlZGVmIHN0cnVjdCBUZXN0UmVzdWx0IFRlc3RSZXN1bHQ7Ci0KLS8qKgotICogRW51bSByZXByZXNlbnRpbmcgdGhlIHR5cGVzIG9mIGNvbnRleHRzIGZvciBhIHRlc3QKLSAqLwotZW51bSBja19yZXN1bHRfY3R4Ci17Ci0gIENLX0NUWF9JTlZBTElELCAgICAgICAgICAgICAgIC8qKjwgRGVmYXVsdCB2YWx1ZTsgc2hvdWxkIG5vdCBlbmNvdW50ZXIgdGhpcyAqLwotICBDS19DVFhfU0VUVVAsICAgICAgICAgICAgICAgICAvKio8IFNldHVwIGJlZm9yZSBhIHRlc3QgKi8KLSAgQ0tfQ1RYX1RFU1QsICAgICAgICAgICAgICAgICAgLyoqPCBCb2R5IG9mIHRlc3QgaXRzZWxmICovCi0gIENLX0NUWF9URUFSRE9XTiAgICAgICAgICAgICAgIC8qKjwgVGVhcmRvd24gYWZ0ZXIgYSB0ZXN0ICovCi19OwotCi0vKioKLSAqIFJldHJpZXZlIHR5cGUgb2YgcmVzdWx0IHRoYXQgdGhlIGdpdmVuIHRlc3QgcmVzdWx0IHJlcHJlc2VudHMuCi0gKgotICogVGhpcyBpcyBhIG1lbWJlciBvZiB0ZXN0X3Jlc3VsdCwgYW5kIGNhbiByZXByZXNlbnQgYQotICogcGFzcywgZmFpbHVyZSwgb3IgZXJyb3IuCi0gKgotICogQHBhcmFtIHRyIHRlc3QgcmVzdWx0IHRvIHJldHJpZXZlIHJlc3VsdCBmcm9tCi0gKgotICogQHJldHVybiByZXN1bHQgb2YgZ2l2ZW4gdGVzdAotICoKLSAqIEBzaW5jZSAwLjYuMAotICovCi1DS19ETExfRVhQIGludCBDS19FWFBPUlQgdHJfcnR5cGUgKFRlc3RSZXN1bHQgKiB0cik7Ci0KLS8qKgotICogUmV0cmlldmUgY29udGV4dCBpbiB3aGljaCB0aGUgcmVzdWx0IG9jY3VycmVkIGZvciB0aGUgZ2l2ZW4gdGVzdCByZXN1bHQuCi0gKgotICogVGhlIHR5cGVzIG9mIGNvbnRlbnRzIGluY2x1ZGUgdGhlIHRlc3Qgc2V0dXAsIHRlYXJkb3duLCBvciB0aGUKLSAqIGJvZHkgb2YgdGhlIHRlc3QgaXRzZWxmLgotICoKLSAqIEBwYXJhbSB0ciB0ZXN0IHJlc3VsdCB0byByZXRyaWV2ZSBjb250ZXh0IGZyb20KLSAqCi0gKiBAcmV0dXJuIGNvbnRleHQgdG8gd2hpY2ggdGhlIGdpdmVuIHRlc3QgcmVzdWx0IGFwcGxpZXMKLSAqCi0gKiBAc2luY2UgMC44LjAKLSAqLwotQ0tfRExMX0VYUCBlbnVtIGNrX3Jlc3VsdF9jdHggQ0tfRVhQT1JUIHRyX2N0eCAoVGVzdFJlc3VsdCAqIHRyKTsKLQotLyoqCi0gKiBSZXRyaWV2ZSBmYWlsdXJlIG1lc3NhZ2UgZnJvbSB0ZXN0IHJlc3VsdCwgaWYgYXBwbGljYWJsZS4KLSAqCi0gKiBAcmV0dXJuIHBvaW50ZXIgdG8gYSBtZXNzYWdlLCBpZiBvbmUgZXhpc3RzLiBOVUxMIG90aGVyd2lzZS4KLSAqCi0gKiBAc2luY2UgMC42LjAKLSAqLwotQ0tfRExMX0VYUCBjb25zdCBjaGFyICpDS19FWFBPUlQgdHJfbXNnIChUZXN0UmVzdWx0ICogdHIpOwotCi0vKioKLSAqIFJldHJpZXZlIGxpbmUgbnVtYmVyIGF0IHdoaWNoIGEgZmFpbHVyZSBvY2N1cnJlZCwgaWYgYXBwbGljYWJsZS4KLSAqCi0gKiBAcmV0dXJuIElmIHRoZSB0ZXN0IHJlc3VsdGVkIGluIGEgZmFpbHVyZSwgcmV0dXJucyB0aGUgbGluZSBudW1iZXIKLSAqICAgICAgICAgIHRoYXQgdGhlIGZhaWx1cmUgb2NjdXJyZWQgb247IG90aGVyd2lzZSByZXR1cm5zIC0xLgotICoKLSAqIEBzaW5jZSAwLjYuMAotICovCi1DS19ETExfRVhQIGludCBDS19FWFBPUlQgdHJfbG5vIChUZXN0UmVzdWx0ICogdHIpOwotCi0vKioKLSAqIFJldHJpZXZlIGZpbGUgbmFtZSBhdCB3aGljaCBhIGZhaWx1cmUgb2NjdXJyZWQsIGlmIGFwcGxpY2FibGUuCi0gKgotICogQHJldHVybiBJZiB0aGUgdGVzdCByZXN1bHRlZCBpbiBhIGZhaWx1cmUsIHJldHVybnMgYSBzdHJpbmcKLSAqICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hlcmUgdGhlIGZhaWx1cmUKLSAqICAgICAgICAgIG9jY3VycmVkOyBvdGhlcndpc2UgcmV0dXJucyBOVUxMLgotICoKLSAqIEBzaW5jZSAwLjYuMAotICovCi1DS19ETExfRVhQIGNvbnN0IGNoYXIgKkNLX0VYUE9SVCB0cl9sZmlsZSAoVGVzdFJlc3VsdCAqIHRyKTsKLQotLyoqCi0gKiBSZXRyaWV2ZSB0ZXN0IGNhc2UgbmFtZSBpbiB3aGljaCBhIGZhaWx1cmUgb2NjdXJyZWQsIGlmIGFwcGxpY2FibGUuCi0gKgotICogQHJldHVybiBJZiB0aGUgdGVzdCByZXN1bHRlZCBpbiBhIGZhaWx1cmUsIHJldHVybnMgYSBzdHJpbmcKLSAqICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHRlc3Qgc3VpdGUgd2hlcmUgdGhlIGZhaWx1cmUKLSAqICAgICAgICAgIG9jY3VycmVkOyBvdGhlcndpc2UgcmV0dXJucyBOVUxMLgotICoKLSAqIEBzaW5jZSAwLjYuMAotICovCi1DS19ETExfRVhQIGNvbnN0IGNoYXIgKkNLX0VYUE9SVCB0cl90Y25hbWUgKFRlc3RSZXN1bHQgKiB0cik7Ci0KLS8qKgotICogQ3JlYXRlcyBhIHN1aXRlIHJ1bm5lciBmb3IgdGhlIGdpdmVuIHN1aXRlLgotICoKLSAqIE9uY2UgY3JlYXRlZCwgYWRkaXRpb25hbCBzdWl0ZXMgY2FuIGJlIGFkZGVkIHRvIHRoZQotICogc3VpdGUgcnVubmVyIHVzaW5nIHNydW5uZXJfYWRkX3N1aXRlKCksIGFuZCB0aGUgc3VpdGUgcnVubmVyIGNhbiBiZQotICogcnVuIHdpdGggc3J1bm5lcl9ydW5fYWxsKCkuIE9uY2UgZmluaXNoZWQsIHRoZSBzdWl0ZSBydW5uZXIKLSAqIG11c3QgYmUgZnJlZWQgd2l0aCBzcnVubmVyX2ZyZWUoKS4KLSAqCi0gKiBAcGFyYW0gcyBzdWl0ZSB0byBnZW5lcmF0ZSBhIHN1aXRlIHJ1bm5lciBmb3IKLSAqCi0gKiBAcmV0dXJuIHN1aXRlIHJ1bm5lciBmb3IgdGhlIGdpdmVuIHN1aXRlCi0gKgotICogQHNpbmNlIDAuNi4wCi0gKi8KLUNLX0RMTF9FWFAgU1J1bm5lciAqQ0tfRVhQT1JUIHNydW5uZXJfY3JlYXRlIChTdWl0ZSAqIHMpOwotCi0vKioKLSAqIEFkZCBhbiBhZGRpdGlvbmFsIHN1aXRlIHRvIGEgc3VpdGUgcnVubmVyLgotICoKLSAqIFRoZSBmaXJzdCBzdWl0ZSBpbiBhIHN1aXRlIHJ1bm5lciBpcyBhbHdheXMgYWRkZWQgaW4gc3J1bm5lcl9jcmVhdGUoKS4KLSAqIFRoaXMgY2FsbCBhZGRzIGFkZGl0aW9uYWwgc3VpdGVzIHRvIGEgc3VpdGUgcnVubmVyLgotICoKLSAqIEBwYXJhbSBzciBzdWl0ZSBydW5uZXIgdG8gYWRkIHRoZSBnaXZlbiBzdWl0ZQotICogQHBhcmFtIHMgc3VpdGUgdG8gYWRkIHRvIHRoZSBnaXZlbiBzdWl0ZSBydW5uZXIKLSAqCi0gKiBAc2luY2UgMC43LjAKLSAqLwotQ0tfRExMX0VYUCB2b2lkIENLX0VYUE9SVCBzcnVubmVyX2FkZF9zdWl0ZSAoU1J1bm5lciAqIHNyLCBTdWl0ZSAqIHMpOwotCi0vKioKLSAqIEZyZWVzIGEgc3VpdGUgcnVubmVyLCBpbmNsdWRpbmcgYWxsIGNvbnRhaW5lZCBzdWl0ZSBhbmQgdGVzdCBjYXNlcy4KLSAqCi0gKiBUaGlzIGNhbGwgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYWxsIHJlc291cmNlcyByZWxhdGVkIHRvIGEKLSAqIHN1aXRlIHJ1bm5lciBhbmQgYWxsIGNvbnRhaW5lZCBzdWl0ZXMgYW5kIHRlc3QgY2FzZXMuIFN1aXRlIGFuZAotICogdGVzdCBjYXNlcyBuZWVkIG5vdCBiZSBmcmVlZCBpbmRpdmlkdWFsbHksIGFzIHRoaXMgY2FsbCBoYW5kbGVzIHRoYXQuCi0gKgotICogQHBhcmFtIHNyIHN1aXRlIHJ1bm5lciB0byBmcmVlCi0gKgotICogQHNpbmNlIDAuNi4wCi0gKi8KLUNLX0RMTF9FWFAgdm9pZCBDS19FWFBPUlQgc3J1bm5lcl9mcmVlIChTUnVubmVyICogc3IpOwotCi0vKioKLSAqIFJ1bnMgYSBzdWl0ZSBydW5uZXIgYW5kIGFsbCBjb250YWluZWQgc3VpdGUsIHByaW50aW5nIHJlc3VsdHMgdG8KLSAqIHN0ZG91dCBhcyBzcGVjaWZpZWQgYnkgdGhlIHByaW50X21vZGUuCi0gKgotICogSW4gYWRkaXRpb24gdG8gcnVubmluZyBhbGwgc3VpdGVzLCBpZiB0aGUgc3VpdGUgcnVubmVyIGhhcyBiZWVuCi0gKiBjb25maWd1cmVkIHRvIG91dHB1dCB0byBhIGxvZywgdGhhdCBpcyBhbHNvIHBlcmZvcm1lZC4KLSAqCi0gKiBOb3RlIHRoYXQgaWYgdGhlIENLX1JVTl9DQVNFIGFuZC9vciBDS19SVU5fU1VJVEUgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gKiBhcmUgZGVmaW5lZCwgdGhlbiBvbmx5IHRoZSBuYW1lZCBzdWl0ZSBhbmQvb3IgdGVzdCBjYXNlIGlzIHJ1bi4KLSAqCi0gKiBAcGFyYW0gc3Igc3VpdGUgcnVubmVyIHRvIHJ1biBhbGwgc3VpdGVzIGZyb20KLSAqIEBwYXJhbSBwcmludF9tb2RlIHRoZSB2ZXJib3NpdHkgaW4gd2hpY2ggdG8gcmVwb3J0IHJlc3VsdHMgdG8gc3Rkb3V0Ci0gKgotICogQHNpbmNlIDAuNi4wCi0gKi8KLUNLX0RMTF9FWFAgdm9pZCBDS19FWFBPUlQgc3J1bm5lcl9ydW5fYWxsIChTUnVubmVyICogc3IsCi0gICAgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7Ci0KLS8qKgotICogUnVuIGEgc3BlY2lmaWMgc3VpdGUgb3IgdGVzdCBjYXNlIGZyb20gYSBzdWl0ZSBydW5uZXIsIHByaW50aW5nIHJlc3VsdHMKLSAqIHRvIHN0ZG91dCBhcyBzcGVjaWZpZWQgYnkgdGhlIHByaW50X21vZGUuCi0gKgotICogSW4gYWRkaXRpb24gdG8gcnVubmluZyBhbnkgYXBwbGljYWJsZSBzdWl0ZXMgb3IgdGVzdCBjYXNlcywgaWYgdGhlCi0gKiBzdWl0ZSBydW5uZXIgaGFzIGJlZW4gY29uZmlndXJlZCB0byBvdXRwdXQgdG8gYSBsb2csIHRoYXQgaXMgYWxzbwotICogcGVyZm9ybWVkLgotICoKLSAqIEBwYXJhbSBzciBzdWl0ZSBydW5uZXIgd2hlcmUgdGhlIGdpdmVuIHN1aXRlIG9yIHRlc3QgY2FzZSBtdXN0IGJlCi0gKiBAcGFyYW0gc25hbWUgc3VpdGUgbmFtZSB0byBydW4uIEEgTlVMTCBtZWFucyAiYW55IHN1aXRlIi4KLSAqIEBwYXJhbSB0Y25hbWUgdGVzdCBjYXNlIG5hbWUgdG8gcnVuLiBBIE5VTEwgbWVhbnMgImFueSB0ZXN0IGNhc2UiCi0gKiBAcGFyYW0gcHJpbnRfbW9kZSB0aGUgdmVyYm9zaXR5IGluIHdoaWNoIHRvIHJlcG9ydCByZXN1bHRzIHRvIHN0ZG91dAotICoKLSAqIEBzaW5jZSAwLjkuOQotICovCi1DS19ETExfRVhQIHZvaWQgQ0tfRVhQT1JUIHNydW5uZXJfcnVuIChTUnVubmVyICogc3IsIGNvbnN0IGNoYXIgKnNuYW1lLAotICAgIGNvbnN0IGNoYXIgKnRjbmFtZSwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7Ci0KLQotLyoqCi0gKiBSZXRyaWV2ZSB0aGUgbnVtYmVyIG9mIGZhaWxlZCB0ZXN0cyBleGVjdXRlZCBieSBhIHN1aXRlIHJ1bm5lci4KLSAqCi0gKiBUaGlzIHZhbHVlIHJlcHJlc2VudHMgYm90aCB0ZXN0IGZhaWx1cmVzIGFuZCBlcnJvcnMuCi0gKgotICogQHBhcmFtIHNyIHN1aXRlIHJ1bm5lciB0byBxdWVyeSBmb3IgYWxsIGZhaWxlZCB0ZXN0cwotICoKLSAqIEByZXR1cm4gbnVtYmVyIG9mIHRlc3QgZmFpbHVyZXMgYW5kIGVycm9ycyBmb3VuZCBieSB0aGUgc3VpdGUgcnVubmVyCi0gKgotICogQHNpbmNlIDAuNi4xCi0gKi8KLUNLX0RMTF9FWFAgaW50IENLX0VYUE9SVCBzcnVubmVyX250ZXN0c19mYWlsZWQgKFNSdW5uZXIgKiBzcik7Ci0KLS8qKgotICogUmV0cmlldmUgdGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gYnkgYSBzdWl0ZSBydW5uZXIuCi0gKgotICogQHBhcmFtIHNyIHN1aXRlIHJ1bm5lciB0byBxdWVyeSBmb3IgYWxsIHRlc3RzIHJ1bgotICoKLSAqIEByZXR1cm4gbnVtYmVyIG9mIGFsbCB0ZXN0cyBydW4gYnkgdGhlIHN1aXRlIHJ1bm5lcgotICoKLSAqIEBzaW5jZSAwLjYuMQotICovCi1DS19ETExfRVhQIGludCBDS19FWFBPUlQgc3J1bm5lcl9udGVzdHNfcnVuIChTUnVubmVyICogc3IpOwotCi0vKioKLSAqIFJldHVybiBhbiBhcnJheSBvZiByZXN1bHRzIGZvciBhbGwgZmFpbHVyZXMgZm91bmQgYnkgYSBzdWl0ZSBydW5uZXIuCi0gKgotICogTnVtYmVyIG9mIHJlc3VsdHMgaXMgZXF1YWwgdG8gc3J1bm5lcl9uZmFpbGVkX3Rlc3RzKCkuCi0gKgotICogSW5mb3JtYXRpb24gYWJvdXQgaW5kaXZpZHVhbCByZXN1bHRzIGNhbiBiZSBxdWVyaWVkIHVzaW5nOgotICogdHJfcnR5cGUoKSwgdHJfY3R4KCksIHRyX21zZygpLCB0cl9sbm8oKSwgdHJfbGZpbGUoKSwgYW5kIHRyX3RjbmFtZSgpLgotICoKLSAqIE1lbW9yeSBpcyBtYWxsb2MnZWQgYW5kIG11c3QgYmUgZnJlZWQ7IGhvd2V2ZXIgZnJlZSB0aGUgZW50aXJlIHN0cnVjdHVyZQotICogaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMuCi0gKgotICogQHBhcmFtIHNyIHN1aXRlIHJ1bm5lciB0byByZXRyaWV2ZSByZXN1bHRzIGZyb20KLSAqCi0gKiBAcmV0dXJuIGFycmF5IG9mIFRlc3RSZXN1bHQgb2JqZWN0cwotICoKLSAqIEBzaW5jZSAwLjYuMAotICovCi1DS19ETExfRVhQIFRlc3RSZXN1bHQgKipDS19FWFBPUlQgc3J1bm5lcl9mYWlsdXJlcyAoU1J1bm5lciAqIHNyKTsKLQotLyoqCi0gKiBSZXR1cm4gYW4gYXJyYXkgb2YgcmVzdWx0cyBmb3IgYWxsIHRlc3RzIHJ1biBieSBhIHN1aXRlIHJ1bm5lci4KLSAqCi0gKiBOdW1iZXIgb2YgcmVzdWx0cyBpcyBlcXVhbCB0byBzcnVubmVyX250ZXN0c19ydW4oKSwgYW5kIGV4Y2x1ZGVzCi0gKiBmYWlsdXJlcyBkdWUgdG8gc2V0dXAgZnVuY3Rpb24gZmFpbHVyZS4KLSAqCi0gKiBJbmZvcm1hdGlvbiBhYm91dCBpbmRpdmlkdWFsIHJlc3VsdHMgY2FuIGJlIHF1ZXJpZWQgdXNpbmc6Ci0gKiB0cl9ydHlwZSgpLCB0cl9jdHgoKSwgdHJfbXNnKCksIHRyX2xubygpLCB0cl9sZmlsZSgpLCBhbmQgdHJfdGNuYW1lKCkuCi0gKgotICogTWVtb3J5IGlzIG1hbGxvYydlZCBhbmQgbXVzdCBiZSBmcmVlZDsgaG93ZXZlciBmcmVlIHRoZSBlbnRpcmUgc3RydWN0dXJlCi0gKiBpbnN0ZWFkIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcy4KLSAqCi0gKiBAcGFyYW0gc3Igc3VpdGUgcnVubmVyIHRvIHJldHJpZXZlIHJlc3VsdHMgZnJvbQotICoKLSAqIEByZXR1cm4gYXJyYXkgb2YgVGVzdFJlc3VsdCBvYmplY3RzCi0gKgotICogQHNpbmNlIDAuNi4xCi0qLwotQ0tfRExMX0VYUCBUZXN0UmVzdWx0ICoqQ0tfRVhQT1JUIHNydW5uZXJfcmVzdWx0cyAoU1J1bm5lciAqIHNyKTsKLQotLyoqCi0gKiBQcmludCB0aGUgcmVzdWx0cyBjb250YWluZWQgaW4gYW4gU1J1bm5lciB0byBzdGRvdXQuCi0gKgotICogQHBhcmFtIHNyIHN1aXRlIHJ1bm5lciB0byBwcmludCByZXN1bHRzIGZvciB0byBzdGRvdXQKLSAqIEBwYXJhbSBwcmludF9tb2RlIHRoZSBwcmludF9vdXRwdXQgKHZlcmJvc2l0eSkgdG8gdXNlIHRvIHJlcG9ydAotICogICAgICAgICB0aGUgcmVzdWx0Ci0gKgotICogQHNpbmNlIDAuNy4wCi0gKi8KLUNLX0RMTF9FWFAgdm9pZCBDS19FWFBPUlQgc3J1bm5lcl9wcmludCAoU1J1bm5lciAqIHNyLAotICAgIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpOwotCi0vKioKLSAqIFNldCB0aGUgc3VpdGUgcnVubmVyIHRvIG91dHB1dCB0aGUgcmVzdWx0IGluIGxvZyBmb3JtYXQgdG8gdGhlCi0gKiBnaXZlbiBmaWxlLgotICoKLSAqIE5vdGU6IGxvZyBmaWxlIHNldHRpbmcgaXMgYW4gaW5pdGlhbGl6ZSBvbmx5IG9wZXJhdGlvbiAtLSBpdCBzaG91bGQKLSAqIGJlIGRvbmUgaW1tZWRpYXRlbHkgYWZ0ZXIgU1J1bm5lciBjcmVhdGlvbiwgYW5kIHRoZSBsb2cgZmlsZSBjYW4ndCBiZQotICogY2hhbmdlZCBhZnRlciBiZWluZyBzZXQuCi0gKgotICogVGhpcyBzZXR0aW5nIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggdGhlIG90aGVyIGxvZyBvdXRwdXQgdHlwZXM7Ci0gKiBhbGwgbG9nZ2luZyB0eXBlcyBjYW4gb2NjdXIgY29uY3VycmVudGx5IGlmIGNvbmZpZ3VyZWQuCi0gKgotICogQHBhcmFtIHNyIHN1aXRlIHJ1bm5lciB0byBsb2cgcmVzdWx0cyBvZiBpbiBsb2cgZm9ybWF0Ci0gKiBAcGFyYW0gZm5hbWUgZmlsZSBuYW1lIHRvIG91dHB1dCBsb2cgcmVzdWx0cyB0bwotICoKLSAqIEBzaW5jZSAwLjcuMQotKi8KLUNLX0RMTF9FWFAgdm9pZCBDS19FWFBPUlQgc3J1bm5lcl9zZXRfbG9nIChTUnVubmVyICogc3IsIGNvbnN0IGNoYXIgKmZuYW1lKTsKLQotLyoqCi0gKiBDaGVja3MgaWYgdGhlIHN1aXRlIHJ1bm5lciBpcyBhc3NpZ25lZCBhIGZpbGUgZm9yIGxvZyBvdXRwdXQuCi0gKgotICogQHBhcmFtIHNyIHN1aXRlIHJ1bm5lciB0byBjaGVjawotICoKLSAqIEByZXR1cm4gMSBpZmYgdGhlIHN1aXRlIHJ1bm5lciBjdXJyZW50bHkgaXMgY29uZmlndXJlZCB0byBvdXRwdXQKLSAqICAgICAgICAgaW4gbG9nIGZvcm1hdDsgMCBvdGhlcndpc2UKLSAqCi0gKiBAc2luY2UgMC43LjEKLSAqLwotQ0tfRExMX0VYUCBpbnQgQ0tfRVhQT1JUIHNydW5uZXJfaGFzX2xvZyAoU1J1bm5lciAqIHNyKTsKLQotLyoqCi0gKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhc3NpZ25lZCBmaWxlCi0gKiBmb3IgbG9nIG91dHB1dCwgaWYgYW55IGV4aXN0cy4KLSAqCi0gKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZSwgb3IgTlVMTCBpZiBub25lIGlzIGNvbmZpZ3VyZWQKLSAqCi0gKiBAc2luY2UgMC43LjEKLSAqLwotQ0tfRExMX0VYUCBjb25zdCBjaGFyICpDS19FWFBPUlQgc3J1bm5lcl9sb2dfZm5hbWUgKFNSdW5uZXIgKiBzcik7Ci0KLS8qKgotICogU2V0IHRoZSBzdWl0ZSBydW5uZXIgdG8gb3V0cHV0IHRoZSByZXN1bHQgaW4gWE1MIGZvcm1hdCB0byB0aGUKLSAqIGdpdmVuIGZpbGUuCi0gKgotICogTm90ZTogWE1MIGZpbGUgc2V0dGluZyBpcyBhbiBpbml0aWFsaXplIG9ubHkgb3BlcmF0aW9uIC0tIGl0IHNob3VsZAotICogYmUgZG9uZSBpbW1lZGlhdGVseSBhZnRlciBTUnVubmVyIGNyZWF0aW9uLCBhbmQgdGhlIFhNTCBmaWxlIGNhbid0IGJlCi0gKiBjaGFuZ2VkIGFmdGVyIGJlaW5nIHNldC4KLSAqCi0gKiBUaGlzIHNldHRpbmcgZG9lcyBub3QgY29uZmxpY3Qgd2l0aCB0aGUgb3RoZXIgbG9nIG91dHB1dCB0eXBlczsKLSAqIGFsbCBsb2dnaW5nIHR5cGVzIGNhbiBvY2N1ciBjb25jdXJyZW50bHkgaWYgY29uZmlndXJlZC4KLSAqCi0gKiBAcGFyYW0gc3Igc3VpdGUgcnVubmVyIHRvIGxvZyByZXN1bHRzIG9mIGluIFhNTCBmb3JtYXQKLSAqIEBwYXJhbSBmbmFtZSBmaWxlIG5hbWUgdG8gb3V0cHV0IFhNTCByZXN1bHRzIHRvCi0gKgotICogQHNpbmNlIDAuOS4xCi0qLwotQ0tfRExMX0VYUCB2b2lkIENLX0VYUE9SVCBzcnVubmVyX3NldF94bWwgKFNSdW5uZXIgKiBzciwgY29uc3QgY2hhciAqZm5hbWUpOwotCi0vKioKLSAqIENoZWNrcyBpZiB0aGUgc3VpdGUgcnVubmVyIGlzIGFzc2lnbmVkIGEgZmlsZSBmb3IgWE1MIG91dHB1dC4KLSAqCi0gKiBAcGFyYW0gc3Igc3VpdGUgcnVubmVyIHRvIGNoZWNrCi0gKgotICogQHJldHVybiAxIGlmZiB0aGUgc3VpdGUgcnVubmVyIGN1cnJlbnRseSBpcyBjb25maWd1cmVkIHRvIG91dHB1dAotICogICAgICAgICBpbiBYTUwgZm9ybWF0OyAwIG90aGVyd2lzZQotICoKLSAqIEBzaW5jZSAwLjkuMQotICovCi1DS19ETExfRVhQIGludCBDS19FWFBPUlQgc3J1bm5lcl9oYXNfeG1sIChTUnVubmVyICogc3IpOwotCi0vKioKLSAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFzc2lnbmVkIGZpbGUKLSAqIGZvciBYTUwgb3V0cHV0LCBpZiBhbnkgZXhpc3RzLgotICoKLSAqIEByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIFhNTCBmaWxlLCBvciBOVUxMIGlmIG5vbmUgaXMgY29uZmlndXJlZAotICoKLSAqIEBzaW5jZSAwLjkuMQotICovCi1DS19ETExfRVhQIGNvbnN0IGNoYXIgKkNLX0VYUE9SVCBzcnVubmVyX3htbF9mbmFtZSAoU1J1bm5lciAqIHNyKTsKLQotLyoqCi0gKiBTZXQgdGhlIHN1aXRlIHJ1bm5lciB0byBvdXRwdXQgdGhlIHJlc3VsdCBpbiBUQVAgZm9ybWF0IHRvIHRoZQotICogZ2l2ZW4gZmlsZS4KLSAqCi0gKiBOb3RlOiBUQVAgZmlsZSBzZXR0aW5nIGlzIGFuIGluaXRpYWxpemUgb25seSBvcGVyYXRpb24gLS0gaXQgc2hvdWxkCi0gKiBiZSBkb25lIGltbWVkaWF0ZWx5IGFmdGVyIFNSdW5uZXIgY3JlYXRpb24sIGFuZCB0aGUgVEFQIGZpbGUgY2FuJ3QgYmUKLSAqIGNoYW5nZWQgYWZ0ZXIgYmVpbmcgc2V0LgotICoKLSAqIFRoaXMgc2V0dGluZyBkb2VzIG5vdCBjb25mbGljdCB3aXRoIHRoZSBvdGhlciBsb2cgb3V0cHV0IHR5cGVzOwotICogYWxsIGxvZ2dpbmcgdHlwZXMgY2FuIG9jY3VyIGNvbmN1cnJlbnRseSBpZiBjb25maWd1cmVkLgotICoKLSAqIEBwYXJhbSBzciBzdWl0ZSBydW5uZXIgdG8gbG9nIHJlc3VsdHMgb2YgaW4gVEFQIGZvcm1hdAotICogQHBhcmFtIGZuYW1lIGZpbGUgbmFtZSB0byBvdXRwdXQgVEFQIHJlc3VsdHMgdG8KLSAqCi0gKiBAc2luY2UgMC45LjEyCi0qLwotQ0tfRExMX0VYUCB2b2lkIENLX0VYUE9SVCBzcnVubmVyX3NldF90YXAgKFNSdW5uZXIgKiBzciwgY29uc3QgY2hhciAqZm5hbWUpOwotCi0vKioKLSAqIENoZWNrcyBpZiB0aGUgc3VpdGUgcnVubmVyIGlzIGFzc2lnbmVkIGEgZmlsZSBmb3IgVEFQIG91dHB1dC4KLSAqCi0gKiBAcGFyYW0gc3Igc3VpdGUgcnVubmVyIHRvIGNoZWNrCi0gKgotICogQHJldHVybiAxIGlmZiB0aGUgc3VpdGUgcnVubmVyIGN1cnJlbnRseSBpcyBjb25maWd1cmVkIHRvIG91dHB1dAotICogICAgICAgICBpbiBUQVAgZm9ybWF0OyAwIG90aGVyd2lzZQotICoKLSAqIEBzaW5jZSAwLjkuMTIKLSAqLwotQ0tfRExMX0VYUCBpbnQgQ0tfRVhQT1JUIHNydW5uZXJfaGFzX3RhcCAoU1J1bm5lciAqIHNyKTsKLQotLyoqCi0gKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhc3NpZ25lZCBmaWxlCi0gKiBmb3IgVEFQIG91dHB1dCwgaWYgYW55IGV4aXN0cy4KLSAqCi0gKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBUQVAgZmlsZSwgb3IgTlVMTCBpZiBub25lIGlzIGNvbmZpZ3VyZWQKLSAqCi0gKiBAc2luY2UgMC45LjEyCi0gKi8KLUNLX0RMTF9FWFAgY29uc3QgY2hhciAqQ0tfRVhQT1JUIHNydW5uZXJfdGFwX2ZuYW1lIChTUnVubmVyICogc3IpOwotCi0vKioKLSAqIEVudW0gZGVzY3JpYmluZyB0aGUgY3VycmVudCBmb3JrIHVzYWdlLgotICovCi1lbnVtIGZvcmtfc3RhdHVzCi17Ci0gIENLX0ZPUktfR0VURU5WLCAgICAgICAgICAgICAgIC8qKjwgbG9vayBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIENLX0ZPUksgKi8KLSAgQ0tfRk9SSywgICAgICAgICAgICAgICAgICAgICAgLyoqPCBjYWxsIGZvcmsgdG8gcnVuIHRlc3RzICovCi0gIENLX05PRk9SSyAgICAgICAgICAgICAgICAgICAgIC8qKjwgZG9uJ3QgY2FsbCBmb3JrICovCi19OwotCi0vKioKLSAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGZvcmsgc3RhdHVzIGZvciB0aGUgZ2l2ZW4gc3VpdGUgcnVubmVyCi0gKgotICogQHBhcmFtIHNyIHN1aXRlIHJ1bm5lciB0byBjaGVjayBmb3JrIHN0YXR1cyBvZgotICoKLSAqIEBzaW5jZSAwLjguMAotICovCi1DS19ETExfRVhQIGVudW0gZm9ya19zdGF0dXMgQ0tfRVhQT1JUIHNydW5uZXJfZm9ya19zdGF0dXMgKFNSdW5uZXIgKiBzcik7Ci0KLS8qKgotICogU2V0IHRoZSBmb3JrIHN0YXR1cyBmb3IgYSBnaXZlbiBzdWl0ZSBydW5uZXIuCi0gKgotICogVGhlIGRlZmF1bHQgZm9yayBzdGF0dXMgaXMgQ0tfRk9SS19HRVRFTlYsIHdoaWNoIHdpbGwgbG9vawotICogZm9yIHRoZSBDS19GT1JLIGVudmlyb25tZW50IHZhcmlhYmxlLCB3aGljaCBjYW4gYmUgc2V0IHRvCi0gKiAieWVzIiBvciAibm8iLiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHByZXNlbnQsCi0gKiBDS19GT1JLIHdpbGwgYmUgdXNlZCBpZiBmb3JrKCkgaXMgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0sCi0gKiBvdGhlcndpc2UgQ0tfTk9GT1JLIGlzIHVzZWQuCi0gKgotICogSWYgc2V0IHRvIENLX0ZPUksgb3IgQ0tfTk9GT1JLLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSAqIGlmIGRlZmluZWQgaXMgaWdub3JlZC4KLSAqCi0gKiBAcGFyYW0gc3Igc3VpdGUgcnVubmVyIHRvIGFzc2lnbiB0aGUgZm9yayBzdGF0dXMgdG8KLSAqIEBwYXJhbSBmc3RhdCBmb3JrIHN0YXR1cyB0byBhc3NpZ24KLSAqCi0gKiBAc2luY2UgMC44LjAKLSAqLwotQ0tfRExMX0VYUCB2b2lkIENLX0VYUE9SVCBzcnVubmVyX3NldF9mb3JrX3N0YXR1cyAoU1J1bm5lciAqIHNyLAotICAgIGVudW0gZm9ya19zdGF0dXMgZnN0YXQpOwotCi0vKioKLSAqIEludm9rZSBmb3JrKCkgZHVyaW5nIGEgdGVzdCBhbmQgYXNzaWduIHRoZSBjaGlsZCB0byB0aGUgc2FtZQotICogcHJvY2VzcyBncm91cCB0aGF0IHRoZSByZXN0IG9mIHRoZSB0ZXN0IGNhc2UgdXNlcy4KLSAqCi0gKiBPbmUgY2FuIGludm9rZSBmb3JrKCkgZGlyZWN0bHkgZHVyaW5nIGEgdGVzdDsgaG93ZXZlciBkb2luZyBzbwotICogbWF5IG5vdCBndWFyYW50ZWUgdGhhdCBhbnkgY2hpbGRyZW4gcHJvY2Vzc2VzIGFyZSBkZXN0cm95ZWQgb25jZQotICogdGhlIHRlc3QgZmluaXNoZXMuIE9uY2UgYSB0ZXN0IGhhcyBjb21wbGV0ZWQsIGFsbCBwcm9jZXNzZXMgaW4KLSAqIHRoZSBwcm9jZXNzIGdyb3VwIHdpbGwgYmUga2lsbGVkOyB1c2luZyB0aGlzIHdyYXBwZXIgd2lsbCBwcmV2ZW50Ci0gKiBvcnBoYW4gcHJvY2Vzc2VzLgotICoKLSAqIEByZXR1cm4gT24gc3VjY2VzcywgdGhlIFBJRCBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyByZXR1cm5lZCBpbgotICogICAgICAgICAgdGhlIHBhcmVudCwgYW5kIDAgaXMgcmV0dXJuZWQgaW4gdGhlIGNoaWxkLiAgT24gZmFpbHVyZSwKLSAqICAgICAgICAgIGFuIGVycm9yIHdpbGwgYmUgcHJpbnRlZCBhbmQgZXhpdCgpIGludm9rZWQuCi0gKgotICogQHNpbmNlIDAuOS4zCi0gKi8KLUNLX0RMTF9FWFAgcGlkX3QgQ0tfRVhQT1JUIGNoZWNrX2ZvcmsgKHZvaWQpOwotCi0vKioKLSAqIFdhaXQgZm9yIHRoZSBwaWQgYW5kIGV4aXQuCi0gKgotICogVGhpcyBpcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggY2hlY2tfZm9yaygpLiBXaGVuIGNhbGxlZCwKLSAqIHdpbGwgd2FpdCBmb3IgdGhlIGdpdmVuIHByb2Nlc3MgdG8gdGVybWluYXRlLiBJZiB0aGUgcHJvY2VzcwotICogZXhpdGVkIHdpdGhvdXQgZXJyb3IsIGV4aXQoRVhJVF9TVUNDRVNTKSBpcyBpbnZva2VkOyBvdGhlcndpc2UKLSAqIGV4aXQoRVhJVF9GQUlMVVJFKSBpcyBpbnZva2VkLgotICoKLSAqIEBwYXJhbSBwaWQgcHJvY2VzcyB0byB3YWl0IGZvciwgY3JlYXRlZCBieSBjaGVja19mb3JrKCkKLSAqCi0gKiBAc2luY2UgMC45LjMKLSAqLwotQ0tfRExMX0VYUCB2b2lkIENLX0VYUE9SVAotY2hlY2tfd2FpdHBpZF9hbmRfZXhpdCAocGlkX3QgcGlkKQotICAgIENLX0FUVFJJQlVURV9OT1JFVFVSTjsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1DS19DUFBFTkQKLSNlbmRpZgotI2VuZGlmIC8qIENIRUNLX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2Vycm9yLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWUxZGQxLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2Vycm9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQwotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibGliY29tcGF0LmgiCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c2V0am1wLmg+Ci0KLSNpbmNsdWRlICJjaGVja19lcnJvci5oIgotCi0vKioKLSAqIFN0b3JhZ2UgZm9yIHNldGptcC9sb25nam1wIGNvbnRleHQgaW5mb3JtYXRpb24gdXNlZCBpbiBOT0ZPUksgbW9kZQotICovCi1qbXBfYnVmIGVycm9yX2ptcF9idWZmZXI7Ci0KLQotLyogRklYTUU6IGluY2x1ZGluZyBhIGNvbG9uIGF0IHRoZSBlbmQgaXMgYSBiYWQgd2F5IHRvIGluZGljYXRlIGFuIGVycm9yICovCi12b2lkCi1lcHJpbnRmIChjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLQotICBmZmx1c2ggKHN0ZGVycik7Ci0KLSAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JWQ6ICIsIGZpbGUsIGxpbmUpOwotICB2YV9zdGFydCAoYXJncywgbGluZSk7Ci0gIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgLyppbmNsdWRlIHN5c3RlbSBlcnJvciBpbmZvcm1hdGlvbiBpZiBmb3JtYXQgZW5kcyBpbiBjb2xvbiAqLwotICBpZiAoZm10WzBdICE9ICdcMCcgJiYgZm10W3N0cmxlbiAoZm10KSAtIDFdID09ICc6JykKLSAgICBmcHJpbnRmIChzdGRlcnIsICIgJXMiLCBzdHJlcnJvciAoZXJybm8pKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLQotICBleGl0ICgyKTsKLX0KLQotdm9pZCAqCi1lbWFsbG9jIChzaXplX3QgbikKLXsKLSAgdm9pZCAqcDsKLQotICBwID0gbWFsbG9jIChuKTsKLSAgaWYgKHAgPT0gTlVMTCkKLSAgICBlcHJpbnRmICgibWFsbG9jIG9mICV1IGJ5dGVzIGZhaWxlZDoiLCBfX0ZJTEVfXywgX19MSU5FX18gLSAyLCBuKTsKLSAgcmV0dXJuIHA7Ci19Ci0KLXZvaWQgKgotZXJlYWxsb2MgKHZvaWQgKnB0ciwgc2l6ZV90IG4pCi17Ci0gIHZvaWQgKnA7Ci0KLSAgcCA9IHJlYWxsb2MgKHB0ciwgbik7Ci0gIGlmIChwID09IE5VTEwpCi0gICAgZXByaW50ZiAoInJlYWxsb2Mgb2YgJXUgYnl0ZXMgZmFpbGVkOiIsIF9fRklMRV9fLCBfX0xJTkVfXyAtIDIsIG4pOwotICByZXR1cm4gcDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2Vycm9yLmggYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19lcnJvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzFhN2ZkLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2Vycm9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQwotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEVSUk9SX0gKLSNkZWZpbmUgRVJST1JfSAotCi0jaW5jbHVkZSAibGliY29tcGF0LmgiCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0KLWV4dGVybiBqbXBfYnVmIGVycm9yX2ptcF9idWZmZXI7Ci0KLS8qIEluY2x1ZGUgc3RkbGliLmggYmVmb3JlaGFuZCAqLwotCi0vKiBQcmludCBlcnJvciBtZXNzYWdlIGFuZCBkaWUKLSAgIElmIGZtdCBlbmRzIGluIGNvbG9uLCBpbmNsdWRlIHN5c3RlbSBlcnJvciBpbmZvcm1hdGlvbiAqLwotdm9pZAotZXByaW50ZiAoY29uc3QgY2hhciAqZm10LCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgLi4uKQotICAgIENLX0FUVFJJQlVURV9OT1JFVFVSTjsKLS8qIG1hbGxvYyBvciBkaWUgKi8KLSAgICAgdm9pZCAqZW1hbGxvYyAoc2l6ZV90IG4pOwotICAgICB2b2lkICplcmVhbGxvYyAodm9pZCAqLCBzaXplX3Qgbik7Ci0KLSNlbmRpZiAvKkVSUk9SX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2ltcGwuaCBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX2ltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjYTdlOS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19pbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKLSAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIEFyaWVuIE1hbGVjCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENIRUNLX0lNUExfSAotI2RlZmluZSBDSEVDS19JTVBMX0gKLQotLyogVGhpcyBoZWFkZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGJ5IGFueSBtb2R1bGUgdGhhdCBuZWVkcwotICAgdG8ga25vdyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgY2hlY2sgc3RydWN0dXJlcwotICAgSW5jbHVkZSBzdGRpby5oLCB0aW1lLmgsICYgbGlzdC5oIGJlZm9yZSB0aGlzIGhlYWRlcgotKi8KLQotI2RlZmluZSBVU19QRVJfU0VDIDEwMDAwMDAKLSNkZWZpbmUgTkFOT1NfUEVSX1NFQ09ORFMgMTAwMDAwMDAwMAotCi0vKiogY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIHVzZWNvbmRzIG91dCBvZiB0d28gInN0cnVjdCB0aW1lc3BlYyJzICovCi0jZGVmaW5lIERJRkZfSU5fVVNFQyhiZWdpbiwgZW5kKSBcCi0gICggKCgoZW5kKS50dl9zZWMgLSAoYmVnaW4pLnR2X3NlYykgKiBVU19QRVJfU0VDKSArIFwKLSAgICAoKGVuZCkudHZfbnNlYy8xMDAwKSAtICgoYmVnaW4pLnR2X25zZWMvMTAwMCkgKQotCi10eXBlZGVmIHN0cnVjdCBURgotewotICBURnVuIGZuOwotICBpbnQgbG9vcF9zdGFydDsKLSAgaW50IGxvb3BfZW5kOwotICBjb25zdCBjaGFyICpuYW1lOwotICBpbnQgc2lnbmFsOwotICBzaWduZWQgY2hhciBhbGxvd2VkX2V4aXRfdmFsdWU7Ci19IFRGOwotCi1zdHJ1Y3QgU3VpdGUKLXsKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgTGlzdCAqdGNsc3Q7ICAgICAgICAgICAgICAgICAgLyogTGlzdCBvZiB0ZXN0IGNhc2VzICovCi19OwotCi10eXBlZGVmIHN0cnVjdCBGaXh0dXJlCi17Ci0gIGludCBpc2NoZWNrZWQ7Ci0gIFNGdW4gZnVuOwotfSBGaXh0dXJlOwotCi1zdHJ1Y3QgVENhc2UKLXsKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQ7Ci0gIExpc3QgKnRmbHN0OyAgICAgICAgICAgICAgICAgIC8qIGxpc3Qgb2YgdGVzdCBmdW5jdGlvbnMgKi8KLSAgTGlzdCAqdW5jaF9zZmxzdDsKLSAgTGlzdCAqdW5jaF90ZmxzdDsKLSAgTGlzdCAqY2hfc2Zsc3Q7Ci0gIExpc3QgKmNoX3RmbHN0OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgVGVzdFN0YXRzCi17Ci0gIGludCBuX2NoZWNrZWQ7Ci0gIGludCBuX2ZhaWxlZDsKLSAgaW50IG5fZXJyb3JzOwotfSBUZXN0U3RhdHM7Ci0KLXN0cnVjdCBUZXN0UmVzdWx0Ci17Ci0gIGVudW0gdGVzdF9yZXN1bHQgcnR5cGU7ICAgICAgIC8qIFR5cGUgb2YgcmVzdWx0ICovCi0gIGVudW0gY2tfcmVzdWx0X2N0eCBjdHg7ICAgICAgIC8qIFdoZW4gdGhlIHJlc3VsdCBvY2N1cnJlZCAqLwotICBjaGFyICpmaWxlOyAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHdoZXJlIHRoZSB0ZXN0IG9jY3VyZWQgKi8KLSAgaW50IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgLyogTGluZSBudW1iZXIgd2hlcmUgdGhlIHRlc3Qgb2NjdXJyZWQgKi8KLSAgaW50IGl0ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGl0ZXJhdGlvbiB2YWx1ZSBmb3IgbG9vcGluZyB0ZXN0cyAqLwotICBpbnQgZHVyYXRpb247ICAgICAgICAgICAgICAgICAvKiBkdXJhdGlvbiBvZiB0aGlzIHRlc3QgaW4gbWljcm9zZWNvbmRzICovCi0gIGNvbnN0IGNoYXIgKnRjbmFtZTsgICAgICAgICAgIC8qIFRlc3QgY2FzZSB0aGF0IGdlbmVyYXRlZCB0aGUgcmVzdWx0ICovCi0gIGNvbnN0IGNoYXIgKnRuYW1lOyAgICAgICAgICAgIC8qIFRlc3QgdGhhdCBnZW5lcmF0ZWQgdGhlIHJlc3VsdCAqLwotICBjaGFyICptc2c7ICAgICAgICAgICAgICAgICAgICAvKiBGYWlsdXJlIG1lc3NhZ2UgKi8KLX07Ci0KLVRlc3RSZXN1bHQgKnRyX2NyZWF0ZSAodm9pZCk7Ci12b2lkIHRyX3Jlc2V0IChUZXN0UmVzdWx0ICogdHIpOwotdm9pZCB0cl9mcmVlIChUZXN0UmVzdWx0ICogdHIpOwotCi1lbnVtIGNsX2V2ZW50Ci17Ci0gIENMSU5JVExPR19TUiwgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbG9nIGZpbGUgKi8KLSAgQ0xFTkRMT0dfU1IsICAgICAgICAgICAgICAgICAgLyogVGVzdHMgYXJlIGNvbXBsZXRlICovCi0gIENMU1RBUlRfU1IsICAgICAgICAgICAgICAgICAgIC8qIFN1aXRlIHJ1bm5lciBzdGFydCAqLwotICBDTFNUQVJUX1MsICAgICAgICAgICAgICAgICAgICAvKiBTdWl0ZSBzdGFydCAqLwotICBDTEVORF9TUiwgICAgICAgICAgICAgICAgICAgICAvKiBTdWl0ZSBydW5uZXIgZW5kICovCi0gIENMRU5EX1MsICAgICAgICAgICAgICAgICAgICAgIC8qIFN1aXRlIGVuZCAqLwotICBDTFNUQVJUX1QsICAgICAgICAgICAgICAgICAgICAvKiBBIHRlc3QgY2FzZSBpcyBhYm91dCB0byBydW4gKi8KLSAgQ0xFTkRfVCAgICAgICAgICAgICAgICAgICAgICAgLyogVGVzdCBjYXNlIGVuZCAqLwotfTsKLQotdHlwZWRlZiB2b2lkICgqTEZ1bikgKFNSdW5uZXIgKiwgRklMRSAqLCBlbnVtIHByaW50X291dHB1dCwKLSAgICB2b2lkICosIGVudW0gY2xfZXZlbnQpOwotCi10eXBlZGVmIHN0cnVjdCBMb2cKLXsKLSAgRklMRSAqbGZpbGU7Ci0gIExGdW4gbGZ1bjsKLSAgaW50IGNsb3NlOwotICBlbnVtIHByaW50X291dHB1dCBtb2RlOwotfSBMb2c7Ci0KLXN0cnVjdCBTUnVubmVyCi17Ci0gIExpc3QgKnNsc3Q7ICAgICAgICAgICAgICAgICAgIC8qIExpc3Qgb2YgU3VpdGUgb2JqZWN0cyAqLwotICBUZXN0U3RhdHMgKnN0YXRzOyAgICAgICAgICAgICAvKiBSdW4gc3RhdGlzdGljcyAqLwotICBMaXN0ICpyZXN1bHRsc3Q7ICAgICAgICAgICAgICAvKiBMaXN0IG9mIHVuaXQgdGVzdCByZXN1bHRzICovCi0gIGNvbnN0IGNoYXIgKmxvZ19mbmFtZTsgICAgICAgIC8qIG5hbWUgb2YgbG9nIGZpbGUgKi8KLSAgY29uc3QgY2hhciAqeG1sX2ZuYW1lOyAgICAgICAgLyogbmFtZSBvZiB4bWwgb3V0cHV0IGZpbGUgKi8KLSAgY29uc3QgY2hhciAqdGFwX2ZuYW1lOyAgICAgICAgLyogbmFtZSBvZiB0YXAgb3V0cHV0IGZpbGUgKi8KLSAgTGlzdCAqbG9nbHN0OyAgICAgICAgICAgICAgICAgLyogbGlzdCBvZiBMb2cgb2JqZWN0cyAqLwotICBlbnVtIGZvcmtfc3RhdHVzIGZzdGF0OyAgICAgICAvKiBjb250cm9scyBpZiBzdWl0ZXMgYXJlIGZvcmtlZCBvciBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogRG9uJ3QgdXNlIHRoaXMgdmFsdWUgZGlyZWN0bHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgdXNlIHNydW5uZXJfZm9ya19zdGF0dXMgKi8KLX07Ci0KLQotdm9pZCBzZXRfZm9ya19zdGF0dXMgKGVudW0gZm9ya19zdGF0dXMgZnN0YXQpOwotZW51bSBmb3JrX3N0YXR1cyBjdXJfZm9ya19zdGF0dXMgKHZvaWQpOwotCi1jbG9ja2lkX3QgY2hlY2tfZ2V0X2Nsb2NraWQgKHZvaWQpOwotCi0jZW5kaWYgLyogQ0hFQ0tfSU1QTF9IICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZTE5ZDguLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbGlzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0gKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQXJpZW4gTWFsZWMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJsaWJjb21wYXQuaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiY2hlY2tfbGlzdC5oIgotI2luY2x1ZGUgImNoZWNrX2Vycm9yLmgiCi0KLQotZW51bQotewotICBMSU5JVCA9IDEsCi0gIExHUk9XID0gMgotfTsKLQotc3RydWN0IExpc3QKLXsKLSAgdW5zaWduZWQgaW50IG5fZWx0czsKLSAgdW5zaWduZWQgaW50IG1heF9lbHRzOwotICBpbnQgY3VycmVudDsgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5vZGUgKi8KLSAgaW50IGxhc3Q7ICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB0aGUgbm9kZSBiZWZvcmUgRU5EICovCi0gIHZvaWQgKipkYXRhOwotfTsKLQotc3RhdGljIHZvaWQKLW1heWJlX2dyb3cgKExpc3QgKiBscCkKLXsKLSAgaWYgKGxwLT5uX2VsdHMgPj0gbHAtPm1heF9lbHRzKSB7Ci0gICAgbHAtPm1heF9lbHRzICo9IExHUk9XOwotICAgIGxwLT5kYXRhID0KLSAgICAgICAgKHZvaWQgKiopIGVyZWFsbG9jIChscC0+ZGF0YSwgbHAtPm1heF9lbHRzICogc2l6ZW9mIChscC0+ZGF0YVswXSkpOwotICB9Ci19Ci0KLUxpc3QgKgotY2hlY2tfbGlzdF9jcmVhdGUgKHZvaWQpCi17Ci0gIExpc3QgKmxwOwotCi0gIGxwID0gKExpc3QgKikgZW1hbGxvYyAoc2l6ZW9mIChMaXN0KSk7Ci0gIGxwLT5uX2VsdHMgPSAwOwotICBscC0+bWF4X2VsdHMgPSBMSU5JVDsKLSAgbHAtPmRhdGEgPSAodm9pZCAqKikgZW1hbGxvYyAoc2l6ZW9mIChscC0+ZGF0YVswXSkgKiBMSU5JVCk7Ci0gIGxwLT5jdXJyZW50ID0gbHAtPmxhc3QgPSAtMTsKLSAgcmV0dXJuIGxwOwotfQotCi12b2lkCi1jaGVja19saXN0X2FkZF9mcm9udCAoTGlzdCAqIGxwLCB2b2lkICp2YWwpCi17Ci0gIGlmIChscCA9PSBOVUxMKQotICAgIHJldHVybjsKLSAgbWF5YmVfZ3JvdyAobHApOwotICBtZW1tb3ZlIChscC0+ZGF0YSArIDEsIGxwLT5kYXRhLCBscC0+bl9lbHRzICogc2l6ZW9mIGxwLT5kYXRhWzBdKTsKLSAgbHAtPmxhc3QrKzsKLSAgbHAtPm5fZWx0cysrOwotICBscC0+Y3VycmVudCA9IDA7Ci0gIGxwLT5kYXRhW2xwLT5jdXJyZW50XSA9IHZhbDsKLX0KLQotdm9pZAotY2hlY2tfbGlzdF9hZGRfZW5kIChMaXN0ICogbHAsIHZvaWQgKnZhbCkKLXsKLSAgaWYgKGxwID09IE5VTEwpCi0gICAgcmV0dXJuOwotICBtYXliZV9ncm93IChscCk7Ci0gIGxwLT5sYXN0Kys7Ci0gIGxwLT5uX2VsdHMrKzsKLSAgbHAtPmN1cnJlbnQgPSBscC0+bGFzdDsKLSAgbHAtPmRhdGFbbHAtPmN1cnJlbnRdID0gdmFsOwotfQotCi1pbnQKLWNoZWNrX2xpc3RfYXRfZW5kIChMaXN0ICogbHApCi17Ci0gIGlmIChscC0+Y3VycmVudCA9PSAtMSkKLSAgICByZXR1cm4gMTsKLSAgZWxzZQotICAgIHJldHVybiAobHAtPmN1cnJlbnQgPiBscC0+bGFzdCk7Ci19Ci0KLXZvaWQKLWNoZWNrX2xpc3RfZnJvbnQgKExpc3QgKiBscCkKLXsKLSAgaWYgKGxwLT5jdXJyZW50ID09IC0xKQotICAgIHJldHVybjsKLSAgbHAtPmN1cnJlbnQgPSAwOwotfQotCi0KLXZvaWQKLWNoZWNrX2xpc3RfZnJlZSAoTGlzdCAqIGxwKQotewotICBpZiAobHAgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgZnJlZSAobHAtPmRhdGEpOwotICBmcmVlIChscCk7Ci19Ci0KLXZvaWQgKgotY2hlY2tfbGlzdF92YWwgKExpc3QgKiBscCkKLXsKLSAgaWYgKGxwID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGlmIChscC0+Y3VycmVudCA9PSAtMSB8fCBscC0+Y3VycmVudCA+IGxwLT5sYXN0KQotICAgIHJldHVybiBOVUxMOwotCi0gIHJldHVybiBscC0+ZGF0YVtscC0+Y3VycmVudF07Ci19Ci0KLXZvaWQKLWNoZWNrX2xpc3RfYWR2YW5jZSAoTGlzdCAqIGxwKQotewotICBpZiAobHAgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0gIGlmIChjaGVja19saXN0X2F0X2VuZCAobHApKQotICAgIHJldHVybjsKLSAgbHAtPmN1cnJlbnQrKzsKLX0KLQotCi12b2lkCi1jaGVja19saXN0X2FwcGx5IChMaXN0ICogbHAsIHZvaWQgKCpmcCkgKHZvaWQgKikpCi17Ci0gIGlmIChscCA9PSBOVUxMIHx8IGZwID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIGZvciAoY2hlY2tfbGlzdF9mcm9udCAobHApOyAhY2hlY2tfbGlzdF9hdF9lbmQgKGxwKTsgY2hlY2tfbGlzdF9hZHZhbmNlIChscCkpCi0gICAgZnAgKGNoZWNrX2xpc3RfdmFsIChscCkpOwotCi19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmggYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19saXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNzAxMTUuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBcmllbiBNYWxlYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBDSEVDS19MSVNUX0gKLSNkZWZpbmUgQ0hFQ0tfTElTVF9ICi0KLXR5cGVkZWYgc3RydWN0IExpc3QgTGlzdDsKLQotLyogQ3JlYXRlIGFuIGVtcHR5IGxpc3QgKi8KLUxpc3QgKmNoZWNrX2xpc3RfY3JlYXRlICh2b2lkKTsKLQotLyogSXMgbGlzdCBhdCBlbmQ/ICovCi1pbnQgY2hlY2tfbGlzdF9hdF9lbmQgKExpc3QgKiBscCk7Ci0KLS8qIFBvc2l0aW9uIGxpc3QgYXQgZnJvbnQgKi8KLXZvaWQgY2hlY2tfbGlzdF9mcm9udCAoTGlzdCAqIGxwKTsKLQotLyogQWRkIGEgdmFsdWUgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0LAotICAgcG9zaXRpb25pbmcgbmV3bHkgYWRkZWQgdmFsdWUgYXMgY3VycmVudCB2YWx1ZS4KLSAgIE1vcmUgZXhwZW5zaXZlIHRoYW4gbGlzdF9hZGRfZW5kLCBhcyBpdCB1c2VzIG1lbW1vdmUuICovCi12b2lkIGNoZWNrX2xpc3RfYWRkX2Zyb250IChMaXN0ICogbHAsIHZvaWQgKnZhbCk7Ci0KLS8qIEFkZCBhIHZhbHVlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QsCi0gICBwb3NpdGlvbmluZyBuZXdseSBhZGRlZCB2YWx1ZSBhcyBjdXJyZW50IHZhbHVlICovCi12b2lkIGNoZWNrX2xpc3RfYWRkX2VuZCAoTGlzdCAqIGxwLCB2b2lkICp2YWwpOwotCi0vKiBHaXZlIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBub2RlICovCi12b2lkICpjaGVja19saXN0X3ZhbCAoTGlzdCAqIGxwKTsKLQotLyogUG9zaXRpb24gdGhlIGxpc3QgYXQgdGhlIG5leHQgbm9kZSAqLwotdm9pZCBjaGVja19saXN0X2FkdmFuY2UgKExpc3QgKiBscCk7Ci0KLS8qIEZyZWUgYSBsaXN0LCBidXQgZG9uJ3QgZnJlZSB2YWx1ZXMgKi8KLXZvaWQgY2hlY2tfbGlzdF9mcmVlIChMaXN0ICogbHApOwotCi12b2lkIGNoZWNrX2xpc3RfYXBwbHkgKExpc3QgKiBscCwgdm9pZCAoKmZwKSAodm9pZCAqKSk7Ci0KLQotI2VuZGlmIC8qIENIRUNLX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ1YmI3OS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDU0OCArMCwwIEBACi0vKgotICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQwotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibGliY29tcGF0LmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGludGVybmFsLWNoZWNrLmg+Ci0jaWYgRU5BQkxFX1NVQlVOSVQKLSNpbmNsdWRlIDxzdWJ1bml0L2NoaWxkLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImNoZWNrX2Vycm9yLmgiCi0jaW5jbHVkZSAiY2hlY2tfbGlzdC5oIgotI2luY2x1ZGUgImNoZWNrX2ltcGwuaCIKLSNpbmNsdWRlICJjaGVja19sb2cuaCIKLSNpbmNsdWRlICJjaGVja19wcmludC5oIgotI2luY2x1ZGUgImNoZWNrX3N0ci5oIgotCi0vKgotICogSWYgYSBsb2cgZmlsZSBpcyBzcGVjaWZpZWQgdG8gYmUgIi0iLCB0aGVuIGluc3RlYWQgb2YKLSAqIG9wZW5pbmcgYSBmaWxlIHRoZSBsb2cgb3V0cHV0IGlzIHByaW50ZWQgdG8gc3Rkb3V0LgotICovCi0jZGVmaW5lIFNURE9VVF9PVkVSUklERV9MT0dfRklMRV9OQU1FICItIgotCi1zdGF0aWMgdm9pZCBzcnVubmVyX3NlbmRfZXZ0IChTUnVubmVyICogc3IsIHZvaWQgKm9iaiwgZW51bSBjbF9ldmVudCBldnQpOwotCi12b2lkCi1zcnVubmVyX3NldF9sb2cgKFNSdW5uZXIgKiBzciwgY29uc3QgY2hhciAqZm5hbWUpCi17Ci0gIGlmIChzci0+bG9nX2ZuYW1lKQotICAgIHJldHVybjsKLSAgc3ItPmxvZ19mbmFtZSA9IGZuYW1lOwotfQotCi1pbnQKLXNydW5uZXJfaGFzX2xvZyAoU1J1bm5lciAqIHNyKQotewotICByZXR1cm4gc3J1bm5lcl9sb2dfZm5hbWUgKHNyKSAhPSBOVUxMOwotfQotCi1jb25zdCBjaGFyICoKLXNydW5uZXJfbG9nX2ZuYW1lIChTUnVubmVyICogc3IpCi17Ci0gIC8qIGNoZWNrIGlmIGxvZyBmaWxlbmFtZSBoYXZlIGJlZW4gc2V0IGV4cGxpY2l0bHkgKi8KLSAgaWYgKHNyLT5sb2dfZm5hbWUgIT0gTlVMTCkKLSAgICByZXR1cm4gc3ItPmxvZ19mbmFtZTsKLQotICByZXR1cm4gZ2V0ZW52ICgiQ0tfTE9HX0ZJTEVfTkFNRSIpOwotfQotCi0KLXZvaWQKLXNydW5uZXJfc2V0X3htbCAoU1J1bm5lciAqIHNyLCBjb25zdCBjaGFyICpmbmFtZSkKLXsKLSAgaWYgKHNyLT54bWxfZm5hbWUpCi0gICAgcmV0dXJuOwotICBzci0+eG1sX2ZuYW1lID0gZm5hbWU7Ci19Ci0KLWludAotc3J1bm5lcl9oYXNfeG1sIChTUnVubmVyICogc3IpCi17Ci0gIHJldHVybiBzcnVubmVyX3htbF9mbmFtZSAoc3IpICE9IE5VTEw7Ci19Ci0KLWNvbnN0IGNoYXIgKgotc3J1bm5lcl94bWxfZm5hbWUgKFNSdW5uZXIgKiBzcikKLXsKLSAgLyogY2hlY2sgaWYgWE1MIGxvZyBmaWxlbmFtZSBoYXZlIGJlZW4gc2V0IGV4cGxpY2l0bHkgKi8KLSAgaWYgKHNyLT54bWxfZm5hbWUgIT0gTlVMTCkgewotICAgIHJldHVybiBzci0+eG1sX2ZuYW1lOwotICB9Ci0KLSAgcmV0dXJuIGdldGVudiAoIkNLX1hNTF9MT0dfRklMRV9OQU1FIik7Ci19Ci0KLXZvaWQKLXNydW5uZXJfc2V0X3RhcCAoU1J1bm5lciAqIHNyLCBjb25zdCBjaGFyICpmbmFtZSkKLXsKLSAgaWYgKHNyLT50YXBfZm5hbWUpCi0gICAgcmV0dXJuOwotICBzci0+dGFwX2ZuYW1lID0gZm5hbWU7Ci19Ci0KLWludAotc3J1bm5lcl9oYXNfdGFwIChTUnVubmVyICogc3IpCi17Ci0gIHJldHVybiBzcnVubmVyX3RhcF9mbmFtZSAoc3IpICE9IE5VTEw7Ci19Ci0KLWNvbnN0IGNoYXIgKgotc3J1bm5lcl90YXBfZm5hbWUgKFNSdW5uZXIgKiBzcikKLXsKLSAgLyogY2hlY2sgaWYgdGFwIGxvZyBmaWxlbmFtZSBoYXZlIGJlZW4gc2V0IGV4cGxpY2l0bHkgKi8KLSAgaWYgKHNyLT50YXBfZm5hbWUgIT0gTlVMTCkgewotICAgIHJldHVybiBzci0+dGFwX2ZuYW1lOwotICB9Ci0KLSAgcmV0dXJuIGdldGVudiAoIkNLX1RBUF9MT0dfRklMRV9OQU1FIik7Ci19Ci0KLXZvaWQKLXNydW5uZXJfcmVnaXN0ZXJfbGZ1biAoU1J1bm5lciAqIHNyLCBGSUxFICogbGZpbGUsIGludCBjbG9zZSwKLSAgICBMRnVuIGxmdW4sIGVudW0gcHJpbnRfb3V0cHV0IHByaW50bW9kZSkKLXsKLSAgTG9nICpsID0gKExvZyAqKSBlbWFsbG9jIChzaXplb2YgKExvZykpOwotCi0gIGlmIChwcmludG1vZGUgPT0gQ0tfRU5WKSB7Ci0gICAgcHJpbnRtb2RlID0gZ2V0X2Vudl9wcmludG1vZGUgKCk7Ci0gIH0KLQotICBsLT5sZmlsZSA9IGxmaWxlOwotICBsLT5sZnVuID0gbGZ1bjsKLSAgbC0+Y2xvc2UgPSBjbG9zZTsKLSAgbC0+bW9kZSA9IHByaW50bW9kZTsKLSAgY2hlY2tfbGlzdF9hZGRfZW5kIChzci0+bG9nbHN0LCBsKTsKLSAgcmV0dXJuOwotfQotCi12b2lkCi1sb2dfc3J1bm5lcl9zdGFydCAoU1J1bm5lciAqIHNyKQotewotICBzcnVubmVyX3NlbmRfZXZ0IChzciwgTlVMTCwgQ0xTVEFSVF9TUik7Ci19Ci0KLXZvaWQKLWxvZ19zcnVubmVyX2VuZCAoU1J1bm5lciAqIHNyKQotewotICBzcnVubmVyX3NlbmRfZXZ0IChzciwgTlVMTCwgQ0xFTkRfU1IpOwotfQotCi12b2lkCi1sb2dfc3VpdGVfc3RhcnQgKFNSdW5uZXIgKiBzciwgU3VpdGUgKiBzKQotewotICBzcnVubmVyX3NlbmRfZXZ0IChzciwgcywgQ0xTVEFSVF9TKTsKLX0KLQotdm9pZAotbG9nX3N1aXRlX2VuZCAoU1J1bm5lciAqIHNyLCBTdWl0ZSAqIHMpCi17Ci0gIHNydW5uZXJfc2VuZF9ldnQgKHNyLCBzLCBDTEVORF9TKTsKLX0KLQotdm9pZAotbG9nX3Rlc3Rfc3RhcnQgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0YywgVEYgKiB0ZnVuKQotewotICBjaGFyIGJ1ZmZlclsxMDBdOwotCi0gIHNucHJpbnRmIChidWZmZXIsIDk5LCAiJXM6JXMiLCB0Yy0+bmFtZSwgdGZ1bi0+bmFtZSk7Ci0gIHNydW5uZXJfc2VuZF9ldnQgKHNyLCBidWZmZXIsIENMU1RBUlRfVCk7Ci19Ci0KLXZvaWQKLWxvZ190ZXN0X2VuZCAoU1J1bm5lciAqIHNyLCBUZXN0UmVzdWx0ICogdHIpCi17Ci0gIHNydW5uZXJfc2VuZF9ldnQgKHNyLCB0ciwgQ0xFTkRfVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcnVubmVyX3NlbmRfZXZ0IChTUnVubmVyICogc3IsIHZvaWQgKm9iaiwgZW51bSBjbF9ldmVudCBldnQpCi17Ci0gIExpc3QgKmw7Ci0gIExvZyAqbGc7Ci0KLSAgbCA9IHNyLT5sb2dsc3Q7Ci0gIGZvciAoY2hlY2tfbGlzdF9mcm9udCAobCk7ICFjaGVja19saXN0X2F0X2VuZCAobCk7IGNoZWNrX2xpc3RfYWR2YW5jZSAobCkpIHsKLSAgICBsZyA9IChMb2cgKikgY2hlY2tfbGlzdF92YWwgKGwpOwotICAgIGZmbHVzaCAobGctPmxmaWxlKTsKLSAgICBsZy0+bGZ1biAoc3IsIGxnLT5sZmlsZSwgbGctPm1vZGUsIG9iaiwgZXZ0KTsKLSAgICBmZmx1c2ggKGxnLT5sZmlsZSk7Ci0gIH0KLX0KLQotdm9pZAotc3Rkb3V0X2xmdW4gKFNSdW5uZXIgKiBzciwgRklMRSAqIGZpbGUsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50bW9kZSwKLSAgICB2b2lkICpvYmosIGVudW0gY2xfZXZlbnQgZXZ0KQotewotICBTdWl0ZSAqczsKLQotICBzd2l0Y2ggKGV2dCkgewotICAgIGNhc2UgQ0xJTklUTE9HX1NSOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTEVORExPR19TUjoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xTVEFSVF9TUjoKLSAgICAgIGlmIChwcmludG1vZGUgPiBDS19TSUxFTlQpIHsKLSAgICAgICAgZnByaW50ZiAoZmlsZSwgIlJ1bm5pbmcgc3VpdGUocyk6Iik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMU1RBUlRfUzoKLSAgICAgIHMgPSAoU3VpdGUgKikgb2JqOwotICAgICAgaWYgKHByaW50bW9kZSA+IENLX1NJTEVOVCkgewotICAgICAgICBmcHJpbnRmIChmaWxlLCAiICVzXG4iLCBzLT5uYW1lKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xFTkRfU1I6Ci0gICAgICBpZiAocHJpbnRtb2RlID4gQ0tfU0lMRU5UKSB7Ci0gICAgICAgIC8qIHdlIGRvbid0IHdhbnQgYSBuZXdsaW5lIGJlZm9yZSBwcmludGluZyBoZXJlLCBuZXdsaW5lcyBzaG91bGQKLSAgICAgICAgICAgY29tZSBhZnRlciBwcmludGluZyBhIHN0cmluZywgbm90IGJlZm9yZS4gIGl0J3MgYmV0dGVyIHRvIGFkZAotICAgICAgICAgICB0aGUgbmV3bGluZSBhYm92ZSBpbiBDTFNUQVJUX1MuCi0gICAgICAgICAqLwotICAgICAgICBzcnVubmVyX2ZwcmludCAoZmlsZSwgc3IsIHByaW50bW9kZSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMRU5EX1M6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMU1RBUlRfVDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xFTkRfVDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBlcHJpbnRmICgiQmFkIGV2ZW50IHR5cGUgcmVjZWl2ZWQgaW4gc3Rkb3V0X2xmdW4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICB9Ci0KLQotfQotCi12b2lkCi1sZmlsZV9sZnVuIChTUnVubmVyICogc3IsIEZJTEUgKiBmaWxlLAotICAgIGVudW0gcHJpbnRfb3V0cHV0IHByaW50bW9kZSBDS19BVFRSSUJVVEVfVU5VU0VELCB2b2lkICpvYmosCi0gICAgZW51bSBjbF9ldmVudCBldnQpCi17Ci0gIFRlc3RSZXN1bHQgKnRyOwotICBTdWl0ZSAqczsKLQotICBzd2l0Y2ggKGV2dCkgewotICAgIGNhc2UgQ0xJTklUTE9HX1NSOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTEVORExPR19TUjoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xTVEFSVF9TUjoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xTVEFSVF9TOgotICAgICAgcyA9IChTdWl0ZSAqKSBvYmo7Ci0gICAgICBmcHJpbnRmIChmaWxlLCAiUnVubmluZyBzdWl0ZSAlc1xuIiwgcy0+bmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMRU5EX1NSOgotICAgICAgZnByaW50ZiAoZmlsZSwgIlJlc3VsdHMgZm9yIGFsbCBzdWl0ZXMgcnVuOlxuIik7Ci0gICAgICBzcnVubmVyX2ZwcmludCAoZmlsZSwgc3IsIENLX01JTklNQUwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTEVORF9TOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTFNUQVJUX1Q6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMRU5EX1Q6Ci0gICAgICB0ciA9IChUZXN0UmVzdWx0ICopIG9iajsKLSAgICAgIHRyX2ZwcmludCAoZmlsZSwgdHIsIENLX1ZFUkJPU0UpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGVwcmludGYgKCJCYWQgZXZlbnQgdHlwZSByZWNlaXZlZCBpbiBsZmlsZV9sZnVuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgfQotCi0KLX0KLQotdm9pZAoteG1sX2xmdW4gKFNSdW5uZXIgKiBzciBDS19BVFRSSUJVVEVfVU5VU0VELCBGSUxFICogZmlsZSwKLSAgICBlbnVtIHByaW50X291dHB1dCBwcmludG1vZGUgQ0tfQVRUUklCVVRFX1VOVVNFRCwgdm9pZCAqb2JqLAotICAgIGVudW0gY2xfZXZlbnQgZXZ0KQotewotICBUZXN0UmVzdWx0ICp0cjsKLSAgU3VpdGUgKnM7Ci0gIHN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdHNfc3RhcnQgPSB7IDAsIDAgfTsKLSAgc3RhdGljIGNoYXIgdFtzaXplb2YgInl5eXktbW0tZGQgaGg6bW06c3MiXSA9IHsgMCB9OwotCi0gIGlmICh0WzBdID09IDApIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCBpbml0dHY7Ci0gICAgc3RydWN0IHRtIG5vdzsKLQotICAgIGdldHRpbWVvZmRheSAoJmluaXR0diwgTlVMTCk7Ci0gICAgY2xvY2tfZ2V0dGltZSAoY2hlY2tfZ2V0X2Nsb2NraWQgKCksICZ0c19zdGFydCk7Ci0gICAgaWYgKGxvY2FsdGltZV9yICgoY29uc3QgdGltZV90ICopICYoaW5pdHR2LnR2X3NlYyksICZub3cpICE9IE5VTEwpIHsKLSAgICAgIHN0cmZ0aW1lICh0LCBzaXplb2YgKCJ5eXl5LW1tLWRkIGhoOm1tOnNzIiksICIlWS0lbS0lZCAlSDolTTolUyIsICZub3cpOwotICAgIH0KLSAgfQotCi0gIHN3aXRjaCAoZXZ0KSB7Ci0gICAgY2FzZSBDTElOSVRMT0dfU1I6Ci0gICAgICBmcHJpbnRmIChmaWxlLCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbiIpOwotICAgICAgZnByaW50ZiAoZmlsZSwKLSAgICAgICAgICAiPD94bWwtc3R5bGVzaGVldCB0eXBlPVwidGV4dC94c2xcIiBocmVmPVwiaHR0cDovL2NoZWNrLnNvdXJjZWZvcmdlLm5ldC94bWwvY2hlY2tfdW5pdHRlc3QueHNsdFwiPz5cbiIpOwotICAgICAgZnByaW50ZiAoZmlsZSwKLSAgICAgICAgICAiPHRlc3RzdWl0ZXMgeG1sbnM9XCJodHRwOi8vY2hlY2suc291cmNlZm9yZ2UubmV0L25zXCI+XG4iKTsKLSAgICAgIGZwcmludGYgKGZpbGUsICIgIDxkYXRldGltZT4lczwvZGF0ZXRpbWU+XG4iLCB0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xFTkRMT0dfU1I6Ci0gICAgewotICAgICAgc3RydWN0IHRpbWVzcGVjIHRzX2VuZCA9IHsgMCwgMCB9OwotICAgICAgdW5zaWduZWQgbG9uZyBkdXJhdGlvbjsKLQotICAgICAgLyogY2FsY3VsYXRlIHRpbWUgdGhlIHRlc3Qgd2VyZSBydW5uaW5nICovCi0gICAgICBjbG9ja19nZXR0aW1lIChjaGVja19nZXRfY2xvY2tpZCAoKSwgJnRzX2VuZCk7Ci0gICAgICBkdXJhdGlvbiA9ICh1bnNpZ25lZCBsb25nKSBESUZGX0lOX1VTRUMgKHRzX3N0YXJ0LCB0c19lbmQpOwotICAgICAgZnByaW50ZiAoZmlsZSwgIiAgPGR1cmF0aW9uPiVsdS4lMDZsdTwvZHVyYXRpb24+XG4iLAotICAgICAgICAgIGR1cmF0aW9uIC8gVVNfUEVSX1NFQywgZHVyYXRpb24gJSBVU19QRVJfU0VDKTsKLSAgICAgIGZwcmludGYgKGZpbGUsICI8L3Rlc3RzdWl0ZXM+XG4iKTsKLSAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMU1RBUlRfU1I6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMU1RBUlRfUzoKLSAgICAgIHMgPSAoU3VpdGUgKikgb2JqOwotICAgICAgZnByaW50ZiAoZmlsZSwgIiAgPHN1aXRlPlxuIik7Ci0gICAgICBmcHJpbnRmIChmaWxlLCAiICAgIDx0aXRsZT4iKTsKLSAgICAgIGZwcmludF94bWxfZXNjIChmaWxlLCBzLT5uYW1lKTsKLSAgICAgIGZwcmludGYgKGZpbGUsICI8L3RpdGxlPlxuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMRU5EX1NSOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTEVORF9TOgotICAgICAgZnByaW50ZiAoZmlsZSwgIiAgPC9zdWl0ZT5cbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTFNUQVJUX1Q6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMRU5EX1Q6Ci0gICAgICB0ciA9IChUZXN0UmVzdWx0ICopIG9iajsKLSAgICAgIHRyX3htbHByaW50IChmaWxlLCB0ciwgQ0tfVkVSQk9TRSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZXByaW50ZiAoIkJhZCBldmVudCB0eXBlIHJlY2VpdmVkIGluIHhtbF9sZnVuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgfQotCi19Ci0KLXZvaWQKLXRhcF9sZnVuIChTUnVubmVyICogc3IgQ0tfQVRUUklCVVRFX1VOVVNFRCwgRklMRSAqIGZpbGUsCi0gICAgZW51bSBwcmludF9vdXRwdXQgcHJpbnRtb2RlIENLX0FUVFJJQlVURV9VTlVTRUQsIHZvaWQgKm9iaiwKLSAgICBlbnVtIGNsX2V2ZW50IGV2dCkKLXsKLSAgVGVzdFJlc3VsdCAqdHI7Ci0KLSAgc3RhdGljIGludCBudW1fdGVzdHNfcnVuID0gMDsKLQotICBzd2l0Y2ggKGV2dCkgewotICAgIGNhc2UgQ0xJTklUTE9HX1NSOgotICAgICAgLyogQXMgdGhpcyBpcyBhIG5ldyBsb2cgZmlsZSwgcmVzZXQgdGhlIG51bWJlciBvZiB0ZXN0cyBleGVjdXRlZCAqLwotICAgICAgbnVtX3Rlc3RzX3J1biA9IDA7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMRU5ETE9HX1NSOgotICAgICAgLyogT3V0cHV0IHRoZSB0ZXN0IHBsYW4gYXMgdGhlIGxhc3QgbGluZSAqLwotICAgICAgZnByaW50ZiAoZmlsZSwgIjEuLiVkXG4iLCBudW1fdGVzdHNfcnVuKTsKLSAgICAgIGZmbHVzaCAoZmlsZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMU1RBUlRfU1I6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMU1RBUlRfUzoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xFTkRfU1I6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMRU5EX1M6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMU1RBUlRfVDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xFTkRfVDoKLSAgICAgIC8qIFByaW50IHRoZSB0ZXN0IHJlc3VsdCB0byB0aGUgdGFwIGZpbGUgKi8KLSAgICAgIG51bV90ZXN0c19ydW4gKz0gMTsKLSAgICAgIHRyID0gKFRlc3RSZXN1bHQgKikgb2JqOwotICAgICAgZnByaW50ZiAoZmlsZSwgIiVzICVkIC0gJXM6JXM6JXM6ICVzXG4iLAotICAgICAgICAgIHRyLT5ydHlwZSA9PSBDS19QQVNTID8gIm9rIiA6ICJub3Qgb2siLCBudW1fdGVzdHNfcnVuLAotICAgICAgICAgIHRyLT5maWxlLCB0ci0+dGNuYW1lLCB0ci0+dG5hbWUsIHRyLT5tc2cpOwotICAgICAgZmZsdXNoIChmaWxlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBlcHJpbnRmICgiQmFkIGV2ZW50IHR5cGUgcmVjZWl2ZWQgaW4gdGFwX2xmdW4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICB9Ci19Ci0KLSNpZiBFTkFCTEVfU1VCVU5JVAotdm9pZAotc3VidW5pdF9sZnVuIChTUnVubmVyICogc3IsIEZJTEUgKiBmaWxlLCBlbnVtIHByaW50X291dHB1dCBwcmludG1vZGUsCi0gICAgdm9pZCAqb2JqLCBlbnVtIGNsX2V2ZW50IGV2dCkKLXsKLSAgVGVzdFJlc3VsdCAqdHI7Ci0gIGNoYXIgY29uc3QgKm5hbWU7Ci0KLSAgLyogYXNzZXJ0KHByaW50bW9kZSA9PSBDS19TVUJVTklUKTsgKi8KLQotICBzd2l0Y2ggKGV2dCkgewotICAgIGNhc2UgQ0xJTklUTE9HX1NSOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTEVORExPR19TUjoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xTVEFSVF9TUjoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xTVEFSVF9TOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTEVORF9TUjoKLSAgICAgIGlmIChwcmludG1vZGUgPiBDS19TSUxFTlQpIHsKLSAgICAgICAgZnByaW50ZiAoZmlsZSwgIlxuIik7Ci0gICAgICAgIHNydW5uZXJfZnByaW50IChmaWxlLCBzciwgcHJpbnRtb2RlKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xFTkRfUzoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0xTVEFSVF9UOgotICAgICAgbmFtZSA9IChjb25zdCBjaGFyICopIG9iajsKLSAgICAgIHN1YnVuaXRfdGVzdF9zdGFydCAobmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENMRU5EX1Q6Ci0gICAgICB0ciA9IChUZXN0UmVzdWx0ICopIG9iajsKLSAgICAgIHsKLSAgICAgICAgY2hhciAqbmFtZSA9IGNrX3N0cmR1cF9wcmludGYgKCIlczolcyIsIHRyLT50Y25hbWUsIHRyLT50bmFtZSk7Ci0gICAgICAgIGNoYXIgKm1zZyA9IHRyX3Nob3J0X3N0ciAodHIpOwotCi0gICAgICAgIHN3aXRjaCAodHItPnJ0eXBlKSB7Ci0gICAgICAgICAgY2FzZSBDS19QQVNTOgotICAgICAgICAgICAgc3VidW5pdF90ZXN0X3Bhc3MgKG5hbWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDS19GQUlMVVJFOgotICAgICAgICAgICAgc3VidW5pdF90ZXN0X2ZhaWwgKG5hbWUsIG1zZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIENLX0VSUk9SOgotICAgICAgICAgICAgc3VidW5pdF90ZXN0X2Vycm9yIChuYW1lLCBtc2cpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBDS19URVNUX1JFU1VMVF9JTlZBTElEOgotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcHJpbnRmICgiQmFkIHJlc3VsdCB0eXBlIGluIHN1YnVuaXRfbGZ1biIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgICAgICBmcmVlIChuYW1lKTsKLSAgICAgICAgICAgIGZyZWUgKG1zZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBlcHJpbnRmICgiQmFkIGV2ZW50IHR5cGUgcmVjZWl2ZWQgaW4gc3VidW5pdF9sZnVuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgfQotfQotI2VuZGlmCi0KLXN0YXRpYyBGSUxFICoKLXNydW5uZXJfb3Blbl9maWxlIChjb25zdCBjaGFyICpmaWxlbmFtZSkKLXsKLSAgRklMRSAqZiA9IE5VTEw7Ci0KLSAgaWYgKHN0cmNtcCAoZmlsZW5hbWUsIFNURE9VVF9PVkVSUklERV9MT0dfRklMRV9OQU1FKSA9PSAwKSB7Ci0gICAgZiA9IHN0ZG91dDsKLSAgfSBlbHNlIHsKLSAgICBmID0gZm9wZW4gKGZpbGVuYW1lLCAidyIpOwotICAgIGlmIChmID09IE5VTEwpIHsKLSAgICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIGZvcGVuIHdoaWxlIG9wZW5pbmcgZmlsZSAlczoiLCBfX0ZJTEVfXywKLSAgICAgICAgICBfX0xJTkVfXyAtIDIsIGZpbGVuYW1lKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGY7Ci19Ci0KLUZJTEUgKgotc3J1bm5lcl9vcGVuX2xmaWxlIChTUnVubmVyICogc3IpCi17Ci0gIEZJTEUgKmYgPSBOVUxMOwotCi0gIGlmIChzcnVubmVyX2hhc19sb2cgKHNyKSkgewotICAgIGYgPSBzcnVubmVyX29wZW5fZmlsZSAoc3J1bm5lcl9sb2dfZm5hbWUgKHNyKSk7Ci0gIH0KLSAgcmV0dXJuIGY7Ci19Ci0KLUZJTEUgKgotc3J1bm5lcl9vcGVuX3htbGZpbGUgKFNSdW5uZXIgKiBzcikKLXsKLSAgRklMRSAqZiA9IE5VTEw7Ci0KLSAgaWYgKHNydW5uZXJfaGFzX3htbCAoc3IpKSB7Ci0gICAgZiA9IHNydW5uZXJfb3Blbl9maWxlIChzcnVubmVyX3htbF9mbmFtZSAoc3IpKTsKLSAgfQotICByZXR1cm4gZjsKLX0KLQotRklMRSAqCi1zcnVubmVyX29wZW5fdGFwZmlsZSAoU1J1bm5lciAqIHNyKQotewotICBGSUxFICpmID0gTlVMTDsKLQotICBpZiAoc3J1bm5lcl9oYXNfdGFwIChzcikpIHsKLSAgICBmID0gc3J1bm5lcl9vcGVuX2ZpbGUgKHNydW5uZXJfdGFwX2ZuYW1lIChzcikpOwotICB9Ci0gIHJldHVybiBmOwotfQotCi12b2lkCi1zcnVubmVyX2luaXRfbG9nZ2luZyAoU1J1bm5lciAqIHNyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKQotewotICBGSUxFICpmOwotCi0gIHNyLT5sb2dsc3QgPSBjaGVja19saXN0X2NyZWF0ZSAoKTsKLSNpZiBFTkFCTEVfU1VCVU5JVAotICBpZiAocHJpbnRfbW9kZSAhPSBDS19TVUJVTklUKQotI2VuZGlmCi0gICAgc3J1bm5lcl9yZWdpc3Rlcl9sZnVuIChzciwgc3Rkb3V0LCAwLCBzdGRvdXRfbGZ1biwgcHJpbnRfbW9kZSk7Ci0jaWYgRU5BQkxFX1NVQlVOSVQKLSAgZWxzZQotICAgIHNydW5uZXJfcmVnaXN0ZXJfbGZ1biAoc3IsIHN0ZG91dCwgMCwgc3VidW5pdF9sZnVuLCBwcmludF9tb2RlKTsKLSNlbmRpZgotICBmID0gc3J1bm5lcl9vcGVuX2xmaWxlIChzcik7Ci0gIGlmIChmKSB7Ci0gICAgc3J1bm5lcl9yZWdpc3Rlcl9sZnVuIChzciwgZiwgZiAhPSBzdGRvdXQsIGxmaWxlX2xmdW4sIHByaW50X21vZGUpOwotICB9Ci0gIGYgPSBzcnVubmVyX29wZW5feG1sZmlsZSAoc3IpOwotICBpZiAoZikgewotICAgIHNydW5uZXJfcmVnaXN0ZXJfbGZ1biAoc3IsIGYsIGYgIT0gc3Rkb3V0LCB4bWxfbGZ1biwgcHJpbnRfbW9kZSk7Ci0gIH0KLSAgZiA9IHNydW5uZXJfb3Blbl90YXBmaWxlIChzcik7Ci0gIGlmIChmKSB7Ci0gICAgc3J1bm5lcl9yZWdpc3Rlcl9sZnVuIChzciwgZiwgZiAhPSBzdGRvdXQsIHRhcF9sZnVuLCBwcmludF9tb2RlKTsKLSAgfQotICBzcnVubmVyX3NlbmRfZXZ0IChzciwgTlVMTCwgQ0xJTklUTE9HX1NSKTsKLX0KLQotdm9pZAotc3J1bm5lcl9lbmRfbG9nZ2luZyAoU1J1bm5lciAqIHNyKQotewotICBMaXN0ICpsOwotICBpbnQgcnZhbDsKLQotICBzcnVubmVyX3NlbmRfZXZ0IChzciwgTlVMTCwgQ0xFTkRMT0dfU1IpOwotCi0gIGwgPSBzci0+bG9nbHN0OwotICBmb3IgKGNoZWNrX2xpc3RfZnJvbnQgKGwpOyAhY2hlY2tfbGlzdF9hdF9lbmQgKGwpOyBjaGVja19saXN0X2FkdmFuY2UgKGwpKSB7Ci0gICAgTG9nICpsZyA9IChMb2cgKikgY2hlY2tfbGlzdF92YWwgKGwpOwotCi0gICAgaWYgKGxnLT5jbG9zZSkgewotICAgICAgcnZhbCA9IGZjbG9zZSAobGctPmxmaWxlKTsKLSAgICAgIGlmIChydmFsICE9IDApCi0gICAgICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIGZjbG9zZSB3aGlsZSBjbG9zaW5nIGxvZyBmaWxlOiIsCi0gICAgICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18gLSAyKTsKLSAgICB9Ci0gICAgZnJlZSAobGcpOwotICB9Ci0gIGNoZWNrX2xpc3RfZnJlZSAobCk7Ci0gIHNyLT5sb2dsc3QgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfbG9nLmggYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU3OGE5MC4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19sb2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBBcmllbiBNYWxlYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBDSEVDS19MT0dfSAotI2RlZmluZSBDSEVDS19MT0dfSAotCi12b2lkIGxvZ19zcnVubmVyX3N0YXJ0IChTUnVubmVyICogc3IpOwotdm9pZCBsb2dfc3J1bm5lcl9lbmQgKFNSdW5uZXIgKiBzcik7Ci12b2lkIGxvZ19zdWl0ZV9zdGFydCAoU1J1bm5lciAqIHNyLCBTdWl0ZSAqIHMpOwotdm9pZCBsb2dfc3VpdGVfZW5kIChTUnVubmVyICogc3IsIFN1aXRlICogcyk7Ci12b2lkIGxvZ190ZXN0X2VuZCAoU1J1bm5lciAqIHNyLCBUZXN0UmVzdWx0ICogdHIpOwotdm9pZCBsb2dfdGVzdF9zdGFydCAoU1J1bm5lciAqIHNyLCBUQ2FzZSAqIHRjLCBURiAqIHRmdW4pOwotCi12b2lkIHN0ZG91dF9sZnVuIChTUnVubmVyICogc3IsIEZJTEUgKiBmaWxlLCBlbnVtIHByaW50X291dHB1dCwKLSAgICB2b2lkICpvYmosIGVudW0gY2xfZXZlbnQgZXZ0KTsKLQotdm9pZCBsZmlsZV9sZnVuIChTUnVubmVyICogc3IsIEZJTEUgKiBmaWxlLCBlbnVtIHByaW50X291dHB1dCwKLSAgICB2b2lkICpvYmosIGVudW0gY2xfZXZlbnQgZXZ0KTsKLQotdm9pZCB4bWxfbGZ1biAoU1J1bm5lciAqIHNyLCBGSUxFICogZmlsZSwgZW51bSBwcmludF9vdXRwdXQsCi0gICAgdm9pZCAqb2JqLCBlbnVtIGNsX2V2ZW50IGV2dCk7Ci0KLXZvaWQgdGFwX2xmdW4gKFNSdW5uZXIgKiBzciwgRklMRSAqIGZpbGUsIGVudW0gcHJpbnRfb3V0cHV0LAotICAgIHZvaWQgKm9iaiwgZW51bSBjbF9ldmVudCBldnQpOwotCi12b2lkIHN1YnVuaXRfbGZ1biAoU1J1bm5lciAqIHNyLCBGSUxFICogZmlsZSwgZW51bSBwcmludF9vdXRwdXQsCi0gICAgdm9pZCAqb2JqLCBlbnVtIGNsX2V2ZW50IGV2dCk7Ci0KLXZvaWQgc3J1bm5lcl9yZWdpc3Rlcl9sZnVuIChTUnVubmVyICogc3IsIEZJTEUgKiBsZmlsZSwgaW50IGNsb3NlLAotICAgIExGdW4gbGZ1biwgZW51bSBwcmludF9vdXRwdXQpOwotCi1GSUxFICpzcnVubmVyX29wZW5fbGZpbGUgKFNSdW5uZXIgKiBzcik7Ci1GSUxFICpzcnVubmVyX29wZW5feG1sZmlsZSAoU1J1bm5lciAqIHNyKTsKLUZJTEUgKnNydW5uZXJfb3Blbl90YXBmaWxlIChTUnVubmVyICogc3IpOwotdm9pZCBzcnVubmVyX2luaXRfbG9nZ2luZyAoU1J1bm5lciAqIHNyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKTsKLXZvaWQgc3J1bm5lcl9lbmRfbG9nZ2luZyAoU1J1bm5lciAqIHNyKTsKLQotI2VuZGlmIC8qIENIRUNLX0xPR19IICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuYyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzZjMThiLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzA4ICswLDAgQEAKLS8qCi0gKiBDaGVjazogYSB1bml0IHRlc3QgZnJhbWV3b3JrIGZvciBDCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgMjAwMiwgQXJpZW4gTWFsZWMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJsaWJjb21wYXQuaCIKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgImNoZWNrX2Vycm9yLmgiCi0jaW5jbHVkZSAiaW50ZXJuYWwtY2hlY2suaCIKLSNpbmNsdWRlICJjaGVja19saXN0LmgiCi0jaW5jbHVkZSAiY2hlY2tfaW1wbC5oIgotI2luY2x1ZGUgImNoZWNrX21zZy5oIgotI2luY2x1ZGUgImNoZWNrX3BhY2suaCIKLSNpbmNsdWRlICJjaGVja19zdHIuaCIKLQotCi0vKiAnUGlwZScgaXMgaW1wbGVtZW50ZWQgYXMgYSB0ZW1wb3JhcnkgZmlsZSB0byBvdmVyY29tZSBtZXNzYWdlCi0gKiB2b2x1bWUgbGltaXRhdGlvbnMgb3V0bGluZWQgaW4gYnVnICM0ODIwMTIuIFRoaXMgc2NoZW1lIHdvcmtzIHdlbGwKLSAqIHdpdGggdGhlIGV4aXN0aW5nIHVzYWdlIHdoZXJlaW4gdGhlIHBhcmVudCBkb2VzIG5vdCBiZWdpbiByZWFkaW5nCi0gKiB1bnRpbCB0aGUgY2hpbGQgaGFzIGRvbmUgd3JpdGluZyBhbmQgZXhpdGVkLgotICoKLSAqIFBpcGUgbGlmZSBjeWNsZToKLSAqIC0gVGhlIHBhcmVudCBjcmVhdGVzIGEgdG1wZmlsZSgpLgotICogLSBUaGUgZm9yaygpIGNhbGwgaGFzIHRoZSBlZmZlY3Qgb2YgZHVwbGljYXRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvcgotICogICBhbmQgY29weWluZyAob24gd3JpdGUpIHRoZSBGSUxFKiBkYXRhIHN0cnVjdHVyZXMuCi0gKiAtIFRoZSBjaGlsZCB3cml0ZXMgdG8gdGhlIGZpbGUsIGFuZCBpdHMgZHVwJ2VkIGZpbGUgZGVzY3JpcHRvciBhbmQKLSAqICAgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjbGVhbmVkIHVwIG9uIGNoaWxkIHByb2Nlc3MgZXhpdC4KLSAqIC0gQmVmb3JlIHJlYWRpbmcsIHRoZSBwYXJlbnQgcmV3aW5kKCkncyB0aGUgZmlsZSB0byByZXNldCBib3RoCi0gKiAgIEZJTEUqIGFuZCB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBsb2NhdGlvbiBkYXRhLgotICogLSBXaGVuIGZpbmlzaGVkLCB0aGUgcGFyZW50IGZjbG9zZSgpJ3MgdGhlIEZJTEUqLCBkZWxldGluZyB0aGUKLSAqICAgdGVtcG9yYXJ5IGZpbGUsIHBlciB0bXBmaWxlKCkncyBzZW1hbnRpY3MuCi0gKgotICogVGhpcyBzY2hlbWUgbWF5IGJyZWFrIGRvd24gaWYgdGhlIHVzYWdlIGNoYW5nZXMgdG8gYXN5bmNocm9ub3VzCi0gKiByZWFkaW5nIGFuZCB3cml0aW5nLgotICovCi0KLXN0YXRpYyBGSUxFICpzZW5kX2ZpbGUxOwotc3RhdGljIGNoYXIgKnNlbmRfZmlsZTFfbmFtZTsKLXN0YXRpYyBGSUxFICpzZW5kX2ZpbGUyOwotc3RhdGljIGNoYXIgKnNlbmRfZmlsZTJfbmFtZTsKLQotc3RhdGljIEZJTEUgKmdldF9waXBlICh2b2lkKTsKLXN0YXRpYyB2b2lkIHNldHVwX3BpcGUgKHZvaWQpOwotc3RhdGljIHZvaWQgdGVhcmRvd25fcGlwZSAodm9pZCk7Ci1zdGF0aWMgVGVzdFJlc3VsdCAqY29uc3RydWN0X3Rlc3RfcmVzdWx0IChSY3ZNc2cgKiBybXNnLCBpbnQgd2FzZXJyb3IpOwotc3RhdGljIHZvaWQgdHJfc2V0X2xvY19ieV9jdHggKFRlc3RSZXN1bHQgKiB0ciwgZW51bSBja19yZXN1bHRfY3R4IGN0eCwKLSAgICBSY3ZNc2cgKiBybXNnKTsKLXN0YXRpYyBGSUxFICoKLWdldF9waXBlICh2b2lkKQotewotICBpZiAoc2VuZF9maWxlMiAhPSAwKSB7Ci0gICAgcmV0dXJuIHNlbmRfZmlsZTI7Ci0gIH0KLQotICBpZiAoc2VuZF9maWxlMSAhPSAwKSB7Ci0gICAgcmV0dXJuIHNlbmRfZmlsZTE7Ci0gIH0KLQotICBlcHJpbnRmICgiTm8gbWVzc2FnaW5nIHNldHVwIiwgX19GSUxFX18sIF9fTElORV9fKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZAotc2VuZF9mYWlsdXJlX2luZm8gKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgRmFpbE1zZyBmbXNnOwotCi0gIGZtc2cubXNnID0gc3RyZHVwIChtc2cpOwotICBwcGFjayAoZ2V0X3BpcGUgKCksIENLX01TR19GQUlMLCAoQ2hlY2tNc2cgKikgJiBmbXNnKTsKLSAgZnJlZSAoZm1zZy5tc2cpOwotfQotCi12b2lkCi1zZW5kX2R1cmF0aW9uX2luZm8gKGludCBkdXJhdGlvbikKLXsKLSAgRHVyYXRpb25Nc2cgZG1zZzsKLQotICBkbXNnLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gIHBwYWNrIChnZXRfcGlwZSAoKSwgQ0tfTVNHX0RVUkFUSU9OLCAoQ2hlY2tNc2cgKikgJiBkbXNnKTsKLX0KLQotdm9pZAotc2VuZF9sb2NfaW5mbyAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCi17Ci0gIExvY01zZyBsbXNnOwotCi0gIGxtc2cuZmlsZSA9IHN0cmR1cCAoZmlsZSk7Ci0gIGxtc2cubGluZSA9IGxpbmU7Ci0gIHBwYWNrIChnZXRfcGlwZSAoKSwgQ0tfTVNHX0xPQywgKENoZWNrTXNnICopICYgbG1zZyk7Ci0gIGZyZWUgKGxtc2cuZmlsZSk7Ci19Ci0KLXZvaWQKLXNlbmRfY3R4X2luZm8gKGVudW0gY2tfcmVzdWx0X2N0eCBjdHgpCi17Ci0gIEN0eE1zZyBjbXNnOwotCi0gIGNtc2cuY3R4ID0gY3R4OwotICBwcGFjayAoZ2V0X3BpcGUgKCksIENLX01TR19DVFgsIChDaGVja01zZyAqKSAmIGNtc2cpOwotfQotCi1UZXN0UmVzdWx0ICoKLXJlY2VpdmVfdGVzdF9yZXN1bHQgKGludCB3YXNlcnJvcikKLXsKLSAgRklMRSAqZnA7Ci0gIFJjdk1zZyAqcm1zZzsKLSAgVGVzdFJlc3VsdCAqcmVzdWx0OwotCi0gIGZwID0gZ2V0X3BpcGUgKCk7Ci0gIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgZXByaW50ZiAoIkVycm9yIGluIGNhbGwgdG8gZ2V0X3BpcGUiLCBfX0ZJTEVfXywgX19MSU5FX18gLSAyKTsKLSAgfQotCi0gIHJld2luZCAoZnApOwotICBybXNnID0gcHVucGFjayAoZnApOwotCi0gIGlmIChybXNnID09IE5VTEwpIHsKLSAgICBlcHJpbnRmICgiRXJyb3IgaW4gY2FsbCB0byBwdW5wYWNrIiwgX19GSUxFX18sIF9fTElORV9fIC0gNCk7Ci0gIH0KLQotICB0ZWFyZG93bl9waXBlICgpOwotICBzZXR1cF9waXBlICgpOwotCi0gIHJlc3VsdCA9IGNvbnN0cnVjdF90ZXN0X3Jlc3VsdCAocm1zZywgd2FzZXJyb3IpOwotICByY3Ztc2dfZnJlZSAocm1zZyk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi10cl9zZXRfbG9jX2J5X2N0eCAoVGVzdFJlc3VsdCAqIHRyLCBlbnVtIGNrX3Jlc3VsdF9jdHggY3R4LCBSY3ZNc2cgKiBybXNnKQotewotICBpZiAoY3R4ID09IENLX0NUWF9URVNUKSB7Ci0gICAgdHItPmZpbGUgPSBybXNnLT50ZXN0X2ZpbGU7Ci0gICAgdHItPmxpbmUgPSBybXNnLT50ZXN0X2xpbmU7Ci0gICAgcm1zZy0+dGVzdF9maWxlID0gTlVMTDsKLSAgICBybXNnLT50ZXN0X2xpbmUgPSAtMTsKLSAgfSBlbHNlIHsKLSAgICB0ci0+ZmlsZSA9IHJtc2ctPmZpeHR1cmVfZmlsZTsKLSAgICB0ci0+bGluZSA9IHJtc2ctPmZpeHR1cmVfbGluZTsKLSAgICBybXNnLT5maXh0dXJlX2ZpbGUgPSBOVUxMOwotICAgIHJtc2ctPmZpeHR1cmVfbGluZSA9IC0xOwotICB9Ci19Ci0KLXN0YXRpYyBUZXN0UmVzdWx0ICoKLWNvbnN0cnVjdF90ZXN0X3Jlc3VsdCAoUmN2TXNnICogcm1zZywgaW50IHdhc2Vycm9yKQotewotICBUZXN0UmVzdWx0ICp0cjsKLQotICBpZiAocm1zZyA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIHRyID0gdHJfY3JlYXRlICgpOwotCi0gIGlmIChybXNnLT5tc2cgIT0gTlVMTCB8fCB3YXNlcnJvcikgewotICAgIHRyLT5jdHggPSBybXNnLT5sYXN0Y3R4OwotICAgIHRyLT5tc2cgPSBybXNnLT5tc2c7Ci0gICAgcm1zZy0+bXNnID0gTlVMTDsKLSAgICB0cl9zZXRfbG9jX2J5X2N0eCAodHIsIHRyLT5jdHgsIHJtc2cpOwotICB9IGVsc2UgaWYgKHJtc2ctPmxhc3RjdHggPT0gQ0tfQ1RYX1NFVFVQKSB7Ci0gICAgdHItPmN0eCA9IENLX0NUWF9TRVRVUDsKLSAgICB0ci0+bXNnID0gTlVMTDsKLSAgICB0cl9zZXRfbG9jX2J5X2N0eCAodHIsIENLX0NUWF9TRVRVUCwgcm1zZyk7Ci0gIH0gZWxzZSB7Ci0gICAgdHItPmN0eCA9IENLX0NUWF9URVNUOwotICAgIHRyLT5tc2cgPSBOVUxMOwotICAgIHRyLT5kdXJhdGlvbiA9IHJtc2ctPmR1cmF0aW9uOwotICAgIHRyX3NldF9sb2NfYnlfY3R4ICh0ciwgQ0tfQ1RYX1RFU1QsIHJtc2cpOwotICB9Ci0KLSAgcmV0dXJuIHRyOwotfQotCi12b2lkCi1zZXR1cF9tZXNzYWdpbmcgKHZvaWQpCi17Ci0gIHNldHVwX3BpcGUgKCk7Ci19Ci0KLXZvaWQKLXRlYXJkb3duX21lc3NhZ2luZyAodm9pZCkKLXsKLSAgdGVhcmRvd25fcGlwZSAoKTsKLX0KLQotLyoqCi0gKiBPcGVuIGEgdGVtcG9yYXJ5IGZpbGUuCi0gKgotICogSWYgdGhlIGZpbGUgY291bGQgYmUgdW5saW5rZWQgdXBvbiBjcmVhdGlvbiwgdGhlIG5hbWUKLSAqIG9mIHRoZSBmaWxlIGlzIG5vdCByZXR1cm5lZCB2aWEgJ25hbWUnLiBIb3dldmVyLCBpZiB0aGUKLSAqIGZpbGUgY291bGQgbm90IGJlIHVubGlua2VkLCB0aGUgbmFtZSBpcyByZXR1cm5lZCwKLSAqIGV4cGVjdGluZyB0aGUgY2FsbGVyIHRvIGJvdGggZGVsZXRlIHRoZSBmaWxlIGFuZAotICogZnJlZSB0aGUgJ25hbWUnIGZpZWxkIGFmdGVyIHRoZSBmaWxlIGlzIGNsb3NlZC4KLSAqLwotRklMRSAqCi1vcGVuX3RtcF9maWxlIChjaGFyICoqbmFtZSkKLXsKLSAgRklMRSAqZmlsZSA9IE5VTEw7Ci0KLSAgKm5hbWUgPSBOVUxMOwotCi0jaWYgIUhBVkVfTUtTVEVNUAotICAvKiBXaW5kb3dzIGRvZXMgbm90IGxpa2UgdG1wZmlsZSgpLiBUaGlzIGlzIGxpa2VseSBiZWNhdXNlIHRtcGZpbGUoKQotICAgKiBjYWxsIHVubGluaygpIG9uIHRoZSBmaWxlIGJlZm9yZSByZXR1cm5pbmcgaXQsIHRvIG1ha2Ugc3VyZSB0aGUKLSAgICogZmlsZSBpcyBkZWxldGVkIHdoZW4gaXQgaXMgY2xvc2VkLiBUaGUgdW5saW5rKCkgY2FsbCBhbHNvIGZhaWxzCi0gICAqIG9uIFdpbmRvd3MgaWYgdGhlIGZpbGUgaXMgc3RpbGwgb3Blbi4gKi8KLSAgLyogYWxzbyBub3RlIHRoYXQgbWtzdGVtcCBpcyBhcHBhcmVudGx5IGEgQzkwIHJlcGxhY2VtZW50IGZvciB0bXBmaWxlICovCi0gIC8qIHBlcmhhcHMgYWxsIHdlIG5lZWQgdG8gZG8gb24gV2luZG93cyBpcyBzZXQgVE1QRElSIHRvIHdoYXRldmVyIGlzCi0gICAgIHN0b3JlZCBpbiBURU1QIGZvciB0bXBmaWxlIHRvIHdvcmsgKi8KLSAgLyogYW5kIGZpbmFsbHksIHRoZSAiYiIgZnJvbSAidytiIiBpcyBpZ25vcmVkIG9uIE9TIFgsIG5vdCBzdXJlIGFib3V0IFdJTjMyICovCi0KLSAgZmlsZSA9IHRtcGZpbGUgKCk7Ci0gIGlmIChmaWxlID09IE5VTEwpIHsKLSAgICBjaGFyICp0bXAgPSBnZXRlbnYgKCJURU1QIik7Ci0gICAgY2hhciAqdG1wX2ZpbGUgPSB0ZW1wbmFtICh0bXAsICJjaGVja18iKTsKLQotICAgIC8qCi0gICAgICogTm90ZSwgdGVtcG5hbSBpcyBub3QgZW5vdWdoIHRvIGdldCBhIHVuaXF1ZSBuYW1lLiBCZXR3ZWVuCi0gICAgICogZ2V0dGluZyB0aGUgbmFtZSBhbmQgb3BlbmluZyB0aGUgZmlsZSwgc29tZXRoaW5nIGVsc2UgYWxzbwotICAgICAqIGNhbGxpbmcgdGVtcG5hbSgpIGNvdWxkIGdldCB0aGUgc2FtZSBuYW1lLiBJdCBoYXMgYmVlbiBvYnNlcnZlZAotICAgICAqIG9uIE1pbkdXLXc2NCBidWlsZHMgb24gV2luZSB0aGF0IHRoaXMgZXhhY3QgdGhpbmcgaGFwcGVucwotICAgICAqIGlmIG11bHRpcGxlIGluc3RhbmNlcyBvZiBhIHVuaXQgdGVzdHMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgotICAgICAqIFRvIHByZXZlbnQgdHdvIGNvbmN1cnJlbnQgdW5pdCB0ZXN0cyBmcm9tIGdldHRpbmcgdGhlIHNhbWUgZmlsZSwKLSAgICAgKiB3ZSBhcHBlbmQgdGhlIHBpZCB0byB0aGUgZmlsZS4gVGhlIHBpZCBzaG91bGQgYmUgdW5pcXVlIG9uIHRoZQotICAgICAqIHN5c3RlbS4KLSAgICAgKi8KLSAgICBjaGFyICp1bmlxX3RtcF9maWxlID0gY2tfc3RyZHVwX3ByaW50ZiAoIiVzLiVkIiwgdG1wX2ZpbGUsIGdldHBpZCAoKSk7Ci0KLSAgICBmaWxlID0gZm9wZW4gKHVuaXFfdG1wX2ZpbGUsICJ3K2IiKTsKLSAgICAqbmFtZSA9IHVuaXFfdG1wX2ZpbGU7Ci0gICAgZnJlZSAodG1wX2ZpbGUpOwotICB9Ci0jZWxzZQotICBpbnQgZmQgPSAtMTsKLSAgY29uc3QgY2hhciAqdG1wX2RpciA9IGdldGVudiAoIlRFTVAiKTsKLSAgaWYgKCF0bXBfZGlyKSB7Ci0gICAgdG1wX2RpciA9ICIuIjsKLSAgfQotICAqbmFtZSA9IGNrX3N0cmR1cF9wcmludGYgKCIlcy9jaGVja19YWFhYWFgiLCB0bXBfZGlyKTsKLSAgaWYgKC0xIDwgKGZkID0gbWtzdGVtcCAoKm5hbWUpKSkgewotICAgIGZpbGUgPSBmZG9wZW4gKGZkLCAidytiIik7Ci0gICAgaWYgKDAgPT0gdW5saW5rICgqbmFtZSkgfHwgTlVMTCA9PSBmaWxlKSB7Ci0gICAgICBmcmVlICgqbmFtZSk7Ci0gICAgICAqbmFtZSA9IE5VTEw7Ci0gICAgfQotICB9Ci0jZW5kaWYKLSAgcmV0dXJuIGZpbGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9waXBlICh2b2lkKQotewotICBpZiAoc2VuZF9maWxlMSA9PSBOVUxMKSB7Ci0gICAgc2VuZF9maWxlMSA9IG9wZW5fdG1wX2ZpbGUgKCZzZW5kX2ZpbGUxX25hbWUpOwotICAgIHJldHVybjsKLSAgfQotICBpZiAoc2VuZF9maWxlMiA9PSBOVUxMKSB7Ci0gICAgc2VuZF9maWxlMiA9IG9wZW5fdG1wX2ZpbGUgKCZzZW5kX2ZpbGUyX25hbWUpOwotICAgIHJldHVybjsKLSAgfQotICBlcHJpbnRmICgiT25seSBvbmUgbmVzdGluZyBvZiBzdWl0ZSBydW5zIHN1cHBvcnRlZCIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZWFyZG93bl9waXBlICh2b2lkKQotewotICBpZiAoc2VuZF9maWxlMiAhPSAwKSB7Ci0gICAgZmNsb3NlIChzZW5kX2ZpbGUyKTsKLSAgICBzZW5kX2ZpbGUyID0gMDsKLSAgICBpZiAoc2VuZF9maWxlMl9uYW1lICE9IE5VTEwpIHsKLSAgICAgIHVubGluayAoc2VuZF9maWxlMl9uYW1lKTsKLSAgICAgIGZyZWUgKHNlbmRfZmlsZTJfbmFtZSk7Ci0gICAgICBzZW5kX2ZpbGUyX25hbWUgPSBOVUxMOwotICAgIH0KLSAgfSBlbHNlIGlmIChzZW5kX2ZpbGUxICE9IDApIHsKLSAgICBmY2xvc2UgKHNlbmRfZmlsZTEpOwotICAgIHNlbmRfZmlsZTEgPSAwOwotICAgIGlmIChzZW5kX2ZpbGUxX25hbWUgIT0gTlVMTCkgewotICAgICAgdW5saW5rIChzZW5kX2ZpbGUxX25hbWUpOwotICAgICAgZnJlZSAoc2VuZF9maWxlMV9uYW1lKTsKLSAgICAgIHNlbmRfZmlsZTFfbmFtZSA9IE5VTEw7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGVwcmludGYgKCJObyBtZXNzYWdpbmcgc2V0dXAiLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICB9Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19tc2cuaCBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODRlZThjLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX21zZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBcmllbiBNYWxlYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBDSEVDS19NU0dfTkVXX0gKLSNkZWZpbmUgQ0hFQ0tfTVNHX05FV19ICi0KLQotLyogRnVuY3Rpb25zIGltcGxlbWVudGluZyBtZXNzYWdpbmcgZHVyaW5nIHRlc3QgcnVucyAqLwotCi12b2lkIHNlbmRfZmFpbHVyZV9pbmZvIChjb25zdCBjaGFyICptc2cpOwotdm9pZCBzZW5kX2xvY19pbmZvIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7Ci12b2lkIHNlbmRfY3R4X2luZm8gKGVudW0gY2tfcmVzdWx0X2N0eCBjdHgpOwotdm9pZCBzZW5kX2R1cmF0aW9uX2luZm8gKGludCBkdXJhdGlvbik7Ci0KLVRlc3RSZXN1bHQgKnJlY2VpdmVfdGVzdF9yZXN1bHQgKGludCB3YXNlcnJvcik7Ci0KLXZvaWQgc2V0dXBfbWVzc2FnaW5nICh2b2lkKTsKLXZvaWQgdGVhcmRvd25fbWVzc2FnaW5nICh2b2lkKTsKLQotRklMRSAqb3Blbl90bXBfZmlsZSAoY2hhciAqKm5hbWUpOwotCi0jZW5kaWYgLypDSEVDS19NU0dfTkVXX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYyBiL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3BhY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTExOWRmYy4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wYWNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTEgKzAsMCBAQAotLyoKLSAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBcmllbiBNYWxlYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImxpYmNvbXBhdC5oIgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgImludGVybmFsLWNoZWNrLmgiCi0jaW5jbHVkZSAiY2hlY2tfZXJyb3IuaCIKLSNpbmNsdWRlICJjaGVja19saXN0LmgiCi0jaW5jbHVkZSAiY2hlY2tfaW1wbC5oIgotI2luY2x1ZGUgImNoZWNrX3BhY2suaCIKLQotI2lmbmRlZiBIQVZFX1BUSFJFQUQKLSNkZWZpbmUgcHRocmVhZF9tdXRleF9sb2NrKGFyZykKLSNkZWZpbmUgcHRocmVhZF9tdXRleF91bmxvY2soYXJnKQotI2RlZmluZSBwdGhyZWFkX2NsZWFudXBfcHVzaChmLGEpIHsKLSNkZWZpbmUgcHRocmVhZF9jbGVhbnVwX3BvcChlKSB9Ci0jZW5kaWYKLQotLyogTWF4aW11bSBzaXplIGZvciBvbmUgbWVzc2FnZSBpbiB0aGUgbWVzc2FnZSBzdHJlYW0uICovCi0jZGVmaW5lIENLX01BWF9NU0dfU0laRSA4MTkyCi0vKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IGEgc2xpZGluZyB3aW5kb3cgb24gdGhlIHJlY2VpdmluZwotICogc2lkZS4gV2hlbiBzZW5kaW5nIG1lc3NhZ2VzLCB3ZSBhc3N1cmUgdGhhdCBubyBzaW5nbGUgbWVzc2FnZQotICogaXMgYmlnZ2VyIHRoYW4gdGhpcyAoYWN0dWFsbHkgd2UgY2hlY2sgYWdhaW5zdCBDS19NQVhfTVNHX1NJWkUvMikuCi0gKiBUaGUgdXN1YWwgc2l6ZSBmb3IgYSBtZXNzYWdlIGlzIGxlc3MgdGhhbiA4MCBieXRlcy4KLSAqIEFsbCB0aGlzIGlzIGRvbmUgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYXBwcm9hY2ggdG8gYWxsb2NhdGUgKGFjdHVhbGx5Ci0gKiBjb250aW51b3VzbHkgcmVhbGxvY2F0ZSkgb25lIGJpZyBjaHVuayBmb3IgdGhlIHdob2xlIG1lc3NhZ2Ugc3RyZWFtLgotICogUHJvYmxlbXMgd2VyZSBzZWVuIGluIHRoZSB3aWxkIHdpdGggdXAgdG8gNCBHQiByZWFsbG9jYXRpb25zLgotICovCi0KLQotLyogdHlwZWRlZiBhbiB1bnNpZ25lZCBpbnQgdGhhdCBoYXMgYXQgbGVhc3QgNCBieXRlcyAqLwotdHlwZWRlZiB1aW50MzJfdCBja191aW50MzI7Ci0KLQotc3RhdGljIHZvaWQgcGFja19pbnQgKGNoYXIgKipidWYsIGludCB2YWwpOwotc3RhdGljIGludCB1cGFja19pbnQgKGNoYXIgKipidWYpOwotc3RhdGljIHZvaWQgcGFja19zdHIgKGNoYXIgKipidWYsIGNvbnN0IGNoYXIgKnN0cik7Ci1zdGF0aWMgY2hhciAqdXBhY2tfc3RyIChjaGFyICoqYnVmKTsKLQotc3RhdGljIGludCBwYWNrX2N0eCAoY2hhciAqKmJ1ZiwgQ3R4TXNnICogY21zZyk7Ci1zdGF0aWMgaW50IHBhY2tfbG9jIChjaGFyICoqYnVmLCBMb2NNc2cgKiBsbXNnKTsKLXN0YXRpYyBpbnQgcGFja19mYWlsIChjaGFyICoqYnVmLCBGYWlsTXNnICogZm1zZyk7Ci1zdGF0aWMgaW50IHBhY2tfZHVyYXRpb24gKGNoYXIgKipidWYsIER1cmF0aW9uTXNnICogZm1zZyk7Ci1zdGF0aWMgdm9pZCB1cGFja19jdHggKGNoYXIgKipidWYsIEN0eE1zZyAqIGNtc2cpOwotc3RhdGljIHZvaWQgdXBhY2tfbG9jIChjaGFyICoqYnVmLCBMb2NNc2cgKiBsbXNnKTsKLXN0YXRpYyB2b2lkIHVwYWNrX2ZhaWwgKGNoYXIgKipidWYsIEZhaWxNc2cgKiBmbXNnKTsKLXN0YXRpYyB2b2lkIHVwYWNrX2R1cmF0aW9uIChjaGFyICoqYnVmLCBEdXJhdGlvbk1zZyAqIGZtc2cpOwotCi1zdGF0aWMgdm9pZCBjaGVja190eXBlIChpbnQgdHlwZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOwotc3RhdGljIGVudW0gY2tfbXNnX3R5cGUgdXBhY2tfdHlwZSAoY2hhciAqKmJ1Zik7Ci1zdGF0aWMgdm9pZCBwYWNrX3R5cGUgKGNoYXIgKipidWYsIGVudW0gY2tfbXNnX3R5cGUgdHlwZSk7Ci0KLXN0YXRpYyBpbnQgcmVhZF9idWYgKEZJTEUgKiBmZGVzLCBpbnQgc2l6ZSwgY2hhciAqYnVmKTsKLXN0YXRpYyBpbnQgZ2V0X3Jlc3VsdCAoY2hhciAqYnVmLCBSY3ZNc2cgKiBybXNnKTsKLXN0YXRpYyB2b2lkIHJjdm1zZ191cGRhdGVfY3R4IChSY3ZNc2cgKiBybXNnLCBlbnVtIGNrX3Jlc3VsdF9jdHggY3R4KTsKLXN0YXRpYyB2b2lkIHJjdm1zZ191cGRhdGVfbG9jIChSY3ZNc2cgKiBybXNnLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7Ci1zdGF0aWMgUmN2TXNnICpyY3Ztc2dfY3JlYXRlICh2b2lkKTsKLXZvaWQgcmN2bXNnX2ZyZWUgKFJjdk1zZyAqIHJtc2cpOwotCi10eXBlZGVmIGludCAoKnBmdW4pIChjaGFyICoqLCBDaGVja01zZyAqKTsKLXR5cGVkZWYgdm9pZCAoKnVwZnVuKSAoY2hhciAqKiwgQ2hlY2tNc2cgKik7Ci0KLXN0YXRpYyBwZnVuIHBmdGFiW10gPSB7Ci0gIChwZnVuKSBwYWNrX2N0eCwKLSAgKHBmdW4pIHBhY2tfZmFpbCwKLSAgKHBmdW4pIHBhY2tfbG9jLAotICAocGZ1bikgcGFja19kdXJhdGlvbgotfTsKLQotc3RhdGljIHVwZnVuIHVwZnRhYltdID0gewotICAodXBmdW4pIHVwYWNrX2N0eCwKLSAgKHVwZnVuKSB1cGFja19mYWlsLAotICAodXBmdW4pIHVwYWNrX2xvYywKLSAgKHVwZnVuKSB1cGFja19kdXJhdGlvbgotfTsKLQotaW50Ci1wYWNrIChlbnVtIGNrX21zZ190eXBlIHR5cGUsIGNoYXIgKipidWYsIENoZWNrTXNnICogbXNnKQotewotICBpZiAoYnVmID09IE5VTEwpCi0gICAgcmV0dXJuIC0xOwotICBpZiAobXNnID09IE5VTEwpCi0gICAgcmV0dXJuIDA7Ci0KLSAgY2hlY2tfdHlwZSAodHlwZSwgX19GSUxFX18sIF9fTElORV9fKTsKLQotICByZXR1cm4gcGZ0YWJbdHlwZV0gKGJ1ZiwgbXNnKTsKLX0KLQotaW50Ci11cGFjayAoY2hhciAqYnVmLCBDaGVja01zZyAqIG1zZywgZW51bSBja19tc2dfdHlwZSAqdHlwZSkKLXsKLSAgY2hhciAqb2J1ZjsKLQotICBpZiAoYnVmID09IE5VTEwpCi0gICAgcmV0dXJuIC0xOwotCi0gIG9idWYgPSBidWY7Ci0KLSAgKnR5cGUgPSB1cGFja190eXBlICgmYnVmKTsKLQotICBjaGVja190eXBlICgqdHlwZSwgX19GSUxFX18sIF9fTElORV9fKTsKLQotICB1cGZ0YWJbKnR5cGVdICgmYnVmLCBtc2cpOwotCi0gIHJldHVybiBidWYgLSBvYnVmOwotfQotCi1zdGF0aWMgdm9pZAotcGFja19pbnQgKGNoYXIgKipidWYsIGludCB2YWwpCi17Ci0gIHVuc2lnbmVkIGNoYXIgKnVidWYgPSAodW5zaWduZWQgY2hhciAqKSAqYnVmOwotICBja191aW50MzIgdXZhbCA9IHZhbDsKLQotICB1YnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICgodXZhbCA+PiAyNCkgJiAweEZGKTsKLSAgdWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHV2YWwgPj4gMTYpICYgMHhGRik7Ci0gIHVidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh1dmFsID4+IDgpICYgMHhGRik7Ci0gIHVidWZbM10gPSAodW5zaWduZWQgY2hhcikgKHV2YWwgJiAweEZGKTsKLQotICAqYnVmICs9IDQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXVwYWNrX2ludCAoY2hhciAqKmJ1ZikKLXsKLSAgdW5zaWduZWQgY2hhciAqdWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopICpidWY7Ci0gIGNrX3VpbnQzMiB1dmFsOwotCi0gIHV2YWwgPQotICAgICAgKGNrX3VpbnQzMikgKCh1YnVmWzBdIDw8IDI0KSB8ICh1YnVmWzFdIDw8IDE2KSB8ICh1YnVmWzJdIDw8IDgpIHwKLSAgICAgIHVidWZbM10pOwotCi0gICpidWYgKz0gNDsKLQotICByZXR1cm4gKGludCkgdXZhbDsKLX0KLQotc3RhdGljIHZvaWQKLXBhY2tfc3RyIChjaGFyICoqYnVmLCBjb25zdCBjaGFyICp2YWwpCi17Ci0gIGludCBzdHJzejsKLQotICBpZiAodmFsID09IE5VTEwpCi0gICAgc3Ryc3ogPSAwOwotICBlbHNlCi0gICAgc3Ryc3ogPSBzdHJsZW4gKHZhbCk7Ci0KLSAgcGFja19pbnQgKGJ1Ziwgc3Ryc3opOwotCi0gIGlmIChzdHJzeiA+IDApIHsKLSAgICBtZW1jcHkgKCpidWYsIHZhbCwgc3Ryc3opOwotICAgICpidWYgKz0gc3Ryc3o7Ci0gIH0KLX0KLQotc3RhdGljIGNoYXIgKgotdXBhY2tfc3RyIChjaGFyICoqYnVmKQotewotICBjaGFyICp2YWw7Ci0gIGludCBzdHJzejsKLQotICBzdHJzeiA9IHVwYWNrX2ludCAoYnVmKTsKLQotICBpZiAoc3Ryc3ogPiAwKSB7Ci0gICAgdmFsID0gKGNoYXIgKikgZW1hbGxvYyAoc3Ryc3ogKyAxKTsKLSAgICBtZW1jcHkgKHZhbCwgKmJ1Ziwgc3Ryc3opOwotICAgIHZhbFtzdHJzel0gPSAwOwotICAgICpidWYgKz0gc3Ryc3o7Ci0gIH0gZWxzZSB7Ci0gICAgdmFsID0gKGNoYXIgKikgZW1hbGxvYyAoMSk7Ci0gICAgKnZhbCA9IDA7Ci0gIH0KLQotICByZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdm9pZAotcGFja190eXBlIChjaGFyICoqYnVmLCBlbnVtIGNrX21zZ190eXBlIHR5cGUpCi17Ci0gIHBhY2tfaW50IChidWYsIChpbnQpIHR5cGUpOwotfQotCi1zdGF0aWMgZW51bSBja19tc2dfdHlwZQotdXBhY2tfdHlwZSAoY2hhciAqKmJ1ZikKLXsKLSAgcmV0dXJuIChlbnVtIGNrX21zZ190eXBlKSB1cGFja19pbnQgKGJ1Zik7Ci19Ci0KLQotc3RhdGljIGludAotcGFja19jdHggKGNoYXIgKipidWYsIEN0eE1zZyAqIGNtc2cpCi17Ci0gIGNoYXIgKnB0cjsKLSAgaW50IGxlbjsKLQotICBsZW4gPSA0ICsgNDsKLSAgKmJ1ZiA9IHB0ciA9IChjaGFyICopIGVtYWxsb2MgKGxlbik7Ci0KLSAgcGFja190eXBlICgmcHRyLCBDS19NU0dfQ1RYKTsKLSAgcGFja19pbnQgKCZwdHIsIChpbnQpIGNtc2ctPmN0eCk7Ci0KLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHZvaWQKLXVwYWNrX2N0eCAoY2hhciAqKmJ1ZiwgQ3R4TXNnICogY21zZykKLXsKLSAgY21zZy0+Y3R4ID0gKGVudW0gY2tfcmVzdWx0X2N0eCkgdXBhY2tfaW50IChidWYpOwotfQotCi1zdGF0aWMgaW50Ci1wYWNrX2R1cmF0aW9uIChjaGFyICoqYnVmLCBEdXJhdGlvbk1zZyAqIGNtc2cpCi17Ci0gIGNoYXIgKnB0cjsKLSAgaW50IGxlbjsKLQotICBsZW4gPSA0ICsgNDsKLSAgKmJ1ZiA9IHB0ciA9IChjaGFyICopIGVtYWxsb2MgKGxlbik7Ci0KLSAgcGFja190eXBlICgmcHRyLCBDS19NU0dfRFVSQVRJT04pOwotICBwYWNrX2ludCAoJnB0ciwgY21zZy0+ZHVyYXRpb24pOwotCi0gIHJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGFja19kdXJhdGlvbiAoY2hhciAqKmJ1ZiwgRHVyYXRpb25Nc2cgKiBjbXNnKQotewotICBjbXNnLT5kdXJhdGlvbiA9IHVwYWNrX2ludCAoYnVmKTsKLX0KLQotc3RhdGljIGludAotcGFja19sb2MgKGNoYXIgKipidWYsIExvY01zZyAqIGxtc2cpCi17Ci0gIGNoYXIgKnB0cjsKLSAgaW50IGxlbjsKLQotICBsZW4gPSA0ICsgNCArIChsbXNnLT5maWxlID8gc3RybGVuIChsbXNnLT5maWxlKSA6IDApICsgNDsKLSAgKmJ1ZiA9IHB0ciA9IChjaGFyICopIGVtYWxsb2MgKGxlbik7Ci0KLSAgcGFja190eXBlICgmcHRyLCBDS19NU0dfTE9DKTsKLSAgcGFja19zdHIgKCZwdHIsIGxtc2ctPmZpbGUpOwotICBwYWNrX2ludCAoJnB0ciwgbG1zZy0+bGluZSk7Ci0KLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHZvaWQKLXVwYWNrX2xvYyAoY2hhciAqKmJ1ZiwgTG9jTXNnICogbG1zZykKLXsKLSAgbG1zZy0+ZmlsZSA9IHVwYWNrX3N0ciAoYnVmKTsKLSAgbG1zZy0+bGluZSA9IHVwYWNrX2ludCAoYnVmKTsKLX0KLQotc3RhdGljIGludAotcGFja19mYWlsIChjaGFyICoqYnVmLCBGYWlsTXNnICogZm1zZykKLXsKLSAgY2hhciAqcHRyOwotICBpbnQgbGVuOwotCi0gIGxlbiA9IDQgKyA0ICsgKGZtc2ctPm1zZyA/IHN0cmxlbiAoZm1zZy0+bXNnKSA6IDApOwotICAqYnVmID0gcHRyID0gKGNoYXIgKikgZW1hbGxvYyAobGVuKTsKLQotICBwYWNrX3R5cGUgKCZwdHIsIENLX01TR19GQUlMKTsKLSAgcGFja19zdHIgKCZwdHIsIGZtc2ctPm1zZyk7Ci0KLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHZvaWQKLXVwYWNrX2ZhaWwgKGNoYXIgKipidWYsIEZhaWxNc2cgKiBmbXNnKQotewotICBmbXNnLT5tc2cgPSB1cGFja19zdHIgKGJ1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja190eXBlIChpbnQgdHlwZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCi17Ci0gIGlmICh0eXBlIDwgMCB8fCB0eXBlID49IENLX01TR19MQVNUKQotICAgIGVwcmludGYgKCJCYWQgbWVzc2FnZSB0eXBlIGFyZyAlZCIsIGZpbGUsIGxpbmUsIHR5cGUpOwotfQotCi0jaWZkZWYgSEFWRV9QVEhSRUFECi1zdGF0aWMgcHRocmVhZF9tdXRleF90IGNrX211dGV4X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwotc3RhdGljIHZvaWQKLXBwYWNrX2NsZWFudXAgKHZvaWQgKm11dGV4KQotewotICBwdGhyZWFkX211dGV4X3VubG9jayAoKHB0aHJlYWRfbXV0ZXhfdCAqKSBtdXRleCk7Ci19Ci0jZW5kaWYKLQotdm9pZAotcHBhY2sgKEZJTEUgKiBmZGVzLCBlbnVtIGNrX21zZ190eXBlIHR5cGUsIENoZWNrTXNnICogbXNnKQotewotICBjaGFyICpidWYgPSBOVUxMOwotICBpbnQgbjsKLSAgc3NpemVfdCByOwotCi0gIG4gPSBwYWNrICh0eXBlLCAmYnVmLCBtc2cpOwotICAvKiBLZWVwIGl0IG9uIHRoZSBzYWZlIHNpZGUgdG8gbm90IHNlbmQgdG9vIG11Y2ggZGF0YS4gKi8KLSAgaWYgKG4gPiAoQ0tfTUFYX01TR19TSVpFIC8gMikpCi0gICAgZXByaW50ZiAoIk1lc3NhZ2Ugc3RyaW5nIHRvbyBsb25nIiwgX19GSUxFX18sIF9fTElORV9fIC0gMik7Ci0KLSAgcHRocmVhZF9jbGVhbnVwX3B1c2ggKHBwYWNrX2NsZWFudXAsICZja19tdXRleF9sb2NrKTsKLSAgcHRocmVhZF9tdXRleF9sb2NrICgmY2tfbXV0ZXhfbG9jayk7Ci0gIHIgPSBmd3JpdGUgKGJ1ZiwgMSwgbiwgZmRlcyk7Ci0gIGZmbHVzaCAoZmRlcyk7Ci0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmY2tfbXV0ZXhfbG9jayk7Ci0gIHB0aHJlYWRfY2xlYW51cF9wb3AgKDApOwotICBpZiAociAhPSBuKQotICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIGZ3cml0ZToiLCBfX0ZJTEVfXywgX19MSU5FX18gLSAyKTsKLQotICBmcmVlIChidWYpOwotfQotCi1zdGF0aWMgaW50Ci1yZWFkX2J1ZiAoRklMRSAqIGZkZXMsIGludCBzaXplLCBjaGFyICpidWYpCi17Ci0gIGludCBuOwotCi0gIG4gPSBmcmVhZCAoYnVmLCAxLCBzaXplLCBmZGVzKTsKLQotICBpZiAoZmVycm9yIChmZGVzKSkgewotICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIGZyZWFkOiIsIF9fRklMRV9fLCBfX0xJTkVfXyAtIDQpOwotICB9Ci0KLSAgcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyBpbnQKLWdldF9yZXN1bHQgKGNoYXIgKmJ1ZiwgUmN2TXNnICogcm1zZykKLXsKLSAgZW51bSBja19tc2dfdHlwZSB0eXBlOwotICBDaGVja01zZyBtc2c7Ci0gIGludCBuOwotCi0gIG4gPSB1cGFjayAoYnVmLCAmbXNnLCAmdHlwZSk7Ci0gIGlmIChuID09IC0xKQotICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIHVwYWNrIiwgX19GSUxFX18sIF9fTElORV9fIC0gMik7Ci0KLSAgaWYgKHR5cGUgPT0gQ0tfTVNHX0NUWCkgewotICAgIEN0eE1zZyAqY21zZyA9IChDdHhNc2cgKikgJiBtc2c7Ci0KLSAgICByY3Ztc2dfdXBkYXRlX2N0eCAocm1zZywgY21zZy0+Y3R4KTsKLSAgfSBlbHNlIGlmICh0eXBlID09IENLX01TR19MT0MpIHsKLSAgICBMb2NNc2cgKmxtc2cgPSAoTG9jTXNnICopICYgbXNnOwotCi0gICAgaWYgKHJtc2ctPmZhaWxjdHggPT0gQ0tfQ1RYX0lOVkFMSUQpIHsKLSAgICAgIHJjdm1zZ191cGRhdGVfbG9jIChybXNnLCBsbXNnLT5maWxlLCBsbXNnLT5saW5lKTsKLSAgICB9Ci0gICAgZnJlZSAobG1zZy0+ZmlsZSk7Ci0gIH0gZWxzZSBpZiAodHlwZSA9PSBDS19NU0dfRkFJTCkgewotICAgIEZhaWxNc2cgKmZtc2cgPSAoRmFpbE1zZyAqKSAmIG1zZzsKLQotICAgIGlmIChybXNnLT5tc2cgPT0gTlVMTCkgewotICAgICAgcm1zZy0+bXNnID0gc3RyZHVwIChmbXNnLT5tc2cpOwotICAgICAgcm1zZy0+ZmFpbGN0eCA9IHJtc2ctPmxhc3RjdHg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIFNraXAgc3Vic2VxdWVudCBmYWlsdXJlIG1lc3NhZ2VzLCBvbmx5IGhhcHBlbnMgZm9yIENLX05PRk9SSyAqLwotICAgIH0KLSAgICBmcmVlIChmbXNnLT5tc2cpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gQ0tfTVNHX0RVUkFUSU9OKSB7Ci0gICAgRHVyYXRpb25Nc2cgKmNtc2cgPSAoRHVyYXRpb25Nc2cgKikgJiBtc2c7Ci0KLSAgICBybXNnLT5kdXJhdGlvbiA9IGNtc2ctPmR1cmF0aW9uOwotICB9IGVsc2UKLSAgICBjaGVja190eXBlICh0eXBlLCBfX0ZJTEVfXywgX19MSU5FX18pOwotCi0gIHJldHVybiBuOwotfQotCi1zdGF0aWMgdm9pZAotcmVzZXRfcmN2X3Rlc3QgKFJjdk1zZyAqIHJtc2cpCi17Ci0gIHJtc2ctPnRlc3RfbGluZSA9IC0xOwotICBybXNnLT50ZXN0X2ZpbGUgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotcmVzZXRfcmN2X2ZpeHR1cmUgKFJjdk1zZyAqIHJtc2cpCi17Ci0gIHJtc2ctPmZpeHR1cmVfbGluZSA9IC0xOwotICBybXNnLT5maXh0dXJlX2ZpbGUgPSBOVUxMOwotfQotCi1zdGF0aWMgUmN2TXNnICoKLXJjdm1zZ19jcmVhdGUgKHZvaWQpCi17Ci0gIFJjdk1zZyAqcm1zZzsKLQotICBybXNnID0gKFJjdk1zZyAqKSBlbWFsbG9jIChzaXplb2YgKFJjdk1zZykpOwotICBybXNnLT5sYXN0Y3R4ID0gQ0tfQ1RYX0lOVkFMSUQ7Ci0gIHJtc2ctPmZhaWxjdHggPSBDS19DVFhfSU5WQUxJRDsKLSAgcm1zZy0+bXNnID0gTlVMTDsKLSAgcm1zZy0+ZHVyYXRpb24gPSAtMTsKLSAgcmVzZXRfcmN2X3Rlc3QgKHJtc2cpOwotICByZXNldF9yY3ZfZml4dHVyZSAocm1zZyk7Ci0gIHJldHVybiBybXNnOwotfQotCi12b2lkCi1yY3Ztc2dfZnJlZSAoUmN2TXNnICogcm1zZykKLXsKLSAgZnJlZSAocm1zZy0+Zml4dHVyZV9maWxlKTsKLSAgZnJlZSAocm1zZy0+dGVzdF9maWxlKTsKLSAgZnJlZSAocm1zZy0+bXNnKTsKLSAgZnJlZSAocm1zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yY3Ztc2dfdXBkYXRlX2N0eCAoUmN2TXNnICogcm1zZywgZW51bSBja19yZXN1bHRfY3R4IGN0eCkKLXsKLSAgaWYgKHJtc2ctPmxhc3RjdHggIT0gQ0tfQ1RYX0lOVkFMSUQpIHsKLSAgICBmcmVlIChybXNnLT5maXh0dXJlX2ZpbGUpOwotICAgIHJlc2V0X3Jjdl9maXh0dXJlIChybXNnKTsKLSAgfQotICBybXNnLT5sYXN0Y3R4ID0gY3R4OwotfQotCi1zdGF0aWMgdm9pZAotcmN2bXNnX3VwZGF0ZV9sb2MgKFJjdk1zZyAqIHJtc2csIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQotewotICBpZiAocm1zZy0+bGFzdGN0eCA9PSBDS19DVFhfVEVTVCkgewotICAgIGZyZWUgKHJtc2ctPnRlc3RfZmlsZSk7Ci0gICAgcm1zZy0+dGVzdF9saW5lID0gbGluZTsKLSAgICBybXNnLT50ZXN0X2ZpbGUgPSBzdHJkdXAgKGZpbGUpOwotICB9IGVsc2UgewotICAgIGZyZWUgKHJtc2ctPmZpeHR1cmVfZmlsZSk7Ci0gICAgcm1zZy0+Zml4dHVyZV9saW5lID0gbGluZTsKLSAgICBybXNnLT5maXh0dXJlX2ZpbGUgPSBzdHJkdXAgKGZpbGUpOwotICB9Ci19Ci0KLVJjdk1zZyAqCi1wdW5wYWNrIChGSUxFICogZmRlcykKLXsKLSAgaW50IG5yZWFkLCBucGFyc2UsIG47Ci0gIGNoYXIgKmJ1ZjsKLSAgUmN2TXNnICpybXNnOwotCi0gIHJtc2cgPSByY3Ztc2dfY3JlYXRlICgpOwotCi0gIC8qIEFsbGNhdGUgYSBidWZmZXIgKi8KLSAgYnVmID0gKGNoYXIgKikgZW1hbGxvYyAoQ0tfTUFYX01TR19TSVpFKTsKLSAgLyogRmlsbCB0aGUgYnVmZmVyIGZyb20gdGhlIGZpbGUgKi8KLSAgbnJlYWQgPSByZWFkX2J1ZiAoZmRlcywgQ0tfTUFYX01TR19TSVpFLCBidWYpOwotICBucGFyc2UgPSBucmVhZDsKLSAgLyogV2hpbGUgbm90IGFsbCBwYXJzZWQgKi8KLSAgd2hpbGUgKG5wYXJzZSA+IDApIHsKLSAgICAvKiBQYXJzZSBvbmUgbWVzc2FnZSAqLwotICAgIG4gPSBnZXRfcmVzdWx0IChidWYsIHJtc2cpOwotICAgIG5wYXJzZSAtPSBuOwotICAgIC8qIE1vdmUgcmVtYWluaW5nIGRhdGEgaW4gYnVmZmVyIHRvIHRoZSBiZWdpbm5pbmcgKi8KLSAgICBtZW1tb3ZlIChidWYsIGJ1ZiArIG4sIG5wYXJzZSk7Ci0gICAgLyogSWYgRU9GIGhhcyBub3QgYmVlbiBzZWVuICovCi0gICAgaWYgKG5yZWFkID4gMCkgewotICAgICAgLyogUmVhZCBtb3JlIGRhdGEgaW50byBlbXB0eSBzcGFjZSBhdCBlbmQgb2YgdGhlIGJ1ZmZlciAqLwotICAgICAgbnJlYWQgPSByZWFkX2J1ZiAoZmRlcywgbiwgYnVmICsgbnBhcnNlKTsKLSAgICAgIG5wYXJzZSArPSBucmVhZDsKLSAgICB9Ci0gIH0KLSAgZnJlZSAoYnVmKTsKLQotICBpZiAocm1zZy0+bGFzdGN0eCA9PSBDS19DVFhfSU5WQUxJRCkgewotICAgIGZyZWUgKHJtc2cpOwotICAgIHJtc2cgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIHJtc2c7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wYWNrLmggYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZGUyNjcuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcGFjay5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBcmllbiBNYWxlYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBDSEVDS19QQUNLX0gKLSNkZWZpbmUgQ0hFQ0tfUEFDS19ICi0KLQotZW51bSBja19tc2dfdHlwZQotewotICBDS19NU0dfQ1RYLAotICBDS19NU0dfRkFJTCwKLSAgQ0tfTVNHX0xPQywKLSAgQ0tfTVNHX0RVUkFUSU9OLAotICBDS19NU0dfTEFTVAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgQ3R4TXNnCi17Ci0gIGVudW0gY2tfcmVzdWx0X2N0eCBjdHg7Ci19IEN0eE1zZzsKLQotdHlwZWRlZiBzdHJ1Y3QgTG9jTXNnCi17Ci0gIGludCBsaW5lOwotICBjaGFyICpmaWxlOwotfSBMb2NNc2c7Ci0KLXR5cGVkZWYgc3RydWN0IEZhaWxNc2cKLXsKLSAgY2hhciAqbXNnOwotfSBGYWlsTXNnOwotCi10eXBlZGVmIHN0cnVjdCBEdXJhdGlvbk1zZwotewotICBpbnQgZHVyYXRpb247Ci19IER1cmF0aW9uTXNnOwotCi10eXBlZGVmIHVuaW9uCi17Ci0gIEN0eE1zZyBjdHhfbXNnOwotICBGYWlsTXNnIGZhaWxfbXNnOwotICBMb2NNc2cgbG9jX21zZzsKLSAgRHVyYXRpb25Nc2cgZHVyYXRpb25fbXNnOwotfSBDaGVja01zZzsKLQotdHlwZWRlZiBzdHJ1Y3QgUmN2TXNnCi17Ci0gIGVudW0gY2tfcmVzdWx0X2N0eCBsYXN0Y3R4OwotICBlbnVtIGNrX3Jlc3VsdF9jdHggZmFpbGN0eDsKLSAgY2hhciAqZml4dHVyZV9maWxlOwotICBpbnQgZml4dHVyZV9saW5lOwotICBjaGFyICp0ZXN0X2ZpbGU7Ci0gIGludCB0ZXN0X2xpbmU7Ci0gIGNoYXIgKm1zZzsKLSAgaW50IGR1cmF0aW9uOwotfSBSY3ZNc2c7Ci0KLXZvaWQgcmN2bXNnX2ZyZWUgKFJjdk1zZyAqIHJtc2cpOwotCi0KLWludCBwYWNrIChlbnVtIGNrX21zZ190eXBlIHR5cGUsIGNoYXIgKipidWYsIENoZWNrTXNnICogbXNnKTsKLWludCB1cGFjayAoY2hhciAqYnVmLCBDaGVja01zZyAqIG1zZywgZW51bSBja19tc2dfdHlwZSAqdHlwZSk7Ci0KLXZvaWQgcHBhY2sgKEZJTEUgKiBmZGVzLCBlbnVtIGNrX21zZ190eXBlIHR5cGUsIENoZWNrTXNnICogbXNnKTsKLVJjdk1zZyAqcHVucGFjayAoRklMRSAqIGZkZXMpOwotCi0jZW5kaWYgLypDSEVDS19QQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wcmludC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzFhNGFkLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSAqIENoZWNrOiBhIHVuaXQgdGVzdCBmcmFtZXdvcmsgZm9yIEMKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBcmllbiBNYWxlYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImxpYmNvbXBhdC5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgImludGVybmFsLWNoZWNrLmgiCi0jaW5jbHVkZSAiY2hlY2tfbGlzdC5oIgotI2luY2x1ZGUgImNoZWNrX2ltcGwuaCIKLSNpbmNsdWRlICJjaGVja19zdHIuaCIKLSNpbmNsdWRlICJjaGVja19wcmludC5oIgotCi1zdGF0aWMgdm9pZCBzcnVubmVyX2ZwcmludF9zdW1tYXJ5IChGSUxFICogZmlsZSwgU1J1bm5lciAqIHNyLAotICAgIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpOwotc3RhdGljIHZvaWQgc3J1bm5lcl9mcHJpbnRfcmVzdWx0cyAoRklMRSAqIGZpbGUsIFNSdW5uZXIgKiBzciwKLSAgICBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKTsKLQotCi12b2lkCi1zcnVubmVyX3ByaW50IChTUnVubmVyICogc3IsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpCi17Ci0gIHNydW5uZXJfZnByaW50IChzdGRvdXQsIHNyLCBwcmludF9tb2RlKTsKLX0KLQotdm9pZAotc3J1bm5lcl9mcHJpbnQgKEZJTEUgKiBmaWxlLCBTUnVubmVyICogc3IsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpCi17Ci0gIGlmIChwcmludF9tb2RlID09IENLX0VOVikgewotICAgIHByaW50X21vZGUgPSBnZXRfZW52X3ByaW50bW9kZSAoKTsKLSAgfQotCi0gIHNydW5uZXJfZnByaW50X3N1bW1hcnkgKGZpbGUsIHNyLCBwcmludF9tb2RlKTsKLSAgc3J1bm5lcl9mcHJpbnRfcmVzdWx0cyAoZmlsZSwgc3IsIHByaW50X21vZGUpOwotfQotCi1zdGF0aWMgdm9pZAotc3J1bm5lcl9mcHJpbnRfc3VtbWFyeSAoRklMRSAqIGZpbGUsIFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKLXsKLSNpZiBFTkFCTEVfU1VCVU5JVAotICBpZiAocHJpbnRfbW9kZSA9PSBDS19TVUJVTklUKQotICAgIHJldHVybjsKLSNlbmRpZgotCi0gIGlmIChwcmludF9tb2RlID49IENLX01JTklNQUwpIHsKLSAgICBjaGFyICpzdHI7Ci0KLSAgICBzdHIgPSBzcl9zdGF0X3N0ciAoc3IpOwotICAgIGZwcmludGYgKGZpbGUsICIlc1xuIiwgc3RyKTsKLSAgICBmcmVlIChzdHIpOwotICB9Ci0gIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNydW5uZXJfZnByaW50X3Jlc3VsdHMgKEZJTEUgKiBmaWxlLCBTUnVubmVyICogc3IsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpCi17Ci0gIExpc3QgKnJlc3VsdGxzdDsKLQotI2lmIEVOQUJMRV9TVUJVTklUCi0gIGlmIChwcmludF9tb2RlID09IENLX1NVQlVOSVQpCi0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgcmVzdWx0bHN0ID0gc3ItPnJlc3VsdGxzdDsKLQotICBmb3IgKGNoZWNrX2xpc3RfZnJvbnQgKHJlc3VsdGxzdCk7ICFjaGVja19saXN0X2F0X2VuZCAocmVzdWx0bHN0KTsKLSAgICAgIGNoZWNrX2xpc3RfYWR2YW5jZSAocmVzdWx0bHN0KSkgewotICAgIFRlc3RSZXN1bHQgKnRyID0gKFRlc3RSZXN1bHQgKikgY2hlY2tfbGlzdF92YWwgKHJlc3VsdGxzdCk7Ci0KLSAgICB0cl9mcHJpbnQgKGZpbGUsIHRyLCBwcmludF9tb2RlKTsKLSAgfQotICByZXR1cm47Ci19Ci0KLXZvaWQKLWZwcmludF94bWxfZXNjIChGSUxFICogZmlsZSwgY29uc3QgY2hhciAqc3RyKQotewotICBmb3IgKDsgKnN0ciAhPSAnXDAnOyBzdHIrKykgewotCi0gICAgc3dpdGNoICgqc3RyKSB7Ci0KLSAgICAgICAgLyogaGFuZGxlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG11c3QgYmUgZXNjYXBlZCAqLwotICAgICAgY2FzZSAnIic6Ci0gICAgICAgIGZwdXRzICgiJnF1b3Q7IiwgZmlsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnXCcnOgotICAgICAgICBmcHV0cyAoIiZhcG9zOyIsIGZpbGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJzwnOgotICAgICAgICBmcHV0cyAoIiZsdDsiLCBmaWxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICc+JzoKLSAgICAgICAgZnB1dHMgKCImZ3Q7IiwgZmlsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnJic6Ci0gICAgICAgIGZwdXRzICgiJmFtcDsiLCBmaWxlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyogcmVndWxhciBjaGFyYWN0ZXJzLCBwcmludCBhcyBpcyAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZnB1dGMgKCpzdHIsIGZpbGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZAotdHJfZnByaW50IChGSUxFICogZmlsZSwgVGVzdFJlc3VsdCAqIHRyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKQotewotICBpZiAocHJpbnRfbW9kZSA9PSBDS19FTlYpIHsKLSAgICBwcmludF9tb2RlID0gZ2V0X2Vudl9wcmludG1vZGUgKCk7Ci0gIH0KLQotICBpZiAoKHByaW50X21vZGUgPj0gQ0tfVkVSQk9TRSAmJiB0ci0+cnR5cGUgPT0gQ0tfUEFTUykgfHwKLSAgICAgICh0ci0+cnR5cGUgIT0gQ0tfUEFTUyAmJiBwcmludF9tb2RlID49IENLX05PUk1BTCkpIHsKLSAgICBjaGFyICp0cnN0ciA9IHRyX3N0ciAodHIpOwotCi0gICAgZnByaW50ZiAoZmlsZSwgIiVzXG4iLCB0cnN0cik7Ci0gICAgZnJlZSAodHJzdHIpOwotICB9Ci19Ci0KLXZvaWQKLXRyX3htbHByaW50IChGSUxFICogZmlsZSwgVGVzdFJlc3VsdCAqIHRyLAotICAgIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUgQ0tfQVRUUklCVVRFX1VOVVNFRCkKLXsKLSAgY2hhciByZXN1bHRbMTBdOwotICBjaGFyICpwYXRoX25hbWUgPSBOVUxMOwotICBjaGFyICpmaWxlX25hbWUgPSBOVUxMOwotICBjaGFyICpzbGFzaCA9IE5VTEw7Ci0KLSAgc3dpdGNoICh0ci0+cnR5cGUpIHsKLSAgICBjYXNlIENLX1BBU1M6Ci0gICAgICBzbnByaW50ZiAocmVzdWx0LCBzaXplb2YgKHJlc3VsdCksICIlcyIsICJzdWNjZXNzIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENLX0ZBSUxVUkU6Ci0gICAgICBzbnByaW50ZiAocmVzdWx0LCBzaXplb2YgKHJlc3VsdCksICIlcyIsICJmYWlsdXJlIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENLX0VSUk9SOgotICAgICAgc25wcmludGYgKHJlc3VsdCwgc2l6ZW9mIChyZXN1bHQpLCAiJXMiLCAiZXJyb3IiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0tfVEVTVF9SRVNVTFRfSU5WQUxJRDoKLSAgICBkZWZhdWx0OgotICAgICAgYWJvcnQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmICh0ci0+ZmlsZSkgewotICAgIHNsYXNoID0gc3RycmNociAodHItPmZpbGUsICcvJyk7Ci0gICAgaWYgKHNsYXNoID09IE5VTEwpIHsKLSAgICAgIHNsYXNoID0gc3RycmNociAodHItPmZpbGUsICdcXCcpOwotICAgIH0KLQotICAgIGlmIChzbGFzaCA9PSBOVUxMKSB7Ci0gICAgICBwYXRoX25hbWUgPSBzdHJkdXAgKCIuIik7Ci0gICAgICBmaWxlX25hbWUgPSB0ci0+ZmlsZTsKLSAgICB9IGVsc2UgewotICAgICAgcGF0aF9uYW1lID0gc3RyZHVwICh0ci0+ZmlsZSk7Ci0gICAgICBwYXRoX25hbWVbc2xhc2ggLSB0ci0+ZmlsZV0gPSAwOyAgLyogVGVybWluYXRlIHRoZSB0ZW1wb3Jhcnkgc3RyaW5nLiAqLwotICAgICAgZmlsZV9uYW1lID0gc2xhc2ggKyAxOwotICAgIH0KLSAgfQotCi0KLSAgZnByaW50ZiAoZmlsZSwgIiAgICA8dGVzdCByZXN1bHQ9XCIlc1wiPlxuIiwgcmVzdWx0KTsKLSAgZnByaW50ZiAoZmlsZSwgIiAgICAgIDxwYXRoPiVzPC9wYXRoPlxuIiwKLSAgICAgIChwYXRoX25hbWUgPT0gTlVMTCA/ICIiIDogcGF0aF9uYW1lKSk7Ci0gIGZwcmludGYgKGZpbGUsICIgICAgICA8Zm4+JXM6JWQ8L2ZuPlxuIiwKLSAgICAgIChmaWxlX25hbWUgPT0gTlVMTCA/ICIiIDogZmlsZV9uYW1lKSwgdHItPmxpbmUpOwotICBmcHJpbnRmIChmaWxlLCAiICAgICAgPGlkPiVzPC9pZD5cbiIsIHRyLT50bmFtZSk7Ci0gIGZwcmludGYgKGZpbGUsICIgICAgICA8aXRlcmF0aW9uPiVkPC9pdGVyYXRpb24+XG4iLCB0ci0+aXRlcik7Ci0gIGZwcmludGYgKGZpbGUsICIgICAgICA8ZHVyYXRpb24+JWQuJTA2ZDwvZHVyYXRpb24+XG4iLAotICAgICAgdHItPmR1cmF0aW9uIDwgMCA/IC0xIDogdHItPmR1cmF0aW9uIC8gVVNfUEVSX1NFQywKLSAgICAgIHRyLT5kdXJhdGlvbiA8IDAgPyAwIDogdHItPmR1cmF0aW9uICUgVVNfUEVSX1NFQyk7Ci0gIGZwcmludGYgKGZpbGUsICIgICAgICA8ZGVzY3JpcHRpb24+Iik7Ci0gIGZwcmludF94bWxfZXNjIChmaWxlLCB0ci0+dGNuYW1lKTsKLSAgZnByaW50ZiAoZmlsZSwgIjwvZGVzY3JpcHRpb24+XG4iKTsKLSAgZnByaW50ZiAoZmlsZSwgIiAgICAgIDxtZXNzYWdlPiIpOwotICBmcHJpbnRfeG1sX2VzYyAoZmlsZSwgdHItPm1zZyk7Ci0gIGZwcmludGYgKGZpbGUsICI8L21lc3NhZ2U+XG4iKTsKLSAgZnByaW50ZiAoZmlsZSwgIiAgICA8L3Rlc3Q+XG4iKTsKLQotICBmcmVlIChwYXRoX25hbWUpOwotfQotCi1lbnVtIHByaW50X291dHB1dAotZ2V0X2Vudl9wcmludG1vZGUgKHZvaWQpCi17Ci0gIGNoYXIgKmVudiA9IGdldGVudiAoIkNLX1ZFUkJPU0lUWSIpOwotCi0gIGlmIChlbnYgPT0gTlVMTCkKLSAgICByZXR1cm4gQ0tfTk9STUFMOwotICBpZiAoc3RyY21wIChlbnYsICJzaWxlbnQiKSA9PSAwKQotICAgIHJldHVybiBDS19TSUxFTlQ7Ci0gIGlmIChzdHJjbXAgKGVudiwgIm1pbmltYWwiKSA9PSAwKQotICAgIHJldHVybiBDS19NSU5JTUFMOwotICBpZiAoc3RyY21wIChlbnYsICJ2ZXJib3NlIikgPT0gMCkKLSAgICByZXR1cm4gQ0tfVkVSQk9TRTsKLSAgcmV0dXJuIENLX05PUk1BTDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmggYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19wcmludC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzUyNzRiLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3ByaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQwotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENIRUNLX1BSSU5UX0gKLSNkZWZpbmUgQ0hFQ0tfUFJJTlRfSAotCi0vKiBlc2NhcGUgWE1MIHNwZWNpYWwgY2hhcmFjdGVycyAoIiAnIDwgPiAmKSBpbiBzdHIgYW5kIHByaW50IHRvIGZpbGUgKi8KLXZvaWQgZnByaW50X3htbF9lc2MgKEZJTEUgKiBmaWxlLCBjb25zdCBjaGFyICpzdHIpOwotdm9pZCB0cl9mcHJpbnQgKEZJTEUgKiBmaWxlLCBUZXN0UmVzdWx0ICogdHIsIGVudW0gcHJpbnRfb3V0cHV0IHByaW50X21vZGUpOwotdm9pZCB0cl94bWxwcmludCAoRklMRSAqIGZpbGUsIFRlc3RSZXN1bHQgKiB0ciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7Ci12b2lkIHNydW5uZXJfZnByaW50IChGSUxFICogZmlsZSwgU1J1bm5lciAqIHNyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKTsKLWVudW0gcHJpbnRfb3V0cHV0IGdldF9lbnZfcHJpbnRtb2RlICh2b2lkKTsKLQotCi0jZW5kaWYgLyogQ0hFQ0tfUFJJTlRfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfcnVuLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkMmNmNi4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19ydW4uYworKysgL2Rldi9udWxsCkBAIC0xLDc1MiArMCwwIEBACi0vKgotICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQwotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibGliY29tcGF0LmgiCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLQotI2luY2x1ZGUgImludGVybmFsLWNoZWNrLmgiCi0jaW5jbHVkZSAiY2hlY2tfZXJyb3IuaCIKLSNpbmNsdWRlICJjaGVja19saXN0LmgiCi0jaW5jbHVkZSAiY2hlY2tfaW1wbC5oIgotI2luY2x1ZGUgImNoZWNrX21zZy5oIgotI2luY2x1ZGUgImNoZWNrX2xvZy5oIgotCi1lbnVtIHJpbmZvCi17Ci0gIENLX1JfU0lHLAotICBDS19SX1BBU1MsCi0gIENLX1JfRVhJVCwKLSAgQ0tfUl9GQUlMX1RFU1QsCi0gIENLX1JfRkFJTF9GSVhUVVJFCi19OwotCi1lbnVtIHRmX3R5cGUKLXsKLSAgQ0tfRk9SS19URVNULAotICBDS19OT0ZPUktfVEVTVCwKLSAgQ0tfTk9GT1JLX0ZJWFRVUkUKLX07Ci0KLQotLyogYWxsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGFyZSBkZWNsYXJlZC4KLSAgIGZ1bmN0aW9ucyB0aGF0IGRlcGVuZCBvbiBmb3JraW5nIGFyZSBnYXRoZXJlZCBhbGwgdG9nZXRoZXIuCi0gICBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gKi8KLXN0YXRpYyB2b2lkIHNydW5uZXJfcnVuX2luaXQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7Ci1zdGF0aWMgdm9pZCBzcnVubmVyX3J1bl9lbmQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7Ci1zdGF0aWMgdm9pZCBzcnVubmVyX2l0ZXJhdGVfc3VpdGVzIChTUnVubmVyICogc3IsCi0gICAgY29uc3QgY2hhciAqc25hbWUsIGNvbnN0IGNoYXIgKnRjbmFtZSwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSk7Ci1zdGF0aWMgdm9pZCBzcnVubmVyX2l0ZXJhdGVfdGNhc2VfdGZ1bnMgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0Yyk7Ci1zdGF0aWMgdm9pZCBzcnVubmVyX2FkZF9mYWlsdXJlIChTUnVubmVyICogc3IsIFRlc3RSZXN1bHQgKiB0Zik7Ci1zdGF0aWMgVGVzdFJlc3VsdCAqc3J1bm5lcl9ydW5fc2V0dXAgKExpc3QgKiBmdW5jX2xpc3QsCi0gICAgZW51bSBmb3JrX3N0YXR1cyBmb3JrX3VzYWdlLCBjb25zdCBjaGFyICp0ZXN0X25hbWUsIGNvbnN0IGNoYXIgKnNldHVwX25hbWUpOwotc3RhdGljIGludCBzcnVubmVyX3J1bl91bmNoZWNrZWRfc2V0dXAgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0Yyk7Ci1zdGF0aWMgVGVzdFJlc3VsdCAqdGNhc2VfcnVuX2NoZWNrZWRfc2V0dXAgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0Yyk7Ci1zdGF0aWMgdm9pZCBzcnVubmVyX3J1bl90ZWFyZG93biAoTGlzdCAqIGZpeHR1cmVfbGlzdCwKLSAgICBlbnVtIGZvcmtfc3RhdHVzIGZvcmtfdXNhZ2UpOwotc3RhdGljIHZvaWQgc3J1bm5lcl9ydW5fdW5jaGVja2VkX3RlYXJkb3duIChTUnVubmVyICogc3IsIFRDYXNlICogdGMpOwotc3RhdGljIHZvaWQgdGNhc2VfcnVuX2NoZWNrZWRfdGVhcmRvd24gKFRDYXNlICogdGMpOwotc3RhdGljIHZvaWQgc3J1bm5lcl9ydW5fdGNhc2UgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0Yyk7Ci1zdGF0aWMgVGVzdFJlc3VsdCAqdGNhc2VfcnVuX3RmdW5fbm9mb3JrIChTUnVubmVyICogc3IsIFRDYXNlICogdGMsIFRGICogdGYsCi0gICAgaW50IGkpOwotc3RhdGljIFRlc3RSZXN1bHQgKnJlY2VpdmVfcmVzdWx0X2luZm9fbm9mb3JrIChjb25zdCBjaGFyICp0Y25hbWUsCi0gICAgY29uc3QgY2hhciAqdG5hbWUsIGludCBpdGVyLCBpbnQgZHVyYXRpb24pOwotc3RhdGljIHZvaWQgc2V0X25vZm9ya19pbmZvIChUZXN0UmVzdWx0ICogdHIpOwotc3RhdGljIGNoYXIgKnBhc3NfbXNnICh2b2lkKTsKLQotI2lmIGRlZmluZWQoSEFWRV9GT1JLKSAmJiBIQVZFX0ZPUks9PTEKLXN0YXRpYyBUZXN0UmVzdWx0ICp0Y2FzZV9ydW5fdGZ1bl9mb3JrIChTUnVubmVyICogc3IsIFRDYXNlICogdGMsIFRGICogdGYsCi0gICAgaW50IGkpOwotc3RhdGljIFRlc3RSZXN1bHQgKnJlY2VpdmVfcmVzdWx0X2luZm9fZm9yayAoY29uc3QgY2hhciAqdGNuYW1lLAotICAgIGNvbnN0IGNoYXIgKnRuYW1lLCBpbnQgaXRlciwKLSAgICBpbnQgc3RhdHVzLCBpbnQgZXhwZWN0ZWRfc2lnbmFsLCBzaWduZWQgY2hhciBhbGxvd2VkX2V4aXRfdmFsdWUpOwotc3RhdGljIHZvaWQgc2V0X2ZvcmtfaW5mbyAoVGVzdFJlc3VsdCAqIHRyLCBpbnQgc3RhdHVzLCBpbnQgZXhwZWN0ZWRfc2lnbmFsLAotICAgIHNpZ25lZCBjaGFyIGFsbG93ZWRfZXhpdF92YWx1ZSk7Ci1zdGF0aWMgY2hhciAqc2lnbmFsX21zZyAoaW50IHNpZyk7Ci1zdGF0aWMgY2hhciAqc2lnbmFsX2Vycm9yX21zZyAoaW50IHNpZ25hbF9yZWNlaXZlZCwgaW50IHNpZ25hbF9leHBlY3RlZCk7Ci1zdGF0aWMgY2hhciAqZXhpdF9tc2cgKGludCBleGl0c3RhdHVzKTsKLXN0YXRpYyBpbnQgd2FzZXJyb3IgKGludCBzdGF0dXMsIGludCBleHBlY3RlZF9zaWduYWwpOwotCi1zdGF0aWMgaW50IGFsYXJtX3JlY2VpdmVkOwotc3RhdGljIHBpZF90IGdyb3VwX3BpZDsKLQotI2lmIGRlZmluZWQoSEFWRV9TSUdBQ1RJT04pICYmIGRlZmluZWQoSEFWRV9GT1JLKQotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkX2FjdGlvblszXTsKLXN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG5ld19hY3Rpb25bM107Ci0jZW5kaWYgLyogSEFWRV9TSUdBQ1RJT04gJiYgSEFWRV9GT1JLICovCi0KLXN0YXRpYyB2b2lkIENLX0FUVFJJQlVURV9VTlVTRUQKLXNpZ19oYW5kbGVyIChpbnQgc2lnX25yKQotewotICBzd2l0Y2ggKHNpZ19ucikgewotICAgIGNhc2UgU0lHQUxSTToKLSAgICAgIGFsYXJtX3JlY2VpdmVkID0gMTsKLSAgICAgIGtpbGxwZyAoZ3JvdXBfcGlkLCBTSUdLSUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0lHVEVSTToKLSAgICBjYXNlIFNJR0lOVDp7Ci0gICAgICBwaWRfdCBvd25fZ3JvdXBfcGlkOwotICAgICAgaW50IGlkeDsKLSAgICAgIGludCBjaGlsZF9zaWc7Ci0KLSAgICAgIGlmIChzaWdfbnIgPT0gU0lHSU5UKSB7Ci0gICAgICAgIGlkeCA9IDE7Ci0gICAgICAgIGNoaWxkX3NpZyA9IFNJR0tJTEw7Ci0gICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgIC8qIGlmIChzaWdfbnIgPT0gU0lHVEVSTSkgKi8KLQotICAgICAgICBpZHggPSAyOwotICAgICAgICBjaGlsZF9zaWcgPSBTSUdURVJNOwotICAgICAgfQotCi0gICAgICBraWxscGcgKGdyb3VwX3BpZCwgY2hpbGRfc2lnKTsKLQotICAgICAgLyogUmVzdG9yZSBvbGQgc2lnbmFsIGhhbmRsZXIuLi4gKi8KLSAgICAgIHNpZ2FjdGlvbiAoc2lnX25yLCAmb2xkX2FjdGlvbltpZHhdLCBOVUxMKTsKLQotICAgICAgLyogLi4uIGFuZCBjYWxsIGl0LiBQT1NJWCBzYXlzIHRoYXQgY2FsbGluZyBraWxscGcoMCkKLSAgICAgICAqIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdG8gY2FsbCBpdCBvbiB0aGUgY2FsbGVycwotICAgICAgICogZ3JvdXAgcGlkISAqLwotICAgICAgb3duX2dyb3VwX3BpZCA9IGdldHBncnAgKCk7Ci0gICAgICBraWxscGcgKG93bl9ncm91cF9waWQsIHNpZ19ucik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGVwcmludGYgKCJVbmhhbmRsZWQgc2lnbmFsOiAlZCIsIF9fRklMRV9fLCBfX0xJTkVfXywgc2lnX25yKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0jZW5kaWYgLyogSEFWRV9GT1JLICovCi0KLSNkZWZpbmUgTVNHX0xFTiAxMDAKLQotc3RhdGljIHZvaWQKLXNydW5uZXJfcnVuX2luaXQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKLXsKLSAgc2V0X2Zvcmtfc3RhdHVzIChzcnVubmVyX2Zvcmtfc3RhdHVzIChzcikpOwotICBzZXR1cF9tZXNzYWdpbmcgKCk7Ci0gIHNydW5uZXJfaW5pdF9sb2dnaW5nIChzciwgcHJpbnRfbW9kZSk7Ci0gIGxvZ19zcnVubmVyX3N0YXJ0IChzcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcnVubmVyX3J1bl9lbmQgKFNSdW5uZXIgKiBzciwgZW51bSBwcmludF9vdXRwdXQgQ0tfQVRUUklCVVRFX1VOVVNFRCBwcmludF9tb2RlKQotewotICBsb2dfc3J1bm5lcl9lbmQgKHNyKTsKLSAgc3J1bm5lcl9lbmRfbG9nZ2luZyAoc3IpOwotICB0ZWFyZG93bl9tZXNzYWdpbmcgKCk7Ci0gIHNldF9mb3JrX3N0YXR1cyAoQ0tfRk9SSyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcnVubmVyX2l0ZXJhdGVfc3VpdGVzIChTUnVubmVyICogc3IsCi0gICAgY29uc3QgY2hhciAqc25hbWUsIGNvbnN0IGNoYXIgKnRjbmFtZSwKLSAgICBlbnVtIHByaW50X291dHB1dCBDS19BVFRSSUJVVEVfVU5VU0VEIHByaW50X21vZGUpCi17Ci0gIExpc3QgKnNsc3Q7Ci0gIExpc3QgKnRjbDsKLSAgVENhc2UgKnRjOwotCi0gIHNsc3QgPSBzci0+c2xzdDsKLQotICBmb3IgKGNoZWNrX2xpc3RfZnJvbnQgKHNsc3QpOyAhY2hlY2tfbGlzdF9hdF9lbmQgKHNsc3QpOwotICAgICAgY2hlY2tfbGlzdF9hZHZhbmNlIChzbHN0KSkgewotICAgIFN1aXRlICpzID0gKFN1aXRlICopIGNoZWNrX2xpc3RfdmFsIChzbHN0KTsKLQotICAgIGlmICgoKHNuYW1lICE9IE5VTEwpICYmIChzdHJjbXAgKHNuYW1lLCBzLT5uYW1lKSAhPSAwKSkKLSAgICAgICAgfHwgKCh0Y25hbWUgIT0gTlVMTCkgJiYgKCFzdWl0ZV90Y2FzZSAocywgdGNuYW1lKSkpKQotICAgICAgY29udGludWU7Ci0KLSAgICBsb2dfc3VpdGVfc3RhcnQgKHNyLCBzKTsKLQotICAgIHRjbCA9IHMtPnRjbHN0OwotCi0gICAgZm9yIChjaGVja19saXN0X2Zyb250ICh0Y2wpOyAhY2hlY2tfbGlzdF9hdF9lbmQgKHRjbCk7Ci0gICAgICAgIGNoZWNrX2xpc3RfYWR2YW5jZSAodGNsKSkgewotICAgICAgdGMgPSAoVENhc2UgKikgY2hlY2tfbGlzdF92YWwgKHRjbCk7Ci0KLSAgICAgIGlmICgodGNuYW1lICE9IE5VTEwpICYmIChzdHJjbXAgKHRjbmFtZSwgdGMtPm5hbWUpICE9IDApKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBzcnVubmVyX3J1bl90Y2FzZSAoc3IsIHRjKTsKLSAgICB9Ci0KLSAgICBsb2dfc3VpdGVfZW5kIChzciwgcyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXNydW5uZXJfaXRlcmF0ZV90Y2FzZV90ZnVucyAoU1J1bm5lciAqIHNyLCBUQ2FzZSAqIHRjKQotewotICBMaXN0ICp0Zmw7Ci0gIFRGICp0ZnVuOwotICBUZXN0UmVzdWx0ICp0ciA9IE5VTEw7Ci0KLSAgdGZsID0gdGMtPnRmbHN0OwotCi0gIGZvciAoY2hlY2tfbGlzdF9mcm9udCAodGZsKTsgIWNoZWNrX2xpc3RfYXRfZW5kICh0ZmwpOwotICAgICAgY2hlY2tfbGlzdF9hZHZhbmNlICh0ZmwpKSB7Ci0gICAgaW50IGk7Ci0KLSAgICB0ZnVuID0gKFRGICopIGNoZWNrX2xpc3RfdmFsICh0ZmwpOwotCi0gICAgZm9yIChpID0gdGZ1bi0+bG9vcF9zdGFydDsgaSA8IHRmdW4tPmxvb3BfZW5kOyBpKyspIHsKLSAgICAgIGxvZ190ZXN0X3N0YXJ0IChzciwgdGMsIHRmdW4pOwotICAgICAgc3dpdGNoIChzcnVubmVyX2Zvcmtfc3RhdHVzIChzcikpIHsKLSAgICAgICAgY2FzZSBDS19GT1JLOgotI2lmIGRlZmluZWQoSEFWRV9GT1JLKSAmJiBIQVZFX0ZPUks9PTEKLSAgICAgICAgICB0ciA9IHRjYXNlX3J1bl90ZnVuX2ZvcmsgKHNyLCB0YywgdGZ1biwgaSk7Ci0jZWxzZSAvKiBIQVZFX0ZPUksgKi8KLSAgICAgICAgICBlcHJpbnRmICgiVGhpcyB2ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgZm9yayIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0jZW5kaWYgLyogSEFWRV9GT1JLICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0tfTk9GT1JLOgotICAgICAgICAgIHRyID0gdGNhc2VfcnVuX3RmdW5fbm9mb3JrIChzciwgdGMsIHRmdW4sIGkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENLX0ZPUktfR0VURU5WOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGVwcmludGYgKCJCYWQgZm9yayBzdGF0dXMgaW4gU1J1bm5lciIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChOVUxMICE9IHRyKSB7Ci0gICAgICAgIHNydW5uZXJfYWRkX2ZhaWx1cmUgKHNyLCB0cik7Ci0gICAgICAgIGxvZ190ZXN0X2VuZCAoc3IsIHRyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXNydW5uZXJfYWRkX2ZhaWx1cmUgKFNSdW5uZXIgKiBzciwgVGVzdFJlc3VsdCAqIHRyKQotewotICBjaGVja19saXN0X2FkZF9lbmQgKHNyLT5yZXN1bHRsc3QsIHRyKTsKLSAgc3ItPnN0YXRzLT5uX2NoZWNrZWQrKzsgICAgICAgLyogY291bnQgY2hlY2tzIGR1cmluZyBzZXR1cCwgdGVzdCwgYW5kIHRlYXJkb3duICovCi0gIGlmICh0ci0+cnR5cGUgPT0gQ0tfRkFJTFVSRSkKLSAgICBzci0+c3RhdHMtPm5fZmFpbGVkKys7Ci0gIGVsc2UgaWYgKHRyLT5ydHlwZSA9PSBDS19FUlJPUikKLSAgICBzci0+c3RhdHMtPm5fZXJyb3JzKys7Ci0KLX0KLQotc3RhdGljIFRlc3RSZXN1bHQgKgotc3J1bm5lcl9ydW5fc2V0dXAgKExpc3QgKiBmaXh0dXJlX2xpc3QsIGVudW0gZm9ya19zdGF0dXMgZm9ya191c2FnZSwKLSAgICBjb25zdCBjaGFyICp0ZXN0X25hbWUsIGNvbnN0IGNoYXIgKnNldHVwX25hbWUpCi17Ci0gIFRlc3RSZXN1bHQgKnRyID0gTlVMTDsKLSAgRml4dHVyZSAqc2V0dXBfZml4dHVyZTsKLQotICBpZiAoZm9ya191c2FnZSA9PSBDS19GT1JLKSB7Ci0gICAgc2VuZF9jdHhfaW5mbyAoQ0tfQ1RYX1NFVFVQKTsKLSAgfQotCi0gIGZvciAoY2hlY2tfbGlzdF9mcm9udCAoZml4dHVyZV9saXN0KTsgIWNoZWNrX2xpc3RfYXRfZW5kIChmaXh0dXJlX2xpc3QpOwotICAgICAgY2hlY2tfbGlzdF9hZHZhbmNlIChmaXh0dXJlX2xpc3QpKSB7Ci0gICAgc2V0dXBfZml4dHVyZSA9IChGaXh0dXJlICopIGNoZWNrX2xpc3RfdmFsIChmaXh0dXJlX2xpc3QpOwotCi0gICAgaWYgKGZvcmtfdXNhZ2UgPT0gQ0tfTk9GT1JLKSB7Ci0gICAgICBzZW5kX2N0eF9pbmZvIChDS19DVFhfU0VUVVApOwotCi0gICAgICBpZiAoMCA9PSBzZXRqbXAgKGVycm9yX2ptcF9idWZmZXIpKSB7Ci0gICAgICAgIHNldHVwX2ZpeHR1cmUtPmZ1biAoKTsKLSAgICAgIH0KLQotICAgICAgLyogU3RvcCB0aGUgc2V0dXAgYW5kIHJldHVybiB0aGUgZmFpbHVyZSBpbiBub2ZvcmsgbW9kZS4gKi8KLSAgICAgIHRyID0gcmVjZWl2ZV9yZXN1bHRfaW5mb19ub2ZvcmsgKHRlc3RfbmFtZSwgc2V0dXBfbmFtZSwgMCwgLTEpOwotICAgICAgaWYgKHRyLT5ydHlwZSAhPSBDS19QQVNTKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBmcmVlICh0ci0+ZmlsZSk7Ci0gICAgICBmcmVlICh0ci0+bXNnKTsKLSAgICAgIGZyZWUgKHRyKTsKLSAgICAgIHRyID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgc2V0dXBfZml4dHVyZS0+ZnVuICgpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiB0cjsKLX0KLQotc3RhdGljIGludAotc3J1bm5lcl9ydW5fdW5jaGVja2VkX3NldHVwIChTUnVubmVyICogc3IsIFRDYXNlICogdGMpCi17Ci0gIFRlc3RSZXN1bHQgKnRyID0gTlVMTDsKLSAgaW50IHJ2YWwgPSAxOwotCi0gIHNldF9mb3JrX3N0YXR1cyAoQ0tfTk9GT1JLKTsKLSAgdHIgPSBzcnVubmVyX3J1bl9zZXR1cCAodGMtPnVuY2hfc2Zsc3QsIENLX05PRk9SSywgdGMtPm5hbWUsCi0gICAgICAidW5jaGVja2VkX3NldHVwIik7Ci0gIHNldF9mb3JrX3N0YXR1cyAoc3J1bm5lcl9mb3JrX3N0YXR1cyAoc3IpKTsKLQotICBpZiAodHIgIT0gTlVMTCAmJiB0ci0+cnR5cGUgIT0gQ0tfUEFTUykgewotICAgIHNydW5uZXJfYWRkX2ZhaWx1cmUgKHNyLCB0cik7Ci0gICAgcnZhbCA9IDA7Ci0gIH0KLQotICByZXR1cm4gcnZhbDsKLX0KLQotc3RhdGljIFRlc3RSZXN1bHQgKgotdGNhc2VfcnVuX2NoZWNrZWRfc2V0dXAgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0YykKLXsKLSAgVGVzdFJlc3VsdCAqdHIgPSBzcnVubmVyX3J1bl9zZXR1cCAodGMtPmNoX3NmbHN0LCBzcnVubmVyX2Zvcmtfc3RhdHVzIChzciksCi0gICAgICB0Yy0+bmFtZSwgImNoZWNrZWRfc2V0dXAiKTsKLQotICByZXR1cm4gdHI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcnVubmVyX3J1bl90ZWFyZG93biAoTGlzdCAqIGZpeHR1cmVfbGlzdCwgZW51bSBmb3JrX3N0YXR1cyBmb3JrX3VzYWdlKQotewotICBGaXh0dXJlICpmaXh0dXJlOwotCi0gIGZvciAoY2hlY2tfbGlzdF9mcm9udCAoZml4dHVyZV9saXN0KTsgIWNoZWNrX2xpc3RfYXRfZW5kIChmaXh0dXJlX2xpc3QpOwotICAgICAgY2hlY2tfbGlzdF9hZHZhbmNlIChmaXh0dXJlX2xpc3QpKSB7Ci0gICAgZml4dHVyZSA9IChGaXh0dXJlICopIGNoZWNrX2xpc3RfdmFsIChmaXh0dXJlX2xpc3QpOwotICAgIHNlbmRfY3R4X2luZm8gKENLX0NUWF9URUFSRE9XTik7Ci0KLSAgICBpZiAoZm9ya191c2FnZSA9PSBDS19OT0ZPUkspIHsKLSAgICAgIGlmICgwID09IHNldGptcCAoZXJyb3Jfam1wX2J1ZmZlcikpIHsKLSAgICAgICAgZml4dHVyZS0+ZnVuICgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogQWJvcnQgdGhlIHJlbWFpbmluZyB0ZWFyZG93bnMgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZpeHR1cmUtPmZ1biAoKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXNydW5uZXJfcnVuX3VuY2hlY2tlZF90ZWFyZG93biAoU1J1bm5lciAqIHNyLCBUQ2FzZSAqIHRjKQotewotICBzcnVubmVyX3J1bl90ZWFyZG93biAodGMtPnVuY2hfdGZsc3QsIHNydW5uZXJfZm9ya19zdGF0dXMgKHNyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10Y2FzZV9ydW5fY2hlY2tlZF90ZWFyZG93biAoVENhc2UgKiB0YykKLXsKLSAgc3J1bm5lcl9ydW5fdGVhcmRvd24gKHRjLT5jaF90ZmxzdCwgQ0tfTk9GT1JLKTsKLX0KLQotc3RhdGljIHZvaWQKLXNydW5uZXJfcnVuX3RjYXNlIChTUnVubmVyICogc3IsIFRDYXNlICogdGMpCi17Ci0gIGlmIChzcnVubmVyX3J1bl91bmNoZWNrZWRfc2V0dXAgKHNyLCB0YykpIHsKLSAgICBzcnVubmVyX2l0ZXJhdGVfdGNhc2VfdGZ1bnMgKHNyLCB0Yyk7Ci0gICAgc3J1bm5lcl9ydW5fdW5jaGVja2VkX3RlYXJkb3duIChzciwgdGMpOwotICB9Ci19Ci0KLXN0YXRpYyBUZXN0UmVzdWx0ICoKLXRjYXNlX3J1bl90ZnVuX25vZm9yayAoU1J1bm5lciAqIHNyLCBUQ2FzZSAqIHRjLCBURiAqIHRmdW4sIGludCBpKQotewotICBUZXN0UmVzdWx0ICp0cjsKLSAgc3RydWN0IHRpbWVzcGVjIHRzX3N0YXJ0ID0geyAwLCAwIH0sIHRzX2VuZCA9IHsKLSAgMCwgMH07Ci0KLSAgdHIgPSB0Y2FzZV9ydW5fY2hlY2tlZF9zZXR1cCAoc3IsIHRjKTsKLSAgaWYgKHRyID09IE5VTEwpIHsKLSAgICBjbG9ja19nZXR0aW1lIChjaGVja19nZXRfY2xvY2tpZCAoKSwgJnRzX3N0YXJ0KTsKLSAgICBpZiAoMCA9PSBzZXRqbXAgKGVycm9yX2ptcF9idWZmZXIpKSB7Ci0gICAgICB0ZnVuLT5mbiAoaSk7Ci0gICAgfQotICAgIGNsb2NrX2dldHRpbWUgKGNoZWNrX2dldF9jbG9ja2lkICgpLCAmdHNfZW5kKTsKLSAgICB0Y2FzZV9ydW5fY2hlY2tlZF90ZWFyZG93biAodGMpOwotICAgIHJldHVybiByZWNlaXZlX3Jlc3VsdF9pbmZvX25vZm9yayAodGMtPm5hbWUsIHRmdW4tPm5hbWUsIGksCi0gICAgICAgIERJRkZfSU5fVVNFQyAodHNfc3RhcnQsIHRzX2VuZCkpOwotICB9Ci0KLSAgcmV0dXJuIHRyOwotfQotCi1zdGF0aWMgVGVzdFJlc3VsdCAqCi1yZWNlaXZlX3Jlc3VsdF9pbmZvX25vZm9yayAoY29uc3QgY2hhciAqdGNuYW1lLAotICAgIGNvbnN0IGNoYXIgKnRuYW1lLCBpbnQgaXRlciwgaW50IGR1cmF0aW9uKQotewotICBUZXN0UmVzdWx0ICp0cjsKLQotICB0ciA9IHJlY2VpdmVfdGVzdF9yZXN1bHQgKDApOwotICBpZiAodHIgPT0gTlVMTCkgewotICAgIGVwcmludGYgKCJGYWlsZWQgdG8gcmVjZWl2ZSB0ZXN0IHJlc3VsdCIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gIH0gZWxzZSB7Ci0gICAgdHItPnRjbmFtZSA9IHRjbmFtZTsKLSAgICB0ci0+dG5hbWUgPSB0bmFtZTsKLSAgICB0ci0+aXRlciA9IGl0ZXI7Ci0gICAgdHItPmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgc2V0X25vZm9ya19pbmZvICh0cik7Ci0gIH0KLQotICByZXR1cm4gdHI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXRfbm9mb3JrX2luZm8gKFRlc3RSZXN1bHQgKiB0cikKLXsKLSAgaWYgKHRyLT5tc2cgPT0gTlVMTCkgewotICAgIHRyLT5ydHlwZSA9IENLX1BBU1M7Ci0gICAgdHItPm1zZyA9IHBhc3NfbXNnICgpOwotICB9IGVsc2UgewotICAgIHRyLT5ydHlwZSA9IENLX0ZBSUxVUkU7Ci0gIH0KLX0KLQotc3RhdGljIGNoYXIgKgotcGFzc19tc2cgKHZvaWQpCi17Ci0gIHJldHVybiBzdHJkdXAgKCJQYXNzZWQiKTsKLX0KLQotI2lmIGRlZmluZWQoSEFWRV9GT1JLKSAmJiBIQVZFX0ZPUks9PTEKLXN0YXRpYyBUZXN0UmVzdWx0ICoKLXRjYXNlX3J1bl90ZnVuX2ZvcmsgKFNSdW5uZXIgKiBzciwgVENhc2UgKiB0YywgVEYgKiB0ZnVuLCBpbnQgaSkKLXsKLSAgcGlkX3QgcGlkX3c7Ci0gIHBpZF90IHBpZDsKLSAgaW50IHN0YXR1cyA9IDA7Ci0gIHN0cnVjdCB0aW1lc3BlYyB0c19zdGFydCA9IHsgMCwgMCB9LCB0c19lbmQgPSB7Ci0gIDAsIDB9OwotCi0gIHRpbWVyX3QgdGltZXJpZDsKLSAgc3RydWN0IGl0aW1lcnNwZWMgdGltZXJfc3BlYzsKLSAgVGVzdFJlc3VsdCAqdHI7Ci0KLQotICBwaWQgPSBmb3JrICgpOwotICBpZiAocGlkID09IC0xKQotICAgIGVwcmludGYgKCJFcnJvciBpbiBjYWxsIHRvIGZvcms6IiwgX19GSUxFX18sIF9fTElORV9fIC0gMik7Ci0gIGlmIChwaWQgPT0gMCkgewotICAgIHNldHBnaWQgKDAsIDApOwotICAgIGdyb3VwX3BpZCA9IGdldHBncnAgKCk7Ci0gICAgdHIgPSB0Y2FzZV9ydW5fY2hlY2tlZF9zZXR1cCAoc3IsIHRjKTsKLSAgICBmcmVlICh0cik7Ci0gICAgY2xvY2tfZ2V0dGltZSAoY2hlY2tfZ2V0X2Nsb2NraWQgKCksICZ0c19zdGFydCk7Ci0gICAgdGZ1bi0+Zm4gKGkpOwotICAgIGNsb2NrX2dldHRpbWUgKGNoZWNrX2dldF9jbG9ja2lkICgpLCAmdHNfZW5kKTsKLSAgICB0Y2FzZV9ydW5fY2hlY2tlZF90ZWFyZG93biAodGMpOwotICAgIHNlbmRfZHVyYXRpb25faW5mbyAoRElGRl9JTl9VU0VDICh0c19zdGFydCwgdHNfZW5kKSk7Ci0gICAgZXhpdCAoRVhJVF9TVUNDRVNTKTsKLSAgfSBlbHNlIHsKLSAgICBncm91cF9waWQgPSBwaWQ7Ci0gIH0KLQotICBhbGFybV9yZWNlaXZlZCA9IDA7Ci0KLSAgaWYgKHRpbWVyX2NyZWF0ZSAoY2hlY2tfZ2V0X2Nsb2NraWQgKCksCi0gICAgICAgICAgTlVMTCAvKiBmaXJlIFNJR0FMUk0gaWYgdGltZXIgZXhwaXJlcyAqLyAsCi0gICAgICAgICAgJnRpbWVyaWQpID09IDApIHsKLSAgICAvKiBTZXQgdGhlIHRpbWVyIHRvIGZpcmUgb25jZSAqLwotICAgIHRpbWVyX3NwZWMuaXRfdmFsdWUgPSB0Yy0+dGltZW91dDsKLSAgICB0aW1lcl9zcGVjLml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgdGltZXJfc3BlYy5pdF9pbnRlcnZhbC50dl9uc2VjID0gMDsKLSAgICBpZiAodGltZXJfc2V0dGltZSAodGltZXJpZCwgMCwgJnRpbWVyX3NwZWMsIE5VTEwpID09IDApIHsKLSAgICAgIGRvIHsKLSAgICAgICAgcGlkX3cgPSB3YWl0cGlkIChwaWQsICZzdGF0dXMsIDApOwotICAgICAgfQotICAgICAgd2hpbGUgKHBpZF93ID09IC0xKTsKLSAgICB9IGVsc2UgewotICAgICAgZXByaW50ZiAoIkVycm9yIGluIGNhbGwgdG8gdGltZXJfc2V0dGltZToiLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIH0KLQotICAgIC8qIElmIHRoZSB0aW1lciBoYXMgbm90IGZpcmVkLCBkaXNhYmxlIGl0ICovCi0gICAgdGltZXJfZGVsZXRlICh0aW1lcmlkKTsKLSAgfSBlbHNlIHsKLSAgICBlcHJpbnRmICgiRXJyb3IgaW4gY2FsbCB0byB0aW1lcl9jcmVhdGU6IiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgfQotCi0gIGtpbGxwZyAocGlkLCBTSUdLSUxMKTsgICAgICAgIC8qIEtpbGwgcmVtYWluaW5nIHByb2Nlc3Nlcy4gKi8KLQotICByZXR1cm4gcmVjZWl2ZV9yZXN1bHRfaW5mb19mb3JrICh0Yy0+bmFtZSwgdGZ1bi0+bmFtZSwgaSwgc3RhdHVzLAotICAgICAgdGZ1bi0+c2lnbmFsLCB0ZnVuLT5hbGxvd2VkX2V4aXRfdmFsdWUpOwotfQotCi1zdGF0aWMgVGVzdFJlc3VsdCAqCi1yZWNlaXZlX3Jlc3VsdF9pbmZvX2ZvcmsgKGNvbnN0IGNoYXIgKnRjbmFtZSwKLSAgICBjb25zdCBjaGFyICp0bmFtZSwKLSAgICBpbnQgaXRlciwgaW50IHN0YXR1cywgaW50IGV4cGVjdGVkX3NpZ25hbCwgc2lnbmVkIGNoYXIgYWxsb3dlZF9leGl0X3ZhbHVlKQotewotICBUZXN0UmVzdWx0ICp0cjsKLQotICB0ciA9IHJlY2VpdmVfdGVzdF9yZXN1bHQgKHdhc2Vycm9yIChzdGF0dXMsIGV4cGVjdGVkX3NpZ25hbCkpOwotICBpZiAodHIgPT0gTlVMTCkgewotICAgIGVwcmludGYgKCJGYWlsZWQgdG8gcmVjZWl2ZSB0ZXN0IHJlc3VsdCIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gIH0gZWxzZSB7Ci0gICAgdHItPnRjbmFtZSA9IHRjbmFtZTsKLSAgICB0ci0+dG5hbWUgPSB0bmFtZTsKLSAgICB0ci0+aXRlciA9IGl0ZXI7Ci0gICAgc2V0X2ZvcmtfaW5mbyAodHIsIHN0YXR1cywgZXhwZWN0ZWRfc2lnbmFsLCBhbGxvd2VkX2V4aXRfdmFsdWUpOwotICB9Ci0KLSAgcmV0dXJuIHRyOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X2ZvcmtfaW5mbyAoVGVzdFJlc3VsdCAqIHRyLCBpbnQgc3RhdHVzLCBpbnQgc2lnbmFsX2V4cGVjdGVkLAotICAgIHNpZ25lZCBjaGFyIGFsbG93ZWRfZXhpdF92YWx1ZSkKLXsKLSAgaW50IHdhc19zaWcgPSBXSUZTSUdOQUxFRCAoc3RhdHVzKTsKLSAgaW50IHdhc19leGl0ID0gV0lGRVhJVEVEIChzdGF0dXMpOwotICBzaWduZWQgY2hhciBleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTIChzdGF0dXMpOwotICBpbnQgc2lnbmFsX3JlY2VpdmVkID0gV1RFUk1TSUcgKHN0YXR1cyk7Ci0KLSAgaWYgKHdhc19zaWcpIHsKLSAgICBpZiAoc2lnbmFsX2V4cGVjdGVkID09IHNpZ25hbF9yZWNlaXZlZCkgewotICAgICAgaWYgKGFsYXJtX3JlY2VpdmVkKSB7Ci0gICAgICAgIC8qIEdvdCBhbGFybSBpbnN0ZWFkIG9mIHNpZ25hbCAqLwotICAgICAgICB0ci0+cnR5cGUgPSBDS19FUlJPUjsKLSAgICAgICAgaWYgKHRyLT5tc2cgIT0gTlVMTCkgewotICAgICAgICAgIGZyZWUgKHRyLT5tc2cpOwotICAgICAgICB9Ci0gICAgICAgIHRyLT5tc2cgPSBzaWduYWxfZXJyb3JfbXNnIChzaWduYWxfcmVjZWl2ZWQsIHNpZ25hbF9leHBlY3RlZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0ci0+cnR5cGUgPSBDS19QQVNTOwotICAgICAgICBpZiAodHItPm1zZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgZnJlZSAodHItPm1zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgdHItPm1zZyA9IHBhc3NfbXNnICgpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoc2lnbmFsX2V4cGVjdGVkICE9IDApIHsKLSAgICAgIC8qIHNpZ25hbCByZWNlaXZlZCwgYnV0IG5vdCB0aGUgZXhwZWN0ZWQgb25lICovCi0gICAgICB0ci0+cnR5cGUgPSBDS19FUlJPUjsKLSAgICAgIGlmICh0ci0+bXNnICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZSAodHItPm1zZyk7Ci0gICAgICB9Ci0gICAgICB0ci0+bXNnID0gc2lnbmFsX2Vycm9yX21zZyAoc2lnbmFsX3JlY2VpdmVkLCBzaWduYWxfZXhwZWN0ZWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBzaWduYWwgcmVjZWl2ZWQgYW5kIG5vbmUgZXhwZWN0ZWQgKi8KLSAgICAgIHRyLT5ydHlwZSA9IENLX0VSUk9SOwotICAgICAgaWYgKHRyLT5tc2cgIT0gTlVMTCkgewotICAgICAgICBmcmVlICh0ci0+bXNnKTsKLSAgICAgIH0KLSAgICAgIHRyLT5tc2cgPSBzaWduYWxfbXNnIChzaWduYWxfcmVjZWl2ZWQpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzaWduYWxfZXhwZWN0ZWQgPT0gMCkgewotICAgIGlmICh3YXNfZXhpdCAmJiBleGl0X3N0YXR1cyA9PSBhbGxvd2VkX2V4aXRfdmFsdWUpIHsKLSAgICAgIHRyLT5ydHlwZSA9IENLX1BBU1M7Ci0gICAgICBpZiAodHItPm1zZyAhPSBOVUxMKSB7Ci0gICAgICAgIGZyZWUgKHRyLT5tc2cpOwotICAgICAgfQotICAgICAgdHItPm1zZyA9IHBhc3NfbXNnICgpOwotICAgIH0gZWxzZSBpZiAod2FzX2V4aXQgJiYgZXhpdF9zdGF0dXMgIT0gYWxsb3dlZF9leGl0X3ZhbHVlKSB7Ci0gICAgICBpZiAodHItPm1zZyA9PSBOVUxMKSB7ICAgIC8qIGVhcmx5IGV4aXQgKi8KLSAgICAgICAgdHItPnJ0eXBlID0gQ0tfRVJST1I7Ci0gICAgICAgIHRyLT5tc2cgPSBleGl0X21zZyAoZXhpdF9zdGF0dXMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdHItPnJ0eXBlID0gQ0tfRkFJTFVSRTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGEgc2lnbmFsIHdhcyBleHBlY3RlZCBhbmQgbm9uZSByYWlzZWQgKi8KLSAgICBpZiAod2FzX2V4aXQpIHsKLSAgICAgIGlmICh0ci0+bXNnICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZSAodHItPm1zZyk7Ci0gICAgICB9Ci0gICAgICB0ci0+bXNnID0gZXhpdF9tc2cgKGV4aXRfc3RhdHVzKTsKLSAgICAgIHRyLT5ydHlwZSA9IENLX0ZBSUxVUkU7ICAgLyogbm9ybWFsIGV4aXQgc3RhdHVzICovCi0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBjaGFyICoKLXNpZ25hbF9tc2cgKGludCBzaWduYWwpCi17Ci0gIGNoYXIgKm1zZyA9IChjaGFyICopIGVtYWxsb2MgKE1TR19MRU4pOyAgICAgICAvKiBmcmVlJ2QgYnkgY2FsbGVyICovCi0KLSAgaWYgKGFsYXJtX3JlY2VpdmVkKSB7Ci0gICAgc25wcmludGYgKG1zZywgTVNHX0xFTiwgIlRlc3QgdGltZW91dCBleHBpcmVkIik7Ci0gIH0gZWxzZSB7Ci0gICAgc25wcmludGYgKG1zZywgTVNHX0xFTiwgIlJlY2VpdmVkIHNpZ25hbCAlZCAoJXMpIiwKLSAgICAgICAgc2lnbmFsLCBzdHJzaWduYWwgKHNpZ25hbCkpOwotICB9Ci0gIHJldHVybiBtc2c7Ci19Ci0KLXN0YXRpYyBjaGFyICoKLXNpZ25hbF9lcnJvcl9tc2cgKGludCBzaWduYWxfcmVjZWl2ZWQsIGludCBzaWduYWxfZXhwZWN0ZWQpCi17Ci0gIGNoYXIgKnNpZ19yX3N0cjsKLSAgY2hhciAqc2lnX2Vfc3RyOwotICBjaGFyICptc2cgPSAoY2hhciAqKSBlbWFsbG9jIChNU0dfTEVOKTsgICAgICAgLyogZnJlZSdkIGJ5IGNhbGxlciAqLwotCi0gIHNpZ19yX3N0ciA9IHN0cmR1cCAoc3Ryc2lnbmFsIChzaWduYWxfcmVjZWl2ZWQpKTsKLSAgc2lnX2Vfc3RyID0gc3RyZHVwIChzdHJzaWduYWwgKHNpZ25hbF9leHBlY3RlZCkpOwotICBpZiAoYWxhcm1fcmVjZWl2ZWQpIHsKLSAgICBzbnByaW50ZiAobXNnLCBNU0dfTEVOLAotICAgICAgICAiVGVzdCB0aW1lb3V0IGV4cGlyZWQsIGV4cGVjdGVkIHNpZ25hbCAlZCAoJXMpIiwKLSAgICAgICAgc2lnbmFsX2V4cGVjdGVkLCBzaWdfZV9zdHIpOwotICB9IGVsc2UgewotICAgIHNucHJpbnRmIChtc2csIE1TR19MRU4sICJSZWNlaXZlZCBzaWduYWwgJWQgKCVzKSwgZXhwZWN0ZWQgJWQgKCVzKSIsCi0gICAgICAgIHNpZ25hbF9yZWNlaXZlZCwgc2lnX3Jfc3RyLCBzaWduYWxfZXhwZWN0ZWQsIHNpZ19lX3N0cik7Ci0gIH0KLSAgZnJlZSAoc2lnX3Jfc3RyKTsKLSAgZnJlZSAoc2lnX2Vfc3RyKTsKLSAgcmV0dXJuIG1zZzsKLX0KLQotc3RhdGljIGNoYXIgKgotZXhpdF9tc2cgKGludCBleGl0dmFsKQotewotICBjaGFyICptc2cgPSAoY2hhciAqKSBlbWFsbG9jIChNU0dfTEVOKTsgICAgICAgLyogZnJlZSdkIGJ5IGNhbGxlciAqLwotCi0gIHNucHJpbnRmIChtc2csIE1TR19MRU4sICJFYXJseSBleGl0IHdpdGggcmV0dXJuIHZhbHVlICVkIiwgZXhpdHZhbCk7Ci0gIHJldHVybiBtc2c7Ci19Ci0KLXN0YXRpYyBpbnQKLXdhc2Vycm9yIChpbnQgc3RhdHVzLCBpbnQgc2lnbmFsX2V4cGVjdGVkKQotewotICBpbnQgd2FzX3NpZyA9IFdJRlNJR05BTEVEIChzdGF0dXMpOwotICBpbnQgd2FzX2V4aXQgPSBXSUZFWElURUQgKHN0YXR1cyk7Ci0gIGludCBleGl0X3N0YXR1cyA9IFdFWElUU1RBVFVTIChzdGF0dXMpOwotICBpbnQgc2lnbmFsX3JlY2VpdmVkID0gV1RFUk1TSUcgKHN0YXR1cyk7Ci0KLSAgcmV0dXJuICgod2FzX3NpZyAmJiAoc2lnbmFsX3JlY2VpdmVkICE9IHNpZ25hbF9leHBlY3RlZCkpIHx8Ci0gICAgICAod2FzX2V4aXQgJiYgZXhpdF9zdGF0dXMgIT0gMCkpOwotfQotI2VuZGlmIC8qIEhBVkVfRk9SSyAqLwotCi1lbnVtIGZvcmtfc3RhdHVzCi1zcnVubmVyX2Zvcmtfc3RhdHVzIChTUnVubmVyICogc3IpCi17Ci0gIGlmIChzci0+ZnN0YXQgPT0gQ0tfRk9SS19HRVRFTlYpIHsKLSAgICBjaGFyICplbnYgPSBnZXRlbnYgKCJDS19GT1JLIik7Ci0KLSAgICBpZiAoZW52ID09IE5VTEwpCi0jaWYgZGVmaW5lZChIQVZFX0ZPUkspICYmIEhBVkVfRk9SSz09MQotICAgICAgcmV0dXJuIENLX0ZPUks7Ci0jZWxzZQotICAgICAgcmV0dXJuIENLX05PRk9SSzsKLSNlbmRpZgotICAgIGlmIChzdHJjbXAgKGVudiwgIm5vIikgPT0gMCkKLSAgICAgIHJldHVybiBDS19OT0ZPUks7Ci0gICAgZWxzZSB7Ci0jaWYgZGVmaW5lZChIQVZFX0ZPUkspICYmIEhBVkVfRk9SSz09MQotICAgICAgcmV0dXJuIENLX0ZPUks7Ci0jZWxzZSAvKiBIQVZFX0ZPUksgKi8KLSAgICAgIGVwcmludGYgKCJUaGlzIHZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBmb3JrIiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICAgIHJldHVybiBDS19OT0ZPUks7Ci0jZW5kaWYgLyogSEFWRV9GT1JLICovCi0gICAgfQotICB9IGVsc2UKLSAgICByZXR1cm4gc3ItPmZzdGF0OwotfQotCi12b2lkCi1zcnVubmVyX3NldF9mb3JrX3N0YXR1cyAoU1J1bm5lciAqIHNyLCBlbnVtIGZvcmtfc3RhdHVzIGZzdGF0KQotewotI2lmICFkZWZpbmVkKEhBVkVfRk9SSykgfHwgSEFWRV9GT1JLPT0wCi0gIC8qIElmIGZvcmsoKSBpcyB1bmF2YWlsYWJsZSwgZG8gbm90IGFsbG93IGEgZm9yayBtb2RlIHRvIGJlIHNldCAqLwotICBpZiAoZnN0YXQgIT0gQ0tfTk9GT1JLKSB7Ci0gICAgZXByaW50ZiAoIlRoaXMgdmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGZvcmsiLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICB9Ci0jZW5kaWYgLyogISBIQVZFX0ZPUksgKi8KLSAgc3ItPmZzdGF0ID0gZnN0YXQ7Ci19Ci0KLXZvaWQKLXNydW5uZXJfcnVuX2FsbCAoU1J1bm5lciAqIHNyLCBlbnVtIHByaW50X291dHB1dCBwcmludF9tb2RlKQotewotICBzcnVubmVyX3J1biAoc3IsIE5VTEwsICAgICAgICAvKiBBbGwgdGVzdCBzdWl0ZXMuICAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgdGVzdCBjYXNlcy4gICAqLwotICAgICAgcHJpbnRfbW9kZSk7Ci19Ci0KLXZvaWQKLXNydW5uZXJfcnVuIChTUnVubmVyICogc3IsIGNvbnN0IGNoYXIgKnNuYW1lLCBjb25zdCBjaGFyICp0Y25hbWUsCi0gICAgZW51bSBwcmludF9vdXRwdXQgcHJpbnRfbW9kZSkKLXsKLSAgLyogR2V0IHRoZSBzZWxlY3RlZCB0ZXN0IHN1aXRlIGFuZCB0ZXN0IGNhc2UgZnJvbSB0aGUKLSAgICAgZW52aXJvbm1lbnQuICAqLwotICBpZiAoIXRjbmFtZSkKLSAgICB0Y25hbWUgPSBnZXRlbnYgKCJDS19SVU5fQ0FTRSIpOwotICBpZiAoIXNuYW1lKQotICAgIHNuYW1lID0gZ2V0ZW52ICgiQ0tfUlVOX1NVSVRFIik7Ci0KLSAgaWYgKHNyID09IE5VTEwpCi0gICAgcmV0dXJuOwotICBpZiAocHJpbnRfbW9kZSA+PSBDS19MQVNUKSB7Ci0gICAgZXByaW50ZiAoIkJhZCBwcmludF9tb2RlIGFyZ3VtZW50IHRvIHNydW5uZXJfcnVuX2FsbDogJWQiLAotICAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIHByaW50X21vZGUpOwotICB9Ci0jaWYgZGVmaW5lZChIQVZFX1NJR0FDVElPTikgJiYgZGVmaW5lZChIQVZFX0ZPUkspCi0gIG1lbXNldCAoJm5ld19hY3Rpb24sIDAsIHNpemVvZiBuZXdfYWN0aW9uKTsKLSAgbmV3X2FjdGlvblswXS5zYV9oYW5kbGVyID0gc2lnX2hhbmRsZXI7Ci0gIHNpZ2FjdGlvbiAoU0lHQUxSTSwgJm5ld19hY3Rpb25bMF0sICZvbGRfYWN0aW9uWzBdKTsKLSAgbmV3X2FjdGlvblsxXS5zYV9oYW5kbGVyID0gc2lnX2hhbmRsZXI7Ci0gIHNpZ2FjdGlvbiAoU0lHSU5ULCAmbmV3X2FjdGlvblsxXSwgJm9sZF9hY3Rpb25bMV0pOwotICBuZXdfYWN0aW9uWzJdLnNhX2hhbmRsZXIgPSBzaWdfaGFuZGxlcjsKLSAgc2lnYWN0aW9uIChTSUdURVJNLCAmbmV3X2FjdGlvblsyXSwgJm9sZF9hY3Rpb25bMl0pOwotI2VuZGlmIC8qIEhBVkVfU0lHQUNUSU9OICYmIEhBVkVfRk9SSyAqLwotICBzcnVubmVyX3J1bl9pbml0IChzciwgcHJpbnRfbW9kZSk7Ci0gIHNydW5uZXJfaXRlcmF0ZV9zdWl0ZXMgKHNyLCBzbmFtZSwgdGNuYW1lLCBwcmludF9tb2RlKTsKLSAgc3J1bm5lcl9ydW5fZW5kIChzciwgcHJpbnRfbW9kZSk7Ci0jaWYgZGVmaW5lZChIQVZFX1NJR0FDVElPTikgJiYgZGVmaW5lZChIQVZFX0ZPUkspCi0gIHNpZ2FjdGlvbiAoU0lHQUxSTSwgJm9sZF9hY3Rpb25bMF0sIE5VTEwpOwotICBzaWdhY3Rpb24gKFNJR0lOVCwgJm9sZF9hY3Rpb25bMV0sIE5VTEwpOwotICBzaWdhY3Rpb24gKFNJR1RFUk0sICZvbGRfYWN0aW9uWzJdLCBOVUxMKTsKLSNlbmRpZiAvKiBIQVZFX1NJR0FDVElPTiAmJiBIQVZFX0ZPUksgKi8KLX0KLQotcGlkX3QKLWNoZWNrX2ZvcmsgKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChIQVZFX0ZPUkspICYmIEhBVkVfRk9SSz09MQotICBwaWRfdCBwaWQgPSBmb3JrICgpOwotCi0gIC8qIFNldCB0aGUgcHJvY2VzcyB0byBhIHByb2Nlc3MgZ3JvdXAgdG8gYmUgYWJsZSB0byBraWxsIGl0IGVhc2lseS4gKi8KLSAgaWYgKHBpZCA+PSAwKSB7Ci0gICAgc2V0cGdpZCAocGlkLCBncm91cF9waWQpOwotICB9Ci0gIHJldHVybiBwaWQ7Ci0jZWxzZSAvKiBIQVZFX0ZPUksgKi8KLSAgZXByaW50ZiAoIlRoaXMgdmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGZvcmsiLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICByZXR1cm4gMDsKLSNlbmRpZiAvKiBIQVZFX0ZPUksgKi8KLX0KLQotdm9pZAotY2hlY2tfd2FpdHBpZF9hbmRfZXhpdCAocGlkX3QgcGlkIENLX0FUVFJJQlVURV9VTlVTRUQpCi17Ci0jaWYgZGVmaW5lZChIQVZFX0ZPUkspICYmIEhBVkVfRk9SSz09MQotICBwaWRfdCBwaWRfdzsKLSAgaW50IHN0YXR1czsKLQotICBpZiAocGlkID4gMCkgewotICAgIGRvIHsKLSAgICAgIHBpZF93ID0gd2FpdHBpZCAocGlkLCAmc3RhdHVzLCAwKTsKLSAgICB9Ci0gICAgd2hpbGUgKHBpZF93ID09IC0xKTsKLSAgICBpZiAod2FzZXJyb3IgKHN0YXR1cywgMCkpIHsKLSAgICAgIGV4aXQgKEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotICB9Ci0gIGV4aXQgKEVYSVRfU1VDQ0VTUyk7Ci0jZWxzZSAvKiBIQVZFX0ZPUksgKi8KLSAgZXByaW50ZiAoIlRoaXMgdmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGZvcmsiLCBfX0ZJTEVfXywgX19MSU5FX18pOwotI2VuZGlmIC8qIEhBVkVfRk9SSyAqLwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19zdHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFhMThiNy4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9jaGVja19zdHIuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKgotICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQwotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibGliY29tcGF0LmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi0jaW5jbHVkZSAiaW50ZXJuYWwtY2hlY2suaCIKLSNpbmNsdWRlICJjaGVja19saXN0LmgiCi0jaW5jbHVkZSAiY2hlY2tfZXJyb3IuaCIKLSNpbmNsdWRlICJjaGVja19pbXBsLmgiCi0jaW5jbHVkZSAiY2hlY2tfc3RyLmgiCi0KLXN0YXRpYyBjb25zdCBjaGFyICp0cl90eXBlX3N0ciAoVGVzdFJlc3VsdCAqIHRyKTsKLXN0YXRpYyBpbnQgcGVyY2VudF9wYXNzZWQgKFRlc3RTdGF0cyAqIHQpOwotCi1jaGFyICoKLXRyX3N0ciAoVGVzdFJlc3VsdCAqIHRyKQotewotICBjb25zdCBjaGFyICpleGFjdF9tc2c7Ci0gIGNoYXIgKnJzdHI7Ci0KLSAgZXhhY3RfbXNnID0gKHRyLT5ydHlwZSA9PSBDS19FUlJPUikgPyAiKGFmdGVyIHRoaXMgcG9pbnQpICIgOiAiIjsKLQotICByc3RyID0gY2tfc3RyZHVwX3ByaW50ZiAoIiVzOiVkOiVzOiVzOiVzOiVkOiAlcyVzIiwKLSAgICAgIHRyLT5maWxlLCB0ci0+bGluZSwKLSAgICAgIHRyX3R5cGVfc3RyICh0ciksIHRyLT50Y25hbWUsIHRyLT50bmFtZSwgdHItPml0ZXIsIGV4YWN0X21zZywgdHItPm1zZyk7Ci0KLSAgcmV0dXJuIHJzdHI7Ci19Ci0KLWNoYXIgKgotdHJfc2hvcnRfc3RyIChUZXN0UmVzdWx0ICogdHIpCi17Ci0gIGNvbnN0IGNoYXIgKmV4YWN0X21zZzsKLSAgY2hhciAqcnN0cjsKLQotICBleGFjdF9tc2cgPSAodHItPnJ0eXBlID09IENLX0VSUk9SKSA/ICIoYWZ0ZXIgdGhpcyBwb2ludCkgIiA6ICIiOwotCi0gIHJzdHIgPSBja19zdHJkdXBfcHJpbnRmICgiJXM6JWQ6ICVzJXMiLAotICAgICAgdHItPmZpbGUsIHRyLT5saW5lLCBleGFjdF9tc2csIHRyLT5tc2cpOwotCi0gIHJldHVybiByc3RyOwotfQotCi1jaGFyICoKLXNyX3N0YXRfc3RyIChTUnVubmVyICogc3IpCi17Ci0gIGNoYXIgKnN0cjsKLSAgVGVzdFN0YXRzICp0czsKLQotICB0cyA9IHNyLT5zdGF0czsKLQotICBzdHIgPSBja19zdHJkdXBfcHJpbnRmICgiJWQlJTogQ2hlY2tzOiAlZCwgRmFpbHVyZXM6ICVkLCBFcnJvcnM6ICVkIiwKLSAgICAgIHBlcmNlbnRfcGFzc2VkICh0cyksIHRzLT5uX2NoZWNrZWQsIHRzLT5uX2ZhaWxlZCwgdHMtPm5fZXJyb3JzKTsKLQotICByZXR1cm4gc3RyOwotfQotCi1jaGFyICoKLWNrX3N0cmR1cF9wcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICAvKiBHdWVzcyB3ZSBuZWVkIG5vIG1vcmUgdGhhbiAxMDAgYnl0ZXMuICovCi0gIGludCBuOwotICBzaXplX3Qgc2l6ZSA9IDEwMDsKLSAgY2hhciAqcDsKLSAgdmFfbGlzdCBhcDsKLQotICBwID0gKGNoYXIgKikgZW1hbGxvYyAoc2l6ZSk7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICAvKiBUcnkgdG8gcHJpbnQgaW4gdGhlIGFsbG9jYXRlZCBzcGFjZS4gKi8KLSAgICB2YV9zdGFydCAoYXAsIGZtdCk7Ci0gICAgbiA9IHZzbnByaW50ZiAocCwgc2l6ZSwgZm10LCBhcCk7Ci0gICAgdmFfZW5kIChhcCk7Ci0gICAgLyogSWYgdGhhdCB3b3JrZWQsIHJldHVybiB0aGUgc3RyaW5nLiAqLwotICAgIGlmIChuID4gLTEgJiYgbiA8IChpbnQpIHNpemUpCi0gICAgICByZXR1cm4gcDsKLQotICAgIC8qIEVsc2UgdHJ5IGFnYWluIHdpdGggbW9yZSBzcGFjZS4gKi8KLSAgICBpZiAobiA+IC0xKSAgICAgICAgICAgICAgICAgLyogQzk5IGNvbmZvcm0gdnNucHJpbnRmKCkgKi8KLSAgICAgIHNpemUgPSAoc2l6ZV90KSBuICsgMTsgICAgLyogcHJlY2lzZWx5IHdoYXQgaXMgbmVlZGVkICovCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdsaWJjIDIuMCAqLwotICAgICAgc2l6ZSAqPSAyOyAgICAgICAgICAgICAgICAvKiB0d2ljZSB0aGUgb2xkIHNpemUgKi8KLQotICAgIHAgPSAoY2hhciAqKSBlcmVhbGxvYyAocCwgc2l6ZSk7Ci0gIH0KLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotdHJfdHlwZV9zdHIgKFRlc3RSZXN1bHQgKiB0cikKLXsKLSAgY29uc3QgY2hhciAqc3RyID0gTlVMTDsKLQotICBpZiAodHItPmN0eCA9PSBDS19DVFhfVEVTVCkgewotICAgIGlmICh0ci0+cnR5cGUgPT0gQ0tfUEFTUykKLSAgICAgIHN0ciA9ICJQIjsKLSAgICBlbHNlIGlmICh0ci0+cnR5cGUgPT0gQ0tfRkFJTFVSRSkKLSAgICAgIHN0ciA9ICJGIjsKLSAgICBlbHNlIGlmICh0ci0+cnR5cGUgPT0gQ0tfRVJST1IpCi0gICAgICBzdHIgPSAiRSI7Ci0gIH0gZWxzZQotICAgIHN0ciA9ICJTIjsKLQotICByZXR1cm4gc3RyOwotfQotCi1zdGF0aWMgaW50Ci1wZXJjZW50X3Bhc3NlZCAoVGVzdFN0YXRzICogdCkKLXsKLSAgaWYgKHQtPm5fZmFpbGVkID09IDAgJiYgdC0+bl9lcnJvcnMgPT0gMCkKLSAgICByZXR1cm4gMTAwOwotICBlbHNlIGlmICh0LT5uX2NoZWNrZWQgPT0gMCkKLSAgICByZXR1cm4gMDsKLSAgZWxzZQotICAgIHJldHVybiAoaW50KSAoKGZsb2F0KSAodC0+bl9jaGVja2VkIC0gKHQtPm5fZmFpbGVkICsgdC0+bl9lcnJvcnMpKSAvCi0gICAgICAgIChmbG9hdCkgdC0+bl9jaGVja2VkICogMTAwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2NoZWNrX3N0ci5oIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNzBmYjQuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2hlY2tfc3RyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ2hlY2s6IGEgdW5pdCB0ZXN0IGZyYW1ld29yayBmb3IgQwotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFyaWVuIE1hbGVjCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENIRUNLX1NUUl9ICi0jZGVmaW5lIENIRUNLX1NUUl9ICi0KLS8qIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gVGVzdFJlc3VsdC4gIFJldHVybgotICAgdmFsdWUgaGFzIGJlZW4gbWFsbG9jJ2QsIGFuZCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgKi8KLWNoYXIgKnRyX3N0ciAoVGVzdFJlc3VsdCAqIHRyKTsKLQotLyogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBUZXN0UmVzdWx0IG1lc3NhZ2UKLSAgIHdpdGhvdXQgdGhlIHRlc3QgaWQgb3IgcmVzdWx0IHR5cGUuIFRoaXMgaXMgc3VpdGFibGUgZm9yIHNlcGFyYXRlCi0gICBmb3JtYXR0aW5nIG9mIHRoZSB0ZXN0IGFuZCB0aGUgbWVzc2FnZS4gUmV0dXJuIHZhbHVlIGhhcyBiZWVuIAotICAgbWFsbG9jJ2QsIGFuZCBtdXN0IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgKi8KLWNoYXIgKnRyX3Nob3J0X3N0ciAoVGVzdFJlc3VsdCAqIHRyKTsKLQotLyogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBTUnVubmVyJ3MgcnVuCi0gICBzdGF0aXN0aWNzICglIHBhc3NlZCwgbnVtIHJ1biwgcGFzc2VkLCBlcnJvcnMsIGZhaWx1cmVzKS4gUmV0dXJuCi0gICB2YWx1ZSBoYXMgYmVlbiBtYWxsb2MnZCwgYW5kIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlcgotKi8KLWNoYXIgKnNyX3N0YXRfc3RyIChTUnVubmVyICogc3IpOwotCi1jaGFyICpja19zdHJkdXBfcHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLik7Ci0KLSNlbmRpZiAvKiBDSEVDS19TVFJfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2xvY2tfZ2V0dGltZS5jIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svY2xvY2tfZ2V0dGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzI3ZTczLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2Nsb2NrX2dldHRpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSNpbmNsdWRlICJsaWJjb21wYXQuaCIKLQotI2lmZGVmIF9fQVBQTEVfXwotI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL21hY2guaD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLSNkZWZpbmUgTkFOT1NFQ09ORFNfUEVSX1NFQ09ORCAxMDAwMDAwMDAwCi0KLQotCi1pbnQKLWNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBjbGtfaWQgQ0tfQVRUUklCVVRFX1VOVVNFRCwgc3RydWN0IHRpbWVzcGVjICp0cykKLXsKLQotI2lmZGVmIF9fQVBQTEVfXwotICAvKiBPUyBYIGRvZXMgbm90IGhhdmUgY2xvY2tfZ2V0dGltZSwgdXNlIG1hY2hfYWJzb2x1dGVfdGltZSAqLwotCi0gIHN0YXRpYyBtYWNoX3RpbWViYXNlX2luZm9fZGF0YV90IHNUaW1lYmFzZUluZm87Ci0gIHVpbnQ2NF90IHJhd1RpbWU7Ci0gIHVpbnQ2NF90IG5hbm9zOwotCi0gIHJhd1RpbWUgPSBtYWNoX2Fic29sdXRlX3RpbWUgKCk7Ci0KLSAgLyoKLSAgICogT1MgWCBoYXMgYSBmdW5jdGlvbiB0byBjb252ZXJ0IGFicyB0aW1lIHRvIG5hbm8gc2Vjb25kczogQWJzb2x1dGVUb05hbm9zZWNvbmRzCi0gICAqIEhvd2V2ZXIsIHRoZSBmdW5jdGlvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSBhcyB3ZSBtYXkgbm90IGhhdmUKLSAgICogYWNjZXNzIHRvIENvcmVTZXJ2aWNlcy4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBjb252ZXJ0IHRoZSBhYnMgdGltZQotICAgKiB0byBuYW5vIHNlY29uZHMgbWFudWFsbHkuCi0gICAqLwotCi0gIC8qCi0gICAqIEZpcnN0IGdyYWIgdGhlIHRpbWUgYmFzZSB1c2VkIG9uIHRoZSBzeXN0ZW0sIGlmIHRoaXMgaXMgdGhlIGZpcnN0Ci0gICAqIHRpbWUgd2UgYXJlIGJlaW5nIGNhbGxlZC4gV2UgY2FuIGNoZWNrIGlmIHRoZSB2YWx1ZSBpcyB1bmluaXRpYWxpemVkLAotICAgKiBhcyB0aGUgZGVub21pbmF0b3Igd2lsbCBiZSB6ZXJvLiAKLSAgICovCi0gIGlmIChzVGltZWJhc2VJbmZvLmRlbm9tID09IDApIHsKLSAgICAodm9pZCkgbWFjaF90aW1lYmFzZV9pbmZvICgmc1RpbWViYXNlSW5mbyk7Ci0gIH0KLQotICAvKiAKLSAgICogRG8gdGhlIGNvbnZlcnNpb24uIFdlIGhvcGUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gZG9lc24ndCAKLSAgICogb3ZlcmZsb3c7IHRoZSBwcmljZSB5b3UgcGF5IGZvciB3b3JraW5nIGluIGZpeGVkIHBvaW50LgotICAgKi8KLSAgbmFub3MgPSByYXdUaW1lICogc1RpbWViYXNlSW5mby5udW1lciAvIHNUaW1lYmFzZUluZm8uZGVub207Ci0KLSAgLyogCi0gICAqIEZpbGwgaW4gdGhlIHRpbWVzcGVjIGNvbnRhaW5lciAKLSAgICovCi0gIHRzLT50dl9zZWMgPSBuYW5vcyAvIE5BTk9TRUNPTkRTX1BFUl9TRUNPTkQ7Ci0gIHRzLT50dl9uc2VjID0gbmFub3MgLSAodHMtPnR2X3NlYyAqIE5BTk9TRUNPTkRTX1BFUl9TRUNPTkQpOwotI2Vsc2UKLSAgLyogCi0gICAqIEFzIHRoZXJlIGlzIG5vIGZ1bmN0aW9uIHRvIGZhbGwgYmFjayBvbnRvIHRvIGdldCB0aGUgY3VycmVudAotICAgKiB0aW1lLCB6ZXJvIG91dCB0aGUgdGltZSBzbyB0aGUgY2FsbGVyIHdpbGwgaGF2ZSBhIHNhbmUgdmFsdWUuIAotICAgKi8KLSAgdHMtPnR2X3NlYyA9IDA7Ci0gIHRzLT50dl9uc2VjID0gMDsKLSNlbmRpZgotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svbGliY29tcGF0LmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjb21wYXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU1MGQxZC4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjb21wYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNpbmNsdWRlICJsaWJjb21wYXQuaCIKLQotLyogc2lsZW5jZSB3YXJuaW5ncyBhYm91dCBhbiBlbXB0eSBsaWJyYXJ5ICovCi12b2lkCi1ja19kb19ub3RoaW5nICh2b2lkKQotewotICBhc3NlcnQgKDApOwotCi0gIC8qCi0gICAqIHRvIHNpbGVuY2Ugd2FybmluZyBhYm91dCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5Ci0gICAqIHJldHVybmluZywgYnV0IGJlaW5nIG1hcmtlZCBhcyBub3JldHVybi4gYXNzZXJ0KCkKLSAgICogbXVzdCBiZSBtYXJrZWQgYXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMuCi0gICAqLwotICBleGl0ICgxKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2xpYmNvbXBhdC5oIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svbGliY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTI4OWIuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svbGliY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotI2lmbmRlZiBMSUJDT01QQVRfSAotI2RlZmluZSBMSUJDT01QQVRfSAotCi0jaWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fR05VQ19NSU5PUl9fKQotI2RlZmluZSBHQ0NfVkVSU0lPTl9BVF9MRUFTVChtYWpvciwgbWlub3IpIFwKLSgoX19HTlVDX18gPiAobWFqb3IpKSB8fCBcCi0gKF9fR05VQ19fID09IChtYWpvcikgJiYgX19HTlVDX01JTk9SX18gPj0gKG1pbm9yKSkpCi0jZWxzZQotI2RlZmluZSBHQ0NfVkVSU0lPTl9BVF9MRUFTVChtYWpvciwgbWlub3IpIDAKLSNlbmRpZgotCi0jaWYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoMiw5NSkKLSNkZWZpbmUgQ0tfQVRUUklCVVRFX1VOVVNFRCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKLSNlbHNlCi0jZGVmaW5lIENLX0FUVFJJQlVURV9VTlVTRUQKLSNlbmRpZiAvKiBHQ0MgMi45NSAqLwotCi0jaWYgR0NDX1ZFUlNJT05fQVRfTEVBU1QoMiw1KQotI2RlZmluZSBDS19BVFRSSUJVVEVfTk9SRVRVUk4gX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKLSNlbHNlCi0jZGVmaW5lIENLX0FUVFJJQlVURV9OT1JFVFVSTgotI2VuZGlmIC8qIEdDQyAyLjUgKi8KLQotLyoKLSAqIFVzZWQgZm9yIE1TVkMgdG8gY3JlYXRlIHRoZSBleHBvcnQgYXR0cmlidXRlCi0gKiBDS19ETExfRVhQIGlzIGRlZmluZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBvZiB0aGUgbGlicmFyeQotICogb24gdGhlIGNvbW1hbmQgbGluZS4KLSAqLwotI2lmbmRlZiBDS19ETExfRVhQCi0jZGVmaW5lIENLX0RMTF9FWFAKLSNlbmRpZgotCi0jaWYgX01TQ19WRVIKLSNpbmNsdWRlIDxXaW5Tb2NrMi5oPiAgICAgICAgICAgLyogc3RydWN0IHRpbWV2YWwsIEFQSSB1c2VkIGluIGdldHRpbWVvZmRheSBpbXBsZW1lbnRhdGlvbiAqLwotI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiByZWFkLCB3cml0ZSAqLwotI2luY2x1ZGUgPHByb2Nlc3MuaD4gICAgICAgICAgICAvKiBnZXRwaWQgKi8KLSNlbmRpZiAvKiBfTVNDX1ZFUiAqLwotCi0vKiBkZWZpbmVzIHNpemVfdCAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0vKiBwcm92aWRlcyBhc3NlcnQgKi8KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotLyogZGVmaW5lcyBGSUxFICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotLyogZGVmaW5lcyBleGl0KCkgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogcHJvdmlkZXMgbG9jYWx0aW1lIGFuZCBzdHJ1Y3QgdG0gKi8KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmIC8qICFIQVZFX1NZU19USU1FX0ggKi8KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLS8qIGRlY2xhcmVzIGZvcmsoKSwgX1BPU0lYX1ZFUlNJT04uICBhY2NvcmRpbmcgdG8gQXV0b2NvbmYuaW5mbywKLSAgIHVuaXN0ZC5oIGRlZmluZXMgX1BPU0lYX1ZFUlNJT04gaWYgdGhlIHN5c3RlbSBpcyBQT1NJWC1jb21wbGlhbnQsCi0gICBzbyB3ZSB3aWxsIHVzZSB0aGlzIGFzIGEgdGVzdCBmb3IgYWxsIHRoaW5ncyB1bmlxdWVseSBwcm92aWRlZCBieQotICAgUE9TSVggbGlrZSBzaWdhY3Rpb24oKSBhbmQgZm9yaygpICovCi0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1NZU19XQUlUX0gKLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2VuZGlmCi0KLS8qIGRlY2xhcmVzIHB0aHJlYWRfY3JlYXRlIGFuZCBmcmllbmRzICovCi0jaWZkZWYgSEFWRV9QVEhSRUFECi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1NURElOVF9ICi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLQotLyogcmVwbGFjZW1lbnQgZnVuY3Rpb25zIGZvciBicm9rZW4gb3JpZ2luYWxzICovCi0jaWYgIUhBVkVfREVDTF9BTEFSTQotQ0tfRExMX0VYUCB1bnNpZ25lZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGludCBzZWNvbmRzKTsKLSNlbmRpZiAvKiAhSEFWRV9ERUNMX0FMQVJNICovCi0KLSNpZiAhSEFWRV9HRVRQSUQgJiYgSEFWRV9fR0VUUElECi0jZGVmaW5lIGdldHBpZCBfZ2V0cGlkCi0jZW5kaWYgLyogIUhBVkVfR0VUUElEICYmIEhBVkVfX0dFVFBJRCAqLwotCi0jaWYgIUhBVkVfREVDTF9MT0NBTFRJTUVfUgotI2lmICFkZWZpbmVkKGxvY2FsdGltZV9yKQotQ0tfRExMX0VYUCBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0aW1lX3QgKiBjbG9jaywgc3RydWN0IHRtICpyZXN1bHQpOwotI2VuZGlmCi0jZW5kaWYgLyogIUhBVkVfREVDTF9MT0NBTFRJTUVfUiAqLwotCi0jaWYgIUhBVkVfREVDTF9TVFJEVVAgJiYgIUhBVkVfX1NUUkRVUAotQ0tfRExMX0VYUCBjaGFyICpzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cik7Ci0jZWxpZiAhSEFWRV9ERUNMX1NUUkRVUCAmJiBIQVZFX19TVFJEVVAKLSNkZWZpbmUgc3RyZHVwIF9zdHJkdXAKLSNlbmRpZiAvKiAhSEFWRV9ERUNMX1NUUkRVUCAmJiBIQVZFX19TVFJEVVAgKi8KLQotI2lmICFIQVZFX0RFQ0xfU1RSU0lHTkFMCi1DS19ETExfRVhQIGNoYXIgKnN0cnNpZ25hbCAoaW50IHNpZyk7Ci0jZW5kaWYgLyogIUhBVkVfREVDTF9TVFJTSUdOQUwgKi8KLQotLyoKLSAqIE9uIHN5c3RlbXMgd2hlcmUgY2xvY2tfZ2V0dGltZSgpIGlzIG5vdCBhdmFpbGFibGUsIG9yCi0gKiBvbiBzeXN0ZW1zIHdoZXJlIHNvbWUgY2xvY2tzIG1heSBub3QgYmUgc3VwcG9ydGVkLCB0aGUKLSAqIGRlZmluaXRpb24gZm9yIENMT0NLX01PTk9UT05JQyBhbmQgQ0xPQ0tfUkVBTFRJTUUgbWF5IG5vdAotICogYmUgYXZhaWxhYmxlLiBUaGVzZSBzaG91bGQgZGVmaW5lIHdoaWNoIHR5cGUgb2YgY2xvY2sKLSAqIGNsb2NrX2dldHRpbWUoKSBzaG91bGQgdXNlLiBXZSBkZWZpbmUgaXQgaGVyZSBpZiBpdCBpcwotICogbm90IGRlZmluZWQgc2ltcGx5IHNvIHRoZSByZWltcGxlbWVudGF0aW9uIGNhbiBpZ25vcmUgaXQuCi0gKgotICogV2Ugc2V0IHRoZSB2YWx1ZXMgb2YgdGhlc2UgY2xvY2tzIHRvIHNvbWUgKGhvcGVmdWxseSkKLSAqIGludmFsaWQgdmFsdWUsIHRvIGF2b2lkIHRoZSBjYXNlIHdoZXJlIHdlIGRlZmluZSBhCi0gKiBjbG9jayB3aXRoIGEgdmFsaWQgdmFsdWUsIGFuZCB1bmludGVudGlvbmFsbHkgdXNlCi0gKiBhbiBhY3R1YWwgZ29vZCBjbG9jayBieSBhY2NpZGVudC4KLSAqLwotI2lmbmRlZiBDTE9DS19NT05PVE9OSUMKLSNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDIC0xCi0jZW5kaWYKLSNpZm5kZWYgQ0xPQ0tfUkVBTFRJTUUKLSNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUUgLTEKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfTElCUlQKLQotI2lmZGVmIFNUUlVDVF9USU1FU1BFQ19ERUZJTklUSU9OX01JU1NJTkcKLS8qCi0gKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIFBPU0lYIDEwMDMuMSBmb3IgdGltZXMKLSAqIHNwZWNpZmllZCBpbiBzZWNvbmRzIGFuZCBuYW5vc2Vjb25kcy4gSWYgaXQgaXMgbm90IGRlZmluZWQgaW4KLSAqIHRpbWUuZywgdGhlbiB3ZSBuZWVkIHRvIGRlZmluZSBpdCBoZXJlCi0gKi8KLXN0cnVjdCB0aW1lc3BlYwotewotICB0aW1lX3QgdHZfc2VjOwotICBsb25nIHR2X25zZWM7Ci19OwotI2VuZGlmIC8qIFNUUlVDVF9USU1FU1BFQ19ERUZJTklUSU9OX01JU1NJTkcgKi8KLQotI2lmZGVmIFNUUlVDVF9JVElNRVJTUEVDX0RFRklOSVRJT05fTUlTU0lORwotLyogCi0gKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIFBPU0lYLjFiIGZvciB0aW1lciBzdGFydCB2YWx1ZXMgYW5kIGludGVydmFscy4KLSAqIElmIGl0IGlzIG5vdCBkZWZpbmVkIGluIHRpbWUuaCwgdGhlbiB3ZSBuZWVkIHRvIGRlZmluZSBpdCBoZXJlLgotICovCi1zdHJ1Y3QgaXRpbWVyc3BlYwotewotICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7Ci0gIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKLX07Ci0jZW5kaWYgLyogU1RSVUNUX0lUSU1FUlNQRUNfREVGSU5JVElPTl9NSVNTSU5HICovCi0KLS8qIAotICogRG8gYSBzaW1wbGUgZm9yd2FyZCBkZWNsYXJhdGlvbiBpbiBjYXNlIHRoZSBzdHJ1Y3QgaXMgbm90IGRlZmluZWQuCi0gKiBJbiB0aGUgdmVyc2lvbnMgb2YgdGltZXJfY3JlYXRlIGluIGxpYmNvbXBhdCwgc2lnZXZlbnQgaXMgbmV2ZXIKLSAqIHVzZWQuCi0gKi8KLXN0cnVjdCBzaWdldmVudDsKLQotI2lmbmRlZiBIQVZFX0NMT0NLX0dFVFRJTUUKLUNLX0RMTF9FWFAgaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHMpOwotI2VuZGlmCi1DS19ETExfRVhQIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBjbG9ja2lkLCBzdHJ1Y3Qgc2lnZXZlbnQgKnNldnAsCi0gICAgdGltZXJfdCAqIHRpbWVyaWQpOwotQ0tfRExMX0VYUCBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCB0aW1lcmlkLCBpbnQgZmxhZ3MsCi0gICAgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKm5ld192YWx1ZSwgc3RydWN0IGl0aW1lcnNwZWMgKm9sZF92YWx1ZSk7Ci1DS19ETExfRVhQIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgdGltZXJpZCk7Ci0jZW5kaWYgLyogSEFWRV9MSUJSVCAqLwotCi0vKiBzaWxlbmNlIHdhcm5pbmdzIGFib3V0IGFuIGVtcHR5IGxpYnJhcnkgKi8KLUNLX0RMTF9FWFAgdm9pZAotY2tfZG9fbm90aGluZyAodm9pZCkKLSAgICBDS19BVFRSSUJVVEVfTk9SRVRVUk47Ci0KLSNlbmRpZiAvKiAhTElCQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL3N0cnNpZ25hbC5jIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svc3Ryc2lnbmFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTcxY2QuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svc3Ryc2lnbmFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaW5jbHVkZSAibGliY29tcGF0LmgiCi0KLWNoYXIgKgotc3Ryc2lnbmFsIChpbnQgc2lnKQotewotICBzdGF0aWMgY2hhciBzaWduYW1lWzQwXTsKLQotICBzcHJpbnRmIChzaWduYW1lLCAiU0lHICMlZCIsIHNpZyk7Ci0gIHJldHVybiBzaWduYW1lOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svdGltZXJfY3JlYXRlLmMgYi9saWJzL2dzdC9jaGVjay9saWJjaGVjay90aW1lcl9jcmVhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwMTc4MS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jaGVjay9saWJjaGVjay90aW1lcl9jcmVhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNpbmNsdWRlICJsaWJjb21wYXQuaCIKLQotaW50Ci10aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBjbG9ja2lkIENLX0FUVFJJQlVURV9VTlVTRUQsCi0gICAgc3RydWN0IHNpZ2V2ZW50ICpzZXZwIENLX0FUVFJJQlVURV9VTlVTRUQsCi0gICAgdGltZXJfdCAqIHRpbWVyaWQgQ0tfQVRUUklCVVRFX1VOVVNFRCkKLXsKLSAgLyogCi0gICAqIFRoZSBjcmVhdGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiB0aW1lcl9zZXR0aW1lIHdpbGwgdXNlCi0gICAqIGFsYXJtIHRvIHNldCB0aGUgdGltZXIsIGFuZCB0aW1lcl9kZWxldGUgd2lsbCBzdG9wIHRoZQotICAgKiBhbGFybQotICAgKi8KLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL3RpbWVyX2RlbGV0ZS5jIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svdGltZXJfZGVsZXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjM2FlMjkuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svdGltZXJfZGVsZXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jaW5jbHVkZSAibGliY29tcGF0LmgiCi0KLWludAotdGltZXJfZGVsZXRlICh0aW1lcl90IHRpbWVyaWQgQ0tfQVRUUklCVVRFX1VOVVNFRCkKLXsKLSNpZmRlZiBIQVZFX1NFVElUSU1FUgotICAvKgotICAgKiBJZiB0aGUgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGltZXJfc2V0dGltZSgpIGJ1dCBkb2VzIGhhdmUKLSAgICogc2V0aXRpbWVyKCkgdXNlIHRoYXQgaW5zdGVhZCBvZiBhbGFybSgpLgotICAgKi8KLSAgc3RydWN0IGl0aW1lcnZhbCBpbnRlcnZhbDsKLQotICAvKgotICAgKiBTZXR0aW5nIHZhbHVlcyB0byAnMCcgcmVzdWx0cyBpbiBkaXNhYmxpbmcgdGhlIHJ1bm5pbmcgdGltZXIuCi0gICAqLwotICBpbnRlcnZhbC5pdF92YWx1ZS50dl9zZWMgPSAwOwotICBpbnRlcnZhbC5pdF92YWx1ZS50dl91c2VjID0gMDsKLSAgaW50ZXJ2YWwuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKLSAgaW50ZXJ2YWwuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IDA7Ci0KLSAgcmV0dXJuIHNldGl0aW1lciAoSVRJTUVSX1JFQUwsICZpbnRlcnZhbCwgTlVMTCk7Ci0jZWxzZQotICAvKgotICAgKiBUaGVyZSBpcyBvbmx5IG9uZSB0aW1lciwgdGhhdCB1c2VkIGJ5IGFsYXJtLgotICAgKiBTZXR0aW5nIGFsYXJtKDApIHdpbGwgbm90IHNldCBhIG5ldyBhbGFybSwgYW5kCi0gICAqIHdpbGwga2lsbCB0aGUgcHJldmlvdXMgdGltZXIuCi0gICAqLwotCi0gIGFsYXJtICgwKTsKLQotICByZXR1cm4gMDsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY2hlY2svbGliY2hlY2svdGltZXJfc2V0dGltZS5jIGIvbGlicy9nc3QvY2hlY2svbGliY2hlY2svdGltZXJfc2V0dGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDliYTI3Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL3RpbWVyX3NldHRpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSNpbmNsdWRlICJsaWJjb21wYXQuaCIKLQotaW50Ci10aW1lcl9zZXR0aW1lICh0aW1lcl90IHRpbWVyaWQgQ0tfQVRUUklCVVRFX1VOVVNFRCwKLSAgICBpbnQgZmxhZ3MgQ0tfQVRUUklCVVRFX1VOVVNFRCwKLSAgICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3ZhbHVlLAotICAgIHN0cnVjdCBpdGltZXJzcGVjICpvbGRfdmFsdWUgQ0tfQVRUUklCVVRFX1VOVVNFRCkKLXsKLSNpZmRlZiBIQVZFX1NFVElUSU1FUgotICAvKgotICAgKiBJZiB0aGUgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGltZXJfc2V0dGltZSgpIGJ1dCBkb2VzIGhhdmUKLSAgICogc2V0aXRpbWVyKCkgdXNlIHRoYXQgaW5zdGVhZCBvZiBhbGFybSgpLgotICAgKi8KLSAgc3RydWN0IGl0aW1lcnZhbCBpbnRlcnZhbDsKLQotICBpbnRlcnZhbC5pdF92YWx1ZS50dl9zZWMgPSBuZXdfdmFsdWUtPml0X3ZhbHVlLnR2X3NlYzsKLSAgaW50ZXJ2YWwuaXRfdmFsdWUudHZfdXNlYyA9IG5ld192YWx1ZS0+aXRfdmFsdWUudHZfbnNlYyAvIDEwMDA7Ci0gIGludGVydmFsLml0X2ludGVydmFsLnR2X3NlYyA9IG5ld192YWx1ZS0+aXRfaW50ZXJ2YWwudHZfc2VjOwotICBpbnRlcnZhbC5pdF9pbnRlcnZhbC50dl91c2VjID0gbmV3X3ZhbHVlLT5pdF9pbnRlcnZhbC50dl9uc2VjIC8gMTAwMDsKLQotICByZXR1cm4gc2V0aXRpbWVyIChJVElNRVJfUkVBTCwgJmludGVydmFsLCBOVUxMKTsKLSNlbHNlCi0gIGludCBzZWNvbmRzID0gbmV3X3ZhbHVlLT5pdF92YWx1ZS50dl9zZWM7Ci0KLSAgLyogCi0gICAqIEFzIHRoZSBhbGFybSgpIGNhbGwgaGFzIG9ubHkgc2Vjb25kIHByZWNpc2lvbiwgaWYgdGhlIGNhbGxlcgotICAgKiBzcGVjaWZpZXMgcGFydGlhbCBzZWNvbmRzLCB3ZSByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCBzZWNvbmQuCi0gICAqLwotICBpZiAobmV3X3ZhbHVlLT5pdF92YWx1ZS50dl9uc2VjID4gMCkgewotICAgIHNlY29uZHMgKz0gMTsKLSAgfQotCi0gIGFsYXJtIChzZWNvbmRzKTsKLQotICByZXR1cm4gMDsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbSBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMTZlYTYuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLWxpYl9MVExJQlJBUklFUyA9IGxpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEKLQotbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9nc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAvZ3N0L2NvbnRyb2xsZXIKLWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZV9IRUFERVJTID0gXAotCWNvbnRyb2xsZXIuaCBcCi0JZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmggXAotCWdzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmggXAotCWdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmggXAotCWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmggXAotCWdzdHRyaWdnZXJjb250cm9sc291cmNlLmggXAotCWdzdGxmb2NvbnRyb2xzb3VyY2UuaAotCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBcCi0JZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmMgXAotCWdzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmMgXAotCWdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmMgXAotCWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmMgXAotCWdzdHRyaWdnZXJjb250cm9sc291cmNlLmMgXAotCWdzdGxmb2NvbnRyb2xzb3VyY2UuYwotCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSAkKExJQk0pCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xERkxBR1MgPSAkKEdTVF9MSUJfTERGTEFHUykgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCi0KLUNMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdgotCi0lLmMuZ2NvdjogLmxpYnMvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS0lLmdjZGEgJS5jCi0JJChHQ09WKSAtYiAtZiAtbyAkXiA+ICRALm91dAotCi1nY292OiAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUzo9Lmdjb3YpCi0KLWlmIEhBVkVfSU5UUk9TUEVDVElPTgotQlVJTFRfR0lSU09VUkNFUyA9IEdzdENvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAuZ2lyCi0KLWdpcl9oZWFkZXJzPSQocGF0c3Vic3QgJSwkKHNyY2RpcikvJSwgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVfSEVBREVSUykpCi1naXJfc291cmNlcz0kKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKSkKLQotR3N0Q29udHJvbGxlci1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3Rjb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi0JJChBTV9WX0dFTilQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT15ZXNcCi0JCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSIiIEdTVF9QTFVHSU5fUEFUSF8xXzA9IiIgR1NUX1JFR0lTVFJZX1VQREFURT1ubyBcCi0JCUNQUEZMQUdTPSIkKENQUEZMQUdTKSIgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIENDPSIkKENDKSIgUEtHX0NPTkZJRz0iJChQS0dfQ09ORklHKSIgRExMVE9PTD0iJChETExUT09MKSIgXAotCQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0Q29udHJvbGxlciBcCi0JCS0tbnN2ZXJzaW9uPUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJLS13YXJuLWFsbCBcCi0JCS0taWRlbnRpZmllci1wcmVmaXg9R3N0IFwKLQkJLS1zeW1ib2wtcHJlZml4PWdzdCBcCi0JCS1JJCh0b3Bfc3JjZGlyKSBcCi0JCS1JJCh0b3Bfc3JjZGlyKS9saWJzIFwKLQkJLUkkKHRvcF9idWlsZGRpcikgXAotCQktSSQodG9wX2J1aWxkZGlyKS9saWJzIFwKLQkJLS1jLWluY2x1ZGUgImdzdC9jb250cm9sbGVyL2NvbnRyb2xsZXIuaCIgXAotCQktLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCi0JCS0tbGlicmFyeS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAotCQktLWxpYnJhcnk9bGliZ3N0Y29udHJvbGxlci1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAotCQktLWxpYnRvb2w9IiR7TElCVE9PTH0iIFwKLQkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJLS1wa2ctZXhwb3J0IGdzdHJlYW1lci1jb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJLS1hZGQtaW5pdC1zZWN0aW9uPSIkKElOVFJPU1BFQ1RJT05fSU5JVCkiIFwKLQkJLS1vdXRwdXQgJEAgXAotCQkkKGdpcl9oZWFkZXJzKSBcCi0JCSQoZ2lyX3NvdXJjZXMpCi0KLSMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KLSMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KLWdpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAotZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCi0KLXR5cGVsaWJzZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAvCi0KLXR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKLQotJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCi0JJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikvZ3N0ICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQotCi1DTEVBTkZJTEVTICs9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQotZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuaW4gYi9saWJzL2dzdC9jb250cm9sbGVyL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWZlNzg2Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5OTIgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAYW1fX2FwcGVuZF8xID0gJChCVUlMVF9HSVJTT1VSQ0VTKSAkKHR5cGVsaWJzX0RBVEEpCi1zdWJkaXIgPSBsaWJzL2dzdC9jb250cm9sbGVyCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAotCSQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlX0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChnaXJkaXIpIiBcCi0JIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgXAotCSIkKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVkaXIpIgotTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0RFUEVOREVOQ0lFUyA9ICBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTID0gbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhcmdiY29udHJvbGJpbmRpbmcubG8gXAotCWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcubG8gXAotCWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UubG8gXAotCWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UubG8gXAotCWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UubG8gXAotCWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bGZvY29udHJvbHNvdXJjZS5sbwotbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTID0gIFwKLQkkKGFtX2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSBcCi0JLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotREFUQSA9ICQoZ2lyX0RBVEEpICQodHlwZWxpYnNfREFUQSkKLUhFQURFUlMgPSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZV9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotbGliX0xUTElCUkFSSUVTID0gbGliZ3N0Y29udHJvbGxlci1AR1NUX0FQSV9WRVJTSU9OQC5sYQotbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9nc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAvZ3N0L2NvbnRyb2xsZXIKLWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZV9IRUFERVJTID0gXAotCWNvbnRyb2xsZXIuaCBcCi0JZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmggXAotCWdzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmggXAotCWdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmggXAotCWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmggXAotCWdzdHRyaWdnZXJjb250cm9sc291cmNlLmggXAotCWdzdGxmb2NvbnRyb2xzb3VyY2UuaAotCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBcCi0JZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmMgXAotCWdzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmMgXAotCWdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmMgXAotCWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmMgXAotCWdzdHRyaWdnZXJjb250cm9sc291cmNlLmMgXAotCWdzdGxmb2NvbnRyb2xzb3VyY2UuYwotCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSAkKExJQk0pCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xERkxBR1MgPSAkKEdTVF9MSUJfTERGTEFHUykgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCi1DTEVBTkZJTEVTID0gKi5nY25vICouZ2NkYSAqLmdjb3YgJChhbV9fYXBwZW5kXzEpCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAQlVJTFRfR0lSU09VUkNFUyA9IEdzdENvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAuZ2lyCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAZ2lyX2hlYWRlcnMgPSAkKHBhdHN1YnN0ICUsJChzcmNkaXIpLyUsICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlX0hFQURFUlMpKQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9zb3VyY2VzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUykpCi0KLSMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KLSMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJkaXIgPSAkKGRhdGFkaXIpL2dpci0xLjAKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic2RpciA9ICQobGliZGlyKS9naXJlcG9zaXRvcnktMS4wLwotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGxpYnMvZ3N0L2NvbnRyb2xsZXIvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgbGlicy9nc3QvY29udHJvbGxlci9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLWxpYkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGE6ICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhcmdiY29udHJvbGJpbmRpbmcuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bGZvY29udHJvbHNvdXJjZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyaWdnZXJjb250cm9sc291cmNlLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGFyZ2Jjb250cm9sYmluZGluZy5sbzogZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGFyZ2Jjb250cm9sYmluZGluZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhcmdiY29udHJvbGJpbmRpbmcuVHBvIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmxvIGB0ZXN0IC1mICdnc3RhcmdiY29udHJvbGJpbmRpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLlRwbyAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhcmdiY29udHJvbGJpbmRpbmcuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmMnIG9iamVjdD0nbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RhcmdiY29udHJvbGJpbmRpbmcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmxvIGB0ZXN0IC1mICdnc3RhcmdiY29udHJvbGJpbmRpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmMKLQotbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkaXJlY3Rjb250cm9sYmluZGluZy5sbzogZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuVHBvIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcubG8gYHRlc3QgLWYgJ2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuVHBvICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmMnIG9iamVjdD0nbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkaXJlY3Rjb250cm9sYmluZGluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RkaXJlY3Rjb250cm9sYmluZGluZy5sbyBgdGVzdCAtZiAnZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYwotCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmxvOiBnc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5UcG8gLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5sbyBgdGVzdCAtZiAnZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5UcG8gJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYycgb2JqZWN0PSdsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmxvIGB0ZXN0IC1mICdnc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jCi0KLWxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UubG86IGdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLlRwbyAtYyAtbyBsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmxvIGB0ZXN0IC1mICdnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLlRwbyAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5jJyBvYmplY3Q9J2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UubG8gYHRlc3QgLWYgJ2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmMKLQotbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5sbzogZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuVHBvIC1jIC1vIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UubG8gYHRlc3QgLWYgJ2dzdHRyaWdnZXJjb250cm9sc291cmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRyaWdnZXJjb250cm9sc291cmNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuVHBvICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHRyaWdnZXJjb250cm9sc291cmNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHRyaWdnZXJjb250cm9sc291cmNlLmMnIG9iamVjdD0nbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5sbyBgdGVzdCAtZiAnZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuYwotCi1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGxmb2NvbnRyb2xzb3VyY2UubG86IGdzdGxmb2NvbnRyb2xzb3VyY2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bGZvY29udHJvbHNvdXJjZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RsZm9jb250cm9sc291cmNlLlRwbyAtYyAtbyBsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGxmb2NvbnRyb2xzb3VyY2UubG8gYHRlc3QgLWYgJ2dzdGxmb2NvbnRyb2xzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bGZvY29udHJvbHNvdXJjZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGxmb2NvbnRyb2xzb3VyY2UuVHBvICQoREVQRElSKS9saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdGxmb2NvbnRyb2xzb3VyY2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bGZvY29udHJvbHNvdXJjZS5jJyBvYmplY3Q9J2xpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bGZvY29udHJvbHNvdXJjZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RsZm9jb250cm9sc291cmNlLmxvIGB0ZXN0IC1mICdnc3RsZm9jb250cm9sc291cmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGxmb2NvbnRyb2xzb3VyY2UuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotaW5zdGFsbC1naXJEQVRBOiAkKGdpcl9EQVRBKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChnaXJkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGdpcmRpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZ2lyZGlyKSciOyBcCi0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZ2lyZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1naXJEQVRBOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoZ2lyX0RBVEEpJzsgdGVzdCAtbiAiJChnaXJkaXIpIiB8fCBsaXN0PTsgXAotCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChnaXJkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotaW5zdGFsbC10eXBlbGlic0RBVEE6ICQodHlwZWxpYnNfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJCh0eXBlbGlic19EQVRBKSc7IHRlc3QgLW4gIiQodHlwZWxpYnNkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQodHlwZWxpYnNkaXIpJyI7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtdHlwZWxpYnNEQVRBOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQodHlwZWxpYnNfREFUQSknOyB0ZXN0IC1uICIkKHR5cGVsaWJzZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQodHlwZWxpYnNkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotaW5zdGFsbC1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVIRUFERVJTOiAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZV9IRUFERVJTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZWRpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVkaXIpJyI7IFwKLQkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlSEVBREVSUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQobGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLXRhZ3MgVEFHUzoKLQotY3RhZ3MgQ1RBR1M6Ci0KLWNzY29wZSBjc2NvcGVsaXN0OgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoREFUQSkgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGdpcmRpcikiICIkKERFU1RESVIpJCh0eXBlbGlic2RpcikiICIkKERFU1RESVIpJChsaWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVkaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWdpckRBVEEgXAotCWluc3RhbGwtbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlSEVBREVSUyBcCi0JaW5zdGFsbC10eXBlbGlic0RBVEEKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtZ2lyREFUQSB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAotCXVuaW5zdGFsbC1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBcCi0JZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1naXJEQVRBIFwKLQlpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAotCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAotCWluc3RhbGwtbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlSEVBREVSUyBcCi0JaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBcCi0JaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGwtdHlwZWxpYnNEQVRBIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1naXJEQVRBIFwKLQl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAotCXVuaW5zdGFsbC1saWJnc3Rjb250cm9sbGVyX0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0lLmMuZ2NvdjogLmxpYnMvbGliZ3N0Y29udHJvbGxlcl9AR1NUX0FQSV9WRVJTSU9OQF9sYS0lLmdjZGEgJS5jCi0JJChHQ09WKSAtYiAtZiAtbyAkXiA+ICRALm91dAotCi1nY292OiAkKGxpYmdzdGNvbnRyb2xsZXJfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUzo9Lmdjb3YpCi0KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBHc3RDb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJJChBTV9WX0dFTilQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIEdJX1NDQU5ORVJfRElTQUJMRV9DQUNIRT15ZXNcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQlHU1RfUExVR0lOX1NZU1RFTV9QQVRIXzFfMD0iIiBHU1RfUExVR0lOX1BBVEhfMV8wPSIiIEdTVF9SRUdJU1RSWV9VUERBVEU9bm8gXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgQ0M9IiQoQ0MpIiBQS0dfQ09ORklHPSIkKFBLR19DT05GSUcpIiBETExUT09MPSIkKERMTFRPT0wpIiBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKElOVFJPU1BFQ1RJT05fU0NBTk5FUikgLXYgLS1uYW1lc3BhY2UgR3N0Q29udHJvbGxlciBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW5zdmVyc2lvbj1AR1NUX0FQSV9WRVJTSU9OQCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXdhcm4tYWxsIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0taWRlbnRpZmllci1wcmVmaXg9R3N0IFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tc3ltYm9sLXByZWZpeD1nc3QgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLUkkKHRvcF9zcmNkaXIpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3Bfc3JjZGlyKS9saWJzIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3BfYnVpbGRkaXIpIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3BfYnVpbGRkaXIpL2xpYnMgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1jLWluY2x1ZGUgImdzdC9jb250cm9sbGVyL2NvbnRyb2xsZXIuaCIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5LXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnJhcnk9bGliZ3N0Y29udHJvbGxlci1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWluY2x1ZGU9R3N0LUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbGlidG9vbD0iJHtMSUJUT09MfSIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tcGtnLWV4cG9ydCBnc3RyZWFtZXItY29udHJvbGxlci1AR1NUX0FQSV9WRVJTSU9OQCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWFkZC1pbml0LXNlY3Rpb249IiQoSU5UUk9TUEVDVElPTl9JTklUKSIgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1vdXRwdXQgJEAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChnaXJfaGVhZGVycykgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJJChnaXJfc291cmNlcykKLQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQCUudHlwZWxpYjogJS5naXIgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKSQoSU5UUk9TUEVDVElPTl9DT01QSUxFUikgLS1pbmNsdWRlZGlyPSQoc3JjZGlyKSAtLWluY2x1ZGVkaXI9JChidWlsZGRpcikgLS1pbmNsdWRlZGlyPSQodG9wX2J1aWxkZGlyKS9nc3QgJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSX09QVFMpICQ8IC1vICQoQEYpCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvY29udHJvbGxlci5oIGIvbGlicy9nc3QvY29udHJvbGxlci9jb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZWI0ZjguLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY29udHJvbGxlci9jb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHU3RyZWFtZXIgZGV2ZWxvcGVycwotICoKLSAqIGdzdGNvbnRyb2xsZXIuaDogc2luZ2xlIGluY2x1ZGUgaGVhZGVyIGZvciBnc3QtY29udHJvbGxlciBsaWJyYXJ5Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9DT05UUk9MTEVSX0hfXwotI2RlZmluZSBfX0dTVF9DT05UUk9MTEVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmg+Ci0KLSNlbmRpZiAvKiBfX0dTVF9DT05UUk9MTEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuYyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0YXJnYmNvbnRyb2xiaW5kaW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MmQzNzAuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3RhcmdiY29udHJvbGJpbmRpbmcuYzogQXR0YWNobWVudCBmb3IgbXVsdGlwbGUgY29udHJvbCBzb3VyY2VzIHRvIGdhcmdiCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3RhcmdiY29udHJvbGJpbmRpbmcKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2VzIHRvIGFyZ2IgcHJvcGVydGllcwotICoKLSAqIEEgdmFsdWUgbWFwcGluZyBvYmplY3QgdGhhdCBhdHRhY2hlcyBtdWx0aXBsZSBjb250cm9sIHNvdXJjZXMgdG8gYSBndWludAotICogZ29iamVjdCBwcm9wZXJ0aWVzIHJlcHJlc2VudGluZyBhIGNvbG9yLiBBIGNvbnRyb2wgdmFsdWUgb2YgMC4wIHdpbGwgdHVybiB0aGUKLSAqIGNvbG9yIGNvbXBvbmVudCBvZmYgYW5kIGEgdmFsdWUgb2YgMS4wIHdpbGwgYmUgdGhlIGNvbG9yIGxldmVsLgotICovCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdGFyZ2Jjb250cm9sYmluZGluZy5oIgotCi0jaW5jbHVkZSA8Z3N0L21hdGgtY29tcGF0Lmg+Ci0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGNvbnRyb2xfYmluZGluZ19kZWJ1ZwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKLQotc3RhdGljIEdPYmplY3QgKmdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19jb25zdHJ1Y3RvciAoR1R5cGUgdHlwZSwKLSAgICBndWludCBuX2NvbnN0cnVjdF9wYXJhbXMsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSAqIGNvbnN0cnVjdF9wYXJhbXMpOwotc3RhdGljIHZvaWQgZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX3N5bmNfdmFsdWVzIChHc3RDb250cm9sQmluZGluZyAqIF9zZWxmLAotICAgIEdzdE9iamVjdCAqIG9iamVjdCwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGxhc3Rfc3luYyk7Ci1zdGF0aWMgR1ZhbHVlICpnc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlIChHc3RDb250cm9sQmluZGluZyAqIF9zZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApOwotc3RhdGljIGdib29sZWFuIGdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXkgKEdzdENvbnRyb2xCaW5kaW5nICoKLSAgICBfc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywKLSAgICBncG9pbnRlciB2YWx1ZXMpOwotc3RhdGljIGdib29sZWFuIGdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfZ192YWx1ZV9hcnJheSAoR3N0Q29udHJvbEJpbmRpbmcgKgotICAgIF9zZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLAotICAgIEdWYWx1ZSAqIHZhbHVlcyk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoR1NUX0NBVF9ERUZBVUxULCAiZ3N0YXJnYmNvbnRyb2xiaW5kaW5nIiwgMCwgXAotICAgICAgImR5bmFtaWMgcGFyYW1ldGVyIGNvbnRyb2wgc291cmNlIGF0dGFjaG1lbnQiKTsKLQotI2RlZmluZSBnc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEFSR0JDb250cm9sQmluZGluZywgZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nLAotICAgIEdTVF9UWVBFX0NPTlRST0xfQklORElORywgX2RvX2luaXQpOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9DU19BLAotICBQUk9QX0NTX1IsCi0gIFBST1BfQ1NfRywKLSAgUFJPUF9DU19CLAotICBQUk9QX0xBU1QKLX07Ci0KLXN0YXRpYyBHUGFyYW1TcGVjICpwcm9wZXJ0aWVzW1BST1BfTEFTVF07Ci0KLS8qIHZtZXRob2RzICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfY2xhc3NfaW5pdCAoR3N0QVJHQkNvbnRyb2xCaW5kaW5nQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0Q29udHJvbEJpbmRpbmdDbGFzcyAqY29udHJvbF9iaW5kaW5nX2NsYXNzID0KLSAgICAgIEdTVF9DT05UUk9MX0JJTkRJTkdfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RvciA9IGdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19jb25zdHJ1Y3RvcjsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19maW5hbGl6ZTsKLQotICBjb250cm9sX2JpbmRpbmdfY2xhc3MtPnN5bmNfdmFsdWVzID0gZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX3N5bmNfdmFsdWVzOwotICBjb250cm9sX2JpbmRpbmdfY2xhc3MtPmdldF92YWx1ZSA9IGdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWU7Ci0gIGNvbnRyb2xfYmluZGluZ19jbGFzcy0+Z2V0X3ZhbHVlX2FycmF5ID0KLSAgICAgIGdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXk7Ci0gIGNvbnRyb2xfYmluZGluZ19jbGFzcy0+Z2V0X2dfdmFsdWVfYXJyYXkgPQotICAgICAgZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5OwotCi0gIHByb3BlcnRpZXNbUFJPUF9DU19BXSA9Ci0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiY29udHJvbC1zb3VyY2UtYSIsICJDb250cm9sU291cmNlIEEiLAotICAgICAgIlRoZSBjb250cm9sIHNvdXJjZSBmb3IgdGhlIGFscGhhIGNvbG9yIGNvbXBvbmVudCIsCi0gICAgICBHU1RfVFlQRV9DT05UUk9MX1NPVVJDRSwKLSAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKTsKLQotICBwcm9wZXJ0aWVzW1BST1BfQ1NfUl0gPQotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoImNvbnRyb2wtc291cmNlLXIiLCAiQ29udHJvbFNvdXJjZSBSIiwKLSAgICAgICJUaGUgY29udHJvbCBzb3VyY2UgZm9yIHRoZSByZWQgY29sb3IgY29tcG9uZW50IiwKLSAgICAgIEdTVF9UWVBFX0NPTlRST0xfU09VUkNFLAotICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotCi0gIHByb3BlcnRpZXNbUFJPUF9DU19HXSA9Ci0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiY29udHJvbC1zb3VyY2UtZyIsICJDb250cm9sU291cmNlIEciLAotICAgICAgIlRoZSBjb250cm9sIHNvdXJjZSBmb3IgdGhlIGdyZWVuIGNvbG9yIGNvbXBvbmVudCIsCi0gICAgICBHU1RfVFlQRV9DT05UUk9MX1NPVVJDRSwKLSAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKTsKLQotICBwcm9wZXJ0aWVzW1BST1BfQ1NfQl0gPQotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoImNvbnRyb2wtc291cmNlLWIiLCAiQ29udHJvbFNvdXJjZSBCIiwKLSAgICAgICJUaGUgY29udHJvbCBzb3VyY2UgZm9yIHRoZSBibHVlIGNvbG9yIGNvbXBvbmVudCIsCi0gICAgICBHU1RfVFlQRV9DT05UUk9MX1NPVVJDRSwKLSAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnRpZXMgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFTVCwgcHJvcGVydGllcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfaW5pdCAoR3N0QVJHQkNvbnRyb2xCaW5kaW5nICogc2VsZikKLXsKLX0KLQotc3RhdGljIEdPYmplY3QgKgotZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX2NvbnN0cnVjdG9yIChHVHlwZSB0eXBlLCBndWludCBuX2NvbnN0cnVjdF9wYXJhbXMsCi0gICAgR09iamVjdENvbnN0cnVjdFBhcmFtICogY29uc3RydWN0X3BhcmFtcykKLXsKLSAgR3N0QVJHQkNvbnRyb2xCaW5kaW5nICpzZWxmOwotCi0gIHNlbGYgPQotICAgICAgR1NUX0FSR0JfQ09OVFJPTF9CSU5ESU5HIChHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IKLSAgICAgICh0eXBlLCBuX2NvbnN0cnVjdF9wYXJhbXMsIGNvbnN0cnVjdF9wYXJhbXMpKTsKLQotICBpZiAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoc2VsZikpIHsKLSAgICBpZiAoIShHX1BBUkFNX1NQRUNfVkFMVUVfVFlQRSAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoc2VsZikpID09Ci0gICAgICAgICAgICBHX1RZUEVfVUlOVCkpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiY2FuJ3QgYmluZCB0byBwYXJhbXNwZWMgdHlwZSAnJXMnIiwKLSAgICAgICAgICBHX1BBUkFNX1NQRUNfVFlQRV9OQU1FIChHU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDIChzZWxmKSkpOwotICAgICAgR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoc2VsZikgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICBnX3ZhbHVlX2luaXQgKCZzZWxmLT5jdXJfdmFsdWUsIEdfVFlQRV9VSU5UKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIChHT2JqZWN0ICopIHNlbGY7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEFSR0JDb250cm9sQmluZGluZyAqc2VsZiA9IEdTVF9BUkdCX0NPTlRST0xfQklORElORyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ1NfQToKLSAgICAgIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiBzZWxmLT5jc19hLAotICAgICAgICAgIGdfdmFsdWVfZ2V0X29iamVjdCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DU19SOgotICAgICAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIHNlbGYtPmNzX3IsCi0gICAgICAgICAgZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NTX0c6Ci0gICAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopICYgc2VsZi0+Y3NfZywKLSAgICAgICAgICBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1NfQjoKLSAgICAgIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiBzZWxmLT5jc19iLAotICAgICAgICAgIGdfdmFsdWVfZ2V0X29iamVjdCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QVJHQkNvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0FSR0JfQ09OVFJPTF9CSU5ESU5HIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DU19BOgotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgc2VsZi0+Y3NfYSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1NfUjoKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHNlbGYtPmNzX3IpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NTX0c6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBzZWxmLT5jc19nKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DU19COgotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgc2VsZi0+Y3NfYik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QVJHQkNvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0FSR0JfQ09OVFJPTF9CSU5ESU5HIChvYmplY3QpOwotCi0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiBzZWxmLT5jc19hLCBOVUxMKTsKLSAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIHNlbGYtPmNzX3IsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopICYgc2VsZi0+Y3NfZywgTlVMTCk7Ci0gIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiBzZWxmLT5jc19iLCBOVUxMKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QVJHQkNvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0FSR0JfQ09OVFJPTF9CSU5ESU5HIChvYmplY3QpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZzZWxmLT5jdXJfdmFsdWUpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXMgKEdzdENvbnRyb2xCaW5kaW5nICogX3NlbGYsCi0gICAgR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgbGFzdF9zeW5jKQotewotICBHc3RBUkdCQ29udHJvbEJpbmRpbmcgKnNlbGYgPSBHU1RfQVJHQl9DT05UUk9MX0JJTkRJTkcgKF9zZWxmKTsKLSAgZ2RvdWJsZSBzcmNfdmFsX2EgPSAxLjAsIHNyY192YWxfciA9IDAuMCwgc3JjX3ZhbF9nID0gMC4wLCBzcmNfdmFsX2IgPSAwLjA7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BUkdCX0NPTlRST0xfQklORElORyAoc2VsZiksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKHNlbGYpLCBGQUxTRSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG9iamVjdCwgInByb3BlcnR5ICclcycgYXQgdHM9JSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgX3NlbGYtPm5hbWUsIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIGlmIChzZWxmLT5jc19hKQotICAgIHJldCAmPSBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChzZWxmLT5jc19hLCB0aW1lc3RhbXAsICZzcmNfdmFsX2EpOwotICBpZiAoc2VsZi0+Y3NfcikKLSAgICByZXQgJj0gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoc2VsZi0+Y3NfciwgdGltZXN0YW1wLCAmc3JjX3ZhbF9yKTsKLSAgaWYgKHNlbGYtPmNzX2cpCi0gICAgcmV0ICY9IGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKHNlbGYtPmNzX2csIHRpbWVzdGFtcCwgJnNyY192YWxfZyk7Ci0gIGlmIChzZWxmLT5jc19iKQotICAgIHJldCAmPSBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChzZWxmLT5jc19iLCB0aW1lc3RhbXAsICZzcmNfdmFsX2IpOwotICBpZiAoR19MSUtFTFkgKHJldCkpIHsKLSAgICBndWludCBzcmNfdmFsID0gKCgoZ3VpbnQpIChDTEFNUCAoc3JjX3ZhbF9hLCAwLjAsIDEuMCkgKiAyNTUpKSA8PCAyNCkgfAotICAgICAgICAoKChndWludCkgKENMQU1QIChzcmNfdmFsX3IsIDAuMCwgMS4wKSAqIDI1NSkpIDw8IDE2KSB8Ci0gICAgICAgICgoKGd1aW50KSAoQ0xBTVAgKHNyY192YWxfZywgMC4wLCAxLjApICogMjU1KSkgPDwgOCkgfAotICAgICAgICAoKGd1aW50KSAoQ0xBTVAgKHNyY192YWxfYiwgMC4wLCAxLjApICogMjU1KSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG9iamVjdCwgIiAgbmV3IHZhbHVlIDB4JTA4eCIsIHNyY192YWwpOwotICAgIC8qIGFsd2F5cyBzZXQgdGhlIHZhbHVlIGZvciBmaXJzdCB0aW1lLCBidXQgdGhlbiBvbmx5IGlmIGl0IGNoYW5nZWQKLSAgICAgKiB0aGlzIHNob3VsZCBsaW1pdCBnX29iamVjdF9ub3RpZnkgaW52b2NhdGlvbnMuCi0gICAgICogRklYTUU6IGNhbiB3ZSBkZXRlY3QgbmVnYXRpdmUgcGxheWJhY2sgcmF0ZXM/Ci0gICAgICovCi0gICAgaWYgKCh0aW1lc3RhbXAgPCBsYXN0X3N5bmMpIHx8IChzcmNfdmFsICE9IHNlbGYtPmxhc3RfdmFsdWUpKSB7Ci0gICAgICBHVmFsdWUgKmRzdF92YWwgPSAmc2VsZi0+Y3VyX3ZhbHVlOwotCi0gICAgICBnX3ZhbHVlX3NldF91aW50IChkc3RfdmFsLCBzcmNfdmFsKTsKLSAgICAgIC8qIHdlIGNhbiBtYWtlIHRoaXMgZmFzdGVyCi0gICAgICAgKiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MzY5MzkKLSAgICAgICAqLwotICAgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5ICgoR09iamVjdCAqKSBvYmplY3QsIF9zZWxmLT5uYW1lLCBkc3RfdmFsKTsKLSAgICAgIHNlbGYtPmxhc3RfdmFsdWUgPSBzcmNfdmFsOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChvYmplY3QsICJubyBjb250cm9sIHZhbHVlIGZvciBwYXJhbSAlcyIsIF9zZWxmLT5uYW1lKTsKLSAgfQotICByZXR1cm4gKHJldCk7Ci19Ci0KLXN0YXRpYyBHVmFsdWUgKgotZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZSAoR3N0Q29udHJvbEJpbmRpbmcgKiBfc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBHc3RBUkdCQ29udHJvbEJpbmRpbmcgKnNlbGYgPSBHU1RfQVJHQl9DT05UUk9MX0JJTkRJTkcgKF9zZWxmKTsKLSAgR1ZhbHVlICpkc3RfdmFsID0gTlVMTDsKLSAgZ2RvdWJsZSBzcmNfdmFsX2EgPSAxLjAsIHNyY192YWxfciA9IDAuMCwgc3JjX3ZhbF9nID0gMC4wLCBzcmNfdmFsX2IgPSAwLjA7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BUkdCX0NPTlRST0xfQklORElORyAoc2VsZiksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoc2VsZiksIEZBTFNFKTsKLQotICAvKiBnZXQgY3VycmVudCB2YWx1ZSB2aWEgY29udHJvbCBzb3VyY2UgKi8KLSAgaWYgKHNlbGYtPmNzX2EpCi0gICAgcmV0ICY9IGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKHNlbGYtPmNzX2EsIHRpbWVzdGFtcCwgJnNyY192YWxfYSk7Ci0gIGlmIChzZWxmLT5jc19yKQotICAgIHJldCAmPSBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChzZWxmLT5jc19yLCB0aW1lc3RhbXAsICZzcmNfdmFsX3IpOwotICBpZiAoc2VsZi0+Y3NfZykKLSAgICByZXQgJj0gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoc2VsZi0+Y3NfZywgdGltZXN0YW1wLCAmc3JjX3ZhbF9nKTsKLSAgaWYgKHNlbGYtPmNzX2IpCi0gICAgcmV0ICY9IGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKHNlbGYtPmNzX2IsIHRpbWVzdGFtcCwgJnNyY192YWxfYik7Ci0gIGlmIChHX0xJS0VMWSAocmV0KSkgewotICAgIGd1aW50IHNyY192YWwgPSAoKChndWludCkgKENMQU1QIChzcmNfdmFsX2EsIDAuMCwgMS4wKSAqIDI1NSkpIDw8IDI0KSB8Ci0gICAgICAgICgoKGd1aW50KSAoQ0xBTVAgKHNyY192YWxfciwgMC4wLCAxLjApICogMjU1KSkgPDwgMTYpIHwKLSAgICAgICAgKCgoZ3VpbnQpIChDTEFNUCAoc3JjX3ZhbF9nLCAwLjAsIDEuMCkgKiAyNTUpKSA8PCA4KSB8Ci0gICAgICAgICgoZ3VpbnQpIChDTEFNUCAoc3JjX3ZhbF9iLCAwLjAsIDEuMCkgKiAyNTUpKTsKLSAgICBkc3RfdmFsID0gZ19uZXcwIChHVmFsdWUsIDEpOwotICAgIGdfdmFsdWVfaW5pdCAoZHN0X3ZhbCwgR19UWVBFX1VJTlQpOwotICAgIGdfdmFsdWVfc2V0X3VpbnQgKGRzdF92YWwsIHNyY192YWwpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0cgKCJubyBjb250cm9sIHZhbHVlIGZvciBwcm9wZXJ0eSAlcyBhdCB0cyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIF9zZWxmLT5uYW1lLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLSAgfQotCi0gIHJldHVybiBkc3RfdmFsOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXkgKEdzdENvbnRyb2xCaW5kaW5nICogX3NlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywKLSAgICBncG9pbnRlciB2YWx1ZXNfKQotewotICBHc3RBUkdCQ29udHJvbEJpbmRpbmcgKnNlbGYgPSBHU1RfQVJHQl9DT05UUk9MX0JJTkRJTkcgKF9zZWxmKTsKLSAgZ2ludCBpOwotICBnZG91YmxlICpzcmNfdmFsX2EgPSBOVUxMLCAqc3JjX3ZhbF9yID0gTlVMTCwgKnNyY192YWxfZyA9IE5VTEwsICpzcmNfdmFsX2IgPQotICAgICAgTlVMTDsKLSAgZ3VpbnQgKnZhbHVlcyA9IChndWludCAqKSB2YWx1ZXNfOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQVJHQl9DT05UUk9MX0JJTkRJTkcgKHNlbGYpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGludGVydmFsKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWVzLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDIChzZWxmKSwgRkFMU0UpOwotCi0gIGlmIChzZWxmLT5jc19hKSB7Ci0gICAgc3JjX3ZhbF9hID0gZ19uZXcwIChnZG91YmxlLCBuX3ZhbHVlcyk7Ci0gICAgcmV0ICY9IGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgKHNlbGYtPmNzX2EsIHRpbWVzdGFtcCwKLSAgICAgICAgaW50ZXJ2YWwsIG5fdmFsdWVzLCBzcmNfdmFsX2EpOwotICB9Ci0gIGlmIChzZWxmLT5jc19yKSB7Ci0gICAgc3JjX3ZhbF9yID0gZ19uZXcwIChnZG91YmxlLCBuX3ZhbHVlcyk7Ci0gICAgcmV0ICY9IGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgKHNlbGYtPmNzX3IsIHRpbWVzdGFtcCwKLSAgICAgICAgaW50ZXJ2YWwsIG5fdmFsdWVzLCBzcmNfdmFsX3IpOwotICB9Ci0gIGlmIChzZWxmLT5jc19nKSB7Ci0gICAgc3JjX3ZhbF9nID0gZ19uZXcwIChnZG91YmxlLCBuX3ZhbHVlcyk7Ci0gICAgcmV0ICY9IGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgKHNlbGYtPmNzX2csIHRpbWVzdGFtcCwKLSAgICAgICAgaW50ZXJ2YWwsIG5fdmFsdWVzLCBzcmNfdmFsX2cpOwotICB9Ci0gIGlmIChzZWxmLT5jc19iKSB7Ci0gICAgc3JjX3ZhbF9iID0gZ19uZXcwIChnZG91YmxlLCBuX3ZhbHVlcyk7Ci0gICAgcmV0ICY9IGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgKHNlbGYtPmNzX2IsIHRpbWVzdGFtcCwKLSAgICAgICAgaW50ZXJ2YWwsIG5fdmFsdWVzLCBzcmNfdmFsX2IpOwotICB9Ci0gIGlmIChHX0xJS0VMWSAocmV0KSkgewotICAgIGZvciAoaSA9IDA7IGkgPCBuX3ZhbHVlczsgaSsrKSB7Ci0gICAgICBnZG91YmxlIGEgPSAxLjAsIHIgPSAwLjAsIGcgPSAwLjAsIGIgPSAwLjA7Ci0gICAgICBpZiAoc3JjX3ZhbF9hICYmICFpc25hbiAoc3JjX3ZhbF9hW2ldKSkKLSAgICAgICAgYSA9IHNyY192YWxfYVtpXTsKLSAgICAgIGlmIChzcmNfdmFsX3IgJiYgIWlzbmFuIChzcmNfdmFsX3JbaV0pKQotICAgICAgICByID0gc3JjX3ZhbF9yW2ldOwotICAgICAgaWYgKHNyY192YWxfZyAmJiAhaXNuYW4gKHNyY192YWxfZ1tpXSkpCi0gICAgICAgIGcgPSBzcmNfdmFsX2dbaV07Ci0gICAgICBpZiAoc3JjX3ZhbF9iICYmICFpc25hbiAoc3JjX3ZhbF9iW2ldKSkKLSAgICAgICAgYiA9IHNyY192YWxfYltpXTsKLSAgICAgIHZhbHVlc1tpXSA9ICgoKGd1aW50KSAoQ0xBTVAgKGEsIDAuMCwgMS4wKSAqIDI1NSkpIDw8IDI0KSB8Ci0gICAgICAgICAgKCgoZ3VpbnQpIChDTEFNUCAociwgMC4wLCAxLjApICogMjU1KSkgPDwgMTYpIHwKLSAgICAgICAgICAoKChndWludCkgKENMQU1QIChnLCAwLjAsIDEuMCkgKiAyNTUpKSA8PCA4KSB8Ci0gICAgICAgICAgKChndWludCkgKENMQU1QIChiLCAwLjAsIDEuMCkgKiAyNTUpKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPRyAoImZhaWxlZCB0byBnZXQgY29udHJvbCB2YWx1ZSBmb3IgcHJvcGVydHkgJXMgYXQgdHMgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBfc2VsZi0+bmFtZSwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0gIH0KLSAgZ19mcmVlIChzcmNfdmFsX2EpOwotICBnX2ZyZWUgKHNyY192YWxfcik7Ci0gIGdfZnJlZSAoc3JjX3ZhbF9nKTsKLSAgZ19mcmVlIChzcmNfdmFsX2IpOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19nZXRfZ192YWx1ZV9hcnJheSAoR3N0Q29udHJvbEJpbmRpbmcgKiBfc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLAotICAgIEdWYWx1ZSAqIHZhbHVlcykKLXsKLSAgR3N0QVJHQkNvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0FSR0JfQ09OVFJPTF9CSU5ESU5HIChfc2VsZik7Ci0gIGdpbnQgaTsKLSAgZ2RvdWJsZSAqc3JjX3ZhbF9hID0gTlVMTCwgKnNyY192YWxfciA9IE5VTEwsICpzcmNfdmFsX2cgPSBOVUxMLCAqc3JjX3ZhbF9iID0KLSAgICAgIE5VTEw7Ci0gIGd1aW50IHNyY192YWw7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BUkdCX0NPTlRST0xfQklORElORyAoc2VsZiksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoaW50ZXJ2YWwpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZXMsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKHNlbGYpLCBGQUxTRSk7Ci0KLSAgaWYgKHNlbGYtPmNzX2EpIHsKLSAgICBzcmNfdmFsX2EgPSBnX25ldzAgKGdkb3VibGUsIG5fdmFsdWVzKTsKLSAgICByZXQgJj0gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoc2VsZi0+Y3NfYSwgdGltZXN0YW1wLAotICAgICAgICBpbnRlcnZhbCwgbl92YWx1ZXMsIHNyY192YWxfYSk7Ci0gIH0KLSAgaWYgKHNlbGYtPmNzX3IpIHsKLSAgICBzcmNfdmFsX3IgPSBnX25ldzAgKGdkb3VibGUsIG5fdmFsdWVzKTsKLSAgICByZXQgJj0gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoc2VsZi0+Y3NfciwgdGltZXN0YW1wLAotICAgICAgICBpbnRlcnZhbCwgbl92YWx1ZXMsIHNyY192YWxfcik7Ci0gIH0KLSAgaWYgKHNlbGYtPmNzX2cpIHsKLSAgICBzcmNfdmFsX2cgPSBnX25ldzAgKGdkb3VibGUsIG5fdmFsdWVzKTsKLSAgICByZXQgJj0gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoc2VsZi0+Y3NfZywgdGltZXN0YW1wLAotICAgICAgICBpbnRlcnZhbCwgbl92YWx1ZXMsIHNyY192YWxfZyk7Ci0gIH0KLSAgaWYgKHNlbGYtPmNzX2IpIHsKLSAgICBzcmNfdmFsX2IgPSBnX25ldzAgKGdkb3VibGUsIG5fdmFsdWVzKTsKLSAgICByZXQgJj0gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoc2VsZi0+Y3NfYiwgdGltZXN0YW1wLAotICAgICAgICBpbnRlcnZhbCwgbl92YWx1ZXMsIHNyY192YWxfYik7Ci0gIH0KLSAgaWYgKEdfTElLRUxZIChyZXQpKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5fdmFsdWVzOyBpKyspIHsKLSAgICAgIGdkb3VibGUgYSA9IDEuMCwgciA9IDAuMCwgZyA9IDAuMCwgYiA9IDAuMDsKLSAgICAgIGlmIChzcmNfdmFsX2EgJiYgIWlzbmFuIChzcmNfdmFsX2FbaV0pKQotICAgICAgICBhID0gc3JjX3ZhbF9hW2ldOwotICAgICAgaWYgKHNyY192YWxfciAmJiAhaXNuYW4gKHNyY192YWxfcltpXSkpCi0gICAgICAgIHIgPSBzcmNfdmFsX3JbaV07Ci0gICAgICBpZiAoc3JjX3ZhbF9nICYmICFpc25hbiAoc3JjX3ZhbF9nW2ldKSkKLSAgICAgICAgZyA9IHNyY192YWxfZ1tpXTsKLSAgICAgIGlmIChzcmNfdmFsX2IgJiYgIWlzbmFuIChzcmNfdmFsX2JbaV0pKQotICAgICAgICBiID0gc3JjX3ZhbF9iW2ldOwotICAgICAgc3JjX3ZhbCA9ICgoKGd1aW50KSAoQ0xBTVAgKGEsIDAuMCwgMS4wKSAqIDI1NSkpIDw8IDI0KSB8Ci0gICAgICAgICAgKCgoZ3VpbnQpIChDTEFNUCAociwgMC4wLCAxLjApICogMjU1KSkgPDwgMTYpIHwKLSAgICAgICAgICAoKChndWludCkgKENMQU1QIChnLCAwLjAsIDEuMCkgKiAyNTUpKSA8PCA4KSB8Ci0gICAgICAgICAgKChndWludCkgKENMQU1QIChiLCAwLjAsIDEuMCkgKiAyNTUpKTsKLSAgICAgIGdfdmFsdWVfaW5pdCAoJnZhbHVlc1tpXSwgR19UWVBFX1VJTlQpOwotICAgICAgZ192YWx1ZV9zZXRfdWludCAoJnZhbHVlc1tpXSwgc3JjX3ZhbCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9MT0cgKCJmYWlsZWQgdG8gZ2V0IGNvbnRyb2wgdmFsdWUgZm9yIHByb3BlcnR5ICVzIGF0IHRzICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgX3NlbGYtPm5hbWUsIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotICB9Ci0gIGdfZnJlZSAoc3JjX3ZhbF9hKTsKLSAgZ19mcmVlIChzcmNfdmFsX3IpOwotICBnX2ZyZWUgKHNyY192YWxfZyk7Ci0gIGdfZnJlZSAoc3JjX3ZhbF9iKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogZnVuY3Rpb25zICovCi0KLS8qKgotICogZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX25ldzoKLSAqIEBvYmplY3Q6IHRoZSBvYmplY3Qgb2YgdGhlIHByb3BlcnR5Ci0gKiBAcHJvcGVydHlfbmFtZTogdGhlIHByb3BlcnR5LW5hbWUgdG8gYXR0YWNoIHRoZSBjb250cm9sIHNvdXJjZQotICogQGNzX2E6IHRoZSBjb250cm9sIHNvdXJjZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwKLSAqIEBjc19yOiB0aGUgY29udHJvbCBzb3VyY2UgZm9yIHRoZSByZWQgY2hhbm5lbAotICogQGNzX2c6IHRoZSBjb250cm9sIHNvdXJjZSBmb3IgdGhlIGdyZWVuIGNoYW5uZWwKLSAqIEBjc19iOiB0aGUgY29udHJvbCBzb3VyY2UgZm9yIHRoZSBibHVlIGNoYW5uZWwKLSAqCi0gKiBDcmVhdGUgYSBuZXcgY29udHJvbC1iaW5kaW5nIHRoYXQgYXR0YWNoZXMgdGhlIGdpdmVuICNHc3RDb250cm9sU291cmNlIHRvIHRoZQotICogI0dPYmplY3QgcHJvcGVydHkuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZsb2F0aW5nKTogdGhlIG5ldyAjR3N0QVJHQkNvbnRyb2xCaW5kaW5nCi0gKi8KLUdzdENvbnRyb2xCaW5kaW5nICoKLWdzdF9hcmdiX2NvbnRyb2xfYmluZGluZ19uZXcgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgIEdzdENvbnRyb2xTb3VyY2UgKiBjc19hLCBHc3RDb250cm9sU291cmNlICogY3NfciwgR3N0Q29udHJvbFNvdXJjZSAqIGNzX2csCi0gICAgR3N0Q29udHJvbFNvdXJjZSAqIGNzX2IpCi17Ci0gIHJldHVybiAoR3N0Q29udHJvbEJpbmRpbmcgKikgZ19vYmplY3RfbmV3IChHU1RfVFlQRV9BUkdCX0NPTlRST0xfQklORElORywKLSAgICAgICJvYmplY3QiLCBvYmplY3QsICJuYW1lIiwgcHJvcGVydHlfbmFtZSwKLSAgICAgICJjb250cm9sLXNvdXJjZS1hIiwgY3NfYSwKLSAgICAgICJjb250cm9sLXNvdXJjZS1yIiwgY3NfciwKLSAgICAgICJjb250cm9sLXNvdXJjZS1nIiwgY3NfZywgImNvbnRyb2wtc291cmNlLWIiLCBjc19iLCBOVUxMKTsKLX0KLQotLyogZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5oIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3RhcmdiY29udHJvbGJpbmRpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY5OGIwNy4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdGFyZ2Jjb250cm9sYmluZGluZy5oOiBBdHRhY2htZW50IGZvciBtdWx0aXBsZSBjb250cm9sIHNvdXJjZXMgdG8gZ2FyZ2IKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FSR0JfQ09OVFJPTF9CSU5ESU5HX0hfXwotI2RlZmluZSBfX0dTVF9BUkdCX0NPTlRST0xfQklORElOR19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29udHJvbHNvdXJjZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVJHQl9DT05UUk9MX0JJTkRJTkcgXAotICAoZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BUkdCX0NPTlRST0xfQklORElORyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FSR0JfQ09OVFJPTF9CSU5ESU5HLEdzdEFSR0JDb250cm9sQmluZGluZykpCi0jZGVmaW5lIEdTVF9BUkdCX0NPTlRST0xfQklORElOR19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9BUkdCX0NPTlRST0xfQklORElORyxHc3RBUkdCQ29udHJvbEJpbmRpbmdDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BUkdCX0NPTlRST0xfQklORElORyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FSR0JfQ09OVFJPTF9CSU5ESU5HKSkKLSNkZWZpbmUgR1NUX0lTX0FSR0JfQ09OVFJPTF9CSU5ESU5HX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0FSR0JfQ09OVFJPTF9CSU5ESU5HKSkKLSNkZWZpbmUgR1NUX0FSR0JfQ09OVFJPTF9CSU5ESU5HX0dFVF9DTEFTUyhvYmopIFwKLSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9DT05UT0xfU09VUkNFLCBHc3RBUkdCQ29udHJvbEJpbmRpbmdDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBUkdCQ29udHJvbEJpbmRpbmcgR3N0QVJHQkNvbnRyb2xCaW5kaW5nOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFSR0JDb250cm9sQmluZGluZ0NsYXNzIEdzdEFSR0JDb250cm9sQmluZGluZ0NsYXNzOwotCi0vKioKLSAqIEdzdEFSR0JDb250cm9sQmluZGluZzoKLSAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBvZiB0aGlzIGJpbmRpbmcKLSAqCi0gKiBUaGUgaW5zdGFuY2Ugc3RydWN0dXJlIG9mICNHc3RBUkdCQ29udHJvbEJpbmRpbmcuCi0gKi8KLXN0cnVjdCBfR3N0QVJHQkNvbnRyb2xCaW5kaW5nIHsKLSAgR3N0Q29udHJvbEJpbmRpbmcgcGFyZW50OwotICAKLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdENvbnRyb2xTb3VyY2UgKmNzX2E7ICAgICAgIC8qIEdzdENvbnRyb2xTb3VyY2VzIGZvciB0aGlzIHByb3BlcnR5ICovCi0gIEdzdENvbnRyb2xTb3VyY2UgKmNzX3I7Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzX2c7Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzX2I7Ci0KLSAgR1ZhbHVlIGN1cl92YWx1ZTsKLSAgZ3VpbnQzMiBsYXN0X3ZhbHVlOwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotLyoqCi0gKiBHc3RBUkdCQ29udHJvbEJpbmRpbmdDbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IFBhcmVudCBjbGFzcwotICogQGNvbnZlcnQ6IENsYXNzIG1ldGhvZCB0byBjb252ZXJ0IGNvbnRyb2wtdmFsdWVzCi0gKgotICogVGhlIGNsYXNzIHN0cnVjdHVyZSBvZiAjR3N0QVJHQkNvbnRyb2xCaW5kaW5nLgotICovCi0KLXN0cnVjdCBfR3N0QVJHQkNvbnRyb2xCaW5kaW5nQ2xhc3MKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmdDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotR1R5cGUgZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX2dldF90eXBlICh2b2lkKTsKLQotLyogRnVuY3Rpb25zICovCi0KLUdzdENvbnRyb2xCaW5kaW5nICogZ3N0X2FyZ2JfY29udHJvbF9iaW5kaW5nX25ldyAgIChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENvbnRyb2xTb3VyY2UgKiBjc19hLCBHc3RDb250cm9sU291cmNlICogY3NfciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENvbnRyb2xTb3VyY2UgKiBjc19nLCBHc3RDb250cm9sU291cmNlICogY3NfYik7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0QVJHQkNvbnRyb2xCaW5kaW5nLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BUkdCX0NPTlRST0xfQklORElOR19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkY2YzZS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NDggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuYzogRGlyZWN0IGF0dGFjaG1lbnQgZm9yIGNvbnRyb2wgc291cmNlcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046Z3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogZGlyZWN0IGF0dGFjaG1lbnQgZm9yIGNvbnRyb2wgc291cmNlcwotICoKLSAqIEEgdmFsdWUgbWFwcGluZyBvYmplY3QgdGhhdCBhdHRhY2hlcyBjb250cm9sIHNvdXJjZXMgdG8gZ29iamVjdCBwcm9wZXJ0aWVzLiBJdAotICogd2lsbCBtYXAgdGhlIGNvbnRyb2wgdmFsdWVzIGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgcmFuZ2UuIElmIGEKLSAqIG5vbi1hYnNvbHV0ZSBkaXJlY3QgY29udHJvbCBiaW5kaW5nIGlzIHVzZWQsIHRoZSB2YWx1ZSByYW5nZSBbMC4wIC4uLiAxLjBdCi0gKiBpcyBtYXBwZWQgdG8gZnVsbCB0YXJnZXQgcHJvcGVydHkgcmFuZ2UsIGFuZCBhbGwgdmFsdWVzIG91dHNpZGUgdGhlIHJhbmdlCi0gKiB3aWxsIGJlIGNsaXBwZWQuIEFuIGFic29sdXRlIGNvbnRyb2wgYmluZGluZyB3aWxsIG5vdCBkbyBhbnkgdmFsdWUKLSAqIHRyYW5zZm9ybWF0aW9ucy4KLSAqLwotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RkaXJlY3Rjb250cm9sYmluZGluZy5oIgotCi0jaW5jbHVkZSA8Z3N0L21hdGgtY29tcGF0Lmg+Ci0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGNvbnRyb2xfYmluZGluZ19kZWJ1ZwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKLQotCi1zdGF0aWMgR09iamVjdCAqZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfY29uc3RydWN0b3IgKEdUeXBlIHR5cGUsCi0gICAgZ3VpbnQgbl9jb25zdHJ1Y3RfcGFyYW1zLCBHT2JqZWN0Q29uc3RydWN0UGFyYW0gKiBjb25zdHJ1Y3RfcGFyYW1zKTsKLXN0YXRpYyB2b2lkIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXMgKEdzdENvbnRyb2xCaW5kaW5nICoKLSAgICBfc2VsZiwgR3N0T2JqZWN0ICogb2JqZWN0LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgbGFzdF9zeW5jKTsKLXN0YXRpYyBHVmFsdWUgKmdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZSAoR3N0Q29udHJvbEJpbmRpbmcgKiBfc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXkgKEdzdENvbnRyb2xCaW5kaW5nICoKLSAgICBfc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywKLSAgICBncG9pbnRlciB2YWx1ZXMpOwotc3RhdGljIGdib29sZWFuIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5IChHc3RDb250cm9sQmluZGluZwotICAgICogX3NlbGYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgR1ZhbHVlICogdmFsdWVzKTsKLQotI2RlZmluZSBfZG9faW5pdCBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChHU1RfQ0FUX0RFRkFVTFQsICJnc3RkaXJlY3Rjb250cm9sYmluZGluZyIsIDAsIFwKLSAgICAgICJkeW5hbWljIHBhcmFtZXRlciBjb250cm9sIHNvdXJjZSBhdHRhY2htZW50Iik7Ci0KLSNkZWZpbmUgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nLCBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZywKLSAgICBHU1RfVFlQRV9DT05UUk9MX0JJTkRJTkcsIF9kb19pbml0KTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ1MsCi0gIFBST1BfQUJTT0xVVEUsCi0gIFBST1BfTEFTVAotfTsKLQotc3RhdGljIEdQYXJhbVNwZWMgKnByb3BlcnRpZXNbUFJPUF9MQVNUXTsKLQotLyogbWFwcGluZyBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBERUZJTkVfQ09OVkVSVCh0eXBlLFR5cGUsVFlQRSxST1VORElOR19PUCkgXAotc3RhdGljIHZvaWQgXAotY29udmVydF9nX3ZhbHVlX3RvXyMjdHlwZSAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcgKnNlbGYsIGdkb3VibGUgcywgR1ZhbHVlICpkKSBcCi17IFwKLSAgR1BhcmFtU3BlYyMjVHlwZSAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfIyNUWVBFICgoKEdzdENvbnRyb2xCaW5kaW5nICopc2VsZiktPnBzcGVjKTsgXAotICBnIyN0eXBlIHY7IFwKLSAgXAotICBzID0gQ0xBTVAgKHMsIDAuMCwgMS4wKTsgXAotICB2ID0gKGcjI3R5cGUpIFJPVU5ESU5HX09QIChwc3BlYy0+bWluaW11bSAqICgxLXMpKSArIChnIyN0eXBlKSBST1VORElOR19PUCAocHNwZWMtPm1heGltdW0gKiBzKTsgXAotICBnX3ZhbHVlX3NldF8jI3R5cGUgKGQsIHYpOyBcCi19IFwKLVwKLXN0YXRpYyB2b2lkIFwKLWNvbnZlcnRfdmFsdWVfdG9fIyN0eXBlIChHc3REaXJlY3RDb250cm9sQmluZGluZyAqc2VsZiwgZ2RvdWJsZSBzLCBncG9pbnRlciBkXykgXAoteyBcCi0gIEdQYXJhbVNwZWMjI1R5cGUgKnBzcGVjID0gR19QQVJBTV9TUEVDXyMjVFlQRSAoKChHc3RDb250cm9sQmluZGluZyAqKXNlbGYpLT5wc3BlYyk7IFwKLSAgZyMjdHlwZSAqZCA9IChnIyN0eXBlICopZF87IFwKLSAgXAotICBzID0gQ0xBTVAgKHMsIDAuMCwgMS4wKTsgXAotICAqZCA9IChnIyN0eXBlKSBST1VORElOR19PUCAocHNwZWMtPm1pbmltdW0gKiAoMS1zKSkgKyAoZyMjdHlwZSkgUk9VTkRJTkdfT1AgKHBzcGVjLT5tYXhpbXVtICogcyk7IFwKLX0gXAotXAotc3RhdGljIHZvaWQgXAotYWJzX2NvbnZlcnRfZ192YWx1ZV90b18jI3R5cGUgKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nICpzZWxmLCBnZG91YmxlIHMsIEdWYWx1ZSAqZCkgXAoteyBcCi0gIGcjI3R5cGUgdjsgXAotICB2ID0gKGcjI3R5cGUpIFJPVU5ESU5HX09QIChzKTsgXAotICBnX3ZhbHVlX3NldF8jI3R5cGUgKGQsIHYpOyBcCi19IFwKLVwKLXN0YXRpYyB2b2lkIFwKLWFic19jb252ZXJ0X3ZhbHVlX3RvXyMjdHlwZSAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcgKnNlbGYsIGdkb3VibGUgcywgZ3BvaW50ZXIgZF8pIFwKLXsgXAotICBnIyN0eXBlICpkID0gKGcjI3R5cGUgKilkXzsgXAotICAqZCA9IChnIyN0eXBlKSBST1VORElOR19PUCAocyk7IFwKLX0KLQotREVGSU5FX0NPTlZFUlQgKGludCwgSW50LCBJTlQsIHJpbnQpOwotREVGSU5FX0NPTlZFUlQgKHVpbnQsIFVJbnQsIFVJTlQsIHJpbnQpOwotREVGSU5FX0NPTlZFUlQgKGxvbmcsIExvbmcsIExPTkcsIHJpbnQpOwotREVGSU5FX0NPTlZFUlQgKHVsb25nLCBVTG9uZywgVUxPTkcsIHJpbnQpOwotREVGSU5FX0NPTlZFUlQgKGludDY0LCBJbnQ2NCwgSU5UNjQsIHJpbnQpOwotREVGSU5FX0NPTlZFUlQgKHVpbnQ2NCwgVUludDY0LCBVSU5UNjQsIHJpbnQpOwotREVGSU5FX0NPTlZFUlQgKGZsb2F0LCBGbG9hdCwgRkxPQVQsIC8qTk9PUCovKTsKLURFRklORV9DT05WRVJUIChkb3VibGUsIERvdWJsZSwgRE9VQkxFLCAvKk5PT1AqLyk7Ci0KLXN0YXRpYyB2b2lkCi1jb252ZXJ0X2dfdmFsdWVfdG9fYm9vbGVhbiAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcgKiBzZWxmLCBnZG91YmxlIHMsCi0gICAgR1ZhbHVlICogZCkKLXsKLSAgcyA9IENMQU1QIChzLCAwLjAsIDEuMCk7Ci0gIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKGQsIChnYm9vbGVhbikgKHMgKyAwLjUpKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvbnZlcnRfdmFsdWVfdG9fYm9vbGVhbiAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcgKiBzZWxmLCBnZG91YmxlIHMsCi0gICAgZ3BvaW50ZXIgZF8pCi17Ci0gIGdib29sZWFuICpkID0gKGdib29sZWFuICopIGRfOwotCi0gIHMgPSBDTEFNUCAocywgMC4wLCAxLjApOwotICAqZCA9IChnYm9vbGVhbikgKHMgKyAwLjUpOwotfQotCi1zdGF0aWMgdm9pZAotY29udmVydF9nX3ZhbHVlX3RvX2VudW0gKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nICogc2VsZiwgZ2RvdWJsZSBzLCBHVmFsdWUgKiBkKQotewotICBHUGFyYW1TcGVjRW51bSAqcHNwZWMgPQotICAgICAgR19QQVJBTV9TUEVDX0VOVU0gKCgoR3N0Q29udHJvbEJpbmRpbmcgKikgc2VsZiktPnBzcGVjKTsKLSAgR0VudW1DbGFzcyAqZSA9IHBzcGVjLT5lbnVtX2NsYXNzOwotICBnaW50IHY7Ci0KLSAgcyA9IENMQU1QIChzLCAwLjAsIDEuMCk7Ci0gIHYgPSBzICogKGUtPm5fdmFsdWVzIC0gMSk7Ci0gIGdfdmFsdWVfc2V0X2VudW0gKGQsIGUtPnZhbHVlc1t2XS52YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb252ZXJ0X3ZhbHVlX3RvX2VudW0gKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nICogc2VsZiwgZ2RvdWJsZSBzLCBncG9pbnRlciBkXykKLXsKLSAgR1BhcmFtU3BlY0VudW0gKnBzcGVjID0KLSAgICAgIEdfUEFSQU1fU1BFQ19FTlVNICgoKEdzdENvbnRyb2xCaW5kaW5nICopIHNlbGYpLT5wc3BlYyk7Ci0gIEdFbnVtQ2xhc3MgKmUgPSBwc3BlYy0+ZW51bV9jbGFzczsKLSAgZ2ludCAqZCA9IChnaW50ICopIGRfOwotCi0gIHMgPSBDTEFNUCAocywgMC4wLCAxLjApOwotICAqZCA9IGUtPnZhbHVlc1soZ2ludCkgKHMgKiAoZS0+bl92YWx1ZXMgLSAxKSldLnZhbHVlOwotfQotCi0vKiB2bWV0aG9kcyAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfY2xhc3NfaW5pdCAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RDb250cm9sQmluZGluZ0NsYXNzICpjb250cm9sX2JpbmRpbmdfY2xhc3MgPQotICAgICAgR1NUX0NPTlRST0xfQklORElOR19DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmNvbnN0cnVjdG9yID0gZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfY29uc3RydWN0b3I7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfZGlzcG9zZTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19maW5hbGl6ZTsKLQotICBjb250cm9sX2JpbmRpbmdfY2xhc3MtPnN5bmNfdmFsdWVzID0gZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXM7Ci0gIGNvbnRyb2xfYmluZGluZ19jbGFzcy0+Z2V0X3ZhbHVlID0gZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfZ2V0X3ZhbHVlOwotICBjb250cm9sX2JpbmRpbmdfY2xhc3MtPmdldF92YWx1ZV9hcnJheSA9Ci0gICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWVfYXJyYXk7Ci0gIGNvbnRyb2xfYmluZGluZ19jbGFzcy0+Z2V0X2dfdmFsdWVfYXJyYXkgPQotICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfZ2V0X2dfdmFsdWVfYXJyYXk7Ci0KLSAgcHJvcGVydGllc1tQUk9QX0NTXSA9Ci0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiY29udHJvbC1zb3VyY2UiLCAiQ29udHJvbFNvdXJjZSIsCi0gICAgICAiVGhlIGNvbnRyb2wgc291cmNlIiwKLSAgICAgIEdTVF9UWVBFX0NPTlRST0xfU09VUkNFLAotICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotCi0gIHByb3BlcnRpZXNbUFJPUF9BQlNPTFVURV0gPQotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhYnNvbHV0ZSIsICJBYnNvbHV0ZSIsCi0gICAgICAiV2hldGhlciB0aGUgY29udHJvbCB2YWx1ZXMgYXJlIGFic29sdXRlIiwKLSAgICAgIEZBTFNFLAotICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0aWVzIChnb2JqZWN0X2NsYXNzLCBQUk9QX0xBU1QsIHByb3BlcnRpZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfaW5pdCAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcgKiBzZWxmKQotewotfQotCi1zdGF0aWMgR09iamVjdCAqCi1nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19jb25zdHJ1Y3RvciAoR1R5cGUgdHlwZSwgZ3VpbnQgbl9jb25zdHJ1Y3RfcGFyYW1zLAotICAgIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSAqIGNvbnN0cnVjdF9wYXJhbXMpCi17Ci0gIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nICpzZWxmOwotCi0gIHNlbGYgPQotICAgICAgR1NUX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcgKEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RvcgotICAgICAgKHR5cGUsIG5fY29uc3RydWN0X3BhcmFtcywgY29uc3RydWN0X3BhcmFtcykpOwotCi0gIGlmIChHU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDIChzZWxmKSkgewotICAgIEdUeXBlIHR5cGUsIGJhc2U7Ci0KLSAgICBiYXNlID0gdHlwZSA9IEdfUEFSQU1fU1BFQ19WQUxVRV9UWVBFIChHU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDIChzZWxmKSk7Ci0gICAgZ192YWx1ZV9pbml0ICgmc2VsZi0+Y3VyX3ZhbHVlLCB0eXBlKTsKLSAgICB3aGlsZSAoKHR5cGUgPSBnX3R5cGVfcGFyZW50ICh0eXBlKSkpCi0gICAgICBiYXNlID0gdHlwZTsKLQotICAgIEdTVF9ERUJVRyAoIiAgdXNpbmcgdHlwZSAlcyIsIGdfdHlwZV9uYW1lIChiYXNlKSk7Ci0KLSAgICAvKiBzZWxlY3QgbWFwcGluZyBmdW5jdGlvbiAqLwotCi0jZGVmaW5lIFNFVF9DT05WRVJUX0ZVTkNUSU9OKHR5cGUpIFwKLSAgICBpZiAoc2VsZi0+QUJJLmFiaS53YW50X2Fic29sdXRlKSB7IFwKLSAgICAgICAgc2VsZi0+Y29udmVydF9nX3ZhbHVlID0gYWJzX2NvbnZlcnRfZ192YWx1ZV90b18jI3R5cGU7IFwKLSAgICAgICAgc2VsZi0+Y29udmVydF92YWx1ZSA9IGFic19jb252ZXJ0X3ZhbHVlX3RvXyMjdHlwZTsgXAotICAgIH0gXAotICAgIGVsc2UgeyBcCi0gICAgICAgIHNlbGYtPmNvbnZlcnRfZ192YWx1ZSA9IGNvbnZlcnRfZ192YWx1ZV90b18jI3R5cGU7IFwKLSAgICAgICAgc2VsZi0+Y29udmVydF92YWx1ZSA9IGNvbnZlcnRfdmFsdWVfdG9fIyN0eXBlOyBcCi0gICAgfSBcCi0gICAgc2VsZi0+Ynl0ZV9zaXplID0gc2l6ZW9mIChnIyN0eXBlKTsKLQotCi0gICAgc3dpdGNoIChiYXNlKSB7Ci0gICAgICBjYXNlIEdfVFlQRV9JTlQ6Ci0gICAgICAgIFNFVF9DT05WRVJUX0ZVTkNUSU9OIChpbnQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR19UWVBFX1VJTlQ6Ci0gICAgICAgIFNFVF9DT05WRVJUX0ZVTkNUSU9OICh1aW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdfVFlQRV9MT05HOgotICAgICAgICBTRVRfQ09OVkVSVF9GVU5DVElPTiAobG9uZyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfVUxPTkc6Ci0gICAgICAgIFNFVF9DT05WRVJUX0ZVTkNUSU9OICh1bG9uZyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfSU5UNjQ6Ci0gICAgICAgIFNFVF9DT05WRVJUX0ZVTkNUSU9OIChpbnQ2NCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHX1RZUEVfVUlOVDY0OgotICAgICAgICBTRVRfQ09OVkVSVF9GVU5DVElPTiAodWludDY0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdfVFlQRV9GTE9BVDoKLSAgICAgICAgU0VUX0NPTlZFUlRfRlVOQ1RJT04gKGZsb2F0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdfVFlQRV9ET1VCTEU6Ci0gICAgICAgIFNFVF9DT05WRVJUX0ZVTkNUSU9OIChkb3VibGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR19UWVBFX0JPT0xFQU46Ci0gICAgICAgIHNlbGYtPmNvbnZlcnRfZ192YWx1ZSA9IGNvbnZlcnRfZ192YWx1ZV90b19ib29sZWFuOwotICAgICAgICBzZWxmLT5jb252ZXJ0X3ZhbHVlID0gY29udmVydF92YWx1ZV90b19ib29sZWFuOwotICAgICAgICBzZWxmLT5ieXRlX3NpemUgPSBzaXplb2YgKGdib29sZWFuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdfVFlQRV9FTlVNOgotICAgICAgICBzZWxmLT5jb252ZXJ0X2dfdmFsdWUgPSBjb252ZXJ0X2dfdmFsdWVfdG9fZW51bTsKLSAgICAgICAgc2VsZi0+Y29udmVydF92YWx1ZSA9IGNvbnZlcnRfdmFsdWVfdG9fZW51bTsKLSAgICAgICAgc2VsZi0+Ynl0ZV9zaXplID0gc2l6ZW9mIChnaW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklORyAoImluY29tcGxldGUgaW1wbGVtZW50YXRpb24gZm9yIHBhcmFtc3BlYyB0eXBlICclcyciLAotICAgICAgICAgICAgR19QQVJBTV9TUEVDX1RZUEVfTkFNRSAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoc2VsZikpKTsKLSAgICAgICAgR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoc2VsZikgPSBOVUxMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIChHT2JqZWN0ICopIHNlbGY7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcgKnNlbGYgPSBHU1RfRElSRUNUX0NPTlRST0xfQklORElORyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ1M6Ci0gICAgICBzZWxmLT5jcyA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FCU09MVVRFOgotICAgICAgc2VsZi0+QUJJLmFiaS53YW50X2Fic29sdXRlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NTOgotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgc2VsZi0+Y3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FCU09MVVRFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNlbGYtPkFCSS5hYmkud2FudF9hYnNvbHV0ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3REaXJlY3RDb250cm9sQmluZGluZyAqc2VsZiA9IEdTVF9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HIChvYmplY3QpOwotCi0gIGlmIChzZWxmLT5jcykKLSAgICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopICYgc2VsZi0+Y3MsIE5VTEwpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcgKG9iamVjdCk7Ci0KLSAgaWYgKEdfSVNfVkFMVUUgKCZzZWxmLT5jdXJfdmFsdWUpKQotICAgIGdfdmFsdWVfdW5zZXQgKCZzZWxmLT5jdXJfdmFsdWUpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19zeW5jX3ZhbHVlcyAoR3N0Q29udHJvbEJpbmRpbmcgKiBfc2VsZiwKLSAgICBHc3RPYmplY3QgKiBvYmplY3QsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBsYXN0X3N5bmMpCi17Ci0gIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcgKF9zZWxmKTsKLSAgZ2RvdWJsZSBzcmNfdmFsOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HIChzZWxmKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoc2VsZiksIEZBTFNFKTsKLQotICBHU1RfTE9HX09CSkVDVCAob2JqZWN0LCAicHJvcGVydHkgJyVzJyBhdCB0cz0lIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBfc2VsZi0+bmFtZSwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgcmV0ID0gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoc2VsZi0+Y3MsIHRpbWVzdGFtcCwgJnNyY192YWwpOwotICBpZiAoR19MSUtFTFkgKHJldCkpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAob2JqZWN0LCAiICBuZXcgdmFsdWUgJWxmIiwgc3JjX3ZhbCk7Ci0gICAgLyogYWx3YXlzIHNldCB0aGUgdmFsdWUgZm9yIGZpcnN0IHRpbWUsIGJ1dCB0aGVuIG9ubHkgaWYgaXQgY2hhbmdlZAotICAgICAqIHRoaXMgc2hvdWxkIGxpbWl0IGdfb2JqZWN0X25vdGlmeSBpbnZvY2F0aW9ucy4KLSAgICAgKiBGSVhNRTogY2FuIHdlIGRldGVjdCBuZWdhdGl2ZSBwbGF5YmFjayByYXRlcz8KLSAgICAgKi8KLSAgICBpZiAoKHRpbWVzdGFtcCA8IGxhc3Rfc3luYykgfHwgKHNyY192YWwgIT0gc2VsZi0+bGFzdF92YWx1ZSkpIHsKLSAgICAgIEdWYWx1ZSAqZHN0X3ZhbCA9ICZzZWxmLT5jdXJfdmFsdWU7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChvYmplY3QsICIgIG1hcHBpbmcgJXMgdG8gdmFsdWUgb2YgdHlwZSAlcyIsIF9zZWxmLT5uYW1lLAotICAgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FIChkc3RfdmFsKSk7Ci0gICAgICAvKiBydW4gbWFwcGluZyBmdW5jdGlvbiB0byBjb252ZXJ0IGdkb3VibGUgdG8gR1ZhbHVlICovCi0gICAgICBzZWxmLT5jb252ZXJ0X2dfdmFsdWUgKHNlbGYsIHNyY192YWwsIGRzdF92YWwpOwotICAgICAgLyogd2UgY2FuIG1ha2UgdGhpcyBmYXN0ZXIKLSAgICAgICAqIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUzNjkzOQotICAgICAgICovCi0gICAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKChHT2JqZWN0ICopIG9iamVjdCwgX3NlbGYtPm5hbWUsIGRzdF92YWwpOwotICAgICAgc2VsZi0+bGFzdF92YWx1ZSA9IHNyY192YWw7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iamVjdCwgIm5vIGNvbnRyb2wgdmFsdWUgZm9yIHBhcmFtICVzIiwgX3NlbGYtPm5hbWUpOwotICB9Ci0gIHJldHVybiAocmV0KTsKLX0KLQotc3RhdGljIEdWYWx1ZSAqCi1nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWUgKEdzdENvbnRyb2xCaW5kaW5nICogX3NlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcgKnNlbGYgPSBHU1RfRElSRUNUX0NPTlRST0xfQklORElORyAoX3NlbGYpOwotICBHVmFsdWUgKmRzdF92YWwgPSBOVUxMOwotICBnZG91YmxlIHNyY192YWw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HIChzZWxmKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDIChzZWxmKSwgRkFMU0UpOwotCi0gIC8qIGdldCBjdXJyZW50IHZhbHVlIHZpYSBjb250cm9sIHNvdXJjZSAqLwotICBpZiAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoc2VsZi0+Y3MsIHRpbWVzdGFtcCwgJnNyY192YWwpKSB7Ci0gICAgZHN0X3ZhbCA9IGdfbmV3MCAoR1ZhbHVlLCAxKTsKLSAgICBnX3ZhbHVlX2luaXQgKGRzdF92YWwsIEdfUEFSQU1fU1BFQ19WQUxVRV9UWVBFIChfc2VsZi0+cHNwZWMpKTsKLSAgICBzZWxmLT5jb252ZXJ0X2dfdmFsdWUgKHNlbGYsIHNyY192YWwsIGRzdF92YWwpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0cgKCJubyBjb250cm9sIHZhbHVlIGZvciBwcm9wZXJ0eSAlcyBhdCB0cyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIF9zZWxmLT5uYW1lLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLSAgfQotCi0gIHJldHVybiBkc3RfdmFsOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZV9hcnJheSAoR3N0Q29udHJvbEJpbmRpbmcgKiBfc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLAotICAgIGdwb2ludGVyIHZhbHVlc18pCi17Ci0gIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcgKF9zZWxmKTsKLSAgZ2ludCBpOwotICBnZG91YmxlICpzcmNfdmFsOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDb252ZXJ0VmFsdWUgY29udmVydDsKLSAgZ2ludCBieXRlX3NpemU7Ci0gIGd1aW50OCAqdmFsdWVzID0gKGd1aW50OCAqKSB2YWx1ZXNfOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRElSRUNUX0NPTlRST0xfQklORElORyAoc2VsZiksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoaW50ZXJ2YWwpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZXMsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKHNlbGYpLCBGQUxTRSk7Ci0KLSAgY29udmVydCA9IHNlbGYtPmNvbnZlcnRfdmFsdWU7Ci0gIGJ5dGVfc2l6ZSA9IHNlbGYtPmJ5dGVfc2l6ZTsKLQotICBzcmNfdmFsID0gZ19uZXcwIChnZG91YmxlLCBuX3ZhbHVlcyk7Ci0gIGlmICgocmVzID0gZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoc2VsZi0+Y3MsIHRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgaW50ZXJ2YWwsIG5fdmFsdWVzLCBzcmNfdmFsKSkpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbl92YWx1ZXM7IGkrKykgewotICAgICAgLyogd2Ugd2lsbCBvbmx5IGdldCBOQU4gZm9yIHNwYXJzZSBjb250cm9sIHNvdXJjZXMsIHN1Y2ggYXMgdHJpZ2dlcnMgKi8KLSAgICAgIGlmICghaXNuYW4gKHNyY192YWxbaV0pKSB7Ci0gICAgICAgIGNvbnZlcnQgKHNlbGYsIHNyY192YWxbaV0sIChncG9pbnRlcikgdmFsdWVzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9MT0cgKCJubyBjb250cm9sIHZhbHVlIGZvciBwcm9wZXJ0eSAlcyBhdCBpbmRleCAlZCIsIF9zZWxmLT5uYW1lLAotICAgICAgICAgICAgaSk7Ci0gICAgICB9Ci0gICAgICB2YWx1ZXMgKz0gYnl0ZV9zaXplOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HICgiZmFpbGVkIHRvIGdldCBjb250cm9sIHZhbHVlIGZvciBwcm9wZXJ0eSAlcyBhdCB0cyAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIF9zZWxmLT5uYW1lLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLSAgfQotICBnX2ZyZWUgKHNyY192YWwpOwotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX2dldF9nX3ZhbHVlX2FycmF5IChHc3RDb250cm9sQmluZGluZyAqIF9zZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgR1ZhbHVlICogdmFsdWVzKQotewotICBHc3REaXJlY3RDb250cm9sQmluZGluZyAqc2VsZiA9IEdTVF9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HIChfc2VsZik7Ci0gIGdpbnQgaTsKLSAgZ2RvdWJsZSAqc3JjX3ZhbDsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdUeXBlIHR5cGU7Ci0gIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ29udmVydEdWYWx1ZSBjb252ZXJ0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfRElSRUNUX0NPTlRST0xfQklORElORyAoc2VsZiksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoaW50ZXJ2YWwpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YWx1ZXMsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKHNlbGYpLCBGQUxTRSk7Ci0KLSAgY29udmVydCA9IHNlbGYtPmNvbnZlcnRfZ192YWx1ZTsKLSAgdHlwZSA9IEdfUEFSQU1fU1BFQ19WQUxVRV9UWVBFIChfc2VsZi0+cHNwZWMpOwotCi0gIHNyY192YWwgPSBnX25ldzAgKGdkb3VibGUsIG5fdmFsdWVzKTsKLSAgaWYgKChyZXMgPSBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5IChzZWxmLT5jcywgdGltZXN0YW1wLAotICAgICAgICAgICAgICBpbnRlcnZhbCwgbl92YWx1ZXMsIHNyY192YWwpKSkgewotICAgIGZvciAoaSA9IDA7IGkgPCBuX3ZhbHVlczsgaSsrKSB7Ci0gICAgICAvKiB3ZSB3aWxsIG9ubHkgZ2V0IE5BTiBmb3Igc3BhcnNlIGNvbnRyb2wgc291cmNlcywgc3VjaCBhcyB0cmlnZ2VycyAqLwotICAgICAgaWYgKCFpc25hbiAoc3JjX3ZhbFtpXSkpIHsKLSAgICAgICAgZ192YWx1ZV9pbml0ICgmdmFsdWVzW2ldLCB0eXBlKTsKLSAgICAgICAgY29udmVydCAoc2VsZiwgc3JjX3ZhbFtpXSwgJnZhbHVlc1tpXSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfTE9HICgibm8gY29udHJvbCB2YWx1ZSBmb3IgcHJvcGVydHkgJXMgYXQgaW5kZXggJWQiLCBfc2VsZi0+bmFtZSwKLSAgICAgICAgICAgIGkpOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HICgiZmFpbGVkIHRvIGdldCBjb250cm9sIHZhbHVlIGZvciBwcm9wZXJ0eSAlcyBhdCB0cyAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIF9zZWxmLT5uYW1lLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLSAgfQotICBnX2ZyZWUgKHNyY192YWwpOwotICByZXR1cm4gcmVzOwotfQotCi0vKiBmdW5jdGlvbnMgKi8KLQotLyoqCi0gKiBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXc6Ci0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eQotICogQHByb3BlcnR5X25hbWU6IHRoZSBwcm9wZXJ0eS1uYW1lIHRvIGF0dGFjaCB0aGUgY29udHJvbCBzb3VyY2UKLSAqIEBjczogdGhlIGNvbnRyb2wgc291cmNlCi0gKgotICogQ3JlYXRlIGEgbmV3IGNvbnRyb2wtYmluZGluZyB0aGF0IGF0dGFjaGVzIHRoZSAjR3N0Q29udHJvbFNvdXJjZSB0byB0aGUKLSAqICNHT2JqZWN0IHByb3BlcnR5LiBJdCB3aWxsIG1hcCB0aGUgY29udHJvbCBzb3VyY2UgcmFuZ2UgWzAuMCAuLi4gMS4wXSB0bwotICogdGhlIGZ1bGwgdGFyZ2V0IHByb3BlcnR5IHJhbmdlLCBhbmQgY2xpcCBhbGwgdmFsdWVzIG91dHNpZGUgdGhpcyByYW5nZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZmxvYXRpbmcpOiB0aGUgbmV3ICNHc3REaXJlY3RDb250cm9sQmluZGluZwotICovCi1Hc3RDb250cm9sQmluZGluZyAqCi1nc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgIEdzdENvbnRyb2xTb3VyY2UgKiBjcykKLXsKLSAgcmV0dXJuIChHc3RDb250cm9sQmluZGluZyAqKSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcsCi0gICAgICAib2JqZWN0Iiwgb2JqZWN0LCAibmFtZSIsIHByb3BlcnR5X25hbWUsICJjb250cm9sLXNvdXJjZSIsIGNzLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXdfYWJzb2x1dGU6Ci0gKiBAb2JqZWN0OiB0aGUgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eQotICogQHByb3BlcnR5X25hbWU6IHRoZSBwcm9wZXJ0eS1uYW1lIHRvIGF0dGFjaCB0aGUgY29udHJvbCBzb3VyY2UKLSAqIEBjczogdGhlIGNvbnRyb2wgc291cmNlCi0gKgotICogQ3JlYXRlIGEgbmV3IGNvbnRyb2wtYmluZGluZyB0aGF0IGF0dGFjaGVzIHRoZSAjR3N0Q29udHJvbFNvdXJjZSB0byB0aGUKLSAqICNHT2JqZWN0IHByb3BlcnR5LiBJdCB3aWxsIGRpcmVjdGx5IG1hcCB0aGUgY29udHJvbCBzb3VyY2UgdmFsdWVzIHRvIHRoZQotICogdGFyZ2V0IHByb3BlcnR5IHJhbmdlIHdpdGhvdXQgYW55IHRyYW5zZm9ybWF0aW9ucy4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZmxvYXRpbmcpOiB0aGUgbmV3ICNHc3REaXJlY3RDb250cm9sQmluZGluZwotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0Q29udHJvbEJpbmRpbmcgKgotZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlIChHc3RPYmplY3QgKiBvYmplY3QsCi0gICAgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLCBHc3RDb250cm9sU291cmNlICogY3MpCi17Ci0gIHJldHVybiAoR3N0Q29udHJvbEJpbmRpbmcgKikgZ19vYmplY3RfbmV3IChHU1RfVFlQRV9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HLAotICAgICAgIm9iamVjdCIsIG9iamVjdCwgIm5hbWUiLCBwcm9wZXJ0eV9uYW1lLCAiY29udHJvbC1zb3VyY2UiLCBjcywgImFic29sdXRlIiwKLSAgICAgIFRSVUUsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzMyYWQ4Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3RkaXJlY3Rjb250cm9sYmluZGluZy5oOiBEaXJlY3QgYXR0YWNobWVudCBmb3IgY29udHJvbCBzb3VyY2VzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HX0hfXwotI2RlZmluZSBfX0dTVF9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3Rjb250cm9sc291cmNlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HIFwKLSAgKGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRElSRUNUX0NPTlRST0xfQklORElORyxHc3REaXJlY3RDb250cm9sQmluZGluZykpCi0jZGVmaW5lIEdTVF9ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcsR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRElSRUNUX0NPTlRST0xfQklORElORykpCi0jZGVmaW5lIEdTVF9JU19ESVJFQ1RfQ09OVFJPTF9CSU5ESU5HX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0RJUkVDVF9DT05UUk9MX0JJTkRJTkcpKQotI2RlZmluZSBHU1RfRElSRUNUX0NPTlRST0xfQklORElOR19HRVRfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQ09OVE9MX1NPVVJDRSwgR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3REaXJlY3RDb250cm9sQmluZGluZyBHc3REaXJlY3RDb250cm9sQmluZGluZzsKLXR5cGVkZWYgc3RydWN0IF9Hc3REaXJlY3RDb250cm9sQmluZGluZ0NsYXNzIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ2xhc3M7Ci0KLS8qKgotICogR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDb252ZXJ0VmFsdWU6Ci0gKiBAc2VsZjogdGhlICNHc3REaXJlY3RDb250cm9sQmluZGluZyBpbnN0YW5jZQotICogQHNyY192YWx1ZTogdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBjb3Rucm9sIHNvdXJjZQotICogQGRlc3RfdmFsdWU6IHRoZSB0YXJnZXQgbG9jYXRpb24KLSAqCi0gKiBGdW5jdGlvbiB0byBtYXAgYSBjb250cm9sLXZhbHVlIHRvIHRoZSB0YXJnZXQgcGxhaW4gZGF0YSB0eXBlLgotICovCi10eXBlZGVmIHZvaWQgKCogR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDb252ZXJ0VmFsdWUpIChHc3REaXJlY3RDb250cm9sQmluZGluZyAqc2VsZiwgZ2RvdWJsZSBzcmNfdmFsdWUsIGdwb2ludGVyIGRlc3RfdmFsdWUpOwotCi0vKioKLSAqIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ29udmVydEdWYWx1ZToKLSAqIEBzZWxmOiB0aGUgI0dzdERpcmVjdENvbnRyb2xCaW5kaW5nIGluc3RhbmNlCi0gKiBAc3JjX3ZhbHVlOiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGNvdG5yb2wgc291cmNlCi0gKiBAZGVzdF92YWx1ZTogdGhlIHRhcmdldCBHVmFsdWUKLSAqCi0gKiBGdW5jdGlvbiB0byBtYXAgYSBjb250cm9sLXZhbHVlIHRvIHRoZSB0YXJnZXQgR1ZhbHVlLgotICovCi10eXBlZGVmIHZvaWQgKCogR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDb252ZXJ0R1ZhbHVlKSAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcgKnNlbGYsIGdkb3VibGUgc3JjX3ZhbHVlLCBHVmFsdWUgKmRlc3RfdmFsdWUpOwotCi0vKioKLSAqIEdzdERpcmVjdENvbnRyb2xCaW5kaW5nOgotICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IG9mIHRoaXMgYmluZGluZwotICoKLSAqIFRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgI0dzdERpcmVjdENvbnRyb2xCaW5kaW5nLgotICovCi1zdHJ1Y3QgX0dzdERpcmVjdENvbnRyb2xCaW5kaW5nIHsKLSAgR3N0Q29udHJvbEJpbmRpbmcgcGFyZW50OwotICAKLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdENvbnRyb2xTb3VyY2UgKmNzOyAgICAvKiBHc3RDb250cm9sU291cmNlIGZvciB0aGlzIHByb3BlcnR5ICovCi0gIEdWYWx1ZSBjdXJfdmFsdWU7Ci0gIGdkb3VibGUgbGFzdF92YWx1ZTsKLSAgZ2ludCBieXRlX3NpemU7Ci0KLSAgR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDb252ZXJ0VmFsdWUgY29udmVydF92YWx1ZTsKLSAgR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDb252ZXJ0R1ZhbHVlIGNvbnZlcnRfZ192YWx1ZTsKLQotICB1bmlvbiB7Ci0gICAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci0gICAgc3RydWN0IHsKLSAgICAgIGdib29sZWFuIHdhbnRfYWJzb2x1dGU7Ci0gICAgfSBhYmk7Ci0gIH0gQUJJOwotfTsKLQotLyoqCi0gKiBHc3REaXJlY3RDb250cm9sQmluZGluZ0NsYXNzOgotICogQHBhcmVudF9jbGFzczogUGFyZW50IGNsYXNzCi0gKiBAY29udmVydDogQ2xhc3MgbWV0aG9kIHRvIGNvbnZlcnQgY29udHJvbC12YWx1ZXMKLSAqCi0gKiBUaGUgY2xhc3Mgc3RydWN0dXJlIG9mICNHc3REaXJlY3RDb250cm9sQmluZGluZy4KLSAqLwotCi1zdHJ1Y3QgX0dzdERpcmVjdENvbnRyb2xCaW5kaW5nQ2xhc3MKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmdDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotR1R5cGUgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfZ2V0X3R5cGUgKHZvaWQpOwotCi0vKiBGdW5jdGlvbnMgKi8KLQotR3N0Q29udHJvbEJpbmRpbmcgKiBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENvbnRyb2xTb3VyY2UgKiBjcyk7Ci0KLUdzdENvbnRyb2xCaW5kaW5nICogZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlIChHc3RPYmplY3QgKiBvYmplY3QsIGNvbnN0IGdjaGFyICogcHJvcGVydHlfbmFtZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q29udHJvbFNvdXJjZSAqIGNzKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3REaXJlY3RDb250cm9sQmluZGluZywgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRElSRUNUX0NPTlRST0xfQklORElOR19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYyBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzliYjllMy4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NTcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDkgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuYzogQ29udHJvbCBzb3VyY2UgdGhhdCBwcm92aWRlcyBzZXZlcmFsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uIG1ldGhvZHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZQotICoKLSAqICNHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSBpcyBhICNHc3RDb250cm9sU291cmNlLCB0aGF0IGludGVycG9sYXRlcyB2YWx1ZXMgYmV0d2VlbiB1c2VyLWdpdmVuCi0gKiBjb250cm9sIHBvaW50cy4gSXQgc3VwcG9ydHMgc2V2ZXJhbCBpbnRlcnBvbGF0aW9uIG1vZGVzIGFuZCBwcm9wZXJ0eSB0eXBlcy4KLSAqCi0gKiBUbyB1c2UgI0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIGdldCBhIG5ldyBpbnN0YW5jZSBieSBjYWxsaW5nCi0gKiBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcoKSwgYmluZCBpdCB0byBhICNHUGFyYW1TcGVjIGFuZCBzZXQgc29tZQotICogY29udHJvbCBwb2ludHMgYnkgY2FsbGluZyBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0KCkuCi0gKgotICogQWxsIGZ1bmN0aW9ucyBhcmUgTVQtc2FmZS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAiZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaCIKLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotI2luY2x1ZGUgImdzdC9tYXRoLWNvbXBhdC5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBjb250cm9sbGVyX2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi0vKiBoZWxwZXIgZnVuY3Rpb25zICovCi0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLV9nZXRfbmVhcmVzdF9jb250cm9sX3BvaW50cyAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0cywgR3N0Q29udHJvbFBvaW50ICoqIGNwMSwgR3N0Q29udHJvbFBvaW50ICoqIGNwMikKLXsKLSAgR1NlcXVlbmNlSXRlciAqaXRlcjsKLQotICBpdGVyID0gZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyIChzZWxmLCB0cyk7Ci0gIGlmIChpdGVyKSB7Ci0gICAgKmNwMSA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyKTsKLSAgICBpdGVyID0gZ19zZXF1ZW5jZV9pdGVyX25leHQgKGl0ZXIpOwotICAgIGlmIChpdGVyICYmICFnX3NlcXVlbmNlX2l0ZXJfaXNfZW5kIChpdGVyKSkgewotICAgICAgKmNwMiA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyKTsKLSAgICB9IGVsc2UgewotICAgICAgKmNwMiA9IE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1fZ2V0X25lYXJlc3RfY29udHJvbF9wb2ludHMyIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqIHNlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRzLCBHc3RDb250cm9sUG9pbnQgKiogY3AxLCBHc3RDb250cm9sUG9pbnQgKiogY3AyLAotICAgIEdzdENsb2NrVGltZSAqIG5leHRfdHMpCi17Ci0gIEdTZXF1ZW5jZUl0ZXIgKml0ZXIxLCAqaXRlcjIgPSBOVUxMOwotCi0gICpjcDEgPSAqY3AyID0gTlVMTDsKLSAgaXRlcjEgPSBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X2l0ZXIgKHNlbGYsIHRzKTsKLSAgaWYgKGl0ZXIxKSB7Ci0gICAgKmNwMSA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyMSk7Ci0gICAgaXRlcjIgPSBnX3NlcXVlbmNlX2l0ZXJfbmV4dCAoaXRlcjEpOwotICB9IGVsc2UgewotICAgIGlmIChHX0xJS0VMWSAoc2VsZi0+dmFsdWVzKSkgewotICAgICAgLyogYWxsIHZhbHVlcyBpbiB0aGUgY29udHJvbCBwb2ludCBsaXN0IGNvbWUgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVzdGFtcCAqLwotICAgICAgaXRlcjIgPSBnX3NlcXVlbmNlX2dldF9iZWdpbl9pdGVyIChzZWxmLT52YWx1ZXMpOwotICAgICAgLyogd2h5IHRoaXM/IGlmICFjcDEgd2UgZG9uJ3QgaW50ZXJwb2xhdGUgYW55d2F5Ci0gICAgICAgKiBpZiB3ZSBjYW4gZWxpbWluYXRlIHRoaXMsIHdlIGNhbiBhbHNvIHVzZSBfZ2V0X25lYXJlc3RfY29udHJvbF9wb2ludHMoKQotICAgICAgICogaGVyZSwgaXMgdGhpcyBqdXN0IHRvIHNldCBuZXh0X3RzPyAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBubyB2YWx1ZXMgKi8KLSAgICAgIGl0ZXIyID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICBpZiAoaXRlcjIgJiYgIWdfc2VxdWVuY2VfaXRlcl9pc19lbmQgKGl0ZXIyKSkgewotICAgICpjcDIgPSBnX3NlcXVlbmNlX2dldCAoaXRlcjIpOwotICAgICpuZXh0X3RzID0gKCpjcDIpLT50aW1lc3RhbXA7Ci0gIH0gZWxzZSB7Ci0gICAgKm5leHRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB9Ci19Ci0KLQotLyogIHN0ZXBzLWxpa2UgKG5vLSlpbnRlcnBvbGF0aW9uLCBkZWZhdWx0ICovCi0vKiAganVzdCByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIG1vc3QgcmVjZW50IGtleS1mcmFtZSAqLwotc3RhdGljIGlubGluZSBnZG91YmxlCi1faW50ZXJwb2xhdGVfbm9uZSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RDb250cm9sUG9pbnQgKiBjcCkKLXsKLSAgcmV0dXJuIGNwLT52YWx1ZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1pbnRlcnBvbGF0ZV9ub25lX2dldCAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAotICAgIGdkb3VibGUgKiB2YWx1ZSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdTZXF1ZW5jZUl0ZXIgKml0ZXI7Ci0gIEdzdENvbnRyb2xQb2ludCAqY3A7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgaXRlciA9Ci0gICAgICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X2l0ZXIgKHNlbGYsIHRpbWVzdGFtcCk7Ci0gIGlmIChpdGVyKSB7Ci0gICAgY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcik7Ci0gICAgKnZhbHVlID0gX2ludGVycG9sYXRlX25vbmUgKHNlbGYsIGNwKTsKLSAgICByZXQgPSBUUlVFOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaW50ZXJwb2xhdGVfbm9uZV9nZXRfdmFsdWVfYXJyYXkgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLAotICAgIGdkb3VibGUgKiB2YWx1ZXMpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBndWludCBpOwotICBHc3RDbG9ja1RpbWUgdHMgPSB0aW1lc3RhbXA7Ci0gIEdzdENsb2NrVGltZSBuZXh0X3RzID0gMDsKLSAgR3N0Q29udHJvbFBvaW50ICpjcDEgPSBOVUxMLCAqY3AyID0gTlVMTDsKLQotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbl92YWx1ZXM7IGkrKykgewotICAgIEdTVF9MT0cgKCJ2YWx1ZXNbJTNkXSA6IHRzPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCBuZXh0X3RzPSUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgaSwgR1NUX1RJTUVfQVJHUyAodHMpLCBHU1RfVElNRV9BUkdTIChuZXh0X3RzKSk7Ci0gICAgaWYgKHRzID49IG5leHRfdHMpIHsKLSAgICAgIF9nZXRfbmVhcmVzdF9jb250cm9sX3BvaW50czIgKHNlbGYsIHRzLCAmY3AxLCAmY3AyLCAmbmV4dF90cyk7Ci0gICAgfQotICAgIGlmIChjcDEpIHsKLSAgICAgICp2YWx1ZXMgPSBfaW50ZXJwb2xhdGVfbm9uZSAoc2VsZiwgY3AxKTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBHU1RfTE9HICgidmFsdWVzWyUzZF09JWxmIiwgaSwgKnZhbHVlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICp2YWx1ZXMgPSBOQU47Ci0gICAgICBHU1RfTE9HICgidmFsdWVzWyUzZF09LSIsIGkpOwotICAgIH0KLSAgICB0cyArPSBpbnRlcnZhbDsKLSAgICB2YWx1ZXMrKzsKLSAgfQotICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICByZXR1cm4gcmV0OwotfQotCi0KLQotLyogIGxpbmVhciBpbnRlcnBvbGF0aW9uICovCi0vKiAgc21vb3RoZXMgaW5iZXR3ZWVuIHZhbHVlcyAqLwotc3RhdGljIGlubGluZSBnZG91YmxlCi1faW50ZXJwb2xhdGVfbGluZWFyIChHc3RDbG9ja1RpbWUgdGltZXN0YW1wMSwgZ2RvdWJsZSB2YWx1ZTEsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDIsIGdkb3VibGUgdmFsdWUyLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcDIpKSB7Ci0gICAgZ2RvdWJsZSBzbG9wZTsKLQotICAgIHNsb3BlID0KLSAgICAgICAgKHZhbHVlMiAtIHZhbHVlMSkgLyBnc3RfZ3VpbnQ2NF90b19nZG91YmxlICh0aW1lc3RhbXAyIC0gdGltZXN0YW1wMSk7Ci0gICAgcmV0dXJuIHZhbHVlMSArIChnc3RfZ3VpbnQ2NF90b19nZG91YmxlICh0aW1lc3RhbXAgLSB0aW1lc3RhbXAxKSAqIHNsb3BlKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gdmFsdWUxOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaW50ZXJwb2xhdGVfbGluZWFyX2dldCAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGdkb3VibGUgKiB2YWx1ZSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdENvbnRyb2xQb2ludCAqY3AxLCAqY3AyOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotCi0gIGlmIChfZ2V0X25lYXJlc3RfY29udHJvbF9wb2ludHMgKHNlbGYsIHRpbWVzdGFtcCwgJmNwMSwgJmNwMikpIHsKLSAgICAqdmFsdWUgPSBfaW50ZXJwb2xhdGVfbGluZWFyIChjcDEtPnRpbWVzdGFtcCwgY3AxLT52YWx1ZSwKLSAgICAgICAgKGNwMiA/IGNwMi0+dGltZXN0YW1wIDogR1NUX0NMT0NLX1RJTUVfTk9ORSksCi0gICAgICAgIChjcDIgPyBjcDItPnZhbHVlIDogMC4wKSwgdGltZXN0YW1wKTsKLSAgICByZXQgPSBUUlVFOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaW50ZXJwb2xhdGVfbGluZWFyX2dldF92YWx1ZV9hcnJheSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgZ2RvdWJsZSAqIHZhbHVlcykKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGd1aW50IGk7Ci0gIEdzdENsb2NrVGltZSB0cyA9IHRpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lIG5leHRfdHMgPSAwOwotICBHc3RDb250cm9sUG9pbnQgKmNwMSA9IE5VTEwsICpjcDIgPSBOVUxMOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuX3ZhbHVlczsgaSsrKSB7Ci0gICAgR1NUX0xPRyAoInZhbHVlc1slM2RdIDogdHM9JSIgR1NUX1RJTUVfRk9STUFUICIsIG5leHRfdHM9JSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBpLCBHU1RfVElNRV9BUkdTICh0cyksIEdTVF9USU1FX0FSR1MgKG5leHRfdHMpKTsKLSAgICBpZiAodHMgPj0gbmV4dF90cykgewotICAgICAgX2dldF9uZWFyZXN0X2NvbnRyb2xfcG9pbnRzMiAoc2VsZiwgdHMsICZjcDEsICZjcDIsICZuZXh0X3RzKTsKLSAgICB9Ci0gICAgaWYgKGNwMSkgewotICAgICAgKnZhbHVlcyA9IF9pbnRlcnBvbGF0ZV9saW5lYXIgKGNwMS0+dGltZXN0YW1wLCBjcDEtPnZhbHVlLAotICAgICAgICAgIChjcDIgPyBjcDItPnRpbWVzdGFtcCA6IEdTVF9DTE9DS19USU1FX05PTkUpLAotICAgICAgICAgIChjcDIgPyBjcDItPnZhbHVlIDogMC4wKSwgdHMpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIEdTVF9MT0cgKCJ2YWx1ZXNbJTNkXT0lbGYiLCBpLCAqdmFsdWVzKTsKLSAgICB9IGVsc2UgewotICAgICAgKnZhbHVlcyA9IE5BTjsKLSAgICAgIEdTVF9MT0cgKCJ2YWx1ZXNbJTNkXT0tIiwgaSk7Ci0gICAgfQotICAgIHRzICs9IGludGVydmFsOwotICAgIHZhbHVlcysrOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLQotCi0vKiAgY3ViaWMgaW50ZXJwb2xhdGlvbiAqLwotCi0vKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpbXBsZW1lbnQgYSBuYXR1cmFsIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0b3IuCi0gKiBGb3IgZGV0YWlscyBsb29rIGF0IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BsaW5lX2ludGVycG9sYXRpb24KLSAqCi0gKiBJbnN0ZWFkIG9mIHVzaW5nIGEgcmVhbCBtYXRyaXggd2l0aCBuXjIgZWxlbWVudHMgZm9yIHRoZSBsaW5lYXIgc3lzdGVtCi0gKiBvZiBlcXVhdGlvbnMgd2UgdXNlIHRocmVlIGFycmF5cyBvLCBwLCBxIHRvIGhvbGQgdGhlIHRyaWRpYWdvbmFsIG1hdHJpeAotICogYXMgZm9sbG93aW5nIHRvIHNhdmUgbWVtb3J5OgotICoKLSAqIHBbMF0gcVswXSAgICAwICAgIDAgICAgMAotICogb1sxXSBwWzFdIHFbMV0gICAgMCAgICAwCi0gKiAgICAwIG9bMl0gcFsyXSBxWzJdICAgIC4KLSAqICAgIC4gICAgLiAgICAuICAgIC4gICAgLgotICovCi0KLXN0YXRpYyB2b2lkCi1faW50ZXJwb2xhdGVfY3ViaWNfdXBkYXRlX2NhY2hlIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqIHNlbGYpCi17Ci0gIGdpbnQgaSwgbiA9IHNlbGYtPm52YWx1ZXM7Ci0gIGdkb3VibGUgKm8gPSBnX25ldzAgKGdkb3VibGUsIG4pOwotICBnZG91YmxlICpwID0gZ19uZXcwIChnZG91YmxlLCBuKTsKLSAgZ2RvdWJsZSAqcSA9IGdfbmV3MCAoZ2RvdWJsZSwgbik7Ci0KLSAgZ2RvdWJsZSAqaCA9IGdfbmV3MCAoZ2RvdWJsZSwgbik7Ci0gIGdkb3VibGUgKmIgPSBnX25ldzAgKGdkb3VibGUsIG4pOwotICBnZG91YmxlICp6ID0gZ19uZXcwIChnZG91YmxlLCBuKTsKLQotICBHU2VxdWVuY2VJdGVyICppdGVyOwotICBHc3RDb250cm9sUG9pbnQgKmNwOwotICBHc3RDbG9ja1RpbWUgeCwgeF9uZXh0OwotICBnZG91YmxlIHlfcHJldiwgeSwgeV9uZXh0OwotCi0gIC8qIEZpbGwgbGluZWFyIHN5c3RlbSBvZiBlcXVhdGlvbnMgKi8KLSAgaXRlciA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnZhbHVlcyk7Ci0gIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOwotICB4ID0gY3AtPnRpbWVzdGFtcDsKLSAgeSA9IGNwLT52YWx1ZTsKLQotICBwWzBdID0gMS4wOwotCi0gIGl0ZXIgPSBnX3NlcXVlbmNlX2l0ZXJfbmV4dCAoaXRlcik7Ci0gIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOwotICB4X25leHQgPSBjcC0+dGltZXN0YW1wOwotICB5X25leHQgPSBjcC0+dmFsdWU7Ci0gIGhbMF0gPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlICh4X25leHQgLSB4KTsKLQotICBmb3IgKGkgPSAxOyBpIDwgbiAtIDE7IGkrKykgewotICAgIC8qIFNodWZmbGUgeCBhbmQgeSB2YWx1ZXMgKi8KLSAgICB5X3ByZXYgPSB5OwotICAgIHggPSB4X25leHQ7Ci0gICAgeSA9IHlfbmV4dDsKLSAgICBpdGVyID0gZ19zZXF1ZW5jZV9pdGVyX25leHQgKGl0ZXIpOwotICAgIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOwotICAgIHhfbmV4dCA9IGNwLT50aW1lc3RhbXA7Ci0gICAgeV9uZXh0ID0gY3AtPnZhbHVlOwotCi0gICAgaFtpXSA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHhfbmV4dCAtIHgpOwotICAgIG9baV0gPSBoW2kgLSAxXTsKLSAgICBwW2ldID0gMi4wICogKGhbaSAtIDFdICsgaFtpXSk7Ci0gICAgcVtpXSA9IGhbaV07Ci0gICAgYltpXSA9ICh5X25leHQgLSB5KSAvIGhbaV0gLSAoeSAtIHlfcHJldikgLyBoW2kgLSAxXTsKLSAgfQotICBwW24gLSAxXSA9IDEuMDsKLQotICAvKiBVc2UgR2F1c3MgZWxpbWluYXRpb24gdG8gc2V0IGV2ZXJ5dGhpbmcgYmVsb3cgdGhlIGRpYWdvbmFsIHRvIHplcm8gKi8KLSAgZm9yIChpID0gMTsgaSA8IG4gLSAxOyBpKyspIHsKLSAgICBnZG91YmxlIGEgPSBvW2ldIC8gcFtpIC0gMV07Ci0gICAgcFtpXSAtPSBhICogcVtpIC0gMV07Ci0gICAgYltpXSAtPSBhICogYltpIC0gMV07Ci0gIH0KLQotICAvKiBTb2x2ZSBldmVyeXRoaW5nIGVsc2UgZnJvbSBib3R0b20gdG8gdG9wICovCi0gIGZvciAoaSA9IG4gLSAyOyBpID4gMDsgaS0tKQotICAgIHpbaV0gPSAoYltpXSAtIHFbaV0gKiB6W2kgKyAxXSkgLyBwW2ldOwotCi0gIC8qIFNhdmUgY2FjaGUgbmV4dCBpbiB0aGUgR3N0Q29udHJvbFBvaW50ICovCi0KLSAgaXRlciA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnZhbHVlcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBjcCA9IGdfc2VxdWVuY2VfZ2V0IChpdGVyKTsKLSAgICBjcC0+Y2FjaGUuY3ViaWMuaCA9IGhbaV07Ci0gICAgY3AtPmNhY2hlLmN1YmljLnogPSB6W2ldOwotICAgIGl0ZXIgPSBnX3NlcXVlbmNlX2l0ZXJfbmV4dCAoaXRlcik7Ci0gIH0KLQotICAvKiBGcmVlIG91ciB0ZW1wb3JhcnkgYXJyYXlzICovCi0gIGdfZnJlZSAobyk7Ci0gIGdfZnJlZSAocCk7Ci0gIGdfZnJlZSAocSk7Ci0gIGdfZnJlZSAoaCk7Ci0gIGdfZnJlZSAoYik7Ci0gIGdfZnJlZSAoeik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotX2ludGVycG9sYXRlX2N1YmljIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqIHNlbGYsIEdzdENvbnRyb2xQb2ludCAqIGNwMSwKLSAgICBnZG91YmxlIHZhbHVlMSwgR3N0Q29udHJvbFBvaW50ICogY3AyLCBnZG91YmxlIHZhbHVlMiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBpZiAoIXNlbGYtPnZhbGlkX2NhY2hlKSB7Ci0gICAgX2ludGVycG9sYXRlX2N1YmljX3VwZGF0ZV9jYWNoZSAoc2VsZik7Ci0gICAgc2VsZi0+dmFsaWRfY2FjaGUgPSBUUlVFOwotICB9Ci0KLSAgaWYgKGNwMikgewotICAgIGdkb3VibGUgZGlmZjEsIGRpZmYyOwotICAgIGdkb3VibGUgb3V0OwotCi0gICAgZGlmZjEgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlICh0aW1lc3RhbXAgLSBjcDEtPnRpbWVzdGFtcCk7Ci0gICAgZGlmZjIgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChjcDItPnRpbWVzdGFtcCAtIHRpbWVzdGFtcCk7Ci0KLSAgICBvdXQgPQotICAgICAgICAoY3AyLT5jYWNoZS5jdWJpYy56ICogZGlmZjEgKiBkaWZmMSAqIGRpZmYxICsKLSAgICAgICAgY3AxLT5jYWNoZS5jdWJpYy56ICogZGlmZjIgKiBkaWZmMiAqIGRpZmYyKSAvIGNwMS0+Y2FjaGUuY3ViaWMuaDsKLSAgICBvdXQgKz0KLSAgICAgICAgKHZhbHVlMiAvIGNwMS0+Y2FjaGUuY3ViaWMuaCAtCi0gICAgICAgIGNwMS0+Y2FjaGUuY3ViaWMuaCAqIGNwMi0+Y2FjaGUuY3ViaWMueikgKiBkaWZmMTsKLSAgICBvdXQgKz0KLSAgICAgICAgKHZhbHVlMSAvIGNwMS0+Y2FjaGUuY3ViaWMuaCAtCi0gICAgICAgIGNwMS0+Y2FjaGUuY3ViaWMuaCAqIGNwMS0+Y2FjaGUuY3ViaWMueikgKiBkaWZmMjsKLSAgICByZXR1cm4gb3V0OwotICB9IGVsc2UgewotICAgIHJldHVybiB2YWx1ZTE7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1pbnRlcnBvbGF0ZV9jdWJpY19nZXQgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBnZG91YmxlICogdmFsdWUpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBHc3RDb250cm9sUG9pbnQgKmNwMSwgKmNwMiA9IE5VTEw7Ci0KLSAgaWYgKHNlbGYtPm52YWx1ZXMgPD0gMikKLSAgICByZXR1cm4gaW50ZXJwb2xhdGVfbGluZWFyX2dldCAoc2VsZiwgdGltZXN0YW1wLCB2YWx1ZSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgaWYgKF9nZXRfbmVhcmVzdF9jb250cm9sX3BvaW50cyAoc2VsZiwgdGltZXN0YW1wLCAmY3AxLCAmY3AyKSkgewotICAgICp2YWx1ZSA9IF9pbnRlcnBvbGF0ZV9jdWJpYyAoc2VsZiwgY3AxLCBjcDEtPnZhbHVlLCBjcDIsCi0gICAgICAgIChjcDIgPyBjcDItPnZhbHVlIDogMC4wKSwgdGltZXN0YW1wKTsKLSAgICByZXQgPSBUUlVFOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaW50ZXJwb2xhdGVfY3ViaWNfZ2V0X3ZhbHVlX2FycmF5IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqIHNlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywKLSAgICBnZG91YmxlICogdmFsdWVzKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgZ3VpbnQgaTsKLSAgR3N0Q2xvY2tUaW1lIHRzID0gdGltZXN0YW1wOwotICBHc3RDbG9ja1RpbWUgbmV4dF90cyA9IDA7Ci0gIEdzdENvbnRyb2xQb2ludCAqY3AxID0gTlVMTCwgKmNwMiA9IE5VTEw7Ci0KLSAgaWYgKHNlbGYtPm52YWx1ZXMgPD0gMikKLSAgICByZXR1cm4gaW50ZXJwb2xhdGVfbGluZWFyX2dldF92YWx1ZV9hcnJheSAoc2VsZiwgdGltZXN0YW1wLCBpbnRlcnZhbCwKLSAgICAgICAgbl92YWx1ZXMsIHZhbHVlcyk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5fdmFsdWVzOyBpKyspIHsKLSAgICBHU1RfTE9HICgidmFsdWVzWyUzZF0gOiB0cz0lIiBHU1RfVElNRV9GT1JNQVQgIiwgbmV4dF90cz0lIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIGksIEdTVF9USU1FX0FSR1MgKHRzKSwgR1NUX1RJTUVfQVJHUyAobmV4dF90cykpOwotICAgIGlmICh0cyA+PSBuZXh0X3RzKSB7Ci0gICAgICBfZ2V0X25lYXJlc3RfY29udHJvbF9wb2ludHMyIChzZWxmLCB0cywgJmNwMSwgJmNwMiwgJm5leHRfdHMpOwotICAgIH0KLSAgICBpZiAoY3AxKSB7Ci0gICAgICAqdmFsdWVzID0gX2ludGVycG9sYXRlX2N1YmljIChzZWxmLCBjcDEsIGNwMS0+dmFsdWUsIGNwMiwKLSAgICAgICAgICAoY3AyID8gY3AyLT52YWx1ZSA6IDAuMCksIHRzKTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBHU1RfTE9HICgidmFsdWVzWyUzZF09JWxmIiwgaSwgKnZhbHVlcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICp2YWx1ZXMgPSBOQU47Ci0gICAgICBHU1RfTE9HICgidmFsdWVzWyUzZF09LSIsIGkpOwotICAgIH0KLSAgICB0cyArPSBpbnRlcnZhbDsKLSAgICB2YWx1ZXMrKzsKLSAgfQotICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICByZXR1cm4gcmV0OwotfQotCi0KLS8qICBtb25vdG9uaWMgY3ViaWMgaW50ZXJwb2xhdGlvbiAqLwotCi0vKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpbXBsZW1lbnQgbW9ub3RvbmljIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uLgotICogRm9yIGRldGFpbHM6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTW9ub3RvbmVfY3ViaWNfaW50ZXJwb2xhdGlvbgotICoKLSAqIEluIGNvbnRyYXN0IHRvIHRoZSBwcmV2aW91cyBjdWJpYyBtb2RlLCB0aGUgdmFsdWVzIHdvbid0IG92ZXJzaG9vdC4KLSAqLwotCi1zdGF0aWMgdm9pZAotX2ludGVycG9sYXRlX2N1YmljX21vbm90b25pY191cGRhdGVfY2FjaGUgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZikKLXsKLSAgZ2ludCBpLCBuID0gc2VsZi0+bnZhbHVlczsKLSAgZ2RvdWJsZSAqZHhzID0gZ19uZXcwIChnZG91YmxlLCBuKTsKLSAgZ2RvdWJsZSAqZHlzID0gZ19uZXcwIChnZG91YmxlLCBuKTsKLSAgZ2RvdWJsZSAqbXMgPSBnX25ldzAgKGdkb3VibGUsIG4pOwotICBnZG91YmxlICpjMXMgPSBnX25ldzAgKGdkb3VibGUsIG4pOwotCi0gIEdTZXF1ZW5jZUl0ZXIgKml0ZXI7Ci0gIEdzdENvbnRyb2xQb2ludCAqY3A7Ci0gIEdzdENsb2NrVGltZSB4LCB4X25leHQsIGR4OwotICBnZG91YmxlIHksIHlfbmV4dCwgZHk7Ci0KLSAgLyogR2V0IGNvbnNlY3V0aXZlIGRpZmZlcmVuY2VzIGFuZCBzbG9wZXMgKi8KLSAgaXRlciA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnZhbHVlcyk7Ci0gIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOwotICB4X25leHQgPSBjcC0+dGltZXN0YW1wOwotICB5X25leHQgPSBjcC0+dmFsdWU7Ci0gIGZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7Ci0gICAgeCA9IHhfbmV4dDsKLSAgICB5ID0geV9uZXh0OwotICAgIGl0ZXIgPSBnX3NlcXVlbmNlX2l0ZXJfbmV4dCAoaXRlcik7Ci0gICAgY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcik7Ci0gICAgeF9uZXh0ID0gY3AtPnRpbWVzdGFtcDsKLSAgICB5X25leHQgPSBjcC0+dmFsdWU7Ci0KLSAgICBkeCA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHhfbmV4dCAtIHgpOwotICAgIGR5ID0geV9uZXh0IC0geTsKLSAgICBkeHNbaV0gPSBkeDsKLSAgICBkeXNbaV0gPSBkeTsKLSAgICBtc1tpXSA9IGR5IC8gZHg7Ci0gIH0KLQotICAvKiBHZXQgZGVncmVlLTEgY29lZmZpY2llbnRzICovCi0gIGMxc1swXSA9IG1zWzBdOwotICBmb3IgKGkgPSAxOyBpIDwgbjsgaSsrKSB7Ci0gICAgZ2RvdWJsZSBtID0gbXNbaSAtIDFdOwotICAgIGdkb3VibGUgbV9uZXh0ID0gbXNbaV07Ci0KLSAgICBpZiAobSAqIG1fbmV4dCA8PSAwKSB7Ci0gICAgICBjMXNbaV0gPSAwLjA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdkb3VibGUgZHhfbmV4dCwgZHhfc3VtOwotCi0gICAgICBkeCA9IGR4c1tpXSwgZHhfbmV4dCA9IGR4c1tpICsgMV0sIGR4X3N1bSA9IGR4ICsgZHhfbmV4dDsKLSAgICAgIGMxc1tpXSA9IDMuMCAqIGR4X3N1bSAvICgoZHhfc3VtICsgZHhfbmV4dCkgLyBtICsgKGR4X3N1bSArIGR4KSAvIG1fbmV4dCk7Ci0gICAgfQotICB9Ci0gIGMxc1tuIC0gMV0gPSBtc1tuIC0gMV07Ci0KLSAgLyogR2V0IGRlZ3JlZS0yIGFuZCBkZWdyZWUtMyBjb2VmZmljaWVudHMgKi8KLSAgaXRlciA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnZhbHVlcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7Ci0gICAgZ2RvdWJsZSBjMSwgbSwgaW52X2R4LCBjb21tb247Ci0gICAgY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcik7Ci0KLSAgICBjMSA9IGMxc1tpXTsKLSAgICBtID0gbXNbaV07Ci0gICAgaW52X2R4ID0gMS4wIC8gZHhzW2ldOwotICAgIGNvbW1vbiA9IGMxICsgYzFzW2kgKyAxXSAtIG0gLSBtOwotCi0gICAgY3AtPmNhY2hlLmN1YmljX21vbm90b25pYy5jMXMgPSBjMTsKLSAgICBjcC0+Y2FjaGUuY3ViaWNfbW9ub3RvbmljLmMycyA9IChtIC0gYzEgLSBjb21tb24pICogaW52X2R4OwotICAgIGNwLT5jYWNoZS5jdWJpY19tb25vdG9uaWMuYzNzID0gY29tbW9uICogaW52X2R4ICogaW52X2R4OwotCi0gICAgaXRlciA9IGdfc2VxdWVuY2VfaXRlcl9uZXh0IChpdGVyKTsKLSAgfQotCi0gIC8qIEZyZWUgb3VyIHRlbXBvcmFyeSBhcnJheXMgKi8KLSAgZ19mcmVlIChkeHMpOwotICBnX2ZyZWUgKGR5cyk7Ci0gIGdfZnJlZSAobXMpOwotICBnX2ZyZWUgKGMxcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotX2ludGVycG9sYXRlX2N1YmljX21vbm90b25pYyAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENvbnRyb2xQb2ludCAqIGNwMSwgZ2RvdWJsZSB2YWx1ZTEsIEdzdENvbnRyb2xQb2ludCAqIGNwMiwKLSAgICBnZG91YmxlIHZhbHVlMiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgaWYgKCFzZWxmLT52YWxpZF9jYWNoZSkgewotICAgIF9pbnRlcnBvbGF0ZV9jdWJpY19tb25vdG9uaWNfdXBkYXRlX2NhY2hlIChzZWxmKTsKLSAgICBzZWxmLT52YWxpZF9jYWNoZSA9IFRSVUU7Ci0gIH0KLQotICBpZiAoY3AyKSB7Ci0gICAgZ2RvdWJsZSBkaWZmID0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAodGltZXN0YW1wIC0gY3AxLT50aW1lc3RhbXApOwotICAgIGdkb3VibGUgZGlmZjIgPSBkaWZmICogZGlmZjsKLSAgICBnZG91YmxlIG91dDsKLQotICAgIG91dCA9IHZhbHVlMSArIGNwMS0+Y2FjaGUuY3ViaWNfbW9ub3RvbmljLmMxcyAqIGRpZmY7Ci0gICAgb3V0ICs9IGNwMS0+Y2FjaGUuY3ViaWNfbW9ub3RvbmljLmMycyAqIGRpZmYyOwotICAgIG91dCArPSBjcDEtPmNhY2hlLmN1YmljX21vbm90b25pYy5jM3MgKiBkaWZmICogZGlmZjI7Ci0gICAgcmV0dXJuIG91dDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gdmFsdWUxOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaW50ZXJwb2xhdGVfY3ViaWNfbW9ub3RvbmljX2dldCAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGdkb3VibGUgKiB2YWx1ZSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdENvbnRyb2xQb2ludCAqY3AxLCAqY3AyID0gTlVMTDsKLQotICBpZiAoc2VsZi0+bnZhbHVlcyA8PSAyKQotICAgIHJldHVybiBpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0IChzZWxmLCB0aW1lc3RhbXAsIHZhbHVlKTsKLQotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBpZiAoX2dldF9uZWFyZXN0X2NvbnRyb2xfcG9pbnRzIChzZWxmLCB0aW1lc3RhbXAsICZjcDEsICZjcDIpKSB7Ci0gICAgKnZhbHVlID0gX2ludGVycG9sYXRlX2N1YmljX21vbm90b25pYyAoc2VsZiwgY3AxLCBjcDEtPnZhbHVlLCBjcDIsCi0gICAgICAgIChjcDIgPyBjcDItPnZhbHVlIDogMC4wKSwgdGltZXN0YW1wKTsKLSAgICByZXQgPSBUUlVFOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaW50ZXJwb2xhdGVfY3ViaWNfbW9ub3RvbmljX2dldF92YWx1ZV9hcnJheSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgZ2RvdWJsZSAqIHZhbHVlcykKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGd1aW50IGk7Ci0gIEdzdENsb2NrVGltZSB0cyA9IHRpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lIG5leHRfdHMgPSAwOwotICBHc3RDb250cm9sUG9pbnQgKmNwMSA9IE5VTEwsICpjcDIgPSBOVUxMOwotCi0gIGlmIChzZWxmLT5udmFsdWVzIDw9IDIpCi0gICAgcmV0dXJuIGludGVycG9sYXRlX2xpbmVhcl9nZXRfdmFsdWVfYXJyYXkgKHNlbGYsIHRpbWVzdGFtcCwgaW50ZXJ2YWwsCi0gICAgICAgIG5fdmFsdWVzLCB2YWx1ZXMpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuX3ZhbHVlczsgaSsrKSB7Ci0gICAgR1NUX0xPRyAoInZhbHVlc1slM2RdIDogdHM9JSIgR1NUX1RJTUVfRk9STUFUICIsIG5leHRfdHM9JSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBpLCBHU1RfVElNRV9BUkdTICh0cyksIEdTVF9USU1FX0FSR1MgKG5leHRfdHMpKTsKLSAgICBpZiAodHMgPj0gbmV4dF90cykgewotICAgICAgX2dldF9uZWFyZXN0X2NvbnRyb2xfcG9pbnRzMiAoc2VsZiwgdHMsICZjcDEsICZjcDIsICZuZXh0X3RzKTsKLSAgICB9Ci0gICAgaWYgKGNwMSkgewotICAgICAgKnZhbHVlcyA9IF9pbnRlcnBvbGF0ZV9jdWJpY19tb25vdG9uaWMgKHNlbGYsIGNwMSwgY3AxLT52YWx1ZSwgY3AyLAotICAgICAgICAgIChjcDIgPyBjcDItPnZhbHVlIDogMC4wKSwgdHMpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIEdTVF9MT0cgKCJ2YWx1ZXNbJTNkXT0lbGYiLCBpLCAqdmFsdWVzKTsKLSAgICB9IGVsc2UgewotICAgICAgKnZhbHVlcyA9IE5BTjsKLSAgICAgIEdTVF9MT0cgKCJ2YWx1ZXNbJTNkXT0tIiwgaSk7Ci0gICAgfQotICAgIHRzICs9IGludGVydmFsOwotICAgIHZhbHVlcysrOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIHN0cnVjdAotewotICBHc3RDb250cm9sU291cmNlR2V0VmFsdWUgZ2V0OwotICBHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSBnZXRfdmFsdWVfYXJyYXk7Ci19IGludGVycG9sYXRpb25fbW9kZXNbXSA9IHsKLSAgewotICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9ub25lX2dldCwKLSAgICAgICAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9ub25lX2dldF92YWx1ZV9hcnJheX0sIHsKLSAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgaW50ZXJwb2xhdGVfbGluZWFyX2dldCwKLSAgICAgICAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSBpbnRlcnBvbGF0ZV9saW5lYXJfZ2V0X3ZhbHVlX2FycmF5fSwgewotICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV9jdWJpY19nZXQsCi0gICAgICAgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgaW50ZXJwb2xhdGVfY3ViaWNfZ2V0X3ZhbHVlX2FycmF5fSwgewotICAgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIGludGVycG9sYXRlX2N1YmljX21vbm90b25pY19nZXQsCi0gICAgICAgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkKLWludGVycG9sYXRlX2N1YmljX21vbm90b25pY19nZXRfdmFsdWVfYXJyYXl9fTsKLQotc3RhdGljIGNvbnN0IGd1aW50IG51bV9pbnRlcnBvbGF0aW9uX21vZGVzID0gR19OX0VMRU1FTlRTIChpbnRlcnBvbGF0aW9uX21vZGVzKTsKLQotZW51bQotewotICBQUk9QX01PREUgPSAxCi19OwotCi1HVHlwZQotZ3N0X2ludGVycG9sYXRpb25fbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGd0eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0dTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORSwgIkdTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORSIsICJub25lIn0sCi0gICAge0dTVF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSLCAiR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIiLCAibGluZWFyIn0sCi0gICAge0dTVF9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUMsICJHU1RfSU5URVJQT0xBVElPTl9NT0RFX0NVQklDIiwgImN1YmljIn0sCi0gICAge0dTVF9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUNfTU9OT1RPTklDLAotICAgICAgICAiR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQ19NT05PVE9OSUMiLCAiY3ViaWMtbW9ub3RvbmljIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmZ3R5cGUpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEludGVycG9sYXRpb25Nb2RlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmd0eXBlLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgZ3R5cGU7Ci19Ci0KLQotI2RlZmluZSBfZG9faW5pdCBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChHU1RfQ0FUX0RFRkFVTFQsICJpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlIiwgMCwgXAotICAgICJ0aW1lbGluZSB2YWx1ZSBpbnRlcnBvbGF0aW5nIGNvbnRyb2wgc291cmNlIikKLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLAotICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlLCBHU1RfVFlQRV9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRSwKLSAgICBfZG9faW5pdCk7Ci0KLXN0cnVjdCBfR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VQcml2YXRlCi17Ci0gIEdzdEludGVycG9sYXRpb25Nb2RlIGludGVycG9sYXRpb25fbW9kZTsKLX07Ci0KLS8qKgotICogZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3OgotICoKLSAqIFRoaXMgcmV0dXJucyBhIG5ldywgdW5ib3VuZCAjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldywgdW5ib3VuZCAjR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UuCi0gKi8KLUdzdENvbnRyb2xTb3VyY2UgKgotZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICh2b2lkKQotewotICByZXR1cm4gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRSwgMCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotICAgIGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX3NldF9pbnRlcnBvbGF0aW9uX21vZGUKLSAgICAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RJbnRlcnBvbGF0aW9uTW9kZSBtb2RlKQotewotICBHc3RDb250cm9sU291cmNlICpjc291cmNlID0gR1NUX0NPTlRST0xfU09VUkNFIChzZWxmKTsKLQotICBpZiAobW9kZSA+PSBudW1faW50ZXJwb2xhdGlvbl9tb2RlcyB8fCAoaW50KSBtb2RlIDwgMCkgewotICAgIEdTVF9XQVJOSU5HICgiaW50ZXJwb2xhdGlvbiBtb2RlICVkIGludmFsaWQgb3Igbm90IGltcGxlbWVudGVkIHlldCIsIG1vZGUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIEdTVF9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRV9MT0NLIChzZWxmKTsKLSAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gaW50ZXJwb2xhdGlvbl9tb2Rlc1ttb2RlXS5nZXQ7Ci0gIGNzb3VyY2UtPmdldF92YWx1ZV9hcnJheSA9IGludGVycG9sYXRpb25fbW9kZXNbbW9kZV0uZ2V0X3ZhbHVlX2FycmF5OwotCi0gIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX2ludmFsaWRhdGVfY2FjaGUgKChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKQotICAgICAgY3NvdXJjZSk7Ci0gIHNlbGYtPnByaXYtPmludGVycG9sYXRpb25fbW9kZSA9IG1vZGU7Ci0KLSAgR1NUX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFX1VOTE9DSyAoc2VsZik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9pbml0IChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqIHNlbGYpCi17Ci0gIHNlbGYtPnByaXYgPQotICAgICAgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChzZWxmLCBHU1RfVFlQRV9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFLAotICAgICAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VQcml2YXRlKTsKLSAgZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X2ludGVycG9sYXRpb25fbW9kZSAoc2VsZiwKLSAgICAgIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgKnNlbGYgPQotICAgICAgR1NUX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJwb2xhdGlvbl9tb2RlIChzZWxmLAotICAgICAgICAgIChHc3RJbnRlcnBvbGF0aW9uTW9kZSkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSAqc2VsZiA9Ci0gICAgICBHU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzZWxmLT5wcml2LT5pbnRlcnBvbGF0aW9uX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfY2xhc3NfaW5pdCAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzcwotICAgICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIC8vR3N0Q29udHJvbFNvdXJjZUNsYXNzICpjc291cmNlX2NsYXNzID0gR1NUX0NPTlRST0xfU09VUkNFX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywKLSAgICAgIHNpemVvZiAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VQcml2YXRlKSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2Vfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJtb2RlIiwgIk1vZGUiLCAiSW50ZXJwb2xhdGlvbiBtb2RlIiwKLSAgICAgICAgICBHU1RfVFlQRV9JTlRFUlBPTEFUSU9OX01PREUsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaCBiL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhNGQ4NS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBnc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oOiBDb250cm9sIHNvdXJjZSB0aGF0IHByb3ZpZGVzIHNldmVyYWwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gbWV0aG9kcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRV9IX18KLSNkZWZpbmUgX19HU1RfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRV9IX18KLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UgXAotICAoZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFLCBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSkpCi0jZGVmaW5lIEdTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX0NMQVNTKHZ0YWJsZSkgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKCh2dGFibGUpLCBHU1RfVFlQRV9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFLCBHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UpKQotI2RlZmluZSBHU1RfSVNfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRV9DTEFTUyh2dGFibGUpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgodnRhYmxlKSwgR1NUX1RZUEVfSU5URVJQT0xBVElPTl9DT05UUk9MX1NPVVJDRSkpCi0jZGVmaW5lIEdTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX0dFVF9DTEFTUyhpbnN0KSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgoaW5zdCksIEdTVF9UWVBFX0lOVEVSUE9MQVRJT05fQ09OVFJPTF9TT1VSQ0UsIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MpKQotCi0jZGVmaW5lIEdTVF9UWVBFX0lOVEVSUE9MQVRJT05fTU9ERSAoZ3N0X2ludGVycG9sYXRpb25fbW9kZV9nZXRfdHlwZSAoKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZVByaXZhdGUgR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VQcml2YXRlOwotCi0vKioKLSAqIEdzdEludGVycG9sYXRpb25Nb2RlOgotICogQEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORTogc3RlcHMtbGlrZSBpbnRlcnBvbGF0aW9uLCBkZWZhdWx0Ci0gKiBAR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI6IGxpbmVhciBpbnRlcnBvbGF0aW9uCi0gKiBAR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzogY3ViaWMgaW50ZXJwb2xhdGlvbiAobmF0dXJhbCksIG1heSBvdmVyc2hvb3QKLSAqICAgdGhlIG1pbiBvciBtYXggdmFsdWVzIHNldCBieSB0aGUgY29udHJvbCBwb2ludCwgYnV0IGlzIG1vcmUgJ2N1cnZ5JwotICogQEdTVF9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUNfTU9OT1RPTklDOiBtb25vdG9uaWMgY3ViaWMgaW50ZXJwb2xhdGlvbiwgd2lsbCBub3QKLSAqICAgcHJvZHVjZSBhbnkgdmFsdWVzIG91dHNpZGUgb2YgdGhlIG1pbi1tYXggcmFuZ2Ugc2V0IGJ5IHRoZSBjb250cm9sIHBvaW50cwotICogICAoU2luY2UgMS44KQotICoKLSAqIFRoZSB2YXJpb3VzIGludGVycG9sYXRpb24gbW9kZXMgYXZhaWxhYmxlLgotICovCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9OT05FLAotICBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwKLSAgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQywKLSAgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQ19NT05PVE9OSUMsCi19IEdzdEludGVycG9sYXRpb25Nb2RlOwotCi0vKioKLSAqIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlOgotICoKLSAqIFRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgI0dzdENvbnRyb2xTb3VyY2UuCi0gKi8KLXN0cnVjdCBfR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgewotICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSBwYXJlbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlUHJpdmF0ZSAqcHJpdjsKLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MgewotICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3RfaW50ZXJwb2xhdGlvbl9tb2RlX2dldF90eXBlICh2b2lkKTsKLQotLyogRnVuY3Rpb25zICovCi0KLUdzdENvbnRyb2xTb3VyY2UgKiBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKHZvaWQpOwotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9JTlRFUlBPTEFUSU9OX0NPTlRST0xfU09VUkNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmMgYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY3YTQzOS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDYxNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBnc3RsZm9jb250cm9sc291cmNlLmM6IENvbnRyb2wgc291cmNlIHRoYXQgcHJvdmlkZXMgc29tZSBwZXJpb2RpYyB3YXZlZm9ybXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgYXMgY29udHJvbCB2YWx1ZXMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGxmb2NvbnRyb2xzb3VyY2UKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTEZPIGNvbnRyb2wgc291cmNlCi0gKgotICogI0dzdExGT0NvbnRyb2xTb3VyY2UgaXMgYSAjR3N0Q29udHJvbFNvdXJjZSwgdGhhdCBwcm92aWRlcyBzZXZlcmFsIHBlcmlvZGljCi0gKiB3YXZlZm9ybXMgYXMgY29udHJvbCB2YWx1ZXMuCi0gKgotICogVG8gdXNlICNHc3RMRk9Db250cm9sU291cmNlIGdldCBhIG5ldyBpbnN0YW5jZSBieSBjYWxsaW5nCi0gKiBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldygpLCBiaW5kIGl0IHRvIGEgI0dQYXJhbVNwZWMgYW5kIHNldCB0aGUgcmVsZXZhbnQKLSAqIHByb3BlcnRpZXMuCi0gKgotICogQWxsIGZ1bmN0aW9ucyBhcmUgTVQtc2FmZS4KLSAqLwotCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3Rjb250cm9sc291cmNlLmg+Ci0KLSNpbmNsdWRlICJnc3RsZm9jb250cm9sc291cmNlLmgiCi0KLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8Z3N0L21hdGgtY29tcGF0Lmg+Ci0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGNvbnRyb2xsZXJfZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7Ci0KLXN0cnVjdCBfR3N0TEZPQ29udHJvbFNvdXJjZVByaXZhdGUKLXsKLSAgR3N0TEZPV2F2ZWZvcm0gd2F2ZWZvcm07Ci0gIGdkb3VibGUgZnJlcXVlbmN5OwotICBHc3RDbG9ja1RpbWUgcGVyaW9kOwotICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0OwotICBnZG91YmxlIGFtcGxpdHVkZTsKLSAgZ2RvdWJsZSBvZmZzZXQ7Ci19OwotCi0vKiBGSVhNRTogYXMgJSBpbiBDIGlzIG5vdCB0aGUgbW9kdWxvIG9wZXJhdG9yIHdlIG5lZWQgaGVyZSBmb3IKLSAqIG5lZ2F0aXZlIG51bWJlcnMgaW1wbGVtZW50IG91ciBvd24uIEFyZSB0aGVyZSBiZXR0ZXIgd2F5cz8gKi8KLXN0YXRpYyBpbmxpbmUgR3N0Q2xvY2tUaW1lCi1fY2FsY3VsYXRlX3BvcyAoR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIHRpbWVzaGlmdCwKLSAgICBHc3RDbG9ja1RpbWUgcGVyaW9kKQotewotICB3aGlsZSAodGltZXN0YW1wIDwgdGltZXNoaWZ0KQotICAgIHRpbWVzdGFtcCArPSBwZXJpb2Q7Ci0KLSAgdGltZXN0YW1wIC09IHRpbWVzaGlmdDsKLQotICByZXR1cm4gdGltZXN0YW1wICUgcGVyaW9kOwotfQotCi1zdGF0aWMgaW5saW5lIGdkb3VibGUKLV9zaW5lX2dldCAoR3N0TEZPQ29udHJvbFNvdXJjZSAqIHNlbGYsIGdkb3VibGUgYW1wLCBnZG91YmxlIG9mZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBHc3RDbG9ja1RpbWUgcGVyaW9kLCBnZG91YmxlIGZyZXF1ZW5jeSwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBnZG91YmxlIHBvcyA9Ci0gICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChfY2FsY3VsYXRlX3BvcyAodGltZXN0YW1wLCB0aW1lc2hpZnQsIHBlcmlvZCkpOwotICBnZG91YmxlIHJldDsKLQotICByZXQgPSBzaW4gKDIuMCAqIE1fUEkgKiAoZnJlcXVlbmN5IC8gR1NUX1NFQ09ORCkgKiBwb3MpOwotICByZXQgKj0gYW1wOwotICByZXQgKz0gb2ZmOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2F2ZWZvcm1fc2luZV9nZXQgKEdzdExGT0NvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAotICAgIGdkb3VibGUgKiB2YWx1ZSkKLXsKLSAgR3N0TEZPQ29udHJvbFNvdXJjZVByaXZhdGUgKnByaXYgPSBzZWxmLT5wcml2OwotCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKHNlbGYpLCB0aW1lc3RhbXApOwotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgKnZhbHVlID0gX3NpbmVfZ2V0IChzZWxmLCBwcml2LT5hbXBsaXR1ZGUsIHByaXYtPm9mZnNldCwgcHJpdi0+dGltZXNoaWZ0LAotICAgICAgcHJpdi0+cGVyaW9kLCBwcml2LT5mcmVxdWVuY3ksIHRpbWVzdGFtcCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdhdmVmb3JtX3NpbmVfZ2V0X3ZhbHVlX2FycmF5IChHc3RMRk9Db250cm9sU291cmNlICogc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLAotICAgIGdkb3VibGUgKiB2YWx1ZXMpCi17Ci0gIEdzdExGT0NvbnRyb2xTb3VyY2VQcml2YXRlICpwcml2ID0gc2VsZi0+cHJpdjsKLSAgZ3VpbnQgaTsKLSAgR3N0Q2xvY2tUaW1lIHRzID0gdGltZXN0YW1wOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuX3ZhbHVlczsgaSsrKSB7Ci0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoc2VsZiksIHRzKTsKLSAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAqdmFsdWVzID0gX3NpbmVfZ2V0IChzZWxmLCBwcml2LT5hbXBsaXR1ZGUsIHByaXYtPm9mZnNldCwgcHJpdi0+dGltZXNoaWZ0LAotICAgICAgICBwcml2LT5wZXJpb2QsIHByaXYtPmZyZXF1ZW5jeSwgdHMpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgdHMgKz0gaW50ZXJ2YWw7Ci0gICAgdmFsdWVzKys7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotc3RhdGljIGlubGluZSBnZG91YmxlCi1fc3F1YXJlX2dldCAoR3N0TEZPQ29udHJvbFNvdXJjZSAqIHNlbGYsIGdkb3VibGUgYW1wLCBnZG91YmxlIG9mZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBHc3RDbG9ja1RpbWUgcGVyaW9kLCBnZG91YmxlIGZyZXF1ZW5jeSwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBHc3RDbG9ja1RpbWUgcG9zID0gX2NhbGN1bGF0ZV9wb3MgKHRpbWVzdGFtcCwgdGltZXNoaWZ0LCBwZXJpb2QpOwotICBnZG91YmxlIHJldDsKLQotICBpZiAocG9zID49IHBlcmlvZCAvIDIpCi0gICAgcmV0ID0gYW1wOwotICBlbHNlCi0gICAgcmV0ID0gLWFtcDsKLSAgcmV0ICs9IG9mZjsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdhdmVmb3JtX3NxdWFyZV9nZXQgKEdzdExGT0NvbnRyb2xTb3VyY2UgKiBzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAotICAgIGdkb3VibGUgKiB2YWx1ZSkKLXsKLSAgR3N0TEZPQ29udHJvbFNvdXJjZVByaXZhdGUgKnByaXYgPSBzZWxmLT5wcml2OwotCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKHNlbGYpLCB0aW1lc3RhbXApOwotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgKnZhbHVlID0gX3NxdWFyZV9nZXQgKHNlbGYsIHByaXYtPmFtcGxpdHVkZSwgcHJpdi0+b2Zmc2V0LCBwcml2LT50aW1lc2hpZnQsCi0gICAgICBwcml2LT5wZXJpb2QsIHByaXYtPmZyZXF1ZW5jeSwgdGltZXN0YW1wKTsKLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2F2ZWZvcm1fc3F1YXJlX2dldF92YWx1ZV9hcnJheSAoR3N0TEZPQ29udHJvbFNvdXJjZSAqIHNlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywKLSAgICBnZG91YmxlICogdmFsdWVzKQotewotICBHc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZSAqcHJpdiA9IHNlbGYtPnByaXY7Ci0gIGd1aW50IGk7Ci0gIEdzdENsb2NrVGltZSB0cyA9IHRpbWVzdGFtcDsKLQotICBmb3IgKGkgPSAwOyBpIDwgbl92YWx1ZXM7IGkrKykgewotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKHNlbGYpLCB0cyk7Ci0gICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgKnZhbHVlcyA9IF9zcXVhcmVfZ2V0IChzZWxmLCBwcml2LT5hbXBsaXR1ZGUsIHByaXYtPm9mZnNldCwgcHJpdi0+dGltZXNoaWZ0LAotICAgICAgICBwcml2LT5wZXJpb2QsIHByaXYtPmZyZXF1ZW5jeSwgdHMpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgdHMgKz0gaW50ZXJ2YWw7Ci0gICAgdmFsdWVzKys7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotX3Nhd19nZXQgKEdzdExGT0NvbnRyb2xTb3VyY2UgKiBzZWxmLCBnZG91YmxlIGFtcCwgZ2RvdWJsZSBvZmYsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzaGlmdCwgR3N0Q2xvY2tUaW1lIHBlcmlvZCwgZ2RvdWJsZSBmcmVxdWVuY3ksCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgZ2RvdWJsZSBwb3MgPQotICAgICAgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAoX2NhbGN1bGF0ZV9wb3MgKHRpbWVzdGFtcCwgdGltZXNoaWZ0LCBwZXJpb2QpKTsKLSAgZ2RvdWJsZSBwZXIgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChwZXJpb2QpOwotICBnZG91YmxlIHJldDsKLQotICByZXQgPSAtKChwb3MgLSBwZXIgLyAyLjApICogKCgyLjAgKiBhbXApIC8gcGVyKSk7Ci0gIHJldCArPSBvZmY7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi13YXZlZm9ybV9zYXdfZ2V0IChHc3RMRk9Db250cm9sU291cmNlICogc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwKLSAgICBnZG91YmxlICogdmFsdWUpCi17Ci0gIEdzdExGT0NvbnRyb2xTb3VyY2VQcml2YXRlICpwcml2ID0gc2VsZi0+cHJpdjsKLQotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChzZWxmKSwgdGltZXN0YW1wKTsKLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICp2YWx1ZSA9IF9zYXdfZ2V0IChzZWxmLCBwcml2LT5hbXBsaXR1ZGUsIHByaXYtPm9mZnNldCwgcHJpdi0+dGltZXNoaWZ0LAotICAgICAgcHJpdi0+cGVyaW9kLCBwcml2LT5mcmVxdWVuY3ksIHRpbWVzdGFtcCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdhdmVmb3JtX3Nhd19nZXRfdmFsdWVfYXJyYXkgKEdzdExGT0NvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgZ2RvdWJsZSAqIHZhbHVlcykKLXsKLSAgR3N0TEZPQ29udHJvbFNvdXJjZVByaXZhdGUgKnByaXYgPSBzZWxmLT5wcml2OwotICBndWludCBpOwotICBHc3RDbG9ja1RpbWUgdHMgPSB0aW1lc3RhbXA7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5fdmFsdWVzOyBpKyspIHsKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChzZWxmKSwgdHMpOwotICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICp2YWx1ZXMgPSBfc2F3X2dldCAoc2VsZiwgcHJpdi0+YW1wbGl0dWRlLCBwcml2LT5vZmZzZXQsIHByaXYtPnRpbWVzaGlmdCwKLSAgICAgICAgcHJpdi0+cGVyaW9kLCBwcml2LT5mcmVxdWVuY3ksIHRzKTsKLSAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgIHRzICs9IGludGVydmFsOwotICAgIHZhbHVlcysrOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIGdkb3VibGUKLV9yc2F3X2dldCAoR3N0TEZPQ29udHJvbFNvdXJjZSAqIHNlbGYsIGdkb3VibGUgYW1wLCBnZG91YmxlIG9mZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBHc3RDbG9ja1RpbWUgcGVyaW9kLCBnZG91YmxlIGZyZXF1ZW5jeSwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBnZG91YmxlIHBvcyA9Ci0gICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChfY2FsY3VsYXRlX3BvcyAodGltZXN0YW1wLCB0aW1lc2hpZnQsIHBlcmlvZCkpOwotICBnZG91YmxlIHBlciA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHBlcmlvZCk7Ci0gIGdkb3VibGUgcmV0OwotCi0gIHJldCA9IChwb3MgLSBwZXIgLyAyLjApICogKCgyLjAgKiBhbXApIC8gcGVyKTsKLSAgcmV0ICs9IG9mZjsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdhdmVmb3JtX3JzYXdfZ2V0IChHc3RMRk9Db250cm9sU291cmNlICogc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwKLSAgICBnZG91YmxlICogdmFsdWUpCi17Ci0gIEdzdExGT0NvbnRyb2xTb3VyY2VQcml2YXRlICpwcml2ID0gc2VsZi0+cHJpdjsKLQotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChzZWxmKSwgdGltZXN0YW1wKTsKLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICp2YWx1ZSA9IF9yc2F3X2dldCAoc2VsZiwgcHJpdi0+YW1wbGl0dWRlLCBwcml2LT5vZmZzZXQsIHByaXYtPnRpbWVzaGlmdCwKLSAgICAgIHByaXYtPnBlcmlvZCwgcHJpdi0+ZnJlcXVlbmN5LCB0aW1lc3RhbXApOwotICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi13YXZlZm9ybV9yc2F3X2dldF92YWx1ZV9hcnJheSAoR3N0TEZPQ29udHJvbFNvdXJjZSAqIHNlbGYsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGludGVydmFsLCBndWludCBuX3ZhbHVlcywKLSAgICBnZG91YmxlICogdmFsdWVzKQotewotICBHc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZSAqcHJpdiA9IHNlbGYtPnByaXY7Ci0gIGd1aW50IGk7Ci0gIEdzdENsb2NrVGltZSB0cyA9IHRpbWVzdGFtcDsKLQotICBmb3IgKGkgPSAwOyBpIDwgbl92YWx1ZXM7IGkrKykgewotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKHNlbGYpLCB0cyk7Ci0gICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgKnZhbHVlcyA9IF9yc2F3X2dldCAoc2VsZiwgcHJpdi0+YW1wbGl0dWRlLCBwcml2LT5vZmZzZXQsIHByaXYtPnRpbWVzaGlmdCwKLSAgICAgICAgcHJpdi0+cGVyaW9kLCBwcml2LT5mcmVxdWVuY3ksIHRzKTsKLSAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgIHRzICs9IGludGVydmFsOwotICAgIHZhbHVlcysrOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotX3RyaWFuZ2xlX2dldCAoR3N0TEZPQ29udHJvbFNvdXJjZSAqIHNlbGYsIGdkb3VibGUgYW1wLCBnZG91YmxlIG9mZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXNoaWZ0LCBHc3RDbG9ja1RpbWUgcGVyaW9kLCBnZG91YmxlIGZyZXF1ZW5jeSwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBnZG91YmxlIHBvcyA9Ci0gICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChfY2FsY3VsYXRlX3BvcyAodGltZXN0YW1wLCB0aW1lc2hpZnQsIHBlcmlvZCkpOwotICBnZG91YmxlIHBlciA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHBlcmlvZCk7Ci0gIGdkb3VibGUgcmV0OwotCi0gIGlmIChwb3MgPD0gMC4yNSAqIHBlcikKLSAgICAvKiAxc3QgcXVhcnRlciAqLwotICAgIHJldCA9IHBvcyAqICgoNC4wICogYW1wKSAvIHBlcik7Ci0gIGVsc2UgaWYgKHBvcyA8PSAwLjc1ICogcGVyKQotICAgIC8qIDJuZCAmIDNyZCBxdWFydGVyICovCi0gICAgcmV0ID0gLShwb3MgLSBwZXIgLyAyLjApICogKCg0LjAgKiBhbXApIC8gcGVyKTsKLSAgZWxzZQotICAgIC8qIDR0aCBxdWFydGVyICovCi0gICAgcmV0ID0gLShwZXIgLSBwb3MpICogKCg0LjAgKiBhbXApIC8gcGVyKTsKLQotICByZXQgKz0gb2ZmOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0IChHc3RMRk9Db250cm9sU291cmNlICogc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwKLSAgICBnZG91YmxlICogdmFsdWUpCi17Ci0gIEdzdExGT0NvbnRyb2xTb3VyY2VQcml2YXRlICpwcml2ID0gc2VsZi0+cHJpdjsKLQotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChzZWxmKSwgdGltZXN0YW1wKTsKLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICp2YWx1ZSA9IF90cmlhbmdsZV9nZXQgKHNlbGYsIHByaXYtPmFtcGxpdHVkZSwgcHJpdi0+b2Zmc2V0LCBwcml2LT50aW1lc2hpZnQsCi0gICAgICBwcml2LT5wZXJpb2QsIHByaXYtPmZyZXF1ZW5jeSwgdGltZXN0YW1wKTsKLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0X3ZhbHVlX2FycmF5IChHc3RMRk9Db250cm9sU291cmNlICogc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwsIGd1aW50IG5fdmFsdWVzLAotICAgIGdkb3VibGUgKiB2YWx1ZXMpCi17Ci0gIEdzdExGT0NvbnRyb2xTb3VyY2VQcml2YXRlICpwcml2ID0gc2VsZi0+cHJpdjsKLSAgZ3VpbnQgaTsKLSAgR3N0Q2xvY2tUaW1lIHRzID0gdGltZXN0YW1wOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuX3ZhbHVlczsgaSsrKSB7Ci0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoc2VsZiksIHRzKTsKLSAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAqdmFsdWVzID0KLSAgICAgICAgX3RyaWFuZ2xlX2dldCAoc2VsZiwgcHJpdi0+YW1wbGl0dWRlLCBwcml2LT5vZmZzZXQsIHByaXYtPnRpbWVzaGlmdCwKLSAgICAgICAgcHJpdi0+cGVyaW9kLCBwcml2LT5mcmVxdWVuY3ksIHRzKTsKLSAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgIHRzICs9IGludGVydmFsOwotICAgIHZhbHVlcysrOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgc3RydWN0Ci17Ci0gIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSBnZXQ7Ci0gIEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5IGdldF92YWx1ZV9hcnJheTsKLX0gd2F2ZWZvcm1zW10gPSB7Ci0gIHsKLSAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc2luZV9nZXQsCi0gICAgICAgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc2luZV9nZXRfdmFsdWVfYXJyYXl9LCB7Ci0gIChHc3RDb250cm9sU291cmNlR2V0VmFsdWUpIHdhdmVmb3JtX3NxdWFyZV9nZXQsCi0gICAgICAgIChHc3RDb250cm9sU291cmNlR2V0VmFsdWVBcnJheSkgd2F2ZWZvcm1fc3F1YXJlX2dldF92YWx1ZV9hcnJheX0sIHsKLSAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fc2F3X2dldCwKLSAgICAgICAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9zYXdfZ2V0X3ZhbHVlX2FycmF5fSwgewotICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSB3YXZlZm9ybV9yc2F3X2dldCwKLSAgICAgICAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KSB3YXZlZm9ybV9yc2F3X2dldF92YWx1ZV9hcnJheX0sIHsKLSAgKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZSkgd2F2ZWZvcm1fdHJpYW5nbGVfZ2V0LAotICAgICAgICAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpIHdhdmVmb3JtX3RyaWFuZ2xlX2dldF92YWx1ZV9hcnJheX0KLX07Ci0KLXN0YXRpYyBjb25zdCBndWludCBudW1fd2F2ZWZvcm1zID0gR19OX0VMRU1FTlRTICh3YXZlZm9ybXMpOwotCi1lbnVtCi17Ci0gIFBST1BfV0FWRUZPUk0gPSAxLAotICBQUk9QX0ZSRVFVRU5DWSwKLSAgUFJPUF9USU1FU0hJRlQsCi0gIFBST1BfQU1QTElUVURFLAotICBQUk9QX09GRlNFVAotfTsKLQotR1R5cGUKLWdzdF9sZm9fd2F2ZWZvcm1fZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBndHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtHU1RfTEZPX1dBVkVGT1JNX1NJTkUsICJHU1RfTEZPX1dBVkVGT1JNX1NJTkUiLAotICAgICAgICAic2luZSJ9LAotICAgIHtHU1RfTEZPX1dBVkVGT1JNX1NRVUFSRSwgIkdTVF9MRk9fV0FWRUZPUk1fU1FVQVJFIiwKLSAgICAgICAgInNxdWFyZSJ9LAotICAgIHtHU1RfTEZPX1dBVkVGT1JNX1NBVywgIkdTVF9MRk9fV0FWRUZPUk1fU0FXIiwKLSAgICAgICAgInNhdyJ9LAotICAgIHtHU1RfTEZPX1dBVkVGT1JNX1JFVkVSU0VfU0FXLCAiR1NUX0xGT19XQVZFRk9STV9SRVZFUlNFX1NBVyIsCi0gICAgICAgICJyZXZlcnNlLXNhdyJ9LAotICAgIHtHU1RfTEZPX1dBVkVGT1JNX1RSSUFOR0xFLCAiR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRSIsCi0gICAgICAgICJ0cmlhbmdsZSJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmd0eXBlKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RMRk9XYXZlZm9ybSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZndHlwZSwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGd0eXBlOwotfQotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKEdTVF9DQVRfREVGQVVMVCwgImxmbyBjb250cm9sIHNvdXJjZSIsIDAsICJsb3cgZnJlcXVlbmN5IG9zY2lsbGF0b3IgY29udHJvbCBzb3VyY2UiKQotCi0jZGVmaW5lIGdzdF9sZm9fY29udHJvbF9zb3VyY2VfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdExGT0NvbnRyb2xTb3VyY2UsIGdzdF9sZm9fY29udHJvbF9zb3VyY2UsCi0gICAgR1NUX1RZUEVfQ09OVFJPTF9TT1VSQ0UsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQKLWdzdF9sZm9fY29udHJvbF9zb3VyY2VfcmVzZXQgKEdzdExGT0NvbnRyb2xTb3VyY2UgKiBzZWxmKQotewotICBHc3RDb250cm9sU291cmNlICpjc291cmNlID0gR1NUX0NPTlRST0xfU09VUkNFIChzZWxmKTsKLQotICBjc291cmNlLT5nZXRfdmFsdWUgPSBOVUxMOwotICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPSBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3OgotICoKLSAqIFRoaXMgcmV0dXJucyBhIG5ldywgdW5ib3VuZCAjR3N0TEZPQ29udHJvbFNvdXJjZS4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3LCB1bmJvdW5kICNHc3RMRk9Db250cm9sU291cmNlLgotICovCi1Hc3RDb250cm9sU291cmNlICoKLWdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3ICh2b2lkKQotewotICByZXR1cm4gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfTEZPX0NPTlRST0xfU09VUkNFLCAwLCBOVUxMKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbGZvX2NvbnRyb2xfc291cmNlX3NldF93YXZlZm9ybSAoR3N0TEZPQ29udHJvbFNvdXJjZSAqIHNlbGYsCi0gICAgR3N0TEZPV2F2ZWZvcm0gd2F2ZWZvcm0pCi17Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzb3VyY2UgPSBHU1RfQ09OVFJPTF9TT1VSQ0UgKHNlbGYpOwotCi0gIGlmICh3YXZlZm9ybSA+PSBudW1fd2F2ZWZvcm1zIHx8IChpbnQpIHdhdmVmb3JtIDwgMCkgewotICAgIEdTVF9XQVJOSU5HICgid2F2ZWZvcm0gJWQgaW52YWxpZCBvciBub3QgaW1wbGVtZW50ZWQgeWV0Iiwgd2F2ZWZvcm0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGNzb3VyY2UtPmdldF92YWx1ZSA9IHdhdmVmb3Jtc1t3YXZlZm9ybV0uZ2V0OwotICBjc291cmNlLT5nZXRfdmFsdWVfYXJyYXkgPSB3YXZlZm9ybXNbd2F2ZWZvcm1dLmdldF92YWx1ZV9hcnJheTsKLQotICBzZWxmLT5wcml2LT53YXZlZm9ybSA9IHdhdmVmb3JtOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2xmb19jb250cm9sX3NvdXJjZV9pbml0IChHc3RMRk9Db250cm9sU291cmNlICogc2VsZikKLXsKLSAgc2VsZi0+cHJpdiA9Ci0gICAgICBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHNlbGYsIEdTVF9UWVBFX0xGT19DT05UUk9MX1NPVVJDRSwKLSAgICAgIEdzdExGT0NvbnRyb2xTb3VyY2VQcml2YXRlKTsKLSAgc2VsZi0+cHJpdi0+d2F2ZWZvcm0gPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX3NldF93YXZlZm9ybSAoc2VsZiwKLSAgICAgIEdTVF9MRk9fV0FWRUZPUk1fU0lORSk7Ci0gIHNlbGYtPnByaXYtPmZyZXF1ZW5jeSA9IDEuMDsKLSAgc2VsZi0+cHJpdi0+YW1wbGl0dWRlID0gMS4wOwotICBzZWxmLT5wcml2LT5wZXJpb2QgPSBHU1RfU0VDT05EIC8gc2VsZi0+cHJpdi0+ZnJlcXVlbmN5OwotICBzZWxmLT5wcml2LT50aW1lc2hpZnQgPSAwOwotCi0gIGdfbXV0ZXhfaW5pdCAoJnNlbGYtPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2xmb19jb250cm9sX3NvdXJjZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iaikKLXsKLSAgR3N0TEZPQ29udHJvbFNvdXJjZSAqc2VsZiA9IEdTVF9MRk9fQ09OVFJPTF9TT1VSQ0UgKG9iaik7Ci0KLSAgZ3N0X2xmb19jb250cm9sX3NvdXJjZV9yZXNldCAoc2VsZik7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZzZWxmLT5sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbGZvX2NvbnRyb2xfc291cmNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RMRk9Db250cm9sU291cmNlICpzZWxmID0gR1NUX0xGT19DT05UUk9MX1NPVVJDRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfV0FWRUZPUk06Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGdzdF9sZm9fY29udHJvbF9zb3VyY2Vfc2V0X3dhdmVmb3JtIChzZWxmLAotICAgICAgICAgIChHc3RMRk9XYXZlZm9ybSkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRlJFUVVFTkNZOnsKLSAgICAgIGdkb3VibGUgZnJlcXVlbmN5ID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0KLSAgICAgIGdfcmV0dXJuX2lmX2ZhaWwgKCgoR3N0Q2xvY2tUaW1lKSAoR1NUX1NFQ09ORCAvIGZyZXF1ZW5jeSkpICE9IDApOwotCi0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHNlbGYtPnByaXYtPmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKLSAgICAgIHNlbGYtPnByaXYtPnBlcmlvZCA9IEdTVF9TRUNPTkQgLyBmcmVxdWVuY3k7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9USU1FU0hJRlQ6Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHNlbGYtPnByaXYtPnRpbWVzaGlmdCA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BTVBMSVRVREU6Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHNlbGYtPnByaXYtPmFtcGxpdHVkZSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9PRkZTRVQ6Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHNlbGYtPnByaXYtPm9mZnNldCA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdExGT0NvbnRyb2xTb3VyY2UgKnNlbGYgPSBHU1RfTEZPX0NPTlRST0xfU09VUkNFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9XQVZFRk9STToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzZWxmLT5wcml2LT53YXZlZm9ybSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRlJFUVVFTkNZOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgc2VsZi0+cHJpdi0+ZnJlcXVlbmN5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FU0hJRlQ6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBzZWxmLT5wcml2LT50aW1lc2hpZnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FNUExJVFVERToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlbGYtPnByaXYtPmFtcGxpdHVkZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfT0ZGU0VUOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgc2VsZi0+cHJpdi0+b2Zmc2V0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9sZm9fY29udHJvbF9zb3VyY2VfY2xhc3NfaW5pdCAoR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZSkpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3Byb3BlcnR5OwotCi0gIC8qKgotICAgKiBHc3RMRk9Db250cm9sU291cmNlOndhdmVmb3JtOgotICAgKgotICAgKiBTcGVjaWZpZXMgdGhlIHdhdmVmb3JtIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgI0dzdExGT0NvbnRyb2xTb3VyY2UuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1dBVkVGT1JNLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJ3YXZlZm9ybSIsICJXYXZlZm9ybSIsICJXYXZlZm9ybSIsCi0gICAgICAgICAgR1NUX1RZUEVfTEZPX1dBVkVGT1JNLCBHU1RfTEZPX1dBVkVGT1JNX1NJTkUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdExGT0NvbnRyb2xTb3VyY2U6ZnJlcXVlbmN5OgotICAgKgotICAgKiBTcGVjaWZpZXMgdGhlIGZyZXF1ZW5jeSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgd2F2ZWZvcm0KLSAgICogb2YgdGhpcyAjR3N0TEZPQ29udHJvbFNvdXJjZS4gSXQgc2hvdWxkIGJlIGxhcmdlIGVub3VnaAotICAgKiBzbyB0aGF0IHRoZSBwZXJpb2QgaXMgbG9uZ2VyIHRoYW4gb25lIG5hbm9zZWNvbmQuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0ZSRVFVRU5DWSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJmcmVxdWVuY3kiLCAiRnJlcXVlbmN5IiwKLSAgICAgICAgICAiRnJlcXVlbmN5IG9mIHRoZSB3YXZlZm9ybSIsIERCTF9NSU4sIEdfTUFYRE9VQkxFLCAxLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RMRk9Db250cm9sU291cmNlOnRpbWVzaGlmdDoKLSAgICoKLSAgICogU3BlY2lmaWVzIHRoZSB0aW1lc2hpZnQgdG8gdGhlIHJpZ2h0IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSB3YXZlZm9ybQotICAgKiBvZiB0aGlzICNHc3RMRk9Db250cm9sU291cmNlIGluIG5hbm9zZWNvbmRzLgotICAgKgotICAgKiBUbyBnZXQgYSBuIG5hbm9zZWNvbmQgc2hpZnQgdG8gdGhlIGxlZnQgdXNlCi0gICAqICIoR1NUX1NFQ09ORCAvIGZyZXF1ZW5jeSkgLSBuIi4KLSAgICoKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVElNRVNISUZULAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInRpbWVzaGlmdCIsICJUaW1lc2hpZnQiLAotICAgICAgICAgICJUaW1lc2hpZnQgb2YgdGhlIHdhdmVmb3JtIHRvIHRoZSByaWdodCIsIDAsIEdfTUFYVUlOVDY0LCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0TEZPQ29udHJvbFNvdXJjZTphbXBsaXR1ZGU6Ci0gICAqCi0gICAqIFNwZWNpZmllcyB0aGUgYW1wbGl0dWRlIGZvciB0aGUgd2F2ZWZvcm0gb2YgdGhpcyAjR3N0TEZPQ29udHJvbFNvdXJjZS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQU1QTElUVURFLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImFtcGxpdHVkZSIsICJBbXBsaXR1ZGUiLAotICAgICAgICAgICJBbXBsaXR1ZGUgb2YgdGhlIHdhdmVmb3JtIiwgMC4wLCAxLjAsIDEuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdExGT0NvbnRyb2xTb3VyY2U6b2Zmc2V0OgotICAgKgotICAgKiBTcGVjaWZpZXMgdGhlIHZhbHVlIG9mZnNldCBmb3IgdGhlIHdhdmVmb3JtIG9mIHRoaXMgI0dzdExGT0NvbnRyb2xTb3VyY2UuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX09GRlNFVCwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJvZmZzZXQiLCAiT2Zmc2V0IiwgIk9mZnNldCBvZiB0aGUgd2F2ZWZvcm0iLAotICAgICAgICAgIDAuMCwgMS4wLCAxLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3RsZm9jb250cm9sc291cmNlLmggYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcyNDIyOS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIGdzdGxmb2NvbnRyb2xzb3VyY2UuaDogQ29udHJvbCBzb3VyY2UgdGhhdCBwcm92aWRlcyBzb21lIHBlcmlvZGljIHdhdmVmb3JtcwotICogICAgICAgICAgICAgICAgICAgICAgICBhcyBjb250cm9sIHZhbHVlcy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0xGT19DT05UUk9MX1NPVVJDRV9IX18KLSNkZWZpbmUgX19HU1RfTEZPX0NPTlRST0xfU09VUkNFX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9MRk9fQ09OVFJPTF9TT1VSQ0UgXAotICAoZ3N0X2xmb19jb250cm9sX3NvdXJjZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0xGT19DT05UUk9MX1NPVVJDRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfTEZPX0NPTlRST0xfU09VUkNFLCBHc3RMRk9Db250cm9sU291cmNlKSkKLSNkZWZpbmUgR1NUX0xGT19DT05UUk9MX1NPVVJDRV9DTEFTUyh2dGFibGUpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgodnRhYmxlKSwgR1NUX1RZUEVfTEZPX0NPTlRST0xfU09VUkNFLCBHc3RMRk9Db250cm9sU291cmNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTEZPX0NPTlRST0xfU09VUkNFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9MRk9fQ09OVFJPTF9TT1VSQ0UpKQotI2RlZmluZSBHU1RfSVNfTEZPX0NPTlRST0xfU09VUkNFX0NMQVNTKHZ0YWJsZSkgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKCh2dGFibGUpLCBHU1RfVFlQRV9MRk9fQ09OVFJPTF9TT1VSQ0UpKQotI2RlZmluZSBHU1RfTEZPX0NPTlRST0xfU09VUkNFX0dFVF9DTEFTUyhpbnN0KSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgoaW5zdCksIEdTVF9UWVBFX0xGT19DT05UUk9MX1NPVVJDRSwgR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzKSkKLQotI2RlZmluZSBHU1RfVFlQRV9MRk9fV0FWRUZPUk0gKGdzdF9sZm9fd2F2ZWZvcm1fZ2V0X3R5cGUgKCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RMRk9Db250cm9sU291cmNlIEdzdExGT0NvbnRyb2xTb3VyY2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzIEdzdExGT0NvbnRyb2xTb3VyY2VDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZSBHc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZTsKLQotLyoqCi0gKiBHc3RMRk9XYXZlZm9ybToKLSAqIEBHU1RfTEZPX1dBVkVGT1JNX1NJTkU6IHNpbmUgd2F2ZWZvcm0KLSAqIEBHU1RfTEZPX1dBVkVGT1JNX1NRVUFSRTogc3F1YXJlIHdhdmVmb3JtCi0gKiBAR1NUX0xGT19XQVZFRk9STV9TQVc6IHNhdyB3YXZlZm9ybQotICogQEdTVF9MRk9fV0FWRUZPUk1fUkVWRVJTRV9TQVc6IHJldmVyc2Ugc2F3IHdhdmVmb3JtCi0gKiBAR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRTogdHJpYW5nbGUgd2F2ZWZvcm0KLSAqCi0gKiBUaGUgdmFyaW91cyB3YXZlZm9ybSBtb2RlcyBhdmFpbGFibGUuCi0gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfTEZPX1dBVkVGT1JNX1NJTkUsCi0gIEdTVF9MRk9fV0FWRUZPUk1fU1FVQVJFLAotICBHU1RfTEZPX1dBVkVGT1JNX1NBVywKLSAgR1NUX0xGT19XQVZFRk9STV9SRVZFUlNFX1NBVywKLSAgR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRQotfSBHc3RMRk9XYXZlZm9ybTsKLQotLyoqCi0gKiBHc3RMRk9Db250cm9sU291cmNlOgotICoKLSAqIFRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgI0dzdENvbnRyb2xTb3VyY2UuCi0gKi8KLXN0cnVjdCBfR3N0TEZPQ29udHJvbFNvdXJjZSB7Ci0gIEdzdENvbnRyb2xTb3VyY2UgcGFyZW50OwotCi0gIC8qIDxwcml2YXRlPiAqLwotICBHc3RMRk9Db250cm9sU291cmNlUHJpdmF0ZSAqcHJpdjsKLSAgR011dGV4IGxvY2s7Ci0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3RMRk9Db250cm9sU291cmNlQ2xhc3MgewotICBHc3RDb250cm9sU291cmNlQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlIGdzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X2xmb193YXZlZm9ybV9nZXRfdHlwZSAodm9pZCk7Ci0KLS8qIEZ1bmN0aW9ucyAqLwotCi1Hc3RDb250cm9sU291cmNlICpnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAodm9pZCk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0TEZPQ29udHJvbFNvdXJjZSwgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTEZPX0NPTlRST0xfU09VUkNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDEwMWMyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDUxMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqICAgICAgICAgICAgICAgMjAxMSBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlLmM6IEJhc2UgY2xhc3MgZm9yIHRpbWVlZCB2YWx1ZSBiYXNlZCBjb250cm9sCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdHRpbWVkdmFsdWVjb250cm9sc291cmNlCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IHRpbWVkIHZhbHVlIGNvbnRyb2wgc291cmNlIGJhc2UgY2xhc3MKLSAqCi0gKiBCYXNlIGNsYXNzIGZvciAjR3N0Q29udHJvbFNvdXJjZSB0aGF0IHVzZSB0aW1lLXN0YW1wZWQgdmFsdWVzLgotICoKLSAqIFdoZW4gb3ZlcnJpZGluZyBiaW5kLCBjaGFpbiB1cCBmaXJzdCB0byBnaXZlIHRoaXMgYmluZCBpbXBsZW1lbnRhdGlvbiBhCi0gKiBjaGFuY2UgdG8gc2V0dXAgdGhpbmdzLgotICoKLSAqIEFsbCBmdW5jdGlvbnMgYXJlIE1ULXNhZmUuCi0gKgotICovCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmgiCi0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY29udHJvbGxlcl9kZWJ1ZwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKLQotI2RlZmluZSBfZG9faW5pdCBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChHU1RfQ0FUX0RFRkFVTFQsICJ0aW1lZCB2YWx1ZSBjb250cm9sIHNvdXJjZSIsIDAsIFwKLSAgICAidGltZWQgdmFsdWUgY29udHJvbCBzb3VyY2UgYmFzZSBjbGFzcyIpCi0KLSNkZWZpbmUgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX0FCU1RSQUNUX1RZUEVfV0lUSF9DT0RFIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSwKLSAgICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2UsIEdTVF9UWVBFX0NPTlRST0xfU09VUkNFLCBfZG9faW5pdCk7Ci0KLQotZW51bQotewotICBWQUxVRV9DSEFOR0VEX1NJR05BTCwKLSAgVkFMVUVfQURERURfU0lHTkFMLAotICBWQUxVRV9SRU1PVkVEX1NJR05BTCwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBndWludCBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotLyoKLSAqIGdzdF9jb250cm9sX3BvaW50X2ZyZWU6Ci0gKiBAcHJvcDogdGhlIG9iamVjdCB0byBmcmVlCi0gKgotICogUHJpdmF0ZSBtZXRob2Qgd2hpY2ggZnJlZXMgYWxsIGRhdGEgYWxsb2NhdGVkIGJ5IGEgI0dzdENvbnRyb2xQb2ludAotICogaW5zdGFuY2UuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfY29udHJvbF9wb2ludF9mcmVlIChHc3RDb250cm9sUG9pbnQgKiBjcCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY3ApOwotCi0gIGdfc2xpY2VfZnJlZSAoR3N0Q29udHJvbFBvaW50LCBjcCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotZ3N0X2NvbnRyb2xfcG9pbnRfY29weSAoR3N0Q29udHJvbFBvaW50ICogYm94ZWQpCi17Ci0gIHJldHVybiBnX3NsaWNlX2R1cCAoR3N0Q29udHJvbFBvaW50LCBib3hlZCk7Ci19Ci0KLUdUeXBlCi1nc3RfY29udHJvbF9wb2ludF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIHR5cGVfaWQgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnR5cGVfaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0KLSAgICAgICAgZ19ib3hlZF90eXBlX3JlZ2lzdGVyX3N0YXRpYyAoZ19pbnRlcm5fc3RhdGljX3N0cmluZwotICAgICAgICAoIkdzdENvbnRyb2xQb2ludCIpLAotICAgICAgICAoR0JveGVkQ29weUZ1bmMpIGdzdF9jb250cm9sX3BvaW50X2NvcHksCi0gICAgICAgIChHQm94ZWRGcmVlRnVuYykgZ3N0X2NvbnRyb2xfcG9pbnRfZnJlZSk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZ0eXBlX2lkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIHR5cGVfaWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfcmVzZXQgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZikKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3NvdXJjZSA9IChHc3RDb250cm9sU291cmNlICopIHNlbGY7Ci0KLSAgY3NvdXJjZS0+Z2V0X3ZhbHVlID0gTlVMTDsKLSAgY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5ID0gTlVMTDsKLQotICBpZiAoc2VsZi0+dmFsdWVzKSB7Ci0gICAgZ19zZXF1ZW5jZV9mcmVlIChzZWxmLT52YWx1ZXMpOwotICAgIHNlbGYtPnZhbHVlcyA9IE5VTEw7Ci0gIH0KLQotICBzZWxmLT5udmFsdWVzID0gMDsKLSAgc2VsZi0+dmFsaWRfY2FjaGUgPSBGQUxTRTsKLX0KLQotLyoKLSAqIGdzdF9jb250cm9sX3BvaW50X2NvbXBhcmU6Ci0gKiBAcDE6IGEgcG9pbnRlciB0byBhICNHc3RDb250cm9sUG9pbnQKLSAqIEBwMjogYSBwb2ludGVyIHRvIGEgI0dzdENvbnRyb2xQb2ludAotICoKLSAqIENvbXBhcmUgZnVuY3Rpb24gZm9yIGdfbGlzdCBvcGVyYXRpb25zIHRoYXQgb3BlcmF0ZXMgb24gdHdvICNHc3RDb250cm9sUG9pbnQKLSAqIHBhcmFtZXRlcnMuCi0gKi8KLXN0YXRpYyBnaW50Ci1nc3RfY29udHJvbF9wb2ludF9jb21wYXJlIChnY29uc3Rwb2ludGVyIHAxLCBnY29uc3Rwb2ludGVyIHAyKQotewotICBHc3RDbG9ja1RpbWUgY3QxID0gKChHc3RDb250cm9sUG9pbnQgKikgcDEpLT50aW1lc3RhbXA7Ci0gIEdzdENsb2NrVGltZSBjdDIgPSAoKEdzdENvbnRyb2xQb2ludCAqKSBwMiktPnRpbWVzdGFtcDsKLQotICByZXR1cm4gKChjdDEgPCBjdDIpID8gLTEgOiAoKGN0MSA9PSBjdDIpID8gMCA6IDEpKTsKLX0KLQotLyoKLSAqIGdzdF9jb250cm9sX3BvaW50X2ZpbmQ6Ci0gKiBAcDE6IGEgcG9pbnRlciB0byBhICNHc3RDb250cm9sUG9pbnQKLSAqIEBwMjogYSBwb2ludGVyIHRvIGEgI0dzdENsb2NrVGltZQotICogQHVzZXJfZGF0YTogc3VwcGxpZWQgdXNlciBkYXRhCi0gKgotICogQ29tcGFyZSBmdW5jdGlvbiBmb3IgZ19zZXF1ZW5jZSBvcGVyYXRpb25zIHRoYXQgb3BlcmF0ZXMgb24gYSAjR3N0Q29udHJvbFBvaW50IGFuZAotICogYSAjR3N0Q2xvY2tUaW1lLgotICovCi1zdGF0aWMgZ2ludAotZ3N0X2NvbnRyb2xfcG9pbnRfZmluZCAoZ2NvbnN0cG9pbnRlciBwMSwgZ2NvbnN0cG9pbnRlciBwMiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RDbG9ja1RpbWUgY3QxID0gKChHc3RDb250cm9sUG9pbnQgKikgcDEpLT50aW1lc3RhbXA7Ci0gIEdzdENsb2NrVGltZSBjdDIgPSAqKEdzdENsb2NrVGltZSAqKSBwMjsKLQotICByZXR1cm4gKChjdDEgPCBjdDIpID8gLTEgOiAoKGN0MSA9PSBjdDIpID8gMCA6IDEpKTsKLX0KLQotc3RhdGljIEdzdENvbnRyb2xQb2ludCAqCi1fbWFrZV9uZXdfY3AgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwKLSAgICBjb25zdCBnZG91YmxlIHZhbHVlKQotewotICBHc3RDb250cm9sUG9pbnQgKmNwOwotCi0gIC8qIGNyZWF0ZSBhIG5ldyBHc3RDb250cm9sUG9pbnQgKi8KLSAgY3AgPSBnX3NsaWNlX25ldzAgKEdzdENvbnRyb2xQb2ludCk7Ci0gIGNwLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gIGNwLT52YWx1ZSA9IHZhbHVlOwotCi0gIHJldHVybiBjcDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJuYWwgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICoKLSAgICBzZWxmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBjb25zdCBnZG91YmxlIHZhbHVlKQotewotICBHc3RDb250cm9sUG9pbnQgKmNwOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotCi0gIC8qIGNoZWNrIGlmIGEgY29udHJvbCBwb2ludCBmb3IgdGhlIHRpbWVzdGFtcCBhbHJlYWR5IGV4aXN0cyAqLwotICBpZiAoR19MSUtFTFkgKHNlbGYtPnZhbHVlcykpIHsKLSAgICBHU2VxdWVuY2VJdGVyICppdGVyID0gZ19zZXF1ZW5jZV9sb29rdXAgKHNlbGYtPnZhbHVlcywgJnRpbWVzdGFtcCwKLSAgICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIGdzdF9jb250cm9sX3BvaW50X2ZpbmQsIE5VTEwpOwotCi0gICAgaWYgKGl0ZXIpIHsKLSAgICAgIEdzdENvbnRyb2xQb2ludCAqY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcik7Ci0KLSAgICAgIC8qIHVwZGF0ZSBjb250cm9sIHBvaW50ICovCi0gICAgICBjcC0+dmFsdWUgPSB2YWx1ZTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgICAgIGdfc2lnbmFsX2VtaXQgKHNlbGYsCi0gICAgICAgICAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NpZ25hbHNbVkFMVUVfQ0hBTkdFRF9TSUdOQUxdLCAwLCBjcCk7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHNlbGYtPnZhbHVlcyA9IGdfc2VxdWVuY2VfbmV3ICgoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9jb250cm9sX3BvaW50X2ZyZWUpOwotICAgIEdTVF9JTkZPICgiY3JlYXRlIG5ldyB0aW1lZCB2YWx1ZSBzZXF1ZW5jZSIpOwotICB9Ci0KLSAgLyogc29ydCBuZXcgY3AgaW50byB0aGUgcHJvcC0+dmFsdWVzIGxpc3QgKi8KLSAgY3AgPSBfbWFrZV9uZXdfY3AgKHNlbGYsIHRpbWVzdGFtcCwgdmFsdWUpOwotICBnX3NlcXVlbmNlX2luc2VydF9zb3J0ZWQgKHNlbGYtPnZhbHVlcywgY3AsCi0gICAgICAoR0NvbXBhcmVEYXRhRnVuYykgZ3N0X2NvbnRyb2xfcG9pbnRfY29tcGFyZSwgTlVMTCk7Ci0gIHNlbGYtPm52YWx1ZXMrKzsKLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBnX3NpZ25hbF9lbWl0IChzZWxmLAotICAgICAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NpZ25hbHNbVkFMVUVfQURERURfU0lHTkFMXSwgMCwgY3ApOwotCi1kb25lOgotICBzZWxmLT52YWxpZF9jYWNoZSA9IEZBTFNFOwotfQotCi0vKioKLSAqIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlcjoKLSAqIEBzZWxmOiB0aGUgY29udHJvbCBzb3VyY2UgdG8gc2VhcmNoIGluCi0gKiBAdGltZXN0YW1wOiB0aGUgc2VhcmNoIGtleQotICoKLSAqIEZpbmQgbGFzdCB2YWx1ZSBiZWZvcmUgZ2l2ZW4gdGltZXN0YW1wIGluIGNvbnRyb2wgcG9pbnQgbGlzdC4KLSAqIElmIGFsbCB2YWx1ZXMgaW4gdGhlIGNvbnRyb2wgcG9pbnQgbGlzdCBjb21lIGFmdGVyIHRoZSBnaXZlbgotICogdGltZXN0YW1wIG9yIG5vIHZhbHVlcyBleGlzdCwgJU5VTEwgaXMgcmV0dXJuZWQuCi0gKgotICogRm9yIHVzZSBpbiBjb250cm9sIHNvdXJjZSBpbXBsZW1lbnRhdGlvbnMuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgZm91bmQgI0dTZXF1ZW5jZUl0ZXIgb3IgJU5VTEwKLSAqLwotR1NlcXVlbmNlSXRlciAqZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyCi0gICAgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgR1NlcXVlbmNlSXRlciAqaXRlcjsKLQotICBpZiAoIXNlbGYtPnZhbHVlcykKLSAgICByZXR1cm4gTlVMTDsKLQotICBpdGVyID0KLSAgICAgIGdfc2VxdWVuY2Vfc2VhcmNoIChzZWxmLT52YWx1ZXMsICZ0aW1lc3RhbXAsCi0gICAgICAoR0NvbXBhcmVEYXRhRnVuYykgZ3N0X2NvbnRyb2xfcG9pbnRfZmluZCwgTlVMTCk7Ci0KLSAgLyogZ19zZXF1ZW5jZV9zZWFyY2goKSByZXR1cm5zIHRoZSBpdGVyIHdoZXJlIHRpbWVzdGFtcAotICAgKiB3b3VsZCBiZSBpbnNlcnRlZCwgaS5lLiB0aGUgaXRlciA+IHRpbWVzdGFtcCwgc28KLSAgICogd2UgbmVlZCB0byBnZXQgdGhlIHByZXZpb3VzIG9uZS4gQW5kIG9mIGNvdXJzZSwgaWYKLSAgICogdGhlcmUgaXMgbm8gcHJldmlvdXMgb25lLCB3ZSByZXR1cm4gTlVMTC4gKi8KLSAgaWYgKGdfc2VxdWVuY2VfaXRlcl9pc19iZWdpbiAoaXRlcikpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0dXJuIGdfc2VxdWVuY2VfaXRlcl9wcmV2IChpdGVyKTsKLX0KLQotCi0vKioKLSAqIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQ6Ci0gKiBAc2VsZjogdGhlICNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSBvYmplY3QKLSAqIEB0aW1lc3RhbXA6IHRoZSB0aW1lIHRoZSBjb250cm9sLWNoYW5nZSBpcyBzY2hlZHVsZWQgZm9yCi0gKiBAdmFsdWU6IHRoZSBjb250cm9sLXZhbHVlCi0gKgotICogU2V0IHRoZSB2YWx1ZSBvZiBnaXZlbiBjb250cm9sbGVyLWhhbmRsZWQgcHJvcGVydHkgYXQgYSBjZXJ0YWluIHRpbWUuCi0gKgotICogUmV0dXJuczogRkFMU0UgaWYgdGhlIHZhbHVlcyBjb3VsZG4ndCBiZSBzZXQsIFRSVUUgb3RoZXJ3aXNlLgotICovCi1nYm9vbGVhbgotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGNvbnN0IGdkb3VibGUgdmFsdWUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0UgKHNlbGYpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSwgRkFMU0UpOwotCi0gIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfaW50ZXJuYWwgKHNlbGYsIHRpbWVzdGFtcCwgdmFsdWUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0OgotICogQHNlbGY6IHRoZSAjR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2Ugb2JqZWN0Ci0gKiBAdGltZWR2YWx1ZXM6ICh0cmFuc2ZlciBub25lKSAoZWxlbWVudC10eXBlIEdzdFRpbWVkVmFsdWUpOiBhIGxpc3QKLSAqIHdpdGggI0dzdFRpbWVkVmFsdWUgaXRlbXMKLSAqCi0gKiBTZXRzIG11bHRpcGxlIHRpbWVkIHZhbHVlcyBhdCBvbmNlLgotICoKLSAqIFJldHVybnM6IEZBTFNFIGlmIHRoZSB2YWx1ZXMgY291bGRuJ3QgYmUgc2V0LCBUUlVFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqCi0gICAgc2VsZiwgY29uc3QgR1NMaXN0ICogdGltZWR2YWx1ZXMpCi17Ci0gIGNvbnN0IEdTTGlzdCAqbm9kZTsKLSAgR3N0VGltZWRWYWx1ZSAqdHY7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0UgKHNlbGYpLCBGQUxTRSk7Ci0KLSAgZm9yIChub2RlID0gdGltZWR2YWx1ZXM7IG5vZGU7IG5vZGUgPSBnX3NsaXN0X25leHQgKG5vZGUpKSB7Ci0gICAgdHYgPSBub2RlLT5kYXRhOwotICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHR2LT50aW1lc3RhbXApKSB7Ci0gICAgICBHU1RfV0FSTklORyAoIkdzdFRpbWVkVmFsdWVkIHdpdGggaW52YWxpZCB0aW1lc3RhbXAgcGFzc2VkIHRvICVzIiwKLSAgICAgICAgICBHU1RfRlVOQ1RJT04pOwotICAgIH0gZWxzZSB7Ci0gICAgICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0X2ludGVybmFsIChzZWxmLCB0di0+dGltZXN0YW1wLAotICAgICAgICAgIHR2LT52YWx1ZSk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgIH0KLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldDoKLSAqIEBzZWxmOiB0aGUgI0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIG9iamVjdAotICogQHRpbWVzdGFtcDogdGhlIHRpbWUgdGhlIGNvbnRyb2wtY2hhbmdlIHNob3VsZCBiZSByZW1vdmVkIGZyb20KLSAqCi0gKiBVc2VkIHRvIHJlbW92ZSB0aGUgdmFsdWUgb2YgZ2l2ZW4gY29udHJvbGxlci1oYW5kbGVkIHByb3BlcnR5IGF0IGEgY2VydGFpbgotICogdGltZS4KLSAqCi0gKiBSZXR1cm5zOiBGQUxTRSBpZiB0aGUgdmFsdWUgY291bGRuJ3QgYmUgdW5zZXQgKGkuZS4gbm90IGZvdW5kLCBUUlVFIG90aGVyd2lzZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldCAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCi17Ci0gIEdTZXF1ZW5jZUl0ZXIgKml0ZXI7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RDb250cm9sUG9pbnQgKmNwID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFIChzZWxmKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCksIEZBTFNFKTsKLQotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgLyogY2hlY2sgaWYgYSBjb250cm9sIHBvaW50IGZvciB0aGUgdGltZXN0YW1wIGV4aXN0cyAqLwotICBpZiAoR19MSUtFTFkgKHNlbGYtPnZhbHVlcykgJiYgKGl0ZXIgPQotICAgICAgICAgIGdfc2VxdWVuY2VfbG9va3VwIChzZWxmLT52YWx1ZXMsICZ0aW1lc3RhbXAsCi0gICAgICAgICAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBnc3RfY29udHJvbF9wb2ludF9maW5kLCBOVUxMKSkpIHsKLQotICAgIC8qIEl0ZXIgY29udGFpbnMgdGhlIGl0ZXIgcmlnaHQgYWZ0ZXIgdGltZXN0YW1wLCBpLmUuCi0gICAgICogd2UgbmVlZCB0byBnZXQgdGhlIHByZXZpb3VzIG9uZSBhbmQgY2hlY2sgdGhlIHRpbWVzdGFtcAotICAgICAqLwotICAgIGNwID0gZ19zbGljZV9kdXAgKEdzdENvbnRyb2xQb2ludCwgZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpKTsKLSAgICBnX3NlcXVlbmNlX3JlbW92ZSAoaXRlcik7Ci0gICAgc2VsZi0+bnZhbHVlcy0tOwotICAgIHNlbGYtPnZhbGlkX2NhY2hlID0gRkFMU0U7Ci0gICAgcmVzID0gVFJVRTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotCi0gIGlmIChjcCkgewotICAgIGdfc2lnbmFsX2VtaXQgKHNlbGYsCi0gICAgICAgIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zaWduYWxzW1ZBTFVFX1JFTU9WRURfU0lHTkFMXSwgMCwgY3ApOwotICAgIGdfc2xpY2VfZnJlZSAoR3N0Q29udHJvbFBvaW50LCBjcCk7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldF9hbGw6Ci0gKiBAc2VsZjogdGhlICNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSBvYmplY3QKLSAqCi0gKiBVc2VkIHRvIHJlbW92ZSBhbGwgdGltZS1zdGFtcGVkIHZhbHVlcyBvZiBnaXZlbiBjb250cm9sbGVyLWhhbmRsZWQgcHJvcGVydHkKLSAqCi0gKi8KLXZvaWQKLWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldF9hbGwgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFIChzZWxmKSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gIC8qIGZyZWUgR3N0Q29udHJvbFBvaW50IHN0cnVjdHVyZXMgKi8KLSAgaWYgKHNlbGYtPnZhbHVlcykgewotICAgIGdfc2VxdWVuY2VfZnJlZSAoc2VsZi0+dmFsdWVzKTsKLSAgICBzZWxmLT52YWx1ZXMgPSBOVUxMOwotICB9Ci0gIHNlbGYtPm52YWx1ZXMgPSAwOwotICBzZWxmLT52YWxpZF9jYWNoZSA9IEZBTFNFOwotCi0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fYXBwZW5kX2NvbnRyb2xfcG9pbnQgKEdzdENvbnRyb2xQb2ludCAqIGNwLCBHUXVldWUgKiByZXMpCi17Ci0gIGdfcXVldWVfcHVzaF90YWlsIChyZXMsIGNwKTsKLX0KLQotLyoqCi0gKiBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2FsbDoKLSAqIEBzZWxmOiB0aGUgI0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIHRvIGdldCB0aGUgbGlzdCBmcm9tCi0gKgotICogUmV0dXJucyBhIHJlYWQtb25seSBjb3B5IG9mIHRoZSBsaXN0IG9mICNHc3RUaW1lZFZhbHVlIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuCi0gKiBGcmVlIHRoZSBsaXN0IGFmdGVyIGRvbmUgd2l0aCBpdC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgY29udGFpbmVyKSAoZWxlbWVudC10eXBlIEdzdFRpbWVkVmFsdWUpOiBhIGNvcHkKLSAqIG9mIHRoZSBsaXN0LCBvciAlTlVMTCBpZiB0aGUgcHJvcGVydHkgaXNuJ3QgaGFuZGxlZCBieSB0aGUgY29udHJvbGxlcgotICovCi1HTGlzdCAqCi1nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2FsbCAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmKQotewotICBHUXVldWUgcmVzID0gR19RVUVVRV9JTklUOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0UgKHNlbGYpLCBOVUxMKTsKLQotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgaWYgKEdfTElLRUxZIChzZWxmLT52YWx1ZXMpKQotICAgIGdfc2VxdWVuY2VfZm9yZWFjaCAoc2VsZi0+dmFsdWVzLCAoR0Z1bmMpIF9hcHBlbmRfY29udHJvbF9wb2ludCwgJnJlcyk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgcmV0dXJuIHJlcy5oZWFkOwotfQotCi0vKioKLSAqIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfY291bnQ6Ci0gKiBAc2VsZjogdGhlICNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSB0byBnZXQgdGhlIG51bWJlciBvZiB2YWx1ZXMgZnJvbQotICoKLSAqIEdldCB0aGUgbnVtYmVyIG9mIGNvbnRyb2wgcG9pbnRzIHRoYXQgYXJlIHNldC4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGNvbnRyb2wgcG9pbnRzIHRoYXQgYXJlIHNldC4KLSAqLwotZ2ludAotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFIChzZWxmKSwgMCk7Ci0gIHJldHVybiBzZWxmLT5udmFsdWVzOwotfQotCi0vKioKLSAqIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX2ludmFsaWRhdGVfY2FjaGU6Ci0gKiBAc2VsZjogdGhlICNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZQotICoKLSAqIFJlc2V0IHRoZSBjb250cm9sbGVkIHZhbHVlIGNhY2hlLgotICovCi12b2lkCi1nc3RfdGltZWRfdmFsdWVfY29udHJvbF9pbnZhbGlkYXRlX2NhY2hlIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqIHNlbGYpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRSAoc2VsZikpOwotICBzZWxmLT52YWxpZF9jYWNoZSA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2luaXQgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZikKLXsKLSAgZ19tdXRleF9pbml0ICgmc2VsZi0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZmluYWxpemUgKEdPYmplY3QgKiBvYmopCi17Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICpzZWxmID0gR1NUX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFIChvYmopOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfcmVzZXQgKHNlbGYpOwotICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICBnX211dGV4X2NsZWFyICgmc2VsZi0+bG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmopOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2NsYXNzX2luaXQgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlQ2xhc3MKLSAgICAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICAvL0dzdENvbnRyb2xTb3VyY2VDbGFzcyAqY3NvdXJjZV9jbGFzcyA9IEdTVF9DT05UUk9MX1NPVVJDRV9DTEFTUyAoa2xhc3MpOwotCi0gIC8qKgotICAgKiBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTo6dmFsdWUtY2hhbmdlZAotICAgKiBAc2VsZjogVGhlICNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSBvbiB3aGljaCBhICNHc3RUaW1lZFZhbHVlIGhhcyBjaGFuZ2VkCi0gICAqIEB0aW1lZF92YWx1ZTogVGhlICNHc3RUaW1lZFZhbHVlIHdoZXJlIHRoZSB2YWx1ZSBjaGFuZ2VkCi0gICAqCi0gICAqIEVtaXRlZCByaWdodCBhZnRlciB0aGUgbmV3IHZhbHVlIGhhcyBiZWVuIHNldCBvbiBAdGltZWRfc2lnbmFscwotICAgKgotICAgKiBTaW5jZTogMS42Ci0gICAqLwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2lnbmFsc1tWQUxVRV9DSEFOR0VEX1NJR05BTF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgidmFsdWUtY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fRklSU1QsIDAsIE5VTEwsCi0gICAgICBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsCi0gICAgICBnc3RfY29udHJvbF9wb2ludF9nZXRfdHlwZSAoKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlOjp2YWx1ZS1hZGRlZAotICAgKiBAc2VsZjogVGhlICNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSBpbnRvIHdoaWNoIGEgI0dzdFRpbWVkVmFsdWUgaGFzIGJlZW4KLSAgICogICAgICAgIGFkZGVkCi0gICAqIEB0aW1lZF92YWx1ZTogVGhlIG5ld2x5IGFkZGVkICNHc3RUaW1lZFZhbHVlCi0gICAqCi0gICAqIEVtaXRlZCByaWdodCBhZnRlciB0aGUgbmV3IHZhbHVlIGhhcyBiZWVuIGFkZGVkIHRvIEBzZWxmCi0gICAqCi0gICAqIFNpbmNlOiAxLjYKLSAgICovCi0gIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zaWduYWxzW1ZBTFVFX0FEREVEX1NJR05BTF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgidmFsdWUtYWRkZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0ZJUlNULCAwLCBOVUxMLAotICAgICAgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAxLAotICAgICAgZ3N0X2NvbnRyb2xfcG9pbnRfZ2V0X3R5cGUgKCkpOwotCi0gIC8qKgotICAgKiBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZTo6dmFsdWUtcmVtb3ZlZAotICAgKiBAc2VsZjogVGhlICNHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSBmcm9tIHdoaWNoIGEgI0dzdFRpbWVkVmFsdWUgaGFzIGJlZW4KLSAgICogICAgICAgIHJlbW92ZWQKLSAgICogQHRpbWVkX3ZhbHVlOiBUaGUgcmVtb3ZlZCAjR3N0VGltZWRWYWx1ZQotICAgKgotICAgKiBFbWl0ZWQgd2hlbiBAdGltZWRfdmFsdWUgaXMgcmVtb3ZlZCBmcm9tIEBzZWxmCi0gICAqCi0gICAqIFNpbmNlOiAxLjYKLSAgICovCi0gIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zaWduYWxzW1ZBTFVFX1JFTU9WRURfU0lHTkFMXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJ2YWx1ZS1yZW1vdmVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9GSVJTVCwgMCwgTlVMTCwKLSAgICAgIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwKLSAgICAgIGdzdF9jb250cm9sX3BvaW50X2dldF90eXBlICgpKTsKLQotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2ZpbmFsaXplOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODE0ODRmLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICogICAgICAgICAgICAgICAyMDExIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuaDogQmFzZSBjbGFzcyBmb3IgdGltZWVkIHZhbHVlIGJhc2VkIGNvbnRyb2wKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFX0hfXwotI2RlZmluZSBfX0dTVF9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRV9IX18KLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdGNvbnRyb2xzb3VyY2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFIFwKLSAgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRSwgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UpKQotI2RlZmluZSBHU1RfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0VfQ0xBU1ModnRhYmxlKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKHZ0YWJsZSksIEdTVF9UWVBFX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFLCBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRSkpCi0jZGVmaW5lIEdTVF9JU19USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRV9DTEFTUyh2dGFibGUpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgodnRhYmxlKSwgR1NUX1RZUEVfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0UpKQotI2RlZmluZSBHU1RfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0VfR0VUX0NMQVNTKGluc3QpIFwKLSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChpbnN0KSwgR1NUX1RZUEVfVElNRURfVkFMVUVfQ09OVFJPTF9TT1VSQ0UsIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2VDbGFzcyBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlUHJpdmF0ZSBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZVByaXZhdGU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0Q29udHJvbFBvaW50IEdzdENvbnRyb2xQb2ludDsKLQotLyoqCi0gKiBHc3RDb250cm9sUG9pbnQ6Ci0gKiBAdGltZXN0YW1wOiB0aW1lc3RhbXAgb2YgdGhlIHZhbHVlIGNoYW5nZQotICogQHZhbHVlOiB0aGUgbmV3IHZhbHVlCi0gKgotICogQW4gaW50ZXJuYWwgc3RydWN0dXJlIGZvciB2YWx1ZSt0aW1lIGFuZCB2YXJpb3VzIHRlbXBvcmFyeQotICogdmFsdWVzIHVzZWQgZm9yIGludGVycG9sYXRpb24uIFRoaXMgImluaGVyaXRzIiBmcm9tCi0gKiBHc3RUaW1lZFZhbHVlLgotICovCi1zdHJ1Y3QgX0dzdENvbnRyb2xQb2ludAotewotICAvKiBmaWVsZHMgZnJvbSBHc3RUaW1lZFZhbHVlLiBETyBOT1QgQ0hBTkdFISAqLwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBnZG91YmxlIHZhbHVlOwotCi0gIC8qPCBwcml2YXRlID4qLwotCi0gIC8qIENhY2hlcyBmb3IgdGhlIGludGVycG9sYXRvcnMgKi8KLSAgLyogRklYTUU6IHdlIHNob3VsZCBub3QgaGF2ZSB0aGlzIGhlcmUgYWxyZWFkeSAuLi4gKi8KLSAgdW5pb24gewotICAgIHN0cnVjdCB7IC8qIDE2IGJ5dGVzICovCi0gICAgICBnZG91YmxlIGg7Ci0gICAgICBnZG91YmxlIHo7Ci0gICAgfSBjdWJpYzsKLSAgICBzdHJ1Y3QgeyAvKiAyNCBieXRlcyAqLwotICAgICAgZ2RvdWJsZSBjMXMsIGMycywgYzNzOwotICAgIH0gY3ViaWNfbW9ub3RvbmljOwotICAgIGd1aW50OCBfZ3N0X3Jlc2VydmVkWzY0XTsKLSAgfSBjYWNoZTsKLX07Ci0KLUdUeXBlIGdzdF9jb250cm9sX3BvaW50X2dldF90eXBlICh2b2lkKTsKLQotLyoqCi0gKiBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZToKLSAqCi0gKiBUaGUgaW5zdGFuY2Ugc3RydWN0dXJlIG9mICNHc3RDb250cm9sU291cmNlLgotICovCi1zdHJ1Y3QgX0dzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIHsKLSAgR3N0Q29udHJvbFNvdXJjZSBwYXJlbnQ7Ci0KLSAgLyo8IHByb3RlY3RlZCA+Ki8KLSAgR011dGV4IGxvY2s7Ci0KLSAgR1NlcXVlbmNlICp2YWx1ZXM7ICAgICAgICAgICAgLyogTGlzdCBvZiBHc3RDb250cm9sUG9pbnQgKi8KLSAgZ2ludCBudmFsdWVzOyAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGNvbnRyb2wgcG9pbnRzICovCi0gIGdib29sZWFuIHZhbGlkX2NhY2hlOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZVByaXZhdGUgKnByaXY7Ci0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzIHsKLSAgR3N0Q29udHJvbFNvdXJjZUNsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0jZGVmaW5lIEdTVF9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRV9MT0NLKG8pIFwKLSAgZ19tdXRleF9sb2NrKCYoKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopbyktPmxvY2spCi0jZGVmaW5lIEdTVF9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRV9VTkxPQ0sobykgXAotICBnX211dGV4X3VubG9jaygmKChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKW8pLT5sb2NrKQotCi1HVHlwZSBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi0vKiBGdW5jdGlvbnMgKi8KLQotR1NlcXVlbmNlSXRlciAqIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9maW5kX2NvbnRyb2xfcG9pbnRfaXRlciAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqIHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgICAgICAgICAgICAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdkb3VibGUgdmFsdWUpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0ICAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1NMaXN0ICogdGltZWR2YWx1ZXMpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV91bnNldCAgICAgICAgICAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCk7Ci12b2lkICAgICAgICAgICAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbCAgICAgIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqc2VsZik7Ci1HTGlzdCAqICAgICAgICAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9hbGwgICAgICAgIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqIHNlbGYpOwotZ2ludCAgICAgICAgICAgIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfY291bnQgICAgICAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmKTsKLXZvaWQgICAgICAgICAgICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9pbnZhbGlkYXRlX2NhY2hlICAgICAgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICogc2VsZik7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5jIGIvbGlicy9nc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDA1MjVmLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2NvbnRyb2xsZXIvZ3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqICAgICAgICAgICAgICAgMjAxMSBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdHRyaWdnZXJjb250cm9sc291cmNlLmM6IENvbnRyb2wgc291cmNlIHRoYXQgcHJvdmlkZXMgc29tZSB2YWx1ZXMgYXQgdGltZS0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW1wcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSAvKioKLSAqIFNFQ1RJT046Z3N0dHJpZ2dlcmNvbnRyb2xzb3VyY2UKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogdHJpZ2dlciBjb250cm9sIHNvdXJjZQotICoKLSAqICNHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSBpcyBhICNHc3RDb250cm9sU291cmNlLCB0aGF0IHJldHVybnMgdmFsdWVzIGZyb20gdXNlci1naXZlbgotICogY29udHJvbCBwb2ludHMuIEl0IGFsbG93cyBmb3IgYSB0b2xlcmFuY2Ugb24gdGhlIHRpbWUtc3RhbXBzLgotICoKLSAqIFRvIHVzZSAjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UgZ2V0IGEgbmV3IGluc3RhbmNlIGJ5IGNhbGxpbmcKLSAqIGdzdF90cmlnZ2VyX2NvbnRyb2xfc291cmNlX25ldygpLCBiaW5kIGl0IHRvIGEgI0dQYXJhbVNwZWMgYW5kIHNldCBzb21lCi0gKiBjb250cm9sIHBvaW50cyBieSBjYWxsaW5nIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQoKS4KLSAqCi0gKiBBbGwgZnVuY3Rpb25zIGFyZSBNVC1zYWZlLgotICovCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdHRyaWdnZXJjb250cm9sc291cmNlLmgiCi0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3QvbWF0aC1jb21wYXQuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgY29udHJvbGxlcl9kZWJ1ZwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKLQotc3RydWN0IF9Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZVByaXZhdGUKLXsKLSAgZ2ludDY0IHRvbGVyYW5jZTsKLX07Ci0KLS8qIGNvbnRyb2wgcG9pbnQgYWNjZXNzb3JzICovCi0KLS8qICByZXR1cm5zIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSwgZXhjZXB0IGZvciB0aW1lcyB3aXRoIHNwZWNpZmljIHZhbHVlcyAqLwotLyogIG5lZWRlZCBmb3Igb25lLXNob3QgZXZlbnRzLCBzdWNoIGFzIG5vdGVzIGFuZCB0cmlnZ2VycyAqLwotCi1zdGF0aWMgaW5saW5lIGdkb3VibGUKLV9pbnRlcnBvbGF0ZV90cmlnZ2VyIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqIHNlbGYsIEdTZXF1ZW5jZUl0ZXIgKiBpdGVyLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCi17Ci0gIEdzdENvbnRyb2xQb2ludCAqY3A7Ci0gIGdpbnQ2NCB0b2xlcmFuY2UgPSAoKEdzdFRyaWdnZXJDb250cm9sU291cmNlICopIHNlbGYpLT5wcml2LT50b2xlcmFuY2U7Ci0gIGdib29sZWFuIGZvdW5kID0gRkFMU0U7Ci0KLSAgY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcik7Ci0gIGlmIChHU1RfQ0xPQ0tfRElGRiAoY3AtPnRpbWVzdGFtcCwgdGltZXN0YW1wKSA8PSB0b2xlcmFuY2UpIHsKLSAgICBmb3VuZCA9IFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKChpdGVyID0gZ19zZXF1ZW5jZV9pdGVyX25leHQgKGl0ZXIpKSAmJiAhZ19zZXF1ZW5jZV9pdGVyX2lzX2VuZCAoaXRlcikpIHsKLSAgICAgIGNwID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOwotICAgICAgaWYgKEdTVF9DTE9DS19ESUZGICh0aW1lc3RhbXAsIGNwLT50aW1lc3RhbXApIDw9IHRvbGVyYW5jZSkgewotICAgICAgICBmb3VuZCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChmb3VuZCkgewotICAgIHJldHVybiBjcC0+dmFsdWU7Ci0gIH0KLSAgcmV0dXJuIE5BTjsKLX0KLQotc3RhdGljIGdib29sZWFuCi1pbnRlcnBvbGF0ZV90cmlnZ2VyX2dldCAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGdkb3VibGUgKiB2YWx1ZSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdTZXF1ZW5jZUl0ZXIgKml0ZXI7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgaXRlciA9Ci0gICAgICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZmluZF9jb250cm9sX3BvaW50X2l0ZXIgKHNlbGYsIHRpbWVzdGFtcCk7Ci0gIGlmIChpdGVyKSB7Ci0gICAgKnZhbHVlID0gX2ludGVycG9sYXRlX3RyaWdnZXIgKHNlbGYsIGl0ZXIsIHRpbWVzdGFtcCk7Ci0gICAgaWYgKCFpc25hbiAoKnZhbHVlKSkKLSAgICAgIHJldCA9IFRSVUU7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1pbnRlcnBvbGF0ZV90cmlnZ2VyX2dldF92YWx1ZV9hcnJheSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgZ2RvdWJsZSAqIHZhbHVlcykKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGd1aW50IGk7Ci0gIEdzdENsb2NrVGltZSB0cyA9IHRpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lIG5leHRfdHMgPSAwOwotICBnZG91YmxlIHZhbDsKLSAgR1NlcXVlbmNlSXRlciAqaXRlcjEgPSBOVUxMLCAqaXRlcjIgPSBOVUxMOwotICBnYm9vbGVhbiB0cmlnZ2VyZWQgPSBGQUxTRTsKLQotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgZm9yIChpID0gMDsgaSA8IG5fdmFsdWVzOyBpKyspIHsKLSAgICB2YWwgPSBOQU47Ci0gICAgaWYgKHRzID49IG5leHRfdHMpIHsKLSAgICAgIGl0ZXIxID0gZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyIChzZWxmLCB0cyk7Ci0gICAgICBpZiAoIWl0ZXIxKSB7Ci0gICAgICAgIGlmIChHX0xJS0VMWSAoc2VsZi0+dmFsdWVzKSkKLSAgICAgICAgICBpdGVyMiA9IGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKHNlbGYtPnZhbHVlcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBpdGVyMiA9IE5VTEw7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpdGVyMiA9IGdfc2VxdWVuY2VfaXRlcl9uZXh0IChpdGVyMSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpdGVyMiAmJiAhZ19zZXF1ZW5jZV9pdGVyX2lzX2VuZCAoaXRlcjIpKSB7Ci0gICAgICAgIEdzdENvbnRyb2xQb2ludCAqY3A7Ci0KLSAgICAgICAgY3AgPSBnX3NlcXVlbmNlX2dldCAoaXRlcjIpOwotICAgICAgICBuZXh0X3RzID0gY3AtPnRpbWVzdGFtcDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG5leHRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgfQotCi0gICAgICBpZiAoaXRlcjEpIHsKLSAgICAgICAgdmFsID0gX2ludGVycG9sYXRlX3RyaWdnZXIgKHNlbGYsIGl0ZXIxLCB0cyk7Ci0gICAgICAgIGlmICghaXNuYW4gKHZhbCkpCi0gICAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICAgIHRyaWdnZXJlZCA9IFRSVUU7Ci0gICAgfSBlbHNlIGlmICh0cmlnZ2VyZWQpIHsKLSAgICAgIGlmIChpdGVyMSkgewotICAgICAgICB2YWwgPSBfaW50ZXJwb2xhdGVfdHJpZ2dlciAoc2VsZiwgaXRlcjEsIHRzKTsKLSAgICAgICAgaWYgKCFpc25hbiAodmFsKSkKLSAgICAgICAgICByZXQgPSBUUlVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgICAgdHJpZ2dlcmVkID0gRkFMU0U7Ci0gICAgfQotICAgICp2YWx1ZXMgPSB2YWw7Ci0gICAgdHMgKz0gaW50ZXJ2YWw7Ci0gICAgdmFsdWVzKys7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotZW51bQotewotICBQUk9QX1RPTEVSQU5DRSA9IDEsCi19OwotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKEdTVF9DQVRfREVGQVVMVCwgInRyaWdnZXIgY29udHJvbCBzb3VyY2UiLCAwLCBcCi0gICAgInRpbWVsaW5lIHZhbHVlIHRyaWdnZXIgY29udHJvbCBzb3VyY2UiKQotCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UsIGdzdF90cmlnZ2VyX2NvbnRyb2xfc291cmNlLAotICAgIEdTVF9UWVBFX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFLCBfZG9faW5pdCk7Ci0KLS8qKgotICogZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfbmV3OgotICoKLSAqIFRoaXMgcmV0dXJucyBhIG5ldywgdW5ib3VuZCAjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldywgdW5ib3VuZCAjR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UuCi0gKi8KLUdzdENvbnRyb2xTb3VyY2UgKgotZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfbmV3ICh2b2lkKQotewotICByZXR1cm4gZ19vYmplY3RfbmV3diAoR1NUX1RZUEVfVFJJR0dFUl9DT05UUk9MX1NPVVJDRSwgMCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9pbml0IChHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSAqIHNlbGYpCi17Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzb3VyY2UgPSAoR3N0Q29udHJvbFNvdXJjZSAqKSBzZWxmOwotCi0gIHNlbGYtPnByaXYgPQotICAgICAgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChzZWxmLCBHU1RfVFlQRV9UUklHR0VSX0NPTlRST0xfU09VUkNFLAotICAgICAgR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2VQcml2YXRlKTsKLQotICBjc291cmNlLT5nZXRfdmFsdWUgPSAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBpbnRlcnBvbGF0ZV90cmlnZ2VyX2dldDsKLSAgY3NvdXJjZS0+Z2V0X3ZhbHVlX2FycmF5ID0gKEdzdENvbnRyb2xTb3VyY2VHZXRWYWx1ZUFycmF5KQotICAgICAgaW50ZXJwb2xhdGVfdHJpZ2dlcl9nZXRfdmFsdWVfYXJyYXk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UgKnNlbGYgPSBHU1RfVFJJR0dFUl9DT05UUk9MX1NPVVJDRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVE9MRVJBTkNFOgotICAgICAgR1NUX1RJTUVEX1ZBTFVFX0NPTlRST0xfU09VUkNFX0xPQ0sgKHNlbGYpOwotICAgICAgc2VsZi0+cHJpdi0+dG9sZXJhbmNlID0gZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKTsKLSAgICAgIEdTVF9USU1FRF9WQUxVRV9DT05UUk9MX1NPVVJDRV9VTkxPQ0sgKHNlbGYpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFRyaWdnZXJDb250cm9sU291cmNlICpzZWxmID0gR1NUX1RSSUdHRVJfQ09OVFJPTF9TT1VSQ0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1RPTEVSQU5DRToKLSAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgc2VsZi0+cHJpdi0+dG9sZXJhbmNlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90cmlnZ2VyX2NvbnRyb2xfc291cmNlX2NsYXNzX2luaXQgKEdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdFRyaWdnZXJDb250cm9sU291cmNlUHJpdmF0ZSkpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF90cmlnZ2VyX2NvbnRyb2xfc291cmNlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVE9MRVJBTkNFLAotICAgICAgZ19wYXJhbV9zcGVjX2ludDY0ICgidG9sZXJhbmNlIiwgIlRvbGVyYW5jZSIsCi0gICAgICAgICAgIkFtb3VudCBvZiBucyBhIGNvbnRyb2wgdGltZSBjYW4gYmUgb2ZmIHRvIHN0aWxsIHRyaWdnZXIiLAotICAgICAgICAgIDAsIEdfTUFYSU5UNjQsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmggYi9saWJzL2dzdC9jb250cm9sbGVyL2dzdHRyaWdnZXJjb250cm9sc291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWYyMWMuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAxMSBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdHRyaWdnZXJjb250cm9sc291cmNlLmg6IENvbnRyb2wgc291cmNlIHRoYXQgcHJvdmlkZXMgc29tZSB2YWx1ZXMgYXQgdGltZS0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW1wcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9UUklHR0VSX0NPTlRST0xfU09VUkNFX0hfXwotI2RlZmluZSBfX0dTVF9UUklHR0VSX0NPTlRST0xfU09VUkNFX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3R0aW1lZHZhbHVlY29udHJvbHNvdXJjZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVFJJR0dFUl9DT05UUk9MX1NPVVJDRSBcCi0gIChnc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RSSUdHRVJfQ09OVFJPTF9TT1VSQ0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1RSSUdHRVJfQ09OVFJPTF9TT1VSQ0UsIEdzdFRyaWdnZXJDb250cm9sU291cmNlKSkKLSNkZWZpbmUgR1NUX1RSSUdHRVJfQ09OVFJPTF9TT1VSQ0VfQ0xBU1ModnRhYmxlKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKHZ0YWJsZSksIEdTVF9UWVBFX1RSSUdHRVJfQ09OVFJPTF9TT1VSQ0UsIEdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVFJJR0dFUl9DT05UUk9MX1NPVVJDRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfVFJJR0dFUl9DT05UUk9MX1NPVVJDRSkpCi0jZGVmaW5lIEdTVF9JU19UUklHR0VSX0NPTlRST0xfU09VUkNFX0NMQVNTKHZ0YWJsZSkgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKCh2dGFibGUpLCBHU1RfVFlQRV9UUklHR0VSX0NPTlRST0xfU09VUkNFKSkKLSNkZWZpbmUgR1NUX1RSSUdHRVJfQ09OVFJPTF9TT1VSQ0VfR0VUX0NMQVNTKGluc3QpIFwKLSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChpbnN0KSwgR1NUX1RZUEVfVFJJR0dFUl9DT05UUk9MX1NPVVJDRSwgR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2VDbGFzcykpCi0KLSNkZWZpbmUgR1NUX1RZUEVfVFJJR0dFUl9XQVZFRk9STSAoZ3N0X3RyaWdnZXJfd2F2ZWZvcm1fZ2V0X3R5cGUgKCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSBHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZUNsYXNzIEdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2VQcml2YXRlIEdzdFRyaWdnZXJDb250cm9sU291cmNlUHJpdmF0ZTsKLQotLyoqCi0gKiBHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZToKLSAqCi0gKiBUaGUgaW5zdGFuY2Ugc3RydWN0dXJlIG9mICNHc3RDb250cm9sU291cmNlLgotICovCi1zdHJ1Y3QgX0dzdFRyaWdnZXJDb250cm9sU291cmNlIHsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgcGFyZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZVByaXZhdGUgKnByaXY7Ci0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3RUcmlnZ2VyQ29udHJvbFNvdXJjZUNsYXNzIHsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2VDbGFzcyBwYXJlbnRfY2xhc3M7Ci0gIAotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1HVHlwZSBnc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9nZXRfdHlwZSAodm9pZCk7Ci0KLS8qIEZ1bmN0aW9ucyAqLwotCi1Hc3RDb250cm9sU291cmNlICpnc3RfdHJpZ2dlcl9jb250cm9sX3NvdXJjZV9uZXcgKHZvaWQpOwotCi0jaWZkZWYgR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKLUdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DKEdzdFRyaWdnZXJDb250cm9sU291cmNlLCBnc3Rfb2JqZWN0X3VucmVmKQotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9UUklHR0VSX0NPTlRST0xfU09VUkNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbSBiL2xpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNjc3NzkuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvaGVscGVycy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLWlmIEVOQUJMRV9CQVNIX0NPTVBMRVRJT04KLWJpbl9QUk9HUkFNUyA9IGdzdC1jb21wbGV0aW9uLWhlbHBlci1AR1NUX0FQSV9WRVJTSU9OQAotCi1nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfU09VUkNFUyA9IGdzdC1jb21wbGV0aW9uLWhlbHBlci5jCi1nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotCi1iYXNoaGVscGVyc2RpciA9ICQoQkFTSF9IRUxQRVJTX0RJUikKLWRpc3RfYmFzaGhlbHBlcnNfREFUQSA9IGdzdAotZW5kaWYKLQotaGVscGVyc19QUk9HUkFNUyA9IGdzdC1wbHVnaW4tc2Nhbm5lcgotaGVscGVyc2Rpcj0kKGxpYmV4ZWNkaXIpL2dzdHJlYW1lci0kKEdTVF9BUElfVkVSU0lPTikKLQotZ3N0X3BsdWdpbl9zY2FubmVyX1NPVVJDRVMgPSBnc3QtcGx1Z2luLXNjYW5uZXIuYwotZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1nc3RfcGx1Z2luX3NjYW5uZXJfTERBREQgPSAkKEdTVF9PQkpfTElCUykKLQotaWYgSEFWRV9QVFAKLWhlbHBlcnNfUFJPR1JBTVMgKz0gZ3N0LXB0cC1oZWxwZXIKLWdzdF9wdHBfaGVscGVyX1NPVVJDRVMgPSBnc3QtcHRwLWhlbHBlci5jCi1nc3RfcHRwX2hlbHBlcl9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpCi1nc3RfcHRwX2hlbHBlcl9MREFERCA9ICQoR1NUX09CSl9MSUJTKSAkKEdJT19MSUJTKSAkKENBUF9MSUJTKQotZW5kaWYKLQotaWYgRU5BQkxFX0JBU0hfQ09NUExFVElPTgotaW5zdGFsbC1leGVjLWhvb2s6Ci0JJChNS0RJUl9QKSAkKERFU1RESVIpJChCQVNIX0hFTFBFUlNfRElSKSAmJiBcCi0JY2QgJChERVNURElSKSQoYmluZGlyKSAmJiBcCi0JJChJTlNUQUxMKSBgZWNobyAiZ3N0LWNvbXBsZXRpb24taGVscGVyLSIgfCBzZWQgJyQodHJhbnNmb3JtKSdgQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCkgXAotICAgICAgICAkKERFU1RESVIpJChCQVNIX0hFTFBFUlNfRElSKS9nc3QtY29tcGxldGlvbi1oZWxwZXItQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCkgJiYgXAotCXJtIGBlY2hvICJnc3QtY29tcGxldGlvbi1oZWxwZXItIiB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2BAR1NUX0FQSV9WRVJTSU9OQCQoRVhFRVhUKQotCi11bmluc3RhbGwtaG9vazoKLQlybSAtZiAkKERFU1RESVIpJChCQVNIX0hFTFBFUlNfRElSKS9nc3QtY29tcGxldGlvbi1oZWxwZXItQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCkKLWVuZGlmCi0KLWluc3RhbGwtZGF0YS1ob29rOgotaWYgSEFWRV9QVFAKLWlmIEhBVkVfUFRQX0hFTFBFUl9TRVRVSUQKLQktIGNob3duIHJvb3QgJChERVNURElSKSQoaGVscGVyc2RpcikvZ3N0LXB0cC1oZWxwZXIKLQktIGNobW9kIHUrcyAkKERFU1RESVIpJChoZWxwZXJzZGlyKS9nc3QtcHRwLWhlbHBlcgotZW5kaWYKLWlmIEhBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVMKLQktICQoU0VUQ0FQKSBjYXBfbmV0X2JpbmRfc2VydmljZSxjYXBfbmV0X2FkbWluK2VwICQoREVTVERJUikkKGhlbHBlcnNkaXIpL2dzdC1wdHAtaGVscGVyCi1lbmRpZgotZW5kaWYKLQotIyBjbGVhbiBvdXQgdGhlIG9sZCBvbmUgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgdWRwYXRlZCBjb3JyZWN0bHkKLSMgcmVtb3ZlIGFnYWluIGFmdGVyIHJlbGVhc2UKLUNMRUFORklMRVMgPSBwbHVnaW4tc2Nhbm5lcgotCi1pZiBFTkFCTEVfQkFTSF9DT01QTEVUSU9OCi1DTEVBTkZJTEVTICs9IGdzdC1jb21wbGV0aW9uLWhlbHBlci1AR1NUX0FQSV9WRVJTSU9OQAotZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuaW4gYi9saWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWU4M2VkLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMDY5ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLUBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUVAYmluX1BST0dSQU1TID0gZ3N0LWNvbXBsZXRpb24taGVscGVyLUBHU1RfQVBJX1ZFUlNJT05AJChFWEVFWFQpCi1oZWxwZXJzX1BST0dSQU1TID0gZ3N0LXBsdWdpbi1zY2FubmVyJChFWEVFWFQpICQoYW1fX0VYRUVYVF8xKQotQEhBVkVfUFRQX1RSVUVAYW1fX2FwcGVuZF8xID0gZ3N0LXB0cC1oZWxwZXIKLUBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUVAYW1fX2FwcGVuZF8yID0gZ3N0LWNvbXBsZXRpb24taGVscGVyLUBHU1RfQVBJX1ZFUlNJT05ACi1zdWJkaXIgPSBsaWJzL2dzdC9oZWxwZXJzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fZGlzdF9iYXNoaGVscGVyc19EQVRBX0RJU1QpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoaGVscGVyc2RpcikiIFwKLQkiJChERVNURElSKSQoYmFzaGhlbHBlcnNkaXIpIgotQEhBVkVfUFRQX1RSVUVAYW1fX0VYRUVYVF8xID0gZ3N0LXB0cC1oZWxwZXIkKEVYRUVYVCkKLVBST0dSQU1TID0gJChiaW5fUFJPR1JBTVMpICQoaGVscGVyc19QUk9HUkFNUykKLWFtX19nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfU09VUkNFU19ESVNUID0gIFwKLQlnc3QtY29tcGxldGlvbi1oZWxwZXIuYwotQEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fVFJVRUBhbV9nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUyA9IGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtY29tcGxldGlvbi1oZWxwZXIuJChPQkpFWFQpCi1nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUyA9ICBcCi0JJChhbV9nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1ARU5BQkxFX0JBU0hfQ09NUExFVElPTl9UUlVFQGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9ERVBFTkRFTkNJRVMgPSAgXAotQEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSBcCi0JLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpIFwKLQkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1hbV9nc3RfcGx1Z2luX3NjYW5uZXJfT0JKRUNUUyA9ICBcCi0JZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci4kKE9CSkVYVCkKLWdzdF9wbHVnaW5fc2Nhbm5lcl9PQkpFQ1RTID0gJChhbV9nc3RfcGx1Z2luX3NjYW5uZXJfT0JKRUNUUykKLWdzdF9wbHVnaW5fc2Nhbm5lcl9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9wbHVnaW5fc2Nhbm5lcl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWFtX19nc3RfcHRwX2hlbHBlcl9TT1VSQ0VTX0RJU1QgPSBnc3QtcHRwLWhlbHBlci5jCi1ASEFWRV9QVFBfVFJVRUBhbV9nc3RfcHRwX2hlbHBlcl9PQkpFQ1RTID0gIFwKLUBIQVZFX1BUUF9UUlVFQAlnc3RfcHRwX2hlbHBlci1nc3QtcHRwLWhlbHBlci4kKE9CSkVYVCkKLWdzdF9wdHBfaGVscGVyX09CSkVDVFMgPSAkKGFtX2dzdF9wdHBfaGVscGVyX09CSkVDVFMpCi1ASEFWRV9QVFBfVFJVRUBnc3RfcHRwX2hlbHBlcl9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotQEhBVkVfUFRQX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9wdHBfaGVscGVyX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChnc3RfcHRwX2hlbHBlcl9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gXAotCSRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfU09VUkNFUykgXAotCSQoZ3N0X3BsdWdpbl9zY2FubmVyX1NPVVJDRVMpICQoZ3N0X3B0cF9oZWxwZXJfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICBcCi0JJChhbV9fZ3N0X2NvbXBsZXRpb25faGVscGVyX0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVNfRElTVCkgXAotCSQoZ3N0X3BsdWdpbl9zY2FubmVyX1NPVVJDRVMpIFwKLQkkKGFtX19nc3RfcHRwX2hlbHBlcl9TT1VSQ0VTX0RJU1QpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX2Rpc3RfYmFzaGhlbHBlcnNfREFUQV9ESVNUID0gZ3N0Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLURBVEEgPSAkKGRpc3RfYmFzaGhlbHBlcnNfREFUQSkKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ARU5BQkxFX0JBU0hfQ09NUExFVElPTl9UUlVFQGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9TT1VSQ0VTID0gZ3N0LWNvbXBsZXRpb24taGVscGVyLmMKLUBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUVAZ3N0X2NvbXBsZXRpb25faGVscGVyX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1ARU5BQkxFX0JBU0hfQ09NUExFVElPTl9UUlVFQGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotQEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fVFJVRUBiYXNoaGVscGVyc2RpciA9ICQoQkFTSF9IRUxQRVJTX0RJUikKLUBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUVAZGlzdF9iYXNoaGVscGVyc19EQVRBID0gZ3N0Ci1oZWxwZXJzZGlyID0gJChsaWJleGVjZGlyKS9nc3RyZWFtZXItJChHU1RfQVBJX1ZFUlNJT04pCi1nc3RfcGx1Z2luX3NjYW5uZXJfU09VUkNFUyA9IGdzdC1wbHVnaW4tc2Nhbm5lci5jCi1nc3RfcGx1Z2luX3NjYW5uZXJfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWdzdF9wbHVnaW5fc2Nhbm5lcl9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotQEhBVkVfUFRQX1RSVUVAZ3N0X3B0cF9oZWxwZXJfU09VUkNFUyA9IGdzdC1wdHAtaGVscGVyLmMKLUBIQVZFX1BUUF9UUlVFQGdzdF9wdHBfaGVscGVyX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoR0lPX0NGTEFHUykKLUBIQVZFX1BUUF9UUlVFQGdzdF9wdHBfaGVscGVyX0xEQUREID0gJChHU1RfT0JKX0xJQlMpICQoR0lPX0xJQlMpICQoQ0FQX0xJQlMpCi0KLSMgY2xlYW4gb3V0IHRoZSBvbGQgb25lIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHVkcGF0ZWQgY29ycmVjdGx5Ci0jIHJlbW92ZSBhZ2FpbiBhZnRlciByZWxlYXNlCi1DTEVBTkZJTEVTID0gcGx1Z2luLXNjYW5uZXIgJChhbV9fYXBwZW5kXzIpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9oZWxwZXJzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGxpYnMvZ3N0L2hlbHBlcnMvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci1pbnN0YWxsLWJpblBST0dSQU1TOiAkKGJpbl9QUk9HUkFNUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGJpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIgfHwgZXhpdCAxOyBcCi0JZmk7IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKLQl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIFwKLQkgfHwgdGVzdCAtZiAkJHAxIFwKLQkgIDsgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCi0JZG9uZSB8IFwKLQlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIFwKLQkgICAgLWUgJ3N8Lip8LnwnIFwKLQkgICAgLWUgJ3A7eDtzLC4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJyB8IFwKLQlzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKLQkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxIH0gXAotCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAotCSAgICBpZiAoJCQyID09ICQkNCkgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCi0JICAgIGVsc2UgeyBwcmludCAiZiIsICQkMyAiLyIgJCQ0LCAkJDE7IH0gfSBcCi0JICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCi0Jd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAotCSAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKLQkgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCi0JICAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAnJChERVNURElSKSQoYmluZGlyKSQkZGlyJyI7IFwKLQkgICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgIiQoREVTVERJUikkKGJpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKLQkgICAgfSBcCi0JOyBkb25lCi0KLXVuaW5zdGFsbC1iaW5QUk9HUkFNUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKLQkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCi0JICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgXAotCWA7IFwKLQl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLQljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcwotCi1jbGVhbi1iaW5QUk9HUkFNUzoKLQlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci1pbnN0YWxsLWhlbHBlcnNQUk9HUkFNUzogJChoZWxwZXJzX1BST0dSQU1TKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKGhlbHBlcnNfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChoZWxwZXJzZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChoZWxwZXJzZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChoZWxwZXJzZGlyKSIgfHwgZXhpdCAxOyBcCi0JZmk7IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKLQl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIFwKLQkgfHwgdGVzdCAtZiAkJHAxIFwKLQkgIDsgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCi0JZG9uZSB8IFwKLQlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIFwKLQkgICAgLWUgJ3N8Lip8LnwnIFwKLQkgICAgLWUgJ3A7eDtzLC4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJyB8IFwKLQlzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKLQkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxIH0gXAotCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAotCSAgICBpZiAoJCQyID09ICQkNCkgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCi0JICAgIGVsc2UgeyBwcmludCAiZiIsICQkMyAiLyIgJCQ0LCAkJDE7IH0gfSBcCi0JICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCi0Jd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAotCSAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKLQkgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCi0JICAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAnJChERVNURElSKSQoaGVscGVyc2RpcikkJGRpciciOyBcCi0JICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICIkKERFU1RESVIpJChoZWxwZXJzZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAotCSAgICB9IFwKLQk7IGRvbmUKLQotdW5pbnN0YWxsLWhlbHBlcnNQUk9HUkFNUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGhlbHBlcnNfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChoZWxwZXJzZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAotCSAgc2VkIC1lICdoO3MsXi4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSknIFwKLQkgICAgICAtZSAncy8kJC8kKEVYRUVYVCkvJyBcCi0JYDsgXAotCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiICggY2QgJyQoREVTVERJUikkKGhlbHBlcnNkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLQljZCAiJChERVNURElSKSQoaGVscGVyc2RpcikiICYmIHJtIC1mICQkZmlsZXMKLQotY2xlYW4taGVscGVyc1BST0dSQU1TOgotCUBsaXN0PSckKGhlbHBlcnNfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLWdzdC1jb21wbGV0aW9uLWhlbHBlci1AR1NUX0FQSV9WRVJTSU9OQCQoRVhFRVhUKTogJChnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUykgJChnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBnc3QtY29tcGxldGlvbi1oZWxwZXItQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9MSU5LKSAkKGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9PQkpFQ1RTKSAkKGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCkgJChMSUJTKQotCi1nc3QtcGx1Z2luLXNjYW5uZXIkKEVYRUVYVCk6ICQoZ3N0X3BsdWdpbl9zY2FubmVyX09CSkVDVFMpICQoZ3N0X3BsdWdpbl9zY2FubmVyX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfcGx1Z2luX3NjYW5uZXJfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZ3N0LXBsdWdpbi1zY2FubmVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChnc3RfcGx1Z2luX3NjYW5uZXJfTElOSykgJChnc3RfcGx1Z2luX3NjYW5uZXJfT0JKRUNUUykgJChnc3RfcGx1Z2luX3NjYW5uZXJfTERBREQpICQoTElCUykKLQotZ3N0LXB0cC1oZWxwZXIkKEVYRUVYVCk6ICQoZ3N0X3B0cF9oZWxwZXJfT0JKRUNUUykgJChnc3RfcHRwX2hlbHBlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X3B0cF9oZWxwZXJfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZ3N0LXB0cC1oZWxwZXIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGdzdF9wdHBfaGVscGVyX0xJTkspICQoZ3N0X3B0cF9oZWxwZXJfT0JKRUNUUykgJChnc3RfcHRwX2hlbHBlcl9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0X2NvbXBsZXRpb25faGVscGVyX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1jb21wbGV0aW9uLWhlbHBlci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0X3B0cF9oZWxwZXItZ3N0LXB0cC1oZWxwZXIuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotZ3N0X2NvbXBsZXRpb25faGVscGVyX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1jb21wbGV0aW9uLWhlbHBlci5vOiBnc3QtY29tcGxldGlvbi1oZWxwZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X2NvbXBsZXRpb25faGVscGVyX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1jb21wbGV0aW9uLWhlbHBlci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWNvbXBsZXRpb24taGVscGVyLlRwbyAtYyAtbyBnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWNvbXBsZXRpb24taGVscGVyLm8gYHRlc3QgLWYgJ2dzdC1jb21wbGV0aW9uLWhlbHBlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QtY29tcGxldGlvbi1oZWxwZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0X2NvbXBsZXRpb25faGVscGVyX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1jb21wbGV0aW9uLWhlbHBlci5UcG8gJChERVBESVIpL2dzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtY29tcGxldGlvbi1oZWxwZXIuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3QtY29tcGxldGlvbi1oZWxwZXIuYycgb2JqZWN0PSdnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWNvbXBsZXRpb24taGVscGVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWNvbXBsZXRpb24taGVscGVyLm8gYHRlc3QgLWYgJ2dzdC1jb21wbGV0aW9uLWhlbHBlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QtY29tcGxldGlvbi1oZWxwZXIuYwotCi1nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWNvbXBsZXRpb24taGVscGVyLm9iajogZ3N0LWNvbXBsZXRpb24taGVscGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtY29tcGxldGlvbi1oZWxwZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWNvbXBsZXRpb24taGVscGVyLlRwbyAtYyAtbyBnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWNvbXBsZXRpb24taGVscGVyLm9iaiBgaWYgdGVzdCAtZiAnZ3N0LWNvbXBsZXRpb24taGVscGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0LWNvbXBsZXRpb24taGVscGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC1jb21wbGV0aW9uLWhlbHBlci5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWNvbXBsZXRpb24taGVscGVyLlRwbyAkKERFUERJUikvZ3N0X2NvbXBsZXRpb25faGVscGVyX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1jb21wbGV0aW9uLWhlbHBlci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdC1jb21wbGV0aW9uLWhlbHBlci5jJyBvYmplY3Q9J2dzdF9jb21wbGV0aW9uX2hlbHBlcl9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtY29tcGxldGlvbi1oZWxwZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfY29tcGxldGlvbl9oZWxwZXJfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0X2NvbXBsZXRpb25faGVscGVyX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1jb21wbGV0aW9uLWhlbHBlci5vYmogYGlmIHRlc3QgLWYgJ2dzdC1jb21wbGV0aW9uLWhlbHBlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC1jb21wbGV0aW9uLWhlbHBlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QtY29tcGxldGlvbi1oZWxwZXIuYyc7IGZpYAotCi1nc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLm86IGdzdC1wbHVnaW4tc2Nhbm5lci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIuVHBvIC1jIC1vIGdzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIubyBgdGVzdCAtZiAnZ3N0LXBsdWdpbi1zY2FubmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1wbHVnaW4tc2Nhbm5lci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLlRwbyAkKERFUERJUikvZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdC1wbHVnaW4tc2Nhbm5lci5jJyBvYmplY3Q9J2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3BsdWdpbl9zY2FubmVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIubyBgdGVzdCAtZiAnZ3N0LXBsdWdpbi1zY2FubmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1wbHVnaW4tc2Nhbm5lci5jCi0KLWdzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIub2JqOiBnc3QtcGx1Z2luLXNjYW5uZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIuVHBvIC1jIC1vIGdzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIub2JqIGBpZiB0ZXN0IC1mICdnc3QtcGx1Z2luLXNjYW5uZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtcGx1Z2luLXNjYW5uZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0LXBsdWdpbi1zY2FubmVyLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF9wbHVnaW5fc2Nhbm5lci1nc3QtcGx1Z2luLXNjYW5uZXIuVHBvICQoREVQRElSKS9nc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0LXBsdWdpbi1zY2FubmVyLmMnIG9iamVjdD0nZ3N0X3BsdWdpbl9zY2FubmVyLWdzdC1wbHVnaW4tc2Nhbm5lci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9wbHVnaW5fc2Nhbm5lcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RfcGx1Z2luX3NjYW5uZXItZ3N0LXBsdWdpbi1zY2FubmVyLm9iaiBgaWYgdGVzdCAtZiAnZ3N0LXBsdWdpbi1zY2FubmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0LXBsdWdpbi1zY2FubmVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC1wbHVnaW4tc2Nhbm5lci5jJzsgZmlgCi0KLWdzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLm86IGdzdC1wdHAtaGVscGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfcHRwX2hlbHBlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X3B0cF9oZWxwZXItZ3N0LXB0cC1oZWxwZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X3B0cF9oZWxwZXItZ3N0LXB0cC1oZWxwZXIuVHBvIC1jIC1vIGdzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLm8gYHRlc3QgLWYgJ2dzdC1wdHAtaGVscGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1wdHAtaGVscGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLlRwbyAkKERFUERJUikvZ3N0X3B0cF9oZWxwZXItZ3N0LXB0cC1oZWxwZXIuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3QtcHRwLWhlbHBlci5jJyBvYmplY3Q9J2dzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9wdHBfaGVscGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLm8gYHRlc3QgLWYgJ2dzdC1wdHAtaGVscGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1wdHAtaGVscGVyLmMKLQotZ3N0X3B0cF9oZWxwZXItZ3N0LXB0cC1oZWxwZXIub2JqOiBnc3QtcHRwLWhlbHBlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3B0cF9oZWxwZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X3B0cF9oZWxwZXItZ3N0LXB0cC1oZWxwZXIuVHBvIC1jIC1vIGdzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLm9iaiBgaWYgdGVzdCAtZiAnZ3N0LXB0cC1oZWxwZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtcHRwLWhlbHBlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QtcHRwLWhlbHBlci5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RfcHRwX2hlbHBlci1nc3QtcHRwLWhlbHBlci5UcG8gJChERVBESVIpL2dzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0LXB0cC1oZWxwZXIuYycgb2JqZWN0PSdnc3RfcHRwX2hlbHBlci1nc3QtcHRwLWhlbHBlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9wdHBfaGVscGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9wdHBfaGVscGVyLWdzdC1wdHAtaGVscGVyLm9iaiBgaWYgdGVzdCAtZiAnZ3N0LXB0cC1oZWxwZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtcHRwLWhlbHBlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QtcHRwLWhlbHBlci5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi1pbnN0YWxsLWRpc3RfYmFzaGhlbHBlcnNEQVRBOiAkKGRpc3RfYmFzaGhlbHBlcnNfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChkaXN0X2Jhc2hoZWxwZXJzX0RBVEEpJzsgdGVzdCAtbiAiJChiYXNoaGVscGVyc2RpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoYmFzaGhlbHBlcnNkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJhc2hoZWxwZXJzZGlyKSIgfHwgZXhpdCAxOyBcCi0JZmk7IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBlY2hvICIkJGQkJHAiOyBcCi0JZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCi0Jd2hpbGUgcmVhZCBmaWxlczsgZG8gXAotCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChiYXNoaGVscGVyc2RpciknIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGJhc2hoZWxwZXJzZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1kaXN0X2Jhc2hoZWxwZXJzREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGRpc3RfYmFzaGhlbHBlcnNfREFUQSknOyB0ZXN0IC1uICIkKGJhc2hoZWxwZXJzZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQoYmFzaGhlbHBlcnNkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykgJChEQVRBKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKGhlbHBlcnNkaXIpIiAiJChERVNURElSKSQoYmFzaGhlbHBlcnNkaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLUBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX0ZBTFNFQGluc3RhbGwtZXhlYy1ob29rOgotQEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fRkFMU0VAdW5pbnN0YWxsLWhvb2s6Ci1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4taGVscGVyc1BST0dSQU1TIFwKLQljbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWRpc3RfYmFzaGhlbHBlcnNEQVRBIGluc3RhbGwtaGVscGVyc1BST0dSQU1TCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1kYXRhLWhvb2sKLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWJpblBST0dSQU1TCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWhvb2sKLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1kaXN0X2Jhc2hoZWxwZXJzREFUQSBcCi0JdW5pbnN0YWxsLWhlbHBlcnNQUk9HUkFNUwotCUAkKE5PUk1BTF9JTlNUQUxMKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHVuaW5zdGFsbC1ob29rCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtc3RyaXAgXAotCXVuaW5zdGFsbC1hbQotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBcCi0JY2xlYW4tYmluUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1oZWxwZXJzUFJPR1JBTVMgXAotCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLWhvb2sgaW5zdGFsbC1kaXN0X2Jhc2hoZWxwZXJzREFUQSBcCi0JaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1leGVjLWhvb2sgaW5zdGFsbC1oZWxwZXJzUFJPR1JBTVMgaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1kaXN0X2Jhc2hoZWxwZXJzREFUQSBcCi0JdW5pbnN0YWxsLWhlbHBlcnNQUk9HUkFNUyB1bmluc3RhbGwtaG9vawotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotQEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fVFJVRUBpbnN0YWxsLWV4ZWMtaG9vazoKLUBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUVACSQoTUtESVJfUCkgJChERVNURElSKSQoQkFTSF9IRUxQRVJTX0RJUikgJiYgXAotQEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fVFJVRUAJY2QgJChERVNURElSKSQoYmluZGlyKSAmJiBcCi1ARU5BQkxFX0JBU0hfQ09NUExFVElPTl9UUlVFQAkkKElOU1RBTEwpIGBlY2hvICJnc3QtY29tcGxldGlvbi1oZWxwZXItIiB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2BAR1NUX0FQSV9WRVJTSU9OQCQoRVhFRVhUKSBcCi1ARU5BQkxFX0JBU0hfQ09NUExFVElPTl9UUlVFQCAgICAgICAgJChERVNURElSKSQoQkFTSF9IRUxQRVJTX0RJUikvZ3N0LWNvbXBsZXRpb24taGVscGVyLUBHU1RfQVBJX1ZFUlNJT05AJChFWEVFWFQpICYmIFwKLUBFTkFCTEVfQkFTSF9DT01QTEVUSU9OX1RSVUVACXJtIGBlY2hvICJnc3QtY29tcGxldGlvbi1oZWxwZXItIiB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2BAR1NUX0FQSV9WRVJTSU9OQCQoRVhFRVhUKQotCi1ARU5BQkxFX0JBU0hfQ09NUExFVElPTl9UUlVFQHVuaW5zdGFsbC1ob29rOgotQEVOQUJMRV9CQVNIX0NPTVBMRVRJT05fVFJVRUAJcm0gLWYgJChERVNURElSKSQoQkFTSF9IRUxQRVJTX0RJUikvZ3N0LWNvbXBsZXRpb24taGVscGVyLUBHU1RfQVBJX1ZFUlNJT05AJChFWEVFWFQpCi0KLWluc3RhbGwtZGF0YS1ob29rOgotQEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfVFJVRUBASEFWRV9QVFBfVFJVRUAJLSBjaG93biByb290ICQoREVTVERJUikkKGhlbHBlcnNkaXIpL2dzdC1wdHAtaGVscGVyCi1ASEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9UUlVFQEBIQVZFX1BUUF9UUlVFQAktIGNobW9kIHUrcyAkKERFU1RESVIpJChoZWxwZXJzZGlyKS9nc3QtcHRwLWhlbHBlcgotQEhBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVNfVFJVRUBASEFWRV9QVFBfVFJVRUAJLSAkKFNFVENBUCkgY2FwX25ldF9iaW5kX3NlcnZpY2UsY2FwX25ldF9hZG1pbitlcCAkKERFU1RESVIpJChoZWxwZXJzZGlyKS9nc3QtcHRwLWhlbHBlcgotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9saWJzL2dzdC9oZWxwZXJzL2dzdCBiL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDM0YWJmLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBHU3RyZWFtZXIKLSMgQ29weXJpZ2h0IChDKSAyMDE1IE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAb3BlbmNyZWVkLmNvbT4KLSMKLSMgYmFzaC96c2ggY29tcGxldGlvbiBzdXBwb3J0IGZvciBjb21tb24gZ3N0cmVhbWVyIG9wdGlvbnMKLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotIyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotX19fZ3N0X2RlYnVnX2xldmVsICgpIHsgX2dzdF9tYW5kYXRvcnlfYXJndW1lbnQ7IH0KLV9fX2dzdF9kZWJ1ZyAoKSB7IF9nc3RfbWFuZGF0b3J5X2FyZ3VtZW50OyB9Ci1fX19nc3RfZGVidWdfY29sb3JfbW9kZSAoKSB7IF9nc3RfbWFuZGF0b3J5X2FyZ3VtZW50OyB9Ci1fX19nc3RfcGx1Z2luX3BhdGggKCkgeyBfZ3N0X21hbmRhdG9yeV9hcmd1bWVudDsgfQotX19fZ3N0X3BsdWdpbl9sb2FkICgpIHsgX2dzdF9tYW5kYXRvcnlfYXJndW1lbnQ7IH0KLQotX2dzdF9tYW5kYXRvcnlfYXJndW1lbnQgKCkKLXsKLQlpZiBbWyAiJHByZXYiICE9ICIkY29tbWFuZCIgXV0KLQl0aGVuCi0JCUNPTVBSRVBMWT0oICQoY29tcGdlbiAtVyAiJChnc3QtbGF1bmNoLTEuMCAtLWhlbHAtYWxsIHwgZ3JlcCAtb2ggJ1tbOmdyYXBoOl1dKi0tW1s6Z3JhcGg6XV0qJyB8IGN1dCAtZCc9JyAtZjEpIiAtLSAkY3VyKSApCi0JZWxzZQotCQlDT01QUkVQTFk9KCIkY3VyIikKLQlmaQotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvaGVscGVycy9nc3QtY29tcGxldGlvbi1oZWxwZXIuYyBiL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LWNvbXBsZXRpb24taGVscGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ODIxYzguLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvaGVscGVycy9nc3QtY29tcGxldGlvbi1oZWxwZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNSBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0gKgotICogZ3N0LWNvbXBsZXRpb24taGVscGVyLmM6IHRvb2wgdG8gbGV0IG90aGVyIHRvb2xzIGVuam95IGZhc3QgYW5kIHBvd2VyZnVsCi0gKiBnc3RyZWFtZXItYXdhcmUgY29tcGxldGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RhdGljIEdMaXN0ICoKLWdldF9wYWRfdGVtcGxhdGVzX2luZm8gKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnksCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgY29uc3QgR0xpc3QgKnBhZHM7Ci0gIEdzdFN0YXRpY1BhZFRlbXBsYXRlICpwYWR0ZW1wbGF0ZTsKLSAgR0xpc3QgKmNhcHNfbGlzdCA9IE5VTEw7Ci0KLSAgaWYgKGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X251bV9wYWRfdGVtcGxhdGVzIChmYWN0b3J5KSA9PSAwKSB7Ci0gICAgZ19wcmludCAoIiAgbm9uZVxuIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBwYWRzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMgKGZhY3RvcnkpOwotICB3aGlsZSAocGFkcykgewotICAgIHBhZHRlbXBsYXRlID0gKEdzdFN0YXRpY1BhZFRlbXBsYXRlICopIChwYWRzLT5kYXRhKTsKLSAgICBwYWRzID0gZ19saXN0X25leHQgKHBhZHMpOwotCi0gICAgaWYgKHBhZHRlbXBsYXRlLT5kaXJlY3Rpb24gIT0gZGlyZWN0aW9uKQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAocGFkdGVtcGxhdGUtPnN0YXRpY19jYXBzLnN0cmluZykgewotICAgICAgY2Fwc19saXN0ID0KLSAgICAgICAgICBnX2xpc3RfYXBwZW5kIChjYXBzX2xpc3QsCi0gICAgICAgICAgZ3N0X3N0YXRpY19jYXBzX2dldCAoJnBhZHRlbXBsYXRlLT5zdGF0aWNfY2FwcykpOwotICAgIH0KLQotICB9Ci0KLSAgcmV0dXJuIGNhcHNfbGlzdDsKLX0KLQotc3RhdGljIEdMaXN0ICoKLV9nZXRfcGFkX2NhcHMgKGNvbnN0IGdjaGFyICogZmFjdG9yeV9uYW1lLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoZmFjdG9yeV9uYW1lKTsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZmFjdG9yeV9uYW1lLCBOVUxMKTsKLQotICBpZiAoIWVsZW1lbnQpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGlmICghZmFjdG9yeSkKLSAgICByZXR1cm4gTlVMTDsKLSAgZmFjdG9yeSA9Ci0gICAgICBHU1RfRUxFTUVOVF9GQUNUT1JZIChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoR1NUX1BMVUdJTl9GRUFUVVJFCi0gICAgICAgICAgKGZhY3RvcnkpKSk7Ci0gIGlmICghZmFjdG9yeSkKLSAgICByZXR1cm4gTlVMTDsKLSAgcmV0dXJuIGdldF9wYWRfdGVtcGxhdGVzX2luZm8gKGVsZW1lbnQsIGZhY3RvcnksIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2FyZV9saW5rYWJsZSAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsIEdMaXN0ICogY2Fwc19saXN0KQotewotICBnYm9vbGVhbiBwcmludCA9IEZBTFNFOwotICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpOwotCi0gIEdMaXN0ICp0bXA7Ci0gIHByaW50ID0gRkFMU0U7Ci0gIGZvciAodG1wID0gY2Fwc19saXN0OyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgewotICAgIGlmIChnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzIChmYWN0b3J5LCB0bXAtPmRhdGEpKSB7Ci0gICAgICBwcmludCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcHJpbnQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2JlbG9uZ3NfdG9fa2xhc3MgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwgY29uc3QgZ2NoYXIgKiBrbGFzcykKLXsKLSAgY29uc3QgZ2NoYXIgKmZhY3Rvcnlfa2xhc3M7Ci0KLQotICBmYWN0b3J5X2tsYXNzID0KLSAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhIChmYWN0b3J5LCBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyk7Ci0gIGlmIChzdHJzdHIgKGZhY3Rvcnlfa2xhc3MsIGtsYXNzKSkKLSAgICByZXR1cm4gVFJVRTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotX2xpc3RfZmVhdHVyZXMgKGNvbnN0IGdjaGFyICogY29tcGF0aWJsZV93aXRoLCBjb25zdCBnY2hhciAqIGtsYXNzLAotICAgIEdzdENhcHMgKiBzaW5rY2FwcykKLXsKLSAgR0xpc3QgKnBsdWdpbnMsICpvcmlnX3BsdWdpbnM7Ci0gIEdMaXN0ICpjYXBzX2xpc3QgPSBOVUxMOwotCi0gIGlmIChjb21wYXRpYmxlX3dpdGgpIHsKLSAgICBjYXBzX2xpc3QgPSBfZ2V0X3BhZF9jYXBzIChjb21wYXRpYmxlX3dpdGgsIEdTVF9QQURfU1JDKTsKLSAgfQotCi0gIG9yaWdfcGx1Z2lucyA9IHBsdWdpbnMgPSBnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChnc3RfcmVnaXN0cnlfZ2V0ICgpKTsKLSAgd2hpbGUgKHBsdWdpbnMpIHsKLSAgICBHTGlzdCAqZmVhdHVyZXMsICpvcmlnX2ZlYXR1cmVzOwotICAgIEdzdFBsdWdpbiAqcGx1Z2luOwotCi0gICAgcGx1Z2luID0gKEdzdFBsdWdpbiAqKSAocGx1Z2lucy0+ZGF0YSk7Ci0gICAgcGx1Z2lucyA9IGdfbGlzdF9uZXh0IChwbHVnaW5zKTsKLQotICAgIGlmIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwbHVnaW4sIEdTVF9QTFVHSU5fRkxBR19CTEFDS0xJU1RFRCkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIG9yaWdfZmVhdHVyZXMgPSBmZWF0dXJlcyA9Ci0gICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgICAgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0gICAgd2hpbGUgKGZlYXR1cmVzKSB7Ci0gICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoZmVhdHVyZXMtPmRhdGEgPT0gTlVMTCkpCi0gICAgICAgIGdvdG8gbmV4dDsKLSAgICAgIGZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmVzLT5kYXRhKTsKLQotICAgICAgaWYgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7Ci0gICAgICAgIGdib29sZWFuIHByaW50ID0gVFJVRTsKLSAgICAgICAgaWYgKGNhcHNfbGlzdCkKLSAgICAgICAgICBwcmludCA9IF9hcmVfbGlua2FibGUgKGZlYXR1cmUsIGNhcHNfbGlzdCk7Ci0gICAgICAgIGlmIChwcmludCAmJiBrbGFzcykKLSAgICAgICAgICBwcmludCA9IF9iZWxvbmdzX3RvX2tsYXNzIChHU1RfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKSwga2xhc3MpOwotICAgICAgICBpZiAocHJpbnQgJiYgc2lua2NhcHMpCi0gICAgICAgICAgcHJpbnQgPQotICAgICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzIChHU1RfRUxFTUVOVF9GQUNUT1JZCi0gICAgICAgICAgICAgIChmZWF0dXJlKSwgc2lua2NhcHMpOwotCi0gICAgICAgIGlmIChwcmludCkKLSAgICAgICAgICBnX3ByaW50ICgiJXMgIiwgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSk7Ci0gICAgICB9Ci0KLSAgICBuZXh0OgotICAgICAgZmVhdHVyZXMgPSBnX2xpc3RfbmV4dCAoZmVhdHVyZXMpOwotICAgIH0KLQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKG9yaWdfZmVhdHVyZXMpOwotICB9Ci0KLSAgZ19saXN0X2ZyZWUgKGNhcHNfbGlzdCk7Ci0gIGdfcHJpbnQgKCJcbiIpOwotICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAob3JpZ19wbHVnaW5zKTsKLX0KLQotc3RhdGljIHZvaWQKLV9wcmludF9lbGVtZW50X3Byb3BlcnRpZXNfaW5mbyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdQYXJhbVNwZWMgKipwcm9wZXJ0eV9zcGVjczsKLSAgZ3VpbnQgbnVtX3Byb3BlcnRpZXMsIGk7Ci0KLSAgcHJvcGVydHlfc3BlY3MgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMKLSAgICAgIChHX09CSkVDVF9HRVRfQ0xBU1MgKGVsZW1lbnQpLCAmbnVtX3Byb3BlcnRpZXMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fcHJvcGVydGllczsgaSsrKSB7Ci0gICAgR1BhcmFtU3BlYyAqcGFyYW0gPSBwcm9wZXJ0eV9zcGVjc1tpXTsKLQotICAgIGlmIChwYXJhbS0+ZmxhZ3MgJiBHX1BBUkFNX1dSSVRBQkxFKSB7Ci0gICAgICBnX3ByaW50ICgiJXM9ICIsIGdfcGFyYW1fc3BlY19nZXRfbmFtZSAocGFyYW0pKTsKLSAgICB9Ci0gIH0KLQotICBnX2ZyZWUgKHByb3BlcnR5X3NwZWNzKTsKLX0KLQotc3RhdGljIHZvaWQKLV9saXN0X2VsZW1lbnRfcHJvcGVydGllcyAoY29uc3QgZ2NoYXIgKiBmYWN0b3J5X25hbWUpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGZhY3RvcnlfbmFtZSwgTlVMTCk7Ci0KLSAgX3ByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvIChlbGVtZW50KTsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBnYm9vbGVhbiBsaXN0X2ZlYXR1cmVzID0gRkFMU0U7Ci0gIGdjaGFyICpjb21wYXRpYmxlX3dpdGggPSBOVUxMOwotICBnY2hhciAqZWxlbWVudCA9IE5VTEw7Ci0gIGdjaGFyICprbGFzcyA9IE5VTEw7Ci0gIGdjaGFyICpjYXBzX3N0ciA9IE5VTEw7Ci0gIEdzdENhcHMgKnNpbmtjYXBzID0gTlVMTDsKLSAgZ2ludCBleGl0X2NvZGUgPSBFWElUX1NVQ0NFU1M7Ci0KLSAgR09wdGlvbkVudHJ5IG9wdGlvbnNbXSA9IHsKLSAgICB7Imxpc3QtZmVhdHVyZXMiLCAnbCcsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmbGlzdF9mZWF0dXJlcywKLSAgICAgICAgImxpc3QgYWxsIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMiLCBOVUxMfSwKLSAgICB7ImNvbXBhdGlibGUtd2l0aCIsICdcMCcsIDAsIEdfT1BUSU9OX0FSR19TVFJJTkcsICZjb21wYXRpYmxlX3dpdGgsCi0gICAgICAgICAgIk9ubHkgcHJpbnQgdGhlIGVsZW1lbnRzIHRoYXQgY291bGQgYmUgcXVldWVkIGFmdGVyIHRoaXMgZmVhdHVyZSBuYW1lIiwKLSAgICAgICAgTlVMTH0sCi0gICAgeyJlbGVtZW50LXByb3BlcnRpZXMiLCAnXDAnLCAwLCBHX09QVElPTl9BUkdfU1RSSU5HLCAmZWxlbWVudCwKLSAgICAgICAgIlRoZSBlbGVtZW50IHRvIGxpc3QgcHJvcGVydGllcyBvbiIsIE5VTEx9LAotICAgIHsia2xhc3MiLCAnXDAnLCAwLCBHX09QVElPTl9BUkdfU1RSSU5HLCAma2xhc3MsCi0gICAgICAgICJPbmx5IHByaW50IHRoZSBlbGVtZW50cyBiZWxvbmdpbmcgdG8gdGhhdCBrbGFzcyIsIE5VTEx9LAotICAgIHsic2lua2NhcHMiLCAnXDAnLCAwLCBHX09QVElPTl9BUkdfU1RSSU5HLCAmY2Fwc19zdHIsCi0gICAgICAgICJPbmx5IHByaW50IHRoZSBlbGVtZW50cyB0aGF0IGNhbiBzaW5rIHRoZXNlIGNhcHMiLCBOVUxMfSwKLSAgICB7TlVMTH0KLSAgfTsKLQotICBHT3B0aW9uQ29udGV4dCAqY3R4OwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgY3R4ID0gZ19vcHRpb25fY29udGV4dF9uZXcgKCJQSVBFTElORS1ERVNDUklQVElPTiIpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgb3B0aW9ucywgTlVMTCk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOwotICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkgewotICAgIGlmIChlcnIpCi0gICAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgR1NUX1NUUl9OVUxMIChlcnItPm1lc3NhZ2UpKTsKLSAgICBlbHNlCi0gICAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiBVbmtub3duIGVycm9yIVxuIik7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotICAgIGV4aXQgKDEpOwotICB9Ci0gIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLQotICBpZiAoY2Fwc19zdHIpIHsKLSAgICBzaW5rY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzX3N0cik7Ci0gICAgaWYgKCFzaW5rY2FwcykgewotICAgICAgZXhpdF9jb2RlID0gRVhJVF9GQUlMVVJFOwotICAgICAgZ290byBkb25lOwotICAgIH0KLSAgfQotCi0gIGlmIChjb21wYXRpYmxlX3dpdGggfHwga2xhc3MgfHwgc2lua2NhcHMpIHsKLSAgICBfbGlzdF9mZWF0dXJlcyAoY29tcGF0aWJsZV93aXRoLCBrbGFzcywgc2lua2NhcHMpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGlmIChlbGVtZW50KSB7Ci0gICAgX2xpc3RfZWxlbWVudF9wcm9wZXJ0aWVzIChlbGVtZW50KTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBpZiAobGlzdF9mZWF0dXJlcykgewotICAgIF9saXN0X2ZlYXR1cmVzIChOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotZG9uZToKLSAgaWYgKHNpbmtjYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChzaW5rY2Fwcyk7Ci0gIGV4aXQgKGV4aXRfY29kZSk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jIGIvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjViMzk4MC4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0gKgotICogZ3N0LXBsdWdpbi1zY2FubmVyLmM6IHRvb2wgdG8gbG9hZCBwbHVnaW5zIG91dCBvZiBwcm9jZXNzIGZvciBzY2FubmluZwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIEhlbHBlciBiaW5hcnkgdGhhdCBkb2VzIHBsdWdpbi1sb2FkaW5nIG91dCBvZiBwcm9jZXNzIGFuZCBmZWVkcyByZXN1bHRzCi0gKiBiYWNrIHRvIHRoZSBwYXJlbnQgb3ZlciBmZHMuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0X3ByaXZhdGUuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBnYm9vbGVhbiByZXM7Ci0gIGNoYXIgKipteV9hcmd2OwotICBpbnQgbXlfYXJnYzsKLQotICBpZiAoYXJnYyAhPSAyIHx8IHN0cmNtcCAoYXJndlsxXSwgIi1sIikpCi0gICAgcmV0dXJuIDE7Ci0KLSAgbXlfYXJnYyA9IDI7Ci0gIG15X2FyZ3YgPSBnX21hbGxvYyAobXlfYXJnYyAqIHNpemVvZiAoY2hhciAqKSk7Ci0gIG15X2FyZ3ZbMF0gPSBhcmd2WzBdOwotICBteV9hcmd2WzFdID0gKGNoYXIgKikgIi0tZ3N0LWRpc2FibGUtcmVnaXN0cnktdXBkYXRlIjsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9SRUdJU1RSWQotICBfZ3N0X2Rpc2FibGVfcmVnaXN0cnlfY2FjaGUgPSBUUlVFOwotI2VuZGlmCi0KLSAgcmVzID0gZ3N0X2luaXRfY2hlY2sgKCZteV9hcmdjLCAmbXlfYXJndiwgTlVMTCk7Ci0KLSAgZ19mcmVlIChteV9hcmd2KTsKLSAgaWYgKCFyZXMpCi0gICAgcmV0dXJuIDE7Ci0KLSAgLyogQ3JlYXRlIHJlZ2lzdHJ5IHNjYW5uZXIgbGlzdGVuZXIgYW5kIHJ1biAqLwotICBpZiAoIV9nc3RfcGx1Z2luX2xvYWRlcl9jbGllbnRfcnVuICgpKQotICAgIHJldHVybiAxOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvaGVscGVycy9nc3QtcHRwLWhlbHBlci5jIGIvbGlicy9nc3QvaGVscGVycy9nc3QtcHRwLWhlbHBlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjNjNGVmLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXB0cC1oZWxwZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDY4OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBIZWxwZXIgcHJvY2VzcyB0aGF0IHJ1bnMgc2V0dWlkIHJvb3Qgb3Igd2l0aCBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIHRvCi0gKiBsaXN0ZW4gb24gcG9ydHMgPCAxMDI0LCBkbyBtdWx0aWNhc3Qgb3BlcmF0aW9ucyBhbmQgZ2V0IE1BQyBhZGRyZXNzZXMgb2YKLSAqIGludGVyZmFjZXMuIFByaXZpbGVnZXMgYXJlIGRyb3BwZWQgYWZ0ZXIgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgZG9uZS4KLSAqCi0gKiBJdCBsaXN0ZW5zIG9uIHRoZSBQVFAgbXVsdGljYXN0IGdyb3VwIG9uIHBvcnQgMzE5IGFuZCAzMjAgYW5kIGZvcndhcmRzCi0gKiBldmVyeXRoaW5nIHJlY2VpdmVkIHRoZXJlIHRvIHN0ZG91dCwgd2hpbGUgZm9yd2FyZGluZyBldmVyeXRoaW5nIHJlY2VpdmVkCi0gKiBvbiBzdGRvdXQgdG8gdGhvc2Ugc29ja2V0cy4KLSAqIEFkZGl0aW9uYWxseSBpdCBwcm92aWRlcyB0aGUgTUFDIGFkZHJlc3Mgb2YgYSBuZXR3b3JrIGludGVyZmFjZSB2aWEgc3Rkb3V0Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgSEFWRV9HRVRJRkFERFJTX0FGX0xJTksKLSNpbmNsdWRlIDxpZmFkZHJzLmg+Ci0jaW5jbHVkZSA8bmV0L2lmX2RsLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfUFRQX0hFTFBFUl9TRVRVSUQKLSNpbmNsdWRlIDxncnAuaD4KLSNpbmNsdWRlIDxwd2QuaD4KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9QVFBfSEVMUEVSX0NBUEFCSUxJVElFUwotI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L25ldC9nc3RwdHBfcHJpdmF0ZS5oPgotCi0jZGVmaW5lIFBUUF9NVUxUSUNBU1RfR1JPVVAgIjIyNC4wLjEuMTI5IgotI2RlZmluZSBQVFBfRVZFTlRfUE9SVCAgIDMxOQotI2RlZmluZSBQVFBfR0VORVJBTF9QT1JUIDMyMAotCi1zdGF0aWMgZ2NoYXIgKippZmFjZXMgPSBOVUxMOwotc3RhdGljIGdib29sZWFuIHZlcmJvc2UgPSBGQUxTRTsKLXN0YXRpYyBndWludDY0IGNsb2NrX2lkID0gKGd1aW50NjQpIC0gMTsKLXN0YXRpYyBndWludDggY2xvY2tfaWRfYXJyYXlbOF07Ci0KLXN0YXRpYyBHT3B0aW9uRW50cnkgb3B0X2VudHJpZXNbXSA9IHsKLSAgeyJpbnRlcmZhY2UiLCAnaScsIDAsIEdfT1BUSU9OX0FSR19TVFJJTkdfQVJSQVksICZpZmFjZXMsCi0gICAgICAiSW50ZXJmYWNlIHRvIGxpc3RlbiBvbiIsIE5VTEx9LAotICB7ImNsb2NrLWlkIiwgJ2MnLCAwLCBHX09QVElPTl9BUkdfSU5UNjQsICZjbG9ja19pZCwKLSAgICAgICJQVFAgY2xvY2sgaWQiLCBOVUxMfSwKLSAgeyJ2ZXJib3NlIiwgJ3YnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJnZlcmJvc2UsCi0gICAgICAiQmUgdmVyYm9zZSIsIE5VTEx9LAotICB7TlVMTH0KLX07Ci0KLXN0YXRpYyBHU29ja2V0QWRkcmVzcyAqZXZlbnRfc2FkZHIsICpnZW5lcmFsX3NhZGRyOwotc3RhdGljIEdTb2NrZXQgKnNvY2tldF9ldmVudCwgKnNvY2tldF9nZW5lcmFsOwotc3RhdGljIEdJT0NoYW5uZWwgKnN0ZGluX2NoYW5uZWwsICpzdGRvdXRfY2hhbm5lbDsKLQotc3RhdGljIGdib29sZWFuCi1oYXZlX3NvY2tldF9kYXRhX2NiIChHU29ja2V0ICogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2NoYXIgYnVmZmVyWzgxOTJdOwotICBnc3NpemUgcmVhZDsKLSAgZ3NpemUgd3JpdHRlbjsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotICBHSU9TdGF0dXMgc3RhdHVzOwotICBTdGRJT0hlYWRlciBoZWFkZXIgPSB7IDAsIH07Ci0KLSAgcmVhZCA9IGdfc29ja2V0X3JlY2VpdmUgKHNvY2tldCwgYnVmZmVyLCBzaXplb2YgKGJ1ZmZlciksIE5VTEwsICZlcnIpOwotICBpZiAocmVhZCA9PSAtMSkKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIHJlYWQgZnJvbSBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0KLSAgaWYgKHZlcmJvc2UpCi0gICAgZ19tZXNzYWdlICgiUmVjZWl2ZWQgJSIgR19HU1NJWkVfRk9STUFUICIgYnl0ZXMgZnJvbSAlcyBzb2NrZXQiLCByZWFkLAotICAgICAgICAoc29ja2V0ID09IHNvY2tldF9ldmVudCA/ICJldmVudCIgOiAiZ2VuZXJhbCIpKTsKLQotICBoZWFkZXIuc2l6ZSA9IHJlYWQ7Ci0gIGhlYWRlci50eXBlID0gKHNvY2tldCA9PSBzb2NrZXRfZXZlbnQpID8gVFlQRV9FVkVOVCA6IFRZUEVfR0VORVJBTDsKLQotICBzdGF0dXMgPQotICAgICAgZ19pb19jaGFubmVsX3dyaXRlX2NoYXJzIChzdGRvdXRfY2hhbm5lbCwgKGdjaGFyICopICYgaGVhZGVyLAotICAgICAgc2l6ZW9mIChoZWFkZXIpLCAmd3JpdHRlbiwgJmVycik7Ci0gIGlmIChzdGF0dXMgPT0gR19JT19TVEFUVVNfRVJST1IpIHsKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIHdyaXRlIHRvIHN0ZG91dDogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19FT0YpIHsKLSAgICBnX21lc3NhZ2UgKCJFT0Ygb24gc3Rkb3V0Iik7Ci0gICAgZXhpdCAoMCk7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzICE9IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN0ZG91dCB3cml0ZSBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKLSAgfSBlbHNlIGlmICh3cml0dGVuICE9IHNpemVvZiAoaGVhZGVyKSkgewotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHdyaXRlIHNpemU6ICUiIEdfR1NJWkVfRk9STUFULCB3cml0dGVuKTsKLSAgfQotCi0gIHN0YXR1cyA9Ci0gICAgICBnX2lvX2NoYW5uZWxfd3JpdGVfY2hhcnMgKHN0ZG91dF9jaGFubmVsLCBidWZmZXIsIHJlYWQsICZ3cml0dGVuLCAmZXJyKTsKLSAgaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19FUlJPUikgewotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gd3JpdGUgdG8gc3Rkb3V0OiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzID09IEdfSU9fU1RBVFVTX0VPRikgewotICAgIGdfbWVzc2FnZSAoIkVPRiBvbiBzdGRvdXQiKTsKLSAgICBleGl0ICgwKTsKLSAgfSBlbHNlIGlmIChzdGF0dXMgIT0gR19JT19TVEFUVVNfTk9STUFMKSB7Ci0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgc3Rkb3V0IHdyaXRlIHN0YXR1czogJWQiLCBzdGF0dXMpOwotICB9IGVsc2UgaWYgKHdyaXR0ZW4gIT0gcmVhZCkgewotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHdyaXRlIHNpemU6ICUiIEdfR1NJWkVfRk9STUFULCB3cml0dGVuKTsKLSAgfQotCi0gIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1oYXZlX3N0ZGluX2RhdGFfY2IgKEdJT0NoYW5uZWwgKiBjaGFubmVsLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR0lPU3RhdHVzIHN0YXR1czsKLSAgU3RkSU9IZWFkZXIgaGVhZGVyID0geyAwLCB9OwotICBnY2hhciBidWZmZXJbODE5Ml07Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgZ3NpemUgcmVhZDsKLSAgZ3NzaXplIHdyaXR0ZW47Ci0KLSAgaWYgKChjb25kaXRpb24gJiBHX0lPX1NUQVRVU19FT0YpKSB7Ci0gICAgZ19tZXNzYWdlICgiRU9GIG9uIHN0ZGluIik7Ci0gICAgZXhpdCAoMCk7Ci0gIH0KLQotICBzdGF0dXMgPQotICAgICAgZ19pb19jaGFubmVsX3JlYWRfY2hhcnMgKGNoYW5uZWwsIChnY2hhciAqKSAmIGhlYWRlciwgc2l6ZW9mIChoZWFkZXIpLAotICAgICAgJnJlYWQsICZlcnIpOwotICBpZiAoc3RhdHVzID09IEdfSU9fU1RBVFVTX0VSUk9SKSB7Ci0gICAgZ19lcnJvciAoIkZhaWxlZCB0byByZWFkIGZyb20gc3RkaW46ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgfSBlbHNlIGlmIChzdGF0dXMgPT0gR19JT19TVEFUVVNfRU9GKSB7Ci0gICAgZ19tZXNzYWdlICgiRU9GIG9uIHN0ZGluIik7Ci0gICAgZXhpdCAoMCk7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzICE9IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN0ZGluIHJlYWQgc3RhdHVzOiAlZCIsIHN0YXR1cyk7Ci0gIH0gZWxzZSBpZiAocmVhZCAhPSBzaXplb2YgKGhlYWRlcikpIHsKLSAgICBnX2Vycm9yICgiVW5leHBlY3RlZCByZWFkIHNpemU6ICUiIEdfR1NJWkVfRk9STUFULCByZWFkKTsKLSAgfSBlbHNlIGlmIChoZWFkZXIuc2l6ZSA+IDgxOTIpIHsKLSAgICBnX2Vycm9yICgiVW5leHBlY3RlZCBzaXplOiAldSIsIGhlYWRlci5zaXplKTsKLSAgfQotCi0gIHN0YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzIChjaGFubmVsLCBidWZmZXIsIGhlYWRlci5zaXplLCAmcmVhZCwgJmVycik7Ci0gIGlmIChzdGF0dXMgPT0gR19JT19TVEFUVVNfRVJST1IpIHsKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIHJlYWQgZnJvbSBzdGRpbjogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19FT0YpIHsKLSAgICBnX21lc3NhZ2UgKCJFT0Ygb24gc3RkaW4iKTsKLSAgICBleGl0ICgwKTsKLSAgfSBlbHNlIGlmIChzdGF0dXMgIT0gR19JT19TVEFUVVNfTk9STUFMKSB7Ci0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgc3RkaW4gcmVhZCBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKLSAgfSBlbHNlIGlmIChyZWFkICE9IGhlYWRlci5zaXplKSB7Ci0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgcmVhZCBzaXplOiAlIiBHX0dTSVpFX0ZPUk1BVCwgcmVhZCk7Ci0gIH0KLQotICBzd2l0Y2ggKGhlYWRlci50eXBlKSB7Ci0gICAgY2FzZSBUWVBFX0VWRU5UOgotICAgIGNhc2UgVFlQRV9HRU5FUkFMOgotICAgICAgd3JpdHRlbiA9Ci0gICAgICAgICAgZ19zb2NrZXRfc2VuZF90byAoaGVhZGVyLnR5cGUgPT0KLSAgICAgICAgICBUWVBFX0VWRU5UID8gc29ja2V0X2V2ZW50IDogc29ja2V0X2dlbmVyYWwsCi0gICAgICAgICAgKGhlYWRlci50eXBlID09IFRZUEVfRVZFTlQgPyBldmVudF9zYWRkciA6IGdlbmVyYWxfc2FkZHIpLCBidWZmZXIsCi0gICAgICAgICAgaGVhZGVyLnNpemUsIE5VTEwsICZlcnIpOwotICAgICAgaWYgKHdyaXR0ZW4gPT0gLTEpCi0gICAgICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gd3JpdGUgdG8gc29ja2V0OiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICBlbHNlIGlmICh3cml0dGVuICE9IGhlYWRlci5zaXplKQotICAgICAgICBnX2Vycm9yICgiVW5leHBlY3RlZCB3cml0ZSBzaXplOiAlIiBHX0dTU0laRV9GT1JNQVQsIHdyaXR0ZW4pOwotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZ19tZXNzYWdlICgiU2VudCAlIiBHX0dTU0laRV9GT1JNQVQgIiBieXRlcyB0byAlcyBzb2NrZXQiLCByZWFkLAotICAgICAgICAgICAgKGhlYWRlci50eXBlID09IFRZUEVfRVZFTlQgPyAiZXZlbnQiIDogImdlbmVyYWwiKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9zb2NrZXRzICh2b2lkKQotewotICBHSW5ldEFkZHJlc3MgKmJpbmRfYWRkciwgKm1jYXN0X2FkZHI7Ci0gIEdTb2NrZXRBZGRyZXNzICpiaW5kX3NhZGRyOwotICBHU291cmNlICpzb2NrZXRfZXZlbnRfc291cmNlLCAqc29ja2V0X2dlbmVyYWxfc291cmNlOwotICBnY2hhciAqKnByb2JlZF9pZmFjZXMgPSBOVUxMOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgLyogQ3JlYXRlIHNvY2tldHMgKi8KLSAgc29ja2V0X2V2ZW50ID0KLSAgICAgIGdfc29ja2V0X25ldyAoR19TT0NLRVRfRkFNSUxZX0lQVjQsIEdfU09DS0VUX1RZUEVfREFUQUdSQU0sCi0gICAgICBHX1NPQ0tFVF9QUk9UT0NPTF9VRFAsICZlcnIpOwotICBpZiAoIXNvY2tldF9ldmVudCkKLSAgICBnX2Vycm9yICgiQ291bGRuJ3QgY3JlYXRlIGV2ZW50IHNvY2tldDogJXMiLCBlcnItPm1lc3NhZ2UpOwotICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgZ19zb2NrZXRfc2V0X211bHRpY2FzdF9sb29wYmFjayAoc29ja2V0X2V2ZW50LCBGQUxTRSk7Ci0KLSAgc29ja2V0X2dlbmVyYWwgPQotICAgICAgZ19zb2NrZXRfbmV3IChHX1NPQ0tFVF9GQU1JTFlfSVBWNCwgR19TT0NLRVRfVFlQRV9EQVRBR1JBTSwKLSAgICAgIEdfU09DS0VUX1BST1RPQ09MX1VEUCwgJmVycik7Ci0gIGlmICghc29ja2V0X2dlbmVyYWwpCi0gICAgZ19lcnJvciAoIkNvdWxkbid0IGNyZWF0ZSBnZW5lcmFsIHNvY2tldDogJXMiLCBlcnItPm1lc3NhZ2UpOwotICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgZ19zb2NrZXRfc2V0X211bHRpY2FzdF9sb29wYmFjayAoc29ja2V0X2dlbmVyYWwsIEZBTFNFKTsKLQotICAvKiBCaW5kIHNvY2tldHMgKi8KLSAgYmluZF9hZGRyID0gZ19pbmV0X2FkZHJlc3NfbmV3X2FueSAoR19TT0NLRVRfRkFNSUxZX0lQVjQpOwotICBiaW5kX3NhZGRyID0gZ19pbmV0X3NvY2tldF9hZGRyZXNzX25ldyAoYmluZF9hZGRyLCBQVFBfRVZFTlRfUE9SVCk7Ci0gIGlmICghZ19zb2NrZXRfYmluZCAoc29ja2V0X2V2ZW50LCBiaW5kX3NhZGRyLCBUUlVFLCAmZXJyKSkKLSAgICBnX2Vycm9yICgiQ291bGRuJ3QgYmluZCBldmVudCBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgZ19vYmplY3RfdW5yZWYgKGJpbmRfc2FkZHIpOwotICBiaW5kX3NhZGRyID0gZ19pbmV0X3NvY2tldF9hZGRyZXNzX25ldyAoYmluZF9hZGRyLCBQVFBfR0VORVJBTF9QT1JUKTsKLSAgaWYgKCFnX3NvY2tldF9iaW5kIChzb2NrZXRfZ2VuZXJhbCwgYmluZF9zYWRkciwgVFJVRSwgJmVycikpCi0gICAgZ19lcnJvciAoIkNvdWxkbid0IGJpbmQgZ2VuZXJhbCBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgZ19vYmplY3RfdW5yZWYgKGJpbmRfc2FkZHIpOwotICBnX29iamVjdF91bnJlZiAoYmluZF9hZGRyKTsKLQotICAvKiBQcm9iZSBhbGwgbm9uLWxvb3BiYWNrIGludGVyZmFjZXMgKi8KLSAgaWYgKCFpZmFjZXMpIHsKLSNpZiBkZWZpbmVkKEhBVkVfU0lPQ0dJRkNPTkZfU0lPQ0dJRkZMQUdTX1NJT0NHSUZIV0FERFIpCi0gICAgc3RydWN0IGlmcmVxIGlmcjsKLSAgICBzdHJ1Y3QgaWZjb25mIGlmYzsKLSAgICBnY2hhciBidWZbODE5Ml07Ci0KLSAgICBpZmMuaWZjX2xlbiA9IHNpemVvZiAoYnVmKTsKLSAgICBpZmMuaWZjX2J1ZiA9IGJ1ZjsKLSAgICBpZiAoaW9jdGwgKGdfc29ja2V0X2dldF9mZCAoc29ja2V0X2V2ZW50KSwgU0lPQ0dJRkNPTkYsICZpZmMpICE9IC0xKSB7Ci0gICAgICBndWludCBpLCBpZHggPSAwOwotCi0gICAgICBwcm9iZWRfaWZhY2VzID0gZ19uZXcwIChnY2hhciAqLCBpZmMuaWZjX2xlbiArIDEpOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgaWZjLmlmY19sZW4gLyBzaXplb2YgKHN0cnVjdCBpZnJlcSk7IGkrKykgewotICAgICAgICBzdHJuY3B5IChpZnIuaWZyX25hbWUsIGlmYy5pZmNfcmVxW2ldLmlmcl9uYW1lLCBJRk5BTVNJWik7Ci0gICAgICAgIGlmIChpb2N0bCAoZ19zb2NrZXRfZ2V0X2ZkIChzb2NrZXRfZXZlbnQpLCBTSU9DR0lGRkxBR1MsICZpZnIpID09IDApIHsKLSAgICAgICAgICBpZiAoKGlmci5pZnJfZmxhZ3MgJiBJRkZfTE9PUEJBQ0spKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgcHJvYmVkX2lmYWNlc1tpZHhdID0gZ19zdHJuZHVwIChpZmMuaWZjX3JlcVtpXS5pZnJfbmFtZSwgSUZOQU1TSVopOwotICAgICAgICAgIGlkeCsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdfd2FybmluZyAoImNhbid0IGdldCBmbGFncyBvZiBpbnRlcmZhY2UgJyVzJyIsCi0gICAgICAgICAgICAgIGlmYy5pZmNfcmVxW2ldLmlmcl9uYW1lKTsKLSAgICAgICAgICBwcm9iZWRfaWZhY2VzW2lkeF0gPSBnX3N0cm5kdXAgKGlmYy5pZmNfcmVxW2ldLmlmcl9uYW1lLCBJRk5BTVNJWik7Ci0gICAgICAgICAgaWR4Kys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlkeCAhPSAwKQotICAgICAgICAgIGlmYWNlcyA9IHByb2JlZF9pZmFjZXM7Ci0gICAgICB9Ci0gICAgfQotI2VsaWYgZGVmaW5lZChIQVZFX0dFVElGQUREUlNfQUZfTElOSykKLSAgICBzdHJ1Y3QgaWZhZGRycyAqaWZhZGRyLCAqaWZhOwotCi0gICAgaWYgKGdldGlmYWRkcnMgKCZpZmFkZHIpICE9IC0xKSB7Ci0gICAgICBHUHRyQXJyYXkgKmFycjsKLQotICAgICAgYXJyID0gZ19wdHJfYXJyYXlfbmV3ICgpOwotCi0gICAgICBmb3IgKGlmYSA9IGlmYWRkcjsgaWZhOyBpZmEgPSBpZmEtPmlmYV9uZXh0KSB7Ci0gICAgICAgIGlmICgoaWZhLT5pZmFfZmxhZ3MgJiBJRkZfTE9PUEJBQ0spKQotICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghaWZhLT5pZmFfYWRkciB8fCBpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfTElOSykKLSAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBnX3B0cl9hcnJheV9hZGQgKGFyciwgZ19zdHJkdXAgKGlmYS0+aWZhX25hbWUpKTsKLSAgICAgIH0KLSAgICAgIGZyZWVpZmFkZHJzIChpZmFkZHIpOwotCi0gICAgICBnX3B0cl9hcnJheV9hZGQgKGFyciwgTlVMTCk7Ci0gICAgICBpZmFjZXMgPSBwcm9iZWRfaWZhY2VzID0gKGdjaGFyICoqKSBnX3B0cl9hcnJheV9mcmVlIChhcnIsIEZBTFNFKTsKLSAgICB9Ci0jZWxzZQotI3dhcm5pbmcgIkltcGxlbWVudCBzb21ldGhpbmcgdG8gbGlzdCBhbGwgbmV0d29yayBpbnRlcmZhY2VzIgotI2VuZGlmCi0gIH0KLQotICAvKiBHZXQgYSBjbG9jayBpZCBmcm9tIHRoZSBNQUMgYWRkcmVzcyBpZiBub25lIHdhcyBnaXZlbiAqLwotICBpZiAoY2xvY2tfaWQgPT0gKGd1aW50NjQpIC0gMSkgewotICAgIGdib29sZWFuIHN1Y2Nlc3MgPSBGQUxTRTsKLQotI2lmIGRlZmluZWQoSEFWRV9TSU9DR0lGQ09ORl9TSU9DR0lGRkxBR1NfU0lPQ0dJRkhXQUREUikKLSAgICBzdHJ1Y3QgaWZyZXEgaWZyOwotCi0gICAgaWYgKGlmYWNlcykgewotICAgICAgZ2NoYXIgKipwdHIgPSBpZmFjZXM7Ci0KLSAgICAgIHdoaWxlICgqcHRyKSB7Ci0gICAgICAgIHN0cm5jcHkgKGlmci5pZnJfbmFtZSwgKnB0ciwgSUZOQU1TSVopOwotICAgICAgICBpZiAoaW9jdGwgKGdfc29ja2V0X2dldF9mZCAoc29ja2V0X2V2ZW50KSwgU0lPQ0dJRkhXQUREUiwgJmlmcikgPT0gMCkgewotICAgICAgICAgIGNsb2NrX2lkX2FycmF5WzBdID0gaWZyLmlmcl9od2FkZHIuc2FfZGF0YVswXTsKLSAgICAgICAgICBjbG9ja19pZF9hcnJheVsxXSA9IGlmci5pZnJfaHdhZGRyLnNhX2RhdGFbMV07Ci0gICAgICAgICAgY2xvY2tfaWRfYXJyYXlbMl0gPSBpZnIuaWZyX2h3YWRkci5zYV9kYXRhWzJdOwotICAgICAgICAgIGNsb2NrX2lkX2FycmF5WzNdID0gMHhmZjsKLSAgICAgICAgICBjbG9ja19pZF9hcnJheVs0XSA9IDB4ZmU7Ci0gICAgICAgICAgY2xvY2tfaWRfYXJyYXlbNV0gPSBpZnIuaWZyX2h3YWRkci5zYV9kYXRhWzNdOwotICAgICAgICAgIGNsb2NrX2lkX2FycmF5WzZdID0gaWZyLmlmcl9od2FkZHIuc2FfZGF0YVs0XTsKLSAgICAgICAgICBjbG9ja19pZF9hcnJheVs3XSA9IGlmci5pZnJfaHdhZGRyLnNhX2RhdGFbNV07Ci0gICAgICAgICAgc3VjY2VzcyA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHRyKys7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0cnVjdCBpZmNvbmYgaWZjOwotICAgICAgZ2NoYXIgYnVmWzgxOTJdOwotCi0gICAgICBpZmMuaWZjX2xlbiA9IHNpemVvZiAoYnVmKTsKLSAgICAgIGlmYy5pZmNfYnVmID0gYnVmOwotICAgICAgaWYgKGlvY3RsIChnX3NvY2tldF9nZXRfZmQgKHNvY2tldF9ldmVudCksIFNJT0NHSUZDT05GLCAmaWZjKSAhPSAtMSkgewotICAgICAgICBndWludCBpOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpZmMuaWZjX2xlbiAvIHNpemVvZiAoc3RydWN0IGlmcmVxKTsgaSsrKSB7Ci0gICAgICAgICAgc3RybmNweSAoaWZyLmlmcl9uYW1lLCBpZmMuaWZjX3JlcVtpXS5pZnJfbmFtZSwgSUZOQU1TSVopOwotICAgICAgICAgIGlmIChpb2N0bCAoZ19zb2NrZXRfZ2V0X2ZkIChzb2NrZXRfZXZlbnQpLCBTSU9DR0lGRkxBR1MsICZpZnIpID09IDApIHsKLSAgICAgICAgICAgIGlmICgoaWZyLmlmcl9mbGFncyAmIElGRl9MT09QQkFDSykpCi0gICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoaW9jdGwgKGdfc29ja2V0X2dldF9mZCAoc29ja2V0X2V2ZW50KSwgU0lPQ0dJRkhXQUREUiwKLSAgICAgICAgICAgICAgICAgICAgJmlmcikgPT0gMCkgewotICAgICAgICAgICAgICBjbG9ja19pZF9hcnJheVswXSA9IGlmci5pZnJfaHdhZGRyLnNhX2RhdGFbMF07Ci0gICAgICAgICAgICAgIGNsb2NrX2lkX2FycmF5WzFdID0gaWZyLmlmcl9od2FkZHIuc2FfZGF0YVsxXTsKLSAgICAgICAgICAgICAgY2xvY2tfaWRfYXJyYXlbMl0gPSBpZnIuaWZyX2h3YWRkci5zYV9kYXRhWzJdOwotICAgICAgICAgICAgICBjbG9ja19pZF9hcnJheVszXSA9IDB4ZmY7Ci0gICAgICAgICAgICAgIGNsb2NrX2lkX2FycmF5WzRdID0gMHhmZTsKLSAgICAgICAgICAgICAgY2xvY2tfaWRfYXJyYXlbNV0gPSBpZnIuaWZyX2h3YWRkci5zYV9kYXRhWzNdOwotICAgICAgICAgICAgICBjbG9ja19pZF9hcnJheVs2XSA9IGlmci5pZnJfaHdhZGRyLnNhX2RhdGFbNF07Ci0gICAgICAgICAgICAgIGNsb2NrX2lkX2FycmF5WzddID0gaWZyLmlmcl9od2FkZHIuc2FfZGF0YVs1XTsKLSAgICAgICAgICAgICAgc3VjY2VzcyA9IFRSVUU7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnX3dhcm5pbmcgKCJjYW4ndCBnZXQgZmxhZ3Mgb2YgaW50ZXJmYWNlICclcyciLAotICAgICAgICAgICAgICAgIGlmYy5pZmNfcmVxW2ldLmlmcl9uYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0jZWxpZiBkZWZpbmVkKEhBVkVfR0VUSUZBRERSU19BRl9MSU5LKQotICAgIHN0cnVjdCBpZmFkZHJzICppZmFkZHIsICppZmE7Ci0KLSAgICBpZiAoZ2V0aWZhZGRycyAoJmlmYWRkcikgIT0gLTEpIHsKLSAgICAgIGZvciAoaWZhID0gaWZhZGRyOyBpZmE7IGlmYSA9IGlmYS0+aWZhX25leHQpIHsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2RsICpzZGwgPSAoc3RydWN0IHNvY2thZGRyX2RsICopIGlmYS0+aWZhX2FkZHI7Ci0gICAgICAgIGd1aW50OCBtYWNfYWRkcls2XTsKLQotICAgICAgICBpZiAoKGlmYS0+aWZhX2ZsYWdzICYgSUZGX0xPT1BCQUNLKSkKLSAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWlmYS0+aWZhX2FkZHIgfHwgaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0xJTkspCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGlmYWNlcykgewotICAgICAgICAgIGdjaGFyICoqcCA9IGlmYWNlczsKLSAgICAgICAgICBnYm9vbGVhbiBmb3VuZCA9IEZBTFNFOwotCi0gICAgICAgICAgd2hpbGUgKCpwKSB7Ci0gICAgICAgICAgICBpZiAoc3RyY21wICgqcCwgaWZhLT5pZmFfbmFtZSkgPT0gMCkgewotICAgICAgICAgICAgICBmb3VuZCA9IFRSVUU7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcCsrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzZGwtPnNkbF9hbGVuICE9IDYpCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbWVtY3B5IChtYWNfYWRkciwgTExBRERSIChzZGwpLCBzZGwtPnNkbF9hbGVuKTsKLQotICAgICAgICBjbG9ja19pZF9hcnJheVswXSA9IG1hY19hZGRyWzBdOwotICAgICAgICBjbG9ja19pZF9hcnJheVsxXSA9IG1hY19hZGRyWzFdOwotICAgICAgICBjbG9ja19pZF9hcnJheVsyXSA9IG1hY19hZGRyWzJdOwotICAgICAgICBjbG9ja19pZF9hcnJheVszXSA9IDB4ZmY7Ci0gICAgICAgIGNsb2NrX2lkX2FycmF5WzRdID0gMHhmZTsKLSAgICAgICAgY2xvY2tfaWRfYXJyYXlbNV0gPSBtYWNfYWRkclszXTsKLSAgICAgICAgY2xvY2tfaWRfYXJyYXlbNl0gPSBtYWNfYWRkcls0XTsKLSAgICAgICAgY2xvY2tfaWRfYXJyYXlbN10gPSBtYWNfYWRkcls1XTsKLSAgICAgICAgc3VjY2VzcyA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBmcmVlaWZhZGRycyAoaWZhZGRyKTsKLSAgICB9Ci0jZWxzZQotI3dhcm5pbmcgIkltcGxlbWVudCBzb21ldGhpbmcgdG8gZ2V0IE1BQyBhZGRyZXNzZXMgb2YgbmV0d29yayBpbnRlcmZhY2VzIgotI2VuZGlmCi0KLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgIGdfd2FybmluZyAoImNhbid0IGdldCBhbnkgTUFDIGFkZHJlc3MsIHVzaW5nIHJhbmRvbSBjbG9jayBpZCIpOwotICAgICAgY2xvY2tfaWQgPSAoKChndWludDY0KSBnX3JhbmRvbV9pbnQgKCkpIDw8IDMyKSB8IChnX3JhbmRvbV9pbnQgKCkpOwotICAgICAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoY2xvY2tfaWRfYXJyYXksIGNsb2NrX2lkKTsKLSAgICAgIGNsb2NrX2lkX2FycmF5WzNdID0gMHhmZjsKLSAgICAgIGNsb2NrX2lkX2FycmF5WzRdID0gMHhmZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoY2xvY2tfaWRfYXJyYXksIGNsb2NrX2lkKTsKLSAgfQotCi0gIC8qIEpvaW4gbXVsdGljYXN0IGdyb3VwcyAqLwotICBtY2FzdF9hZGRyID0gZ19pbmV0X2FkZHJlc3NfbmV3X2Zyb21fc3RyaW5nIChQVFBfTVVMVElDQVNUX0dST1VQKTsKLSAgaWYgKGlmYWNlcykgewotICAgIGdjaGFyICoqcHRyID0gaWZhY2VzOwotICAgIGdib29sZWFuIHN1Y2Nlc3MgPSBGQUxTRTsKLQotICAgIHdoaWxlICgqcHRyKSB7Ci0gICAgICBnaW50IGMgPSAwOwotICAgICAgaWYgKCFnX3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cCAoc29ja2V0X2V2ZW50LCBtY2FzdF9hZGRyLCBGQUxTRSwgKnB0ciwKLSAgICAgICAgICAgICAgJmVycikKLSAgICAgICAgICAmJiAhZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQUREUkVTU19JTl9VU0UpKQotICAgICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBqb2luIG11bHRpY2FzdCBncm91cCBvbiBpbnRlcmZhY2UgJyVzJzogJXMiLCAqcHRyLAotICAgICAgICAgICAgZXJyLT5tZXNzYWdlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYysrOwotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0KLSAgICAgIGlmICghZ19zb2NrZXRfam9pbl9tdWx0aWNhc3RfZ3JvdXAgKHNvY2tldF9nZW5lcmFsLCBtY2FzdF9hZGRyLCBGQUxTRSwKLSAgICAgICAgICAgICAgKnB0ciwgJmVycikKLSAgICAgICAgICAmJiAhZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQUREUkVTU19JTl9VU0UpKQotICAgICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBqb2luIG11bHRpY2FzdCBncm91cCBvbiBpbnRlcmZhY2UgJyVzJzogJXMiLCAqcHRyLAotICAgICAgICAgICAgZXJyLT5tZXNzYWdlKTsKLSAgICAgIGVsc2UKLSAgICAgICAgYysrOwotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0KLSAgICAgIGlmIChjID09IDIpCi0gICAgICAgIHN1Y2Nlc3MgPSBUUlVFOwotICAgICAgcHRyKys7Ci0gICAgfQotCi0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAvKiBKb2luIG11bHRpY2FzdCBncm91cCB3aXRob3V0IGFueSBpbnRlcmZhY2UgKi8KLSAgICAgIGlmICghZ19zb2NrZXRfam9pbl9tdWx0aWNhc3RfZ3JvdXAgKHNvY2tldF9ldmVudCwgbWNhc3RfYWRkciwgRkFMU0UsIE5VTEwsCi0gICAgICAgICAgICAgICZlcnIpKQotICAgICAgICBnX2Vycm9yICgiQ291bGRuJ3Qgam9pbiBtdWx0aWNhc3QgZ3JvdXA6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgaWYgKCFnX3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cCAoc29ja2V0X2dlbmVyYWwsIG1jYXN0X2FkZHIsIEZBTFNFLAotICAgICAgICAgICAgICBOVUxMLCAmZXJyKSkKLSAgICAgICAgZ19lcnJvciAoIkNvdWxkbid0IGpvaW4gbXVsdGljYXN0IGdyb3VwOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogSm9pbiBtdWx0aWNhc3QgZ3JvdXAgd2l0aG91dCBhbnkgaW50ZXJmYWNlICovCi0gICAgaWYgKCFnX3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cCAoc29ja2V0X2V2ZW50LCBtY2FzdF9hZGRyLCBGQUxTRSwgTlVMTCwKLSAgICAgICAgICAgICZlcnIpKQotICAgICAgZ19lcnJvciAoIkNvdWxkbid0IGpvaW4gbXVsdGljYXN0IGdyb3VwOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgaWYgKCFnX3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cCAoc29ja2V0X2dlbmVyYWwsIG1jYXN0X2FkZHIsIEZBTFNFLCBOVUxMLAotICAgICAgICAgICAgJmVycikpCi0gICAgICBnX2Vycm9yICgiQ291bGRuJ3Qgam9pbiBtdWx0aWNhc3QgZ3JvdXA6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgfQotCi0gIGV2ZW50X3NhZGRyID0gZ19pbmV0X3NvY2tldF9hZGRyZXNzX25ldyAobWNhc3RfYWRkciwgUFRQX0VWRU5UX1BPUlQpOwotICBnZW5lcmFsX3NhZGRyID0gZ19pbmV0X3NvY2tldF9hZGRyZXNzX25ldyAobWNhc3RfYWRkciwgUFRQX0dFTkVSQUxfUE9SVCk7Ci0KLSAgLyogQ3JlYXRlIHNvY2tldCBzb3VyY2VzICovCi0gIHNvY2tldF9ldmVudF9zb3VyY2UgPQotICAgICAgZ19zb2NrZXRfY3JlYXRlX3NvdXJjZSAoc29ja2V0X2V2ZW50LCBHX0lPX0lOIHwgR19JT19QUkksIE5VTEwpOwotICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkgKHNvY2tldF9ldmVudF9zb3VyY2UsIEdfUFJJT1JJVFlfSElHSCk7Ci0gIGdfc291cmNlX3NldF9jYWxsYmFjayAoc29ja2V0X2V2ZW50X3NvdXJjZSwgKEdTb3VyY2VGdW5jKSBoYXZlX3NvY2tldF9kYXRhX2NiLAotICAgICAgTlVMTCwgTlVMTCk7Ci0gIGdfc291cmNlX2F0dGFjaCAoc29ja2V0X2V2ZW50X3NvdXJjZSwgTlVMTCk7Ci0gIHNvY2tldF9nZW5lcmFsX3NvdXJjZSA9Ci0gICAgICBnX3NvY2tldF9jcmVhdGVfc291cmNlIChzb2NrZXRfZ2VuZXJhbCwgR19JT19JTiB8IEdfSU9fUFJJLCBOVUxMKTsKLSAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5IChzb2NrZXRfZ2VuZXJhbF9zb3VyY2UsIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0gIGdfc291cmNlX3NldF9jYWxsYmFjayAoc29ja2V0X2dlbmVyYWxfc291cmNlLAotICAgICAgKEdTb3VyY2VGdW5jKSBoYXZlX3NvY2tldF9kYXRhX2NiLCBOVUxMLCBOVUxMKTsKLSAgZ19zb3VyY2VfYXR0YWNoIChzb2NrZXRfZ2VuZXJhbF9zb3VyY2UsIE5VTEwpOwotCi0gIGdfc3RyZnJlZXYgKHByb2JlZF9pZmFjZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZHJvcF9wcml2aWxlZ2VzICh2b2lkKQotewotI2lmZGVmIEhBVkVfUFRQX0hFTFBFUl9TRVRVSUQKLSAgLyogU3dpdGNoIHRvIHRoZSBnaXZlbiB1c2VyL2dyb3VwICovCi0jaWZkZWYgSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9HUk9VUAotICB7Ci0gICAgc3RydWN0IGdyb3VwICpncnA7Ci0KLSAgICBncnAgPSBnZXRncm5hbSAoSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9HUk9VUCk7Ci0gICAgaWYgKCFncnApCi0gICAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGdldCBncm91cCBpbmZvcm1hdGlvbiAnJXMnOiAlcyIsCi0gICAgICAgICAgSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9HUk9VUCwgZ19zdHJlcnJvciAoZXJybm8pKTsKLQotICAgIGlmIChzZXRnaWQgKGdycC0+Z3JfZ2lkKSAhPSAwKQotICAgICAgZ19lcnJvciAoIkZhaWxlZCB0byBjaGFuZ2UgdG8gZ3JvdXAgJyVzJzogJXMiLAotICAgICAgICAgIEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfR1JPVVAsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9VU0VSCi0gIHsKLSAgICBzdHJ1Y3QgcGFzc3dkICpwd2Q7Ci0KLSAgICBwd2QgPSBnZXRwd25hbSAoSEFWRV9QVFBfSEVMUEVSX1NFVFVJRF9VU0VSKTsKLSAgICBpZiAoIXB3ZCkKLSAgICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gZ2V0IHVzZXIgaW5mb3JtYXRpb24gJyVzJzogJXMiLAotICAgICAgICAgIEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfVVNFUiwgZ19zdHJlcnJvciAoZXJybm8pKTsKLQotI2lmbmRlZiBIQVZFX1BUUF9IRUxQRVJfU0VUVUlEX0dST1VQCi0gICAgaWYgKHNldGdpZCAocHdkLT5wd19naWQpICE9IDApCi0gICAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGNoYW5nZSB0byB1c2VyIGdyb3VwICclcyc6ICVzIiwKLSAgICAgICAgICBIQVZFX1BUUF9IRUxQRVJfU0VUVUlEX1VTRVIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0jZW5kaWYKLQotICAgIGlmIChzZXR1aWQgKHB3ZC0+cHdfdWlkKSAhPSAwKQotICAgICAgZ19lcnJvciAoIkZhaWxlZCB0byBjaGFuZ2UgdG8gdXNlciAnJXMnOiAlcyIsIEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfVVNFUiwKLSAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICB9Ci0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIEhBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVMKLSAgLyogRHJvcCBhbGwgY2FwYWJpbGl0aWVzICovCi0gIHsKLSAgICBjYXBfdCBjYXBzOwotCi0gICAgY2FwcyA9IGNhcF9nZXRfcHJvYyAoKTsKLSAgICBpZiAoY2FwcyA9PSAwKQotICAgICAgZ19lcnJvciAoIkZhaWxlZCB0byBnZXQgcHJvY2VzcyBjYXBzOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgaWYgKGNhcF9jbGVhciAoY2FwcykgIT0gMCkKLSAgICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gY2xlYXIgY2FwczogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgIGlmIChjYXBfc2V0X3Byb2MgKGNhcHMpICE9IDApCi0gICAgICBnX2Vycm9yICgiRmFpbGVkIHRvIHNldCBwcm9jZXNzIGNhcHM6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9zdGRpb19jaGFubmVscyAodm9pZCkKLXsKLSAgR1NvdXJjZSAqc3RkaW5fc291cmNlOwotCi0gIC8qIENyZWF0ZSBzdGRpbiBzb3VyY2UgKi8KLSAgc3RkaW5fY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAoU1RESU5fRklMRU5PKTsKLSAgaWYgKGdfaW9fY2hhbm5lbF9zZXRfZW5jb2RpbmcgKHN0ZGluX2NoYW5uZWwsIE5VTEwsCi0gICAgICAgICAgTlVMTCkgPT0gR19JT19TVEFUVVNfRVJST1IpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBzZXQgc3RkaW4gdG8gYmluYXJ5IGVuY29kaW5nIik7Ci0gIGdfaW9fY2hhbm5lbF9zZXRfYnVmZmVyZWQgKHN0ZGluX2NoYW5uZWwsIEZBTFNFKTsKLSAgc3RkaW5fc291cmNlID0KLSAgICAgIGdfaW9fY3JlYXRlX3dhdGNoIChzdGRpbl9jaGFubmVsLCBHX0lPX0lOIHwgR19JT19QUkkgfCBHX0lPX0hVUCk7Ci0gIGdfc291cmNlX3NldF9wcmlvcml0eSAoc3RkaW5fc291cmNlLCBHX1BSSU9SSVRZX0RFRkFVTFQpOwotICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sgKHN0ZGluX3NvdXJjZSwgKEdTb3VyY2VGdW5jKSBoYXZlX3N0ZGluX2RhdGFfY2IsIE5VTEwsCi0gICAgICBOVUxMKTsKLSAgZ19zb3VyY2VfYXR0YWNoIChzdGRpbl9zb3VyY2UsIE5VTEwpOwotCi0gIC8qIENyZWF0ZSBzdGRvdXQgY2hhbm5lbCAqLwotICBzdGRvdXRfY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAoU1RET1VUX0ZJTEVOTyk7Ci0gIGlmIChnX2lvX2NoYW5uZWxfc2V0X2VuY29kaW5nIChzdGRvdXRfY2hhbm5lbCwgTlVMTCwKLSAgICAgICAgICBOVUxMKSA9PSBHX0lPX1NUQVRVU19FUlJPUikKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIHNldCBzdGRvdXQgdG8gYmluYXJ5IGVuY29kaW5nIik7Ci0gIGdfaW9fY2hhbm5lbF9zZXRfYnVmZmVyZWQgKHN0ZG91dF9jaGFubmVsLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13cml0ZV9jbG9ja19pZCAodm9pZCkKLXsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotICBHSU9TdGF0dXMgc3RhdHVzOwotICBTdGRJT0hlYWRlciBoZWFkZXIgPSB7IDAsIH07Ci0gIGdzaXplIHdyaXR0ZW47Ci0KLSAgLyogV3JpdGUgY2xvY2sgaWQgdG8gc3Rkb3V0ICovCi0KLSAgaGVhZGVyLnR5cGUgPSBUWVBFX0NMT0NLX0lEOwotICBoZWFkZXIuc2l6ZSA9IDg7Ci0gIHN0YXR1cyA9Ci0gICAgICBnX2lvX2NoYW5uZWxfd3JpdGVfY2hhcnMgKHN0ZG91dF9jaGFubmVsLCAoZ2NoYXIgKikgJiBoZWFkZXIsCi0gICAgICBzaXplb2YgKGhlYWRlciksICZ3cml0dGVuLCAmZXJyKTsKLSAgaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19FUlJPUikgewotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gd3JpdGUgdG8gc3Rkb3V0OiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzID09IEdfSU9fU1RBVFVTX0VPRikgewotICAgIGdfbWVzc2FnZSAoIkVPRiBvbiBzdGRvdXQiKTsKLSAgICBleGl0ICgwKTsKLSAgfSBlbHNlIGlmIChzdGF0dXMgIT0gR19JT19TVEFUVVNfTk9STUFMKSB7Ci0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgc3Rkb3V0IHdyaXRlIHN0YXR1czogJWQiLCBzdGF0dXMpOwotICB9IGVsc2UgaWYgKHdyaXR0ZW4gIT0gc2l6ZW9mIChoZWFkZXIpKSB7Ci0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgd3JpdGUgc2l6ZTogJSIgR19HU0laRV9GT1JNQVQsIHdyaXR0ZW4pOwotICB9Ci0KLSAgc3RhdHVzID0KLSAgICAgIGdfaW9fY2hhbm5lbF93cml0ZV9jaGFycyAoc3Rkb3V0X2NoYW5uZWwsCi0gICAgICAoY29uc3QgZ2NoYXIgKikgY2xvY2tfaWRfYXJyYXksIHNpemVvZiAoY2xvY2tfaWRfYXJyYXkpLCAmd3JpdHRlbiwgJmVycik7Ci0gIGlmIChzdGF0dXMgPT0gR19JT19TVEFUVVNfRVJST1IpIHsKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIHdyaXRlIHRvIHN0ZG91dDogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19FT0YpIHsKLSAgICBnX21lc3NhZ2UgKCJFT0Ygb24gc3Rkb3V0Iik7Ci0gICAgZXhpdCAoMCk7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzICE9IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgIGdfZXJyb3IgKCJVbmV4cGVjdGVkIHN0ZG91dCB3cml0ZSBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKLSAgfSBlbHNlIGlmICh3cml0dGVuICE9IHNpemVvZiAoY2xvY2tfaWRfYXJyYXkpKSB7Ci0gICAgZ19lcnJvciAoIlVuZXhwZWN0ZWQgd3JpdGUgc2l6ZTogJSIgR19HU0laRV9GT1JNQVQsIHdyaXR0ZW4pOwotICB9Ci19Ci0KLSNpZmRlZiBfX0FQUExFX18KLXN0YXRpYyBnaW50Ci1kdW1teV9wb2xsIChHUG9sbEZEICogZmRzLCBndWludCBuZmRzLCBnaW50IHRpbWVvdXQpCi17Ci0gIHJldHVybiBnX3BvbGwgKGZkcywgbmZkcywgdGltZW91dCk7Ci19Ci0jZW5kaWYKLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQotewotICBHT3B0aW9uQ29udGV4dCAqb3B0X2N0eDsKLSAgR01haW5Mb29wICpsb29wOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgLyogRklYTUU6IFdvcmsgYXJvdW5kIHNvbWUgc2lkZSBlZmZlY3RzIG9mIHRoZSBjaGFuZ2VzIGZyb20KLSAgICogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTA1NAotICAgKgotICAgKiBUaGUgbW9kaWZpZWQgcG9sbCBmdW5jdGlvbiBzb21laG93IGNhbGxzIHNldHVnaWQoKSwgd2hpY2gKLSAgICogdGhlbiBhYm9ydCgpcyB0aGUgYXBwbGljYXRpb24uIE1ha2Ugc3VyZSB0aGF0IHdlIHVzZSBnX3BvbGwoKQotICAgKiBoZXJlIQotICAgKi8KLSNpZmRlZiBfX0FQUExFX18KLSAgewotICAgIEdNYWluQ29udGV4dCAqY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQgKCk7Ci0gICAgZ19tYWluX2NvbnRleHRfc2V0X3BvbGxfZnVuYyAoY29udGV4dCwgZHVtbXlfcG9sbCk7Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9QVFBfSEVMUEVSX1NFVFVJRAotICBpZiAoc2V0dWlkICgwKSA8IDApCi0gICAgZ19lcnJvciAoIm5vdCBydW5uaW5nIHdpdGggc3VwZXJ1c2VyIHByaXZpbGVnZXMiKTsKLSNlbmRpZgotCi0gIG9wdF9jdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIi0gR1N0cmVhbWVyIFBUUCBoZWxwZXIgcHJvY2VzcyIpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKG9wdF9jdHgsIG9wdF9lbnRyaWVzLCBOVUxMKTsKLSAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChvcHRfY3R4LCAmYXJnYywgJmFyZ3YsICZlcnIpKQotICAgIGdfZXJyb3IgKCJFcnJvciBwYXJzaW5nIG9wdGlvbnM6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAob3B0X2N0eCk7Ci0KLSAgc2V0dXBfc29ja2V0cyAoKTsKLSAgZHJvcF9wcml2aWxlZ2VzICgpOwotICBzZXR1cF9zdGRpb19jaGFubmVscyAoKTsKLSAgd3JpdGVfY2xvY2tfaWQgKCk7Ci0KLSAgLyogR2V0IHJ1bm5pbmcgKi8KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIC8qIFdlIG5ldmVyIGV4aXQgY2xlYW5seSwgc28gZG9uJ3QgZG8gY2xlYW51cCAqLwotICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbSBiL2xpYnMvZ3N0L25ldC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQxYjZhOC4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9uZXQvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi1saWJfTFRMSUJSQVJJRVMgPSBsaWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGEKLQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2dzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQC9nc3QvbmV0Ci1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZV9IRUFERVJTID0gXAotICAgIG5ldC5oIFwKLSAgICBnc3RuZXQuaCBcCi0gICAgZ3N0bmV0YWRkcmVzc21ldGEuaCBcCi0gICAgZ3N0bmV0Y2xpZW50Y2xvY2suaCBcCi0gICAgZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmggXAotICAgIGdzdG5ldHRpbWVwYWNrZXQuaCBcCi0gICAgZ3N0bmV0dGltZXByb3ZpZGVyLmggXAotICAgIGdzdHB0cGNsb2NrLmgKLQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBcCi0gICAgZ3N0bmV0YWRkcmVzc21ldGEuYyBcCi0gICAgZ3N0bmV0Y2xpZW50Y2xvY2suYyBcCi0gICAgZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmMgXAotICAgIGdzdG5ldHRpbWVwYWNrZXQuYyBcCi0gICAgZ3N0bmV0dGltZXByb3ZpZGVyLmMgXAotICAgIGdzdHB0cGNsb2NrLmMgXAotICAgIGdzdG50cHBhY2tldC5jCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0cHRwX3ByaXZhdGUuaCBnc3RudHBwYWNrZXQuaAotCi1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChHSU9fQ0ZMQUdTKQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSAkKEdJT19MSUJTKSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xERkxBR1MgPSAkKEdTVF9MSUJfTERGTEFHUykgJChHU1RfQUxMX0xERkxBR1MpICQoR1NUX0xUX0xERkxBR1MpCi0KLSMgdHJ5IHRvIHByZXZlbnQgcGFja2FnaW5nIGVycm9ycwotY2hlY2stbGliZXhlY2Rpci1jb25zaXN0ZW5jeToKLQlAaWYgdGVzdCAiJHtHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUR9IiAhPSAiJHtsaWJleGVjZGlyfS9nc3RyZWFtZXItJChHU1RfQVBJX1ZFUlNJT04pL2dzdC1wdHAtaGVscGVyIjsgdGhlbiBcCi0JICBlY2hvICIqKiogSW5jb25zaXN0ZW50IGxpYmV4ZWNkaXIhIFBsZWFzZSB1c2UgLi9jb25maWd1cmUgLS1saWJleGVjZGlyPS9mb28vYmFyIjsgXAotCSAgZWNobyAiKioqIHRvIHNldCB0aGUgbGliZXhlY2RpciBhbmQgbm90IG1ha2UgbGliZXhlY2Rpcj0vZm9vL2JhciBvciB0aGUgbGlrZS4iOyBcCi0JICBlY2hvICIqKiogVGhlIHNhbWUgZ29lcyBmb3IgcHJlZml4LCBsaWJkaXIgZXRjLiI7IFwKLQkgIGVjaG8gIioqKiAke0dTVF9QVFBfSEVMUEVSX0lOU1RBTExFRH0gIT0gJHtsaWJleGVjZGlyfS9nc3RyZWFtZXItJChHU1RfQVBJX1ZFUlNJT04pL2dzdC1wdHAtaGVscGVyIjsgXAotCSAgZXhpdCAxOyBcCi0JZmkKLQotYWxsLWxvY2FsOiBjaGVjay1saWJleGVjZGlyLWNvbnNpc3RlbmN5Ci0KLUNMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdgotCi0lLmMuZ2NvdjogLmxpYnMvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLSUuZ2NkYSAlLmMKLQkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0Ci0KLWdjb3Y6ICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVM6PS5nY292KQotCi0KLWlmIEhBVkVfSU5UUk9TUEVDVElPTgotQlVJTFRfR0lSU09VUkNFUyA9IEdzdE5ldC1AR1NUX0FQSV9WRVJTSU9OQC5naXIKLQotZ2lyX2hlYWRlcnM9JChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlX0hFQURFUlMpKQotZ2lyX3NvdXJjZXM9JChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKSkKLWdpcl9jaW5jbHVkZXM9LS1jLWluY2x1ZGU9ImdzdC9uZXQvbmV0LmgiCi0KLUdzdE5ldC1AR1NUX0FQSV9WRVJTSU9OQC5naXI6ICQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSBsaWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGEKLQkkKEFNX1ZfR0VOKVBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPXllc1wKLQkJR1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA9IiIgR1NUX1BMVUdJTl9QQVRIXzFfMD0iIiBHU1RfUkVHSVNUUllfVVBEQVRFPW5vIFwKLQkJQ1BQRkxBR1M9IiQoQ1BQRkxBR1MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgQ0M9IiQoQ0MpIiBQS0dfQ09ORklHPSIkKFBLR19DT05GSUcpIiBETExUT09MPSIkKERMTFRPT0wpIiBcCi0JCSQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSAtdiAtLW5hbWVzcGFjZSBHc3ROZXQgXAotCQktLWlkZW50aWZpZXItcHJlZml4PUdzdCBcCi0JCS0tc3ltYm9sLXByZWZpeD1nc3QgXAotCQktLXdhcm4tYWxsIFwKLQkJLS1uc3ZlcnNpb249QEdTVF9BUElfVkVSU0lPTkAgXAotCQktSSQodG9wX3NyY2RpcikgXAotCQktSSQodG9wX3NyY2RpcikvbGlicyBcCi0JCS1JJCh0b3BfYnVpbGRkaXIpIFwKLQkJLUkkKHRvcF9idWlsZGRpcikvbGlicyBcCi0JCSQoZ2lyX2NpbmNsdWRlcykgXAotCQktLWFkZC1pbmNsdWRlLXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCi0JCS0tbGlicmFyeS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAotCQktLWxpYnJhcnk9bGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkJLS1pbmNsdWRlPUdzdC1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JCS0taW5jbHVkZT1HaW8tMi4wIFwKLQkJLS1saWJ0b29sPSIke0xJQlRPT0x9IiBcCi0JCS0tcGtnIGdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JCS0tcGtnIGdpby0yLjAgXAotCQktLXBrZy1leHBvcnQ9ImdzdHJlYW1lci1uZXQtQEdTVF9BUElfVkVSU0lPTkAiIFwKLQkJLS1hZGQtaW5pdC1zZWN0aW9uPSIkKElOVFJPU1BFQ1RJT05fSU5JVCkiIFwKLQkJLS1vdXRwdXQgJEAgXAotCQkkKGdpcl9oZWFkZXJzKSBcCi0JCSQoZ2lyX3NvdXJjZXMpCi0KLSMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KLSMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KLWdpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAotZ2lyX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVMpCi0KLXR5cGVsaWJzZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAvCi0KLXR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKLQotJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCi0JJChBTV9WX0dFTikkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpIC0taW5jbHVkZWRpcj0kKHNyY2RpcikgLS1pbmNsdWRlZGlyPSQoYnVpbGRkaXIpIC0taW5jbHVkZWRpcj0kKHRvcF9idWlsZGRpcikvZ3N0ICQoSU5UUk9TUEVDVElPTl9DT01QSUxFUl9PUFRTKSAkPCAtbyAkKEBGKQotCi1DTEVBTkZJTEVTICs9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQotZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9NYWtlZmlsZS5pbiBiL2xpYnMvZ3N0L25ldC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRmYTQ5Mi4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9uZXQvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMDg4ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGFtX19hcHBlbmRfMSA9ICQoQlVJTFRfR0lSU09VUkNFUykgJCh0eXBlbGlic19EQVRBKQotc3ViZGlyID0gbGlicy9nc3QvbmV0Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAotCSQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVfSEVBREVSUykgXAotCSQobm9pbnN0X0hFQURFUlMpICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGdpcmRpcikiIFwKLQkiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiBcCi0JIiQoREVTVERJUikkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyKSIKLUxUTElCUkFSSUVTID0gJChsaWJfTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi1hbV9saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfT0JKRUNUUyA9ICBcCi0JbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGFkZHJlc3NtZXRhLmxvIFwKLQlsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0Y2xpZW50Y2xvY2subG8gXAotCWxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEubG8gXAotCWxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXR0aW1lcGFja2V0LmxvIFwKLQlsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0dGltZXByb3ZpZGVyLmxvIFwKLQlsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHRwY2xvY2subG8gXAotCWxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RudHBwYWNrZXQubG8KLWxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTID0gIFwKLQkkKGFtX2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1EQVRBID0gJChnaXJfREFUQSkgJCh0eXBlbGlic19EQVRBKQotSEVBREVSUyA9ICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVfSEVBREVSUykgXAotCSQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotbGliX0xUTElCUkFSSUVTID0gbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhCi1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AL2dzdC9uZXQKLWxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlX0hFQURFUlMgPSBcCi0gICAgbmV0LmggXAotICAgIGdzdG5ldC5oIFwKLSAgICBnc3RuZXRhZGRyZXNzbWV0YS5oIFwKLSAgICBnc3RuZXRjbGllbnRjbG9jay5oIFwKLSAgICBnc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuaCBcCi0gICAgZ3N0bmV0dGltZXBhY2tldC5oIFwKLSAgICBnc3RuZXR0aW1lcHJvdmlkZXIuaCBcCi0gICAgZ3N0cHRwY2xvY2suaAotCi1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfU09VUkNFUyA9IFwKLSAgICBnc3RuZXRhZGRyZXNzbWV0YS5jIFwKLSAgICBnc3RuZXRjbGllbnRjbG9jay5jIFwKLSAgICBnc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuYyBcCi0gICAgZ3N0bmV0dGltZXBhY2tldC5jIFwKLSAgICBnc3RuZXR0aW1lcHJvdmlkZXIuYyBcCi0gICAgZ3N0cHRwY2xvY2suYyBcCi0gICAgZ3N0bnRwcGFja2V0LmMKLQotbm9pbnN0X0hFQURFUlMgPSBnc3RwdHBfcHJpdmF0ZS5oIGdzdG50cHBhY2tldC5oCi1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChHSU9fQ0ZMQUdTKQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJQkFERCA9ICQoR1NUX09CSl9MSUJTKSAkKEdJT19MSUJTKSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYQotCi1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfTERGTEFHUyA9ICQoR1NUX0xJQl9MREZMQUdTKSAkKEdTVF9BTExfTERGTEFHUykgJChHU1RfTFRfTERGTEFHUykKLUNMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdiAkKGFtX19hcHBlbmRfMSkKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBCVUlMVF9HSVJTT1VSQ0VTID0gR3N0TmV0LUBHU1RfQVBJX1ZFUlNJT05ALmdpcgotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9oZWFkZXJzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlX0hFQURFUlMpKQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9zb3VyY2VzID0gJChwYXRzdWJzdCAlLCQoc3JjZGlyKS8lLCAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9TT1VSQ0VTKSkKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfY2luY2x1ZGVzID0gLS1jLWluY2x1ZGU9ImdzdC9uZXQvbmV0LmgiCi0KLSMgSU5UUk9TUEVDVElPTl9HSVJESVIvSU5UUk9TUEVDVElPTl9UWVBFTElCRElSIGFyZW4ndCB0aGUgcmlnaHQgcGxhY2UgdG8KLSMgaW5zdGFsbCBhbnl0aGluZyAtIHdlIG5lZWQgdG8gaW5zdGFsbCBpbnNpZGUgb3VyIHByZWZpeC4KLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJkaXIgPSAkKGRhdGFkaXIpL2dpci0xLjAKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJfREFUQSA9ICQoQlVJTFRfR0lSU09VUkNFUykKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUB0eXBlbGlic2RpciA9ICQobGliZGlyKS9naXJlcG9zaXRvcnktMS4wLwotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQHR5cGVsaWJzX0RBVEEgPSAkKEJVSUxUX0dJUlNPVVJDRVM6Lmdpcj0udHlwZWxpYikKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGxpYnMvZ3N0L25ldC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBsaWJzL2dzdC9uZXQvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChsaWJkaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1saWJMVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChsaWJfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGxpYl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGE6ICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX09CSkVDVFMpICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9MSU5LKSAtcnBhdGggJChsaWJkaXIpICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX09CSkVDVFMpICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGFkZHJlc3NtZXRhLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGNsaWVudGNsb2NrLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGNvbnRyb2xtZXNzYWdlbWV0YS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXR0aW1lcGFja2V0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldHRpbWVwcm92aWRlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RudHBwYWNrZXQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHRwY2xvY2suUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRhZGRyZXNzbWV0YS5sbzogZ3N0bmV0YWRkcmVzc21ldGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGFkZHJlc3NtZXRhLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0YWRkcmVzc21ldGEuVHBvIC1jIC1vIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRhZGRyZXNzbWV0YS5sbyBgdGVzdCAtZiAnZ3N0bmV0YWRkcmVzc21ldGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bmV0YWRkcmVzc21ldGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGFkZHJlc3NtZXRhLlRwbyAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGFkZHJlc3NtZXRhLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG5ldGFkZHJlc3NtZXRhLmMnIG9iamVjdD0nbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGFkZHJlc3NtZXRhLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRhZGRyZXNzbWV0YS5sbyBgdGVzdCAtZiAnZ3N0bmV0YWRkcmVzc21ldGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bmV0YWRkcmVzc21ldGEuYwotCi1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0Y2xpZW50Y2xvY2subG86IGdzdG5ldGNsaWVudGNsb2NrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjbGllbnRjbG9jay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGNsaWVudGNsb2NrLlRwbyAtYyAtbyBsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0Y2xpZW50Y2xvY2subG8gYHRlc3QgLWYgJ2dzdG5ldGNsaWVudGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5ldGNsaWVudGNsb2NrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjbGllbnRjbG9jay5UcG8gJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjbGllbnRjbG9jay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RuZXRjbGllbnRjbG9jay5jJyBvYmplY3Q9J2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjbGllbnRjbG9jay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0Y2xpZW50Y2xvY2subG8gYHRlc3QgLWYgJ2dzdG5ldGNsaWVudGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5ldGNsaWVudGNsb2NrLmMKLQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGNvbnRyb2xtZXNzYWdlbWV0YS5sbzogZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuVHBvIC1jIC1vIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEubG8gYHRlc3QgLWYgJ2dzdG5ldGNvbnRyb2xtZXNzYWdlbWV0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGNvbnRyb2xtZXNzYWdlbWV0YS5UcG8gJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmMnIG9iamVjdD0nbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldGNvbnRyb2xtZXNzYWdlbWV0YS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmxvIGB0ZXN0IC1mICdnc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmMKLQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldHRpbWVwYWNrZXQubG86IGdzdG5ldHRpbWVwYWNrZXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldHRpbWVwYWNrZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXR0aW1lcGFja2V0LlRwbyAtYyAtbyBsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0dGltZXBhY2tldC5sbyBgdGVzdCAtZiAnZ3N0bmV0dGltZXBhY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RuZXR0aW1lcGFja2V0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXR0aW1lcGFja2V0LlRwbyAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldHRpbWVwYWNrZXQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bmV0dGltZXBhY2tldC5jJyBvYmplY3Q9J2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXR0aW1lcGFja2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXR0aW1lcGFja2V0LmxvIGB0ZXN0IC1mICdnc3RuZXR0aW1lcGFja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5ldHRpbWVwYWNrZXQuYwotCi1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0dGltZXByb3ZpZGVyLmxvOiBnc3RuZXR0aW1lcHJvdmlkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldHRpbWVwcm92aWRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldHRpbWVwcm92aWRlci5UcG8gLWMgLW8gbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldHRpbWVwcm92aWRlci5sbyBgdGVzdCAtZiAnZ3N0bmV0dGltZXByb3ZpZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5ldHRpbWVwcm92aWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0dGltZXByb3ZpZGVyLlRwbyAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG5ldHRpbWVwcm92aWRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RuZXR0aW1lcHJvdmlkZXIuYycgb2JqZWN0PSdsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bmV0dGltZXByb3ZpZGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RuZXR0aW1lcHJvdmlkZXIubG8gYHRlc3QgLWYgJ2dzdG5ldHRpbWVwcm92aWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RuZXR0aW1lcHJvdmlkZXIuYwotCi1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHRwY2xvY2subG86IGdzdHB0cGNsb2NrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwdHBjbG9jay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdHB0cGNsb2NrLlRwbyAtYyAtbyBsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHRwY2xvY2subG8gYHRlc3QgLWYgJ2dzdHB0cGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHB0cGNsb2NrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwdHBjbG9jay5UcG8gJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwdHBjbG9jay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RwdHBjbG9jay5jJyBvYmplY3Q9J2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RwdHBjbG9jay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0cHRwY2xvY2subG8gYHRlc3QgLWYgJ2dzdHB0cGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHB0cGNsb2NrLmMKLQotbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG50cHBhY2tldC5sbzogZ3N0bnRwcGFja2V0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RudHBwYWNrZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RudHBwYWNrZXQuVHBvIC1jIC1vIGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RudHBwYWNrZXQubG8gYHRlc3QgLWYgJ2dzdG50cHBhY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RudHBwYWNrZXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG50cHBhY2tldC5UcG8gJChERVBESVIpL2xpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYS1nc3RudHBwYWNrZXQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bnRwcGFja2V0LmMnIG9iamVjdD0nbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLWdzdG50cHBhY2tldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfbGEtZ3N0bnRwcGFja2V0LmxvIGB0ZXN0IC1mICdnc3RudHBwYWNrZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bnRwcGFja2V0LmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLWluc3RhbGwtZ2lyREFUQTogJChnaXJfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChnaXJfREFUQSknOyB0ZXN0IC1uICIkKGdpcmRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoZ2lyZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChnaXJkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGdpcmRpciknIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGdpcmRpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtZ2lyREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQoZ2lyZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLWluc3RhbGwtdHlwZWxpYnNEQVRBOiAkKHR5cGVsaWJzX0RBVEEpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQodHlwZWxpYnNfREFUQSknOyB0ZXN0IC1uICIkKHR5cGVsaWJzZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJCh0eXBlbGlic2RpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSciOyBcCi0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQodHlwZWxpYnNkaXIpIiB8fCBleGl0ICQkPzsgXAotCWRvbmUKLQotdW5pbnN0YWxsLXR5cGVsaWJzREFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHR5cGVsaWJzX0RBVEEpJzsgdGVzdCAtbiAiJCh0eXBlbGlic2RpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKLQlkaXI9JyQoREVTVERJUikkKHR5cGVsaWJzZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLWluc3RhbGwtbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVIRUFERVJTOiAkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlX0hFQURFUlMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZWRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVkaXIpJyI7IFwKLQkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZUhFQURFUlM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAotCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChsaWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKERBVEEpICQoSEVBREVSUykgYWxsLWxvY2FsCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoZ2lyZGlyKSIgIiQoREVTVERJUikkKHR5cGVsaWJzZGlyKSIgIiQoREVTVERJUikkKGxpYmdzdG5ldF9AR1NUX0FQSV9WRVJTSU9OQF9pbmNsdWRlZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZ2lyREFUQSBcCi0JaW5zdGFsbC1saWJnc3RuZXRfQEdTVF9BUElfVkVSU0lPTkBfaW5jbHVkZUhFQURFUlMgXAotCWluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCi0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWdpckRBVEEgdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKLQl1bmluc3RhbGwtbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKLQljbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBcCi0JY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZ2lyREFUQSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbGliTFRMSUJSQVJJRVMgXAotCWluc3RhbGwtbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVIRUFERVJTIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbC10eXBlbGlic0RBVEEgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZ2lyREFUQSBcCi0JdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKLQl1bmluc3RhbGwtbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2luY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtdHlwZWxpYnNEQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIHRyeSB0byBwcmV2ZW50IHBhY2thZ2luZyBlcnJvcnMKLWNoZWNrLWxpYmV4ZWNkaXItY29uc2lzdGVuY3k6Ci0JQGlmIHRlc3QgIiR7R1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEfSIgIT0gIiR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSQoR1NUX0FQSV9WRVJTSU9OKS9nc3QtcHRwLWhlbHBlciI7IHRoZW4gXAotCSAgZWNobyAiKioqIEluY29uc2lzdGVudCBsaWJleGVjZGlyISBQbGVhc2UgdXNlIC4vY29uZmlndXJlIC0tbGliZXhlY2Rpcj0vZm9vL2JhciI7IFwKLQkgIGVjaG8gIioqKiB0byBzZXQgdGhlIGxpYmV4ZWNkaXIgYW5kIG5vdCBtYWtlIGxpYmV4ZWNkaXI9L2Zvby9iYXIgb3IgdGhlIGxpa2UuIjsgXAotCSAgZWNobyAiKioqIFRoZSBzYW1lIGdvZXMgZm9yIHByZWZpeCwgbGliZGlyIGV0Yy4iOyBcCi0JICBlY2hvICIqKiogJHtHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUR9ICE9ICR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLSQoR1NUX0FQSV9WRVJTSU9OKS9nc3QtcHRwLWhlbHBlciI7IFwKLQkgIGV4aXQgMTsgXAotCWZpCi0KLWFsbC1sb2NhbDogY2hlY2stbGliZXhlY2Rpci1jb25zaXN0ZW5jeQotCi0lLmMuZ2NvdjogLmxpYnMvbGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhLSUuZ2NkYSAlLmMKLQkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0Ci0KLWdjb3Y6ICQobGliZ3N0bmV0X0BHU1RfQVBJX1ZFUlNJT05AX2xhX1NPVVJDRVM6PS5nY292KQotCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAR3N0TmV0LUBHU1RfQVBJX1ZFUlNJT05ALmdpcjogJChJTlRST1NQRUNUSU9OX1NDQU5ORVIpIGxpYmdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQC5sYQotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkkKEFNX1ZfR0VOKVBLR19DT05GSUdfUEFUSD0iJChHU1RfUEtHX0NPTkZJR19QQVRIKSIgR0lfU0NBTk5FUl9ESVNBQkxFX0NBQ0hFPXllc1wKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSIiIEdTVF9QTFVHSU5fUEFUSF8xXzA9IiIgR1NUX1JFR0lTVFJZX1VQREFURT1ubyBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQlDUFBGTEFHUz0iJChDUFBGTEFHUykiIENGTEFHUz0iJChDRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiBDQz0iJChDQykiIFBLR19DT05GSUc9IiQoUEtHX0NPTkZJRykiIERMTFRPT0w9IiQoRExMVE9PTCkiIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoSU5UUk9TUEVDVElPTl9TQ0FOTkVSKSAtdiAtLW5hbWVzcGFjZSBHc3ROZXQgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1pZGVudGlmaWVyLXByZWZpeD1Hc3QgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1zeW1ib2wtcHJlZml4PWdzdCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXdhcm4tYWxsIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tbnN2ZXJzaW9uPUBHU1RfQVBJX1ZFUlNJT05AIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS1JJCh0b3Bfc3JjZGlyKSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX3NyY2RpcikvbGlicyBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX2J1aWxkZGlyKSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktSSQodG9wX2J1aWxkZGlyKS9saWJzIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCSQoZ2lyX2NpbmNsdWRlcykgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1hZGQtaW5jbHVkZS1wYXRoPSQodG9wX2J1aWxkZGlyKS9nc3QgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJyYXJ5LXBhdGg9JCh0b3BfYnVpbGRkaXIpL2dzdCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLWxpYnJhcnk9bGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0taW5jbHVkZT1Hc3QtQEdTVF9BUElfVkVSU0lPTkAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1pbmNsdWRlPUdpby0yLjAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1saWJ0b29sPSIke0xJQlRPT0x9IiBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZyBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAgXAotQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQAkJLS1wa2cgZ2lvLTIuMCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLXBrZy1leHBvcnQ9ImdzdHJlYW1lci1uZXQtQEdTVF9BUElfVkVSU0lPTkAiIFwKLUBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUAJCS0tYWRkLWluaXQtc2VjdGlvbj0iJChJTlRST1NQRUNUSU9OX0lOSVQpIiBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQktLW91dHB1dCAkQCBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9oZWFkZXJzKSBcCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACQkkKGdpcl9zb3VyY2VzKQotCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAJS50eXBlbGliOiAlLmdpciAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVIpCi1ASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVACSQoQU1fVl9HRU4pJChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKSAtLWluY2x1ZGVkaXI9JChzcmNkaXIpIC0taW5jbHVkZWRpcj0kKGJ1aWxkZGlyKSAtLWluY2x1ZGVkaXI9JCh0b3BfYnVpbGRkaXIpL2dzdCAkKElOVFJPU1BFQ1RJT05fQ09NUElMRVJfT1BUUykgJDwgLW8gJChARikKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L2dzdG5ldC5oIGIvbGlicy9nc3QvbmV0L2dzdG5ldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmNjOGI4Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RuZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfTkVUX0hfXwotI2RlZmluZSBfX0dTVF9ORVRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmg+Ci0jaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXRjbGllbnRjbG9jay5oPgotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oPgotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0dGltZXByb3ZpZGVyLmg+Ci0KLSNlbmRpZiAvKiBfX0dTVF9ORVRfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuYyBiL2xpYnMvZ3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTRkMGM4Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAxMT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0bmV0YWRkcmVzc21ldGEKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTmV0d29yayBhZGRyZXNzIG1ldGFkYXRhCi0gKgotICogI0dzdE5ldEFkZHJlc3NNZXRhIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGEgbmV0d29yayBhZGRyZXNzIChhICNHU29ja2V0QWRkcmVzcykKLSAqIGluIGEgI0dzdEJ1ZmZlciBzbyB0aGF0IGl0IG5ldHdvcmsgZWxlbWVudHMgY2FuIHRyYWNrIHRoZSB0byBhbmQgZnJvbSBhZGRyZXNzCi0gKiBvZiB0aGUgYnVmZmVyLgotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdG5ldGFkZHJlc3NtZXRhLmgiCi0KLXN0YXRpYyBnYm9vbGVhbgotbmV0X2FkZHJlc3NfbWV0YV9pbml0IChHc3RNZXRhICogbWV0YSwgZ3BvaW50ZXIgcGFyYW1zLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE5ldEFkZHJlc3NNZXRhICpubWV0YSA9IChHc3ROZXRBZGRyZXNzTWV0YSAqKSBtZXRhOwotCi0gIG5tZXRhLT5hZGRyID0gTlVMTDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1uZXRfYWRkcmVzc19tZXRhX3RyYW5zZm9ybSAoR3N0QnVmZmVyICogdHJhbnNidWYsIEdzdE1ldGEgKiBtZXRhLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR1F1YXJrIHR5cGUsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdE5ldEFkZHJlc3NNZXRhICpzbWV0YSwgKmRtZXRhOwotICBzbWV0YSA9IChHc3ROZXRBZGRyZXNzTWV0YSAqKSBtZXRhOwotCi0gIC8qIHdlIGFsd2F5cyBjb3B5IG5vIG1hdHRlciB3aGF0IHRyYW5zZm9ybSAqLwotICBkbWV0YSA9IGdzdF9idWZmZXJfYWRkX25ldF9hZGRyZXNzX21ldGEgKHRyYW5zYnVmLCBzbWV0YS0+YWRkcik7Ci0gIGlmICghZG1ldGEpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotbmV0X2FkZHJlc3NfbWV0YV9mcmVlIChHc3RNZXRhICogbWV0YSwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3ROZXRBZGRyZXNzTWV0YSAqbm1ldGEgPSAoR3N0TmV0QWRkcmVzc01ldGEgKikgbWV0YTsKLQotICBpZiAobm1ldGEtPmFkZHIpCi0gICAgZ19vYmplY3RfdW5yZWYgKG5tZXRhLT5hZGRyKTsKLSAgbm1ldGEtPmFkZHIgPSBOVUxMOwotfQotCi1HVHlwZQotZ3N0X25ldF9hZGRyZXNzX21ldGFfYXBpX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgR1R5cGUgdHlwZTsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICp0YWdzW10gPSB7ICJvcmlnaW4iLCBOVUxMIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdHlwZSkpIHsKLSAgICBHVHlwZSBfdHlwZSA9IGdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVyICgiR3N0TmV0QWRkcmVzc01ldGFBUEkiLCB0YWdzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnR5cGUsIF90eXBlKTsKLSAgfQotICByZXR1cm4gdHlwZTsKLX0KLQotY29uc3QgR3N0TWV0YUluZm8gKgotZ3N0X25ldF9hZGRyZXNzX21ldGFfZ2V0X2luZm8gKHZvaWQpCi17Ci0gIHN0YXRpYyBjb25zdCBHc3RNZXRhSW5mbyAqbWV0YV9pbmZvID0gTlVMTDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZtZXRhX2luZm8pKSB7Ci0gICAgY29uc3QgR3N0TWV0YUluZm8gKm1pID0gZ3N0X21ldGFfcmVnaXN0ZXIgKEdTVF9ORVRfQUREUkVTU19NRVRBX0FQSV9UWVBFLAotICAgICAgICAiR3N0TmV0QWRkcmVzc01ldGEiLAotICAgICAgICBzaXplb2YgKEdzdE5ldEFkZHJlc3NNZXRhKSwKLSAgICAgICAgbmV0X2FkZHJlc3NfbWV0YV9pbml0LAotICAgICAgICBuZXRfYWRkcmVzc19tZXRhX2ZyZWUsIG5ldF9hZGRyZXNzX21ldGFfdHJhbnNmb3JtKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJm1ldGFfaW5mbywgbWkpOwotICB9Ci0gIHJldHVybiBtZXRhX2luZm87Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9hZGRfbmV0X2FkZHJlc3NfbWV0YToKLSAqIEBidWZmZXI6IGEgI0dzdEJ1ZmZlcgotICogQGFkZHI6IGEgQEdTb2NrZXRBZGRyZXNzIHRvIGNvbm5lY3QgdG8gQGJ1ZmZlcgotICoKLSAqIEF0dGFjaGVzIEBhZGRyIGFzIG1ldGFkYXRhIGluIGEgI0dzdE5ldEFkZHJlc3NNZXRhIHRvIEBidWZmZXIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3ROZXRBZGRyZXNzTWV0YSBjb25uZWN0ZWQgdG8gQGJ1ZmZlcgotICovCi1Hc3ROZXRBZGRyZXNzTWV0YSAqCi1nc3RfYnVmZmVyX2FkZF9uZXRfYWRkcmVzc19tZXRhIChHc3RCdWZmZXIgKiBidWZmZXIsIEdTb2NrZXRBZGRyZXNzICogYWRkcikKLXsKLSAgR3N0TmV0QWRkcmVzc01ldGEgKm1ldGE7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19TT0NLRVRfQUREUkVTUyAoYWRkciksIE5VTEwpOwotCi0gIG1ldGEgPQotICAgICAgKEdzdE5ldEFkZHJlc3NNZXRhICopIGdzdF9idWZmZXJfYWRkX21ldGEgKGJ1ZmZlciwKLSAgICAgIEdTVF9ORVRfQUREUkVTU19NRVRBX0lORk8sIE5VTEwpOwotCi0gIG1ldGEtPmFkZHIgPSBnX29iamVjdF9yZWYgKGFkZHIpOwotCi0gIHJldHVybiBtZXRhOwotfQotCi0vKioKLSAqIGdzdF9idWZmZXJfZ2V0X25ldF9hZGRyZXNzX21ldGE6Ci0gKiBAYnVmZmVyOiBhICNHc3RCdWZmZXIKLSAqCi0gKiBGaW5kIHRoZSAjR3N0TmV0QWRkcmVzc01ldGEgb24gQGJ1ZmZlci4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjR3N0TmV0QWRkcmVzc01ldGEgb3IgJU5VTEwgd2hlbiB0aGVyZQotICogaXMgbm8gc3VjaCBtZXRhZGF0YSBvbiBAYnVmZmVyLgotICovCi1Hc3ROZXRBZGRyZXNzTWV0YSAqCi1nc3RfYnVmZmVyX2dldF9uZXRfYWRkcmVzc19tZXRhIChHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIHJldHVybiAoR3N0TmV0QWRkcmVzc01ldGEgKikKLSAgICAgIGdzdF9idWZmZXJfZ2V0X21ldGEgKGJ1ZmZlciwgR1NUX05FVF9BRERSRVNTX01FVEFfQVBJX1RZUEUpOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmggYi9saWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFmZWJiNS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAxMT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX05FVF9BRERSRVNTX01FVEFfSF9fCi0jZGVmaW5lIF9fR1NUX05FVF9BRERSRVNTX01FVEFfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3ROZXRBZGRyZXNzTWV0YSBHc3ROZXRBZGRyZXNzTWV0YTsKLQotLyoqCi0gKiBHc3ROZXRBZGRyZXNzTWV0YToKLSAqIEBtZXRhOiB0aGUgcGFyZW50IHR5cGUKLSAqIEBhZGRyOiBhICNHU29ja2V0QWRkcmVzcyBzdG9yZWQgYXMgbWV0YWRhdGEKLSAqCi0gKiBCdWZmZXIgbWV0YWRhdGEgZm9yIG5ldHdvcmsgYWRkcmVzc2VzLgotICovCi1zdHJ1Y3QgX0dzdE5ldEFkZHJlc3NNZXRhIHsKLSAgR3N0TWV0YSAgICAgICBtZXRhOwotCi0gIEdTb2NrZXRBZGRyZXNzICphZGRyOwotfTsKLQotR1R5cGUgZ3N0X25ldF9hZGRyZXNzX21ldGFfYXBpX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX05FVF9BRERSRVNTX01FVEFfQVBJX1RZUEUgKGdzdF9uZXRfYWRkcmVzc19tZXRhX2FwaV9nZXRfdHlwZSgpKQotCi0vKiBpbXBsZW1lbnRhdGlvbiAqLwotY29uc3QgR3N0TWV0YUluZm8gKmdzdF9uZXRfYWRkcmVzc19tZXRhX2dldF9pbmZvICh2b2lkKTsKLSNkZWZpbmUgR1NUX05FVF9BRERSRVNTX01FVEFfSU5GTyAoZ3N0X25ldF9hZGRyZXNzX21ldGFfZ2V0X2luZm8oKSkKLQotR3N0TmV0QWRkcmVzc01ldGEgKiBnc3RfYnVmZmVyX2FkZF9uZXRfYWRkcmVzc19tZXRhIChHc3RCdWZmZXIgICAgICAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU29ja2V0QWRkcmVzcyAqYWRkcik7Ci1Hc3ROZXRBZGRyZXNzTWV0YSAqIGdzdF9idWZmZXJfZ2V0X25ldF9hZGRyZXNzX21ldGEgKEdzdEJ1ZmZlciAgICAgICpidWZmZXIpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTkVUX0FERFJFU1NfTUVUQV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMgYi9saWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlODk1Mi4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDE0NDkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBnc3RuZXRjbGllbnRjbG9jay5oOiBjbG9jayB0aGF0IHN5bmNocm9uaXplcyBpdHNlbGYgdG8gYSB0aW1lIHByb3ZpZGVyIG92ZXIKLSAqIHRoZSBuZXR3b3JrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3RuZXRjbGllbnRjbG9jawotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBTcGVjaWFsIGNsb2NrIHRoYXQgc3luY2hyb25pemVzIHRvIGEgcmVtb3RlIHRpbWUKLSAqICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuCi0gKiBAc2VlX2Fsc286ICNHc3RDbG9jaywgI0dzdE5ldFRpbWVQcm92aWRlciwgI0dzdFBpcGVsaW5lCi0gKgotICogI0dzdE5ldENsaWVudENsb2NrIGltcGxlbWVudHMgYSBjdXN0b20gI0dzdENsb2NrIHRoYXQgc3luY2hyb25pemVzIGl0cyB0aW1lCi0gKiB0byBhIHJlbW90ZSB0aW1lIHByb3ZpZGVyIHN1Y2ggYXMgI0dzdE5ldFRpbWVQcm92aWRlci4gI0dzdE50cENsb2NrCi0gKiBpbXBsZW1lbnRzIGEgI0dzdENsb2NrIHRoYXQgc3luY2hyb25pemVzIGl0cyB0aW1lIHRvIGEgcmVtb3RlIE5UUHY0IHNlcnZlci4KLSAqCi0gKiBBIG5ldyBjbG9jayBpcyBjcmVhdGVkIHdpdGggZ3N0X25ldF9jbGllbnRfY2xvY2tfbmV3KCkgb3IKLSAqIGdzdF9udHBfY2xvY2tfbmV3KCksIHdoaWNoIHRha2VzIHRoZSBhZGRyZXNzIGFuZCBwb3J0IG9mIHRoZSByZW1vdGUgdGltZQotICogcHJvdmlkZXIgYWxvbmcgd2l0aCBhIG5hbWUgYW5kIGFuIGluaXRpYWwgdGltZS4KLSAqCi0gKiBUaGlzIGNsb2NrIHdpbGwgcG9sbCB0aGUgdGltZSBwcm92aWRlciBhbmQgd2lsbCB1cGRhdGUgaXRzIGNhbGlicmF0aW9uCi0gKiBwYXJhbWV0ZXJzIGJhc2VkIG9uIHRoZSBsb2NhbCBhbmQgcmVtb3RlIG9ic2VydmF0aW9ucy4KLSAqCi0gKiBUaGUgInJvdW5kLXRyaXAiIHByb3BlcnR5IGxpbWl0cyB0aGUgbWF4aW11bSByb3VuZCB0cmlwIHBhY2tldHMgY2FuIHRha2UuCi0gKgotICogVmFyaW91cyBwYXJhbWV0ZXJzIG9mIHRoZSBjbG9jayBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSBwYXJlbnQgI0dzdENsb2NrCi0gKiAidGltZW91dCIsICJ3aW5kb3ctc2l6ZSIgYW5kICJ3aW5kb3ctdGhyZXNob2xkIiBvYmplY3QgcHJvcGVydGllcy4KLSAqCi0gKiBBICNHc3ROZXRDbGllbnRDbG9jayBhbmQgI0dzdE50cENsb2NrIGlzIHR5cGljYWxseSBzZXQgb24gYSAjR3N0UGlwZWxpbmUgd2l0aAotICogZ3N0X3BpcGVsaW5lX3VzZV9jbG9jaygpLgotICoKLSAqIElmIHlvdSBzZXQgYSAjR3N0QnVzIG9uIHRoZSBjbG9jayB2aWEgdGhlICJidXMiIG9iamVjdCBwcm9wZXJ0eSwgaXQgd2lsbAotICogc2VuZCBAR1NUX01FU1NBR0VfRUxFTUVOVCBtZXNzYWdlcyB3aXRoIGFuIGF0dGFjaGVkICNHc3RTdHJ1Y3R1cmUgY29udGFpbmluZwotICogc3RhdGlzdGljcyBhYm91dCBjbG9jayBhY2N1cmFjeSBhbmQgbmV0d29yayB0cmFmZmljLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdG5ldHRpbWVwYWNrZXQuaCIKLSNpbmNsdWRlICJnc3RudHBwYWNrZXQuaCIKLSNpbmNsdWRlICJnc3RuZXRjbGllbnRjbG9jay5oIgotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKG5jY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAobmNjX2RlYnVnKQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RDbG9jayAqY2xvY2s7ICAgICAgICAgICAgICAvKiBHc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrICovCi0KLSAgR0xpc3QgKmNsb2NrczsgICAgICAgICAgICAgICAgLyogR3N0TmV0Q2xpZW50Q2xvY2tzICovCi0KLSAgR3N0Q2xvY2tJRCByZW1vdmVfaWQ7Ci19IENsb2NrQ2FjaGU7Ci0KLUdfTE9DS19ERUZJTkVfU1RBVElDIChjbG9ja3NfbG9jayk7Ci1zdGF0aWMgR0xpc3QgKmNsb2NrcyA9IE5VTEw7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfTkVUX0NMSUVOVF9JTlRFUk5BTF9DTE9DSyBcCi0gIChnc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfTkVUX0NMSUVOVF9JTlRFUk5BTF9DTE9DSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX05FVF9DTElFTlRfSU5URVJOQUxfQ0xPQ0ssR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9jaykpCi0jZGVmaW5lIEdTVF9ORVRfQ0xJRU5UX0lOVEVSTkFMX0NMT0NLX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX05FVF9DTElFTlRfSU5URVJOQUxfQ0xPQ0ssR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9ja0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX05FVF9DTElFTlRfSU5URVJOQUxfQ0xPQ0sob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9ORVRfQ0xJRU5UX0lOVEVSTkFMX0NMT0NLKSkKLSNkZWZpbmUgR1NUX0lTX05FVF9DTElFTlRfSU5URVJOQUxfQ0xPQ0tfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfTkVUX0NMSUVOVF9JTlRFUk5BTF9DTE9DSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrIEdzdE5ldENsaWVudEludGVybmFsQ2xvY2s7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9ja0NsYXNzIEdzdE5ldENsaWVudEludGVybmFsQ2xvY2tDbGFzczsKLQotR19HTlVDX0lOVEVSTkFMIEdUeXBlIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX2dldF90eXBlICh2b2lkKTsKLQotI2RlZmluZSBERUZBVUxUX0FERFJFU1MgICAgICAgICAiMTI3LjAuMC4xIgotI2RlZmluZSBERUZBVUxUX1BPUlQgICAgICAgICAgICA1NjM3Ci0jZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgICAgICAgIEdTVF9TRUNPTkQKLSNkZWZpbmUgREVGQVVMVF9ST1VORFRSSVBfTElNSVQgR1NUX1NFQ09ORAotLyogTWluaW11bSB0aW1lb3V0IHdpbGwgYmUgaW1tZWRpYXRlbHkgKGllLCBhcyBmYXN0IGFzIG9uZSBSVFQpLCBidXQgbm8KLSAqIG1vcmUgb2Z0ZW4gdGhhbiAxLzIwdGggc2Vjb25kIChhcmJpdHJhcmlseSwgdG8gc3ByZWFkIG9ic2VydmF0aW9ucyBhIGxpdHRsZSkgKi8KLSNkZWZpbmUgREVGQVVMVF9NSU5JTVVNX1VQREFURV9JTlRFUlZBTCAoR1NUX1NFQ09ORCAvIDIwKQotI2RlZmluZSBERUZBVUxUX0JBU0VfVElNRSAgICAgICAwCi0KLS8qIE1heGltdW0gbnVtYmVyIG9mIGNsb2NrIHVwZGF0ZXMgd2UgY2FuIHNraXAgYmVmb3JlIHVwZGF0aW5nICovCi0jZGVmaW5lIE1BWF9TS0lQUEVEX1VQREFURVMgNQotCi0jZGVmaW5lIE1FRElBTl9QUkVfRklMVEVSSU5HX1dJTkRPVyA5Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0FERFJFU1MsCi0gIFBST1BfUE9SVCwKLSAgUFJPUF9ST1VORFRSSVBfTElNSVQsCi0gIFBST1BfTUlOSU1VTV9VUERBVEVfSU5URVJWQUwsCi0gIFBST1BfQlVTLAotICBQUk9QX0JBU0VfVElNRSwKLSAgUFJPUF9JTlRFUk5BTF9DTE9DSywKLSAgUFJPUF9JU19OVFAKLX07Ci0KLXN0cnVjdCBfR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9jawotewotICBHc3RTeXN0ZW1DbG9jayBjbG9jazsKLQotICBHVGhyZWFkICp0aHJlYWQ7Ci0KLSAgR1NvY2tldCAqc29ja2V0OwotICBHU29ja2V0QWRkcmVzcyAqc2VydmFkZHI7Ci0gIEdDYW5jZWxsYWJsZSAqY2FuY2VsOwotICBnYm9vbGVhbiBtYWRlX2NhbmNlbF9mZDsKLQotICBHc3RDbG9ja1RpbWUgdGltZW91dF9leHBpcmF0aW9uOwotICBHc3RDbG9ja1RpbWUgcm91bmR0cmlwX2xpbWl0OwotICBHc3RDbG9ja1RpbWUgcnR0X2F2ZzsKLSAgR3N0Q2xvY2tUaW1lIG1pbmltdW1fdXBkYXRlX2ludGVydmFsOwotICBHc3RDbG9ja1RpbWUgbGFzdF9yZW1vdGVfcG9sbF9pbnRlcnZhbDsKLSAgZ3VpbnQgc2tpcHBlZF91cGRhdGVzOwotICBHc3RDbG9ja1RpbWUgbGFzdF9ydHRzW01FRElBTl9QUkVfRklMVEVSSU5HX1dJTkRPV107Ci0gIGdpbnQgbGFzdF9ydHRzX21pc3Npbmc7Ci0KLSAgZ2NoYXIgKmFkZHJlc3M7Ci0gIGdpbnQgcG9ydDsKLSAgZ2Jvb2xlYW4gaXNfbnRwOwotCi0gIC8qIFByb3RlY3RlZCBieSBPQkpFQ1RfTE9DSyAqLwotICBHTGlzdCAqYnVzc2VzOwotfTsKLQotc3RydWN0IF9Hc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrQ2xhc3MKLXsKLSAgR3N0U3lzdGVtQ2xvY2tDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG5jY19kZWJ1ZywgIm5ldGNsb2NrIiwgMCwgIk5ldHdvcmsgY2xpZW50IGNsb2NrIik7Ci1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9jaywKLSAgICBnc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9jaywgR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX2NvbnN0cnVjdGVkIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX3N0YXJ0IChHc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrICoKLSAgICBzZWxmKTsKLXN0YXRpYyB2b2lkIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX3N0b3AgKEdzdE5ldENsaWVudEludGVybmFsQ2xvY2sgKgotICAgIHNlbGYpOwotCi1zdGF0aWMgdm9pZAotZ3N0X25ldF9jbGllbnRfaW50ZXJuYWxfY2xvY2tfY2xhc3NfaW5pdCAoR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9ja0NsYXNzICoKLSAgICBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X25ldF9jbGllbnRfaW50ZXJuYWxfY2xvY2tfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X25ldF9jbGllbnRfaW50ZXJuYWxfY2xvY2tfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX2NvbnN0cnVjdGVkOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUREUkVTUywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJhZGRyZXNzIiwgImFkZHJlc3MiLAotICAgICAgICAgICJUaGUgSVAgYWRkcmVzcyBvZiB0aGUgbWFjaGluZSBwcm92aWRpbmcgYSB0aW1lIHNlcnZlciIsCi0gICAgICAgICAgREVGQVVMVF9BRERSRVNTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUE9SVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJwb3J0IiwgInBvcnQiLAotICAgICAgICAgICJUaGUgcG9ydCBvbiB3aGljaCB0aGUgcmVtb3RlIHNlcnZlciBpcyBsaXN0ZW5pbmciLCAwLCBHX01BWFVJTlQxNiwKLSAgICAgICAgICBERUZBVUxUX1BPUlQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9JU19OVFAsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImlzLW50cCIsICJJcyBOVFAiLAotICAgICAgICAgICJUaGUgY2xvY2sgaXMgdXNpbmcgdGhlIE5UUHY0IHByb3RvY29sIiwgRkFMU0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX2luaXQgKEdzdE5ldENsaWVudEludGVybmFsQ2xvY2sgKiBzZWxmKQotewotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzZWxmLCBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMpOwotCi0gIHNlbGYtPnBvcnQgPSBERUZBVUxUX1BPUlQ7Ci0gIHNlbGYtPmFkZHJlc3MgPSBnX3N0cmR1cCAoREVGQVVMVF9BRERSRVNTKTsKLSAgc2VsZi0+aXNfbnRwID0gRkFMU0U7Ci0KLSAgZ3N0X2Nsb2NrX3NldF90aW1lb3V0IChHU1RfQ0xPQ0sgKHNlbGYpLCBERUZBVUxUX1RJTUVPVVQpOwotCi0gIHNlbGYtPnRocmVhZCA9IE5VTEw7Ci0KLSAgc2VsZi0+c2VydmFkZHIgPSBOVUxMOwotICBzZWxmLT5ydHRfYXZnID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc2VsZi0+cm91bmR0cmlwX2xpbWl0ID0gREVGQVVMVF9ST1VORFRSSVBfTElNSVQ7Ci0gIHNlbGYtPm1pbmltdW1fdXBkYXRlX2ludGVydmFsID0gREVGQVVMVF9NSU5JTVVNX1VQREFURV9JTlRFUlZBTDsKLSAgc2VsZi0+bGFzdF9yZW1vdGVfcG9sbF9pbnRlcnZhbCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHNlbGYtPnNraXBwZWRfdXBkYXRlcyA9IDA7Ci0gIHNlbGYtPmxhc3RfcnR0c19taXNzaW5nID0gTUVESUFOX1BSRV9GSUxURVJJTkdfV0lORE9XOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25ldF9jbGllbnRfaW50ZXJuYWxfY2xvY2tfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE5ldENsaWVudEludGVybmFsQ2xvY2sgKnNlbGYgPSBHU1RfTkVUX0NMSUVOVF9JTlRFUk5BTF9DTE9DSyAob2JqZWN0KTsKLQotICBpZiAoc2VsZi0+dGhyZWFkKSB7Ci0gICAgZ3N0X25ldF9jbGllbnRfaW50ZXJuYWxfY2xvY2tfc3RvcCAoc2VsZik7Ci0gIH0KLQotICBnX2ZyZWUgKHNlbGYtPmFkZHJlc3MpOwotICBzZWxmLT5hZGRyZXNzID0gTlVMTDsKLQotICBpZiAoc2VsZi0+c2VydmFkZHIgIT0gTlVMTCkgewotICAgIGdfb2JqZWN0X3VucmVmIChzZWxmLT5zZXJ2YWRkcik7Ci0gICAgc2VsZi0+c2VydmFkZHIgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHNlbGYtPnNvY2tldCAhPSBOVUxMKSB7Ci0gICAgaWYgKCFnX3NvY2tldF9jbG9zZSAoc2VsZi0+c29ja2V0LCBOVUxMKSkKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJGYWlsZWQgdG8gY2xvc2Ugc29ja2V0Iik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNlbGYtPnNvY2tldCk7Ci0gICAgc2VsZi0+c29ja2V0ID0gTlVMTDsKLSAgfQotCi0gIGdfd2Fybl9pZl9mYWlsIChzZWxmLT5idXNzZXMgPT0gTlVMTCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX3BhcmVudF9jbGFzcyktPmZpbmFsaXplCi0gICAgICAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrICpzZWxmID0gR1NUX05FVF9DTElFTlRfSU5URVJOQUxfQ0xPQ0sgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0FERFJFU1M6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICAgICAgZ19mcmVlIChzZWxmLT5hZGRyZXNzKTsKLSAgICAgIHNlbGYtPmFkZHJlc3MgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGlmIChzZWxmLT5hZGRyZXNzID09IE5VTEwpCi0gICAgICAgIHNlbGYtPmFkZHJlc3MgPSBnX3N0cmR1cCAoREVGQVVMVF9BRERSRVNTKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT1JUOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgICAgIHNlbGYtPnBvcnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JU19OVFA6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICAgICAgc2VsZi0+aXNfbnRwID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25ldF9jbGllbnRfaW50ZXJuYWxfY2xvY2tfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE5ldENsaWVudEludGVybmFsQ2xvY2sgKnNlbGYgPSBHU1RfTkVUX0NMSUVOVF9JTlRFUk5BTF9DTE9DSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQUREUkVTUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzZWxmLT5hZGRyZXNzKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT1JUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc2VsZi0+cG9ydCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSVNfTlRQOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNlbGYtPmlzX250cCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja19jb25zdHJ1Y3RlZCAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9jayAqc2VsZiA9IEdTVF9ORVRfQ0xJRU5UX0lOVEVSTkFMX0NMT0NLIChvYmplY3QpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZAotICAgICAgKG9iamVjdCk7Ci0KLSAgaWYgKCFnc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja19zdGFydCAoc2VsZikpIHsKLSAgICBnX3dhcm5pbmcgKCJmYWlsZWQgdG8gc3RhcnQgY2xvY2sgJyVzJyIsIEdTVF9PQkpFQ1RfTkFNRSAoc2VsZikpOwotICB9Ci0KLSAgLyogYWxsIHN5c3RlbXMgZ28sIGNhcCduICovCi19Ci0KLXN0YXRpYyBnaW50Ci1jb21wYXJlX2Nsb2NrX3RpbWUgKGNvbnN0IEdzdENsb2NrVGltZSAqIGEsIGNvbnN0IEdzdENsb2NrVGltZSAqIGIpCi17Ci0gIGlmICgqYSA8ICpiKQotICAgIHJldHVybiAtMTsKLSAgZWxzZSBpZiAoKmEgPiAqYikKLSAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja19vYnNlcnZlX3RpbWVzIChHc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrICogc2VsZiwKLSAgICBHc3RDbG9ja1RpbWUgbG9jYWxfMSwgR3N0Q2xvY2tUaW1lIHJlbW90ZV8xLCBHc3RDbG9ja1RpbWUgcmVtb3RlXzIsCi0gICAgR3N0Q2xvY2tUaW1lIGxvY2FsXzIpCi17Ci0gIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWVvdXQgPSAwOwotICBHc3RDbG9ja1RpbWUgbG9jYWxfYXZnLCByZW1vdGVfYXZnOwotICBnZG91YmxlIHJfc3F1YXJlZDsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja1RpbWUgcnR0LCBydHRfbGltaXQsIG1pbl91cGRhdGVfaW50ZXJ2YWw7Ci0gIC8qIFVzZSBmb3IgZGlzY29udCB0cmFja2luZyAqLwotICBHc3RDbG9ja1RpbWUgdGltZV9iZWZvcmUgPSAwOwotICBHc3RDbG9ja1RpbWUgbWluX2d1ZXNzID0gMDsKLSAgR3N0Q2xvY2tUaW1lRGlmZiB0aW1lX2Rpc2NvbnQgPSAwOwotICBnYm9vbGVhbiBzeW5jaGVkLCBub3dfc3luY2hlZDsKLSAgR3N0Q2xvY2tUaW1lIGludGVybmFsX3RpbWUsIGV4dGVybmFsX3RpbWUsIHJhdGVfbnVtLCByYXRlX2RlbjsKLSAgR3N0Q2xvY2tUaW1lIG9yaWdfaW50ZXJuYWxfdGltZSwgb3JpZ19leHRlcm5hbF90aW1lLCBvcmlnX3JhdGVfbnVtLAotICAgICAgb3JpZ19yYXRlX2RlbjsKLSAgR3N0Q2xvY2tUaW1lIG1heF9kaXNjb250OwotICBHc3RDbG9ja1RpbWUgbGFzdF9ydHRzW01FRElBTl9QUkVfRklMVEVSSU5HX1dJTkRPV107Ci0gIEdzdENsb2NrVGltZSBtZWRpYW47Ci0gIGdpbnQgaTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICBydHRfbGltaXQgPSBzZWxmLT5yb3VuZHRyaXBfbGltaXQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsCi0gICAgICAibG9jYWwxICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiByZW1vdGUxICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiByZW1vdGUyICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFUICIgbG9jYWwyICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGxvY2FsXzEsIHJlbW90ZV8xLAotICAgICAgcmVtb3RlXzIsIGxvY2FsXzIpOwotCi0gIC8qIElmIHRoZSBzZXJ2ZXIgdG9sZCB1cyBhIHBvbGwgaW50ZXJ2YWwgYW5kIGl0J3MgYmlnZ2VyIHRoYW4gdGhlCi0gICAqIG9uZSBjb25maWd1cmVkIHZpYSB0aGUgcHJvcGVydHksIHVzZSB0aGUgc2VydmVyJ3MgKi8KLSAgaWYgKHNlbGYtPmxhc3RfcmVtb3RlX3BvbGxfaW50ZXJ2YWwgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJgotICAgICAgc2VsZi0+bGFzdF9yZW1vdGVfcG9sbF9pbnRlcnZhbCA+IHNlbGYtPm1pbmltdW1fdXBkYXRlX2ludGVydmFsKQotICAgIG1pbl91cGRhdGVfaW50ZXJ2YWwgPSBzZWxmLT5sYXN0X3JlbW90ZV9wb2xsX2ludGVydmFsOwotICBlbHNlCi0gICAgbWluX3VwZGF0ZV9pbnRlcnZhbCA9IHNlbGYtPm1pbmltdW1fdXBkYXRlX2ludGVydmFsOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0KLSAgaWYgKGxvY2FsXzIgPCBsb2NhbF8xKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJEcm9wcGluZyBvYnNlcnZhdGlvbjogcmVjZWl2ZSB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiIDwgc2VuZCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobG9jYWxfMSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGxvY2FsXzIpKTsKLSAgICBnb3RvIGJvZ3VzX29ic2VydmF0aW9uOwotICB9Ci0KLSAgaWYgKHJlbW90ZV8yIDwgcmVtb3RlXzEpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwKLSAgICAgICAgIkRyb3BwaW5nIG9ic2VydmF0aW9uOiByZW1vdGUgcmVjZWl2ZSB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiIDwgc2VuZCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocmVtb3RlXzEpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChyZW1vdGVfMikpOwotICAgIGdvdG8gYm9ndXNfb2JzZXJ2YXRpb247Ci0gIH0KLQotICAvKiBUaGUgcm91bmQgdHJpcCB0aW1lIGlzIChhc3N1bWluZyBzeW1tZXRyaWMgcGF0aCBkZWxheXMpCi0gICAqIGRlbHRhID0gKGxvY2FsXzIgLSBsb2NhbF8xKSAtIChyZW1vdGVfMiAtIHJlbW90ZV8xKQotICAgKi8KLQotICBydHQgPSBHU1RfQ0xPQ0tfRElGRiAobG9jYWxfMSwgbG9jYWxfMikgLSBHU1RfQ0xPQ0tfRElGRiAocmVtb3RlXzEsIHJlbW90ZV8yKTsKLQotICBpZiAoKHJ0dF9saW1pdCA+IDApICYmIChydHQgPiBydHRfbGltaXQpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJEcm9wcGluZyBvYnNlcnZhdGlvbjogUlRUICUiIEdTVF9USU1FX0ZPUk1BVCAiID4gbGltaXQgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChydHQpLCBHU1RfVElNRV9BUkdTIChydHRfbGltaXQpKTsKLSAgICBnb3RvIGJvZ3VzX29ic2VydmF0aW9uOwotICB9Ci0KLSAgZm9yIChpID0gMTsgaSA8IE1FRElBTl9QUkVfRklMVEVSSU5HX1dJTkRPVzsgaSsrKQotICAgIHNlbGYtPmxhc3RfcnR0c1tpIC0gMV0gPSBzZWxmLT5sYXN0X3J0dHNbaV07Ci0gIHNlbGYtPmxhc3RfcnR0c1tpIC0gMV0gPSBydHQ7Ci0KLSAgaWYgKHNlbGYtPmxhc3RfcnR0c19taXNzaW5nKSB7Ci0gICAgc2VsZi0+bGFzdF9ydHRzX21pc3NpbmctLTsKLSAgfSBlbHNlIHsKLSAgICBtZW1jcHkgKCZsYXN0X3J0dHMsICZzZWxmLT5sYXN0X3J0dHMsIHNpemVvZiAobGFzdF9ydHRzKSk7Ci0gICAgZ19xc29ydF93aXRoX2RhdGEgKCZsYXN0X3J0dHMsCi0gICAgICAgIE1FRElBTl9QUkVfRklMVEVSSU5HX1dJTkRPVywgc2l6ZW9mIChHc3RDbG9ja1RpbWUpLAotICAgICAgICAoR0NvbXBhcmVEYXRhRnVuYykgY29tcGFyZV9jbG9ja190aW1lLCBOVUxMKTsKLQotICAgIG1lZGlhbiA9IGxhc3RfcnR0c1tNRURJQU5fUFJFX0ZJTFRFUklOR19XSU5ET1cgLyAyXTsKLQotICAgIC8qIEZJWE1FOiBXZSBtaWdodCB3YW50IHRvIHVzZSBzb21ldGhpbmcgZWxzZSBoZXJlLCBsaWtlIG9ubHkgYWxsb3dpbmcKLSAgICAgKiB0aGluZ3MgaW4gdGhlIGludGVycXVhcnRpbGUgcmFuZ2UsIG9yIGFsc28gZmlsdGVyaW5nIGF3YXkgZGVsYXlzIHRoYXQKLSAgICAgKiBhcmUgdG9vIHNtYWxsIGNvbXBhcmVkIHRvIHRoZSBtZWRpYW4uIFRoaXMgaGVyZSB3b3JrZWQgd2VsbCBlbm91Z2gKLSAgICAgKiBpbiB0ZXN0cyBzbyBmYXIuCi0gICAgICovCi0gICAgaWYgKHJ0dCA+IDIgKiBtZWRpYW4pIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLAotICAgICAgICAgICJEcm9wcGluZyBvYnNlcnZhdGlvbiwgbG9uZyBSVFQgJSIgR1NUX1RJTUVfRk9STUFUICIgPiAyICogbWVkaWFuICUiCi0gICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChydHQpLCBHU1RfVElNRV9BUkdTIChtZWRpYW4pKTsKLSAgICAgIGdvdG8gYm9ndXNfb2JzZXJ2YXRpb247Ci0gICAgfQotICB9Ci0KLSAgLyogVHJhY2sgYW4gYXZlcmFnZSByb3VuZCB0cmlwIHRpbWUsIGZvciBhIGJpdCBvZiBzbW9vdGhpbmcgKi8KLSAgLyogQWx3YXlzIHVwZGF0ZSBiZWZvcmUgZGlzY2FyZGluZyBhIHNhbXBsZSwgc28gZ2VudWluZSBjaGFuZ2VzIGluCi0gICAqIHRoZSBuZXR3b3JrIGdldCBwaWNrZWQgdXAsIGV2ZW50dWFsbHkgKi8KLSAgaWYgKHNlbGYtPnJ0dF9hdmcgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBzZWxmLT5ydHRfYXZnID0gcnR0OwotICBlbHNlIGlmIChydHQgPCBzZWxmLT5ydHRfYXZnKSAvKiBTaG9ydGVyIFJUVHMgY2FycnkgbW9yZSB3ZWlnaHQgdGhhbiBsb25nZXIgKi8KLSAgICBzZWxmLT5ydHRfYXZnID0gKDMgKiBzZWxmLT5ydHRfYXZnICsgcnR0KSAvIDQ7Ci0gIGVsc2UKLSAgICBzZWxmLT5ydHRfYXZnID0gKDE1ICogc2VsZi0+cnR0X2F2ZyArIHJ0dCkgLyAxNjsKLQotICBpZiAocnR0ID4gMiAqIHNlbGYtPnJ0dF9hdmcpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwKLSAgICAgICAgIkRyb3BwaW5nIG9ic2VydmF0aW9uLCBsb25nIFJUVCAlIiBHU1RfVElNRV9GT1JNQVQgIiA+IDIgKiBhdmcgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChydHQpLCBHU1RfVElNRV9BUkdTIChzZWxmLT5ydHRfYXZnKSk7Ci0gICAgZ290byBib2d1c19vYnNlcnZhdGlvbjsKLSAgfQotCi0gIC8qIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxvY2FsIGFuZCByZW1vdGUgY2xvY2sgKGFnYWluIGFzc3VtaW5nCi0gICAqIHN5bW1ldHJpYyBwYXRoIGRlbGF5cyk6Ci0gICAqCi0gICAqIGxvY2FsXzEgKyBkZWx0YSAvIDIgLSByZW1vdGVfMSA9IHRoZXRhCi0gICAqIG9yCi0gICAqIGxvY2FsXzIgLSBkZWx0YSAvIDIgLSByZW1vdGVfMiA9IHRoZXRhCi0gICAqCi0gICAqIHdoaWNoIGdpdmVzIGFmdGVyIHNvbWUgc2ltcGxlIGFsZ2VicmFpYyB0cmFuc2Zvcm1hdGlvbnM6Ci0gICAqCi0gICAqICAgICAgICAgKHJlbW90ZV8xIC0gbG9jYWxfMSkgKyAocmVtb3RlXzIgLSBsb2NhbF8yKQotICAgKiB0aGV0YSA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0gICAqCi0gICAqCi0gICAqIFRodXMgcmVtb3RlIHRpbWUgYXQgbG9jYWxfYXZnIGlzIGVxdWFsIHRvOgotICAgKgotICAgKiBsb2NhbF9hdmcgKyB0aGV0YSA9Ci0gICAqCi0gICAqIGxvY2FsXzEgKyBsb2NhbF8yICAgKHJlbW90ZV8xIC0gbG9jYWxfMSkgKyAocmVtb3RlXzIgLSBsb2NhbF8yKQotICAgKiAtLS0tLS0tLS0tLS0tLS0tLSArIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICogICAgICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0gICAqCi0gICAqID0KLSAgICoKLSAgICogcmVtb3RlXzEgKyByZW1vdGVfMgotICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tID0gcmVtb3RlX2F2ZwotICAgKiAgICAgICAgICAyCi0gICAqCi0gICAqIFdlIHVzZSB0aGlzIGZvciBvdXIgY2xvY2sgZXN0aW1hdGlvbiwgaS5lLiBsb2NhbF9hdmcgYXQgcmVtb3RlIGNsb2NrCi0gICAqIGJlaW5nIHRoZSBzYW1lIGFzIHJlbW90ZV9hdmcuCi0gICAqLwotCi0gIGxvY2FsX2F2ZyA9IChsb2NhbF8yICsgbG9jYWxfMSkgLyAyOwotICByZW1vdGVfYXZnID0gKHJlbW90ZV8yICsgcmVtb3RlXzEpIC8gMjsKLQotICBHU1RfTE9HX09CSkVDVCAoc2VsZiwKLSAgICAgICJyZW1vdGVhdmcgJSIgR19HVUlOVDY0X0ZPUk1BVCAiIGxvY2FsYXZnICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICByZW1vdGVfYXZnLCBsb2NhbF9hdmcpOwotCi0gIGNsb2NrID0gR1NUX0NMT0NLX0NBU1QgKHNlbGYpOwotCi0gIC8qIFN0b3JlIHdoYXQgdGhlIGNsb2NrIHByb2R1Y2VkIGFzICdub3cnIGJlZm9yZSB0aGlzIHVwZGF0ZSAqLwotICBnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uIChHU1RfQ0xPQ0tfQ0FTVCAoc2VsZiksICZvcmlnX2ludGVybmFsX3RpbWUsCi0gICAgICAmb3JpZ19leHRlcm5hbF90aW1lLCAmb3JpZ19yYXRlX251bSwgJm9yaWdfcmF0ZV9kZW4pOwotICBpbnRlcm5hbF90aW1lID0gb3JpZ19pbnRlcm5hbF90aW1lOwotICBleHRlcm5hbF90aW1lID0gb3JpZ19leHRlcm5hbF90aW1lOwotICByYXRlX251bSA9IG9yaWdfcmF0ZV9udW07Ci0gIHJhdGVfZGVuID0gb3JpZ19yYXRlX2RlbjsKLQotICBtaW5fZ3Vlc3MgPQotICAgICAgZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uIChHU1RfQ0xPQ0tfQ0FTVCAoc2VsZiksIGxvY2FsXzEsCi0gICAgICBpbnRlcm5hbF90aW1lLCBleHRlcm5hbF90aW1lLCByYXRlX251bSwgcmF0ZV9kZW4pOwotICB0aW1lX2JlZm9yZSA9Ci0gICAgICBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKEdTVF9DTE9DS19DQVNUIChzZWxmKSwgbG9jYWxfMiwKLSAgICAgIGludGVybmFsX3RpbWUsIGV4dGVybmFsX3RpbWUsIHJhdGVfbnVtLCByYXRlX2Rlbik7Ci0KLSAgLyogTWF4aW11bSBkaXNjb250aW51aXR5LCB3aGVuIHdlJ3JlIHN5bmNoZWQgd2l0aCB0aGUgbWFzdGVyLiBDb3VsZCBtYWtlIHRoaXMgYSBwcm9wZXJ0eSwKLSAgICogYnV0IHRoaXMgdmFsdWUgc2VlbXMgdG8gd29yayBmaW5lICovCi0gIG1heF9kaXNjb250ID0gc2VsZi0+cnR0X2F2ZyAvIDQ7Ci0KLSAgLyogSWYgdGhlIHJlbW90ZSBvYnNlcnZhdGlvbiB3YXMgd2l0aGluIGEgbWF4X2Rpc2NvbnQgd2luZG93IGFyb3VuZCBvdXIgbWluL21heCBlc3RpbWF0ZXMsIHdlJ3JlIHN5bmNoZWQgKi8KLSAgc3luY2hlZCA9Ci0gICAgICAoR1NUX0NMT0NLX0RJRkYgKHJlbW90ZV9hdmcsIG1pbl9ndWVzcykgPCAoR3N0Q2xvY2tUaW1lRGlmZikgKG1heF9kaXNjb250KQotICAgICAgJiYgR1NUX0NMT0NLX0RJRkYgKHRpbWVfYmVmb3JlLAotICAgICAgICAgIHJlbW90ZV9hdmcpIDwgKEdzdENsb2NrVGltZURpZmYpIChtYXhfZGlzY29udCkpOwotCi0gIGlmIChnc3RfY2xvY2tfYWRkX29ic2VydmF0aW9uX3VuYXBwbGllZCAoR1NUX0NMT0NLX0NBU1QgKHNlbGYpLAotICAgICAgICAgIGxvY2FsX2F2ZywgcmVtb3RlX2F2ZywgJnJfc3F1YXJlZCwgJmludGVybmFsX3RpbWUsICZleHRlcm5hbF90aW1lLAotICAgICAgICAgICZyYXRlX251bSwgJnJhdGVfZGVuKSkgewotCi0gICAgLyogTm93IGNvbXBhcmUgdGhlIGRpZmZlcmVuY2UgKGRpc2NvbnQpIGluIHRoZSBjbG9jawotICAgICAqIGFmdGVyIHRoaXMgb2JzZXJ2YXRpb24gKi8KLSAgICB0aW1lX2Rpc2NvbnQgPSBHU1RfQ0xPQ0tfRElGRiAodGltZV9iZWZvcmUsCi0gICAgICAgIGdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbiAoR1NUX0NMT0NLX0NBU1QgKHNlbGYpLCBsb2NhbF8yLAotICAgICAgICAgICAgaW50ZXJuYWxfdGltZSwgZXh0ZXJuYWxfdGltZSwgcmF0ZV9udW0sIHJhdGVfZGVuKSk7Ci0KLSAgICAvKiBJZiB3ZSB3ZXJlIGluIHN5bmMgd2l0aCB0aGUgcmVtb3RlIGNsb2NrLCBjbGFtcCB0aGUgYWxsb3dlZAotICAgICAqIGRpc2NvbnRpbnVpdHkgdG8gd2l0aGluIHF1YXJ0ZXIgb2Ygb25lIFJUVC4gSW4gc3luYyBtZWFucyBvdXIgc2VuZC9yZWNlaXZlIGVzdGltYXRlcwotICAgICAqIG9mIHJlbW90ZSB0aW1lIGNvcnJlY3RseSB3aW5kb3dlZCB0aGUgYWN0dWFsIHJlbW90ZSB0aW1lIG9ic2VydmF0aW9uICovCi0gICAgaWYgKHN5bmNoZWQgJiYgQUJTICh0aW1lX2Rpc2NvbnQpID4gbWF4X2Rpc2NvbnQpIHsKLSAgICAgIEdzdENsb2NrVGltZURpZmYgb2Zmc2V0OwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY2xvY2ssCi0gICAgICAgICAgIlRvbyBsYXJnZSBhIGRpc2NvbnQsIGNsYW1waW5nIHRvIDEvNCBhdmVyYWdlIFJUVCA9ICUiCi0gICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChtYXhfZGlzY29udCkpOwotICAgICAgaWYgKHRpbWVfZGlzY29udCA+IDApIHsgICAvKiBUb28gbGFyZ2UgYSBmb3J3YXJkIHN0ZXAgLSBhZGQgYSAtdmUgb2Zmc2V0ICovCi0gICAgICAgIG9mZnNldCA9IG1heF9kaXNjb250IC0gdGltZV9kaXNjb250OwotICAgICAgICBpZiAoLW9mZnNldCA+IGV4dGVybmFsX3RpbWUpCi0gICAgICAgICAgZXh0ZXJuYWxfdGltZSA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBleHRlcm5hbF90aW1lICs9IG9mZnNldDsKLSAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgLyogVG9vIGxhcmdlIGEgYmFja3dhcmQgc3RlcCAtIGFkZCBhICt2ZSBvZmZzZXQgKi8KLSAgICAgICAgb2Zmc2V0ID0gLShtYXhfZGlzY29udCArIHRpbWVfZGlzY29udCk7Ci0gICAgICAgIGV4dGVybmFsX3RpbWUgKz0gb2Zmc2V0OwotICAgICAgfQotCi0gICAgICB0aW1lX2Rpc2NvbnQgKz0gb2Zmc2V0OwotICAgIH0KLQotICAgIC8qIENoZWNrIGlmIHRoZSBuZXcgY2xvY2sgcGFyYW1zIHdvdWxkIGhhdmUgbWFkZSBvdXIgb2JzZXJ2YXRpb24gd2l0aGluIHJhbmdlICovCi0gICAgbm93X3N5bmNoZWQgPQotICAgICAgICAoR1NUX0NMT0NLX0RJRkYgKHJlbW90ZV9hdmcsCi0gICAgICAgICAgICBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKEdTVF9DTE9DS19DQVNUIChzZWxmKSwKLSAgICAgICAgICAgICAgICBsb2NhbF8xLCBpbnRlcm5hbF90aW1lLCBleHRlcm5hbF90aW1lLCByYXRlX251bSwKLSAgICAgICAgICAgICAgICByYXRlX2RlbikpIDwgKEdzdENsb2NrVGltZURpZmYpIChtYXhfZGlzY29udCkpCi0gICAgICAgICYmCi0gICAgICAgIChHU1RfQ0xPQ0tfRElGRiAoZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uCi0gICAgICAgICAgICAoR1NUX0NMT0NLX0NBU1QgKHNlbGYpLCBsb2NhbF8yLCBpbnRlcm5hbF90aW1lLCBleHRlcm5hbF90aW1lLAotICAgICAgICAgICAgICAgIHJhdGVfbnVtLCByYXRlX2RlbiksCi0gICAgICAgICAgICByZW1vdGVfYXZnKSA8IChHc3RDbG9ja1RpbWVEaWZmKSAobWF4X2Rpc2NvbnQpKTsKLQotICAgIC8qIE9ubHkgdXBkYXRlIHRoZSBjbG9jayBpZiB3ZSBoYWQgc3luY2ggb3IganVzdCBnYWluZWQgaXQgKi8KLSAgICBpZiAoc3luY2hlZCB8fCBub3dfc3luY2hlZCB8fCBzZWxmLT5za2lwcGVkX3VwZGF0ZXMgPiBNQVhfU0tJUFBFRF9VUERBVEVTKSB7Ci0gICAgICBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uIChHU1RfQ0xPQ0tfQ0FTVCAoc2VsZiksIGludGVybmFsX3RpbWUsCi0gICAgICAgICAgZXh0ZXJuYWxfdGltZSwgcmF0ZV9udW0sIHJhdGVfZGVuKTsKLSAgICAgIC8qIGdoZXR0byBmb3JtdWxhIC0gc2hvcnRlciB0aW1lb3V0IGZvciBiYWQgY29ycmVsYXRpb25zICovCi0gICAgICBjdXJyZW50X3RpbWVvdXQgPSAoMWUtMyAvICgxIC0gTUlOIChyX3NxdWFyZWQsIDAuOTk5OTkpKSkgKiBHU1RfU0VDT05EOwotICAgICAgY3VycmVudF90aW1lb3V0ID0KLSAgICAgICAgICBNSU4gKGN1cnJlbnRfdGltZW91dCwgZ3N0X2Nsb2NrX2dldF90aW1lb3V0IChHU1RfQ0xPQ0tfQ0FTVCAoc2VsZikpKTsKLSAgICAgIHNlbGYtPnNraXBwZWRfdXBkYXRlcyA9IDA7Ci0KLSAgICAgIC8qIEZJWE1FOiBXaGVuIGRvIHdlIGNvbnNpZGVyIHRoZSBjbG9jayBhYnNvbHV0ZWx5IG5vdCBzeW5jZWQgYW55bW9yZT8gKi8KLSAgICAgIGdzdF9jbG9ja19zZXRfc3luY2VkIChHU1RfQ0xPQ0sgKHNlbGYpLCBUUlVFKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBjYWxpYnJhdGlvbiB2YXJzIGZvciB0aGUgcmVwb3J0LCB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNsb2NrICovCi0gICAgICBpbnRlcm5hbF90aW1lID0gb3JpZ19pbnRlcm5hbF90aW1lOwotICAgICAgZXh0ZXJuYWxfdGltZSA9IG9yaWdfZXh0ZXJuYWxfdGltZTsKLSAgICAgIHJhdGVfbnVtID0gb3JpZ19yYXRlX251bTsKLSAgICAgIHJhdGVfZGVuID0gb3JpZ19yYXRlX2RlbjsKLSAgICAgIHRpbWVfZGlzY29udCA9IDA7Ci0gICAgICBzZWxmLT5za2lwcGVkX3VwZGF0ZXMrKzsKLSAgICB9Ci0gIH0KLQotICAvKiBMaW1pdCB0aGUgcG9sbGluZyB0byBhdCBtb3N0IG9uZSBwZXIgbWluaW11bV91cGRhdGVfaW50ZXJ2YWwgKi8KLSAgaWYgKHJ0dCA8IG1pbl91cGRhdGVfaW50ZXJ2YWwpCi0gICAgY3VycmVudF90aW1lb3V0ID0gTUFYIChtaW5fdXBkYXRlX2ludGVydmFsIC0gcnR0LCBjdXJyZW50X3RpbWVvdXQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gIGlmIChzZWxmLT5idXNzZXMpIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgR3N0TWVzc2FnZSAqbXNnOwotICAgIEdMaXN0ICpsOwotCi0gICAgLyogT3V0cHV0IGEgc3RhdHMgbWVzc2FnZSwgd2hldGhlciB3ZSB1cGRhdGVkIHRoZSBjbG9jayBvciBub3QgKi8KLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJnc3QtbmV0Y2xvY2stc3RhdGlzdGljcyIsCi0gICAgICAgICJzeW5jaHJvbmlzZWQiLCBHX1RZUEVfQk9PTEVBTiwgc3luY2hlZCwKLSAgICAgICAgInJ0dCIsIEdfVFlQRV9VSU5UNjQsIHJ0dCwKLSAgICAgICAgInJ0dC1hdmVyYWdlIiwgR19UWVBFX1VJTlQ2NCwgc2VsZi0+cnR0X2F2ZywKLSAgICAgICAgImxvY2FsIiwgR19UWVBFX1VJTlQ2NCwgbG9jYWxfYXZnLAotICAgICAgICAicmVtb3RlIiwgR19UWVBFX1VJTlQ2NCwgcmVtb3RlX2F2ZywKLSAgICAgICAgImRpc2NvbnRpbnVpdHkiLCBHX1RZUEVfSU5UNjQsIHRpbWVfZGlzY29udCwKLSAgICAgICAgInJlbW90ZS1taW4tZXN0aW1hdGUiLCBHX1RZUEVfVUlOVDY0LCBtaW5fZ3Vlc3MsCi0gICAgICAgICJyZW1vdGUtbWF4LWVzdGltYXRlIiwgR19UWVBFX1VJTlQ2NCwgdGltZV9iZWZvcmUsCi0gICAgICAgICJyZW1vdGUtbWluLWVycm9yIiwgR19UWVBFX0lOVDY0LCBHU1RfQ0xPQ0tfRElGRiAocmVtb3RlX2F2ZywKLSAgICAgICAgICAgIG1pbl9ndWVzcyksICJyZW1vdGUtbWF4LWVycm9yIiwgR19UWVBFX0lOVDY0LAotICAgICAgICBHU1RfQ0xPQ0tfRElGRiAocmVtb3RlX2F2ZywgdGltZV9iZWZvcmUpLCAicmVxdWVzdC1zZW5kIiwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgbG9jYWxfMSwgInJlcXVlc3QtcmVjZWl2ZSIsIEdfVFlQRV9VSU5UNjQsIGxvY2FsXzIsICJyLXNxdWFyZWQiLAotICAgICAgICBHX1RZUEVfRE9VQkxFLCByX3NxdWFyZWQsICJ0aW1lb3V0IiwgR19UWVBFX1VJTlQ2NCwgY3VycmVudF90aW1lb3V0LAotICAgICAgICAiaW50ZXJuYWwtdGltZSIsIEdfVFlQRV9VSU5UNjQsIGludGVybmFsX3RpbWUsICJleHRlcm5hbC10aW1lIiwKLSAgICAgICAgR19UWVBFX1VJTlQ2NCwgZXh0ZXJuYWxfdGltZSwgInJhdGUtbnVtIiwgR19UWVBFX1VJTlQ2NCwgcmF0ZV9udW0sCi0gICAgICAgICJyYXRlLWRlbiIsIEdfVFlQRV9VSU5UNjQsIHJhdGVfZGVuLCAicmF0ZSIsIEdfVFlQRV9ET1VCTEUsCi0gICAgICAgIChnZG91YmxlKSAocmF0ZV9udW0pIC8gcmF0ZV9kZW4sICJsb2NhbC1jbG9jay1vZmZzZXQiLCBHX1RZUEVfSU5UNjQsCi0gICAgICAgIEdTVF9DTE9DS19ESUZGIChpbnRlcm5hbF90aW1lLCBleHRlcm5hbF90aW1lKSwgTlVMTCk7Ci0gICAgbXNnID0gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1QgKHNlbGYpLCBzKTsKLQotICAgIGZvciAobCA9IHNlbGYtPmJ1c3NlczsgbDsgbCA9IGwtPm5leHQpCi0gICAgICBnc3RfYnVzX3Bvc3QgKGwtPmRhdGEsIGdzdF9tZXNzYWdlX3JlZiAobXNnKSk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotCi0gIEdTVF9JTkZPICgibmV4dCB0aW1lb3V0OiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGN1cnJlbnRfdGltZW91dCkpOwotICBzZWxmLT50aW1lb3V0X2V4cGlyYXRpb24gPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpICsgY3VycmVudF90aW1lb3V0OwotCi0gIHJldHVybjsKLQotYm9ndXNfb2JzZXJ2YXRpb246Ci0gIC8qIFNjaGVkdWxlIGEgbmV3IHBhY2tldCBhZ2FpbiBzb29uICovCi0gIHNlbGYtPnRpbWVvdXRfZXhwaXJhdGlvbiA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCkgKyAoR1NUX1NFQ09ORCAvIDQpOwotICByZXR1cm47Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotZ3N0X25ldF9jbGllbnRfaW50ZXJuYWxfY2xvY2tfdGhyZWFkIChncG9pbnRlciBkYXRhKQotewotICBHc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrICpzZWxmID0gZGF0YTsKLSAgR1NvY2tldCAqc29ja2V0ID0gc2VsZi0+c29ja2V0OwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChzZWxmLCAibmV0IGNsaWVudCBjbG9jayB0aHJlYWQgcnVubmluZywgc29ja2V0PSVwIiwgc29ja2V0KTsKLQotICBnX3NvY2tldF9zZXRfYmxvY2tpbmcgKHNvY2tldCwgVFJVRSk7Ci0gIGdfc29ja2V0X3NldF90aW1lb3V0IChzb2NrZXQsIDApOwotCi0gIHdoaWxlICghZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKHNlbGYtPmNhbmNlbCkpIHsKLSAgICBHc3RDbG9ja1RpbWUgZXhwaXJhdGlvbl90aW1lID0gc2VsZi0+dGltZW91dF9leHBpcmF0aW9uOwotICAgIEdzdENsb2NrVGltZSBub3cgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICAgIGdpbnQ2NCBzb2NrZXRfdGltZW91dDsKLQotICAgIGlmIChub3cgPj0gZXhwaXJhdGlvbl90aW1lIHx8IChleHBpcmF0aW9uX3RpbWUgLSBub3cpIDw9IEdTVF9NU0VDT05EKSB7Ci0gICAgICBzb2NrZXRfdGltZW91dCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNvY2tldF90aW1lb3V0ID0gKGV4cGlyYXRpb25fdGltZSAtIG5vdykgLyBHU1RfVVNFQ09ORDsKLSAgICB9Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUIChzZWxmLCAidGltZW91dDogJSIgR19HSU5UNjRfRk9STUFUICJ1cyIsIHNvY2tldF90aW1lb3V0KTsKLQotICAgIGlmICghZ19zb2NrZXRfY29uZGl0aW9uX3RpbWVkX3dhaXQgKHNvY2tldCwgR19JT19JTiwgc29ja2V0X3RpbWVvdXQsCi0gICAgICAgICAgICBzZWxmLT5jYW5jZWwsICZlcnIpKSB7Ci0gICAgICAvKiBjYW5jZWxsZWQsIHRpbWVvdXQgb3IgZXJyb3IgKi8KLSAgICAgIGlmIChlcnItPmNvZGUgPT0gR19JT19FUlJPUl9DQU5DRUxMRUQpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChzZWxmLCAiY2FuY2VsbGVkIik7Ci0gICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gZWxzZSBpZiAoZXJyLT5jb2RlID09IEdfSU9fRVJST1JfVElNRURfT1VUKSB7Ci0gICAgICAgIC8qIHRpbWVkIG91dCwgbGV0J3Mgc2VuZCBhbm90aGVyIHBhY2tldCAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAidGltZWQgb3V0Iik7Ci0KLSAgICAgICAgaWYgKHNlbGYtPmlzX250cCkgewotICAgICAgICAgIEdzdE50cFBhY2tldCAqcGFja2V0OwotCi0gICAgICAgICAgcGFja2V0ID0gZ3N0X250cF9wYWNrZXRfbmV3IChOVUxMLCBOVUxMKTsKLQotICAgICAgICAgIHBhY2tldC0+dHJhbnNtaXRfdGltZSA9Ci0gICAgICAgICAgICAgIGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoR1NUX0NMT0NLX0NBU1QgKHNlbGYpKTsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICAgICAgICJzZW5kaW5nIHBhY2tldCwgbG9jYWwgdGltZSA9ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFja2V0LT50cmFuc21pdF90aW1lKSk7Ci0KLSAgICAgICAgICBnc3RfbnRwX3BhY2tldF9zZW5kIChwYWNrZXQsIHNlbGYtPnNvY2tldCwgc2VsZi0+c2VydmFkZHIsIE5VTEwpOwotCi0gICAgICAgICAgZ19mcmVlIChwYWNrZXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdzdE5ldFRpbWVQYWNrZXQgKnBhY2tldDsKLQotICAgICAgICAgIHBhY2tldCA9IGdzdF9uZXRfdGltZV9wYWNrZXRfbmV3IChOVUxMKTsKLQotICAgICAgICAgIHBhY2tldC0+bG9jYWxfdGltZSA9Ci0gICAgICAgICAgICAgIGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoR1NUX0NMT0NLX0NBU1QgKHNlbGYpKTsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICAgICAgICJzZW5kaW5nIHBhY2tldCwgbG9jYWwgdGltZSA9ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFja2V0LT5sb2NhbF90aW1lKSk7Ci0KLSAgICAgICAgICBnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQgKHBhY2tldCwgc2VsZi0+c29ja2V0LCBzZWxmLT5zZXJ2YWRkciwgTlVMTCk7Ci0KLSAgICAgICAgICBnX2ZyZWUgKHBhY2tldCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiByZXNldCB0aW1lb3V0IChidXQgYXJlIGV4cGVjdGluZyBhIHJlc3BvbnNlIHNvb25lciBhbnl3YXkpICovCi0gICAgICAgIHNlbGYtPnRpbWVvdXRfZXhwaXJhdGlvbiA9Ci0gICAgICAgICAgICBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpICsKLSAgICAgICAgICAgIGdzdF9jbG9ja19nZXRfdGltZW91dCAoR1NUX0NMT0NLX0NBU1QgKHNlbGYpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzb2NrZXQgZXJyb3I6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTApOyAvKiB0aHJvdHRsZSAqLwotICAgICAgfQotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdzdENsb2NrVGltZSBuZXdfbG9jYWw7Ci0KLSAgICAgIC8qIGdvdCBwYWNrZXQgKi8KLQotICAgICAgbmV3X2xvY2FsID0gZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHU1RfQ0xPQ0tfQ0FTVCAoc2VsZikpOwotCi0gICAgICBpZiAoc2VsZi0+aXNfbnRwKSB7Ci0gICAgICAgIEdzdE50cFBhY2tldCAqcGFja2V0OwotCi0gICAgICAgIHBhY2tldCA9IGdzdF9udHBfcGFja2V0X3JlY2VpdmUgKHNvY2tldCwgTlVMTCwgJmVycik7Ci0KLSAgICAgICAgaWYgKHBhY2tldCAhPSBOVUxMKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJnb3QgcGFja2V0IGJhY2siKTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgImxvY2FsXzEgPSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhY2tldC0+b3JpZ2luX3RpbWUpKTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgInJlbW90ZV8xID0gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChwYWNrZXQtPnJlY2VpdmVfdGltZSkpOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAicmVtb3RlXzIgPSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhY2tldC0+dHJhbnNtaXRfdGltZSkpOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAibG9jYWxfMiA9ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobmV3X2xvY2FsKSk7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJwb2xsX2ludGVydmFsID0gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChwYWNrZXQtPnBvbGxfaW50ZXJ2YWwpKTsKLQotICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBsYXN0IHBvbGwgaW50ZXJ2YWwgd2UgZXZlciBnb3QgZnJvbSB0aGUgc2VydmVyICovCi0gICAgICAgICAgaWYgKHBhY2tldC0+cG9sbF9pbnRlcnZhbCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgICAgICAgc2VsZi0+bGFzdF9yZW1vdGVfcG9sbF9pbnRlcnZhbCA9IHBhY2tldC0+cG9sbF9pbnRlcnZhbDsKLQotICAgICAgICAgIC8qIG9ic2VydmVfdGltZXMgd2lsbCByZXNldCB0aGUgdGltZW91dCAqLwotICAgICAgICAgIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX29ic2VydmVfdGltZXMgKHNlbGYsCi0gICAgICAgICAgICAgIHBhY2tldC0+b3JpZ2luX3RpbWUsIHBhY2tldC0+cmVjZWl2ZV90aW1lLCBwYWNrZXQtPnRyYW5zbWl0X3RpbWUsCi0gICAgICAgICAgICAgIG5ld19sb2NhbCk7Ci0KLSAgICAgICAgICBnX2ZyZWUgKHBhY2tldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXJyICE9IE5VTEwpIHsKLSAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdTVF9OVFBfRVJST1IsIEdTVF9OVFBfRVJST1JfV1JPTkdfVkVSU0lPTikKLSAgICAgICAgICAgICAgfHwgZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdTVF9OVFBfRVJST1IsIEdTVF9OVFBfRVJST1JfS09EX0RFTlkpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiZmF0YWwgcmVjZWl2ZSBlcnJvcjogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgICAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9IGVsc2UgaWYgKGdfZXJyb3JfbWF0Y2hlcyAoZXJyLCBHU1RfTlRQX0VSUk9SLAotICAgICAgICAgICAgICAgICAgR1NUX05UUF9FUlJPUl9LT0RfUkFURSkpIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgIm5lZWQgdG8gbGltaXQgcmF0ZSIpOwotCi0gICAgICAgICAgICAvKiBJZiB0aGUgc2VydmVyIGRpZCBub3QgdGVsbCB1cyBhIHBvbGwgaW50ZXJ2YWwgYmVmb3JlLCBkb3VibGUKLSAgICAgICAgICAgICAqIG91ciBtaW5pbXVtIHBvbGwgaW50ZXJ2YWwuIE90aGVyd2lzZSB3ZSBhc3N1bWUgdGhhdCB0aGUgc2VydmVyCi0gICAgICAgICAgICAgKiBhbHJlYWR5IHRvbGQgdXMgc29tZXRoaW5nIHNlbnNpYmxlIGFuZCB0aGF0IHRoaXMgZXJyb3IgaGVyZQotICAgICAgICAgICAgICogd2FzIGp1c3QgYSBzcHVyaW91cyBlcnJvciAqLwotICAgICAgICAgICAgaWYgKHNlbGYtPmxhc3RfcmVtb3RlX3BvbGxfaW50ZXJ2YWwgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgICAgICAgc2VsZi0+bWluaW11bV91cGRhdGVfaW50ZXJ2YWwgKj0gMjsKLQotICAgICAgICAgICAgLyogQW5kIHdhaXQgYSBiaXQgYmVmb3JlIHdlIHNlbmQgdGhlIG5leHQgcGFja2V0IGluc3RlYWQgb2YKLSAgICAgICAgICAgICAqIHNlbmRpbmcgaXQgaW1tZWRpYXRlbHkgKi8KLSAgICAgICAgICAgIHNlbGYtPnRpbWVvdXRfZXhwaXJhdGlvbiA9Ci0gICAgICAgICAgICAgICAgZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKSArCi0gICAgICAgICAgICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lb3V0IChHU1RfQ0xPQ0tfQ0FTVCAoc2VsZikpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsICJyZWNlaXZlIGVycm9yOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHc3ROZXRUaW1lUGFja2V0ICpwYWNrZXQ7Ci0KLSAgICAgICAgcGFja2V0ID0gZ3N0X25ldF90aW1lX3BhY2tldF9yZWNlaXZlIChzb2NrZXQsIE5VTEwsICZlcnIpOwotCi0gICAgICAgIGlmIChwYWNrZXQgIT0gTlVMTCkgewotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAiZ290IHBhY2tldCBiYWNrIik7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJsb2NhbF8xID0gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChwYWNrZXQtPmxvY2FsX3RpbWUpKTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgInJlbW90ZSA9ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFja2V0LT5yZW1vdGVfdGltZSkpOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAibG9jYWxfMiA9ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobmV3X2xvY2FsKSk7Ci0KLSAgICAgICAgICAvKiBvYnNlcnZlX3RpbWVzIHdpbGwgcmVzZXQgdGhlIHRpbWVvdXQgKi8KLSAgICAgICAgICBnc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja19vYnNlcnZlX3RpbWVzIChzZWxmLCBwYWNrZXQtPmxvY2FsX3RpbWUsCi0gICAgICAgICAgICAgIHBhY2tldC0+cmVtb3RlX3RpbWUsIHBhY2tldC0+cmVtb3RlX3RpbWUsIG5ld19sb2NhbCk7Ci0KLSAgICAgICAgICBnX2ZyZWUgKHBhY2tldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXJyICE9IE5VTEwpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsICJyZWNlaXZlIGVycm9yOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgR1NUX0lORk9fT0JKRUNUIChzZWxmLCAic2h1dHRpbmcgZG93biBuZXQgY2xpZW50IGNsb2NrIHRocmVhZCIpOwotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja19zdGFydCAoR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9jayAqIHNlbGYpCi17Ci0gIEdTb2NrZXRBZGRyZXNzICpzZXJ2YWRkcjsKLSAgR1NvY2tldEFkZHJlc3MgKm15YWRkcjsKLSAgR1NvY2tldEFkZHJlc3MgKmFueWFkZHI7Ci0gIEdJbmV0QWRkcmVzcyAqaW5ldGFkZHI7Ci0gIEdTb2NrZXQgKnNvY2tldDsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gIEdTb2NrZXRGYW1pbHkgZmFtaWx5OwotICBHUG9sbEZEIGR1bW15X3BvbGxmZDsKLSAgR1Jlc29sdmVyICpyZXNvbHZlciA9IE5VTEw7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZi0+YWRkcmVzcyAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmLT5zZXJ2YWRkciA9PSBOVUxMLCBGQUxTRSk7Ci0KLSAgLyogY3JlYXRlIHRhcmdldCBhZGRyZXNzICovCi0gIGluZXRhZGRyID0gZ19pbmV0X2FkZHJlc3NfbmV3X2Zyb21fc3RyaW5nIChzZWxmLT5hZGRyZXNzKTsKLSAgaWYgKGluZXRhZGRyID09IE5VTEwpIHsKLSAgICBHTGlzdCAqcmVzdWx0czsKLQotICAgIHJlc29sdmVyID0gZ19yZXNvbHZlcl9nZXRfZGVmYXVsdCAoKTsKLQotICAgIHJlc3VsdHMgPSBnX3Jlc29sdmVyX2xvb2t1cF9ieV9uYW1lIChyZXNvbHZlciwgc2VsZi0+YWRkcmVzcywgTlVMTCwgJmVycik7Ci0gICAgaWYgKCFyZXN1bHRzKQotICAgICAgZ290byBmYWlsZWRfdG9fcmVzb2x2ZTsKLQotICAgIGluZXRhZGRyID0gR19JTkVUX0FERFJFU1MgKGdfb2JqZWN0X3JlZiAocmVzdWx0cy0+ZGF0YSkpOwotICAgIGdfcmVzb2x2ZXJfZnJlZV9hZGRyZXNzZXMgKHJlc3VsdHMpOwotICAgIGdfb2JqZWN0X3VucmVmIChyZXNvbHZlcik7Ci0gIH0KLQotICBmYW1pbHkgPSBnX2luZXRfYWRkcmVzc19nZXRfZmFtaWx5IChpbmV0YWRkcik7Ci0KLSAgc2VydmFkZHIgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3IChpbmV0YWRkciwgc2VsZi0+cG9ydCk7Ci0gIGdfb2JqZWN0X3VucmVmIChpbmV0YWRkcik7Ci0KLSAgZ19hc3NlcnQgKHNlcnZhZGRyICE9IE5VTEwpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJ3aWxsIGNvbW11bmljYXRlIHdpdGggJXM6JWQiLCBzZWxmLT5hZGRyZXNzLAotICAgICAgc2VsZi0+cG9ydCk7Ci0KLSAgc29ja2V0ID0gZ19zb2NrZXRfbmV3IChmYW1pbHksIEdfU09DS0VUX1RZUEVfREFUQUdSQU0sCi0gICAgICBHX1NPQ0tFVF9QUk9UT0NPTF9VRFAsICZlcnJvcik7Ci0KLSAgaWYgKHNvY2tldCA9PSBOVUxMKQotICAgIGdvdG8gbm9fc29ja2V0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJiaW5kaW5nIHNvY2tldCIpOwotICBpbmV0YWRkciA9IGdfaW5ldF9hZGRyZXNzX25ld19hbnkgKGZhbWlseSk7Ci0gIGFueWFkZHIgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3IChpbmV0YWRkciwgMCk7Ci0gIGdfc29ja2V0X2JpbmQgKHNvY2tldCwgYW55YWRkciwgVFJVRSwgJmVycm9yKTsKLSAgZ19vYmplY3RfdW5yZWYgKGFueWFkZHIpOwotICBnX29iamVjdF91bnJlZiAoaW5ldGFkZHIpOwotCi0gIGlmIChlcnJvciAhPSBOVUxMKQotICAgIGdvdG8gYmluZF9lcnJvcjsKLQotICAvKiBjaGVjayBhZGRyZXNzIHdlJ3JlIGJvdW5kIHRvLCBtb3N0bHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLwotICBteWFkZHIgPSBnX3NvY2tldF9nZXRfbG9jYWxfYWRkcmVzcyAoc29ja2V0LCAmZXJyb3IpOwotCi0gIGlmIChteWFkZHIgPT0gTlVMTCkKLSAgICBnb3RvIGdldHNvY2tuYW1lX2Vycm9yOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzb2NrZXQgb3BlbmVkIG9uIFVEUCBwb3J0ICVkIiwKLSAgICAgIGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfcG9ydCAoR19JTkVUX1NPQ0tFVF9BRERSRVNTIChteWFkZHIpKSk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKG15YWRkcik7Ci0KLSAgc2VsZi0+Y2FuY2VsID0gZ19jYW5jZWxsYWJsZV9uZXcgKCk7Ci0gIHNlbGYtPm1hZGVfY2FuY2VsX2ZkID0KLSAgICAgIGdfY2FuY2VsbGFibGVfbWFrZV9wb2xsZmQgKHNlbGYtPmNhbmNlbCwgJmR1bW15X3BvbGxmZCk7Ci0KLSAgc2VsZi0+c29ja2V0ID0gc29ja2V0OwotICBzZWxmLT5zZXJ2YWRkciA9IEdfU09DS0VUX0FERFJFU1MgKHNlcnZhZGRyKTsKLQotICBzZWxmLT50aHJlYWQgPSBnX3RocmVhZF90cnlfbmV3ICgiR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9jayIsCi0gICAgICBnc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja190aHJlYWQsIHNlbGYsICZlcnJvcik7Ci0KLSAgaWYgKGVycm9yICE9IE5VTEwpCi0gICAgZ290byBub190aHJlYWQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19zb2NrZXQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAic29ja2V0X25ldygpIGZhaWxlZDogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1iaW5kX2Vycm9yOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgImJpbmQgZmFpbGVkOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSAgICBnX29iamVjdF91bnJlZiAoc29ja2V0KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWdldHNvY2tuYW1lX2Vycm9yOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgImdldF9sb2NhbF9hZGRyZXNzKCkgZmFpbGVkOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSAgICBnX29iamVjdF91bnJlZiAoc29ja2V0KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWZhaWxlZF90b19yZXNvbHZlOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgInJlc29sdmluZyAnJXMnIGZhaWxlZDogJXMiLAotICAgICAgICBzZWxmLT5hZGRyZXNzLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIGdfb2JqZWN0X3VucmVmIChyZXNvbHZlcik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub190aHJlYWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiY291bGQgbm90IGNyZWF0ZSB0aHJlYWQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgIGdfb2JqZWN0X3VucmVmIChzZWxmLT5zZXJ2YWRkcik7Ci0gICAgc2VsZi0+c2VydmFkZHIgPSBOVUxMOwotICAgIGdfb2JqZWN0X3VucmVmIChzZWxmLT5zb2NrZXQpOwotICAgIHNlbGYtPnNvY2tldCA9IE5VTEw7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X2NsaWVudF9pbnRlcm5hbF9jbG9ja19zdG9wIChHc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrICogc2VsZikKLXsKLSAgaWYgKHNlbGYtPnRocmVhZCA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsICJzdG9wcGluZy4uLiIpOwotICBnX2NhbmNlbGxhYmxlX2NhbmNlbCAoc2VsZi0+Y2FuY2VsKTsKLQotICBnX3RocmVhZF9qb2luIChzZWxmLT50aHJlYWQpOwotICBzZWxmLT50aHJlYWQgPSBOVUxMOwotCi0gIGlmIChzZWxmLT5tYWRlX2NhbmNlbF9mZCkKLSAgICBnX2NhbmNlbGxhYmxlX3JlbGVhc2VfZmQgKHNlbGYtPmNhbmNlbCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHNlbGYtPmNhbmNlbCk7Ci0gIHNlbGYtPmNhbmNlbCA9IE5VTEw7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHNlbGYtPnNlcnZhZGRyKTsKLSAgc2VsZi0+c2VydmFkZHIgPSBOVUxMOwotCi0gIGdfb2JqZWN0X3VucmVmIChzZWxmLT5zb2NrZXQpOwotICBzZWxmLT5zb2NrZXQgPSBOVUxMOwotCi0gIEdTVF9JTkZPX09CSkVDVCAoc2VsZiwgInN0b3BwZWQiKTsKLX0KLQotI2RlZmluZSBHU1RfTkVUX0NMSUVOVF9DTE9DS19HRVRfUFJJVkFURShvYmopICBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLLCBHc3ROZXRDbGllbnRDbG9ja1ByaXZhdGUpKQotCi1zdHJ1Y3QgX0dzdE5ldENsaWVudENsb2NrUHJpdmF0ZQotewotICBHc3RDbG9jayAqaW50ZXJuYWxfY2xvY2s7Ci0KLSAgR3N0Q2xvY2tUaW1lIHJvdW5kdHJpcF9saW1pdDsKLSAgR3N0Q2xvY2tUaW1lIG1pbmltdW1fdXBkYXRlX2ludGVydmFsOwotCi0gIEdzdENsb2NrVGltZSBiYXNlX3RpbWUsIGludGVybmFsX2Jhc2VfdGltZTsKLQotICBnY2hhciAqYWRkcmVzczsKLSAgZ2ludCBwb3J0OwotCi0gIEdzdEJ1cyAqYnVzOwotCi0gIGdib29sZWFuIGlzX250cDsKLQotICBndWxvbmcgc3luY2VkX2lkOwotfTsKLQotR19ERUZJTkVfVFlQRSAoR3N0TmV0Q2xpZW50Q2xvY2ssIGdzdF9uZXRfY2xpZW50X2Nsb2NrLCBHU1RfVFlQRV9TWVNURU1fQ0xPQ0spOwotCi1zdGF0aWMgdm9pZCBnc3RfbmV0X2NsaWVudF9jbG9ja19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfbmV0X2NsaWVudF9jbG9ja19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfbmV0X2NsaWVudF9jbG9ja19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfbmV0X2NsaWVudF9jbG9ja19jb25zdHJ1Y3RlZCAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RDbG9ja1RpbWUgZ3N0X25ldF9jbGllbnRfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKEdzdENsb2NrICogY2xvY2spOwotCi1zdGF0aWMgdm9pZAotZ3N0X25ldF9jbGllbnRfY2xvY2tfY2xhc3NfaW5pdCAoR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdENsb2NrQ2xhc3MgKmNsb2NrX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBjbG9ja19jbGFzcyA9IEdTVF9DTE9DS19DTEFTUyAoa2xhc3MpOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2tQcml2YXRlKSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfbmV0X2NsaWVudF9jbG9ja19maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X25ldF9jbGllbnRfY2xvY2tfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfbmV0X2NsaWVudF9jbG9ja19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmNvbnN0cnVjdGVkID0gZ3N0X25ldF9jbGllbnRfY2xvY2tfY29uc3RydWN0ZWQ7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BRERSRVNTLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImFkZHJlc3MiLCAiYWRkcmVzcyIsCi0gICAgICAgICAgIlRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHByb3ZpZGluZyBhIHRpbWUgc2VydmVyIiwKLSAgICAgICAgICBERUZBVUxUX0FERFJFU1MsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QT1JULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInBvcnQiLCAicG9ydCIsCi0gICAgICAgICAgIlRoZSBwb3J0IG9uIHdoaWNoIHRoZSByZW1vdGUgc2VydmVyIGlzIGxpc3RlbmluZyIsIDAsIEdfTUFYVUlOVDE2LAotICAgICAgICAgIERFRkFVTFRfUE9SVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JVUywKLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJidXMiLCAiYnVzIiwKLSAgICAgICAgICAiQSBHc3RCdXMgb24gd2hpY2ggdG8gc2VuZCBjbG9jayBzdGF0dXMgaW5mb3JtYXRpb24iLCBHU1RfVFlQRV9CVVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdE5ldENsaWVudEludGVybmFsQ2xvY2s6OnJvdW5kLXRyaXAtbGltaXQ6Ci0gICAqCi0gICAqIE1heGltdW0gYWxsb3dlZCByb3VuZC10cmlwIGZvciBwYWNrZXRzLiBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBhIG5vbnplcm8KLSAgICogdmFsdWUsIGFsbCBwYWNrZXRzIHdpdGggYSByb3VuZC10cmlwIGludGVydmFsIGxhcmdlciB0aGFuIHRoaXMgbGltaXQgd2lsbCBiZQotICAgKiBpZ25vcmVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgbmV0d29ya3Mgd2l0aCBzZXZlcmUgYW5kIGZsdWN0dWF0aW5nIHRyYW5zcG9ydAotICAgKiBkZWxheXMuIEZpbHRlcmluZyBvdXQgdGhlc2UgcGFja2V0cyBpbmNyZWFzZXMgc3RhYmlsaXR5IG9mIHRoZSBzeW5jaHJvbml6YXRpb24uCi0gICAqIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgbG93ZXIgdGhlIGxpbWl0LCB0aGUgaGlnaGVyIHRoZSBhbW91bnQgb2YgZmlsdGVyZWQKLSAgICogcGFja2V0cy4gRW1waXJpY2FsIHRlc3RzIGFyZSB0eXBpY2FsbHkgbmVjZXNzYXJ5IHRvIGVzdGltYXRlIGEgZ29vZCB2YWx1ZQotICAgKiBmb3IgdGhlIGxpbWl0LgotICAgKiBJZiB0aGUgcHJvcGVydHkgaXMgc2V0IHRvIHplcm8sIHRoZSBsaW1pdCBpcyBkaXNhYmxlZC4KLSAgICoKLSAgICogU2luY2U6IDEuNAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ST1VORFRSSVBfTElNSVQsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgicm91bmQtdHJpcC1saW1pdCIsICJyb3VuZC10cmlwIGxpbWl0IiwKLSAgICAgICAgICAiTWF4aW11bSB0b2xlcmFibGUgcm91bmQtdHJpcCBpbnRlcnZhbCBmb3IgcGFja2V0cywgaW4gbmFub3NlY29uZHMgIgotICAgICAgICAgICIoMCA9IG5vIGxpbWl0KSIsIDAsIEdfTUFYVUlOVDY0LCBERUZBVUxUX1JPVU5EVFJJUF9MSU1JVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01JTklNVU1fVVBEQVRFX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoIm1pbmltdW0tdXBkYXRlLWludGVydmFsIiwgIm1pbmltdW0gdXBkYXRlIGludGVydmFsIiwKLSAgICAgICAgICAiTWluaW11bSBwb2xsaW5nIGludGVydmFsIGZvciBwYWNrZXRzLCBpbiBuYW5vc2Vjb25kcyIKLSAgICAgICAgICAiKDAgPSBubyBsaW1pdCkiLCAwLCBHX01BWFVJTlQ2NCwgREVGQVVMVF9NSU5JTVVNX1VQREFURV9JTlRFUlZBTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JBU0VfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJiYXNlLXRpbWUiLCAiQmFzZSBUaW1lIiwKLSAgICAgICAgICAiSW5pdGlhbCB0aW1lIHRoYXQgaXMgcmVwb3J0ZWQgYmVmb3JlIHN5bmNocm9uaXphdGlvbiIsIDAsCi0gICAgICAgICAgR19NQVhVSU5UNjQsIERFRkFVTFRfQkFTRV9USU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOVEVSTkFMX0NMT0NLLAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoImludGVybmFsLWNsb2NrIiwgIkludGVybmFsIENsb2NrIiwKLSAgICAgICAgICAiSW50ZXJuYWwgY2xvY2sgdGhhdCBkaXJlY3RseSBzbGF2ZWQgdG8gdGhlIHJlbW90ZSBjbG9jayIsCi0gICAgICAgICAgR1NUX1RZUEVfQ0xPQ0ssIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgY2xvY2tfY2xhc3MtPmdldF9pbnRlcm5hbF90aW1lID0gZ3N0X25ldF9jbGllbnRfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X2NsaWVudF9jbG9ja19pbml0IChHc3ROZXRDbGllbnRDbG9jayAqIHNlbGYpCi17Ci0gIEdzdE5ldENsaWVudENsb2NrUHJpdmF0ZSAqcHJpdjsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotCi0gIHNlbGYtPnByaXYgPSBwcml2ID0gR1NUX05FVF9DTElFTlRfQ0xPQ0tfR0VUX1BSSVZBVEUgKHNlbGYpOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHNlbGYsIEdTVF9DTE9DS19GTEFHX0NBTl9TRVRfTUFTVEVSKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2VsZiwgR1NUX0NMT0NLX0ZMQUdfTkVFRFNfU1RBUlRVUF9TWU5DKTsKLQotICBwcml2LT5wb3J0ID0gREVGQVVMVF9QT1JUOwotICBwcml2LT5hZGRyZXNzID0gZ19zdHJkdXAgKERFRkFVTFRfQUREUkVTUyk7Ci0KLSAgcHJpdi0+cm91bmR0cmlwX2xpbWl0ID0gREVGQVVMVF9ST1VORFRSSVBfTElNSVQ7Ci0gIHByaXYtPm1pbmltdW1fdXBkYXRlX2ludGVydmFsID0gREVGQVVMVF9NSU5JTVVNX1VQREFURV9JTlRFUlZBTDsKLQotICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBwcml2LT5iYXNlX3RpbWUgPSBERUZBVUxUX0JBU0VfVElNRTsKLSAgcHJpdi0+aW50ZXJuYWxfYmFzZV90aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjbG9ja3NfbG9jayAqLwotc3RhdGljIHZvaWQKLXVwZGF0ZV9jbG9ja19jYWNoZSAoQ2xvY2tDYWNoZSAqIGNhY2hlKQotewotICBHc3RDbG9ja1RpbWUgcm91bmR0cmlwX2xpbWl0ID0gMCwgbWluaW11bV91cGRhdGVfaW50ZXJ2YWwgPSAwOwotICBHTGlzdCAqbCwgKmJ1c3NlcyA9IE5VTEw7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChjYWNoZS0+Y2xvY2spOwotICBnX2xpc3RfZnJlZV9mdWxsIChHU1RfTkVUX0NMSUVOVF9JTlRFUk5BTF9DTE9DSyAoY2FjaGUtPmNsb2NrKS0+YnVzc2VzLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLQotICBmb3IgKGwgPSBjYWNoZS0+Y2xvY2tzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIEdzdE5ldENsaWVudENsb2NrICpjbG9jayA9IGwtPmRhdGE7Ci0KLSAgICBpZiAoY2xvY2stPnByaXYtPmJ1cykKLSAgICAgIGJ1c3NlcyA9IGdfbGlzdF9wcmVwZW5kIChidXNzZXMsIGdzdF9vYmplY3RfcmVmIChjbG9jay0+cHJpdi0+YnVzKSk7Ci0KLSAgICBpZiAocm91bmR0cmlwX2xpbWl0ID09IDApCi0gICAgICByb3VuZHRyaXBfbGltaXQgPSBjbG9jay0+cHJpdi0+cm91bmR0cmlwX2xpbWl0OwotICAgIGVsc2UKLSAgICAgIHJvdW5kdHJpcF9saW1pdCA9IE1BWCAocm91bmR0cmlwX2xpbWl0LCBjbG9jay0+cHJpdi0+cm91bmR0cmlwX2xpbWl0KTsKLQotICAgIGlmIChtaW5pbXVtX3VwZGF0ZV9pbnRlcnZhbCA9PSAwKQotICAgICAgbWluaW11bV91cGRhdGVfaW50ZXJ2YWwgPSBjbG9jay0+cHJpdi0+bWluaW11bV91cGRhdGVfaW50ZXJ2YWw7Ci0gICAgZWxzZQotICAgICAgbWluaW11bV91cGRhdGVfaW50ZXJ2YWwgPQotICAgICAgICAgIE1JTiAobWluaW11bV91cGRhdGVfaW50ZXJ2YWwsIGNsb2NrLT5wcml2LT5taW5pbXVtX3VwZGF0ZV9pbnRlcnZhbCk7Ci0gIH0KLSAgR1NUX05FVF9DTElFTlRfSU5URVJOQUxfQ0xPQ0sgKGNhY2hlLT5jbG9jayktPmJ1c3NlcyA9IGJ1c3NlczsKLSAgR1NUX05FVF9DTElFTlRfSU5URVJOQUxfQ0xPQ0sgKGNhY2hlLT5jbG9jayktPnJvdW5kdHJpcF9saW1pdCA9Ci0gICAgICByb3VuZHRyaXBfbGltaXQ7Ci0gIEdTVF9ORVRfQ0xJRU5UX0lOVEVSTkFMX0NMT0NLIChjYWNoZS0+Y2xvY2spLT5taW5pbXVtX3VwZGF0ZV9pbnRlcnZhbCA9Ci0gICAgICBtaW5pbXVtX3VwZGF0ZV9pbnRlcnZhbDsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoY2FjaGUtPmNsb2NrKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1yZW1vdmVfY2xvY2tfY2FjaGUgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSB0aW1lLCBHc3RDbG9ja0lEIGlkLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgQ2xvY2tDYWNoZSAqY2FjaGUgPSB1c2VyX2RhdGE7Ci0KLSAgR19MT0NLIChjbG9ja3NfbG9jayk7Ci0gIGlmICghY2FjaGUtPmNsb2NrcykgewotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoY2FjaGUtPnJlbW92ZV9pZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoY2FjaGUtPmNsb2NrKTsKLSAgICBjbG9ja3MgPSBnX2xpc3RfcmVtb3ZlIChjbG9ja3MsIGNhY2hlKTsKLSAgICBnX2ZyZWUgKGNhY2hlKTsKLSAgfQotICBHX1VOTE9DSyAoY2xvY2tzX2xvY2spOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25ldF9jbGllbnRfY2xvY2tfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE5ldENsaWVudENsb2NrICpzZWxmID0gR1NUX05FVF9DTElFTlRfQ0xPQ0sgKG9iamVjdCk7Ci0gIEdMaXN0ICpsOwotCi0gIGlmIChzZWxmLT5wcml2LT5zeW5jZWRfaWQpCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChzZWxmLT5wcml2LT5pbnRlcm5hbF9jbG9jaywKLSAgICAgICAgc2VsZi0+cHJpdi0+c3luY2VkX2lkKTsKLSAgc2VsZi0+cHJpdi0+c3luY2VkX2lkID0gMDsKLQotICBHX0xPQ0sgKGNsb2Nrc19sb2NrKTsKLSAgZm9yIChsID0gY2xvY2tzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIENsb2NrQ2FjaGUgKmNhY2hlID0gbC0+ZGF0YTsKLQotICAgIGlmIChjYWNoZS0+Y2xvY2sgPT0gc2VsZi0+cHJpdi0+aW50ZXJuYWxfY2xvY2spIHsKLSAgICAgIGNhY2hlLT5jbG9ja3MgPSBnX2xpc3RfcmVtb3ZlIChjYWNoZS0+Y2xvY2tzLCBzZWxmKTsKLQotICAgICAgaWYgKGNhY2hlLT5jbG9ja3MpIHsKLSAgICAgICAgdXBkYXRlX2Nsb2NrX2NhY2hlIChjYWNoZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHc3RDbG9jayAqc3lzY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKHN5c2Nsb2NrKSArIDYwICogR1NUX1NFQ09ORDsKLQotICAgICAgICBjYWNoZS0+cmVtb3ZlX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoc3lzY2xvY2ssIHRpbWUpOwotICAgICAgICBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoY2FjaGUtPnJlbW92ZV9pZCwgcmVtb3ZlX2Nsb2NrX2NhY2hlLCBjYWNoZSwKLSAgICAgICAgICAgIE5VTEwpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzeXNjbG9jayk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgR19VTkxPQ0sgKGNsb2Nrc19sb2NrKTsKLQotICBnX2ZyZWUgKHNlbGYtPnByaXYtPmFkZHJlc3MpOwotICBzZWxmLT5wcml2LT5hZGRyZXNzID0gTlVMTDsKLQotICBpZiAoc2VsZi0+cHJpdi0+YnVzICE9IE5VTEwpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzZWxmLT5wcml2LT5idXMpOwotICAgIHNlbGYtPnByaXYtPmJ1cyA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X25ldF9jbGllbnRfY2xvY2tfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X2NsaWVudF9jbG9ja19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0TmV0Q2xpZW50Q2xvY2sgKnNlbGYgPSBHU1RfTkVUX0NMSUVOVF9DTE9DSyAob2JqZWN0KTsKLSAgZ2Jvb2xlYW4gdXBkYXRlID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0FERFJFU1M6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICAgICAgZ19mcmVlIChzZWxmLT5wcml2LT5hZGRyZXNzKTsKLSAgICAgIHNlbGYtPnByaXYtPmFkZHJlc3MgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGlmIChzZWxmLT5wcml2LT5hZGRyZXNzID09IE5VTEwpCi0gICAgICAgIHNlbGYtPnByaXYtPmFkZHJlc3MgPSBnX3N0cmR1cCAoREVGQVVMVF9BRERSRVNTKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT1JUOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgICAgIHNlbGYtPnByaXYtPnBvcnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ST1VORFRSSVBfTElNSVQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICAgICAgc2VsZi0+cHJpdi0+cm91bmR0cmlwX2xpbWl0ID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgICB1cGRhdGUgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01JTklNVU1fVVBEQVRFX0lOVEVSVkFMOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgICAgIHNlbGYtPnByaXYtPm1pbmltdW1fdXBkYXRlX2ludGVydmFsID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgICB1cGRhdGUgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JVUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICAgICBpZiAoc2VsZi0+cHJpdi0+YnVzKQotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzZWxmLT5wcml2LT5idXMpOwotICAgICAgc2VsZi0+cHJpdi0+YnVzID0gZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgICB1cGRhdGUgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBU0VfVElNRTp7Ci0gICAgICBHc3RDbG9jayAqY2xvY2s7Ci0KLSAgICAgIHNlbGYtPnByaXYtPmJhc2VfdGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLSAgICAgIHNlbGYtPnByaXYtPmludGVybmFsX2Jhc2VfdGltZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAodXBkYXRlICYmIHNlbGYtPnByaXYtPmludGVybmFsX2Nsb2NrKSB7Ci0gICAgR0xpc3QgKmw7Ci0KLSAgICBHX0xPQ0sgKGNsb2Nrc19sb2NrKTsKLSAgICBmb3IgKGwgPSBjbG9ja3M7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICBDbG9ja0NhY2hlICpjYWNoZSA9IGwtPmRhdGE7Ci0KLSAgICAgIGlmIChjYWNoZS0+Y2xvY2sgPT0gc2VsZi0+cHJpdi0+aW50ZXJuYWxfY2xvY2spIHsKLSAgICAgICAgdXBkYXRlX2Nsb2NrX2NhY2hlIChjYWNoZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIEdfVU5MT0NLIChjbG9ja3NfbG9jayk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3ROZXRDbGllbnRDbG9jayAqc2VsZiA9IEdTVF9ORVRfQ0xJRU5UX0NMT0NLIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9BRERSRVNTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNlbGYtPnByaXYtPmFkZHJlc3MpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BPUlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzZWxmLT5wcml2LT5wb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ST1VORFRSSVBfTElNSVQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgc2VsZi0+cHJpdi0+cm91bmR0cmlwX2xpbWl0KTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NSU5JTVVNX1VQREFURV9JTlRFUlZBTDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBzZWxmLT5wcml2LT5taW5pbXVtX3VwZGF0ZV9pbnRlcnZhbCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQlVTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHNlbGYtPnByaXYtPmJ1cyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFTRV9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgc2VsZi0+cHJpdi0+YmFzZV90aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTlRFUk5BTF9DTE9DSzoKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHNlbGYtPnByaXYtPmludGVybmFsX2Nsb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uZXRfY2xpZW50X2Nsb2NrX3N5bmNlZF9jYiAoR3N0Q2xvY2sgKiBpbnRlcm5hbF9jbG9jaywgZ2Jvb2xlYW4gc3luY2VkLAotICAgIEdzdENsb2NrICogc2VsZikKLXsKLSAgZ3N0X2Nsb2NrX3NldF9zeW5jZWQgKHNlbGYsIHN5bmNlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X2NsaWVudF9jbG9ja19jb25zdHJ1Y3RlZCAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TmV0Q2xpZW50Q2xvY2sgKnNlbGYgPSBHU1RfTkVUX0NMSUVOVF9DTE9DSyAob2JqZWN0KTsKLSAgR3N0Q2xvY2sgKmludGVybmFsX2Nsb2NrOwotICBHTGlzdCAqbDsKLSAgQ2xvY2tDYWNoZSAqY2FjaGUgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfbmV0X2NsaWVudF9jbG9ja19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKLQotICBHX0xPQ0sgKGNsb2Nrc19sb2NrKTsKLSAgZm9yIChsID0gY2xvY2tzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIENsb2NrQ2FjaGUgKnRtcCA9IGwtPmRhdGE7Ci0gICAgR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9jayAqaW50ZXJuYWxfY2xvY2sgPQotICAgICAgICBHU1RfTkVUX0NMSUVOVF9JTlRFUk5BTF9DTE9DSyAodG1wLT5jbG9jayk7Ci0KLSAgICBpZiAoc3RyY21wIChpbnRlcm5hbF9jbG9jay0+YWRkcmVzcywgc2VsZi0+cHJpdi0+YWRkcmVzcykgPT0gMCAmJgotICAgICAgICBpbnRlcm5hbF9jbG9jay0+cG9ydCA9PSBzZWxmLT5wcml2LT5wb3J0KSB7Ci0gICAgICBjYWNoZSA9IHRtcDsKLQotICAgICAgaWYgKGNhY2hlLT5yZW1vdmVfaWQpIHsKLSAgICAgICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGNhY2hlLT5yZW1vdmVfaWQpOwotICAgICAgICBjYWNoZS0+cmVtb3ZlX2lkID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmICghY2FjaGUpIHsKLSAgICBjYWNoZSA9IGdfbmV3MCAoQ2xvY2tDYWNoZSwgMSk7Ci0KLSAgICBjYWNoZS0+Y2xvY2sgPQotICAgICAgICBnX29iamVjdF9uZXcgKEdTVF9UWVBFX05FVF9DTElFTlRfSU5URVJOQUxfQ0xPQ0ssICJhZGRyZXNzIiwKLSAgICAgICAgc2VsZi0+cHJpdi0+YWRkcmVzcywgInBvcnQiLCBzZWxmLT5wcml2LT5wb3J0LCAiaXMtbnRwIiwKLSAgICAgICAgc2VsZi0+cHJpdi0+aXNfbnRwLCBOVUxMKTsKLSAgICBjbG9ja3MgPSBnX2xpc3RfcHJlcGVuZCAoY2xvY2tzLCBjYWNoZSk7Ci0KLSAgICAvKiBOb3QgYWN0dWFsbHkgbGVha2VkIGJ1dCBpcyBjYWNoZWQgZm9yIGEgd2hpbGUgYmVmb3JlIGJlaW5nIGRpc3Bvc2VkLAotICAgICAqIHNlZSBnc3RfbmV0X2NsaWVudF9jbG9ja19maW5hbGl6ZSwgc28gcHJldGVuZCBpdCBpcyB0byBub3QgY29uZnVzZQotICAgICAqIHRlc3RzLiAqLwotICAgIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGNhY2hlLT5jbG9jaywgR1NUX09CSkVDVF9GTEFHX01BWV9CRV9MRUFLRUQpOwotICB9Ci0KLSAgY2FjaGUtPmNsb2NrcyA9IGdfbGlzdF9wcmVwZW5kIChjYWNoZS0+Y2xvY2tzLCBzZWxmKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGNhY2hlLT5jbG9jayk7Ci0gIGlmIChnc3RfY2xvY2tfaXNfc3luY2VkIChjYWNoZS0+Y2xvY2spKQotICAgIGdzdF9jbG9ja19zZXRfc3luY2VkIChHU1RfQ0xPQ0sgKHNlbGYpLCBUUlVFKTsKLSAgc2VsZi0+cHJpdi0+c3luY2VkX2lkID0KLSAgICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGNhY2hlLT5jbG9jaywgInN5bmNlZCIsCi0gICAgICBHX0NBTExCQUNLIChnc3RfbmV0X2NsaWVudF9jbG9ja19zeW5jZWRfY2IpLCBzZWxmKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGNhY2hlLT5jbG9jayk7Ci0KLSAgR19VTkxPQ0sgKGNsb2Nrc19sb2NrKTsKLQotICBzZWxmLT5wcml2LT5pbnRlcm5hbF9jbG9jayA9IGludGVybmFsX2Nsb2NrID0gY2FjaGUtPmNsb2NrOwotCi0gIC8qIGFsbCBzeXN0ZW1zIGdvLCBjYXAnbiAqLwotfQotCi1zdGF0aWMgR3N0Q2xvY2tUaW1lCi1nc3RfbmV0X2NsaWVudF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoR3N0Q2xvY2sgKiBjbG9jaykKLXsKLSAgR3N0TmV0Q2xpZW50Q2xvY2sgKnNlbGYgPSBHU1RfTkVUX0NMSUVOVF9DTE9DSyAoY2xvY2spOwotCi0gIGlmICghZ3N0X2Nsb2NrX2lzX3N5bmNlZCAoc2VsZi0+cHJpdi0+aW50ZXJuYWxfY2xvY2spKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIG5vdyA9IGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoc2VsZi0+cHJpdi0+aW50ZXJuYWxfY2xvY2spOwotICAgIHJldHVybiBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKHNlbGYtPnByaXYtPmludGVybmFsX2Nsb2NrLCBub3csCi0gICAgICAgIHNlbGYtPnByaXYtPmludGVybmFsX2Jhc2VfdGltZSwgc2VsZi0+cHJpdi0+YmFzZV90aW1lLCAxLCAxKTsKLSAgfQotCi0gIHJldHVybiBnc3RfY2xvY2tfZ2V0X3RpbWUgKHNlbGYtPnByaXYtPmludGVybmFsX2Nsb2NrKTsKLX0KLQotLyoqCi0gKiBnc3RfbmV0X2NsaWVudF9jbG9ja19uZXc6Ci0gKiBAbmFtZTogYSBuYW1lIGZvciB0aGUgY2xvY2sKLSAqIEByZW1vdGVfYWRkcmVzczogdGhlIGFkZHJlc3Mgb3IgaG9zdG5hbWUgb2YgdGhlIHJlbW90ZSBjbG9jayBwcm92aWRlcgotICogQHJlbW90ZV9wb3J0OiB0aGUgcG9ydCBvZiB0aGUgcmVtb3RlIGNsb2NrIHByb3ZpZGVyCi0gKiBAYmFzZV90aW1lOiBpbml0aWFsIHRpbWUgb2YgdGhlIGNsb2NrCi0gKgotICogQ3JlYXRlIGEgbmV3ICNHc3ROZXRDbGllbnRJbnRlcm5hbENsb2NrIHRoYXQgd2lsbCByZXBvcnQgdGhlIHRpbWUKLSAqIHByb3ZpZGVkIGJ5IHRoZSAjR3N0TmV0VGltZVByb3ZpZGVyIG9uIEByZW1vdGVfYWRkcmVzcyBhbmQgCi0gKiBAcmVtb3RlX3BvcnQuCi0gKgotICogUmV0dXJuczogYSBuZXcgI0dzdENsb2NrIHRoYXQgcmVjZWl2ZXMgYSB0aW1lIGZyb20gdGhlIHJlbW90ZQotICogY2xvY2suCi0gKi8KLUdzdENsb2NrICoKLWdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyAoY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBnY2hhciAqIHJlbW90ZV9hZGRyZXNzLAotICAgIGdpbnQgcmVtb3RlX3BvcnQsIEdzdENsb2NrVGltZSBiYXNlX3RpbWUpCi17Ci0gIEdzdENsb2NrICpyZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlbW90ZV9hZGRyZXNzICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVtb3RlX3BvcnQgPiAwLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlbW90ZV9wb3J0IDw9IEdfTUFYVUlOVDE2LCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJhc2VfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FLCBOVUxMKTsKLQotICByZXQgPQotICAgICAgZ19vYmplY3RfbmV3IChHU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLLCAibmFtZSIsIG5hbWUsICJhZGRyZXNzIiwKLSAgICAgIHJlbW90ZV9hZGRyZXNzLCAicG9ydCIsIHJlbW90ZV9wb3J0LCAiYmFzZS10aW1lIiwgYmFzZV90aW1lLCBOVUxMKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1HX0RFRklORV9UWVBFIChHc3ROdHBDbG9jaywgZ3N0X250cF9jbG9jaywgR1NUX1RZUEVfTkVUX0NMSUVOVF9DTE9DSyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbnRwX2Nsb2NrX2NsYXNzX2luaXQgKEdzdE50cENsb2NrQ2xhc3MgKiBrbGFzcykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9udHBfY2xvY2tfaW5pdCAoR3N0TnRwQ2xvY2sgKiBzZWxmKQotewotICBHU1RfTkVUX0NMSUVOVF9DTE9DSyAoc2VsZiktPnByaXYtPmlzX250cCA9IFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X250cF9jbG9ja19uZXc6Ci0gKiBAbmFtZTogYSBuYW1lIGZvciB0aGUgY2xvY2sKLSAqIEByZW1vdGVfYWRkcmVzczogdGhlIGFkZHJlc3Mgb3IgaG9zdG5hbWUgb2YgdGhlIHJlbW90ZSBjbG9jayBwcm92aWRlcgotICogQHJlbW90ZV9wb3J0OiB0aGUgcG9ydCBvZiB0aGUgcmVtb3RlIGNsb2NrIHByb3ZpZGVyCi0gKiBAYmFzZV90aW1lOiBpbml0aWFsIHRpbWUgb2YgdGhlIGNsb2NrCi0gKgotICogQ3JlYXRlIGEgbmV3ICNHc3ROdHBDbG9jayB0aGF0IHdpbGwgcmVwb3J0IHRoZSB0aW1lIHByb3ZpZGVkIGJ5Ci0gKiB0aGUgTlRQdjQgc2VydmVyIG9uIEByZW1vdGVfYWRkcmVzcyBhbmQgQHJlbW90ZV9wb3J0LgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNHc3RDbG9jayB0aGF0IHJlY2VpdmVzIGEgdGltZSBmcm9tIHRoZSByZW1vdGUKLSAqIGNsb2NrLgotICoKLSAqIFNpbmNlOiAxLjYKLSAqLwotR3N0Q2xvY2sgKgotZ3N0X250cF9jbG9ja19uZXcgKGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgZ2NoYXIgKiByZW1vdGVfYWRkcmVzcywKLSAgICBnaW50IHJlbW90ZV9wb3J0LCBHc3RDbG9ja1RpbWUgYmFzZV90aW1lKQotewotICBHc3RDbG9jayAqcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZW1vdGVfYWRkcmVzcyAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlbW90ZV9wb3J0ID4gMCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZW1vdGVfcG9ydCA8PSBHX01BWFVJTlQxNiwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChiYXNlX3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSwgTlVMTCk7Ci0KLSAgcmV0ID0KLSAgICAgIGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfTlRQX0NMT0NLLCAibmFtZSIsIG5hbWUsICJhZGRyZXNzIiwgcmVtb3RlX2FkZHJlc3MsCi0gICAgICAicG9ydCIsIHJlbW90ZV9wb3J0LCAiYmFzZS10aW1lIiwgYmFzZV90aW1lLCBOVUxMKTsKLQotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmggYi9saWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc4NTBmNS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBnc3RuZXRjbGllbnRjbG9jay5oOiBjbG9jayB0aGF0IHN5bmNocm9uaXplcyBpdHNlbGYgdG8gYSB0aW1lIHByb3ZpZGVyIG92ZXIKLSAqIHRoZSBuZXR3b3JrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX05FVF9DTElFTlRfQ0xPQ0tfSF9fCi0jZGVmaW5lIF9fR1NUX05FVF9DTElFTlRfQ0xPQ0tfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHN5c3RlbWNsb2NrLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9ORVRfQ0xJRU5UX0NMT0NLIFwKLSAgKGdzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9ORVRfQ0xJRU5UX0NMT0NLKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTkVUX0NMSUVOVF9DTE9DSyxHc3ROZXRDbGllbnRDbG9jaykpCi0jZGVmaW5lIEdTVF9ORVRfQ0xJRU5UX0NMT0NLX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX05FVF9DTElFTlRfQ0xPQ0ssR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19ORVRfQ0xJRU5UX0NMT0NLKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfTkVUX0NMSUVOVF9DTE9DSykpCi0jZGVmaW5lIEdTVF9JU19ORVRfQ0xJRU5UX0NMT0NLX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX05FVF9DTElFTlRfQ0xPQ0spKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0TmV0Q2xpZW50Q2xvY2sgR3N0TmV0Q2xpZW50Q2xvY2s7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyBHc3ROZXRDbGllbnRDbG9ja0NsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE5ldENsaWVudENsb2NrUHJpdmF0ZSBHc3ROZXRDbGllbnRDbG9ja1ByaXZhdGU7Ci0KLS8qKgotICogR3N0TmV0Q2xpZW50Q2xvY2s6Ci0gKgotICogT3BhcXVlICNHc3ROZXRDbGllbnRDbG9jayBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0TmV0Q2xpZW50Q2xvY2sgewotICBHc3RTeXN0ZW1DbG9jayBjbG9jazsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0TmV0Q2xpZW50Q2xvY2tQcml2YXRlICpwcml2OwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RydWN0IF9Hc3ROZXRDbGllbnRDbG9ja0NsYXNzIHsKLSAgR3N0U3lzdGVtQ2xvY2tDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotR1R5cGUgICAgICAgICAgIGdzdF9uZXRfY2xpZW50X2Nsb2NrX2dldF90eXBlCSh2b2lkKTsKLQotR3N0Q2xvY2sqCWdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldwkoY29uc3QgZ2NoYXIgKm5hbWUsIGNvbnN0IGdjaGFyICpyZW1vdGVfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHJlbW90ZV9wb3J0LCBHc3RDbG9ja1RpbWUgYmFzZV90aW1lKTsKLQotI2RlZmluZSBHU1RfVFlQRV9OVFBfQ0xPQ0sgXAotICAoZ3N0X250cF9jbG9ja19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfTlRQX0NMT0NLKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTlRQX0NMT0NLLEdzdE50cENsb2NrKSkKLSNkZWZpbmUgR1NUX05UUF9DTE9DS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9OVFBfQ0xPQ0ssR3N0TnRwQ2xvY2tDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19OVFBfQ0xPQ0sob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9OVFBfQ0xPQ0spKQotI2RlZmluZSBHU1RfSVNfTlRQX0NMT0NLX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX05UUF9DTE9DSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3ROZXRDbGllbnRDbG9jayBHc3ROdHBDbG9jazsKLXR5cGVkZWYgc3RydWN0IF9Hc3ROZXRDbGllbnRDbG9ja0NsYXNzIEdzdE50cENsb2NrQ2xhc3M7Ci0KLUdUeXBlICAgICAgICAgICBnc3RfbnRwX2Nsb2NrX2dldF90eXBlCSAgICAgICAgKHZvaWQpOwotR3N0Q2xvY2sqCWdzdF9udHBfY2xvY2tfbmV3CSAgICAgICAgKGNvbnN0IGdjaGFyICpuYW1lLCBjb25zdCBnY2hhciAqcmVtb3RlX2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCByZW1vdGVfcG9ydCwgR3N0Q2xvY2tUaW1lIGJhc2VfdGltZSk7Ci0KLSNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQwotR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMoR3N0TmV0Q2xpZW50Q2xvY2ssIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3ROdHBDbG9jaywgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTkVUX0NMSUVOVF9DTE9DS19IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuYyBiL2xpYnMvZ3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY5YjgwOC4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9uZXQvZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDE0PiBXaWxsaWFtIE1hbmxleSA8d2lsbEB3aWxsaWFtbWFubGV5Lm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046Z3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IE5ldHdvcmsgQ29udHJvbCBNZXNzYWdlIE1ldGEKLSAqCi0gKiAjR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGNvbnRyb2wgbWVzc2FnZXMgKGFuY2lsbGFyeQotICogZGF0YSkgd2hpY2ggd2FzIHJlY2VpdmVkIHdpdGggb3IgaXMgdG8gYmUgc2VudCBhbG9uZ3NpZGUgdGhlIGJ1ZmZlciBkYXRhLgotICogV2hlbiB1c2VkIHdpdGggc29ja2V0IHNpbmtzIGFuZCBzb3VyY2VzIHdoaWNoIHVuZGVyc3RhbmQgdGhpcyBtZXRhIGl0IGFsbG93cwotICogc2VuZGluZyBhbmQgcmVjZWl2aW5nIGFuY2lsbGFyeSBkYXRhIHN1Y2ggYXMgdW5peCBjcmVkZW50aWFscyAoU2VlCi0gKiAjR1VuaXhDcmVkZW50aWFsc01lc3NhZ2UpIGFuZCBVbml4IGZpbGUgZGVzY3JpcHRpb25zIChTZWUgI0dVbml4RkRNZXNzYWdlKS4KLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuaCIKLQotc3RhdGljIGdib29sZWFuCi1uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfaW5pdCAoR3N0TWV0YSAqIG1ldGEsIGdwb2ludGVyIHBhcmFtcywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSAqbm1ldGEgPSAoR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhICopIG1ldGE7Ci0KLSAgbm1ldGEtPm1lc3NhZ2UgPSBOVUxMOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW5ldF9jb250cm9sX21lc3NhZ2VfbWV0YV90cmFuc2Zvcm0gKEdzdEJ1ZmZlciAqIHRyYW5zYnVmLCBHc3RNZXRhICogbWV0YSwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIsIEdRdWFyayB0eXBlLCBncG9pbnRlciBkYXRhKQotewotICBHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEgKnNtZXRhLCAqZG1ldGE7Ci0gIHNtZXRhID0gKEdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSAqKSBtZXRhOwotCi0gIC8qIHdlIGFsd2F5cyBjb3B5IG5vIG1hdHRlciB3aGF0IHRyYW5zZm9ybSAqLwotICBkbWV0YSA9IGdzdF9idWZmZXJfYWRkX25ldF9jb250cm9sX21lc3NhZ2VfbWV0YSAodHJhbnNidWYsIHNtZXRhLT5tZXNzYWdlKTsKLSAgaWYgKCFkbWV0YSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfZnJlZSAoR3N0TWV0YSAqIG1ldGEsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhICpubWV0YSA9IChHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEgKikgbWV0YTsKLQotICBpZiAobm1ldGEtPm1lc3NhZ2UpCi0gICAgZ19vYmplY3RfdW5yZWYgKG5tZXRhLT5tZXNzYWdlKTsKLSAgbm1ldGEtPm1lc3NhZ2UgPSBOVUxMOwotfQotCi1HVHlwZQotZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9hcGlfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBHVHlwZSB0eXBlOwotICBzdGF0aWMgY29uc3QgZ2NoYXIgKnRhZ3NbXSA9IHsgIm9yaWdpbiIsIE5VTEwgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZ0eXBlKSkgewotICAgIEdUeXBlIF90eXBlID0KLSAgICAgICAgZ3N0X21ldGFfYXBpX3R5cGVfcmVnaXN0ZXIgKCJHc3ROZXRDb250cm9sTWVzc2FnZU1ldGFBUEkiLCB0YWdzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnR5cGUsIF90eXBlKTsKLSAgfQotICByZXR1cm4gdHlwZTsKLX0KLQotY29uc3QgR3N0TWV0YUluZm8gKgotZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9nZXRfaW5mbyAodm9pZCkKLXsKLSAgc3RhdGljIGNvbnN0IEdzdE1ldGFJbmZvICptZXRhX2luZm8gPSBOVUxMOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJm1ldGFfaW5mbykpIHsKLSAgICBjb25zdCBHc3RNZXRhSW5mbyAqbWkgPQotICAgICAgICBnc3RfbWV0YV9yZWdpc3RlciAoR1NUX05FVF9DT05UUk9MX01FU1NBR0VfTUVUQV9BUElfVFlQRSwKLSAgICAgICAgIkdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSIsCi0gICAgICAgIHNpemVvZiAoR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhKSwKLSAgICAgICAgbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhX2luaXQsCi0gICAgICAgIG5ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9mcmVlLAotICAgICAgICBuZXRfY29udHJvbF9tZXNzYWdlX21ldGFfdHJhbnNmb3JtKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJm1ldGFfaW5mbywgbWkpOwotICB9Ci0gIHJldHVybiBtZXRhX2luZm87Ci19Ci0KLS8qKgotICogZ3N0X2J1ZmZlcl9hZGRfbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhOgotICogQGJ1ZmZlcjogYSAjR3N0QnVmZmVyCi0gKiBAbWVzc2FnZTogYSBAR1NvY2tldENvbnRyb2xNZXNzYWdlIHRvIGF0dGFjaCB0byBAYnVmZmVyCi0gKgotICogQXR0YWNoZXMgQG1lc3NhZ2UgYXMgbWV0YWRhdGEgaW4gYSAjR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhIHRvIEBidWZmZXIuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEgY29ubmVjdGVkIHRvIEBidWZmZXIKLSAqLwotR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhICoKLWdzdF9idWZmZXJfYWRkX25ldF9jb250cm9sX21lc3NhZ2VfbWV0YSAoR3N0QnVmZmVyICogYnVmZmVyLAotICAgIEdTb2NrZXRDb250cm9sTWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci0gIEdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YSAqbWV0YTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NPQ0tFVF9DT05UUk9MX01FU1NBR0UgKG1lc3NhZ2UpLCBOVUxMKTsKLQotICBtZXRhID0KLSAgICAgIChHc3ROZXRDb250cm9sTWVzc2FnZU1ldGEgKikgZ3N0X2J1ZmZlcl9hZGRfbWV0YSAoYnVmZmVyLAotICAgICAgR1NUX05FVF9DT05UUk9MX01FU1NBR0VfTUVUQV9JTkZPLCBOVUxMKTsKLQotICBtZXRhLT5tZXNzYWdlID0gZ19vYmplY3RfcmVmIChtZXNzYWdlKTsKLQotICByZXR1cm4gbWV0YTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuaCBiL2xpYnMvZ3N0L25ldC9nc3RuZXRjb250cm9sbWVzc2FnZW1ldGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMzYjk2NS4uMDAwMDAwMAotLS0gYS9saWJzL2dzdC9uZXQvZ3N0bmV0Y29udHJvbG1lc3NhZ2VtZXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMTQ+IFdpbGxpYW0gTWFubGV5IDx3aWxsQHdpbGxpYW1tYW5sZXkubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfTkVUX0NPTlRST0xfTUVTU0FHRV9NRVRBX0hfXwotI2RlZmluZSBfX0dTVF9ORVRfQ09OVFJPTF9NRVNTQUdFX01FVEFfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEgR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhOwotCi0vKioKLSAqIEdzdE5ldENvbnRyb2xNZXNzYWdlTWV0YToKLSAqIEBtZXRhOiB0aGUgcGFyZW50IHR5cGUKLSAqIEBtZXNzYWdlOiBhICNHU29ja2V0Q29udHJvbE1lc3NhZ2Ugc3RvcmVkIGFzIG1ldGFkYXRhCi0gKgotICogQnVmZmVyIG1ldGFkYXRhIGZvciBHU29ja2V0IGNvbnRyb2wgbWVzc2FnZXMsIEFLQSBhbmNpbGxhcnkgZGF0YSBhdHRhY2hlZCB0bwotICogZGF0YSBzZW50IGFjcm9zcyBhIHNvY2tldC4KLSAqLwotc3RydWN0IF9Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEgewotICBHc3RNZXRhICAgICAgIG1ldGE7Ci0KLSAgR1NvY2tldENvbnRyb2xNZXNzYWdlICptZXNzYWdlOwotfTsKLQotR1R5cGUgZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9hcGlfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfTkVUX0NPTlRST0xfTUVTU0FHRV9NRVRBX0FQSV9UWVBFIFwKLSAgKGdzdF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfYXBpX2dldF90eXBlKCkpCi0KLSNkZWZpbmUgZ3N0X2J1ZmZlcl9nZXRfbmV0X2NvbnRyb2xfbWVzc2FnZV9tZXRhKGIpICgoR3N0TmV0Q29udHJvbE1lc3NhZ2VNZXRhKilcCi0gIGdzdF9idWZmZXJfZ2V0X21ldGEoKGIpLEdTVF9ORVRfQ09OVFJPTF9NRVNTQUdFX01FVEFfQVBJX1RZUEUpKQotCi0vKiBpbXBsZW1lbnRhdGlvbiAqLwotY29uc3QgR3N0TWV0YUluZm8gKmdzdF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfZ2V0X2luZm8gKHZvaWQpOwotI2RlZmluZSBHU1RfTkVUX0NPTlRST0xfTUVTU0FHRV9NRVRBX0lORk8gXAotICAoZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9nZXRfaW5mbygpKQotCi1Hc3ROZXRDb250cm9sTWVzc2FnZU1ldGEgKiBnc3RfYnVmZmVyX2FkZF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGEgKEdzdEJ1ZmZlciAgICAgICAgICAgICAqIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NvY2tldENvbnRyb2xNZXNzYWdlICogbWVzc2FnZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9ORVRfQ09OVFJPTF9NRVNTQUdFX01FVEFfSF9fICovCi0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmMgYi9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTQxOTk1Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046Z3N0bmV0dGltZXBhY2tldAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBIZWxwZXIgc3RydWN0dXJlIHRvIGNvbnN0cnVjdCBjbG9jayBwYWNrZXRzIHVzZWQKLSAqICAgICAgICAgICAgICAgICAgICAgYnkgbmV0d29yayBjbG9ja3MuCi0gKiBAc2VlX2Fsc286ICNHc3RDbG9jaywgI0dzdE5ldENsaWVudENsb2NrLCAjR3N0TmV0VGltZVByb3ZpZGVyCi0gKgotICogVmFyaW91cyBmdW5jdGlvbnMgZm9yIHJlY2VpdmluZywgc2VuZGluZyBhbiBzZXJpYWxpemluZyAjR3N0TmV0VGltZVBhY2tldAotICogc3RydWN0dXJlcy4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpZmRlZiBfX0NZR1dJTl9fCi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotIyBpbmNsdWRlIDxmY250bC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RuZXR0aW1lcGFja2V0LmgiCi0KLUdfREVGSU5FX0JPWEVEX1RZUEUgKEdzdE5ldFRpbWVQYWNrZXQsIGdzdF9uZXRfdGltZV9wYWNrZXQsCi0gICAgZ3N0X25ldF90aW1lX3BhY2tldF9jb3B5LCBnc3RfbmV0X3RpbWVfcGFja2V0X2ZyZWUpOwotCi0vKioKLSAqIGdzdF9uZXRfdGltZV9wYWNrZXRfbmV3OgotICogQGJ1ZmZlcjogKGFycmF5KTogYSBidWZmZXIgZnJvbSB3aGljaCB0byBjb25zdHJ1Y3QgdGhlIHBhY2tldCwgb3IgTlVMTAotICoKLSAqIENyZWF0ZXMgYSBuZXcgI0dzdE5ldFRpbWVQYWNrZXQgZnJvbSBhIGJ1ZmZlciByZWNlaXZlZCBvdmVyIHRoZSBuZXR3b3JrLiBUaGUKLSAqIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBAYnVmZmVyIGlzIGF0IGxlYXN0Ci0gKiAjR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFIGJ5dGVzIGxvbmcuCi0gKgotICogSWYgQGJ1ZmZlciBpcyAjTlVMTCwgdGhlIGxvY2FsIGFuZCByZW1vdGUgdGltZXMgd2lsbCBiZSBzZXQgdG8KLSAqICNHU1RfQ0xPQ0tfVElNRV9OT05FLgotICoKLSAqIE1UIHNhZmUuIENhbGxlciBvd25zIHJldHVybiB2YWx1ZSAoZ3N0X25ldF90aW1lX3BhY2tldF9mcmVlIHRvIGZyZWUpLgotICoKLSAqIFJldHVybnM6IFRoZSBuZXcgI0dzdE5ldFRpbWVQYWNrZXQuCi0gKi8KLUdzdE5ldFRpbWVQYWNrZXQgKgotZ3N0X25ldF90aW1lX3BhY2tldF9uZXcgKGNvbnN0IGd1aW50OCAqIGJ1ZmZlcikKLXsKLSAgR3N0TmV0VGltZVBhY2tldCAqcmV0OwotCi0gIGdfYXNzZXJ0IChzaXplb2YgKEdzdENsb2NrVGltZSkgPT0gOCk7Ci0KLSAgcmV0ID0gZ19uZXcwIChHc3ROZXRUaW1lUGFja2V0LCAxKTsKLQotICBpZiAoYnVmZmVyKSB7Ci0gICAgcmV0LT5sb2NhbF90aW1lID0gR1NUX1JFQURfVUlOVDY0X0JFIChidWZmZXIpOwotICAgIHJldC0+cmVtb3RlX3RpbWUgPSBHU1RfUkVBRF9VSU5UNjRfQkUgKGJ1ZmZlciArIHNpemVvZiAoR3N0Q2xvY2tUaW1lKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0LT5sb2NhbF90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICByZXQtPnJlbW90ZV90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X25ldF90aW1lX3BhY2tldF9mcmVlOgotICogQHBhY2tldDogdGhlICNHc3ROZXRUaW1lUGFja2V0Ci0gKgotICogRnJlZSBAcGFja2V0LgotICovCi12b2lkCi1nc3RfbmV0X3RpbWVfcGFja2V0X2ZyZWUgKEdzdE5ldFRpbWVQYWNrZXQgKiBwYWNrZXQpCi17Ci0gIGdfZnJlZSAocGFja2V0KTsKLX0KLQotLyoqCi0gKiBnc3RfbmV0X3RpbWVfcGFja2V0X2NvcHk6Ci0gKiBAcGFja2V0OiB0aGUgI0dzdE5ldFRpbWVQYWNrZXQKLSAqCi0gKiBNYWtlIGEgY29weSBvZiBAcGFja2V0LgotICoKLSAqIFJldHVybnM6IGEgY29weSBvZiBAcGFja2V0LCBmcmVlIHdpdGggZ3N0X25ldF90aW1lX3BhY2tldF9mcmVlKCkuCi0gKi8KLUdzdE5ldFRpbWVQYWNrZXQgKgotZ3N0X25ldF90aW1lX3BhY2tldF9jb3B5IChjb25zdCBHc3ROZXRUaW1lUGFja2V0ICogcGFja2V0KQotewotICBHc3ROZXRUaW1lUGFja2V0ICpyZXQ7Ci0KLSAgcmV0ID0gZ19uZXcwIChHc3ROZXRUaW1lUGFja2V0LCAxKTsKLSAgcmV0LT5sb2NhbF90aW1lID0gcGFja2V0LT5sb2NhbF90aW1lOwotICByZXQtPnJlbW90ZV90aW1lID0gcGFja2V0LT5yZW1vdGVfdGltZTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplOgotICogQHBhY2tldDogdGhlICNHc3ROZXRUaW1lUGFja2V0Ci0gKgotICogU2VyaWFsaXplZCBhICNHc3ROZXRUaW1lUGFja2V0IGludG8gYSBuZXdseS1hbGxvY2F0ZWQgc2VxdWVuY2Ugb2YKLSAqICNHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUgYnl0ZXMsIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4gVGhlIHZhbHVlIHJldHVybmVkIGlzCi0gKiBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byB3cml0ZSgyKSBvciBzZW5kdG8oMikgZm9yIGNvbW11bmljYXRpb24gb3ZlciB0aGUKLSAqIG5ldHdvcmsuCi0gKgotICogTVQgc2FmZS4gQ2FsbGVyIG93bnMgcmV0dXJuIHZhbHVlIChnX2ZyZWUgdG8gZnJlZSkuCi0gKgotICogUmV0dXJuczogQSBuZXdseSBhbGxvY2F0ZWQgc2VxdWVuY2Ugb2YgI0dTVF9ORVRfVElNRV9QQUNLRVRfU0laRSBieXRlcy4KLSAqLwotZ3VpbnQ4ICoKLWdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplIChjb25zdCBHc3ROZXRUaW1lUGFja2V0ICogcGFja2V0KQotewotICBndWludDggKnJldDsKLQotICBnX2Fzc2VydCAoc2l6ZW9mIChHc3RDbG9ja1RpbWUpID09IDgpOwotCi0gIHJldCA9IGdfbmV3MCAoZ3VpbnQ4LCBHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUpOwotCi0gIEdTVF9XUklURV9VSU5UNjRfQkUgKHJldCwgcGFja2V0LT5sb2NhbF90aW1lKTsKLSAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAocmV0ICsgc2l6ZW9mIChHc3RDbG9ja1RpbWUpLCBwYWNrZXQtPnJlbW90ZV90aW1lKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9uZXRfdGltZV9wYWNrZXRfcmVjZWl2ZToKLSAqIEBzb2NrZXQ6IHNvY2tldCB0byByZWNlaXZlIHRoZSB0aW1lIHBhY2tldCBvbgotICogQHNyY19hZGRyZXNzOiAob3V0KTogYWRkcmVzcyBvZiB2YXJpYWJsZSB0byByZXR1cm4gc2VuZGVyIGFkZHJlc3MKLSAqIEBlcnJvcjogcmV0dXJuIGFkZHJlc3MgZm9yIGEgI0dFcnJvciwgb3IgTlVMTAotICoKLSAqIFJlY2VpdmVzIGEgI0dzdE5ldFRpbWVQYWNrZXQgb3ZlciBhIHNvY2tldC4gSGFuZGxlcyBpbnRlcnJ1cHRlZCBzeXN0ZW0KLSAqIGNhbGxzLCBidXQgb3RoZXJ3aXNlIHJldHVybnMgTlVMTCBvbiBlcnJvci4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3ROZXRUaW1lUGFja2V0LCBvciBOVUxMIG9uIGVycm9yLiBGcmVlCi0gKiAgICB3aXRoIGdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZSgpIHdoZW4gZG9uZS4KLSAqLwotR3N0TmV0VGltZVBhY2tldCAqCi1nc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmUgKEdTb2NrZXQgKiBzb2NrZXQsCi0gICAgR1NvY2tldEFkZHJlc3MgKiogc3JjX2FkZHJlc3MsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgZ2NoYXIgYnVmZmVyW0dTVF9ORVRfVElNRV9QQUNLRVRfU0laRV07Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgZ3NzaXplIHJldDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19TT0NLRVQgKHNvY2tldCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVycm9yID09IE5VTEwgfHwgKmVycm9yID09IE5VTEwsIEZBTFNFKTsKLQotICB3aGlsZSAoVFJVRSkgewotICAgIHJldCA9IGdfc29ja2V0X3JlY2VpdmVfZnJvbSAoc29ja2V0LCBzcmNfYWRkcmVzcywgYnVmZmVyLAotICAgICAgICBHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUsIE5VTEwsICZlcnIpOwotCi0gICAgaWYgKHJldCA8IDApIHsKLSAgICAgIGlmIChlcnItPmNvZGUgPT0gR19JT19FUlJPUl9XT1VMRF9CTE9DSykgewotICAgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgICAgIGVyciA9IE5VTEw7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ290byByZWNlaXZlX2Vycm9yOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAocmV0IDwgR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFKSB7Ci0gICAgICBnb3RvIHNob3J0X3BhY2tldDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGdzdF9uZXRfdGltZV9wYWNrZXRfbmV3ICgoY29uc3QgZ3VpbnQ4ICopIGJ1ZmZlcik7Ci0gICAgfQotICB9Ci0KLXJlY2VpdmVfZXJyb3I6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJyZWNlaXZlIGVycm9yOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9yLCBlcnIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1zaG9ydF9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJzb21lb25lIHNlbnQgdXMgYSBzaG9ydCBwYWNrZXQgKCUiIEdfR1NTSVpFX0ZPUk1BVCAiIDwgJWQpIiwKLSAgICAgICAgcmV0LCBHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUpOwotICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9JTlZBTElEX0RBVEEsCi0gICAgICAgICJzaG9ydCB0aW1lIHBhY2tldCAoJWQgPCAlZCkiLCAoaW50KSByZXQsIEdTVF9ORVRfVElNRV9QQUNLRVRfU0laRSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQ6Ci0gKiBAcGFja2V0OiB0aGUgI0dzdE5ldFRpbWVQYWNrZXQgdG8gc2VuZAotICogQHNvY2tldDogc29ja2V0IHRvIHNlbmQgdGhlIHRpbWUgcGFja2V0IG9uCi0gKiBAZGVzdF9hZGRyZXNzOiBhZGRyZXNzIHRvIHNlbmQgdGhlIHRpbWUgcGFja2V0IHRvCi0gKiBAZXJyb3I6IHJldHVybiBhZGRyZXNzIGZvciBhICNHRXJyb3IsIG9yIE5VTEwKLSAqCi0gKiBTZW5kcyBhICNHc3ROZXRUaW1lUGFja2V0IG92ZXIgYSBzb2NrZXQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBUUlVFIGlmIHN1Y2Nlc3NmdWwsIEZBTFNFIGluIGNhc2UgYW4gZXJyb3Igb2NjdXJyZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfbmV0X3RpbWVfcGFja2V0X3NlbmQgKGNvbnN0IEdzdE5ldFRpbWVQYWNrZXQgKiBwYWNrZXQsCi0gICAgR1NvY2tldCAqIHNvY2tldCwgR1NvY2tldEFkZHJlc3MgKiBkZXN0X2FkZHJlc3MsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgZ2Jvb2xlYW4gd2FzX2Jsb2NraW5nOwotICBndWludDggKmJ1ZmZlcjsKLSAgZ3NzaXplIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFja2V0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU09DS0VUIChzb2NrZXQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NPQ0tFVF9BRERSRVNTIChkZXN0X2FkZHJlc3MpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlcnJvciA9PSBOVUxMIHx8ICplcnJvciA9PSBOVUxMLCBGQUxTRSk7Ci0KLSAgd2FzX2Jsb2NraW5nID0gZ19zb2NrZXRfZ2V0X2Jsb2NraW5nIChzb2NrZXQpOwotCi0gIGlmICh3YXNfYmxvY2tpbmcpCi0gICAgZ19zb2NrZXRfc2V0X2Jsb2NraW5nIChzb2NrZXQsIEZBTFNFKTsKLQotICAvKiBGSVhNRTogYXZvaWQgcG9pbnRsZXNzIGFsbG9jL2ZyZWUsIHNlcmlhbGlzZSBpbnRvIHN0YWNrLWFsbG9jYXRlZCBidWZmZXIgKi8KLSAgYnVmZmVyID0gZ3N0X25ldF90aW1lX3BhY2tldF9zZXJpYWxpemUgKHBhY2tldCk7Ci0KLSAgcmVzID0gZ19zb2NrZXRfc2VuZF90byAoc29ja2V0LCBkZXN0X2FkZHJlc3MsIChjb25zdCBnY2hhciAqKSBidWZmZXIsCi0gICAgICBHU1RfTkVUX1RJTUVfUEFDS0VUX1NJWkUsIE5VTEwsIGVycm9yKTsKLQotICAvKiBkYXRhZ3JhbSBwYWNrZXRzIHNob3VsZCBiZSBzZW50IGFzIGEgd2hvbGUgb3Igbm90IGF0IGFsbCAqLwotICBnX2Fzc2VydCAocmVzIDwgMCB8fCByZXMgPT0gR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFKTsKLQotICBnX2ZyZWUgKGJ1ZmZlcik7Ci0KLSAgaWYgKHdhc19ibG9ja2luZykKLSAgICBnX3NvY2tldF9zZXRfYmxvY2tpbmcgKHNvY2tldCwgVFJVRSk7Ci0KLSAgcmV0dXJuIChyZXMgPT0gR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmggYi9saWJzL2dzdC9uZXQvZ3N0bmV0dGltZXBhY2tldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2NmMTkxLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcGFja2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX05FVF9USU1FX1BBQ0tFVF9IX18KLSNkZWZpbmUgX19HU1RfTkVUX1RJTUVfUEFDS0VUX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKioKLSAqIEdTVF9ORVRfVElNRV9QQUNLRVRfU0laRToKLSAqCi0gKiBUaGUgc2l6ZSBvZiB0aGUgcGFja2V0cyBzZW50IGJldHdlZW4gbmV0d29yayBjbG9ja3MuCi0gKi8KLSNkZWZpbmUgR1NUX05FVF9USU1FX1BBQ0tFVF9TSVpFIDE2Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3ROZXRUaW1lUGFja2V0IEdzdE5ldFRpbWVQYWNrZXQ7Ci0KLS8qKgotICogR3N0TmV0VGltZVBhY2tldDoKLSAqIEBsb2NhbF90aW1lOiB0aGUgbG9jYWwgdGltZSB3aGVuIHRoaXMgcGFja2V0IHdhcyBzZW50Ci0gKiBAcmVtb3RlX3RpbWU6IHRoZSByZW1vdGUgdGltZSBvYnNlcnZhdGlvbgotICoKLSAqIENvbnRlbnQgb2YgYSAjR3N0TmV0VGltZVBhY2tldC4KLSAqLwotc3RydWN0IF9Hc3ROZXRUaW1lUGFja2V0IHsKLSAgR3N0Q2xvY2tUaW1lIGxvY2FsX3RpbWU7Ci0gIEdzdENsb2NrVGltZSByZW1vdGVfdGltZTsKLX07Ci0KLUdUeXBlIGdzdF9uZXRfdGltZV9wYWNrZXRfZ2V0X3R5cGUodm9pZCk7Ci0KLUdzdE5ldFRpbWVQYWNrZXQqICAgICAgIGdzdF9uZXRfdGltZV9wYWNrZXRfbmV3ICAgICAgICAgKGNvbnN0IGd1aW50OCAqYnVmZmVyKTsKLUdzdE5ldFRpbWVQYWNrZXQqICAgICAgIGdzdF9uZXRfdGltZV9wYWNrZXRfY29weSAgICAgICAgKGNvbnN0IEdzdE5ldFRpbWVQYWNrZXQgKnBhY2tldCk7Ci12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfbmV0X3RpbWVfcGFja2V0X2ZyZWUgICAgICAgIChHc3ROZXRUaW1lUGFja2V0ICpwYWNrZXQpOwotCi1ndWludDgqICAgICAgICAgICAgICAgICBnc3RfbmV0X3RpbWVfcGFja2V0X3NlcmlhbGl6ZSAgIChjb25zdCBHc3ROZXRUaW1lUGFja2V0ICpwYWNrZXQpOwotCi1Hc3ROZXRUaW1lUGFja2V0Kglnc3RfbmV0X3RpbWVfcGFja2V0X3JlY2VpdmUgICAgIChHU29ja2V0ICAgICAgICAgKiBzb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU29ja2V0QWRkcmVzcyAqKiBzcmNfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICoqIGVycm9yKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X25ldF90aW1lX3BhY2tldF9zZW5kICAgICAgICAoY29uc3QgR3N0TmV0VGltZVBhY2tldCAqIHBhY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTb2NrZXQgICAgICAgICAgICAgICAgKiBzb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU29ja2V0QWRkcmVzcyAgICAgICAgICogZGVzdF9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICoqIGVycm9yKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3ROZXRUaW1lUGFja2V0LCBnc3RfbmV0X3RpbWVfcGFja2V0X2ZyZWUpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotCi0jZW5kaWYgLyogX19HU1RfTkVUX1RJTUVfUEFDS0VUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jIGIvbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDI1OTM2Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ1MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3RuZXR0aW1lcHJvdmlkZXIKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogU3BlY2lhbCBvYmplY3QgdGhhdCBleHBvc2VkIHRoZSB0aW1lIG9mIGEgY2xvY2sKLSAqICAgICAgICAgICAgICAgICAgICAgb24gdGhlIG5ldHdvcmsuCi0gKiBAc2VlX2Fsc286ICNHc3RDbG9jaywgI0dzdE5ldENsaWVudENsb2NrLCAjR3N0UGlwZWxpbmUKLSAqCi0gKiBUaGlzIG9iamVjdCBleHBvc2VzIHRoZSB0aW1lIG9mIGEgI0dzdENsb2NrIG9uIHRoZSBuZXR3b3JrLgotICoKLSAqIEEgI0dzdE5ldFRpbWVQcm92aWRlciBpcyBjcmVhdGVkIHdpdGggZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldygpIHdoaWNoCi0gKiB0YWtlcyBhICNHc3RDbG9jaywgYW4gYWRkcmVzcyBhbmQgYSBwb3J0IG51bWJlciBhcyBhcmd1bWVudHMuCi0gKgotICogQWZ0ZXIgY3JlYXRpbmcgdGhlIG9iamVjdCwgYSBjbGllbnQgY2xvY2sgc3VjaCBhcyAjR3N0TmV0Q2xpZW50Q2xvY2sgY2FuCi0gKiBxdWVyeSB0aGUgZXhwb3NlZCBjbG9jayBvdmVyIHRoZSBuZXR3b3JrIGZvciBpdHMgdmFsdWVzLgotICoKLSAqIFRoZSAjR3N0TmV0VGltZVByb3ZpZGVyIHR5cGljYWxseSB3cmFwcyB0aGUgY2xvY2sgdXNlZCBieSBhICNHc3RQaXBlbGluZS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RuZXR0aW1lcHJvdmlkZXIuaCIKLSNpbmNsdWRlICJnc3RuZXR0aW1lcGFja2V0LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKG50cF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAobnRwX2RlYnVnKQotCi0jZGVmaW5lIERFRkFVTFRfQUREUkVTUyAgICAgICAgICIwLjAuMC4wIgotI2RlZmluZSBERUZBVUxUX1BPUlQgICAgICAgICAgICA1NjM3Ci0KLSNkZWZpbmUgSVNfQUNUSVZFKHNlbGYpIChnX2F0b21pY19pbnRfZ2V0ICgmKChzZWxmKS0+cHJpdi0+YWN0aXZlKSkpCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1BPUlQsCi0gIFBST1BfQUREUkVTUywKLSAgUFJPUF9DTE9DSywKLSAgUFJPUF9BQ1RJVkUKLX07Ci0KLSNkZWZpbmUgR1NUX05FVF9USU1FX1BST1ZJREVSX0dFVF9QUklWQVRFKG9iaikgIFwKLSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUiwgR3N0TmV0VGltZVByb3ZpZGVyUHJpdmF0ZSkpCi0KLXN0cnVjdCBfR3N0TmV0VGltZVByb3ZpZGVyUHJpdmF0ZQotewotICBnY2hhciAqYWRkcmVzczsKLSAgaW50IHBvcnQ7Ci0KLSAgR1RocmVhZCAqdGhyZWFkOwotCi0gIEdzdENsb2NrICpjbG9jazsKLQotICBnYm9vbGVhbiBhY3RpdmU7ICAgICAgICAgICAgICAvKiBBVE9NSUMgKi8KLQotICBHU29ja2V0ICpzb2NrZXQ7Ci0gIEdDYW5jZWxsYWJsZSAqY2FuY2VsOwotICBnYm9vbGVhbiBtYWRlX2NhbmNlbF9mZDsKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9uZXRfdGltZV9wcm92aWRlcl9pbml0YWJsZV9pZmFjZV9pbml0IChncG9pbnRlciBnX2lmYWNlKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9uZXRfdGltZV9wcm92aWRlcl9zdGFydCAoR3N0TmV0VGltZVByb3ZpZGVyICogYnNlbGYsCi0gICAgR0Vycm9yICoqIGVycm9yKTsKLXN0YXRpYyB2b2lkIGdzdF9uZXRfdGltZV9wcm92aWRlcl9zdG9wIChHc3ROZXRUaW1lUHJvdmlkZXIgKiBic2VsZik7Ci0KLXN0YXRpYyBncG9pbnRlciBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfdGhyZWFkIChncG9pbnRlciBkYXRhKTsKLQotc3RhdGljIHZvaWQgZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9uZXRfdGltZV9wcm92aWRlcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG50cF9kZWJ1ZywgIm5ldHRpbWUiLCAwLCAiTmV0d29yayB0aW1lIHByb3ZpZGVyIik7IFwKLSAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHX1RZUEVfSU5JVEFCTEUsIGdzdF9uZXRfdGltZV9wcm92aWRlcl9pbml0YWJsZV9pZmFjZV9pbml0KQotCi0jZGVmaW5lIGdzdF9uZXRfdGltZV9wcm92aWRlcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0TmV0VGltZVByb3ZpZGVyLCBnc3RfbmV0X3RpbWVfcHJvdmlkZXIsCi0gICAgR1NUX1RZUEVfT0JKRUNULCBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfY2xhc3NfaW5pdCAoR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdfYXNzZXJ0IChzaXplb2YgKEdzdENsb2NrVGltZSkgPT0gOCk7Ci0KLSAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXJQcml2YXRlKSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9uZXRfdGltZV9wcm92aWRlcl9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9uZXRfdGltZV9wcm92aWRlcl9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QT1JULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInBvcnQiLCAicG9ydCIsCi0gICAgICAgICAgIlRoZSBwb3J0IHRvIHJlY2VpdmUgdGhlIHBhY2tldHMgZnJvbSwgMD1hbGxvY2F0ZSIsIDAsIEdfTUFYVUlOVDE2LAotICAgICAgICAgIERFRkFVTFRfUE9SVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUREUkVTUywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJhZGRyZXNzIiwgImFkZHJlc3MiLAotICAgICAgICAgICJUaGUgYWRkcmVzcyB0byBiaW5kIG9uLCBhcyBhIGRvdHRlZCBxdWFkICh4LngueC54KSIsIERFRkFVTFRfQUREUkVTUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0xPQ0ssCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiY2xvY2siLCAiQ2xvY2siLAotICAgICAgICAgICJUaGUgY2xvY2sgdG8gZXhwb3J0IG92ZXIgdGhlIG5ldHdvcmsiLCBHU1RfVFlQRV9DTE9DSywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUNUSVZFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhY3RpdmUiLCAiQWN0aXZlIiwKLSAgICAgICAgICAiVFJVRSBpZiB0aGUgY2xvY2sgd2lsbCByZXNwb25kIHRvIHF1ZXJpZXMgb3ZlciB0aGUgbmV0d29yayIsIFRSVUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfaW5pdCAoR3N0TmV0VGltZVByb3ZpZGVyICogc2VsZikKLXsKLSAgc2VsZi0+cHJpdiA9IEdTVF9ORVRfVElNRV9QUk9WSURFUl9HRVRfUFJJVkFURSAoc2VsZik7Ci0KLSAgc2VsZi0+cHJpdi0+cG9ydCA9IERFRkFVTFRfUE9SVDsKLSAgc2VsZi0+cHJpdi0+YWRkcmVzcyA9IGdfc3RyZHVwIChERUZBVUxUX0FERFJFU1MpOwotICBzZWxmLT5wcml2LT50aHJlYWQgPSBOVUxMOwotICBzZWxmLT5wcml2LT5hY3RpdmUgPSBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3ROZXRUaW1lUHJvdmlkZXIgKnNlbGYgPSBHU1RfTkVUX1RJTUVfUFJPVklERVIgKG9iamVjdCk7Ci0KLSAgaWYgKHNlbGYtPnByaXYtPnRocmVhZCkgewotICAgIGdzdF9uZXRfdGltZV9wcm92aWRlcl9zdG9wIChzZWxmKTsKLSAgICBnX2Fzc2VydCAoc2VsZi0+cHJpdi0+dGhyZWFkID09IE5VTEwpOwotICB9Ci0KLSAgZ19mcmVlIChzZWxmLT5wcml2LT5hZGRyZXNzKTsKLSAgc2VsZi0+cHJpdi0+YWRkcmVzcyA9IE5VTEw7Ci0KLSAgaWYgKHNlbGYtPnByaXYtPmNsb2NrKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlbGYtPnByaXYtPmNsb2NrKTsKLSAgc2VsZi0+cHJpdi0+Y2xvY2sgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdwb2ludGVyCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfdGhyZWFkIChncG9pbnRlciBkYXRhKQotewotICBHc3ROZXRUaW1lUHJvdmlkZXIgKnNlbGYgPSBkYXRhOwotICBHQ2FuY2VsbGFibGUgKmNhbmNlbCA9IHNlbGYtPnByaXYtPmNhbmNlbDsKLSAgR1NvY2tldCAqc29ja2V0ID0gc2VsZi0+cHJpdi0+c29ja2V0OwotICBHc3ROZXRUaW1lUGFja2V0ICpwYWNrZXQ7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsICJ0aW1lIHByb3ZpZGVyIHRocmVhZCBpcyBydW5uaW5nIik7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBHU29ja2V0QWRkcmVzcyAqc2VuZGVyX2FkZHIgPSBOVUxMOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJ3YWl0aW5nIG9uIHNvY2tldCIpOwotICAgIGlmICghZ19zb2NrZXRfY29uZGl0aW9uX3dhaXQgKHNvY2tldCwgR19JT19JTiwgY2FuY2VsLCAmZXJyKSkgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChzZWxmLCAic29ja2V0IGVycm9yOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0KLSAgICAgIGlmIChlcnItPmNvZGUgPT0gR19JT19FUlJPUl9DQU5DRUxMRUQpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICAvKiB0cnkgYWdhaW4gKi8KLSAgICAgIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAvIDEwKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIGVyciA9IE5VTEw7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvKiBnb3QgZGF0YSBpbiAqLwotICAgIHBhY2tldCA9IGdzdF9uZXRfdGltZV9wYWNrZXRfcmVjZWl2ZSAoc29ja2V0LCAmc2VuZGVyX2FkZHIsICZlcnIpOwotCi0gICAgaWYgKGVyciAhPSBOVUxMKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAicmVjZWl2ZSBlcnJvcjogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgICAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTApOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZXJyID0gTlVMTDsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmIChJU19BQ1RJVkUgKHNlbGYpKSB7Ci0gICAgICAvKiBkbyB3aGF0IHdlIHdlcmUgYXNrZWQgdG8gYW5kIHNlbmQgdGhlIHBhY2tldCBiYWNrICovCi0gICAgICBwYWNrZXQtPnJlbW90ZV90aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChzZWxmLT5wcml2LT5jbG9jayk7Ci0KLSAgICAgIC8qIGlnbm9yZSBlcnJvcnMgKi8KLSAgICAgIGdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCAocGFja2V0LCBzb2NrZXQsIHNlbmRlcl9hZGRyLCBOVUxMKTsKLSAgICAgIGdfb2JqZWN0X3VucmVmIChzZW5kZXJfYWRkcik7Ci0gICAgICBnX2ZyZWUgKHBhY2tldCk7Ci0gICAgfQotICB9Ci0KLSAgZ19lcnJvcl9mcmVlIChlcnIpOwotCi0gIEdTVF9JTkZPX09CSkVDVCAoc2VsZiwgInRpbWUgcHJvdmlkZXIgdGhyZWFkIGlzIHN0b3BwaW5nIik7Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3ROZXRUaW1lUHJvdmlkZXIgKnNlbGYgPSBHU1RfTkVUX1RJTUVfUFJPVklERVIgKG9iamVjdCk7Ci0gIEdzdENsb2NrICoqY2xvY2tfcCA9ICZzZWxmLT5wcml2LT5jbG9jazsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9SVDoKLSAgICAgIHNlbGYtPnByaXYtPnBvcnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BRERSRVNTOgotICAgICAgZ19mcmVlIChzZWxmLT5wcml2LT5hZGRyZXNzKTsKLSAgICAgIGlmIChnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSA9PSBOVUxMKQotICAgICAgICBzZWxmLT5wcml2LT5hZGRyZXNzID0gZ19zdHJkdXAgKERFRkFVTFRfQUREUkVTUyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNlbGYtPnByaXYtPmFkZHJlc3MgPSBnX3N0cmR1cCAoZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMT0NLOgotICAgICAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSBjbG9ja19wLAotICAgICAgICAgIChHc3RPYmplY3QgKikgZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FDVElWRToKLSAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZzZWxmLT5wcml2LT5hY3RpdmUsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE5ldFRpbWVQcm92aWRlciAqc2VsZiA9IEdTVF9ORVRfVElNRV9QUk9WSURFUiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9SVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNlbGYtPnByaXYtPnBvcnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FERFJFU1M6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzZWxmLT5wcml2LT5hZGRyZXNzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DTE9DSzoKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHNlbGYtPnByaXYtPmNsb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BQ1RJVkU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgSVNfQUNUSVZFIChzZWxmKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N0YXJ0IChHc3ROZXRUaW1lUHJvdmlkZXIgKiBzZWxmLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdTb2NrZXRBZGRyZXNzICpzb2NrZXRfYWRkciwgKmJvdW5kX2FkZHI7Ci0gIEdJbmV0QWRkcmVzcyAqaW5ldF9hZGRyOwotICBHUG9sbEZEIGR1bW15X3BvbGxmZDsKLSAgR1NvY2tldCAqc29ja2V0OwotICBpbnQgcG9ydDsKLSAgZ2NoYXIgKmFkZHJlc3M7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICBpZiAoc2VsZi0+cHJpdi0+YWRkcmVzcykgewotICAgIGluZXRfYWRkciA9IGdfaW5ldF9hZGRyZXNzX25ld19mcm9tX3N0cmluZyAoc2VsZi0+cHJpdi0+YWRkcmVzcyk7Ci0gICAgaWYgKGluZXRfYWRkciA9PSBOVUxMKSB7Ci0gICAgICBlcnIgPQotICAgICAgICAgIGdfZXJyb3JfbmV3IChHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0ZBSUxFRCwKLSAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJyIsIHNlbGYtPnByaXYtPmFkZHJlc3MpOwotICAgICAgZ290byBpbnZhbGlkX2FkZHJlc3M7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGluZXRfYWRkciA9IGdfaW5ldF9hZGRyZXNzX25ld19hbnkgKEdfU09DS0VUX0ZBTUlMWV9JUFY0KTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAiY3JlYXRpbmcgc29ja2V0Iik7Ci0gIHNvY2tldCA9IGdfc29ja2V0X25ldyAoZ19pbmV0X2FkZHJlc3NfZ2V0X2ZhbWlseSAoaW5ldF9hZGRyKSwKLSAgICAgIEdfU09DS0VUX1RZUEVfREFUQUdSQU0sIEdfU09DS0VUX1BST1RPQ09MX1VEUCwgJmVycik7Ci0KLSAgaWYgKCFzb2NrZXQpCi0gICAgZ290byBub19zb2NrZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImJpbmRpbmcgb24gcG9ydCAlZCIsIHNlbGYtPnByaXYtPnBvcnQpOwotICBzb2NrZXRfYWRkciA9IGdfaW5ldF9zb2NrZXRfYWRkcmVzc19uZXcgKGluZXRfYWRkciwgc2VsZi0+cHJpdi0+cG9ydCk7Ci0gIGlmICghZ19zb2NrZXRfYmluZCAoc29ja2V0LCBzb2NrZXRfYWRkciwgVFJVRSwgJmVycikpIHsKLSAgICBnX29iamVjdF91bnJlZiAoc29ja2V0X2FkZHIpOwotICAgIGdfb2JqZWN0X3VucmVmIChpbmV0X2FkZHIpOwotICAgIGdvdG8gYmluZF9lcnJvcjsKLSAgfQotICBnX29iamVjdF91bnJlZiAoc29ja2V0X2FkZHIpOwotICBnX29iamVjdF91bnJlZiAoaW5ldF9hZGRyKTsKLQotICBib3VuZF9hZGRyID0gZ19zb2NrZXRfZ2V0X2xvY2FsX2FkZHJlc3MgKHNvY2tldCwgTlVMTCk7Ci0gIHBvcnQgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X3BvcnQgKEdfSU5FVF9TT0NLRVRfQUREUkVTUyAoYm91bmRfYWRkcikpOwotICBpbmV0X2FkZHIgPQotICAgICAgZ19pbmV0X3NvY2tldF9hZGRyZXNzX2dldF9hZGRyZXNzIChHX0lORVRfU09DS0VUX0FERFJFU1MgKGJvdW5kX2FkZHIpKTsKLSAgYWRkcmVzcyA9IGdfaW5ldF9hZGRyZXNzX3RvX3N0cmluZyAoaW5ldF9hZGRyKTsKLQotICBpZiAoZ19zdHJjbXAwIChhZGRyZXNzLCBzZWxmLT5wcml2LT5hZGRyZXNzKSkgewotICAgIGdfZnJlZSAoc2VsZi0+cHJpdi0+YWRkcmVzcyk7Ci0gICAgc2VsZi0+cHJpdi0+YWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIm5vdGlmeWluZyBhZGRyZXNzICVzIiwgYWRkcmVzcyk7Ci0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoc2VsZiksICJhZGRyZXNzIik7Ci0gIH0gZWxzZSB7Ci0gICAgZ19mcmVlIChhZGRyZXNzKTsKLSAgfQotICBpZiAocG9ydCAhPSBzZWxmLT5wcml2LT5wb3J0KSB7Ci0gICAgc2VsZi0+cHJpdi0+cG9ydCA9IHBvcnQ7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIm5vdGlmeWluZyBwb3J0ICVkIiwgcG9ydCk7Ci0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoc2VsZiksICJwb3J0Iik7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImJvdW5kIG9uIFVEUCBhZGRyZXNzICVzLCBwb3J0ICVkIiwKLSAgICAgIHNlbGYtPnByaXYtPmFkZHJlc3MsIHBvcnQpOwotICBnX29iamVjdF91bnJlZiAoYm91bmRfYWRkcik7Ci0KLSAgc2VsZi0+cHJpdi0+c29ja2V0ID0gc29ja2V0OwotICBzZWxmLT5wcml2LT5jYW5jZWwgPSBnX2NhbmNlbGxhYmxlX25ldyAoKTsKLSAgc2VsZi0+cHJpdi0+bWFkZV9jYW5jZWxfZmQgPQotICAgICAgZ19jYW5jZWxsYWJsZV9tYWtlX3BvbGxmZCAoc2VsZi0+cHJpdi0+Y2FuY2VsLCAmZHVtbXlfcG9sbGZkKTsKLQotICBzZWxmLT5wcml2LT50aHJlYWQgPSBnX3RocmVhZF90cnlfbmV3ICgiR3N0TmV0VGltZVByb3ZpZGVyIiwKLSAgICAgIGdzdF9uZXRfdGltZV9wcm92aWRlcl90aHJlYWQsIHNlbGYsICZlcnIpOwotCi0gIGlmICghc2VsZi0+cHJpdi0+dGhyZWFkKQotICAgIGdvdG8gbm9fdGhyZWFkOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9hZGRyZXNzOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgImludmFsaWQgYWRkcmVzczogJXMiLCBzZWxmLT5wcml2LT5hZGRyZXNzKTsKLSAgICBnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIGVycik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19zb2NrZXQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiY291bGQgbm90IGNyZWF0ZSBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIGVycik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGluZXRfYWRkcik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1iaW5kX2Vycm9yOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgImJpbmQgZmFpbGVkOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9yLCBlcnIpOwotICAgIGdfb2JqZWN0X3VucmVmIChzb2NrZXQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fdGhyZWFkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgImNvdWxkIG5vdCBjcmVhdGUgdGhyZWFkOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9yLCBlcnIpOwotICAgIGdfb2JqZWN0X3VucmVmIChzZWxmLT5wcml2LT5zb2NrZXQpOwotICAgIHNlbGYtPnByaXYtPnNvY2tldCA9IE5VTEw7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNlbGYtPnByaXYtPmNhbmNlbCk7Ci0gICAgc2VsZi0+cHJpdi0+Y2FuY2VsID0gTlVMTDsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uZXRfdGltZV9wcm92aWRlcl9zdG9wIChHc3ROZXRUaW1lUHJvdmlkZXIgKiBzZWxmKQotewotICBnX3JldHVybl9pZl9mYWlsIChzZWxmLT5wcml2LT50aHJlYWQgIT0gTlVMTCk7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChzZWxmLCAic3RvcHBpbmcuLiIpOwotICBnX2NhbmNlbGxhYmxlX2NhbmNlbCAoc2VsZi0+cHJpdi0+Y2FuY2VsKTsKLQotICBnX3RocmVhZF9qb2luIChzZWxmLT5wcml2LT50aHJlYWQpOwotICBzZWxmLT5wcml2LT50aHJlYWQgPSBOVUxMOwotCi0gIGlmIChzZWxmLT5wcml2LT5tYWRlX2NhbmNlbF9mZCkKLSAgICBnX2NhbmNlbGxhYmxlX3JlbGVhc2VfZmQgKHNlbGYtPnByaXYtPmNhbmNlbCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHNlbGYtPnByaXYtPmNhbmNlbCk7Ci0gIHNlbGYtPnByaXYtPmNhbmNlbCA9IE5VTEw7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHNlbGYtPnByaXYtPnNvY2tldCk7Ci0gIHNlbGYtPnByaXYtPnNvY2tldCA9IE5VTEw7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChzZWxmLCAic3RvcHBlZCIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9uZXRfdGltZV9wcm92aWRlcl9pbml0YWJsZV9pbml0IChHSW5pdGFibGUgKiBpbml0YWJsZSwKLSAgICBHQ2FuY2VsbGFibGUgKiBjYW5jZWxsYWJsZSwgR0Vycm9yICoqIGVycm9yKQotewotICBHc3ROZXRUaW1lUHJvdmlkZXIgKnNlbGYgPSBHU1RfTkVUX1RJTUVfUFJPVklERVIgKGluaXRhYmxlKTsKLQotICByZXR1cm4gZ3N0X25ldF90aW1lX3Byb3ZpZGVyX3N0YXJ0IChzZWxmLCBlcnJvcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfaW5pdGFibGVfaWZhY2VfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSkKLXsKLSAgR0luaXRhYmxlSWZhY2UgKmlmYWNlID0gZ19pZmFjZTsKLQotICBpZmFjZS0+aW5pdCA9IGdzdF9uZXRfdGltZV9wcm92aWRlcl9pbml0YWJsZV9pbml0OwotfQotCi0vKioKLSAqIGdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXc6Ci0gKiBAY2xvY2s6IGEgI0dzdENsb2NrIHRvIGV4cG9ydCBvdmVyIHRoZSBuZXR3b3JrCi0gKiBAYWRkcmVzczogKGFsbG93LW5vbmUpOiBhbiBhZGRyZXNzIHRvIGJpbmQgb24gYXMgYSBkb3R0ZWQgcXVhZAotICogICAgICAgICAgICh4eHgueHh4Lnh4eC54eHgpLCBJUHY2IGFkZHJlc3MsIG9yIE5VTEwgdG8gYmluZCB0byBhbGwgYWRkcmVzc2VzCi0gKiBAcG9ydDogYSBwb3J0IHRvIGJpbmQgb24sIG9yIDAgdG8gbGV0IHRoZSBrZXJuZWwgY2hvb3NlCi0gKgotICogQWxsb3dzIG5ldHdvcmsgY2xpZW50cyB0byBnZXQgdGhlIGN1cnJlbnQgdGltZSBvZiBAY2xvY2suCi0gKgotICogUmV0dXJuczogdGhlIG5ldyAjR3N0TmV0VGltZVByb3ZpZGVyLCBvciBOVUxMIG9uIGVycm9yCi0gKi8KLUdzdE5ldFRpbWVQcm92aWRlciAqCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3IChHc3RDbG9jayAqIGNsb2NrLCBjb25zdCBnY2hhciAqIGFkZHJlc3MsIGdpbnQgcG9ydCkKLXsKLSAgR3N0TmV0VGltZVByb3ZpZGVyICpyZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNsb2NrICYmIEdTVF9JU19DTE9DSyAoY2xvY2spLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBvcnQgPj0gMCAmJiBwb3J0IDw9IEdfTUFYVUlOVDE2LCBOVUxMKTsKLQotICByZXQgPQotICAgICAgZ19pbml0YWJsZV9uZXcgKEdTVF9UWVBFX05FVF9USU1FX1BST1ZJREVSLCBOVUxMLCBOVUxMLCAiY2xvY2siLCBjbG9jaywKLSAgICAgICJhZGRyZXNzIiwgYWRkcmVzcywgInBvcnQiLCBwb3J0LCBOVUxMKTsKLQotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oIGIvbGlicy9nc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzMwZDllLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqICAgICAgICAgICAgICAgMjAwNiBKb25pIFZhbHRhbmVuIDxqb25pLnZhbHRhbmVuQG1vdmlhbC5maT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX05FVF9USU1FX1BST1ZJREVSX0hfXwotI2RlZmluZSBfX0dTVF9ORVRfVElNRV9QUk9WSURFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX05FVF9USU1FX1BST1ZJREVSIFwKLSAgKGdzdF9uZXRfdGltZV9wcm92aWRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfTkVUX1RJTUVfUFJPVklERVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUixHc3ROZXRUaW1lUHJvdmlkZXIpKQotI2RlZmluZSBHU1RfTkVUX1RJTUVfUFJPVklERVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTkVUX1RJTUVfUFJPVklERVIsR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTkVUX1RJTUVfUFJPVklERVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUikpCi0jZGVmaW5lIEdTVF9JU19ORVRfVElNRV9QUk9WSURFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9ORVRfVElNRV9QUk9WSURFUikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3ROZXRUaW1lUHJvdmlkZXIgR3N0TmV0VGltZVByb3ZpZGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE5ldFRpbWVQcm92aWRlckNsYXNzIEdzdE5ldFRpbWVQcm92aWRlckNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE5ldFRpbWVQcm92aWRlclByaXZhdGUgR3N0TmV0VGltZVByb3ZpZGVyUHJpdmF0ZTsKLQotLyoqCi0gKiBHc3ROZXRUaW1lUHJvdmlkZXI6Ci0gKgotICogT3BhcXVlICNHc3ROZXRUaW1lUHJvdmlkZXIgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdE5ldFRpbWVQcm92aWRlciB7Ci0gIEdzdE9iamVjdCBwYXJlbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdE5ldFRpbWVQcm92aWRlclByaXZhdGUgKnByaXY7Ci0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdE5ldFRpbWVQcm92aWRlckNsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotR1R5cGUgICAgICAgICAgICAgICAgICAgZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2dldF90eXBlICAodm9pZCk7Ci0KLUdzdE5ldFRpbWVQcm92aWRlciogICAgIGdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcgICAgICAgKEdzdENsb2NrICpjbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICphZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBwb3J0KTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3ROZXRUaW1lUHJvdmlkZXIsIGdzdF9vYmplY3RfdW5yZWYpCi0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotCi0jZW5kaWYgLyogX19HU1RfTkVUX1RJTUVfUFJPVklERVJfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9uZXQvZ3N0bnRwcGFja2V0LmMgYi9saWJzL2dzdC9uZXQvZ3N0bnRwcGFja2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5Yjk1ZWMuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvbmV0L2dzdG50cHBhY2tldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKiBUSElTIElTIEEgUFJJVkFURSBBUEkKLSAqIFNFQ1RJT046Z3N0bnRwcGFja2V0Ci0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEhlbHBlciBzdHJ1Y3R1cmUgdG8gY29uc3RydWN0IGNsb2NrIHBhY2tldHMgdXNlZAotICogICAgICAgICAgICAgICAgICAgICBieSBuZXR3b3JrIGNsb2NrcyBmb3IgTlRQdjQuCi0gKiBAc2VlX2Fsc286ICNHc3RDbG9jaywgI0dzdE5ldENsaWVudENsb2NrLCAjR3N0TnRwQ2xvY2sKLSAqCi0gKiBWYXJpb3VzIGZ1bmN0aW9ucyBmb3IgcmVjZWl2aW5nLCBzZW5kaW5nIGFuIHNlcmlhbGl6aW5nICNHc3ROdHBQYWNrZXQKLSAqIHN0cnVjdHVyZXMuCi0gKi8KLQotLyogRklYTUUgMi4wOiBNZXJnZSB0aGlzIHdpdGggR3N0TmV0VGltZVBhY2tldCEgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaWZkZWYgX19DWUdXSU5fXwotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSMgaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0bnRwcGFja2V0LmgiCi0KLUdfREVGSU5FX0JPWEVEX1RZUEUgKEdzdE50cFBhY2tldCwgZ3N0X250cF9wYWNrZXQsCi0gICAgZ3N0X250cF9wYWNrZXRfY29weSwgZ3N0X250cF9wYWNrZXRfZnJlZSk7Ci0KLQotc3RhdGljIGlubGluZSBHc3RDbG9ja1RpbWUKLW50cF90aW1lc3RhbXBfdG9fZ3N0X2Nsb2NrX3RpbWUgKGd1aW50MzIgc2Vjb25kcywgZ3VpbnQzMiBmcmFjdGlvbikKLXsKLSAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc2Vjb25kcywgR1NUX1NFQ09ORCwgMSkgKwotICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChmcmFjdGlvbiwgR1NUX1NFQ09ORCwKLSAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgMzIpOwotfQotCi1zdGF0aWMgaW5saW5lIGd1aW50MzIKLWdzdF9jbG9ja190aW1lX3RvX250cF90aW1lc3RhbXBfc2Vjb25kcyAoR3N0Q2xvY2tUaW1lIGdzdCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHNlY29uZHMgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGdzdCwgMSwgR1NUX1NFQ09ORCk7Ci0KLSAgcmV0dXJuIHNlY29uZHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQzMgotZ3N0X2Nsb2NrX3RpbWVfdG9fbnRwX3RpbWVzdGFtcF9mcmFjdGlvbiAoR3N0Q2xvY2tUaW1lIGdzdCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHNlY29uZHMgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGdzdCwgMSwgR1NUX1NFQ09ORCk7Ci0KLSAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZ3N0IC0gc2Vjb25kcywgR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCAzMiwKLSAgICAgIEdTVF9TRUNPTkQpOwotfQotCi0vKioKLSAqIGdzdF9udHBfcGFja2V0X25ldzoKLSAqIEBidWZmZXI6IChhcnJheSk6IGEgYnVmZmVyIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IHRoZSBwYWNrZXQsIG9yIE5VTEwKLSAqIEBlcnJvcjogYSAjR0Vycm9yCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0TnRwUGFja2V0IGZyb20gYSBidWZmZXIgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yay4gVGhlCi0gKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgQGJ1ZmZlciBpcyBhdCBsZWFzdAotICogI0dTVF9OVFBfUEFDS0VUX1NJWkUgYnl0ZXMgbG9uZy4KLSAqCi0gKiBJZiBAYnVmZmVyIGlzICNOVUxMLCB0aGUgbG9jYWwgYW5kIHJlbW90ZSB0aW1lcyB3aWxsIGJlIHNldCB0bwotICogI0dTVF9DTE9DS19USU1FX05PTkUuCi0gKgotICogTVQgc2FmZS4gQ2FsbGVyIG93bnMgcmV0dXJuIHZhbHVlIChnc3RfbnRwX3BhY2tldF9mcmVlIHRvIGZyZWUpLgotICoKLSAqIFJldHVybnM6IFRoZSBuZXcgI0dzdE50cFBhY2tldC4KLSAqLwotR3N0TnRwUGFja2V0ICoKLWdzdF9udHBfcGFja2V0X25ldyAoY29uc3QgZ3VpbnQ4ICogYnVmZmVyLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdzdE50cFBhY2tldCAqcmV0OwotCi0gIGdfYXNzZXJ0IChzaXplb2YgKEdzdENsb2NrVGltZSkgPT0gOCk7Ci0KLSAgaWYgKGJ1ZmZlcikgewotICAgIGd1aW50OCB2ZXJzaW9uID0gKGJ1ZmZlclswXSA+PiAzKSAmIDB4NzsKLSAgICBndWludDggc3RyYXR1bSA9IGJ1ZmZlclsxXTsKLSAgICBnaW50OCBwb2xsX2ludGVydmFsID0gYnVmZmVyWzJdOwotCi0gICAgaWYgKHZlcnNpb24gIT0gNCkgewotICAgICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfTlRQX0VSUk9SLCBHU1RfTlRQX0VSUk9SX1dST05HX1ZFUlNJT04sCi0gICAgICAgICAgIkludmFsaWQgTlRQIHZlcnNpb24gJWQiLCB2ZXJzaW9uKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIEtpc3MtbyctRGVhdGggcGFja2V0ISAqLwotICAgIGlmIChzdHJhdHVtID09IDApIHsKLSAgICAgIGdjaGFyIGNvZGVbNV0gPSB7IGJ1ZmZlclszICogNCArIDBdLCBidWZmZXJbMyAqIDQgKyAxXSwgYnVmZmVyWzMgKiA0ICsgMl0sCi0gICAgICAgIGJ1ZmZlclszICogNCArIDNdLCAwCi0gICAgICB9OwotCi0gICAgICAvKiBBVVRILCBBVVRPLCBDUllQLCBERU5ZLCBSU1RSLCBOS0VZID0+IERFTlkgKi8KLSAgICAgIGlmIChzdHJjbXAgKGNvZGUsICJBVVRIIikgPT0gMCB8fAotICAgICAgICAgIHN0cmNtcCAoY29kZSwgIkFVVE8iKSA9PSAwIHx8Ci0gICAgICAgICAgc3RyY21wIChjb2RlLCAiQ1JZUCIpID09IDAgfHwKLSAgICAgICAgICBzdHJjbXAgKGNvZGUsICJERU5ZIikgPT0gMCB8fAotICAgICAgICAgIHN0cmNtcCAoY29kZSwgIlJTVFIiKSA9PSAwIHx8IHN0cmNtcCAoY29kZSwgIk5LRVkiKSA9PSAwKSB7Ci0gICAgICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX05UUF9FUlJPUiwgR1NUX05UUF9FUlJPUl9LT0RfREVOWSwKLSAgICAgICAgICAgICJLaXNzLW8nLURlYXRoIGRlbmllZCAnJXMnIiwgY29kZSk7Ci0gICAgICB9IGVsc2UgaWYgKHN0cmNtcCAoY29kZSwgIlJBVEUiKSA9PSAwKSB7Ci0gICAgICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX05UUF9FUlJPUiwgR1NUX05UUF9FUlJPUl9LT0RfUkFURSwKLSAgICAgICAgICAgICJLaXNzLW8nLURlYXRoICclcyciLCBjb2RlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX05UUF9FUlJPUiwgR1NUX05UUF9FUlJPUl9LT0RfVU5LTk9XTiwKLSAgICAgICAgICAgICJLaXNzLW8nLURlYXRoIHVua25vd24gJyVzJyIsIGNvZGUpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXQgPSBnX25ldzAgKEdzdE50cFBhY2tldCwgMSk7Ci0gICAgcmV0LT5vcmlnaW5fdGltZSA9Ci0gICAgICAgIG50cF90aW1lc3RhbXBfdG9fZ3N0X2Nsb2NrX3RpbWUgKEdTVF9SRUFEX1VJTlQzMl9CRSAoYnVmZmVyICsgNiAqIDQpLAotICAgICAgICBHU1RfUkVBRF9VSU5UMzJfQkUgKGJ1ZmZlciArIDcgKiA0KSk7Ci0gICAgcmV0LT5yZWNlaXZlX3RpbWUgPQotICAgICAgICBudHBfdGltZXN0YW1wX3RvX2dzdF9jbG9ja190aW1lIChHU1RfUkVBRF9VSU5UMzJfQkUgKGJ1ZmZlciArIDggKiA0KSwKLSAgICAgICAgR1NUX1JFQURfVUlOVDMyX0JFIChidWZmZXIgKyA5ICogNCkpOwotICAgIHJldC0+dHJhbnNtaXRfdGltZSA9Ci0gICAgICAgIG50cF90aW1lc3RhbXBfdG9fZ3N0X2Nsb2NrX3RpbWUgKEdTVF9SRUFEX1VJTlQzMl9CRSAoYnVmZmVyICsgMTAgKiA0KSwKLSAgICAgICAgR1NUX1JFQURfVUlOVDMyX0JFIChidWZmZXIgKyAxMSAqIDQpKTsKLQotICAgIC8qIFdpcmVzaGFyayBjb25zaWRlcnMgZXZlcnl0aGluZyA+PSAzIGFzIGludmFsaWQgKi8KLSAgICBpZiAocG9sbF9pbnRlcnZhbCA+PSAzKQotICAgICAgcmV0LT5wb2xsX2ludGVydmFsID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBlbHNlIGlmIChwb2xsX2ludGVydmFsID49IDApCi0gICAgICByZXQtPnBvbGxfaW50ZXJ2YWwgPSBHU1RfU0VDT05EIDw8IHBvbGxfaW50ZXJ2YWw7Ci0gICAgZWxzZQotICAgICAgcmV0LT5wb2xsX2ludGVydmFsID0gR1NUX1NFQ09ORCA+PiAoLXBvbGxfaW50ZXJ2YWwpOwotICB9IGVsc2UgewotICAgIHJldCA9IGdfbmV3MCAoR3N0TnRwUGFja2V0LCAxKTsKLSAgICByZXQtPm9yaWdpbl90aW1lID0gMDsKLSAgICByZXQtPnJlY2VpdmVfdGltZSA9IDA7Ci0gICAgcmV0LT50cmFuc21pdF90aW1lID0gMDsKLSAgICByZXQtPnBvbGxfaW50ZXJ2YWwgPSAwOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfbnRwX3BhY2tldF9mcmVlOgotICogQHBhY2tldDogdGhlICNHc3ROdHBQYWNrZXQKLSAqCi0gKiBGcmVlIEBwYWNrZXQuCi0gKi8KLXZvaWQKLWdzdF9udHBfcGFja2V0X2ZyZWUgKEdzdE50cFBhY2tldCAqIHBhY2tldCkKLXsKLSAgZ19mcmVlIChwYWNrZXQpOwotfQotCi0vKioKLSAqIGdzdF9udHBfcGFja2V0X2NvcHk6Ci0gKiBAcGFja2V0OiB0aGUgI0dzdE50cFBhY2tldAotICoKLSAqIE1ha2UgYSBjb3B5IG9mIEBwYWNrZXQuCi0gKgotICogUmV0dXJuczogYSBjb3B5IG9mIEBwYWNrZXQsIGZyZWUgd2l0aCBnc3RfbnRwX3BhY2tldF9mcmVlKCkuCi0gKi8KLUdzdE50cFBhY2tldCAqCi1nc3RfbnRwX3BhY2tldF9jb3B5IChjb25zdCBHc3ROdHBQYWNrZXQgKiBwYWNrZXQpCi17Ci0gIEdzdE50cFBhY2tldCAqcmV0OwotCi0gIHJldCA9IGdfbmV3MCAoR3N0TnRwUGFja2V0LCAxKTsKLSAgcmV0LT5vcmlnaW5fdGltZSA9IHBhY2tldC0+b3JpZ2luX3RpbWU7Ci0gIHJldC0+cmVjZWl2ZV90aW1lID0gcGFja2V0LT5yZWNlaXZlX3RpbWU7Ci0gIHJldC0+dHJhbnNtaXRfdGltZSA9IHBhY2tldC0+dHJhbnNtaXRfdGltZTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9udHBfcGFja2V0X3NlcmlhbGl6ZToKLSAqIEBwYWNrZXQ6IHRoZSAjR3N0TnRwUGFja2V0Ci0gKgotICogU2VyaWFsaXplZCBhICNHc3ROdHBQYWNrZXQgaW50byBhIG5ld2x5LWFsbG9jYXRlZCBzZXF1ZW5jZSBvZgotICogI0dTVF9OVFBfUEFDS0VUX1NJWkUgYnl0ZXMsIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4gVGhlIHZhbHVlIHJldHVybmVkIGlzCi0gKiBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byB3cml0ZSgyKSBvciBzZW5kdG8oMikgZm9yIGNvbW11bmljYXRpb24gb3ZlciB0aGUKLSAqIG5ldHdvcmsuCi0gKgotICogTVQgc2FmZS4gQ2FsbGVyIG93bnMgcmV0dXJuIHZhbHVlIChnX2ZyZWUgdG8gZnJlZSkuCi0gKgotICogUmV0dXJuczogQSBuZXdseSBhbGxvY2F0ZWQgc2VxdWVuY2Ugb2YgI0dTVF9OVFBfUEFDS0VUX1NJWkUgYnl0ZXMuCi0gKi8KLWd1aW50OCAqCi1nc3RfbnRwX3BhY2tldF9zZXJpYWxpemUgKGNvbnN0IEdzdE50cFBhY2tldCAqIHBhY2tldCkKLXsKLSAgZ3VpbnQ4ICpyZXQ7Ci0KLSAgZ19hc3NlcnQgKHNpemVvZiAoR3N0Q2xvY2tUaW1lKSA9PSA4KTsKLQotICByZXQgPSBnX25ldzAgKGd1aW50OCwgR1NUX05UUF9QQUNLRVRfU0laRSk7Ci0gIC8qIExlYXAgSW5kaWNhdG9yOiB1bmtub3duCi0gICAqIFZlcnNpb246IDQKLSAgICogTW9kZTogQ2xpZW50Ci0gICAqLwotICByZXRbMF0gPSAoMyA8PCA2KSB8ICg0IDw8IDMpIHwgKDMgPDwgMCk7Ci0gIC8qIFN0cmF0dW06IHVuc3luY2hyb25pemVkICovCi0gIHJldFsxXSA9IDE2OwotICAvKiBQb2xsaW5nIGludGVydmFsOiBpbnZhbGlkICovCi0gIHJldFsyXSA9IDM7Ci0gIC8qIFByZWNpc2lvbjogMCAqLwotICByZXRbM10gPSAwOwotICAvKiBSb290IGRlbGF5OiAwICovCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKHJldCArIDQsIDApOwotICAvKiBSb290IGRpc3BlcnNvbjogMCAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChyZXQgKyAyICogNCwgMCk7Ci0gIC8qIFJlZmVyZW5jZSBJRDogXDAgKi8KLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAocmV0ICsgMyAqIDQsIDApOwotICAvKiBSZWZlcmVuY2UgVGltZXN0YW1wOiAwICovCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKHJldCArIDQgKiA0LCAwKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAocmV0ICsgNSAqIDQsIDApOwotICAvKiBPcmlnaW4gdGltZXN0YW1wIChsb2NhbCB0aW1lKSAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChyZXQgKyA2ICogNCwKLSAgICAgIGdzdF9jbG9ja190aW1lX3RvX250cF90aW1lc3RhbXBfc2Vjb25kcyAocGFja2V0LT5vcmlnaW5fdGltZSkpOwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChyZXQgKyA3ICogNCwKLSAgICAgIGdzdF9jbG9ja190aW1lX3RvX250cF90aW1lc3RhbXBfZnJhY3Rpb24gKHBhY2tldC0+b3JpZ2luX3RpbWUpKTsKLSAgLyogUmVjZWl2ZSB0aW1lc3RhbXAgKHJlbW90ZSB0aW1lKSAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChyZXQgKyA4ICogNCwKLSAgICAgIGdzdF9jbG9ja190aW1lX3RvX250cF90aW1lc3RhbXBfc2Vjb25kcyAocGFja2V0LT5yZWNlaXZlX3RpbWUpKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAocmV0ICsgOSAqIDQsCi0gICAgICBnc3RfY2xvY2tfdGltZV90b19udHBfdGltZXN0YW1wX2ZyYWN0aW9uIChwYWNrZXQtPnJlY2VpdmVfdGltZSkpOwotICAvKiBUcmFuc21pdCB0aW1lc3RhbXAgKHJlbW90ZSB0aW1lKSAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChyZXQgKyAxMCAqIDQsCi0gICAgICBnc3RfY2xvY2tfdGltZV90b19udHBfdGltZXN0YW1wX3NlY29uZHMgKHBhY2tldC0+dHJhbnNtaXRfdGltZSkpOwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChyZXQgKyAxMSAqIDQsCi0gICAgICBnc3RfY2xvY2tfdGltZV90b19udHBfdGltZXN0YW1wX2ZyYWN0aW9uIChwYWNrZXQtPnRyYW5zbWl0X3RpbWUpKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGdzdF9udHBfcGFja2V0X3JlY2VpdmU6Ci0gKiBAc29ja2V0OiBzb2NrZXQgdG8gcmVjZWl2ZSB0aGUgdGltZSBwYWNrZXQgb24KLSAqIEBzcmNfYWRkcmVzczogKG91dCk6IGFkZHJlc3Mgb2YgdmFyaWFibGUgdG8gcmV0dXJuIHNlbmRlciBhZGRyZXNzCi0gKiBAZXJyb3I6IHJldHVybiBhZGRyZXNzIGZvciBhICNHRXJyb3IsIG9yIE5VTEwKLSAqCi0gKiBSZWNlaXZlcyBhICNHc3ROdHBQYWNrZXQgb3ZlciBhIHNvY2tldC4gSGFuZGxlcyBpbnRlcnJ1cHRlZCBzeXN0ZW0KLSAqIGNhbGxzLCBidXQgb3RoZXJ3aXNlIHJldHVybnMgTlVMTCBvbiBlcnJvci4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNHc3ROdHBQYWNrZXQsIG9yIE5VTEwgb24gZXJyb3IuIEZyZWUKLSAqICAgIHdpdGggZ3N0X250cF9wYWNrZXRfZnJlZSgpIHdoZW4gZG9uZS4KLSAqLwotR3N0TnRwUGFja2V0ICoKLWdzdF9udHBfcGFja2V0X3JlY2VpdmUgKEdTb2NrZXQgKiBzb2NrZXQsCi0gICAgR1NvY2tldEFkZHJlc3MgKiogc3JjX2FkZHJlc3MsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgZ2NoYXIgYnVmZmVyW0dTVF9OVFBfUEFDS0VUX1NJWkVdOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIGdzc2l6ZSByZXQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU09DS0VUIChzb2NrZXQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlcnJvciA9PSBOVUxMIHx8ICplcnJvciA9PSBOVUxMLCBGQUxTRSk7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICByZXQgPSBnX3NvY2tldF9yZWNlaXZlX2Zyb20gKHNvY2tldCwgc3JjX2FkZHJlc3MsIGJ1ZmZlciwKLSAgICAgICAgR1NUX05UUF9QQUNLRVRfU0laRSwgTlVMTCwgJmVycik7Ci0KLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgaWYgKGVyci0+Y29kZSA9PSBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKSB7Ci0gICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgICAgZXJyID0gTlVMTDsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnb3RvIHJlY2VpdmVfZXJyb3I7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChyZXQgPCBHU1RfTlRQX1BBQ0tFVF9TSVpFKSB7Ci0gICAgICBnb3RvIHNob3J0X3BhY2tldDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGdzdF9udHBfcGFja2V0X25ldyAoKGNvbnN0IGd1aW50OCAqKSBidWZmZXIsIGVycm9yKTsKLSAgICB9Ci0gIH0KLQotcmVjZWl2ZV9lcnJvcjoKLSAgewotICAgIEdTVF9ERUJVRyAoInJlY2VpdmUgZXJyb3I6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIGVycik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXNob3J0X3BhY2tldDoKLSAgewotICAgIEdTVF9ERUJVRyAoInNvbWVvbmUgc2VudCB1cyBhIHNob3J0IHBhY2tldCAoJSIgR19HU1NJWkVfRk9STUFUICIgPCAlZCkiLAotICAgICAgICByZXQsIEdTVF9OVFBfUEFDS0VUX1NJWkUpOwotICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9JTlZBTElEX0RBVEEsCi0gICAgICAgICJzaG9ydCB0aW1lIHBhY2tldCAoJWQgPCAlZCkiLCAoaW50KSByZXQsIEdTVF9OVFBfUEFDS0VUX1NJWkUpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X250cF9wYWNrZXRfc2VuZDoKLSAqIEBwYWNrZXQ6IHRoZSAjR3N0TnRwUGFja2V0IHRvIHNlbmQKLSAqIEBzb2NrZXQ6IHNvY2tldCB0byBzZW5kIHRoZSB0aW1lIHBhY2tldCBvbgotICogQGRlc3RfYWRkcmVzczogYWRkcmVzcyB0byBzZW5kIHRoZSB0aW1lIHBhY2tldCB0bwotICogQGVycm9yOiByZXR1cm4gYWRkcmVzcyBmb3IgYSAjR0Vycm9yLCBvciBOVUxMCi0gKgotICogU2VuZHMgYSAjR3N0TnRwUGFja2V0IG92ZXIgYSBzb2NrZXQuCi0gKgotICogTVQgc2FmZS4KLSAqCi0gKiBSZXR1cm5zOiBUUlVFIGlmIHN1Y2Nlc3NmdWwsIEZBTFNFIGluIGNhc2UgYW4gZXJyb3Igb2NjdXJyZWQuCi0gKi8KLWdib29sZWFuCi1nc3RfbnRwX3BhY2tldF9zZW5kIChjb25zdCBHc3ROdHBQYWNrZXQgKiBwYWNrZXQsCi0gICAgR1NvY2tldCAqIHNvY2tldCwgR1NvY2tldEFkZHJlc3MgKiBkZXN0X2FkZHJlc3MsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgZ2Jvb2xlYW4gd2FzX2Jsb2NraW5nOwotICBndWludDggKmJ1ZmZlcjsKLSAgZ3NzaXplIHJlczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocGFja2V0ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU09DS0VUIChzb2NrZXQpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NPQ0tFVF9BRERSRVNTIChkZXN0X2FkZHJlc3MpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlcnJvciA9PSBOVUxMIHx8ICplcnJvciA9PSBOVUxMLCBGQUxTRSk7Ci0KLSAgd2FzX2Jsb2NraW5nID0gZ19zb2NrZXRfZ2V0X2Jsb2NraW5nIChzb2NrZXQpOwotCi0gIGlmICh3YXNfYmxvY2tpbmcpCi0gICAgZ19zb2NrZXRfc2V0X2Jsb2NraW5nIChzb2NrZXQsIEZBTFNFKTsKLQotICAvKiBGSVhNRTogYXZvaWQgcG9pbnRsZXNzIGFsbG9jL2ZyZWUsIHNlcmlhbGlzZSBpbnRvIHN0YWNrLWFsbG9jYXRlZCBidWZmZXIgKi8KLSAgYnVmZmVyID0gZ3N0X250cF9wYWNrZXRfc2VyaWFsaXplIChwYWNrZXQpOwotCi0gIHJlcyA9IGdfc29ja2V0X3NlbmRfdG8gKHNvY2tldCwgZGVzdF9hZGRyZXNzLCAoY29uc3QgZ2NoYXIgKikgYnVmZmVyLAotICAgICAgR1NUX05UUF9QQUNLRVRfU0laRSwgTlVMTCwgZXJyb3IpOwotCi0gIC8qIGRhdGFncmFtIHBhY2tldHMgc2hvdWxkIGJlIHNlbnQgYXMgYSB3aG9sZSBvciBub3QgYXQgYWxsICovCi0gIGdfYXNzZXJ0IChyZXMgPCAwIHx8IHJlcyA9PSBHU1RfTlRQX1BBQ0tFVF9TSVpFKTsKLQotICBnX2ZyZWUgKGJ1ZmZlcik7Ci0KLSAgaWYgKHdhc19ibG9ja2luZykKLSAgICBnX3NvY2tldF9zZXRfYmxvY2tpbmcgKHNvY2tldCwgVFJVRSk7Ci0KLSAgcmV0dXJuIChyZXMgPT0gR1NUX05UUF9QQUNLRVRfU0laRSk7Ci19Ci0KLUdRdWFyawotZ3N0X250cF9lcnJvcl9xdWFyayAodm9pZCkKLXsKLSAgc3RhdGljIEdRdWFyayBxdWFyazsKLQotICAvKiBUaHJlYWQtc2FmZSBiZWNhdXNlIEdRdWFyayBpcyAqLwotICBpZiAoIXF1YXJrKQotICAgIHF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJnc3QtbnRwLWVycm9yLXF1YXJrIik7Ci0KLSAgcmV0dXJuIHF1YXJrOwotfQpkaWZmIC0tZ2l0IGEvbGlicy9nc3QvbmV0L2dzdG50cHBhY2tldC5oIGIvbGlicy9nc3QvbmV0L2dzdG50cHBhY2tldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWNkNWU4Li4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RudHBwYWNrZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9OVFBfUEFDS0VUX0hfXwotI2RlZmluZSBfX0dTVF9OVFBfUEFDS0VUX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKioKLSAqIEdTVF9OVFBfUEFDS0VUX1NJWkU6Ci0gKgotICogVGhlIHNpemUgb2YgdGhlIHBhY2tldHMgc2VudCBiZXR3ZWVuIE5UUCBjbG9ja3MuCi0gKi8KLSNkZWZpbmUgR1NUX05UUF9QQUNLRVRfU0laRSA0OAotCi10eXBlZGVmIHN0cnVjdCBfR3N0TnRwUGFja2V0IEdzdE50cFBhY2tldDsKLQotLyoqCi0gKiBHc3ROdHBQYWNrZXQ6Ci0gKiBAb3JpZ2luX3RpbWU6IHRoZSB0aW1lIHRoZSBjbGllbnQgcGFja2V0IHdhcyBzZW50IGZvciB0aGUgc2VydmVyCi0gKiBAcmVjZWl2ZV90aW1lOiB0aGUgdGltZSB0aGUgY2xpZW50IHBhY2tldCB3YXMgcmVjZWl2ZWQKLSAqIEB0cmFuc21pdF90aW1lOiB0aGUgdGltZSB0aGUgcGFja2V0IHdhcyBzZW50Ci0gKiBAcG9sbF9pbnRlcnZhbDogbWF4aW11bSBwb2xsIGludGVydmFsCi0gKgotICogQ29udGVudCBvZiBhICNHc3ROdHBQYWNrZXQuCi0gKi8KLXN0cnVjdCBfR3N0TnRwUGFja2V0IHsKLSAgR3N0Q2xvY2tUaW1lIG9yaWdpbl90aW1lOwotICBHc3RDbG9ja1RpbWUgcmVjZWl2ZV90aW1lOwotICBHc3RDbG9ja1RpbWUgdHJhbnNtaXRfdGltZTsKLQotICBHc3RDbG9ja1RpbWUgcG9sbF9pbnRlcnZhbDsKLX07Ci0KLUdUeXBlIGdzdF9udHBfcGFja2V0X2dldF90eXBlKHZvaWQpIEdfR05VQ19JTlRFUk5BTDsKLQotZW51bSB7Ci0gIEdTVF9OVFBfRVJST1JfV1JPTkdfVkVSU0lPTiwKLSAgR1NUX05UUF9FUlJPUl9LT0RfREVOWSwKLSAgR1NUX05UUF9FUlJPUl9LT0RfUkFURSwKLSAgR1NUX05UUF9FUlJPUl9LT0RfVU5LTk9XTgotfTsKLQotR1F1YXJrIGdzdF9udHBfZXJyb3JfcXVhcmsgKHZvaWQpIEdfR05VQ19JTlRFUk5BTDsKLSNkZWZpbmUgR1NUX05UUF9FUlJPUiAoZ3N0X250cF9lcnJvcl9xdWFyayAoKSkKLQotR3N0TnRwUGFja2V0KiAgICAgICAgICAgZ3N0X250cF9wYWNrZXRfbmV3ICAgICAgICAgKGNvbnN0IGd1aW50OCAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICoqIGVycm9yKSBHX0dOVUNfSU5URVJOQUw7Ci1Hc3ROdHBQYWNrZXQqICAgICAgICAgICBnc3RfbnRwX3BhY2tldF9jb3B5ICAgICAgICAoY29uc3QgR3N0TnRwUGFja2V0ICpwYWNrZXQpIEdfR05VQ19JTlRFUk5BTDsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9udHBfcGFja2V0X2ZyZWUgICAgICAgIChHc3ROdHBQYWNrZXQgKnBhY2tldCkgR19HTlVDX0lOVEVSTkFMOwotCi1ndWludDgqICAgICAgICAgICAgICAgICBnc3RfbnRwX3BhY2tldF9zZXJpYWxpemUgICAoY29uc3QgR3N0TnRwUGFja2V0ICpwYWNrZXQpIEdfR05VQ19JTlRFUk5BTDsKLQotR3N0TnRwUGFja2V0KiAgICAgICAgICAgZ3N0X250cF9wYWNrZXRfcmVjZWl2ZSAgICAgKEdTb2NrZXQgICAgICAgICAqIHNvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU29ja2V0QWRkcmVzcyAqKiBzcmNfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAqKiBlcnJvcikgR19HTlVDX0lOVEVSTkFMOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfbnRwX3BhY2tldF9zZW5kICAgICAgICAoY29uc3QgR3N0TnRwUGFja2V0ICogcGFja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTb2NrZXQgICAgICAgICAgICAqIHNvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU29ja2V0QWRkcmVzcyAgICAgKiBkZXN0X2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgKiogZXJyb3IpIEdfR05VQ19JTlRFUk5BTDsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX05FVF9USU1FX1BBQ0tFVF9IX18gKi8KZGlmZiAtLWdpdCBhL2xpYnMvZ3N0L25ldC9nc3RwdHBfcHJpdmF0ZS5oIGIvbGlicy9nc3QvbmV0L2dzdHB0cF9wcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZTBlMDcuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvbmV0L2dzdHB0cF9wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jaWZuZGVmIF9fR1NUX1BUUF9QUklWQVRFX0hfXwotI2RlZmluZSBfX0dTVF9QVFBfUFJJVkFURV9IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotZW51bQotewotICBUWVBFX0VWRU5ULAotICBUWVBFX0dFTkVSQUwsCi0gIFRZUEVfQ0xPQ0tfSUQKLX07Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50MTYgc2l6ZTsKLSAgZ3VpbnQ4IHR5cGU7Ci19IFN0ZElPSGVhZGVyOwotCi0jZW5kaWYgLyogX19HU1RfUFRQX1BSSVZBVEVfSF9fICovCmRpZmYgLS1naXQgYS9saWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suYyBiL2xpYnMvZ3N0L25ldC9nc3RwdHBjbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTI4ZGEyLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RwdHBjbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYxMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmdzdHB0cGNsb2NrCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IFNwZWNpYWwgY2xvY2sgdGhhdCBzeW5jaHJvbml6ZXMgdG8gYSByZW1vdGUgdGltZQotICogICAgICAgICAgICAgICAgICAgICBwcm92aWRlciB2aWEgUFRQIChJRUVFMTU4ODoyMDA4KS4KLSAqIEBzZWVfYWxzbzogI0dzdENsb2NrLCAjR3N0TmV0Q2xpZW50Q2xvY2ssICNHc3RQaXBlbGluZQotICoKLSAqIEdzdFB0cENsb2NrIGltcGxlbWVudHMgYSBQVFAgKElFRUUxNTg4OjIwMDgpIG9yZGluYXJ5IGNsb2NrIGluIHNsYXZlLW9ubHkKLSAqIG1vZGUsIHRoYXQgYWxsb3dzIGEgR1N0cmVhbWVyIHBpcGVsaW5lIHRvIHN5bmNocm9uaXplIHRvIGEgUFRQIG5ldHdvcmsKLSAqIGNsb2NrIGluIHNvbWUgc3BlY2lmaWMgZG9tYWluLgotICoKLSAqIFRoZSBQVFAgc3Vic3lzdGVtIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIGdzdF9wdHBfaW5pdCgpLCB3aGljaCB0aGVuIHN0YXJ0cwotICogYSBoZWxwZXIgcHJvY2VzcyB0byBkbyB0aGUgYWN0dWFsIGNvbW11bmljYXRpb24gdmlhIHRoZSBQVFAgcG9ydHMuIFRoaXMgaXMKLSAqIHJlcXVpcmVkIGFzIFBUUCBsaXN0ZW5zIG9uIHBvcnRzIDwgMTAyNCBhbmQgdGh1cyByZXF1aXJlcyBzcGVjaWFsCi0gKiBwcml2aWxlZ2VzLiBPbmNlIHRoaXMgaGVscGVyIHByb2Nlc3MgaXMgc3RhcnRlZCwgdGhlIG1haW4gcHJvY2VzcyB3aWxsCi0gKiBzeW5jaHJvbml6ZSB0byBhbGwgUFRQIGRvbWFpbnMgdGhhdCBhcmUgZGV0ZWN0ZWQgb24gdGhlIHNlbGVjdGVkCi0gKiBpbnRlcmZhY2VzLgotICoKLSAqIGdzdF9wdHBfY2xvY2tfbmV3KCkgdGhlbiBhbGxvd3MgdG8gY3JlYXRlIGEgR3N0Q2xvY2sgdGhhdCBwcm92aWRlcyB0aGUgUFRQCi0gKiB0aW1lIGZyb20gYSBtYXN0ZXIgY2xvY2sgaW5zaWRlIGEgc3BlY2lmaWMgUFRQIGRvbWFpbi4gVGhpcyBjbG9jayB3aWxsIG9ubHkKLSAqIHJldHVybiB2YWxpZCB0aW1lc3RhbXBzIG9uY2UgdGhlIHRpbWVzdGFtcHMgaW4gdGhlIFBUUCBkb21haW4gYXJlIGtub3duLiBUbwotICogY2hlY2sgdGhpcywgeW91IGNhbiB1c2UgZ3N0X2Nsb2NrX3dhaXRfZm9yX3N5bmMoKSwgdGhlIEdzdENsb2NrOjpzeW5jZWQKLSAqIHNpZ25hbCBhbmQgZ3N0X2Nsb2NrX2lzX3N5bmNlZCgpLgotICoKLSAqCi0gKiBUbyBnYXRoZXIgc3RhdGlzdGljcyBhYm91dCB0aGUgUFRQIGNsb2NrIHN5bmNocm9uaXphdGlvbiwKLSAqIGdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQoKSBjYW4gYmUgdXNlZC4gVGhpcyBnaXZlcyB0aGUgYXBwbGljYXRpb24KLSAqIHRoZSBwb3NzaWJpbGl0eSB0byBjb2xsZWN0IGFsbCBraW5kcyBvZiBzdGF0aXN0aWNzIGZyb20gdGhlIGNsb2NrCi0gKiBzeW5jaHJvbml6YXRpb24uCi0gKgotICogU2luY2U6IDEuNgotICoKLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0cHRwY2xvY2suaCIKLQotI2luY2x1ZGUgImdzdHB0cF9wcml2YXRlLmgiCi0KLSNpZmRlZiBIQVZFX1NZU19XQUlUX0gKLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2VuZGlmCi0jaWZkZWYgR19PU19XSU4zMgotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZWxpZiBkZWZpbmVkKEdfT1NfV0lOMzIpCi0jaW5jbHVkZSA8aW8uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvYmFzZS5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChwdHBfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHB0cF9kZWJ1ZykKLQotLyogSUVFRSAxNTg4IDcuNy4zLjEgKi8KLSNkZWZpbmUgUFRQX0FOTk9VTkNFX1JFQ0VJUFRfVElNRU9VVCA0Ci0KLS8qIFVzZSBhIHJ1bm5pbmcgYXZlcmFnZSBmb3IgY2FsY3VsYXRpbmcgdGhlIG1lYW4gcGF0aCBkZWxheSBpbnN0ZWFkCi0gKiBvZiBqdXN0IHVzaW5nIHRoZSBsYXN0IG1lYXN1cmVtZW50LiBFbmFibGluZyB0aGlzIGhlbHBzIGluIHVucmVsaWFibGUKLSAqIG5ldHdvcmtzLCBsaWtlIHdpZmksIHdpdGggb2Z0ZW4gY2hhbmdpbmcgZGVsYXlzCi0gKgotICogVW5kZWYgZm9yIGZvbGxvd2luZyBJRUVFMTU4OC0yMDA4IGJ5IHRoZSBsZXR0ZXIKLSAqLwotI2RlZmluZSBVU0VfUlVOTklOR19BVkVSQUdFX0RFTEFZIDEKLQotLyogRmlsdGVyIG91dCBhbnkgbWVhc3VyZW1lbnRzIHRoYXQgYXJlIGFib3ZlIGEgY2VydGFpbiB0aHJlc2hvbGQgY29tcGFyZWQgdG8KLSAqIHByZXZpb3VzIG1lYXN1cmVtZW50cy4gRW5hYmxpbmcgdGhpcyBoZWxwcyBmaWx0ZXJpbmcgb3V0IG91dGxpZXJzIHRoYXQKLSAqIGhhcHBlbiBmYWlybHkgb2Z0ZW4gaW4gdW5yZWxpYWJsZSBuZXR3b3JrcywgbGlrZSB3aWZpLgotICoKLSAqIFVuZGVmIGZvciBmb2xsb3dpbmcgSUVFRTE1ODgtMjAwOCBieSB0aGUgbGV0dGVyCi0gKi8KLSNkZWZpbmUgVVNFX01FQVNVUkVNRU5UX0ZJTFRFUklORyAxCi0KLS8qIFNlbGVjdCB0aGUgZmlyc3QgY2xvY2sgZnJvbSB3aGljaCB3ZSBjYXB0dXJlIGEgU1lOQyBtZXNzYWdlIGFzIHRoZSBtYXN0ZXIKLSAqIGNsb2NrIG9mIHRoZSBkb21haW4gdW50aWwgd2UgYXJlIHJlYWR5IHRvIHJ1biB0aGUgYmVzdCBtYXN0ZXIgY2xvY2sKLSAqIGFsZ29yaXRobS4gVGhpcyBhbGxvd3MgZmFzdGVyIHN5bmNpbmcgYnV0IG1pZ2h0IG1lYW4gYSBjaGFuZ2Ugb2YgdGhlIG1hc3RlcgotICogY2xvY2sgaW4gdGhlIGJlZ2lubmluZy4gQXMgYWxsIGNsb2NrcyBpbiBhIGRvbWFpbiBhcmUgc3VwcG9zZWQgdG8gdXNlIHRoZQotICogc2FtZSB0aW1lLCB0aGlzIHNob3VsZG4ndCBiZSBtdWNoIG9mIGEgcHJvYmxlbS4KLSAqCi0gKiBVbmRlZiBmb3IgZm9sbG93aW5nIElFRUUxNTg4LTIwMDggYnkgdGhlIGxldHRlcgotICovCi0jZGVmaW5lIFVTRV9PUFBPUlRVTklTVElDX0NMT0NLX1NFTEVDVElPTiAxCi0KLS8qIE9ubHkgY29uc2lkZXIgU1lOQyBtZXNzYWdlcyBmb3Igd2hpY2ggd2UgYXJlIGFsbG93ZWQgdG8gc2VuZCBhIERFTEFZX1JFUQotICogYWZ0ZXJ3YXJkcy4gVGhpcyBhbGxvd3MgYmV0dGVyIHN5bmNocm9uaXphdGlvbiBpbiBuZXR3b3JrcyB3aXRoIHZhcnlpbmcKLSAqIGRlbGF5cywgYXMgZm9yIGV2ZXJ5IG90aGVyIFNZTkMgbWVzc2FnZSB3ZSB3b3VsZCBoYXZlIHRvIGFzc3VtZSB0aGF0IGl0J3MKLSAqIHRoZSBhdmVyYWdlIG9mIHdoYXQgd2Ugc2F3IGJlZm9yZS4gQnV0IHRoYXQgbWlnaHQgYmUgY29tcGxldGVseSBvZmYKLSAqLwotI2RlZmluZSBVU0VfT05MWV9TWU5DX1dJVEhfREVMQVkgMQotCi0vKiBGaWx0ZXIgb3V0IGRlbGF5IG1lYXN1cmVtZW50cyB0aGF0IGFyZSB0b28gZmFyIGF3YXkgZnJvbSB0aGUgbWVkaWFuIG9mIHRoZQotICogbGFzdCBkZWxheSBtZWFzdXJlbWVudHMsIGN1cnJlbnRseSB0aG9zZSB0aGF0IGFyZSBtb3JlIHRoYW4gMiB0aW1lcyBhcyBiaWcuCi0gKiBUaGlzIGluY3JlYXNlcyBhY2N1cmFjeSBhIGxvdCBvbiB3aWZpLgotICovCi0jZGVmaW5lIFVTRV9NRURJQU5fUFJFX0ZJTFRFUklORyAxCi0jZGVmaW5lIE1FRElBTl9QUkVfRklMVEVSSU5HX1dJTkRPVyA5Ci0KLS8qIEhvdyBtYW55IHVwZGF0ZXMgc2hvdWxkIGJlIHNraXBwZWQgYXQgbWF4aW11bSB3aGVuIHVzaW5nIFVTRV9NRUFTVVJFTUVOVF9GSUxURVJJTkcgKi8KLSNkZWZpbmUgTUFYX1NLSVBQRURfVVBEQVRFUyA1Ci0KLXR5cGVkZWYgZW51bQotewotICBQVFBfTUVTU0FHRV9UWVBFX1NZTkMgPSAweDAsCi0gIFBUUF9NRVNTQUdFX1RZUEVfREVMQVlfUkVRID0gMHgxLAotICBQVFBfTUVTU0FHRV9UWVBFX1BERUxBWV9SRVEgPSAweDIsCi0gIFBUUF9NRVNTQUdFX1RZUEVfUERFTEFZX1JFU1AgPSAweDMsCi0gIFBUUF9NRVNTQUdFX1RZUEVfRk9MTE9XX1VQID0gMHg4LAotICBQVFBfTUVTU0FHRV9UWVBFX0RFTEFZX1JFU1AgPSAweDksCi0gIFBUUF9NRVNTQUdFX1RZUEVfUERFTEFZX1JFU1BfRk9MTE9XX1VQID0gMHhBLAotICBQVFBfTUVTU0FHRV9UWVBFX0FOTk9VTkNFID0gMHhCLAotICBQVFBfTUVTU0FHRV9UWVBFX1NJR05BTElORyA9IDB4QywKLSAgUFRQX01FU1NBR0VfVFlQRV9NQU5BR0VNRU5UID0gMHhECi19IFB0cE1lc3NhZ2VUeXBlOwotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDY0IHNlY29uZHNfZmllbGQ7ICAgICAgICAvKiA0OCBiaXRzIHZhbGlkICovCi0gIGd1aW50MzIgbmFub3NlY29uZHNfZmllbGQ7Ci19IFB0cFRpbWVzdGFtcDsKLQotI2RlZmluZSBQVFBfVElNRVNUQU1QX1RPX0dTVF9DTE9DS19USU1FKHB0cCkgKHB0cC5zZWNvbmRzX2ZpZWxkICogR1NUX1NFQ09ORCArIHB0cC5uYW5vc2Vjb25kc19maWVsZCkKLSNkZWZpbmUgR1NUX0NMT0NLX1RJTUVfVE9fUFRQX1RJTUVTVEFNUF9TRUNPTkRTKGdzdCkgKCgoR3N0Q2xvY2tUaW1lKSBnc3QpIC8gR1NUX1NFQ09ORCkKLSNkZWZpbmUgR1NUX0NMT0NLX1RJTUVfVE9fUFRQX1RJTUVTVEFNUF9OQU5PU0VDT05EUyhnc3QpICgoKEdzdENsb2NrVGltZSkgZ3N0KSAlIEdTVF9TRUNPTkQpCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50NjQgY2xvY2tfaWRlbnRpdHk7Ci0gIGd1aW50MTYgcG9ydF9udW1iZXI7Ci19IFB0cENsb2NrSWRlbnRpdHk7Ci0KLXN0YXRpYyBnaW50Ci1jb21wYXJlX2Nsb2NrX2lkZW50aXR5IChjb25zdCBQdHBDbG9ja0lkZW50aXR5ICogYSwgY29uc3QgUHRwQ2xvY2tJZGVudGl0eSAqIGIpCi17Ci0gIGlmIChhLT5jbG9ja19pZGVudGl0eSA8IGItPmNsb2NrX2lkZW50aXR5KQotICAgIHJldHVybiAtMTsKLSAgZWxzZSBpZiAoYS0+Y2xvY2tfaWRlbnRpdHkgPiBiLT5jbG9ja19pZGVudGl0eSkKLSAgICByZXR1cm4gMTsKLQotICBpZiAoYS0+cG9ydF9udW1iZXIgPCBiLT5wb3J0X251bWJlcikKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UgaWYgKGEtPnBvcnRfbnVtYmVyID4gYi0+cG9ydF9udW1iZXIpCi0gICAgcmV0dXJuIDE7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50OCBjbG9ja19jbGFzczsKLSAgZ3VpbnQ4IGNsb2NrX2FjY3VyYWN5OwotICBndWludDE2IG9mZnNldF9zY2FsZWRfbG9nX3ZhcmlhbmNlOwotfSBQdHBDbG9ja1F1YWxpdHk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50OCB0cmFuc3BvcnRfc3BlY2lmaWM7Ci0gIFB0cE1lc3NhZ2VUeXBlIG1lc3NhZ2VfdHlwZTsKLSAgLyogZ3VpbnQ4IHJlc2VydmVkOyAqLwotICBndWludDggdmVyc2lvbl9wdHA7Ci0gIGd1aW50MTYgbWVzc2FnZV9sZW5ndGg7Ci0gIGd1aW50OCBkb21haW5fbnVtYmVyOwotICAvKiBndWludDggcmVzZXJ2ZWQ7ICovCi0gIGd1aW50MTYgZmxhZ19maWVsZDsKLSAgZ2ludDY0IGNvcnJlY3Rpb25fZmllbGQ7ICAgICAgLyogNDguMTYgZml4ZWQgcG9pbnQgbmFub3NlY29uZHMgKi8KLSAgLyogZ3VpbnQzMiByZXNlcnZlZDsgKi8KLSAgUHRwQ2xvY2tJZGVudGl0eSBzb3VyY2VfcG9ydF9pZGVudGl0eTsKLSAgZ3VpbnQxNiBzZXF1ZW5jZV9pZDsKLSAgZ3VpbnQ4IGNvbnRyb2xfZmllbGQ7Ci0gIGdpbnQ4IGxvZ19tZXNzYWdlX2ludGVydmFsOwotCi0gIHVuaW9uCi0gIHsKLSAgICBzdHJ1Y3QKLSAgICB7Ci0gICAgICBQdHBUaW1lc3RhbXAgb3JpZ2luX3RpbWVzdGFtcDsKLSAgICAgIGdpbnQxNiBjdXJyZW50X3V0Y19vZmZzZXQ7Ci0gICAgICAvKiBndWludDggcmVzZXJ2ZWQ7ICovCi0gICAgICBndWludDggZ3JhbmRtYXN0ZXJfcHJpb3JpdHlfMTsKLSAgICAgIFB0cENsb2NrUXVhbGl0eSBncmFuZG1hc3Rlcl9jbG9ja19xdWFsaXR5OwotICAgICAgZ3VpbnQ4IGdyYW5kbWFzdGVyX3ByaW9yaXR5XzI7Ci0gICAgICBndWludDY0IGdyYW5kbWFzdGVyX2lkZW50aXR5OwotICAgICAgZ3VpbnQxNiBzdGVwc19yZW1vdmVkOwotICAgICAgZ3VpbnQ4IHRpbWVfc291cmNlOwotICAgIH0gYW5ub3VuY2U7Ci0KLSAgICBzdHJ1Y3QKLSAgICB7Ci0gICAgICBQdHBUaW1lc3RhbXAgb3JpZ2luX3RpbWVzdGFtcDsKLSAgICB9IHN5bmM7Ci0KLSAgICBzdHJ1Y3QKLSAgICB7Ci0gICAgICBQdHBUaW1lc3RhbXAgcHJlY2lzZV9vcmlnaW5fdGltZXN0YW1wOwotICAgIH0gZm9sbG93X3VwOwotCi0gICAgc3RydWN0Ci0gICAgewotICAgICAgUHRwVGltZXN0YW1wIG9yaWdpbl90aW1lc3RhbXA7Ci0gICAgfSBkZWxheV9yZXE7Ci0KLSAgICBzdHJ1Y3QKLSAgICB7Ci0gICAgICBQdHBUaW1lc3RhbXAgcmVjZWl2ZV90aW1lc3RhbXA7Ci0gICAgICBQdHBDbG9ja0lkZW50aXR5IHJlcXVlc3RpbmdfcG9ydF9pZGVudGl0eTsKLSAgICB9IGRlbGF5X3Jlc3A7Ci0KLSAgfSBtZXNzYWdlX3NwZWNpZmljOwotfSBQdHBNZXNzYWdlOwotCi1zdGF0aWMgR011dGV4IHB0cF9sb2NrOwotc3RhdGljIEdDb25kIHB0cF9jb25kOwotc3RhdGljIGdib29sZWFuIGluaXR0ZWQgPSBGQUxTRTsKLSNpZmRlZiBIQVZFX1BUUAotc3RhdGljIGdib29sZWFuIHN1cHBvcnRlZCA9IFRSVUU7Ci0jZWxzZQotc3RhdGljIGdib29sZWFuIHN1cHBvcnRlZCA9IEZBTFNFOwotI2VuZGlmCi1zdGF0aWMgR1BpZCBwdHBfaGVscGVyX3BpZDsKLXN0YXRpYyBHVGhyZWFkICpwdHBfaGVscGVyX3RocmVhZDsKLXN0YXRpYyBHTWFpbkNvbnRleHQgKm1haW5fY29udGV4dDsKLXN0YXRpYyBHTWFpbkxvb3AgKm1haW5fbG9vcDsKLXN0YXRpYyBHSU9DaGFubmVsICpzdGRpbl9jaGFubmVsLCAqc3Rkb3V0X2NoYW5uZWw7Ci1zdGF0aWMgR1JhbmQgKmRlbGF5X3JlcV9yYW5kOwotc3RhdGljIEdzdENsb2NrICpvYnNlcnZhdGlvbl9zeXN0ZW1fY2xvY2s7Ci1zdGF0aWMgUHRwQ2xvY2tJZGVudGl0eSBwdHBfY2xvY2tfaWQgPSB7IEdTVF9QVFBfQ0xPQ0tfSURfTk9ORSwgMCB9OwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RDbG9ja1RpbWUgcmVjZWl2ZV90aW1lOwotCi0gIFB0cENsb2NrSWRlbnRpdHkgbWFzdGVyX2Nsb2NrX2lkZW50aXR5OwotCi0gIGd1aW50OCBncmFuZG1hc3Rlcl9wcmlvcml0eV8xOwotICBQdHBDbG9ja1F1YWxpdHkgZ3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eTsKLSAgZ3VpbnQ4IGdyYW5kbWFzdGVyX3ByaW9yaXR5XzI7Ci0gIGd1aW50NjQgZ3JhbmRtYXN0ZXJfaWRlbnRpdHk7Ci0gIGd1aW50MTYgc3RlcHNfcmVtb3ZlZDsKLSAgZ3VpbnQ4IHRpbWVfc291cmNlOwotCi0gIGd1aW50MTYgc2VxdWVuY2VfaWQ7Ci19IFB0cEFubm91bmNlTWVzc2FnZTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgUHRwQ2xvY2tJZGVudGl0eSBtYXN0ZXJfY2xvY2tfaWRlbnRpdHk7Ci0KLSAgR3N0Q2xvY2tUaW1lIGFubm91bmNlX2ludGVydmFsOyAgICAgICAvKiBsYXN0IGludGVydmFsIHdlIHJlY2VpdmVkICovCi0gIEdRdWV1ZSBhbm5vdW5jZV9tZXNzYWdlczsKLX0gUHRwQW5ub3VuY2VTZW5kZXI7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50IGRvbWFpbjsKLSAgUHRwQ2xvY2tJZGVudGl0eSBtYXN0ZXJfY2xvY2tfaWRlbnRpdHk7Ci0KLSAgZ3VpbnQxNiBzeW5jX3NlcW51bTsKLSAgR3N0Q2xvY2tUaW1lIHN5bmNfcmVjdl90aW1lX2xvY2FsOyAgICAvKiB0MiAqLwotICBHc3RDbG9ja1RpbWUgc3luY19zZW5kX3RpbWVfcmVtb3RlOyAgIC8qIHQxLCBtaWdodCBiZSAtMSBpZiBGT0xMT1dfVVAgcGVuZGluZyAqLwotICBHc3RDbG9ja1RpbWUgZm9sbG93X3VwX3JlY3ZfdGltZV9sb2NhbDsKLQotICBHU291cmNlICp0aW1lb3V0X3NvdXJjZTsKLSAgZ3VpbnQxNiBkZWxheV9yZXFfc2VxbnVtOwotICBHc3RDbG9ja1RpbWUgZGVsYXlfcmVxX3NlbmRfdGltZV9sb2NhbDsgICAgICAgLyogdDMsIC0xIGlmIHdlIHdhaXQgZm9yIEZPTExPV19VUCAqLwotICBHc3RDbG9ja1RpbWUgZGVsYXlfcmVxX3JlY3ZfdGltZV9yZW1vdGU7ICAgICAgLyogdDQsIC0xIGlmIHdlIHdhaXQgKi8KLSAgR3N0Q2xvY2tUaW1lIGRlbGF5X3Jlc3BfcmVjdl90aW1lX2xvY2FsOwotCi0gIGdpbnQ2NCBjb3JyZWN0aW9uX2ZpZWxkX3N5bmM7IC8qIHN1bSBvZiB0aGUgY29ycmVjdGlvbiBmaWVsZHMgb2YgU1lOQy9GT0xMT1dfVVAgKi8KLSAgZ2ludDY0IGNvcnJlY3Rpb25fZmllbGRfZGVsYXk7ICAgICAgICAvKiBzdW0gb2YgdGhlIGNvcnJlY3Rpb24gZmllbGRzIG9mIERFTEFZX1JFU1AgKi8KLX0gUHRwUGVuZGluZ1N5bmM7Ci0KLXN0YXRpYyB2b2lkCi1wdHBfcGVuZGluZ19zeW5jX2ZyZWUgKFB0cFBlbmRpbmdTeW5jICogc3luYykKLXsKLSAgaWYgKHN5bmMtPnRpbWVvdXRfc291cmNlKQotICAgIGdfc291cmNlX2Rlc3Ryb3kgKHN5bmMtPnRpbWVvdXRfc291cmNlKTsKLSAgZ19mcmVlIChzeW5jKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQgZG9tYWluOwotCi0gIEdzdENsb2NrVGltZSBsYXN0X3B0cF90aW1lOwotICBHc3RDbG9ja1RpbWUgbGFzdF9sb2NhbF90aW1lOwotICBnaW50IHNraXBwZWRfdXBkYXRlczsKLQotICAvKiBVc2VkIGZvciBzZWxlY3RpbmcgdGhlIG1hc3Rlci9ncmFuZG1hc3RlciAqLwotICBHTGlzdCAqYW5ub3VuY2Vfc2VuZGVyczsKLQotICAvKiBMYXN0IHNlbGVjdGVkIG1hc3RlciBjbG9jayAqLwotICBnYm9vbGVhbiBoYXZlX21hc3Rlcl9jbG9jazsKLSAgUHRwQ2xvY2tJZGVudGl0eSBtYXN0ZXJfY2xvY2tfaWRlbnRpdHk7Ci0gIGd1aW50NjQgZ3JhbmRtYXN0ZXJfaWRlbnRpdHk7Ci0KLSAgLyogTGFzdCBTWU5DIG9yIEZPTExPV19VUCB0aW1lc3RhbXAgd2UgcmVjZWl2ZWQgKi8KLSAgR3N0Q2xvY2tUaW1lIGxhc3RfcHRwX3N5bmNfdGltZTsKLSAgR3N0Q2xvY2tUaW1lIHN5bmNfaW50ZXJ2YWw7Ci0KLSAgR3N0Q2xvY2tUaW1lIG1lYW5fcGF0aF9kZWxheTsKLSAgR3N0Q2xvY2tUaW1lIGxhc3RfZGVsYXlfcmVxLCBtaW5fZGVsYXlfcmVxX2ludGVydmFsOwotICBndWludDE2IGxhc3RfZGVsYXlfcmVxX3NlcW51bTsKLQotICBHc3RDbG9ja1RpbWUgbGFzdF9wYXRoX2RlbGF5c1tNRURJQU5fUFJFX0ZJTFRFUklOR19XSU5ET1ddOwotICBnaW50IGxhc3RfcGF0aF9kZWxheXNfbWlzc2luZzsKLQotICBHUXVldWUgcGVuZGluZ19zeW5jczsKLQotICBHc3RDbG9jayAqZG9tYWluX2Nsb2NrOwotfSBQdHBEb21haW5EYXRhOwotCi1zdGF0aWMgR0xpc3QgKmRvbWFpbl9kYXRhOwotc3RhdGljIEdNdXRleCBkb21haW5fY2xvY2tzX2xvY2s7Ci1zdGF0aWMgR0xpc3QgKmRvbWFpbl9jbG9ja3M7Ci0KLS8qIFByb3RlY3RlZCBieSBQVFAgbG9jayAqLwotc3RhdGljIHZvaWQgZW1pdF9wdHBfc3RhdGlzdGljcyAoZ3VpbnQ4IGRvbWFpbiwgY29uc3QgR3N0U3RydWN0dXJlICogc3RhdHMpOwotc3RhdGljIEdIb29rTGlzdCBkb21haW5fc3RhdHNfaG9va3M7Ci1zdGF0aWMgZ2ludCBkb21haW5fc3RhdHNfbl9ob29rczsKLXN0YXRpYyBnYm9vbGVhbiBkb21haW5fc3RhdHNfaG9va3NfaW5pdHRlZCA9IEZBTFNFOwotCi0vKiBDb252ZXJ0cyBsb2cyIHNlY29uZHMgdG8gR3N0Q2xvY2tUaW1lICovCi1zdGF0aWMgR3N0Q2xvY2tUaW1lCi1sb2cyX3RvX2Nsb2NrX3RpbWUgKGdpbnQgbCkKLXsKLSAgaWYgKGwgPCAwKQotICAgIHJldHVybiBHU1RfU0VDT05EID4+ICgtbCk7Ci0gIGVsc2UKLSAgICByZXR1cm4gR1NUX1NFQ09ORCA8PCBsOwotfQotCi1zdGF0aWMgdm9pZAotZHVtcF9wdHBfbWVzc2FnZSAoUHRwTWVzc2FnZSAqIG1zZykKLXsKLSAgR1NUX1RSQUNFICgiUFRQIG1lc3NhZ2U6Iik7Ci0gIEdTVF9UUkFDRSAoIlx0dHJhbnNwb3J0X3NwZWNpZmljOiAldSIsIG1zZy0+dHJhbnNwb3J0X3NwZWNpZmljKTsKLSAgR1NUX1RSQUNFICgiXHRtZXNzYWdlX3R5cGU6IDB4JTAxeCIsIG1zZy0+bWVzc2FnZV90eXBlKTsKLSAgR1NUX1RSQUNFICgiXHR2ZXJzaW9uX3B0cDogJXUiLCBtc2ctPnZlcnNpb25fcHRwKTsKLSAgR1NUX1RSQUNFICgiXHRtZXNzYWdlX2xlbmd0aDogJXUiLCBtc2ctPm1lc3NhZ2VfbGVuZ3RoKTsKLSAgR1NUX1RSQUNFICgiXHRkb21haW5fbnVtYmVyOiAldSIsIG1zZy0+ZG9tYWluX251bWJlcik7Ci0gIEdTVF9UUkFDRSAoIlx0ZmxhZ19maWVsZDogMHglMDR4IiwgbXNnLT5mbGFnX2ZpZWxkKTsKLSAgR1NUX1RSQUNFICgiXHRjb3JyZWN0aW9uX2ZpZWxkOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIi4lMDN1IiwKLSAgICAgIChtc2ctPmNvcnJlY3Rpb25fZmllbGQgLyA2NTUzNiksCi0gICAgICAoZ3VpbnQpICgobXNnLT5jb3JyZWN0aW9uX2ZpZWxkICYgMHhmZmZmKSAqIDEwMDApIC8gNjU1MzYpOwotICBHU1RfVFJBQ0UgKCJcdHNvdXJjZV9wb3J0X2lkZW50aXR5OiAweCUwMTYiIEdfR0lOVDY0X01PRElGSUVSICJ4ICV1IiwKLSAgICAgIG1zZy0+c291cmNlX3BvcnRfaWRlbnRpdHkuY2xvY2tfaWRlbnRpdHksCi0gICAgICBtc2ctPnNvdXJjZV9wb3J0X2lkZW50aXR5LnBvcnRfbnVtYmVyKTsKLSAgR1NUX1RSQUNFICgiXHRzZXF1ZW5jZV9pZDogJXUiLCBtc2ctPnNlcXVlbmNlX2lkKTsKLSAgR1NUX1RSQUNFICgiXHRjb250cm9sX2ZpZWxkOiAweCUwMngiLCBtc2ctPmNvbnRyb2xfZmllbGQpOwotICBHU1RfVFJBQ0UgKCJcdG1lc3NhZ2VfaW50ZXJ2YWw6ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGxvZzJfdG9fY2xvY2tfdGltZSAobXNnLT5sb2dfbWVzc2FnZV9pbnRlcnZhbCkpKTsKLQotICBzd2l0Y2ggKG1zZy0+bWVzc2FnZV90eXBlKSB7Ci0gICAgY2FzZSBQVFBfTUVTU0FHRV9UWVBFX0FOTk9VTkNFOgotICAgICAgR1NUX1RSQUNFICgiXHRBTk5PVU5DRToiKTsKLSAgICAgIEdTVF9UUkFDRSAoIlx0XHRvcmlnaW5fdGltZXN0YW1wOiAlIiBHX0dVSU5UNjRfRk9STUFUICIuJTA5dSIsCi0gICAgICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmFubm91bmNlLm9yaWdpbl90aW1lc3RhbXAuc2Vjb25kc19maWVsZCwKLSAgICAgICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2Uub3JpZ2luX3RpbWVzdGFtcC5uYW5vc2Vjb25kc19maWVsZCk7Ci0gICAgICBHU1RfVFJBQ0UgKCJcdFx0Y3VycmVudF91dGNfb2Zmc2V0OiAlZCIsCi0gICAgICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmFubm91bmNlLmN1cnJlbnRfdXRjX29mZnNldCk7Ci0gICAgICBHU1RfVFJBQ0UgKCJcdFx0Z3JhbmRtYXN0ZXJfcHJpb3JpdHlfMTogJXUiLAotICAgICAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS5ncmFuZG1hc3Rlcl9wcmlvcml0eV8xKTsKLSAgICAgIEdTVF9UUkFDRSAoIlx0XHRncmFuZG1hc3Rlcl9jbG9ja19xdWFsaXR5OiAweCUwMnggMHglMDJ4ICV1IiwKLSAgICAgICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UuZ3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19jbGFzcywKLSAgICAgICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UuCi0gICAgICAgICAgZ3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19hY2N1cmFjeSwKLSAgICAgICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UuCi0gICAgICAgICAgZ3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5vZmZzZXRfc2NhbGVkX2xvZ192YXJpYW5jZSk7Ci0gICAgICBHU1RfVFJBQ0UgKCJcdFx0Z3JhbmRtYXN0ZXJfcHJpb3JpdHlfMjogJXUiLAotICAgICAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS5ncmFuZG1hc3Rlcl9wcmlvcml0eV8yKTsKLSAgICAgIEdTVF9UUkFDRSAoIlx0XHRncmFuZG1hc3Rlcl9pZGVudGl0eTogMHglMDE2IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsCi0gICAgICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmFubm91bmNlLmdyYW5kbWFzdGVyX2lkZW50aXR5KTsKLSAgICAgIEdTVF9UUkFDRSAoIlx0XHRzdGVwc19yZW1vdmVkOiAldSIsCi0gICAgICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmFubm91bmNlLnN0ZXBzX3JlbW92ZWQpOwotICAgICAgR1NUX1RSQUNFICgiXHRcdHRpbWVfc291cmNlOiAweCUwMngiLAotICAgICAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS50aW1lX3NvdXJjZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBUUF9NRVNTQUdFX1RZUEVfU1lOQzoKLSAgICAgIEdTVF9UUkFDRSAoIlx0U1lOQzoiKTsKLSAgICAgIEdTVF9UUkFDRSAoIlx0XHRvcmlnaW5fdGltZXN0YW1wOiAlIiBHX0dVSU5UNjRfRk9STUFUICIuJTA5dSIsCi0gICAgICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLnN5bmMub3JpZ2luX3RpbWVzdGFtcC5zZWNvbmRzX2ZpZWxkLAotICAgICAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5zeW5jLm9yaWdpbl90aW1lc3RhbXAubmFub3NlY29uZHNfZmllbGQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQVFBfTUVTU0FHRV9UWVBFX0ZPTExPV19VUDoKLSAgICAgIEdTVF9UUkFDRSAoIlx0Rk9MTE9XX1VQOiIpOwotICAgICAgR1NUX1RSQUNFICgiXHRcdHByZWNpc2Vfb3JpZ2luX3RpbWVzdGFtcDogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLiUwOXUiLAotICAgICAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5mb2xsb3dfdXAuCi0gICAgICAgICAgcHJlY2lzZV9vcmlnaW5fdGltZXN0YW1wLnNlY29uZHNfZmllbGQsCi0gICAgICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmZvbGxvd191cC4KLSAgICAgICAgICBwcmVjaXNlX29yaWdpbl90aW1lc3RhbXAubmFub3NlY29uZHNfZmllbGQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQVFBfTUVTU0FHRV9UWVBFX0RFTEFZX1JFUToKLSAgICAgIEdTVF9UUkFDRSAoIlx0REVMQVlfUkVROiIpOwotICAgICAgR1NUX1RSQUNFICgiXHRcdG9yaWdpbl90aW1lc3RhbXA6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi4lMDl1IiwKLSAgICAgICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuZGVsYXlfcmVxLm9yaWdpbl90aW1lc3RhbXAuc2Vjb25kc19maWVsZCwKLSAgICAgICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuZGVsYXlfcmVxLm9yaWdpbl90aW1lc3RhbXAubmFub3NlY29uZHNfZmllbGQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQVFBfTUVTU0FHRV9UWVBFX0RFTEFZX1JFU1A6Ci0gICAgICBHU1RfVFJBQ0UgKCJcdERFTEFZX1JFU1A6Iik7Ci0gICAgICBHU1RfVFJBQ0UgKCJcdFx0cmVjZWl2ZV90aW1lc3RhbXA6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi4lMDl1IiwKLSAgICAgICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuZGVsYXlfcmVzcC5yZWNlaXZlX3RpbWVzdGFtcC5zZWNvbmRzX2ZpZWxkLAotICAgICAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5kZWxheV9yZXNwLnJlY2VpdmVfdGltZXN0YW1wLm5hbm9zZWNvbmRzX2ZpZWxkKTsKLSAgICAgIEdTVF9UUkFDRSAoIlx0XHRyZXF1ZXN0aW5nX3BvcnRfaWRlbnRpdHk6IDB4JTAxNiIgR19HSU5UNjRfTU9ESUZJRVIKLSAgICAgICAgICAieCAldSIsCi0gICAgICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmRlbGF5X3Jlc3AuCi0gICAgICAgICAgcmVxdWVzdGluZ19wb3J0X2lkZW50aXR5LmNsb2NrX2lkZW50aXR5LAotICAgICAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5kZWxheV9yZXNwLgotICAgICAgICAgIHJlcXVlc3RpbmdfcG9ydF9pZGVudGl0eS5wb3J0X251bWJlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX1RSQUNFICgiICIpOwotfQotCi0vKiBJRUVFIDE1ODgtMjAwOCA1LjMuMyAqLwotc3RhdGljIGdib29sZWFuCi1wYXJzZV9wdHBfdGltZXN0YW1wIChQdHBUaW1lc3RhbXAgKiB0aW1lc3RhbXAsIEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAocmVhZGVyKSA+PSAxMCwgRkFMU0UpOwotCi0gIHRpbWVzdGFtcC0+c2Vjb25kc19maWVsZCA9Ci0gICAgICAoKChndWludDY0KSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKHJlYWRlcikpIDw8IDE2KSB8Ci0gICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZV91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIHRpbWVzdGFtcC0+bmFub3NlY29uZHNfZmllbGQgPQotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotCi0gIGlmICh0aW1lc3RhbXAtPm5hbm9zZWNvbmRzX2ZpZWxkID49IDEwMDAwMDAwMDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBJRUVFIDE1ODgtMjAwOCAxMy4zICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXBhcnNlX3B0cF9tZXNzYWdlX2hlYWRlciAoUHRwTWVzc2FnZSAqIG1zZywgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ3VpbnQ4IGI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChyZWFkZXIpID49IDM0LCBGQUxTRSk7Ci0KLSAgYiA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkIChyZWFkZXIpOwotICBtc2ctPnRyYW5zcG9ydF9zcGVjaWZpYyA9IGIgPj4gNDsKLSAgbXNnLT5tZXNzYWdlX3R5cGUgPSBiICYgMHgwZjsKLQotICBiID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIG1zZy0+dmVyc2lvbl9wdHAgPSBiICYgMHgwZjsKLSAgaWYgKG1zZy0+dmVyc2lvbl9wdHAgIT0gMikgewotICAgIEdTVF9XQVJOSU5HICgiVW5zdXBwb3J0ZWQgUFRQIG1lc3NhZ2UgdmVyc2lvbiAoJXUgIT0gMikiLCBtc2ctPnZlcnNpb25fcHRwKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBtc2ctPm1lc3NhZ2VfbGVuZ3RoID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotICBpZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKHJlYWRlcikgKyA0IDwgbXNnLT5tZXNzYWdlX2xlbmd0aCkgewotICAgIEdTVF9XQVJOSU5HICgiTm90IGVub3VnaCBkYXRhICgldSA8ICV1KSIsCi0gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChyZWFkZXIpICsgNCwgbXNnLT5tZXNzYWdlX2xlbmd0aCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgbXNnLT5kb21haW5fbnVtYmVyID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIGdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCAocmVhZGVyLCAxKTsKLQotICBtc2ctPmZsYWdfZmllbGQgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZV91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIG1zZy0+Y29ycmVjdGlvbl9maWVsZCA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkIChyZWFkZXIsIDQpOwotCi0gIG1zZy0+c291cmNlX3BvcnRfaWRlbnRpdHkuY2xvY2tfaWRlbnRpdHkgPQotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotICBtc2ctPnNvdXJjZV9wb3J0X2lkZW50aXR5LnBvcnRfbnVtYmVyID0KLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLQotICBtc2ctPnNlcXVlbmNlX2lkID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotICBtc2ctPmNvbnRyb2xfZmllbGQgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgbXNnLT5sb2dfbWVzc2FnZV9pbnRlcnZhbCA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkIChyZWFkZXIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBJRUVFIDE1ODgtMjAwOCAxMy41ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXBhcnNlX3B0cF9tZXNzYWdlX2Fubm91bmNlIChQdHBNZXNzYWdlICogbXNnLCBHc3RCeXRlUmVhZGVyICogcmVhZGVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAobXNnLT5tZXNzYWdlX3R5cGUgPT0gUFRQX01FU1NBR0VfVFlQRV9BTk5PVU5DRSwgRkFMU0UpOwotCi0gIGlmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAocmVhZGVyKSA8IDIwKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIXBhcnNlX3B0cF90aW1lc3RhbXAgKCZtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2Uub3JpZ2luX3RpbWVzdGFtcCwKLSAgICAgICAgICByZWFkZXIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UuY3VycmVudF91dGNfb2Zmc2V0ID0KLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkIChyZWFkZXIsIDEpOwotCi0gIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS5ncmFuZG1hc3Rlcl9wcmlvcml0eV8xID0KLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkIChyZWFkZXIpOwotICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UuZ3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19jbGFzcyA9Ci0gICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmFubm91bmNlLmdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkuY2xvY2tfYWNjdXJhY3kgPQotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS4KLSAgICAgIGdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkub2Zmc2V0X3NjYWxlZF9sb2dfdmFyaWFuY2UgPQotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UuZ3JhbmRtYXN0ZXJfcHJpb3JpdHlfMiA9Ci0gICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmFubm91bmNlLmdyYW5kbWFzdGVyX2lkZW50aXR5ID0KLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmFubm91bmNlLnN0ZXBzX3JlbW92ZWQgPQotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UudGltZV9zb3VyY2UgPQotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWQgKHJlYWRlcik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIElFRUUgMTU4OC0yMDA4IDEzLjYgKi8KLXN0YXRpYyBnYm9vbGVhbgotcGFyc2VfcHRwX21lc3NhZ2Vfc3luYyAoUHRwTWVzc2FnZSAqIG1zZywgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1zZy0+bWVzc2FnZV90eXBlID09IFBUUF9NRVNTQUdFX1RZUEVfU1lOQywgRkFMU0UpOwotCi0gIGlmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAocmVhZGVyKSA8IDEwKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIXBhcnNlX3B0cF90aW1lc3RhbXAgKCZtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuc3luYy5vcmlnaW5fdGltZXN0YW1wLAotICAgICAgICAgIHJlYWRlcikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBJRUVFIDE1ODgtMjAwOCAxMy42ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXBhcnNlX3B0cF9tZXNzYWdlX2RlbGF5X3JlcSAoUHRwTWVzc2FnZSAqIG1zZywgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1zZy0+bWVzc2FnZV90eXBlID09IFBUUF9NRVNTQUdFX1RZUEVfREVMQVlfUkVRLCBGQUxTRSk7Ci0KLSAgaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChyZWFkZXIpIDwgMTApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghcGFyc2VfcHRwX3RpbWVzdGFtcCAoJm1zZy0+bWVzc2FnZV9zcGVjaWZpYy5kZWxheV9yZXEub3JpZ2luX3RpbWVzdGFtcCwKLSAgICAgICAgICByZWFkZXIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogSUVFRSAxNTg4LTIwMDggMTMuNyAqLwotc3RhdGljIGdib29sZWFuCi1wYXJzZV9wdHBfbWVzc2FnZV9mb2xsb3dfdXAgKFB0cE1lc3NhZ2UgKiBtc2csIEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtc2ctPm1lc3NhZ2VfdHlwZSA9PSBQVFBfTUVTU0FHRV9UWVBFX0ZPTExPV19VUCwgRkFMU0UpOwotCi0gIGlmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAocmVhZGVyKSA8IDEwKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIXBhcnNlX3B0cF90aW1lc3RhbXAgKCZtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuCi0gICAgICAgICAgZm9sbG93X3VwLnByZWNpc2Vfb3JpZ2luX3RpbWVzdGFtcCwgcmVhZGVyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIElFRUUgMTU4OC0yMDA4IDEzLjggKi8KLXN0YXRpYyBnYm9vbGVhbgotcGFyc2VfcHRwX21lc3NhZ2VfZGVsYXlfcmVzcCAoUHRwTWVzc2FnZSAqIG1zZywgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1zZy0+bWVzc2FnZV90eXBlID09IFBUUF9NRVNTQUdFX1RZUEVfREVMQVlfUkVTUCwKLSAgICAgIEZBTFNFKTsKLQotICBpZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKHJlYWRlcikgPCAyMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFwYXJzZV9wdHBfdGltZXN0YW1wICgmbXNnLT5tZXNzYWdlX3NwZWNpZmljLmRlbGF5X3Jlc3AucmVjZWl2ZV90aW1lc3RhbXAsCi0gICAgICAgICAgcmVhZGVyKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmRlbGF5X3Jlc3AucmVxdWVzdGluZ19wb3J0X2lkZW50aXR5LmNsb2NrX2lkZW50aXR5ID0KLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmRlbGF5X3Jlc3AucmVxdWVzdGluZ19wb3J0X2lkZW50aXR5LnBvcnRfbnVtYmVyID0KLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wYXJzZV9wdHBfbWVzc2FnZSAoUHRwTWVzc2FnZSAqIG1zZywgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0Qnl0ZVJlYWRlciByZWFkZXI7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCBzaXplKTsKLQotICBpZiAoIXBhcnNlX3B0cF9tZXNzYWdlX2hlYWRlciAobXNnLCAmcmVhZGVyKSkgewotICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIHBhcnNlIFBUUCBtZXNzYWdlIGhlYWRlciIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHN3aXRjaCAobXNnLT5tZXNzYWdlX3R5cGUpIHsKLSAgICBjYXNlIFBUUF9NRVNTQUdFX1RZUEVfU1lOQzoKLSAgICAgIHJldCA9IHBhcnNlX3B0cF9tZXNzYWdlX3N5bmMgKG1zZywgJnJlYWRlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBUUF9NRVNTQUdFX1RZUEVfRk9MTE9XX1VQOgotICAgICAgcmV0ID0gcGFyc2VfcHRwX21lc3NhZ2VfZm9sbG93X3VwIChtc2csICZyZWFkZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQVFBfTUVTU0FHRV9UWVBFX0RFTEFZX1JFUToKLSAgICAgIHJldCA9IHBhcnNlX3B0cF9tZXNzYWdlX2RlbGF5X3JlcSAobXNnLCAmcmVhZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFRQX01FU1NBR0VfVFlQRV9ERUxBWV9SRVNQOgotICAgICAgcmV0ID0gcGFyc2VfcHRwX21lc3NhZ2VfZGVsYXlfcmVzcCAobXNnLCAmcmVhZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFRQX01FU1NBR0VfVFlQRV9BTk5PVU5DRToKLSAgICAgIHJldCA9IHBhcnNlX3B0cF9tZXNzYWdlX2Fubm91bmNlIChtc2csICZyZWFkZXIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIGlnbm9yZSBmb3Igbm93ICovCi0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnaW50Ci1jb21wYXJlX2Fubm91bmNlX21lc3NhZ2UgKGNvbnN0IFB0cEFubm91bmNlTWVzc2FnZSAqIGEsCi0gICAgY29uc3QgUHRwQW5ub3VuY2VNZXNzYWdlICogYikKLXsKLSAgLyogSUVFRSAxNTg4IEZpZ3VyZSAyNyAqLwotICBpZiAoYS0+Z3JhbmRtYXN0ZXJfaWRlbnRpdHkgPT0gYi0+Z3JhbmRtYXN0ZXJfaWRlbnRpdHkpIHsKLSAgICBpZiAoYS0+c3RlcHNfcmVtb3ZlZCArIDEgPCBiLT5zdGVwc19yZW1vdmVkKQotICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgaWYgKGEtPnN0ZXBzX3JlbW92ZWQgPiBiLT5zdGVwc19yZW1vdmVkICsgMSkKLSAgICAgIHJldHVybiAxOwotCi0gICAgLyogRXJyb3IgY2FzZXMgYXJlIGZpbHRlcmVkIG91dCBlYXJsaWVyICovCi0gICAgaWYgKGEtPnN0ZXBzX3JlbW92ZWQgPCBiLT5zdGVwc19yZW1vdmVkKQotICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgaWYgKGEtPnN0ZXBzX3JlbW92ZWQgPiBiLT5zdGVwc19yZW1vdmVkKQotICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvKiBFcnJvciBjYXNlcyBhcmUgZmlsdGVyZWQgb3V0IGVhcmxpZXIgKi8KLSAgICBpZiAoYS0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LmNsb2NrX2lkZW50aXR5IDwKLSAgICAgICAgYi0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LmNsb2NrX2lkZW50aXR5KQotICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgaWYgKGEtPm1hc3Rlcl9jbG9ja19pZGVudGl0eS5jbG9ja19pZGVudGl0eSA+Ci0gICAgICAgIGItPm1hc3Rlcl9jbG9ja19pZGVudGl0eS5jbG9ja19pZGVudGl0eSkKLSAgICAgIHJldHVybiAxOwotCi0gICAgLyogRXJyb3IgY2FzZXMgYXJlIGZpbHRlcmVkIG91dCBlYXJsaWVyICovCi0gICAgaWYgKGEtPm1hc3Rlcl9jbG9ja19pZGVudGl0eS5wb3J0X251bWJlciA8Ci0gICAgICAgIGItPm1hc3Rlcl9jbG9ja19pZGVudGl0eS5wb3J0X251bWJlcikKLSAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChhLT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHkucG9ydF9udW1iZXIgPgotICAgICAgICBiLT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHkucG9ydF9udW1iZXIpCi0gICAgICByZXR1cm4gMTsKLSAgICBlbHNlCi0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLQotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKGEtPmdyYW5kbWFzdGVyX3ByaW9yaXR5XzEgPCBiLT5ncmFuZG1hc3Rlcl9wcmlvcml0eV8xKQotICAgIHJldHVybiAtMTsKLSAgZWxzZSBpZiAoYS0+Z3JhbmRtYXN0ZXJfcHJpb3JpdHlfMSA+IGItPmdyYW5kbWFzdGVyX3ByaW9yaXR5XzEpCi0gICAgcmV0dXJuIDE7Ci0KLSAgaWYgKGEtPmdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkuY2xvY2tfY2xhc3MgPAotICAgICAgYi0+Z3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19jbGFzcykKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UgaWYgKGEtPmdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkuY2xvY2tfY2xhc3MgPgotICAgICAgYi0+Z3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19jbGFzcykKLSAgICByZXR1cm4gMTsKLQotICBpZiAoYS0+Z3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19hY2N1cmFjeSA8Ci0gICAgICBiLT5ncmFuZG1hc3Rlcl9jbG9ja19xdWFsaXR5LmNsb2NrX2FjY3VyYWN5KQotICAgIHJldHVybiAtMTsKLSAgZWxzZSBpZiAoYS0+Z3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19hY2N1cmFjeSA+Ci0gICAgICBiLT5ncmFuZG1hc3Rlcl9jbG9ja19xdWFsaXR5LmNsb2NrX2FjY3VyYWN5KQotICAgIHJldHVybiAxOwotCi0gIGlmIChhLT5ncmFuZG1hc3Rlcl9jbG9ja19xdWFsaXR5Lm9mZnNldF9zY2FsZWRfbG9nX3ZhcmlhbmNlIDwKLSAgICAgIGItPmdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkub2Zmc2V0X3NjYWxlZF9sb2dfdmFyaWFuY2UpCi0gICAgcmV0dXJuIC0xOwotICBlbHNlIGlmIChhLT5ncmFuZG1hc3Rlcl9jbG9ja19xdWFsaXR5Lm9mZnNldF9zY2FsZWRfbG9nX3ZhcmlhbmNlID4KLSAgICAgIGItPmdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkub2Zmc2V0X3NjYWxlZF9sb2dfdmFyaWFuY2UpCi0gICAgcmV0dXJuIDE7Ci0KLSAgaWYgKGEtPmdyYW5kbWFzdGVyX3ByaW9yaXR5XzIgPCBiLT5ncmFuZG1hc3Rlcl9wcmlvcml0eV8yKQotICAgIHJldHVybiAtMTsKLSAgZWxzZSBpZiAoYS0+Z3JhbmRtYXN0ZXJfcHJpb3JpdHlfMiA+IGItPmdyYW5kbWFzdGVyX3ByaW9yaXR5XzIpCi0gICAgcmV0dXJuIDE7Ci0KLSAgaWYgKGEtPmdyYW5kbWFzdGVyX2lkZW50aXR5IDwgYi0+Z3JhbmRtYXN0ZXJfaWRlbnRpdHkpCi0gICAgcmV0dXJuIC0xOwotICBlbHNlIGlmIChhLT5ncmFuZG1hc3Rlcl9pZGVudGl0eSA+IGItPmdyYW5kbWFzdGVyX2lkZW50aXR5KQotICAgIHJldHVybiAxOwotICBlbHNlCi0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZWxlY3RfYmVzdF9tYXN0ZXJfY2xvY2sgKFB0cERvbWFpbkRhdGEgKiBkb21haW4sIEdzdENsb2NrVGltZSBub3cpCi17Ci0gIEdMaXN0ICpxdWFsaWZpZWRfbWVzc2FnZXMgPSBOVUxMOwotICBHTGlzdCAqbCwgKm07Ci0gIFB0cEFubm91bmNlTWVzc2FnZSAqYmVzdCA9IE5VTEw7Ci0KLSAgLyogSUVFRSAxNTg4IDkuMy4yLjUgKi8KLSAgZm9yIChsID0gZG9tYWluLT5hbm5vdW5jZV9zZW5kZXJzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIFB0cEFubm91bmNlU2VuZGVyICpzZW5kZXIgPSBsLT5kYXRhOwotICAgIEdzdENsb2NrVGltZSB3aW5kb3cgPSA0ICogc2VuZGVyLT5hbm5vdW5jZV9pbnRlcnZhbDsKLSAgICBnaW50IGNvdW50ID0gMDsKLQotICAgIGZvciAobSA9IHNlbmRlci0+YW5ub3VuY2VfbWVzc2FnZXMuaGVhZDsgbTsgbSA9IG0tPm5leHQpIHsKLSAgICAgIFB0cEFubm91bmNlTWVzc2FnZSAqbXNnID0gbS0+ZGF0YTsKLQotICAgICAgaWYgKG5vdyAtIG1zZy0+cmVjZWl2ZV90aW1lIDw9IHdpbmRvdykKLSAgICAgICAgY291bnQrKzsKLSAgICB9Ci0KLSAgICAvKiBPbmx5IGluY2x1ZGUgdGhlIG5ld2VzdCBtZXNzYWdlIG9mIGFubm91bmNlIHNlbmRlcnMgdGhhdCBoYWQgYXQgbGVhc3QgMgotICAgICAqIGFubm91bmNlIG1lc3NhZ2VzIGluIHRoZSBsYXN0IDQgYW5ub3VuY2UgaW50ZXJ2YWxzLiBXaGljaCBhbHNvIG1lYW5zCi0gICAgICogdGhhdCB3ZSB3YWl0IGF0IGxlYXN0IDQgYW5ub3VuY2UgaW50ZXJ2YWxzIGJlZm9yZSB3ZSBzZWxlY3QgYSBtYXN0ZXIKLSAgICAgKiBjbG9jay4gVW50aWwgdGhlbiB3ZSBqdXN0IHJlcG9ydCBiYXNlZCBvbiB0aGUgbmV3ZXN0IFNZTkMgd2UgcmVjZWl2ZWQKLSAgICAgKi8KLSAgICBpZiAoY291bnQgPj0gMikgewotICAgICAgcXVhbGlmaWVkX21lc3NhZ2VzID0KLSAgICAgICAgICBnX2xpc3RfcHJlcGVuZCAocXVhbGlmaWVkX21lc3NhZ2VzLAotICAgICAgICAgIGdfcXVldWVfcGVla190YWlsICgmc2VuZGVyLT5hbm5vdW5jZV9tZXNzYWdlcykpOwotICAgIH0KLSAgfQotCi0gIGlmICghcXVhbGlmaWVkX21lc3NhZ2VzKSB7Ci0gICAgR1NUX0RFQlVHCi0gICAgICAgICgiTm8gcXVhbGlmaWVkIGFubm91bmNlIG1lc3NhZ2VzIGZvciBkb21haW4gJXUsIGNhbid0IHNlbGVjdCBhIG1hc3RlciBjbG9jayIsCi0gICAgICAgIGRvbWFpbi0+ZG9tYWluKTsKLSAgICBkb21haW4tPmhhdmVfbWFzdGVyX2Nsb2NrID0gRkFMU0U7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgZm9yIChsID0gcXVhbGlmaWVkX21lc3NhZ2VzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIFB0cEFubm91bmNlTWVzc2FnZSAqbXNnID0gbC0+ZGF0YTsKLQotICAgIGlmICghYmVzdCB8fCBjb21wYXJlX2Fubm91bmNlX21lc3NhZ2UgKG1zZywgYmVzdCkgPCAwKQotICAgICAgYmVzdCA9IG1zZzsKLSAgfQotCi0gIGlmIChkb21haW4tPmhhdmVfbWFzdGVyX2Nsb2NrCi0gICAgICAmJiBjb21wYXJlX2Nsb2NrX2lkZW50aXR5ICgmZG9tYWluLT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHksCi0gICAgICAgICAgJmJlc3QtPm1hc3Rlcl9jbG9ja19pZGVudGl0eSkgPT0gMCkgewotICAgIEdTVF9ERUJVRyAoIk1hc3RlciBjbG9jayBpbiBkb21haW4gJXUgZGlkIG5vdCBjaGFuZ2UiLCBkb21haW4tPmRvbWFpbik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHICgiU2VsZWN0ZWQgbWFzdGVyIGNsb2NrIGZvciBkb21haW4gJXU6IDB4JTAxNiIgR19HSU5UNjRfTU9ESUZJRVIKLSAgICAgICAgInggJXUgd2l0aCBncmFuZG1hc3RlciBjbG9jayAweCUwMTYiIEdfR0lOVDY0X01PRElGSUVSICJ4IiwKLSAgICAgICAgZG9tYWluLT5kb21haW4sIGJlc3QtPm1hc3Rlcl9jbG9ja19pZGVudGl0eS5jbG9ja19pZGVudGl0eSwKLSAgICAgICAgYmVzdC0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LnBvcnRfbnVtYmVyLCBiZXN0LT5ncmFuZG1hc3Rlcl9pZGVudGl0eSk7Ci0KLSAgICBkb21haW4tPmhhdmVfbWFzdGVyX2Nsb2NrID0gVFJVRTsKLSAgICBkb21haW4tPmdyYW5kbWFzdGVyX2lkZW50aXR5ID0gYmVzdC0+Z3JhbmRtYXN0ZXJfaWRlbnRpdHk7Ci0KLSAgICAvKiBPcHBvcnR1bmlzdGljIG1hc3RlciBjbG9jayBzZWxlY3Rpb24gbGlrZWx5IGdhdmUgdXMgdGhlIHNhbWUgbWFzdGVyCi0gICAgICogY2xvY2sgYmVmb3JlLCBubyBuZWVkIHRvIHJlc2V0IGFsbCBzdGF0aXN0aWNzICovCi0gICAgaWYgKGNvbXBhcmVfY2xvY2tfaWRlbnRpdHkgKCZkb21haW4tPm1hc3Rlcl9jbG9ja19pZGVudGl0eSwKLSAgICAgICAgICAgICZiZXN0LT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHkpICE9IDApIHsKLSAgICAgIG1lbWNweSAoJmRvbWFpbi0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LCAmYmVzdC0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LAotICAgICAgICAgIHNpemVvZiAoUHRwQ2xvY2tJZGVudGl0eSkpOwotICAgICAgZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkgPSAwOwotICAgICAgZG9tYWluLT5sYXN0X2RlbGF5X3JlcSA9IDA7Ci0gICAgICBkb21haW4tPmxhc3RfcGF0aF9kZWxheXNfbWlzc2luZyA9IDk7Ci0gICAgICBkb21haW4tPm1pbl9kZWxheV9yZXFfaW50ZXJ2YWwgPSAwOwotICAgICAgZG9tYWluLT5zeW5jX2ludGVydmFsID0gMDsKLSAgICAgIGRvbWFpbi0+bGFzdF9wdHBfc3luY190aW1lID0gMDsKLSAgICAgIGRvbWFpbi0+c2tpcHBlZF91cGRhdGVzID0gMDsKLSAgICAgIGdfcXVldWVfZm9yZWFjaCAoJmRvbWFpbi0+cGVuZGluZ19zeW5jcywgKEdGdW5jKSBwdHBfcGVuZGluZ19zeW5jX2ZyZWUsCi0gICAgICAgICAgTlVMTCk7Ci0gICAgICBnX3F1ZXVlX2NsZWFyICgmZG9tYWluLT5wZW5kaW5nX3N5bmNzKTsKLSAgICB9Ci0KLSAgICBpZiAoZ19hdG9taWNfaW50X2dldCAoJmRvbWFpbl9zdGF0c19uX2hvb2tzKSkgewotICAgICAgR3N0U3RydWN0dXJlICpzdGF0cyA9Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKEdTVF9QVFBfU1RBVElTVElDU19CRVNUX01BU1RFUl9DTE9DS19TRUxFQ1RFRCwKLSAgICAgICAgICAiZG9tYWluIiwgR19UWVBFX1VJTlQsIGRvbWFpbi0+ZG9tYWluLAotICAgICAgICAgICJtYXN0ZXItY2xvY2staWQiLCBHX1RZUEVfVUlOVDY0LAotICAgICAgICAgIGRvbWFpbi0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LmNsb2NrX2lkZW50aXR5LAotICAgICAgICAgICJtYXN0ZXItY2xvY2stcG9ydCIsIEdfVFlQRV9VSU5ULAotICAgICAgICAgIGRvbWFpbi0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LnBvcnRfbnVtYmVyLAotICAgICAgICAgICJncmFuZG1hc3Rlci1jbG9jay1pZCIsIEdfVFlQRV9VSU5UNjQsIGRvbWFpbi0+Z3JhbmRtYXN0ZXJfaWRlbnRpdHksCi0gICAgICAgICAgTlVMTCk7Ci0gICAgICBlbWl0X3B0cF9zdGF0aXN0aWNzIChkb21haW4tPmRvbWFpbiwgc3RhdHMpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdGF0cyk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfYW5ub3VuY2VfbWVzc2FnZSAoUHRwTWVzc2FnZSAqIG1zZywgR3N0Q2xvY2tUaW1lIHJlY2VpdmVfdGltZSkKLXsKLSAgR0xpc3QgKmw7Ci0gIFB0cERvbWFpbkRhdGEgKmRvbWFpbiA9IE5VTEw7Ci0gIFB0cEFubm91bmNlU2VuZGVyICpzZW5kZXIgPSBOVUxMOwotICBQdHBBbm5vdW5jZU1lc3NhZ2UgKmFubm91bmNlOwotCi0gIC8qIElFRUUxNTg4IDkuMy4yLjIgZSkKLSAgICogRG9uJ3QgY29uc2lkZXIgbWVzc2FnZXMgd2l0aCB0aGUgYWx0ZXJuYXRlIG1hc3RlciBmbGFnIHNldAotICAgKi8KLSAgaWYgKChtc2ctPmZsYWdfZmllbGQgJiAweDAxMDApKQotICAgIHJldHVybjsKLQotICAvKiBJRUVFIDE1ODggOS4zLjIuNSBkKQotICAgKiBEb24ndCBjb25zaWRlciBhbm5vdW5jZSBtZXNzYWdlcyB3aXRoIHN0ZXBzX3JlbW92ZWQ+PTI1NQotICAgKi8KLSAgaWYgKG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS5zdGVwc19yZW1vdmVkID49IDI1NSkKLSAgICByZXR1cm47Ci0KLSAgZm9yIChsID0gZG9tYWluX2RhdGE7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgUHRwRG9tYWluRGF0YSAqdG1wID0gbC0+ZGF0YTsKLQotICAgIGlmICh0bXAtPmRvbWFpbiA9PSBtc2ctPmRvbWFpbl9udW1iZXIpIHsKLSAgICAgIGRvbWFpbiA9IHRtcDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmICghZG9tYWluKSB7Ci0gICAgZ2NoYXIgKmNsb2NrX25hbWU7Ci0KLSAgICBkb21haW4gPSBnX25ldzAgKFB0cERvbWFpbkRhdGEsIDEpOwotICAgIGRvbWFpbi0+ZG9tYWluID0gbXNnLT5kb21haW5fbnVtYmVyOwotICAgIGNsb2NrX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJwdHAtY2xvY2stJXUiLCBkb21haW4tPmRvbWFpbik7Ci0gICAgZG9tYWluLT5kb21haW5fY2xvY2sgPQotICAgICAgICBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1NZU1RFTV9DTE9DSywgIm5hbWUiLCBjbG9ja19uYW1lLCBOVUxMKTsKLSAgICBnX2ZyZWUgKGNsb2NrX25hbWUpOwotICAgIGdfcXVldWVfaW5pdCAoJmRvbWFpbi0+cGVuZGluZ19zeW5jcyk7Ci0gICAgZG9tYWluLT5sYXN0X3BhdGhfZGVsYXlzX21pc3NpbmcgPSA5OwotICAgIGRvbWFpbl9kYXRhID0gZ19saXN0X3ByZXBlbmQgKGRvbWFpbl9kYXRhLCBkb21haW4pOwotCi0gICAgZ19tdXRleF9sb2NrICgmZG9tYWluX2Nsb2Nrc19sb2NrKTsKLSAgICBkb21haW5fY2xvY2tzID0gZ19saXN0X3ByZXBlbmQgKGRvbWFpbl9jbG9ja3MsIGRvbWFpbik7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZkb21haW5fY2xvY2tzX2xvY2spOwotCi0gICAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZkb21haW5fc3RhdHNfbl9ob29rcykpIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqc3RhdHMgPQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3IChHU1RfUFRQX1NUQVRJU1RJQ1NfTkVXX0RPTUFJTl9GT1VORCwgImRvbWFpbiIsCi0gICAgICAgICAgR19UWVBFX1VJTlQsIGRvbWFpbi0+ZG9tYWluLCAiY2xvY2siLCBHU1RfVFlQRV9DTE9DSywKLSAgICAgICAgICBkb21haW4tPmRvbWFpbl9jbG9jaywgTlVMTCk7Ci0gICAgICBlbWl0X3B0cF9zdGF0aXN0aWNzIChkb21haW4tPmRvbWFpbiwgc3RhdHMpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdGF0cyk7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChsID0gZG9tYWluLT5hbm5vdW5jZV9zZW5kZXJzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIFB0cEFubm91bmNlU2VuZGVyICp0bXAgPSBsLT5kYXRhOwotCi0gICAgaWYgKGNvbXBhcmVfY2xvY2tfaWRlbnRpdHkgKCZ0bXAtPm1hc3Rlcl9jbG9ja19pZGVudGl0eSwKLSAgICAgICAgICAgICZtc2ctPnNvdXJjZV9wb3J0X2lkZW50aXR5KSA9PSAwKSB7Ci0gICAgICBzZW5kZXIgPSB0bXA7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAoIXNlbmRlcikgewotICAgIHNlbmRlciA9IGdfbmV3MCAoUHRwQW5ub3VuY2VTZW5kZXIsIDEpOwotCi0gICAgbWVtY3B5ICgmc2VuZGVyLT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHksICZtc2ctPnNvdXJjZV9wb3J0X2lkZW50aXR5LAotICAgICAgICBzaXplb2YgKFB0cENsb2NrSWRlbnRpdHkpKTsKLSAgICBnX3F1ZXVlX2luaXQgKCZzZW5kZXItPmFubm91bmNlX21lc3NhZ2VzKTsKLSAgICBkb21haW4tPmFubm91bmNlX3NlbmRlcnMgPQotICAgICAgICBnX2xpc3RfcHJlcGVuZCAoZG9tYWluLT5hbm5vdW5jZV9zZW5kZXJzLCBzZW5kZXIpOwotICB9Ci0KLSAgZm9yIChsID0gc2VuZGVyLT5hbm5vdW5jZV9tZXNzYWdlcy5oZWFkOyBsOyBsID0gbC0+bmV4dCkgewotICAgIFB0cEFubm91bmNlTWVzc2FnZSAqdG1wID0gbC0+ZGF0YTsKLQotICAgIC8qIElFRUUgMTU4OCA5LjMuMi41IGMpCi0gICAgICogRG9uJ3QgY29uc2lkZXIgaWRlbnRpY2FsIG1lc3NhZ2VzLCBpLmUuIGR1cGxpY2F0ZXMKLSAgICAgKi8KLSAgICBpZiAodG1wLT5zZXF1ZW5jZV9pZCA9PSBtc2ctPnNlcXVlbmNlX2lkKQotICAgICAgcmV0dXJuOwotICB9Ci0KLSAgc2VuZGVyLT5hbm5vdW5jZV9pbnRlcnZhbCA9IGxvZzJfdG9fY2xvY2tfdGltZSAobXNnLT5sb2dfbWVzc2FnZV9pbnRlcnZhbCk7Ci0KLSAgYW5ub3VuY2UgPSBnX25ldzAgKFB0cEFubm91bmNlTWVzc2FnZSwgMSk7Ci0gIGFubm91bmNlLT5yZWNlaXZlX3RpbWUgPSByZWNlaXZlX3RpbWU7Ci0gIGFubm91bmNlLT5zZXF1ZW5jZV9pZCA9IG1zZy0+c2VxdWVuY2VfaWQ7Ci0gIG1lbWNweSAoJmFubm91bmNlLT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHksICZtc2ctPnNvdXJjZV9wb3J0X2lkZW50aXR5LAotICAgICAgc2l6ZW9mIChQdHBDbG9ja0lkZW50aXR5KSk7Ci0gIGFubm91bmNlLT5ncmFuZG1hc3Rlcl9pZGVudGl0eSA9Ci0gICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UuZ3JhbmRtYXN0ZXJfaWRlbnRpdHk7Ci0gIGFubm91bmNlLT5ncmFuZG1hc3Rlcl9wcmlvcml0eV8xID0KLSAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS5ncmFuZG1hc3Rlcl9wcmlvcml0eV8xOwotICBhbm5vdW5jZS0+Z3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19jbGFzcyA9Ci0gICAgICBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UuZ3JhbmRtYXN0ZXJfY2xvY2tfcXVhbGl0eS5jbG9ja19jbGFzczsKLSAgYW5ub3VuY2UtPmdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkuY2xvY2tfYWNjdXJhY3kgPQotICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLmFubm91bmNlLmdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkuY2xvY2tfYWNjdXJhY3k7Ci0gIGFubm91bmNlLT5ncmFuZG1hc3Rlcl9jbG9ja19xdWFsaXR5Lm9mZnNldF9zY2FsZWRfbG9nX3ZhcmlhbmNlID0KLSAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS4KLSAgICAgIGdyYW5kbWFzdGVyX2Nsb2NrX3F1YWxpdHkub2Zmc2V0X3NjYWxlZF9sb2dfdmFyaWFuY2U7Ci0gIGFubm91bmNlLT5ncmFuZG1hc3Rlcl9wcmlvcml0eV8yID0KLSAgICAgIG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS5ncmFuZG1hc3Rlcl9wcmlvcml0eV8yOwotICBhbm5vdW5jZS0+c3RlcHNfcmVtb3ZlZCA9IG1zZy0+bWVzc2FnZV9zcGVjaWZpYy5hbm5vdW5jZS5zdGVwc19yZW1vdmVkOwotICBhbm5vdW5jZS0+dGltZV9zb3VyY2UgPSBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuYW5ub3VuY2UudGltZV9zb3VyY2U7Ci0gIGdfcXVldWVfcHVzaF90YWlsICgmc2VuZGVyLT5hbm5vdW5jZV9tZXNzYWdlcywgYW5ub3VuY2UpOwotCi0gIHNlbGVjdF9iZXN0X21hc3Rlcl9jbG9jayAoZG9tYWluLCByZWNlaXZlX3RpbWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNlbmRfZGVsYXlfcmVxX3RpbWVvdXQgKFB0cFBlbmRpbmdTeW5jICogc3luYykKLXsKLSAgU3RkSU9IZWFkZXIgaGVhZGVyID0geyAwLCB9OwotICBndWludDggZGVsYXlfcmVxWzQ0XTsKLSAgR3N0Qnl0ZVdyaXRlciB3cml0ZXI7Ci0gIEdJT1N0YXR1cyBzdGF0dXM7Ci0gIGdzaXplIHdyaXR0ZW47Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICBoZWFkZXIudHlwZSA9IFRZUEVfRVZFTlQ7Ci0gIGhlYWRlci5zaXplID0gNDQ7Ci0KLSAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhICgmd3JpdGVyLCBkZWxheV9yZXEsIDQ0LCBGQUxTRSk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkICgmd3JpdGVyLCBQVFBfTUVTU0FHRV9UWVBFX0RFTEFZX1JFUSk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkICgmd3JpdGVyLCAyKTsKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkICgmd3JpdGVyLCA0NCk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkICgmd3JpdGVyLCBzeW5jLT5kb21haW4pOwotICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZCAoJndyaXRlciwgMCk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgMCk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgMCk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX3VuY2hlY2tlZCAoJndyaXRlciwgMCk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZCAoJndyaXRlciwKLSAgICAgIHB0cF9jbG9ja19pZC5jbG9ja19pZGVudGl0eSk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgcHRwX2Nsb2NrX2lkLnBvcnRfbnVtYmVyKTsKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkICgmd3JpdGVyLCBzeW5jLT5kZWxheV9yZXFfc2VxbnVtKTsKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKCZ3cml0ZXIsIDB4MDEpOwotICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZCAoJndyaXRlciwgMHg3Zik7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDY0X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgMCk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgMCk7Ci0KLSAgc3RhdHVzID0KLSAgICAgIGdfaW9fY2hhbm5lbF93cml0ZV9jaGFycyAoc3Rkb3V0X2NoYW5uZWwsIChnY2hhciAqKSAmIGhlYWRlciwKLSAgICAgIHNpemVvZiAoaGVhZGVyKSwgJndyaXR0ZW4sICZlcnIpOwotICBpZiAoc3RhdHVzID09IEdfSU9fU1RBVFVTX0VSUk9SKSB7Ci0gICAgZ193YXJuaW5nICgiRmFpbGVkIHRvIHdyaXRlIHRvIHN0ZG91dDogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzID09IEdfSU9fU1RBVFVTX0VPRikgewotICAgIGdfbWVzc2FnZSAoIkVPRiBvbiBzdGRvdXQiKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzICE9IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgIGdfd2FybmluZyAoIlVuZXhwZWN0ZWQgc3Rkb3V0IHdyaXRlIHN0YXR1czogJWQiLCBzdGF0dXMpOwotICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKLSAgfSBlbHNlIGlmICh3cml0dGVuICE9IHNpemVvZiAoaGVhZGVyKSkgewotICAgIGdfd2FybmluZyAoIlVuZXhwZWN0ZWQgd3JpdGUgc2l6ZTogJSIgR19HU0laRV9GT1JNQVQsIHdyaXR0ZW4pOwotICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKLSAgfQotCi0gIHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWwgPQotICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lIChvYnNlcnZhdGlvbl9zeXN0ZW1fY2xvY2spOwotCi0gIHN0YXR1cyA9Ci0gICAgICBnX2lvX2NoYW5uZWxfd3JpdGVfY2hhcnMgKHN0ZG91dF9jaGFubmVsLAotICAgICAgKGNvbnN0IGdjaGFyICopIGRlbGF5X3JlcSwgNDQsICZ3cml0dGVuLCAmZXJyKTsKLSAgaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19FUlJPUikgewotICAgIGdfd2FybmluZyAoIkZhaWxlZCB0byB3cml0ZSB0byBzdGRvdXQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzID09IEdfSU9fU1RBVFVTX0VPRikgewotICAgIGdfbWVzc2FnZSAoIkVPRiBvbiBzdGRvdXQiKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzICE9IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgIGdfd2FybmluZyAoIlVuZXhwZWN0ZWQgc3Rkb3V0IHdyaXRlIHN0YXR1czogJWQiLCBzdGF0dXMpOwotICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKLSAgfSBlbHNlIGlmICh3cml0dGVuICE9IDQ0KSB7Ci0gICAgZ193YXJuaW5nICgiVW5leHBlY3RlZCB3cml0ZSBzaXplOiAlIiBHX0dTSVpFX0ZPUk1BVCwgd3JpdHRlbik7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCAobWFpbl9sb29wKTsKLSAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwotICB9Ci0KLSAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zZW5kX2RlbGF5X3JlcSAoUHRwRG9tYWluRGF0YSAqIGRvbWFpbiwgUHRwUGVuZGluZ1N5bmMgKiBzeW5jKQotewotICBHc3RDbG9ja1RpbWUgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChvYnNlcnZhdGlvbl9zeXN0ZW1fY2xvY2spOwotICBndWludCB0aW1lb3V0OwotICBHU291cmNlICp0aW1lb3V0X3NvdXJjZTsKLQotICBpZiAoZG9tYWluLT5sYXN0X2RlbGF5X3JlcSAhPSAwCi0gICAgICAmJiBkb21haW4tPmxhc3RfZGVsYXlfcmVxICsgZG9tYWluLT5taW5fZGVsYXlfcmVxX2ludGVydmFsID4gbm93KQotICAgIHJldHVybiBGQUxTRTsKLQotICBkb21haW4tPmxhc3RfZGVsYXlfcmVxID0gbm93OwotICBzeW5jLT5kZWxheV9yZXFfc2VxbnVtID0gZG9tYWluLT5sYXN0X2RlbGF5X3JlcV9zZXFudW0rKzsKLQotICAvKiBJRUVFIDE1ODggOS41LjExLjIgKi8KLSAgaWYgKGRvbWFpbi0+bGFzdF9kZWxheV9yZXEgPT0gMCB8fCBkb21haW4tPm1pbl9kZWxheV9yZXFfaW50ZXJ2YWwgPT0gMCkKLSAgICB0aW1lb3V0ID0gMDsKLSAgZWxzZQotICAgIHRpbWVvdXQgPQotICAgICAgICBnX3JhbmRfaW50X3JhbmdlIChkZWxheV9yZXFfcmFuZCwgMCwKLSAgICAgICAgKGRvbWFpbi0+bWluX2RlbGF5X3JlcV9pbnRlcnZhbCAqIDIpIC8gR1NUX01TRUNPTkQpOwotCi0gIHN5bmMtPnRpbWVvdXRfc291cmNlID0gdGltZW91dF9zb3VyY2UgPSBnX3RpbWVvdXRfc291cmNlX25ldyAodGltZW91dCk7Ci0gIGdfc291cmNlX3NldF9wcmlvcml0eSAodGltZW91dF9zb3VyY2UsIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0gIGdfc291cmNlX3NldF9jYWxsYmFjayAodGltZW91dF9zb3VyY2UsIChHU291cmNlRnVuYykgc2VuZF9kZWxheV9yZXFfdGltZW91dCwKLSAgICAgIHN5bmMsIE5VTEwpOwotICBnX3NvdXJjZV9hdHRhY2ggKHRpbWVvdXRfc291cmNlLCBtYWluX2NvbnRleHQpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBGaWx0ZXJpbmcgb2Ygb3V0bGllcnMgZm9yIFJUVCBhbmQgdGltZSBjYWxjdWxhdGlvbnMgaW5zcGlyZWQKLSAqIGJ5IHRoZSBjb2RlIGZyb20gZ3N0bmV0Y2xpZW50Y2xvY2suYwotICovCi1zdGF0aWMgdm9pZAotdXBkYXRlX3B0cF90aW1lIChQdHBEb21haW5EYXRhICogZG9tYWluLCBQdHBQZW5kaW5nU3luYyAqIHN5bmMpCi17Ci0gIEdzdENsb2NrVGltZSBpbnRlcm5hbF90aW1lLCBleHRlcm5hbF90aW1lLCByYXRlX251bSwgcmF0ZV9kZW47Ci0gIEdzdENsb2NrVGltZSBjb3JyZWN0ZWRfcHRwX3RpbWUsIGNvcnJlY3RlZF9sb2NhbF90aW1lOwotICBnZG91YmxlIHJfc3F1YXJlZCA9IDAuMDsKLSAgZ2Jvb2xlYW4gc3luY2VkOwotICBHc3RDbG9ja1RpbWVEaWZmIGRpc2NvbnQgPSAwOwotICBHc3RDbG9ja1RpbWUgZXN0aW1hdGVkX3B0cF90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSNpZmRlZiBVU0VfTUVBU1VSRU1FTlRfRklMVEVSSU5HCi0gIEdzdENsb2NrVGltZSBvcmlnX2ludGVybmFsX3RpbWUsIG9yaWdfZXh0ZXJuYWxfdGltZSwgb3JpZ19yYXRlX251bSwKLSAgICAgIG9yaWdfcmF0ZV9kZW47Ci0gIEdzdENsb2NrVGltZSBuZXdfZXN0aW1hdGVkX3B0cF90aW1lOwotICBHc3RDbG9ja1RpbWUgbWF4X2Rpc2NvbnQsIGVzdGltYXRlZF9wdHBfdGltZV9taW4sIGVzdGltYXRlZF9wdHBfdGltZV9tYXg7Ci0gIGdib29sZWFuIG5vd19zeW5jZWQ7Ci0jZW5kaWYKLQotI2lmZGVmIFVTRV9PTkxZX1NZTkNfV0lUSF9ERUxBWQotICBHc3RDbG9ja1RpbWUgbWVhbl9wYXRoX2RlbGF5OwotCi0gIGlmIChzeW5jLT5kZWxheV9yZXFfc2VuZF90aW1lX2xvY2FsID09IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgcmV0dXJuOwotCi0gIC8qIElFRUUgMTU4OCAxMS4zICovCi0gIG1lYW5fcGF0aF9kZWxheSA9Ci0gICAgICAoc3luYy0+ZGVsYXlfcmVxX3JlY3ZfdGltZV9yZW1vdGUgLSBzeW5jLT5zeW5jX3NlbmRfdGltZV9yZW1vdGUgKwotICAgICAgc3luYy0+c3luY19yZWN2X3RpbWVfbG9jYWwgLSBzeW5jLT5kZWxheV9yZXFfc2VuZF90aW1lX2xvY2FsIC0KLSAgICAgIChzeW5jLT5jb3JyZWN0aW9uX2ZpZWxkX3N5bmMgKyBzeW5jLT5jb3JyZWN0aW9uX2ZpZWxkX2RlbGF5ICsKLSAgICAgICAgICAzMjc2OCkgLyA2NTUzNikgLyAyOwotI2VuZGlmCi0KLSAgLyogSUVFRSAxNTg4IDExLjIgKi8KLSAgY29ycmVjdGVkX3B0cF90aW1lID0KLSAgICAgIHN5bmMtPnN5bmNfc2VuZF90aW1lX3JlbW90ZSArCi0gICAgICAoc3luYy0+Y29ycmVjdGlvbl9maWVsZF9zeW5jICsgMzI3NjgpIC8gNjU1MzY7Ci0KLSNpZmRlZiBVU0VfT05MWV9TWU5DX1dJVEhfREVMQVkKLSAgY29ycmVjdGVkX2xvY2FsX3RpbWUgPSBzeW5jLT5zeW5jX3JlY3ZfdGltZV9sb2NhbCAtIG1lYW5fcGF0aF9kZWxheTsKLSNlbHNlCi0gIGNvcnJlY3RlZF9sb2NhbF90aW1lID0gc3luYy0+c3luY19yZWN2X3RpbWVfbG9jYWwgLSBkb21haW4tPm1lYW5fcGF0aF9kZWxheTsKLSNlbmRpZgotCi0jaWZkZWYgVVNFX01FQVNVUkVNRU5UX0ZJTFRFUklORwotICAvKiBXZSBjaGVjayB0aGlzIGhlcmUgYW5kIHdoZW4gdXBkYXRpbmcgdGhlIG1lYW4gcGF0aCBkZWxheSwgYmVjYXVzZQotICAgKiB3ZSBjYW4gZ2V0IGhlcmUgd2l0aG91dCBhIGRlbGF5IHJlc3BvbnNlIHRvbyAqLwotICBpZiAoc3luYy0+Zm9sbG93X3VwX3JlY3ZfdGltZV9sb2NhbCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FCi0gICAgICAmJiBzeW5jLT5mb2xsb3dfdXBfcmVjdl90aW1lX2xvY2FsID4KLSAgICAgIHN5bmMtPnN5bmNfcmVjdl90aW1lX2xvY2FsICsgMiAqIGRvbWFpbi0+bWVhbl9wYXRoX2RlbGF5KSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJTeW5jLWZvbGxvdy11cCBkZWxheSBmb3IgZG9tYWluICV1IHRvbyBiaWc6ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiID4gMiAqICUiIEdTVF9USU1FX0ZPUk1BVCwgZG9tYWluLT5kb21haW4sCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHN5bmMtPmZvbGxvd191cF9yZWN2X3RpbWVfbG9jYWwpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChkb21haW4tPm1lYW5fcGF0aF9kZWxheSkpOwotICAgIHN5bmNlZCA9IEZBTFNFOwotICAgIGdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24gKEdTVF9DTE9DS19DQVNUIChkb21haW4tPmRvbWFpbl9jbG9jayksCi0gICAgICAgICZpbnRlcm5hbF90aW1lLCAmZXh0ZXJuYWxfdGltZSwgJnJhdGVfbnVtLCAmcmF0ZV9kZW4pOwotICAgIGdvdG8gb3V0OwotICB9Ci0jZW5kaWYKLQotICAvKiBTZXQgYW4gaW5pdGlhbCBsb2NhbC1yZW1vdGUgcmVsYXRpb24gKi8KLSAgaWYgKGRvbWFpbi0+bGFzdF9wdHBfdGltZSA9PSAwKQotICAgIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKGRvbWFpbi0+ZG9tYWluX2Nsb2NrLCBjb3JyZWN0ZWRfbG9jYWxfdGltZSwKLSAgICAgICAgY29ycmVjdGVkX3B0cF90aW1lLCAxLCAxKTsKLQotI2lmZGVmIFVTRV9NRUFTVVJFTUVOVF9GSUxURVJJTkcKLSAgLyogQ2hlY2sgaWYgdGhlIGNvcnJlY3RlZCBQVFAgdGltZSBpcyArLy0gMy80IFJUVCBhcm91bmQgd2hhdCB3ZSB3b3VsZAotICAgKiBlc3RpbWF0ZSB3aXRoIG91ciBwcmVzZW50IGtub3dsZWRnZSBhYm91dCB0aGUgY2xvY2sKLSAgICovCi0gIC8qIFN0b3JlIHdoYXQgdGhlIGNsb2NrIHByb2R1Y2VkIGFzICdub3cnIGJlZm9yZSB0aGlzIHVwZGF0ZSAqLwotICBnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uIChHU1RfQ0xPQ0tfQ0FTVCAoZG9tYWluLT5kb21haW5fY2xvY2spLAotICAgICAgJm9yaWdfaW50ZXJuYWxfdGltZSwgJm9yaWdfZXh0ZXJuYWxfdGltZSwgJm9yaWdfcmF0ZV9udW0sICZvcmlnX3JhdGVfZGVuKTsKLSAgaW50ZXJuYWxfdGltZSA9IG9yaWdfaW50ZXJuYWxfdGltZTsKLSAgZXh0ZXJuYWxfdGltZSA9IG9yaWdfZXh0ZXJuYWxfdGltZTsKLSAgcmF0ZV9udW0gPSBvcmlnX3JhdGVfbnVtOwotICByYXRlX2RlbiA9IG9yaWdfcmF0ZV9kZW47Ci0KLSAgLyogMy80IFJUVCB3aW5kb3cgYXJvdW5kIHRoZSBlc3RpbWF0aW9uICovCi0gIG1heF9kaXNjb250ID0gZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkgKiAzIC8gMjsKLQotICAvKiBDaGVjayBpZiB0aGUgZXN0aW1hdGVkIHN5bmMgdGltZSBpcyBpbnNpZGUgb3VyIHdpbmRvdyAqLwotICBlc3RpbWF0ZWRfcHRwX3RpbWVfbWluID0gY29ycmVjdGVkX2xvY2FsX3RpbWUgLSBtYXhfZGlzY29udDsKLSAgZXN0aW1hdGVkX3B0cF90aW1lX21pbiA9Ci0gICAgICBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKEdTVF9DTE9DS19DQVNUIChkb21haW4tPmRvbWFpbl9jbG9jayksCi0gICAgICBlc3RpbWF0ZWRfcHRwX3RpbWVfbWluLCBpbnRlcm5hbF90aW1lLCBleHRlcm5hbF90aW1lLCByYXRlX251bSwgcmF0ZV9kZW4pOwotICBlc3RpbWF0ZWRfcHRwX3RpbWVfbWF4ID0gY29ycmVjdGVkX2xvY2FsX3RpbWUgKyBtYXhfZGlzY29udDsKLSAgZXN0aW1hdGVkX3B0cF90aW1lX21heCA9Ci0gICAgICBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKEdTVF9DTE9DS19DQVNUIChkb21haW4tPmRvbWFpbl9jbG9jayksCi0gICAgICBlc3RpbWF0ZWRfcHRwX3RpbWVfbWF4LCBpbnRlcm5hbF90aW1lLCBleHRlcm5hbF90aW1lLCByYXRlX251bSwgcmF0ZV9kZW4pOwotCi0gIHN5bmNlZCA9IChlc3RpbWF0ZWRfcHRwX3RpbWVfbWluIDwgY29ycmVjdGVkX3B0cF90aW1lCi0gICAgICAmJiBjb3JyZWN0ZWRfcHRwX3RpbWUgPCBlc3RpbWF0ZWRfcHRwX3RpbWVfbWF4KTsKLQotICBHU1RfREVCVUcgKCJBZGRpbmcgb2JzZXJ2YXRpb24gZm9yIGRvbWFpbiAldTogJSIgR1NUX1RJTUVfRk9STUFUICIgLSAlIgotICAgICAgR1NUX1RJTUVfRk9STUFULCBkb21haW4tPmRvbWFpbiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGNvcnJlY3RlZF9wdHBfdGltZSksIEdTVF9USU1FX0FSR1MgKGNvcnJlY3RlZF9sb2NhbF90aW1lKSk7Ci0KLSAgR1NUX0RFQlVHICgiU3luY2VkICVkOiAlIiBHU1RfVElNRV9GT1JNQVQgIiA8ICUiIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgc3luY2VkLCBHU1RfVElNRV9BUkdTIChlc3RpbWF0ZWRfcHRwX3RpbWVfbWluKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGNvcnJlY3RlZF9wdHBfdGltZSksCi0gICAgICBHU1RfVElNRV9BUkdTIChlc3RpbWF0ZWRfcHRwX3RpbWVfbWF4KSk7Ci0KLSAgaWYgKGdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb25fdW5hcHBsaWVkIChkb21haW4tPmRvbWFpbl9jbG9jaywKLSAgICAgICAgICBjb3JyZWN0ZWRfbG9jYWxfdGltZSwgY29ycmVjdGVkX3B0cF90aW1lLCAmcl9zcXVhcmVkLAotICAgICAgICAgICZpbnRlcm5hbF90aW1lLCAmZXh0ZXJuYWxfdGltZSwgJnJhdGVfbnVtLCAmcmF0ZV9kZW4pKSB7Ci0gICAgR1NUX0RFQlVHICgiUmVncmVzc2lvbiBnYXZlIHJfc3F1YXJlZDogJWYiLCByX3NxdWFyZWQpOwotCi0gICAgLyogT2xkIGVzdGltYXRlZCBQVFAgdGltZSBiYXNlZCBvbiByZWNlaXZlIHRpbWUgYW5kIHBhdGggZGVsYXkgKi8KLSAgICBlc3RpbWF0ZWRfcHRwX3RpbWUgPSBjb3JyZWN0ZWRfbG9jYWxfdGltZTsKLSAgICBlc3RpbWF0ZWRfcHRwX3RpbWUgPQotICAgICAgICBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKEdTVF9DTE9DS19DQVNUCi0gICAgICAgIChkb21haW4tPmRvbWFpbl9jbG9jayksIGVzdGltYXRlZF9wdHBfdGltZSwgb3JpZ19pbnRlcm5hbF90aW1lLAotICAgICAgICBvcmlnX2V4dGVybmFsX3RpbWUsIG9yaWdfcmF0ZV9udW0sIG9yaWdfcmF0ZV9kZW4pOwotCi0gICAgLyogTmV3IGVzdGltYXRlZCBQVFAgdGltZSBiYXNlZCBvbiByZWNlaXZlIHRpbWUgYW5kIHBhdGggZGVsYXkgKi8KLSAgICBuZXdfZXN0aW1hdGVkX3B0cF90aW1lID0gY29ycmVjdGVkX2xvY2FsX3RpbWU7Ci0gICAgbmV3X2VzdGltYXRlZF9wdHBfdGltZSA9Ci0gICAgICAgIGdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbiAoR1NUX0NMT0NLX0NBU1QKLSAgICAgICAgKGRvbWFpbi0+ZG9tYWluX2Nsb2NrKSwgbmV3X2VzdGltYXRlZF9wdHBfdGltZSwgaW50ZXJuYWxfdGltZSwKLSAgICAgICAgZXh0ZXJuYWxfdGltZSwgcmF0ZV9udW0sIHJhdGVfZGVuKTsKLQotICAgIGRpc2NvbnQgPSBHU1RfQ0xPQ0tfRElGRiAoZXN0aW1hdGVkX3B0cF90aW1lLCBuZXdfZXN0aW1hdGVkX3B0cF90aW1lKTsKLSAgICBpZiAoc3luY2VkICYmIEFCUyAoZGlzY29udCkgPiBtYXhfZGlzY29udCkgewotICAgICAgR3N0Q2xvY2tUaW1lRGlmZiBvZmZzZXQ7Ci0gICAgICBHU1RfREVCVUcgKCJUb28gbGFyZ2UgYSBkaXNjb250ICVzJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgIiwgY2xhbXBpbmcgdG8gMS80IGF2ZXJhZ2UgUlRUID0gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIChkaXNjb250IDwgMCA/ICItIiA6ICIiKSwgR1NUX1RJTUVfQVJHUyAoQUJTIChkaXNjb250KSksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAobWF4X2Rpc2NvbnQpKTsKLSAgICAgIGlmIChkaXNjb250ID4gMCkgeyAgICAgICAgLyogVG9vIGxhcmdlIGEgZm9yd2FyZCBzdGVwIC0gYWRkIGEgLXZlIG9mZnNldCAqLwotICAgICAgICBvZmZzZXQgPSBtYXhfZGlzY29udCAtIGRpc2NvbnQ7Ci0gICAgICAgIGlmICgtb2Zmc2V0ID4gZXh0ZXJuYWxfdGltZSkKLSAgICAgICAgICBleHRlcm5hbF90aW1lID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGV4dGVybmFsX3RpbWUgKz0gb2Zmc2V0OwotICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAvKiBUb28gbGFyZ2UgYSBiYWNrd2FyZCBzdGVwIC0gYWRkIGEgK3ZlIG9mZnNldCAqLwotICAgICAgICBvZmZzZXQgPSAtKG1heF9kaXNjb250ICsgZGlzY29udCk7Ci0gICAgICAgIGV4dGVybmFsX3RpbWUgKz0gb2Zmc2V0OwotICAgICAgfQotCi0gICAgICBkaXNjb250ICs9IG9mZnNldDsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHICgiRGlzY29udCAlcyUiIEdTVF9USU1FX0ZPUk1BVCAiIChtYXg6ICUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsCi0gICAgICAgICAgKGRpc2NvbnQgPCAwID8gIi0iIDogIiIpLCBHU1RfVElNRV9BUkdTIChBQlMgKGRpc2NvbnQpKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChtYXhfZGlzY29udCkpOwotICAgIH0KLQotICAgIC8qIENoZWNrIGlmIHRoZSBlc3RpbWF0ZWQgc3luYyB0aW1lIGlzIG5vdyAoc3RpbGwpIGluc2lkZSBvdXIgd2luZG93ICovCi0gICAgZXN0aW1hdGVkX3B0cF90aW1lX21pbiA9IGNvcnJlY3RlZF9sb2NhbF90aW1lIC0gbWF4X2Rpc2NvbnQ7Ci0gICAgZXN0aW1hdGVkX3B0cF90aW1lX21pbiA9Ci0gICAgICAgIGdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbiAoR1NUX0NMT0NLX0NBU1QKLSAgICAgICAgKGRvbWFpbi0+ZG9tYWluX2Nsb2NrKSwgZXN0aW1hdGVkX3B0cF90aW1lX21pbiwgaW50ZXJuYWxfdGltZSwKLSAgICAgICAgZXh0ZXJuYWxfdGltZSwgcmF0ZV9udW0sIHJhdGVfZGVuKTsKLSAgICBlc3RpbWF0ZWRfcHRwX3RpbWVfbWF4ID0gY29ycmVjdGVkX2xvY2FsX3RpbWUgKyBtYXhfZGlzY29udDsKLSAgICBlc3RpbWF0ZWRfcHRwX3RpbWVfbWF4ID0KLSAgICAgICAgZ3N0X2Nsb2NrX2FkanVzdF93aXRoX2NhbGlicmF0aW9uIChHU1RfQ0xPQ0tfQ0FTVAotICAgICAgICAoZG9tYWluLT5kb21haW5fY2xvY2spLCBlc3RpbWF0ZWRfcHRwX3RpbWVfbWF4LCBpbnRlcm5hbF90aW1lLAotICAgICAgICBleHRlcm5hbF90aW1lLCByYXRlX251bSwgcmF0ZV9kZW4pOwotCi0gICAgbm93X3N5bmNlZCA9IChlc3RpbWF0ZWRfcHRwX3RpbWVfbWluIDwgY29ycmVjdGVkX3B0cF90aW1lCi0gICAgICAgICYmIGNvcnJlY3RlZF9wdHBfdGltZSA8IGVzdGltYXRlZF9wdHBfdGltZV9tYXgpOwotCi0gICAgR1NUX0RFQlVHICgiTm93IHN5bmNlZCAlZDogJSIgR1NUX1RJTUVfRk9STUFUICIgPCAlIiBHU1RfVElNRV9GT1JNQVQgIiA8ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgbm93X3N5bmNlZCwgR1NUX1RJTUVfQVJHUyAoZXN0aW1hdGVkX3B0cF90aW1lX21pbiksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGNvcnJlY3RlZF9wdHBfdGltZSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGVzdGltYXRlZF9wdHBfdGltZV9tYXgpKTsKLQotICAgIGlmIChzeW5jZWQgfHwgbm93X3N5bmNlZCB8fCBkb21haW4tPnNraXBwZWRfdXBkYXRlcyA+IE1BWF9TS0lQUEVEX1VQREFURVMpIHsKLSAgICAgIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKEdTVF9DTE9DS19DQVNUIChkb21haW4tPmRvbWFpbl9jbG9jayksCi0gICAgICAgICAgaW50ZXJuYWxfdGltZSwgZXh0ZXJuYWxfdGltZSwgcmF0ZV9udW0sIHJhdGVfZGVuKTsKLSAgICAgIGRvbWFpbi0+c2tpcHBlZF91cGRhdGVzID0gMDsKLQotICAgICAgZG9tYWluLT5sYXN0X3B0cF90aW1lID0gY29ycmVjdGVkX3B0cF90aW1lOwotICAgICAgZG9tYWluLT5sYXN0X2xvY2FsX3RpbWUgPSBjb3JyZWN0ZWRfbG9jYWxfdGltZTsKLSAgICB9IGVsc2UgewotICAgICAgZG9tYWluLT5za2lwcGVkX3VwZGF0ZXMrKzsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZG9tYWluLT5sYXN0X3B0cF90aW1lID0gY29ycmVjdGVkX3B0cF90aW1lOwotICAgIGRvbWFpbi0+bGFzdF9sb2NhbF90aW1lID0gY29ycmVjdGVkX2xvY2FsX3RpbWU7Ci0gIH0KLQotI2Vsc2UKLSAgR1NUX0RFQlVHICgiQWRkaW5nIG9ic2VydmF0aW9uIGZvciBkb21haW4gJXU6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgZG9tYWluLT5kb21haW4sCi0gICAgICBHU1RfVElNRV9BUkdTIChjb3JyZWN0ZWRfcHRwX3RpbWUpLCBHU1RfVElNRV9BUkdTIChjb3JyZWN0ZWRfbG9jYWxfdGltZSkpOwotCi0gIGdzdF9jbG9ja19nZXRfY2FsaWJyYXRpb24gKEdTVF9DTE9DS19DQVNUIChkb21haW4tPmRvbWFpbl9jbG9jayksCi0gICAgICAmaW50ZXJuYWxfdGltZSwgJmV4dGVybmFsX3RpbWUsICZyYXRlX251bSwgJnJhdGVfZGVuKTsKLQotICBlc3RpbWF0ZWRfcHRwX3RpbWUgPSBjb3JyZWN0ZWRfbG9jYWxfdGltZTsKLSAgZXN0aW1hdGVkX3B0cF90aW1lID0KLSAgICAgIGdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbiAoR1NUX0NMT0NLX0NBU1QKLSAgICAgIChkb21haW4tPmRvbWFpbl9jbG9jayksIGVzdGltYXRlZF9wdHBfdGltZSwgaW50ZXJuYWxfdGltZSwKLSAgICAgIGV4dGVybmFsX3RpbWUsIHJhdGVfbnVtLCByYXRlX2Rlbik7Ci0KLSAgZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbiAoZG9tYWluLT5kb21haW5fY2xvY2ssCi0gICAgICBjb3JyZWN0ZWRfbG9jYWxfdGltZSwgY29ycmVjdGVkX3B0cF90aW1lLCAmcl9zcXVhcmVkKTsKLQotICBnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uIChHU1RfQ0xPQ0tfQ0FTVCAoZG9tYWluLT5kb21haW5fY2xvY2spLAotICAgICAgJmludGVybmFsX3RpbWUsICZleHRlcm5hbF90aW1lLCAmcmF0ZV9udW0sICZyYXRlX2Rlbik7Ci0KLSAgc3luY2VkID0gVFJVRTsKLSAgZG9tYWluLT5sYXN0X3B0cF90aW1lID0gY29ycmVjdGVkX3B0cF90aW1lOwotICBkb21haW4tPmxhc3RfbG9jYWxfdGltZSA9IGNvcnJlY3RlZF9sb2NhbF90aW1lOwotI2VuZGlmCi0KLSNpZmRlZiBVU0VfTUVBU1VSRU1FTlRfRklMVEVSSU5HCi1vdXQ6Ci0jZW5kaWYKLSAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZkb21haW5fc3RhdHNfbl9ob29rcykpIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0YXRzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKEdTVF9QVFBfU1RBVElTVElDU19USU1FX1VQREFURUQsCi0gICAgICAgICJkb21haW4iLCBHX1RZUEVfVUlOVCwgZG9tYWluLT5kb21haW4sCi0gICAgICAgICJtZWFuLXBhdGgtZGVsYXktYXZnIiwgR1NUX1RZUEVfQ0xPQ0tfVElNRSwgZG9tYWluLT5tZWFuX3BhdGhfZGVsYXksCi0gICAgICAgICJsb2NhbC10aW1lIiwgR1NUX1RZUEVfQ0xPQ0tfVElNRSwgY29ycmVjdGVkX2xvY2FsX3RpbWUsCi0gICAgICAgICJwdHAtdGltZSIsIEdTVF9UWVBFX0NMT0NLX1RJTUUsIGNvcnJlY3RlZF9wdHBfdGltZSwKLSAgICAgICAgImVzdGltYXRlZC1wdHAtdGltZSIsIEdTVF9UWVBFX0NMT0NLX1RJTUUsIGVzdGltYXRlZF9wdHBfdGltZSwKLSAgICAgICAgImRpc2NvbnRpbnVpdHkiLCBHX1RZUEVfSU5UNjQsIGRpc2NvbnQsCi0gICAgICAgICJzeW5jZWQiLCBHX1RZUEVfQk9PTEVBTiwgc3luY2VkLAotICAgICAgICAici1zcXVhcmVkIiwgR19UWVBFX0RPVUJMRSwgcl9zcXVhcmVkLAotICAgICAgICAiaW50ZXJuYWwtdGltZSIsIEdTVF9UWVBFX0NMT0NLX1RJTUUsIGludGVybmFsX3RpbWUsCi0gICAgICAgICJleHRlcm5hbC10aW1lIiwgR1NUX1RZUEVfQ0xPQ0tfVElNRSwgZXh0ZXJuYWxfdGltZSwKLSAgICAgICAgInJhdGUtbnVtIiwgR19UWVBFX1VJTlQ2NCwgcmF0ZV9udW0sCi0gICAgICAgICJyYXRlLWRlbiIsIEdfVFlQRV9VSU5UNjQsIHJhdGVfZGVuLAotICAgICAgICAicmF0ZSIsIEdfVFlQRV9ET1VCTEUsIChnZG91YmxlKSAocmF0ZV9udW0pIC8gcmF0ZV9kZW4sCi0gICAgICAgIE5VTEwpOwotICAgIGVtaXRfcHRwX3N0YXRpc3RpY3MgKGRvbWFpbi0+ZG9tYWluLCBzdGF0cyk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdGF0cyk7Ci0gIH0KLQotfQotCi0jaWZkZWYgVVNFX01FRElBTl9QUkVfRklMVEVSSU5HCi1zdGF0aWMgZ2ludAotY29tcGFyZV9jbG9ja190aW1lIChjb25zdCBHc3RDbG9ja1RpbWUgKiBhLCBjb25zdCBHc3RDbG9ja1RpbWUgKiBiKQotewotICBpZiAoKmEgPCAqYikKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UgaWYgKCphID4gKmIpCi0gICAgcmV0dXJuIDE7Ci0gIHJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBnYm9vbGVhbgotdXBkYXRlX21lYW5fcGF0aF9kZWxheSAoUHRwRG9tYWluRGF0YSAqIGRvbWFpbiwgUHRwUGVuZGluZ1N5bmMgKiBzeW5jKQotewotI2lmZGVmIFVTRV9NRURJQU5fUFJFX0ZJTFRFUklORwotICBHc3RDbG9ja1RpbWUgbGFzdF9wYXRoX2RlbGF5c1tNRURJQU5fUFJFX0ZJTFRFUklOR19XSU5ET1ddOwotICBHc3RDbG9ja1RpbWUgbWVkaWFuOwotICBnaW50IGk7Ci0jZW5kaWYKLQotICBHc3RDbG9ja1RpbWUgbWVhbl9wYXRoX2RlbGF5LCBkZWxheV9yZXFfZGVsYXkgPSAwOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgLyogSUVFRSAxNTg4IDExLjMgKi8KLSAgbWVhbl9wYXRoX2RlbGF5ID0KLSAgICAgIChzeW5jLT5kZWxheV9yZXFfcmVjdl90aW1lX3JlbW90ZSAtIHN5bmMtPnN5bmNfc2VuZF90aW1lX3JlbW90ZSArCi0gICAgICBzeW5jLT5zeW5jX3JlY3ZfdGltZV9sb2NhbCAtIHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWwgLQotICAgICAgKHN5bmMtPmNvcnJlY3Rpb25fZmllbGRfc3luYyArIHN5bmMtPmNvcnJlY3Rpb25fZmllbGRfZGVsYXkgKwotICAgICAgICAgIDMyNzY4KSAvIDY1NTM2KSAvIDI7Ci0KLSNpZmRlZiBVU0VfTUVESUFOX1BSRV9GSUxURVJJTkcKLSAgZm9yIChpID0gMTsgaSA8IE1FRElBTl9QUkVfRklMVEVSSU5HX1dJTkRPVzsgaSsrKQotICAgIGRvbWFpbi0+bGFzdF9wYXRoX2RlbGF5c1tpIC0gMV0gPSBkb21haW4tPmxhc3RfcGF0aF9kZWxheXNbaV07Ci0gIGRvbWFpbi0+bGFzdF9wYXRoX2RlbGF5c1tpIC0gMV0gPSBtZWFuX3BhdGhfZGVsYXk7Ci0KLSAgaWYgKGRvbWFpbi0+bGFzdF9wYXRoX2RlbGF5c19taXNzaW5nKSB7Ci0gICAgZG9tYWluLT5sYXN0X3BhdGhfZGVsYXlzX21pc3NpbmctLTsKLSAgfSBlbHNlIHsKLSAgICBtZW1jcHkgKCZsYXN0X3BhdGhfZGVsYXlzLCAmZG9tYWluLT5sYXN0X3BhdGhfZGVsYXlzLAotICAgICAgICBzaXplb2YgKGxhc3RfcGF0aF9kZWxheXMpKTsKLSAgICBnX3Fzb3J0X3dpdGhfZGF0YSAoJmxhc3RfcGF0aF9kZWxheXMsCi0gICAgICAgIE1FRElBTl9QUkVfRklMVEVSSU5HX1dJTkRPVywgc2l6ZW9mIChHc3RDbG9ja1RpbWUpLAotICAgICAgICAoR0NvbXBhcmVEYXRhRnVuYykgY29tcGFyZV9jbG9ja190aW1lLCBOVUxMKTsKLQotICAgIG1lZGlhbiA9IGxhc3RfcGF0aF9kZWxheXNbTUVESUFOX1BSRV9GSUxURVJJTkdfV0lORE9XIC8gMl07Ci0KLSAgICAvKiBGSVhNRTogV2UgbWlnaHQgd2FudCB0byB1c2Ugc29tZXRoaW5nIGVsc2UgaGVyZSwgbGlrZSBvbmx5IGFsbG93aW5nCi0gICAgICogdGhpbmdzIGluIHRoZSBpbnRlcnF1YXJ0aWxlIHJhbmdlLCBvciBhbHNvIGZpbHRlcmluZyBhd2F5IGRlbGF5cyB0aGF0Ci0gICAgICogYXJlIHRvbyBzbWFsbCBjb21wYXJlZCB0byB0aGUgbWVkaWFuLiBUaGlzIGhlcmUgd29ya2VkIHdlbGwgZW5vdWdoCi0gICAgICogaW4gdGVzdHMgc28gZmFyLgotICAgICAqLwotICAgIGlmIChtZWFuX3BhdGhfZGVsYXkgPiAyICogbWVkaWFuKSB7Ci0gICAgICBHU1RfV0FSTklORyAoIlBhdGggZGVsYXkgZm9yIGRvbWFpbiAldSB0b28gYmlnIGNvbXBhcmVkIHRvIG1lZGlhbjogJSIKLSAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiA+IDIgKiAlIiBHU1RfVElNRV9GT1JNQVQsIGRvbWFpbi0+ZG9tYWluLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1lYW5fcGF0aF9kZWxheSksIEdTVF9USU1FX0FSR1MgKG1lZGlhbikpOwotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBnb3RvIG91dDsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgVVNFX1JVTk5JTkdfQVZFUkFHRV9ERUxBWQotICAvKiBUcmFjayBhbiBhdmVyYWdlIHJvdW5kIHRyaXAgdGltZSwgZm9yIGEgYml0IG9mIHNtb290aGluZyAqLwotICAvKiBBbHdheXMgdXBkYXRlIGJlZm9yZSBkaXNjYXJkaW5nIGEgc2FtcGxlLCBzbyBnZW51aW5lIGNoYW5nZXMgaW4KLSAgICogdGhlIG5ldHdvcmsgZ2V0IHBpY2tlZCB1cCwgZXZlbnR1YWxseSAqLwotICBpZiAoZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkgPT0gMCkKLSAgICBkb21haW4tPm1lYW5fcGF0aF9kZWxheSA9IG1lYW5fcGF0aF9kZWxheTsKLSAgZWxzZSBpZiAobWVhbl9wYXRoX2RlbGF5IDwgZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkpICAgLyogU2hvcnRlciBSVFRzIGNhcnJ5IG1vcmUgd2VpZ2h0IHRoYW4gbG9uZ2VyICovCi0gICAgZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkgPQotICAgICAgICAoMyAqIGRvbWFpbi0+bWVhbl9wYXRoX2RlbGF5ICsgbWVhbl9wYXRoX2RlbGF5KSAvIDQ7Ci0gIGVsc2UKLSAgICBkb21haW4tPm1lYW5fcGF0aF9kZWxheSA9Ci0gICAgICAgICgxNSAqIGRvbWFpbi0+bWVhbl9wYXRoX2RlbGF5ICsgbWVhbl9wYXRoX2RlbGF5KSAvIDE2OwotI2Vsc2UKLSAgZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkgPSBtZWFuX3BhdGhfZGVsYXk7Ci0jZW5kaWYKLQotI2lmZGVmIFVTRV9NRUFTVVJFTUVOVF9GSUxURVJJTkcKLSAgaWYgKHN5bmMtPmZvbGxvd191cF9yZWN2X3RpbWVfbG9jYWwgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJgotICAgICAgZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkgIT0gMAotICAgICAgJiYgc3luYy0+Zm9sbG93X3VwX3JlY3ZfdGltZV9sb2NhbCA+Ci0gICAgICBzeW5jLT5zeW5jX3JlY3ZfdGltZV9sb2NhbCArIDIgKiBkb21haW4tPm1lYW5fcGF0aF9kZWxheSkgewotICAgIEdTVF9XQVJOSU5HICgiU3luYy1mb2xsb3ctdXAgZGVsYXkgZm9yIGRvbWFpbiAldSB0b28gYmlnOiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiA+IDIgKiAlIiBHU1RfVElNRV9GT1JNQVQsIGRvbWFpbi0+ZG9tYWluLAotICAgICAgICBHU1RfVElNRV9BUkdTIChzeW5jLT5mb2xsb3dfdXBfcmVjdl90aW1lX2xvY2FsIC0KLSAgICAgICAgICAgIHN5bmMtPnN5bmNfcmVjdl90aW1lX2xvY2FsKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkpKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgICBnb3RvIG91dDsKLSAgfQotCi0gIGlmIChtZWFuX3BhdGhfZGVsYXkgPiAyICogZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkpIHsKLSAgICBHU1RfV0FSTklORyAoIk1lYW4gcGF0aCBkZWxheSBmb3IgZG9tYWluICV1IHRvbyBiaWc6ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiID4gMiAqICUiIEdTVF9USU1FX0ZPUk1BVCwgZG9tYWluLT5kb21haW4sCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKG1lYW5fcGF0aF9kZWxheSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGRvbWFpbi0+bWVhbl9wYXRoX2RlbGF5KSk7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLSNlbmRpZgotCi0gIGRlbGF5X3JlcV9kZWxheSA9Ci0gICAgICBzeW5jLT5kZWxheV9yZXNwX3JlY3ZfdGltZV9sb2NhbCAtIHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWw7Ci0KLSNpZmRlZiBVU0VfTUVBU1VSRU1FTlRfRklMVEVSSU5HCi0gIC8qIGRlbGF5X3JlcV9kZWxheSBpcyBhIFJUVCwgc28gMiB0aW1lcyB0aGUgcGF0aCBkZWxheSAqLwotICBpZiAoZGVsYXlfcmVxX2RlbGF5ID4gNCAqIGRvbWFpbi0+bWVhbl9wYXRoX2RlbGF5KSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJEZWxheS1yZXF1ZXN0LXJlc3BvbnNlIGRlbGF5IGZvciBkb21haW4gJXUgdG9vIGJpZzogJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgPiA0ICogJSIgR1NUX1RJTUVfRk9STUFULCBkb21haW4tPmRvbWFpbiwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGVsYXlfcmVxX2RlbGF5KSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkpKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgICBnb3RvIG91dDsKLSAgfQotI2VuZGlmCi0KLSAgcmV0ID0gVFJVRTsKLQotICBHU1RfREVCVUcgKCJHb3QgbWVhbiBwYXRoIGRlbGF5IGZvciBkb21haW4gJXU6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIChuZXc6ICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQgIikiLCBkb21haW4tPmRvbWFpbiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGRvbWFpbi0+bWVhbl9wYXRoX2RlbGF5KSwgR1NUX1RJTUVfQVJHUyAobWVhbl9wYXRoX2RlbGF5KSk7Ci0gIEdTVF9ERUJVRyAoIkRlbGF5IHJlcXVlc3QgZGVsYXkgZm9yIGRvbWFpbiAldTogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgZG9tYWluLT5kb21haW4sIEdTVF9USU1FX0FSR1MgKGRlbGF5X3JlcV9kZWxheSkpOwotCi0jaWZkZWYgVVNFX01FQVNVUkVNRU5UX0ZJTFRFUklORwotb3V0OgotI2VuZGlmCi0gIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmZG9tYWluX3N0YXRzX25faG9va3MpKSB7Ci0gICAgR3N0U3RydWN0dXJlICpzdGF0cyA9Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3IChHU1RfUFRQX1NUQVRJU1RJQ1NfUEFUSF9ERUxBWV9NRUFTVVJFRCwKLSAgICAgICAgImRvbWFpbiIsIEdfVFlQRV9VSU5ULCBkb21haW4tPmRvbWFpbiwKLSAgICAgICAgIm1lYW4tcGF0aC1kZWxheS1hdmciLCBHU1RfVFlQRV9DTE9DS19USU1FLCBkb21haW4tPm1lYW5fcGF0aF9kZWxheSwKLSAgICAgICAgIm1lYW4tcGF0aC1kZWxheSIsIEdTVF9UWVBFX0NMT0NLX1RJTUUsIG1lYW5fcGF0aF9kZWxheSwKLSAgICAgICAgImRlbGF5LXJlcXVlc3QtZGVsYXkiLCBHU1RfVFlQRV9DTE9DS19USU1FLCBkZWxheV9yZXFfZGVsYXksIE5VTEwpOwotICAgIGVtaXRfcHRwX3N0YXRpc3RpY3MgKGRvbWFpbi0+ZG9tYWluLCBzdGF0cyk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdGF0cyk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX3N5bmNfbWVzc2FnZSAoUHRwTWVzc2FnZSAqIG1zZywgR3N0Q2xvY2tUaW1lIHJlY2VpdmVfdGltZSkKLXsKLSAgR0xpc3QgKmw7Ci0gIFB0cERvbWFpbkRhdGEgKmRvbWFpbiA9IE5VTEw7Ci0gIFB0cFBlbmRpbmdTeW5jICpzeW5jID0gTlVMTDsKLQotICAvKiBEb24ndCBjb25zaWRlciBtZXNzYWdlcyB3aXRoIHRoZSBhbHRlcm5hdGUgbWFzdGVyIGZsYWcgc2V0ICovCi0gIGlmICgobXNnLT5mbGFnX2ZpZWxkICYgMHgwMTAwKSkKLSAgICByZXR1cm47Ci0KLSAgZm9yIChsID0gZG9tYWluX2RhdGE7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgUHRwRG9tYWluRGF0YSAqdG1wID0gbC0+ZGF0YTsKLQotICAgIGlmIChtc2ctPmRvbWFpbl9udW1iZXIgPT0gdG1wLT5kb21haW4pIHsKLSAgICAgIGRvbWFpbiA9IHRtcDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmICghZG9tYWluKSB7Ci0gICAgZ2NoYXIgKmNsb2NrX25hbWU7Ci0KLSAgICBkb21haW4gPSBnX25ldzAgKFB0cERvbWFpbkRhdGEsIDEpOwotICAgIGRvbWFpbi0+ZG9tYWluID0gbXNnLT5kb21haW5fbnVtYmVyOwotICAgIGNsb2NrX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJwdHAtY2xvY2stJXUiLCBkb21haW4tPmRvbWFpbik7Ci0gICAgZG9tYWluLT5kb21haW5fY2xvY2sgPQotICAgICAgICBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1NZU1RFTV9DTE9DSywgIm5hbWUiLCBjbG9ja19uYW1lLCBOVUxMKTsKLSAgICBnX2ZyZWUgKGNsb2NrX25hbWUpOwotICAgIGdfcXVldWVfaW5pdCAoJmRvbWFpbi0+cGVuZGluZ19zeW5jcyk7Ci0gICAgZG9tYWluLT5sYXN0X3BhdGhfZGVsYXlzX21pc3NpbmcgPSA5OwotICAgIGRvbWFpbl9kYXRhID0gZ19saXN0X3ByZXBlbmQgKGRvbWFpbl9kYXRhLCBkb21haW4pOwotCi0gICAgZ19tdXRleF9sb2NrICgmZG9tYWluX2Nsb2Nrc19sb2NrKTsKLSAgICBkb21haW5fY2xvY2tzID0gZ19saXN0X3ByZXBlbmQgKGRvbWFpbl9jbG9ja3MsIGRvbWFpbik7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZkb21haW5fY2xvY2tzX2xvY2spOwotICB9Ci0KLSAgLyogSWYgd2UgaGF2ZSBhIG1hc3RlciBjbG9jaywgaWdub3JlIHRoaXMgbWVzc2FnZSBpZiBpdCdzIG5vdCBjb21pbmcgZnJvbSB0aGVyZSAqLwotICBpZiAoZG9tYWluLT5oYXZlX21hc3Rlcl9jbG9jawotICAgICAgJiYgY29tcGFyZV9jbG9ja19pZGVudGl0eSAoJmRvbWFpbi0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LAotICAgICAgICAgICZtc2ctPnNvdXJjZV9wb3J0X2lkZW50aXR5KSAhPSAwKQotICAgIHJldHVybjsKLQotI2lmZGVmIFVTRV9PUFBPUlRVTklTVElDX0NMT0NLX1NFTEVDVElPTgotICAvKiBPcHBvcnR1bmlzdGljIHNlbGVjdGlvbiBvZiBtYXN0ZXIgY2xvY2sgKi8KLSAgaWYgKCFkb21haW4tPmhhdmVfbWFzdGVyX2Nsb2NrKQotICAgIG1lbWNweSAoJmRvbWFpbi0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LCAmbXNnLT5zb3VyY2VfcG9ydF9pZGVudGl0eSwKLSAgICAgICAgc2l6ZW9mIChQdHBDbG9ja0lkZW50aXR5KSk7Ci0jZWxzZQotICBpZiAoIWRvbWFpbi0+aGF2ZV9tYXN0ZXJfY2xvY2spCi0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgZG9tYWluLT5zeW5jX2ludGVydmFsID0gbG9nMl90b19jbG9ja190aW1lIChtc2ctPmxvZ19tZXNzYWdlX2ludGVydmFsKTsKLQotICAvKiBDaGVjayBpZiBkdXBsaWNhdGVkICovCi0gIGZvciAobCA9IGRvbWFpbi0+cGVuZGluZ19zeW5jcy5oZWFkOyBsOyBsID0gbC0+bmV4dCkgewotICAgIFB0cFBlbmRpbmdTeW5jICp0bXAgPSBsLT5kYXRhOwotCi0gICAgaWYgKHRtcC0+c3luY19zZXFudW0gPT0gbXNnLT5zZXF1ZW5jZV9pZCkKLSAgICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuc3luYy5vcmlnaW5fdGltZXN0YW1wLnNlY29uZHNfZmllbGQgPgotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSAvIEdTVF9TRUNPTkQpIHsKLSAgICBHU1RfRklYTUUgKCJVbnN1cHBvcnRlZCBzeW5jIG1lc3NhZ2Ugc2Vjb25kcyBmaWVsZCB2YWx1ZTogJSIKLSAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiID4gJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgbXNnLT5tZXNzYWdlX3NwZWNpZmljLnN5bmMub3JpZ2luX3RpbWVzdGFtcC5zZWNvbmRzX2ZpZWxkLAotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FIC8gR1NUX1NFQ09ORCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3luYyA9IGdfbmV3MCAoUHRwUGVuZGluZ1N5bmMsIDEpOwotICBzeW5jLT5kb21haW4gPSBkb21haW4tPmRvbWFpbjsKLSAgc3luYy0+c3luY19zZXFudW0gPSBtc2ctPnNlcXVlbmNlX2lkOwotICBzeW5jLT5zeW5jX3JlY3ZfdGltZV9sb2NhbCA9IHJlY2VpdmVfdGltZTsKLSAgc3luYy0+c3luY19zZW5kX3RpbWVfcmVtb3RlID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc3luYy0+Zm9sbG93X3VwX3JlY3ZfdGltZV9sb2NhbCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWwgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBzeW5jLT5kZWxheV9yZXFfcmVjdl90aW1lX3JlbW90ZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHN5bmMtPmRlbGF5X3Jlc3BfcmVjdl90aW1lX2xvY2FsID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAvKiAwLjUgY29ycmVjdGlvbiBmYWN0b3IgZm9yIGRpdmlzaW9uIGxhdGVyICovCi0gIHN5bmMtPmNvcnJlY3Rpb25fZmllbGRfc3luYyA9IG1zZy0+Y29ycmVjdGlvbl9maWVsZDsKLQotICBpZiAoKG1zZy0+ZmxhZ19maWVsZCAmIDB4MDIwMCkpIHsKLSAgICAvKiBXYWl0IGZvciBGT0xMT1dfVVAgKi8KLSAgfSBlbHNlIHsKLSAgICBzeW5jLT5zeW5jX3NlbmRfdGltZV9yZW1vdGUgPQotICAgICAgICBQVFBfVElNRVNUQU1QX1RPX0dTVF9DTE9DS19USU1FIChtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuCi0gICAgICAgIHN5bmMub3JpZ2luX3RpbWVzdGFtcCk7Ci0KLSAgICBpZiAoZG9tYWluLT5sYXN0X3B0cF9zeW5jX3RpbWUgIT0gMAotICAgICAgICAmJiBkb21haW4tPmxhc3RfcHRwX3N5bmNfdGltZSA+PSBzeW5jLT5zeW5jX3NlbmRfdGltZV9yZW1vdGUpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiQmFja3dhcmRzIFBUUCB0aW1lcyBpbiBkb21haW4gJXU6ICUiIEdTVF9USU1FX0ZPUk1BVCAiID49ICUiCi0gICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBkb21haW4tPmRvbWFpbiwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChkb21haW4tPmxhc3RfcHRwX3N5bmNfdGltZSksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3luYy0+c3luY19zZW5kX3RpbWVfcmVtb3RlKSk7Ci0gICAgICBwdHBfcGVuZGluZ19zeW5jX2ZyZWUgKHN5bmMpOwotICAgICAgc3luYyA9IE5VTEw7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGRvbWFpbi0+bGFzdF9wdHBfc3luY190aW1lID0gc3luYy0+c3luY19zZW5kX3RpbWVfcmVtb3RlOwotCi0gICAgaWYgKHNlbmRfZGVsYXlfcmVxIChkb21haW4sIHN5bmMpKSB7Ci0gICAgICAvKiBTZW50IGRlbGF5IHJlcXVlc3QgKi8KLSAgICB9IGVsc2UgewotICAgICAgdXBkYXRlX3B0cF90aW1lIChkb21haW4sIHN5bmMpOwotICAgICAgcHRwX3BlbmRpbmdfc3luY19mcmVlIChzeW5jKTsKLSAgICAgIHN5bmMgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGlmIChzeW5jKQotICAgIGdfcXVldWVfcHVzaF90YWlsICgmZG9tYWluLT5wZW5kaW5nX3N5bmNzLCBzeW5jKTsKLX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9mb2xsb3dfdXBfbWVzc2FnZSAoUHRwTWVzc2FnZSAqIG1zZywgR3N0Q2xvY2tUaW1lIHJlY2VpdmVfdGltZSkKLXsKLSAgR0xpc3QgKmw7Ci0gIFB0cERvbWFpbkRhdGEgKmRvbWFpbiA9IE5VTEw7Ci0gIFB0cFBlbmRpbmdTeW5jICpzeW5jID0gTlVMTDsKLQotICAvKiBEb24ndCBjb25zaWRlciBtZXNzYWdlcyB3aXRoIHRoZSBhbHRlcm5hdGUgbWFzdGVyIGZsYWcgc2V0ICovCi0gIGlmICgobXNnLT5mbGFnX2ZpZWxkICYgMHgwMTAwKSkKLSAgICByZXR1cm47Ci0KLSAgZm9yIChsID0gZG9tYWluX2RhdGE7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgUHRwRG9tYWluRGF0YSAqdG1wID0gbC0+ZGF0YTsKLQotICAgIGlmIChtc2ctPmRvbWFpbl9udW1iZXIgPT0gdG1wLT5kb21haW4pIHsKLSAgICAgIGRvbWFpbiA9IHRtcDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmICghZG9tYWluKQotICAgIHJldHVybjsKLQotICAvKiBJZiB3ZSBoYXZlIGEgbWFzdGVyIGNsb2NrLCBpZ25vcmUgdGhpcyBtZXNzYWdlIGlmIGl0J3Mgbm90IGNvbWluZyBmcm9tIHRoZXJlICovCi0gIGlmIChkb21haW4tPmhhdmVfbWFzdGVyX2Nsb2NrCi0gICAgICAmJiBjb21wYXJlX2Nsb2NrX2lkZW50aXR5ICgmZG9tYWluLT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHksCi0gICAgICAgICAgJm1zZy0+c291cmNlX3BvcnRfaWRlbnRpdHkpICE9IDApCi0gICAgcmV0dXJuOwotCi0gIC8qIENoZWNrIGlmIHdlIGtub3cgYWJvdXQgdGhpcyBvbmUgKi8KLSAgZm9yIChsID0gZG9tYWluLT5wZW5kaW5nX3N5bmNzLmhlYWQ7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgUHRwUGVuZGluZ1N5bmMgKnRtcCA9IGwtPmRhdGE7Ci0KLSAgICBpZiAodG1wLT5zeW5jX3NlcW51bSA9PSBtc2ctPnNlcXVlbmNlX2lkKSB7Ci0gICAgICBzeW5jID0gdG1wOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFzeW5jKQotICAgIHJldHVybjsKLQotICAvKiBHb3QgYSBGT0xMT1dfVVAgZm9yIHRoaXMgYWxyZWFkeSAqLwotICBpZiAoc3luYy0+c3luY19zZW5kX3RpbWVfcmVtb3RlICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgcmV0dXJuOwotCi0gIGlmIChzeW5jLT5zeW5jX3JlY3ZfdGltZV9sb2NhbCA+PSByZWNlaXZlX3RpbWUpIHsKLSAgICBHU1RfRVJST1IgKCJHb3QgYm9ndXMgZm9sbG93IHVwIGluIGRvbWFpbiAldTogJSIgR1NUX1RJTUVfRk9STUFUICIgPiAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIGRvbWFpbi0+ZG9tYWluLAotICAgICAgICBHU1RfVElNRV9BUkdTIChzeW5jLT5zeW5jX3JlY3ZfdGltZV9sb2NhbCksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHJlY2VpdmVfdGltZSkpOwotICAgIGdfcXVldWVfcmVtb3ZlICgmZG9tYWluLT5wZW5kaW5nX3N5bmNzLCBzeW5jKTsKLSAgICBwdHBfcGVuZGluZ19zeW5jX2ZyZWUgKHN5bmMpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHN5bmMtPmNvcnJlY3Rpb25fZmllbGRfc3luYyArPSBtc2ctPmNvcnJlY3Rpb25fZmllbGQ7Ci0gIHN5bmMtPnN5bmNfc2VuZF90aW1lX3JlbW90ZSA9Ci0gICAgICBQVFBfVElNRVNUQU1QX1RPX0dTVF9DTE9DS19USU1FIChtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuCi0gICAgICBmb2xsb3dfdXAucHJlY2lzZV9vcmlnaW5fdGltZXN0YW1wKTsKLSAgc3luYy0+Zm9sbG93X3VwX3JlY3ZfdGltZV9sb2NhbCA9IHJlY2VpdmVfdGltZTsKLQotICBpZiAoZG9tYWluLT5sYXN0X3B0cF9zeW5jX3RpbWUgPj0gc3luYy0+c3luY19zZW5kX3RpbWVfcmVtb3RlKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJCYWNrd2FyZHMgUFRQIHRpbWVzIGluIGRvbWFpbiAldTogJSIgR1NUX1RJTUVfRk9STUFUICIgPj0gJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBkb21haW4tPmRvbWFpbiwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZG9tYWluLT5sYXN0X3B0cF9zeW5jX3RpbWUpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChzeW5jLT5zeW5jX3NlbmRfdGltZV9yZW1vdGUpKTsKLSAgICBnX3F1ZXVlX3JlbW92ZSAoJmRvbWFpbi0+cGVuZGluZ19zeW5jcywgc3luYyk7Ci0gICAgcHRwX3BlbmRpbmdfc3luY19mcmVlIChzeW5jKTsKLSAgICBzeW5jID0gTlVMTDsKLSAgICByZXR1cm47Ci0gIH0KLSAgZG9tYWluLT5sYXN0X3B0cF9zeW5jX3RpbWUgPSBzeW5jLT5zeW5jX3NlbmRfdGltZV9yZW1vdGU7Ci0KLSAgaWYgKHNlbmRfZGVsYXlfcmVxIChkb21haW4sIHN5bmMpKSB7Ci0gICAgLyogU2VudCBkZWxheSByZXF1ZXN0ICovCi0gIH0gZWxzZSB7Ci0gICAgdXBkYXRlX3B0cF90aW1lIChkb21haW4sIHN5bmMpOwotICAgIGdfcXVldWVfcmVtb3ZlICgmZG9tYWluLT5wZW5kaW5nX3N5bmNzLCBzeW5jKTsKLSAgICBwdHBfcGVuZGluZ19zeW5jX2ZyZWUgKHN5bmMpOwotICAgIHN5bmMgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfZGVsYXlfcmVzcF9tZXNzYWdlIChQdHBNZXNzYWdlICogbXNnLCBHc3RDbG9ja1RpbWUgcmVjZWl2ZV90aW1lKQotewotICBHTGlzdCAqbDsKLSAgUHRwRG9tYWluRGF0YSAqZG9tYWluID0gTlVMTDsKLSAgUHRwUGVuZGluZ1N5bmMgKnN5bmMgPSBOVUxMOwotCi0gIC8qIERvbid0IGNvbnNpZGVyIG1lc3NhZ2VzIHdpdGggdGhlIGFsdGVybmF0ZSBtYXN0ZXIgZmxhZyBzZXQgKi8KLSAgaWYgKChtc2ctPmZsYWdfZmllbGQgJiAweDAxMDApKQotICAgIHJldHVybjsKLQotICBmb3IgKGwgPSBkb21haW5fZGF0YTsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBQdHBEb21haW5EYXRhICp0bXAgPSBsLT5kYXRhOwotCi0gICAgaWYgKG1zZy0+ZG9tYWluX251bWJlciA9PSB0bXAtPmRvbWFpbikgewotICAgICAgZG9tYWluID0gdG1wOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFkb21haW4pCi0gICAgcmV0dXJuOwotCi0gIC8qIElmIHdlIGhhdmUgYSBtYXN0ZXIgY2xvY2ssIGlnbm9yZSB0aGlzIG1lc3NhZ2UgaWYgaXQncyBub3QgY29taW5nIGZyb20gdGhlcmUgKi8KLSAgaWYgKGRvbWFpbi0+aGF2ZV9tYXN0ZXJfY2xvY2sKLSAgICAgICYmIGNvbXBhcmVfY2xvY2tfaWRlbnRpdHkgKCZkb21haW4tPm1hc3Rlcl9jbG9ja19pZGVudGl0eSwKLSAgICAgICAgICAmbXNnLT5zb3VyY2VfcG9ydF9pZGVudGl0eSkgIT0gMCkKLSAgICByZXR1cm47Ci0KLSAgLyogTm90IGZvciB1cyAqLwotICBpZiAobXNnLT5tZXNzYWdlX3NwZWNpZmljLmRlbGF5X3Jlc3AuCi0gICAgICByZXF1ZXN0aW5nX3BvcnRfaWRlbnRpdHkuY2xvY2tfaWRlbnRpdHkgIT0gcHRwX2Nsb2NrX2lkLmNsb2NrX2lkZW50aXR5Ci0gICAgICB8fCBtc2ctPm1lc3NhZ2Vfc3BlY2lmaWMuZGVsYXlfcmVzcC4KLSAgICAgIHJlcXVlc3RpbmdfcG9ydF9pZGVudGl0eS5wb3J0X251bWJlciAhPSBwdHBfY2xvY2tfaWQucG9ydF9udW1iZXIpCi0gICAgcmV0dXJuOwotCi0gIGRvbWFpbi0+bWluX2RlbGF5X3JlcV9pbnRlcnZhbCA9Ci0gICAgICBsb2cyX3RvX2Nsb2NrX3RpbWUgKG1zZy0+bG9nX21lc3NhZ2VfaW50ZXJ2YWwpOwotCi0gIC8qIENoZWNrIGlmIHdlIGtub3cgYWJvdXQgdGhpcyBvbmUgKi8KLSAgZm9yIChsID0gZG9tYWluLT5wZW5kaW5nX3N5bmNzLmhlYWQ7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgUHRwUGVuZGluZ1N5bmMgKnRtcCA9IGwtPmRhdGE7Ci0KLSAgICBpZiAodG1wLT5kZWxheV9yZXFfc2VxbnVtID09IG1zZy0+c2VxdWVuY2VfaWQpIHsKLSAgICAgIHN5bmMgPSB0bXA7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAoIXN5bmMpCi0gICAgcmV0dXJuOwotCi0gIC8qIEdvdCBhIERFTEFZX1JFU1AgZm9yIHRoaXMgYWxyZWFkeSAqLwotICBpZiAoc3luYy0+ZGVsYXlfcmVxX3JlY3ZfdGltZV9yZW1vdGUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICByZXR1cm47Ci0KLSAgaWYgKHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWwgPiByZWNlaXZlX3RpbWUpIHsKLSAgICBHU1RfRVJST1IgKCJHb3QgYm9ndXMgZGVsYXkgcmVzcG9uc2UgaW4gZG9tYWluICV1OiAlIiBHU1RfVElNRV9GT1JNQVQgIiA+ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgZG9tYWluLT5kb21haW4sCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWwpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChyZWNlaXZlX3RpbWUpKTsKLSAgICBnX3F1ZXVlX3JlbW92ZSAoJmRvbWFpbi0+cGVuZGluZ19zeW5jcywgc3luYyk7Ci0gICAgcHRwX3BlbmRpbmdfc3luY19mcmVlIChzeW5jKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBzeW5jLT5jb3JyZWN0aW9uX2ZpZWxkX2RlbGF5ID0gbXNnLT5jb3JyZWN0aW9uX2ZpZWxkOwotCi0gIHN5bmMtPmRlbGF5X3JlcV9yZWN2X3RpbWVfcmVtb3RlID0KLSAgICAgIFBUUF9USU1FU1RBTVBfVE9fR1NUX0NMT0NLX1RJTUUgKG1zZy0+bWVzc2FnZV9zcGVjaWZpYy4KLSAgICAgIGRlbGF5X3Jlc3AucmVjZWl2ZV90aW1lc3RhbXApOwotICBzeW5jLT5kZWxheV9yZXNwX3JlY3ZfdGltZV9sb2NhbCA9IHJlY2VpdmVfdGltZTsKLQotICBpZiAoZG9tYWluLT5tZWFuX3BhdGhfZGVsYXkgIT0gMAotICAgICAgJiYgc3luYy0+c3luY19zZW5kX3RpbWVfcmVtb3RlID4gc3luYy0+ZGVsYXlfcmVxX3JlY3ZfdGltZV9yZW1vdGUpIHsKLSAgICBHU1RfV0FSTklORyAoIlN5bmMgc2VuZCB0aW1lIGFmdGVyIGRlbGF5IHJlcSByZWNlaXZlIHRpbWUgZm9yIGRvbWFpbiAldTogJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgPiAlIiBHU1RfVElNRV9GT1JNQVQsIGRvbWFpbi0+ZG9tYWluLAotICAgICAgICBHU1RfVElNRV9BUkdTIChzeW5jLT5zeW5jX3NlbmRfdGltZV9yZW1vdGUpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChzeW5jLT5kZWxheV9yZXFfcmVjdl90aW1lX3JlbW90ZSkpOwotICAgIGdfcXVldWVfcmVtb3ZlICgmZG9tYWluLT5wZW5kaW5nX3N5bmNzLCBzeW5jKTsKLSAgICBwdHBfcGVuZGluZ19zeW5jX2ZyZWUgKHN5bmMpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmICh1cGRhdGVfbWVhbl9wYXRoX2RlbGF5IChkb21haW4sIHN5bmMpKQotICAgIHVwZGF0ZV9wdHBfdGltZSAoZG9tYWluLCBzeW5jKTsKLSAgZ19xdWV1ZV9yZW1vdmUgKCZkb21haW4tPnBlbmRpbmdfc3luY3MsIHN5bmMpOwotICBwdHBfcGVuZGluZ19zeW5jX2ZyZWUgKHN5bmMpOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX3B0cF9tZXNzYWdlIChQdHBNZXNzYWdlICogbXNnLCBHc3RDbG9ja1RpbWUgcmVjZWl2ZV90aW1lKQotewotICAvKiBJZ25vcmUgb3VyIG93biBtZXNzYWdlcyAqLwotICBpZiAobXNnLT5zb3VyY2VfcG9ydF9pZGVudGl0eS5jbG9ja19pZGVudGl0eSA9PSBwdHBfY2xvY2tfaWQuY2xvY2tfaWRlbnRpdHkgJiYKLSAgICAgIG1zZy0+c291cmNlX3BvcnRfaWRlbnRpdHkucG9ydF9udW1iZXIgPT0gcHRwX2Nsb2NrX2lkLnBvcnRfbnVtYmVyKQotICAgIHJldHVybjsKLQotICBzd2l0Y2ggKG1zZy0+bWVzc2FnZV90eXBlKSB7Ci0gICAgY2FzZSBQVFBfTUVTU0FHRV9UWVBFX0FOTk9VTkNFOgotICAgICAgaGFuZGxlX2Fubm91bmNlX21lc3NhZ2UgKG1zZywgcmVjZWl2ZV90aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFRQX01FU1NBR0VfVFlQRV9TWU5DOgotICAgICAgaGFuZGxlX3N5bmNfbWVzc2FnZSAobXNnLCByZWNlaXZlX3RpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQVFBfTUVTU0FHRV9UWVBFX0ZPTExPV19VUDoKLSAgICAgIGhhbmRsZV9mb2xsb3dfdXBfbWVzc2FnZSAobXNnLCByZWNlaXZlX3RpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQVFBfTUVTU0FHRV9UWVBFX0RFTEFZX1JFU1A6Ci0gICAgICBoYW5kbGVfZGVsYXlfcmVzcF9tZXNzYWdlIChtc2csIHJlY2VpdmVfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1oYXZlX3N0ZGluX2RhdGFfY2IgKEdJT0NoYW5uZWwgKiBjaGFubmVsLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR0lPU3RhdHVzIHN0YXR1czsKLSAgU3RkSU9IZWFkZXIgaGVhZGVyOwotICBnY2hhciBidWZmZXJbODE5Ml07Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgZ3NpemUgcmVhZDsKLQotICBpZiAoKGNvbmRpdGlvbiAmIEdfSU9fU1RBVFVTX0VPRikpIHsKLSAgICBHU1RfRVJST1IgKCJHb3QgRU9GIG9uIHN0ZGluIik7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCAobWFpbl9sb29wKTsKLSAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwotICB9Ci0KLSAgc3RhdHVzID0KLSAgICAgIGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzIChjaGFubmVsLCAoZ2NoYXIgKikgJiBoZWFkZXIsIHNpemVvZiAoaGVhZGVyKSwKLSAgICAgICZyZWFkLCAmZXJyKTsKLSAgaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19FUlJPUikgewotICAgIEdTVF9FUlJPUiAoIkZhaWxlZCB0byByZWFkIGZyb20gc3RkaW46ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzID09IEdfSU9fU1RBVFVTX0VPRikgewotICAgIEdTVF9FUlJPUiAoIkdvdCBFT0Ygb24gc3RkaW4iKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzICE9IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgIEdTVF9FUlJPUiAoIlVuZXhwZWN0ZWQgc3RkaW4gcmVhZCBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAocmVhZCAhPSBzaXplb2YgKGhlYWRlcikpIHsKLSAgICBHU1RfRVJST1IgKCJVbmV4cGVjdGVkIHJlYWQgc2l6ZTogJSIgR19HU0laRV9GT1JNQVQsIHJlYWQpOwotICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKLSAgfSBlbHNlIGlmIChoZWFkZXIuc2l6ZSA+IDgxOTIpIHsKLSAgICBHU1RfRVJST1IgKCJVbmV4cGVjdGVkIHNpemU6ICV1IiwgaGVhZGVyLnNpemUpOwotICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKLSAgfQotCi0gIHN0YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzIChjaGFubmVsLCBidWZmZXIsIGhlYWRlci5zaXplLCAmcmVhZCwgJmVycik7Ci0gIGlmIChzdGF0dXMgPT0gR19JT19TVEFUVVNfRVJST1IpIHsKLSAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gcmVhZCBmcm9tIHN0ZGluOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCAobWFpbl9sb29wKTsKLSAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwotICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19FT0YpIHsKLSAgICBHU1RfRVJST1IgKCJFT0Ygb24gc3RkaW4iKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAoc3RhdHVzICE9IEdfSU9fU1RBVFVTX05PUk1BTCkgewotICAgIEdTVF9FUlJPUiAoIlVuZXhwZWN0ZWQgc3RkaW4gcmVhZCBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gIH0gZWxzZSBpZiAocmVhZCAhPSBoZWFkZXIuc2l6ZSkgewotICAgIEdTVF9FUlJPUiAoIlVuZXhwZWN0ZWQgcmVhZCBzaXplOiAlIiBHX0dTSVpFX0ZPUk1BVCwgcmVhZCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCAobWFpbl9sb29wKTsKLSAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwotICB9Ci0KLSAgc3dpdGNoIChoZWFkZXIudHlwZSkgewotICAgIGNhc2UgVFlQRV9FVkVOVDoKLSAgICBjYXNlIFRZUEVfR0VORVJBTDp7Ci0gICAgICBHc3RDbG9ja1RpbWUgcmVjZWl2ZV90aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChvYnNlcnZhdGlvbl9zeXN0ZW1fY2xvY2spOwotICAgICAgUHRwTWVzc2FnZSBtc2c7Ci0KLSAgICAgIGlmIChwYXJzZV9wdHBfbWVzc2FnZSAoJm1zZywgKGNvbnN0IGd1aW50OCAqKSBidWZmZXIsIGhlYWRlci5zaXplKSkgewotICAgICAgICBkdW1wX3B0cF9tZXNzYWdlICgmbXNnKTsKLSAgICAgICAgaGFuZGxlX3B0cF9tZXNzYWdlICgmbXNnLCByZWNlaXZlX3RpbWUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSBUWVBFX0NMT0NLX0lEOnsKLSAgICAgIGlmIChoZWFkZXIuc2l6ZSAhPSA4KSB7Ci0gICAgICAgIEdTVF9FUlJPUiAoIlVuZXhwZWN0ZWQgY2xvY2sgaWQgc2l6ZSAoJXUgIT0gOCkiLCBoZWFkZXIuc2l6ZSk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0gICAgICB9Ci0gICAgICBnX211dGV4X2xvY2sgKCZwdHBfbG9jayk7Ci0gICAgICBwdHBfY2xvY2tfaWQuY2xvY2tfaWRlbnRpdHkgPSBHU1RfUkVBRF9VSU5UNjRfQkUgKGJ1ZmZlcik7Ci0gICAgICBwdHBfY2xvY2tfaWQucG9ydF9udW1iZXIgPSBnZXRwaWQgKCk7Ci0gICAgICBHU1RfREVCVUcgKCJHb3QgY2xvY2sgaWQgMHglMDE2IiBHX0dJTlQ2NF9NT0RJRklFUiAieCAldSIsCi0gICAgICAgICAgcHRwX2Nsb2NrX2lkLmNsb2NrX2lkZW50aXR5LCBwdHBfY2xvY2tfaWQucG9ydF9udW1iZXIpOwotICAgICAgZ19jb25kX3NpZ25hbCAoJnB0cF9jb25kKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmcHRwX2xvY2spOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVFOwotfQotCi0vKiBDbGVhbnVwIGFsbCBhbm5vdW5jZSBtZXNzYWdlcyBhbmQgYW5ub3VuY2UgbWVzc2FnZSBzZW5kZXJzCi0gKiB0aGF0IGFyZSB0aW1lZCBvdXQgYnkgbm93LCBhbmQgY2xlYW4gdXAgYWxsIHBlbmRpbmcgc3luY3MKLSAqIHRoYXQgYXJlIG1pc3NpbmcgdGhlaXIgRk9MTE9XX1VQIG9yIERFTEFZX1JFU1AgKi8KLXN0YXRpYyBnYm9vbGVhbgotY2xlYW51cF9jYiAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0Q2xvY2tUaW1lIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAob2JzZXJ2YXRpb25fc3lzdGVtX2Nsb2NrKTsKLSAgR0xpc3QgKmwsICptLCAqbjsKLQotICBmb3IgKGwgPSBkb21haW5fZGF0YTsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBQdHBEb21haW5EYXRhICpkb21haW4gPSBsLT5kYXRhOwotCi0gICAgZm9yIChuID0gZG9tYWluLT5hbm5vdW5jZV9zZW5kZXJzOyBuOykgewotICAgICAgUHRwQW5ub3VuY2VTZW5kZXIgKnNlbmRlciA9IG4tPmRhdGE7Ci0gICAgICBnYm9vbGVhbiB0aW1lZF9vdXQgPSBUUlVFOwotCi0gICAgICAvKiBLZWVwIG9ubHkgNSBtZXNzYWdlcyBwZXIgc2VuZGVyIGFyb3VuZCAqLwotICAgICAgd2hpbGUgKGdfcXVldWVfZ2V0X2xlbmd0aCAoJnNlbmRlci0+YW5ub3VuY2VfbWVzc2FnZXMpID4gNSkgewotICAgICAgICBQdHBBbm5vdW5jZU1lc3NhZ2UgKm1zZyA9IGdfcXVldWVfcG9wX2hlYWQgKCZzZW5kZXItPmFubm91bmNlX21lc3NhZ2VzKTsKLSAgICAgICAgZ19mcmVlIChtc2cpOwotICAgICAgfQotCi0gICAgICBmb3IgKG0gPSBzZW5kZXItPmFubm91bmNlX21lc3NhZ2VzLmhlYWQ7IG07IG0gPSBtLT5uZXh0KSB7Ci0gICAgICAgIFB0cEFubm91bmNlTWVzc2FnZSAqbXNnID0gbS0+ZGF0YTsKLQotICAgICAgICBpZiAobXNnLT5yZWNlaXZlX3RpbWUgKwotICAgICAgICAgICAgc2VuZGVyLT5hbm5vdW5jZV9pbnRlcnZhbCAqIFBUUF9BTk5PVU5DRV9SRUNFSVBUX1RJTUVPVVQgPiBub3cpIHsKLSAgICAgICAgICB0aW1lZF9vdXQgPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAodGltZWRfb3V0KSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIkFubm91bmNlIHNlbmRlciAweCUwMTYiIEdfR0lOVDY0X01PRElGSUVSICJ4ICV1IHRpbWVkIG91dCIsCi0gICAgICAgICAgICBzZW5kZXItPm1hc3Rlcl9jbG9ja19pZGVudGl0eS5jbG9ja19pZGVudGl0eSwKLSAgICAgICAgICAgIHNlbmRlci0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5LnBvcnRfbnVtYmVyKTsKLSAgICAgICAgZ19xdWV1ZV9mb3JlYWNoICgmc2VuZGVyLT5hbm5vdW5jZV9tZXNzYWdlcywgKEdGdW5jKSBnX2ZyZWUsIE5VTEwpOwotICAgICAgICBnX3F1ZXVlX2NsZWFyICgmc2VuZGVyLT5hbm5vdW5jZV9tZXNzYWdlcyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChnX3F1ZXVlX2dldF9sZW5ndGggKCZzZW5kZXItPmFubm91bmNlX21lc3NhZ2VzKSA9PSAwKSB7Ci0gICAgICAgIEdMaXN0ICp0bXAgPSBuLT5uZXh0OwotCi0gICAgICAgIGlmIChjb21wYXJlX2Nsb2NrX2lkZW50aXR5ICgmc2VuZGVyLT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHksCi0gICAgICAgICAgICAgICAgJmRvbWFpbi0+bWFzdGVyX2Nsb2NrX2lkZW50aXR5KSA9PSAwKQotICAgICAgICAgIEdTVF9XQVJOSU5HICgiY3VycmVudGx5IHNlbGVjdGVkIG1hc3RlciBjbG9jayB0aW1lZCBvdXQiKTsKLSAgICAgICAgZ19mcmVlIChzZW5kZXIpOwotICAgICAgICBkb21haW4tPmFubm91bmNlX3NlbmRlcnMgPQotICAgICAgICAgICAgZ19saXN0X2RlbGV0ZV9saW5rIChkb21haW4tPmFubm91bmNlX3NlbmRlcnMsIG4pOwotICAgICAgICBuID0gdG1wOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbiA9IG4tPm5leHQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHNlbGVjdF9iZXN0X21hc3Rlcl9jbG9jayAoZG9tYWluLCBub3cpOwotCi0gICAgLyogQ2xlYW4gdXAgYW55IHBlbmRpbmcgc3luY3MgKi8KLSAgICBmb3IgKG4gPSBkb21haW4tPnBlbmRpbmdfc3luY3MuaGVhZDsgbjspIHsKLSAgICAgIFB0cFBlbmRpbmdTeW5jICpzeW5jID0gbi0+ZGF0YTsKLSAgICAgIGdib29sZWFuIHRpbWVkX291dCA9IEZBTFNFOwotCi0gICAgICAvKiBUaW1lIG91dCBwZW5kaW5nIHN5bmNzIGFmdGVyIDQgc3luYyBpbnRlcnZhbHMgb3IgMTAgc2Vjb25kcywKLSAgICAgICAqIGFuZCBwZW5kaW5nIGRlbGF5IHJlcXMgYWZ0ZXIgNCBkZWxheSByZXEgaW50ZXJ2YWxzIG9yIDEwIHNlY29uZHMKLSAgICAgICAqLwotICAgICAgaWYgKHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWwgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJgotICAgICAgICAgICgoZG9tYWluLT5taW5fZGVsYXlfcmVxX2ludGVydmFsICE9IDAKLSAgICAgICAgICAgICAgICAgICYmIHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWwgKwotICAgICAgICAgICAgICAgICAgNCAqIGRvbWFpbi0+bWluX2RlbGF5X3JlcV9pbnRlcnZhbCA8IG5vdykKLSAgICAgICAgICAgICAgfHwgKHN5bmMtPmRlbGF5X3JlcV9zZW5kX3RpbWVfbG9jYWwgKyAxMCAqIEdTVF9TRUNPTkQgPCBub3cpKSkgewotICAgICAgICB0aW1lZF9vdXQgPSBUUlVFOwotICAgICAgfSBlbHNlIGlmICgoZG9tYWluLT5zeW5jX2ludGVydmFsICE9IDAKLSAgICAgICAgICAgICAgJiYgc3luYy0+c3luY19yZWN2X3RpbWVfbG9jYWwgKyA0ICogZG9tYWluLT5zeW5jX2ludGVydmFsIDwgbm93KQotICAgICAgICAgIHx8IChzeW5jLT5zeW5jX3JlY3ZfdGltZV9sb2NhbCArIDEwICogR1NUX1NFQ09ORCA8IG5vdykpIHsKLSAgICAgICAgdGltZWRfb3V0ID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRpbWVkX291dCkgewotICAgICAgICBHTGlzdCAqdG1wID0gbi0+bmV4dDsKLSAgICAgICAgcHRwX3BlbmRpbmdfc3luY19mcmVlIChzeW5jKTsKLSAgICAgICAgZ19xdWV1ZV9kZWxldGVfbGluayAoJmRvbWFpbi0+cGVuZGluZ19zeW5jcywgbik7Ci0gICAgICAgIG4gPSB0bXA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBuID0gbi0+bmV4dDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotcHRwX2hlbHBlcl9tYWluIChncG9pbnRlciBkYXRhKQotewotICBHU291cmNlICpjbGVhbnVwX3NvdXJjZTsKLQotICBHU1RfREVCVUcgKCJTdGFydGluZyBQVFAgaGVscGVyIGxvb3AiKTsKLQotICAvKiBDaGVjayBhbGwgNSBzZWNvbmRzLCBpZiB3ZSBoYXZlIHRvIGNsZWFudXAgQU5OT1VOQ0Ugb3IgcGVuZGluZyBzeW5jcyBtZXNzYWdlICovCi0gIGNsZWFudXBfc291cmNlID0gZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyAoNSk7Ci0gIGdfc291cmNlX3NldF9wcmlvcml0eSAoY2xlYW51cF9zb3VyY2UsIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0gIGdfc291cmNlX3NldF9jYWxsYmFjayAoY2xlYW51cF9zb3VyY2UsIChHU291cmNlRnVuYykgY2xlYW51cF9jYiwgTlVMTCwgTlVMTCk7Ci0gIGdfc291cmNlX2F0dGFjaCAoY2xlYW51cF9zb3VyY2UsIG1haW5fY29udGV4dCk7Ci0gIGdfc291cmNlX3VucmVmIChjbGVhbnVwX3NvdXJjZSk7Ci0KLSAgZ19tYWluX2xvb3BfcnVuIChtYWluX2xvb3ApOwotICBHU1RfREVCVUcgKCJTdG9wcGVkIFBUUCBoZWxwZXIgbG9vcCIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnB0cF9sb2NrKTsKLSAgcHRwX2Nsb2NrX2lkLmNsb2NrX2lkZW50aXR5ID0gR1NUX1BUUF9DTE9DS19JRF9OT05FOwotICBwdHBfY2xvY2tfaWQucG9ydF9udW1iZXIgPSAwOwotICBpbml0dGVkID0gRkFMU0U7Ci0gIGdfY29uZF9zaWduYWwgKCZwdHBfY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmcHRwX2xvY2spOwotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF9wdHBfaXNfc3VwcG9ydGVkOgotICoKLSAqIENoZWNrIGlmIFBUUCBjbG9ja3MgYXJlIGdlbmVyYWxseSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0sIGFuZCBpZiBwcmV2aW91cwotICogaW5pdGlhbGl6YXRpb25zIGRpZCBub3QgZmFpbC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBQVFAgY2xvY2tzIGFyZSBnZW5lcmFsbHkgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtLCBhbmQKLSAqIHByZXZpb3VzIGluaXRpYWxpemF0aW9ucyBkaWQgbm90IGZhaWwuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3B0cF9pc19zdXBwb3J0ZWQgKHZvaWQpCi17Ci0gIHJldHVybiBzdXBwb3J0ZWQ7Ci19Ci0KLS8qKgotICogZ3N0X3B0cF9pc19pbml0aWFsaXplZDoKLSAqCi0gKiBDaGVjayBpZiB0aGUgR1N0cmVhbWVyIFBUUCBjbG9jayBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlIEdTdHJlYW1lciBQVFAgY2xvY2sgc3Vic3lzdGVtIGlzIGludGlhbGl6ZWQuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3B0cF9pc19pbml0aWFsaXplZCAodm9pZCkKLXsKLSAgcmV0dXJuIGluaXR0ZWQ7Ci19Ci0KLS8qKgotICogZ3N0X3B0cF9pbml0OgotICogQGNsb2NrX2lkOiBQVFAgY2xvY2sgaWQgb2YgdGhpcyBwcm9jZXNzJyBjbG9jayBvciAlR1NUX1BUUF9DTE9DS19JRF9OT05FCi0gKiBAaW50ZXJmYWNlczogKHRyYW5zZmVyIG5vbmUpIChhcnJheSB6ZXJvLXRlcm1pbmF0ZWQ9MSkgKGFsbG93LW5vbmUpOiBuZXR3b3JrIGludGVyZmFjZXMgdG8gcnVuIHRoZSBjbG9jayBvbgotICoKLSAqIEluaXRpYWxpemUgdGhlIEdTdHJlYW1lciBQVFAgc3Vic3lzdGVtIGFuZCBjcmVhdGUgYSBQVFAgb3JkaW5hcnkgY2xvY2sgaW4KLSAqIHNsYXZlLW9ubHkgbW9kZSBmb3IgYWxsIGRvbWFpbnMgb24gdGhlIGdpdmVuIEBpbnRlcmZhY2VzIHdpdGggdGhlCi0gKiBnaXZlbiBAY2xvY2tfaWQuCi0gKgotICogSWYgQGNsb2NrX2lkIGlzICVHU1RfUFRQX0NMT0NLX0lEX05PTkUsIGEgY2xvY2sgaWQgaXMgYXV0b21hdGljYWxseQotICogZ2VuZXJhdGVkIGZyb20gdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBmaXJzdCBuZXR3b3JrIGludGVyZmFjZS4KLSAqCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBieSBnc3RfcHRwX2Nsb2NrX25ldygpIHdpdGggZGVmYXVsdAotICogcGFyYW1ldGVycyBpZiBpdCB3YXNuJ3QgY2FsbGVkIGJlZm9yZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgR1N0cmVhbWVyIFBUUCBjbG9jayBzdWJzeXN0ZW0gY291bGQgYmUgaW5pdGlhbGl6ZWQuCi0gKgotICogU2luY2U6IDEuNgotICovCi1nYm9vbGVhbgotZ3N0X3B0cF9pbml0IChndWludDY0IGNsb2NrX2lkLCBnY2hhciAqKiBpbnRlcmZhY2VzKQotewotICBnYm9vbGVhbiByZXQ7Ci0gIGNvbnN0IGdjaGFyICplbnY7Ci0gIGdjaGFyICoqYXJndiA9IE5VTEw7Ci0gIGdpbnQgYXJnYywgYXJnY19jOwotICBnaW50IGZkX3IsIGZkX3c7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgR1NvdXJjZSAqc3RkaW5fc291cmNlOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChwdHBfZGVidWcsICJwdHAiLCAwLCAiUFRQIGNsb2NrIik7Ci0KLSAgZ19tdXRleF9sb2NrICgmcHRwX2xvY2spOwotICBpZiAoIXN1cHBvcnRlZCkgewotICAgIEdTVF9FUlJPUiAoIlBUUCBub3Qgc3VwcG9ydGVkIik7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgaWYgKGluaXR0ZWQpIHsKLSAgICBHU1RfREVCVUcgKCJQVFAgYWxyZWFkeSBpbml0aWFsaXplZCIpOwotICAgIHJldCA9IFRSVUU7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgaWYgKHB0cF9oZWxwZXJfcGlkKSB7Ci0gICAgR1NUX0RFQlVHICgiUFRQIGN1cnJlbnRseSBpbml0aWFsaXppbmciKTsKLSAgICBnb3RvIHdhaXQ7Ci0gIH0KLQotICBpZiAoIWRvbWFpbl9zdGF0c19ob29rc19pbml0dGVkKSB7Ci0gICAgZ19ob29rX2xpc3RfaW5pdCAoJmRvbWFpbl9zdGF0c19ob29rcywgc2l6ZW9mIChHSG9vaykpOwotICAgIGRvbWFpbl9zdGF0c19ob29rc19pbml0dGVkID0gVFJVRTsKLSAgfQotCi0gIGFyZ2MgPSAxOwotICBpZiAoY2xvY2tfaWQgIT0gR1NUX1BUUF9DTE9DS19JRF9OT05FKQotICAgIGFyZ2MgKz0gMjsKLSAgaWYgKGludGVyZmFjZXMgIT0gTlVMTCkKLSAgICBhcmdjICs9IDIgKiBnX3N0cnZfbGVuZ3RoIChpbnRlcmZhY2VzKTsKLQotICBhcmd2ID0gZ19uZXcwIChnY2hhciAqLCBhcmdjICsgMik7Ci0gIGFyZ2NfYyA9IDA7Ci0KLSAgZW52ID0gZ19nZXRlbnYgKCJHU1RfUFRQX0hFTFBFUl8xXzAiKTsKLSAgaWYgKGVudiA9PSBOVUxMKQotICAgIGVudiA9IGdfZ2V0ZW52ICgiR1NUX1BUUF9IRUxQRVIiKTsKLSAgaWYgKGVudiAhPSBOVUxMICYmICplbnYgIT0gJ1wwJykgewotICAgIEdTVF9MT0cgKCJUcnlpbmcgR1NUX1BUUF9IRUxQRVIgZW52IHZhcjogJXMiLCBlbnYpOwotICAgIGFyZ3ZbYXJnY19jKytdID0gZ19zdHJkdXAgKGVudik7Ci0gIH0gZWxzZSB7Ci0gICAgYXJndlthcmdjX2MrK10gPSBnX3N0cmR1cCAoR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEKTsKLSAgfQotCi0gIGlmIChjbG9ja19pZCAhPSBHU1RfUFRQX0NMT0NLX0lEX05PTkUpIHsKLSAgICBhcmd2W2FyZ2NfYysrXSA9IGdfc3RyZHVwICgiLWMiKTsKLSAgICBhcmd2W2FyZ2NfYysrXSA9IGdfc3RyZHVwX3ByaW50ZiAoIjB4JTAxNiIgR19HSU5UNjRfTU9ESUZJRVIgIngiLCBjbG9ja19pZCk7Ci0gIH0KLQotICBpZiAoaW50ZXJmYWNlcyAhPSBOVUxMKSB7Ci0gICAgZ2NoYXIgKipwdHIgPSBpbnRlcmZhY2VzOwotCi0gICAgd2hpbGUgKCpwdHIpIHsKLSAgICAgIGFyZ3ZbYXJnY19jKytdID0gZ19zdHJkdXAgKCItaSIpOwotICAgICAgYXJndlthcmdjX2MrK10gPSBnX3N0cmR1cCAoKnB0cik7Ci0gICAgICBwdHIrKzsKLSAgICB9Ci0gIH0KLQotICBtYWluX2NvbnRleHQgPSBnX21haW5fY29udGV4dF9uZXcgKCk7Ci0gIG1haW5fbG9vcCA9IGdfbWFpbl9sb29wX25ldyAobWFpbl9jb250ZXh0LCBGQUxTRSk7Ci0KLSAgcHRwX2hlbHBlcl90aHJlYWQgPQotICAgICAgZ190aHJlYWRfdHJ5X25ldyAoInB0cC1oZWxwZXItdGhyZWFkIiwgcHRwX2hlbHBlcl9tYWluLCBOVUxMLCAmZXJyKTsKLSAgaWYgKCFwdHBfaGVscGVyX3RocmVhZCkgewotICAgIEdTVF9FUlJPUiAoIkZhaWxlZCB0byBzdGFydCBQVFAgaGVscGVyIHRocmVhZDogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIHJldCA9IEZBTFNFOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGlmICghZ19zcGF3bl9hc3luY193aXRoX3BpcGVzIChOVUxMLCBhcmd2LCBOVUxMLCAwLCBOVUxMLCBOVUxMLAotICAgICAgICAgICZwdHBfaGVscGVyX3BpZCwgJmZkX3csICZmZF9yLCBOVUxMLCAmZXJyKSkgewotICAgIEdTVF9FUlJPUiAoIkZhaWxlZCB0byBzdGFydCBwdHAgaGVscGVyIHByb2Nlc3M6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgICBzdXBwb3J0ZWQgPSBGQUxTRTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBzdGRpbl9jaGFubmVsID0gZ19pb19jaGFubmVsX3VuaXhfbmV3IChmZF9yKTsKLSAgZ19pb19jaGFubmVsX3NldF9lbmNvZGluZyAoc3RkaW5fY2hhbm5lbCwgTlVMTCwgTlVMTCk7Ci0gIGdfaW9fY2hhbm5lbF9zZXRfYnVmZmVyZWQgKHN0ZGluX2NoYW5uZWwsIEZBTFNFKTsKLSAgZ19pb19jaGFubmVsX3NldF9jbG9zZV9vbl91bnJlZiAoc3RkaW5fY2hhbm5lbCwgVFJVRSk7Ci0gIHN0ZGluX3NvdXJjZSA9Ci0gICAgICBnX2lvX2NyZWF0ZV93YXRjaCAoc3RkaW5fY2hhbm5lbCwgR19JT19JTiB8IEdfSU9fUFJJIHwgR19JT19IVVApOwotICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkgKHN0ZGluX3NvdXJjZSwgR19QUklPUklUWV9ERUZBVUxUKTsKLSAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrIChzdGRpbl9zb3VyY2UsIChHU291cmNlRnVuYykgaGF2ZV9zdGRpbl9kYXRhX2NiLCBOVUxMLAotICAgICAgTlVMTCk7Ci0gIGdfc291cmNlX2F0dGFjaCAoc3RkaW5fc291cmNlLCBtYWluX2NvbnRleHQpOwotICBnX3NvdXJjZV91bnJlZiAoc3RkaW5fc291cmNlKTsKLQotICAvKiBDcmVhdGUgc3Rkb3V0IGNoYW5uZWwgKi8KLSAgc3Rkb3V0X2NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcgKGZkX3cpOwotICBnX2lvX2NoYW5uZWxfc2V0X2VuY29kaW5nIChzdGRvdXRfY2hhbm5lbCwgTlVMTCwgTlVMTCk7Ci0gIGdfaW9fY2hhbm5lbF9zZXRfY2xvc2Vfb25fdW5yZWYgKHN0ZG91dF9jaGFubmVsLCBUUlVFKTsKLSAgZ19pb19jaGFubmVsX3NldF9idWZmZXJlZCAoc3Rkb3V0X2NoYW5uZWwsIEZBTFNFKTsKLQotICBkZWxheV9yZXFfcmFuZCA9IGdfcmFuZF9uZXcgKCk7Ci0gIG9ic2VydmF0aW9uX3N5c3RlbV9jbG9jayA9Ci0gICAgICBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1NZU1RFTV9DTE9DSywgIm5hbWUiLCAicHRwLW9ic2VydmF0aW9uLWNsb2NrIiwKLSAgICAgIE5VTEwpOwotCi0gIGluaXR0ZWQgPSBUUlVFOwotCi13YWl0OgotICBHU1RfREVCVUcgKCJXYWl0aW5nIGZvciBQVFAgdG8gYmUgaW5pdGlhbGl6ZWQiKTsKLQotICB3aGlsZSAocHRwX2Nsb2NrX2lkLmNsb2NrX2lkZW50aXR5ID09IEdTVF9QVFBfQ0xPQ0tfSURfTk9ORSAmJiBpbml0dGVkKQotICAgIGdfY29uZF93YWl0ICgmcHRwX2NvbmQsICZwdHBfbG9jayk7Ci0KLSAgcmV0ID0gaW5pdHRlZDsKLSAgaWYgKHJldCkgewotICAgIEdTVF9ERUJVRyAoIkluaXRpYWxpemVkIGFuZCBnb3QgY2xvY2sgaWQgMHglMDE2IiBHX0dJTlQ2NF9NT0RJRklFUiAieCAldSIsCi0gICAgICAgIHB0cF9jbG9ja19pZC5jbG9ja19pZGVudGl0eSwgcHRwX2Nsb2NrX2lkLnBvcnRfbnVtYmVyKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSIpOwotICAgIHN1cHBvcnRlZCA9IEZBTFNFOwotICB9Ci0KLWRvbmU6Ci0gIGdfc3RyZnJlZXYgKGFyZ3YpOwotCi0gIGlmICghcmV0KSB7Ci0gICAgaWYgKHB0cF9oZWxwZXJfcGlkKSB7Ci0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgICAgIGtpbGwgKHB0cF9oZWxwZXJfcGlkLCBTSUdLSUxMKTsKLSAgICAgIHdhaXRwaWQgKHB0cF9oZWxwZXJfcGlkLCBOVUxMLCAwKTsKLSNlbHNlCi0gICAgICBUZXJtaW5hdGVQcm9jZXNzIChwdHBfaGVscGVyX3BpZCwgMSk7Ci0gICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChwdHBfaGVscGVyX3BpZCwgSU5GSU5JVEUpOwotI2VuZGlmCi0gICAgICBnX3NwYXduX2Nsb3NlX3BpZCAocHRwX2hlbHBlcl9waWQpOwotICAgIH0KLSAgICBwdHBfaGVscGVyX3BpZCA9IDA7Ci0KLSAgICBpZiAoc3RkaW5fY2hhbm5lbCkKLSAgICAgIGdfaW9fY2hhbm5lbF91bnJlZiAoc3RkaW5fY2hhbm5lbCk7Ci0gICAgc3RkaW5fY2hhbm5lbCA9IE5VTEw7Ci0gICAgaWYgKHN0ZG91dF9jaGFubmVsKQotICAgICAgZ19pb19jaGFubmVsX3VucmVmIChzdGRvdXRfY2hhbm5lbCk7Ci0gICAgc3Rkb3V0X2NoYW5uZWwgPSBOVUxMOwotCi0gICAgaWYgKG1haW5fbG9vcCAmJiBwdHBfaGVscGVyX3RocmVhZCkgewotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobWFpbl9sb29wKTsKLSAgICAgIGdfdGhyZWFkX2pvaW4gKHB0cF9oZWxwZXJfdGhyZWFkKTsKLSAgICB9Ci0gICAgcHRwX2hlbHBlcl90aHJlYWQgPSBOVUxMOwotICAgIGlmIChtYWluX2xvb3ApCi0gICAgICBnX21haW5fbG9vcF91bnJlZiAobWFpbl9sb29wKTsKLSAgICBtYWluX2xvb3AgPSBOVUxMOwotICAgIGlmIChtYWluX2NvbnRleHQpCi0gICAgICBnX21haW5fY29udGV4dF91bnJlZiAobWFpbl9jb250ZXh0KTsKLSAgICBtYWluX2NvbnRleHQgPSBOVUxMOwotCi0gICAgaWYgKGRlbGF5X3JlcV9yYW5kKQotICAgICAgZ19yYW5kX2ZyZWUgKGRlbGF5X3JlcV9yYW5kKTsKLSAgICBkZWxheV9yZXFfcmFuZCA9IE5VTEw7Ci0KLSAgICBpZiAob2JzZXJ2YXRpb25fc3lzdGVtX2Nsb2NrKQotICAgICAgZ3N0X29iamVjdF91bnJlZiAob2JzZXJ2YXRpb25fc3lzdGVtX2Nsb2NrKTsKLSAgICBvYnNlcnZhdGlvbl9zeXN0ZW1fY2xvY2sgPSBOVUxMOwotICB9Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZwdHBfbG9jayk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfcHRwX2RlaW5pdDoKLSAqCi0gKiBEZWluaXRpYWxpemUgdGhlIEdTdHJlYW1lciBQVFAgc3Vic3lzdGVtIGFuZCBzdG9wIHRoZSBQVFAgY2xvY2suIElmIHRoZXJlCi0gKiBhcmUgYW55IHJlbWFpbmluZyBHc3RQdHBDbG9jayBpbnN0YW5jZXMsIHRoZXkgd29uJ3QgYmUgZnVydGhlciBzeW5jaHJvbml6ZWQKLSAqIHRvIHRoZSBQVFAgbmV0d29yayBjbG9jay4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9wdHBfZGVpbml0ICh2b2lkKQotewotICBHTGlzdCAqbCwgKm07Ci0KLSAgZ19tdXRleF9sb2NrICgmcHRwX2xvY2spOwotCi0gIGlmIChwdHBfaGVscGVyX3BpZCkgewotI2lmbmRlZiBHX09TX1dJTjMyCi0gICAga2lsbCAocHRwX2hlbHBlcl9waWQsIFNJR0tJTEwpOwotICAgIHdhaXRwaWQgKHB0cF9oZWxwZXJfcGlkLCBOVUxMLCAwKTsKLSNlbHNlCi0gICAgVGVybWluYXRlUHJvY2VzcyAocHRwX2hlbHBlcl9waWQsIDEpOwotICAgIFdhaXRGb3JTaW5nbGVPYmplY3QgKHB0cF9oZWxwZXJfcGlkLCBJTkZJTklURSk7Ci0jZW5kaWYKLSAgICBnX3NwYXduX2Nsb3NlX3BpZCAocHRwX2hlbHBlcl9waWQpOwotICB9Ci0gIHB0cF9oZWxwZXJfcGlkID0gMDsKLQotICBpZiAoc3RkaW5fY2hhbm5lbCkKLSAgICBnX2lvX2NoYW5uZWxfdW5yZWYgKHN0ZGluX2NoYW5uZWwpOwotICBzdGRpbl9jaGFubmVsID0gTlVMTDsKLSAgaWYgKHN0ZG91dF9jaGFubmVsKQotICAgIGdfaW9fY2hhbm5lbF91bnJlZiAoc3Rkb3V0X2NoYW5uZWwpOwotICBzdGRvdXRfY2hhbm5lbCA9IE5VTEw7Ci0KLSAgaWYgKG1haW5fbG9vcCAmJiBwdHBfaGVscGVyX3RocmVhZCkgewotICAgIEdUaHJlYWQgKnRtcCA9IHB0cF9oZWxwZXJfdGhyZWFkOwotICAgIHB0cF9oZWxwZXJfdGhyZWFkID0gTlVMTDsKLSAgICBnX211dGV4X3VubG9jayAoJnB0cF9sb2NrKTsKLSAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgIGdfdGhyZWFkX2pvaW4gKHRtcCk7Ci0gICAgZ19tdXRleF9sb2NrICgmcHRwX2xvY2spOwotICB9Ci0gIGlmIChtYWluX2xvb3ApCi0gICAgZ19tYWluX2xvb3BfdW5yZWYgKG1haW5fbG9vcCk7Ci0gIG1haW5fbG9vcCA9IE5VTEw7Ci0gIGlmIChtYWluX2NvbnRleHQpCi0gICAgZ19tYWluX2NvbnRleHRfdW5yZWYgKG1haW5fY29udGV4dCk7Ci0gIG1haW5fY29udGV4dCA9IE5VTEw7Ci0KLSAgaWYgKGRlbGF5X3JlcV9yYW5kKQotICAgIGdfcmFuZF9mcmVlIChkZWxheV9yZXFfcmFuZCk7Ci0gIGRlbGF5X3JlcV9yYW5kID0gTlVMTDsKLSAgaWYgKG9ic2VydmF0aW9uX3N5c3RlbV9jbG9jaykKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvYnNlcnZhdGlvbl9zeXN0ZW1fY2xvY2spOwotICBvYnNlcnZhdGlvbl9zeXN0ZW1fY2xvY2sgPSBOVUxMOwotCi0gIGZvciAobCA9IGRvbWFpbl9kYXRhOyBsOyBsID0gbC0+bmV4dCkgewotICAgIFB0cERvbWFpbkRhdGEgKmRvbWFpbiA9IGwtPmRhdGE7Ci0KLSAgICBmb3IgKG0gPSBkb21haW4tPmFubm91bmNlX3NlbmRlcnM7IG07IG0gPSBtLT5uZXh0KSB7Ci0gICAgICBQdHBBbm5vdW5jZVNlbmRlciAqc2VuZGVyID0gbS0+ZGF0YTsKLQotICAgICAgZ19xdWV1ZV9mb3JlYWNoICgmc2VuZGVyLT5hbm5vdW5jZV9tZXNzYWdlcywgKEdGdW5jKSBnX2ZyZWUsIE5VTEwpOwotICAgICAgZ19xdWV1ZV9jbGVhciAoJnNlbmRlci0+YW5ub3VuY2VfbWVzc2FnZXMpOwotICAgICAgZ19mcmVlIChzZW5kZXIpOwotICAgIH0KLSAgICBnX2xpc3RfZnJlZSAoZG9tYWluLT5hbm5vdW5jZV9zZW5kZXJzKTsKLQotICAgIGdfcXVldWVfZm9yZWFjaCAoJmRvbWFpbi0+cGVuZGluZ19zeW5jcywgKEdGdW5jKSBwdHBfcGVuZGluZ19zeW5jX2ZyZWUsCi0gICAgICAgIE5VTEwpOwotICAgIGdfcXVldWVfY2xlYXIgKCZkb21haW4tPnBlbmRpbmdfc3luY3MpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGRvbWFpbi0+ZG9tYWluX2Nsb2NrKTsKLSAgICBnX2ZyZWUgKGRvbWFpbik7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKGRvbWFpbl9kYXRhKTsKLSAgZG9tYWluX2RhdGEgPSBOVUxMOwotICBnX2xpc3RfZm9yZWFjaCAoZG9tYWluX2Nsb2NrcywgKEdGdW5jKSBnX2ZyZWUsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoZG9tYWluX2Nsb2Nrcyk7Ci0gIGRvbWFpbl9jbG9ja3MgPSBOVUxMOwotCi0gIHB0cF9jbG9ja19pZC5jbG9ja19pZGVudGl0eSA9IEdTVF9QVFBfQ0xPQ0tfSURfTk9ORTsKLSAgcHRwX2Nsb2NrX2lkLnBvcnRfbnVtYmVyID0gMDsKLQotICBpbml0dGVkID0gRkFMU0U7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZwdHBfbG9jayk7Ci19Ci0KLSNkZWZpbmUgREVGQVVMVF9ET01BSU4gMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9ET01BSU4sCi0gIFBST1BfSU5URVJOQUxfQ0xPQ0ssCi0gIFBST1BfTUFTVEVSX0NMT0NLX0lELAotICBQUk9QX0dSQU5ETUFTVEVSX0NMT0NLX0lECi19OwotCi0jZGVmaW5lIEdTVF9QVFBfQ0xPQ0tfR0VUX1BSSVZBVEUob2JqKSAgXAotICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgob2JqKSwgR1NUX1RZUEVfUFRQX0NMT0NLLCBHc3RQdHBDbG9ja1ByaXZhdGUpKQotCi1zdHJ1Y3QgX0dzdFB0cENsb2NrUHJpdmF0ZQotewotICBndWludCBkb21haW47Ci0gIEdzdENsb2NrICpkb21haW5fY2xvY2s7Ci0gIGd1bG9uZyBkb21haW5fc3RhdHNfaWQ7Ci19OwotCi0jZGVmaW5lIGdzdF9wdHBfY2xvY2tfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UHRwQ2xvY2ssIGdzdF9wdHBfY2xvY2ssIEdTVF9UWVBFX1NZU1RFTV9DTE9DSyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9wdHBfY2xvY2tfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3B0cF9jbG9ja19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcHRwX2Nsb2NrX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdENsb2NrVGltZSBnc3RfcHRwX2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHc3RDbG9jayAqIGNsb2NrKTsKLQotc3RhdGljIHZvaWQKLWdzdF9wdHBfY2xvY2tfY2xhc3NfaW5pdCAoR3N0UHRwQ2xvY2tDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdENsb2NrQ2xhc3MgKmNsb2NrX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBjbG9ja19jbGFzcyA9IEdTVF9DTE9DS19DTEFTUyAoa2xhc3MpOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0UHRwQ2xvY2tQcml2YXRlKSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcHRwX2Nsb2NrX2ZpbmFsaXplOwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcHRwX2Nsb2NrX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3B0cF9jbG9ja19zZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ET01BSU4sCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImRvbWFpbiIsICJEb21haW4iLAotICAgICAgICAgICJUaGUgUFRQIGRvbWFpbiIsIDAsIEdfTUFYVUlOVDgsCi0gICAgICAgICAgREVGQVVMVF9ET01BSU4sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSU5URVJOQUxfQ0xPQ0ssCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiaW50ZXJuYWwtY2xvY2siLCAiSW50ZXJuYWwgQ2xvY2siLAotICAgICAgICAgICJJbnRlcm5hbCBjbG9jayIsIEdTVF9UWVBFX0NMT0NLLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVNURVJfQ0xPQ0tfSUQsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgibWFzdGVyLWNsb2NrLWlkIiwgIk1hc3RlciBDbG9jayBJRCIsCi0gICAgICAgICAgIk1hc3RlciBDbG9jayBJRCIsIDAsIEdfTUFYVUlOVDY0LCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9HUkFORE1BU1RFUl9DTE9DS19JRCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJncmFuZG1hc3Rlci1jbG9jay1pZCIsICJHcmFuZCBNYXN0ZXIgQ2xvY2sgSUQiLAotICAgICAgICAgICJHcmFuZCBNYXN0ZXIgQ2xvY2sgSUQiLCAwLCBHX01BWFVJTlQ2NCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGNsb2NrX2NsYXNzLT5nZXRfaW50ZXJuYWxfdGltZSA9IGdzdF9wdHBfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHRwX2Nsb2NrX2luaXQgKEdzdFB0cENsb2NrICogc2VsZikKLXsKLSAgR3N0UHRwQ2xvY2tQcml2YXRlICpwcml2OwotCi0gIHNlbGYtPnByaXYgPSBwcml2ID0gR1NUX1BUUF9DTE9DS19HRVRfUFJJVkFURSAoc2VsZik7Ci0KLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2VsZiwgR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIpOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzZWxmLCBHU1RfQ0xPQ0tfRkxBR19ORUVEU19TVEFSVFVQX1NZTkMpOwotCi0gIHByaXYtPmRvbWFpbiA9IERFRkFVTFRfRE9NQUlOOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdHBfY2xvY2tfZW5zdXJlX2RvbWFpbl9jbG9jayAoR3N0UHRwQ2xvY2sgKiBzZWxmKQotewotICBnYm9vbGVhbiBnb3RfY2xvY2sgPSBUUlVFOwotCi0gIGlmIChHX1VOTElLRUxZICghc2VsZi0+cHJpdi0+ZG9tYWluX2Nsb2NrKSkgewotICAgIGdfbXV0ZXhfbG9jayAoJmRvbWFpbl9jbG9ja3NfbG9jayk7Ci0gICAgaWYgKCFzZWxmLT5wcml2LT5kb21haW5fY2xvY2spIHsKLSAgICAgIEdMaXN0ICpsOwotCi0gICAgICBnb3RfY2xvY2sgPSBGQUxTRTsKLQotICAgICAgZm9yIChsID0gZG9tYWluX2Nsb2NrczsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICAgICAgUHRwRG9tYWluRGF0YSAqY2xvY2tfZGF0YSA9IGwtPmRhdGE7Ci0KLSAgICAgICAgaWYgKGNsb2NrX2RhdGEtPmRvbWFpbiA9PSBzZWxmLT5wcml2LT5kb21haW4KLSAgICAgICAgICAgICYmIGNsb2NrX2RhdGEtPmxhc3RfcHRwX3RpbWUgIT0gMCkgewotICAgICAgICAgIHNlbGYtPnByaXYtPmRvbWFpbl9jbG9jayA9IGNsb2NrX2RhdGEtPmRvbWFpbl9jbG9jazsKLSAgICAgICAgICBnb3RfY2xvY2sgPSBUUlVFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdfbXV0ZXhfdW5sb2NrICgmZG9tYWluX2Nsb2Nrc19sb2NrKTsKLSAgICBpZiAoZ290X2Nsb2NrKSB7Ci0gICAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChzZWxmKSwgImludGVybmFsLWNsb2NrIik7Ci0gICAgICBnc3RfY2xvY2tfc2V0X3N5bmNlZCAoR1NUX0NMT0NLIChzZWxmKSwgVFJVRSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGdvdF9jbG9jazsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHRwX2Nsb2NrX3N0YXRzX2NhbGxiYWNrIChndWludDggZG9tYWluLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdGF0cywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFB0cENsb2NrICpzZWxmID0gdXNlcl9kYXRhOwotCi0gIGlmIChkb21haW4gIT0gc2VsZi0+cHJpdi0+ZG9tYWluCi0gICAgICB8fCAhZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoc3RhdHMsIEdTVF9QVFBfU1RBVElTVElDU19USU1FX1VQREFURUQpKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIExldCdzIHNldCBvdXIgaW50ZXJuYWwgY2xvY2sgKi8KLSAgaWYgKCFnc3RfcHRwX2Nsb2NrX2Vuc3VyZV9kb21haW5fY2xvY2sgKHNlbGYpKQotICAgIHJldHVybiBUUlVFOwotCi0gIHNlbGYtPnByaXYtPmRvbWFpbl9zdGF0c19pZCA9IDA7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B0cF9jbG9ja19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UHRwQ2xvY2sgKnNlbGYgPSBHU1RfUFRQX0NMT0NLIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9ET01BSU46Ci0gICAgICBzZWxmLT5wcml2LT5kb21haW4gPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBnc3RfcHRwX2Nsb2NrX2Vuc3VyZV9kb21haW5fY2xvY2sgKHNlbGYpOwotICAgICAgaWYgKCFzZWxmLT5wcml2LT5kb21haW5fY2xvY2spCi0gICAgICAgIHNlbGYtPnByaXYtPmRvbWFpbl9zdGF0c19pZCA9Ci0gICAgICAgICAgICBnc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfYWRkIChnc3RfcHRwX2Nsb2NrX3N0YXRzX2NhbGxiYWNrLCBzZWxmLAotICAgICAgICAgICAgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHRwX2Nsb2NrX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RQdHBDbG9jayAqc2VsZiA9IEdTVF9QVFBfQ0xPQ0sgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RPTUFJTjoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzZWxmLT5wcml2LT5kb21haW4pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lOVEVSTkFMX0NMT0NLOgotICAgICAgZ3N0X3B0cF9jbG9ja19lbnN1cmVfZG9tYWluX2Nsb2NrIChzZWxmKTsKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHNlbGYtPnByaXYtPmRvbWFpbl9jbG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFTVEVSX0NMT0NLX0lEOgotICAgIGNhc2UgUFJPUF9HUkFORE1BU1RFUl9DTE9DS19JRDp7Ci0gICAgICBHTGlzdCAqbDsKLQotICAgICAgZ19tdXRleF9sb2NrICgmZG9tYWluX2Nsb2Nrc19sb2NrKTsKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIDApOwotCi0gICAgICBmb3IgKGwgPSBkb21haW5fY2xvY2tzOyBsOyBsID0gbC0+bmV4dCkgewotICAgICAgICBQdHBEb21haW5EYXRhICpjbG9ja19kYXRhID0gbC0+ZGF0YTsKLQotICAgICAgICBpZiAoY2xvY2tfZGF0YS0+ZG9tYWluID09IHNlbGYtPnByaXYtPmRvbWFpbikgewotICAgICAgICAgIGlmIChwcm9wX2lkID09IFBST1BfTUFTVEVSX0NMT0NLX0lEKQotICAgICAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwKLSAgICAgICAgICAgICAgICBjbG9ja19kYXRhLT5tYXN0ZXJfY2xvY2tfaWRlbnRpdHkuY2xvY2tfaWRlbnRpdHkpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGNsb2NrX2RhdGEtPmdyYW5kbWFzdGVyX2lkZW50aXR5KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZ19tdXRleF91bmxvY2sgKCZkb21haW5fY2xvY2tzX2xvY2spOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdHBfY2xvY2tfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFB0cENsb2NrICpzZWxmID0gR1NUX1BUUF9DTE9DSyAob2JqZWN0KTsKLQotICBpZiAoc2VsZi0+cHJpdi0+ZG9tYWluX3N0YXRzX2lkKQotICAgIGdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19yZW1vdmUgKHNlbGYtPnByaXYtPmRvbWFpbl9zdGF0c19pZCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9wdHBfY2xvY2tfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWdzdF9wdHBfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKEdzdENsb2NrICogY2xvY2spCi17Ci0gIEdzdFB0cENsb2NrICpzZWxmID0gR1NUX1BUUF9DTE9DSyAoY2xvY2spOwotCi0gIGdzdF9wdHBfY2xvY2tfZW5zdXJlX2RvbWFpbl9jbG9jayAoc2VsZik7Ci0KLSAgaWYgKCFzZWxmLT5wcml2LT5kb21haW5fY2xvY2spIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiRG9tYWluICV1IGhhcyBubyBjbG9jayB5ZXQgYW5kIGlzIG5vdCBzeW5jZWQiLAotICAgICAgICBzZWxmLT5wcml2LT5kb21haW4pOwotICAgIHJldHVybiBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB9Ci0KLSAgcmV0dXJuIGdzdF9jbG9ja19nZXRfdGltZSAoc2VsZi0+cHJpdi0+ZG9tYWluX2Nsb2NrKTsKLX0KLQotLyoqCi0gKiBnc3RfcHRwX2Nsb2NrX25ldzoKLSAqIEBuYW1lOiBOYW1lIG9mIHRoZSBjbG9jawotICogQGRvbWFpbjogUFRQIGRvbWFpbgotICoKLSAqIENyZWF0ZXMgYSBuZXcgUFRQIGNsb2NrIGluc3RhbmNlIHRoYXQgZXhwb3J0cyB0aGUgUFRQIHRpbWUgb2YgdGhlIG1hc3RlcgotICogY2xvY2sgaW4gQGRvbWFpbi4gVGhpcyBjbG9jayBjYW4gYmUgc2xhdmVkIHRvIG90aGVyIGNsb2NrcyBhcyBuZWVkZWQuCi0gKgotICogSWYgZ3N0X3B0cF9pbml0KCkgd2FzIG5vdCBjYWxsZWQgYmVmb3JlLCB0aGlzIHdpbGwgY2FsbCBnc3RfcHRwX2luaXQoKSB3aXRoCi0gKiBkZWZhdWx0IHBhcmFtZXRlcnMuCi0gKgotICoKLSAqIFRoaXMgY2xvY2sgb25seSByZXR1cm5zIHZhbGlkIHRpbWVzdGFtcHMgYWZ0ZXIgaXQgcmVjZWl2ZWQgdGhlIGZpcnN0Ci0gKiB0aW1lcyBmcm9tIHRoZSBQVFAgbWFzdGVyIGNsb2NrIG9uIHRoZSBuZXR3b3JrLiBPbmNlIHRoaXMgaGFwcGVucyB0aGUKLSAqIEdzdFB0cENsb2NrOjppbnRlcm5hbC1jbG9jayBwcm9wZXJ0eSB3aWxsIGJlY29tZSBub24tTlVMTC4gWW91IGNhbgotICogY2hlY2sgdGhpcyB3aXRoIGdzdF9jbG9ja193YWl0X2Zvcl9zeW5jKCksIHRoZSBHc3RDbG9jazo6c3luY2VkIHNpZ25hbCBhbmQKLSAqIGdzdF9jbG9ja19pc19zeW5jZWQoKS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLUdzdENsb2NrICoKLWdzdF9wdHBfY2xvY2tfbmV3IChjb25zdCBnY2hhciAqIG5hbWUsIGd1aW50IGRvbWFpbikKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG5hbWUgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkb21haW4gPD0gR19NQVhVSU5UOCwgTlVMTCk7Ci0KLSAgaWYgKCFpbml0dGVkICYmICFnc3RfcHRwX2luaXQgKEdTVF9QVFBfQ0xPQ0tfSURfTk9ORSwgTlVMTCkpIHsKLSAgICBHU1RfRVJST1IgKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQVFAiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1BUUF9DTE9DSywgIm5hbWUiLCBuYW1lLCAiZG9tYWluIiwgZG9tYWluLAotICAgICAgTlVMTCk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50OCBkb21haW47Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RhdHM7Ci19IERvbWFpblN0YXRzTWFyc2hhbERhdGE7Ci0KLXN0YXRpYyB2b2lkCi1kb21haW5fc3RhdHNfbWFyc2hhbGxlciAoR0hvb2sgKiBob29rLCBEb21haW5TdGF0c01hcnNoYWxEYXRhICogZGF0YSkKLXsKLSAgR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrIGNhbGxiYWNrID0gKEdzdFB0cFN0YXRpc3RpY3NDYWxsYmFjaykgaG9vay0+ZnVuYzsKLQotICBpZiAoIWNhbGxiYWNrIChkYXRhLT5kb21haW4sIGRhdGEtPnN0YXRzLCBob29rLT5kYXRhKSkKLSAgICBnX2hvb2tfZGVzdHJveSAoJmRvbWFpbl9zdGF0c19ob29rcywgaG9vay0+aG9va19pZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1lbWl0X3B0cF9zdGF0aXN0aWNzIChndWludDggZG9tYWluLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdGF0cykKLXsKLSAgRG9tYWluU3RhdHNNYXJzaGFsRGF0YSBkYXRhID0geyBkb21haW4sIHN0YXRzIH07Ci0KLSAgZ19tdXRleF9sb2NrICgmcHRwX2xvY2spOwotICBnX2hvb2tfbGlzdF9tYXJzaGFsICgmZG9tYWluX3N0YXRzX2hvb2tzLCBUUlVFLAotICAgICAgKEdIb29rTWFyc2hhbGxlcikgZG9tYWluX3N0YXRzX21hcnNoYWxsZXIsICZkYXRhKTsKLSAgZ19tdXRleF91bmxvY2sgKCZwdHBfbG9jayk7Ci19Ci0KLS8qKgotICogZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX2FkZDoKLSAqIEBjYWxsYmFjazogR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrIHRvIGNhbGwKLSAqIEB1c2VyX2RhdGE6IERhdGEgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sKLSAqIEBkZXN0cm95X2RhdGE6IEdEZXN0cm95Tm90aWZ5IHRvIGRlc3Ryb3kgdGhlIGRhdGEKLSAqCi0gKiBJbnN0YWxscyBhIG5ldyBzdGF0aXN0aWNzIGNhbGxiYWNrIGZvciBnYXRoZXJpbmcgUFRQIHN0YXRpc3RpY3MuIFNlZQotICogR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrIGZvciBhIGxpc3Qgb2Ygc3RhdGlzdGljcyB0aGF0IGFyZSBwcm92aWRlZC4KLSAqCi0gKiBSZXR1cm5zOiBJZCBmb3IgdGhlIGNhbGxiYWNrIHRoYXQgY2FuIGJlIHBhc3NlZCB0bwotICogZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX3JlbW92ZSgpCi0gKgotICogU2luY2U6IDEuNgotICovCi1ndWxvbmcKLWdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQgKEdzdFB0cFN0YXRpc3RpY3NDYWxsYmFjayBjYWxsYmFjaywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfZGF0YSkKLXsKLSAgR0hvb2sgKmhvb2s7Ci0KLSAgZ19tdXRleF9sb2NrICgmcHRwX2xvY2spOwotCi0gIGlmICghZG9tYWluX3N0YXRzX2hvb2tzX2luaXR0ZWQpIHsKLSAgICBnX2hvb2tfbGlzdF9pbml0ICgmZG9tYWluX3N0YXRzX2hvb2tzLCBzaXplb2YgKEdIb29rKSk7Ci0gICAgZG9tYWluX3N0YXRzX2hvb2tzX2luaXR0ZWQgPSBUUlVFOwotICB9Ci0KLSAgaG9vayA9IGdfaG9va19hbGxvYyAoJmRvbWFpbl9zdGF0c19ob29rcyk7Ci0gIGhvb2stPmZ1bmMgPSBjYWxsYmFjazsKLSAgaG9vay0+ZGF0YSA9IHVzZXJfZGF0YTsKLSAgaG9vay0+ZGVzdHJveSA9IGRlc3Ryb3lfZGF0YTsKLSAgZ19ob29rX3ByZXBlbmQgKCZkb21haW5fc3RhdHNfaG9va3MsIGhvb2spOwotICBnX2F0b21pY19pbnRfYWRkICgmZG9tYWluX3N0YXRzX25faG9va3MsIDEpOwotCi0gIGdfbXV0ZXhfdW5sb2NrICgmcHRwX2xvY2spOwotCi0gIHJldHVybiBob29rLT5ob29rX2lkOwotfQotCi0vKioKLSAqIGdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19yZW1vdmU6Ci0gKiBAaWQ6IENhbGxiYWNrIGlkIHRvIHJlbW92ZQotICoKLSAqIFJlbW92ZXMgYSBQVFAgc3RhdGlzdGljcyBjYWxsYmFjayB0aGF0IHdhcyBwcmV2aW91c2x5IGFkZGVkIHdpdGgKLSAqIGdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19hZGQoKS4KLSAqCi0gKiBTaW5jZTogMS42Ci0gKi8KLXZvaWQKLWdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19yZW1vdmUgKGd1bG9uZyBpZCkKLXsKLSAgZ19tdXRleF9sb2NrICgmcHRwX2xvY2spOwotICBpZiAoZ19ob29rX2Rlc3Ryb3kgKCZkb21haW5fc3RhdHNfaG9va3MsIGlkKSkKLSAgICBnX2F0b21pY19pbnRfYWRkICgmZG9tYWluX3N0YXRzX25faG9va3MsIC0xKTsKLSAgZ19tdXRleF91bmxvY2sgKCZwdHBfbG9jayk7Ci19CmRpZmYgLS1naXQgYS9saWJzL2dzdC9uZXQvZ3N0cHRwY2xvY2suaCBiL2xpYnMvZ3N0L25ldC9nc3RwdHBjbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTFjNTljLi4wMDAwMDAwCi0tLSBhL2xpYnMvZ3N0L25ldC9nc3RwdHBjbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0gKgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUFRQX0NMT0NLX0hfXwotI2RlZmluZSBfX0dTVF9QVFBfQ0xPQ0tfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHN5c3RlbWNsb2NrLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9QVFBfQ0xPQ0sgXAotICAoZ3N0X3B0cF9jbG9ja19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUFRQX0NMT0NLKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUFRQX0NMT0NLLEdzdFB0cENsb2NrKSkKLSNkZWZpbmUgR1NUX1BUUF9DTE9DS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9QVFBfQ0xPQ0ssR3N0UHRwQ2xvY2tDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19QVFBfQ0xPQ0sob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9QVFBfQ0xPQ0spKQotI2RlZmluZSBHU1RfSVNfUFRQX0NMT0NLX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1BUUF9DTE9DSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQdHBDbG9jayBHc3RQdHBDbG9jazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQdHBDbG9ja0NsYXNzIEdzdFB0cENsb2NrQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UHRwQ2xvY2tQcml2YXRlIEdzdFB0cENsb2NrUHJpdmF0ZTsKLQotLyoqCi0gKiBHc3RQdHBDbG9jazoKLSAqCi0gKiBPcGFxdWUgI0dzdFB0cENsb2NrIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RQdHBDbG9jayB7Ci0gIEdzdFN5c3RlbUNsb2NrIGNsb2NrOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RQdHBDbG9ja1ByaXZhdGUgKnByaXY7Ci0KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi0vKioKLSAqIEdzdFB0cENsb2NrQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBwYXJlbnRlZCB0byAjR3N0U3lzdGVtQ2xvY2tDbGFzcwotICoKLSAqIE9wYXF1ZSAjR3N0UHRwQ2xvY2tDbGFzcyBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0UHRwQ2xvY2tDbGFzcyB7Ci0gIEdzdFN5c3RlbUNsb2NrQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLS8qKgotICogR1NUX1BUUF9DTE9DS19JRF9OT05FOgotICogUFRQIGNsb2NrIGlkZW50aWZpY2F0aW9uIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBnc3RfcHRwX2luaXQoKSB0bwotICogYXV0b21hdGljYWxseSBzZWxlY3Qgb25lIGJhc2VkIG9uIHRoZSBNQUMgYWRkcmVzcyBvZiBpbnRlcmZhY2VzCi0gKi8KLSNkZWZpbmUgR1NUX1BUUF9DTE9DS19JRF9OT05FICgoZ3VpbnQ2NCkgLTEpCi0KLUdUeXBlICAgICAgICAgICBnc3RfcHRwX2Nsb2NrX2dldF90eXBlICAgICAgICAgICAgICh2b2lkKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9wdHBfaXNfc3VwcG9ydGVkICAgICAgICAgICAgICAgKHZvaWQpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9wdHBfaXNfaW5pdGlhbGl6ZWQgICAgICAgICAgICAgKHZvaWQpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF9wdHBfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgKGd1aW50NjQgY2xvY2tfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKiogaW50ZXJmYWNlcyk7Ci12b2lkICAgICAgICAgICAgZ3N0X3B0cF9kZWluaXQgICAgICAgICAgICAgICAgICAgICAodm9pZCk7Ci0KLSNkZWZpbmUgR1NUX1BUUF9TVEFUSVNUSUNTX05FV19ET01BSU5fRk9VTkQgICAgICAgICAgICJHc3RQdHBTdGF0aXN0aWNzTmV3RG9tYWluRm91bmQiCi0jZGVmaW5lIEdTVF9QVFBfU1RBVElTVElDU19CRVNUX01BU1RFUl9DTE9DS19TRUxFQ1RFRCAiR3N0UHRwU3RhdGlzdGljc0Jlc3RNYXN0ZXJDbG9ja1NlbGVjdGVkIgotI2RlZmluZSBHU1RfUFRQX1NUQVRJU1RJQ1NfUEFUSF9ERUxBWV9NRUFTVVJFRCAgICAgICAgIkdzdFB0cFN0YXRpc3RpY3NQYXRoRGVsYXlNZWFzdXJlZCIKLSNkZWZpbmUgR1NUX1BUUF9TVEFUSVNUSUNTX1RJTUVfVVBEQVRFRCAgICAgICAgICAgICAgICJHc3RQdHBTdGF0aXN0aWNzVGltZVVwZGF0ZWQiCi0KLS8qKgotICogR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrOgotICogQGRvbWFpbjogUFRQIGRvbWFpbiBpZGVudGlmaWVyCi0gKiBAc3RhdHM6IE5ldyBzdGF0aXN0aWNzCi0gKiBAdXNlcl9kYXRhOiBEYXRhIHBhc3NlZCB0byBnc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfYWRkKCkKLSAqCi0gKiBUaGUgc3RhdGlzdGljcyBjYW4gYmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzOgotICoKLSAqIEdTVF9QVFBfU1RBVElTVElDU19ORVdfRE9NQUlOX0ZPVU5EOgotICogImRvbWFpbiIgICAgICAgICAgICAgICAgR19UWVBFX1VJTlQgICAgICAgICAgVGhlIGRvbWFpbiBpZGVudGlmaWVyIG9mIHRoZSBkb21haW4KLSAqICJjbG9jayIgICAgICAgICAgICAgICAgIEdTVF9UWVBFX0NMT0NLICAgICAgIFRoZSBpbnRlcm5hbCBjbG9jayB0aGF0IGlzIHNsYXZlZCB0byB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBUUCBkb21haW4KLSAqCi0gKiBHU1RfUFRQX1NUQVRJU1RJQ1NfQkVTVF9NQVNURVJfQ0xPQ0tfU0VMRUNURUQ6Ci0gKiAiZG9tYWluIiAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVCAgICAgICAgICBUaGUgZG9tYWluIGlkZW50aWZpZXIgb2YgdGhlIGRvbWFpbgotICogIm1hc3Rlci1jbG9jay1pZCIgICAgICAgR19UWVBFX1VJTlQ2NCAgICAgICAgUFRQIGNsb2NrIGlkZW50aWZpZXIgb2YgdGhlIHNlbGVjdGVkIG1hc3RlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sKLSAqICJtYXN0ZXItY2xvY2stcG9ydCIgICAgIEdfVFlQRV9VSU5UICAgICAgICAgIFBUUCBwb3J0IG51bWJlciBvZiB0aGUgc2VsZWN0ZWQgbWFzdGVyIGNsb2NrCi0gKiAiZ3JhbmRtYXN0ZXItY2xvY2staWQiICBHX1RZUEVfVUlOVDY0ICAgICAgICBQVFAgY2xvY2sgaWRlbnRpZmllciBvZiB0aGUgZ3JhbmRtYXN0ZXIgY2xvY2sKLSAqCi0gKiBHU1RfUFRQX1NUQVRJU1RJQ1NfUEFUSF9ERUxBWV9NRUFTVVJFRDoKLSAqICJkb21haW4iICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UICAgICAgICAgIFRoZSBkb21haW4gaWRlbnRpZmllciBvZiB0aGUgZG9tYWluCi0gKiAibWVhbi1wYXRoLWRlbGF5LWF2ZyIgICBHU1RfVFlQRV9DTE9DS19USU1FICBBdmVyYWdlIG1lYW4gcGF0aCBkZWxheQotICogIm1lYW4tcGF0aC1kZWxheSIgICAgICAgR1NUX1RZUEVfQ0xPQ0tfVElNRSAgTGF0ZXN0IG1lYW4gcGF0aCBkZWxheQotICogImRlbGF5LXJlcXVlc3QtZGVsYXkiICAgR1NUX1RZUEVfQ0xPQ0tfVElNRSAgRGVsYXkgb2YgREVMQVlfUkVRIC8gREVMQVlfUkVTUCBtZXNzYWdlcwotICoKLSAqIEdTVF9QVFBfU1RBVElTVElDU19USU1FX1VQREFURUQ6Ci0gKiAiZG9tYWluIiAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVCAgICAgICAgICBUaGUgZG9tYWluIGlkZW50aWZpZXIgb2YgdGhlIGRvbWFpbgotICogIm1lYW4tcGF0aC1kZWxheS1hdmciICAgR1NUX1RZUEVfQ0xPQ0tfVElNRSAgQXZlcmFnZSBtZWFuIHBhdGggZGVsYXkKLSAqICJsb2NhbC10aW1lIiAgICAgICAgICAgIEdTVF9UWVBFX0NMT0NLX1RJTUUgIExvY2FsIHRpbWUgdGhhdCBjb3JyZXNwb25kcyB0byBwdHAtdGltZQotICogInB0cC10aW1lIiAgICAgICAgICAgICAgR1NUX1RZUEVfQ0xPQ0tfVElNRSAgTmV3bHkgbWVhc3VyZWQgUFRQIHRpbWUgYXQgbG9jYWwtdGltZQotICogImVzdGltYXRlZC1wdHAtdGltZSIgICAgR1NUX1RZUEVfQ0xPQ0tfVElNRSAgRXN0aW1hdGVkIFBUUCB0aW1lIGJhc2VkIG9uIHByZXZpb3VzIG1lYXN1cmVtZW50cwotICogImRpc2NvbnRpbnVpdHkiICAgICAgICAgR19UWVBFX0lOVDY0ICAgICAgICAgRGlmZmVyZW5jZSBiZXR3ZWVuIGVzdGltYXRlZCBhbmQgbWVhc3VyZWQgUFRQIHRpbWUKLSAqICJzeW5jZWQiICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOICAgICAgIEN1cnJlbnRseSBzeW5jZWQgdG8gdGhlIHJlbW90ZSBjbG9jawotICogInItc3F1YXJlZCIgICAgICAgICAgICAgR19UWVBFX0RPVUJMRSAgICAgICAgUsKyIG9mIGNsb2NrIGVzdGltYXRpb24gcmVncmVzc2lvbgotICogImludGVybmFsLXRpbWUiICAgICAgICAgR1NUX1RZUEVfQ0xPQ0tfVElNRSAgSW50ZXJuYWwgdGltZSBjbG9jayBwYXJhbWV0ZXIKLSAqICJleHRlcm5hbC10aW1lIiAgICAgICAgIEdTVF9UWVBFX0NMT0NLX1RJTUUgIEV4dGVybmFsIHRpbWUgY2xvY2sgcGFyYW1ldGVyCi0gKiAicmF0ZS1udW0iICAgICAgICAgICAgICBHX1RZUEVfVUlOVDY0ICAgICAgICBJbnRlcm5hbC9leHRlcm5hbCByYXRlIG51bWVyYXRvcgotICogInJhdGUtZGVuIiAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCAgICAgICAgSW50ZXJuYWwvZXh0ZXJuYWwgcmF0ZSBkZW5vbWluYXRvcgotICogInJhdGUiICAgICAgICAgICAgICAgICAgR19UWVBFX0RPVUJMRSAgICAgICAgSW50ZXJuYWwvZXh0ZXJuYWwgcmF0ZQotICoKLSAqIElmICVGQUxTRSBpcyByZXR1cm5lZCwgdGhlIGNhbGxiYWNrIGlzIHJlbW92ZWQgYW5kIG5ldmVyIGNhbGxlZCBhZ2Fpbi4KLSAqCi0gKi8KLXR5cGVkZWYgZ2Jvb2xlYW4gICgqR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrKSAgICAgIChndWludDggZG9tYWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqIHN0YXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1ndWxvbmcgICAgICAgICAgZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX2FkZCAgICAoR3N0UHRwU3RhdGlzdGljc0NhbGxiYWNrIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9kYXRhKTsKLXZvaWQgICAgICAgICAgICBnc3RfcHRwX3N0YXRpc3RpY3NfY2FsbGJhY2tfcmVtb3ZlIChndWxvbmcgaWQpOwotCi1Hc3RDbG9jayogICAgICAgZ3N0X3B0cF9jbG9ja19uZXcgICAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgZG9tYWluKTsKLQotI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCi1HX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyhHc3RQdHBDbG9jaywgZ3N0X29iamVjdF91bnJlZikKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUFRQX0NMT0NLX0hfXyAqLwotCmRpZmYgLS1naXQgYS9saWJzL2dzdC9uZXQvbmV0LmggYi9saWJzL2dzdC9uZXQvbmV0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZjAzMmUuLjAwMDAwMDAKLS0tIGEvbGlicy9nc3QvbmV0L25ldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR1N0cmVhbWVyIGRldmVsb3BlcnMKLSAqCi0gKiBuZXQuaDogc2luZ2xlIGluY2x1ZGUgaGVhZGVyIGZvciBnc3QtbmV0IGxpYnJhcnkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX05FVF9fSF9fCi0jZGVmaW5lIF9fR1NUX05FVF9fSF9fCi0KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldC5oPgotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg+Ci0jaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXR0aW1lcGFja2V0Lmg+Ci0jaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXR0aW1lcHJvdmlkZXIuaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdHB0cGNsb2NrLmg+Ci0KLSNlbmRpZiAvKiBfX0dTVF9ORVRfX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzM2Y2Y5Li4wMDAwMDAwCi0tLSBhL2x0bWFpbi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDExMTU2ICswLDAgQEAKLSMhIC9iaW4vc2gKLSMjIERPIE5PVCBFRElUIC0gVGhpcyBmaWxlIGdlbmVyYXRlZCBmcm9tIC4vYnVpbGQtYXV4L2x0bWFpbi5pbgotIyMgICAgICAgICAgICAgICBieSBpbmxpbmUtc291cmNlIHYyMDE0LTAxLTAzLjAxCi0KLSMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC42Ci0jIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgotCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0Ci0jIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQotIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLSMKLSMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0jIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotCi1QUk9HUkFNPWxpYnRvb2wKLVBBQ0tBR0U9bGlidG9vbAotVkVSU0lPTj0iMi40LjYgRGViaWFuLTIuNC42LTIiCi1wYWNrYWdlX3JldmlzaW9uPTIuNC42Ci0KLQotIyMgLS0tLS0tICMjCi0jIyBVc2FnZS4gIyMKLSMjIC0tLS0tLSAjIwotCi0jIFJ1biAnLi9saWJ0b29sIC0taGVscCcgZm9yIGhlbHAgd2l0aCB1c2luZyB0aGlzIHNjcmlwdCBmcm9tIHRoZQotIyBjb21tYW5kIGxpbmUuCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgVXNlciBvdmVycmlkYWJsZSBjb21tYW5kIHBhdGhzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEFmdGVyIGNvbmZpZ3VyZSBjb21wbGV0ZXMsIGl0IGhhcyBhIGJldHRlciBpZGVhIG9mIHNvbWUgb2YgdGhlCi0jIHNoZWxsIHRvb2xzIHdlIG5lZWQgdGhhbiB0aGUgZGVmYXVsdHMgdXNlZCBieSB0aGUgZnVuY3Rpb25zIHNoYXJlZAotIyB3aXRoIGJvb3RzdHJhcCwgc28gc2V0IHRob3NlIGhlcmUgd2hlcmUgdGhleSBjYW4gc3RpbGwgYmUgb3Zlci0KLSMgcmlkZGVuIGJ5IHRoZSB1c2VyLCBidXQgb3RoZXJ3aXNlIHRha2UgcHJlY2VkZW5jZS4KLQotOiAke0FVVE9DT05GPSJhdXRvY29uZiJ9Ci06ICR7QVVUT01BS0U9ImF1dG9tYWtlIn0KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgU291cmNlIGV4dGVybmFsIGxpYnJhcmllcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgTXVjaCBvZiBvdXIgbG93LWxldmVsIGZ1bmN0aW9uYWxpdHkgbmVlZHMgdG8gYmUgc291cmNlZCBmcm9tIGV4dGVybmFsCi0jIGxpYnJhcmllcywgd2hpY2ggYXJlIGluc3RhbGxlZCB0byAkcGtnYXV4ZGlyLgotCi0jIFNldCBhIHZlcnNpb24gc3RyaW5nIGZvciB0aGlzIHNjcmlwdC4KLXNjcmlwdHZlcnNpb249MjAxNS0wMS0yMC4xNzsgIyBVVEMKLQotIyBHZW5lcmFsIHNoZWxsIHNjcmlwdCBib2lsZXIgcGxhdGUsIGFuZCBoZWxwZXIgZnVuY3Rpb25zLgotIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAotCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UgZGlzdHJpYnV0ZQotIyB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0IGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLAotIyB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UKLSMgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0jIFBsZWFzZSByZXBvcnQgYnVncyBvciBwcm9wb3NlIHBhdGNoZXMgdG8gZ2FyeUBnbnUub3JnLgotCi0KLSMjIC0tLS0tLSAjIwotIyMgVXNhZ2UuICMjCi0jIyAtLS0tLS0gIyMKLQotIyBFdmFsdWF0ZSB0aGlzIGZpbGUgbmVhciB0aGUgdG9wIG9mIHlvdXIgc2NyaXB0IHRvIGdhaW4gYWNjZXNzIHRvCi0jIHRoZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBkZWZpbmVkIGhlcmU6Ci0jCi0jICAgLiBgZWNobyAiJDAiIHwgJHtTRUQtc2VkfSAnc3xbXi9dKiR8fCdgL2J1aWxkLWF1eC9mdW5jbGliLnNoCi0jCi0jIElmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIGFueSBvZiB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZQotIyBzZXR0aW5ncywgZG8gdGhhdCBiZWZvcmUgZXZhbHVhdGluZyB0aGlzIGZpbGUuCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFNoZWxsIG5vcm1hbGlzYXRpb24uICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIFNvbWUgc2hlbGxzIG5lZWQgYSBsaXR0bGUgaGVscCB0byBiZSBhcyBCb3VybmUgY29tcGF0aWJsZSBhcyBwb3NzaWJsZS4KLSMgQmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIG1ha2Ugc3VyZSBhbGwgdGhhdCBoZWxwIGhhcyBiZWVuIHByb3ZpZGVkIQotCi1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi0gIHNldG9wdCBOT19HTE9CX1NVQlNUCi1lbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsgZXNhYwotZmkKLQotIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIGluIGNhc2UgdGhleSBhcmUgcmVxdWlyZWQgbGF0ZXIuCi1fR191c2VyX2xvY2FsZT0KLV9HX3NhZmVfbG9jYWxlPQotZm9yIF9HX3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCi1kbwotICBldmFsICJpZiB0ZXN0IHNldCA9IFwiXCR7JF9HX3ZhcitzZXR9XCI7IHRoZW4KLSAgICAgICAgICBzYXZlXyRfR192YXI9XCQkX0dfdmFyCi0gICAgICAgICAgJF9HX3Zhcj1DCi0JICBleHBvcnQgJF9HX3ZhcgotCSAgX0dfdXNlcl9sb2NhbGU9XCIkX0dfdmFyPVxcXCRzYXZlX1wkX0dfdmFyOyBcJF9HX3VzZXJfbG9jYWxlXCIKLQkgIF9HX3NhZmVfbG9jYWxlPVwiJF9HX3Zhcj1DOyBcJF9HX3NhZmVfbG9jYWxlXCIKLQlmaSIKLWRvbmUKLQotIyBDRFBBVEguCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLSMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0Ci1zcD0nICcKLW5sPScKLScKLUlGUz0iJHNwCSRubCIKLQotIyBUaGVyZSBhcmUgYXBwYXJlbnRseSBzb21lIHJldGFyZGVkIHN5c3RlbXMgdGhhdCB1c2UgJzsnIGFzIGEgUEFUSCBzZXBhcmF0b3IhCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBQQVRIX1NFUEFSQVRPUj06Ci0gIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKLSAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAotICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIH0KLWZpCi0KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBMb2NhdGUgY29tbWFuZCB1dGlsaXRpZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLQotIyBmdW5jX2V4ZWN1dGFibGVfcCBGSUxFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgdGhhdCBGSUxFIGlzIGFuIGV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgotZnVuY19leGVjdXRhYmxlX3AgKCkKLXsKLSAgICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCi19Ci0KLQotIyBmdW5jX3BhdGhfcHJvZ3MgUFJPR1NfTElTVCBDSEVDS19GVU5DIFtQQVRIXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZWFyY2ggZm9yIGVpdGhlciBhIHByb2dyYW0gdGhhdCByZXNwb25kcyB0byAtLXZlcnNpb24gd2l0aCBvdXRwdXQKLSMgY29udGFpbmluZyAiR05VIiwgb3IgZWxzZSByZXR1cm5lZCBieSBDSEVDS19GVU5DIG90aGVyd2lzZSwgYnkKLSMgdHJ5aW5nIGFsbCB0aGUgZGlyZWN0b3JpZXMgaW4gUEFUSCB3aXRoIGVhY2ggb2YgdGhlIGVsZW1lbnRzIG9mCi0jIFBST0dTX0xJU1QuCi0jCi0jIENIRUNLX0ZVTkMgc2hvdWxkIGFjY2VwdCB0aGUgcGF0aCB0byBhIGNhbmRpZGF0ZSBwcm9ncmFtLCBhbmQKLSMgc2V0ICRmdW5jX2NoZWNrX3Byb2dfcmVzdWx0IGlmIGl0IHRydW5jYXRlcyBpdHMgb3V0cHV0IGxlc3MgdGhhbgotIyAkX0dfcGF0aF9wcm9nX21heCBjaGFyYWN0ZXJzLgotZnVuY19wYXRoX3Byb2dzICgpCi17Ci0gICAgX0dfcHJvZ3NfbGlzdD0kMQotICAgIF9HX2NoZWNrX2Z1bmM9JDIKLSAgICBfR19QQVRIPSR7My0iJFBBVEgifQotCi0gICAgX0dfcGF0aF9wcm9nX21heD0wCi0gICAgX0dfcGF0aF9wcm9nX2ZvdW5kPWZhbHNlCi0gICAgX0dfc2F2ZV9JRlM9JElGUzsgSUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KLSAgICBmb3IgX0dfZGlyIGluICRfR19QQVRIOyBkbwotICAgICAgSUZTPSRfR19zYXZlX0lGUwotICAgICAgdGVzdCAteiAiJF9HX2RpciIgJiYgX0dfZGlyPS4KLSAgICAgIGZvciBfR19wcm9nX25hbWUgaW4gJF9HX3Byb2dzX2xpc3Q7IGRvCi0gICAgICAgIGZvciBfZXhlZXh0IGluICcnIC5FWEU7IGRvCi0gICAgICAgICAgX0dfcGF0aF9wcm9nPSRfR19kaXIvJF9HX3Byb2dfbmFtZSRfZXhlZXh0Ci0gICAgICAgICAgZnVuY19leGVjdXRhYmxlX3AgIiRfR19wYXRoX3Byb2ciIHx8IGNvbnRpbnVlCi0gICAgICAgICAgY2FzZSBgIiRfR19wYXRoX3Byb2ciIC0tdmVyc2lvbiAyPiYxYCBpbgotICAgICAgICAgICAgKkdOVSopIGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQ9JF9HX3BhdGhfcHJvZyBfR19wYXRoX3Byb2dfZm91bmQ9OiA7OwotICAgICAgICAgICAgKikgICAgICRfR19jaGVja19mdW5jICRfR19wYXRoX3Byb2cKLQkJICAgZnVuY19wYXRoX3Byb2dzX3Jlc3VsdD0kZnVuY19jaGVja19wcm9nX3Jlc3VsdAotCQkgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgICAkX0dfcGF0aF9wcm9nX2ZvdW5kICYmIGJyZWFrIDMKLSAgICAgICAgZG9uZQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICBJRlM9JF9HX3NhdmVfSUZTCi0gICAgdGVzdCAteiAiJGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQiICYmIHsKLSAgICAgIGVjaG8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgPiYyCi0gICAgICBleGl0IDEKLSAgICB9Ci19Ci0KLQotIyBXZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGJlZm9yZSBjb25maWd1cmUKLSMgaGFzIGZpZ3VyZWQgb3V0IHdoZXJlIHRoZSBiZXN0IGJpbmFyaWVzIGFyZSBrZXB0LCB3aGljaCBtZWFucyB3ZSBoYXZlCi0jIHRvIHNlYXJjaCBmb3IgdGhlbSBvdXJzZWx2ZXMgLSBleGNlcHQgd2hlbiB0aGUgcmVzdWx0cyBhcmUgYWxyZWFkeSBzZXQKLSMgd2hlcmUgd2Ugc2tpcCB0aGUgc2VhcmNoZXMuCi0KLSMgVW5sZXNzIHRoZSB1c2VyIG92ZXJyaWRlcyBieSBzZXR0aW5nIFNFRCwgc2VhcmNoIHRoZSBwYXRoIGZvciBlaXRoZXIgR05VCi0jIHNlZCwgb3IgdGhlIHNlZCB0aGF0IHRydW5jYXRlcyBpdHMgb3V0cHV0IHRoZSBsZWFzdC4KLXRlc3QgLXogIiRTRUQiICYmIHsKLSAgX0dfc2VkX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KLSAgZm9yIF9HX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KLSAgICBfR19zZWRfc2NyaXB0PSRfR19zZWRfc2NyaXB0JG5sJF9HX3NlZF9zY3JpcHQKLSAgZG9uZQotICBlY2hvICIkX0dfc2VkX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKLSAgX0dfc2VkX3NjcmlwdD0KLQotICBmdW5jX2NoZWNrX3Byb2dfc2VkICgpCi0gIHsKLSAgICBfR19wYXRoX3Byb2c9JDEKLQotICAgIF9HX2NvdW50PTAKLSAgICBwcmludGYgMDEyMzQ1Njc4OSA+Y29uZnRlc3QuaW4KLSAgICB3aGlsZSA6Ci0gICAgZG8KLSAgICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCi0gICAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KLSAgICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCi0gICAgICBlY2hvICcnID4+IGNvbmZ0ZXN0Lm5sCi0gICAgICAiJF9HX3BhdGhfcHJvZyIgLWYgY29uZnRlc3Quc2VkIDxjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsIHx8IGJyZWFrCi0gICAgICBkaWZmIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAgICAgIF9HX2NvdW50PWBleHByICRfR19jb3VudCArIDFgCi0gICAgICBpZiB0ZXN0ICIkX0dfY291bnQiIC1ndCAiJF9HX3BhdGhfcHJvZ19tYXgiOyB0aGVuCi0gICAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQotICAgICAgICBmdW5jX2NoZWNrX3Byb2dfcmVzdWx0PSRfR19wYXRoX3Byb2cKLSAgICAgICAgX0dfcGF0aF9wcm9nX21heD0kX0dfY291bnQKLSAgICAgIGZpCi0gICAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgICB0ZXN0IDEwIC1sdCAiJF9HX2NvdW50IiAmJiBicmVhawotICAgIGRvbmUKLSAgICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0Ci0gIH0KLQotICBmdW5jX3BhdGhfcHJvZ3MgInNlZCBnc2VkIiBmdW5jX2NoZWNrX3Byb2dfc2VkICRQQVRIOi91c3IveHBnNC9iaW4KLSAgcm0gLWYgY29uZnRlc3Quc2VkCi0gIFNFRD0kZnVuY19wYXRoX3Byb2dzX3Jlc3VsdAotfQotCi0KLSMgVW5sZXNzIHRoZSB1c2VyIG92ZXJyaWRlcyBieSBzZXR0aW5nIEdSRVAsIHNlYXJjaCB0aGUgcGF0aCBmb3IgZWl0aGVyIEdOVQotIyBncmVwLCBvciB0aGUgZ3JlcCB0aGF0IHRydW5jYXRlcyBpdHMgb3V0cHV0IHRoZSBsZWFzdC4KLXRlc3QgLXogIiRHUkVQIiAmJiB7Ci0gIGZ1bmNfY2hlY2tfcHJvZ19ncmVwICgpCi0gIHsKLSAgICBfR19wYXRoX3Byb2c9JDEKLQotICAgIF9HX2NvdW50PTAKLSAgICBfR19wYXRoX3Byb2dfbWF4PTAKLSAgICBwcmludGYgMDEyMzQ1Njc4OSA+Y29uZnRlc3QuaW4KLSAgICB3aGlsZSA6Ci0gICAgZG8KLSAgICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCi0gICAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KLSAgICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCi0gICAgICBlY2hvICdHUkVQJyA+PiBjb25mdGVzdC5ubAotICAgICAgIiRfR19wYXRoX3Byb2ciIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDxjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsIHx8IGJyZWFrCi0gICAgICBkaWZmIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAgICAgIF9HX2NvdW50PWBleHByICRfR19jb3VudCArIDFgCi0gICAgICBpZiB0ZXN0ICIkX0dfY291bnQiIC1ndCAiJF9HX3BhdGhfcHJvZ19tYXgiOyB0aGVuCi0gICAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQotICAgICAgICBmdW5jX2NoZWNrX3Byb2dfcmVzdWx0PSRfR19wYXRoX3Byb2cKLSAgICAgICAgX0dfcGF0aF9wcm9nX21heD0kX0dfY291bnQKLSAgICAgIGZpCi0gICAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgICB0ZXN0IDEwIC1sdCAiJF9HX2NvdW50IiAmJiBicmVhawotICAgIGRvbmUKLSAgICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0Ci0gIH0KLQotICBmdW5jX3BhdGhfcHJvZ3MgImdyZXAgZ2dyZXAiIGZ1bmNfY2hlY2tfcHJvZ19ncmVwICRQQVRIOi91c3IveHBnNC9iaW4KLSAgR1JFUD0kZnVuY19wYXRoX3Byb2dzX3Jlc3VsdAotfQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFVzZXIgb3ZlcnJpZGFibGUgY29tbWFuZCBwYXRocy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBBbGwgdXBwZXJjYXNlIHZhcmlhYmxlIG5hbWVzIGFyZSB1c2VkIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUaGVzZQotIyB2YXJpYWJsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHVzZXIgYmVmb3JlIGNhbGxpbmcgYSBzY3JpcHQgdGhhdAotIyB1c2VzIHRoZW0gaWYgYSBzdWl0YWJsZSBjb21tYW5kIG9mIHRoYXQgbmFtZSBpcyBub3QgYWxyZWFkeSBhdmFpbGFibGUKLSMgaW4gdGhlIGNvbW1hbmQgc2VhcmNoIFBBVEguCi0KLTogJHtDUD0iY3AgLWYifQotOiAke0VDSE89InByaW50ZiAlc1xuIn0KLTogJHtFR1JFUD0iJEdSRVAgLUUifQotOiAke0ZHUkVQPSIkR1JFUCAtRiJ9Ci06ICR7TE5fUz0ibG4gLXMifQotOiAke01BS0U9Im1ha2UifQotOiAke01LRElSPSJta2RpciJ9Ci06ICR7TVY9Im12IC1mIn0KLTogJHtSTT0icm0gLWYifQotOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Ci0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFVzZWZ1bCBzZWQgc25pcHBldHMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi1zZWRfZGlybmFtZT0nc3wvW14vXSokfHwnCi1zZWRfYmFzZW5hbWU9J3N8Xi4qL3x8JwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCi0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotc2VkX3F1b3RlX3N1YnN0PSdzfFwoW2AiJFxcXVwpfFxcXDF8ZycKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1zZWRfZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCB0dXJucyBhIHN0cmluZyBpbnRvIGEgcmVnZXggbWF0Y2hpbmcgZm9yIHRoZQotIyBzdHJpbmcgbGl0ZXJhbGx5Lgotc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0nc3xbXS5bXiRcXCpcL118XFwmfGcnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCi0jIHRoYXQgY29udGFpbnMgZm9yd2FyZCBzbGFzaGVzLCBpbnRvIG9uZSB0aGF0IGNvbnRhaW5zCi0jIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KLXNlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKLQotIyBSZS0nXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIHNlZF9kb3VibGVfcXVvdGVfc3Vic3QgdGhhdAotIyB3ZXJlICdcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgJ1wnIHByZWNlZGVkIGEKLSMgJyQnIGluIGlucHV0IHRvIHNlZF9kb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbQotIyBleHBhbnNpb24uICBTaW5jZSBlYWNoIGlucHV0ICdcJyBpcyBub3cgdHdvICdcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIKLSMgb2YgcnVucyBvZiBmb3VyICdcJ3MgZm9sbG93ZWQgYnkgdHdvICdcJ3MgYW5kIHRoZW4gYSAnJCcuICAnXCcgdGhhdCAnJCcuCi1fR19icz0nXFwnCi1fR19iczI9J1xcXFwnCi1fR19iczQ9J1xcXFxcXFxcJwotX0dfZG9sbGFyPSdcJCcKLXNlZF9kb3VibGVfYmFja3NsYXNoPSJcCi0gIHMvJF9HX2JzNC8mXFwKLS9nCi0gIHMvXiRfR19iczIkX0dfZG9sbGFyLyRfR19icyYvCi0gIHMvXFwoW14kX0dfYnNdXFwpJF9HX2JzMiRfR19kb2xsYXIvXFwxJF9HX2JzMiRfR19icyRfR19kb2xsYXIvZwotICBzL1xuLy9nIgotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBHbG9iYWwgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBFeGNlcHQgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGVzIGV4cGxpY2l0bHkgbGlzdGVkIGJlbG93LCB0aGUgZm9sbG93aW5nCi0jIGZ1bmN0aW9ucyBpbiB0aGUgJ15mdW5jXycgbmFtZXNwYWNlLCBhbmQgdGhlICdecmVxdWlyZV8nIG5hbWVzcGFjZQotIyB2YXJpYWJsZXMgaW5pdGlhbGlzZWQgaW4gdGhlICdSZXNvdXJjZSBtYW5hZ2VtZW50JyBzZWN0aW9uLCBzb3VyY2luZwotIyB0aGlzIGZpbGUgd2lsbCBub3QgcG9sbHV0ZSB5b3VyIGdsb2JhbCBuYW1lc3BhY2Ugd2l0aCBhbnl0aGluZwotIyBlbHNlLiBUaGVyZSdzIG5vIHBvcnRhYmxlIHdheSB0byBzY29wZSB2YXJpYWJsZXMgaW4gQm91cm5lIHNoZWxsCi0jIHRob3VnaCwgc28gYWN0dWFsbHkgcnVubmluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBzb21ldGltZXMgcGxhY2UKLSMgcmVzdWx0cyBpbnRvIGEgdmFyaWFibGUgbmFtZWQgYWZ0ZXIgdGhlIGZ1bmN0aW9uLCBhbmQgb2Z0ZW4gdXNlCi0jIHRlbXBvcmFyeSB2YXJpYWJsZXMgaW4gdGhlICdeX0dfJyBuYW1lc3BhY2UuIElmIHlvdSBhcmUgY2FyZWZ1bCB0bwotIyBhdm9pZCB1c2luZyB0aG9zZSBuYW1lc3BhY2VzIGNhc3VhbGx5IGluIHlvdXIgc291cmNpbmcgc2NyaXB0LCB0aGluZ3MKLSMgc2hvdWxkIGNvbnRpbnVlIHRvIHdvcmsgYXMgeW91IGV4cGVjdC4gQW5kLCBvZiBjb3Vyc2UsIHlvdSBjYW4gZnJlZWx5Ci0jIG92ZXJ3cml0ZSBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgZGVmaW5lZCBoZXJlIGJlZm9yZQotIyBjYWxsaW5nIGFueXRoaW5nIHRvIGN1c3RvbWl6ZSB0aGVtLgotCi1FWElUX1NVQ0NFU1M9MAotRVhJVF9GQUlMVVJFPTEKLUVYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KLUVYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgotCi0jIEFsbG93IG92ZXJyaWRpbmcsIGVnIGFzc3VtaW5nIHRoYXQgeW91IGZvbGxvdyB0aGUgY29udmVudGlvbiBvZgotIyBwdXR0aW5nICckZGVidWdfY21kJyBhdCB0aGUgc3RhcnQgb2YgYWxsIHlvdXIgZnVuY3Rpb25zLCB5b3UgY2FuIGdldAotIyBiYXNoIHRvIHNob3cgZnVuY3Rpb24gY2FsbCB0cmFjZSB3aXRoOgotIwotIyAgICBkZWJ1Z19jbWQ9J2V2YWwgZWNobyAiJHtGVU5DTkFNRVswXX0gJCoiID4mMicgYmFzaCB5b3VyLXNjcmlwdC1uYW1lCi1kZWJ1Z19jbWQ9JHtkZWJ1Z19jbWQtIjoifQotZXhpdF9jbWQ9OgotCi0jIEJ5IGNvbnZlbnRpb24sIGZpbmlzaCB5b3VyIHNjcmlwdCB3aXRoOgotIwotIyAgICBleGl0ICRleGl0X3N0YXR1cwotIwotIyBzbyB0aGF0IHlvdSBjYW4gc2V0IGV4aXRfc3RhdHVzIHRvIG5vbi16ZXJvIGlmIHlvdSB3YW50IHRvIGluZGljYXRlCi0jIHNvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyBleGVjdXRpb24gd2l0aG91dCBhY3R1YWxseSBiYWlsaW5nIG91dCBhdAotIyB0aGUgcG9pbnQgb2YgZmFpbHVyZS4KLWV4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKLQotIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCi0jIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgotIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKLSMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQotIyBmdW5jdGlvbi4KLXByb2dwYXRoPSQwCi0KLSMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtLgotcHJvZ25hbWU9YCRFQ0hPICIkcHJvZ3BhdGgiIHwkU0VEICIkc2VkX2Jhc2VuYW1lImAKLQotIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwcm9ncGF0aCBmb3IgcmVleGVjdXRpb246Ci1jYXNlICRwcm9ncGF0aCBpbgotICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OwotICAqW1xcL10qKQotICAgICBwcm9nZGlyPWAkRUNITyAiJHByb2dwYXRoIiB8JFNFRCAiJHNlZF9kaXJuYW1lImAKLSAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCi0gICAgIHByb2dwYXRoPSRwcm9nZGlyLyRwcm9nbmFtZQotICAgICA7OwotICAqKQotICAgICBfR19JRlM9JElGUwotICAgICBJRlM9JHtQQVRIX1NFUEFSQVRPUi06fQotICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KLSAgICAgICBJRlM9JF9HX0lGUwotICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKLSAgICAgZG9uZQotICAgICBJRlM9JF9HX0lGUwotICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAotICAgICBwcm9ncGF0aD0kcHJvZ2Rpci8kcHJvZ25hbWUKLSAgICAgOzsKLWVzYWMKLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgU3RhbmRhcmQgb3B0aW9ucy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFmZmVjdCB0aGUgb3BlcmF0aW9uIG9mIHRoZSBmdW5jdGlvbnMgZGVmaW5lZAotIyBiZWxvdywgYW5kIHNob3VsZCBiZSBzZXQgYXBwcm9wcmlhdGVseSBkZXBlbmRpbmcgb24gcnVuLXRpbWUgcGFyYS0KLSMgbWV0ZXJzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgotCi1vcHRfZHJ5X3J1bj1mYWxzZQotb3B0X3F1aWV0PWZhbHNlCi1vcHRfdmVyYm9zZT1mYWxzZQotCi0jIENhdGVnb3JpZXMgJ2FsbCcgYW5kICdub25lJyBhcmUgYWx3YXlzIGF2YWlsYWJsZS4gIEFwcGVuZCBhbnkgb3RoZXJzCi0jIHlvdSB3aWxsIHBhc3MgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGZ1bmNfd2FybmluZyBmcm9tIHlvdXIgb3duCi0jIGNvZGUuCi13YXJuaW5nX2NhdGVnb3JpZXM9Ci0KLSMgQnkgZGVmYXVsdCwgZGlzcGxheSB3YXJuaW5ncyBhY2NvcmRpbmcgdG8gJ29wdF93YXJuaW5nX3R5cGVzJy4gIFNldAotIyAnd2FybmluZ19mdW5jJyAgdG8gJzonIHRvIGVsaWRlIGFsbCB3YXJuaW5ncywgb3IgZnVuY19mYXRhbF9lcnJvciB0bwotIyB0cmVhdCB0aGUgbmV4dCBkaXNwbGF5ZWQgd2FybmluZyBhcyBhIGZhdGFsIGVycm9yLgotd2FybmluZ19mdW5jPWZ1bmNfd2Fybl9hbmRfY29udGludWUKLQotIyBTZXQgdG8gJ2FsbCcgdG8gZGlzcGxheSBhbGwgd2FybmluZ3MsICdub25lJyB0byBzdXBwcmVzcyBhbGwKLSMgd2FybmluZ3MsIG9yIGEgc3BhY2UgZGVsaW1pdGVkIGxpc3Qgb2Ygc29tZSBzdWJzZXQgb2YKLSMgJ3dhcm5pbmdfY2F0ZWdvcmllcycgdG8gZGlzcGxheSBvbmx5IHRoZSBsaXN0ZWQgd2FybmluZ3MuCi1vcHRfd2FybmluZ190eXBlcz1hbGwKLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVzb3VyY2UgbWFuYWdlbWVudC4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBmdW5jdGlvbnMgdGhhdCBlYWNoIGVuc3VyZSBhCi0jIHBhcnRpY3VsYXIgcmVzb3VyY2UgKGEgZmlsZSwgb3IgYSBub24tZW1wdHkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IKLSMgZXhhbXBsZSkgaXMgYXZhaWxhYmxlLCBhbmQgaWYgYXBwcm9wcmlhdGUgdG8gZXh0cmFjdCBkZWZhdWx0IHZhbHVlcwotIyBmcm9tIHBlcnRpbmVudCBwYWNrYWdlIGZpbGVzLiBDYWxsIHRoZW0gdXNpbmcgdGhlaXIgYXNzb2NpYXRlZAotIyAncmVxdWlyZV8qJyB2YXJpYWJsZSB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBleGVjdXRlZCwgYXQgbW9zdCwgb25jZS4KLSMKLSMgSXQncyBlbnRpcmVseSBkZWxpYmVyYXRlIHRoYXQgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgY2FuIHNldAotIyB2YXJpYWJsZXMgdGhhdCBkb24ndCBvYmV5IHRoZSBuYW1lc3BhY2UgbGltaXRhdGlvbnMgb2JleWVkIGJ5IHRoZSByZXN0Ci0jIG9mIHRoaXMgZmlsZSwgaW4gb3JkZXIgdGhhdCB0aGF0IHRoZXkgYmUgYXMgdXNlZnVsIGFzIHBvc3NpYmxlIHRvCi0jIGNhbGxlcnMuCi0KLQotIyByZXF1aXJlX3Rlcm1fY29sb3JzCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQWxsb3cgZGlzcGxheSBvZiBib2xkIHRleHQgb24gdGVybWluYWxzIHRoYXQgc3VwcG9ydCBpdC4KLXJlcXVpcmVfdGVybV9jb2xvcnM9ZnVuY19yZXF1aXJlX3Rlcm1fY29sb3JzCi1mdW5jX3JlcXVpcmVfdGVybV9jb2xvcnMgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICB0ZXN0IC10IDEgJiYgewotICAgICAgIyBDT0xPUlRFUk0gYW5kIFVTRV9BTlNJX0NPTE9SUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGFrZQotICAgICAgIyBwcmVjZWRlbmNlLCBiZWNhdXNlIG1vc3QgdGVybWluZm8gZGF0YWJhc2VzIG5lZ2xlY3QgdG8gZGVzY3JpYmUKLSAgICAgICMgd2hldGhlciBjb2xvciBzZXF1ZW5jZXMgYXJlIHN1cHBvcnRlZC4KLSAgICAgIHRlc3QgLW4gIiR7Q09MT1JURVJNK3NldH0iICYmIDogJHtVU0VfQU5TSV9DT0xPUlM9IjEifQotCi0gICAgICBpZiB0ZXN0IDEgPSAiJFVTRV9BTlNJX0NPTE9SUyI7IHRoZW4KLSAgICAgICAgIyBTdGFuZGFyZCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMKLSAgICAgICAgdGNfcmVzZXQ9JxtbMG0nCi0gICAgICAgIHRjX2JvbGQ9JxtbMW0nOyAgIHRjX3N0YW5kb3V0PScbWzdtJwotICAgICAgICB0Y19yZWQ9JxtbMzFtJzsgICB0Y19ncmVlbj0nG1szMm0nCi0gICAgICAgIHRjX2JsdWU9JxtbMzRtJzsgIHRjX2N5YW49JxtbMzZtJwotICAgICAgZWxzZQotICAgICAgICAjIE90aGVyd2lzZSB0cnVzdCB0aGUgdGVybWluZm8gZGF0YWJhc2UgYWZ0ZXIgYWxsLgotICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZ3IwIDI+L2Rldi9udWxsYCIgJiYgewotICAgICAgICAgIHRjX3Jlc2V0PWB0cHV0IHNncjBgCi0gICAgICAgICAgdGVzdCAtbiAiYHRwdXQgYm9sZCAyPi9kZXYvbnVsbGAiICYmIHRjX2JvbGQ9YHRwdXQgYm9sZGAKLSAgICAgICAgICB0Y19zdGFuZG91dD0kdGNfYm9sZAotICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNtc28gMj4vZGV2L251bGxgIiAmJiB0Y19zdGFuZG91dD1gdHB1dCBzbXNvYAotICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDEgMj4vZGV2L251bGxgIiAmJiB0Y19yZWQ9YHRwdXQgc2V0YWYgMWAKLSAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiAyIDI+L2Rldi9udWxsYCIgJiYgdGNfZ3JlZW49YHRwdXQgc2V0YWYgMmAKLSAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiA0IDI+L2Rldi9udWxsYCIgJiYgdGNfYmx1ZT1gdHB1dCBzZXRhZiA0YAotICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDUgMj4vZGV2L251bGxgIiAmJiB0Y19jeWFuPWB0cHV0IHNldGFmIDVgCi0gICAgICAgIH0KLSAgICAgIGZpCi0gICAgfQotCi0gICAgcmVxdWlyZV90ZXJtX2NvbG9ycz06Ci19Ci0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEZ1bmN0aW9uIGxpYnJhcnkuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIFRoaXMgc2VjdGlvbiBjb250YWlucyBhIHZhcmlldHkgb2YgdXNlZnVsIGZ1bmN0aW9ucyB0byBjYWxsIGluIHlvdXIKLSMgc2NyaXB0cy4gVGFrZSBub3RlIG9mIHRoZSBwb3J0YWJsZSB3cmFwcGVycyBmb3IgZmVhdHVyZXMgcHJvdmlkZWQgYnkKLSMgc29tZSBtb2Rlcm4gc2hlbGxzLCB3aGljaCB3aWxsIGZhbGwgYmFjayB0byBzbG93ZXIgZXF1aXZhbGVudHMgb24KLSMgbGVzcyBmZWF0dXJlZnVsIHNoZWxscy4KLQotCi0jIGZ1bmNfYXBwZW5kIFZBUiBWQUxVRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQXBwZW5kIFZBTFVFIG9udG8gdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUi4KLQotICAjIFdlIHNob3VsZCB0cnkgdG8gbWluaW1pc2UgZm9ya3MsIGVzcGVjaWFsbHkgb24gV2luZG93cyB3aGVyZSB0aGV5IGFyZQotICAjIHVucmVhc29uYWJseSBzbG93LCBzbyBza2lwIHRoZSBmZWF0dXJlIHByb2JlcyB3aGVuIGJhc2ggb3IgenNoIGFyZQotICAjIGJlaW5nIHVzZWQ6Ci0gIGlmIHRlc3Qgc2V0ID0gIiR7QkFTSF9WRVJTSU9OK3NldH0ke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCi0gICAgOiAke19HX0hBVkVfQVJJVEhfT1A9InllcyJ9Ci0gICAgOiAke19HX0hBVkVfWFNJX09QUz0ieWVzIn0KLSAgICAjIFRoZSArPSBvcGVyYXRvciB3YXMgaW50cm9kdWNlZCBpbiBiYXNoIDMuMQotICAgIGNhc2UgJEJBU0hfVkVSU0lPTiBpbgotICAgICAgWzEyXS4qIHwgMy4wIHwgMy4wKikgOzsKLSAgICAgICopCi0gICAgICAgIDogJHtfR19IQVZFX1BMVVNFUV9PUD0ieWVzIn0KLSAgICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLSAgIyBfR19IQVZFX1BMVVNFUV9PUAotICAjIENhbiBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUgc2hlbGwgaXMgcHJvYmVkLCAieWVzIiBpZiArPSBpcwotICAjIHVzZWFibGUgb3IgYW55dGhpbmcgZWxzZSBpZiBpdCBkb2VzIG5vdCB3b3JrLgotICB0ZXN0IC16ICIkX0dfSEFWRV9QTFVTRVFfT1AiIFwKLSAgICAmJiAoZXZhbCAneD1hOyB4Kz0iIGIiOyB0ZXN0ICJhIGIiID0gIiR4IicpIDI+L2Rldi9udWxsIFwKLSAgICAmJiBfR19IQVZFX1BMVVNFUV9PUD15ZXMKLQotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfUExVU0VRX09QIgotdGhlbgotICAjIFRoaXMgaXMgYW4gWFNJIGNvbXBhdGlibGUgc2hlbGwsIGFsbG93aW5nIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uLi4uCi0gIGV2YWwgJ2Z1bmNfYXBwZW5kICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBldmFsICIkMSs9XCQyIgotICB9JwotZWxzZQotICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgZXhwciwgd2hpY2ggaXMgb2Z0ZW4gYSBzaGVsbCBidWlsdGluLgotICBmdW5jX2FwcGVuZCAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZXZhbCAiJDE9XCQkMVwkMiIKLSAgfQotZmkKLQotCi0jIGZ1bmNfYXBwZW5kX3F1b3RlZCBWQVIgVkFMVUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBRdW90ZSBWQUxVRSBhbmQgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLCBzZXBhcmF0ZWQKLSMgYnkgYSBzcGFjZS4KLWlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1BMVVNFUV9PUCI7IHRoZW4KLSAgZXZhbCAnZnVuY19hcHBlbmRfcXVvdGVkICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkMiIKLSAgICBldmFsICIkMSs9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSAgfScKLWVsc2UKLSAgZnVuY19hcHBlbmRfcXVvdGVkICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkMiIKLSAgICBldmFsICIkMT1cJCQxXFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSAgfQotZmkKLQotCi0jIGZ1bmNfYXBwZW5kX3VuaXEgVkFSIFZBTFVFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFwcGVuZCB1bmlxdWUgVkFMVUUgb250byB0aGUgZXhpc3RpbmcgY29udGVudHMgb2YgVkFSLCBhc3N1bWluZwotIyBlbnRyaWVzIGFyZSBkZWxpbWl0ZWQgYnkgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBWQUxVRS4gIEZvciBleGFtcGxlOgotIwotIyAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0aW9ucyAiIC0tYW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50IgotIwotIyB3aWxsIG9ubHkgYXBwZW5kIHRvICRvcHRpb25zIGlmICIgLS1hbm90aGVyLW9wdGlvbiBvcHRpb24tYXJndW1lbnQgIgotIyBpcyBub3QgYWxyZWFkeSBwcmVzZW50IHNvbWV3aGVyZSBpbiAkb3B0aW9ucyBhbHJlYWR5IChub3RlIHNwYWNlcyBhdAotIyBlYWNoIGVuZCBpbXBsaWVkIGJ5IGxlYWRpbmcgc3BhY2UgaW4gc2Vjb25kIGFyZ3VtZW50KS4KLWZ1bmNfYXBwZW5kX3VuaXEgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBldmFsIF9HX2N1cnJlbnRfdmFsdWU9J2AkRUNITyAkJyQxJ2AnCi0gICAgX0dfZGVsaW09YGV4cHIgIiQyIiA6ICdcKC5cKSdgCi0KLSAgICBjYXNlICRfR19kZWxpbSRfR19jdXJyZW50X3ZhbHVlJF9HX2RlbGltIGluCi0gICAgICAqIiQyJF9HX2RlbGltIiopIDs7Ci0gICAgICAqKSBmdW5jX2FwcGVuZCAiJEAiIDs7Ci0gICAgZXNhYwotfQotCi0KLSMgZnVuY19hcml0aCBURVJNLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgZnVuY19hcml0aF9yZXN1bHQgdG8gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIFRFUk1zLgotICB0ZXN0IC16ICIkX0dfSEFWRV9BUklUSF9PUCIgXAotICAgICYmIChldmFsICd0ZXN0IDIgPSAkKCggMSArIDEgKSknKSAyPi9kZXYvbnVsbCBcCi0gICAgJiYgX0dfSEFWRV9BUklUSF9PUD15ZXMKLQotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfQVJJVEhfT1AiOyB0aGVuCi0gIGV2YWwgJ2Z1bmNfYXJpdGggKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQotICB9JwotZWxzZQotICBmdW5jX2FyaXRoICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAotICB9Ci1maQotCi0KLSMgZnVuY19iYXNlbmFtZSBGSUxFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgZnVuY19iYXNlbmFtZV9yZXN1bHQgdG8gRklMRSB3aXRoIGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZwotIyB0aGUgbGFzdCAvIHN0cmlwcGVkLgotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KLSAgIyBJZiB0aGlzIHNoZWxsIHN1cHBvcnRzIHN1ZmZpeCBwYXR0ZXJuIHJlbW92YWwsIHRoZW4gdXNlIGl0IHRvIGF2b2lkCi0gICMgZm9ya2luZy4gSGlkZSB0aGUgZGVmaW5pdGlvbnMgc2luZ2xlIHF1b3RlcyBpbiBjYXNlIHRoZSBzaGVsbCBjaG9rZXMKLSAgIyBvbiB1bnN1cHBvcnRlZCBzeW50YXguLi4KLSAgX2I9J2Z1bmNfYmFzZW5hbWVfcmVzdWx0PSR7MSMjKi99JwotICBfZD0nY2FzZSAkMSBpbgotICAgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JHsxJS8qfSQyIDs7Ci0gICAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMyAgICAgICAgOzsKLSAgICAgIGVzYWMnCi0KLWVsc2UKLSAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIHNlZC4KLSAgX2I9J2Z1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJDEiIHwkU0VEICIkc2VkX2Jhc2VuYW1lImAnCi0gIF9kPSdmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJDEiICB8JFNFRCAiJHNlZF9kaXJuYW1lImAKLSAgICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCQxIjsgdGhlbgotICAgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSQzCi0gICAgICBlbHNlCi0gICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfZGlybmFtZV9yZXN1bHQgIiQyIgotICAgICAgZmknCi1maQotCi1ldmFsICdmdW5jX2Jhc2VuYW1lICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJyIkX2IiJwotfScKLQotCi0jIGZ1bmNfZGlybmFtZSBGSUxFIEFQUEVORCBOT05ESVJfUkVQTEFDRU1FTlQKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAotIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi1ldmFsICdmdW5jX2Rpcm5hbWUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAnIiRfZCInCi19JwotCi0KLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBGSUxFIEFQUEVORCBOT05ESVJfUkVQTEFDRU1FTlQKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KLSMgY2FsbDoKLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCi0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotIyBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvIHRoZSBmdW5jdGlvbnMgYWJvdmUgYnV0IGluc3RlYWQKLSMgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCi1ldmFsICdmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJyIkX2IiJwotICAgICciJF9kIicKLX0nCi0KLQotIyBmdW5jX2VjaG8gQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZS4KLWZ1bmNfZWNobyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIF9HX21lc3NhZ2U9JCoKLQotICAgIGZ1bmNfZWNob19JRlM9JElGUwotICAgIElGUz0kbmwKLSAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KLSAgICAgIElGUz0kZnVuY19lY2hvX0lGUwotICAgICAgJEVDSE8gIiRwcm9nbmFtZTogJF9HX2xpbmUiCi0gICAgZG9uZQotICAgIElGUz0kZnVuY19lY2hvX0lGUwotfQotCi0KLSMgZnVuY19lY2hvX2FsbCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KLWZ1bmNfZWNob19hbGwgKCkKLXsKLSAgICAkRUNITyAiJCoiCi19Ci0KLQotIyBmdW5jX2VjaG9faW5maXhfMSBJTkZJWCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3JhbSBuYW1lLCBmb2xsb3dlZCBieSBJTkZJWCBvbiB0aGUgZmlyc3QgbGluZSwgd2l0aCBhbnkKLSMgYWRkaXRpb25hbCBsaW5lcyBub3Qgc2hvd2luZyBJTkZJWC4KLWZ1bmNfZWNob19pbmZpeF8xICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKLQotICAgIF9HX2luZml4PSQxOyBzaGlmdAotICAgIF9HX2luZGVudD0kX0dfaW5maXgKLSAgICBfR19wcmVmaXg9IiRwcm9nbmFtZTogJF9HX2luZml4OiAiCi0gICAgX0dfbWVzc2FnZT0kKgotCi0gICAgIyBTdHJpcCBjb2xvciBlc2NhcGUgc2VxdWVuY2VzIGJlZm9yZSBjb3VudGluZyBwcmludGFibGUgbGVuZ3RoCi0gICAgZm9yIF9HX3RjIGluICIkdGNfcmVzZXQiICIkdGNfYm9sZCIgIiR0Y19zdGFuZG91dCIgIiR0Y19yZWQiICIkdGNfZ3JlZW4iICIkdGNfYmx1ZSIgIiR0Y19jeWFuIgotICAgIGRvCi0gICAgICB0ZXN0IC1uICIkX0dfdGMiICYmIHsKLSAgICAgICAgX0dfZXNjX3RjPWAkRUNITyAiJF9HX3RjIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKLSAgICAgICAgX0dfaW5kZW50PWAkRUNITyAiJF9HX2luZGVudCIgfCAkU0VEICJzfCRfR19lc2NfdGN8fGciYAotICAgICAgfQotICAgIGRvbmUKLSAgICBfR19pbmRlbnQ9IiRwcm9nbmFtZTogImBlY2hvICIkX0dfaW5kZW50IiB8ICRTRUQgJ3N8LnwgfGcnYCIgICIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKLQotICAgIGZ1bmNfZWNob19pbmZpeF8xX0lGUz0kSUZTCi0gICAgSUZTPSRubAotICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBkbwotICAgICAgSUZTPSRmdW5jX2VjaG9faW5maXhfMV9JRlMKLSAgICAgICRFQ0hPICIkX0dfcHJlZml4JHRjX2JvbGQkX0dfbGluZSR0Y19yZXNldCIgPiYyCi0gICAgICBfR19wcmVmaXg9JF9HX2luZGVudAotICAgIGRvbmUKLSAgICBJRlM9JGZ1bmNfZWNob19pbmZpeF8xX0lGUwotfQotCi0KLSMgZnVuY19lcnJvciBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KLWZ1bmNfZXJyb3IgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycwotCi0gICAgZnVuY19lY2hvX2luZml4XzEgIiAgJHRjX3N0YW5kb3V0JHt0Y19yZWR9ZXJyb3IkdGNfcmVzZXQiICIkKiIgPiYyCi19Ci0KLQotIyBmdW5jX2ZhdGFsX2Vycm9yIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZXhpdC4KLWZ1bmNfZmF0YWxfZXJyb3IgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2Vycm9yICIkKiIKLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLX0KLQotCi0jIGZ1bmNfZ3JlcCBFWFBSRVNTSU9OIEZJTEVOQU1FCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgRVhQUkVTU0lPTiBtYXRjaGVzIGFueSBsaW5lIG9mIEZJTEVOQU1FLCB3aXRob3V0IG91dHB1dC4KLWZ1bmNfZ3JlcCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICRHUkVQICIkMSIgIiQyIiA+L2Rldi9udWxsIDI+JjEKLX0KLQotCi0jIGZ1bmNfbGVuIFNUUklORwotIyAtLS0tLS0tLS0tLS0tLS0KLSMgU2V0IGZ1bmNfbGVuX3Jlc3VsdCB0byB0aGUgbGVuZ3RoIG9mIFNUUklORy4gU1RSSU5HIG1heSBub3QKLSMgc3RhcnQgd2l0aCBhIGh5cGhlbi4KLSAgdGVzdCAteiAiJF9HX0hBVkVfWFNJX09QUyIgXAotICAgICYmIChldmFsICd4PWEvYi9jOwotICAgICAgdGVzdCA1YWEvYmIvY2MgPSAiJHsjeH0ke3glJS8qfSR7eCUvKn0ke3gjKi99JHt4IyMqL30iJykgMj4vZGV2L251bGwgXAotICAgICYmIF9HX0hBVkVfWFNJX09QUz15ZXMKLQotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KLSAgZXZhbCAnZnVuY19sZW4gKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQotICB9JwotZWxzZQotICBmdW5jX2xlbiAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAotICB9Ci1maQotCi0KLSMgZnVuY19ta2Rpcl9wIERJUkVDVE9SWS1QQVRICi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBNYWtlIHN1cmUgdGhlIGVudGlyZSBwYXRoIHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJsZS4KLWZ1bmNfbWtkaXJfcCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIF9HX2RpcmVjdG9yeV9wYXRoPSQxCi0gICAgX0dfZGlyX2xpc3Q9Ci0KLSAgICBpZiB0ZXN0IC1uICIkX0dfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgOiAhPSAiJG9wdF9kcnlfcnVuIjsgdGhlbgotCi0gICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggJy0nCi0gICAgICBjYXNlICRfR19kaXJlY3RvcnlfcGF0aCBpbgotICAgICAgICAtKikgX0dfZGlyZWN0b3J5X3BhdGg9Li8kX0dfZGlyZWN0b3J5X3BhdGggOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBXaGlsZSBzb21lIHBvcnRpb24gb2YgRElSIGRvZXMgbm90IHlldCBleGlzdC4uLgotICAgICAgd2hpbGUgdGVzdCAhIC1kICIkX0dfZGlyZWN0b3J5X3BhdGgiOyBkbwotICAgICAgICAjIC4uLm1ha2UgYSBsaXN0IGluIHRvcG1vc3QgZmlyc3Qgb3JkZXIuICBVc2UgYSBjb2xvbiBkZWxpbWl0ZWQKLQkjIGxpc3QgaW5jYXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRoIGNvbnRhaW5zIHdoaXRlc3BhY2UuCi0gICAgICAgIF9HX2Rpcl9saXN0PSRfR19kaXJlY3RvcnlfcGF0aDokX0dfZGlyX2xpc3QKLQotICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCi0gICAgICAgIGNhc2UgJF9HX2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYwotCi0gICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAotICAgICAgICBfR19kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIiRfR19kaXJlY3RvcnlfcGF0aCIgfCAkU0VEIC1lICIkc2VkX2Rpcm5hbWUiYAotICAgICAgZG9uZQotICAgICAgX0dfZGlyX2xpc3Q9YCRFQ0hPICIkX0dfZGlyX2xpc3QiIHwgJFNFRCAnc3w6KiR8fCdgCi0KLSAgICAgIGZ1bmNfbWtkaXJfcF9JRlM9JElGUzsgSUZTPToKLSAgICAgIGZvciBfR19kaXIgaW4gJF9HX2Rpcl9saXN0OyBkbwotCUlGUz0kZnVuY19ta2Rpcl9wX0lGUwotICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSAnRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcwotICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAotICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQotICAgICAgICAkTUtESVIgIiRfR19kaXIiIDI+L2Rldi9udWxsIHx8IDoKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kZnVuY19ta2Rpcl9wX0lGUwotCi0gICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCi0gICAgICB0ZXN0IC1kICIkX0dfZGlyZWN0b3J5X3BhdGgiIHx8IFwKLSAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSAnJDEnIgotICAgIGZpCi19Ci0KLQotIyBmdW5jX21rdGVtcGRpciBbQkFTRU5BTUVdCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKLSMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKLSMgZ2l2ZW4sIEJBU0VOQU1FIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCi1mdW5jX21rdGVtcGRpciAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIF9HX3RlbXBsYXRlPSR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9Ci0KLSAgICBpZiB0ZXN0IDogPSAiJG9wdF9kcnlfcnVuIjsgdGhlbgotICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKLSAgICAgIF9HX3RtcGRpcj0kX0dfdGVtcGxhdGUtJCQKLSAgICBlbHNlCi0KLSAgICAgICMgSWYgbWt0ZW1wIHdvcmtzLCB1c2UgdGhhdCBmaXJzdCBhbmQgZm9yZW1vc3QKLSAgICAgIF9HX3RtcGRpcj1gbWt0ZW1wIC1kICIkX0dfdGVtcGxhdGUtWFhYWFhYWFgiIDI+L2Rldi9udWxsYAotCi0gICAgICBpZiB0ZXN0ICEgLWQgIiRfR190bXBkaXIiOyB0aGVuCi0gICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQotICAgICAgICBfR190bXBkaXI9JF9HX3RlbXBsYXRlLSR7UkFORE9NLTB9JCQKLQotICAgICAgICBmdW5jX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCi0gICAgICAgIHVtYXNrIDAwNzcKLSAgICAgICAgJE1LRElSICIkX0dfdG1wZGlyIgotICAgICAgICB1bWFzayAkZnVuY19ta3RlbXBkaXJfdW1hc2sKLSAgICAgIGZpCi0KLSAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQotICAgICAgdGVzdCAtZCAiJF9HX3RtcGRpciIgfHwgXAotICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgJyRfR190bXBkaXInIgotICAgIGZpCi0KLSAgICAkRUNITyAiJF9HX3RtcGRpciIKLX0KLQotCi0jIGZ1bmNfbm9ybWFsX2Fic3BhdGggUEFUSAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVtb3ZlIGRvdWJsZWQtdXAgYW5kIHRyYWlsaW5nIHNsYXNoZXMsICIuIiBwYXRoIGNvbXBvbmVudHMsCi0jIGFuZCBjYW5jZWwgb3V0IGFueSAiLi4iIHBhdGggY29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2luZwotIyBpdCBhbiBhYnNvbHV0ZSBwYXRoLgotZnVuY19ub3JtYWxfYWJzcGF0aCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KLSAgICBfR19wYXRoY2FyPSdzfF4vXChbXi9dKlwpLiokfFwxfCcKLSAgICBfR19wYXRoY2RyPSdzfF4vW14vXSp8fCcKLSAgICBfR19yZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCi0JCXN8L1wuL3wvfGcKLQkJdCBkb3RzbAotCQlzfC9cLiR8L3wnCi0gICAgX0dfY29sbGFwc2VzbGFzaGVzPSdzfC9cezEsXH18L3xnJwotICAgIF9HX2ZpbmFsc2xhc2g9J3N8LyokfC98JwotCi0gICAgIyBTdGFydCBmcm9tIHJvb3QgZGlyIGFuZCByZWFzc2VtYmxlIHRoZSBwYXRoLgotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PQotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0KLSAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIGluCi0gICAgICAiIikKLSAgICAgICAgIyBFbXB0eSBwYXRoLCB0aGF0IGp1c3QgbWVhbnMgJGN3ZC4KLSAgICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICJgcHdkYCIKLSAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgICAgICByZXR1cm4KLSAgICAgICAgOzsKLSAgICAgICMgVGhlIG5leHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBzcG90IGEgcnVuIG9mIHByZWNpc2VseQotICAgICAgIyB0d28gbGVhZGluZyBzbGFzaGVzIHdpdGhvdXQgdXNpbmcgbmVnYXRlZCBjaGFyYWN0ZXIgY2xhc3NlczsKLSAgICAgICMgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgY2FzZSdzIGZpcnN0LW1hdGNoIGJlaGF2aW91ci4KLSAgICAgIC8vLyopCi0gICAgICAgICMgVW51c3VhbCBmb3JtIG9mIGFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCi0gICAgICAgIDs7Ci0gICAgICAvLyopCi0gICAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJwotICAgICAgICAjIGFuZCBmb3IgZXhhbXBsZSBDeWd3aW4gdXNlcyBpdCB0byBhY2Nlc3MgcmVtb3RlIGZpbGUgc2hhcmVzCi0gICAgICAgICMgb3ZlciBDSUZTL1NNQiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRvdWJsZSBzbGFzaCBpZiBmb3VuZC4KLSAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LwotICAgICAgICA7OwotICAgICAgLyopCi0gICAgICAgICMgQWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgICMgUmVsYXRpdmUgcGF0aCwgcHJlcGVuZCAkY3dkLgotICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWBwd2RgLyRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoCi0gICAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAotICAgICMgdGhlIHBhdGggdG8gZW5kIHdpdGggYSBzbGFzaCBmb3IgZWFzZSBvZiBwYXJzaW5nLCBzbyBtYWtlIHN1cmUKLSAgICAjIHRoZXJlIGlzIG9uZSAoYW5kIG9ubHkgb25lKSBoZXJlLgotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKLSAgICAgICAgICAtZSAiJF9HX3JlbW92ZWRvdHBhcnRzIiAtZSAiJF9HX2NvbGxhcHNlc2xhc2hlcyIgLWUgIiRfR19maW5hbHNsYXNoImAKLSAgICB3aGlsZSA6OyBkbwotICAgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KLSAgICAgIGlmIHRlc3QgLyA9ICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCI7IHRoZW4KLSAgICAgICAgIyBJZiB3ZSBhc2NlbmRlZCB0byB0aGUgcm9vdCB1c2luZyAiLi4iIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5IG5vdy4KLSAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IjsgdGhlbgotICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PS8KLSAgICAgICAgZmkKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKLSAgICAgICAgICAtZSAiJF9HX3BhdGhjYXIiYAotICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAotICAgICAgICAgIC1lICIkX0dfcGF0aGNkciJgCi0gICAgICAjIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0Ci0gICAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQgaW4KLSAgICAgICAgIiIpCi0gICAgICAgICAgIyBUcmFpbGluZyBlbXB0eSBwYXRoIGNvbXBvbmVudCwgaWdub3JlIGl0LgotICAgICAgICAgIDs7Ci0gICAgICAgIC4uKQotICAgICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgotICAgICAgICAgIGZ1bmNfZGlybmFtZSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgotICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0gICAgICAgICAgOzsKLSAgICAgICAgKikKLSAgICAgICAgICAjIEFjdHVhbCBwYXRoIGNvbXBvbmVudCwgYXBwZW5kIGl0LgotICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0ICIvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGRvbmUKLSAgICAjIFJlc3RvcmUgbGVhZGluZyBkb3VibGUtc2xhc2ggaWYgb25lIHdhcyBmb3VuZCBvbiBlbnRyeS4KLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2UkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKLX0KLQotCi0jIGZ1bmNfbm90cXVpZXQgQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2Ugb25seSB3aGVuIG5vdCBpbiBxdWlldCBtb2RlLgotZnVuY19ub3RxdWlldCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICRvcHRfcXVpZXQgfHwgZnVuY19lY2hvICR7MSsiJEAifQotCi0gICAgIyBBIGJ1ZyBpbiBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uCi0gICAgIyBmYWlscyB3aGVuIHNldCAtZSBpcyBpbiBmb3JjZSwgc28gd2UgbmVlZCBhbm90aGVyIGNvbW1hbmQgdG8KLSAgICAjIHdvcmsgYXJvdW5kIHRoYXQ6Ci0gICAgOgotfQotCi0KLSMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0IGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQgdG8gdGhlIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLgotZnVuY19yZWxhdGl2ZV9wYXRoICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0KLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMSIKLSAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMiIKLSAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKLQotICAgICMgQXNjZW5kIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gbGliZGlyCi0gICAgd2hpbGUgOjsgZG8KLSAgICAgICMgY2hlY2sgaWYgd2UgaGF2ZSBmb3VuZCBhIHByZWZpeCBvZiBiaW5kaXIKLSAgICAgIGNhc2UgJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIGluCi0gICAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKLSAgICAgICAgICAjIGZvdW5kIGFuIGV4YWN0IG1hdGNoCi0gICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9Ci0gICAgICAgICAgYnJlYWsKLSAgICAgICAgICA7OwotICAgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIqKQotICAgICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKLSAgICAgICAgICBmdW5jX3N0cmlwbmFtZSAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIgotICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KLSAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9LgotICAgICAgICAgIGZpCi0gICAgICAgICAgYnJlYWsKLSAgICAgICAgICA7OwotICAgICAgICAqKQotICAgICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKLSAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotICAgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICMgSGF2ZSB0byBkZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IQotICAgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAotICAgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyCi0gICAgICAgICAgICBicmVhawotICAgICAgICAgIGZpCi0gICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotCi0gICAgIyBOb3cgY2FsY3VsYXRlIHBhdGg7IHRha2UgY2FyZSB0byBhdm9pZCBkb3VibGluZy11cCBzbGFzaGVzLgotICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCi0gICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgZnVuY19zdHJpcG5hbWUgJy8nICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkIgotICAgIGlmIHRlc3QgLW4gIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCi0gICAgICBmdW5jX2FwcGVuZCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0ICIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLSAgICBmaQotCi0gICAgIyBOb3JtYWxpc2F0aW9uLiBJZiBiaW5kaXIgaXMgbGliZGlyLCByZXR1cm4gJy4nIGVsc2UgcmVsYXRpdmUgcGF0aC4KLSAgICBpZiB0ZXN0IC1uICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KLSAgICAgIGZ1bmNfc3RyaXBuYW1lICcuLycgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgotICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgZmkKLQotICAgIHRlc3QgLW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IiB8fCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KLQotICAgIDoKLX0KLQotCi0jIGZ1bmNfcXVvdGVfZm9yX2V2YWwgQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHcyB0byBiZSBldmFsZWQgbGF0ZXIuCi0jIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFsdWVzOgotIyAgIGkpIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0jICAgICAgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsCi0jICBpaSkgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKLSMgICAgICBoYXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUKLSMgICAgICBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCi1mdW5jX3F1b3RlX2Zvcl9ldmFsICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9Ci0gICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9Ci0gICAgd2hpbGUgdGVzdCAwIC1sdCAkIzsgZG8KLSAgICAgIGNhc2UgJDEgaW4KLSAgICAgICAgKltcXFxgXCJcJF0qKQotCSAgX0dfdW5xdW90ZWRfYXJnPWBwcmludGYgJyVzXG4nICIkMSIgfCRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OwotICAgICAgICAqKQotICAgICAgICAgIF9HX3VucXVvdGVkX2FyZz0kMSA7OwotICAgICAgZXNhYwotICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IjsgdGhlbgotCWZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0ICIgJF9HX3VucXVvdGVkX2FyZyIKLSAgICAgIGVsc2UKLSAgICAgICAgZnVuY19hcHBlbmQgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgIiRfR191bnF1b3RlZF9hcmciCi0gICAgICBmaQotCi0gICAgICBjYXNlICRfR191bnF1b3RlZF9hcmcgaW4KLSAgICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5Ci0gICAgICAgICMgd29yZCBzcGxpdHRpbmcsIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGFuZCB2YXJpYWJsZSBleHBhbnNpb24KLSAgICAgICAgIyBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCi0gICAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5Ci0gICAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCi0gICAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotICAgICAgICAgIF9HX3F1b3RlZF9hcmc9XCIkX0dfdW5xdW90ZWRfYXJnXCIKLSAgICAgICAgICA7OwotICAgICAgICAqKQotICAgICAgICAgIF9HX3F1b3RlZF9hcmc9JF9HX3VucXVvdGVkX2FyZwotCSAgOzsKLSAgICAgIGVzYWMKLQotICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IjsgdGhlbgotCWZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIgJF9HX3F1b3RlZF9hcmciCi0gICAgICBlbHNlCi0gICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIkX0dfcXVvdGVkX2FyZyIKLSAgICAgIGZpCi0gICAgICBzaGlmdAotICAgIGRvbmUKLX0KLQotCi0jIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBBUkcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCi0jIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLWZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGNhc2UgJDEgaW4KLSAgICAgICpbXFxcYFwiXSopCi0JX0dfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCi0JICAgIC1lICIkc2VkX2RvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7Ci0gICAgICAqKQotICAgICAgICBfR19hcmc9JDEgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRfR19hcmcgaW4KLSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQotICAgICAgIyB3b3JkIHNwbGl0dGluZyBhbmQgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgotICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKLSAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLSAgICAgICAgX0dfYXJnPVwiJF9HX2FyZ1wiCi0gICAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0kX0dfYXJnCi19Ci0KLQotIyBmdW5jX3N0cmlwbmFtZSBQUkVGSVggU1VGRklYIE5BTUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIGZyb20gTkFNRSwgYW5kIHN0b3JlIGluIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4KLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCi0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLWlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCi0gIGV2YWwgJ2Z1bmNfc3RyaXBuYW1lICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCi0gICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgdmFyaWFibGUgZmlyc3QuCi0gICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSQzCi0gICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkMSJ9Ci0gICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkMiJ9Ci0gIH0nCi1lbHNlCi0gIGZ1bmNfc3RyaXBuYW1lICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBjYXNlICQyIGluCi0gICAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAtZSAicyVeJDElJSIgLWUgInMlXFxcXCQyXCQlJSJgOzsKLSAgICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkMyIgfCAkU0VEIC1lICJzJV4kMSUlIiAtZSAicyUkMlwkJSUiYDs7Ci0gICAgZXNhYwotICB9Ci1maQotCi0KLSMgZnVuY19zaG93X2V2YWwgQ01EIFtGQUlMX0VYUF0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVW5sZXNzIG9wdF9xdWlldCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCi0jIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAotIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4KLWZ1bmNfc2hvd19ldmFsICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgX0dfY21kPSQxCi0gICAgX0dfZmFpbF9leHA9JHsyLSc6J30KLQotICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJF9HX2NtZCIKLSAgICBldmFsICJmdW5jX25vdHF1aWV0ICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgotCi0gICAgJG9wdF9kcnlfcnVuIHx8IHsKLSAgICAgIGV2YWwgIiRfR19jbWQiCi0gICAgICBfR19zdGF0dXM9JD8KLSAgICAgIGlmIHRlc3QgMCAtbmUgIiRfR19zdGF0dXMiOyB0aGVuCi0JZXZhbCAiKGV4aXQgJF9HX3N0YXR1cyk7ICRfR19mYWlsX2V4cCIKLSAgICAgIGZpCi0gICAgfQotfQotCi0KLSMgZnVuY19zaG93X2V2YWxfbG9jYWxlIENNRCBbRkFJTF9FWFBdCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBVbmxlc3Mgb3B0X3F1aWV0IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKLSMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCi0jIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCi1mdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR19jbWQ9JDEKLSAgICBfR19mYWlsX2V4cD0kezItJzonfQotCi0gICAgJG9wdF9xdWlldCB8fCB7Ci0gICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRfR19jbWQiCi0gICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCi0gICAgfQotCi0gICAgJG9wdF9kcnlfcnVuIHx8IHsKLSAgICAgIGV2YWwgIiRfR191c2VyX2xvY2FsZQotCSAgICAkX0dfY21kIgotICAgICAgX0dfc3RhdHVzPSQ/Ci0gICAgICBldmFsICIkX0dfc2FmZV9sb2NhbGUiCi0gICAgICBpZiB0ZXN0IDAgLW5lICIkX0dfc3RhdHVzIjsgdGhlbgotCWV2YWwgIihleGl0ICRfR19zdGF0dXMpOyAkX0dfZmFpbF9leHAiCi0gICAgICBmaQotICAgIH0KLX0KLQotCi0jIGZ1bmNfdHJfc2gKLSMgLS0tLS0tLS0tLQotIyBUdXJuICQxIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFibGUgbmFtZS4KLSMgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY190cl9zaF9yZXN1bHQuICBBbGwgY2hhcmFjdGVycwotIyBub3QgaW4gdGhlIHNldCBhLXpBLVowLTlfIGFyZSByZXBsYWNlZCB3aXRoICdfJy4gRnVydGhlciwKLSMgaWYgJDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycgaXMgcHJlcGVuZGVkIGFzIHdlbGwuCi1mdW5jX3RyX3NoICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgY2FzZSAkMSBpbgotICAgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKLSAgICAgIGZ1bmNfdHJfc2hfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAtZSAncy9eXChbMC05XVwpL19cMS8nIC1lICdzL1teYS16QS1aMC05X10vXy9nJ2AKLSAgICAgIDs7Ci0gICAgKiApCi0gICAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQotICAgICAgOzsKLSAgICBlc2FjCi19Ci0KLQotIyBmdW5jX3ZlcmJvc2UgQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KLWZ1bmNfdmVyYm9zZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICRvcHRfdmVyYm9zZSAmJiBmdW5jX2VjaG8gIiQqIgotCi0gICAgOgotfQotCi0KLSMgZnVuY193YXJuX2FuZF9jb250aW51ZSBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgotZnVuY193YXJuX2FuZF9jb250aW51ZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCi0KLSAgICBmdW5jX2VjaG9faW5maXhfMSAiJHt0Y19yZWR9d2FybmluZyR0Y19yZXNldCIgIiQqIiA+JjIKLX0KLQotCi0jIGZ1bmNfd2FybmluZyBDQVRFR09SWSBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuIFdhcm5pbmcKLSMgbWVzc2FnZXMgY2FuIGJlIGZpbHRlcmVkIGFjY29yZGluZyB0byBDQVRFR09SWSwgd2hlcmUgdGhpcyBmdW5jdGlvbgotIyBlbGlkZXMgbWVzc2FnZXMgd2hlcmUgQ0FURUdPUlkgaXMgbm90IGxpc3RlZCBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlCi0jICdvcHRfd2FybmluZ190eXBlcycuCi1mdW5jX3dhcm5pbmcgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIENBVEVHT1JZIG11c3QgYmUgaW4gdGhlIHdhcm5pbmdfY2F0ZWdvcmllcyBsaXN0IQotICAgIGNhc2UgIiAkd2FybmluZ19jYXRlZ29yaWVzICIgaW4KLSAgICAgICoiICQxICIqKSA7OwotICAgICAgKikgZnVuY19pbnRlcm5hbF9lcnJvciAiaW52YWxpZCB3YXJuaW5nIGNhdGVnb3J5ICckMSciIDs7Ci0gICAgZXNhYwotCi0gICAgX0dfY2F0ZWdvcnk9JDEKLSAgICBzaGlmdAotCi0gICAgY2FzZSAiICRvcHRfd2FybmluZ190eXBlcyAiIGluCi0gICAgICAqIiAkX0dfY2F0ZWdvcnkgIiopICR3YXJuaW5nX2Z1bmMgJHsxKyIkQCJ9IDs7Ci0gICAgZXNhYwotfQotCi0KLSMgZnVuY19zb3J0X3ZlciBWRVIxIFZFUjIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgJ3NvcnQgLVYnIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLgotIyBOb3RlIHRoaXMgZGV2aWF0ZXMgZnJvbSB0aGUgdmVyc2lvbiBjb21wYXJpc29uIGluIGF1dG9tYWtlCi0jIGluIHRoYXQgaXQgdHJlYXRzIDEuNSA8IDEuNS4wLCBhbmQgdHJlYXRzIDEuNC40YSA8IDEuNC1wM2EKLSMgYnV0IHRoaXMgc2hvdWxkIHN1ZmZpY2UgYXMgd2Ugd29uJ3QgYmUgc3BlY2lmeWluZyBvbGQKLSMgdmVyc2lvbiBmb3JtYXRzIG9yIHJlZHVuZGFudCB0cmFpbGluZyAuMCBpbiBib290c3RyYXAuY29uZi4KLSMgSWYgd2UgZGlkIHdhbnQgZnVsbCBjb21wYXRpYmlsaXR5IHRoZW4gd2Ugc2hvdWxkIHByb2JhYmx5Ci0jIHVzZSBtNF92ZXJzaW9uX2NvbXBhcmUgZnJvbSBhdXRvY29uZi4KLWZ1bmNfc29ydF92ZXIgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBwcmludGYgJyVzXG4lc1xuJyAiJDEiICIkMiIgXAotICAgICAgfCBzb3J0IC10LiAtayAxLDFuIC1rIDIsMm4gLWsgMywzbiAtayA0LDRuIC1rIDUsNW4gLWsgNiw2biAtayA3LDduIC1rIDgsOG4gLWsgOSw5bgotfQotCi0jIGZ1bmNfbHRfdmVyIFBSRVYgQ1VSUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmV0dXJuIHRydWUgaWYgUFJFViBhbmQgQ1VSUiBhcmUgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgYWNjb3JkaW5nIHRvCi0jIGZ1bmNfc29ydF92ZXIsIG90aGVyd2lzZSBmYWxzZS4gIFVzZSBpdCBsaWtlIHRoaXM6Ci0jCi0jICBmdW5jX2x0X3ZlciAiJHByZXZfdmVyIiAiJHByb3Bvc2VkX3ZlciIgfHwgZnVuY19mYXRhbF9lcnJvciAiLi4uIgotZnVuY19sdF92ZXIgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICB0ZXN0ICJ4JDEiID0geGBmdW5jX3NvcnRfdmVyICIkMSIgIiQyIiB8ICRTRUQgMXFgCi19Ci0KLQotIyBMb2NhbCB2YXJpYWJsZXM6Ci0jIG1vZGU6IHNoZWxsLXNjcmlwdAotIyBzaC1pbmRlbnRhdGlvbjogMgotIyBldmFsOiAoYWRkLWhvb2sgJ2JlZm9yZS1zYXZlLWhvb2sgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtcGF0dGVybjogIjEwL3NjcmlwdHZlcnNpb249JTp5LSUwMm0tJTAyZC4lMDJIOyAjIFVUQyIKLSMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCi0jIEVuZDoKLSMhIC9iaW4vc2gKLQotIyBTZXQgYSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBzY3JpcHQuCi1zY3JpcHR2ZXJzaW9uPTIwMTQtMDEtMDcuMDM7ICMgVVRDCi0KLSMgQSBwb3J0YWJsZSwgcGx1Z2dhYmxlIG9wdGlvbiBwYXJzZXIgZm9yIEJvdXJuZSBzaGVsbC4KLSMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMTAKLQotIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLSMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0jIFBsZWFzZSByZXBvcnQgYnVncyBvciBwcm9wb3NlIHBhdGNoZXMgdG8gZ2FyeUBnbnUub3JnLgotCi0KLSMjIC0tLS0tLSAjIwotIyMgVXNhZ2UuICMjCi0jIyAtLS0tLS0gIyMKLQotIyBUaGlzIGZpbGUgaXMgYSBsaWJyYXJ5IGZvciBwYXJzaW5nIG9wdGlvbnMgaW4geW91ciBzaGVsbCBzY3JpcHRzIGFsb25nCi0jIHdpdGggYXNzb3J0ZWQgb3RoZXIgdXNlZnVsIHN1cHBvcnRpbmcgZmVhdHVyZXMgdGhhdCB5b3UgY2FuIG1ha2UgdXNlCi0jIG9mIHRvby4KLSMKLSMgRm9yIHRoZSBzaW1wbGVzdCBzY3JpcHRzIHlvdSBtaWdodCBuZWVkIG9ubHk6Ci0jCi0jICAgIyEvYmluL3NoCi0jICAgLiByZWxhdGl2ZS9wYXRoL3RvL2Z1bmNsaWIuc2gKLSMgICAuIHJlbGF0aXZlL3BhdGgvdG8vb3B0aW9ucy1wYXJzZXIKLSMgICBzY3JpcHR2ZXJzaW9uPTEuMAotIyAgIGZ1bmNfb3B0aW9ucyAkezErIiRAIn0KLSMgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAotIyAgIC4uLnJlc3Qgb2YgeW91ciBzY3JpcHQuLi4KLSMKLSMgSW4gb3JkZXIgZm9yIHRoZSAnLS12ZXJzaW9uJyBvcHRpb24gdG8gd29yaywgeW91IHdpbGwgbmVlZCB0byBoYXZlIGEKLSMgc3VpdGFibHkgZm9ybWF0dGVkIGNvbW1lbnQgbGlrZSB0aGUgb25lIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlCi0jIHN0YXJ0aW5nIHdpdGggJyMgV3JpdHRlbiBieSAnIGFuZCBlbmRpbmcgd2l0aCAnIyB3YXJyYW50eTsgJy4KLSMKLSMgRm9yICctaCcgYW5kICctLWhlbHAnIHRvIHdvcmssIHlvdSB3aWxsIGFsc28gbmVlZCBhIG9uZSBsaW5lCi0jIGRlc2NyaXB0aW9uIG9mIHlvdXIgc2NyaXB0J3MgcHVycG9zZSBpbiBhIGNvbW1lbnQgZGlyZWN0bHkgYWJvdmUgdGhlCi0jICcjIFdyaXR0ZW4gYnkgJyBsaW5lLCBsaWtlIHRoZSBvbmUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCi0jCi0jIFRoZSBkZWZhdWx0IG9wdGlvbnMgYWxzbyBzdXBwb3J0ICctLWRlYnVnJywgd2hpY2ggd2lsbCB0dXJuIG9uIHNoZWxsCi0jIGV4ZWN1dGlvbiB0cmFjaW5nIChzZWUgdGhlIGNvbW1lbnQgYWJvdmUgZGVidWdfY21kIGJlbG93IGZvciBhbm90aGVyCi0jIHVzZSksIGFuZCAnLS12ZXJib3NlJyBhbmQgdGhlIGZ1bmNfdmVyYm9zZSBmdW5jdGlvbiB0byBhbGxvdyB5b3VyIHNjcmlwdAotIyB0byBkaXNwbGF5IHZlcmJvc2UgbWVzc2FnZXMgb25seSB3aGVuIHlvdXIgdXNlciBoYXMgc3BlY2lmaWVkCi0jICctLXZlcmJvc2UnLgotIwotIyBBZnRlciBzb3VyY2luZyB0aGlzIGZpbGUsIHlvdSBjYW4gcGx1ZyBwcm9jZXNzaW5nIGZvciBhZGRpdGlvbmFsCi0jIG9wdGlvbnMgYnkgYW1lbmRpbmcgdGhlIHZhcmlhYmxlcyBmcm9tIHRoZSAnQ29uZmlndXJhdGlvbicgc2VjdGlvbgotIyBiZWxvdywgYW5kIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSAnT3B0aW9uIHBhcnNpbmcnCi0jIHNlY3Rpb24gZnVydGhlciBkb3duLgotCi0jIyAtLS0tLS0tLS0tLS0tLSAjIwotIyMgQ29uZmlndXJhdGlvbi4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tICMjCi0KLSMgWW91IHNob3VsZCBvdmVycmlkZSB0aGVzZSB2YXJpYWJsZXMgaW4geW91ciBzY3JpcHQgYWZ0ZXIgc291cmNpbmcgdGhpcwotIyBmaWxlIHNvIHRoYXQgdGhleSByZWZsZWN0IHRoZSBjdXN0b21pc2F0aW9ucyB5b3UgaGF2ZSBhZGRlZCB0byB0aGUKLSMgb3B0aW9uIHBhcnNlci4KLQotIyBUaGUgdXNhZ2UgbGluZSBmb3Igb3B0aW9uIHBhcnNpbmcgZXJyb3JzIGFuZCB0aGUgc3RhcnQgb2YgJy1oJyBhbmQKLSMgJy0taGVscCcgb3V0cHV0IG1lc3NhZ2VzLiBZb3UgY2FuIGVtYmVkIHNoZWxsIHZhcmlhYmxlcyBmb3IgZGVsYXllZAotIyBleHBhbnNpb24gYXQgdGhlIHRpbWUgdGhlIG1lc3NhZ2UgaXMgZGlzcGxheWVkLCBidXQgeW91IHdpbGwgbmVlZCB0bwotIyBxdW90ZSBvdGhlciBzaGVsbCBtZXRhLWNoYXJhY3RlcnMgY2FyZWZ1bGx5IHRvIHByZXZlbnQgdGhlbSBiZWluZwotIyBleHBhbmRlZCB3aGVuIHRoZSBjb250ZW50cyBhcmUgZXZhbGVkLgotdXNhZ2U9JyRwcm9ncGF0aCBbT1BUSU9OXS4uLicKLQotIyBTaG9ydCBoZWxwIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gJy1oJyBhbmQgJy0taGVscCcuICBBZGQgdG8gdGhpcyBvcgotIyBvdmVycmlkZSBpdCBhZnRlciBzb3VyY2luZyB0aGlzIGxpYnJhcnkgdG8gcmVmbGVjdCB0aGUgZnVsbCBzZXQgb2YKLSMgb3B0aW9ucyB5b3VyIHNjcmlwdCBhY2NlcHRzLgotdXNhZ2VfbWVzc2FnZT0iXAotICAgICAgIC0tZGVidWcgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKLSAgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZCi0gICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFthbGxdCi0gICAtdiwgLS12ZXJib3NlICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCi0gICAgICAgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotICAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHNob3J0IG9yIGxvbmcgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0iCi0KLSMgQWRkaXRpb25hbCB0ZXh0IGFwcGVuZGVkIHRvICd1c2FnZV9tZXNzYWdlJyBpbiByZXNwb25zZSB0byAnLS1oZWxwJy4KLWxvbmdfaGVscF9tZXNzYWdlPSIKLVdhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOgotICAgICAgICdhbGwnICAgICAgICAgIHNob3cgYWxsIHdhcm5pbmdzCi0gICAgICAgJ25vbmUnICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5ncwotICAgICAgICdlcnJvcicgICAgICAgIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGZhdGFsIGVycm9ycyIKLQotIyBIZWxwIG1lc3NhZ2UgcHJpbnRlZCBiZWZvcmUgZmF0YWwgb3B0aW9uIHBhcnNpbmcgZXJyb3JzLgotZmF0YWxfaGVscD0iVHJ5ICdcJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgotCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgSG9vayBmdW5jdGlvbiBtYW5hZ2VtZW50LiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIFRoaXMgc2VjdGlvbiBjb250YWlucyBmdW5jdGlvbnMgZm9yIGFkZGluZywgcmVtb3ZpbmcsIGFuZCBydW5uaW5nIGhvb2tzCi0jIHRvIHRoZSBtYWluIGNvZGUuICBBIGhvb2sgaXMganVzdCBhIG5hbWVkIGxpc3Qgb2Ygb2YgZnVuY3Rpb24sIHRoYXQgY2FuCi0jIGJlIHJ1biBpbiBvcmRlciBsYXRlciBvbi4KLQotIyBmdW5jX2hvb2thYmxlIEZVTkNfTkFNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWNsYXJlIHRoYXQgRlVOQ19OQU1FIHdpbGwgcnVuIGhvb2tzIGFkZGVkIHdpdGgKLSMgJ2Z1bmNfYWRkX2hvb2sgRlVOQ19OQU1FIC4uLicuCi1mdW5jX2hvb2thYmxlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19hcHBlbmQgaG9va2FibGVfZm5zICIgJDEiCi19Ci0KLQotIyBmdW5jX2FkZF9ob29rIEZVTkNfTkFNRSBIT09LX0ZVTkMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJlcXVlc3QgdGhhdCBGVU5DX05BTUUgY2FsbCBIT09LX0ZVTkMgYmVmb3JlIGl0IHJldHVybnMuICBGVU5DX05BTUUgbXVzdAotIyBmaXJzdCBoYXZlIGJlZW4gZGVjbGFyZWQgImhvb2thYmxlIiBieSBhIGNhbGwgdG8gJ2Z1bmNfaG9va2FibGUnLgotZnVuY19hZGRfaG9vayAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGNhc2UgIiAkaG9va2FibGVfZm5zICIgaW4KLSAgICAgICoiICQxICIqKSA7OwotICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBhY2NlcHQgaG9vayBmdW5jdGlvbnMuIiA7OwotICAgIGVzYWMKLQotICAgIGV2YWwgZnVuY19hcHBlbmQgJHsxfV9ob29rcyAnIiAkMiInCi19Ci0KLQotIyBmdW5jX3JlbW92ZV9ob29rIEZVTkNfTkFNRSBIT09LX0ZVTkMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJlbW92ZSBIT09LX0ZVTkMgZnJvbSB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgY2FsbGVkIGJ5IEZVTkNfTkFNRS4KLWZ1bmNfcmVtb3ZlX2hvb2sgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBldmFsICR7MX1faG9va3M9J2AkRUNITyAiXCQnJDEnX2hvb2tzIiB8JFNFRCAic3wgJyQyJ3x8ImAnCi19Ci0KLQotIyBmdW5jX3J1bl9ob29rcyBGVU5DX05BTUUgW0FSR10uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJ1biBhbGwgaG9vayBmdW5jdGlvbnMgcmVnaXN0ZXJlZCB0byBGVU5DX05BTUUuCi0jIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgbGlzdCBvZiBob29rIGZ1bmN0aW9ucyBjb250YWlucyBub3RoaW5nIG1vcmUKLSMgdGhhbiBhIHdoaXRlc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgbGVnYWwgc2hlbGwgZnVuY3Rpb24gbmFtZXMsIGFuZAotIyBubyBlZmZvcnQgaXMgd2FzdGVkIHRyeWluZyB0byBjYXRjaCBzaGVsbCBtZXRhLWNoYXJhY3RlcnMgb3IgcHJlc2VydmUKLSMgd2hpdGVzcGFjZS4KLWZ1bmNfcnVuX2hvb2tzICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgY2FzZSAiICRob29rYWJsZV9mbnMgIiBpbgotICAgICAgKiIgJDEgIiopIDs7Ci0gICAgICAqKSBmdW5jX2ZhdGFsX2Vycm9yICInJDEnIGRvZXMgbm90IHN1cHBvcnQgaG9vayBmdW5jaW9ucy5uIiA7OwotICAgIGVzYWMKLQotICAgIGV2YWwgX0dfaG9va19mbnM9XCQkMV9ob29rczsgc2hpZnQKLQotICAgIGZvciBfR19ob29rIGluICRfR19ob29rX2ZuczsgZG8KLSAgICAgIGV2YWwgJF9HX2hvb2sgJyIkQCInCi0KLSAgICAgICMgc3RvcmUgcmV0dXJuZWQgb3B0aW9ucyBsaXN0IGJhY2sgaW50byBwb3NpdGlvbmFsCi0gICAgICAjIHBhcmFtZXRlcnMgZm9yIG5leHQgJ2NtZCcgZXhlY3V0aW9uLgotICAgICAgZXZhbCBfR19ob29rX3Jlc3VsdD1cJCR7X0dfaG9va31fcmVzdWx0Ci0gICAgICBldmFsIHNldCBkdW1teSAiJF9HX2hvb2tfcmVzdWx0Ijsgc2hpZnQKLSAgICBkb25lCi0KLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQotICAgIGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLX0KLQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLSAjIwotIyMgT3B0aW9uIHBhcnNpbmcuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBJbiBvcmRlciB0byBhZGQgeW91ciBvd24gb3B0aW9uIHBhcnNpbmcgaG9va3MsIHlvdSBtdXN0IGFjY2VwdCB0aGUKLSMgZnVsbCBwb3NpdGlvbmFsIHBhcmFtZXRlciBsaXN0IGluIHlvdXIgaG9vayBmdW5jdGlvbiwgcmVtb3ZlIGFueQotIyBvcHRpb25zIHRoYXQgeW91IGFjdGlvbiwgYW5kIHRoZW4gcGFzcyBiYWNrIHRoZSByZW1haW5pbmcgdW5wcm9jZXNzZWQKLSMgb3B0aW9ucyBpbiAnPGhvb2tlZF9mdW5jdGlvbl9uYW1lPl9yZXN1bHQnLCBlc2NhcGVkIHN1aXRhYmx5IGZvcgotIyAnZXZhbCcuICBMaWtlIHRoaXM6Ci0jCi0jICAgIG15X29wdGlvbnNfcHJlcCAoKQotIyAgICB7Ci0jICAgICAgICAkZGVidWdfY21kCi0jCi0jICAgICAgICAjIEV4dGVuZCB0aGUgZXhpc3RpbmcgdXNhZ2UgbWVzc2FnZS4KLSMgICAgICAgIHVzYWdlX21lc3NhZ2U9JHVzYWdlX21lc3NhZ2UnCi0jICAgICAgLXMsIC0tc2lsZW50ICAgICAgIGRvbidcJyd0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKLSMgICAgJwotIwotIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KLSMgICAgICAgIG15X29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0jICAgIH0KLSMgICAgZnVuY19hZGRfaG9vayBmdW5jX29wdGlvbnNfcHJlcCBteV9vcHRpb25zX3ByZXAKLSMKLSMKLSMgICAgbXlfc2lsZW50X29wdGlvbiAoKQotIyAgICB7Ci0jICAgICAgICAkZGVidWdfY21kCi0jCi0jICAgICAgICAjIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwgd2UgcGFyc2UgYXMgbWFueSBvcHRpb25zIGFzIHdlIGNhbgotIyAgICAgICAgIyByZWNvZ25pc2UgaW4gYSBsb29wIGJlZm9yZSBwYXNzaW5nIHRoZSByZW1haW5kZXIgYmFjayB0byB0aGUKLSMgICAgICAgICMgY2FsbGVyIG9uIHRoZSBmaXJzdCB1bnJlY29nbmlzZWQgYXJndW1lbnQgd2UgZW5jb3VudGVyLgotIyAgICAgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KLSMgICAgICAgICAgb3B0PSQxOyBzaGlmdAotIyAgICAgICAgICBjYXNlICRvcHQgaW4KLSMgICAgICAgICAgICAtLXNpbGVudHwtcykgb3B0X3NpbGVudD06IDs7Ci0jICAgICAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKLSMgICAgICAgICAgICAtcyopICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCi0jICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9Ci0jICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ci0jICAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0jICAgICAgICAgICAgKikgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICIkKiI7IHNoaWZ0OyBicmVhayA7OwotIyAgICAgICAgICBlc2FjCi0jICAgICAgICBkb25lCi0jCi0jICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQotIyAgICAgICAgbXlfc2lsZW50X29wdGlvbl9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0jICAgIH0KLSMgICAgZnVuY19hZGRfaG9vayBmdW5jX3BhcnNlX29wdGlvbnMgbXlfc2lsZW50X29wdGlvbgotIwotIwotIyAgICBteV9vcHRpb25fdmFsaWRhdGlvbiAoKQotIyAgICB7Ci0jICAgICAgICAkZGVidWdfY21kCi0jCi0jICAgICAgICAkb3B0X3NpbGVudCAmJiAkb3B0X3ZlcmJvc2UgJiYgZnVuY19mYXRhbF9oZWxwICJcCi0jICAgICctLXNpbGVudCcgYW5kICctLXZlcmJvc2UnIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCi0jCi0jICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQotIyAgICAgICAgbXlfb3B0aW9uX3ZhbGlkYXRpb25fcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAotIyAgICB9Ci0jICAgIGZ1bmNfYWRkX2hvb2sgZnVuY192YWxpZGF0ZV9vcHRpb25zIG15X29wdGlvbl92YWxpZGF0aW9uCi0jCi0jIFlvdSdsbCBhbHNlIG5lZWQgdG8gbWFudWFsbHkgYW1lbmQgJHVzYWdlX21lc3NhZ2UgdG8gcmVmbGVjdCB0aGUgZXh0cmEKLSMgb3B0aW9ucyB5b3UgcGFyc2UuICBJdCdzIHByZWZlcmFibGUgdG8gYXBwZW5kIGlmIHlvdSBjYW4sIHNvIHRoYXQKLSMgbXVsdGlwbGUgb3B0aW9uIHBhcnNpbmcgaG9va3MgY2FuIGJlIGFkZGVkIHNhZmVseS4KLQotCi0jIGZ1bmNfb3B0aW9ucyBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQWxsIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGluc2lkZSBmdW5jX29wdGlvbnMgYXJlIGhvb2thYmxlLiBTZWUgdGhlCi0jIGluZGl2aWR1YWwgaW1wbGVtZW50YXRpb25zIGZvciBkZXRhaWxzLgotZnVuY19ob29rYWJsZSBmdW5jX29wdGlvbnMKLWZ1bmNfb3B0aW9ucyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfb3B0aW9uc19wcmVwICR7MSsiJEAifQotICAgIGV2YWwgZnVuY19wYXJzZV9vcHRpb25zIFwKLSAgICAgICAgJHtmdW5jX29wdGlvbnNfcHJlcF9yZXN1bHQrIiRmdW5jX29wdGlvbnNfcHJlcF9yZXN1bHQifQotICAgIGV2YWwgZnVuY192YWxpZGF0ZV9vcHRpb25zIFwKLSAgICAgICAgJHtmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0KyIkZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdCJ9Ci0KLSAgICBldmFsIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfb3B0aW9ucyBcCi0gICAgICAgICR7ZnVuY192YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdCsiJGZ1bmNfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQifQotCi0gICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCi0gICAgZnVuY19vcHRpb25zX3Jlc3VsdD0kZnVuY19ydW5faG9va3NfcmVzdWx0Ci19Ci0KLQotIyBmdW5jX29wdGlvbnNfcHJlcCBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBbGwgaW5pdGlhbGlzYXRpb25zIHJlcXVpcmVkIGJlZm9yZSBzdGFydGluZyB0aGUgb3B0aW9uIHBhcnNlIGxvb3AuCi0jIE5vdGUgdGhhdCB3aGVuIGNhbGxpbmcgaG9vayBmdW5jdGlvbnMsIHdlIHBhc3MgdGhyb3VnaCB0aGUgbGlzdCBvZgotIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuICBJZiBhIGhvb2sgZnVuY3Rpb24gbW9kaWZpZXMgdGhhdCBsaXN0LCBhbmQKLSMgbmVlZHMgdG8gcHJvcG9nYXRlIHRoYXQgYmFjayB0byByZXN0IG9mIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBjb21wbGV0ZQotIyBtb2RpZmllZCBsaXN0IG11c3QgYmUgcHV0IGluICdmdW5jX3J1bl9ob29rc19yZXN1bHQnIGJlZm9yZQotIyByZXR1cm5pbmcuCi1mdW5jX2hvb2thYmxlIGZ1bmNfb3B0aW9uc19wcmVwCi1mdW5jX29wdGlvbnNfcHJlcCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgT3B0aW9uIGRlZmF1bHRzOgotICAgIG9wdF92ZXJib3NlPWZhbHNlCi0gICAgb3B0X3dhcm5pbmdfdHlwZXM9Ci0KLSAgICBmdW5jX3J1bl9ob29rcyBmdW5jX29wdGlvbnNfcHJlcCAkezErIiRAIn0KLQotICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgotICAgIGZ1bmNfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19ydW5faG9va3NfcmVzdWx0Ci19Ci0KLQotIyBmdW5jX3BhcnNlX29wdGlvbnMgW0FSR10uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoZSBtYWluIG9wdGlvbiBwYXJzaW5nIGxvb3AuCi1mdW5jX2hvb2thYmxlIGZ1bmNfcGFyc2Vfb3B0aW9ucwotZnVuY19wYXJzZV9vcHRpb25zICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdD0KLQotICAgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKLSAgICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbwotICAgICAgIyBEZWZlciB0byBob29rIGZ1bmN0aW9ucyBmb3IgaW5pdGlhbCBvcHRpb24gcGFyc2luZywgc28gdGhleQotICAgICAgIyBnZXQgcHJpb3JpdHkgaW4gdGhlIGV2ZW50IG9mIHJldXNpbmcgYW4gb3B0aW9uIG5hbWUuCi0gICAgICBmdW5jX3J1bl9ob29rcyBmdW5jX3BhcnNlX29wdGlvbnMgJHsxKyIkQCJ9Ci0KLSAgICAgICMgQWRqdXN0IGZ1bmNfcGFyc2Vfb3B0aW9ucyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgdG8gbWF0Y2gKLSAgICAgIGV2YWwgc2V0IGR1bW15ICIkZnVuY19ydW5faG9va3NfcmVzdWx0Ijsgc2hpZnQKLQotICAgICAgIyBCcmVhayBvdXQgb2YgdGhlIGxvb3AgaWYgd2UgYWxyZWFkeSBwYXJzZWQgZXZlcnkgb3B0aW9uLgotICAgICAgdGVzdCAkIyAtZ3QgMCB8fCBicmVhawotCi0gICAgICBfR19vcHQ9JDEKLSAgICAgIHNoaWZ0Ci0gICAgICBjYXNlICRfR19vcHQgaW4KLSAgICAgICAgLS1kZWJ1Z3wteCkgICBkZWJ1Z19jbWQ9J3NldCAteCcKLSAgICAgICAgICAgICAgICAgICAgICBmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCi0gICAgICAgICAgICAgICAgICAgICAgJGRlYnVnX2NtZAotICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQotICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAtLXdhcm5pbmdzIG5vbmUgJHsxKyIkQCJ9Ci0gICAgICAgICAgICAgICAgICAgICAgc2hpZnQKLQkJICAgICAgOzsKLQotICAgICAgICAtLXdhcm5pbmdzfC0td2FybmluZ3wtVykKLSAgICAgICAgICAgICAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAkMSIgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICoiICQxICIqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRyYWlsaW5nIHNwYWNlIHByZXZlbnRzIG1hdGNoaW5nIGxhc3QgJDEgYWJvdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmRfdW5pcSBvcHRfd2FybmluZ190eXBlcyAiICQxIgotICAgICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgICAgICAgKmFsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcwotICAgICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgICAgICAgKm5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPW5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgICAgICAgICplcnJvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcwotICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9ZnVuY19mYXRhbF9lcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19mYXRhbF9lcnJvciBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB3YXJuaW5nIGNhdGVnb3J5OiAnJDEnIgotICAgICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgICAgICAgICBzaGlmdAotICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS12ZXJib3NlfC12KSBvcHRfdmVyYm9zZT06IDs7Ci0gICAgICAgIC0tdmVyc2lvbikgICAgZnVuY192ZXJzaW9uIDs7Ci0gICAgICAgIC1cP3wtaCkgICAgICAgZnVuY191c2FnZSA7OwotICAgICAgICAtLWhlbHApICAgICAgIGZ1bmNfaGVscCA7OwotCi0JIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9ucyAocGx1Z2lucyBtYXkgbmVlZCB0aGlzKToKLQktLSo9KikgICAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzICIkX0dfb3B0IgotCSAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9lcXVhbHNfbGhzIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9lcXVhbHNfcmhzIiAkezErIiRAIn0KLSAgICAgICAgICAgICAgICAgICAgICBzaGlmdAotICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gc2hvcnQgb3B0aW9uczoKLSAgICAgICAgLVcqKQotICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgotICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQotICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgotICAgICAgICAtXD8qfC1oKnwtdip8LXgqKQotICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgotICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KLSAgICAgICAgICAgICAgICAgICAgICBzaGlmdAotICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS0pICAgICAgICAgICBicmVhayA7OwotICAgICAgICAtKikgICAgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRfR19vcHQnIiA7OwotICAgICAgICAqKSAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OyBzaGlmdDsgYnJlYWsgOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQotICAgIGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci19Ci0KLQotIyBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgW0FSR10uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFBlcmZvcm0gYW55IHNhbml0eSBjaGVja3Mgb24gb3B0aW9uIHNldHRpbmdzIGFuZC9vciB1bmNvbnN1bWVkCi0jIGFyZ3VtZW50cy4KLWZ1bmNfaG9va2FibGUgZnVuY192YWxpZGF0ZV9vcHRpb25zCi1mdW5jX3ZhbGlkYXRlX29wdGlvbnMgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIERpc3BsYXkgYWxsIHdhcm5pbmdzIGlmIC1XIHdhcyBub3QgZ2l2ZW4uCi0gICAgdGVzdCAtbiAiJG9wdF93YXJuaW5nX3R5cGVzIiB8fCBvcHRfd2FybmluZ190eXBlcz0iICR3YXJuaW5nX2NhdGVnb3JpZXMiCi0KLSAgICBmdW5jX3J1bl9ob29rcyBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgJHsxKyIkQCJ9Ci0KLSAgICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkIQotICAgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCi0KLSAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKLSAgICBmdW5jX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3J1bl9ob29rc19yZXN1bHQKLX0KLQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBIZWxwZXIgZnVuY3Rpb25zLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUKLSMgaG9va2FibGUgb3B0aW9uIHBhcnNlciBmcmFtZXdvcmsgaW4gYXNjaWktYmV0aWNhbCBvcmRlci4KLQotCi0jIGZ1bmNfZmF0YWxfaGVscCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQotIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCi1mdW5jX2ZhdGFsX2hlbHAgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBldmFsIFwkRUNITyBcIiJVc2FnZTogJHVzYWdlIlwiCi0gICAgZXZhbCBcJEVDSE8gXCIiJGZhdGFsX2hlbHAiXCIKLSAgICBmdW5jX2Vycm9yICR7MSsiJEAifQotICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotfQotCi0KLSMgZnVuY19oZWxwCi0jIC0tLS0tLS0tLQotIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KLWZ1bmNfaGVscCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfdXNhZ2VfbWVzc2FnZQotICAgICRFQ0hPICIkbG9uZ19oZWxwX21lc3NhZ2UiCi0gICAgZXhpdCAwCi19Ci0KLQotIyBmdW5jX21pc3NpbmdfYXJnIEFSR05BTUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBnbG9iYWwKLSMgZXhpdF9jbWQuCi1mdW5jX21pc3NpbmdfYXJnICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19lcnJvciAiTWlzc2luZyBhcmd1bWVudCBmb3IgJyQxJy4iCi0gICAgZXhpdF9jbWQ9ZXhpdAotfQotCi0KLSMgZnVuY19zcGxpdF9lcXVhbHMgU1RSSU5HCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgZnVuY19zcGxpdF9lcXVhbHNfbGhzIGFuZCBmdW5jX3NwbGl0X2VxdWFsc19yaHMgc2hlbGwgdmFyaWFibGVzIGFmdGVyCi0jIHNwbGl0dGluZyBTVFJJTkcgYXQgdGhlICc9JyBzaWduLgotdGVzdCAteiAiJF9HX0hBVkVfWFNJX09QUyIgXAotICAgICYmIChldmFsICd4PWEvYi9jOwotICAgICAgdGVzdCA1YWEvYmIvY2MgPSAiJHsjeH0ke3glJS8qfSR7eCUvKn0ke3gjKi99JHt4IyMqL30iJykgMj4vZGV2L251bGwgXAotICAgICYmIF9HX0hBVkVfWFNJX09QUz15ZXMKLQotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyIKLXRoZW4KLSAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgotICBldmFsICdmdW5jX3NwbGl0X2VxdWFscyAoKQotICB7Ci0gICAgICAkZGVidWdfY21kCi0KLSAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX2xocz0kezElJT0qfQotICAgICAgZnVuY19zcGxpdF9lcXVhbHNfcmhzPSR7MSMqPX0KLSAgICAgIHRlc3QgIngkZnVuY19zcGxpdF9lcXVhbHNfbGhzIiA9ICJ4JDEiIFwKLSAgICAgICAgJiYgZnVuY19zcGxpdF9lcXVhbHNfcmhzPQotICB9JwotZWxzZQotICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgZXhwciwgd2hpY2ggaXMgb2Z0ZW4gYSBzaGVsbCBidWlsdGluLgotICBmdW5jX3NwbGl0X2VxdWFscyAoKQotICB7Ci0gICAgICAkZGVidWdfY21kCi0KLSAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX2xocz1gZXhwciAieCQxIiA6ICd4XChbXj1dKlwpJ2AKLSAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0KLSAgICAgIHRlc3QgIngkZnVuY19zcGxpdF9lcXVhbHNfbGhzIiA9ICJ4JDEiIFwKLSAgICAgICAgfHwgZnVuY19zcGxpdF9lcXVhbHNfcmhzPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCkkJ2AKLSAgfQotZmkgI2Z1bmNfc3BsaXRfZXF1YWxzCi0KLQotIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBTSE9SVE9QVAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCi0jIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0ZXIuCi1pZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIgotdGhlbgotICAjIFRoaXMgaXMgYW4gWFNJIGNvbXBhdGlibGUgc2hlbGwsIGFsbG93aW5nIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uLi4uCi0gIGV2YWwgJ2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCi0gIHsKLSAgICAgICRkZWJ1Z19jbWQKLQotICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P30KLSAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn0KLSAgfScKLWVsc2UKLSAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KLSAgZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKLSAgewotICAgICAgJGRlYnVnX2NtZAotCi0gICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWBleHByICJ4JDEiIDogJ3gtXCguXCknYAotICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWBleHByICJ4JDEiIDogJ3gtLlwoLipcKSQnYAotICB9Ci1maSAjZnVuY19zcGxpdF9zaG9ydF9vcHQKLQotCi0jIGZ1bmNfdXNhZ2UKLSMgLS0tLS0tLS0tLQotIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCi1mdW5jX3VzYWdlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY191c2FnZV9tZXNzYWdlCi0gICAgJEVDSE8gIlJ1biAnJHByb2duYW1lIC0taGVscCB8JHtQQUdFUi1tb3JlfScgZm9yIGZ1bGwgdXNhZ2UiCi0gICAgZXhpdCAwCi19Ci0KLQotIyBmdW5jX3VzYWdlX21lc3NhZ2UKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dC4KLWZ1bmNfdXNhZ2VfbWVzc2FnZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGV2YWwgXCRFQ0hPIFwiIlVzYWdlOiAkdXNhZ2UiXCIKLSAgICBlY2hvCi0gICAgJFNFRCAtbiAnc3xeIyB8fAotICAgICAgICAvXldyaXR0ZW4gYnkvewotICAgICAgICAgIHg7cDt4Ci0gICAgICAgIH0KLQloCi0JL15Xcml0dGVuIGJ5L3EnIDwgIiRwcm9ncGF0aCIKLSAgICBlY2hvCi0gICAgZXZhbCBcJEVDSE8gXCIiJHVzYWdlX21lc3NhZ2UiXCIKLX0KLQotCi0jIGZ1bmNfdmVyc2lvbgotIyAtLS0tLS0tLS0tLS0KLSMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgotZnVuY192ZXJzaW9uICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgcHJpbnRmICclc1xuJyAiJHByb2duYW1lICRzY3JpcHR2ZXJzaW9uIgotICAgICRTRUQgLW4gJwotICAgICAgICAvKEMpLyFiIGdvCi0gICAgICAgIDptb3JlCi0gICAgICAgIC9cLi8hewotICAgICAgICAgIE4KLSAgICAgICAgICBzfFxuIyB8IHwKLSAgICAgICAgICBiIG1vcmUKLSAgICAgICAgfQotICAgICAgICA6Z28KLSAgICAgICAgL14jIFdyaXR0ZW4gYnkgLywvIyB3YXJyYW50eTsgLyB7Ci0gICAgICAgICAgc3xeIyB8fAotICAgICAgICAgIHN8XiMgKiR8fAotICAgICAgICAgIHN8XCgoQylcKVsgMC05LC1dKlsgLC1dXChbMS05XVswLTldKiBcKXxcMSBcMnwKLSAgICAgICAgICBwCi0gICAgICAgIH0KLSAgICAgICAgL14jIFdyaXR0ZW4gYnkgLyB7Ci0gICAgICAgICAgc3xeIyB8fAotICAgICAgICAgIHAKLSAgICAgICAgfQotICAgICAgICAvXndhcnJhbnR5OyAvcScgPCAiJHByb2dwYXRoIgotCi0gICAgZXhpdCAkPwotfQotCi0KLSMgTG9jYWwgdmFyaWFibGVzOgotIyBtb2RlOiBzaGVsbC1zY3JpcHQKLSMgc2gtaW5kZW50YXRpb246IDIKLSMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXBhdHRlcm46ICIxMC9zY3JpcHR2ZXJzaW9uPSU6eS0lMDJtLSUwMmQuJTAySDsgIyBVVEMiCi0jIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgotIyBFbmQ6Ci0KLSMgU2V0IGEgdmVyc2lvbiBzdHJpbmcuCi1zY3JpcHR2ZXJzaW9uPScoR05VIGxpYnRvb2wpIDIuNC42JwotCi0KLSMgZnVuY19lY2hvIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tCi0jIExpYnRvb2wgYWxzbyBkaXNwbGF5cyB0aGUgY3VycmVudCBtb2RlIGluIG1lc3NhZ2VzLCBzbyBvdmVycmlkZQotIyBmdW5jbGliLnNoIGZ1bmNfZWNobyB3aXRoIHRoaXMgY3VzdG9tIGRlZmluaXRpb24uCi1mdW5jX2VjaG8gKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR19tZXNzYWdlPSQqCi0KLSAgICBmdW5jX2VjaG9fSUZTPSRJRlMKLSAgICBJRlM9JG5sCi0gICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCi0gICAgICBJRlM9JGZ1bmNfZWNob19JRlMKLSAgICAgICRFQ0hPICIkcHJvZ25hbWUke29wdF9tb2RlKzogJG9wdF9tb2RlfTogJF9HX2xpbmUiCi0gICAgZG9uZQotICAgIElGUz0kZnVuY19lY2hvX0lGUwotfQotCi0KLSMgZnVuY193YXJuaW5nIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpYnRvb2wgd2FybmluZ3MgYXJlIG5vdCBjYXRlZ29yaXplZCwgc28gb3ZlcnJpZGUgZnVuY2xpYi5zaAotIyBmdW5jX3dhcm5pbmcgd2l0aCB0aGlzIHNpbXBsZXIgZGVmaW5pdGlvbi4KLWZ1bmNfd2FybmluZyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICR3YXJuaW5nX2Z1bmMgJHsxKyIkQCJ9Ci19Ci0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgT3B0aW9ucyBwYXJzaW5nLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEhvb2sgaW4gdGhlIGZ1bmN0aW9ucyB0byBtYWtlIHN1cmUgb3VyIG93biBvcHRpb25zIGFyZSBwYXJzZWQgZHVyaW5nCi0jIHRoZSBvcHRpb24gcGFyc2luZyBsb29wLgotCi11c2FnZT0nJHByb2dwYXRoIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4nCi0KLSMgU2hvcnQgaGVscCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvICctaCcuCi11c2FnZV9tZXNzYWdlPSJPcHRpb25zOgotICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCi0gICAgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZwotICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCi0gICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKLSAgICAgICAtLW5vLXdhcm5pbmdzICAgICAgICBlcXVpdmFsZW50IHRvICctV25vbmUnCi0gICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcwotICAgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKLSAgICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCi0gICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgbW9yZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIHRoYW4gZGVmYXVsdAotICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KLSAgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW2FsbF0KLSAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCi0iCi0KLSMgQWRkaXRpb25hbCB0ZXh0IGFwcGVuZGVkIHRvICd1c2FnZV9tZXNzYWdlJyBpbiByZXNwb25zZSB0byAnLS1oZWxwJy4KLWZ1bmNfaGVscCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfdXNhZ2VfbWVzc2FnZQotICAgICRFQ0hPICIkbG9uZ19oZWxwX21lc3NhZ2UKLQotTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgICAgY2xlYW4gICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKLSAgICAgICBjb21waWxlICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAotICAgICAgIGV4ZWN1dGUgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQotICAgICAgIGZpbmlzaCAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCi0gICAgICAgaW5zdGFsbCAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCi0gICAgICAgbGluayAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQotICAgICAgIHVuaW5zdGFsbCAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQotCi1NT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCi0nLS1tb2RlPU1PREUnIG1heSBiZSBhYmJyZXZpYXRlZCBhcyAnTU9ERScgb3IgYSB1bmlxdWUgYWJicmV2aWF0aW9uIG9mIHRoYXQuCi1UcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KLQotV2hlbiByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBkZXNjcmliZSBhIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaXQgYW5kCi1pbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246Ci0KLSAgICAgICBob3N0LXRyaXBsZXQ6ICAgJGhvc3QKLSAgICAgICBzaGVsbDogICAgICAgICAgJFNIRUxMCi0gICAgICAgY29tcGlsZXI6ICAgICAgICRMVENDCi0gICAgICAgY29tcGlsZXIgZmxhZ3M6ICRMVENGTEFHUwotICAgICAgIGxpbmtlcjogICAgICAgICAkTEQgKGdudT8gJHdpdGhfZ251X2xkKQotICAgICAgIHZlcnNpb246ICAgICAgICAkcHJvZ25hbWUgJHNjcmlwdHZlcnNpb24gRGViaWFuLTIuNC42LTIKLSAgICAgICBhdXRvbWFrZTogICAgICAgYCgkQVVUT01BS0UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKLSAgICAgICBhdXRvY29uZjogICAgICAgYCgkQVVUT0NPTkYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKLQotUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgotR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3MvbGlidG9vbC8+LgotR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uIgotICAgIGV4aXQgMAotfQotCi0KLSMgZnVuY19sbzJvIE9CSkVDVC1OQU1FCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcmFuc2Zvcm0gT0JKRUNULU5BTUUgZnJvbSBhICcubG8nIHN1ZmZpeCB0byB0aGUgcGxhdGZvcm0gc3BlY2lmaWMKLSMgb2JqZWN0IHN1ZmZpeC4KLQotbG8ybz1zL1xcLmxvXCQvLiRvYmpleHQvCi1vMmxvPXMvXFwuJG9iamV4dFwkLy5sby8KLQotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KLSAgZXZhbCAnZnVuY19sbzJvICgpCi0gIHsKLSAgICBjYXNlICQxIGluCi0gICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiRvYmpleHQgOzsKLSAgICAgICogICApIGZ1bmNfbG8yb19yZXN1bHQ9JDEgICAgICAgICAgICAgICA7OwotICAgIGVzYWMKLSAgfScKLQotICAjIGZ1bmNfeGZvcm0gTElCT0JKLU9SLVNPVVJDRQotICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAjIFRyYW5zZm9ybSBMSUJPQkotT1ItU09VUkNFIGZyb20gYSAnLm8nIG9yICcuYycgKG9yIG90aGVyd2lzZSkKLSAgIyBzdWZmaXggdG8gYSAnLmxvJyBsaWJ0b29sLW9iamVjdCBzdWZmaXguCi0gIGV2YWwgJ2Z1bmNfeGZvcm0gKCkKLSAgewotICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KLSAgfScKLWVsc2UKLSAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIHNlZC4KLSAgZnVuY19sbzJvICgpCi0gIHsKLSAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJGxvMm8iYAotICB9Ci0KLSAgZnVuY194Zm9ybSAoKQotICB7Ci0gICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzfFwuW14uXSokfC5sb3wnYAotICB9Ci1maQotCi0KLSMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5Ci0jIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgotZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCi17Ci0gICAgZnVuY19fZmF0YWxfZXJyb3IgJHsxKyIkQCJ9IFwKLSAgICAgICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIiBcCi0gICAgICAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCi19Ci0KLQotIyBmdW5jX2NvbmZpZwotIyAtLS0tLS0tLS0tLQotIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCi1mdW5jX2NvbmZpZyAoKQotewotICAgIHJlX2JlZ2luY2Y9J14jICMjIyBCRUdJTiBMSUJUT09MJwotICAgIHJlX2VuZGNmPSdeIyAjIyMgRU5EIExJQlRPT0wnCi0KLSAgICAjIERlZmF1bHQgY29uZmlndXJhdGlvbi4KLSAgICAkU0VEICIxLC8kcmVfYmVnaW5jZiBDT05GSUcvZDsvJHJlX2VuZGNmIENPTkZJRy8sXCRkIiA8ICIkcHJvZ3BhdGgiCi0KLSAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgotICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbwotICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCi0gICAgZG9uZQotCi0gICAgZXhpdCAkPwotfQotCi0KLSMgZnVuY19mZWF0dXJlcwotIyAtLS0tLS0tLS0tLS0tCi0jIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KLWZ1bmNfZmVhdHVyZXMgKCkKLXsKLSAgICBlY2hvICJob3N0OiAkaG9zdCIKLSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCi0gICAgZWxzZQotICAgICAgZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgotICAgIGZpCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotICAgICAgZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCi0gICAgZWxzZQotICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgotICAgIGZpCi0KLSAgICBleGl0ICQ/Ci19Ci0KLQotIyBmdW5jX2VuYWJsZV90YWcgVEFHTkFNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCi0jIGVuYWJsZSB0aGUgVEFHTkFNRSB0YWcuICBXZSBhbHNvIGFkZCBUQUdOQU1FIHRvIHRoZSBnbG9iYWwgJHRhZ2xpc3QKLSMgdmFyaWFibGUgaGVyZS4KLWZ1bmNfZW5hYmxlX3RhZyAoKQotewotICAgICMgR2xvYmFsIHZhcmlhYmxlOgotICAgIHRhZ25hbWU9JDEKLQotICAgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCi0gICAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgotICAgIHNlZF9leHRyYWN0Y2Y9LyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AKLQotICAgICMgVmFsaWRhdGUgdGFnbmFtZS4KLSAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICAqWyEtX0EtWmEtejAtOSwvXSopCi0gICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgotICAgICAgICA7OwotICAgIGVzYWMKLQotICAgICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCi0gICAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCi0gICAgY2FzZSAkdGFnbmFtZSBpbgotICAgICAgICBDQykgOzsKLSAgICAqKQotICAgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCi0KLQkgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCi0JICAjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAotCSAgIyBhbHNvIGRvbid0IHVzZSBub24tcG9ydGFibGUgcXVvdGVzIHdpdGhpbiBiYWNrcXVvdGVzIHdpdGhpbgotCSAgIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgotCSAgZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAotCSAgZXZhbCAiJGV4dHJhY3RlZGNmIgotICAgICAgICBlbHNlCi0JICBmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLSAgICBlc2FjCi19Ci0KLQotIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCi0jIHJlbGVhc2Ugb2YgbGlidG9vbC4KLWZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQotewotICAgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgotICAgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCi0gICAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKLSRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgotJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgotJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgotX0xUX0VPRgotICAgICAgICBlbHNlCi0gICAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKLSRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KLSRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KLV9MVF9FT0YKLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAotJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgotJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgotJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgotX0xUX0VPRgotICAgICAgZmkKLQotICAgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAotICAgIGZpCi19Ci0KLQotIyBsaWJ0b29sX29wdGlvbnNfcHJlcCBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcmVwYXJhdGlvbiBmb3Igb3B0aW9ucyBwYXJzZWQgYnkgbGlidG9vbC4KLWxpYnRvb2xfb3B0aW9uc19wcmVwICgpCi17Ci0gICAgJGRlYnVnX21vZGUKLQotICAgICMgT3B0aW9uIGRlZmF1bHRzOgotICAgIG9wdF9jb25maWc9ZmFsc2UKLSAgICBvcHRfZGxvcGVuPQotICAgIG9wdF9kcnlfcnVuPWZhbHNlCi0gICAgb3B0X2hlbHA9ZmFsc2UKLSAgICBvcHRfbW9kZT0KLSAgICBvcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKLSAgICBvcHRfcXVpZXQ9ZmFsc2UKLQotICAgIG5vbm9wdD0KLSAgICBwcmVzZXJ2ZV9hcmdzPQotCi0gICAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50Ci0gICAgY2FzZSAkMSBpbgotICAgIGNsZWFufGNsZWF8Y2xlfGNsKQotICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAotICAgICAgOzsKLSAgICBjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQotICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0Ci0gICAgICA7OwotICAgIGV4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCi0gICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKLSAgICAgIDs7Ci0gICAgZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCi0gICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAotICAgICAgOzsKLSAgICBpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQotICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0Ci0gICAgICA7OwotICAgIGxpbmt8bGlufGxpfGwpCi0gICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKLSAgICAgIDs7Ci0gICAgdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCi0gICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIFBhc3MgYmFjayB0aGUgbGlzdCBvZiBvcHRpb25zLgotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9Ci0gICAgbGlidG9vbF9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAotfQotZnVuY19hZGRfaG9vayBmdW5jX29wdGlvbnNfcHJlcCBsaWJ0b29sX29wdGlvbnNfcHJlcAotCi0KLSMgbGlidG9vbF9wYXJzZV9vcHRpb25zIFtBUkddLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcm92aWRlIGhhbmRsaW5nIGZvciBsaWJ0b29sIHNwZWNpZmljIG9wdGlvbnMuCi1saWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIFBlcmZvcm0gb3VyIG93biBsb29wIHRvIGNvbnN1bWUgYXMgbWFueSBvcHRpb25zIGFzIHBvc3NpYmxlIGluCi0gICAgIyBlYWNoIGl0ZXJhdGlvbi4KLSAgICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbwotICAgICAgX0dfb3B0PSQxCi0gICAgICBzaGlmdAotICAgICAgY2FzZSAkX0dfb3B0IGluCi0gICAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9kcnlfcnVuPToKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS1jb25maWcpICAgICAgIGZ1bmNfY29uZmlnIDs7Ci0KLSAgICAgICAgLS1kbG9wZW58LWRsb3BlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgotfSQxIgotICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz06IDs7Ci0KLSAgICAgICAgLS1mZWF0dXJlcykgICAgIGZ1bmNfZmVhdHVyZXMgOzsKLQotICAgICAgICAtLWZpbmlzaCkgICAgICAgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdCA7OwotCi0gICAgICAgIC0taGVscCkgICAgICAgICBvcHRfaGVscD06IDs7Ci0KLSAgICAgICAgLS1oZWxwLWFsbCkgICAgIG9wdF9oZWxwPSc6IGhlbHAtYWxsJyA7OwotCi0gICAgICAgIC0tbW9kZSkgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9tb2RlPSQxCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICQxIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRfR19vcHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRfY21kPWV4aXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRfcXVpZXQ9ZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAtLW5vLXdhcm5pbmdzfC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZz1mYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCi0gICAgICAgICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgIC0tbm8tdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS1zaWxlbnR8LS1xdWlldCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9xdWlldD06Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCi0gICAgICAgICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgIC0tdGFnKSAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF90YWc9JDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0ICQxIgotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19lbmFibGVfdGFnICIkMSIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgIC0tdmVyYm9zZXwtdikgICBvcHRfcXVpZXQ9ZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92ZXJib3NlPToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLQotCSMgQW4gb3B0aW9uIG5vdCBoYW5kbGVkIGJ5IHRoaXMgaG9vayBmdW5jdGlvbjoKLSAgICAgICAgKikJCXNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotCi0KLSAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQotICAgIGxpYnRvb2xfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci19Ci1mdW5jX2FkZF9ob29rIGZ1bmNfcGFyc2Vfb3B0aW9ucyBsaWJ0b29sX3BhcnNlX29wdGlvbnMKLQotCi0KLSMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zIFtBUkddLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAotIyBhcmd1bWVudHMuCi1saWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKLXsKLSAgICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAotICAgIGlmIHRlc3QgMCAtbHQgJCM7IHRoZW4KLSAgICAgIG5vbm9wdD0kMQotICAgICAgc2hpZnQKLSAgICBmaQotCi0gICAgIyBwcmVzZXJ2ZSAtLWRlYnVnCi0gICAgdGVzdCA6ID0gIiRkZWJ1Z19jbWQiIHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgotCi0gICAgY2FzZSAkaG9zdCBpbgotICAgICAgIyBTb2xhcmlzMiBhZGRlZCB0byBmaXggaHR0cDovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNnaT9idWc9MTY0NTIKLSAgICAgICMgc2VlIGFsc286IGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTk3ODgKLSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyogfCAqc29sYXJpczIqIHwgKm9zMiopCi0gICAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCi0gICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCi0gICAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgJG9wdF9oZWxwIHx8IHsKLSAgICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKLSAgICAgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAotCi0gICAgICB0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgXAotICAgICAgICAmJiB0ZXN0IHllcyAhPSAiJGJ1aWxkX29sZF9saWJzIiBcCi0gICAgICAgICYmIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKLQotICAgICAgIyBEYXJ3aW4gc3Vja3MKLSAgICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCi0KLSAgICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCi0gICAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCBleGVjdXRlICE9ICIkb3B0X21vZGUiOyB0aGVuCi0gICAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gJy1kbG9wZW4nIgotICAgICAgICAkRUNITyAiJGhlbHAiIDE+JjIKLSAgICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQotCi0gICAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCi0gICAgICBnZW5lcmljX2hlbHA9JGhlbHAKLSAgICAgIGhlbHA9IlRyeSAnJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0gICAgfQotCi0gICAgIyBQYXNzIGJhY2sgdGhlIHVucGFyc2VkIGFyZ3VtZW50IGxpc3QKLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQotICAgIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci19Ci1mdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMKLQotCi0jIFByb2Nlc3Mgb3B0aW9ucyBhcyBlYXJseSBhcyBwb3NzaWJsZSBzbyB0aGF0IC0taGVscCBhbmQgLS12ZXJzaW9uCi0jIGNhbiByZXR1cm4gcXVpY2tseS4KLWZ1bmNfb3B0aW9ucyAkezErIiRAIn0KLWV2YWwgc2V0IGR1bW15ICIkZnVuY19vcHRpb25zX3Jlc3VsdCI7IHNoaWZ0Ci0KLQotCi0jIyAtLS0tLS0tLS0tLSAjIwotIyMgICAgTWFpbi4gICAgIyMKLSMjIC0tLS0tLS0tLS0tICMjCi0KLW1hZ2ljPSclJSVNQUdJQyB2YXJpYWJsZSUlJScKLW1hZ2ljX2V4ZT0nJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlJwotCi0jIEdsb2JhbCB2YXJpYWJsZXMuCi1leHRyYWN0ZWRfYXJjaGl2ZXM9Ci1leHRyYWN0ZWRfc2VyaWFsPTAKLQotIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0Ci0jIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKLSMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KLWV4ZWNfY21kPQotCi0KLSMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KLWZ1bmNfZmFsbGJhY2tfZWNobyAoKQotewotICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgotJDEKLV9MVEVDSE9fRU9GJwotfQotCi0jIGZ1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2wKLSMgVHJ1ZSBpZmYgc3RkaW4gaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IExpYnRvb2wuIFRoaXMgZnVuY3Rpb24gaXMgb25seQotIyBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0IGRldGVybWluZWQgaW1wb3N0ZXJzLgotZnVuY19nZW5lcmF0ZWRfYnlfbGlidG9vbF9wICgpCi17Ci0gICRHUkVQICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIgPiAvZGV2L251bGwgMj4mMQotfQotCi0jIGZ1bmNfbGFsaWJfcCBmaWxlCi0jIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sICcubGEnIGxpYnJhcnkgb3IgJy5sbycgb2JqZWN0IGZpbGUuCi0jIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0Ci0jIGRldGVybWluZWQgaW1wb3N0ZXJzLgotZnVuY19sYWxpYl9wICgpCi17Ci0gICAgdGVzdCAtZiAiJDEiICYmCi0gICAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwgfCBmdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sX3AKLX0KLQotIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgJy5sYScgbGlicmFyeSBvciAnLmxvJyBvYmplY3QgZmlsZS4KLSMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0Ci0jIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCi0jIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgotIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQotIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiAnZmlsZScgZG9lcyBub3QgZXhpc3QuCi1mdW5jX2xhbGliX3Vuc2FmZV9wICgpCi17Ci0gICAgbGFsaWJfcD1ubwotICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCi0JZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0Ci0JZG8KLQkgICAgcmVhZCBsYWxpYl9wX2xpbmUKLQkgICAgY2FzZSAkbGFsaWJfcF9saW5lIGluCi0JCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKLQkgICAgZXNhYwotCWRvbmUKLQlleGVjIDA8JjUgNTwmLQotICAgIGZpCi0gICAgdGVzdCB5ZXMgPSAiJGxhbGliX3AiCi19Ci0KLSMgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgZmlsZQotIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdAotIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAotIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KLWZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgpCi17Ci0gICAgdGVzdCAtZiAiJDEiICYmCi0gICAgICAkbHRfdHJ1bmNhdGVfYmluIDwgIiQxIiAyPi9kZXYvbnVsbCB8IGZ1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2xfcAotfQotCi0jIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCi0jIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQotIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAotIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KLWZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQotewotICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQotICAgIGNhc2UgJDEgaW4KLSAgICAqLmV4ZSkgOzsKLSAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7Ci0gICAgZXNhYwotICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQotfQotCi0jIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQotIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKLSMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCi0jIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgotZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQotewotICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKLSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlcgotfQotCi0jIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQotIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvciB3cmFwcGVyIGV4ZWN1dGFibGUKLSMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKLSMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCi1mdW5jX2x0d3JhcHBlcl9wICgpCi17Ci0gICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiQxIiB8fCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIgotfQotCi0KLSMgZnVuY19leGVjdXRlX2NtZHMgY29tbWFuZHMgZmFpbF9jbWQKLSMgRXhlY3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMuCi0jIElmIEZBSUxfQ01EIGlzIGdpdmVuLCBldmFsIHRoYXQgdXBvbiBmYWlsdXJlLgotIyBGQUlMX0NNRCBtYXkgcmVhZC1hY2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiB2YXJpYWJsZSBDTUQhCi1mdW5jX2V4ZWN1dGVfY21kcyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKLSAgICBmb3IgY21kIGluICQxOyBkbwotICAgICAgSUZTPSRzcCRubAotICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKLSAgICAgIElGUz0kc2F2ZV9pZnMKLSAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgotICAgIGRvbmUKLSAgICBJRlM9JHNhdmVfaWZzCi19Ci0KLQotIyBmdW5jX3NvdXJjZSBmaWxlCi0jIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCi0jIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KLSMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQotIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCi0jICdGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCi1mdW5jX3NvdXJjZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGNhc2UgJDEgaW4KLSAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKLSAgICAqKQkJLiAiLi8kMSIgOzsKLSAgICBlc2FjCi19Ci0KLQotIyBmdW5jX3Jlc29sdmVfc3lzcm9vdCBQQVRICi0jIFJlcGxhY2UgYSBsZWFkaW5nID0gaW4gUEFUSCB3aXRoIGEgc3lzcm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bwotIyBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLWZ1bmNfcmVzb2x2ZV9zeXNyb290ICgpCi17Ci0gIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kMQotICBjYXNlICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgaW4KLSAgPSopCi0gICAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICA7OwotICBlc2FjCi19Ci0KLSMgZnVuY19yZXBsYWNlX3N5c3Jvb3QgUEFUSAotIyBJZiBQQVRIIGJlZ2lucyB3aXRoIHRoZSBzeXNyb290LCByZXBsYWNlIGl0IHdpdGggPSBhbmQKLSMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KLWZ1bmNfcmVwbGFjZV9zeXNyb290ICgpCi17Ci0gIGNhc2UgJGx0X3N5c3Jvb3Q6JDEgaW4KLSAgPyo6IiRsdF9zeXNyb290IiopCi0gICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCi0gICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSc9JyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICA7OwotICAqKQotICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCi0gICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSQxCi0gICAgOzsKLSAgZXNhYwotfQotCi0jIGZ1bmNfaW5mZXJfdGFnIGFyZwotIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCi0jIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgotIyBPbmx5IGF0dGVtcHQgdGhpcyBpZiB0aGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZQotIyBjb21tYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIGRlZmF1bHQgY29tcGlsZXIuCi0jIGFyZyBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtICdnY2MgLi4uJwotZnVuY19pbmZlcl90YWcgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgotICAgICAgQ0NfcXVvdGVkPQotICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCi0JZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKLSAgICAgIGRvbmUKLSAgICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKLSAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAotICAgICAgY2FzZSAkQCBpbgotICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKLSAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgotICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAotICAgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKSA7OwotICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKLSAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KLSAgICAgICopCi0JZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbwotCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgotCSAgICBldmFsICJgJFNFRCAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKLQkgICAgQ0NfcXVvdGVkPQotCSAgICBmb3IgYXJnIGluICRDQzsgZG8KLQkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCi0JICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKLQkgICAgZG9uZQotCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCi0JICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAotCSAgICBjYXNlICIkQCAiIGluCi0JICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKLQkgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKQotCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCi0JICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KLQkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgotCSAgICAgIHRhZ25hbWU9JHoKLQkgICAgICBicmVhawotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0JZG9uZQotCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCi0JIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAotCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgotCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgotCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggJy0tdGFnJyIKLSMJZWxzZQotIwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi19Ci0KLQotCi0jIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3Qgb3V0cHV0X25hbWUgcGljX25hbWUgbm9ucGljX25hbWUKLSMgQ3JlYXRlIGEgbGlidG9vbCBvYmplY3QgZmlsZSAoYW5hbG9nb3VzIHRvIGEgIi5sYSIgZmlsZSksCi0jIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgotZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAoKQotewotICAgIHdyaXRlX2xpYm9iaj0kMQotICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0gICAgICB3cml0ZV9sb2JqPVwnJDJcJwotICAgIGVsc2UKLSAgICAgIHdyaXRlX2xvYmo9bm9uZQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCi0gICAgICB3cml0ZV9vbGRvYmo9XCckM1wnCi0gICAgZWxzZQotICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKLSAgICBmaQotCi0gICAgJG9wdF9kcnlfcnVuIHx8IHsKLSAgICAgIGNhdCA+JHt3cml0ZV9saWJvYmp9VCA8PEVPRgotIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgotIwotIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCi0jIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KLQotIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgotcGljX29iamVjdD0kd3JpdGVfbG9iagotCi0jIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Ci1ub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCi0KLUVPRgotICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHdyaXRlX2xpYm9iaiIKLSAgICB9Ci19Ci0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRklMRSBOQU1FIEFORCBQQVRIIENPTlZFUlNJT04gSEVMUEVSIEZVTkNUSU9OUyAjCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgQVJHCi0jIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LAotIyBhbmQgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhCi0jIGNvcnJlY3RseSBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtCi0jIGluICRidWlsZCdzICRQQVRILgotIwotIyBBUkcgaXMgdGhlICRidWlsZCBmaWxlIG5hbWUgdG8gYmUgY29udmVydGVkIHRvIHczMiBmb3JtYXQuCi0jIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0LCBhbmQgd2lsbAotIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCi1mdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHNvIHdlCi0gICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKLSAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKLSAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGggZXJyb3IgY29kZSBvZgotICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246Ci0gICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCI7IHRoZW4KLSAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PWAkRUNITyAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIiB8Ci0gICAgICAgICRTRUQgLWUgIiRzZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKLSAgICBlbHNlCi0gICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0KLSAgICBmaQotICBmaQotfQotIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCi0jIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwgYW5kCi0jICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYSBjb3JyZWN0bHkKLSMgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbSBpbiAkYnVpbGQncwotIyAkUEFUSC4gQXNzdW1lcyBBUkcgaGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KLSMKLSMgQVJHIGlzIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB3aW4zMi4KLSMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQuCi0jIFVuY29udmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1lcyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlmIG5vIGRpcmVjdG9yeSBuYW1lcwotIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCi1mdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCi0gIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICBvbGRJRlM9JElGUwotICAgIElGUz06Ci0gICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KLSAgICAgIElGUz0kb2xkSUZTCi0gICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIgotICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgotICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCi0gICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIElGUz0kb2xkSUZTCi0gIGZpCi19Ci0jIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMgotCi0KLSMgZnVuY19jeWdwYXRoIEFSR1MuLi4KLSMgV3JhcHBlciBhcm91bmQgY2FsbGluZyB0aGUgY3lncGF0aCBwcm9ncmFtIHZpYSBMVF9DWUdQQVRILiBUaGlzIGlzIHVzZWQgd2hlbgotIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKLSMgJGJ1aWxkIGlzIE1TWVMgYW5kICRob3N0IGlzIEN5Z3dpbiwgb3IgKDMpICRidWlsZCBpcyBDeWd3aW4uIEluIGNhc2UgKDEpIG9yCi0jICgyKSwgcmV0dXJucyB0aGUgQ3lnd2luIGZpbGUgbmFtZSBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0Ci0jIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKLSMgZnJvbSAkYnVpbGQncyAqbml4IG9yIE1TWVMgZm9ybWF0KS4gSW4gY2FzZSAoMyksIHJldHVybnMgdGhlIHczMiBmaWxlIG5hbWUKLSMgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dCBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluCi0jIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KLSMKLSMgQVJHUyBhcmUgcGFzc2VkIHRvIGN5Z3BhdGgsIHdpdGggdGhlIGxhc3Qgb25lIGJlaW5nIHRoZSBmaWxlIG5hbWUgb3IgcGF0aCB0bwotIyBiZSBjb252ZXJ0ZWQuCi0jCi0jIFNwZWNpZnkgdGhlIGFic29sdXRlICpuaXggKG9yIHczMikgbmFtZSB0byBjeWdwYXRoIGluIHRoZSBMVF9DWUdQQVRICi0jIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgotZnVuY19jeWdwYXRoICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCi0gICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KLSAgICAgICMgb24gZmFpbHVyZSwgZW5zdXJlIHJlc3VsdCBpcyBlbXB0eQotICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KLSAgICBmaQotICBlbHNlCi0gICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KLSAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogJyRMVF9DWUdQQVRIJyIKLSAgZmkKLX0KLSNlbmQ6IGZ1bmNfY3lncGF0aAotCi0KLSMgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIG9yIHBhdGggQVJHIGZyb20gTVNZUyBmb3JtYXQgdG8gdzMyIGZvcm1hdC4gIFJldHVybgotIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgotZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAotICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8Ci0gICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJHNlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAotfQotI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEgQVJHMgotIyBWZXJpZnkgdGhhdCBBUkcxIChhIGZpbGUgbmFtZSBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0Ci0jIGZvcm1hdCBpbiBBUkcyLiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlIChyZXNldHRpbmcKLSMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgotZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCi0gICAgZnVuY19lcnJvciAiICAnJDEnIgotICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgotICAgICMgRmFsbGJhY2s6Ci0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCi0gIGZpCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjawotCi0KLSMgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgRlJPTV9QQVRIU0VQIFRPX1BBVEhTRVAgRlJPTV9QQVRIIFRPX1BBVEgKLSMgVmVyaWZ5IHRoYXQgRlJPTV9QQVRIIChhIHBhdGggaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAotIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCi0jIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCi1mdW5jX2NvbnZlcnRfcGF0aF9jaGVjayAoKQotewotICAkZGVidWdfY21kCi0KLSAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgotICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgotICAgIGZ1bmNfZXJyb3IgIiAgJyQzJyIKLSAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKLSAgICAjIEZhbGxiYWNrLiAgVGhpcyBpcyBhIGRlbGliZXJhdGVseSBzaW1wbGlzdGljICJjb252ZXJzaW9uIiBhbmQKLSAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCi0gICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgotICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzPSJzfCQxfCQyfGciCi0gICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8Ci0gICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAotICAgIGVsc2UKLSAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMwotICAgIGZpCi0gIGZpCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjawotCi0KLSMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCi0jIE1vZGlmaWVzIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCBieSBwcmVwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEZST05UUEFUCi0jIGFuZCBhcHBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgQkFDS1BBVC4KLWZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQotewotICAkZGVidWdfY21kCi0KLSAgY2FzZSAkNCBpbgotICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQKLSAgICA7OwotICBlc2FjCi0gIGNhc2UgJDQgaW4KLSAgJDIgKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgotICAgIDs7Ci0gIGVzYWMKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcAotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgaW52b2tlZCB2aWEgJyR0b19ob3N0X2ZpbGVfY21kIEFSRycKLSMKLSMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KLSMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi0KLQotIyBmdW5jX3RvX2hvc3RfZmlsZSBBUkcKLSMgQ29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAotIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX3RvX2hvc3RfZmlsZSAoKQotewotICAkZGVidWdfY21kCi0KLSAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgotfQotIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKLQotCi0jIGZ1bmNfdG9fdG9vbF9maWxlIEFSRyBMQVpZCi0jIGNvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB0b29sY2hhaW4gZm9ybWF0LiBSZXR1cm4KLSMgcmVzdWx0IGluIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElmIHRoZSBjb252ZXJzaW9uIGluIHVzZSBpcyBsaXN0ZWQKLSMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCi1mdW5jX3RvX3Rvb2xfZmlsZSAoKQotewotICAkZGVidWdfY21kCi0KLSAgY2FzZSAsJDIsIGluCi0gICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCi0gICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgICR0b190b29sX2ZpbGVfY21kICIkMSIKLSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0Ci0gICAgICA7OwotICBlc2FjCi19Ci0jIGVuZCBmdW5jX3RvX3Rvb2xfZmlsZQotCi0KLSMgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCBBUkcKLSMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQotewotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX25vb3AKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIEFSRwotIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKLSMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KLSMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQKLSAgZmkKLSAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0KLQotIyBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyIEFSRwotIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCi0jIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIGJlY2F1c2UgJGJ1aWxkIGlzIGN5Z3dpbiwgd2UgY2FsbCAidGhlIiBjeWdwYXRoIGluICRQQVRIOyBubyBuZWVkIHRvIHVzZQotICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCi0gIGZpCi0gIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCi0KLQotIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyIEFSRwotIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQKLSMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgotICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQKLSAgZmkKLSAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luIEFSRwotIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KLSMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCi0gICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgotICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAotICBmaQotICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgotfQotIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KLQotCi0jIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQKLSMgaW4gYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdAotIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCi0gICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCi0gICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0Ci0gIGZpCi0gIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBpbnZva2VkIHZpYSAnJHRvX2hvc3RfcGF0aF9jbWQgQVJHJwotIwotIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgotIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCi0jCi0jIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gIElmCi0jIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dAotIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCi0jCi0jIEFsbCBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBuYW1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb246Ci0jICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKLSMgICBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgICAgICA6IGZ1bmNfY29udmVydF9wYXRoX1hfdG9fWSAoKQotIyB3aGVyZSwgZm9yIGFueSBnaXZlbiAkYnVpbGQvJGhvc3QgY29tYmluYXRpb24gdGhlICdYX3RvX1knIHZhbHVlIGlzIHRoZQotIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKLSMgdGhlIHR3byBuZXcgZnVuY3Rpb25zIG11c3QgZm9sbG93IHRoaXMgcGF0dGVybiwgb3IgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKLSMgd2lsbCBicmVhay4KLQotCi0jIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCi0jIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQotIyBhcHByb3ByaWF0ZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mICR0b19ob3N0X2ZpbGVfY21kLgotdG9faG9zdF9wYXRoX2NtZD0KLWZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBpZiB0ZXN0IC16ICIkdG9faG9zdF9wYXRoX2NtZCI7IHRoZW4KLSAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCi0gICAgdG9faG9zdF9wYXRoX2NtZD1mdW5jX2NvbnZlcnRfcGF0aF8kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gIGZpCi19Ci0KLQotIyBmdW5jX3RvX2hvc3RfcGF0aCBBUkcKLSMgQ29udmVydHMgdGhlIHBhdGggQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKLSMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgotZnVuY190b19ob3N0X3BhdGggKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCi0gICR0b19ob3N0X3BhdGhfY21kICIkMSIKLX0KLSMgZW5kIGZ1bmNfdG9faG9zdF9wYXRoCi0KLQotIyBmdW5jX2NvbnZlcnRfcGF0aF9ub29wIEFSRwotIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCi17Ci0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQotfQotIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAotCi0KLSMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCi0jIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKLSMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KLSMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgotZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUwotICAgICMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmU7IGN5Z3BhdGggdHVybnMgdGhlbSBpbnRvICcuOycgYW5kICc7Lic7Ci0gICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCi0gICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQKLSAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCi0gICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyCi0KLQotIyBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyIEFSRwotIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgotIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6Ci0gICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLW0gLXAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxImAKLSAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCi0gICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgQVJHCi0jIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQgYW5kCi0jIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKLSAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQKLSAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCi0gICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luIEFSRwotIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCi0jIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6Ci0gICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCi0gICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCi0gICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCi0gIGZpCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbgotCi0KLSMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiBBUkcKLSMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQgaW4gYQotIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCi0jIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KLSAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCi0gICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KLSAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgotICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCi0gICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCi0gIGZpCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCi0KLQotIyBmdW5jX2RsbF9kZWZfcCBGSUxFCi0jIFRydWUgaWZmIEZJTEUgaXMgYSBXaW5kb3dzIERMTCAnLmRlZicgZmlsZS4KLSMgS2VlcCBpbiBzeW5jIHdpdGggX0xUX0RMTF9ERUZfUCBpbiBsaWJ0b29sLm00Ci1mdW5jX2RsbF9kZWZfcCAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY19kbGxfZGVmX3BfdG1wPWAkU0VEIC1uIFwKLSAgICAtZSAncy9eWwkgXSovLycgXAotICAgIC1lICcvXlwoOy4qXCkqJC9kJyBcCi0gICAgLWUgJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJyBcCi0gICAgLWUgcSBcCi0gICAgIiQxImAKLSAgdGVzdCBERUYgPSAiJGZ1bmNfZGxsX2RlZl9wX3RtcCIKLX0KLQotCi0jIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgotZnVuY19tb2RlX2NvbXBpbGUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgotICAgIGJhc2VfY29tcGlsZT0KLSAgICBzcmNmaWxlPSRub25vcHQgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgotICAgIHN1cHByZXNzX29wdD15ZXMKLSAgICBzdXBwcmVzc19vdXRwdXQ9Ci0gICAgYXJnX21vZGU9bm9ybWFsCi0gICAgbGlib2JqPQotICAgIGxhdGVyPQotICAgIHBpZV9mbGFnPQotCi0gICAgZm9yIGFyZwotICAgIGRvCi0gICAgICBjYXNlICRhcmdfbW9kZSBpbgotICAgICAgYXJnICApCi0JIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQotCWxhc3Rhcmc9JGFyZwotCWFyZ19tb2RlPW5vcm1hbAotCTs7Ci0KLSAgICAgIHRhcmdldCApCi0JbGlib2JqPSRhcmcKLQlhcmdfbW9kZT1ub3JtYWwKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIG5vcm1hbCApCi0JIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgotCWNhc2UgJGFyZyBpbgotCS1vKQotCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgY2Fubm90IHNwZWNpZnkgJy1vJyBtb3JlIHRoYW4gb25jZSIKLQkgIGFyZ19tb2RlPXRhcmdldAotCSAgY29udGludWUKLQkgIDs7Ci0KLQktcGllIHwgLWZwaWUgfCAtZlBJRSkKLSAgICAgICAgICBmdW5jX2FwcGVuZCBwaWVfZmxhZyAiICRhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQotCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCi0JICBmdW5jX2FwcGVuZCBsYXRlciAiICRhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQotCS1uby1zdXBwcmVzcykKLQkgIHN1cHByZXNzX29wdD1ubwotCSAgY29udGludWUKLQkgIDs7Ci0KLQktWGNvbXBpbGVyKQotCSAgYXJnX21vZGU9YXJnICAjICB0aGUgbmV4dCBvbmUgZ29lcyBpbnRvIHRoZSAiYmFzZV9jb21waWxlIiBhcmcgbGlzdAotCSAgY29udGludWUgICAgICAjICBUaGUgY3VycmVudCAic3JjZmlsZSIgd2lsbCBlaXRoZXIgYmUgcmV0YWluZWQgb3IKLQkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCi0KLQktV2MsKikKLQkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKLQkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgbGFzdGFyZz0KLQkgIHNhdmVfaWZzPSRJRlM7IElGUz0sCi0JICBmb3IgYXJnIGluICRhcmdzOyBkbwotCSAgICBJRlM9JHNhdmVfaWZzCi0JICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgotCSAgZG9uZQotCSAgSUZTPSRzYXZlX2lmcwotCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKLQkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCi0JICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KLQkgIGZ1bmNfYXBwZW5kIGJhc2VfY29tcGlsZSAiICRsYXN0YXJnIgotCSAgY29udGludWUKLQkgIDs7Ci0KLQkqKQotCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgotCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCi0JICAjCi0JICBsYXN0YXJnPSRzcmNmaWxlCi0JICBzcmNmaWxlPSRhcmcKLQkgIDs7Ci0JZXNhYyAgIyAgY2FzZSAkYXJnCi0JOzsKLSAgICAgIGVzYWMgICAgIyAgY2FzZSAkYXJnX21vZGUKLQotICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KLSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgotICAgIGRvbmUgIyBmb3IgYXJnCi0KLSAgICBjYXNlICRhcmdfbW9kZSBpbgotICAgIGFyZykKLSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKLSAgICAgIDs7Ci0gICAgdGFyZ2V0KQotICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoICctbyciCi0gICAgICA7OwotICAgICopCi0gICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCi0gICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7Ci0JZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCi0JbGlib2JqPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotICAgICAgfQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgotICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCi0gICAgY2FzZSAkbGlib2JqIGluCi0gICAgKi5bY0NGU2lmbXNvXSB8IFwKLSAgICAqLmFkYSB8ICouYWRiIHwgKi5hZHMgfCAqLmFzbSB8IFwKLSAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCi0gICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICouZ28gfCAqLm9iaiB8ICouc3ggfCAqLmN1IHwgKi5jdXApCi0gICAgICBmdW5jX3hmb3JtICIkbGlib2JqIgotICAgICAgbGlib2JqPSRmdW5jX3hmb3JtX3Jlc3VsdAotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRsaWJvYmogaW4KLSAgICAqLmxvKSBmdW5jX2xvMm8gIiRsaWJvYmoiOyBvYmo9JGZ1bmNfbG8yb19yZXN1bHQgOzsKLSAgICAqKQotICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gJyRsaWJvYmonIgotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCi0KLSAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLXNoYXJlZCkKLQl0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCi0JICB8fCBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbm5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgotCWJ1aWxkX29sZF9saWJzPW5vCi0JY29udGludWUKLQk7OwotCi0gICAgICAtc3RhdGljKQotCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCWJ1aWxkX29sZF9saWJzPXllcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXByZWZlci1waWMpCi0JcGljX21vZGU9eWVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtcHJlZmVyLW5vbi1waWMpCi0JcGljX21vZGU9bm8KLQljb250aW51ZQotCTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotCi0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxpYm9iaiIKLSAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiIFwKLSAgICAgICYmICRFQ0hPICJYJGxpYm9iaiIgfCAkR1JFUCAnW11+I14qe307PD4/IiciJyInCSAmKCl8YCRbXScgXAotICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSAnJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCi0gICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCi0gICAgb2JqbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLSAgICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0gICAgbG9iaj0keGRpciRvYmpkaXIvJG9iam5hbWUKLQotICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCi0KLSAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgotICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KLSAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgotICAgIGVsc2UKLSAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKLSAgICBmaQotCi0gICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQotICAgICAgcGljX21vZGU9ZGVmYXVsdAotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCBubyA9ICIkcGljX21vZGUiICYmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KLSAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAotICAgICAgcGljX21vZGU9ZGVmYXVsdAotICAgIGZpCi0KLSAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcwotICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYwotICAgIGlmIHRlc3Qgbm8gPSAiJGNvbXBpbGVyX2NfbyI7IHRoZW4KLSAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJG9iamV4dAotICAgICAgbG9ja2ZpbGU9JG91dHB1dF9vYmoubG9jawotICAgIGVsc2UKLSAgICAgIG91dHB1dF9vYmo9Ci0gICAgICBuZWVkX2xvY2tzPW5vCi0gICAgICBsb2NrZmlsZT0KLSAgICBmaQotCi0gICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKLSAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCi0gICAgaWYgdGVzdCB5ZXMgPSAiJG5lZWRfbG9ja3MiOyB0aGVuCi0gICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCi0JZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKLQlzbGVlcCAyCi0gICAgICBkb25lCi0gICAgZWxpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiOyB0aGVuCi0gICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCi0JJEVDSE8gIlwKLSoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6Ci1gY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKLQotVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQotdGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoteW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKLXJlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKLWF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCi1jb21waWxlci4iCi0KLQkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0Ci0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQotICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgotICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCi0gICAgZmkKLQotICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKLSAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJGxvY2tmaWxlIgotICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1Ci0KLSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCi0gICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0KLSAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KLSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotICAgICAgIyBXaXRob3V0IHRoaXMgYXNzaWdubWVudCwgYmFzZV9jb21waWxlIGdldHMgZW1wdGllZC4KLSAgICAgIGZic2RfaGlkZW91c19zaF9idWc9JGJhc2VfY29tcGlsZQotCi0gICAgICBpZiB0ZXN0IG5vICE9ICIkcGljX21vZGUiOyB0aGVuCi0JY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgotICAgICAgZWxzZQotCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKLQljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKLSAgICAgIGZpCi0KLSAgICAgIGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2JqZGlyIgotCi0gICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KLQkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKLQlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJGxvYmoiCi0gICAgICBmaQotCi0gICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCi0gICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKLQotICAgICAgaWYgdGVzdCB3YXJuID0gIiRuZWVkX2xvY2tzIiAmJgotCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgotCSRFQ0hPICJcCi0qKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKLWBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAotCi1idXQgaXQgc2hvdWxkIGNvbnRhaW46Ci0kc3JjZmlsZQotCi1UaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCi10ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCi15b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQotcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgotYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKLWNvbXBpbGVyLiIKLQotCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCi0KLSAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCi0gICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRsb2JqIjsgdGhlbgotCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJGxvYmoiJyBcCi0JICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJwotICAgICAgZmkKLQotICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgotICAgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHByZXNzX29wdCI7IHRoZW4KLQlzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRwaWNfbW9kZSI7IHRoZW4KLQkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCi0JY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUkcGllX2ZsYWciCi0gICAgICBlbHNlCi0JY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRjb21waWxlcl9jX28iOyB0aGVuCi0JZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCi0gICAgICBmaQotCi0gICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KLSAgICAgIGZ1bmNfYXBwZW5kIGNvbW1hbmQgIiRzdXBwcmVzc19vdXRwdXQiCi0gICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCi0gICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCi0KLSAgICAgIGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyIgJiYKLQkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KLQkkRUNITyAiXAotKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6Ci1gY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKLQotYnV0IGl0IHNob3VsZCBjb250YWluOgotJHNyY2ZpbGUKLQotVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQotdGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoteW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKLXJlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKLWF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCi1jb21waWxlci4iCi0KLQkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0Ci0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQotCi0gICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAotICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgotCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKLQkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAkb3B0X2RyeV9ydW4gfHwgewotICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKLQotICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAotICAgICAgaWYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCi0JcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKLSAgICAgICAgJFJNICIkbG9ja2ZpbGUiCi0gICAgICBmaQotICAgIH0KLQotICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotfQotCi0kb3B0X2hlbHAgfHwgewotICB0ZXN0IGNvbXBpbGUgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KLX0KLQotZnVuY19tb2RlX2hlbHAgKCkKLXsKLSAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KLSAgICBjYXNlICRvcHRfbW9kZSBpbgotICAgICAgIiIpCi0gICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cwotICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCi0gICAgICAgIGZ1bmNfaGVscAotICAgICAgICA7OwotCi0gICAgICBjbGVhbikKLSAgICAgICAgJEVDSE8gXAotIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KLQotUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLQotUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCi0odHlwaWNhbGx5ICcvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzICctZicpIHRvIGJlIHBhc3NlZAotdG8gUk0uCi0KLUlmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKLXdpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKLSAgICAgICAgOzsKLQotICAgICAgY29tcGlsZSkKLSAgICAgICRFQ0hPIFwKLSJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCi0KLUNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KLQotVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6Ci0KLSAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCi0gIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcwotICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQotICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKLSAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgJy5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZwotICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgJy5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZwotICAtV2MsRkxBRyAgICAgICAgICBwYXNzIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCi0KLUNPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhICdzdGFuZGFyZCcgb2JqZWN0IGZpbGUKLWZyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCi0KLVRoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQotU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4ICcuYycgd2l0aCB0aGUKLWxpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgJy5sbycuIgotICAgICAgICA7OwotCi0gICAgICBleGVjdXRlKQotICAgICAgICAkRUNITyBcCi0iVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZXhlY3V0ZSBDT01NQU5EIFtBUkdTXS4uLgotCi1BdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KLQotVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6Ci0KLSAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKLQotVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gJy1kbG9wZW4nCi1mbGFncy4KLQotSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAotaW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5Ci1kaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KLQotVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCi0gICAgICAgIDs7Ci0KLSAgICAgIGZpbmlzaCkKLSAgICAgICAgJEVDSE8gXAotIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgotCi1Db21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgotCi1FYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgotCi1UaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKLXRoZSAnLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCi0gICAgICAgIDs7Ci0KLSAgICAgIGluc3RhbGwpCi0gICAgICAgICRFQ0hPIFwKLSJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgotCi1JbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KLQotSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCi1laXRoZXIgdGhlICdpbnN0YWxsJyBvciAnY3AnIHByb2dyYW0uCi0KLVRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgotCi0gIC1pbnN0LXByZWZpeC1kaXIgUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgotCi1UaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQotQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCi0gICAgICAgIDs7Ci0KLSAgICAgIGxpbmspCi0gICAgICAgICRFQ0hPIFwKLSJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgotCi1MaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCi1jcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgotCi1MSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKLWEgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgotCi1UaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKLQotICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKLSAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCi0gIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCi0gICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKLSAgLWRsb3BlbiBGSUxFICAgICAgJy1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKLSAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKLSAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKLSAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCi0gIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAotICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKLSAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcwotICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQotICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKLSAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKLSAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCi0gIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scwotICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKLSAgLW9iamVjdGxpc3QgRklMRSAgdXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKLSAgLW9zMmRsbG5hbWUgTkFNRSAgZm9yY2UgYSBzaG9ydCBETEwgbmFtZSBvbiBPUy8yIChubyBlZmZlY3Qgb24gb3RoZXIgT1NlcykKLSAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCi0gICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKLSAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KLSAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgotICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcwotICAtc2hhcmVkICAgICAgICAgICBvbmx5IGRvIGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcwotICAtc2hyZXh0IFNVRkZJWCAgICBvdmVycmlkZSB0aGUgc3RhbmRhcmQgc2hhcmVkIGxpYnJhcnkgZmlsZSBleHRlbnNpb24KLSAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKLSAgLXN0YXRpYy1saWJ0b29sLWxpYnMKLSAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKLSAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQotICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKLSAgLVdjLEZMQUcKLSAgLVhjb21waWxlciBGTEFHICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKLSAgLVdsLEZMQUcKLSAgLVhsaW5rZXIgRkxBRyAgICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgbGlua2VyCi0gIC1YQ0NsaW5rZXIgRkxBRyAgIHBhc3MgbGluay1zcGVjaWZpYyBGTEFHIHRvIHRoZSBjb21waWxlciBkcml2ZXIgKENDKQotCi1BbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoICctJykgYXJlIGlnbm9yZWQuCi0KLUV2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiAnLmxhJyBhcmUKLXRyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5Ci1vYmplY3QgZmlsZXMuCi0KLUlmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluICcubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCi1vbmx5IGxpYnJhcnkgb2JqZWN0cyAoJy5sbycgZmlsZXMpIG1heSBiZSBzcGVjaWZpZWQsIGFuZCAnLXJwYXRoJyBpcwotcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KLQotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiAnLmEnIG9yICcubGliJywgdGhlbiBhIHN0YW5kYXJkIGxpYnJhcnkgaXMgY3JlYXRlZAotdXNpbmcgJ2FyJyBhbmQgJ3JhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgJ2xpYicuCi0KLUlmIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5sbycgb3IgJy4kb2JqZXh0JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKLWlzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCi0gICAgICAgIDs7Ci0KLSAgICAgIHVuaW5zdGFsbCkKLSAgICAgICAgJEVDSE8gXAotIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCi0KLVJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgotCi1STSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKLSh0eXBpY2FsbHkgJy9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgJy1mJykgdG8gYmUgcGFzc2VkCi10byBSTS4KLQotSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggaXQgYXJlIGRlbGV0ZWQuCi1PdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCi0gICAgICAgIDs7Ci0KLSAgICAgICopCi0gICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSAnJG9wdF9tb2RlJyIKLSAgICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBlY2hvCi0gICAgJEVDSE8gIlRyeSAnJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgotfQotCi0jIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKLWlmICRvcHRfaGVscDsgdGhlbgotICBpZiB0ZXN0IDogPSAiJG9wdF9oZWxwIjsgdGhlbgotICAgIGZ1bmNfbW9kZV9oZWxwCi0gIGVsc2UKLSAgICB7Ci0gICAgICBmdW5jX2hlbHAgbm9leGl0Ci0gICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbwotCWZ1bmNfbW9kZV9oZWxwCi0gICAgICBkb25lCi0gICAgfSB8ICRTRUQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCi0gICAgewotICAgICAgZnVuY19oZWxwIG5vZXhpdAotICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KLQllY2hvCi0JZnVuY19tb2RlX2hlbHAKLSAgICAgIGRvbmUKLSAgICB9IHwKLSAgICAkU0VEICcxZAotICAgICAgL15XaGVuIHJlcG9ydGluZy8sL15SZXBvcnQvewotCUgKLQlkCi0gICAgICB9Ci0gICAgICAkeAotICAgICAgL2luZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzL2QKLSAgICAgIC9tb3JlIGRldGFpbGVkIC4qTU9ERS9kCi0gICAgICBzL15Vc2FnZTouKi0tbW9kZT1cKFteIF0qXCkgLiovRGVzY3JpcHRpb24gb2YgXDEgbW9kZTovJwotICBmaQotICBleGl0ICQ/Ci1maQotCi0KLSMgZnVuY19tb2RlX2V4ZWN1dGUgYXJnLi4uCi1mdW5jX21vZGVfZXhlY3V0ZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCi0gICAgY21kPSRub25vcHQKLSAgICB0ZXN0IC16ICIkY21kIiAmJiBcCi0gICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgotCi0gICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KLSAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KLSAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCi0JfHwgZnVuY19mYXRhbF9oZWxwICInJGZpbGUnIGlzIG5vdCBhIGZpbGUiCi0KLSAgICAgIGRpcj0KLSAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgICoubGEpCi0JZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgotCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotCi0JIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KLQlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAotCSAgfHwgZnVuY19mYXRhbF9oZWxwICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCi0JIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCi0JZGxuYW1lPQotCWxpYnJhcnlfbmFtZXM9Ci0JZnVuY19zb3VyY2UgIiRmaWxlIgotCi0JIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCi0JaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KLQkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KLQkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCi0JICAgIGZ1bmNfd2FybmluZyAiJyRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoICctZXhwb3J0LWR5bmFtaWMnIgotCSAgY29udGludWUKLQlmaQotCi0JZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCi0JZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0KLQlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KLQkgIGZ1bmNfYXBwZW5kIGRpciAiLyRvYmpkaXIiCi0JZWxzZQotCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kICckZGxuYW1lJyBpbiAnJGRpcicgb3IgJyRkaXIvJG9iamRpciciCi0JICBmaQotCWZpCi0JOzsKLQotICAgICAgKi5sbykKLQkjIEp1c3QgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLmxvIGZpbGUuCi0JZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCi0JZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0JOzsKLQotICAgICAgKikKLQlmdW5jX3dhcm5pbmcgIictZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiCi0JY29udGludWUKLQk7OwotICAgICAgZXNhYwotCi0gICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCi0gICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCi0gICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9JGFic2RpcgotCi0gICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgotICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KLQlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCi0gICAgICBlbHNlCi0JZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCi0gICAgICBmaQotICAgIGRvbmUKLQotICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgotICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9JG1hZ2ljCi0KLSAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCi0gICAgYXJncz0KLSAgICBmb3IgZmlsZQotICAgIGRvCi0gICAgICBjYXNlICRmaWxlIGluCi0gICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKLSAgICAgICopCi0JIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgotCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KLQkgIGZ1bmNfc291cmNlICIkZmlsZSIKLQkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCi0JICBmaWxlPSRwcm9nZGlyLyRwcm9ncmFtCi0JZWxpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgotCSAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCi0JICBmdW5jX3NvdXJjZSAiJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgotCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KLQkgIGZpbGU9JHByb2dkaXIvJHByb2dyYW0KLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgotICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgotICAgIGRvbmUKLQotICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgotICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KLSAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCi0JZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgotICAgICAgZmkKLSAgICAgICRFQ0hPICIkY21kJGFyZ3MiCi0gICAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgICBlbHNlCi0gICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLQkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KLQlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCi0gICAgICBmaQotCi0gICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKLSAgICAgIGRvCi0JZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KLSAgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgotCSAgICAgIGVsc2UKLQkJJGx0X3Vuc2V0ICRsdF92YXIKLQkgICAgICBmaSIKLSAgICAgIGRvbmUKLQotICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgotICAgICAgZXhlY19jbWQ9XCRjbWQkYXJncwotICAgIGZpCi19Ci0KLXRlc3QgZXhlY3V0ZSA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQotCi0KLSMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KLWZ1bmNfbW9kZV9maW5pc2ggKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBsaWJzPQotICAgIGxpYmRpcnM9Ci0gICAgYWRtaW5jbWRzPQotCi0gICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsxKyIkQCJ9Ci0gICAgZG8KLSAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCi0JZnVuY19hcHBlbmQgbGliZGlycyAiICRvcHQiCi0KLSAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KLQlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgotCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCi0JZWxzZQotCSAgZnVuY193YXJuaW5nICInJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCWZpCi0KLSAgICAgIGVsc2UKLQlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50ICckb3B0JyIKLSAgICAgIGZpCi0gICAgZG9uZQotCi0gICAgaWYgdGVzdCAtbiAiJGxpYnMiOyB0aGVuCi0gICAgICBpZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4KLSAgICAgICAgc3lzcm9vdF9yZWdleD1gJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKLSAgICAgICAgc3lzcm9vdF9jbWQ9InMvXChbICddXCkkc3lzcm9vdF9yZWdleC9cMS9nOyIKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzcm9vdF9jbWQ9Ci0gICAgICBmaQotCi0gICAgICAjIFJlbW92ZSBzeXNyb290IHJlZmVyZW5jZXMKLSAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgotICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbwotICAgICAgICAgIGVjaG8gInJlbW92aW5nIHJlZmVyZW5jZXMgdG8gJGx0X3N5c3Jvb3QgYW5kICc9JyBwcmVmaXhlcyBmcm9tICRsaWIiCi0gICAgICAgIGRvbmUKLSAgICAgIGVsc2UKLSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKLSAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KLQkgICRTRUQgLWUgIiRzeXNyb290X2NtZCBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAotCSAgICA+ICR0bXBkaXIvdG1wLWxhCi0JICBtdiAtZiAkdG1wZGlyL3RtcC1sYSAkbGliCi0JZG9uZQotICAgICAgICAke1JNfXIgIiR0bXBkaXIiCi0gICAgICBmaQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgotICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KLQlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCi0JICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgotCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcwotJyIkY21kIiciJwotCWZpCi0JaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgotCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgotCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKLQkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKLSAgICAgICAkY21kcyIKLQlmaQotICAgICAgZG9uZQotICAgIGZpCi0KLSAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KLSAgICAkb3B0X3F1aWV0ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUwotCi0gICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KLSAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCi0gICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbwotCSRFQ0hPICIgICAkbGliZGlyIgotICAgICAgZG9uZQotICAgICAgZWNobwotICAgICAgZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCi0gICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKLSAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgJy1MTElCRElSJyIKLSAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKLSAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgJyRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLQllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgJyRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCi0JZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLQlsaWJkaXI9TElCRElSCi0JZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotCi0JJEVDSE8gIiAgIC0gdXNlIHRoZSAnJGZsYWcnIGxpbmtlciBmbGFnIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCi0JJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0JZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byAnL2V0Yy9sZC5zby5jb25mJyIKLSAgICAgIGZpCi0gICAgICBlY2hvCi0KLSAgICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgotICAgICAgY2FzZSAkaG9zdCBpbgotCXNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCi0JICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgotCSAgZWNobyAicGFnZXMuIgotCSAgOzsKLQkqKQotCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCi0JICA7OwotICAgICAgZXNhYwotICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSAgICBmaQotICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotfQotCi10ZXN0IGZpbmlzaCA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9Ci0KLQotIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KLWZ1bmNfbW9kZV9pbnN0YWxsICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgotICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgotICAgIGlmIHRlc3QgIiRTSEVMTCIgPSAiJG5vbm9wdCIgfHwgdGVzdCAvYmluL3NoID0gIiRub25vcHQiIHx8Ci0gICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCi0gICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wqKSA6OzsgKikgZmFsc2U7OyBlc2FjCi0gICAgdGhlbgotICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgotICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKLSAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKLSAgICAgIGFyZz0kMQotICAgICAgc2hpZnQKLSAgICBlbHNlCi0gICAgICBpbnN0YWxsX3Byb2c9Ci0gICAgICBhcmc9JG5vbm9wdAotICAgIGZpCi0KLSAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCi0gICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0gICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0gICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0kaW5zdGFsbF9wcm9nCi0gICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgotICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7Ci0gICAgICAqKSBpbnN0YWxsX2NwPWZhbHNlIDs7Ci0gICAgZXNhYwotCi0gICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgotICAgIGRlc3Q9Ci0gICAgZmlsZXM9Ci0gICAgb3B0cz0KLSAgICBwcmV2PQotICAgIGluc3RhbGxfdHlwZT0KLSAgICBpc2Rpcj1mYWxzZQotICAgIHN0cmlwbWU9Ci0gICAgbm9fbW9kZT06Ci0gICAgZm9yIGFyZwotICAgIGRvCi0gICAgICBhcmcyPQotICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCi0JZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKLQlkZXN0PSRhcmcKLQljb250aW51ZQotICAgICAgZmkKLQotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtZCkgaXNkaXI9OiA7OwotICAgICAgLWYpCi0JaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQotCSAgcHJldj0kYXJnCi0JZmkKLQk7OwotICAgICAgLWcgfCAtbSB8IC1vKQotCXByZXY9JGFyZwotCTs7Ci0gICAgICAtcykKLQlzdHJpcG1lPSIgLXMiCi0JY29udGludWUKLQk7OwotICAgICAgLSopCi0JOzsKLSAgICAgICopCi0JIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgotCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotCSAgaWYgdGVzdCBYLW0gPSAiWCRwcmV2IiAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgotCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKLQkgICAgbm9fbW9kZT1mYWxzZQotCSAgZmkKLQkgIHByZXY9Ci0JZWxzZQotCSAgZGVzdD0kYXJnCi0JICBjb250aW51ZQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0gICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0gICAgICBpZiB0ZXN0IC1uICIkYXJnMiI7IHRoZW4KLQlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKLSAgICAgIGZpCi0gICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgIGRvbmUKLQotICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCi0KLSAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAotICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgJyRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCi0KLSAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgotICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQotCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiCi0JZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLXogIiRkZXN0IjsgdGhlbgotCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCi0gICAgICBlbHNlCi0JZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KLSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0IgotICAgIGRlc3Q9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCi0gICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCi0gICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPToKLSAgICBpZiAkaXNkaXI7IHRoZW4KLSAgICAgIGRlc3RkaXI9JGRlc3QKLSAgICAgIGRlc3RuYW1lPQotICAgIGVsc2UKLSAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKLSAgICAgIGRlc3RkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLSAgICAgIGRlc3RuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCi0gICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCi0gICAgICBzZXQgZHVtbXkgJGZpbGVzOyBzaGlmdAotICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKLQlmdW5jX2ZhdGFsX2hlbHAgIickZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgotICAgIGZpCi0gICAgY2FzZSAkZGVzdGRpciBpbgotICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKLSAgICAqKQotICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwotCWNhc2UgJGZpbGUgaW4KLQkqLmxvKSA7OwotCSopCi0JICBmdW5jX2ZhdGFsX2hlbHAgIickZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKLQkgIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKLSAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9JG1hZ2ljCi0KLSAgICBzdGF0aWNsaWJzPQotICAgIGZ1dHVyZV9saWJkaXJzPQotICAgIGN1cnJlbnRfbGliZGlycz0KLSAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCi0KLSAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCi0gICAgICBjYXNlICRmaWxlIGluCi0gICAgICAqLiRsaWJleHQpCi0JIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KLQlmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCi0JOzsKLQotICAgICAgKi5sYSkKLQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCi0JZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0Ci0KLQkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCi0JICB8fCBmdW5jX2ZhdGFsX2hlbHAgIickZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCi0JbGlicmFyeV9uYW1lcz0KLQlvbGRfbGlicmFyeT0KLQlyZWxpbmtfY29tbWFuZD0KLQlmdW5jX3NvdXJjZSAiJGZpbGUiCi0KLQkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCi0JaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KLQkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgotCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZWxzZQotCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgotCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KLQkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBmdXR1cmVfbGliZGlycyAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZmkKLQotCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgotCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKLQotCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KLQkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCi0JICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKLQotCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAotCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAotCSAgIyBhcmUgaW5zdGFsbGVkIHRvIHRoZSBzYW1lIHByZWZpeC4KLQkgICMgQXQgcHJlc2VudCwgdGhpcyBjaGVjayBkb2Vzbid0IGFmZmVjdCB3aW5kb3dzIC5kbGwncyB0aGF0Ci0JICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCi0JICAjIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KLQkgIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCAnJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKLQotCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KLQkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgotCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAotCSAgZWxzZQotCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAotCSAgZmkKLQotCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgJyRmaWxlJyIKLQkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKLQkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgJ1wnJyRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKLQlmaQotCi0JIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KLQlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0Ci0JaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0JICByZWFsbmFtZT0kMQotCSAgc2hpZnQKLQotCSAgc3JjbmFtZT0kcmVhbG5hbWUKLQkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0ke3JlYWxuYW1lfVQKLQotCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgotCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCi0JICAgICAgJ2V4aXQgJD8nCi0JICB0c3RyaXBtZT0kc3RyaXBtZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotCSAgICBjYXNlICRyZWFsbmFtZSBpbgotCSAgICAqLmRsbC5hKQotCSAgICAgIHRzdHJpcG1lPQotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQkgIG9zMiopCi0JICAgIGNhc2UgJHJlYWxuYW1lIGluCi0JICAgICpfZGxsLmEpCi0JICAgICAgdHN0cmlwbWU9Ci0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgZXNhYwotCSAgaWYgdGVzdCAtbiAiJHRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkc3RyaXBsaWIiOyB0aGVuCi0JICAgIGZ1bmNfc2hvd19ldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiAnZXhpdCAkPycKLQkgIGZpCi0KLQkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgotCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgotCSAgICAjIFRyeSAnbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgJ2xuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCi0JICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAotCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCi0JICAgIGZvciBsaW5rbmFtZQotCSAgICBkbwotCSAgICAgIHRlc3QgIiRsaW5rbmFtZSIgIT0gIiRyZWFsbmFtZSIgXAotCQkmJiBmdW5jX3Nob3dfZXZhbCAiKGNkICRkZXN0ZGlyICYmIHsgJExOX1MgLWYgJHJlYWxuYW1lICRsaW5rbmFtZSB8fCB7ICRSTSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZTsgfTsgfSkiCi0JICAgIGRvbmUKLQkgIGZpCi0KLQkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KLQkgIGxpYj0kZGVzdGRpci8kcmVhbG5hbWUKLQkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCi0JZmkKLQotCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgotCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JaW5zdG5hbWU9JGRpci8ke25hbWV9aQotCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCi0KLQkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCi0JdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCi0JOzsKLQotICAgICAgKi5sbykKLQkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KLQotCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KLQlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCi0JICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdG5hbWUKLQllbHNlCi0JICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLQkgIGRlc3RmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCi0JZmkKLQotCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCi0JY2FzZSAkZGVzdGZpbGUgaW4KLQkqLmxvKQotCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCi0JICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0Ci0JICA7OwotCSouJG9iamV4dCkKLQkgIHN0YXRpY2Rlc3Q9JGRlc3RmaWxlCi0JICBkZXN0ZmlsZT0KLQkgIDs7Ci0JKikKLQkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byAnJGRlc3RmaWxlJyIKLQkgIDs7Ci0JZXNhYwotCi0JIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCi0JdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCi0JICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JwotCi0JIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCi0JaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KLQkgIGZ1bmNfbG8ybyAiJGZpbGUiCi0JICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKLQkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCi0JZmkKLQlleGl0ICRFWElUX1NVQ0NFU1MKLQk7OwotCi0gICAgICAqKQotCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KLQlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCi0JICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdG5hbWUKLQllbHNlCi0JICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLQkgIGRlc3RmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCi0JZmkKLQotCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAotCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KLQkjIGluc3RhbGwKLQlzdHJpcHBlZF9leHQ9Ci0JY2FzZSAkZmlsZSBpbgotCSAgKi5leGUpCi0JICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCi0JICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKLQkgICAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgICBzdHJpcHBlZF9leHQ9LmV4ZQotCSAgICBmaQotCSAgICA7OwotCWVzYWMKLQotCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KLQljYXNlICRob3N0IGluCi0JKmN5Z3dpbiogfCAqbWluZ3cqKQotCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgotCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgotCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0Ci0JICAgIGVsc2UKLQkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgotCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICBmaQotCSAgICA7OwotCSopCi0JICAgIHdyYXBwZXI9JGZpbGUKLQkgICAgOzsKLQllc2FjCi0JaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgotCSAgbm90aW5zdF9kZXBsaWJzPQotCSAgcmVsaW5rX2NvbW1hbmQ9Ci0KLQkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKLQotCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCi0JICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgJyR3cmFwcGVyJyIKLQotCSAgZmluYWxpemU9OgotCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbwotCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCi0JICAgIGxpYmRpcj0KLQkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KLQkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKLQkgICAgZmkKLQkgICAgbGliZmlsZT0kbGliZGlyL2AkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYAotCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgotCSAgICAgIGZ1bmNfd2FybmluZyAiJyRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gJyRsaWJkaXInIgotCSAgICAgIGZpbmFsaXplPWZhbHNlCi0JICAgIGZpCi0JICBkb25lCi0KLQkgIHJlbGlua19jb21tYW5kPQotCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgotCi0JICBvdXRwdXRuYW1lPQotCSAgaWYgdGVzdCBubyA9ICIkZmFzdF9pbnN0YWxsIiAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCi0JICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgaWYgJGZpbmFsaXplOyB0aGVuCi0JICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAotCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCi0JCWZpbGU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JICAgICAgICBvdXRwdXRuYW1lPSR0bXBkaXIvJGZpbGUKLQkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLQkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAotCi0JICAgICAgICAkb3B0X3F1aWV0IHx8IHsKLQkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCi0JCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgotCSAgICAgICAgfQotCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6Ci0JICAgICAgICAgIGVsc2UKLQkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rICckZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKLQkJICAkb3B0X2RyeV9ydW4gfHwgJHtSTX1yICIkdG1wZGlyIgotCQkgIGNvbnRpbnVlCi0JICAgICAgICBmaQotCSAgICAgICAgZmlsZT0kb3V0cHV0bmFtZQotCSAgICAgIGVsc2UKLQkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayAnJGZpbGUnIgotCSAgICAgIGZpCi0JICAgIH0KLQkgIGVsc2UKLQkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgotCSAgICBmaWxlPWAkRUNITyAiJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRTRUQgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCi0JICBmaQotCWZpCi0KLQkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKLQkjIG9uZSBhbnl3YXkKLQljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KLQkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCi0JICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgotCSAgKi5leGU6Ki5leGUpCi0JICAgICMgdGhpcyBpcyBvawotCSAgICA7OwotCSAgKi5leGU6KikKLQkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQotCSAgICA7OwotCSAgKjoqLmV4ZSkKLQkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCi0JICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKLQkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCi0JICAke1JNfXIgIiR0bXBkaXIiCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgIGRvbmUKLQotICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbwotICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0gICAgICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCi0gICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCi0gICAgICBvbGRsaWI9JGRlc3RkaXIvJG5hbWUKLSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICAgICAgdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAotCi0gICAgICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0ICQ/JwotCi0gICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KLQlmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkdG9vbF9vbGRsaWIiICdleGl0ICQ/JwotICAgICAgZmkKLQotICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgotICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCi0gICAgZG9uZQotCi0gICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCi0gICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biAnJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKLQotICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCi0gICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgotICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKLSAgICAgIGV4ZWNfY21kPSckU0hFTEwgIiRwcm9ncGF0aCIgJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJwotICAgIGVsc2UKLSAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgIGZpCi19Ci0KLXRlc3QgaW5zdGFsbCA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQotCi0KLSMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCi0jIEV4dHJhY3Qgc3ltYm9scyBmcm9tIGRscHJlZmlsZXMgYW5kIGNyZWF0ZSAke291dHB1dG5hbWV9Uy5vIHdpdGgKLSMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgotZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBteV9vdXRwdXRuYW1lPSQxCi0gICAgbXlfb3JpZ2luYXRvcj0kMgotICAgIG15X3BpY19wPSR7My1mYWxzZX0KLSAgICBteV9wcmVmaXg9YCRFQ0hPICIkbXlfb3JpZ2luYXRvciIgfCAkU0VEICdzJVteYS16QS1aMC05XSVfJWcnYAotICAgIG15X2Rsc3ltcz0KLQotICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3Qgbm8gIT0gIiRkbHNlbGYiOyB0aGVuCi0gICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0JbXlfZGxzeW1zPSR7bXlfb3V0cHV0bmFtZX1TLmMKLSAgICAgIGVsc2UKLQlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCi0gICAgICBmaQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgotICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCi0gICAgICAiIikgOzsKLSAgICAgICouYykKLQkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgotCW5saXN0PSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLm5tCi0KLQlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgotCi0JIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KLQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCi0KLQkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLS8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgJyRteV9vdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCi0vKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04gKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gXCJDXCIgewotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKLSNlbmRpZgotCi0vKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfV0lOMzJfV0NFCi0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKLSAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KLSMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0jZWxpZiBkZWZpbmVkIF9fb3NmX18KLS8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwotIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSNlbHNlCi0jIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAotI2VuZGlmCi0KLSNkZWZpbmUgU1RSRVEoczEsIHMyKSAoc3RyY21wICgoczEpLCAoczIpKSA9PSAwKQotCi0vKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAotIgotCi0JaWYgdGVzdCB5ZXMgPSAiJGRsc2VsZiI7IHRoZW4KLQkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRvdXRwdXQnIgotCi0JICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCi0KLQkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KLQkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKLQkgIGZvciBwcm9nZmlsZSBpbiAkcHJvZ2ZpbGVzOyBkbwotCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHByb2dmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tICckZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKLQkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKLQkgIGRvbmUKLQotCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKLQkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJwotCSAgICB9Ci0JICBmaQotCi0JICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJwotCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCi0JICAgIH0KLQkgIGZpCi0KLQkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCi0JICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCi0JICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cAotCSAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKLQkgICAgICBldmFsICIkU0VEIC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCi0JICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQotICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0gICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwotCSAgICAgICAgOzsKLQkgICAgICBlc2FjCi0JICAgIH0KLQkgIGVsc2UKLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICBldmFsICIkU0VEIC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCi0JICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKLQkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJwotCSAgICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQotCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwotCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0JICAgICAgICAgIDs7Ci0JICAgICAgZXNhYwotCSAgICB9Ci0JICBmaQotCWZpCi0KLQlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbwotCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSAnJGRscHJlZmlsZSciCi0JICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgotCSAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLSAgICAgICAgICBjYXNlICRob3N0IGluCi0JICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQotCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQotCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgotCSAgICAgICAgZnVuY190cl9zaCAiJGRscHJlZmlsZSIKLQkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCi0JICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0KLQkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCi0JICAgICAgICAgICMgVXNlIHN1YnNoZWxsLCB0byBhdm9pZCBjbG9iYmVyaW5nIGN1cnJlbnQgdmFyaWFibGUgdmFsdWVzCi0JICAgICAgICAgIGRscHJlZmlsZV9kbG5hbWU9YHNvdXJjZSAiJGN1cnJfbGFmaWxlIiAmJiBlY2hvICIkZGxuYW1lImAKLQkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiOyB0aGVuCi0JICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCi0JICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JICAgICAgICAgIGVsc2UKLQkgICAgICAgICAgICAjIG5vIGxhZmlsZS4gdXNlciBleHBsaWNpdGx5IHJlcXVlc3RlZCAtZGxwcmVvcGVuIDxpbXBvcnQgbGlicmFyeT4uCi0JICAgICAgICAgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kICIkZGxwcmVmaWxlIgotCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAotCSAgICAgICAgICBmaQotCSAgICAgICAgZmkKLQkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxiYXNlbmFtZSI7IHRoZW4KLQkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJwotCSAgICAgICAgICBlbHNlCi0JICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgotCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCi0JICAgICAgICAgIGZpCi0JICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKLQkgICAgICAgICAgICAkU0VEIC1lICcvSSBfX2ltcC9kJyAtZSAncy9JIF9fbm1fL0QgLztzL19ubV9fLy8nID4+ICckbmxpc3QnIgotCSAgICAgICAgfQotCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgotCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKLQkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0JICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCi0JICAgICAgICB9Ci0JICAgICAgZmkKLQkgICAgOzsKLQkgICAgKikKLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKLQkgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKLQkgICAgICB9Ci0JICAgIDs7Ci0gICAgICAgICAgZXNhYwotCWRvbmUKLQotCSRvcHRfZHJ5X3J1biB8fCB7Ci0JICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCi0JICB0ZXN0IC1mICIkbmxpc3QiIHx8IDogPiAiJG5saXN0IgotCi0JICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAotCSAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCi0JICBmaQotCi0JICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgotCSAgaWYgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiB8Ci0JICAgICAgaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JCXNvcnQgLWsgMwotCSAgICAgIGVsc2UKLQkJc29ydCArMgotCSAgICAgIGZpIHwKLQkgICAgICB1bmlxID4gIiRubGlzdCJTOyB0aGVuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUwotCSAgZmkKLQotCSAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KLQkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyInCi0JICBlbHNlCi0JICAgIGVjaG8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgotCSAgZmkKLQotCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJHtubGlzdH1JIicKLQkgIGlmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCI7IHRoZW4KLQkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9faW1wb3J0IicgPCAiJG5saXN0IlMgPiAiJG5saXN0IkknCi0JICBmaQotCi0JICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIHZvaWQgKmFkZHJlc3M7Ci19IGx0X2Rsc3ltbGlzdDsKLWV4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKLWx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTtcCi0iCi0KLQkgIGlmIHRlc3QgLXMgIiRubGlzdCJJOyB0aGVuCi0JICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCi1zdGF0aWMgdm9pZCBsdF9zeW1pbml0KHZvaWQpCi17Ci0gIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdCAqc3ltYm9sID0gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKLSAgZm9yICg7IHN5bWJvbC0+bmFtZTsgKytzeW1ib2wpCi0gICAgeyIKLQkgICAgJFNFRCAncy8uKi8gICAgICBpZiAoU1RSRVEgKHN5bWJvbC0+bmFtZSwgXCImXCIpKSBzeW1ib2wtPmFkZHJlc3MgPSAodm9pZCAqKSBcJiY7LycgPCAiJG5saXN0IkkgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCi0JICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCi0gICAgfQotfSIKLQkgIGZpCi0JICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAotTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0Ci1sdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQoteyB7XCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwfSwiCi0KLQkgIGlmIHRlc3QgLXMgIiRubGlzdCJJOyB0aGVuCi0JICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCi0gIHtcIkBJTklUQFwiLCAodm9pZCAqKSAmbHRfc3ltaW5pdH0sIgotCSAgZmkKLQotCSAgY2FzZSAkbmVlZF9saWJfcHJlZml4IGluCi0JICBubykKLQkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCi0JICAgIDs7Ci0JICAqKQotCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgotCSAgICA7OwotCSAgZXNhYwotCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLSAgezAsICh2b2lkICopIDB9Ci19OwotCi0vKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KLSNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKLXN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7Ci0gIHJldHVybiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmXAotIgotCX0gIyAhJG9wdF9kcnlfcnVuCi0KLQlwaWNfZmxhZ19mb3Jfc3ltdGFibGU9Ci0JY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCi0JKiIgLXN0YXRpYyAiKikgOzsKLQkqKQotCSAgY2FzZSAkaG9zdCBpbgotCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCi0JICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKLQkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKLQkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgotCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KLQkgICotKi1mcmVlYnNkMi4qfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCi0JICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKLQkgICotKi1ocHV4KikKLQkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKLQkgICopCi0JICAgICRteV9waWNfcCAmJiBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLQlzeW10YWJfY2ZsYWdzPQotCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbwotCSAgY2FzZSAkYXJnIGluCi0JICAtcGllIHwgLWZwaWUgfCAtZlBJRSkgOzsKLQkgICopIGZ1bmNfYXBwZW5kIHN5bXRhYl9jZmxhZ3MgIiAkYXJnIiA7OwotCSAgZXNhYwotCWRvbmUKLQotCSMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCi0JZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCi0KLQkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCi0JZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCIgIiR7bmxpc3R9SSInCi0KLQkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgotCXN5bWZpbGVvYmo9JG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dAotCWNhc2UgJGhvc3QgaW4KLQkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKLQkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KLQkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKLQkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAotCSAgZWxzZQotCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCi0JICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAotCSAgZmkKLQkgIDs7Ci0JKikKLQkgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKLQkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgICopCi0JZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yICckbXlfZGxzeW1zJyIKLQk7OwotICAgICAgZXNhYwotICAgIGVsc2UKLSAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCi0gICAgICAjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCi0gICAgICAjIHJlYWxseSB3YXMgcmVxdWlyZWQuCi0KLSAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCi0gICAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKLSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCi0gICAgZmkKLX0KLQotIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRwotIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCi0jIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucwotIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgotZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKLSAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKLX0KLQotIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCi0jIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKLSMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCi0jIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCi1mdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCi0gIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKLX0KLQotIyBmdW5jX3dpbjMyX2xpYmlkIGFyZwotIyByZXR1cm4gdGhlIGxpYnJhcnkgdHlwZSBvZiBmaWxlICdhcmcnCi0jCi0jIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKLSMgSGFzIHRvIGJlIGEgc2hlbGwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gJ2VhdCcgdGhlIGFyZ3VtZW50Ci0jIHRoYXQgaXMgc3VwcGxpZWQgd2hlbiAkZmlsZV9tYWdpY19jb21tYW5kIGlzIGNhbGxlZC4KLSMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxzbyBkZWFsIHdpdGggNjQgYml0IGJpbmFyaWVzLgotZnVuY193aW4zMl9saWJpZCAoKQotewotICAkZGVidWdfY21kCi0KLSAgd2luMzJfbGliaWRfdHlwZT11bmtub3duCi0gIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCi0gIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KLSAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0Ci0gICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgotICAgIDs7Ci0gICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKLSAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KLSAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8Ci0gICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KLSAgICAgIGNhc2UgJG5tX2ludGVyZmFjZSBpbgotICAgICAgIk1TIGR1bXBiaW4iKQotCWlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIHx8Ci0JICAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiCi0JdGhlbgotCSAgd2luMzJfbm1yZXM9aW1wb3J0Ci0JZWxzZQotCSAgd2luMzJfbm1yZXM9Ci0JZmkKLQk7OwotICAgICAgKikKLQlmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0Jd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKLQkgICRTRUQgLW4gLWUgJwotCSAgICAxLDEwMHsKLQkJLyBJIC97Ci0JCSAgICBzfC4qfGltcG9ydHwKLQkJICAgIHAKLQkJICAgIHEKLQkJfQotCSAgICB9J2AKLQk7OwotICAgICAgZXNhYwotICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KLSAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKLSAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gICpETEwqKQotICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCi0gICAgOzsKLSAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCi0gICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgotICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKLSAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKLX0KLQotIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgQVJHCi0jCi0jIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCi0jIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAotIyBpbXBvcnQgbGlicmFyeSBBUkcuCi0jIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKLSMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0jIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCi0jICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAotZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAotfQotCi0jIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcwotIwotIyBUaGUgaXMgdGhlIGNvcmUgb2YgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBhCi0jIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCi0jIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeSBMSUJOQU1FLgotIwotIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKLSMgb24gdGhlIHBsYXRmb3JtIGFuZCBjb21waWxlciB0aGF0IGNyZWF0ZWQgdGhlIGltcGxpYi4KLSMKLSMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCi0jIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeS4KLWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAotICAkT0JKRFVNUCAtcyAtLXNlY3Rpb24gIiQxIiAiJDIiIDI+L2Rldi9udWxsIHwKLSAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97Ci0gICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCi0gICAgICBzLy4qLz09PT1NQVJLPT09PS8KLSAgICAgIHAKLSAgICAgIGQKLSAgICB9Ci0gICAgIyBUaGVzZSBsaW5lcyBjYW4gc29tZXRpbWVzIGJlIGxvbmdlciB0aGFuIDQzIGNoYXJhY3RlcnMsIGJ1dAotICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCi0gICAgLzpbCSBdKmZpbGUgZm9ybWF0IHBlW2ldXHssMVx9LS9kCi0gICAgL15JbiBhcmNoaXZlIFteOl0qOi9kCi0gICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQKLSAgICAvXj09PT1NQVJLPT09PS9wCi0gICAgIyBSZW1vdmUgYWxsIGxpbmVzIHdpdGggbGVzcyB0aGFuIDQzIGNoYXJhY3RlcnMKLSAgICAvXi5cezQzXH0vIWQKLSAgICAjIEZyb20gcmVtYWluaW5nIGxpbmVzLCByZW1vdmUgZmlyc3QgNDMgY2hhcmFjdGVycwotICAgIHMvXi5cezQzXH0vLycgfAotICAgICRTRUQgLW4gJwotICAgICAgIyBKb2luIG1hcmtlciBhbmQgYWxsIGxpbmVzIHVudGlsIG5leHQgbWFya2VyIGludG8gYSBzaW5nbGUgbGluZQotICAgICAgL149PT09TUFSSz09PT0vIGIgcGFyYQotICAgICAgSAotICAgICAgJCBiIHBhcmEKLSAgICAgIGIKLSAgICAgIDpwYXJhCi0gICAgICB4Ci0gICAgICBzL1xuLy9nCi0gICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCi0gICAgICBzL149PT09TUFSSz09PT0vLwotICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgZG90cyBhbmQgd2hpdGVzcGFjZQotICAgICAgcy9bXC4gXHRdKiQvLwotICAgICAgIyBQcmludAotICAgICAgLy4vcCcgfAotICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAotICAgICMgY29udGVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgYWxsIG1lbWJlcnMgb2YgdGhlCi0gICAgIyBhcmNoaXZlIHRoYXQgcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCi0gICAgIyBhbGwgdGhvc2UgdGhhdCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCi0gICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCi0gICAgIyBjaGFyYWN0ZXIuKSBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgYXJjaGl2ZXMgd2l0aCBsZXNzIHRoYW4KLSAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQotICAgICMgYmVnaW5zIHdpdGggYSBsaXRlcmFsICcuJyBvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkKLSAgICAjIGEgJy4nLgotICAgICMKLSAgICAjIE9mIHRob3NlIHRoYXQgcmVtYWluLCBwcmludCB0aGUgZmlyc3Qgb25lLgotICAgICRTRUQgLWUgJy9eXC4vZDsvXi5cLi9kO3EnCi19Ci0KLSMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRwotIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQotIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKLSMgaW1wb3J0IGxpYnJhcnkgQVJHLgotIwotIyBUaGlzIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlzIGZvciB1c2Ugd2hlbiAkRExMVE9PTAotIyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtLWlkZW50aWZ5LXN0cmljdCBvcHRpb24uCi0jIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKLSMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0jIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCi0jICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAotZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSI7IHRoZW4KLSAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5Ci0gICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKLSAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIjsgdGhlbgotICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5Ci0gICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNicgIiQxImAKLSAgZWxzZQotICAgICMgdW5rbm93bgotICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PQotICBmaQotfQotCi0KLSMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgotZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmX2V4X2FuX2FyX2Rpcj0kMTsgc2hpZnQKLSAgICBmX2V4X2FuX2FyX29sZGxpYj0kMQotICAgIGlmIHRlc3QgeWVzID0gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iOyB0aGVuCi0gICAgICBsb2NrZmlsZT0kZl9leF9hbl9hcl9vbGRsaWIubG9jawotICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbwotCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCi0Jc2xlZXAgMgotICAgICAgZG9uZQotICAgIGZpCi0gICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgXAotCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiI7IHRoZW4KLSAgICAgICRvcHRfZHJ5X3J1biB8fCBybSAtZiAiJGxvY2tmaWxlIgotICAgIGZpCi0gICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KLSAgICAgOgotICAgIGVsc2UKLSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgotICAgIGZpCi19Ci0KLQotIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KLWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIG15X2dlbnRvcD0kMTsgc2hpZnQKLSAgICBteV9vbGRsaWJzPSR7MSsiJEAifQotICAgIG15X29sZG9ianM9Ci0gICAgbXlfeGxpYj0KLSAgICBteV94YWJzPQotICAgIG15X3hkaXI9Ci0KLSAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KLSAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KLSAgICAgIGNhc2UgJG15X3hsaWIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9JG15X3hsaWIgOzsKLQkqKSBteV94YWJzPWBwd2RgIi8kbXlfeGxpYiIgOzsKLSAgICAgIGVzYWMKLSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgotICAgICAgbXlfeGxpYj0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLSAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgotICAgICAgd2hpbGUgOjsgZG8KLSAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgotCSoiICRteV94bGliX3UgIiopCi0JICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQotCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKLQkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7Ci0JKikgYnJlYWsgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKLSAgICAgIG15X3hkaXI9JG15X2dlbnRvcC8kbXlfeGxpYl91Ci0KLSAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCi0KLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICotZGFyd2luKikKLQlmdW5jX3ZlcmJvc2UgIkV4dHJhY3RpbmcgJG15X3hhYnMiCi0JIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCi0JJG9wdF9kcnlfcnVuIHx8IHsKLQkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAotCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPwotCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKLQkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKLQkgIGZ1bmNfYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSIKLQkgIGRhcndpbl9iYXNlX2FyY2hpdmU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKLQkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgotCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCi0JICAgIGRhcndpbl9hcmNoPQotCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgotCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzOyBkbwotCSAgICAgIGZ1bmNfbWtkaXJfcCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoIgotCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2gvJGRhcndpbl9iYXNlX2FyY2hpdmUiICIkZGFyd2luX2FyY2hpdmUiCi0JICAgICAgY2QgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaCIKLQkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSIKLQkgICAgICBjZCAiJGRhcndpbl9jdXJkaXIiCi0JICAgICAgJFJNICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2gvJGRhcndpbl9iYXNlX2FyY2hpdmUiCi0JICAgIGRvbmUgIyAkZGFyd2luX2FyY2hlcwotICAgICAgICAgICAgIyMgT2theSBub3cgd2UndmUgYSBidW5jaCBvZiB0aGluIG9iamVjdHMsIGdvdHRhIGZhdHRlbiB0aGVtIHVwIDopCi0JICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICRTRUQgLWUgIiRzZWRfYmFzZW5hbWUiIHwgc29ydCAtdWAKLQkgICAgZGFyd2luX2ZpbGU9Ci0JICAgIGRhcndpbl9maWxlcz0KLQkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCi0JICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAotCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCi0JICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0Ci0JICAgICRSTSAtcmYgdW5mYXQtJCQKLQkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCi0JICBlbHNlCi0JICAgIGNkICRkYXJ3aW5fb3JpZ19kaXIKLQkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCi0JICBmaSAjICRkYXJ3aW5fYXJjaGVzCi0JfSAjICEkb3B0X2RyeV9ydW4KLQk7OwotICAgICAgKikKLSAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAotICAgIGRvbmUKLQotICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9JG15X29sZG9ianMKLX0KLQotCi0jIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCi0jCi0jIEVtaXQgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KLSMgRG9uJ3QgZGlyZWN0bHkgb3BlbiBhIGZpbGUgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bwotIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndwotIyB3cmFwcGVyIGV4ZWN1dGFibGUuICBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluCi0jIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKLSMgc2V0IHRoZXJlaW4uCi0jCi0jIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKLSMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0Ci0jIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSB3aGVyZSBpdCBpcyBzdG9yZWQgaXMKLSMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYwotIyBiZWhhdmlvci4KLWZ1bmNfZW1pdF93cmFwcGVyICgpCi17Ci0JZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kezEtbm99Ci0KLQkkRUNITyAiXAotIyEgJFNIRUxMCi0KLSMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQotIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KLSMKLSMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCi0jIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KLSMKLSMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0jIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLXNlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKLQotIyBCZSBCb3VybmUgY29tcGF0aWJsZQotaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGVtdWxhdGUgc2gKLSAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYwotZmkKLUJJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0Ci1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLXJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKLQotIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgotaWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCi0gICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgotICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKLSAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJwotZWxzZQotICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCi0gIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KLSAgICBmaWxlPVwiXCQwXCIiCi0KLSAgICBxRUNITz1gJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICRFQ0hPICJcCi0KLSMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KLWZ1bmNfZmFsbGJhY2tfZWNobyAoKQotewotICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgotXCQxCi1fTFRFQ0hPX0VPRicKLX0KLSAgICBFQ0hPPVwiJHFFQ0hPXCIKLSAgZmkKLQotIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KLSMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgotIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHRoYXQgaXMgdXNlZCBvbmx5IG9uCi0jIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgotIyAoYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIHVubGlrZWx5IHRvIGhhdmUgb3B0aW9ucyB0aGF0IG1hdGNoCi0jIHRoaXMgcGF0dGVybikuCi0jCi0jIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKLSMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgotIwotIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKLSMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCi1sdF9vcHRpb25fZGVidWc9Ci1mdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKLXsKLSAgbHRfc2NyaXB0X2FyZzA9XCQwCi0gIHNoaWZ0Ci0gIGZvciBsdF9vcHQKLSAgZG8KLSAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgotICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7Ci0gICAgLS1sdC1kdW1wLXNjcmlwdCkKLSAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCi0gICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgotICAgICAgICBsdF9kdW1wX0Y9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyVeLiovJSUnXGAKLSAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgotICAgICAgICBleGl0IDAKLSAgICAgIDs7Ci0gICAgLS1sdC0qKQotICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgotICAgICAgICBleGl0IDEKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgotICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgotICAgIGVjaG8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSkgJFZFUlNJT05cIiAxPiYyCi0gIGZpCi19Ci0KLSMgVXNlZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMgYXJndW1lbnRzIHRvIHN0ZG91dAotIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCi1mdW5jX2x0X2R1bXBfYXJncyAoKQotewotICBsdF9kdW1wX2FyZ3NfTj0xOwotICBmb3IgbHRfYXJnCi0gIGRvCi0gICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgotICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCi0gIGRvbmUKLX0KLQotIyBDb3JlIGZ1bmN0aW9uIGZvciBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgotZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQotewotIgotICBjYXNlICRob3N0IGluCi0gICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cwotICAqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQotICAgICRFQ0hPICJcCi0gICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgotICAgICAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgotICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKLSAgICAgIGZpCi0gICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KLSIKLSAgICA7OwotCi0gICopCi0gICAgJEVDSE8gIlwKLSAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCi0gICAgICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCi0gICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgotICAgICAgZmkKLSAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQotIgotICAgIDs7Ci0gIGVzYWMKLSAgJEVDSE8gIlwKLSAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKLSAgICAgIGV4aXQgMQotfQotCi0jIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KLSMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCi0jIGxhdW5jaGVzIHRhcmdldCBhcHBsaWNhdGlvbiB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgotZnVuY19leGVjX3Byb2dyYW0gKCkKLXsKLSAgY2FzZSBcIiBcJCogXCIgaW4KLSAgKlxcIC0tbHQtKikKLSAgICBmb3IgbHRfd3JfYXJnCi0gICAgZG8KLSAgICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KLSAgICAgIC0tbHQtKikgOzsKLSAgICAgICopIHNldCB4IFwiXCRAXCIgXCJcJGx0X3dyX2FyZ1wiOyBzaGlmdDs7Ci0gICAgICBlc2FjCi0gICAgICBzaGlmdAotICAgIGRvbmUgOzsKLSAgZXNhYwotICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KLX0KLQotICAjIFBhcnNlIG9wdGlvbnMKLSAgZnVuY19wYXJzZV9sdF9vcHRpb25zIFwiXCQwXCIgXCR7MStcIlwkQFwifQotCi0gICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCi0gIHRoaXNkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qJCUlJ1xgCi0gIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KLQotICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KLSAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAotICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCi0gICAgZGVzdGRpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSpcJCUlJ1xgCi0KLSAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCi0gICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgotICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCi0gICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKLSAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotCi0gICAgZmlsZT1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyVeLiovJSUnXGAKLSAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAotICBkb25lCi0KLSAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCi0gICMgdGhlIGN3cmFwcGVyLgotICBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUj0kZnVuY19lbWl0X3dyYXBwZXJfYXJnMQotICBpZiB0ZXN0IFwiXCRXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUlwiID0gXCJ5ZXNcIjsgdGhlbgotICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKLSAgICBpZiB0ZXN0IFwiXCR0aGlzZGlyXCIgPSBcIi5cIjsgdGhlbgotICAgICAgdGhpc2Rpcj1cYHB3ZFxgCi0gICAgZmkKLSAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKLSAgICBjYXNlIFwiXCR0aGlzZGlyXCIgaW4KLSAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKLSAgICAkb2JqZGlyICkgICB0aGlzZGlyPS4gOzsKLSAgICBlc2FjCi0gIGZpCi0KLSAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KLSAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAotICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgotIgotCi0JaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCI7IHRoZW4KLQkgICRFQ0hPICJcCi0gIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKLSAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKLQotICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKLSAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICRTRUQgMXFcYDsgXFwKLSAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgotCi0gICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKLQotICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCi0gICAgICAkTUtESVIgXCJcJHByb2dkaXJcIgotICAgIGVsc2UKLSAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgotICAgIGZpIgotCi0JICAkRUNITyAiXAotCi0gICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKLSAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCi0gICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKLSAgICAgIGVsc2UKLQlcJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgotCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgotCWV4aXQgMQotICAgICAgZmkKLSAgICBmaQotCi0gICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8Ci0gICAgeyAkUk0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7Ci0gICAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KLSAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKLSAgZmkiCi0JZWxzZQotCSAgJEVDSE8gIlwKLSAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCi0gIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCi0iCi0JZmkKLQotCSRFQ0hPICJcCi0KLSAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKLQotCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCi0JIwotCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZwotCSMgdG8gc2hsaWJwYXRoLCBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggYXJlIFBBVEggYW5kIHVuaW5zdGFsbGVkCi0JIyBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LgotCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgotCSAgJEVDSE8gIlwKLSAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAotICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICi0iCi0JZmkKLQotCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgotCWlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KLQkgICRFQ0hPICJcCi0gICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKLSAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCi0KLSAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKLSAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAotICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIHwgJFNFRCAncy86OipcJC8vJ1xgCi0KLSAgICBleHBvcnQgJHNobGlicGF0aF92YXIKLSIKLQlmaQotCi0JJEVDSE8gIlwKLSAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCi0gICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgotICAgICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwkQFwifQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCi0gICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogJ1wkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgotICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgotICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCi0gICAgZXhpdCAxCi0gIGZpCi1maVwKLSIKLX0KLQotCi0jIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKLSMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAotIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKLSMgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZSBzZXQgdGhlcmVpbi4KLWZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKLXsKLQljYXQgPDxFT0YKLQotLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQotICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCi0KLSAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAotICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgotCi0gICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCi0qLwotRU9GCi0JICAgIGNhdCA8PCJFT0YiCi0jaWZkZWYgX01TQ19WRVIKLSMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmZGVmIF9NU0NfVkVSCi0jIGluY2x1ZGUgPGRpcmVjdC5oPgotIyBpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jIGluY2x1ZGUgPGlvLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSMgaW5jbHVkZSA8c3RkaW50Lmg+Ci0jIGlmZGVmIF9fQ1lHV0lOX18KLSMgIGluY2x1ZGUgPGlvLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0jZGVmaW5lIFNUUkVRKHMxLCBzMikgKHN0cmNtcCAoKHMxKSwgKHMyKSkgPT0gMCkKLQotLyogZGVjbGFyYXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAqLwotI2lmIGRlZmluZWQgX19NSU5HVzMyX18KLSMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCi1pbnQgX3B1dGVudiAoY29uc3QgY2hhciAqKTsKLSMgZW5kaWYKLSNlbGlmIGRlZmluZWQgX19DWUdXSU5fXwotIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KLWNoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7Ci1pbnQgcHV0ZW52IChjaGFyICopOwotaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7Ci0jIGVuZGlmCi0vKiAjZWxpZiBkZWZpbmVkIG90aGVyX3BsYXRmb3JtIHx8IGRlZmluZWQgLi4uICovCi0jZW5kaWYKLQotLyogcG9ydGFiaWxpdHkgZGVmaW5lcywgZXhjbHVkaW5nIHBhdGggaGFuZGxpbmcgbWFjcm9zICovCi0jaWYgZGVmaW5lZCBfTVNDX1ZFUgotIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQotIyBkZWZpbmUgc3RhdCAgICBfc3RhdAotIyBkZWZpbmUgY2htb2QgICBfY2htb2QKLSMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAotIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52Ci0jIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCi0jZWxpZiBkZWZpbmVkIF9fTUlOR1czMl9fCi0jIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCi0jIGRlZmluZSBzdGF0ICAgIF9zdGF0Ci0jIGRlZmluZSBjaG1vZCAgIF9jaG1vZAotIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCi0jIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKLSNlbGlmIGRlZmluZWQgX19DWUdXSU5fXwotIyBkZWZpbmUgSEFWRV9TRVRFTlYKLSMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKLS8qICNlbGlmIGRlZmluZWQgb3RoZXIgcGxhdGZvcm1zIC4uLiAqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIFBBVEhfTUFYCi0jIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCi0jZWxpZiBkZWZpbmVkIE1BWFBBVEhMRU4KLSMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgotI2Vsc2UKLSMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAotI2VuZGlmCi0KLSNpZm5kZWYgU19JWE9USAotIyBkZWZpbmUgU19JWE9USCAwCi0jZW5kaWYKLSNpZm5kZWYgU19JWEdSUAotIyBkZWZpbmUgU19JWEdSUCAwCi0jZW5kaWYKLQotLyogcGF0aCBoYW5kbGluZyBwb3J0YWJpbGl0eSBtYWNyb3MgKi8KLSNpZm5kZWYgRElSX1NFUEFSQVRPUgotIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKLSMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fTVNET1NfXyB8fCBkZWZpbmVkIF9fREpHUFBfXyB8fCBcCi0gIGRlZmluZWQgX19PUzJfXwotIyBkZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KLSMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKLSMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgotIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCi0jIGVuZGlmCi0jIGlmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCi0jICBkZWZpbmUgUEFUSF9TRVBBUkFUT1JfMiAnOycKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIERJUl9TRVBBUkFUT1JfMgotIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gRElSX1NFUEFSQVRPUikKLSNlbHNlIC8qIERJUl9TRVBBUkFUT1JfMiAqLwotIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgXAotCSgoKGNoKSA9PSBESVJfU0VQQVJBVE9SKSB8fCAoKGNoKSA9PSBESVJfU0VQQVJBVE9SXzIpKQotI2VuZGlmIC8qIERJUl9TRVBBUkFUT1JfMiAqLwotCi0jaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKLSMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUikKLSNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KLSMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQotI2VuZGlmIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KLQotI2lmbmRlZiBGT1BFTl9XQgotIyBkZWZpbmUgRk9QRU5fV0IgInciCi0jZW5kaWYKLSNpZm5kZWYgX09fQklOQVJZCi0jIGRlZmluZSBfT19CSU5BUlkgMAotI2VuZGlmCi0KLSNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKLSNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAotICBpZiAoc3RhbGUpIHsgZnJlZSAoc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAotfSB3aGlsZSAoMCkKLQotI2lmIGRlZmluZWQgTFRfREVCVUdXUkFQUEVSCi1zdGF0aWMgaW50IGx0X2RlYnVnID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKLSNlbmRpZgotCi1jb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCi0KLXZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOwotY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKLWNvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7Ci1jaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOwotY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKLWludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOwotaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOwotY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Ci12b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7Ci1zdGF0aWMgY29uc3QgY2hhciAqbm9ubnVsbCAoY29uc3QgY2hhciAqcyk7Ci1zdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOwotdm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKLWNoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Ci12b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwotdm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKLWNoYXIgKipwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndik7Ci12b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKLUVPRgotCi0JICAgIGNhdCA8PEVPRgotI2lmIF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpCi0jIGRlZmluZSBleHRlcm5hbGx5X3Zpc2libGUgdm9sYXRpbGUKLSNlbHNlCi0jIGRlZmluZSBleHRlcm5hbGx5X3Zpc2libGUgX19hdHRyaWJ1dGVfXygoZXh0ZXJuYWxseV92aXNpYmxlKSkgdm9sYXRpbGUKLSNlbmRpZgotZXh0ZXJuYWxseV92aXNpYmxlIGNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Ci1jb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7Ci1FT0YKLQotCSAgICBpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCi0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKLQkgICAgICBjYXQgPDxFT0YKLWNvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOwotRU9GCi0JICAgIGVsc2UKLQkgICAgICBjYXQgPDwiRU9GIgotY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKLUVPRgotCSAgICBmaQotCi0JICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgotICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgotCSAgICAgIGNhdCA8PEVPRgotY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7Ci1jb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKLUVPRgotCSAgICBlbHNlCi0JICAgICAgY2F0IDw8IkVPRiIKLWNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIiI7Ci1jb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIiOwotRU9GCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCI7IHRoZW4KLQkgICAgICBjYXQgPDxFT0YKLWNvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gImx0LSRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCi1FT0YKLQkgICAgZWxzZQotCSAgICAgIGNhdCA8PEVPRgotY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KLUVPRgotCSAgICBmaQotCi0KLQkgICAgY2F0IDw8IkVPRiIKLQotI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAgICAgICAgICItLWx0LSIKLQotc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7Ci1zdGF0aWMgY29uc3QgY2hhciAqZHVtcHNjcmlwdF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZHVtcC1zY3JpcHQiOwotc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBjaGFyICoqbmV3YXJnejsKLSAgaW50ICBuZXdhcmdjOwotICBjaGFyICp0bXBfcGF0aHNwZWM7Ci0gIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOwotICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKLSAgY2hhciAqdGFyZ2V0X25hbWU7Ci0gIGNoYXIgKmx0X2FyZ3ZfemVybzsKLSAgaW50IHJ2YWwgPSAxMjc7Ci0KLSAgaW50IGk7Ci0KLSAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7Ci0gIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIChzaXplX3QpIGFyZ2MgKyAxKTsKLQotICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAotICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKLSAgICogYXJnelswXSwgd2hpY2ggaXMgaGFuZGxlZCBkaWZmZXJlbnRseQotICAgKi8KLSAgbmV3YXJnYz0wOwotICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQotICAgIHsKLSAgICAgIGlmIChTVFJFUSAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpKQotCXsKLUVPRgotCSAgICBjYXNlICRob3N0IGluCi0JICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKLQkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncwotCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgotCQk7OwotCSAgICAgIGVzYWMKLQotCSAgICBjYXQgPDwiRU9GIgotCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7Ci0JICByZXR1cm4gMDsKLQl9Ci0gICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGRlYnVnX29wdCkpCi0JewotICAgICAgICAgIGx0X2RlYnVnID0gMTsKLSAgICAgICAgICBjb250aW51ZTsKLQl9Ci0gICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSkKLSAgICAgICAgewotICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKLSAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCi0gICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KLSAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCi0gICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKLSAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAotICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgotICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgotICAgICAgICAgICAqLwotICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCi0gICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKLSAgICAgICAgfQotICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLwotICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7Ci0gICAgfQotICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOwotCi1FT0YKLQkgICAgY2F0IDw8RU9GCi0gIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSkgJFZFUlNJT05cbiIpOwotRU9GCi0JICAgIGNhdCA8PCJFT0YiCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOwotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIHByb2dyYW1fbmFtZTogJXNcbiIsIHByb2dyYW1fbmFtZSk7Ci0KLSAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKLSAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQotICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJjb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7Ci0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0gICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKLQkJICB0bXBfcGF0aHNwZWMpOwotCi0gIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7Ci0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0gICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAotCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKLSAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7Ci0KLSAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7Ci0gIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKLQotICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLwotICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIpOwotICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKLSAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKLSAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB0bXBfcGF0aHNwZWM7Ci0gIHRtcF9wYXRoc3BlYyA9IDA7Ci0KLSAgLyogdGFyZ2V0X25hbWUgdHJhbnNmb3JtcyAtLSB1c2UgYWN0dWFsIHRhcmdldCBwcm9ncmFtIG5hbWU7IG1pZ2h0IGhhdmUgbHQtIHByZWZpeCAqLwotICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOwotICBzdHJlbmR6YXAgKHRhcmdldF9uYW1lLCAiLmV4ZSIpOwotICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyICh0YXJnZXRfbmFtZSwgIi5leGUiLCAxKTsKLSAgWEZSRUUgKHRhcmdldF9uYW1lKTsKLSAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7Ci0gIHRtcF9wYXRoc3BlYyA9IDA7Ci0KLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAotCQkgIHRhcmdldF9uYW1lKTsKLUVPRgotCi0JICAgIGNhdCA8PEVPRgotICBuZXdhcmd6WzBdID0KLSAgICBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkgKwotCQkgICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOwotICBzdHJjcHkgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKLSAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOwotICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7Ci1FT0YKLQotCSAgICBjYXQgPDwiRU9GIgotICAvKiBzdG9wIGhlcmUsIGFuZCBjb3B5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0d2ljZSAqLwotICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKLQotICAvKiBkbyBOT1Qgd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlLCBzbyB1c2UgYWN0dWFsX2N3cmFwcGVyX25hbWUgKi8KLSAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7Ci0KLSAgLyogRE8gd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlIGlmIGl0IGV4aXN0cywgc28gdXNlIHRhcmdldF9uYW1lICovCi0gIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOwotICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKLSAgdG1wX3BhdGhzcGVjID0gTlVMTDsKLUVPRgotCi0JICAgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICAgICBtaW5ndyopCi0JICAgIGNhdCA8PCJFT0YiCi0gIHsKLSAgICBjaGFyKiBwOwotICAgIHdoaWxlICgocCA9IHN0cmNociAobmV3YXJnelswXSwgJ1xcJykpICE9IE5VTEwpCi0gICAgICB7Ci0JKnAgPSAnLyc7Ci0gICAgICB9Ci0gICAgd2hpbGUgKChwID0gc3RyY2hyIChsdF9hcmd2X3plcm8sICdcXCcpKSAhPSBOVUxMKQotICAgICAgewotCSpwID0gJy8nOwotICAgICAgfQotICB9Ci1FT0YKLQkgICAgOzsKLQkgICAgZXNhYwotCi0JICAgIGNhdCA8PCJFT0YiCi0gIFhGUkVFICh0YXJnZXRfbmFtZSk7Ci0gIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7Ci0gIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7Ci0KLSAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCi0gIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KLSAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAotICAgICBiZSBwcmVwZW5kZWQgYmVmb3JlICh0aGF0IGlzLCBhcHBlYXIgYWZ0ZXIpIExJQl9QQVRIX1ZBTFVFICgkdGVtcF9ycGF0aCkKLSAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCi0gICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCi0gIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOwotICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKLQotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCi0JCSAgbm9ubnVsbCAobHRfYXJndl96ZXJvKSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCi0gICAgewotICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCi0JCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKLSAgICB9Ci0KLUVPRgotCi0JICAgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICAgICBtaW5ndyopCi0JCWNhdCA8PCJFT0YiCi0gIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCi0gIG5ld2FyZ3ogPSBwcmVwYXJlX3NwYXduIChuZXdhcmd6KTsKLSAgcnZhbCA9IChpbnQpIF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKLSAgaWYgKHJ2YWwgPT0gLTEpCi0gICAgewotICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KLSAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKLQkJICAgICAgbHRfYXJndl96ZXJvLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgICByZXR1cm4gMTI3OwotICAgIH0KLSAgcmV0dXJuIHJ2YWw7Ci1FT0YKLQkJOzsKLQkgICAgICAqKQotCQljYXQgPDwiRU9GIgotICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKLSAgcmV0dXJuIHJ2YWw7IC8qID0xMjcsIGJ1dCBhdm9pZHMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgKi8KLUVPRgotCQk7OwotCSAgICBlc2FjCi0KLQkgICAgY2F0IDw8IkVPRiIKLX0KLQotdm9pZCAqCi14bWFsbG9jIChzaXplX3QgbnVtKQotewotICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOwotICBpZiAoIXApCi0gICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgIm1lbW9yeSBleGhhdXN0ZWQiKTsKLQotICByZXR1cm4gcDsKLX0KLQotY2hhciAqCi14c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCi17Ci0gIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAotCQkJICBzdHJpbmcpIDogTlVMTDsKLX0KLQotY29uc3QgY2hhciAqCi1iYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIGNvbnN0IGNoYXIgKmJhc2U7Ci0KLSNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCi0gIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KLSAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKLSAgICBuYW1lICs9IDI7Ci0jZW5kaWYKLQotICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQotICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCi0gICAgICBiYXNlID0gbmFtZSArIDE7Ci0gIHJldHVybiBiYXNlOwotfQotCi1pbnQKLWNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCi17Ci0gIHN0cnVjdCBzdGF0IHN0OwotCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKLSAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCi0gICAgcmV0dXJuIDA7Ci0KLSAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApCi0gICAgICAmJiAoc3Quc3RfbW9kZSAmIChTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEgpKSkKLSAgICByZXR1cm4gMTsKLSAgZWxzZQotICAgIHJldHVybiAwOwotfQotCi1pbnQKLW1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKLXsKLSAgaW50IHJ2YWwgPSAwOwotICBzdHJ1Y3Qgc3RhdCBzdDsKLQotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKLSAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCi0gICAgcmV0dXJuIDA7Ci0KLSAgaWYgKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKLSAgICB7Ci0gICAgICBydmFsID0gY2htb2QgKHBhdGgsIHN0LnN0X21vZGUgfCBTX0lYT1RIIHwgU19JWEdSUCB8IFNfSVhVU1IpOwotICAgIH0KLSAgcmV0dXJuIHJ2YWw7Ci19Ci0KLS8qIFNlYXJjaGVzIGZvciB0aGUgZnVsbCBwYXRoIG9mIHRoZSB3cmFwcGVyLiAgUmV0dXJucwotICAgbmV3bHkgYWxsb2NhdGVkIGZ1bGwgcGF0aCBuYW1lIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQotICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtLgotKi8KLWNoYXIgKgotZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQotewotICBpbnQgaGFzX3NsYXNoID0gMDsKLSAgY29uc3QgY2hhciAqcDsKLSAgY29uc3QgY2hhciAqcF9uZXh0OwotICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KLSAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOwotICBzaXplX3QgdG1wX2xlbjsKLSAgY2hhciAqY29uY2F0X25hbWU7Ci0KLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihmaW5kX2V4ZWN1dGFibGUpOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7Ci0KLSAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICAvKiBBYnNvbHV0ZSBwYXRoPyAqLwotI2lmIGRlZmluZWQgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KLSAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKLSAgICB7Ci0gICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOwotICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKLQlyZXR1cm4gY29uY2F0X25hbWU7Ci0gICAgICBYRlJFRSAoY29uY2F0X25hbWUpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSNlbmRpZgotICAgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQotCXsKLQkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7Ci0JICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQotCSAgICByZXR1cm4gY29uY2F0X25hbWU7Ci0JICBYRlJFRSAoY29uY2F0X25hbWUpOwotCX0KLSNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCi0gICAgfQotI2VuZGlmCi0KLSAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKLSAgICBpZiAoKnAgPT0gJy8nKQotICAgICAgewotCWhhc19zbGFzaCA9IDE7Ci0JYnJlYWs7Ci0gICAgICB9Ci0gIGlmICghaGFzX3NsYXNoKQotICAgIHsKLSAgICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCi0gICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOwotICAgICAgaWYgKHBhdGggIT0gTlVMTCkKLQl7Ci0JICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKLQkgICAgewotCSAgICAgIGNvbnN0IGNoYXIgKnE7Ci0JICAgICAgc2l6ZV90IHBfbGVuOwotCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCi0JCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQotCQkgIGJyZWFrOwotCSAgICAgIHBfbGVuID0gKHNpemVfdCkgKHEgLSBwKTsKLQkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7Ci0JICAgICAgaWYgKHBfbGVuID09IDApCi0JCXsKLQkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLwotCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKLQkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7Ci0JCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKLQkJICBjb25jYXRfbmFtZSA9Ci0JCSAgICBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKLQkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOwotCQkgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOwotCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7Ci0JCX0KLQkgICAgICBlbHNlCi0JCXsKLQkJICBjb25jYXRfbmFtZSA9Ci0JCSAgICBYTUFMTE9DIChjaGFyLCBwX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7Ci0JCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOwotCQkgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKLQkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKLQkJfQotCSAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCi0JCXJldHVybiBjb25jYXRfbmFtZTsKLQkgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOwotCSAgICB9Ci0JfQotICAgICAgLyogbm90IGZvdW5kIGluIFBBVEg7IGFzc3VtZSBjdXJkaXIgKi8KLSAgICB9Ci0gIC8qIFJlbGF0aXZlIHBhdGggfCBub3QgZm91bmQgaW4gcGF0aDogcHJlcGVuZCBjd2QgKi8KLSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQotICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKLSAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKLSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKLSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7Ci0gIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7Ci0KLSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKLSAgICByZXR1cm4gY29uY2F0X25hbWU7Ci0gIFhGUkVFIChjb25jYXRfbmFtZSk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1jaGFyICoKLWNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKLXsKLSNpZm5kZWYgU19JU0xOSwotICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOwotI2Vsc2UKLSAgY2hhciBidWZbTFRfUEFUSE1BWF07Ci0gIHN0cnVjdCBzdGF0IHM7Ci0gIGNoYXIgKnRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKHBhdGhzcGVjKTsKLSAgY2hhciAqcDsKLSAgaW50IGhhc19zeW1saW5rcyA9IDA7Ci0gIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKLSAgICB7Ci0gICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotCQkgICAgICAiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKLQkJICAgICAgdG1wX3BhdGhzcGVjKTsKLSAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKLQl7Ci0JICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQotCSAgICB7Ci0JICAgICAgaGFzX3N5bWxpbmtzID0gMTsKLQkgICAgICBicmVhazsKLQkgICAgfQotCi0JICAvKiBzZWFyY2ggYmFja3dhcmRzIGZvciBsYXN0IERJUl9TRVBBUkFUT1IgKi8KLQkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4gKHRtcF9wYXRoc3BlYykgLSAxOwotCSAgd2hpbGUgKChwID4gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCi0JICAgIHAtLTsKLQkgIGlmICgocCA9PSB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKLQkgICAgewotCSAgICAgIC8qIG5vIG1vcmUgRElSX1NFUEFSQVRPUlMgbGVmdCAqLwotCSAgICAgIGJyZWFrOwotCSAgICB9Ci0JICAqcCA9ICdcMCc7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgICAiZXJyb3IgYWNjZXNzaW5nIGZpbGUgXCIlc1wiOiAlcyIsCi0JCSAgICB0bXBfcGF0aHNwZWMsIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLQl9Ci0gICAgfQotICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKLQotICBpZiAoIWhhc19zeW1saW5rcykKLSAgICB7Ci0gICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOwotICAgIH0KLQotICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7Ci0gIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKLSAgICB7Ci0gICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAotCQkiY291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7Ci0gICAgfQotICByZXR1cm4geHN0cmR1cCAodG1wX3BhdGhzcGVjKTsKLSNlbmRpZgotfQotCi1jaGFyICoKLXN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCi17Ci0gIHNpemVfdCBsZW4sIHBhdGxlbjsKLQotICBhc3NlcnQgKHN0ciAhPSBOVUxMKTsKLSAgYXNzZXJ0IChwYXQgIT0gTlVMTCk7Ci0KLSAgbGVuID0gc3RybGVuIChzdHIpOwotICBwYXRsZW4gPSBzdHJsZW4gKHBhdCk7Ci0KLSAgaWYgKHBhdGxlbiA8PSBsZW4pCi0gICAgewotICAgICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKLSAgICAgIGlmIChTVFJFUSAoc3RyLCBwYXQpKQotCSpzdHIgPSAnXDAnOwotICAgIH0KLSAgcmV0dXJuIHN0cjsKLX0KLQotdm9pZAotbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICBpZiAobHRfZGVidWcpCi0gICAgewotICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOwotICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7Ci0gICAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKLSAgICAgIHZhX2VuZCAoYXJncyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAotCSAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSwKLQkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICVzOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUsIG1vZGUpOwotICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOwotCi0gIGlmIChleGl0X3N0YXR1cyA+PSAwKQotICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKLX0KLQotdm9pZAotbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCi17Ci0gIHZhX2xpc3QgYXA7Ci0gIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7Ci0gIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOwotICB2YV9lbmQgKGFwKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotbm9ubnVsbCAoY29uc3QgY2hhciAqcykKLXsKLSAgcmV0dXJuIHMgPyBzIDogIihudWxsKSI7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoKLW5vbmVtcHR5IChjb25zdCBjaGFyICpzKQotewotICByZXR1cm4gKHMgJiYgISpzKSA/ICIoZW1wdHkpIiA6IG5vbm51bGwgKHMpOwotfQotCi12b2lkCi1sdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQotewotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOwotICB7Ci0jaWZkZWYgSEFWRV9TRVRFTlYKLSAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLwotICAgIGNoYXIgKnN0ciA9IHhzdHJkdXAgKHZhbHVlKTsKLSAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7Ci0jZWxzZQotICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKLSAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOwotICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOwotICAgIGlmIChwdXRlbnYgKHN0cikgIT0gRVhJVF9TVUNDRVNTKQotICAgICAgewotICAgICAgICBYRlJFRSAoc3RyKTsKLSAgICAgIH0KLSNlbmRpZgotICB9Ci19Ci0KLWNoYXIgKgotbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKQotewotICBjaGFyICpuZXdfdmFsdWU7Ci0gIGlmIChvcmlnX3ZhbHVlICYmICpvcmlnX3ZhbHVlKQotICAgIHsKLSAgICAgIHNpemVfdCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7Ci0gICAgICBzaXplX3QgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKLSAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOwotICAgICAgaWYgKHRvX2VuZCkKLSAgICAgICAgewotICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKLSAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIG9yaWdfdmFsdWVfbGVuLCBhZGQpOwotICAgICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgYWRkKTsKLSAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgbmV3X3ZhbHVlID0geHN0cmR1cCAoYWRkKTsKLSAgICB9Ci0gIHJldHVybiBuZXdfdmFsdWU7Ci19Ci0KLXZvaWQKLWx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCi17Ci0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOwotCi0gIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKLSAgICB7Ci0gICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7Ci0gICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLwotICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKLSAgICAgIHdoaWxlICgobGVuID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQotICAgICAgICB7Ci0gICAgICAgICAgbmV3X3ZhbHVlWy0tbGVuXSA9ICdcMCc7Ci0gICAgICAgIH0KLSAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKLSAgICAgIFhGUkVFIChuZXdfdmFsdWUpOwotICAgIH0KLX0KLQotdm9pZAotbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLXsKLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7Ci0KLSAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQotICAgIHsKLSAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKLSAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKLSAgICAgIFhGUkVFIChuZXdfdmFsdWUpOwotICAgIH0KLX0KLQotRU9GCi0JICAgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICAgICBtaW5ndyopCi0JCWNhdCA8PCJFT0YiCi0KLS8qIFByZXBhcmVzIGFuIGFyZ3VtZW50IHZlY3RvciBiZWZvcmUgY2FsbGluZyBzcGF3bigpLgotICAgTm90ZSB0aGF0IHNwYXduKCkgZG9lcyBub3QgYnkgaXRzZWxmIGNhbGwgdGhlIGNvbW1hbmQgaW50ZXJwcmV0ZXIKLSAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKLSAgICAgICh7IE9TVkVSU0lPTklORk8gdjsgdi5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOwotICAgICAgICAgR2V0VmVyc2lvbkV4KCZ2KTsKLSAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKLSAgICAgIH0pID8gImNtZC5leGUiIDogImNvbW1hbmQuY29tIikuCi0gICBJbnN0ZWFkIGl0IHNpbXBseSBjb25jYXRlbmF0ZXMgdGhlIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5ICcgJywgYW5kIGNhbGxzCi0gICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luMzIgQ3JlYXRlUHJvY2VzcygpCi0gICBpbnRlcnByZXRzIGNoYXJhY3RlcnMgbGlrZSAnICcsICdcdCcsICdcXCcsICciJyAoYnV0IG5vdCAnPCcgYW5kICc+JykgaW4gYQotICAgc3BlY2lhbCB3YXk6Ci0gICAtIFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVkIGFzIGRlbGltaXRlcnMuIFRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzCi0gICAgIGRlbGltaXRlcnMgaWYgdGhleSBhcmUgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzOiAiLi4uIi4KLSAgIC0gVW5lc2NhcGVkIGRvdWJsZSBxdW90ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaW5wdXQuIFRoZWlyIG9ubHkgZWZmZWN0IGlzCi0gICAgIHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNwYWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwKLSAgICAgY2hhcmFjdGVycy4KLSAgIC0gQmFja3NsYXNoZXMgbm90IGZvbGxvd2VkIGJ5IGRvdWJsZSBxdW90ZXMgYXJlIG5vdCBzcGVjaWFsLgotICAgLSBCdXQgMipuKzEgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgYmVjb21lCi0gICAgIG4gYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgKG4gPj0gMCk6Ci0gICAgICAgXCIgLT4gIgotICAgICAgIFxcXCIgLT4gXCIKLSAgICAgICBcXFxcXCIgLT4gXFwiCi0gKi8KLSNkZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJcXCBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgotI2RlZmluZSBTSEVMTF9TUEFDRV9DSEFSUyAiIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCi1jaGFyICoqCi1wcmVwYXJlX3NwYXduIChjaGFyICoqYXJndikKLXsKLSAgc2l6ZV90IGFyZ2M7Ci0gIGNoYXIgKipuZXdfYXJndjsKLSAgc2l6ZV90IGk7Ci0KLSAgLyogQ291bnQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCi0gIGZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY10gIT0gTlVMTDsgYXJnYysrKQotICAgIDsKLQotICAvKiBBbGxvY2F0ZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KLSAgbmV3X2FyZ3YgPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKLQotICAvKiBQdXQgcXVvdGVkIGFyZ3VtZW50cyBpbnRvIHRoZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KLSAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKLSAgICB7Ci0gICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBhcmd2W2ldOwotCi0gICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCi0JbmV3X2FyZ3ZbaV0gPSB4c3RyZHVwICgiXCJcIiIpOwotICAgICAgZWxzZSBpZiAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEVDSUFMX0NIQVJTKSAhPSBOVUxMKQotCXsKLQkgIGludCBxdW90ZV9hcm91bmQgPSAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEFDRV9DSEFSUykgIT0gTlVMTCk7Ci0JICBzaXplX3QgbGVuZ3RoOwotCSAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOwotCSAgY29uc3QgY2hhciAqczsKLQkgIGNoYXIgKnF1b3RlZF9zdHJpbmc7Ci0JICBjaGFyICpwOwotCi0JICBsZW5ndGggPSAwOwotCSAgYmFja3NsYXNoZXMgPSAwOwotCSAgaWYgKHF1b3RlX2Fyb3VuZCkKLQkgICAgbGVuZ3RoKys7Ci0JICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKLQkgICAgewotCSAgICAgIGNoYXIgYyA9ICpzOwotCSAgICAgIGlmIChjID09ICciJykKLQkJbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKLQkgICAgICBsZW5ndGgrKzsKLQkgICAgICBpZiAoYyA9PSAnXFwnKQotCQliYWNrc2xhc2hlcysrOwotCSAgICAgIGVsc2UKLQkJYmFja3NsYXNoZXMgPSAwOwotCSAgICB9Ci0JICBpZiAocXVvdGVfYXJvdW5kKQotCSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOwotCi0JICBxdW90ZWRfc3RyaW5nID0gWE1BTExPQyAoY2hhciwgbGVuZ3RoICsgMSk7Ci0KLQkgIHAgPSBxdW90ZWRfc3RyaW5nOwotCSAgYmFja3NsYXNoZXMgPSAwOwotCSAgaWYgKHF1b3RlX2Fyb3VuZCkKLQkgICAgKnArKyA9ICciJzsKLQkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQotCSAgICB7Ci0JICAgICAgY2hhciBjID0gKnM7Ci0JICAgICAgaWYgKGMgPT0gJyInKQotCQl7Ci0JCSAgdW5zaWduZWQgaW50IGo7Ci0JCSAgZm9yIChqID0gYmFja3NsYXNoZXMgKyAxOyBqID4gMDsgai0tKQotCQkgICAgKnArKyA9ICdcXCc7Ci0JCX0KLQkgICAgICAqcCsrID0gYzsKLQkgICAgICBpZiAoYyA9PSAnXFwnKQotCQliYWNrc2xhc2hlcysrOwotCSAgICAgIGVsc2UKLQkJYmFja3NsYXNoZXMgPSAwOwotCSAgICB9Ci0JICBpZiAocXVvdGVfYXJvdW5kKQotCSAgICB7Ci0JICAgICAgdW5zaWduZWQgaW50IGo7Ci0JICAgICAgZm9yIChqID0gYmFja3NsYXNoZXM7IGogPiAwOyBqLS0pCi0JCSpwKysgPSAnXFwnOwotCSAgICAgICpwKysgPSAnIic7Ci0JICAgIH0KLQkgICpwID0gJ1wwJzsKLQotCSAgbmV3X2FyZ3ZbaV0gPSBxdW90ZWRfc3RyaW5nOwotCX0KLSAgICAgIGVsc2UKLQluZXdfYXJndltpXSA9IChjaGFyICopIHN0cmluZzsKLSAgICB9Ci0gIG5ld19hcmd2W2FyZ2NdID0gTlVMTDsKLQotICByZXR1cm4gbmV3X2FyZ3Y7Ci19Ci1FT0YKLQkJOzsKLQkgICAgZXNhYwotCi0gICAgICAgICAgICBjYXQgPDwiRU9GIgotdm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSogZikKLXsKLUVPRgotCSAgICBmdW5jX2VtaXRfd3JhcHBlciB5ZXMgfAotCSAgICAgICRTRUQgLW4gLWUgJwotcy9eXCguXHs3OVx9XClcKC4uKlwpL1wxXAotXDIvCi1oCi1zL1woW1xcIl1cKS9cXFwxL2cKLXMvJC9cXG4vCi1zL1woW15cbl0qXCkuKi8gIGZwdXRzICgiXDEiLCBmKTsvcAotZwotRCcKLSAgICAgICAgICAgIGNhdCA8PCJFT0YiCi19Ci1FT0YKLX0KLSMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCi0KLSMgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgQVJHCi0jIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKLWZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgotICAgICppbXBvcnQqKSA6IDs7Ci0gICAgKikgZmFsc2UgOzsKLSAgICBlc2FjCi19Ci0KLSMgZnVuY19zdW5jY19jc3RkX2FiaQotIyAhIU9OTFkgQ0FMTCBUSElTIEZPUiBTVU4gQ0MgQUZURVIgJGNvbXBpbGVfY29tbWFuZCBJUyBGVUxMWSBFWFBBTkRFRCEhCi0jIFNldmVyYWwgY29tcGlsZXIgZmxhZ3Mgc2VsZWN0IGFuIEFCSSB0aGF0IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQotIyBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcgaXQgaWYgYW55IGFyZSBpbiBDWFhGTEFHUy4KLWZ1bmNfc3VuY2NfY3N0ZF9hYmkgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBjYXNlICIgJGNvbXBpbGVfY29tbWFuZCAiIGluCi0gICAgKiIgLWNvbXBhdD1nICIqfCpcIC1zdGQ9YysrWzAtOV1bMC05XVwgKnwqIiAtbGlicmFyeT1zdGRjeHg0ICIqfCoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc3VuY2NfdXNlX2NzdGRfYWJpPW5vCi0gICAgICA7OwotICAgICopCi0gICAgICBzdW5jY191c2VfY3N0ZF9hYmk9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLX0KLQotIyBmdW5jX21vZGVfbGluayBhcmcuLi4KLWZ1bmNfbW9kZV9saW5rICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgY2FzZSAkaG9zdCBpbgotICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCi0gICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCi0gICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0Ci0gICAgICAjIHdoYXQgc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKLSAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgotICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KLQotICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCi0gICAgICAjIHRvIG1ha2UgYSBkbGwgdGhhdCBoYXMgdW5kZWZpbmVkIHN5bWJvbHMsIGluIHdoaWNoIGNhc2Ugbm90Ci0gICAgICAjIGV2ZW4gYSBzdGF0aWMgbGlicmFyeSBpcyBidWlsdC4gIEZvciBub3csIHdlIG5lZWQgdG8gc3BlY2lmeQotICAgICAgIyAtbm8tdW5kZWZpbmVkIG9uIHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3aGVuIHdlIGNhbiBiZSBjZXJ0YWluCi0gICAgICAjIHRoYXQgYWxsIHN5bWJvbHMgYXJlIHNhdGlzZmllZCwgb3RoZXJ3aXNlIHdlIGdldCBhIHN0YXRpYyBsaWJyYXJ5LgotICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcwotICAgICAgOzsKLSAgICAqKQotICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgbGlidG9vbF9hcmdzPSRub25vcHQKLSAgICBiYXNlX2NvbXBpbGU9IiRub25vcHQgJEAiCi0gICAgY29tcGlsZV9jb21tYW5kPSRub25vcHQKLSAgICBmaW5hbGl6ZV9jb21tYW5kPSRub25vcHQKLQotICAgIGNvbXBpbGVfcnBhdGg9Ci0gICAgZmluYWxpemVfcnBhdGg9Ci0gICAgY29tcGlsZV9zaGxpYnBhdGg9Ci0gICAgZmluYWxpemVfc2hsaWJwYXRoPQotICAgIGNvbnZlbmllbmNlPQotICAgIG9sZF9jb252ZW5pZW5jZT0KLSAgICBkZXBsaWJzPQotICAgIG9sZF9kZXBsaWJzPQotICAgIGNvbXBpbGVyX2ZsYWdzPQotICAgIGxpbmtlcl9mbGFncz0KLSAgICBkbGxzZWFyY2hwYXRoPQotICAgIGxpYl9zZWFyY2hfcGF0aD1gcHdkYAotICAgIGluc3RfcHJlZml4X2Rpcj0KLSAgICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KLQotICAgIGF2b2lkX3ZlcnNpb249bm8KLSAgICBiaW5kaXI9Ci0gICAgZGxmaWxlcz0KLSAgICBkbHByZWZpbGVzPQotICAgIGRsc2VsZj1ubwotICAgIGV4cG9ydF9keW5hbWljPW5vCi0gICAgZXhwb3J0X3N5bWJvbHM9Ci0gICAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9Ci0gICAgZ2VuZXJhdGVkPQotICAgIGxpYm9ianM9Ci0gICAgbHRsaWJzPQotICAgIG1vZHVsZT1ubwotICAgIG5vX2luc3RhbGw9bm8KLSAgICBvYmpzPQotICAgIG9zMmRsbG5hbWU9Ci0gICAgbm9uX3BpY19vYmplY3RzPQotICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQotICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubwotICAgIHByZWxvYWQ9ZmFsc2UKLSAgICBwcmV2PQotICAgIHByZXZhcmc9Ci0gICAgcmVsZWFzZT0KLSAgICBycGF0aD0KLSAgICB4cnBhdGg9Ci0gICAgcGVybV9ycGF0aD0KLSAgICB0ZW1wX3JwYXRoPQotICAgIHRocmVhZF9zYWZlPW5vCi0gICAgdmluZm89Ci0gICAgdmluZm9fbnVtYmVyPW5vCi0gICAgd2Vha19saWJzPQotICAgIHNpbmdsZV9tb2R1bGU9JHdsLXNpbmdsZV9tb2R1bGUKLSAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCi0KLSAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCi0gICAgZm9yIGFyZwotICAgIGRvCi0gICAgICBjYXNlICRhcmcgaW4KLSAgICAgIC1zaGFyZWQpCi0JdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKLQkgICYmIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2Fubm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCi0JYnVpbGRfb2xkX2xpYnM9bm8KLQlicmVhawotCTs7Ci0gICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKLQljYXNlICRhcmcgaW4KLQktYWxsLXN0YXRpYykKLQkgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgotCSAgZmkKLQkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgotCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCi0JICBmaQotCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcwotCSAgOzsKLQktc3RhdGljKQotCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLQkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYwotCSAgZmkKLQkgIHByZWZlcl9zdGF0aWNfbGlicz1idWlsdAotCSAgOzsKLQktc3RhdGljLWxpYnRvb2wtbGlicykKLQkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCi0JICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKLQkgIGZpCi0JICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCi0JICA7OwotCWVzYWMKLQlidWlsZF9saWJ0b29sX2xpYnM9bm8KLQlidWlsZF9vbGRfbGlicz15ZXMKLQlicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotCi0gICAgIyBTZWUgaWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQgb24gc3RhdGljIGFyY2hpdmVzLgotICAgIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiBidWlsZF9vbGRfbGlicz15ZXMKLQotICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgotICAgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KLSAgICAgIGFyZz0kMQotICAgICAgc2hpZnQKLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0gICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAotICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotCi0gICAgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KLSAgICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotCWNhc2UgJHByZXYgaW4KLQlvdXRwdXQpCi0JICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAT1VUUFVUQCIKLQkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKLQkgIDs7Ci0JZXNhYwotCi0JY2FzZSAkcHJldiBpbgotCWJpbmRpcikKLQkgIGJpbmRpcj0kYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JZGxmaWxlc3xkbHByZWZpbGVzKQotCSAgJHByZWxvYWQgfHwgewotCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgotCSAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAU1lNRklMRUAiCi0JICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAU1lNRklMRUAiCi0JICAgIHByZWxvYWQ9OgotCSAgfQotCSAgY2FzZSAkYXJnIGluCi0JICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgotCSAgZm9yY2UpCi0JICAgIGlmIHRlc3Qgbm8gPSAiJGRsc2VsZiI7IHRoZW4KLQkgICAgICBkbHNlbGY9bmVlZGxlc3MKLQkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKLQkgICAgZmkKLQkgICAgcHJldj0KLQkgICAgY29udGludWUKLQkgICAgOzsKLQkgIHNlbGYpCi0JICAgIGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KLQkgICAgICBkbHNlbGY9eWVzCi0JICAgIGVsaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IiAmJiB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zZWxmIjsgdGhlbgotCSAgICAgIGRsc2VsZj15ZXMKLQkgICAgZWxzZQotCSAgICAgIGRsc2VsZj1uZWVkbGVzcwotCSAgICAgIGV4cG9ydF9keW5hbWljPXllcwotCSAgICBmaQotCSAgICBwcmV2PQotCSAgICBjb250aW51ZQotCSAgICA7OwotCSAgKikKLQkgICAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgotCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkYXJnIgotCSAgICBlbHNlCi0JICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCi0JICAgIGZpCi0JICAgIHByZXY9Ci0JICAgIGNvbnRpbnVlCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWV4cHN5bXMpCi0JICBleHBvcnRfc3ltYm9scz0kYXJnCi0JICB0ZXN0IC1mICIkYXJnIiBcCi0JICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlICckYXJnJyBkb2VzIG5vdCBleGlzdCIKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlleHBzeW1zX3JlZ2V4KQotCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9JGFyZwotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCWZyYW1ld29yaykKLQkgIGNhc2UgJGhvc3QgaW4KLQkgICAgKi0qLWRhcndpbiopCi0JICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgotCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKLQkJKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKLQkJICAgOzsKLQkgICAgICBlc2FjCi0JICAgICAgOzsKLQkgIGVzYWMKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlpbnN0X3ByZWZpeCkKLQkgIGluc3RfcHJlZml4X2Rpcj0kYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JbWxsdm0pCi0JICAjIENsYW5nIGRvZXMgbm90IHVzZSBMTFZNIHRvIGxpbmssIHNvIHdlIGNhbiBzaW1wbHkgZGlzY2FyZCBhbnkKLQkgICMgJy1tbGx2bSAkYXJnJyBvcHRpb25zIHdoZW4gZG9pbmcgdGhlIGxpbmsgc3RlcC4KLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlvYmplY3RsaXN0KQotCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KLQkgICAgc2F2ZV9hcmc9JGFyZwotCSAgICBtb3JlYXJncz0KLQkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAotCSAgICBkbwotIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCi0JICAgICAgYXJnPSRmaWwKLQkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KLQotCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KLQkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgotCQlwaWNfb2JqZWN0PQotCQlub25fcGljX29iamVjdD0KLQotCQkjIFJlYWQgdGhlIC5sbyBmaWxlCi0JCWZ1bmNfc291cmNlICIkYXJnIgotCi0JCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAotCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8Ci0JCSAgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgJiYKLQkJICAgdGVzdCBub25lID0gIiRub25fcGljX29iamVjdCI7IHRoZW4KLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgJyRhcmcnIgotCQlmaQotCi0JCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JCWZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JCXhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQotCQlpZiB0ZXN0IG5vbmUgIT0gIiRwaWNfb2JqZWN0IjsgdGhlbgotCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JCSAgcGljX29iamVjdD0keGRpciRwaWNfb2JqZWN0Ci0KLQkJICBpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCi0JCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IHllcyA9ICIkZGxvcGVuX3N1cHBvcnQiOyB0aGVuCi0JCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKLQkJICAgICAgcHJldj0KLQkJICAgICAgY29udGludWUKLQkJICAgIGVsc2UKLQkJICAgICAgIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KLQkJICAgICAgcHJldj1kbHByZWZpbGVzCi0JCSAgICBmaQotCQkgIGZpCi0KLQkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQotCQkgIGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KLQkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KLQkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKLQkJICAgIHByZXY9Ci0JCSAgZmkKLQotCQkgICMgQSBQSUMgb2JqZWN0LgotCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKLQkJICBhcmc9JHBpY19vYmplY3QKLQkJZmkKLQotCQkjIE5vbi1QSUMgb2JqZWN0LgotCQlpZiB0ZXN0IG5vbmUgIT0gIiRub25fcGljX29iamVjdCI7IHRoZW4KLQkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgotCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJG5vbl9waWNfb2JqZWN0Ci0KLQkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKLQkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCI7IHRoZW4KLQkJICAgIGFyZz0kbm9uX3BpY19vYmplY3QKLQkJICBmaQotCQllbHNlCi0JCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgotCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KLQkJICBub25fcGljX29iamVjdD0kcGljX29iamVjdAotCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkJZmkKLQkgICAgICBlbHNlCi0JCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgotCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KLQkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JCSAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCi0JCSAgZnVuY19sbzJvICIkYXJnIgotCQkgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0Ci0JCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAotCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKLQkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JICAgICAgICBlbHNlCi0JCSAgZnVuY19mYXRhbF9lcnJvciAiJyRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgotCQlmaQotCSAgICAgIGZpCi0JICAgIGRvbmUKLQkgIGVsc2UKLQkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlICckYXJnJyBkb2VzIG5vdCBleGlzdCIKLQkgIGZpCi0JICBhcmc9JHNhdmVfYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0Jb3MyZGxsbmFtZSkKLQkgIG9zMmRsbG5hbWU9JGFyZwotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCXByZWNpb3VzX3JlZ2V4KQotCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9JGFyZwotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCXJlbGVhc2UpCi0JICByZWxlYXNlPS0kYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JcnBhdGggfCB4cnBhdGgpCi0JICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KLQkgIGNhc2UgJGFyZyBpbgotCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwotCSAgKikKLQkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCi0JICAgIDs7Ci0JICBlc2FjCi0JICBpZiB0ZXN0IHJwYXRoID0gIiRwcmV2IjsgdGhlbgotCSAgICBjYXNlICIkcnBhdGggIiBpbgotCSAgICAqIiAkYXJnICIqKSA7OwotCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7Ci0JICAgIGVzYWMKLQkgIGVsc2UKLQkgICAgY2FzZSAiJHhycGF0aCAiIGluCi0JICAgICoiICRhcmcgIiopIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0Jc2hyZXh0KQotCSAgc2hyZXh0X2NtZHM9JGFyZwotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCXdlYWspCi0JICBmdW5jX2FwcGVuZCB3ZWFrX2xpYnMgIiAkYXJnIgotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCXhjY2xpbmtlcikKLQkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgotCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKLQkgIHByZXY9Ci0JICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKLQkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKLQkgIGNvbnRpbnVlCi0JICA7OwotCXhjb21waWxlcikKLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCi0JICBwcmV2PQotCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCi0JICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQl4bGlua2VyKQotCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCi0JICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRxYXJnIgotCSAgcHJldj0KLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgotCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgotCSAgY29udGludWUKLQkgIDs7Ci0JKikKLQkgIGV2YWwgIiRwcmV2PVwiXCRhcmdcIiIKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQllc2FjCi0gICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgotCi0gICAgICBwcmV2YXJnPSRhcmcKLQotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtYWxsLXN0YXRpYykKLQlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLQkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgotCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgotCWZpCi0JY29udGludWUKLQk7OwotCi0gICAgICAtYWxsb3ctdW5kZWZpbmVkKQotCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KLQlmdW5jX2ZhdGFsX2Vycm9yICInLWFsbG93LXVuZGVmaW5lZCcgbXVzdCBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IgotCTs7Ci0KLSAgICAgIC1hdm9pZC12ZXJzaW9uKQotCWF2b2lkX3ZlcnNpb249eWVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtYmluZGlyKQotCXByZXY9YmluZGlyCi0JY29udGludWUKLQk7OwotCi0gICAgICAtZGxvcGVuKQotCXByZXY9ZGxmaWxlcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWRscHJlb3BlbikKLQlwcmV2PWRscHJlZmlsZXMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1leHBvcnQtZHluYW1pYykKLQlleHBvcnRfZHluYW1pYz15ZXMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1leHBvcnQtc3ltYm9scyB8IC1leHBvcnQtc3ltYm9scy1yZWdleCkKLQlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgIGZ1bmNfZmF0YWxfZXJyb3IgIm1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCi0JZmkKLQlpZiB0ZXN0IFgtZXhwb3J0LXN5bWJvbHMgPSAiWCRhcmciOyB0aGVuCi0JICBwcmV2PWV4cHN5bXMKLQllbHNlCi0JICBwcmV2PWV4cHN5bXNfcmVnZXgKLQlmaQotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWZyYW1ld29yaykKLQlwcmV2PWZyYW1ld29yawotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWluc3QtcHJlZml4LWRpcikKLQlwcmV2PWluc3RfcHJlZml4Ci0JY29udGludWUKLQk7OwotCi0gICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCi0gICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCi0gICAgICAtTFtBLVpdW0EtWl0qOiopCi0JY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KLQluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQotCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKLQkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgotCSAgOzsKLQllc2FjCi0JY29udGludWUKLQk7OwotCi0gICAgICAtTCopCi0JZnVuY19zdHJpcG5hbWUgIi1MIiAnJyAiJGFyZyIKLQlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgotCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiAnLUwnIGFuZCAnJDEnIgotCSAgZWxzZQotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yICctTCcgb3B0aW9uIgotCSAgZmkKLQlmaQotCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotCWRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0Ci0JIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0JY2FzZSAkZGlyIGluCi0JW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwotCSopCi0JICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCi0JICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRkaXInIgotCSAgZGlyPSRhYnNkaXIKLQkgIDs7Ci0JZXNhYwotCWNhc2UgIiRkZXBsaWJzICIgaW4KLQkqIiAtTCRkaXIgIiogfCAqIiAkYXJnICIqKQotCSAgIyBXaWxsIG9ubHkgaGFwcGVuIGZvciBhYnNvbHV0ZSBvciBzeXNyb290IGFyZ3VtZW50cwotCSAgOzsKLQkqKQotCSAgIyBQcmVzZXJ2ZSBzeXNyb290LCBidXQgbmV2ZXIgaW5jbHVkZSByZWxhdGl2ZSBkaXJlY3RvcmllcwotCSAgY2FzZSAkZGlyIGluCi0JICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKiB8ID0qKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1MJGRpciIgOzsKLQkgIGVzYWMKLQkgIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiCi0JICA7OwotCWVzYWMKLQljYXNlICRob3N0IGluCi0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKLQkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQgJ3MqL2xpYiQqL2JpbionYAotCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCi0JICAqIjokZGlyOiIqKSA7OwotCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7Ci0JICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGRpciI7OwotCSAgZXNhYwotCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCi0JICAqIjokdGVzdGJpbmRpcjoiKikgOzsKLQkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKLQkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbCopCi0JaWYgdGVzdCBYLWxjID0gIlgkYXJnIiB8fCB0ZXN0IFgtbG0gPSAiWCRhcmciOyB0aGVuCi0JICBjYXNlICRob3N0IGluCi0JICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCi0JICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCi0JICAgIGNvbnRpbnVlCi0JICAgIDs7Ci0JICAqLSotb3MyKikKLQkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFzIHN1Y2gpCi0JICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKLQkgICAgOzsKLQkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqIHwgKi0qLWJpdHJpZyopCi0JICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgotCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCi0JICAgIDs7Ci0JICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCi0JICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0JICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCi0JICAgIGNvbnRpbnVlCi0JICAgIDs7Ci0JICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCi0JICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQotCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCi0JICAgIDs7Ci0JICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCi0JICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKLQkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQotCSAgICA7OwotCSAgZXNhYwotCWVsaWYgdGVzdCBYLWxjX3IgPSAiWCRhcmciOyB0aGVuCi0JIGNhc2UgJGhvc3QgaW4KLQkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSogfCAqLSotYml0cmlnKikKLQkgICAjIERvIG5vdCBpbmNsdWRlIGxpYmNfciBkaXJlY3RseSwgdXNlIC1wdGhyZWFkIGZsYWcuCi0JICAgY29udGludWUKLQkgICA7OwotCSBlc2FjCi0JZmkKLQlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1tbGx2bSkKLQlwcmV2PW1sbHZtCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbW9kdWxlKQotCW1vZHVsZT15ZXMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKLSAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KLSAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCi0gICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKLQlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCi0JZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKLQlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKLQlwcmV2PXhjb21waWxlcgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCi0gICAgICB8LXRocmVhZHN8LWZvcGVubXB8LW9wZW5tcHwtbXB8LXhvcGVubXB8LW9tcHwtcXNtcD0qKQotCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKLQlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgotCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgotCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCi0JICAgICoiICRhcmcgIiopIDs7Ci0JICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7Ci0JZXNhYwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLW11bHRpX21vZHVsZSkKLQlzaW5nbGVfbW9kdWxlPSR3bC1tdWx0aV9tb2R1bGUKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1uby1mYXN0LWluc3RhbGwpCi0JZmFzdF9pbnN0YWxsPW5vCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbm8taW5zdGFsbCkKLQljYXNlICRob3N0IGluCi0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQotCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCi0JICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KLQkgIGZ1bmNfd2FybmluZyAiJy1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKLQkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgJy1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCi0JICBmYXN0X2luc3RhbGw9bm8KLQkgIDs7Ci0JKikgbm9faW5zdGFsbD15ZXMgOzsKLQllc2FjCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbm8tdW5kZWZpbmVkKQotCWFsbG93X3VuZGVmaW5lZD1ubwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLW9iamVjdGxpc3QpCi0JcHJldj1vYmplY3RsaXN0Ci0JY29udGludWUKLQk7OwotCi0gICAgICAtb3MyZGxsbmFtZSkKLQlwcmV2PW9zMmRsbG5hbWUKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1vKSBwcmV2PW91dHB1dCA7OwotCi0gICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCi0JcHJldj1wcmVjaW91c19yZWdleAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXJlbGVhc2UpCi0JcHJldj1yZWxlYXNlCi0JY29udGludWUKLQk7OwotCi0gICAgICAtcnBhdGgpCi0JcHJldj1ycGF0aAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLVIpCi0JcHJldj14cnBhdGgKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1SKikKLQlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgotCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0JY2FzZSAkZGlyIGluCi0JW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwotCT0qKQotCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgotCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgOzsKLQkqKQotCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCi0JICA7OwotCWVzYWMKLQljYXNlICIkeHJwYXRoICIgaW4KLQkqIiAkZGlyICIqKSA7OwotCSopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7Ci0JZXNhYwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXNoYXJlZCkKLQkjIFRoZSBlZmZlY3RzIG9mIC1zaGFyZWQgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXNocmV4dCkKLQlwcmV2PXNocmV4dAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQotCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCi0JIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0Ci0JIyBkaWRuJ3QgaGF2ZSBhIFBJQyBmbGFnLCBidXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZWZmZWN0cwotCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAotCSMgRGlnaXRhbCBVbml4IGFuZCBBSVguCi0JY29udGludWUKLQk7OwotCi0gICAgICAtdGhyZWFkLXNhZmUpCi0JdGhyZWFkX3NhZmU9eWVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtdmVyc2lvbi1pbmZvKQotCXByZXY9dmluZm8KLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC12ZXJzaW9uLW51bWJlcikKLQlwcmV2PXZpbmZvCi0JdmluZm9fbnVtYmVyPXllcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXdlYWspCi0gICAgICAgIHByZXY9d2VhawotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLVdjLCopCi0JZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgotCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCWFyZz0KLQlzYXZlX2lmcz0kSUZTOyBJRlM9LAotCWZvciBmbGFnIGluICRhcmdzOyBkbwotCSAgSUZTPSRzYXZlX2lmcwotICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgotCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0JZG9uZQotCUlGUz0kc2F2ZV9pZnMKLQlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCi0JYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQk7OwotCi0gICAgICAtV2wsKikKLQlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCi0JYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JYXJnPQotCXNhdmVfaWZzPSRJRlM7IElGUz0sCi0JZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCi0JICBJRlM9JHNhdmVfaWZzCi0gICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCi0JICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0JICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLQkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLQlkb25lCi0JSUZTPSRzYXZlX2lmcwotCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKLQlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCTs7Ci0KLSAgICAgIC1YY29tcGlsZXIpCi0JcHJldj14Y29tcGlsZXIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1YbGlua2VyKQotCXByZXY9eGxpbmtlcgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLVhDQ2xpbmtlcikKLQlwcmV2PXhjY2xpbmtlcgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYwotICAgICAgLW1zZ18qKQotCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0JYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAotCTs7Ci0KLSAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKLSAgICAgICMgLTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNvbXBpbGVyCi0gICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCi0gICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgotICAgICAgIyArREEqLCArREQqICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBIUCBjb21waWxlcgotICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCi0gICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCi0gICAgICAjIC1GL3BhdGggICAgICAgICAgICAgIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgotICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKLSAgICAgICMgLWZzdGFjay1wcm90ZWN0b3IqICAgc3RhY2sgcHJvdGVjdG9yIGZsYWdzIGZvciBHQ0MKLSAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCi0gICAgICAjIC10cD0qICAgICAgICAgICAgICAgIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KLSAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAotICAgICAgIyAtTyosIC1nKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgotICAgICAgIyAtc3BlY3M9KiAgICAgICAgICAgICBHQ0Mgc3BlY3MgZmlsZXMKLSAgICAgICMgLXN0ZGxpYj0qICAgICAgICAgICAgc2VsZWN0IGMrKyBzdGQgbGliIHdpdGggY2xhbmcKLSAgICAgICMgLWZzYW5pdGl6ZT0qICAgICAgICAgQ2xhbmcvR0NDIG1lbW9yeSBhbmQgYWRkcmVzcyBzYW5pdGl6ZXIKLSAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAotICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCi0gICAgICAtTyp8LWcqfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2lufC1mc3RhY2stcHJvdGVjdG9yKnwtc3RkbGliPSp8IFwKLSAgICAgIC1zcGVjcz0qfC1mc2FuaXRpemU9KikKLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0gICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0gICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgotICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICAgIDs7Ci0KLSAgICAgIC1aKikKLSAgICAgICAgaWYgdGVzdCBvczIgPSAiYGV4cHIgJGhvc3QgOiAnLipcKG9zMlwpJ2AiOyB0aGVuCi0gICAgICAgICAgIyBPUy8yIHVzZXMgLVp4eHggdG8gc3BlY2lmeSBPUy8yLXNwZWNpZmljIG9wdGlvbnMKLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0JICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKLQkgIGNhc2UgJGFyZyBpbgotCSAgLVpsaW5rZXIgfCAtWnN0YWNrKQotCSAgICBwcmV2PXhjb21waWxlcgotCSAgICA7OwotCSAgZXNhYwotCSAgY29udGludWUKLSAgICAgICAgZWxzZQotCSAgIyBPdGhlcndpc2UgdHJlYXQgbGlrZSAnU29tZSBvdGhlciBjb21waWxlciBmbGFnJyBiZWxvdwotCSAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQkgIGFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLSAgICAgICAgZmkKLQk7OwotCi0gICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KLSAgICAgIC0qIHwgKyopCi0gICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0JYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAotCTs7Ci0KLSAgICAgICouJG9iamV4dCkKLQkjIEEgc3RhbmRhcmQgb2JqZWN0LgotCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgotCTs7Ci0KLSAgICAgICoubG8pCi0JIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCi0KLQkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCi0JaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KLQkgIHBpY19vYmplY3Q9Ci0JICBub25fcGljX29iamVjdD0KLQotCSAgIyBSZWFkIHRoZSAubG8gZmlsZQotCSAgZnVuY19zb3VyY2UgIiRhcmciCi0KLQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAotCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAotCSAgICAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiAmJgotCSAgICAgdGVzdCBub25lID0gIiRub25fcGljX29iamVjdCI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yICckYXJnJyIKLQkgIGZpCi0KLQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgotCSAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCi0JICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiIHx8IHsKLQkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkgICAgcGljX29iamVjdD0keGRpciRwaWNfb2JqZWN0Ci0KLQkgICAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgotCSAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgeWVzID0gIiRkbG9wZW5fc3VwcG9ydCI7IHRoZW4KLQkJZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgotCQlwcmV2PQotCQljb250aW51ZQotCSAgICAgIGVsc2UKLQkJIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KLQkJcHJldj1kbHByZWZpbGVzCi0JICAgICAgZmkKLQkgICAgZmkKLQotCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQotCSAgICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCi0JICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKLQkgICAgICBwcmV2PQotCSAgICBmaQotCi0JICAgICMgQSBQSUMgb2JqZWN0LgotCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCi0JICAgIGFyZz0kcGljX29iamVjdAotCSAgfQotCi0JICAjIE5vbi1QSUMgb2JqZWN0LgotCSAgaWYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCi0JICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJG5vbl9waWNfb2JqZWN0Ci0KLQkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0Ci0JICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCI7IHRoZW4KLQkgICAgICBhcmc9JG5vbl9waWNfb2JqZWN0Ci0JICAgIGZpCi0JICBlbHNlCi0JICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KLQkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgotCSAgICBub25fcGljX29iamVjdD0kcGljX29iamVjdAotCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JICBmaQotCWVsc2UKLQkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgotCSAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCi0JICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JICAgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQotCSAgICBmdW5jX2xvMm8gIiRhcmciCi0JICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0Ci0JICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKLQkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgotCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JICBlbHNlCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKLQkgIGZpCi0JZmkKLQk7OwotCi0gICAgICAqLiRsaWJleHQpCi0JIyBBbiBhcmNoaXZlLgotCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgotCWZ1bmNfYXBwZW5kIG9sZF9kZXBsaWJzICIgJGFyZyIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgICoubGEpCi0JIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgotCi0JZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCi0JaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgotCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCi0JICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLQkgIHByZXY9Ci0JZWxpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCi0JICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgotCSAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCi0JICBwcmV2PQotCWVsc2UKLQkgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotCWZpCi0JY29udGludWUKLQk7OwotCi0gICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgYXJndW1lbnQuCi0gICAgICAqKQotCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAotCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCi0JZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0JOzsKLSAgICAgIGVzYWMgIyBhcmcKLQotICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCi0gICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgotCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0JZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0gICAgICBmaQotICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKLQotICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCi0gICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSAnJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKLQotICAgIGlmIHRlc3QgeWVzID0gIiRleHBvcnRfZHluYW1pYyIgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KLSAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCi0gICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgotICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0gICAgZmkKLQotICAgIG9sZGxpYnM9Ci0gICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQotICAgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCi0gICAgb3V0cHV0bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLSAgICBsaWJvYmpzX3NhdmU9JGxpYm9ianMKLQotICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgotICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCi0gICAgZWxzZQotICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9Ci0gICAgZmkKLSAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKLSAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCi0KLSAgICAjIERlZmluaXRpb24gaXMgaW5qZWN0ZWQgYnkgTFRfQ09ORklHIGR1cmluZyBsaWJ0b29sIGdlbmVyYXRpb24uCi0gICAgZnVuY19tdW5nZV9wYXRoX2xpc3Qgc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIkTFRfU1lTX0xJQlJBUllfUEFUSCIKLQotICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCi0gICAgb3V0cHV0X29iamRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIKLSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvIgotICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0gICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCi0gICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKLQotICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAotICAgIGNhc2UgJG91dHB1dCBpbgotICAgICIiKQotICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIgotICAgICAgOzsKLSAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OwotICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OwotICAgICoubGEpIGxpbmttb2RlPWxpYiA7OwotICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCi0gICAgZXNhYwotCi0gICAgc3BlY2lhbGRlcGxpYnM9Ci0KLSAgICBsaWJzPQotICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcwotICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQotICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0gICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCi0JY2FzZSAiJGxpYnMgIiBpbgotCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgZnVuY19hcHBlbmQgbGlicyAiICRkZXBsaWIiCi0gICAgZG9uZQotCi0gICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgotICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCi0KLSAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCi0gICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCi0gICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KLSAgICAgIHByZV9wb3N0X2RlcHM9Ci0gICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgotCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbwotCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgotCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkcHJlX3Bvc3RfZGVwcyIgOzsKLQkgIGVzYWMKLQkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgotCWRvbmUKLSAgICAgIGZpCi0gICAgICBwcmVfcG9zdF9kZXBzPQotICAgIGZpCi0KLSAgICBkZXBsaWJzPQotICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KLSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9Ci0gICAgbmVlZF9yZWxpbms9bm8gIyB3aGV0aGVyIHdlJ3JlIGxpbmtpbmcgYW55IHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCi0gICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKLSAgICBub3RpbnN0X3BhdGg9ICMgcGF0aHMgdGhhdCBjb250YWluIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKLQotICAgIGNhc2UgJGxpbmttb2RlIGluCi0gICAgbGliKQotCXBhc3Nlcz0iY29udiBkbHByZW9wZW4gbGluayIKLQlmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KLQkgIGNhc2UgJGZpbGUgaW4KLQkgICoubGEpIDs7Ci0JICAqKQotCSAgICBmdW5jX2ZhdGFsX2hlbHAgImxpYnJhcmllcyBjYW4gJy1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgotCSAgICA7OwotCSAgZXNhYwotCWRvbmUKLQk7OwotICAgIHByb2cpCi0JY29tcGlsZV9kZXBsaWJzPQotCWZpbmFsaXplX2RlcGxpYnM9Ci0JYWxsZGVwbGlicz1mYWxzZQotCW5ld2RsZmlsZXM9Ci0JbmV3ZGxwcmVmaWxlcz0KLQlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCi0JOzsKLSAgICAqKSAgcGFzc2VzPSJjb252IgotCTs7Ci0gICAgZXNhYwotCi0gICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KLSAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQotICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KLSAgICAgIGlmIHRlc3QgbGliLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgotCSMjIEZJWE1FOiBGaW5kIHRoZSBwbGFjZSB3aGVyZSB0aGUgbGlzdCBpcyByZWJ1aWx0IGluIHRoZSB3cm9uZwotCSMjICAgICAgICBvcmRlciwgYW5kIGZpeCBpdCB0aGVyZSBwcm9wZXJseQotICAgICAgICB0bXBfZGVwbGlicz0KLQlmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwotCSAgdG1wX2RlcGxpYnM9IiRkZXBsaWIgJHRtcF9kZXBsaWJzIgotCWRvbmUKLQlkZXBsaWJzPSR0bXBfZGVwbGlicwotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiIHx8Ci0JIHRlc3QgcHJvZyxzY2FuID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KLQlsaWJzPSRkZXBsaWJzCi0JZGVwbGlicz0KLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgotCWNhc2UgJHBhc3MgaW4KLQlkbG9wZW4pIGxpYnM9JGRsZmlsZXMgOzsKLQlkbHByZW9wZW4pIGxpYnM9JGRscHJlZmlsZXMgOzsKLQlsaW5rKQotCSAgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlIgotCSAgdGVzdCAiWCRsaW5rX2FsbF9kZXBsaWJzIiAhPSBYbm8gJiYgbGlicz0iJGxpYnMgJGRlcGVuZGVuY3lfbGlicyIKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgbGliLGRscHJlb3BlbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCi0JIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicwotCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCi0JICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCi0JICBkZXBlbmRlbmN5X2xpYnM9Ci0JICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKLQkgIGNhc2UgJGxpYiBpbgotCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7Ci0JICBlc2FjCi0KLQkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQotCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCi0JICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCi0gICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgotCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OwotCSAgICBlc2FjCi0JICBkb25lCi0JZG9uZQotCWxpYnM9JGRscHJlZmlsZXMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KLQkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCi0Jc2F2ZV9kZXBsaWJzPSRkZXBsaWJzCi0JZGVwbGlicz0KLSAgICAgIGZpCi0KLSAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCi0JbGliPQotCWZvdW5kPWZhbHNlCi0JY2FzZSAkZGVwbGliIGluCi0JLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCi0gICAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCi0JICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCi0JICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgotCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgZWxzZQotCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCi0JICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KLQkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KLQkJICAgICoiICRkZXBsaWIgIiopIDs7Ci0JCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OwotCQllc2FjCi0JICAgIGZpCi0JICBmaQotCSAgY29udGludWUKLQkgIDs7Ci0JLWwqKQotCSAgaWYgdGVzdCBsaWIgIT0gIiRsaW5rbW9kZSIgJiYgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAiJy1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgotCSAgICBjb250aW51ZQotCSAgZmkKLQkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCi0JICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KLQkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgotCSAgZWxzZQotCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgotCSAgZmkKLQkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCi0JICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCi0JICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQotCSAgICAgIGxpYj0kc2VhcmNoZGlyL2xpYiRuYW1lJHNlYXJjaF9leHQKLQkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgotCQlpZiB0ZXN0IC5sYSA9ICIkc2VhcmNoX2V4dCI7IHRoZW4KLQkJICBmb3VuZD06Ci0JCWVsc2UKLQkJICBmb3VuZD1mYWxzZQotCQlmaQotCQlicmVhayAyCi0JICAgICAgZmkKLQkgICAgZG9uZQotCSAgZG9uZQotCSAgaWYgJGZvdW5kOyB0aGVuCi0JICAgICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5Ci0JICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAotCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgotCSAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgotCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgotCSAgICAgICoiICRkZXBsaWIgIiopCi0JCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KLQkJICBsaWJyYXJ5X25hbWVzPQotCQkgIG9sZF9saWJyYXJ5PQotCQkgIGZ1bmNfc291cmNlICIkbGliIgotCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KLQkJICAgIGxsPSRsCi0JCSAgZG9uZQotCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKLQkJICAgIGZvdW5kPWZhbHNlCi0JCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgotCQkgICAgbGFkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5Ci0JCSAgICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCi0JCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgotCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCQkgICAgZWxzZQotCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCQkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCQkgICAgZmkKLQkJICAgIGNvbnRpbnVlCi0JCSAgZmkKLQkJZmkKLQkJOzsKLQkgICAgICAqKSA7OwotCSAgICAgIGVzYWMKLQkgICAgZmkKLQkgIGVsc2UKLQkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5Ci0JICAgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KLQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBlbHNlCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgICBmaQotCSAgICBjb250aW51ZQotCSAgZmkKLQkgIDs7ICMgLWwKLQkqLmx0ZnJhbWV3b3JrKQotCSAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgotCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKLQkgIGVsc2UKLQkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgotCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgotCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKLQkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7Ci0JCWVzYWMKLQkgICAgZmkKLQkgIGZpCi0JICBjb250aW51ZQotCSAgOzsKLQktTCopCi0JICBjYXNlICRsaW5rbW9kZSBpbgotCSAgbGliKQotCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICB0ZXN0IGNvbnYgPSAiJHBhc3MiICYmIGNvbnRpbnVlCi0JICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgotCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLQkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLQkgICAgOzsKLQkgIHByb2cpCi0JICAgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KLQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICAgIGNvbnRpbnVlCi0JICAgIGZpCi0JICAgIGlmIHRlc3Qgc2NhbiA9ICIkcGFzcyI7IHRoZW4KLQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICBlbHNlCi0JICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCi0JICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKLQkgICAgZmkKLQkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKLQkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0JICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCi0JICAgIDs7Ci0JICAqKQotCSAgICBmdW5jX3dhcm5pbmcgIictTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKLQkgICAgOzsKLQkgIGVzYWMgIyBsaW5rbW9kZQotCSAgY29udGludWUKLQkgIDs7ICMgLUwKLQktUiopCi0JICBpZiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCi0JICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCi0JICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgotCSAgICBjYXNlICIkeHJwYXRoICIgaW4KLQkgICAgKiIgJGRpciAiKikgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKLQkgICAgZXNhYwotCSAgZmkKLQkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICBjb250aW51ZQotCSAgOzsKLQkqLmxhKQotCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCi0JICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotCSAgOzsKLQkqLiRsaWJleHQpCi0JICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCi0JICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGNvbnRpbnVlCi0JICBmaQotCSAgY2FzZSAkbGlua21vZGUgaW4KLQkgIGxpYikKLQkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCi0JICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCi0JICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgotCSAgICAqIiAkZGVwbGliICIqKSA7OwotCSAgICAqKQotCSAgICAgIHZhbGlkX2FfbGliPWZhbHNlCi0JICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLQkJbWF0Y2hfcGF0dGVybiopCi0JCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKLQkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCi0JCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKLQkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkJICAgIHZhbGlkX2FfbGliPToKLQkJICBmaQotCQk7OwotCQlwYXNzX2FsbCkKLQkJICB2YWxpZF9hX2xpYj06Ci0JCTs7Ci0JICAgICAgZXNhYwotCSAgICAgIGlmICR2YWxpZF9hX2xpYjsgdGhlbgotCQllY2hvCi0JCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKLQkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCi0JCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgICAgZWxzZQotCQllY2hvCi0JCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCi0JCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCi0JCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCi0JICAgICAgZmkKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIGNvbnRpbnVlCi0JICAgIDs7Ci0JICBwcm9nKQotCSAgICBpZiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBmaQotCSAgICBjb250aW51ZQotCSAgICA7OwotCSAgZXNhYyAjIGxpbmttb2RlCi0JICA7OyAjICouJGxpYmV4dAotCSoubG8gfCAqLiRvYmpleHQpCi0JICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCi0JICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICBlbGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCi0JICAgIGlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIiB8fCB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fCB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0JICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCi0JICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCi0JICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCi0JICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKLQkgICAgZWxzZQotCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgotCSAgICBmaQotCSAgZmkKLQkgIGNvbnRpbnVlCi0JICA7OwotCSVERVBMSUJTJSkKLQkgIGFsbGRlcGxpYnM9OgotCSAgY29udGludWUKLQkgIDs7Ci0JZXNhYyAjIGNhc2UgJGRlcGxpYgotCi0JJGZvdW5kIHx8IHRlc3QgLWYgIiRsaWIiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5ICckbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgJyRkZXBsaWInIgotCi0JIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KLQlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCi0JICB8fCBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCi0JZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKLQlsYWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCi0JZGxuYW1lPQotCWRsb3Blbj0KLQlkbHByZW9wZW49Ci0JbGliZGlyPQotCWxpYnJhcnlfbmFtZXM9Ci0Jb2xkX2xpYnJhcnk9Ci0JaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KLQkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAotCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluawotCWluc3RhbGxlZD15ZXMKLQlzaG91bGRub3RsaW5rPW5vCi0JYXZvaWR0ZW1wcnBhdGg9Ci0KLQotCSMgUmVhZCB0aGUgLmxhIGZpbGUKLQlmdW5jX3NvdXJjZSAiJGxpYiIKLQotCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCi0JaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCi0JICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MvLWZyYW1ld29yayBcKFteICRdKlwpL1wxLmx0ZnJhbWV3b3JrL2cnYAotCSAgZm9yIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgaW4gJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzOyBkbwotCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KLQkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7Ci0JICAgIGVzYWMKLQkgIGRvbmUKLQlmaQotCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiAkZGVwZW5kZW5jeV9saWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCi0JaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiIHx8Ci0JICAgdGVzdCBwcm9nLHNjYW4gPSAiJGxpbmttb2RlLCRwYXNzIiB8fAotCSAgIHsgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGliICE9ICIkbGlua21vZGUiOyB9OyB0aGVuCi0JICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKLQkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgotCWZpCi0KLQlpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCi0JICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcwotCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKLQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KLQkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgJyRsaWInIgotCSAgICBmaQotCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCi0JICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgotCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCi0JICAgIHRtcF9saWJzPQotCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCi0JCWNhc2UgIiR0bXBfbGlicyAiIGluCi0JCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKLQkJZXNhYwotCSAgICAgIGZpCi0JICAgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgotCSAgICBkb25lCi0JICBlbGlmIHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIjsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKLQkgIGZpCi0JICBjb250aW51ZQotCWZpICMgJHBhc3MgPSBjb252Ci0KLQotCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KLQlsaW5rbGliPQotCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKLQkgICB7IHRlc3QgeWVzID0gIiRwcmVmZXJfc3RhdGljX2xpYnMiIHx8Ci0JICAgICB0ZXN0IGJ1aWx0LG5vID0gIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCI7IH07IHRoZW4KLQkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5Ci0JZWxzZQotCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbwotCSAgICBsaW5rbGliPSRsCi0JICBkb25lCi0JZmkKLQlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciAnJGxpYiciCi0JZmkKLQotCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgotCWlmIHRlc3QgZGxvcGVuID0gIiRwYXNzIjsgdGhlbgotCSAgdGVzdCAteiAiJGxpYmRpciIgXAotCSAgICAmJiBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6ICckbGliJyIKLQkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8Ci0JICAgICB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fAotCSAgICAgdGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIgotCSAgdGhlbgotCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZwotCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQotCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAotCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCi0JICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCi0JICBlbHNlCi0JICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgotCSAgZmkKLQkgIGNvbnRpbnVlCi0JZmkgIyAkcGFzcyA9IGRsb3BlbgotCi0JIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0JY2FzZSAkbGFkaXIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0kbGFkaXIgOzsKLQkqKQotCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCi0JICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRsYWRpciciCi0JICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKLQkgICAgYWJzX2xhZGlyPSRsYWRpcgotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCi0JbGFuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCi0JIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCi0JaWYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KLQkgIGlmIHRlc3QgISAtZiAiJGx0X3N5c3Jvb3QkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgJyRsaWInIHdhcyBtb3ZlZC4iCi0JICAgIGRpcj0kbGFkaXIKLQkgICAgYWJzZGlyPSRhYnNfbGFkaXIKLQkgICAgbGliZGlyPSRhYnNfbGFkaXIKLQkgIGVsc2UKLQkgICAgZGlyPSRsdF9zeXNyb290JGxpYmRpcgotCSAgICBhYnNkaXI9JGx0X3N5c3Jvb3QkbGliZGlyCi0JICBmaQotCSAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCi0JZWxzZQotCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KLQkgICAgZGlyPSRsYWRpcgotCSAgICBhYnNkaXI9JGFic19sYWRpcgotCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCi0JICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCi0JICBlbHNlCi0JICAgIGRpcj0kbGFkaXIvJG9iamRpcgotCSAgICBhYnNkaXI9JGFic19sYWRpci8kb2JqZGlyCi0JICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKLQkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKLQkgIGZpCi0JZmkgIyAkaW5zdGFsbGVkID0geWVzCi0JZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCi0JbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0KLQkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KLQlpZiB0ZXN0IGRscHJlb3BlbiA9ICIkcGFzcyI7IHRoZW4KLQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogJyRsaWInIgotCSAgZmkKLQkgIGNhc2UgJGhvc3QgaW4KLQkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgotCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKLQkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKLQkgICAgICAjIHN0YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVzZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0cmFjdAotCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKLQkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KLQkgICAgICAjIHRoaXMgYnkgcHV0dGluZyB0aGUgaW1wb3J0IGxpYnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVzLgotCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCi0JICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQotCSAgICAgICMgZGxuYW1lIGZyb20gdGhlIGxhIGZpbGUuCi0JICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLQkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCi0JICAgICAgICBldmFsICJsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdD1cJGFic19sYWRpci9cJGxhbmFtZSIKLQkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgotCSAgICAgIGVsc2UKLQkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjawotCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCi0JICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCi0JICAgICAgZmkKLQkgICAgOzsKLQkgICAgKiApCi0JICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCi0JICAgICAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCi0JICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgotCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCi0JICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KLQkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgotCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLQkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRkbG5hbWUiCi0JICAgICAgZWxzZQotCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCi0JICAgICAgZmkKLQkgICAgOzsKLQkgIGVzYWMKLQlmaSAjICRwYXNzID0gZGxwcmVvcGVuCi0KLQlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5Ci0JICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCi0JICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgotCSAgZWxpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCi0JICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGZpbmFsaXplX2RlcGxpYnMiCi0JICBlbHNlCi0JICAgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiICMgdXNlZCBmb3IgcHJvZyxzY2FuIHBhc3MKLQkgIGZpCi0JICBjb250aW51ZQotCWZpCi0KLQotCWlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiICYmIHRlc3QgbGluayAhPSAiJHBhc3MiOyB0aGVuCi0JICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCi0JICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgotCi0JICBsaW5rYWxsZGVwbGlicz1mYWxzZQotCSAgaWYgdGVzdCBubyAhPSAiJGxpbmtfYWxsX2RlcGxpYnMiIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAotCSAgICAgdGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotCSAgICBsaW5rYWxsZGVwbGlicz06Ci0JICBmaQotCi0JICB0bXBfbGlicz0KLQkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgY2FzZSAkZGVwbGliIGluCi0JICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKLQkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLQkgICAgICAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotCQkgOzsKLQkgICAgZXNhYwotCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/Ci0JICAgIGlmICRsaW5rYWxsZGVwbGliczsgdGhlbgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKLQkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcwotCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgICBmaQotCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCi0JICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KLQkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCi0JICBkb25lICMgZm9yIGRlcGxpYgotCSAgY29udGludWUKLQlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KLQotCWlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KLQkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgotCSAgICAgeyB7IHRlc3Qgbm8gPSAiJHByZWZlcl9zdGF0aWNfbGlicyIgfHwKLQkgICAgICAgICB0ZXN0IGJ1aWx0LHllcyA9ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiOyB9IHx8Ci0JICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KLQkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKLQkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCI7IHRoZW4KLQkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCi0JICAgICAgY2FzZSAkdGVtcF9ycGF0aDogaW4KLQkgICAgICAqIiRhYnNkaXI6IiopIDs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCi0JICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KLQkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQotCSAgICAjIHNlYXJjaCBwYXRoLgotCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCi0JICAgICoiICRhYnNkaXIgIiopIDs7Ci0JICAgICopCi0JICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgotCSAgICAgICoiICRhYnNkaXIgIiopIDs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgotCSAgICAqIiAkbGliZGlyICIqKSA7OwotCSAgICAqKQotCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCi0JICAgICAgKiIgJGxpYmRpciAiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCi0KLQkgIGlmICRhbGxkZXBsaWJzICYmCi0JICAgICB7IHRlc3QgcGFzc19hbGwgPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8fAotCSAgICAgICB7IHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmCi0JCSB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IH07IH07IHRoZW4KLQkgICAgIyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIGZvciBzdGF0aWMgbGlicmFyaWVzCi0JICAgIGNvbnRpbnVlCi0JICBmaQotCWZpCi0KLQlsaW5rX3N0YXRpYz1ubyAjIFdoZXRoZXIgdGhlIGRlcGxpYiB3aWxsIGJlIGxpbmtlZCBzdGF0aWNhbGx5Ci0JdXNlX3N0YXRpY19saWJzPSRwcmVmZXJfc3RhdGljX2xpYnMKLQlpZiB0ZXN0IGJ1aWx0ID0gIiR1c2Vfc3RhdGljX2xpYnMiICYmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCi0JICB1c2Vfc3RhdGljX2xpYnM9bm8KLQlmaQotCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgotCSAgIHsgdGVzdCBubyA9ICIkdXNlX3N0YXRpY19saWJzIiB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCi0JICBjYXNlICRob3N0IGluCi0JICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqIHwgKm9zMiopCi0JICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAotCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCi0JICAgICAgbmVlZF9yZWxpbms9bm8KLQkgICAgOzsKLQkgICopCi0JICAgIGlmIHRlc3Qgbm8gPSAiJGluc3RhbGxlZCI7IHRoZW4KLQkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgotCSAgICAgIG5lZWRfcmVsaW5rPXllcwotCSAgICBmaQotCSAgICA7OwotCSAgZXNhYwotCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKLQotCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uIHNvbWUKLQkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQotCSAgZGxvcGVubW9kdWxlPQotCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KLQkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgotCSAgICAgIGRsb3Blbm1vZHVsZT0kZGxwcmVtb2R1bGV0ZXN0Ci0JICAgICAgYnJlYWsKLQkgICAgZmkKLQkgIGRvbmUKLQkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgeWVzID0gIiRzaG91bGRub3RsaW5rIiAmJiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCi0JICAgIGVjaG8KLQkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KLQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCi0JICAgIGVsc2UKLQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgotCSAgICBmaQotCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCi0JICBmaQotCSAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIiAmJgotCSAgICAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2ludG9fbGlicyI7IHRoZW4KLQkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgotCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCi0JICAgICMgc2VhcmNoIHBhdGguCi0JICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KLQkgICAgKiIgJGFic2RpciAiKikgOzsKLQkgICAgKikKLQkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCi0JICAgICAgKiIgJGFic2RpciAiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCi0JICAgICoiICRsaWJkaXIgIiopIDs7Ci0JICAgICopCi0JICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KLQkgICAgICAqIiAkbGliZGlyICIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZmkKLQotCSAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIjsgdGhlbgotCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQotCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKLQkgICAgc2hpZnQKLQkgICAgcmVhbG5hbWU9JDEKLQkgICAgc2hpZnQKLQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCi0JICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPwotCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgotCSAgICAgIHNvbmFtZT0kZGxuYW1lCi0JICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgotCSAgICAgICMgYmxlaCB3aW5kb3dzCi0JICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKiB8ICpvczIqKQotCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKLQkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCXZlcnN1ZmZpeD0tJG1ham9yCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKLQkgICAgZWxzZQotCSAgICAgIHNvbmFtZT0kcmVhbG5hbWUKLQkgICAgZmkKLQotCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQotCSAgICBzb3Jvb3Q9JHNvbmFtZQotCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgotCSAgICBzb25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKLQkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKLQotCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdwotCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgotCSAgICBlbHNlCi0JICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gJyRzb25hbWUnIgotCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JwotCSAgICBmaQotCi0JICAgICMgQ3JlYXRlICRuZXdsaWIKLQkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQotCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgJyRzb25hbWUnIgotCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiICdleGl0ICQ/JwotCSAgICBmaQotCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQotCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKLQkgICAgbGlua2xpYj0kbmV3bGliCi0JICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKLQotCSAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCByZWxpbmsgIT0gIiRvcHRfbW9kZSI7IHRoZW4KLQkgICAgYWRkX3NobGlicGF0aD0KLQkgICAgYWRkX2Rpcj0KLQkgICAgYWRkPQotCSAgICBsaWJfbGlua2VkPXllcwotCSAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24gaW4KLQkgICAgaW1tZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCi0JICAgICAgaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfZGlyZWN0IjsgdGhlbgotCQlhZGQ9JGRpci8kbGlua2xpYgotCQljYXNlICRob3N0IGluCi0JCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPS1MJGRpciA7OwotCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPS1MJGRpciA7OwotCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAotCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9LUwkZGlyIDs7Ci0JCSAgKi0qLWRhcndpbiogKQotCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2Fubm90Ci0JCSAgICAjIGxpbmsgYWdhaW5zdCBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgZWFybGllciB3YXJuaW5ncwotCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8Ci0JCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsOyB0aGVuCi0JCSAgICAgIGlmIHRlc3QgIlgkZGxvcGVubW9kdWxlIiAhPSAiWCRsaWIiOyB0aGVuCi0JCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCi0JCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JCQkgIGVjaG8KLQkJCSAgZWNobyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCi0JCQkgIGVjaG8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgotCQkJZWxzZQotCQkJICBhZGQ9JGRpci8kb2xkX2xpYnJhcnkKLQkJCWZpCi0JCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCQkJYWRkPSRkaXIvJG9sZF9saWJyYXJ5Ci0JCSAgICAgIGZpCi0JCSAgICBmaQotCQllc2FjCi0JICAgICAgZWxpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgotCQljYXNlICRob3N0IGluCi0JCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9JGRpciA7OwotCQllc2FjCi0JCWFkZF9kaXI9LUwkZGlyCi0JCWFkZD0tbCRuYW1lCi0JICAgICAgZWxpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgotCQlhZGRfc2hsaWJwYXRoPSRkaXIKLQkJYWRkPS1sJG5hbWUKLQkgICAgICBlbHNlCi0JCWxpYl9saW5rZWQ9bm8KLQkgICAgICBmaQotCSAgICAgIDs7Ci0JICAgIHJlbGluaykKLQkgICAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgotCSAgICAgICAgIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSI7IHRoZW4KLQkJYWRkPSRkaXIvJGxpbmtsaWIKLQkgICAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgotCQlhZGRfZGlyPS1MJGFic2RpcgotCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCi0JCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCi0JCSAgY2FzZSAkbGliZGlyIGluCi0JCSAgICBbXFwvXSopCi0JCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgotCQkgICAgICA7OwotCQkgIGVzYWMKLQkJZmkKLQkJYWRkPS1sJG5hbWUKLQkgICAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgotCQlhZGRfc2hsaWJwYXRoPSRkaXIKLQkJYWRkPS1sJG5hbWUKLQkgICAgICBlbHNlCi0JCWxpYl9saW5rZWQ9bm8KLQkgICAgICBmaQotCSAgICAgIDs7Ci0JICAgICopIGxpYl9saW5rZWQ9bm8gOzsKLQkgICAgZXNhYwotCi0JICAgIGlmIHRlc3QgeWVzICE9ICIkbGliX2xpbmtlZCI7IHRoZW4KLQkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCi0JICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgotCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgotCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCi0JICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCi0JICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKLQkgICAgICBpZiB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKLQkJIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfbWludXNfTCIgJiYKLQkJIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgotCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgotCQkqIjokbGliZGlyOiIqKSA7OwotCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OwotCQllc2FjCi0JICAgICAgZmkKLQkgICAgZmkKLQkgIGZpCi0KLQkgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KLQkgICAgYWRkX3NobGlicGF0aD0KLQkgICAgYWRkX2Rpcj0KLQkgICAgYWRkPQotCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgotCSAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgotCSAgICAgICB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiOyB0aGVuCi0JICAgICAgYWRkPSRsaWJkaXIvJGxpbmtsaWIKLQkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KLQkgICAgICBhZGRfZGlyPS1MJGxpYmRpcgotCSAgICAgIGFkZD0tbCRuYW1lCi0JICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCi0JICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KLQkgICAgICAqIjokbGliZGlyOiIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIGFkZD0tbCRuYW1lCi0JICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyI7IHRoZW4KLQkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgotCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiOyB0aGVuCi0JCWFkZD0kaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYgotCSAgICAgIGVsc2UKLQkJYWRkPSRsaWJkaXIvJGxpbmtsaWIKLQkgICAgICBmaQotCSAgICBlbHNlCi0JICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KLQkgICAgICBhZGRfZGlyPS1MJGxpYmRpcgotCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KLQkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgotCQljYXNlICRsaWJkaXIgaW4KLQkJICBbXFwvXSopCi0JCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKLQkJICAgIDs7Ci0JCWVzYWMKLQkgICAgICBmaQotCSAgICAgIGFkZD0tbCRuYW1lCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KLQkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9kaXIgJGZpbmFsaXplX2RlcGxpYnMiCi0JICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZCAkZmluYWxpemVfZGVwbGlicyIKLQkgICAgZWxzZQotCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKLQkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgotCSAgICBmaQotCSAgZmkKLQllbGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCi0JICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgb25lIG9mIGhhcmRjb2RlX2RpcmVjdCBvciBoYXJkY29kZV9taW51c19MCi0JICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKLQkgICMgc2hhcmVkIHBsYXRmb3Jtcy4KLQkgIGlmIHRlc3QgdW5zdXBwb3J0ZWQgIT0gIiRoYXJkY29kZV9kaXJlY3QiOyB0aGVuCi0JICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0kb2xkX2xpYnJhcnkKLQkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCi0JICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0JICBlbHNlCi0JICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCi0JICBmaQotCWVsaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KLQkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKLQkgIGlmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KLQkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCi0JICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgotCi0JICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KLQkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCi0JICAgIGVjaG8KLQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW5ub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCi0JICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCi0JICAgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiOyB0aGVuCi0JICAgICAgZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgotCSAgICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgotCSAgICAgIGVjaG8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKLQkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotCQllY2hvCi0JCWVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgotCQllY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nICdubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCi0JCWVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKLQkJZWNobyAiKioqICdubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKLQkgICAgICBmaQotCSAgICAgIGlmIHRlc3Qgbm8gPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCi0JCWJ1aWxkX29sZF9saWJzPXllcwotCSAgICAgIGVsc2UKLQkJYnVpbGRfbGlidG9vbF9saWJzPW5vCi0JICAgICAgZmkKLQkgICAgZmkKLQkgIGVsc2UKLQkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCi0JICAgIGxpbmtfc3RhdGljPXllcwotCSAgZmkKLQlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PwotCi0JaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgotCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKLQkgICAgIHsgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHx8Ci0JICAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgfHwKLQkgICAgICAgdGVzdCB5ZXMgPSAiJGxpbmtfc3RhdGljIjsgfTsgdGhlbgotCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKLQkgICAgdGVtcF9kZXBsaWJzPQotCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAgICAgY2FzZSAkbGliZGlyIGluCi0JICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgotCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCQkgICBjYXNlICIgJHhycGF0aCAiIGluCi0JCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKLQkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7Ci0JCSAgIGVzYWM7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfZGVwbGlicyAiICRsaWJkaXIiOzsKLQkgICAgICBlc2FjCi0JICAgIGRvbmUKLQkgICAgZGVwZW5kZW5jeV9saWJzPSR0ZW1wX2RlcGxpYnMKLQkgIGZpCi0KLQkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCi0JICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKLQkgIHRlc3Qgbm8gPSAiJGxpbmtfc3RhdGljIiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKLQkgIHRtcF9saWJzPQotCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKLQkgICAgY2FzZSAkZGVwbGliIGluCi0gICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKLSAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OwotICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKLSAgICAgICAgICAgIGVzYWMKLQkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgotCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCi0JICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKLSAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCi0JICBkb25lCi0KLQkgIGlmIHRlc3Qgbm8gIT0gIiRsaW5rX2FsbF9kZXBsaWJzIjsgdGhlbgotCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcwotCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAgICAgcGF0aD0KLQkgICAgICBjYXNlICRkZXBsaWIgaW4KLQkgICAgICAtTCopIHBhdGg9JGRlcGxpYiA7OwotCSAgICAgICoubGEpCi0JICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKLQkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0Ci0JICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgotCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0JCWNhc2UgJGRpciBpbgotCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0kZGlyIDs7Ci0JCSopCi0JCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAotCQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCi0JCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRkaXInIgotCQkgICAgYWJzZGlyPSRkaXIKLQkJICBmaQotCQkgIDs7Ci0JCWVzYWMKLQkJaWYgJEdSRVAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KLQkJY2FzZSAkaG9zdCBpbgotCQkqLSotZGFyd2luKikKLQkJICBkZXBkZXBsPQotCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJFNFRCAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCi0JCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiOyB0aGVuCi0JCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzOyBkbwotCQkgICAgICBkZXBkZXBsPSR0bXAKLQkJICAgIGRvbmUKLQkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCI7IHRoZW4KLQkJICAgICAgZGVwZGVwbD0kYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwKLQkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJE9UT09MIC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAkT1RPT0w2NCAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLQkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wtZHlsaWJfZmlsZSAkd2wkZGFyd2luX2luc3RhbGxfbmFtZTokZGVwZGVwbCIKLQkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJGRhcndpbl9pbnN0YWxsX25hbWU6JGRlcGRlcGwiCi0JCSAgICAgIHBhdGg9Ci0JCSAgICBmaQotCQkgIGZpCi0JCSAgOzsKLQkJKikKLQkJICBwYXRoPS1MJGFic2Rpci8kb2JqZGlyCi0JCSAgOzsKLQkJZXNhYwotCQllbHNlCi0JCSAgZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCi0JCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgICAgZnVuY19mYXRhbF9lcnJvciAiJyRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLQkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAotCQkgICAgZnVuY193YXJuaW5nICInJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCi0KLQkJICBwYXRoPS1MJGFic2RpcgotCQlmaQotCQk7OwotCSAgICAgIGVzYWMKLQkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgotCSAgICAgICoiICRwYXRoICIqKSA7OwotCSAgICAgICopIGRlcGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCi0JZmkgIyBsaW5rbW9kZSA9IGxpYgotICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKLSAgICAgIGlmIHRlc3QgbGluayA9ICIkcGFzcyI7IHRoZW4KLQlpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgotCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKLQkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKLQllbHNlCi0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQlmaQotICAgICAgZmkKLSAgICAgIGRlcGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9saWJzCi0gICAgICBpZiB0ZXN0IGRscHJlb3BlbiA9ICIkcGFzcyI7IHRoZW4KLQkjIExpbmsgdGhlIGRscHJlb3BlbmVkIGxpYnJhcmllcyBiZWZvcmUgb3RoZXIgbGlicmFyaWVzCi0JZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbwotCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQlkb25lCi0gICAgICBmaQotICAgICAgaWYgdGVzdCBkbG9wZW4gIT0gIiRwYXNzIjsgdGhlbgotCXRlc3QgY29udiA9ICIkcGFzcyIgfHwgewotCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgotCSAgbGliX3NlYXJjaF9wYXRoPQotCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbwotCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KLQkgICAgKiIgJGRpciAiKikgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIgOzsKLQkgICAgZXNhYwotCSAgZG9uZQotCSAgbmV3bGliX3NlYXJjaF9wYXRoPQotCX0KLQotCWlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KLQkgIHZhcnM9ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBsaWJzIgotCWVsc2UKLQkgIHZhcnM9ZGVwbGlicwotCWZpCi0JZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCi0JICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKLQkgIG5ld19saWJzPQotCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCi0JICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCi0JICAgICMgICAgICAgIHRoYXQgc29tZSBuYXN0eSBkZXBlbmRlbmN5IGxvb3AgaXNuJ3QgYWNjaWRlbnRhbGx5Ci0JICAgICMgICAgICAgIGJyb2tlbjoKLQkgICAgI25ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIKLQkgICAgIyBQcmFnbWF0aWNhbGx5LCB0aGlzIHNlZW1zIHRvIGNhdXNlIHZlcnkgZmV3IHByb2JsZW1zIGluCi0JICAgICMgcHJhY3RpY2U6Ci0JICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAtTCopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKLQkgICAgLVIqKSA7OwotCSAgICAqKQotCSAgICAgICMgQW5kIGhlcmUgaXMgdGhlIHJlYXNvbjogd2hlbiBhIGxpYnJhcnkgYXBwZWFycyBtb3JlCi0JICAgICAgIyB0aGFuIG9uY2UgYXMgYW4gZXhwbGljaXQgZGVwZW5kZW5jZSBvZiBhIGxpYnJhcnksIG9yCi0JICAgICAgIyBpcyBpbXBsaWNpdGx5IGxpbmtlZCBpbiBtb3JlIHRoYW4gb25jZSBieSB0aGUKLQkgICAgICAjIGNvbXBpbGVyLCBpdCBpcyBjb25zaWRlcmVkIHNwZWNpYWwsIGFuZCBtdWx0aXBsZQotCSAgICAgICMgb2NjdXJyZW5jZXMgdGhlcmVvZiBhcmUgbm90IHJlbW92ZWQuICBDb21wYXJlIHRoaXMKLQkgICAgICAjIHdpdGggaGF2aW5nIHRoZSBzYW1lIGxpYnJhcnkgYmVpbmcgbGlzdGVkIGFzIGEKLQkgICAgICAjIGRlcGVuZGVuY3kgb2YgbXVsdGlwbGUgb3RoZXIgbGlicmFyaWVzOiBpbiB0aGlzIGNhc2UsCi0JICAgICAgIyB3ZSBrbm93IChwZWRhbnRpY2FsbHksIHdlIGFzc3VtZSkgdGhlIGxpYnJhcnkgZG9lcyBub3QKLQkgICAgICAjIG5lZWQgdG8gYmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlLCBzbyB3ZSBrZWVwIG9ubHkgdGhlCi0JICAgICAgIyBsYXN0IGNvcHkuICBUaGlzIGlzIG5vdCBhbHdheXMgcmlnaHQsIGJ1dCBpdCBpcyByYXJlCi0JICAgICAgIyBlbm91Z2ggdGhhdCB3ZSByZXF1aXJlIHVzZXJzIHRoYXQgcmVhbGx5IG1lYW4gdG8gcGxheQotCSAgICAgICMgc3VjaCB1bnBvcnRhYmxlIGxpbmtpbmcgdHJpY2tzIHRvIGxpbmsgdGhlIGxpYnJhcnkKLQkgICAgICAjIHVzaW5nIC1XbCwtbG5hbWUsIHNvIHRoYXQgbGlidG9vbCBkb2VzIG5vdCBjb25zaWRlciBpdAotCSAgICAgICMgZm9yIGR1cGxpY2F0ZSByZW1vdmFsLgotCSAgICAgIGNhc2UgIiAkc3BlY2lhbGRlcGxpYnMgIiBpbgotCSAgICAgICoiICRkZXBsaWIgIiopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKLQkgICAgICAqKQotCQljYXNlICIgJG5ld19saWJzICIgaW4KLQkJKiIgJGRlcGxpYiAiKikgOzsKLQkJKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OwotCQllc2FjCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGRvbmUKLQkgIHRtcF9saWJzPQotCSAgZm9yIGRlcGxpYiBpbiAkbmV3X2xpYnM7IGRvCi0JICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAtTCopCi0JICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCi0JICAgICAgKiIgJGRlcGxpYiAiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKLQkgICAgZXNhYwotCSAgZG9uZQotCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKLQlkb25lICMgZm9yIHZhcgotICAgICAgZmkKLQotICAgICAgIyBBZGQgU3VuIENDIHBvc3RkZXBzIGlmIHJlcXVpcmVkOgotICAgICAgdGVzdCBDWFggPSAiJHRhZ25hbWUiICYmIHsKLSAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICBsaW51eCopCi0gICAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0gICAgICAgICAgKlN1blwgQyopICMgU3VuIEMrKyA1LjkKLSAgICAgICAgICAgIGZ1bmNfc3VuY2NfY3N0ZF9hYmkKLQotICAgICAgICAgICAgaWYgdGVzdCBubyAhPSAiJHN1bmNjX3VzZV9jc3RkX2FiaSI7IHRoZW4KLSAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcG9zdGRlcHMgJyAtbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgICAgOzsKLQotICAgICAgICBzb2xhcmlzKikKLSAgICAgICAgICBmdW5jX2NjX2Jhc2VuYW1lICIkQ0MiCi0gICAgICAgICAgY2FzZSAkZnVuY19jY19iYXNlbmFtZV9yZXN1bHQgaW4KLSAgICAgICAgICBDQyogfCBzdW5DQyopCi0gICAgICAgICAgICBmdW5jX3N1bmNjX2NzdGRfYWJpCi0KLSAgICAgICAgICAgIGlmIHRlc3Qgbm8gIT0gIiRzdW5jY191c2VfY3N0ZF9hYmkiOyB0aGVuCi0gICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHBvc3RkZXBzICcgLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgZXNhYwotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIH0KLQotICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKLSAgICAgICMgKHRoZXkgc3RheSBpbiBkZXBsaWJzKQotICAgICAgdG1wX2xpYnM9Ci0gICAgICBmb3IgaSBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCi0JKiIgJGkgIiopCi0JICBpPQotCSAgOzsKLQllc2FjCi0JaWYgdGVzdCAtbiAiJGkiOyB0aGVuCi0JICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRpIgotCWZpCi0gICAgICBkb25lCi0gICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCi0gICAgZG9uZSAjIGZvciBwYXNzCi0gICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KLSAgICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKLSAgICBmaQotICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KLSAgICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKLSAgICBmaQotCi0gICAgY2FzZSAkbGlua21vZGUgaW4KLSAgICBvbGRsaWIpCi0gICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgotCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgotICAgICAgZmkKLQotICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgotICAgICAgKlwgLWwqIHwgKlwgLUwqKQotCWZ1bmNfd2FybmluZyAiJy1sJyBhbmQgJy1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCi0KLSAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKLQlmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCi0KLSAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLQotICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQlmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCi0KLSAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCi0KLSAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgotICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0gICAgICBvbGRsaWJzPSRvdXRwdXQKLSAgICAgIGZ1bmNfYXBwZW5kIG9ianMgIiRvbGRfZGVwbGlicyIKLSAgICAgIDs7Ci0KLSAgICBsaWIpCi0gICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSAnbGliTkFNRS5sYScuCi0gICAgICBjYXNlICRvdXRwdXRuYW1lIGluCi0gICAgICBsaWIqKQotCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKLQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgotCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgotCTs7Ci0gICAgICAqKQotCXRlc3Qgbm8gPSAiJG1vZHVsZSIgXAotCSAgJiYgZnVuY19mYXRhbF9oZWxwICJsaWJ0b29sIGxpYnJhcnkgJyRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCAnbGliJyIKLQotCWlmIHRlc3Qgbm8gIT0gIiRuZWVkX2xpYl9wcmVmaXgiOyB0aGVuCi0JICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCi0JICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCi0JICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCi0JICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKLQllbHNlCi0JICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCi0JICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgotCWlmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgJyRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCi0JZWxzZQotCSAgZWNobwotCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgotCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCi0JICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJG9ianMiCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgIHRlc3Qgbm8gPSAiJGRsc2VsZiIgXAotCXx8IGZ1bmNfd2FybmluZyAiJy1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCi0KLSAgICAgIHNldCBkdW1teSAkcnBhdGgKLSAgICAgIHNoaWZ0Ci0gICAgICB0ZXN0IDEgLWx0ICIkIyIgXAotCSYmIGZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgJy1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKLQotICAgICAgaW5zdGFsbF9saWJkaXI9JDEKLQotICAgICAgb2xkbGlicz0KLSAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KLQlpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KLQkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgJy5hbCcgZXh0ZW5zaW9uIHNvCi0JICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KLQkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KLQkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCi0JICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKLQkgIGJ1aWxkX29sZF9saWJzPXllcwotCWZpCi0KLQl0ZXN0IC1uICIkdmluZm8iICYmIFwKLQkgIGZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCi0KLQl0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAotCSAgZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKLSAgICAgIGVsc2UKLQotCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCi0Jc2F2ZV9pZnM9JElGUzsgSUZTPToKLQlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCi0Jc2hpZnQKLQlJRlM9JHNhdmVfaWZzCi0KLQl0ZXN0IC1uICIkNyIgJiYgXAotCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvICctdmVyc2lvbi1pbmZvJyIKLQotCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCi0JIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKLQkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQotCi0JY2FzZSAkdmluZm9fbnVtYmVyIGluCi0JeWVzKQotCSAgbnVtYmVyX21ham9yPSQxCi0JICBudW1iZXJfbWlub3I9JDIKLQkgIG51bWJlcl9yZXZpc2lvbj0kMwotCSAgIwotCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKLQkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCi0JICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcwotCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAotCSAgIyB0aGF0IGhhcyBhbiBleHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1bgotCSAgIwotCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0JICAjIGNvcnJlY3QgbGludXggdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLQkgIGRhcndpbnxmcmVlYnNkLWVsZnxsaW51eHxvc2Z8d2luZG93c3xub25lKQotCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCi0JICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIGFnZT0kbnVtYmVyX21pbm9yCi0JICAgIHJldmlzaW9uPSRudW1iZXJfcmV2aXNpb24KLQkgICAgOzsKLQkgIGZyZWVic2QtYW91dHxxbnh8c3Vub3MpCi0JICAgIGN1cnJlbnQ9JG51bWJlcl9tYWpvcgotCSAgICByZXZpc2lvbj0kbnVtYmVyX21pbm9yCi0JICAgIGFnZT0wCi0JICAgIDs7Ci0JICBpcml4fG5vbnN0b3B1eCkKLQkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgotCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICBhZ2U9JG51bWJlcl9taW5vcgotCSAgICByZXZpc2lvbj0kbnVtYmVyX21pbm9yCi0JICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCi0JICAgIDs7Ci0JICAqKQotCSAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIiRtb2RlbmFtZTogdW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSAnJHZlcnNpb25fdHlwZSciCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCW5vKQotCSAgY3VycmVudD0kMQotCSAgcmV2aXNpb249JDIKLQkgIGFnZT0kMwotCSAgOzsKLQllc2FjCi0KLQkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgotCWNhc2UgJGN1cnJlbnQgaW4KLQkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7Ci0JKikKLQkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgJyRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgotCSAgOzsKLQllc2FjCi0KLQljYXNlICRyZXZpc2lvbiBpbgotCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKLQkqKQotCSAgZnVuY19lcnJvciAiUkVWSVNJT04gJyRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCi0JICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKLQkgIDs7Ci0JZXNhYwotCi0JY2FzZSAkYWdlIGluCi0JMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwotCSopCi0JICBmdW5jX2Vycm9yICJBR0UgJyRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgotCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCi0JICA7OwotCWVzYWMKLQotCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCi0JICBmdW5jX2Vycm9yICJBR0UgJyRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyICckY3VycmVudCciCi0JICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKLQlmaQotCi0JIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgotCW1ham9yPQotCXZlcnN1ZmZpeD0KLQl2ZXJzdHJpbmc9Ci0JY2FzZSAkdmVyc2lvbl90eXBlIGluCi0Jbm9uZSkgOzsKLQotCWRhcndpbikKLQkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KLQkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKLQkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCi0JICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB2ZXJzdWZmaXg9JG1ham9yLiRhZ2UuJHJldmlzaW9uCi0JICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgotCSAgZnVuY19hcml0aCAkY3VycmVudCArIDEKLQkgIG1pbm9yX2N1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB4bGN2ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCi0JICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCi0gICAgICAgICAgIyBPbiBEYXJ3aW4gb3RoZXIgY29tcGlsZXJzCi0gICAgICAgICAgY2FzZSAkQ0MgaW4KLSAgICAgICAgICAgICAgbmFnZm9yKikKLSAgICAgICAgICAgICAgICAgIHZlcnN0cmluZz0iJHdsLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudCAkd2wtY3VycmVudF92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKLSAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCi0gICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLQkgIDs7Ci0KLQlmcmVlYnNkLWFvdXQpCi0JICBtYWpvcj0uJGN1cnJlbnQKLQkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJHJldmlzaW9uCi0JICA7OwotCi0JZnJlZWJzZC1lbGYpCi0JICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQotCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgotCSAgOzsKLQotCWlyaXggfCBub25zdG9wdXgpCi0JICBpZiB0ZXN0IG5vID0gIiRsdF9pcml4X2luY3JlbWVudCI7IHRoZW4KLQkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKLQkgIGVsc2UKLQkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UgKyAxCi0JICBmaQotCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0KLQkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7Ci0JICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKLQkgIGVzYWMKLQkgIHZlcnN0cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24KLQotCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KLQkgIGxvb3A9JHJldmlzaW9uCi0JICB3aGlsZSB0ZXN0IDAgLW5lICIkbG9vcCI7IGRvCi0JICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKLQkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCi0JICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIHZlcnN0cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZwotCSAgZG9uZQotCi0JICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiAnLicuCi0JICBtYWpvcj0uJG1ham9yCi0JICB2ZXJzdWZmaXg9JG1ham9yLiRyZXZpc2lvbgotCSAgOzsKLQotCWxpbnV4KSAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLQkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCi0JICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB2ZXJzdWZmaXg9JG1ham9yLiRhZ2UuJHJldmlzaW9uCi0JICA7OwotCi0Jb3NmKQotCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKLQkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24KLQkgIHZlcnN0cmluZz0kY3VycmVudC4kYWdlLiRyZXZpc2lvbgotCi0JICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgotCSAgbG9vcD0kYWdlCi0JICB3aGlsZSB0ZXN0IDAgLW5lICIkbG9vcCI7IGRvCi0JICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAotCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKLQkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgdmVyc3RyaW5nPSR2ZXJzdHJpbmc6JGlmYWNlLjAKLQkgIGRvbmUKLQotCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgotCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JGN1cnJlbnQuMCIKLQkgIDs7Ci0KLQlxbngpCi0JICBtYWpvcj0uJGN1cnJlbnQKLQkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQKLQkgIDs7Ci0KLQlzY28pCi0JICBtYWpvcj0uJGN1cnJlbnQKLQkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQKLQkgIDs7Ci0KLQlzdW5vcykKLQkgIG1ham9yPS4kY3VycmVudAotCSAgdmVyc3VmZml4PS4kY3VycmVudC4kcmV2aXNpb24KLQkgIDs7Ci0KLQl3aW5kb3dzKQotCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQotCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlIHN5c3RlbXMuCi0JICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQotCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB2ZXJzdWZmaXg9LSRtYWpvcgotCSAgOzsKLQotCSopCi0JICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgJyR2ZXJzaW9uX3R5cGUnIgotCSAgOzsKLQllc2FjCi0KLQkjIENsZWFyIHRoZSB2ZXJzaW9uIGluZm8gaWYgd2UgZGVmYXVsdGVkLCBhbmQgdGhleSBzcGVjaWZpZWQgYSByZWxlYXNlLgotCWlmIHRlc3QgLXogIiR2aW5mbyIgJiYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCi0JICBtYWpvcj0KLQkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotCSAgZGFyd2luKQotCSAgICAjIHdlIGNhbid0IGNoZWNrIGZvciAiMC4wIiBpbiBhcmNoaXZlX2NtZHMgZHVlIHRvIHF1b3RpbmcKLQkgICAgIyBwcm9ibGVtcywgc28gd2UgcmVzZXQgaXQgY29tcGxldGVseQotCSAgICB2ZXJzdHJpbmc9Ci0JICAgIDs7Ci0JICAqKQotCSAgICB2ZXJzdHJpbmc9MC4wCi0JICAgIDs7Ci0JICBlc2FjCi0JICBpZiB0ZXN0IG5vID0gIiRuZWVkX3ZlcnNpb24iOyB0aGVuCi0JICAgIHZlcnN1ZmZpeD0KLQkgIGVsc2UKLQkgICAgdmVyc3VmZml4PS4wLjAKLQkgIGZpCi0JZmkKLQotCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAotCWlmIHRlc3QgeWVzLG5vID0gIiRhdm9pZF92ZXJzaW9uLCRuZWVkX3ZlcnNpb24iOyB0aGVuCi0JICBtYWpvcj0KLQkgIHZlcnN1ZmZpeD0KLQkgIHZlcnN0cmluZz0KLQlmaQotCi0JIyBDaGVjayB0byBzZWUgaWYgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIHVuZGVmaW5lZCBzeW1ib2xzLgotCWlmIHRlc3QgeWVzID0gIiRhbGxvd191bmRlZmluZWQiOyB0aGVuCi0JICBpZiB0ZXN0IHVuc3VwcG9ydGVkID0gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4KLQkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotCSAgICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllczsgYnVpbGRpbmcgc3RhdGljIG9ubHkiCi0JICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0JICAgIGVsc2UKLQkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW4ndCBidWlsZCAkaG9zdCBzaGFyZWQgbGlicmFyeSB1bmxlc3MgLW5vLXVuZGVmaW5lZCBpcyBzcGVjaWZpZWQiCi0JICAgIGZpCi0JICBmaQotCWVsc2UKLQkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZz0kbm9fdW5kZWZpbmVkX2ZsYWcKLQlmaQotCi0gICAgICBmaQotCi0gICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgOgotICAgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRzeW1maWxlb2JqIgotICAgICAgdGVzdCAiICIgPSAiJGxpYm9ianMiICYmIGxpYm9ianM9Ci0KLSAgICAgIGlmIHRlc3QgcmVsaW5rICE9ICIkb3B0X21vZGUiOyB0aGVuCi0JIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKLQkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KLQlyZW1vdmVsaXN0PQotCXRlbXByZW1vdmVsaXN0PWAkRUNITyAiJG91dHB1dF9vYmpkaXIvKiJgCi0JZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbwotCSAgY2FzZSAkcCBpbgotCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCi0JICAgICAgIDs7Ci0JICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuKikKLQkgICAgICAgaWYgdGVzdCAtbiAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IjsgdGhlbgotCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKLQkJIHRoZW4KLQkJICAgY29udGludWUKLQkJIGZpCi0JICAgICAgIGZpCi0JICAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkcCIKLQkgICAgICAgOzsKLQkgICAgKikgOzsKLQkgIGVzYWMKLQlkb25lCi0JdGVzdCAtbiAiJHJlbW92ZWxpc3QiICYmIFwKLQkgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIgXCRyZW1vdmVsaXN0IgotICAgICAgZmkKLQotICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiICYmIHRlc3QgY29udmVuaWVuY2UgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0JZnVuY19hcHBlbmQgb2xkbGlicyAiICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCi0KLQkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCi0Jb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJGxpYmV4dCQvZDsgJGxvMm8iIHwgJE5MMlNQYAotICAgICAgZmkKLQotICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KLSAgICAgICNmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbwotICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICIkbGliX3NlYXJjaF9wYXRoICIgfCAkU0VEICJzJSAkcGF0aCAlICVnImAKLSAgICAgICMJZGVwbGlicz1gJEVDSE8gIiRkZXBsaWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAotICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIkZGVwZW5kZW5jeV9saWJzICIgfCAkU0VEICJzJSAtTCRwYXRoICUgJWciYAotICAgICAgI2RvbmUKLQotICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KLQkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCi0JdGVtcF94cnBhdGg9Ci0JZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbwotCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCi0JICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKLQkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCi0JICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwotCSAgZXNhYwotCWRvbmUKLQlpZiB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX2ludG9fbGlicyIgfHwgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKLQlmaQotICAgICAgZmkKLQotICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCi0gICAgICBvbGRfZGxmaWxlcz0kZGxmaWxlcwotICAgICAgZGxmaWxlcz0KLSAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbwotCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCi0JKiIgJGxpYiAiKikgOzsKLQkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKLQllc2FjCi0gICAgICBkb25lCi0KLSAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKLSAgICAgIG9sZF9kbHByZWZpbGVzPSRkbHByZWZpbGVzCi0gICAgICBkbHByZWZpbGVzPQotICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCi0JY2FzZSAiJGRscHJlZmlsZXMgIiBpbgotCSoiICRsaWIgIiopIDs7Ci0JKikgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIiIDs7Ci0JZXNhYwotICAgICAgZG9uZQotCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KLQkgIGNhc2UgJGhvc3QgaW4KLQkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQotCSAgICAjIHRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIGMgbGlicmFyeSAoYXMgc3VjaCkhCi0JICAgIDs7Ci0JICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCi0JICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0JICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCi0JICAgIDs7Ci0JICAqLSotbmV0YnNkKikKLQkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCi0JICAgIDs7Ci0JICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKLQkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCi0JICAgIDs7Ci0JICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCi0JICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQotCSAgICA7OwotCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQotCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCi0JICAgIDs7Ci0JICAqKQotCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgotCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIjsgdGhlbgotCSAgICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtbGMiCi0JICAgIGZpCi0JICAgIDs7Ci0JICBlc2FjCi0JZmkKLQotCSMgVHJhbnNmb3JtIGRlcGxpYnMgaW50byBvbmx5IGRlcGxpYnMgdGhhdCBjYW4gYmUgbGlua2VkIGluIHNoYXJlZC4KLQluYW1lX3NhdmU9JG5hbWUKLQlsaWJuYW1lX3NhdmU9JGxpYm5hbWUKLQlyZWxlYXNlX3NhdmU9JHJlbGVhc2UKLQl2ZXJzdWZmaXhfc2F2ZT0kdmVyc3VmZml4Ci0JbWFqb3Jfc2F2ZT0kbWFqb3IKLQkjIEknbSBub3Qgc3VyZSBpZiBJJ20gdHJlYXRpbmcgdGhlIHJlbGVhc2UgY29ycmVjdGx5LiAgSSB0aGluawotCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bwotCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PwotCXJlbGVhc2U9Ci0JdmVyc3VmZml4PQotCW1ham9yPQotCW5ld2RlcGxpYnM9Ci0JZHJvcHBlZGRlcHM9bm8KLQljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCXBhc3NfYWxsKQotCSAgIyBEb24ndCBjaGVjayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhpbmcgd29ya3MuCi0JICAjIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgbmFpdmUuICBXZSBtaWdodCB3YW50IHRvIGNoZWNrCi0JICAjIHdoZXRoZXIgdGhlIGxpYnJhcnkgZXhpc3RzIG9yIG5vdC4gIEJ1dCB0aGlzIGlzIG9uCi0JICAjIG9zZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBzdXJlLi4uIEp1c3QKLQkgICMgaW1wbGVtZW50aW5nIHdoYXQgd2FzIGFscmVhZHkgdGhlIGJlaGF2aW9yLgotCSAgbmV3ZGVwbGlicz0kZGVwbGlicwotCSAgOzsKLQl0ZXN0X2NvbXBpbGUpCi0JICAjIFRoaXMgY29kZSBzdHJlc3NlcyB0aGUgImxpYnJhcmllcyBhcmUgcHJvZ3JhbXMiIHBhcmFkaWdtIHRvIGl0cwotCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKLQkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCi0JICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KLQkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QuYwotCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgotCSAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9Ci1FT0YKLQkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKLQkgIGlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRkZXBsaWJzOyB0aGVuCi0JICAgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKLQkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCi0JICAgICAgY2FzZSAkaSBpbgotCSAgICAgIC1sKikKLQkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgotCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkJaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KLQkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLQkJICAqIiAkaSAiKikKLQkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLQkJICAgIGk9Ci0JCSAgICA7OwotCQkgIGVzYWMKLQkJZmkKLQkJaWYgdGVzdCAtbiAiJGkiOyB0aGVuCi0JCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCi0JCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAotCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0Ci0JCSAgZGVwbGliX21hdGNoPSQxCi0JCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwOyB0aGVuCi0JCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCi0JCSAgZWxzZQotCQkgICAgZHJvcHBlZGRlcHM9eWVzCi0JCSAgICBlY2hvCi0JCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCi0JCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCQkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKLQkJICAgIGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIGl0IGZvciIKLQkJICAgIGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKLQkJICBmaQotCQlmaQotCQk7OwotCSAgICAgICopCi0JCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgIGRvbmUKLQkgIGVsc2UKLQkgICAgIyBFcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlyc3QgY29tcGlsZS4gIExldCdzIHRyeSB0byBzYWx2YWdlCi0JICAgICMgdGhlIHNpdHVhdGlvbjogQ29tcGlsZSBhIHNlcGFyYXRlIHByb2dyYW0gZm9yIGVhY2ggbGlicmFyeS4KLQkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCi0JICAgICAgY2FzZSAkaSBpbgotCSAgICAgIC1sKikKLQkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgotCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkJJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAotCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgotCQkgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKLQkJICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgotCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCi0JCSAgICAqIiAkaSAiKikKLQkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQkgICAgICBpPQotCQkgICAgICA7OwotCQkgICAgZXNhYwotCQkgIGZpCi0JCSAgaWYgdGVzdCAtbiAiJGkiOyB0aGVuCi0JCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKLQkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKLQkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0Ci0JCSAgICBkZXBsaWJfbWF0Y2g9JDEKLQkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMDsgdGhlbgotCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCi0JCSAgICBlbHNlCi0JCSAgICAgIGRyb3BwZWRkZXBzPXllcwotCQkgICAgICBlY2hvCi0JCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKLQkJICAgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJICAgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJICAgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgotCQkgICAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKLQkJICAgICAgZWNobyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgotCQkgICAgZmkKLQkJICBmaQotCQllbHNlCi0JCSAgZHJvcHBlZGRlcHM9eWVzCi0JCSAgZWNobwotCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCi0JCSAgZWNobyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgotCQkgIGVjaG8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCi0JCSAgZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKLQkJZmkKLQkJOzsKLQkgICAgICAqKQotCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICBmaQotCSAgOzsKLQlmaWxlX21hZ2ljKikKLQkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0Ci0JICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCi0JICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JICAgIGNhc2UgJGFfZGVwbGliIGluCi0JICAgIC1sKikKLQkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgotCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCi0JCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgotCQkqIiAkYV9kZXBsaWIgIiopCi0JCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJICBhX2RlcGxpYj0KLQkJICA7OwotCQllc2FjCi0JICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCi0JCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAotCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgotCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCi0JCWVsc2UKLQkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQotCQlmaQotCQl0ZXN0IHllcyA9ICIkd2FudF9ub2Nhc2VnbG9iIiAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAotCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KLQkJICBpZiB0ZXN0IHllcyA9ICIkd2FudF9ub2Nhc2VnbG9iIjsgdGhlbgotCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgotCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAotCQkgICAgJG5vY2FzZWdsb2IKLQkJICBlbHNlCi0JCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCi0JCSAgZmkKLQkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCi0JCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCi0JCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8Ci0JCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KLQkJCWNvbnRpbnVlCi0JCSAgICAgIGZpCi0JCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgotCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCi0JCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKLQkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAotCQkgICAgICAjIGJ1dCBzbyB3aGF0PwotCQkgICAgICBwb3RsaWI9JHBvdGVudF9saWIKLQkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCi0JCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICRTRUQgJ3MvLiogLT4gLy8nYAotCQkJY2FzZSAkcG90bGlibGluayBpbgotCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9JHBvdGxpYmxpbms7OwotCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzfFteL10qJHx8J2AiJHBvdGxpYmxpbmsiOzsKLQkJCWVzYWMKLQkJICAgICAgZG9uZQotCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAotCQkJICRTRUQgLWUgMTBxIHwKLQkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJCWFfZGVwbGliPQotCQkJYnJlYWsgMgotCQkgICAgICBmaQotCQkgIGRvbmUKLQkJZG9uZQotCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgotCQlkcm9wcGVkZGVwcz15ZXMKLQkJZWNobwotCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCi0JCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKLQkJaWYgdGVzdCAteiAiJHBvdGxpYiI7IHRoZW4KLQkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgotCQllbHNlCi0JCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCi0JCSAgJEVDSE8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgotCQlmaQotCSAgICAgIGZpCi0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgotCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KLQkgIDs7Ci0JbWF0Y2hfcGF0dGVybiopCi0JICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAotCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAotCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbwotCSAgICBjYXNlICRhX2RlcGxpYiBpbgotCSAgICAtbCopCi0JICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKLQkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgotCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLQkJKiIgJGFfZGVwbGliICIqKQotCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCi0JCSAgYV9kZXBsaWI9Ci0JCSAgOzsKLQkJZXNhYwotCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgotCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKLQkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCi0JCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCi0JCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbwotCQkgICAgcG90bGliPSRwb3RlbnRfbGliICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0Ci0JCSAgICBpZiBldmFsICJcJEVDSE8gXCIkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIHwgXAotCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJICAgICAgYV9kZXBsaWI9Ci0JCSAgICAgIGJyZWFrIDIKLQkJICAgIGZpCi0JCSAgZG9uZQotCQlkb25lCi0JICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCi0JCWRyb3BwZWRkZXBzPXllcwotCQllY2hvCi0JCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKLQkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgotCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgotCQlpZiB0ZXN0IC16ICIkcG90bGliIjsgdGhlbgotCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCi0JCWVsc2UKLQkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKLQkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCi0JCWZpCi0JICAgICAgZmkKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgotCSAgOzsKLQlub25lIHwgdW5rbm93biB8ICopCi0JICBuZXdkZXBsaWJzPQotCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncy8gLWxjJC8vOyBzLyAtW0xSXVteIF0qLy9nJ2AKLQkgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCi0JICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KLQkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCi0JICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJHRtcF9kZXBsaWJzIiB8ICRTRUQgInN8JGl8fCJgCi0JICAgIGRvbmUKLQkgIGZpCi0JICBjYXNlICR0bXBfZGVwbGlicyBpbgotCSAgKlshXAlcIF0qKQotCSAgICBlY2hvCi0JICAgIGlmIHRlc3Qgbm9uZSA9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCi0JICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgotCSAgICBlbHNlCi0JICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKLQkgICAgZmkKLQkgICAgZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCi0JICAgIGRyb3BwZWRkZXBzPXllcwotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0JdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQotCW1ham9yPSRtYWpvcl9zYXZlCi0JcmVsZWFzZT0kcmVsZWFzZV9zYXZlCi0JbGlibmFtZT0kbGlibmFtZV9zYXZlCi0JbmFtZT0kbmFtZV9zYXZlCi0KLQljYXNlICRob3N0IGluCi0JKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQotCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgd2l0aCB0aGUgU3lzdGVtIGZyYW1ld29yawotCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCi0JICA7OwotCWVzYWMKLQotCWlmIHRlc3QgeWVzID0gIiRkcm9wcGVkZGVwcyI7IHRoZW4KLQkgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiOyB0aGVuCi0JICAgIGVjaG8KLQkgICAgZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCi0JICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKLQkgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCi0JICAgIGVjaG8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKLQkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLQkgICAgICBlY2hvCi0JICAgICAgZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCi0JICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyAnbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgotCSAgICAgIGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKLQkgICAgICBlY2hvICIqKiogJ25tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgotCSAgICBmaQotCSAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KLQkgICAgICBvbGRsaWJzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQKLQkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCi0JICAgICAgYnVpbGRfb2xkX2xpYnM9eWVzCi0JICAgIGVsc2UKLQkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLQkgICAgZmkKLQkgIGVsc2UKLQkgICAgZWNobyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKLQkgICAgZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKLQkgICAgZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgotCi0JICAgIGlmIHRlc3Qgbm8gPSAiJGFsbG93X3VuZGVmaW5lZCI7IHRoZW4KLQkgICAgICBlY2hvCi0JICAgICAgZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKLQkgICAgICBlY2hvICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKLQkgICAgICBlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCi0JICAgICAgZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKLQkgICAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KLQkJb2xkbGlicz0kb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0Ci0JCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKLQkJYnVpbGRfb2xkX2xpYnM9eWVzCi0JICAgICAgZWxzZQotCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KLQkgICAgICBmaQotCSAgICBmaQotCSAgZmkKLQlmaQotCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQotCWRlcGxpYnM9JG5ld2RlcGxpYnMKLSAgICAgIGZpCi0gICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCi0gICAgICBjYXNlICRob3N0IGluCi0JKi0qLWRhcndpbiopCi0JICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCi0JICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQkgIGRlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQkgIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAotICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKLSAgICAgIG5ld19saWJzPQotICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KLQljYXNlICIgJG5ld19saWJzICIgaW4KLQkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7Ci0JKikKLQkgIGNhc2UgIiAkZGVwbGlicyAiIGluCi0JICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCi0JICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwotCWNhc2UgJGRlcGxpYiBpbgotCS1MKikKLQkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgotCSAgKiIgJGRlcGxpYiAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGRlcGxpYnM9JG5ld19saWJzCi0KLSAgICAgICMgQWxsIHRoZSBsaWJyYXJ5LXNwZWNpZmljIHZhcmlhYmxlcyAoaW5zdGFsbF9saWJkaXIgaXMgc2V0IGFib3ZlKS4KLSAgICAgIGxpYnJhcnlfbmFtZXM9Ci0gICAgICBvbGRfbGlicmFyeT0KLSAgICAgIGRsbmFtZT0KLQotICAgICAgIyBUZXN0IGFnYWluLCB3ZSBtYXkgaGF2ZSBkZWNpZGVkIG5vdCB0byBidWlsZCBpdCBhbnkgbW9yZQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KLQkjIFJlbW92ZSAkd2wgaW5zdGFuY2VzIHdoZW4gbGlua2luZyB3aXRoIGxkLgotCSMgRklYTUU6IHNob3VsZCB0ZXN0IHRoZSByaWdodCBfY21kcyB2YXJpYWJsZS4KLQljYXNlICRhcmNoaXZlX2NtZHMgaW4KLQkgICpcJExEXCAqKSB3bD0gOzsKLSAgICAgICAgZXNhYwotCWlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9pbnRvX2xpYnMiOyB0aGVuCi0JICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCi0JICBoYXJkY29kZV9saWJkaXJzPQotCSAgZGVwX3JwYXRoPQotCSAgcnBhdGg9JGZpbmFsaXplX3JwYXRoCi0JICB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHJwYXRoPSRjb21waWxlX3JwYXRoJHJwYXRoCi0JICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KLQkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCi0JICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0JCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgotCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAotCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkJICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKLQkJZWxzZQotCQkgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KLQkJICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgotCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKLQkJICAgIDs7Ci0JCSAgKikKLQkJICAgIGZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKLQkJICAgIDs7Ci0JCSAgZXNhYwotCQlmaQotCSAgICAgIGVsc2UKLQkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotCQlmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKLQkgICAgICBmaQotCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLQkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCi0JICAgICAgKiIgJGxpYmRpciAiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICBkb25lCi0JICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgotCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCi0JICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkgICAgbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCi0JICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCi0JICBmaQotCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KLQkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KLQkgICAgcnBhdGg9Ci0JICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCi0JICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgotCSAgICBkb25lCi0JICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgotCSAgZmkKLQkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCi0JZmkKLQotCXNobGlicGF0aD0kZmluYWxpemVfc2hsaWJwYXRoCi0JdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIiB8fCBzaGxpYnBhdGg9JGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aAotCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCi0JICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCi0JZmkKLQotCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgotCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCi0JZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCi0Jc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCi0Jc2hpZnQKLQlyZWFsbmFtZT0kMQotCXNoaWZ0Ci0KLQlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCi0JICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCi0JZWxzZQotCSAgc29uYW1lPSRyZWFsbmFtZQotCWZpCi0JaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KLQkgIGRsbmFtZT0kc29uYW1lCi0JZmkKLQotCWxpYj0kb3V0cHV0X29iamRpci8kcmVhbG5hbWUKLQlsaW5rbmFtZXM9Ci0JZm9yIGxpbmsKLQlkbwotCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCi0JZG9uZQotCi0JIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKLQl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCi0JdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KLQotCWRlbGZpbGVzPQotCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKLQkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAKLQkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzIgotCWZpCi0KLQlvcmlnX2V4cG9ydF9zeW1ib2xzPQotCWNhc2UgJGhvc3Rfb3MgaW4KLQljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQotCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAgICMgZXhwb3J0aW5nIHVzaW5nIHVzZXIgc3VwcGxpZWQgc3ltZmlsZQotCSAgICBmdW5jX2RsbF9kZWZfcCAiJGV4cG9ydF9zeW1ib2xzIiB8fCB7Ci0JICAgICAgIyBhbmQgaXQncyBOT1QgYWxyZWFkeSBhIC5kZWYgZmlsZS4gTXVzdCBmaWd1cmUgb3V0Ci0JICAgICAgIyB3aGljaCBvZiB0aGUgZ2l2ZW4gc3ltYm9scyBhcmUgZGF0YSBzeW1ib2xzIGFuZCB0YWcKLQkgICAgICAjIHRoZW0gYXMgc3VjaC4gU28sIHRyaWdnZXIgdXNlIG9mIGV4cG9ydF9zeW1ib2xzX2NtZHMuCi0JICAgICAgIyBleHBvcnRfc3ltYm9scyBnZXRzIHJlYXNzaWduZWQgaW5zaWRlIHRoZSAicHJlcGFyZQotCSAgICAgICMgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyIgaWYgc3RhdGVtZW50LCBzbyB0aGUKLQkgICAgICAjIGluY2x1ZGVfZXhwc3ltcyBsb2dpYyBzdGlsbCB3b3Jrcy4KLQkgICAgICBvcmlnX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scwotCSAgICAgIGV4cG9ydF9zeW1ib2xzPQotCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLQkgICAgfQotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCi0JIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKLQlpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCi0JICBpZiB0ZXN0IHllcyA9ICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyIKLQkgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwCi0JICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCi0JICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKLQkgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwotCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KLQkgICAgICBJRlM9JHNhdmVfaWZzCi0JICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKLQkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KLQkgICAgICBjYXNlICRubV9maWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9maWxlX2NtZCBpbgotCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCi0JCSAgdHJ5X25vcm1hbF9icmFuY2g9eWVzCi0JCSAgZXZhbCBjbWQ9XCIkY21kMVwiCi0JCSAgZnVuY19sZW4gIiAkY21kIgotCQkgIGxlbj0kZnVuY19sZW5fcmVzdWx0Ci0JCSAgOzsKLQkJKikKLQkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubwotCQkgIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIGlmIHRlc3QgeWVzID0gIiR0cnlfbm9ybWFsX2JyYW5jaCIgXAotCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgXAotCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQotCSAgICAgIHRoZW4KLQkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JwotCQlza2lwcGVkX2V4cG9ydD1mYWxzZQotCSAgICAgIGVsaWYgdGVzdCAtbiAiJG5tX2ZpbGVfbGlzdF9zcGVjIjsgdGhlbgotCQlmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgotCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JCXNhdmVfbGlib2Jqcz0kbGlib2JqcwotCQlzYXZlX291dHB1dD0kb3V0cHV0Ci0JCW91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLm5tCi0JCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgotCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKLQkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgotCQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICROTSBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCi0JCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KLQkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKLQkJICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKLQkJZG9uZSA+ICIkb3V0cHV0IgotCQlldmFsIGNtZD1cIiRjbWQxXCIKLQkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JwotCQlvdXRwdXQ9JHNhdmVfb3V0cHV0Ci0JCWxpYm9ianM9JHNhdmVfbGlib2JqcwotCQlza2lwcGVkX2V4cG9ydD1mYWxzZQotCSAgICAgIGVsc2UKLQkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCi0JCWZ1bmNfdmVyYm9zZSAidXNpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZSBmb3IgZXhwb3J0IGxpc3QuLi4iCi0JCXNraXBwZWRfZXhwb3J0PToKLQkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKLQkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCi0JCWJyZWFrCi0JICAgICAgZmkKLQkgICAgZG9uZQotCSAgICBJRlM9JHNhdmVfaWZzCi0JICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiOyB0aGVuCi0JICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJwotCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCi0JICAgIGZpCi0JICBmaQotCWZpCi0KLQlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCi0JICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSRvcmlnX2V4cG9ydF9zeW1ib2xzCi0JICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKLQlmaQotCi0JaWYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgotCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCi0JICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgotCSAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKLQkgICMgJ3MnIGNvbW1hbmRzLCB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQotCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCi0JICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQotCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KLQkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgotCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgotCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCi0JICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scwotCWZpCi0KLQl0bXBfZGVwbGlicz0KLQlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KLQkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKLQkgICopCi0JICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgotCSAgICA7OwotCSAgZXNhYwotCWRvbmUKLQlkZXBsaWJzPSR0bXBfZGVwbGlicwotCi0JaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgotCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiAmJgotCSAgICB0ZXN0IHllcyA9ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiAmJgotCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KLQkgICAgIyBleHRyYWN0IHRoZSBhcmNoaXZlcywgc28gd2UgaGF2ZSBvYmplY3RzIHRvIGxpc3QuCi0JICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotCSAgZmkKLQkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLQkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCi0JICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQotCSAgZWxzZQotCSAgICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKLQkgICAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKLQotCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKLQkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgotCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQotCSAgZmkKLQlmaQotCi0JaWYgdGVzdCB5ZXMgPSAiJHRocmVhZF9zYWZlIiAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgotCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCi0JICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKLQlmaQotCi0JIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCi0JaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgotCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPwotCWZpCi0KLQkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCi0JaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIjsgdGhlbgotCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgotCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgotCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKLQkgIGVsc2UKLQkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgotCSAgICBjbWRzPSRtb2R1bGVfY21kcwotCSAgZmkKLQllbHNlCi0JICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgotCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKLQkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcwotCSAgZWxzZQotCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgotCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKLQkgIGZpCi0JZmkKLQotCWlmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJgotCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKLQkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgotCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgotCSAgOgotCWVsc2UKLQkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQotCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCi0JICAjIHNjcmlwdC4KLQotCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KLQkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQotCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQotCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKLQkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCi0JICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55Ci0JICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCi0JICAjIHRoZSBzcGVjLgotCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCi0JICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcwotCSAgZmkKLQkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKLQkgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCi0JICBvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0KLQkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCi0JICAjIGluaXRpYWxpemUgayB0byBvbmUuCi0JICB0ZXN0X2NtZHM9Ci0JICBjb25jYXRfY21kcz0KLQkgIG9iamxpc3Q9Ci0JICBsYXN0X3JvYmo9Ci0JICBrPTEKLQotCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubG5rc2NyaXB0Ci0JICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKLQkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0Ci0JICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcwotCSAgICBkbwotCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgotCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0Ci0JICAgIGRvbmUKLQkgICAgZWNobyAnKScgPj4gJG91dHB1dAotCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCi0JICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgotCSAgICBvdXRwdXQ9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAotCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYgdGVzdCAtbiAiJGZpbGVfbGlzdF9zcGVjIjsgdGhlbgotCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5sbmsKLQkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgotCSAgICA6ID4gJG91dHB1dAotCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCi0JICAgIHNoaWZ0Ci0JICAgIGZpcnN0b2JqPQotCSAgICBpZiB0ZXN0IHllcyA9ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IjsgdGhlbgotCSAgICAgIGZpcnN0b2JqPSIkMSAiCi0JICAgICAgc2hpZnQKLQkgICAgZmkKLQkgICAgZm9yIG9iagotCSAgICBkbwotCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgotCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0Ci0JICAgIGRvbmUKLQkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgotCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKLQkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCi0JICBlbHNlCi0JICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCi0JICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKLQkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0Ci0JICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgotCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKLQkgICAgICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKLQkgICAgICBsZW49JGxlbjAKLQotCSAgICAgICMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gYmUgbGlua2VkLgotCSAgICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcwotCSAgICAgIGRvCi0JCWZ1bmNfbGVuICIgJG9iaiIKLQkJZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAotCQlsZW49JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCWlmIHRlc3QgLXogIiRvYmpsaXN0IiB8fAotCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KLQkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKLQkJZWxzZQotCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCi0JCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KLQkJICBpZiB0ZXN0IDEgLWVxICIkayI7IHRoZW4KLQkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCi0JCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAotCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCi0JCSAgZWxzZQotCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KLQkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCi0JCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKLQkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgotCQkgIGZpCi0JCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAotCQkgIGZ1bmNfYXJpdGggJGsgKyAxCi0JCSAgaz0kZnVuY19hcml0aF9yZXN1bHQKLQkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0Ci0JCSAgb2JqbGlzdD0iICRvYmoiCi0JCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgotCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0Ci0JCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAotCQlmaQotCSAgICAgIGRvbmUKLQkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKLQkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAotCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgotCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgotCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJHJlbG9hZF9jbWRzXCIKLQkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgotCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKLQkgICAgICBmaQotCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKLQotCSAgICBlbHNlCi0JICAgICAgb3V0cHV0PQotCSAgICBmaQotCi0JICAgICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9ICYmIHsKLQkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYSciCi0JICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwCi0JICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKLQkgICAgICBsaWJvYmpzPSRvdXRwdXQKLQkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgotCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgotCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCi0JCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCi0JICAgICAgZmkKLQkgICAgfQotCi0JICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCi0JICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgotCi0JICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KLQkgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwotCSAgICBmb3IgY21kIGluICRjb25jYXRfY21kczsgZG8KLQkgICAgICBJRlM9JHNhdmVfaWZzCi0JICAgICAgJG9wdF9xdWlldCB8fCB7Ci0JCSAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgotCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKLQkgICAgICB9Ci0JICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKLQkJbHRfZXhpdD0kPwotCi0JCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCQlpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCi0JCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKLQkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCi0JCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQotCQlmaQotCi0JCWV4aXQgJGx0X2V4aXQKLQkgICAgICB9Ci0JICAgIGRvbmUKLQkgICAgSUZTPSRzYXZlX2lmcwotCi0JICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KLQkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCi0JICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKLQkgICAgZmkKLQkgIGZpCi0KLSAgICAgICAgICAke3NraXBwZWRfZXhwb3J0LWZhbHNlfSAmJiB7Ci0JICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCi0JICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0kb3JpZ19leHBvcnRfc3ltYm9scwotCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJwotCSAgICBmaQotCi0JICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgotCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgotCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCi0JICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKLQkgICAgICAjICdzJyBjb21tYW5kcywgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKLQkgICAgICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKLQkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQotCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCi0JICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCi0JICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgotCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgotCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCi0JICAgIGZpCi0JICB9Ci0KLQkgIGxpYm9ianM9JG91dHB1dAotCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCi0JICBvdXRwdXQ9JHNhdmVfb3V0cHV0Ci0KLQkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgotCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKLQkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KLQkgIGZpCi0JICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQotCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCi0KLQkgICMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KLQkgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyI7IHRoZW4KLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgotCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcwotCSAgICBlbHNlCi0JICAgICAgY21kcz0kbW9kdWxlX2NtZHMKLQkgICAgZmkKLQkgIGVsc2UKLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KLQkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCi0JICAgIGVsc2UKLQkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKLQkgICAgZmkKLQkgIGZpCi0JZmkKLQotCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KLQkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCi0JICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgotCWZpCi0KLQkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKLQlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KLQkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAotCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKLQotCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKLQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLQkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9Ci0JZmkKLQotCXNhdmVfaWZzPSRJRlM7IElGUz0nficKLQlmb3IgY21kIGluICRjbWRzOyBkbwotCSAgSUZTPSRzcCRubAotCSAgZXZhbCBjbWQ9XCIkY21kXCIKLQkgIElGUz0kc2F2ZV9pZnMKLQkgICRvcHRfcXVpZXQgfHwgewotCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCi0JICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKLQkgIH0KLQkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7Ci0JICAgIGx0X2V4aXQ9JD8KLQotCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLQkgICAgaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgotCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCi0JICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAotCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQotCSAgICBmaQotCi0JICAgIGV4aXQgJGx0X2V4aXQKLQkgIH0KLQlkb25lCi0JSUZTPSRzYXZlX2lmcwotCi0JIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgotCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPwotCi0JICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLQkgICAgICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKLQkgICAgZmkKLQkgIGZpCi0KLQkgIGV4aXQgJEVYSVRfU1VDQ0VTUwotCWZpCi0KLQkjIENyZWF0ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgotCWZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbwotCSAgaWYgdGVzdCAiJHJlYWxuYW1lIiAhPSAiJGxpbmtuYW1lIjsgdGhlbgotCSAgICBmdW5jX3Nob3dfZXZhbCAnKGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkbGlua25hbWUiICYmICRMTl9TICIkcmVhbG5hbWUiICIkbGlua25hbWUiKScgJ2V4aXQgJD8nCi0JICBmaQotCWRvbmUKLQotCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCi0JaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgfHwgdGVzdCB5ZXMgPSAiJGV4cG9ydF9keW5hbWljIjsgdGhlbgotCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCi0JICBkbG5hbWU9JHNvbmFtZQotCWZpCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG9iaikKLSAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3Qgbm8gIT0gIiRkbHNlbGYiOyB0aGVuCi0JZnVuY193YXJuaW5nICInLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKLSAgICAgIGZpCi0KLSAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KLSAgICAgICpcIC1sKiB8ICpcIC1MKikKLQlmdW5jX3dhcm5pbmcgIictbCcgYW5kICctTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKLQotICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgotCi0gICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKLQlmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgotCi0gICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgotCi0gICAgICBjYXNlICRvdXRwdXQgaW4KLSAgICAgICoubG8pCi0JdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiICYmIFwKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCAnJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgotCi0JbGlib2JqPSRvdXRwdXQKLQlmdW5jX2xvMm8gIiRsaWJvYmoiCi0Jb2JqPSRmdW5jX2xvMm9fcmVzdWx0Ci0JOzsKLSAgICAgICopCi0JbGlib2JqPQotCW9iaj0kb3V0cHV0Ci0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBEZWxldGUgdGhlIG9sZCBvYmplY3RzLgotICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb2JqICRsaWJvYmoKLQotICAgICAgIyBPYmplY3RzIGZyb20gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgVGhpcyBhc3N1bWVzCi0gICAgICAjIHNpbmdsZS12ZXJzaW9uIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFdoZW5ldmVyIHdlIGNyZWF0ZQotICAgICAgIyBkaWZmZXJlbnQgb25lcyBmb3IgUElDL25vbi1QSUMsIHRoaXMgd2UnbGwgaGF2ZSB0byBkdXBsaWNhdGUKLSAgICAgICMgdGhlIGV4dHJhY3Rpb24uCi0gICAgICByZWxvYWRfY29udl9vYmpzPQotICAgICAgZ2VudG9wPQotICAgICAgIyBpZiByZWxvYWRfY21kcyBydW5zICRMRCBkaXJlY3RseSwgZ2V0IHJpZCBvZiAtV2wgZnJvbQotICAgICAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGggdHVybmluZyBjb21tYQotICAgICAgIyBpbnRvIHNwYWNlLgotICAgICAgY2FzZSAkcmVsb2FkX2NtZHMgaW4KLSAgICAgICAgKlwkTERbXCBcJF0qKSB3bD0gOzsKLSAgICAgIGVzYWMKLSAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KLQlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCi0JICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKLQkgIHRlc3QgLW4gIiR3bCIgfHwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9YCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCi0JICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzCi0JZWxzZQotCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b2JqfXgKLQkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0KLQkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQotCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgotCWZpCi0gICAgICBmaQotCi0gICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcwotICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgbGlib2Jqcz0kbm9uX3BpY19vYmplY3RzCi0KLSAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotICAgICAgcmVsb2FkX29ianM9JG9ianMkb2xkX2RlcGxpYnMnICdgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiRsaWJleHQkL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCcgJyRyZWxvYWRfY29udl9vYmpzCi0KLSAgICAgIG91dHB1dD0kb2JqCi0gICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKLQotICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCi0gICAgICBpZiB0ZXN0IC16ICIkbGlib2JqIjsgdGhlbgotCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCi0JICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKLQlmaQotCi0JZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgICBmaQotCi0gICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCB7Ci0JaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KLQkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwotCWZpCi0KLQkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAotCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCi0JIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgotCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPwotCWV4aXQgJEVYSVRfU1VDQ0VTUwotICAgICAgfQotCi0gICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciIHx8IHRlc3QgZGVmYXVsdCAhPSAiJHBpY19tb2RlIjsgdGhlbgotCSMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCi0JcmVsb2FkX29ianM9IiRsaWJvYmpzICRyZWxvYWRfY29udl9vYmpzIgotCW91dHB1dD0kbGlib2JqCi0JZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgotCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwotICAgICAgZmkKLQotICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgICA7OwotCi0gICAgcHJvZykKLSAgICAgIGNhc2UgJGhvc3QgaW4KLQkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgotCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OwotICAgICAgZXNhYwotICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCi0JZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCi0KLSAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCi0JZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgotCi0gICAgICAkcHJlbG9hZCBcCi0JJiYgdGVzdCB1bmtub3duLHVua25vd24sdW5rbm93biA9ICIkZGxvcGVuX3N1cHBvcnQsJGRsb3Blbl9zZWxmLCRkbG9wZW5fc2VsZl9zdGF0aWMiIFwKLQkmJiBmdW5jX3dhcm5pbmcgIidMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKLQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQotCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0JY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAotCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICotKi1kYXJ3aW4qKQotCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKLQkjIEJ1dCBpcyBzdXBwb3NlZGx5IGZpeGVkIG9uIDEwLjQgb3IgbGF0ZXIgKHlheSEpLgotCWlmIHRlc3QgQ1hYID0gIiR0YWduYW1lIjsgdGhlbgotCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgotCSAgICAxMC5bMDEyM10pCi0JICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsLWJpbmRfYXRfbG9hZCIKLQkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsLWJpbmRfYXRfbG9hZCIKLQkgICAgOzsKLQkgIGVzYWMKLQlmaQotCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKLQljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAotCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQk7OwotICAgICAgZXNhYwotCi0KLSAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAotICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKLSAgICAgIG5ld19saWJzPQotICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KLQljYXNlICIgJG5ld19saWJzICIgaW4KLQkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7Ci0JKikKLQkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KLQkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKLQkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGZvciBkZXBsaWIgaW4gJGNvbXBpbGVfZGVwbGliczsgZG8KLQljYXNlICRkZXBsaWIgaW4KLQktTCopCi0JICBjYXNlICIgJG5ld19saWJzICIgaW4KLQkgICoiICRkZXBsaWIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7Ci0JICBlc2FjCi0JICA7OwotCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICBjb21waWxlX2RlcGxpYnM9JG5ld19saWJzCi0KLQotICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGNvbXBpbGVfZGVwbGlicyIKLSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkZmluYWxpemVfZGVwbGlicyIKLQotICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KLQkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCi0JZm9yIGxpYmRpciBpbiAkcnBhdGggJHhycGF0aDsgZG8KLQkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KLQkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCi0JICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwotCSAgZXNhYwotCWRvbmUKLSAgICAgIGZpCi0KLSAgICAgICMgTm93IGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCi0gICAgICBycGF0aD0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9Ci0gICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KLQlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLQkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgotCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKLQkgICAgZWxzZQotCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KLQkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgotCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKLQkJOzsKLQkgICAgICAqKQotCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgZWxzZQotCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0JICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCi0JICBmaQotCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgotCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OwotCSAgZXNhYwotCWZpCi0JY2FzZSAkaG9zdCBpbgotCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCi0JICB0ZXN0YmluZGlyPWAkRUNITyAiJGxpYmRpciIgfCAkU0VEIC1lICdzKi9saWIkKi9iaW4qJ2AKLQkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgotCSAgKiI6JGxpYmRpcjoiKikgOzsKLQkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OwotCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRsaWJkaXIiOzsKLQkgIGVzYWMKLQkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgotCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7Ci0JICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7Ci0JICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KLSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgotCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQlsaWJkaXI9JGhhcmRjb2RlX2xpYmRpcnMKLQlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAgICAgIGZpCi0gICAgICBjb21waWxlX3JwYXRoPSRycGF0aAotCi0gICAgICBycGF0aD0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9Ci0gICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KLQlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLQkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgotCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKLQkgICAgZWxzZQotCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KLQkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgotCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKLQkJOzsKLQkgICAgICAqKQotCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgZWxzZQotCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0JICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCi0JICBmaQotCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgotCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OwotCSAgZXNhYwotCWZpCi0gICAgICBkb25lCi0gICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgotICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCi0JIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCWxpYmRpcj0kaGFyZGNvZGVfbGliZGlycwotCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgZmkKLSAgICAgIGZpbmFsaXplX3JwYXRoPSRycGF0aAotCi0gICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KLQljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKLQlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAotICAgICAgZmkKLQotICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiBmYWxzZQotCi0gICAgICAjIHRlbXBsYXRlIHByZWxpbmtpbmcgc3RlcAotICAgICAgaWYgdGVzdCAtbiAiJHByZWxpbmtfY21kcyI7IHRoZW4KLQlmdW5jX2V4ZWN1dGVfY21kcyAiJHByZWxpbmtfY21kcyIgJ2V4aXQgJD8nCi0gICAgICBmaQotCi0gICAgICB3cmFwcGVyc19yZXF1aXJlZD06Ci0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCi0gICAgICAgICMgRGlzYWJsZSB3cmFwcGVycyBmb3IgY2VnY2MgYW5kIG1pbmd3MzJjZSBob3N0cywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCi0gICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCi0gICAgICAgIDs7Ci0gICAgICAqY3lnd2luKiB8ICptaW5ndyogKQotICAgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgaWYgdGVzdCBubyA9ICIkbmVlZF9yZWxpbmsiIHx8IHRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICAkd3JhcHBlcnNfcmVxdWlyZWQgfHwgewotCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLQljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCi0JbGlua19jb21tYW5kPSRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAotCi0JIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCi0JZXhpdF9zdGF0dXM9MAotCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCi0KLQlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KLQkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgotCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAotCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKLQlmaQotCi0JIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KLQlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4kb2JqZXh0IjsgdGhlbgotCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9iamV4dCInCi0JZmkKLQotCWV4aXQgJGV4aXRfc3RhdHVzCi0gICAgICB9Ci0KLSAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCi0JY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgotCWZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKLSAgICAgIGZpCi0KLSAgICAgIGNvbXBpbGVfdmFyPQotICAgICAgZmluYWxpemVfdmFyPQotICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotCWlmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgotCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KLQkgIHJwYXRoPQotCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KLQkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgotCSAgZG9uZQotCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgotCWZpCi0JaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCi0JICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgotCSAgcnBhdGg9Ci0JICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbwotCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCi0JICBkb25lCi0JICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgotCWZpCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkbm9faW5zdGFsbCI7IHRoZW4KLQkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCi0JbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAotCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLQlsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCi0JIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KLQkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKLQkjIExpbmsgdGhlIGV4ZWN1dGFibGUgYW5kIGV4aXQKLQlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCi0KLQlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KLQkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgotCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAotCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKLQlmaQotCi0JZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgICBmaQotCi0gICAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24sJGZhc3RfaW5zdGFsbCBpbgotICAgICAgICByZWxpbmssKikKLQkgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotCSAgbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAotCSAgcmVsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCi0KLQkgIGZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCi0JICBmdW5jX3dhcm5pbmcgIickb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCi0JICA7OwotICAgICAgICAqLHllcykKLQkgIGxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAotCSAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAotICAgICAgICAgIDs7Ci0JKixubykKLQkgIGxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKLQkgIHJlbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAotICAgICAgICAgIDs7Ci0JKixuZWVkbGVzcykKLQkgIGxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAotCSAgcmVsaW5rX2NvbW1hbmQ9Ci0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKLQotICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCi0gICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKLQotICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JwotCi0gICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KLQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiCi0JcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKLQlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JwotICAgICAgZmkKLQotICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KLSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKLQotICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgotICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgotCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKLQlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KLQkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCi0JICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgotCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCi0JICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKLQkgIGVsc2UKLQkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKLQkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgotCSAgZmkKLQlkb25lCi0JcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKLQlyZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAgIGZpCi0KLSAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KLSAgICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCi0JIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KLQljYXNlICRvdXRwdXQgaW4KLQkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCi0JICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLQllc2FjCi0JIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCi0JY2FzZSAkaG9zdCBpbgotCSAgKmN5Z3dpbiopCi0JICAgIGV4ZWV4dD0uZXhlCi0JICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCi0JICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotCSAgKikgZXhlZXh0PSA7OwotCWVzYWMKLQljYXNlICRob3N0IGluCi0JICAqY3lnd2luKiB8ICptaW5ndyogKQotCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKLQkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0JICAgIGN3cmFwcGVyc291cmNlPSRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jCi0JICAgIGN3cmFwcGVyPSRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlCi0JICAgICRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCi0JICAgIHRyYXAgIiRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyOyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQotCi0JICAgIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgPiAkY3dyYXBwZXJzb3VyY2UKLQotCSAgICAjIFRoZSB3cmFwcGVyIGV4ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRob3N0IGNvbXBpbGVyLAotCSAgICAjIGJlY2F1c2UgaXQgY29udGFpbnMgJGhvc3QgcGF0aHMgYW5kIGZpbGVzLiBJZiBjcm9zcy0KLQkgICAgIyBjb21waWxpbmcsIGl0LCBsaWtlIHRoZSB0YXJnZXQgZXhlY3V0YWJsZSwgbXVzdCBiZQotCSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBvciB1bmRlciBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQuCi0JICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1vICRjd3JhcHBlciAkY3dyYXBwZXJzb3VyY2UKLQkgICAgICAkU1RSSVAgJGN3cmFwcGVyCi0JICAgIH0KLQotCSAgICAjIE5vdywgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdCBmb3IgZnVuY19zb3VyY2UgdXNlOgotCSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICRjd3JhcHBlcgotCSAgICAkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0Ci0JICAgIHRyYXAgIiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1Ci0JICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgIyBub3RlOiB0aGlzIHNjcmlwdCB3aWxsIG5vdCBiZSBleGVjdXRlZCwgc28gZG8gbm90IGNobW9kLgotCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCI7IHRoZW4KLQkJJGN3cmFwcGVyIC0tbHQtZHVtcC1zY3JpcHQgPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKLQkgICAgICBlbHNlCi0JCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0Ci0JICAgICAgZmkKLQkgICAgfQotCSAgOzsKLQkgICogKQotCSAgICAkUk0gJG91dHB1dAotCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKLQotCSAgICBmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRvdXRwdXQKLQkgICAgY2htb2QgK3ggJG91dHB1dAotCSAgOzsKLQllc2FjCi0gICAgICB9Ci0gICAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCi0gICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KLQotICAgICAgY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluCi0gICAgICAgIGNvbnZlbmllbmNlKQotCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKLQkgIGFkZGxpYnM9JGNvbnZlbmllbmNlCi0JICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLQkgIDs7Ci0JbW9kdWxlKQotCSAgb2xkb2Jqcz0kbGlib2Jqc19zYXZlCi0JICBhZGRsaWJzPSRvbGRfY29udmVuaWVuY2UKLQkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotICAgICAgICAgIDs7Ci0JKikKLQkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgotCSAgJHByZWxvYWQgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiIFwKLQkgICAgJiYgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgotCSAgYWRkbGlicz0kb2xkX2NvbnZlbmllbmNlCi0JICA7OwotICAgICAgZXNhYwotCi0gICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KLQlnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKLQlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotCi0JZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKLQlmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0gICAgICBmaQotCi0gICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KLSAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotCWNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKLSAgICAgIGVsc2UKLQotCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcwotCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgotCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14Ci0JICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotCi0JICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcwotCSAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgotCWZpCi0KLQkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKLQkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQotCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCi0JIyBzdGF0aWMgYXJjaGl2ZSBvdXQgb2YgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LCBvciB3aGVuIGxpbmtpbmcKLQkjIHRoZSBlbnRpcmV0eSBvZiBhIGxpYnRvb2wgYXJjaGl2ZSBpbnRvIGFub3RoZXIgKGN1cnJlbnRseQotCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KLQlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcwotCSAgICBkbwotCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCi0JICAgICAgJEVDSE8gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkgICAgZG9uZSB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCi0JICA6Ci0JZWxzZQotCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgotCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14Ci0JICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgotCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCi0JICBvbGRvYmpzPQotCSAgY291bnRlcj0xCi0JICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKLQkgIGRvCi0JICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCi0JICAgIG9iamJhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCi0JICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7Ci0JICAgICpbXCAvXSIkb2JqYmFzZSAiKikKLQkgICAgICB3aGlsZSA6OyBkbwotCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbwotCQkjIG92ZXJsYXBzLgotCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQotCQlmdW5jX2FyaXRoICRjb3VudGVyICsgMQotCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAotCQljYXNlICIgJG9sZG9ianMgIiBpbgotCQkqW1wgL10iJG5ld29iaiAiKikgOzsKLQkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OwotCQllc2FjCi0JICAgICAgZG9uZQotCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKLQkgICAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGdlbnRvcC8kbmV3b2JqIgotCSAgICAgIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OwotCSAgICBlc2FjCi0JICBkb25lCi0JZmkKLQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG9sZGxpYiIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLQl0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0JZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgotCi0JZnVuY19sZW4gIiAkY21kcyIKLQlsZW49JGZ1bmNfbGVuX3Jlc3VsdAotCWlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgotCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcwotCWVsaWYgdGVzdCAtbiAiJGFyY2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KLQkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgY29tbWFuZCBmaWxlIGFyY2hpdmUgbGlua2luZy4uLiIKLQkgIGZvciBvYmogaW4gJG9sZG9ianMKLQkgIGRvCi0JICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgotCSAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKLQkgIGRvbmUgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQKLQkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQiCi0JICBvbGRvYmpzPSIgJGFyY2hpdmVyX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCi0JICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCi0JZWxzZQotCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKLQkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKLQkgIHNhdmVfUkFOTElCPSRSQU5MSUIKLQkgIFJBTkxJQj06Ci0JICBvYmpsaXN0PQotCSAgY29uY2F0X2NtZHM9Ci0JICBzYXZlX29sZG9ianM9JG9sZG9ianMKLQkgIG9sZG9ianM9Ci0JICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBmaW5kaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdD8KLQkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcwotCSAgZG8KLQkgICAgbGFzdF9vbGRvYmo9JG9iagotCSAgZG9uZQotCSAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCi0JICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCi0JICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKLQkgIGxlbj0kbGVuMAotCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCi0JICBkbwotCSAgICBmdW5jX2xlbiAiICRvYmoiCi0JICAgIGZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKLQkgICAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKLQkgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCi0JICAgICAgOgotCSAgICBlbHNlCi0JICAgICAgIyB0aGUgYWJvdmUgY29tbWFuZCBzaG91bGQgYmUgdXNlZCBiZWZvcmUgaXQgZ2V0cyB0b28gbG9uZwotCSAgICAgIG9sZG9ianM9JG9iamxpc3QKLQkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiOyB0aGVuCi0JCVJBTkxJQj0kc2F2ZV9SQU5MSUIKLQkgICAgICBmaQotCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJG9sZF9hcmNoaXZlX2NtZHNcIgotCSAgICAgIG9iamxpc3Q9Ci0JICAgICAgbGVuPSRsZW4wCi0JICAgIGZpCi0JICBkb25lCi0JICBSQU5MSUI9JHNhdmVfUkFOTElCCi0JICBvbGRvYmpzPSRvYmpsaXN0Ci0JICBpZiB0ZXN0IC16ICIkb2xkb2JqcyI7IHRoZW4KLQkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCi0JICBlbHNlCi0JICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0gICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdleGl0ICQ/JwotICAgIGRvbmUKLQotICAgIHRlc3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKLSAgICAgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIkZ2VuZXJhdGVkIgotCi0gICAgIyBOb3cgY3JlYXRlIHRoZSBsaWJ0b29sIGFyY2hpdmUuCi0gICAgY2FzZSAkb3V0cHV0IGluCi0gICAgKi5sYSkKLSAgICAgIG9sZF9saWJyYXJ5PQotICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIiAmJiBvbGRfbGlicmFyeT0kbGlibmFtZS4kbGliZXh0Ci0gICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCi0KLSAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKLSAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbwotCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCi0JICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKLQllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KLQkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKLQllbHNlCi0JICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgotCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgotCWZpCi0gICAgICBkb25lCi0gICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgotICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMIFwiJHByb2dwYXRoXCIgJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKLSAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyI7IHRoZW4KLQlyZWxpbmtfY29tbWFuZD0KLSAgICAgIGZpCi0KLSAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgotICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KLQkgIGlmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KLQkgICAgICBicmVhawotCSAgICBmaQotCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfWkKLQkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcwotCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9Ci0JICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgICBjYXNlICRkZXBsaWIgaW4KLQkgICAgICAqLmxhKQotCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgotCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKLQkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCi0JCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKLQkJOzsKLQkgICAgICAtTCopCi0JCWZ1bmNfc3RyaXBuYW1lIC1MICcnICIkZGVwbGliIgotCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLQkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLUwkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgotCQk7OwotCSAgICAgIC1SKikKLQkJZnVuY19zdHJpcG5hbWUgLVIgJycgIiRkZXBsaWIiCi0JCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCi0JCTs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJGRlcGxpYiIgOzsKLQkgICAgICBlc2FjCi0JICAgIGRvbmUKLQkgICAgZGVwZW5kZW5jeV9saWJzPSRuZXdkZXBlbmRlbmN5X2xpYnMKLQkgICAgbmV3ZGxmaWxlcz0KLQotCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbwotCSAgICAgIGNhc2UgJGxpYiBpbgotCSAgICAgICoubGEpCi0JICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgotCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCQlldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKLQkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi0JCWZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKLQkJOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKLQkgICAgICBlc2FjCi0JICAgIGRvbmUKLQkgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwotCSAgICBuZXdkbHByZWZpbGVzPQotCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbwotCSAgICAgIGNhc2UgJGxpYiBpbgotCSAgICAgICoubGEpCi0JCSMgT25seSBwYXNzIHByZW9wZW5lZCBmaWxlcyB0byB0aGUgcHNldWRvLWFyY2hpdmUgKGZvcgotCQkjIGV2ZW50dWFsIGxpbmtpbmcgd2l0aCB0aGUgYXBwLiB0aGF0IGxpbmtzIGl0KSBpZiB3ZQotCQkjIGRpZG4ndCBhbHJlYWR5IGxpbmsgdGhlIHByZW9wZW5lZCBvYmplY3RzIGRpcmVjdGx5IGludG8KLQkJIyB0aGUgbGlicmFyeToKLQkJZnVuY19iYXNlbmFtZSAiJGxpYiIKLQkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCi0JCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKLQkgIGVsc2UKLQkgICAgbmV3ZGxmaWxlcz0KLQkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KLQkgICAgICBjYXNlICRsaWIgaW4KLQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9JGxpYiA7OwotCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkYWJzIgotCSAgICBkb25lCi0JICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKLQkgICAgbmV3ZGxwcmVmaWxlcz0KLQkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KLQkgICAgICBjYXNlICRsaWIgaW4KLQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9JGxpYiA7OwotCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgotCSAgICBkb25lCi0JICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKLQkgIGZpCi0JICAkUk0gJG91dHB1dAotCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCi0JICAjIEluIGZhY3QsIGl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgdXNlIHRoaXMgY29kZSBmb3IgYWxsIHRhcmdldAotCSAgIyBzeXN0ZW1zIHRoYXQgY2FuJ3QgaGFyZC1jb2RlIGxpYnJhcnkgcGF0aHMgaW50byB0aGVpciBleGVjdXRhYmxlcwotCSAgIyBhbmQgdGhhdCBoYXZlIG5vIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUgaW5kZXBlbmRlbnQgb2YgUEFUSCwKLQkgICMgYnV0IGl0IHR1cm5zIG91dCB3ZSBjYW4ndCBlYXNpbHkgZGV0ZXJtaW5lIHRoYXQgZnJvbSBpbnNwZWN0aW5nCi0JICAjIGxpYnRvb2wgdmFyaWFibGVzLCBzbyB3ZSBoYXZlIHRvIGhhcmQtY29kZSB0aGUgT1NzIHRvIHdoaWNoIGl0Ci0JICAjIGFwcGxpZXMgaGVyZTsgYXQgdGhlIG1vbWVudCwgdGhhdCBtZWFucyBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIFBFCi0JICAjIG9iamVjdCBmb3JtYXQgd2l0aCBETEwgZmlsZXMuICBTZWUgdGhlIGxvbmcgY29tbWVudCBhdCB0aGUgdG9wIG9mCi0JICAjIHRlc3RzL2JpbmRpci5hdCBmb3IgZnVsbCBkZXRhaWxzLgotCSAgdGRsbmFtZT0kZGxuYW1lCi0JICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KLQkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkKLQkgICAgICAjIElmIGEgLWJpbmRpciBhcmd1bWVudCB3YXMgc3VwcGxpZWQsIHBsYWNlIHRoZSBkbGwgdGhlcmUuCi0JICAgICAgaWYgdGVzdCAtbiAiJGJpbmRpciI7IHRoZW4KLQkJZnVuY19yZWxhdGl2ZV9wYXRoICIkaW5zdGFsbF9saWJkaXIiICIkYmluZGlyIgotCQl0ZGxuYW1lPSRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyRkbG5hbWUKLQkgICAgICBlbHNlCi0JCSMgT3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCi0JCXRkbG5hbWU9Li4vYmluLyRkbG5hbWUKLQkgICAgICBmaQotCSAgICAgIDs7Ci0JICBlc2FjCi0JICAkRUNITyA+ICRvdXRwdXQgIlwKLSMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgotIwotIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCi0jIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KLQotIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCi1kbG5hbWU9JyR0ZGxuYW1lJwotCi0jIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KLWxpYnJhcnlfbmFtZXM9JyRsaWJyYXJ5X25hbWVzJwotCi0jIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KLW9sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCi0KLSMgTGlua2VyIGZsYWdzIHRoYXQgY2Fubm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KLWluaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKLQotIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCi1kZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCi0KLSMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKLXdlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKLQotIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KLWN1cnJlbnQ9JGN1cnJlbnQKLWFnZT0kYWdlCi1yZXZpc2lvbj0kcmV2aXNpb24KLQotIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/Ci1pbnN0YWxsZWQ9JGluc3RhbGxlZAotCi0jIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPwotc2hvdWxkbm90bGluaz0kbW9kdWxlCi0KLSMgRmlsZXMgdG8gZGxvcGVuL2RscHJlb3BlbgotZGxvcGVuPSckZGxmaWxlcycKLWRscHJlb3Blbj0nJGRscHJlZmlsZXMnCi0KLSMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKLWxpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKLQkgIGlmIHRlc3Qgbm8seWVzID0gIiRpbnN0YWxsZWQsJG5lZWRfcmVsaW5rIjsgdGhlbgotCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCi1yZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgotCSAgZmkKLQlkb25lCi0gICAgICB9Ci0KLSAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KLSAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCi0gICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotfQotCi1pZiB0ZXN0IGxpbmsgPSAiJG9wdF9tb2RlIiB8fCB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCi0gIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQotZmkKLQotCi0jIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCi1mdW5jX21vZGVfdW5pbnN0YWxsICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgUk09JG5vbm9wdAotICAgIGZpbGVzPQotICAgIHJtZm9yY2U9ZmFsc2UKLSAgICBleGl0X3N0YXR1cz0wCi0KLSAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKLSAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9JG1hZ2ljCi0KLSAgICBmb3IgYXJnCi0gICAgZG8KLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9OiA7OwotICAgICAgLSopIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyIgOzsKLSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICB0ZXN0IC16ICIkUk0iICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBSTSBwcm9ncmFtIgotCi0gICAgcm1kaXJzPQotCi0gICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwotICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCi0gICAgICBkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLSAgICAgIGlmIHRlc3QgLiA9ICIkZGlyIjsgdGhlbgotCW9kaXI9JG9iamRpcgotICAgICAgZWxzZQotCW9kaXI9JGRpci8kb2JqZGlyCi0gICAgICBmaQotICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0gICAgICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotICAgICAgdGVzdCB1bmluc3RhbGwgPSAiJG9wdF9tb2RlIiAmJiBvZGlyPSRkaXIKLQotICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKLSAgICAgIGlmIHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgotCWNhc2UgIiAkcm1kaXJzICIgaW4KLQkgICoiICRvZGlyICIqKSA7OwotCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7Ci0JZXNhYwotICAgICAgZmkKLQotICAgICAgIyBEb24ndCBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBybSAtZiB3YXMgdXNlZC4KLSAgICAgIGlmIHsgdGVzdCAtTCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAotCSB7IHRlc3QgLWggIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKLQkgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCi0JOgotICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KLQlleGl0X3N0YXR1cz0xCi0JY29udGludWUKLSAgICAgIGVsaWYgJHJtZm9yY2U7IHRoZW4KLQljb250aW51ZQotICAgICAgZmkKLQotICAgICAgcm1maWxlcz0kZmlsZQotCi0gICAgICBjYXNlICRuYW1lIGluCi0gICAgICAqLmxhKQotCSMgUG9zc2libHkgYSBsaWJ0b29sIGFyY2hpdmUsIHNvIHZlcmlmeSBpdC4KLQlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgotCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQotCi0JICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgotCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCi0JICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbiIKLQkgIGRvbmUKLQkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKLQotCSAgY2FzZSAkb3B0X21vZGUgaW4KLQkgIGNsZWFuKQotCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgotCSAgICAqIiAkZGxuYW1lICIqKSA7OwotCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKLQkgICAgZXNhYwotCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfWkiCi0JICAgIDs7Ci0JICB1bmluc3RhbGwpCi0JICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgotCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgotCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAnJHJtZm9yY2UgfHwgZXhpdF9zdGF0dXM9MScKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgotCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgJyRybWZvcmNlIHx8IGV4aXRfc3RhdHVzPTEnCi0JICAgIGZpCi0JICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgotCSAgICA7OwotCSAgZXNhYwotCWZpCi0JOzsKLQotICAgICAgKi5sbykKLQkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KLQlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgotCi0JICAjIFJlYWQgdGhlIC5sbyBmaWxlCi0JICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCi0KLQkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgotCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmIHRlc3Qgbm9uZSAhPSAiJHBpY19vYmplY3QiOyB0aGVuCi0JICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgotCSAgZmkKLQotCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgotCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJiB0ZXN0IG5vbmUgIT0gIiRub25fcGljX29iamVjdCI7IHRoZW4KLQkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgotCSAgZmkKLQlmaQotCTs7Ci0KLSAgICAgICopCi0JaWYgdGVzdCBjbGVhbiA9ICIkb3B0X21vZGUiOyB0aGVuCi0JICBub2V4ZW5hbWU9JG5hbWUKLQkgIGNhc2UgJGZpbGUgaW4KLQkgICouZXhlKQotCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgotCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKLQkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAotCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKLQkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgotCSAgICA7OwotCSAgZXNhYwotCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCi0JICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KLQkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KLQkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKLQkgICAgICByZWxpbmtfY29tbWFuZD0KLQkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKLQkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgotCSAgICBlbHNlCi0JICAgICAgcmVsaW5rX2NvbW1hbmQ9Ci0JICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCi0JICAgIGZpCi0KLQkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKLQkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKLQkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiRvYmpleHQiCi0JICAgIGlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KLQkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5hbWUiCi0JICAgIGZpCi0JICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIjsgdGhlbgotCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbm9leGVuYW1lLmMiCi0JICAgIGZpCi0JICBmaQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJwotICAgIGRvbmUKLQotICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJG9iamRpcidzIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCi0gICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbwotICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KLQlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCi0gICAgICBmaQotICAgIGRvbmUKLQotICAgIGV4aXQgJGV4aXRfc3RhdHVzCi19Ci0KLWlmIHRlc3QgdW5pbnN0YWxsID0gIiRvcHRfbW9kZSIgfHwgdGVzdCBjbGVhbiA9ICIkb3B0X21vZGUiOyB0aGVuCi0gIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9Ci1maQotCi10ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKLSAgaGVscD0kZ2VuZXJpY19oZWxwCi0gIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCi19Ci0KLXRlc3QgLXogIiRleGVjX2NtZCIgJiYgXAotICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgJyRvcHRfbW9kZSciCi0KLWlmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KLSAgZXZhbCBleGVjICIkZXhlY19jbWQiCi0gIGV4aXQgJEVYSVRfRkFJTFVSRQotZmkKLQotZXhpdCAkZXhpdF9zdGF0dXMKLQotCi0jIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgotIyB3aGVyZSB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKLSMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCi0jIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQotIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKLSMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKLSMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQotIyB0aW1lIG9uIHRoYXQgcGxhdGZvcm0sIHNvIHdlIGRlZmF1bHQgdG8gYSBzaGFyZWQtb25seSBjb25maWd1cmF0aW9uLgotIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQotIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCi0KLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKLWJ1aWxkX2xpYnRvb2xfbGlicz1ubwotYnVpbGRfb2xkX2xpYnM9eWVzCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAotCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCi1idWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCi0KLSMgTG9jYWwgVmFyaWFibGVzOgotIyBtb2RlOnNoZWxsLXNjcmlwdAotIyBzaC1pbmRlbnRhdGlvbjoyCi0jIEVuZDoKZGlmZiAtLWdpdCBhL200L01ha2VmaWxlLmFtIGIvbTQvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmODY0ZTMuLjAwMDAwMDAKLS0tIGEvbTQvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FWFRSQV9ESVNUID0gJCh3aWxkY2FyZCAqLm00KQpkaWZmIC0tZ2l0IGEvbTQvTWFrZWZpbGUuaW4gYi9tNC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhZGNmOC4uMDAwMDAwMAotLS0gYS9tNC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDY0NSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IG00Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLUVYVFJBX0RJU1QgPSAkKHdpbGRjYXJkICoubTQpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBtNC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBtNC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLXRhZ3MgVEFHUzoKLQotY3RhZ3MgQ1RBR1M6Ci0KLWNzY29wZSBjc2NvcGVsaXN0OgotCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbTQvY2hlY2stY2hlY2tzLm00IGIvbTQvY2hlY2stY2hlY2tzLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTMwODUzLi4wMDAwMDAwCi0tLSBhL200L2NoZWNrLWNoZWNrcy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi1kbmwgQ2hlY2sgZm9yIHRoaW5ncyB0aGF0IGNoZWNrIG5lZWRzL3dhbnRzIGFuZCB0aGF0IHdlIGRvbid0IGNoZWNrIGZvciBhbHJlYWR5Ci1kbmwgQU1fR1NUX0NIRUNLX0NIRUNLUygpCi0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfQ0hFQ0tTXSwKLVsKLUFDX01TR19OT1RJQ0UoW1J1bm5pbmcgY2hlY2sgdW5pdCB0ZXN0IGZyYW1ld29yayBjaGVja3Mgbm93Li4uXSkKLQotQ0hFQ0tfTUFKT1JfVkVSU0lPTj0wCi1DSEVDS19NSU5PUl9WRVJTSU9OPTkKLUNIRUNLX01JQ1JPX1ZFUlNJT049MTQKLUNIRUNLX1ZFUlNJT049JENIRUNLX01BSk9SX1ZFUlNJT04uJENIRUNLX01JTk9SX1ZFUlNJT04uJENIRUNLX01JQ1JPX1ZFUlNJT04KLQotQUNfU1VCU1QoQ0hFQ0tfTUFKT1JfVkVSU0lPTikKLUFDX1NVQlNUKENIRUNLX01JTk9SX1ZFUlNJT04pCi1BQ19TVUJTVChDSEVDS19NSUNST19WRVJTSU9OKQotQUNfU1VCU1QoQ0hFQ0tfVkVSU0lPTikKLQotZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzIGFuZCBkZWNsYXJhdGlvbnMKLUFDX0NIRUNLX0hFQURFUlMoW3VuaXN0ZC5oIHN5cy93YWl0Lmggc3lzL3RpbWUuaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKQotCi1BQ19DSEVDS19GVU5DUyhbbG9jYWx0aW1lX3JdKQotCi1kbmwgQ2hlY2sgZm9yIGdldHBpZCgpIGFuZCBfZ2V0cGlkKCkKLUFDX0NIRUNLX0ZVTkNTKFtnZXRwaWQgX2dldHBpZF0pCi0KLWRubCBDaGVjayBmb3Igc3RyZHVwKCkgYW5kIF9zdHJkdXAoKQotQUNfQ0hFQ0tfREVDTFMoW3N0cmR1cF0pCi1BQ19DSEVDS19GVU5DUyhbX3N0cmR1cF0pCi0KLWRubCBDaGVjayBmb3IgbWtzdGVtcAotQUNfQ0hFQ0tfRlVOQ1MoW21rc3RlbXBdKQotCi1kbmwgQ2hlY2sgZm9yIGZvcmsKLUFDX0NIRUNLX0ZVTkNTKFtmb3JrXSwgSEFWRV9GT1JLPTEsIEhBVkVfRk9SSz0wKQotQUNfU1VCU1QoSEFWRV9GT1JLKQotCi1kbmwgQ2hlY2sgZm9yIGFsYXJtLCBsb2NhbHRpbWVfciBhbmQgc3Ryc2lnbmFsCi1kbmwgRmlyc3QgY2hlY2sgZm9yIHRpbWUuaCBhcyBpdCBtaWdodCBiZSB1c2VkIGJ5IGxvY2FsdGltZV9yCi1BQ19DSEVDS19IRUFERVJTKFt0aW1lLmhdKQotQUNfQ0hFQ0tfREVDTFMoW2FsYXJtLCBsb2NhbHRpbWVfciwgc3Ryc2lnbmFsXSwgW10sIFtdLCBbCi0gICAgQUNfSU5DTFVERVNfREVGQVVMVAotI2lmIEhBVkVfVElNRV9ICi0jaW5jbHVkZSA8dGltZS5oPgotI2VuZGlmIC8qIEhBVkVfVElNRV9IICovCi1dKQotQUNfQ0hFQ0tfRlVOQ1MoW2FsYXJtIHNldGl0aW1lciBzdHJzaWduYWxdKQotQU1fQ09ORElUSU9OQUwoSEFWRV9BTEFSTSwgdGVzdCAieCRhY19jdl9mdW5jX2FsYXJtIiA9ICJ4eWVzIikKLUFNX0NPTkRJVElPTkFMKEhBVkVfTE9DQUxUSU1FX1IsIHRlc3QgIngkYWNfY3ZfZnVuY19sb2NhbHRpbWVfciIgPSAieHllcyIpCi1BTV9DT05ESVRJT05BTChIQVZFX1NUUlNJR05BTCwgdGVzdCAieCRhY19jdl9mdW5jX3N0cnNpZ25hbCIgPSAieHllcyIpCi0KLWRubCBDaGVjayBpZiBzdHJ1Y3QgdGltZXNwZWMvaXRpbWVyc3BlYyBhcmUgZGVmaW5lZCBpbiB0aW1lLmguIElmIG5vdCwgd2UgbmVlZAotZG5sIHRvIGRlZmluZSBpdCBpbiBsaWJzL2dzdC9jaGVjay9saWJjaGVjay9saWJjb21wYXQuaC4gTm90ZSB0aGUgb3B0aW9uYWwKLWRubCBpbmNsdXNpb24gb2YgcHRocmVhZC5oLiBPbiBNaW5HVygtdzY0KSwgdGhlIHB0aHJlYWQuaCBmaWxlIGNvbnRhaW5zIHRoZQotZG5sIHRpbWVzcGVjL2l0aW1lcnNwZWMgZGVmaW5pdGlvbnMuCi1BQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgdGltZXNwZWMudHZfc2VjLCBzdHJ1Y3QgdGltZXNwZWMudHZfbnNlY10sIFtdLAotICBbQUNfREVGSU5FX1VOUVVPVEVEKFNUUlVDVF9USU1FU1BFQ19ERUZJTklUSU9OX01JU1NJTkcsIDEsCi0gICAgW05lZWQgdG8gZGVmaW5lIHRoZSB0aW1lc3BlYyBzdHJ1Y3R1cmVdKV0sIFsKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaWYgSEFWRV9QVEhSRUFECi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmIC8qIEhBVkVfUFRIUkVBRCAqLwotXSkKLUFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpdGltZXJzcGVjLml0X2ludGVydmFsLCBzdHJ1Y3QgaXRpbWVyc3BlYy5pdF92YWx1ZV0sCi0gIFtdLCBbQUNfREVGSU5FX1VOUVVPVEVEKFNUUlVDVF9JVElNRVJTUEVDX0RFRklOSVRJT05fTUlTU0lORywgMSwKLSAgICBbTmVlZCB0byBkZWZpbmUgdGhlIGl0aW1lcnNwZWMgc3RydWN0dXJlXSldLCBbCi0jaW5jbHVkZSA8dGltZS5oPgotI2lmIEhBVkVfUFRIUkVBRAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KLV0pCi0KLWRubCBDaGVjayBpZiB0eXBlcyB0aW1lcl90L2Nsb2NraWRfdCBhcmUgZGVmaW5lZC4gSWYgbm90LCB3ZSBuZWVkIHRvIGRlZmluZQotZG5sIGl0IGluIGxpYnMvZ3N0L2NoZWNrL2xpYmNoZWNrL2liY29tcGF0LmguIE5vdGUgdGhlIG9wdGlvbmFsIGluY2x1c2lvbiBvZgotZG5sIHB0aHJlYWQuaC4gT24gTWluR1coLXc2NCksIHRoZSBwdGhyZWFkLmggZmlsZSBjb250YWlucyB0aGUKLWRubCB0aW1lcl90L2Nsb2NraWRfdCBkZWZpbml0aW9ucy4KLUFDX0NIRUNLX1RZUEUodGltZXJfdCwgW10sIFsKLSAgICBBQ19ERUZJTkUoW3RpbWVyX3RdLCBbaW50XSwgW3RpbWVyX3RdKQotICBdLCBbCi0gICAgQUNfSU5DTFVERVNfREVGQVVMVAotI2lmIEhBVkVfUFRIUkVBRAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZiAvKiBIQVZFX1BUSFJFQUQgKi8KLV0pCi1BQ19DSEVDS19UWVBFKGNsb2NraWRfdCwgW10sIFsKLSAgICBBQ19ERUZJTkUoW2Nsb2NraWRfdF0sIFtpbnRdLCBbY2xvY2tpZF90XSkKLSAgXSwgWwotICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQKLSNpZiBIQVZFX1BUSFJFQUQKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZW5kaWYgLyogSEFWRV9QVEhSRUFEICovCi1dKQotCi1kbmwgQ2hlY2sgZm9yIFBPU0lYIHRpbWVyIGZ1bmN0aW9ucyBpbiBsaWJydAotQUNfQ0hFQ0tfTElCKFtydF0sIFt0aW1lcl9jcmVhdGUsIHRpbWVyX3NldHRpbWUsIHRpbWVyX2RlbGV0ZV0pCi1BTV9DT05ESVRJT05BTChIQVZFX1RJTUVSX0NSRUFURV9TRVRUSU1FX0RFTEVURSwgdGVzdCAieCRhY19jdl9saWJfcnRfdGltZXJfY3JlYXRlX190aW1lcl9zZXR0aW1lX190aW1lcl9kZWxldGUiID0gInh5ZXMiKQotCi1kbmwgQWxsb3cgZm9yIGNoZWNraW5nIEhBVkVfQ0xPQ0tfR0VUVElNRSBpbiBhdXRvbWFrZSBmaWxlcwotQU1fQ09ORElUSU9OQUwoSEFWRV9DTE9DS19HRVRUSU1FLCB0ZXN0ICJ4JENMT0NLX0dFVFRJTUVfRk9VTkQiID0gInh5ZXMiKQotCi1kbmwgQ3JlYXRlIF9zdGRpbnQuaCBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeQotQVhfQ1JFQVRFX1NURElOVF9ICi0KLWRubCBEaXNhYmxlIHN1YnVuaXQgc3VwcG9ydCBmb3IgdGhlIHRpbWUgYmVpbmcKLWVuYWJsZV9zdWJ1bml0PWZhbHNlCi0KLWlmIHRlc3QgeGZhbHNlID0geCIkZW5hYmxlX3N1YnVuaXQiOyB0aGVuCi1FTkFCTEVfU1VCVU5JVD0iMCIKLWVsc2UKLUVOQUJMRV9TVUJVTklUPSIxIgotZmkKLUFDX1NVQlNUKEVOQUJMRV9TVUJVTklUKQotQUNfREVGSU5FX1VOUVVPVEVEKEVOQUJMRV9TVUJVTklULCAkRU5BQkxFX1NVQlVOSVQsIFtTdWJ1bml0IHByb3RvY29sIHJlc3VsdCBvdXRwdXRdKQotCi1BTV9DT05ESVRJT05BTChTVUJVTklULCB0ZXN0IHgiJGVuYWJsZV9zdWJ1bml0IiAhPSAieGZhbHNlIikKLQotXSkKZGlmZiAtLWdpdCBhL200L2NvZGVzZXQubTQgYi9tNC9jb2Rlc2V0Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjM5NTViLi4wMDAwMDAwCi0tLSBhL200L2NvZGVzZXQubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIGNvZGVzZXQubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xNikKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBCcnVubyBIYWlibGUuCi0KLUFDX0RFRlVOKFtBTV9MQU5HSU5GT19DT0RFU0VUXSwKLVsKLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCi0gICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGFuZ2luZm8uaD5dLAotICAgICAgW2NoYXIqIGNzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHJldHVybiAhY3M7XSwKLSAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAotICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ubykKLSAgICBdKQotICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfTEFOR0lORk9fQ09ERVNFVCwgMSwKLSAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgPGxhbmdpbmZvLmg+IGFuZCBubF9sYW5naW5mbyhDT0RFU0VUKS5dKQotICBmaQotXSkKZGlmZiAtLWdpdCBhL200L2dldHRleHQubTQgYi9tNC9nZXR0ZXh0Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWFlMWY3Li4wMDAwMDAwCi0tLSBhL200L2dldHRleHQubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzODEgKzAsMCBAQAotIyBnZXR0ZXh0Lm00IHNlcmlhbCA2MCAoZ2V0dGV4dC0wLjE3KQotZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi1kbmwKLWRubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCi1kbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKLWRubCBmdW5jdGlvbmFsaXR5LgotZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKLWRubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKLWRubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLWRubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KLQotZG5sIEF1dGhvcnM6Ci1kbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgotZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDYuCi0KLWRubCBNYWNybyB0byBhZGQgZm9yIHVzaW5nIEdOVSBnZXR0ZXh0LgotCi1kbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgotZG5sIElOVExTWU1CT0wgY2FuIGJlIG9uZSBvZiAnZXh0ZXJuYWwnLCAnbm8tbGlidG9vbCcsICd1c2UtbGlidG9vbCcuIFRoZQotZG5sICAgIGRlZmF1bHQgKGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQgb3IgZW1wdHkpIGlzICduby1saWJ0b29sJy4KLWRubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAotZG5sICAgIGFuZCAnbm8tbGlidG9vbCcgb3IgJ3VzZS1saWJ0b29sJyBmb3IgcGFja2FnZXMgd2l0aCBhbiBpbnRsIGRpcmVjdG9yeS4KLWRubCAgICBJZiBJTlRMU1lNQk9MIGlzICd1c2UtbGlidG9vbCcsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkKLWRubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCi1kbmwgICAgZGVwZW5kaW5nIG9uIC0te2VuYWJsZSxkaXNhYmxlfS17c2hhcmVkLHN0YXRpY30gYW5kIG9uIHRoZSBwcmVzZW5jZSBvZgotZG5sICAgIEFNLURJU0FCTEUtU0hBUkVEKS4gSWYgSU5UTFNZTUJPTCBpcyAnbm8tbGlidG9vbCcsIGEgc3RhdGljIGxpYnJhcnkKLWRubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgotZG5sIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcyAnbmVlZC1uZ2V0dGV4dCcsIHRoZW4gR05VIGdldHRleHQKLWRubCAgICBpbXBsZW1lbnRhdGlvbnMgKGluIGxpYmMgb3IgbGliaW50bCkgd2l0aG91dCB0aGUgbmdldHRleHQoKSBmdW5jdGlvbgotZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcwotZG5sICAgICduZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MnLCB0aGVuIEdOVSBnZXR0ZXh0IGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0Ci1kbmwgICAgc3VwcG9ydCB0aGUgSVNPIEMgOTkgPGludHR5cGVzLmg+IGZvcm1hdHN0cmluZyBtYWNyb3Mgd2lsbCBiZSBpZ25vcmVkLgotZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAotZG5sICAgIHRoZSB2YWx1ZSBgJCh0b3BfYnVpbGRkaXIpL2ludGwvJyBpcyB1c2VkLgotZG5sCi1kbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6Ci1kbmwgMSkgR05VIGdldHRleHQsIGFzIGluY2x1ZGVkIGluIHRoZSBpbnRsIHN1YmRpcmVjdG9yeSwgd2lsbCBiZSBjb21waWxlZAotZG5sICAgIGFuZCB1c2VkLgotZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQotZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCi1kbmwgMikgR05VIGdldHRleHQgaGFzIGJlZW4gZm91bmQgaW4gdGhlIHN5c3RlbSdzIEMgbGlicmFyeS4KLWRubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKLWRubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQotZG5sIDMpIE5vIGludGVybmF0aW9uYWxpemF0aW9uLCBhbHdheXMgdXNlIEVuZ2xpc2ggbXNnaWQuCi1kbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKLWRubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogbm9uZQotZG5sIElmIElOVExTWU1CT0wgaXMgJ2V4dGVybmFsJywgb25seSBjYXNlcyAyIGFuZCAzIGNhbiBvY2N1ci4KLWRubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKLWRubCBHTlUgZm9ybWF0IGNhdGFsb2dzIHdoZW4gYnVpbGRpbmcgb24gYSBwbGF0Zm9ybSB3aXRoIGFuIFgvT3BlbiBnZXR0ZXh0KSwKLWRubCBidXQgd2Uga2VlcCBpdCBpbiBvcmRlciBub3QgdG8gZm9yY2UgaXJyZWxldmFudCBmaWxlbmFtZSBjaGFuZ2VzIG9uIHRoZQotZG5sIG1haW50YWluZXJzLgotZG5sCi1BQ19ERUZVTihbQU1fR05VX0dFVFRFWFRdLAotWwotICBkbmwgQXJndW1lbnQgY2hlY2tpbmcuCi0gIGlmZWxzZShbJDFdLCBbXSwgLCBbaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sICwgW2lmZWxzZShbJDFdLCBbbm8tbGlidG9vbF0sICwgW2lmZWxzZShbJDFdLCBbdXNlLWxpYnRvb2xdLCAsCi0gICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAotXSldKV0pXSldKQotICBpZmVsc2UoWyQyXSwgW10sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sICwgW2lmZWxzZShbJDJdLCBbbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zXSwgLAotICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCi1dKV0pXSldKQotICBkZWZpbmUoW2d0X2luY2x1ZGVkX2ludGxdLAotICAgIGlmZWxzZShbJDFdLCBbZXh0ZXJuYWxdLAotICAgICAgaWZkZWYoW0FNX0dOVV9HRVRURVhUX11bSU5UTF9TVUJESVJdLCBbeWVzXSwgW25vXSksCi0gICAgICBbeWVzXSkpCi0gIGRlZmluZShbZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4XSwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQotICBndF9ORUVEU19JTklUCi0gIEFNX0dOVV9HRVRURVhUX05FRUQoWyQyXSkKLQotICBBQ19SRVFVSVJFKFtBTV9QT19TVUJESVJTXSlkbmwKLSAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWwotICAgIEFDX1JFUVVJUkUoW0FNX0lOVExfU1VCRElSXSlkbmwKLSAgXSkKLQotICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCi0KLSAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgotICBkbmwgSWRlYWxseSB3ZSB3b3VsZCBkbyB0aGlzIHNlYXJjaCBvbmx5IGFmdGVyIHRoZQotICBkbmwgICAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgotICBkbmwgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4KLSAgZG5sIHRlc3RzLiBCdXQgaWYgY29uZmlndXJlLmluIGludm9rZXMgQU1fSUNPTlYgYWZ0ZXIgQU1fR05VX0dFVFRFWFQKLSAgZG5sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG5lZWQgdG8gY29udGFpbiB0aGUgc2FtZSBzaGVsbCBjb2RlCi0gIGRubCBhZ2Fpbiwgb3V0c2lkZSBhbnkgJ2lmJy4gVGhlcmUgYXJlIHR3byBzb2x1dGlvbnM6Ci0gIGRubCAtIEludm9rZSBBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWSBoZXJlLCBvdXRzaWRlIGFueSAnaWYnLgotICBkbmwgLSBDb250cm9sIHRoZSBleHBhbnNpb25zIGluIG1vcmUgZGV0YWlsIHVzaW5nIEFDX1BST1ZJREVfSUZFTFNFLgotICBkbmwgU2luY2UgQUNfUFJPVklERV9JRkVMU0UgaXMgb25seSBpbiBhdXRvY29uZiA+PSAyLjUyIGFuZCBub3QKLSAgZG5sIGRvY3VtZW50ZWQsIHdlIGF2b2lkIGl0LgotICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKLSAgICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCi0gIF0pCi0KLSAgZG5sIFNvbWV0aW1lcywgb24gTWFjT1MgWCwgbGliaW50bCByZXF1aXJlcyBsaW5raW5nIHdpdGggQ29yZUZvdW5kYXRpb24uCi0gIGd0X0lOVExfTUFDT1NYCi0KLSAgZG5sIFNldCBVU0VfTkxTLgotICBBQ19SRVFVSVJFKFtBTV9OTFNdKQotCi0gIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKLSAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPW5vCi0gICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9bm8KLSAgXSkKLSAgTElCSU5UTD0KLSAgTFRMSUJJTlRMPQotICBQT1NVQj0KLQotICBkbmwgQWRkIGEgdmVyc2lvbiBudW1iZXIgdG8gdGhlIGNhY2hlIG1hY3Jvcy4KLSAgY2FzZSAiICRndF9uZWVkcyAiIGluCi0gICAgKiIgbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zICIqKSBndF9hcGlfdmVyc2lvbj0zIDs7Ci0gICAgKiIgbmVlZC1uZ2V0dGV4dCAiKikgZ3RfYXBpX3ZlcnNpb249MiA7OwotICAgICopIGd0X2FwaV92ZXJzaW9uPTEgOzsKLSAgZXNhYwotICBndF9mdW5jX2dudWdldHRleHRfbGliYz0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliYyIKLSAgZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9Imd0X2N2X2Z1bmNfZ251Z2V0dGV4dCR7Z3RfYXBpX3ZlcnNpb259X2xpYmludGwiCi0KLSAgZG5sIElmIHdlIHVzZSBOTFMgZmlndXJlIG91dCB3aGF0IG1ldGhvZAotICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgotICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD1ubwotICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBpbmNsdWRlZCBnZXR0ZXh0IGlzIHJlcXVlc3RlZF0pCi0gICAgICBBQ19BUkdfV0lUSChpbmNsdWRlZC1nZXR0ZXh0LAotICAgICAgICBbICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZV0sCi0gICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9JHdpdGh2YWwsCi0gICAgICAgIG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQ9bm8pCi0gICAgICBBQ19NU0dfUkVTVUxUKCRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0KQotCi0gICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PSIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIKLSAgICAgIGlmIHRlc3QgIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgotICAgIF0pCi0gICAgICAgIGRubCBVc2VyIGRvZXMgbm90IGluc2lzdCBvbiB1c2luZyBHTlUgTkxTIGxpYnJhcnkuICBGaWd1cmUgb3V0IHdoYXQKLSAgICAgICAgZG5sIHRvIHVzZS4gIElmIEdOVSBnZXR0ZXh0IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcy4gIEVsc2Ugd2UgaGF2ZQotICAgICAgICBkbmwgdG8gZmFsbCBiYWNrIHRvIEdOVSBOTFMgbGlicmFyeS4KLQotICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMzsgdGhlbgotICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0nCi0jaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCi0jZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQotI2VuZGlmCi1jaGFuZ2VxdW90ZSgsKWRubAotdHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsKLWNoYW5nZXF1b3RlKFssXSlkbmwKLScKLSAgICAgICAgZWxzZQotICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0KLSAgICAgICAgZmkKLSAgICAgICAgaWYgdGVzdCAkZ3RfYXBpX3ZlcnNpb24gLWdlIDI7IHRoZW4KLSAgICAgICAgICBndF9leHByZXNzaW9uX3Rlc3RfY29kZT0nICsgKiBuZ2V0dGV4dCAoIiIsICIiLCAwKScKLSAgICAgICAgZWxzZQotICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPQotICAgICAgICBmaQotCi0gICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliY10sIFskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmNdLAotICAgICAgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgotJGd0X3JldmlzaW9uX3Rlc3RfY29kZQotZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOwotZXh0ZXJuIGludCAqX25sX2RvbWFpbl9iaW5kaW5ncztdLAotICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOwotcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZG9tYWluX2JpbmRpbmdzXSwKLSAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9eWVzIl0sCi0gICAgICAgICAgICBbZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPW5vIl0pXSkKLQotICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiICE9ICJ5ZXMiOyB9OyB0aGVuCi0gICAgICAgICAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgotICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWwotICAgICAgICAgICAgQU1fSUNPTlZfTElOSwotICAgICAgICAgIF0pCi0gICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAotICAgICAgICAgIGRubCBhY2NvcmRpbmdseS4gRG9uJ3QgdXNlIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0sW2ljb252XSkKLSAgICAgICAgICBkbmwgYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCAiLWxpY29udiIgdG8gTElCSU5UTCBhbmQgTFRMSUJJTlRMCi0gICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KLSAgICAgICAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdKQotICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliaW50bF0sCi0gICAgICAgICAgICBbJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsXSwKLSAgICAgICAgICAgW2d0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCi0gICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCi0gICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkb2VzIG5vdCBkZXBlbmQgb24gbGliaWNvbnYuCi0gICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KLSRndF9yZXZpc2lvbl90ZXN0X2NvZGUKLWV4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKLWV4dGVybgotI2lmZGVmIF9fY3BsdXNwbHVzCi0iQyIKLSNlbmRpZgotY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTtdLAotICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7Ci1yZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKV0sCi0gICAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzIl0sCi0gICAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9bm8iXSkKLSAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRlcGVuZHMgb24gbGliaWNvbnYuCi0gICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiICE9IHllczsgfSAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCi0gICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKLSAgICAgICAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0kZ3RfcmV2aXNpb25fdGVzdF9jb2RlCi1leHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7Ci1leHRlcm4KLSNpZmRlZiBfX2NwbHVzcGx1cwotIkMiCi0jZW5kaWYKLWNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKik7XSwKLSAgICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7Ci1yZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKV0sCi0gICAgICAgICAgICAgICBbTElCSU5UTD0iJExJQklOVEwgJExJQklDT05WIgotICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkTFRMSUJJQ09OViIKLSAgICAgICAgICAgICAgICBldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzIgotICAgICAgICAgICAgICAgXSkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCi0gICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCi0gICAgICAgIGZpCi0KLSAgICAgICAgZG5sIElmIGFuIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQgR05VIGdldHRleHQoKSBpcyBmb3VuZCwKLSAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKLSAgICAgICAgZG5sIGdldHRleHQgaXMgYWxyZWFkeSBwcmVpbnN0YWxsZWQgaW4gbGliaW50bCwgd2UgdXBkYXRlIHRoaXMKLSAgICAgICAgZG5sIGxpYmludGwuICAoQ2YuIHRoZSBpbnN0YWxsIHJ1bGUgaW4gaW50bC9NYWtlZmlsZS5pbi4pCi0gICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCi0gICAgICAgICAgIHx8IHsgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKLSAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC1ydW50aW1lIFwKLSAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgotICAgICAgICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD15ZXMKLSAgICAgICAgZWxzZQotICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCi0gICAgICAgICAgTElCSU5UTD0KLSAgICAgICAgICBMVExJQklOVEw9Ci0gICAgICAgICAgSU5DSU5UTD0KLSAgICAgICAgZmkKLQotICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKLSAgICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgIT0gInllcyI7IHRoZW4KLSAgICAgICAgICBkbmwgR05VIGdldHRleHQgaXMgbm90IGZvdW5kIGluIHRoZSBDIGxpYnJhcnkuCi0gICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgotICAgICAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9eWVzCi0gICAgICAgIGZpCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgotICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgotICAgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcwotICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTD15ZXMKLSAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WICRMSUJUSFJFQUQiCi0gICAgICAgIExUTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExUTElCSUNPTlYgJExUTElCVEhSRUFEIgotICAgICAgICBMSUJTPWBlY2hvICIgJExJQlMgIiB8IHNlZCAtZSAncy8gLWxpbnRsIC8gLycgLWUgJ3MvXiAvLycgLWUgJ3MvICQvLydgCi0gICAgICBmaQotCi0gICAgICBDQVRPQkpFWFQ9Ci0gICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKLSAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdG8gdXNlIEdOVSBnZXR0ZXh0IHRvb2xzLgotICAgICAgICBDQVRPQkpFWFQ9LmdtbwotICAgICAgZmkKLSAgICBdKQotCi0gICAgaWYgdGVzdCAtbiAiJElOVExfTUFDT1NYX0xJQlMiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKLSAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIGRubCBTb21lIGV4dHJhIGZsYWdzIGFyZSBuZWVkZWQgZHVyaW5nIGxpbmtpbmcuCi0gICAgICAgIExJQklOVEw9IiRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgotICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCi0gICAgICBmaQotICAgIGZpCi0KLSAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKLSAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgotICAgICAgQUNfREVGSU5FKEVOQUJMRV9OTFMsIDEsCi0gICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1c2VyJ3MgbmF0aXZlIGxhbmd1YWdlCi0gICBpcyByZXF1ZXN0ZWQuXSkKLSAgICBlbHNlCi0gICAgICBVU0VfTkxTPW5vCi0gICAgZmkKLSAgZmkKLQotICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIE5MU10pCi0gIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKLSAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb21dKQotICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgotICAgICAgICBndF9zb3VyY2U9ImV4dGVybmFsIGxpYmludGwiCi0gICAgICBlbHNlCi0gICAgICAgIGd0X3NvdXJjZT0ibGliYyIKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgZ3Rfc291cmNlPSJpbmNsdWRlZCBpbnRsIGRpcmVjdG9yeSIKLSAgICBmaQotICAgIEFDX01TR19SRVNVTFQoWyRndF9zb3VyY2VdKQotICBmaQotCi0gIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCi0KLSAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KLSAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYmludGxdKQotICAgICAgICBBQ19NU0dfUkVTVUxUKFskTElCSU5UTF0pCi0gICAgICAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lOVExdKQotICAgICAgZmkKLQotICAgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIHBhY2thZ2VzIG1heSBiZSB1c2luZyB0aGlzLgotICAgICAgQUNfREVGSU5FKEhBVkVfR0VUVEVYVCwgMSwKLSAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKLSAgICAgIEFDX0RFRklORShIQVZFX0RDR0VUVEVYVCwgMSwKLSAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQotICAgIGZpCi0KLSAgICBkbmwgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBwby8gZGlyZWN0b3J5LgotICAgIFBPU1VCPXBvCi0gIGZpCi0KLSAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWwotICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAotICAgIGRubCB0byAneWVzJyBiZWNhdXNlIHNvbWUgb2YgdGhlIHRlc3RzdWl0ZSByZXF1aXJlcyBpdC4KLSAgICBpZiB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXJ1bnRpbWUgfHwgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC10b29sczsgdGhlbgotICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKLSAgICBmaQotCi0gICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCi0gICAgQUNfU1VCU1QoQlVJTERfSU5DTFVERURfTElCSU5UTCkKLSAgICBBQ19TVUJTVChVU0VfSU5DTFVERURfTElCSU5UTCkKLSAgICBBQ19TVUJTVChDQVRPQkpFWFQpCi0KLSAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgY29uZmlndXJlLmlucyBtYXkgYmUgdXNpbmcgdGhpcy4KLSAgICBubHNfY3ZfaGVhZGVyX2ludGw9Ci0gICAgbmxzX2N2X2hlYWRlcl9saWJndD0KLQotICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCi0gICAgREFUQURJUk5BTUU9c2hhcmUKLSAgICBBQ19TVUJTVChEQVRBRElSTkFNRSkKLQotICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCi0gICAgSU5TVE9CSkVYVD0ubW8KLSAgICBBQ19TVUJTVChJTlNUT0JKRVhUKQotCi0gICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KLSAgICBHRU5DQVQ9Z2VuY2F0Ci0gICAgQUNfU1VCU1QoR0VOQ0FUKQotCi0gICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KLSAgICBJTlRMT0JKUz0KLSAgICBpZiB0ZXN0ICIkVVNFX0lOQ0xVREVEX0xJQklOVEwiID0geWVzOyB0aGVuCi0gICAgICBJTlRMT0JKUz0iXCQoR0VUVE9CSlMpIgotICAgIGZpCi0gICAgQUNfU1VCU1QoSU5UTE9CSlMpCi0KLSAgICBkbmwgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBpZiB0aGUgc3Vycm91bmRpbmcgcGFja2FnZSB3aXNoZXMgaXQuCi0gICAgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVg9Z3RfbGlidG9vbF9zdWZmaXhfcHJlZml4Ci0gICAgQUNfU1VCU1QoSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVgpCi0gIF0pCi0KLSAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KLSAgSU5UTExJQlM9IiRMSUJJTlRMIgotICBBQ19TVUJTVChJTlRMTElCUykKLQotICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCi0gIEFDX1NVQlNUKExJQklOVEwpCi0gIEFDX1NVQlNUKExUTElCSU5UTCkKLSAgQUNfU1VCU1QoUE9TVUIpCi1dKQotCi0KLWRubCBndF9ORUVEU19JTklUIGVuc3VyZXMgdGhhdCB0aGUgZ3RfbmVlZHMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuCi1tNF9kZWZpbmUoW2d0X05FRURTX0lOSVRdLAotWwotICBtNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbZ3RfbmVlZHM9XSkKLSAgbTRfZGVmaW5lKFtndF9ORUVEU19JTklUXSwgW10pCi1dKQotCi0KLWRubCBVc2FnZTogQU1fR05VX0dFVFRFWFRfTkVFRChbTkVFRFNZTUJPTF0pCi1BQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfTkVFRF0sCi1bCi0gIG00X2RpdmVydF90ZXh0KFtJTklUX1BSRVBBUkVdLCBbZ3RfbmVlZHM9IiRndF9uZWVkcyAkMSJdKQotXSkKLQotCi1kbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCi1BQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfVkVSU0lPTl0sIFtdKQpkaWZmIC0tZ2l0IGEvbTQvZ2xpYmMyLm00IGIvbTQvZ2xpYmMyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGY1YmZlLi4wMDAwMDAwCi0tLSBhL200L2dsaWJjMi5tNAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgZ2xpYmMyLm00IHNlcmlhbCAxCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjAgb3IgbmV3ZXIuCi0jIEZyb20gQnJ1bm8gSGFpYmxlLgotCi1BQ19ERUZVTihbZ3RfR0xJQkMyXSwKLSAgWwotICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIgb3IgbmV3ZXIsCi0gICAgICBhY19jdl9nbnVfbGlicmFyeV8yLAotICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAotCVsKLSNpbmNsdWRlIDxmZWF0dXJlcy5oPgotI2lmZGVmIF9fR05VX0xJQlJBUllfXwotICNpZiAoX19HTElCQ19fID49IDIpCi0gIEx1Y2t5IEdOVSB1c2VyCi0gI2VuZGlmCi0jZW5kaWYKLQldLAotCWFjX2N2X2dudV9saWJyYXJ5XzI9eWVzLAotCWFjX2N2X2dudV9saWJyYXJ5XzI9bm8pCi0gICAgICBdCi0gICAgKQotICAgIEFDX1NVQlNUKEdMSUJDMikKLSAgICBHTElCQzI9IiRhY19jdl9nbnVfbGlicmFyeV8yIgotICBdCi0pCmRpZmYgLS1naXQgYS9tNC9nbGliYzIxLm00IGIvbTQvZ2xpYmMyMS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk1ZmQ5OC4uMDAwMDAwMAotLS0gYS9tNC9nbGliYzIxLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyBnbGliYzIxLm00IHNlcmlhbCAzCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCi0jIEZyb20gQnJ1bm8gSGFpYmxlLgotCi1BQ19ERUZVTihbZ2xfR0xJQkMyMV0sCi0gIFsKLSAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyLjEgb3IgbmV3ZXIsCi0gICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCi0gICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCi0JWwotI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0jaWZkZWYgX19HTlVfTElCUkFSWV9fCi0gI2lmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfXyA+IDIpCi0gIEx1Y2t5IEdOVSB1c2VyCi0gI2VuZGlmCi0jZW5kaWYKLQldLAotCWFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMsCi0JYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vKQotICAgICAgXQotICAgICkKLSAgICBBQ19TVUJTVChHTElCQzIxKQotICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCi0gIF0KLSkKZGlmZiAtLWdpdCBhL200L2ljb252Lm00IGIvbTQvaWNvbnYubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YmM3NmYuLjAwMDAwMDAKLS0tIGEvbTQvaWNvbnYubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotIyBpY29udi5tNCBzZXJpYWwgQU02IChnZXR0ZXh0LTAuMTcpCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgotCi1BQ19ERUZVTihbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldLAotWwotICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCi0KLSAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKLSAgZG5sIGFjY29yZGluZ2x5LgotICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ljb252XSkKLV0pCi0KLUFDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKLVsKLSAgZG5sIFNvbWUgc3lzdGVtcyBoYXZlIGljb252IGluIGxpYmMsIHNvbWUgaGF2ZSBpdCBpbiBsaWJpY29udiAoT1NGLzEgYW5kCi0gIGRubCB0aG9zZSB3aXRoIHRoZSBzdGFuZGFsb25lIHBvcnRhYmxlIEdOVSBsaWJpY29udiBpbnN0YWxsZWQpLgotICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKLQotICBkbmwgU2VhcmNoIGZvciBsaWJpY29udiBhbmQgZGVmaW5lIExJQklDT05WLCBMVExJQklDT05WIGFuZCBJTkNJQ09OVgotICBkbmwgYWNjb3JkaW5nbHkuCi0gIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKLQotICBkbmwgQWRkICRJTkNJQ09OViB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKLSAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJpY29udiBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKLSAgZG5sIHZpYSAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4LCBoZSB3YW50cyB0byB1c2UgaXQuIFRoZSBmaXJzdAotICBkbmwgQUNfVFJZX0xJTksgd2lsbCB0aGVuIGZhaWwsIHRoZSBzZWNvbmQgQUNfVFJZX0xJTksgd2lsbCBzdWNjZWVkLgotICBhbV9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lDT05WXSkKLQotICBBQ19DQUNIRV9DSEVDSyhbZm9yIGljb252XSwgYW1fY3ZfZnVuY19pY29udiwgWwotICAgIGFtX2N2X2Z1bmNfaWNvbnY9Im5vLCBjb25zaWRlciBpbnN0YWxsaW5nIEdOVSBsaWJpY29udiIKLSAgICBhbV9jdl9saWJfaWNvbnY9bm8KLSAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGljb252Lmg+XSwKLSAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7Ci0gICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Ci0gICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCi0gICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKLSAgICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgIT0geWVzOyB0aGVuCi0gICAgICBhbV9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgotICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxpY29udi5oPl0sCi0gICAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7Ci0gICAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgIGljb252X2Nsb3NlKGNkKTtdLAotICAgICAgICBhbV9jdl9saWJfaWNvbnY9eWVzCi0gICAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzKQotICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKLSAgICBmaQotICBdKQotICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KLSAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgaWNvbnZdLCBhbV9jdl9mdW5jX2ljb252X3dvcmtzLCBbCi0gICAgICBkbmwgVGhpcyB0ZXN0cyBhZ2FpbnN0IGJ1Z3MgaW4gQUlYIDUuMSBhbmQgSFAtVVggMTEuMTEuCi0gICAgICBhbV9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgaWYgdGVzdCAkYW1fY3ZfbGliX2ljb252ID0geWVzOyB0aGVuCi0gICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKLSAgICAgIGZpCi0gICAgICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxpY29udi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotaW50IG1haW4gKCkKLXsKLSAgLyogVGVzdCBhZ2FpbnN0IEFJWCA1LjEgYnVnOiBGYWlsdXJlcyBhcmUgbm90IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIHN1Y2Nlc3NmdWwKLSAgICAgcmV0dXJucy4gICovCi0gIHsKLSAgICBpY29udl90IGNkX3V0ZjhfdG9fODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIlVURi04Iik7Ci0gICAgaWYgKGNkX3V0ZjhfdG9fODg1OTEgIT0gKGljb252X3QpKC0xKSkKLSAgICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzQyXDIwMlwyNTQiOyAvKiBFVVJPIFNJR04gKi8KLSAgICAgICAgY2hhciBidWZbMTBdOwotICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OwotICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKLSAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOwotICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOwotICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkX3V0ZjhfdG9fODg1OTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOwotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICB9Ci0gIH0KLSNpZiAwIC8qIFRoaXMgYnVnIGNvdWxkIGJlIHdvcmtlZCBhcm91bmQgYnkgdGhlIGNhbGxlci4gICovCi0gIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IFBvc2l0aXZlIHJldHVybiB2YWx1ZSBpbnN0ZWFkIG9mIDAuICAqLwotICB7Ci0gICAgaWNvbnZfdCBjZF84ODU5MV90b191dGY4ID0gaWNvbnZfb3BlbiAoInV0ZjgiLCAiaXNvODg1OTEiKTsKLSAgICBpZiAoY2RfODg1OTFfdG9fdXRmOCAhPSAoaWNvbnZfdCkoLTEpKQotICAgICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzMDRyZ2VyIG1pdCBiXDM2NnNlbiBCXDM3NGJjaGVuIG9obmUgQXVnZW5tYVwzMzciOwotICAgICAgICBjaGFyIGJ1Zls1MF07Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7Ci0gICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOwotICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7Ci0gICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7Ci0gICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfODg1OTFfdG9fdXRmOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7Ci0gICAgICAgIGlmICgoaW50KXJlcyA+IDApCi0gICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICB9Ci0gIH0KLSNlbmRpZgotICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKLSAgICAgcHJvdmlkZWQuICAqLwotICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCi0gICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0xKQotICAgICAgLyogVHJ5IElSSVgsIE9TRi8xIG5hbWVzLiAgKi8KLSAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkKLSAgICAgIC8qIFRyeSBBSVggbmFtZXMuICAqLwotICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgIklCTS1ldWNKUCIpID09IChpY29udl90KSgtMSkKLSAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovCi0gICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCi0gICAgcmV0dXJuIDE7Ci0gIHJldHVybiAwOwotfV0sIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPW5vXSwKLSAgICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbgotICAgICAgICAgICBhaXgqIHwgaHB1eCopIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OwotICAgICAgICAgICAqKSAgICAgICAgICAgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKLSAgICAgICAgIGVzYWNdKQotICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKLSAgICBdKQotICAgIGNhc2UgIiRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiBpbgotICAgICAgKm5vKSBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubyA7OwotICAgICAgKikgICBhbV9mdW5jX2ljb252PXllcyA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vCi0gIGZpCi0gIGlmIHRlc3QgIiRhbV9mdW5jX2ljb252IiA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX0lDT05WLCAxLAotICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbiBhbmQgaXQgd29ya3MuXSkKLSAgZmkKLSAgaWYgdGVzdCAiJGFtX2N2X2xpYl9pY29udiIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliaWNvbnZdKQotICAgIEFDX01TR19SRVNVTFQoWyRMSUJJQ09OVl0pCi0gIGVsc2UKLSAgICBkbmwgSWYgJExJQklDT05WIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQgJElOQ0lDT05WCi0gICAgZG5sIGVpdGhlci4KLSAgICBDUFBGTEFHUz0iJGFtX3NhdmVfQ1BQRkxBR1MiCi0gICAgTElCSUNPTlY9Ci0gICAgTFRMSUJJQ09OVj0KLSAgZmkKLSAgQUNfU1VCU1QoTElCSUNPTlYpCi0gIEFDX1NVQlNUKExUTElCSUNPTlYpCi1dKQotCi1BQ19ERUZVTihbQU1fSUNPTlZdLAotWwotICBBTV9JQ09OVl9MSU5LCi0gIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGljb252IGRlY2xhcmF0aW9uXSkKLSAgICBBQ19DQUNIRV9WQUwoYW1fY3ZfcHJvdG9faWNvbnYsIFsKLSAgICAgIEFDX1RSWV9DT01QSUxFKFsKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxpY29udi5oPgotZXh0ZXJuCi0jaWZkZWYgX19jcGx1c3BsdXMKLSJDIgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKLXNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsKLSNlbHNlCi1zaXplX3QgaWNvbnYoKTsKLSNlbmRpZgotXSwgW10sIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9IiIsIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9ImNvbnN0IikKLSAgICAgIGFtX2N2X3Byb3RvX2ljb252PSJleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IGNkLCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOyJdKQotICAgIGFtX2N2X3Byb3RvX2ljb252PWBlY2hvICJbJF1hbV9jdl9wcm90b19pY29udiIgfCB0ciAtcyAnICcgfCBzZWQgLWUgJ3MvKCAvKC8nYAotICAgIEFDX01TR19SRVNVTFQoWyRde2FjX3Q6LQotICAgICAgICAgfVskXWFtX2N2X3Byb3RvX2ljb252KQotICAgIEFDX0RFRklORV9VTlFVT1RFRChJQ09OVl9DT05TVCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEsCi0gICAgICBbRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0Ll0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvaW50ZGl2MC5tNCBiL200L2ludGRpdjAubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOGE2NzAuLjAwMDAwMDAKLS0tIGEvbTQvaW50ZGl2MC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLSMgaW50ZGl2MC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjE3KQotZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBCcnVubyBIYWlibGUuCi0KLUFDX0RFRlVOKFtndF9JTlRESVYwXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLQotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFNJR0ZQRV0sCi0gICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUsCi0gICAgWwotICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Ci1jaGFuZ2VxdW90ZSgsKWRubAotICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgICAgIG1hY29zKiB8IGRhcndpbls2LTldKiB8IGRhcndpblsxLTldWzAtOV0qKQotICAgICAgICAgICMgT24gTWFjT1MgWCAxMC4yIG9yIG5ld2VyLCBqdXN0IGFzc3VtZSB0aGUgc2FtZSBhcyB3aGVuIGNyb3NzLQotICAgICAgICAgICMgY29tcGlsaW5nLiBJZiB3ZSB3ZXJlIHRvIHBlcmZvcm0gdGhlIHJlYWwgdGVzdCwgMSBDcmFzaCBSZXBvcnQKLSAgICAgICAgICAjIGRpYWxvZyB3aW5kb3cgd291bGQgcG9wIHVwLgotICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KLSAgICAgICAgICAgIGlbMzQ1NjddODYgfCB4ODZfNjQpCi0gICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiIDs7Ci0gICAgICAgICAgZXNhYwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi1jaGFuZ2VxdW90ZShbLF0pZG5sCi0gICAgICBpZiB0ZXN0IC16ICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiOyB0aGVuCi0gICAgICAgIEFDX1RSWV9SVU4oWwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi1zdGF0aWMgdm9pZAotc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCi17Ci0gIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KLSAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7Ci19Ci0KLWludCB4ID0gMTsKLWludCB5ID0gMDsKLWludCB6OwotaW50IG5hbjsKLQotaW50IG1haW4gKCkKLXsKLSAgc2lnbmFsIChTSUdGUEUsIHNpZ2ZwZV9oYW5kbGVyKTsKLS8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KLSNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQotICBzaWduYWwgKFNJR1RSQVAsIHNpZ2ZwZV9oYW5kbGVyKTsKLSNlbmRpZgotLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLwotI2lmIGRlZmluZWQgKF9fc3BhcmNfXykgJiYgZGVmaW5lZCAoX19saW51eF9fKQotICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOwotI2VuZGlmCi0KLSAgeiA9IHggLyB5OwotICBuYW4gPSB5IC8geTsKLSAgZXhpdCAoMSk7Ci19Ci1dLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAotICAgICAgICAgIFsKLSAgICAgICAgICAgICMgR3Vlc3MgYmFzZWQgb24gdGhlIENQVS4KLWNoYW5nZXF1b3RlKCwpZG5sCi0gICAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCi0gICAgICAgICAgICAgIGFscGhhKiB8IGlbMzQ1NjddODYgfCB4ODZfNjQgfCBtNjhrIHwgczM5MCopCi0gICAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OwotICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyBubyI7OwotICAgICAgICAgICAgZXNhYwotY2hhbmdlcXVvdGUoWyxdKWRubAotICAgICAgICAgIF0pCi0gICAgICBmaQotICAgIF0pCi0gIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KLSAgICAqeWVzKSB2YWx1ZT0xOzsKLSAgICAqKSB2YWx1ZT0wOzsKLSAgZXNhYwotICBBQ19ERUZJTkVfVU5RVU9URUQoSU5URElWMF9SQUlTRVNfU0lHRlBFLCAkdmFsdWUsCi0gICAgW0RlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuXSkKLV0pCmRpZmYgLS1naXQgYS9tNC9pbnRsLm00IGIvbTQvaW50bC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0NDA4Yi4uMDAwMDAwMAotLS0gYS9tNC9pbnRsLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLSMgaW50bC5tNCBzZXJpYWwgOCAoZ2V0dGV4dC0wLjE3KQotZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi1kbmwKLWRubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCi1kbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKLWRubCBmdW5jdGlvbmFsaXR5LgotZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKLWRubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKLWRubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLWRubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KLQotZG5sIEF1dGhvcnM6Ci1kbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgotZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDYuCi0KLUFDX1BSRVJFUSgyLjUyKQotCi1kbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgaW50bCBzdWJkaXJlY3RvcnksCi1kbmwgZXhjZXB0IGZvciBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCAoYW5kIHBvc3NpYmx5IExJQlRPT0wpLCBJTlRMT0JKUywKLWRubCAgICAgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMLCBCVUlMRF9JTkNMVURFRF9MSUJJTlRMLgotQUNfREVGVU4oW0FNX0lOVExfU1VCRElSXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKLSAgQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQotICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLSAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotICBBQ19SRVFVSVJFKFtndF9HTElCQzJdKWRubAotICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pZG5sCi0gIEFDX1JFUVVJUkUoW2dsX1ZJU0lCSUxJVFldKWRubAotICBBQ19SRVFVSVJFKFtndF9JTlRMX1NVQkRJUl9DT1JFXSlkbmwKLSAgQUNfUkVRVUlSRShbQUNfVFlQRV9MT05HX0xPTkdfSU5UXSlkbmwKLSAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XQ0hBUl9UXSlkbmwKLSAgQUNfUkVRVUlSRShbZ3RfVFlQRV9XSU5UX1RdKWRubAotICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCi0gIEFDX1JFUVVJUkUoW2d0X1RZUEVfSU5UTUFYX1RdKQotICBBQ19SRVFVSVJFKFtndF9QUklOVEZfUE9TSVhdKQotICBBQ19SRVFVSVJFKFtnbF9HTElCQzIxXSlkbmwKLSAgQUNfUkVRVUlSRShbZ2xfWFNJWkVdKWRubAotICBBQ19SRVFVSVJFKFtndF9JTlRMX01BQ09TWF0pZG5sCi0KLSAgQUNfQ0hFQ0tfVFlQRShbcHRyZGlmZl90XSwgLAotICAgIFtBQ19ERUZJTkUoW3B0cmRpZmZfdF0sIFtsb25nXSwKLSAgICAgICBbRGVmaW5lIGFzIHRoZSB0eXBlIG9mIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdHdvIHBvaW50ZXJzLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCi0gICAgXSkKLSAgQUNfQ0hFQ0tfSEVBREVSUyhbc3RkZGVmLmggc3RkbGliLmggc3RyaW5nLmhdKQotICBBQ19DSEVDS19GVU5DUyhbYXNwcmludGYgZndwcmludGYgcHV0ZW52IHNldGVudiBzZXRsb2NhbGUgc25wcmludGYgd2NzbGVuXSkKLQotICBkbmwgVXNlIHRoZSBfc25wcmludGYgZnVuY3Rpb24gb25seSBpZiBpdCBpcyBkZWNsYXJlZCAoYmVjYXVzZSBvbiBOZXRCU0QgaXQKLSAgZG5sIGlzIGRlZmluZWQgYXMgYSB3ZWFrIGFsaWFzIG9mIHNucHJpbnRmOyB3ZSBwcmVmZXIgdG8gdXNlIHRoZSBsYXR0ZXIpLgotICBndF9DSEVDS19ERUNMKF9zbnByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCi0gIGd0X0NIRUNLX0RFQ0woX3Nud3ByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCi0KLSAgZG5sIFVzZSB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgb25seSBpZiB0aGV5IGFyZSBkZWNsYXJlZC4KLSAgZG5sIChiZWNhdXNlIHNvbWUgb2YgdGhlbSB3ZXJlIGRlZmluZWQgd2l0aG91dCBiZWluZyBkZWNsYXJlZCBpbiBTb2xhcmlzCi0gIGRubCAyLjUuMSBidXQgd2VyZSByZW1vdmVkIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQKLSAgZG5sIG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuIG9uIFNvbGFyaXMgMi42KS4KLSAgZG5sIERvbid0IHVzZSBBQ19DSEVDS19ERUNMUyBiZWNhdXNlIGl0IGlzbid0IHN1cHBvcnRlZCBpbiBhdXRvY29uZi0yLjEzLgotICBndF9DSEVDS19ERUNMKGdldGNfdW5sb2NrZWQsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQotCi0gIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCi0gICAgKnllcykgSEFWRV9QT1NJWF9QUklOVEY9MSA7OwotICAgICopIEhBVkVfUE9TSVhfUFJJTlRGPTAgOzsKLSAgZXNhYwotICBBQ19TVUJTVChbSEFWRV9QT1NJWF9QUklOVEZdKQotICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19hc3ByaW50ZiIgPSB5ZXM7IHRoZW4KLSAgICBIQVZFX0FTUFJJTlRGPTEKLSAgZWxzZQotICAgIEhBVkVfQVNQUklOVEY9MAotICBmaQotICBBQ19TVUJTVChbSEFWRV9BU1BSSU5URl0pCi0gIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHllczsgdGhlbgotICAgIEhBVkVfU05QUklOVEY9MQotICBlbHNlCi0gICAgSEFWRV9TTlBSSU5URj0wCi0gIGZpCi0gIEFDX1NVQlNUKFtIQVZFX1NOUFJJTlRGXSkKLSAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KLSAgICBIQVZFX1dQUklOVEY9MQotICBlbHNlCi0gICAgSEFWRV9XUFJJTlRGPTAKLSAgZmkKLSAgQUNfU1VCU1QoW0hBVkVfV1BSSU5URl0pCi0KLSAgQU1fTEFOR0lORk9fQ09ERVNFVAotICBndF9MQ19NRVNTQUdFUwotCi0gIGRubCBDb21waWxhdGlvbiBvbiBtaW5ndyBhbmQgQ3lnd2luIG5lZWRzIHNwZWNpYWwgTWFrZWZpbGUgcnVsZXMsIGJlY2F1c2UKLSAgZG5sIDEuIHdoZW4gd2UgaW5zdGFsbCBhIHNoYXJlZCBsaWJyYXJ5LCB3ZSBtdXN0IGFycmFuZ2UgdG8gZXhwb3J0Ci0gIGRubCAgICBhdXhpbGlhcnkgcG9pbnRlciB2YXJpYWJsZXMgZm9yIGV2ZXJ5IGV4cG9ydGVkIHZhcmlhYmxlLAotICBkbmwgMi4gd2hlbiB3ZSBpbnN0YWxsIGEgc2hhcmVkIGxpYnJhcnkgYW5kIGEgc3RhdGljIGxpYnJhcnkgc2ltdWx0YW5lb3VzbHksCi0gIGRubCAgICB0aGUgaW5jbHVkZSBmaWxlIHNwZWNpZmllcyBfX2RlY2xzcGVjKGRsbGltcG9ydCkgYW5kIHRoZXJlZm9yZSB3ZQotICBkbmwgICAgbXVzdCBhcnJhbmdlIHRvIGRlZmluZSB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdmFyaWFibGVzIGZvciB0aGUKLSAgZG5sICAgIGV4cG9ydGVkIHZhcmlhYmxlcyBfYWxzb18gaW4gdGhlIHN0YXRpYyBsaWJyYXJ5LgotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICAgIG1pbmd3KiB8IGN5Z3dpbiopIGlzX3dvZTMyZGxsPXllcyA7OwotICAgICAgKikgaXNfd29lMzJkbGw9bm8gOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBpc193b2UzMmRsbD1ubwotICBmaQotICBXT0UzMkRMTD0kaXNfd29lMzJkbGwKLSAgQUNfU1VCU1QoW1dPRTMyRExMXSkKLQotICBkbmwgT24gbWluZ3cgYW5kIEN5Z3dpbiwgd2UgY2FuIGFjdGl2YXRlIHNwZWNpYWwgTWFrZWZpbGUgcnVsZXMgd2hpY2ggYWRkCi0gIGRubCB2ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSBzaGFyZWQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcy4KLSAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgbWluZ3cqIHwgY3lnd2luKikgaXNfd29lMzI9eWVzIDs7Ci0gICAgKikgaXNfd29lMzI9bm8gOzsKLSAgZXNhYwotICBXT0UzMj0kaXNfd29lMzIKLSAgQUNfU1VCU1QoW1dPRTMyXSkKLSAgaWYgdGVzdCAkV09FMzIgPSB5ZXM7IHRoZW4KLSAgICBkbmwgQ2hlY2sgZm9yIGEgcHJvZ3JhbSB0aGF0IGNvbXBpbGVzIFdpbmRvd3MgcmVzb3VyY2UgZmlsZXMuCi0gICAgQUNfQ0hFQ0tfVE9PTChbV0lORFJFU10sIFt3aW5kcmVzXSkKLSAgZmkKLQotICBkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgd2hlbiBjcmVhdGluZyBhIGxpYnJhcnksICItbGMiIHNob3VsZCBiZSBwYXNzZWQgdG8KLSAgZG5sIGxpYnRvb2wgb3Igbm90LiBPbiBtYW55IHBsYXRmb3JtcywgaXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBsaWJ0b29sIG9wdGlvbgotICBkbmwgLW5vLXVuZGVmaW5lZCB0byB3b3JrLiBPbiBIUC1VWCwgaG93ZXZlciwgdGhlIC1sYyAtIHN0b3JlZCBieSBsaWJ0b29sCi0gIGRubCBpbiB0aGUgKi5sYSBmaWxlcyAtIG1ha2VzIGl0IGltcG9zc2libGUgdG8gY3JlYXRlIG11bHRpdGhyZWFkZWQgcHJvZ3JhbXMsCi0gIGRubCBiZWNhdXNlIGxpYnRvb2wgYWxzbyByZW9yZGVycyB0aGUgLWxjIHRvIGNvbWUgYmVmb3JlIHRoZSAtcHRocmVhZCwgYW5kCi0gIGRubCB0aGlzIGRpc2FibGVzIHB0aHJlYWRfY3JlYXRlKCkgPGh0dHA6Ly9kb2NzLmhwLmNvbS9lbi8xODk2L3B0aHJlYWRzLmh0bWw+LgotICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICBocHV4KikgTFRMSUJDPSIiIDs7Ci0gICAgKikgICAgIExUTElCQz0iLWxjIiA7OwotICBlc2FjCi0gIEFDX1NVQlNUKFtMVExJQkNdKQotCi0gIGRubCBSZW5hbWUgc29tZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB1c2VkIGZvciBsb2NraW5nLgotICBBSF9CT1RUT00oWwotI2RlZmluZSBfX2xpYmNfbG9ja190ICAgICAgICAgICAgICAgICAgIGdsX2xvY2tfdAotI2RlZmluZSBfX2xpYmNfbG9ja19kZWZpbmUgICAgICAgICAgICAgIGdsX2xvY2tfZGVmaW5lCi0jZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAgZ2xfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKLSNkZWZpbmUgX19saWJjX2xvY2tfaW5pdCAgICAgICAgICAgICAgICBnbF9sb2NrX2luaXQKLSNkZWZpbmUgX19saWJjX2xvY2tfbG9jayAgICAgICAgICAgICAgICBnbF9sb2NrX2xvY2sKLSNkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrICAgICAgICAgICAgICBnbF9sb2NrX3VubG9jawotI2RlZmluZSBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAgICAgICAgICAgICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja190Ci0jZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9yZWN1cnNpdmUgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX2RlZmluZQotI2RlZmluZSBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWRfcmVjdXJzaXZlICBnbF9yZWN1cnNpdmVfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQKLSNkZWZpbmUgX19saWJjX2xvY2tfaW5pdF9yZWN1cnNpdmUgICAgICAgICAgICAgICAgZ2xfcmVjdXJzaXZlX2xvY2tfaW5pdAotI2RlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZSAgICAgICAgICAgICAgICBnbF9yZWN1cnNpdmVfbG9ja19sb2NrCi0jZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUgICAgICAgICAgICAgIGdsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jawotI2RlZmluZSBnbHRocmVhZF9pbl91c2UgIGxpYmludGxfdGhyZWFkX2luX3VzZQotI2RlZmluZSBnbHRocmVhZF9sb2NrX2luaXQgICAgIGxpYmludGxfbG9ja19pbml0Ci0jZGVmaW5lIGdsdGhyZWFkX2xvY2tfbG9jayAgICAgbGliaW50bF9sb2NrX2xvY2sKLSNkZWZpbmUgZ2x0aHJlYWRfbG9ja191bmxvY2sgICBsaWJpbnRsX2xvY2tfdW5sb2NrCi0jZGVmaW5lIGdsdGhyZWFkX2xvY2tfZGVzdHJveSAgbGliaW50bF9sb2NrX2Rlc3Ryb3kKLSNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2luaXQgICAgIGxpYmludGxfcndsb2NrX2luaXQKLSNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX3JkbG9jayAgIGxpYmludGxfcndsb2NrX3JkbG9jawotI2RlZmluZSBnbHRocmVhZF9yd2xvY2tfd3Jsb2NrICAgbGliaW50bF9yd2xvY2tfd3Jsb2NrCi0jZGVmaW5lIGdsdGhyZWFkX3J3bG9ja191bmxvY2sgICBsaWJpbnRsX3J3bG9ja191bmxvY2sKLSNkZWZpbmUgZ2x0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgIGxpYmludGxfcndsb2NrX2Rlc3Ryb3kKLSNkZWZpbmUgZ2x0aHJlYWRfcmVjdXJzaXZlX2xvY2tfaW5pdCAgICAgbGliaW50bF9yZWN1cnNpdmVfbG9ja19pbml0Ci0jZGVmaW5lIGdsdGhyZWFkX3JlY3Vyc2l2ZV9sb2NrX2xvY2sgICAgIGxpYmludGxfcmVjdXJzaXZlX2xvY2tfbG9jawotI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja191bmxvY2sgICBsaWJpbnRsX3JlY3Vyc2l2ZV9sb2NrX3VubG9jawotI2RlZmluZSBnbHRocmVhZF9yZWN1cnNpdmVfbG9ja19kZXN0cm95ICBsaWJpbnRsX3JlY3Vyc2l2ZV9sb2NrX2Rlc3Ryb3kKLSNkZWZpbmUgZ2x0aHJlYWRfb25jZSAgICAgICAgICAgICAgICAgbGliaW50bF9vbmNlCi0jZGVmaW5lIGdsdGhyZWFkX29uY2VfY2FsbCAgICAgICAgICAgIGxpYmludGxfb25jZV9jYWxsCi0jZGVmaW5lIGdsdGhyZWFkX29uY2Vfc2luZ2xldGhyZWFkZWQgIGxpYmludGxfb25jZV9zaW5nbGV0aHJlYWRlZAotXSkKLV0pCi0KLQotZG5sIENoZWNrcyBmb3IgdGhlIGNvcmUgZmlsZXMgb2YgdGhlIGludGwgc3ViZGlyZWN0b3J5OgotZG5sICAgZGNpZ2V0dGV4dC5jCi1kbmwgICBldmFsLXBsdXJhbC5oCi1kbmwgICBleHBsb2RlbmFtZS5jCi1kbmwgICBmaW5kZG9tYWluLmMKLWRubCAgIGdldHRleHRQLmgKLWRubCAgIGdtby5oCi1kbmwgICBoYXNoLXN0cmluZy5oIGhhc2gtc3RyaW5nLmMKLWRubCAgIGwxMG5mbGlzdC5jCi1kbmwgICBsaWJnbnVpbnRsLmguaW4gKGV4Y2VwdCB0aGUgKnByaW50ZiBzdHVmZikKLWRubCAgIGxvYWRpbmZvLmgKLWRubCAgIGxvYWRtc2djYXQuYwotZG5sICAgbG9jYWxlYWxpYXMuYwotZG5sICAgbG9nLmMKLWRubCAgIHBsdXJhbC1leHAuaCBwbHVyYWwtZXhwLmMKLWRubCAgIHBsdXJhbC55Ci1kbmwgVXNlZCBieSBsaWJnbG9jYWxlLgotQUNfREVGVU4oW2d0X0lOVExfU1VCRElSX0NPUkVdLAotWwotICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pZG5sCi0gIEFDX1JFUVVJUkUoW0FDX1RZUEVfU0laRV9UXSlkbmwKLSAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX1NURElOVF9IXSkKLSAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKWRubAotICBBQ19SRVFVSVJFKFtBQ19GVU5DX01NQVBdKWRubAotICBBQ19SRVFVSVJFKFtndF9JTlRESVYwXSlkbmwKLSAgQUNfUkVRVUlSRShbZ2xfQUNfVFlQRV9VSU5UTUFYX1RdKWRubAotICBBQ19SRVFVSVJFKFtndF9JTlRUWVBFU19QUkldKWRubAotICBBQ19SRVFVSVJFKFtnbF9MT0NLXSlkbmwKLQotICBBQ19UUllfTElOSygKLSAgICBbaW50IGZvbyAoaW50IGEpIHsgYSA9IF9fYnVpbHRpbl9leHBlY3QgKGEsIDEwKTsgcmV0dXJuIGEgPT0gMTAgPyAwIDogMTsgfV0sCi0gICAgW10sCi0gICAgW0FDX0RFRklORShbSEFWRV9CVUlMVElOX0VYUEVDVF0sIDEsCi0gICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyBfX2J1aWx0aW5fZXhwZWN0Ll0pXSkKLQotICBBQ19DSEVDS19IRUFERVJTKFthcmd6LmggaW50dHlwZXMuaCBsaW1pdHMuaCB1bmlzdGQuaCBzeXMvcGFyYW0uaF0pCi0gIEFDX0NIRUNLX0ZVTkNTKFtnZXRjd2QgZ2V0ZWdpZCBnZXRldWlkIGdldGdpZCBnZXR1aWQgbWVtcGNweSBtdW5tYXAgXAotICAgIHN0cGNweSBzdHJjYXNlY21wIHN0cmR1cCBzdHJ0b3VsIHRzZWFyY2ggYXJnel9jb3VudCBhcmd6X3N0cmluZ2lmeSBcCi0gICAgYXJnel9uZXh0IF9fZnNldGxvY2tpbmddKQotCi0gIGRubCBVc2UgdGhlICpfdW5sb2NrZWQgZnVuY3Rpb25zIG9ubHkgaWYgdGhleSBhcmUgZGVjbGFyZWQuCi0gIGRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWZpbmVkIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgaW4gU29sYXJpcwotICBkbmwgMi41LjEgYnV0IHdlcmUgcmVtb3ZlZCBpbiBTb2xhcmlzIDIuNiwgd2hlcmVhcyB3ZSB3YW50IGJpbmFyaWVzIGJ1aWx0Ci0gIGRubCBvbiBTb2xhcmlzIDIuNS4xIHRvIHJ1biBvbiBTb2xhcmlzIDIuNikuCi0gIGRubCBEb24ndCB1c2UgQUNfQ0hFQ0tfREVDTFMgYmVjYXVzZSBpdCBpc24ndCBzdXBwb3J0ZWQgaW4gYXV0b2NvbmYtMi4xMy4KLSAgZ3RfQ0hFQ0tfREVDTChmZW9mX3VubG9ja2VkLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKLSAgZ3RfQ0hFQ0tfREVDTChmZ2V0c191bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCi0KLSAgQU1fSUNPTlYKLQotICBkbmwgZ2xpYmMgPj0gMi40IGhhcyBhIE5MX0xPQ0FMRV9OQU1FIG1hY3JvIHdoZW4gX0dOVV9TT1VSQ0UgaXMgZGVmaW5lZCwKLSAgZG5sIGFuZCBhIF9OTF9MT0NBTEVfTkFNRSBtYWNybyBhbHdheXMuCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTkxfTE9DQUxFX05BTUUgbWFjcm9dLCBndF9jdl9ubF9sb2NhbGVfbmFtZSwKLSAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsYW5naW5mby5oPgotI2luY2x1ZGUgPGxvY2FsZS5oPl0sCi0gICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhfTkxfTE9DQUxFX05BTUUoTENfTUVTU0FHRVMpKTsKLSAgICAgICByZXR1cm4gIWNzOwotICAgICAgXSwKLSAgICAgIGd0X2N2X25sX2xvY2FsZV9uYW1lPXllcywKLSAgICAgIGd0X2N2X25sX2xvY2FsZV9uYW1lPW5vKQotICAgIF0pCi0gIGlmIHRlc3QgJGd0X2N2X25sX2xvY2FsZV9uYW1lID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfTkxfTE9DQUxFX05BTUUsIDEsCi0gICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgaXQgZGVmaW5lcyB0aGUgTkxfTE9DQUxFX05BTUUgbWFjcm8gaWYgX0dOVV9TT1VSQ0UgaXMgZGVmaW5lZC5dKQotICBmaQotCi0gIGRubCBpbnRsL3BsdXJhbC5jIGlzIGdlbmVyYXRlZCBmcm9tIGludGwvcGx1cmFsLnkuIEl0IHJlcXVpcmVzIGJpc29uLAotICBkbmwgYmVjYXVzZSBwbHVyYWwueSB1c2VzIGJpc29uIHNwZWNpZmljIGZlYXR1cmVzLiBJdCByZXF1aXJlcyBhdCBsZWFzdAotICBkbmwgYmlzb24tMS4yNiBiZWNhdXNlIGVhcmxpZXIgdmVyc2lvbnMgZ2VuZXJhdGUgYSBwbHVyYWwuYyB0aGF0IGRvZXNuJ3QKLSAgZG5sIGNvbXBpbGUuCi0gIGRubCBiaXNvbiBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlIG1haW50YWluZXIgKHdobyB0b3VjaGVzIHBsdXJhbC55KS4gQnV0IGluCi0gIGRubCBvcmRlciB0byBhdm9pZCBzZXBhcmF0ZSBNYWtlZmlsZXMgb3IgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlLCB3ZSBwdXQKLSAgZG5sIHRoZSBydWxlIGluIGdlbmVyYWwgTWFrZWZpbGUuIE5vdywgc29tZSBwZW9wbGUgY2FyZWxlc3NseSB0b3VjaCB0aGUKLSAgZG5sIGZpbGVzIG9yIGhhdmUgYSBicm9rZW4gIm1ha2UiIHByb2dyYW0sIGhlbmNlIHRoZSBwbHVyYWwuYyBydWxlIHdpbGwKLSAgZG5sIHNvbWV0aW1lcyBmaXJlLiBUbyBhdm9pZCBhbiBlcnJvciwgZGVmaW5lcyBCSVNPTiB0byAiOiIgaWYgaXQgaXMgbm90Ci0gIGRubCBwcmVzZW50IG9yIHRvbyBvbGQuCi0gIEFDX0NIRUNLX1BST0dTKFtJTlRMQklTT05dLCBbYmlzb25dKQotICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgotICAgIGFjX3ZlcmNfZmFpbD15ZXMKLSAgZWxzZQotICAgIGRubCBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgotICAgIEFDX01TR19DSEVDS0lORyhbdmVyc2lvbiBvZiBiaXNvbl0pCi1jaGFuZ2VxdW90ZSg8PCw+PilkbmwKLSAgICBhY19wcm9nX3ZlcnNpb249YCRJTlRMQklTT04gLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIEJpc29uLiogXChbMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKLSAgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KLSAgICAgICcnKSBhY19wcm9nX3ZlcnNpb249InYuID8uPz8sIGJhZCI7IGFjX3ZlcmNfZmFpbD15ZXM7OwotICAgICAgMS4yWzYtOV0qIHwgMS5bMy05XVswLTldKiB8IFsyLTldLiopCi1jaGFuZ2VxdW90ZShbLF0pZG5sCi0gICAgICAgICBhY19wcm9nX3ZlcnNpb249IiRhY19wcm9nX3ZlcnNpb24sIG9rIjsgYWNfdmVyY19mYWlsPW5vOzsKLSAgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7Ci0gICAgZXNhYwotICAgIEFDX01TR19SRVNVTFQoWyRhY19wcm9nX3ZlcnNpb25dKQotICBmaQotICBpZiB0ZXN0ICRhY192ZXJjX2ZhaWwgPSB5ZXM7IHRoZW4KLSAgICBJTlRMQklTT049OgotICBmaQotXSkKLQotCi1kbmwgZ3RfQ0hFQ0tfREVDTChGVU5DLCBJTkNMVURFUykKLWRubCBDaGVjayB3aGV0aGVyIGEgZnVuY3Rpb24gaXMgZGVjbGFyZWQuCi1BQ19ERUZVTihbZ3RfQ0hFQ0tfREVDTF0sCi1bCi0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICQxIGlzIGRlY2xhcmVkXSwgYWNfY3ZfaGF2ZV9kZWNsXyQxLAotICAgIFtBQ19UUllfQ09NUElMRShbJDJdLCBbCi0jaWZuZGVmICQxCi0gIGNoYXIgKnAgPSAoY2hhciAqKSAkMTsKLSNlbmRpZgotXSwgYWNfY3ZfaGF2ZV9kZWNsXyQxPXllcywgYWNfY3ZfaGF2ZV9kZWNsXyQxPW5vKV0pCi0gIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF8kMSA9IHllczsgdGhlbgotICAgIGd0X3ZhbHVlPTEKLSAgZWxzZQotICAgIGd0X3ZhbHVlPTAKLSAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX0RFQ0xfXXRyYW5zbGl0KCQxLCBbYS16XSwgW0EtWl0pLCBbJGd0X3ZhbHVlXSwKLSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGAkMScsIGFuZCB0byAwIGlmIHlvdSBkb24ndC5dKQotXSkKZGlmZiAtLWdpdCBhL200L2ludGxkaXIubTQgYi9tNC9pbnRsZGlyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTI4ODQzLi4wMDAwMDAwCi0tLSBhL200L2ludGxkaXIubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIGludGxkaXIubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xNikKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLWRubAotZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKLWRubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi1kbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAotZG5sIGZ1bmN0aW9uYWxpdHkuCi1kbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAotZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQotZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgotCi1BQ19QUkVSRVEoMi41MikKLQotZG5sIFRlbGxzIHRoZSBBTV9HTlVfR0VUVEVYVCBtYWNybyB0byBjb25zaWRlciBhbiBpbnRsLyBkaXJlY3RvcnkuCi1BQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfSU5UTF9TVUJESVJdLCBbXSkKZGlmZiAtLWdpdCBhL200L2ludGxtYWNvc3gubTQgYi9tNC9pbnRsbWFjb3N4Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2YwZDkwLi4wMDAwMDAwCi0tLSBhL200L2ludGxtYWNvc3gubTQKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0jIGludGxtYWNvc3gubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xNykKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgotZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLWRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci1kbmwgZnVuY3Rpb25hbGl0eS4KLWRubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCi1kbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCi1kbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi1kbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLWRubCBDaGVja3MgZm9yIHNwZWNpYWwgb3B0aW9ucyBuZWVkZWQgb24gTWFjT1MgWC4KLWRubCBEZWZpbmVzIElOVExfTUFDT1NYX0xJQlMuCi1BQ19ERUZVTihbZ3RfSU5UTF9NQUNPU1hdLAotWwotICBkbmwgQ2hlY2sgZm9yIEFQSSBpbnRyb2R1Y2VkIGluIE1hY09TIFggMTAuMi4KLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlXSwKLSAgICBndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUsCi0gICAgW2d0X3NhdmVfTElCUz0iJExJQlMiCi0gICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKLSAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2VzLmg+XSwKLSAgICAgICBbQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZShOVUxMLCBOVUxMKV0sCi0gICAgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT15ZXNdLAotICAgICAgIFtndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9bm9dKQotICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCi0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShbSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFXSwgMSwKLSAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuXSkKLSAgZmkKLSAgZG5sIENoZWNrIGZvciBBUEkgaW50cm9kdWNlZCBpbiBNYWNPUyBYIDEwLjMuCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudF0sIGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCwKLSAgICBbZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgotICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGTG9jYWxlLmg+XSwgW0NGTG9jYWxlQ29weUN1cnJlbnQoKTtdLAotICAgICAgIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9eWVzXSwKLSAgICAgICBbZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PW5vXSkKLSAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQotICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0hBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVF0sIDEsCi0gICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hY09TIFggZnVuY3Rpb24gQ0ZMb2NhbGVDb3B5Q3VycmVudCBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCi0gIGZpCi0gIElOVExfTUFDT1NYX0xJQlM9Ci0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllcyB8fCB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KLSAgICBJTlRMX01BQ09TWF9MSUJTPSItV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCi0gIGZpCi0gIEFDX1NVQlNUKFtJTlRMX01BQ09TWF9MSUJTXSkKLV0pCmRpZmYgLS1naXQgYS9tNC9pbnRtYXgubTQgYi9tNC9pbnRtYXgubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlN2E4YTQuLjAwMDAwMDAKLS0tIGEvbTQvaW50bWF4Lm00CisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyBpbnRtYXgubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xNikKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBCcnVubyBIYWlibGUuCi1kbmwgVGVzdCB3aGV0aGVyIHRoZSBzeXN0ZW0gaGFzIHRoZSAnaW50bWF4X3QnIHR5cGUsIGJ1dCBkb24ndCBhdHRlbXB0IHRvCi1kbmwgZmluZCBhIHJlcGxhY2VtZW50IGlmIGl0IGlzIGxhY2tpbmcuCi0KLUFDX0RFRlVOKFtndF9UWVBFX0lOVE1BWF9UXSwKLVsKLSAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX0lOVFRZUEVTX0hdKQotICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdKQotICBBQ19DQUNIRV9DSEVDSyhmb3IgaW50bWF4X3QsIGd0X2N2X2NfaW50bWF4X3QsCi0gICAgW0FDX1RSWV9DT01QSUxFKFsKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpZiBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWAotI2luY2x1ZGUgPHN0ZGludC5oPgotI2VuZGlmCi0jaWYgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWAotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jZW5kaWYKLV0sICAgICBbaW50bWF4X3QgeCA9IC0xOwotICAgICAgICByZXR1cm4gIXg7XSwKLSAgICAgICBndF9jdl9jX2ludG1heF90PXllcywKLSAgICAgICBndF9jdl9jX2ludG1heF90PW5vKV0pCi0gIGlmIHRlc3QgJGd0X2N2X2NfaW50bWF4X3QgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9JTlRNQVhfVCwgMSwKLSAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQotICBmaQotXSkKZGlmZiAtLWdpdCBhL200L2ludHR5cGVzLXByaS5tNCBiL200L2ludHR5cGVzLXByaS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3Zjg5NC4uMDAwMDAwMAotLS0gYS9tNC9pbnR0eXBlcy1wcmkubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIGludHR5cGVzLXByaS5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjE2KQotZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIEJydW5vIEhhaWJsZS4KLQotQUNfUFJFUkVRKDIuNTIpCi0KLSMgRGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdGhlIFBSSSoKLSMgbWFjcm9zIHRvIG5vbi1zdHJpbmcgdmFsdWVzLiAgVGhpcyBpcyB0aGUgY2FzZSBvbiBBSVggNC4zLjMuCi0KLUFDX0RFRlVOKFtndF9JTlRUWVBFU19QUkldLAotWwotICBBQ19DSEVDS19IRUFERVJTKFtpbnR0eXBlcy5oXSkKLSAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KLSAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgaW50dHlwZXMuaCBQUkl4Tk4gbWFjcm9zIGFyZSBicm9rZW5dLAotICAgICAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiwKLSAgICAgIFsKLSAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2lmZGVmIFBSSWQzMgotY2hhciAqcCA9IFBSSWQzMjsKLSNlbmRpZgotXSwgW10sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49bm8sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzKQotICAgICAgXSkKLSAgZmkKLSAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKFBSSV9NQUNST1NfQlJPS0VOLCAxLAotICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHVudXNhYmxlIFBSSSogbWFjcm9zLl0pCi0gICAgUFJJX01BQ1JPU19CUk9LRU49MQotICBlbHNlCi0gICAgUFJJX01BQ1JPU19CUk9LRU49MAotICBmaQotICBBQ19TVUJTVChbUFJJX01BQ1JPU19CUk9LRU5dKQotXSkKZGlmZiAtLWdpdCBhL200L2ludHR5cGVzX2gubTQgYi9tNC9pbnR0eXBlc19oLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGM4ZWNiLi4wMDAwMDAwCi0tLSBhL200L2ludHR5cGVzX2gubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIGludHR5cGVzX2gubTQgc2VyaWFsIDcKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwNCwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBQYXVsIEVnZ2VydC4KLQotIyBEZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLAotIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KLQotQUNfREVGVU4oW2dsX0FDX0hFQURFUl9JTlRUWVBFU19IXSwKLVsKLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCi0gIFtBQ19UUllfQ09NUElMRSgKLSAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKLSAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTsgcmV0dXJuICFpO10sCi0gICAgZ2xfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLAotICAgIGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKV0pCi0gIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgsIDEsCi0gICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAotICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvbGNtZXNzYWdlLm00IGIvbTQvbGNtZXNzYWdlLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWFhNzdlLi4wMDAwMDAwCi0tLSBhL200L2xjbWVzc2FnZS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgbGNtZXNzYWdlLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTQuMikKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiwgMjAwNC0yMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi1kbmwKLWRubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCi1kbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKLWRubCBmdW5jdGlvbmFsaXR5LgotZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKLWRubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKLWRubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLWRubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KLQotZG5sIEF1dGhvcnM6Ci1kbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KLQotIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgotCi1BQ19ERUZVTihbZ3RfTENfTUVTU0FHRVNdLAotWwotICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgZ3RfY3ZfdmFsX0xDX01FU1NBR0VTLAotICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAotICAgICAgIGd0X2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGd0X2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQotICBpZiB0ZXN0ICRndF9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKLSAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQotICBmaQotXSkKZGlmZiAtLWdpdCBhL200L2xpYi1sZC5tNCBiL200L2xpYi1sZC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjNGUyYy4uMDAwMDAwMAotLS0gYS9tNC9saWItbGQubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotIyBsaWItbGQubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgU3Vicm91dGluZXMgb2YgbGlidG9vbC5tNCwKLWRubCB3aXRoIHJlcGxhY2VtZW50cyBzL0FDXy9BQ19MSUIvIGFuZCBzL2x0X2N2L2FjbF9jdi8gdG8gYXZvaWQgY29sbGlzaW9uCi1kbmwgd2l0aCBsaWJ0b29sLm00LgotCi1kbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgd2l0aF9nbnVfbGQgdG8geWVzIG9yIG5vLgotQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEX0dOVV0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgYWNsX2N2X3Byb2dfZ251X2xkLAotWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCi1jYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIGFjbF9jdl9wcm9nX2dudV9sZD15ZXMgOzsKLSopCi0gIGFjbF9jdl9wcm9nX2dudV9sZD1ubyA7OwotZXNhY10pCi13aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCi1dKQotCi1kbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgTEQuCi1BQ19ERUZVTihbQUNfTElCX1BST0dfTERdLAotW0FDX0FSR19XSVRIKGdudS1sZCwKLVsgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub11dLAotdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzLCB3aXRoX2dudV9sZD1ubykKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgotIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5IEdDQ10pCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1tcXC9dKiB8IFtBLVphLXpdOltcXC9dKildCi0gICAgICBbcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJ10KLSAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCi0JYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCi0gICAgICA7OwotICAiIikKLSAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KLSAgICBhY19wcm9nPWxkCi0gICAgOzsKLSAgKikKLSAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCi0gICAgd2l0aF9nbnVfbGQ9dW5rbm93bgotICAgIDs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQotZWxzZQotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKLWZpCi1BQ19DQUNIRV9WQUwoYWNsX2N2X3BhdGhfTEQsCi1baWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhfU0VQQVJBVE9SLTp9IgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKLSAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGFjX3NhdmVfaWZzIgotZWxzZQotICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpXSkKLUxEPSIkYWNsX2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoJExEKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLXRlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCi1BQ19MSUJfUFJPR19MRF9HTlUKLV0pCmRpZmYgLS1naXQgYS9tNC9saWItbGluay5tNCBiL200L2xpYi1saW5rLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2QyNmZjLi4wMDAwMDAwCi0tLSBhL200L2xpYi1saW5rLm00CisrKyAvZGV2L251bGwKQEAgLTEsNzA5ICswLDAgQEAKLSMgbGliLWxpbmsubTQgc2VyaWFsIDEzIChnZXR0ZXh0LTAuMTcpCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgotCi1BQ19QUkVSRVEoMi41NCkKLQotZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKLWRubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KLWRubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCi1kbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgotZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQotZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCi1BQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCi0gIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCi0gIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCi0gIEFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lW11fbGlic10sIFsKLSAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKLSAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgotICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgotICAgIGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzPSIkSU5DW11OQU1FIgotICAgIGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeD0iJExJQltdTkFNRVtdX1BSRUZJWCIKLSAgXSkKLSAgTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbGlicyIKLSAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCi0gIElOQ1tdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzIgotICBMSUJbXU5BTUVbXV9QUkVGSVg9IiRhY19jdl9saWJbXU5hbWVbXV9wcmVmaXgiCi0gIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQotICBBQ19TVUJTVChbTElCXU5BTUUpCi0gIEFDX1NVQlNUKFtMVExJQl1OQU1FKQotICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCi0gIGRubCBBbHNvIHNldCBIQVZFX0xJQltdTkFNRSBzbyB0aGF0IEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gcmV1c2UgdGhlCi0gIGRubCByZXN1bHRzIG9mIHRoaXMgc2VhcmNoIHdoZW4gdGhpcyBsaWJyYXJ5IGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5LgotICBIQVZFX0xJQltdTkFNRT15ZXMKLSAgdW5kZWZpbmUoW05hbWVdKQotICB1bmRlZmluZShbTkFNRV0pCi1dKQotCi1kbmwgQUNfTElCX0hBVkVfTElOS0ZMQUdTKG5hbWUsIGRlcGVuZGVuY2llcywgaW5jbHVkZXMsIHRlc3Rjb2RlKQotZG5sIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kCi1kbmwgaW1wbGljaXQgZGVwZW5kZW5jaWVzLCB0b2dldGhlciB3aXRoIHRoZSBzcGVjaWZpZWQgaW5jbHVkZSBmaWxlcyBhbmQKLWRubCB0aGUgYWJpbGl0eSB0byBjb21waWxlIGFuZCBsaW5rIHRoZSBzcGVjaWZpZWQgdGVzdGNvZGUuIElmIGZvdW5kLCBpdAotZG5sIHNldHMgYW5kIEFDX1NVQlNUcyBIQVZFX0xJQiR7TkFNRX09eWVzIGFuZCB0aGUgTElCJHtOQU1FfSBhbmQKLWRubCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUsIGFuZAotZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcwotZG5sIEhBVkVfTElCJHtOQU1FfT1ubyBhbmQgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHRvIGVtcHR5LgotZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQotZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCi1BQ19ERUZVTihbQUNfTElCX0hBVkVfTElOS0ZMQUdTXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKLSAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKLSAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKLSAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKLQotICBkbmwgU2VhcmNoIGZvciBsaWJbXU5hbWUgYW5kIGRlZmluZSBMSUJbXU5BTUUsIExUTElCW11OQU1FIGFuZCBJTkNbXU5BTUUKLSAgZG5sIGFjY29yZGluZ2x5LgotICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKLQotICBkbmwgQWRkICRJTkNbXU5BTUUgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCi0gIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliW11OYW1lIGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQotICBkbmwgdmlhIC0td2l0aG91dC1saWJbXU5hbWUtcHJlZml4LCBoZSB3YW50cyB0byB1c2UgaXQuCi0gIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCi0KLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZV0sIFsKLSAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgotICAgIExJQlM9IiRMSUJTICRMSUJbXU5BTUUiCi0gICAgQUNfVFJZX0xJTksoWyQzXSwgWyQ0XSwgW2FjX2N2X2xpYltdTmFtZT15ZXNdLCBbYWNfY3ZfbGliW11OYW1lPW5vXSkKLSAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotICBdKQotICBpZiB0ZXN0ICIkYWNfY3ZfbGliW11OYW1lIiA9IHllczsgdGhlbgotICAgIEhBVkVfTElCW11OQU1FPXllcwotICAgIEFDX0RFRklORShbSEFWRV9MSUJdTkFNRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJDEgbGlicmFyeS5dKQotICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSkKLSAgICBBQ19NU0dfUkVTVUxUKFskTElCW11OQU1FXSkKLSAgZWxzZQotICAgIEhBVkVfTElCW11OQU1FPW5vCi0gICAgZG5sIElmICRMSUJbXU5BTUUgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZAotICAgIGRubCAkSU5DW11OQU1FIGVpdGhlci4KLSAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCi0gICAgTElCW11OQU1FPQotICAgIExUTElCW11OQU1FPQotICAgIExJQltdTkFNRVtdX1BSRUZJWD0KLSAgZmkKLSAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCi0gIEFDX1NVQlNUKFtMSUJdTkFNRSkKLSAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCi0gIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKLSAgdW5kZWZpbmUoW05hbWVdKQotICB1bmRlZmluZShbTkFNRV0pCi1dKQotCi1kbmwgRGV0ZXJtaW5lIHRoZSBwbGF0Zm9ybSBkZXBlbmRlbnQgcGFyYW1ldGVycyBuZWVkZWQgdG8gdXNlIHJwYXRoOgotZG5sICAgYWNsX2xpYmV4dCwKLWRubCAgIGFjbF9zaGxpYmV4dCwKLWRubCAgIGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLAotZG5sICAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCi1kbmwgICBhY2xfaGFyZGNvZGVfZGlyZWN0LAotZG5sICAgYWNsX2hhcmRjb2RlX21pbnVzX0wuCi1BQ19ERUZVTihbQUNfTElCX1JQQVRIXSwKLVsKLSAgZG5sIFRlbGwgYXV0b21ha2UgPj0gMS4xMCB0byBjb21wbGFpbiBpZiBjb25maWcucnBhdGggaXMgbWlzc2luZy4KLSAgbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbY29uZmlnLnJwYXRoXSldKQotICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkgICAgICAgICAgICAgICAgZG5sIHdlIHVzZSAkQ0MsICRHQ0MsICRMREZMQUdTCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUk9HX0xEXSkgICAgICAgICAgICBkbmwgd2UgdXNlICRMRCwgJHdpdGhfZ251X2xkCi0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgICAgICAgICBkbmwgd2UgdXNlICRob3N0Ci0gIEFDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKSBkbmwgd2UgdXNlICRhY19hdXhfZGlyCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luXSwgYWNsX2N2X3JwYXRoLCBbCi0gICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAotICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAotICAgIC4gLi9jb25mdGVzdC5zaAotICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKLSAgICBhY2xfY3ZfcnBhdGg9ZG9uZQotICBdKQotICB3bD0iJGFjbF9jdl93bCIKLSAgYWNsX2xpYmV4dD0iJGFjbF9jdl9saWJleHQiCi0gIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKLSAgYWNsX2xpYm5hbWVfc3BlYz0iJGFjbF9jdl9saWJuYW1lX3NwZWMiCi0gIGFjbF9saWJyYXJ5X25hbWVzX3NwZWM9IiRhY2xfY3ZfbGlicmFyeV9uYW1lc19zcGVjIgotICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgotICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgotICBhY2xfaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKLSAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKLSAgZG5sIERldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHJwYXRoIGhhbmRsaW5nIGF0IGFsbC4KLSAgQUNfQVJHX0VOQUJMRShycGF0aCwKLSAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKLSAgICA6LCBlbmFibGVfcnBhdGg9eWVzKQotXSkKLQotZG5sIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAotZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgotZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCi1kbmwgQWxzbywgc2V0cyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZSB3YXMgZm91bmQKLWRubCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCi1BQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdKQotICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQotICBkbmwgQXV0b2NvbmYgPj0gMi42MSBzdXBwb3J0cyBkb3RzIGluIC0td2l0aCBvcHRpb25zLgotICBkZWZpbmUoW05fQV9NX0VdLFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjFdKSxbLTFdLFt0cmFuc2xpdChbJDFdLFsuXSxbX10pXSxbJDFdKV0pCi0gIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgotICB1c2VfYWRkaXRpb25hbD15ZXMKLSAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKLSAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKLSAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCi0gIF0pCi0gIEFDX0xJQl9BUkdfV0lUSChbbGliXU5fQV9NX0VbLXByZWZpeF0sCi1bICAtLXdpdGgtbGliXU5fQV9NX0VbLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgotICAtLXdpdGhvdXQtbGliXU5fQV9NX0VbLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAotWwotICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgotICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KLSAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCi0gICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCi0gICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCi0gICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgotICAgICAgICBdKQotICAgICAgZWxzZQotICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCi0gICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCi0gICAgICBmaQotICAgIGZpCi1dKQotICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQKLSAgZG5sICRMREZMQUdTLiBVc2luZyBicmVhZHRoLWZpcnN0LXNlYWNoLgotICBMSUJbXU5BTUU9Ci0gIExUTElCW11OQU1FPQotICBJTkNbXU5BTUU9Ci0gIExJQltdTkFNRVtdX1BSRUZJWD0KLSAgcnBhdGhkaXJzPQotICBsdHJwYXRoZGlycz0KLSAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQotICBuYW1lc19uZXh0X3JvdW5kPSckMSAkMicKLSAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25leHRfcm91bmQiOyBkbwotICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgotICAgIG5hbWVzX25leHRfcm91bmQ9Ci0gICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7IGRvCi0gICAgICBhbHJlYWR5X2hhbmRsZWQ9Ci0gICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbwotICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuCi0gICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcwotICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICBkb25lCi0gICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgotICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCi0gICAgICAgIGRubCBTZWUgaWYgaXQgd2FzIGFscmVhZHkgbG9jYXRlZCBieSBhbiBlYXJsaWVyIEFDX0xJQl9MSU5LRkxBR1MKLSAgICAgICAgZG5sIG9yIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYWxsLgotICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX3wnYAotICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgotICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCi0gICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgotICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCi0gICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JHZhbHVlIgotICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKLSAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kdmFsdWUiCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZG5sIEFuIGVhcmxpZXIgY2FsbCB0byBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgaGFzIGRldGVybWluZWQKLSAgICAgICAgICAgIGRubCB0aGF0IHRoaXMgbGlicmFyeSBkb2Vzbid0IGV4aXN0LiBTbyBqdXN0IGRyb3AgaXQuCi0gICAgICAgICAgICA6Ci0gICAgICAgICAgZmkKLSAgICAgICAgZWxzZQotICAgICAgICAgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgbGliJG5hbWUgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZCAkTERGTEFHUwotICAgICAgICAgIGRubCBhbmQgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUvJExUTElCTkFNRS4KLSAgICAgICAgICBmb3VuZF9kaXI9Ci0gICAgICAgICAgZm91bmRfbGE9Ci0gICAgICAgICAgZm91bmRfc289Ci0gICAgICAgICAgZm91bmRfYT0KLSAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hyZXh0PQotICAgICAgICAgIGZpCi0gICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgZG5sIFRoZSBzYW1lIGNvZGUgYXMgaW4gdGhlIGxvb3AgYmVsb3c6Ci0gICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KLSAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAotICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAotICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKLSAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbwotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKLSAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KLSAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgotICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZmkKLSAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KLSAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KLSAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKLSAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCi0gICAgICAgICAgICAgICAgLUwqKQotICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCi0gICAgICAgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCi0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZG9uZQotICAgICAgICAgIGZpCi0gICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgZG5sIEZvdW5kIHRoZSBsaWJyYXJ5LgotICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKLSAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc2hhcmVkIGxpYnJhcnkuIFdlIGF0dGVtcHQgdG8gaGFyZGNvZGUgaXRzCi0gICAgICAgICAgICAgIGRubCBkaXJlY3RvcnkgaW50byB0aGUgZXhlY3V0YWJsZSdzIHJ1bnBhdGgsIHVubGVzcyBpdCdzIHRoZQotICAgICAgICAgICAgICBkbmwgc3RhbmRhcmQgL3Vzci9saWIuCi0gICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICAgICAgICBkbmwgTm8gaGFyZGNvZGluZyBpcyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCi0gICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KLSAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KLSAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgotICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZG5sIFRoZSBoYXJkY29kaW5nIGludG8gJExJQk5BTUUgaXMgc3lzdGVtIGRlcGVuZGVudC4KLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0gICAgICAgICAgICAgICAgICBkbmwgcmVzdWx0aW5nIGJpbmFyeS4KLSAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKLSAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KLSAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCi0gICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KLSAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgotICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkbmwgUmVseSBvbiAiLUwkZm91bmRfZGlyIi4KLSAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQgaWYgaXQncyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgTERGTEFHUwotICAgICAgICAgICAgICAgICAgICBkbmwgb3IgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUKLSAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbwotICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQotICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgotICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgotICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGFjbF9oYXJkY29kZV9ydW5wYXRoX3ZhciBhbmQgTERfUlVOX1BBVEgKLSAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICBkbmwgY29tcGlsZXIuIFNvIGdpdmUgdXAuIE5vIGhhcmRjb2RpbmcuIFRoaXMgYWZmZWN0cyBvbmx5Ci0gICAgICAgICAgICAgICAgICAgICAgZG5sIHZlcnkgb2xkIHN5c3RlbXMuCi0gICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHN0YXRpYyBsaWJyYXJ5LgotICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX2EiCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkbmwgV2Ugc2hvdWxkbid0IGNvbWUgaGVyZSwgYnV0IGFueXdheSBpdCdzIGdvb2QgdG8gaGF2ZSBhCi0gICAgICAgICAgICAgICAgZG5sIGZhbGxiYWNrLgotICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgZG5sIEFzc3VtZSB0aGUgaW5jbHVkZSBmaWxlcyBhcmUgbmVhcmJ5LgotICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQotICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KLSAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAqLyRhY2xfbGliZGlyc3RlbS8pCi0gICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2AKLSAgICAgICAgICAgICAgICBMSUJbXU5BTUVbXV9QUkVGSVg9IiRiYXNlZGlyIgotICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCi0gICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0Ci0gICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKLSAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCi0gICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUyBvciB0aGUgYWxyZWFkeQotICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkSU5DTkFNRSwKLSAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgotICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7Ci0gICAgICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNbXU5BTUU7IGRvCi0gICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KLSAgICAgICAgICAgICAgICAgICAgICBJTkNbXU5BTUU9IiR7SU5DW11OQU1FfSR7SU5DW11OQU1FOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBkbmwgTG9vayBmb3IgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZvdW5kX2xhIjsgdGhlbgotICAgICAgICAgICAgICBkbmwgUmVhZCB0aGUgLmxhIGZpbGUuIEl0IGRlZmluZXMgdGhlIHZhcmlhYmxlcwotICAgICAgICAgICAgICBkbmwgZGxuYW1lLCBsaWJyYXJ5X25hbWVzLCBvbGRfbGlicmFyeSwgZGVwZW5kZW5jeV9saWJzLCBjdXJyZW50LAotICAgICAgICAgICAgICBkbmwgYWdlLCByZXZpc2lvbiwgaW5zdGFsbGVkLCBkbG9wZW4sIGRscHJlb3BlbiwgbGliZGlyLgotICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgotICAgICAgICAgICAgICAgICovKiB8ICpcXCopIC4gIiRmb3VuZF9sYSIgOzsKLSAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKLSAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBsaWJkaXI9IiRzYXZlX2xpYmRpciIKLSAgICAgICAgICAgICAgZG5sIFdlIHVzZSBvbmx5IGRlcGVuZGVuY3lfbGlicy4KLSAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCi0gICAgICAgICAgICAgICAgICAtTCopCi0gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKLSAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUgYW5kICRMVExJQk5BTUUuCi0gICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0Ci0gICAgICAgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAotICAgICAgICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAotICAgICAgICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUyBvciB0aGUgYWxyZWFkeQotICAgICAgICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkTElCTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTFRMSUJOQU1FLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAtUiopCi0gICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgotICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KLSAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgotICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCi0gICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgIC1sKikKLSAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLgotICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgKi5sYSkKLSAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncwotICAgICAgICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5OyBpdCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBhIHByZWNlZGluZyAtTAotICAgICAgICAgICAgICAgICAgICBkbmwgb3B0aW9uLgotICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGRlcCIKLSAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kZGVwIgotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgZmkKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBkbmwgRGlkbid0IGZpbmQgdGhlIGxpYnJhcnk7IGFzc3VtZSBpdCBpcyBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzCi0gICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQotICAgICAgICAgICAgZG5sIGRpcmVjdG9yaWVzIGtub3duIHRvIHRoZSBsaW5rZXIgc2hvdWxkIGFsc28gYmUga25vd24gdG8gdGhlCi0gICAgICAgICAgICBkbmwgcnVudGltZSBsb2FkZXIsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzIHNldmVyZWx5IG1pc2NvbmZpZ3VyZWQuKQotICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgotICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tbCRuYW1lIgotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIGRvbmUKLSAgZG9uZQotICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgotICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0Ci0gICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCi0gICAgICBkbmwgc2luZ2xlIGxpYnJhcnksIGJ1dCBub3Qgd2hlbiBtb3JlIHRoYW4gb25lICRMSUJOQU1FcyBhcmUgdXNlZC4KLSAgICAgIGFsbGRpcnM9Ci0gICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgotICAgICAgZG9uZQotICAgICAgZG5sIE5vdGU6IGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgotICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgotICAgICAgbGliZGlyPSIkYWxsZGlycyIKLSAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0gICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCi0gICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgotICAgIGVsc2UKLSAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCi0gICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgotICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCi0gICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCi0gICAgICBkb25lCi0gICAgZmkKLSAgZmkKLSAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCi0gICAgZG5sIFdoZW4gdXNpbmcgbGlidG9vbCwgdGhlIG9wdGlvbiB0aGF0IHdvcmtzIGZvciBib3RoIGxpYnJhcmllcyBhbmQKLSAgICBkbmwgZXhlY3V0YWJsZXMgaXMgLVIuIFRoZSAtUiBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgotICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbwotICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tUiRmb3VuZF9kaXIiCi0gICAgZG9uZQotICBmaQotXSkKLQotZG5sIEFDX0xJQl9BUFBFTkRUT1ZBUihWQVIsIENPTlRFTlRTKSBhcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBDT05URU5UUyB0byBWQVIsCi1kbmwgdW5sZXNzIGFscmVhZHkgcHJlc2VudCBpbiBWQVIuCi1kbmwgV29ya3Mgb25seSBmb3IgQ1BQRkxBR1MsIG5vdCBmb3IgTElCKiB2YXJpYWJsZXMgYmVjYXVzZSB0aGF0IHNvbWV0aW1lcwotZG5sIGNvbnRhaW5zIHR3byBvciB0aHJlZSBjb25zZWN1dGl2ZSBlbGVtZW50cyB0aGF0IGJlbG9uZyB0b2dldGhlci4KLUFDX0RFRlVOKFtBQ19MSUJfQVBQRU5EVE9WQVJdLAotWwotICBmb3IgZWxlbWVudCBpbiBbJDJdOyBkbwotICAgIGhhdmVpdD0KLSAgICBmb3IgeCBpbiAkWyQxXTsgZG8KLSAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCi0gICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KLSAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBkb25lCi0gICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgIFskMV09IiR7WyQxXX0ke1skMV06KyB9JGVsZW1lbnQiCi0gICAgZmkKLSAgZG9uZQotXSkKLQotZG5sIEZvciB0aG9zZSBjYXNlcyB3aGVyZSBhIHZhcmlhYmxlIGNvbnRhaW5zIHNldmVyYWwgLUwgYW5kIC1sIG9wdGlvbnMKLWRubCByZWZlcnJpbmcgdG8gdW5rbm93biBsaWJyYXJpZXMgYW5kIGRpcmVjdG9yaWVzLCB0aGlzIG1hY3JvIGRldGVybWluZXMgdGhlCi1kbmwgbmVjZXNzYXJ5IGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgZm9yIHRoZSBydW50aW1lIHBhdGguCi1kbmwgQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlMoW0xEQUREVkFSXSwgW0xJQlNWQUxVRV0sIFtVU0UtTElCVE9PTF0pCi1kbmwgc2V0cyBMREFERFZBUiB0byBsaW5rZXIgb3B0aW9ucyBuZWVkZWQgdG9nZXRoZXIgd2l0aCBMSUJTVkFMVUUuCi1kbmwgSWYgVVNFLUxJQlRPT0wgZXZhbHVhdGVzIHRvIG5vbi1lbXB0eSwgbGlua2luZyB3aXRoIGxpYnRvb2wgaXMgYXNzdW1lZCwKLWRubCBvdGhlcndpc2UgbGlua2luZyB3aXRob3V0IGxpYnRvb2wgaXMgYXNzdW1lZC4KLUFDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCU10sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKLSAgJDE9Ci0gIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KLSAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIGRpcmVjdG9yaWVzIGludG8gdGhlIHJlc3VsdGluZwotICAgICAgZG5sIGJpbmFyeS4KLSAgICAgIHJwYXRoZGlycz0KLSAgICAgIG5leHQ9Ci0gICAgICBmb3Igb3B0IGluICQyOyBkbwotICAgICAgICBpZiB0ZXN0IC1uICIkbmV4dCI7IHRoZW4KLSAgICAgICAgICBkaXI9IiRuZXh0IgotICAgICAgICAgIGRubCBObyBuZWVkIHRvIGhhcmRjb2RlIHRoZSBzdGFuZGFyZCAvdXNyL2xpYi4KLSAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgotICAgICAgICAgIGZpCi0gICAgICAgICAgbmV4dD0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGNhc2UgJG9wdCBpbgotICAgICAgICAgICAgLUwpIG5leHQ9eWVzIDs7Ci0gICAgICAgICAgICAtTCopIGRpcj1gZWNobyAiWCRvcHQiIHwgc2VkIC1lICdzLF5YLUwsLCdgCi0gICAgICAgICAgICAgICAgIGRubCBObyBuZWVkIHRvIGhhcmRjb2RlIHRoZSBzdGFuZGFyZCAvdXNyL2xpYi4KLSAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCi0gICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgIG5leHQ9IDs7Ci0gICAgICAgICAgICAqKSBuZXh0PSA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgIGRvbmUKLSAgICAgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAtbiAiIiQzIiI7IHRoZW4KLSAgICAgICAgICBkbmwgbGlidG9vbCBpcyB1c2VkIGZvciBsaW5raW5nLiBVc2UgLVIgb3B0aW9ucy4KLSAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfS1SJGRpciIKLSAgICAgICAgICBkb25lCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBkbmwgVGhlIGxpbmtlciBpcyB1c2VkIGZvciBsaW5raW5nIGRpcmVjdGx5LgotICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KLSAgICAgICAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIKLSAgICAgICAgICAgIGRubCBtdXN0IHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4KLSAgICAgICAgICAgIGFsbGRpcnM9Ci0gICAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZGlyIgotICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgotICAgICAgICAgICAgbGliZGlyPSIkYWxsZGlycyIKLSAgICAgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0gICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCi0gICAgICAgICAgICAkMT0iJGZsYWciCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZG5sIFRoZSAtcnBhdGggb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KLSAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgotICAgICAgICAgICAgICBsaWJkaXI9IiRkaXIiCi0gICAgICAgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0gICAgICAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKLSAgICAgICAgICAgICAgJDE9IiR7JDF9JHskMTorIH0kZmxhZyIKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotICBBQ19TVUJTVChbJDFdKQotXSkKZGlmZiAtLWdpdCBhL200L2xpYi1wcmVmaXgubTQgYi9tNC9saWItcHJlZml4Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODY4NGUxLi4wMDAwMDAwCi0tLSBhL200L2xpYi1wcmVmaXgubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotIyBsaWItcHJlZml4Lm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTUpCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgotCi1kbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCi1kbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0Ci1kbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KLWlmZGVmKFtBQ19IRUxQX1NUUklOR10sCi1bQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAotW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKLQotZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAotZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKLWRubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAotZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgotZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKLWRubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgotQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAotWwotICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQotICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKLSAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQotICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCi0gIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgotICB1c2VfYWRkaXRpb25hbD15ZXMKLSAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKLSAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKLSAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCi0gIF0pCi0gIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCi1bICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgotICAtLXdpdGhvdXQtbGliLXByZWZpeCAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAotWwotICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgotICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KLSAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCi0gICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCi0gICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCi0gICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgotICAgICAgICBdKQotICAgICAgZWxzZQotICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCi0gICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCi0gICAgICBmaQotICAgIGZpCi1dKQotICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgotICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCi0gICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKLSAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCi0gICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAotICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAotICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCi0gICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgotICAgICAgaGF2ZWl0PQotICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbwotICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQotICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCi0gICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICBkb25lCi0gICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgotICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgotICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCi0gICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZmkKLSAgICBmaQotICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgotICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0Ci0gICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCi0gICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCi0gICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKLSAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgotICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICBoYXZlaXQ9Ci0gICAgICBmb3IgeCBpbiAkTERGTEFHUzsgZG8KLSAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKLSAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCi0gICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICBkb25lCi0gICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KLSAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KLSAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30ke0xERkxBR1M6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZmkKLSAgZmkKLV0pCi0KLWRubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKLWRubCBhY2xfZmluYWxfZXhlY19wcmVmaXgsIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3aGljaCAkcHJlZml4IGFuZAotZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgotQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCi1bCi0gIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAotICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCi0gIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KLSAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCi0gIGVsc2UKLSAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgotICBmaQotICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KLSAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKLSAgZWxzZQotICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBmaQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLV0pCi0KLWRubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCi1kbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQotZG5sIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCi1BQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKLVsKLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLSAgJDEKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotXSkKLQotZG5sIEFDX0xJQl9QUkVQQVJFX01VTFRJTElCIGNyZWF0ZXMgYSB2YXJpYWJsZSBhY2xfbGliZGlyc3RlbSwgY29udGFpbmluZwotZG5sIHRoZSBiYXNlbmFtZSBvZiB0aGUgbGliZGlyLCBlaXRoZXIgImxpYiIgb3IgImxpYjY0Ii4KLUFDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0sCi1bCi0gIGRubCBUaGVyZSBpcyBubyBmb3JtYWwgc3RhbmRhcmQgcmVnYXJkaW5nIGxpYiBhbmQgbGliNjQuIFRoZSBjdXJyZW50Ci0gIGRubCBwcmFjdGljZSBpcyB0aGF0IG9uIGEgc3lzdGVtIHN1cHBvcnRpbmcgMzItYml0IGFuZCA2NC1iaXQgaW5zdHJ1Y3Rpb24KLSAgZG5sIHNldHMgb3IgQUJJcywgNjQtYml0IGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYjY0IGFuZCAzMi1iaXQKLSAgZG5sIGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYi4gV2UgZGV0ZXJtaW5lIHRoZSBjb21waWxlcidzIGRlZmF1bHQKLSAgZG5sIG1vZGUgYnkgbG9va2luZyBhdCB0aGUgY29tcGlsZXIncyBsaWJyYXJ5IHNlYXJjaCBwYXRoLiBJZiBhdCBsZWFzdAotICBkbmwgb2YgaXRzIGVsZW1lbnRzIGVuZHMgaW4gL2xpYjY0IG9yIHBvaW50cyB0byBhIGRpcmVjdG9yeSB3aG9zZSBhYnNvbHV0ZQotICBkbmwgcGF0aG5hbWUgZW5kcyBpbiAvbGliNjQsIHdlIGFzc3VtZSBhIDY0LWJpdCBBQkkuIE90aGVyd2lzZSB3ZSB1c2UgdGhlCi0gIGRubCBkZWZhdWx0LCBuYW1lbHkgImxpYiIuCi0gIGFjbF9saWJkaXJzdGVtPWxpYgotICBzZWFyY2hwYXRoPWAoTENfQUxMPUMgJENDIC1wcmludC1zZWFyY2gtZGlycykgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJ3MsXmxpYnJhcmllczogLCxwJyB8IHNlZCAtZSAncyxePSwsJ2AKLSAgaWYgdGVzdCAtbiAiJHNlYXJjaHBhdGgiOyB0aGVuCi0gICAgYWNsX3NhdmVfSUZTPSIke0lGUz0gCX0iOyBJRlM9IjoiCi0gICAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNocGF0aDsgZG8KLSAgICAgIGlmIHRlc3QgLWQgIiRzZWFyY2hkaXIiOyB0aGVuCi0gICAgICAgIGNhc2UgIiRzZWFyY2hkaXIiIGluCi0gICAgICAgICAgKi9saWI2NC8gfCAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKLSAgICAgICAgICAqKSBzZWFyY2hkaXI9YGNkICIkc2VhcmNoZGlyIiAmJiBwd2RgCi0gICAgICAgICAgICAgY2FzZSAiJHNlYXJjaGRpciIgaW4KLSAgICAgICAgICAgICAgICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OwotICAgICAgICAgICAgIGVzYWMgOzsKLSAgICAgICAgZXNhYwotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkYWNsX3NhdmVfSUZTIgotICBmaQotXSkKZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTgwODQ0Li4wMDAwMDAwCi0tLSBhL200L2xpYnRvb2wubTQKKysrIC9kZXYvbnVsbApAQCAtMSw4Mzg3ICswLDAgQEAKLSMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCi0jCi0jICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIDIwMDMtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2Ci0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCi0jIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKLSMgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Ygb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0IGlzIGJ1aWx0Ci0jIHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZSAgc2FtZQotIyBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0jCi0jIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi1dKQotCi0jIHNlcmlhbCA1OCBMVF9JTklUCi0KLQotIyBMVF9QUkVSRVEoVkVSU0lPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbXBsYWluIGFuZCBleGl0IGlmIHRoaXMgbGlidG9vbCB2ZXJzaW9uIGlzIGxlc3MgdGhhdCBWRVJTSU9OLgotbTRfZGVmdW4oW0xUX1BSRVJFUV0sCi1bbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW0xUX1BBQ0tBR0VfVkVSU0lPTl0pLCBbJDFdKSwgLTEsCi0gICAgICAgW200X2RlZmF1bHQoWyQzXSwKLQkJICAgW200X2ZhdGFsKFtMaWJ0b29sIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKLQkJICAgICAgICAgICAgIDYzKV0pXSwKLSAgICAgICBbJDJdKV0pCi0KLQotIyBfTFRfQ0hFQ0tfQlVJTERESVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbXBsYWluIGlmIHRoZSBhYnNvbHV0ZSBidWlsZCBkaXJlY3RvcnkgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMKLW00X2RlZnVuKFtfTFRfQ0hFQ0tfQlVJTERESVJdLAotW2Nhc2UgYHB3ZGAgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgQUNfTVNHX1dBUk4oW0xpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBgcHdkYF0pIDs7Ci1lc2FjCi1dKQotCi0KLSMgTFRfSU5JVChbT1BUSU9OU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX0lOSVRdLAotW0FDX1BSRVJFUShbMi42Ml0pZG5sIFdlIHVzZSBBQ19QQVRIX1BST0dTX0ZFQVRVUkVfQ0hFQ0sKLUFDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAotQUNfQkVGT1JFKFskMF0sIFtMVF9MQU5HXSlkbmwKLUFDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKLUFDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19CVUlMRERJUl0pZG5sCi0KLWRubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgotbTRfcGF0dGVybl9mb3JiaWQoW15fP0xUX1tBLVpfXSskXSlkbmwKLW00X3BhdHRlcm5fYWxsb3coW14oX0xUX0VPRnxMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XfExUX01VTFRJX01PRFVMRSkkXSlkbmwKLWRubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAotZG5sIHVubGVzcyB3ZSByZXF1aXJlIGFuIEFDX0RFRlVOZWQgbWFjcm86Ci1BQ19SRVFVSVJFKFtMVE9QVElPTlNfVkVSU0lPTl0pZG5sCi1BQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAotQUNfUkVRVUlSRShbTFRWRVJTSU9OX1ZFUlNJT05dKWRubAotQUNfUkVRVUlSRShbTFRPQlNPTEVURV9WRVJTSU9OXSlkbmwKLW00X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCi0KLV9MVF9TSEVMTF9JTklUKFtTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofV0pCi0KLWRubCBQYXJzZSBPUFRJT05TCi1fTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSRsdG1haW4KLQotIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwotQUNfU1VCU1QoTElCVE9PTClkbmwKLQotX0xUX1NFVFVQCi0KLSMgT25seSBleHBhbmQgb25jZToKLW00X2RlZmluZShbTFRfSU5JVF0pCi1dKSMgTFRfSU5JVAotCi0jIE9sZCBuYW1lczoKLUFVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCi1BVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKLWRubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCi0KLQotIyBfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9QUkVQQVJFX0NDX0JBU0VOQU1FXSwgWwotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1mdW5jX2NjX2Jhc2VuYW1lICgpCi17Ci0gICAgZm9yIGNjX3RlbXAgaW4gQFN8QCoiIjsgZG8KLSAgICAgIGNhc2UgJGNjX3RlbXAgaW4KLSAgICAgICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKLSAgICAgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7Ci0gICAgICAgIFwtKikgOzsKLSAgICAgICAgKikgYnJlYWs7OwotICAgICAgZXNhYwotICAgIGRvbmUKLSAgICBmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKLX0KLV0pIyBfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRQotCi0KLSMgX0xUX0NDX0JBU0VOQU1FKENDKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEl0IHdvdWxkIGJlIGNsZWFyZXIgdG8gY2FsbCBBQ19SRVFVSVJFcyBmcm9tIF9MVF9QUkVQQVJFX0NDX0JBU0VOQU1FLAotIyBidXQgdGhhdCBtYWNybyBpcyBhbHNvIGV4cGFuZGVkIGludG8gZ2VuZXJhdGVkIGxpYnRvb2wgc2NyaXB0LCB3aGljaAotIyBhcnJhbmdlcyBmb3IgJFNFRCBhbmQgJEVDSE8gdG8gYmUgc2V0IGJ5IGRpZmZlcmVudCBtZWFucy4KLW00X2RlZnVuKFtfTFRfQ0NfQkFTRU5BTUVdLAotW200X3JlcXVpcmUoW19MVF9QUkVQQVJFX0NDX0JBU0VOQU1FXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9ERUNMX1NFRF0pZG5sCi1BQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCi1mdW5jX2NjX2Jhc2VuYW1lICQxCi1jY19iYXNlbmFtZT0kZnVuY19jY19iYXNlbmFtZV9yZXN1bHQKLV0pCi0KLQotIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAotIyBzZW5zaWJseSBhZnRlciAnbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KLW00X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKLVs6ICR7Q1A9ImNwIC1mIn0KLTogJHtNVj0ibXYgLWYifQotOiAke1JNPSJybSAtZiJ9Ci1dKSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUwotCi0KLSMgX0xUX1NFVFVQCi0jIC0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9TRVRVUF0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKLQotX0xUX0RFQ0woW10sIFtQQVRIX1NFUEFSQVRPUl0sIFsxXSwgW1RoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbV0pZG5sCi1kbmwKLV9MVF9ERUNMKFtdLCBbaG9zdF9hbGlhc10sIFswXSwgW1RoZSBob3N0IHN5c3RlbV0pZG5sCi1fTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCi1fTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCi1kbmwKLV9MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKLV9MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCi1fTFRfREVDTChbXSwgW2J1aWxkX29zXSwgWzBdKWRubAotZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAotQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCi1kbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCi10ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCi1fTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKLWRubAotQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAotX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAotX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAotZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAotbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DTURfVFJVTkNBVEVdKWRubAotCi1fTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCi0jIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKLSMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCi1pZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgotICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWZpCi1dKQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgotICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWZpCi0KLV9MVF9DSEVDS19PQkpESVIKLQotbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0gICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLSAgaWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgotICAgIENPTExFQ1RfTkFNRVM9Ci0gICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBHbG9iYWwgdmFyaWFibGVzOgotb2ZpbGU9bGlidG9vbAotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLQotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi0jIHdoaWNoIG5lZWRzICcubGliJykuCi1saWJleHQ9YQotCi13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotb2xkX0NDPSRDQwotb2xkX0NGTEFHUz0kQ0ZMQUdTCi0KLSMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCi10ZXN0IC16ICIkQ0MiICYmIENDPWNjCi10ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KLQotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0jIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKLXRlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCi1jYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotZmlsZV9tYWdpYyopCi0gIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KLSAgICBfTFRfUEFUSF9NQUdJQwotICBmaQotICA7OwotZXNhYwotCi0jIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotTFRfU1VQUE9SVEVEX1RBRyhbQ0NdKQotX0xUX0xBTkdfQ19DT05GSUcKLV9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCi1fTFRfQ09ORklHX0NPTU1BTkRTCi1dKSMgX0xUX1NFVFVQCi0KLQotIyBfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgYSBmZXcgc2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHAgdXMgZG8gcm9idXN0IHF1b3RpbmcuCi1tNF9kZWZ1bihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAotWyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KLSMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLWRvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KLWRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucwotbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCi1dKQotCi0jIF9MVF9QUk9HX0xUTUFJTgotIyAtLS0tLS0tLS0tLS0tLS0KLSMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tICdjb25maWd1cmUnLCBhbmQgJ2NvbmZpZy5zdGF0dXMnCi0jIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCi0jICdjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKLSMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KLW00X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAotW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQotbHRtYWluPSRhY19hdXhfZGlyL2x0bWFpbi5zaAotXSkjIF9MVF9QUk9HX0xUTUFJTgotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEFjY3VtdWxhdGUgY29kZSBmb3IgY3JlYXRpbmcgbGlidG9vbC4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBTbyB0aGF0IHdlIGNhbiByZWNyZWF0ZSBhIGZ1bGwgbGlidG9vbCBzY3JpcHQgaW5jbHVkaW5nIGFkZGl0aW9uYWwKLSMgdGFncywgd2UgYWNjdW11bGF0ZSB0aGUgY2h1bmtzIG9mIGNvZGUgdG8gc2VuZCB0byBBQ19DT05GSUdfQ09NTUFORFMKLSMgaW4gbWFjcm9zIGFuZCB0aGVuIG1ha2UgYSBzaW5nbGUgY2FsbCBhdCB0aGUgZW5kIHVzaW5nIHRoZSAnbGlidG9vbCcKLSMgbGFiZWwuCi0KLQotIyBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbSU5JVC1DT01NQU5EU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVnaXN0ZXIgSU5JVC1DT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgotbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xfSU5JVF0sCi1bbTRfaWZ2YWwoWyQxXSwKLSAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0sCi0gICAgICAgICAgICAgICAgICAgICBbJDEKLV0pXSldKQotCi0jIEluaXRpYWxpemUuCi1tNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSkKLQotCi0jIF9MVF9DT05GSUdfTElCVE9PTChbQ09NTUFORFNdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVnaXN0ZXIgQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KLW00X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MXSwKLVttNF9pZnZhbChbJDFdLAotICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sCi0gICAgICAgICAgICAgICAgICAgICBbJDEKLV0pXSldKQotCi0jIEluaXRpYWxpemUuCi1tNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10pCi0KLQotIyBfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoW0NPTU1BTkRTXSwgW0lOSVRfQ09NTUFORFNdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DT05GSUdfU0FWRV9DT01NQU5EU10sCi1bX0xUX0NPTkZJR19MSUJUT09MKFskMV0pCi1fTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbJDJdKQotXSkKLQotCi0jIF9MVF9GT1JNQVRfQ09NTUVOVChbQ09NTUVOVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFkZCBsZWFkaW5nIGNvbW1lbnQgbWFya3MgdG8gdGhlIHN0YXJ0IG9mIGVhY2ggbGluZSwgYW5kIGEgdHJhaWxpbmcKLSMgZnVsbC1zdG9wIHRvIHRoZSB3aG9sZSBjb21tZW50IGlmIG9uZSBpcyBub3QgcHJlc2VudCBhbHJlYWR5LgotbTRfZGVmaW5lKFtfTFRfRk9STUFUX0NPTU1FTlRdLAotW200X2lmdmFsKFskMV0sIFsKLW00X2JwYXRzdWJzdChbbTRfYnBhdHN1YnN0KFskMV0sIFteICpdLCBbIyBdKV0sCi0gICAgICAgICAgICAgIFtbJ2AkXF1dLCBbXFxcJl0pXW00X2JtYXRjaChbJDFdLCBbWyE/Ll0kXSwgW10sIFsuXSkKLSldKQotCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBGSVhNRTogRWxpbWluYXRlIFZBUk5BTUUgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0KLSMgX0xUX0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSwgW0lTLVRBR0dFRD9dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENPTkZJR05BTUUgaXMgdGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIHZhbHVlIGluIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSMgVkFSTkFNRSBpcyB0aGUgKGJhc2UpIG5hbWUgdXNlZCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KLSMgVkFMVUUgbWF5IGJlIDAsIDEgb3IgMiBmb3IgYSBjb21wdXRlZCBxdW90ZSBlc2NhcGVkIHZhbHVlIGJhc2VkIG9uCi0jIFZBUk5BTUUuICBBbnkgb3RoZXIgdmFsdWUgd2lsbCBiZSB1c2VkIGRpcmVjdGx5LgotbTRfZGVmaW5lKFtfTFRfREVDTF0sCi1bbHRfaWZfYXBwZW5kX3VuaXEoW2x0X2RlY2xfdmFybmFtZXNdLCBbJDJdLCBbLCBdLAotICAgIFtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtsaWJ0b29sX25hbWVdLAotCVttNF9pZnZhbChbJDFdLCBbJDFdLCBbJDJdKV0pCi0gICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbdmFsdWVdLCBbJDNdKQotICAgIG00X2lmdmFsKFskNF0sCi0JW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2Rlc2NyaXB0aW9uXSwgWyQ0XSldKQotICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwKLQlbdGFnZ2VkP10sIFttNF9pZnZhbChbJDVdLCBbeWVzXSwgW25vXSldKV0pCi1dKQotCi0KLSMgX0xUX1RBR0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbX0xUX1RBR0RFQ0xdLCBbX0xUX0RFQ0woWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgW3llc10pXSkKLQotCi0jIGx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfZGVjbF90YWdfdmFybmFtZXNdLAotW19sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFt5ZXNdLCAkQCldKQotCi0KLSMgX2x0X2RlY2xfZmlsdGVyKFNVQktFWSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfbHRfZGVjbF9maWx0ZXJdLAotW200X2Nhc2UoWyQjXSwKLSAgWzBdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCNdKV0sCi0gIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKLSAgWzJdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCi0gIFszXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbJDNdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCi0gIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgJEApXSlbXWRubAotXSkKLQotCi0jIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2RlY2xfcXVvdGVfdmFybmFtZXNdLAotW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMV0sICRAKV0pCi0KLQotIyBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzXSwKLVtfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzJdLCAkQCldKQotCi0KLSMgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCi1bbTRfYXNzZXJ0KFskIyA8PSAyXSlkbmwKLV8kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAotICAgIG00X2lmdmFsKFskMl0sIFtbJDJdXSwgW200X2RxdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyldKSwKLSAgICBtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfcXVvdGUoX0xUX1RBR1MpKSwgWyBdKSldKQotbTRfZGVmaW5lKFtfbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAotW200X2lmdmFsKFskM10sIFtsdF9jb21iaW5lKFskMV0sIFskMl0sIFtfXSwgJDMpXSldKQotCi0KLSMgbHRfZGVjbF9hbGxfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kZWNsX2FsbF92YXJuYW1lc10sCi1bXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCi0gICAgIG00X2lmKFskMl0sIFtdLAotCSAgIG00X3F1b3RlKGx0X2RlY2xfdmFybmFtZXMpLAotCW00X3F1b3RlKG00X3NoaWZ0KCRAKSkpKVtdZG5sCi1dKQotbTRfZGVmaW5lKFtfbHRfZGVjbF9hbGxfdmFybmFtZXNdLAotW2x0X2pvaW4oJEAsIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFskMV0sCi0JCQlsdF9kZWNsX3RhZ192YXJuYW1lcyhbWywgXV0sIG00X3NoaWZ0KCRAKSkpKWRubAotXSkKLQotCi0jIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoW1ZBUk5BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUXVvdGUgYSB2YXJpYWJsZSB2YWx1ZSwgYW5kIGZvcndhcmQgaXQgdG8gJ2NvbmZpZy5zdGF0dXMnIHNvIHRoYXQgaXRzCi0jIGRlY2xhcmF0aW9uIHRoZXJlIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiAnY29uZmlndXJlJy4gIFZBUk5BTUUKLSMgbXVzdCBoYXZlIGEgc2luZ2xlIHF1b3RlIGRlbGltaXRlZCB2YWx1ZSBmb3IgdGhpcyB0byB3b3JrLgotbTRfZGVmaW5lKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFXSwKLVskMT0nYCRFQ0hPICIkXVskMSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnXSkKLQotCi0jIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgV2UgZGVsaW1pdCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgd2l0aCBzaW5nbGUgcXVvdGVzLCBzbyB3aGVuCi0jIHdlIHdyaXRlIHRoZW0gdG8gY29uZmlnLnN0YXR1cywgd2UgaGF2ZSB0byBiZSBzdXJlIHRvIHF1b3RlIGFsbAotIyBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzIHByb3Blcmx5LiAgSW4gY29uZmlndXJlLCB0aGlzIG1hY3JvIGV4cGFuZHMKLSMgZWFjaCB2YXJpYWJsZSBkZWNsYXJlZCB3aXRoIF9MVF9ERUNMIChhbmQgX0xUX1RBR0RFQ0wpIGludG86Ci0jCi0jICAgIDx2YXI+PSdgJEVDSE8gIiQ8dmFyPiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1tNF9kZWZ1bihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TXSwKLVttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF9hbGxfdmFybmFtZXMpLAotICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCi0KLQotIyBfTFRfTElCVE9PTF9UQUdTCi0jIC0tLS0tLS0tLS0tLS0tLS0KLSMgT3V0cHV0IGNvbW1lbnQgYW5kIGxpc3Qgb2YgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIHNjcmlwdAotbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAotW19MVF9GT1JNQVRfQ09NTUVOVChbVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0XSlkbmwKLWF2YWlsYWJsZV90YWdzPSdfTFRfVEFHUydkbmwKLV0pCi0KLQotIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFeHRyYWN0IHRoZSBkaWN0aW9uYXJ5IHZhbHVlcyBmb3IgVkFSTkFNRSAob3B0aW9uYWxseSB3aXRoIFRBRykgYW5kCi0jIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgotIwotIyAgICAjIFNvbWUgY29tbWVudCBhYm91dCB3aGF0IFZBUiBpcyBmb3IuCi0jICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQotbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9ERUNMQVJFXSwKLVtfTFRfRk9STUFUX0NPTU1FTlQobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwKLQkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCi1tNF9wdXNoZGVmKFtfbGlidG9vbF9uYW1lXSwKLSAgICBtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbbGlidG9vbF9uYW1lXSkpKVtdZG5sCi1tNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKLSAgICBbMF0sIFtfbGlidG9vbF9uYW1lPVskXSQxXSwKLSAgICBbMV0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKLSAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKLSAgICBbX2xpYnRvb2xfbmFtZT1sdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKV0pW11kbmwKLW00X2lmdmFsKFskMl0sIFtfJDJdKVtdbTRfcG9wZGVmKFtfbGlidG9vbF9uYW1lXSlbXWRubAotXSkKLQotCi0jIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByb2R1Y2UgY29tbWVudGVkIGRlY2xhcmF0aW9ucyBvZiBub24tdGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcwotIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSAnbGlidG9vbCcKLSMgc2NyaXB0LiAgVGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyAoZXZlbiBmb3IgdGhlIExJQlRPT0wgQ09ORklHCi0jIHNlY3Rpb24pIGFyZSBwcm9kdWNlZCBieSBfTFRfTElCVE9PTF9UQUdfVkFSUy4KLW00X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCi1bbTRfZm9yZWFjaChbX2x0X3Zhcl0sCi0gICAgbTRfcXVvdGUoX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW25vXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpKSwKLSAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQotCi0KLSMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19MVF9MSUJUT09MX1RBR19WQVJTXSwKLVttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAotICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIsIFskMV0pXSldKV0pCi0KLQotIyBfTFRfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQotCi0KLSMgX0xUX0NPTkZJR19DT01NQU5EUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlbmQgYWNjdW11bGF0ZWQgb3V0cHV0IHRvICRDT05GSUdfU1RBVFVTLiAgVGhhbmtzIHRvIHRoZSBsaXN0cyBvZgotIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKLSMgdG8gX0xUX0RFQ0wsIHdlIGNhbiBwdXQgcXVvdGUgZXNjYXBlZCB2YXJpYWJsZXMgZGVjbGFyYXRpb25zCi0jIGludG8gJ2NvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgotIyBmb3IgbG9vcHMgaW4gJ2NvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAotIyBmcm9tIGNhbGxzIHRvIF9MVF9DT05GSUdfTElCVE9PTF9JTklUIGlzIGV4cGFuZGVkLgotbTRfZGVmdW4oW19MVF9DT05GSUdfQ09NTUFORFNdLAotW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAotCWRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaGFzIGJlZW4gcGxhY2VkIGluICRDT05GSUdfTFQsCi0JZG5sIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgYWxsIG92ZXIgYWdhaW4gaW50byBjb25maWcuc3RhdHVzLAotCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAotCWRubCBuZWVkcyB0byBrbm93IHdoYXQgbmFtZSBpcyBzdG9yZWQgdGhlcmU6Ci0gICAgICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAotICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKLSAgICBkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGlzIGRlc3RpbmVkIGZvciBjb25maWcuc3RhdHVzLAotICAgIGRubCBleHBhbmQgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIGFuZCBpbml0IGNvZGUgbm93OgotICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAotICAgICAgICBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSldKQotXSkjX0xUX0NPTkZJR19DT01NQU5EUwotCi0KLSMgSW5pdGlhbGl6ZS4KLW00X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAotWwotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1zZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCi1kb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCi1kZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JwotX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCi1MVENDPSckTFRDQycKLUxUQ0ZMQUdTPSckTFRDRkxBR1MnCi1jb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCi0KLSMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KLWZ1bmNfZmFsbGJhY2tfZWNobyAoKQotewotICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgotXCRbXTEKLV9MVEVDSE9fRU9GJwotfQotCi0jIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgotZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCi1dXSwgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyk7IGRvCi0gICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCi0gICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi1kb25lCi0KLSMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLWZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAotXV0sIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKTsgZG8KLSAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KLSAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcwotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLWRvbmUKLQotX0xUX09VVFBVVF9MSUJUT09MX0lOSVQKLV0pCi0KLSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoRklMRSwgW0NPTU1FTlRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgR2VuZXJhdGUgYSBjaGlsZCBzY3JpcHQgRklMRSB3aXRoIGFsbCBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnkgdG8KLSMgcmV1c2UgdGhlIGVudmlyb25tZW50IGxlYXJuZWQgYnkgdGhlIHBhcmVudCBzY3JpcHQsIGFuZCBtYWtlIHRoZQotIyBmaWxlIGV4ZWN1dGFibGUuICBJZiBDT01NRU5UIGlzIHN1cHBsaWVkLCBpdCBpcyBpbnNlcnRlZCBhZnRlciB0aGUKLSMgJyMhJyBzZXF1ZW5jZSBidXQgYmVmb3JlIGluaXRpYWxpemF0aW9uIHRleHQgYmVnaW5zLiAgQWZ0ZXIgdGhpcwotIyBtYWNybywgYWRkaXRpb25hbCB0ZXh0IGNhbiBiZSBhcHBlbmRlZCB0byBGSUxFIHRvIGZvcm0gdGhlIGJvZHkgb2YKLSMgdGhlIGNoaWxkIHNjcmlwdC4gIFRoZSBtYWNybyBlbmRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHRoZQotIyBmaWxlIGNvdWxkIG5vdCBiZSBmdWxseSB3cml0dGVuIChzdWNoIGFzIGlmIHRoZSBkaXNrIGlzIGZ1bGwpLgotbTRfaWZkZWYoW0FTX0lOSVRfR0VORVJBVEVEXSwKLVttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLFtBU19JTklUX0dFTkVSQVRFRCgkQCldKV0sCi1bbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSwKLVttNF9yZXF1aXJlKFtBU19QUkVQQVJFXSldZG5sCi1bbTRfcHVzaGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV1kbmwKLVtsdF93cml0ZV9mYWlsPTAKLWNhdCA+JDEgPDxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCi0jISAkU0hFTEwKLSMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KLSQyCi1TSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQotZXhwb3J0IFNIRUxMCi1fQVNFT0YKLWNhdCA+PiQxIDw8XF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKLUFTX1NIRUxMX1NBTklUSVpFCi1fQVNfUFJFUEFSRQotZXhlYyBBU19NRVNTQUdFX0ZEPiYxCi1fQVNFT0YKLXRlc3QgMCA9ICIkbHRfd3JpdGVfZmFpbCIgJiYgY2htb2QgK3ggJDFbXWRubAotbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKLQotIyBMVF9PVVRQVVQKLSMgLS0tLS0tLS0tCi0jIFRoaXMgbWFjcm8gYWxsb3dzIGVhcmx5IGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0IChiZWZvcmUKLSMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KLSMgdGVzdHMuCi1BQ19ERUZVTihbTFRfT1VUUFVUXSwKLVs6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQotQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCi1fTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChbIiRDT05GSUdfTFQiXSwKLVsjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgYSBsaWJ0b29sIHN0dWIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLl0pCi0KLWNhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKLWx0X2NsX3NpbGVudD1mYWxzZQotZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZwotewotICBlY2hvCi0gIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKLX0gPiZBU19NRVNTQUdFX0xPR19GRAotCi1sdF9jbF9oZWxwPSJcCi0nJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKLWZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcwotZ2VuZXJhdGVkLgotCi1Vc2FnZTogJFswXSBbW09QVElPTlNdXQotCi0gIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAotICAtcSwgLS1xdWlldCAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCi0gIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCi0KLVJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCi0KLWx0X2NsX3ZlcnNpb249IlwKLW00X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKLW00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCi1jb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KLQotQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWdpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKLQotd2hpbGUgdGVzdCAwICE9ICRbI10KLWRvCi0gIGNhc2UgJFsxXSBpbgotICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCi0gICAgICBlY2hvICIkbHRfY2xfdmVyc2lvbiI7IGV4aXQgMCA7OwotICAgIC0taGVscCB8IC0taCogfCAtaCApCi0gICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OwotICAgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQotICAgICAgZGVidWc9OiA7OwotICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQotICAgICAgbHRfY2xfc2lsZW50PTogOzsKLQotICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KLVRyeSAnJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7Ci0KLSAgICAqKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBhcmd1bWVudDogJFsxXQotVHJ5ICckWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKLSAgZXNhYwotICBzaGlmdAotZG9uZQotCi1pZiAkbHRfY2xfc2lsZW50OyB0aGVuCi0gIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKLWZpCi1fTFRFT0YKLQotY2F0ID4+IiRDT05GSUdfTFQiIDw8X0xURU9GCi1fTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAotX0xURU9GCi0KLWNhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKLUFDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCi1fTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFMKLUFTX0VYSVQoMCkKLV9MVEVPRgotY2htb2QgK3ggIiRDT05GSUdfTFQiCi0KLSMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCi0jIGFwcGVuZGluZyB0byBjb25maWcubG9nLCB3aGljaCBmYWlscyBvbiBET1MsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdAotIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCi0jIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCi1sdF9jbF9zdWNjZXNzPToKLXRlc3QgeWVzID0gIiRzaWxlbnQiICYmCi0gIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKLWV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCi0kU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCi1leGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCi0kbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCi1dKSMgTFRfT1VUUFVUCi0KLQotIyBfTFRfQ09ORklHKFRBRykKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKLSMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCi0jIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKLSMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgotbTRfZGVmdW4oW19MVF9DT05GSUddLAotW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKLSAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCi0gIG00X2lmKF9MVF9UQUcsIFtDXSwgWwotICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgotICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KLSAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gICAgZmkKLQotICAgIGNmZ2ZpbGU9JHtvZmlsZX1UCi0gICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKLSAgICAkUk0gIiRjZmdmaWxlIgotCi0gICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0jISAkU0hFTEwKLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSkgJFZFUlNJT04KLSMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgotCi0jIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2Ci0KLV9MVF9DT1BZSU5HCi1fTFRfTElCVE9PTF9UQUdTCi0KLSMgQ29uZmlndXJlZCBkZWZhdWx0cyBmb3Igc3lzX2xpYl9kbHNlYXJjaF9wYXRoIG11bmdpbmcuCi06IFwke0xUX1NZU19MSUJSQVJZX1BBVEg9IiRjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIn0KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKLV9MVF9MSUJUT09MX0NPTkZJR19WQVJTCi1fTFRfTElCVE9PTF9UQUdfVkFSUwotIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCi0KLV9MVF9FT0YKLQotICAgIGNhdCA8PCdfTFRfRU9GJyA+PiAiJGNmZ2ZpbGUiCi0KLSMgIyMjIEJFR0lOIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKLQotX0xUX1BSRVBBUkVfTVVOR0VfUEFUSF9MSVNUCi1fTFRfUFJFUEFSRV9DQ19CQVNFTkFNRQotCi0jICMjIyBFTkQgRlVOQ1RJT05TIFNIQVJFRCBXSVRIIENPTkZJR1VSRQotCi1fTFRfRU9GCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0jIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotaWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLV9MVF9FT0YKLSAgICA7OwotICBlc2FjCi0KLSAgX0xUX1BST0dfTFRNQUlOCi0KLSAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCi0gICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLSAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0gICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKLSAgY2htb2QgK3ggIiRvZmlsZSIKLV0sCi1bY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgotCi1kbmwgVW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIHVzZSAkMSBoZXJlLCBzaW5jZSBfTFRfVEFHIGlzIG5vdCBleHBhbmRlZAotZG5sIGluIGEgY29tbWVudCAoaWUgYWZ0ZXIgYSAjKS4KLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKLV9MVF9MSUJUT09MX1RBR19WQVJTKF9MVF9UQUcpCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkMQotX0xUX0VPRgotXSlkbmwgL200X2lmCi1dLAotW200X2lmKFskMV0sIFtdLCBbCi0gICAgUEFDS0FHRT0nJFBBQ0tBR0UnCi0gICAgVkVSU0lPTj0nJFZFUlNJT04nCi0gICAgUk09JyRSTScKLSAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQotXSlkbmwgL19MVF9DT05GSUdfU0FWRV9DT01NQU5EUwotXSkjIF9MVF9DT05GSUcKLQotCi0jIExUX1NVUFBPUlRFRF9UQUcoVEFHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJhY2UgdGhpcyBtYWNybyB0byBkaXNjb3ZlciB3aGF0IHRhZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlidG9vbAotIyAtLXRhZyBvcHRpb24sIHVzaW5nOgotIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJwotQUNfREVGVU4oW0xUX1NVUFBPUlRFRF9UQUddLCBbXSkKLQotCi0jIEMgc3VwcG9ydCBpcyBidWlsdC1pbiBmb3Igbm93Ci1tNF9kZWZpbmUoW19MVF9MQU5HX0NfZW5hYmxlZF0sIFtdKQotbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQotCi0KLSMgTFRfTEFORyhMQU5HKQotIyAtLS0tLS0tLS0tLS0tCi0jIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZiBub3QgYWxyZWFkeSBlbmFibGVkLgotQUNfREVGVU4oW0xUX0xBTkddLAotW0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKLW00X2Nhc2UoWyQxXSwKLSAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCi0gIFtDKytdLAkJW19MVF9MQU5HKENYWCldLAotICBbR29dLAkJCVtfTFRfTEFORyhHTyldLAotICBbSmF2YV0sCQlbX0xUX0xBTkcoR0NKKV0sCi0gIFtGb3J0cmFuIDc3XSwJCVtfTFRfTEFORyhGNzcpXSwKLSAgW0ZvcnRyYW5dLAkJW19MVF9MQU5HKEZDKV0sCi0gIFtXaW5kb3dzIFJlc291cmNlXSwJW19MVF9MQU5HKFJDKV0sCi0gIFttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19DT05GSUddLAotICAgIFtfTFRfTEFORygkMSldLAotICAgIFttNF9mYXRhbChbJDA6IHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAiJDEiXSldKV0pZG5sCi1dKSMgTFRfTEFORwotCi0KLSMgX0xUX0xBTkcoTEFOR05BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9MQU5HXSwKLVttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10sCi0gIFtMVF9TVVBQT1JURURfVEFHKFskMV0pZG5sCi0gIG00X2FwcGVuZChbX0xUX1RBR1NdLCBbJDEgXSlkbmwKLSAgbTRfZGVmaW5lKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSlkbmwKLSAgX0xUX0xBTkdfJDFfQ09ORklHKCQxKV0pZG5sCi1dKSMgX0xUX0xBTkcKLQotCi1tNF9pZm5kZWYoW0FDX1BST0dfR09dLCBbCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIwotIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfR08uICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICAjCi0jICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKLSMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1tNF9kZWZ1bihbQUNfUFJPR19HT10sCi1bQUNfTEFOR19QVVNIKEdvKWRubAotQUNfQVJHX1ZBUihbR09DXSwgICAgIFtHbyBjb21waWxlciBjb21tYW5kXSlkbmwKLUFDX0FSR19WQVIoW0dPRkxBR1NdLCBbR28gY29tcGlsZXIgZmxhZ3NdKWRubAotX0FDX0FSR19WQVJfTERGTEFHUygpZG5sCi1BQ19DSEVDS19UT09MKEdPQywgZ2NjZ28pCi1pZiB0ZXN0IC16ICIkR09DIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgQUNfQ0hFQ0tfUFJPRyhHT0MsIFske2FjX3Rvb2xfcHJlZml4fWdjY2dvXSwgWyR7YWNfdG9vbF9wcmVmaXh9Z2NjZ29dKQotICBmaQotZmkKLWlmIHRlc3QgLXogIiRHT0MiOyB0aGVuCi0gIEFDX0NIRUNLX1BST0coR09DLCBnY2NnbywgZ2NjZ28sIGZhbHNlKQotZmkKLV0pI200X2RlZnVuCi1dKSNtNF9pZm5kZWYKLQotCi0jIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAotW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCi0gIFtMVF9MQU5HKENYWCldLAotICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQotCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAotICBbTFRfTEFORyhGNzcpXSwKLSAgW200X2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0xUX0xBTkcoRjc3KV0pXSkKLQotQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAotICBbTFRfTEFORyhGQyldLAotICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQotCi1kbmwgVGhlIGNhbGwgdG8gW0FdW01fUFJPR19HQ0pdIGlzIHF1b3RlZCBsaWtlIHRoYXQgdG8gc3RvcCBhY2xvY2FsCi1kbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCi0gIFtMVF9MQU5HKEdDSildLAotICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAotICAgIFtMVF9MQU5HKEdDSildLAotICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19HQ0pdLAotICAgICAgW0xUX0xBTkcoR0NKKV0sCi0gICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKLQlbbTRfZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQotICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKLQlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKLSAgICAgICBtNF9pZmRlZihbTFRfUFJPR19HQ0pdLAotCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCi0KLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dPXSwKLSAgW0xUX0xBTkcoR08pXSwKLSAgW200X2RlZmluZShbQUNfUFJPR19HT10sIGRlZm4oW0FDX1BST0dfR09dKVtMVF9MQU5HKEdPKV0pXSkKLQotQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfUkNdLAotICBbTFRfTEFORyhSQyldLAotICBbbTRfZGVmaW5lKFtMVF9QUk9HX1JDXSwgZGVmbihbTFRfUFJPR19SQ10pW0xUX0xBTkcoUkMpXSldKQotXSkjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCi0KLSMgT2Jzb2xldGUgbWFjcm9zOgotQVVfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW0xUX0xBTkcoQysrKV0pCi1BVV9ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbTFRfTEFORyhGb3J0cmFuIDc3KV0pCi1BVV9ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtMVF9MQU5HKEZvcnRyYW4pXSkKLUFVX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtMVF9MQU5HKEphdmEpXSkKLUFVX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW0xUX0xBTkcoV2luZG93cyBSZXNvdXJjZSldKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCi1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCi1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbXSkKLQotCi0jIF9MVF9UQUdfQ09NUElMRVIKLSMgLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotCi1fTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCi1fTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCi1fTFRfVEFHREVDTChbQ0NdLCBbY29tcGlsZXJdLCBbMV0sIFtBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyXSlkbmwKLV9MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi1dKSMgX0xUX1RBR19DT01QSUxFUgotCi0KLSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKLSMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCi1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKLVttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gY29uZnRlc3QqCi1dKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0KLQotIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAotIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgotbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gLXIgY29uZnRlc3QqCi1dKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4qKQotICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCi0gICAgQUNfQ0hFQ0tfVE9PTChbTElQT10sIFtsaXBvXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKLSAgICBfTFRfREVDTChbXSwgW0RTWU1VVElMXSwgWzFdLAotICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQotICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAotICAgICAgW1Rvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYXSkKLSAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCi0gICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCi0gICAgX0xUX0RFQ0woW10sIFtPVE9PTF0sIFsxXSwKLSAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCi0gICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAotICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40XSkKLQotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKLSAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBpZiB0ZXN0IC16ICIkTFRfTVVMVElfTU9EVUxFIjsgdGhlbgotCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQotCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQotCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKLQkjIGxpbmsgZmxhZ3MuCi0Jcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgotCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCi0JZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLS1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0JJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLQkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCi0gICAgICAgIF9sdF9yZXN1bHQ9JD8KLQkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgotCSMgYXBwZWFycyBpbiBpdCwgYXNzdW1lIHRoZSBmbGFnIGNhdXNlZCBhIGxpbmtlciB3YXJuaW5nCi0gICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCi0JICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLQkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQotCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCi0JZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCI7IHRoZW4KLQkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0JZWxzZQotCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0JZmkKLQlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCi0Jcm0gLWYgY29uZnRlc3QuKgotICAgICAgZmldKQotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKLSAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAotICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubwotICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KLSAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKLSAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKLQlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCi0JW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCi0JTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0gICAgXSkKLQotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKLSAgICAgIFtsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCi0gICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLWludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9Ci1fTFRfRU9GCi0gICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLWludCBtYWluKCkgeyByZXR1cm4gMDt9Ci1fTFRfRU9GCi0gICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCi0gICAgICBfbHRfcmVzdWx0PSQ/Ci0gICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgotCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCIgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKLSAgICAgIGVsc2UKLQljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgIGZpCi0gICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKLSAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KLSAgICBdKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbjEuKikKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgotICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cwotICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKLSAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PwotICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgotCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0JMTAuW1swMTJdXVtbLC5dXSopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLQkxMC4qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKLSAgICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCi0gICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJwotICAgIGZpCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCI7IHRoZW4KLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAkd2wtZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltJwotICAgIGVsc2UKLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltICRsaWInCi0gICAgZmkKLSAgICBpZiB0ZXN0IDogIT0gIiREU1lNVVRJTCIgJiYgdGVzdCBubyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KLSAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCi0gICAgZWxzZQotICAgICAgX2x0X2RzeW11dGlsPQotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotXSkKLQotCi0jIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgotbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKLVsKLSAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQotICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KLSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKLSAgICBtNF9jYXNlKFskMV0sIFtGNzddLCBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdLAotICAgICAgICAgICAgICAgICAgW0ZDXSwgIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10pCi0gIGVsc2UKLSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKLSAgZmkKLSAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKLSAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKLSAgZXNhYwotICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKLSAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCi0gICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCi0gICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgotICAgIG00X2lmKFskMV0sIFtDWFhdLAotWyAgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZHN5bXV0aWwiCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgotICAgIGZpCi1dLFtdKQotICBlbHNlCi0gIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgZmkKLV0pCi0KLSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKLSMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAotIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCi0jIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KLSMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKLSMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCi0jIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KLSMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KLW00X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLWlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi1lbHNlCi0gIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAotICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWwotICBsdF9haXhfbGlicGF0aF9zZWQ9J1sKLSAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkgIC9eMC8gewotCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0JICAgICAgcAotCSAgfQotICAgICAgfV0nCi0gIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KLSAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSAgZmldLFtdKQotICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9L3Vzci9saWI6L2xpYgotICBmaQotICBdKQotICBhaXhfbGlicGF0aD0kX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkKLWZpCi1dKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKLQotCi0jIF9MVF9TSEVMTF9JTklUKEFSRykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCi1bbTRfZGl2ZXJ0X3RleHQoW000U0gtSU5JVF0sIFskMQotXSldKSMgX0xUX1NIRUxMX0lOSVQKLQotCi0KLSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRmluZCBob3cgd2UgY2FuIGZha2UgYW4gZWNobyBjb21tYW5kIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaC4KLSMgSW4gcGFydGljdWxhciwgd2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyIHdlIGFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0Ci0jIG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB0aGF0IHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCi0jIHByaW50ZiAodGhhdCB3ZSBjYW4gdXNlIGFzIGFuIGVjaG8gY29tbWFuZCkuCi1tNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAotW0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCi1FQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLUVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi0KLUFDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQotIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCi1pZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKLSAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi0gIEVDSE89J3ByaW50IC1yIC0tJwotZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLSAgRUNITz0ncHJpbnRmICVzXG4nCi1lbHNlCi0gICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KLSAgZnVuY19mYWxsYmFja19lY2hvICgpCi0gIHsKLSAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgotJFtdMQotX0xURUNIT19FT0YnCi0gIH0KLSAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJwotZmkKLQotIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgotIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgotZnVuY19lY2hvX2FsbCAoKQotewotICAgICRFQ0hPICIkKiIKLX0KLQotY2FzZSAkRUNITyBpbgotICBwcmludGYqKSBBQ19NU0dfUkVTVUxUKFtwcmludGZdKSA7OwotICBwcmludCopIEFDX01TR19SRVNVTFQoW3ByaW50IC1yXSkgOzsKLSAgKikgQUNfTVNHX1JFU1VMVChbY2F0XSkgOzsKLWVzYWMKLQotbTRfaWZkZWYoW19BU19ERVRFQ1RfU1VHR0VTVEVEXSwKLVtfQVNfREVURUNUX1NVR0dFU1RFRChbCi0gIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSR7QkFTSF9WRVJTSU9OK3NldH0iIHx8ICgKLSAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwotICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwotICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi0gICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAotICAgIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPYCIgPSAiWCRFQ0hPIiBcCi0gICAgICB8fCB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPYCIgPSAiWCRFQ0hPIiApXSldKQotCi1fTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCi1fTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCi1dKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKLQotCi0jIF9MVF9XSVRIX1NZU1JPT1QKLSMgLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAotW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQotQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAotW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3lzcm9vdEA8OkA9RElSQDo+QF0sCi0gIFtTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdAotICAgaWYgbm90IHNwZWNpZmllZCkuXSldLAotW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQotCi1kbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCi1kbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KLWx0X3N5c3Jvb3Q9Ci1jYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKLSB5ZXMpCi0gICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAotICAgZmkKLSAgIDs7ICMoCi0gLyopCi0gICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICA7OyAjKAotIG5vfCcnKQotICAgOzsgIygKLSAqKQotICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfc3lzcm9vdF0pCi0gICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQotICAgOzsKLWVzYWMKLQotIEFDX01TR19SRVNVTFQoWyR7bHRfc3lzcm9vdDotbm99XSkKLV9MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAotW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCB3aGVyZSBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQotCi0jIF9MVF9FTkFCTEVfTE9DSwotIyAtLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAotW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCi0gIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCi0gICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCi10ZXN0IG5vID0gIiRlbmFibGVfbGlidG9vbF9sb2NrIiB8fCBlbmFibGVfbGlidG9vbF9sb2NrPXllcwotCi0jIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKLSMgbGlidG9vbCBzdXBwb3J0LgotY2FzZSAkaG9zdCBpbgotaWE2NC0qLWhwdXgqKQotICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbW9kZQotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKkVMRi0zMiopCi0JSFBVWF9JQTY0X01PREU9MzIKLQk7OwotICAgICAgKkVMRi02NCopCi0JSFBVWF9JQTY0X01PREU9NjQKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCi0gIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKLQkgIDs7Ci0JKjY0LWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCi0JOzsKLSAgICAgIGVzYWMKLSAgICBlbHNlCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLTMyIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbjMyIgotCSAgOzsKLQkqNjQtYml0KikKLQkgIExEPSIke0xELWxkfSAtNjQiCi0JICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotbWlwczY0Ki0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCi0gICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KLSAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGVtdWw9ZWxmCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKjMyLWJpdCopCi0JZW11bD0iJHtlbXVsfTMyIgotCTs7Ci0gICAgICAqNjQtYml0KikKLQllbXVsPSIke2VtdWx9NjQiCi0JOzsKLSAgICBlc2FjCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKk1TQiopCi0JZW11bD0iJHtlbXVsfWJ0c21pcCIKLQk7OwotICAgICAgKkxTQiopCi0JZW11bD0iJHtlbXVsfWx0c21pcCIKLQk7OwotICAgIGVzYWMKLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgICAqTjMyKikKLQllbXVsPSIke2VtdWx9bjMyIgotCTs7Ci0gICAgZXNhYwotICAgIExEPSIke0xELWxkfSAtbSAkZW11bCIKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi14ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAotczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgdGhlIGxpc3RlZCBjYXNlcyBvbmx5IGNvdmVyIHRoZQotICAjIHNpdHVhdGlvbnMgd2hlcmUgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIChzdWNoIGFzIHdoZW4KLSAgIyBkb2luZyAzMi1iaXQgY29tcGlsYXRpb24gZm9yIGEgaG9zdCB3aGVyZSBsZCBkZWZhdWx0cyB0byA2NC1iaXQsIG9yCi0gICMgdmljZSB2ZXJzYSk7IHRoZSBjb21tb24gY2FzZXMgd2hlcmUgbm8gbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCBkbwotICAjIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICAgKjMyLWJpdCopCi0JY2FzZSAkaG9zdCBpbgotCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKLQkgICAgOzsKLQkgIHg4Nl82NC0qbGludXgqKQotCSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0JICAgICAgKng4Ni02NCopCi0JCUxEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCi0JCTs7Ci0JICAgICAgKikKLQkJTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotCQk7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICBwb3dlcnBjNjRsZS0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCi0JICAgIDs7Ci0JICBwb3dlcnBjNjQtKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCi0JICAgIDs7Ci0JICBzMzkweC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCi0JICAgIDs7Ci0JICBzcGFyYzY0LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgICo2NC1iaXQqKQotCWNhc2UgJGhvc3QgaW4KLQkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKLQkgICAgOzsKLQkgIHg4Nl82NC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKLQkgICAgOzsKLQkgIHBvd2VycGNsZS0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgotCSAgICA7OwotCSAgcG93ZXJwYy0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCi0JICAgIDs7Ci0JICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKLQkgICAgOzsKLQkgIHNwYXJjKi0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLSotKi1zY28zLjJ2NSopCi0gICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KLSAgU0FWRV9DRkxBR1M9JENGTEFHUwotICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCi0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKLSAgICBbQUNfTEFOR19QVVNIKEMpCi0gICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCi0gICAgIEFDX0xBTkdfUE9QXSkKLSAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9jY19uZWVkc19iZWxmIjsgdGhlbgotICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0kU0FWRV9DRkxBR1MKLSAgZmkKLSAgOzsKLSotKnNvbGFyaXMqKQotICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCi0gICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgKjY0LWJpdCopCi0gICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgotICAgICAgeWVzKikKLSAgICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICBpPzg2LSotc29sYXJpcyp8eDg2XzY0LSotc29sYXJpcyopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCi0gICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICBMRD0ke0xELWxkfV9zb2wyCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0gICAgICAqKQotCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgTEQ9IiR7TEQtbGR9IC02NCIKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotZXNhYwotCi1uZWVkX2xvY2tzPSRlbmFibGVfbGlidG9vbF9sb2NrCi1dKSMgX0xUX0VOQUJMRV9MT0NLCi0KLQotIyBfTFRfUFJPR19BUgotIyAtLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9QUk9HX0FSXSwKLVtBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCi06ICR7QVI9YXJ9Ci06ICR7QVJfRkxBR1M9Y3J1fQotX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCi1fTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdLCBbRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmVdKQotCi1BQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCi0gIFtsdF9jdl9hcl9hdF9maWxlPW5vCi0gICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKLSAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAotICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJwotICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCi0gICAgICBpZiB0ZXN0IDAgLWVxICIkYWNfc3RhdHVzIjsgdGhlbgotCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCi0Jcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCi0JQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCi0JaWYgdGVzdCAwIC1uZSAiJGFjX3N0YXR1cyI7IHRoZW4KLSAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKLSAgICAgXSkKLSAgXSkKLQotaWYgdGVzdCBubyA9ICIkbHRfY3ZfYXJfYXRfZmlsZSI7IHRoZW4KLSAgYXJjaGl2ZXJfbGlzdF9zcGVjPQotZWxzZQotICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKLWZpCi1fTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKLSAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCi1dKSMgX0xUX1BST0dfQVIKLQotCi0jIF9MVF9DTURfT0xEX0FSQ0hJVkUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAotW19MVF9QUk9HX0FSCi0KLUFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQotdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06Ci1fTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQotCi1BQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQotdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKLV9MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAotICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQotCi0jIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KLQotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBiaXRyaWcqIHwgb3BlbmJzZCopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJHRvb2xfb2xkbGliIgotICAgIDs7Ci0gICopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgotICAgIDs7Ci0gIGVzYWMKLSAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKLWZpCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7Ci0gICopCi0gICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Ci1lc2FjCi1fTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQotX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQotX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAotICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKLV9MVF9ERUNMKFtdLCBbbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uXSwgWzBdLAotICAgIFtXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb25dKQotXSkjIF9MVF9DTURfT0xEX0FSQ0hJVkUKLQotCi0jIF9MVF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCi0jCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAotW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCi0gIFskMj1ubwotICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkMyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50Ci0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICQyPXllcwotICAgICBmaQotICAgZmkKLSAgICRSTSBjb25mdGVzdCoKLV0pCi0KLWlmIHRlc3QgeWVzID0gIlskXSQyIjsgdGhlbgotICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKLWVsc2UKLSAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCi1maQotXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KLQotIyBPbGQgbmFtZToKLUFVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKLQotCi0jIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAotIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKLVttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAotICBbJDI9bm8KLSAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgTERGTEFHUz0iJExERkxBR1MgJDMiCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAkMj15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgJDI9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi1dKQotCi1pZiB0ZXN0IHllcyA9ICJbJF0kMiI7IHRoZW4KLSAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCi1lbHNlCi0gICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQotZmkKLV0pIyBfTFRfTElOS0VSX09QVElPTgotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQotCi0KLSMgTFRfQ01EX01BWF9MRU4KLSMtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi1BQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAotICBpPTAKLSAgdGVzdHN0cmluZz1BQkNECi0KLSAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgbXNkb3NkamdwcCopCi0gICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYwotICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KLSAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcwotICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKLSAgICA7OwotCi0gIGdudSopCi0gICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCi0gICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7Ci0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQotICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCi0gICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KLSAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAotICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKLSAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCi0gICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5Ci0gICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIG1pbnQqKQotICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIGFtaWdhb3MqKQotICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KLSAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYml0cmlnKiB8IGRhcndpbiogfCBkcmFnb25mbHkqIHwgZnJlZWJzZCogfCBuZXRic2QqIHwgb3BlbmJzZCopCi0gICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCi0gICAgZmkKLSAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICA7OwotCi0gIGludGVyaXgqKQotICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKLSAgICA7OwotCi0gIG9zMiopCi0gICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCi0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iICYmIFwKLSAgICAgICB0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIGVsc2UKLSAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KLSAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KLSAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgODsgZG8KLSAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCi0gICAgICBkb25lCi0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQotICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKLSAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0Ci0gICAgICAjIHdlIGNhbid0IHRlbGwuCi0gICAgICB3aGlsZSB7IHRlc3QgWGBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKLQkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgdGVzdCAxNyAhPSAiJGkiICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAotICAgICAgdGVzdHN0cmluZz0KLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KLSAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCi0gICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi1dKQotaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vbmUpCi1maQotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotX0xUX0RFQ0woW10sIFttYXhfY21kX2xlbl0sIFswXSwKLSAgICBbV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kP10pCi1dKSMgTFRfQ01EX01BWF9MRU4KLQotIyBPbGQgbmFtZToKLUFVX0FMSUFTKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtMVF9DTURfTUFYX0xFTl0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW10pCi0KLQotIyBfTFRfSEVBREVSX0RMRkNOCi0jIC0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfSEVBREVSX0RMRkNOXSwKLVtBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pZG5sCi1dKSMgX0xUX0hFQURFUl9ETEZDTgotCi0KLSMgX0xUX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAotIyAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKLVttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKLWlmIHRlc3QgeWVzID0gIiRjcm9zc19jb21waWxpbmciOyB0aGVuIDoKLSAgWyQ0XQotZWxzZQotICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi1bI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0KLSNpZiBIQVZFX0RMRkNOX0gKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWZkZWYgUlRMRF9HTE9CQUwKLSMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKLSNlbHNlCi0jICBpZmRlZiBETF9HTE9CQUwKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKLSMgIGVsc2UKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKLSAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KLSNpZm5kZWYgTFRfRExMQVpZX09SX05PVwotIyAgaWZkZWYgUlRMRF9MQVpZCi0jICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKLSMgIGVsc2UKLSMgICAgaWZkZWYgRExfTEFaWQotIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCi0jICAgIGVsc2UKLSMgICAgICBpZmRlZiBSVExEX05PVwotIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKLSMgICAgICBlbHNlCi0jICAgICAgICBpZmRlZiBETF9OT1cKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCi0jICAgICAgICBlbHNlCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2hlbiAtZnZpc2liaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi1pbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0jZW5kaWYKLQotaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci1pbnQgbWFpbiAoKQotewotICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLSAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247Ci0KLSAgaWYgKHNlbGYpCi0gICAgewotICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLQkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKLSAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOwotCX0KLSAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLwotICAgIH0KLSAgZWxzZQotICAgIHB1dHMgKGRsZXJyb3IgKCkpOwotCi0gIHJldHVybiBzdGF0dXM7Ci19XQotX0xUX0VPRgotICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zICJjb25mdGVzdCRhY19leGVleHQiIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAotICAgIGx0X3N0YXR1cz0kPwotICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KLSAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7Ci0gICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7Ci0gICAgICB4JGx0X2RsdW5rbm93bnx4KikgJDMgOzsKLSAgICBlc2FjCi0gIGVsc2UgOgotICAgICMgY29tcGlsYXRpb24gZmFpbGVkCi0gICAgJDMKLSAgZmkKLWZpCi1ybSAtZnIgY29uZnRlc3QqCi1dKSMgX0xUX1RSWV9ETE9QRU5fU0VMRgotCi0KLSMgTFRfU1lTX0RMT1BFTl9TRUxGCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCi1bbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCi1pZiB0ZXN0IHllcyAhPSAiJGVuYWJsZV9kbG9wZW4iOyB0aGVuCi0gIGVuYWJsZV9kbG9wZW49dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KLWVsc2UKLSAgbHRfY3ZfZGxvcGVuPW5vCi0gIGx0X2N2X2Rsb3Blbl9saWJzPQotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPWxvYWRfYWRkX29uCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0gICAgOzsKLQotICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBsdF9jdl9kbG9wZW49TG9hZExpYnJhcnkKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICA7OwotCi0gIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgIDs7Ci0KLSAgZGFyd2luKikKLSAgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAotICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKLQkJW2x0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbF0sWwotICAgIGx0X2N2X2Rsb3Blbj1keWxkCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0gICAgXSkKLSAgICA7OwotCi0gIHRwZiopCi0gICAgIyBEb24ndCB0cnkgdG8gcnVuIGFueSBsaW5rIHRlc3RzIGZvciBUUEYuICBXZSBrbm93IGl0J3MgaW1wb3NzaWJsZQotICAgICMgYmVjYXVzZSBUUEYgaXMgYSBjcm9zcy1jb21waWxlciwgYW5kIHdlIGtub3cgaG93IHdlIG9wZW4gRFNPcy4KLSAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KLSAgICA7OwotCi0gICopCi0gICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAotCSAgW2x0X2N2X2Rsb3Blbj1zaGxfbG9hZF0sCi0gICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAotCSAgICBbbHRfY3ZfZGxvcGVuPXNobF9sb2FkIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkXSwKLQlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKLQkgICAgICBbbHRfY3ZfZGxvcGVuPWRsb3Blbl0sCi0JICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsXSwKLQkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAotCQkgIFtsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sc3ZsZF0sCi0JICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKLQkJICAgIFtsdF9jdl9kbG9wZW49ZGxkX2xpbmsgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGRdKQotCSAgICAgIF0pCi0JICAgIF0pCi0JICBdKQotCV0pCi0gICAgICBdKQotICAgIDs7Ci0gIGVzYWMKLQotICBpZiB0ZXN0IG5vID0gIiRsdF9jdl9kbG9wZW4iOyB0aGVuCi0gICAgZW5hYmxlX2Rsb3Blbj1ubwotICBlbHNlCi0gICAgZW5hYmxlX2Rsb3Blbj15ZXMKLSAgZmkKLQotICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KLSAgZGxvcGVuKQotICAgIHNhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gICAgdGVzdCB5ZXMgPSAiJGFjX2N2X2hlYWRlcl9kbGZjbl9oIiAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgotCi0gICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgotCi0gICAgc2F2ZV9MSUJTPSRMSUJTCi0gICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLQkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCi0JICBfTFRfVFJZX0RMT1BFTl9TRUxGKAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQotICAgIF0pCi0KLSAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCi0gICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCi0JICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKLQkgIF9MVF9UUllfRExPUEVOX1NFTEYoCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKLSAgICAgIF0pCi0gICAgZmkKLQotICAgIENQUEZMQUdTPSRzYXZlX0NQUEZMQUdTCi0gICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0gICAgTElCUz0kc2F2ZV9MSUJTCi0gICAgOzsKLSAgZXNhYwotCi0gIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OwotICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OwotICBlc2FjCi1maQotX0xUX0RFQ0woW2Rsb3Blbl9zdXBwb3J0XSwgW2VuYWJsZV9kbG9wZW5dLCBbMF0sCi0JIFtXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWRdKQotX0xUX0RFQ0woW2Rsb3Blbl9zZWxmXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl0sIFswXSwKLQkgW1doZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCi1fTFRfREVDTChbZGxvcGVuX3NlbGZfc3RhdGljXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWNdLCBbMF0sCi0JIFtXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQotXSkjIExUX1NZU19ETE9QRU5fU0VMRgotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbTFRfU1lTX0RMT1BFTl9TRUxGXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtdKQotCi0KLSMgX0xUX0NPTVBJTEVSX0NfTyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlci4KLSMgVGhpcyBtYWNybyBkb2VzIG5vdCBoYXJkIGNvZGUgdGhlIGNvbXBpbGVyIGxpa2UgQUNfUFJPR19DQ19DX08uCi1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0NfT10sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLW00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dF0sCi0gIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSldLAotICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPW5vCi0gICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAotICAgJFJNIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgJFJNIC1yIGNvbmZ0ZXN0Ci0gICAkUk0gY29uZnRlc3QqCi1dKQotX0xUX1RBR0RFQ0woW2NvbXBpbGVyX2Nfb10sIFtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb10sIFsxXSwKLQlbRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zP10pCi1dKSMgX0xUX0NPTVBJTEVSX0NfTwotCi0KLSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCi1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1NdLAotW200X3JlcXVpcmUoW19MVF9FTkFCTEVfTE9DS10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLV9MVF9DT01QSUxFUl9DX08oWyQxXSkKLQotaGFyZF9saW5rcz1ub3R0ZXN0ZWQKLWlmIHRlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCi0gIGhhcmRfbGlua3M9eWVzCi0gICRSTSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKLSAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCi0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi1fTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQotXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCi0KLQotIyBfTFRfQ0hFQ0tfT0JKRElSCi0jIC0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAotW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCi1ta2RpciAubGlicyAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAubGliczsgdGhlbgotICBsdF9jdl9vYmpkaXI9LmxpYnMKLWVsc2UKLSAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KLSAgbHRfY3Zfb2JqZGlyPV9saWJzCi1maQotcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQotb2JqZGlyPSRsdF9jdl9vYmpkaXIKLV9MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAotICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCi1tNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAotQUNfREVGSU5FX1VOUVVPVEVEKFtMVF9PQkpESVJdLCAiJGx0X2N2X29iamRpci8iLAotICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IHdoZXJlIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQotXSkjIF9MVF9DSEVDS19PQkpESVIKLQotCi0jIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KLW00X2RlZnVuKFtfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEhdLAotW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQotaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fAotICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKLSAgIHRlc3QgeWVzID0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIjsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgJiYKLSAgICAgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIjsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAotZmkKLUFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKLQotaWYgdGVzdCByZWxpbmsgPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiIHx8Ci0gICB0ZXN0IHllcyA9ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8Ci0gICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCi0gICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKLV0pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKLQotCi0jIF9MVF9DTURfU1RSSVBMSUIKLSMgLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKLXN0cmlwbGliPQotb2xkX3N0cmlwbGliPQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQotaWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KLSAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKLSAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCi0gIEFDX01TR19SRVNVTFQoW3llc10pCi1lbHNlCi0jIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCi0gICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKLSAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgIGZpCi0gICAgOzsKLSAgKikKLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0gICAgOzsKLSAgZXNhYwotZmkKLV9MVF9ERUNMKFtdLCBbb2xkX3N0cmlwbGliXSwgWzFdLCBbQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzXSkKLV9MVF9ERUNMKFtdLCBbc3RyaXBsaWJdLCBbMV0pCi1dKSMgX0xUX0NNRF9TVFJJUExJQgotCi0KLSMgX0xUX1BSRVBBUkVfTVVOR0VfUEFUSF9MSVNUCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBNYWtlIHN1cmUgZnVuY19tdW5nZV9wYXRoX2xpc3QoKSBpcyBkZWZpbmVkIGNvcnJlY3RseS4KLW00X2RlZnVuKFtfTFRfUFJFUEFSRV9NVU5HRV9QQVRIX0xJU1RdLAotW1sjIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IFZBUklBQkxFIFBBVEgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVkFSSUFCTEUgaXMgbmFtZSBvZiB2YXJpYWJsZSBjb250YWluaW5nIF9zcGFjZV8gc2VwYXJhdGVkIGxpc3Qgb2YKLSMgZGlyZWN0b3JpZXMgdG8gYmUgbXVuZ2VkIGJ5IHRoZSBjb250ZW50cyBvZiBQQVRILCB3aGljaCBpcyBzdHJpbmcKLSMgaGF2aW5nIGEgZm9ybWF0OgotIyAiRElSWzpESVJdOiIKLSMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFCi0jICI6RElSWzpESVJdIgotIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQotIyAiRElSUFs6RElSUF06OltESVJBOl1ESVJBIgotIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCi0jICAgICAgICJESVJBWyBESVJBXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQotIyAiRElSWzpESVJdIgotIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCi1mdW5jX211bmdlX3BhdGhfbGlzdCAoKQotewotICAgIGNhc2UgeEBTfEAyIGluCi0gICAgeCkKLSAgICAgICAgOzsKLSAgICAqOikKLSAgICAgICAgZXZhbCBAU3xAMT1cImAkRUNITyBAU3xAMiB8ICRTRUQgJ3MvOi8gL2cnYCBcQFN8QEBTfEAxXCIKLSAgICAgICAgOzsKLSAgICB4OiopCi0gICAgICAgIGV2YWwgQFN8QDE9XCJcQFN8QEBTfEAxIGAkRUNITyBAU3xAMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCi0gICAgICAgIDs7Ci0gICAgKjo6KikKLSAgICAgICAgZXZhbCBAU3xAMT1cIlxAU3xAQFN8QDFcIGAkRUNITyBAU3xAMiB8ICRTRUQgLWUgJ3MvLio6Oi8vJyAtZSAncy86LyAvZydgXCIKLSAgICAgICAgZXZhbCBAU3xAMT1cImAkRUNITyBAU3xAMiB8ICRTRUQgLWUgJ3MvOjouKi8vJyAtZSAncy86LyAvZydgXCBcQFN8QEBTfEAxXCIKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICBldmFsIEBTfEAxPVwiYCRFQ0hPIEBTfEAyIHwgJFNFRCAncy86LyAvZydgXCIKLSAgICAgICAgOzsKLSAgICBlc2FjCi19Ci1dXSkjIF9MVF9QUkVQQVJFX1BBVEhfTElTVAotCi0KLSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUihbVEFHXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKLW00X2RlZnVuKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUFJFUEFSRV9NVU5HRV9QQVRIX0xJU1RdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQotbTRfaWYoWyQxXSwKLQlbXSwgWwotaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGRhcndpbiopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8sL0xSLycgOzsKLSAgICAqKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovJyA7OwotICBlc2FjCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0nc3w9XChbW0EtWmEtel1dOlwpfFwxfGcnIDs7Ci0gICAgKikgbHRfc2VkX3N0cmlwX2VxPSdzfD0vfC98ZycgOzsKLSAgZXNhYwotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAotICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCi0gICpcOyopCi0gICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgotICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcwotICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAotICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKLSAgICA7OwotICAqKQotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgIDs7Ci0gIGVzYWMKLSAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKLSAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuLi4KLSAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9Ci0gIGx0X211bHRpX29zX2Rpcj0vYCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAotICAjIC4uLmJ1dCBpZiBzb21lIHBhdGggY29tcG9uZW50IGFscmVhZHkgZW5kcyB3aXRoIHRoZSBtdWx0aWxpYiBkaXIgd2UgYXNzdW1lCi0gICMgdGhhdCBhbGwgaXMgZmluZSBhbmQgdHJ1c3QgLXByaW50LXNlYXJjaC1kaXJzIGFzIGlzIChHQ0MgNC4yPyBvciBuZXdlcikuCi0gIGNhc2UgIiRsdF9tdWx0aV9vc19kaXI7ICRsdF9zZWFyY2hfcGF0aF9zcGVjICIgaW4KLSAgIi87ICIqIHwgIi8uOyAiKiB8ICIvLi87ICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyLyAiKikKLSAgICBsdF9tdWx0aV9vc19kaXI9Ci0gICAgOzsKLSAgZXNhYwotICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCi0gICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciIKLSAgICBlbGlmIHRlc3QgLW4gIiRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCi0gICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKLQlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKLSAgICBmaQotICBkb25lCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKLUJFR0lOIHtSUyA9ICIgIjsgRlMgPSAiL3xcbiI7fSB7Ci0gIGx0X2ZvbyA9ICIiOwotICBsdF9jb3VudCA9IDA7Ci0gIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7Ci0gICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgewotICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKLSAgICAgICAgbHRfY291bnQrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgbHRfZm9vID0gIi8iICRsdF9pIGx0X2ZvbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBsdF9jb3VudC0tOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQotICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KLX0nYAotICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKLSAgIyBmb3IgdGhlc2UgaG9zdHMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKLSAgICAgICRTRUQgJ3N8L1woW1tBLVphLXpdXTpcKXxcMXxnJ2AgOzsKLSAgZXNhYwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCi1lbHNlCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLWZpXSkKLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPS5zbwotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLUFDX0FSR19WQVIoW0xUX1NZU19MSUJSQVJZX1BBVEhdLAotW1VzZXItZGVmaW5lZCBydW4tdGltZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLl0pCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIDs7Ci0KLWFpeFtbNC05XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBVc2luZyBJbXBvcnQgRmlsZXMgYXMgYXJjaGl2ZSBtZW1iZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0Ci0gICAgIyBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIG9mIHNoYXJlZCBsaWJyYXJ5IGFyY2hpdmVzIG9uIEFJWC4gV2hpbGUKLSAgICAjIHRoaXMgd291bGQgd29yayBmb3IgYm90aCB3aXRoIGFuZCB3aXRob3V0IHJ1bnRpbWUgbGlua2luZywgaXQgd2lsbAotICAgICMgcHJldmVudCBzdGF0aWMgbGlua2luZyBvZiBzdWNoIGFyY2hpdmVzLiBTbyB3ZSBkbyBmaWxlbmFtZS1iYXNlZAotICAgICMgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB3aXRoIC5zbyBleHRlbnNpb24gb25seSwgd2hpY2ggaXMgdXNlZAotICAgICMgd2hlbiBib3RoIHJ1bnRpbWUgbGlua2luZyBhbmQgc2hhcmVkIGxpbmtpbmcgaXMgZW5hYmxlZC4KLSAgICAjIFVuZm9ydHVuYXRlbHksIHJ1bnRpbWUgbGlua2luZyBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlLCBzbyB3ZSBkbwotICAgICMgbm90IHdhbnQgdGhpcyB0byBiZSB0aGUgZGVmYXVsdCBldmVudHVhbGx5LiBBbHNvLCB3ZSB1c2UgdGhlCi0gICAgIyB2ZXJzaW9uZWQgLnNvIGxpYnMgZm9yIGV4ZWN1dGFibGVzIG9ubHkgaWYgdGhlcmUgaXMgdGhlIC1icnRsCi0gICAgIyBsaW5rZXIgZmxhZyBpbiBMREZMQUdTIGFzIHdlbGwsIG9yIC0td2l0aC1haXgtc29uYW1lPXN2cjQgb25seS4KLSAgICAjIFRvIGFsbG93IGZvciBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIHN1cHBvcnQsIHdlIG5lZWQgdG8gY3JlYXRlCi0gICAgIyBsaWJOQU1FLnNvLlYgYXMgYW4gYXJjaGl2ZSBmaWxlLCBjb250YWluaW5nOgotICAgICMgKikgYW4gSW1wb3J0IEZpbGUsIHJlZmVycmluZyB0byB0aGUgdmVyc2lvbmVkIGZpbGVuYW1lIG9mIHRoZQotICAgICMgICAgYXJjaGl2ZSBhcyB3ZWxsIGFzIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIsIHRlbGxpbmcgdGhlCi0gICAgIyAgICBiaXR3aWR0aCAoMzIgb3IgNjQpIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgYW5kIHByb3ZpZGluZyB0aGUKLSAgICAjICAgIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGV2ZW50dWFsbHkKLSAgICAjICAgIGRlY29yYXRlZCB3aXRoIHRoZSAnd2Vhaycga2V5d29yZAotICAgICMgKikgdGhlIHNoYXJlZCBvYmplY3Qgd2l0aCB0aGUgRl9MT0FET05MWSBmbGFnIHNldCwgdG8gcmVhbGx5IGF2b2lkCi0gICAgIyAgICBpdCBiZWluZyBzZWVuIGJ5IHRoZSBsaW5rZXIuCi0gICAgIyBBdCBydW4gdGltZSB3ZSBiZXR0ZXIgdXNlIHRoZSByZWFsIGZpbGUgcmF0aGVyIHRoYW4gYW5vdGhlciBzeW1saW5rLAotICAgICMgYnV0IGZvciBsaW5rIHRpbWUgd2UgY3JlYXRlIHRoZSBzeW1saW5rIGxpYk5BTUUuc28gLT4gbGliTkFNRS5zby5WCi0KLSAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBhaXgseWVzKSAjIHRyYWRpdGlvbmFsIGxpYnRvb2wKLSAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggdW52ZXJzaW9uYWJsZSBsaWIuc28nCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICA7OwotICAgIGFpeCxubykgIyB0cmFkaXRpb25hbCBBSVggb25seQotICAgICAgZHluYW1pY19saW5rZXI9J0FJWCBsaWIuYVsoXWxpYi5zby5WWyldJwotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICA7OwotICAgIHN2cjQsKikgIyBmdWxsIHN2cjQgb25seQotICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVlsoXSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vWyldIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICAgIDs7Ci0gICAgKix5ZXMpICMgYm90aCwgcHJlZmVyIHN2cjQKLSAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlZbKF0kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub1spXSwgbGliLmFbKF1saWIuc28uVlspXSIKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLmEgbmVlZHMgZXh0cmEgaGFuZGxpbmcKLSAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9IiRyZWFsbmFtZSJ+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRsaW5rbmFtZSJ+JGluc3RhbGxfc2hhcmVkX3Byb2cgIiRkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0In50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJwotICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdmb3IgbiBpbiAkbGlicmFyeV9uYW1lcyAkb2xkX2xpYnJhcnk7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRuIn50ZXN0ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiA9ICIkbiIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCi0gICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgICA7OwotICAgICosbm8pICMgYm90aCwgcHJlZmVyIGFpeAotICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuYVsoXWxpYi5zby5WWyldLCBsaWIuc28uVlsoXSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vWyldIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLnNvLlYgYW5kIHN5bWxpbmsgbGliTkFNRS5zbyBuZWVkIGV4dHJhIGhhbmRsaW5nCi0gICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCAkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRkbG5hbWUgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0kcmVhbG5hbWV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJGxpbmtuYW1lIn4oY2QgIiRkZXN0ZGlyIiAmJiAkTE5fUyAtZiAkZGxuYW1lICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28pJwotICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSJ+Zm9yIG4gaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRuIn5mdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyInCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIHBvd2VycGMpCi0gICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgotICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgOzsKLSAgbTY4aykKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbWzQ1XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0uZGxsCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCi0gIHllcywqKQotICAgICMgZ2NjCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgotICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKLSAgICAgIGZpJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRSTSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotbTRfaWYoWyQxXSwgW10sWwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSJdKQotICAgICAgOzsKLSAgICBtaW5ndyogfCBjZWdjYyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICA7OwotCi0gICosY2wqKQotICAgICMgTmF0aXZlIE1TVkMKLSAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCi0KLSAgICBjYXNlICRidWlsZF9vcyBpbgotICAgIG1pbmd3KikKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSAgICAgIGx0X3NhdmVfaWZzPSRJRlMKLSAgICAgIElGUz0nOycKLSAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSAgICAgIGRvCi0gICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKLSAgICAgIDs7Ci0gICAgY3lnd2luKikKLSAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KLSAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcwotICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgOzsKLSAgICAqKQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKLSAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKLSAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJFJNIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCi0gICAgOzsKLQotICAqKQotICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJwotICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAgOzsKLSAgZXNhYwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotbTRfaWYoWyQxXSwgW10sWwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFtbMjNdXS4qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMi4qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCi0gIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWhhaWt1KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4MzIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4NjQKLSAgICBmaQotICAgIDs7Ci0gIGhwcGEqNjQqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6Ci0gIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKLSAgOzsKLQotaW50ZXJpeFtbMy05XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWxpbnV4KmFuZHJvaWQqKQotICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCi0gIGZpbmlzaF9jbWRzPQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJwotICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgotICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQotICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKLSAgQUNfQ0FDSEVfVkFMKFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLAotICAgIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKLSAgICBzYXZlX2xpYmRpcj0kbGliZGlyCi0gICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpXCI7IFwKLQkgTERGTEFHUz1cIlwkTERGTEFHUyAkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSlcIiIKLSAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCi0gICAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAotCSBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKLSAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLSAgICBsaWJkaXI9JHNhdmVfbGliZGlyCi0gICAgXSkKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICAjIElkZWFsbHksIHdlIGNvdWxkIHVzZSBsZGNvbmZpZyB0byByZXBvcnQgKmFsbCogZGlyZWN0b3JlcyB3aGljaCBhcmUKLSAgIyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLCBob3dldmVyIHRoaXMgaXMgc3RpbGwgbm90IHBvc3NpYmxlLiAgQXNpZGUgZnJvbSBub3QKLSAgIyBiZWluZyBjZXJ0YWluIC9zYmluL2xkY29uZmlnIGlzIGF2YWlsYWJsZSwgY29tbWFuZAotICAjICdsZGNvbmZpZyAtTiAtWCAtdiB8IGdyZXAgXi8nIG9uIDY0Yml0IEZlZG9yYSBkb2VzIG5vdCByZXBvcnQgL3Vzci9saWI2NCwKLSAgIyBldmVuIHRob3VnaCBpdCBpcyBzZWFyY2hlZCBhdCBydW4tdGltZS4gIFRyeSB0byBkbyB0aGUgYmVzdCBndWVzcyBieQotICAjIGFwcGVuZGluZyBsZC5zby5jb25mIGNvbnRlbnRzIChhbmQgaW5jbHVkZXMpIHRvIHRoZSBzZWFyY2ggcGF0aC4KLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkZWxmKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotKm50byogfCAqcW54KikKLSAgdmVyc2lvbl90eXBlPXFueAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwotICA7OwotCi1vcGVuYnNkKiB8IGJpdHJpZyopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCi0gICAgbmVlZF92ZXJzaW9uPW5vCi0gIGVsc2UKLSAgICBuZWVkX3ZlcnNpb249eWVzCi0gIGZpCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0uZGxsCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBPUy8yIGNhbiBvbmx5IGxvYWQgYSBETEwgd2l0aCBhIGJhc2UgbmFtZSBvZiA4IGNoYXJhY3RlcnMgb3IgbGVzcy4KLSAgc29uYW1lX3NwZWM9J2B0ZXN0IC1uICIkb3MyZGxsbmFtZSIgJiYgbGlibmFtZT0iJG9zMmRsbG5hbWUiOwotICAgIHY9JCgkRUNITyAkcmVsZWFzZSR2ZXJzdWZmaXggfCB0ciAtZCAuLSk7Ci0gICAgbj0kKCRFQ0hPICRsaWJuYW1lIHwgY3V0IC1iIC0kKCg4IC0gJHsjdn0pKSB8IHRyIC4gXyk7Ci0gICAgJEVDSE8gJG4kdmAkc2hhcmVkX2V4dCcKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9X2RsbC4kbGliZXh0JwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9QkVHSU5MSUJQQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+Ci0gICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyAkRUNITyBcJGRsbmFtZSdcJydgfgotICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KLSAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgotICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87Ci0gICAgZmknCi0gIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyAkRUNITyBcJGRsbmFtZSdcJydgfgotICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgJFJNIFwkZGxwYXRoJwotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1zY28KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXRwZiopCi0gICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKLXRlc3Qgbm8gPSAiJGR5bmFtaWNfbGlua2VyIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLQotaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLWZpCi0KLWlmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi1maQotCi0jIHJlbWVtYmVyIHVuYXVnbWVudGVkIHN5c19saWJfZGxzZWFyY2hfcGF0aCBjb250ZW50IGZvciBsaWJ0b29sIHNjcmlwdCBkZWNscy4uLgotY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aD0kc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyAuLi4gYnV0IGl0IG5lZWRzIExUX1NZU19MSUJSQVJZX1BBVEggbXVuZ2luZyBmb3Igb3RoZXIgY29uZmlndXJlLXRpbWUgY29kZQotZnVuY19tdW5nZV9wYXRoX2xpc3Qgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgIiRMVF9TWVNfTElCUkFSWV9QQVRIIgotCi0jIHRvIGJlIHVzZWQgYXMgZGVmYXVsdCBMVF9TWVNfTElCUkFSWV9QQVRIIHZhbHVlIGluIGdlbmVyYXRlZCBsaWJ0b29sCi1jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSRMVF9TWVNfTElCUkFSWV9QQVRICi0KLV9MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCi0gICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotICAgIHJlc3RvcmVkIGF0IGxpbmsgdGltZV0pCi1fTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKLSAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCi1fTFRfREVDTChbXSwgW25lZWRfdmVyc2lvbl0sIFswXSwgW0RvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/XSkKLV9MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQotX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQotX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfdmFyXSwgWzBdLFtTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlXSkKLV9MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAotICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKLV9MVF9ERUNMKFtdLCBbbGlibmFtZV9zcGVjXSwgWzFdLCBbRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXhdKQotX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCi0gICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotICAgIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUVdXSkKLV9MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCi0gICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQotX0xUX0RFQ0woW10sIFtpbnN0YWxsX292ZXJyaWRlX21vZGVdLCBbMV0sCi0gICAgW1Blcm1pc3Npb24gbW9kZSBvdmVycmlkZSBmb3IgaW5zdGFsbGF0aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXNdKQotX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAotICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCi1fTFRfREVDTChbXSwgW3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSwKLSAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCi1fTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAotICAgIFtDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnldKQotX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKLSAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAotICAgIG5vdCBzaG93bl1dKQotX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCi0gICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQotX0xUX0RFQ0woW10sIFtzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCi0gICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCi1fTFRfREVDTChbc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNdLCBbY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aF0sIFsyXSwKLSAgICBbRGV0ZWN0ZWQgcnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQotX0xUX0RFQ0woW10sIFtjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoXSwgWzJdLAotICAgIFtFeHBsaWNpdCBMVF9TWVNfTElCUkFSWV9QQVRIIHNldCBkdXJpbmcgLi9jb25maWd1cmUgdGltZV0pCi1dKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgotCi0KLSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZmluZCBhIGZpbGUgcHJvZ3JhbSB0aGF0IGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKLUFDX0RFRlVOKFtfTFRfUEFUSF9UT09MX1BSRUZJWF0sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAotW2Nhc2UgJE1BR0lDX0NNRCBpbgotW1tcXC8qXSB8ICA/OltcXC9dKl0pCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0qKQotICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECi0gIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWRubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgotZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAotZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KLSAgYWNfZHVtbXk9Im00X2lmKFskMl0sICwgJFBBVEgsIFskMl0pIgotICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KLSAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyQxIjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JGFjX2Rpci8iJDEiCi0gICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCi0JY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLQkiZmlsZV9tYWdpYyAiKikKLQkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAotCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAotCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAotCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAotKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgotKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCi0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKLSoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAotKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQotKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwotKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKLQotX0xUX0VPRgotCSAgZmkgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0kbHRfc2F2ZV9pZnMKLSAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAotICA7OwotZXNhY10pCi1NQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECi1pZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCi1maQotX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCi0JIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKLV0pIyBfTFRfUEFUSF9UT09MX1BSRUZJWAotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbX0xUX1BBVEhfVE9PTF9QUkVGSVhdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCi0KLQotIyBfTFRfUEFUSF9NQUdJQwotIyAtLS0tLS0tLS0tLS0tLQotIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHRoYXQgY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5Ci1tNF9kZWZ1bihbX0xUX1BBVEhfTUFHSUNdLAotW19MVF9QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLWlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIF9MVF9QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCi0gIGVsc2UKLSAgICBNQUdJQ19DTUQ9OgotICBmaQotZmkKLV0pIyBfTFRfUEFUSF9NQUdJQwotCi0KLSMgTFRfUEFUSF9MRAotIyAtLS0tLS0tLS0tCi0jIGZpbmQgdGhlIHBhdGhuYW1lIHRvIHRoZSBHTlUgb3Igbm9uLUdOVSBsaW5rZXIKLUFDX0RFRlVOKFtMVF9QQVRIX0xEXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotbTRfcmVxdWlyZShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAotCi1BQ19BUkdfV0lUSChbZ251LWxkXSwKLSAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAotCVthc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLAotICAgIFt0ZXN0IG5vID0gIiR3aXRodmFsIiB8fCB3aXRoX2dudV9sZD15ZXNdLAotICAgIFt3aXRoX2dudV9sZD1ub10pZG5sCi0KLWFjX3Byb2c9bGQKLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndwotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKLSAgKikKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfcHJvZyBpbgotICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgotICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKLSAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0kYWNfcHJvZwotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKLWVsc2UKLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCi1maQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCi1baWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSRsdF9zYXZlX2lmcwotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX0xEPSRhY19kaXIvJGFjX3Byb2cKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCi0gICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KLSAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCBubyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhawotCTs7Ci0gICAgICAqKQotCXRlc3QgeWVzICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCi0JOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBkb25lCi0gIElGUz0kbHRfc2F2ZV9pZnMKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0kTEQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi1maV0pCi1MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRMRCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi10ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQotX0xUX1BBVEhfTERfR05VCi1BQ19TVUJTVChbTERdKQotCi1fTFRfVEFHREVDTChbXSwgW0xEXSwgWzFdLCBbVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllc10pCi1dKSMgTFRfUEFUSF9MRAotCi0jIE9sZCBuYW1lczoKLUFVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQotQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKLWRubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQotCi0KLSMgX0xUX1BBVEhfTERfR05VCi0jLSAtLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCi1bIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKLSAgOzsKLSopCi0gIGx0X2N2X3Byb2dfZ251X2xkPW5vCi0gIDs7Ci1lc2FjXSkKLXdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAotXSkjIF9MVF9QQVRIX0xEX0dOVQotCi0KLSMgX0xUX0NNRF9SRUxPQUQKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCi0jICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KLW00X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXNdLAotICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKLSAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQotcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCi1jYXNlICRyZWxvYWRfZmxhZyBpbgotIiIgfCAiICIqKSA7OwotKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Ci1lc2FjCi1yZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1jYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCi0gICAgZmkKLSAgICA7OwotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAkd2wtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGVsc2UKLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBmaQotICAgIDs7Ci1lc2FjCi1fTFRfVEFHREVDTChbXSwgW3JlbG9hZF9mbGFnXSwgWzFdLCBbSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlc10pZG5sCi1fTFRfVEFHREVDTChbXSwgW3JlbG9hZF9jbWRzXSwgWzJdKWRubAotXSkjIF9MVF9DTURfUkVMT0FECi0KLQotIyBfTFRfUEFUSF9ERAotIyAtLS0tLS0tLS0tLQotIyBmaW5kIGEgd29ya2luZyBkZAotbTRfZGVmdW4oW19MVF9QQVRIX0REXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIGEgd29ya2luZyBkZF0sIFthY19jdl9wYXRoX2x0X0REXSwKLVtwcmludGYgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYgPmNvbmZ0ZXN0LmkKLWNhdCBjb25mdGVzdC5pIGNvbmZ0ZXN0LmkgPmNvbmZ0ZXN0Mi5pCi06ICR7bHRfREQ6PSRERH0KLUFDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDSyhbbHRfRERdLCBbZGRdLAotW2lmICIkYWNfcGF0aF9sdF9ERCIgYnM9MzIgY291bnQ9MSA8Y29uZnRlc3QyLmkgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbDsgdGhlbgotICBjbXAgLXMgY29uZnRlc3QuaSBjb25mdGVzdC5vdXQgXAotICAmJiBhY19jdl9wYXRoX2x0X0REPSIkYWNfcGF0aF9sdF9ERCIgYWNfcGF0aF9sdF9ERF9mb3VuZD06Ci1maV0pCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0Mi5pIGNvbmZ0ZXN0Lm91dF0pCi1dKSMgX0xUX1BBVEhfREQKLQotCi0jIF9MVF9DTURfVFJVTkNBVEUKLSMgLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIGNvbW1hbmQgdG8gdHJ1bmNhdGUgYSBiaW5hcnkgcGlwZQotbTRfZGVmdW4oW19MVF9DTURfVFJVTkNBVEVdLAotW200X3JlcXVpcmUoW19MVF9QQVRIX0REXSkKLUFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gdHJ1bmNhdGUgYmluYXJ5IHBpcGVzXSwgW2x0X2N2X3RydW5jYXRlX2Jpbl0sCi1bcHJpbnRmIDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmID5jb25mdGVzdC5pCi1jYXQgY29uZnRlc3QuaSBjb25mdGVzdC5pID5jb25mdGVzdDIuaQotbHRfY3ZfdHJ1bmNhdGVfYmluPQotaWYgIiRhY19jdl9wYXRoX2x0X0REIiBicz0zMiBjb3VudD0xIDxjb25mdGVzdDIuaSA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsOyB0aGVuCi0gIGNtcCAtcyBjb25mdGVzdC5pIGNvbmZ0ZXN0Lm91dCBcCi0gICYmIGx0X2N2X3RydW5jYXRlX2Jpbj0iJGFjX2N2X3BhdGhfbHRfREQgYnM9NDA5NiBjb3VudD0xIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QyLmkgY29uZnRlc3Qub3V0Ci10ZXN0IC16ICIkbHRfY3ZfdHJ1bmNhdGVfYmluIiAmJiBsdF9jdl90cnVuY2F0ZV9iaW49IiRTRUQgLWUgNHEiXSkKLV9MVF9ERUNMKFtsdF90cnVuY2F0ZV9iaW5dLCBbbHRfY3ZfdHJ1bmNhdGVfYmluXSwgWzFdLAotICBbQ29tbWFuZCB0byB0cnVuY2F0ZSBhIGJpbmFyeSBwaXBlXSkKLV0pIyBfTFRfQ01EX1RSVU5DQVRFCi0KLQotIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcwotIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcwotbTRfZGVmdW4oW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKLW00X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQotQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllc10sCi1sdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCwKLVtsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKLWx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQotbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCi0jIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKLSMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KLSMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgotIyAndW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCi0jICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCi0jICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCi0jICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCi0jIHRoYXQgcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlICdmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciAncGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeFtbNC05XV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1iZW9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYnNkaVtbNDVdXSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCi0gIDs7Ci0KLWN5Z3dpbiopCi0gICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICA7OwotCi1taW5ndyogfCBwdzMyKikKLSAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQotICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKLSAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KLSAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICBlbHNlCi0gICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIGZpCi0gIDs7Ci0KLWNlZ2NjKikKLSAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgaSo4NiApCi0gICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgotICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KLSAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JwotICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICBmaQotICA7OwotCi1oYWlrdSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWhwdXgxMC4yMCogfCBocHV4MTEqKQotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbwotICAgIDs7Ci0gIGhwcGEqNjQqKQotICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nXQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAotICAgIDs7Ci0gICopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV1cLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRMRCBpbgotICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OwotICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgZXNhYwotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotbmV3b3M2KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbwotICA7OwotCi0qbnRvKiB8ICpxbngqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1vcGVuYnNkKiB8IGJpdHJpZyopCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGZpCi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotcmRvcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgbW90b3JvbGEpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAotICAgIDs7Ci0gIG5jcikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIHNlcXVlbnQpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJwotICAgIDs7Ci0gIHNuaSkKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJwotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbwotICAgIDs7Ci0gIHNpZW1lbnMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBwYykKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotdHBmKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLW9zMiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci1lc2FjCi1dKQotCi1maWxlX21hZ2ljX2dsb2I9Ci13YW50X25vY2FzZWdsb2I9bm8KLWlmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgbWluZ3cqIHwgcHczMiopCi0gICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcwotICAgIGVsc2UKLSAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1tcMV1dXC9bW1wxXV1cL2c7L2ciYAotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotZmkKLQotZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKLXRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotCi1fTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAotICAgIFtNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0c10pCi1fTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAotICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKLV9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19nbG9iXSwgWzFdLAotICAgIFtIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCi1fTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKLSAgICBbRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKLV0pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECi0KLQotIyBMVF9QQVRIX05NCi0jIC0tLS0tLS0tLS0KLSMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKLUFDX0RFRlVOKFtMVF9QQVRIX05NXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSldLCBsdF9jdl9wYXRoX05NLAotW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KLSAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGx0X2N2X3BhdGhfTk09JE5NCi1lbHNlCi0gIGx0X25tX3RvX2NoZWNrPSR7YWNfdG9vbF9wcmVmaXh9bm0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCi0gIGZpCi0gIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbwotICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSRhY19kaXIvJGx0X3RtcF9ubQotICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiOyB0aGVuCi0JIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlICdzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKLQkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCi0JIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCi0JIyBNU1lTIGNvbnZlcnRzIC9kZXYvbnVsbCB0byBOVUwsIE1pbkdXIG5tIHRyZWF0cyBOVUwgYXMgZW1wdHkKLQljYXNlICRidWlsZF9vcyBpbgotCW1pbmd3KikgbHRfYmFkX2ZpbGU9Y29uZnRlc3Qubm0vbm9maWxlIDs7Ci0JKikgbHRfYmFkX2ZpbGU9L2Rldi9udWxsIDs7Ci0JZXNhYwotCWNhc2UgYCIkdG1wX25tIiAtQiAkbHRfYmFkX2ZpbGUgMj4mMSB8IHNlZCAnMXEnYCBpbgotCSokbHRfYmFkX2ZpbGUqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKLQkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCi0JICBicmVhayAyCi0JICA7OwotCSopCi0JICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkgICovZGV2L251bGwqKQotCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhayAyCi0JICAgIDs7Ci0JICAqKQotCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAotCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncwotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9JGx0X3NhdmVfaWZzCi0gIGRvbmUKLSAgOiAke2x0X2N2X3BhdGhfTk09bm99Ci1maV0pCi1pZiB0ZXN0IG5vICE9ICIkbHRfY3ZfcGF0aF9OTSI7IHRoZW4KLSAgTk09JGx0X2N2X3BhdGhfTk0KLWVsc2UKLSAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCi0gIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6Ci0gICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGVsc2UKLSAgICBBQ19DSEVDS19UT09MUyhEVU1QQklOLCBbZHVtcGJpbiAibGluayAtZHVtcCJdLCA6KQotICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0gICAgKkNPRkYqKQotICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMiCi0gICAgICA7OwotICAgICopCi0gICAgICBEVU1QQklOPToKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBBQ19TVUJTVChbRFVNUEJJTl0pCi0gIGlmIHRlc3QgOiAhPSAiJERVTVBCSU4iOyB0aGVuCi0gICAgTk09JERVTVBCSU4KLSAgZmkKLWZpCi10ZXN0IC16ICIkTk0iICYmIE5NPW5tCi1BQ19TVUJTVChbTk1dKQotX0xUX0RFQ0woW10sIFtOTV0sIFsxXSwgW0EgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyXSlkbmwKLQotQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKLSAgW2x0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgotICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCi0gIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQotICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgY2F0IGNvbmZ0ZXN0Lm91dCA+JkFTX01FU1NBR0VfTE9HX0ZECi0gIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgotICBmaQotICBybSAtZiBjb25mdGVzdCpdKQotXSkjIExUX1BBVEhfTk0KLQotIyBPbGQgbmFtZXM6Ci1BVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKLUFVX0FMSUFTKFtBQ19QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCi1kbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKLQotIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQotIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCi0jICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCi1tNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKLW00X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQotbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCi1BQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCi1sdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKLVtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKLQotY2FzZSAkaG9zdF9vcyBpbgotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoOwotICAjIGRlY2lkZSB3aGljaCBvbmUgdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAotICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KLSAgKi0taWRlbnRpZnktc3RyaWN0KikKLSAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjawotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLSopCi0gICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgotICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotICA7OwotZXNhYwotXSkKLXNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAotdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotCi1fTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAotICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKLV0pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgotCi0KLSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAotbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAotW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCi10ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAotQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAotICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCi0gIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCi0gIGZpCi0gIHJtIC1mIGNvbmZ0ZXN0Kl0pCi1pZiB0ZXN0IHllcyAhPSAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCI7IHRoZW4KLSAgTUFOSUZFU1RfVE9PTD06Ci1maQotX0xUX0RFQ0woW10sIFtNQU5JRkVTVF9UT09MXSwgWzFdLCBbTWFuaWZlc3QgdG9vbF0pZG5sCi1dKSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAotCi0KLSMgX0xUX0RMTF9ERUZfUChbRklMRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnVlIGlmZiBGSUxFIGlzIGEgV2luZG93cyBETEwgJy5kZWYnIGZpbGUuCi0jIEtlZXAgaW4gc3luYyB3aXRoIGZ1bmNfZGxsX2RlZl9wIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotQUNfREVGVU4oW19MVF9ETExfREVGX1BdLAotW2RubAotICB0ZXN0IERFRiA9ICJgJFNFRCAtbiBkbmwKLSAgICAtZSAnXCcncy9eW1sJIF1dKi8vJ1wnJyBkbmwgU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlCi0gICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnIGRubCAgICAgIERlbGV0ZSBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHMKLSAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFtbCSBdXS4qXCkqJC9ERUYvcCdcJycgZG5sCi0gICAgLWUgcSBkbmwgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgY29uc2lkZXIgdGhlIGZpcnN0ICJyZWFsIiBsaW5lCi0gICAgJDFgIiBkbmwKLV0pIyBfTFRfRExMX0RFRl9QCi0KLQotIyBMVF9MSUJfTQotIyAtLS0tLS0tLQotIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5Ci1BQ19ERUZVTihbTFRfTElCX01dLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUxJQk09Ci1jYXNlICRob3N0IGluCi0qLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCi0gICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAotICA7OwotKi1uY3Itc3lzdjQuMyopCi0gIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09LWxtdykKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKLSAgOzsKLSopCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09LWxtKQotICA7OwotZXNhYwotQUNfU1VCU1QoW0xJQk1dKQotXSkjIExUX0xJQl9NCi0KLSMgT2xkIG5hbWU6Ci1BVV9BTElBUyhbQUNfQ0hFQ0tfTElCTV0sIFtMVF9MSUJfTV0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKLQotCi0jIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DT01QSUxFUl9OT19SVFRJXSwKLVttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKLQotX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotCi1pZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBudmNjKikKLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKLSAgKikKLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nIDs7Ci0gIGVzYWMKLQotICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCi0gICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKLSAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKLWZpCi1fTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAotCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKLV0pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQotCi0KLSMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCi1BQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKLUFDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKLW00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAotCi0jIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgotQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCi1bCi0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KLSMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCi0KLSMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KLXN5bWNvZGU9J1tbQkNERUdSU1RdXScKLQotIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCi1zeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKLQotIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeCopCi0gIHN5bWNvZGU9J1tbQkNEVF1dJwotICA7OwotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJwotICA7OwotaHB1eCopCi0gIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKLSAgZmkKLSAgOzsKLWlyaXgqIHwgbm9uc3RvcHV4KikKLSAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJwotICA7Owotb3NmKikKLSAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKLSAgOzsKLXNvbGFyaXMqKQotICBzeW1jb2RlPSdbW0JEUlRdXScKLSAgOzsKLXNjbzMuMnY1KikKLSAgc3ltY29kZT0nW1tEVF1dJwotICA7Owotc3lzdjQuMnV3MiopCi0gIHN5bWNvZGU9J1tbRFRdXScKLSAgOzsKLXN5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gIHN5bWNvZGU9J1tbQUJEVF1dJwotICA7Owotc3lzdjQpCi0gIHN5bWNvZGU9J1tbREZOU1RVXV0nCi0gIDs7Ci1lc2FjCi0KLSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgotY2FzZSBgJE5NIC1WIDI+JjFgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Ci1lc2FjCi0KLWlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gICMgR2V0cyBsaXN0IG9mIGRhdGEgc3ltYm9scyB0byBpbXBvcnQuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0ic2VkIC1uIC1lICdzL15JIC4qIFwoLipcKSQvXDEvcCciCi0gICMgQWRqdXN0IHRoZSBiZWxvdyBnbG9iYWwgc3ltYm9sIHRyYW5zZm9ybXMgdG8gZml4dXAgaW1wb3J0ZWQgdmFyaWFibGVzLgotICBsdF9jZGVjbF9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC9leHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpIGNoYXIgXDE7L3AnIgotICBsdF9jX25hbWVfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciCi0gIGx0X2NfbmFtZV9saWJfaG9vaz0iXAotICAtZSAncy9eSSAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnXAotICAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgMH0sL3AnIgotZWxzZQotICAjIERpc2FibGUgaG9va3MgYnkgZGVmYXVsdC4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PQotICBsdF9jZGVjbF9ob29rPQotICBsdF9jX25hbWVfaG9vaz0KLSAgbHRfY19uYW1lX2xpYl9ob29rPQotZmkKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KLSMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAotIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiJcCi0kbHRfY2RlY2xfaG9va1wKLSIgLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4iXAotJGx0X2NfbmFtZV9ob29rXAotIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIHdpdGggbGliIHByZWZpeCBhbmQKLSMgc3ltYm9sIGFkZHJlc3MuCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4iXAotJGx0X2NfbmFtZV9saWJfaG9va1wKLSIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCi0iIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCi0KLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotb3B0X2NyPQotY2FzZSAkYnVpbGRfb3MgaW4KLW1pbmd3KikKLSAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAotICA7OwotZXNhYwotCi0jIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLQotICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgotICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgotCi0gICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KLSAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiwKLSAgICAjIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgZm9yIGFueSBpbXBvcnRlZCB2YXJpYWJsZS4KLSAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKLSAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAotIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCi0iICAgICAvXkNPRkYgU1lNQk9MIFRBQkxFL3tmb3IoaSBpbiBoaWRlKSBkZWxldGUgaGlkZVtpXX07IlwKLSIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAotIiAgICAgL14gKlN5bWJvbCBuYW1lICo6IC97c3BsaXQoXCQgMCxzbixcIjpcIik7IHNpPXN1YnN0cihzblsyXSwyKX07IlwKLSIgICAgIC9eICpUeXBlICo6IGNvZGUve3ByaW50IFwiVFwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAotIiAgICAgL14gKlR5cGUgKjogZGF0YS97cHJpbnQgXCJJXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCi0iICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAotIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAotIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCi0iICAgICB7Zj1cIkRcIn07IFwkIDB+L1woXCkuKlx8L3tmPVwiVFwifTsiXAotIiAgICAge3NwbGl0KFwkIDAsYSwvXHx8XHIvKTsgc3BsaXQoYVsyXSxzKX07IlwKLSIgICAgIHNbMV1+L15bQD9dL3twcmludCBmLHNbMV0sc1sxXTsgbmV4dH07IlwKLSIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgZix0WzFdLHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKLSIgICAgICcgcHJmeD1eJGFjX3N5bXByZnhdIgotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLSAgZmkKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgotCi0gICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotICBwaXBlX3dvcmtzPW5vCi0KLSAgcm0gLWYgY29uZnRlc3QqCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi1jaGFyIG5tX3Rlc3RfdmFyOwotdm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Ci12b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLV9MVF9FT0YKLQotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgotICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCi0gICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgotICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLSAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCi0JbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCi0gICAgICBlbHNlCi0Jcm0gLWYgIiRubGlzdCJUCi0gICAgICBmaQotCi0gICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLS8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQotICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwotIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCi0jZWxpZiBkZWZpbmVkIF9fb3NmX18KLS8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwotIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCi0jZWxzZQotIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1fTFRfRU9GCi0JICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCi0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JwotCi0JICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLQotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwotTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIHZvaWQgICAgICAgKmFkZHJlc3M7Ci19Ci1sdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Ci17Ci0gIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKLV9MVF9FT0YKLQkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0JICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAodm9pZCAqKSAwfQotfTsKLQotLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCi0jaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECi1zdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewotICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotX0xUX0VPRgotCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLQkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKLQkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotCSAgTElCUz1jb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgotCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUwotCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAotCWZpCi0gICAgICBlbHNlCi0JZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKLQotICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCi0gIGlmIHRlc3QgeWVzID0gIiRwaXBlX3dvcmtzIjsgdGhlbgotICAgIGJyZWFrCi0gIGVsc2UKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQotICBmaQotZG9uZQotXSkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KLWZpCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQob2spCi1maQotCi0jIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KLWlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJwotZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCi0gIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJwotZmkKLQotX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfcGlwZV0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwgWzFdLAotICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKLV9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAotICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uXSkKLV9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnRdLCBbMV0sCi0gICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGludG8gYSBsaXN0IG9mIHN5bWJvbHMgdG8gbWFudWFsbHkgcmVsb2NhdGVdKQotX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAotICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKLSAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKLV9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAotICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAotICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCi1fTFRfREVDTChbbm1faW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sIFsxXSwKLSAgICBbVGhlIG5hbWUgbGlzdGVyIGludGVyZmFjZV0pCi1fTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAotICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCi1dKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKLQotCi0jIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKLVttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKLV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQotX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQotCi1tNF9pZihbJDFdLCBbQ1hYXSwgWwotICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIHBvd2VycGMpCi0gICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KLSAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvczIqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLXN0YXRpYycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICAgOzsKLSAgICBoYWlrdSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCi0gICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ci0gICAgICA7OwotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAotICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCi0gICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqKQotCTs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKnFueCogfCAqbnRvKikKLSAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCi0gICAgICA7OwotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXhbWzQtOV1dKikKLQkjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0JaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCWVsc2UKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotCWZpCi0JOzsKLSAgICAgIGNob3J1cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQljeGNoNjgqKQotCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKLQkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0JIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLQltNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKLQk7OwotICAgICAgZGd1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGVjKysqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0JIyBGcmVlQlNEIHVzZXMgR05VIEMrKwotCTs7Ci0gICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGhwcGEqNjQqfGlhNjQqKQotCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGludGVyaXgqKQotCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQotCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KLQk7OwotICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLQkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCSAgICA7OwotCSAgZWNwYyogKQotCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCSAgICA7OwotCSAgaWNwYyogKQotCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCi0JICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyogfCBwZ2NwcCopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBDb21wYXEgQysrCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICB4bGMqIHwgeGxDKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKQotCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbHlueG9zKikKLQk7OwotICAgICAgbTg4ayopCi0JOzsKLSAgICAgIG12cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGN4eCopCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQotCTs7Ci0gICAgICAqcW54KiB8ICpudG8qKQotICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJwotCSAgICA7OwotCSAgUkNDKikKLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgcHNvcyopCi0JOzsKLSAgICAgIHNvbGFyaXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyogfCBzdW5DQyopCi0JICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgOzsKLQkgIGdjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzdW5vczQqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LngKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgbGNjKikKLQkgICAgIyBMdWNpZAotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHZ4d29ya3MqKQotCTs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgZmkKLV0sCi1bCi0gIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgotICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAotCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3MyKikKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1zdGF0aWMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBoYWlrdSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCi0gICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ci0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKLSAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZwotICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgKm50byogfCAqcW54KikKLSAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1YbGlua2VyICcKLSAgICAgIGlmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iLVhjb21waWxlciAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIgotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgbmFnZm9yKikKLSAgICAgICAgIyBOQUcgRm9ydHJhbiBjb21waWxlcgotICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJwotICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvczIqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLXN0YXRpYycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgotICAgICAgZWNjKikKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgotICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCi0gICAgICBpY2MqIHwgaWZvcnQqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KLSAgICAgIGxmOTUqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKLQk7OwotICAgICAgbmFnZm9yKikKLQkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQk7OwotICAgICAgdGNjKikKLQkjIEZhYnJpY2UgQmVsbGFyZCBldCBhbCdzIFRpbnkgQyBDb21waWxlcgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCTs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICAgIDs7Ci0gICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCi0JIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJwotCTs7Ci0gICAgICAqKQotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIENlcmVzXCBGb3J0cmFuKiB8ICpTdW4qRm9ydHJhbipcIFtbMS03XV0uKiB8ICpTdW4qRm9ydHJhbipcIDguW1swLTNdXSopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPScnCi0JICA7OwotCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgIDs7Ci0JKlN1blwgQyopCi0JICAjIFN1biBDIDUuOQotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgIDs7Ci0gICAgICAgICpJbnRlbCpcIFtbQ0ZdXSpDb21waWxlciopCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0JICA7OwotCSpQb3J0bGFuZFwgR3JvdXAqKQotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJwotICAgICAgOzsKLQotICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHJkb3MqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICB1bmljb3MqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLV0pCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgIDs7Ci0gICopCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCi0gICAgOzsKLWVzYWMKLQotQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKLSAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKV0sCi0gIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCi1fTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgotICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCi0gICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCi0gICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAotICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OwotICAgICBlc2FjXSwKLSAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKLWZpCi1fTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCi0JW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCi0KLV9MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAotCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgotX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKLSAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAotICAkbHRfdG1wX3N0YXRpY19mbGFnLAotICBbXSwKLSAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQotX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCi0JW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQotXSkjIF9MVF9DT01QSUxFUl9QSUMKLQotCi0jIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKLVtBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKLUFDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAotbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotbTRfaWYoWyQxXSwgW0NYWF0sIFsKLSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4W1s0LTldXSopCi0gICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0gICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBHTlUgbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB0byBBSVggbm0uCi0gICAgIyBXaXRob3V0IHRoZSAiLWwiIG9wdGlvbiwgb3Igd2l0aCB0aGUgIi1CIiBvcHRpb24sIEFJWCBubSB0cmVhdHMKLSAgICAjIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcwotICAgICMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgotICAgICMgV2hpbGUgdGhlICd3ZWFrJyBrZXl3b3JkIGlzIGlnbm9yZWQgaW4gdGhlIEV4cG9ydCBGaWxlLCB3ZSBuZWVkCi0gICAgIyBpdCBpbiB0aGUgSW1wb3J0IEZpbGUgZm9yIHRoZSAnYWl4LXNvbmFtZScgZmVhdHVyZSwgc28gd2UgaGF2ZQotICAgICMgdG8gcmVwbGFjZSB0aGUgIi1CIiBvcHRpb24gd2l0aCAiLVAiIGZvciBBSVggbm0uCi0gICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBpZiAoXCQgMiA9PSAiVyIpIHsgcHJpbnQgXCQgMyAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDMgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nYGZ1bmNfZWNob19hbGwgJE5NIHwgJFNFRCAtZSAnXCcncy9CXChbW15CXV0qXCkkL1BcMS8nXCcnYCAtUENwZ2wgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpICYmIChbc3Vic3RyXShcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBmaQotICAgIDs7Ci0gIHB3MzIqKQotICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSRsdGRsbF9jbWRzCi0gICAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIGNsKikKLSAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBsaW51eCogfCBrKmJzZCotZ251IHwgZ251KikKLSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT1ubwotICAgIDs7Ci0gICopCi0gICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgICA7OwotICBlc2FjCi1dLCBbCi0gIHJ1bnBhdGhfdmFyPQotICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci0gIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci0gIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi0gIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9Ci0gIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5ICcgKCcgYW5kICcpJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6ICdhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgJ2EnIGFuZCAnYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zICdkJy4KLSAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCi0gICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAotICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKLSAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90Ci0gICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgotICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgotICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCi1kbmwgTm90ZSBhbHNvIGFkanVzdCBleGNsdWRlX2V4cHN5bXMgZm9yIEMrKyBhYm92ZS4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqIHwgYml0cmlnKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQotICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0KLSAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCi0gICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgotICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLQkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKLQkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCi0JIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKLQkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgotCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgotCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7Ci0JICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKLQkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbWzMtOV1dKikgOzsKLQkgICopCi0JICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgKikKLQlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKLQk7OwotICAgIGVzYWMKLSAgZmkKLQotICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHdsJwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICBlbHNlCi0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgZmkKLSAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgfCAkU0VEIC1lICdzLyhbXildXCspXHNcKy8vJyAyPiYxYCBpbgotICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCi0gICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgotICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgotICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKLSAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICBlc2FjCi0KLSAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4W1szLTldXSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKLSoqKiAyLjIwIG9yIGFib3ZlLCBvciBtb2RpZnkgeW91ciBQQVRIIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZC4KLSoqKiBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gcmVzdGFydCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgotCi1fTFRfRU9GCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIHBvd2VycGMpCi0gICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCi0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKLQkjIGlzOyBvdGhlcndpc2UsIHByZXBlbmQgRVhQT1JUUy4uLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgotICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICAgIGZpfgotICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBoYWlrdSopCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBzaHJleHRfY21kcz0uZGxsCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCXByZWZpeF9jbWRzPSIkU0VEIn4KLQlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOwotCWZpfgotCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKLSAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICA7OwotCi0gICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCi0gICAgICB0bXBfZGlldD1ubwotICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCi0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKLQkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCi0gICAgICB0aGVuCi0JdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCi0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0gICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwotCSAgOzsKLQlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQotCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7Ci0JZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKLQlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgotCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKLQlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OwotICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMwotICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKLQl4bFtbY0NdXSogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCi0JICB0bXBfYWRkZmxhZz0gOzsKLQludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCi0JICA7OwotCWVzYWMKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JZXNhYwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0gICAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCi0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0gICAgICAgIGZpCi0KLQljYXNlICRjY19iYXNlbmFtZSBpbgotCXRjYyopCi0JICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctcmR5bmFtaWMnCi0JICA7OwotCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKLQkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0JICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCSAgZmkKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLQl3bGFyYz0KLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5Ci0qKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1fTFRfRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW5ub3QKLSoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotCTs7Ci0JKikKLQkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKLQkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCi0JICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwotCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICBmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCBubyA9ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSI7IHRoZW4KLSAgICAgIHJ1bnBhdGhfdmFyPQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqKQotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKLSAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyIgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgotCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotCSMgYnJva2VuIGNvbGxlY3QyLgotCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYWl4W1s0LTldXSopCi0gICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPQotICAgICAgZWxzZQotCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gR05VIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgdG8gQUlYIG5tLgotCSMgV2l0aG91dCB0aGUgIi1sIiBvcHRpb24sIG9yIHdpdGggdGhlICItQiIgb3B0aW9uLCBBSVggbm0gdHJlYXRzCi0JIyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMKLQkjIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KLQkjIFdoaWxlIHRoZSAnd2Vhaycga2V5d29yZCBpcyBpZ25vcmVkIGluIHRoZSBFeHBvcnQgRmlsZSwgd2UgbmVlZAotCSMgaXQgaW4gdGhlIEltcG9ydCBGaWxlIGZvciB0aGUgJ2FpeC1zb25hbWUnIGZlYXR1cmUsIHNvIHdlIGhhdmUKLQkjIHRvIHJlcGxhY2UgdGhlICItQiIgb3B0aW9uIHdpdGggIi1QIiBmb3IgQUlYIG5tLgotCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgaWYgKFwkIDIgPT0gIlciKSB7IHByaW50IFwkIDMgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAzIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW1teQl1dKlwpJC9QXDEvJ1wnJ2AgLVBDcGdsICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSAmJiAoW3N1YnN0cl0oXCQgMSwxLDEpICE9ICIuIikpIHsgaWYgKChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSB7IHByaW50IFwkIDEgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAxIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIGhhdmUgcnVudGltZSBsaW5raW5nIGVuYWJsZWQsIGFuZCB1c2UgaXQgZm9yIGV4ZWN1dGFibGVzLgotCSMgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZS9kaXNhYmxlIHJ1bnRpbWUgbGlua2luZwotCSMgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGVkIC0KLQkjIHdoZW4gIndpdGhfYWl4X3NvbmFtZSxhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiBpczoKLQkjICJhaXgsbm8iICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCi0JIyAiYWl4LHllcyIgIGxpYi5zbyAgICAgICAgICBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcwotCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKLQkjICJib3RoLG5vIiAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcwotCSMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKLQkjICJib3RoLHllcyIgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCi0JIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubwotCSMgInN2cjQsKiIgICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKLQkjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBpZiAodGVzdCB4LWJydGwgPSAieCRsZF9mbGFnIiB8fCB0ZXN0IHgtV2wsLWJydGwgPSAieCRsZF9mbGFnIik7IHRoZW4KLQkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgYnJlYWsKLQkgIGZpCi0JICBkb25lCi0JICBpZiB0ZXN0IHN2cjQsbm8gPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgIyBXaXRoIGFpeC1zb25hbWU9c3ZyNCwgd2UgY3JlYXRlIHRoZSBsaWIuc28uViBzaGFyZWQgYXJjaGl2ZXMgb25seSwKLQkgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgotCSAgICAjIFdlIGhhdmUgdG8gZm9yY2UgcnVudGltZSBsaW5raW5nIGluIHRoaXMgY2FzZS4KLQkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCi0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICBmaQotCi0gICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHdsLWYsJwotICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCi0gICAgICBhaXgsKikgOzsgIyB0cmFkaXRpb25hbCwgbm8gaW1wb3J0IGZpbGUKLSAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQotCSMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCi0JIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0JIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKLQkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICA6Ci0JICBlbHNlCi0JICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0JICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0JICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIickd2wtRycKLQlmaQotCSMgTmVlZCB0byBlbnN1cmUgcnVudGltZSBsaW5raW5nIGlzIGRpc2FibGVkIGZvciB0aGUgdHJhZGl0aW9uYWwKLQkjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcwotCSMgL3dpdGgvIEltcG9ydCBGaWxlIC0gd2UgZG8gbm90IHdhbnQgdG8gbWl4IHRoZW0uCi0Jc2hhcmVkX2ZsYWdfYWl4PSctc2hhcmVkJwotCXNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPSckd2wtRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCi0JICBmaQotCSAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJwotCSAgc2hhcmVkX2ZsYWdfc3ZyND0nJHdsLUcnCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJwotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgYWl4LHllcyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKLSAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZwotICAgICAgZWxzZQotCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0JZWxzZQotCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLQkgIyBlbXB0eSBleGVjdXRhYmxlLgotCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm5vdG9rJwotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJwotCSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBlbHNlCi0JICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQkgIGZpCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKLQkgICMgLWJydGwgYWZmZWN0cyBtdWx0aXBsZSBsaW5rZXIgc2V0dGluZ3MsIC1iZXJvayBkb2VzIG5vdCBhbmQgaXMgb3ZlcnJpZGRlbiBsYXRlcgotCSAgY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQ9J2BmdW5jX2VjaG9fYWxsICIkY29tcGlsZXJfZmxhZ3MgIiB8ICRTRUQgLWUgInMlLWJydGxcXChbWywgXV1cXCklLWJlcm9rXFwxJWciYCcKLQkgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KLQkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCi0JICBmaQotCSAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCi0JICBlbHNlCi0JICAgICMgdXNlZCBieSAtZGxwcmVvcGVuIHRvIGdldCB0aGUgc3ltYm9scwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJwotCSAgZmkKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBic2RpW1s0NV1dKikKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGNsKikKLQkjIE5hdGl2ZSBNU1ZDCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLQlsaWJleHQ9bGliCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9LmRsbAotCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCi0gICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOwotICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSAgICAgICAgICBmaX4KLSAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0gICAgICAgICAgbGlua25hbWVzPScKLQkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCi0JIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLQlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCi0JX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCSMgRG9uJ3QgdXNlIHJhbmxpYgotCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCi0JX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLSAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLSAgICAgICAgICAgICouZXhlfCouRVhFKSA7OwotICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKLSAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgZXNhY34KLSAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLSAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0gICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLSAgICAgICAgICBmaScKLQk7OwotICAgICAgKikKLQkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotCWxpYmV4dD1saWIKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0uZGxsCi0JIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0JX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCi0JIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLQlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMi4qKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotICAgICAgOzsKLQotICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCW00X2lmKCQxLCBbXSwgWwotCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0Ci0JICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKLQkgIF9MVF9MSU5LRVJfT1BUSU9OKFtpZiAkQ0MgdW5kZXJzdGFuZHMgLWJdLAotCSAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfX2IsICQxKSwgWy1iXSwKLQkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddLAotCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyddKV0sCi0JICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQkgIDs7Ci0JKikKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKLQkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCi0JIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KLQkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotCUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sXSwKLQkgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbF0sCi0JICBbc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0JICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAkd2wtZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsL2Rldi9udWxsIgotCSAgIEFDX0xJTktfSUZFTFNFKAotCSAgICAgW0FDX0xBTkdfU09VUkNFKAotCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAotCQkJICAgICAgW0MrK10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAotCQkJICAgICAgW0ZvcnRyYW4gNzddLCBbWwotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGVuZF1dLAotCQkJICAgICAgW0ZvcnRyYW5dLCBbWwotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGVuZF1dKV0pXSwKLQkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKLQkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQotICAgICAgICAgICBMREZMQUdTPSRzYXZlX0xERkxBR1NdKQotCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCI7IHRoZW4KLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgJHdsLWV4cG9ydHNfZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQlmaQotCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgbGludXgqKQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIHRjYyopCi0JIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCogfCBiaXRyaWcqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCi0JZWxzZQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCWZpCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBzaHJleHRfY21kcz0uZGxsCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCXByZWZpeF9jbWRzPSIkU0VEIn4KLQlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOwotCWZpfgotCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0gICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLWlucHV0ICR3bCRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0Jd2xhcmM9JyR3bCcKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotICAgICAgZWxzZQotCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotCSoiQ29tcGlsZXJzIDUuMCIqKQotCSAgd2xhcmM9JycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAkTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCSAgOzsKLQkqKQotCSAgd2xhcmM9JyR3bCcKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgJyR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0JIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQllbHNlCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3Qgc2VxdWVudCA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCi0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwotCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JwotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteixub2RlZnMnCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIsJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmV4cG9ydCcKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3Qgc25pID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmxhcmdlZHluc3ltJwotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZmkKLV0pCi1BQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCi10ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLV9MVF9UQUdWQVIod2l0aF9nbnVfbGQsICQxKT0kd2l0aF9nbnVfbGQKLQotX0xUX0RFQ0woW10sIFtsaWJleHRdLCBbMF0sIFtPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIildKWRubAotX0xUX0RFQ0woW10sIFtzaHJleHRfY21kc10sIFsxXSwgW1NoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpXSlkbmwKLV9MVF9ERUNMKFtdLCBbZXh0cmFjdF9leHBzeW1zX2NtZHNdLCBbMl0sCi0gICAgW1RoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0KLSAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCi0gICAgY2FzZSAkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW5dLAotCVtsdF9jdl9dX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpLAotCVskUk0gY29uZnRlc3QqCi0JZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotCSAgc29uYW1lPWNvbmZ0ZXN0Ci0JICBsaWI9Y29uZnRlc3QKLQkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotCSAgZGVwbGlicz0KLQkgIHdsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQotCSAgcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQotCSAgY29tcGlsZXJfZmxhZ3M9LXYKLQkgIGxpbmtlcl9mbGFncz0tdgotCSAgdmVyc3RyaW5nPQotCSAgb3V0cHV0X29iamRpcj0uCi0JICBsaWJuYW1lPWNvbmZ0ZXN0Ci0JICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLQkgIGlmIEFDX1RSWV9FVkFMKF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCi0JICB0aGVuCi0JICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0JICBlbHNlCi0JICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCSAgZmkKLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotCWVsc2UKLQkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotCWZpCi0JJFJNIGNvbmZ0ZXN0KgotCV0pCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9JGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLQotX0xUX1RBR0RFQ0woW2J1aWxkX2xpYnRvb2xfbmVlZF9sY10sIFthcmNoaXZlX2NtZHNfbmVlZF9sY10sIFswXSwKLSAgICBbV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllc10pCi1fTFRfVEFHREVDTChbYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwKLSAgICBbZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc10sIFswXSwKLSAgICBbV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpY10pCi1fTFRfVEFHREVDTChbXSwgW2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY10sIFsxXSwKLSAgICBbQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVuc10pCi1fTFRfVEFHREVDTChbXSwgW3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjXSwgWzFdLAotICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXNdKQotX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9uZWVkc19vYmplY3RdLCBbMV0sCi0gICAgW1doZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5XSkKLV9MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc10sIFsyXSwKLSAgICBbQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCi1fTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzXSwgWzJdLAotICAgIFtDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQotX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2NtZHNdLCBbMl0sIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmVdKQotX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2V4cHN5bV9jbWRzXSwgWzJdKQotX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfY21kc10sIFsyXSwKLSAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZwotICAgIGEgc2hhcmVkIGFyY2hpdmUuXSkKLV9MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2V4cHN5bV9jbWRzXSwgWzJdKQotX0xUX1RBR0RFQ0woW10sIFt3aXRoX2dudV9sZF0sIFsxXSwKLSAgICBbV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90XSkKLV9MVF9UQUdERUNMKFtdLCBbYWxsb3dfdW5kZWZpbmVkX2ZsYWddLCBbMV0sCi0gICAgW0ZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0XSkKLV9MVF9UQUdERUNMKFtdLCBbbm9fdW5kZWZpbmVkX2ZsYWddLCBbMV0sCi0gICAgW0ZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9sc10pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNdLCBbMV0sCi0gICAgW0ZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotICAgIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JdLCBbMV0sCi0gICAgW1doZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnRdKQotX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RdLCBbMF0sCi0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwotICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAotICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKLSAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKLSAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUKLSAgICBsaWJyYXJ5IGlzIHJlbG9jYXRlZF0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX21pbnVzX0xdLCBbMF0sCi0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCi0gICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX3NobGlicGF0aF92YXJdLCBbMF0sCi0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCi0gICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2F1dG9tYXRpY10sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCi0gICAgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKLSAgICBhZ2FpbnN0IGl0XSkKLV9MVF9UQUdERUNMKFtdLCBbaW5oZXJpdF9ycGF0aF0sIFswXSwKLSAgICBbU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKLSAgICB0byBydW50aW1lIHBhdGggbGlzdF0pCi1fTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCi0gICAgW1doZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllc10pCi1fTFRfVEFHREVDTChbXSwgW2Fsd2F5c19leHBvcnRfc3ltYm9sc10sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkXSkKLV9MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKLSAgICBbVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9sc10pCi1fTFRfVEFHREVDTChbXSwgW2V4Y2x1ZGVfZXhwc3ltc10sIFsxXSwKLSAgICBbU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9sc10pCi1fTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKLSAgICBbU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkXSkKLV9MVF9UQUdERUNMKFtdLCBbcHJlbGlua19jbWRzXSwgWzJdLAotICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCi1fTFRfVEFHREVDTChbXSwgW3Bvc3RsaW5rX2NtZHNdLCBbMl0sCi0gICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXNdKQotX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKLSAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzXSkKLWRubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotZG5sIF9MVF9UQUdERUNMKFtdLCBbdGhyZWFkX3NhZmVfZmxhZ19zcGVjXSwgWzFdLAotZG5sICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZCBzYWZlIG9iamVjdHNdKQotXSkjIF9MVF9MSU5LRVJfU0hMSUJTCi0KLQotIyBfTFRfTEFOR19DX0NPTkZJRyhbVEFHXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDIGNvbXBpbGVyIGFyZSBzdWl0YWJseQotIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCi0jIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KLW00X2RlZnVuKFtfTFRfTEFOR19DX0NPTkZJR10sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotbHRfc2F2ZV9DQz0kQ0MKLUFDX0xBTkdfUFVTSChDKQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9YwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCi0KLV9MVF9UQUdfQ09NUElMRVIKLSMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgotIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCi1jb21waWxlcl9ERUZBVUxUPSRDQwotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMjIENBVkVBVCBFTVBUT1I6Ci0jIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgotaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKLSAgX0xUX0NPTVBJTEVSX1BJQygkMSkKLSAgX0xUX0NPTVBJTEVSX0NfTygkMSkKLSAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQotICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0gIExUX1NZU19ETE9QRU5fU0VMRgotICBfTFRfQ01EX1NUUklQTElCCi0KLSAgIyBSZXBvcnQgd2hhdCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0gICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwotICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gICAgZmkKLSAgICA7OwotCi0gIGFpeFtbNC05XV0qKQotICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgICAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCi0gICAgICB5ZXMsYWl4LHllcykgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQotICAgICAgeWVzLHN2cjQsKikgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKLSAgICAgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcwotICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLSAgX0xUX0NPTkZJRygkMSkKLWZpCi1BQ19MQU5HX1BPUAotQ0M9JGx0X3NhdmVfQ0MKLV0pIyBfTFRfTEFOR19DX0NPTkZJRwotCi0KLSMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKLSMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQotIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCi1tNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCi1bbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKLWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCBubyAhPSAiJENYWCIgJiYKLSAgICAoICh0ZXN0IGcrKyA9ICIkQ1hYIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICh0ZXN0IGcrKyAhPSAiJENYWCIpKSk7IHRoZW4KLSAgQUNfUFJPR19DWFhDUFAKLWVsc2UKLSAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCi1maQotCi1BQ19MQU5HX1BVU0goQysrKQotX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KLV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KLV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi1fTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jcHAKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKLSMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKLSMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKLSMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgotaWYgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciI7IHRoZW4KLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLSAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgotCi0gICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi0gIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKLQotICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0gIF9MVF9UQUdfQ09NUElMRVIKLQotICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLSAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0gICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi0gIGx0X3NhdmVfQ0M9JENDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgbHRfc2F2ZV9MRD0kTEQKLSAgbHRfc2F2ZV9HQ0M9JEdDQwotICBHQ0M9JEdYWAotICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKLSAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAotICBlbHNlCi0gICAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi0gIGZpCi0gIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgotICAgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLSAgZWxzZQotICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECi0gIGZpCi0gIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi0gIENDPSR7Q1hYLSJjKysifQotICBDRkxBR1M9JENYWEZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi0gIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCi0gICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCi0gICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCi0gICAgZWxzZQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgotICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotICAgICAgTFRfUEFUSF9MRAotCi0gICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKLSAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICAgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCi0KLSAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bwotICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgICAgICB3bGFyYz0nJHdsJwotCi0gICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAotCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgICAgIGZpCi0gICAgICBlbHNlCi0gICAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgICAgIHdsYXJjPQotCi0gICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCi0gICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCi0gICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCi0gICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgotICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gICAgICBmaQotCi0gICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJwotCi0gICAgZWxzZQotICAgICAgR1hYPW5vCi0gICAgICB3aXRoX2dudV9sZD1ubwotICAgICAgd2xhcmM9Ci0gICAgZmkKLQotICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgzKikKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgOzsKLSAgICAgIGFpeFtbNC05XV0qKQotICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLSAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0gICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLSAgICAgICAgICBub19lbnRyeV9mbGFnPQotICAgICAgICBlbHNlCi0gICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0gICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0gICAgICAgICAgIyBoYXZlIHJ1bnRpbWUgbGlua2luZyBlbmFibGVkLCBhbmQgdXNlIGl0IGZvciBleGVjdXRhYmxlcy4KLSAgICAgICAgICAjIEZvciBzaGFyZWQgbGlicmFyaWVzLCB3ZSBlbmFibGUvZGlzYWJsZSBydW50aW1lIGxpbmtpbmcKLSAgICAgICAgICAjIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgY3JlYXRlZCAtCi0gICAgICAgICAgIyB3aGVuICJ3aXRoX2FpeF9zb25hbWUsYWl4X3VzZV9ydW50aW1lbGlua2luZyIgaXM6Ci0gICAgICAgICAgIyAiYWl4LG5vIiAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcwotICAgICAgICAgICMgImFpeCx5ZXMiICBsaWIuc28gICAgICAgICAgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKLSAgICAgICAgICAjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCi0gICAgICAgICAgIyAiYm90aCxubyIgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMKLSAgICAgICAgICAjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCi0gICAgICAgICAgIyAiYm90aCx5ZXMiIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcwotICAgICAgICAgICMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8KLSAgICAgICAgICAjICJzdnI0LCoiICAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCi0gICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQotICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKLQkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICAgICAgY2FzZSAkbGRfZmxhZyBpbgotCSAgICAgICotYnJ0bCopCi0JICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICAgICAgYnJlYWsKLQkgICAgICAgIDs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICAgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgotCSAgICAgICMgV2l0aCBhaXgtc29uYW1lPXN2cjQsIHdlIGNyZWF0ZSB0aGUgbGliLnNvLlYgc2hhcmVkIGFyY2hpdmVzIG9ubHksCi0JICAgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgotCSAgICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgotCSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgotCSAgICBmaQotCSAgICA7OwotICAgICAgICAgIGVzYWMKLQotICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0gICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgICBmaQotCi0gICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR3bC1mLCcKLSAgICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCi0gICAgICAgIGFpeCwqKSA7OwkjIG5vIGltcG9ydCBmaWxlCi0gICAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQotICAgICAgICAgICMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KLSAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLQotICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgotICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQotICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCi0JICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLQkgICAgOgotCSAgZWxzZQotCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLQkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotCSAgZmkKLSAgICAgICAgICBlc2FjCi0gICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JHNoYXJlZF9mbGFnJyAkd2wtRycKLQkgIGZpCi0JICAjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCi0JICAjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcwotCSAgIyAvd2l0aC8gSW1wb3J0IEZpbGUgLSB3ZSBkbyBub3Qgd2FudCB0byBtaXggdGhlbS4KLQkgIHNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKLQkgIHNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKLSAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLQkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0gICAgICAgICAgZWxzZQotCSAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCi0JICAgIGVsc2UKLQkgICAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKLQkgICAgZmkKLQkgICAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJwotCSAgICBzaGFyZWRfZmxhZ19zdnI0PSckd2wtRycKLSAgICAgICAgICBmaQotICAgICAgICBmaQotCi0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJwotICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCi0JIyBleHBvcnQuCi0gICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0JaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0gICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0gICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotICAgICAgICAgICMgVGhlICItRyIgbGlua2VyIGZsYWcgYWxsb3dzIHVuZGVmaW5lZCBzeW1ib2xzLgotICAgICAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm5vdG9rJwotICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQotICAgICAgICAgICMgZXhlY3V0YWJsZS4KLSAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgICAgIGVsc2UKLQkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0JICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLQkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJub3RvaycKLQkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJwotCSAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JICAgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgIGVsc2UKLQkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQkgICAgZmkKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKLQkgICAgIyAtYnJ0bCBhZmZlY3RzIG11bHRpcGxlIGxpbmtlciBzZXR0aW5ncywgLWJlcm9rIGRvZXMgbm90IGFuZCBpcyBvdmVycmlkZGVuIGxhdGVyCi0JICAgIGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkPSdgZnVuY19lY2hvX2FsbCAiJGNvbXBpbGVyX2ZsYWdzICIgfCAkU0VEIC1lICJzJS1icnRsXFwoW1ssIF1dXFwpJS1iZXJva1xcMSVnImAnCi0JICAgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KLQkgICAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKLQkgICAgICAjIGxpYnJhcmllcy4gTmVlZCAtYm5vcnRsIGxhdGUsIHdlIG1heSBoYXZlIC1icnRsIGluIExERkxBR1MuCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCi0JICAgIGZpCi0JICAgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCi0JICAgIGVsc2UKLQkgICAgICAjIHVzZWQgYnkgLWRscHJlb3BlbiB0byBnZXQgdGhlIHN5bWJvbHMKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJwotCSAgICBmaQotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJwotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0KLSAgICAgIGJlb3MqKQotCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQllbHNlCi0JICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotCi0gICAgICBjaG9ydXMqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgICopCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KLQksY2wqIHwgbm8sY2wqKQotCSAgIyBOYXRpdmUgTVNWQwotCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJwotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJwotCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLQkgIGxpYmV4dD1saWIKLQkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotCSAgc2hyZXh0X2NtZHM9LmRsbAotCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCi0gICAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7Ci0gICAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotICAgICAgICAgICAgZml+Ci0gICAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0gICAgICAgICAgICBsaW5rbmFtZXM9JwotCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgotCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLQkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCSAgIyBEb24ndCB1c2UgcmFubGliCi0JICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJwotCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLSAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0gICAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCi0gICAgICAgICAgICAgICouZXhlfCouRVhFKSA7OwotICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCi0gICAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgIGVzYWN+Ci0gICAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgotICAgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0gICAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0gICAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotICAgICAgICAgICAgZmknCi0JICA7OwotCSopCi0JICAjIGcrKwotCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLQkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCi0JICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLQkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCi0JICAgICMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgotICAgICAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICAgICAgZml+Ci0gICAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSAgZWxzZQotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICBmaQotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQotCTs7Ci0KLSAgICAgIG9zMiopCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQlzaHJleHRfY21kcz0uZGxsCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgIGVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICBlbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICBwcmVmaXhfY21kcz0iJFNFRCJ+Ci0JICBpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgICAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7Ci0JICBmaX4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCSAgY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfV9kbGwuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0JX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0JOzsKLQotICAgICAgZGd1eCopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgZWMrKyopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0gICAgICAgICAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0gICAgICAgICAgKikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBmcmVlYnNkMi4qKQotICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCi0JIyBzd2l0Y2ggdG8gRUxGCi0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZC1lbGYqKQotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICAgICAjIGNvbnZlbnRpb25zCi0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gICAgICAgIDs7Ci0KLSAgICAgIGhhaWt1KikKLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgICAgOzsKLQotICAgICAgaHB1eDkqKQotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLSAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICAgICAgOzsKLSAgICAgICAgICBhQ0MqKQotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0gICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLSAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBocHV4MTAqfGhwdXgxMSopCi0gICAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLSAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAqKQotCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgICAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICAgICAgICA7OwotICAgICAgICAgICopCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0gICAgICAgICAgYUNDKikKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgICBocHBhKjY0KikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgOzsKLQkgICAgICBpYTY0KikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgICAgKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICMKLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0JICAgIDs7Ci0gICAgICAgICAgKikKLQkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLQkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgICAgICAgIGhwcGEqNjQqKQotCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgICAgIDs7Ci0JICAgICAgICAgIGlhNjQqKQotCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgICAgICAgOzsKLQkgICAgICAgICAgKikKLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgICAgIDs7Ci0JICAgICAgICBlc2FjCi0JICAgICAgZmkKLQkgICAgZWxzZQotCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgZmkKLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBpbnRlcml4W1szLTldXSopCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLQkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0JIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLQkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0JIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgQ0MqKQotCSAgICAjIFNHSSBDKysKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAgICMgaW4gdGhlIGFyY2hpdmUuCi0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0JICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgICAgICBlbHNlCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgLW8gJGxpYicKLQkgICAgICBmaQotCSAgICBmaQotCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCi0gICAgICAgIDs7Ci0KLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgS0NDKikKLQkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAjCi0JICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJwotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgICAgOzsKLQkgIGljcGMqIHwgZWNwYyogKQotCSAgICAjIEludGVsIEMrKwotCSAgICB3aXRoX2dudV9sZD15ZXMKLQkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKLQkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KLQkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JICAgICAgKiJWZXJzaW9uIDcuIiopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCQk7OwotCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICAgICAgICB0bXBfaWR5bj0KLQkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwotCQllc2FjCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JCTs7Ci0JICAgIGVzYWMKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgICA7OwotICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQotICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQkgICAgY2FzZSBgJENDIC1WYCBpbgotCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCi0JICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgotICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgotICAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKLQkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KLSAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgotICAgICAgICAgICAgICAgICRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgotICAgICAgICAgICAgICAgICRSQU5MSUIgJG9sZGxpYicKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgotICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgotICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0gICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+Ci0gICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0gICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICAgICAgOzsKLQkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgICAgICA7OwotCSAgICBlc2FjCi0KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC0tcnBhdGggJHdsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICAgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKLQotCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgIwotCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJwotCSAgICA7OwotCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCi0JICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgICAkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQkgICAgZmkKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKLQotCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KLQkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCi0JICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCi0KLQkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICAgICAjIGluIHRoZSBhcmNoaXZlLgotCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQllc2FjCi0JOzsKLQotICAgICAgbHlueG9zKikKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0KLSAgICAgIG04OGsqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0KLSAgICAgIG12cyopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgY3h4KikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLQkgICopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0KLSAgICAgIG5ldGJzZCopCi0gICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKLQkgIHdsYXJjPQotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCWZpCi0JIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucwotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLQk7OwotCi0gICAgICAqbnRvKiB8ICpxbngqKQotICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotCTs7Ci0KLSAgICAgIG9wZW5ic2QqIHwgYml0cmlnKikKLQlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCI7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGZpCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCi0JZWxzZQotCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLQotICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIEtDQyopCi0JICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCSAgICBjYXNlICRob3N0IGluCi0JICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKLQkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLSAgICAgICAgICBSQ0MqKQotCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICAgIGN4eCopCi0JICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICBvc2YzKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkJOzsKLQkgICAgICAqKQotCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLSAgICAgICAgICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR3bC1pbnB1dCAkd2wkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0gICAgICAgICAgICAgICAgICAkUk0gJGxpYi5leHAnCi0JICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0JCTs7Ci0JICAgIGVzYWMKLQotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICMKLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0JICAgIDs7Ci0JICAqKQotCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCi0JICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICAgb3NmMyopCi0JICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCQkgIDs7Ci0JICAgICAgICAqKQotCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JCSAgOzsKLQkgICAgICBlc2FjCi0KLQkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQotCSAgICBlbHNlCi0JICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICBmaQotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHBzb3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotCi0gICAgICBzdW5vczQqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLQkgICAgIyBTdW4gQysrIDQueAotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICAgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHNvbGFyaXMqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKiB8IHN1bkNDKikKLQkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCi0JICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1NICR3bCRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQkgICAgY2FzZSAkaG9zdF9vcyBpbgotCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0JICAgICAgKikKLQkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4KLQkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQkgICAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCi0KLQkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KLQkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICAgIDs7Ci0gICAgICAgICAgZ2N4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKLQotCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KLQkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCi0JICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC16ICR7d2x9ZGVmcycKLQkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0KLQkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCi0JICAgICAgZWxzZQotCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSAnLUcnIE5PVCAnLXNoYXJlZCcgb24gdGhpcwotCSAgICAgICAgIyBwbGF0Zm9ybS4KLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAgICAgICAkQ0MgLUcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCi0JICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQkgICAgICBmaQotCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SICR3bCRsaWJkaXInCi0JICAgICAgY2FzZSAkaG9zdF9vcyBpbgotCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwotCQkqKQotCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JCSAgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIENDKikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLQkjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0JIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLQkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLQkjIGFzIC16IGRlZnMuCi0JX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JwotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosbm9kZWZzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SLCRsaWJkaXInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0JX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUJleHBvcnQnCi0JcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgotICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKLQkgICAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgotICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCi0JICAgIDs7Ci0JICAqKQotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIDs7Ci0JZXNhYwotICAgICAgOzsKLQotICAgICAgdGFuZGVtKikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBOQ0MqKQotCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHZ4d29ya3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotCi0gICAgICAqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotICAgIGVzYWMKLQotICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLSAgICB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHWFgKLSAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECi0KLSAgICAjIyBDQVZFQVQgRU1QVE9SOgotICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCi0gICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KLSAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQotICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCi0gICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKLSAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKLSAgICBfTFRfTElOS0VSX1NITElCUygkMSkKLSAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKLQotICAgIF9MVF9DT05GSUcoJDEpCi0gIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgotCi0gIENDPSRsdF9zYXZlX0NDCi0gIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLSAgTERDWFg9JExECi0gIExEPSRsdF9zYXZlX0xECi0gIEdDQz0kbHRfc2F2ZV9HQ0MKLSAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLSAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAotICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKLSAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCi0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1maSAjIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiCi0KLUFDX0xBTkdfUE9QCi1dKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRwotCi0KLSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGZ1bmNfc3RyaXBuYW1lX2NuZiBwcmVmaXggc3VmZml4IG5hbWUKLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0jCi0jIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSAobm9uLVhTSSkgdmVyc2lvbiBvZiBmdW5jX3N0cmlwbmFtZSwKLSMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAotIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCi1tNF9kZWZ1bihbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0sW2RubAotQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKLUFDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKLWZ1bmNfc3RyaXBuYW1lX2NuZiAoKQotewotICBjYXNlIEBTfEAyIGluCi0gIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJVxcXFxAU3xAMlwkJSUiYDs7Ci0gICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJUBTfEAyXCQlJSJgOzsKLSAgZXNhYwotfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgotXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKLQotCi0jIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKLSMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAotW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgotX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQotX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KLV9MVF9UQUdWQVIocHJlZGVwcywgJDEpPQotX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQotX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KLQotZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCi1kbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAotZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAotZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKLWRubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgotbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotaW50IGE7Ci12b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQotX0xUX0VPRgotXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotY2xhc3MgRm9vCi17Ci1wdWJsaWM6Ci0gIEZvbyAodm9pZCkgeyBhID0gMDsgfQotcHJpdmF0ZToKLSAgaW50IGE7Ci19OwotX0xUX0VPRgotXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGltcGxpY2l0IG5vbmUKLSAgICAgIGludGVnZXIqNCBhCi0gICAgICBhPTAKLSAgICAgIHJldHVybgotICAgICAgZW5kCi1fTFRfRU9GCi1dLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLSAgICAgIHN1YnJvdXRpbmUgZm9vCi0gICAgICBpbXBsaWNpdCBub25lCi0gICAgICBpbnRlZ2VyIGEKLSAgICAgIGE9MAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLV9MVF9FT0YKLV0sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLXB1YmxpYyBjbGFzcyBmb28gewotICBwcml2YXRlIGludCBhOwotICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKLSAgICBhID0gMDsKLSAgfQotfTsKLV9MVF9FT0YKLV0sIFskMV0sIFtHT10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotcGFja2FnZSBmb28KLWZ1bmMgZm9vKCkgewotfQotX0xUX0VPRgotXSkKLQotX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUwotY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAotKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7Ci0qXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7Ci0qXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Ci1lc2FjCi0KLWRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLWRubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi1pZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLQotICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCi0gICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgotICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCi0KLSAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbwotICAgIGNhc2UgJHByZXYkcCBpbgotCi0gICAgLUwqIHwgLVIqIHwgLWwqKQotICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCi0gICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgotICAgICAgIGlmIHRlc3QgeC1MID0gIiRwIiB8fAotICAgICAgICAgIHRlc3QgeC1SID0gIiRwIjsgdGhlbgotCSBwcmV2PSRwCi0JIGNvbnRpbnVlCi0gICAgICAgZmkKLQotICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCi0gICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCi0gICAgICAgICBjYXNlICRwIGluCi0gICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgZmkKLSAgICAgICBjYXNlICRwIGluCi0gICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSAgICAgICBlc2FjCi0gICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KLQkgY2FzZSAkcHJldiBpbgotCSAtTCB8IC1SKQotCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQotCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQotCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgotCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgotCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0kcHJldiRwCi0JICAgZWxzZQotCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAkcHJldiRwIgotCSAgIGZpCi0JICAgOzsKLQkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKLQkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCi0JIGVzYWMKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCi0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSRwcmV2JHAKLQkgZWxzZQotCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICRwcmV2JHAiCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICBwcmV2PQotICAgICAgIDs7Ci0KLSAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKLSAgICAqLiRvYmpleHQpCi0gICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCi0gICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCi0gICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCi0JIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCi0JIGNvbnRpbnVlCi0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCi0JIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSRwCi0JIGVsc2UKLQkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCi0JIGZpCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSRwCi0JIGVsc2UKLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KLQotICAgIGVzYWMKLSAgZG9uZQotCi0gICMgQ2xlYW4gdXAuCi0gIHJtIC1mIGEub3V0IGEuZXhlCi1lbHNlCi0gIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCi1maQotCi0kUk0gLWYgY29uZmVzdC4kb2JqZXh0Ci1DRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCi0KLSMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCi1tNF9pZihbJDFdLCBbQ1hYXSwKLVtjYXNlICRob3N0X29zIGluCi1pbnRlcml4W1szLTldXSopCi0gICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KLSAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KLSAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9Ci0gIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KLSAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Ci0gIDs7Ci1lc2FjCi1dKQotCi1jYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCi0qIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OwotZXNhYwotIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9Ci1pZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgotIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICRTRUQgLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCi1maQotX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCi0gICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAotICAgIFtEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KLSAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKLV9MVF9UQUdERUNMKFtdLCBbcHJlZGVwc10sIFsxXSkKLV9MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCi1fTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKLSAgICBbVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKLV0pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCi0KLQotIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCi1tNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCi1bQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCi1pZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0IG5vID0gIiRGNzciOyB0aGVuCi0gIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKLWZpCi0KLV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi1fTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KLWFjX2V4dD1mCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0Ci0jIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCi0jIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCi0jIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KLWlmIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRjc3IjsgdGhlbgotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKLSAgICAgIHN1YnJvdXRpbmUgdAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLSIKLQotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKLSAgICAgIHByb2dyYW0gdAotICAgICAgZW5kCi0iCi0KLSAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotICBfTFRfVEFHX0NPTVBJTEVSCi0KLSAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLSAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0gIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotICBsdF9zYXZlX0NDPSRDQwotICBsdF9zYXZlX0dDQz0kR0NDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0M9JHtGNzctImY3NyJ9Ci0gIENGTEFHUz0kRkZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi0gIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLSAgR0NDPSRHNzcKLSAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLSAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0gICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0gICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDMqKQotICAgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0gICAgICBhaXhbWzQtOV1dKikKLQlpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KLQkgIGNhc2UgJGVuYWJsZV9zaGFyZWQsJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgotCSAgeWVzLGFpeCx5ZXMpIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQotCSAgeWVzLHN2cjQsKikgOzsJCSMgc2hhcmVkIG9iamVjdCBhcyBsaWIuc28gYXJjaGl2ZSBtZW1iZXIgb25seQotCSAgeWVzLCopIGVuYWJsZV9zdGF0aWM9bm8gOzsJIyBzaGFyZWQgb2JqZWN0IGluIGxpYi5hIGFyY2hpdmUgYXMgd2VsbAotCSAgZXNhYwotCWZpCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKLQotICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLSAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLSAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHNzcKLSAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECi0KLSAgICAjIyBDQVZFQVQgRU1QVE9SOgotICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCi0gICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KLSAgICBfTFRfQ09NUElMRVJfUElDKCQxKQotICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCi0gICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgICBfTFRfQ09ORklHKCQxKQotICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLQotICBHQ0M9JGx0X3NhdmVfR0NDCi0gIENDPSRsdF9zYXZlX0NDCi0gIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLWZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GNzciCi0KLUFDX0xBTkdfUE9QCi1dKSMgX0xUX0xBTkdfRjc3X0NPTkZJRwotCi0KLSMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KLW00X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAotW0FDX0xBTkdfUFVTSChGb3J0cmFuKQotCi1pZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3Qgbm8gPSAiJEZDIjsgdGhlbgotICBfbHRfZGlzYWJsZV9GQz15ZXMKLWZpCi0KLV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi1fTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9Ci0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKLSMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQotIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAotIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCi1pZiB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0ZDIjsgdGhlbgotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKLSAgICAgIHN1YnJvdXRpbmUgdAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLSIKLQotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKLSAgICAgIHByb2dyYW0gdAotICAgICAgZW5kCi0iCi0KLSAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotICBfTFRfVEFHX0NPTVBJTEVSCi0KLSAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLSAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0gIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotICBsdF9zYXZlX0NDPSRDQwotICBsdF9zYXZlX0dDQz0kR0NDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0M9JHtGQy0iZjk1In0KLSAgQ0ZMQUdTPSRGQ0ZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQotCi0gIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0gIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQotCi0gICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICAgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KLQotICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgzKikKLSAgICAgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwotICAgICAgICBmaQotICAgICAgICA7OwotICAgICAgYWl4W1s0LTldXSopCi0JaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCi0JICBjYXNlICRlbmFibGVfc2hhcmVkLCR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KLQkgIHllcyxhaXgseWVzKSA7OwkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBmaWxlIG9ubHkKLQkgIHllcyxzdnI0LCopIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKLQkgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKLQkgIGVzYWMKLQlmaQotICAgICAgICA7OwotICAgIGVzYWMKLSAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCi0gICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi0gICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQotCi0gICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0kYWNfY3ZfZmNfY29tcGlsZXJfZ251Ci0gICAgX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAotCi0gICAgIyMgQ0FWRUFUIEVNUFRPUjoKLSAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5Ci0gICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCi0gICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKLSAgICBfTFRfQ09NUElMRVJfUElDKCQxKQotICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCi0gICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgICBfTFRfQ09ORklHKCQxKQotICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLQotICBHQ0M9JGx0X3NhdmVfR0NDCi0gIENDPSRsdF9zYXZlX0NDCi0gIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLWZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GQyIKLQotQUNfTEFOR19QT1AKLV0pIyBfTFRfTEFOR19GQ19DT05GSUcKLQotCi0jIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCi0jIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KLW00X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCi1BQ19MQU5HX1NBVkUKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWphdmEKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9UQUdfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLWx0X3NhdmVfR0NDPSRHQ0MKLUdDQz15ZXMKLUNDPSR7R0NKLSJnY2oifQotQ0ZMQUdTPSRHQ0pGTEFHUwotY29tcGlsZXI9JENDCi1fTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfVEFHVkFSKExELCAkMSk9JExECi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KLV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCi1fTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZwotX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcwotCi0jIyBDQVZFQVQgRU1QVE9SOgotIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKLSMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5Ci0jIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KLWlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLSAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCi0gIF9MVF9DT01QSUxFUl9QSUMoJDEpCi0gIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQotICBfTFRfTElOS0VSX1NITElCUygkMSkKLSAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQotCi0gIF9MVF9DT05GSUcoJDEpCi1maQotCi1BQ19MQU5HX1JFU1RPUkUKLQotR0NDPSRsdF9zYXZlX0dDQwotQ0M9JGx0X3NhdmVfQ0MKLUNGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLV0pIyBfTFRfTEFOR19HQ0pfQ09ORklHCi0KLQotIyBfTFRfTEFOR19HT19DT05GSUcoW1RBR10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBHbyBjb21waWxlcgotIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCi1tNF9kZWZ1bihbX0xUX0xBTkdfR09fQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9QUk9HX0dPXSlkbmwKLUFDX0xBTkdfU0FWRQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgR28gdGVzdCBzb3VyY2VzLgotYWNfZXh0PWdvCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBHbyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9InBhY2thZ2UgbWFpbjsgZnVuYyBtYWluKCkgeyB9IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwYWNrYWdlIG1haW47IGZ1bmMgbWFpbigpIHsgfScKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX1RBR19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwotbHRfc2F2ZV9HQ0M9JEdDQwotR0NDPXllcwotQ0M9JHtHT0MtImdjY2dvIn0KLUNGTEFHUz0kR09GTEFHUwotY29tcGlsZXI9JENDCi1fTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfVEFHVkFSKExELCAkMSk9JExECi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgR28gZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi0KLSMjIENBVkVBVCBFTVBUT1I6Ci0jIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgotaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKLSAgX0xUX0NPTVBJTEVSX1BJQygkMSkKLSAgX0xUX0NPTVBJTEVSX0NfTygkMSkKLSAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQotICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgX0xUX0NPTkZJRygkMSkKLWZpCi0KLUFDX0xBTkdfUkVTVE9SRQotCi1HQ0M9JGx0X3NhdmVfR0NDCi1DQz0kbHRfc2F2ZV9DQwotQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUwotXSkjIF9MVF9MQU5HX0dPX0NPTkZJRwotCi0KLSMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKLSMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgotbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCi1bQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCi1BQ19MQU5HX1NBVkUKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1yYwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JwotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX1RBR19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwotbHRfc2F2ZV9HQ0M9JEdDQwotR0NDPQotQ0M9JHtSQy0id2luZHJlcyJ9Ci1DRkxBR1M9Ci1jb21waWxlcj0kQ0MKLV9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLV9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKLQotaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICA6Ci0gIF9MVF9DT05GSUcoJDEpCi1maQotCi1HQ0M9JGx0X3NhdmVfR0NDCi1BQ19MQU5HX1JFU1RPUkUKLUNDPSRsdF9zYXZlX0NDCi1DRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCi1dKSMgX0xUX0xBTkdfUkNfQ09ORklHCi0KLQotIyBMVF9QUk9HX0dDSgotIyAtLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX1BST0dfR0NKXSwKLVttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAotICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCi0gICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQotICAgICAgdGVzdCBzZXQgPSAiJHtHQ0pGTEFHUytzZXR9IiB8fCBHQ0pGTEFHUz0iLWcgLU8yIgotICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCi1dKQotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKLQotCi0jIExUX1BST0dfR08KLSMgLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX1BST0dfR09dLAotW0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbywpCi1dKQotCi0KLSMgTFRfUFJPR19SQwotIyAtLS0tLS0tLS0tCi1BQ19ERUZVTihbTFRfUFJPR19SQ10sCi1bQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCi1dKQotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKLQotCi0jIF9MVF9ERUNMX0VHUkVQCi0jIC0tLS0tLS0tLS0tLS0tCi0jIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCi0jIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgotbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAotdGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAotX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQotX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKLV9MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQotZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KLUFDX1NVQlNUKFtHUkVQXSkKLV0pCi0KLQotIyBfTFRfREVDTF9PQkpEVU1QCi0jIC0tLS0tLS0tLS0tLS0tCi0jIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCi0jIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgotbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAotW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi1fTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCi1BQ19TVUJTVChbT0JKRFVNUF0pCi1dKQotCi0jIF9MVF9ERUNMX0RMTFRPT0wKLSMgLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCi1tNF9kZWZ1bihbX0xUX0RFQ0xfRExMVE9PTF0sCi1bQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLV9MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSkKLUFDX1NVQlNUKFtETExUT09MXSkKLV0pCi0KLSMgX0xUX0RFQ0xfU0VECi0jIC0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcwotIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgotbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCi1bQUNfUFJPR19TRUQKLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLVhzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKLV9MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCi1fTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKLSAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQotXSkjIF9MVF9ERUNMX1NFRAotCi1tNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKLSMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIwotIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCi0jICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1tNF9kZWZ1bihbQUNfUFJPR19TRURdLAotW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKLVsjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KLSMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBmaQotICAgIGRvbmUKLSAgZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotbHRfYWNfbWF4PTAKLWx0X2FjX2NvdW50PTAKLSMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCi0jIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgotZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCi0gIHRlc3QgISAtZiAiJGx0X2FjX3NlZCIgJiYgY29udGludWUKLSAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCi0gIGx0X2FjX2NvdW50PTAKLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCi0gICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBicmVhawotICBmaQotICB3aGlsZSB0cnVlOyBkbwotICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCi0gICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCi0gICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICBlY2hvID4+Y29uZnRlc3QubmwKLSAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhawotICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKLSAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0IDEwIC1sdCAiJGx0X2FjX2NvdW50IiAmJiBicmVhawotICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCi0gICAgaWYgdGVzdCAiJGx0X2FjX2NvdW50IiAtZ3QgIiRsdF9hY19tYXgiOyB0aGVuCi0gICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50Ci0gICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgZmkKLSAgZG9uZQotZG9uZQotXSkKLVNFRD0kbHRfY3ZfcGF0aF9TRUQKLUFDX1NVQlNUKFtTRURdKQotQUNfTVNHX1JFU1VMVChbJFNFRF0pCi1dKSNBQ19QUk9HX1NFRAotXSkjbTRfaWZuZGVmCi0KLSMgT2xkIG5hbWU6Ci1BVV9BTElBUyhbTFRfQUNfUFJPR19TRURdLCBbQUNfUFJPR19TRURdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sIFtdKQotCi0KLSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBGaW5kIG91dCB3aGV0aGVyIHRoZSBzaGVsbCBpcyBCb3VybmUgb3IgWFNJIGNvbXBhdGlibGUsCi0jIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KLW00X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAotW2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBsdF91bnNldD11bnNldAotZWxzZQotICBsdF91bnNldD1mYWxzZQotZmkKLV9MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKLQotIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQotY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgotIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCi0gICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgotICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJwotICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCi0gIDs7Ci0gKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCi0gIGx0X1NQMk5MPSd0ciBcMTAwIFxuJwotICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKLSAgOzsKLWVzYWMKLV9MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAotX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCi1dKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCi0KLQotIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZXRlcm1pbmUgd2hhdCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKLSMgZnVuY190b19ob3N0X2ZpbGUgKGFuZCwgaW1wbGljaXRseSwgYnkgZnVuY190b19ob3N0X3BhdGgpLiAgVGhlc2UgYXJlIG5lZWRlZAotIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCi1tNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCi1BQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCi1BQ19DQUNIRV9WQUwobHRfY3ZfdG9faG9zdF9maWxlX2NtZCwKLVtjYXNlICRob3N0IGluCi0gICotKi1taW5ndyogKQotICAgIGNhc2UgJGJ1aWxkIGluCi0gICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgICAgICAgOzsKLSAgICAgICotKi1jeWd3aW4qICkKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgotICAgICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICAqLSotY3lnd2luKiApCi0gICAgY2FzZSAkYnVpbGQgaW4KLSAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgotICAgICAgICA7OwotICAgICAgKi0qLWN5Z3dpbiogKQotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSAgICAgICAgOzsKLSAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCi0gICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0gICAgOzsKLWVzYWMKLV0pCi10b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCi1BQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCi1fTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKLSAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSlkbmwKLQotQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl90b190b29sX2ZpbGVfY21kLAotWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KLWx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqICkKLSAgICBjYXNlICRidWlsZCBpbgotICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci1lc2FjCi1dKQotdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAotQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQotX0xUX0RFQ0woW3RvX3Rvb2xfZmlsZV9jbWRdLCBbbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0sCi0gICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKLV0pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwpkaWZmIC0tZ2l0IGEvbTQvbG9jay5tNCBiL200L2xvY2subTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMTE5MzMuLjAwMDAwMDAKLS0tIGEvbTQvbG9jay5tNAorKysgL2Rldi9udWxsCkBAIC0xLDMxNiArMCwwIEBACi0jIGxvY2subTQgc2VyaWFsIDcgKGdldHRleHQtMC4xNykKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBCcnVubyBIYWlibGUuCi0KLWRubCBUZXN0cyBmb3IgYSBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHRvIGJlIHVzZWQuCi1kbmwgRGVmaW5lcyBhdCBtb3N0IG9uZSBvZiB0aGUgbWFjcm9zIFVTRV9QT1NJWF9USFJFQURTLCBVU0VfU09MQVJJU19USFJFQURTLAotZG5sIFVTRV9QVEhfVEhSRUFEUywgVVNFX1dJTjMyX1RIUkVBRFMKLWRubCBTZXRzIHRoZSB2YXJpYWJsZXMgTElCVEhSRUFEIGFuZCBMVExJQlRIUkVBRCB0byB0aGUgbGlua2VyIG9wdGlvbnMgZm9yIHVzZQotZG5sIGluIGEgTWFrZWZpbGUgKExJQlRIUkVBRCBmb3IgdXNlIHdpdGhvdXQgbGlidG9vbCwgTFRMSUJUSFJFQUQgZm9yIHVzZSB3aXRoCi1kbmwgbGlidG9vbCkuCi1kbmwgU2V0cyB0aGUgdmFyaWFibGVzIExJQk1VTFRJVEhSRUFEIGFuZCBMVExJQk1VTFRJVEhSRUFEIHNpbWlsYXJseSwgZm9yCi1kbmwgcHJvZ3JhbXMgdGhhdCByZWFsbHkgbmVlZCBtdWx0aXRocmVhZCBmdW5jdGlvbmFsaXR5LiBUaGUgZGlmZmVyZW5jZQotZG5sIGJldHdlZW4gTElCVEhSRUFEIGFuZCBMSUJNVUxUSVRIUkVBRCBpcyB0aGF0IG9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHdlYWsKLWRubCBzeW1ib2xzLCB0eXBpY2FsbHkgTElCVEhSRUFEPSIiIHdoZXJlYXMgTElCTVVMVElUSFJFQUQ9Ii1scHRocmVhZCIuCi1kbmwgQWRkcyB0byBDUFBGTEFHUyB0aGUgZmxhZyAtRF9SRUVOVFJBTlQgb3IgLURfVEhSRUFEX1NBRkUgaWYgbmVlZGVkIGZvcgotZG5sIG11bHRpdGhyZWFkLXNhZmUgcHJvZ3JhbXMuCi0KLUFDX0RFRlVOKFtnbF9MT0NLX0VBUkxZXSwKLVsKLSAgQUNfUkVRVUlSRShbZ2xfTE9DS19FQVJMWV9CT0RZXSkKLV0pCi0KLWRubCBUaGUgZ3V0cyBvZiBnbF9MT0NLX0VBUkxZLiBOZWVkcyB0byBiZSBleHBhbmRlZCBvbmx5IG9uY2UuCi0KLUFDX0RFRlVOKFtnbF9MT0NLX0VBUkxZX0JPRFldLAotWwotICBkbmwgT3JkZXJpbmcgY29uc3RyYWludHM6IFRoaXMgbWFjcm8gbW9kaWZpZXMgQ1BQRkxBR1MgaW4gYSB3YXkgdGhhdAotICBkbmwgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mIHRoZSBhdXRvY29uZiB0ZXN0cyB0aGF0IHRlc3QgZm9yICpfdW5sb2NrZWQKLSAgZG5sIGRlY2xhcmF0aW9ucywgb24gQUlYIDUgYXQgbGVhc3QuIFRoZXJlZm9yZSBpdCBtdXN0IGNvbWUgZWFybHkuCi0gIEFDX0JFRk9SRShbJDBdLCBbZ2xfRlVOQ19HTElCQ19VTkxPQ0tFRF9JT10pZG5sCi0gIEFDX0JFRk9SRShbJDBdLCBbZ2xfQVJHUF0pZG5sCi0KLSAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQotICBkbmwgX0dOVV9TT1VSQ0UgaXMgbmVlZGVkIGZvciBwdGhyZWFkX3J3bG9ja190IG9uIGdsaWJjIHN5c3RlbXMuCi0gIGRubCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgd2FzIGludHJvZHVjZWQgaW4gYXV0b2NvbmYgMi42MCBhbmQgb2Jzb2xldGVzCi0gIGRubCBBQ19HTlVfU09VUkNFLgotICBtNF9pZmRlZihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKLSAgICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldLAotICAgIFtBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSldKQotICBkbmwgQ2hlY2sgZm9yIG11bHRpdGhyZWFkaW5nLgotICBBQ19BUkdfRU5BQkxFKHRocmVhZHMsCi1BQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGhyZWFkcz17cG9zaXh8c29sYXJpc3xwdGh8d2luMzJ9XSwgW3NwZWNpZnkgbXVsdGl0aHJlYWRpbmcgQVBJXSkKLUFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtdGhyZWFkc10sIFtidWlsZCB3aXRob3V0IG11bHRpdGhyZWFkIHNhZmV0eV0pLAotICAgIFtnbF91c2VfdGhyZWFkcz0kZW5hYmxldmFsXSwKLSAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgICAgZG5sIERpc2FibGUgbXVsdGl0aHJlYWRpbmcgYnkgZGVmYXVsdCBvbiBPU0YvMSwgYmVjYXVzZSBpdCBpbnRlcmZlcmVzCi0gICAgICAgZG5sIHdpdGggZm9yaygpL2V4ZWMoKTogV2hlbiBtc2dleGVjIGlzIGxpbmtlZCB3aXRoIC1scHRocmVhZCwgaXRzIGNoaWxkCi0gICAgICAgZG5sIHByb2Nlc3MgZ2V0cyBhbiBlbmRsZXNzIHNlZ21lbnRhdGlvbiBmYXVsdCBpbnNpZGUgZXhlY3ZwKCkuCi0gICAgICAgb3NmKikgZ2xfdXNlX3RocmVhZHM9bm8gOzsKLSAgICAgICAqKSAgICBnbF91c2VfdGhyZWFkcz15ZXMgOzsKLSAgICAgZXNhYwotICAgIF0pCi0gIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCi0gICAgIyBGb3IgdXNpbmcgPHB0aHJlYWQuaD46Ci0gICAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgICBvc2YqKQotICAgICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLURfUkVFTlRSQU5UIHNvIHRoYXQgaXQKLSAgICAgICAgIyBncm9rcyA8cHRocmVhZC5oPi4gY2MgYWxzbyB1bmRlcnN0YW5kcyB0aGUgZmxhZyAtcHRocmVhZCwgYnV0Ci0gICAgICAgICMgd2UgZG9uJ3QgdXNlIGl0IGJlY2F1c2UgMS4gZ2NjLTIuOTUgZG9lc24ndCB1bmRlcnN0YW5kIC1wdGhyZWFkLAotICAgICAgICAjIDIuIHB1dHRpbmcgYSBmbGFnIGludG8gQ1BQRkxBR1MgdGhhdCBoYXMgYW4gZWZmZWN0IG9uIHRoZSBsaW5rZXIKLSAgICAgICAgIyBjYXVzZXMgdGhlIEFDX1RSWV9MSU5LIHRlc3QgYmVsb3cgdG8gc3VjY2VlZCB1bmV4cGVjdGVkbHksCi0gICAgICAgICMgbGVhZGluZyB0byB3cm9uZyB2YWx1ZXMgb2YgTElCVEhSRUFEIGFuZCBMVExJQlRIUkVBRC4KLSAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9SRUVOVFJBTlQiCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgU29tZSBzeXN0ZW1zIG9wdGltaXplIGZvciBzaW5nbGUtdGhyZWFkZWQgcHJvZ3JhbXMgYnkgZGVmYXVsdCwgYW5kCi0gICAgIyBuZWVkIHNwZWNpYWwgZmxhZ3MgdG8gZGlzYWJsZSB0aGVzZSBvcHRpbWl6YXRpb25zLiBGb3IgZXhhbXBsZSwgdGhlCi0gICAgIyBkZWZpbml0aW9uIG9mICdlcnJubycgaW4gPGVycm5vLmg+LgotICAgIGNhc2UgIiRob3N0X29zIiBpbgotICAgICAgYWl4KiB8IGZyZWVic2QqKSBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1RIUkVBRF9TQUZFIiA7OwotICAgICAgc29sYXJpcyopIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURfUkVFTlRSQU5UIiA7OwotICAgIGVzYWMKLSAgZmkKLV0pCi0KLWRubCBUaGUgZ3V0cyBvZiBnbF9MT0NLLiBOZWVkcyB0byBiZSBleHBhbmRlZCBvbmx5IG9uY2UuCi0KLUFDX0RFRlVOKFtnbF9MT0NLX0JPRFldLAotWwotICBBQ19SRVFVSVJFKFtnbF9MT0NLX0VBUkxZX0JPRFldKQotICBnbF90aHJlYWRzX2FwaT1ub25lCi0gIExJQlRIUkVBRD0KLSAgTFRMSUJUSFJFQUQ9Ci0gIExJQk1VTFRJVEhSRUFEPQotICBMVExJQk1VTFRJVEhSRUFEPQotICBpZiB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiICE9IG5vOyB0aGVuCi0gICAgZG5sIENoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB3ZWFrIGRlY2xhcmF0aW9ucy4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW1wb3J0ZWQgc3ltYm9scyBjYW4gYmUgZGVjbGFyZWQgd2Vha10pCi0gICAgZ2xfaGF2ZV93ZWFrPW5vCi0gICAgQUNfVFJZX0xJTksoW2V4dGVybiB2b2lkIHh5enp5ICgpOwotI3ByYWdtYSB3ZWFrIHh5enp5XSwgW3h5enp5KCk7XSwgW2dsX2hhdmVfd2Vhaz15ZXNdKQotICAgIEFDX01TR19SRVNVTFQoWyRnbF9oYXZlX3dlYWtdKQotICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHBvc2l4OyB0aGVuCi0gICAgICAjIE9uIE9TRi8xLCB0aGUgY29tcGlsZXIgbmVlZHMgdGhlIGZsYWcgLXB0aHJlYWQgb3IgLURfUkVFTlRSQU5UIHNvIHRoYXQKLSAgICAgICMgaXQgZ3Jva3MgPHB0aHJlYWQuaD4uIEl0J3MgYWRkZWQgYWJvdmUsIGluIGdsX0xPQ0tfRUFSTFlfQk9EWS4KLSAgICAgIEFDX0NIRUNLX0hFQURFUihwdGhyZWFkLmgsIGdsX2hhdmVfcHRocmVhZF9oPXllcywgZ2xfaGF2ZV9wdGhyZWFkX2g9bm8pCi0gICAgICBpZiB0ZXN0ICIkZ2xfaGF2ZV9wdGhyZWFkX2giID0geWVzOyB0aGVuCi0gICAgICAgICMgT3RoZXIgcG9zc2libGUgdGVzdHM6Ci0gICAgICAgICMgICAtbHB0aHJlYWRzIChGU1UgdGhyZWFkcywgUEN0aHJlYWRzKQotICAgICAgICAjICAgLWxndGhyZWFkcwotICAgICAgICBnbF9oYXZlX3B0aHJlYWQ9Ci0gICAgICAgICMgVGVzdCB3aGV0aGVyIGJvdGggcHRocmVhZF9tdXRleF9sb2NrIGFuZCBwdGhyZWFkX211dGV4YXR0cl9pbml0IGV4aXN0Ci0gICAgICAgICMgaW4gbGliYy4gSVJJWCA2LjUgaGFzIHRoZSBmaXJzdCBvbmUgaW4gYm90aCBsaWJjIGFuZCBsaWJwdGhyZWFkLCBidXQKLSAgICAgICAgIyB0aGUgc2Vjb25kIG9uZSBvbmx5IGluIGxpYnB0aHJlYWQsIGFuZCBsb2NrLmMgbmVlZHMgaXQuCi0gICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCi0gICAgICAgICAgW3B0aHJlYWRfbXV0ZXhfbG9jaygocHRocmVhZF9tdXRleF90KikwKTsKLSAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgocHRocmVhZF9tdXRleGF0dHJfdCopMCk7XSwKLSAgICAgICAgICBbZ2xfaGF2ZV9wdGhyZWFkPXllc10pCi0gICAgICAgICMgVGVzdCBmb3IgbGlicHRocmVhZCBieSBsb29raW5nIGZvciBwdGhyZWFkX2tpbGwuIChOb3QgcHRocmVhZF9zZWxmLAotICAgICAgICAjIHNpbmNlIGl0IGlzIGRlZmluZWQgYXMgYSBtYWNybyBvbiBPU0YvMS4pCi0gICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCi0gICAgICAgICAgIyBUaGUgcHJvZ3JhbSBsaW5rcyBmaW5lIHdpdGhvdXQgbGlicHRocmVhZC4gQnV0IGl0IG1heSBhY3R1YWxseQotICAgICAgICAgICMgbmVlZCB0byBsaW5rIHdpdGggbGlicHRocmVhZCBpbiBvcmRlciB0byBjcmVhdGUgbXVsdGlwbGUgdGhyZWFkcy4KLSAgICAgICAgICBBQ19DSEVDS19MSUIocHRocmVhZCwgcHRocmVhZF9raWxsLAotICAgICAgICAgICAgW0xJQk1VTFRJVEhSRUFEPS1scHRocmVhZCBMVExJQk1VTFRJVEhSRUFEPS1scHRocmVhZAotICAgICAgICAgICAgICMgT24gU29sYXJpcyBhbmQgSFAtVVgsIG1vc3QgcHRocmVhZCBmdW5jdGlvbnMgZXhpc3QgYWxzbyBpbiBsaWJjLgotICAgICAgICAgICAgICMgVGhlcmVmb3JlIHB0aHJlYWRfaW5fdXNlKCkgbmVlZHMgdG8gYWN0dWFsbHkgdHJ5IHRvIGNyZWF0ZSBhCi0gICAgICAgICAgICAgIyB0aHJlYWQ6IHB0aHJlYWRfY3JlYXRlIGZyb20gbGliYyB3aWxsIGZhaWwsIHdoZXJlYXMKLSAgICAgICAgICAgICAjIHB0aHJlYWRfY3JlYXRlIHdpbGwgYWN0dWFsbHkgY3JlYXRlIGEgdGhyZWFkLgotICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgotICAgICAgICAgICAgICAgc29sYXJpcyogfCBocHV4KikKLSAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtQVEhSRUFEX0lOX1VTRV9ERVRFQ1RJT05fSEFSRF0sIDEsCi0gICAgICAgICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgcHRocmVhZF9pbl91c2UoKSBkZXRlY3Rpb24gaXMgaGFyZC5dKQotICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIF0pCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAjIFNvbWUgbGlicmFyeSBpcyBuZWVkZWQuIFRyeSBsaWJwdGhyZWFkIGFuZCBsaWJjX3IuCi0gICAgICAgICAgQUNfQ0hFQ0tfTElCKHB0aHJlYWQsIHB0aHJlYWRfa2lsbCwKLSAgICAgICAgICAgIFtnbF9oYXZlX3B0aHJlYWQ9eWVzCi0gICAgICAgICAgICAgTElCVEhSRUFEPS1scHRocmVhZCBMVExJQlRIUkVBRD0tbHB0aHJlYWQKLSAgICAgICAgICAgICBMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQgTFRMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWRdKQotICAgICAgICAgIGlmIHRlc3QgLXogIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCi0gICAgICAgICAgICAjIEZvciBGcmVlQlNEIDQuCi0gICAgICAgICAgICBBQ19DSEVDS19MSUIoY19yLCBwdGhyZWFkX2tpbGwsCi0gICAgICAgICAgICAgIFtnbF9oYXZlX3B0aHJlYWQ9eWVzCi0gICAgICAgICAgICAgICBMSUJUSFJFQUQ9LWxjX3IgTFRMSUJUSFJFQUQ9LWxjX3IKLSAgICAgICAgICAgICAgIExJQk1VTFRJVEhSRUFEPS1sY19yIExUTElCTVVMVElUSFJFQUQ9LWxjX3JdKQotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3B0aHJlYWQiOyB0aGVuCi0gICAgICAgICAgZ2xfdGhyZWFkc19hcGk9cG9zaXgKLSAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9QT1NJWF9USFJFQURTXSwgMSwKLSAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIFBPU0lYIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuXSkKLSAgICAgICAgICBpZiB0ZXN0IC1uICIkTElCTVVMVElUSFJFQUQiIHx8IHRlc3QgLW4gIiRMVExJQk1VTFRJVEhSRUFEIjsgdGhlbgotICAgICAgICAgICAgaWYgdGVzdCAkZ2xfaGF2ZV93ZWFrID0geWVzOyB0aGVuCi0gICAgICAgICAgICAgIEFDX0RFRklORShbVVNFX1BPU0lYX1RIUkVBRFNfV0VBS10sIDEsCi0gICAgICAgICAgICAgICAgW0RlZmluZSBpZiByZWZlcmVuY2VzIHRvIHRoZSBQT1NJWCBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IHNob3VsZCBiZSBtYWRlIHdlYWsuXSkKLSAgICAgICAgICAgICAgTElCVEhSRUFEPQotICAgICAgICAgICAgICBMVExJQlRIUkVBRD0KLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZmkKLSAgICAgICAgICAjIE9TRi8xIDQuMCBhbmQgTWFjT1MgWCAxMC4xIGxhY2sgdGhlIHB0aHJlYWRfcndsb2NrX3QgdHlwZSBhbmQgdGhlCi0gICAgICAgICAgIyBwdGhyZWFkX3J3bG9ja18qIGZ1bmN0aW9ucy4KLSAgICAgICAgICBBQ19DSEVDS19UWVBFKFtwdGhyZWFkX3J3bG9ja190XSwKLSAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF9SV0xPQ0tdLCAxLAotICAgICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgUE9TSVggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBoYXMgcmVhZC93cml0ZSBsb2Nrcy5dKV0sCi0gICAgICAgICAgICBbXSwKLSAgICAgICAgICAgIFsjaW5jbHVkZSA8cHRocmVhZC5oPl0pCi0gICAgICAgICAgIyBnbGliYyBkZWZpbmVzIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIGFzIGVudW0sIG5vdCBhcyBhIG1hY3JvLgotICAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCi0gICAgICAgICAgICBbI2lmIF9fRnJlZUJTRF9fID09IDQKLWVycm9yICJObywgaW4gRnJlZUJTRCA0LjAgcmVjdXJzaXZlIG11dGV4ZXMgYWN0dWFsbHkgZG9uJ3Qgd29yay4iCi0jZWxzZQotaW50IHggPSAoaW50KVBUSFJFQURfTVVURVhfUkVDVVJTSVZFOwotcmV0dXJuICF4OwotI2VuZGlmXSwKLSAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVdLCAxLAotICAgICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgPHB0aHJlYWQuaD4gZGVmaW5lcyBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRS5dKV0pCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHNvbGFyaXM7IHRoZW4KLSAgICAgICAgZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkPQotICAgICAgICBnbF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICBMSUJTPSIkTElCUyAtbHRocmVhZCIKLSAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDx0aHJlYWQuaD4KLSNpbmNsdWRlIDxzeW5jaC5oPl0sCi0gICAgICAgICAgW3Rocl9zZWxmKCk7XSwKLSAgICAgICAgICBbZ2xfaGF2ZV9zb2xhcmlzdGhyZWFkPXllc10pCi0gICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiCi0gICAgICAgIGlmIHRlc3QgLW4gIiRnbF9oYXZlX3NvbGFyaXN0aHJlYWQiOyB0aGVuCi0gICAgICAgICAgZ2xfdGhyZWFkc19hcGk9c29sYXJpcwotICAgICAgICAgIExJQlRIUkVBRD0tbHRocmVhZAotICAgICAgICAgIExUTElCVEhSRUFEPS1sdGhyZWFkCi0gICAgICAgICAgTElCTVVMVElUSFJFQUQ9IiRMSUJUSFJFQUQiCi0gICAgICAgICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIgotICAgICAgICAgIEFDX0RFRklORShbVVNFX1NPTEFSSVNfVEhSRUFEU10sIDEsCi0gICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBvbGQgU29sYXJpcyBtdWx0aXRocmVhZGluZyBsaWJyYXJ5IGNhbiBiZSB1c2VkLl0pCi0gICAgICAgICAgaWYgdGVzdCAkZ2xfaGF2ZV93ZWFrID0geWVzOyB0aGVuCi0gICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9TT0xBUklTX1RIUkVBRFNfV0VBS10sIDEsCi0gICAgICAgICAgICAgIFtEZWZpbmUgaWYgcmVmZXJlbmNlcyB0byB0aGUgb2xkIFNvbGFyaXMgbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUgbWFkZSB3ZWFrLl0pCi0gICAgICAgICAgICBMSUJUSFJFQUQ9Ci0gICAgICAgICAgICBMVExJQlRIUkVBRD0KLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSBwdGg7IHRoZW4KLSAgICAgIGdsX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICAgIEFDX0xJQl9MSU5LRkxBR1MocHRoKQotICAgICAgZ2xfaGF2ZV9wdGg9Ci0gICAgICBnbF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgTElCUz0iJExJQlMgLWxwdGgiCi0gICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aC5oPl0sIFtwdGhfc2VsZigpO10sIGdsX2hhdmVfcHRoPXllcykKLSAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiCi0gICAgICBpZiB0ZXN0IC1uICIkZ2xfaGF2ZV9wdGgiOyB0aGVuCi0gICAgICAgIGdsX3RocmVhZHNfYXBpPXB0aAotICAgICAgICBMSUJUSFJFQUQ9IiRMSUJQVEgiCi0gICAgICAgIExUTElCVEhSRUFEPSIkTFRMSUJQVEgiCi0gICAgICAgIExJQk1VTFRJVEhSRUFEPSIkTElCVEhSRUFEIgotICAgICAgICBMVExJQk1VTFRJVEhSRUFEPSIkTFRMSUJUSFJFQUQiCi0gICAgICAgIEFDX0RFRklORShbVVNFX1BUSF9USFJFQURTXSwgMSwKLSAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgUHRoIG11bHRpdGhyZWFkaW5nIGxpYnJhcnkgY2FuIGJlIHVzZWQuXSkKLSAgICAgICAgaWYgdGVzdCAtbiAiJExJQk1VTFRJVEhSRUFEIiB8fCB0ZXN0IC1uICIkTFRMSUJNVUxUSVRIUkVBRCI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0ICRnbF9oYXZlX3dlYWsgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIEFDX0RFRklORShbVVNFX1BUSF9USFJFQURTX1dFQUtdLCAxLAotICAgICAgICAgICAgICBbRGVmaW5lIGlmIHJlZmVyZW5jZXMgdG8gdGhlIEdOVSBQdGggbXVsdGl0aHJlYWRpbmcgbGlicmFyeSBzaG91bGQgYmUgbWFkZSB3ZWFrLl0pCi0gICAgICAgICAgICBMSUJUSFJFQUQ9Ci0gICAgICAgICAgICBMVExJQlRIUkVBRD0KLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZWxzZQotICAgICAgICBDUFBGTEFHUz0iJGdsX3NhdmVfQ1BQRkxBR1MiCi0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHdpbjMyOyB0aGVuCi0gICAgICAgIGlmIHsgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgICAgICAgICAgICBtaW5ndyopIHRydWU7OwotICAgICAgICAgICAgICAgKikgZmFsc2U7OwotICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgfTsgdGhlbgotICAgICAgICAgIGdsX3RocmVhZHNfYXBpPXdpbjMyCi0gICAgICAgICAgQUNfREVGSU5FKFtVU0VfV0lOMzJfVEhSRUFEU10sIDEsCi0gICAgICAgICAgICBbRGVmaW5lIGlmIHRoZSBXaW4zMiBtdWx0aXRocmVhZGluZyBBUEkgY2FuIGJlIHVzZWQuXSkKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZmkKLSAgZmkKLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbXVsdGl0aHJlYWQgQVBJIHRvIHVzZV0pCi0gIEFDX01TR19SRVNVTFQoWyRnbF90aHJlYWRzX2FwaV0pCi0gIEFDX1NVQlNUKExJQlRIUkVBRCkKLSAgQUNfU1VCU1QoTFRMSUJUSFJFQUQpCi0gIEFDX1NVQlNUKExJQk1VTFRJVEhSRUFEKQotICBBQ19TVUJTVChMVExJQk1VTFRJVEhSRUFEKQotXSkKLQotQUNfREVGVU4oW2dsX0xPQ0tdLAotWwotICBBQ19SRVFVSVJFKFtnbF9MT0NLX0VBUkxZXSkKLSAgQUNfUkVRVUlSRShbZ2xfTE9DS19CT0RZXSkKLSAgZ2xfUFJFUkVRX0xPQ0sKLV0pCi0KLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbG9jay5jLgotQUNfREVGVU4oW2dsX1BSRVJFUV9MT0NLXSwgWwotICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCi1dKQotCi1kbmwgU3VydmV5IG9mIHBsYXRmb3JtczoKLWRubAotZG5sIFBsYXRmb3JtICAgICAgICAgIEF2YWlsYWJsZSAgIENvbXBpbGVyICAgIFN1cHBvcnRzICAgdGVzdC1sb2NrCi1kbmwgICAgICAgICAgICAgICAgICAgZmxhdm91cnMgICAgb3B0aW9uICAgICAgd2VhayAgICAgICByZXN1bHQKLWRubCAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLSAgIC0tLS0tLS0tLQotZG5sIExpbnV4IDIuNC9nbGliYyAgIHBvc2l4ICAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgT0sKLWRubAotZG5sIEdOVSBIdXJkL2dsaWJjICAgIHBvc2l4Ci1kbmwKLWRubCBGcmVlQlNEIDUuMyAgICAgICBwb3NpeCAgICAgICAtbGNfciAgICAgICAgICAgWQotZG5sICAgICAgICAgICAgICAgICAgIHBvc2l4ICAgICAgIC1sa3NlID8gICAgICAgICBZCi1kbmwgICAgICAgICAgICAgICAgICAgcG9zaXggICAgICAgLWxwdGhyZWFkID8gICAgIFkKLWRubCAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgICAtbHRociAgICAgICAgICAgWQotZG5sCi1kbmwgRnJlZUJTRCA1LjIgICAgICAgcG9zaXggICAgICAgLWxjX3IgICAgICAgICAgIFkKLWRubCAgICAgICAgICAgICAgICAgICBwb3NpeCAgICAgICAtbGtzZSAgICAgICAgICAgWQotZG5sICAgICAgICAgICAgICAgICAgIHBvc2l4ICAgICAgIC1sdGhyICAgICAgICAgICBZCi1kbmwKLWRubCBGcmVlQlNEIDQuMCw0LjEwICBwb3NpeCAgICAgICAtbGNfciAgICAgICAgICAgWSAgICAgIE9LCi1kbmwKLWRubCBOZXRCU0QgMS42ICAgICAgICAtLQotZG5sCi1kbmwgT3BlbkJTRCAzLjQgICAgICAgcG9zaXggICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBPSwotZG5sCi1kbmwgTWFjT1MgWCAxMC5bMTIzXSAgcG9zaXggICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBPSwotZG5sCi1kbmwgU29sYXJpcyA3LDgsOSAgICAgcG9zaXggICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICBTb2wgNyw4OiAwLjA7IFNvbCA5OiBPSwotZG5sICAgICAgICAgICAgICAgICAgIHNvbGFyaXMgICAgIC1sdGhyZWFkICAgICAgICBZICAgICAgU29sIDcsODogMC4wOyBTb2wgOTogT0sKLWRubAotZG5sIEhQLVVYIDExICAgICAgICAgIHBvc2l4ICAgICAgIC1scHRocmVhZCAgICAgICBOIChjYykgT0sKLWRubCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWSAoZ2NjKQotZG5sCi1kbmwgSVJJWCA2LjUgICAgICAgICAgcG9zaXggICAgICAgLWxwdGhyZWFkICAgICAgIFkgICAgICAwLjUKLWRubAotZG5sIEFJWCA0LjMsNS4xICAgICAgIHBvc2l4ICAgICAgIC1scHRocmVhZCAgICAgICBOICAgICAgQUlYIDQ6IDAuNTsgQUlYIDU6IE9LCi1kbmwKLWRubCBPU0YvMSA0LjAsNS4xICAgICBwb3NpeCAgICAgICAtcHRocmVhZCAoY2MpICAgTiAgICAgIE9LCi1kbmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWxwdGhyZWFkIChnY2MpIFkKLWRubAotZG5sIEN5Z3dpbiAgICAgICAgICAgIHBvc2l4ICAgICAgIC1scHRocmVhZCAgICAgICBZICAgICAgT0sKLWRubAotZG5sIEFueSBvZiB0aGUgYWJvdmUgIHB0aCAgICAgICAgIC1scHRoICAgICAgICAgICAgICAgICAgMC4wCi1kbmwKLWRubCBNaW5ndyAgICAgICAgICAgICB3aW4zMiAgICAgICAgICAgICAgICAgICAgICAgTiAgICAgIE9LCi1kbmwKLWRubCBCZU9TIDUgICAgICAgICAgICAtLQotZG5sCi1kbmwgVGhlIHRlc3QtbG9jayByZXN1bHQgc2hvd3Mgd2hhdCBoYXBwZW5zIGlmIGluIHRlc3QtbG9jay5jIEVYUExJQ0lUX1lJRUxEIGlzCi1kbmwgdHVybmVkIG9mZjoKLWRubCAgIE9LIGlmIGFsbCB0aHJlZSB0ZXN0cyB0ZXJtaW5hdGUgT0ssCi1kbmwgICAwLjUgaWYgdGhlIGZpcnN0IHRlc3QgdGVybWluYXRlcyBPSyBidXQgdGhlIHNlY29uZCBvbmUgbG9vcHMgZW5kbGVzc2x5LAotZG5sICAgMC4wIGlmIHRoZSBmaXJzdCB0ZXN0IGFscmVhZHkgbG9vcHMgZW5kbGVzc2x5LgpkaWZmIC0tZ2l0IGEvbTQvbG9uZ2xvbmcubTQgYi9tNC9sb25nbG9uZy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyZTUzYi4uMDAwMDAwMAotLS0gYS9tNC9sb25nbG9uZy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0jIGxvbmdsb25nLm00IHNlcmlhbCAxMwotZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIFBhdWwgRWdnZXJ0LgotCi0jIERlZmluZSBIQVZFX0xPTkdfTE9OR19JTlQgaWYgJ2xvbmcgbG9uZyBpbnQnIHdvcmtzLgotIyBUaGlzIGZpeGVzIGEgYnVnIGluIEF1dG9jb25mIDIuNjEsIGJ1dCBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlCi0jIGFzc3VtZSAyLjYyIGV2ZXJ5d2hlcmUuCi0KLSMgTm90ZTogSWYgdGhlIHR5cGUgJ2xvbmcgbG9uZyBpbnQnIGV4aXN0cyBidXQgaXMgb25seSAzMiBiaXRzIGxhcmdlCi0jIChhcyBvbiBzb21lIHZlcnkgb2xkIGNvbXBpbGVycyksIEhBVkVfTE9OR19MT05HX0lOVCB3aWxsIG5vdCBiZQotIyBkZWZpbmVkLiBJbiB0aGlzIGNhc2UgeW91IGNhbiB0cmVhdCAnbG9uZyBsb25nIGludCcgbGlrZSAnbG9uZyBpbnQnLgotCi1BQ19ERUZVTihbQUNfVFlQRV9MT05HX0xPTkdfSU5UXSwKLVsKLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb25nIGxvbmcgaW50XSwgW2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludF0sCi0gICAgW0FDX0xJTktfSUZFTFNFKAotICAgICAgIFtfQUNfVFlQRV9MT05HX0xPTkdfU05JUFBFVF0sCi0gICAgICAgW2RubCBUaGlzIGNhdGNoZXMgYSBidWcgaW4gVGFuZGVtIE5vblN0b3AgS2VybmVsIChPU1MpIGNjIC1PIGNpcmNhIDIwMDQuCi0JZG5sIElmIGNyb3NzIGNvbXBpbGluZywgYXNzdW1lIHRoZSBidWcgaXNuJ3QgaW1wb3J0YW50LCBzaW5jZQotCWRubCBub2JvZHkgY3Jvc3MgY29tcGlsZXMgZm9yIHRoaXMgcGxhdGZvcm0gYXMgZmFyIGFzIHdlIGtub3cuCi0JQUNfUlVOX0lGRUxTRSgKLQkgIFtBQ19MQU5HX1BST0dSQU0oCi0JICAgICBbW0AlOkBpbmNsdWRlIDxsaW1pdHMuaD4KLQkgICAgICAgQCU6QGlmbmRlZiBMTE9OR19NQVgKLQkgICAgICAgQCU6QCBkZWZpbmUgSEFMRiBcCi0JCQkoMUxMIDw8IChzaXplb2YgKGxvbmcgbG9uZyBpbnQpICogQ0hBUl9CSVQgLSAyKSkKLQkgICAgICAgQCU6QCBkZWZpbmUgTExPTkdfTUFYIChIQUxGIC0gMSArIEhBTEYpCi0JICAgICAgIEAlOkBlbmRpZl1dLAotCSAgICAgW1tsb25nIGxvbmcgaW50IG4gPSAxOwotCSAgICAgICBpbnQgaTsKLQkgICAgICAgZm9yIChpID0gMDsgOyBpKyspCi0JCSB7Ci0JCSAgIGxvbmcgbG9uZyBpbnQgbSA9IG4gPDwgaTsKLQkJICAgaWYgKG0gPj4gaSAhPSBuKQotCQkgICAgIHJldHVybiAxOwotCQkgICBpZiAoTExPTkdfTUFYIC8gMiA8IG0pCi0JCSAgICAgYnJlYWs7Ci0JCSB9Ci0JICAgICAgIHJldHVybiAwO11dKV0sCi0JICBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PXllc10sCi0JICBbYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PW5vXSwKLQkgIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzXSldLAotICAgICAgIFthY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm9dKV0pCi0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShbSEFWRV9MT05HX0xPTkdfSU5UXSwgMSwKLSAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgbG9uZyBsb25nIGludCcuXSkKLSAgZmkKLV0pCi0KLSMgRGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCBpZiAndW5zaWduZWQgbG9uZyBsb25nIGludCcgd29ya3MuCi0jIFRoaXMgZml4ZXMgYSBidWcgaW4gQXV0b2NvbmYgMi42MSwgYnV0IGNhbiBiZSByZW1vdmVkIG9uY2Ugd2UKLSMgYXNzdW1lIDIuNjIgZXZlcnl3aGVyZS4KLQotIyBOb3RlOiBJZiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgZXhpc3RzIGJ1dCBpcyBvbmx5IDMyIGJpdHMKLSMgbGFyZ2UgKGFzIG9uIHNvbWUgdmVyeSBvbGQgY29tcGlsZXJzKSwgQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UCi0jIHdpbGwgbm90IGJlIGRlZmluZWQuIEluIHRoaXMgY2FzZSB5b3UgY2FuIHRyZWF0ICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JwotIyBsaWtlICd1bnNpZ25lZCBsb25nIGludCcuCi0KLUFDX0RFRlVOKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdLAotWwotICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnRdLAotICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnRdLAotICAgIFtBQ19MSU5LX0lGRUxTRSgKLSAgICAgICBbX0FDX1RZUEVfTE9OR19MT05HX1NOSVBQRVRdLAotICAgICAgIFthY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9eWVzXSwKLSAgICAgICBbYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PW5vXSldKQotICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0hBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVF0sIDEsCi0gICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQnLl0pCi0gIGZpCi1dKQotCi0jIEV4cGFuZHMgdG8gYSBDIHByb2dyYW0gdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGZvciBzaW11bHRhbmVvdXMgc3VwcG9ydAotIyBvZiAnbG9uZyBsb25nJyBhbmQgJ3Vuc2lnbmVkIGxvbmcgbG9uZycuIFdlIGRvbid0IHdhbnQgdG8gc2F5IHRoYXQKLSMgJ2xvbmcgbG9uZycgaXMgYXZhaWxhYmxlIGlmICd1bnNpZ25lZCBsb25nIGxvbmcnIGlzIG5vdCwgb3IgdmljZSB2ZXJzYSwKLSMgYmVjYXVzZSB0b28gbWFueSBwcm9ncmFtcyByZWx5IG9uIHRoZSBzeW1tZXRyeSBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQKLSMgaW50ZWdlciB0eXBlcyAoZXhjbHVkaW5nICdib29sJykuCi1BQ19ERUZVTihbX0FDX1RZUEVfTE9OR19MT05HX1NOSVBQRVRdLAotWwotICBBQ19MQU5HX1BST0dSQU0oCi0gICAgW1svKiBUZXN0IHByZXByb2Nlc3Nvci4gICovCi0gICAgICAjaWYgISAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCA8IDAgJiYgMCA8IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkKLSAgICAgICAgZXJyb3IgaW4gcHJlcHJvY2Vzc29yOwotICAgICAgI2VuZGlmCi0gICAgICAjaWYgISAoMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gLTF1bGwpCi0gICAgICAgIGVycm9yIGluIHByZXByb2Nlc3NvcjsKLSAgICAgICNlbmRpZgotICAgICAgLyogVGVzdCBsaXRlcmFscy4gICovCi0gICAgICBsb25nIGxvbmcgaW50IGxsID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOwotICAgICAgbG9uZyBsb25nIGludCBubGwgPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOwotICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGwgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTDsKLSAgICAgIC8qIFRlc3QgY29uc3RhbnQgZXhwcmVzc2lvbnMuICAgKi8KLSAgICAgIHR5cGVkZWYgaW50IGFbKCgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIDwgMCAmJiAwIDwgOTIyMzM3MjAzNjg1NDc3NTgwN2xsKQotCQkgICAgID8gMSA6IC0xKV07Ci0gICAgICB0eXBlZGVmIGludCBiWygxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCA8PSAodW5zaWduZWQgbG9uZyBsb25nIGludCkgLTEKLQkJICAgICA/IDEgOiAtMSldOwotICAgICAgaW50IGkgPSA2MztdXSwKLSAgICBbWy8qIFRlc3QgYXZhaWxhYmlsaXR5IG9mIHJ1bnRpbWUgcm91dGluZXMgZm9yIHNoaWZ0IGFuZCBkaXZpc2lvbi4gICovCi0gICAgICBsb25nIGxvbmcgaW50IGxsbWF4ID0gOTIyMzM3MjAzNjg1NDc3NTgwN2xsOwotICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGludCB1bGxtYXggPSAxODQ0Njc0NDA3MzcwOTU1MTYxNXVsbDsKLSAgICAgIHJldHVybiAoKGxsIDw8IDYzKSB8IChsbCA+PiA2MykgfCAobGwgPCBpKSB8IChsbCA+IGkpCi0JICAgICAgfCAobGxtYXggLyBsbCkgfCAobGxtYXggJSBsbCkKLQkgICAgICB8ICh1bGwgPDwgNjMpIHwgKHVsbCA+PiA2MykgfCAodWxsIDw8IGkpIHwgKHVsbCA+PiBpKQotCSAgICAgIHwgKHVsbG1heCAvIHVsbCkgfCAodWxsbWF4ICUgdWxsKSk7XV0pCi1dKQpkaWZmIC0tZ2l0IGEvbTQvbHRvcHRpb25zLm00IGIvbTQvbHRvcHRpb25zLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGIwODI5Li4wMDAwMDAwCi0tLSBhL200L2x0b3B0aW9ucy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQzNyArMCwwIEBACi0jIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLSMKLSMgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgMjAwNy0yMDA5LCAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZQotIyAgIEZvdW5kYXRpb24sIEluYy4KLSMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDggbHRvcHRpb25zLm00Ci0KLSMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCi1BQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCi0KLQotIyBfTFRfTUFOR0xFX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19MVF9NQU5HTEVfT1BUSU9OXSwKLVtbX0xUX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxX18kMiwgW1teYS16QS1aMC05X11dLCBbX10pXSkKLQotCi0jIF9MVF9TRVRfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0IG9wdGlvbiBPUFRJT04tTkFNRSBmb3IgbWFjcm8gTUFDUk8tTkFNRSwgYW5kIGlmIHRoZXJlIGlzIGEKLSMgbWF0Y2hpbmcgaGFuZGxlciBkZWZpbmVkLCBkaXNwYXRjaCB0byBpdC4gIE90aGVyIE9QVElPTi1OQU1FcyBhcmUKLSMgc2F2ZWQgYXMgYSBmbGFnLgotbTRfZGVmaW5lKFtfTFRfU0VUX09QVElPTl0sCi1bbTRfZGVmaW5lKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pKWRubAotbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKLSAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKLSAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gJyQyJ10pXSlbXWRubAotXSkKLQotCi0jIF9MVF9JRl9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIElGLVNFVCwgW0lGLU5PVC1TRVRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCi1tNF9kZWZpbmUoW19MVF9JRl9PUFRJT05dLAotW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pLCBbJDNdLCBbJDRdKV0pCi0KLQotIyBfTFRfVU5MRVNTX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QsIElGLU5PVC1TRVQpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhlY3V0ZSBJRi1OT1QtU0VUIHVubGVzcyBhbGwgb3B0aW9ucyBpbiBPUFRJT04tTElTVCBmb3IgTUFDUk8tTkFNRQotIyBhcmUgc2V0LgotbTRfZGVmaW5lKFtfTFRfVU5MRVNTX09QVElPTlNdLAotW200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAotCSAgICBbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgX0xUX09wdGlvbiksCi0JCSAgICAgIFttNF9kZWZpbmUoWyQwX2ZvdW5kXSldKV0pW11kbmwKLW00X2lmZGVmKFskMF9mb3VuZF0sIFttNF91bmRlZmluZShbJDBfZm91bmRdKV0sIFskMwotXSlbXWRubAotXSkKLQotCi0jIF9MVF9TRVRfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPUFRJT04tTElTVCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIExpYnRvb2wgb3B0aW9ucyBhc3NvY2lhdGVkCi0jIHdpdGggTUFDUk8tTkFNRS4gIElmIGFueSBPUFRJT04gaGFzIGEgbWF0Y2hpbmcgaGFuZGxlciBkZWNsYXJlZCB3aXRoCi0jIExUX09QVElPTl9ERUZJTkUsIGRpc3BhdGNoIHRvIHRoYXQgbWFjcm87IG90aGVyd2lzZSBjb21wbGFpbiBhYm91dAotIyB0aGUgdW5rbm93biBvcHRpb24gYW5kIGV4aXQuCi1tNF9kZWZ1bihbX0xUX1NFVF9PUFRJT05TXSwKLVsjIFNldCBvcHRpb25zCi1tNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKLSAgICBbX0xUX1NFVF9PUFRJT04oWyQxXSwgX0xUX09wdGlvbildKQotCi1tNF9pZihbJDFdLFtMVF9JTklUXSxbCi0gIGRubAotICBkbmwgU2ltcGx5IHNldCBzb21lIGRlZmF1bHQgdmFsdWVzIChpLmUgb2ZmKSBpZiBib29sZWFuIG9wdGlvbnMgd2VyZSBub3QKLSAgZG5sIHNwZWNpZmllZDoKLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPW5vCi0gIF0pCi0gIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLCBbZW5hYmxlX3dpbjMyX2RsbD1ubwotICBdKQotICBkbmwKLSAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KLSAgZG5sIHdlIHJ1biB0aGUgZGVmYXVsdCBtb2RlIGhhbmRsZXIgZm9yIHRoZSBwYWlyLiAgRm9yIGV4YW1wbGUsIGlmIG5laXRoZXIKLSAgZG5sICdzaGFyZWQnIG5vciAnZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKLSAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6Ci0gIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzaGFyZWQgZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRURdKQotICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQotICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsIGRpc2FibGUtZmFzdC1pbnN0YWxsXSwKLQkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2FpeC1zb25hbWU9YWl4IGFpeC1zb25hbWU9Ym90aCBhaXgtc29uYW1lPXN2cjRdLAotCQkgICBbX0xUX1dJVEhfQUlYX1NPTkFNRShbYWl4XSldKQotICBdKQotXSkjIF9MVF9TRVRfT1BUSU9OUwotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTWFjcm9zIHRvIGhhbmRsZSBMVF9JTklUIG9wdGlvbnMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBfTFRfTUFOR0xFX0RFRlVOKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfTFRfTUFOR0xFX0RFRlVOXSwKLVtbX0xUX09QVElPTl9ERUZVTl9dbTRfYnBhdHN1YnN0KG00X3RvdXBwZXIoWyQxX18kMl0pLCBbW15BLVowLTlfXV0sIFtfXSldKQotCi0KLSMgTFRfT1BUSU9OX0RFRklORShNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgQ09ERSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbTFRfT1BUSU9OX0RFRklORV0sCi1bbTRfZGVmaW5lKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksIFskM10pW11kbmwKLV0pIyBMVF9PUFRJT05fREVGSU5FCi0KLQotIyBkbG9wZW4KLSMgLS0tLS0tCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPXllcwotXSkKLQotQVVfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQotQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgJ2Rsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQotXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sIFtdKQotCi0KLSMgd2luMzItZGxsCi0jIC0tLS0tLS0tLQotIyBEZWNsYXJlIHBhY2thZ2Ugc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2luMzIgZGxsJ3MuCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sCi1bZW5hYmxlX3dpbjMyX2RsbD15ZXMKLQotY2FzZSAkaG9zdCBpbgotKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWNlZ2NjKikKLSAgQUNfQ0hFQ0tfVE9PTChBUywgYXMsIGZhbHNlKQotICBBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQotICBBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQotICA7OwotZXNhYwotCi10ZXN0IC16ICIkQVMiICYmIEFTPWFzCi1fTFRfREVDTChbXSwgW0FTXSwgICAgICBbMV0sIFtBc3NlbWJsZXIgcHJvZ3JhbV0pZG5sCi0KLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLV9MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSlkbmwKLQotdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAotX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbT2JqZWN0IGR1bXBlciBwcm9ncmFtXSlkbmwKLV0pIyB3aW4zMi1kbGwKLQotQVVfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1fTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFt3aW4zMi1kbGxdKQotQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgJ3dpbjMyLWRsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQotXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sIFtdKQotCi0KLSMgX0xUX0VOQUJMRV9TSEFSRUQoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc2hhcmVkIGZsYWcsIGFuZCBzdXBwb3J0cyB0aGUgJ3NoYXJlZCcgYW5kCi0jICdkaXNhYmxlLXNoYXJlZCcgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ3llcycuCi1tNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEXSwKLVttNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCi1BQ19BUkdfRU5BQkxFKFtzaGFyZWRdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkQDw6QD1QS0dTQDo+QF0sCi0JW2J1aWxkIHNoYXJlZCBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSRsdF9zYXZlX2lmcwotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICA7OwotICAgIGVzYWNdLAotICAgIFtlbmFibGVfc2hhcmVkPV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQotCi0gICAgX0xUX0RFQ0woW2J1aWxkX2xpYnRvb2xfbGlic10sIFtlbmFibGVfc2hhcmVkXSwgWzBdLAotCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKLV0pIyBfTFRfRU5BQkxFX1NIQVJFRAotCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3NoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbeWVzXSldKQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCi0KLSMgT2xkIG5hbWVzOgotQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAotW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc2hhcmVkXSkKLV0pCi0KLUFDX0RFRlVOKFtBQ19ESVNBQkxFX1NIQVJFRF0sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdKQotXSkKLQotQVVfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQotQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCi0KLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQotZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtdKQotCi0KLQotIyBfTFRfRU5BQkxFX1NUQVRJQyhbREVGQVVMVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdzdGF0aWMnIGFuZAotIyAnZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KLSMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgotbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ10sCi1bbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAotQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKLSAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0YXRpY0A8OkA9UEtHU0A6PkBdLAotCVtidWlsZCBzdGF0aWMgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OwotICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0gICAgKikKLSAgICAgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSRsdF9zYXZlX2lmcwotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICA7OwotICAgIGVzYWNdLAotICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQotCi0gICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCi0JW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQotXSkjIF9MVF9FTkFCTEVfU1RBVElDCi0KLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKLQotIyBPbGQgbmFtZXM6Ci1BQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQotXSkKLQotQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCi1dKQotCi1BVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCi1BVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCi1kbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCi0KLQotCi0jIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgJ2Zhc3QtaW5zdGFsbCcKLSMgYW5kICdkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ3llcycuCi1tNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKLVttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCi1BQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCi0gICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAotICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKLSAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OwotICAgICopCi0gICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9JGx0X3NhdmVfaWZzCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9mYXN0X2luc3RhbGw9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFQpCi0KLV9MVF9ERUNMKFtmYXN0X2luc3RhbGxdLCBbZW5hYmxlX2Zhc3RfaW5zdGFsbF0sIFswXSwKLQkgW1doZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbl0pZG5sCi1dKSMgX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwKLQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGxdLCBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW3llc10pXSkKLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdLCBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW25vXSldKQotCi0jIE9sZCBuYW1lczoKLUFVX0RFRlVOKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW2Zhc3QtaW5zdGFsbF0pCi1BQ19ESUFHTk9TRShbb2Jzb2xldGVdLAotWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKLXRoZSAnZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCi1dKQotCi1BVV9ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAotW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSkKLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCi1bJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAotdGhlICdkaXNhYmxlLWZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQotXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSwgW10pCi1kbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwgW10pCi0KLQotIyBfTFRfV0lUSF9BSVhfU09OQU1FKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1haXgtc29uYW1lIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgYWl4LXNvbmFtZT1haXgnCi0jIGFuZCBgYWl4LXNvbmFtZT1ib3RoJyBhbmQgYGFpeC1zb25hbWU9c3ZyNCcgTFRfSU5JVCBvcHRpb25zLiBERUZBVUxUCi0jIGlzIGVpdGhlciBgYWl4JywgYGJvdGgnIG9yIGBzdnI0Jy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBhaXgnLgotbTRfZGVmaW5lKFtfTFRfV0lUSF9BSVhfU09OQU1FXSwKLVttNF9kZWZpbmUoW19MVF9XSVRIX0FJWF9TT05BTUVfREVGQVVMVF0sIFttNF9pZigkMSwgc3ZyNCwgc3ZyNCwgbTRfaWYoJDEsIGJvdGgsIGJvdGgsIGFpeCkpXSlkbmwKLXNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPQotY2FzZSAkaG9zdCwkZW5hYmxlX3NoYXJlZCBpbgotcG93ZXIqLSotYWl4W1s1LTldXSoseWVzKQotICBBQ19NU0dfQ0hFQ0tJTkcoW3doaWNoIHZhcmlhbnQgb2Ygc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB0byBwcm92aWRlXSkKLSAgQUNfQVJHX1dJVEgoW2FpeC1zb25hbWVdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWFpeC1zb25hbWU9YWl4fHN2cjR8Ym90aF0sCi0gICAgICBbc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyAoYWthICJTT05BTUUiKSB2YXJpYW50IHRvIHByb3ZpZGUgb24gQUlYLCBAPDpAZGVmYXVsdD1dX0xUX1dJVEhfQUlYX1NPTkFNRV9ERUZBVUxUW0A6PkAuXSldLAotICAgIFtjYXNlICR3aXRodmFsIGluCi0gICAgYWl4fHN2cjR8Ym90aCkKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIEFDX01TR19FUlJPUihbVW5rbm93biBhcmd1bWVudCB0byAtLXdpdGgtYWl4LXNvbmFtZV0pCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBsdF9jdl93aXRoX2FpeF9zb25hbWU9JHdpdGhfYWl4X3NvbmFtZV0sCi0gICAgW0FDX0NBQ0hFX1ZBTChbbHRfY3Zfd2l0aF9haXhfc29uYW1lXSwKLSAgICAgIFtsdF9jdl93aXRoX2FpeF9zb25hbWU9XV9MVF9XSVRIX0FJWF9TT05BTUVfREVGQVVMVCkKLSAgICB3aXRoX2FpeF9zb25hbWU9JGx0X2N2X3dpdGhfYWl4X3NvbmFtZV0pCi0gIEFDX01TR19SRVNVTFQoWyR3aXRoX2FpeF9zb25hbWVdKQotICBpZiB0ZXN0IGFpeCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KLSAgICAjIEZvciB0aGUgQUlYIHdheSBvZiBtdWx0aWxpYiwgd2UgbmFtZSB0aGUgc2hhcmVkIGFyY2hpdmUgbWVtYmVyCi0gICAgIyBiYXNlZCBvbiB0aGUgYml0d2lkdGggdXNlZCwgdHJhZGl0aW9uYWxseSAnc2hyLm8nIG9yICdzaHJfNjQubycsCi0gICAgIyBhbmQgJ3Noci5pbXAnIG9yICdzaHJfNjQuaW1wJywgcmVzcGVjdGl2ZWx5LCBmb3IgdGhlIEltcG9ydCBGaWxlLgotICAgICMgRXZlbiB3aGVuIEdOVSBjb21waWxlcnMgaWdub3JlIE9CSkVDVF9NT0RFIGJ1dCBuZWVkICctbWFpeDY0JyBmbGFnLAotICAgICMgdGhlIEFJWCB0b29sY2hhaW4gd29ya3MgYmV0dGVyIHdpdGggT0JKRUNUX01PREUgc2V0IChkZWZhdWx0IDMyKS4KLSAgICBpZiB0ZXN0IDY0ID0gIiR7T0JKRUNUX01PREUtMzJ9IjsgdGhlbgotICAgICAgc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9c2hyXzY0Ci0gICAgZWxzZQotICAgICAgc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9c2hyCi0gICAgZmkKLSAgZmkKLSAgOzsKLSopCi0gIHdpdGhfYWl4X3NvbmFtZT1haXgKLSAgOzsKLWVzYWMKLQotX0xUX0RFQ0woW10sIFtzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlY10sIFswXSwKLSAgICBbU2hhcmVkIGFyY2hpdmUgbWVtYmVyIGJhc2VuYW1lLCBmb3IgZmlsZW5hbWUgYmFzZWQgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyBvbiBBSVhdKWRubAotXSkjIF9MVF9XSVRIX0FJWF9TT05BTUUKLQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFthaXgtc29uYW1lPWFpeF0sIFtfTFRfV0lUSF9BSVhfU09OQU1FKFthaXhdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2FpeC1zb25hbWU9Ym90aF0sIFtfTFRfV0lUSF9BSVhfU09OQU1FKFtib3RoXSldKQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFthaXgtc29uYW1lPXN2cjRdLCBbX0xUX1dJVEhfQUlYX1NPTkFNRShbc3ZyNF0pXSkKLQotCi0jIF9MVF9XSVRIX1BJQyhbTU9ERV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgJ3BpYy1vbmx5JyBhbmQgJ25vLXBpYycKLSMgTFRfSU5JVCBvcHRpb25zLgotIyBNT0RFIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ2JvdGgnLgotbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAotW0FDX0FSR19XSVRIKFtwaWNdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBpY0A8OkA9UEtHU0A6PkBdLAotCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCi0gICAgW2x0X3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkd2l0aHZhbCBpbgotICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKLSAgICAqKQotICAgICAgcGljX21vZGU9ZGVmYXVsdAotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbwotCUlGUz0kbHRfc2F2ZV9pZnMKLQlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgotCSAgcGljX21vZGU9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW3BpY19tb2RlPW00X2RlZmF1bHQoWyQxXSwgW2RlZmF1bHRdKV0pCi0KLV9MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCi1dKSMgX0xUX1dJVEhfUElDCi0KLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQotCi0jIE9sZCBuYW1lOgotQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQotQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgJ3BpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCi1dKQotCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTFRETF9JTklUIE9wdGlvbnMgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLW00X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQotTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCi0JCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKLUxUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAotCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCi0JCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCi0KLW00X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQotTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKLQkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAotCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKZGlmZiAtLWdpdCBhL200L2x0c3VnYXIubTQgYi9tNC9sdHN1Z2FyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGJjOTM0Li4wMDAwMDAwCi0tLSBhL200L2x0c3VnYXIubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDctMjAwOCwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLgotIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDYgbHRzdWdhci5tNAotCi0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgotQUNfREVGVU4oW0xUU1VHQVJfVkVSU0lPTl0sIFttNF9pZihbMC4xXSldKQotCi0KLSMgbHRfam9pbihTRVAsIEFSRzEsIFtBUkcyLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKLSMgYXNzb2NpYXRlZCBzZXBhcmF0b3IuCi0jIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKLSMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KLW00X2RlZmluZShbbHRfam9pbl0sCi1bbTRfaWYoWyQjXSwgWzFdLCBbXSwKLSAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKLSAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQyXV9dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQotbTRfZGVmaW5lKFtfbHRfam9pbl0sCi1bbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAotICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQotCi0KLSMgbHRfY2FyKExJU1QpCi0jIGx0X2NkcihMSVNUKQotIyAtLS0tLS0tLS0tLS0KLSMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KLSMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAotIyBBdXRvY29uZi0yLjU5LCB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCi1tNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKLW00X2RlZmluZShbbHRfY2RyXSwKLVttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAotICAgICAgIFskI10sIDEsIFtdLAotICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKLW00X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQotCi0KLSMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgJ1NFUEFSQVRPUicnU1RSSU5HJy4KLSMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAotIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KLSMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50Ci0jIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgotIwotIyBUaGlzIG1hY3JvIGlzIG5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBBdXRvY29uZiAyLjYyLCBzaW5jZSBlYXJsaWVyCi0jIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCi1tNF9kZWZpbmUoW2x0X2FwcGVuZF0sCi1bbTRfZGVmaW5lKFskMV0sCi0JICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCi0KLQotCi0jIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCi0jIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKLSMgaGFzIHRoZSBmb3JtIFBSRUZJWG1JTkZJWFNVRkZJWG4uCi0jIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCi1tNF9kZWZpbmUoW2x0X2NvbWJpbmVdLAotW200X2lmKG00X2V2YWwoWyQjID4gM10pLCBbMV0sCi0gICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAotW1ttNF9mb3JlYWNoKFtfTHRfcHJlZml4XSwgWyQyXSwKLQkgICAgIFttNF9mb3JlYWNoKFtfTHRfc3VmZml4XSwKLQkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCi0JW19MdF9zZXAoWyQxXSlbXW00X2RlZm4oW19MdF9wcmVmaXhdKVskM11tNF9kZWZuKFtfTHRfc3VmZml4XSldKV0pXSldKQotCi0KLSMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAotIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KLW00X2RlZmluZShbbHRfaWZfYXBwZW5kX3VuaXFdLAotW200X2lmZGVmKFskMV0sCi0JICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCi0JCSBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLAotCQkgWyQ1XSldLAotCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQotCi0KLSMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfZGljdF9hZGRdLAotW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQotCi0KLSMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKLVttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKLQotCi0jIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKLVttNF9pZnZhbChbJDNdLAotCW00X2lmZGVmKFskMSgkMjokMyldLCBbbTRfZGVmbihbJDEoJDI6JDMpXSldKSwKLSAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKLQotCi0jIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2lmX2RpY3RfZmV0Y2hdLAotW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCi0JWyQ1XSwKLSAgICBbJDZdKV0pCi0KLQotIyBsdF9kaWN0X2ZpbHRlcihESUNULCBbU1VCS0VZXSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBLRVksIFsuLi5dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCi1bbTRfaWYoWyQ1XSwgW10sIFtdLAotICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAotICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAotCQkgICAgICBbbHRfaWZfZGljdF9mZXRjaChbJDFdLCBfTHRfa2V5LCBbJDJdLCBbJDNdLCBbX0x0X2tleSBdKV0pKSkpKV0pW11kbmwKLV0pCmRpZmYgLS1naXQgYS9tNC9sdHZlcnNpb24ubTQgYi9tNC9sdHZlcnNpb24ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMDRiNTIuLjAwMDAwMDAKLS0tIGEvbTQvbHR2ZXJzaW9uLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQotIwotIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBzZXJpYWwgNDE3OSBsdHZlcnNpb24ubTQKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKLQotbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjZdKQotbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzIuNC42XSkKLQotQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKLVttYWNyb192ZXJzaW9uPScyLjQuNicKLW1hY3JvX3JldmlzaW9uPScyLjQuNicKLV9MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQotX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKLV0pCmRpZmYgLS1naXQgYS9tNC9sdH5vYnNvbGV0ZS5tNCBiL200L2x0fm9ic29sZXRlLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmIyNmY4Li4wMDAwMDAwCi0tLSBhL200L2x0fm9ic29sZXRlLm00CisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCi0jCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDcsIDIwMDksIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlCi0jICAgRm91bmRhdGlvbiwgSW5jLgotIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKLSMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00Ci0KLSMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgotIwotIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTiksCi0jIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQotIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgotIwotIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCi0jIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKLSMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKLSMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCi0jIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCi0jCi0jIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cwotIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKLSMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKLSMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KLSMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4KLSMKLSMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCi0jIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCi0jIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50Ci0jIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgotCi0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgotQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKLQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKLW00X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKLW00X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKLW00X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKLW00X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQotbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQotbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKLW00X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKLW00X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKLW00X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQotbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKLW00X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKLW00X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQotbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKLW00X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKLW00X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCi1tNF9pZm5kZWYoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSwJW0FDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pXSkKLW00X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQotbTRfaWZuZGVmKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCVtBQ19ERUZVTihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKV0pCi1tNF9pZm5kZWYoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKLW00X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQotbTRfaWZuZGVmKFtfTFRfUFJPR19GQ10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0ZDXSldKQotbTRfaWZuZGVmKFtfTFRfUFJPR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19DWFhdKV0pCmRpZmYgLS1naXQgYS9tNC9ubHMubTQgYi9tNC9ubHMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjdjYzIuLjAwMDAwMDAKLS0tIGEvbTQvbmxzLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBubHMubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xNSkKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi1kbmwKLWRubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCi1kbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKLWRubCBmdW5jdGlvbmFsaXR5LgotZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKLWRubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKLWRubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLWRubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KLQotZG5sIEF1dGhvcnM6Ci1kbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgotZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCi0KLUFDX1BSRVJFUSgyLjUwKQotCi1BQ19ERUZVTihbQU1fTkxTXSwKLVsKLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQotICBkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUwotICBBQ19BUkdfRU5BQkxFKG5scywKLSAgICBbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKLSAgICBVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQotICBBQ19NU0dfUkVTVUxUKCRVU0VfTkxTKQotICBBQ19TVUJTVChVU0VfTkxTKQotXSkKZGlmZiAtLWdpdCBhL200L3BvLm00IGIvbTQvcG8ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzQ3NjIuLjAwMDAwMDAKLS0tIGEvbTQvcG8ubTQKKysrIC9kZXYvbnVsbApAQCAtMSw0NDkgKzAsMCBAQAotIyBwby5tNCBzZXJpYWwgMTUgKGdldHRleHQtMC4xNykKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgotZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLWRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci1kbmwgZnVuY3Rpb25hbGl0eS4KLWRubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCi1kbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCi1kbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi1kbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLWRubCBBdXRob3JzOgotZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KLWRubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgotCi1BQ19QUkVSRVEoMi41MCkKLQotZG5sIENoZWNrcyBmb3IgYWxsIHByZXJlcXVpc2l0ZXMgb2YgdGhlIHBvIHN1YmRpcmVjdG9yeS4KLUFDX0RFRlVOKFtBTV9QT19TVUJESVJTXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19NQUtFX1NFVF0pZG5sCi0gIEFDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCi0gIEFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sIGRlZmluZWQgYnkgYXV0b21ha2UKLSAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKLQotICBkbmwgUmVsZWFzZSB2ZXJzaW9uIG9mIHRoZSBnZXR0ZXh0IG1hY3Jvcy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0Ci0gIGRubCB0aGUgZ2V0dGV4dCBtYWNyb3MgYW5kIHBvL01ha2VmaWxlLmluLmluIGFyZSBpbiBzeW5jLgotICBBQ19TVUJTVChbR0VUVEVYVF9NQUNST19WRVJTSU9OXSwgWzAuMTddKQotCi0gIGRubCBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGVzdHMgYWxzbyBpZiAtLWRpc2FibGUtbmxzIGhhcyBiZWVuIGdpdmVuLAotICBkbmwgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgZm9yICJtYWtlIGRpc3QiIHRvIHdvcmsuCi0KLSAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ2ZtdCBpbiB0aGUgUEFUSC4KLSAgZG5sIFRoZSBmaXJzdCB0ZXN0IGV4Y2x1ZGVzIFNvbGFyaXMgbXNnZm10IGFuZCBlYXJseSBHTlUgbXNnZm10IHZlcnNpb25zLgotICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgbXNnZm10LgotICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR0ZNVCwgbXNnZm10LAotICAgIFskYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPiZdQVNfTUVTU0FHRV9MT0dfRkRbIDI+JjEgJiYKLSAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKLSAgICA6KQotICBBQ19QQVRIX1BST0coR01TR0ZNVCwgZ21zZ2ZtdCwgJE1TR0ZNVCkKLQotICBkbmwgVGVzdCB3aGV0aGVyIGl0IGlzIEdOVSBtc2dmbXQgPj0gMC4xNS4KLWNoYW5nZXF1b3RlKCwpZG5sCi0gIGNhc2UgYCRNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgotICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgTVNHRk1UXzAxNT06IDs7Ci0gICAgKikgTVNHRk1UXzAxNT0kTVNHRk1UIDs7Ci0gIGVzYWMKLWNoYW5nZXF1b3RlKFssXSlkbmwKLSAgQUNfU1VCU1QoW01TR0ZNVF8wMTVdKQotY2hhbmdlcXVvdGUoLClkbmwKLSAgY2FzZSBgJEdNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgotICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgR01TR0ZNVF8wMTU9OiA7OwotICAgICopIEdNU0dGTVRfMDE1PSRHTVNHRk1UIDs7Ci0gIGVzYWMKLWNoYW5nZXF1b3RlKFssXSlkbmwKLSAgQUNfU1VCU1QoW0dNU0dGTVRfMDE1XSkKLQotICBkbmwgU2VhcmNoIGZvciBHTlUgeGdldHRleHQgMC4xMiBvciBuZXdlciBpbiB0aGUgUEFUSC4KLSAgZG5sIFRoZSBmaXJzdCB0ZXN0IGV4Y2x1ZGVzIFNvbGFyaXMgeGdldHRleHQgYW5kIGVhcmx5IEdOVSB4Z2V0dGV4dCB2ZXJzaW9ucy4KLSAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIHhnZXR0ZXh0LgotICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFhHRVRURVhULCB4Z2V0dGV4dCwKLSAgICBbJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMSAmJgotICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKLSAgICA6KQotICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgotICBybSAtZiBtZXNzYWdlcy5wbwotCi0gIGRubCBUZXN0IHdoZXRoZXIgaXQgaXMgR05VIHhnZXR0ZXh0ID49IDAuMTUuCi1jaGFuZ2VxdW90ZSgsKWRubAotICBjYXNlIGAkWEdFVFRFWFQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgotICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgWEdFVFRFWFRfMDE1PTogOzsKLSAgICAqKSBYR0VUVEVYVF8wMTU9JFhHRVRURVhUIDs7Ci0gIGVzYWMKLWNoYW5nZXF1b3RlKFssXSlkbmwKLSAgQUNfU1VCU1QoW1hHRVRURVhUXzAxNV0pCi0KLSAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ21lcmdlIDAuMTEgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCi0gIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHTUVSR0UsIG1zZ21lcmdlLAotICAgIFskYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPiZdQVNfTUVTU0FHRV9MT0dfRkRbIDI+JjFdLCA6KQotCi0gIGRubCBJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMuCi0gIGRubCBBdXRvY29uZiA+PSAyLjYwIGRlZmluZXMgbG9jYWxlZGlyLiBGb3Igb2xkZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYsIHdlCi0gIGRubCBoYXZlIHRvIGRlZmluZSBpdCBoZXJlLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIHBvL01ha2VmaWxlLgotICB0ZXN0IC1uICIkbG9jYWxlZGlyIiB8fCBsb2NhbGVkaXI9JyR7ZGF0YWRpcn0vbG9jYWxlJwotICBBQ19TVUJTVChbbG9jYWxlZGlyXSkKLQotICBkbmwgU3VwcG9ydCBmb3IgQU1fWEdFVFRFWFRfT1BUSU9OLgotICB0ZXN0IC1uICIke1hHRVRURVhUX0VYVFJBX09QVElPTlMrc2V0fSIgfHwgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0KLSAgQUNfU1VCU1QoW1hHRVRURVhUX0VYVFJBX09QVElPTlNdKQotCi0gIEFDX0NPTkZJR19DT01NQU5EUyhbcG8tZGlyZWN0b3JpZXNdLCBbWwotICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCi0gICAgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iCi0gICAgICBjYXNlICIkYWNfZmlsZSIgaW4KLSAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKLSAgICAgIGVzYWMKLSAgICAgICMgUE8gZGlyZWN0b3JpZXMgaGF2ZSBhIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBmcm9tIE1ha2VmaWxlLmluLmluLgotICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pCi0gICAgICAgICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgotICAgICAgICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCi0gICAgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgotICAgICAgICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCi0gICAgICAgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KLSAgICAgICAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgotICAgICAgICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCi0gICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCi0gICAgICAgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OwotICAgICAgICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OwotICAgICAgICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgIyBUcmVhdCBhIGRpcmVjdG9yeSBhcyBhIFBPIGRpcmVjdG9yeSBpZiBhbmQgb25seSBpZiBpdCBoYXMgYQotICAgICAgICAjIFBPVEZJTEVTLmluIGZpbGUuIFRoaXMgYWxsb3dzIHBhY2thZ2VzIHRvIGhhdmUgbXVsdGlwbGUgUE8KLSAgICAgICAgIyBkaXJlY3RvcmllcyB1bmRlciBkaWZmZXJlbnQgbmFtZXMgb3IgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4KLSAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIjsgdGhlbgotICAgICAgICAgIHJtIC1mICIkYWNfZGlyL1BPVEZJTEVTIgotICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgotICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKLSAgICAgICAgICBQT01BS0VGSUxFREVQUz0iUE9URklMRVMuaW4iCi0gICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKLSAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgIyBwYXJhbWV0ZXJzLgotICAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgotICAgICAgICAgICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KLSAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBBTExfTElOR1VBU189YHNlZCAtZSAiL14jL2QiIC1lICJzLyMuKi8vIiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiYAotICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KLSAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKLSAgICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgotICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KLSAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5HVUFTJwotICAgICAgICAgIGZpCi0gICAgICAgICAgIyBDb21wdXRlIFBPRklMRVMKLSAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKLSAgICAgICAgICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRlKQotICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKLSAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKLSAgICAgICAgICAjIENvbXB1dGUgR01PRklMRVMKLSAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCi0gICAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KLSAgICAgICAgICAgIC4pIHNyY2RpcnByZT0gOzsKLSAgICAgICAgICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgICAgUE9GSUxFUz0KLSAgICAgICAgICBVUERBVEVQT0ZJTEVTPQotICAgICAgICAgIERVTU1ZUE9GSUxFUz0KLSAgICAgICAgICBHTU9GSUxFUz0KLSAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICAgICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCi0gICAgICAgICAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11cGRhdGUiCi0gICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgotICAgICAgICAgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgotICAgICAgICAgIGRvbmUKLSAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKLSAgICAgICAgICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgotICAgICAgICAgIElOU1RfTElOR1VBUz0KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgICAgICAgICAgICB1c2VpdD1ubwotICAgICAgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KLSAgICAgICAgICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcwotICAgICAgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKLSAgICAgICAgICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKLSAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKLSAgICAgICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KLSAgICAgICAgICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCi0gICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7Ci0gICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCi0gICAgICAgICAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICBmaQotICAgICAgICAgIENBVEFMT0dTPQotICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbwotICAgICAgICAgICAgICBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nLmdtbyIKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICBmaQotICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIgotICAgICAgICAgIHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFycy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2VmaWxlIgotICAgICAgICAgIGZvciBmIGluICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIiL1J1bGVzLSo7IGRvCi0gICAgICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KLSAgICAgICAgICAgICAgY2FzZSAiJGYiIGluCi0gICAgICAgICAgICAgICAgKi5vcmlnIHwgKi5iYWsgfCAqfikgOzsKLSAgICAgICAgICAgICAgICAqKSBjYXQgIiRmIiA+PiAiJGFjX2Rpci9NYWtlZmlsZSIgOzsKLSAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgZmkKLSAgICAgICAgICBkb25lCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZG9uZV1dLAotICAgWyMgQ2FwdHVyZSB0aGUgdmFsdWUgb2Ygb2Jzb2xldGUgQUxMX0xJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUKLSAgICAjIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMsIENBVEFMT0dTLiBCdXQgaGlkZSBpdAotICAgICMgZnJvbSBhdXRvbWFrZSA8IDEuNS4KLSAgICBldmFsICdPQlNPTEVURV9BTExfTElOR1VBUycnPSIkQUxMX0xJTkdVQVMiJwotICAgICMgQ2FwdHVyZSB0aGUgdmFsdWUgb2YgTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZSBDQVRBTE9HUy4KLSAgICBMSU5HVUFTPSIke0xJTkdVQVMtJVVOU0VUJX0iCi0gICBdKQotXSkKLQotZG5sIFBvc3Rwcm9jZXNzZXMgYSBNYWtlZmlsZSBpbiBhIGRpcmVjdG9yeSBjb250YWluaW5nIFBPIGZpbGVzLgotQUNfREVGVU4oW0FNX1BPU1RQUk9DRVNTX1BPX01BS0VGSUxFXSwKLVsKLSAgIyBXaGVuIHRoaXMgY29kZSBpcyBydW4sIGluIGNvbmZpZy5zdGF0dXMsIHR3byB2YXJpYWJsZXMgaGF2ZSBhbHJlYWR5IGJlZW4KLSAgIyBzZXQ6Ci0gICMgLSBPQlNPTEVURV9BTExfTElOR1VBUyBpcyB0aGUgdmFsdWUgb2YgTElOR1VBUyBzZXQgaW4gY29uZmlndXJlLmluLAotICAjIC0gTElOR1VBUyBpcyB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExJTkdVQVMgYXQgY29uZmlndXJlCi0gICMgICB0aW1lLgotCi1jaGFuZ2VxdW90ZSgsKWRubAotICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KLSAgYWNfZGlyPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJS9bXi9dW14vXSokJSUnYAotICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKLSAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAotICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCi0gICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KLSAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgotICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgotICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKLSAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKLSAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OwotICBlc2FjCi0KLSAgIyBGaW5kIGEgd2F5IHRvIGVjaG8gc3RyaW5ncyB3aXRob3V0IGludGVycHJldGluZyBiYWNrc2xhc2guCi0gIGlmIHRlc3QgIlhgKGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCi0gICAgZ3RfZWNobz0nZWNobycKLSAgZWxzZQotICAgIGlmIHRlc3QgIlhgKHByaW50ZiAnJXNcbicgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCi0gICAgICBndF9lY2hvPSdwcmludGYgJXNcbicKLSAgICBlbHNlCi0gICAgICBlY2hvX2Z1bmMgKCkgewotICAgICAgICBjYXQgPDxFT1QKLSQqCi1FT1QKLSAgICAgIH0KLSAgICAgIGd0X2VjaG89J2VjaG9fZnVuYycKLSAgICBmaQotICBmaQotCi0gICMgQSBzZWQgc2NyaXB0IHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlIG9mIFZBUklBQkxFIGZyb20gYSBNYWtlZmlsZS4KLSAgc2VkX3hfdmFyaWFibGU9JwotIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5LgoteAotcy9QL1AvCi14Ci10YQotIyBZZXMgaXQgd2FzIGVtcHR5LiBMb29rIGlmIHdlIGhhdmUgdGhlIGV4cGVjdGVkIHZhcmlhYmxlIGRlZmluaXRpb24uCi0vXlsJIF0qVkFSSUFCTEVbCSBdKj0vewotICAjIFNlZW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCi0gIHMvXlsJIF0qVkFSSUFCTEVbCSBdKj0vLwotICBiYQotfQotYmQKLTphCi0jIEhlcmUgd2UgYXJlIHByb2Nlc3NpbmcgYSBsaW5lIGZyb20gdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCi0jIFJlbW92ZSBjb21tZW50LCBtb3JlIHByZWNpc2VseSByZXBsYWNlIGl0IHdpdGggYSBzcGFjZS4KLXMvIy4qJC8gLwotIyBTZWUgaWYgdGhlIGxpbmUgZW5kcyBpbiBhIGJhY2tzbGFzaC4KLXRiCi06Ygotcy9cXCQvLwotIyBQcmludCB0aGUgbGluZSwgd2l0aG91dCB0aGUgdHJhaWxpbmcgYmFja3NsYXNoLgotcAotdGMKLSMgVGhlcmUgd2FzIG5vIHRyYWlsaW5nIGJhY2tzbGFzaC4gVGhlIGVuZCBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbiBpcwotIyByZWFjaGVkLiBDbGVhciB0aGUgaG9sZCBzcGFjZS4KLXMvXi4qJC8vCi14Ci1iZAotOmMKLSMgQSB0cmFpbGluZyBiYWNrc2xhc2ggbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbiBjb250aW51ZXMgaW4gdGhlCi0jIG5leHQgbGluZS4gUHV0IGEgbm9uZW1wdHkgc3RyaW5nIGludG8gdGhlIGhvbGQgc3BhY2UgdG8gaW5kaWNhdGUgdGhpcy4KLXMvXi4qJC9QLwoteAotOmQKLScKLWNoYW5nZXF1b3RlKFssXSlkbmwKLQotICAjIFNldCBQT1RGSUxFUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIFBPVEZJTEVTLgotICBzZWRfeF9QT1RGSUxFUz1gJGd0X2VjaG8gIiRzZWRfeF92YXJpYWJsZSIgfCBzZWQgLWUgJy9eICojL2QnIC1lICdzL1ZBUklBQkxFL1BPVEZJTEVTL2cnYAotICBQT1RGSUxFUz1gc2VkIC1uIC1lICIkc2VkX3hfUE9URklMRVMiIDwgIiRhY19maWxlImAKLSAgIyBDb21wdXRlIFBPVEZJTEVTX0RFUFMgYXMKLSAgIyAgICQoZm9yZWFjaCBmaWxlLCAkKFBPVEZJTEVTKSwgJCh0b3Bfc3JjZGlyKS8kKGZpbGUpKQotICBQT1RGSUxFU19ERVBTPQotICBmb3IgZmlsZSBpbiAkUE9URklMRVM7IGRvCi0gICAgUE9URklMRVNfREVQUz0iJFBPVEZJTEVTX0RFUFMgIickKHRvcF9zcmNkaXIpLyciJGZpbGUiCi0gIGRvbmUKLSAgUE9NQUtFRklMRURFUFM9IiIKLQotICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCi0gICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKLSAgZmkKLSAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCi0gICAgIyBUaGUgTElOR1VBUyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4KLSAgICBBTExfTElOR1VBU189YHNlZCAtZSAiL14jL2QiIC1lICJzLyMuKi8vIiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiYAotICAgIFBPTUFLRUZJTEVERVBTPSIkUE9NQUtFRklMRURFUFMgTElOR1VBUyIKLSAgZWxzZQotICAgICMgU2V0IEFMTF9MSU5HVUFTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgTElOR1VBUy4KLSAgICBzZWRfeF9MSU5HVUFTPWAkZ3RfZWNobyAiJHNlZF94X3ZhcmlhYmxlIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvTElOR1VBUy9nJ2AKLSAgICBBTExfTElOR1VBU189YHNlZCAtbiAtZSAiJHNlZF94X0xJTkdVQVMiIDwgIiRhY19maWxlImAKLSAgZmkKLSAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4KLSAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJwotICAjIENvbXB1dGUgUE9GSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKLSAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCi0gICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCi0gICMgQ29tcHV0ZSBHTU9GSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCi0gICMgQ29tcHV0ZSBQUk9QRVJUSUVTRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5wcm9wZXJ0aWVzKQotICAjIENvbXB1dGUgQ0xBU1NGSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLmNsYXNzKQotICAjIENvbXB1dGUgUU1GSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5xbSkKLSAgIyBDb21wdXRlIE1TR0ZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkubXNnKQotICAjIENvbXB1dGUgUkVTT1VSQ0VTRExMRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS8kKERPTUFJTikucmVzb3VyY2VzLmRsbCkKLSAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KLSAgICAuKSBzcmNkaXJwcmU9IDs7Ci0gICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OwotICBlc2FjCi0gIFBPRklMRVM9Ci0gIFVQREFURVBPRklMRVM9Ci0gIERVTU1ZUE9GSUxFUz0KLSAgR01PRklMRVM9Ci0gIFBST1BFUlRJRVNGSUxFUz0KLSAgQ0xBU1NGSUxFUz0KLSAgUU1GSUxFUz0KLSAgTVNHRklMRVM9Ci0gIFJFU09VUkNFU0RMTEZJTEVTPQotICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgotICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKLSAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgotICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKLSAgICBQUk9QRVJUSUVTRklMRVM9IiRQUk9QRVJUSUVTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgotICAgIENMQVNTRklMRVM9IiRDTEFTU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcuY2xhc3MiCi0gICAgUU1GSUxFUz0iJFFNRklMRVMgJHNyY2RpcnByZSRsYW5nLnFtIgotICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCi0gICAgTVNHRklMRVM9IiRNU0dGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nLm1zZyIKLSAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKLSAgICBSRVNPVVJDRVNETExGSUxFUz0iJFJFU09VUkNFU0RMTEZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgotICBkb25lCi0gICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUwotICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgotICBJTlNUX0xJTkdVQVM9Ci0gIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KLSAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgICAgdXNlaXQ9bm8KLSAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KLSAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCi0gICAgICBlbHNlCi0gICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKLSAgICAgIGZpCi0gICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCi0gICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCi0gICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKLSAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCi0gICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcwotICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KLSAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgotICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKLSAgICAgICAgZXNhYwotICAgICAgZG9uZQotICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KLSAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKLSAgICAgIGZpCi0gICAgZG9uZQotICBmaQotICBDQVRBTE9HUz0KLSAgSkFWQUNBVEFMT0dTPQotICBRVENBVEFMT0dTPQotICBUQ0xDQVRBTE9HUz0KLSAgQ1NIQVJQQ0FUQUxPR1M9Ci0gIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCi0gICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KLSAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgotICAgICAgSkFWQUNBVEFMT0dTPSIkSkFWQUNBVEFMT0dTIFwkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKLSAgICAgIFFUQ0FUQUxPR1M9IiRRVENBVEFMT0dTICRsYW5nLnFtIgotICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKLSAgICAgIFRDTENBVEFMT0dTPSIkVENMQ0FUQUxPR1MgJGZyb2JiZWRsYW5nLm1zZyIKLSAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAotICAgICAgQ1NIQVJQQ0FUQUxPR1M9IiRDU0hBUlBDQVRBTE9HUyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgotICAgIGRvbmUKLSAgZmkKLQotICBzZWQgLWUgInN8QFBPVEZJTEVTX0RFUFNAfCRQT1RGSUxFU19ERVBTfGciIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAUFJPUEVSVElFU0ZJTEVTQHwkUFJPUEVSVElFU0ZJTEVTfGciIC1lICJzfEBDTEFTU0ZJTEVTQHwkQ0xBU1NGSUxFU3xnIiAtZSAic3xAUU1GSUxFU0B8JFFNRklMRVN8ZyIgLWUgInN8QE1TR0ZJTEVTQHwkTVNHRklMRVN8ZyIgLWUgInN8QFJFU09VUkNFU0RMTEZJTEVTQHwkUkVTT1VSQ0VTRExMRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QEpBVkFDQVRBTE9HU0B8JEpBVkFDQVRBTE9HU3xnIiAtZSAic3xAUVRDQVRBTE9HU0B8JFFUQ0FUQUxPR1N8ZyIgLWUgInN8QFRDTENBVEFMT0dTQHwkVENMQ0FUQUxPR1N8ZyIgLWUgInN8QENTSEFSUENBVEFMT0dTQHwkQ1NIQVJQQ0FUQUxPR1N8ZyIgLWUgJ3MsXiNkaXN0ZGlyOixkaXN0ZGlyOiwnIDwgIiRhY19maWxlIiA+ICIkYWNfZmlsZS50bXAiCi0gIGlmIGdyZXAgLWwgJ0BUQ0xDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KLSAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KLSAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAotICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCi0kZnJvYmJlZGxhbmcubXNnOiAkbGFuZy5wbwotCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tdGNsIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIjsgXAotCVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KLUVPRgotICAgIGRvbmUKLSAgZmkKLSAgaWYgZ3JlcCAtbCAnQENTSEFSUENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgotICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAotICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCi0kZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsOiAkbGFuZy5wbwotCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCi0JXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KLUVPRgotICAgIGRvbmUKLSAgZmkKLSAgaWYgdGVzdCAtbiAiJFBPTUFLRUZJTEVERVBTIjsgdGhlbgotICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgotTWFrZWZpbGU6ICRQT01BS0VGSUxFREVQUwotRU9GCi0gIGZpCi0gIG12ICIkYWNfZmlsZS50bXAiICIkYWNfZmlsZSIKLV0pCi0KLWRubCBJbml0aWFsaXplcyB0aGUgYWNjdW11bGF0b3IgdXNlZCBieSBBTV9YR0VUVEVYVF9PUFRJT04uCi1BQ19ERUZVTihbQU1fWEdFVFRFWFRfT1BUSU9OX0lOSVRdLAotWwotICBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPQotXSkKLQotZG5sIFJlZ2lzdGVycyBhbiBvcHRpb24gdG8gYmUgcGFzc2VkIHRvIHhnZXR0ZXh0IGluIHRoZSBwbyBzdWJkaXJlY3RvcnkuCi1BQ19ERUZVTihbQU1fWEdFVFRFWFRfT1BUSU9OXSwKLVsKLSAgQUNfUkVRVUlSRShbQU1fWEdFVFRFWFRfT1BUSU9OX0lOSVRdKQotICBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPSIkWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyAkMSIKLV0pCmRpZmYgLS1naXQgYS9tNC9wcmludGYtcG9zaXgubTQgYi9tNC9wcmludGYtcG9zaXgubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YmE2MTIuLjAwMDAwMDAKLS0tIGEvbTQvcHJpbnRmLXBvc2l4Lm00CisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyBwcmludGYtcG9zaXgubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xNykKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgotZG5sIFRlc3Qgd2hldGhlciB0aGUgcHJpbnRmKCkgZnVuY3Rpb24gc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdCBzdHJpbmdzIHdpdGgKLWRubCBwb3NpdGlvbnMuCi0KLUFDX0RFRlVOKFtndF9QUklOVEZfUE9TSVhdLAotWwotICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcHJpbnRmKCkgc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdCBzdHJpbmdzXSwKLSAgICBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCwKLSAgICBbCi0gICAgICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotLyogVGhlIHN0cmluZyAiJTIkZCAlMSRkIiwgd2l0aCBkb2xsYXIgY2hhcmFjdGVycyBwcm90ZWN0ZWQgZnJvbSB0aGUgc2hlbGwncwotICAgZG9sbGFyIGV4cGFuc2lvbiAocG9zc2libHkgYW4gYXV0b2NvbmYgYnVnKS4gICovCi1zdGF0aWMgY2hhciBmb3JtYXRbXSA9IHsgJyUnLCAnMicsICckJywgJ2QnLCAnICcsICclJywgJzEnLCAnJCcsICdkJywgJ1wwJyB9Owotc3RhdGljIGNoYXIgYnVmWzEwMF07Ci1pbnQgbWFpbiAoKQotewotICBzcHJpbnRmIChidWYsIGZvcm1hdCwgMzMsIDU1KTsKLSAgcmV0dXJuIChzdHJjbXAgKGJ1ZiwgIjU1IDMzIikgIT0gMCk7Ci19XSwgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9eWVzLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD1ubywKLSAgICAgIFsKLSAgICAgICAgQUNfRUdSRVBfQ1BQKG5vdHBvc2l4LCBbCi0jaWYgZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX19CRU9TX18gfHwgZGVmaW5lZCBfTVNDX1ZFUiB8fCBkZWZpbmVkIF9fTUlOR1czMl9fIHx8IGRlZmluZWQgX19DWUdXSU5fXwotICBub3Rwb3NpeAotI2VuZGlmCi0gICAgICAgIF0sIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PSJndWVzc2luZyBubyIsCi0gICAgICAgICAgIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4PSJndWVzc2luZyB5ZXMiKQotICAgICAgXSkKLSAgICBdKQotICBjYXNlICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCBpbgotICAgICp5ZXMpCi0gICAgICBBQ19ERUZJTkUoSEFWRV9QT1NJWF9QUklOVEYsIDEsCi0gICAgICAgIFtEZWZpbmUgaWYgeW91ciBwcmludGYoKSBmdW5jdGlvbiBzdXBwb3J0cyBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy5dKQotICAgICAgOzsKLSAgZXNhYwotXSkKZGlmZiAtLWdpdCBhL200L3Byb2d0ZXN0Lm00IGIvbTQvcHJvZ3Rlc3QubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NjM2NWMuLjAwMDAwMDAKLS0tIGEvbTQvcHJvZ3Rlc3QubTQKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jIHByb2d0ZXN0Lm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTQuMikKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgotZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLWRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci1kbmwgZnVuY3Rpb25hbGl0eS4KLWRubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCi1kbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCi1kbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi1kbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLWRubCBBdXRob3JzOgotZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCi0KLUFDX1BSRVJFUSgyLjUwKQotCi0jIFNlYXJjaCBwYXRoIGZvciBhIHByb2dyYW0gd2hpY2ggcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LgotCi1kbmwgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsCi1kbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCi1BQ19ERUZVTihbQU1fUEFUSF9QUk9HX1dJVEhfVEVTVF0sCi1bCi0jIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0jIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKLSMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCi1jYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCi0jISAvYmluL3NoCi1leGl0IDAKLV9BU0VPRgotY2htb2QgK3ggY29uZiQkLmZpbGUKLWlmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKLWVsc2UKLSAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgotZmkKLXJtIC1mIGNvbmYkJC5maWxlCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJDIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICQyOyBhY193b3JkPVskXTIKLUFDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKLUFDX0NBQ0hFX1ZBTChhY19jdl9wYXRoXyQxLAotW2Nhc2UgIlskXSQxIiBpbgotICBbW1xcL11dKiB8ID86W1tcXC9dXSopCi0gICAgYWNfY3ZfcGF0aF8kMT0iWyRdJDEiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICAgIDs7Ci0gICopCi0gICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiBpZmVsc2UoWyQ1XSwgLCAkUEFUSCwgWyQ1XSk7IGRvCi0gICAgICBJRlM9IiRhY19zYXZlX0lGUyIKLSAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICAgICAgICBlY2hvICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3JkLi4uIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgICAgaWYgWyQzXTsgdGhlbgotICAgICAgICAgICAgYWNfY3ZfcGF0aF8kMT0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAgICAgICAgIGJyZWFrIDIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICBJRlM9IiRhY19zYXZlX0lGUyIKLWRubCBJZiBubyA0dGggYXJnIGlzIGdpdmVuLCBsZWF2ZSB0aGUgY2FjaGUgdmFyaWFibGUgdW5zZXQsCi1kbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KLWlmZWxzZShbJDRdLCAsICwgWyAgdGVzdCAteiAiWyRdYWNfY3ZfcGF0aF8kMSIgJiYgYWNfY3ZfcGF0aF8kMT0iJDQiCi1dKWRubAotICAgIDs7Ci1lc2FjXSlkbmwKLSQxPSIkYWNfY3ZfcGF0aF8kMSIKLWlmIHRlc3QgaWZlbHNlKFskNF0sICwgWy1uICJbJF0kMSJdLCBbIlskXSQxIiAhPSAiJDQiXSk7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVChbJF0kMSkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi1BQ19TVUJTVCgkMSlkbmwKLV0pCmRpZmYgLS1naXQgYS9tNC9zaXplX21heC5tNCBiL200L3NpemVfbWF4Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2I0ODY4Li4wMDAwMDAwCi0tLSBhL200L3NpemVfbWF4Lm00CisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotIyBzaXplX21heC5tNCBzZXJpYWwgNgotZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIEJydW5vIEhhaWJsZS4KLQotQUNfREVGVU4oW2dsX1NJWkVfTUFYXSwKLVsKLSAgQUNfQ0hFQ0tfSEVBREVSUyhzdGRpbnQuaCkKLSAgZG5sIEZpcnN0IHRlc3Qgd2hldGhlciB0aGUgc3lzdGVtIGFscmVhZHkgaGFzIFNJWkVfTUFYLgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBTSVpFX01BWF0pCi0gIEFDX0NBQ0hFX1ZBTChbZ2xfY3Zfc2l6ZV9tYXhdLCBbCi0gICAgZ2xfY3Zfc2l6ZV9tYXg9Ci0gICAgQUNfRUdSRVBfQ1BQKFtGb3VuZCBpdF0sIFsKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpZiBIQVZFX1NURElOVF9ICi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLSNpZmRlZiBTSVpFX01BWAotRm91bmQgaXQKLSNlbmRpZgotXSwgZ2xfY3Zfc2l6ZV9tYXg9eWVzKQotICAgIGlmIHRlc3QgLXogIiRnbF9jdl9zaXplX21heCI7IHRoZW4KLSAgICAgIGRubCBEZWZpbmUgaXQgb3Vyc2VsdmVzLiBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSB0eXBlICdzaXplX3QnIGlzIG5vdCB3aWRlcgotICAgICAgZG5sIHRoYW4gdGhlIHR5cGUgJ3Vuc2lnbmVkIGxvbmcnLiBUcnkgaGFyZCB0byBmaW5kIGEgZGVmaW5pdGlvbiB0aGF0IGNhbgotICAgICAgZG5sIGJlIHVzZWQgaW4gYSBwcmVwcm9jZXNzb3IgI2lmLCBpLmUuIGRvZXNuJ3QgY29udGFpbiBhIGNhc3QuCi0gICAgICBBQ19DT01QVVRFX0lOVChbc2l6ZV90X2JpdHNfbWludXNfMV0sIFtzaXplb2YgKHNpemVfdCkgKiBDSEFSX0JJVCAtIDFdLAotICAgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPl0sIHNpemVfdF9iaXRzX21pbnVzXzE9KQotICAgICAgQUNfQ09NUFVURV9JTlQoW2ZpdHNfaW5fdWludF0sIFtzaXplb2YgKHNpemVfdCkgPD0gc2l6ZW9mICh1bnNpZ25lZCBpbnQpXSwKLSAgICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCBmaXRzX2luX3VpbnQ9KQotICAgICAgaWYgdGVzdCAtbiAiJHNpemVfdF9iaXRzX21pbnVzXzEiICYmIHRlc3QgLW4gIiRmaXRzX2luX3VpbnQiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgJGZpdHNfaW5fdWludCA9IDE7IHRoZW4KLSAgICAgICAgICBkbmwgRXZlbiB0aG91Z2ggU0laRV9NQVggZml0cyBpbiBhbiB1bnNpZ25lZCBpbnQsIGl0IG11c3QgYmUgb2YgdHlwZQotICAgICAgICAgIGRubCAndW5zaWduZWQgbG9uZycgaWYgdGhlIHR5cGUgJ3NpemVfdCcgaXMgdGhlIHNhbWUgYXMgJ3Vuc2lnbmVkIGxvbmcnLgotICAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkZGVmLmg+Ci0gICAgICAgICAgICBleHRlcm4gc2l6ZV90IGZvbzsKLSAgICAgICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIGZvbzsKLSAgICAgICAgICAgIF0sIFtdLCBmaXRzX2luX3VpbnQ9MCkKLSAgICAgICAgZmkKLSAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJ2V4cHInIHRvIHNpbXBsaWZ5IHRoaXMgZXhwcmVzc2lvbiwgYmVjYXVzZSAnZXhwcicKLSAgICAgICAgZG5sIHdvcmtzIG9ubHkgd2l0aCAnbG9uZycgaW50ZWdlcnMgaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQsIHdoaWxlIHdlCi0gICAgICAgIGRubCBtaWdodCBiZSBjcm9zcy1jb21waWxpbmcgZnJvbSBhIDMyLWJpdCBwbGF0Zm9ybSB0byBhIDY0LWJpdCBwbGF0Zm9ybS4KLSAgICAgICAgaWYgdGVzdCAkZml0c19pbl91aW50ID0gMTsgdGhlbgotICAgICAgICAgIGdsX2N2X3NpemVfbWF4PSIoKCgxVSA8PCAkc2l6ZV90X2JpdHNfbWludXNfMSkgLSAxKSAqIDIgKyAxKSIKLSAgICAgICAgZWxzZQotICAgICAgICAgIGdsX2N2X3NpemVfbWF4PSIoKCgxVUwgPDwgJHNpemVfdF9iaXRzX21pbnVzXzEpIC0gMSkgKiAyICsgMSkiCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0gICAgICAgIGRubCBTaG91bGRuJ3QgaGFwcGVuLCBidXQgd2hvIGtub3dzLi4uCi0gICAgICAgIGdsX2N2X3NpemVfbWF4PScoKHNpemVfdCl+KHNpemVfdCkwKScKLSAgICAgIGZpCi0gICAgZmkKLSAgXSkKLSAgQUNfTVNHX1JFU1VMVChbJGdsX2N2X3NpemVfbWF4XSkKLSAgaWYgdGVzdCAiJGdsX2N2X3NpemVfbWF4IiAhPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1NJWkVfTUFYXSwgWyRnbF9jdl9zaXplX21heF0sCi0gICAgICBbRGVmaW5lIGFzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHR5cGUgJ3NpemVfdCcsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgaXQuXSkKLSAgZmkKLV0pCi0KLWRubCBBdXRvY29uZiA+PSAyLjYxIGhhcyBBQ19DT01QVVRFX0lOVCBidWlsdC1pbi4KLWRubCBSZW1vdmUgdGhpcyB3aGVuIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgPj0gMi42MS4KLW00X2lmZGVmKFtBQ19DT01QVVRFX0lOVF0sIFtdLCBbCi0gIEFDX0RFRlVOKFtBQ19DT01QVVRFX0lOVF0sIFtfQUNfQ09NUFVURV9JTlQoWyQyXSxbJDFdLFskM10sWyQ0XSldKQotXSkKZGlmZiAtLWdpdCBhL200L3N0ZGludF9oLm00IGIvbTQvc3RkaW50X2gubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiOWE4YWMuLjAwMDAwMDAKLS0tIGEvbTQvc3RkaW50X2gubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIHN0ZGludF9oLm00IHNlcmlhbCA2Ci1kbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gUGF1bCBFZ2dlcnQuCi0KLSMgRGVmaW5lIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIGlmIDxzdGRpbnQuaD4gZXhpc3RzLAotIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KLQotQUNfREVGVU4oW2dsX0FDX0hFQURFUl9TVERJTlRfSF0sCi1bCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBnbF9jdl9oZWFkZXJfc3RkaW50X2gsCi0gIFtBQ19UUllfQ09NUElMRSgKLSAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGludC5oPl0sCi0gICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTtdLAotICAgIGdsX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCi0gICAgZ2xfY3ZfaGVhZGVyX3N0ZGludF9oPW5vKV0pCi0gIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgotICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKLSAgICAgIFtEZWZpbmUgaWYgPHN0ZGludC5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAotICAgICAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvdWludG1heF90Lm00IGIvbTQvdWludG1heF90Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDFjNDg5Li4wMDAwMDAwCi0tLSBhL200L3VpbnRtYXhfdC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgdWludG1heF90Lm00IHNlcmlhbCAxMAotZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIFBhdWwgRWdnZXJ0LgotCi1BQ19QUkVSRVEoMi4xMykKLQotIyBEZWZpbmUgdWludG1heF90IHRvICd1bnNpZ25lZCBsb25nJyBvciAndW5zaWduZWQgbG9uZyBsb25nJwotIyBpZiBpdCBpcyBub3QgYWxyZWFkeSBkZWZpbmVkIGluIDxzdGRpbnQuaD4gb3IgPGludHR5cGVzLmg+LgotCi1BQ19ERUZVTihbZ2xfQUNfVFlQRV9VSU5UTUFYX1RdLAotWwotICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCi0gIEFDX1JFUVVJUkUoW2dsX0FDX0hFQURFUl9TVERJTlRfSF0pCi0gIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm8gJiYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N0ZGludF9oID0gbm87IHRoZW4KLSAgICBBQ19SRVFVSVJFKFtBQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRdKQotICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllcyBcCi0gICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKLSAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKHVpbnRtYXhfdCwgJGFjX3R5cGUsCi0gICAgICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCi0gICAgICAgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+IGRvbid0IGRlZmluZS5dKQotICBlbHNlCi0gICAgQUNfREVGSU5FKEhBVkVfVUlOVE1BWF9ULCAxLAotICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3VpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQotICBmaQotXSkKZGlmZiAtLWdpdCBhL200L3Zpc2liaWxpdHkubTQgYi9tNC92aXNpYmlsaXR5Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmY2MzMwLi4wMDAwMDAwCi0tLSBhL200L3Zpc2liaWxpdHkubTQKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0jIHZpc2liaWxpdHkubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xNSkKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgotCi1kbmwgVGVzdHMgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24KLWRubCAtZnZpc2liaWxpdHk9aGlkZGVuIGFuZCB0aGUgZnVuY3Rpb24gYW5kIHZhcmlhYmxlIGF0dHJpYnV0ZXMKLWRubCBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKSBhbmQKLWRubCBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiZGVmYXVsdCIpKSkuCi1kbmwgRG9lcyAqbm90KiB0ZXN0IGZvciBfX3Zpc2liaWxpdHlfXygicHJvdGVjdGVkIikgLSB3aGljaCBoYXMgdHJpY2t5Ci1kbmwgc2VtYW50aWNzIChzZWUgdGhlICd2aXNtYWluJyB0ZXN0IGluIGdsaWJjKSBhbmQgZG9lcyBub3QgZXhpc3QgZS5nLiBvbgotZG5sIE1hY09TIFguCi1kbmwgRG9lcyAqbm90KiB0ZXN0IGZvciBfX3Zpc2liaWxpdHlfXygiaW50ZXJuYWwiKSAtIHdoaWNoIGhhcyBwcm9jZXNzb3IKLWRubCBkZXBlbmRlbnQgc2VtYW50aWNzLgotZG5sIERvZXMgKm5vdCogdGVzdCBmb3IgI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbikgLSB3aGljaCBpcwotZG5sICJyZWFsbHkgb25seSByZWNvbW1lbmRlZCBmb3IgbGVnYWN5IGNvZGUiLgotZG5sIFNldCB0aGUgdmFyaWFibGUgQ0ZMQUdfVklTSUJJTElUWS4KLWRubCBEZWZpbmVzIGFuZCBzZXRzIHRoZSB2YXJpYWJsZSBIQVZFX1ZJU0lCSUxJVFkuCi0KLUFDX0RFRlVOKFtnbF9WSVNJQklMSVRZXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCi0gIENGTEFHX1ZJU0lCSUxJVFk9Ci0gIEhBVkVfVklTSUJJTElUWT0wCi0gIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCi0gICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2ltcGxlIHZpc2liaWxpdHkgZGVjbGFyYXRpb25zXSkKLSAgICBBQ19DQUNIRV9WQUwoZ2xfY3ZfY2NfdmlzaWJpbGl0eSwgWwotICAgICAgZ2xfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgLWZ2aXNpYmlsaXR5PWhpZGRlbiIKLSAgICAgIEFDX1RSWV9DT01QSUxFKAotICAgICAgICBbZXh0ZXJuIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJoaWRkZW4iKSkpIGludCBoaWRkZW52YXI7Ci0gICAgICAgICBleHRlcm4gX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImRlZmF1bHQiKSkpIGludCBleHBvcnRlZHZhcjsKLSAgICAgICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKSBpbnQgaGlkZGVuZnVuYyAodm9pZCk7Ci0gICAgICAgICBleHRlcm4gX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImRlZmF1bHQiKSkpIGludCBleHBvcnRlZGZ1bmMgKHZvaWQpO10sCi0gICAgICAgIFtdLAotICAgICAgICBnbF9jdl9jY192aXNpYmlsaXR5PXllcywKLSAgICAgICAgZ2xfY3ZfY2NfdmlzaWJpbGl0eT1ubykKLSAgICAgIENGTEFHUz0iJGdsX3NhdmVfQ0ZMQUdTIl0pCi0gICAgQUNfTVNHX1JFU1VMVChbJGdsX2N2X2NjX3Zpc2liaWxpdHldKQotICAgIGlmIHRlc3QgJGdsX2N2X2NjX3Zpc2liaWxpdHkgPSB5ZXM7IHRoZW4KLSAgICAgIENGTEFHX1ZJU0lCSUxJVFk9Ii1mdmlzaWJpbGl0eT1oaWRkZW4iCi0gICAgICBIQVZFX1ZJU0lCSUxJVFk9MQotICAgIGZpCi0gIGZpCi0gIEFDX1NVQlNUKFtDRkxBR19WSVNJQklMSVRZXSkKLSAgQUNfU1VCU1QoW0hBVkVfVklTSUJJTElUWV0pCi0gIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9WSVNJQklMSVRZXSwgWyRIQVZFX1ZJU0lCSUxJVFldLAotICAgIFtEZWZpbmUgdG8gMSBvciAwLCBkZXBlbmRpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgc2ltcGxlIHZpc2liaWxpdHkgZGVjbGFyYXRpb25zLl0pCi1dKQpkaWZmIC0tZ2l0IGEvbTQvd2NoYXJfdC5tNCBiL200L3djaGFyX3QubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZTIxMjkuLjAwMDAwMDAKLS0tIGEvbTQvd2NoYXJfdC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgd2NoYXJfdC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjEyKQotZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIEJydW5vIEhhaWJsZS4KLWRubCBUZXN0IHdoZXRoZXIgPHN0ZGRlZi5oPiBoYXMgdGhlICd3Y2hhcl90JyB0eXBlLgotZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQwotCi1BQ19ERUZVTihbZ3RfVFlQRV9XQ0hBUl9UXSwKLVsKLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3Y2hhcl90XSwgZ3RfY3ZfY193Y2hhcl90LAotICAgIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGRlZi5oPgotICAgICAgIHdjaGFyX3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCi0gICAgICAgZ3RfY3ZfY193Y2hhcl90PXllcywgZ3RfY3ZfY193Y2hhcl90PW5vKV0pCi0gIGlmIHRlc3QgJGd0X2N2X2Nfd2NoYXJfdCA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX1dDSEFSX1QsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3Y2hhcl90JyB0eXBlLl0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvd2ludF90Lm00IGIvbTQvd2ludF90Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjVlZDkzLi4wMDAwMDAwCi0tLSBhL200L3dpbnRfdC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMgd2ludF90Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTcpCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIEJydW5vIEhhaWJsZS4KLWRubCBUZXN0IHdoZXRoZXIgPHdjaGFyLmg+IGhhcyB0aGUgJ3dpbnRfdCcgdHlwZS4KLWRubCBQcmVyZXF1aXNpdGU6IEFDX1BST0dfQ0MKLQotQUNfREVGVU4oW2d0X1RZUEVfV0lOVF9UXSwKLVsKLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3aW50X3RdLCBndF9jdl9jX3dpbnRfdCwKLSAgICBbQUNfVFJZX0NPTVBJTEUoWwotLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQotICAgPHdjaGFyLmg+LgotICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlIGluY2x1ZGVkCi0gICBiZWZvcmUgPHdjaGFyLmg+LiAgKi8KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx3Y2hhci5oPgotICAgICAgIHdpbnRfdCBmb28gPSAod2NoYXJfdCknXDAnO10sICwKLSAgICAgICBndF9jdl9jX3dpbnRfdD15ZXMsIGd0X2N2X2Nfd2ludF90PW5vKV0pCi0gIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfV0lOVF9ULCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnd2ludF90JyB0eXBlLl0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvbTQveHNpemUubTQgYi9tNC94c2l6ZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODViYjcyMS4uMDAwMDAwMAotLS0gYS9tNC94c2l6ZS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMgeHNpemUubTQgc2VyaWFsIDMKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1BQ19ERUZVTihbZ2xfWFNJWkVdLAotWwotICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIveHNpemUuaC4KLSAgQUNfUkVRVUlSRShbZ2xfU0laRV9NQVhdKQotICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCi0gIEFDX0NIRUNLX0hFQURFUlMoc3RkaW50LmgpCi1dKQpkaWZmIC0tZ2l0IGEvbWlzc2luZyBiL21pc3NpbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY2MmJiYWUuLjAwMDAwMDAKLS0tIGEvbWlzc2luZworKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0jISAvYmluL3NoCi0jIENvbW1vbiB3cmFwcGVyIGZvciBhIGZldyBwb3RlbnRpYWxseSBtaXNzaW5nIEdOVSBwcm9ncmFtcy4KLQotc2NyaXB0dmVyc2lvbj0yMDEzLTEwLTI4LjEzOyAjIFVUQwotCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KLSAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCi0gIGV4aXQgMQotZmkKLQotY2FzZSAkMSBpbgotCi0gIC0taXMtbGlnaHR3ZWlnaHQpCi0gICAgIyBVc2VkIGJ5IG91ciBhdXRvY29uZiBtYWNyb3MgdG8gY2hlY2sgd2hldGhlciB0aGUgYXZhaWxhYmxlIG1pc3NpbmcKLSAgICAjIHNjcmlwdCBpcyBtb2Rlcm4gZW5vdWdoLgotICAgIGV4aXQgMAotICAgIDs7Ci0KLSAgLS1ydW4pCi0gICAgIyBCYWNrLWNvbXBhdCB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gdXNlZCBieSBvbGRlciBhdXRvbWFrZS4KLSAgICBzaGlmdAotICAgIDs7Ci0KLSAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQotICAgIGVjaG8gIlwKLSQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgotCi1SdW4gJ1BST0dSQU0gW0FSR1VNRU5UXS4uLicsIHJldHVybmluZyBhIHByb3BlciBhZHZpY2Ugd2hlbiB0aGlzIGZhaWxzIGR1ZQotdG8gUFJPR1JBTSBiZWluZyBtaXNzaW5nIG9yIHRvbyBvbGQuCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAotICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLQotU3VwcG9ydGVkIFBST0dSQU0gdmFsdWVzOgotICBhY2xvY2FsICAgYXV0b2NvbmYgIGF1dG9oZWFkZXIgICBhdXRvbTR0ZSAgYXV0b21ha2UgIG1ha2VpbmZvCi0gIGJpc29uICAgICB5YWNjICAgICAgZmxleCAgICAgICAgIGxleCAgICAgICBoZWxwMm1hbgotCi1WZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgJ2dudS0nLCAnZ251JywgYW5kCi0nZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KLQotU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKLSAgICBleGl0ICQ/Ci0gICAgOzsKLQotICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCi0gICAgZWNobyAibWlzc2luZyAkc2NyaXB0dmVyc2lvbiAoR05VIEF1dG9tYWtlKSIKLSAgICBleGl0ICQ/Ci0gICAgOzsKLQotICAtKikKLSAgICBlY2hvIDE+JjIgIiQwOiB1bmtub3duICckMScgb3B0aW9uIgotICAgIGVjaG8gMT4mMiAiVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgotICAgIGV4aXQgMQotICAgIDs7Ci0KLWVzYWMKLQotIyBSdW4gdGhlIGdpdmVuIHByb2dyYW0sIHJlbWVtYmVyIGl0cyBleGl0IHN0YXR1cy4KLSIkQCI7IHN0PSQ/Ci0KLSMgSWYgaXQgc3VjY2VlZGVkLCB3ZSBhcmUgZG9uZS4KLXRlc3QgJHN0IC1lcSAwICYmIGV4aXQgMAotCi0jIEFsc28gZXhpdCBub3cgaWYgd2UgaXQgZmFpbGVkIChvciB3YXNuJ3QgZm91bmQpLCBhbmQgJy0tdmVyc2lvbicgd2FzCi0jIHBhc3NlZDsgc3VjaCBhbiBvcHRpb24gaXMgcGFzc2VkIG1vc3QgbGlrZWx5IHRvIGRldGVjdCB3aGV0aGVyIHRoZQotIyBwcm9ncmFtIGlzIHByZXNlbnQgYW5kIHdvcmtzLgotY2FzZSAkMiBpbiAtLXZlcnNpb258LS1oZWxwKSBleGl0ICRzdDs7IGVzYWMKLQotIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucyB3aGVuIHRoZSB1c2VyCi0jIHRyaWVzIHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEKLSMgbWluaW11bSB2ZXJzaW9uLgotaWYgdGVzdCAkc3QgLWVxIDYzOyB0aGVuCi0gIG1zZz0icHJvYmFibHkgdG9vIG9sZCIKLWVsaWYgdGVzdCAkc3QgLWVxIDEyNzsgdGhlbgotICAjIFByb2dyYW0gd2FzIG1pc3NpbmcuCi0gIG1zZz0ibWlzc2luZyBvbiB5b3VyIHN5c3RlbSIKLWVsc2UKLSAgIyBQcm9ncmFtIHdhcyBmb3VuZCBhbmQgZXhlY3V0ZWQsIGJ1dCBmYWlsZWQuICBHaXZlIHVwLgotICBleGl0ICRzdAotZmkKLQotcGVybF9VUkw9aHR0cDovL3d3dy5wZXJsLm9yZy8KLWZsZXhfVVJMPWh0dHA6Ly9mbGV4LnNvdXJjZWZvcmdlLm5ldC8KLWdudV9zb2Z0d2FyZV9VUkw9aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlCi0KLXByb2dyYW1fZGV0YWlscyAoKQotewotICBjYXNlICQxIGluCi0gICAgYWNsb2NhbHxhdXRvbWFrZSkKLSAgICAgIGVjaG8gIlRoZSAnJDEnIHByb2dyYW0gaXMgcGFydCBvZiB0aGUgR05VIEF1dG9tYWtlIHBhY2thZ2U6IgotICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9tYWtlPiIKLSAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIEF1dG9jb25mLCBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKLSAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvY29uZj4iCi0gICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKLSAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgotICAgICAgOzsKLSAgICBhdXRvY29uZnxhdXRvbTR0ZXxhdXRvaGVhZGVyKQotICAgICAgZWNobyAiVGhlICckMScgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBHTlUgQXV0b2NvbmYgcGFja2FnZToiCi0gICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b2NvbmYvPiIKLSAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIG00IGFuZCBQZXJsIGluIG9yZGVyIHRvIHJ1bjoiCi0gICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKLSAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgotICAgICAgOzsKLSAgZXNhYwotfQotCi1naXZlX2FkdmljZSAoKQotewotICAjIE5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgotICBub3JtYWxpemVkX3Byb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCi0gICAgcy9eZ251LS8vOyB0Ci0gICAgcy9eZ251Ly87IHQKLSAgICBzL15nLy87IHQnYAotCi0gIHByaW50ZiAnJXNcbicgIickMScgaXMgJG1zZy4iCi0KLSAgY29uZmlndXJlX2RlcHM9Iidjb25maWd1cmUuYWMnIG9yIG00IGZpbGVzIGluY2x1ZGVkIGJ5ICdjb25maWd1cmUuYWMnIgotICBjYXNlICRub3JtYWxpemVkX3Byb2dyYW0gaW4KLSAgICBhdXRvY29uZiopCi0gICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2NvbmZpZ3VyZS5hYycsIgotICAgICAgZWNobyAib3IgbTQgZmlsZXMgaW5jbHVkZWQgYnkgaXQuIgotICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvY29uZicKLSAgICAgIDs7Ci0gICAgYXV0b2hlYWRlciopCi0gICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjY29uZmlnLmgnIG9yIgotICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKLSAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b2hlYWRlcicKLSAgICAgIDs7Ci0gICAgYXV0b21ha2UqKQotICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdNYWtlZmlsZS5hbScgb3IiCi0gICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgotICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbWFrZScKLSAgICAgIDs7Ci0gICAgYWNsb2NhbCopCi0gICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjaW5jbHVkZS5tNCcgb3IiCi0gICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgotICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhY2xvY2FsJwotICAgICAgOzsKLSAgIGF1dG9tNHRlKikKLSAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgbWFpbnRhaW5lciBmaWxlcyB0aGF0IHJlcXVpcmUiCi0gICAgICBlY2hvICJ0aGUgJ2F1dG9tNHRlJyBwcm9ncmFtIHRvIGJlIHJlYnVpbHQuIgotICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbTR0ZScKLSAgICAgIDs7Ci0gICAgYmlzb24qfHlhY2MqKQotICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy55JyBmaWxlLiIKLSAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBHTlUgQmlzb24gcGFja2FnZToiCi0gICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYmlzb24vPiIKLSAgICAgIDs7Ci0gICAgbGV4KnxmbGV4KikKLSAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcubCcgZmlsZS4iCi0gICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgRmFzdCBMZXhpY2FsIEFuYWx5emVyIHBhY2thZ2U6IgotICAgICAgZWNobyAiPCRmbGV4X1VSTD4iCi0gICAgICA7OwotICAgIGhlbHAybWFuKikKLSAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kiIFwKLSAgICAgICAgICAgIm9mIGEgbWFuIHBhZ2UuIgotICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEdOVSBIZWxwMm1hbiBwYWNrYWdlOiIKLSAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9oZWxwMm1hbi8+IgotICAgIDs7Ci0gICAgbWFrZWluZm8qKQotICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy50ZXhpJyBmaWxlLCBvciIKLSAgICAgIGVjaG8gImFueSBvdGhlciBmaWxlIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4iCi0gICAgICBlY2hvICJZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBUZXhpbmZvIHBhY2thZ2U6IgotICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML3RleGluZm8vPiIKLSAgICAgIGVjaG8gIlRoZSBzcHVyaW91cyBtYWtlaW5mbyBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIgotICAgICAgZWNobyAidXNpbmcgYSBidWdneSAnbWFrZScgKEFJWCwgRFUsIElSSVgpLCBpbiB3aGljaCBjYXNlIHlvdSBtaWdodCIKLSAgICAgIGVjaG8gIndhbnQgdG8gaW5zdGFsbCBHTlUgbWFrZToiCi0gICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbWFrZS8+IgotICAgICAgOzsKLSAgICAqKQotICAgICAgZWNobyAiWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUgcHJvcGVyIgotICAgICAgZWNobyAidG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSAnUkVBRE1FJyBmaWxlLCBpdCIKLSAgICAgIGVjaG8gIm9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmciCi0gICAgICBlY2hvICJ0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4iCi0gICAgICBlY2hvICJjYXNlIHNvbWUgb3RoZXIgcGFja2FnZSBjb250YWlucyB0aGlzIG1pc3NpbmcgJyQxJyBwcm9ncmFtLiIKLSAgICAgIDs7Ci0gIGVzYWMKLX0KLQotZ2l2ZV9hZHZpY2UgIiQxIiB8IHNlZCAtZSAnMXMvXi9XQVJOSU5HOiAvJyBcCi0gICAgICAgICAgICAgICAgICAgICAgIC1lICcyLCRzL14vICAgICAgICAgLycgPiYyCi0KLSMgUHJvcGFnYXRlIHRoZSBjb3JyZWN0IGV4aXQgc3RhdHVzIChleHBlY3RlZCB0byBiZSAxMjcgZm9yIGEgcHJvZ3JhbQotIyBub3QgZm91bmQsIDYzIGZvciBhIHByb2dyYW0gdGhhdCBmYWlsZWQgZHVlIHRvIHZlcnNpb24gbWlzbWF0Y2gpLgotZXhpdCAkc3QKLQotIyBMb2NhbCB2YXJpYWJsZXM6Ci0jIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCi0jIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL01ha2VmaWxlLmFtIGIvcGtnY29uZmlnL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGE2M2VkLi4wMDAwMDAwCi0tLSBhL3BrZ2NvbmZpZy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSMjIyBhbGwgb2YgdGhlIHN0YW5kYXJkIHBjIGZpbGVzIHdlIG5lZWQgdG8gZ2VuZXJhdGUKLWlmIEhBVkVfQ0hFQ0sKLUNIRUNLX1BDX0kgPSBnc3RyZWFtZXItY2hlY2stQEdTVF9BUElfVkVSU0lPTkAucGMKLUNIRUNLX1BDX1UgPSBnc3RyZWFtZXItY2hlY2stQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGMKLWVsc2UKLUNIRUNLX1BDX0kgPQotQ0hFQ0tfUENfVSA9Ci1lbmRpZgotCi1wY2ZpbGVzID0gCQkJCQkJCVwKLQlnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAucGMJCQkJXAotCWdzdHJlYW1lci1iYXNlLUBHU1RfQVBJX1ZFUlNJT05ALnBjCQkJXAotCSQoQ0hFQ0tfUENfSSkJCQkJCQlcCi0JZ3N0cmVhbWVyLWNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAucGMJCVwKLQlnc3RyZWFtZXItbmV0LUBHU1RfQVBJX1ZFUlNJT05ALnBjCi0KLXBjZmlsZXNfdW5pbnN0YWxsZWQgPQkJCQkJCVwKLQlnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGMJCVwKLQlnc3RyZWFtZXItYmFzZS1AR1NUX0FQSV9WRVJTSU9OQC11bmluc3RhbGxlZC5wYwkJXAotCSQoQ0hFQ0tfUENfVSkJCQkJCQlcCi0JZ3N0cmVhbWVyLWNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGMJXAotCWdzdHJlYW1lci1uZXQtQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGMKLQotYWxsLWxvY2FsOiAkKHBjZmlsZXMpICQocGNmaWxlc191bmluc3RhbGxlZCkKLQotY3BfdmVyYm9zZSA9ICQoY3BfdmVyYm9zZV8kKFYpKQotY3BfdmVyYm9zZV8gPSAkKGNwX3ZlcmJvc2VfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1jcF92ZXJib3NlXzAgPSBAZWNobyAiICBDUCAgICAgJEAiOwotCi0jIyMgaG93IHRvIGdlbmVyYXRlIHBjIGZpbGVzCi0lLUBHU1RfQVBJX1ZFUlNJT05ALnBjOiAlLnBjCi0JJChjcF92ZXJib3NlXzApY3AgJDwgJEAKLSUtQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGM6ICUtdW5pbnN0YWxsZWQucGMKLQkkKGNwX3ZlcmJvc2VfMCljcCAkPCAkQAotCi1wa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCi1wa2djb25maWdfREFUQSA9ICQocGNmaWxlcykKLQotRVhUUkFfRElTVCA9CQkJCQkJCVwKLQlnc3RyZWFtZXIucGMuaW4JCQkJCQlcCi0JZ3N0cmVhbWVyLXVuaW5zdGFsbGVkLnBjLmluCQkJCVwKLQlnc3RyZWFtZXItYmFzZS5wYy5pbgkJCQkJXAotCWdzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluCQkJXAotCWdzdHJlYW1lci1jaGVjay5wYy5pbgkJCQkJXAotCWdzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbgkJCVwKLQlnc3RyZWFtZXItY29udHJvbGxlci5wYy5pbgkJCQlcCi0JZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW4JCQlcCi0JZ3N0cmVhbWVyLW5ldC5wYy5pbgkJCQkJXAotCWdzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMuaW4KLQotQ0xFQU5GSUxFUyA9ICQocGNmaWxlcykgJChwY2ZpbGVzX3VuaW5zdGFsbGVkKQpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL01ha2VmaWxlLmluIGIvcGtnY29uZmlnL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjUyNDdmLi4wMDAwMDAwCi0tLSBhL3BrZ2NvbmZpZy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDc4MCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gcGtnY29uZmlnCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0gZ3N0cmVhbWVyLnBjIGdzdHJlYW1lci11bmluc3RhbGxlZC5wYyBcCi0JZ3N0cmVhbWVyLWJhc2UucGMgZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMgXAotCWdzdHJlYW1lci1jaGVjay5wYyBnc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMgXAotCWdzdHJlYW1lci1jb250cm9sbGVyLnBjIGdzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjIFwKLQlnc3RyZWFtZXItbmV0LnBjIGdzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMKLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIgotREFUQSA9ICQocGtnY29uZmlnX0RBVEEpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKLQkkKHNyY2RpcikvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW4gXAotCSQoc3JjZGlyKS9nc3RyZWFtZXItYmFzZS5wYy5pbiBcCi0JJChzcmNkaXIpL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbiBcCi0JJChzcmNkaXIpL2dzdHJlYW1lci1jaGVjay5wYy5pbiBcCi0JJChzcmNkaXIpL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluIFwKLQkkKHNyY2RpcikvZ3N0cmVhbWVyLWNvbnRyb2xsZXIucGMuaW4gXAotCSQoc3JjZGlyKS9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluIFwKLQkkKHNyY2RpcikvZ3N0cmVhbWVyLW5ldC5wYy5pbiBcCi0JJChzcmNkaXIpL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbiBcCi0JJChzcmNkaXIpL2dzdHJlYW1lci5wYy5pbgotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ASEFWRV9DSEVDS19GQUxTRUBDSEVDS19QQ19JID0gCi0KLSMjIyBhbGwgb2YgdGhlIHN0YW5kYXJkIHBjIGZpbGVzIHdlIG5lZWQgdG8gZ2VuZXJhdGUKLUBIQVZFX0NIRUNLX1RSVUVAQ0hFQ0tfUENfSSA9IGdzdHJlYW1lci1jaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5wYwotQEhBVkVfQ0hFQ0tfRkFMU0VAQ0hFQ0tfUENfVSA9IAotQEhBVkVfQ0hFQ0tfVFJVRUBDSEVDS19QQ19VID0gZ3N0cmVhbWVyLWNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALXVuaW5zdGFsbGVkLnBjCi1wY2ZpbGVzID0gXAotCWdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQC5wYwkJCQlcCi0JZ3N0cmVhbWVyLWJhc2UtQEdTVF9BUElfVkVSU0lPTkAucGMJCQlcCi0JJChDSEVDS19QQ19JKQkJCQkJCVwKLQlnc3RyZWFtZXItY29udHJvbGxlci1AR1NUX0FQSV9WRVJTSU9OQC5wYwkJXAotCWdzdHJlYW1lci1uZXQtQEdTVF9BUElfVkVSU0lPTkAucGMKLQotcGNmaWxlc191bmluc3RhbGxlZCA9IFwKLQlnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGMJCVwKLQlnc3RyZWFtZXItYmFzZS1AR1NUX0FQSV9WRVJTSU9OQC11bmluc3RhbGxlZC5wYwkJXAotCSQoQ0hFQ0tfUENfVSkJCQkJCQlcCi0JZ3N0cmVhbWVyLWNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGMJXAotCWdzdHJlYW1lci1uZXQtQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGMKLQotY3BfdmVyYm9zZSA9ICQoY3BfdmVyYm9zZV8kKFYpKQotY3BfdmVyYm9zZV8gPSAkKGNwX3ZlcmJvc2VfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1jcF92ZXJib3NlXzAgPSBAZWNobyAiICBDUCAgICAgJEAiOwotcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZwotcGtnY29uZmlnX0RBVEEgPSAkKHBjZmlsZXMpCi1FWFRSQV9ESVNUID0gXAotCWdzdHJlYW1lci5wYy5pbgkJCQkJCVwKLQlnc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW4JCQkJXAotCWdzdHJlYW1lci1iYXNlLnBjLmluCQkJCQlcCi0JZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW4JCQlcCi0JZ3N0cmVhbWVyLWNoZWNrLnBjLmluCQkJCQlcCi0JZ3N0cmVhbWVyLWNoZWNrLXVuaW5zdGFsbGVkLnBjLmluCQkJXAotCWdzdHJlYW1lci1jb250cm9sbGVyLnBjLmluCQkJCVwKLQlnc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYy5pbgkJCVwKLQlnc3RyZWFtZXItbmV0LnBjLmluCQkJCQlcCi0JZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbgotCi1DTEVBTkZJTEVTID0gJChwY2ZpbGVzKSAkKHBjZmlsZXNfdW5pbnN0YWxsZWQpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBwa2djb25maWcvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgcGtnY29uZmlnL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotZ3N0cmVhbWVyLnBjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0cmVhbWVyLnBjLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLWdzdHJlYW1lci11bmluc3RhbGxlZC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi1nc3RyZWFtZXItYmFzZS5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1iYXNlLnBjLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLWdzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotZ3N0cmVhbWVyLWNoZWNrLnBjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0cmVhbWVyLWNoZWNrLnBjLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLWdzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi1nc3RyZWFtZXItY29udHJvbGxlci5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1jb250cm9sbGVyLnBjLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKLWdzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0cmVhbWVyLWNvbnRyb2xsZXItdW5pbnN0YWxsZWQucGMuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotZ3N0cmVhbWVyLW5ldC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1uZXQucGMuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1uZXQtdW5pbnN0YWxsZWQucGMuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotaW5zdGFsbC1wa2djb25maWdEQVRBOiAkKHBrZ2NvbmZpZ19EQVRBKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBrZ2NvbmZpZ19EQVRBKSc7IHRlc3QgLW4gIiQocGtnY29uZmlnZGlyKSIgfHwgbGlzdD07IFwKLQlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwa2djb25maWdkaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiIHx8IGV4aXQgMTsgXAotCWZpOyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgXAotCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAotCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQocGtnY29uZmlnZGlyKSciOyBcCi0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgfHwgZXhpdCAkJD87IFwKLQlkb25lCi0KLXVuaW5zdGFsbC1wa2djb25maWdEQVRBOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAotCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChwa2djb25maWdkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotdGFncyBUQUdTOgotCi1jdGFncyBDVEFHUzoKLQotY3Njb3BlIGNzY29wZWxpc3Q6Ci0KLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChEQVRBKSBhbGwtbG9jYWwKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGtnY29uZmlnREFUQQotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3RjbGVhbiBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzLWFtIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wa2djb25maWdEQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi1hbGwtbG9jYWw6ICQocGNmaWxlcykgJChwY2ZpbGVzX3VuaW5zdGFsbGVkKQotCi0jIyMgaG93IHRvIGdlbmVyYXRlIHBjIGZpbGVzCi0lLUBHU1RfQVBJX1ZFUlNJT05ALnBjOiAlLnBjCi0JJChjcF92ZXJib3NlXzApY3AgJDwgJEAKLSUtQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGM6ICUtdW5pbnN0YWxsZWQucGMKLQkkKGNwX3ZlcmJvc2VfMCljcCAkPCAkQAotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW4gYi9wa2djb25maWcvZ3N0cmVhbWVyLWJhc2UtdW5pbnN0YWxsZWQucGMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YTRlMWYuLjAwMDAwMDAKLS0tIGEvcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLXVuaW5zdGFsbGVkLnBjLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyB0aGUgc3RhbmRhcmQgdmFyaWFibGVzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIGFuIHVuaW5zdGFsbGVkIGNvcHkKLXByZWZpeD0KLWV4ZWNfcHJlZml4PQotbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9iYXNlLy5saWJzCi1pbmNsdWRlZGlyPQotZ2lyZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9iYXNlCi10eXBlbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9iYXNlCi0KLU5hbWU6IEdTdHJlYW1lciBiYXNlIGNsYXNzZXMsIHVuaW5zdGFsbGVkCi1EZXNjcmlwdGlvbjogQmFzZSBjbGFzc2VzIGZvciBHU3RyZWFtZXIgZWxlbWVudHMsIE5vdCBJbnN0YWxsZWQKLVJlcXVpcmVzOiBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAgPSBAVkVSU0lPTkAKLVZlcnNpb246IEBWRVJTSU9OQAotCi1MaWJzOiAtTCR7bGliZGlyfSAtbGdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAKLUNmbGFnczogLUlAYWJzX3RvcF9zcmNkaXJAL2xpYnMgLUlAYWJzX3RvcF9idWlsZGRpckAvbGlicwpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1iYXNlLnBjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjRlMDUwLi4wMDAwMDAwCi0tLSBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItYmFzZS5wYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLXByZWZpeD1AcHJlZml4QAotZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAotbGliZGlyPUBsaWJkaXJACi1pbmNsdWRlZGlyPUBpbmNsdWRlZGlyQC9nc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAKLWRhdGFyb290ZGlyPSR7cHJlZml4fS9zaGFyZQotZGF0YWRpcj0ke2RhdGFyb290ZGlyfQotZ2lyZGlyPSR7ZGF0YWRpcn0vZ2lyLTEuMAotdHlwZWxpYmRpcj0ke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMAotCi1OYW1lOiBHU3RyZWFtZXIgYmFzZSBjbGFzc2VzCi1EZXNjcmlwdGlvbjogQmFzZSBjbGFzc2VzIGZvciBHU3RyZWFtZXIgZWxlbWVudHMKLVJlcXVpcmVzOiBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAKLVZlcnNpb246IEBWRVJTSU9OQAotTGliczogLUwke2xpYmRpcn0gLWxnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ACi1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItY2hlY2stdW5pbnN0YWxsZWQucGMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhZWFmNzcuLjAwMDAwMDAKLS0tIGEvcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay11bmluc3RhbGxlZC5wYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMgdGhlIHN0YW5kYXJkIHZhcmlhYmxlcyBkb24ndCBtYWtlIHNlbnNlIGZvciBhbiB1bmluc3RhbGxlZCBjb3B5Ci1wcmVmaXg9Ci1leGVjX3ByZWZpeD0KLWxpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvY2hlY2svLmxpYnMKLWluY2x1ZGVkaXI9Ci1naXJkaXI9QGFic190b3BfYnVpbGRkaXJAL2xpYnMvZ3N0L2NoZWNrCi10eXBlbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9jaGVjawotCi1OYW1lOiBHU3RyZWFtZXIgY2hlY2sgdW5pdCB0ZXN0aW5nLCB1bmluc3RhbGxlZAotRGVzY3JpcHRpb246IFVuaXQgdGVzdGluZyBoZWxwZXIgbGlicmFyeSBmb3IgR1N0cmVhbWVyIG1vZHVsZXMsIE5vdCBJbnN0YWxsZWQKLVJlcXVpcmVzOiBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAgPSBAVkVSU0lPTkAKLVZlcnNpb246IEBWRVJTSU9OQAotCi1MaWJzOiAtTCR7bGliZGlyfSAtbGdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05AIEBMSUJNQAotQ2ZsYWdzOiAtSUBhYnNfdG9wX3NyY2RpckAvbGlicyAtSUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzCmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1jaGVjay5wYy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzYTEyOS4uMDAwMDAwMAotLS0gYS9wa2djb25maWcvZ3N0cmVhbWVyLWNoZWNrLnBjLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcHJlZml4PUBwcmVmaXhACi1leGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACi1saWJkaXI9QGxpYmRpckAKLWluY2x1ZGVkaXI9QGluY2x1ZGVkaXJAL2dzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQAotZGF0YXJvb3RkaXI9JHtwcmVmaXh9L3NoYXJlCi1kYXRhZGlyPSR7ZGF0YXJvb3RkaXJ9Ci1naXJkaXI9JHtkYXRhZGlyfS9naXItMS4wCi10eXBlbGliZGlyPSR7bGliZGlyfS9naXJlcG9zaXRvcnktMS4wCi0KLU5hbWU6IEdTdHJlYW1lciBjaGVjayB1bml0IHRlc3RpbmcKLURlc2NyaXB0aW9uOiBVbml0IHRlc3RpbmcgaGVscGVyIGxpYnJhcnkgZm9yIEdTdHJlYW1lciBtb2R1bGVzCi1SZXF1aXJlczogZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ACi1WZXJzaW9uOiBAVkVSU0lPTkAKLUxpYnM6IC1MJHtsaWJkaXJ9IC1sZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAgQExJQk1ACi1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLXVuaW5zdGFsbGVkLnBjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzIyN2UxLi4wMDAwMDAwCi0tLSBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci11bmluc3RhbGxlZC5wYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMgdGhlIHN0YW5kYXJkIHZhcmlhYmxlcyBkb24ndCBtYWtlIHNlbnNlIGZvciBhbiB1bmluc3RhbGxlZCBjb3B5Ci1wcmVmaXg9Ci1leGVjX3ByZWZpeD0KLWxpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvY29udHJvbGxlci8ubGlicwotaW5jbHVkZWRpcj0KLWdpcmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvY29udHJvbGxlcgotdHlwZWxpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvY29udHJvbGxlcgotCi1OYW1lOiBHU3RyZWFtZXIgY29udHJvbGxlciwgdW5pbnN0YWxsZWQKLURlc2NyaXB0aW9uOiBEeW5hbWljIHBhcmFtZXRlciBjb250cm9sIGZvciBHU3RyZWFtZXIgZWxlbWVudHMsIE5vdCBJbnN0YWxsZWQKLVJlcXVpcmVzOiBnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAgPSBAVkVSU0lPTkAKLVZlcnNpb246IEBWRVJTSU9OQAotCi1MaWJzOiAtTCR7bGliZGlyfSAtbGdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAKLUNmbGFnczogLUlAYWJzX3RvcF9zcmNkaXJAL2xpYnMgLUlAYWJzX3RvcF9idWlsZGRpckAvbGlicwpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci1jb250cm9sbGVyLnBjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTE4ZGU0Li4wMDAwMDAwCi0tLSBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItY29udHJvbGxlci5wYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLXByZWZpeD1AcHJlZml4QAotZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAotbGliZGlyPUBsaWJkaXJACi1pbmNsdWRlZGlyPUBpbmNsdWRlZGlyQC9nc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAKLWRhdGFyb290ZGlyPSR7cHJlZml4fS9zaGFyZQotZGF0YWRpcj0ke2RhdGFyb290ZGlyfQotZ2lyZGlyPSR7ZGF0YWRpcn0vZ2lyLTEuMAotdHlwZWxpYmRpcj0ke2xpYmRpcn0vZ2lyZXBvc2l0b3J5LTEuMAotCi1OYW1lOiBHU3RyZWFtZXIgY29udHJvbGxlcgotRGVzY3JpcHRpb246IER5bmFtaWMgcGFyYW1ldGVyIGNvbnRyb2wgZm9yIEdTdHJlYW1lciBlbGVtZW50cwotUmVxdWlyZXM6IGdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQAotVmVyc2lvbjogQFZFUlNJT05ACi1MaWJzOiAtTCR7bGliZGlyfSAtbGdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAKLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLW5ldC11bmluc3RhbGxlZC5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2IxNDU5Li4wMDAwMDAwCi0tLSBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LXVuaW5zdGFsbGVkLnBjLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyB0aGUgc3RhbmRhcmQgdmFyaWFibGVzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIGFuIHVuaW5zdGFsbGVkIGNvcHkKLXByZWZpeD0KLWV4ZWNfcHJlZml4PQotbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9uZXQvLmxpYnMKLWluY2x1ZGVkaXI9Ci1naXJkaXI9QGFic190b3BfYnVpbGRkaXJAL2xpYnMvZ3N0L25ldAotdHlwZWxpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvbGlicy9nc3QvbmV0Ci0KLU5hbWU6IEdTdHJlYW1lciBuZXR3b3JraW5nIGxpYnJhcnksIHVuaW5zdGFsbGVkCi1EZXNjcmlwdGlvbjogTmV0d29yay1lbmFibGVkIEdTdHJlYW1lciBwbHVnLWlucyBhbmQgY2xvY2tpbmcsIHVuaW5zdGFsbGVkCi1SZXF1aXJlczogZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05AID0gQFZFUlNJT05AIGdpby0yLjAKLVZlcnNpb246IEBWRVJTSU9OQAotCi1MaWJzOiAtTCR7bGliZGlyfSAtbGdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQAotQ2ZsYWdzOiAtSUBhYnNfdG9wX3NyY2RpckAvbGlicyAtSUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzCmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLW5ldC5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTRjM2FiLi4wMDAwMDAwCi0tLSBhL3BrZ2NvbmZpZy9nc3RyZWFtZXItbmV0LnBjLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcHJlZml4PUBwcmVmaXhACi1leGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACi1saWJkaXI9QGxpYmRpckAKLWluY2x1ZGVkaXI9QGluY2x1ZGVkaXJAL2dzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQAotZGF0YXJvb3RkaXI9JHtwcmVmaXh9L3NoYXJlCi1kYXRhZGlyPSR7ZGF0YXJvb3RkaXJ9Ci1naXJkaXI9JHtkYXRhZGlyfS9naXItMS4wCi10eXBlbGliZGlyPSR7bGliZGlyfS9naXJlcG9zaXRvcnktMS4wCi0KLU5hbWU6IEdTdHJlYW1lciBuZXR3b3JraW5nIGxpYnJhcnkKLURlc2NyaXB0aW9uOiBOZXR3b3JrLWVuYWJsZWQgR1N0cmVhbWVyIHBsdWctaW5zIGFuZCBjbG9ja2luZwotUmVxdWlyZXM6IGdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQCBnaW8tMi4wCi1WZXJzaW9uOiBAVkVSU0lPTkAKLUxpYnM6IC1MJHtsaWJkaXJ9IC1sZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ACi1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbiBiL3BrZ2NvbmZpZy9nc3RyZWFtZXItdW5pbnN0YWxsZWQucGMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YzJhMDQuLjAwMDAwMDAKLS0tIGEvcGtnY29uZmlnL2dzdHJlYW1lci11bmluc3RhbGxlZC5wYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgdGhlIHN0YW5kYXJkIHZhcmlhYmxlcyBkb24ndCBtYWtlIHNlbnNlIGZvciBhbiB1bmluc3RhbGxlZCBjb3B5Ci1wcmVmaXg9Ci1leGVjX3ByZWZpeD0KLWxpYmRpcj1AYWJzX3RvcF9idWlsZGRpckAvZ3N0Ly5saWJzCi0jIGluY2x1ZGVkaXIgaXMgYnVpbGRkaXIgYmVjYXVzZSBpdCBpcyB1c2VkIHRvIGZpbmQgZ3N0Y29uZmlnLmggaW4gcGxhY2VzCi1pbmNsdWRlZGlyPUBhYnNfdG9wX2J1aWxkZGlyQAotdG9vbHNkaXI9QGFic190b3BfYnVpbGRkaXJAL3Rvb2xzCi1wbHVnaW5zZGlyPUBhYnNfdG9wX2J1aWxkZGlyQAotZ2lyZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9nc3QKLWNvbXBsZXRpb25zZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9kYXRhL2NvbXBsZXRpb25zCi1oZWxwZXJzZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzL2dzdC9oZWxwZXJzCi10eXBlbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9nc3QKLQotTmFtZTogR1N0cmVhbWVyIFVuaW5zdGFsbGVkCi1EZXNjcmlwdGlvbjogU3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yaywgTm90IEluc3RhbGxlZAotVmVyc2lvbjogQFZFUlNJT05ACi1SZXF1aXJlczogZ2xpYi0yLjAsIGdvYmplY3QtMi4wCi1SZXF1aXJlcy5wcml2YXRlOiBnbW9kdWxlLW5vLWV4cG9ydC0yLjAKLUxpYnM6IC1MJHtsaWJkaXJ9IC1sZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ACi1DZmxhZ3M6IC1JQGFic190b3Bfc3JjZGlyQCAtSUBhYnNfdG9wX3NyY2RpckAvbGlicyAtSUBhYnNfdG9wX2J1aWxkZGlyQCAtSUBhYnNfdG9wX2J1aWxkZGlyQC9saWJzCmRpZmYgLS1naXQgYS9wa2djb25maWcvZ3N0cmVhbWVyLnBjLmluIGIvcGtnY29uZmlnL2dzdHJlYW1lci5wYy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhiOGFhOS4uMDAwMDAwMAotLS0gYS9wa2djb25maWcvZ3N0cmVhbWVyLnBjLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcHJlZml4PUBwcmVmaXhACi1leGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACi1saWJkaXI9QGxpYmRpckAKLWluY2x1ZGVkaXI9QGluY2x1ZGVkaXJAL2dzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQAotdG9vbHNkaXI9JHtleGVjX3ByZWZpeH0vYmluCi1wbHVnaW5zZGlyPUBsaWJkaXJAL2dzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQAotZGF0YXJvb3RkaXI9JHtwcmVmaXh9L3NoYXJlCi1kYXRhZGlyPSR7ZGF0YXJvb3RkaXJ9Ci1naXJkaXI9JHtkYXRhZGlyfS9naXItMS4wCi1jb21wbGV0aW9uc2Rpcj1AQkFTSF9DT01QTEVUSU9OX0RJUkAKLWhlbHBlcnNkaXI9QEJBU0hfSEVMUEVSU19ESVJACi10eXBlbGliZGlyPSR7bGliZGlyfS9naXJlcG9zaXRvcnktMS4wCi0KLU5hbWU6IEdTdHJlYW1lcgotRGVzY3JpcHRpb246IFN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmsKLVZlcnNpb246IEBWRVJTSU9OQAotUmVxdWlyZXM6IGdsaWItMi4wLCBnb2JqZWN0LTIuMAotUmVxdWlyZXMucHJpdmF0ZTogZ21vZHVsZS1uby1leHBvcnQtMi4wCi1MaWJzOiAtTCR7bGliZGlyfSAtbGdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQAotQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvTWFrZWZpbGUuYW0gYi9wbHVnaW5zL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWUwNGFhLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVNVQkRJUlMgPSBlbGVtZW50cyB0cmFjZXJzCi0KLURJU1RfU1VCRElSUyA9IGVsZW1lbnRzIHRyYWNlcnMKLQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9NYWtlZmlsZS5pbiBiL3BsdWdpbnMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YWUzZDguLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDgyNSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IHBsdWdpbnMKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBcCi0JY3RhZ3MtcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaHRtbC1yZWN1cnNpdmUgXAotCWluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1wZGYtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKLQlpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgXAotCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1SRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAotICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi1hbV9fcmVjdXJzaXZlX3RhcmdldHMgPSBcCi0gICQoUkVDVVJTSVZFX1RBUkdFVFMpIFwKLSAgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgXAotICAkKGFtX19leHRyYV9yZWN1cnNpdmVfdGFyZ2V0cykKLUFNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChhbV9fcmVjdXJzaXZlX3RhcmdldHM6LXJlY3Vyc2l2ZT0pIFRBR1MgQ1RBR1MgXAotCWRpc3RkaXIKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotYW1fX3JlbGF0aXZpemUgPSBcCi0gIGRpcjA9YHB3ZGA7IFwKLSAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCi0gIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCi0gIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCi0gIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAotICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCi0gICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAotICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKLSAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCi0gICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAotICAgICAgZWxzZSBcCi0gICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAotICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICAgICAgICBlbHNlIFwKLSAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCi0gICAgICAgIGZpOyBcCi0gICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCi0gICAgICBmaTsgXAotICAgIGZpOyBcCi0gICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gIGRvbmU7IFwKLSAgcmVsZGlyPSIkJGRpcjIiCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotU1VCRElSUyA9IGVsZW1lbnRzIHRyYWNlcnMKLURJU1RfU1VCRElSUyA9IGVsZW1lbnRzIHRyYWNlcnMKLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBwbHVnaW5zL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHBsdWdpbnMvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6Ci0JQGZhaWw9OyBcCi0JaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKLQkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAotCWVsc2UgXAotCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZpOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtcmVjdXJzaXZlCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtcmVjdXJzaXZlCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCi0JICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCi0JICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKLQkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCi0JCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKLQkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAotCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgXAotCWNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKLQlwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbSBiL3BsdWdpbnMvZWxlbWVudHMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNGQzOGMuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLQotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0Y29yZWVsZW1lbnRzLmxhCi0KLWxpYmdzdGNvcmVlbGVtZW50c19sYV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvZ3N0L2xpYmdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQC5sYQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhX1NPVVJDRVMgPQlcCi0JZ3N0Y2Fwc2ZpbHRlci5jCQlcCi0JZ3N0Y29uY2F0LmMJCVwKLQlnc3Rkb3dubG9hZGJ1ZmZlci5jICAgICBcCi0JZ3N0ZWxlbWVudHMuYwkJXAotCWdzdGVsZW1lbnRzX3ByaXZhdGUuYwlcCi0JZ3N0ZmFrZXNyYy5jCQlcCi0JZ3N0ZmFrZXNpbmsuYwkJXAotCWdzdGZkc3JjLmMJCVwKLQlnc3RmZHNpbmsuYwkJXAotCWdzdGZpbGVzaW5rLmMJCVwKLQlnc3RmaWxlc3JjLmMJCVwKLQlnc3RmdW5uZWwuYwkJXAotCWdzdGlkZW50aXR5LmMJCVwKLQlnc3RpbnB1dHNlbGVjdG9yLmMJXAotCWdzdG91dHB1dHNlbGVjdG9yLmMJXAotCWdzdG11bHRpcXVldWUuYwkJXAotCWdzdHF1ZXVlLmMJCVwKLQlnc3RxdWV1ZTIuYwkJXAotCWdzdHNwYXJzZWZpbGUuYwkJXAotCWdzdHRlZS5jCQlcCi0JZ3N0dHlwZWZpbmRlbGVtZW50LmMJXAotCWdzdHN0cmVhbWlkZGVtdXguYwlcCi0JZ3N0dmFsdmUuYwotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJBREQgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChHU1RfT0JKX0xJQlMpCi1saWJnc3Rjb3JlZWxlbWVudHNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0JCVwKLQlnc3RjYXBzZmlsdGVyLmgJCVwKLQlnc3Rjb25jYXQuaAkJXAotCWdzdGRvd25sb2FkYnVmZmVyLmgJXAotCWdzdGVsZW1lbnRzX3ByaXZhdGUuaAlcCi0JZ3N0ZmFrZXNpbmsuaAkJXAotCWdzdGZha2VzcmMuaAkJXAotCWdzdGZkc3JjLmgJCVwKLQlnc3RmZHNpbmsuaAkJXAotCWdzdGZpbGVzaW5rLmgJCVwKLQlnc3RmaWxlc3JjLmgJCVwKLQlnc3RmdW5uZWwuaAkJXAotCWdzdGlkZW50aXR5LmgJCVwKLQlnc3RpbnB1dHNlbGVjdG9yLmgJXAotCWdzdG91dHB1dHNlbGVjdG9yLmgJXAotCWdzdG11bHRpcXVldWUuaAkJXAotCWdzdHF1ZXVlLmgJCVwKLQlnc3RxdWV1ZTIuaAkJXAotCWdzdHNwYXJzZWZpbGUuaAkJXAotCWdzdHRlZS5oCQlcCi0JZ3N0dHlwZWZpbmRlbGVtZW50LmgJXAotCWdzdHN0cmVhbWlkZGVtdXguaAlcCi0JZ3N0dmFsdmUuaAotCi1FWFRSQV9ESVNUID0gZ3N0ZmRzcmMuYyBcCi0JICAgICBnc3RmZHNpbmsuYwotCi0KLUNMRUFORklMRVMgPSAqLmdjbm8gKi5nY2RhICouZ2NvdiAqLmdjb3Yub3V0Ci0KLSUuYy5nY292OiAubGlicy9saWJnc3Rjb3JlZWxlbWVudHNfbGEtJS5nY2RhICUuYwotCSQoR0NPVikgLWIgLWYgLW8gJF4gPiAkQC5vdXQKLQotZ2NvdjogJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfU09VUkNFUzo9Lmdjb3YpCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmluIGIvcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU4NjJjOC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTEzMCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBwbHVnaW5zL2VsZW1lbnRzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotYW1fbGliZ3N0Y29yZWVsZW1lbnRzX2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLmxvIFwKLQlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0Y29uY2F0LmxvIFwKLQlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZG93bmxvYWRidWZmZXIubG8gXAotCWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50cy5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzX3ByaXZhdGUubG8gXAotCWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc3JjLmxvIFwKLQlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNpbmsubG8gXAotCWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNyYy5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc2luay5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLmxvIFwKLQlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZ1bm5lbC5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LmxvIFwKLQlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLmxvIFwKLQlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0bXVsdGlxdWV1ZS5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlLmxvIFwKLQlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUyLmxvIFwKLQlsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0c3BhcnNlZmlsZS5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHR5cGVmaW5kZWxlbWVudC5sbyBcCi0JbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHN0cmVhbWlkZGVtdXgubG8gXAotCWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R2YWx2ZS5sbwotbGliZ3N0Y29yZWVsZW1lbnRzX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGNvcmVlbGVtZW50c19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0Y29yZWVsZW1lbnRzLmxhCi1saWJnc3Rjb3JlZWxlbWVudHNfbGFfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAubGEKLWxpYmdzdGNvcmVlbGVtZW50c19sYV9TT1VSQ0VTID0gXAotCWdzdGNhcHNmaWx0ZXIuYwkJXAotCWdzdGNvbmNhdC5jCQlcCi0JZ3N0ZG93bmxvYWRidWZmZXIuYyAgICAgXAotCWdzdGVsZW1lbnRzLmMJCVwKLQlnc3RlbGVtZW50c19wcml2YXRlLmMJXAotCWdzdGZha2VzcmMuYwkJXAotCWdzdGZha2VzaW5rLmMJCVwKLQlnc3RmZHNyYy5jCQlcCi0JZ3N0ZmRzaW5rLmMJCVwKLQlnc3RmaWxlc2luay5jCQlcCi0JZ3N0ZmlsZXNyYy5jCQlcCi0JZ3N0ZnVubmVsLmMJCVwKLQlnc3RpZGVudGl0eS5jCQlcCi0JZ3N0aW5wdXRzZWxlY3Rvci5jCVwKLQlnc3RvdXRwdXRzZWxlY3Rvci5jCVwKLQlnc3RtdWx0aXF1ZXVlLmMJCVwKLQlnc3RxdWV1ZS5jCQlcCi0JZ3N0cXVldWUyLmMJCVwKLQlnc3RzcGFyc2VmaWxlLmMJCVwKLQlnc3R0ZWUuYwkJXAotCWdzdHR5cGVmaW5kZWxlbWVudC5jCVwKLQlnc3RzdHJlYW1pZGRlbXV4LmMJXAotCWdzdHZhbHZlLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1saWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR1NUX09CSl9MSUJTKQotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IFwKLQlnc3RjYXBzZmlsdGVyLmgJCVwKLQlnc3Rjb25jYXQuaAkJXAotCWdzdGRvd25sb2FkYnVmZmVyLmgJXAotCWdzdGVsZW1lbnRzX3ByaXZhdGUuaAlcCi0JZ3N0ZmFrZXNpbmsuaAkJXAotCWdzdGZha2VzcmMuaAkJXAotCWdzdGZkc3JjLmgJCVwKLQlnc3RmZHNpbmsuaAkJXAotCWdzdGZpbGVzaW5rLmgJCVwKLQlnc3RmaWxlc3JjLmgJCVwKLQlnc3RmdW5uZWwuaAkJXAotCWdzdGlkZW50aXR5LmgJCVwKLQlnc3RpbnB1dHNlbGVjdG9yLmgJXAotCWdzdG91dHB1dHNlbGVjdG9yLmgJXAotCWdzdG11bHRpcXVldWUuaAkJXAotCWdzdHF1ZXVlLmgJCVwKLQlnc3RxdWV1ZTIuaAkJXAotCWdzdHNwYXJzZWZpbGUuaAkJXAotCWdzdHRlZS5oCQlcCi0JZ3N0dHlwZWZpbmRlbGVtZW50LmgJXAotCWdzdHN0cmVhbWlkZGVtdXguaAlcCi0JZ3N0dmFsdmUuaAotCi1FWFRSQV9ESVNUID0gZ3N0ZmRzcmMuYyBcCi0JICAgICBnc3RmZHNpbmsuYwotCi1DTEVBTkZJTEVTID0gKi5nY25vICouZ2NkYSAqLmdjb3YgKi5nY292Lm91dAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgcGx1Z2lucy9lbGVtZW50cy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBwbHVnaW5zL2VsZW1lbnRzL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0Y29yZWVsZW1lbnRzLmxhOiAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9PQkpFQ1RTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0Y29yZWVsZW1lbnRzX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9PQkpFQ1RTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNvbmNhdC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rkb3dubG9hZGJ1ZmZlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50cy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50c19wcml2YXRlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzaW5rLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzcmMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzaW5rLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzcmMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZnVubmVsLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlucHV0c2VsZWN0b3IuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0bXVsdGlxdWV1ZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RvdXRwdXRzZWxlY3Rvci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZTIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0c3BhcnNlZmlsZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RzdHJlYW1pZGRlbXV4LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0eXBlZmluZGVsZW1lbnQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLmxvOiBnc3RjYXBzZmlsdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0Y2Fwc2ZpbHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNhcHNmaWx0ZXIuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLmxvIGB0ZXN0IC1mICdnc3RjYXBzZmlsdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNhcHNmaWx0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNhcHNmaWx0ZXIuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0Y2Fwc2ZpbHRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RjYXBzZmlsdGVyLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNhcHNmaWx0ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RjYXBzZmlsdGVyLmxvIGB0ZXN0IC1mICdnc3RjYXBzZmlsdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNhcHNmaWx0ZXIuYwotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0Y29uY2F0LmxvOiBnc3Rjb25jYXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rjb25jYXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rjb25jYXQuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rjb25jYXQubG8gYHRlc3QgLWYgJ2dzdGNvbmNhdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rjb25jYXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNvbmNhdC5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rjb25jYXQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Y29uY2F0LmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNvbmNhdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGNvbmNhdC5sbyBgdGVzdCAtZiAnZ3N0Y29uY2F0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNvbmNhdC5jCi0KLWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rkb3dubG9hZGJ1ZmZlci5sbzogZ3N0ZG93bmxvYWRidWZmZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rkb3dubG9hZGJ1ZmZlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGRvd25sb2FkYnVmZmVyLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZG93bmxvYWRidWZmZXIubG8gYHRlc3QgLWYgJ2dzdGRvd25sb2FkYnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRvd25sb2FkYnVmZmVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rkb3dubG9hZGJ1ZmZlci5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rkb3dubG9hZGJ1ZmZlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rkb3dubG9hZGJ1ZmZlci5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3Rkb3dubG9hZGJ1ZmZlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGRvd25sb2FkYnVmZmVyLmxvIGB0ZXN0IC1mICdnc3Rkb3dubG9hZGJ1ZmZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rkb3dubG9hZGJ1ZmZlci5jCi0KLWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50cy5sbzogZ3N0ZWxlbWVudHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50cy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZWxlbWVudHMubG8gYHRlc3QgLWYgJ2dzdGVsZW1lbnRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVsZW1lbnRzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50cy5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50cy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RlbGVtZW50cy5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50cy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzLmxvIGB0ZXN0IC1mICdnc3RlbGVtZW50cy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlbGVtZW50cy5jCi0KLWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50c19wcml2YXRlLmxvOiBnc3RlbGVtZW50c19wcml2YXRlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZWxlbWVudHNfcHJpdmF0ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzX3ByaXZhdGUuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50c19wcml2YXRlLmxvIGB0ZXN0IC1mICdnc3RlbGVtZW50c19wcml2YXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVsZW1lbnRzX3ByaXZhdGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzX3ByaXZhdGUuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZWxlbWVudHNfcHJpdmF0ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RlbGVtZW50c19wcml2YXRlLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGVsZW1lbnRzX3ByaXZhdGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RlbGVtZW50c19wcml2YXRlLmxvIGB0ZXN0IC1mICdnc3RlbGVtZW50c19wcml2YXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVsZW1lbnRzX3ByaXZhdGUuYwotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNyYy5sbzogZ3N0ZmFrZXNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc3JjLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNyYy5sbyBgdGVzdCAtZiAnZ3N0ZmFrZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmYWtlc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc3JjLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZmFrZXNyYy5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNyYy5sbyBgdGVzdCAtZiAnZ3N0ZmFrZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmYWtlc3JjLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzaW5rLmxvOiBnc3RmYWtlc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNpbmsuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmYWtlc2luay5sbyBgdGVzdCAtZiAnZ3N0ZmFrZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmFrZXNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzaW5rLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZha2VzaW5rLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZha2VzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmFrZXNpbmsubG8gYHRlc3QgLWYgJ2dzdGZha2VzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZha2VzaW5rLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc3JjLmxvOiBnc3RmZHNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzcmMuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNyYy5sbyBgdGVzdCAtZiAnZ3N0ZmRzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmRzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc3JjLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZkc3JjLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzcmMubG8gYHRlc3QgLWYgJ2dzdGZkc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZkc3JjLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZkc2luay5sbzogZ3N0ZmRzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzaW5rLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzaW5rLmxvIGB0ZXN0IC1mICdnc3RmZHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmRzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNpbmsuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmRzaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZkc2luay5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmZHNpbmsubG8gYHRlc3QgLWYgJ2dzdGZkc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmZHNpbmsuYwotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNpbmsubG86IGdzdGZpbGVzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmaWxlc2luay5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzaW5rLmxvIGB0ZXN0IC1mICdnc3RmaWxlc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmaWxlc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNpbmsuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZmlsZXNpbmsuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmaWxlc2luay5sbyBgdGVzdCAtZiAnZ3N0ZmlsZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmlsZXNpbmsuYwotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5sbzogZ3N0ZmlsZXNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmaWxlc3JjLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5sbyBgdGVzdCAtZiAnZ3N0ZmlsZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmaWxlc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmaWxlc3JjLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZpbGVzcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZmlsZXNyYy5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmaWxlc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZmlsZXNyYy5sbyBgdGVzdCAtZiAnZ3N0ZmlsZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmaWxlc3JjLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGZ1bm5lbC5sbzogZ3N0ZnVubmVsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZnVubmVsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZnVubmVsLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZnVubmVsLmxvIGB0ZXN0IC1mICdnc3RmdW5uZWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZnVubmVsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmdW5uZWwuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0ZnVubmVsLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZ1bm5lbC5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmdW5uZWwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RmdW5uZWwubG8gYHRlc3QgLWYgJ2dzdGZ1bm5lbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmdW5uZWwuYwotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aWRlbnRpdHkubG86IGdzdGlkZW50aXR5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aWRlbnRpdHkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RpZGVudGl0eS5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlkZW50aXR5LmxvIGB0ZXN0IC1mICdnc3RpZGVudGl0eS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpZGVudGl0eS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aWRlbnRpdHkuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aWRlbnRpdHkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0aWRlbnRpdHkuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aWRlbnRpdHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RpZGVudGl0eS5sbyBgdGVzdCAtZiAnZ3N0aWRlbnRpdHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aWRlbnRpdHkuYwotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5sbzogZ3N0aW5wdXRzZWxlY3Rvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlucHV0c2VsZWN0b3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RpbnB1dHNlbGVjdG9yLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5sbyBgdGVzdCAtZiAnZ3N0aW5wdXRzZWxlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpbnB1dHNlbGVjdG9yLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RpbnB1dHNlbGVjdG9yLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdGlucHV0c2VsZWN0b3IuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0aW5wdXRzZWxlY3Rvci5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RpbnB1dHNlbGVjdG9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0aW5wdXRzZWxlY3Rvci5sbyBgdGVzdCAtZiAnZ3N0aW5wdXRzZWxlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpbnB1dHNlbGVjdG9yLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLmxvOiBnc3RvdXRwdXRzZWxlY3Rvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0b3V0cHV0c2VsZWN0b3IuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RvdXRwdXRzZWxlY3Rvci5sbyBgdGVzdCAtZiAnZ3N0b3V0cHV0c2VsZWN0b3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3V0cHV0c2VsZWN0b3IuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG91dHB1dHNlbGVjdG9yLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG91dHB1dHNlbGVjdG9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0b3V0cHV0c2VsZWN0b3IubG8gYHRlc3QgLWYgJ2dzdG91dHB1dHNlbGVjdG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG91dHB1dHNlbGVjdG9yLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG11bHRpcXVldWUubG86IGdzdG11bHRpcXVldWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RtdWx0aXF1ZXVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0bXVsdGlxdWV1ZS5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG11bHRpcXVldWUubG8gYHRlc3QgLWYgJ2dzdG11bHRpcXVldWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bXVsdGlxdWV1ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0bXVsdGlxdWV1ZS5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RtdWx0aXF1ZXVlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG11bHRpcXVldWUuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0bXVsdGlxdWV1ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdG11bHRpcXVldWUubG8gYHRlc3QgLWYgJ2dzdG11bHRpcXVldWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bXVsdGlxdWV1ZS5jCi0KLWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZS5sbzogZ3N0cXVldWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlLlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUubG8gYHRlc3QgLWYgJ2dzdHF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF1ZXVlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZS5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RxdWV1ZS5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlLmxvIGB0ZXN0IC1mICdnc3RxdWV1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdWV1ZS5jCi0KLWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RxdWV1ZTIubG86IGdzdHF1ZXVlMi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlMi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlMi5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlMi5sbyBgdGVzdCAtZiAnZ3N0cXVldWUyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF1ZXVlMi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUyLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHF1ZXVlMi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RxdWV1ZTIuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0cXVldWUyLmxvIGB0ZXN0IC1mICdnc3RxdWV1ZTIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cXVldWUyLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHNwYXJzZWZpbGUubG86IGdzdHNwYXJzZWZpbGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RzcGFyc2VmaWxlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0c3BhcnNlZmlsZS5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHNwYXJzZWZpbGUubG8gYHRlc3QgLWYgJ2dzdHNwYXJzZWZpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BhcnNlZmlsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0c3BhcnNlZmlsZS5UcG8gJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RzcGFyc2VmaWxlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHNwYXJzZWZpbGUuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0c3BhcnNlZmlsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHNwYXJzZWZpbGUubG8gYHRlc3QgLWYgJ2dzdHNwYXJzZWZpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BhcnNlZmlsZS5jCi0KLWxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0ZWUubG86IGdzdHRlZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5UcG8gLWMgLW8gbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5sbyBgdGVzdCAtZiAnZ3N0dGVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRlZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dGVlLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHRlZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R0ZWUuYycgb2JqZWN0PSdsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dGVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dGVlLmxvIGB0ZXN0IC1mICdnc3R0ZWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGVlLmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHR5cGVmaW5kZWxlbWVudC5sbzogZ3N0dHlwZWZpbmRlbGVtZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LmxvIGB0ZXN0IC1mICdnc3R0eXBlZmluZGVsZW1lbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHlwZWZpbmRlbGVtZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0eXBlZmluZGVsZW1lbnQuVHBvICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dHlwZWZpbmRlbGVtZW50LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHR5cGVmaW5kZWxlbWVudC5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0eXBlZmluZGVsZW1lbnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JlZWxlbWVudHNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R0eXBlZmluZGVsZW1lbnQubG8gYHRlc3QgLWYgJ2dzdHR5cGVmaW5kZWxlbWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R0eXBlZmluZGVsZW1lbnQuYwotCi1saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0c3RyZWFtaWRkZW11eC5sbzogZ3N0c3RyZWFtaWRkZW11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHN0cmVhbWlkZGVtdXgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RzdHJlYW1pZGRlbXV4LlRwbyAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0c3RyZWFtaWRkZW11eC5sbyBgdGVzdCAtZiAnZ3N0c3RyZWFtaWRkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdHJlYW1pZGRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RzdHJlYW1pZGRlbXV4LlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHN0cmVhbWlkZGVtdXguUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c3RyZWFtaWRkZW11eC5jJyBvYmplY3Q9J2xpYmdzdGNvcmVlbGVtZW50c19sYS1nc3RzdHJlYW1pZGRlbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0c3RyZWFtaWRkZW11eC5sbyBgdGVzdCAtZiAnZ3N0c3RyZWFtaWRkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdHJlYW1pZGRlbXV4LmMKLQotbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHZhbHZlLmxvOiBnc3R2YWx2ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHZhbHZlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUuVHBvIC1jIC1vIGxpYmdzdGNvcmVlbGVtZW50c19sYS1nc3R2YWx2ZS5sbyBgdGVzdCAtZiAnZ3N0dmFsdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmFsdmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHZhbHZlLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHZhbHZlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHZhbHZlLmMnIG9iamVjdD0nbGliZ3N0Y29yZWVsZW1lbnRzX2xhLWdzdHZhbHZlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmVlbGVtZW50c19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JlZWxlbWVudHNfbGEtZ3N0dmFsdmUubG8gYHRlc3QgLWYgJ2dzdHZhbHZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZhbHZlLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0lLmMuZ2NvdjogLmxpYnMvbGliZ3N0Y29yZWVsZW1lbnRzX2xhLSUuZ2NkYSAlLmMKLQkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0Ci0KLWdjb3Y6ICQobGliZ3N0Y29yZWVsZW1lbnRzX2xhX1NPVVJDRVM6PS5nY292KQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGI2Yjk5Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTc2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtY2Fwc2ZpbHRlcgotICoKLSAqIFRoZSBlbGVtZW50IGRvZXMgbm90IG1vZGlmeSBkYXRhIGFzIHN1Y2gsIGJ1dCBjYW4gZW5mb3JjZSBsaW1pdGF0aW9ucyBvbiB0aGUKLSAqIGRhdGEgZm9ybWF0LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgISBjYXBzZmlsdGVyIGNhcHM9dmlkZW8veC1yYXcsZm9ybWF0PUdSQVk4ICEgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luawotICogXXwgTGltaXRzIGFjY2VwdGFibGUgdmlkZW8gZnJvbSB2aWRlb3Rlc3RzcmMgdG8gYmUgZ3JheXNjYWxlLiBFcXVpdmFsZW50IHRvCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjICEgdmlkZW8veC1yYXcsZm9ybWF0PUdSQVk4ICEgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luawotICogXXwgd2hpY2ggaXMgYSBzaG9ydCBub3RhdGlvbiBmb3IgdGhlIGNhcHNmaWx0ZXIgZWxlbWVudC4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiLi4vLi4vZ3N0L2dzdC1pMThuLWxpYi5oIgotI2luY2x1ZGUgImdzdGNhcHNmaWx0ZXIuaCIKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfRklMVEVSX0NBUFMsCi0gIFBST1BfQ0FQU19DSEFOR0VfTU9ERQotfTsKLQotI2RlZmluZSBERUZBVUxUX0NBUFNfQ0hBTkdFX01PREUgKEdTVF9DQVBTX0ZJTFRFUl9DQVBTX0NIQU5HRV9NT0RFX0lNTUVESUFURSkKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2NhcHNmaWx0ZXJfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2NhcHNmaWx0ZXJfZGVidWcKLQotLyogVE9ETzogQWRkIGEgZHJvcC1idWZmZXJzIG1vZGUgKi8KLSNkZWZpbmUgR1NUX1RZUEVfQ0FQU19GSUxURVJfQ0FQU19DSEFOR0VfTU9ERSAoZ3N0X2NhcHNfZmlsdGVyX2NhcHNfY2hhbmdlX21vZGVfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2NhcHNfZmlsdGVyX2NhcHNfY2hhbmdlX21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZGF0YVtdID0gewotICAgIHtHU1RfQ0FQU19GSUxURVJfQ0FQU19DSEFOR0VfTU9ERV9JTU1FRElBVEUsCi0gICAgICAgICJPbmx5IGFjY2VwdCB0aGUgY3VycmVudCBmaWx0ZXIgY2FwcyIsICJpbW1lZGlhdGUifSwKLSAgICB7R1NUX0NBUFNfRklMVEVSX0NBUFNfQ0hBTkdFX01PREVfREVMQVlFRCwKLSAgICAgICAgIlRlbXBvcmFyaWx5IGFjY2VwdCBwcmV2aW91cyBmaWx0ZXIgY2FwcyIsICJkZWxheWVkIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghdHlwZSkgewotICAgIHR5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0Q2Fwc0ZpbHRlckNhcHNDaGFuZ2VNb2RlIiwgZGF0YSk7Ci0gIH0KLSAgcmV0dXJuIHR5cGU7Ci19Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfY2Fwc2ZpbHRlcl9kZWJ1ZywgImNhcHNmaWx0ZXIiLCAwLCBcCi0gICAgImNhcHNmaWx0ZXIgZWxlbWVudCIpOwotI2RlZmluZSBnc3RfY2Fwc2ZpbHRlcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0Q2Fwc0ZpbHRlciwgZ3N0X2NhcHNmaWx0ZXIsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNLAotICAgIF9kb19pbml0KTsKLQotCi1zdGF0aWMgdm9pZCBnc3RfY2Fwc2ZpbHRlcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfY2Fwc2ZpbHRlcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfY2Fwc2ZpbHRlcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2NhcHNmaWx0ZXJfYWNjZXB0X2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9jYXBzZmlsdGVyX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9jYXBzZmlsdGVyX3ByZXBhcmVfYnVmIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogaW5wdXQsIEdzdEJ1ZmZlciAqKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9jYXBzZmlsdGVyX3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfY2Fwc2ZpbHRlcl9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2NhcHNmaWx0ZXJfY2xhc3NfaW5pdCAoR3N0Q2Fwc0ZpbHRlckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfY2Fwc2ZpbHRlcl9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9jYXBzZmlsdGVyX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9jYXBzZmlsdGVyX2Rpc3Bvc2U7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GSUxURVJfQ0FQUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImNhcHMiLCBfKCJGaWx0ZXIgY2FwcyIpLAotICAgICAgICAgIF8oIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiAiCi0gICAgICAgICAgICAgICJTZXR0aW5nIHRoaXMgcHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgIgotICAgICAgICAgICAgICAib2JqZWN0LiIpLCBHU1RfVFlQRV9DQVBTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FQU19DSEFOR0VfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiY2Fwcy1jaGFuZ2UtbW9kZSIsIF8oIkNhcHMgQ2hhbmdlIE1vZGUiKSwKLSAgICAgICAgICBfKCJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIiksCi0gICAgICAgICAgR1NUX1RZUEVfQ0FQU19GSUxURVJfQ0FQU19DSEFOR0VfTU9ERSwgREVGQVVMVF9DQVBTX0NIQU5HRV9NT0RFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkNhcHNGaWx0ZXIiLAotICAgICAgIkdlbmVyaWMiLAotICAgICAgIlBhc3MgZGF0YSB3aXRob3V0IG1vZGlmaWNhdGlvbiwgbGltaXRpbmcgZm9ybWF0cyIsCi0gICAgICAiRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Iik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmt0ZW1wbGF0ZSk7Ci0KLSAgdHJhbnNfY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKGtsYXNzKTsKLSAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9jYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfY2Fwc2ZpbHRlcl90cmFuc2Zvcm1fY2Fwcyk7Ci0gIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1faXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2lwKTsKLSAgdHJhbnNfY2xhc3MtPmFjY2VwdF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jYXBzZmlsdGVyX2FjY2VwdF9jYXBzKTsKLSAgdHJhbnNfY2xhc3MtPnByZXBhcmVfb3V0cHV0X2J1ZmZlciA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NhcHNmaWx0ZXJfcHJlcGFyZV9idWYpOwotICB0cmFuc19jbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfY2Fwc2ZpbHRlcl9zaW5rX2V2ZW50KTsKLSAgdHJhbnNfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NhcHNmaWx0ZXJfc3RvcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc2ZpbHRlcl9pbml0IChHc3RDYXBzRmlsdGVyICogZmlsdGVyKQotewotICBHc3RCYXNlVHJhbnNmb3JtICp0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKTsKLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgKHRyYW5zLCBUUlVFKTsKLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wcmVmZXJfcGFzc3Rocm91Z2ggKHRyYW5zLCBGQUxTRSk7Ci0gIGZpbHRlci0+ZmlsdGVyX2NhcHMgPSBnc3RfY2Fwc19uZXdfYW55ICgpOwotICBmaWx0ZXItPmZpbHRlcl9jYXBzX3VzZWQgPSBGQUxTRTsKLSAgZmlsdGVyLT5nb3Rfc2lua19jYXBzID0gRkFMU0U7Ci0gIGZpbHRlci0+Y2Fwc19jaGFuZ2VfbW9kZSA9IERFRkFVTFRfQ0FQU19DSEFOR0VfTU9ERTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jYXBzZmlsdGVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RDYXBzRmlsdGVyICpjYXBzZmlsdGVyID0gR1NUX0NBUFNfRklMVEVSIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9GSUxURVJfQ0FQUzp7Ci0gICAgICBHc3RDYXBzICpuZXdfY2FwczsKLSAgICAgIEdzdENhcHMgKm9sZF9jYXBzOwotICAgICAgY29uc3QgR3N0Q2FwcyAqbmV3X2NhcHNfdmFsID0gZ3N0X3ZhbHVlX2dldF9jYXBzICh2YWx1ZSk7Ci0KLSAgICAgIGlmIChuZXdfY2Fwc192YWwgPT0gTlVMTCkgewotICAgICAgICBuZXdfY2FwcyA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBuZXdfY2FwcyA9IChHc3RDYXBzICopIG5ld19jYXBzX3ZhbDsKLSAgICAgICAgZ3N0X2NhcHNfcmVmIChuZXdfY2Fwcyk7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2Fwc2ZpbHRlcik7Ci0gICAgICBvbGRfY2FwcyA9IGNhcHNmaWx0ZXItPmZpbHRlcl9jYXBzOwotICAgICAgY2Fwc2ZpbHRlci0+ZmlsdGVyX2NhcHMgPSBuZXdfY2FwczsKLSAgICAgIGlmIChvbGRfY2FwcyAmJiBjYXBzZmlsdGVyLT5maWx0ZXJfY2Fwc191c2VkICYmCi0gICAgICAgICAgY2Fwc2ZpbHRlci0+Y2Fwc19jaGFuZ2VfbW9kZSA9PQotICAgICAgICAgIEdTVF9DQVBTX0ZJTFRFUl9DQVBTX0NIQU5HRV9NT0RFX0RFTEFZRUQpIHsKLSAgICAgICAgY2Fwc2ZpbHRlci0+cHJldmlvdXNfY2FwcyA9Ci0gICAgICAgICAgICBnX2xpc3RfcHJlcGVuZCAoY2Fwc2ZpbHRlci0+cHJldmlvdXNfY2FwcywgZ3N0X2NhcHNfcmVmIChvbGRfY2FwcykpOwotICAgICAgfSBlbHNlIGlmIChjYXBzZmlsdGVyLT5jYXBzX2NoYW5nZV9tb2RlICE9Ci0gICAgICAgICAgR1NUX0NBUFNfRklMVEVSX0NBUFNfQ0hBTkdFX01PREVfREVMQVlFRCkgewotICAgICAgICBnX2xpc3RfZnJlZV9mdWxsIChjYXBzZmlsdGVyLT5wcmV2aW91c19jYXBzLAotICAgICAgICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY2Fwc191bnJlZik7Ci0gICAgICAgIGNhcHNmaWx0ZXItPnByZXZpb3VzX2NhcHMgPSBOVUxMOwotICAgICAgfQotICAgICAgY2Fwc2ZpbHRlci0+ZmlsdGVyX2NhcHNfdXNlZCA9IEZBTFNFOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNhcHNmaWx0ZXIpOwotCi0gICAgICBnc3RfY2Fwc191bnJlZiAob2xkX2NhcHMpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChjYXBzZmlsdGVyLCAic2V0IG5ldyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBuZXdfY2Fwcyk7Ci0KLSAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rIChHU1RfQkFTRV9UUkFOU0ZPUk0gKG9iamVjdCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9DQVBTX0NIQU5HRV9NT0RFOnsKLSAgICAgIEdzdENhcHNGaWx0ZXJDYXBzQ2hhbmdlTW9kZSBvbGRfY2hhbmdlX21vZGU7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2Fwc2ZpbHRlcik7Ci0gICAgICBvbGRfY2hhbmdlX21vZGUgPSBjYXBzZmlsdGVyLT5jYXBzX2NoYW5nZV9tb2RlOwotICAgICAgY2Fwc2ZpbHRlci0+Y2Fwc19jaGFuZ2VfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLQotICAgICAgaWYgKGNhcHNmaWx0ZXItPmNhcHNfY2hhbmdlX21vZGUgIT0gb2xkX2NoYW5nZV9tb2RlKSB7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwgKGNhcHNmaWx0ZXItPnByZXZpb3VzX2NhcHMsCi0gICAgICAgICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9jYXBzX3VucmVmKTsKLSAgICAgICAgY2Fwc2ZpbHRlci0+cHJldmlvdXNfY2FwcyA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoY2Fwc2ZpbHRlcik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NhcHNmaWx0ZXJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdENhcHNGaWx0ZXIgKmNhcHNmaWx0ZXIgPSBHU1RfQ0FQU19GSUxURVIgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0ZJTFRFUl9DQVBTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChjYXBzZmlsdGVyKTsKLSAgICAgIGdzdF92YWx1ZV9zZXRfY2FwcyAodmFsdWUsIGNhcHNmaWx0ZXItPmZpbHRlcl9jYXBzKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjYXBzZmlsdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQVBTX0NIQU5HRV9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGNhcHNmaWx0ZXItPmNhcHNfY2hhbmdlX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NhcHNmaWx0ZXJfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0Q2Fwc0ZpbHRlciAqZmlsdGVyID0gR1NUX0NBUFNfRklMVEVSIChvYmplY3QpOwotCi0gIGdzdF9jYXBzX3JlcGxhY2UgKCZmaWx0ZXItPmZpbHRlcl9jYXBzLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoZmlsdGVyLT5wZW5kaW5nX2V2ZW50cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotICBmaWx0ZXItPnBlbmRpbmdfZXZlbnRzID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzRmlsdGVyICpjYXBzZmlsdGVyID0gR1NUX0NBUFNfRklMVEVSIChiYXNlKTsKLSAgR3N0Q2FwcyAqcmV0LCAqZmlsdGVyX2NhcHMsICp0bXA7Ci0gIGdib29sZWFuIHJldHJpZWQgPSBGQUxTRTsKLSAgR3N0Q2Fwc0ZpbHRlckNhcHNDaGFuZ2VNb2RlIGNhcHNfY2hhbmdlX21vZGU7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChjYXBzZmlsdGVyKTsKLSAgZmlsdGVyX2NhcHMgPSBnc3RfY2Fwc19yZWYgKGNhcHNmaWx0ZXItPmZpbHRlcl9jYXBzKTsKLSAgY2Fwc2ZpbHRlci0+ZmlsdGVyX2NhcHNfdXNlZCA9IFRSVUU7Ci0gIGNhcHNfY2hhbmdlX21vZGUgPSBjYXBzZmlsdGVyLT5jYXBzX2NoYW5nZV9tb2RlOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoY2Fwc2ZpbHRlcik7Ci0KLXJldHJ5OgotICBpZiAoZmlsdGVyKSB7Ci0gICAgdG1wID0KLSAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgZmlsdGVyX2NhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLSAgICBmaWx0ZXJfY2FwcyA9IHRtcDsKLSAgfQotCi0gIHJldCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXJfY2FwcywgY2FwcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChjYXBzZmlsdGVyLCAiaW5wdXQ6ICAgICAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGNhcHNmaWx0ZXIsICJmaWx0ZXI6ICAgICUiIEdTVF9QVFJfRk9STUFULCBmaWx0ZXIpOwotICBHU1RfREVCVUdfT0JKRUNUIChjYXBzZmlsdGVyLCAiY2FwcyBmaWx0ZXI6ICAgICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgZmlsdGVyX2NhcHMpOwotICBHU1RfREVCVUdfT0JKRUNUIChjYXBzZmlsdGVyLCAiaW50ZXJzZWN0OiAlIiBHU1RfUFRSX0ZPUk1BVCwgcmV0KTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKHJldCkKLSAgICAgICYmIGNhcHNfY2hhbmdlX21vZGUgPT0KLSAgICAgIEdTVF9DQVBTX0ZJTFRFUl9DQVBTX0NIQU5HRV9NT0RFX0RFTEFZRUQgJiYgY2Fwc2ZpbHRlci0+cHJldmlvdXNfY2FwcwotICAgICAgJiYgIXJldHJpZWQpIHsKLSAgICBHTGlzdCAqbDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNhcHNmaWx0ZXIsCi0gICAgICAgICJDdXJyZW50IGZpbHRlciBjYXBzIGFyZSBub3QgY29tcGF0aWJsZSwgcmV0cnkgd2l0aCBwcmV2aW91cyIpOwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2Fwc2ZpbHRlcik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmV0KTsKLSAgICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgICBmb3IgKGwgPSBjYXBzZmlsdGVyLT5wcmV2aW91c19jYXBzOyBsOyBsID0gbC0+bmV4dCkgewotICAgICAgZmlsdGVyX2NhcHMgPSBnc3RfY2Fwc19tZXJnZSAoZmlsdGVyX2NhcHMsIGdzdF9jYXBzX3JlZiAobC0+ZGF0YSkpOwotICAgIH0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoY2Fwc2ZpbHRlcik7Ci0gICAgcmV0cmllZCA9IFRSVUU7Ci0gICAgZ290byByZXRyeTsKLSAgfQotCi0gIGdzdF9jYXBzX3VucmVmIChmaWx0ZXJfY2Fwcyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY2Fwc2ZpbHRlcl9hY2NlcHRfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdENhcHNGaWx0ZXIgKmNhcHNmaWx0ZXIgPSBHU1RfQ0FQU19GSUxURVIgKGJhc2UpOwotICBHc3RDYXBzICpmaWx0ZXJfY2FwczsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY2Fwc2ZpbHRlcik7Ci0gIGZpbHRlcl9jYXBzID0gZ3N0X2NhcHNfcmVmIChjYXBzZmlsdGVyLT5maWx0ZXJfY2Fwcyk7Ci0gIGNhcHNmaWx0ZXItPmZpbHRlcl9jYXBzX3VzZWQgPSBUUlVFOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoY2Fwc2ZpbHRlcik7Ci0KLSAgcmV0ID0gZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoY2FwcywgZmlsdGVyX2NhcHMpOwotICBHU1RfREVCVUdfT0JKRUNUIChjYXBzZmlsdGVyLCAiY2FuIGludGVyc2VjdDogJWQiLCByZXQpOwotICBpZiAoIXJldAotICAgICAgJiYgY2Fwc2ZpbHRlci0+Y2Fwc19jaGFuZ2VfbW9kZSA9PQotICAgICAgR1NUX0NBUFNfRklMVEVSX0NBUFNfQ0hBTkdFX01PREVfREVMQVlFRCkgewotICAgIEdMaXN0ICpsOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChjYXBzZmlsdGVyKTsKLSAgICBmb3IgKGwgPSBjYXBzZmlsdGVyLT5wcmV2aW91c19jYXBzOyBsOyBsID0gbC0+bmV4dCkgewotICAgICAgcmV0ID0gZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoY2FwcywgbC0+ZGF0YSk7Ci0gICAgICBpZiAocmV0KQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGNhcHNmaWx0ZXIpOwotCi0gICAgLyogVGVsbCB1cHN0cmVhbSB0byByZWNvbmZpZ3VyZSwgaXQncyBzdGlsbAotICAgICAqIGxvb2tpbmcgYXQgb2xkIGNhcHMgKi8KLSAgICBpZiAocmV0KQotICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3NpbmsgKGJhc2UpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2NhcHNmaWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwgR3N0QnVmZmVyICogYnVmKQotewotICAvKiBObyBhY3R1YWwgd29yayBoZXJlLiBJdCdzIGFsbCBkb25lIGluIHRoZSBwcmVwYXJlIG91dHB1dCBidWZmZXIKLSAgICogZnVuYy4gKi8KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NhcHNmaWx0ZXJfcHVzaF9wZW5kaW5nX2V2ZW50cyAoR3N0Q2Fwc0ZpbHRlciAqIGZpbHRlciwgR0xpc3QgKiBldmVudHMpCi17Ci0gIEdMaXN0ICpsOwotCi0gIGZvciAobCA9IGdfbGlzdF9sYXN0IChldmVudHMpOyBsOyBsID0gbC0+cHJldikgewotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJGb3J3YXJkaW5nICVzIGV2ZW50IiwKLSAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAobC0+ZGF0YSkpOwotICAgIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QKLSAgICAgICAgKGZpbHRlciksIGwtPmRhdGEpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChldmVudHMpOwotfQotCi0vKiBPdXB1dCBidWZmZXIgcHJlcGFyYXRpb24gLi4uIGlmIHRoZSBidWZmZXIgaGFzIG5vIGNhcHMsIGFuZCBvdXIgYWxsb3dlZAotICogb3V0cHV0IGNhcHMgaXMgZml4ZWQsIHRoZW4gc2VuZCB0aGUgY2FwcyBkb3duc3RyZWFtLCBtYWtpbmcgc3VyZSBjYXBzIGFyZQotICogc2VudCBiZWZvcmUgc2VnbWVudCBldmVudC4KLSAqCi0gKiBUaGlzIGVuc3VyZXMgdGhhdCBjYXBzIGV2ZW50IGlzIHNlbnQgaWYgd2UgY2FuLCBzbyB0aGF0IHBpcGVsaW5lcyBsaWtlOgotICogICBnc3QtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249cmF3c2FtcGxlcy5yYXcgIQotICogICAgICAgYXVkaW8veC1yYXcsZm9ybWF0PVMxNkxFLHJhdGU9NDgwMDAsY2hhbm5lbHM9MiAhIGFsc2FzaW5rCi0gKiB3aWxsIHdvcmsuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfY2Fwc2ZpbHRlcl9wcmVwYXJlX2J1ZiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBpbnB1dCwKLSAgICBHc3RCdWZmZXIgKiogYnVmKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RDYXBzRmlsdGVyICpmaWx0ZXIgPSBHU1RfQ0FQU19GSUxURVIgKHRyYW5zKTsKLQotICAvKiBhbHdheXMgcmV0dXJuIHRoZSBpbnB1dCBhcyBvdXRwdXQgYnVmZmVyICovCi0gICpidWYgPSBpbnB1dDsKLQotICBpZiAoR1NUX1BBRF9NT0RFICh0cmFucy0+c3JjcGFkKSA9PSBHU1RfUEFEX01PREVfUFVTSAotICAgICAgJiYgIWZpbHRlci0+Z290X3NpbmtfY2FwcykgewotCi0gICAgLyogTm8gY2Fwcy4gU2VlIGlmIHRoZSBvdXRwdXQgcGFkIG9ubHkgc3VwcG9ydHMgZml4ZWQgY2FwcyAqLwotICAgIEdzdENhcHMgKm91dF9jYXBzOwotICAgIEdMaXN0ICpwZW5kaW5nX2V2ZW50cyA9IGZpbHRlci0+cGVuZGluZ19ldmVudHM7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJJbnB1dCBwYWQgZG9lcyBub3QgaGF2ZSBjYXBzIik7Ci0KLSAgICBmaWx0ZXItPnBlbmRpbmdfZXZlbnRzID0gTlVMTDsKLQotICAgIG91dF9jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICh0cmFucy0+c3JjcGFkKTsKLSAgICBpZiAob3V0X2NhcHMgPT0gTlVMTCkgewotICAgICAgb3V0X2NhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKHRyYW5zLT5zcmNwYWQpOwotICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG91dF9jYXBzICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLSAgICB9Ci0KLSAgICBvdXRfY2FwcyA9IGdzdF9jYXBzX3NpbXBsaWZ5IChvdXRfY2Fwcyk7Ci0KLSAgICBpZiAoZ3N0X2NhcHNfaXNfZml4ZWQgKG91dF9jYXBzKSAmJiAhZ3N0X2NhcHNfaXNfZW1wdHkgKG91dF9jYXBzKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJIYXZlIGZpeGVkIG91dHB1dCBjYXBzICUiCi0gICAgICAgICAgR1NUX1BUUl9GT1JNQVQgIiB0byBhcHBseSB0byBzcmNwYWQiLCBvdXRfY2Fwcyk7Ci0KLSAgICAgIGlmICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzICh0cmFucy0+c3JjcGFkKSkgewotICAgICAgICBpZiAoZ3N0X3BhZF9zZXRfY2FwcyAodHJhbnMtPnNyY3BhZCwgb3V0X2NhcHMpKSB7Ci0gICAgICAgICAgaWYgKHBlbmRpbmdfZXZlbnRzKSB7Ci0gICAgICAgICAgICBnc3RfY2Fwc2ZpbHRlcl9wdXNoX3BlbmRpbmdfZXZlbnRzIChmaWx0ZXIsIHBlbmRpbmdfZXZlbnRzKTsKLSAgICAgICAgICAgIHBlbmRpbmdfZXZlbnRzID0gTlVMTDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9jYXBzZmlsdGVyX3B1c2hfcGVuZGluZ19ldmVudHMgKGZpbHRlciwgcGVuZGluZ19ldmVudHMpOwotICAgICAgICBwZW5kaW5nX2V2ZW50cyA9IE5VTEw7Ci0gICAgICB9Ci0KLSAgICAgIGdfbGlzdF9mcmVlX2Z1bGwgKHBlbmRpbmdfZXZlbnRzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9ldmVudF91bnJlZik7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAob3V0X2NhcHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnY2hhciAqY2Fwc19zdHIgPSBnc3RfY2Fwc190b19zdHJpbmcgKG91dF9jYXBzKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJDYW5ub3QgY2hvb3NlIGNhcHMuIEhhdmUgdW5maXhlZCBvdXRwdXQgY2FwcyAlIgotICAgICAgICAgIEdTVF9QVFJfRk9STUFULCBvdXRfY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAob3V0X2NhcHMpOwotCi0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIFNUUkVBTSwgRk9STUFULAotICAgICAgICAgICgiRmlsdGVyIGNhcHMgZG8gbm90IGNvbXBsZXRlbHkgc3BlY2lmeSB0aGUgb3V0cHV0IGZvcm1hdCIpLAotICAgICAgICAgICgiT3V0cHV0IGNhcHMgYXJlIHVuZml4ZWQ6ICVzIiwgY2Fwc19zdHIpKTsKLQotICAgICAgZ19mcmVlIChjYXBzX3N0cik7Ci0gICAgICBnX2xpc3RfZnJlZV9mdWxsIChwZW5kaW5nX2V2ZW50cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotCi0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAoZmlsdGVyLT5wZW5kaW5nX2V2ZW50cykpIHsKLSAgICBHTGlzdCAqZXZlbnRzID0gZmlsdGVyLT5wZW5kaW5nX2V2ZW50czsKLQotICAgIGZpbHRlci0+cGVuZGluZ19ldmVudHMgPSBOVUxMOwotCi0gICAgLyogcHVzaCBwZW5kaW5nIGV2ZW50cyBiZWZvcmUgYSBidWZmZXIgKi8KLSAgICBnc3RfY2Fwc2ZpbHRlcl9wdXNoX3BlbmRpbmdfZXZlbnRzIChmaWx0ZXIsIGV2ZW50cyk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBRdWV1ZSB0aGUgc2VnbWVudCBldmVudCBpZiB0aGVyZSB3YXMgbm8gY2FwcyBldmVudCAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfY2Fwc2ZpbHRlcl9zaW5rX2V2ZW50IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdENhcHNGaWx0ZXIgKmZpbHRlciA9IEdTVF9DQVBTX0ZJTFRFUiAodHJhbnMpOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0ZMVVNIX1NUT1ApIHsKLSAgICBHTGlzdCAqbDsKLQotICAgIGZvciAobCA9IGZpbHRlci0+cGVuZGluZ19ldmVudHM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKGwtPmRhdGEpID09IEdTVF9FVkVOVF9TRUdNRU5UIHx8Ci0gICAgICAgICAgR1NUX0VWRU5UX1RZUEUgKGwtPmRhdGEpID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChsLT5kYXRhKTsKLSAgICAgICAgZmlsdGVyLT5wZW5kaW5nX2V2ZW50cyA9IGdfbGlzdF9kZWxldGVfbGluayAoZmlsdGVyLT5wZW5kaW5nX2V2ZW50cywgbCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICghR1NUX0VWRU5UX0lTX1NUSUNLWSAoZXZlbnQpCi0gICAgICB8fCBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpIDw9IEdTVF9FVkVOVF9DQVBTKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBJZiB3ZSBnZXQgRU9TIGJlZm9yZSBhbnkgYnVmZmVycywganVzdCBwdXNoIGFsbCBwZW5kaW5nIGV2ZW50cyAqLwotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRU9TKSB7Ci0gICAgR0xpc3QgKmw7Ci0KLSAgICBmb3IgKGwgPSBnX2xpc3RfbGFzdCAoZmlsdGVyLT5wZW5kaW5nX2V2ZW50cyk7IGw7IGwgPSBsLT5wcmV2KSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJGb3J3YXJkaW5nICVzIGV2ZW50IiwKLSAgICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChsLT5kYXRhKSk7Ci0gICAgICBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKHRyYW5zLCBsLT5kYXRhKTsKLSAgICB9Ci0gICAgZ19saXN0X2ZyZWUgKGZpbHRlci0+cGVuZGluZ19ldmVudHMpOwotICAgIGZpbHRlci0+cGVuZGluZ19ldmVudHMgPSBOVUxMOwotICB9IGVsc2UgaWYgKCFmaWx0ZXItPmdvdF9zaW5rX2NhcHMpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJHb3QgJXMgZXZlbnQgYmVmb3JlIGNhcHMsIHF1ZXVlaW5nIiwKLSAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICAgIGZpbHRlci0+cGVuZGluZ19ldmVudHMgPSBnX2xpc3RfcHJlcGVuZCAoZmlsdGVyLT5wZW5kaW5nX2V2ZW50cywgZXZlbnQpOwotCi0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotZG9uZToKLQotICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJGb3J3YXJkaW5nICVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgcmV0ID0KLSAgICAgIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAodHJhbnMsCi0gICAgICBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9DQVBTKSB7Ci0gICAgZmlsdGVyLT5nb3Rfc2lua19jYXBzID0gVFJVRTsKLSAgICBpZiAoZmlsdGVyLT5jYXBzX2NoYW5nZV9tb2RlID09IEdTVF9DQVBTX0ZJTFRFUl9DQVBTX0NIQU5HRV9NT0RFX0RFTEFZRUQpIHsKLSAgICAgIEdMaXN0ICpsOwotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0KLSAgICAgIC8qIFJlbW92ZSBhbGwgcHJldmlvdXMgY2FwcyB1cCB0byBvbmUgdGhhdCB3b3Jrcy4KLSAgICAgICAqIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IGtlZXAgc29tZSBsZWZ0b3ZlciBjYXBzIGlmIHRoZXJlCi0gICAgICAgKiBhcmUgbXVsdGlwbGUgY29tcGF0aWJsZSBjYXBzICovCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gICAgICBmb3IgKGwgPSBnX2xpc3RfbGFzdCAoZmlsdGVyLT5wcmV2aW91c19jYXBzKTsgbDsgbCA9IGwtPnByZXYpIHsKLSAgICAgICAgaWYgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGNhcHMsIGwtPmRhdGEpKSB7Ci0gICAgICAgICAgd2hpbGUgKGwtPm5leHQpIHsKLSAgICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChsLT5uZXh0LT5kYXRhKTsKLSAgICAgICAgICAgIGwgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGwsIGwtPm5leHQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFsICYmIGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGNhcHMsIGZpbHRlci0+ZmlsdGVyX2NhcHMpKSB7Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwgKGZpbHRlci0+cHJldmlvdXNfY2FwcywKLSAgICAgICAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2NhcHNfdW5yZWYpOwotICAgICAgICBmaWx0ZXItPnByZXZpb3VzX2NhcHMgPSBOVUxMOwotICAgICAgICBmaWx0ZXItPmZpbHRlcl9jYXBzX3VzZWQgPSBUUlVFOwotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci0gICAgfQotICB9Ci0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NhcHNmaWx0ZXJfc3RvcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RDYXBzRmlsdGVyICpmaWx0ZXIgPSBHU1RfQ0FQU19GSUxURVIgKHRyYW5zKTsKLQotICBnX2xpc3RfZnJlZV9mdWxsIChmaWx0ZXItPnBlbmRpbmdfZXZlbnRzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9ldmVudF91bnJlZik7Ci0gIGZpbHRlci0+cGVuZGluZ19ldmVudHMgPSBOVUxMOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoZmlsdGVyLT5wcmV2aW91c19jYXBzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9jYXBzX3VucmVmKTsKLSAgZmlsdGVyLT5wcmV2aW91c19jYXBzID0gTlVMTDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci0KLSAgZmlsdGVyLT5nb3Rfc2lua19jYXBzID0gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTU3YmM0Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdGlkZW50aXR5Lmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0NBUFNfRklMVEVSX0hfXwotI2RlZmluZSBfX0dTVF9DQVBTX0ZJTFRFUl9IX18KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0NBUFNfRklMVEVSIFwKLSAgKGdzdF9jYXBzZmlsdGVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9DQVBTX0ZJTFRFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0NBUFNfRklMVEVSLEdzdENhcHNGaWx0ZXIpKQotI2RlZmluZSBHU1RfQ0FQU19GSUxURVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQ0FQU19GSUxURVIsR3N0Q2Fwc0ZpbHRlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0NBUFNfRklMVEVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQ0FQU19GSUxURVIpKQotI2RlZmluZSBHU1RfSVNfQ0FQU19GSUxURVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQ0FQU19GSUxURVIpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0Q2Fwc0ZpbHRlciBHc3RDYXBzRmlsdGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHNGaWx0ZXJDbGFzcyBHc3RDYXBzRmlsdGVyQ2xhc3M7Ci0KLS8qKgotICogR3N0Q2Fwc0ZpbHRlckNhcHNDaGFuZ2VNb2RlOgotICogQEdTVF9DQVBTX0ZJTFRFUl9DQVBTX0NIQU5HRV9NT0RFX0lNTUVESUFURTogT25seSBhY2NlcHQgdGhlIGN1cnJlbnQgZmlsdGVyIGNhcHMKLSAqIEBHU1RfQ0FQU19GSUxURVJfQ0FQU19DSEFOR0VfTU9ERV9ERUxBWUVEOiBUZW1wb3JhcmlseSBhY2NlcHQgcHJldmlvdXMgZmlsdGVyIGNhcHMKLSAqCi0gKiBGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9DQVBTX0ZJTFRFUl9DQVBTX0NIQU5HRV9NT0RFX0lNTUVESUFURSwKLSAgR1NUX0NBUFNfRklMVEVSX0NBUFNfQ0hBTkdFX01PREVfREVMQVlFRAotfSBHc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGU7Ci0KLS8qKgotICogR3N0Q2Fwc0ZpbHRlcjoKLSAqCi0gKiBUaGUgb3BhcXVlICNHc3RDYXBzRmlsdGVyIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdENhcHNGaWx0ZXIgewotICBHc3RCYXNlVHJhbnNmb3JtIHRyYW5zOwotCi0gIEdzdENhcHMgKmZpbHRlcl9jYXBzOwotICBnYm9vbGVhbiBmaWx0ZXJfY2Fwc191c2VkOwotICBHc3RDYXBzRmlsdGVyQ2Fwc0NoYW5nZU1vZGUgY2Fwc19jaGFuZ2VfbW9kZTsKLSAgZ2Jvb2xlYW4gZ290X3NpbmtfY2FwczsKLQotICBHTGlzdCAqcGVuZGluZ19ldmVudHM7Ci0gIEdMaXN0ICpwcmV2aW91c19jYXBzOwotfTsKLQotc3RydWN0IF9Hc3RDYXBzRmlsdGVyQ2xhc3MgewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgdHJhbnNfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X2NhcHNmaWx0ZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQ0FQU19GSUxURVJfSF9fICovCi0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y29uY2F0LmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGNvbmNhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODhjYzljLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0Y29uY2F0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MzggKzAsMCBAQAotLyogR1N0cmVhbWVyIGNvbmNhdCBlbGVtZW50Ci0gKgotICogIENvcHlyaWdodCAoYykgMjAxNCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtY29uY2F0Ci0gKiBAc2VlX2Fsc286ICNHc3RGdW5uZWwKLSAqCi0gKiBDb25jYXRlbmF0ZXMgc3RyZWFtcyB0b2dldGhlciB0byBvbmUgY29udGlub3VzIHN0cmVhbS4KLSAqCi0gKiBBbGwgc3RyZWFtcyBidXQgdGhlIGN1cnJlbnQgb25lIGFyZSBibG9ja2VkIHVudGlsIHRoZSBjdXJyZW50IG9uZQotICogZmluaXNoZWQgd2l0aCAlR1NUX0VWRU5UX0VPUy4gVGhlbiB0aGUgbmV4dCBzdHJlYW0gaXMgZW5hYmxlZCwgd2hpbGUKLSAqIGtlZXBpbmcgdGhlIHJ1bm5pbmcgdGltZSBjb250aW5vdXMgZm9yICVHU1RfRk9STUFUX1RJTUUgc2VnbWVudHMgb3IKLSAqIGtlZXBpbmcgdGhlIHNlZ21lbnQgY29udGlub3VzIGZvciAlR1NUX0ZPUk1BVF9CWVRFUyBzZWdtZW50cy4KLSAqCi0gKiBTdHJlYW1zIGFyZSBzd2l0Y2hlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHNpbmtwYWRzIHdlcmUgcmVxdWVzdGVkLgotICoKLSAqIEJ5IGRlZmF1bHQsIHRoZSBzdHJlYW0gc2VnbWVudCdzIGJhc2UgdmFsdWVzIGFyZSBhZGp1c3RlZCB0byBlbnN1cmUKLSAqIHRoZSBzZWdtZW50IHRyYW5zaXRpb25zIGJldHdlZW4gc3RyZWFtcyBhcmUgY29udGludW91cy4gSW4gc29tZSBjYXNlcywKLSAqIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gdHVybiBvZmYgdGhlc2UgYWRqdXN0bWVudHMgKGZvciBleGFtcGxlLCBiZWNhdXNlCi0gKiBhbm90aGVyIGRvd25zdHJlYW0gZWxlbWVudCBsaWtlIGEgc3RyZWFtc3luY2hyb25pemVyIGFkanVzdHMgdGhlIGJhc2UKLSAqIHZhbHVlcyBvbiBpdHMgb3duKS4gVGhlIGFkanVzdC1iYXNlIHByb3BlcnR5IGNhbiBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGNvbmNhdCBuYW1lPWMgISB4dmltYWdlc2luayAgdmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMCAhIGMuICAgdmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMCBwYXR0ZXJuPWJhbGwgISBjLgotICogXXwgUGxheXMgdHdvIHZpZGVvIHN0cmVhbXMgb25lIGFmdGVyIGFub3RoZXIuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGNvbmNhdC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfY29uY2F0X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9jb25jYXRfZGVidWcKLQotR19HTlVDX0lOVEVSTkFMIEdUeXBlIGdzdF9jb25jYXRfcGFkX2dldF90eXBlICh2b2lkKTsKLQotI2RlZmluZSBHU1RfVFlQRV9DT05DQVRfUEFEIChnc3RfY29uY2F0X3BhZF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQ09OQ0FUX1BBRChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0NPTkNBVF9QQUQsIEdzdENvbmNhdFBhZCkpCi0jZGVmaW5lIEdTVF9DT05DQVRfUEFEX0NBU1Qob2JqKSAoKEdzdENvbmNhdFBhZCAqKShvYmopKQotI2RlZmluZSBHU1RfQ09OQ0FUX1BBRF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9DT05DQVRfUEFELCBHc3RDb25jYXRQYWRDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19DT05DQVRfUEFEKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfQ09OQ0FUX1BBRCkpCi0jZGVmaW5lIEdTVF9JU19DT05DQVRfUEFEX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0NPTkNBVF9QQUQpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0Q29uY2F0UGFkIEdzdENvbmNhdFBhZDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDb25jYXRQYWRDbGFzcyBHc3RDb25jYXRQYWRDbGFzczsKLQotc3RydWN0IF9Hc3RDb25jYXRQYWQKLXsKLSAgR3N0UGFkIHBhcmVudDsKLQotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgLyogUHJvdGVjdGVkIGJ5IHRoZSBjb25jYXQgbG9jayAqLwotICBnYm9vbGVhbiBmbHVzaGluZzsKLX07Ci0KLXN0cnVjdCBfR3N0Q29uY2F0UGFkQ2xhc3MKLXsKLSAgR3N0UGFkQ2xhc3MgcGFyZW50OwotfTsKLQotR19ERUZJTkVfVFlQRSAoR3N0Q29uY2F0UGFkLCBnc3RfY29uY2F0X3BhZCwgR1NUX1RZUEVfUEFEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9jb25jYXRfcGFkX2NsYXNzX2luaXQgKEdzdENvbmNhdFBhZENsYXNzICoga2xhc3MpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY29uY2F0X3BhZF9pbml0IChHc3RDb25jYXRQYWQgKiBzZWxmKQotewotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VsZi0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICBzZWxmLT5mbHVzaGluZyA9IEZBTFNFOwotfQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2lua18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQUNUSVZFX1BBRCwKLSAgUFJPUF9BREpVU1RfQkFTRQotfTsKLQotI2RlZmluZSBERUZBVUxUX0FESlVTVF9CQVNFIFRSVUUKLQotI2RlZmluZSBfZG9faW5pdCBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfY29uY2F0X2RlYnVnLCAiY29uY2F0IiwgMCwgImNvbmNhdCBlbGVtZW50Iik7Ci0jZGVmaW5lIGdzdF9jb25jYXRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdENvbmNhdCwgZ3N0X2NvbmNhdCwgR1NUX1RZUEVfRUxFTUVOVCwgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZCBnc3RfY29uY2F0X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X2NvbmNhdF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfY29uY2F0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9jb25jYXRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2NvbmNhdF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIEdzdFBhZCAqZ3N0X2NvbmNhdF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X2NvbmNhdF9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9jb25jYXRfc2lua19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfY29uY2F0X3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9jb25jYXRfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfY29uY2F0X3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2NvbmNhdF9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2NvbmNhdF9zd2l0Y2hfcGFkIChHc3RDb25jYXQgKiBzZWxmKTsKLQotc3RhdGljIHZvaWQgZ3N0X2NvbmNhdF9ub3RpZnlfYWN0aXZlX3BhZCAoR3N0Q29uY2F0ICogc2VsZik7Ci0KLXN0YXRpYyBHUGFyYW1TcGVjICpwc3BlY19hY3RpdmVfcGFkID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLWdzdF9jb25jYXRfY2xhc3NfaW5pdCAoR3N0Q29uY2F0Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb25jYXRfZGlzcG9zZSk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb25jYXRfZmluYWxpemUpOwotCi0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9jb25jYXRfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfY29uY2F0X3NldF9wcm9wZXJ0eTsKLQotICBwc3BlY19hY3RpdmVfcGFkID0gZ19wYXJhbV9zcGVjX29iamVjdCAoImFjdGl2ZS1wYWQiLCAiQWN0aXZlIHBhZCIsCi0gICAgICAiQ3VycmVudGx5IGFjdGl2ZSBzcmMgcGFkIiwgR1NUX1RZUEVfUEFELCBHX1BBUkFNX1JFQURBQkxFIHwKLSAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FDVElWRV9QQUQsCi0gICAgICBwc3BlY19hY3RpdmVfcGFkKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BREpVU1RfQkFTRSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYWRqdXN0LWJhc2UiLCAiQWRqdXN0IHNlZ21lbnQgYmFzZSIsCi0gICAgICAgICAgIkFkanVzdCB0aGUgYmFzZSB2YWx1ZSBvZiBzZWdtZW50cyB0byBlbnN1cmUgdGhleSBhcmUgYWRqYWNlbnQiLAotICAgICAgICAgIERFRkFVTFRfQURKVVNUX0JBU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiQ29uY2F0IiwgIkdlbmVyaWMiLCAiQ29uY2F0ZW5hdGUgbXVsdGlwbGUgc3RyZWFtcyIsCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfY29uY2F0X3JlcXVlc3RfbmV3X3BhZCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlbGVhc2VfcGFkID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb25jYXRfcmVsZWFzZV9wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NvbmNhdF9jaGFuZ2Vfc3RhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbmNhdF9pbml0IChHc3RDb25jYXQgKiBzZWxmKQotewotICBnX211dGV4X2luaXQgKCZzZWxmLT5sb2NrKTsKLSAgZ19jb25kX2luaXQgKCZzZWxmLT5jb25kKTsKLQotICBzZWxmLT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY190ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2VsZi0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb25jYXRfc3JjX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzZWxmLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NvbmNhdF9zcmNfcXVlcnkpKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoc2VsZi0+c3JjcGFkKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnNyY3BhZCk7Ci0KLSAgc2VsZi0+YWRqdXN0X2Jhc2UgPSBERUZBVUxUX0FESlVTVF9CQVNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbmNhdF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RDb25jYXQgKnNlbGYgPSBHU1RfQ09OQ0FUIChvYmplY3QpOwotICBHTGlzdCAqaXRlbTsKLQotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopICYgc2VsZi0+Y3VycmVudF9zaW5rcGFkLCBOVUxMKTsKLQotcmVzdGFydDoKLSAgZm9yIChpdGVtID0gR1NUX0VMRU1FTlRfUEFEUyAob2JqZWN0KTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0IChpdGVtKSkgewotICAgIEdzdFBhZCAqcGFkID0gR1NUX1BBRCAoaXRlbS0+ZGF0YSk7Ci0KLSAgICBpZiAoR1NUX1BBRF9JU19TSU5LIChwYWQpKSB7Ci0gICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChHU1RfRUxFTUVOVCAob2JqZWN0KSwgcGFkKTsKLSAgICAgIGdvdG8gcmVzdGFydDsKLSAgICB9Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jb25jYXRfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdENvbmNhdCAqc2VsZiA9IEdTVF9DT05DQVQgKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJnNlbGYtPmxvY2spOwotICBnX2NvbmRfY2xlYXIgKCZzZWxmLT5jb25kKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY29uY2F0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RDb25jYXQgKnNlbGYgPSBHU1RfQ09OQ0FUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9BQ1RJVkVfUEFEOnsKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgc2VsZi0+Y3VycmVudF9zaW5rcGFkKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0FESlVTVF9CQVNFOnsKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNlbGYtPmFkanVzdF9iYXNlKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbmNhdF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0Q29uY2F0ICpzZWxmID0gR1NUX0NPTkNBVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQURKVVNUX0JBU0U6ewotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBzZWxmLT5hZGp1c3RfYmFzZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9jb25jYXRfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwKLSAgICBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDb25jYXQgKnNlbGYgPSBHU1RfQ09OQ0FUIChlbGVtZW50KTsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBnY2hhciAqcGFkX25hbWU7Ci0gIGdib29sZWFuIGRvX25vdGlmeSA9IEZBTFNFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJyZXF1ZXN0aW5nIHBhZCIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICBwYWRfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNpbmtfJXUiLCBzZWxmLT5wYWRfY291bnQpOwotICBzZWxmLT5wYWRfY291bnQrKzsKLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBzaW5rcGFkID0gR1NUX1BBRF9DQVNUIChnX29iamVjdF9uZXcgKEdTVF9UWVBFX0NPTkNBVF9QQUQsCi0gICAgICAgICAgIm5hbWUiLCBwYWRfbmFtZSwgImRpcmVjdGlvbiIsIHRlbXBsLT5kaXJlY3Rpb24sICJ0ZW1wbGF0ZSIsIHRlbXBsLAotICAgICAgICAgIE5VTEwpKTsKLSAgZ19mcmVlIChwYWRfbmFtZSk7Ci0KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NvbmNhdF9zaW5rX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb25jYXRfc2lua19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfY29uY2F0X3NpbmtfcXVlcnkpKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2lua3BhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0NBUFMpOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzaW5rcGFkLCBHU1RfUEFEX0ZMQUdfUFJPWFlfQUxMT0NBVElPTik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkLCBUUlVFKTsKLQotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgc2VsZi0+c2lua3BhZHMgPSBnX2xpc3RfcHJlcGVuZCAoc2VsZi0+c2lua3BhZHMsIGdzdF9vYmplY3RfcmVmIChzaW5rcGFkKSk7Ci0gIGlmICghc2VsZi0+Y3VycmVudF9zaW5rcGFkKSB7Ci0gICAgZG9fbm90aWZ5ID0gVFJVRTsKLSAgICBzZWxmLT5jdXJyZW50X3NpbmtwYWQgPSBnc3Rfb2JqZWN0X3JlZiAoc2lua3BhZCk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChlbGVtZW50LCBzaW5rcGFkKTsKLQotICBpZiAoZG9fbm90aWZ5KQotICAgIGdzdF9jb25jYXRfbm90aWZ5X2FjdGl2ZV9wYWQgKHNlbGYpOwotCi0gIHJldHVybiBzaW5rcGFkOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbmNhdF9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0Q29uY2F0ICpzZWxmID0gR1NUX0NPTkNBVCAoZWxlbWVudCk7Ci0gIEdzdENvbmNhdFBhZCAqc3BhZCA9IEdTVF9DT05DQVRfUEFEX0NBU1QgKHBhZCk7Ci0gIEdMaXN0ICpsOwotICBnYm9vbGVhbiBjdXJyZW50X3BhZF9yZW1vdmVkID0gRkFMU0U7Ci0gIGdib29sZWFuIGVvcyA9IEZBTFNFOwotICBnYm9vbGVhbiBkb19ub3RpZnkgPSBGQUxTRTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAicmVsZWFzaW5nIHBhZCIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICBzcGFkLT5mbHVzaGluZyA9IFRSVUU7Ci0gIGdfY29uZF9icm9hZGNhc3QgKCZzZWxmLT5jb25kKTsKLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOwotCi0gIC8qIE5vdyB0aGUgcGFkIGlzIGRlZmluaXRlbHkgbm90IHJ1bm5pbmcgYW55bW9yZSAqLwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICBpZiAoc2VsZi0+Y3VycmVudF9zaW5rcGFkID09IEdTVF9QQURfQ0FTVCAoc3BhZCkpIHsKLSAgICBlb3MgPSAhZ3N0X2NvbmNhdF9zd2l0Y2hfcGFkIChzZWxmKTsKLSAgICBjdXJyZW50X3BhZF9yZW1vdmVkID0gVFJVRTsKLSAgICBkb19ub3RpZnkgPSBUUlVFOwotICB9Ci0KLSAgZm9yIChsID0gc2VsZi0+c2lua3BhZHM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgaWYgKChncG9pbnRlcikgc3BhZCA9PSBsLT5kYXRhKSB7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcGFkKTsKLSAgICAgIHNlbGYtPnNpbmtwYWRzID0gZ19saXN0X2RlbGV0ZV9saW5rIChzZWxmLT5zaW5rcGFkcywgbCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChzZWxmKSwgcGFkKTsKLQotICBpZiAoZG9fbm90aWZ5KQotICAgIGdzdF9jb25jYXRfbm90aWZ5X2FjdGl2ZV9wYWQgKHNlbGYpOwotCi0gIGlmIChHU1RfU1RBVEUgKHNlbGYpID4gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgaWYgKGN1cnJlbnRfcGFkX3JlbW92ZWQgJiYgIWVvcykKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2VsZiksCi0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQgKEdTVF9PQkpFQ1RfQ0FTVCAoc2VsZikpKTsKLQotICAgIC8qIEZJWE1FOiBTZW5kaW5nIEVPUyBmcm9tIGFwcGxpY2F0aW9uIHRocmVhZCAqLwotICAgIGlmIChlb3MpCi0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICB9Ci19Ci0KLS8qIFJldHVybnMgRkFMU0UgaWYgZmx1c2hpbmcKLSAqIE11c3QgYmUgY2FsbGVkIGZyb20gdGhlIHBhZCdzIHN0cmVhbWluZyB0aHJlYWQKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfY29uY2F0X3BhZF93YWl0IChHc3RDb25jYXRQYWQgKiBzcGFkLCBHc3RDb25jYXQgKiBzZWxmKQotewotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgaWYgKHNwYWQtPmZsdXNoaW5nKSB7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcGFkLCAiRmx1c2hpbmciKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICB3aGlsZSAoc3BhZCAhPSBHU1RfQ09OQ0FUX1BBRF9DQVNUIChzZWxmLT5jdXJyZW50X3NpbmtwYWQpKSB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVCAoc3BhZCwgIk5vdCB0aGUgY3VycmVudCBzaW5rcGFkIC0gd2FpdGluZyIpOwotICAgIGdfY29uZF93YWl0ICgmc2VsZi0+Y29uZCwgJnNlbGYtPmxvY2spOwotICAgIGlmIChzcGFkLT5mbHVzaGluZykgewotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNwYWQsICJGbHVzaGluZyIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotICAvKiBUaGlzIHBhZCBjYW4gb25seSBiZWNvbWUgbm90IHRoZSBjdXJyZW50IHNpbmtwYWQgZnJvbQotICAgKiBhKSBUaGlzIHN0cmVhbWluZyB0aHJlYWQgKHdlIGhvbGQgdGhlIHN0cmVhbSBsb2NrKQotICAgKiBiKSBSZWxlYXNpbmcgdGhlIHBhZCAodGFrZXMgdGhlIHN0cmVhbSBsb2NrLCBzZWUgYWJvdmUpCi0gICAqCi0gICAqIFVubG9ja2luZyBoZXJlIGlzIHRodXMgc2FmZSBhbmQgd2UgY2FuIHNhZmVseSBwdXNoCi0gICAqIHNlcmlhbGl6ZWQgZGF0YSB0byBvdXIgc3JjcGFkCi0gICAqLwotICBHU1RfREVCVUdfT0JKRUNUIChzcGFkLCAiTm93IHRoZSBjdXJyZW50IHNpbmtwYWQiKTsKLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9jb25jYXRfc2lua19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdENvbmNhdCAqc2VsZiA9IEdTVF9DT05DQVQgKHBhcmVudCk7Ci0gIEdzdENvbmNhdFBhZCAqc3BhZCA9IEdTVF9DT05DQVRfUEFEIChwYWQpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJyZWNlaXZlZCBidWZmZXIgJXAiLCBidWZmZXIpOwotCi0gIGlmICghZ3N0X2NvbmNhdF9wYWRfd2FpdCAoc3BhZCwgc2VsZikpCi0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotCi0gIGlmIChzZWxmLT5sYXN0X3N0b3AgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBzZWxmLT5sYXN0X3N0b3AgPSBzcGFkLT5zZWdtZW50LnN0YXJ0OwotCi0gIGlmIChzZWxmLT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWUgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKTsKLSAgICBHc3RDbG9ja1RpbWUgZW5kX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgaWYgKHN0YXJ0X3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgIGVuZF90aW1lID0gc3RhcnRfdGltZTsKLSAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmZmVyKSkKLSAgICAgIGVuZF90aW1lICs9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7Ci0KLSAgICBpZiAoZW5kX3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJiBlbmRfdGltZSA+IHNlbGYtPmxhc3Rfc3RvcCkKLSAgICAgIHNlbGYtPmxhc3Rfc3RvcCA9IGVuZF90aW1lOwotICB9IGVsc2UgewotICAgIHNlbGYtPmxhc3Rfc3RvcCArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotICB9Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChzZWxmLT5zcmNwYWQsIGJ1ZmZlcik7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImhhbmRsZWQgYnVmZmVyICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIFJldHVybnMgRkFMU0UgaWYgbm8gZnVydGhlciBwYWQsIG11c3QgYmUgY2FsbGVkIHdpdGggY29uY2F0IGxvY2sgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NvbmNhdF9zd2l0Y2hfcGFkIChHc3RDb25jYXQgKiBzZWxmKQotewotICBHTGlzdCAqbDsKLSAgZ2Jvb2xlYW4gbmV4dDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBnaW50NjQgbGFzdF9zdG9wOwotCi0gIHNlZ21lbnQgPSBHU1RfQ09OQ0FUX1BBRCAoc2VsZi0+Y3VycmVudF9zaW5rcGFkKS0+c2VnbWVudDsKLQotICBsYXN0X3N0b3AgPSBzZWxmLT5sYXN0X3N0b3A7Ci0gIGlmIChsYXN0X3N0b3AgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBsYXN0X3N0b3AgPSBzZWdtZW50LnN0b3A7Ci0gIGlmIChsYXN0X3N0b3AgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBsYXN0X3N0b3AgPSBzZWdtZW50LnN0YXJ0OwotICBnX2Fzc2VydCAobGFzdF9zdG9wICE9IEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGlmIChsYXN0X3N0b3AgPiBzZWdtZW50LnN0b3ApCi0gICAgbGFzdF9zdG9wID0gc2VnbWVudC5zdG9wOwotCi0gIGlmIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCi0gICAgbGFzdF9zdG9wID0KLSAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2VnbWVudCwgc2VnbWVudC5mb3JtYXQsIGxhc3Rfc3RvcCk7Ci0gIGVsc2UKLSAgICBsYXN0X3N0b3AgKz0gc2VnbWVudC5zdGFydDsKLQotICBzZWxmLT5jdXJyZW50X3N0YXJ0X29mZnNldCArPSBsYXN0X3N0b3A7Ci0KLSAgZm9yIChsID0gc2VsZi0+c2lua3BhZHM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgaWYgKChncG9pbnRlcikgc2VsZi0+Y3VycmVudF9zaW5rcGFkID09IGwtPmRhdGEpIHsKLSAgICAgIGwgPSBsLT5wcmV2OwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgICAiU3dpdGNoaW5nIGZyb20gcGFkICUiIEdTVF9QVFJfRk9STUFUICIgdG8gJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgc2VsZi0+Y3VycmVudF9zaW5rcGFkLCBsID8gbC0+ZGF0YSA6IE5VTEwpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoc2VsZi0+Y3VycmVudF9zaW5rcGFkKTsKLSAgICAgIHNlbGYtPmN1cnJlbnRfc2lua3BhZCA9IGwgPyBnc3Rfb2JqZWN0X3JlZiAobC0+ZGF0YSkgOiBOVUxMOwotICAgICAgZ19jb25kX2Jyb2FkY2FzdCAoJnNlbGYtPmNvbmQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgbmV4dCA9IHNlbGYtPmN1cnJlbnRfc2lua3BhZCAhPSBOVUxMOwotCi0gIHNlbGYtPmxhc3Rfc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgcmV0dXJuIG5leHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY29uY2F0X25vdGlmeV9hY3RpdmVfcGFkIChHc3RDb25jYXQgKiBzZWxmKQotewotICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopIHNlbGYsIHBzcGVjX2FjdGl2ZV9wYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb25jYXRfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdENvbmNhdCAqc2VsZiA9IEdTVF9DT05DQVQgKHBhcmVudCk7Ci0gIEdzdENvbmNhdFBhZCAqc3BhZCA9IEdTVF9DT05DQVRfUEFEX0NBU1QgKHBhZCk7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIGV2ZW50ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOnsKLSAgICAgIGlmICghZ3N0X2NvbmNhdF9wYWRfd2FpdCAoc3BhZCwgc2VsZikpIHsKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6ewotICAgICAgZ2Jvb2xlYW4gYWRqdXN0X2Jhc2U7Ci0KLSAgICAgIC8qIERyb3Agc2VnbWVudCBldmVudCwgd2UgY3JlYXRlIG91ciBvd24gb25lICovCi0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNwYWQtPnNlZ21lbnQpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgYWRqdXN0X2Jhc2UgPSBzZWxmLT5hZGp1c3RfYmFzZTsKLSAgICAgIGlmIChzZWxmLT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpIHsKLSAgICAgICAgaWYgKHNwYWQtPnNlZ21lbnQuZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRQotICAgICAgICAgICAgJiYgc3BhZC0+c2VnbWVudC5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUykgewotICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNlbGYsIENPUkUsIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAgICAgICAoIkNhbiBvbmx5IG9wZXJhdGUgaW4gVElNRSBvciBCWVRFUyBmb3JtYXQiKSk7Ci0gICAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc2VsZi0+Zm9ybWF0ID0gc3BhZC0+c2VnbWVudC5mb3JtYXQ7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJPcGVyYXRpbmcgaW4gJXMgZm9ybWF0IiwKLSAgICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNlbGYtPmZvcm1hdCkpOwotICAgICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgfSBlbHNlIGlmIChzZWxmLT5mb3JtYXQgIT0gc3BhZC0+c2VnbWVudC5mb3JtYXQpIHsKLSAgICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNlbGYsIENPUkUsIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAgICAgKCJPcGVyYXRpbmcgaW4gJXMgZm9ybWF0IGJ1dCBuZXcgcGFkIGhhcyAlcyIsCi0gICAgICAgICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoc2VsZi0+Zm9ybWF0KSwKLSAgICAgICAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChzcGFkLT5zZWdtZW50LmZvcm1hdCkpKTsKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgfQotCi0gICAgICBpZiAoIWdzdF9jb25jYXRfcGFkX3dhaXQgKHNwYWQsIHNlbGYpKSB7Ci0gICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR3N0U2VnbWVudCBzZWdtZW50ID0gc3BhZC0+c2VnbWVudDsKLQotICAgICAgICBpZiAoYWRqdXN0X2Jhc2UpIHsKLSAgICAgICAgICAvKiBXZSBrbm93IG5vIGR1cmF0aW9uICovCi0gICAgICAgICAgc2VnbWVudC5kdXJhdGlvbiA9IC0xOwotCi0gICAgICAgICAgLyogVXBkYXRlIHNlZ21lbnQgdmFsdWVzIHRvIGJlIGNvbnRpbm91cyB3aXRoIGxhc3Qgc3RyZWFtICovCi0gICAgICAgICAgaWYgKHNlbGYtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgICAgIHNlZ21lbnQuYmFzZSArPSBzZWxmLT5jdXJyZW50X3N0YXJ0X29mZnNldDsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogU2hpZnQgc3RhcnQvc3RvcCBieXRlIHBvc2l0aW9uICovCi0gICAgICAgICAgICBzZWdtZW50LnN0YXJ0ICs9IHNlbGYtPmN1cnJlbnRfc3RhcnRfb2Zmc2V0OwotICAgICAgICAgICAgaWYgKHNlZ21lbnQuc3RvcCAhPSAtMSkKLSAgICAgICAgICAgICAgc2VnbWVudC5zdG9wICs9IHNlbGYtPmN1cnJlbnRfc3RhcnRfb2Zmc2V0OwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOnsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gICAgICBpZiAoIWdzdF9jb25jYXRfcGFkX3dhaXQgKHNwYWQsIHNlbGYpKSB7Ci0gICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2Jvb2xlYW4gbmV4dDsKLQotICAgICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgICAgbmV4dCA9IGdzdF9jb25jYXRfc3dpdGNoX3BhZCAoc2VsZik7Ci0gICAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgIHJldCA9IFRSVUU7Ci0KLSAgICAgICAgZ3N0X2NvbmNhdF9ub3RpZnlfYWN0aXZlX3BhZCAoc2VsZik7Ci0KLSAgICAgICAgaWYgKCFuZXh0KSB7Ci0gICAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHNlbGYpLAotICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZCAoR1NUX09CSkVDVF9DQVNUIChzZWxmKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6ewotICAgICAgZ2Jvb2xlYW4gZm9yd2FyZDsKLQotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBzcGFkLT5mbHVzaGluZyA9IFRSVUU7Ci0gICAgICBnX2NvbmRfYnJvYWRjYXN0ICgmc2VsZi0+Y29uZCk7Ci0gICAgICBmb3J3YXJkID0gKHNlbGYtPmN1cnJlbnRfc2lua3BhZCA9PSBHU1RfUEFEX0NBU1QgKHNwYWQpKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6ewotICAgICAgZ2Jvb2xlYW4gZm9yd2FyZDsKLQotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNwYWQtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIHNwYWQtPmZsdXNoaW5nID0gRkFMU0U7Ci0KLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgZm9yd2FyZCA9IChzZWxmLT5jdXJyZW50X3NpbmtwYWQgPT0gR1NUX1BBRF9DQVNUIChzcGFkKSk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotCi0gICAgICBpZiAoZm9yd2FyZCkgewotICAgICAgICBnYm9vbGVhbiByZXNldF90aW1lOwotCi0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wIChldmVudCwgJnJlc2V0X3RpbWUpOwotICAgICAgICBpZiAocmVzZXRfdGltZSkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICAgICAgICJyZXNldHRpbmcgc3RhcnQgb2Zmc2V0IHRvIDAgYWZ0ZXIgZmx1c2hpbmcgd2l0aCByZXNldF90aW1lID0gVFJVRSIpOwotICAgICAgICAgIHNlbGYtPmN1cnJlbnRfc3RhcnRfb2Zmc2V0ID0gMDsKLSAgICAgICAgfQotICAgICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OnsKLSAgICAgIC8qIFdhaXQgZm9yIG90aGVyIHNlcmlhbGl6ZWQgZXZlbnRzIGJlZm9yZSBmb3J3YXJkaW5nICovCi0gICAgICBpZiAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSAmJiAhZ3N0X2NvbmNhdF9wYWRfd2FpdCAoc3BhZCwgc2VsZikpIHsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY29uY2F0X3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RDb25jYXQgKnNlbGYgPSBHU1RfQ09OQ0FUIChwYXJlbnQpOwotICBHc3RDb25jYXRQYWQgKnNwYWQgPSBHU1RfQ09OQ0FUX1BBRF9DQVNUIChwYWQpOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJyZWNlaXZlZCBxdWVyeSAlIiBHU1RfUFRSX0ZPUk1BVCwgcXVlcnkpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBXYWl0IGZvciBvdGhlciBzZXJpYWxpemVkIHF1ZXJpZXMgYmVmb3JlIGZvcndhcmRpbmcgKi8KLSAgICAgIGlmIChHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCAocXVlcnkpICYmICFnc3RfY29uY2F0X3BhZF93YWl0IChzcGFkLCBzZWxmKSkgewotICAgICAgICByZXQgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY29uY2F0X3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdENvbmNhdCAqc2VsZiA9IEdTVF9DT05DQVQgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIGV2ZW50ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VFSzp7Ci0gICAgICBHc3RQYWQgKnNpbmtwYWQgPSBOVUxMOwotCi0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGlmICgoc2lua3BhZCA9IHNlbGYtPmN1cnJlbnRfc2lua3BhZCkpCi0gICAgICAgIGdzdF9vYmplY3RfcmVmIChzaW5rcGFkKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBpZiAoc2lua3BhZCkgewotICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfUU9TOnsKLSAgICAgIEdzdFFPU1R5cGUgdHlwZTsKLSAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLSAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0gICAgICBnZG91YmxlIHByb3BvcnRpb247Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9xb3MgKGV2ZW50LCAmdHlwZSwgJnByb3BvcnRpb24sICZkaWZmLCAmdGltZXN0YW1wKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gICAgICBpZiAodGltZXN0YW1wICE9IEdTVF9DTE9DS19USU1FX05PTkUKLSAgICAgICAgICAmJiB0aW1lc3RhbXAgPiBzZWxmLT5jdXJyZW50X3N0YXJ0X29mZnNldCkgewotICAgICAgICB0aW1lc3RhbXAgLT0gc2VsZi0+Y3VycmVudF9zdGFydF9vZmZzZXQ7Ci0gICAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19xb3MgKHR5cGUsIHByb3BvcnRpb24sIGRpZmYsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+Y3VycmVudF9zaW5rcGFkLCBldmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXQgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOnsKLSAgICAgIGdib29sZWFuIHJlc2V0X3RpbWU7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9mbHVzaF9zdG9wIChldmVudCwgJnJlc2V0X3RpbWUpOwotICAgICAgaWYgKHJlc2V0X3RpbWUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgICAgICJyZXNldHRpbmcgc3RhcnQgb2Zmc2V0IHRvIDAgYWZ0ZXIgZmx1c2hpbmcgd2l0aCByZXNldF90aW1lID0gVFJVRSIpOwotICAgICAgICBzZWxmLT5jdXJyZW50X3N0YXJ0X29mZnNldCA9IDA7Ci0gICAgICB9Ci0KLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb25jYXRfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAicmVjZWl2ZWQgcXVlcnkgJSIgR1NUX1BUUl9GT1JNQVQsIHF1ZXJ5KTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotcmVzZXRfcGFkIChjb25zdCBHVmFsdWUgKiBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0IChkYXRhKTsKLSAgR3N0Q29uY2F0UGFkICpzcGFkID0gR1NUX0NPTkNBVF9QQURfQ0FTVCAocGFkKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc3BhZC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICBzcGFkLT5mbHVzaGluZyA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotdW5ibG9ja19wYWQgKGNvbnN0IEdWYWx1ZSAqIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKGRhdGEpOwotICBHc3RDb25jYXRQYWQgKnNwYWQgPSBHU1RfQ09OQ0FUX1BBRF9DQVNUIChwYWQpOwotCi0gIHNwYWQtPmZsdXNoaW5nID0gVFJVRTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfY29uY2F0X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdENvbmNhdCAqc2VsZiA9IEdTVF9DT05DQVQgKGVsZW1lbnQpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDp7Ci0gICAgICBHc3RJdGVyYXRvciAqaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChlbGVtZW50KTsKLSAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IHJlczsKLQotICAgICAgc2VsZi0+Zm9ybWF0ID0gR1NUX0ZPUk1BVF9VTkRFRklORUQ7Ci0gICAgICBzZWxmLT5jdXJyZW50X3N0YXJ0X29mZnNldCA9IDA7Ci0gICAgICBzZWxmLT5sYXN0X3N0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgICB3aGlsZSAoKHJlcyA9Ci0gICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9mb3JlYWNoIChpdGVyLCByZXNldF9wYWQsCi0gICAgICAgICAgICAgICAgICBOVUxMKSkgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7Ci0gICAgICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0KLSAgICAgIGlmIChyZXMgPT0gR1NUX0lURVJBVE9SX0VSUk9SKQotICAgICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6ewotICAgICAgR3N0SXRlcmF0b3IgKml0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoZWxlbWVudCk7Ci0gICAgICBHc3RJdGVyYXRvclJlc3VsdCByZXM7Ci0KLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgd2hpbGUgKChyZXMgPQotICAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfZm9yZWFjaCAoaXRlciwgdW5ibG9ja19wYWQsCi0gICAgICAgICAgICAgICAgICBOVUxMKSkgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7Ci0gICAgICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0gICAgICBnX2NvbmRfYnJvYWRjYXN0ICgmc2VsZi0+Y29uZCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotCi0gICAgICBpZiAocmVzID09IEdTVF9JVEVSQVRPUl9FUlJPUikKLSAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGNvbmNhdC5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3Rjb25jYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc0ZGI1NS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGNvbmNhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyogR1N0cmVhbWVyIGNvbmNhdCBlbGVtZW50Ci0gKgotICogIENvcHlyaWdodCAoYykgMjAxNCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIF9fR1NUX0NPTkNBVF9IX18KLSNkZWZpbmUgX19HU1RfQ09OQ0FUX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQ09OQ0FUIChnc3RfY29uY2F0X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9DT05DQVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdTVF9UWVBFX0NPTkNBVCwgR3N0Q29uY2F0KSkKLSNkZWZpbmUgR1NUX0NPTkNBVF9DQVNUKG9iaikgKChHc3RDb25jYXQqKW9iaikKLSNkZWZpbmUgR1NUX0NPTkNBVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdTVF9UWVBFX0NPTkNBVCxHc3RDb25jYXRDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19DT05DQVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQ09OQ0FUKSkKLSNkZWZpbmUgR1NUX0lTX0NPTkNBVF9DTEFTUyhvYmopIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0NPTkNBVCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RDb25jYXQgR3N0Q29uY2F0OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdENvbmNhdENsYXNzIEdzdENvbmNhdENsYXNzOwotCi0vKioKLSAqIEdzdENvbmNhdDoKLSAqCi0gKiBUaGUgcHJpdmF0ZSBjb25jYXQgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBfR3N0Q29uY2F0Ci17Ci0gIC8qPCBwcml2YXRlID4qLwotICBHc3RFbGVtZW50IHBhcmVudDsKLQotICBHTXV0ZXggbG9jazsKLSAgR0NvbmQgY29uZDsKLSAgR0xpc3QgKnNpbmtwYWRzOyAvKiBMYXN0IGlzIGVhcmxpZXN0ICovCi0gIEdzdFBhZCAqY3VycmVudF9zaW5rcGFkOwotICBHc3RQYWQgKnNyY3BhZDsKLSAgZ3VpbnQgcGFkX2NvdW50OwotCi0gIC8qIEZvcm1hdCB3ZSdyZSBvcGVyYXRpbmcgaW4gKi8KLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgLyogSW4gZm9ybWF0LCBydW5uaW5nIHRpbWUgb3IgYWNjdW11bGF0ZWQgYnl0ZSBvZmZzZXQgKi8KLSAgZ3VpbnQ2NCBjdXJyZW50X3N0YXJ0X29mZnNldDsKLSAgLyogQmV0d2VlbiBjdXJyZW50IHBhZCdzIHNlZ21lbnQgc3RhcnQgYW5kIHN0b3AgKi8KLSAgZ3VpbnQ2NCBsYXN0X3N0b3A7Ci0KLSAgZ2Jvb2xlYW4gYWRqdXN0X2Jhc2U7Ci19OwotCi1zdHJ1Y3QgX0dzdENvbmNhdENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X2NvbmNhdF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9DT05DQVRfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NTFkOWIuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk0OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIGdzdGRvd25sb2FkYnVmZmVyLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZG93bmxvYWRidWZmZXIKLSAqCi0gKiBUaGUgZG93bmxvYWRidWZmZXIgZWxlbWVudCBwcm92aWRlcyBvbi1kaXNrIGJ1ZmZlcmluZyBhbmQgY2FjaGluZyBvZiwgdHlwaWNhbGx5LAotICogYSBuZXR3b3JrIGZpbGUuIHRlbXAtdGVtcGxhdGUgc2hvdWxkIGJlIHNldCB0byBhIHZhbHVlIHN1Y2ggYXMKLSAqIC90bXAvZ3N0cmVhbWVyLVhYWFhYWCBhbmQgdGhlIGVsZW1lbnQgd2lsbCBhbGxvY2F0ZSBhIHJhbmRvbSBmcmVlIGZpbGVuYW1lIGFuZAotICogYnVmZmVyIHRoZSBkYXRhIGluIHRoZSBmaWxlLgotICoKLSAqIFdpdGggbWF4LXNpemUtYnl0ZXMgYW5kIG1heC1zaXplLXRpbWUgeW91IGNhbiBjb25maWd1cmUgdGhlIGJ1ZmZlcmluZyBsaW1pdHMuCi0gKiBUaGUgZG93bmxvYWRidWZmZXIgZWxlbWVudCB3aWxsIHRyeSB0byByZWFkLWFoZWFkIHRoZXNlIGFtb3VudHMgb2YgZGF0YS4gV2hlbgotICogdGhlIGFtb3VudCBvZiByZWFkLWFoZWFkIGRhdGEgZHJvcHMgYmVsb3cgbG93LXBlcmNlbnQgb2YgdGhlIGNvbmZpZ3VyZWQgbWF4LAotICogdGhlIGVsZW1lbnQgd2lsbCBzdGFydCBlbWl0dGluZyBCVUZGRVJJTkcgbWVzc2FnZXMgdW50aWwgaGlnaC1wZXJjZW50IG9mIG1heCBpcwotICogcmVhY2hlZCBhZ2Fpbi4KLSAqCi0gKiBUaGUgZG93bmxvYWRidWZmZXIgcHJvdmlkZXMgcHVzaCBhbmQgcHVsbCBiYXNlZCBzY2hlZHVsaW5nIG9uIGl0cyBzb3VyY2UgcGFkCi0gKiBhbmQgd2lsbCBlZmZpY2llbnRseSBzZWVrIGluIHRoZSB1cHN0cmVhbSBlbGVtZW50IHdoZW4gbmVlZGVkLgotICoKLSAqIFRoZSB0ZW1wLWxvY2F0aW9uIHByb3BlcnR5IHdpbGwgYmUgdXNlZCB0byBub3RpZnkgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZQotICogYWxsb2NhdGVkIGZpbGVuYW1lLgotICoKLSAqIFdoZW4gdGhlIGRvd25sb2FkYnVmZmVyIGhhcyBjb21wbGV0ZWx5IGRvd25sb2FkZWQgdGhlIG1lZGlhLCBpdCB3aWxsCi0gKiBwb3N0IGFuIGFwcGxpY2F0aW9uIG1lc3NhZ2UgbmFtZWQgIDxjbGFzc25hbWU+JnF1b3Q7R3N0Q2FjaGVEb3dubG9hZENvbXBsZXRlJnF1b3Q7PC9jbGFzc25hbWU+Ci0gKiB3aXRoIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246Ci0gKiA8aXRlbWl6ZWRsaXN0PgotICogPGxpc3RpdGVtPgotICogICA8cGFyYT4KLSAqICAgR19UWVBFX1NUUklORwotICogICA8Y2xhc3NuYW1lPiZxdW90O2xvY2F0aW9uJnF1b3Q7PC9jbGFzc25hbWU+OgotICogICB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbXBsZXRlbHkgZG93bmxvYWRlZCBmaWxlLgotICogICA8L3BhcmE+Ci0gKiA8L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0ZG93bmxvYWRidWZmZXIuaCIKLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3QvZ3N0LWkxOG4tbGliLmgiCi0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKLSNlbHNlCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2lmZGVmIF9fQklPTklDX18KLSNpbmNsdWRlIDxmY250bC5oPgotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChkb3dubG9hZGJ1ZmZlcl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAoZG93bmxvYWRidWZmZXJfZGVidWcpCi0KLWVudW0KLXsKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLS8qIG90aGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRSA0MDk2Ci0KLS8qIGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzICovCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfQllURVMgICAgICgyICogMTAyNCAqIDEwMjQpICAgIC8qIDIgTUIgKi8KLSNkZWZpbmUgREVGQVVMVF9NQVhfU0laRV9USU1FICAgICAgMiAqIEdTVF9TRUNPTkQgICAgICAgLyogMiBzZWNvbmRzICovCi0jZGVmaW5lIERFRkFVTFRfTE9XX1BFUkNFTlQgICAgICAgIDEwCi0jZGVmaW5lIERFRkFVTFRfSElHSF9QRVJDRU5UICAgICAgIDk5Ci0jZGVmaW5lIERFRkFVTFRfVEVNUF9SRU1PVkUgICAgICAgIFRSVUUKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTUFYX1NJWkVfQllURVMsCi0gIFBST1BfTUFYX1NJWkVfVElNRSwKLSAgUFJPUF9MT1dfUEVSQ0VOVCwKLSAgUFJPUF9ISUdIX1BFUkNFTlQsCi0gIFBST1BfVEVNUF9URU1QTEFURSwKLSAgUFJPUF9URU1QX0xPQ0FUSU9OLAotICBQUk9QX1RFTVBfUkVNT1ZFLAotICBQUk9QX0xBU1QKLX07Ci0KLSNkZWZpbmUgR1NUX0RPV05MT0FEX0JVRkZFUl9DTEVBUl9MRVZFTChsKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgIFwKLSAgbC5ieXRlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsLnRpbWUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBTVEFUVVMoZWxlbSwgcGFkLCBtc2cpIFwKLSAgR1NUX0xPR19PQkpFQ1QgKGVsZW0sICIoJXM6JXMpICIgbXNnICI6ICV1IG9mICV1ICIgXAotICAgICAgICAgICAgICAgICAgICAgICJieXRlcywgJSIgR19HVUlOVDY0X0ZPUk1BVCAiIG9mICUiIEdfR1VJTlQ2NF9GT1JNQVQgXAotICAgICAgICAgICAgICAgICAgICAgICIgbnMiLCBcCi0gICAgICAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgZWxlbS0+Y3VyX2xldmVsLmJ5dGVzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgZWxlbS0+bWF4X2xldmVsLmJ5dGVzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgZWxlbS0+Y3VyX2xldmVsLnRpbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICBlbGVtLT5tYXhfbGV2ZWwudGltZSkKLQotI2RlZmluZSBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0socSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19tdXRleF9sb2NrICgmcS0+cWxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0tfQ0hFQ0socSxyZXMsbGFiZWwpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgXAotICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKHEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAocmVzICE9IEdTVF9GTE9XX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0socSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfbXV0ZXhfdW5sb2NrICgmcS0+cWxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgR1NUX0RPV05MT0FEX0JVRkZFUl9XQUlUX0FERF9DSEVDSyhxLCByZXMsIG8sIGxhYmVsKSBHX1NUTVRfU1RBUlQgeyAgICAgICBcCi0gIFNUQVRVUyAocSwgcS0+c3JjcGFkLCAid2FpdCBmb3IgQUREIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcS0+d2FpdGluZ19hZGQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcS0+d2FpdGluZ19vZmZzZXQgPSBvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19jb25kX3dhaXQgKCZxLT5pdGVtX2FkZCwgJnEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcS0+d2FpdGluZ19hZGQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTVEFUVVMgKHEsIHEtPnNyY3BhZCwgInJlY2VpdmVkIEFERCB3YWtldXAiKTsgICAgICAgICAgICAgICAgICAgXAotICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBTVEFUVVMgKHEsIHEtPnNyY3BhZCwgInJlY2VpdmVkIEFERCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfRE9XTkxPQURfQlVGRkVSX1NJR05BTF9BREQocSwgbykgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHEtPndhaXRpbmdfYWRkICYmIHEtPndhaXRpbmdfb2Zmc2V0IDw9IG8pIHsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTVEFUVVMgKHEsIHEtPnNpbmtwYWQsICJzaWduYWwgQUREIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX2NvbmRfc2lnbmFsICgmcS0+aXRlbV9hZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZG93bmxvYWRidWZmZXJfZGVidWcsICJkb3dubG9hZGJ1ZmZlciIsIDAsIFwKLSAgICAgICAgImRvd25sb2FkYnVmZmVyIGVsZW1lbnQiKTsKLQotI2RlZmluZSBnc3RfZG93bmxvYWRfYnVmZmVyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3REb3dubG9hZEJ1ZmZlciwgZ3N0X2Rvd25sb2FkX2J1ZmZlciwKLSAgICBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7Ci0KLXN0YXRpYyBHc3RNZXNzYWdlICp1cGRhdGVfYnVmZmVyaW5nIChHc3REb3dubG9hZEJ1ZmZlciAqIGRsYnVmKTsKLQotc3RhdGljIHZvaWQgZ3N0X2Rvd25sb2FkX2J1ZmZlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9kb3dubG9hZF9idWZmZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2Rvd25sb2FkX2J1ZmZlcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9kb3dubG9hZF9idWZmZXJfY2hhaW4gKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgdm9pZCBnc3RfZG93bmxvYWRfYnVmZmVyX2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZG93bmxvYWRfYnVmZmVyX2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZG93bmxvYWRfYnVmZmVyX2hhbmRsZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9kb3dubG9hZF9idWZmZXJfaGFuZGxlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Rvd25sb2FkX2J1ZmZlcl9oYW5kbGVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZG93bmxvYWRfYnVmZmVyX2hhbmRsZV9xdWVyeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9kb3dubG9hZF9idWZmZXJfZ2V0X3JhbmdlIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9kb3dubG9hZF9idWZmZXJfc3JjX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZG93bmxvYWRfYnVmZmVyX3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9kb3dubG9hZF9idWZmZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotLyogc3RhdGljIGd1aW50IGdzdF9kb3dubG9hZF9idWZmZXJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KLQotc3RhdGljIHZvaWQKLWdzdF9kb3dubG9hZF9idWZmZXJfY2xhc3NfaW5pdCAoR3N0RG93bmxvYWRCdWZmZXJDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9kb3dubG9hZF9idWZmZXJfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZG93bmxvYWRfYnVmZmVyX2dldF9wcm9wZXJ0eTsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfQllURVMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1zaXplLWJ5dGVzIiwgIk1heC4gc2l6ZSAoa0IpIiwKLSAgICAgICAgICAiTWF4LiBhbW91bnQgb2YgZGF0YSB0byBidWZmZXIgKGJ5dGVzLCAwPWRpc2FibGUpIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX1NJWkVfQllURVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJtYXgtc2l6ZS10aW1lIiwgIk1heC4gc2l6ZSAobnMpIiwKLSAgICAgICAgICAiTWF4LiBhbW91bnQgb2YgZGF0YSB0byBidWZmZXIgKGluIG5zLCAwPWRpc2FibGUpIiwgMCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfU0laRV9USU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xPV19QRVJDRU5ULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImxvdy1wZXJjZW50IiwgIkxvdyBwZXJjZW50IiwKLSAgICAgICAgICAiTG93IHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlIiwKLSAgICAgICAgICAwLCAxMDAsIERFRkFVTFRfTE9XX1BFUkNFTlQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSElHSF9QRVJDRU5ULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImhpZ2gtcGVyY2VudCIsICJIaWdoIHBlcmNlbnQiLAotICAgICAgICAgICJIaWdoIHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZSIsCi0gICAgICAgICAgMCwgMTAwLCBERUZBVUxUX0hJR0hfUEVSQ0VOVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RFTVBfVEVNUExBVEUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgidGVtcC10ZW1wbGF0ZSIsICJUZW1wb3JhcnkgRmlsZSBUZW1wbGF0ZSIsCi0gICAgICAgICAgIkZpbGUgdGVtcGxhdGUgdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzIGluLCBzaG91bGQgY29udGFpbiBkaXJlY3RvcnkgIgotICAgICAgICAgICJhbmQgWFhYWFhYLiAoTlVMTCA9PSBkaXNhYmxlZCkiLAotICAgICAgICAgIE5VTEwsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVEVNUF9MT0NBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJ0ZW1wLWxvY2F0aW9uIiwgIlRlbXBvcmFyeSBGaWxlIExvY2F0aW9uIiwKLSAgICAgICAgICAiTG9jYXRpb24gdG8gc3RvcmUgdGVtcG9yYXJ5IGZpbGVzIGluIChPbmx5IHJlYWQgdGhpcyBwcm9wZXJ0eSwgIgotICAgICAgICAgICJ1c2UgdGVtcC10ZW1wbGF0ZSB0byBjb25maWd1cmUgdGhlIG5hbWUgdGVtcGxhdGUpIiwKLSAgICAgICAgICBOVUxMLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3REb3dubG9hZEJ1ZmZlcjp0ZW1wLXJlbW92ZQotICAgKgotICAgKiBXaGVuIHRlbXAtdGVtcGxhdGUgaXMgc2V0LCByZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIHdoZW4gZ29pbmcgdG8gUkVBRFkuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RFTVBfUkVNT1ZFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ0ZW1wLXJlbW92ZSIsICJSZW1vdmUgdGhlIFRlbXBvcmFyeSBGaWxlIiwKLSAgICAgICAgICAiUmVtb3ZlIHRoZSB0ZW1wLWxvY2F0aW9uIGFmdGVyIHVzZSIsCi0gICAgICAgICAgREVGQVVMVF9URU1QX1JFTU9WRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyogc2V0IHNldmVyYWwgcGFyZW50IGNsYXNzIHZpcnR1YWwgZnVuY3Rpb25zICovCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2Rvd25sb2FkX2J1ZmZlcl9maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJEb3dubG9hZEJ1ZmZlciIsCi0gICAgICAiR2VuZXJpYyIsICJEb3dubG9hZCBCdWZmZXIgZWxlbWVudCIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kb3dubG9hZF9idWZmZXJfY2hhbmdlX3N0YXRlKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cXVlcnkgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kb3dubG9hZF9idWZmZXJfaGFuZGxlX3F1ZXJ5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kb3dubG9hZF9idWZmZXJfaW5pdCAoR3N0RG93bmxvYWRCdWZmZXIgKiBkbGJ1ZikKLXsKLSAgZGxidWYtPnNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmt0ZW1wbGF0ZSwgInNpbmsiKTsKLQotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoZGxidWYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Rvd25sb2FkX2J1ZmZlcl9jaGFpbikpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKGRsYnVmLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kb3dubG9hZF9idWZmZXJfc2lua19hY3RpdmF0ZV9tb2RlKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChkbGJ1Zi0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZG93bmxvYWRfYnVmZmVyX2hhbmRsZV9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChkbGJ1Zi0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZG93bmxvYWRfYnVmZmVyX2hhbmRsZV9zaW5rX3F1ZXJ5KSk7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0NBUFMgKGRsYnVmLT5zaW5rcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGRsYnVmKSwgZGxidWYtPnNpbmtwYWQpOwotCi0gIGRsYnVmLT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjIik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uIChkbGJ1Zi0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kb3dubG9hZF9idWZmZXJfc3JjX2FjdGl2YXRlX21vZGUpKTsKLSAgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24gKGRsYnVmLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Rvd25sb2FkX2J1ZmZlcl9nZXRfcmFuZ2UpKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGRsYnVmLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Rvd25sb2FkX2J1ZmZlcl9oYW5kbGVfc3JjX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChkbGJ1Zi0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kb3dubG9hZF9idWZmZXJfaGFuZGxlX3NyY19xdWVyeSkpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChkbGJ1Zi0+c3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGRsYnVmKSwgZGxidWYtPnNyY3BhZCk7Ci0KLSAgLyogbGV2ZWxzICovCi0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfQ0xFQVJfTEVWRUwgKGRsYnVmLT5jdXJfbGV2ZWwpOwotICBkbGJ1Zi0+bWF4X2xldmVsLmJ5dGVzID0gREVGQVVMVF9NQVhfU0laRV9CWVRFUzsKLSAgZGxidWYtPm1heF9sZXZlbC50aW1lID0gREVGQVVMVF9NQVhfU0laRV9USU1FOwotICBkbGJ1Zi0+bG93X3BlcmNlbnQgPSBERUZBVUxUX0xPV19QRVJDRU5UOwotICBkbGJ1Zi0+aGlnaF9wZXJjZW50ID0gREVGQVVMVF9ISUdIX1BFUkNFTlQ7Ci0KLSAgZGxidWYtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICBkbGJ1Zi0+aW5fdGltZXIgPSBnX3RpbWVyX25ldyAoKTsKLSAgZGxidWYtPm91dF90aW1lciA9IGdfdGltZXJfbmV3ICgpOwotCi0gIGdfbXV0ZXhfaW5pdCAoJmRsYnVmLT5xbG9jayk7Ci0gIGRsYnVmLT53YWl0aW5nX2FkZCA9IEZBTFNFOwotICBnX2NvbmRfaW5pdCAoJmRsYnVmLT5pdGVtX2FkZCk7Ci0KLSAgLyogdGVtcGZpbGUgcmVsYXRlZCAqLwotICBkbGJ1Zi0+dGVtcF90ZW1wbGF0ZSA9IE5VTEw7Ci0gIGRsYnVmLT50ZW1wX2xvY2F0aW9uID0gTlVMTDsKLSAgZGxidWYtPnRlbXBfcmVtb3ZlID0gREVGQVVMVF9URU1QX1JFTU9WRTsKLX0KLQotLyogY2FsbGVkIG9ubHkgb25jZSwgYXMgb3Bwb3NlZCB0byBkaXNwb3NlICovCi1zdGF0aWMgdm9pZAotZ3N0X2Rvd25sb2FkX2J1ZmZlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0RG93bmxvYWRCdWZmZXIgKmRsYnVmID0gR1NUX0RPV05MT0FEX0JVRkZFUiAob2JqZWN0KTsKLQotICBnX211dGV4X2NsZWFyICgmZGxidWYtPnFsb2NrKTsKLSAgZ19jb25kX2NsZWFyICgmZGxidWYtPml0ZW1fYWRkKTsKLSAgZ190aW1lcl9kZXN0cm95IChkbGJ1Zi0+aW5fdGltZXIpOwotICBnX3RpbWVyX2Rlc3Ryb3kgKGRsYnVmLT5vdXRfdGltZXIpOwotCi0gIC8qIHRlbXBfZmlsZSBwYXRoIGNsZWFudXAgICovCi0gIGdfZnJlZSAoZGxidWYtPnRlbXBfdGVtcGxhdGUpOwotICBnX2ZyZWUgKGRsYnVmLT50ZW1wX2xvY2F0aW9uKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZXNldF9wb3NpdGlvbnMgKEdzdERvd25sb2FkQnVmZmVyICogZGxidWYpCi17Ci0gIGRsYnVmLT53cml0ZV9wb3MgPSAwOwotICBkbGJ1Zi0+cmVhZF9wb3MgPSAwOwotICBkbGJ1Zi0+ZmlsbGluZyA9IFRSVUU7Ci0gIGRsYnVmLT5idWZmZXJpbmdfcGVyY2VudCA9IDA7Ci0gIGRsYnVmLT5pc19idWZmZXJpbmcgPSBUUlVFOwotICBkbGJ1Zi0+c2Vla2luZyA9IEZBTFNFOwotICBHU1RfRE9XTkxPQURfQlVGRkVSX0NMRUFSX0xFVkVMIChkbGJ1Zi0+Y3VyX2xldmVsKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlc2V0X3JhdGVfdGltZXIgKEdzdERvd25sb2FkQnVmZmVyICogZGxidWYpCi17Ci0gIGRsYnVmLT5ieXRlc19pbiA9IDA7Ci0gIGRsYnVmLT5ieXRlc19vdXQgPSAwOwotICBkbGJ1Zi0+Ynl0ZV9pbl9yYXRlID0gMC4wOwotICBkbGJ1Zi0+Ynl0ZV9pbl9wZXJpb2QgPSAwOwotICBkbGJ1Zi0+Ynl0ZV9vdXRfcmF0ZSA9IDAuMDsKLSAgZGxidWYtPmxhc3RfaW5fZWxhcHNlZCA9IDAuMDsKLSAgZGxidWYtPmxhc3Rfb3V0X2VsYXBzZWQgPSAwLjA7Ci0gIGRsYnVmLT5pbl90aW1lcl9zdGFydGVkID0gRkFMU0U7Ci0gIGRsYnVmLT5vdXRfdGltZXJfc3RhcnRlZCA9IEZBTFNFOwotfQotCi0vKiB0aGUgaW50ZXJ2YWwgaW4gc2Vjb25kcyB0byByZWNhbGN1bGF0ZSB0aGUgcmF0ZSAqLwotI2RlZmluZSBSQVRFX0lOVEVSVkFMICAgIDAuMgotLyogVHVuaW5nIGZvciByYXRlIGVzdGltYXRpb24uIFdlIHVzZSBhIGxhcmdlIHdpbmRvdyBmb3IgdGhlIGlucHV0IHJhdGUgYmVjYXVzZQotICogaXQgc2hvdWxkIGJlIHN0YWJsZSB3aGVuIGNvbm5lY3RlZCB0byBhIG5ldHdvcmsuIFRoZSBvdXRwdXQgcmF0ZSBpcyBsZXNzCi0gKiBzdGFibGUgKHRoZSBlbGVtZW50cyBwcmVyb2xsLCBxdWV1ZXMgYmVoaW5kIGEgZGVtdXhlciBmaWxsLCAuLi4pIGFuZCBzaG91bGQKLSAqIHRoZXJlZm9yZSBhZGFwdCBtb3JlIHF1aWNrbHkuCi0gKiBIb3dldmVyLCBpbml0aWFsIGlucHV0IHJhdGUgbWF5IGJlIHN1YmplY3QgdG8gYSBidXJzdCwgYW5kIHNob3VsZCB0aGVyZWZvcmUKLSAqIGluaXRpYWxseSBhbHNvIGFkYXB0IG1vcmUgcXVpY2tseSB0byBjaGFuZ2VzLCBhbmQgb25seSBsYXRlciBvbiBnaXZlIGhpZ2hlcgotICogd2VpZ2h0IHRvIHByZXZpb3VzIHZhbHVlcy4gKi8KLSNkZWZpbmUgQVZHX0lOKGF2Zyx2YWwsdzEsdzIpICAoKGF2ZykgKiAodzEpICsgKHZhbCkgKiAodzIpKSAvICgodzEpICsgKHcyKSkKLSNkZWZpbmUgQVZHX09VVChhdmcsdmFsKSAoKGF2ZykgKiAzLjAgKyAodmFsKSkgLyA0LjAKLQotc3RhdGljIHZvaWQKLXVwZGF0ZV9sZXZlbHMgKEdzdERvd25sb2FkQnVmZmVyICogZGxidWYsIGd1aW50IGJ5dGVzKQotewotICBkbGJ1Zi0+Y3VyX2xldmVsLmJ5dGVzID0gYnl0ZXM7Ci0KLSAgaWYgKGRsYnVmLT5ieXRlX2luX3JhdGUgPiAwLjApIHsKLSAgICBkbGJ1Zi0+Y3VyX2xldmVsLnRpbWUgPQotICAgICAgICBkbGJ1Zi0+Y3VyX2xldmVsLmJ5dGVzIC8gZGxidWYtPmJ5dGVfaW5fcmF0ZSAqIEdTVF9TRUNPTkQ7Ci0gIH0KLQotICBHU1RfREVCVUcgKCJsZXZlbHM6IGJ5dGVzICV1LyV1LCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiLyUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIGRsYnVmLT5jdXJfbGV2ZWwuYnl0ZXMsIGRsYnVmLT5tYXhfbGV2ZWwuYnl0ZXMsCi0gICAgICBHU1RfVElNRV9BUkdTIChkbGJ1Zi0+Y3VyX2xldmVsLnRpbWUpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZGxidWYtPm1heF9sZXZlbC50aW1lKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfaW5fcmF0ZXMgKEdzdERvd25sb2FkQnVmZmVyICogZGxidWYpCi17Ci0gIGdkb3VibGUgZWxhcHNlZCwgcGVyaW9kOwotICBnZG91YmxlIGJ5dGVfaW5fcmF0ZTsKLQotICBpZiAoIWRsYnVmLT5pbl90aW1lcl9zdGFydGVkKSB7Ci0gICAgZGxidWYtPmluX3RpbWVyX3N0YXJ0ZWQgPSBUUlVFOwotICAgIGdfdGltZXJfc3RhcnQgKGRsYnVmLT5pbl90aW1lcik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgZWxhcHNlZCA9IGdfdGltZXJfZWxhcHNlZCAoZGxidWYtPmluX3RpbWVyLCBOVUxMKTsKLQotICAvKiByZWNhbGMgYWZ0ZXIgZWFjaCBpbnRlcnZhbC4gKi8KLSAgaWYgKGRsYnVmLT5sYXN0X2luX2VsYXBzZWQgKyBSQVRFX0lOVEVSVkFMIDwgZWxhcHNlZCkgewotICAgIHBlcmlvZCA9IGVsYXBzZWQgLSBkbGJ1Zi0+bGFzdF9pbl9lbGFwc2VkOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsCi0gICAgICAgICJyYXRlczogcGVyaW9kICVmLCBpbiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGdsb2JhbCBwZXJpb2QgJWYiLAotICAgICAgICBwZXJpb2QsIGRsYnVmLT5ieXRlc19pbiwgZGxidWYtPmJ5dGVfaW5fcGVyaW9kKTsKLQotICAgIGJ5dGVfaW5fcmF0ZSA9IGRsYnVmLT5ieXRlc19pbiAvIHBlcmlvZDsKLQotICAgIGlmIChkbGJ1Zi0+Ynl0ZV9pbl9yYXRlID09IDAuMCkKLSAgICAgIGRsYnVmLT5ieXRlX2luX3JhdGUgPSBieXRlX2luX3JhdGU7Ci0gICAgZWxzZQotICAgICAgZGxidWYtPmJ5dGVfaW5fcmF0ZSA9IEFWR19JTiAoZGxidWYtPmJ5dGVfaW5fcmF0ZSwgYnl0ZV9pbl9yYXRlLAotICAgICAgICAgIChkb3VibGUpIGRsYnVmLT5ieXRlX2luX3BlcmlvZCwgcGVyaW9kKTsKLQotICAgIC8qIGFub3RoZXIgZGF0YSBwb2ludCwgY2FwIGF0IDE2IGZvciBsb25nIHRpbWUgcnVubmluZyBhdmVyYWdlICovCi0gICAgaWYgKGRsYnVmLT5ieXRlX2luX3BlcmlvZCA8IDE2ICogUkFURV9JTlRFUlZBTCkKLSAgICAgIGRsYnVmLT5ieXRlX2luX3BlcmlvZCArPSBwZXJpb2Q7Ci0KLSAgICAvKiByZXNldCB0aGUgdmFsdWVzIHRvIGNhbGN1bGF0ZSByYXRlIG92ZXIgdGhlIG5leHQgaW50ZXJ2YWwgKi8KLSAgICBkbGJ1Zi0+bGFzdF9pbl9lbGFwc2VkID0gZWxhcHNlZDsKLSAgICBkbGJ1Zi0+Ynl0ZXNfaW4gPSAwOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAicmF0ZXM6IGluICVmIiwgZGxidWYtPmJ5dGVfaW5fcmF0ZSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXVwZGF0ZV9vdXRfcmF0ZXMgKEdzdERvd25sb2FkQnVmZmVyICogZGxidWYpCi17Ci0gIGdkb3VibGUgZWxhcHNlZCwgcGVyaW9kOwotICBnZG91YmxlIGJ5dGVfb3V0X3JhdGU7Ci0KLSAgaWYgKCFkbGJ1Zi0+b3V0X3RpbWVyX3N0YXJ0ZWQpIHsKLSAgICBkbGJ1Zi0+b3V0X3RpbWVyX3N0YXJ0ZWQgPSBUUlVFOwotICAgIGdfdGltZXJfc3RhcnQgKGRsYnVmLT5vdXRfdGltZXIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGVsYXBzZWQgPSBnX3RpbWVyX2VsYXBzZWQgKGRsYnVmLT5vdXRfdGltZXIsIE5VTEwpOwotCi0gIC8qIHJlY2FsYyBhZnRlciBlYWNoIGludGVydmFsLiAqLwotICBpZiAoZGxidWYtPmxhc3Rfb3V0X2VsYXBzZWQgKyBSQVRFX0lOVEVSVkFMIDwgZWxhcHNlZCkgewotICAgIHBlcmlvZCA9IGVsYXBzZWQgLSBkbGJ1Zi0+bGFzdF9vdXRfZWxhcHNlZDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLAotICAgICAgICAicmF0ZXM6IHBlcmlvZCAlZiwgb3V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBlcmlvZCwgZGxidWYtPmJ5dGVzX291dCk7Ci0KLSAgICBieXRlX291dF9yYXRlID0gZGxidWYtPmJ5dGVzX291dCAvIHBlcmlvZDsKLQotICAgIGlmIChkbGJ1Zi0+Ynl0ZV9vdXRfcmF0ZSA9PSAwLjApCi0gICAgICBkbGJ1Zi0+Ynl0ZV9vdXRfcmF0ZSA9IGJ5dGVfb3V0X3JhdGU7Ci0gICAgZWxzZQotICAgICAgZGxidWYtPmJ5dGVfb3V0X3JhdGUgPSBBVkdfT1VUIChkbGJ1Zi0+Ynl0ZV9vdXRfcmF0ZSwgYnl0ZV9vdXRfcmF0ZSk7Ci0KLSAgICAvKiByZXNldCB0aGUgdmFsdWVzIHRvIGNhbGN1bGF0ZSByYXRlIG92ZXIgdGhlIG5leHQgaW50ZXJ2YWwgKi8KLSAgICBkbGJ1Zi0+bGFzdF9vdXRfZWxhcHNlZCA9IGVsYXBzZWQ7Ci0gICAgZGxidWYtPmJ5dGVzX291dCA9IDA7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJyYXRlczogb3V0ICVmIiwgZGxidWYtPmJ5dGVfb3V0X3JhdGUpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ2V0X2J1ZmZlcmluZ19wZXJjZW50IChHc3REb3dubG9hZEJ1ZmZlciAqIGRsYnVmLCBnYm9vbGVhbiAqIGlzX2J1ZmZlcmluZywKLSAgICBnaW50ICogcGVyY2VudCkKLXsKLSAgZ2ludCBwZXJjOwotCi0gIGlmIChkbGJ1Zi0+aGlnaF9wZXJjZW50IDw9IDApIHsKLSAgICBpZiAocGVyY2VudCkKLSAgICAgICpwZXJjZW50ID0gMTAwOwotICAgIGlmIChpc19idWZmZXJpbmcpCi0gICAgICAqaXNfYnVmZmVyaW5nID0gRkFMU0U7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogRW5zdXJlIHRoZSB2YXJpYWJsZXMgdXNlZCB0byBjYWxjdWxhdGUgYnVmZmVyaW5nIHN0YXRlIGFyZSB1cC10by1kYXRlLiAqLwotICB1cGRhdGVfaW5fcmF0ZXMgKGRsYnVmKTsKLSAgdXBkYXRlX291dF9yYXRlcyAoZGxidWYpOwotCi0gIC8qIGZpZ3VyZSBvdXQgdGhlIHBlcmNlbnQgd2UgYXJlIGZpbGxlZCwgd2UgdGFrZSB0aGUgbWF4IG9mIGFsbCBmb3JtYXRzLiAqLwotICBpZiAoZGxidWYtPm1heF9sZXZlbC5ieXRlcyA+IDApIHsKLSAgICBpZiAoZGxidWYtPmN1cl9sZXZlbC5ieXRlcyA+PSBkbGJ1Zi0+bWF4X2xldmVsLmJ5dGVzKQotICAgICAgcGVyYyA9IDEwMDsKLSAgICBlbHNlCi0gICAgICBwZXJjID0gZGxidWYtPmN1cl9sZXZlbC5ieXRlcyAqIDEwMCAvIGRsYnVmLT5tYXhfbGV2ZWwuYnl0ZXM7Ci0gIH0gZWxzZQotICAgIHBlcmMgPSAwOwotCi0gIGlmIChkbGJ1Zi0+bWF4X2xldmVsLnRpbWUgPiAwKSB7Ci0gICAgaWYgKGRsYnVmLT5jdXJfbGV2ZWwudGltZSA+PSBkbGJ1Zi0+bWF4X2xldmVsLnRpbWUpCi0gICAgICBwZXJjID0gMTAwOwotICAgIGVsc2UKLSAgICAgIHBlcmMgPSBNQVggKHBlcmMsIGRsYnVmLT5jdXJfbGV2ZWwudGltZSAqIDEwMCAvIGRsYnVmLT5tYXhfbGV2ZWwudGltZSk7Ci0gIH0gZWxzZQotICAgIHBlcmMgPSBNQVggKDAsIHBlcmMpOwotCi0gIGlmIChpc19idWZmZXJpbmcpCi0gICAgKmlzX2J1ZmZlcmluZyA9IGRsYnVmLT5pc19idWZmZXJpbmc7Ci0KLSAgLyogc2NhbGUgdG8gaGlnaCBwZXJjZW50IHNvIHRoYXQgaXQgYmVjb21lcyB0aGUgMTAwJSBtYXJrICovCi0gIHBlcmMgPSBwZXJjICogMTAwIC8gZGxidWYtPmhpZ2hfcGVyY2VudDsKLSAgLyogY2xpcCAqLwotICBpZiAocGVyYyA+IDEwMCkKLSAgICBwZXJjID0gMTAwOwotCi0gIGlmIChwZXJjZW50KQotICAgICpwZXJjZW50ID0gcGVyYzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgImJ1ZmZlcmluZyAlZCwgcGVyY2VudCAlZCIsIGRsYnVmLT5pc19idWZmZXJpbmcsCi0gICAgICBwZXJjKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdldF9idWZmZXJpbmdfc3RhdHMgKEdzdERvd25sb2FkQnVmZmVyICogZGxidWYsIGdpbnQgcGVyY2VudCwKLSAgICBHc3RCdWZmZXJpbmdNb2RlICogbW9kZSwgZ2ludCAqIGF2Z19pbiwgZ2ludCAqIGF2Z19vdXQsCi0gICAgZ2ludDY0ICogYnVmZmVyaW5nX2xlZnQpCi17Ci0gIGlmIChtb2RlKQotICAgICptb2RlID0gR1NUX0JVRkZFUklOR19ET1dOTE9BRDsKLQotICBpZiAoYXZnX2luKQotICAgICphdmdfaW4gPSBkbGJ1Zi0+Ynl0ZV9pbl9yYXRlOwotICBpZiAoYXZnX291dCkKLSAgICAqYXZnX291dCA9IGRsYnVmLT5ieXRlX291dF9yYXRlOwotCi0gIGlmIChidWZmZXJpbmdfbGVmdCkgewotICAgIGd1aW50NjQgbWF4LCBjdXI7Ci0KLSAgICAqYnVmZmVyaW5nX2xlZnQgPSAocGVyY2VudCA9PSAxMDAgPyAwIDogLTEpOwotCi0gICAgbWF4ID0gZGxidWYtPm1heF9sZXZlbC50aW1lOwotICAgIGN1ciA9IGRsYnVmLT5jdXJfbGV2ZWwudGltZTsKLQotICAgIGlmIChwZXJjZW50ICE9IDEwMCAmJiBtYXggPiBjdXIpCi0gICAgICAqYnVmZmVyaW5nX2xlZnQgPSAobWF4IC0gY3VyKSAvIDEwMDAwMDA7Ci0gIH0KLX0KLQotc3RhdGljIEdzdE1lc3NhZ2UgKgotdXBkYXRlX2J1ZmZlcmluZyAoR3N0RG93bmxvYWRCdWZmZXIgKiBkbGJ1ZikKLXsKLSAgZ2ludCBwZXJjZW50OwotICBnYm9vbGVhbiBwb3N0ID0gRkFMU0U7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOwotCi0gIGlmICghZ2V0X2J1ZmZlcmluZ19wZXJjZW50IChkbGJ1ZiwgTlVMTCwgJnBlcmNlbnQpKQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmIChkbGJ1Zi0+aXNfYnVmZmVyaW5nKSB7Ci0gICAgcG9zdCA9IFRSVUU7Ci0gICAgLyogaWYgd2Ugd2VyZSBidWZmZXJpbmcgc2VlIGlmIHdlIHJlYWNoZWQgdGhlIGhpZ2ggd2F0ZXJtYXJrICovCi0gICAgaWYgKHBlcmNlbnQgPj0gZGxidWYtPmhpZ2hfcGVyY2VudCkKLSAgICAgIGRsYnVmLT5pc19idWZmZXJpbmcgPSBGQUxTRTsKLSAgfSBlbHNlIHsKLSAgICAvKiB3ZSB3ZXJlIG5vdCBidWZmZXJpbmcsIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3RhcnQgYnVmZmVyaW5nIGlmIHdlIGRyb3AKLSAgICAgKiBiZWxvdyB0aGUgbG93IHRocmVzaG9sZCAqLwotICAgIGlmIChwZXJjZW50IDwgZGxidWYtPmxvd19wZXJjZW50KSB7Ci0gICAgICBkbGJ1Zi0+aXNfYnVmZmVyaW5nID0gVFJVRTsKLSAgICAgIHBvc3QgPSBUUlVFOwotICAgIH0KLSAgfQotCi0gIGlmIChwb3N0KSB7Ci0gICAgaWYgKHBlcmNlbnQgPT0gZGxidWYtPmJ1ZmZlcmluZ19wZXJjZW50KQotICAgICAgcG9zdCA9IEZBTFNFOwotICAgIGVsc2UKLSAgICAgIGRsYnVmLT5idWZmZXJpbmdfcGVyY2VudCA9IHBlcmNlbnQ7Ci0gIH0KLQotICBpZiAocG9zdCkgewotICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZTsKLSAgICBnaW50IGF2Z19pbiwgYXZnX291dDsKLSAgICBnaW50NjQgYnVmZmVyaW5nX2xlZnQ7Ci0KLSAgICBnZXRfYnVmZmVyaW5nX3N0YXRzIChkbGJ1ZiwgcGVyY2VudCwgJm1vZGUsICZhdmdfaW4sICZhdmdfb3V0LAotICAgICAgICAmYnVmZmVyaW5nX2xlZnQpOwotCi0gICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgKEdTVF9PQkpFQ1RfQ0FTVCAoZGxidWYpLAotICAgICAgICAoZ2ludCkgcGVyY2VudCk7Ci0gICAgZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAobWVzc2FnZSwgbW9kZSwKLSAgICAgICAgYXZnX2luLCBhdmdfb3V0LCBidWZmZXJpbmdfbGVmdCk7Ci0gIH0KLQotICByZXR1cm4gbWVzc2FnZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wZXJmb3JtX3NlZWtfdG9fb2Zmc2V0IChHc3REb3dubG9hZEJ1ZmZlciAqIGRsYnVmLCBndWludDY0IG9mZnNldCkKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgaWYgKGRsYnVmLT5zZWVraW5nKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIHVudGlsIHdlIHJlY2VpdmUgdGhlIEZMVVNIX1NUT1AgZnJvbSB0aGlzIHNlZWssIHdlIHNraXAgZGF0YSAqLwotICBkbGJ1Zi0+c2Vla2luZyA9IFRSVUU7Ci0gIGRsYnVmLT53cml0ZV9wb3MgPSBvZmZzZXQ7Ci0gIGRsYnVmLT5maWxsaW5nID0gRkFMU0U7Ci0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJTZWVraW5nIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgZXZlbnQgPQotICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwgR1NUX1NFRUtfVFlQRV9TRVQsIG9mZnNldCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEpOwotCi0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGxidWYtPnNpbmtwYWQsIGV2ZW50KTsKLSAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9MT0NLIChkbGJ1Zik7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogZ2V0IHRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgZGVjaWRlIHRvIHNlZWsgcmF0aGVyIHRoYW4gd2FpdCAqLwotc3RhdGljIGd1aW50NjQKLWdldF9zZWVrX3RocmVzaG9sZCAoR3N0RG93bmxvYWRCdWZmZXIgKiBkbGJ1ZikKLXsKLSAgZ3VpbnQ2NCB0aHJlc2hvbGQ7Ci0KLSAgLyogRklYTUUsIGZpbmQgYSBnb29kIHRocmVzaG9sZCBiYXNlZCBvbiB0aGUgaW5jb21pbmcgcmF0ZS4gKi8KLSAgdGhyZXNob2xkID0gMTAyNCAqIDUxMjsKLQotICByZXR1cm4gdGhyZXNob2xkOwotfQotCi0vKiBjYWxsZWQgd2l0aCBET1dOTE9BRF9CVUZGRVJfTVVURVggKi8KLXN0YXRpYyB2b2lkCi1nc3RfZG93bmxvYWRfYnVmZmVyX3VwZGF0ZV91cHN0cmVhbV9zaXplIChHc3REb3dubG9hZEJ1ZmZlciAqIGRsYnVmKQotewotICBnaW50NjQgdXBzdHJlYW1fc2l6ZSA9IDA7Ci0KLSAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoZGxidWYtPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAgICAgJnVwc3RyZWFtX3NpemUpKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChkbGJ1ZiwgInVwc3RyZWFtIHNpemU6ICUiIEdfR0lOVDY0X0ZPUk1BVCwgdXBzdHJlYW1fc2l6ZSk7Ci0gICAgZGxidWYtPnVwc3RyZWFtX3NpemUgPSB1cHN0cmVhbV9zaXplOwotICB9Ci19Ci0KLS8qIGNhbGxlZCB3aXRoIERPV05MT0FEX0JVRkZFUl9NVVRFWCAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kb3dubG9hZF9idWZmZXJfd2FpdF9mb3JfZGF0YSAoR3N0RG93bmxvYWRCdWZmZXIgKiBkbGJ1ZiwgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgbGVuZ3RoKQotewotICBnc2l6ZSBzdGFydCwgc3RvcDsKLSAgZ3VpbnQ2NCB3YW50ZWQ7Ci0gIGdib29sZWFuIHN0YXJ0ZWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJ3YWl0IGZvciAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGxlbmd0aCAldSIsCi0gICAgICBvZmZzZXQsIGxlbmd0aCk7Ci0KLSAgd2FudGVkID0gb2Zmc2V0ICsgbGVuZ3RoOwotCi0gIC8qIHBhdXNlIHRoZSB0aW1lciB3aGlsZSB3ZSB3YWl0LiBUaGUgZmFjdCB0aGF0IHdlIGFyZSB3YWl0aW5nIGRvZXMgbm90IG1lYW4KLSAgICogdGhlIGJ5dGVyYXRlIG9uIHRoZSBvdXRwdXQgcGFkIGlzIGxvd2VyICovCi0gIGlmICgoc3RhcnRlZCA9IGRsYnVmLT5vdXRfdGltZXJfc3RhcnRlZCkpCi0gICAgZ190aW1lcl9zdG9wIChkbGJ1Zi0+b3V0X3RpbWVyKTsKLQotICAvKiBjaGVjayByYW5nZSBiZWZvcmUgdXMgKi8KLSAgaWYgKGdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYmVmb3JlIChkbGJ1Zi0+ZmlsZSwgb2Zmc2V0LCAmc3RhcnQsICZzdG9wKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLAotICAgICAgICAicmFuZ2UgYmVmb3JlICUiIEdfR1NJWkVfRk9STUFUICIgLSAlIiBHX0dTSVpFX0ZPUk1BVCwgc3RhcnQsIHN0b3ApOwotICAgIGlmIChzdGFydCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDwgc3RvcCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJ3ZSBoYXZlIHRoZSBvZmZzZXQiKTsKLSAgICAgIC8qIHdlIGhhdmUgdGhlIHJhbmdlLCBjb250aW51ZSBpdCAqLwotICAgICAgb2Zmc2V0ID0gc3RvcDsKLSAgICB9IGVsc2UgewotICAgICAgZ3VpbnQ2NCB0aHJlc2hvbGQsIGRpc3Q7Ci0KLSAgICAgIC8qIHRoZXJlIGlzIGEgcmFuZ2UgYmVmb3JlIHVzLCBjaGVjayBob3cgZmFyIGF3YXkgaXQgaXMgKi8KLSAgICAgIHRocmVzaG9sZCA9IGdldF9zZWVrX3RocmVzaG9sZCAoZGxidWYpOwotICAgICAgZGlzdCA9IG9mZnNldCAtIHN0b3A7Ci0KLSAgICAgIGlmIChkaXN0IDw9IHRocmVzaG9sZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgIm5vdCB0b28gZmFyIik7Ci0gICAgICAgIC8qIG5vdCBmYXIgYXdheSwgY29udGludWUgaXQgKi8KLSAgICAgICAgb2Zmc2V0ID0gc3RvcDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoZGxidWYtPndyaXRlX3BvcyAhPSBvZmZzZXQpCi0gICAgcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoZGxidWYsIG9mZnNldCk7Ci0KLSAgZGxidWYtPmZpbGxpbmcgPSBUUlVFOwotICBpZiAoZGxidWYtPndyaXRlX3BvcyA+IGRsYnVmLT5yZWFkX3BvcykKLSAgICB1cGRhdGVfbGV2ZWxzIChkbGJ1ZiwgZGxidWYtPndyaXRlX3BvcyAtIGRsYnVmLT5yZWFkX3Bvcyk7Ci0gIGVsc2UKLSAgICB1cGRhdGVfbGV2ZWxzIChkbGJ1ZiwgMCk7Ci0KLSAgLyogbm93IHdhaXQgZm9yIG1vcmUgZGF0YSAqLwotICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgIndhaXRpbmcgZm9yIG1vcmUgZGF0YSIpOwotICBHU1RfRE9XTkxPQURfQlVGRkVSX1dBSVRfQUREX0NIRUNLIChkbGJ1ZiwgZGxidWYtPnNyY3Jlc3VsdCwgd2FudGVkLAotICAgICAgb3V0X2ZsdXNoaW5nKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJnb3QgbW9yZSBkYXRhIik7Ci0KLSAgLyogYW5kIGNvbnRpbnVlIGlmIHdlIHdlcmUgcnVubmluZyBiZWZvcmUgKi8KLSAgaWYgKHN0YXJ0ZWQpCi0gICAgZ190aW1lcl9jb250aW51ZSAoZGxidWYtPm91dF90aW1lcik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi1vdXRfZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgIndlIGFyZSBmbHVzaGluZyIpOwotICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgfQotfQotCi0vKiBjYWxsZWQgd2l0aCBET1dOTE9BRF9CVUZGRVJfTVVURVggKi8KLXN0YXRpYyBnYm9vbGVhbgotY2hlY2tfdXBzdHJlYW1fc2l6ZSAoR3N0RG93bmxvYWRCdWZmZXIgKiBkbGJ1ZiwgZ3NpemUgb2Zmc2V0LCBndWludCAqIGxlbmd0aCkKLXsKLSAgZ3NpemUgc3RvcCA9IG9mZnNldCArICpsZW5ndGg7Ci0gIC8qIGNhdGNoIGFueSByZWFkcyBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUgaGVyZSB0byBtYWtlIHN1cmUgY2FjaGUKLSAgICogZG9lc24ndCBzZW5kIHNlZWsgZXZlbnRzIGJleW9uZCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSB1cHN0cmVhbSwgc2luY2UKLSAgICogdGhhdCB3b3VsZCBjb25mdXNlIGVsZW1lbnRzIHN1Y2ggYXMgc291cGh0dHBzcmMgYW5kL29yIGh0dHAgc2VydmVycy4KLSAgICogRGVtdXhlcnMgb2Z0ZW4ganVzdCBsb29wIHVudGlsIEVPUyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIHRvIGZpZ3VyZSBvdXQKLSAgICogd2hlbiB0aGV5J3ZlIHJlYWQgYWxsIHRoZSBlbmQtaGVhZGVycyBvciBpbmRleCBjaHVua3MuICovCi0gIGlmIChHX1VOTElLRUxZIChkbGJ1Zi0+dXBzdHJlYW1fc2l6ZSA9PSAtMSB8fCBzdG9wID49IGRsYnVmLT51cHN0cmVhbV9zaXplKSkgewotICAgIGdzdF9kb3dubG9hZF9idWZmZXJfdXBkYXRlX3Vwc3RyZWFtX3NpemUgKGRsYnVmKTsKLSAgfQotCi0gIGlmIChkbGJ1Zi0+dXBzdHJlYW1fc2l6ZSAhPSAtMSkgewotICAgIGlmIChvZmZzZXQgPj0gZGxidWYtPnVwc3RyZWFtX3NpemUpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoc3RvcCA+IGRsYnVmLT51cHN0cmVhbV9zaXplKSkgewotICAgICAgKmxlbmd0aCA9IGRsYnVmLT51cHN0cmVhbV9zaXplIC0gb2Zmc2V0OwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJhZGp1c3RpbmcgbGVuZ3RoIGRvd250byAldSIsICpsZW5ndGgpOwotICAgIH0KLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogY2FsbGVkIHdpdGggRE9XTkxPQURfQlVGRkVSX01VVEVYICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Rvd25sb2FkX2J1ZmZlcl9yZWFkX2J1ZmZlciAoR3N0RG93bmxvYWRCdWZmZXIgKiBkbGJ1ZiwgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0TWFwSW5mbyBpbmZvOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBnc2l6ZSByZXMsIHJlbWFpbmluZzsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0KLSAgbGVuZ3RoID0gKGxlbmd0aCA9PSAtMSkgPyBERUZBVUxUX0JVRkZFUl9TSVpFIDogbGVuZ3RoOwotICBvZmZzZXQgPSAob2Zmc2V0ID09IC0xKSA/IGRsYnVmLT5yZWFkX3BvcyA6IG9mZnNldDsKLQotICBpZiAoIWNoZWNrX3Vwc3RyZWFtX3NpemUgKGRsYnVmLCBvZmZzZXQsICZsZW5ndGgpKQotICAgIGdvdG8gaGl0X2VvczsKLQotICAvKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IGJ1ZmZlciBvZiB0aGUgcmVxdWVzdGVkIHNpemUgKi8KLSAgaWYgKCpidWZmZXIgPT0gTlVMTCkKLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbGVuZ3RoLCBOVUxMKTsKLSAgZWxzZQotICAgIGJ1ZiA9ICpidWZmZXI7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfV1JJVEUpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAiUmVhZGluZyAldSBieXRlcyBmcm9tICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGxlbmd0aCwKLSAgICAgIG9mZnNldCk7Ci0KLSAgZGxidWYtPnJlYWRfcG9zID0gb2Zmc2V0OwotCi0gIGRvIHsKLSAgICByZXMgPQotICAgICAgICBnc3Rfc3BhcnNlX2ZpbGVfcmVhZCAoZGxidWYtPmZpbGUsIG9mZnNldCwgaW5mby5kYXRhLCBsZW5ndGgsCi0gICAgICAgICZyZW1haW5pbmcsICZlcnJvcik7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHJlcyA9PSAwKSkgewotICAgICAgc3dpdGNoIChlcnJvci0+Y29kZSkgewotICAgICAgICBjYXNlIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9XT1VMRF9CTE9DSzoKLSAgICAgICAgICAvKiB3ZSBkb24ndCBoYXZlIHRoZSByZXF1ZXN0ZWQgZGF0YSBpbiB0aGUgZmlsZSwgZGVjaWRlIHdoYXQgdG8KLSAgICAgICAgICAgKiBkbyBuZXh0LiAqLwotICAgICAgICAgIHJldCA9IGdzdF9kb3dubG9hZF9idWZmZXJfd2FpdF9mb3JfZGF0YSAoZGxidWYsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICAgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgZ290byBvdXRfZmx1c2hpbmc7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgZ290byByZWFkX2Vycm9yOwotICAgICAgfQotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycm9yKTsKLSAgICB9Ci0gIH0gd2hpbGUgKHJlcyA9PSAwKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLSAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgcmVzKTsKLQotICBkbGJ1Zi0+Ynl0ZXNfb3V0ICs9IHJlczsKLSAgZGxidWYtPnJlYWRfcG9zICs9IHJlczsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwKLSAgICAgICJSZWFkICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMsIHJlbWFpbmluZyAlIiBHX0dTSVpFX0ZPUk1BVCwgcmVzLAotICAgICAgcmVtYWluaW5nKTsKLQotICBpZiAoZGxidWYtPnJlYWRfcG9zICsgcmVtYWluaW5nID09IGRsYnVmLT51cHN0cmVhbV9zaXplKQotICAgIHVwZGF0ZV9sZXZlbHMgKGRsYnVmLCBkbGJ1Zi0+bWF4X2xldmVsLmJ5dGVzKTsKLSAgZWxzZQotICAgIHVwZGF0ZV9sZXZlbHMgKGRsYnVmLCByZW1haW5pbmcpOwotCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gb2Zmc2V0OwotICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZikgPSBvZmZzZXQgKyByZXM7Ci0KLSAgKmJ1ZmZlciA9IGJ1ZjsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotaGl0X2VvczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAiRU9TIGhpdCIpOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLW91dF9mbHVzaGluZzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAid2UgYXJlIGZsdXNoaW5nIik7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycm9yKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLSAgICBpZiAoKmJ1ZmZlciA9PSBOVUxMKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLXJlYWRfZXJyb3I6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgIndlIGhhdmUgYSByZWFkIGVycm9yOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyb3IpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICAgIGlmICgqYnVmZmVyID09IE5VTEwpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBNVVRFWF9MT0NLLiBXaWxsIGJyaWVmbHkgcmVsZWFzZSB0aGUgbG9jayB3aGVuIG5vdGlmeWluZwotICogdGhlIHRlbXAgZmlsZW5hbWUuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kb3dubG9hZF9idWZmZXJfb3Blbl90ZW1wX2xvY2F0aW9uX2ZpbGUgKEdzdERvd25sb2FkQnVmZmVyICogZGxidWYpCi17Ci0gIGdpbnQgZmQgPSAtMTsKLSAgZ2NoYXIgKm5hbWUgPSBOVUxMOwotCi0gIGlmIChkbGJ1Zi0+ZmlsZSkKLSAgICBnb3RvIGFscmVhZHlfb3BlbmVkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAib3BlbmluZyB0ZW1wIGZpbGUgJXMiLCBkbGJ1Zi0+dGVtcF90ZW1wbGF0ZSk7Ci0KLSAgLyogSWYgdGVtcF90ZW1wbGF0ZSB3YXMgc2V0LCBhbGxvY2F0ZSBhIGZpbGVuYW1lIGFuZCBvcGVuIHRoYXQgZmlsZSAqLwotCi0gIC8qIG5vdGhpbmcgdG8gZG8gKi8KLSAgaWYgKGRsYnVmLT50ZW1wX3RlbXBsYXRlID09IE5VTEwpCi0gICAgZ290byBub19kaXJlY3Rvcnk7Ci0KLSAgLyogbWFrZSBjb3B5IG9mIHRoZSB0ZW1wbGF0ZSwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhpcyAqLwotICBuYW1lID0gZ19zdHJkdXAgKGRsYnVmLT50ZW1wX3RlbXBsYXRlKTsKLSNpZmRlZiBfX0JJT05JQ19fCi0gIGZkID0gZ19ta3N0ZW1wX2Z1bGwgKG5hbWUsIE9fUkRXUiB8IE9fTEFSR0VGSUxFLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0jZWxzZQotICBmZCA9IGdfbWtzdGVtcCAobmFtZSk7Ci0jZW5kaWYKLSAgaWYgKGZkID09IC0xKQotICAgIGdvdG8gbWtzdGVtcF9mYWlsZWQ7Ci0KLSAgLyogb3BlbiB0aGUgZmlsZSBmb3IgdXBkYXRlL3dyaXRpbmcgKi8KLSAgZGxidWYtPmZpbGUgPSBnc3Rfc3BhcnNlX2ZpbGVfbmV3ICgpOwotICAvKiBlcnJvciBjcmVhdGluZyBmaWxlICovCi0gIGlmICghZ3N0X3NwYXJzZV9maWxlX3NldF9mZCAoZGxidWYtPmZpbGUsIGZkKSkKLSAgICBnb3RvIG9wZW5fZmFpbGVkOwotCi0gIGdfZnJlZSAoZGxidWYtPnRlbXBfbG9jYXRpb24pOwotICBkbGJ1Zi0+dGVtcF9sb2NhdGlvbiA9IG5hbWU7Ci0gIGRsYnVmLT50ZW1wX2ZkID0gZmQ7Ci0gIHJlc2V0X3Bvc2l0aW9ucyAoZGxidWYpOwotCi0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0KLSAgLyogd2UgY2FuJ3QgZW1pdCB0aGUgbm90aWZ5IHdpdGggdGhlIGxvY2sgKi8KLSAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoZGxidWYpLCAidGVtcC1sb2NhdGlvbiIpOwotCi0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DSyAoZGxidWYpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAib3BlbmVkIHRlbXAgZmlsZSAlcyIsIGRsYnVmLT50ZW1wX3RlbXBsYXRlKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWFscmVhZHlfb3BlbmVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJ0ZW1wIGZpbGUgd2FzIGFscmVhZHkgb3BlbiIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci1ub19kaXJlY3Rvcnk6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGxidWYsIFJFU09VUkNFLCBOT1RfRk9VTkQsCi0gICAgICAgIChfKCJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIikpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbWtzdGVtcF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGxidWYsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgIChfKCJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIiksIGRsYnVmLT50ZW1wX3RlbXBsYXRlKSwKLSAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW9wZW5fZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRsYnVmLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAoXygiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIiksIG5hbWUpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGlmIChmZCAhPSAtMSkKLSAgICAgIGNsb3NlIChmZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZG93bmxvYWRfYnVmZmVyX2Nsb3NlX3RlbXBfbG9jYXRpb25fZmlsZSAoR3N0RG93bmxvYWRCdWZmZXIgKiBkbGJ1ZikKLXsKLSAgLyogbm90aGluZyB0byBkbyAqLwotICBpZiAoZGxidWYtPmZpbGUgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJjbG9zaW5nIHNwYXJzZSBmaWxlIik7Ci0KLSAgaWYgKGRsYnVmLT50ZW1wX3JlbW92ZSkgewotICAgIGlmIChyZW1vdmUgKGRsYnVmLT50ZW1wX2xvY2F0aW9uKSA8IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGxidWYsICJGYWlsZWQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlICVzOiAlcyIsCi0gICAgICAgICAgZGxidWYtPnRlbXBfbG9jYXRpb24sIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgfQotICB9Ci0gIGdzdF9zcGFyc2VfZmlsZV9mcmVlIChkbGJ1Zi0+ZmlsZSk7Ci0gIGNsb3NlIChkbGJ1Zi0+dGVtcF9mZCk7Ci0gIGRsYnVmLT5maWxlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kb3dubG9hZF9idWZmZXJfZmx1c2hfdGVtcF9maWxlIChHc3REb3dubG9hZEJ1ZmZlciAqIGRsYnVmKQotewotICBpZiAoZGxidWYtPmZpbGUgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJmbHVzaGluZyB0ZW1wIGZpbGUiKTsKLQotICBnc3Rfc3BhcnNlX2ZpbGVfY2xlYXIgKGRsYnVmLT5maWxlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kb3dubG9hZF9idWZmZXJfbG9ja2VkX2ZsdXNoIChHc3REb3dubG9hZEJ1ZmZlciAqIGRsYnVmLCBnYm9vbGVhbiBmdWxsLAotICAgIGdib29sZWFuIGNsZWFyX3RlbXApCi17Ci0gIGlmIChjbGVhcl90ZW1wKQotICAgIGdzdF9kb3dubG9hZF9idWZmZXJfZmx1c2hfdGVtcF9maWxlIChkbGJ1Zik7Ci0gIHJlc2V0X3Bvc2l0aW9ucyAoZGxidWYpOwotICBnc3RfZXZlbnRfcmVwbGFjZSAoJmRsYnVmLT5zdHJlYW1fc3RhcnRfZXZlbnQsIE5VTEwpOwotICBnc3RfZXZlbnRfcmVwbGFjZSAoJmRsYnVmLT5zZWdtZW50X2V2ZW50LCBOVUxMKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZG93bmxvYWRfYnVmZmVyX2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWY7Ci0KLSAgZGxidWYgPSBHU1RfRE9XTkxPQURfQlVGRkVSIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkbGJ1ZiwgInJlY2VpdmVkIGZsdXNoIHN0YXJ0IGV2ZW50Iik7Ci0gICAgICBpZiAoR1NUX1BBRF9NT0RFIChkbGJ1Zi0+c3JjcGFkKSA9PSBHU1RfUEFEX01PREVfUFVTSCkgewotICAgICAgICAvKiBmb3J3YXJkIGV2ZW50ICovCi0gICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGxidWYtPnNyY3BhZCwgZXZlbnQpOwotCi0gICAgICAgIC8qIG5vdyB1bmJsb2NrIHRoZSBjaGFpbiBmdW5jdGlvbiAqLwotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKGRsYnVmKTsKLSAgICAgICAgZGxidWYtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgICAvKiB1bmJsb2NrIHRoZSBsb29wIGFuZCBjaGFpbiBmdW5jdGlvbnMgKi8KLSAgICAgICAgR1NUX0RPV05MT0FEX0JVRkZFUl9TSUdOQUxfQUREIChkbGJ1ZiwgLTEpOwotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotCi0gICAgICAgIC8qIG1ha2Ugc3VyZSBpdCBwYXVzZXMsIHRoaXMgc2hvdWxkIGhhcHBlbiBzaW5jZSB3ZSBzZW50Ci0gICAgICAgICAqIGZsdXNoX3N0YXJ0IGRvd25zdHJlYW0uICovCi0gICAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoZGxidWYtPnNyY3BhZCk7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChkbGJ1ZiwgImxvb3Agc3RvcHBlZCIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9MT0NLIChkbGJ1Zik7Ci0gICAgICAgIC8qIGZsdXNoIHRoZSBzaW5rIHBhZCAqLwotICAgICAgICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKGRsYnVmLCAicmVjZWl2ZWQgZmx1c2ggc3RvcCBldmVudCIpOwotCi0gICAgICBpZiAoR1NUX1BBRF9NT0RFIChkbGJ1Zi0+c3JjcGFkKSA9PSBHU1RfUEFEX01PREVfUFVTSCkgewotICAgICAgICAvKiBmb3J3YXJkIGV2ZW50ICovCi0gICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGxidWYtPnNyY3BhZCwgZXZlbnQpOwotCi0gICAgICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DSyAoZGxidWYpOwotICAgICAgICBnc3RfZG93bmxvYWRfYnVmZmVyX2xvY2tlZF9mbHVzaCAoZGxidWYsIEZBTFNFLCBUUlVFKTsKLSAgICAgICAgZGxidWYtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgICBkbGJ1Zi0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgICBkbGJ1Zi0+c2Vla2luZyA9IEZBTFNFOwotICAgICAgICAvKiByZXNldCByYXRlIGNvdW50ZXJzICovCi0gICAgICAgIHJlc2V0X3JhdGVfdGltZXIgKGRsYnVmKTsKLSAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrIChkbGJ1Zi0+c3JjcGFkLAotICAgICAgICAgICAgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2Rvd25sb2FkX2J1ZmZlcl9sb29wLCBkbGJ1Zi0+c3JjcGFkLCBOVUxMKTsKLSAgICAgICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DSyAoZGxidWYpOwotICAgICAgICBkbGJ1Zi0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgICBkbGJ1Zi0+c2Vla2luZyA9IEZBTFNFOwotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSkgewotICAgICAgICBHc3RNZXNzYWdlICptc2cgPSBOVUxMOwotCi0gICAgICAgIC8qIHNlcmlhbGl6ZWQgZXZlbnRzIGdvIGluIHRoZSBidWZmZXIgKi8KLSAgICAgICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9MT0NLX0NIRUNLIChkbGJ1ZiwgZGxidWYtPnNpbmtyZXN1bHQsCi0gICAgICAgICAgICBvdXRfZmx1c2hpbmcpOwotICAgICAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgIndlIGhhdmUgRU9TIik7Ci0gICAgICAgICAgICAvKiBaZXJvIHRoZSB0aHJlc2hvbGRzLCB0aGlzIG1ha2VzIHN1cmUgdGhlIGRsYnVmIGlzIGNvbXBsZXRlbHkKLSAgICAgICAgICAgICAqIGZpbGxlZCBhbmQgd2UgY2FuIHJlYWQgYWxsIGRhdGEgZnJvbSB0aGUgZGxidWYuICovCi0gICAgICAgICAgICAvKiB1cGRhdGUgdGhlIGJ1ZmZlcmluZyBzdGF0dXMgKi8KLSAgICAgICAgICAgIHVwZGF0ZV9sZXZlbHMgKGRsYnVmLCBkbGJ1Zi0+bWF4X2xldmVsLmJ5dGVzKTsKLSAgICAgICAgICAgIC8qIHVwZGF0ZSB0aGUgYnVmZmVyaW5nICovCi0gICAgICAgICAgICBtc2cgPSB1cGRhdGVfYnVmZmVyaW5nIChkbGJ1Zik7Ci0gICAgICAgICAgICAvKiB3YWtldXAgdGhlIHdhaXRlciBhbmQgbGV0IGl0IHJlY2hlY2sgKi8KLSAgICAgICAgICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfU0lHTkFMX0FERCAoZGxidWYsIC0xKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJmRsYnVmLT5zZWdtZW50X2V2ZW50LCBldmVudCk7Ci0gICAgICAgICAgICAvKiBhIG5ldyBzZWdtZW50IGFsbG93cyB1cyB0byBhY2NlcHQgbW9yZSBidWZmZXJzIGlmIHdlIGdvdCBFT1MKLSAgICAgICAgICAgICAqIGZyb20gZG93bnN0cmVhbSAqLwotICAgICAgICAgICAgZGxidWYtPnVuZXhwZWN0ZWQgPSBGQUxTRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVDoKLSAgICAgICAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmZGxidWYtPnN0cmVhbV9zdGFydF9ldmVudCwgZXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotICAgICAgICBpZiAobXNnICE9IE5VTEwpCi0gICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChkbGJ1ZiksIG1zZyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBub24tc2VyaWFsaXplZCBldmVudHMgYXJlIHBhc3NlZCB1cHN0cmVhbS4gKi8KLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChkbGJ1Zi0+c3JjcGFkLCBldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJyZWZ1c2luZyBldmVudCwgd2UgYXJlIGZsdXNoaW5nIik7Ci0gICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZG93bmxvYWRfYnVmZmVyX2hhbmRsZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWY7Ci0gIGdib29sZWFuIHJlczsKLQotICBkbGJ1ZiA9IEdTVF9ET1dOTE9BRF9CVUZGRVIgKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCAocXVlcnkpKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChkbGJ1ZiwgInJlY2VpdmVkIHF1ZXJ5ICVwIiwgcXVlcnkpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgInJlZnVzaW5nIHF1ZXJ5LCB3ZSBhcmUgbm90IHVzaW5nIHRoZSBkbGJ1ZiIpOwotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZG93bmxvYWRfYnVmZmVyX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWY7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0gIGdzaXplIHJlcywgYXZhaWxhYmxlOwotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgR3N0TWVzc2FnZSAqbXNnID0gTlVMTDsKLQotICBkbGJ1ZiA9IEdTVF9ET1dOTE9BRF9CVUZGRVIgKHBhcmVudCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRsYnVmLCAicmVjZWl2ZWQgYnVmZmVyICVwIG9mICIKLSAgICAgICJzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIsIGR1cmF0aW9uICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIGJ1ZmZlciwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikpKTsKLQotICAvKiB3ZSBoYXZlIHRvIGxvY2sgdGhlIGRsYnVmIHNpbmNlIHdlIHNwYW4gdGhyZWFkcyAqLwotICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0tfQ0hFQ0sgKGRsYnVmLCBkbGJ1Zi0+c2lua3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgLyogd2hlbiB3ZSByZWNlaXZlZCB1bmV4cGVjdGVkIGZyb20gZG93bnN0cmVhbSwgcmVmdXNlIG1vcmUgYnVmZmVycyAqLwotICBpZiAoZGxidWYtPnVuZXhwZWN0ZWQpCi0gICAgZ290byBvdXRfZW9zOwotCi0gIC8qIHdoaWxlIHdlIGRpZG4ndCByZWNlaXZlIHRoZSBuZXdzZWdtZW50LCB3ZSdyZSBzZWVraW5nIGFuZCB3ZSBza2lwIGRhdGEgKi8KLSAgaWYgKGRsYnVmLT5zZWVraW5nKQotICAgIGdvdG8gb3V0X3NlZWtpbmc7Ci0KLSAgLyogcHV0IGJ1ZmZlciBpbiBkbGJ1ZiBub3cgKi8KLSAgb2Zmc2V0ID0gZGxidWYtPndyaXRlX3BvczsKLQotICAvKiBzYW5pdHkgY2hlY2sgKi8KLSAgaWYgKEdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEIChidWZmZXIpICYmCi0gICAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSAhPSBvZmZzZXQpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRsYnVmLCAiYnVmZmVyIG9mZnNldCBkb2VzIG5vdCBtYXRjaCBjdXJyZW50IHdyaXRpbmcgIgotICAgICAgICAicG9zaXRpb24hICUiIEdfR0lOVDY0X0ZPUk1BVCAiICE9ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlciksIG9mZnNldCk7Ci0gIH0KLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgIldyaXRpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyB0byAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgaW5mby5zaXplLCBvZmZzZXQpOwotCi0gIHJlcyA9Ci0gICAgICBnc3Rfc3BhcnNlX2ZpbGVfd3JpdGUgKGRsYnVmLT5maWxlLCBvZmZzZXQsIGluZm8uZGF0YSwgaW5mby5zaXplLAotICAgICAgJmF2YWlsYWJsZSwgJmVycm9yKTsKLSAgaWYgKHJlcyA9PSAwKQotICAgIGdvdG8gd3JpdGVfZXJyb3I7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgZGxidWYtPndyaXRlX3BvcyA9IG9mZnNldCArIGluZm8uc2l6ZTsKLSAgZGxidWYtPmJ5dGVzX2luICs9IGluZm8uc2l6ZTsKLQotICBHU1RfRE9XTkxPQURfQlVGRkVSX1NJR05BTF9BREQgKGRsYnVmLCBkbGJ1Zi0+d3JpdGVfcG9zICsgYXZhaWxhYmxlKTsKLQotICAvKiB3ZSBoaXQgdGhlIGVuZCwgc2VlIHdoYXQgdG8gZG8gKi8KLSAgaWYgKGRsYnVmLT53cml0ZV9wb3MgKyBhdmFpbGFibGUgPT0gZGxidWYtPnVwc3RyZWFtX3NpemUpIHsKLSAgICBnc2l6ZSBzdGFydCwgc3RvcDsKLQotICAgIC8qIHdlIGhhdmUgZXZlcnl0aGluZyB1cCB0byB0aGUgZW5kLCBmaW5kIGEgcmVnaW9uIHRvIGZpbGwgKi8KLSAgICBpZiAoZ3N0X3NwYXJzZV9maWxlX2dldF9yYW5nZV9hZnRlciAoZGxidWYtPmZpbGUsIDAsICZzdGFydCwgJnN0b3ApKSB7Ci0gICAgICBpZiAoc3RvcCA8IGRsYnVmLT51cHN0cmVhbV9zaXplKSB7Ci0gICAgICAgIC8qIGEgaG9sZSB0byBmaWxsLCBzZWVrIHRvIGl0cyBlbmQgKi8KLSAgICAgICAgcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoZGxidWYsIHN0b3ApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogd2UgZmlsbGVkIGFsbCB0aGUgaG9sZXMsIHdlIGFyZSBkb25lICovCi0gICAgICAgIGdvdG8gY29tcGxldGVkOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBzZWUgaWYgd2UgbmVlZCB0byBza2lwIHRoaXMgcmVnaW9uIG9yIGp1c3QgcmVhZCBpdCBhZ2Fpbi4gVGhlIGlkZWEKLSAgICAgKiBpcyB0aGF0IHdoZW4gdGhlIHJlZ2lvbiBpcyBub3QgYmlnLCB3ZSB3YW50IHRvIGF2b2lkIGEgc2VlayBhbmQganVzdAotICAgICAqIGxldCBpdCByZXJlYWQgKi8KLSAgICBndWludDY0IHRocmVzaG9sZCA9IGdldF9zZWVrX3RocmVzaG9sZCAoZGxidWYpOwotCi0gICAgaWYgKGF2YWlsYWJsZSA+IHRocmVzaG9sZCkgewotICAgICAgLyogZnVydGhlciB0aGFuIHRocmVzaG9sZCwgaXQncyBiZXR0ZXIgdG8gc2tpcCB0aGFuIHRvIHJlcmVhZCAqLwotICAgICAgcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoZGxidWYsIGRsYnVmLT53cml0ZV9wb3MgKyBhdmFpbGFibGUpOwotICAgIH0KLSAgfQotICBpZiAoZGxidWYtPmZpbGxpbmcpIHsKLSAgICBpZiAoZGxidWYtPndyaXRlX3BvcyA+IGRsYnVmLT5yZWFkX3BvcykKLSAgICAgIHVwZGF0ZV9sZXZlbHMgKGRsYnVmLCBkbGJ1Zi0+d3JpdGVfcG9zIC0gZGxidWYtPnJlYWRfcG9zKTsKLSAgICBlbHNlCi0gICAgICB1cGRhdGVfbGV2ZWxzIChkbGJ1ZiwgMCk7Ci0gIH0KLQotICAvKiB1cGRhdGUgdGhlIGJ1ZmZlcmluZyAqLwotICBtc2cgPSB1cGRhdGVfYnVmZmVyaW5nIChkbGJ1Zik7Ci0KLSAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLQotICBpZiAobXNnICE9IE5VTEwpCi0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChkbGJ1ZiksIG1zZyk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR3N0Rmxvd1JldHVybiByZXQgPSBkbGJ1Zi0+c2lua3Jlc3VsdDsKLSAgICBHU1RfTE9HX09CSkVDVCAoZGxidWYsCi0gICAgICAgICJleGl0IGJlY2F1c2UgdGFzayBwYXVzZWQsIHJlYXNvbjogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLW91dF9lb3M6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoZGxidWYsICJleGl0IGJlY2F1c2Ugd2UgcmVjZWl2ZWQgRU9TIik7Ci0gICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLW91dF9zZWVraW5nOgotICB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRsYnVmLCAiZXhpdCBiZWNhdXNlIHdlIGFyZSBzZWVraW5nIik7Ci0gICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotd3JpdGVfZXJyb3I6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkbGJ1ZiwgUkVTT1VSQ0UsIFdSSVRFLAotICAgICAgICAoXygiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIpKSwgKCIlcyIsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycm9yKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWNvbXBsZXRlZDoKLSAgewotICAgIEdTVF9MT0dfT0JKRUNUIChkbGJ1ZiwgIndlIGNvbXBsZXRlZCB0aGUgZG93bmxvYWQiKTsKLSAgICBkbGJ1Zi0+d3JpdGVfcG9zID0gZGxidWYtPnVwc3RyZWFtX3NpemU7Ci0gICAgZGxidWYtPmZpbGxpbmcgPSBGQUxTRTsKLSAgICB1cGRhdGVfbGV2ZWxzIChkbGJ1ZiwgZGxidWYtPm1heF9sZXZlbC5ieXRlcyk7Ci0gICAgbXNnID0gdXBkYXRlX2J1ZmZlcmluZyAoZGxidWYpOwotCi0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChkbGJ1ZiksCi0gICAgICAgIGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUX0NBU1QgKGRsYnVmKSwKLSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiR3N0Q2FjaGVEb3dubG9hZENvbXBsZXRlIiwKLSAgICAgICAgICAgICAgICAibG9jYXRpb24iLCBHX1RZUEVfU1RSSU5HLCBkbGJ1Zi0+dGVtcF9sb2NhdGlvbiwgTlVMTCkpKTsKLQotICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0KLSAgICBpZiAobXNnICE9IE5VTEwpCi0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGRsYnVmKSwgbXNnKTsKLQotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLX0KLQotLyogY2FsbGVkIHJlcGVhdGVkbHkgd2l0aCBAcGFkIGFzIHRoZSBzb3VyY2UgcGFkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBwdXNoIG91dAotICogZGF0YSB0byB0aGUgcGVlciBlbGVtZW50LiAqLwotc3RhdGljIHZvaWQKLWdzdF9kb3dubG9hZF9idWZmZXJfbG9vcCAoR3N0UGFkICogcGFkKQotewotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXIgKmJ1ZmZlciA9IE5VTEw7Ci0gIEdzdE1lc3NhZ2UgKm1zZyA9IE5VTEw7Ci0KLSAgZGxidWYgPSBHU1RfRE9XTkxPQURfQlVGRkVSIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7Ci0KLSAgLyogaGF2ZSB0byBsb2NrIGZvciB0aHJlYWQtc2FmZXR5ICovCi0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DS19DSEVDSyAoZGxidWYsIGRsYnVmLT5zcmNyZXN1bHQsIG91dF9mbHVzaGluZyk7Ci0KLSAgaWYgKGRsYnVmLT5zdHJlYW1fc3RhcnRfZXZlbnQgIT0gTlVMTCkgewotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGxidWYtPnNyY3BhZCwgZGxidWYtPnN0cmVhbV9zdGFydF9ldmVudCk7Ci0gICAgZGxidWYtPnN0cmVhbV9zdGFydF9ldmVudCA9IE5VTEw7Ci0gIH0KLSAgaWYgKGRsYnVmLT5zZWdtZW50X2V2ZW50ICE9IE5VTEwpIHsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGRsYnVmLT5zcmNwYWQsIGRsYnVmLT5zZWdtZW50X2V2ZW50KTsKLSAgICBkbGJ1Zi0+c2VnbWVudF9ldmVudCA9IE5VTEw7Ci0gIH0KLQotICByZXQgPSBnc3RfZG93bmxvYWRfYnVmZmVyX3JlYWRfYnVmZmVyIChkbGJ1ZiwgLTEsIC0xLCAmYnVmZmVyKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIG91dF9mbHVzaGluZzsKLQotICAvKiB1cGRhdGUgdGhlIGJ1ZmZlcmluZyAqLwotICBtc2cgPSB1cGRhdGVfYnVmZmVyaW5nIChkbGJ1Zik7Ci0KLSAgZ19hdG9taWNfaW50X3NldCAoJmRsYnVmLT5kb3duc3RyZWFtX21heV9ibG9jaywgMSk7Ci0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0KLSAgaWYgKG1zZyAhPSBOVUxMKQotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGxidWYpLCBtc2cpOwotCi0gIHJldCA9IGdzdF9wYWRfcHVzaCAoZGxidWYtPnNyY3BhZCwgYnVmZmVyKTsKLSAgZ19hdG9taWNfaW50X3NldCAoJmRsYnVmLT5kb3duc3RyZWFtX21heV9ibG9jaywgMCk7Ci0KLSAgLyogbmVlZCB0byBjaGVjayBmb3Igc3JjcmVzdWx0IGhlcmUgYXMgd2VsbCAqLwotICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0tfQ0hFQ0sgKGRsYnVmLCBkbGJ1Zi0+c3JjcmVzdWx0LCBvdXRfZmx1c2hpbmcpOwotICBkbGJ1Zi0+c3JjcmVzdWx0ID0gcmV0OwotICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IHJldDsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIG91dF9mbHVzaGluZzsKLSAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1vdXRfZmx1c2hpbmc6Ci0gIHsKLSAgICBHc3RGbG93UmV0dXJuIHJldCA9IGRsYnVmLT5zcmNyZXN1bHQ7Ci0KLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKGRsYnVmLT5zcmNwYWQpOwotICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRsYnVmLCAicGF1c2UgdGFzaywgcmVhc29uOiAgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgLyogbGV0IGFwcCBrbm93IGFib3V0IHVzIGdpdmluZyB1cCBpZiB1cHN0cmVhbSBpcyBub3QgZXhwZWN0ZWQgdG8gZG8gc28gKi8KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogRklYTUUgcGVyZm9ybSBFT1MgbG9naWMsIHRoaXMgaXMgcmVhbGx5IGEgYmFzZXNyYyBvcGVyYXRpbmcgb24gYQotICAgICAgICogZmlsZS4gKi8KLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGxidWYtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgIH0gZWxzZSBpZiAoKHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEIHx8IHJldCA8IEdTVF9GTE9XX0VPUykpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKGRsYnVmLCByZXQpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChkbGJ1Zi0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kb3dubG9hZF9idWZmZXJfaGFuZGxlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0RG93bmxvYWRCdWZmZXIgKmRsYnVmID0gR1NUX0RPV05MT0FEX0JVRkZFUiAocGFyZW50KTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJnb3QgZXZlbnQgJXAgKCVzKSIsCi0gICAgICBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSNlbmRpZgotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgLyogbm93IHVuYmxvY2sgdGhlIGdldHJhbmdlIGZ1bmN0aW9uICovCi0gICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKGRsYnVmKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAiZmx1c2hpbmciKTsKLSAgICAgIGRsYnVmLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfU0lHTkFMX0FERCAoZGxidWYsIC0xKTsKLSAgICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0KLSAgICAgIC8qIHdoZW4gdXNpbmcgYSB0ZW1wIGZpbGUsIHdlIGVhdCB0aGUgZXZlbnQgKi8KLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICAvKiBub3cgdW5ibG9jayB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24gKi8KLSAgICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DSyAoZGxidWYpOwotICAgICAgZGxidWYtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLQotICAgICAgLyogd2hlbiB1c2luZyBhIHRlbXAgZmlsZSwgd2UgZWF0IHRoZSBldmVudCAqLwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfUkVDT05GSUdVUkU6Ci0gICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKGRsYnVmKTsKLSAgICAgIC8qIGFzc3VtZSBkb3duc3RyZWFtIGlzIGxpbmtlZCBub3cgYW5kIHRyeSB0byBwdXNoIGFnYWluICovCi0gICAgICBpZiAoZGxidWYtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSB7Ci0gICAgICAgIGRsYnVmLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgZGxidWYtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgaWYgKEdTVF9QQURfTU9ERSAocGFkKSA9PSBHU1RfUEFEX01PREVfUFVTSCkgewotICAgICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayAocGFkLCAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfZG93bmxvYWRfYnVmZmVyX2xvb3AsCi0gICAgICAgICAgICAgIHBhZCwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0KLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGxidWYtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGRsYnVmLT5zaW5rcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Rvd25sb2FkX2J1ZmZlcl9oYW5kbGVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWY7Ci0KLSAgZGxidWYgPSBHU1RfRE9XTkxPQURfQlVGRkVSIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIHsKLSAgICAgIGdpbnQ2NCBwZWVyX3BvczsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChkbGJ1Zi0+c2lua3BhZCwgcXVlcnkpKQotICAgICAgICBnb3RvIHBlZXJfZmFpbGVkOwotCi0gICAgICAvKiBnZXQgcGVlciBwb3NpdGlvbiAqLwotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChxdWVyeSwgJmZvcm1hdCwgJnBlZXJfcG9zKTsKLQotICAgICAgLyogRklYTUU6IHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlcmUncyBubyBkaXNjb250IGluIHRoZSBkbGJ1ZiAqLwotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIHBlZXJfcG9zIC09IGRsYnVmLT5jdXJfbGV2ZWwuYnl0ZXM7Ci0gICAgICAgICAgaWYgKHBlZXJfcG9zIDwgMCkgICAgIC8qIENsYW1wIHJlc3VsdCB0byAwICovCi0gICAgICAgICAgICBwZWVyX3BvcyA9IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgICAgIHBlZXJfcG9zIC09IGRsYnVmLT5jdXJfbGV2ZWwudGltZTsKLSAgICAgICAgICBpZiAocGVlcl9wb3MgPCAwKSAgICAgLyogQ2xhbXAgcmVzdWx0IHRvIDAgKi8KLSAgICAgICAgICAgIHBlZXJfcG9zID0gMDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRsYnVmLCAiZHJvcHBpbmcgcXVlcnkgaW4gJXMgZm9ybWF0LCBkb24ndCAiCi0gICAgICAgICAgICAgICJrbm93IGhvdyB0byBhZGp1c3QgdmFsdWUiLCBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpKTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICAvKiBzZXQgdXBkYXRlZCBwb3NpdGlvbiAqLwotICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAocXVlcnksIGZvcm1hdCwgcGVlcl9wb3MpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgotICAgIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAiZG9pbmcgcGVlciBxdWVyeSIpOwotCi0gICAgICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoZGxidWYtPnNpbmtwYWQsIHF1ZXJ5KSkKLSAgICAgICAgZ290byBwZWVyX2ZhaWxlZDsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJwZWVyIHF1ZXJ5IHN1Y2Nlc3MiKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9CVUZGRVJJTkc6Ci0gICAgewotICAgICAgZ2ludCBwZXJjZW50OwotICAgICAgZ2Jvb2xlYW4gaXNfYnVmZmVyaW5nOwotICAgICAgR3N0QnVmZmVyaW5nTW9kZSBtb2RlOwotICAgICAgZ2ludCBhdmdfaW4sIGF2Z19vdXQ7Ci0gICAgICBnaW50NjQgYnVmZmVyaW5nX2xlZnQ7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAicXVlcnkgYnVmZmVyaW5nIik7Ci0KLSAgICAgIGdldF9idWZmZXJpbmdfcGVyY2VudCAoZGxidWYsICZpc19idWZmZXJpbmcsICZwZXJjZW50KTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQgKHF1ZXJ5LCBpc19idWZmZXJpbmcsIHBlcmNlbnQpOwotCi0gICAgICBnZXRfYnVmZmVyaW5nX3N0YXRzIChkbGJ1ZiwgcGVyY2VudCwgJm1vZGUsICZhdmdfaW4sICZhdmdfb3V0LAotICAgICAgICAgICZidWZmZXJpbmdfbGVmdCk7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0cyAocXVlcnksIG1vZGUsIGF2Z19pbiwgYXZnX291dCwKLSAgICAgICAgICBidWZmZXJpbmdfbGVmdCk7Ci0KLSAgICAgIHsKLSAgICAgICAgLyogYWRkIHJhbmdlcyBmb3IgZG93bmxvYWQgYW5kIHJpbmdidWZmZXIgYnVmZmVyaW5nICovCi0gICAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgICAgICAgZ3VpbnQ2NCB3cml0ZV9wb3M7Ci0gICAgICAgIGdpbnQ2NCBlc3RpbWF0ZWRfdG90YWw7Ci0gICAgICAgIGdpbnQ2NCBkdXJhdGlvbjsKLSAgICAgICAgZ3NpemUgb2Zmc2V0LCByYW5nZV9zdGFydCwgcmFuZ2Vfc3RvcDsKLQotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKGRsYnVmKTsKLSAgICAgICAgd3JpdGVfcG9zID0gZGxidWYtPndyaXRlX3BvczsKLQotICAgICAgICAvKiBnZXQgZHVyYXRpb24gb2YgdXBzdHJlYW0gaW4gYnl0ZXMgKi8KLSAgICAgICAgZ3N0X2Rvd25sb2FkX2J1ZmZlcl91cGRhdGVfdXBzdHJlYW1fc2l6ZSAoZGxidWYpOwotICAgICAgICBkdXJhdGlvbiA9IGRsYnVmLT51cHN0cmVhbV9zaXplOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAicGVyY2VudCAlZCwgZHVyYXRpb24gJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAiLCB3cml0aW5nICUiIEdfR0lOVDY0X0ZPUk1BVCwgcGVyY2VudCwgZHVyYXRpb24sIHdyaXRlX3Bvcyk7Ci0KLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19yYW5nZSAocXVlcnksICZmb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgICAgIC8qIGZpbGwgb3V0IHRoZSBidWZmZXJlZCByYW5nZXMgKi8KLSAgICAgICAgc3RhcnQgPSBvZmZzZXQgPSAwOwotICAgICAgICBzdG9wID0gLTE7Ci0gICAgICAgIGVzdGltYXRlZF90b3RhbCA9IC0xOwotICAgICAgICB3aGlsZSAoZ3N0X3NwYXJzZV9maWxlX2dldF9yYW5nZV9hZnRlciAoZGxidWYtPmZpbGUsIG9mZnNldCwKLSAgICAgICAgICAgICAgICAmcmFuZ2Vfc3RhcnQsICZyYW5nZV9zdG9wKSkgewotICAgICAgICAgIGdib29sZWFuIGN1cnJlbnRfcmFuZ2U7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwKLSAgICAgICAgICAgICAgInJhbmdlIHN0YXJ0aW5nIGF0ICUiIEdfR1NJWkVfRk9STUFUICIgYW5kIGZpbmlzaGluZyBhdCAlIgotICAgICAgICAgICAgICBHX0dTSVpFX0ZPUk1BVCwgcmFuZ2Vfc3RhcnQsIHJhbmdlX3N0b3ApOwotCi0gICAgICAgICAgb2Zmc2V0ID0gcmFuZ2Vfc3RvcDsKLQotICAgICAgICAgIC8qIGZpbmQgdGhlIHJhbmdlIHdlIGFyZSBjdXJyZW50bHkgZG93bmxvYWRpbmcsIHdlJ2xsIHJlbWVtYmVyIGl0Ci0gICAgICAgICAgICogYWZ0ZXIgd2UgY29udmVydCB0byB0aGUgdGFyZ2V0IGZvcm1hdCAqLwotICAgICAgICAgIGlmIChyYW5nZV9zdGFydCA8PSB3cml0ZV9wb3MgJiYgcmFuZ2Vfc3RvcCA+PSB3cml0ZV9wb3MpIHsKLSAgICAgICAgICAgIGN1cnJlbnRfcmFuZ2UgPSBUUlVFOwotICAgICAgICAgICAgLyogY2FsY3VsYXRlIHJlbWFpbmluZyBhbmQgdG90YWwgZG93bmxvYWQgdGltZSAqLwotICAgICAgICAgICAgaWYgKGR1cmF0aW9uID49IHJhbmdlX3N0b3AgJiYgYXZnX2luID4gMC4wKQotICAgICAgICAgICAgICBlc3RpbWF0ZWRfdG90YWwgPSAoKGR1cmF0aW9uIC0gcmFuZ2Vfc3RvcCkgKiAxMDAwKSAvIGF2Z19pbjsKLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnRfcmFuZ2UgPSBGQUxTRTsKLQotICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICBjYXNlIEdTVF9GT1JNQVRfUEVSQ0VOVDoKLSAgICAgICAgICAgICAgLyogZ2V0IG91ciBhdmFpbGFibGUgZGF0YSByZWxhdGl2ZSB0byB0aGUgZHVyYXRpb24gKi8KLSAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQgPSAwOwotICAgICAgICAgICAgICAgIHJhbmdlX3N0b3AgPSAwOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJhbmdlX3N0YXJ0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfRk9STUFUX1BFUkNFTlRfTUFYLAotICAgICAgICAgICAgICAgICAgICByYW5nZV9zdGFydCwgZHVyYXRpb24pOwotICAgICAgICAgICAgICAgIHJhbmdlX3N0b3AgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgsCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlX3N0b3AsIGR1cmF0aW9uKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICByYW5nZV9zdGFydCA9IC0xOwotICAgICAgICAgICAgICByYW5nZV9zdG9wID0gLTE7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChjdXJyZW50X3JhbmdlKSB7Ci0gICAgICAgICAgICAvKiB3ZSBhcmUgY3VycmVudGx5IGRvd25sb2FkaW5nIHRoaXMgcmFuZ2UgKi8KLSAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2Vfc3RhcnQ7Ci0gICAgICAgICAgICBzdG9wID0gcmFuZ2Vfc3RvcDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsCi0gICAgICAgICAgICAgICJyYW5nZSB0byBmb3JtYXQ6ICUiIEdfR1NJWkVfRk9STUFUICIgLSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQsIHJhbmdlX3N0b3ApOwotICAgICAgICAgIGlmIChyYW5nZV9zdGFydCA9PSByYW5nZV9zdG9wKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCByYW5nZV9zdGFydCwgcmFuZ2Vfc3RvcCk7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgImVzdGltYXRlZC10b3RhbCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICBlc3RpbWF0ZWRfdG90YWwpOwotCi0gICAgICAgIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgZm9ybWF0LCBzdGFydCwgc3RvcCwKLSAgICAgICAgICAgIGVzdGltYXRlZF90b3RhbCk7Ci0KLSAgICAgICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9TQ0hFRFVMSU5HOgotICAgIHsKLSAgICAgIEdzdFNjaGVkdWxpbmdGbGFncyBmbGFncyA9IDA7Ci0KLSAgICAgIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChkbGJ1Zi0+c2lua3BhZCwgcXVlcnkpKQotICAgICAgICBnb3RvIHBlZXJfZmFpbGVkOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZyAocXVlcnksICZmbGFncywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgIC8qIHdlIGNhbiBvcGVyYXRlIGluIHB1bGwgbW9kZSB3aGVuIHdlIGFyZSB1c2luZyBhIHRlbXBmaWxlICovCi0gICAgICBmbGFncyB8PSBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9zY2hlZHVsaW5nIChxdWVyeSwgZmxhZ3MsIDAsIC0xLCAwKTsKLSAgICAgIGdzdF9xdWVyeV9hZGRfc2NoZWR1bGluZ19tb2RlIChxdWVyeSwgR1NUX1BBRF9NT0RFX1BVTEwpOwotICAgICAgZ3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGUgKHF1ZXJ5LCBHU1RfUEFEX01PREVfUFVTSCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHBlZXIgaGFuZGxlZCBvdGhlciBxdWVyaWVzICovCi0gICAgICBpZiAoIWdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KSkKLSAgICAgICAgZ290byBwZWVyX2ZhaWxlZDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1wZWVyX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAiZmFpbGVkIHBlZXIgcXVlcnkiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZG93bmxvYWRfYnVmZmVyX2hhbmRsZV9xdWVyeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdERvd25sb2FkQnVmZmVyICpkbGJ1ZiA9IEdTVF9ET1dOTE9BRF9CVUZGRVIgKGVsZW1lbnQpOwotCi0gIC8qIHNpbXBseSBmb3J3YXJkIHRvIHRoZSBzcmNwYWQgcXVlcnkgZnVuY3Rpb24gKi8KLSAgcmV0dXJuIGdzdF9kb3dubG9hZF9idWZmZXJfaGFuZGxlX3NyY19xdWVyeSAoZGxidWYtPnNyY3BhZCwKLSAgICAgIEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksIHF1ZXJ5KTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kb3dubG9hZF9idWZmZXJfZ2V0X3JhbmdlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKQotewotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RNZXNzYWdlICptc2cgPSBOVUxMOwotCi0gIGRsYnVmID0gR1NUX0RPV05MT0FEX0JVRkZFUl9DQVNUIChwYXJlbnQpOwotCi0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DS19DSEVDSyAoZGxidWYsIGRsYnVmLT5zcmNyZXN1bHQsIG91dF9mbHVzaGluZyk7Ci0gIC8qIEZJWE1FIC0gZnVuY3Rpb24gd2lsbCBibG9jayB3aGVuIHRoZSByYW5nZSBpcyBub3QgeWV0IGF2YWlsYWJsZSAqLwotICByZXQgPSBnc3RfZG93bmxvYWRfYnVmZmVyX3JlYWRfYnVmZmVyIChkbGJ1Ziwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlcik7Ci0gIC8qIHVwZGF0ZSB0aGUgYnVmZmVyaW5nICovCi0gIG1zZyA9IHVwZGF0ZV9idWZmZXJpbmcgKGRsYnVmKTsKLQotICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotCi0gIGlmIChtc2cgIT0gTlVMTCkKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGRsYnVmKSwgbXNnKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgcmV0ID0gZGxidWYtPnNyY3Jlc3VsdDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAid2UgYXJlIGZsdXNoaW5nIik7Ci0gICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLS8qIHNpbmsgY3VycmVudGx5IG9ubHkgb3BlcmF0ZXMgaW4gcHVzaCBtb2RlICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kb3dubG9hZF9idWZmZXJfc2lua19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWY7Ci0KLSAgZGxidWYgPSBHU1RfRE9XTkxPQURfQlVGRkVSIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DSyAoZGxidWYpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkbGJ1ZiwgImFjdGl2YXRpbmcgcHVzaCBtb2RlIik7Ci0gICAgICAgIGRsYnVmLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgZGxidWYtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgZGxidWYtPnVuZXhwZWN0ZWQgPSBGQUxTRTsKLSAgICAgICAgcmVzZXRfcmF0ZV90aW1lciAoZGxidWYpOwotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogdW5ibG9jayBjaGFpbiBmdW5jdGlvbiAqLwotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKGRsYnVmKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJkZWFjdGl2YXRpbmcgcHVzaCBtb2RlIik7Ci0gICAgICAgIGRsYnVmLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICAgICAgZGxidWYtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICAgICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLQotICAgICAgICAvKiB3YWl0IHVudGlsIGl0IGlzIHVuYmxvY2tlZCBhbmQgY2xlYW4gdXAgKi8KLSAgICAgICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKLSAgICAgICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9MT0NLIChkbGJ1Zik7Ci0gICAgICAgIGdzdF9kb3dubG9hZF9idWZmZXJfbG9ja2VkX2ZsdXNoIChkbGJ1ZiwgVFJVRSwgRkFMU0UpOwotICAgICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotICAgICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgICB9Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogc3JjIG9wZXJhdGluZyBpbiBwdXNoIG1vZGUsIHdlIHN0YXJ0IGEgdGFzayBvbiB0aGUgc291cmNlIHBhZCB0aGF0IHB1c2hlcyBvdXQKLSAqIGJ1ZmZlcnMgZnJvbSB0aGUgZGxidWYgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Rvd25sb2FkX2J1ZmZlcl9zcmNfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLSAgR3N0RG93bmxvYWRCdWZmZXIgKmRsYnVmOwotCi0gIGRsYnVmID0gR1NUX0RPV05MT0FEX0JVRkZFUiAocGFyZW50KTsKLQotICBpZiAoYWN0aXZlKSB7Ci0gICAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9MT0NLIChkbGJ1Zik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGxidWYsICJhY3RpdmF0aW5nIHB1c2ggbW9kZSIpOwotICAgIGRsYnVmLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgIGRsYnVmLT51bmV4cGVjdGVkID0gRkFMU0U7Ci0gICAgcmVzdWx0ID0KLSAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrIChwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9kb3dubG9hZF9idWZmZXJfbG9vcCwKLSAgICAgICAgcGFkLCBOVUxMKTsKLSAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotICB9IGVsc2UgewotICAgIC8qIHVuYmxvY2sgbG9vcCBmdW5jdGlvbiAqLwotICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DSyAoZGxidWYpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAiZGVhY3RpdmF0aW5nIHB1c2ggbW9kZSIpOwotICAgIGRsYnVmLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIC8qIHRoZSBpdGVtIGFkZCBzaWduYWwgd2lsbCB1bmJsb2NrICovCi0gICAgR1NUX0RPV05MT0FEX0JVRkZFUl9TSUdOQUxfQUREIChkbGJ1ZiwgLTEpOwotICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0KLSAgICAvKiBzdGVwIDIsIG1ha2Ugc3VyZSBzdHJlYW1pbmcgZmluaXNoZXMgKi8KLSAgICByZXN1bHQgPSBnc3RfcGFkX3N0b3BfdGFzayAocGFkKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIHB1bGwgbW9kZSwgZG93bnN0cmVhbSB3aWxsIGNhbGwgb3VyIGdldHJhbmdlIGZ1bmN0aW9uICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kb3dubG9hZF9idWZmZXJfc3JjX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWY7Ci0KLSAgZGxidWYgPSBHU1RfRE9XTkxPQURfQlVGRkVSIChwYXJlbnQpOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKGRsYnVmKTsKLSAgICAvKiBvcGVuIHRoZSB0ZW1wIGZpbGUgbm93ICovCi0gICAgcmVzdWx0ID0gZ3N0X2Rvd25sb2FkX2J1ZmZlcl9vcGVuX3RlbXBfbG9jYXRpb25fZmlsZSAoZGxidWYpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAiYWN0aXZhdGluZyBwdWxsIG1vZGUiKTsKLSAgICBkbGJ1Zi0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZGxidWYtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICBkbGJ1Zi0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgIGRsYnVmLT51cHN0cmVhbV9zaXplID0gMDsKLSAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotICB9IGVsc2UgewotICAgIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DSyAoZGxidWYpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRsYnVmLCAiZGVhY3RpdmF0aW5nIHB1bGwgbW9kZSIpOwotICAgIGRsYnVmLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBkbGJ1Zi0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIC8qIHRoaXMgd2lsbCB1bmxvY2sgZ2V0cmFuZ2UgKi8KLSAgICBHU1RfRE9XTkxPQURfQlVGRkVSX1NJR05BTF9BREQgKGRsYnVmLCAtMSk7Ci0gICAgcmVzdWx0ID0gVFJVRTsKLSAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZG93bmxvYWRfYnVmZmVyX3NyY19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICByZXMgPSBnc3RfZG93bmxvYWRfYnVmZmVyX3NyY19hY3RpdmF0ZV9wdWxsIChwYWQsIHBhcmVudCwgYWN0aXZlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICByZXMgPSBnc3RfZG93bmxvYWRfYnVmZmVyX3NyY19hY3RpdmF0ZV9wdXNoIChwYWQsIHBhcmVudCwgYWN0aXZlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAidW5rbm93biBhY3RpdmF0aW9uIG1vZGUgJWQiLCBtb2RlKTsKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfZG93bmxvYWRfYnVmZmVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0RG93bmxvYWRCdWZmZXIgKmRsYnVmOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0KLSAgZGxidWYgPSBHU1RfRE9XTkxPQURfQlVGRkVSIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKGRsYnVmKTsKLSAgICAgIGlmICghZ3N0X2Rvd25sb2FkX2J1ZmZlcl9vcGVuX3RlbXBfbG9jYXRpb25fZmlsZSAoZGxidWYpKQotICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJmRsYnVmLT5zdHJlYW1fc3RhcnRfZXZlbnQsIE5VTEwpOwotICAgICAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZkbGJ1Zi0+c2VnbWVudF9ldmVudCwgTlVMTCk7Ci0gICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgcmV0dXJuIHJldDsKLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICByZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX0xPQ0sgKGRsYnVmKTsKLSAgICAgIGdzdF9kb3dubG9hZF9idWZmZXJfY2xvc2VfdGVtcF9sb2NhdGlvbl9maWxlIChkbGJ1Zik7Ci0gICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJmRsYnVmLT5zdHJlYW1fc3RhcnRfZXZlbnQsIE5VTEwpOwotICAgICAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZkbGJ1Zi0+c2VnbWVudF9ldmVudCwgTlVMTCk7Ci0gICAgICBHU1RfRE9XTkxPQURfQlVGRkVSX01VVEVYX1VOTE9DSyAoZGxidWYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIENBUEFDSVRZX0NIQU5HRShlbGVtKSBcCi0gIHVwZGF0ZV9idWZmZXJpbmcgKGVsZW0pOwotCi1zdGF0aWMgdm9pZAotZ3N0X2Rvd25sb2FkX2J1ZmZlcl9zZXRfdGVtcF90ZW1wbGF0ZSAoR3N0RG93bmxvYWRCdWZmZXIgKiBkbGJ1ZiwKLSAgICBjb25zdCBnY2hhciAqIHRlbXBsYXRlKQotewotICBHc3RTdGF0ZSBzdGF0ZTsKLQotICAvKiB0aGUgZWxlbWVudCBtdXN0IGJlIHN0b3BwZWQgaW4gb3JkZXIgdG8gZG8gdGhpcyAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGRsYnVmKTsKLSAgc3RhdGUgPSBHU1RfU1RBVEUgKGRsYnVmKTsKLSAgaWYgKHN0YXRlICE9IEdTVF9TVEFURV9SRUFEWSAmJiBzdGF0ZSAhPSBHU1RfU1RBVEVfTlVMTCkKLSAgICBnb3RvIHdyb25nX3N0YXRlOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZGxidWYpOwotCi0gIC8qIHNldCBuZXcgbG9jYXRpb24gKi8KLSAgZ19mcmVlIChkbGJ1Zi0+dGVtcF90ZW1wbGF0ZSk7Ci0gIGRsYnVmLT50ZW1wX3RlbXBsYXRlID0gZ19zdHJkdXAgKHRlbXBsYXRlKTsKLQotICByZXR1cm47Ci0KLS8qIEVSUk9SICovCi13cm9uZ19zdGF0ZToKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGxidWYsICJzZXR0aW5nIHRlbXAtdGVtcGxhdGUgcHJvcGVydHkgaW4gd3Jvbmcgc3RhdGUiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGxidWYpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZG93bmxvYWRfYnVmZmVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWYgPSBHU1RfRE9XTkxPQURfQlVGRkVSIChvYmplY3QpOwotICBHc3RNZXNzYWdlICptc2cgPSBOVUxMOwotCi0gIC8qIHNvbWVvbmUgY291bGQgY2hhbmdlIGxldmVscyBoZXJlLCBhbmQgc2luY2UgdGhpcwotICAgKiBhZmZlY3RzIHRoZSBnZXQvcHV0IGZ1bmNzLCB3ZSBuZWVkIHRvIGxvY2sgZm9yIHNhZmV0eS4gKi8KLSAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9MT0NLIChkbGJ1Zik7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01BWF9TSVpFX0JZVEVTOgotICAgICAgZGxidWYtPm1heF9sZXZlbC5ieXRlcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIG1zZyA9IENBUEFDSVRZX0NIQU5HRSAoZGxidWYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9TSVpFX1RJTUU6Ci0gICAgICBkbGJ1Zi0+bWF4X2xldmVsLnRpbWUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIG1zZyA9IENBUEFDSVRZX0NIQU5HRSAoZGxidWYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPV19QRVJDRU5UOgotICAgICAgZGxidWYtPmxvd19wZXJjZW50ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSElHSF9QRVJDRU5UOgotICAgICAgZGxidWYtPmhpZ2hfcGVyY2VudCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RFTVBfVEVNUExBVEU6Ci0gICAgICBnc3RfZG93bmxvYWRfYnVmZmVyX3NldF90ZW1wX3RlbXBsYXRlIChkbGJ1ZiwgZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RFTVBfUkVNT1ZFOgotICAgICAgZGxidWYtPnRlbXBfcmVtb3ZlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfVU5MT0NLIChkbGJ1Zik7Ci0KLSAgaWYgKG1zZyAhPSBOVUxMKQotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGxidWYpLCBtc2cpOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZG93bmxvYWRfYnVmZmVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REb3dubG9hZEJ1ZmZlciAqZGxidWYgPSBHU1RfRE9XTkxPQURfQlVGRkVSIChvYmplY3QpOwotCi0gIEdTVF9ET1dOTE9BRF9CVUZGRVJfTVVURVhfTE9DSyAoZGxidWYpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CWVRFUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBkbGJ1Zi0+bWF4X2xldmVsLmJ5dGVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgZGxidWYtPm1heF9sZXZlbC50aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT1dfUEVSQ0VOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGRsYnVmLT5sb3dfcGVyY2VudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSElHSF9QRVJDRU5UOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZGxidWYtPmhpZ2hfcGVyY2VudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEVNUF9URU1QTEFURToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIGRsYnVmLT50ZW1wX3RlbXBsYXRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9URU1QX0xPQ0FUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgZGxidWYtPnRlbXBfbG9jYXRpb24pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RFTVBfUkVNT1ZFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGRsYnVmLT50ZW1wX3JlbW92ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgR1NUX0RPV05MT0FEX0JVRkZFUl9NVVRFWF9VTkxPQ0sgKGRsYnVmKTsKLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZG93bmxvYWRidWZmZXIuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZG93bmxvYWRidWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM4Y2RkOS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBnc3Rkb3dubG9hZGJ1ZmZlci5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9fR1NUX0RPV05MT0FEX0JVRkZFUl9IX18KLSNkZWZpbmUgX19HU1RfRE9XTkxPQURfQlVGRkVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3RzcGFyc2VmaWxlLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9ET1dOTE9BRF9CVUZGRVIgXAotICAoZ3N0X2Rvd25sb2FkX2J1ZmZlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfRE9XTkxPQURfQlVGRkVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRE9XTkxPQURfQlVGRkVSLEdzdERvd25sb2FkQnVmZmVyKSkKLSNkZWZpbmUgR1NUX0RPV05MT0FEX0JVRkZFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9ET1dOTE9BRF9CVUZGRVIsR3N0RG93bmxvYWRCdWZmZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19ET1dOTE9BRF9CVUZGRVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9ET1dOTE9BRF9CVUZGRVIpKQotI2RlZmluZSBHU1RfSVNfRE9XTkxPQURfQlVGRkVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0RPV05MT0FEX0JVRkZFUikpCi0jZGVmaW5lIEdTVF9ET1dOTE9BRF9CVUZGRVJfQ0FTVChvYmopIFwKLSAgKChHc3REb3dubG9hZEJ1ZmZlciAqKShvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RG93bmxvYWRCdWZmZXIgR3N0RG93bmxvYWRCdWZmZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RG93bmxvYWRCdWZmZXJDbGFzcyBHc3REb3dubG9hZEJ1ZmZlckNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERvd25sb2FkQnVmZmVyU2l6ZSBHc3REb3dubG9hZEJ1ZmZlclNpemU7Ci0KLS8qIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBzaXplcyAoY3VycmVudCBhbmQgbWF4KSAqLwotc3RydWN0IF9Hc3REb3dubG9hZEJ1ZmZlclNpemUKLXsKLSAgZ3VpbnQgYnl0ZXM7Ci0gIGd1aW50NjQgdGltZTsKLX07Ci0KLXN0cnVjdCBfR3N0RG93bmxvYWRCdWZmZXIKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4gKi8KLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RQYWQgKnNyY3BhZDsKLQotICAvKiB1cHN0cmVhbSBzaXplIGluIGJ5dGVzIChpZiBkb3duc3RyZWFtIGlzIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUpICovCi0gIGd1aW50NjQgdXBzdHJlYW1fc2l6ZTsKLQotICAvKiBmbG93cmV0dXJuIHdoZW4gc3JjcGFkIGlzIHBhdXNlZCAqLwotICBHc3RGbG93UmV0dXJuIHNyY3Jlc3VsdDsKLSAgR3N0Rmxvd1JldHVybiBzaW5rcmVzdWx0OwotICBnYm9vbGVhbiB1bmV4cGVjdGVkOwotCi0gIC8qIHRoZSBxdWV1ZSBvZiBkYXRhIHdlJ3JlIGtlZXBpbmcgb3VyIGhhbmRzIG9uICovCi0gIEdzdFNwYXJzZUZpbGUgKmZpbGU7Ci0gIGd1aW50NjQgd3JpdGVfcG9zOwotICBndWludDY0IHJlYWRfcG9zOwotICBnYm9vbGVhbiBmaWxsaW5nOwotCi0gIEdzdERvd25sb2FkQnVmZmVyU2l6ZSBjdXJfbGV2ZWw7Ci0gIEdzdERvd25sb2FkQnVmZmVyU2l6ZSBtYXhfbGV2ZWw7Ci0gIGdpbnQgbG93X3BlcmNlbnQ7ICAgICAgICAgICAgIC8qIGxvdy9oaWdoIHdhdGVybWFya3MgZm9yIGJ1ZmZlcmluZyAqLwotICBnaW50IGhpZ2hfcGVyY2VudDsKLQotICAvKiBjdXJyZW50IGJ1ZmZlcmluZyBzdGF0ZSAqLwotICBnYm9vbGVhbiBpc19idWZmZXJpbmc7Ci0gIGdpbnQgYnVmZmVyaW5nX3BlcmNlbnQ7Ci0KLSAgLyogZm9yIG1lYXN1cmluZyBpbnB1dC9vdXRwdXQgcmF0ZXMgKi8KLSAgR1RpbWVyICppbl90aW1lcjsKLSAgZ2Jvb2xlYW4gaW5fdGltZXJfc3RhcnRlZDsKLSAgZ2RvdWJsZSBsYXN0X2luX2VsYXBzZWQ7Ci0gIGd1aW50NjQgYnl0ZXNfaW47Ci0gIGdkb3VibGUgYnl0ZV9pbl9yYXRlOwotICBnZG91YmxlIGJ5dGVfaW5fcGVyaW9kOwotCi0gIEdUaW1lciAqb3V0X3RpbWVyOwotICBnYm9vbGVhbiBvdXRfdGltZXJfc3RhcnRlZDsKLSAgZ2RvdWJsZSBsYXN0X291dF9lbGFwc2VkOwotICBndWludDY0IGJ5dGVzX291dDsKLSAgZ2RvdWJsZSBieXRlX291dF9yYXRlOwotCi0gIEdNdXRleCBxbG9jazsgICAgICAgICAgICAgICAgLyogbG9jayBmb3IgcXVldWUgKHZzIG9iamVjdCBsb2NrKSAqLwotICBnYm9vbGVhbiB3YWl0aW5nX2FkZDsKLSAgR0NvbmQgaXRlbV9hZGQ7ICAgICAgICAgICAgICAvKiBzaWduYWxzIGJ1ZmZlcnMgbm93IGF2YWlsYWJsZSBmb3IgcmVhZGluZyAqLwotICBndWludDY0IHdhaXRpbmdfb2Zmc2V0OwotCi0gIC8qIHRlbXAgbG9jYXRpb24gc3R1ZmYgKi8KLSAgZ2NoYXIgKnRlbXBfdGVtcGxhdGU7Ci0gIGdib29sZWFuIHRlbXBfbG9jYXRpb25fc2V0OwotICBnY2hhciAqdGVtcF9sb2NhdGlvbjsKLSAgZ2Jvb2xlYW4gdGVtcF9yZW1vdmU7Ci0gIGdpbnQgdGVtcF9mZDsKLSAgZ2Jvb2xlYW4gc2Vla2luZzsKLQotICBHc3RFdmVudCAqc3RyZWFtX3N0YXJ0X2V2ZW50OwotICBHc3RFdmVudCAqc2VnbWVudF9ldmVudDsKLQotICB2b2xhdGlsZSBnaW50IGRvd25zdHJlYW1fbWF5X2Jsb2NrOwotfTsKLQotc3RydWN0IF9Hc3REb3dubG9hZEJ1ZmZlckNsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X2Rvd25sb2FkX2J1ZmZlcl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9ET1dOTE9BRF9CVUZGRVJfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGVsZW1lbnRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMDc4NTUuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3RlbGVtZW50cy5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RjYXBzZmlsdGVyLmgiCi0jaW5jbHVkZSAiZ3N0Y29uY2F0LmgiCi0jaW5jbHVkZSAiZ3N0ZG93bmxvYWRidWZmZXIuaCIKLSNpbmNsdWRlICJnc3RmYWtlc2luay5oIgotI2luY2x1ZGUgImdzdGZha2VzcmMuaCIKLSNpbmNsdWRlICJnc3RmZHNyYy5oIgotI2luY2x1ZGUgImdzdGZkc2luay5oIgotI2luY2x1ZGUgImdzdGZpbGVzaW5rLmgiCi0jaW5jbHVkZSAiZ3N0ZmlsZXNyYy5oIgotI2luY2x1ZGUgImdzdGZ1bm5lbC5oIgotI2luY2x1ZGUgImdzdGlkZW50aXR5LmgiCi0jaW5jbHVkZSAiZ3N0aW5wdXRzZWxlY3Rvci5oIgotI2luY2x1ZGUgImdzdG91dHB1dHNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiZ3N0bXVsdGlxdWV1ZS5oIgotI2luY2x1ZGUgImdzdHF1ZXVlLmgiCi0jaW5jbHVkZSAiZ3N0cXVldWUyLmgiCi0jaW5jbHVkZSAiZ3N0dGVlLmgiCi0jaW5jbHVkZSAiZ3N0dHlwZWZpbmRlbGVtZW50LmgiCi0jaW5jbHVkZSAiZ3N0dmFsdmUuaCIKLSNpbmNsdWRlICJnc3RzdHJlYW1pZGRlbXV4LmgiCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiY2Fwc2ZpbHRlciIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X2NhcHNmaWx0ZXJfZ2V0X3R5cGUgKCkpKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiY29uY2F0IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBnc3RfY29uY2F0X2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImRvd25sb2FkYnVmZmVyIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBnc3RfZG93bmxvYWRfYnVmZmVyX2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImZha2VzcmMiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF9mYWtlX3NyY19nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJmYWtlc2luayIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X2Zha2Vfc2lua19nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotI2lmIGRlZmluZWQoSEFWRV9TWVNfU09DS0VUX0gpIHx8IGRlZmluZWQoX01TQ19WRVIpCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImZkc3JjIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBnc3RfZmRfc3JjX2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImZkc2luayIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X2ZkX3NpbmtfZ2V0X3R5cGUgKCkpKQotICAgIHJldHVybiBGQUxTRTsKLSNlbmRpZgotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJmaWxlc3JjIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBnc3RfZmlsZV9zcmNfZ2V0X3R5cGUgKCkpKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZnVubmVsIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBnc3RfZnVubmVsX2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImlkZW50aXR5IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBnc3RfaWRlbnRpdHlfZ2V0X3R5cGUgKCkpKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiaW5wdXQtc2VsZWN0b3IiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJvdXRwdXQtc2VsZWN0b3IiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X3R5cGUgKCkpKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicXVldWUiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF9xdWV1ZV9nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJxdWV1ZTIiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF9xdWV1ZTJfZ2V0X3R5cGUgKCkpKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZmlsZXNpbmsiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIGdzdF9maWxlX3NpbmtfZ2V0X3R5cGUgKCkpKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAidGVlIiwgR1NUX1JBTktfTk9ORSwgZ3N0X3RlZV9nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ0eXBlZmluZCIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIm11bHRpcXVldWUiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF9tdWx0aV9xdWV1ZV9nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ2YWx2ZSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X3ZhbHZlX2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAic3RyZWFtaWRkZW11eCIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgZ3N0X3N0cmVhbWlkX2RlbXV4X2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsIGNvcmVlbGVtZW50cywKLSAgICAiR1N0cmVhbWVyIGNvcmUgZWxlbWVudHMiLCBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsCi0gICAgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHNfcHJpdmF0ZS5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50c19wcml2YXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ODU1YzguLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50c19wcml2YXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnRAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIGdzdGVsZW1lbnRzX3ByaXZhdGUuYzogU2hhcmVkIGNvZGUgZm9yIGNvcmUgZWxlbWVudHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfVUlPX0gKLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImdzdC9nc3QuaCIKLSNpbmNsdWRlICJnc3RlbGVtZW50c19wcml2YXRlLmgiCi0KLSNpZmRlZiBHX09TX1dJTjMyCi0jICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAgIC8qIHByZXZlbnRzIGZyb20gaW5jbHVkaW5nIHRvbyBtYW55IHRoaW5ncyAqLwotIyAgaW5jbHVkZSA8d2luZG93cy5oPgotIyAgdW5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgotIyAgaWZuZGVmIEVXT1VMREJMT0NLCi0jICBkZWZpbmUgRVdPVUxEQkxPQ0sgRUFHQUlOCi0jICBlbmRpZgotI2VuZGlmIC8qIEdfT1NfV0lOMzIgKi8KLQotI2RlZmluZSBCVUZGRVJfRkxBR19TSElGVCA0Ci0KLUdfU1RBVElDX0FTU0VSVCAoKDEgPDwgQlVGRkVSX0ZMQUdfU0hJRlQpID09IEdTVF9NSU5JX09CSkVDVF9GTEFHX0xBU1QpOwotCi0vKiBSZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyBkZXNjcmliaW5nIHRoZSBmbGFncyBvbiB0aGlzIGJ1ZmZlciAqLwotY2hhciAqCi1nc3RfYnVmZmVyX2dldF9mbGFnc19zdHJpbmcgKEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgc3RhdGljIGNvbnN0IGNoYXIgZmxhZ19zdHJpbmdzW10gPQotICAgICAgIlwwMDBcMDAwXDAwMFwwMDBsaXZlXDAwMGRlY29kZS1vbmx5XDAwMGRpc2NvbnRcMDAwcmVzeW5jXDAwMGNvcnJ1cHRlZFwwMDAiCi0gICAgICAibWFya2VyXDAwMGhlYWRlclwwMDBnYXBcMDAwZHJvcHBhYmxlXDAwMGRlbHRhLXVuaXRcMDAwdGFnLW1lbW9yeVwwMDAiCi0gICAgICAiRklYTUUiOwotICBzdGF0aWMgY29uc3QgZ3VpbnQ4IGZsYWdfaWR4W10gPSB7IDAsIDEsIDIsIDMsIDQsIDksIDIxLCAyOSwgMzYsIDQ2LCA1MywKLSAgICA2MCwgNjQsIDc0LCA4NSwgOTYKLSAgfTsKLSAgaW50IGksIG1heF9ieXRlczsKLSAgY2hhciAqZmxhZ19zdHIsICplbmQ7Ci0KLSAgLyogbWF4IHNpemUgaXMgYWxsIGZsYWcgc3RyaW5ncyBwbHVzIGEgc3BhY2Ugb3IgdGVybWluYXRvciBhZnRlciBlYWNoIG9uZSAqLwotICBtYXhfYnl0ZXMgPSBzaXplb2YgKGZsYWdfc3RyaW5ncyk7Ci0gIGZsYWdfc3RyID0gZ19tYWxsb2MgKG1heF9ieXRlcyk7Ci0KLSAgZW5kID0gZmxhZ19zdHI7Ci0gIGVuZFswXSA9ICdcMCc7Ci0gIGZvciAoaSA9IEJVRkZFUl9GTEFHX1NISUZUOyBpIDwgR19OX0VMRU1FTlRTIChmbGFnX2lkeCk7IGkrKykgewotICAgIGlmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmZmVyKS0+ZmxhZ3MgJiAoMSA8PCBpKSkgewotICAgICAgc3RyY3B5IChlbmQsIGZsYWdfc3RyaW5ncyArIGZsYWdfaWR4W2ldKTsKLSAgICAgIGVuZCArPSBzdHJsZW4gKGVuZCk7Ci0gICAgICBlbmRbMF0gPSAnICc7Ci0gICAgICBlbmRbMV0gPSAnXDAnOwotICAgICAgZW5kKys7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGZsYWdfc3RyOwotfQotCi0vKiBEZWZpbmUgb3VyIG93biBpb3ZlYyBzdHJ1Y3R1cmUgaGVyZSwgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IHVuY29uZGl0aW9uYWxseQotICogaW4gdGhlIGNvZGUgYmVsb3cgYW5kIHVzZSBhbG1vc3QgdGhlIHNhbWUgY29kZSBwYXRoIGZvciBzeXN0ZW1zIHdoZXJlCi0gKiB3cml0ZXYoKSBpcyBzdXBwb3J0ZWQgYW5kIHRob3NlIHdlcmUgaXQncyBub3Qgc3VwcG9ydGVkICovCi0jaWZuZGVmIEhBVkVfU1lTX1VJT19ICi1zdHJ1Y3QgaW92ZWMKLXsKLSAgZ3BvaW50ZXIgaW92X2Jhc2U7Ci0gIGdzaXplIGlvdl9sZW47Ci19OwotI2VuZGlmCi0KLS8qIGNvbXBsZXRlbHkgYXJiaXRyYXJ5IHRocmVzaG9sZHMgKi8KLSNkZWZpbmUgRkRTSU5LX01BWF9BTExPQ0FfU0laRSAoNjQgKiAxMDI0KSAgICAgIC8qIDY0ayAqLwotI2RlZmluZSBGRFNJTktfTUFYX01BTExPQ19TSVpFICggOCAqIDEwMjQgKiAxMDI0KSAgICAgICAvKiAgOE0gKi8KLQotLyogVUlPX01BWElPViBpcyBkb2N1bWVudGVkIGluIHdyaXRldigyKSwgYnV0IDxzeXMvdWlvLmg+IG9ubHkKLSAqIGRlY2xhcmVzIGl0IG9uIG9zeC9pb3MgaWYgZGVmaW5lZChLRVJORUwpICovCi0jaWZuZGVmIFVJT19NQVhJT1YKLSNkZWZpbmUgVUlPX01BWElPViA1MTIKLSNlbmRpZgotCi1zdGF0aWMgZ3NzaXplCi1nc3Rfd3JpdGV2IChnaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgZ2ludCBpb3ZjbnQsIGdzaXplIHRvdGFsX2J5dGVzKQotewotICBnc3NpemUgd3JpdHRlbjsKLQotI2lmZGVmIEhBVkVfU1lTX1VJT19ICi0gIGlmIChpb3ZjbnQgPD0gVUlPX01BWElPVikgewotICAgIGRvIHsKLSAgICAgIHdyaXR0ZW4gPSB3cml0ZXYgKGZkLCBpb3YsIGlvdmNudCk7Ci0gICAgfSB3aGlsZSAod3JpdHRlbiA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotICB9IGVsc2UKLSNlbmRpZgotICB7Ci0gICAgZ2ludCBpOwotCi0gICAgLyogV2UgbWVyZ2UgdGhlIG1lbW9yaWVzIGhlcmUgYmVjYXVzZSB0ZWNobmljYWxseSB3cml0ZSgpL3dyaXRldigpIGlzCi0gICAgICogc3VwcG9zZWQgdG8gYmUgYXRvbWljLCB3aGljaCBpdCdzIG5vdCBpZiB3ZSBkbyBtdWx0aXBsZSBzZXBhcmF0ZQotICAgICAqIHdyaXRlKCkgY2FsbHMuIEl0J3MgdmVyeSBkb3VidGZ1bCBhbnlvbmUgY2FyZXMgdGhvdWdoIGluIG91ciB1c2UKLSAgICAgKiBjYXNlcywgYW5kIGl0J3Mgbm90IGNsZWFyIGhvdyB0aGF0IGNhbiBiZSByZWNvbmNpbGVkIHdpdGggdGhlCi0gICAgICogcG9zc2liaWxpdHkgb2Ygc2hvcnQgd3JpdGVzLCBzbyBpbiBhbnkgY2FzZSB3ZSBtaWdodCB3YW50IHRvCi0gICAgICogc2ltcGxpZnkgdGhpcyBsYXRlciBvciBqdXN0IHJlbW92ZSBpdC4gKi8KLSAgICBpZiAodG90YWxfYnl0ZXMgPD0gRkRTSU5LX01BWF9NQUxMT0NfU0laRSkgewotICAgICAgZ2NoYXIgKm1lbSwgKnA7Ci0KLSAgICAgIGlmICh0b3RhbF9ieXRlcyA8PSBGRFNJTktfTUFYX0FMTE9DQV9TSVpFKQotICAgICAgICBtZW0gPSBnX2FsbG9jYSAodG90YWxfYnl0ZXMpOwotICAgICAgZWxzZQotICAgICAgICBtZW0gPSBnX21hbGxvYyAodG90YWxfYnl0ZXMpOwotCi0gICAgICBwID0gbWVtOwotICAgICAgZm9yIChpID0gMDsgaSA8IGlvdmNudDsgKytpKSB7Ci0gICAgICAgIG1lbWNweSAocCwgaW92W2ldLmlvdl9iYXNlLCBpb3ZbaV0uaW92X2xlbik7Ci0gICAgICAgIHAgKz0gaW92W2ldLmlvdl9sZW47Ci0gICAgICB9Ci0KLSAgICAgIGRvIHsKLSAgICAgICAgd3JpdHRlbiA9IHdyaXRlIChmZCwgbWVtLCB0b3RhbF9ieXRlcyk7Ci0gICAgICB9IHdoaWxlICh3cml0dGVuIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLSAgICAgIGlmICh0b3RhbF9ieXRlcyA+IEZEU0lOS19NQVhfQUxMT0NBX1NJWkUpCi0gICAgICAgIGdfZnJlZSAobWVtKTsKLSAgICB9IGVsc2UgewotICAgICAgZ3NzaXplIHJldDsKLQotICAgICAgd3JpdHRlbiA9IDA7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgaW92Y250OyArK2kpIHsKLSAgICAgICAgZG8gewotICAgICAgICAgIHJldCA9IHdyaXRlIChmZCwgaW92W2ldLmlvdl9iYXNlLCBpb3ZbaV0uaW92X2xlbik7Ci0gICAgICAgIH0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotICAgICAgICBpZiAocmV0ID4gMCkKLSAgICAgICAgICB3cml0dGVuICs9IHJldDsKLSAgICAgICAgaWYgKHJldCAhPSBpb3ZbaV0uaW92X2xlbikKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gd3JpdHRlbjsKLX0KLQotc3RhdGljIGdzaXplCi1maWxsX3ZlY3RvcnMgKHN0cnVjdCBpb3ZlYyAqdmVjcywgR3N0TWFwSW5mbyAqIG1hcHMsIGd1aW50IG4sIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0TWVtb3J5ICptZW07Ci0gIGdzaXplIHNpemUgPSAwOwotICBndWludCBpOwotCi0gIGdfYXNzZXJ0IChnc3RfYnVmZmVyX25fbWVtb3J5IChidWYpID09IG4pOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICBtZW0gPSBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5IChidWYsIGkpOwotICAgIGlmIChnc3RfbWVtb3J5X21hcCAobWVtLCAmbWFwc1tpXSwgR1NUX01BUF9SRUFEKSkgewotICAgICAgdmVjc1tpXS5pb3ZfYmFzZSA9IG1hcHNbaV0uZGF0YTsKLSAgICAgIHZlY3NbaV0uaW92X2xlbiA9IG1hcHNbaV0uc2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcgKCJGYWlsZWQgdG8gbWFwIG1lbW9yeSAlcCBmb3IgcmVhZGluZyIsIG1lbSk7Ci0gICAgICB2ZWNzW2ldLmlvdl9iYXNlID0gKHZvaWQgKikgIiI7Ci0gICAgICB2ZWNzW2ldLmlvdl9sZW4gPSAwOwotICAgIH0KLSAgICBzaXplICs9IHZlY3NbaV0uaW92X2xlbjsKLSAgfQotCi0gIHJldHVybiBzaXplOwotfQotCi1Hc3RGbG93UmV0dXJuCi1nc3Rfd3JpdGV2X2J1ZmZlcnMgKEdzdE9iamVjdCAqIHNpbmssIGdpbnQgZmQsIEdzdFBvbGwgKiBmZHNldCwKLSAgICBHc3RCdWZmZXIgKiogYnVmZmVycywgZ3VpbnQgbnVtX2J1ZmZlcnMsIGd1aW50OCAqIG1lbV9udW1zLAotICAgIGd1aW50IHRvdGFsX21lbV9udW0sIGd1aW50NjQgKiB0b3RhbF93cml0dGVuLCBndWludDY0ICogY3VyX3BvcykKLXsKLSAgc3RydWN0IGlvdmVjICp2ZWNzOwotICBHc3RNYXBJbmZvICptYXBfaW5mb3M7Ci0gIEdzdEZsb3dSZXR1cm4gZmxvd19yZXQ7Ci0gIGdzaXplIHNpemUgPSAwOwotICBndWludCBpLCBqOwotCi0gIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAiJXUgYnVmZmVycywgJXUgbWVtb3JpZXMiLCBudW1fYnVmZmVycywgdG90YWxfbWVtX251bSk7Ci0KLSAgdmVjcyA9IGdfbmV3YSAoc3RydWN0IGlvdmVjLCB0b3RhbF9tZW1fbnVtKTsKLSAgbWFwX2luZm9zID0gZ19uZXdhIChHc3RNYXBJbmZvLCB0b3RhbF9tZW1fbnVtKTsKLQotICAvKiBwb3B1bGF0ZSBvdXRwdXQgdmVjdG9ycyAqLwotICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBzaXplICs9IGZpbGxfdmVjdG9ycyAoJnZlY3Nbal0sICZtYXBfaW5mb3Nbal0sIG1lbV9udW1zW2ldLCBidWZmZXJzW2ldKTsKLSAgICBqICs9IG1lbV9udW1zW2ldOwotICB9Ci0KLSAgLyogbm93IHdyaXRlIGl0IGFsbCBvdXQhICovCi0gIHsKLSAgICBnc3NpemUgcmV0LCBsZWZ0OwotICAgIGd1aW50IG5fdmVjcyA9IHRvdGFsX21lbV9udW07Ci0KLSAgICBsZWZ0ID0gc2l6ZTsKLSAgICBkbyB7Ci0jaWZuZGVmIEhBVkVfV0lOMzIKLSAgICAgIGlmIChmZHNldCAhPSBOVUxMKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiZ29pbmcgaW50byBzZWxlY3QsIGhhdmUgJSIgR19HU1NJWkVfRk9STUFUCi0gICAgICAgICAgICAgICIgYnl0ZXMgdG8gd3JpdGUiLCBsZWZ0KTsKLSAgICAgICAgICByZXQgPSBnc3RfcG9sbF93YWl0IChmZHNldCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gICAgICAgIH0gd2hpbGUgKHJldCA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSk7Ci0KLSAgICAgICAgaWYgKHJldCA9PSAtMSkgewotICAgICAgICAgIGlmIChlcnJubyA9PSBFQlVTWSkKLSAgICAgICAgICAgIGdvdG8gc3RvcHBlZDsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBnb3RvIHNlbGVjdF9lcnJvcjsKLSAgICAgICAgfQotICAgICAgfQotI2VuZGlmCi0KLSAgICAgIHJldCA9IGdzdF93cml0ZXYgKGZkLCB2ZWNzLCBuX3ZlY3MsIGxlZnQpOwotCi0gICAgICBpZiAocmV0ID4gMCkgewotICAgICAgICBpZiAodG90YWxfd3JpdHRlbikKLSAgICAgICAgICAqdG90YWxfd3JpdHRlbiArPSByZXQ7Ci0gICAgICAgIGlmIChjdXJfcG9zKQotICAgICAgICAgICpjdXJfcG9zICs9IHJldDsKLSAgICAgIH0KLQotICAgICAgaWYgKHJldCA9PSBsZWZ0KQotICAgICAgICBicmVhazsKLQotICAgICAgaWYgKHJldCA8IDAgJiYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykpIHsKLSAgICAgICAgLyogZG8gbm90aGluZywgdHJ5IGFnYWluICovCi0gICAgICB9IGVsc2UgaWYgKHJldCA8IDApIHsKLSAgICAgICAgZ290byB3cml0ZV9lcnJvcjsKLSAgICAgIH0gZWxzZSBpZiAocmV0IDwgbGVmdCkgewotICAgICAgICAvKiBza2lwIHZlY3RvcnMgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiBpbiBmdWxsICovCi0gICAgICAgIHdoaWxlIChyZXQgPj0gdmVjc1swXS5pb3ZfbGVuKSB7Ci0gICAgICAgICAgcmV0IC09IHZlY3NbMF0uaW92X2xlbjsKLSAgICAgICAgICBsZWZ0IC09IHZlY3NbMF0uaW92X2xlbjsKLSAgICAgICAgICArK3ZlY3M7Ci0gICAgICAgICAgLS1uX3ZlY3M7Ci0gICAgICAgIH0KLSAgICAgICAgZ19hc3NlcnQgKG5fdmVjcyA+IDApOwotICAgICAgICAvKiBza2lwIHBhcnRpYWxseSB3cml0dGVuIHZlY3RvciBkYXRhICovCi0gICAgICAgIGlmIChyZXQgPiAwKSB7Ci0gICAgICAgICAgdmVjc1swXS5pb3ZfbGVuIC09IHJldDsKLSAgICAgICAgICB2ZWNzWzBdLmlvdl9iYXNlID0gKChndWludDggKikgdmVjc1swXS5pb3ZfYmFzZSkgKyByZXQ7Ci0gICAgICAgICAgbGVmdCAtPSByZXQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSNpZmRlZiBIQVZFX1dJTjMyCi0gICAgICAvKiBkbyBzaG9ydCBzbGVlcCBvbiB3aW5kb3dzIHdoZXJlIHdlIGRvbid0IHVzZSBnc3RfcG9sbCgpLAotICAgICAgICogdG8gYXZvaWQgZXhjZXNzaXZlIGJ1c3kgbG9vcGluZyAqLwotICAgICAgaWYgKGZkc2V0ICE9IE5VTEwpCi0gICAgICAgIGdfdXNsZWVwICgxMDAwKTsKLSNlbmRpZgotCi0gICAgfQotICAgIHdoaWxlIChsZWZ0ID4gMCk7Ci0gIH0KLQotICBmbG93X3JldCA9IEdTVF9GTE9XX09LOwotCi1vdXQ6Ci0KLSAgZm9yIChpID0gMDsgaSA8IHRvdGFsX21lbV9udW07ICsraSkKLSAgICBnc3RfbWVtb3J5X3VubWFwIChtYXBfaW5mb3NbaV0ubWVtb3J5LCAmbWFwX2luZm9zW2ldKTsKLQotICByZXR1cm4gZmxvd19yZXQ7Ci0KLS8qIEVSUk9SUyAqLwotI2lmbmRlZiBIQVZFX1dJTjMyCi1zZWxlY3RfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICAgKCJzZWxlY3Qgb24gZmlsZSBkZXNjcmlwdG9yOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJFcnJvciBkdXJpbmcgc2VsZWN0OiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgZmxvd19yZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIG91dDsKLSAgfQotc3RvcHBlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJTZWxlY3Qgc3RvcHBlZCIpOwotICAgIGZsb3dfcmV0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLSNlbmRpZgotd3JpdGVfZXJyb3I6Ci0gIHsKLSAgICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgICBjYXNlIEVOT1NQQzoKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBOT19TUEFDRV9MRUZULCAoTlVMTCksIChOVUxMKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDp7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgV1JJVEUsIChOVUxMKSwKLSAgICAgICAgICAgICgiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIGRlc2NyaXB0b3IgJWQ6ICVzIiwKLSAgICAgICAgICAgICAgICBmZCwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGZsb3dfcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZWxlbWVudHNfcHJpdmF0ZS5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50c19wcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OWIzYjguLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RlbGVtZW50c19wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKgotICogZ3N0X3ByaXZhdGUuaDogUHJpdmF0ZSBoZWFkZXIgZm9yIHdpdGhpbiBsaWJnc3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0VMRU1FTlRTX1BSSVZBVEVfSF9fCi0jZGVmaW5lIF9fR1NUX0VMRU1FTlRTX1BSSVZBVEVfSF9fCi0KLSNpbmNsdWRlICJnc3QvZ3N0LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotR19HTlVDX0lOVEVSTkFMCi1jaGFyICogICAgZ3N0X2J1ZmZlcl9nZXRfZmxhZ3Nfc3RyaW5nICAgICAgICAgICAgICAgICAgIChHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0KLUdfR05VQ19JTlRFUk5BTAotR3N0Rmxvd1JldHVybiAgZ3N0X3dyaXRldl9idWZmZXJzIChHc3RPYmplY3QgKiBzaW5rLCBnaW50IGZkLCBHc3RQb2xsICogZmRzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqKiBidWZmZXJzLCBndWludCBudW1fYnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ4ICogbWVtX251bXMsIGd1aW50IHRvdGFsX21lbV9udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKiB0b3RhbF93cml0dGVuLCBndWludDY0ICogY3VyX3Bvcyk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9FTEVNRU5UU19QUklWQVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWMzZTNhLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDU3NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGZha2VzaW5rLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LWZha2VzaW5rCi0gKiBAc2VlX2Fsc286ICNHc3RGYWtlU3JjCi0gKgotICogRHVtbXkgc2luayB0aGF0IHN3YWxsb3dzIGV2ZXJ5dGhpbmcuCi0gKiAKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MTAwMCAhIGZha2VzaW5rIHN5bmM9ZmFsc2UKLSAqIF18IFJlbmRlciAxMDAwIGF1ZGlvIGJ1ZmZlcnMgKG9mIGRlZmF1bHQgc2l6ZSkgYXMgZmFzdCBhcyBwb3NzaWJsZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RlbGVtZW50c19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0ZmFrZXNpbmsuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfZmFrZV9zaW5rX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9mYWtlX3NpbmtfZGVidWcKLQotLyogRmFrZVNpbmsgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIFNJR05BTF9IQU5ET0ZGLAotICBTSUdOQUxfUFJFUk9MTF9IQU5ET0ZGLAotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX1NZTkMgRkFMU0UKLQotI2RlZmluZSBERUZBVUxUX1NUQVRFX0VSUk9SIEZBS0VfU0lOS19TVEFURV9FUlJPUl9OT05FCi0jZGVmaW5lIERFRkFVTFRfU0lMRU5UIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9EVU1QIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfU0lHTkFMX0hBTkRPRkZTIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfTEFTVF9NRVNTQUdFIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVTSCBUUlVFCi0jZGVmaW5lIERFRkFVTFRfQ0FOX0FDVElWQVRFX1BVTEwgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9OVU1fQlVGRkVSUyAtMQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9TVEFURV9FUlJPUiwKLSAgUFJPUF9TSUxFTlQsCi0gIFBST1BfRFVNUCwKLSAgUFJPUF9TSUdOQUxfSEFORE9GRlMsCi0gIFBST1BfTEFTVF9NRVNTQUdFLAotICBQUk9QX0NBTl9BQ1RJVkFURV9QVVNILAotICBQUk9QX0NBTl9BQ1RJVkFURV9QVUxMLAotICBQUk9QX05VTV9CVUZGRVJTCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX0ZBS0VfU0lOS19TVEFURV9FUlJPUiAoZ3N0X2Zha2Vfc2lua19zdGF0ZV9lcnJvcl9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfZmFrZV9zaW5rX3N0YXRlX2Vycm9yX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZmFrZXNpbmtfc3RhdGVfZXJyb3JfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGZha2VzaW5rX3N0YXRlX2Vycm9yW10gPSB7Ci0gICAge0ZBS0VfU0lOS19TVEFURV9FUlJPUl9OT05FLCAiTm8gc3RhdGUgY2hhbmdlIGVycm9ycyIsICJub25lIn0sCi0gICAge0ZBS0VfU0lOS19TVEFURV9FUlJPUl9OVUxMX1JFQURZLAotICAgICAgICAiRmFpbCBzdGF0ZSBjaGFuZ2UgZnJvbSBOVUxMIHRvIFJFQURZIiwgIm51bGwtdG8tcmVhZHkifSwKLSAgICB7RkFLRV9TSU5LX1NUQVRFX0VSUk9SX1JFQURZX1BBVVNFRCwKLSAgICAgICAgIkZhaWwgc3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gUEFVU0VEIiwgInJlYWR5LXRvLXBhdXNlZCJ9LAotICAgIHtGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1BMQVlJTkcsCi0gICAgICAgICJGYWlsIHN0YXRlIGNoYW5nZSBmcm9tIFBBVVNFRCB0byBQTEFZSU5HIiwgInBhdXNlZC10by1wbGF5aW5nIn0sCi0gICAge0ZBS0VfU0lOS19TVEFURV9FUlJPUl9QTEFZSU5HX1BBVVNFRCwKLSAgICAgICAgIkZhaWwgc3RhdGUgY2hhbmdlIGZyb20gUExBWUlORyB0byBQQVVTRUQiLCAicGxheWluZy10by1wYXVzZWQifSwKLSAgICB7RkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9SRUFEWSwKLSAgICAgICAgIkZhaWwgc3RhdGUgY2hhbmdlIGZyb20gUEFVU0VEIHRvIFJFQURZIiwgInBhdXNlZC10by1yZWFkeSJ9LAotICAgIHtGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfTlVMTCwKLSAgICAgICAgIkZhaWwgc3RhdGUgY2hhbmdlIGZyb20gUkVBRFkgdG8gTlVMTCIsICJyZWFkeS10by1udWxsIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghZmFrZXNpbmtfc3RhdGVfZXJyb3JfdHlwZSkgewotICAgIGZha2VzaW5rX3N0YXRlX2Vycm9yX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RmFrZVNpbmtTdGF0ZUVycm9yIiwgZmFrZXNpbmtfc3RhdGVfZXJyb3IpOwotICB9Ci0gIHJldHVybiBmYWtlc2lua19zdGF0ZV9lcnJvcl90eXBlOwotfQotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2Zha2Vfc2lua19kZWJ1ZywgImZha2VzaW5rIiwgMCwgImZha2VzaW5rIGVsZW1lbnQiKTsKLSNkZWZpbmUgZ3N0X2Zha2Vfc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RmFrZVNpbmssIGdzdF9mYWtlX3NpbmssIEdTVF9UWVBFX0JBU0VfU0lOSywKLSAgICBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9mYWtlX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2Zha2Vfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZmFrZV9zaW5rX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9mYWtlX3NpbmtfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Zha2Vfc2lua19wcmVyb2xsIChHc3RCYXNlU2luayAqIGJzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmFrZV9zaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBic2luaywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9mYWtlX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9mYWtlX3NpbmtfcXVlcnkgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgZ3VpbnQgZ3N0X2Zha2Vfc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi1zdGF0aWMgR1BhcmFtU3BlYyAqcHNwZWNfbGFzdF9tZXNzYWdlID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX3NpbmtfY2xhc3NfaW5pdCAoR3N0RmFrZVNpbmtDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqZ3N0YmFzZV9zaW5rX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0YmFzZV9zaW5rX2NsYXNzID0gR1NUX0JBU0VfU0lOS19DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9mYWtlX3Npbmtfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZmFrZV9zaW5rX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZmFrZV9zaW5rX2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RBVEVfRVJST1IsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInN0YXRlLWVycm9yIiwgIlN0YXRlIEVycm9yIiwKLSAgICAgICAgICAiR2VuZXJhdGUgYSBzdGF0ZSBjaGFuZ2UgZXJyb3IiLCBHU1RfVFlQRV9GQUtFX1NJTktfU1RBVEVfRVJST1IsCi0gICAgICAgICAgREVGQVVMVF9TVEFURV9FUlJPUiwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIHBzcGVjX2xhc3RfbWVzc2FnZSA9IGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsYXN0LW1lc3NhZ2UiLCAiTGFzdCBNZXNzYWdlIiwKLSAgICAgICJUaGUgbWVzc2FnZSBkZXNjcmliaW5nIGN1cnJlbnQgc3RhdHVzIiwgREVGQVVMVF9MQVNUX01FU1NBR0UsCi0gICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFTVF9NRVNTQUdFLAotICAgICAgcHNwZWNfbGFzdF9tZXNzYWdlKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TSUdOQUxfSEFORE9GRlMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNpZ25hbC1oYW5kb2ZmcyIsICJTaWduYWwgaGFuZG9mZnMiLAotICAgICAgICAgICJTZW5kIGEgc2lnbmFsIGJlZm9yZSB1bnJlZmZpbmcgdGhlIGJ1ZmZlciIsIERFRkFVTFRfU0lHTkFMX0hBTkRPRkZTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJTEVOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2lsZW50IiwgIlNpbGVudCIsCi0gICAgICAgICAgIkRvbid0IHByb2R1Y2UgbGFzdF9tZXNzYWdlIGV2ZW50cyIsIERFRkFVTFRfU0lMRU5ULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RVTVAsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImR1bXAiLCAiRHVtcCIsICJEdW1wIGJ1ZmZlciBjb250ZW50cyB0byBzdGRvdXQiLAotICAgICAgICAgIERFRkFVTFRfRFVNUCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX0NBTl9BQ1RJVkFURV9QVVNILAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjYW4tYWN0aXZhdGUtcHVzaCIsICJDYW4gYWN0aXZhdGUgcHVzaCIsCi0gICAgICAgICAgIkNhbiBhY3RpdmF0ZSBpbiBwdXNoIG1vZGUiLCBERUZBVUxUX0NBTl9BQ1RJVkFURV9QVVNILAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9DQU5fQUNUSVZBVEVfUFVMTCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiY2FuLWFjdGl2YXRlLXB1bGwiLCAiQ2FuIGFjdGl2YXRlIHB1bGwiLAotICAgICAgICAgICJDYW4gYWN0aXZhdGUgaW4gcHVsbCBtb2RlIiwgREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVMTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9OVU1fQlVGRkVSUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJudW0tYnVmZmVycyIsICJudW0tYnVmZmVycyIsCi0gICAgICAgICAgIk51bWJlciBvZiBidWZmZXJzIHRvIGFjY2VwdCBnb2luZyBFT1MiLCAtMSwgR19NQVhJTlQsCi0gICAgICAgICAgREVGQVVMVF9OVU1fQlVGRkVSUywgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdEZha2VTaW5rOjpoYW5kb2ZmOgotICAgKiBAZmFrZXNpbms6IHRoZSBmYWtlc2luayBpbnN0YW5jZQotICAgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHRoYXQganVzdCBoYXMgYmVlbiByZWNlaXZlZAotICAgKiBAcGFkOiB0aGUgcGFkIHRoYXQgcmVjZWl2ZWQgaXQKLSAgICoKLSAgICogVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSB1bnJlZmZpbmcgdGhlIGJ1ZmZlci4KLSAgICovCi0gIGdzdF9mYWtlX3Npbmtfc2lnbmFsc1tTSUdOQUxfSEFORE9GRl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiaGFuZG9mZiIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RGYWtlU2lua0NsYXNzLCBoYW5kb2ZmKSwgTlVMTCwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwKLSAgICAgIEdTVF9UWVBFX0JVRkZFUiB8IEdfU0lHTkFMX1RZUEVfU1RBVElDX1NDT1BFLCBHU1RfVFlQRV9QQUQpOwotCi0gIC8qKgotICAgKiBHc3RGYWtlU2luazo6cHJlcm9sbC1oYW5kb2ZmOgotICAgKiBAZmFrZXNpbms6IHRoZSBmYWtlc2luayBpbnN0YW5jZQotICAgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHRoYXQganVzdCBoYXMgYmVlbiByZWNlaXZlZAotICAgKiBAcGFkOiB0aGUgcGFkIHRoYXQgcmVjZWl2ZWQgaXQKLSAgICoKLSAgICogVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIGJlZm9yZSB1bnJlZmZpbmcgdGhlIGJ1ZmZlci4KLSAgICovCi0gIGdzdF9mYWtlX3Npbmtfc2lnbmFsc1tTSUdOQUxfUFJFUk9MTF9IQU5ET0ZGXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJwcmVyb2xsLWhhbmRvZmYiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0RmFrZVNpbmtDbGFzcywgcHJlcm9sbF9oYW5kb2ZmKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwKLSAgICAgIEdTVF9UWVBFX0JVRkZFUiB8IEdfU0lHTkFMX1RZUEVfU1RBVElDX1NDT1BFLCBHU1RfVFlQRV9QQUQpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiRmFrZSBTaW5rIiwKLSAgICAgICJTaW5rIiwKLSAgICAgICJCbGFjayBob2xlIGZvciBkYXRhIiwKLSAgICAgICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiwgIgotICAgICAgIldpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+LCAiCi0gICAgICAiTXIuICdmcmFnLW1lLW1vcmUnIFZhbmRlcndpbmdvIDx3aW5nb0BmbHVlbmRvLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmt0ZW1wbGF0ZSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zaW5rX2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zaW5rX2V2ZW50KTsKLSAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5wcmVyb2xsID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mYWtlX3NpbmtfcHJlcm9sbCk7Ci0gIGdzdGJhc2Vfc2lua19jbGFzcy0+cmVuZGVyID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mYWtlX3NpbmtfcmVuZGVyKTsKLSAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zaW5rX3F1ZXJ5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX3NpbmtfaW5pdCAoR3N0RmFrZVNpbmsgKiBmYWtlc2luaykKLXsKLSAgZmFrZXNpbmstPnNpbGVudCA9IERFRkFVTFRfU0lMRU5UOwotICBmYWtlc2luay0+ZHVtcCA9IERFRkFVTFRfRFVNUDsKLSAgZmFrZXNpbmstPmxhc3RfbWVzc2FnZSA9IGdfc3RyZHVwIChERUZBVUxUX0xBU1RfTUVTU0FHRSk7Ci0gIGZha2VzaW5rLT5zdGF0ZV9lcnJvciA9IERFRkFVTFRfU1RBVEVfRVJST1I7Ci0gIGZha2VzaW5rLT5zaWduYWxfaGFuZG9mZnMgPSBERUZBVUxUX1NJR05BTF9IQU5ET0ZGUzsKLSAgZmFrZXNpbmstPm51bV9idWZmZXJzID0gREVGQVVMVF9OVU1fQlVGRkVSUzsKLQotICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jIChHU1RfQkFTRV9TSU5LIChmYWtlc2luayksIERFRkFVTFRfU1lOQyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmFrZV9zaW5rX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqKQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmFrZV9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RGYWtlU2luayAqc2luazsKLQotICBzaW5rID0gR1NUX0ZBS0VfU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU1RBVEVfRVJST1I6Ci0gICAgICBzaW5rLT5zdGF0ZV9lcnJvciA9IChHc3RGYWtlU2lua1N0YXRlRXJyb3IpIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUxFTlQ6Ci0gICAgICBzaW5rLT5zaWxlbnQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFVNUDoKLSAgICAgIHNpbmstPmR1bXAgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0lHTkFMX0hBTkRPRkZTOgotICAgICAgc2luay0+c2lnbmFsX2hhbmRvZmZzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBTl9BQ1RJVkFURV9QVVNIOgotICAgICAgR1NUX0JBU0VfU0lOSyAoc2luayktPmNhbl9hY3RpdmF0ZV9wdXNoID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBTl9BQ1RJVkFURV9QVUxMOgotICAgICAgR1NUX0JBU0VfU0lOSyAoc2luayktPmNhbl9hY3RpdmF0ZV9wdWxsID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTV9CVUZGRVJTOgotICAgICAgc2luay0+bnVtX2J1ZmZlcnMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEZha2VTaW5rICpzaW5rOwotCi0gIHNpbmsgPSBHU1RfRkFLRV9TSU5LIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TVEFURV9FUlJPUjoKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzaW5rLT5zdGF0ZV9lcnJvcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0lMRU5UOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNpbmstPnNpbGVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFVNUDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzaW5rLT5kdW1wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUdOQUxfSEFORE9GRlM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2luay0+c2lnbmFsX2hhbmRvZmZzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MQVNUX01FU1NBR0U6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2luay0+bGFzdF9tZXNzYWdlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQU5fQUNUSVZBVEVfUFVTSDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBHU1RfQkFTRV9TSU5LIChzaW5rKS0+Y2FuX2FjdGl2YXRlX3B1c2gpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBTl9BQ1RJVkFURV9QVUxMOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIEdTVF9CQVNFX1NJTksgKHNpbmspLT5jYW5fYWN0aXZhdGVfcHVsbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVNX0JVRkZFUlM6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzaW5rLT5udW1fYnVmZmVycyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmFrZV9zaW5rX25vdGlmeV9sYXN0X21lc3NhZ2UgKEdzdEZha2VTaW5rICogc2luaykKLXsKLSAgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjICgoR09iamVjdCAqKSBzaW5rLCBwc3BlY19sYXN0X21lc3NhZ2UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mYWtlX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEZha2VTaW5rICpzaW5rID0gR1NUX0ZBS0VfU0lOSyAoYnNpbmspOwotCi0gIGlmICghc2luay0+c2lsZW50KSB7Ci0gICAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICAgIGNvbnN0IGdjaGFyICp0c3RyOwotICAgIGdjaGFyICpzc3RyOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChzaW5rKTsKLSAgICBnX2ZyZWUgKHNpbmstPmxhc3RfbWVzc2FnZSk7Ci0KLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0lOS19NRVNTQUdFKSB7Ci0gICAgICBHc3RNZXNzYWdlICptc2c7Ci0gICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NpbmtfbWVzc2FnZSAoZXZlbnQsICZtc2cpOwotICAgICAgc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobXNnKTsKLSAgICAgIHNzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3RydWN0dXJlKTsKLSAgICAgIHNpbmstPmxhc3RfbWVzc2FnZSA9Ci0gICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgibWVzc2FnZSAqKioqKioqICglczolcykgTSAodHlwZTogJWQsICVzKSAlcCIsCi0gICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChHU1RfQkFTRV9TSU5LX0NBU1QgKHNpbmspLT5zaW5rcGFkKSwKLSAgICAgICAgICBHU1RfTUVTU0FHRV9UWVBFIChtc2cpLCBzc3RyLCBtc2cpOwotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRzdHIgPSBnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSk7Ci0KLSAgICAgIGlmICgocyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCkpKSB7Ci0gICAgICAgIHNzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzc3RyID0gZ19zdHJkdXAgKCIiKTsKLSAgICAgIH0KLQotICAgICAgc2luay0+bGFzdF9tZXNzYWdlID0KLSAgICAgICAgICBnX3N0cmR1cF9wcmludGYgKCJldmVudCAgICoqKioqKiogKCVzOiVzKSBFICh0eXBlOiAlcyAoJWQpLCAlcykgJXAiLAotICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoR1NUX0JBU0VfU0lOS19DQVNUIChzaW5rKS0+c2lua3BhZCksCi0gICAgICAgICAgdHN0ciwgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSwgc3N0ciwgZXZlbnQpOwotICAgIH0KLSAgICBnX2ZyZWUgKHNzdHIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzaW5rKTsKLQotICAgIGdzdF9mYWtlX3Npbmtfbm90aWZ5X2xhc3RfbWVzc2FnZSAoc2luayk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0JBU0VfU0lOS19DTEFTUyAocGFyZW50X2NsYXNzKS0+ZXZlbnQgKGJzaW5rLCBldmVudCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmFrZV9zaW5rX3ByZXJvbGwgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0RmFrZVNpbmsgKnNpbmsgPSBHU1RfRkFLRV9TSU5LIChic2luayk7Ci0KLSAgaWYgKHNpbmstPm51bV9idWZmZXJzX2xlZnQgPT0gMCkKLSAgICBnb3RvIGVvczsKLQotICBpZiAoIXNpbmstPnNpbGVudCkgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gICAgZ19mcmVlIChzaW5rLT5sYXN0X21lc3NhZ2UpOwotCi0gICAgc2luay0+bGFzdF9tZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRmICgicHJlcm9sbCAgICoqKioqKiogIik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotCi0gICAgZ3N0X2Zha2Vfc2lua19ub3RpZnlfbGFzdF9tZXNzYWdlIChzaW5rKTsKLSAgfQotICBpZiAoc2luay0+c2lnbmFsX2hhbmRvZmZzKSB7Ci0gICAgZ19zaWduYWxfZW1pdCAoc2luaywKLSAgICAgICAgZ3N0X2Zha2Vfc2lua19zaWduYWxzW1NJR05BTF9QUkVST0xMX0hBTkRPRkZdLCAwLCBidWZmZXIsCi0gICAgICAgIGJzaW5rLT5zaW5rcGFkKTsKLSAgfQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAid2UgYXJlIEVPUyIpOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mYWtlX3NpbmtfcmVuZGVyIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZha2VTaW5rICpzaW5rID0gR1NUX0ZBS0VfU0lOS19DQVNUIChic2luayk7Ci0KLSAgaWYgKHNpbmstPm51bV9idWZmZXJzX2xlZnQgPT0gMCkKLSAgICBnb3RvIGVvczsKLQotICBpZiAoc2luay0+bnVtX2J1ZmZlcnNfbGVmdCAhPSAtMSkKLSAgICBzaW5rLT5udW1fYnVmZmVyc19sZWZ0LS07Ci0KLSAgaWYgKCFzaW5rLT5zaWxlbnQpIHsKLSAgICBnY2hhciBkdHNfc3RyWzY0XSwgcHRzX3N0cls2NF0sIGR1cl9zdHJbNjRdOwotICAgIGdjaGFyICpmbGFnX3N0cjsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gICAgZ19mcmVlIChzaW5rLT5sYXN0X21lc3NhZ2UpOwotCi0gICAgaWYgKEdTVF9CVUZGRVJfRFRTIChidWYpICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgIGdfc25wcmludGYgKGR0c19zdHIsIHNpemVvZiAoZHRzX3N0ciksICIlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVFMgKGJ1ZikpKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19zdHJsY3B5IChkdHNfc3RyLCAibm9uZSIsIHNpemVvZiAoZHRzX3N0cikpOwotICAgIH0KLQotICAgIGlmIChHU1RfQlVGRkVSX1BUUyAoYnVmKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICBnX3NucHJpbnRmIChwdHNfc3RyLCBzaXplb2YgKHB0c19zdHIpLCAiJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChidWYpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfc3RybGNweSAocHRzX3N0ciwgIm5vbmUiLCBzaXplb2YgKHB0c19zdHIpKTsKLSAgICB9Ci0KLSAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICBnX3NucHJpbnRmIChkdXJfc3RyLCBzaXplb2YgKGR1cl9zdHIpLCAiJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19zdHJsY3B5IChkdXJfc3RyLCAibm9uZSIsIHNpemVvZiAoZHVyX3N0cikpOwotICAgIH0KLQotICAgIGZsYWdfc3RyID0gZ3N0X2J1ZmZlcl9nZXRfZmxhZ3Nfc3RyaW5nIChidWYpOwotCi0gICAgc2luay0+bGFzdF9tZXNzYWdlID0KLSAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiY2hhaW4gICAqKioqKioqICglczolcykgKCV1IGJ5dGVzLCBkdHM6ICVzLCBwdHM6ICVzIgotICAgICAgICAiLCBkdXJhdGlvbjogJXMsIG9mZnNldDogJSIgR19HSU5UNjRfRk9STUFUICIsIG9mZnNldF9lbmQ6ICUiCi0gICAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiLCBmbGFnczogJTA4eCAlcykgJXAiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKEdTVF9CQVNFX1NJTktfQ0FTVCAoc2luayktPnNpbmtwYWQpLAotICAgICAgICAoZ3VpbnQpIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIGR0c19zdHIsIHB0c19zdHIsCi0gICAgICAgIGR1cl9zdHIsIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpLCBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZiksCi0gICAgICAgIEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWYpLT5mbGFncywgZmxhZ19zdHIsIGJ1Zik7Ci0gICAgZ19mcmVlIChmbGFnX3N0cik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotCi0gICAgZ3N0X2Zha2Vfc2lua19ub3RpZnlfbGFzdF9tZXNzYWdlIChzaW5rKTsKLSAgfQotICBpZiAoc2luay0+c2lnbmFsX2hhbmRvZmZzKQotICAgIGdfc2lnbmFsX2VtaXQgKHNpbmssIGdzdF9mYWtlX3Npbmtfc2lnbmFsc1tTSUdOQUxfSEFORE9GRl0sIDAsIGJ1ZiwKLSAgICAgICAgYnNpbmstPnNpbmtwYWQpOwotCi0gIGlmIChzaW5rLT5kdW1wKSB7Ci0gICAgR3N0TWFwSW5mbyBpbmZvOwotCi0gICAgaWYgKGdzdF9idWZmZXJfbWFwIChidWYsICZpbmZvLCBHU1RfTUFQX1JFQUQpKSB7Ci0gICAgICBnc3RfdXRpbF9kdW1wX21lbSAoaW5mby5kYXRhLCBpbmZvLnNpemUpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mbyk7Ci0gICAgfQotICB9Ci0gIGlmIChzaW5rLT5udW1fYnVmZmVyc19sZWZ0ID09IDApCi0gICAgZ290byBlb3M7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIndlIGFyZSBFT1MiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Zha2Vfc2lua19xdWVyeSAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1NFRUtJTkc6ewotICAgICAgR3N0Rm9ybWF0IGZtdDsKLQotICAgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydGluZyBzZWVraW5nICovCi0gICAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmbXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgZm10LCBGQUxTRSwgMCwgLTEpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gR1NUX0JBU0VfU0lOS19DTEFTUyAocGFyZW50X2NsYXNzKS0+cXVlcnkgKGJzaW5rLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2Zha2Vfc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0gIEdzdEZha2VTaW5rICpmYWtlc2luayA9IEdTVF9GQUtFX1NJTksgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgaWYgKGZha2VzaW5rLT5zdGF0ZV9lcnJvciA9PSBGQUtFX1NJTktfU1RBVEVfRVJST1JfTlVMTF9SRUFEWSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBpZiAoZmFrZXNpbmstPnN0YXRlX2Vycm9yID09IEZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9QQVVTRUQpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICBmYWtlc2luay0+bnVtX2J1ZmZlcnNfbGVmdCA9IGZha2VzaW5rLT5udW1fYnVmZmVyczsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIGlmIChmYWtlc2luay0+c3RhdGVfZXJyb3IgPT0gRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BBVVNFRF9QTEFZSU5HKQotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgaWYgKGZha2VzaW5rLT5zdGF0ZV9lcnJvciA9PSBGQUtFX1NJTktfU1RBVEVfRVJST1JfUExBWUlOR19QQVVTRUQpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgaWYgKGZha2VzaW5rLT5zdGF0ZV9lcnJvciA9PSBGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1JFQURZKQotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBpZiAoZmFrZXNpbmstPnN0YXRlX2Vycm9yID09IEZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9OVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgR1NUX09CSkVDVF9MT0NLIChmYWtlc2luayk7Ci0gICAgICBnX2ZyZWUgKGZha2VzaW5rLT5sYXN0X21lc3NhZ2UpOwotICAgICAgZmFrZXNpbmstPmxhc3RfbWVzc2FnZSA9IE5VTEw7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZmFrZXNpbmspOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUiAqLwotZXJyb3I6Ci0gIEdTVF9FTEVNRU5UX0VSUk9SIChlbGVtZW50LCBDT1JFLCBTVEFURV9DSEFOR0UsIChOVUxMKSwKLSAgICAgICgiRXJyb3Jpbmcgb3V0IG9uIHN0YXRlIGNoYW5nZSBhcyByZXF1ZXN0ZWQiKSk7Ci0gIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYjM2NzEuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdGZha2VzaW5rLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0ZBS0VfU0lOS19IX18KLSNkZWZpbmUgX19HU1RfRkFLRV9TSU5LX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotCi0jZGVmaW5lIEdTVF9UWVBFX0ZBS0VfU0lOSyBcCi0gIChnc3RfZmFrZV9zaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9GQUtFX1NJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9GQUtFX1NJTkssR3N0RmFrZVNpbmspKQotI2RlZmluZSBHU1RfRkFLRV9TSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0ZBS0VfU0lOSyxHc3RGYWtlU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0ZBS0VfU0lOSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0ZBS0VfU0lOSykpCi0jZGVmaW5lIEdTVF9JU19GQUtFX1NJTktfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfRkFLRV9TSU5LKSkKLSNkZWZpbmUgR1NUX0ZBS0VfU0lOS19DQVNUKG9iaikgKChHc3RGYWtlU2luayAqKW9iaikKLQotLyoqCi0gKiBHc3RGYWtlU2lua1N0YXRlRXJyb3I6Ci0gKiBARkFLRV9TSU5LX1NUQVRFX0VSUk9SX05PTkU6IG5vIGVycm9yCi0gKiBARkFLRV9TSU5LX1NUQVRFX0VSUk9SX05VTExfUkVBRFk6IGNhdXNlIHRoZSBOVUxMIHRvIFJFQURZIHN0YXRlIGNoYW5nZSB0byBmYWlsCi0gKiBARkFLRV9TSU5LX1NUQVRFX0VSUk9SX1JFQURZX1BBVVNFRDogY2F1c2UgdGhlIFJFQURZIHRvIFBBVVNFRCBzdGF0ZSBjaGFuZ2UgdG8gZmFpbDoKLSAqIEBGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1BMQVlJTkc6IGNhdXNlIHRoZSBQQVVTRUQgdG8gUExBWUlORyBzdGF0ZSBjaGFuZ2UgdG8gZmFpbDoKLSAqIEBGQUtFX1NJTktfU1RBVEVfRVJST1JfUExBWUlOR19QQVVTRUQ6IGNhdXNlIHRoZSBQTEFZSU5HIHRvIFBBVVNFRCBzdGF0ZSBjaGFuZ2UgdG8gZmFpbDoKLSAqIEBGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1JFQURZOiBjYXVzZSB0aGUgUEFVU0VEIHRvIFJFQURZIHN0YXRlIGNoYW5nZSB0byBmYWlsOgotICogQEZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9OVUxMOiBjYXVzZSB0aGUgUkVBRFkgdG8gTlVMTCBzdGF0ZSBjaGFuZ2UgdG8gZmFpbDoKLSAqCi0gKiBQb3NzaWJsZSBzdGF0ZSBjaGFuZ2UgZXJyb3JzIGZvciB0aGUgc3RhdGUtZXJyb3IgcHJvcGVydHkuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEZBS0VfU0lOS19TVEFURV9FUlJPUl9OT05FID0gMCwKLSAgRkFLRV9TSU5LX1NUQVRFX0VSUk9SX05VTExfUkVBRFksCi0gIEZBS0VfU0lOS19TVEFURV9FUlJPUl9SRUFEWV9QQVVTRUQsCi0gIEZBS0VfU0lOS19TVEFURV9FUlJPUl9QQVVTRURfUExBWUlORywKLSAgRkFLRV9TSU5LX1NUQVRFX0VSUk9SX1BMQVlJTkdfUEFVU0VELAotICBGQUtFX1NJTktfU1RBVEVfRVJST1JfUEFVU0VEX1JFQURZLAotICBGQUtFX1NJTktfU1RBVEVfRVJST1JfUkVBRFlfTlVMTAotfSBHc3RGYWtlU2lua1N0YXRlRXJyb3I7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RGYWtlU2luayBHc3RGYWtlU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGYWtlU2lua0NsYXNzIEdzdEZha2VTaW5rQ2xhc3M7Ci0KLS8qKgotICogR3N0RmFrZVNpbms6Ci0gKgotICogVGhlIG9wYXF1ZSAjR3N0RmFrZVNpbmsgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0RmFrZVNpbmsgewotICBHc3RCYXNlU2luawkJZWxlbWVudDsKLQotICBnYm9vbGVhbgkJc2lsZW50OwotICBnYm9vbGVhbgkJZHVtcDsKLSAgZ2Jvb2xlYW4JCXNpZ25hbF9oYW5kb2ZmczsKLSAgR3N0RmFrZVNpbmtTdGF0ZUVycm9yIHN0YXRlX2Vycm9yOwotICBnY2hhcgkJCSpsYXN0X21lc3NhZ2U7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICBudW1fYnVmZmVyczsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIG51bV9idWZmZXJzX2xlZnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdEZha2VTaW5rQ2xhc3MgewotICBHc3RCYXNlU2lua0NsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWxzICovCi0gIHZvaWQgKCpoYW5kb2ZmKSAoR3N0RWxlbWVudCAqZWxlbWVudCwgR3N0QnVmZmVyICpidWYsIEdzdFBhZCAqcGFkKTsKLSAgdm9pZCAoKnByZXJvbGxfaGFuZG9mZikgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdEJ1ZmZlciAqYnVmLCBHc3RQYWQgKnBhZCk7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X2Zha2Vfc2lua19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9GQUtFX1NJTktfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDQwNDFiLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTE4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0ZmFrZXNyYy5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1mYWtlc3JjCi0gKiBAc2VlX2Fsc286ICNHc3RGYWtlU2luawotICoKLSAqIFRoZSBmYWtlc3JjIGVsZW1lbnQgaXMgYSBtdWx0aXB1cnBvc2UgZWxlbWVudCB0aGF0IGNhbiBnZW5lcmF0ZQotICogYSB3aWRlIHJhbmdlIG9mIGJ1ZmZlcnMgYW5kIGNhbiBvcGVyYXRlIGluIHZhcmlvdXMgc2NoZWR1bGluZyBtb2Rlcy4KLSAqCi0gKiBJdCBpcyBtb3N0bHkgdXNlZCBhcyBhIHRlc3RpbmcgZWxlbWVudCwgb25lIHRyaXZpYWwgZXhhbXBsZSBmb3IgdGVzdGluZwotICogYmFzaWMgPGFwcGxpY2F0aW9uPkdTdHJlYW1lcjwvYXBwbGljYXRpb24+IGNvcmUgZnVuY3Rpb25hbGl0eSBpczoKLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgZmFrZXNyYyBudW0tYnVmZmVycz01ICEgZmFrZXNpbmsKLSAqIF18IFRoaXMgcGlwZWxpbmUgd2lsbCBwdXNoIDUgZW1wdHkgYnVmZmVycyB0byB0aGUgZmFrZXNpbmsgZWxlbWVudCBhbmQgdGhlbgotICogc2VuZHMgYW4gRU9TLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKiBGSVhNRTogdGhpcyBpZ25vcmVzIGJhc2VzcmM6OmJsb2Nrc2l6ZSBwcm9wZXJ0eSwgd2hpY2ggY291bGQgYmUgdXNlZCBhcyBhbgotICogYWxpYXMgdG8gOjpzaXplbWF4IChzZWUgZ3N0X2Jhc2Vfc3JjX2dldF9ibG9ja3NpemUoKSkuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGVsZW1lbnRzX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJnc3RmYWtlc3JjLmgiCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2Zha2Vfc3JjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9mYWtlX3NyY19kZWJ1ZwotCi0vKiBGYWtlU3JjIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBTSUdOQUxfSEFORE9GRiwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9PVVRQVVQgICAgICAgICAgRkFLRV9TUkNfRklSU1RfTEFTVF9MT09QCi0jZGVmaW5lIERFRkFVTFRfREFUQSAgICAgICAgICAgIEZBS0VfU1JDX0RBVEFfQUxMT0NBVEUKLSNkZWZpbmUgREVGQVVMVF9TSVpFVFlQRSAgICAgICAgRkFLRV9TUkNfU0laRVRZUEVfRU1QVFkKLSNkZWZpbmUgREVGQVVMVF9TSVpFTUlOICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX1NJWkVNQVggICAgICAgICA0MDk2Ci0jZGVmaW5lIERFRkFVTFRfRklMTFRZUEUgICAgICAgIEZBS0VfU1JDX0ZJTExUWVBFX1pFUk8KLSNkZWZpbmUgREVGQVVMVF9EQVRBUkFURSAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX1NZTkMgICAgICAgICAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX1BBVFRFUk4gICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfRU9TICAgICAgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfU0lHTkFMX0hBTkRPRkZTIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfU0lMRU5UICAgICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9EVU1QICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9QQVJFTlRTSVpFICAgICAgNDA5NioxMAotI2RlZmluZSBERUZBVUxUX0NBTl9BQ1RJVkFURV9QVUxMIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVTSCBUUlVFCi0jZGVmaW5lIERFRkFVTFRfRk9STUFUICAgICAgICAgIEdTVF9GT1JNQVRfQllURVMKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfT1VUUFVULAotICBQUk9QX0RBVEEsCi0gIFBST1BfU0laRVRZUEUsCi0gIFBST1BfU0laRU1JTiwKLSAgUFJPUF9TSVpFTUFYLAotICBQUk9QX0ZJTExUWVBFLAotICBQUk9QX0RBVEFSQVRFLAotICBQUk9QX1NZTkMsCi0gIFBST1BfUEFUVEVSTiwKLSAgUFJPUF9FT1MsCi0gIFBST1BfU0lHTkFMX0hBTkRPRkZTLAotICBQUk9QX1NJTEVOVCwKLSAgUFJPUF9EVU1QLAotICBQUk9QX1BBUkVOVFNJWkUsCi0gIFBST1BfTEFTVF9NRVNTQUdFLAotICBQUk9QX0NBTl9BQ1RJVkFURV9QVUxMLAotICBQUk9QX0NBTl9BQ1RJVkFURV9QVVNILAotICBQUk9QX0lTX0xJVkUsCi0gIFBST1BfRk9STUFULAotICBQUk9QX0xBU1QsCi19OwotCi0vKiBub3QgaW1wbGVtZW50ZWQKLSNkZWZpbmUgR1NUX1RZUEVfRkFLRV9TUkNfT1VUUFVUIChnc3RfZmFrZV9zcmNfb3V0cHV0X2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9mYWtlX3NyY19vdXRwdXRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBmYWtlc3JjX291dHB1dF90eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZmFrZXNyY19vdXRwdXRbXSA9IHsKLSAgICB7RkFLRV9TUkNfRklSU1RfTEFTVF9MT09QLCAiMSIsICJGaXJzdC1MYXN0IGxvb3AifSwKLSAgICB7RkFLRV9TUkNfTEFTVF9GSVJTVF9MT09QLCAiMiIsICJMYXN0LUZpcnN0IGxvb3AifSwKLSAgICB7RkFLRV9TUkNfUElOR19QT05HLCAiMyIsICJQaW5nLVBvbmcifSwKLSAgICB7RkFLRV9TUkNfT1JERVJFRF9SQU5ET00sICI0IiwgIk9yZGVyZWQgUmFuZG9tIn0sCi0gICAge0ZBS0VfU1JDX1JBTkRPTSwgIjUiLCAiUmFuZG9tIn0sCi0gICAge0ZBS0VfU1JDX1BBVFRFUk5fTE9PUCwgIjYiLCAiUGF0dHRlcm4gbG9vcCJ9LAotICAgIHtGQUtFX1NSQ19QSU5HX1BPTkdfUEFUVEVSTiwgIjciLCAiUGluZy1Qb25nIFBhdHRlcm4ifSwKLSAgICB7RkFLRV9TUkNfR0VUX0FMV0FZU19TVUNFRURTLCAiOCIsICInX2dldCcgQWx3YXlzIHN1Y2NlZWRzIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghZmFrZXNyY19vdXRwdXRfdHlwZSkgewotICAgIGZha2VzcmNfb3V0cHV0X3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RmFrZVNyY091dHB1dFR5cGUiLCBmYWtlc3JjX291dHB1dCk7Ci0gIH0KLSAgcmV0dXJuIGZha2VzcmNfb3V0cHV0X3R5cGU7Ci19Ci0qLwotCi0jZGVmaW5lIEdTVF9UWVBFX0ZBS0VfU1JDX0RBVEEgKGdzdF9mYWtlX3NyY19kYXRhX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9mYWtlX3NyY19kYXRhX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZmFrZXNyY19kYXRhX3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBmYWtlc3JjX2RhdGFbXSA9IHsKLSAgICB7RkFLRV9TUkNfREFUQV9BTExPQ0FURSwgIkFsbG9jYXRlIGRhdGEiLCAiYWxsb2NhdGUifSwKLSAgICB7RkFLRV9TUkNfREFUQV9TVUJCVUZGRVIsICJTdWJidWZmZXIgZGF0YSIsICJzdWJidWZmZXIifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFmYWtlc3JjX2RhdGFfdHlwZSkgewotICAgIGZha2VzcmNfZGF0YV90eXBlID0KLSAgICAgICAgZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEZha2VTcmNEYXRhVHlwZSIsIGZha2VzcmNfZGF0YSk7Ci0gIH0KLSAgcmV0dXJuIGZha2VzcmNfZGF0YV90eXBlOwotfQotCi0jZGVmaW5lIEdTVF9UWVBFX0ZBS0VfU1JDX1NJWkVUWVBFIChnc3RfZmFrZV9zcmNfc2l6ZXR5cGVfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2Zha2Vfc3JjX3NpemV0eXBlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZmFrZXNyY19zaXpldHlwZV90eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZmFrZXNyY19zaXpldHlwZVtdID0gewotICAgIHtGQUtFX1NSQ19TSVpFVFlQRV9FTVBUWSwgIlNlbmQgZW1wdHkgYnVmZmVycyIsICJlbXB0eSJ9LAotICAgIHtGQUtFX1NSQ19TSVpFVFlQRV9GSVhFRCwgIkZpeGVkIHNpemUgYnVmZmVycyAoc2l6ZW1heCBzaXplZCkiLCAiZml4ZWQifSwKLSAgICB7RkFLRV9TUkNfU0laRVRZUEVfUkFORE9NLAotICAgICAgICAiUmFuZG9tIHNpemVkIGJ1ZmZlcnMgKHNpemVtaW4gPD0gc2l6ZSA8PSBzaXplbWF4KSIsICJyYW5kb20ifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFmYWtlc3JjX3NpemV0eXBlX3R5cGUpIHsKLSAgICBmYWtlc3JjX3NpemV0eXBlX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RmFrZVNyY1NpemVUeXBlIiwgZmFrZXNyY19zaXpldHlwZSk7Ci0gIH0KLSAgcmV0dXJuIGZha2VzcmNfc2l6ZXR5cGVfdHlwZTsKLX0KLQotI2RlZmluZSBHU1RfVFlQRV9GQUtFX1NSQ19GSUxMVFlQRSAoZ3N0X2Zha2Vfc3JjX2ZpbGx0eXBlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9mYWtlX3NyY19maWxsdHlwZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGZha2VzcmNfZmlsbHR5cGVfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGZha2VzcmNfZmlsbHR5cGVbXSA9IHsKLSAgICB7RkFLRV9TUkNfRklMTFRZUEVfTk9USElORywgIkxlYXZlIGRhdGEgYXMgbWFsbG9jZWQiLCAibm90aGluZyJ9LAotICAgIHtGQUtFX1NSQ19GSUxMVFlQRV9aRVJPLCAiRmlsbCBidWZmZXJzIHdpdGggemVyb3MiLCAiemVybyJ9LAotICAgIHtGQUtFX1NSQ19GSUxMVFlQRV9SQU5ET00sICJGaWxsIGJ1ZmZlcnMgd2l0aCByYW5kb20gZGF0YSIsICJyYW5kb20ifSwKLSAgICB7RkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTiwgIkZpbGwgYnVmZmVycyB3aXRoIHBhdHRlcm4gMHgwMCAtPiAweGZmIiwKLSAgICAgICAgInBhdHRlcm4ifSwKLSAgICB7RkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTl9DT05ULAotICAgICAgICAgICJGaWxsIGJ1ZmZlcnMgd2l0aCBwYXR0ZXJuIDB4MDAgLT4gMHhmZiB0aGF0IHNwYW5zIGJ1ZmZlcnMiLAotICAgICAgICAicGF0dGVybi1zcGFuIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghZmFrZXNyY19maWxsdHlwZV90eXBlKSB7Ci0gICAgZmFrZXNyY19maWxsdHlwZV90eXBlID0KLSAgICAgICAgZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEZha2VTcmNGaWxsVHlwZSIsIGZha2VzcmNfZmlsbHR5cGUpOwotICB9Ci0gIHJldHVybiBmYWtlc3JjX2ZpbGx0eXBlX3R5cGU7Ci19Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfZmFrZV9zcmNfZGVidWcsICJmYWtlc3JjIiwgMCwgImZha2VzcmMgZWxlbWVudCIpOwotI2RlZmluZSBnc3RfZmFrZV9zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEZha2VTcmMsIGdzdF9mYWtlX3NyYywgR1NUX1RZUEVfQkFTRV9TUkMsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2Zha2Vfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9mYWtlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZmFrZV9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Zha2Vfc3JjX3N0YXJ0IChHc3RCYXNlU3JjICogYmFzZXNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Zha2Vfc3JjX3N0b3AgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmFrZV9zcmNfaXNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9mYWtlX3NyY19ldmVudF9oYW5kbGVyIChHc3RCYXNlU3JjICogc3JjLCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyB2b2lkIGdzdF9mYWtlX3NyY19nZXRfdGltZXMgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0Q2xvY2tUaW1lICogc3RhcnQsIEdzdENsb2NrVGltZSAqIGVuZCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmFrZV9zcmNfY3JlYXRlIChHc3RCYXNlU3JjICogc3JjLCBndWludDY0IG9mZnNldCwKLSAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWYpOwotCi1zdGF0aWMgZ3VpbnQgZ3N0X2Zha2Vfc3JjX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyBHUGFyYW1TcGVjICpwc3BlY19sYXN0X21lc3NhZ2UgPSBOVUxMOwotCi1zdGF0aWMgdm9pZAotZ3N0X2Zha2Vfc3JjX2NsYXNzX2luaXQgKEdzdEZha2VTcmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlX3NyY19jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIGdzdGJhc2Vfc3JjX2NsYXNzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZmFrZV9zcmNfZmluYWxpemU7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Zha2Vfc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2Zha2Vfc3JjX2dldF9wcm9wZXJ0eTsKLQotLyoKLSAgRklYTUU6IHRoaXMgaXMgbm90IGltcGxlbWVudGVkOyB3b3VsZCBtYWtlIHNlbnNlIG9uY2UgYmFzZXNyYyBhbmQgZmFrZXNyYwotICBzdXBwb3J0IG11bHRpcGxlIHBhZHMKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9PVVRQVVQsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIm91dHB1dCIsICJvdXRwdXQiLCAiT3V0cHV0IG1ldGhvZCAoY3VycmVudGx5IHVudXNlZCkiLAotICAgICAgICAgIEdTVF9UWVBFX0ZBS0VfU1JDX09VVFBVVCwgREVGQVVMVF9PVVRQVVQsIEdfUEFSQU1fUkVBRFdSSVRFKSk7Ci0qLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RBVEEsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImRhdGEiLCAiZGF0YSIsICJEYXRhIGFsbG9jYXRpb24gbWV0aG9kIiwKLSAgICAgICAgICBHU1RfVFlQRV9GQUtFX1NSQ19EQVRBLCBERUZBVUxUX0RBVEEsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfU0laRVRZUEUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInNpemV0eXBlIiwgInNpemV0eXBlIiwKLSAgICAgICAgICAiSG93IHRvIGRldGVybWluZSBidWZmZXIgc2l6ZXMiLCBHU1RfVFlQRV9GQUtFX1NSQ19TSVpFVFlQRSwKLSAgICAgICAgICBERUZBVUxUX1NJWkVUWVBFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TSVpFTUlOLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInNpemVtaW4iLCAic2l6ZW1pbiIsICJNaW5pbXVtIGJ1ZmZlciBzaXplIiwgMCwKLSAgICAgICAgICBHX01BWElOVCwgREVGQVVMVF9TSVpFTUlOLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJWkVNQVgsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgic2l6ZW1heCIsICJzaXplbWF4IiwgIk1heGltdW0gYnVmZmVyIHNpemUiLCAwLAotICAgICAgICAgIEdfTUFYSU5ULCBERUZBVUxUX1NJWkVNQVgsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFSRU5UU0laRSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJwYXJlbnRzaXplIiwgInBhcmVudHNpemUiLAotICAgICAgICAgICJTaXplIG9mIHBhcmVudCBidWZmZXIgZm9yIHN1Yi1idWZmZXJlZCBhbGxvY2F0aW9uIiwgMCwgR19NQVhJTlQsCi0gICAgICAgICAgREVGQVVMVF9QQVJFTlRTSVpFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GSUxMVFlQRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiZmlsbHR5cGUiLCAiZmlsbHR5cGUiLAotICAgICAgICAgICJIb3cgdG8gZmlsbCB0aGUgYnVmZmVyLCBpZiBhdCBhbGwiLCBHU1RfVFlQRV9GQUtFX1NSQ19GSUxMVFlQRSwKLSAgICAgICAgICBERUZBVUxUX0ZJTExUWVBFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9EQVRBUkFURSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJkYXRhcmF0ZSIsICJEYXRhcmF0ZSIsCi0gICAgICAgICAgIlRpbWVzdGFtcHMgYnVmZmVycyB3aXRoIG51bWJlciBvZiBieXRlcyBwZXIgc2Vjb25kICgwID0gbm9uZSkiLCAwLAotICAgICAgICAgIEdfTUFYSU5ULCBERUZBVUxUX0RBVEFSQVRFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NZTkMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMiLCAiU3luYyIsICJTeW5jIHRvIHRoZSBjbG9jayB0byB0aGUgZGF0YXJhdGUiLAotICAgICAgICAgIERFRkFVTFRfU1lOQywgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qICBGSVhNRSAyLjA6IFJlbW92ZSB1bnVzZWQgcGF0dGVybiBwcm9wZXJ0eS4gTm90IGltcGxlbWVudGVkICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFUVEVSTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwYXR0ZXJuIiwgInBhdHRlcm4iLCAiU2V0IHRoZSBwYXR0ZXJuICh1bnVzZWQpIiwKLSAgICAgICAgICBERUZBVUxUX1BBVFRFUk4sIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBwc3BlY19sYXN0X21lc3NhZ2UgPSBnX3BhcmFtX3NwZWNfc3RyaW5nICgibGFzdC1tZXNzYWdlIiwgImxhc3QtbWVzc2FnZSIsCi0gICAgICAiVGhlIGxhc3Qgc3RhdHVzIG1lc3NhZ2UiLCBOVUxMLAotICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xBU1RfTUVTU0FHRSwKLSAgICAgIHBzcGVjX2xhc3RfbWVzc2FnZSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0lMRU5ULAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaWxlbnQiLCAiU2lsZW50IiwKLSAgICAgICAgICAiRG9uJ3QgcHJvZHVjZSBsYXN0X21lc3NhZ2UgZXZlbnRzIiwgREVGQVVMVF9TSUxFTlQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0lHTkFMX0hBTkRPRkZTLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaWduYWwtaGFuZG9mZnMiLCAiU2lnbmFsIGhhbmRvZmZzIiwKLSAgICAgICAgICAiU2VuZCBhIHNpZ25hbCBiZWZvcmUgcHVzaGluZyB0aGUgYnVmZmVyIiwgREVGQVVMVF9TSUdOQUxfSEFORE9GRlMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRFVNUCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZHVtcCIsICJEdW1wIiwgIkR1bXAgYnVmZmVyIGNvbnRlbnRzIHRvIHN0ZG91dCIsCi0gICAgICAgICAgREVGQVVMVF9EVU1QLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQU5fQUNUSVZBVEVfUFVTSCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiY2FuLWFjdGl2YXRlLXB1c2giLCAiQ2FuIGFjdGl2YXRlIHB1c2giLAotICAgICAgICAgICJDYW4gYWN0aXZhdGUgaW4gcHVzaCBtb2RlIiwgREVGQVVMVF9DQU5fQUNUSVZBVEVfUFVTSCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NBTl9BQ1RJVkFURV9QVUxMLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjYW4tYWN0aXZhdGUtcHVsbCIsICJDYW4gYWN0aXZhdGUgcHVsbCIsCi0gICAgICAgICAgIkNhbiBhY3RpdmF0ZSBpbiBwdWxsIG1vZGUiLCBERUZBVUxUX0NBTl9BQ1RJVkFURV9QVUxMLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSVNfTElWRSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiaXMtbGl2ZSIsICJJcyB0aGlzIGEgbGl2ZSBzb3VyY2UiLAotICAgICAgICAgICJUcnVlIGlmIHRoZSBlbGVtZW50IGNhbm5vdCBwcm9kdWNlIGRhdGEgaW4gUEFVU0VEIiwgRkFMU0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdEZha2VTcmM6Zm9ybWF0Ci0gICAqCi0gICAqIFNldCB0aGUgZm9ybWF0IG9mIHRoZSBuZXdzZWdtZW50IGV2ZW50cyB0byBwcm9kdWNlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GT1JNQVQsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImZvcm1hdCIsICJGb3JtYXQiLAotICAgICAgICAgICJUaGUgZm9ybWF0IG9mIHRoZSBzZWdtZW50IGV2ZW50cyIsIEdTVF9UWVBFX0ZPUk1BVCwKLSAgICAgICAgICBERUZBVUxUX0ZPUk1BVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdEZha2VTcmM6OmhhbmRvZmY6Ci0gICAqIEBmYWtlc3JjOiB0aGUgZmFrZXNyYyBpbnN0YW5jZQotICAgKiBAYnVmZmVyOiB0aGUgYnVmZmVyIHRoYXQgd2lsbCBiZSBwdXNoZWQKLSAgICogQHBhZDogdGhlIHBhZCB0aGF0IHdpbGwgc2VudCBpdAotICAgKgotICAgKiBUaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgYmVmb3JlIHNlbmRpbmcgdGhlIGJ1ZmZlci4KLSAgICovCi0gIGdzdF9mYWtlX3NyY19zaWduYWxzW1NJR05BTF9IQU5ET0ZGXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJoYW5kb2ZmIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdEZha2VTcmNDbGFzcywgaGFuZG9mZiksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsCi0gICAgICBHU1RfVFlQRV9CVUZGRVIgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSwgR1NUX1RZUEVfUEFEKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkZha2UgU291cmNlIiwKLSAgICAgICJTb3VyY2UiLAotICAgICAgIlB1c2ggZW1wdHkgKG5vIGRhdGEpIGJ1ZmZlcnMgYXJvdW5kIiwKLSAgICAgICJFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PiwgIiAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmN0ZW1wbGF0ZSk7Ci0KLSAgZ3N0YmFzZV9zcmNfY2xhc3MtPmlzX3NlZWthYmxlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mYWtlX3NyY19pc19zZWVrYWJsZSk7Ci0gIGdzdGJhc2Vfc3JjX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zcmNfc3RhcnQpOwotICBnc3RiYXNlX3NyY19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zcmNfc3RvcCk7Ci0gIGdzdGJhc2Vfc3JjX2NsYXNzLT5ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmFrZV9zcmNfZXZlbnRfaGFuZGxlcik7Ci0gIGdzdGJhc2Vfc3JjX2NsYXNzLT5nZXRfdGltZXMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zha2Vfc3JjX2dldF90aW1lcyk7Ci0gIGdzdGJhc2Vfc3JjX2NsYXNzLT5jcmVhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zha2Vfc3JjX2NyZWF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmFrZV9zcmNfaW5pdCAoR3N0RmFrZVNyYyAqIGZha2VzcmMpCi17Ci0gIGZha2VzcmMtPm91dHB1dCA9IEZBS0VfU1JDX0ZJUlNUX0xBU1RfTE9PUDsKLSAgZmFrZXNyYy0+c2lsZW50ID0gREVGQVVMVF9TSUxFTlQ7Ci0gIGZha2VzcmMtPnNpZ25hbF9oYW5kb2ZmcyA9IERFRkFVTFRfU0lHTkFMX0hBTkRPRkZTOwotICBmYWtlc3JjLT5kdW1wID0gREVGQVVMVF9EVU1QOwotICBmYWtlc3JjLT5wYXR0ZXJuX2J5dGUgPSAweDAwOwotICBmYWtlc3JjLT5kYXRhID0gRkFLRV9TUkNfREFUQV9BTExPQ0FURTsKLSAgZmFrZXNyYy0+c2l6ZXR5cGUgPSBGQUtFX1NSQ19TSVpFVFlQRV9FTVBUWTsKLSAgZmFrZXNyYy0+ZmlsbHR5cGUgPSBGQUtFX1NSQ19GSUxMVFlQRV9OT1RISU5HOwotICBmYWtlc3JjLT5zaXplbWluID0gREVGQVVMVF9TSVpFTUlOOwotICBmYWtlc3JjLT5zaXplbWF4ID0gREVGQVVMVF9TSVpFTUFYOwotICBmYWtlc3JjLT5wYXJlbnQgPSBOVUxMOwotICBmYWtlc3JjLT5wYXJlbnRzaXplID0gREVGQVVMVF9QQVJFTlRTSVpFOwotICBmYWtlc3JjLT5sYXN0X21lc3NhZ2UgPSBOVUxMOwotICBmYWtlc3JjLT5kYXRhcmF0ZSA9IERFRkFVTFRfREFUQVJBVEU7Ci0gIGZha2VzcmMtPnN5bmMgPSBERUZBVUxUX1NZTkM7Ci0gIGZha2VzcmMtPmZvcm1hdCA9IERFRkFVTFRfRk9STUFUOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zha2Vfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RGYWtlU3JjICpzcmM7Ci0KLSAgc3JjID0gR1NUX0ZBS0VfU1JDIChvYmplY3QpOwotCi0gIGdfZnJlZSAoc3JjLT5sYXN0X21lc3NhZ2UpOwotICBpZiAoc3JjLT5wYXJlbnQpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChzcmMtPnBhcmVudCk7Ci0gICAgc3JjLT5wYXJlbnQgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mYWtlX3NyY19ldmVudF9oYW5kbGVyIChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0RmFrZVNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9GQUtFX1NSQyAoYmFzZXNyYyk7Ci0KLSAgaWYgKCFzcmMtPnNpbGVudCkgewotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLSAgICBjb25zdCBnY2hhciAqdHN0cjsKLSAgICBnY2hhciAqc3N0cjsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICBnX2ZyZWUgKHNyYy0+bGFzdF9tZXNzYWdlKTsKLQotICAgIHRzdHIgPSBnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSk7Ci0KLSAgICBpZiAoKHMgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpKSkKLSAgICAgIHNzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7Ci0gICAgZWxzZQotICAgICAgc3N0ciA9IGdfc3RyZHVwICgiIik7Ci0KLSAgICBzcmMtPmxhc3RfbWVzc2FnZSA9Ci0gICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImV2ZW50ICAgKioqKioqKiAoJXM6JXMpIEUgKHR5cGU6ICVzICglZCksICVzKSAlcCIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoR1NUX0JBU0VfU1JDX0NBU1QgKHNyYyktPnNyY3BhZCksCi0gICAgICAgIHRzdHIsIEdTVF9FVkVOVF9UWVBFIChldmVudCksIHNzdHIsIGV2ZW50KTsKLSAgICBnX2ZyZWUgKHNzdHIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotCi0gICAgZ19vYmplY3Rfbm90aWZ5X2J5X3BzcGVjICgoR09iamVjdCAqKSBzcmMsIHBzcGVjX2xhc3RfbWVzc2FnZSk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5ldmVudCAoYmFzZXNyYywgZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zha2Vfc3JjX2FsbG9jX3BhcmVudCAoR3N0RmFrZVNyYyAqIHNyYykKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNyYy0+cGFyZW50c2l6ZSwgTlVMTCk7Ci0KLSAgc3JjLT5wYXJlbnQgPSBidWY7Ci0gIHNyYy0+cGFyZW50b2Zmc2V0ID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RmFrZVNyYyAqc3JjOwotICBHc3RCYXNlU3JjICpiYXNlc3JjOwotCi0gIHNyYyA9IEdTVF9GQUtFX1NSQyAob2JqZWN0KTsKLSAgYmFzZXNyYyA9IEdTVF9CQVNFX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfT1VUUFVUOgotICAgICAgZ193YXJuaW5nICgibm90IHlldCBpbXBsZW1lbnRlZCIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RBVEE6Ci0gICAgICBzcmMtPmRhdGEgPSAoR3N0RmFrZVNyY0RhdGFUeXBlKSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0KLSAgICAgIGlmIChzcmMtPmRhdGEgPT0gRkFLRV9TUkNfREFUQV9TVUJCVUZGRVIpIHsKLSAgICAgICAgaWYgKCFzcmMtPnBhcmVudCkKLSAgICAgICAgICBnc3RfZmFrZV9zcmNfYWxsb2NfcGFyZW50IChzcmMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHNyYy0+cGFyZW50KSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3JjLT5wYXJlbnQpOwotICAgICAgICAgIHNyYy0+cGFyZW50ID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJWkVUWVBFOgotICAgICAgc3JjLT5zaXpldHlwZSA9IChHc3RGYWtlU3JjU2l6ZVR5cGUpIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSVpFTUlOOgotICAgICAgc3JjLT5zaXplbWluID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0laRU1BWDoKLSAgICAgIHNyYy0+c2l6ZW1heCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BBUkVOVFNJWkU6Ci0gICAgICBzcmMtPnBhcmVudHNpemUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GSUxMVFlQRToKLSAgICAgIHNyYy0+ZmlsbHR5cGUgPSAoR3N0RmFrZVNyY0ZpbGxUeXBlKSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREFUQVJBVEU6Ci0gICAgICBzcmMtPmRhdGFyYXRlID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1lOQzoKLSAgICAgIHNyYy0+c3luYyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QQVRURVJOOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJTEVOVDoKLSAgICAgIHNyYy0+c2lsZW50ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJR05BTF9IQU5ET0ZGUzoKLSAgICAgIHNyYy0+c2lnbmFsX2hhbmRvZmZzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RVTVA6Ci0gICAgICBzcmMtPmR1bXAgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0FOX0FDVElWQVRFX1BVU0g6Ci0gICAgICBnX3JldHVybl9pZl9mYWlsICghR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAob2JqZWN0LAotICAgICAgICAgICAgICBHU1RfQkFTRV9TUkNfRkxBR19TVEFSVEVEKSk7Ci0gICAgICBHU1RfQkFTRV9TUkMgKHNyYyktPmNhbl9hY3RpdmF0ZV9wdXNoID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBTl9BQ1RJVkFURV9QVUxMOgotICAgICAgZ19yZXR1cm5faWZfZmFpbCAoIUdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKG9iamVjdCwKLSAgICAgICAgICAgICAgR1NUX0JBU0VfU1JDX0ZMQUdfU1RBUlRFRCkpOwotICAgICAgc3JjLT5jYW5fYWN0aXZhdGVfcHVsbCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JU19MSVZFOgotICAgICAgZ3N0X2Jhc2Vfc3JjX3NldF9saXZlIChiYXNlc3JjLCBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZPUk1BVDoKLSAgICAgIHNyYy0+Zm9ybWF0ID0gKEdzdEZvcm1hdCkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zha2Vfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RGYWtlU3JjICpzcmM7Ci0gIEdzdEJhc2VTcmMgKmJhc2VzcmM7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0ZBS0VfU1JDIChvYmplY3QpKTsKLQotICBzcmMgPSBHU1RfRkFLRV9TUkMgKG9iamVjdCk7Ci0gIGJhc2VzcmMgPSBHU1RfQkFTRV9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX09VVFBVVDoKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzcmMtPm91dHB1dCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREFUQToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzcmMtPmRhdGEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJWkVUWVBFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNyYy0+c2l6ZXR5cGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJWkVNSU46Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzcmMtPnNpemVtaW4pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJWkVNQVg6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzcmMtPnNpemVtYXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BBUkVOVFNJWkU6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzcmMtPnBhcmVudHNpemUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZJTExUWVBFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNyYy0+ZmlsbHR5cGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RBVEFSQVRFOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc3JjLT5kYXRhcmF0ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1lOQzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPnN5bmMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BBVFRFUk46Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0lMRU5UOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNyYy0+c2lsZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUdOQUxfSEFORE9GRlM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3JjLT5zaWduYWxfaGFuZG9mZnMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RVTVA6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3JjLT5kdW1wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MQVNUX01FU1NBR0U6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzcmMtPmxhc3RfbWVzc2FnZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQU5fQUNUSVZBVEVfUFVTSDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBHU1RfQkFTRV9TUkMgKHNyYyktPmNhbl9hY3RpdmF0ZV9wdXNoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQU5fQUNUSVZBVEVfUFVMTDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPmNhbl9hY3RpdmF0ZV9wdWxsKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JU19MSVZFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdzdF9iYXNlX3NyY19pc19saXZlIChiYXNlc3JjKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRk9STUFUOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNyYy0+Zm9ybWF0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX3NyY19wcmVwYXJlX2J1ZmZlciAoR3N0RmFrZVNyYyAqIHNyYywgZ3VpbnQ4ICogZGF0YSwgZ3NpemUgc2l6ZSkKLXsKLSAgaWYgKHNpemUgPT0gMCkKLSAgICByZXR1cm47Ci0KLSAgc3dpdGNoIChzcmMtPmZpbGx0eXBlKSB7Ci0gICAgY2FzZSBGQUtFX1NSQ19GSUxMVFlQRV9aRVJPOgotICAgICAgbWVtc2V0IChkYXRhLCAwLCBzaXplKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRkFLRV9TUkNfRklMTFRZUEVfUkFORE9NOgotICAgIHsKLSAgICAgIGdpbnQgaTsKLSAgICAgIGd1aW50OCAqcHRyID0gZGF0YTsKLQotICAgICAgZm9yIChpID0gc2l6ZTsgaTsgaS0tKSB7Ci0gICAgICAgICpwdHIrKyA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgMjU2KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZBS0VfU1JDX0ZJTExUWVBFX1BBVFRFUk46Ci0gICAgICBzcmMtPnBhdHRlcm5fYnl0ZSA9IDB4MDA7Ci0gICAgY2FzZSBGQUtFX1NSQ19GSUxMVFlQRV9QQVRURVJOX0NPTlQ6Ci0gICAgewotICAgICAgZ2ludCBpOwotICAgICAgZ3VpbnQ4ICpwdHIgPSBkYXRhOwotCi0gICAgICBmb3IgKGkgPSBzaXplOyBpOyBpLS0pIHsKLSAgICAgICAgKnB0cisrID0gc3JjLT5wYXR0ZXJuX2J5dGUrKzsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkc6Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2Zha2Vfc3JjX2FsbG9jX2J1ZmZlciAoR3N0RmFrZVNyYyAqIHNyYywgZ3VpbnQgc2l6ZSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGdwb2ludGVyIGRhdGE7Ci0gIGdib29sZWFuIGRvX3ByZXBhcmUgPSBGQUxTRTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLQotICBpZiAoc2l6ZSAhPSAwKSB7Ci0gICAgc3dpdGNoIChzcmMtPmZpbGx0eXBlKSB7Ci0gICAgICBjYXNlIEZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkc6Ci0gICAgICAgIGRhdGEgPSBnX21hbGxvYyAoc2l6ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBGQUtFX1NSQ19GSUxMVFlQRV9aRVJPOgotICAgICAgICBkYXRhID0gZ19tYWxsb2MwIChzaXplKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZBS0VfU1JDX0ZJTExUWVBFX1JBTkRPTToKLSAgICAgIGNhc2UgRkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTjoKLSAgICAgIGNhc2UgRkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTl9DT05UOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZGF0YSA9IGdfbWFsbG9jIChzaXplKTsKLSAgICAgICAgZG9fcHJlcGFyZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZG9fcHJlcGFyZSkKLSAgICAgIGdzdF9mYWtlX3NyY19wcmVwYXJlX2J1ZmZlciAoc3JjLCBkYXRhLCBzaXplKTsKLQotICAgIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAoYnVmLAotICAgICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkICgwLCBkYXRhLCBzaXplLCAwLCBzaXplLCBkYXRhLCBnX2ZyZWUpKTsKLSAgfQotCi0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X2Zha2Vfc3JjX2dldF9zaXplIChHc3RGYWtlU3JjICogc3JjKQotewotICBndWludCBzaXplOwotCi0gIHN3aXRjaCAoc3JjLT5zaXpldHlwZSkgewotICAgIGNhc2UgRkFLRV9TUkNfU0laRVRZUEVfRklYRUQ6Ci0gICAgICBzaXplID0gc3JjLT5zaXplbWF4OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGQUtFX1NSQ19TSVpFVFlQRV9SQU5ET006Ci0gICAgICBzaXplID0gZ19yYW5kb21faW50X3JhbmdlIChzcmMtPnNpemVtaW4sIHNyYy0+c2l6ZW1heCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZBS0VfU1JDX1NJWkVUWVBFX0VNUFRZOgotICAgIGRlZmF1bHQ6Ci0gICAgICBzaXplID0gMDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHNpemU7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2Zha2Vfc3JjX2NyZWF0ZV9idWZmZXIgKEdzdEZha2VTcmMgKiBzcmMsIGdzaXplICogYnVmc2l6ZSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGdzaXplIHNpemUgPSBnc3RfZmFrZV9zcmNfZ2V0X3NpemUgKHNyYyk7Ci0gIGdib29sZWFuIGR1bXAgPSBzcmMtPmR1bXA7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLQotICAqYnVmc2l6ZSA9IHNpemU7Ci0KLSAgc3dpdGNoIChzcmMtPmRhdGEpIHsKLSAgICBjYXNlIEZBS0VfU1JDX0RBVEFfQUxMT0NBVEU6Ci0gICAgICBidWYgPSBnc3RfZmFrZV9zcmNfYWxsb2NfYnVmZmVyIChzcmMsIHNpemUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGQUtFX1NSQ19EQVRBX1NVQkJVRkZFUjoKLSAgICAgIC8qIHNlZSBpZiB3ZSBoYXZlIGEgcGFyZW50IHRvIHN1YmJ1ZmZlciAqLwotICAgICAgaWYgKCFzcmMtPnBhcmVudCkgewotICAgICAgICBnc3RfZmFrZV9zcmNfYWxsb2NfcGFyZW50IChzcmMpOwotICAgICAgICBnX2Fzc2VydCAoc3JjLT5wYXJlbnQpOwotICAgICAgfQotICAgICAgLyogc2VlIGlmIGl0J3MgbGFyZ2UgZW5vdWdoICovCi0gICAgICBpZiAoKHNyYy0+cGFyZW50c2l6ZSAtIHNyYy0+cGFyZW50b2Zmc2V0KSA+PSBzaXplKSB7Ci0gICAgICAgIGJ1ZiA9Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChzcmMtPnBhcmVudCwgR1NUX0JVRkZFUl9DT1BZX0FMTCwKLSAgICAgICAgICAgIHNyYy0+cGFyZW50b2Zmc2V0LCBzaXplKTsKLSAgICAgICAgc3JjLT5wYXJlbnRvZmZzZXQgKz0gc2l6ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIHRoZSBwYXJlbnQgaXMgdXNlbGVzcyBub3cgKi8KLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3JjLT5wYXJlbnQpOwotICAgICAgICBzcmMtPnBhcmVudCA9IE5VTEw7Ci0gICAgICAgIC8qIHRyeSBhZ2FpbiAodGhpcyB3aWxsIGFsbG9jYXRlIGEgbmV3IHBhcmVudCkgKi8KLSAgICAgICAgcmV0dXJuIGdzdF9mYWtlX3NyY19jcmVhdGVfYnVmZmVyIChzcmMsIGJ1ZnNpemUpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQotICAgICAgICBnb3RvIGJ1ZmZlcl9jcmVhdGVfZmFpbDsKLSAgICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfV1JJVEUpKQotICAgICAgICBnb3RvIGJ1ZmZlcl93cml0ZV9mYWlsOwotICAgICAgZ3N0X2Zha2Vfc3JjX3ByZXBhcmVfYnVmZmVyIChzcmMsIGluZm8uZGF0YSwgaW5mby5zaXplKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfd2FybmluZyAoImZha2VzcmM6IGR1bm5vIGhvdyB0byBhbGxvY2F0ZSBidWZmZXJzICEiKTsKLSAgICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgaWYgKGR1bXApIHsKLSAgICBpZiAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfUkVBRCkpIHsKLSAgICAgIGdzdF91dGlsX2R1bXBfbWVtIChpbmZvLmRhdGEsIGluZm8uc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gYnVmOwotCi1idWZmZXJfY3JlYXRlX2ZhaWw6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgQlVTWSwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byBjcmVhdGUgYSBidWZmZXIiKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotYnVmZmVyX3dyaXRlX2ZhaWw6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgV1JJVEUsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gd3JpdGUgdG8gYnVmZmVyIikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX3NyY19nZXRfdGltZXMgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0Q2xvY2tUaW1lICogc3RhcnQsIEdzdENsb2NrVGltZSAqIGVuZCkKLXsKLSAgR3N0RmFrZVNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9GQUtFX1NSQyAoYmFzZXNyYyk7Ci0KLSAgLyogc3luYyBvbiB0aGUgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIgaWYgcmVxdWVzdGVkLiAqLwotICBpZiAoc3JjLT5zeW5jKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgZHVyYXRpb247Ci0KLSAgICAvKiBmaXJzdCBzeW5jIG9uIERUUywgZWxzZSB1c2UgUFRTICovCi0gICAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcik7Ci0gICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkKLSAgICAgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotCi0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKSB7Ci0gICAgICAvKiBnZXQgZHVyYXRpb24gdG8gY2FsY3VsYXRlIGVuZCB0aW1lICovCi0gICAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7Ci0gICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkgewotICAgICAgICAqZW5kID0gdGltZXN0YW1wICsgZHVyYXRpb247Ci0gICAgICB9Ci0gICAgICAqc3RhcnQgPSB0aW1lc3RhbXA7Ci0gICAgfQotICB9IGVsc2UgewotICAgICpzdGFydCA9IC0xOwotICAgICplbmQgPSAtMTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Zha2Vfc3JjX2NyZWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsCi0gICAgR3N0QnVmZmVyICoqIHJldCkKLXsKLSAgR3N0RmFrZVNyYyAqc3JjOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0Q2xvY2tUaW1lIHRpbWU7Ci0gIGdzaXplIHNpemU7Ci0KLSAgc3JjID0gR1NUX0ZBS0VfU1JDIChiYXNlc3JjKTsKLQotICBidWYgPSBnc3RfZmFrZV9zcmNfY3JlYXRlX2J1ZmZlciAoc3JjLCAmc2l6ZSk7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gb2Zmc2V0OwotCi0gIGlmIChzcmMtPmRhdGFyYXRlID4gMCkgewotICAgIHRpbWUgPSAoc3JjLT5ieXRlc19zZW50ICogR1NUX1NFQ09ORCkgLyBzcmMtPmRhdGFyYXRlOwotCi0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IHNpemUgKiBHU1RfU0VDT05EIC8gc3JjLT5kYXRhcmF0ZTsKLSAgfSBlbHNlIGlmIChnc3RfYmFzZV9zcmNfaXNfbGl2ZSAoYmFzZXNyYykpIHsKLSAgICBHc3RDbG9jayAqY2xvY2s7Ci0KLSAgICBjbG9jayA9IGdzdF9lbGVtZW50X2dldF9jbG9jayAoR1NUX0VMRU1FTlQgKHNyYykpOwotCi0gICAgaWYgKGNsb2NrKSB7Ci0gICAgICB0aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0gICAgICB0aW1lIC09IGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKEdTVF9FTEVNRU5UIChzcmMpKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogbm90IGFuIGVycm9yIG5vdCB0byBoYXZlIGEgY2xvY2sgKi8KLSAgICAgIHRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICB0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gdGltZTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSB0aW1lOwotCi0gIGlmICghc3JjLT5zaWxlbnQpIHsKLSAgICBnY2hhciBkdHNfc3RyWzY0XSwgcHRzX3N0cls2NF0sIGR1cl9zdHJbNjRdOwotICAgIGdjaGFyICpmbGFnX3N0cjsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICBnX2ZyZWUgKHNyYy0+bGFzdF9tZXNzYWdlKTsKLQotICAgIGlmIChHU1RfQlVGRkVSX0RUUyAoYnVmKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICBnX3NucHJpbnRmIChkdHNfc3RyLCBzaXplb2YgKGR0c19zdHIpLCAiJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFRTIChidWYpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfc3RybGNweSAoZHRzX3N0ciwgIm5vbmUiLCBzaXplb2YgKGR0c19zdHIpKTsKLSAgICB9Ci0gICAgaWYgKEdTVF9CVUZGRVJfUFRTIChidWYpICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgIGdfc25wcmludGYgKHB0c19zdHIsIHNpemVvZiAocHRzX3N0ciksICIlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKGJ1ZikpKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19zdHJsY3B5IChwdHNfc3RyLCAibm9uZSIsIHNpemVvZiAocHRzX3N0cikpOwotICAgIH0KLSAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICBnX3NucHJpbnRmIChkdXJfc3RyLCBzaXplb2YgKGR1cl9zdHIpLCAiJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19zdHJsY3B5IChkdXJfc3RyLCAibm9uZSIsIHNpemVvZiAoZHVyX3N0cikpOwotICAgIH0KLQotICAgIGZsYWdfc3RyID0gZ3N0X2J1ZmZlcl9nZXRfZmxhZ3Nfc3RyaW5nIChidWYpOwotICAgIHNyYy0+bGFzdF9tZXNzYWdlID0KLSAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiY3JlYXRlICAgKioqKioqKiAoJXM6JXMpICgldSBieXRlcywgZHRzOiAlcywgcHRzOiVzIgotICAgICAgICAiLCBkdXJhdGlvbjogJXMsIG9mZnNldDogJSIgR19HSU5UNjRfRk9STUFUICIsIG9mZnNldF9lbmQ6ICUiCi0gICAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiLCBmbGFnczogJTA4eCAlcykgJXAiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKEdTVF9CQVNFX1NSQ19DQVNUIChzcmMpLT5zcmNwYWQpLCAoZ3VpbnQpIHNpemUsCi0gICAgICAgIGR0c19zdHIsIHB0c19zdHIsIGR1cl9zdHIsIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpLAotICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZiksIEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWYpLT5mbGFncywKLSAgICAgICAgZmxhZ19zdHIsIGJ1Zik7Ci0gICAgZ19mcmVlIChmbGFnX3N0cik7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopIHNyYywgcHNwZWNfbGFzdF9tZXNzYWdlKTsKLSAgfQotCi0gIGlmIChzcmMtPnNpZ25hbF9oYW5kb2ZmcykgewotICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJwcmUgaGFuZG9mZiBlbWl0Iik7Ci0gICAgZ19zaWduYWxfZW1pdCAoc3JjLCBnc3RfZmFrZV9zcmNfc2lnbmFsc1tTSUdOQUxfSEFORE9GRl0sIDAsIGJ1ZiwKLSAgICAgICAgYmFzZXNyYy0+c3JjcGFkKTsKLSAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAicG9zdCBoYW5kb2ZmIGVtaXQiKTsKLSAgfQotCi0gIHNyYy0+Ynl0ZXNfc2VudCArPSBzaXplOwotCi0gICpyZXQgPSBidWY7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmFrZV9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQotewotICBHc3RGYWtlU3JjICpzcmM7Ci0KLSAgc3JjID0gR1NUX0ZBS0VfU1JDIChiYXNlc3JjKTsKLQotICBzcmMtPnBhdHRlcm5fYnl0ZSA9IDB4MDA7Ci0gIHNyYy0+Ynl0ZXNfc2VudCA9IDA7Ci0KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKGJhc2VzcmMsIHNyYy0+Zm9ybWF0KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmFrZV9zcmNfc3RvcCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIEdzdEZha2VTcmMgKnNyYzsKLQotICBzcmMgPSBHU1RfRkFLRV9TUkMgKGJhc2VzcmMpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgaWYgKHNyYy0+cGFyZW50KSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3JjLT5wYXJlbnQpOwotICAgIHNyYy0+cGFyZW50ID0gTlVMTDsKLSAgfQotICBnX2ZyZWUgKHNyYy0+bGFzdF9tZXNzYWdlKTsKLSAgc3JjLT5sYXN0X21lc3NhZ2UgPSBOVUxMOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmFrZV9zcmNfaXNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQotewotICBHc3RGYWtlU3JjICpzcmMgPSBHU1RfRkFLRV9TUkMgKGJhc2VzcmMpOwotCi0gIHJldHVybiBzcmMtPmNhbl9hY3RpdmF0ZV9wdWxsOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmYWtlc3JjLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE5MGVlOC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZha2VzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKgotICogZ3N0ZmFrZXNyYy5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9GQUtFX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfRkFLRV9TUkNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qKgotICogR3N0RmFrZVNyY091dHB1dFR5cGU6Ci0gKiBARkFLRV9TUkNfRklSU1RfTEFTVF9MT09QOiBmaXJzdCBwYWQgdGhlbiBsYXN0IHBhZAotICogQEZBS0VfU1JDX0xBU1RfRklSU1RfTE9PUDogbGFzdCBwYWQgdGhlbiBmaXJzdCBwYWQKLSAqIEBGQUtFX1NSQ19QSU5HX1BPTkc6IHBpbmcgcG9uZyBiZXR3ZWVuIHBhZHMKLSAqIEBGQUtFX1NSQ19PUkRFUkVEX1JBTkRPTTogb3JkZXJlZCByYW5kb20gcGFkCi0gKiBARkFLRV9TUkNfUkFORE9NOiByYW5kb20gcGFkCi0gKiBARkFLRV9TUkNfUEFUVEVSTl9MT09QOiBsb29wIGJldHdlZW4gcGFkcyBpbiBhIHBhcnRpY3VsYXIgcGF0dGVybgotICogQEZBS0VfU1JDX1BJTkdfUE9OR19QQVRURVJOOiBwaW5nIHBvbmcgYmFzZWQgb24gYSBwYXR0ZXJuCi0gKiBARkFLRV9TUkNfR0VUX0FMV0FZU19TVUNFRURTOiBhIGdldCBhbHdheXMgc3VjY2VlZHMgb24gYSBwYWQKLSAqCi0gKiBUaGUgZGlmZmVyZW50IG91dHB1dCB0eXBlcy4gVW51c2VkIGN1cnJlbnRseS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgRkFLRV9TUkNfRklSU1RfTEFTVF9MT09QID0gMSwKLSAgRkFLRV9TUkNfTEFTVF9GSVJTVF9MT09QLAotICBGQUtFX1NSQ19QSU5HX1BPTkcsCi0gIEZBS0VfU1JDX09SREVSRURfUkFORE9NLAotICBGQUtFX1NSQ19SQU5ET00sCi0gIEZBS0VfU1JDX1BBVFRFUk5fTE9PUCwKLSAgRkFLRV9TUkNfUElOR19QT05HX1BBVFRFUk4sCi0gIEZBS0VfU1JDX0dFVF9BTFdBWVNfU1VDRUVEUwotfSBHc3RGYWtlU3JjT3V0cHV0VHlwZTsKLQotLyoqCi0gKiBHc3RGYWtlU3JjRGF0YVR5cGU6Ci0gKiBARkFLRV9TUkNfREFUQV9BTExPQ0FURTogYWxsb2NhdGUgYnVmZmVycwotICogQEZBS0VfU1JDX0RBVEFfU1VCQlVGRkVSOiBzdWJidWZmZXIgZWFjaCBidWZmZXIKLSAqCi0gKiBUaGUgZGlmZmVyZW50IHdheXMgYnVmZmVycyBhcmUgYWxsb2NhdGVkLgotICovCi10eXBlZGVmIGVudW0gewotICBGQUtFX1NSQ19EQVRBX0FMTE9DQVRFID0gMSwKLSAgRkFLRV9TUkNfREFUQV9TVUJCVUZGRVIKLX0gR3N0RmFrZVNyY0RhdGFUeXBlOwotCi0vKioKLSAqIEdzdEZha2VTcmNTaXplVHlwZToKLSAqIEBGQUtFX1NSQ19TSVpFVFlQRV9FTVBUWTogY3JlYXRlIGVtcHR5IGJ1ZmZlcnMKLSAqIEBGQUtFX1NSQ19TSVpFVFlQRV9GSVhFRDogZml4ZWQgYnVmZmVyIHNpemUgKHNpemVtYXggc2l6ZWQpCi0gKiBARkFLRV9TUkNfU0laRVRZUEVfUkFORE9NOiByYW5kb20gYnVmZmVyIHNpemUgKHNpemVtaW4gPD0gc2l6ZSA8PSBzaXplbWF4KQotICoKLSAqIFRoZSBkaWZmZXJlbnQgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlcnMuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEZBS0VfU1JDX1NJWkVUWVBFX0VNUFRZID0gMSwKLSAgRkFLRV9TUkNfU0laRVRZUEVfRklYRUQsCi0gIEZBS0VfU1JDX1NJWkVUWVBFX1JBTkRPTQotfSBHc3RGYWtlU3JjU2l6ZVR5cGU7Ci0KLS8qKgotICogR3N0RmFrZVNyY0ZpbGxUeXBlOgotICogQEZBS0VfU1JDX0ZJTExUWVBFX05PVEhJTkc6IGRvIG5vdCBmaWxsIGJ1ZmZlcnMgCi0gKiBARkFLRV9TUkNfRklMTFRZUEVfWkVSTzogZmlsbCBidWZmZXJzIHdpdGggMAotICogQEZBS0VfU1JDX0ZJTExUWVBFX1JBTkRPTTogZmlsbCBidWZmZXJzIHdpdGggcmFuZG9tIGJ5dGVzCi0gKiBARkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTjogZmlsbCBidWZmZXJzIHdpdGggYSBwYXR0ZXJuCi0gKiBARkFLRV9TUkNfRklMTFRZUEVfUEFUVEVSTl9DT05UOiBmaWxsIGJ1ZmZlcnMgd2l0aCBhIGNvbnRpbnVvdXMgcGF0dGVybgotICoKLSAqIFRoZSBkaWZmZXJlbnQgd2F5cyBvZiBmaWxsaW5nIHRoZSBidWZmZXJzLgotICovCi10eXBlZGVmIGVudW0gewotICBGQUtFX1NSQ19GSUxMVFlQRV9OT1RISU5HID0gMSwKLSAgRkFLRV9TUkNfRklMTFRZUEVfWkVSTywKLSAgRkFLRV9TUkNfRklMTFRZUEVfUkFORE9NLAotICBGQUtFX1NSQ19GSUxMVFlQRV9QQVRURVJOLAotICBGQUtFX1NSQ19GSUxMVFlQRV9QQVRURVJOX0NPTlQKLX0gR3N0RmFrZVNyY0ZpbGxUeXBlOwotCi0jZGVmaW5lIEdTVF9UWVBFX0ZBS0VfU1JDIFwKLSAgKGdzdF9mYWtlX3NyY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfRkFLRV9TUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9GQUtFX1NSQyxHc3RGYWtlU3JjKSkKLSNkZWZpbmUgR1NUX0ZBS0VfU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0ZBS0VfU1JDLEdzdEZha2VTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19GQUtFX1NSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0ZBS0VfU1JDKSkKLSNkZWZpbmUgR1NUX0lTX0ZBS0VfU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0ZBS0VfU1JDKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEZha2VTcmMgR3N0RmFrZVNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGYWtlU3JjQ2xhc3MgR3N0RmFrZVNyY0NsYXNzOwotCi0vKioKLSAqIEdzdEZha2VTcmM6Ci0gKgotICogT3BhcXVlICNHc3RGYWtlU3JjIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdEZha2VTcmMgewotICBHc3RCYXNlU3JjICAgICBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBnYm9vbGVhbgkgaGFzX2xvb3A7Ci0gIGdib29sZWFuCSBoYXNfZ2V0cmFuZ2U7Ci0KLSAgR3N0RmFrZVNyY091dHB1dFR5cGUgb3V0cHV0OwotICBHc3RGYWtlU3JjRGF0YVR5cGUgICBkYXRhOwotICBHc3RGYWtlU3JjU2l6ZVR5cGUgICBzaXpldHlwZTsKLSAgR3N0RmFrZVNyY0ZpbGxUeXBlICAgZmlsbHR5cGU7Ci0KLSAgZ3VpbnQJCXNpemVtaW47Ci0gIGd1aW50CQlzaXplbWF4OwotICBHc3RCdWZmZXIJKnBhcmVudDsKLSAgZ3VpbnQJCXBhcmVudHNpemU7Ci0gIGd1aW50CQlwYXJlbnRvZmZzZXQ7Ci0gIGd1aW50OAkgcGF0dGVybl9ieXRlOwotICBHTGlzdAkJKnBhdHRlcm5saXN0OwotICBnaW50CQkgZGF0YXJhdGU7Ci0gIGdib29sZWFuCSBzeW5jOwotICBHc3RDbG9jawkqY2xvY2s7Ci0KLSAgZ2Jvb2xlYW4JIHNpbGVudDsKLSAgZ2Jvb2xlYW4JIHNpZ25hbF9oYW5kb2ZmczsKLSAgZ2Jvb2xlYW4JIGR1bXA7Ci0gIGdib29sZWFuCSBjYW5fYWN0aXZhdGVfcHVsbDsKLSAgR3N0Rm9ybWF0ICAgICAgZm9ybWF0OwotCi0gIGd1aW50NjQgICAgICAgIGJ5dGVzX3NlbnQ7Ci0KLSAgZ2NoYXIJCSpsYXN0X21lc3NhZ2U7Ci19OwotCi1zdHJ1Y3QgX0dzdEZha2VTcmNDbGFzcyB7Ci0gIEdzdEJhc2VTcmNDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyo8IHB1YmxpYyA+Ki8KLSAgLyogc2lnbmFscyAqLwotICB2b2lkICgqaGFuZG9mZikgKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdEJ1ZmZlciAqYnVmLCBHc3RQYWQgKnBhZCk7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X2Zha2Vfc3JjX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZBS0VfU1JDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDI0M2UuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDYzMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKgotICogZ3N0ZmRzaW5rLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZmRzaW5rCi0gKiBAc2VlX2Fsc286ICNHc3RGZFNyYwotICoKLSAqIFdyaXRlIGRhdGEgdG8gYSB1bml4IGZpbGUgZGVzY3JpcHRvci4KLSAqCi0gKiBUaGlzIGVsZW1lbnQgd2lsbCBzeW5jaHJvbml6ZSBvbiB0aGUgY2xvY2sgYmVmb3JlIHdyaXRpbmcgdGhlIGRhdGEgb24gdGhlCi0gKiBzb2NrZXQuIEZvciBmaWxlIGRlc2NyaXB0b3JzIHdoZXJlIHRoaXMgZG9lcyBub3QgbWFrZSBzZW5zZSAoZmlsZXMsIC4uLikgdGhlCi0gKiAjR3N0QmFzZVNpbms6c3luYyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHN5bmNocm9uaXNhdGlvbi4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIi4uLy4uL2dzdC9nc3QtaTE4bi1saWIuaCIKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZmRlZiBfTVNDX1ZFUgotI3VuZGVmIHN0YXQKLSNkZWZpbmUgc3RhdCBfc3RhdAotI2RlZmluZSBmc3RhdCBfZnN0YXQKLSNkZWZpbmUgU19JU1JFRyhtKQkoKChtKSZTX0lGUkVHKT09U19JRlJFRykKLSNlbmRpZgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RmZHNpbmsuaCIKLSNpbmNsdWRlICJnc3RlbGVtZW50c19wcml2YXRlLmgiCi0KLSNpZmRlZiBHX09TX1dJTjMyCi0jaW5jbHVkZSA8aW8uaD4gICAgICAgICAgICAgICAgIC8qIGxzZWVrLCBvcGVuLCBjbG9zZSwgcmVhZCAqLwotI3VuZGVmIGxzZWVrCi0jZGVmaW5lIGxzZWVrIF9sc2Vla2k2NAotI3VuZGVmIG9mZl90Ci0jZGVmaW5lIG9mZl90IGd1aW50NjQKLSNlbmRpZgotCi0jaWZkZWYgX19CSU9OSUNfXyAgICAgICAgICAgICAgIC8qIEFuZHJvaWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBsc2VlazY0Ci0jdW5kZWYgZnN0YXQKLSNkZWZpbmUgZnN0YXQgZnN0YXQ2NAotI3VuZGVmIG9mZl90Ci0jZGVmaW5lIG9mZl90IGd1aW50NjQKLSNlbmRpZgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9mZF9zaW5rX19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZmRfc2lua19fZGVidWcKLQotCi0vKiBGZFNpbmsgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIEFSR18wLAotICBBUkdfRkQKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9mZF9zaW5rX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsCi0gICAgZ3BvaW50ZXIgaWZhY2VfZGF0YSk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1VSSV9IQU5ETEVSLCBnc3RfZmRfc2lua191cmlfaGFuZGxlcl9pbml0KTsgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2ZkX3NpbmtfX2RlYnVnLCAiZmRzaW5rIiwgMCwgImZkc2luayBlbGVtZW50Iik7Ci0jZGVmaW5lIGdzdF9mZF9zaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RGZFNpbmssIGdzdF9mZF9zaW5rLCBHU1RfVFlQRV9CQVNFX1NJTkssIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2ZkX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2ZkX3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2ZkX3NpbmtfZGlzcG9zZSAoR09iamVjdCAqIG9iaik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc2lua19xdWVyeSAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmRfc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ZkX3NpbmtfcmVuZGVyX2xpc3QgKEdzdEJhc2VTaW5rICogYnNpbmssCi0gICAgR3N0QnVmZmVyTGlzdCAqIGJ1ZmZlcl9saXN0KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc2lua19zdGFydCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3Npbmtfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3NpbmtfdW5sb2NrIChHc3RCYXNlU2luayAqIGJhc2VzaW5rKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc2lua191bmxvY2tfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogc2luaywgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc2lua19kb19zZWVrIChHc3RGZFNpbmsgKiBmZHNpbmssIGd1aW50NjQgbmV3X29mZnNldCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmRfc2lua19jbGFzc19pbml0IChHc3RGZFNpbmtDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqZ3N0YmFzZXNpbmtfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBnc3RiYXNlc2lua19jbGFzcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZmRfc2lua19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9mZF9zaW5rX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9mZF9zaW5rX2Rpc3Bvc2U7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJGaWxlZGVzY3JpcHRvciBTaW5rIiwKLSAgICAgICJTaW5rL0ZpbGUiLAotICAgICAgIldyaXRlIGRhdGEgdG8gYSBmaWxlIGRlc2NyaXB0b3IiLCAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4iKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rdGVtcGxhdGUpOwotCi0gIGdzdGJhc2VzaW5rX2NsYXNzLT5yZW5kZXIgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NpbmtfcmVuZGVyKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnJlbmRlcl9saXN0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zaW5rX3JlbmRlcl9saXN0KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zaW5rX3N0YXJ0KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3Npbmtfc3RvcCk7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzLT51bmxvY2sgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NpbmtfdW5sb2NrKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnVubG9ja19zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zaW5rX3VubG9ja19zdG9wKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPmV2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zaW5rX2V2ZW50KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zaW5rX3F1ZXJ5KTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfRkQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZmQiLCAiZmQiLCAiQW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8gd3JpdGUgdG8iLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCAxLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mZF9zaW5rX2luaXQgKEdzdEZkU2luayAqIGZkc2luaykKLXsKLSAgZmRzaW5rLT5mZCA9IDE7Ci0gIGZkc2luay0+dXJpID0gZ19zdHJkdXBfcHJpbnRmICgiZmQ6Ly8lZCIsIGZkc2luay0+ZmQpOwotICBmZHNpbmstPmJ5dGVzX3dyaXR0ZW4gPSAwOwotICBmZHNpbmstPmN1cnJlbnRfcG9zID0gMDsKLQotICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jIChHU1RfQkFTRV9TSU5LIChmZHNpbmspLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmRfc2lua19kaXNwb3NlIChHT2JqZWN0ICogb2JqKQotewotICBHc3RGZFNpbmsgKmZkc2luayA9IEdTVF9GRF9TSU5LIChvYmopOwotCi0gIGdfZnJlZSAoZmRzaW5rLT51cmkpOwotICBmZHNpbmstPnVyaSA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iaik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZkX3NpbmtfcXVlcnkgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RGZFNpbmsgKmZkc2luazsKLQotICBmZHNpbmsgPSBHU1RfRkRfU0lOSyAoYnNpbmspOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX0JZVEVTLCBmZHNpbmstPmN1cnJlbnRfcG9zKTsKLSAgICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0ZPUk1BVFM6Ci0gICAgICBnc3RfcXVlcnlfc2V0X2Zvcm1hdHMgKHF1ZXJ5LCAyLCBHU1RfRk9STUFUX0RFRkFVTFQsIEdTVF9GT1JNQVRfQllURVMpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FVRVJZX1VSSToKLSAgICAgIGdzdF9xdWVyeV9zZXRfdXJpIChxdWVyeSwgZmRzaW5rLT51cmkpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FVRVJZX1NFRUtJTkc6ewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUyB8fCBmb3JtYXQgPT0gR1NUX0ZPUk1BVF9ERUZBVUxUKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfc2Vla2luZyAocXVlcnksIEdTVF9GT1JNQVRfQllURVMsIGZkc2luay0+c2Vla2FibGUsIDAsCi0gICAgICAgICAgICAtMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfcXVlcnlfc2V0X3NlZWtpbmcgKHF1ZXJ5LCBmb3JtYXQsIEZBTFNFLCAwLCAtMSk7Ci0gICAgICB9Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBHU1RfQkFTRV9TSU5LX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5xdWVyeSAoYnNpbmssIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotCi0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mZF9zaW5rX3JlbmRlcl9idWZmZXJzIChHc3RGZFNpbmsgKiBzaW5rLCBHc3RCdWZmZXIgKiogYnVmZmVycywKLSAgICBndWludCBudW1fYnVmZmVycywgZ3VpbnQ4ICogbWVtX251bXMsIGd1aW50IHRvdGFsX21lbXMpCi17Ci0gIHJldHVybiBnc3Rfd3JpdGV2X2J1ZmZlcnMgKEdTVF9PQkpFQ1RfQ0FTVCAoc2luayksIHNpbmstPmZkLCBzaW5rLT5mZHNldCwKLSAgICAgIGJ1ZmZlcnMsIG51bV9idWZmZXJzLCBtZW1fbnVtcywgdG90YWxfbWVtcywgJnNpbmstPmJ5dGVzX3dyaXR0ZW4sCi0gICAgICAmc2luay0+Y3VycmVudF9wb3MpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2ZkX3NpbmtfcmVuZGVyX2xpc3QgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEJ1ZmZlckxpc3QgKiBidWZmZXJfbGlzdCkKLXsKLSAgR3N0Rmxvd1JldHVybiBmbG93OwotICBHc3RCdWZmZXIgKipidWZmZXJzOwotICBHc3RGZFNpbmsgKnNpbms7Ci0gIGd1aW50OCAqbWVtX251bXM7Ci0gIGd1aW50IHRvdGFsX21lbXM7Ci0gIGd1aW50IGksIG51bV9idWZmZXJzOwotCi0gIHNpbmsgPSBHU1RfRkRfU0lOS19DQVNUIChic2luayk7Ci0KLSAgbnVtX2J1ZmZlcnMgPSBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChidWZmZXJfbGlzdCk7Ci0gIGlmIChudW1fYnVmZmVycyA9PSAwKQotICAgIGdvdG8gbm9fZGF0YTsKLQotICAvKiBleHRyYWN0IGJ1ZmZlcnMgZnJvbSBsaXN0IGFuZCBjb3VudCBtZW1vcmllcyAqLwotICBidWZmZXJzID0gZ19uZXdhIChHc3RCdWZmZXIgKiwgbnVtX2J1ZmZlcnMpOwotICBtZW1fbnVtcyA9IGdfbmV3YSAoZ3VpbnQ4LCBudW1fYnVmZmVycyk7Ci0gIGZvciAoaSA9IDAsIHRvdGFsX21lbXMgPSAwOyBpIDwgbnVtX2J1ZmZlcnM7ICsraSkgewotICAgIGJ1ZmZlcnNbaV0gPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChidWZmZXJfbGlzdCwgaSk7Ci0gICAgbWVtX251bXNbaV0gPSBnc3RfYnVmZmVyX25fbWVtb3J5IChidWZmZXJzW2ldKTsKLSAgICB0b3RhbF9tZW1zICs9IG1lbV9udW1zW2ldOwotICB9Ci0KLSAgZmxvdyA9Ci0gICAgICBnc3RfZmRfc2lua19yZW5kZXJfYnVmZmVycyAoc2luaywgYnVmZmVycywgbnVtX2J1ZmZlcnMsIG1lbV9udW1zLAotICAgICAgdG90YWxfbWVtcyk7Ci0KLSAgcmV0dXJuIGZsb3c7Ci0KLW5vX2RhdGE6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc2luaywgImVtcHR5IGJ1ZmZlciBsaXN0Iik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmRfc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiBmbG93OwotICBHc3RGZFNpbmsgKnNpbms7Ci0gIGd1aW50OCBuX21lbTsKLQotICBzaW5rID0gR1NUX0ZEX1NJTktfQ0FTVCAoYnNpbmspOwotCi0gIG5fbWVtID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmZmVyKTsKLQotICBpZiAobl9tZW0gPiAwKQotICAgIGZsb3cgPSBnc3RfZmRfc2lua19yZW5kZXJfYnVmZmVycyAoc2luaywgJmJ1ZmZlciwgMSwgJm5fbWVtLCBuX21lbSk7Ci0gIGVsc2UKLSAgICBmbG93ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgcmV0dXJuIGZsb3c7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZkX3NpbmtfY2hlY2tfZmQgKEdzdEZkU2luayAqIGZkc2luaywgaW50IGZkLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIHN0cnVjdCBzdGF0IHN0YXRfcmVzdWx0czsKLSAgb2ZmX3QgcmVzdWx0OwotCi0gIC8qIHNlZSB0aGF0IGl0IGlzIGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yICovCi0gIGlmIChmc3RhdCAoZmQsICZzdGF0X3Jlc3VsdHMpIDwgMCkKLSAgICBnb3RvIGludmFsaWQ7Ci0KLSAgaWYgKCFTX0lTUkVHIChzdGF0X3Jlc3VsdHMuc3RfbW9kZSkpCi0gICAgZ290byBub3Rfc2Vla2FibGU7Ci0KLSAgLyogc2VlIGlmIGl0IGlzIGEgc2Vla2FibGUgc3RyZWFtICovCi0gIHJlc3VsdCA9IGxzZWVrIChmZCwgMCwgU0VFS19DVVIpOwotICBpZiAocmVzdWx0ID09IC0xKSB7Ci0gICAgc3dpdGNoIChlcnJubykgewotICAgICAgY2FzZSBFSU5WQUw6Ci0gICAgICBjYXNlIEVCQURGOgotICAgICAgICBnb3RvIGludmFsaWQ7Ci0KLSAgICAgIGNhc2UgRVNQSVBFOgotICAgICAgICBnb3RvIG5vdF9zZWVrYWJsZTsKLSAgICB9Ci0gIH0gZWxzZQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZkc2luaywgIkZpbGUgZGVzY3JpcHRvciAlZCBpcyBzZWVrYWJsZSIsIGZkKTsKLQotICByZXR1cm4gVFJVRTsKLQotaW52YWxpZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmZHNpbmssIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLAotICAgICAgICAoIkZpbGUgZGVzY3JpcHRvciAlZCBpcyBub3QgdmFsaWQ6ICVzIiwgZmQsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfUkVGRVJFTkNFLAotICAgICAgICAiRmlsZSBkZXNjcmlwdG9yICVkIGlzIG5vdCB2YWxpZDogJXMiLCBmZCwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vdF9zZWVrYWJsZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZkc2luaywgIkZpbGUgZGVzY3JpcHRvciAlZCBpcyBhIHBpcGUiLCBmZCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmRfc2lua19zdGFydCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0RmRTaW5rICpmZHNpbms7Ci0gIEdzdFBvbGxGRCBmZCA9IEdTVF9QT0xMX0ZEX0lOSVQ7Ci0KLSAgZmRzaW5rID0gR1NUX0ZEX1NJTksgKGJhc2VzaW5rKTsKLSAgaWYgKCFnc3RfZmRfc2lua19jaGVja19mZCAoZmRzaW5rLCBmZHNpbmstPmZkLCBOVUxMKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKChmZHNpbmstPmZkc2V0ID0gZ3N0X3BvbGxfbmV3IChUUlVFKSkgPT0gTlVMTCkKLSAgICBnb3RvIHNvY2tldF9wYWlyOwotCi0gIGZkLmZkID0gZmRzaW5rLT5mZDsKLSAgZ3N0X3BvbGxfYWRkX2ZkIChmZHNpbmstPmZkc2V0LCAmZmQpOwotICBnc3RfcG9sbF9mZF9jdGxfd3JpdGUgKGZkc2luay0+ZmRzZXQsICZmZCwgVFJVRSk7Ci0KLSAgZmRzaW5rLT5ieXRlc193cml0dGVuID0gMDsKLSAgZmRzaW5rLT5jdXJyZW50X3BvcyA9IDA7Ci0KLSAgZmRzaW5rLT5zZWVrYWJsZSA9IGdzdF9mZF9zaW5rX2RvX3NlZWsgKGZkc2luaywgMCk7Ci0gIEdTVF9JTkZPX09CSkVDVCAoZmRzaW5rLCAic2Vla2luZyBzdXBwb3J0ZWQ6ICVkIiwgZmRzaW5rLT5zZWVrYWJsZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1zb2NrZXRfcGFpcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmZHNpbmssIFJFU09VUkNFLCBPUEVOX1JFQURfV1JJVEUsIChOVUxMKSwKLSAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZkX3Npbmtfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0RmRTaW5rICpmZHNpbmsgPSBHU1RfRkRfU0lOSyAoYmFzZXNpbmspOwotCi0gIGlmIChmZHNpbmstPmZkc2V0KSB7Ci0gICAgZ3N0X3BvbGxfZnJlZSAoZmRzaW5rLT5mZHNldCk7Ci0gICAgZmRzaW5rLT5mZHNldCA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmRfc2lua191bmxvY2sgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspCi17Ci0gIEdzdEZkU2luayAqZmRzaW5rID0gR1NUX0ZEX1NJTksgKGJhc2VzaW5rKTsKLQotICBHU1RfTE9HX09CSkVDVCAoZmRzaW5rLCAiRmx1c2hpbmciKTsKLSAgR1NUX09CSkVDVF9MT0NLIChmZHNpbmspOwotICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKGZkc2luay0+ZmRzZXQsIFRSVUUpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmRzaW5rKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmRfc2lua191bmxvY2tfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0RmRTaW5rICpmZHNpbmsgPSBHU1RfRkRfU0lOSyAoYmFzZXNpbmspOwotCi0gIEdTVF9MT0dfT0JKRUNUIChmZHNpbmssICJObyBsb25nZXIgZmx1c2hpbmciKTsKLSAgR1NUX09CSkVDVF9MT0NLIChmZHNpbmspOwotICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKGZkc2luay0+ZmRzZXQsIEZBTFNFKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZkc2luayk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZkX3NpbmtfdXBkYXRlX2ZkIChHc3RGZFNpbmsgKiBmZHNpbmssIGludCBuZXdfZmQsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgaWYgKG5ld19mZCA8IDApIHsKLSAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1JFRkVSRU5DRSwKLSAgICAgICAgIkZpbGUgZGVzY3JpcHRvciAlZCBpcyBub3QgdmFsaWQiLCBuZXdfZmQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmICghZ3N0X2ZkX3NpbmtfY2hlY2tfZmQgKGZkc2luaywgbmV3X2ZkLCBlcnJvcikpCi0gICAgZ290byBpbnZhbGlkOwotCi0gIC8qIGFzc2lnbiB0aGUgZmQgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChmZHNpbmspOwotICBpZiAoZmRzaW5rLT5mZHNldCkgewotICAgIEdzdFBvbGxGRCBmZCA9IEdTVF9QT0xMX0ZEX0lOSVQ7Ci0KLSAgICBmZC5mZCA9IGZkc2luay0+ZmQ7Ci0gICAgZ3N0X3BvbGxfcmVtb3ZlX2ZkIChmZHNpbmstPmZkc2V0LCAmZmQpOwotCi0gICAgZmQuZmQgPSBuZXdfZmQ7Ci0gICAgZ3N0X3BvbGxfYWRkX2ZkIChmZHNpbmstPmZkc2V0LCAmZmQpOwotICAgIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAoZmRzaW5rLT5mZHNldCwgJmZkLCBUUlVFKTsKLSAgfQotICBmZHNpbmstPmZkID0gbmV3X2ZkOwotICBnX2ZyZWUgKGZkc2luay0+dXJpKTsKLSAgZmRzaW5rLT51cmkgPSBnX3N0cmR1cF9wcmludGYgKCJmZDovLyVkIiwgZmRzaW5rLT5mZCk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZkc2luayk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWludmFsaWQ6Ci0gIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mZF9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RGZFNpbmsgKmZkc2luazsKLQotICBmZHNpbmsgPSBHU1RfRkRfU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIEFSR19GRDp7Ci0gICAgICBpbnQgZmQ7Ci0KLSAgICAgIGZkID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnc3RfZmRfc2lua191cGRhdGVfZmQgKGZkc2luaywgZmQsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mZF9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RGZFNpbmsgKmZkc2luazsKLQotICBmZHNpbmsgPSBHU1RfRkRfU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIEFSR19GRDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZkc2luay0+ZmQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mZF9zaW5rX2RvX3NlZWsgKEdzdEZkU2luayAqIGZkc2luaywgZ3VpbnQ2NCBuZXdfb2Zmc2V0KQotewotICBvZmZfdCByZXN1bHQ7Ci0KLSAgcmVzdWx0ID0gbHNlZWsgKGZkc2luay0+ZmQsIG5ld19vZmZzZXQsIFNFRUtfU0VUKTsKLQotICBpZiAocmVzdWx0ID09IC0xKQotICAgIGdvdG8gc2Vla19mYWlsZWQ7Ci0KLSAgZmRzaW5rLT5jdXJyZW50X3BvcyA9IG5ld19vZmZzZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZmRzaW5rLCAiRmlsZSBkZXNjcmlwdG9yICVkIHRvIHNlZWsgdG8gcG9zaXRpb24gIgotICAgICAgIiUiIEdfR1VJTlQ2NF9GT1JNQVQsIGZkc2luay0+ZmQsIGZkc2luay0+Y3VycmVudF9wb3MpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotc2Vla19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChmZHNpbmssICJGaWxlIGRlc2NyaXB0b3IgJWQgZmFpbGVkIHRvIHNlZWsgdG8gcG9zaXRpb24gIgotICAgICAgICAiJSIgR19HVUlOVDY0X0ZPUk1BVCwgZmRzaW5rLT5mZCwgbmV3X29mZnNldCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZkX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogc2luaywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0RXZlbnRUeXBlIHR5cGU7Ci0gIEdzdEZkU2luayAqZmRzaW5rOwotCi0gIGZkc2luayA9IEdTVF9GRF9TSU5LIChzaW5rKTsKLQotICB0eXBlID0gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KTsKLQotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgIHsKLSAgICAgIGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChldmVudCwgJnNlZ21lbnQpOwotCi0gICAgICBpZiAoc2VnbWVudC0+Zm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICAgICAgLyogb25seSB0cnkgdG8gc2VlayBhbmQgZmFpbCB3aGVuIHdlIGFyZSBnb2luZyB0byBhIGRpZmZlcmVudAotICAgICAgICAgKiBwb3NpdGlvbiAqLwotICAgICAgICBpZiAoZmRzaW5rLT5jdXJyZW50X3BvcyAhPSBzZWdtZW50LT5zdGFydCkgewotICAgICAgICAgIC8qIEZJWE1FLCB0aGUgc2VlayBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBwb3MgZmllbGQsIHN0YXJ0L3N0b3AgYXJlCi0gICAgICAgICAgICoganVzdCBib3VuZGFyaWVzIGZvciB2YWxpZCBieXRlcyBvZmZzZXRzLiBXZSBzaG91bGQgYWxzbyBmaWxsIHRoZSBmaWxlCi0gICAgICAgICAgICogd2l0aCB6ZXJvZXMgaWYgdGhlIG5ldyBwb3NpdGlvbiBleHRlbmRzIHRoZSBjdXJyZW50IEVPRiAoc3BhcnNlIHN0cmVhbXMKLSAgICAgICAgICAgKiBhbmQgc2VnbWVudCBhY2N1bXVsYXRpb24pLiAqLwotICAgICAgICAgIGlmICghZ3N0X2ZkX3NpbmtfZG9fc2VlayAoZmRzaW5rLCAoZ3VpbnQ2NCkgc2VnbWVudC0+c3RhcnQpKQotICAgICAgICAgICAgZ290byBzZWVrX2ZhaWxlZDsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmRzaW5rLAotICAgICAgICAgICAgIklnbm9yZWQgU0VHTUVOVCBldmVudCBvZiBmb3JtYXQgJXUgKCVzKSIsIChndWludCkgc2VnbWVudC0+Zm9ybWF0LAotICAgICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoc2VnbWVudC0+Zm9ybWF0KSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9CQVNFX1NJTktfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmV2ZW50IChzaW5rLCBldmVudCk7Ci0KLXNlZWtfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGZkc2luaywgUkVTT1VSQ0UsIFNFRUssIChOVUxMKSwKLSAgICAgICAgKCJFcnJvciB3aGlsZSBzZWVraW5nIG9uIGZpbGUgZGVzY3JpcHRvciAlZDogJXMiLAotICAgICAgICAgICAgZmRzaW5rLT5mZCwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLX0KLQotLyoqKiBHU1RVUklIQU5ETEVSIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgR3N0VVJJVHlwZQotZ3N0X2ZkX3NpbmtfdXJpX2dldF90eXBlIChHVHlwZSB0eXBlKQotewotICByZXR1cm4gR1NUX1VSSV9TSU5LOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmNvbnN0ICoKLWdzdF9mZF9zaW5rX3VyaV9nZXRfcHJvdG9jb2xzIChHVHlwZSB0eXBlKQotewotICBzdGF0aWMgY29uc3QgZ2NoYXIgKnByb3RvY29sc1tdID0geyAiZmQiLCBOVUxMIH07Ci0KLSAgcmV0dXJuIHByb3RvY29sczsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF9mZF9zaW5rX3VyaV9nZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlcikKLXsKLSAgR3N0RmRTaW5rICpzaW5rID0gR1NUX0ZEX1NJTksgKGhhbmRsZXIpOwotCi0gIC8qIEZJWE1FOiBtYWtlIHRocmVhZC1zYWZlICovCi0gIHJldHVybiBnX3N0cmR1cCAoc2luay0+dXJpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmRfc2lua191cmlfc2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsIGNvbnN0IGdjaGFyICogdXJpLAotICAgIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgR3N0RmRTaW5rICpzaW5rID0gR1NUX0ZEX1NJTksgKGhhbmRsZXIpOwotICBnaW50IGZkOwotCi0gIGlmIChzc2NhbmYgKHVyaSwgImZkOi8vJWQiLCAmZmQpICE9IDEpIHsKLSAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1VSSSwKLSAgICAgICAgIkZpbGUgZGVzY3JpcHRvciBVUkkgY291bGQgbm90IGJlIHBhcnNlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBnc3RfZmRfc2lua191cGRhdGVfZmQgKHNpbmssIGZkLCBlcnJvcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmRfc2lua191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF90eXBlID0gZ3N0X2ZkX3NpbmtfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF9mZF9zaW5rX3VyaV9nZXRfcHJvdG9jb2xzOwotICBpZmFjZS0+Z2V0X3VyaSA9IGdzdF9mZF9zaW5rX3VyaV9nZXRfdXJpOwotICBpZmFjZS0+c2V0X3VyaSA9IGdzdF9mZF9zaW5rX3VyaV9zZXRfdXJpOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmRzaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YTIzNDAuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3RmZHNpbmsuaDoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfRkRfU0lOS19IX18KLSNkZWZpbmUgX19HU1RfRkRfU0lOS19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLQotI2RlZmluZSBHU1RfVFlQRV9GRF9TSU5LIFwKLSAgKGdzdF9mZF9zaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9GRF9TSU5LKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRkRfU0lOSyxHc3RGZFNpbmspKQotI2RlZmluZSBHU1RfRkRfU0lOS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9GRF9TSU5LLEdzdEZkU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0ZEX1NJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9GRF9TSU5LKSkKLSNkZWZpbmUgR1NUX0lTX0ZEX1NJTktfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfRkRfU0lOSykpCi0jZGVmaW5lIEdTVF9GRF9TSU5LX0NBU1Qob2JqKSAoKEdzdEZkU2luayAqKShvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RmRTaW5rIEdzdEZkU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGZFNpbmtDbGFzcyBHc3RGZFNpbmtDbGFzczsKLQotLyoqCi0gKiBHc3RGZFNpbms6Ci0gKgotICogVGhlIG9wYXF1ZSAjR3N0RmRTaW5rIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdEZkU2luayB7Ci0gIEdzdEJhc2VTaW5rIHBhcmVudDsKLQotICBnY2hhciAqdXJpOwotCi0gIEdzdFBvbGwgKmZkc2V0OwotCi0gIGludCBmZDsKLSAgZ3VpbnQ2NCBieXRlc193cml0dGVuOwotICBndWludDY0IGN1cnJlbnRfcG9zOwotCi0gIGdib29sZWFuIHNlZWthYmxlOwotfTsKLQotc3RydWN0IF9Hc3RGZFNpbmtDbGFzcyB7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR19HTlVDX0lOVEVSTkFMIEdUeXBlIGdzdF9mZF9zaW5rX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZEX1NJTktfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OWE2MTQuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjk1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFBoaWxpcHBlIEtoYWxhZiA8YnVyZ2VyQHNwZWVkeS5vcmc+Ci0gKgotICogZ3N0ZmRzcmMuYzoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZmRzcmMKLSAqIEBzZWVfYWxzbzogI0dzdEZkU2luawotICoKLSAqIFJlYWQgZGF0YSBmcm9tIGEgdW5peCBmaWxlIGRlc2NyaXB0b3IuCi0gKgotICogVG8gZ2VuZXJhdGUgZGF0YSwgZW50ZXIgc29tZSBkYXRhIG9uIHRoZSBjb25zb2xlIGZvbGxvd2VkIGJ5IGVudGVyLgotICogVGhlIGFib3ZlIG1lbnRpb25lZCBwaXBlbGluZSBzaG91bGQgZHVtcCBkYXRhIHBhY2tldHMgdG8gdGhlIGNvbnNvbGUuCi0gKgotICogSWYgdGhlICNHc3RGZFNyYzp0aW1lb3V0IHByb3BlcnR5IGlzIHNldCB0byBhIHZhbHVlIGJpZ2dlciB0aGFuIDAsIGZkc3JjIHdpbGwKLSAqIGdlbmVyYXRlIGFuIGVsZW1lbnQgbWVzc2FnZSBuYW1lZCA8Y2xhc3NuYW1lPiZxdW90O0dzdEZkU3JjVGltZW91dCZxdW90OzwvY2xhc3NuYW1lPgotICogaWYgbm8gZGF0YSB3YXMgcmVjZWl2ZWQgaW4gdGhlIGdpdmVuIHRpbWVvdXQuCi0gKgotICogVGhlIG1lc3NhZ2UncyBzdHJ1Y3R1cmUgY29udGFpbnMgb25lIGZpZWxkOgotICogPGl0ZW1pemVkbGlzdD4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNndWludDY0Ci0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7dGltZW91dCZxdW90OzwvY2xhc3NuYW1lPjogdGhlIHRpbWVvdXQgaW4gbWljcm9zZWNvbmRzIHRoYXQKLSAqICAgZXhwaXJlZCB3aGVuIHdhaXRpbmcgZm9yIGRhdGEuCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZWNobyAiSGVsbG8gR1N0cmVhbWVyIiB8IGdzdC1sYXVuY2gtMS4wIC12IGZkc3JjICEgZmFrZXNpbmsgZHVtcD10cnVlCi0gKiBdfCBBIHNpbXBsZSBwaXBlbGluZSB0byByZWFkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBkdW1wIHRoZSBkYXRhCi0gKiB3aXRoIGEgZmFrZXNpbmsgYXMgaGV4IGFzY2lpIGJsb2NrLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJnc3QvZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZmRlZiBfTVNDX1ZFUgotI3VuZGVmIHN0YXQKLSNkZWZpbmUgc3RhdCBfc3RhdAotI2RlZmluZSBmc3RhdCBfZnN0YXQKLSNkZWZpbmUgU19JU1JFRyhtKQkoKChtKSZTX0lGUkVHKT09U19JRlJFRykKLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlICJnc3RmZHNyYy5oIgotCi0jaWZkZWYgX19CSU9OSUNfXyAgICAgICAgICAgICAgIC8qIEFuZHJvaWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBsc2VlazY0Ci0jdW5kZWYgZnN0YXQKLSNkZWZpbmUgZnN0YXQgZnN0YXQ2NAotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2ZkX3NyY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZmRfc3JjX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9GRCAgICAgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX1RJTUVPVVQgICAgICAgICAwCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotCi0gIFBST1BfRkQsCi0gIFBST1BfVElNRU9VVCwKLQotICBQUk9QX0xBU1QKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9mZF9zcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwgZ3BvaW50ZXIgaWZhY2VfZGF0YSk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1VSSV9IQU5ETEVSLCBnc3RfZmRfc3JjX3VyaV9oYW5kbGVyX2luaXQpOyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfZmRfc3JjX2RlYnVnLCAiZmRzcmMiLCAwLCAiZmRzcmMgZWxlbWVudCIpOwotI2RlZmluZSBnc3RfZmRfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RGZFNyYywgZ3N0X2ZkX3NyYywgR1NUX1RZUEVfUFVTSF9TUkMsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2ZkX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZmRfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9mZF9zcmNfZGlzcG9zZSAoR09iamVjdCAqIG9iaik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc3JjX3N0YXJ0IChHc3RCYXNlU3JjICogYnNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3NyY19zdG9wIChHc3RCYXNlU3JjICogYnNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3NyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBic3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc3JjX3VubG9ja19zdG9wIChHc3RCYXNlU3JjICogYnNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZkX3NyY19pc19zZWVrYWJsZSAoR3N0QmFzZVNyYyAqIGJzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9mZF9zcmNfZ2V0X3NpemUgKEdzdEJhc2VTcmMgKiBzcmMsIGd1aW50NjQgKiBzaXplKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc3JjX2RvX3NlZWsgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFNlZ21lbnQgKiBzZWdtZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmRfc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ZkX3NyY19jcmVhdGUgKEdzdFB1c2hTcmMgKiBwc3JjLCBHc3RCdWZmZXIgKiogb3V0YnVmKTsKLQotc3RhdGljIHZvaWQKLWdzdF9mZF9zcmNfY2xhc3NfaW5pdCAoR3N0RmRTcmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlc3JjX2NsYXNzOwotICBHc3RQdXNoU3JjQ2xhc3MgKmdzdHB1c2hfc3JjX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0YmFzZXNyY19jbGFzcyA9IEdTVF9CQVNFX1NSQ19DTEFTUyAoa2xhc3MpOwotICBnc3RwdXNoX3NyY19jbGFzcyA9IEdTVF9QVVNIX1NSQ19DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9mZF9zcmNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZmRfc3JjX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9mZF9zcmNfZGlzcG9zZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0ZELAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImZkIiwgImZkIiwgIkFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIHJlYWQgZnJvbSIsCi0gICAgICAgICAgMCwgR19NQVhJTlQsIERFRkFVTFRfRkQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0RmRTcmM6dGltZW91dAotICAgKgotICAgKiBQb3N0IGEgbWVzc2FnZSBhZnRlciB0aW1lb3V0IG1pY3Jvc2Vjb25kcwotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9USU1FT1VULAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInRpbWVvdXQiLCAiVGltZW91dCIsCi0gICAgICAgICAgIlBvc3QgYSBtZXNzYWdlIGFmdGVyIHRpbWVvdXQgbWljcm9zZWNvbmRzICgwID0gZGlzYWJsZWQpIiwgMCwKLSAgICAgICAgICBHX01BWFVJTlQ2NCwgREVGQVVMVF9USU1FT1VULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiRmlsZWRlc2NyaXB0b3IgU291cmNlIiwKLSAgICAgICJTb3VyY2UvRmlsZSIsCi0gICAgICAiUmVhZCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yIiwgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Iik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjdGVtcGxhdGUpOwotCi0gIGdzdGJhc2VzcmNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zcmNfc3RhcnQpOwotICBnc3RiYXNlc3JjX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zcmNfc3RvcCk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPnVubG9jayA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc3JjX3VubG9jayk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPnVubG9ja19zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mZF9zcmNfdW5sb2NrX3N0b3ApOwotICBnc3RiYXNlc3JjX2NsYXNzLT5pc19zZWVrYWJsZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc3JjX2lzX3NlZWthYmxlKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+Z2V0X3NpemUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NyY19nZXRfc2l6ZSk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPmRvX3NlZWsgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NyY19kb19zZWVrKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZkX3NyY19xdWVyeSk7Ci0KLSAgZ3N0cHVzaF9zcmNfY2xhc3MtPmNyZWF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmRfc3JjX2NyZWF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmRfc3JjX2luaXQgKEdzdEZkU3JjICogZmRzcmMpCi17Ci0gIGZkc3JjLT5uZXdfZmQgPSBERUZBVUxUX0ZEOwotICBmZHNyYy0+c2Vla2FibGVfZmQgPSBGQUxTRTsKLSAgZmRzcmMtPmZkID0gLTE7Ci0gIGZkc3JjLT5zaXplID0gLTE7Ci0gIGZkc3JjLT50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOwotICBmZHNyYy0+dXJpID0gZ19zdHJkdXBfcHJpbnRmICgiZmQ6Ly8wIik7Ci0gIGZkc3JjLT5jdXJvZmZzZXQgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZkX3NyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqKQotewotICBHc3RGZFNyYyAqc3JjID0gR1NUX0ZEX1NSQyAob2JqKTsKLQotICBnX2ZyZWUgKHNyYy0+dXJpKTsKLSAgc3JjLT51cmkgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmopOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZkX3NyY191cGRhdGVfZmQgKEdzdEZkU3JjICogc3JjLCBndWludDY0IHNpemUpCi17Ci0gIHN0cnVjdCBzdGF0IHN0YXRfcmVzdWx0czsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmZHNldCAlcCwgb2xkX2ZkICVkLCBuZXdfZmQgJWQiLCBzcmMtPmZkc2V0LCBzcmMtPmZkLAotICAgICAgc3JjLT5uZXdfZmQpOwotCi0gIC8qIHdlIG5lZWQgdG8gYWx3YXlzIHVwZGF0ZSB0aGUgZmRzZXQgc2luY2UgaXQgbWF5IG5vdCBoYXZlIGV4aXN0ZWQgd2hlbgotICAgKiBnc3RfZmRfc3JjX3VwZGF0ZV9mZCAoKSB3YXMgY2FsbGVkIGVhcmxpZXIgKi8KLSAgaWYgKHNyYy0+ZmRzZXQgIT0gTlVMTCkgewotICAgIEdzdFBvbGxGRCBmZCA9IEdTVF9QT0xMX0ZEX0lOSVQ7Ci0KLSAgICBpZiAoc3JjLT5mZCA+PSAwKSB7Ci0gICAgICBmZC5mZCA9IHNyYy0+ZmQ7Ci0gICAgICAvKiB0aGlzIHdpbGwgbG9nIGEgaGFybWxlc3Mgd2FybmluZywgaWYgaXQgd2FzIG5ldmVyIGFkZGVkICovCi0gICAgICBnc3RfcG9sbF9yZW1vdmVfZmQgKHNyYy0+ZmRzZXQsICZmZCk7Ci0gICAgfQotCi0gICAgZmQuZmQgPSBzcmMtPm5ld19mZDsKLSAgICBnc3RfcG9sbF9hZGRfZmQgKHNyYy0+ZmRzZXQsICZmZCk7Ci0gICAgZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKHNyYy0+ZmRzZXQsICZmZCwgVFJVRSk7Ci0gIH0KLQotCi0gIGlmIChzcmMtPmZkICE9IHNyYy0+bmV3X2ZkKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJVcGRhdGluZyB0byBmZCAlZCIsIHNyYy0+bmV3X2ZkKTsKLQotICAgIHNyYy0+ZmQgPSBzcmMtPm5ld19mZDsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAiU2V0dGluZyBzaXplIHRvIGZkICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHNpemUpOwotICAgIHNyYy0+c2l6ZSA9IHNpemU7Ci0KLSAgICBnX2ZyZWUgKHNyYy0+dXJpKTsKLSAgICBzcmMtPnVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoImZkOi8vJWQiLCBzcmMtPmZkKTsKLQotICAgIGlmIChmc3RhdCAoc3JjLT5mZCwgJnN0YXRfcmVzdWx0cykgPCAwKQotICAgICAgZ290byBub3Rfc2Vla2FibGU7Ci0KLSAgICBpZiAoIVNfSVNSRUcgKHN0YXRfcmVzdWx0cy5zdF9tb2RlKSkKLSAgICAgIGdvdG8gbm90X3NlZWthYmxlOwotCi0gICAgLyogVHJ5IGEgc2VlayBvZiAwIGJ5dGVzIG9mZnNldCB0byBjaGVjayBmb3Igc2Vla2FiaWxpdHkgKi8KLSAgICBpZiAobHNlZWsgKHNyYy0+ZmQsIDAsIFNFRUtfQ1VSKSA8IDApCi0gICAgICBnb3RvIG5vdF9zZWVrYWJsZTsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAibWFya2luZyBmZCAlZCBhcyBzZWVrYWJsZSIsIHNyYy0+ZmQpOwotICAgIHNyYy0+c2Vla2FibGVfZmQgPSBUUlVFOwotCi0gICAgZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemUgKEdTVF9CQVNFX1NSQyAoc3JjKSwgVFJVRSk7Ci0gIH0KLSAgcmV0dXJuOwotCi1ub3Rfc2Vla2FibGU6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgIm1hcmtpbmcgZmQgJWQgYXMgTk9UIHNlZWthYmxlIiwgc3JjLT5mZCk7Ci0gICAgc3JjLT5zZWVrYWJsZV9mZCA9IEZBTFNFOwotICAgIGdzdF9iYXNlX3NyY19zZXRfZHluYW1pY19zaXplIChHU1RfQkFTRV9TUkMgKHNyYyksIEZBTFNFKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mZF9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3RGZFNyYyAqc3JjID0gR1NUX0ZEX1NSQyAoYnNyYyk7Ci0KLSAgc3JjLT5jdXJvZmZzZXQgPSAwOwotCi0gIGlmICgoc3JjLT5mZHNldCA9IGdzdF9wb2xsX25ldyAoVFJVRSkpID09IE5VTEwpCi0gICAgZ290byBzb2NrZXRfcGFpcjsKLQotICBnc3RfZmRfc3JjX3VwZGF0ZV9mZCAoc3JjLCAtMSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1zb2NrZXRfcGFpcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQURfV1JJVEUsIChOVUxMKSwKLSAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZkX3NyY19zdG9wIChHc3RCYXNlU3JjICogYnNyYykKLXsKLSAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKGJzcmMpOwotCi0gIGlmIChzcmMtPmZkc2V0KSB7Ci0gICAgZ3N0X3BvbGxfZnJlZSAoc3JjLT5mZHNldCk7Ci0gICAgc3JjLT5mZHNldCA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmRfc3JjX3VubG9jayAoR3N0QmFzZVNyYyAqIGJzcmMpCi17Ci0gIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChic3JjKTsKLQotICBHU1RfTE9HX09CSkVDVCAoc3JjLCAiRmx1c2hpbmciKTsKLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNyYy0+ZmRzZXQsIFRSVUUpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmRfc3JjX3VubG9ja19zdG9wIChHc3RCYXNlU3JjICogYnNyYykKLXsKLSAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKGJzcmMpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChzcmMsICJObyBsb25nZXIgZmx1c2hpbmciKTsKLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNyYy0+ZmRzZXQsIEZBTFNFKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmRfc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RGZFNyYyAqc3JjID0gR1NUX0ZEX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfRkQ6Ci0gICAgICBzcmMtPm5ld19mZCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotCi0gICAgICAvKiBJZiBzdGF0ZSBpcyByZWFkeSBvciBiZWxvdywgdXBkYXRlIHRoZSBjdXJyZW50IGZkIGltbWVkaWF0ZWx5Ci0gICAgICAgKiBzbyBpdCBpcyByZWZsZWN0ZWQgaW4gZ2V0X3Byb3BlcnRpZXMgYW5kIHVyaSAqLwotICAgICAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOwotICAgICAgaWYgKEdTVF9TVEFURSAoR1NUX0VMRU1FTlQgKHNyYykpIDw9IEdTVF9TVEFURV9SRUFEWSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdGF0ZSByZWFkeSBvciBsb3dlciwgdXBkYXRpbmcgdG8gdXNlIG5ldyBmZCIpOwotICAgICAgICBnc3RfZmRfc3JjX3VwZGF0ZV9mZCAoc3JjLCAtMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdGF0ZSBhYm92ZSByZWFkeSwgbm90IHVwZGF0aW5nIHRvIG5ldyBmZCB5ZXQiKTsKLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RJTUVPVVQ6Ci0gICAgICBzcmMtPnRpbWVvdXQgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBvbGwgdGltZW91dCBzZXQgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNyYy0+dGltZW91dCkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZkX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0ZEOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc3JjLT5mZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVElNRU9VVDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHNyYy0+dGltZW91dCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmRfc3JjX2NyZWF0ZSAoR3N0UHVzaFNyYyAqIHBzcmMsIEdzdEJ1ZmZlciAqKiBvdXRidWYpCi17Ci0gIEdzdEZkU3JjICpzcmM7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBnc3NpemUgcmVhZGJ5dGVzOwotICBndWludCBibG9ja3NpemU7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLQotI2lmbmRlZiBIQVZFX1dJTjMyCi0gIEdzdENsb2NrVGltZSB0aW1lb3V0OwotICBnYm9vbGVhbiB0cnlfYWdhaW47Ci0gIGdpbnQgcmV0dmFsOwotI2VuZGlmCi0KLSAgc3JjID0gR1NUX0ZEX1NSQyAocHNyYyk7Ci0KLSNpZm5kZWYgSEFWRV9XSU4zMgotICBpZiAoc3JjLT50aW1lb3V0ID4gMCkgewotICAgIHRpbWVvdXQgPSBzcmMtPnRpbWVvdXQgKiBHU1RfVVNFQ09ORDsKLSAgfSBlbHNlIHsKLSAgICB0aW1lb3V0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIGRvIHsKLSAgICB0cnlfYWdhaW4gPSBGQUxTRTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJkb2luZyBwb2xsLCB0aW1lb3V0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3JjLT50aW1lb3V0KSk7Ci0KLSAgICByZXR2YWwgPSBnc3RfcG9sbF93YWl0IChzcmMtPmZkc2V0LCB0aW1lb3V0KTsKLSAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAicG9sbCByZXR1cm5lZCAlZCIsIHJldHZhbCk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAocmV0dmFsID09IC0xKSkgewotICAgICAgaWYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVBR0FJTikgewotICAgICAgICAvKiByZXRyeSBpZiBpbnRlcnJ1cHRlZCAqLwotICAgICAgICB0cnlfYWdhaW4gPSBUUlVFOwotICAgICAgfSBlbHNlIGlmIChlcnJubyA9PSBFQlVTWSkgewotICAgICAgICBnb3RvIHN0b3BwZWQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnb3RvIHBvbGxfZXJyb3I7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChHX1VOTElLRUxZIChyZXR2YWwgPT0gMCkpIHsKLSAgICAgIHRyeV9hZ2FpbiA9IFRSVUU7Ci0gICAgICAvKiB0aW1lb3V0LCBwb3N0IGVsZW1lbnQgbWVzc2FnZSAqLwotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChzcmMpLAotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUX0NBU1QgKHNyYyksCi0gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiR3N0RmRTcmNUaW1lb3V0IiwKLSAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IiwgR19UWVBFX1VJTlQ2NCwgc3JjLT50aW1lb3V0LCBOVUxMKSkpOwotICAgIH0KLSAgfSB3aGlsZSAoR19VTkxJS0VMWSAodHJ5X2FnYWluKSk7ICAgICAvKiByZXRyeSBpZiBpbnRlcnJ1cHRlZCBvciB0aW1lb3V0ICovCi0jZW5kaWYKLQotICBibG9ja3NpemUgPSBHU1RfQkFTRV9TUkMgKHNyYyktPmJsb2Nrc2l6ZTsKLQotICAvKiBjcmVhdGUgdGhlIGJ1ZmZlciAqLwotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgYmxvY2tzaXplLCBOVUxMKTsKLSAgaWYgKEdfVU5MSUtFTFkgKGJ1ZiA9PSBOVUxMKSkKLSAgICBnb3RvIGFsbG9jX2ZhaWxlZDsKLQotICBpZiAoIWdzdF9idWZmZXJfbWFwIChidWYsICZpbmZvLCBHU1RfTUFQX1dSSVRFKSkKLSAgICBnb3RvIGJ1ZmZlcl9yZWFkX2Vycm9yOwotCi0gIGRvIHsKLSAgICByZWFkYnl0ZXMgPSByZWFkIChzcmMtPmZkLCBpbmZvLmRhdGEsIGJsb2Nrc2l6ZSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgInJlYWQgJSIgR19HU1NJWkVfRk9STUFULCByZWFkYnl0ZXMpOwotICB9IHdoaWxlIChyZWFkYnl0ZXMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOyAgLyogcmV0cnkgaWYgaW50ZXJydXB0ZWQgKi8KLQotICBpZiAocmVhZGJ5dGVzIDwgMCkKLSAgICBnb3RvIHJlYWRfZXJyb3I7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mbyk7Ci0gIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDAsIHJlYWRieXRlcyk7Ci0KLSAgaWYgKHJlYWRieXRlcyA9PSAwKQotICAgIGdvdG8gZW9zOwotCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gc3JjLT5jdXJvZmZzZXQ7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc3JjLT5jdXJvZmZzZXQgKz0gcmVhZGJ5dGVzOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwc3JjLCAiUmVhZCBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTU0laRV9GT1JNQVQsIHJlYWRieXRlcyk7Ci0KLSAgLyogd2UncmUgZG9uZSwgcmV0dXJuIHRoZSBidWZmZXIgKi8KLSAgKm91dGJ1ZiA9IGJ1ZjsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi0jaWZuZGVmIEhBVkVfV0lOMzIKLXBvbGxfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoInBvbGwgb24gZmlsZSBkZXNjcmlwdG9yOiAlcy4iLCBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc3JjLCAiRXJyb3IgZHVyaW5nIHBvbGwiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXN0b3BwZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc3JjLCAiUG9sbCBzdG9wcGVkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci0jZW5kaWYKLWFsbG9jX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgIkZhaWxlZCB0byBhbGxvY2F0ZSAldSBieXRlcyIsIGJsb2Nrc2l6ZSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc3JjLCAiUmVhZCAwIGJ5dGVzLiBFT1MuIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci1yZWFkX2Vycm9yOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICAgKCJyZWFkIG9uIGZpbGUgZGVzY3JpcHRvcjogJXMuIiwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNyYywgIkVycm9yIHJlYWRpbmcgZnJvbSBmZCIpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1idWZmZXJfcmVhZF9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLCAoIkNhbid0IHdyaXRlIHRvIGJ1ZmZlciIpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mZF9zcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKGJhc2VzcmMpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1VSSToKLSAgICAgIGdzdF9xdWVyeV9zZXRfdXJpIChxdWVyeSwgc3JjLT51cmkpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKCFyZXQpCi0gICAgcmV0ID0gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5xdWVyeSAoYmFzZXNyYywgcXVlcnkpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZkX3NyY19pc19zZWVrYWJsZSAoR3N0QmFzZVNyYyAqIGJzcmMpCi17Ci0gIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChic3JjKTsKLQotICByZXR1cm4gc3JjLT5zZWVrYWJsZV9mZDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmRfc3JjX2dldF9zaXplIChHc3RCYXNlU3JjICogYnNyYywgZ3VpbnQ2NCAqIHNpemUpCi17Ci0gIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChic3JjKTsKLSAgc3RydWN0IHN0YXQgc3RhdF9yZXN1bHRzOwotCi0gIGlmIChzcmMtPnNpemUgIT0gLTEpIHsKLSAgICAqc2l6ZSA9IHNyYy0+c2l6ZTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmICghc3JjLT5zZWVrYWJsZV9mZCkgewotICAgIC8qIElmIGl0IGlzbid0IHNlZWthYmxlLCB3ZSB3b24ndCBrbm93IHRoZSBsZW5ndGggKGJ1dCBmc3RhdCB3aWxsIHN0aWxsCi0gICAgICogc3VjY2VlZCwgYW5kIHdyb25nbHkgc2F5IG91ciBsZW5ndGggaXMgemVyby4gKi8KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoZnN0YXQgKHNyYy0+ZmQsICZzdGF0X3Jlc3VsdHMpIDwgMCkKLSAgICBnb3RvIGNvdWxkX25vdF9zdGF0OwotCi0gICpzaXplID0gc3RhdF9yZXN1bHRzLnN0X3NpemU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1IgKi8KLWNvdWxkX25vdF9zdGF0OgotICB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZkX3NyY19kb19zZWVrIChHc3RCYXNlU3JjICogYnNyYywgR3N0U2VnbWVudCAqIHNlZ21lbnQpCi17Ci0gIGdpbnQgcmVzOwotICBnaW50NjQgb2Zmc2V0OwotICBHc3RGZFNyYyAqc3JjID0gR1NUX0ZEX1NSQyAoYnNyYyk7Ci0KLSAgb2Zmc2V0ID0gc2VnbWVudC0+c3RhcnQ7Ci0KLSAgLyogTm8gbmVlZCB0byBzZWVrIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uICovCi0gIGlmIChvZmZzZXQgPT0gc3JjLT5jdXJvZmZzZXQpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgcmVzID0gbHNlZWsgKHNyYy0+ZmQsIG9mZnNldCwgU0VFS19TRVQpOwotICBpZiAoR19VTkxJS0VMWSAocmVzIDwgMCB8fCByZXMgIT0gb2Zmc2V0KSkKLSAgICBnb3RvIHNlZWtfZmFpbGVkOwotCi0gIHNlZ21lbnQtPnBvc2l0aW9uID0gc2VnbWVudC0+c3RhcnQ7Ci0gIHNlZ21lbnQtPnRpbWUgPSBzZWdtZW50LT5zdGFydDsKLQotICByZXR1cm4gVFJVRTsKLQotc2Vla19mYWlsZWQ6Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImxzZWVrIHJldHVybmVkICUiIEdfR0lOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKioqIEdTVFVSSUhBTkRMRVIgSU5URVJGQUNFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBHc3RVUklUeXBlCi1nc3RfZmRfc3JjX3VyaV9nZXRfdHlwZSAoR1R5cGUgdHlwZSkKLXsKLSAgcmV0dXJuIEdTVF9VUklfU1JDOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmNvbnN0ICoKLWdzdF9mZF9zcmNfdXJpX2dldF9wcm90b2NvbHMgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciAqcHJvdG9jb2xzW10gPSB7ICJmZCIsIE5VTEwgfTsKLQotICByZXR1cm4gcHJvdG9jb2xzOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X2ZkX3NyY191cmlfZ2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpCi17Ci0gIEdzdEZkU3JjICpzcmMgPSBHU1RfRkRfU1JDIChoYW5kbGVyKTsKLQotICAvKiBGSVhNRTogbWFrZSB0aHJlYWQtc2FmZSAqLwotICByZXR1cm4gZ19zdHJkdXAgKHNyYy0+dXJpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmRfc3JjX3VyaV9zZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlciwgY29uc3QgZ2NoYXIgKiB1cmksCi0gICAgR0Vycm9yICoqIGVycikKLXsKLSAgZ2NoYXIgKnByb3RvY29sLCAqcTsKLSAgR3N0RmRTcmMgKnNyYyA9IEdTVF9GRF9TUkMgKGhhbmRsZXIpOwotICBnaW50IGZkOwotICBndWludDY0IHNpemUgPSAoZ3VpbnQ2NCkgLSAxOwotCi0gIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAiY2hlY2tpbmcgdXJpICVzIiwgdXJpKTsKLQotICBwcm90b2NvbCA9IGdzdF91cmlfZ2V0X3Byb3RvY29sICh1cmkpOwotICBpZiAoc3RyY21wIChwcm90b2NvbCwgImZkIikgIT0gMCkgewotICAgIGdfc2V0X2Vycm9yIChlcnIsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1VSSSwKLSAgICAgICAgIldyb25nIHByb3RvY29sIGZvciBmZHNyYyBpbiB1cmk6ICclcyciLCB1cmkpOwotICAgIGdfZnJlZSAocHJvdG9jb2wpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBnX2ZyZWUgKHByb3RvY29sKTsKLQotICBpZiAoc3NjYW5mICh1cmksICJmZDovLyVkIiwgJmZkKSAhPSAxIHx8IGZkIDwgMCkgewotICAgIGdfc2V0X2Vycm9yIChlcnIsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1VSSSwKLSAgICAgICAgIkJhZCBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIGluIHVyaTogJyVzJyIsIHVyaSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKChxID0gZ19zdHJzdHJfbGVuICh1cmksIC0xLCAiPyIpKSkgewotICAgIGdjaGFyICpzcCwgKmVuZCA9IE5VTEw7Ci0KLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgImZvdW5kID8iKTsKLQotICAgIGlmICgoc3AgPSBnX3N0cnN0cl9sZW4gKHEsIC0xLCAic2l6ZT0iKSkpIHsKLSAgICAgIHNwICs9IHN0cmxlbiAoInNpemU9Iik7Ci0gICAgICBzaXplID0gZ19hc2NpaV9zdHJ0b3VsbCAoc3AsICZlbmQsIDEwKTsKLSAgICAgIGlmICgoc2l6ZSA9PSAwICYmIGVycm5vID09IEVJTlZBTCkgfHwgc2l6ZSA9PSBHX01BWFVJTlQ2NCB8fCBlbmQgPT0gc3ApIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJwYXJzaW5nIHNpemUgZmFpbGVkIik7Ci0gICAgICAgIHNpemUgPSAtMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAiZm91bmQgc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFULCBzaXplKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzcmMtPm5ld19mZCA9IGZkOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgaWYgKEdTVF9TVEFURSAoR1NUX0VMRU1FTlQgKHNyYykpIDw9IEdTVF9TVEFURV9SRUFEWSkgewotICAgIGdzdF9mZF9zcmNfdXBkYXRlX2ZkIChzcmMsIHNpemUpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZkX3NyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF90eXBlID0gZ3N0X2ZkX3NyY191cmlfZ2V0X3R5cGU7Ci0gIGlmYWNlLT5nZXRfcHJvdG9jb2xzID0gZ3N0X2ZkX3NyY191cmlfZ2V0X3Byb3RvY29sczsKLSAgaWZhY2UtPmdldF91cmkgPSBnc3RfZmRfc3JjX3VyaV9nZXRfdXJpOwotICBpZmFjZS0+c2V0X3VyaSA9IGdzdF9mZF9zcmNfdXJpX3NldF91cmk7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZkc3JjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZmFlNDguLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgUGhpbGlwcGUgS2hhbGFmIDxidXJnZXJAc3BlZWR5Lm9yZz4KLSAqCi0gKiBnc3RmZHNyYy5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9GRF9TUkNfSF9fCi0jZGVmaW5lIF9fR1NUX0ZEX1NSQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RwdXNoc3JjLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotCi0jZGVmaW5lIEdTVF9UWVBFX0ZEX1NSQyBcCi0gIChnc3RfZmRfc3JjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9GRF9TUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9GRF9TUkMsR3N0RmRTcmMpKQotI2RlZmluZSBHU1RfRkRfU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0ZEX1NSQyxHc3RGZFNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0ZEX1NSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0ZEX1NSQykpCi0jZGVmaW5lIEdTVF9JU19GRF9TUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfRkRfU1JDKSkKLQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RmRTcmMgR3N0RmRTcmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RmRTcmNDbGFzcyBHc3RGZFNyY0NsYXNzOwotCi0vKioKLSAqIEdzdEZkU3JjOgotICoKLSAqIE9wYXF1ZSAjR3N0RmRTcmMgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0RmRTcmMgewotICBHc3RQdXNoU3JjIGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIC8qIG5ld19mZCBpcyBjb3BpZWQgdG8gZmQgb24gUkVBRFktPlBBVVNFRCAqLwotICBnaW50IG5ld19mZDsKLQotICAvKiBmZCBhbmQgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgZmQgaXMgc2Vla2FibGUgKi8KLSAgZ2ludCBmZDsKLSAgZ2Jvb2xlYW4gc2Vla2FibGVfZmQ7Ci0gIGd1aW50NjQgc2l6ZTsKLQotICAvKiBwb2xsIHRpbWVvdXQgKi8KLSAgZ3VpbnQ2NCB0aW1lb3V0OwotCi0gIGdjaGFyICp1cmk7Ci0KLSAgR3N0UG9sbCAqZmRzZXQ7Ci0KLSAgZ3Vsb25nIGN1cm9mZnNldDsgLyogY3VycmVudCBvZmZzZXQgaW4gZmlsZSAqLwotfTsKLQotc3RydWN0IF9Hc3RGZFNyY0NsYXNzIHsKLSAgR3N0UHVzaFNyY0NsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWxzICovCi0gIHZvaWQgKCp0aW1lb3V0KSAoR3N0RWxlbWVudCAqZWxlbWVudCk7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X2ZkX3NyY19nZXRfdHlwZSh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZEX1NSQ19IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmZWYwNy4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NDIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDYgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RmaWxlc2luay5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1maWxlc2luawotICogQHNlZV9hbHNvOiAjR3N0RmlsZVNyYwotICoKLSAqIFdyaXRlIGluY29taW5nIGRhdGEgdG8gYSBmaWxlIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdjRsMnNyYyBudW0tYnVmZmVycz0xICEganBlZ2VuYyAhIGZpbGVzaW5rIGxvY2F0aW9uPWNhcHR1cmUxLmpwZWcKLSAqIF18IENhcHR1cmUgb25lIGZyYW1lIGZyb20gYSB2NGwyIGNhbWVyYSBhbmQgc2F2ZSBhcyBqcGVnIGltYWdlLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIi4uLy4uL2dzdC9nc3QtaTE4bi1saWIuaCIKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgICAgLyogZm9yIGZzZWVrbygpICovCi0jaWZkZWYgSEFWRV9TVERJT19FWFRfSAotI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPiAgICAgICAgICAvKiBmb3IgX19mYnVmc2l6ZSwgZm9yIGRlYnVnZ2luZyAqLwotI2VuZGlmCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJnc3RmaWxlc2luay5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKLSN1bmRlZiBvZmZfdAotI2RlZmluZSBvZmZfdCBndWludDY0Ci0jdW5kZWYgZnRydW5jYXRlCi0jZGVmaW5lIGZ0cnVuY2F0ZSBfY2hzaXplCi0jdW5kZWYgZnN5bmMKLSNkZWZpbmUgZnN5bmMgX2NvbW1pdAotI2lmZGVmIF9NU0NfVkVSICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB3ZSBhcmUgdXNpbmcgTVNWQywgZmlsZW5vIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyICovCi0jZGVmaW5lIGZpbGVubyBfZmlsZW5vICAgICAgICAgIC8qIG9mIF9maWxlbm8gKi8KLSNlbmRpZgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2lmZGVmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi0jaWZkZWYgX19CSU9OSUNfXyAgICAgICAgICAgICAgIC8qIEFuZHJvaWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBsc2VlazY0Ci0jdW5kZWYgb2ZmX3QKLSNkZWZpbmUgb2ZmX3QgZ3VpbnQ2NAotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RlbGVtZW50c19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZ3N0ZmlsZXNpbmsuaCIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi0jZGVmaW5lIEdTVF9UWVBFX0ZJTEVfU0lOS19CVUZGRVJfTU9ERSAoZ3N0X2ZpbGVfc2lua19idWZmZXJfbW9kZV9nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2ZpbGVfc2lua19idWZmZXJfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGJ1ZmZlcl9tb2RlX3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBidWZmZXJfbW9kZVtdID0gewotICAgIHtHU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0RFRkFVTFQsICJEZWZhdWx0IGJ1ZmZlcmluZyIsICJkZWZhdWx0In0sCi0gICAge0dTVF9GSUxFX1NJTktfQlVGRkVSX01PREVfRlVMTCwgIkZ1bGx5IGJ1ZmZlcmVkIiwgImZ1bGwifSwKLSAgICB7R1NUX0ZJTEVfU0lOS19CVUZGRVJfTU9ERV9MSU5FLCAiTGluZSBidWZmZXJlZCIsICJsaW5lIn0sCi0gICAge0dTVF9GSUxFX1NJTktfQlVGRkVSX01PREVfVU5CVUZGRVJFRCwgIlVuYnVmZmVyZWQiLCAidW5idWZmZXJlZCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIWJ1ZmZlcl9tb2RlX3R5cGUpIHsKLSAgICBidWZmZXJfbW9kZV90eXBlID0KLSAgICAgICAgZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEZpbGVTaW5rQnVmZmVyTW9kZSIsIGJ1ZmZlcl9tb2RlKTsKLSAgfQotICByZXR1cm4gYnVmZmVyX21vZGVfdHlwZTsKLX0KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2ZpbGVfc2lua19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZmlsZV9zaW5rX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9MT0NBVElPTiAJTlVMTAotI2RlZmluZSBERUZBVUxUX0JVRkZFUl9NT0RFIAlHU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0RFRkFVTFQKLSNkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRSAJNjQgKiAxMDI0Ci0jZGVmaW5lIERFRkFVTFRfQVBQRU5ECQlGQUxTRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9MT0NBVElPTiwKLSAgUFJPUF9CVUZGRVJfTU9ERSwKLSAgUFJPUF9CVUZGRVJfU0laRSwKLSAgUFJPUF9BUFBFTkQsCi0gIFBST1BfTEFTVAotfTsKLQotLyogQ29weSBvZiBnbGliJ3MgZ19mb3BlbiBkdWUgdG8gd2luMzIgbGliYy9jcm9zcy1ETEwgYnJva2VubmVzczogd2UgY2FuJ3QKLSAqIHVzZSB0aGUgJ2ZpbGUgcG9pbnRlcicgb3BlbmVkIGluIGdsaWIgKGFuZCByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24pCi0gKiBpbiB0aGlzIGxpYnJhcnksIGFzIHRoZXkgbWF5IGhhdmUgdW5yZWxhdGVkIEMgcnVudGltZXMuICovCi1zdGF0aWMgRklMRSAqCi1nc3RfZm9wZW4gKGNvbnN0IGdjaGFyICogZmlsZW5hbWUsIGNvbnN0IGdjaGFyICogbW9kZSkKLXsKLSNpZmRlZiBHX09TX1dJTjMyCi0gIHdjaGFyX3QgKndmaWxlbmFtZSA9IGdfdXRmOF90b191dGYxNiAoZmlsZW5hbWUsIC0xLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgd2NoYXJfdCAqd21vZGU7Ci0gIEZJTEUgKnJldHZhbDsKLSAgaW50IHNhdmVfZXJybm87Ci0KLSAgaWYgKHdmaWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICB3bW9kZSA9IGdfdXRmOF90b191dGYxNiAobW9kZSwgLTEsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gIGlmICh3bW9kZSA9PSBOVUxMKSB7Ci0gICAgZ19mcmVlICh3ZmlsZW5hbWUpOwotICAgIGVycm5vID0gRUlOVkFMOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgcmV0dmFsID0gX3dmb3BlbiAod2ZpbGVuYW1lLCB3bW9kZSk7Ci0gIHNhdmVfZXJybm8gPSBlcnJubzsKLQotICBnX2ZyZWUgKHdmaWxlbmFtZSk7Ci0gIGdfZnJlZSAod21vZGUpOwotCi0gIGVycm5vID0gc2F2ZV9lcnJubzsKLSAgcmV0dXJuIHJldHZhbDsKLSNlbHNlCi0gIHJldHVybiBmb3BlbiAoZmlsZW5hbWUsIG1vZGUpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGdzdF9maWxlX3NpbmtfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9maWxlX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2ZpbGVfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmlsZV9zaW5rX29wZW5fZmlsZSAoR3N0RmlsZVNpbmsgKiBzaW5rKTsKLXN0YXRpYyB2b2lkIGdzdF9maWxlX3NpbmtfY2xvc2VfZmlsZSAoR3N0RmlsZVNpbmsgKiBzaW5rKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3Npbmtfc3RhcnQgKEdzdEJhc2VTaW5rICogc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZpbGVfc2lua19zdG9wIChHc3RCYXNlU2luayAqIHNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogc2luaywgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmlsZV9zaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmlsZV9zaW5rX3JlbmRlcl9saXN0IChHc3RCYXNlU2luayAqIHNpbmssCi0gICAgR3N0QnVmZmVyTGlzdCAqIGxpc3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZpbGVfc2lua19kb19zZWVrIChHc3RGaWxlU2luayAqIGZpbGVzaW5rLAotICAgIGd1aW50NjQgbmV3X29mZnNldCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZpbGVfc2lua19nZXRfY3VycmVudF9vZmZzZXQgKEdzdEZpbGVTaW5rICogZmlsZXNpbmssCi0gICAgZ3VpbnQ2NCAqIHBfcG9zKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NpbmtfcXVlcnkgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgdm9pZCBnc3RfZmlsZV9zaW5rX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsCi0gICAgZ3BvaW50ZXIgaWZhY2VfZGF0YSk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1VSSV9IQU5ETEVSLCBnc3RfZmlsZV9zaW5rX3VyaV9oYW5kbGVyX2luaXQpOyBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfZmlsZV9zaW5rX2RlYnVnLCAiZmlsZXNpbmsiLCAwLCAiZmlsZXNpbmsgZWxlbWVudCIpOwotI2RlZmluZSBnc3RfZmlsZV9zaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RGaWxlU2luaywgZ3N0X2ZpbGVfc2luaywgR1NUX1RZUEVfQkFTRV9TSU5LLAotICAgIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQKLWdzdF9maWxlX3NpbmtfY2xhc3NfaW5pdCAoR3N0RmlsZVNpbmtDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHc3RCYXNlU2lua0NsYXNzICpnc3RiYXNlc2lua19jbGFzcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2ZpbGVfc2lua19kaXNwb3NlOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9maWxlX3Npbmtfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZmlsZV9zaW5rX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xPQ0FUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImxvY2F0aW9uIiwgIkZpbGUgTG9jYXRpb24iLAotICAgICAgICAgICJMb2NhdGlvbiBvZiB0aGUgZmlsZSB0byB3cml0ZSIsIE5VTEwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CVUZGRVJfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiYnVmZmVyLW1vZGUiLCAiQnVmZmVyaW5nIG1vZGUiLAotICAgICAgICAgICJUaGUgYnVmZmVyaW5nIG1vZGUgdG8gdXNlIiwgR1NUX1RZUEVfRklMRV9TSU5LX0JVRkZFUl9NT0RFLAotICAgICAgICAgIERFRkFVTFRfQlVGRkVSX01PREUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQlVGRkVSX1NJWkUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImJ1ZmZlci1zaXplIiwgIkJ1ZmZlcmluZyBzaXplIiwKLSAgICAgICAgICAiU2l6ZSBvZiBidWZmZXIgaW4gbnVtYmVyIG9mIGJ5dGVzIGZvciBsaW5lIG9yIGZ1bGwgYnVmZmVyLW1vZGUiLCAwLAotICAgICAgICAgIEdfTUFYVUlOVCwgREVGQVVMVF9CVUZGRVJfU0laRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0RmlsZVNpbms6YXBwZW5kCi0gICAqCi0gICAqIEFwcGVuZCB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGUuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FQUEVORCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXBwZW5kIiwgIkFwcGVuZCIsCi0gICAgICAgICAgIkFwcGVuZCB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGUiLCBERUZBVUxUX0FQUEVORCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkZpbGUgU2luayIsCi0gICAgICAiU2luay9GaWxlIiwgIldyaXRlIHN0cmVhbSB0byBhIGZpbGUiLAotICAgICAgIlRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4iKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rdGVtcGxhdGUpOwotCi0gIGdzdGJhc2VzaW5rX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmlsZV9zaW5rX3N0YXJ0KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZpbGVfc2lua19zdG9wKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NpbmtfcXVlcnkpOwotICBnc3RiYXNlc2lua19jbGFzcy0+cmVuZGVyID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NpbmtfcmVuZGVyKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnJlbmRlcl9saXN0ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmlsZV9zaW5rX3JlbmRlcl9saXN0KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPmV2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NpbmtfZXZlbnQpOwotCi0gIGlmIChzaXplb2YgKG9mZl90KSA8IDgpIHsKLSAgICBHU1RfTE9HICgiTm8gbGFyZ2UgZmlsZSBzdXBwb3J0LCBzaXplb2YgKG9mZl90KSA9ICUiIEdfR1NJWkVfRk9STUFUICIhIiwKLSAgICAgICAgc2l6ZW9mIChvZmZfdCkpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmlsZV9zaW5rX2luaXQgKEdzdEZpbGVTaW5rICogZmlsZXNpbmspCi17Ci0gIGZpbGVzaW5rLT5maWxlbmFtZSA9IE5VTEw7Ci0gIGZpbGVzaW5rLT5maWxlID0gTlVMTDsKLSAgZmlsZXNpbmstPmN1cnJlbnRfcG9zID0gMDsKLSAgZmlsZXNpbmstPmJ1ZmZlcl9tb2RlID0gREVGQVVMVF9CVUZGRVJfTU9ERTsKLSAgZmlsZXNpbmstPmJ1ZmZlcl9zaXplID0gREVGQVVMVF9CVUZGRVJfU0laRTsKLSAgZmlsZXNpbmstPmJ1ZmZlciA9IE5VTEw7Ci0gIGZpbGVzaW5rLT5hcHBlbmQgPSBGQUxTRTsKLQotICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jIChHU1RfQkFTRV9TSU5LIChmaWxlc2luayksIEZBTFNFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9maWxlX3NpbmtfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0RmlsZVNpbmsgKnNpbmsgPSBHU1RfRklMRV9TSU5LIChvYmplY3QpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotCi0gIGdfZnJlZSAoc2luay0+dXJpKTsKLSAgc2luay0+dXJpID0gTlVMTDsKLSAgZ19mcmVlIChzaW5rLT5maWxlbmFtZSk7Ci0gIHNpbmstPmZpbGVuYW1lID0gTlVMTDsKLSAgZ19mcmVlIChzaW5rLT5idWZmZXIpOwotICBzaW5rLT5idWZmZXIgPSBOVUxMOwotICBzaW5rLT5idWZmZXJfc2l6ZSA9IDA7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24gKEdzdEZpbGVTaW5rICogc2luaywgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbiwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIGlmIChzaW5rLT5maWxlKQotICAgIGdvdG8gd2FzX29wZW47Ci0KLSAgZ19mcmVlIChzaW5rLT5maWxlbmFtZSk7Ci0gIGdfZnJlZSAoc2luay0+dXJpKTsKLSAgaWYgKGxvY2F0aW9uICE9IE5VTEwpIHsKLSAgICAvKiB3ZSBzdG9yZSB0aGUgZmlsZW5hbWUgYXMgd2UgcmVjZWl2ZWQgaXQgZnJvbSB0aGUgYXBwbGljYXRpb24uIE9uIFdpbmRvd3MKLSAgICAgKiB0aGlzIHNob3VsZCBiZSBpbiBVVEY4ICovCi0gICAgc2luay0+ZmlsZW5hbWUgPSBnX3N0cmR1cCAobG9jYXRpb24pOwotICAgIHNpbmstPnVyaSA9IGdzdF9maWxlbmFtZV90b191cmkgKGxvY2F0aW9uLCBOVUxMKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNpbmssICJmaWxlbmFtZSA6ICVzIiwgc2luay0+ZmlsZW5hbWUpOwotICAgIEdTVF9JTkZPX09CSkVDVCAoc2luaywgInVyaSAgICAgIDogJXMiLCBzaW5rLT51cmkpOwotICB9IGVsc2UgewotICAgIHNpbmstPmZpbGVuYW1lID0gTlVMTDsKLSAgICBzaW5rLT51cmkgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi13YXNfb3BlbjoKLSAgewotICAgIGdfd2FybmluZyAoIkNoYW5naW5nIHRoZSBgbG9jYXRpb24nIHByb3BlcnR5IG9uIGZpbGVzaW5rIHdoZW4gYSBmaWxlIGlzICIKLSAgICAgICAgIm9wZW4gaXMgbm90IHN1cHBvcnRlZC4iKTsKLSAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1NUQVRFLAotICAgICAgICAiQ2hhbmdpbmcgdGhlICdsb2NhdGlvbicgcHJvcGVydHkgb24gZmlsZXNpbmsgd2hlbiBhIGZpbGUgaXMgIgotICAgICAgICAib3BlbiBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmlsZV9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RGaWxlU2luayAqc2luayA9IEdTVF9GSUxFX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24gKHNpbmssIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CVUZGRVJfTU9ERToKLSAgICAgIHNpbmstPmJ1ZmZlcl9tb2RlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JVRkZFUl9TSVpFOgotICAgICAgc2luay0+YnVmZmVyX3NpemUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVBQRU5EOgotICAgICAgc2luay0+YXBwZW5kID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZpbGVfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RmlsZVNpbmsgKnNpbmsgPSBHU1RfRklMRV9TSU5LIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNpbmstPmZpbGVuYW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CVUZGRVJfTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzaW5rLT5idWZmZXJfbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQlVGRkVSX1NJWkU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc2luay0+YnVmZmVyX3NpemUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FQUEVORDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzaW5rLT5hcHBlbmQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9maWxlX3Npbmtfb3Blbl9maWxlIChHc3RGaWxlU2luayAqIHNpbmspCi17Ci0gIGdpbnQgbW9kZTsKLQotICAvKiBvcGVuIHRoZSBmaWxlICovCi0gIGlmIChzaW5rLT5maWxlbmFtZSA9PSBOVUxMIHx8IHNpbmstPmZpbGVuYW1lWzBdID09ICdcMCcpCi0gICAgZ290byBub19maWxlbmFtZTsKLQotICBpZiAoc2luay0+YXBwZW5kKQotICAgIHNpbmstPmZpbGUgPSBnc3RfZm9wZW4gKHNpbmstPmZpbGVuYW1lLCAiYWIiKTsKLSAgZWxzZQotICAgIHNpbmstPmZpbGUgPSBnc3RfZm9wZW4gKHNpbmstPmZpbGVuYW1lLCAid2IiKTsKLSAgaWYgKHNpbmstPmZpbGUgPT0gTlVMTCkKLSAgICBnb3RvIG9wZW5fZmFpbGVkOwotCi0gIC8qIHNlZSBpZiB3ZSBhcmUgYXNrZWQgdG8gcGVyZm9ybSBhIHNwZWNpZmljIGtpbmQgb2YgYnVmZmVyaW5nICovCi0gIGlmICgobW9kZSA9IHNpbmstPmJ1ZmZlcl9tb2RlKSAhPSAtMSkgewotICAgIGd1aW50IGJ1ZmZlcl9zaXplOwotCi0gICAgLyogZnJlZSBwcmV2aW91cyBidWZmZXIgaWYgYW55ICovCi0gICAgZ19mcmVlIChzaW5rLT5idWZmZXIpOwotCi0gICAgaWYgKG1vZGUgPT0gX0lPTkJGKSB7Ci0gICAgICAvKiBubyBidWZmZXJpbmcgKi8KLSAgICAgIHNpbmstPmJ1ZmZlciA9IE5VTEw7Ci0gICAgICBidWZmZXJfc2l6ZSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGFsbG9jYXRlIGJ1ZmZlciAqLwotICAgICAgc2luay0+YnVmZmVyID0gZ19tYWxsb2MgKHNpbmstPmJ1ZmZlcl9zaXplKTsKLSAgICAgIGJ1ZmZlcl9zaXplID0gc2luay0+YnVmZmVyX3NpemU7Ci0gICAgfQotICAgIC8qIEN5Z3dpbiBkb2VzIG5vdCBoYXZlIF9fZmJ1ZnNpemUgKi8KLSNpZiBkZWZpbmVkKEhBVkVfU1RESU9fRVhUX0gpICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNoYW5nZSBidWZmZXIgc2l6ZSAldSB0byAldSwgbW9kZSAlZCIsCi0gICAgICAgIChndWludCkgX19mYnVmc2l6ZSAoc2luay0+ZmlsZSksIGJ1ZmZlcl9zaXplLCBtb2RlKTsKLSNlbHNlCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNoYW5nZSAgYnVmZmVyIHNpemUgdG8gJXUsIG1vZGUgJWQiLAotICAgICAgICBzaW5rLT5idWZmZXJfc2l6ZSwgbW9kZSk7Ci0jZW5kaWYKLSAgICBpZiAoc2V0dmJ1ZiAoc2luay0+ZmlsZSwgc2luay0+YnVmZmVyLCBtb2RlLCBidWZmZXJfc2l6ZSkgIT0gMCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzaW5rLCAid2FybmluZzogc2V0dmJ1ZiBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgIH0KLSAgfQotCi0gIHNpbmstPmN1cnJlbnRfcG9zID0gMDsKLSAgLyogdHJ5IHRvIHNlZWsgaW4gdGhlIGZpbGUgdG8gZmlndXJlIG91dCBpZiBpdCBpcyBzZWVrYWJsZSAqLwotICBzaW5rLT5zZWVrYWJsZSA9IGdzdF9maWxlX3NpbmtfZG9fc2VlayAoc2luaywgMCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIm9wZW5lZCBmaWxlICVzLCBzZWVrYWJsZSAlZCIsCi0gICAgICBzaW5rLT5maWxlbmFtZSwgc2luay0+c2Vla2FibGUpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fZmlsZW5hbWU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgICAgKF8oIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIikpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotb3Blbl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIE9QRU5fV1JJVEUsCi0gICAgICAgIChfKCJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iKSwgc2luay0+ZmlsZW5hbWUpLAotICAgICAgICBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9maWxlX3NpbmtfY2xvc2VfZmlsZSAoR3N0RmlsZVNpbmsgKiBzaW5rKQotewotICBpZiAoc2luay0+ZmlsZSkgewotICAgIGlmIChmY2xvc2UgKHNpbmstPmZpbGUpICE9IDApCi0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIENMT1NFLAotICAgICAgICAgIChfKCJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIpLCBzaW5rLT5maWxlbmFtZSksIEdTVF9FUlJPUl9TWVNURU0pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNsb3NlZCBmaWxlIik7Ci0gICAgc2luay0+ZmlsZSA9IE5VTEw7Ci0KLSAgICBnX2ZyZWUgKHNpbmstPmJ1ZmZlcik7Ci0gICAgc2luay0+YnVmZmVyID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9maWxlX3NpbmtfcXVlcnkgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0RmlsZVNpbmsgKnNlbGY7Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgc2VsZiA9IEdTVF9GSUxFX1NJTksgKGJzaW5rKTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX0JZVEVTLCBzZWxmLT5jdXJyZW50X3Bvcyk7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfUVVFUllfRk9STUFUUzoKLSAgICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDIsIEdTVF9GT1JNQVRfREVGQVVMVCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9RVUVSWV9VUkk6Ci0gICAgICBnc3RfcXVlcnlfc2V0X3VyaSAocXVlcnksIHNlbGYtPnVyaSk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOgotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUyB8fCBmb3JtYXQgPT0gR1NUX0ZPUk1BVF9ERUZBVUxUKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfc2Vla2luZyAocXVlcnksIEdTVF9GT1JNQVRfQllURVMsIHNlbGYtPnNlZWthYmxlLCAwLCAtMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfcXVlcnlfc2V0X3NlZWtpbmcgKHF1ZXJ5LCBmb3JtYXQsIEZBTFNFLCAwLCAtMSk7Ci0gICAgICB9Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gR1NUX0JBU0VfU0lOS19DTEFTUyAocGFyZW50X2NsYXNzKS0+cXVlcnkgKGJzaW5rLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0jaWZkZWYgSEFWRV9GU0VFS08KLSMgZGVmaW5lIF9fR1NUX1NURElPX1NFRUtfRlVOQ1RJT04gImZzZWVrbyIKLSNlbGlmIGRlZmluZWQgKEdfT1NfVU5JWCkgfHwgZGVmaW5lZCAoR19PU19XSU4zMikKLSMgZGVmaW5lIF9fR1NUX1NURElPX1NFRUtfRlVOQ1RJT04gImxzZWVrIgotI2Vsc2UKLSMgZGVmaW5lIF9fR1NUX1NURElPX1NFRUtfRlVOQ1RJT04gImZzZWVrIgotI2VuZGlmCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZpbGVfc2lua19kb19zZWVrIChHc3RGaWxlU2luayAqIGZpbGVzaW5rLCBndWludDY0IG5ld19vZmZzZXQpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbGVzaW5rLCAiU2Vla2luZyB0byBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgIiB1c2luZyAiIF9fR1NUX1NURElPX1NFRUtfRlVOQ1RJT04sIG5ld19vZmZzZXQpOwotCi0gIGlmIChmZmx1c2ggKGZpbGVzaW5rLT5maWxlKSkKLSAgICBnb3RvIGZsdXNoX2ZhaWxlZDsKLQotI2lmZGVmIEhBVkVfRlNFRUtPCi0gIGlmIChmc2Vla28gKGZpbGVzaW5rLT5maWxlLCAob2ZmX3QpIG5ld19vZmZzZXQsIFNFRUtfU0VUKSAhPSAwKQotICAgIGdvdG8gc2Vla19mYWlsZWQ7Ci0jZWxpZiBkZWZpbmVkIChHX09TX1VOSVgpIHx8IGRlZmluZWQgKEdfT1NfV0lOMzIpCi0gIGlmIChsc2VlayAoZmlsZW5vIChmaWxlc2luay0+ZmlsZSksIChvZmZfdCkgbmV3X29mZnNldCwKLSAgICAgICAgICBTRUVLX1NFVCkgPT0gKG9mZl90KSAtIDEpCi0gICAgZ290byBzZWVrX2ZhaWxlZDsKLSNlbHNlCi0gIGlmIChmc2VlayAoZmlsZXNpbmstPmZpbGUsIChsb25nKSBuZXdfb2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkKLSAgICBnb3RvIHNlZWtfZmFpbGVkOwotI2VuZGlmCi0KLSAgLyogYWRqdXN0IHBvc2l0aW9uIHJlcG9ydGluZyBhZnRlciBzZWVrOwotICAgKiBwcmVzdW1hYmx5IHRoaXMgc2hvdWxkIGJhc2ljYWxseSB5aWVsZCBuZXdfb2Zmc2V0ICovCi0gIGdzdF9maWxlX3NpbmtfZ2V0X2N1cnJlbnRfb2Zmc2V0IChmaWxlc2luaywgJmZpbGVzaW5rLT5jdXJyZW50X3Bvcyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1mbHVzaF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChmaWxlc2luaywgIkZsdXNoIGZhaWxlZDogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotc2Vla19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChmaWxlc2luaywgIlNlZWtpbmcgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIGhhbmRsZSBldmVudHMgKHNlYXJjaCkgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZpbGVfc2lua19ldmVudCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RFdmVudFR5cGUgdHlwZTsKLSAgR3N0RmlsZVNpbmsgKmZpbGVzaW5rOwotCi0gIGZpbGVzaW5rID0gR1NUX0ZJTEVfU0lOSyAoc2luayk7Ci0KLSAgdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50OwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKLQotICAgICAgaWYgKHNlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgICAgIC8qIG9ubHkgdHJ5IHRvIHNlZWsgYW5kIGZhaWwgd2hlbiB3ZSBhcmUgZ29pbmcgdG8gYSBkaWZmZXJlbnQKLSAgICAgICAgICogcG9zaXRpb24gKi8KLSAgICAgICAgaWYgKGZpbGVzaW5rLT5jdXJyZW50X3BvcyAhPSBzZWdtZW50LT5zdGFydCkgewotICAgICAgICAgIC8qIEZJWE1FLCB0aGUgc2VlayBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIHRoZSBwb3MgZmllbGQsIHN0YXJ0L3N0b3AgYXJlCi0gICAgICAgICAgICoganVzdCBib3VuZGFyaWVzIGZvciB2YWxpZCBieXRlcyBvZmZzZXRzLiBXZSBzaG91bGQgYWxzbyBmaWxsIHRoZSBmaWxlCi0gICAgICAgICAgICogd2l0aCB6ZXJvZXMgaWYgdGhlIG5ldyBwb3NpdGlvbiBleHRlbmRzIHRoZSBjdXJyZW50IEVPRiAoc3BhcnNlIHN0cmVhbXMKLSAgICAgICAgICAgKiBhbmQgc2VnbWVudCBhY2N1bXVsYXRpb24pLiAqLwotICAgICAgICAgIGlmICghZ3N0X2ZpbGVfc2lua19kb19zZWVrIChmaWxlc2luaywgKGd1aW50NjQpIHNlZ21lbnQtPnN0YXJ0KSkKLSAgICAgICAgICAgIGdvdG8gc2Vla19mYWlsZWQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsZXNpbmssICJJZ25vcmVkIFNFR01FTlQsIG5vIHNlZWsgbmVlZGVkIik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbGVzaW5rLAotICAgICAgICAgICAgIklnbm9yZWQgU0VHTUVOVCBldmVudCBvZiBmb3JtYXQgJXUgKCVzKSIsIChndWludCkgc2VnbWVudC0+Zm9ybWF0LAotICAgICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoc2VnbWVudC0+Zm9ybWF0KSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGlmIChmaWxlc2luay0+Y3VycmVudF9wb3MgIT0gMCAmJiBmaWxlc2luay0+c2Vla2FibGUpIHsKLSAgICAgICAgZ3N0X2ZpbGVfc2lua19kb19zZWVrIChmaWxlc2luaywgMCk7Ci0gICAgICAgIGlmIChmdHJ1bmNhdGUgKGZpbGVubyAoZmlsZXNpbmstPmZpbGUpLCAwKSkKLSAgICAgICAgICBnb3RvIGZsdXNoX2ZhaWxlZDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIGlmIChmZmx1c2ggKGZpbGVzaW5rLT5maWxlKSkKLSAgICAgICAgZ290byBmbHVzaF9mYWlsZWQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gR1NUX0JBU0VfU0lOS19DTEFTUyAocGFyZW50X2NsYXNzKS0+ZXZlbnQgKHNpbmssIGV2ZW50KTsKLQotICAvKiBFUlJPUlMgKi8KLXNlZWtfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGZpbGVzaW5rLCBSRVNPVVJDRSwgU0VFSywKLSAgICAgICAgKF8oIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIiksIGZpbGVzaW5rLT5maWxlbmFtZSksCi0gICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZmx1c2hfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGZpbGVzaW5rLCBSRVNPVVJDRSwgV1JJVEUsCi0gICAgICAgIChfKCJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIpLCBmaWxlc2luay0+ZmlsZW5hbWUpLAotICAgICAgICBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmlsZV9zaW5rX2dldF9jdXJyZW50X29mZnNldCAoR3N0RmlsZVNpbmsgKiBmaWxlc2luaywgZ3VpbnQ2NCAqIHBfcG9zKQotewotICBvZmZfdCByZXQgPSAtMTsKLQotI2lmZGVmIEhBVkVfRlRFTExPCi0gIHJldCA9IGZ0ZWxsbyAoZmlsZXNpbmstPmZpbGUpOwotI2VsaWYgZGVmaW5lZCAoR19PU19VTklYKSB8fCBkZWZpbmVkIChHX09TX1dJTjMyKQotICBpZiAoZmZsdXNoIChmaWxlc2luay0+ZmlsZSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChmaWxlc2luaywgIkZsdXNoIGZhaWxlZDogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgIC8qIGlnbm9yZSBhbmQgY29udGludWUgKi8KLSAgfQotICByZXQgPSBsc2VlayAoZmlsZW5vIChmaWxlc2luay0+ZmlsZSksIDAsIFNFRUtfQ1VSKTsKLSNlbHNlCi0gIHJldCA9IChvZmZfdCkgZnRlbGwgKGZpbGVzaW5rLT5maWxlKTsKLSNlbmRpZgotCi0gIGlmIChyZXQgIT0gKG9mZl90KSAtIDEpCi0gICAgKnBfcG9zID0gKGd1aW50NjQpIHJldDsKLQotICByZXR1cm4gKHJldCAhPSAob2ZmX3QpIC0gMSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmlsZV9zaW5rX3JlbmRlcl9idWZmZXJzIChHc3RGaWxlU2luayAqIHNpbmssIEdzdEJ1ZmZlciAqKiBidWZmZXJzLAotICAgIGd1aW50IG51bV9idWZmZXJzLCBndWludDggKiBtZW1fbnVtcywgZ3VpbnQgdG90YWxfbWVtcykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywKLSAgICAgICJ3cml0aW5nICV1IGJ1ZmZlcnMgKCV1IG1lbW9yaWVzKSBhdCBwb3NpdGlvbiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgbnVtX2J1ZmZlcnMsIHRvdGFsX21lbXMsIHNpbmstPmN1cnJlbnRfcG9zKTsKLQotICByZXR1cm4gZ3N0X3dyaXRldl9idWZmZXJzIChHU1RfT0JKRUNUX0NBU1QgKHNpbmspLCBmaWxlbm8gKHNpbmstPmZpbGUpLCBOVUxMLAotICAgICAgYnVmZmVycywgbnVtX2J1ZmZlcnMsIG1lbV9udW1zLCB0b3RhbF9tZW1zLCBOVUxMLCAmc2luay0+Y3VycmVudF9wb3MpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2ZpbGVfc2lua19yZW5kZXJfbGlzdCAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0QnVmZmVyTGlzdCAqIGJ1ZmZlcl9saXN0KQotewotICBHc3RGbG93UmV0dXJuIGZsb3c7Ci0gIEdzdEJ1ZmZlciAqKmJ1ZmZlcnM7Ci0gIEdzdEZpbGVTaW5rICpzaW5rOwotICBndWludDggKm1lbV9udW1zOwotICBndWludCB0b3RhbF9tZW1zOwotICBndWludCBpLCBudW1fYnVmZmVyczsKLSAgZ2Jvb2xlYW4gc3luY19hZnRlciA9IEZBTFNFOwotCi0gIHNpbmsgPSBHU1RfRklMRV9TSU5LX0NBU1QgKGJzaW5rKTsKLQotICBudW1fYnVmZmVycyA9IGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGJ1ZmZlcl9saXN0KTsKLSAgaWYgKG51bV9idWZmZXJzID09IDApCi0gICAgZ290byBub19kYXRhOwotCi0gIC8qIGV4dHJhY3QgYnVmZmVycyBmcm9tIGxpc3QgYW5kIGNvdW50IG1lbW9yaWVzICovCi0gIGJ1ZmZlcnMgPSBnX25ld2EgKEdzdEJ1ZmZlciAqLCBudW1fYnVmZmVycyk7Ci0gIG1lbV9udW1zID0gZ19uZXdhIChndWludDgsIG51bV9idWZmZXJzKTsKLSAgZm9yIChpID0gMCwgdG90YWxfbWVtcyA9IDA7IGkgPCBudW1fYnVmZmVyczsgKytpKSB7Ci0gICAgYnVmZmVyc1tpXSA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKGJ1ZmZlcl9saXN0LCBpKTsKLSAgICBtZW1fbnVtc1tpXSA9IGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZmZlcnNbaV0pOwotICAgIHRvdGFsX21lbXMgKz0gbWVtX251bXNbaV07Ci0gICAgaWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlcnNbaV0sIEdTVF9CVUZGRVJfRkxBR19TWU5DX0FGVEVSKSkKLSAgICAgIHN5bmNfYWZ0ZXIgPSBUUlVFOwotICB9Ci0KLSAgZmxvdyA9Ci0gICAgICBnc3RfZmlsZV9zaW5rX3JlbmRlcl9idWZmZXJzIChzaW5rLCBidWZmZXJzLCBudW1fYnVmZmVycywgbWVtX251bXMsCi0gICAgICB0b3RhbF9tZW1zKTsKLQotICBpZiAoZmxvdyA9PSBHU1RfRkxPV19PSyAmJiBzeW5jX2FmdGVyKSB7Ci0gICAgaWYgKGZmbHVzaCAoc2luay0+ZmlsZSkgfHwgZnN5bmMgKGZpbGVubyAoc2luay0+ZmlsZSkpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIFdSSVRFLAotICAgICAgICAgIChfKCJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIpLCBzaW5rLT5maWxlbmFtZSksCi0gICAgICAgICAgKCIlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgICAgZmxvdyA9IEdTVF9GTE9XX0VSUk9SOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBmbG93OwotCi1ub19kYXRhOgotICB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJlbXB0eSBidWZmZXIgbGlzdCIpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2ZpbGVfc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogc2luaywgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGaWxlU2luayAqZmlsZXNpbms7Ci0gIEdzdEZsb3dSZXR1cm4gZmxvdzsKLSAgZ3VpbnQ4IG5fbWVtOwotCi0gIGZpbGVzaW5rID0gR1NUX0ZJTEVfU0lOS19DQVNUIChzaW5rKTsKLQotICBuX21lbSA9IGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZmZlcik7Ci0KLSAgaWYgKG5fbWVtID4gMCkKLSAgICBmbG93ID0gZ3N0X2ZpbGVfc2lua19yZW5kZXJfYnVmZmVycyAoZmlsZXNpbmssICZidWZmZXIsIDEsICZuX21lbSwgbl9tZW0pOwotICBlbHNlCi0gICAgZmxvdyA9IEdTVF9GTE9XX09LOwotCi0gIGlmIChmbG93ID09IEdTVF9GTE9XX09LICYmCi0gICAgICBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19TWU5DX0FGVEVSKSkgewotICAgIGlmIChmZmx1c2ggKGZpbGVzaW5rLT5maWxlKSB8fCBmc3luYyAoZmlsZW5vIChmaWxlc2luay0+ZmlsZSkpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmlsZXNpbmssIFJFU09VUkNFLCBXUklURSwKLSAgICAgICAgICAoXygiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iKSwgZmlsZXNpbmstPmZpbGVuYW1lKSwKLSAgICAgICAgICAoIiVzIiwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgICBmbG93ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGZsb3c7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZpbGVfc2lua19zdGFydCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgcmV0dXJuIGdzdF9maWxlX3Npbmtfb3Blbl9maWxlIChHU1RfRklMRV9TSU5LIChiYXNlc2luaykpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9maWxlX3Npbmtfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgZ3N0X2ZpbGVfc2lua19jbG9zZV9maWxlIChHU1RfRklMRV9TSU5LIChiYXNlc2luaykpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqKiBHU1RVUklIQU5ETEVSIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgR3N0VVJJVHlwZQotZ3N0X2ZpbGVfc2lua191cmlfZ2V0X3R5cGUgKEdUeXBlIHR5cGUpCi17Ci0gIHJldHVybiBHU1RfVVJJX1NJTks7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqY29uc3QgKgotZ3N0X2ZpbGVfc2lua191cmlfZ2V0X3Byb3RvY29scyAoR1R5cGUgdHlwZSkKLXsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICpwcm90b2NvbHNbXSA9IHsgImZpbGUiLCBOVUxMIH07Ci0KLSAgcmV0dXJuIHByb3RvY29sczsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF9maWxlX3NpbmtfdXJpX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3RGaWxlU2luayAqc2luayA9IEdTVF9GSUxFX1NJTksgKGhhbmRsZXIpOwotCi0gIC8qIEZJWE1FOiBtYWtlIHRocmVhZC1zYWZlICovCi0gIHJldHVybiBnX3N0cmR1cCAoc2luay0+dXJpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmlsZV9zaW5rX3VyaV9zZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlciwgY29uc3QgZ2NoYXIgKiB1cmksCi0gICAgR0Vycm9yICoqIGVycm9yKQotewotICBnY2hhciAqbG9jYXRpb247Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0RmlsZVNpbmsgKnNpbmsgPSBHU1RfRklMRV9TSU5LIChoYW5kbGVyKTsKLQotICAvKiBhbGxvdyBmaWxlOi8vbG9jYWxob3N0L2Zvby9iYXIgYnkgc3RyaXBwaW5nIGxvY2FsaG9zdCBidXQgZmFpbAotICAgKiBmb3IgZXZlcnkgb3RoZXIgaG9zdG5hbWUgKi8KLSAgaWYgKGdfc3RyX2hhc19wcmVmaXggKHVyaSwgImZpbGU6Ly9sb2NhbGhvc3QvIikpIHsKLSAgICBjaGFyICp0bXA7Ci0KLSAgICAvKiAxNiA9PSBzdHJsZW4gKCJmaWxlOi8vbG9jYWxob3N0IikgKi8KLSAgICB0bXAgPSBnX3N0cmNvbmNhdCAoImZpbGU6Ly8iLCB1cmkgKyAxNiwgTlVMTCk7Ci0gICAgLyogd2UgdXNlIGdzdF91cmlfZ2V0X2xvY2F0aW9uKCkgYWx0aG91Z2ggd2UgYWxyZWFkeSBoYXZlIHRoZQotICAgICAqICJsb2NhdGlvbiIgd2l0aCB1cmkgKyAxNiBiZWNhdXNlIGl0IHByb3ZpZGVzIHVuZXNjYXBpbmcgKi8KLSAgICBsb2NhdGlvbiA9IGdzdF91cmlfZ2V0X2xvY2F0aW9uICh0bXApOwotICAgIGdfZnJlZSAodG1wKTsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKHVyaSwgImZpbGU6Ly8iKSA9PSAwKSB7Ci0gICAgLyogU3BlY2lhbCBjYXNlIGZvciAiZmlsZTovLyIgYXMgdGhpcyBpcyB1c2VkIGJ5IHNvbWUgYXBwbGljYXRpb25zCi0gICAgICogIHRvIHRlc3Qgd2l0aCBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpIGlmIHRoZXJlJ3MgYW4gZWxlbWVudAotICAgICAqICB0aGF0IHN1cHBvcnRzIHRoZSBVUkkgcHJvdG9jb2wuICovCi0gICAgZ3N0X2ZpbGVfc2lua19zZXRfbG9jYXRpb24gKHNpbmssIE5VTEwsIE5VTEwpOwotICAgIHJldHVybiBUUlVFOwotICB9IGVsc2UgewotICAgIGxvY2F0aW9uID0gZ3N0X3VyaV9nZXRfbG9jYXRpb24gKHVyaSk7Ci0gIH0KLQotICBpZiAoIWxvY2F0aW9uKSB7Ci0gICAgZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1VSSSwKLSAgICAgICAgIkZpbGUgVVJJIHdpdGhvdXQgbG9jYXRpb24iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoIWdfcGF0aF9pc19hYnNvbHV0ZSAobG9jYXRpb24pKSB7Ci0gICAgZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1VSSSwKLSAgICAgICAgIkZpbGUgVVJJIGxvY2F0aW9uIG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCIpOwotICAgIGdfZnJlZSAobG9jYXRpb24pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldCA9IGdzdF9maWxlX3Npbmtfc2V0X2xvY2F0aW9uIChzaW5rLCBsb2NhdGlvbiwgZXJyb3IpOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZpbGVfc2lua191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF90eXBlID0gZ3N0X2ZpbGVfc2lua191cmlfZ2V0X3R5cGU7Ci0gIGlmYWNlLT5nZXRfcHJvdG9jb2xzID0gZ3N0X2ZpbGVfc2lua191cmlfZ2V0X3Byb3RvY29sczsKLSAgaWZhY2UtPmdldF91cmkgPSBnc3RfZmlsZV9zaW5rX3VyaV9nZXRfdXJpOwotICBpZmFjZS0+c2V0X3VyaSA9IGdzdF9maWxlX3NpbmtfdXJpX3NldF91cmk7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzg5N2MuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdGZpbGVzaW5rLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0ZJTEVfU0lOS19IX18KLSNkZWZpbmUgX19HU1RfRklMRV9TSU5LX0hfXwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfRklMRV9TSU5LIFwKLSAgKGdzdF9maWxlX3NpbmtfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0ZJTEVfU0lOSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0ZJTEVfU0lOSyxHc3RGaWxlU2luaykpCi0jZGVmaW5lIEdTVF9GSUxFX1NJTktfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRklMRV9TSU5LLEdzdEZpbGVTaW5rQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfRklMRV9TSU5LKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRklMRV9TSU5LKSkKLSNkZWZpbmUgR1NUX0lTX0ZJTEVfU0lOS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9GSUxFX1NJTkspKQotI2RlZmluZSBHU1RfRklMRV9TSU5LX0NBU1Qob2JqKSAoKEdzdEZpbGVTaW5rICopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RGaWxlU2luayBHc3RGaWxlU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGaWxlU2lua0NsYXNzIEdzdEZpbGVTaW5rQ2xhc3M7Ci0KLS8qKgotICogR3N0RmlsZVNpbmtCdWZmZXJNb2RlOgotICogQEdTVF9GSUxFX1NJTktfQlVGRkVSX01PREVfREVGQVVMVDogRGVmYXVsdCBidWZmZXJpbmcKLSAqIEBHU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0ZVTEw6IEZ1bGx5IGJ1ZmZlcmVkCi0gKiBAR1NUX0ZJTEVfU0lOS19CVUZGRVJfTU9ERV9MSU5FOiBMaW5lIGJ1ZmZlcmVkCi0gKiBAR1NUX0ZJTEVfU0lOS19CVUZGRVJfTU9ERV9VTkJVRkZFUkVEOiBVbmJ1ZmZlcmVkCi0gKgotICogRmlsZSByZWFkIGJ1ZmZlcmluZyBtb2RlLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0RFRkFVTFQgICAgPSAtMSwKLSAgR1NUX0ZJTEVfU0lOS19CVUZGRVJfTU9ERV9GVUxMICAgICAgID0gX0lPRkJGLAotICBHU1RfRklMRV9TSU5LX0JVRkZFUl9NT0RFX0xJTkUgICAgICAgPSBfSU9MQkYsCi0gIEdTVF9GSUxFX1NJTktfQlVGRkVSX01PREVfVU5CVUZGRVJFRCA9IF9JT05CRgotfSBHc3RGaWxlU2lua0J1ZmZlck1vZGU7Ci0KLS8qKgotICogR3N0RmlsZVNpbms6Ci0gKgotICogT3BhcXVlICNHc3RGaWxlU2luayBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0RmlsZVNpbmsgewotICBHc3RCYXNlU2luayBwYXJlbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdjaGFyICpmaWxlbmFtZTsKLSAgZ2NoYXIgKnVyaTsKLSAgRklMRSAqZmlsZTsKLQotICBnYm9vbGVhbiBzZWVrYWJsZTsKLSAgZ3VpbnQ2NCBjdXJyZW50X3BvczsKLQotICBnaW50ICAgIGJ1ZmZlcl9tb2RlOwotICBndWludCAgIGJ1ZmZlcl9zaXplOwotICBnY2hhciAgKmJ1ZmZlcjsKLQotICBnYm9vbGVhbiBhcHBlbmQ7Ci19OwotCi1zdHJ1Y3QgX0dzdEZpbGVTaW5rQ2xhc3MgewotICBHc3RCYXNlU2lua0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdfR05VQ19JTlRFUk5BTCBHVHlwZSBnc3RfZmlsZV9zaW5rX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZJTEVfU0lOS19IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNyYy5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZGQ1YTkuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDAwLDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RmaWxlc3JjLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LWZpbGVzcmMKLSAqIEBzZWVfYWxzbzogI0dzdEZpbGVTcmMKLSAqCi0gKiBSZWFkIGRhdGEgZnJvbSBhIGZpbGUgaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXNvbmcub2dnICEgZGVjb2RlYmluICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsKLSAqIF18IFBsYXkgc29uZy5vZ2cgYXVkaW8gZmlsZSB3aGljaCBtdXN0IGJlIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3RmaWxlc3JjLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KLS8qIE9uIHdpbjMyLCBzdGF0KiBkZWZhdWx0IHRvIDMyIGJpdDsgd2UgbmVlZCB0aGUgNjQtYml0Ci0gKiB2YXJpYW50cywgc28gZXhwbGljaXRseSBkZWZpbmUgaXQgdGhhdCB3YXkuICovCi0jdW5kZWYgc3RhdAotI2RlZmluZSBzdGF0IF9fc3RhdDY0Ci0jdW5kZWYgZnN0YXQKLSNkZWZpbmUgZnN0YXQgX2ZzdGF0NjQKLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKLSN1bmRlZiBvZmZfdAotI2RlZmluZSBvZmZfdCBndWludDY0Ci0vKiBQcmV2ZW50IHN0YXQuaCBmcm9tIGRlZmluaW5nIHRoZSBzdGF0KiBmdW5jdGlvbnMgYXMKLSAqIF9zdGF0Kiwgc2luY2Ugd2UncmUgZXhwbGljaXRseSBvdmVycmlkaW5nIHRoYXQgKi8KLSN1bmRlZiBfSU5DX1NUQVRfSU5MCi0jZW5kaWYKLSNpbmNsdWRlIDxmY250bC5oPgotCi0jaWZkZWYgSEFWRV9VTklTVERfSAotIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2lmZGVmIF9fQklPTklDX18gICAgICAgICAgICAgICAvKiBBbmRyb2lkICovCi0jdW5kZWYgbHNlZWsKLSNkZWZpbmUgbHNlZWsgbHNlZWs2NAotI3VuZGVmIGZzdGF0Ci0jZGVmaW5lIGZzdGF0IGZzdGF0NjQKLSN1bmRlZiBvZmZfdAotI2RlZmluZSBvZmZfdCBndWludDY0Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICIuLi8uLi9nc3QvZ3N0LWkxOG4tbGliLmgiCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotI2lmbmRlZiBTX0lTUkVHCi0jZGVmaW5lIFNfSVNSRUcobW9kZSkgKChtb2RlKSZfU19JRlJFRykKLSNlbmRpZgotI2lmbmRlZiBTX0lTRElSCi0jZGVmaW5lIFNfSVNESVIobW9kZSkgKChtb2RlKSZfU19JRkRJUikKLSNlbmRpZgotI2lmbmRlZiBTX0lTU09DSwotI2RlZmluZSBTX0lTU09DSyh4KSAoMCkKLSNlbmRpZgotI2lmbmRlZiBPX0JJTkFSWQotI2RlZmluZSBPX0JJTkFSWSAoMCkKLSNlbmRpZgotCi0vKiBDb3B5IG9mIGdsaWIncyBnX29wZW4gZHVlIHRvIHdpbjMyIGxpYmMvY3Jvc3MtRExMIGJyb2tlbm5lc3M6IHdlIGNhbid0Ci0gKiB1c2UgdGhlICdmaWxlIGRlc2NyaXB0b3InIG9wZW5lZCBpbiBnbGliIChhbmQgcmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uKQotICogaW4gdGhpcyBsaWJyYXJ5LCBhcyB0aGV5IG1heSBoYXZlIHVucmVsYXRlZCBDIHJ1bnRpbWVzLiAqLwotc3RhdGljIGludAotZ3N0X29wZW4gKGNvbnN0IGdjaGFyICogZmlsZW5hbWUsIGludCBmbGFncywgaW50IG1vZGUpCi17Ci0jaWZkZWYgR19PU19XSU4zMgotICB3Y2hhcl90ICp3ZmlsZW5hbWUgPSBnX3V0ZjhfdG9fdXRmMTYgKGZpbGVuYW1lLCAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gIGludCByZXR2YWw7Ci0gIGludCBzYXZlX2Vycm5vOwotCi0gIGlmICh3ZmlsZW5hbWUgPT0gTlVMTCkgewotICAgIGVycm5vID0gRUlOVkFMOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIHJldHZhbCA9IF93b3BlbiAod2ZpbGVuYW1lLCBmbGFncywgbW9kZSk7Ci0gIHNhdmVfZXJybm8gPSBlcnJubzsKLQotICBnX2ZyZWUgKHdmaWxlbmFtZSk7Ci0KLSAgZXJybm8gPSBzYXZlX2Vycm5vOwotICByZXR1cm4gcmV0dmFsOwotI2VsaWYgZGVmaW5lZCAoX19CSU9OSUNfXykKLSAgcmV0dXJuIG9wZW4gKGZpbGVuYW1lLCBmbGFncyB8IE9fTEFSR0VGSUxFLCBtb2RlKTsKLSNlbHNlCi0gIHJldHVybiBvcGVuIChmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOwotI2VuZGlmCi19Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9maWxlX3NyY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZmlsZV9zcmNfZGVidWcKLQotLyogRmlsZVNyYyBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9CTE9DS1NJWkUgICAgICAgNCoxMDI0Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0xPQ0FUSU9OCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfZmlsZV9zcmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3RfZmlsZV9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2ZpbGVfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmlsZV9zcmNfaXNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9maWxlX3NyY19nZXRfc2l6ZSAoR3N0QmFzZVNyYyAqIHNyYywgZ3VpbnQ2NCAqIHNpemUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ZpbGVfc3JjX2ZpbGwgKEdzdEJhc2VTcmMgKiBzcmMsIGd1aW50NjQgb2Zmc2V0LAotICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICogYnVmKTsKLQotc3RhdGljIHZvaWQgZ3N0X2ZpbGVfc3JjX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsCi0gICAgZ3BvaW50ZXIgaWZhY2VfZGF0YSk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1VSSV9IQU5ETEVSLCBnc3RfZmlsZV9zcmNfdXJpX2hhbmRsZXJfaW5pdCk7IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9maWxlX3NyY19kZWJ1ZywgImZpbGVzcmMiLCAwLCAiZmlsZXNyYyBlbGVtZW50Iik7Ci0jZGVmaW5lIGdzdF9maWxlX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RmlsZVNyYywgZ3N0X2ZpbGVfc3JjLCBHU1RfVFlQRV9CQVNFX1NSQywgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2ZpbGVfc3JjX2NsYXNzX2luaXQgKEdzdEZpbGVTcmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlc3JjX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0YmFzZXNyY19jbGFzcyA9IEdTVF9CQVNFX1NSQ19DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9maWxlX3NyY19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9maWxlX3NyY19nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT0NBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsb2NhdGlvbiIsICJGaWxlIExvY2F0aW9uIiwKLSAgICAgICAgICAiTG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gcmVhZCIsIE5VTEwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwKLSAgICAgICAgICBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSkpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2ZpbGVfc3JjX2ZpbmFsaXplOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiRmlsZSBTb3VyY2UiLAotICAgICAgIlNvdXJjZS9GaWxlIiwKLSAgICAgICJSZWFkIGZyb20gYXJiaXRyYXJ5IHBvaW50IGluIGEgZmlsZSIsCi0gICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4iKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmN0ZW1wbGF0ZSk7Ci0KLSAgZ3N0YmFzZXNyY19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZpbGVfc3JjX3N0YXJ0KTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmlsZV9zcmNfc3RvcCk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPmlzX3NlZWthYmxlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NyY19pc19zZWVrYWJsZSk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPmdldF9zaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9maWxlX3NyY19nZXRfc2l6ZSk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPmZpbGwgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZpbGVfc3JjX2ZpbGwpOwotCi0gIGlmIChzaXplb2YgKG9mZl90KSA8IDgpIHsKLSAgICBHU1RfTE9HICgiTm8gbGFyZ2UgZmlsZSBzdXBwb3J0LCBzaXplb2YgKG9mZl90KSA9ICUiIEdfR1NJWkVfRk9STUFUICIhIiwKLSAgICAgICAgc2l6ZW9mIChvZmZfdCkpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmlsZV9zcmNfaW5pdCAoR3N0RmlsZVNyYyAqIHNyYykKLXsKLSAgc3JjLT5maWxlbmFtZSA9IE5VTEw7Ci0gIHNyYy0+ZmQgPSAwOwotICBzcmMtPnVyaSA9IE5VTEw7Ci0KLSAgc3JjLT5pc19yZWd1bGFyID0gRkFMU0U7Ci0KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9ibG9ja3NpemUgKEdTVF9CQVNFX1NSQyAoc3JjKSwgREVGQVVMVF9CTE9DS1NJWkUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZpbGVfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RGaWxlU3JjICpzcmM7Ci0KLSAgc3JjID0gR1NUX0ZJTEVfU1JDIChvYmplY3QpOwotCi0gIGdfZnJlZSAoc3JjLT5maWxlbmFtZSk7Ci0gIGdfZnJlZSAoc3JjLT51cmkpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmlsZV9zcmNfc2V0X2xvY2F0aW9uIChHc3RGaWxlU3JjICogc3JjLCBjb25zdCBnY2hhciAqIGxvY2F0aW9uLAotICAgIEdFcnJvciAqKiBlcnIpCi17Ci0gIEdzdFN0YXRlIHN0YXRlOwotCi0gIC8qIHRoZSBlbGVtZW50IG11c3QgYmUgc3RvcHBlZCBpbiBvcmRlciB0byBkbyB0aGlzICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgc3RhdGUgPSBHU1RfU1RBVEUgKHNyYyk7Ci0gIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUkVBRFkgJiYgc3RhdGUgIT0gR1NUX1NUQVRFX05VTEwpCi0gICAgZ290byB3cm9uZ19zdGF0ZTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgZ19mcmVlIChzcmMtPmZpbGVuYW1lKTsKLSAgZ19mcmVlIChzcmMtPnVyaSk7Ci0KLSAgLyogY2xlYXIgdGhlIGZpbGVuYW1lIGlmIHdlIGdldCBhIE5VTEwgKi8KLSAgaWYgKGxvY2F0aW9uID09IE5VTEwpIHsKLSAgICBzcmMtPmZpbGVuYW1lID0gTlVMTDsKLSAgICBzcmMtPnVyaSA9IE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgLyogd2Ugc3RvcmUgdGhlIGZpbGVuYW1lIGFzIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gT24gV2luZG93cyB0aGlzCi0gICAgICogc2hvdWxkIGJlIFVURjggKi8KLSAgICBzcmMtPmZpbGVuYW1lID0gZ19zdHJkdXAgKGxvY2F0aW9uKTsKLSAgICBzcmMtPnVyaSA9IGdzdF9maWxlbmFtZV90b191cmkgKGxvY2F0aW9uLCBOVUxMKTsKLSAgICBHU1RfSU5GTyAoImZpbGVuYW1lIDogJXMiLCBzcmMtPmZpbGVuYW1lKTsKLSAgICBHU1RfSU5GTyAoInVyaSAgICAgIDogJXMiLCBzcmMtPnVyaSk7Ci0gIH0KLSAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIik7Ci0gIC8qIEZJWE1FIDIuMDogbm90aWZ5ICJ1cmkiIHByb3BlcnR5IG9uY2UgdGhlcmUgaXMgb25lICovCi0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1IgKi8KLXdyb25nX3N0YXRlOgotICB7Ci0gICAgZ193YXJuaW5nICgiQ2hhbmdpbmcgdGhlIGBsb2NhdGlvbicgcHJvcGVydHkgb24gZmlsZXNyYyB3aGVuIGEgZmlsZSBpcyAiCi0gICAgICAgICJvcGVuIGlzIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgaWYgKGVycikKLSAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1NUQVRFLAotICAgICAgICAgICJDaGFuZ2luZyB0aGUgYGxvY2F0aW9uJyBwcm9wZXJ0eSBvbiBmaWxlc3JjIHdoZW4gYSBmaWxlIGlzICIKLSAgICAgICAgICAib3BlbiBpcyBub3Qgc3VwcG9ydGVkLiIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZpbGVfc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RGaWxlU3JjICpzcmM7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0ZJTEVfU1JDIChvYmplY3QpKTsKLQotICBzcmMgPSBHU1RfRklMRV9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ3N0X2ZpbGVfc3JjX3NldF9sb2NhdGlvbiAoc3JjLCBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmlsZV9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEZpbGVTcmMgKnNyYzsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfRklMRV9TUkMgKG9iamVjdCkpOwotCi0gIHNyYyA9IEdTVF9GSUxFX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTE9DQVRJT046Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzcmMtPmZpbGVuYW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyoqKgotICogcmVhZCBjb2RlIGJlbG93Ci0gKiB0aGF0IGlzIHRvIHNheSwgeW91IHNob3VsZG4ndCByZWFkIHRoZSBjb2RlIGJlbG93LCBidXQgdGhlIGNvZGUgdGhhdCByZWFkcwotICogc3R1ZmYgaXMgYmVsb3cuICBXZWxsLCB5b3Ugc2hvdWxkbid0IG5vdCByZWFkIHRoZSBjb2RlIGJlbG93LCBmZWVsIGZyZWUKLSAqIHRvIHJlYWQgaXQgb2YgY291cnNlLiAgSXQncyBqdXN0IHRoYXQgInJlYWQgY29kZSBiZWxvdyIgaXMgYSBwcmV0dHkgY3JhcHB5Ci0gKiBkb2N1bWVudGF0aW9uIHN0cmluZyBiZWNhdXNlIGl0IHNvdW5kcyBsaWtlIHdlJ3JlIGV4cGVjdGluZyB5b3UgdG8gcmVhZAotICogdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMsIHdoaWNoLCB3aGlsZSB0cnVlLCBpcyByZWFsbHkgbm90Ci0gKiB0aGUgc29ydCBvZiBhdHRpdHVkZSB3ZSB3YW50IHRvIGJlIGFkdmVydGlzaW5nLiAgTm8gc2lyLgotICoKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9maWxlX3NyY19maWxsIChHc3RCYXNlU3JjICogYmFzZXNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IGxlbmd0aCwKLSAgICBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZpbGVTcmMgKnNyYzsKLSAgZ3VpbnQgdG9fcmVhZCwgYnl0ZXNfcmVhZDsKLSAgaW50IHJldDsKLSAgR3N0TWFwSW5mbyBpbmZvOwotICBndWludDggKmRhdGE7Ci0KLSAgc3JjID0gR1NUX0ZJTEVfU1JDX0NBU1QgKGJhc2VzcmMpOwotCi0gIGlmIChHX1VOTElLRUxZIChvZmZzZXQgIT0gLTEgJiYgc3JjLT5yZWFkX3Bvc2l0aW9uICE9IG9mZnNldCkpIHsKLSAgICBvZmZfdCByZXM7Ci0KLSAgICByZXMgPSBsc2VlayAoc3JjLT5mZCwgb2Zmc2V0LCBTRUVLX1NFVCk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHJlcyA8IDAgfHwgcmVzICE9IG9mZnNldCkpCi0gICAgICBnb3RvIHNlZWtfZmFpbGVkOwotCi0gICAgc3JjLT5yZWFkX3Bvc2l0aW9uID0gb2Zmc2V0OwotICB9Ci0KLSAgaWYgKCFnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9XUklURSkpCi0gICAgZ290byBidWZmZXJfd3JpdGVfZmFpbDsKLSAgZGF0YSA9IGluZm8uZGF0YTsKLQotICBieXRlc19yZWFkID0gMDsKLSAgdG9fcmVhZCA9IGxlbmd0aDsKLSAgd2hpbGUgKHRvX3JlYWQgPiAwKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIlJlYWRpbmcgJWQgYnl0ZXMgYXQgb2Zmc2V0IDB4JSIgR19HSU5UNjRfTU9ESUZJRVIgIngiLAotICAgICAgICB0b19yZWFkLCBvZmZzZXQgKyBieXRlc19yZWFkKTsKLSAgICBlcnJubyA9IDA7Ci0gICAgcmV0ID0gcmVhZCAoc3JjLT5mZCwgZGF0YSArIGJ5dGVzX3JlYWQsIHRvX3JlYWQpOwotICAgIGlmIChHX1VOTElLRUxZIChyZXQgPCAwKSkgewotICAgICAgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKLSAgICAgICAgY29udGludWU7Ci0gICAgICBnb3RvIGNvdWxkX25vdF9yZWFkOwotICAgIH0KLQotICAgIC8qIGZpbGVzIHNob3VsZCBlb3MgaWYgdGhleSByZWFkIDAgYW5kIG1vcmUgd2FzIHJlcXVlc3RlZCAqLwotICAgIGlmIChHX1VOTElLRUxZIChyZXQgPT0gMCkpIHsKLSAgICAgIC8qIC4uIGJ1dCBmaXJzdCB3ZSBzaG91bGQgcmV0dXJuIGFueSByZW1haW5pbmcgZGF0YSAqLwotICAgICAgaWYgKGJ5dGVzX3JlYWQgPiAwKQotICAgICAgICBicmVhazsKLSAgICAgIGdvdG8gZW9zOwotICAgIH0KLQotICAgIHRvX3JlYWQgLT0gcmV0OwotICAgIGJ5dGVzX3JlYWQgKz0gcmV0OwotCi0gICAgc3JjLT5yZWFkX3Bvc2l0aW9uICs9IHJldDsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICBpZiAoYnl0ZXNfcmVhZCAhPSBsZW5ndGgpCi0gICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgYnl0ZXNfcmVhZCk7Ci0KLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikgPSBvZmZzZXQ7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSA9IG9mZnNldCArIGJ5dGVzX3JlYWQ7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SICovCi1zZWVrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotY291bGRfbm90X3JlYWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLSAgICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAwLCAwKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWVvczoKLSAgewotICAgIEdTVF9ERUJVRyAoIkVPUyIpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICAgIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDAsIDApOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLWJ1ZmZlcl93cml0ZV9mYWlsOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFdSSVRFLCAoTlVMTCksICgiQ2FuJ3Qgd3JpdGUgdG8gYnVmZmVyIikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9maWxlX3NyY19pc19zZWVrYWJsZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIEdzdEZpbGVTcmMgKnNyYyA9IEdTVF9GSUxFX1NSQyAoYmFzZXNyYyk7Ci0KLSAgcmV0dXJuIHNyYy0+c2Vla2FibGU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZpbGVfc3JjX2dldF9zaXplIChHc3RCYXNlU3JjICogYmFzZXNyYywgZ3VpbnQ2NCAqIHNpemUpCi17Ci0gIHN0cnVjdCBzdGF0IHN0YXRfcmVzdWx0czsKLSAgR3N0RmlsZVNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9GSUxFX1NSQyAoYmFzZXNyYyk7Ci0KLSAgaWYgKCFzcmMtPnNlZWthYmxlKSB7Ci0gICAgLyogSWYgaXQgaXNuJ3Qgc2Vla2FibGUsIHdlIHdvbid0IGtub3cgdGhlIGxlbmd0aCAoYnV0IGZzdGF0IHdpbGwgc3RpbGwKLSAgICAgKiBzdWNjZWVkLCBhbmQgd3JvbmdseSBzYXkgb3VyIGxlbmd0aCBpcyB6ZXJvLiAqLwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChmc3RhdCAoc3JjLT5mZCwgJnN0YXRfcmVzdWx0cykgPCAwKQotICAgIGdvdG8gY291bGRfbm90X3N0YXQ7Ci0KLSAgKnNpemUgPSBzdGF0X3Jlc3VsdHMuc3Rfc2l6ZTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUiAqLwotY291bGRfbm90X3N0YXQ6Ci0gIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogb3BlbiB0aGUgZmlsZSwgbmVjZXNzYXJ5IHRvIGdvIHRvIFJFQURZIHN0YXRlICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9maWxlX3NyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIEdzdEZpbGVTcmMgKnNyYyA9IEdTVF9GSUxFX1NSQyAoYmFzZXNyYyk7Ci0gIHN0cnVjdCBzdGF0IHN0YXRfcmVzdWx0czsKLQotICBpZiAoc3JjLT5maWxlbmFtZSA9PSBOVUxMIHx8IHNyYy0+ZmlsZW5hbWVbMF0gPT0gJ1wwJykKLSAgICBnb3RvIG5vX2ZpbGVuYW1lOwotCi0gIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAib3BlbmluZyBmaWxlICVzIiwgc3JjLT5maWxlbmFtZSk7Ci0KLSAgLyogb3BlbiB0aGUgZmlsZSAqLwotICBzcmMtPmZkID0gZ3N0X29wZW4gKHNyYy0+ZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19CSU5BUlksIDApOwotCi0gIGlmIChzcmMtPmZkIDwgMCkKLSAgICBnb3RvIG9wZW5fZmFpbGVkOwotCi0gIC8qIGNoZWNrIGlmIGl0IGlzIGEgcmVndWxhciBmaWxlLCBvdGhlcndpc2UgYmFpbCBvdXQgKi8KLSAgaWYgKGZzdGF0IChzcmMtPmZkLCAmc3RhdF9yZXN1bHRzKSA8IDApCi0gICAgZ290byBub19zdGF0OwotCi0gIGlmIChTX0lTRElSIChzdGF0X3Jlc3VsdHMuc3RfbW9kZSkpCi0gICAgZ290byB3YXNfZGlyZWN0b3J5OwotCi0gIGlmIChTX0lTU09DSyAoc3RhdF9yZXN1bHRzLnN0X21vZGUpKQotICAgIGdvdG8gd2FzX3NvY2tldDsKLQotICBzcmMtPnJlYWRfcG9zaXRpb24gPSAwOwotCi0gIC8qIHJlY29yZCBpZiBpdCdzIGEgcmVndWxhciAoaGVuY2Ugc2Vla2FibGUgYW5kIGxlbmd0aGFibGUpIGZpbGUgKi8KLSAgaWYgKFNfSVNSRUcgKHN0YXRfcmVzdWx0cy5zdF9tb2RlKSkKLSAgICBzcmMtPmlzX3JlZ3VsYXIgPSBUUlVFOwotCi0gIC8qIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHVuZGVybHlpbmcgZmlsZSBpcyBzZWVrYWJsZS4gKi8KLSAgewotICAgIG9mZl90IHJlcyA9IGxzZWVrIChzcmMtPmZkLCAwLCBTRUVLX0VORCk7Ci0KLSAgICBpZiAocmVzIDwgMCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgImRpc2FibGluZyBzZWVraW5nLCBsc2VlayBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgc3JjLT5zZWVrYWJsZSA9IEZBTFNFOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXMgPSBsc2VlayAoc3JjLT5mZCwgMCwgU0VFS19TRVQpOwotCi0gICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAvKiBXZSByZWFsbHkgZG9uJ3QgbGlrZSBub3QgYmVpbmcgYWJsZSB0byBnbyBiYWNrIHRvIDAgKi8KLSAgICAgICAgc3JjLT5zZWVrYWJsZSA9IEZBTFNFOwotICAgICAgICBnb3RvIGxzZWVrX3dvbmt5OwotICAgICAgfQotCi0gICAgICBzcmMtPnNlZWthYmxlID0gVFJVRTsKLSAgICB9Ci0gIH0KLQotICAvKiBXZSBjYW4gb25seSByZWFsbHkgZG8gc2Vla2luZyBvbiByZWd1bGFyIGZpbGVzIC0gZm9yIG90aGVyIGZpbGUgdHlwZXMsIHdlCi0gICAqIGRvbid0IGtub3cgdGhlaXIgbGVuZ3RoLCBzbyBzZWVraW5nIGlzbid0IHVzZWZ1bC9tZWFuaW5nZnVsICovCi0gIHNyYy0+c2Vla2FibGUgPSBzcmMtPnNlZWthYmxlICYmIHNyYy0+aXNfcmVndWxhcjsKLQotICBnc3RfYmFzZV9zcmNfc2V0X2R5bmFtaWNfc2l6ZSAoYmFzZXNyYywgc3JjLT5zZWVrYWJsZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1IgKi8KLW5vX2ZpbGVuYW1lOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgICAgKF8oIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIikpLCAoTlVMTCkpOwotICAgIGdvdG8gZXJyb3JfZXhpdDsKLSAgfQotb3Blbl9mYWlsZWQ6Ci0gIHsKLSAgICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgICBjYXNlIEVOT0VOVDoKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwgKE5VTEwpLAotICAgICAgICAgICAgKCJObyBzdWNoIGZpbGUgXCIlc1wiIiwgc3JjLT5maWxlbmFtZSkpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICAgICAoXygiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIiksIHNyYy0+ZmlsZW5hbWUpLAotICAgICAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBnb3RvIGVycm9yX2V4aXQ7Ci0gIH0KLW5vX3N0YXQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAoXygiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iKSwgc3JjLT5maWxlbmFtZSksIChOVUxMKSk7Ci0gICAgZ290byBlcnJvcl9jbG9zZTsKLSAgfQotd2FzX2RpcmVjdG9yeToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgIChfKCJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIiksIHNyYy0+ZmlsZW5hbWUpLCAoTlVMTCkpOwotICAgIGdvdG8gZXJyb3JfY2xvc2U7Ci0gIH0KLXdhc19zb2NrZXQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAoXygiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIiksIHNyYy0+ZmlsZW5hbWUpLCAoTlVMTCkpOwotICAgIGdvdG8gZXJyb3JfY2xvc2U7Ci0gIH0KLWxzZWVrX3dvbmt5OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCBzZWVrIGJhY2sgdG8gemVybyBhZnRlciBzZWVrIHRlc3QgaW4gZmlsZSBcIiVzXCIiLAotICAgICAgICAgICAgc3JjLT5maWxlbmFtZSkpOwotICAgIGdvdG8gZXJyb3JfY2xvc2U7Ci0gIH0KLWVycm9yX2Nsb3NlOgotICBjbG9zZSAoc3JjLT5mZCk7Ci1lcnJvcl9leGl0OgotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIHVubWFwIGFuZCBjbG9zZSB0aGUgZmlsZSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfZmlsZV9zcmNfc3RvcCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIEdzdEZpbGVTcmMgKnNyYyA9IEdTVF9GSUxFX1NSQyAoYmFzZXNyYyk7Ci0KLSAgLyogY2xvc2UgdGhlIGZpbGUgKi8KLSAgY2xvc2UgKHNyYy0+ZmQpOwotCi0gIC8qIHplcm8gb3V0IGEgbG90IG9mIG91ciBzdGF0ZSAqLwotICBzcmMtPmZkID0gMDsKLSAgc3JjLT5pc19yZWd1bGFyID0gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKiogR1NUVVJJSEFORExFUiBJTlRFUkZBQ0UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIEdzdFVSSVR5cGUKLWdzdF9maWxlX3NyY191cmlfZ2V0X3R5cGUgKEdUeXBlIHR5cGUpCi17Ci0gIHJldHVybiBHU1RfVVJJX1NSQzsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICpjb25zdCAqCi1nc3RfZmlsZV9zcmNfdXJpX2dldF9wcm90b2NvbHMgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciAqcHJvdG9jb2xzW10gPSB7ICJmaWxlIiwgTlVMTCB9OwotCi0gIHJldHVybiBwcm90b2NvbHM7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfZmlsZV9zcmNfdXJpX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3RGaWxlU3JjICpzcmMgPSBHU1RfRklMRV9TUkMgKGhhbmRsZXIpOwotCi0gIC8qIEZJWE1FOiBtYWtlIHRocmVhZC1zYWZlICovCi0gIHJldHVybiBnX3N0cmR1cCAoc3JjLT51cmkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9maWxlX3NyY191cmlfc2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsIGNvbnN0IGdjaGFyICogdXJpLAotICAgIEdFcnJvciAqKiBlcnIpCi17Ci0gIGdjaGFyICpsb2NhdGlvbiwgKmhvc3RuYW1lID0gTlVMTDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdEZpbGVTcmMgKnNyYyA9IEdTVF9GSUxFX1NSQyAoaGFuZGxlcik7Ci0KLSAgaWYgKHN0cmNtcCAodXJpLCAiZmlsZTovLyIpID09IDApIHsKLSAgICAvKiBTcGVjaWFsIGNhc2UgZm9yICJmaWxlOi8vIiBhcyB0aGlzIGlzIHVzZWQgYnkgc29tZSBhcHBsaWNhdGlvbnMKLSAgICAgKiAgdG8gdGVzdCB3aXRoIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgaWYgdGhlcmUncyBhbiBlbGVtZW50Ci0gICAgICogIHRoYXQgc3VwcG9ydHMgdGhlIFVSSSBwcm90b2NvbC4gKi8KLSAgICBnc3RfZmlsZV9zcmNfc2V0X2xvY2F0aW9uIChzcmMsIE5VTEwsIE5VTEwpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgbG9jYXRpb24gPSBnX2ZpbGVuYW1lX2Zyb21fdXJpICh1cmksICZob3N0bmFtZSwgZXJyKTsKLQotICBpZiAoIWxvY2F0aW9uIHx8IChlcnIgIT0gTlVMTCAmJiAqZXJyICE9IE5VTEwpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJJbnZhbGlkIFVSSSAnJXMnIGZvciBmaWxlc3JjOiAlcyIsIHVyaSwKLSAgICAgICAgKGVyciAhPSBOVUxMICYmICplcnIgIT0gTlVMTCkgPyAoKmVyciktPm1lc3NhZ2UgOiAidW5rbm93biBlcnJvciIpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICBpZiAoKGhvc3RuYW1lKSAmJiAoc3RyY21wIChob3N0bmFtZSwgImxvY2FsaG9zdCIpKSkgewotICAgIC8qIE9ubHkgJ2xvY2FsaG9zdCcgaXMgcGVybWl0dGVkICovCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJJbnZhbGlkIGhvc3RuYW1lICclcycgZm9yIGZpbGVzcmMiLCBob3N0bmFtZSk7Ci0gICAgZ19zZXRfZXJyb3IgKGVyciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfVVJJLAotICAgICAgICAiRmlsZSBVUkkgd2l0aCBpbnZhbGlkIGhvc3RuYW1lICclcyciLCBob3N0bmFtZSk7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotI2lmZGVmIEdfT1NfV0lOMzIKLSAgLyogVW5mb3J0dW5hdGVseSwgZ19maWxlbmFtZV9mcm9tX3VyaSgpIGRvZXNuJ3QgaGFuZGxlIHNvbWUgVU5DIHBhdGhzCi0gICAqIGNvcnJlY3RseSBvbiB3aW5kb3dzLCBpdCBsZWF2ZXMgdGhlbSB3aXRoIGFuIGV4dHJhIGJhY2tzbGFzaAotICAgKiBhdCB0aGUgc3RhcnQgaWYgdGhleSdyZSBvZiB0aGUgbW96aWxsYS1zdHlsZSBmaWxlOi8vLy8vaG9zdC9wYXRoL2ZpbGUgCi0gICAqIGZvcm0uIENvcnJlY3QgdGhpcy4KLSAgICovCi0gIGlmIChsb2NhdGlvblswXSA9PSAnXFwnICYmIGxvY2F0aW9uWzFdID09ICdcXCcgJiYgbG9jYXRpb25bMl0gPT0gJ1xcJykKLSAgICBtZW1tb3ZlIChsb2NhdGlvbiwgbG9jYXRpb24gKyAxLCBzdHJsZW4gKGxvY2F0aW9uICsgMSkgKyAxKTsKLSNlbmRpZgotCi0gIHJldCA9IGdzdF9maWxlX3NyY19zZXRfbG9jYXRpb24gKHNyYywgbG9jYXRpb24sIGVycik7Ci0KLWJlYWNoOgotICBpZiAobG9jYXRpb24pCi0gICAgZ19mcmVlIChsb2NhdGlvbik7Ci0gIGlmIChob3N0bmFtZSkKLSAgICBnX2ZyZWUgKGhvc3RuYW1lKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZpbGVfc3JjX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpCi17Ci0gIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKmlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKikgZ19pZmFjZTsKLQotICBpZmFjZS0+Z2V0X3R5cGUgPSBnc3RfZmlsZV9zcmNfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF9maWxlX3NyY191cmlfZ2V0X3Byb3RvY29sczsKLSAgaWZhY2UtPmdldF91cmkgPSBnc3RfZmlsZV9zcmNfdXJpX2dldF91cmk7Ci0gIGlmYWNlLT5zZXRfdXJpID0gZ3N0X2ZpbGVfc3JjX3VyaV9zZXRfdXJpOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTczY2ZjMy4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0ZmlsZXNyYy5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfRklMRV9TUkNfSF9fCi0jZGVmaW5lIF9fR1NUX0ZJTEVfU1JDX0hfXwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfRklMRV9TUkMgXAotICAoZ3N0X2ZpbGVfc3JjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9GSUxFX1NSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0ZJTEVfU1JDLEdzdEZpbGVTcmMpKQotI2RlZmluZSBHU1RfRklMRV9TUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRklMRV9TUkMsR3N0RmlsZVNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0ZJTEVfU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRklMRV9TUkMpKQotI2RlZmluZSBHU1RfSVNfRklMRV9TUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfRklMRV9TUkMpKQotI2RlZmluZSBHU1RfRklMRV9TUkNfQ0FTVChvYmopICgoR3N0RmlsZVNyYyopIG9iaikKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEZpbGVTcmMgR3N0RmlsZVNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGaWxlU3JjQ2xhc3MgR3N0RmlsZVNyY0NsYXNzOwotCi0vKioKLSAqIEdzdEZpbGVTcmM6Ci0gKgotICogT3BhcXVlICNHc3RGaWxlU3JjIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RGaWxlU3JjIHsKLSAgR3N0QmFzZVNyYyBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBnY2hhciAqZmlsZW5hbWU7CQkJLyogZmlsZW5hbWUgKi8KLSAgZ2NoYXIgKnVyaTsJCQkJLyogY2FjaGluZyB0aGUgVVJJICovCi0gIGdpbnQgZmQ7CQkJCS8qIG9wZW4gZmlsZSBkZXNjcmlwdG9yICovCi0gIGd1aW50NjQgcmVhZF9wb3NpdGlvbjsJCS8qIHBvc2l0aW9uIG9mIGZkICovCi0KLSAgZ2Jvb2xlYW4gc2Vla2FibGU7ICAgICAgICAgICAgICAgICAgICAvKiB3aGV0aGVyIHRoZSBmaWxlIGlzIHNlZWthYmxlICovCi0gIGdib29sZWFuIGlzX3JlZ3VsYXI7ICAgICAgICAgICAgICAgICAgLyogd2hldGhlciBpdCdzIGEgKHN5bWxpbmsgdG8gYSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyIGZpbGUgKi8KLX07Ci0KLXN0cnVjdCBfR3N0RmlsZVNyY0NsYXNzIHsKLSAgR3N0QmFzZVNyY0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdfR05VQ19JTlRFUk5BTCBHVHlwZSBnc3RfZmlsZV9zcmNfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRklMRV9TUkNfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3ZDc2OC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY4ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgRnVubmVsIGVsZW1lbnQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNyBDb2xsYWJvcmEgTHRkLgotICogIEBhdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IDIwMDcgTm9raWEgQ29ycC4KLSAqCi0gKiBnc3RmdW5uZWwuYzogU2ltcGxlIEZ1bm5lbCBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWZ1bm5lbAotICoKLSAqIFRha2VzIHBhY2tldHMgZnJvbSB2YXJpb3VzIGlucHV0IHNpbmtzIGludG8gb25lIG91dHB1dCBzb3VyY2UuCi0gKgotICogZnVubmVsIGFsd2F5cyBvdXRwdXRzIGEgc2luZ2xlLCBvcGVuIGVuZGVkIHNlZ21lbnQgZnJvbQotICogMCB3aXRoIGluICVHU1RfRk9STUFUX1RJTUUgYW5kIG91dHB1dHMgdGhlIGJ1ZmZlcnMgb2YgdGhlCi0gKiBkaWZmZXJlbnQgc2lua3BhZHMgd2l0aCB0aW1lc3RhbXBzIHRoYXQgYXJlIHNldCB0byB0aGUKLSAqIHJ1bm5pbmcgdGltZSBmb3IgdGhhdCBzdHJlYW0uIGZ1bm5lbCBkb2VzIG5vdCBzeW5jaHJvbml6ZQotICogdGhlIGRpZmZlcmVudCBpbnB1dCBzdHJlYW1zIGJ1dCBzaW1wbHkgZm9yd2FyZHMgYWxsIGJ1ZmZlcnMKLSAqIGltbWVkaWF0ZWx5IHdoZW4gdGhleSBhcnJpdmUuCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGZ1bm5lbC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfZnVubmVsX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9mdW5uZWxfZGVidWcKLQotR1R5cGUgZ3N0X2Z1bm5lbF9wYWRfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9GVU5ORUxfUEFEIFwKLSAgKGdzdF9mdW5uZWxfcGFkX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9GVU5ORUxfUEFEKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9GVU5ORUxfUEFELCBHc3RGdW5uZWxQYWQpKQotI2RlZmluZSBHU1RfRlVOTkVMX1BBRF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0ZVTk5FTF9QQUQsIEdzdEZ1bm5lbFBhZENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0ZVTk5FTF9QQUQob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0ZVTk5FTF9QQUQpKQotI2RlZmluZSBHU1RfSVNfRlVOTkVMX1BBRF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0ZVTk5FTF9QQUQpKQotI2RlZmluZSBHU1RfRlVOTkVMX1BBRF9DQVNUKG9iaikgXAotICAoKEdzdEZ1bm5lbFBhZCAqKShvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RnVubmVsUGFkIEdzdEZ1bm5lbFBhZDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGdW5uZWxQYWRDbGFzcyBHc3RGdW5uZWxQYWRDbGFzczsKLQotc3RydWN0IF9Hc3RGdW5uZWxQYWQKLXsKLSAgR3N0UGFkIHBhcmVudDsKLQotICBnYm9vbGVhbiBnb3RfZW9zOwotfTsKLQotc3RydWN0IF9Hc3RGdW5uZWxQYWRDbGFzcwotewotICBHc3RQYWRDbGFzcyBwYXJlbnQ7Ci19OwotCi1HX0RFRklORV9UWVBFIChHc3RGdW5uZWxQYWQsIGdzdF9mdW5uZWxfcGFkLCBHU1RfVFlQRV9QQUQpOwotCi0jZGVmaW5lIERFRkFVTFRfRk9SV0FSRF9TVElDS1lfRVZFTlRTCVRSVUUKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfRk9SV0FSRF9TVElDS1lfRVZFTlRTCi19OwotCi1zdGF0aWMgdm9pZAotZ3N0X2Z1bm5lbF9wYWRfY2xhc3NfaW5pdCAoR3N0RnVubmVsUGFkQ2xhc3MgKiBrbGFzcykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mdW5uZWxfcGFkX2luaXQgKEdzdEZ1bm5lbFBhZCAqIHBhZCkKLXsKLSAgcGFkLT5nb3RfZW9zID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9mdW5uZWxfZGVidWcsICJmdW5uZWwiLCAwLCAiZnVubmVsIGVsZW1lbnQiKTsKLSNkZWZpbmUgZ3N0X2Z1bm5lbF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RnVubmVsLCBnc3RfZnVubmVsLCBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfZnVubmVsX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgR3N0UGFkICpnc3RfZnVubmVsX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3RfZnVubmVsX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Z1bm5lbF9zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Z1bm5lbF9zaW5rX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZnVubmVsX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2Z1bm5lbF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RnVubmVsICpmdW5uZWwgPSBHU1RfRlVOTkVMIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9GT1JXQVJEX1NUSUNLWV9FVkVOVFM6Ci0gICAgICBmdW5uZWwtPmZvcndhcmRfc3RpY2t5X2V2ZW50cyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mdW5uZWxfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEZ1bm5lbCAqZnVubmVsID0gR1NUX0ZVTk5FTCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfRk9SV0FSRF9TVElDS1lfRVZFTlRTOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZ1bm5lbC0+Zm9yd2FyZF9zdGlja3lfZXZlbnRzKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mdW5uZWxfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0RnVubmVsICpmdW5uZWwgPSBHU1RfRlVOTkVMIChvYmplY3QpOwotICBHTGlzdCAqaXRlbTsKLQotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopICYgZnVubmVsLT5sYXN0X3NpbmtwYWQsIE5VTEwpOwotCi1yZXN0YXJ0OgotICBmb3IgKGl0ZW0gPSBHU1RfRUxFTUVOVF9QQURTIChvYmplY3QpOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQgKGl0ZW0pKSB7Ci0gICAgR3N0UGFkICpwYWQgPSBHU1RfUEFEIChpdGVtLT5kYXRhKTsKLQotICAgIGlmIChHU1RfUEFEX0lTX1NJTksgKHBhZCkpIHsKLSAgICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKEdTVF9FTEVNRU5UIChvYmplY3QpLCBwYWQpOwotICAgICAgZ290byByZXN0YXJ0OwotICAgIH0KLSAgfQotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Z1bm5lbF9jbGFzc19pbml0IChHc3RGdW5uZWxDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9mdW5uZWxfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZnVubmVsX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZnVubmVsX2Rpc3Bvc2UpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRk9SV0FSRF9TVElDS1lfRVZFTlRTLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJmb3J3YXJkLXN0aWNreS1ldmVudHMiLCAiRm9yd2FyZCBzdGlja3kgZXZlbnRzIiwKLSAgICAgICAgICAiRm9yd2FyZCBzdGlja3kgZXZlbnRzIG9uIHN0cmVhbSBjaGFuZ2VzIiwKLSAgICAgICAgICBERUZBVUxUX0ZPUldBUkRfU1RJQ0tZX0VWRU5UUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfAotICAgICAgICAgIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJGdW5uZWwgcGlwZSBmaXR0aW5nIiwgIkdlbmVyaWMiLCAiTi10by0xIHBpcGUgZml0dGluZyIsCi0gICAgICAiT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Z1bm5lbF9yZXF1ZXN0X25ld19wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZnVubmVsX3JlbGVhc2VfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mdW5uZWxfY2hhbmdlX3N0YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mdW5uZWxfaW5pdCAoR3N0RnVubmVsICogZnVubmVsKQotewotICBmdW5uZWwtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjX3RlbXBsYXRlLCAic3JjIik7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKGZ1bm5lbC0+c3JjcGFkKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZnVubmVsKSwgZnVubmVsLT5zcmNwYWQpOwotCi0gIGZ1bm5lbC0+Zm9yd2FyZF9zdGlja3lfZXZlbnRzID0gREVGQVVMVF9GT1JXQVJEX1NUSUNLWV9FVkVOVFM7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X2Z1bm5lbF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLAotICAgIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFBhZCAqc2lua3BhZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAicmVxdWVzdGluZyBwYWQiKTsKLQotICBzaW5rcGFkID0gR1NUX1BBRF9DQVNUIChnX29iamVjdF9uZXcgKEdTVF9UWVBFX0ZVTk5FTF9QQUQsCi0gICAgICAgICAgIm5hbWUiLCBuYW1lLCAiZGlyZWN0aW9uIiwgdGVtcGwtPmRpcmVjdGlvbiwgInRlbXBsYXRlIiwgdGVtcGwsCi0gICAgICAgICAgTlVMTCkpOwotCi0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mdW5uZWxfc2lua19jaGFpbikpOwotICBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uIChzaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mdW5uZWxfc2lua19jaGFpbl9saXN0KSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mdW5uZWxfc2lua19ldmVudCkpOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHNpbmtwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2lua3BhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0FMTE9DQVRJT04pOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7Ci0KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZWxlbWVudCwgc2lua3BhZCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgInJlcXVlc3RlZCBwYWQgJXM6JXMiLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rcGFkKSk7Ci0KLSAgcmV0dXJuIHNpbmtwYWQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Z1bm5lbF9hbGxfc2lua3BhZHNfZW9zX3VubG9ja2VkIChHc3RGdW5uZWwgKiBmdW5uZWwsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IEdTVF9FTEVNRU5UX0NBU1QgKGZ1bm5lbCk7Ci0gIEdMaXN0ICppdGVtOwotICBnYm9vbGVhbiBhbGxfZW9zID0gRkFMU0U7Ci0KLQotICBpZiAoZWxlbWVudC0+bnVtc2lua3BhZHMgPT0gMCkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgZm9yIChpdGVtID0gZWxlbWVudC0+c2lua3BhZHM7IGl0ZW0gIT0gTlVMTDsgaXRlbSA9IGdfbGlzdF9uZXh0IChpdGVtKSkgewotICAgIEdzdEZ1bm5lbFBhZCAqc2lua3BhZCA9IEdTVF9GVU5ORUxfUEFEX0NBU1QgKGl0ZW0tPmRhdGEpOwotCi0gICAgaWYgKCFzaW5rcGFkLT5nb3RfZW9zKSB7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9Ci0KLSAgYWxsX2VvcyA9IFRSVUU7Ci0KLWRvbmU6Ci0gIHJldHVybiBhbGxfZW9zOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Z1bm5lbF9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0RnVubmVsICpmdW5uZWwgPSBHU1RfRlVOTkVMIChlbGVtZW50KTsKLSAgR3N0RnVubmVsUGFkICpmcGFkID0gR1NUX0ZVTk5FTF9QQURfQ0FTVCAocGFkKTsKLSAgZ2Jvb2xlYW4gZ290X2VvczsKLSAgZ2Jvb2xlYW4gc2VuZF9lb3MgPSBGQUxTRTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChmdW5uZWwsICJyZWxlYXNpbmcgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOwotCi0gIGdvdF9lb3MgPSBmcGFkLT5nb3RfZW9zOwotCi0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGZ1bm5lbCksIHBhZCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmdW5uZWwpOwotICBpZiAoIWdvdF9lb3MgJiYgZ3N0X2Z1bm5lbF9hbGxfc2lua3BhZHNfZW9zX3VubG9ja2VkIChmdW5uZWwsIE5VTEwpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZnVubmVsLCAiUGFkIHJlbW92ZWQuIEFsbCBvdGhlcnMgYXJlIEVPUy4gU2VuZGluZyBFT1MiKTsKLSAgICBzZW5kX2VvcyA9IFRSVUU7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZ1bm5lbCk7Ci0KLSAgaWYgKHNlbmRfZW9zKQotICAgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChmdW5uZWwtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKQotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmdW5uZWwsICJGYWlsdXJlIHB1c2hpbmcgRU9TIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yd2FyZF9ldmVudHMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpzcmNwYWQgPSB1c2VyX2RhdGE7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFICgqZXZlbnQpICE9IEdTVF9FVkVOVF9FT1MpCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9yZWYgKCpldmVudCkpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Z1bm5lbF9zaW5rX2NoYWluX29iamVjdCAoR3N0UGFkICogcGFkLCBHc3RGdW5uZWwgKiBmdW5uZWwsCi0gICAgZ2Jvb2xlYW4gaXNfbGlzdCwgR3N0TWluaU9iamVjdCAqIG9iaikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicmVjZWl2ZWQgJSIgR1NUX1BUUl9GT1JNQVQsIG9iaik7Ci0KLSAgR1NUX1BBRF9TVFJFQU1fTE9DSyAoZnVubmVsLT5zcmNwYWQpOwotCi0gIGlmICgoZnVubmVsLT5sYXN0X3NpbmtwYWQgPT0gTlVMTCkgfHwgKGZ1bm5lbC0+Zm9yd2FyZF9zdGlja3lfZXZlbnRzCi0gICAgICAgICAgJiYgKGZ1bm5lbC0+bGFzdF9zaW5rcGFkICE9IHBhZCkpKSB7Ci0gICAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIGZ1bm5lbC0+bGFzdF9zaW5rcGFkLAotICAgICAgICBHU1RfT0JKRUNUIChwYWQpKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIkZvcndhcmRpbmcgc3RpY2t5IGV2ZW50cyIpOwotICAgIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoIChwYWQsIGZvcndhcmRfZXZlbnRzLCBmdW5uZWwtPnNyY3BhZCk7Ci0gIH0KLQotICBpZiAoaXNfbGlzdCkKLSAgICByZXMgPSBnc3RfcGFkX3B1c2hfbGlzdCAoZnVubmVsLT5zcmNwYWQsIEdTVF9CVUZGRVJfTElTVF9DQVNUIChvYmopKTsKLSAgZWxzZQotICAgIHJlcyA9IGdzdF9wYWRfcHVzaCAoZnVubmVsLT5zcmNwYWQsIEdTVF9CVUZGRVJfQ0FTVCAob2JqKSk7Ci0KLSAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChmdW5uZWwtPnNyY3BhZCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImhhbmRsZWQgYnVmZmVyJXMgJXMiLCAoaXNfbGlzdCA/ICJsaXN0IiA6ICIiKSwKLSAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Z1bm5lbF9zaW5rX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICBHc3RGdW5uZWwgKmZ1bm5lbCA9IEdTVF9GVU5ORUwgKHBhcmVudCk7Ci0KLSAgcmV0dXJuIGdzdF9mdW5uZWxfc2lua19jaGFpbl9vYmplY3QgKHBhZCwgZnVubmVsLCBUUlVFLAotICAgICAgR1NUX01JTklfT0JKRUNUX0NBU1QgKGxpc3QpKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mdW5uZWxfc2lua19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0RnVubmVsICpmdW5uZWwgPSBHU1RfRlVOTkVMIChwYXJlbnQpOwotCi0gIHJldHVybiBnc3RfZnVubmVsX3NpbmtfY2hhaW5fb2JqZWN0IChwYWQsIGZ1bm5lbCwgRkFMU0UsCi0gICAgICBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmZmVyKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Z1bm5lbF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0RnVubmVsICpmdW5uZWwgPSBHU1RfRlVOTkVMIChwYXJlbnQpOwotICBHc3RGdW5uZWxQYWQgKmZwYWQgPSBHU1RfRlVOTkVMX1BBRF9DQVNUIChwYWQpOwotICBnYm9vbGVhbiBmb3J3YXJkID0gVFJVRTsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgZ2Jvb2xlYW4gdW5sb2NrID0gRkFMU0U7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAicmVjZWl2ZWQgZXZlbnQgJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50KTsKLQotICBpZiAoR1NUX0VWRU5UX0lTX1NUSUNLWSAoZXZlbnQpKSB7Ci0gICAgdW5sb2NrID0gVFJVRTsKLSAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChmdW5uZWwtPnNyY3BhZCk7Ci0KLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRU9TKSB7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGZ1bm5lbCk7Ci0gICAgICBmcGFkLT5nb3RfZW9zID0gVFJVRTsKLSAgICAgIGlmICghZ3N0X2Z1bm5lbF9hbGxfc2lua3BhZHNfZW9zX3VubG9ja2VkIChmdW5uZWwsIHBhZCkpIHsKLSAgICAgICAgZm9yd2FyZCA9IEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yd2FyZCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZnVubmVsKTsKLSAgICB9IGVsc2UgaWYgKHBhZCAhPSBmdW5uZWwtPmxhc3Rfc2lua3BhZCkgewotICAgICAgZm9yd2FyZCA9IEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9GTFVTSF9TVE9QKSB7Ci0gICAgdW5sb2NrID0gVFJVRTsKLSAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChmdW5uZWwtPnNyY3BhZCk7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChmdW5uZWwpOwotICAgIGZwYWQtPmdvdF9lb3MgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZnVubmVsKTsKLSAgfSBlbHNlIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9HQVApIHsKLSAgICAvKiBJZiBubyBkYXRhIGlzIGNvbWluZyBhbmQgd2UgcmVjZWl2ZSBHQVAgZXZlbnQsIG5lZWQgdG8gZm9yd2FyZCBzdGlja3kgZXZlbnRzLiAqLwotICAgIHVubG9jayA9IFRSVUU7Ci0gICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAoZnVubmVsLT5zcmNwYWQpOwotCi0gICAgaWYgKChmdW5uZWwtPmxhc3Rfc2lua3BhZCA9PSBOVUxMKSB8fCAoZnVubmVsLT5mb3J3YXJkX3N0aWNreV9ldmVudHMKLSAgICAgICAgICAgICYmIChmdW5uZWwtPmxhc3Rfc2lua3BhZCAhPSBwYWQpKSkgewotICAgICAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIGZ1bm5lbC0+bGFzdF9zaW5rcGFkLAotICAgICAgICAgIEdTVF9PQkpFQ1QgKHBhZCkpOwotICAgICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKHBhZCwgZm9yd2FyZF9ldmVudHMsIGZ1bm5lbC0+c3JjcGFkKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoZm9yd2FyZCkKLSAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGZ1bm5lbC0+c3JjcGFkLCBldmVudCk7Ci0gIGVsc2UKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICBpZiAodW5sb2NrKQotICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAoZnVubmVsLT5zcmNwYWQpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZXNldF9wYWQgKGNvbnN0IEdWYWx1ZSAqIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKGRhdGEpOwotICBHc3RGdW5uZWxQYWQgKmZwYWQgPSBHU1RfRlVOTkVMX1BBRF9DQVNUIChwYWQpOwotICBHc3RGdW5uZWwgKmZ1bm5lbCA9IHVzZXJfZGF0YTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGZ1bm5lbCk7Ci0gIGZwYWQtPmdvdF9lb3MgPSBGQUxTRTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZ1bm5lbCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2Z1bm5lbF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIHJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICB7Ci0gICAgICBHc3RJdGVyYXRvciAqaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChlbGVtZW50KTsKLSAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IHJlczsKLQotICAgICAgZG8gewotICAgICAgICByZXMgPSBnc3RfaXRlcmF0b3JfZm9yZWFjaCAoaXRlciwgcmVzZXRfcGFkLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKHJlcyA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOwotICAgICAgfSB3aGlsZSAocmVzID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOwotICAgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOwotCi0gICAgICBpZiAocmVzID09IEdTVF9JVEVSQVRPUl9FUlJPUikKLSAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLQotICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RmdW5uZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1M2I1ZC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGZ1bm5lbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lciBGdW5uZWwgZWxlbWVudAotICoKLSAqIENvcHlyaWdodCAyMDA3IENvbGxhYm9yYSBMdGQuCi0gKiAgQGF1dGhvcjogT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgMjAwNyBOb2tpYSBDb3JwLgotICoKLSAqIGdzdGZ1bm5lbC5oOiBTaW1wbGUgRnVubmVsIGVsZW1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0ZVTk5FTF9IX18KLSNkZWZpbmUgX19HU1RfRlVOTkVMX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfRlVOTkVMIFwKLSAgKGdzdF9mdW5uZWxfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9GVU5ORUwob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9GVU5ORUwsR3N0RnVubmVsKSkKLSNkZWZpbmUgR1NUX0ZVTk5FTF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9GVU5ORUwsR3N0RnVubmVsQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfRlVOTkVMKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRlVOTkVMKSkKLSNkZWZpbmUgR1NUX0lTX0ZVTk5FTF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9GVU5ORUwpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RnVubmVsICAgICAgICAgIEdzdEZ1bm5lbDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGdW5uZWxDbGFzcyAgICAgR3N0RnVubmVsQ2xhc3M7Ci0KLS8qKgotICogR3N0RnVubmVsOgotICoKLSAqIE9wYXF1ZSAjR3N0RnVubmVsIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdEZ1bm5lbCB7Ci0gIEdzdEVsZW1lbnQgICAgICBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RQYWQgICAgICAgICAqc3JjcGFkOwotCi0gIEdzdFBhZCAqbGFzdF9zaW5rcGFkOwotICBnYm9vbGVhbiBmb3J3YXJkX3N0aWNreV9ldmVudHM7Ci19OwotCi1zdHJ1Y3QgX0dzdEZ1bm5lbENsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdfR05VQ19JTlRFUk5BTCBHVHlwZSAgIGdzdF9mdW5uZWxfZ2V0X3R5cGUgICAgICAgICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZVTk5FTF9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA1ZmYxZS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RpZGVudGl0eS5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1pZGVudGl0eQotICoKLSAqIER1bW15IGVsZW1lbnQgdGhhdCBwYXNzZXMgaW5jb21pbmcgZGF0YSB0aHJvdWdoIHVubW9kaWZpZWQuIEl0IGhhcyBzb21lCi0gKiB1c2VmdWwgZGlhZ25vc3RpYyBmdW5jdGlvbnMsIHN1Y2ggYXMgb2Zmc2V0IGFuZCB0aW1lc3RhbXAgY2hlY2tpbmcuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGVsZW1lbnRzX3ByaXZhdGUuaCIKLSNpbmNsdWRlICIuLi8uLi9nc3QvZ3N0LWkxOG4tbGliLmgiCi0jaW5jbHVkZSAiZ3N0aWRlbnRpdHkuaCIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9pZGVudGl0eV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfaWRlbnRpdHlfZGVidWcKLQotLyogSWRlbnRpdHkgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBTSUdOQUxfSEFORE9GRiwKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX1NMRUVQX1RJTUUgICAgICAgICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9EVVBMSUNBVEUgICAgICAgICAgICAgICAxCi0jZGVmaW5lIERFRkFVTFRfRVJST1JfQUZURVIgICAgICAgICAgICAgLTEKLSNkZWZpbmUgREVGQVVMVF9EUk9QX1BST0JBQklMSVRZICAgICAgICAwLjAKLSNkZWZpbmUgREVGQVVMVF9EUk9QX0JVRkZFUl9GTEFHUyAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfREFUQVJBVEUgICAgICAgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX1NJTEVOVCAgICAgICAgICAgICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9TSU5HTEVfU0VHTUVOVCAgICAgICAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX0RVTVAgICAgICAgICAgICAgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfU1lOQyAgICAgICAgICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9DSEVDS19JTVBFUkZFQ1RfVElNRVNUQU1QIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfQ0hFQ0tfSU1QRVJGRUNUX09GRlNFVCAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX1NJR05BTF9IQU5ET0ZGUyAgICAgICAgICAgVFJVRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9TTEVFUF9USU1FLAotICBQUk9QX0VSUk9SX0FGVEVSLAotICBQUk9QX0RST1BfUFJPQkFCSUxJVFksCi0gIFBST1BfRFJPUF9CVUZGRVJfRkxBR1MsCi0gIFBST1BfREFUQVJBVEUsCi0gIFBST1BfU0lMRU5ULAotICBQUk9QX1NJTkdMRV9TRUdNRU5ULAotICBQUk9QX0xBU1RfTUVTU0FHRSwKLSAgUFJPUF9EVU1QLAotICBQUk9QX1NZTkMsCi0gIFBST1BfQ0hFQ0tfSU1QRVJGRUNUX1RJTUVTVEFNUCwKLSAgUFJPUF9DSEVDS19JTVBFUkZFQ1RfT0ZGU0VULAotICBQUk9QX1NJR05BTF9IQU5ET0ZGUwotfTsKLQotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2lkZW50aXR5X2RlYnVnLCAiaWRlbnRpdHkiLCAwLCAiaWRlbnRpdHkgZWxlbWVudCIpOwotI2RlZmluZSBnc3RfaWRlbnRpdHlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdElkZW50aXR5LCBnc3RfaWRlbnRpdHksIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNLAotICAgIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2lkZW50aXR5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9pZGVudGl0eV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfaWRlbnRpdHlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2lkZW50aXR5X3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9pZGVudGl0eV90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9pZGVudGl0eV9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaWRlbnRpdHlfc3RvcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfaWRlbnRpdHlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaWRlbnRpdHlfYWNjZXB0X2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaWRlbnRpdHlfcXVlcnkgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgZ3VpbnQgZ3N0X2lkZW50aXR5X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyBHUGFyYW1TcGVjICpwc3BlY19sYXN0X21lc3NhZ2UgPSBOVUxMOwotCi1zdGF0aWMgdm9pZAotZ3N0X2lkZW50aXR5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RJZGVudGl0eSAqaWRlbnRpdHk7Ci0KLSAgaWRlbnRpdHkgPSBHU1RfSURFTlRJVFkgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChpZGVudGl0eS0+bGFzdF9tZXNzYWdlKTsKLSAgZ19jb25kX2NsZWFyICgmaWRlbnRpdHktPmJsb2NrZWRfY29uZCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lkZW50aXR5X2NsYXNzX2luaXQgKEdzdElkZW50aXR5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqZ3N0YmFzZXRyYW5zX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0YmFzZXRyYW5zX2NsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2lkZW50aXR5X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2lkZW50aXR5X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NMRUVQX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInNsZWVwLXRpbWUiLCAiU2xlZXAgdGltZSIsCi0gICAgICAgICAgIk1pY3Jvc2Vjb25kcyB0byBzbGVlcCBiZXR3ZWVuIHByb2Nlc3NpbmciLCAwLCBHX01BWFVJTlQsCi0gICAgICAgICAgREVGQVVMVF9TTEVFUF9USU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9FUlJPUl9BRlRFUiwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJlcnJvci1hZnRlciIsICJFcnJvciBBZnRlciIsICJFcnJvciBhZnRlciBOIGJ1ZmZlcnMiLAotICAgICAgICAgIEdfTUlOSU5ULCBHX01BWElOVCwgREVGQVVMVF9FUlJPUl9BRlRFUiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9EUk9QX1BST0JBQklMSVRZLAotICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0ICgiZHJvcC1wcm9iYWJpbGl0eSIsICJEcm9wIFByb2JhYmlsaXR5IiwKLSAgICAgICAgICAiVGhlIFByb2JhYmlsaXR5IGEgYnVmZmVyIGlzIGRyb3BwZWQiLCAwLjAsIDEuMCwKLSAgICAgICAgICBERUZBVUxUX0RST1BfUFJPQkFCSUxJVFksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdElkZW50aXR5OmRyb3AtYnVmZmVyLWZsYWdzOgotICAgKgotICAgKiBEcm9wIGJ1ZmZlcnMgd2l0aCB0aGUgZ2l2ZW4gZmxhZ3MuCi0gICAqCi0gICAqIFNpbmNlOiAxLjgKLSAgICoqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RST1BfQlVGRkVSX0ZMQUdTLAotICAgICAgZ19wYXJhbV9zcGVjX2ZsYWdzICgiZHJvcC1idWZmZXItZmxhZ3MiLCAiQ2hlY2sgZmxhZ3MgdG8gZHJvcCBidWZmZXJzIiwKLSAgICAgICAgICAiRHJvcCBidWZmZXJzIHdpdGggdGhlIGdpdmVuIGZsYWdzIiwKLSAgICAgICAgICBHU1RfVFlQRV9CVUZGRVJfRkxBR1MsIERFRkFVTFRfRFJPUF9CVUZGRVJfRkxBR1MsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREFUQVJBVEUsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZGF0YXJhdGUiLCAiRGF0YXJhdGUiLAotICAgICAgICAgICIoUmUpdGltZXN0YW1wcyBidWZmZXJzIHdpdGggbnVtYmVyIG9mIGJ5dGVzIHBlciBzZWNvbmQgKDAgPSBpbmFjdGl2ZSkiLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCBERUZBVUxUX0RBVEFSQVRFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJTEVOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2lsZW50IiwgInNpbGVudCIsICJzaWxlbnQiLCBERUZBVUxUX1NJTEVOVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TSU5HTEVfU0VHTUVOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2luZ2xlLXNlZ21lbnQiLCAiU2luZ2xlIFNlZ21lbnQiLAotICAgICAgICAgICJUaW1lc3RhbXAgYnVmZmVycyBhbmQgZWF0IHNlZ21lbnRzIHNvIGFzIHRvIGFwcGVhciBhcyBvbmUgc2VnbWVudCIsCi0gICAgICAgICAgREVGQVVMVF9TSU5HTEVfU0VHTUVOVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIHBzcGVjX2xhc3RfbWVzc2FnZSA9IGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsYXN0LW1lc3NhZ2UiLCAibGFzdC1tZXNzYWdlIiwKLSAgICAgICJsYXN0LW1lc3NhZ2UiLCBOVUxMLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFTVF9NRVNTQUdFLAotICAgICAgcHNwZWNfbGFzdF9tZXNzYWdlKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9EVU1QLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJkdW1wIiwgIkR1bXAiLCAiRHVtcCBidWZmZXIgY29udGVudHMgdG8gc3Rkb3V0IiwKLSAgICAgICAgICBERUZBVUxUX0RVTVAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NZTkMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMiLCAiU3luY2hyb25pemUiLAotICAgICAgICAgICJTeW5jaHJvbml6ZSB0byBwaXBlbGluZSBjbG9jayIsIERFRkFVTFRfU1lOQywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfQ0hFQ0tfSU1QRVJGRUNUX1RJTUVTVEFNUCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiY2hlY2staW1wZXJmZWN0LXRpbWVzdGFtcCIsCi0gICAgICAgICAgIkNoZWNrIGZvciBkaXNjb250aWd1b3VzIHRpbWVzdGFtcHMiLAotICAgICAgICAgICJTZW5kIGVsZW1lbnQgbWVzc2FnZXMgaWYgdGltZXN0YW1wcyBhbmQgZHVyYXRpb25zIGRvIG5vdCBtYXRjaCB1cCIsCi0gICAgICAgICAgREVGQVVMVF9DSEVDS19JTVBFUkZFQ1RfVElNRVNUQU1QLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NIRUNLX0lNUEVSRkVDVF9PRkZTRVQsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImNoZWNrLWltcGVyZmVjdC1vZmZzZXQiLAotICAgICAgICAgICJDaGVjayBmb3IgZGlzY29udGlndW91cyBvZmZzZXQiLAotICAgICAgICAgICJTZW5kIGVsZW1lbnQgbWVzc2FnZXMgaWYgb2Zmc2V0IGFuZCBvZmZzZXRfZW5kIGRvIG5vdCBtYXRjaCB1cCIsCi0gICAgICAgICAgREVGQVVMVF9DSEVDS19JTVBFUkZFQ1RfT0ZGU0VULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RJZGVudGl0eTpzaWduYWwtaGFuZG9mZnMKLSAgICoKLSAgICogSWYgc2V0IHRvICNUUlVFLCB0aGUgaWRlbnRpdHkgd2lsbCBlbWl0IGEgaGFuZG9mZiBzaWduYWwgd2hlbiBoYW5kbGluZyBhIGJ1ZmZlci4KLSAgICogV2hlbiBzZXQgdG8gI0ZBTFNFLCBubyBzaWduYWwgd2lsbCBiZSBlbWl0dGVkLCB3aGljaCBtaWdodCBpbXByb3ZlIHBlcmZvcm1hbmNlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TSUdOQUxfSEFORE9GRlMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNpZ25hbC1oYW5kb2ZmcyIsCi0gICAgICAgICAgIlNpZ25hbCBoYW5kb2ZmcyIsICJTZW5kIGEgc2lnbmFsIGJlZm9yZSBwdXNoaW5nIHRoZSBidWZmZXIiLAotICAgICAgICAgIERFRkFVTFRfU0lHTkFMX0hBTkRPRkZTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0SWRlbnRpdHk6OmhhbmRvZmY6Ci0gICAqIEBpZGVudGl0eTogdGhlIGlkZW50aXR5IGluc3RhbmNlCi0gICAqIEBidWZmZXI6IHRoZSBidWZmZXIgdGhhdCBqdXN0IGhhcyBiZWVuIHJlY2VpdmVkCi0gICAqIEBwYWQ6IHRoZSBwYWQgdGhhdCByZWNlaXZlZCBpdAotICAgKgotICAgKiBUaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgYmVmb3JlIHBhc3NpbmcgdGhlIGJ1ZmZlciBkb3duc3RyZWFtLgotICAgKi8KLSAgZ3N0X2lkZW50aXR5X3NpZ25hbHNbU0lHTkFMX0hBTkRPRkZdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImhhbmRvZmYiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0SWRlbnRpdHlDbGFzcywgaGFuZG9mZiksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsCi0gICAgICBHU1RfVFlQRV9CVUZGRVIgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfaWRlbnRpdHlfZmluYWxpemU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJJZGVudGl0eSIsCi0gICAgICAiR2VuZXJpYyIsCi0gICAgICAiUGFzcyBkYXRhIHdpdGhvdXQgbW9kaWZpY2F0aW9uIiwgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Iik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmt0ZW1wbGF0ZSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaWRlbnRpdHlfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RiYXNldHJhbnNfY2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2lkZW50aXR5X3NpbmtfZXZlbnQpOwotICBnc3RiYXNldHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9pcCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2lkZW50aXR5X3RyYW5zZm9ybV9pcCk7Ci0gIGdzdGJhc2V0cmFuc19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2lkZW50aXR5X3N0YXJ0KTsKLSAgZ3N0YmFzZXRyYW5zX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pZGVudGl0eV9zdG9wKTsKLSAgZ3N0YmFzZXRyYW5zX2NsYXNzLT5hY2NlcHRfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2lkZW50aXR5X2FjY2VwdF9jYXBzKTsKLSAgZ3N0YmFzZXRyYW5zX2NsYXNzLT5xdWVyeSA9IGdzdF9pZGVudGl0eV9xdWVyeTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pZGVudGl0eV9pbml0IChHc3RJZGVudGl0eSAqIGlkZW50aXR5KQotewotICBpZGVudGl0eS0+c2xlZXBfdGltZSA9IERFRkFVTFRfU0xFRVBfVElNRTsKLSAgaWRlbnRpdHktPmVycm9yX2FmdGVyID0gREVGQVVMVF9FUlJPUl9BRlRFUjsKLSAgaWRlbnRpdHktPmRyb3BfcHJvYmFiaWxpdHkgPSBERUZBVUxUX0RST1BfUFJPQkFCSUxJVFk7Ci0gIGlkZW50aXR5LT5kcm9wX2J1ZmZlcl9mbGFncyA9IERFRkFVTFRfRFJPUF9CVUZGRVJfRkxBR1M7Ci0gIGlkZW50aXR5LT5kYXRhcmF0ZSA9IERFRkFVTFRfREFUQVJBVEU7Ci0gIGlkZW50aXR5LT5zaWxlbnQgPSBERUZBVUxUX1NJTEVOVDsKLSAgaWRlbnRpdHktPnNpbmdsZV9zZWdtZW50ID0gREVGQVVMVF9TSU5HTEVfU0VHTUVOVDsKLSAgaWRlbnRpdHktPnN5bmMgPSBERUZBVUxUX1NZTkM7Ci0gIGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wID0gREVGQVVMVF9DSEVDS19JTVBFUkZFQ1RfVElNRVNUQU1QOwotICBpZGVudGl0eS0+Y2hlY2tfaW1wZXJmZWN0X29mZnNldCA9IERFRkFVTFRfQ0hFQ0tfSU1QRVJGRUNUX09GRlNFVDsKLSAgaWRlbnRpdHktPmR1bXAgPSBERUZBVUxUX0RVTVA7Ci0gIGlkZW50aXR5LT5sYXN0X21lc3NhZ2UgPSBOVUxMOwotICBpZGVudGl0eS0+c2lnbmFsX2hhbmRvZmZzID0gREVGQVVMVF9TSUdOQUxfSEFORE9GRlM7Ci0gIGdfY29uZF9pbml0ICgmaWRlbnRpdHktPmJsb2NrZWRfY29uZCk7Ci0KLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgKEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChpZGVudGl0eSksIFRSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lkZW50aXR5X25vdGlmeV9sYXN0X21lc3NhZ2UgKEdzdElkZW50aXR5ICogaWRlbnRpdHkpCi17Ci0gIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyAoKEdPYmplY3QgKikgaWRlbnRpdHksIHBzcGVjX2xhc3RfbWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfaWRlbnRpdHlfZG9fc3luYyAoR3N0SWRlbnRpdHkgKiBpZGVudGl0eSwgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICBpZiAoaWRlbnRpdHktPnN5bmMgJiYKLSAgICAgIEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChpZGVudGl0eSktPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgIEdzdENsb2NrICpjbG9jazsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoaWRlbnRpdHkpOwotCi0gICAgd2hpbGUgKGlkZW50aXR5LT5ibG9ja2VkKQotICAgICAgZ19jb25kX3dhaXQgKCZpZGVudGl0eS0+YmxvY2tlZF9jb25kLCBHU1RfT0JKRUNUX0dFVF9MT0NLIChpZGVudGl0eSkpOwotCi0KLSAgICBpZiAoKGNsb2NrID0gR1NUX0VMRU1FTlQgKGlkZW50aXR5KS0+Y2xvY2spKSB7Ci0gICAgICBHc3RDbG9ja1JldHVybiBjcmV0OwotICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICAgICAgdGltZXN0YW1wID0gcnVubmluZ190aW1lICsgR1NUX0VMRU1FTlQgKGlkZW50aXR5KS0+YmFzZV90aW1lICsKLSAgICAgICAgICBpZGVudGl0eS0+dXBzdHJlYW1fbGF0ZW5jeTsKLQotICAgICAgLyogc2F2ZSBpZCBpZiB3ZSBuZWVkIHRvIHVubG9jayAqLwotICAgICAgaWRlbnRpdHktPmNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIHRpbWVzdGFtcCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoaWRlbnRpdHkpOwotCi0gICAgICBjcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkZW50aXR5LT5jbG9ja19pZCwgTlVMTCk7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoaWRlbnRpdHkpOwotICAgICAgaWYgKGlkZW50aXR5LT5jbG9ja19pZCkgewotICAgICAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkZW50aXR5LT5jbG9ja19pZCk7Ci0gICAgICAgIGlkZW50aXR5LT5jbG9ja19pZCA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBpZiAoY3JldCA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpCi0gICAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGlkZW50aXR5KTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2lkZW50aXR5X3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0SWRlbnRpdHkgKmlkZW50aXR5OwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIGlkZW50aXR5ID0gR1NUX0lERU5USVRZICh0cmFucyk7Ci0KLSAgaWYgKCFpZGVudGl0eS0+c2lsZW50KSB7Ci0gICAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICAgIGNvbnN0IGdjaGFyICp0c3RyOwotICAgIGdjaGFyICpzc3RyOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChpZGVudGl0eSk7Ci0gICAgZ19mcmVlIChpZGVudGl0eS0+bGFzdF9tZXNzYWdlKTsKLQotICAgIHRzdHIgPSBnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZSAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSk7Ci0gICAgaWYgKChzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KSkpCi0gICAgICBzc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOwotICAgIGVsc2UKLSAgICAgIHNzdHIgPSBnX3N0cmR1cCAoIiIpOwotCi0gICAgaWRlbnRpdHktPmxhc3RfbWVzc2FnZSA9Ci0gICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImV2ZW50ICAgKioqKioqKiAoJXM6JXMpIEUgKHR5cGU6ICVzICglZCksICVzKSAlcCIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAodHJhbnMtPnNpbmtwYWQpLCB0c3RyLCBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpLAotICAgICAgICBzc3RyLCBldmVudCk7Ci0gICAgZ19mcmVlIChzc3RyKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoaWRlbnRpdHkpOwotCi0gICAgZ3N0X2lkZW50aXR5X25vdGlmeV9sYXN0X21lc3NhZ2UgKGlkZW50aXR5KTsKLSAgfQotCi0gIGlmIChpZGVudGl0eS0+c2luZ2xlX3NlZ21lbnQgJiYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NFR01FTlQpKSB7Ci0gICAgaWYgKCF0cmFucy0+aGF2ZV9zZWdtZW50KSB7Ci0gICAgICBHc3RFdmVudCAqbmV3czsKLSAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKLSAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmdHJhbnMtPnNlZ21lbnQpOwotICAgICAgdHJhbnMtPmhhdmVfc2VnbWVudCA9IFRSVUU7Ci0KLSAgICAgIC8qIFRoaXMgaXMgdGhlIGZpcnN0IHNlZ21lbnQsIHNlbmQgb3V0IGEgKDAsIC0xKSBzZWdtZW50ICovCi0gICAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgc2VnbWVudC5mb3JtYXQpOwotICAgICAgbmV3cyA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotCi0gICAgICBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHRyYW5zLT5zaW5rcGFkLCBHU1RfT0JKRUNUX0NBU1QgKHRyYW5zKSwgbmV3cyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5lZWQgdG8gdHJhY2sgc2VnbWVudCBmb3IgcHJvcGVyIHJ1bm5pbmcgdGltZSAqLwotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZ0cmFucy0+c2VnbWVudCk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0dBUCAmJgotICAgICAgdHJhbnMtPmhhdmVfc2VnbWVudCAmJiB0cmFucy0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBkdXI7Ci0KLSAgICBnc3RfZXZlbnRfcGFyc2VfZ2FwIChldmVudCwgJnN0YXJ0LCAmZHVyKTsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXJ0KSkgewotICAgICAgc3RhcnQgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHN0YXJ0KTsKLQotICAgICAgZ3N0X2lkZW50aXR5X2RvX3N5bmMgKGlkZW50aXR5LCBzdGFydCk7Ci0KLSAgICAgIC8qIGFsc28gdHJhbnNmb3JtIEdBUCB0aW1lc3RhbXAgc2ltaWxhciB0byBidWZmZXIgdGltZXN0YW1wcyAqLwotICAgICAgaWYgKGlkZW50aXR5LT5zaW5nbGVfc2VnbWVudCkgewotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2dhcCAoc3RhcnQsIGR1cik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogUmVzZXQgcHJldmlvdXMgdGltZXN0YW1wLCBkdXJhdGlvbiBhbmQgb2Zmc2V0cyBvbiBTRUdNRU5UCi0gICAqIHRvIHByZXZlbnQgZmFsc2Ugd2FybmluZ3Mgd2hlbiBjaGVja2luZyBmb3IgcGVyZmVjdCBzdHJlYW1zICovCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKSB7Ci0gICAgaWRlbnRpdHktPnByZXZfdGltZXN0YW1wID0gaWRlbnRpdHktPnByZXZfZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIGlkZW50aXR5LT5wcmV2X29mZnNldCA9IGlkZW50aXR5LT5wcmV2X29mZnNldF9lbmQgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICB9Ci0KLSAgaWYgKGlkZW50aXR5LT5zaW5nbGVfc2VnbWVudCAmJiBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKSB7Ci0gICAgLyogZWF0IHVwIHNlZ21lbnRzICovCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQpIHsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoaWRlbnRpdHkpOwotICAgICAgaWYgKGlkZW50aXR5LT5jbG9ja19pZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChpZGVudGl0eSwgInVubG9jayBjbG9jayB3YWl0Iik7Ci0gICAgICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChpZGVudGl0eS0+Y2xvY2tfaWQpOwotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGlkZW50aXR5KTsKLSAgICB9Ci0KLSAgICByZXQgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKHRyYW5zLCBldmVudCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lkZW50aXR5X2NoZWNrX2ltcGVyZmVjdF90aW1lc3RhbXAgKEdzdElkZW50aXR5ICogaWRlbnRpdHksIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOwotCi0gIC8qIGludmFsaWQgdGltZXN0YW1wIGRyb3BzIHVzIG91dCBvZiBjaGVjay4gIEZJWE1FOiBtYXliZSB3YXJuID8gKi8KLSAgaWYgKHRpbWVzdGFtcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgLyogY2hlY2sgaWYgd2UgaGFkIGEgcHJldmlvdXMgYnVmZmVyIHRvIGNvbXBhcmUgdG8gKi8KLSAgICBpZiAoaWRlbnRpdHktPnByZXZfdGltZXN0YW1wICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYKLSAgICAgICAgaWRlbnRpdHktPnByZXZfZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgR3N0Q2xvY2tUaW1lIHRfZXhwZWN0ZWQ7Ci0gICAgICBHc3RDbG9ja1RpbWVEaWZmIGR0OwotCi0gICAgICB0X2V4cGVjdGVkID0gaWRlbnRpdHktPnByZXZfdGltZXN0YW1wICsgaWRlbnRpdHktPnByZXZfZHVyYXRpb247Ci0gICAgICBkdCA9IEdTVF9DTE9DS19ESUZGICh0X2V4cGVjdGVkLCB0aW1lc3RhbXApOwotICAgICAgaWYgKGR0ICE9IDApIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogImltcGVyZmVjdC10aW1lc3RhbXAiIGJ1cyBtZXNzYWdlOgotICAgICAgICAgKiBAaWRlbnRpdHk6ICAgICAgICB0aGUgaWRlbnRpdHkgaW5zdGFuY2UKLSAgICAgICAgICogQGRlbHRhOiAgICAgICAgICAgdGhlIEdTVF9DTE9DS19ESUZGIHRvIHRoZSBwcmV2IHRpbWVzdGFtcAotICAgICAgICAgKiBAcHJldi10aW1lc3RhbXA6ICB0aGUgcHJldmlvdXMgYnVmZmVyIHRpbWVzdGFtcAotICAgICAgICAgKiBAcHJldi1kdXJhdGlvbjogICB0aGUgcHJldmlvdXMgYnVmZmVyIGR1cmF0aW9uCi0gICAgICAgICAqIEBwcmV2LW9mZnNldDogICAgIHRoZSBwcmV2aW91cyBidWZmZXIgb2Zmc2V0Ci0gICAgICAgICAqIEBwcmV2LW9mZnNldC1lbmQ6IHRoZSBwcmV2aW91cyBidWZmZXIgb2Zmc2V0IGVuZAotICAgICAgICAgKiBAY3VyLXRpbWVzdGFtcDogICB0aGUgY3VycmVudCBidWZmZXIgdGltZXN0YW1wCi0gICAgICAgICAqIEBjdXItZHVyYXRpb246ICAgIHRoZSBjdXJyZW50IGJ1ZmZlciBkdXJhdGlvbgotICAgICAgICAgKiBAY3VyLW9mZnNldDogICAgICB0aGUgY3VycmVudCBidWZmZXIgb2Zmc2V0Ci0gICAgICAgICAqIEBjdXItb2Zmc2V0LWVuZDogIHRoZSBjdXJyZW50IGJ1ZmZlciBvZmZzZXQgZW5kCi0gICAgICAgICAqCi0gICAgICAgICAqIFRoaXMgYnVzIG1lc3NhZ2UgZ2V0cyBlbWl0dGVkIGlmIHRoZSBjaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wCi0gICAgICAgICAqIHByb3BlcnR5IGlzIHNldCBhbmQgdGhlcmUgaXMgYSBnYXAgaW4gdGltZSBiZXR3ZWVuIHRoZQotICAgICAgICAgKiBsYXN0IGJ1ZmZlciBhbmQgdGhlIG5ld2x5IHJlY2VpdmVkIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKGlkZW50aXR5KSwKLSAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUIChpZGVudGl0eSksCi0gICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJpbXBlcmZlY3QtdGltZXN0YW1wIiwKLSAgICAgICAgICAgICAgICAgICAgImRlbHRhIiwgR19UWVBFX0lOVDY0LCBkdCwKLSAgICAgICAgICAgICAgICAgICAgInByZXYtdGltZXN0YW1wIiwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHktPnByZXZfdGltZXN0YW1wLCAicHJldi1kdXJhdGlvbiIsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgICAgICAgICAgIGlkZW50aXR5LT5wcmV2X2R1cmF0aW9uLCAicHJldi1vZmZzZXQiLCBHX1RZUEVfVUlOVDY0LAotICAgICAgICAgICAgICAgICAgICBpZGVudGl0eS0+cHJldl9vZmZzZXQsICJwcmV2LW9mZnNldC1lbmQiLCBHX1RZUEVfVUlOVDY0LAotICAgICAgICAgICAgICAgICAgICBpZGVudGl0eS0+cHJldl9vZmZzZXRfZW5kLCAiY3VyLXRpbWVzdGFtcCIsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCwgImN1ci1kdXJhdGlvbiIsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZiksICJjdXItb2Zmc2V0IiwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAgICAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZiksICJjdXItb2Zmc2V0LWVuZCIsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSwgTlVMTCkpKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaWRlbnRpdHksICJjYW4ndCBjaGVjayBkYXRhLWNvbnRpZ3VpdHksIG5vICIKLSAgICAgICAgICAib2Zmc2V0X2VuZCB3YXMgc2V0IG9uIHByZXZpb3VzIGJ1ZmZlciIpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lkZW50aXR5X2NoZWNrX2ltcGVyZmVjdF9vZmZzZXQgKEdzdElkZW50aXR5ICogaWRlbnRpdHksIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0KLSAgb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1Zik7Ci0KLSAgaWYgKGlkZW50aXR5LT5wcmV2X29mZnNldF9lbmQgIT0gb2Zmc2V0ICYmCi0gICAgICBpZGVudGl0eS0+cHJldl9vZmZzZXRfZW5kICE9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUgJiYKLSAgICAgIG9mZnNldCAhPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FKSB7Ci0gICAgLyoKLSAgICAgKiAiaW1wZXJmZWN0LW9mZnNldCIgYnVzIG1lc3NhZ2U6Ci0gICAgICogQGlkZW50aXR5OiAgICAgICAgdGhlIGlkZW50aXR5IGluc3RhbmNlCi0gICAgICogQHByZXYtdGltZXN0YW1wOiAgdGhlIHByZXZpb3VzIGJ1ZmZlciB0aW1lc3RhbXAKLSAgICAgKiBAcHJldi1kdXJhdGlvbjogICB0aGUgcHJldmlvdXMgYnVmZmVyIGR1cmF0aW9uCi0gICAgICogQHByZXYtb2Zmc2V0OiAgICAgdGhlIHByZXZpb3VzIGJ1ZmZlciBvZmZzZXQKLSAgICAgKiBAcHJldi1vZmZzZXQtZW5kOiB0aGUgcHJldmlvdXMgYnVmZmVyIG9mZnNldCBlbmQKLSAgICAgKiBAY3VyLXRpbWVzdGFtcDogICB0aGUgY3VycmVudCBidWZmZXIgdGltZXN0YW1wCi0gICAgICogQGN1ci1kdXJhdGlvbjogICAgdGhlIGN1cnJlbnQgYnVmZmVyIGR1cmF0aW9uCi0gICAgICogQGN1ci1vZmZzZXQ6ICAgICAgdGhlIGN1cnJlbnQgYnVmZmVyIG9mZnNldAotICAgICAqIEBjdXItb2Zmc2V0LWVuZDogIHRoZSBjdXJyZW50IGJ1ZmZlciBvZmZzZXQgZW5kCi0gICAgICoKLSAgICAgKiBUaGlzIGJ1cyBtZXNzYWdlIGdldHMgZW1pdHRlZCBpZiB0aGUgY2hlY2staW1wZXJmZWN0LW9mZnNldAotICAgICAqIHByb3BlcnR5IGlzIHNldCBhbmQgdGhlcmUgaXMgYSBnYXAgaW4gb2Zmc2V0cyBiZXR3ZWVuIHRoZQotICAgICAqIGxhc3QgYnVmZmVyIGFuZCB0aGUgbmV3bHkgcmVjZWl2ZWQgYnVmZmVyLgotICAgICAqLwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKGlkZW50aXR5KSwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1QgKGlkZW50aXR5KSwKLSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiaW1wZXJmZWN0LW9mZnNldCIsICJwcmV2LXRpbWVzdGFtcCIsCi0gICAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCwgaWRlbnRpdHktPnByZXZfdGltZXN0YW1wLCAicHJldi1kdXJhdGlvbiIsCi0gICAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCwgaWRlbnRpdHktPnByZXZfZHVyYXRpb24sICJwcmV2LW9mZnNldCIsCi0gICAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCwgaWRlbnRpdHktPnByZXZfb2Zmc2V0LCAicHJldi1vZmZzZXQtZW5kIiwKLSAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVDY0LCBpZGVudGl0eS0+cHJldl9vZmZzZXRfZW5kLCAiY3VyLXRpbWVzdGFtcCIsCi0gICAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZiksICJjdXItZHVyYXRpb24iLAotICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UNjQsIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZiksICJjdXItb2Zmc2V0IiwKLSAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVDY0LCBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSwgImN1ci1vZmZzZXQtZW5kIiwKLSAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVDY0LCBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZiksIE5VTEwpKSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaWRlbnRpdHksICJjYW4ndCBjaGVjayBvZmZzZXQgY29udGlndWl0eSwgbm8gb2Zmc2V0ICIKLSAgICAgICAgImFuZC9vciBvZmZzZXRfZW5kIHdlcmUgc2V0IG9uIHByZXZpb3VzIGJ1ZmZlciIpOwotICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqCi1wcmludF9wcmV0dHlfdGltZSAoZ2NoYXIgKiB0c19zdHIsIGdzaXplIHRzX3N0cl9sZW4sIEdzdENsb2NrVGltZSB0cykKLXsKLSAgaWYgKHRzID09IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgcmV0dXJuICJub25lIjsKLQotICBnX3NucHJpbnRmICh0c19zdHIsIHRzX3N0cl9sZW4sICIlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRzKSk7Ci0gIHJldHVybiB0c19zdHI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWRlbnRpdHlfdXBkYXRlX2xhc3RfbWVzc2FnZV9mb3JfYnVmZmVyIChHc3RJZGVudGl0eSAqIGlkZW50aXR5LAotICAgIGNvbnN0IGdjaGFyICogYWN0aW9uLCBHc3RCdWZmZXIgKiBidWYsIGdzaXplIHNpemUpCi17Ci0gIGdjaGFyIGR0c19zdHJbNjRdLCBwdHNfc3RyWzY0XSwgZHVyX3N0cls2NF07Ci0gIGdjaGFyICpmbGFnX3N0cjsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGlkZW50aXR5KTsKLQotICBmbGFnX3N0ciA9IGdzdF9idWZmZXJfZ2V0X2ZsYWdzX3N0cmluZyAoYnVmKTsKLQotICBnX2ZyZWUgKGlkZW50aXR5LT5sYXN0X21lc3NhZ2UpOwotICBpZGVudGl0eS0+bGFzdF9tZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRmICgiJXMgICAqKioqKioqICglczolcykgIgotICAgICAgIiglIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzLCBkdHM6ICVzLCBwdHM6ICVzLCBkdXJhdGlvbjogJXMsIG9mZnNldDogJSIKLSAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiLCAiICJvZmZzZXRfZW5kOiAlICIgR19HSU5UNjRfRk9STUFUCi0gICAgICAiLCBmbGFnczogJTA4eCAlcykgJXAiLCBhY3Rpb24sCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChpZGVudGl0eSktPnNpbmtwYWQpLCBzaXplLAotICAgICAgcHJpbnRfcHJldHR5X3RpbWUgKGR0c19zdHIsIHNpemVvZiAoZHRzX3N0ciksIEdTVF9CVUZGRVJfRFRTIChidWYpKSwKLSAgICAgIHByaW50X3ByZXR0eV90aW1lIChwdHNfc3RyLCBzaXplb2YgKHB0c19zdHIpLCBHU1RfQlVGRkVSX1BUUyAoYnVmKSksCi0gICAgICBwcmludF9wcmV0dHlfdGltZSAoZHVyX3N0ciwgc2l6ZW9mIChkdXJfc3RyKSwgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSksCi0gICAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSwgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpLAotICAgICAgR1NUX0JVRkZFUl9GTEFHUyAoYnVmKSwgZmxhZ19zdHIsIGJ1Zik7Ci0gIGdfZnJlZSAoZmxhZ19zdHIpOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChpZGVudGl0eSk7Ci0KLSAgZ3N0X2lkZW50aXR5X25vdGlmeV9sYXN0X21lc3NhZ2UgKGlkZW50aXR5KTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9pZGVudGl0eV90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RJZGVudGl0eSAqaWRlbnRpdHkgPSBHU1RfSURFTlRJVFkgKHRyYW5zKTsKLSAgR3N0Q2xvY2tUaW1lIHJ1bmR0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdzdENsb2NrVGltZSBydW5wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHc3RDbG9ja1RpbWUgdHMsIGR1cmF0aW9uLCBydW50aW1lc3RhbXA7Ci0gIGdzaXplIHNpemU7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0KLSAgaWYgKGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wKQotICAgIGdzdF9pZGVudGl0eV9jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wIChpZGVudGl0eSwgYnVmKTsKLSAgaWYgKGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3Rfb2Zmc2V0KQotICAgIGdzdF9pZGVudGl0eV9jaGVja19pbXBlcmZlY3Rfb2Zmc2V0IChpZGVudGl0eSwgYnVmKTsKLQotICAvKiB1cGRhdGUgcHJldiB2YWx1ZXMgKi8KLSAgaWRlbnRpdHktPnByZXZfdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIGlkZW50aXR5LT5wcmV2X2R1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKLSAgaWRlbnRpdHktPnByZXZfb2Zmc2V0X2VuZCA9IEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKTsKLSAgaWRlbnRpdHktPnByZXZfb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1Zik7Ci0KLSAgaWYgKGlkZW50aXR5LT5lcnJvcl9hZnRlciA+PSAwKSB7Ci0gICAgaWRlbnRpdHktPmVycm9yX2FmdGVyLS07Ci0gICAgaWYgKGlkZW50aXR5LT5lcnJvcl9hZnRlciA9PSAwKQotICAgICAgZ290byBlcnJvcl9hZnRlcjsKLSAgfQotCi0gIGlmIChpZGVudGl0eS0+ZHJvcF9wcm9iYWJpbGl0eSA+IDAuMCkgewotICAgIGlmICgoZ2Zsb2F0KSAoMS4wICogcmFuZCAoKSAvIChSQU5EX01BWCkpIDwgaWRlbnRpdHktPmRyb3BfcHJvYmFiaWxpdHkpCi0gICAgICBnb3RvIGRyb3BwZWQ7Ci0gIH0KLQotICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmLCBpZGVudGl0eS0+ZHJvcF9idWZmZXJfZmxhZ3MpKQotICAgIGdvdG8gZHJvcHBlZDsKLQotICBpZiAoaWRlbnRpdHktPmR1bXApIHsKLSAgICBHc3RNYXBJbmZvIGluZm87Ci0KLSAgICBpZiAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfUkVBRCkpIHsKLSAgICAgIGdzdF91dGlsX2R1bXBfbWVtIChpbmZvLmRhdGEsIGluZm8uc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoIWlkZW50aXR5LT5zaWxlbnQpIHsKLSAgICBnc3RfaWRlbnRpdHlfdXBkYXRlX2xhc3RfbWVzc2FnZV9mb3JfYnVmZmVyIChpZGVudGl0eSwgImNoYWluIiwgYnVmLCBzaXplKTsKLSAgfQotCi0gIGlmIChpZGVudGl0eS0+ZGF0YXJhdGUgPiAwKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIHRpbWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChpZGVudGl0eS0+b2Zmc2V0LAotICAgICAgICBHU1RfU0VDT05ELCBpZGVudGl0eS0+ZGF0YXJhdGUpOwotCi0gICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IHRpbWU7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IHNpemUgKiBHU1RfU0VDT05EIC8gaWRlbnRpdHktPmRhdGFyYXRlOwotICB9Ci0KLSAgaWYgKGlkZW50aXR5LT5zaWduYWxfaGFuZG9mZnMpCi0gICAgZ19zaWduYWxfZW1pdCAoaWRlbnRpdHksIGdzdF9pZGVudGl0eV9zaWduYWxzW1NJR05BTF9IQU5ET0ZGXSwgMCwgYnVmKTsKLQotICBpZiAodHJhbnMtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgIHJ1bmR0cyA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnRyYW5zLT5zZWdtZW50LAotICAgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9CVUZGRVJfRFRTIChidWYpKTsKLSAgICBydW5wdHMgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwKLSAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfQlVGRkVSX1BUUyAoYnVmKSk7Ci0gIH0KLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHJ1bmR0cykpCi0gICAgcnVudGltZXN0YW1wID0gcnVuZHRzOwotICBlbHNlIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocnVucHRzKSkKLSAgICBydW50aW1lc3RhbXAgPSBydW5wdHM7Ci0gIGVsc2UKLSAgICBydW50aW1lc3RhbXAgPSAwOwotICByZXQgPSBnc3RfaWRlbnRpdHlfZG9fc3luYyAoaWRlbnRpdHksIHJ1bnRpbWVzdGFtcCk7Ci0KLSAgaWRlbnRpdHktPm9mZnNldCArPSBzaXplOwotCi0gIGlmIChpZGVudGl0eS0+c2xlZXBfdGltZSAmJiByZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgZ191c2xlZXAgKGlkZW50aXR5LT5zbGVlcF90aW1lKTsKLQotICBpZiAoaWRlbnRpdHktPnNpbmdsZV9zZWdtZW50ICYmICh0cmFucy0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQotICAgICAgJiYgKHJldCA9PSBHU1RfRkxPV19PSykpIHsKLSAgICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IHJ1bmR0czsKLSAgICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9IHJ1bnB0czsKLSAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1lcnJvcl9hZnRlcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChpZGVudGl0eSwgQ09SRSwgRkFJTEVELAotICAgICAgICAoXygiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIpKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWRyb3BwZWQ6Ci0gIHsKLSAgICBpZiAoIWlkZW50aXR5LT5zaWxlbnQpIHsKLSAgICAgIGdzdF9pZGVudGl0eV91cGRhdGVfbGFzdF9tZXNzYWdlX2Zvcl9idWZmZXIgKGlkZW50aXR5LCAiZHJvcHBpbmciLCBidWYsCi0gICAgICAgICAgc2l6ZSk7Ci0gICAgfQotCi0gICAgdHMgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRzKSkgewotICAgICAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRCAoaWRlbnRpdHkpLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfZ2FwICh0cywgZHVyYXRpb24pKTsKLSAgICB9Ci0KLSAgICAvKiByZXR1cm4gRFJPUFBFRCB0byBiYXNldHJhbnNmb3JtLiAqLwotICAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWRlbnRpdHlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdElkZW50aXR5ICppZGVudGl0eTsKLQotICBpZGVudGl0eSA9IEdTVF9JREVOVElUWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU0xFRVBfVElNRToKLSAgICAgIGlkZW50aXR5LT5zbGVlcF90aW1lID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJTEVOVDoKLSAgICAgIGlkZW50aXR5LT5zaWxlbnQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0lOR0xFX1NFR01FTlQ6Ci0gICAgICBpZGVudGl0eS0+c2luZ2xlX3NlZ21lbnQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFVNUDoKLSAgICAgIGlkZW50aXR5LT5kdW1wID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VSUk9SX0FGVEVSOgotICAgICAgaWRlbnRpdHktPmVycm9yX2FmdGVyID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFJPUF9QUk9CQUJJTElUWToKLSAgICAgIGlkZW50aXR5LT5kcm9wX3Byb2JhYmlsaXR5ID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EUk9QX0JVRkZFUl9GTEFHUzoKLSAgICAgIGlkZW50aXR5LT5kcm9wX2J1ZmZlcl9mbGFncyA9IGdfdmFsdWVfZ2V0X2ZsYWdzICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREFUQVJBVEU6Ci0gICAgICBpZGVudGl0eS0+ZGF0YXJhdGUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TWU5DOgotICAgICAgaWRlbnRpdHktPnN5bmMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0hFQ0tfSU1QRVJGRUNUX1RJTUVTVEFNUDoKLSAgICAgIGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NIRUNLX0lNUEVSRkVDVF9PRkZTRVQ6Ci0gICAgICBpZGVudGl0eS0+Y2hlY2tfaW1wZXJmZWN0X29mZnNldCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUdOQUxfSEFORE9GRlM6Ci0gICAgICBpZGVudGl0eS0+c2lnbmFsX2hhbmRvZmZzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBpZiAoaWRlbnRpdHktPmRhdGFyYXRlID4gMCB8fCBpZGVudGl0eS0+c2luZ2xlX3NlZ21lbnQpCi0gICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoR1NUX0JBU0VfVFJBTlNGT1JNIChpZGVudGl0eSksIEZBTFNFKTsKLSAgZWxzZQotICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKEdTVF9CQVNFX1RSQU5TRk9STSAoaWRlbnRpdHkpLCBUUlVFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pZGVudGl0eV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SWRlbnRpdHkgKmlkZW50aXR5OwotCi0gIGlkZW50aXR5ID0gR1NUX0lERU5USVRZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TTEVFUF9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGlkZW50aXR5LT5zbGVlcF90aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FUlJPUl9BRlRFUjoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGlkZW50aXR5LT5lcnJvcl9hZnRlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFJPUF9QUk9CQUJJTElUWToKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgaWRlbnRpdHktPmRyb3BfcHJvYmFiaWxpdHkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RST1BfQlVGRkVSX0ZMQUdTOgotICAgICAgZ192YWx1ZV9zZXRfZmxhZ3MgKHZhbHVlLCBpZGVudGl0eS0+ZHJvcF9idWZmZXJfZmxhZ3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RBVEFSQVRFOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgaWRlbnRpdHktPmRhdGFyYXRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUxFTlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgaWRlbnRpdHktPnNpbGVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0lOR0xFX1NFR01FTlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgaWRlbnRpdHktPnNpbmdsZV9zZWdtZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EVU1QOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGlkZW50aXR5LT5kdW1wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MQVNUX01FU1NBR0U6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGlkZW50aXR5KTsKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIGlkZW50aXR5LT5sYXN0X21lc3NhZ2UpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGlkZW50aXR5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TWU5DOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGlkZW50aXR5LT5zeW5jKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DSEVDS19JTVBFUkZFQ1RfVElNRVNUQU1QOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3RfdGltZXN0YW1wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DSEVDS19JTVBFUkZFQ1RfT0ZGU0VUOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGlkZW50aXR5LT5jaGVja19pbXBlcmZlY3Rfb2Zmc2V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUdOQUxfSEFORE9GRlM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgaWRlbnRpdHktPnNpZ25hbF9oYW5kb2Zmcyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2lkZW50aXR5X3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIEdzdElkZW50aXR5ICppZGVudGl0eTsKLQotICBpZGVudGl0eSA9IEdTVF9JREVOVElUWSAodHJhbnMpOwotCi0gIGlkZW50aXR5LT5vZmZzZXQgPSAwOwotICBpZGVudGl0eS0+cHJldl90aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBpZGVudGl0eS0+cHJldl9kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGlkZW50aXR5LT5wcmV2X29mZnNldF9lbmQgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICBpZGVudGl0eS0+cHJldl9vZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pZGVudGl0eV9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIEdzdElkZW50aXR5ICppZGVudGl0eTsKLQotICBpZGVudGl0eSA9IEdTVF9JREVOVElUWSAodHJhbnMpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoaWRlbnRpdHkpOwotICBnX2ZyZWUgKGlkZW50aXR5LT5sYXN0X21lc3NhZ2UpOwotICBpZGVudGl0eS0+bGFzdF9tZXNzYWdlID0gTlVMTDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGlkZW50aXR5KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaWRlbnRpdHlfYWNjZXB0X2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdFBhZCAqcGFkOwotCi0gIC8qIFByb3h5IGFjY2VwdC1jYXBzICovCi0KLSAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykKLSAgICBwYWQgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQgKGJhc2UpOwotICBlbHNlCi0gICAgcGFkID0gR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQgKGJhc2UpOwotCi0gIHJldCA9IGdzdF9wYWRfcGVlcl9xdWVyeV9hY2NlcHRfY2FwcyAocGFkLCBjYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pZGVudGl0eV9xdWVyeSAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0SWRlbnRpdHkgKmlkZW50aXR5OwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgaWRlbnRpdHkgPSBHU1RfSURFTlRJVFkgKGJhc2UpOwotCi0gIHJldCA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+cXVlcnkgKGJhc2UsIGRpcmVjdGlvbiwgcXVlcnkpOwotCi0gIGlmIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9MQVRFTkNZKSB7Ci0gICAgZ2Jvb2xlYW4gbGl2ZSA9IEZBTFNFOwotICAgIEdzdENsb2NrVGltZSBtaW4gPSAwLCBtYXggPSAwOwotCi0gICAgaWYgKHJldCkgewotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKHF1ZXJ5LCAmbGl2ZSwgJm1pbiwgJm1heCk7Ci0KLSAgICAgIGlmIChpZGVudGl0eS0+c3luYyAmJiBtYXggPCBtaW4pIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAoYmFzZSwgQ09SRSwgQ0xPQ0ssIChOVUxMKSwKLSAgICAgICAgICAgICgiSW1wb3NzaWJsZSB0byBjb25maWd1cmUgbGF0ZW5jeSBiZWZvcmUgaWRlbnRpdHkgc3luYz10cnVlOiIKLSAgICAgICAgICAgICAgICAiIG1heCAlIiBHU1RfVElNRV9GT1JNQVQgIiA8IG1pbiAlIgotICAgICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLiBBZGQgcXVldWVzIG9yIG90aGVyIGJ1ZmZlcmluZyBlbGVtZW50cy4iLAotICAgICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1heCksIEdTVF9USU1FX0FSR1MgKG1pbikpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJZ25vcmUgdGhlIHVwc3RyZWFtIGxhdGVuY3kgaWYgaXQgaXMgbm90IGxpdmUgKi8KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGlkZW50aXR5KTsKLSAgICBpZiAobGl2ZSkKLSAgICAgIGlkZW50aXR5LT51cHN0cmVhbV9sYXRlbmN5ID0gbWluOwotICAgIGVsc2UKLSAgICAgIGlkZW50aXR5LT51cHN0cmVhbV9sYXRlbmN5ID0gMDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoaWRlbnRpdHkpOwotCi0gICAgZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5IChxdWVyeSwgbGl2ZSB8fCBpZGVudGl0eS0+c3luYywgbWluLCBtYXgpOwotICAgIHJldCA9IFRSVUU7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfaWRlbnRpdHlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RJZGVudGl0eSAqaWRlbnRpdHkgPSBHU1RfSURFTlRJVFkgKGVsZW1lbnQpOwotICBnYm9vbGVhbiBub19wcmVyb2xsID0gRkFMU0U7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChpZGVudGl0eSk7Ci0gICAgICBpZGVudGl0eS0+YmxvY2tlZCA9IFRSVUU7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoaWRlbnRpdHkpOwotICAgICAgaWYgKGlkZW50aXR5LT5zeW5jKQotICAgICAgICBub19wcmVyb2xsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoaWRlbnRpdHkpOwotICAgICAgaWRlbnRpdHktPmJsb2NrZWQgPSBGQUxTRTsKLSAgICAgIGdfY29uZF9icm9hZGNhc3QgKCZpZGVudGl0eS0+YmxvY2tlZF9jb25kKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChpZGVudGl0eSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChpZGVudGl0eSk7Ci0gICAgICBpZiAoaWRlbnRpdHktPmNsb2NrX2lkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGlkZW50aXR5LCAidW5sb2NrIGNsb2NrIHdhaXQiKTsKLSAgICAgICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGlkZW50aXR5LT5jbG9ja19pZCk7Ci0gICAgICB9Ci0gICAgICBpZGVudGl0eS0+YmxvY2tlZCA9IEZBTFNFOwotICAgICAgZ19jb25kX2Jyb2FkY2FzdCAoJmlkZW50aXR5LT5ibG9ja2VkX2NvbmQpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGlkZW50aXR5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoaWRlbnRpdHkpOwotICAgICAgaWRlbnRpdHktPnVwc3RyZWFtX2xhdGVuY3kgPSAwOwotICAgICAgaWRlbnRpdHktPmJsb2NrZWQgPSBUUlVFOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGlkZW50aXR5KTsKLSAgICAgIGlmIChpZGVudGl0eS0+c3luYykKLSAgICAgICAgbm9fcHJlcm9sbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAobm9fcHJlcm9sbCAmJiByZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKQotICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDsKLQotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTYyZDQ3Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aWRlbnRpdHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqCi0gKiBnc3RpZGVudGl0eS5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9JREVOVElUWV9IX18KLSNkZWZpbmUgX19HU1RfSURFTlRJVFlfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotCi0jZGVmaW5lIEdTVF9UWVBFX0lERU5USVRZIFwKLSAgKGdzdF9pZGVudGl0eV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSURFTlRJVFkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9JREVOVElUWSxHc3RJZGVudGl0eSkpCi0jZGVmaW5lIEdTVF9JREVOVElUWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9JREVOVElUWSxHc3RJZGVudGl0eUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0lERU5USVRZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfSURFTlRJVFkpKQotI2RlZmluZSBHU1RfSVNfSURFTlRJVFlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfSURFTlRJVFkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0SWRlbnRpdHkgR3N0SWRlbnRpdHk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SWRlbnRpdHlDbGFzcyBHc3RJZGVudGl0eUNsYXNzOwotCi0vKioKLSAqIEdzdElkZW50aXR5OgotICoKLSAqIE9wYXF1ZSAjR3N0SWRlbnRpdHkgZGF0YSBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IF9Hc3RJZGVudGl0eSB7Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gCSBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RDbG9ja0lEICAgICBjbG9ja19pZDsKLSAgZ2ludCAJIAkgZXJyb3JfYWZ0ZXI7Ci0gIGdmbG9hdCAJIGRyb3BfcHJvYmFiaWxpdHk7Ci0gIGdpbnQJCSBkYXRhcmF0ZTsKLSAgZ3VpbnQgCSBzbGVlcF90aW1lOwotICBnYm9vbGVhbiAJIHNpbGVudDsKLSAgZ2Jvb2xlYW4gCSBkdW1wOwotICBnYm9vbGVhbiAJIHN5bmM7Ci0gIGdib29sZWFuIAkgY2hlY2tfaW1wZXJmZWN0X3RpbWVzdGFtcDsKLSAgZ2Jvb2xlYW4gCSBjaGVja19pbXBlcmZlY3Rfb2Zmc2V0OwotICBnYm9vbGVhbgkgc2luZ2xlX3NlZ21lbnQ7Ci0gIEdzdEJ1ZmZlckZsYWdzIGRyb3BfYnVmZmVyX2ZsYWdzOwotICBHc3RDbG9ja1RpbWUgICBwcmV2X3RpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lICAgcHJldl9kdXJhdGlvbjsKLSAgZ3VpbnQ2NCAgICAgICAgcHJldl9vZmZzZXQ7Ci0gIGd1aW50NjQgICAgICAgIHByZXZfb2Zmc2V0X2VuZDsKLSAgZ2NoYXIgCSpsYXN0X21lc3NhZ2U7Ci0gIGd1aW50NjQgICAgICAgIG9mZnNldDsKLSAgZ2Jvb2xlYW4gICAgICAgc2lnbmFsX2hhbmRvZmZzOwotICBHc3RDbG9ja1RpbWUgICB1cHN0cmVhbV9sYXRlbmN5OwotICBHQ29uZCAgICAgICAgICBibG9ja2VkX2NvbmQ7Ci0gIGdib29sZWFuICAgICAgIGJsb2NrZWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdElkZW50aXR5Q2xhc3MgewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIHNpZ25hbHMgKi8KLSAgdm9pZCAoKmhhbmRvZmYpIChHc3RFbGVtZW50ICplbGVtZW50LCBHc3RCdWZmZXIgKmJ1Zik7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X2lkZW50aXR5X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0lERU5USVRZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQxZDY1ZS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDE3NTEgKzAsMCBAQAotLyogR1N0cmVhbWVyIGlucHV0IHNlbGVjdG9yCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA1IEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1pbnB1dC1zZWxlY3RvcgotICogQHNlZV9hbHNvOiAjR3N0T3V0cHV0U2VsZWN0b3IKLSAqCi0gKiBEaXJlY3Qgb25lIG91dCBvZiBOIGlucHV0IHN0cmVhbXMgdG8gdGhlIG91dHB1dCBwYWQuCi0gKgotICogVGhlIGlucHV0IHBhZHMgYXJlIGZyb20gYSBHc3RQYWQgc3ViY2xhc3MgYW5kIGhhdmUgYWRkaXRpb25hbAotICogcHJvcGVydGllcywgd2hpY2ggdXNlcnMgbWF5IGZpbmQgdXNlZnVsLCBuYW1lbHk6Ci0gKgotICogPGl0ZW1pemVkbGlzdD4KLSAqIDxsaXN0aXRlbT4KLSAqICJydW5uaW5nLXRpbWUiOiBSdW5uaW5nIHRpbWUgb2Ygc3RyZWFtIG9uIHBhZCAoI2dpbnQ2NCkKLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAidGFncyI6IFRoZSBjdXJyZW50bHkgYWN0aXZlIHRhZ3Mgb24gdGhlIHBhZCAoI0dzdFRhZ0xpc3QsIGJveGVkIHR5cGUpCi0gKiA8L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPgotICogImFjdGl2ZSI6IElmIHRoZSBwYWQgaXMgY3VycmVudGx5IGFjdGl2ZSAoI2dib29sZWFuKQotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICJhbHdheXMtb2siIDogTWFrZSBhbiBpbmFjdGl2ZSBwYWRzIHJldHVybiAjR1NUX0ZMT1dfT0sgaW5zdGVhZCBvZgotICogI0dTVF9GTE9XX05PVF9MSU5LRUQKLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGlucHV0c2VsZWN0b3IuaCIKLQotI2RlZmluZSBERUJVR19DQUNIRURfQlVGRkVSUyAwCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGlucHV0X3NlbGVjdG9yX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGlucHV0X3NlbGVjdG9yX2RlYnVnCi0KLSNkZWZpbmUgR1NUX1RZUEVfSU5QVVRfU0VMRUNUT1JfU1lOQ19NT0RFIChnc3RfaW5wdXRfc2VsZWN0b3Jfc3luY19tb2RlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9pbnB1dF9zZWxlY3Rvcl9zeW5jX21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZGF0YVtdID0gewotICAgIHtHU1RfSU5QVVRfU0VMRUNUT1JfU1lOQ19NT0RFX0FDVElWRV9TRUdNRU5ULAotICAgICAgICAgICJTeW5jIHVzaW5nIHRoZSBjdXJyZW50IGFjdGl2ZSBzZWdtZW50IiwKLSAgICAgICAgImFjdGl2ZS1zZWdtZW50In0sCi0gICAge0dTVF9JTlBVVF9TRUxFQ1RPUl9TWU5DX01PREVfQ0xPQ0ssICJTeW5jIHVzaW5nIHRoZSBjbG9jayIsICJjbG9jayJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIXR5cGUpIHsKLSAgICB0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdElucHV0U2VsZWN0b3JTeW5jTW9kZSIsIGRhdGEpOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQotCi0jZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfTE9DSyhzZWwpICgmKChHc3RJbnB1dFNlbGVjdG9yKikoc2VsKSktPmxvY2spCi0jZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfQ09ORChzZWwpICgmKChHc3RJbnB1dFNlbGVjdG9yKikoc2VsKSktPmNvbmQpCi0jZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLKHNlbCkgKGdfbXV0ZXhfbG9jayAoR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9MT0NLKHNlbCkpKQotI2RlZmluZSBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLKHNlbCkgKGdfbXV0ZXhfdW5sb2NrIChHU1RfSU5QVVRfU0VMRUNUT1JfR0VUX0xPQ0soc2VsKSkpCi0jZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9XQUlUKHNlbCkgKGdfY29uZF93YWl0IChHU1RfSU5QVVRfU0VMRUNUT1JfR0VUX0NPTkQoc2VsKSwgXAotCQkJR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9MT0NLKHNlbCkpKQotI2RlZmluZSBHU1RfSU5QVVRfU0VMRUNUT1JfQlJPQURDQVNUKHNlbCkgKGdfY29uZF9icm9hZGNhc3QgKEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfQ09ORChzZWwpKSkKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9pbnB1dF9zZWxlY3Rvcl9zaW5rX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2lucHV0X3NlbGVjdG9yX3NyY19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTl9QQURTLAotICBQUk9QX0FDVElWRV9QQUQsCi0gIFBST1BfU1lOQ19TVFJFQU1TLAotICBQUk9QX1NZTkNfTU9ERSwKLSAgUFJPUF9DQUNIRV9CVUZGRVJTCi19OwotCi0jZGVmaW5lIERFRkFVTFRfU1lOQ19TVFJFQU1TIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9TWU5DX01PREUgR1NUX0lOUFVUX1NFTEVDVE9SX1NZTkNfTU9ERV9BQ1RJVkVfU0VHTUVOVAotI2RlZmluZSBERUZBVUxUX0NBQ0hFX0JVRkZFUlMgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9QQURfQUxXQVlTX09LIFRSVUUKLQotZW51bQotewotICBQUk9QX1BBRF8wLAotICBQUk9QX1BBRF9SVU5OSU5HX1RJTUUsCi0gIFBST1BfUEFEX1RBR1MsCi0gIFBST1BfUEFEX0FDVElWRSwKLSAgUFJPUF9QQURfQUxXQVlTX09LCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfaW5wdXRfc2VsZWN0b3JfYWN0aXZlX3BhZF9jaGFuZ2VkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYywgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4gZ3N0X2lucHV0X3NlbGVjdG9yX2lzX2FjdGl2ZV9zaW5rcGFkIChHc3RJbnB1dFNlbGVjdG9yICoKLSAgICBzZWwsIEdzdFBhZCAqIHBhZCk7Ci1zdGF0aWMgR3N0UGFkICpnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X2FjdGl2ZV9zaW5rcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsKTsKLXN0YXRpYyBHc3RQYWQgKmdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfbGlua2VkX3BhZCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbCwKLSAgICBHc3RQYWQgKiBwYWQsIGdib29sZWFuIHN0cmljdCk7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfU0VMRUNUT1JfUEFEIFwKLSAgKGdzdF9zZWxlY3Rvcl9wYWRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1NFTEVDVE9SX1BBRChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfU0VMRUNUT1JfUEFELCBHc3RTZWxlY3RvclBhZCkpCi0jZGVmaW5lIEdTVF9TRUxFQ1RPUl9QQURfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9TRUxFQ1RPUl9QQUQsIEdzdFNlbGVjdG9yUGFkQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfU0VMRUNUT1JfUEFEKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9TRUxFQ1RPUl9QQUQpKQotI2RlZmluZSBHU1RfSVNfU0VMRUNUT1JfUEFEX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfU0VMRUNUT1JfUEFEKSkKLSNkZWZpbmUgR1NUX1NFTEVDVE9SX1BBRF9DQVNUKG9iaikgXAotICAoKEdzdFNlbGVjdG9yUGFkICopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTZWxlY3RvclBhZCBHc3RTZWxlY3RvclBhZDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTZWxlY3RvclBhZENsYXNzIEdzdFNlbGVjdG9yUGFkQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U2VsZWN0b3JQYWRDYWNoZWRCdWZmZXIgR3N0U2VsZWN0b3JQYWRDYWNoZWRCdWZmZXI7Ci0KLXN0cnVjdCBfR3N0U2VsZWN0b3JQYWQKLXsKLSAgR3N0UGFkIHBhcmVudDsKLQotICBnYm9vbGVhbiBwdXNoZWQ7ICAgICAgICAgICAgICAvKiB3aGVuIGJ1ZmZlciB3YXMgcHVzaGVkIGRvd25zdHJlYW0gc2luY2UgYWN0aXZhdGlvbiAqLwotICBndWludCBncm91cF9pZDsgICAgICAgICAgICAgICAvKiBHcm91cCBJRCBmcm9tIHRoZSBsYXN0IHN0cmVhbS1zdGFydCAqLwotICBnYm9vbGVhbiBncm91cF9kb25lOyAgICAgICAgICAvKiB3aGVuIFN0cmVhbSBHcm91cCBEb25lIGhhcyBiZWVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkICovCi0gIGdib29sZWFuIGVvczsgICAgICAgICAgICAgICAgIC8qIHdoZW4gRU9TIGhhcyBiZWVuIHJlY2VpdmVkICovCi0gIGdib29sZWFuIGVvc19zZW50OyAgICAgICAgICAgIC8qIHdoZW4gRU9TIHdhcyBzZW50IGRvd25zdHJlYW0gKi8KLSAgZ2Jvb2xlYW4gZGlzY29udDsgICAgICAgICAgICAgLyogYWZ0ZXIgc3dpdGNoaW5nIHdlIGNyZWF0ZSBhIGRpc2NvbnQgKi8KLSAgZ2Jvb2xlYW4gZmx1c2hpbmc7ICAgICAgICAgICAgLyogc2V0IGFmdGVyIGZsdXNoLXN0YXJ0IGFuZCBiZWZvcmUgZmx1c2gtc3RvcCAqLwotICBnYm9vbGVhbiBhbHdheXNfb2s7Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7ICAgICAgICAgICAgIC8qIGxhc3QgdGFncyByZWNlaXZlZCBvbiB0aGUgcGFkICovCi0KLSAgR3N0U2VnbWVudCBzZWdtZW50OyAgICAgICAgICAgLyogdGhlIGN1cnJlbnQgc2VnbWVudCBvbiB0aGUgcGFkICovCi0gIGd1aW50MzIgc2VnbWVudF9zZXFudW07ICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY3VycmVudCBzZWdtZW50ICovCi0KLSAgZ2Jvb2xlYW4gZXZlbnRzX3BlbmRpbmc7ICAgICAgLyogVFJVRSBpZiBzdGlja3kgZXZlbnRzIG5lZWQgdG8gYmUgdXBkYXRlZCAqLwotCi0gIGdib29sZWFuIHNlbmRpbmdfY2FjaGVkX2J1ZmZlcnM7Ci0gIEdRdWV1ZSAqY2FjaGVkX2J1ZmZlcnM7Ci19OwotCi1zdHJ1Y3QgX0dzdFNlbGVjdG9yUGFkQ2FjaGVkQnVmZmVyCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFNlbGVjdG9yUGFkQ2xhc3MKLXsKLSAgR3N0UGFkQ2xhc3MgcGFyZW50OwotfTsKLQotR1R5cGUgZ3N0X3NlbGVjdG9yX3BhZF9nZXRfdHlwZSAodm9pZCk7Ci1zdGF0aWMgdm9pZCBnc3Rfc2VsZWN0b3JfcGFkX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9zZWxlY3Rvcl9wYWRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3NlbGVjdG9yX3BhZF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnaW50NjQgZ3N0X3NlbGVjdG9yX3BhZF9nZXRfcnVubmluZ190aW1lIChHc3RTZWxlY3RvclBhZCAqIHBhZCk7Ci1zdGF0aWMgdm9pZCBnc3Rfc2VsZWN0b3JfcGFkX3Jlc2V0IChHc3RTZWxlY3RvclBhZCAqIHBhZCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NlbGVjdG9yX3BhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgR3N0SXRlcmF0b3IgKmdzdF9zZWxlY3Rvcl9wYWRfaXRlcmF0ZV9saW5rZWRfcGFkcyAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3Rfc2VsZWN0b3JfcGFkX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIHZvaWQgZ3N0X3NlbGVjdG9yX3BhZF9jYWNoZV9idWZmZXIgKEdzdFNlbGVjdG9yUGFkICogc2VscGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgdm9pZCBnc3Rfc2VsZWN0b3JfcGFkX2ZyZWVfY2FjaGVkX2J1ZmZlcnMgKEdzdFNlbGVjdG9yUGFkICogc2VscGFkKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0U2VsZWN0b3JQYWQsIGdzdF9zZWxlY3Rvcl9wYWQsIEdTVF9UWVBFX1BBRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2VsZWN0b3JfcGFkX2NsYXNzX2luaXQgKEdzdFNlbGVjdG9yUGFkQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3NlbGVjdG9yX3BhZF9maW5hbGl6ZTsKLQotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3Rfc2VsZWN0b3JfcGFkX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3NlbGVjdG9yX3BhZF9zZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QQURfUlVOTklOR19USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX2ludDY0ICgicnVubmluZy10aW1lIiwgIlJ1bm5pbmcgdGltZSIsCi0gICAgICAgICAgIlJ1bm5pbmcgdGltZSBvZiBzdHJlYW0gb24gcGFkIiwgMCwgR19NQVhJTlQ2NCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BBRF9UQUdTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgidGFncyIsICJUYWdzIiwKLSAgICAgICAgICAiVGhlIGN1cnJlbnRseSBhY3RpdmUgdGFncyBvbiB0aGUgcGFkIiwgR1NUX1RZUEVfVEFHX0xJU1QsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QQURfQUNUSVZFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhY3RpdmUiLCAiQWN0aXZlIiwKLSAgICAgICAgICAiSWYgdGhlIHBhZCBpcyBjdXJyZW50bHkgYWN0aXZlIiwgRkFMU0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyogRklYTUU6IGJldHRlciBwcm9wZXJ0eSBuYW1lPyAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BBRF9BTFdBWVNfT0ssCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImFsd2F5cy1vayIsICJBbHdheXMgT0siLAotICAgICAgICAgICJNYWtlIGFuIGluYWN0aXZlIHBhZCByZXR1cm4gT0sgaW5zdGVhZCBvZiBOT1RfTElOS0VEIiwKLSAgICAgICAgICBERUZBVUxUX1BBRF9BTFdBWVNfT0ssIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NlbGVjdG9yX3BhZF9pbml0IChHc3RTZWxlY3RvclBhZCAqIHBhZCkKLXsKLSAgcGFkLT5hbHdheXNfb2sgPSBERUZBVUxUX1BBRF9BTFdBWVNfT0s7Ci0gIGdzdF9zZWxlY3Rvcl9wYWRfcmVzZXQgKHBhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2VsZWN0b3JfcGFkX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RTZWxlY3RvclBhZCAqcGFkOwotCi0gIHBhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAob2JqZWN0KTsKLQotICBpZiAocGFkLT50YWdzKQotICAgIGdzdF90YWdfbGlzdF91bnJlZiAocGFkLT50YWdzKTsKLSAgZ3N0X3NlbGVjdG9yX3BhZF9mcmVlX2NhY2hlZF9idWZmZXJzIChwYWQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3Rfc2VsZWN0b3JfcGFkX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NlbGVjdG9yX3BhZF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U2VsZWN0b3JQYWQgKnNwYWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BBRF9BTFdBWVNfT0s6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gICAgICBzcGFkLT5hbHdheXNfb2sgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zZWxlY3Rvcl9wYWRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNlbGVjdG9yUGFkICpzcGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QQURfUlVOTklOR19USU1FOgotICAgICAgZ192YWx1ZV9zZXRfaW50NjQgKHZhbHVlLCBnc3Rfc2VsZWN0b3JfcGFkX2dldF9ydW5uaW5nX3RpbWUgKHNwYWQpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QQURfVEFHUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKLSAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgc3BhZC0+dGFncyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QQURfQUNUSVZFOgotICAgIHsKLSAgICAgIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKLQotICAgICAgc2VsID0gR1NUX0lOUFVUX1NFTEVDVE9SIChnc3RfcGFkX2dldF9wYXJlbnQgKHNwYWQpKTsKLSAgICAgIGlmIChzZWwpIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdzdF9pbnB1dF9zZWxlY3Rvcl9pc19hY3RpdmVfc2lua3BhZCAoc2VsLAotICAgICAgICAgICAgICAgIEdTVF9QQURfQ0FTVCAoc3BhZCkpKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc2VsKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBGQUxTRSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1BBRF9BTFdBWVNfT0s6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3BhZC0+YWx3YXlzX29rKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2ludDY0Ci1nc3Rfc2VsZWN0b3JfcGFkX2dldF9ydW5uaW5nX3RpbWUgKEdzdFNlbGVjdG9yUGFkICogcGFkKQotewotICBnaW50NjQgcmV0ID0gMDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gIGlmIChwYWQtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgIHJldCA9Ci0gICAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnBhZC0+c2VnbWVudCwgcGFkLT5zZWdtZW50LmZvcm1hdCwKLSAgICAgICAgcGFkLT5zZWdtZW50LnBvc2l0aW9uKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJydW5uaW5nIHRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiBzZWdtZW50OiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHJldCksICZwYWQtPnNlZ21lbnQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFNFTEVDVE9SX0xPQ0sgKi8KLXN0YXRpYyB2b2lkCi1nc3Rfc2VsZWN0b3JfcGFkX3Jlc2V0IChHc3RTZWxlY3RvclBhZCAqIHBhZCkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBwYWQtPnB1c2hlZCA9IEZBTFNFOwotICBwYWQtPmdyb3VwX2RvbmUgPSBGQUxTRTsKLSAgcGFkLT5lb3MgPSBGQUxTRTsKLSAgcGFkLT5lb3Nfc2VudCA9IEZBTFNFOwotICBwYWQtPmV2ZW50c19wZW5kaW5nID0gRkFMU0U7Ci0gIHBhZC0+ZGlzY29udCA9IEZBTFNFOwotICBwYWQtPmZsdXNoaW5nID0gRkFMU0U7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZwYWQtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgcGFkLT5zZW5kaW5nX2NhY2hlZF9idWZmZXJzID0gRkFMU0U7Ci0gIGdzdF9zZWxlY3Rvcl9wYWRfZnJlZV9jYWNoZWRfYnVmZmVycyAocGFkKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci19Ci0KLXN0YXRpYyBHc3RTZWxlY3RvclBhZENhY2hlZEJ1ZmZlciAqCi1nc3Rfc2VsZWN0b3JfcGFkX25ld19jYWNoZWRfYnVmZmVyIChHc3RTZWxlY3RvclBhZCAqIHNlbHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RTZWxlY3RvclBhZENhY2hlZEJ1ZmZlciAqY2FjaGVkX2J1ZmZlciA9Ci0gICAgICBnX3NsaWNlX25ldyAoR3N0U2VsZWN0b3JQYWRDYWNoZWRCdWZmZXIpOwotICBjYWNoZWRfYnVmZmVyLT5idWZmZXIgPSBidWZmZXI7Ci0gIGNhY2hlZF9idWZmZXItPnNlZ21lbnQgPSBzZWxwYWQtPnNlZ21lbnQ7Ci0gIHJldHVybiBjYWNoZWRfYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NlbGVjdG9yX3BhZF9mcmVlX2NhY2hlZF9idWZmZXIgKEdzdFNlbGVjdG9yUGFkQ2FjaGVkQnVmZmVyICogY2FjaGVkX2J1ZmZlcikKLXsKLSAgaWYgKGNhY2hlZF9idWZmZXItPmJ1ZmZlcikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChjYWNoZWRfYnVmZmVyLT5idWZmZXIpOwotICBnX3NsaWNlX2ZyZWUgKEdzdFNlbGVjdG9yUGFkQ2FjaGVkQnVmZmVyLCBjYWNoZWRfYnVmZmVyKTsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgU0VMRUNUT1JfTE9DSyAqLwotc3RhdGljIHZvaWQKLWdzdF9zZWxlY3Rvcl9wYWRfY2FjaGVfYnVmZmVyIChHc3RTZWxlY3RvclBhZCAqIHNlbHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBpZiAoc2VscGFkLT5zZWdtZW50LmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxwYWQsICJCdWZmZXIgJXAgd2l0aCBzZWdtZW50IG5vdCBpbiB0aW1lIGZvcm1hdCwgIgotICAgICAgICAibm90IGNhY2hpbmciLCBidWZmZXIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLCAiQ2FjaGluZyBidWZmZXIgJXAiLCBidWZmZXIpOwotICBpZiAoIXNlbHBhZC0+Y2FjaGVkX2J1ZmZlcnMpCi0gICAgc2VscGFkLT5jYWNoZWRfYnVmZmVycyA9IGdfcXVldWVfbmV3ICgpOwotICBnX3F1ZXVlX3B1c2hfdGFpbCAoc2VscGFkLT5jYWNoZWRfYnVmZmVycywKLSAgICAgIGdzdF9zZWxlY3Rvcl9wYWRfbmV3X2NhY2hlZF9idWZmZXIgKHNlbHBhZCwgYnVmZmVyKSk7Ci19Ci0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFNFTEVDVE9SX0xPQ0sgKi8KLXN0YXRpYyB2b2lkCi1nc3Rfc2VsZWN0b3JfcGFkX2ZyZWVfY2FjaGVkX2J1ZmZlcnMgKEdzdFNlbGVjdG9yUGFkICogc2VscGFkKQotewotICBpZiAoIXNlbHBhZC0+Y2FjaGVkX2J1ZmZlcnMpCi0gICAgcmV0dXJuOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbHBhZCwgIkZyZWVpbmcgY2FjaGVkIGJ1ZmZlcnMiKTsKLSAgZ19xdWV1ZV9mcmVlX2Z1bGwgKHNlbHBhZC0+Y2FjaGVkX2J1ZmZlcnMsCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9zZWxlY3Rvcl9wYWRfZnJlZV9jYWNoZWRfYnVmZmVyKTsKLSAgc2VscGFkLT5jYWNoZWRfYnVmZmVycyA9IE5VTEw7Ci19Ci0KLS8qIHN0cmljdGx5IGdldCB0aGUgbGlua2VkIHBhZCBmcm9tIHRoZSBzaW5rcGFkLiBJZiB0aGUgcGFkIGlzIGFjdGl2ZSB3ZSByZXR1cm4KLSAqIHRoZSBzcmNwYWQgZWxzZSB3ZSByZXR1cm4gTlVMTCAqLwotc3RhdGljIEdzdEl0ZXJhdG9yICoKLWdzdF9zZWxlY3Rvcl9wYWRfaXRlcmF0ZV9saW5rZWRfcGFkcyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCi17Ci0gIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKLSAgR3N0UGFkICpvdGhlcnBhZDsKLSAgR3N0SXRlcmF0b3IgKml0ID0gTlVMTDsKLSAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLQotICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKHBhcmVudCk7Ci0KLSAgb3RoZXJwYWQgPSBnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X2xpbmtlZF9wYWQgKHNlbCwgcGFkLCBUUlVFKTsKLSAgaWYgKG90aGVycGFkKSB7Ci0gICAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9QQUQpOwotICAgIGdfdmFsdWVfc2V0X29iamVjdCAoJnZhbCwgb3RoZXJwYWQpOwotICAgIGl0ID0gZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgKEdTVF9UWVBFX1BBRCwgJnZhbCk7Ci0gICAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAob3RoZXJwYWQpOwotICB9Ci0KLSAgcmV0dXJuIGl0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcndhcmRfc3RpY2t5X2V2ZW50cyAoR3N0UGFkICogc2lua3BhZCwgR3N0RXZlbnQgKiogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0SW5wdXRTZWxlY3RvciAqc2VsID0gR1NUX0lOUFVUX1NFTEVDVE9SICh1c2VyX2RhdGEpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmtwYWQsICJmb3J3YXJkIHN0aWNreSBldmVudCAlIiBHU1RfUFRSX0ZPUk1BVCwgKmV2ZW50KTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKCpldmVudCkgPT0gR1NUX0VWRU5UX1NFR01FTlQpIHsKLSAgICBHc3RTZWdtZW50ICpzZWcgPSAmR1NUX1NFTEVDVE9SX1BBRCAoc2lua3BhZCktPnNlZ21lbnQ7Ci0gICAgR3N0RXZlbnQgKmU7Ci0KLSAgICBlID0gZ3N0X2V2ZW50X25ld19zZWdtZW50IChzZWcpOwotICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChlLCBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKHNpbmtwYWQpLT5zZWdtZW50X3NlcW51bSk7Ci0KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbC0+c3JjcGFkLCBlKTsKLSAgfSBlbHNlIGlmIChHU1RfRVZFTlRfVFlQRSAoKmV2ZW50KSA9PSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUCi0gICAgICAmJiAhc2VsLT5oYXZlX2dyb3VwX2lkKSB7Ci0gICAgR3N0RXZlbnQgKnRtcCA9Ci0gICAgICAgIGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAoc2VsLT5zcmNwYWQsIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsIDApOwotCi0gICAgLyogT25seSBwdXNoIHN0cmVhbS1zdGFydCBvbmNlIGlmIG5vdCBhbGwgb3VyIHN0cmVhbXMgaGF2ZSBhIHN0cmVhbS1pZCAqLwotICAgIGlmICghdG1wKSB7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbC0+c3JjcGFkLCBnc3RfZXZlbnRfcmVmICgqZXZlbnQpKTsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X2V2ZW50X3VucmVmICh0bXApOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbC0+c3JjcGFkLCBnc3RfZXZlbnRfcmVmICgqZXZlbnQpKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pbnB1dF9zZWxlY3Rvcl9lb3Nfd2FpdCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYsIEdzdFNlbGVjdG9yUGFkICogcGFkLAotICAgIEdzdEV2ZW50ICogZW9zX2V2ZW50KQotewotICB3aGlsZSAoIXNlbGYtPmVvcyAmJiAhc2VsZi0+Zmx1c2hpbmcgJiYgIXBhZC0+Zmx1c2hpbmcpIHsKLSAgICBHc3RQYWQgKmFjdGl2ZV9zaW5rcGFkOwotICAgIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9hY3RpdmVfc2lua3BhZCAoc2VsZik7Ci0gICAgaWYgKHBhZCA9PSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKGFjdGl2ZV9zaW5rcGFkKSAmJiBwYWQtPmVvcwotICAgICAgICAmJiAhcGFkLT5lb3Nfc2VudCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAic2VuZCBFT1MgZXZlbnQiKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbGYpOwotICAgICAgLyogaWYgd2UgaGF2ZSBhIHBlbmRpbmcgZXZlbnRzLCBwdXNoIHRoZW0gbm93ICovCi0gICAgICBpZiAocGFkLT5ldmVudHNfcGVuZGluZykgewotICAgICAgICBnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAoR1NUX1BBRF9DQVNUIChwYWQpLAotICAgICAgICAgICAgZm9yd2FyZF9zdGlja3lfZXZlbnRzLCBzZWxmKTsKLSAgICAgICAgcGFkLT5ldmVudHNfcGVuZGluZyA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyY3BhZCwgZ3N0X2V2ZW50X3JlZiAoZW9zX2V2ZW50KSk7Ci0gICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsZik7Ci0gICAgICAvKiBXYWtlIHVwIG90aGVyIHBhZHMgc28gdGhleSBjYW4gY29udGludWUgd2hlbiBzeW5jaW5nIHRvCi0gICAgICAgKiBydW5uaW5nIHRpbWUsIGFzIHRoaXMgcGFkIGp1c3Qgc3dpdGNoZWQgdG8gRU9TIGFuZAotICAgICAgICogbWF5IGVuYWJsZSBvdGhlcnMgdG8gcHJvZ3Jlc3MgKi8KLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOwotICAgICAgcGFkLT5lb3Nfc2VudCA9IFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHdlIGNhbiBiZSB1bmxvY2tlZCBoZXJlIHdoZW4gd2UgYXJlIHNodXR0aW5nIGRvd24gKGZsdXNoaW5nKSBvciB3aGVuIHdlCi0gICAgICAgKiBnZXQgdW5ibG9ja2VkICovCi0gICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfV0FJVCAoc2VsZik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHNlbGYtPmZsdXNoaW5nOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pbnB1dF9zZWxlY3Rvcl9hbGxfZW9zIChHc3RJbnB1dFNlbGVjdG9yICogc2VsKQotewotICBHTGlzdCAqd2FsazsKLQotICBmb3IgKHdhbGsgPSBHU1RfRUxFTUVOVF9DQVNUIChzZWwpLT5zaW5rcGFkczsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICBHc3RTZWxlY3RvclBhZCAqc2VscGFkOwotCi0gICAgc2VscGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUICh3YWxrLT5kYXRhKTsKLSAgICBpZiAoIXNlbHBhZC0+ZW9zKSB7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2VsZWN0b3JfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgZ2Jvb2xlYW4gZm9yd2FyZDsKLSAgZ2Jvb2xlYW4gbmV3X3RhZ3MgPSBGQUxTRTsKLSAgR3N0SW5wdXRTZWxlY3RvciAqc2VsOwotICBHc3RTZWxlY3RvclBhZCAqc2VscGFkOwotICBHc3RQYWQgKnByZXZfYWN0aXZlX3NpbmtwYWQ7Ci0gIEdzdFBhZCAqYWN0aXZlX3NpbmtwYWQ7Ci0KLSAgc2VsID0gR1NUX0lOUFVUX1NFTEVDVE9SIChwYXJlbnQpOwotICBzZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKHBhZCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbHBhZCwgInJlY2VpdmVkIGV2ZW50ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0KLSAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7Ci0gIHByZXZfYWN0aXZlX3NpbmtwYWQgPQotICAgICAgc2VsLT5hY3RpdmVfc2lua3BhZCA/IGdzdF9vYmplY3RfcmVmIChzZWwtPmFjdGl2ZV9zaW5rcGFkKSA6IE5VTEw7Ci0gIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9hY3RpdmVfc2lua3BhZCAoc2VsKTsKLSAgZ3N0X29iamVjdF9yZWYgKGFjdGl2ZV9zaW5rcGFkKTsKLSAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLQotICBpZiAocHJldl9hY3RpdmVfc2lua3BhZCAhPSBhY3RpdmVfc2lua3BhZCkgewotICAgIGlmIChwcmV2X2FjdGl2ZV9zaW5rcGFkKQotICAgICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAocHJldl9hY3RpdmVfc2lua3BhZCksICJhY3RpdmUiKTsKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChhY3RpdmVfc2lua3BhZCksICJhY3RpdmUiKTsKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChzZWwpLCAiYWN0aXZlLXBhZCIpOwotICB9Ci0gIGlmIChwcmV2X2FjdGl2ZV9zaW5rcGFkKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHByZXZfYWN0aXZlX3NpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChhY3RpdmVfc2lua3BhZCk7Ci0KLSAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7Ci0gIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9hY3RpdmVfc2lua3BhZCAoc2VsKTsKLQotICAvKiBvbmx5IGZvcndhcmQgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgYWN0aXZlIHNpbmtwYWQgKi8KLSAgZm9yd2FyZCA9IChwYWQgPT0gYWN0aXZlX3NpbmtwYWQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVDp7Ci0gICAgICBpZiAoIWdzdF9ldmVudF9wYXJzZV9ncm91cF9pZCAoZXZlbnQsICZzZWxwYWQtPmdyb3VwX2lkKSkgewotICAgICAgICBzZWwtPmhhdmVfZ3JvdXBfaWQgPSBGQUxTRTsKLSAgICAgICAgc2VscGFkLT5ncm91cF9pZCA9IDA7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICAvKiBVbmJsb2NrIHRoZSBwYWQgaWYgaXQncyB3YWl0aW5nICovCi0gICAgICBzZWxwYWQtPmZsdXNoaW5nID0gVFJVRTsKLSAgICAgIHNlbC0+ZW9zID0gRkFMU0U7Ci0gICAgICBzZWxwYWQtPmdyb3VwX2RvbmUgPSBGQUxTRTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgZ3N0X3NlbGVjdG9yX3BhZF9yZXNldCAoc2VscGFkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWxwYWQtPnNlZ21lbnQpOwotICAgICAgc2VscGFkLT5zZWdtZW50X3NlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImNvbmZpZ3VyZWQgU0VHTUVOVCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCi0gICAgICAgICAgJnNlbHBhZC0+c2VnbWVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOgotICAgIHsKLSAgICAgIEdzdFRhZ0xpc3QgKnRhZ3MsICpvbGR0YWdzLCAqbmV3dGFnczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZ0YWdzKTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChzZWxwYWQpOwotICAgICAgb2xkdGFncyA9IHNlbHBhZC0+dGFnczsKLQotICAgICAgbmV3dGFncyA9IGdzdF90YWdfbGlzdF9tZXJnZSAob2xkdGFncywgdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgICAgIHNlbHBhZC0+dGFncyA9IG5ld3RhZ3M7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VscGFkKTsKLQotICAgICAgaWYgKG9sZHRhZ3MpCi0gICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAob2xkdGFncyk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJyZWNlaXZlZCB0YWdzICUiIEdTVF9QVFJfRk9STUFULCBuZXd0YWdzKTsKLQotICAgICAgbmV3X3RhZ3MgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIHNlbHBhZC0+ZW9zID0gVFJVRTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIEVPUyIpOwotICAgICAgaWYgKGdzdF9pbnB1dF9zZWxlY3Rvcl9hbGxfZW9zIChzZWwpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIkFsbCBzaW5rIHBhZCByZWNlaXZlZCBFT1MiKTsKLSAgICAgICAgc2VsLT5lb3MgPSBUUlVFOwotICAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfQlJPQURDQVNUIChzZWwpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X2lucHV0X3NlbGVjdG9yX2Vvc193YWl0IChzZWwsIHNlbHBhZCwgZXZlbnQpOwotICAgICAgICBmb3J3YXJkID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9HQVA6ewotICAgICAgR3N0Q2xvY2tUaW1lIHRzLCBkdXI7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlJlY2VpdmVkIGdhcCBldmVudDogJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50KTsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2dhcCAoZXZlbnQsICZ0cywgJmR1cik7Ci0gICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRzKSkgewotICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cikpCi0gICAgICAgICAgdHMgKz0gZHVyOwotCi0gICAgICAgIC8qIHVwZGF0ZSB0aGUgc2VnbWVudCBwb3NpdGlvbiAqLwotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgICAgIHNlbHBhZC0+c2VnbWVudC5wb3NpdGlvbiA9IHRzOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgICAgICAgaWYgKHNlbC0+c3luY19zdHJlYW1zICYmIGFjdGl2ZV9zaW5rcGFkID09IHBhZCkKLSAgICAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfQlJPQURDQVNUIChzZWwpOwotICAgICAgfQotCi0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX0dST1VQX0RPTkU6ewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsLCAiU3RyZWFtIGdyb3VwLWRvbmUgaW4gaW5wdXRzZWxlY3RvciBwYWQgJXMiLAotICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoc2VscGFkKSk7Ci0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2dyb3VwX2RvbmUgKGV2ZW50LCAmc2VscGFkLT5ncm91cF9pZCk7Ci0gICAgICBzZWxwYWQtPmdyb3VwX2RvbmUgPSBUUlVFOwotICAgICAgaWYgKHNlbC0+c3luY19zdHJlYW1zICYmIGFjdGl2ZV9zaW5rcGFkID09IHBhZCkKLSAgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLSAgaWYgKG5ld190YWdzKQotICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHNlbHBhZCksICJ0YWdzIik7Ci0gIGlmIChmb3J3YXJkKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZm9yd2FyZGluZyBldmVudCIpOwotICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsLT5zcmNwYWQsIGV2ZW50KTsKLSAgfSBlbHNlIHsKLSAgICAvKiBJZiB3ZSBhcmVuJ3QgZm9yd2FyZGluZyB0aGUgZXZlbnQgYmVjYXVzZSB0aGUgcGFkIGlzIG5vdCB0aGUKLSAgICAgKiBhY3RpdmVfc2lua3BhZCwgdGhlbiBzZXQgdGhlIGZsYWcgb24gdGhlIHBhZAotICAgICAqIHRoYXQgc2F5cyBhIHNlZ21lbnQgbmVlZHMgc2VuZGluZyBpZi93aGVuIHRoYXQgcGFkIGlzIGFjdGl2YXRlZC4KLSAgICAgKiBGb3IgYWxsIG90aGVyIGNhc2VzLCB3ZSBzZW5kIHRoZSBldmVudCBpbW1lZGlhdGVseSwgd2hpY2ggbWFrZXMKLSAgICAgKiBzcGFyc2Ugc3RyZWFtcyBhbmQgb3RoZXIgc2VnbWVudCB1cGRhdGVzIHdvcmsgY29ycmVjdGx5IGRvd25zdHJlYW0uCi0gICAgICovCi0gICAgaWYgKEdTVF9FVkVOVF9JU19TVElDS1kgKGV2ZW50KSkKLSAgICAgIHNlbHBhZC0+ZXZlbnRzX3BlbmRpbmcgPSBUUlVFOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2VsZWN0b3JfcGFkX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdElucHV0U2VsZWN0b3IgKnNlbGYgPSAoR3N0SW5wdXRTZWxlY3RvciAqKSBwYXJlbnQ7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICAgIC8qIGFsd2F5cyBwcm94eSBjYXBzIHF1ZXJ5LCByZWdhcmRsZXNzIG9mIGFjdGl2ZSBwYWQgb3Igbm90ICovCi0gICAgICByZXMgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHNlbGYtPnNyY3BhZCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVVFUllfQUxMT0NBVElPTjp7Ci0gICAgICBHc3RQYWQgKmFjdGl2ZV9zaW5rcGFkOwotICAgICAgR3N0SW5wdXRTZWxlY3RvciAqc2VsID0gR1NUX0lOUFVUX1NFTEVDVE9SIChwYXJlbnQpOwotCi0gICAgICAvKiBPbmx5IGRvIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5IGZvciB0aGUgYWN0aXZlIHNpbmtwYWQsCi0gICAgICAgKiBhZnRlciBzd2l0Y2hpbmcgYSByZWNvbmZpZ3VyZSBldmVudCBpcyBzZW50IGFuZCB1cHN0cmVhbQotICAgICAgICogc2hvdWxkIHJlY29uZmlndXJlIGFuZCBkbyBhIG5ldyBhbGxvY2F0aW9uIHF1ZXJ5Ci0gICAgICAgKi8KLSAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTiAocGFkKSA9PSBHU1RfUEFEX1NJTkspIHsKLSAgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7Ci0gICAgICAgIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9hY3RpdmVfc2lua3BhZCAoc2VsKTsKLSAgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLQotICAgICAgICBpZiAocGFkICE9IGFjdGl2ZV9zaW5rcGFkKSB7Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLWRvbmU6Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfY2xpcHBlZF9ydW5uaW5nX3RpbWUgKEdzdFNlZ21lbnQgKiBzZWcsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZTsKLQotICBydW5uaW5nX3RpbWUgPSBHU1RfQlVGRkVSX1BUUyAoYnVmKTsKLSAgLyogSWYgcG9zc2libGUgdHJ5IHRvIGdldCB0aGUgcnVubmluZyB0aW1lIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwotICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmKSkKLSAgICBydW5uaW5nX3RpbWUgKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKLSAgLyogT25seSB1c2UgdGhlIHNlZ21lbnQgdG8gY29udmVydCB0byBydW5uaW5nIHRpbWUgaWYgdGhlIHNlZ21lbnQgaXMKLSAgICogaW4gVElNRSBmb3JtYXQsIG90aGVyd2lzZSBkbyBvdXIgYmVzdCB0byB0cnkgdG8gc3luYyAqLwotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNlZy0+c3RvcCkpIHsKLSAgICBpZiAocnVubmluZ190aW1lID4gc2VnLT5zdG9wKSB7Ci0gICAgICBydW5uaW5nX3RpbWUgPSBzZWctPnN0b3A7Ci0gICAgfQotICB9Ci0gIHJldHVybiBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKHNlZywgR1NUX0ZPUk1BVF9USU1FLCBydW5uaW5nX3RpbWUpOwotfQotCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBTRUxFQ1RPUl9MT0NLLCB3aWxsIHdhaXQgdW50aWwgdGhlIHJ1bm5pbmcgdGltZQotICogb2YgdGhlIGFjdGl2ZSBwYWQgaXMgYWZ0ZXIgdGhpcyBwYWQgb3IgcmV0dXJuIFRSVUUgd2hlbiBmbHVzaGluZyAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfaW5wdXRfc2VsZWN0b3Jfd2FpdF9ydW5uaW5nX3RpbWUgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwsCi0gICAgR3N0U2VsZWN0b3JQYWQgKiBzZWxwYWQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0U2VnbWVudCAqc2VnOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbHBhZCwgImVudGVyaW5nIHdhaXQgZm9yIGJ1ZmZlciAlcCIsIGJ1Zik7Ci0KLSAgLyogSWYgd2UgaGF2ZSBubyB2YWxpZCB0aW1lc3RhbXAgd2UgY2FuJ3Qgc3luYyB0aGlzIGJ1ZmZlciAqLwotICBpZiAoIUdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEIChidWYpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLCAibGVhdmluZyB3YWl0IGZvciBidWZmZXIgd2l0aCAiCi0gICAgICAgICJpbnZhbGlkIHRpbWVzdGFtcCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHNlZyA9ICZzZWxwYWQtPnNlZ21lbnQ7Ci0KLSAgLyogV2FpdCB1bnRpbAotICAgKiAgIGEpIHRoaXMgaXMgdGhlIGFjdGl2ZSBwYWQKLSAgICogICBiKSB0aGUgcGFkIG9yIHRoZSBzZWxlY3RvciBpcyBmbHVzaGluZwotICAgKiAgIGMpIHRoZSBidWZmZXIgcnVubmluZyB0aW1lIGlzIGJlZm9yZSB0aGUgY3VycmVudCBydW5uaW5nIHRpbWUKLSAgICogICAgICAoZWl0aGVyIGFjdGl2ZS1zZWcgb3IgY2xvY2ssIGRlcGVuZGluZyBvbiBzeW5jLW1vZGUpCi0gICAqLwotCi0gIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOwotICB3aGlsZSAoVFJVRSkgewotICAgIEdzdFBhZCAqYWN0aXZlX3NpbmtwYWQ7Ci0gICAgR3N0U2VsZWN0b3JQYWQgKmFjdGl2ZV9zZWxwYWQ7Ci0gICAgR3N0Q2xvY2sgKmNsb2NrOwotICAgIGdpbnQ2NCBjdXJfcnVubmluZ190aW1lOwotICAgIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWU7Ci0KLSAgICBhY3RpdmVfc2lua3BhZCA9IGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfYWN0aXZlX3NpbmtwYWQgKHNlbCk7Ci0gICAgYWN0aXZlX3NlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAoYWN0aXZlX3NpbmtwYWQpOwotCi0gICAgaWYgKHNlZy0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLAotICAgICAgICAgICJOb3Qgd2FpdGluZyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBUSU1FIHNlZ21lbnQiKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgcnVubmluZ190aW1lID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9jbGlwcGVkX3J1bm5pbmdfdGltZSAoc2VnLCBidWYpOwotICAgIC8qIElmIHRoaXMgaXMgb3V0c2lkZSB0aGUgc2VnbWVudCBkb24ndCBzeW5jICovCi0gICAgaWYgKHJ1bm5pbmdfdGltZSA9PSAtMSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLAotICAgICAgICAgICJOb3Qgd2FpdGluZyBiZWNhdXNlIGJ1ZmZlciBpcyBvdXRzaWRlIHNlZ21lbnQiKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgY3VyX3J1bm5pbmdfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgaWYgKHNlbC0+c3luY19tb2RlID09IEdTVF9JTlBVVF9TRUxFQ1RPUl9TWU5DX01PREVfQ0xPQ0spIHsKLSAgICAgIGNsb2NrID0gZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChHU1RfRUxFTUVOVF9DQVNUIChzZWwpKTsKLSAgICAgIGlmIChjbG9jaykgewotICAgICAgICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lOwotCi0gICAgICAgIGN1cl9ydW5uaW5nX3RpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLSAgICAgICAgYmFzZV90aW1lID0gZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2VsKSk7Ci0gICAgICAgIGlmIChiYXNlX3RpbWUgPD0gY3VyX3J1bm5pbmdfdGltZSkKLSAgICAgICAgICBjdXJfcnVubmluZ190aW1lIC09IGJhc2VfdGltZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGN1cl9ydW5uaW5nX3RpbWUgPSAwOwotCi0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR3N0U2VnbWVudCAqYWN0aXZlX3NlZzsKLQotICAgICAgYWN0aXZlX3NlZyA9ICZhY3RpdmVfc2VscGFkLT5zZWdtZW50OwotCi0gICAgICAvKiBJZiB0aGUgYWN0aXZlIHNlZ21lbnQgaXMgY29uZmlndXJlZCBidXQgbm90IHRvIHRpbWUgZm9ybWF0Ci0gICAgICAgKiB3ZSBjYW4ndCBkbyBhbnkgc3luY2luZyBhdCBhbGwgKi8KLSAgICAgIGlmICgoYWN0aXZlX3NlZy0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRQotICAgICAgICAgICAgICAmJiBhY3RpdmVfc2VnLT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbHBhZCwKLSAgICAgICAgICAgICJOb3Qgd2FpdGluZyBiZWNhdXNlIGFjdGl2ZSBzZWdtZW50IGlzbid0IGluIFRJTUUgZm9ybWF0Iik7Ci0gICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLQotICAgICAgLyogR2V0IGFjdGl2ZSBwYWQncyBydW5uaW5nIHRpbWUsIGlmIG5vIGNvbmZpZ3VyZWQgc2VnbWVudCB5ZXQga2VlcCBhdCAtMSAqLwotICAgICAgaWYgKGFjdGl2ZV9zZWctPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCi0gICAgICAgIGN1cl9ydW5uaW5nX3RpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKGFjdGl2ZV9zZWcsCi0gICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIGFjdGl2ZV9zZWctPnBvc2l0aW9uKTsKLSAgICB9Ci0KLSAgICAvKiBEb24ndCB3YWl0IGlmIHRoZSBncm91cCBpcyBmaW5pc2hlZCBvbiB0aGUgYWN0aXZlIHBhZCwKLSAgICAgKiBhcyB0aGUgcnVubmluZyB0aW1lIHdvbid0IHByb2dyZXNzIG5vdyAqLwotICAgIGlmIChzZWxwYWQgIT0gYWN0aXZlX3NlbHBhZCAmJiBhY3RpdmVfc2VscGFkLT5ncm91cF9kb25lICYmCi0gICAgICAgIHNlbHBhZC0+Z3JvdXBfaWQgPT0gYWN0aXZlX3NlbHBhZC0+Z3JvdXBfaWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbHBhZCwgIkFjdGl2ZSBwYWQgcmVjZWl2ZWQgZ3JvdXAtZG9uZS4gVW5ibG9ja2luZyIpOwotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChzZWxwYWQgIT0gYWN0aXZlX3NlbHBhZCAmJiAhc2VsLT5lb3MgJiYgIXNlbC0+Zmx1c2hpbmcKLSAgICAgICAgJiYgIXNlbHBhZC0+Zmx1c2hpbmcgJiYgKGN1cl9ydW5uaW5nX3RpbWUgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORQotICAgICAgICAgICAgfHwgcnVubmluZ190aW1lID49IGN1cl9ydW5uaW5nX3RpbWUpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxwYWQsCi0gICAgICAgICAgIldhaXRpbmcgZm9yIGFjdGl2ZSBzdHJlYW1zIHRvIGFkdmFuY2UuICUiIEdTVF9USU1FX0ZPUk1BVCAiID49ICUiCi0gICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChydW5uaW5nX3RpbWUpLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGN1cl9ydW5uaW5nX3RpbWUpKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9XQUlUIChzZWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLyogUmV0dXJuIFRSVUUgaWYgdGhlIHNlbGVjdG9yIG9yIHRoZSBwYWQgaXMgZmx1c2hpbmcgKi8KLSAgcmV0dXJuIChzZWwtPmZsdXNoaW5nIHx8IHNlbHBhZC0+Zmx1c2hpbmcpOwotfQotCi0jaWYgREVCVUdfQ0FDSEVEX0JVRkZFUlMKLXN0YXRpYyB2b2lkCi1nc3RfaW5wdXRfc2VsZWN0b3JfZGVidWdfY2FjaGVkX2J1ZmZlcnMgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwpCi17Ci0gIEdMaXN0ICp3YWxrOwotCi0gIGlmIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoaW5wdXRfc2VsZWN0b3JfZGVidWcpIDwgR1NUX0xFVkVMX0RFQlVHKQotICAgIHJldHVybjsKLQotICBmb3IgKHdhbGsgPSBHU1RfRUxFTUVOVF9DQVNUIChzZWwpLT5zaW5rcGFkczsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICBHc3RTZWxlY3RvclBhZCAqc2VscGFkOwotICAgIEdTdHJpbmcgKnRpbWVzdGFtcHM7Ci0gICAgR0xpc3QgKmw7Ci0KLSAgICBzZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKHdhbGstPmRhdGEpOwotICAgIGlmICghc2VscGFkLT5jYWNoZWRfYnVmZmVycykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLCAiQ2FjaGVkIGJ1ZmZlcnMgdGltZXN0YW1wczogPG5vbmU+Iik7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICB0aW1lc3RhbXBzID0gZ19zdHJpbmdfbmV3ICgiQ2FjaGVkIGJ1ZmZlcnMgdGltZXN0YW1wczoiKTsKLSAgICBmb3IgKGwgPSBzZWxwYWQtPmNhY2hlZF9idWZmZXJzLT5oZWFkOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICBHc3RTZWxlY3RvclBhZENhY2hlZEJ1ZmZlciAqY2FjaGVkX2J1ZmZlciA9IGwtPmRhdGE7Ci0KLSAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHRpbWVzdGFtcHMsICIgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChjYWNoZWRfYnVmZmVyLT5idWZmZXIpKSk7Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbHBhZCwgIiVzIiwgdGltZXN0YW1wcy0+c3RyKTsKLSAgICBnX3N0cmluZ19mcmVlICh0aW1lc3RhbXBzLCBUUlVFKTsKLSAgfQotfQotI2VuZGlmCi0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFNFTEVDVE9SX0xPQ0sgKi8KLXN0YXRpYyB2b2lkCi1nc3RfaW5wdXRfc2VsZWN0b3JfY2xlYW51cF9vbGRfY2FjaGVkX2J1ZmZlcnMgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwsCi0gICAgR3N0UGFkICogcGFkKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIGdpbnQ2NCBjdXJfcnVubmluZ190aW1lOwotICBHTGlzdCAqd2FsazsKLQotICBjdXJfcnVubmluZ190aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgaWYgKHNlbC0+c3luY19tb2RlID09IEdTVF9JTlBVVF9TRUxFQ1RPUl9TWU5DX01PREVfQ0xPQ0spIHsKLSAgICBjbG9jayA9IGdzdF9lbGVtZW50X2dldF9jbG9jayAoR1NUX0VMRU1FTlRfQ0FTVCAoc2VsKSk7Ci0gICAgaWYgKGNsb2NrKSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lOwotCi0gICAgICBjdXJfcnVubmluZ190aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0gICAgICBiYXNlX3RpbWUgPSBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lIChHU1RfRUxFTUVOVF9DQVNUIChzZWwpKTsKLSAgICAgIGlmIChiYXNlX3RpbWUgPD0gY3VyX3J1bm5pbmdfdGltZSkKLSAgICAgICAgY3VyX3J1bm5pbmdfdGltZSAtPSBiYXNlX3RpbWU7Ci0gICAgICBlbHNlCi0gICAgICAgIGN1cl9ydW5uaW5nX3RpbWUgPSAwOwotCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdzdFBhZCAqYWN0aXZlX3NpbmtwYWQ7Ci0gICAgR3N0U2VsZWN0b3JQYWQgKmFjdGl2ZV9zZWxwYWQ7Ci0gICAgR3N0U2VnbWVudCAqYWN0aXZlX3NlZzsKLQotICAgIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9hY3RpdmVfc2lua3BhZCAoc2VsKTsKLSAgICBhY3RpdmVfc2VscGFkID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChhY3RpdmVfc2lua3BhZCk7Ci0gICAgYWN0aXZlX3NlZyA9ICZhY3RpdmVfc2VscGFkLT5zZWdtZW50OwotCi0gICAgLyogR2V0IGFjdGl2ZSBwYWQncyBydW5uaW5nIHRpbWUsIGlmIG5vIGNvbmZpZ3VyZWQgc2VnbWVudCB5ZXQga2VlcCBhdCAtMSAqLwotICAgIGlmIChhY3RpdmVfc2VnLT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQotICAgICAgY3VyX3J1bm5pbmdfdGltZSA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoYWN0aXZlX3NlZywKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIGFjdGl2ZV9zZWctPnBvc2l0aW9uKTsKLSAgfQotCi0gIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGN1cl9ydW5uaW5nX3RpbWUpKQotICAgIHJldHVybjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWwsICJDbGVhbmluZyB1cCBvbGQgY2FjaGVkIGJ1ZmZlcnMiKTsKLSAgZm9yICh3YWxrID0gR1NUX0VMRU1FTlRfQ0FTVCAoc2VsKS0+c2lua3BhZHM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RTZWxlY3RvclBhZCAqc2VscGFkOwotICAgIEdzdFNlZ21lbnQgKnNlZzsKLSAgICBHc3RTZWxlY3RvclBhZENhY2hlZEJ1ZmZlciAqY2FjaGVkX2J1ZmZlcjsKLSAgICBHU0xpc3QgKm1heWJlX3JlbW92ZTsKLSAgICBndWludCBxdWV1ZV9wb3NpdGlvbjsKLQotICAgIHNlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAod2Fsay0+ZGF0YSk7Ci0gICAgaWYgKCFzZWxwYWQtPmNhY2hlZF9idWZmZXJzKQotICAgICAgY29udGludWU7Ci0KLSAgICBzZWcgPSAmc2VscGFkLT5zZWdtZW50OwotCi0gICAgbWF5YmVfcmVtb3ZlID0gTlVMTDsKLSAgICBxdWV1ZV9wb3NpdGlvbiA9IDA7Ci0gICAgd2hpbGUgKChjYWNoZWRfYnVmZmVyID0gZ19xdWV1ZV9wZWVrX250aCAoc2VscGFkLT5jYWNoZWRfYnVmZmVycywKLSAgICAgICAgICAgICAgICBxdWV1ZV9wb3NpdGlvbikpKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGNhY2hlZF9idWZmZXItPmJ1ZmZlcjsKLSAgICAgIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWU7Ci0gICAgICBHU0xpc3QgKmw7Ci0KLSAgICAgIC8qIElmIHdlIGhhdmUgbm8gdmFsaWQgdGltZXN0YW1wIHdlIGNhbid0IHN5bmMgdGhpcyBidWZmZXIgKi8KLSAgICAgIGlmICghR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGJ1ZmZlcikpIHsKLSAgICAgICAgbWF5YmVfcmVtb3ZlID0gZ19zbGlzdF9hcHBlbmQgKG1heWJlX3JlbW92ZSwgY2FjaGVkX2J1ZmZlcik7Ci0gICAgICAgIHF1ZXVlX3Bvc2l0aW9uID0gZ19zbGlzdF9sZW5ndGggKG1heWJlX3JlbW92ZSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvKiB0aGUgYnVmZmVyIGlzIHN0aWxsIHZhbGlkIGlmIGl0cyBkdXJhdGlvbiBpcyB2YWxpZCBhbmQgdGhlCi0gICAgICAgKiB0aW1lc3RhbXAgKyBkdXJhdGlvbiBpcyA+PSB0aW1lLCBvciBpZiBpdHMgZHVyYXRpb24gaXMgaW52YWxpZAotICAgICAgICogYW5kIHRoZSB0aW1lc3RhbXAgaXMgPj0gdGltZSAqLwotICAgICAgcnVubmluZ190aW1lID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9jbGlwcGVkX3J1bm5pbmdfdGltZSAoc2VnLCBidWZmZXIpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLAotICAgICAgICAgICJjaGVja2luZyBpZiBidWZmZXIgJXAgcnVubmluZyB0aW1lPSUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICIgPj0gc3RyZWFtIHRpbWU9JSIgR1NUX1RJTUVfRk9STUFULCBidWZmZXIsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAocnVubmluZ190aW1lKSwgR1NUX1RJTUVfQVJHUyAoY3VyX3J1bm5pbmdfdGltZSkpOwotICAgICAgaWYgKHJ1bm5pbmdfdGltZSA+PSBjdXJfcnVubmluZ190aW1lKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxwYWQsICJSZW1vdmluZyBvbGQgY2FjaGVkIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7Ci0gICAgICBnX3F1ZXVlX3BvcF9udGggKHNlbHBhZC0+Y2FjaGVkX2J1ZmZlcnMsIHF1ZXVlX3Bvc2l0aW9uKTsKLSAgICAgIGdzdF9zZWxlY3Rvcl9wYWRfZnJlZV9jYWNoZWRfYnVmZmVyIChjYWNoZWRfYnVmZmVyKTsKLQotICAgICAgZm9yIChsID0gbWF5YmVfcmVtb3ZlOyBsICE9IE5VTEw7IGwgPSBnX3NsaXN0X25leHQgKGwpKSB7Ci0gICAgICAgIC8qIEEgYnVmZmVyIGFmdGVyIHNvbWUgaW52YWxpZCBidWZmZXJzIHdhcyByZW1vdmVkLCBpdCBtZWFucyB0aGUgaW52YWxpZCBidWZmZXJzCi0gICAgICAgICAqIGFyZSBvbGQsIGxldHMgYWxzbyByZW1vdmUgdGhlbSAqLwotICAgICAgICBjYWNoZWRfYnVmZmVyID0gbC0+ZGF0YTsKLSAgICAgICAgZ19xdWV1ZV9yZW1vdmUgKHNlbHBhZC0+Y2FjaGVkX2J1ZmZlcnMsIGNhY2hlZF9idWZmZXIpOwotICAgICAgICBnc3Rfc2VsZWN0b3JfcGFkX2ZyZWVfY2FjaGVkX2J1ZmZlciAoY2FjaGVkX2J1ZmZlcik7Ci0gICAgICB9Ci0KLSAgICAgIGdfc2xpc3RfZnJlZSAobWF5YmVfcmVtb3ZlKTsKLSAgICAgIG1heWJlX3JlbW92ZSA9IE5VTEw7Ci0gICAgICBxdWV1ZV9wb3NpdGlvbiA9IDA7Ci0gICAgfQotCi0gICAgZ19zbGlzdF9mcmVlIChtYXliZV9yZW1vdmUpOwotICAgIG1heWJlX3JlbW92ZSA9IE5VTEw7Ci0KLSAgICBpZiAoZ19xdWV1ZV9pc19lbXB0eSAoc2VscGFkLT5jYWNoZWRfYnVmZmVycykpIHsKLSAgICAgIGdfcXVldWVfZnJlZSAoc2VscGFkLT5jYWNoZWRfYnVmZmVycyk7Ci0gICAgICBzZWxwYWQtPmNhY2hlZF9idWZmZXJzID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotI2lmIERFQlVHX0NBQ0hFRF9CVUZGRVJTCi0gIGdzdF9pbnB1dF9zZWxlY3Rvcl9kZWJ1Z19jYWNoZWRfYnVmZmVycyAoc2VsKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NlbGVjdG9yX3BhZF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0SW5wdXRTZWxlY3RvciAqc2VsOwotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0UGFkICphY3RpdmVfc2lua3BhZDsKLSAgR3N0UGFkICpwcmV2X2FjdGl2ZV9zaW5rcGFkID0gTlVMTDsKLSAgR3N0U2VsZWN0b3JQYWQgKnNlbHBhZDsKLQotICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKHBhcmVudCk7Ci0gIHNlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAocGFkKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxwYWQsCi0gICAgICAiZW50ZXJpbmcgY2hhaW4gZm9yIGJ1ZiAlcCB3aXRoIHRpbWVzdGFtcCAlIiBHU1RfVElNRV9GT1JNQVQsIGJ1ZiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChidWYpKSk7Ci0KLSAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7Ci0KLSAgaWYgKHNlbC0+Zmx1c2hpbmcpIHsKLSAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOwotICAgIGdvdG8gZmx1c2hpbmc7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiZ2V0dGluZyBhY3RpdmUgcGFkIik7Ci0KLSAgcHJldl9hY3RpdmVfc2lua3BhZCA9Ci0gICAgICBzZWwtPmFjdGl2ZV9zaW5rcGFkID8gZ3N0X29iamVjdF9yZWYgKHNlbC0+YWN0aXZlX3NpbmtwYWQpIDogTlVMTDsKLSAgYWN0aXZlX3NpbmtwYWQgPSBnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X2FjdGl2ZV9zaW5rcGFkIChzZWwpOwotCi0gIC8qIEluIHN5bmMgbW9kZSB3YWl0IHVudGlsIHRoZSBhY3RpdmUgcGFkIGhhcyBhZHZhbmNlZAotICAgKiBhZnRlciB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICBpZiAoc2VsLT5zeW5jX3N0cmVhbXMpIHsKLSAgICAvKiBjYWxsIGNoYWluIGZvciBlYWNoIGNhY2hlZCBidWZmZXIgaWYgd2UgYXJlIG5vdCB0aGUgYWN0aXZlIHBhZAotICAgICAqIG9yIGlmIHdlIGFyZSB0aGUgYWN0aXZlIHBhZCBidXQgZGlkbid0IHB1c2ggYW55dGhpbmcgeWV0LiAqLwotICAgIGlmIChhY3RpdmVfc2lua3BhZCAhPSBwYWQgfHwgIXNlbHBhZC0+cHVzaGVkKSB7Ci0gICAgICAvKiBubyBuZWVkIHRvIGNoZWNrIGZvciBzZWwtPmNhY2hlX2J1ZmZlcnMgYXMgc2VscGFkLT5jYWNoZWRfYnVmZmVycwotICAgICAgICogd2lsbCBvbmx5IGJlIHZhbGlkIGlmIGNhY2hlX2J1ZmZlcnMgaXMgVFJVRSAqLwotICAgICAgaWYgKHNlbHBhZC0+Y2FjaGVkX2J1ZmZlcnMgJiYgIXNlbHBhZC0+c2VuZGluZ19jYWNoZWRfYnVmZmVycykgewotICAgICAgICBHc3RTZWxlY3RvclBhZENhY2hlZEJ1ZmZlciAqY2FjaGVkX2J1ZmZlcjsKLSAgICAgICAgR3N0U2VnbWVudCBzYXZlZF9zZWdtZW50OwotCi0gICAgICAgIHNhdmVkX3NlZ21lbnQgPSBzZWxwYWQtPnNlZ21lbnQ7Ci0KLSAgICAgICAgc2VscGFkLT5zZW5kaW5nX2NhY2hlZF9idWZmZXJzID0gVFJVRTsKLSAgICAgICAgd2hpbGUgKCFzZWwtPmVvcyAmJiAhc2VsLT5mbHVzaGluZyAmJiAhc2VscGFkLT5mbHVzaGluZyAmJgotICAgICAgICAgICAgKGNhY2hlZF9idWZmZXIgPSBnX3F1ZXVlX3BvcF9oZWFkIChzZWxwYWQtPmNhY2hlZF9idWZmZXJzKSkpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJDYWNoZWQgYnVmZmVycyBmb3VuZCwgIgotICAgICAgICAgICAgICAiaW52b2tpbmcgY2hhaW4gZm9yIGNhY2hlZCBidWZmZXIgJXAiLCBjYWNoZWRfYnVmZmVyLT5idWZmZXIpOwotCi0gICAgICAgICAgc2VscGFkLT5zZWdtZW50ID0gY2FjaGVkX2J1ZmZlci0+c2VnbWVudDsKLSAgICAgICAgICBzZWxwYWQtPmV2ZW50c19wZW5kaW5nID0gVFJVRTsKLSAgICAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOwotICAgICAgICAgIGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4gKHBhZCwgcGFyZW50LCBjYWNoZWRfYnVmZmVyLT5idWZmZXIpOwotICAgICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOwotCi0gICAgICAgICAgLyogV2UganVzdCBwYXNzZWQgdGhlIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyIHRvIHRoZSBjaGFpbiBmdW5jdGlvbiAqLwotICAgICAgICAgIGNhY2hlZF9idWZmZXItPmJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgZ3N0X3NlbGVjdG9yX3BhZF9mcmVlX2NhY2hlZF9idWZmZXIgKGNhY2hlZF9idWZmZXIpOwotCi0gICAgICAgICAgLyogd2UgbWF5IGhhdmUgY2xlYW5lZCB1cCB0aGUgcXVldWUgaW4gdGhlIG1lYW50aW1lIGJlY2F1c2Ugb2YKLSAgICAgICAgICAgKiBvbGQgYnVmZmVycyAqLwotICAgICAgICAgIGlmICghc2VscGFkLT5jYWNoZWRfYnVmZmVycykgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNlbHBhZC0+c2VuZGluZ19jYWNoZWRfYnVmZmVycyA9IEZBTFNFOwotCi0gICAgICAgIC8qIGFsbCBjYWNoZWQgYnVmZmVycyBzZW50LCByZXN0b3JlIHNlZ21lbnQgZm9yIGN1cnJlbnQgYnVmZmVyICovCi0gICAgICAgIHNlbHBhZC0+c2VnbWVudCA9IHNhdmVkX3NlZ21lbnQ7Ci0gICAgICAgIHNlbHBhZC0+ZXZlbnRzX3BlbmRpbmcgPSBUUlVFOwotCi0gICAgICAgIC8qIE1pZ2h0IGhhdmUgY2hhbmdlZCB3aGlsZSBjYWxsaW5nIGNoYWluIGZvciBjYWNoZWQgYnVmZmVycyAqLwotICAgICAgICBhY3RpdmVfc2lua3BhZCA9IGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfYWN0aXZlX3NpbmtwYWQgKHNlbCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFjdGl2ZV9zaW5rcGFkICE9IHBhZCkgewotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLSAgICAgIGlmIChnc3RfaW5wdXRfc2VsZWN0b3Jfd2FpdF9ydW5uaW5nX3RpbWUgKHNlbCwgc2VscGFkLCBidWYpKQotICAgICAgICBnb3RvIGZsdXNoaW5nOwotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7Ci0gICAgfQotCi0gICAgLyogTWlnaHQgaGF2ZSBjaGFuZ2VkIHdoaWxlIHdhaXRpbmcgKi8KLSAgICBhY3RpdmVfc2lua3BhZCA9IGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfYWN0aXZlX3NpbmtwYWQgKHNlbCk7Ci0gIH0KLQotICAvKiB1cGRhdGUgdGhlIHNlZ21lbnQgb24gdGhlIHNyY3BhZCAqLwotICBpZiAoR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGJ1ZikpIHsKLSAgICBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSA9IEdTVF9CVUZGRVJfUFRTIChidWYpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIHN0YXJ0IHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChzdGFydF90aW1lKSk7Ci0gICAgaWYgKEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZikpCi0gICAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAicmVjZWl2ZWQgZW5kIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHN0YXJ0X3RpbWUgKyBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSk7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhZCk7Ci0gICAgc2VscGFkLT5zZWdtZW50LnBvc2l0aW9uID0gc3RhcnRfdGltZTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLSAgfQotCi0gIC8qIElnbm9yZSBidWZmZXJzIGZyb20gcGFkcyBleGNlcHQgdGhlIHNlbGVjdGVkIG9uZSAqLwotICBpZiAocGFkICE9IGFjdGl2ZV9zaW5rcGFkKQotICAgIGdvdG8gaWdub3JlOwotCi0gIC8qIFRlbGwgYWxsIG5vbi1hY3RpdmUgcGFkcyB0aGF0IHdlIGFkdmFuY2VkIHRoZSBydW5uaW5nIHRpbWUgKi8KLSAgaWYgKHNlbC0+c3luY19zdHJlYW1zKQotICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbCk7Ci0KLSAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLQotICBpZiAocHJldl9hY3RpdmVfc2lua3BhZCAhPSBhY3RpdmVfc2lua3BhZCkgewotICAgIGlmIChwcmV2X2FjdGl2ZV9zaW5rcGFkKQotICAgICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAocHJldl9hY3RpdmVfc2lua3BhZCksICJhY3RpdmUiKTsKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChhY3RpdmVfc2lua3BhZCksICJhY3RpdmUiKTsKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChzZWwpLCAiYWN0aXZlLXBhZCIpOwotICB9Ci0KLSAgLyogaWYgd2UgaGF2ZSBhIHBlbmRpbmcgZXZlbnRzLCBwdXNoIHRoZW0gbm93ICovCi0gIGlmIChHX1VOTElLRUxZIChwcmV2X2FjdGl2ZV9zaW5rcGFkICE9IGFjdGl2ZV9zaW5rcGFkCi0gICAgICAgICAgfHwgc2VscGFkLT5ldmVudHNfcGVuZGluZykpIHsKLSAgICBnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAoR1NUX1BBRF9DQVNUIChzZWxwYWQpLCBmb3J3YXJkX3N0aWNreV9ldmVudHMsCi0gICAgICAgIHNlbCk7Ci0gICAgc2VscGFkLT5ldmVudHNfcGVuZGluZyA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKHByZXZfYWN0aXZlX3NpbmtwYWQpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwcmV2X2FjdGl2ZV9zaW5rcGFkKTsKLSAgICBwcmV2X2FjdGl2ZV9zaW5rcGFkID0gTlVMTDsKLSAgfQotCi0gIGlmIChzZWxwYWQtPmRpc2NvbnQpIHsKLSAgICBidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJNYXJraW5nIGRpc2NvbnQgYnVmZmVyICVwIiwgYnVmKTsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICBzZWxwYWQtPmRpc2NvbnQgPSBGQUxTRTsKLSAgfQotCi0gIC8qIGZvcndhcmQgKi8KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkZvcndhcmRpbmcgYnVmZmVyICVwIHdpdGggdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIGJ1ZiwgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKGJ1ZikpKTsKLQotICAvKiBPbmx5IG1ha2UgdGhlIGJ1ZmZlciByZWFkLW9ubHkgd2hlbiBuZWNlc3NhcnkgKi8KLSAgaWYgKHNlbC0+c3luY19zdHJlYW1zICYmIHNlbC0+Y2FjaGVfYnVmZmVycykKLSAgICBidWYgPSBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKLSAgcmVzID0gZ3N0X3BhZF9wdXNoIChzZWwtPnNyY3BhZCwgYnVmKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkJ1ZmZlciAlcCBmb3J3YXJkZWQgcmVzdWx0PSVkIiwgYnVmLCByZXMpOwotCi0gIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOwotCi0gIGlmIChzZWwtPnN5bmNfc3RyZWFtcyAmJiBzZWwtPmNhY2hlX2J1ZmZlcnMpIHsKLSAgICAvKiBNaWdodCBoYXZlIGNoYW5nZWQgd2hpbGUgcHVzaGluZyAqLwotICAgIGFjdGl2ZV9zaW5rcGFkID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9hY3RpdmVfc2lua3BhZCAoc2VsKTsKLSAgICAvKiBvbmx5IHNldCBwYWQgdG8gcHVzaGVkIGlmIHdlIGFyZSBzdGlsbCB0aGUgYWN0aXZlIHBhZCAqLwotICAgIGlmIChhY3RpdmVfc2lua3BhZCA9PSBwYWQpCi0gICAgICBzZWxwYWQtPnB1c2hlZCA9IFRSVUU7Ci0KLSAgICAvKiBjYWNoZSBidWZmZXIgYXMgd2UgbWF5IG5lZWQgaXQgYWdhaW4gaWYgd2UgY2hhbmdlIHBhZHMgKi8KLSAgICBnc3Rfc2VsZWN0b3JfcGFkX2NhY2hlX2J1ZmZlciAoc2VscGFkLCBidWYpOwotICAgIGdzdF9pbnB1dF9zZWxlY3Rvcl9jbGVhbnVwX29sZF9jYWNoZWRfYnVmZmVycyAoc2VsLCBwYWQpOwotICB9IGVsc2UgewotICAgIHNlbHBhZC0+cHVzaGVkID0gVFJVRTsKLSAgfQotICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOwotCi1kb25lOgotCi0gIGlmIChwcmV2X2FjdGl2ZV9zaW5rcGFkKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHByZXZfYWN0aXZlX3NpbmtwYWQpOwotICBwcmV2X2FjdGl2ZV9zaW5rcGFkID0gTlVMTDsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIGRyb3BwZWQgYnVmZmVycyAqLwotaWdub3JlOgotICB7Ci0gICAgZ2Jvb2xlYW4gYWN0aXZlX3BhZF9wdXNoZWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKGFjdGl2ZV9zaW5rcGFkKS0+cHVzaGVkOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiUGFkIG5vdCBhY3RpdmUsIGRpc2NhcmQgYnVmZmVyICVwIiwgYnVmKTsKLSAgICAvKiB3aGVuIHdlIGRyb3AgYSBidWZmZXIsIHdlJ3JlIGNyZWF0aW5nIGEgZGlzY29udCBvbiB0aGlzIHBhZCAqLwotICAgIHNlbHBhZC0+ZGlzY29udCA9IFRSVUU7Ci0gICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gICAgLyogZmlndXJlIG91dCB3aGF0IHRvIHJldHVybiB1cHN0cmVhbSAqLwotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VscGFkKTsKLSAgICBpZiAoc2VscGFkLT5hbHdheXNfb2sgfHwgIWFjdGl2ZV9wYWRfcHVzaGVkKQotICAgICAgcmVzID0gR1NUX0ZMT1dfT0s7Ci0gICAgZWxzZQotICAgICAgcmVzID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VscGFkKTsKLQotICAgIGdvdG8gZG9uZTsKLSAgfQotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJXZSBhcmUgZmx1c2hpbmcsIGRpc2NhcmQgYnVmZmVyICVwIiwgYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJlcyA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBnc3RfaW5wdXRfc2VsZWN0b3JfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfaW5wdXRfc2VsZWN0b3JfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdFBhZCAqZ3N0X2lucHV0X3NlbGVjdG9yX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiB1bnVzZWQsIGNvbnN0IEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyB2b2lkIGdzdF9pbnB1dF9zZWxlY3Rvcl9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfaW5wdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9pbnB1dF9zZWxlY3Rvcl9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChpbnB1dF9zZWxlY3Rvcl9kZWJ1ZywgXAotICAgICAgICAiaW5wdXQtc2VsZWN0b3IiLCAwLCAiQW4gaW5wdXQgc3RyZWFtIHNlbGVjdG9yIGVsZW1lbnQiKTsKLSNkZWZpbmUgZ3N0X2lucHV0X3NlbGVjdG9yX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RJbnB1dFNlbGVjdG9yLCBnc3RfaW5wdXRfc2VsZWN0b3IsIEdTVF9UWVBFX0VMRU1FTlQsCi0gICAgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2lucHV0X3NlbGVjdG9yX2NsYXNzX2luaXQgKEdzdElucHV0U2VsZWN0b3JDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfaW5wdXRfc2VsZWN0b3JfZGlzcG9zZTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfaW5wdXRfc2VsZWN0b3JfZmluYWxpemU7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05fUEFEUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibi1wYWRzIiwgIk51bWJlciBvZiBQYWRzIiwKLSAgICAgICAgICAiVGhlIG51bWJlciBvZiBzaW5rIHBhZHMiLCAwLCBHX01BWFVJTlQsIDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FDVElWRV9QQUQsCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiYWN0aXZlLXBhZCIsICJBY3RpdmUgcGFkIiwKLSAgICAgICAgICAiVGhlIGN1cnJlbnRseSBhY3RpdmUgc2luayBwYWQiLCBHU1RfVFlQRV9QQUQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdElucHV0U2VsZWN0b3I6c3luYy1zdHJlYW1zCi0gICAqCi0gICAqIElmIHNldCB0byAlVFJVRSBhbGwgaW5hY3RpdmUgc3RyZWFtcyB3aWxsIGJlIHN5bmNlZCB0byB0aGUKLSAgICogcnVubmluZyB0aW1lIG9mIHRoZSBhY3RpdmUgc3RyZWFtIG9yIHRvIHRoZSBjdXJyZW50IGNsb2NrLgotICAgKgotICAgKiBUbyBtYWtlIHN1cmUgbm8gYnVmZmVycyBhcmUgZHJvcHBlZCBieSBpbnB1dC1zZWxlY3RvcgotICAgKiB0aGF0IG1pZ2h0IGJlIG5lZWRlZCB3aGVuIHN3aXRjaGluZyB0aGUgYWN0aXZlIHBhZCwKLSAgICogc3luYy1tb2RlIHNob3VsZCBiZSBzZXQgdG8gImNsb2NrIiBhbmQgY2FjaGUtYnVmZmVycyB0byBUUlVFLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TWU5DX1NUUkVBTVMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMtc3RyZWFtcyIsICJTeW5jIFN0cmVhbXMiLAotICAgICAgICAgICJTeW5jaHJvbml6ZSBpbmFjdGl2ZSBzdHJlYW1zIHRvIHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlIGFjdGl2ZSAiCi0gICAgICAgICAgInN0cmVhbSBvciB0byB0aGUgY3VycmVudCBjbG9jayIsCi0gICAgICAgICAgREVGQVVMVF9TWU5DX1NUUkVBTVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwKLSAgICAgICAgICBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSkpOwotCi0gIC8qKgotICAgKiBHc3RJbnB1dFNlbGVjdG9yOnN5bmMtbW9kZQotICAgKgotICAgKiBTZWxlY3QgaG93IGlucHV0LXNlbGVjdG9yIHdpbGwgc3luYyBidWZmZXJzIHdoZW4gaW4gc3luYy1zdHJlYW1zIG1vZGUuCi0gICAqCi0gICAqIE5vdGUgdGhhdCB3aGVuIHVzaW5nIHRoZSAiYWN0aXZlLXNlZ21lbnQiIG1vZGUsIHRoZSAiYWN0aXZlLXNlZ21lbnQiIG1heQotICAgKiBiZSBhaGVhZCBvZiBjdXJyZW50IGNsb2NrIHRpbWUgd2hlbiBzd2l0Y2hpbmcgdGhlIGFjdGl2ZSBwYWQsIGFzIHRoZSBjdXJyZW50Ci0gICAqIGFjdGl2ZSBwYWQgbWF5IGhhdmUgcHVzaGVkIG1vcmUgYnVmZmVycyB0aGFuIHdoYXQgd2FzIGRpc3BsYXllZC9jb25zdW1lZCwKLSAgICogd2hpY2ggbWF5IGNhdXNlIGRlbGF5cyBhbmQgc29tZSBtaXNzaW5nIGJ1ZmZlcnMuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NZTkNfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgic3luYy1tb2RlIiwgIlN5bmMgbW9kZSIsCi0gICAgICAgICAgIkJlaGF2aW9yIGluIHN5bmMtc3RyZWFtcyBtb2RlIiwgR1NUX1RZUEVfSU5QVVRfU0VMRUNUT1JfU1lOQ19NT0RFLAotICAgICAgICAgIERFRkFVTFRfU1lOQ19NT0RFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8Ci0gICAgICAgICAgR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkpKTsKLQotICAvKioKLSAgICogR3N0SW5wdXRTZWxlY3RvcjpjYWNoZS1idWZmZXJzCi0gICAqCi0gICAqIElmIHNldCB0byAlVFJVRSBhbmQgR3N0SW5wdXRTZWxlY3RvcjpzeW5jLXN0cmVhbXMgaXMgYWxzbyBzZXQgdG8gJVRSVUUsCi0gICAqIHRoZSBhY3RpdmUgcGFkIHdpbGwgY2FjaGUgdGhlIGJ1ZmZlcnMgc3RpbGwgY29uc2lkZXJlZCB2YWxpZCAoYWZ0ZXIgY3VycmVudAotICAgKiBydW5uaW5nIHRpbWUsIHNlZSBzeW5jLW1vZGUpIHRvIGF2b2lkIG1pc3NpbmcgZnJhbWVzIGlmL3doZW4gdGhlIHBhZCBpcwotICAgKiByZWFjdGl2YXRlZC4KLSAgICoKLSAgICogVGhlIGFjdGl2ZSBwYWQgbWF5IHB1c2ggbW9yZSBidWZmZXJzIHRoYW4gd2hhdCBpcyBjdXJyZW50bHkgZGlzcGxheWVkL2NvbnN1bWVkCi0gICAqIGFuZCB3aGVuIGNoYW5naW5nIHBhZHMgdGhvc2UgYnVmZmVycyB3aWxsIGJlIGRpc2NhcmRlZCBhbmQgdGhlIG9ubHkgd2F5IHRvCi0gICAqIHJlYWN0aXZhdGUgdGhhdCBwYWQgd2l0aG91dCBsb29zaW5nIHRoZSBhbHJlYWR5IGNvbnN1bWVkIGJ1ZmZlcnMgaXMgdG8gZW5hYmxlIGNhY2hlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQUNIRV9CVUZGRVJTLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjYWNoZS1idWZmZXJzIiwgIkNhY2hlIEJ1ZmZlcnMiLAotICAgICAgICAgICJDYWNoZSBidWZmZXJzIGZvciBhY3RpdmUtcGFkIiwKLSAgICAgICAgICBERUZBVUxUX0NBQ0hFX0JVRkZFUlMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwKLSAgICAgICAgICBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJJbnB1dCBzZWxlY3RvciIsCi0gICAgICAiR2VuZXJpYyIsICJOLXRvLTEgaW5wdXQgc3RyZWFtIHNlbGVjdG9yIiwKLSAgICAgICJKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4sICIKLSAgICAgICJKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4sICIKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfaW5wdXRfc2VsZWN0b3Jfc2lua19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2lucHV0X3NlbGVjdG9yX3NyY19mYWN0b3J5KTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPSBnc3RfaW5wdXRfc2VsZWN0b3JfcmVxdWVzdF9uZXdfcGFkOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9IGdzdF9pbnB1dF9zZWxlY3Rvcl9yZWxlYXNlX3BhZDsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X2lucHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbnB1dF9zZWxlY3Rvcl9pbml0IChHc3RJbnB1dFNlbGVjdG9yICogc2VsKQotewotICBzZWwtPnNyY3BhZCA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChzZWwtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2VsZWN0b3JfcGFkX2l0ZXJhdGVfbGlua2VkX3BhZHMpKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbC0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pbnB1dF9zZWxlY3Rvcl9ldmVudCkpOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzZWwtPnNyY3BhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0NBUFMpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsKSwgc2VsLT5zcmNwYWQpOwotICAvKiBzaW5rcGFkIG1hbmFnZW1lbnQgKi8KLSAgc2VsLT5hY3RpdmVfc2lua3BhZCA9IE5VTEw7Ci0gIHNlbC0+cGFkY291bnQgPSAwOwotICBzZWwtPnN5bmNfc3RyZWFtcyA9IERFRkFVTFRfU1lOQ19TVFJFQU1TOwotICBzZWwtPnN5bmNfbW9kZSA9IERFRkFVTFRfU1lOQ19NT0RFOwotICBzZWwtPmhhdmVfZ3JvdXBfaWQgPSBUUlVFOwotCi0gIGdfbXV0ZXhfaW5pdCAoJnNlbC0+bG9jayk7Ci0gIGdfY29uZF9pbml0ICgmc2VsLT5jb25kKTsKLSAgc2VsLT5lb3MgPSBGQUxTRTsKLQotICAvKiBsZXRzIGdpdmUgYSBjaGFuZ2UgZm9yIGRvd25zdHJlYW0gdG8gZG8gc29tZXRoaW5nIG9uCi0gICAqIGFjdGl2ZS1wYWQgY2hhbmdlIGJlZm9yZSB3ZSBzdGFydCBwdXNoaW5nIG5ldyBidWZmZXJzICovCi0gIGdfc2lnbmFsX2Nvbm5lY3RfZGF0YSAoc2VsLCAibm90aWZ5OjphY3RpdmUtcGFkIiwKLSAgICAgIChHQ2FsbGJhY2spIGdzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmVfcGFkX2NoYW5nZWQsIE5VTEwsCi0gICAgICBOVUxMLCBHX0NPTk5FQ1RfQUZURVIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lucHV0X3NlbGVjdG9yX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdElucHV0U2VsZWN0b3IgKnNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAob2JqZWN0KTsKLQotICBpZiAoc2VsLT5hY3RpdmVfc2lua3BhZCkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlbC0+YWN0aXZlX3NpbmtwYWQpOwotICAgIHNlbC0+YWN0aXZlX3NpbmtwYWQgPSBOVUxMOwotICB9Ci0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lucHV0X3NlbGVjdG9yX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RJbnB1dFNlbGVjdG9yICpzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJnNlbC0+bG9jayk7Ci0gIGdfY29uZF9jbGVhciAoJnNlbC0+Y29uZCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFNFTEVDVE9SX0xPQ0suIEl0IHJldHVybnMgVFJVRSB3aGVuIHRoZQotICogYWN0aXZlIHBhZCBjaGFuZ2VkLiAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWxmLCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFNlbGVjdG9yUGFkICpvbGQsICpuZXc7Ci0gIEdzdFBhZCAqKmFjdGl2ZV9wYWRfcDsKLQotICBpZiAocGFkID09IHNlbGYtPmFjdGl2ZV9zaW5rcGFkKQotICAgIHJldHVybiBGQUxTRTsKLQotICBvbGQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKHNlbGYtPmFjdGl2ZV9zaW5rcGFkKTsKLSAgbmV3ID0gR1NUX1NFTEVDVE9SX1BBRF9DQVNUIChwYWQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzZXR0aW5nIGFjdGl2ZSBwYWQgdG8gJXM6JXMiLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChuZXcpKTsKLQotICBpZiAob2xkKQotICAgIG9sZC0+cHVzaGVkID0gRkFMU0U7Ci0gIGlmIChuZXcpCi0gICAgbmV3LT5wdXNoZWQgPSBGQUxTRTsKLQotICAvKiBTZW5kIGEgbmV3IFNFR01FTlQgZXZlbnQgb24gdGhlIG5ldyBwYWQgbmV4dCAqLwotICBpZiAob2xkICE9IG5ldyAmJiBuZXcpCi0gICAgbmV3LT5ldmVudHNfcGVuZGluZyA9IFRSVUU7Ci0KLSAgYWN0aXZlX3BhZF9wID0gJnNlbGYtPmFjdGl2ZV9zaW5rcGFkOwotICBnc3Rfb2JqZWN0X3JlcGxhY2UgKChHc3RPYmplY3QgKiopIGFjdGl2ZV9wYWRfcCwgR1NUX09CSkVDVF9DQVNUIChwYWQpKTsKLQotICBpZiAob2xkICYmIG9sZCAhPSBuZXcpCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfUEFEX0NBU1QgKG9sZCksIGdzdF9ldmVudF9uZXdfcmVjb25maWd1cmUgKCkpOwotICBpZiAobmV3KQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX1BBRF9DQVNUIChuZXcpLCBnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICgpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiTmV3IGFjdGl2ZSBwYWQgaXMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBzZWxmLT5hY3RpdmVfc2lua3BhZCk7Ci0KLSAgaWYgKG9sZCAhPSBuZXcgJiYgbmV3ICYmIG5ldy0+ZW9zKSB7Ci0gICAgbmV3LT5lb3Nfc2VudCA9IEZBTFNFOwotICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdElucHV0U2VsZWN0b3IgKnNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQUNUSVZFX1BBRDoKLSAgICB7Ci0gICAgICBHc3RQYWQgKnBhZDsKLQotICAgICAgcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWx1ZSk7Ci0KLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOwotCi0jaWYgREVCVUdfQ0FDSEVEX0JVRkZFUlMKLSAgICAgIGdzdF9pbnB1dF9zZWxlY3Rvcl9kZWJ1Z19jYWNoZWRfYnVmZmVycyAoc2VsKTsKLSNlbmRpZgotCi0gICAgICBnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKHNlbCwgcGFkKTsKLQotI2lmIERFQlVHX0NBQ0hFRF9CVUZGRVJTCi0gICAgICBnc3RfaW5wdXRfc2VsZWN0b3JfZGVidWdfY2FjaGVkX2J1ZmZlcnMgKHNlbCk7Ci0jZW5kaWYKLQotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfU1lOQ19TVFJFQU1TOgotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7Ci0gICAgICBzZWwtPnN5bmNfc3RyZWFtcyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1lOQ19NT0RFOgotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7Ci0gICAgICBzZWwtPnN5bmNfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0FDSEVfQlVGRkVSUzoKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChvYmplY3QpOwotICAgICAgc2VsLT5jYWNoZV9idWZmZXJzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAob2JqZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmVfcGFkX2NoYW5nZWQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIC8qIFdha2UgdXAgYWxsIG5vbi1hY3RpdmUgcGFkcyBpbiBzeW5jIG1vZGUsIHRoZXkgbWlnaHQgYmUKLSAgICogdGhlIGFjdGl2ZSBwYWQgbm93ICovCi0gIGlmIChzZWwtPnN5bmNfc3RyZWFtcykKLSAgICBHU1RfSU5QVVRfU0VMRUNUT1JfQlJPQURDQVNUIChzZWwpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RJbnB1dFNlbGVjdG9yICpzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX05fUEFEUzoKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChvYmplY3QpOwotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHNlbC0+bl9wYWRzKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKG9iamVjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQUNUSVZFX1BBRDoKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChvYmplY3QpOwotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgc2VsLT5hY3RpdmVfc2lua3BhZCk7Ci0gICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChvYmplY3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NZTkNfU1RSRUFNUzoKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChvYmplY3QpOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNlbC0+c3luY19zdHJlYW1zKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKG9iamVjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1lOQ19NT0RFOgotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKG9iamVjdCk7Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc2VsLT5zeW5jX21vZGUpOwotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAob2JqZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQUNIRV9CVUZGRVJTOgotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKG9iamVjdCk7Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2VsLT5jYWNoZV9idWZmZXJzKTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKG9iamVjdCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X2lucHV0X3NlbGVjdG9yX2dldF9saW5rZWRfcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLCBHc3RQYWQgKiBwYWQsCi0gICAgZ2Jvb2xlYW4gc3RyaWN0KQotewotICBHc3RQYWQgKm90aGVycGFkID0gTlVMTDsKLQotICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKLSAgaWYgKHBhZCA9PSBzZWwtPnNyY3BhZCkKLSAgICBvdGhlcnBhZCA9IHNlbC0+YWN0aXZlX3NpbmtwYWQ7Ci0gIGVsc2UgaWYgKHBhZCA9PSBzZWwtPmFjdGl2ZV9zaW5rcGFkIHx8ICFzdHJpY3QpCi0gICAgb3RoZXJwYWQgPSBzZWwtPnNyY3BhZDsKLSAgaWYgKG90aGVycGFkKQotICAgIGdzdF9vYmplY3RfcmVmIChvdGhlcnBhZCk7Ci0gIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7Ci0KLSAgcmV0dXJuIG90aGVycGFkOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pbnB1dF9zZWxlY3Rvcl9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0gIEdzdEl0ZXJhdG9yICppdGVyOwotICBnYm9vbGVhbiBkb25lID0gRkFMU0U7Ci0gIEdWYWx1ZSBpdGVtID0geyAwLCB9OwotICBHc3RQYWQgKmV2ZW50cGFkOwotICBHTGlzdCAqcHVzaGVkX3BhZHMgPSBOVUxMOwotCi0gIHNlbCA9IEdTVF9JTlBVVF9TRUxFQ1RPUiAocGFyZW50KTsKLSAgLyogU2VuZCB1cHN0cmVhbSBldmVudHMgdG8gYWxsIHNpbmtwYWRzICovCi0gIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoR1NUX0VMRU1FTlRfQ0FTVCAoc2VsKSk7Ci0KLSAgLyogVGhpcyBpcyBub3cgZXNzZW50aWFsbHkgYSBjb3B5IG9mIGdzdF9wYWRfZXZlbnRfZGVmYXVsdF9kaXNwYXRjaAotICAgKiB3aXRoIGEgZGlmZmVyZW50IGl0ZXJhdG9yICovCi0gIHdoaWxlICghZG9uZSkgewotICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZpdGVtKSkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICAgIGV2ZW50cGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmaXRlbSk7Ci0KLSAgICAgICAgLyogaWYgYWxyZWFkeSBwdXNoZWQsICBza2lwICovCi0gICAgICAgIGlmIChnX2xpc3RfZmluZCAocHVzaGVkX3BhZHMsIGV2ZW50cGFkKSkgewotICAgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgICAgICAgcmVzdWx0IHw9IGdzdF9wYWRfcHVzaF9ldmVudCAoZXZlbnRwYWQsIGV2ZW50KTsKLQotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICAvKiBXZSBkb24ndCByZXNldCB0aGUgcmVzdWx0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBwdXNoIHRoZSBldmVudAotICAgICAgICAgKiBhZ2FpbiBvbiBwYWRzIHRoYXQgZ290IHRoZSBldmVudCBhbHJlYWR5IGFuZCBiZWNhdXNlIHdlIG5lZWQKLSAgICAgICAgICogdG8gY29uc2lkZXIgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgcHVzaGVzICovCi0gICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChwYWQsICJDb3VsZCBub3QgaXRlcmF0ZSBvdmVyIHNpbmtwYWRzIik7Ci0gICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Ci0gICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ192YWx1ZV91bnNldCAoJml0ZW0pOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0KLSAgZ19saXN0X2ZyZWUgKHB1c2hlZF9wYWRzKTsKLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBjaGVjayBpZiB0aGUgcGFkIGlzIHRoZSBhY3RpdmUgc2lua3BhZCAqLwotc3RhdGljIGlubGluZSBnYm9vbGVhbgotZ3N0X2lucHV0X3NlbGVjdG9yX2lzX2FjdGl2ZV9zaW5rcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLCBHc3RQYWQgKiBwYWQpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKLSAgcmVzID0gKHBhZCA9PSBzZWwtPmFjdGl2ZV9zaW5rcGFkKTsKLSAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKiBHZXQgb3IgY3JlYXRlIHRoZSBhY3RpdmUgc2lua3BhZCwgbXVzdCBiZSBjYWxsZWQgd2l0aCBTRUxFQ1RPUl9MT0NLICovCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfYWN0aXZlX3NpbmtwYWQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwpCi17Ci0gIEdzdFBhZCAqYWN0aXZlX3NpbmtwYWQ7Ci0KLSAgYWN0aXZlX3NpbmtwYWQgPSBzZWwtPmFjdGl2ZV9zaW5rcGFkOwotICBpZiAoYWN0aXZlX3NpbmtwYWQgPT0gTlVMTCkgewotICAgIEdWYWx1ZSBpdGVtID0gR19WQUxVRV9JTklUOwotICAgIEdzdEl0ZXJhdG9yICppdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKHNlbCkpOwotICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGlyZXM7Ci0KLSAgICB3aGlsZSAoKGlyZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXRlciwgJml0ZW0pKSA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7Ci0gICAgaWYgKGlyZXMgPT0gR1NUX0lURVJBVE9SX09LKSB7Ci0gICAgICAvKiBJZiBubyBwYWQgaXMgY3VycmVudGx5IHNlbGVjdGVkLCB3ZSByZXR1cm4gdGhlIGZpcnN0IHVzYWJsZSBwYWQgdG8KLSAgICAgICAqIGd1YXJhbnRlZSBjb25zaXN0ZW5jeSAqLwotCi0gICAgICBhY3RpdmVfc2lua3BhZCA9IHNlbC0+YWN0aXZlX3NpbmtwYWQgPSBnX3ZhbHVlX2R1cF9vYmplY3QgKCZpdGVtKTsKLSAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbCwgIkFjdGl2YXRpbmcgcGFkICVzOiVzIiwKLSAgICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKGFjdGl2ZV9zaW5rcGFkKSk7Ci0gICAgfSBlbHNlCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbCwgIkNvdWxkbid0IGZpbmQgYSBkZWZhdWx0IHNpbmsgcGFkIik7Ci0gICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0ZXIpOwotICB9Ci0KLSAgcmV0dXJuIGFjdGl2ZV9zaW5rcGFkOwotfQotCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9pbnB1dF9zZWxlY3Rvcl9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogdW51c2VkLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0SW5wdXRTZWxlY3RvciAqc2VsOwotICBnY2hhciAqbmFtZSA9IE5VTEw7Ci0gIEdzdFBhZCAqc2lua3BhZCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsLT5kaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LLCBOVUxMKTsKLQotICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKGVsZW1lbnQpOwotCi0gIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChzZWwsICJDcmVhdGluZyBuZXcgcGFkIHNpbmtfJXUiLCBzZWwtPnBhZGNvdW50KTsKLSAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNpbmtfJXUiLCBzZWwtPnBhZGNvdW50KyspOwotICBzaW5rcGFkID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9TRUxFQ1RPUl9QQUQsCi0gICAgICAibmFtZSIsIG5hbWUsICJkaXJlY3Rpb24iLCB0ZW1wbC0+ZGlyZWN0aW9uLCAidGVtcGxhdGUiLCB0ZW1wbCwgTlVMTCk7Ci0gIGdfZnJlZSAobmFtZSk7Ci0KLSAgc2VsLT5uX3BhZHMrKzsKLQotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zZWxlY3Rvcl9wYWRfcXVlcnkpKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NlbGVjdG9yX3BhZF9jaGFpbikpOwotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChzaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zZWxlY3Rvcl9wYWRfaXRlcmF0ZV9saW5rZWRfcGFkcykpOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHNpbmtwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2lua3BhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0FMTE9DQVRJT04pOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsKSwgc2lua3BhZCk7Ci0gIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7Ci0KLSAgcmV0dXJuIHNpbmtwYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5wdXRfc2VsZWN0b3JfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdElucHV0U2VsZWN0b3IgKnNlbDsKLQotICBzZWwgPSBHU1RfSU5QVVRfU0VMRUNUT1IgKGVsZW1lbnQpOwotICBHU1RfTE9HX09CSkVDVCAoc2VsLCAiUmVsZWFzaW5nIHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbCk7Ci0gIC8qIGlmIHRoZSBwYWQgd2FzIHRoZSBhY3RpdmUgcGFkLCBtYWtlcyB1cyBzZWxlY3QgYSBuZXcgb25lICovCi0gIGlmIChzZWwtPmFjdGl2ZV9zaW5rcGFkID09IHBhZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbCwgIkRlYWN0aXZhdGluZyBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlbC0+YWN0aXZlX3NpbmtwYWQpOwotICAgIHNlbC0+YWN0aXZlX3NpbmtwYWQgPSBOVUxMOwotICB9Ci0gIHNlbC0+bl9wYWRzLS07Ci0gIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIEZBTFNFKTsKLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlQgKHNlbCksIHBhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5wdXRfc2VsZWN0b3JfcmVzZXQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwpCi17Ci0gIEdMaXN0ICp3YWxrOwotCi0gIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOwotICAvKiBjbGVhciBhY3RpdmUgcGFkICovCi0gIGlmIChzZWwtPmFjdGl2ZV9zaW5rcGFkKSB7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2VsLT5hY3RpdmVfc2lua3BhZCk7Ci0gICAgc2VsLT5hY3RpdmVfc2lua3BhZCA9IE5VTEw7Ci0gIH0KLSAgc2VsLT5lb3Nfc2VudCA9IEZBTFNFOwotCi0gIC8qIHJlc2V0IGVhY2ggb2Ygb3VyIHNpbmtwYWRzIHN0YXRlICovCi0gIGZvciAod2FsayA9IEdTVF9FTEVNRU5UX0NBU1QgKHNlbCktPnNpbmtwYWRzOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0U2VsZWN0b3JQYWQgKnNlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAod2Fsay0+ZGF0YSk7Ci0KLSAgICBnc3Rfc2VsZWN0b3JfcGFkX3Jlc2V0IChzZWxwYWQpOwotCi0gICAgaWYgKHNlbHBhZC0+dGFncykgewotICAgICAgZ3N0X3RhZ19saXN0X3VucmVmIChzZWxwYWQtPnRhZ3MpOwotICAgICAgc2VscGFkLT50YWdzID0gTlVMTDsKLSAgICB9Ci0gIH0KLSAgc2VsLT5oYXZlX2dyb3VwX2lkID0gVFJVRTsKLSAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfaW5wdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RJbnB1dFNlbGVjdG9yICpzZWxmID0gR1NUX0lOUFVUX1NFTEVDVE9SIChlbGVtZW50KTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsZik7Ci0gICAgICBzZWxmLT5lb3MgPSBGQUxTRTsKLSAgICAgIHNlbGYtPmZsdXNoaW5nID0gRkFMU0U7Ci0gICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICAvKiBmaXJzdCB1bmxvY2sgYmVmb3JlIHdlIGNhbGwgdGhlIHBhcmVudCBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24sIHdoaWNoCi0gICAgICAgKiB0cmllcyB0byBhY3F1aXJlIHRoZSBzdHJlYW0gbG9jayB3aGVuIGdvaW5nIHRvIHJlYWR5LiAqLwotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbGYpOwotICAgICAgc2VsZi0+ZW9zID0gVFJVRTsKLSAgICAgIHNlbGYtPmZsdXNoaW5nID0gVFJVRTsKLSAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOwotICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsZik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXN1bHQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2lucHV0X3NlbGVjdG9yX3Jlc2V0IChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZmMTc1Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotIAotI2lmbmRlZiBfX0dTVF9JTlBVVF9TRUxFQ1RPUl9IX18KLSNkZWZpbmUgX19HU1RfSU5QVVRfU0VMRUNUT1JfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9JTlBVVF9TRUxFQ1RPUiBcCi0gIChnc3RfaW5wdXRfc2VsZWN0b3JfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9JTlBVVF9TRUxFQ1RPUiwgR3N0SW5wdXRTZWxlY3RvcikpCi0jZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0lOUFVUX1NFTEVDVE9SLCBHc3RJbnB1dFNlbGVjdG9yQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfSU5QVVRfU0VMRUNUT1Iob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0lOUFVUX1NFTEVDVE9SKSkKLSNkZWZpbmUgR1NUX0lTX0lOUFVUX1NFTEVDVE9SX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfSU5QVVRfU0VMRUNUT1IpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0SW5wdXRTZWxlY3RvciBHc3RJbnB1dFNlbGVjdG9yOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdElucHV0U2VsZWN0b3JDbGFzcyBHc3RJbnB1dFNlbGVjdG9yQ2xhc3M7Ci0KLSNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9MT0NLKHNlbCkgKCYoKEdzdElucHV0U2VsZWN0b3IqKShzZWwpKS0+bG9jaykKLSNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9DT05EKHNlbCkgKCYoKEdzdElucHV0U2VsZWN0b3IqKShzZWwpKS0+Y29uZCkKLSNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0soc2VsKSAoZ19tdXRleF9sb2NrIChHU1RfSU5QVVRfU0VMRUNUT1JfR0VUX0xPQ0soc2VsKSkpCi0jZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0soc2VsKSAoZ19tdXRleF91bmxvY2sgKEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfTE9DSyhzZWwpKSkKLSNkZWZpbmUgR1NUX0lOUFVUX1NFTEVDVE9SX1dBSVQoc2VsKSAoZ19jb25kX3dhaXQgKEdTVF9JTlBVVF9TRUxFQ1RPUl9HRVRfQ09ORChzZWwpLCBcCi0JCQlHU1RfSU5QVVRfU0VMRUNUT1JfR0VUX0xPQ0soc2VsKSkpCi0jZGVmaW5lIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1Qoc2VsKSAoZ19jb25kX2Jyb2FkY2FzdCAoR1NUX0lOUFVUX1NFTEVDVE9SX0dFVF9DT05EKHNlbCkpKQotCi0vKioKLSAqIEdzdElucHV0U2VsZWN0b3JTeW5jTW9kZToKLSAqIEBHU1RfSU5QVVRfU0VMRUNUT1JfU1lOQ19NT0RFX0FDVElWRV9TRUdNRU5UOiBTeW5jIHVzaW5nIHRoZSBjdXJyZW50IGFjdGl2ZSBzZWdtZW50LgotICogQEdTVF9JTlBVVF9TRUxFQ1RPUl9TWU5DX01PREVfQ0xPQ0s6IFN5bmMgdXNpbmcgdGhlIGNsb2NrLgotICoKLSAqIFRoZSBkaWZmZXJlbnQgd2F5cyB0aGF0IGlucHV0LXNlbGVjdG9yIGNhbiBiZWhhdmUgd2hlbiBpbiBzeW5jLXN0cmVhbXMgbW9kZS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lOUFVUX1NFTEVDVE9SX1NZTkNfTU9ERV9BQ1RJVkVfU0VHTUVOVCwKLSAgR1NUX0lOUFVUX1NFTEVDVE9SX1NZTkNfTU9ERV9DTE9DSwotfSBHc3RJbnB1dFNlbGVjdG9yU3luY01vZGU7Ci0KLXN0cnVjdCBfR3N0SW5wdXRTZWxlY3RvciB7Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICBHc3RQYWQgKnNyY3BhZDsKLQotICBHc3RQYWQgKmFjdGl2ZV9zaW5rcGFkOwotICBndWludCBuX3BhZHM7ICAgICAgICAgICAvKiBudW1iZXIgb2YgcGFkcyAqLwotICBndWludCBwYWRjb3VudDsgICAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgZm9yIHBhZHMgKi8KLSAgZ2Jvb2xlYW4gc3luY19zdHJlYW1zOwotICBHc3RJbnB1dFNlbGVjdG9yU3luY01vZGUgc3luY19tb2RlOwotICBnYm9vbGVhbiBjYWNoZV9idWZmZXJzOwotCi0gIGdib29sZWFuIGhhdmVfZ3JvdXBfaWQ7Ci0KLSAgR011dGV4IGxvY2s7Ci0gIEdDb25kIGNvbmQ7Ci0gIGdib29sZWFuIGVvczsKLSAgZ2Jvb2xlYW4gZW9zX3NlbnQ7Ci0gIGdib29sZWFuIGZsdXNoaW5nOwotfTsKLQotc3RydWN0IF9Hc3RJbnB1dFNlbGVjdG9yQ2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR19HTlVDX0lOVEVSTkFMIEdUeXBlIGdzdF9pbnB1dF9zZWxlY3Rvcl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9JTlBVVF9TRUxFQ1RPUl9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0bXVsdGlxdWV1ZS5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OWFjYWEuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDMzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBKYW4gU2NobWlkdCA8amFuQGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogZ3N0bXVsdGlxdWV1ZS5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW11bHRpcXVldWUKLSAqIEBzZWVfYWxzbzogI0dzdFF1ZXVlCi0gKgotICogPHJlZnNlY3QyPgotICogPHBhcmE+Ci0gKiBNdWx0aXF1ZXVlIGlzIHNpbWlsYXIgdG8gYSBub3JtYWwgI0dzdFF1ZXVlIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCi0gKiBmZWF0dXJlczoKLSAqIDxvcmRlcmVkbGlzdD4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPGl0ZW1pemVkbGlzdD48dGl0bGU+TXVsdGlwbGUgc3RyZWFtaGFuZGxpbmc8L3RpdGxlPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgVGhlIGVsZW1lbnQgaGFuZGxlcyBxdWV1ZWluZyBkYXRhIG9uIG1vcmUgdGhhbiBvbmUgc3RyZWFtIGF0IG9uY2UuIFRvCi0gKiAgICAgYWNoaWV2ZSBzdWNoIGEgZmVhdHVyZSBpdCBoYXMgcmVxdWVzdCBzaW5rIHBhZHMgKHNpbmsmcGVyY250O3UpIGFuZAotICogICAgICdzb21ldGltZXMnIHNyYyBwYWRzIChzcmMmcGVyY250O3UpLgotICogICA8L3BhcmE+PHBhcmE+Ci0gKiAgICAgV2hlbiByZXF1ZXN0aW5nIGEgZ2l2ZW4gc2lua3BhZCB3aXRoIGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKCksCi0gKiAgICAgdGhlIGFzc29jaWF0ZWQgc3JjcGFkIGZvciB0aGF0IHN0cmVhbSB3aWxsIGJlIGNyZWF0ZWQuCi0gKiAgICAgRXhhbXBsZTogcmVxdWVzdGluZyBzaW5rMSB3aWxsIGdlbmVyYXRlIHNyYzEuCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L2l0ZW1pemVkbGlzdD4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPk5vbi1zdGFydmF0aW9uIG9uIG11bHRpcGxlIHN0cmVhbXM8L3RpdGxlPgotICogICA8bGlzdGl0ZW0+PHBhcmE+Ci0gKiAgICAgSWYgbW9yZSB0aGFuIG9uZSBzdHJlYW0gaXMgdXNlZCB3aXRoIHRoZSBlbGVtZW50LCB0aGUgc3RyZWFtcycgcXVldWVzCi0gKiAgICAgd2lsbCBiZSBkeW5hbWljYWxseSBncm93biAodXAgdG8gYSBsaW1pdCksIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IG5vCi0gKiAgICAgc3RyZWFtIGlzIHJpc2tpbmcgZGF0YSBzdGFydmF0aW9uLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBhdCBhbnkgZ2l2ZW4KLSAqICAgICB0aW1lIHRoZXJlIGFyZSBhdCBsZWFzdCBOIGJ5dGVzIHF1ZXVlZCBhbmQgYXZhaWxhYmxlIGZvciBlYWNoIGluZGl2aWR1YWwKLSAqICAgICBzdHJlYW0uCi0gKiAgIDwvcGFyYT48cGFyYT4KLSAqICAgICBJZiBhbiBFT1MgZXZlbnQgY29tZXMgdGhyb3VnaCBhIHNyY3BhZCwgdGhlIGFzc29jaWF0ZWQgcXVldWUgd2lsbCBiZQotICogICAgIGNvbnNpZGVyZWQgYXMgJ25vdC1lbXB0eScgaW4gdGhlIHF1ZXVlLXNpemUtZ3Jvd2luZyBhbGdvcml0aG0uCi0gKiAgIDwvcGFyYT48L2xpc3RpdGVtPgotICogICA8L2l0ZW1pemVkbGlzdD4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxpdGVtaXplZGxpc3Q+PHRpdGxlPk5vbi1saW5rZWQgc3JjcGFkcyBncmFjZWZ1bCBoYW5kbGluZzwvdGl0bGU+Ci0gKiAgIDxsaXN0aXRlbT48cGFyYT4KLSAqICAgICBJbiBvcmRlciB0byBiZXR0ZXIgc3VwcG9ydCBkeW5hbWljIHN3aXRjaGluZyBiZXR3ZWVuIHN0cmVhbXMsIHRoZSBtdWx0aXF1ZXVlCi0gKiAgICAgKHVubGlrZSB0aGUgY3VycmVudCBHU3RyZWFtZXIgcXVldWUpIGNvbnRpbnVlcyB0byBwdXNoIGJ1ZmZlcnMgb24gbm9uLWxpbmtlZAotICogICAgIHBhZHMgcmF0aGVyIHRoYW4gc2h1dHRpbmcgZG93bi4KLSAqICAgPC9wYXJhPjxwYXJhPgotICogICAgIEluIGFkZGl0aW9uLCB0byBwcmV2ZW50IGEgbm9uLWxpbmtlZCBzdHJlYW0gZnJvbSB2ZXJ5IHF1aWNrbHkgY29uc3VtaW5nIGFsbAotICogICAgIGF2YWlsYWJsZSBidWZmZXJzIGFuZCB0aHVzICdyYWNpbmcgYWhlYWQnIG9mIHRoZSBvdGhlciBzdHJlYW1zLCB0aGUgZWxlbWVudAotICogICAgIG11c3QgZW5zdXJlIHRoYXQgYnVmZmVycyBhbmQgaW5saW5lZCBldmVudHMgZm9yIGEgbm9uLWxpbmtlZCBzdHJlYW0gYXJlIHB1c2hlZAotICogICAgIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgd2VyZSByZWNlaXZlZCwgcmVsYXRpdmUgdG8gdGhlIG90aGVyIHN0cmVhbXMKLSAqICAgICBjb250cm9sbGVkIGJ5IHRoZSBlbGVtZW50LiBUaGlzIG1lYW5zIHRoYXQgYSBidWZmZXIgY2Fubm90IGJlIHB1c2hlZCB0byBhCi0gKiAgICAgbm9uLWxpbmtlZCBwYWQgYW55IHNvb25lciB0aGFuIGJ1ZmZlcnMgaW4gYW55IG90aGVyIHN0cmVhbSB3aGljaCB3ZXJlIHJlY2VpdmVkCi0gKiAgICAgYmVmb3JlIGl0LgotICogICA8L3BhcmE+PC9saXN0aXRlbT4KLSAqICAgPC9pdGVtaXplZGxpc3Q+Ci0gKiA8L2xpc3RpdGVtPgotICogPC9vcmRlcmVkbGlzdD4KLSAqIDwvcGFyYT4KLSAqIDxwYXJhPgotICogICBEYXRhIGlzIHF1ZXVlZCB1bnRpbCBvbmUgb2YgdGhlIGxpbWl0cyBzcGVjaWZpZWQgYnkgdGhlCi0gKiAgICNHc3RNdWx0aVF1ZXVlOm1heC1zaXplLWJ1ZmZlcnMsICNHc3RNdWx0aVF1ZXVlOm1heC1zaXplLWJ5dGVzIGFuZC9vcgotICogICAjR3N0TXVsdGlRdWV1ZTptYXgtc2l6ZS10aW1lIHByb3BlcnRpZXMgaGFzIGJlZW4gcmVhY2hlZC4gQW55IGF0dGVtcHQgdG8gcHVzaAotICogICBtb3JlIGJ1ZmZlcnMgaW50byB0aGUgcXVldWUgd2lsbCBibG9jayB0aGUgcHVzaGluZyB0aHJlYWQgdW50aWwgbW9yZSBzcGFjZQotICogICBiZWNvbWVzIGF2YWlsYWJsZS4gI0dzdE11bHRpUXVldWU6ZXh0cmEtc2l6ZS1idWZmZXJzLAotICogPC9wYXJhPgotICogPHBhcmE+Ci0gKiAgICNHc3RNdWx0aVF1ZXVlOmV4dHJhLXNpemUtYnl0ZXMgYW5kICNHc3RNdWx0aVF1ZXVlOmV4dHJhLXNpemUtdGltZSBhcmUKLSAqICAgY3VycmVudGx5IHVudXNlZC4KLSAqIDwvcGFyYT4KLSAqIDxwYXJhPgotICogICBUaGUgZGVmYXVsdCBxdWV1ZSBzaXplIGxpbWl0cyBhcmUgNSBidWZmZXJzLCAxME1CIG9mIGRhdGEsIG9yCi0gKiAgIHR3byBzZWNvbmQgd29ydGggb2YgZGF0YSwgd2hpY2hldmVyIGlzIHJlYWNoZWQgZmlyc3QuIE5vdGUgdGhhdCB0aGUgbnVtYmVyCi0gKiAgIG9mIGJ1ZmZlcnMgd2lsbCBkeW5hbWljYWxseSBncm93IGRlcGVuZGluZyBvbiB0aGUgZmlsbCBsZXZlbCBvZiAKLSAqICAgb3RoZXIgcXVldWVzLgotICogPC9wYXJhPgotICogPHBhcmE+Ci0gKiAgIFRoZSAjR3N0TXVsdGlRdWV1ZTo6dW5kZXJydW4gc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhbGwgb2YgdGhlIHF1ZXVlcwotICogICBhcmUgZW1wdHkuIFRoZSAjR3N0TXVsdGlRdWV1ZTo6b3ZlcnJ1biBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIG9uZSBvZiB0aGUKLSAqICAgcXVldWVzIGlzIGZpbGxlZC4KLSAqICAgQm90aCBzaWduYWxzIGFyZSBlbWl0dGVkIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIHN0cmVhbWluZyB0aHJlYWQuCi0gKiA8L3BhcmE+Ci0gKiA8cGFyYT4KLSAqICAgV2hlbiB1c2luZyAjR3N0TXVsdGlRdWV1ZTpzeW5jLWJ5LXJ1bm5pbmctdGltZSB0aGUgdW5saW5rZWQgc3RyZWFtcyB3aWxsCi0gKiAgIGJlIHRocm90dGxlZCBieSB0aGUgaGlnaGVzdCBydW5uaW5nLXRpbWUgb2YgbGlua2VkIHN0cmVhbXMuIFRoaXMgYWxsb3dzCi0gKiAgIGZ1cnRoZXIgcmVsaW5raW5nIG9mIHRob3NlIHVubGlua2VkIHN0cmVhbXMgd2l0aG91dCB0aGVtIGJlaW5nIGluIHRoZQotICogICBmdXR1cmUgKGkuZS4gdG8gYWNoaWV2ZSBnYXBsZXNzIHBsYXliYWNrKS4KLSAqICAgV2hlbiBkZWFsaW5nIHdpdGggc3RyZWFtcyB3aGljaCBoYXZlIGdvdCBkaWZmZXJlbnQgY29uc3VtcHRpb24gcmVxdWlyZW1lbnRzCi0gKiAgIGRvd25zdHJlYW0gKGV4OiB2aWRlbyBkZWNvZGVycyB3aGljaCB3aWxsIGNvbnN1bWUgbW9yZSBidWZmZXIgKGluIHRpbWUpIHRoYW4KLSAqICAgYXVkaW8gZGVjb2RlcnMpLCBpdCBpcyByZWNvbW1lbmRlZCB0byBncm91cCBzdHJlYW1zIG9mIHRoZSBzYW1lIHR5cGUKLSAqICAgYnkgdXNpbmcgdGhlIHBhZCAiZ3JvdXAtaWQiIHByb3BlcnR5LiBUaGlzIHdpbGwgZnVydGhlciB0aHJvdHRsZSBzdHJlYW1zCi0gKiAgIGluIHRpbWUgd2l0aGluIHRoYXQgZ3JvdXAuCi0gKiA8L3BhcmE+Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiZ3N0bXVsdGlxdWV1ZS5oIgotI2luY2x1ZGUgPGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg+Ci0KLS8qKgotICogR3N0U2luZ2xlUXVldWU6Ci0gKiBAc2lua3BhZDogYXNzb2NpYXRlZCBzaW5rICNHc3RQYWQKLSAqIEBzcmNwYWQ6IGFzc29jaWF0ZWQgc291cmNlICNHc3RQYWQKLSAqCi0gKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgaW5mb3JtYXRpb24gYW5kIHByb3BlcnRpZXMgYWJvdXQKLSAqIGEgc2luZ2xlIHF1ZXVlLgotICovCi10eXBlZGVmIHN0cnVjdCBfR3N0U2luZ2xlUXVldWUgR3N0U2luZ2xlUXVldWU7Ci0KLXN0cnVjdCBfR3N0U2luZ2xlUXVldWUKLXsKLSAgLyogdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHF1ZXVlICovCi0gIGd1aW50IGlkOwotICAvKiBncm91cCBvZiBzdHJlYW1zIHRvIHdoaWNoIHRoaXMgcXVldWUgYmVsb25ncyB0byAqLwotICBndWludCBncm91cGlkOwotICBHc3RDbG9ja1RpbWVEaWZmIGdyb3VwX2hpZ2hfdGltZTsKLQotICBHc3RNdWx0aVF1ZXVlICptcXVldWU7Ci0KLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RQYWQgKnNyY3BhZDsKLQotICAvKiBmbG93cmV0dXJuIG9mIHByZXZpb3VzIHNyY3BhZCBwdXNoICovCi0gIEdzdEZsb3dSZXR1cm4gc3JjcmVzdWx0OwotICAvKiBJZiBzb21ldGhpbmcgd2FzIGFjdHVhbGx5IHB1c2hlZCBvbgotICAgKiB0aGlzIHBhZCBhZnRlciBmbHVzaGluZy9wYWQgYWN0aXZhdGlvbgotICAgKiBhbmQgdGhlIHNyY3Jlc3VsdCBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcKLSAgICogcmVhbAotICAgKi8KLSAgZ2Jvb2xlYW4gcHVzaGVkOwotCi0gIC8qIHNlZ21lbnRzICovCi0gIEdzdFNlZ21lbnQgc2lua19zZWdtZW50OwotICBHc3RTZWdtZW50IHNyY19zZWdtZW50OwotICBnYm9vbGVhbiBoYXNfc3JjX3NlZ21lbnQ7ICAgICAvKiBwcmVmZXJyZWQgb3ZlciBpbml0aWFsaXppbmcgdGhlIHNyY19zZWdtZW50IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFVOREVGSU5FRCBhcyB0aGlzIGRvZXNuJ3QgcmVxdWlyZXMgYWRkaW5nIGlmcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbiBldmVyeSBzZWdtZW50IHVzYWdlICovCi0KLSAgLyogcG9zaXRpb24gb2Ygc3JjL3NpbmsgKi8KLSAgR3N0Q2xvY2tUaW1lRGlmZiBzaW5rdGltZSwgc3JjdGltZTsKLSAgLyogY2FjaGVkIGlucHV0IHZhbHVlLCB1c2VkIGZvciBpbnRlcmxlYXZlICovCi0gIEdzdENsb2NrVGltZURpZmYgY2FjaGVkX3Npbmt0aW1lOwotICAvKiBUUlVFIGlmIGVpdGhlciBwb3NpdGlvbiBuZWVkcyB0byBiZSByZWNhbGN1bGF0ZWQgKi8KLSAgZ2Jvb2xlYW4gc2lua190YWludGVkLCBzcmNfdGFpbnRlZDsKLQotICAvKiBxdWV1ZSBvZiBkYXRhICovCi0gIEdzdERhdGFRdWV1ZSAqcXVldWU7Ci0gIEdzdERhdGFRdWV1ZVNpemUgbWF4X3NpemUsIGV4dHJhX3NpemU7Ci0gIEdzdENsb2NrVGltZSBjdXJfdGltZTsKLSAgZ2Jvb2xlYW4gaXNfZW9zOwotICBnYm9vbGVhbiBpc19zcGFyc2U7Ci0gIGdib29sZWFuIGZsdXNoaW5nOwotICBnYm9vbGVhbiBhY3RpdmU7Ci0KLSAgLyogUHJvdGVjdGVkIGJ5IGdsb2JhbCBsb2NrICovCi0gIGd1aW50MzIgbmV4dGlkOyAgICAgICAgICAgICAgIC8qIElEIG9mIHRoZSBuZXh0IG9iamVjdCB3YWl0aW5nIHRvIGJlIHB1c2hlZCAqLwotICBndWludDMyIG9sZGlkOyAgICAgICAgICAgICAgICAvKiBJRCBvZiB0aGUgbGFzdCBvYmplY3QgcHVzaGVkIChsYXN0IGluIGEgc2VyaWVzKSAqLwotICBndWludDMyIGxhc3Rfb2xkaWQ7ICAgICAgICAgICAvKiBQcmV2aW91c2x5IG9ic2VydmVkIG9sZF9pZCwgcmVzZXQgdG8gTUFYVUlOVDMyIG9uIGZsdXNoICovCi0gIEdzdENsb2NrVGltZURpZmYgbmV4dF90aW1lOyAgIC8qIEVuZCBydW5uaW5nIHRpbWUgb2YgbmV4dCBidWZmZXIgdG8gYmUgcHVzaGVkICovCi0gIEdzdENsb2NrVGltZURpZmYgbGFzdF90aW1lOyAgIC8qIFN0YXJ0IHJ1bm5pbmcgdGltZSBvZiBsYXN0IHB1c2hlZCBidWZmZXIgKi8KLSAgR0NvbmQgdHVybjsgICAgICAgICAgICAgICAgICAgLyogU2luZ2xlUXVldWUgdHVybiB3YWl0aW5nIGNvbmRpdGlvbmFsICovCi0KLSAgLyogZm9yIHNlcmlhbGl6ZWQgcXVlcmllcyAqLwotICBHQ29uZCBxdWVyeV9oYW5kbGVkOwotICBnYm9vbGVhbiBsYXN0X3F1ZXJ5OwotICBHc3RRdWVyeSAqbGFzdF9oYW5kbGVkX3F1ZXJ5OwotCi0gIC8qIEZvciBpbnRlcmxlYXZlIGNhbGN1bGF0aW9uICovCi0gIEdUaHJlYWQgKnRocmVhZDsKLX07Ci0KLQotLyogRXh0ZW5zaW9uIG9mIEdzdERhdGFRdWV1ZUl0ZW0gc3RydWN0dXJlIGZvciBvdXIgdXNhZ2UgKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RNdWx0aVF1ZXVlSXRlbSBHc3RNdWx0aVF1ZXVlSXRlbTsKLQotc3RydWN0IF9Hc3RNdWx0aVF1ZXVlSXRlbQotewotICBHc3RNaW5pT2JqZWN0ICpvYmplY3Q7Ci0gIGd1aW50IHNpemU7Ci0gIGd1aW50NjQgZHVyYXRpb247Ci0gIGdib29sZWFuIHZpc2libGU7Ci0KLSAgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveTsKLSAgZ3VpbnQzMiBwb3NpZDsKLQotICBnYm9vbGVhbiBpc19xdWVyeTsKLX07Ci0KLXN0YXRpYyBHc3RTaW5nbGVRdWV1ZSAqZ3N0X3NpbmdsZV9xdWV1ZV9uZXcgKEdzdE11bHRpUXVldWUgKiBtcXVldWUsIGd1aW50IGlkKTsKLXN0YXRpYyB2b2lkIGdzdF9zaW5nbGVfcXVldWVfZnJlZSAoR3N0U2luZ2xlUXVldWUgKiBzcXVldWUpOwotCi1zdGF0aWMgdm9pZCB3YWtlX3VwX25leHRfbm9uX2xpbmtlZCAoR3N0TXVsdGlRdWV1ZSAqIG1xKTsKLXN0YXRpYyB2b2lkIGNvbXB1dGVfaGlnaF9pZCAoR3N0TXVsdGlRdWV1ZSAqIG1xKTsKLXN0YXRpYyB2b2lkIGNvbXB1dGVfaGlnaF90aW1lIChHc3RNdWx0aVF1ZXVlICogbXEsIGd1aW50IGdyb3VwaWQpOwotc3RhdGljIHZvaWQgc2luZ2xlX3F1ZXVlX292ZXJydW5fY2IgKEdzdERhdGFRdWV1ZSAqIGRxLCBHc3RTaW5nbGVRdWV1ZSAqIHNxKTsKLXN0YXRpYyB2b2lkIHNpbmdsZV9xdWV1ZV91bmRlcnJ1bl9jYiAoR3N0RGF0YVF1ZXVlICogZHEsIEdzdFNpbmdsZVF1ZXVlICogc3EpOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVfYnVmZmVyaW5nIChHc3RNdWx0aVF1ZXVlICogbXEsIEdzdFNpbmdsZVF1ZXVlICogc3EpOwotc3RhdGljIHZvaWQgZ3N0X211bHRpX3F1ZXVlX3Bvc3RfYnVmZmVyaW5nIChHc3RNdWx0aVF1ZXVlICogbXEpOwotc3RhdGljIHZvaWQgcmVjaGVja19idWZmZXJpbmdfc3RhdHVzIChHc3RNdWx0aVF1ZXVlICogbXEpOwotCi1zdGF0aWMgdm9pZCBnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoX3F1ZXVlIChHc3RTaW5nbGVRdWV1ZSAqIHNxLCBnYm9vbGVhbiBmdWxsKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2lua18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmNfJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChtdWx0aV9xdWV1ZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAobXVsdGlfcXVldWVfZGVidWcpCi0KLS8qIFNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgU0lHTkFMX1VOREVSUlVOLAotICBTSUdOQUxfT1ZFUlJVTiwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLS8qIGRlZmF1bHQgbGltaXRzLCB3ZSB0cnkgdG8ga2VlcCB1cCB0byAyIHNlY29uZHMgb2YgZGF0YSBhbmQgaWYgdGhlcmUgaXMgbm90Ci0gKiB0aW1lLCB1cCB0byAxMCBNQi4gVGhlIG51bWJlciBvZiBidWZmZXJzIGlzIGR5bmFtaWNhbGx5IHNjYWxlZCB0byBtYWtlIHN1cmUKLSAqIHRoZXJlIGlzIGRhdGEgaW4gdGhlIHF1ZXVlcy4gTm9ybWFsbHksIHRoZSBieXRlIGFuZCB0aW1lIGxpbWl0cyBhcmUgbm90IGhpdAotICogaW4gdGhlc2VzIGNvbmRpdGlvbnMuICovCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfQllURVMgMTAgKiAxMDI0ICogMTAyNCAvKiAxMCBNQiAqLwotI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX0JVRkZFUlMgNQotI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX1RJTUUgMiAqIEdTVF9TRUNPTkQKLQotLyogc2Vjb25kIGxpbWl0cy4gV2hlbiB3ZSBoaXQgb25lIG9mIHRoZSBhYm92ZSBsaW1pdHMgd2UgYXJlIHByb2JhYmx5IGRlYWxpbmcKLSAqIHdpdGggYSBiYWRseSBtdXhlZCBmaWxlIGFuZCB3ZSBzY2FsZSB0aGUgbGltaXRzIHRvIHRoZXNlIGVtZXJnZW5jeSB2YWx1ZXMuCi0gKiBUaGlzIGlzIGN1cnJlbnRseSBub3QgeWV0IGltcGxlbWVudGVkLgotICogU2luY2Ugd2UgZHluYW1pY2FsbHkgc2NhbGUgdGhlIHF1ZXVlIGJ1ZmZlciBzaXplIHVwIHRvIHRoZSBsaW1pdHMgYnV0IGF2b2lkCi0gKiBnb2luZyBhYm92ZSB0aGUgbWF4LXNpemUtYnVmZmVycyB3aGVuIHdlIGNhbiwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcwotICogYWRpdGlvbmFsIGV4dHJhIHNpemUuICovCi0jZGVmaW5lIERFRkFVTFRfRVhUUkFfU0laRV9CWVRFUyAxMCAqIDEwMjQgKiAxMDI0ICAgICAgIC8qIDEwIE1CICovCi0jZGVmaW5lIERFRkFVTFRfRVhUUkFfU0laRV9CVUZGRVJTIDUKLSNkZWZpbmUgREVGQVVMVF9FWFRSQV9TSVpFX1RJTUUgMyAqIEdTVF9TRUNPTkQKLQotI2RlZmluZSBERUZBVUxUX1VTRV9CVUZGRVJJTkcgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9MT1dfV0FURVJNQVJLICAwLjAxCi0jZGVmaW5lIERFRkFVTFRfSElHSF9XQVRFUk1BUksgMC45OQotI2RlZmluZSBERUZBVUxUX1NZTkNfQllfUlVOTklOR19USU1FIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfVVNFX0lOVEVSTEVBVkUgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9VTkxJTktFRF9DQUNIRV9USU1FIDI1MCAqIEdTVF9NU0VDT05ECi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0VYVFJBX1NJWkVfQllURVMsCi0gIFBST1BfRVhUUkFfU0laRV9CVUZGRVJTLAotICBQUk9QX0VYVFJBX1NJWkVfVElNRSwKLSAgUFJPUF9NQVhfU0laRV9CWVRFUywKLSAgUFJPUF9NQVhfU0laRV9CVUZGRVJTLAotICBQUk9QX01BWF9TSVpFX1RJTUUsCi0gIFBST1BfVVNFX0JVRkZFUklORywKLSAgUFJPUF9MT1dfUEVSQ0VOVCwKLSAgUFJPUF9ISUdIX1BFUkNFTlQsCi0gIFBST1BfTE9XX1dBVEVSTUFSSywKLSAgUFJPUF9ISUdIX1dBVEVSTUFSSywKLSAgUFJPUF9TWU5DX0JZX1JVTk5JTkdfVElNRSwKLSAgUFJPUF9VU0VfSU5URVJMRUFWRSwKLSAgUFJPUF9VTkxJTktFRF9DQUNIRV9USU1FLAotICBQUk9QX0xBU1QKLX07Ci0KLS8qIEV4cGxhbmF0aW9uIGZvciBidWZmZXIgbGV2ZWxzIGFuZCBwZXJjZW50YWdlczoKLSAqCi0gKiBUaGUgYnVmZmVyaW5nX2xldmVsIGZ1bmN0aW9ucyBoZXJlIHJldHVybiBhIHZhbHVlIGluIGEgbm9ybWFsaXplZCByYW5nZQotICogdGhhdCBzcGVjaWZpZXMgdGhlIGN1cnJlbnQgZmlsbCBsZXZlbCBvZiBhIHF1ZXVlLiBUaGUgcmFuZ2UgZ29lcyBmcm9tIDAgdG8KLSAqIE1BWF9CVUZGRVJJTkdfTEVWRUwuIFRoZSBsb3cvaGlnaCB3YXRlcm1hcmtzIGFsc28gdXNlIHRoaXMgc2FtZSByYW5nZS4KLSAqCi0gKiBUaGlzIGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBidWZmZXJpbmdfcGVyY2VudCB2YWx1ZSwgd2hpY2ggaXMKLSAqIGEgKnJlbGF0aXZlKiBxdWFudGl0eSAtIHJlbGF0aXZlIHRvIHRoZSBsb3cvaGlnaCB3YXRlcm1hcmtzLgotICogYnVmZmVyaW5nX3BlcmNlbnQgPSAwJSBtZWFucyBvdmVyYWxsIGJ1ZmZlcmluZ19sZXZlbCBpcyBhdCB0aGUgbG93IHdhdGVybWFyay4KLSAqIGJ1ZmZlcmluZ19wZXJjZW50ID0gMTAwJSBtZWFucyBvdmVyYWxsIGJ1ZmZlcmluZ19sZXZlbCBpcyBhdCB0aGUgaGlnaCB3YXRlcm1hcmsuCi0gKiBidWZmZXJpbmdfcGVyY2VudCBpcyB1c2VkIGZvciBkZXRlcm1pbmluZyBpZiB0aGUgZmlsbCBsZXZlbCBoYXMgcmVhY2hlZAotICogdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgZm9yIHByb2R1Y2luZyBCVUZGRVJJTkcgbWVzc2FnZXMuIFRoaXMgdmFsdWUKLSAqIGFsd2F5cyB1c2VzIGEgMC4uMTAwIHJhbmdlIChzaW5jZSBpdCBpcyBhIHBlcmNlbnRhZ2UpLgotICoKLSAqIFRvIGF2b2lkIGZ1dHVyZSBjb25mdXNpb25zLCB3aGVuZXZlciAiYnVmZmVyaW5nIGxldmVsIiBpcyBtZW50aW9uZWQsIGl0Ci0gKiByZWZlcnMgdG8gdGhlIGFic29sdXRlIGxldmVsIHdoaWNoIGlzIGluIHRoZSAwLi5NQVhfQlVGRkVSSU5HX0xFVkVMCi0gKiByYW5nZS4gV2hlbmV2ZXIgImJ1ZmZlcmluZ19wZXJjZW50IiBpcyBtZW50aW9uZWQsIGl0IHJlZmVycyB0byB0aGUKLSAqIHBlcmNlbnRhZ2UgdmFsdWUgdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgbG93L2hpZ2ggd2F0ZXJtYXJrLiAqLwotCi0vKiBVc2luZyBhIGJ1ZmZlcmluZyBsZXZlbCByYW5nZSBvZiAwLi4xMDAwMDAwIHRvIGFsbG93IGZvciBhCi0gKiByZXNvbHV0aW9uIGluIHBwbSAoMSBwcG0gPSAwLjAwMDElKSAqLwotI2RlZmluZSBNQVhfQlVGRkVSSU5HX0xFVkVMIDEwMDAwMDAKLQotLyogSG93IG11Y2ggMSUgbWFrZXMgdXAgaW4gdGhlIGJ1ZmZlciBsZXZlbCByYW5nZSAqLwotI2RlZmluZSBCVUZfTEVWRUxfUEVSQ0VOVF9GQUNUT1IgKChNQVhfQlVGRkVSSU5HX0xFVkVMKSAvIDEwMCkKLQotLyogR3N0TXVsdGlRdWV1ZVBhZCAqLwotCi0jZGVmaW5lIERFRkFVTFRfUEFEX0dST1VQX0lEIDAKLQotZW51bQotewotICBQUk9QX1BBRF8wLAotICBQUk9QX1BBRF9HUk9VUF9JRCwKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfTVVMVElRVUVVRV9QQUQgICAgICAgICAgICAoZ3N0X211bHRpcXVldWVfcGFkX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9NVUxUSVFVRVVFX1BBRChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX01VTFRJUVVFVUVfUEFELEdzdE11bHRpUXVldWVQYWQpKQotI2RlZmluZSBHU1RfSVNfTVVMVElRVUVVRV9QQUQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9NVUxUSVFVRVVFX1BBRCkpCi0jZGVmaW5lIEdTVF9NVUxUSVFVRVVFX1BBRF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcykgLEdTVF9UWVBFX01VTFRJUVVFVUVfUEFELEdzdE11bHRpUXVldWVQYWRDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19NVUxUSVFVRVVFX1BBRF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcykgLEdTVF9UWVBFX01VTFRJUVVFVUVfUEFEKSkKLSNkZWZpbmUgR1NUX01VTFRJUVVFVUVfUEFEX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSAsR1NUX1RZUEVfTVVMVElRVUVVRV9QQUQsR3N0TXVsdGlRdWV1ZVBhZENsYXNzKSkKLQotc3RydWN0IF9Hc3RNdWx0aVF1ZXVlUGFkCi17Ci0gIEdzdFBhZCBwYXJlbnQ7Ci0KLSAgR3N0U2luZ2xlUXVldWUgKnNxOwotfTsKLQotc3RydWN0IF9Hc3RNdWx0aVF1ZXVlUGFkQ2xhc3MKLXsKLSAgR3N0UGFkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X211bHRpcXVldWVfcGFkX2dldF90eXBlICh2b2lkKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0TXVsdGlRdWV1ZVBhZCwgZ3N0X211bHRpcXVldWVfcGFkLCBHU1RfVFlQRV9QQUQpOwotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXF1ZXVlX3BhZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0TXVsdGlRdWV1ZVBhZCAqcGFkID0gR1NUX01VTFRJUVVFVUVfUEFEIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QQURfR1JPVVBfSUQ6Ci0gICAgICBpZiAocGFkLT5zcSkKLSAgICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHBhZC0+c3EtPmdyb3VwaWQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpcXVldWVfcGFkX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RNdWx0aVF1ZXVlUGFkICpwYWQgPSBHU1RfTVVMVElRVUVVRV9QQUQgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BBRF9HUk9VUF9JRDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgICAgIGlmIChwYWQtPnNxKQotICAgICAgICBwYWQtPnNxLT5ncm91cGlkID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhZCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlxdWV1ZV9wYWRfY2xhc3NfaW5pdCAoR3N0TXVsdGlRdWV1ZVBhZENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X211bHRpcXVldWVfcGFkX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X211bHRpcXVldWVfcGFkX2dldF9wcm9wZXJ0eTsKLQotICAvKioKLSAgICogR3N0TXVsdGlRdWV1ZVBhZDpncm91cC1pZDoKLSAgICoKLSAgICogR3JvdXAgdG8gd2hpY2ggdGhpcyBwYWQgYmVsb25ncy4KLSAgICoKLSAgICogU2luY2U6IDEuMTAKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFEX0dST1VQX0lELAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJncm91cC1pZCIsICJHcm91cCBJRCIsCi0gICAgICAgICAgIkdyb3VwIHRvIHdoaWNoIHRoaXMgcGFkIGJlbG9uZ3MiLCAwLCBHX01BWFVJTlQzMiwKLSAgICAgICAgICBERUZBVUxUX1BBRF9HUk9VUF9JRCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlxdWV1ZV9wYWRfaW5pdCAoR3N0TXVsdGlRdWV1ZVBhZCAqIHBhZCkKLXsKLQotfQotCi0KLSNkZWZpbmUgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0socSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19tdXRleF9sb2NrICgmcS0+cWxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLKHEpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX211dGV4X3VubG9jayAoJnEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIFNFVF9QRVJDRU5UKG1xLCBwZXJjKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAocGVyYyAhPSBtcS0+YnVmZmVyaW5nX3BlcmNlbnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtcS0+YnVmZmVyaW5nX3BlcmNlbnQgPSBwZXJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbXEtPmJ1ZmZlcmluZ19wZXJjZW50X2NoYW5nZWQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLCAiYnVmZmVyaW5nICVkIHBlcmNlbnQiLCBwZXJjKTsgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbmxpbmUgR3N0Q2xvY2tUaW1lRGlmZgotbXlfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RDbG9ja1RpbWUgdmFsKQotewotICBHc3RDbG9ja1RpbWVEaWZmIHJlcyA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodmFsKSkgewotICAgIGdib29sZWFuIHNpZ24gPQotICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbCAoc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB2YWwsICZ2YWwpOwotICAgIGlmIChzaWduID4gMCkKLSAgICAgIHJlcyA9IHZhbDsKLSAgICBlbHNlIGlmIChzaWduIDwgMCkKLSAgICAgIHJlcyA9IC12YWw7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQgZ3N0X211bHRpX3F1ZXVlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9tdWx0aV9xdWV1ZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfbXVsdGlfcXVldWVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0UGFkICpnc3RfbXVsdGlfcXVldWVfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXAsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X211bHRpX3F1ZXVlX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfbXVsdGlfcXVldWVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQgZ3N0X211bHRpX3F1ZXVlX2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAobXVsdGlfcXVldWVfZGVidWcsICJtdWx0aXF1ZXVlIiwgMCwgIm11bHRpcXVldWUgZWxlbWVudCIpOwotI2RlZmluZSBnc3RfbXVsdGlfcXVldWVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdE11bHRpUXVldWUsIGdzdF9tdWx0aV9xdWV1ZSwgR1NUX1RZUEVfRUxFTUVOVCwKLSAgICBfZG9faW5pdCk7Ci0KLXN0YXRpYyBndWludCBnc3RfbXVsdGlfcXVldWVfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aV9xdWV1ZV9jbGFzc19pbml0IChHc3RNdWx0aVF1ZXVlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfbXVsdGlfcXVldWVfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfbXVsdGlfcXVldWVfZ2V0X3Byb3BlcnR5OwotCi0gIC8qIFNJR05BTFMgKi8KLQotICAvKioKLSAgICogR3N0TXVsdGlRdWV1ZTo6dW5kZXJydW46Ci0gICAqIEBtdWx0aXF1ZXVlOiB0aGUgbXVsdGlxdWV1ZSBpbnN0YW5jZQotICAgKgotICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgd2hlbiB0aGVyZSBpcwotICAgKiBubyBkYXRhIGluIGFueSBvZiB0aGUgcXVldWVzIGluc2lkZSB0aGUgbXVsdGlxdWV1ZSBpbnN0YW5jZSAodW5kZXJydW4pLgotICAgKgotICAgKiBUaGlzIGluZGljYXRlcyBlaXRoZXIgc3RhcnZhdGlvbiBvciBFT1MgZnJvbSB0aGUgdXBzdHJlYW0gZGF0YSBzb3VyY2VzLgotICAgKi8KLSAgZ3N0X211bHRpX3F1ZXVlX3NpZ25hbHNbU0lHTkFMX1VOREVSUlVOXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJ1bmRlcnJ1biIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9GSVJTVCwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0TXVsdGlRdWV1ZUNsYXNzLCB1bmRlcnJ1biksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDApOwotCi0gIC8qKgotICAgKiBHc3RNdWx0aVF1ZXVlOjpvdmVycnVuOgotICAgKiBAbXVsdGlxdWV1ZTogdGhlIG11bHRpcXVldWUgaW5zdGFuY2UKLSAgICoKLSAgICogUmVwb3J0cyB0aGF0IG9uZSBvZiB0aGUgcXVldWVzIGluIHRoZSBtdWx0aXF1ZXVlIGlzIGZ1bGwgKG92ZXJydW4pLgotICAgKiBBIHF1ZXVlIGlzIGZ1bGwgaWYgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIGluc2lkZSBpdCAobnVtLWJ1ZmZlcnMsIHRpbWUsCi0gICAqIHNpemUpIGlzIGhpZ2hlciB0aGFuIHRoZSBib3VuZGFyeSB2YWx1ZXMgd2hpY2ggY2FuIGJlIHNldCB0aHJvdWdoIHRoZQotICAgKiBHT2JqZWN0IHByb3BlcnRpZXMuCi0gICAqCi0gICAqIFRoaXMgY2FuIGJlIHVzZWQgYXMgYW4gaW5kaWNhdG9yIG9mIHByZS1yb2xsLiAKLSAgICovCi0gIGdzdF9tdWx0aV9xdWV1ZV9zaWduYWxzW1NJR05BTF9PVkVSUlVOXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvdmVycnVuIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0ZJUlNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RNdWx0aVF1ZXVlQ2xhc3MsIG92ZXJydW4pLCBOVUxMLCBOVUxMLAotICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKLQotICAvKiBQUk9QRVJUSUVTICovCi0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU0laRV9CWVRFUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LXNpemUtYnl0ZXMiLCAiTWF4LiBzaXplIChrQikiLAotICAgICAgICAgICJNYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMsIDA9ZGlzYWJsZSkiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9NQVhfU0laRV9CWVRFUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU0laRV9CVUZGRVJTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtc2l6ZS1idWZmZXJzIiwgIk1heC4gc2l6ZSAoYnVmZmVycykiLAotICAgICAgICAgICJNYXguIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZSAoMD1kaXNhYmxlKSIsIDAsIEdfTUFYVUlOVCwKLSAgICAgICAgICBERUZBVUxUX01BWF9TSVpFX0JVRkZFUlMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJtYXgtc2l6ZS10aW1lIiwgIk1heC4gc2l6ZSAobnMpIiwKLSAgICAgICAgICAiTWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGluIG5zLCAwPWRpc2FibGUpIiwgMCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfU0laRV9USU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0VYVFJBX1NJWkVfQllURVMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImV4dHJhLXNpemUtYnl0ZXMiLCAiRXh0cmEgU2l6ZSAoa0IpIiwKLSAgICAgICAgICAiQW1vdW50IG9mIGRhdGEgdGhlIHF1ZXVlcyBjYW4gZ3JvdyBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSAoYnl0ZXMsIDA9ZGlzYWJsZSkiCi0gICAgICAgICAgIiAoTk9UIElNUExFTUVOVEVEKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX0VYVFJBX1NJWkVfQllURVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRVhUUkFfU0laRV9CVUZGRVJTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJleHRyYS1zaXplLWJ1ZmZlcnMiLCAiRXh0cmEgU2l6ZSAoYnVmZmVycykiLAotICAgICAgICAgICJBbW91bnQgb2YgYnVmZmVycyB0aGUgcXVldWVzIGNhbiBncm93IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5ICgwPWRpc2FibGUpIgotICAgICAgICAgICIgKE5PVCBJTVBMRU1FTlRFRCkiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9FWFRSQV9TSVpFX0JVRkZFUlMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRVhUUkFfU0laRV9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImV4dHJhLXNpemUtdGltZSIsICJFeHRyYSBTaXplIChucykiLAotICAgICAgICAgICJBbW91bnQgb2YgdGltZSB0aGUgcXVldWVzIGNhbiBncm93IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5IChpbiBucywgMD1kaXNhYmxlKSIKLSAgICAgICAgICAiIChOT1QgSU1QTEVNRU5URUQpIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgREVGQVVMVF9FWFRSQV9TSVpFX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdE11bHRpUXVldWU6dXNlLWJ1ZmZlcmluZwotICAgKiAKLSAgICogRW5hYmxlIHRoZSBidWZmZXJpbmcgb3B0aW9uIGluIG11bHRpcXVldWUgc28gdGhhdCBCVUZGRVJJTkcgbWVzc2FnZXMgYXJlCi0gICAqIGVtaXR0ZWQgYmFzZWQgb24gbG93LS9oaWdoLXBlcmNlbnQgdGhyZXNob2xkcy4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVVNFX0JVRkZFUklORywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgidXNlLWJ1ZmZlcmluZyIsICJVc2UgYnVmZmVyaW5nIiwKLSAgICAgICAgICAiRW1pdCBHU1RfTUVTU0FHRV9CVUZGRVJJTkcgYmFzZWQgb24gbG93LS9oaWdoLXBlcmNlbnQgdGhyZXNob2xkcyIsCi0gICAgICAgICAgREVGQVVMVF9VU0VfQlVGRkVSSU5HLCBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdE11bHRpUXVldWU6bG93LXBlcmNlbnQKLSAgICogCi0gICAqIExvdyB0aHJlc2hvbGQgcGVyY2VudCBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT1dfUEVSQ0VOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJsb3ctcGVyY2VudCIsICJMb3cgcGVyY2VudCIsCi0gICAgICAgICAgIkxvdyB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBzdGFydC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZSAiCi0gICAgICAgICAgIihEZXByZWNhdGVkOiB1c2UgbG93LXdhdGVybWFyayBpbnN0ZWFkKSIsCi0gICAgICAgICAgMCwgMTAwLCBERUZBVUxUX0xPV19XQVRFUk1BUksgKiAxMDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RNdWx0aVF1ZXVlOmhpZ2gtcGVyY2VudAotICAgKiAKLSAgICogSGlnaCB0aHJlc2hvbGQgcGVyY2VudCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSElHSF9QRVJDRU5ULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImhpZ2gtcGVyY2VudCIsICJIaWdoIHBlcmNlbnQiLAotICAgICAgICAgICJIaWdoIHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZSAiCi0gICAgICAgICAgIihEZXByZWNhdGVkOiB1c2UgaGlnaC13YXRlcm1hcmsgaW5zdGVhZCkiLAotICAgICAgICAgIDAsIDEwMCwgREVGQVVMVF9ISUdIX1dBVEVSTUFSSyAqIDEwMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdE11bHRpUXVldWU6bG93LXdhdGVybWFyawotICAgKgotICAgKiBMb3cgdGhyZXNob2xkIHdhdGVybWFyayBmb3IgYnVmZmVyaW5nIHRvIHN0YXJ0LgotICAgKgotICAgKiBTaW5jZTogMS4xMAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT1dfV0FURVJNQVJLLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImxvdy13YXRlcm1hcmsiLCAiTG93IHdhdGVybWFyayIsCi0gICAgICAgICAgIkxvdyB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBzdGFydC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZSIsCi0gICAgICAgICAgMC4wLCAxLjAsIERFRkFVTFRfTE9XX1dBVEVSTUFSSywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdE11bHRpUXVldWU6aGlnaC13YXRlcm1hcmsKLSAgICoKLSAgICogSGlnaCB0aHJlc2hvbGQgd2F0ZXJtYXJrIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLgotICAgKgotICAgKiBTaW5jZTogMS4xMAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ISUdIX1dBVEVSTUFSSywKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJoaWdoLXdhdGVybWFyayIsICJIaWdoIHdhdGVybWFyayIsCi0gICAgICAgICAgIkhpZ2ggdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLiBPbmx5IHVzZWQgaWYgdXNlLWJ1ZmZlcmluZyBpcyBUcnVlIiwKLSAgICAgICAgICAwLjAsIDEuMCwgREVGQVVMVF9ISUdIX1dBVEVSTUFSSywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0TXVsdGlRdWV1ZTpzeW5jLWJ5LXJ1bm5pbmctdGltZQotICAgKiAKLSAgICogSWYgZW5hYmxlZCBtdWx0aXF1ZXVlIHdpbGwgc3luY2hyb25pemUgZGVhY3RpdmF0ZWQgb3Igbm90LWxpbmtlZCBzdHJlYW1zCi0gICAqIHRvIHRoZSBhY3RpdmF0ZWQgYW5kIGxpbmtlZCBzdHJlYW1zIGJ5IHRha2luZyB0aGUgcnVubmluZyB0aW1lLgotICAgKiBPdGhlcndpc2UgbXVsdGlxdWV1ZSB3aWxsIHN5bmNocm9uaXplIHRoZSBkZWFjdGl2YXRlZCBvciBub3QtbGlua2VkCi0gICAqIHN0cmVhbXMgYnkga2VlcGluZyB0aGUgb3JkZXIgaW4gd2hpY2ggYnVmZmVycyBhbmQgZXZlbnRzIGFycml2ZWQgY29tcGFyZWQKLSAgICogdG8gYWN0aXZlIGFuZCBsaW5rZWQgc3RyZWFtcy4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1lOQ19CWV9SVU5OSU5HX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN5bmMtYnktcnVubmluZy10aW1lIiwgIlN5bmMgQnkgUnVubmluZyBUaW1lIiwKLSAgICAgICAgICAiU3luY2hyb25pemUgZGVhY3RpdmF0ZWQgb3Igbm90LWxpbmtlZCBzdHJlYW1zIGJ5IHJ1bm5pbmcgdGltZSIsCi0gICAgICAgICAgREVGQVVMVF9TWU5DX0JZX1JVTk5JTkdfVElNRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VTRV9JTlRFUkxFQVZFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ1c2UtaW50ZXJsZWF2ZSIsICJVc2UgaW50ZXJsZWF2ZSIsCi0gICAgICAgICAgIkFkanVzdCB0aW1lIGxpbWl0cyBiYXNlZCBvbiBpbnB1dCBpbnRlcmxlYXZlIiwKLSAgICAgICAgICBERUZBVUxUX1VTRV9JTlRFUkxFQVZFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VOTElOS0VEX0NBQ0hFX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgidW5saW5rZWQtY2FjaGUtdGltZSIsICJVbmxpbmtlZCBjYWNoZSB0aW1lIChucykiLAotICAgICAgICAgICJFeHRyYSBidWZmZXJpbmcgaW4gdGltZSBmb3IgdW5saW5rZWQgc3RyZWFtcyAoaWYgJ3N5bmMtYnktcnVubmluZy10aW1lJykiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCBERUZBVUxUX1VOTElOS0VEX0NBQ0hFX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9tdWx0aV9xdWV1ZV9maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIk11bHRpUXVldWUiLAotICAgICAgIkdlbmVyaWMiLCAiTXVsdGlwbGUgZGF0YSBxdWV1ZSIsICJFZHdhcmQgSGVydmV5IDxlZHdhcmRAZmx1ZW5kby5jb20+Iik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmN0ZW1wbGF0ZSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfcXVldWVfcmVxdWVzdF9uZXdfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9xdWV1ZV9yZWxlYXNlX3BhZCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX2NoYW5nZV9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlfcXVldWVfaW5pdCAoR3N0TXVsdGlRdWV1ZSAqIG1xdWV1ZSkKLXsKLSAgbXF1ZXVlLT5uYnF1ZXVlcyA9IDA7Ci0gIG1xdWV1ZS0+cXVldWVzID0gTlVMTDsKLQotICBtcXVldWUtPm1heF9zaXplLmJ5dGVzID0gREVGQVVMVF9NQVhfU0laRV9CWVRFUzsKLSAgbXF1ZXVlLT5tYXhfc2l6ZS52aXNpYmxlID0gREVGQVVMVF9NQVhfU0laRV9CVUZGRVJTOwotICBtcXVldWUtPm1heF9zaXplLnRpbWUgPSBERUZBVUxUX01BWF9TSVpFX1RJTUU7Ci0KLSAgbXF1ZXVlLT5leHRyYV9zaXplLmJ5dGVzID0gREVGQVVMVF9FWFRSQV9TSVpFX0JZVEVTOwotICBtcXVldWUtPmV4dHJhX3NpemUudmlzaWJsZSA9IERFRkFVTFRfRVhUUkFfU0laRV9CVUZGRVJTOwotICBtcXVldWUtPmV4dHJhX3NpemUudGltZSA9IERFRkFVTFRfRVhUUkFfU0laRV9USU1FOwotCi0gIG1xdWV1ZS0+dXNlX2J1ZmZlcmluZyA9IERFRkFVTFRfVVNFX0JVRkZFUklORzsKLSAgbXF1ZXVlLT5sb3dfd2F0ZXJtYXJrID0gREVGQVVMVF9MT1dfV0FURVJNQVJLICogTUFYX0JVRkZFUklOR19MRVZFTDsKLSAgbXF1ZXVlLT5oaWdoX3dhdGVybWFyayA9IERFRkFVTFRfSElHSF9XQVRFUk1BUksgKiBNQVhfQlVGRkVSSU5HX0xFVkVMOwotCi0gIG1xdWV1ZS0+c3luY19ieV9ydW5uaW5nX3RpbWUgPSBERUZBVUxUX1NZTkNfQllfUlVOTklOR19USU1FOwotICBtcXVldWUtPnVzZV9pbnRlcmxlYXZlID0gREVGQVVMVF9VU0VfSU5URVJMRUFWRTsKLSAgbXF1ZXVlLT51bmxpbmtlZF9jYWNoZV90aW1lID0gREVGQVVMVF9VTkxJTktFRF9DQUNIRV9USU1FOwotCi0gIG1xdWV1ZS0+Y291bnRlciA9IDE7Ci0gIG1xdWV1ZS0+aGlnaGlkID0gLTE7Ci0gIG1xdWV1ZS0+aGlnaF90aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0KLSAgZ19tdXRleF9pbml0ICgmbXF1ZXVlLT5xbG9jayk7Ci0gIGdfbXV0ZXhfaW5pdCAoJm1xdWV1ZS0+YnVmZmVyaW5nX3Bvc3RfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlfcXVldWVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE11bHRpUXVldWUgKm1xdWV1ZSA9IEdTVF9NVUxUSV9RVUVVRSAob2JqZWN0KTsKLQotICBnX2xpc3RfZm9yZWFjaCAobXF1ZXVlLT5xdWV1ZXMsIChHRnVuYykgZ3N0X3NpbmdsZV9xdWV1ZV9mcmVlLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKG1xdWV1ZS0+cXVldWVzKTsKLSAgbXF1ZXVlLT5xdWV1ZXMgPSBOVUxMOwotICBtcXVldWUtPnF1ZXVlc19jb29raWUrKzsKLQotICAvKiBmcmVlL3VucmVmIGluc3RhbmNlIGRhdGEgKi8KLSAgZ19tdXRleF9jbGVhciAoJm1xdWV1ZS0+cWxvY2spOwotICBnX211dGV4X2NsZWFyICgmbXF1ZXVlLT5idWZmZXJpbmdfcG9zdF9sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLSNkZWZpbmUgU0VUX0NISUxEX1BST1BFUlRZKG1xLGZvcm1hdCkgR19TVE1UX1NUQVJUIHsJICAgICAgICBcCi0gICAgR0xpc3QgKiB0bXAgPSBtcS0+cXVldWVzOwkJCQkJXAotICAgIHdoaWxlICh0bXApIHsJCQkJCQlcCi0gICAgICBHc3RTaW5nbGVRdWV1ZSAqcSA9IChHc3RTaW5nbGVRdWV1ZSopdG1wLT5kYXRhOwkJXAotICAgICAgcS0+bWF4X3NpemUuZm9ybWF0ID0gbXEtPm1heF9zaXplLmZvcm1hdDsgICAgICAgICAgICAgICAgIFwKLSAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKG1xLCBxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZCAocS0+cXVldWUpOyAgICAgICAgICAgICAgICAgXAotICAgICAgdG1wID0gZ19saXN0X25leHQodG1wKTsJCQkJCVwKLSAgICB9OwkJCQkJCQkJXAotfSBHX1NUTVRfRU5ECi0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlfcXVldWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE11bHRpUXVldWUgKm1xID0gR1NUX01VTFRJX1FVRVVFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CWVRFUzoKLSAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7Ci0gICAgICBtcS0+bWF4X3NpemUuYnl0ZXMgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBTRVRfQ0hJTERfUFJPUEVSVFkgKG1xLCBieXRlcyk7Ci0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gICAgICBnc3RfbXVsdGlfcXVldWVfcG9zdF9idWZmZXJpbmcgKG1xKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CVUZGRVJTOgotICAgIHsKLSAgICAgIEdMaXN0ICp0bXA7Ci0gICAgICBnaW50IG5ld19zaXplID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotCi0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotCi0gICAgICBtcS0+bWF4X3NpemUudmlzaWJsZSA9IG5ld19zaXplOwotCi0gICAgICB0bXAgPSBtcS0+cXVldWVzOwotICAgICAgd2hpbGUgKHRtcCkgewotICAgICAgICBHc3REYXRhUXVldWVTaXplIHNpemU7Ci0gICAgICAgIEdzdFNpbmdsZVF1ZXVlICpxID0gKEdzdFNpbmdsZVF1ZXVlICopIHRtcC0+ZGF0YTsKLSAgICAgICAgZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsIChxLT5xdWV1ZSwgJnNpemUpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLCAiUXVldWUgJWQ6IFJlcXVlc3RlZCBidWZmZXJzIHNpemU6ICVkLCIKLSAgICAgICAgICAgICIgY3VycmVudDogJWQsIGN1cnJlbnQgbWF4ICVkIiwgcS0+aWQsIG5ld19zaXplLCBzaXplLnZpc2libGUsCi0gICAgICAgICAgICBxLT5tYXhfc2l6ZS52aXNpYmxlKTsKLQotICAgICAgICAvKiBkbyBub3QgcmVkdWNlIG1heCBzaXplIGJlbG93IGN1cnJlbnQgbGV2ZWwgaWYgdGhlIHNpbmdsZSBxdWV1ZQotICAgICAgICAgKiBoYXMgZ3Jvd24gYmVjYXVzZSBvZiBlbXB0eSBxdWV1ZSAqLwotICAgICAgICBpZiAobmV3X3NpemUgPT0gMCkgewotICAgICAgICAgIHEtPm1heF9zaXplLnZpc2libGUgPSBuZXdfc2l6ZTsKLSAgICAgICAgfSBlbHNlIGlmIChxLT5tYXhfc2l6ZS52aXNpYmxlID09IDApIHsKLSAgICAgICAgICBxLT5tYXhfc2l6ZS52aXNpYmxlID0gTUFYIChuZXdfc2l6ZSwgc2l6ZS52aXNpYmxlKTsKLSAgICAgICAgfSBlbHNlIGlmIChuZXdfc2l6ZSA+IHNpemUudmlzaWJsZSkgewotICAgICAgICAgIHEtPm1heF9zaXplLnZpc2libGUgPSBuZXdfc2l6ZTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVfYnVmZmVyaW5nIChtcSwgcSk7Ci0gICAgICAgIGdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkIChxLT5xdWV1ZSk7Ci0gICAgICAgIHRtcCA9IGdfbGlzdF9uZXh0ICh0bXApOwotICAgICAgfQotCi0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gICAgICBnc3RfbXVsdGlfcXVldWVfcG9zdF9idWZmZXJpbmcgKG1xKTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgotICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgICAgIG1xLT5tYXhfc2l6ZS50aW1lID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0gICAgICBTRVRfQ0hJTERfUFJPUEVSVFkgKG1xLCB0aW1lKTsKLSAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgICAgIGdzdF9tdWx0aV9xdWV1ZV9wb3N0X2J1ZmZlcmluZyAobXEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VYVFJBX1NJWkVfQllURVM6Ci0gICAgICBtcS0+ZXh0cmFfc2l6ZS5ieXRlcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FWFRSQV9TSVpFX0JVRkZFUlM6Ci0gICAgICBtcS0+ZXh0cmFfc2l6ZS52aXNpYmxlID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VYVFJBX1NJWkVfVElNRToKLSAgICAgIG1xLT5leHRyYV9zaXplLnRpbWUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfQlVGRkVSSU5HOgotICAgICAgbXEtPnVzZV9idWZmZXJpbmcgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICByZWNoZWNrX2J1ZmZlcmluZ19zdGF0dXMgKG1xKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT1dfUEVSQ0VOVDoKLSAgICAgIG1xLT5sb3dfd2F0ZXJtYXJrID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSkgKiBCVUZfTEVWRUxfUEVSQ0VOVF9GQUNUT1I7Ci0gICAgICAvKiBSZWNoZWNrIGJ1ZmZlcmluZyBzdGF0dXMgLSB0aGUgbmV3IGxvd193YXRlcm1hcmsgdmFsdWUgbWlnaHQKLSAgICAgICAqIGJlIGFib3ZlIHRoZSBjdXJyZW50IGZpbGwgbGV2ZWwuIElmIHRoZSBvbGQgbG93X3dhdGVybWFyayBvbmUKLSAgICAgICAqIHdhcyBiZWxvdyB0aGUgY3VycmVudCBsZXZlbCwgdGhpcyBtZWFucyB0aGF0IG1xLT5idWZmZXJpbmcgaXMKLSAgICAgICAqIGRpc2FibGVkIGFuZCBuZWVkcyB0byBiZSByZS1lbmFibGVkLiAqLwotICAgICAgcmVjaGVja19idWZmZXJpbmdfc3RhdHVzIChtcSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSElHSF9QRVJDRU5UOgotICAgICAgbXEtPmhpZ2hfd2F0ZXJtYXJrID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSkgKiBCVUZfTEVWRUxfUEVSQ0VOVF9GQUNUT1I7Ci0gICAgICByZWNoZWNrX2J1ZmZlcmluZ19zdGF0dXMgKG1xKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT1dfV0FURVJNQVJLOgotICAgICAgbXEtPmxvd193YXRlcm1hcmsgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKSAqIE1BWF9CVUZGRVJJTkdfTEVWRUw7Ci0gICAgICByZWNoZWNrX2J1ZmZlcmluZ19zdGF0dXMgKG1xKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ISUdIX1dBVEVSTUFSSzoKLSAgICAgIG1xLT5oaWdoX3dhdGVybWFyayA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpICogTUFYX0JVRkZFUklOR19MRVZFTDsKLSAgICAgIHJlY2hlY2tfYnVmZmVyaW5nX3N0YXR1cyAobXEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NZTkNfQllfUlVOTklOR19USU1FOgotICAgICAgbXEtPnN5bmNfYnlfcnVubmluZ190aW1lID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRV9JTlRFUkxFQVZFOgotICAgICAgbXEtPnVzZV9pbnRlcmxlYXZlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VOTElOS0VEX0NBQ0hFX1RJTUU6Ci0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotICAgICAgbXEtPnVubGlua2VkX2NhY2hlX3RpbWUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgICAgIGdzdF9tdWx0aV9xdWV1ZV9wb3N0X2J1ZmZlcmluZyAobXEpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX3F1ZXVlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RNdWx0aVF1ZXVlICptcSA9IEdTVF9NVUxUSV9RVUVVRSAob2JqZWN0KTsKLQotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9FWFRSQV9TSVpFX0JZVEVTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIG1xLT5leHRyYV9zaXplLmJ5dGVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FWFRSQV9TSVpFX0JVRkZFUlM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgbXEtPmV4dHJhX3NpemUudmlzaWJsZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRVhUUkFfU0laRV9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgbXEtPmV4dHJhX3NpemUudGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfQllURVM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgbXEtPm1heF9zaXplLmJ5dGVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CVUZGRVJTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIG1xLT5tYXhfc2l6ZS52aXNpYmxlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgbXEtPm1heF9zaXplLnRpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRV9CVUZGRVJJTkc6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgbXEtPnVzZV9idWZmZXJpbmcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPV19QRVJDRU5UOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgbXEtPmxvd193YXRlcm1hcmsgLyBCVUZfTEVWRUxfUEVSQ0VOVF9GQUNUT1IpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0hJR0hfUEVSQ0VOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIG1xLT5oaWdoX3dhdGVybWFyayAvIEJVRl9MRVZFTF9QRVJDRU5UX0ZBQ1RPUik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTE9XX1dBVEVSTUFSSzoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIG1xLT5sb3dfd2F0ZXJtYXJrIC8KLSAgICAgICAgICAoZ2RvdWJsZSkgTUFYX0JVRkZFUklOR19MRVZFTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSElHSF9XQVRFUk1BUks6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBtcS0+aGlnaF93YXRlcm1hcmsgLwotICAgICAgICAgIChnZG91YmxlKSBNQVhfQlVGRkVSSU5HX0xFVkVMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TWU5DX0JZX1JVTk5JTkdfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBtcS0+c3luY19ieV9ydW5uaW5nX3RpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRV9JTlRFUkxFQVZFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIG1xLT51c2VfaW50ZXJsZWF2ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVU5MSU5LRURfQ0FDSEVfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIG1xLT51bmxpbmtlZF9jYWNoZV90aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci19Ci0KLXN0YXRpYyBHc3RJdGVyYXRvciAqCi1nc3RfbXVsdGlfcXVldWVfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCi17Ci0gIEdzdEl0ZXJhdG9yICppdCA9IE5VTEw7Ci0gIEdzdFBhZCAqb3BhZDsKLSAgR3N0U2luZ2xlUXVldWUgKnNxdWV1ZTsKLSAgR3N0TXVsdGlRdWV1ZSAqbXEgPSBHU1RfTVVMVElfUVVFVUUgKHBhcmVudCk7Ci0gIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0KLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgc3F1ZXVlID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICBpZiAoIXNxdWV1ZSkKLSAgICBnb3RvIG91dDsKLQotICBpZiAoc3F1ZXVlLT5zaW5rcGFkID09IHBhZCkKLSAgICBvcGFkID0gZ3N0X29iamVjdF9yZWYgKHNxdWV1ZS0+c3JjcGFkKTsKLSAgZWxzZSBpZiAoc3F1ZXVlLT5zcmNwYWQgPT0gcGFkKQotICAgIG9wYWQgPSBnc3Rfb2JqZWN0X3JlZiAoc3F1ZXVlLT5zaW5rcGFkKTsKLSAgZWxzZQotICAgIGdvdG8gb3V0OwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfUEFEKTsKLSAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmdmFsLCBvcGFkKTsKLSAgaXQgPSBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoR1NUX1RZUEVfUEFELCAmdmFsKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAob3BhZCk7Ci0KLW91dDoKLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotCi0gIHJldHVybiBpdDsKLX0KLQotCi0vKgotICogR3N0RWxlbWVudCBtZXRob2RzCi0gKi8KLQotc3RhdGljIEdzdFBhZCAqCi1nc3RfbXVsdGlfcXVldWVfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wLAotICAgIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdE11bHRpUXVldWUgKm1xdWV1ZSA9IEdTVF9NVUxUSV9RVUVVRSAoZWxlbWVudCk7Ci0gIEdzdFNpbmdsZVF1ZXVlICpzcXVldWU7Ci0gIEdzdFBhZCAqbmV3X3BhZDsKLSAgZ3VpbnQgdGVtcF9pZCA9IC0xOwotCi0gIGlmIChuYW1lKSB7Ci0gICAgc3NjYW5mIChuYW1lICsgNCwgIl8ldSIsICZ0ZW1wX2lkKTsKLSAgICBHU1RfTE9HX09CSkVDVCAoZWxlbWVudCwgIm5hbWUgOiAlcyAoaWQgJWQpIiwgR1NUX1NUUl9OVUxMIChuYW1lKSwgdGVtcF9pZCk7Ci0gIH0KLQotICAvKiBDcmVhdGUgYSBuZXcgc2luZ2xlIHF1ZXVlLCBhZGQgdGhlIHNpbmsgYW5kIHNvdXJjZSBwYWQgYW5kIHJldHVybiB0aGUgc2luayBwYWQgKi8KLSAgc3F1ZXVlID0gZ3N0X3NpbmdsZV9xdWV1ZV9uZXcgKG1xdWV1ZSwgdGVtcF9pZCk7Ci0KLSAgbmV3X3BhZCA9IHNxdWV1ZSA/IHNxdWV1ZS0+c2lua3BhZCA6IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXF1ZXVlLCAiUmV0dXJuaW5nIHBhZCAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3X3BhZCk7Ci0KLSAgcmV0dXJuIG5ld19wYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlfcXVldWVfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdE11bHRpUXVldWUgKm1xdWV1ZSA9IEdTVF9NVUxUSV9RVUVVRSAoZWxlbWVudCk7Ci0gIEdzdFNpbmdsZVF1ZXVlICpzcSA9IE5VTEw7Ci0gIEdMaXN0ICp0bXA7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGVsZW1lbnQsICJwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcXVldWUpOwotICAvKiBGaW5kIHdoaWNoIHNpbmdsZSBxdWV1ZSBpdCBiZWxvbmdzIHRvLCBrbm93aW5nIHRoYXQgaXQgc2hvdWxkIGJlIGEgc2lua3BhZCAqLwotICBmb3IgKHRtcCA9IG1xdWV1ZS0+cXVldWVzOyB0bXA7IHRtcCA9IGdfbGlzdF9uZXh0ICh0bXApKSB7Ci0gICAgc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOwotCi0gICAgaWYgKHNxLT5zaW5rcGFkID09IHBhZCkKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKCF0bXApIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG1xdWV1ZSwgIlRoYXQgcGFkIGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgZWxlbWVudCA/Pz8iKTsKLSAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcXVldWUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIEZJWE1FOiBUaGUgcmVtb3ZhbCBvZiB0aGUgc2luZ2xlcXVldWUgc2hvdWxkIHByb2JhYmx5IG5vdCBoYXBwZW4gdW50aWwgaXQKLSAgICogZmluaXNoZXMgZHJhaW5pbmcgKi8KLQotICAvKiByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLwotICBtcXVldWUtPnF1ZXVlcyA9IGdfbGlzdF9kZWxldGVfbGluayAobXF1ZXVlLT5xdWV1ZXMsIHRtcCk7Ci0gIG1xdWV1ZS0+cXVldWVzX2Nvb2tpZSsrOwotCi0gIC8qIEZJWE1FIDogcmVjb21wdXRlIG5leHQtbm9uLWxpbmtlZCAqLwotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcXVldWUpOwotCi0gIC8qIGRlbGV0ZSBTaW5nbGVRdWV1ZSAqLwotICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHNxLT5xdWV1ZSwgVFJVRSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcS0+c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3EtPnNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzcS0+c3JjcGFkLCBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzcS0+c2lua3BhZCwgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGVsZW1lbnQsIHNxLT5zcmNwYWQpOwotICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChlbGVtZW50LCBzcS0+c2lua3BhZCk7Ci0gIGdzdF9zaW5nbGVfcXVldWVfZnJlZSAoc3EpOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9tdWx0aV9xdWV1ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RNdWx0aVF1ZXVlICptcXVldWUgPSBHU1RfTVVMVElfUVVFVUUgKGVsZW1lbnQpOwotICBHc3RTaW5nbGVRdWV1ZSAqc3EgPSBOVUxMOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDp7Ci0gICAgICBHTGlzdCAqdG1wOwotCi0gICAgICAvKiBTZXQgYWxsIHBhZHMgdG8gbm9uLWZsdXNoaW5nICovCi0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXF1ZXVlKTsKLSAgICAgIGZvciAodG1wID0gbXF1ZXVlLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKLSAgICAgICAgc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOwotICAgICAgICBzcS0+Zmx1c2hpbmcgPSBGQUxTRTsKLSAgICAgIH0KLQotICAgICAgLyogdGhlIHZpc2libGUgbGltaXQgbWlnaHQgbm90IGhhdmUgYmVlbiBzZXQgb24gc2luZ2xlIHF1ZXVlcyB0aGF0IGhhdmUgZ3Jvd24gYmVjYXVzZSBvZiBvdGhlciBxdWV1ZXVzIHdlcmUgZW1wdHkgKi8KLSAgICAgIFNFVF9DSElMRF9QUk9QRVJUWSAobXF1ZXVlLCB2aXNpYmxlKTsKLQotICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXF1ZXVlKTsKLSAgICAgIGdzdF9tdWx0aV9xdWV1ZV9wb3N0X2J1ZmZlcmluZyAobXF1ZXVlKTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6ewotICAgICAgR0xpc3QgKnRtcDsKLQotICAgICAgLyogVW4td2FpdCBhbGwgd2FpdGluZyBwYWRzICovCi0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXF1ZXVlKTsKLSAgICAgIGZvciAodG1wID0gbXF1ZXVlLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKLSAgICAgICAgc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOwotICAgICAgICBzcS0+Zmx1c2hpbmcgPSBUUlVFOwotICAgICAgICBnX2NvbmRfc2lnbmFsICgmc3EtPnR1cm4pOwotCi0gICAgICAgIHNxLT5sYXN0X3F1ZXJ5ID0gRkFMU0U7Ci0gICAgICAgIGdfY29uZF9zaWduYWwgKCZzcS0+cXVlcnlfaGFuZGxlZCk7Ci0gICAgICB9Ci0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcXVldWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJlc3VsdCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NpbmdsZV9xdWV1ZV9mbHVzaCAoR3N0TXVsdGlRdWV1ZSAqIG1xLCBHc3RTaW5nbGVRdWV1ZSAqIHNxLCBnYm9vbGVhbiBmbHVzaCwKLSAgICBnYm9vbGVhbiBmdWxsKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJmbHVzaCAlcyBxdWV1ZSAlZCIsIChmbHVzaCA/ICJzdGFydCIgOiAic3RvcCIpLAotICAgICAgc3EtPmlkKTsKLQotICBpZiAoZmx1c2gpIHsKLSAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotICAgIHNxLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHNxLT5xdWV1ZSwgVFJVRSk7Ci0KLSAgICBzcS0+Zmx1c2hpbmcgPSBUUlVFOwotCi0gICAgLyogd2FrZSB1cCBub24tbGlua2VkIHRhc2sgKi8KLSAgICBHU1RfTE9HX09CSkVDVCAobXEsICJTaW5nbGVRdWV1ZSAlZCA6IHdha2luZyB1cCBldmVudHVhbGx5IHdhaXRpbmcgdGFzayIsCi0gICAgICAgIHNxLT5pZCk7Ci0gICAgZ19jb25kX3NpZ25hbCAoJnNxLT50dXJuKTsKLSAgICBzcS0+bGFzdF9xdWVyeSA9IEZBTFNFOwotICAgIGdfY29uZF9zaWduYWwgKCZzcS0+cXVlcnlfaGFuZGxlZCk7Ci0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgOiBwYXVzaW5nIHRhc2siLCBzcS0+aWQpOwotICAgIHJlc3VsdCA9IGdzdF9wYWRfcGF1c2VfdGFzayAoc3EtPnNyY3BhZCk7Ci0gICAgc3EtPnNpbmtfdGFpbnRlZCA9IHNxLT5zcmNfdGFpbnRlZCA9IFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3NpbmdsZV9xdWV1ZV9mbHVzaF9xdWV1ZSAoc3EsIGZ1bGwpOwotCi0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmc3EtPnNpbmtfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmc3EtPnNyY19zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIHNxLT5oYXNfc3JjX3NlZ21lbnQgPSBGQUxTRTsKLSAgICAvKiBBbGwgcGFkcyBzdGFydCBvZmYgbm90LWxpbmtlZCBmb3IgYSBzbW9vdGgga2ljay1vZmYgKi8KLSAgICBzcS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgc3EtPnB1c2hlZCA9IEZBTFNFOwotICAgIHNxLT5jdXJfdGltZSA9IDA7Ci0gICAgc3EtPm1heF9zaXplLnZpc2libGUgPSBtcS0+bWF4X3NpemUudmlzaWJsZTsKLSAgICBzcS0+aXNfZW9zID0gRkFMU0U7Ci0gICAgc3EtPm5leHRpZCA9IDA7Ci0gICAgc3EtPm9sZGlkID0gMDsKLSAgICBzcS0+bGFzdF9vbGRpZCA9IEdfTUFYVUlOVDMyOwotICAgIHNxLT5uZXh0X3RpbWUgPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTsKLSAgICBzcS0+bGFzdF90aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gICAgc3EtPmNhY2hlZF9zaW5rdGltZSA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICAgIHNxLT5ncm91cF9oaWdoX3RpbWUgPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTsKLSAgICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHNxLT5xdWV1ZSwgRkFMU0UpOwotCi0gICAgLyogV2Ugd2lsbCBiZWNvbWUgYWN0aXZlIGFnYWluIG9uIHRoZSBuZXh0IGJ1ZmZlci9nYXAgKi8KLSAgICBzcS0+YWN0aXZlID0gRkFMU0U7Ci0KLSAgICAvKiBSZXNldCBoaWdoIHRpbWUgdG8gYmUgcmVjb21wdXRlZCBuZXh0ICovCi0gICAgbXEtPmhpZ2hfdGltZSA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotCi0gICAgc3EtPmZsdXNoaW5nID0gRkFMU0U7Ci0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgOiBzdGFydGluZyB0YXNrIiwgc3EtPmlkKTsKLSAgICByZXN1bHQgPQotICAgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHNxLT5zcmNwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9tdWx0aV9xdWV1ZV9sb29wLAotICAgICAgICBzcS0+c3JjcGFkLCBOVUxMKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBXSVRIIExPQ0sgVEFLRU4gKi8KLXN0YXRpYyBnaW50Ci1nZXRfYnVmZmVyaW5nX2xldmVsIChHc3RTaW5nbGVRdWV1ZSAqIHNxKQotewotICBHc3REYXRhUXVldWVTaXplIHNpemU7Ci0gIGdpbnQgYnVmZmVyaW5nX2xldmVsLCB0bXA7Ci0KLSAgZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsIChzcS0+cXVldWUsICZzaXplKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcS0+bXF1ZXVlLAotICAgICAgInF1ZXVlICVkOiB2aXNpYmxlICV1LyV1LCBieXRlcyAldS8ldSwgdGltZSAlIiBHX0dVSU5UNjRfRk9STUFUICIvJSIKLSAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIHNxLT5pZCwgc2l6ZS52aXNpYmxlLCBzcS0+bWF4X3NpemUudmlzaWJsZSwKLSAgICAgIHNpemUuYnl0ZXMsIHNxLT5tYXhfc2l6ZS5ieXRlcywgc3EtPmN1cl90aW1lLCBzcS0+bWF4X3NpemUudGltZSk7Ci0KLSAgLyogZ2V0IGJ5dGVzIGFuZCB0aW1lIGJ1ZmZlciBsZXZlbHMgYW5kIHRha2UgdGhlIG1heCAqLwotICBpZiAoc3EtPmlzX2VvcyB8fCBzcS0+c3JjcmVzdWx0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQgfHwgc3EtPmlzX3NwYXJzZSkgewotICAgIGJ1ZmZlcmluZ19sZXZlbCA9IE1BWF9CVUZGRVJJTkdfTEVWRUw7Ci0gIH0gZWxzZSB7Ci0gICAgYnVmZmVyaW5nX2xldmVsID0gMDsKLSAgICBpZiAoc3EtPm1heF9zaXplLnRpbWUgPiAwKSB7Ci0gICAgICB0bXAgPQotICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3EtPmN1cl90aW1lLAotICAgICAgICAgIE1BWF9CVUZGRVJJTkdfTEVWRUwsIHNxLT5tYXhfc2l6ZS50aW1lKTsKLSAgICAgIGJ1ZmZlcmluZ19sZXZlbCA9IE1BWCAoYnVmZmVyaW5nX2xldmVsLCB0bXApOwotICAgIH0KLSAgICBpZiAoc3EtPm1heF9zaXplLmJ5dGVzID4gMCkgewotICAgICAgdG1wID0KLSAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzaXplLmJ5dGVzLAotICAgICAgICAgIE1BWF9CVUZGRVJJTkdfTEVWRUwsIHNxLT5tYXhfc2l6ZS5ieXRlcyk7Ci0gICAgICBidWZmZXJpbmdfbGV2ZWwgPSBNQVggKGJ1ZmZlcmluZ19sZXZlbCwgdG1wKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gYnVmZmVyaW5nX2xldmVsOwotfQotCi0vKiBXSVRIIExPQ0sgVEFLRU4gKi8KLXN0YXRpYyB2b2lkCi11cGRhdGVfYnVmZmVyaW5nIChHc3RNdWx0aVF1ZXVlICogbXEsIEdzdFNpbmdsZVF1ZXVlICogc3EpCi17Ci0gIGdpbnQgYnVmZmVyaW5nX2xldmVsLCBwZXJjZW50OwotCi0gIC8qIG5vdGhpbmcgdG8gZG93aGVuIHdlIGFyZSBub3QgaW4gYnVmZmVyaW5nIG1vZGUgKi8KLSAgaWYgKCFtcS0+dXNlX2J1ZmZlcmluZykKLSAgICByZXR1cm47Ci0KLSAgYnVmZmVyaW5nX2xldmVsID0gZ2V0X2J1ZmZlcmluZ19sZXZlbCAoc3EpOwotCi0gIC8qIHNjYWxlIHNvIHRoYXQgaWYgYnVmZmVyaW5nX2xldmVsIGVxdWFscyB0aGUgaGlnaCB3YXRlcm1hcmssCi0gICAqIHRoZSBwZXJjZW50YWdlIGlzIDEwMCUgKi8KLSAgcGVyY2VudCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoYnVmZmVyaW5nX2xldmVsLCAxMDAsIG1xLT5oaWdoX3dhdGVybWFyayk7Ci0gIC8qIGNsaXAgKi8KLSAgaWYgKHBlcmNlbnQgPiAxMDApCi0gICAgcGVyY2VudCA9IDEwMDsKLQotICBpZiAobXEtPmJ1ZmZlcmluZykgewotICAgIGlmIChidWZmZXJpbmdfbGV2ZWwgPj0gbXEtPmhpZ2hfd2F0ZXJtYXJrKSB7Ci0gICAgICBtcS0+YnVmZmVyaW5nID0gRkFMU0U7Ci0gICAgfQotICAgIC8qIG1ha2Ugc3VyZSBpdCBpbmNyZWFzZXMgKi8KLSAgICBwZXJjZW50ID0gTUFYIChtcS0+YnVmZmVyaW5nX3BlcmNlbnQsIHBlcmNlbnQpOwotCi0gICAgU0VUX1BFUkNFTlQgKG1xLCBwZXJjZW50KTsKLSAgfSBlbHNlIHsKLSAgICBHTGlzdCAqaXRlcjsKLSAgICBnYm9vbGVhbiBpc19idWZmZXJpbmcgPSBUUlVFOwotCi0gICAgZm9yIChpdGVyID0gbXEtPnF1ZXVlczsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0IChpdGVyKSkgewotICAgICAgR3N0U2luZ2xlUXVldWUgKm9xID0gKEdzdFNpbmdsZVF1ZXVlICopIGl0ZXItPmRhdGE7Ci0KLSAgICAgIGlmIChnZXRfYnVmZmVyaW5nX2xldmVsIChvcSkgPj0gbXEtPmhpZ2hfd2F0ZXJtYXJrKSB7Ci0gICAgICAgIGlzX2J1ZmZlcmluZyA9IEZBTFNFOwotCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc19idWZmZXJpbmcgJiYgYnVmZmVyaW5nX2xldmVsIDwgbXEtPmxvd193YXRlcm1hcmspIHsKLSAgICAgIG1xLT5idWZmZXJpbmcgPSBUUlVFOwotICAgICAgU0VUX1BFUkNFTlQgKG1xLCBwZXJjZW50KTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aV9xdWV1ZV9wb3N0X2J1ZmZlcmluZyAoR3N0TXVsdGlRdWV1ZSAqIG1xKQotewotICBHc3RNZXNzYWdlICptc2cgPSBOVUxMOwotCi0gIGdfbXV0ZXhfbG9jayAoJm1xLT5idWZmZXJpbmdfcG9zdF9sb2NrKTsKLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgaWYgKG1xLT5idWZmZXJpbmdfcGVyY2VudF9jaGFuZ2VkKSB7Ci0gICAgZ2ludCBwZXJjZW50ID0gbXEtPmJ1ZmZlcmluZ19wZXJjZW50OwotCi0gICAgbXEtPmJ1ZmZlcmluZ19wZXJjZW50X2NoYW5nZWQgPSBGQUxTRTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLCAiR29pbmcgdG8gcG9zdCBidWZmZXJpbmc6ICVkJSUiLCBwZXJjZW50KTsKLSAgICBtc2cgPSBnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nIChHU1RfT0JKRUNUX0NBU1QgKG1xKSwgcGVyY2VudCk7Ci0gIH0KLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotCi0gIGlmIChtc2cgIT0gTlVMTCkKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKG1xKSwgbXNnKTsKLQotICBnX211dGV4X3VubG9jayAoJm1xLT5idWZmZXJpbmdfcG9zdF9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlY2hlY2tfYnVmZmVyaW5nX3N0YXR1cyAoR3N0TXVsdGlRdWV1ZSAqIG1xKQotewotICBpZiAoIW1xLT51c2VfYnVmZmVyaW5nICYmIG1xLT5idWZmZXJpbmcpIHsKLSAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotICAgIG1xLT5idWZmZXJpbmcgPSBGQUxTRTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwKLSAgICAgICAgIkJ1ZmZlcmluZyBwcm9wZXJ0eSBkaXNhYmxlZCwgYnV0IHF1ZXVlIHdhcyBzdGlsbCBidWZmZXJpbmc7ICIKLSAgICAgICAgInNldHRpbmcgYnVmZmVyaW5nIHBlcmNlbnRhZ2UgdG8gMTAwJSUiKTsKLSAgICBTRVRfUEVSQ0VOVCAobXEsIDEwMCk7Ci0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotICB9Ci0KLSAgaWYgKG1xLT51c2VfYnVmZmVyaW5nKSB7Ci0gICAgR0xpc3QgKnRtcDsKLSAgICBnaW50IG9sZF9wZXJjOwotCi0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLQotICAgIC8qIGZvcmNlIGJ1ZmZlcmluZyBwZXJjZW50YWdlIHRvIGJlIHJlY2FsY3VsYXRlZCAqLwotICAgIG9sZF9wZXJjID0gbXEtPmJ1ZmZlcmluZ19wZXJjZW50OwotICAgIG1xLT5idWZmZXJpbmdfcGVyY2VudCA9IDA7Ci0KLSAgICB0bXAgPSBtcS0+cXVldWVzOwotICAgIHdoaWxlICh0bXApIHsKLSAgICAgIEdzdFNpbmdsZVF1ZXVlICpxID0gKEdzdFNpbmdsZVF1ZXVlICopIHRtcC0+ZGF0YTsKLSAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKG1xLCBxKTsKLSAgICAgIGdzdF9kYXRhX3F1ZXVlX2xpbWl0c19jaGFuZ2VkIChxLT5xdWV1ZSk7Ci0gICAgICB0bXAgPSBnX2xpc3RfbmV4dCAodG1wKTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwKLSAgICAgICAgIlJlY2FsY3VsYXRlZCBidWZmZXJpbmcgcGVyY2VudGFnZTogb2xkOiAlZCUlIG5ldzogJWQlJSIsCi0gICAgICAgIG9sZF9wZXJjLCBtcS0+YnVmZmVyaW5nX3BlcmNlbnQpOwotCi0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotICB9Ci0KLSAgZ3N0X211bHRpX3F1ZXVlX3Bvc3RfYnVmZmVyaW5nIChtcSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYWxjdWxhdGVfaW50ZXJsZWF2ZSAoR3N0TXVsdGlRdWV1ZSAqIG1xKQotewotICBHc3RDbG9ja1RpbWVEaWZmIGxvdywgaGlnaDsKLSAgR3N0Q2xvY2tUaW1lIGludGVybGVhdmU7Ci0gIEdMaXN0ICp0bXA7Ci0KLSAgbG93ID0gaGlnaCA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICBpbnRlcmxlYXZlID0gbXEtPmludGVybGVhdmU7Ci0gIC8qIEdvIG92ZXIgYWxsIHNpbmdsZSBxdWV1ZXMgYW5kIGNhbGN1bGF0ZSBsb3dlc3QvaGlnaGVzdCB2YWx1ZSAqLwotICBmb3IgKHRtcCA9IG1xLT5xdWV1ZXM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KSB7Ci0gICAgR3N0U2luZ2xlUXVldWUgKnNxID0gKEdzdFNpbmdsZVF1ZXVlICopIHRtcC0+ZGF0YTsKLSAgICAvKiBJZ25vcmUgc3BhcnNlIHN0cmVhbXMgZm9yIGludGVybGVhdmUgY2FsY3VsYXRpb24gKi8KLSAgICBpZiAoc3EtPmlzX3NwYXJzZSkKLSAgICAgIGNvbnRpbnVlOwotICAgIC8qIElmIGEgc3RyZWFtIGlzIG5vdCBhY3RpdmUgeWV0IChoYXNuJ3QgcmVjZWl2ZWQgYW55IGJ1ZmZlcnMpLCBzZXQKLSAgICAgKiBhIG1heGltdW0gaW50ZXJsZWF2ZSB0byBhbGxvdyBpdCB0byByZWNlaXZlIG1vcmUgZGF0YSAqLwotICAgIGlmICghc3EtPmFjdGl2ZSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKG1xLAotICAgICAgICAgICJxdWV1ZSAlZCBpcyBub3QgYWN0aXZlIHlldCwgZm9yY2luZyBpbnRlcmxlYXZlIHRvIDVzIiwgc3EtPmlkKTsKLSAgICAgIG1xLT5pbnRlcmxlYXZlID0gNSAqIEdTVF9TRUNPTkQ7Ci0gICAgICAvKiBVcGRhdGUgbWF4LXNpemUgdGltZSAqLwotICAgICAgbXEtPm1heF9zaXplLnRpbWUgPSBtcS0+aW50ZXJsZWF2ZTsKLSAgICAgIFNFVF9DSElMRF9QUk9QRVJUWSAobXEsIHRpbWUpOwotICAgICAgZ290byBiZWFjaDsKLSAgICB9Ci0gICAgaWYgKEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAoc3EtPmNhY2hlZF9zaW5rdGltZSkpIHsKLSAgICAgIGlmIChsb3cgPT0gR1NUX0NMT0NLX1NUSU1FX05PTkUgfHwgc3EtPmNhY2hlZF9zaW5rdGltZSA8IGxvdykKLSAgICAgICAgbG93ID0gc3EtPmNhY2hlZF9zaW5rdGltZTsKLSAgICAgIGlmIChoaWdoID09IEdTVF9DTE9DS19TVElNRV9OT05FIHx8IHNxLT5jYWNoZWRfc2lua3RpbWUgPiBoaWdoKQotICAgICAgICBoaWdoID0gc3EtPmNhY2hlZF9zaW5rdGltZTsKLSAgICB9Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG1xLAotICAgICAgICAicXVldWUgJWQgLCBzaW5rdGltZTolIiBHU1RfU1RJTUVfRk9STUFUICIgbG93OiUiIEdTVF9TVElNRV9GT1JNQVQKLSAgICAgICAgIiBoaWdoOiUiIEdTVF9TVElNRV9GT1JNQVQsIHNxLT5pZCwKLSAgICAgICAgR1NUX1NUSU1FX0FSR1MgKHNxLT5jYWNoZWRfc2lua3RpbWUpLCBHU1RfU1RJTUVfQVJHUyAobG93KSwKLSAgICAgICAgR1NUX1NUSU1FX0FSR1MgKGhpZ2gpKTsKLSAgfQotCi0gIGlmIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKGxvdykgJiYgR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChoaWdoKSkgewotICAgIGludGVybGVhdmUgPSBoaWdoIC0gbG93OwotICAgIC8qIFBhZGRpbmcgb2YgaW50ZXJsZWF2ZSBhbmQgbWluaW11bSB2YWx1ZSAqLwotICAgIC8qIEZJWE1FIDogTWFrZSB0aGUgbWluaW11bSB0aW1lIGludGVybGVhdmUgYSBwcm9wZXJ0eSAqLwotICAgIGludGVybGVhdmUgPSAoMTUwICogaW50ZXJsZWF2ZSAvIDEwMCkgKyAyNTAgKiBHU1RfTVNFQ09ORDsKLQotICAgIC8qIFVwZGF0ZSB0aGUgc3RvcmVkIGludGVybGVhdmUgaWY6Ci0gICAgICogKiBObyBkYXRhIGhhcyBhcnJpdmVkIHlldCAoaGlnaCA9PSBsb3cpCi0gICAgICogKiBPciBpdCB3ZW50IGhpZ2hlcgotICAgICAqICogT3IgaXQgd2VudCBsb3dlciBhbmQgd2UndmUgZ29uZSBwYXN0IHRoZSBwcmV2aW91cyBpbnRlcmxlYXZlIG5lZWRlZCAqLwotICAgIGlmIChoaWdoID09IGxvdyB8fCBpbnRlcmxlYXZlID4gbXEtPmludGVybGVhdmUgfHwKLSAgICAgICAgKChtcS0+bGFzdF9pbnRlcmxlYXZlX3VwZGF0ZSArICgyICogTUlOIChHU1RfU0VDT05ELAotICAgICAgICAgICAgICAgICAgICAgICAgbXEtPmludGVybGVhdmUpKSA8IGxvdykKLSAgICAgICAgICAgICYmIGludGVybGVhdmUgPCAobXEtPmludGVybGVhdmUgKiAzIC8gNCkpKSB7Ci0gICAgICAvKiBVcGRhdGUgdGhlIGludGVybGVhdmUgKi8KLSAgICAgIG1xLT5pbnRlcmxlYXZlID0gaW50ZXJsZWF2ZTsKLSAgICAgIG1xLT5sYXN0X2ludGVybGVhdmVfdXBkYXRlID0gaGlnaDsKLSAgICAgIC8qIFVwZGF0ZSBtYXgtc2l6ZSB0aW1lICovCi0gICAgICBtcS0+bWF4X3NpemUudGltZSA9IG1xLT5pbnRlcmxlYXZlOwotICAgICAgU0VUX0NISUxEX1BST1BFUlRZIChtcSwgdGltZSk7Ci0gICAgfQotICB9Ci0KLWJlYWNoOgotICBHU1RfREVCVUdfT0JKRUNUIChtcSwKLSAgICAgICJsb3c6JSIgR1NUX1NUSU1FX0ZPUk1BVCAiIGhpZ2g6JSIgR1NUX1NUSU1FX0ZPUk1BVCAiIGludGVybGVhdmU6JSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIG1xLT5pbnRlcmxlYXZlOiUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiBsYXN0X2ludGVybGVhdmVfdXBkYXRlOiUiIEdTVF9TVElNRV9GT1JNQVQsIEdTVF9TVElNRV9BUkdTIChsb3cpLAotICAgICAgR1NUX1NUSU1FX0FSR1MgKGhpZ2gpLCBHU1RfVElNRV9BUkdTIChpbnRlcmxlYXZlKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKG1xLT5pbnRlcmxlYXZlKSwKLSAgICAgIEdTVF9TVElNRV9BUkdTIChtcS0+bGFzdF9pbnRlcmxlYXZlX3VwZGF0ZSkpOwotfQotCi0KLS8qIGNhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHJ1bm5pbmcgdGltZSBvbiB0aGUgc2luayBhbmQgc3JjIG9mIHRoZSBxdWV1ZS4KLSAqIFRoaXMgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lIGluIHRoZSBxdWV1ZS4gCi0gKiBXSVRIIExPQ0sgVEFLRU4gKi8KLXN0YXRpYyB2b2lkCi11cGRhdGVfdGltZV9sZXZlbCAoR3N0TXVsdGlRdWV1ZSAqIG1xLCBHc3RTaW5nbGVRdWV1ZSAqIHNxKQotewotICBHc3RDbG9ja1RpbWVEaWZmIHNpbmtfdGltZSwgc3JjX3RpbWU7Ci0KLSAgaWYgKHNxLT5zaW5rX3RhaW50ZWQpIHsKLSAgICBzaW5rX3RpbWUgPSBzcS0+c2lua3RpbWUgPSBteV9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNxLT5zaW5rX3NlZ21lbnQsCi0gICAgICAgIHNxLT5zaW5rX3NlZ21lbnQucG9zaXRpb24pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCi0gICAgICAgICJxdWV1ZSAlZCBzaW5rX3NlZ21lbnQucG9zaXRpb246JSIgR1NUX1RJTUVfRk9STUFUICIsIHNpbmtfdGltZTolIgotICAgICAgICBHU1RfU1RJTUVfRk9STUFULCBzcS0+aWQsIEdTVF9USU1FX0FSR1MgKHNxLT5zaW5rX3NlZ21lbnQucG9zaXRpb24pLAotICAgICAgICBHU1RfU1RJTUVfQVJHUyAoc2lua190aW1lKSk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoc3EtPmxhc3RfdGltZSA9PSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSkpIHsKLSAgICAgIC8qIElmIHRoZSBzaW5nbGUgcXVldWUgc3RpbGwgZG9lc24ndCBoYXZlIGEgbGFzdF90aW1lIHNldCwgdGhpcyBtZWFucwotICAgICAgICogdGhhdCBub3RoaW5nIGhhcyBiZWVuIHB1c2hlZCBvdXQgeWV0LgotICAgICAgICogSW4gb3JkZXIgZm9yIHRoZSBoaWdoX3RpbWUgY29tcHV0YXRpb24gdG8gYmUgYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlLAotICAgICAgICogd2Ugc2V0IHRoZSBsYXN0X3RpbWUgKi8KLSAgICAgIHNxLT5sYXN0X3RpbWUgPSBzaW5rX3RpbWU7Ci0gICAgfQotICAgIGlmIChHX1VOTElLRUxZIChzaW5rX3RpbWUgIT0gR1NUX0NMT0NLX1NUSU1FX05PTkUpKSB7Ci0gICAgICAvKiBpZiB3ZSBoYXZlIGEgdGltZSwgd2UgYmVjb21lIHVudGFpbnRlZCBhbmQgdXNlIHRoZSB0aW1lICovCi0gICAgICBzcS0+c2lua190YWludGVkID0gRkFMU0U7Ci0gICAgICBpZiAobXEtPnVzZV9pbnRlcmxlYXZlKSB7Ci0gICAgICAgIHNxLT5jYWNoZWRfc2lua3RpbWUgPSBzaW5rX3RpbWU7Ci0gICAgICAgIGNhbGN1bGF0ZV9pbnRlcmxlYXZlIChtcSk7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UKLSAgICBzaW5rX3RpbWUgPSBzcS0+c2lua3RpbWU7Ci0KLSAgaWYgKHNxLT5zcmNfdGFpbnRlZCkgewotICAgIEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0gICAgZ2ludDY0IHBvc2l0aW9uOwotCi0gICAgaWYgKHNxLT5oYXNfc3JjX3NlZ21lbnQpIHsKLSAgICAgIHNlZ21lbnQgPSAmc3EtPnNyY19zZWdtZW50OwotICAgICAgcG9zaXRpb24gPSBzcS0+c3JjX3NlZ21lbnQucG9zaXRpb247Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qCi0gICAgICAgKiBJZiB0aGUgc3JjIHBhZCBoYWQgbm8gc2VnbWVudCB5ZXQsIHVzZSB0aGUgc2luayBzZWdtZW50Ci0gICAgICAgKiB0byBhdm9pZCBzaWduYWxsaW5nIG92ZXJydW4gaWYgdGhlIHJlY2VpdmVkIHNpbmsgc2VnbWVudCBoYXMgYQotICAgICAgICogYSBwb3NpdGlvbiA+IG1heC1zaXplLXRpbWUgd2hpbGUgdGhlIHNyYyBwYWQgdGltZSB3b3VsZCBiZSB0aGUgZGVmYXVsdD0wCi0gICAgICAgKgotICAgICAgICogVGhpcyBjYW4gaGFwcGVuIHdoZW4gc3dpdGNoaW5nIHBhZHMgb24gY2hhaW5lZC9hZGFwdGl2ZSBzdHJlYW1zIGFuZCB0aGUKLSAgICAgICAqIG5ldyBjaGFpbiBoYXMgYSBzZWdtZW50IHdpdGggYSBtdWNoIGxhcmdlciBwb3NpdGlvbgotICAgICAgICovCi0gICAgICBzZWdtZW50ID0gJnNxLT5zaW5rX3NlZ21lbnQ7Ci0gICAgICBwb3NpdGlvbiA9IHNxLT5zaW5rX3NlZ21lbnQucG9zaXRpb247Ci0gICAgfQotCi0gICAgc3JjX3RpbWUgPSBzcS0+c3JjdGltZSA9IG15X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChzZWdtZW50LCBwb3NpdGlvbik7Ci0gICAgLyogaWYgd2UgaGF2ZSBhIHRpbWUsIHdlIGJlY29tZSB1bnRhaW50ZWQgYW5kIHVzZSB0aGUgdGltZSAqLwotICAgIGlmIChHX1VOTElLRUxZIChzcmNfdGltZSAhPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSkpIHsKLSAgICAgIHNxLT5zcmNfdGFpbnRlZCA9IEZBTFNFOwotICAgIH0KLSAgfSBlbHNlCi0gICAgc3JjX3RpbWUgPSBzcS0+c3JjdGltZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChtcSwKLSAgICAgICJxdWV1ZSAlZCwgc2luayAlIiBHU1RfU1RJTUVfRk9STUFUICIsIHNyYyAlIiBHU1RfU1RJTUVfRk9STUFULCBzcS0+aWQsCi0gICAgICBHU1RfU1RJTUVfQVJHUyAoc2lua190aW1lKSwgR1NUX1NUSU1FX0FSR1MgKHNyY190aW1lKSk7Ci0KLSAgLyogVGhpcyBhbGxvd3MgZm9yIHN0cmVhbXMgd2l0aCBvdXQgb2Ygb3JkZXIgdGltZXN0YW1waW5nIC0gc29tZXRpbWVzIHRoZQotICAgKiBlbWVyZ2luZyB0aW1lc3RhbXAgaXMgbGF0ZXIgdGhhbiB0aGUgYXJyaXZpbmcgb25lKHMpICovCi0gIGlmIChHX0xJS0VMWSAoR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChzaW5rX3RpbWUpICYmCi0gICAgICAgICAgR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChzcmNfdGltZSkgJiYgc2lua190aW1lID4gc3JjX3RpbWUpKQotICAgIHNxLT5jdXJfdGltZSA9IHNpbmtfdGltZSAtIHNyY190aW1lOwotICBlbHNlCi0gICAgc3EtPmN1cl90aW1lID0gMDsKLQotICAvKiB1cGRhdGluZyB0aGUgdGltZSBsZXZlbCBjYW4gY2hhbmdlIHRoZSBidWZmZXJpbmcgc3RhdGUgKi8KLSAgdXBkYXRlX2J1ZmZlcmluZyAobXEsIHNxKTsKLQotICByZXR1cm47Ci19Ci0KLS8qIHRha2UgYSBTRUdNRU5UIGV2ZW50IGFuZCBhcHBseSB0aGUgdmFsdWVzIHRvIHNlZ21lbnQsIHVwZGF0aW5nIHRoZSB0aW1lCi0gKiBsZXZlbCBvZiBxdWV1ZS4gKi8KLXN0YXRpYyB2b2lkCi1hcHBseV9zZWdtZW50IChHc3RNdWx0aVF1ZXVlICogbXEsIEdzdFNpbmdsZVF1ZXVlICogc3EsIEdzdEV2ZW50ICogZXZlbnQsCi0gICAgR3N0U2VnbWVudCAqIHNlZ21lbnQpCi17Ci0gIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCBzZWdtZW50KTsKLQotICAvKiBub3cgY29uZmlndXJlIHRoZSB2YWx1ZXMsIHdlIHVzZSB0aGVzZSB0byB0cmFjayB0aW1lc3RhbXBzIG9uIHRoZQotICAgKiBzaW5rcGFkLiAqLwotICBpZiAoc2VnbWVudC0+Zm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgIC8qIG5vbi10aW1lIGZvcm1hdCwgcHJldGVudCB0aGUgY3VycmVudCB0aW1lIHNlZ21lbnQgaXMgY2xvc2VkIHdpdGggYQotICAgICAqIDAgc3RhcnQgYW5kIHVua25vd24gc3RvcCB0aW1lLiAqLwotICAgIHNlZ21lbnQtPmZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKLSAgICBzZWdtZW50LT5zdGFydCA9IDA7Ci0gICAgc2VnbWVudC0+c3RvcCA9IC0xOwotICAgIHNlZ21lbnQtPnRpbWUgPSAwOwotICB9Ci0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7Ci0KLSAgLyogTWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBpbml0aWFsIHNlZ21lbnQgcG9zaXRpb24gKGFuZCBub3QgZ2FyYmFnZQotICAgKiBmcm9tIHVwc3RyZWFtKSAqLwotICBpZiAoc2VnbWVudC0+cmF0ZSA+IDAuMCkKLSAgICBzZWdtZW50LT5wb3NpdGlvbiA9IHNlZ21lbnQtPnN0YXJ0OwotICBlbHNlCi0gICAgc2VnbWVudC0+cG9zaXRpb24gPSBzZWdtZW50LT5zdG9wOwotICBpZiAoc2VnbWVudCA9PSAmc3EtPnNpbmtfc2VnbWVudCkKLSAgICBzcS0+c2lua190YWludGVkID0gVFJVRTsKLSAgZWxzZSB7Ci0gICAgc3EtPmhhc19zcmNfc2VnbWVudCA9IFRSVUU7Ci0gICAgc3EtPnNyY190YWludGVkID0gVFJVRTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG1xLAotICAgICAgInF1ZXVlICVkLCBjb25maWd1cmVkIFNFR01FTlQgJSIgR1NUX1NFR01FTlRfRk9STUFULCBzcS0+aWQsIHNlZ21lbnQpOwotCi0gIC8qIHNlZ21lbnQgY2FuIHVwZGF0ZSB0aGUgdGltZSBsZXZlbCBvZiB0aGUgcXVldWUgKi8KLSAgdXBkYXRlX3RpbWVfbGV2ZWwgKG1xLCBzcSk7Ci0KLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotICBnc3RfbXVsdGlfcXVldWVfcG9zdF9idWZmZXJpbmcgKG1xKTsKLX0KLQotLyogdGFrZSBhIGJ1ZmZlciBhbmQgdXBkYXRlIHNlZ21lbnQsIHVwZGF0aW5nIHRoZSB0aW1lIGxldmVsIG9mIHRoZSBxdWV1ZS4gKi8KLXN0YXRpYyB2b2lkCi1hcHBseV9idWZmZXIgKEdzdE11bHRpUXVldWUgKiBtcSwgR3N0U2luZ2xlUXVldWUgKiBzcSwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwKLSAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIEdzdFNlZ21lbnQgKiBzZWdtZW50KQotewotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotCi0gIC8qIGlmIG5vIHRpbWVzdGFtcCBpcyBzZXQsIGFzc3VtZSBpdCdzIGNvbnRpbnVvdXMgd2l0aCB0aGUgcHJldmlvdXMgCi0gICAqIHRpbWUgKi8KLSAgaWYgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgIHRpbWVzdGFtcCA9IHNlZ21lbnQtPnBvc2l0aW9uOwotCi0gIC8qIGFkZCBkdXJhdGlvbiAqLwotICBpZiAoZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICB0aW1lc3RhbXAgKz0gZHVyYXRpb247Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJxdWV1ZSAlZCwgJXMgcG9zaXRpb24gdXBkYXRlZCB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBzcS0+aWQsIHNlZ21lbnQgPT0gJnNxLT5zaW5rX3NlZ21lbnQgPyAic2luayIgOiAic3JjIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIHNlZ21lbnQtPnBvc2l0aW9uID0gdGltZXN0YW1wOwotCi0gIGlmIChzZWdtZW50ID09ICZzcS0+c2lua19zZWdtZW50KQotICAgIHNxLT5zaW5rX3RhaW50ZWQgPSBUUlVFOwotICBlbHNlCi0gICAgc3EtPnNyY190YWludGVkID0gVFJVRTsKLQotICAvKiBjYWxjIGRpZmYgd2l0aCBvdGhlciBlbmQgKi8KLSAgdXBkYXRlX3RpbWVfbGV2ZWwgKG1xLCBzcSk7Ci0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgZ3N0X211bHRpX3F1ZXVlX3Bvc3RfYnVmZmVyaW5nIChtcSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcHBseV9nYXAgKEdzdE11bHRpUXVldWUgKiBtcSwgR3N0U2luZ2xlUXVldWUgKiBzcSwgR3N0RXZlbnQgKiBldmVudCwKLSAgICBHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotCi0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7Ci0KLSAgZ3N0X2V2ZW50X3BhcnNlX2dhcCAoZXZlbnQsICZ0aW1lc3RhbXAsICZkdXJhdGlvbik7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKSB7Ci0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkgewotICAgICAgdGltZXN0YW1wICs9IGR1cmF0aW9uOwotICAgIH0KLQotICAgIHNlZ21lbnQtPnBvc2l0aW9uID0gdGltZXN0YW1wOwotCi0gICAgaWYgKHNlZ21lbnQgPT0gJnNxLT5zaW5rX3NlZ21lbnQpCi0gICAgICBzcS0+c2lua190YWludGVkID0gVFJVRTsKLSAgICBlbHNlCi0gICAgICBzcS0+c3JjX3RhaW50ZWQgPSBUUlVFOwotCi0gICAgLyogY2FsYyBkaWZmIHdpdGggb3RoZXIgZW5kICovCi0gICAgdXBkYXRlX3RpbWVfbGV2ZWwgKG1xLCBzcSk7Ci0gIH0KLQotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gIGdzdF9tdWx0aV9xdWV1ZV9wb3N0X2J1ZmZlcmluZyAobXEpOwotfQotCi1zdGF0aWMgR3N0Q2xvY2tUaW1lRGlmZgotZ2V0X3J1bm5pbmdfdGltZSAoR3N0U2VnbWVudCAqIHNlZ21lbnQsIEdzdE1pbmlPYmplY3QgKiBvYmplY3QsIGdib29sZWFuIGVuZCkKLXsKLSAgR3N0Q2xvY2tUaW1lRGlmZiB0aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0KLSAgaWYgKEdTVF9JU19CVUZGRVIgKG9iamVjdCkpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZiA9IEdTVF9CVUZGRVJfQ0FTVCAob2JqZWN0KTsKLSAgICBHc3RDbG9ja1RpbWUgYnRpbWUgPSBHU1RfQlVGRkVSX0RUU19PUl9QVFMgKGJ1Zik7Ci0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGJ0aW1lKSkgewotICAgICAgaWYgKGVuZCAmJiBHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWYpKQotICAgICAgICBidGltZSArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOwotICAgICAgaWYgKGJ0aW1lID4gc2VnbWVudC0+c3RvcCkKLSAgICAgICAgYnRpbWUgPSBzZWdtZW50LT5zdG9wOwotICAgICAgdGltZSA9IG15X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChzZWdtZW50LCBidGltZSk7Ci0gICAgfQotICB9IGVsc2UgaWYgKEdTVF9JU19CVUZGRVJfTElTVCAob2JqZWN0KSkgewotICAgIEdzdEJ1ZmZlckxpc3QgKmxpc3QgPSBHU1RfQlVGRkVSX0xJU1RfQ0FTVCAob2JqZWN0KTsKLSAgICBnaW50IGksIG47Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0KLSAgICBuID0gZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgR3N0Q2xvY2tUaW1lIGJ0aW1lOwotICAgICAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgaSk7Ci0gICAgICBidGltZSA9IEdTVF9CVUZGRVJfRFRTX09SX1BUUyAoYnVmKTsKLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoYnRpbWUpKSB7Ci0gICAgICAgIGlmIChlbmQgJiYgR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmKSkKLSAgICAgICAgICBidGltZSArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOwotICAgICAgICBpZiAoYnRpbWUgPiBzZWdtZW50LT5zdG9wKQotICAgICAgICAgIGJ0aW1lID0gc2VnbWVudC0+c3RvcDsKLSAgICAgICAgdGltZSA9IG15X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChzZWdtZW50LCBidGltZSk7Ci0gICAgICAgIGlmICghZW5kKQotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0gZWxzZSBpZiAoIWVuZCkgewotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgaWYgKEdTVF9JU19FVkVOVCAob2JqZWN0KSkgewotICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChvYmplY3QpOwotCi0gICAgLyogRm9yIG5ld3NlZ21lbnQgZXZlbnRzIHJldHVybiB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBzdGFydCBwb3NpdGlvbiAqLwotICAgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKSB7Ci0gICAgICBjb25zdCBHc3RTZWdtZW50ICpuZXdfc2VnbWVudDsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmbmV3X3NlZ21lbnQpOwotICAgICAgaWYgKG5ld19zZWdtZW50LT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAgIHRpbWUgPQotICAgICAgICAgICAgbXlfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKChHc3RTZWdtZW50ICopIG5ld19zZWdtZW50LAotICAgICAgICAgICAgbmV3X3NlZ21lbnQtPnN0YXJ0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIHRpbWU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc2luZ2xlX3F1ZXVlX3B1c2hfb25lIChHc3RNdWx0aVF1ZXVlICogbXEsIEdzdFNpbmdsZVF1ZXVlICogc3EsCi0gICAgR3N0TWluaU9iamVjdCAqIG9iamVjdCwgZ2Jvb2xlYW4gKiBhbGxvd19kcm9wKQotewotICBHc3RGbG93UmV0dXJuIHJlc3VsdCA9IHNxLT5zcmNyZXN1bHQ7Ci0KLSAgaWYgKEdTVF9JU19CVUZGRVIgKG9iamVjdCkpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLQotICAgIGJ1ZmZlciA9IEdTVF9CVUZGRVJfQ0FTVCAob2JqZWN0KTsKLSAgICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX0RUU19PUl9QVFMgKGJ1ZmZlcik7Ci0gICAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotCi0gICAgYXBwbHlfYnVmZmVyIChtcSwgc3EsIHRpbWVzdGFtcCwgZHVyYXRpb24sICZzcS0+c3JjX3NlZ21lbnQpOwotCi0gICAgLyogQXBwbHlpbmcgdGhlIGJ1ZmZlciBtYXkgaGF2ZSBtYWRlIHRoZSBxdWV1ZSBub24tZnVsbCBhZ2FpbiwgdW5ibG9jayBpdCBpZiBuZWVkZWQgKi8KLSAgICBnc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZCAoc3EtPnF1ZXVlKTsKLQotICAgIGlmIChHX1VOTElLRUxZICgqYWxsb3dfZHJvcCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLAotICAgICAgICAgICJTaW5nbGVRdWV1ZSAlZCA6IERyb3BwaW5nIEVPUyBidWZmZXIgJXAgd2l0aCB0cyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgc3EtPmlkLCBidWZmZXIsIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCi0gICAgICAgICAgIlNpbmdsZVF1ZXVlICVkIDogUHVzaGluZyBidWZmZXIgJXAgd2l0aCB0cyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgc3EtPmlkLCBidWZmZXIsIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9wdXNoIChzcS0+c3JjcGFkLCBidWZmZXIpOwotICAgIH0KLSAgfSBlbHNlIGlmIChHU1RfSVNfRVZFTlQgKG9iamVjdCkpIHsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBldmVudCA9IEdTVF9FVkVOVF9DQVNUIChvYmplY3QpOwotCi0gICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKCphbGxvd19kcm9wKSkKLSAgICAgICAgICAqYWxsb3dfZHJvcCA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICAgIGFwcGx5X3NlZ21lbnQgKG1xLCBzcSwgZXZlbnQsICZzcS0+c3JjX3NlZ21lbnQpOwotICAgICAgICAvKiBBcHBseWluZyB0aGUgc2VnbWVudCBtYXkgaGF2ZSBtYWRlIHRoZSBxdWV1ZSBub24tZnVsbCBhZ2FpbiwgdW5ibG9jayBpdCBpZiBuZWVkZWQgKi8KLSAgICAgICAgZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQgKHNxLT5xdWV1ZSk7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZICgqYWxsb3dfZHJvcCkpIHsKLSAgICAgICAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgICAqYWxsb3dfZHJvcCA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfRVZFTlRfR0FQOgotICAgICAgICBhcHBseV9nYXAgKG1xLCBzcSwgZXZlbnQsICZzcS0+c3JjX3NlZ21lbnQpOwotICAgICAgICAvKiBBcHBseWluZyB0aGUgZ2FwIG1heSBoYXZlIG1hZGUgdGhlIHF1ZXVlIG5vbi1mdWxsIGFnYWluLCB1bmJsb2NrIGl0IGlmIG5lZWRlZCAqLwotICAgICAgICBnc3RfZGF0YV9xdWV1ZV9saW1pdHNfY2hhbmdlZCAoc3EtPnF1ZXVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoKmFsbG93X2Ryb3ApKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwKLSAgICAgICAgICAiU2luZ2xlUXVldWUgJWQgOiBEcm9wcGluZyBFT1MgZXZlbnQgJXAgb2YgdHlwZSAlcyIsCi0gICAgICAgICAgc3EtPmlkLCBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwKLSAgICAgICAgICAiU2luZ2xlUXVldWUgJWQgOiBQdXNoaW5nIGV2ZW50ICVwIG9mIHR5cGUgJXMiLAotICAgICAgICAgIHNxLT5pZCwgZXZlbnQsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3EtPnNyY3BhZCwgZXZlbnQpOwotICAgIH0KLSAgfSBlbHNlIGlmIChHU1RfSVNfUVVFUlkgKG9iamVjdCkpIHsKLSAgICBHc3RRdWVyeSAqcXVlcnk7Ci0gICAgZ2Jvb2xlYW4gcmVzOwotCi0gICAgcXVlcnkgPSBHU1RfUVVFUllfQ0FTVCAob2JqZWN0KTsKLQotICAgIGlmIChHX1VOTElLRUxZICgqYWxsb3dfZHJvcCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLAotICAgICAgICAgICJTaW5nbGVRdWV1ZSAlZCA6IERyb3BwaW5nIEVPUyBxdWVyeSAlcCIsIHNxLT5pZCwgcXVlcnkpOwotICAgICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzcS0+c3JjcGFkLCBxdWVyeSk7Ci0gICAgfQotCi0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgICBzcS0+bGFzdF9xdWVyeSA9IHJlczsKLSAgICBzcS0+bGFzdF9oYW5kbGVkX3F1ZXJ5ID0gcXVlcnk7Ci0gICAgZ19jb25kX3NpZ25hbCAoJnNxLT5xdWVyeV9oYW5kbGVkKTsKLSAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ193YXJuaW5nICgiVW5leHBlY3RlZCBvYmplY3QgaW4gc2luZ2xlcXVldWUgJXUgKHJlZmNvdW50aW5nIHByb2JsZW0/KSIsCi0gICAgICAgIHNxLT5pZCk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLX0KLQotc3RhdGljIEdzdE1pbmlPYmplY3QgKgotZ3N0X211bHRpX3F1ZXVlX2l0ZW1fc3RlYWxfb2JqZWN0IChHc3RNdWx0aVF1ZXVlSXRlbSAqIGl0ZW0pCi17Ci0gIEdzdE1pbmlPYmplY3QgKnJlczsKLQotICByZXMgPSBpdGVtLT5vYmplY3Q7Ci0gIGl0ZW0tPm9iamVjdCA9IE5VTEw7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aV9xdWV1ZV9pdGVtX2Rlc3Ryb3kgKEdzdE11bHRpUXVldWVJdGVtICogaXRlbSkKLXsKLSAgaWYgKCFpdGVtLT5pc19xdWVyeSAmJiBpdGVtLT5vYmplY3QpCi0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChpdGVtLT5vYmplY3QpOwotICBnX3NsaWNlX2ZyZWUgKEdzdE11bHRpUXVldWVJdGVtLCBpdGVtKTsKLX0KLQotLyogdGFrZXMgb3duZXJzaGlwIG9mIHBhc3NlZCBtaW5pIG9iamVjdCEgKi8KLXN0YXRpYyBHc3RNdWx0aVF1ZXVlSXRlbSAqCi1nc3RfbXVsdGlfcXVldWVfYnVmZmVyX2l0ZW1fbmV3IChHc3RNaW5pT2JqZWN0ICogb2JqZWN0LCBndWludDMyIGN1cmlkKQotewotICBHc3RNdWx0aVF1ZXVlSXRlbSAqaXRlbTsKLQotICBpdGVtID0gZ19zbGljZV9uZXcgKEdzdE11bHRpUXVldWVJdGVtKTsKLSAgaXRlbS0+b2JqZWN0ID0gb2JqZWN0OwotICBpdGVtLT5kZXN0cm95ID0gKEdEZXN0cm95Tm90aWZ5KSBnc3RfbXVsdGlfcXVldWVfaXRlbV9kZXN0cm95OwotICBpdGVtLT5wb3NpZCA9IGN1cmlkOwotICBpdGVtLT5pc19xdWVyeSA9IEdTVF9JU19RVUVSWSAob2JqZWN0KTsKLQotICBpdGVtLT5zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoR1NUX0JVRkZFUl9DQVNUIChvYmplY3QpKTsKLSAgaXRlbS0+ZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChvYmplY3QpOwotICBpZiAoaXRlbS0+ZHVyYXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBpdGVtLT5kdXJhdGlvbiA9IDA7Ci0gIGl0ZW0tPnZpc2libGUgPSBUUlVFOwotICByZXR1cm4gaXRlbTsKLX0KLQotc3RhdGljIEdzdE11bHRpUXVldWVJdGVtICoKLWdzdF9tdWx0aV9xdWV1ZV9tb19pdGVtX25ldyAoR3N0TWluaU9iamVjdCAqIG9iamVjdCwgZ3VpbnQzMiBjdXJpZCkKLXsKLSAgR3N0TXVsdGlRdWV1ZUl0ZW0gKml0ZW07Ci0KLSAgaXRlbSA9IGdfc2xpY2VfbmV3IChHc3RNdWx0aVF1ZXVlSXRlbSk7Ci0gIGl0ZW0tPm9iamVjdCA9IG9iamVjdDsKLSAgaXRlbS0+ZGVzdHJveSA9IChHRGVzdHJveU5vdGlmeSkgZ3N0X211bHRpX3F1ZXVlX2l0ZW1fZGVzdHJveTsKLSAgaXRlbS0+cG9zaWQgPSBjdXJpZDsKLSAgaXRlbS0+aXNfcXVlcnkgPSBHU1RfSVNfUVVFUlkgKG9iamVjdCk7Ci0KLSAgaXRlbS0+c2l6ZSA9IDA7Ci0gIGl0ZW0tPmR1cmF0aW9uID0gMDsKLSAgaXRlbS0+dmlzaWJsZSA9IEZBTFNFOwotICByZXR1cm4gaXRlbTsKLX0KLQotLyogRWFjaCBtYWluIGxvb3AgYXR0ZW1wdHMgdG8gcHVzaCBidWZmZXJzIHVudGlsIHRoZSByZXR1cm4gdmFsdWUKLSAqIGlzIG5vdC1saW5rZWQuIG5vdC1saW5rZWQgcGFkcyBhcmUgbm90IGFsbG93ZWQgdG8gcHVzaCBkYXRhIGJleW9uZAotICogYW55IGxpbmtlZCBwYWRzLCBzbyB0aGV5IGRvbid0ICdydXNoIGFoZWFkIG9mIHRoZSBwYWNrJy4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9tdWx0aV9xdWV1ZV9sb29wIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFNpbmdsZVF1ZXVlICpzcTsKLSAgR3N0TXVsdGlRdWV1ZUl0ZW0gKml0ZW07Ci0gIEdzdERhdGFRdWV1ZUl0ZW0gKnNpdGVtOwotICBHc3RNdWx0aVF1ZXVlICptcTsKLSAgR3N0TWluaU9iamVjdCAqb2JqZWN0ID0gTlVMTDsKLSAgZ3VpbnQzMiBuZXdpZDsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQ7Ci0gIEdzdENsb2NrVGltZURpZmYgbmV4dF90aW1lOwotICBnYm9vbGVhbiBpc19idWZmZXI7Ci0gIGdib29sZWFuIGRvX3VwZGF0ZV9idWZmZXJpbmcgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gZHJvcHBpbmcgPSBGQUxTRTsKLQotICBzcSA9IChHc3RTaW5nbGVRdWV1ZSAqKSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIG1xID0gc3EtPm1xdWV1ZTsKLQotbmV4dDoKLSAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJTaW5nbGVRdWV1ZSAlZCA6IHRyeWluZyB0byBwb3AgYW4gb2JqZWN0Iiwgc3EtPmlkKTsKLQotICBpZiAoc3EtPmZsdXNoaW5nKQotICAgIGdvdG8gb3V0X2ZsdXNoaW5nOwotCi0gIC8qIEdldCBzb21ldGhpbmcgZnJvbSB0aGUgcXVldWUsIGJsb2NraW5nIHVudGlsIHRoYXQgaGFwcGVucywgb3Igd2UgZ2V0Ci0gICAqIGZsdXNoZWQgKi8KLSAgaWYgKCEoZ3N0X2RhdGFfcXVldWVfcG9wIChzcS0+cXVldWUsICZzaXRlbSkpKQotICAgIGdvdG8gb3V0X2ZsdXNoaW5nOwotCi0gIGl0ZW0gPSAoR3N0TXVsdGlRdWV1ZUl0ZW0gKikgc2l0ZW07Ci0gIG5ld2lkID0gaXRlbS0+cG9zaWQ7Ci0KLSAgLyogc3RlYWwgdGhlIG9iamVjdCBhbmQgZGVzdHJveSB0aGUgaXRlbSAqLwotICBvYmplY3QgPSBnc3RfbXVsdGlfcXVldWVfaXRlbV9zdGVhbF9vYmplY3QgKGl0ZW0pOwotICBnc3RfbXVsdGlfcXVldWVfaXRlbV9kZXN0cm95IChpdGVtKTsKLQotICBpc19idWZmZXIgPSBHU1RfSVNfQlVGRkVSIChvYmplY3QpOwotCi0gIC8qIEdldCBydW5uaW5nIHRpbWUgb2YgdGhlIGl0ZW0uIEV2ZW50cyB3aWxsIGhhdmUgR1NUX0NMT0NLX1NUSU1FX05PTkUgKi8KLSAgbmV4dF90aW1lID0gZ2V0X3J1bm5pbmdfdGltZSAoJnNxLT5zcmNfc2VnbWVudCwgb2JqZWN0LCBGQUxTRSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgOiBuZXdpZDolZCAsIG9sZGlkOiVkIiwKLSAgICAgIHNxLT5pZCwgbmV3aWQsIHNxLT5sYXN0X29sZGlkKTsKLQotICAvKiBJZiB3ZSdyZSBub3QtbGlua2VkLCB3ZSBkbyBzb21lIGV4dHJhIHdvcmsgYmVjYXVzZSB3ZSBtaWdodCBuZWVkIHRvCi0gICAqIHdhaXQgYmVmb3JlIHB1c2hpbmcuIElmIHdlJ3JlIGxpbmtlZCBidXQgdGhlcmUncyBhIGdhcCBpbiB0aGUgSURzLAotICAgKiBvciBpdCdzIHRoZSBmaXJzdCBsb29wLCBvciB3ZSBqdXN0IHBhc3NlZCB0aGUgcHJldmlvdXMgaGlnaGlkLAotICAgKiB3ZSBtaWdodCBuZWVkIHRvIHdha2Ugc29tZSBzbGVlcGluZyBwYWQgdXAsIHNvIHRoZXJlJ3MgZXh0cmEgd29yawotICAgKiB0aGVyZSB0b28gKi8KLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgaWYgKHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRAotICAgICAgfHwgKHNxLT5sYXN0X29sZGlkID09IEdfTUFYVUlOVDMyKSB8fCAobmV3aWQgIT0gKHNxLT5sYXN0X29sZGlkICsgMSkpCi0gICAgICB8fCBzcS0+bGFzdF9vbGRpZCA+IG1xLT5oaWdoaWQpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAobXEsICJDSEVDS0lORyBzcS0+c3JjcmVzdWx0OiAlcyIsCi0gICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChzcS0+c3JjcmVzdWx0KSk7Ci0KLSAgICAvKiBDaGVjayBhZ2FpbiBpZiB3ZSdyZSBmbHVzaGluZyBhZnRlciB0aGUgbG9jayBpcyB0YWtlbiwKLSAgICAgKiB0aGUgZmx1c2ggZmxhZyBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCBpbiB0aGUgbWVhbnRpbWUgKi8KLSAgICBpZiAoc3EtPmZsdXNoaW5nKSB7Ci0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gICAgICBnb3RvIG91dF9mbHVzaGluZzsKLSAgICB9Ci0KLSAgICAvKiBVcGRhdGUgdGhlIG5leHRpZCBzbyBvdGhlciB0aHJlYWRzIGtub3cgd2hlbiB0byB3YWtlIHVzIHVwICovCi0gICAgc3EtPm5leHRpZCA9IG5ld2lkOwotICAgIC8qIFRha2UgaW50byBhY2NvdW50IHRoZSBleHRyYSBjYWNoZSB0aW1lIHNpbmNlIHdlJ3JlIHVubGlua2VkICovCi0gICAgaWYgKEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAobmV4dF90aW1lKSkKLSAgICAgIG5leHRfdGltZSArPSBtcS0+dW5saW5rZWRfY2FjaGVfdGltZTsKLSAgICBzcS0+bmV4dF90aW1lID0gbmV4dF90aW1lOwotCi0gICAgLyogVXBkYXRlIHRoZSBvbGRpZCAodGhlIGxhc3QgSUQgd2Ugb3V0cHV0KSBmb3IgaGlnaGlkIHRyYWNraW5nICovCi0gICAgaWYgKHNxLT5sYXN0X29sZGlkICE9IEdfTUFYVUlOVDMyKQotICAgICAgc3EtPm9sZGlkID0gc3EtPmxhc3Rfb2xkaWQ7Ci0KLSAgICBpZiAoc3EtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSB7Ci0gICAgICBnYm9vbGVhbiBzaG91bGRfd2FpdDsKLSAgICAgIC8qIEdvIHRvIHNsZWVwIHVudGlsIGl0J3MgdGltZSB0byBwdXNoIHRoaXMgYnVmZmVyICovCi0KLSAgICAgIC8qIFJlY29tcHV0ZSB0aGUgaGlnaGlkICovCi0gICAgICBjb21wdXRlX2hpZ2hfaWQgKG1xKTsKLSAgICAgIC8qIFJlY29tcHV0ZSB0aGUgaGlnaCB0aW1lICovCi0gICAgICBjb21wdXRlX2hpZ2hfdGltZSAobXEsIHNxLT5ncm91cGlkKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCi0gICAgICAgICAgImdyb3VwaWQgJWQgaGlnaF90aW1lICUiIEdTVF9TVElNRV9GT1JNQVQgIiBuZXh0X3RpbWUgJSIKLSAgICAgICAgICBHU1RfU1RJTUVfRk9STUFULCBzcS0+Z3JvdXBpZCwgR1NUX1NUSU1FX0FSR1MgKHNxLT5ncm91cF9oaWdoX3RpbWUpLAotICAgICAgICAgIEdTVF9TVElNRV9BUkdTIChuZXh0X3RpbWUpKTsKLQotICAgICAgaWYgKG1xLT5zeW5jX2J5X3J1bm5pbmdfdGltZSkgewotICAgICAgICBpZiAoc3EtPmdyb3VwX2hpZ2hfdGltZSA9PSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSkgewotICAgICAgICAgIHNob3VsZF93YWl0ID0gR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChuZXh0X3RpbWUpICYmCi0gICAgICAgICAgICAgIChtcS0+aGlnaF90aW1lID09IEdTVF9DTE9DS19TVElNRV9OT05FCi0gICAgICAgICAgICAgIHx8IG5leHRfdGltZSA+IG1xLT5oaWdoX3RpbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHNob3VsZF93YWl0ID0gR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChuZXh0X3RpbWUpICYmCi0gICAgICAgICAgICAgIG5leHRfdGltZSA+IHNxLT5ncm91cF9oaWdoX3RpbWU7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZQotICAgICAgICBzaG91bGRfd2FpdCA9IG5ld2lkID4gbXEtPmhpZ2hpZDsKLQotICAgICAgd2hpbGUgKHNob3VsZF93YWl0ICYmIHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgewotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLAotICAgICAgICAgICAgInF1ZXVlICVkIHNsZWVwaW5nIGZvciBub3QtbGlua2VkIHdha2V1cCB3aXRoICIKLSAgICAgICAgICAgICJuZXdpZCAldSwgaGlnaGlkICV1LCBuZXh0X3RpbWUgJSIgR1NUX1NUSU1FX0ZPUk1BVAotICAgICAgICAgICAgIiwgaGlnaF90aW1lICUiIEdTVF9TVElNRV9GT1JNQVQsIHNxLT5pZCwgbmV3aWQsIG1xLT5oaWdoaWQsCi0gICAgICAgICAgICBHU1RfU1RJTUVfQVJHUyAobmV4dF90aW1lKSwgR1NUX1NUSU1FX0FSR1MgKHNxLT5ncm91cF9oaWdoX3RpbWUpKTsKLQotICAgICAgICAvKiBXYWtlIHVwIGFsbCBub24tbGlua2VkIHBhZHMgYmVmb3JlIHdlIHNsZWVwICovCi0gICAgICAgIHdha2VfdXBfbmV4dF9ub25fbGlua2VkIChtcSk7Ci0KLSAgICAgICAgbXEtPm51bXdhaXRpbmcrKzsKLSAgICAgICAgZ19jb25kX3dhaXQgKCZzcS0+dHVybiwgJm1xLT5xbG9jayk7Ci0gICAgICAgIG1xLT5udW13YWl0aW5nLS07Ci0KLSAgICAgICAgaWYgKHNxLT5mbHVzaGluZykgewotICAgICAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgICAgICAgICBnb3RvIG91dF9mbHVzaGluZzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFJlY29tcHV0ZSB0aGUgaGlnaCB0aW1lIGFuZCBJRCAqLwotICAgICAgICBjb21wdXRlX2hpZ2hfdGltZSAobXEsIHNxLT5ncm91cGlkKTsKLSAgICAgICAgY29tcHV0ZV9oaWdoX2lkIChtcSk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJxdWV1ZSAlZCB3b2tlbiBmcm9tIHNsZWVwaW5nIGZvciBub3QtbGlua2VkICIKLSAgICAgICAgICAgICJ3YWtldXAgd2l0aCBuZXdpZCAldSwgaGlnaGlkICV1LCBuZXh0X3RpbWUgJSIgR1NUX1NUSU1FX0ZPUk1BVAotICAgICAgICAgICAgIiwgaGlnaF90aW1lICUiIEdTVF9TVElNRV9GT1JNQVQgIiBtcSBoaWdoX3RpbWUgJSIgR1NUX1NUSU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIHNxLT5pZCwgbmV3aWQsIG1xLT5oaWdoaWQsCi0gICAgICAgICAgICBHU1RfU1RJTUVfQVJHUyAobmV4dF90aW1lKSwgR1NUX1NUSU1FX0FSR1MgKHNxLT5ncm91cF9oaWdoX3RpbWUpLAotICAgICAgICAgICAgR1NUX1NUSU1FX0FSR1MgKG1xLT5oaWdoX3RpbWUpKTsKLQotICAgICAgICBpZiAobXEtPnN5bmNfYnlfcnVubmluZ190aW1lKSB7Ci0gICAgICAgICAgaWYgKHNxLT5ncm91cF9oaWdoX3RpbWUgPT0gR1NUX0NMT0NLX1NUSU1FX05PTkUpIHsKLSAgICAgICAgICAgIHNob3VsZF93YWl0ID0gR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChuZXh0X3RpbWUpICYmCi0gICAgICAgICAgICAgICAgKG1xLT5oaWdoX3RpbWUgPT0gR1NUX0NMT0NLX1NUSU1FX05PTkUKLSAgICAgICAgICAgICAgICB8fCBuZXh0X3RpbWUgPiBtcS0+aGlnaF90aW1lKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2hvdWxkX3dhaXQgPSBHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKG5leHRfdGltZSkgJiYKLSAgICAgICAgICAgICAgICBuZXh0X3RpbWUgPiBzcS0+Z3JvdXBfaGlnaF90aW1lOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgc2hvdWxkX3dhaXQgPSBuZXdpZCA+IG1xLT5oaWdoaWQ7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFJlLWNvbXB1dGUgdGhlIGhpZ2hfaWQgaW4gY2FzZSBzb21lb25lIGVsc2UgcHVzaGVkICovCi0gICAgICBjb21wdXRlX2hpZ2hfaWQgKG1xKTsKLSAgICAgIGNvbXB1dGVfaGlnaF90aW1lIChtcSwgc3EtPmdyb3VwaWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBjb21wdXRlX2hpZ2hfaWQgKG1xKTsKLSAgICAgIGNvbXB1dGVfaGlnaF90aW1lIChtcSwgc3EtPmdyb3VwaWQpOwotICAgICAgLyogV2FrZSB1cCBhbGwgbm9uLWxpbmtlZCBwYWRzICovCi0gICAgICB3YWtlX3VwX25leHRfbm9uX2xpbmtlZCAobXEpOwotICAgIH0KLSAgICAvKiBXZSdyZSBkb25lIHdhaXRpbmcsIHdlIGNhbiBjbGVhciB0aGUgbmV4dGlkIGFuZCBuZXh0dGltZSAqLwotICAgIHNxLT5uZXh0aWQgPSAwOwotICAgIHNxLT5uZXh0X3RpbWUgPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTsKLSAgfQotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0KLSAgaWYgKHNxLT5mbHVzaGluZykKLSAgICBnb3RvIG91dF9mbHVzaGluZzsKLQotICBHU1RfTE9HX09CSkVDVCAobXEsICJzcTolZCBCRUZPUkUgUFVTSElORyBzcS0+c3JjcmVzdWx0OiAlcyIsIHNxLT5pZCwKLSAgICAgIGdzdF9mbG93X2dldF9uYW1lIChzcS0+c3JjcmVzdWx0KSk7Ci0KLSAgLyogVXBkYXRlIHRpbWUgc3RhdHMgKi8KLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgbmV4dF90aW1lID0gZ2V0X3J1bm5pbmdfdGltZSAoJnNxLT5zcmNfc2VnbWVudCwgb2JqZWN0LCBUUlVFKTsKLSAgaWYgKEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAobmV4dF90aW1lKSkgewotICAgIGlmIChzcS0+bGFzdF90aW1lID09IEdTVF9DTE9DS19TVElNRV9OT05FIHx8IHNxLT5sYXN0X3RpbWUgPCBuZXh0X3RpbWUpCi0gICAgICBzcS0+bGFzdF90aW1lID0gbmV4dF90aW1lOwotICAgIGlmIChtcS0+aGlnaF90aW1lID09IEdTVF9DTE9DS19TVElNRV9OT05FIHx8IG1xLT5oaWdoX3RpbWUgPD0gbmV4dF90aW1lKSB7Ci0gICAgICAvKiBXYWtlIHVwIGFsbCBub24tbGlua2VkIHBhZHMgbm93IHRoYXQgd2UgYWR2YW5jZWQgdGhlIGhpZ2ggdGltZSAqLwotICAgICAgbXEtPmhpZ2hfdGltZSA9IG5leHRfdGltZTsKLSAgICAgIHdha2VfdXBfbmV4dF9ub25fbGlua2VkIChtcSk7Ci0gICAgfQotICB9Ci0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLQotICAvKiBUcnkgdG8gcHVzaCBvdXQgdGhlIG5ldyBvYmplY3QgKi8KLSAgcmVzdWx0ID0gZ3N0X3NpbmdsZV9xdWV1ZV9wdXNoX29uZSAobXEsIHNxLCBvYmplY3QsICZkcm9wcGluZyk7Ci0gIG9iamVjdCA9IE5VTEw7Ci0KLSAgLyogQ2hlY2sgaWYgd2UgcHVzaGVkIHNvbWV0aGluZyBhbHJlYWR5IGFuZCBpZiB0aGlzIGlzCi0gICAqIG5vdyBhIHN3aXRjaCBmcm9tIGFuIGFjdGl2ZSB0byBhIG5vbi1hY3RpdmUgc3RyZWFtLgotICAgKgotICAgKiBJZiBpdCBpcywgd2UgcmVzZXQgYWxsIHRoZSB3YWl0aW5nIHN0cmVhbXMsIGxldCB0aGVtCi0gICAqIHB1c2ggYW5vdGhlciBidWZmZXIgdG8gc2VlIGlmIHRoZXkncmUgbm93IGFjdGl2ZSBhZ2Fpbi4KLSAgICogVGhpcyBhbGxvd3MgZmFzdGVyIHN3aXRjaGluZyBiZXR3ZWVuIHN0cmVhbXMgYW5kIHByZXZlbnRzCi0gICAqIGRlYWRsb2NrcyBpZiBkb3duc3RyZWFtIGRvZXMgYW55IHdhaXRpbmcgdG9vLgotICAgKi8KLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgaWYgKHNxLT5wdXNoZWQgJiYgc3EtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19PSwotICAgICAgJiYgcmVzdWx0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQpIHsKLSAgICBHTGlzdCAqdG1wOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgOiBDaGFuZ2VkIGZyb20gYWN0aXZlIHRvIG5vbi1hY3RpdmUiLAotICAgICAgICBzcS0+aWQpOwotCi0gICAgY29tcHV0ZV9oaWdoX2lkIChtcSk7Ci0gICAgY29tcHV0ZV9oaWdoX3RpbWUgKG1xLCBzcS0+Z3JvdXBpZCk7Ci0gICAgZG9fdXBkYXRlX2J1ZmZlcmluZyA9IFRSVUU7Ci0KLSAgICAvKiBtYXliZSBuby1vbmUgaXMgd2FpdGluZyAqLwotICAgIGlmIChtcS0+bnVtd2FpdGluZyA+IDApIHsKLSAgICAgIC8qIEVsc2UgZmlndXJlIG91dCB3aGljaCBzaW5nbGVxdWV1ZShzKSBuZWVkIHdha2luZyB1cCAqLwotICAgICAgZm9yICh0bXAgPSBtcS0+cXVldWVzOyB0bXA7IHRtcCA9IGdfbGlzdF9uZXh0ICh0bXApKSB7Ci0gICAgICAgIEdzdFNpbmdsZVF1ZXVlICpzcTIgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOwotCi0gICAgICAgIGlmIChzcTItPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiV2FraW5nIHVwIHNpbmdsZXF1ZXVlICVkIiwgc3EyLT5pZCk7Ci0gICAgICAgICAgc3EyLT5wdXNoZWQgPSBGQUxTRTsKLSAgICAgICAgICBzcTItPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgICAgIGdfY29uZF9zaWduYWwgKCZzcTItPnR1cm4pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGlzX2J1ZmZlcikKLSAgICBzcS0+cHVzaGVkID0gVFJVRTsKLQotICAvKiBub3cgaG9sZCBvbiBhIGJpdDsKLSAgICogY2FuIG5vdCBzaW1wbHkgdGhyb3cgdGhpcyByZXN1bHQgdG8gdXBzdHJlYW0sIGJlY2F1c2UKLSAgICogdGhhdCBtaWdodCBhbHJlYWR5IGJlIG9udG8gYW5vdGhlciBzZWdtZW50LCBzbyB3ZSBoYXZlIHRvIG1ha2UKLSAgICogc3VyZSB3ZSBhcmUgcmVsYXlpbmcgdGhlIGNvcnJlY3QgaW5mbyB3cnQgcHJvcGVyIHNlZ21lbnQgKi8KLSAgaWYgKHJlc3VsdCA9PSBHU1RfRkxPV19FT1MgJiYgIWRyb3BwaW5nICYmCi0gICAgICBzcS0+c3JjcmVzdWx0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgInN0YXJ0aW5nIEVPUyBkcm9wIG9uIHNxICVkIiwgc3EtPmlkKTsKLSAgICBkcm9wcGluZyA9IFRSVUU7Ci0gICAgLyogcHJldGVuZCB3ZSBoYXZlIG5vdCBzZWVuIEVPUyB5ZXQgZm9yIHVwc3RyZWFtJ3Mgc2FrZSAqLwotICAgIHJlc3VsdCA9IHNxLT5zcmNyZXN1bHQ7Ci0gIH0gZWxzZSBpZiAoZHJvcHBpbmcgJiYgZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkgKHNxLT5xdWV1ZSkpIHsKLSAgICAvKiBxdWV1ZSBlbXB0eSwgc28gc3RvcCBkcm9wcGluZwotICAgICAqIHdlIGNhbiBjb21taXQgdGhlIHJlc3VsdCB3ZSBoYXZlIG5vdywKLSAgICAgKiB3aGljaCBpcyBlaXRoZXIgT0sgYWZ0ZXIgYSBzZWdtZW50LCBvciBFT1MgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgImNvbW1pdHRlZCBFT1MgZHJvcCBvbiBzcSAlZCIsIHNxLT5pZCk7Ci0gICAgZHJvcHBpbmcgPSBGQUxTRTsKLSAgICByZXN1bHQgPSBHU1RfRkxPV19FT1M7Ci0gIH0KLSAgc3EtPnNyY3Jlc3VsdCA9IHJlc3VsdDsKLSAgc3EtPmxhc3Rfb2xkaWQgPSBuZXdpZDsKLQotICBpZiAoZG9fdXBkYXRlX2J1ZmZlcmluZykKLSAgICB1cGRhdGVfYnVmZmVyaW5nIChtcSwgc3EpOwotCi0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgZ3N0X211bHRpX3F1ZXVlX3Bvc3RfYnVmZmVyaW5nIChtcSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG1xLCAic3E6JWQgQUZURVIgUFVTSElORyBzcS0+c3JjcmVzdWx0OiAlcyAoaXNfZW9zOiVkKSIsCi0gICAgICBzcS0+aWQsIGdzdF9mbG93X2dldF9uYW1lIChzcS0+c3JjcmVzdWx0KSwgR1NUX1BBRF9JU19FT1MgKHNxLT5zcmNwYWQpKTsKLQotICAvKiBOZWVkIHRvIG1ha2Ugc3VyZSB3YWtlIHVwIGFueSBzbGVlcGluZyBwYWRzIHdoZW4gd2UgZXhpdCAqLwotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotICBpZiAobXEtPm51bXdhaXRpbmcgPiAwICYmIChHU1RfUEFEX0lTX0VPUyAoc3EtPnNyY3BhZCkKLSAgICAgICAgICB8fCBzcS0+c3JjcmVzdWx0ID09IEdTVF9GTE9XX0VPUykpIHsKLSAgICBjb21wdXRlX2hpZ2hfdGltZSAobXEsIHNxLT5ncm91cGlkKTsKLSAgICBjb21wdXRlX2hpZ2hfaWQgKG1xKTsKLSAgICB3YWtlX3VwX25leHRfbm9uX2xpbmtlZCAobXEpOwotICB9Ci0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLQotICBpZiAoZHJvcHBpbmcpCi0gICAgZ290byBuZXh0OwotCi0gIGlmIChyZXN1bHQgIT0gR1NUX0ZMT1dfT0sgJiYgcmVzdWx0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQKLSAgICAgICYmIHJlc3VsdCAhPSBHU1RfRkxPV19FT1MpCi0gICAgZ290byBvdXRfZmx1c2hpbmc7Ci0KLSAgcmV0dXJuOwotCi1vdXRfZmx1c2hpbmc6Ci0gIHsKLSAgICBpZiAob2JqZWN0KQotICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChvYmplY3QpOwotCi0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgICBzcS0+bGFzdF9xdWVyeSA9IEZBTFNFOwotICAgIGdfY29uZF9zaWduYWwgKCZzcS0+cXVlcnlfaGFuZGxlZCk7Ci0KLSAgICAvKiBQb3N0IGFuIGVycm9yIG1lc3NhZ2UgaWYgd2UgZ290IEVPUyB3aGlsZSBkb3duc3RyZWFtCi0gICAgICogaGFzIHJldHVybmVkIGFuIGVycm9yIGZsb3cgcmV0dXJuLiBBZnRlciBFT1MgdGhlcmUKLSAgICAgKiB3aWxsIGJlIG5vIGZ1cnRoZXIgYnVmZmVyIHdoaWNoIGNvdWxkIHByb3BhZ2F0ZSB0aGUKLSAgICAgKiBlcnJvciB1cHN0cmVhbSAqLwotICAgIGlmIChzcS0+aXNfZW9zICYmIHNxLT5zcmNyZXN1bHQgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKG1xLCBzcS0+c3JjcmVzdWx0KTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotICAgIH0KLQotICAgIC8qIHVwc3RyZWFtIG5lZWRzIHRvIHNlZSBmYXRhbCByZXN1bHQgQVNBUCB0byBzaHV0IHRoaW5ncyBkb3duLAotICAgICAqIGJ1dCBtaWdodCBiZSBzdHVjayBpbiBvbmUgb2Ygb3VyIG90aGVyIGZ1bGwgcXVldWVzOwotICAgICAqIHNvIGVtcHR5IHRoaXMgb25lIGFuZCB0cmlnZ2VyIGR5bmFtaWMgcXVldWUgZ3Jvd3RoLiBBdAotICAgICAqIHRoaXMgcG9pbnQgdGhlIHNyY3Jlc3VsdCBpcyBub3QgT0ssIE5PVF9MSU5LRUQKLSAgICAgKiBvciBFT1MsIGkuZS4gYSByZWFsIGZhaWx1cmUgKi8KLSAgICBnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoX3F1ZXVlIChzcSwgRkFMU0UpOwotICAgIHNpbmdsZV9xdWV1ZV91bmRlcnJ1bl9jYiAoc3EtPnF1ZXVlLCBzcSk7Ci0gICAgZ3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nIChzcS0+cXVldWUsIFRSVUUpOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoc3EtPnNyY3BhZCk7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChtdWx0aV9xdWV1ZV9kZWJ1ZywgbXEsCi0gICAgICAgICJTaW5nbGVRdWV1ZVslZF0gdGFzayBwYXVzZWQsIHJlYXNvbjolcyIsCi0gICAgICAgIHNxLT5pZCwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHNxLT5zcmNyZXN1bHQpKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfbXVsdGlfcXVldWVfY2hhaW46Ci0gKgotICogVGhpcyBpcyBzaW1pbGFyIHRvIEdzdFF1ZXVlJ3MgY2hhaW4gZnVuY3Rpb24sIGV4Y2VwdDoKLSAqIF8gd2UgZG9uJ3QgaGF2ZSBsZWFrIGJlaGF2aW91cnMsCi0gKiBfIHdlIHB1c2ggd2l0aCBhIHVuaXF1ZSBpZCAoY3VyaWQpCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXVsdGlfcXVldWVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFNpbmdsZVF1ZXVlICpzcTsKLSAgR3N0TXVsdGlRdWV1ZSAqbXE7Ci0gIEdzdE11bHRpUXVldWVJdGVtICppdGVtOwotICBndWludDMyIGN1cmlkOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLQotICBzcSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgbXEgPSBzcS0+bXF1ZXVlOwotCi0gIC8qIGlmIGVvcywgd2UgYXJlIGFsd2F5cyBmdWxsLCBzbyBhdm9pZCBoYW5naW5nIGluY29taW5nIGluZGVmaW5pdGVseSAqLwotICBpZiAoc3EtPmlzX2VvcykKLSAgICBnb3RvIHdhc19lb3M7Ci0KLSAgc3EtPmFjdGl2ZSA9IFRSVUU7Ci0KLSAgLyogR2V0IGEgdW5pcXVlIGluY3JlbWVudGluZyBpZCAqLwotICBjdXJpZCA9IGdfYXRvbWljX2ludF9hZGQgKChnaW50ICopICYgbXEtPmNvdW50ZXIsIDEpOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfRFRTX09SX1BUUyAoYnVmZmVyKTsKLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChtcSwKLSAgICAgICJTaW5nbGVRdWV1ZSAlZCA6IGFib3V0IHRvIGVucXVldWUgYnVmZmVyICVwIHdpdGggaWQgJWQgKHB0czolIgotICAgICAgR1NUX1RJTUVfRk9STUFUICIgZHRzOiUiIEdTVF9USU1FX0ZPUk1BVCAiIGR1cjolIiBHU1RfVElNRV9GT1JNQVQgIikiLAotICAgICAgc3EtPmlkLCBidWZmZXIsIGN1cmlkLCBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSksIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7Ci0KLSAgaXRlbSA9IGdzdF9tdWx0aV9xdWV1ZV9idWZmZXJfaXRlbV9uZXcgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWZmZXIpLCBjdXJpZCk7Ci0KLSAgLyogVXBkYXRlIGludGVybGVhdmUgYmVmb3JlIHB1c2hpbmcgZGF0YSBpbnRvIHF1ZXVlICovCi0gIGlmIChtcS0+dXNlX2ludGVybGVhdmUpIHsKLSAgICBHc3RDbG9ja1RpbWUgdmFsID0gdGltZXN0YW1wOwotICAgIEdzdENsb2NrVGltZURpZmYgZHZhbDsKLQotICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7Ci0gICAgaWYgKHZhbCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgdmFsID0gc3EtPnNpbmtfc2VnbWVudC5wb3NpdGlvbjsKLSAgICBpZiAoZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgIHZhbCArPSBkdXJhdGlvbjsKLQotICAgIGR2YWwgPSBteV9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNxLT5zaW5rX3NlZ21lbnQsIHZhbCk7Ci0gICAgaWYgKEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAoZHZhbCkpIHsKLSAgICAgIHNxLT5jYWNoZWRfc2lua3RpbWUgPSBkdmFsOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCi0gICAgICAgICAgIlF1ZXVlICVkIGNhY2hlZCBzaW5rIHRpbWUgbm93ICUiIEdfR0lOVDY0X0ZPUk1BVCAiICUiCi0gICAgICAgICAgR1NUX1NUSU1FX0ZPUk1BVCwgc3EtPmlkLCBzcS0+Y2FjaGVkX3Npbmt0aW1lLAotICAgICAgICAgIEdTVF9TVElNRV9BUkdTIChzcS0+Y2FjaGVkX3Npbmt0aW1lKSk7Ci0gICAgICBjYWxjdWxhdGVfaW50ZXJsZWF2ZSAobXEpOwotICAgIH0KLSAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gIH0KLQotICBpZiAoIShnc3RfZGF0YV9xdWV1ZV9wdXNoIChzcS0+cXVldWUsIChHc3REYXRhUXVldWVJdGVtICopIGl0ZW0pKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIC8qIHVwZGF0ZSB0aW1lIGxldmVsLCB3ZSBtdXN0IGRvIHRoaXMgYWZ0ZXIgcHVzaGluZyB0aGUgZGF0YSBpbiB0aGUgcXVldWUgc28KLSAgICogdGhhdCB3ZSBuZXZlciBlbmQgdXAgZmlsbGluZyB0aGUgcXVldWUgZmlyc3QuICovCi0gIGFwcGx5X2J1ZmZlciAobXEsIHNxLCB0aW1lc3RhbXAsIGR1cmF0aW9uLCAmc3EtPnNpbmtfc2VnbWVudCk7Ci0KLWRvbmU6Ci0gIHJldHVybiBzcS0+c3JjcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAobXEsICJTaW5nbGVRdWV1ZSAlZCA6IGV4aXQgYmVjYXVzZSB0YXNrIHBhdXNlZCwgcmVhc29uOiAlcyIsCi0gICAgICAgIHNxLT5pZCwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHNxLT5zcmNyZXN1bHQpKTsKLSAgICBnc3RfbXVsdGlfcXVldWVfaXRlbV9kZXN0cm95IChpdGVtKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXdhc19lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgIndlIGFyZSBFT1MsIGRyb3BwaW5nIGJ1ZmZlciwgcmV0dXJuIEVPUyIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9xdWV1ZV9zaW5rX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdFNpbmdsZVF1ZXVlICpzcTsKLSAgR3N0TXVsdGlRdWV1ZSAqbXE7Ci0KLSAgc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICBtcSA9IChHc3RNdWx0aVF1ZXVlICopIGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKTsKLQotICAvKiBtcSBpcyBOVUxMIGlmIHRoZSBwYWQgaXMgYWN0aXZhdGVkL2RlYWN0aXZhdGVkIGJlZm9yZSBiZWluZwotICAgKiBhZGRlZCB0byB0aGUgbXVsdGlxdWV1ZSAqLwotICBpZiAobXEpCi0gICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVVNIOgotICAgICAgaWYgKGFjdGl2ZSkgewotICAgICAgICAvKiBBbGwgcGFkcyBzdGFydCBvZmYgbGlua2VkIHVudGlsIHRoZXkgcHVzaCBvbmUgYnVmZmVyICovCi0gICAgICAgIHNxLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgc3EtPnB1c2hlZCA9IEZBTFNFOwotICAgICAgICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHNxLT5xdWV1ZSwgRkFMU0UpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3EtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgICBzcS0+bGFzdF9xdWVyeSA9IEZBTFNFOwotICAgICAgICBnX2NvbmRfc2lnbmFsICgmc3EtPnF1ZXJ5X2hhbmRsZWQpOwotICAgICAgICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHNxLT5xdWV1ZSwgVFJVRSk7Ci0KLSAgICAgICAgLyogV2FpdCB1bnRpbCBzdHJlYW1pbmcgdGhyZWFkIGhhcyBmaW5pc2hlZCAqLwotICAgICAgICBpZiAobXEpCi0gICAgICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotICAgICAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChwYWQpOwotICAgICAgICBpZiAobXEpCi0gICAgICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgICAgICAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggKHNxLT5xdWV1ZSk7Ci0gICAgICAgIGlmIChtcSkKLSAgICAgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gICAgICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLSAgICAgICAgaWYgKG1xKQotICAgICAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7Ci0gICAgICB9Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAobXEpIHsKLSAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAobXEpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tdWx0aV9xdWV1ZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0U2luZ2xlUXVldWUgKnNxOwotICBHc3RNdWx0aVF1ZXVlICptcTsKLSAgZ3VpbnQzMiBjdXJpZDsKLSAgR3N0TXVsdGlRdWV1ZUl0ZW0gKml0ZW07Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdEZsb3dSZXR1cm4gZmxvd3JldCA9IEdTVF9GTE9XX09LOwotICBHc3RFdmVudFR5cGUgdHlwZTsKLSAgR3N0RXZlbnQgKnNyZWYgPSBOVUxMOwotCi0gIHNxID0gKEdzdFNpbmdsZVF1ZXVlICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgbXEgPSAoR3N0TXVsdGlRdWV1ZSAqKSBwYXJlbnQ7Ci0KLSAgdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOgotICAgIHsKLSAgICAgIGlmIChtcS0+c3luY19ieV9ydW5uaW5nX3RpbWUpIHsKLSAgICAgICAgR3N0U3RyZWFtRmxhZ3Mgc3RyZWFtX2ZsYWdzOwotICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2ZsYWdzIChldmVudCwgJnN0cmVhbV9mbGFncyk7Ci0gICAgICAgIGlmICgoc3RyZWFtX2ZsYWdzICYgR1NUX1NUUkVBTV9GTEFHX1NQQVJTRSkpIHsKLSAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgaXMgYSBzcGFyc2Ugc3RyZWFtIiwgc3EtPmlkKTsKLSAgICAgICAgICBzcS0+aXNfc3BhcnNlID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzcS0+dGhyZWFkID0gZ190aHJlYWRfc2VsZiAoKTsKLQotICAgICAgLyogUmVtb3ZlIEVPUyBmbGFnICovCi0gICAgICBzcS0+aXNfZW9zID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgIlNpbmdsZVF1ZXVlICVkIDogcmVjZWl2ZWQgZmx1c2ggc3RhcnQgZXZlbnQiLAotICAgICAgICAgIHNxLT5pZCk7Ci0KLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3EtPnNyY3BhZCwgZXZlbnQpOwotCi0gICAgICBnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoIChtcSwgc3EsIFRSVUUsIEZBTFNFKTsKLSAgICAgIGdvdG8gZG9uZTsKLQotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgIlNpbmdsZVF1ZXVlICVkIDogcmVjZWl2ZWQgZmx1c2ggc3RvcCBldmVudCIsCi0gICAgICAgICAgc3EtPmlkKTsKLQotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcS0+c3JjcGFkLCBldmVudCk7Ci0KLSAgICAgIGdzdF9zaW5nbGVfcXVldWVfZmx1c2ggKG1xLCBzcSwgRkFMU0UsIEZBTFNFKTsKLSAgICAgIGdvdG8gZG9uZTsKLQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICBzcmVmID0gZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfR0FQOgotICAgICAgLyogdGFrZSByZWYgYmVjYXVzZSB0aGUgcXVldWUgd2lsbCB0YWtlIG93bmVyc2hpcCBhbmQgd2UgbmVlZCB0aGUgZXZlbnQKLSAgICAgICAqIGFmdGVyd2FyZHMgdG8gdXBkYXRlIHRoZSBzZWdtZW50ICovCi0gICAgICBzcmVmID0gZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotICAgICAgaWYgKG1xLT51c2VfaW50ZXJsZWF2ZSkgewotICAgICAgICBHc3RDbG9ja1RpbWUgdmFsLCBkdXI7Ci0gICAgICAgIEdzdENsb2NrVGltZSBzdGltZTsKLSAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX2dhcCAoZXZlbnQsICZ2YWwsICZkdXIpOwotICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHZhbCkpIHsKLSAgICAgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotICAgICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHVyKSkKLSAgICAgICAgICAgIHZhbCArPSBkdXI7Ci0gICAgICAgICAgc3RpbWUgPSBteV9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNxLT5zaW5rX3NlZ21lbnQsIHZhbCk7Ci0gICAgICAgICAgaWYgKEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAoc3RpbWUpKSB7Ci0gICAgICAgICAgICBzcS0+Y2FjaGVkX3Npbmt0aW1lID0gc3RpbWU7Ci0gICAgICAgICAgICBjYWxjdWxhdGVfaW50ZXJsZWF2ZSAobXEpOwotICAgICAgICAgIH0KLSAgICAgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGlmICghKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpKSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3EtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIGlmIGVvcywgd2UgYXJlIGFsd2F5cyBmdWxsLCBzbyBhdm9pZCBoYW5naW5nIGluY29taW5nIGluZGVmaW5pdGVseSAqLwotICBpZiAoc3EtPmlzX2VvcykKLSAgICBnb3RvIHdhc19lb3M7Ci0KLSAgLyogR2V0IGFuIHVuaXF1ZSBpbmNyZW1lbnRpbmcgaWQuICovCi0gIGN1cmlkID0gZ19hdG9taWNfaW50X2FkZCAoKGdpbnQgKikgJiBtcS0+Y291bnRlciwgMSk7Ci0KLSAgaXRlbSA9IGdzdF9tdWx0aV9xdWV1ZV9tb19pdGVtX25ldyAoKEdzdE1pbmlPYmplY3QgKikgZXZlbnQsIGN1cmlkKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChtcSwKLSAgICAgICJTaW5nbGVRdWV1ZSAlZCA6IEVucXVldWluZyBldmVudCAlcCBvZiB0eXBlICVzIHdpdGggaWQgJWQiLAotICAgICAgc3EtPmlkLCBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBjdXJpZCk7Ci0KLSAgaWYgKCFnc3RfZGF0YV9xdWV1ZV9wdXNoIChzcS0+cXVldWUsIChHc3REYXRhUXVldWVJdGVtICopIGl0ZW0pKQotICAgIGdvdG8gZmx1c2hpbmc7Ci0KLSAgLyogbWFyayBFT1Mgd2hlbiB3ZSByZWNlaXZlZCBvbmUsIHdlIG11c3QgZG8gdGhhdCBhZnRlciBwdXR0aW5nIHRoZQotICAgKiBidWZmZXIgaW4gdGhlIHF1ZXVlIGJlY2F1c2UgRU9TIG1hcmtzIHRoZSBidWZmZXIgYXMgZmlsbGVkLiAqLwotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotICAgICAgc3EtPmlzX2VvcyA9IFRSVUU7Ci0KLSAgICAgIC8qIFBvc3QgYW4gZXJyb3IgbWVzc2FnZSBpZiB3ZSBnb3QgRU9TIHdoaWxlIGRvd25zdHJlYW0KLSAgICAgICAqIGhhcyByZXR1cm5lZCBhbiBlcnJvciBmbG93IHJldHVybi4gQWZ0ZXIgRU9TIHRoZXJlCi0gICAgICAgKiB3aWxsIGJlIG5vIGZ1cnRoZXIgYnVmZmVyIHdoaWNoIGNvdWxkIHByb3BhZ2F0ZSB0aGUKLSAgICAgICAqIGVycm9yIHVwc3RyZWFtICovCi0gICAgICBpZiAoc3EtPnNyY3Jlc3VsdCA8IEdTVF9GTE9XX0VPUykgewotICAgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKG1xLCBzcS0+c3JjcmVzdWx0KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgICAgIH0KLQotICAgICAgLyogRU9TIGFmZmVjdHMgdGhlIGJ1ZmZlcmluZyBzdGF0ZSAqLwotICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKG1xLCBzcSk7Ci0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0gICAgICBzaW5nbGVfcXVldWVfb3ZlcnJ1bl9jYiAoc3EtPnF1ZXVlLCBzcSk7Ci0gICAgICBnc3RfbXVsdGlfcXVldWVfcG9zdF9idWZmZXJpbmcgKG1xKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICBhcHBseV9zZWdtZW50IChtcSwgc3EsIHNyZWYsICZzcS0+c2lua19zZWdtZW50KTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoc3JlZik7Ci0gICAgICAvKiBhIG5ldyBzZWdtZW50IGFsbG93cyB1cyB0byBhY2NlcHQgbW9yZSBidWZmZXJzIGlmIHdlIGdvdCBFT1MKLSAgICAgICAqIGZyb20gZG93bnN0cmVhbSAqLwotICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgICAgIGlmIChzcS0+c3JjcmVzdWx0ID09IEdTVF9GTE9XX0VPUykKLSAgICAgICAgc3EtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfR0FQOgotICAgICAgc3EtPmFjdGl2ZSA9IFRSVUU7Ci0gICAgICBhcHBseV9nYXAgKG1xLCBzcSwgc3JlZiwgJnNxLT5zaW5rX3NlZ21lbnQpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChzcmVmKTsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotZG9uZToKLSAgaWYgKHJlcyA9PSBGQUxTRSkKLSAgICBmbG93cmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKG1xLCAiU2luZ2xlUXVldWUgJWQgOiByZXR1cm5pbmcgJXMiLCBzcS0+aWQsCi0gICAgICBnc3RfZmxvd19nZXRfbmFtZSAoZmxvd3JldCkpOwotICByZXR1cm4gZmxvd3JldDsKLQotZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAobXEsICJTaW5nbGVRdWV1ZSAlZCA6IGV4aXQgYmVjYXVzZSB0YXNrIHBhdXNlZCwgcmVhc29uOiAlcyIsCi0gICAgICAgIHNxLT5pZCwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHNxLT5zcmNyZXN1bHQpKTsKLSAgICBpZiAoc3JlZikKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoc3JlZik7Ci0gICAgZ3N0X211bHRpX3F1ZXVlX2l0ZW1fZGVzdHJveSAoaXRlbSk7Ci0gICAgcmV0dXJuIHNxLT5zcmNyZXN1bHQ7Ci0gIH0KLXdhc19lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgIndlIGFyZSBFT1MsIGRyb3BwaW5nIGV2ZW50LCByZXR1cm4gR1NUX0ZMT1dfRU9TIik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9xdWV1ZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RTaW5nbGVRdWV1ZSAqc3E7Ci0gIEdzdE11bHRpUXVldWUgKm1xOwotCi0gIHNxID0gKEdzdFNpbmdsZVF1ZXVlICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgbXEgPSAoR3N0TXVsdGlRdWV1ZSAqKSBwYXJlbnQ7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCAocXVlcnkpKSB7Ci0gICAgICAgIGd1aW50MzIgY3VyaWQ7Ci0gICAgICAgIEdzdE11bHRpUXVldWVJdGVtICppdGVtOwotCi0gICAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7Ci0gICAgICAgIGlmIChzcS0+c3JjcmVzdWx0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGdvdG8gb3V0X2ZsdXNoaW5nOwotCi0gICAgICAgIC8qIHNlcmlhbGl6ZWQgZXZlbnRzIGdvIGluIHRoZSBxdWV1ZS4gV2UgbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgd2UKLSAgICAgICAgICogZG9uJ3QgY2F1c2UgZGVhZGxvY2tzIHdhaXRpbmcgZm9yIHRoZSBxdWVyeSByZXR1cm4gdmFsdWUuIFdlIGNoZWNrIGlmCi0gICAgICAgICAqIHRoZSBxdWV1ZSBpcyBlbXB0eSAobm90aGluZyBpcyBibG9ja2luZyBkb3duc3RyZWFtIGFuZCB0aGUgcXVlcnkgY2FuCi0gICAgICAgICAqIGJlIHB1c2hlZCBmb3Igc3VyZSkgb3Igd2UgYXJlIG5vdCBidWZmZXJpbmcuIElmIHdlIGFyZSBidWZmZXJpbmcsCi0gICAgICAgICAqIHRoZSBwaXBlbGluZSB3YWl0cyB0byB1bmJsb2NrIGRvd25zdHJlYW0gdW50aWwgb3VyIHF1ZXVlIGZpbGxzIHVwCi0gICAgICAgICAqIGNvbXBsZXRlbHksIHdoaWNoIGNhbiBub3QgaGFwcGVuIGlmIHdlIGJsb2NrIG9uIHRoZSBxdWVyeS4uCi0gICAgICAgICAqIFRoZXJlZm9yZSB3ZSBvbmx5IHBvdGVudGlhbGx5IGJsb2NrIHdoZW4gd2UgYXJlIG5vdCBidWZmZXJpbmcuICovCi0gICAgICAgIGlmICghbXEtPnVzZV9idWZmZXJpbmcgfHwgZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkgKHNxLT5xdWV1ZSkpIHsKLSAgICAgICAgICAvKiBHZXQgYW4gdW5pcXVlIGluY3JlbWVudGluZyBpZC4gKi8KLSAgICAgICAgICBjdXJpZCA9IGdfYXRvbWljX2ludF9hZGQgKChnaW50ICopICYgbXEtPmNvdW50ZXIsIDEpOwotCi0gICAgICAgICAgaXRlbSA9IGdzdF9tdWx0aV9xdWV1ZV9tb19pdGVtX25ldyAoKEdzdE1pbmlPYmplY3QgKikgcXVlcnksIGN1cmlkKTsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLAotICAgICAgICAgICAgICAiU2luZ2xlUXVldWUgJWQgOiBFbnF1ZXVpbmcgcXVlcnkgJXAgb2YgdHlwZSAlcyB3aXRoIGlkICVkIiwKLSAgICAgICAgICAgICAgc3EtPmlkLCBxdWVyeSwgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpLCBjdXJpZCk7Ci0gICAgICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotICAgICAgICAgIHJlcyA9IGdzdF9kYXRhX3F1ZXVlX3B1c2ggKHNxLT5xdWV1ZSwgKEdzdERhdGFRdWV1ZUl0ZW0gKikgaXRlbSk7Ci0gICAgICAgICAgR1NUX01VTFRJX1FVRVVFX01VVEVYX0xPQ0sgKG1xKTsKLSAgICAgICAgICBpZiAoIXJlcyB8fCBzcS0+Zmx1c2hpbmcpCi0gICAgICAgICAgICBnb3RvIG91dF9mbHVzaGluZzsKLSAgICAgICAgICAvKiBpdCBtaWdodCBiZSB0aGF0IHRoZSBxdWVyeSBoYXMgYmVlbiB0YWtlbiBvdXQgb2YgdGhlIHF1ZXVlCi0gICAgICAgICAgICogd2hpbGUgd2Ugd2VyZSB1bmxvY2tlZC4gU28sIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3QKLSAgICAgICAgICAgKiBoYW5kbGVkIHF1ZXJ5IGlzIHRoZSBzYW1lIG9uZSB0aGFuIHRoZSBvbmUgd2UganVzdAotICAgICAgICAgICAqIHB1c2hlZC4gSWYgaXQgaXMsIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvbmRpdGlvbgotICAgICAgICAgICAqIHZhcmlhYmxlLCBvdGhlcndpc2Ugd2Ugd2FpdCBmb3IgdGhlIGNvbmRpdGlvbiB2YXJpYWJsZSB0bwotICAgICAgICAgICAqIGJlIHNpZ25hbGVkLiAqLwotICAgICAgICAgIGlmIChzcS0+bGFzdF9oYW5kbGVkX3F1ZXJ5ICE9IHF1ZXJ5KQotICAgICAgICAgICAgZ19jb25kX3dhaXQgKCZzcS0+cXVlcnlfaGFuZGxlZCwgJm1xLT5xbG9jayk7Ci0gICAgICAgICAgcmVzID0gc3EtPmxhc3RfcXVlcnk7Ci0gICAgICAgICAgc3EtPmxhc3RfaGFuZGxlZF9xdWVyeSA9IE5VTEw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJyZWZ1c2luZyBxdWVyeSwgd2UgYXJlIGJ1ZmZlcmluZyBhbmQgdGhlICIKLSAgICAgICAgICAgICAgInF1ZXVlIGlzIG5vdCBlbXB0eSIpOwotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGRlZmF1bHQgaGFuZGxpbmcgKi8KLSAgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLQotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJGbHVzaGluZyIpOwotICAgIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXVsdGlfcXVldWVfc3JjX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBHc3RNdWx0aVF1ZXVlICptcTsKLSAgR3N0U2luZ2xlUXVldWUgKnNxOwotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICBtcSA9IHNxLT5tcXVldWU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXEsICJTaW5nbGVRdWV1ZSAlZCIsIHNxLT5pZCk7Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgcmVzdWx0ID0gZ3N0X3NpbmdsZV9xdWV1ZV9mbHVzaCAobXEsIHNxLCBGQUxTRSwgVFJVRSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBnc3Rfc2luZ2xlX3F1ZXVlX2ZsdXNoIChtcSwgc3EsIFRSVUUsIFRSVUUpOwotICAgICAgICAvKiBtYWtlIHN1cmUgc3RyZWFtaW5nIGZpbmlzaGVzICovCi0gICAgICAgIHJlc3VsdCB8PSBnc3RfcGFkX3N0b3BfdGFzayAocGFkKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bHRpX3F1ZXVlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFNpbmdsZVF1ZXVlICpzcSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgR3N0TXVsdGlRdWV1ZSAqbXEgPSBzcS0+bXF1ZXVlOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfUkVDT05GSUdVUkU6Ci0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotICAgICAgaWYgKHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgewotICAgICAgICBzcS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICAgIGdfY29uZF9zaWduYWwgKCZzcS0+dHVybik7Ci0gICAgICB9Ci0gICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0KLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3EtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNxLT5zaW5rcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bHRpX3F1ZXVlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICAvKiBGSVhNRSwgSGFuZGxlIHBvc2l0aW9uIG9mZnNldCBkZXBlbmRpbmcgb24gcXVldWUgc2l6ZSAqLwotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBkZWZhdWx0OgotICAgICAgLyogZGVmYXVsdCBoYW5kbGluZyAqLwotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoKLSAqIE5leHQtbm9uLWxpbmtlZCBmdW5jdGlvbnMKLSAqLwotCi0vKiBXSVRIIExPQ0sgVEFLRU4gKi8KLXN0YXRpYyB2b2lkCi13YWtlX3VwX25leHRfbm9uX2xpbmtlZCAoR3N0TXVsdGlRdWV1ZSAqIG1xKQotewotICBHTGlzdCAqdG1wOwotCi0gIC8qIG1heWJlIG5vLW9uZSBpcyB3YWl0aW5nICovCi0gIGlmIChtcS0+bnVtd2FpdGluZyA8IDEpCi0gICAgcmV0dXJuOwotCi0gIGlmIChtcS0+c3luY19ieV9ydW5uaW5nX3RpbWUgJiYgR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChtcS0+aGlnaF90aW1lKSkgewotICAgIC8qIEVsc2UgZmlndXJlIG91dCB3aGljaCBzaW5nbGVxdWV1ZShzKSBuZWVkIHdha2luZyB1cCAqLwotICAgIGZvciAodG1wID0gbXEtPnF1ZXVlczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKLSAgICAgIEdzdFNpbmdsZVF1ZXVlICpzcSA9IChHc3RTaW5nbGVRdWV1ZSAqKSB0bXAtPmRhdGE7Ci0gICAgICBpZiAoc3EtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSB7Ci0gICAgICAgIEdzdENsb2NrVGltZURpZmYgaGlnaF90aW1lOwotCi0gICAgICAgIGlmIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKHNxLT5ncm91cF9oaWdoX3RpbWUpKQotICAgICAgICAgIGhpZ2hfdGltZSA9IHNxLT5ncm91cF9oaWdoX3RpbWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBoaWdoX3RpbWUgPSBtcS0+aGlnaF90aW1lOwotCi0gICAgICAgIGlmIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKHNxLT5uZXh0X3RpbWUpICYmCi0gICAgICAgICAgICBHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKGhpZ2hfdGltZSkKLSAgICAgICAgICAgICYmIHNxLT5uZXh0X3RpbWUgPD0gaGlnaF90aW1lKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiV2FraW5nIHVwIHNpbmdsZXF1ZXVlICVkIiwgc3EtPmlkKTsKLSAgICAgICAgICBnX2NvbmRfc2lnbmFsICgmc3EtPnR1cm4pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIEVsc2UgZmlndXJlIG91dCB3aGljaCBzaW5nbGVxdWV1ZShzKSBuZWVkIHdha2luZyB1cCAqLwotICAgIGZvciAodG1wID0gbXEtPnF1ZXVlczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKLSAgICAgIEdzdFNpbmdsZVF1ZXVlICpzcSA9IChHc3RTaW5nbGVRdWV1ZSAqKSB0bXAtPmRhdGE7Ci0gICAgICBpZiAoc3EtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEICYmCi0gICAgICAgICAgc3EtPm5leHRpZCAhPSAwICYmIHNxLT5uZXh0aWQgPD0gbXEtPmhpZ2hpZCkgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAobXEsICJXYWtpbmcgdXAgc2luZ2xlcXVldWUgJWQiLCBzcS0+aWQpOwotICAgICAgICBnX2NvbmRfc2lnbmFsICgmc3EtPnR1cm4pOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi0vKiBXSVRIIExPQ0sgVEFLRU4gKi8KLXN0YXRpYyB2b2lkCi1jb21wdXRlX2hpZ2hfaWQgKEdzdE11bHRpUXVldWUgKiBtcSkKLXsKLSAgLyogVGhlIGhpZ2gtaWQgaXMgZWl0aGVyIHRoZSBoaWdoZXN0IGlkIGFtb25nIHRoZSBsaW5rZWQgcGFkcywgb3IgaWYgYWxsCi0gICAqIHBhZHMgYXJlIG5vdC1saW5rZWQsIGl0J3MgdGhlIGxvd2VzdCBub3QtbGlua2VkIHBhZCAqLwotICBHTGlzdCAqdG1wOwotICBndWludDMyIGxvd2VzdCA9IEdfTUFYVUlOVDMyOwotICBndWludDMyIGhpZ2hpZCA9IEdfTUFYVUlOVDMyOwotCi0gIGZvciAodG1wID0gbXEtPnF1ZXVlczsgdG1wOyB0bXAgPSBnX2xpc3RfbmV4dCAodG1wKSkgewotICAgIEdzdFNpbmdsZVF1ZXVlICpzcSA9IChHc3RTaW5nbGVRdWV1ZSAqKSB0bXAtPmRhdGE7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAobXEsICJpbnNwZWN0aW5nIHNxOiVkICwgbmV4dGlkOiVkLCBvbGRpZDolZCwgc3JjcmVzdWx0OiVzIiwKLSAgICAgICAgc3EtPmlkLCBzcS0+bmV4dGlkLCBzcS0+b2xkaWQsIGdzdF9mbG93X2dldF9uYW1lIChzcS0+c3JjcmVzdWx0KSk7Ci0KLSAgICBpZiAoc3EtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSB7Ci0gICAgICAvKiBObyBuZWVkIHRvIGNvbnNpZGVyIHF1ZXVlcyB3aGljaCBhcmUgbm90IHdhaXRpbmcgKi8KLSAgICAgIGlmIChzcS0+bmV4dGlkID09IDApIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAic3E6JWQgaXMgbm90IHdhaXRpbmcgLSBpZ25vcmluZyIsIHNxLT5pZCk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBpZiAoc3EtPm5leHRpZCA8IGxvd2VzdCkKLSAgICAgICAgbG93ZXN0ID0gc3EtPm5leHRpZDsKLSAgICB9IGVsc2UgaWYgKCFHU1RfUEFEX0lTX0VPUyAoc3EtPnNyY3BhZCkgJiYgc3EtPnNyY3Jlc3VsdCAhPSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBnbG9iYWwgaGlnaGlkLCBvciB0aGUgZ2xvYmFsIGhpZ2hpZCBpcyBsb3dlciB0aGFuCi0gICAgICAgKiB0aGlzIHNpbmdsZSBxdWV1ZSdzIGxhc3Qgb3V0cHV0dGVkIGlkLCBzdG9yZSB0aGUgcXVldWUncyBvbmUsIAotICAgICAgICogdW5sZXNzIHRoZSBzaW5nbGVxdWV1ZSBvdXRwdXQgaXMgYXQgRU9TICovCi0gICAgICBpZiAoKGhpZ2hpZCA9PSBHX01BWFVJTlQzMikgfHwgKHNxLT5vbGRpZCA+IGhpZ2hpZCkpCi0gICAgICAgIGhpZ2hpZCA9IHNxLT5vbGRpZDsKLSAgICB9Ci0gIH0KLQotICBpZiAoaGlnaGlkID09IEdfTUFYVUlOVDMyIHx8IGxvd2VzdCA8IGhpZ2hpZCkKLSAgICBtcS0+aGlnaGlkID0gbG93ZXN0OwotICBlbHNlCi0gICAgbXEtPmhpZ2hpZCA9IGhpZ2hpZDsKLQotICBHU1RfTE9HX09CSkVDVCAobXEsICJIaWdoaWQgaXMgbm93IDogJXUsIGxvd2VzdCBub24tbGlua2VkICV1IiwgbXEtPmhpZ2hpZCwKLSAgICAgIGxvd2VzdCk7Ci19Ci0KLS8qIFdJVEggTE9DSyBUQUtFTiAqLwotc3RhdGljIHZvaWQKLWNvbXB1dGVfaGlnaF90aW1lIChHc3RNdWx0aVF1ZXVlICogbXEsIGd1aW50IGdyb3VwaWQpCi17Ci0gIC8qIFRoZSBoaWdoLXRpbWUgaXMgZWl0aGVyIHRoZSBoaWdoZXN0IGxhc3QgdGltZSBhbW9uZyB0aGUgbGlua2VkCi0gICAqIHBhZHMsIG9yIGlmIGFsbCBwYWRzIGFyZSBub3QtbGlua2VkLCBpdCdzIHRoZSBsb3dlc3QgbmV4IHRpbWUgb2YKLSAgICogbm90LWxpbmtlZCBwYWQgKi8KLSAgR0xpc3QgKnRtcDsKLSAgR3N0Q2xvY2tUaW1lRGlmZiBoaWdoZXN0ID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gIEdzdENsb2NrVGltZURpZmYgbG93ZXN0ID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gIEdzdENsb2NrVGltZURpZmYgZ3JvdXBfaGlnaCA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICBHc3RDbG9ja1RpbWVEaWZmIGdyb3VwX2xvdyA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICBHc3RDbG9ja1RpbWVEaWZmIHJlczsKLSAgLyogTnVtYmVyIG9mIHN0cmVhbXMgd2hpY2ggYmVsb25nIHRvIGdyb3VwaWQgKi8KLSAgZ3VpbnQgZ3JvdXBfY291bnQgPSAwOwotCi0gIGlmICghbXEtPnN5bmNfYnlfcnVubmluZ190aW1lKQotICAgIC8qIHJldHVybiBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTsgKi8KLSAgICByZXR1cm47Ci0KLSAgZm9yICh0bXAgPSBtcS0+cXVldWVzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgewotICAgIEdzdFNpbmdsZVF1ZXVlICpzcSA9IChHc3RTaW5nbGVRdWV1ZSAqKSB0bXAtPmRhdGE7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAobXEsCi0gICAgICAgICJpbnNwZWN0aW5nIHNxOiVkIChncm91cDolZCkgLCBuZXh0X3RpbWU6JSIgR1NUX1NUSU1FX0ZPUk1BVAotICAgICAgICAiLCBsYXN0X3RpbWU6JSIgR1NUX1NUSU1FX0ZPUk1BVCAiLCBzcmNyZXN1bHQ6JXMiLCBzcS0+aWQsIHNxLT5ncm91cGlkLAotICAgICAgICBHU1RfU1RJTUVfQVJHUyAoc3EtPm5leHRfdGltZSksIEdTVF9TVElNRV9BUkdTIChzcS0+bGFzdF90aW1lKSwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHNxLT5zcmNyZXN1bHQpKTsKLQotICAgIGlmIChzcS0+Z3JvdXBpZCA9PSBncm91cGlkKQotICAgICAgZ3JvdXBfY291bnQrKzsKLQotICAgIGlmIChzcS0+c3JjcmVzdWx0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQpIHsKLSAgICAgIC8qIE5vIG5lZWQgdG8gY29uc2lkZXIgcXVldWVzIHdoaWNoIGFyZSBub3Qgd2FpdGluZyAqLwotICAgICAgaWYgKCFHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKHNxLT5uZXh0X3RpbWUpKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChtcSwgInNxOiVkIGlzIG5vdCB3YWl0aW5nIC0gaWdub3JpbmciLCBzcS0+aWQpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGxvd2VzdCA9PSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSB8fCBzcS0+bmV4dF90aW1lIDwgbG93ZXN0KQotICAgICAgICBsb3dlc3QgPSBzcS0+bmV4dF90aW1lOwotICAgICAgaWYgKHNxLT5ncm91cGlkID09IGdyb3VwaWQgJiYgKGdyb3VwX2xvdyA9PSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORQotICAgICAgICAgICAgICB8fCBzcS0+bmV4dF90aW1lIDwgZ3JvdXBfbG93KSkKLSAgICAgICAgZ3JvdXBfbG93ID0gc3EtPm5leHRfdGltZTsKLSAgICB9IGVsc2UgaWYgKCFHU1RfUEFEX0lTX0VPUyAoc3EtPnNyY3BhZCkgJiYgc3EtPnNyY3Jlc3VsdCAhPSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBnbG9iYWwgaGlnaCB0aW1lLCBvciB0aGUgZ2xvYmFsIGhpZ2ggdGltZQotICAgICAgICogaXMgbG93ZXIgdGhhbiB0aGlzIHNpbmdsZSBxdWV1ZSdzIGxhc3Qgb3V0cHV0dGVkIHRpbWUsIHN0b3JlCi0gICAgICAgKiB0aGUgcXVldWUncyBvbmUsIHVubGVzcyB0aGUgc2luZ2xlcXVldWUgb3V0cHV0IGlzIGF0IEVPUy4gKi8KLSAgICAgIGlmIChoaWdoZXN0ID09IEdTVF9DTE9DS19TVElNRV9OT05FCi0gICAgICAgICAgfHwgKHNxLT5sYXN0X3RpbWUgIT0gR1NUX0NMT0NLX1NUSU1FX05PTkUgJiYgc3EtPmxhc3RfdGltZSA+IGhpZ2hlc3QpKQotICAgICAgICBoaWdoZXN0ID0gc3EtPmxhc3RfdGltZTsKLSAgICAgIGlmIChzcS0+Z3JvdXBpZCA9PSBncm91cGlkICYmIChncm91cF9oaWdoID09IEdTVF9DTE9DS19TVElNRV9OT05FCi0gICAgICAgICAgICAgIHx8IChzcS0+bGFzdF90aW1lICE9IEdTVF9DTE9DS19TVElNRV9OT05FCi0gICAgICAgICAgICAgICAgICAmJiBzcS0+bGFzdF90aW1lID4gZ3JvdXBfaGlnaCkpKQotICAgICAgICBncm91cF9oaWdoID0gc3EtPmxhc3RfdGltZTsKLSAgICB9Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG1xLAotICAgICAgICAiaGlnaGVzdCBub3cgJSIgR1NUX1NUSU1FX0ZPUk1BVCAiIGxvd2VzdCAlIiBHU1RfU1RJTUVfRk9STUFULAotICAgICAgICBHU1RfU1RJTUVfQVJHUyAoaGlnaGVzdCksIEdTVF9TVElNRV9BUkdTIChsb3dlc3QpKTsKLSAgICBpZiAoc3EtPmdyb3VwaWQgPT0gZ3JvdXBpZCkKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChtcSwKLSAgICAgICAgICAiZ3JvdXBoaWdoICUiIEdTVF9TVElNRV9GT1JNQVQgIiBncm91cGxvdyAlIiBHU1RfU1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9TVElNRV9BUkdTIChncm91cF9oaWdoKSwgR1NUX1NUSU1FX0FSR1MgKGdyb3VwX2xvdykpOwotICB9Ci0KLSAgaWYgKGhpZ2hlc3QgPT0gR1NUX0NMT0NLX1NUSU1FX05PTkUpCi0gICAgbXEtPmhpZ2hfdGltZSA9IGxvd2VzdDsKLSAgZWxzZQotICAgIG1xLT5oaWdoX3RpbWUgPSBoaWdoZXN0OwotCi0gIC8qIElmIHRoZXJlJ3Mgb25seSBvbmUgc3RyZWFtIG9mIGEgZ2l2ZW4gdHlwZSwgdXNlIHRoZSBnbG9iYWwgaGlnaCAqLwotICBpZiAoZ3JvdXBfY291bnQgPCAyKQotICAgIHJlcyA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICBlbHNlIGlmIChncm91cF9oaWdoID09IEdTVF9DTE9DS19TVElNRV9OT05FKQotICAgIHJlcyA9IGdyb3VwX2xvdzsKLSAgZWxzZQotICAgIHJlcyA9IGdyb3VwX2hpZ2g7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiZ3JvdXAgY291bnQgJWQgZm9yIGdyb3VwaWQgJXUiLCBncm91cF9jb3VudCwgZ3JvdXBpZCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChtcSwKLSAgICAgICJNUSBIaWdoIHRpbWUgaXMgbm93IDogJSIgR1NUX1NUSU1FX0ZPUk1BVCAiLCBncm91cCAlZCBoaWdoIHRpbWUgJSIKLSAgICAgIEdTVF9TVElNRV9GT1JNQVQgIiwgbG93ZXN0IG5vbi1saW5rZWQgJSIgR1NUX1NUSU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9TVElNRV9BUkdTIChtcS0+aGlnaF90aW1lKSwgZ3JvdXBpZCwgR1NUX1NUSU1FX0FSR1MgKG1xLT5oaWdoX3RpbWUpLAotICAgICAgR1NUX1NUSU1FX0FSR1MgKGxvd2VzdCkpOwotCi0gIGZvciAodG1wID0gbXEtPnF1ZXVlczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKLSAgICBHc3RTaW5nbGVRdWV1ZSAqc3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOwotICAgIGlmIChncm91cGlkID09IHNxLT5ncm91cGlkKQotICAgICAgc3EtPmdyb3VwX2hpZ2hfdGltZSA9IHJlczsKLSAgfQotfQotCi0jZGVmaW5lIElTX0ZJTExFRChxLCBmb3JtYXQsIHZhbHVlKSAoKChxKS0+bWF4X3NpemUuZm9ybWF0KSAhPSAwICYmIFwKLSAgICAgKChxKS0+bWF4X3NpemUuZm9ybWF0KSA8PSAodmFsdWUpKQotCi0vKgotICogR3N0U2luZ2xlUXVldWUgZnVuY3Rpb25zCi0gKi8KLXN0YXRpYyB2b2lkCi1zaW5nbGVfcXVldWVfb3ZlcnJ1bl9jYiAoR3N0RGF0YVF1ZXVlICogZHEsIEdzdFNpbmdsZVF1ZXVlICogc3EpCi17Ci0gIEdzdE11bHRpUXVldWUgKm1xID0gc3EtPm1xdWV1ZTsKLSAgR0xpc3QgKnRtcDsKLSAgR3N0RGF0YVF1ZXVlU2l6ZSBzaXplOwotICBnYm9vbGVhbiBmaWxsZWQgPSBUUlVFOwotICBnYm9vbGVhbiBlbXB0eV9mb3VuZCA9IEZBTFNFOwotCi0gIGdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbCAoc3EtPnF1ZXVlLCAmc2l6ZSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG1xLAotICAgICAgIlNpbmdsZSBRdWV1ZSAlZDogRU9TICVkLCB2aXNpYmxlICV1LyV1LCBieXRlcyAldS8ldSwgdGltZSAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLyUiIEdfR1VJTlQ2NF9GT1JNQVQsIHNxLT5pZCwgc3EtPmlzX2Vvcywgc2l6ZS52aXNpYmxlLAotICAgICAgc3EtPm1heF9zaXplLnZpc2libGUsIHNpemUuYnl0ZXMsIHNxLT5tYXhfc2l6ZS5ieXRlcywgc3EtPmN1cl90aW1lLAotICAgICAgc3EtPm1heF9zaXplLnRpbWUpOwotCi0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcSk7Ci0KLSAgLyogY2hlY2sgaWYgd2UgcmVhY2hlZCB0aGUgaGFyZCB0aW1lL2J5dGVzIGxpbWl0czsKLSAgICAgdGltZSBsaW1pdCBpcyBvbmx5IHRha2VuIGludG8gYWNjb3VudCBmb3Igbm9uLXNwYXJzZSBzdHJlYW1zICovCi0gIGlmIChzcS0+aXNfZW9zIHx8IElTX0ZJTExFRCAoc3EsIGJ5dGVzLCBzaXplLmJ5dGVzKSB8fAotICAgICAgKCFzcS0+aXNfc3BhcnNlICYmIElTX0ZJTExFRCAoc3EsIHRpbWUsIHNxLT5jdXJfdGltZSkpKSB7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgLyogU2VhcmNoIGZvciBlbXB0eSBxdWV1ZXMgKi8KLSAgZm9yICh0bXAgPSBtcS0+cXVldWVzOyB0bXA7IHRtcCA9IGdfbGlzdF9uZXh0ICh0bXApKSB7Ci0gICAgR3N0U2luZ2xlUXVldWUgKm9xID0gKEdzdFNpbmdsZVF1ZXVlICopIHRtcC0+ZGF0YTsKLQotICAgIGlmIChvcSA9PSBzcSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKG9xLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKG1xLCAiUXVldWUgJWQgaXMgbm90LWxpbmtlZCIsIG9xLT5pZCk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAobXEsICJDaGVja2luZyBRdWV1ZSAlZCIsIG9xLT5pZCk7Ci0gICAgaWYgKGdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5IChvcS0+cXVldWUpICYmICFvcS0+aXNfc3BhcnNlKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAobXEsICJRdWV1ZSAlZCBpcyBlbXB0eSIsIG9xLT5pZCk7Ci0gICAgICBlbXB0eV9mb3VuZCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvKiBpZiBoYXJkIGxpbWl0cyBhcmUgbm90IHJlYWNoZWQgdGhlbiB3ZSBhbGxvdyBvbmUgbW9yZSBidWZmZXIgaW4gdGhlIGZ1bGwKLSAgICogcXVldWUsIGJ1dCBvbmx5IGlmIGFueSBvZiB0aGUgb3RoZXIgc2luZ2VscXVldWVzIGFyZSBlbXB0eSAqLwotICBpZiAoZW1wdHlfZm91bmQpIHsKLSAgICBpZiAoSVNfRklMTEVEIChzcSwgdmlzaWJsZSwgc2l6ZS52aXNpYmxlKSkgewotICAgICAgc3EtPm1heF9zaXplLnZpc2libGUgPSBzaXplLnZpc2libGUgKyAxOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCi0gICAgICAgICAgIkJ1bXBpbmcgc2luZ2xlIHF1ZXVlICVkIG1heCB2aXNpYmxlIHRvICVkIiwKLSAgICAgICAgICBzcS0+aWQsIHNxLT5tYXhfc2l6ZS52aXNpYmxlKTsKLSAgICAgIGZpbGxlZCA9IEZBTFNFOwotICAgIH0KLSAgfQotCi1kb25lOgotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcSk7Ci0KLSAgLyogT3ZlcnJ1biBpcyBhbHdheXMgZm9yd2FyZGVkLCBzaW5jZSB0aGlzIGlzIGJsb2NraW5nIHRoZSB1cHN0cmVhbSBlbGVtZW50ICovCi0gIGlmIChmaWxsZWQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcSwgIlF1ZXVlICVkIGlzIGZpbGxlZCwgc2lnbmFsbGluZyBvdmVycnVuIiwgc3EtPmlkKTsKLSAgICBnX3NpZ25hbF9lbWl0IChtcSwgZ3N0X211bHRpX3F1ZXVlX3NpZ25hbHNbU0lHTkFMX09WRVJSVU5dLCAwKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotc2luZ2xlX3F1ZXVlX3VuZGVycnVuX2NiIChHc3REYXRhUXVldWUgKiBkcSwgR3N0U2luZ2xlUXVldWUgKiBzcSkKLXsKLSAgZ2Jvb2xlYW4gZW1wdHkgPSBUUlVFOwotICBHc3RNdWx0aVF1ZXVlICptcSA9IHNxLT5tcXVldWU7Ci0gIEdMaXN0ICp0bXA7Ci0KLSAgaWYgKHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChtcSwgIlNpbmdsZSBRdWV1ZSAlZCBpcyBlbXB0eSBidXQgbm90LWxpbmtlZCIsIHNxLT5pZCk7Ci0gICAgcmV0dXJuOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChtcSwKLSAgICAgICAgIlNpbmdsZSBRdWV1ZSAlZCBpcyBlbXB0eSwgQ2hlY2tpbmcgb3RoZXIgc2luZ2xlIHF1ZXVlcyIsIHNxLT5pZCk7Ci0gIH0KLQotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfTE9DSyAobXEpOwotICBmb3IgKHRtcCA9IG1xLT5xdWV1ZXM7IHRtcDsgdG1wID0gZ19saXN0X25leHQgKHRtcCkpIHsKLSAgICBHc3RTaW5nbGVRdWV1ZSAqb3EgPSAoR3N0U2luZ2xlUXVldWUgKikgdG1wLT5kYXRhOwotCi0gICAgaWYgKGdzdF9kYXRhX3F1ZXVlX2lzX2Z1bGwgKG9xLT5xdWV1ZSkpIHsKLSAgICAgIEdzdERhdGFRdWV1ZVNpemUgc2l6ZTsKLQotICAgICAgZ3N0X2RhdGFfcXVldWVfZ2V0X2xldmVsIChvcS0+cXVldWUsICZzaXplKTsKLSAgICAgIGlmIChJU19GSUxMRUQgKG9xLCB2aXNpYmxlLCBzaXplLnZpc2libGUpKSB7Ci0gICAgICAgIG9xLT5tYXhfc2l6ZS52aXNpYmxlID0gc2l6ZS52aXNpYmxlICsgMTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXEsCi0gICAgICAgICAgICAicXVldWUgJWQgaXMgZmlsbGVkLCBidW1waW5nIGl0cyBtYXggdmlzaWJsZSB0byAlZCIsIG9xLT5pZCwKLSAgICAgICAgICAgIG9xLT5tYXhfc2l6ZS52aXNpYmxlKTsKLSAgICAgICAgZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQgKG9xLT5xdWV1ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkgKG9xLT5xdWV1ZSkgfHwgb3EtPmlzX3NwYXJzZSkKLSAgICAgIGVtcHR5ID0gRkFMU0U7Ci0gIH0KLSAgR1NUX01VTFRJX1FVRVVFX01VVEVYX1VOTE9DSyAobXEpOwotCi0gIGlmIChlbXB0eSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1xLCAiQWxsIHF1ZXVlcyBhcmUgZW1wdHksIHNpZ25hbGxpbmcgaXQiKTsKLSAgICBnX3NpZ25hbF9lbWl0IChtcSwgZ3N0X211bHRpX3F1ZXVlX3NpZ25hbHNbU0lHTkFMX1VOREVSUlVOXSwgMCk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1zaW5nbGVfcXVldWVfY2hlY2tfZnVsbCAoR3N0RGF0YVF1ZXVlICogZGF0YXEsIGd1aW50IHZpc2libGUsIGd1aW50IGJ5dGVzLAotICAgIGd1aW50NjQgdGltZSwgR3N0U2luZ2xlUXVldWUgKiBzcSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RNdWx0aVF1ZXVlICptcSA9IHNxLT5tcXVldWU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXEsCi0gICAgICAicXVldWUgJWQ6IHZpc2libGUgJXUvJXUsIGJ5dGVzICV1LyV1LCB0aW1lICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi8lIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgc3EtPmlkLCB2aXNpYmxlLCBzcS0+bWF4X3NpemUudmlzaWJsZSwgYnl0ZXMsCi0gICAgICBzcS0+bWF4X3NpemUuYnl0ZXMsIHNxLT5jdXJfdGltZSwgc3EtPm1heF9zaXplLnRpbWUpOwotCi0gIC8qIHdlIGFyZSBhbHdheXMgZmlsbGVkIG9uIEVPUyAqLwotICBpZiAoc3EtPmlzX2VvcykKLSAgICByZXR1cm4gVFJVRTsKLQotICAvKiB3ZSBuZXZlciBnbyBwYXN0IHRoZSBtYXggdmlzaWJsZSBpdGVtcyB1bmxlc3Mgd2UgYXJlIGluIGJ1ZmZlcmluZyBtb2RlICovCi0gIGlmICghbXEtPnVzZV9idWZmZXJpbmcgJiYgSVNfRklMTEVEIChzcSwgdmlzaWJsZSwgdmlzaWJsZSkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogY2hlY2sgdGltZSBvciBieXRlcyAqLwotICByZXMgPSBJU19GSUxMRUQgKHNxLCBieXRlcywgYnl0ZXMpOwotICAvKiBXZSBvbmx5IGNhcmUgYWJvdXQgbGltaXRzIGluIHRpbWUgaWYgd2UncmUgbm90IGEgc3BhcnNlIHN0cmVhbSBvcgotICAgKiB3ZSdyZSBub3Qgc3luY2luZyBieSBydW5uaW5nIHRpbWUgKi8KLSAgaWYgKCFzcS0+aXNfc3BhcnNlIHx8ICFtcS0+c3luY19ieV9ydW5uaW5nX3RpbWUpIHsKLSAgICAvKiBJZiB1bmxpbmtlZCwgdGFrZSBpbnRvIGFjY291bnQgdGhlIGV4dHJhIHVubGlua2VkIGNhY2hlIHRpbWUgKi8KLSAgICBpZiAobXEtPnN5bmNfYnlfcnVubmluZ190aW1lICYmIHNxLT5zcmNyZXN1bHQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgewotICAgICAgaWYgKHNxLT5jdXJfdGltZSA+IG1xLT51bmxpbmtlZF9jYWNoZV90aW1lKQotICAgICAgICByZXMgfD0gSVNfRklMTEVEIChzcSwgdGltZSwgc3EtPmN1cl90aW1lIC0gbXEtPnVubGlua2VkX2NhY2hlX3RpbWUpOwotICAgICAgZWxzZQotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICB9IGVsc2UKLSAgICAgIHJlcyB8PSBJU19GSUxMRUQgKHNxLCB0aW1lLCBzcS0+Y3VyX3RpbWUpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zaW5nbGVfcXVldWVfZmx1c2hfcXVldWUgKEdzdFNpbmdsZVF1ZXVlICogc3EsIGdib29sZWFuIGZ1bGwpCi17Ci0gIEdzdERhdGFRdWV1ZUl0ZW0gKnNpdGVtOwotICBHc3RNdWx0aVF1ZXVlSXRlbSAqbWl0ZW07Ci0gIGdib29sZWFuIHdhc19mbHVzaGluZyA9IEZBTFNFOwotCi0gIHdoaWxlICghZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkgKHNxLT5xdWV1ZSkpIHsKLSAgICBHc3RNaW5pT2JqZWN0ICpkYXRhOwotCi0gICAgLyogRklYTUU6IElmIHRoaXMgZmFpbHMgaGVyZSBhbHRob3VnaCB0aGUgcXVldWUgaXMgbm90IGVtcHR5LAotICAgICAqIHdlJ3JlIGZsdXNoaW5nLi4uIGJ1dCB3ZSB3YW50IHRvIHJlc2N1ZSBhbGwgc3RpY2t5Ci0gICAgICogZXZlbnRzIG5vbmV0aGVsZXNzLgotICAgICAqLwotICAgIGlmICghZ3N0X2RhdGFfcXVldWVfcG9wIChzcS0+cXVldWUsICZzaXRlbSkpIHsKLSAgICAgIHdhc19mbHVzaGluZyA9IFRSVUU7Ci0gICAgICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHNxLT5xdWV1ZSwgRkFMU0UpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgbWl0ZW0gPSAoR3N0TXVsdGlRdWV1ZUl0ZW0gKikgc2l0ZW07Ci0KLSAgICBkYXRhID0gc2l0ZW0tPm9iamVjdDsKLQotICAgIGlmICghZnVsbCAmJiAhbWl0ZW0tPmlzX3F1ZXJ5ICYmIEdTVF9JU19FVkVOVCAoZGF0YSkKLSAgICAgICAgJiYgR1NUX0VWRU5UX0lTX1NUSUNLWSAoZGF0YSkKLSAgICAgICAgJiYgR1NUX0VWRU5UX1RZUEUgKGRhdGEpICE9IEdTVF9FVkVOVF9TRUdNRU5UCi0gICAgICAgICYmIEdTVF9FVkVOVF9UWVBFIChkYXRhKSAhPSBHU1RfRVZFTlRfRU9TKSB7Ci0gICAgICBnc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudCAoc3EtPnNyY3BhZCwgR1NUX0VWRU5UX0NBU1QgKGRhdGEpKTsKLSAgICB9Ci0KLSAgICBzaXRlbS0+ZGVzdHJveSAoc2l0ZW0pOwotICB9Ci0KLSAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggKHNxLT5xdWV1ZSk7Ci0gIGlmICh3YXNfZmx1c2hpbmcpCi0gICAgZ3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nIChzcS0+cXVldWUsIFRSVUUpOwotCi0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChzcS0+bXF1ZXVlKTsKLSAgdXBkYXRlX2J1ZmZlcmluZyAoc3EtPm1xdWV1ZSwgc3EpOwotICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChzcS0+bXF1ZXVlKTsKLSAgZ3N0X211bHRpX3F1ZXVlX3Bvc3RfYnVmZmVyaW5nIChzcS0+bXF1ZXVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zaW5nbGVfcXVldWVfZnJlZSAoR3N0U2luZ2xlUXVldWUgKiBzcSkKLXsKLSAgLyogRFJBSU4gUVVFVUUgKi8KLSAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggKHNxLT5xdWV1ZSk7Ci0gIGdfb2JqZWN0X3VucmVmIChzcS0+cXVldWUpOwotICBnX2NvbmRfY2xlYXIgKCZzcS0+dHVybik7Ci0gIGdfY29uZF9jbGVhciAoJnNxLT5xdWVyeV9oYW5kbGVkKTsKLSAgZ19mcmVlIChzcSk7Ci19Ci0KLXN0YXRpYyBHc3RTaW5nbGVRdWV1ZSAqCi1nc3Rfc2luZ2xlX3F1ZXVlX25ldyAoR3N0TXVsdGlRdWV1ZSAqIG1xdWV1ZSwgZ3VpbnQgaWQpCi17Ci0gIEdzdFNpbmdsZVF1ZXVlICpzcTsKLSAgR3N0TXVsdGlRdWV1ZVBhZCAqbXFwYWQ7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIEdMaXN0ICp0bXA7Ci0gIGd1aW50IHRlbXBfaWQgPSAoaWQgPT0gLTEpID8gMCA6IGlkOwotCi0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9MT0NLIChtcXVldWUpOwotCi0gIC8qIEZpbmQgYW4gdW51c2VkIHF1ZXVlIElELCBpZiBwb3NzaWJsZSB0aGUgcGFzc2VkIG9uZSAqLwotICBmb3IgKHRtcCA9IG1xdWV1ZS0+cXVldWVzOyB0bXA7IHRtcCA9IGdfbGlzdF9uZXh0ICh0bXApKSB7Ci0gICAgR3N0U2luZ2xlUXVldWUgKnNxMiA9IChHc3RTaW5nbGVRdWV1ZSAqKSB0bXAtPmRhdGE7Ci0gICAgLyogVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBJRHMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgKi8KLSAgICBpZiAoc3EyLT5pZCA9PSB0ZW1wX2lkKSB7Ci0gICAgICAvKiBJZiB0aGlzIElEIHdhcyByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlciByZXR1cm4gTlVMTCwKLSAgICAgICAqIG90aGVyd2lzZSBqdXN0IGdldCB1cyB0aGUgbmV4dCBvbmUgKi8KLSAgICAgIGlmIChpZCA9PSAtMSkgewotICAgICAgICB0ZW1wX2lkID0gc3EyLT5pZCArIDE7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfTVVMVElfUVVFVUVfTVVURVhfVU5MT0NLIChtcXVldWUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHNxMi0+aWQgPiB0ZW1wX2lkKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBzcSA9IGdfbmV3MCAoR3N0U2luZ2xlUXVldWUsIDEpOwotICBtcXVldWUtPm5icXVldWVzKys7Ci0gIHNxLT5pZCA9IHRlbXBfaWQ7Ci0gIHNxLT5ncm91cGlkID0gREVGQVVMVF9QQURfR1JPVVBfSUQ7Ci0gIHNxLT5ncm91cF9oaWdoX3RpbWUgPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTsKLQotICBtcXVldWUtPnF1ZXVlcyA9IGdfbGlzdF9pbnNlcnRfYmVmb3JlIChtcXVldWUtPnF1ZXVlcywgdG1wLCBzcSk7Ci0gIG1xdWV1ZS0+cXVldWVzX2Nvb2tpZSsrOwotCi0gIC8qIGNvcHkgb3ZlciBtYXhfc2l6ZSBhbmQgZXh0cmFfc2l6ZSBzbyB3ZSBkb24ndCBuZWVkIHRvIHRha2UgdGhlIGxvY2sKLSAgICogYW55IGxvbmdlciB3aGVuIGNoZWNraW5nIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLiAqLwotICBzcS0+bWF4X3NpemUudmlzaWJsZSA9IG1xdWV1ZS0+bWF4X3NpemUudmlzaWJsZTsKLSAgc3EtPm1heF9zaXplLmJ5dGVzID0gbXF1ZXVlLT5tYXhfc2l6ZS5ieXRlczsKLSAgc3EtPm1heF9zaXplLnRpbWUgPSBtcXVldWUtPm1heF9zaXplLnRpbWU7Ci0KLSAgc3EtPmV4dHJhX3NpemUudmlzaWJsZSA9IG1xdWV1ZS0+ZXh0cmFfc2l6ZS52aXNpYmxlOwotICBzcS0+ZXh0cmFfc2l6ZS5ieXRlcyA9IG1xdWV1ZS0+ZXh0cmFfc2l6ZS5ieXRlczsKLSAgc3EtPmV4dHJhX3NpemUudGltZSA9IG1xdWV1ZS0+ZXh0cmFfc2l6ZS50aW1lOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG1xdWV1ZSwgIkNyZWF0aW5nIEdzdFNpbmdsZVF1ZXVlIGlkOiVkIiwgc3EtPmlkKTsKLQotICBzcS0+bXF1ZXVlID0gbXF1ZXVlOwotICBzcS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIHNxLT5wdXNoZWQgPSBGQUxTRTsKLSAgc3EtPnF1ZXVlID0gZ3N0X2RhdGFfcXVldWVfbmV3ICgoR3N0RGF0YVF1ZXVlQ2hlY2tGdWxsRnVuY3Rpb24pCi0gICAgICBzaW5nbGVfcXVldWVfY2hlY2tfZnVsbCwKLSAgICAgIChHc3REYXRhUXVldWVGdWxsQ2FsbGJhY2spIHNpbmdsZV9xdWV1ZV9vdmVycnVuX2NiLAotICAgICAgKEdzdERhdGFRdWV1ZUVtcHR5Q2FsbGJhY2spIHNpbmdsZV9xdWV1ZV91bmRlcnJ1bl9jYiwgc3EpOwotICBzcS0+aXNfZW9zID0gRkFMU0U7Ci0gIHNxLT5pc19zcGFyc2UgPSBGQUxTRTsKLSAgc3EtPmZsdXNoaW5nID0gRkFMU0U7Ci0gIHNxLT5hY3RpdmUgPSBGQUxTRTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNxLT5zaW5rX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzcS0+c3JjX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgc3EtPm5leHRpZCA9IDA7Ci0gIHNxLT5vbGRpZCA9IDA7Ci0gIHNxLT5uZXh0X3RpbWUgPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTsKLSAgc3EtPmxhc3RfdGltZSA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICBnX2NvbmRfaW5pdCAoJnNxLT50dXJuKTsKLSAgZ19jb25kX2luaXQgKCZzcS0+cXVlcnlfaGFuZGxlZCk7Ci0KLSAgc3EtPnNpbmt0aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gIHNxLT5zcmN0aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gIHNxLT5zaW5rX3RhaW50ZWQgPSBUUlVFOwotICBzcS0+c3JjX3RhaW50ZWQgPSBUUlVFOwotCi0gIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzaW5rXyV1Iiwgc3EtPmlkKTsKLSAgdGVtcGwgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzaW5rdGVtcGxhdGUpOwotICBzcS0+c2lua3BhZCA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfTVVMVElRVUVVRV9QQUQsICJuYW1lIiwgbmFtZSwKLSAgICAgICJkaXJlY3Rpb24iLCB0ZW1wbC0+ZGlyZWN0aW9uLCAidGVtcGxhdGUiLCB0ZW1wbCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlbXBsKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICBtcXBhZCA9IChHc3RNdWx0aVF1ZXVlUGFkICopIHNxLT5zaW5rcGFkOwotICBtcXBhZC0+c3EgPSBzcTsKLQotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc3EtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAoc3EtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfYWN0aXZhdGVfbW9kZSkpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uIChzcS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfcXVldWVfc2lua19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc3EtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX3NpbmtfcXVlcnkpKTsKLSAgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAoc3EtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MpKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc3EtPnNpbmtwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKTsKLQotICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjXyV1Iiwgc3EtPmlkKTsKLSAgc3EtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsIG5hbWUpOwotICBnX2ZyZWUgKG5hbWUpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAoc3EtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfcXVldWVfc3JjX2FjdGl2YXRlX21vZGUpKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNxLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX3NyY19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc3EtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfcXVldWVfc3JjX3F1ZXJ5KSk7Ci0gIGdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24gKHNxLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bHRpX3F1ZXVlX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MpKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc3EtPnNyY3BhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0NBUFMpOwotCi0gIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAoc3EtPnNpbmtwYWQsIChncG9pbnRlcikgc3EpOwotICBnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUgKHNxLT5zcmNwYWQsIChncG9pbnRlcikgc3EpOwotCi0gIEdTVF9NVUxUSV9RVUVVRV9NVVRFWF9VTkxPQ0sgKG1xdWV1ZSk7Ci0KLSAgLyogb25seSBhY3RpdmF0ZSB0aGUgcGFkcyB3aGVuIHdlIGFyZSBub3QgaW4gdGhlIE5VTEwgc3RhdGUKLSAgICogYW5kIGFkZCB0aGUgcGFkIHVuZGVyIHRoZSBzdGF0ZV9sb2NrIHRvIHByZXZlbmQgc3RhdGUgY2hhbmdlcwotICAgKiBiZXR3ZWVuIGFjdGl2YXRpbmcgYW5kIGFkZGluZyAqLwotICBnX3JlY19tdXRleF9sb2NrIChHU1RfU1RBVEVfR0VUX0xPQ0sgKG1xdWV1ZSkpOwotICBpZiAoR1NUX1NUQVRFX1RBUkdFVCAobXF1ZXVlKSAhPSBHU1RfU1RBVEVfTlVMTCkgewotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3EtPnNyY3BhZCwgVFJVRSk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcS0+c2lua3BhZCwgVFJVRSk7Ci0gIH0KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKG1xdWV1ZSksIHNxLT5zcmNwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAobXF1ZXVlKSwgc3EtPnNpbmtwYWQpOwotICBnX3JlY19tdXRleF91bmxvY2sgKEdTVF9TVEFURV9HRVRfTE9DSyAobXF1ZXVlKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXF1ZXVlLCAiR3N0U2luZ2xlUXVldWUgWyVkXSBjcmVhdGVkIGFuZCBwYWRzIGFkZGVkIiwKLSAgICAgIHNxLT5pZCk7Ci0KLSAgcmV0dXJuIHNxOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RtdWx0aXF1ZXVlLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkODQxMy4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdG11bHRpcXVldWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBFZHdhcmQgSGVydmV5IDxlZHdhcmRAZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0bXVsdGlxdWV1ZS5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9NVUxUSV9RVUVVRV9IX18KLSNkZWZpbmUgX19HU1RfTVVMVElfUVVFVUVfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9NVUxUSV9RVUVVRSBcCi0gIChnc3RfbXVsdGlfcXVldWVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX01VTFRJX1FVRVVFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTVVMVElfUVVFVUUsR3N0TXVsdGlRdWV1ZSkpCi0jZGVmaW5lIEdTVF9NVUxUSV9RVUVVRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9NVUxUSV9RVUVVRSxHc3RNdWx0aVF1ZXVlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTVVMVElfUVVFVUUob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9NVUxUSV9RVUVVRSkpCi0jZGVmaW5lIEdTVF9JU19NVUxUSV9RVUVVRV9DTEFTUyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfTVVMVElfUVVFVUUpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0TXVsdGlRdWV1ZSBHc3RNdWx0aVF1ZXVlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE11bHRpUXVldWVDbGFzcyBHc3RNdWx0aVF1ZXVlQ2xhc3M7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNdWx0aVF1ZXVlUGFkIEdzdE11bHRpUXVldWVQYWQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TXVsdGlRdWV1ZVBhZENsYXNzIEdzdE11bHRpUXVldWVQYWRDbGFzczsKLQotLyoqCi0gKiBHc3RNdWx0aVF1ZXVlOgotICoKLSAqIE9wYXF1ZSAjR3N0TXVsdGlRdWV1ZSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0TXVsdGlRdWV1ZSB7Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICBnYm9vbGVhbiBzeW5jX2J5X3J1bm5pbmdfdGltZTsKLSAgZ2Jvb2xlYW4gdXNlX2ludGVybGVhdmU7Ci0KLSAgLyogbnVtYmVyIG9mIHF1ZXVlcyAqLwotICBndWludAluYnF1ZXVlczsKLQotICAvKiBUaGUgbGlzdCBvZiBpbmRpdmlkdWFsIHF1ZXVlcyAqLwotICBHTGlzdCAqcXVldWVzOwotICBndWludDMyIHF1ZXVlc19jb29raWU7Ci0KLSAgR3N0RGF0YVF1ZXVlU2l6ZSAgbWF4X3NpemUsIGV4dHJhX3NpemU7Ci0gIGdib29sZWFuIHVzZV9idWZmZXJpbmc7Ci0gIGdpbnQgbG93X3dhdGVybWFyaywgaGlnaF93YXRlcm1hcms7Ci0gIGdib29sZWFuIGJ1ZmZlcmluZzsKLSAgZ2ludCBidWZmZXJpbmdfcGVyY2VudDsKLQotICBndWludCAgICBjb3VudGVyOwkvKiBpbmNvbWluZyBvYmplY3QgY291bnRlciwgdXNlIGF0b21pYyBhY2Nlc3NlcyAqLwotICBndWludDMyICBoaWdoaWQ7CS8qIGNvbnRhaW5zIGhpZ2hlc3QgaWQgb2YgbGFzdCBvdXRwdXR0ZWQgb2JqZWN0ICovCi0gIEdzdENsb2NrVGltZURpZmYgaGlnaF90aW1lOyAvKiBoaWdoZXN0IHN0YXJ0IHJ1bm5pbmcgdGltZSAqLwotCi0gIEdNdXRleCAgIHFsb2NrOwkvKiBHbG9iYWwgcXVldWUgbG9jayAodnMgb2JqZWN0IGxvY2sgb3IgaW5kaXZpZHVhbCAqLwotCQkJLyogcXVldWVzIGxvY2spLiBQcm90ZWN0cyBuYnF1ZXVlcywgcXVldWVzLCBnbG9iYWwgKi8KLQkJCS8qIEdzdE11bHRpUXVldWVTaXplLCBjb3VudGVyIGFuZCBoaWdoaWQgKi8KLQotICBnaW50IG51bXdhaXRpbmc7CS8qIG51bWJlciBvZiBub3QtbGlua2VkIHBhZHMgd2FpdGluZyAqLwotCi0gIGdib29sZWFuIGJ1ZmZlcmluZ19wZXJjZW50X2NoYW5nZWQ7Ci0gIEdNdXRleCBidWZmZXJpbmdfcG9zdF9sb2NrOyAvKiBhc3N1cmVzIG9ubHkgb25lIHBvc3RlZCBhdCBhIHRpbWUgKi8KLQotICBHc3RDbG9ja1RpbWUgaW50ZXJsZWF2ZTsJLyogSW5wdXQgaW50ZXJsZWF2ZSAqLwotICBHc3RDbG9ja1RpbWVEaWZmIGxhc3RfaW50ZXJsZWF2ZV91cGRhdGU7Ci0KLSAgR3N0Q2xvY2tUaW1lIHVubGlua2VkX2NhY2hlX3RpbWU7Ci19OwotCi1zdHJ1Y3QgX0dzdE11bHRpUXVldWVDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyBlbWl0dGVkIHdoZW4gQUxMIHF1ZXVlcyBhcmUgZWl0aGVyIGZ1bGwgb3IgZW1wdHkgKi8KLSAgdm9pZCAoKnVuZGVycnVuKQkoR3N0TXVsdGlRdWV1ZSAqcXVldWUpOwotICB2b2lkICgqb3ZlcnJ1bikJKEdzdE11bHRpUXVldWUgKnF1ZXVlKTsKLX07Ci0KLUdfR05VQ19JTlRFUk5BTCBHVHlwZSBnc3RfbXVsdGlfcXVldWVfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0KLSNlbmRpZiAvKiBfX0dTVF9NVUxUSV9RVUVVRV9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkNTQ3OC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdG91dHB1dHNlbGVjdG9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTggKzAsMCBAQAotLyogR1N0cmVhbWVyIG91dHB1dCBzZWxlY3RvcgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1vdXRwdXQtc2VsZWN0b3IKLSAqIEBzZWVfYWxzbzogI0dzdE91dHB1dFNlbGVjdG9yLCAjR3N0SW5wdXRTZWxlY3RvcgotICoKLSAqIERpcmVjdCBpbnB1dCBzdHJlYW0gdG8gb25lIG91dCBvZiBOIG91dHB1dCBwYWRzLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0b3V0cHV0c2VsZWN0b3IuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAob3V0cHV0X3NlbGVjdG9yX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIG91dHB1dF9zZWxlY3Rvcl9kZWJ1ZwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X291dHB1dF9zZWxlY3Rvcl9zaW5rX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfb3V0cHV0X3NlbGVjdG9yX3NyY19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjXyV1IiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFIChnc3Rfb3V0cHV0X3NlbGVjdG9yX3BhZF9uZWdvdGlhdGlvbl9tb2RlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9vdXRwdXRfc2VsZWN0b3JfcGFkX25lZ290aWF0aW9uX21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBwYWRfbmVnb3RpYXRpb25fbW9kZV90eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgcGFkX25lZ290aWF0aW9uX21vZGVzW10gPSB7Ci0gICAge0dTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfTk9ORSwgIk5vbmUiLCAibm9uZSJ9LAotICAgIHtHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FMTCwgIkFsbCIsICJhbGwifSwKLSAgICB7R1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9BQ1RJVkUsICJBY3RpdmUiLCAiYWN0aXZlIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKCFwYWRfbmVnb3RpYXRpb25fbW9kZV90eXBlKSB7Ci0gICAgcGFkX25lZ290aWF0aW9uX21vZGVfdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RPdXRwdXRTZWxlY3RvclBhZE5lZ290aWF0aW9uTW9kZSIsCi0gICAgICAgIHBhZF9uZWdvdGlhdGlvbl9tb2Rlcyk7Ci0gIH0KLSAgcmV0dXJuIHBhZF9uZWdvdGlhdGlvbl9tb2RlX3R5cGU7Ci19Ci0KLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQUNUSVZFX1BBRCwKLSAgUFJPUF9SRVNFTkRfTEFURVNULAotICBQUk9QX1BBRF9ORUdPVElBVElPTl9NT0RFCi19OwotCi0jZGVmaW5lIERFRkFVTFRfUEFEX05FR09USUFUSU9OX01PREUgR1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9BTEwKLQotI2RlZmluZSBfZG9faW5pdCBcCi1HU1RfREVCVUdfQ0FURUdPUllfSU5JVCAob3V0cHV0X3NlbGVjdG9yX2RlYnVnLCBcCi0gICAgICAgICJvdXRwdXQtc2VsZWN0b3IiLCAwLCAiT3V0cHV0IHN0cmVhbSBzZWxlY3RvciIpOwotI2RlZmluZSBnc3Rfb3V0cHV0X3NlbGVjdG9yX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RPdXRwdXRTZWxlY3RvciwgZ3N0X291dHB1dF9zZWxlY3RvciwKLSAgICBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9vdXRwdXRfc2VsZWN0b3JfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfb3V0cHV0X3NlbGVjdG9yX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIEdzdFBhZCAqZ3N0X291dHB1dF9zZWxlY3Rvcl9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogdW51c2VkLCBjb25zdCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3Rfb3V0cHV0X3NlbGVjdG9yX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWQgKiBwYWQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X291dHB1dF9zZWxlY3Rvcl9jaGFpbiAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3Rfb3V0cHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X291dHB1dF9zZWxlY3Rvcl9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X291dHB1dF9zZWxlY3Rvcl9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgdm9pZCBnc3Rfb3V0cHV0X3NlbGVjdG9yX3N3aXRjaF9wYWRfbmVnb3RpYXRpb25fbW9kZSAoR3N0T3V0cHV0U2VsZWN0b3IgKgotICAgIHNlbCwgZ2ludCBtb2RlKTsKLQotc3RhdGljIHZvaWQKLWdzdF9vdXRwdXRfc2VsZWN0b3JfY2xhc3NfaW5pdCAoR3N0T3V0cHV0U2VsZWN0b3JDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfb3V0cHV0X3NlbGVjdG9yX2Rpc3Bvc2U7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X291dHB1dF9zZWxlY3Rvcl9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUNUSVZFX1BBRCwKLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJhY3RpdmUtcGFkIiwgIkFjdGl2ZSBwYWQiLAotICAgICAgICAgICJDdXJyZW50bHkgYWN0aXZlIHNyYyBwYWQiLCBHU1RfVFlQRV9QQUQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVTRU5EX0xBVEVTVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicmVzZW5kLWxhdGVzdCIsICJSZXNlbmQgbGF0ZXN0IGJ1ZmZlciIsCi0gICAgICAgICAgIlJlc2VuZCBsYXRlc3QgYnVmZmVyIGFmdGVyIGEgc3dpdGNoIHRvIGEgbmV3IHBhZCIsIEZBTFNFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BBRF9ORUdPVElBVElPTl9NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJwYWQtbmVnb3RpYXRpb24tbW9kZSIsICJQYWQgbmVnb3RpYXRpb24gbW9kZSIsCi0gICAgICAgICAgIlRoZSBtb2RlIHRvIGJlIHVzZWQgZm9yIHBhZCBuZWdvdGlhdGlvbiIsCi0gICAgICAgICAgR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFLAotICAgICAgICAgIERFRkFVTFRfUEFEX05FR09USUFUSU9OX01PREUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIk91dHB1dCBzZWxlY3RvciIsCi0gICAgICAiR2VuZXJpYyIsICIxLXRvLU4gb3V0cHV0IHN0cmVhbSBzZWxlY3RvciIsCi0gICAgICAiU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4iKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X291dHB1dF9zZWxlY3Rvcl9zaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfb3V0cHV0X3NlbGVjdG9yX3NyY19mYWN0b3J5KTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vdXRwdXRfc2VsZWN0b3JfcmVxdWVzdF9uZXdfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vdXRwdXRfc2VsZWN0b3JfcmVsZWFzZV9wYWQpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9vdXRwdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X291dHB1dF9zZWxlY3Rvcl9pbml0IChHc3RPdXRwdXRTZWxlY3RvciAqIHNlbCkKLXsKLSAgc2VsLT5zaW5rcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmZ3N0X291dHB1dF9zZWxlY3Rvcl9zaW5rX2ZhY3RvcnksCi0gICAgICAic2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2VsLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vdXRwdXRfc2VsZWN0b3JfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3V0cHV0X3NlbGVjdG9yX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzZWwtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X291dHB1dF9zZWxlY3Rvcl9xdWVyeSkpOwotCi0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzZWwpLCBzZWwtPnNpbmtwYWQpOwotCi0gIC8qIHNyY3BhZCBtYW5hZ2VtZW50ICovCi0gIHNlbC0+YWN0aXZlX3NyY3BhZCA9IE5VTEw7Ci0gIHNlbC0+bmJfc3JjcGFkcyA9IDA7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWwtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgc2VsLT5wZW5kaW5nX3NyY3BhZCA9IE5VTEw7Ci0KLSAgc2VsLT5yZXNlbmRfbGF0ZXN0ID0gRkFMU0U7Ci0gIHNlbC0+bGF0ZXN0X2J1ZmZlciA9IE5VTEw7Ci0gIGdzdF9vdXRwdXRfc2VsZWN0b3Jfc3dpdGNoX3BhZF9uZWdvdGlhdGlvbl9tb2RlIChzZWwsCi0gICAgICBERUZBVUxUX1BBRF9ORUdPVElBVElPTl9NT0RFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vdXRwdXRfc2VsZWN0b3JfcmVzZXQgKEdzdE91dHB1dFNlbGVjdG9yICogb3NlbCkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChvc2VsKTsKLSAgaWYgKG9zZWwtPnBlbmRpbmdfc3JjcGFkICE9IE5VTEwpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvc2VsLT5wZW5kaW5nX3NyY3BhZCk7Ci0gICAgb3NlbC0+cGVuZGluZ19zcmNwYWQgPSBOVUxMOwotICB9Ci0KLSAgaWYgKG9zZWwtPmxhdGVzdF9idWZmZXIgIT0gTlVMTCkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKG9zZWwtPmxhdGVzdF9idWZmZXIpOwotICAgIG9zZWwtPmxhdGVzdF9idWZmZXIgPSBOVUxMOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvc2VsKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJm9zZWwtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vdXRwdXRfc2VsZWN0b3JfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0T3V0cHV0U2VsZWN0b3IgKm9zZWwgPSBHU1RfT1VUUFVUX1NFTEVDVE9SIChvYmplY3QpOwotCi0gIGdzdF9vdXRwdXRfc2VsZWN0b3JfcmVzZXQgKG9zZWwpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X291dHB1dF9zZWxlY3Rvcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0T3V0cHV0U2VsZWN0b3IgKnNlbCA9IEdTVF9PVVRQVVRfU0VMRUNUT1IgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0FDVElWRV9QQUQ6Ci0gICAgewotICAgICAgR3N0UGFkICpuZXh0X3BhZDsKLQotICAgICAgbmV4dF9wYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbHVlKTsKLQotICAgICAgR1NUX0lORk9fT0JKRUNUIChzZWwsICJBY3RpdmF0aW5nIHBhZCAlczolcyIsCi0gICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChuZXh0X3BhZCkpOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gICAgICBpZiAobmV4dF9wYWQgIT0gc2VsLT5hY3RpdmVfc3JjcGFkKSB7Ci0gICAgICAgIC8qIHN3aXRjaCB0byBuZXcgc3JjcGFkIGluIG5leHQgY2hhaW4gcnVuICovCi0gICAgICAgIGlmIChzZWwtPnBlbmRpbmdfc3JjcGFkICE9IE5VTEwpIHsKLSAgICAgICAgICBHU1RfSU5GTyAoInJlcGxhY2luZyBwZW5kaW5nIHN3aXRjaCIpOwotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlbC0+cGVuZGluZ19zcmNwYWQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuZXh0X3BhZCkKLSAgICAgICAgICBnc3Rfb2JqZWN0X3JlZiAobmV4dF9wYWQpOwotICAgICAgICBzZWwtPnBlbmRpbmdfc3JjcGFkID0gbmV4dF9wYWQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GTyAoInBhZCBhbHJlYWR5IGFjdGl2ZSIpOwotICAgICAgICBpZiAoc2VsLT5wZW5kaW5nX3NyY3BhZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc2VsLT5wZW5kaW5nX3NyY3BhZCk7Ci0gICAgICAgICAgc2VsLT5wZW5kaW5nX3NyY3BhZCA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRVNFTkRfTEFURVNUOnsKLSAgICAgIHNlbC0+cmVzZW5kX2xhdGVzdCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUEFEX05FR09USUFUSU9OX01PREU6ewotICAgICAgZ3N0X291dHB1dF9zZWxlY3Rvcl9zd2l0Y2hfcGFkX25lZ290aWF0aW9uX21vZGUgKHNlbCwKLSAgICAgICAgICBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE91dHB1dFNlbGVjdG9yICpzZWwgPSBHU1RfT1VUUFVUX1NFTEVDVE9SIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9BQ1RJVkVfUEFEOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChvYmplY3QpOwotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwKLSAgICAgICAgICBzZWwtPnBlbmRpbmdfc3JjcGFkID8gc2VsLT5wZW5kaW5nX3NyY3BhZCA6IHNlbC0+YWN0aXZlX3NyY3BhZCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVNFTkRfTEFURVNUOnsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAob2JqZWN0KTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzZWwtPnJlc2VuZF9sYXRlc3QpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iamVjdCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1BBRF9ORUdPVElBVElPTl9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNlbC0+cGFkX25lZ290aWF0aW9uX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X2FjdGl2ZSAoR3N0T3V0cHV0U2VsZWN0b3IgKiBzZWwpCi17Ci0gIEdzdFBhZCAqYWN0aXZlID0gTlVMTDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNlbCk7Ci0gIGlmIChzZWwtPnBlbmRpbmdfc3JjcGFkKQotICAgIGFjdGl2ZSA9IGdzdF9vYmplY3RfcmVmIChzZWwtPnBlbmRpbmdfc3JjcGFkKTsKLSAgZWxzZSBpZiAoc2VsLT5hY3RpdmVfc3JjcGFkKQotICAgIGFjdGl2ZSA9IGdzdF9vYmplY3RfcmVmIChzZWwtPmFjdGl2ZV9zcmNwYWQpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsKTsKLQotICByZXR1cm4gYWN0aXZlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X291dHB1dF9zZWxlY3Rvcl9zd2l0Y2hfcGFkX25lZ290aWF0aW9uX21vZGUgKEdzdE91dHB1dFNlbGVjdG9yICogc2VsLAotICAgIGdpbnQgbW9kZSkKLXsKLSAgc2VsLT5wYWRfbmVnb3RpYXRpb25fbW9kZSA9IG1vZGU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yd2FyZF9zdGlja3lfZXZlbnRzIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICoqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFBhZCAqc3JjcGFkID0gR1NUX1BBRF9DQVNUICh1c2VyX2RhdGEpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfcmVmICgqZXZlbnQpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3Rfb3V0cHV0X3NlbGVjdG9yX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2NoYXIgKnBhZG5hbWU7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RPdXRwdXRTZWxlY3RvciAqb3NlbDsKLQotICBvc2VsID0gR1NUX09VVFBVVF9TRUxFQ1RPUiAoZWxlbWVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob3NlbCwgInJlcXVlc3RpbmcgcGFkIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvc2VsKTsKLSAgcGFkbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNyY18ldSIsIG9zZWwtPm5iX3NyY3BhZHMrKyk7Ci0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBwYWRuYW1lKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG9zZWwpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLQotICAvKiBGb3J3YXJkIHN0aWNreSBldmVudHMgdG8gdGhlIG5ldyBzcmNwYWQgKi8KLSAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKG9zZWwtPnNpbmtwYWQsIGZvcndhcmRfc3RpY2t5X2V2ZW50cywgc3JjcGFkKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAob3NlbCksIHNyY3BhZCk7Ci0KLSAgLyogU2V0IHRoZSBmaXJzdCByZXF1ZXN0ZWQgc3JjIHBhZCBhcyBhY3RpdmUgYnkgZGVmYXVsdCAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKG9zZWwpOwotICBpZiAob3NlbC0+YWN0aXZlX3NyY3BhZCA9PSBOVUxMKSB7Ci0gICAgb3NlbC0+YWN0aXZlX3NyY3BhZCA9IHNyY3BhZDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAob3NlbCk7Ci0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAob3NlbCksICJhY3RpdmUtcGFkIik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9zZWwpOwotICB9Ci0gIGdfZnJlZSAocGFkbmFtZSk7Ci0KLSAgcmV0dXJuIHNyY3BhZDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vdXRwdXRfc2VsZWN0b3JfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdE91dHB1dFNlbGVjdG9yICpvc2VsOwotCi0gIG9zZWwgPSBHU1RfT1VUUFVUX1NFTEVDVE9SIChlbGVtZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvc2VsLCAicmVsZWFzaW5nIHBhZCIpOwotCi0gIC8qIERpc2FibGUgYWN0aXZlIHBhZCBpZiBpdCdzIHRoZSB0byBiZSByZW1vdmVkIHBhZCAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKG9zZWwpOwotICBpZiAob3NlbC0+YWN0aXZlX3NyY3BhZCA9PSBwYWQpIHsKLSAgICBvc2VsLT5hY3RpdmVfc3JjcGFkID0gTlVMTDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAob3NlbCk7Ci0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAob3NlbCksICJhY3RpdmUtcGFkIik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9zZWwpOwotICB9Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIEZBTFNFKTsKLQotICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChvc2VsKSwgcGFkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3V0cHV0X3NlbGVjdG9yX3N3aXRjaCAoR3N0T3V0cHV0U2VsZWN0b3IgKiBvc2VsKQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR3N0RXZlbnQgKmV2ID0gTlVMTDsKLSAgR3N0U2VnbWVudCAqc2VnID0gTlVMTDsKLSAgR3N0UGFkICphY3RpdmVfc3JjcGFkOwotCi0gIC8qIFN3aXRjaCAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKG9zZWwpOwotICBHU1RfSU5GT19PQkpFQ1QgKG9zZWwsICJzd2l0Y2hpbmcgdG8gcGFkICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgb3NlbC0+cGVuZGluZ19zcmNwYWQpOwotICBpZiAoIW9zZWwtPnBlbmRpbmdfc3JjcGFkKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9zZWwpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgaWYgKGdzdF9wYWRfaXNfbGlua2VkIChvc2VsLT5wZW5kaW5nX3NyY3BhZCkpIHsKLSAgICBvc2VsLT5hY3RpdmVfc3JjcGFkID0gb3NlbC0+cGVuZGluZ19zcmNwYWQ7Ci0gICAgcmVzID0gVFJVRTsKLSAgfQotICBnc3Rfb2JqZWN0X3VucmVmIChvc2VsLT5wZW5kaW5nX3NyY3BhZCk7Ci0gIG9zZWwtPnBlbmRpbmdfc3JjcGFkID0gTlVMTDsKLSAgYWN0aXZlX3NyY3BhZCA9IHJlcyA/IGdzdF9vYmplY3RfcmVmIChvc2VsLT5hY3RpdmVfc3JjcGFkKSA6IE5VTEw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvc2VsKTsKLQotICAvKiBTZW5kIFNFR01FTlQgZXZlbnQgYW5kIGxhdGVzdCBidWZmZXIgaWYgc3dpdGNoaW5nIHN1Y2NlZWRlZAotICAgKiBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgc2VnbWVudCBjb25maWd1cmVkICovCi0gIGlmIChyZXMpIHsKLSAgICBHc3RCdWZmZXIgKmxhdGVzdF9idWZmZXI7Ci0KLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChvc2VsKSwgImFjdGl2ZS1wYWQiKTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAob3NlbCk7Ci0gICAgbGF0ZXN0X2J1ZmZlciA9Ci0gICAgICAgIG9zZWwtPmxhdGVzdF9idWZmZXIgPyBnc3RfYnVmZmVyX3JlZiAob3NlbC0+bGF0ZXN0X2J1ZmZlcikgOiBOVUxMOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvc2VsKTsKLQotICAgIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoIChvc2VsLT5zaW5rcGFkLCBmb3J3YXJkX3N0aWNreV9ldmVudHMsCi0gICAgICAgIGFjdGl2ZV9zcmNwYWQpOwotCi0gICAgLyogdXBkYXRlIHNlZ21lbnQgaWYgcmVxdWlyZWQgKi8KLSAgICBpZiAob3NlbC0+c2VnbWVudC5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpIHsKLSAgICAgIC8qIFNlbmQgU0VHTUVOVCB0byB0aGUgcGFkIHdlIGFyZSBnb2luZyB0byBzd2l0Y2ggdG8gKi8KLSAgICAgIHNlZyA9ICZvc2VsLT5zZWdtZW50OwotICAgICAgLyogSWYgcmVzZW5kaW5nIHRoZW4gbWFyayBzZWdtZW50IHN0YXJ0IGFuZCBwb3NpdGlvbiBhY2NvcmRpbmdseSAqLwotICAgICAgaWYgKG9zZWwtPnJlc2VuZF9sYXRlc3QgJiYgbGF0ZXN0X2J1ZmZlciAmJgotICAgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChsYXRlc3RfYnVmZmVyKSkgewotICAgICAgICBzZWctPnBvc2l0aW9uID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGxhdGVzdF9idWZmZXIpOwotICAgICAgfQotCi0gICAgICBldiA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoc2VnKTsKLQotICAgICAgaWYgKCFnc3RfcGFkX3B1c2hfZXZlbnQgKGFjdGl2ZV9zcmNwYWQsIGV2KSkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9zZWwsCi0gICAgICAgICAgICAibmV3c2VnbWVudCBoYW5kbGluZyBmYWlsZWQgaW4gJSIgR1NUX1BUUl9GT1JNQVQsIGFjdGl2ZV9zcmNwYWQpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIFJlc2VuZCBsYXRlc3QgYnVmZmVyIHRvIG5ld2x5IHN3aXRjaGVkIHBhZCAqLwotICAgIGlmIChvc2VsLT5yZXNlbmRfbGF0ZXN0ICYmIGxhdGVzdF9idWZmZXIpIHsKLSAgICAgIEdTVF9JTkZPICgicmVzZW5kaW5nIGxhdGVzdCBidWZmZXIiKTsKLSAgICAgIGdzdF9wYWRfcHVzaCAoYWN0aXZlX3NyY3BhZCwgbGF0ZXN0X2J1ZmZlcik7Ci0gICAgfSBlbHNlIGlmIChsYXRlc3RfYnVmZmVyKSB7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChsYXRlc3RfYnVmZmVyKTsKLSAgICB9Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChhY3RpdmVfc3JjcGFkKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9zZWwsICJzd2l0Y2ggZmFpbGVkLCBwYWQgbm90IGxpbmtlZCIpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9vdXRwdXRfc2VsZWN0b3JfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RPdXRwdXRTZWxlY3RvciAqb3NlbDsKLSAgR3N0Q2xvY2tUaW1lIHBvc2l0aW9uLCBkdXJhdGlvbjsKLSAgR3N0UGFkICphY3RpdmVfc3JjcGFkOwotCi0gIG9zZWwgPSBHU1RfT1VUUFVUX1NFTEVDVE9SIChwYXJlbnQpOwotCi0gIC8qCi0gICAqIFRoZSBfc3dpdGNoIGZ1bmN0aW9uIG1pZ2h0IHB1c2ggYSBidWZmZXIgaWYgJ3Jlc2VuZC1sYXRlc3QnIGlzIHRydWUuCi0gICAqCi0gICAqIEVsZW1lbnRzL0FwcGxpY2F0aW9ucyAoZS5nLiBjYW1lcmFiaW4pIG1pZ2h0IHVzZSBwYWQgcHJvYmVzIHRvCi0gICAqIHN3aXRjaCBvdXRwdXQtc2VsZWN0b3IncyBhY3RpdmUgcGFkLiBJZiB3ZSBzaW1wbHkgc3dpdGNoIGFuZCBkb24ndAotICAgKiByZWNoZWNrIGFueSBwZW5kaW5nIHBhZCBzd2l0Y2ggdGhlIGZvbGxvd2luZyBjb2RlcGF0aCBjb3VsZCBlbmQKLSAgICogdXAgcHVzaGluZyBhIGJ1ZmZlciBvbiBhIG5vbi1hY3RpdmUgcGFkLiBUaGlzIGlzIGJhZC4KLSAgICoKLSAgICogU28gd2UgYWx3YXlzIHNob3VsZCBjaGVjayB0aGUgcGVuZGluZ19zcmNwYWQgYmVmb3JlIGdvaW5nIGZ1cnRoZXIgZG93bgotICAgKiB0aGUgY2hhaW4gYW5kIHB1c2hpbmcgdGhlIG5ldyBidWZmZXIKLSAgICovCi0gIHdoaWxlIChvc2VsLT5wZW5kaW5nX3NyY3BhZCkgewotICAgIC8qIERvIHRoZSBzd2l0Y2ggKi8KLSAgICBnc3Rfb3V0cHV0X3NlbGVjdG9yX3N3aXRjaCAob3NlbCk7Ci0gIH0KLQotICBhY3RpdmVfc3JjcGFkID0gZ3N0X291dHB1dF9zZWxlY3Rvcl9nZXRfYWN0aXZlIChvc2VsKTsKLSAgaWYgKCFhY3RpdmVfc3JjcGFkKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAob3NlbCwgIk5vIGFjdGl2ZSBzcmNwYWQiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob3NlbCk7Ci0gIGlmIChvc2VsLT5sYXRlc3RfYnVmZmVyKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3NlbC0+bGF0ZXN0X2J1ZmZlcik7Ci0gICAgb3NlbC0+bGF0ZXN0X2J1ZmZlciA9IE5VTEw7Ci0gIH0KLQotICBpZiAob3NlbC0+cmVzZW5kX2xhdGVzdCkgewotICAgIC8qIEtlZXAgcmVmZXJlbmNlIHRvIGxhdGVzdCBidWZmZXIgdG8gcmVzZW5kIGl0IGFmdGVyIHN3aXRjaCAqLwotICAgIG9zZWwtPmxhdGVzdF9idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob3NlbCk7Ci0KLSAgLyogS2VlcCB0cmFjayBvZiBsYXN0IHN0b3AgYW5kIHVzZSBpdCBpbiBTRUdNRU5UIHN0YXJ0IGFmdGVyCi0gICAgIHN3aXRjaGluZyB0byBhIG5ldyBzcmMgcGFkICovCi0gIHBvc2l0aW9uID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocG9zaXRpb24pKSB7Ci0gICAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOwotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHVyYXRpb24pKSB7Ci0gICAgICBwb3NpdGlvbiArPSBkdXJhdGlvbjsKLSAgICB9Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG9zZWwsICJzZXR0aW5nIGxhc3Qgc3RvcCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHBvc2l0aW9uKSk7Ci0gICAgb3NlbC0+c2VnbWVudC5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG9zZWwsICJwdXNoaW5nIGJ1ZmZlciB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgYWN0aXZlX3NyY3BhZCk7Ci0gIHJlcyA9IGdzdF9wYWRfcHVzaCAoYWN0aXZlX3NyY3BhZCwgYnVmKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChhY3RpdmVfc3JjcGFkKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9vdXRwdXRfc2VsZWN0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RPdXRwdXRTZWxlY3RvciAqc2VsOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQ7Ci0KLSAgc2VsID0gR1NUX09VVFBVVF9TRUxFQ1RPUiAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJlc3VsdCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3Rfb3V0cHV0X3NlbGVjdG9yX3Jlc2V0IChzZWwpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3V0cHV0X3NlbGVjdG9yX2ZvcndhcmRfZXZlbnQgKEdzdE91dHB1dFNlbGVjdG9yICogc2VsLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHc3RQYWQgKmFjdGl2ZTsKLQotICBzd2l0Y2ggKHNlbC0+cGFkX25lZ290aWF0aW9uX21vZGUpIHsKLSAgICBjYXNlIEdTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfQUxMOgotICAgICAgLyogU2VuZCB0byBhbGwgc3JjIHBhZHMgKi8KLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAoc2VsLT5zaW5rcGFkLCBHU1RfT0JKRUNUX0NBU1QgKHNlbCksIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9OT05FOgotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYWN0aXZlID0gZ3N0X291dHB1dF9zZWxlY3Rvcl9nZXRfYWN0aXZlIChzZWwpOwotICAgICAgaWYgKGFjdGl2ZSkgewotICAgICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGFjdGl2ZSwgZXZlbnQpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChhY3RpdmUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X291dHB1dF9zZWxlY3Rvcl9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdE91dHB1dFNlbGVjdG9yICpzZWw7Ci0gIEdzdFBhZCAqYWN0aXZlID0gTlVMTDsKLQotICBzZWwgPSBHU1RfT1VUUFVUX1NFTEVDVE9SIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICB7Ci0gICAgICByZXMgPSBnc3Rfb3V0cHV0X3NlbGVjdG9yX2ZvcndhcmRfZXZlbnQgKHNlbCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWwtPnNlZ21lbnQpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsLCAiY29uZmlndXJlZCBTRUdNRU5UICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICAgICAmc2VsLT5zZWdtZW50KTsKLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgIHsKLSAgICAgIGFjdGl2ZSA9IGdzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0X2FjdGl2ZSAoc2VsKTsKLSAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChhY3RpdmUsIGV2ZW50KTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoYWN0aXZlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3V0cHV0X3NlbGVjdG9yX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0T3V0cHV0U2VsZWN0b3IgKnNlbDsKLSAgR3N0UGFkICphY3RpdmUgPSBOVUxMOwotCi0gIHNlbCA9IEdTVF9PVVRQVVRfU0VMRUNUT1IgKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBzd2l0Y2ggKHNlbC0+cGFkX25lZ290aWF0aW9uX21vZGUpIHsKLSAgICAgICAgY2FzZSBHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FMTDoKLSAgICAgICAgICAvKiBTZW5kIGNhcHMgdG8gYWxsIHNyYyBwYWRzICovCi0gICAgICAgICAgcmVzID0gZ3N0X3BhZF9wcm94eV9xdWVyeV9jYXBzIChwYWQsIHF1ZXJ5KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX05PTkU6Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYWN0aXZlID0gZ3N0X291dHB1dF9zZWxlY3Rvcl9nZXRfYWN0aXZlIChzZWwpOwotICAgICAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgICAgIHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAoYWN0aXZlLCBxdWVyeSk7Ci0gICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChhY3RpdmUpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfRFJBSU46Ci0gICAgICBpZiAoc2VsLT5sYXRlc3RfYnVmZmVyKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHNlbC0+bGF0ZXN0X2J1ZmZlcik7Ci0gICAgICAgIHNlbC0+bGF0ZXN0X2J1ZmZlciA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RvdXRwdXRzZWxlY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzljNWIxLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0b3V0cHV0c2VsZWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotIAotI2lmbmRlZiBfX0dTVF9PVVRQVVRfU0VMRUNUT1JfSF9fCi0jZGVmaW5lIF9fR1NUX09VVFBVVF9TRUxFQ1RPUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX09VVFBVVF9TRUxFQ1RPUiBcCi0gIChnc3Rfb3V0cHV0X3NlbGVjdG9yX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9PVVRQVVRfU0VMRUNUT1Iob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX09VVFBVVF9TRUxFQ1RPUiwgR3N0T3V0cHV0U2VsZWN0b3IpKQotI2RlZmluZSBHU1RfT1VUUFVUX1NFTEVDVE9SX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SLCBHc3RPdXRwdXRTZWxlY3RvckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX09VVFBVVF9TRUxFQ1RPUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfT1VUUFVUX1NFTEVDVE9SKSkKLSNkZWZpbmUgR1NUX0lTX09VVFBVVF9TRUxFQ1RPUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX09VVFBVVF9TRUxFQ1RPUikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RPdXRwdXRTZWxlY3RvciBHc3RPdXRwdXRTZWxlY3RvcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RPdXRwdXRTZWxlY3RvckNsYXNzIEdzdE91dHB1dFNlbGVjdG9yQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0T3V0cHV0U2VsZWN0b3IgewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgR3N0UGFkICpzaW5rcGFkOwotCi0gIEdzdFBhZCAqYWN0aXZlX3NyY3BhZDsKLSAgR3N0UGFkICpwZW5kaW5nX3NyY3BhZDsKLSAgZ3VpbnQgbmJfc3JjcGFkczsKLQotICBnaW50IHBhZF9uZWdvdGlhdGlvbl9tb2RlOwotCi0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICAvKiByZXNlbmQgbGF0ZXN0IGJ1ZmZlciBhZnRlciBzd2l0Y2ggKi8KLSAgZ2Jvb2xlYW4gcmVzZW5kX2xhdGVzdDsKLSAgR3N0QnVmZmVyICpsYXRlc3RfYnVmZmVyOwotCi19OwotCi1zdHJ1Y3QgX0dzdE91dHB1dFNlbGVjdG9yQ2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotLyoqCi0gKiBHc3RPdXRwdXRTZWxlY3RvclBhZE5lZ290aWF0aW9uTW9kZToKLSAqIEBHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX05PTkU6IGRvbid0IHByb3BhZ2F0ZSB0aGUgaW5wdXQKLSAqIHN0cmVhbS4KLSAqIEBHU1RfT1VUUFVUX1NFTEVDVE9SX1BBRF9ORUdPVElBVElPTl9NT0RFX0FMTDogZGlyZWN0IGlucHV0IHN0cmVhbSB0byBhbGwKLSAqIG91dHB1dCBwYWRzLgotICogQEdTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfQUNUSVZFOiBkaXJlY3QgaW5wdXQgc3RyZWFtIHRvIHRoZQotICogY3VycmVudGx5IGFjdGl2ZSBvdXRwdXQgcGFkIGFzIGRlc2NyaWJlZCBieSB0aGUgI0dzdE91dHB1dFNlbGVjdG9yOmFjdGl2ZS1wYWQKLSAqIHByb3BlcnR5LgotICoKLSAqIFRvIHdoYXQgb3V0cHV0IHBhZCB0aGUgaW5wdXQgc3RyZWFtIHNob3VsZCBiZSBkaXJlY3RlZC4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfTk9ORSwKLSAgR1NUX09VVFBVVF9TRUxFQ1RPUl9QQURfTkVHT1RJQVRJT05fTU9ERV9BTEwsCi0gIEdTVF9PVVRQVVRfU0VMRUNUT1JfUEFEX05FR09USUFUSU9OX01PREVfQUNUSVZFCi19IEdzdE91dHB1dFNlbGVjdG9yUGFkTmVnb3RpYXRpb25Nb2RlOwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X291dHB1dF9zZWxlY3Rvcl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9PVVRQVVRfU0VMRUNUT1JfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NTYwNDAuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg3MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMyBDb2xpbiBXYWx0ZXJzIDxjd2FsdGVyc0Bnbm9tZS5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdHF1ZXVlLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcXVldWUKLSAqCi0gKiBEYXRhIGlzIHF1ZXVlZCB1bnRpbCBvbmUgb2YgdGhlIGxpbWl0cyBzcGVjaWZpZWQgYnkgdGhlCi0gKiAjR3N0UXVldWU6bWF4LXNpemUtYnVmZmVycywgI0dzdFF1ZXVlOm1heC1zaXplLWJ5dGVzIGFuZC9vcgotICogI0dzdFF1ZXVlOm1heC1zaXplLXRpbWUgcHJvcGVydGllcyBoYXMgYmVlbiByZWFjaGVkLiBBbnkgYXR0ZW1wdCB0byBwdXNoCi0gKiBtb3JlIGJ1ZmZlcnMgaW50byB0aGUgcXVldWUgd2lsbCBibG9jayB0aGUgcHVzaGluZyB0aHJlYWQgdW50aWwgbW9yZSBzcGFjZQotICogYmVjb21lcyBhdmFpbGFibGUuCi0gKgotICogVGhlIHF1ZXVlIHdpbGwgY3JlYXRlIGEgbmV3IHRocmVhZCBvbiB0aGUgc291cmNlIHBhZCB0byBkZWNvdXBsZSB0aGUKLSAqIHByb2Nlc3Npbmcgb24gc2luayBhbmQgc291cmNlIHBhZC4KLSAqCi0gKiBZb3UgY2FuIHF1ZXJ5IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIHF1ZXVlZCBieSByZWFkaW5nIHRoZQotICogI0dzdFF1ZXVlOmN1cnJlbnQtbGV2ZWwtYnVmZmVycyBwcm9wZXJ0eS4gWW91IGNhbiB0cmFjayBjaGFuZ2VzCi0gKiBieSBjb25uZWN0aW5nIHRvIHRoZSBub3RpZnk6OmN1cnJlbnQtbGV2ZWwtYnVmZmVycyBzaWduYWwgKHdoaWNoCi0gKiBsaWtlIGFsbCBzaWduYWxzIHdpbGwgYmUgZW1pdHRlZCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkKS4gVGhlIHNhbWUKLSAqIGFwcGxpZXMgdG8gdGhlICNHc3RRdWV1ZTpjdXJyZW50LWxldmVsLXRpbWUgYW5kCi0gKiAjR3N0UXVldWU6Y3VycmVudC1sZXZlbC1ieXRlcyBwcm9wZXJ0aWVzLgotICoKLSAqIFRoZSBkZWZhdWx0IHF1ZXVlIHNpemUgbGltaXRzIGFyZSAyMDAgYnVmZmVycywgMTBNQiBvZiBkYXRhLCBvcgotICogb25lIHNlY29uZCB3b3J0aCBvZiBkYXRhLCB3aGljaGV2ZXIgaXMgcmVhY2hlZCBmaXJzdC4KLSAqCi0gKiBBcyBzYWlkIGVhcmxpZXIsIHRoZSBxdWV1ZSBibG9ja3MgYnkgZGVmYXVsdCB3aGVuIG9uZSBvZiB0aGUgc3BlY2lmaWVkCi0gKiBtYXhpbXVtcyAoYnl0ZXMsIHRpbWUsIGJ1ZmZlcnMpIGhhcyBiZWVuIHJlYWNoZWQuIFlvdSBjYW4gc2V0IHRoZQotICogI0dzdFF1ZXVlOmxlYWt5IHByb3BlcnR5IHRvIHNwZWNpZnkgdGhhdCBpbnN0ZWFkIG9mIGJsb2NraW5nIGl0IHNob3VsZAotICogbGVhayAoZHJvcCkgbmV3IG9yIG9sZCBidWZmZXJzLgotICoKLSAqIFRoZSAjR3N0UXVldWU6OnVuZGVycnVuIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIHF1ZXVlIGhhcyBsZXNzIGRhdGEgdGhhbgotICogdGhlIHNwZWNpZmllZCBtaW5pbXVtIHRocmVzaG9sZHMgcmVxdWlyZSAoYnkgZGVmYXVsdDogd2hlbiB0aGUgcXVldWUgaXMKLSAqIGVtcHR5KS4gVGhlICNHc3RRdWV1ZTo6b3ZlcnJ1biBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSBxdWV1ZSBpcyBmaWxsZWQKLSAqIHVwLiBCb3RoIHNpZ25hbHMgYXJlIGVtaXR0ZWQgZnJvbSB0aGUgY29udGV4dCBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0L2dzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAiZ3N0cXVldWUuaCIKLQotI2luY2x1ZGUgIi4uLy4uL2dzdC9nc3QtaTE4bi1saWIuaCIKLSNpbmNsdWRlICIuLi8uLi9nc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocXVldWVfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHF1ZXVlX2RlYnVnKQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocXVldWVfZGF0YWZsb3cpOwotCi0jZGVmaW5lIFNUQVRVUyhxdWV1ZSwgcGFkLCBtc2cpIFwKLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAiKCVzOiVzKSAiIG1zZyAiOiAldSBvZiAldS0ldSBidWZmZXJzLCAldSBvZiAldS0ldSAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMsICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBvZiAlIiBHX0dVSU5UNjRfRk9STUFUIFwKLSAgICAgICAgICAgICAgICAgICAgICAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBucywgJXUgaXRlbXMiLCBcCi0gICAgICAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgcXVldWUtPm1pbl90aHJlc2hvbGQuYnVmZmVycywgXAotICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5tYXhfc2l6ZS5idWZmZXJzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcywgXAotICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ5dGVzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgcXVldWUtPm1heF9zaXplLmJ5dGVzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgcXVldWUtPm1pbl90aHJlc2hvbGQudGltZSwgXAotICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5tYXhfc2l6ZS50aW1lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgZ3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGggKHF1ZXVlLT5xdWV1ZSkpCi0KLS8qIFF1ZXVlIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgU0lHTkFMX1VOREVSUlVOLAotICBTSUdOQUxfUlVOTklORywKLSAgU0lHTkFMX09WRVJSVU4sCi0gIFNJR05BTF9QVVNISU5HLAotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIC8qIEZJWE1FOiBkb24ndCB3ZSBoYXZlIGFub3RoZXIgd2F5IG9mIGRvaW5nIHRoaXMKLSAgICogIkdzdHJlYW1lciBmb3JtYXQiIChmcmFtZS9ieXRlL3RpbWUpIHF1ZXJpZXM/ICovCi0gIFBST1BfQ1VSX0xFVkVMX0JVRkZFUlMsCi0gIFBST1BfQ1VSX0xFVkVMX0JZVEVTLAotICBQUk9QX0NVUl9MRVZFTF9USU1FLAotICBQUk9QX01BWF9TSVpFX0JVRkZFUlMsCi0gIFBST1BfTUFYX1NJWkVfQllURVMsCi0gIFBST1BfTUFYX1NJWkVfVElNRSwKLSAgUFJPUF9NSU5fVEhSRVNIT0xEX0JVRkZFUlMsCi0gIFBST1BfTUlOX1RIUkVTSE9MRF9CWVRFUywKLSAgUFJPUF9NSU5fVEhSRVNIT0xEX1RJTUUsCi0gIFBST1BfTEVBS1ksCi0gIFBST1BfU0lMRU5ULAotICBQUk9QX0ZMVVNIX09OX0VPUwotfTsKLQotLyogZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgKi8KLSNkZWZpbmUgREVGQVVMVF9NQVhfU0laRV9CVUZGRVJTICAyMDAgICAvKiAyMDAgYnVmZmVycyAqLwotI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX0JZVEVTICAgICgxMCAqIDEwMjQgKiAxMDI0KSAgICAvKiAxMCBNQiAgICAgICAqLwotI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX1RJTUUgICAgIEdTVF9TRUNPTkQgICAgLyogMSBzZWNvbmQgICAgKi8KLQotI2RlZmluZSBHU1RfUVVFVUVfTVVURVhfTE9DSyhxKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX211dGV4X2xvY2sgKCZxLT5xbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIEdTVF9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLKHEsbGFiZWwpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICBcCi0gIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChxLT5zcmNyZXN1bHQgIT0gR1NUX0ZMT1dfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfUVVFVUVfTVVURVhfVU5MT0NLKHEpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX211dGV4X3VubG9jayAoJnEtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIEdTVF9RVUVVRV9XQUlUX0RFTF9DSEVDSyhxLCBsYWJlbCkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICBcCi0gIFNUQVRVUyAocSwgcS0+c2lua3BhZCwgIndhaXQgZm9yIERFTCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHEtPndhaXRpbmdfZGVsID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfY29uZF93YWl0ICgmcS0+aXRlbV9kZWwsICZxLT5xbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcS0+d2FpdGluZ19kZWwgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHEtPnNyY3Jlc3VsdCAhPSBHU1RfRkxPV19PSykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTVEFUVVMgKHEsIHEtPnNyY3BhZCwgInJlY2VpdmVkIERFTCB3YWtldXAiKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgU1RBVFVTIChxLCBxLT5zaW5rcGFkLCAicmVjZWl2ZWQgREVMIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIEdTVF9RVUVVRV9XQUlUX0FERF9DSEVDSyhxLCBsYWJlbCkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICBcCi0gIFNUQVRVUyAocSwgcS0+c3JjcGFkLCAid2FpdCBmb3IgQUREIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHEtPndhaXRpbmdfYWRkID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfY29uZF93YWl0ICgmcS0+aXRlbV9hZGQsICZxLT5xbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcS0+d2FpdGluZ19hZGQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHEtPnNyY3Jlc3VsdCAhPSBHU1RfRkxPV19PSykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTVEFUVVMgKHEsIHEtPnNyY3BhZCwgInJlY2VpdmVkIEFERCB3YWtldXAiKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgU1RBVFVTIChxLCBxLT5zcmNwYWQsICJyZWNlaXZlZCBBREQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIEdTVF9RVUVVRV9TSUdOQUxfREVMKHEpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChxLT53YWl0aW5nX2RlbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgU1RBVFVTIChxLCBxLT5zcmNwYWQsICJzaWduYWwgREVMIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ19jb25kX3NpZ25hbCAoJnEtPml0ZW1fZGVsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgR1NUX1FVRVVFX1NJR05BTF9BREQocSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHEtPndhaXRpbmdfYWRkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTVEFUVVMgKHEsIHEtPnNpbmtwYWQsICJzaWduYWwgQUREIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX2NvbmRfc2lnbmFsICgmcS0+aXRlbV9hZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBfZG9faW5pdCBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHF1ZXVlX2RlYnVnLCAicXVldWUiLCAwLCAicXVldWUgZWxlbWVudCIpOyBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHF1ZXVlX2RhdGFmbG93LCAicXVldWVfZGF0YWZsb3ciLCAwLCBcCi0gICAgICAgICJkYXRhZmxvdyBpbnNpZGUgdGhlIHF1ZXVlIGVsZW1lbnQiKTsKLSNkZWZpbmUgZ3N0X3F1ZXVlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RRdWV1ZSwgZ3N0X3F1ZXVlLCBHU1RfVFlQRV9FTEVNRU5ULCBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9xdWV1ZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfcXVldWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3F1ZXVlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3F1ZXVlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3F1ZXVlX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlckxpc3QgKiBidWZmZXJfbGlzdCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcXVldWVfcHVzaF9vbmUgKEdzdFF1ZXVlICogcXVldWUpOwotc3RhdGljIHZvaWQgZ3N0X3F1ZXVlX2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZV9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2ggKEdzdFF1ZXVlICogcXVldWUsIGdib29sZWFuIGZ1bGwpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlX2lzX2VtcHR5IChHc3RRdWV1ZSAqIHF1ZXVlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcXVldWVfaXNfZmlsbGVkIChHc3RRdWV1ZSAqIHF1ZXVlKTsKLQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RNaW5pT2JqZWN0ICppdGVtOwotICBnc2l6ZSBzaXplOwotICBnYm9vbGVhbiBpc19xdWVyeTsKLX0gR3N0UXVldWVJdGVtOwotCi0jZGVmaW5lIEdTVF9UWVBFX1FVRVVFX0xFQUtZIChxdWV1ZV9sZWFreV9nZXRfdHlwZSAoKSkKLQotc3RhdGljIEdUeXBlCi1xdWV1ZV9sZWFreV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHF1ZXVlX2xlYWt5X3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBxdWV1ZV9sZWFreVtdID0gewotICAgIHtHU1RfUVVFVUVfTk9fTEVBSywgIk5vdCBMZWFreSIsICJubyJ9LAotICAgIHtHU1RfUVVFVUVfTEVBS19VUFNUUkVBTSwgIkxlYWt5IG9uIHVwc3RyZWFtIChuZXcgYnVmZmVycykiLCAidXBzdHJlYW0ifSwKLSAgICB7R1NUX1FVRVVFX0xFQUtfRE9XTlNUUkVBTSwgIkxlYWt5IG9uIGRvd25zdHJlYW0gKG9sZCBidWZmZXJzKSIsCi0gICAgICAgICJkb3duc3RyZWFtIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghcXVldWVfbGVha3lfdHlwZSkgewotICAgIHF1ZXVlX2xlYWt5X3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UXVldWVMZWFreSIsIHF1ZXVlX2xlYWt5KTsKLSAgfQotICByZXR1cm4gcXVldWVfbGVha3lfdHlwZTsKLX0KLQotc3RhdGljIGd1aW50IGdzdF9xdWV1ZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi1zdGF0aWMgdm9pZAotZ3N0X3F1ZXVlX2NsYXNzX2luaXQgKEdzdFF1ZXVlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcXVldWVfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcXVldWVfZ2V0X3Byb3BlcnR5OwotCi0gIC8qIHNpZ25hbHMgKi8KLSAgLyoqCi0gICAqIEdzdFF1ZXVlOjp1bmRlcnJ1bjoKLSAgICogQHF1ZXVlOiB0aGUgcXVldWUgaW5zdGFuY2UKLSAgICoKLSAgICogUmVwb3J0cyB0aGF0IHRoZSBidWZmZXIgYmVjYW1lIGVtcHR5ICh1bmRlcnJ1bikuCi0gICAqIEEgYnVmZmVyIGlzIGVtcHR5IGlmIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBpbnNpZGUgaXQgKG51bS1idWZmZXJzLCB0aW1lLAotICAgKiBzaXplKSBpcyBsb3dlciB0aGFuIHRoZSBib3VuZGFyeSB2YWx1ZXMgd2hpY2ggY2FuIGJlIHNldCB0aHJvdWdoIHRoZQotICAgKiBHT2JqZWN0IHByb3BlcnRpZXMuCi0gICAqLwotICBnc3RfcXVldWVfc2lnbmFsc1tTSUdOQUxfVU5ERVJSVU5dID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInVuZGVycnVuIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0ZJUlNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RRdWV1ZUNsYXNzLCB1bmRlcnJ1biksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDApOwotICAvKioKLSAgICogR3N0UXVldWU6OnJ1bm5pbmc6Ci0gICAqIEBxdWV1ZTogdGhlIHF1ZXVlIGluc3RhbmNlCi0gICAqCi0gICAqIFJlcG9ydHMgdGhhdCBlbm91Z2ggKG1pbi10aHJlc2hvbGQpIGRhdGEgaXMgaW4gdGhlIHF1ZXVlLiBVc2UgdGhpcyBzaWduYWwKLSAgICogdG9nZXRoZXIgd2l0aCB0aGUgdW5kZXJydW4gc2lnbmFsIHRvIHBhdXNlIHRoZSBwaXBlbGluZSBvbiB1bmRlcnJ1biBhbmQKLSAgICogd2FpdCBmb3IgdGhlIHF1ZXVlIHRvIGZpbGwtdXAgYmVmb3JlIHJlc3VtZSBwbGF5YmFjay4KLSAgICovCi0gIGdzdF9xdWV1ZV9zaWduYWxzW1NJR05BTF9SVU5OSU5HXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJydW5uaW5nIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0ZJUlNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RRdWV1ZUNsYXNzLCBydW5uaW5nKSwgTlVMTCwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7Ci0gIC8qKgotICAgKiBHc3RRdWV1ZTo6b3ZlcnJ1bjoKLSAgICogQHF1ZXVlOiB0aGUgcXVldWUgaW5zdGFuY2UKLSAgICoKLSAgICogUmVwb3J0cyB0aGF0IHRoZSBidWZmZXIgYmVjYW1lIGZ1bGwgKG92ZXJydW4pLgotICAgKiBBIGJ1ZmZlciBpcyBmdWxsIGlmIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSBpbnNpZGUgaXQgKG51bS1idWZmZXJzLCB0aW1lLAotICAgKiBzaXplKSBpcyBoaWdoZXIgdGhhbiB0aGUgYm91bmRhcnkgdmFsdWVzIHdoaWNoIGNhbiBiZSBzZXQgdGhyb3VnaCB0aGUKLSAgICogR09iamVjdCBwcm9wZXJ0aWVzLgotICAgKi8KLSAgZ3N0X3F1ZXVlX3NpZ25hbHNbU0lHTkFMX09WRVJSVU5dID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm92ZXJydW4iLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fRklSU1QsCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdFF1ZXVlQ2xhc3MsIG92ZXJydW4pLCBOVUxMLCBOVUxMLAotICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKLSAgLyoqCi0gICAqIEdzdFF1ZXVlOjpwdXNoaW5nOgotICAgKiBAcXVldWU6IHRoZSBxdWV1ZSBpbnN0YW5jZQotICAgKgotICAgKiBSZXBvcnRzIHdoZW4gdGhlIHF1ZXVlIGhhcyBlbm91Z2ggZGF0YSB0byBzdGFydCBwdXNoaW5nIGRhdGEgYWdhaW4gb24gdGhlCi0gICAqIHNvdXJjZSBwYWQuCi0gICAqLwotICBnc3RfcXVldWVfc2lnbmFsc1tTSUdOQUxfUFVTSElOR10gPQotICAgICAgZ19zaWduYWxfbmV3ICgicHVzaGluZyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9GSVJTVCwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0UXVldWVDbGFzcywgcHVzaGluZyksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDApOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DVVJfTEVWRUxfQllURVMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImN1cnJlbnQtbGV2ZWwtYnl0ZXMiLCAiQ3VycmVudCBsZXZlbCAoa0IpIiwKLSAgICAgICAgICAiQ3VycmVudCBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCAwLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NVUl9MRVZFTF9CVUZGRVJTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiLCAiQ3VycmVudCBsZXZlbCAoYnVmZmVycykiLAotICAgICAgICAgICJDdXJyZW50IG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCAwLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NVUl9MRVZFTF9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImN1cnJlbnQtbGV2ZWwtdGltZSIsICJDdXJyZW50IGxldmVsIChucykiLAotICAgICAgICAgICJDdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMpIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9TSVpFX0JZVEVTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtc2l6ZS1ieXRlcyIsICJNYXguIHNpemUgKGtCKSIsCi0gICAgICAgICAgIk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChieXRlcywgMD1kaXNhYmxlKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX01BWF9TSVpFX0JZVEVTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9TSVpFX0JVRkZFUlMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1zaXplLWJ1ZmZlcnMiLCAiTWF4LiBzaXplIChidWZmZXJzKSIsCi0gICAgICAgICAgIk1heC4gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlICgwPWRpc2FibGUpIiwgMCwgR19NQVhVSU5ULAotICAgICAgICAgIERFRkFVTFRfTUFYX1NJWkVfQlVGRkVSUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU0laRV9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoIm1heC1zaXplLXRpbWUiLCAiTWF4LiBzaXplIChucykiLAotICAgICAgICAgICJNYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoaW4gbnMsIDA9ZGlzYWJsZSkiLCAwLCBHX01BWFVJTlQ2NCwKLSAgICAgICAgICBERUZBVUxUX01BWF9TSVpFX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NSU5fVEhSRVNIT0xEX0JZVEVTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtaW4tdGhyZXNob2xkLWJ5dGVzIiwgIk1pbi4gdGhyZXNob2xkIChrQikiLAotICAgICAgICAgICJNaW4uIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSB0byBhbGxvdyByZWFkaW5nIChieXRlcywgMD1kaXNhYmxlKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01JTl9USFJFU0hPTERfQlVGRkVSUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWluLXRocmVzaG9sZC1idWZmZXJzIiwgIk1pbi4gdGhyZXNob2xkIChidWZmZXJzKSIsCi0gICAgICAgICAgIk1pbi4gbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlIHRvIGFsbG93IHJlYWRpbmcgKDA9ZGlzYWJsZSkiLCAwLAotICAgICAgICAgIEdfTUFYVUlOVCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NSU5fVEhSRVNIT0xEX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgibWluLXRocmVzaG9sZC10aW1lIiwgIk1pbi4gdGhyZXNob2xkIChucykiLAotICAgICAgICAgICJNaW4uIGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSB0byBhbGxvdyByZWFkaW5nIChpbiBucywgMD1kaXNhYmxlKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MRUFLWSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibGVha3kiLCAiTGVha3kiLAotICAgICAgICAgICJXaGVyZSB0aGUgcXVldWUgbGVha3MsIGlmIGF0IGFsbCIsCi0gICAgICAgICAgR1NUX1RZUEVfUVVFVUVfTEVBS1ksIEdTVF9RVUVVRV9OT19MRUFLLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RRdWV1ZTpzaWxlbnQKLSAgICoKLSAgICogRG9uJ3QgZW1pdCBxdWV1ZSBzaWduYWxzLiBNYWtlcyBxdWV1ZXMgbW9yZSBsaWdodHdlaWdodCBpZiBubyBzaWduYWxzIGFyZQotICAgKiBuZWVkZWQuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJTEVOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2lsZW50IiwgIlNpbGVudCIsCi0gICAgICAgICAgIkRvbid0IGVtaXQgcXVldWUgc2lnbmFscyIsIEZBTFNFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RRdWV1ZTpmbHVzaC1vbi1lb3MKLSAgICoKLSAgICogRGlzY2FyZCBhbGwgZGF0YSBpbiB0aGUgcXVldWUgd2hlbiBhbiBFT1MgZXZlbnQgaXMgcmVjZWl2ZWQsIGFuZCBwYXNzCi0gICAqIG9uIHRoZSBFT1MgZXZlbnQgYXMgc29vbiBhcyBwb3NzaWJsZSAoaW5zdGVhZCBvZiB3YWl0aW5nIHVudGlsIGFsbAotICAgKiBidWZmZXJzIGluIHRoZSBxdWV1ZSBoYXZlIGJlZW4gcHJvY2Vzc2VkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIpLgotICAgKgotICAgKiBGbHVzaGluZyB0aGUgcXVldWUgb24gRU9TIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIGNhcHR1cmluZyBhbmQgZW5jb2RpbmcKLSAgICogZnJvbSBhIGxpdmUgc291cmNlLCB0byBmaW5pc2ggdXAgdGhlIHJlY29yZGluZyBxdWlja2x5IGluIGNhc2VzIHdoZW4KLSAgICogdGhlIGVuY29kZXIgaXMgc2xvdy4gTm90ZSB0aGF0IHRoaXMgbWlnaHQgbWVhbiBzb21lIGRhdGEgZnJvbSB0aGUgZW5kIG9mCi0gICAqIHRoZSByZWNvcmRpbmcgZGF0YSBtaWdodCBiZSBsb3N0IHRob3VnaCAobmV2ZXIgbW9yZSB0aGFuIHRoZSBjb25maWd1cmVkCi0gICAqIG1heC4gc2l6ZXMgdGhvdWdoKS4KLSAgICoKLSAgICogU2luY2U6IDEuMgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GTFVTSF9PTl9FT1MsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImZsdXNoLW9uLWVvcyIsICJGbHVzaCBvbiBFT1MiLAotICAgICAgICAgICJEaXNjYXJkIGFsbCBkYXRhIGluIHRoZSBxdWV1ZSB3aGVuIGFuIEVPUyBldmVudCBpcyByZWNlaXZlZCIsIEZBTFNFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3F1ZXVlX2ZpbmFsaXplOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUXVldWUiLAotICAgICAgIkdlbmVyaWMiLCAiU2ltcGxlIGRhdGEgcXVldWUiLCAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4iKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmN0ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua3RlbXBsYXRlKTsKLQotICAvKiBSZWdpc3RlcmluZyBkZWJ1ZyBzeW1ib2xzIGZvciBmdW5jdGlvbiBwb2ludGVycyAqLwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3F1ZXVlX3NyY19hY3RpdmF0ZV9tb2RlKTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9xdWV1ZV9oYW5kbGVfc2lua19ldmVudCk7Ci0gIEdTVF9ERUJVR19SRUdJU1RFUl9GVU5DUFRSIChnc3RfcXVldWVfaGFuZGxlX3NpbmtfcXVlcnkpOwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfZXZlbnQpOwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfcXVlcnkpOwotICBHU1RfREVCVUdfUkVHSVNURVJfRlVOQ1BUUiAoZ3N0X3F1ZXVlX2NoYWluKTsKLSAgR1NUX0RFQlVHX1JFR0lTVEVSX0ZVTkNQVFIgKGdzdF9xdWV1ZV9jaGFpbl9saXN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZV9pbml0IChHc3RRdWV1ZSAqIHF1ZXVlKQotewotICBxdWV1ZS0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua3RlbXBsYXRlLCAic2luayIpOwotCi0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChxdWV1ZS0+c2lua3BhZCwgZ3N0X3F1ZXVlX2NoYWluKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAocXVldWUtPnNpbmtwYWQsIGdzdF9xdWV1ZV9jaGFpbl9saXN0KTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uIChxdWV1ZS0+c2lua3BhZCwKLSAgICAgIGdzdF9xdWV1ZV9zaW5rX2FjdGl2YXRlX21vZGUpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uIChxdWV1ZS0+c2lua3BhZCwgZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50KTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHF1ZXVlLT5zaW5rcGFkLCBnc3RfcXVldWVfaGFuZGxlX3NpbmtfcXVlcnkpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChxdWV1ZS0+c2lua3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChxdWV1ZSksIHF1ZXVlLT5zaW5rcGFkKTsKLQotICBxdWV1ZS0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmN0ZW1wbGF0ZSwgInNyYyIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAocXVldWUtPnNyY3BhZCwKLSAgICAgIGdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfbW9kZSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLCBnc3RfcXVldWVfaGFuZGxlX3NyY19ldmVudCk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLCBnc3RfcXVldWVfaGFuZGxlX3NyY19xdWVyeSk7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0NBUFMgKHF1ZXVlLT5zcmNwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAocXVldWUpLCBxdWV1ZS0+c3JjcGFkKTsKLQotICBHU1RfUVVFVUVfQ0xFQVJfTEVWRUwgKHF1ZXVlLT5jdXJfbGV2ZWwpOwotICBxdWV1ZS0+bWF4X3NpemUuYnVmZmVycyA9IERFRkFVTFRfTUFYX1NJWkVfQlVGRkVSUzsKLSAgcXVldWUtPm1heF9zaXplLmJ5dGVzID0gREVGQVVMVF9NQVhfU0laRV9CWVRFUzsKLSAgcXVldWUtPm1heF9zaXplLnRpbWUgPSBERUZBVUxUX01BWF9TSVpFX1RJTUU7Ci0gIEdTVF9RVUVVRV9DTEVBUl9MRVZFTCAocXVldWUtPm1pbl90aHJlc2hvbGQpOwotICBHU1RfUVVFVUVfQ0xFQVJfTEVWRUwgKHF1ZXVlLT5vcmlnX21pbl90aHJlc2hvbGQpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmcXVldWUtPnNpbmtfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF1ZXVlLT5zcmNfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgcXVldWUtPmhlYWRfbmVlZHNfZGlzY29udCA9IHF1ZXVlLT50YWlsX25lZWRzX2Rpc2NvbnQgPSBGQUxTRTsKLQotICBxdWV1ZS0+bGVha3kgPSBHU1RfUVVFVUVfTk9fTEVBSzsKLSAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotCi0gIGdfbXV0ZXhfaW5pdCAoJnF1ZXVlLT5xbG9jayk7Ci0gIGdfY29uZF9pbml0ICgmcXVldWUtPml0ZW1fYWRkKTsKLSAgZ19jb25kX2luaXQgKCZxdWV1ZS0+aXRlbV9kZWwpOwotICBnX2NvbmRfaW5pdCAoJnF1ZXVlLT5xdWVyeV9oYW5kbGVkKTsKLQotICBxdWV1ZS0+cXVldWUgPQotICAgICAgZ3N0X3F1ZXVlX2FycmF5X25ld19mb3Jfc3RydWN0IChzaXplb2YgKEdzdFF1ZXVlSXRlbSksCi0gICAgICBERUZBVUxUX01BWF9TSVpFX0JVRkZFUlMgKiAzIC8gMik7Ci0KLSAgcXVldWUtPnNpbmt0aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gIHF1ZXVlLT5zcmN0aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0KLSAgcXVldWUtPnNpbmtfdGFpbnRlZCA9IFRSVUU7Ci0gIHF1ZXVlLT5zcmNfdGFpbnRlZCA9IFRSVUU7Ci0KLSAgcXVldWUtPm5ld3NlZ19hcHBsaWVkX3RvX3NyYyA9IEZBTFNFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgImluaXRpYWxpemVkIHF1ZXVlJ3Mgbm90X2VtcHR5ICYgbm90X2Z1bGwgY29uZGl0aW9ucyIpOwotfQotCi0vKiBjYWxsZWQgb25seSBvbmNlLCBhcyBvcHBvc2VkIHRvIGRpc3Bvc2UgKi8KLXN0YXRpYyB2b2lkCi1nc3RfcXVldWVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFF1ZXVlICpxdWV1ZSA9IEdTVF9RVUVVRSAob2JqZWN0KTsKLSAgR3N0UXVldWVJdGVtICpxaXRlbTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImZpbmFsaXppbmcgcXVldWUiKTsKLQotICB3aGlsZSAoKHFpdGVtID0gZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkX3N0cnVjdCAocXVldWUtPnF1ZXVlKSkpIHsKLSAgICAvKiBGSVhNRTogaWYgaXQncyBhIHF1ZXJ5LCBzaG91bGRuJ3Qgd2UgdW5yZWYgdGhhdCB0b28/ICovCi0gICAgaWYgKCFxaXRlbS0+aXNfcXVlcnkpCi0gICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKHFpdGVtLT5pdGVtKTsKLSAgfQotICBnc3RfcXVldWVfYXJyYXlfZnJlZSAocXVldWUtPnF1ZXVlKTsKLQotICBnX211dGV4X2NsZWFyICgmcXVldWUtPnFsb2NrKTsKLSAgZ19jb25kX2NsZWFyICgmcXVldWUtPml0ZW1fYWRkKTsKLSAgZ19jb25kX2NsZWFyICgmcXVldWUtPml0ZW1fZGVsKTsKLSAgZ19jb25kX2NsZWFyICgmcXVldWUtPnF1ZXJ5X2hhbmRsZWQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbmxpbmUgR3N0Q2xvY2tUaW1lRGlmZgotbXlfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RDbG9ja1RpbWUgdmFsKQotewotICBHc3RDbG9ja1RpbWVEaWZmIHJlcyA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodmFsKSkgewotICAgIGdib29sZWFuIHNpZ24gPQotICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbCAoc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB2YWwsICZ2YWwpOwotICAgIGlmIChzaWduID4gMCkKLSAgICAgIHJlcyA9IHZhbDsKLSAgICBlbHNlIGlmIChzaWduIDwgMCkKLSAgICAgIHJlcyA9IC12YWw7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogY2FsY3VsYXRlIHRoZSBkaWZmIGJldHdlZW4gcnVubmluZyB0aW1lIG9uIHRoZSBzaW5rIGFuZCBzcmMgb2YgdGhlIHF1ZXVlLgotICogVGhpcyBpcyB0aGUgdG90YWwgYW1vdW50IG9mIHRpbWUgaW4gdGhlIHF1ZXVlLiAqLwotc3RhdGljIHZvaWQKLXVwZGF0ZV90aW1lX2xldmVsIChHc3RRdWV1ZSAqIHF1ZXVlKQotewotICBnaW50NjQgc2lua190aW1lLCBzcmNfdGltZTsKLQotICBpZiAocXVldWUtPnNpbmtfdGFpbnRlZCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgInVwZGF0ZSBzaW5rIHRpbWUiKTsKLSAgICBxdWV1ZS0+c2lua3RpbWUgPQotICAgICAgICBteV9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnF1ZXVlLT5zaW5rX3NlZ21lbnQsCi0gICAgICAgIHF1ZXVlLT5zaW5rX3NlZ21lbnQucG9zaXRpb24pOwotICAgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBGQUxTRTsKLSAgfQotICBzaW5rX3RpbWUgPSBxdWV1ZS0+c2lua3RpbWU7Ci0KLSAgaWYgKHF1ZXVlLT5zcmNfdGFpbnRlZCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgInVwZGF0ZSBzcmMgdGltZSIpOwotICAgIHF1ZXVlLT5zcmN0aW1lID0KLSAgICAgICAgbXlfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZxdWV1ZS0+c3JjX3NlZ21lbnQsCi0gICAgICAgIHF1ZXVlLT5zcmNfc2VnbWVudC5wb3NpdGlvbik7Ci0gICAgcXVldWUtPnNyY190YWludGVkID0gRkFMU0U7Ci0gIH0KLSAgc3JjX3RpbWUgPSBxdWV1ZS0+c3JjdGltZTsKLQotICBHU1RfTE9HX09CSkVDVCAocXVldWUsICJzaW5rICUiIEdTVF9TVElNRV9GT1JNQVQgIiwgc3JjICUiIEdTVF9TVElNRV9GT1JNQVQsCi0gICAgICBHU1RfU1RJTUVfQVJHUyAoc2lua190aW1lKSwgR1NUX1NUSU1FX0FSR1MgKHNyY190aW1lKSk7Ci0KLSAgaWYgKHNpbmtfdGltZSA+PSBzcmNfdGltZSkKLSAgICBxdWV1ZS0+Y3VyX2xldmVsLnRpbWUgPSBzaW5rX3RpbWUgLSBzcmNfdGltZTsKLSAgZWxzZQotICAgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSA9IDA7Ci19Ci0KLS8qIHRha2UgYSBTRUdNRU5UIGV2ZW50IGFuZCBhcHBseSB0aGUgdmFsdWVzIHRvIHNlZ21lbnQsIHVwZGF0aW5nIHRoZSB0aW1lCi0gKiBsZXZlbCBvZiBxdWV1ZS4gKi8KLXN0YXRpYyB2b2lkCi1hcHBseV9zZWdtZW50IChHc3RRdWV1ZSAqIHF1ZXVlLCBHc3RFdmVudCAqIGV2ZW50LCBHc3RTZWdtZW50ICogc2VnbWVudCwKLSAgICBnYm9vbGVhbiBzaW5rKQotewotICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgc2VnbWVudCk7Ci0KLSAgLyogbm93IGNvbmZpZ3VyZSB0aGUgdmFsdWVzLCB3ZSB1c2UgdGhlc2UgdG8gdHJhY2sgdGltZXN0YW1wcyBvbiB0aGUKLSAgICogc2lua3BhZC4gKi8KLSAgaWYgKHNlZ21lbnQtPmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAvKiBub24tdGltZSBmb3JtYXQsIHByZXRlbnQgdGhlIGN1cnJlbnQgdGltZSBzZWdtZW50IGlzIGNsb3NlZCB3aXRoIGEKLSAgICAgKiAwIHN0YXJ0IGFuZCB1bmtub3duIHN0b3AgdGltZS4gKi8KLSAgICBzZWdtZW50LT5mb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7Ci0gICAgc2VnbWVudC0+c3RhcnQgPSAwOwotICAgIHNlZ21lbnQtPnN0b3AgPSAtMTsKLSAgICBzZWdtZW50LT50aW1lID0gMDsKLSAgfQotICBpZiAoc2luaykKLSAgICBxdWV1ZS0+c2lua190YWludGVkID0gVFJVRTsKLSAgZWxzZQotICAgIHF1ZXVlLT5zcmNfdGFpbnRlZCA9IFRSVUU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJjb25maWd1cmVkIFNFR01FTlQgJSIgR1NUX1NFR01FTlRfRk9STUFULCBzZWdtZW50KTsKLQotICAvKiBzZWdtZW50IGNhbiB1cGRhdGUgdGhlIHRpbWUgbGV2ZWwgb2YgdGhlIHF1ZXVlICovCi0gIHVwZGF0ZV90aW1lX2xldmVsIChxdWV1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcHBseV9nYXAgKEdzdFF1ZXVlICogcXVldWUsIEdzdEV2ZW50ICogZXZlbnQsCi0gICAgR3N0U2VnbWVudCAqIHNlZ21lbnQsIGdib29sZWFuIGlzX3NpbmspCi17Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLQotICBnc3RfZXZlbnRfcGFyc2VfZ2FwIChldmVudCwgJnRpbWVzdGFtcCwgJmR1cmF0aW9uKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCkpIHsKLQotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHVyYXRpb24pKSB7Ci0gICAgICB0aW1lc3RhbXAgKz0gZHVyYXRpb247Ci0gICAgfQotCi0gICAgc2VnbWVudC0+cG9zaXRpb24gPSB0aW1lc3RhbXA7Ci0KLSAgICBpZiAoaXNfc2luaykKLSAgICAgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBUUlVFOwotICAgIGVsc2UKLSAgICAgIHF1ZXVlLT5zcmNfdGFpbnRlZCA9IFRSVUU7Ci0KLSAgICAvKiBjYWxjIGRpZmYgd2l0aCBvdGhlciBlbmQgKi8KLSAgICB1cGRhdGVfdGltZV9sZXZlbCAocXVldWUpOwotICB9Ci19Ci0KLQotLyogdGFrZSBhIGJ1ZmZlciBhbmQgdXBkYXRlIHNlZ21lbnQsIHVwZGF0aW5nIHRoZSB0aW1lIGxldmVsIG9mIHRoZSBxdWV1ZS4gKi8KLXN0YXRpYyB2b2lkCi1hcHBseV9idWZmZXIgKEdzdFF1ZXVlICogcXVldWUsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0U2VnbWVudCAqIHNlZ21lbnQsCi0gICAgZ2Jvb2xlYW4gc2luaykKLXsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uLCB0aW1lc3RhbXA7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9EVFNfT1JfUFRTIChidWZmZXIpOwotICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7Ci0KLSAgLyogaWYgbm8gdGltZXN0YW1wIGlzIHNldCwgYXNzdW1lIGl0J3MgY29udGludW91cyB3aXRoIHRoZSBwcmV2aW91cwotICAgKiB0aW1lICovCi0gIGlmICh0aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICB0aW1lc3RhbXAgPSBzZWdtZW50LT5wb3NpdGlvbjsKLQotICAvKiBhZGQgZHVyYXRpb24gKi8KLSAgaWYgKGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgdGltZXN0YW1wICs9IGR1cmF0aW9uOwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgIiVzIHBvc2l0aW9uIHVwZGF0ZWQgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgc2VnbWVudCA9PSAmcXVldWUtPnNpbmtfc2VnbWVudCA/ICJzaW5rIiA6ICJzcmMiLAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgc2VnbWVudC0+cG9zaXRpb24gPSB0aW1lc3RhbXA7Ci0gIGlmIChzaW5rKQotICAgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBUUlVFOwotICBlbHNlCi0gICAgcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKLQotCi0gIC8qIGNhbGMgZGlmZiB3aXRoIG90aGVyIGVuZCAqLwotICB1cGRhdGVfdGltZV9sZXZlbCAocXVldWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1ZmZlcl9saXN0X2FwcGx5X3RpbWUgKEdzdEJ1ZmZlciAqKiBidWYsIGd1aW50IGlkeCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RDbG9ja1RpbWUgKnRpbWVzdGFtcCA9IHVzZXJfZGF0YTsKLSAgR3N0Q2xvY2tUaW1lIGJ0aW1lOwotCi0gIEdTVF9UUkFDRSAoImJ1ZmZlciAldSBoYXMgcHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiIGR0cyAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBpZHgsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFRTICgqYnVmKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAoKmJ1ZikpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoKmJ1ZikpKTsKLQotICBidGltZSA9IEdTVF9CVUZGRVJfRFRTX09SX1BUUyAoKmJ1Zik7Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoYnRpbWUpKQotICAgICp0aW1lc3RhbXAgPSBidGltZTsKLQotICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoKmJ1ZikpCi0gICAgKnRpbWVzdGFtcCArPSBHU1RfQlVGRkVSX0RVUkFUSU9OICgqYnVmKTsKLQotICBHU1RfVFJBQ0UgKCJ0cyBub3cgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICgqdGltZXN0YW1wKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIHRha2UgYSBidWZmZXIgbGlzdCBhbmQgdXBkYXRlIHNlZ21lbnQsIHVwZGF0aW5nIHRoZSB0aW1lIGxldmVsIG9mIHRoZSBxdWV1ZSAqLwotc3RhdGljIHZvaWQKLWFwcGx5X2J1ZmZlcl9saXN0IChHc3RRdWV1ZSAqIHF1ZXVlLCBHc3RCdWZmZXJMaXN0ICogYnVmZmVyX2xpc3QsCi0gICAgR3N0U2VnbWVudCAqIHNlZ21lbnQsIGdib29sZWFuIHNpbmspCi17Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0KLSAgLyogaWYgbm8gdGltZXN0YW1wIGlzIHNldCwgYXNzdW1lIGl0J3MgY29udGludW91cyB3aXRoIHRoZSBwcmV2aW91cyB0aW1lICovCi0gIHRpbWVzdGFtcCA9IHNlZ21lbnQtPnBvc2l0aW9uOwotCi0gIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChidWZmZXJfbGlzdCwgYnVmZmVyX2xpc3RfYXBwbHlfdGltZSwgJnRpbWVzdGFtcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJwb3NpdGlvbiB1cGRhdGVkIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIHNlZ21lbnQtPnBvc2l0aW9uID0gdGltZXN0YW1wOwotCi0gIGlmIChzaW5rKQotICAgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBUUlVFOwotICBlbHNlCi0gICAgcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKLQotICAvKiBjYWxjIGRpZmYgd2l0aCBvdGhlciBlbmQgKi8KLSAgdXBkYXRlX3RpbWVfbGV2ZWwgKHF1ZXVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZV9sb2NrZWRfZmx1c2ggKEdzdFF1ZXVlICogcXVldWUsIGdib29sZWFuIGZ1bGwpCi17Ci0gIEdzdFF1ZXVlSXRlbSAqcWl0ZW07Ci0KLSAgd2hpbGUgKChxaXRlbSA9IGdzdF9xdWV1ZV9hcnJheV9wb3BfaGVhZF9zdHJ1Y3QgKHF1ZXVlLT5xdWV1ZSkpKSB7Ci0gICAgLyogVGhlbiBsb3NlIGFub3RoZXIgcmVmZXJlbmNlIGJlY2F1c2Ugd2UgYXJlIHN1cHBvc2VkIHRvIGRlc3Ryb3kgdGhhdAotICAgICAgIGRhdGEgd2hlbiBmbHVzaGluZyAqLwotICAgIGlmICghZnVsbCAmJiAhcWl0ZW0tPmlzX3F1ZXJ5ICYmIEdTVF9JU19FVkVOVCAocWl0ZW0tPml0ZW0pCi0gICAgICAgICYmIEdTVF9FVkVOVF9JU19TVElDS1kgKHFpdGVtLT5pdGVtKQotICAgICAgICAmJiBHU1RfRVZFTlRfVFlQRSAocWl0ZW0tPml0ZW0pICE9IEdTVF9FVkVOVF9TRUdNRU5UCi0gICAgICAgICYmIEdTVF9FVkVOVF9UWVBFIChxaXRlbS0+aXRlbSkgIT0gR1NUX0VWRU5UX0VPUykgewotICAgICAgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIEdTVF9FVkVOVF9DQVNUIChxaXRlbS0+aXRlbSkpOwotICAgIH0KLSAgICBpZiAoIXFpdGVtLT5pc19xdWVyeSkKLSAgICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAocWl0ZW0tPml0ZW0pOwotICAgIG1lbXNldCAocWl0ZW0sIDAsIHNpemVvZiAoR3N0UXVldWVJdGVtKSk7Ci0gIH0KLSAgcXVldWUtPmxhc3RfcXVlcnkgPSBGQUxTRTsKLSAgZ19jb25kX3NpZ25hbCAoJnF1ZXVlLT5xdWVyeV9oYW5kbGVkKTsKLSAgR1NUX1FVRVVFX0NMRUFSX0xFVkVMIChxdWV1ZS0+Y3VyX2xldmVsKTsKLSAgcXVldWUtPm1pbl90aHJlc2hvbGQuYnVmZmVycyA9IHF1ZXVlLT5vcmlnX21pbl90aHJlc2hvbGQuYnVmZmVyczsKLSAgcXVldWUtPm1pbl90aHJlc2hvbGQuYnl0ZXMgPSBxdWV1ZS0+b3JpZ19taW5fdGhyZXNob2xkLmJ5dGVzOwotICBxdWV1ZS0+bWluX3RocmVzaG9sZC50aW1lID0gcXVldWUtPm9yaWdfbWluX3RocmVzaG9sZC50aW1lOwotICBnc3Rfc2VnbWVudF9pbml0ICgmcXVldWUtPnNpbmtfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF1ZXVlLT5zcmNfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgcXVldWUtPmhlYWRfbmVlZHNfZGlzY29udCA9IHF1ZXVlLT50YWlsX25lZWRzX2Rpc2NvbnQgPSBGQUxTRTsKLQotICBxdWV1ZS0+c2lua3RpbWUgPSBxdWV1ZS0+c3JjdGltZSA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICBxdWV1ZS0+c2lua190YWludGVkID0gcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKLQotICAvKiB3ZSBkZWxldGVkIGEgbG90IG9mIHNvbWV0aGluZyAqLwotICBHU1RfUVVFVUVfU0lHTkFMX0RFTCAocXVldWUpOwotfQotCi0vKiBlbnF1ZXVlIGFuIGl0ZW0gYW4gdXBkYXRlIHRoZSBsZXZlbCBzdGF0cywgd2l0aCBRVUVVRV9MT0NLICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZV9idWZmZXIgKEdzdFF1ZXVlICogcXVldWUsIGdwb2ludGVyIGl0ZW0pCi17Ci0gIEdzdFF1ZXVlSXRlbSBxaXRlbTsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKGl0ZW0pOwotICBnc2l6ZSBic2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7Ci0KLSAgLyogYWRkIGJ1ZmZlciB0byB0aGUgc3RhdGlzdGljcyAqLwotICBxdWV1ZS0+Y3VyX2xldmVsLmJ1ZmZlcnMrKzsKLSAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyArPSBic2l6ZTsKLSAgYXBwbHlfYnVmZmVyIChxdWV1ZSwgYnVmZmVyLCAmcXVldWUtPnNpbmtfc2VnbWVudCwgVFJVRSk7Ci0KLSAgcWl0ZW0uaXRlbSA9IGl0ZW07Ci0gIHFpdGVtLmlzX3F1ZXJ5ID0gRkFMU0U7Ci0gIHFpdGVtLnNpemUgPSBic2l6ZTsKLSAgZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbF9zdHJ1Y3QgKHF1ZXVlLT5xdWV1ZSwgJnFpdGVtKTsKLSAgR1NUX1FVRVVFX1NJR05BTF9BREQgKHF1ZXVlKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1idWZmZXJfbGlzdF9jYWxjX3NpemUgKEdzdEJ1ZmZlciAqKiBidWYsIGd1aW50IGlkeCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ3VpbnQgKnBfc2l6ZSA9IGRhdGE7Ci0gIGdzaXplIGJ1Zl9zaXplOwotCi0gIGJ1Zl9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoKmJ1Zik7Ci0gIEdTVF9UUkFDRSAoImJ1ZmZlciAldSBpbiBoYXMgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwgaWR4LCBidWZfc2l6ZSk7Ci0gICpwX3NpemUgKz0gYnVmX3NpemU7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9xdWV1ZV9sb2NrZWRfZW5xdWV1ZV9idWZmZXJfbGlzdCAoR3N0UXVldWUgKiBxdWV1ZSwgZ3BvaW50ZXIgaXRlbSkKLXsKLSAgR3N0UXVldWVJdGVtIHFpdGVtOwotICBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdCA9IEdTVF9CVUZGRVJfTElTVF9DQVNUIChpdGVtKTsKLSAgZ3NpemUgYnNpemUgPSAwOwotCi0gIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChidWZmZXJfbGlzdCwgYnVmZmVyX2xpc3RfY2FsY19zaXplLCAmYnNpemUpOwotCi0gIC8qIGFkZCBidWZmZXIgdG8gdGhlIHN0YXRpc3RpY3MgKi8KLSAgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzICs9IGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGJ1ZmZlcl9saXN0KTsKLSAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyArPSBic2l6ZTsKLSAgYXBwbHlfYnVmZmVyX2xpc3QgKHF1ZXVlLCBidWZmZXJfbGlzdCwgJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIFRSVUUpOwotCi0gIHFpdGVtLml0ZW0gPSBpdGVtOwotICBxaXRlbS5pc19xdWVyeSA9IEZBTFNFOwotICBxaXRlbS5zaXplID0gYnNpemU7Ci0gIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWxfc3RydWN0IChxdWV1ZS0+cXVldWUsICZxaXRlbSk7Ci0gIEdTVF9RVUVVRV9TSUdOQUxfQUREIChxdWV1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlX2V2ZW50IChHc3RRdWV1ZSAqIHF1ZXVlLCBncG9pbnRlciBpdGVtKQotewotICBHc3RRdWV1ZUl0ZW0gcWl0ZW07Ci0gIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChpdGVtKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImdvdCBFT1MgZnJvbSB1cHN0cmVhbSIpOwotICAgICAgLyogWmVybyB0aGUgdGhyZXNob2xkcywgdGhpcyBtYWtlcyBzdXJlIHRoZSBxdWV1ZSBpcyBjb21wbGV0ZWx5Ci0gICAgICAgKiBmaWxsZWQgYW5kIHdlIGNhbiByZWFkIGFsbCBkYXRhIGZyb20gdGhlIHF1ZXVlLiAqLwotICAgICAgaWYgKHF1ZXVlLT5mbHVzaF9vbl9lb3MpCi0gICAgICAgIGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2ggKHF1ZXVlLCBGQUxTRSk7Ci0gICAgICBlbHNlCi0gICAgICAgIEdTVF9RVUVVRV9DTEVBUl9MRVZFTCAocXVldWUtPm1pbl90aHJlc2hvbGQpOwotICAgICAgLyogbWFyayB0aGUgcXVldWUgYXMgRU9TLiBUaGlzIHByZXZlbnRzIHVzIGZyb20gYWNjZXB0aW5nIG1vcmUgZGF0YS4gKi8KLSAgICAgIHF1ZXVlLT5lb3MgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICAgIGFwcGx5X3NlZ21lbnQgKHF1ZXVlLCBldmVudCwgJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIFRSVUUpOwotICAgICAgLyogaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCBhcHBseSBzaW5rIHNlZ21lbnQgb24gdGhlIHNvdXJjZSAqLwotICAgICAgaWYgKGdzdF9xdWV1ZV9hcnJheV9pc19lbXB0eSAocXVldWUtPnF1ZXVlKSkgewotICAgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgIkFwcGx5IHNlZ21lbnQgb24gc3JjcGFkIik7Ci0gICAgICAgIGFwcGx5X3NlZ21lbnQgKHF1ZXVlLCBldmVudCwgJnF1ZXVlLT5zcmNfc2VnbWVudCwgRkFMU0UpOwotICAgICAgICBxdWV1ZS0+bmV3c2VnX2FwcGxpZWRfdG9fc3JjID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIC8qIGEgbmV3IHNlZ21lbnQgYWxsb3dzIHVzIHRvIGFjY2VwdCBtb3JlIGJ1ZmZlcnMgaWYgd2UgZ290IEVPUwotICAgICAgICogZnJvbSBkb3duc3RyZWFtICovCi0gICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfR0FQOgotICAgICAgYXBwbHlfZ2FwIChxdWV1ZSwgZXZlbnQsICZxdWV1ZS0+c2lua19zZWdtZW50LCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHFpdGVtLml0ZW0gPSBpdGVtOwotICBxaXRlbS5pc19xdWVyeSA9IEZBTFNFOwotICBxaXRlbS5zaXplID0gMDsKLSAgZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbF9zdHJ1Y3QgKHF1ZXVlLT5xdWV1ZSwgJnFpdGVtKTsKLSAgR1NUX1FVRVVFX1NJR05BTF9BREQgKHF1ZXVlKTsKLX0KLQotLyogZGVxdWV1ZSBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlIGFuZCB1cGRhdGUgbGV2ZWwgc3RhdHMsIHdpdGggUVVFVUVfTE9DSyAqLwotc3RhdGljIEdzdE1pbmlPYmplY3QgKgotZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlIChHc3RRdWV1ZSAqIHF1ZXVlKQotewotICBHc3RRdWV1ZUl0ZW0gKnFpdGVtOwotICBHc3RNaW5pT2JqZWN0ICppdGVtOwotICBnc2l6ZSBidWZzaXplOwotCi0gIHFpdGVtID0gZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkX3N0cnVjdCAocXVldWUtPnF1ZXVlKTsKLSAgaWYgKHFpdGVtID09IE5VTEwpCi0gICAgZ290byBub19pdGVtOwotCi0gIGl0ZW0gPSBxaXRlbS0+aXRlbTsKLSAgYnVmc2l6ZSA9IHFpdGVtLT5zaXplOwotCi0gIGlmIChHU1RfSVNfQlVGRkVSIChpdGVtKSkgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUIChpdGVtKTsKLQotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAicmV0cmlldmVkIGJ1ZmZlciAlcCBmcm9tIHF1ZXVlIiwgYnVmZmVyKTsKLQotICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycy0tOwotICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgLT0gYnVmc2l6ZTsKLSAgICBhcHBseV9idWZmZXIgKHF1ZXVlLCBidWZmZXIsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIEZBTFNFKTsKLQotICAgIC8qIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSBub3csIHVwZGF0ZSB0aGUgb3RoZXIgc2lkZSAqLwotICAgIGlmIChxdWV1ZS0+Y3VyX2xldmVsLmJ1ZmZlcnMgPT0gMCkKLSAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSA9IDA7Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX0JVRkZFUl9MSVNUIChpdGVtKSkgewotICAgIEdzdEJ1ZmZlckxpc3QgKmJ1ZmZlcl9saXN0ID0gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGl0ZW0pOwotCi0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICJyZXRyaWV2ZWQgYnVmZmVyIGxpc3QgJXAgZnJvbSBxdWV1ZSIsIGJ1ZmZlcl9saXN0KTsKLQotICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycyAtPSBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChidWZmZXJfbGlzdCk7Ci0gICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyAtPSBidWZzaXplOwotICAgIGFwcGx5X2J1ZmZlcl9saXN0IChxdWV1ZSwgYnVmZmVyX2xpc3QsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIEZBTFNFKTsKLQotICAgIC8qIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSBub3csIHVwZGF0ZSB0aGUgb3RoZXIgc2lkZSAqLwotICAgIGlmIChxdWV1ZS0+Y3VyX2xldmVsLmJ1ZmZlcnMgPT0gMCkKLSAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSA9IDA7Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChpdGVtKSkgewotICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChpdGVtKTsKLQotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAicmV0cmlldmVkIGV2ZW50ICVwIGZyb20gcXVldWUiLCBldmVudCk7Ci0KLSAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgICAgLyogcXVldWUgaXMgZW1wdHkgbm93IHRoYXQgd2UgZGVxdWV1ZWQgdGhlIEVPUyAqLwotICAgICAgICBHU1RfUVVFVUVfQ0xFQVJfTEVWRUwgKHF1ZXVlLT5jdXJfbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICAgIC8qIGFwcGx5IG5ld3NlZ21lbnQgaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gYXBwbGllZCAqLwotICAgICAgICBpZiAoR19MSUtFTFkgKCFxdWV1ZS0+bmV3c2VnX2FwcGxpZWRfdG9fc3JjKSkgewotICAgICAgICAgIGFwcGx5X3NlZ21lbnQgKHF1ZXVlLCBldmVudCwgJnF1ZXVlLT5zcmNfc2VnbWVudCwgRkFMU0UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHF1ZXVlLT5uZXdzZWdfYXBwbGllZF90b19zcmMgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0dBUDoKLSAgICAgICAgYXBwbHlfZ2FwIChxdWV1ZSwgZXZlbnQsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIEZBTFNFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX1FVRVJZIChpdGVtKSkgewotICAgIEdzdFF1ZXJ5ICpxdWVyeSA9IEdTVF9RVUVSWV9DQVNUIChpdGVtKTsKLQotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAicmV0cmlldmVkIHF1ZXJ5ICVwIGZyb20gcXVldWUiLCBxdWVyeSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ193YXJuaW5nCi0gICAgICAgICgiVW5leHBlY3RlZCBpdGVtICVwIGRlcXVldWVkIGZyb20gcXVldWUgJXMgKHJlZmNvdW50aW5nIHByb2JsZW0/KSIsCi0gICAgICAgIGl0ZW0sIEdTVF9PQkpFQ1RfTkFNRSAocXVldWUpKTsKLSAgICBpdGVtID0gTlVMTDsKLSAgfQotICBHU1RfUVVFVUVfU0lHTkFMX0RFTCAocXVldWUpOwotCi0gIHJldHVybiBpdGVtOwotCi0gIC8qIEVSUk9SUyAqLwotbm9faXRlbToKLSAgewotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJ0aGUgcXVldWUgaXMgZW1wdHkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F1ZXVlX2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgR3N0UXVldWUgKnF1ZXVlOwotCi0gIHF1ZXVlID0gR1NUX1FVRVVFIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgU1RBVFVTIChxdWV1ZSwgcGFkLCAicmVjZWl2ZWQgZmx1c2ggc3RhcnQgZXZlbnQiKTsKLSAgICAgIC8qIGZvcndhcmQgZXZlbnQgKi8KLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNyY3BhZCwgZXZlbnQpOwotCi0gICAgICAvKiBub3cgdW5ibG9jayB0aGUgY2hhaW4gZnVuY3Rpb24gKi8KLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICAvKiB1bmJsb2NrIHRoZSBsb29wIGFuZCBjaGFpbiBmdW5jdGlvbnMgKi8KLSAgICAgIEdTVF9RVUVVRV9TSUdOQUxfQUREIChxdWV1ZSk7Ci0gICAgICBHU1RfUVVFVUVfU0lHTkFMX0RFTCAocXVldWUpOwotICAgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gICAgICAvKiBtYWtlIHN1cmUgaXQgcGF1c2VzLCB0aGlzIHNob3VsZCBoYXBwZW4gc2luY2Ugd2Ugc2VudAotICAgICAgICogZmx1c2hfc3RhcnQgZG93bnN0cmVhbS4gKi8KLSAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocXVldWUtPnNyY3BhZCk7Ci0gICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImxvb3Agc3RvcHBlZCIpOwotCi0gICAgICAvKiB1bmJsb2NrIHF1ZXJ5IGhhbmRsZXIgYWZ0ZXIgdGhlIHN0cmVhbWluZyB0aHJlYWQgaXMgc2h1dCBkb3duLgotICAgICAgICogT3RoZXJ3aXNlIGRvd25zdHJlYW0gbWlnaHQgaGF2ZSBhIHF1ZXJ5IHRoYXQgaXMgYWxyZWFkeSB1bnJlZmZlZAotICAgICAgICogdXBzdHJlYW0gKi8KLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICBxdWV1ZS0+bGFzdF9xdWVyeSA9IEZBTFNFOwotICAgICAgZ19jb25kX3NpZ25hbCAoJnF1ZXVlLT5xdWVyeV9oYW5kbGVkKTsKLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBTVEFUVVMgKHF1ZXVlLCBwYWQsICJyZWNlaXZlZCBmbHVzaCBzdG9wIGV2ZW50Iik7Ci0gICAgICAvKiBmb3J3YXJkIGV2ZW50ICovCi0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGV2ZW50KTsKLQotICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICAgIGdzdF9xdWV1ZV9sb2NrZWRfZmx1c2ggKHF1ZXVlLCBGQUxTRSk7Ci0gICAgICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICBxdWV1ZS0+ZW9zID0gRkFMU0U7Ci0gICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgaWYgKGdzdF9wYWRfaXNfYWN0aXZlIChxdWV1ZS0+c3JjcGFkKSkgewotICAgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHF1ZXVlLT5zcmNwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdWV1ZV9sb29wLAotICAgICAgICAgICAgcXVldWUtPnNyY3BhZCwgTlVMTCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHF1ZXVlLT5zcmNwYWQsICJub3QgcmUtc3RhcnRpbmcgdGFzayBvbiBzcmNwYWQsICIKLSAgICAgICAgICAgICJwYWQgbm90IGFjdGl2ZSBhbnkgbG9uZ2VyIik7Ci0gICAgICB9Ci0gICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgICAgIFNUQVRVUyAocXVldWUsIHBhZCwgImFmdGVyIGZsdXNoIik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpIHsKLSAgICAgICAgLyogc2VyaWFsaXplZCBldmVudHMgZ28gaW4gdGhlIHF1ZXVlICovCi0gICAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICAgIGlmIChxdWV1ZS0+c3JjcmVzdWx0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgLyogRXJyb3JzIGluIHN0aWNreSBldmVudCBwdXNoaW5nIGFyZSBubyBwcm9ibGVtIGFuZCBpZ25vcmVkIGhlcmUKLSAgICAgICAgICAgKiBhcyB0aGV5IHdpbGwgY2F1c2UgbW9yZSBtZWFuaW5nZnVsIGVycm9ycyBkdXJpbmcgZGF0YSBmbG93LgotICAgICAgICAgICAqIEZvciBFT1MgZXZlbnRzLCB0aGF0IGFyZSBub3QgZm9sbG93ZWQgYnkgZGF0YSBmbG93LCB3ZSBzdGlsbAotICAgICAgICAgICAqIHJldHVybiBGQUxTRSBoZXJlIHRob3VnaCBhbmQgcmVwb3J0IGFuIGVycm9yLgotICAgICAgICAgICAqLwotICAgICAgICAgIGlmICghR1NUX0VWRU5UX0lTX1NUSUNLWSAoZXZlbnQpKSB7Ci0gICAgICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICAgICAgICBnb3RvIG91dF9mbG93X2Vycm9yOwotICAgICAgICAgIH0gZWxzZSBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRU9TKSB7Ci0gICAgICAgICAgICBpZiAocXVldWUtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VECi0gICAgICAgICAgICAgICAgfHwgcXVldWUtPnNyY3Jlc3VsdCA8IEdTVF9GTE9XX0VPUykgewotICAgICAgICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKHF1ZXVlLCBxdWV1ZS0+c3JjcmVzdWx0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdG8gb3V0X2Zsb3dfZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIHJlZnVzZSBtb3JlIGV2ZW50cyBvbiBFT1MgKi8KLSAgICAgICAgaWYgKHF1ZXVlLT5lb3MpCi0gICAgICAgICAgZ290byBvdXRfZW9zOwotICAgICAgICBnc3RfcXVldWVfbG9ja2VkX2VucXVldWVfZXZlbnQgKHF1ZXVlLCBldmVudCk7Ci0gICAgICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIG5vbi1zZXJpYWxpemVkIGV2ZW50cyBhcmUgZm9yd2FyZGVkIGRvd25zdHJlYW0gaW1tZWRpYXRlbHkgKi8KLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChxdWV1ZS0+c3JjcGFkLCBldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotICBpZiAocmV0ID09IEZBTFNFKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocXVldWUsICJGYWlsZWQgdG8gcHVzaCBldmVudCIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1vdXRfZW9zOgotICB7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJyZWZ1c2luZyBldmVudCwgd2UgYXJlIEVPUyIpOwotICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci1vdXRfZmxvd19lcnJvcjoKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAicmVmdXNpbmcgZXZlbnQsIHdlIGhhdmUgYSBkb3duc3RyZWFtIGZsb3cgZXJyb3I6ICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHF1ZXVlLT5zcmNyZXN1bHQpKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXR1cm4gcXVldWUtPnNyY3Jlc3VsdDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9xdWV1ZV9oYW5kbGVfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFF1ZXVlICpxdWV1ZSA9IEdTVF9RVUVVRV9DQVNUIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChHX1VOTElLRUxZIChHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCAocXVlcnkpKSkgewotICAgICAgICBHc3RRdWV1ZUl0ZW0gcWl0ZW07Ci0KLSAgICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAocXVldWUsICJxdWV1aW5nIHF1ZXJ5ICVwICglcykiLCBxdWVyeSwKLSAgICAgICAgICAgIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0gICAgICAgIHFpdGVtLml0ZW0gPSBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocXVlcnkpOwotICAgICAgICBxaXRlbS5pc19xdWVyeSA9IFRSVUU7Ci0gICAgICAgIHFpdGVtLnNpemUgPSAwOwotICAgICAgICBnc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsX3N0cnVjdCAocXVldWUtPnF1ZXVlLCAmcWl0ZW0pOwotICAgICAgICBHU1RfUVVFVUVfU0lHTkFMX0FERCAocXVldWUpOwotICAgICAgICBnX2NvbmRfd2FpdCAoJnF1ZXVlLT5xdWVyeV9oYW5kbGVkLCAmcXVldWUtPnFsb2NrKTsKLSAgICAgICAgaWYgKHF1ZXVlLT5zcmNyZXN1bHQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgZ290byBvdXRfZmx1c2hpbmc7Ci0gICAgICAgIHJlcyA9IHF1ZXVlLT5sYXN0X3F1ZXJ5OwotICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJ3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1ZXVlX2lzX2VtcHR5IChHc3RRdWV1ZSAqIHF1ZXVlKQotewotICBHc3RRdWV1ZUl0ZW0gKmhlYWQ7Ci0KLSAgaGVhZCA9IGdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWRfc3RydWN0IChxdWV1ZS0+cXVldWUpOwotCi0gIGlmIChoZWFkID09IE5VTEwpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogT25seSBjb25zaWRlciB0aGUgcXVldWUgZW1wdHkgaWYgdGhlIG1pbmltdW0gdGhyZXNob2xkcwotICAgKiBhcmUgbm90IHJlYWNoZWQgYW5kIGRhdGEgaXMgYXQgdGhlIHF1ZXVlIGhlYWQuIE90aGVyd2lzZQotICAgKiB3ZSB3b3VsZCBibG9jayBmb3JldmVyIG9uIHNlcmlhbGl6ZWQgcXVlcmllcy4KLSAgICovCi0gIGlmICghR1NUX0lTX0JVRkZFUiAoaGVhZC0+aXRlbSkgJiYgIUdTVF9JU19CVUZGRVJfTElTVCAoaGVhZC0+aXRlbSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSBtYXggc2l6ZSBpcyByZWFjaGVkIGJlZm9yZSBhbGwgbWluIHRocmVzaG9sZHMgYXJlLgotICAgKiBUaGVyZWZvcmUsIG9ubHkgY29uc2lkZXIgaXQgZW1wdHkgaWYgaXQgaXMgbm90IGZpbGxlZC4gKi8KLSAgcmV0dXJuICgocXVldWUtPm1pbl90aHJlc2hvbGQuYnVmZmVycyA+IDAgJiYKLSAgICAgICAgICBxdWV1ZS0+Y3VyX2xldmVsLmJ1ZmZlcnMgPCBxdWV1ZS0+bWluX3RocmVzaG9sZC5idWZmZXJzKSB8fAotICAgICAgKHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ5dGVzID4gMCAmJgotICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgPCBxdWV1ZS0+bWluX3RocmVzaG9sZC5ieXRlcykgfHwKLSAgICAgIChxdWV1ZS0+bWluX3RocmVzaG9sZC50aW1lID4gMCAmJgotICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSA8IHF1ZXVlLT5taW5fdGhyZXNob2xkLnRpbWUpKSAmJgotICAgICAgIWdzdF9xdWV1ZV9pc19maWxsZWQgKHF1ZXVlKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXVldWVfaXNfZmlsbGVkIChHc3RRdWV1ZSAqIHF1ZXVlKQotewotICByZXR1cm4gKCgocXVldWUtPm1heF9zaXplLmJ1ZmZlcnMgPiAwICYmCi0gICAgICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycyA+PSBxdWV1ZS0+bWF4X3NpemUuYnVmZmVycykgfHwKLSAgICAgICAgICAocXVldWUtPm1heF9zaXplLmJ5dGVzID4gMCAmJgotICAgICAgICAgICAgICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzID49IHF1ZXVlLT5tYXhfc2l6ZS5ieXRlcykgfHwKLSAgICAgICAgICAocXVldWUtPm1heF9zaXplLnRpbWUgPiAwICYmCi0gICAgICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSA+PSBxdWV1ZS0+bWF4X3NpemUudGltZSkpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZV9sZWFrX2Rvd25zdHJlYW0gKEdzdFF1ZXVlICogcXVldWUpCi17Ci0gIC8qIGZvciBhcyBsb25nIGFzIHRoZSBxdWV1ZSBpcyBmaWxsZWQsIGRlcXVldWUgYW4gaXRlbSBhbmQgZGlzY2FyZCBpdCAqLwotICB3aGlsZSAoZ3N0X3F1ZXVlX2lzX2ZpbGxlZCAocXVldWUpKSB7Ci0gICAgR3N0TWluaU9iamVjdCAqbGVhazsKLQotICAgIGxlYWsgPSBnc3RfcXVldWVfbG9ja2VkX2RlcXVldWUgKHF1ZXVlKTsKLSAgICAvKiB0aGVyZSBpcyBub3RoaW5nIHRvIGRlcXVldWUgYW5kIHRoZSBxdWV1ZSBpcyBzdGlsbCBmaWxsZWQuLiBUaGlzIHNob3VsZAotICAgICAqIG5vdCBoYXBwZW4gKi8KLSAgICBnX2Fzc2VydCAobGVhayAhPSBOVUxMKTsKLQotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICJxdWV1ZSBpcyBmdWxsLCBsZWFraW5nIGl0ZW0gJXAgb24gZG93bnN0cmVhbSBlbmQiLCBsZWFrKTsKLSAgICBpZiAoR1NUX0lTX0VWRU5UIChsZWFrKSAmJiBHU1RfRVZFTlRfSVNfU1RJQ0tZIChsZWFrKSkgewotICAgICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKLSAgICAgICAgICAiU3RvcmluZyBzdGlja3kgZXZlbnQgJXMgb24gc3JjcGFkIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAobGVhaykpOwotICAgICAgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIEdTVF9FVkVOVF9DQVNUIChsZWFrKSk7Ci0gICAgfQotCi0gICAgaWYgKCFHU1RfSVNfUVVFUlkgKGxlYWspKQotICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChsZWFrKTsKLQotICAgIC8qIGxhc3QgYnVmZmVyIG5lZWRzIHRvIGdldCBhIERJU0NPTlQgZmxhZyAqLwotICAgIHF1ZXVlLT5oZWFkX25lZWRzX2Rpc2NvbnQgPSBUUlVFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZGlzY29udF9maXJzdF9idWZmZXIgKEdzdEJ1ZmZlciAqKiBidWZmZXIsIGd1aW50IGksIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UXVldWUgKnF1ZXVlID0gdXNlcl9kYXRhOwotICBHc3RCdWZmZXIgKnN1YmJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoKmJ1ZmZlcik7Ci0KLSAgaWYgKHN1YmJ1ZmZlcikgewotICAgICpidWZmZXIgPSBzdWJidWZmZXI7Ci0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoKmJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiQ291bGQgbm90IG1hcmsgYnVmZmVyIGFzIERJU0NPTlQiKTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdWV1ZV9jaGFpbl9idWZmZXJfb3JfbGlzdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0TWluaU9iamVjdCAqIG9iaiwgZ2Jvb2xlYW4gaXNfbGlzdCkKLXsKLSAgR3N0UXVldWUgKnF1ZXVlOwotCi0gIHF1ZXVlID0gR1NUX1FVRVVFX0NBU1QgKHBhcmVudCk7Ci0KLSAgLyogd2UgaGF2ZSB0byBsb2NrIHRoZSBxdWV1ZSBzaW5jZSB3ZSBzcGFuIHRocmVhZHMgKi8KLSAgR1NUX1FVRVVFX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOwotICAvKiB3aGVuIHdlIHJlY2VpdmVkIEVPUywgd2UgcmVmdXNlIGFueSBtb3JlIGRhdGEgKi8KLSAgaWYgKHF1ZXVlLT5lb3MpCi0gICAgZ290byBvdXRfZW9zOwotICBpZiAocXVldWUtPnVuZXhwZWN0ZWQpCi0gICAgZ290byBvdXRfdW5leHBlY3RlZDsKLQotICBpZiAoIWlzX2xpc3QpIHsKLSAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIHRpbWVzdGFtcDsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IEdTVF9CVUZGRVJfQ0FTVCAob2JqKTsKLQotICAgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfRFRTX09SX1BUUyAoYnVmZmVyKTsKLSAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7Ci0KLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgInJlY2VpdmVkIGJ1ZmZlciAlcCBvZiBzaXplICUiCi0gICAgICAgIEdfR1NJWkVfRk9STUFUICIsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIsIGR1cmF0aW9uICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgYnVmZmVyLCBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpLAotICAgICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLCBHU1RfVElNRV9BUkdTIChkdXJhdGlvbikpOwotICB9IGVsc2UgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAicmVjZWl2ZWQgYnVmZmVyIGxpc3QgJXAgd2l0aCAldSBidWZmZXJzIiwgb2JqLAotICAgICAgICBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChHU1RfQlVGRkVSX0xJU1RfQ0FTVCAob2JqKSkpOwotICB9Ci0KLSAgLyogV2UgbWFrZSBzcGFjZSBhdmFpbGFibGUgaWYgd2UncmUgImZ1bGwiIGFjY29yZGluZyB0byB3aGF0ZXZlcgotICAgKiB0aGUgdXNlciBkZWZpbmVkIGFzICJmdWxsIi4gTm90ZSB0aGF0IHRoaXMgb25seSBhcHBsaWVzIHRvIGJ1ZmZlcnMuCi0gICAqIFdlIGFsd2F5cyBoYW5kbGUgZXZlbnRzIGFuZCB0aGV5IGRvbid0IGNvdW50IGluIG91ciBzdGF0aXN0aWNzLiAqLwotICB3aGlsZSAoZ3N0X3F1ZXVlX2lzX2ZpbGxlZCAocXVldWUpKSB7Ci0gICAgaWYgKCFxdWV1ZS0+c2lsZW50KSB7Ci0gICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICBnX3NpZ25hbF9lbWl0IChxdWV1ZSwgZ3N0X3F1ZXVlX3NpZ25hbHNbU0lHTkFMX09WRVJSVU5dLCAwKTsKLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKLSAgICAgIC8qIHdlIHJlY2hlY2ssIHRoZSBzaWduYWwgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSB0aHJlc2hvbGRzICovCi0gICAgICBpZiAoIWdzdF9xdWV1ZV9pc19maWxsZWQgKHF1ZXVlKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLyogaG93IGFyZSB3ZSBnb2luZyB0byBtYWtlIHNwYWNlIGZvciB0aGlzIGJ1ZmZlcj8gKi8KLSAgICBzd2l0Y2ggKHF1ZXVlLT5sZWFreSkgewotICAgICAgY2FzZSBHU1RfUVVFVUVfTEVBS19VUFNUUkVBTToKLSAgICAgICAgLyogbmV4dCBidWZmZXIgbmVlZHMgdG8gZ2V0IGEgRElTQ09OVCBmbGFnICovCi0gICAgICAgIHF1ZXVlLT50YWlsX25lZWRzX2Rpc2NvbnQgPSBUUlVFOwotICAgICAgICAvKiBsZWFrIGN1cnJlbnQgYnVmZmVyICovCi0gICAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICAgICAicXVldWUgaXMgZnVsbCwgbGVha2luZyBidWZmZXIgb24gdXBzdHJlYW0gZW5kIik7Ci0gICAgICAgIC8qIG5vdyB3ZSBjYW4gY2xlYW4gdXAgYW5kIGV4aXQgcmlnaHQgYXdheSAqLwotICAgICAgICBnb3RvIG91dF91bnJlZjsKLSAgICAgIGNhc2UgR1NUX1FVRVVFX0xFQUtfRE9XTlNUUkVBTToKLSAgICAgICAgZ3N0X3F1ZXVlX2xlYWtfZG93bnN0cmVhbSAocXVldWUpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdfd2FybmluZyAoIlVua25vd24gbGVha3kgdHlwZSwgdXNpbmcgZGVmYXVsdCIpOwotICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICAgIGNhc2UgR1NUX1FVRVVFX05PX0xFQUs6Ci0gICAgICB7Ci0gICAgICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICAgICAicXVldWUgaXMgZnVsbCwgd2FpdGluZyBmb3IgZnJlZSBzcGFjZSIpOwotCi0gICAgICAgIC8qIGRvbid0IGxlYWsuIEluc3RlYWQsIHdhaXQgZm9yIHNwYWNlIHRvIGJlIGF2YWlsYWJsZSAqLwotICAgICAgICBkbyB7Ci0gICAgICAgICAgLyogZm9yIGFzIGxvbmcgYXMgdGhlIHF1ZXVlIGlzIGZpbGxlZCwgd2FpdCB0aWxsIGFuIGl0ZW0gd2FzIGRlbGV0ZWQuICovCi0gICAgICAgICAgR1NUX1FVRVVFX1dBSVRfREVMX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKLSAgICAgICAgfSB3aGlsZSAoZ3N0X3F1ZXVlX2lzX2ZpbGxlZCAocXVldWUpKTsKLQotICAgICAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicXVldWUgaXMgbm90IGZ1bGwiKTsKLQotICAgICAgICBpZiAoIXF1ZXVlLT5zaWxlbnQpIHsKLSAgICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICAgICAgZ19zaWduYWxfZW1pdCAocXVldWUsIGdzdF9xdWV1ZV9zaWduYWxzW1NJR05BTF9SVU5OSU5HXSwgMCk7Ci0gICAgICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChxdWV1ZS0+dGFpbF9uZWVkc19kaXNjb250KSB7Ci0gICAgaWYgKCFpc19saXN0KSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IEdTVF9CVUZGRVJfQ0FTVCAob2JqKTsKLSAgICAgIEdzdEJ1ZmZlciAqc3ViYnVmZmVyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOwotCi0gICAgICBpZiAoc3ViYnVmZmVyKSB7Ci0gICAgICAgIGJ1ZmZlciA9IHN1YmJ1ZmZlcjsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIkNvdWxkIG5vdCBtYXJrIGJ1ZmZlciBhcyBESVNDT05UIik7Ci0gICAgICB9Ci0KLSAgICAgIG9iaiA9IEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdCA9IEdTVF9CVUZGRVJfTElTVF9DQVNUIChvYmopOwotCi0gICAgICBidWZmZXJfbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlIChidWZmZXJfbGlzdCk7Ci0gICAgICBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCAoYnVmZmVyX2xpc3QsIGRpc2NvbnRfZmlyc3RfYnVmZmVyLCBxdWV1ZSk7Ci0gICAgICBvYmogPSBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmZmVyX2xpc3QpOwotICAgIH0KLSAgICBxdWV1ZS0+dGFpbF9uZWVkc19kaXNjb250ID0gRkFMU0U7Ci0gIH0KLQotICAvKiBwdXQgYnVmZmVyIGluIHF1ZXVlIG5vdyAqLwotICBpZiAoaXNfbGlzdCkKLSAgICBnc3RfcXVldWVfbG9ja2VkX2VucXVldWVfYnVmZmVyX2xpc3QgKHF1ZXVlLCBvYmopOwotICBlbHNlCi0gICAgZ3N0X3F1ZXVlX2xvY2tlZF9lbnF1ZXVlX2J1ZmZlciAocXVldWUsIG9iaik7Ci0gIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogc3BlY2lhbCBjb25kaXRpb25zICovCi1vdXRfdW5yZWY6Ci0gIHsKLSAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG9iaik7Ci0KLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLW91dF9mbHVzaGluZzoKLSAgewotICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gcXVldWUtPnNyY3Jlc3VsdDsKLQotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAiZXhpdCBiZWNhdXNlIHRhc2sgcGF1c2VkLCByZWFzb246ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG9iaik7Ci0KLSAgICByZXR1cm4gcmV0OwotICB9Ci1vdXRfZW9zOgotICB7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJleGl0IGJlY2F1c2Ugd2UgcmVjZWl2ZWQgRU9TIik7Ci0gICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChvYmopOwotCi0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotb3V0X3VuZXhwZWN0ZWQ6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImV4aXQgYmVjYXVzZSB3ZSByZWNlaXZlZCBFT1MiKTsKLSAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG9iaik7Ci0KLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXVldWVfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyTGlzdCAqIGJ1ZmZlcl9saXN0KQotewotICByZXR1cm4gZ3N0X3F1ZXVlX2NoYWluX2J1ZmZlcl9vcl9saXN0IChwYWQsIHBhcmVudCwKLSAgICAgIEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWZmZXJfbGlzdCksIFRSVUUpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F1ZXVlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICByZXR1cm4gZ3N0X3F1ZXVlX2NoYWluX2J1ZmZlcl9vcl9saXN0IChwYWQsIHBhcmVudCwKLSAgICAgIEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWZmZXIpLCBGQUxTRSk7Ci19Ci0KLS8qIGRlcXVldWUgYW4gaXRlbSBmcm9tIHRoZSBxdWV1ZSBhbiBwdXNoIGl0IGRvd25zdHJlYW0uIFRoaXMgZnVuY3Rpb25zIHJldHVybnMKLSAqIHRoZSByZXN1bHQgb2YgdGhlIHB1c2guICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F1ZXVlX3B1c2hfb25lIChHc3RRdWV1ZSAqIHF1ZXVlKQotewotICBHc3RGbG93UmV0dXJuIHJlc3VsdCA9IHF1ZXVlLT5zcmNyZXN1bHQ7Ci0gIEdzdE1pbmlPYmplY3QgKmRhdGE7Ci0gIGdib29sZWFuIGlzX2xpc3Q7Ci0KLSAgZGF0YSA9IGdzdF9xdWV1ZV9sb2NrZWRfZGVxdWV1ZSAocXVldWUpOwotICBpZiAoZGF0YSA9PSBOVUxMKQotICAgIGdvdG8gbm9faXRlbTsKLQotbmV4dDoKLSAgaXNfbGlzdCA9IEdTVF9JU19CVUZGRVJfTElTVCAoZGF0YSk7Ci0KLSAgaWYgKEdTVF9JU19CVUZGRVIgKGRhdGEpIHx8IGlzX2xpc3QpIHsKLSAgICBpZiAoIWlzX2xpc3QpIHsKLSAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICBidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QgKGRhdGEpOwotCi0gICAgICBpZiAocXVldWUtPmhlYWRfbmVlZHNfZGlzY29udCkgewotICAgICAgICBHc3RCdWZmZXIgKnN1YmJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmZmVyKTsKLQotICAgICAgICBpZiAoc3ViYnVmZmVyKSB7Ci0gICAgICAgICAgYnVmZmVyID0gc3ViYnVmZmVyOwotICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiQ291bGQgbm90IG1hcmsgYnVmZmVyIGFzIERJU0NPTlQiKTsKLSAgICAgICAgfQotICAgICAgICBxdWV1ZS0+aGVhZF9uZWVkc19kaXNjb250ID0gRkFMU0U7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaCAocXVldWUtPnNyY3BhZCwgYnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAgICAgR3N0QnVmZmVyTGlzdCAqYnVmZmVyX2xpc3Q7Ci0KLSAgICAgIGJ1ZmZlcl9saXN0ID0gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGRhdGEpOwotCi0gICAgICBpZiAocXVldWUtPmhlYWRfbmVlZHNfZGlzY29udCkgewotICAgICAgICBidWZmZXJfbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9tYWtlX3dyaXRhYmxlIChidWZmZXJfbGlzdCk7Ci0gICAgICAgIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChidWZmZXJfbGlzdCwgZGlzY29udF9maXJzdF9idWZmZXIsIHF1ZXVlKTsKLSAgICAgICAgcXVldWUtPmhlYWRfbmVlZHNfZGlzY29udCA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICByZXN1bHQgPSBnc3RfcGFkX3B1c2hfbGlzdCAocXVldWUtPnNyY3BhZCwgYnVmZmVyX2xpc3QpOwotICAgIH0KLQotICAgIC8qIG5lZWQgdG8gY2hlY2sgZm9yIHNyY3Jlc3VsdCBoZXJlIGFzIHdlbGwgKi8KLSAgICBHU1RfUVVFVUVfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIG91dF9mbHVzaGluZyk7Ci0KLSAgICBpZiAocmVzdWx0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJnb3QgRU9TIGZyb20gZG93bnN0cmVhbSIpOwotICAgICAgLyogc3RvcCBwdXNoaW5nIGJ1ZmZlcnMsIHdlIGRlcXVldWUgYWxsIGl0ZW1zIHVudGlsIHdlIHNlZSBhbiBpdGVtIHRoYXQgd2UKLSAgICAgICAqIGNhbiBwdXNoIGFnYWluLCB3aGljaCBpcyBFT1Mgb3IgU0VHTUVOVC4gSWYgdGhlcmUgaXMgbm90aGluZyBpbiB0aGUKLSAgICAgICAqIHF1ZXVlIHdlIGNhbiBwdXNoLCB3ZSBzZXQgYSBmbGFnIHRvIG1ha2UgdGhlIHNpbmtwYWQgcmVmdXNlIG1vcmUKLSAgICAgICAqIGJ1ZmZlcnMgd2l0aCBhbiBFT1MgcmV0dXJuIHZhbHVlLiAqLwotICAgICAgd2hpbGUgKChkYXRhID0gZ3N0X3F1ZXVlX2xvY2tlZF9kZXF1ZXVlIChxdWV1ZSkpKSB7Ci0gICAgICAgIGlmIChHU1RfSVNfQlVGRkVSIChkYXRhKSkgewotICAgICAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAgICAgICAiZHJvcHBpbmcgRU9TIGJ1ZmZlciAlcCIsIGRhdGEpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSkpOwotICAgICAgICB9IGVsc2UgaWYgKEdTVF9JU19CVUZGRVJfTElTVCAoZGF0YSkpIHsKLSAgICAgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKLSAgICAgICAgICAgICAgImRyb3BwaW5nIEVPUyBidWZmZXIgbGlzdCAlcCIsIGRhdGEpOwotICAgICAgICAgIGdzdF9idWZmZXJfbGlzdF91bnJlZiAoR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGRhdGEpKTsKLSAgICAgICAgfSBlbHNlIGlmIChHU1RfSVNfRVZFTlQgKGRhdGEpKSB7Ci0gICAgICAgICAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX0VWRU5UX0NBU1QgKGRhdGEpOwotICAgICAgICAgIEdzdEV2ZW50VHlwZSB0eXBlID0gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KTsKLQotICAgICAgICAgIGlmICh0eXBlID09IEdTVF9FVkVOVF9FT1MgfHwgdHlwZSA9PSBHU1RfRVZFTlRfU0VHTUVOVCkgewotICAgICAgICAgICAgLyogd2UgZm91bmQgYSBwdXNoYWJsZSBpdGVtIGluIHRoZSBxdWV1ZSwgcHVzaCBpdCBvdXQgKi8KLSAgICAgICAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAgICAgICAgICJwdXNoaW5nIHB1c2hhYmxlIGV2ZW50ICVzIGFmdGVyIEVPUyIsCi0gICAgICAgICAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgICAgICAgICAgIGdvdG8gbmV4dDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICAgICAgICJkcm9wcGluZyBFT1MgZXZlbnQgJXAiLCBldmVudCk7Ci0gICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoR1NUX0lTX1FVRVJZIChkYXRhKSkgewotICAgICAgICAgIEdzdFF1ZXJ5ICpxdWVyeSA9IEdTVF9RVUVSWV9DQVNUIChkYXRhKTsKLQotICAgICAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAgICAgICAiZHJvcHBpbmcgcXVlcnkgJXAgYmVjYXVzZSBvZiBFT1MiLCBxdWVyeSk7Ci0gICAgICAgICAgcXVldWUtPmxhc3RfcXVlcnkgPSBGQUxTRTsKLSAgICAgICAgICBnX2NvbmRfc2lnbmFsICgmcXVldWUtPnF1ZXJ5X2hhbmRsZWQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBubyBtb3JlIGl0ZW1zIGluIHRoZSBxdWV1ZS4gU2V0IHRoZSB1bmV4cGVjdGVkIGZsYWcgc28gdGhhdCB1cHN0cmVhbQotICAgICAgICogbWFrZSB1cyByZWZ1c2UgYW55IG1vcmUgYnVmZmVycyBvbiB0aGUgc2lua3BhZC4gU2luY2Ugd2Ugd2lsbCBzdGlsbAotICAgICAgICogYWNjZXB0IEVPUyBhbmQgU0VHTUVOVCB3ZSByZXR1cm4gX0ZMT1dfT0sgdG8gdGhlIGNhbGxlciBzbyB0aGF0IHRoZQotICAgICAgICogdGFzayBmdW5jdGlvbiBkb2VzIG5vdCBzaHV0IGRvd24uICovCi0gICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IFRSVUU7Ci0gICAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChkYXRhKSkgewotICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChkYXRhKTsKLSAgICBHc3RFdmVudFR5cGUgdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7Ci0KLSAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGV2ZW50KTsKLQotICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKLSAgICAvKiBpZiB3ZSdyZSBFT1MsIHJldHVybiBFT1Mgc28gdGhhdCB0aGUgdGFzayBwYXVzZXMuICovCi0gICAgaWYgKHR5cGUgPT0gR1NUX0VWRU5UX0VPUykgewotICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICAgInB1c2hlZCBFT1MgZXZlbnQgJXAsIHJldHVybiBFT1MiLCBldmVudCk7Ci0gICAgICByZXN1bHQgPSBHU1RfRkxPV19FT1M7Ci0gICAgfQotICB9IGVsc2UgaWYgKEdTVF9JU19RVUVSWSAoZGF0YSkpIHsKLSAgICBHc3RRdWVyeSAqcXVlcnkgPSBHU1RfUVVFUllfQ0FTVCAoZGF0YSk7Ci0gICAgZ2Jvb2xlYW4gcmV0OwotCi0gICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgIHJldCA9IGdzdF9wYWRfcGVlcl9xdWVyeSAocXVldWUtPnNyY3BhZCwgcXVlcnkpOwotICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nX3F1ZXJ5KTsKLSAgICBxdWV1ZS0+bGFzdF9xdWVyeSA9IHJldDsKLSAgICBnX2NvbmRfc2lnbmFsICgmcXVldWUtPnF1ZXJ5X2hhbmRsZWQpOwotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAiZGlkIHF1ZXJ5ICVwLCByZXR1cm4gJWQiLCBxdWVyeSwgcXVldWUtPmxhc3RfcXVlcnkpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1ub19pdGVtOgotICB7Ci0gICAgR1NUX0NBVF9FUlJPUl9PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKLSAgICAgICAgImV4aXQgYmVjYXVzZSB3ZSBoYXZlIG5vIGl0ZW0gaW4gdGhlIHF1ZXVlIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1vdXRfZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImV4aXQgYmVjYXVzZSB3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLW91dF9mbHVzaGluZ19xdWVyeToKLSAgewotICAgIHF1ZXVlLT5sYXN0X3F1ZXJ5ID0gRkFMU0U7Ci0gICAgZ19jb25kX3NpZ25hbCAoJnF1ZXVlLT5xdWVyeV9oYW5kbGVkKTsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImV4aXQgYmVjYXVzZSB3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZV9sb29wIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFF1ZXVlICpxdWV1ZTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgcXVldWUgPSAoR3N0UXVldWUgKikgR1NUX1BBRF9QQVJFTlQgKHBhZCk7Ci0KLSAgLyogaGF2ZSB0byBsb2NrIGZvciB0aHJlYWQtc2FmZXR5ICovCi0gIEdTVF9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKLQotICB3aGlsZSAoZ3N0X3F1ZXVlX2lzX2VtcHR5IChxdWV1ZSkpIHsKLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicXVldWUgaXMgZW1wdHkiKTsKLSAgICBpZiAoIXF1ZXVlLT5zaWxlbnQpIHsKLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAgIGdfc2lnbmFsX2VtaXQgKHF1ZXVlLCBnc3RfcXVldWVfc2lnbmFsc1tTSUdOQUxfVU5ERVJSVU5dLCAwKTsKLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKLSAgICB9Ci0KLSAgICAvKiB3ZSByZWNoZWNrLCB0aGUgc2lnbmFsIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgdGhyZXNob2xkcyAqLwotICAgIHdoaWxlIChnc3RfcXVldWVfaXNfZW1wdHkgKHF1ZXVlKSkgewotICAgICAgR1NUX1FVRVVFX1dBSVRfQUREX0NIRUNLIChxdWV1ZSwgb3V0X2ZsdXNoaW5nKTsKLSAgICB9Ci0KLSAgICBHU1RfQ0FUX0RFQlVHX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicXVldWUgaXMgbm90IGVtcHR5Iik7Ci0gICAgaWYgKCFxdWV1ZS0+c2lsZW50KSB7Ci0gICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICBnX3NpZ25hbF9lbWl0IChxdWV1ZSwgZ3N0X3F1ZXVlX3NpZ25hbHNbU0lHTkFMX1JVTk5JTkddLCAwKTsKLSAgICAgIGdfc2lnbmFsX2VtaXQgKHF1ZXVlLCBnc3RfcXVldWVfc2lnbmFsc1tTSUdOQUxfUFVTSElOR10sIDApOwotICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBvdXRfZmx1c2hpbmcpOwotICAgIH0KLSAgfQotCi0gIHJldCA9IGdzdF9xdWV1ZV9wdXNoX29uZSAocXVldWUpOwotICBxdWV1ZS0+c3JjcmVzdWx0ID0gcmV0OwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gb3V0X2ZsdXNoaW5nOwotCi0gIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1vdXRfZmx1c2hpbmc6Ci0gIHsKLSAgICBnYm9vbGVhbiBlb3MgPSBxdWV1ZS0+ZW9zOwotICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gcXVldWUtPnNyY3Jlc3VsdDsKLQotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocXVldWUtPnNyY3BhZCk7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICJwYXVzZSB0YXNrLCByZWFzb246ICAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0ZMVVNISU5HKSB7Ci0gICAgICBnc3RfcXVldWVfbG9ja2VkX2ZsdXNoIChxdWV1ZSwgRkFMU0UpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfUVVFVUVfU0lHTkFMX0RFTCAocXVldWUpOwotICAgICAgcXVldWUtPmxhc3RfcXVlcnkgPSBGQUxTRTsKLSAgICAgIGdfY29uZF9zaWduYWwgKCZxdWV1ZS0+cXVlcnlfaGFuZGxlZCk7Ci0gICAgfQotICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAvKiBsZXQgYXBwIGtub3cgYWJvdXQgdXMgZ2l2aW5nIHVwIGlmIHVwc3RyZWFtIGlzIG5vdCBleHBlY3RlZCB0byBkbyBzbyAqLwotICAgIC8qIEVPUyBpcyBhbHJlYWR5IHRha2VuIGNhcmUgb2YgZWxzZXdoZXJlICovCi0gICAgaWYgKGVvcyAmJiAocmV0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQgfHwgcmV0IDwgR1NUX0ZMT1dfRU9TKSkgewotICAgICAgR1NUX0VMRU1FTlRfRkxPV19FUlJPUiAocXVldWUsIHJldCk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1ZXVlX2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHc3RRdWV1ZSAqcXVldWUgPSBHU1RfUVVFVUUgKHBhcmVudCk7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJnb3QgZXZlbnQgJXAgKCVkKSIsCi0gICAgICBldmVudCwgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSk7Ci0jZW5kaWYKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9SRUNPTkZJR1VSRToKLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICBpZiAocXVldWUtPnNyY3Jlc3VsdCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSB7Ci0gICAgICAgIC8qIHdoZW4gd2UgZ290IG5vdCBsaW5rZWQsIGFzc3VtZSBkb3duc3RyZWFtIGlzIGxpbmtlZCBhZ2FpbiBub3cgYW5kIHdlCi0gICAgICAgICAqIGNhbiB0cnkgdG8gc3RhcnQgcHVzaGluZyBhZ2FpbiAqLwotICAgICAgICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayAocGFkLCAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfcXVldWVfbG9vcCwgcGFkLCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChxdWV1ZS0+c2lua3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9xdWV1ZV9oYW5kbGVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0UXVldWUgKnF1ZXVlID0gR1NUX1FVRVVFIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzp7Ci0gICAgICBnc3RfcXVlcnlfYWRkX3NjaGVkdWxpbmdfbW9kZSAocXVlcnksIEdTVF9QQURfTU9ERV9QVVNIKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKCFyZXMpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIEFkanVzdCBwZWVyIHJlc3BvbnNlIGZvciBkYXRhIGNvbnRhaW5lZCBpbiBxdWV1ZSAqLwotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICB7Ci0gICAgICBnaW50NjQgcGVlcl9wb3M7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICAvKiBnZXQgcGVlciBwb3NpdGlvbiAqLwotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChxdWVyeSwgJmZvcm1hdCwgJnBlZXJfcG9zKTsKLQotICAgICAgLyogRklYTUU6IHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlcmUncyBubyBkaXNjb250IGluIHRoZSBxdWV1ZSAqLwotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIHBlZXJfcG9zIC09IHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXM7Ci0gICAgICAgICAgaWYgKHBlZXJfcG9zIDwgMCkgICAgIC8qIENsYW1wIHJlc3VsdCB0byAwICovCi0gICAgICAgICAgICBwZWVyX3BvcyA9IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgICAgIHBlZXJfcG9zIC09IHF1ZXVlLT5jdXJfbGV2ZWwudGltZTsKLSAgICAgICAgICBpZiAocGVlcl9wb3MgPCAwKSAgICAgLyogQ2xhbXAgcmVzdWx0IHRvIDAgKi8KLSAgICAgICAgICAgIHBlZXJfcG9zID0gMDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIkNhbid0IGFkanVzdCBxdWVyeSBpbiAlcyBmb3JtYXQsIGRvbid0ICIKLSAgICAgICAgICAgICAgImtub3cgaG93IHRvIGFkanVzdCB2YWx1ZSIsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCkpOwotICAgICAgICAgIHJldHVybiBUUlVFOwotICAgICAgfQotICAgICAgLyogc2V0IHVwZGF0ZWQgcG9zaXRpb24gKi8KLSAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIHBlZXJfcG9zKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIGdib29sZWFuIGxpdmU7Ci0gICAgICBHc3RDbG9ja1RpbWUgbWluLCBtYXg7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5IChxdWVyeSwgJmxpdmUsICZtaW4sICZtYXgpOwotCi0gICAgICAvKiB3ZSBjYW4gZGVsYXkgdXAgdG8gdGhlIGxpbWl0IG9mIHRoZSBxdWV1ZSBpbiB0aW1lLiBJZiB3ZSBoYXZlIG5vIHRpbWUKLSAgICAgICAqIGxpbWl0LCB0aGUgYmVzdCB0aGluZyB3ZSBjYW4gZG8gaXMgdG8gcmV0dXJuIGFuIGluZmluaXRlIGRlbGF5LiBJbgotICAgICAgICogcmVhbGl0eSBhIGJldHRlciBlc3RpbWF0ZSB3b3VsZCBiZSB0aGUgYnl0ZS9idWZmZXIgcmF0ZSBidXQgdGhhdCBpcyBub3QKLSAgICAgICAqIHBvc3NpYmxlIHJpZ2h0IG5vdy4gKi8KLSAgICAgIC8qIFRPRE86IFVzZSBDT05WRVJUIHF1ZXJ5PyAqLwotICAgICAgaWYgKHF1ZXVlLT5tYXhfc2l6ZS50aW1lID4gMCAmJiBtYXggIT0gLTEKLSAgICAgICAgICAmJiBxdWV1ZS0+bGVha3kgPT0gR1NUX1FVRVVFX05PX0xFQUspCi0gICAgICAgIG1heCArPSBxdWV1ZS0+bWF4X3NpemUudGltZTsKLSAgICAgIGVsc2UgaWYgKHF1ZXVlLT5tYXhfc2l6ZS50aW1lID4gMCAmJiBxdWV1ZS0+bGVha3kgIT0gR1NUX1FVRVVFX05PX0xFQUspCi0gICAgICAgIG1heCA9IE1JTiAocXVldWUtPm1heF9zaXplLnRpbWUsIG1heCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG1heCA9IC0xOwotCi0gICAgICAvKiBhZGp1c3QgZm9yIG1pbi10aHJlc2hvbGQgKi8KLSAgICAgIGlmIChxdWV1ZS0+bWluX3RocmVzaG9sZC50aW1lID4gMCkKLSAgICAgICAgbWluICs9IHF1ZXVlLT5taW5fdGhyZXNob2xkLnRpbWU7Ci0KLSAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGxpdmUsIG1pbiwgbWF4KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgLyogcGVlciBoYW5kbGVkIG90aGVyIHF1ZXJpZXMgKi8KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1ZXVlX3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFBhZE1vZGUgbW9kZSwKLSAgICBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJlc3VsdDsKLSAgR3N0UXVldWUgKnF1ZXVlOwotCi0gIHF1ZXVlID0gR1NUX1FVRVVFIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgcXVldWUtPmVvcyA9IEZBTFNFOwotICAgICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBzdGVwIDEsIHVuYmxvY2sgY2hhaW4gZnVuY3Rpb24gKi8KLSAgICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgICAvKiB0aGUgaXRlbSBkZWwgc2lnbmFsIHdpbGwgdW5ibG9jayAqLwotICAgICAgICBHU1RfUVVFVUVfU0lHTkFMX0RFTCAocXVldWUpOwotICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgICAgICAgLyogc3RlcCAyLCB3YWl0IHVudGlsIHN0cmVhbWluZyB0aHJlYWQgc3RvcHBlZCBhbmQgZmx1c2ggcXVldWUgKi8KLSAgICAgICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKLSAgICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICAgICAgZ3N0X3F1ZXVlX2xvY2tlZF9mbHVzaCAocXVldWUsIFRSVUUpOwotICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICAgIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAocGFkKTsKLSAgICAgIH0KLSAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9xdWV1ZV9zcmNfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFBhZE1vZGUgbW9kZSwKLSAgICBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJlc3VsdDsKLSAgR3N0UXVldWUgKnF1ZXVlOwotCi0gIHF1ZXVlID0gR1NUX1FVRVVFIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgcXVldWUtPmVvcyA9IEZBTFNFOwotICAgICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgICByZXN1bHQgPQotICAgICAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrIChwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdWV1ZV9sb29wLCBwYWQsCi0gICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogc3RlcCAxLCB1bmJsb2NrIGxvb3AgZnVuY3Rpb24gKi8KLSAgICAgICAgR1NUX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgICAvKiB0aGUgaXRlbSBhZGQgc2lnbmFsIHdpbGwgdW5ibG9jayAqLwotICAgICAgICBnX2NvbmRfc2lnbmFsICgmcXVldWUtPml0ZW1fYWRkKTsKLSAgICAgICAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gICAgICAgIC8qIHN0ZXAgMiwgbWFrZSBzdXJlIHN0cmVhbWluZyBmaW5pc2hlcyAqLwotICAgICAgICByZXN1bHQgPSBnc3RfcGFkX3N0b3BfdGFzayAocGFkKTsKLQotICAgICAgICBHU1RfUVVFVUVfTVVURVhfTE9DSyAocXVldWUpOwotICAgICAgICBnc3RfcXVldWVfbG9ja2VkX2ZsdXNoIChxdWV1ZSwgRkFMU0UpOwotICAgICAgICBHU1RfUVVFVUVfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotcXVldWVfY2FwYWNpdHlfY2hhbmdlIChHc3RRdWV1ZSAqIHF1ZXVlKQotewotICBpZiAocXVldWUtPmxlYWt5ID09IEdTVF9RVUVVRV9MRUFLX0RPV05TVFJFQU0pIHsKLSAgICBnc3RfcXVldWVfbGVha19kb3duc3RyZWFtIChxdWV1ZSk7Ci0gIH0KLQotICAvKiBjaGFuZ2luZyB0aGUgY2FwYWNpdHkgb2YgdGhlIHF1ZXVlIG11c3Qgd2FrZSB1cAotICAgKiB0aGUgX2NoYWluIGZ1bmN0aW9uLCBpdCBtaWdodCBoYXZlIG1vcmUgcm9vbSBub3cKLSAgICogdG8gc3RvcmUgdGhlIGJ1ZmZlci9ldmVudCBpbiB0aGUgcXVldWUgKi8KLSAgR1NUX1FVRVVFX1NJR05BTF9ERUwgKHF1ZXVlKTsKLX0KLQotLyogQ2hhbmdpbmcgdGhlIG1pbmltdW0gcmVxdWlyZWQgZmlsbCBsZXZlbCBtdXN0Ci0gKiB3YWtlIHVwIHRoZSBfbG9vcCBmdW5jdGlvbiBhcyBpdCBtaWdodCBub3cKLSAqIGJlIGFibGUgdG8gcHJlY2VlZC4KLSAqLwotI2RlZmluZSBRVUVVRV9USFJFU0hPTERfQ0hBTkdFKHEpXAotICBHU1RfUVVFVUVfU0lHTkFMX0FERCAocSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVldWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFF1ZXVlICpxdWV1ZSA9IEdTVF9RVUVVRSAob2JqZWN0KTsKLQotICAvKiBzb21lb25lIGNvdWxkIGNoYW5nZSBsZXZlbHMgaGVyZSwgYW5kIHNpbmNlIHRoaXMKLSAgICogYWZmZWN0cyB0aGUgZ2V0L3B1dCBmdW5jcywgd2UgbmVlZCB0byBsb2NrIGZvciBzYWZldHkuICovCi0gIEdTVF9RVUVVRV9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01BWF9TSVpFX0JZVEVTOgotICAgICAgcXVldWUtPm1heF9zaXplLmJ5dGVzID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgcXVldWVfY2FwYWNpdHlfY2hhbmdlIChxdWV1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfQlVGRkVSUzoKLSAgICAgIHF1ZXVlLT5tYXhfc2l6ZS5idWZmZXJzID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgcXVldWVfY2FwYWNpdHlfY2hhbmdlIChxdWV1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfVElNRToKLSAgICAgIHF1ZXVlLT5tYXhfc2l6ZS50aW1lID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0gICAgICBxdWV1ZV9jYXBhY2l0eV9jaGFuZ2UgKHF1ZXVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NSU5fVEhSRVNIT0xEX0JZVEVTOgotICAgICAgcXVldWUtPm1pbl90aHJlc2hvbGQuYnl0ZXMgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBxdWV1ZS0+b3JpZ19taW5fdGhyZXNob2xkLmJ5dGVzID0gcXVldWUtPm1pbl90aHJlc2hvbGQuYnl0ZXM7Ci0gICAgICBRVUVVRV9USFJFU0hPTERfQ0hBTkdFIChxdWV1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUlOX1RIUkVTSE9MRF9CVUZGRVJTOgotICAgICAgcXVldWUtPm1pbl90aHJlc2hvbGQuYnVmZmVycyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIHF1ZXVlLT5vcmlnX21pbl90aHJlc2hvbGQuYnVmZmVycyA9IHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ1ZmZlcnM7Ci0gICAgICBRVUVVRV9USFJFU0hPTERfQ0hBTkdFIChxdWV1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUlOX1RIUkVTSE9MRF9USU1FOgotICAgICAgcXVldWUtPm1pbl90aHJlc2hvbGQudGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgcXVldWUtPm9yaWdfbWluX3RocmVzaG9sZC50aW1lID0gcXVldWUtPm1pbl90aHJlc2hvbGQudGltZTsKLSAgICAgIFFVRVVFX1RIUkVTSE9MRF9DSEFOR0UgKHF1ZXVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MRUFLWToKLSAgICAgIHF1ZXVlLT5sZWFreSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUxFTlQ6Ci0gICAgICBxdWV1ZS0+c2lsZW50ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZMVVNIX09OX0VPUzoKLSAgICAgIHF1ZXVlLT5mbHVzaF9vbl9lb3MgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgR1NUX1FVRVVFX01VVEVYX1VOTE9DSyAocXVldWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F1ZXVlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RRdWV1ZSAqcXVldWUgPSBHU1RfUVVFVUUgKG9iamVjdCk7Ci0KLSAgR1NUX1FVRVVFX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ1VSX0xFVkVMX0JZVEVTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NVUl9MRVZFTF9CVUZGRVJTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1VSX0xFVkVMX1RJTUU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBxdWV1ZS0+Y3VyX2xldmVsLnRpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9TSVpFX0JZVEVTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHF1ZXVlLT5tYXhfc2l6ZS5ieXRlcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfQlVGRkVSUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBxdWV1ZS0+bWF4X3NpemUuYnVmZmVycyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHF1ZXVlLT5tYXhfc2l6ZS50aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NSU5fVEhSRVNIT0xEX0JZVEVTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHF1ZXVlLT5taW5fdGhyZXNob2xkLmJ5dGVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NSU5fVEhSRVNIT0xEX0JVRkZFUlM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXVldWUtPm1pbl90aHJlc2hvbGQuYnVmZmVycyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUlOX1RIUkVTSE9MRF9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgcXVldWUtPm1pbl90aHJlc2hvbGQudGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTEVBS1k6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgcXVldWUtPmxlYWt5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUxFTlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcXVldWUtPnNpbGVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRkxVU0hfT05fRU9TOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHF1ZXVlLT5mbHVzaF9vbl9lb3MpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9RVUVVRV9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM3NDkxYy4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdHF1ZXVlLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1FVRVVFX0hfXwotI2RlZmluZSBfX0dTVF9RVUVVRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RxdWV1ZWFycmF5Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9RVUVVRSBcCi0gIChnc3RfcXVldWVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1FVRVVFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUVVFVUUsR3N0UXVldWUpKQotI2RlZmluZSBHU1RfUVVFVUVfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUVVFVUUsR3N0UXVldWVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19RVUVVRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1FVRVVFKSkKLSNkZWZpbmUgR1NUX0lTX1FVRVVFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1FVRVVFKSkKLSNkZWZpbmUgR1NUX1FVRVVFX0NBU1Qob2JqKSBcCi0gICgoR3N0UXVldWUgKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFF1ZXVlIEdzdFF1ZXVlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFF1ZXVlU2l6ZSBHc3RRdWV1ZVNpemU7Ci10eXBlZGVmIGVudW0gX0dzdFF1ZXVlTGVha3kgR3N0UXVldWVMZWFreTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RRdWV1ZUNsYXNzIEdzdFF1ZXVlQ2xhc3M7Ci0KLS8qKgotICogR3N0UXVldWVMZWFreToKLSAqIEBHU1RfUVVFVUVfTk9fTEVBSzogTm90IExlYWt5Ci0gKiBAR1NUX1FVRVVFX0xFQUtfVVBTVFJFQU06IExlYWt5IG9uIHVwc3RyZWFtIChuZXcgYnVmZmVycykKLSAqIEBHU1RfUVVFVUVfTEVBS19ET1dOU1RSRUFNOiBMZWFreSBvbiBkb3duc3RyZWFtIChvbGQgYnVmZmVycykKLSAqCi0gKiBCdWZmZXIgZHJvcHBpbmcgc2NoZW1lIHRvIGF2b2lkIHRoZSBxdWV1ZSB0byBibG9jayB3aGVuIGZ1bGwuCi0gKi8KLWVudW0gX0dzdFF1ZXVlTGVha3kgewotICBHU1RfUVVFVUVfTk9fTEVBSyAgICAgICAgICAgICA9IDAsCi0gIEdTVF9RVUVVRV9MRUFLX1VQU1RSRUFNICAgICAgID0gMSwKLSAgR1NUX1FVRVVFX0xFQUtfRE9XTlNUUkVBTSAgICAgPSAyCi19OwotCi0vKgotICogR3N0UXVldWVTaXplOgotICogQGJ1ZmZlcnM6IG51bWJlciBvZiBidWZmZXJzCi0gKiBAYnl0ZXM6IG51bWJlciBvZiBieXRlcwotICogQHRpbWU6IGFtb3VudCBvZiB0aW1lCi0gKgotICogU3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIHNpemUgb2YgYSBxdWV1ZS4KLSAqLwotc3RydWN0IF9Hc3RRdWV1ZVNpemUgewotICAgIGd1aW50ICAgYnVmZmVyczsKLSAgICBndWludCAgIGJ5dGVzOwotICAgIGd1aW50NjQgdGltZTsKLX07Ci0KLSNkZWZpbmUgR1NUX1FVRVVFX0NMRUFSX0xFVkVMKGwpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgXAotICBsLmJ1ZmZlcnMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGwuYnl0ZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbC50aW1lID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLS8qKgotICogR3N0UXVldWU6Ci0gKgotICogT3BhcXVlICNHc3RRdWV1ZSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0UXVldWUgewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0KLSAgLyogc2VnbWVudHMgdG8ga2VlcCB0cmFjayBvZiB0aW1lc3RhbXBzICovCi0gIEdzdFNlZ21lbnQgc2lua19zZWdtZW50OwotICBHc3RTZWdtZW50IHNyY19zZWdtZW50OwotCi0gIC8qIHBvc2l0aW9uIG9mIHNyYy9zaW5rICovCi0gIEdzdENsb2NrVGltZURpZmYgc2lua3RpbWUsIHNyY3RpbWU7Ci0gIC8qIFRSVUUgaWYgZWl0aGVyIHBvc2l0aW9uIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZCAqLwotICBnYm9vbGVhbiBzaW5rX3RhaW50ZWQsIHNyY190YWludGVkOwotCi0gIC8qIGZsb3dyZXR1cm4gd2hlbiBzcmNwYWQgaXMgcGF1c2VkICovCi0gIEdzdEZsb3dSZXR1cm4gc3JjcmVzdWx0OwotICBnYm9vbGVhbiAgICAgIHVuZXhwZWN0ZWQ7Ci0gIGdib29sZWFuICAgICAgZW9zOwotCi0gIC8qIHRoZSBxdWV1ZSBvZiBkYXRhIHdlJ3JlIGtlZXBpbmcgb3VyIGdydWJieSBoYW5kcyBvbiAqLwotICBHc3RRdWV1ZUFycmF5ICpxdWV1ZTsKLQotICBHc3RRdWV1ZVNpemUKLSAgICBjdXJfbGV2ZWwsICAgICAgICAgIC8qIGN1cnJlbnRseSBpbiB0aGUgcXVldWUgKi8KLSAgICBtYXhfc2l6ZSwgICAgICAgICAgIC8qIG1heC4gYW1vdW50IG9mIGRhdGEgYWxsb3dlZCBpbiB0aGUgcXVldWUgKi8KLSAgICBtaW5fdGhyZXNob2xkLCAgICAgIC8qIG1pbi4gYW1vdW50IG9mIGRhdGEgcmVxdWlyZWQgdG8gd2FrZSByZWFkZXIgKi8KLSAgICBvcmlnX21pbl90aHJlc2hvbGQ7IC8qIE9yaWdpbmFsIG1pbi50aHJlc2hvbGQsIGZvciByZXNldCBpbiBFT1MgKi8KLQotICAvKiB3aGV0aGVyIHdlIGxlYWsgZGF0YSwgYW5kIGF0IHdoaWNoIGVuZCAqLwotICBnaW50IGxlYWt5OwotCi0gIEdNdXRleCBxbG9jazsgICAgICAgIC8qIGxvY2sgZm9yIHF1ZXVlICh2cyBvYmplY3QgbG9jaykgKi8KLSAgZ2Jvb2xlYW4gd2FpdGluZ19hZGQ7Ci0gIEdDb25kIGl0ZW1fYWRkOyAgICAgIC8qIHNpZ25hbHMgYnVmZmVycyBub3cgYXZhaWxhYmxlIGZvciByZWFkaW5nICovCi0gIGdib29sZWFuIHdhaXRpbmdfZGVsOwotICBHQ29uZCBpdGVtX2RlbDsgICAgICAvKiBzaWduYWxzIHNwYWNlIG5vdyBhdmFpbGFibGUgZm9yIHdyaXRpbmcgKi8KLQotICBnYm9vbGVhbiBoZWFkX25lZWRzX2Rpc2NvbnQsIHRhaWxfbmVlZHNfZGlzY29udDsKLSAgZ2Jvb2xlYW4gcHVzaF9uZXdzZWdtZW50OwotCi0gIGdib29sZWFuIHNpbGVudDsgICAgICAvKiBkb24ndCBlbWl0IHNpZ25hbHMgKi8KLQotICAvKiB3aGV0aGVyIHRoZSBmaXJzdCBuZXcgc2VnbWVudCBoYXMgYmVlbiBhcHBsaWVkIHRvIHNyYyAqLwotICBnYm9vbGVhbiBuZXdzZWdfYXBwbGllZF90b19zcmM7Ci0KLSAgR0NvbmQgcXVlcnlfaGFuZGxlZDsKLSAgZ2Jvb2xlYW4gbGFzdF9xdWVyeTsKLQotICBnYm9vbGVhbiBmbHVzaF9vbl9lb3M7IC8qIGZsdXNoIG9uIEVPUyAqLwotfTsKLQotc3RydWN0IF9Hc3RRdWV1ZUNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWxzIC0gJ3J1bm5pbmcnIGlzIGNhbGxlZCBmcm9tIGJvdGggc2lkZXMKLSAgICogd2hpY2ggbWlnaHQgbWFrZSBpdCBzb3J0IG9mIG5vbi11c2VmdWwuLi4gKi8KLSAgdm9pZCAoKnVuZGVycnVuKSAgICAgIChHc3RRdWV1ZSAqcXVldWUpOwotICB2b2lkICgqcnVubmluZykgICAgICAgKEdzdFF1ZXVlICpxdWV1ZSk7Ci0gIHZvaWQgKCpvdmVycnVuKSAgICAgICAoR3N0UXVldWUgKnF1ZXVlKTsKLQotICB2b2lkICgqcHVzaGluZykgICAgICAgKEdzdFF1ZXVlICpxdWV1ZSk7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X3F1ZXVlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotCi0jZW5kaWYgLyogX19HU1RfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM2NzBhMC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg3NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMyBDb2xpbiBXYWx0ZXJzIDxjd2FsdGVyc0Bnbm9tZS5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCwyMDA1LDIwMDcgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA3IFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzQGxjYy51ZmNnLmVkdS5icj4KLSAqICAgICAgICAgICAgICAgICBTQSAyMDEwIFNULUVyaWNzc29uIDxiZW5qYW1pbi5nYWlnbmFyZEBzdGVyaWNzc29uLmNvbT4KLSAqCi0gKiBnc3RxdWV1ZTIuYzoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1xdWV1ZTIKLSAqCi0gKiBEYXRhIGlzIHF1ZXVlZCB1bnRpbCBvbmUgb2YgdGhlIGxpbWl0cyBzcGVjaWZpZWQgYnkgdGhlCi0gKiAjR3N0UXVldWUyOm1heC1zaXplLWJ1ZmZlcnMsICNHc3RRdWV1ZTI6bWF4LXNpemUtYnl0ZXMgYW5kL29yCi0gKiAjR3N0UXVldWUyOm1heC1zaXplLXRpbWUgcHJvcGVydGllcyBoYXMgYmVlbiByZWFjaGVkLiBBbnkgYXR0ZW1wdCB0byBwdXNoCi0gKiBtb3JlIGJ1ZmZlcnMgaW50byB0aGUgcXVldWUgd2lsbCBibG9jayB0aGUgcHVzaGluZyB0aHJlYWQgdW50aWwgbW9yZSBzcGFjZQotICogYmVjb21lcyBhdmFpbGFibGUuCi0gKgotICogVGhlIHF1ZXVlIHdpbGwgY3JlYXRlIGEgbmV3IHRocmVhZCBvbiB0aGUgc291cmNlIHBhZCB0byBkZWNvdXBsZSB0aGUKLSAqIHByb2Nlc3Npbmcgb24gc2luayBhbmQgc291cmNlIHBhZC4KLSAqCi0gKiBZb3UgY2FuIHF1ZXJ5IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIHF1ZXVlZCBieSByZWFkaW5nIHRoZQotICogI0dzdFF1ZXVlMjpjdXJyZW50LWxldmVsLWJ1ZmZlcnMgcHJvcGVydHkuCi0gKgotICogVGhlIGRlZmF1bHQgcXVldWUgc2l6ZSBsaW1pdHMgYXJlIDEwMCBidWZmZXJzLCAyTUIgb2YgZGF0YSwgb3IKLSAqIHR3byBzZWNvbmRzIHdvcnRoIG9mIGRhdGEsIHdoaWNoZXZlciBpcyByZWFjaGVkIGZpcnN0LgotICoKLSAqIElmIHlvdSBzZXQgdGVtcC10ZW1wbGF0ZSB0byBhIHZhbHVlIHN1Y2ggYXMgL3RtcC9nc3RyZWFtZXItWFhYWFhYLCB0aGUgZWxlbWVudAotICogd2lsbCBhbGxvY2F0ZSBhIHJhbmRvbSBmcmVlIGZpbGVuYW1lIGFuZCBidWZmZXIgZGF0YSBpbiB0aGUgZmlsZS4KLSAqIEJ5IHVzaW5nIHRoaXMsIGl0IHdpbGwgYnVmZmVyIHRoZSBlbnRpcmUgc3RyZWFtIGRhdGEgb24gdGhlIGZpbGUgaW5kZXBlbmRlbnRseQotICogb2YgdGhlIHF1ZXVlIHNpemUgbGltaXRzLCB0aGV5IHdpbGwgb25seSBiZSB1c2VkIGZvciBidWZmZXJpbmcgc3RhdGlzdGljcy4KLSAqCi0gKiBUaGUgdGVtcC1sb2NhdGlvbiBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQgdG8gbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUKLSAqIGFsbG9jYXRlZCBmaWxlbmFtZS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RxdWV1ZTIuaCIKLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3QvZ3N0LWkxOG4tbGliLmgiCi0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKLSN1bmRlZiBvZmZfdAotI2RlZmluZSBvZmZfdCBndWludDY0Ci0jZWxzZQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLSNpZmRlZiBfX0JJT05JQ19fICAgICAgICAgICAgICAgLyogQW5kcm9pZCAqLwotI3VuZGVmIGxzZWVrCi0jZGVmaW5lIGxzZWVrIGxzZWVrNjQKLSN1bmRlZiBvZmZfdAotI2RlZmluZSBvZmZfdCBndWludDY0Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocXVldWVfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHF1ZXVlX2RlYnVnKQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocXVldWVfZGF0YWZsb3cpOwotCi1lbnVtCi17Ci0gIExBU1RfU0lHTkFMCi19OwotCi0vKiBvdGhlciBkZWZpbmVzICovCi0jZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUgNDA5NgotI2RlZmluZSBRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUocXVldWUpICgocXVldWUpLT50ZW1wX3RlbXBsYXRlICE9IE5VTEwpCi0jZGVmaW5lIFFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSKHF1ZXVlKSAoKHF1ZXVlKS0+cmluZ19idWZmZXJfbWF4X3NpemUgIT0gMCkgIC8qIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBhYm92ZSBtYWNybyAqLwotI2RlZmluZSBRVUVVRV9JU19VU0lOR19RVUVVRShxdWV1ZSkgKCFRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUocXVldWUpICYmICFRVUVVRV9JU19VU0lOR19SSU5HX0JVRkZFUiAocXVldWUpKQotCi0jZGVmaW5lIFFVRVVFX01BWF9CWVRFUyhxdWV1ZSkgTUlOKChxdWV1ZSktPm1heF9sZXZlbC5ieXRlcywgKHF1ZXVlKS0+cmluZ19idWZmZXJfbWF4X3NpemUpCi0KLS8qIGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzICovCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfQlVGRkVSUyAgIDEwMCAgLyogMTAwIGJ1ZmZlcnMgKi8KLSNkZWZpbmUgREVGQVVMVF9NQVhfU0laRV9CWVRFUyAgICAgKDIgKiAxMDI0ICogMTAyNCkgICAgLyogMiBNQiAqLwotI2RlZmluZSBERUZBVUxUX01BWF9TSVpFX1RJTUUgICAgICAyICogR1NUX1NFQ09ORCAgICAgICAvKiAyIHNlY29uZHMgKi8KLSNkZWZpbmUgREVGQVVMVF9VU0VfQlVGRkVSSU5HICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9VU0VfVEFHU19CSVRSQVRFICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9VU0VfUkFURV9FU1RJTUFURSAgVFJVRQotI2RlZmluZSBERUZBVUxUX0xPV19QRVJDRU5UICAgICAgICAxMAotI2RlZmluZSBERUZBVUxUX0hJR0hfUEVSQ0VOVCAgICAgICA5OQotI2RlZmluZSBERUZBVUxUX0xPV19XQVRFUk1BUksgICAgICAwLjAxCi0jZGVmaW5lIERFRkFVTFRfSElHSF9XQVRFUk1BUksgICAgIDAuOTkKLSNkZWZpbmUgREVGQVVMVF9URU1QX1JFTU9WRSAgICAgICAgVFJVRQotI2RlZmluZSBERUZBVUxUX1JJTkdfQlVGRkVSX01BWF9TSVpFIDAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ1VSX0xFVkVMX0JVRkZFUlMsCi0gIFBST1BfQ1VSX0xFVkVMX0JZVEVTLAotICBQUk9QX0NVUl9MRVZFTF9USU1FLAotICBQUk9QX01BWF9TSVpFX0JVRkZFUlMsCi0gIFBST1BfTUFYX1NJWkVfQllURVMsCi0gIFBST1BfTUFYX1NJWkVfVElNRSwKLSAgUFJPUF9VU0VfQlVGRkVSSU5HLAotICBQUk9QX1VTRV9UQUdTX0JJVFJBVEUsCi0gIFBST1BfVVNFX1JBVEVfRVNUSU1BVEUsCi0gIFBST1BfTE9XX1BFUkNFTlQsCi0gIFBST1BfSElHSF9QRVJDRU5ULAotICBQUk9QX0xPV19XQVRFUk1BUkssCi0gIFBST1BfSElHSF9XQVRFUk1BUkssCi0gIFBST1BfVEVNUF9URU1QTEFURSwKLSAgUFJPUF9URU1QX0xPQ0FUSU9OLAotICBQUk9QX1RFTVBfUkVNT1ZFLAotICBQUk9QX1JJTkdfQlVGRkVSX01BWF9TSVpFLAotICBQUk9QX0FWR19JTl9SQVRFLAotICBQUk9QX0xBU1QKLX07Ci0KLS8qIEV4cGxhbmF0aW9uIGZvciBidWZmZXIgbGV2ZWxzIGFuZCBwZXJjZW50YWdlczoKLSAqCi0gKiBUaGUgYnVmZmVyaW5nX2xldmVsIGZ1bmN0aW9ucyBoZXJlIHJldHVybiBhIHZhbHVlIGluIGEgbm9ybWFsaXplZCByYW5nZQotICogdGhhdCBzcGVjaWZpZXMgdGhlIHF1ZXVlJ3MgY3VycmVudCBmaWxsIGxldmVsLiBUaGUgcmFuZ2UgZ29lcyBmcm9tIDAgdG8KLSAqIE1BWF9CVUZGRVJJTkdfTEVWRUwuIFRoZSBsb3cvaGlnaCB3YXRlcm1hcmtzIGFsc28gdXNlIHRoaXMgc2FtZSByYW5nZS4KLSAqCi0gKiBUaGlzIGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBidWZmZXJpbmdfcGVyY2VudCB2YWx1ZSwgd2hpY2ggaXMKLSAqIGEgKnJlbGF0aXZlKiBxdWFudGl0eSAtIHJlbGF0aXZlIHRvIHRoZSBsb3cvaGlnaCB3YXRlcm1hcmtzLgotICogYnVmZmVyaW5nX3BlcmNlbnQgPSAwJSBtZWFucyBidWZmZXJpbmdfbGV2ZWwgaXMgYXQgdGhlIGxvdyB3YXRlcm1hcmsuCi0gKiBidWZmZXJpbmdfcGVyY2VudCA9IDEwMCUgbWVhbnMgYnVmZmVyaW5nX2xldmVsIGlzIGF0IHRoZSBoaWdoIHdhdGVybWFyay4KLSAqIGJ1ZmZlcmluZ19wZXJjZW50IGlzIHVzZWQgZm9yIGRldGVybWluaW5nIGlmIHRoZSBmaWxsIGxldmVsIGhhcyByZWFjaGVkCi0gKiB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCBmb3IgcHJvZHVjaW5nIEJVRkZFUklORyBtZXNzYWdlcy4gVGhpcyB2YWx1ZQotICogYWx3YXlzIHVzZXMgYSAwLi4xMDAgcmFuZ2UgKHNpbmNlIGl0IGlzIGEgcGVyY2VudGFnZSkuCi0gKgotICogVG8gYXZvaWQgZnV0dXJlIGNvbmZ1c2lvbnMsIHdoZW5ldmVyICJidWZmZXJpbmcgbGV2ZWwiIGlzIG1lbnRpb25lZCwgaXQKLSAqIHJlZmVycyB0byB0aGUgYWJzb2x1dGUgbGV2ZWwgd2hpY2ggaXMgaW4gdGhlIDAuLk1BWF9CVUZGRVJJTkdfTEVWRUwKLSAqIHJhbmdlLiBXaGVuZXZlciAiYnVmZmVyaW5nX3BlcmNlbnQiIGlzIG1lbnRpb25lZCwgaXQgcmVmZXJzIHRvIHRoZQotICogcGVyY2VudGFnZSB2YWx1ZSB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBsb3cvaGlnaCB3YXRlcm1hcmsuICovCi0KLS8qIFVzaW5nIGEgYnVmZmVyaW5nIGxldmVsIHJhbmdlIG9mIDAuLjEwMDAwMDAgdG8gYWxsb3cgZm9yIGEKLSAqIHJlc29sdXRpb24gaW4gcHBtICgxIHBwbSA9IDAuMDAwMSUpICovCi0jZGVmaW5lIE1BWF9CVUZGRVJJTkdfTEVWRUwgMTAwMDAwMAotCi0vKiBIb3cgbXVjaCAxJSBtYWtlcyB1cCBpbiB0aGUgYnVmZmVyIGxldmVsIHJhbmdlICovCi0jZGVmaW5lIEJVRl9MRVZFTF9QRVJDRU5UX0ZBQ1RPUiAoKE1BWF9CVUZGRVJJTkdfTEVWRUwpIC8gMTAwKQotCi0jZGVmaW5lIEdTVF9RVUVVRTJfQ0xFQVJfTEVWRUwobCkgR19TVE1UX1NUQVJUIHsgICAgICAgICBcCi0gIGwuYnVmZmVycyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbC5ieXRlcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsLnRpbWUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGwucmF0ZV90aW1lID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIFNUQVRVUyhxdWV1ZSwgcGFkLCBtc2cpIFwKLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAiKCVzOiVzKSAiIG1zZyAiOiAldSBvZiAldSBidWZmZXJzLCAldSBvZiAldSAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMsICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBvZiAlIiBHX0dVSU5UNjRfRk9STUFUIFwKLSAgICAgICAgICAgICAgICAgICAgICAiIG5zLCAlIkdfR1VJTlQ2NF9GT1JNQVQiIGl0ZW1zIiwgXAotICAgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSwgXAotICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycywgXAotICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5tYXhfbGV2ZWwuYnVmZmVycywgXAotICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMsIFwKLSAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS0+bWF4X2xldmVsLmJ5dGVzLCBcCi0gICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cl9sZXZlbC50aW1lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgcXVldWUtPm1heF9sZXZlbC50aW1lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgKGd1aW50NjQpICghUVVFVUVfSVNfVVNJTkdfUVVFVUUocXVldWUpID8gXAotICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zIC0gcXVldWUtPmN1cnJlbnQtPm1heF9yZWFkaW5nX3BvcyA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLT5xdWV1ZS5sZW5ndGgpKQotCi0jZGVmaW5lIEdTVF9RVUVVRTJfTVVURVhfTE9DSyhxKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX211dGV4X2xvY2sgKCZxLT5xbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIEdTVF9RVUVVRTJfTVVURVhfTE9DS19DSEVDSyhxLHJlcyxsYWJlbCkgR19TVE1UX1NUQVJUIHsgICAgICAgICBcCi0gIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChyZXMgIT0gR1NUX0ZMT1dfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyhxKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19tdXRleF91bmxvY2sgKCZxLT5xbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfUVVFVUUyX1dBSVRfREVMX0NIRUNLKHEsIHJlcywgbGFiZWwpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgXAotICBTVEFUVVMgKHF1ZXVlLCBxLT5zaW5rcGFkLCAid2FpdCBmb3IgREVMIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBxLT53YWl0aW5nX2RlbCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX2NvbmRfd2FpdCAoJnEtPml0ZW1fZGVsLCAmcXVldWUtPnFsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHEtPndhaXRpbmdfZGVsID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChyZXMgIT0gR1NUX0ZMT1dfT0spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgU1RBVFVTIChxdWV1ZSwgcS0+c3JjcGFkLCAicmVjZWl2ZWQgREVMIHdha2V1cCIpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFNUQVRVUyAocXVldWUsIHEtPnNpbmtwYWQsICJyZWNlaXZlZCBERUwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfUVVFVUUyX1dBSVRfQUREX0NIRUNLKHEsIHJlcywgbGFiZWwpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgXAotICBTVEFUVVMgKHF1ZXVlLCBxLT5zcmNwYWQsICJ3YWl0IGZvciBBREQiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBxLT53YWl0aW5nX2FkZCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX2NvbmRfd2FpdCAoJnEtPml0ZW1fYWRkLCAmcS0+cWxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHEtPndhaXRpbmdfYWRkID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChyZXMgIT0gR1NUX0ZMT1dfT0spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgU1RBVFVTIChxdWV1ZSwgcS0+c3JjcGFkLCAicmVjZWl2ZWQgQUREIHdha2V1cCIpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFNUQVRVUyAocXVldWUsIHEtPnNyY3BhZCwgInJlY2VpdmVkIEFERCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfUVVFVUUyX1NJR05BTF9ERUwocSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHEtPndhaXRpbmdfZGVsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTVEFUVVMgKHEsIHEtPnNyY3BhZCwgInNpZ25hbCBERUwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX2NvbmRfc2lnbmFsICgmcS0+aXRlbV9kZWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfUVVFVUUyX1NJR05BTF9BREQocSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHEtPndhaXRpbmdfYWRkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBTVEFUVVMgKHEsIHEtPnNpbmtwYWQsICJzaWduYWwgQUREIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnX2NvbmRfc2lnbmFsICgmcS0+aXRlbV9hZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBTRVRfUEVSQ0VOVChxLCBwZXJjKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHBlcmMgIT0gcS0+YnVmZmVyaW5nX3BlcmNlbnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcS0+YnVmZmVyaW5nX3BlcmNlbnQgPSBwZXJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHEtPnBlcmNlbnRfY2hhbmdlZCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxLCAiYnVmZmVyaW5nICVkIHBlcmNlbnQiLCBwZXJjKTsgICAgICAgICAgICAgICAgICBcCi0gICAgZ2V0X2J1ZmZlcmluZ19zdGF0cyAocSwgcGVyYywgJnEtPm1vZGUsICZxLT5hdmdfaW4sICZxLT5hdmdfb3V0LCAgICAgXAotICAgICAgICAmcS0+YnVmZmVyaW5nX2xlZnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBfZG9faW5pdCBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHF1ZXVlX2RlYnVnLCAicXVldWUyIiwgMCwgInF1ZXVlIGVsZW1lbnQiKTsgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChxdWV1ZV9kYXRhZmxvdywgInF1ZXVlMl9kYXRhZmxvdyIsIDAsIFwKLSAgICAgICAgImRhdGFmbG93IGluc2lkZSB0aGUgcXVldWUgZWxlbWVudCIpOwotI2RlZmluZSBnc3RfcXVldWUyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RRdWV1ZTIsIGdzdF9xdWV1ZTIsIEdTVF9UWVBFX0VMRU1FTlQsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3F1ZXVlMl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9xdWV1ZTJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3F1ZXVlMl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9xdWV1ZTJfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcXVldWUyX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlckxpc3QgKiBidWZmZXJfbGlzdCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcXVldWUyX3B1c2hfb25lIChHc3RRdWV1ZTIgKiBxdWV1ZSk7Ci1zdGF0aWMgdm9pZCBnc3RfcXVldWUyX2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9xdWV1ZTJfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZTJfaGFuZGxlX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlMl9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcXVldWUyX2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZTJfaGFuZGxlX3F1ZXJ5IChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3F1ZXVlMl9nZXRfcmFuZ2UgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWZmZXIpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlMl9zcmNfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZTJfc2lua19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3F1ZXVlMl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F1ZXVlMl9pc19lbXB0eSAoR3N0UXVldWUyICogcXVldWUpOwotc3RhdGljIGdib29sZWFuIGdzdF9xdWV1ZTJfaXNfZmlsbGVkIChHc3RRdWV1ZTIgKiBxdWV1ZSk7Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJfbGV2ZWwgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBHc3RRdWV1ZTJSYW5nZSAqIHJhbmdlKTsKLXN0YXRpYyB2b2lkIHVwZGF0ZV9pbl9yYXRlcyAoR3N0UXVldWUyICogcXVldWUsIGdib29sZWFuIGZvcmNlKTsKLXN0YXRpYyBHc3RNZXNzYWdlICpnc3RfcXVldWUyX2dldF9idWZmZXJpbmdfbWVzc2FnZSAoR3N0UXVldWUyICogcXVldWUpOwotc3RhdGljIHZvaWQgZ3N0X3F1ZXVlMl9wb3N0X2J1ZmZlcmluZyAoR3N0UXVldWUyICogcXVldWUpOwotCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX1FVRVVFMl9JVEVNX1RZUEVfVU5LTk9XTiA9IDAsCi0gIEdTVF9RVUVVRTJfSVRFTV9UWVBFX0JVRkZFUiwKLSAgR1NUX1FVRVVFMl9JVEVNX1RZUEVfQlVGRkVSX0xJU1QsCi0gIEdTVF9RVUVVRTJfSVRFTV9UWVBFX0VWRU5ULAotICBHU1RfUVVFVUUyX0lURU1fVFlQRV9RVUVSWQotfSBHc3RRdWV1ZTJJdGVtVHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0UXVldWUySXRlbVR5cGUgdHlwZTsKLSAgR3N0TWluaU9iamVjdCAqaXRlbTsKLX0gR3N0UXVldWUySXRlbTsKLQotLyogc3RhdGljIGd1aW50IGdzdF9xdWV1ZTJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZTJfY2xhc3NfaW5pdCAoR3N0UXVldWUyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcXVldWUyX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3F1ZXVlMl9nZXRfcHJvcGVydHk7Ci0KLSAgLyogcHJvcGVydGllcyAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NVUl9MRVZFTF9CWVRFUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiY3VycmVudC1sZXZlbC1ieXRlcyIsICJDdXJyZW50IGxldmVsIChrQikiLAotICAgICAgICAgICJDdXJyZW50IGFtb3VudCBvZiBkYXRhIGluIHRoZSBxdWV1ZSAoYnl0ZXMpIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1VSX0xFVkVMX0JVRkZFUlMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImN1cnJlbnQtbGV2ZWwtYnVmZmVycyIsICJDdXJyZW50IGxldmVsIChidWZmZXJzKSIsCi0gICAgICAgICAgIkN1cnJlbnQgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1VSX0xFVkVMX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgiY3VycmVudC1sZXZlbC10aW1lIiwgIkN1cnJlbnQgbGV2ZWwgKG5zKSIsCi0gICAgICAgICAgIkN1cnJlbnQgYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucykiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfQllURVMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1zaXplLWJ5dGVzIiwgIk1heC4gc2l6ZSAoa0IpIiwKLSAgICAgICAgICAiTWF4LiBhbW91bnQgb2YgZGF0YSBpbiB0aGUgcXVldWUgKGJ5dGVzLCAwPWRpc2FibGUpIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX1NJWkVfQllURVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfQlVGRkVSUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LXNpemUtYnVmZmVycyIsICJNYXguIHNpemUgKGJ1ZmZlcnMpIiwKLSAgICAgICAgICAiTWF4LiBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcXVldWUgKDA9ZGlzYWJsZSkiLCAwLCBHX01BWFVJTlQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfU0laRV9CVUZGRVJTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9TSVpFX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgibWF4LXNpemUtdGltZSIsICJNYXguIHNpemUgKG5zKSIsCi0gICAgICAgICAgIk1heC4gYW1vdW50IG9mIGRhdGEgaW4gdGhlIHF1ZXVlIChpbiBucywgMD1kaXNhYmxlKSIsIDAsIEdfTUFYVUlOVDY0LAotICAgICAgICAgIERFRkFVTFRfTUFYX1NJWkVfVElNRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9VU0VfQlVGRkVSSU5HLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ1c2UtYnVmZmVyaW5nIiwgIlVzZSBidWZmZXJpbmciLAotICAgICAgICAgICJFbWl0IEdTVF9NRVNTQUdFX0JVRkZFUklORyBiYXNlZCBvbiBsb3ctL2hpZ2gtcGVyY2VudCB0aHJlc2hvbGRzIiwKLSAgICAgICAgICBERUZBVUxUX1VTRV9CVUZGRVJJTkcsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VTRV9UQUdTX0JJVFJBVEUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInVzZS10YWdzLWJpdHJhdGUiLCAiVXNlIGJpdHJhdGUgZnJvbSB0YWdzIiwKLSAgICAgICAgICAiVXNlIGEgYml0cmF0ZSBmcm9tIHVwc3RyZWFtIHRhZ3MgdG8gZXN0aW1hdGUgYnVmZmVyIGR1cmF0aW9uIGlmIG5vdCBwcm92aWRlZCIsCi0gICAgICAgICAgREVGQVVMVF9VU0VfVEFHU19CSVRSQVRFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VTRV9SQVRFX0VTVElNQVRFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ1c2UtcmF0ZS1lc3RpbWF0ZSIsICJVc2UgUmF0ZSBFc3RpbWF0ZSIsCi0gICAgICAgICAgIkVzdGltYXRlIHRoZSBiaXRyYXRlIG9mIHRoZSBzdHJlYW0gdG8gY2FsY3VsYXRlIHRpbWUgbGV2ZWwiLAotICAgICAgICAgIERFRkFVTFRfVVNFX1JBVEVfRVNUSU1BVEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTE9XX1BFUkNFTlQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgibG93LXBlcmNlbnQiLCAiTG93IHBlcmNlbnQiLAotICAgICAgICAgICJMb3cgdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gc3RhcnQuIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUgIgotICAgICAgICAgICIoRGVwcmVjYXRlZDogdXNlIGxvdy13YXRlcm1hcmsgaW5zdGVhZCkiLAotICAgICAgICAgIDAsIDEwMCwgREVGQVVMVF9MT1dfV0FURVJNQVJLICogMTAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0hJR0hfUEVSQ0VOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJoaWdoLXBlcmNlbnQiLCAiSGlnaCBwZXJjZW50IiwKLSAgICAgICAgICAiSGlnaCB0aHJlc2hvbGQgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUgIgotICAgICAgICAgICIoRGVwcmVjYXRlZDogdXNlIGhpZ2gtd2F0ZXJtYXJrIGluc3RlYWQpIiwKLSAgICAgICAgICAwLCAxMDAsIERFRkFVTFRfSElHSF9XQVRFUk1BUksgKiAxMDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTE9XX1dBVEVSTUFSSywKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJsb3ctd2F0ZXJtYXJrIiwgIkxvdyB3YXRlcm1hcmsiLAotICAgICAgICAgICJMb3cgdGhyZXNob2xkIGZvciBidWZmZXJpbmcgdG8gc3RhcnQuIE9ubHkgdXNlZCBpZiB1c2UtYnVmZmVyaW5nIGlzIFRydWUiLAotICAgICAgICAgIDAuMCwgMS4wLCBERUZBVUxUX0xPV19XQVRFUk1BUkssCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSElHSF9XQVRFUk1BUkssCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiaGlnaC13YXRlcm1hcmsiLCAiSGlnaCB3YXRlcm1hcmsiLAotICAgICAgICAgICJIaWdoIHRocmVzaG9sZCBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4gT25seSB1c2VkIGlmIHVzZS1idWZmZXJpbmcgaXMgVHJ1ZSIsCi0gICAgICAgICAgMC4wLCAxLjAsIERFRkFVTFRfSElHSF9XQVRFUk1BUkssCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9URU1QX1RFTVBMQVRFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInRlbXAtdGVtcGxhdGUiLCAiVGVtcG9yYXJ5IEZpbGUgVGVtcGxhdGUiLAotICAgICAgICAgICJGaWxlIHRlbXBsYXRlIHRvIHN0b3JlIHRlbXBvcmFyeSBmaWxlcyBpbiwgc2hvdWxkIGNvbnRhaW4gZGlyZWN0b3J5ICIKLSAgICAgICAgICAiYW5kIFhYWFhYWC4gKE5VTEwgPT0gZGlzYWJsZWQpIiwKLSAgICAgICAgICBOVUxMLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RFTVBfTE9DQVRJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgidGVtcC1sb2NhdGlvbiIsICJUZW1wb3JhcnkgRmlsZSBMb2NhdGlvbiIsCi0gICAgICAgICAgIkxvY2F0aW9uIHRvIHN0b3JlIHRlbXBvcmFyeSBmaWxlcyBpbiAoT25seSByZWFkIHRoaXMgcHJvcGVydHksICIKLSAgICAgICAgICAidXNlIHRlbXAtdGVtcGxhdGUgdG8gY29uZmlndXJlIHRoZSBuYW1lIHRlbXBsYXRlKSIsCi0gICAgICAgICAgTlVMTCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UXVldWUyOnRlbXAtcmVtb3ZlCi0gICAqCi0gICAqIFdoZW4gdGVtcC10ZW1wbGF0ZSBpcyBzZXQsIHJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGUgd2hlbiBnb2luZyB0byBSRUFEWS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVEVNUF9SRU1PVkUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInRlbXAtcmVtb3ZlIiwgIlJlbW92ZSB0aGUgVGVtcG9yYXJ5IEZpbGUiLAotICAgICAgICAgICJSZW1vdmUgdGhlIHRlbXAtbG9jYXRpb24gYWZ0ZXIgdXNlIiwKLSAgICAgICAgICBERUZBVUxUX1RFTVBfUkVNT1ZFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UXVldWUyOnJpbmctYnVmZmVyLW1heC1zaXplCi0gICAqCi0gICAqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHJpbmcgYnVmZmVyIGluIGJ5dGVzLiBJZiBzZXQgdG8gMCwgdGhlIHJpbmcKLSAgICogYnVmZmVyIGlzIGRpc2FibGVkLiBEZWZhdWx0IDAuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JJTkdfQlVGRkVSX01BWF9TSVpFLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInJpbmctYnVmZmVyLW1heC1zaXplIiwKLSAgICAgICAgICAiTWF4LiByaW5nIGJ1ZmZlciBzaXplIChieXRlcykiLAotICAgICAgICAgICJNYXguIGFtb3VudCBvZiBkYXRhIGluIHRoZSByaW5nIGJ1ZmZlciAoYnl0ZXMsIDAgPSBkaXNhYmxlZCkiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCBERUZBVUxUX1JJTkdfQlVGRkVSX01BWF9TSVpFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RRdWV1ZTI6YXZnLWluLXJhdGUKLSAgICoKLSAgICogVGhlIGF2ZXJhZ2UgaW5wdXQgZGF0YSByYXRlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BVkdfSU5fUkFURSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQ2NCAoImF2Zy1pbi1yYXRlIiwgIklucHV0IGRhdGEgcmF0ZSAoYnl0ZXMvcykiLAotICAgICAgICAgICJBdmVyYWdlIGlucHV0IGRhdGEgcmF0ZSAoYnl0ZXMvcykiLAotICAgICAgICAgIDAsIEdfTUFYSU5UNjQsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyogc2V0IHNldmVyYWwgcGFyZW50IGNsYXNzIHZpcnR1YWwgZnVuY3Rpb25zICovCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3F1ZXVlMl9maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJRdWV1ZSAyIiwKLSAgICAgICJHZW5lcmljIiwKLSAgICAgICJTaW1wbGUgZGF0YSBxdWV1ZSIsCi0gICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4sICIKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXVldWUyX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfaGFuZGxlX3F1ZXJ5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZTJfaW5pdCAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIHF1ZXVlLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsICJzaW5rIik7Ci0KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHF1ZXVlLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAocXVldWUtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1ZXVlMl9jaGFpbl9saXN0KSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAocXVldWUtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1ZXVlMl9zaW5rX2FjdGl2YXRlX21vZGUpKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVsbF9mdW5jdGlvbiAocXVldWUtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1ZXVlMl9oYW5kbGVfc2lua19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAocXVldWUtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1ZXVlMl9oYW5kbGVfc2lua19xdWVyeSkpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChxdWV1ZS0+c2lua3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChxdWV1ZSksIHF1ZXVlLT5zaW5rcGFkKTsKLQotICBxdWV1ZS0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmN0ZW1wbGF0ZSwgInNyYyIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAocXVldWUtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXVldWUyX3NyY19hY3RpdmF0ZV9tb2RlKSk7Ci0gIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfZ2V0X3JhbmdlKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChxdWV1ZS0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWV1ZTJfaGFuZGxlX3NyY19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAocXVldWUtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXVldWUyX2hhbmRsZV9zcmNfcXVlcnkpKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUyAocXVldWUtPnNyY3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChxdWV1ZSksIHF1ZXVlLT5zcmNwYWQpOwotCi0gIC8qIGxldmVscyAqLwotICBHU1RfUVVFVUUyX0NMRUFSX0xFVkVMIChxdWV1ZS0+Y3VyX2xldmVsKTsKLSAgcXVldWUtPm1heF9sZXZlbC5idWZmZXJzID0gREVGQVVMVF9NQVhfU0laRV9CVUZGRVJTOwotICBxdWV1ZS0+bWF4X2xldmVsLmJ5dGVzID0gREVGQVVMVF9NQVhfU0laRV9CWVRFUzsKLSAgcXVldWUtPm1heF9sZXZlbC50aW1lID0gREVGQVVMVF9NQVhfU0laRV9USU1FOwotICBxdWV1ZS0+bWF4X2xldmVsLnJhdGVfdGltZSA9IERFRkFVTFRfTUFYX1NJWkVfVElNRTsKLSAgcXVldWUtPnVzZV9idWZmZXJpbmcgPSBERUZBVUxUX1VTRV9CVUZGRVJJTkc7Ci0gIHF1ZXVlLT51c2VfcmF0ZV9lc3RpbWF0ZSA9IERFRkFVTFRfVVNFX1JBVEVfRVNUSU1BVEU7Ci0gIHF1ZXVlLT5sb3dfd2F0ZXJtYXJrID0gREVGQVVMVF9MT1dfV0FURVJNQVJLICogTUFYX0JVRkZFUklOR19MRVZFTDsKLSAgcXVldWUtPmhpZ2hfd2F0ZXJtYXJrID0gREVGQVVMVF9ISUdIX1dBVEVSTUFSSyAqIE1BWF9CVUZGRVJJTkdfTEVWRUw7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZxdWV1ZS0+c3JjX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgcXVldWUtPnNpbmt0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcXVldWUtPnNyY3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBxdWV1ZS0+c2lua190YWludGVkID0gVFJVRTsKLSAgcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKLQotICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIHF1ZXVlLT5pc19lb3MgPSBGQUxTRTsKLSAgcXVldWUtPmluX3RpbWVyID0gZ190aW1lcl9uZXcgKCk7Ci0gIHF1ZXVlLT5vdXRfdGltZXIgPSBnX3RpbWVyX25ldyAoKTsKLQotICBnX211dGV4X2luaXQgKCZxdWV1ZS0+cWxvY2spOwotICBxdWV1ZS0+d2FpdGluZ19hZGQgPSBGQUxTRTsKLSAgZ19jb25kX2luaXQgKCZxdWV1ZS0+aXRlbV9hZGQpOwotICBxdWV1ZS0+d2FpdGluZ19kZWwgPSBGQUxTRTsKLSAgZ19jb25kX2luaXQgKCZxdWV1ZS0+aXRlbV9kZWwpOwotICBnX3F1ZXVlX2luaXQgKCZxdWV1ZS0+cXVldWUpOwotCi0gIGdfY29uZF9pbml0ICgmcXVldWUtPnF1ZXJ5X2hhbmRsZWQpOwotICBxdWV1ZS0+bGFzdF9xdWVyeSA9IEZBTFNFOwotCi0gIGdfbXV0ZXhfaW5pdCAoJnF1ZXVlLT5idWZmZXJpbmdfcG9zdF9sb2NrKTsKLSAgcXVldWUtPmJ1ZmZlcmluZ19wZXJjZW50ID0gMTAwOwotCi0gIC8qIHRlbXBmaWxlIHJlbGF0ZWQgKi8KLSAgcXVldWUtPnRlbXBfdGVtcGxhdGUgPSBOVUxMOwotICBxdWV1ZS0+dGVtcF9sb2NhdGlvbiA9IE5VTEw7Ci0gIHF1ZXVlLT50ZW1wX3JlbW92ZSA9IERFRkFVTFRfVEVNUF9SRU1PVkU7Ci0KLSAgcXVldWUtPnJpbmdfYnVmZmVyID0gTlVMTDsKLSAgcXVldWUtPnJpbmdfYnVmZmVyX21heF9zaXplID0gREVGQVVMVF9SSU5HX0JVRkZFUl9NQVhfU0laRTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICJpbml0aWFsaXplZCBxdWV1ZSdzIG5vdF9lbXB0eSAmIG5vdF9mdWxsIGNvbmRpdGlvbnMiKTsKLX0KLQotLyogY2FsbGVkIG9ubHkgb25jZSwgYXMgb3Bwb3NlZCB0byBkaXNwb3NlICovCi1zdGF0aWMgdm9pZAotZ3N0X3F1ZXVlMl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UXVldWUyICpxdWV1ZSA9IEdTVF9RVUVVRTIgKG9iamVjdCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJmaW5hbGl6aW5nIHF1ZXVlIik7Ci0KLSAgd2hpbGUgKCFnX3F1ZXVlX2lzX2VtcHR5ICgmcXVldWUtPnF1ZXVlKSkgewotICAgIEdzdFF1ZXVlMkl0ZW0gKnFpdGVtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJnF1ZXVlLT5xdWV1ZSk7Ci0KLSAgICBpZiAocWl0ZW0tPnR5cGUgIT0gR1NUX1FVRVVFMl9JVEVNX1RZUEVfUVVFUlkpCi0gICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKHFpdGVtLT5pdGVtKTsKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdFF1ZXVlMkl0ZW0sIHFpdGVtKTsKLSAgfQotCi0gIHF1ZXVlLT5sYXN0X3F1ZXJ5ID0gRkFMU0U7Ci0gIGdfcXVldWVfY2xlYXIgKCZxdWV1ZS0+cXVldWUpOwotICBnX211dGV4X2NsZWFyICgmcXVldWUtPnFsb2NrKTsKLSAgZ19tdXRleF9jbGVhciAoJnF1ZXVlLT5idWZmZXJpbmdfcG9zdF9sb2NrKTsKLSAgZ19jb25kX2NsZWFyICgmcXVldWUtPml0ZW1fYWRkKTsKLSAgZ19jb25kX2NsZWFyICgmcXVldWUtPml0ZW1fZGVsKTsKLSAgZ19jb25kX2NsZWFyICgmcXVldWUtPnF1ZXJ5X2hhbmRsZWQpOwotICBnX3RpbWVyX2Rlc3Ryb3kgKHF1ZXVlLT5pbl90aW1lcik7Ci0gIGdfdGltZXJfZGVzdHJveSAocXVldWUtPm91dF90aW1lcik7Ci0KLSAgLyogdGVtcF9maWxlIHBhdGggY2xlYW51cCAgKi8KLSAgZ19mcmVlIChxdWV1ZS0+dGVtcF90ZW1wbGF0ZSk7Ci0gIGdfZnJlZSAocXVldWUtPnRlbXBfbG9jYXRpb24pOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWRlYnVnX3JhbmdlcyAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIEdzdFF1ZXVlMlJhbmdlICp3YWxrOwotCi0gIGZvciAod2FsayA9IHF1ZXVlLT5yYW5nZXM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCi0gICAgICAgICJyYW5nZSBbJSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiIEdfR1VJTlQ2NF9GT1JNQVQgIl0gKHJiIFslIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZPUk1BVCAiXSksIHJlYWRpbmcgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIGN1cnJlbnQgcmFuZ2U/ICVzIiwgd2Fsay0+b2Zmc2V0LCB3YWxrLT53cml0aW5nX3Bvcywgd2Fsay0+cmJfb2Zmc2V0LAotICAgICAgICB3YWxrLT5yYl93cml0aW5nX3Bvcywgd2Fsay0+cmVhZGluZ19wb3MsCi0gICAgICAgIHdhbGsgPT0gcXVldWUtPmN1cnJlbnQgPyAiKip5KioiIDogIiAgbiAgIik7Ci0gIH0KLX0KLQotLyogY2xlYXIgYWxsIHRoZSBkb3dubG9hZGVkIHJhbmdlcyAqLwotc3RhdGljIHZvaWQKLWNsZWFuX3JhbmdlcyAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiY2xlYW4gcXVldWUgcmFuZ2VzIik7Ci0KLSAgZ19zbGljZV9mcmVlX2NoYWluIChHc3RRdWV1ZTJSYW5nZSwgcXVldWUtPnJhbmdlcywgbmV4dCk7Ci0gIHF1ZXVlLT5yYW5nZXMgPSBOVUxMOwotICBxdWV1ZS0+Y3VycmVudCA9IE5VTEw7Ci19Ci0KLS8qIGZpbmQgYSByYW5nZSB0aGF0IGNvbnRhaW5zIEBvZmZzZXQgb3IgTlVMTCB3aGVuIG5vdGhpbmcgZG9lcyAqLwotc3RhdGljIEdzdFF1ZXVlMlJhbmdlICoKLWZpbmRfcmFuZ2UgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBndWludDY0IG9mZnNldCkKLXsKLSAgR3N0UXVldWUyUmFuZ2UgKnJhbmdlID0gTlVMTDsKLSAgR3N0UXVldWUyUmFuZ2UgKndhbGs7Ci0KLSAgLyogZmlyc3QgZG8gYSBxdWljayBjaGVjayBmb3IgdGhlIGN1cnJlbnQgcmFuZ2UgKi8KLSAgZm9yICh3YWxrID0gcXVldWUtPnJhbmdlczsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICBpZiAob2Zmc2V0ID49IHdhbGstPm9mZnNldCAmJiBvZmZzZXQgPD0gd2Fsay0+d3JpdGluZ19wb3MpIHsKLSAgICAgIC8qIHdlIGNhbiByZXVzZSBhbiBleGlzdGluZyByYW5nZSAqLwotICAgICAgcmFuZ2UgPSB3YWxrOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGlmIChyYW5nZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAiZm91bmQgcmFuZ2UgZm9yICUiIEdfR1VJTlQ2NF9GT1JNQVQgIjogWyUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFUICJdIiwgb2Zmc2V0LCByYW5nZS0+b2Zmc2V0LCByYW5nZS0+d3JpdGluZ19wb3MpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAibm8gcmFuZ2UgZm9yICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0gIH0KLSAgcmV0dXJuIHJhbmdlOwotfQotCi1zdGF0aWMgdm9pZAotdXBkYXRlX2N1cl9sZXZlbCAoR3N0UXVldWUyICogcXVldWUsIEdzdFF1ZXVlMlJhbmdlICogcmFuZ2UpCi17Ci0gIGd1aW50NjQgbWF4X3JlYWRpbmdfcG9zLCB3cml0aW5nX3BvczsKLQotICB3cml0aW5nX3BvcyA9IHJhbmdlLT53cml0aW5nX3BvczsKLSAgbWF4X3JlYWRpbmdfcG9zID0gcmFuZ2UtPm1heF9yZWFkaW5nX3BvczsKLQotICBpZiAod3JpdGluZ19wb3MgPiBtYXhfcmVhZGluZ19wb3MpCi0gICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyA9IHdyaXRpbmdfcG9zIC0gbWF4X3JlYWRpbmdfcG9zOwotICBlbHNlCi0gICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyA9IDA7Ci19Ci0KLS8qIG1ha2UgYSBuZXcgcmFuZ2UgZm9yIEBvZmZzZXQgb3IgcmV1c2UgYW4gZXhpc3RpbmcgcmFuZ2UgKi8KLXN0YXRpYyBHc3RRdWV1ZTJSYW5nZSAqCi1hZGRfcmFuZ2UgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBndWludDY0IG9mZnNldCwgZ2Jvb2xlYW4gdXBkYXRlX2V4aXN0aW5nKQotewotICBHc3RRdWV1ZTJSYW5nZSAqcmFuZ2UsICpwcmV2LCAqbmV4dDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImZpbmQgcmFuZ2UgZm9yICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgaWYgKChyYW5nZSA9IGZpbmRfcmFuZ2UgKHF1ZXVlLCBvZmZzZXQpKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAicmV1c2luZyByYW5nZSAlIiBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZPUk1BVCwgcmFuZ2UtPm9mZnNldCwKLSAgICAgICAgcmFuZ2UtPndyaXRpbmdfcG9zKTsKLSAgICBpZiAodXBkYXRlX2V4aXN0aW5nICYmIHJhbmdlLT53cml0aW5nX3BvcyAhPSBvZmZzZXQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAidXBkYXRpbmcgcmFuZ2Ugd3JpdGluZyBwb3NpdGlvbiB0byAiCi0gICAgICAgICAgIiUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0gICAgICByYW5nZS0+d3JpdGluZ19wb3MgPSBvZmZzZXQ7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAibmV3IHJhbmdlICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFULCBvZmZzZXQsIG9mZnNldCk7Ci0KLSAgICByYW5nZSA9IGdfc2xpY2VfbmV3MCAoR3N0UXVldWUyUmFuZ2UpOwotICAgIHJhbmdlLT5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgLyogd2Ugd2FudCB0byB3cml0ZSB0byB0aGUgbmV4dCBsb2NhdGlvbiBpbiB0aGUgcmluZyBidWZmZXIgKi8KLSAgICByYW5nZS0+cmJfb2Zmc2V0ID0gcXVldWUtPmN1cnJlbnQgPyBxdWV1ZS0+Y3VycmVudC0+cmJfd3JpdGluZ19wb3MgOiAwOwotICAgIHJhbmdlLT53cml0aW5nX3BvcyA9IG9mZnNldDsKLSAgICByYW5nZS0+cmJfd3JpdGluZ19wb3MgPSByYW5nZS0+cmJfb2Zmc2V0OwotICAgIHJhbmdlLT5yZWFkaW5nX3BvcyA9IG9mZnNldDsKLSAgICByYW5nZS0+bWF4X3JlYWRpbmdfcG9zID0gb2Zmc2V0OwotCi0gICAgLyogaW5zZXJ0IHNvcnRlZCAqLwotICAgIHByZXYgPSBOVUxMOwotICAgIG5leHQgPSBxdWV1ZS0+cmFuZ2VzOwotICAgIHdoaWxlIChuZXh0KSB7Ci0gICAgICBpZiAobmV4dC0+b2Zmc2V0ID4gb2Zmc2V0KSB7Ci0gICAgICAgIC8qIGluc2VydCBiZWZvcmUgbmV4dCAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgICAgICJpbnNlcnQgYmVmb3JlIHJhbmdlICVwLCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgbmV4dCwKLSAgICAgICAgICAgIG5leHQtPm9mZnNldCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgLyogdHJ5IG5leHQgKi8KLSAgICAgIHByZXYgPSBuZXh0OwotICAgICAgbmV4dCA9IG5leHQtPm5leHQ7Ci0gICAgfQotICAgIHJhbmdlLT5uZXh0ID0gbmV4dDsKLSAgICBpZiAocHJldikKLSAgICAgIHByZXYtPm5leHQgPSByYW5nZTsKLSAgICBlbHNlCi0gICAgICBxdWV1ZS0+cmFuZ2VzID0gcmFuZ2U7Ci0gIH0KLSAgZGVidWdfcmFuZ2VzIChxdWV1ZSk7Ci0KLSAgLyogdXBkYXRlIHRoZSBzdGF0cyBmb3IgdGhpcyByYW5nZSAqLwotICB1cGRhdGVfY3VyX2xldmVsIChxdWV1ZSwgcmFuZ2UpOwotCi0gIHJldHVybiByYW5nZTsKLX0KLQotCi0vKiBjbGVhciBhbmQgaW5pdCB0aGUgZG93bmxvYWQgcmFuZ2VzIGZvciBvZmZzZXQgMCAqLwotc3RhdGljIHZvaWQKLWluaXRfcmFuZ2VzIChHc3RRdWV1ZTIgKiBxdWV1ZSkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJpbml0IHF1ZXVlIHJhbmdlcyIpOwotCi0gIC8qIGdldCByaWQgb2YgYWxsIHRoZSBjdXJyZW50IHJhbmdlcyAqLwotICBjbGVhbl9yYW5nZXMgKHF1ZXVlKTsKLSAgLyogbWFrZSBhIHJhbmdlIGZvciBvZmZzZXQgMCAqLwotICBxdWV1ZS0+Y3VycmVudCA9IGFkZF9yYW5nZSAocXVldWUsIDAsIFRSVUUpOwotfQotCi0vKiBjYWxjdWxhdGUgdGhlIGRpZmYgYmV0d2VlbiBydW5uaW5nIHRpbWUgb24gdGhlIHNpbmsgYW5kIHNyYyBvZiB0aGUgcXVldWUuCi0gKiBUaGlzIGlzIHRoZSB0b3RhbCBhbW91bnQgb2YgdGltZSBpbiB0aGUgcXVldWUuICovCi1zdGF0aWMgdm9pZAotdXBkYXRlX3RpbWVfbGV2ZWwgKEdzdFF1ZXVlMiAqIHF1ZXVlKQotewotICBpZiAocXVldWUtPnNpbmtfdGFpbnRlZCkgewotICAgIHF1ZXVlLT5zaW5rdGltZSA9Ci0gICAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgcXVldWUtPnNpbmtfc2VnbWVudC5wb3NpdGlvbik7Ci0gICAgcXVldWUtPnNpbmtfdGFpbnRlZCA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKHF1ZXVlLT5zcmNfdGFpbnRlZCkgewotICAgIHF1ZXVlLT5zcmN0aW1lID0KLSAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmcXVldWUtPnNyY19zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgIHF1ZXVlLT5zcmNfc2VnbWVudC5wb3NpdGlvbik7Ci0gICAgcXVldWUtPnNyY190YWludGVkID0gRkFMU0U7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgInNpbmsgJSIgR1NUX1RJTUVfRk9STUFUICIsIHNyYyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChxdWV1ZS0+c2lua3RpbWUpLCBHU1RfVElNRV9BUkdTIChxdWV1ZS0+c3JjdGltZSkpOwotCi0gIGlmIChxdWV1ZS0+c2lua3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORQotICAgICAgJiYgcXVldWUtPnNyY3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORQotICAgICAgJiYgcXVldWUtPnNpbmt0aW1lID49IHF1ZXVlLT5zcmN0aW1lKQotICAgIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSA9IHF1ZXVlLT5zaW5rdGltZSAtIHF1ZXVlLT5zcmN0aW1lOwotICBlbHNlCi0gICAgcXVldWUtPmN1cl9sZXZlbC50aW1lID0gMDsKLX0KLQotLyogdGFrZSBhIFNFR01FTlQgZXZlbnQgYW5kIGFwcGx5IHRoZSB2YWx1ZXMgdG8gc2VnbWVudCwgdXBkYXRpbmcgdGhlIHRpbWUKLSAqIGxldmVsIG9mIHF1ZXVlLiAqLwotc3RhdGljIHZvaWQKLWFwcGx5X3NlZ21lbnQgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBHc3RFdmVudCAqIGV2ZW50LCBHc3RTZWdtZW50ICogc2VnbWVudCwKLSAgICBnYm9vbGVhbiBpc19zaW5rKQotewotICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgc2VnbWVudCk7Ci0KLSAgaWYgKHNlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpICYmIGlzX3NpbmspIHsKLSAgICAgIC8qIHN0YXJ0IGlzIHdoZXJlIHdlJ2xsIGJlIGdldHRpbmcgZnJvbSBhbmQgYXMgc3VjaCB3cml0aW5nIG5leHQgKi8KLSAgICAgIHF1ZXVlLT5jdXJyZW50ID0gYWRkX3JhbmdlIChxdWV1ZSwgc2VnbWVudC0+c3RhcnQsIFRSVUUpOwotICAgIH0KLSAgfQotCi0gIC8qIG5vdyBjb25maWd1cmUgdGhlIHZhbHVlcywgd2UgdXNlIHRoZXNlIHRvIHRyYWNrIHRpbWVzdGFtcHMgb24gdGhlCi0gICAqIHNpbmtwYWQuICovCi0gIGlmIChzZWdtZW50LT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgLyogbm9uLXRpbWUgZm9ybWF0LCBwcmV0ZW5kIHRoZSBjdXJyZW50IHRpbWUgc2VnbWVudCBpcyBjbG9zZWQgd2l0aCBhCi0gICAgICogMCBzdGFydCBhbmQgdW5rbm93biBzdG9wIHRpbWUuICovCi0gICAgc2VnbWVudC0+Zm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICAgIHNlZ21lbnQtPnN0YXJ0ID0gMDsKLSAgICBzZWdtZW50LT5zdG9wID0gLTE7Ci0gICAgc2VnbWVudC0+dGltZSA9IDA7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImNvbmZpZ3VyZWQgU0VHTUVOVCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsIHNlZ21lbnQpOwotCi0gIGlmIChpc19zaW5rKQotICAgIHF1ZXVlLT5zaW5rX3RhaW50ZWQgPSBUUlVFOwotICBlbHNlCi0gICAgcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKLQotICAvKiBzZWdtZW50IGNhbiB1cGRhdGUgdGhlIHRpbWUgbGV2ZWwgb2YgdGhlIHF1ZXVlICovCi0gIHVwZGF0ZV90aW1lX2xldmVsIChxdWV1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcHBseV9nYXAgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBHc3RFdmVudCAqIGV2ZW50LAotICAgIEdzdFNlZ21lbnQgKiBzZWdtZW50LCBnYm9vbGVhbiBpc19zaW5rKQotewotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0KLSAgZ3N0X2V2ZW50X3BhcnNlX2dhcCAoZXZlbnQsICZ0aW1lc3RhbXAsICZkdXJhdGlvbik7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKSB7Ci0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkgewotICAgICAgdGltZXN0YW1wICs9IGR1cmF0aW9uOwotICAgIH0KLQotICAgIHNlZ21lbnQtPnBvc2l0aW9uID0gdGltZXN0YW1wOwotCi0gICAgaWYgKGlzX3NpbmspCi0gICAgICBxdWV1ZS0+c2lua190YWludGVkID0gVFJVRTsKLSAgICBlbHNlCi0gICAgICBxdWV1ZS0+c3JjX3RhaW50ZWQgPSBUUlVFOwotCi0gICAgLyogY2FsYyBkaWZmIHdpdGggb3RoZXIgZW5kICovCi0gICAgdXBkYXRlX3RpbWVfbGV2ZWwgKHF1ZXVlKTsKLSAgfQotfQotCi0vKiB0YWtlIGEgYnVmZmVyIGFuZCB1cGRhdGUgc2VnbWVudCwgdXBkYXRpbmcgdGhlIHRpbWUgbGV2ZWwgb2YgdGhlIHF1ZXVlLiAqLwotc3RhdGljIHZvaWQKLWFwcGx5X2J1ZmZlciAoR3N0UXVldWUyICogcXVldWUsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0U2VnbWVudCAqIHNlZ21lbnQsCi0gICAgZ3VpbnQ2NCBzaXplLCBnYm9vbGVhbiBpc19zaW5rKQotewotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIHRpbWVzdGFtcDsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX0RUU19PUl9QVFMgKGJ1ZmZlcik7Ci0gIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLQotICAvKiBJZiB3ZSBoYXZlIG5vIGR1cmF0aW9uLCBwaWNrIG9uZSBmcm9tIHRoZSBiaXRyYXRlIGlmIHdlIGNhbiAqLwotICBpZiAoZHVyYXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJiBxdWV1ZS0+dXNlX3RhZ3NfYml0cmF0ZSkgewotICAgIGd1aW50IGJpdHJhdGUgPQotICAgICAgICBpc19zaW5rID8gcXVldWUtPnNpbmtfdGFnc19iaXRyYXRlIDogcXVldWUtPnNyY190YWdzX2JpdHJhdGU7Ci0gICAgaWYgKGJpdHJhdGUpCi0gICAgICBkdXJhdGlvbiA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc2l6ZSwgOCAqIEdTVF9TRUNPTkQsIGJpdHJhdGUpOwotICB9Ci0KLSAgLyogaWYgbm8gdGltZXN0YW1wIGlzIHNldCwgYXNzdW1lIGl0J3MgY29udGludW91cyB3aXRoIHRoZSBwcmV2aW91cwotICAgKiB0aW1lICovCi0gIGlmICh0aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICB0aW1lc3RhbXAgPSBzZWdtZW50LT5wb3NpdGlvbjsKLQotICAvKiBhZGQgZHVyYXRpb24gKi8KLSAgaWYgKGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgdGltZXN0YW1wICs9IGR1cmF0aW9uOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicG9zaXRpb24gdXBkYXRlZCB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBzZWdtZW50LT5wb3NpdGlvbiA9IHRpbWVzdGFtcDsKLQotICBpZiAoaXNfc2luaykKLSAgICBxdWV1ZS0+c2lua190YWludGVkID0gVFJVRTsKLSAgZWxzZQotICAgIHF1ZXVlLT5zcmNfdGFpbnRlZCA9IFRSVUU7Ci0KLSAgLyogY2FsYyBkaWZmIHdpdGggb3RoZXIgZW5kICovCi0gIHVwZGF0ZV90aW1lX2xldmVsIChxdWV1ZSk7Ci19Ci0KLXN0cnVjdCBCdWZMaXN0RGF0YQotewotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBndWludCBiaXRyYXRlOwotfTsKLQotc3RhdGljIGdib29sZWFuCi1idWZmZXJfbGlzdF9hcHBseV90aW1lIChHc3RCdWZmZXIgKiogYnVmLCBndWludCBpZHgsIGdwb2ludGVyIGRhdGEpCi17Ci0gIHN0cnVjdCBCdWZMaXN0RGF0YSAqYmxkID0gZGF0YTsKLSAgR3N0Q2xvY2tUaW1lICp0aW1lc3RhbXAgPSAmYmxkLT50aW1lc3RhbXA7Ci0gIEdzdENsb2NrVGltZSBidGltZTsKLQotICBHU1RfVFJBQ0UgKCJidWZmZXIgJXUgaGFzIHB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiBkdHMgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgaWR4LAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKCpidWYpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFRTICgqYnVmKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OICgqYnVmKSkpOwotCi0gIGJ0aW1lID0gR1NUX0JVRkZFUl9EVFNfT1JfUFRTICgqYnVmKTsKLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChidGltZSkpCi0gICAgKnRpbWVzdGFtcCA9IGJ0aW1lOwotCi0gIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEICgqYnVmKSkKLSAgICAqdGltZXN0YW1wICs9IEdTVF9CVUZGRVJfRFVSQVRJT04gKCpidWYpOwotICBlbHNlIGlmIChibGQtPmJpdHJhdGUgIT0gMCkgewotICAgIGd1aW50NjQgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWYpOwotCi0gICAgLyogSWYgd2UgaGF2ZSBubyBkdXJhdGlvbiwgcGljayBvbmUgZnJvbSB0aGUgYml0cmF0ZSBpZiB3ZSBjYW4gKi8KLSAgICAqdGltZXN0YW1wICs9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoYmxkLT5iaXRyYXRlLCA4ICogR1NUX1NFQ09ORCwgc2l6ZSk7Ci0gIH0KLQotCi0gIEdTVF9UUkFDRSAoInRzIG5vdyAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKCp0aW1lc3RhbXApKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIHRha2UgYSBidWZmZXIgbGlzdCBhbmQgdXBkYXRlIHNlZ21lbnQsIHVwZGF0aW5nIHRoZSB0aW1lIGxldmVsIG9mIHRoZSBxdWV1ZSAqLwotc3RhdGljIHZvaWQKLWFwcGx5X2J1ZmZlcl9saXN0IChHc3RRdWV1ZTIgKiBxdWV1ZSwgR3N0QnVmZmVyTGlzdCAqIGJ1ZmZlcl9saXN0LAotICAgIEdzdFNlZ21lbnQgKiBzZWdtZW50LCBnYm9vbGVhbiBpc19zaW5rKQotewotICBzdHJ1Y3QgQnVmTGlzdERhdGEgYmxkOwotCi0gIC8qIGlmIG5vIHRpbWVzdGFtcCBpcyBzZXQsIGFzc3VtZSBpdCdzIGNvbnRpbnVvdXMgd2l0aCB0aGUgcHJldmlvdXMgdGltZSAqLwotICBibGQudGltZXN0YW1wID0gc2VnbWVudC0+cG9zaXRpb247Ci0KLSAgaWYgKHF1ZXVlLT51c2VfdGFnc19iaXRyYXRlKSB7Ci0gICAgaWYgKGlzX3NpbmspCi0gICAgICBibGQuYml0cmF0ZSA9IHF1ZXVlLT5zaW5rX3RhZ3NfYml0cmF0ZTsKLSAgICBlbHNlCi0gICAgICBibGQuYml0cmF0ZSA9IHF1ZXVlLT5zcmNfdGFnc19iaXRyYXRlOwotICB9IGVsc2UKLSAgICBibGQuYml0cmF0ZSA9IDA7Ci0KLSAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGJ1ZmZlcl9saXN0LCBidWZmZXJfbGlzdF9hcHBseV90aW1lLCAmYmxkKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImxhc3Rfc3RvcCB1cGRhdGVkIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGJsZC50aW1lc3RhbXApKTsKLQotICBzZWdtZW50LT5wb3NpdGlvbiA9IGJsZC50aW1lc3RhbXA7Ci0KLSAgaWYgKGlzX3NpbmspCi0gICAgcXVldWUtPnNpbmtfdGFpbnRlZCA9IFRSVUU7Ci0gIGVsc2UKLSAgICBxdWV1ZS0+c3JjX3RhaW50ZWQgPSBUUlVFOwotCi0gIC8qIGNhbGMgZGlmZiB3aXRoIG90aGVyIGVuZCAqLwotICB1cGRhdGVfdGltZV9sZXZlbCAocXVldWUpOwotfQotCi1zdGF0aWMgaW5saW5lIGdpbnQKLW5vcm1hbGl6ZV90b19idWZmZXJpbmdfbGV2ZWwgKGd1aW50NjQgY3VyX2xldmVsLCBndWludDY0IG1heF9sZXZlbCwKLSAgICBndWludDY0IGFsdF9tYXgpCi17Ci0gIGd1aW50NjQgcDsKLQotICBpZiAobWF4X2xldmVsID09IDApCi0gICAgcmV0dXJuIDA7Ci0KLSAgaWYgKGFsdF9tYXggPiAwKQotICAgIHAgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGN1cl9sZXZlbCwgTUFYX0JVRkZFUklOR19MRVZFTCwKLSAgICAgICAgTUlOIChtYXhfbGV2ZWwsIGFsdF9tYXgpKTsKLSAgZWxzZQotICAgIHAgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGN1cl9sZXZlbCwgTUFYX0JVRkZFUklOR19MRVZFTCwgbWF4X2xldmVsKTsKLQotICByZXR1cm4gTUlOIChwLCBNQVhfQlVGRkVSSU5HX0xFVkVMKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nZXRfYnVmZmVyaW5nX2xldmVsIChHc3RRdWV1ZTIgKiBxdWV1ZSwgZ2Jvb2xlYW4gKiBpc19idWZmZXJpbmcsCi0gICAgZ2ludCAqIGJ1ZmZlcmluZ19sZXZlbCkKLXsKLSAgZ2ludCBidWZsZXZlbCwgYnVmbGV2ZWwyOwotCi0gIGlmIChxdWV1ZS0+aGlnaF93YXRlcm1hcmsgPD0gMCkgewotICAgIGlmIChidWZmZXJpbmdfbGV2ZWwpCi0gICAgICAqYnVmZmVyaW5nX2xldmVsID0gTUFYX0JVRkZFUklOR19MRVZFTDsKLSAgICBpZiAoaXNfYnVmZmVyaW5nKQotICAgICAgKmlzX2J1ZmZlcmluZyA9IEZBTFNFOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotI2RlZmluZSBHRVRfQlVGRkVSX0xFVkVMX0ZPUl9RVUFOVElUWShmb3JtYXQsYWx0X21heCkgXAotICAgIG5vcm1hbGl6ZV90b19idWZmZXJpbmdfbGV2ZWwgKHF1ZXVlLT5jdXJfbGV2ZWwuZm9ybWF0LHF1ZXVlLT5tYXhfbGV2ZWwuZm9ybWF0LChhbHRfbWF4KSkKLQotICBpZiAocXVldWUtPmlzX2VvcykgewotICAgIC8qIG9uIEVPUyB3ZSBhcmUgYWx3YXlzIDEwMCUgZnVsbCwgd2Ugc2V0IHRoZSB2YXIgaGVyZSBzbyB0aGF0IGl0IHdlIGNhbgotICAgICAqIHJldXNlIHRoZSBsb2dpYyBiZWxvdyB0byBzdG9wIGJ1ZmZlcmluZyAqLwotICAgIGJ1ZmxldmVsID0gTUFYX0JVRkZFUklOR19MRVZFTDsKLSAgICBHU1RfTE9HX09CSkVDVCAocXVldWUsICJ3ZSBhcmUgRU9TIik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAiQ3VyIGxldmVsIGJ5dGVzL3RpbWUvYnVmZmVycyAldS8lIiBHU1RfVElNRV9GT1JNQVQgIi8ldSIsCi0gICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMsIEdTVF9USU1FX0FSR1MgKHF1ZXVlLT5jdXJfbGV2ZWwudGltZSksCi0gICAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycyk7Ci0KLSAgICAvKiBmaWd1cmUgb3V0IHRoZSBidWZmZXJpbmcgbGV2ZWwgd2UgYXJlIGZpbGxlZCwgd2UgdGFrZSB0aGUgbWF4IG9mIGFsbCBmb3JtYXRzLiAqLwotICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgewotICAgICAgYnVmbGV2ZWwgPSBHRVRfQlVGRkVSX0xFVkVMX0ZPUl9RVUFOVElUWSAoYnl0ZXMsIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICBndWludDY0IHJiX3NpemUgPSBxdWV1ZS0+cmluZ19idWZmZXJfbWF4X3NpemU7Ci0gICAgICBidWZsZXZlbCA9IEdFVF9CVUZGRVJfTEVWRUxfRk9SX1FVQU5USVRZIChieXRlcywgcmJfc2l6ZSk7Ci0gICAgfQotCi0gICAgYnVmbGV2ZWwyID0gR0VUX0JVRkZFUl9MRVZFTF9GT1JfUVVBTlRJVFkgKHRpbWUsIDApOwotICAgIGJ1ZmxldmVsID0gTUFYIChidWZsZXZlbCwgYnVmbGV2ZWwyKTsKLQotICAgIGJ1ZmxldmVsMiA9IEdFVF9CVUZGRVJfTEVWRUxfRk9SX1FVQU5USVRZIChidWZmZXJzLCAwKTsKLSAgICBidWZsZXZlbCA9IE1BWCAoYnVmbGV2ZWwsIGJ1ZmxldmVsMik7Ci0KLSAgICAvKiBhbHNvIGFwcGx5IHRoZSByYXRlIGVzdGltYXRlIHdoZW4gd2UgbmVlZCB0byAqLwotICAgIGlmIChxdWV1ZS0+dXNlX3JhdGVfZXN0aW1hdGUpIHsKLSAgICAgIGJ1ZmxldmVsMiA9IEdFVF9CVUZGRVJfTEVWRUxfRk9SX1FVQU5USVRZIChyYXRlX3RpbWUsIDApOwotICAgICAgYnVmbGV2ZWwgPSBNQVggKGJ1ZmxldmVsLCBidWZsZXZlbDIpOwotICAgIH0KLQotICAgIC8qIERvbid0IGdldCB0byAwJSB1bmxlc3Mgd2UncmUgcmVhbGx5IGVtcHR5ICovCi0gICAgaWYgKHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMgPiAwKQotICAgICAgYnVmbGV2ZWwgPSBNQVggKDEsIGJ1ZmxldmVsKTsKLSAgfQotI3VuZGVmIEdFVF9CVUZGRVJfTEVWRUxfRk9SX1FVQU5USVRZCi0KLSAgaWYgKGlzX2J1ZmZlcmluZykKLSAgICAqaXNfYnVmZmVyaW5nID0gcXVldWUtPmlzX2J1ZmZlcmluZzsKLQotICBpZiAoYnVmZmVyaW5nX2xldmVsKQotICAgICpidWZmZXJpbmdfbGV2ZWwgPSBidWZsZXZlbDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImJ1ZmZlcmluZyAlZCwgbGV2ZWwgJWQiLCBxdWV1ZS0+aXNfYnVmZmVyaW5nLAotICAgICAgYnVmbGV2ZWwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2ludAotY29udmVydF90b19idWZmZXJpbmdfcGVyY2VudCAoR3N0UXVldWUyICogcXVldWUsIGdpbnQgYnVmZmVyaW5nX2xldmVsKQotewotICBpbnQgcGVyY2VudDsKLQotICAvKiBzY2FsZSBzbyB0aGF0IGlmIGJ1ZmZlcmluZ19sZXZlbCBlcXVhbHMgdGhlIGhpZ2ggd2F0ZXJtYXJrLAotICAgKiB0aGUgcGVyY2VudGFnZSBpcyAxMDAlICovCi0gIHBlcmNlbnQgPSBidWZmZXJpbmdfbGV2ZWwgKiAxMDAgLyBxdWV1ZS0+aGlnaF93YXRlcm1hcms7Ci0gIC8qIGNsaXAgKi8KLSAgaWYgKHBlcmNlbnQgPiAxMDApCi0gICAgcGVyY2VudCA9IDEwMDsKLQotICByZXR1cm4gcGVyY2VudDsKLX0KLQotc3RhdGljIHZvaWQKLWdldF9idWZmZXJpbmdfc3RhdHMgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBnaW50IHBlcmNlbnQsIEdzdEJ1ZmZlcmluZ01vZGUgKiBtb2RlLAotICAgIGdpbnQgKiBhdmdfaW4sIGdpbnQgKiBhdmdfb3V0LCBnaW50NjQgKiBidWZmZXJpbmdfbGVmdCkKLXsKLSAgaWYgKG1vZGUpIHsKLSAgICBpZiAoIVFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKLSAgICAgIGlmIChRVUVVRV9JU19VU0lOR19SSU5HX0JVRkZFUiAocXVldWUpKQotICAgICAgICAqbW9kZSA9IEdTVF9CVUZGRVJJTkdfVElNRVNISUZUOwotICAgICAgZWxzZQotICAgICAgICAqbW9kZSA9IEdTVF9CVUZGRVJJTkdfRE9XTkxPQUQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICptb2RlID0gR1NUX0JVRkZFUklOR19TVFJFQU07Ci0gICAgfQotICB9Ci0KLSAgaWYgKGF2Z19pbikKLSAgICAqYXZnX2luID0gcXVldWUtPmJ5dGVfaW5fcmF0ZTsKLSAgaWYgKGF2Z19vdXQpCi0gICAgKmF2Z19vdXQgPSBxdWV1ZS0+Ynl0ZV9vdXRfcmF0ZTsKLQotICBpZiAoYnVmZmVyaW5nX2xlZnQpIHsKLSAgICAqYnVmZmVyaW5nX2xlZnQgPSAocGVyY2VudCA9PSAxMDAgPyAwIDogLTEpOwotCi0gICAgaWYgKHF1ZXVlLT51c2VfcmF0ZV9lc3RpbWF0ZSkgewotICAgICAgZ3VpbnQ2NCBtYXgsIGN1cjsKLQotICAgICAgbWF4ID0gcXVldWUtPm1heF9sZXZlbC5yYXRlX3RpbWU7Ci0gICAgICBjdXIgPSBxdWV1ZS0+Y3VyX2xldmVsLnJhdGVfdGltZTsKLQotICAgICAgaWYgKHBlcmNlbnQgIT0gMTAwICYmIG1heCA+IGN1cikKLSAgICAgICAgKmJ1ZmZlcmluZ19sZWZ0ID0gKG1heCAtIGN1cikgLyAxMDAwMDAwOwotICAgIH0KLSAgfQotfQotCi0vKiBDYWxsZWQgd2l0aCB0aGUgbG9jayB0YWtlbiAqLwotc3RhdGljIEdzdE1lc3NhZ2UgKgotZ3N0X3F1ZXVlMl9nZXRfYnVmZmVyaW5nX21lc3NhZ2UgKEdzdFF1ZXVlMiAqIHF1ZXVlKQotewotICBHc3RNZXNzYWdlICptc2cgPSBOVUxMOwotCi0gIGlmIChxdWV1ZS0+cGVyY2VudF9jaGFuZ2VkKSB7Ci0gICAgZ2ludCBwZXJjZW50ID0gcXVldWUtPmJ1ZmZlcmluZ19wZXJjZW50OwotCi0gICAgcXVldWUtPnBlcmNlbnRfY2hhbmdlZCA9IEZBTFNFOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJHb2luZyB0byBwb3N0IGJ1ZmZlcmluZzogJWQlJSIsIHBlcmNlbnQpOwotICAgIG1zZyA9IGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgKEdTVF9PQkpFQ1RfQ0FTVCAocXVldWUpLCBwZXJjZW50KTsKLQotICAgIGdzdF9tZXNzYWdlX3NldF9idWZmZXJpbmdfc3RhdHMgKG1zZywgcXVldWUtPm1vZGUsIHF1ZXVlLT5hdmdfaW4sCi0gICAgICAgIHF1ZXVlLT5hdmdfb3V0LCBxdWV1ZS0+YnVmZmVyaW5nX2xlZnQpOwotICB9Ci0KLSAgcmV0dXJuIG1zZzsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZTJfcG9zdF9idWZmZXJpbmcgKEdzdFF1ZXVlMiAqIHF1ZXVlKQotewotICBHc3RNZXNzYWdlICptc2cgPSBOVUxMOwotCi0gIGdfbXV0ZXhfbG9jayAoJnF1ZXVlLT5idWZmZXJpbmdfcG9zdF9sb2NrKTsKLSAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gIG1zZyA9IGdzdF9xdWV1ZTJfZ2V0X2J1ZmZlcmluZ19tZXNzYWdlIChxdWV1ZSk7Ci0gIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgaWYgKG1zZyAhPSBOVUxMKQotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAocXVldWUpLCBtc2cpOwotCi0gIGdfbXV0ZXhfdW5sb2NrICgmcXVldWUtPmJ1ZmZlcmluZ19wb3N0X2xvY2spOwotfQotCi1zdGF0aWMgdm9pZAotdXBkYXRlX2J1ZmZlcmluZyAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIGdpbnQgYnVmZmVyaW5nX2xldmVsLCBwZXJjZW50OwotCi0gIC8qIEVuc3VyZSB0aGUgdmFyaWFibGVzIHVzZWQgdG8gY2FsY3VsYXRlIGJ1ZmZlcmluZyBzdGF0ZSBhcmUgdXAtdG8tZGF0ZS4gKi8KLSAgaWYgKHF1ZXVlLT5jdXJyZW50KQotICAgIHVwZGF0ZV9jdXJfbGV2ZWwgKHF1ZXVlLCBxdWV1ZS0+Y3VycmVudCk7Ci0gIHVwZGF0ZV9pbl9yYXRlcyAocXVldWUsIEZBTFNFKTsKLQotICBpZiAoIWdldF9idWZmZXJpbmdfbGV2ZWwgKHF1ZXVlLCBOVUxMLCAmYnVmZmVyaW5nX2xldmVsKSkKLSAgICByZXR1cm47Ci0KLSAgcGVyY2VudCA9IGNvbnZlcnRfdG9fYnVmZmVyaW5nX3BlcmNlbnQgKHF1ZXVlLCBidWZmZXJpbmdfbGV2ZWwpOwotCi0gIGlmIChxdWV1ZS0+aXNfYnVmZmVyaW5nKSB7Ci0gICAgLyogaWYgd2Ugd2VyZSBidWZmZXJpbmcgc2VlIGlmIHdlIHJlYWNoZWQgdGhlIGhpZ2ggd2F0ZXJtYXJrICovCi0gICAgaWYgKHBlcmNlbnQgPj0gMTAwKQotICAgICAgcXVldWUtPmlzX2J1ZmZlcmluZyA9IEZBTFNFOwotCi0gICAgU0VUX1BFUkNFTlQgKHF1ZXVlLCBwZXJjZW50KTsKLSAgfSBlbHNlIHsKLSAgICAvKiB3ZSB3ZXJlIG5vdCBidWZmZXJpbmcsIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3RhcnQgYnVmZmVyaW5nIGlmIHdlIGRyb3AKLSAgICAgKiBiZWxvdyB0aGUgbG93IHRocmVzaG9sZCAqLwotICAgIGlmIChidWZmZXJpbmdfbGV2ZWwgPCBxdWV1ZS0+bG93X3dhdGVybWFyaykgewotICAgICAgcXVldWUtPmlzX2J1ZmZlcmluZyA9IFRSVUU7Ci0gICAgICBTRVRfUEVSQ0VOVCAocXVldWUsIHBlcmNlbnQpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcmVzZXRfcmF0ZV90aW1lciAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIHF1ZXVlLT5ieXRlc19pbiA9IDA7Ci0gIHF1ZXVlLT5ieXRlc19vdXQgPSAwOwotICBxdWV1ZS0+Ynl0ZV9pbl9yYXRlID0gMC4wOwotICBxdWV1ZS0+Ynl0ZV9pbl9wZXJpb2QgPSAwOwotICBxdWV1ZS0+Ynl0ZV9vdXRfcmF0ZSA9IDAuMDsKLSAgcXVldWUtPmxhc3RfdXBkYXRlX2luX3JhdGVzX2VsYXBzZWQgPSAwLjA7Ci0gIHF1ZXVlLT5sYXN0X2luX2VsYXBzZWQgPSAwLjA7Ci0gIHF1ZXVlLT5sYXN0X291dF9lbGFwc2VkID0gMC4wOwotICBxdWV1ZS0+aW5fdGltZXJfc3RhcnRlZCA9IEZBTFNFOwotICBxdWV1ZS0+b3V0X3RpbWVyX3N0YXJ0ZWQgPSBGQUxTRTsKLX0KLQotLyogdGhlIGludGVydmFsIGluIHNlY29uZHMgdG8gcmVjYWxjdWxhdGUgdGhlIHJhdGUgKi8KLSNkZWZpbmUgUkFURV9JTlRFUlZBTCAgICAwLjIKLS8qIFR1bmluZyBmb3IgcmF0ZSBlc3RpbWF0aW9uLiBXZSB1c2UgYSBsYXJnZSB3aW5kb3cgZm9yIHRoZSBpbnB1dCByYXRlIGJlY2F1c2UKLSAqIGl0IHNob3VsZCBiZSBzdGFibGUgd2hlbiBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrLiBUaGUgb3V0cHV0IHJhdGUgaXMgbGVzcwotICogc3RhYmxlICh0aGUgZWxlbWVudHMgcHJlcm9sbCwgcXVldWVzIGJlaGluZCBhIGRlbXV4ZXIgZmlsbCwgLi4uKSBhbmQgc2hvdWxkCi0gKiB0aGVyZWZvcmUgYWRhcHQgbW9yZSBxdWlja2x5LgotICogSG93ZXZlciwgaW5pdGlhbCBpbnB1dCByYXRlIG1heSBiZSBzdWJqZWN0IHRvIGEgYnVyc3QsIGFuZCBzaG91bGQgdGhlcmVmb3JlCi0gKiBpbml0aWFsbHkgYWxzbyBhZGFwdCBtb3JlIHF1aWNrbHkgdG8gY2hhbmdlcywgYW5kIG9ubHkgbGF0ZXIgb24gZ2l2ZSBoaWdoZXIKLSAqIHdlaWdodCB0byBwcmV2aW91cyB2YWx1ZXMuICovCi0jZGVmaW5lIEFWR19JTihhdmcsdmFsLHcxLHcyKSAgKChhdmcpICogKHcxKSArICh2YWwpICogKHcyKSkgLyAoKHcxKSArICh3MikpCi0jZGVmaW5lIEFWR19PVVQoYXZnLHZhbCkgKChhdmcpICogMy4wICsgKHZhbCkpIC8gNC4wCi0KLXN0YXRpYyB2b2lkCi11cGRhdGVfaW5fcmF0ZXMgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBnYm9vbGVhbiBmb3JjZSkKLXsKLSAgZ2RvdWJsZSBlbGFwc2VkLCBwZXJpb2Q7Ci0gIGdkb3VibGUgYnl0ZV9pbl9yYXRlOwotCi0gIGlmICghcXVldWUtPmluX3RpbWVyX3N0YXJ0ZWQpIHsKLSAgICBxdWV1ZS0+aW5fdGltZXJfc3RhcnRlZCA9IFRSVUU7Ci0gICAgZ190aW1lcl9zdGFydCAocXVldWUtPmluX3RpbWVyKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBxdWV1ZS0+bGFzdF91cGRhdGVfaW5fcmF0ZXNfZWxhcHNlZCA9IGVsYXBzZWQgPQotICAgICAgZ190aW1lcl9lbGFwc2VkIChxdWV1ZS0+aW5fdGltZXIsIE5VTEwpOwotCi0gIC8qIHJlY2FsYyBhZnRlciBlYWNoIGludGVydmFsLiAqLwotICBpZiAoZm9yY2UgfHwgcXVldWUtPmxhc3RfaW5fZWxhcHNlZCArIFJBVEVfSU5URVJWQUwgPCBlbGFwc2VkKSB7Ci0gICAgcGVyaW9kID0gZWxhcHNlZCAtIHF1ZXVlLT5sYXN0X2luX2VsYXBzZWQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgInJhdGVzOiBwZXJpb2QgJWYsIGluICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZ2xvYmFsIHBlcmlvZCAlZiIsCi0gICAgICAgIHBlcmlvZCwgcXVldWUtPmJ5dGVzX2luLCBxdWV1ZS0+Ynl0ZV9pbl9wZXJpb2QpOwotCi0gICAgYnl0ZV9pbl9yYXRlID0gcXVldWUtPmJ5dGVzX2luIC8gcGVyaW9kOwotCi0gICAgaWYgKHF1ZXVlLT5ieXRlX2luX3JhdGUgPT0gMC4wKQotICAgICAgcXVldWUtPmJ5dGVfaW5fcmF0ZSA9IGJ5dGVfaW5fcmF0ZTsKLSAgICBlbHNlCi0gICAgICBxdWV1ZS0+Ynl0ZV9pbl9yYXRlID0gQVZHX0lOIChxdWV1ZS0+Ynl0ZV9pbl9yYXRlLCBieXRlX2luX3JhdGUsCi0gICAgICAgICAgKGRvdWJsZSkgcXVldWUtPmJ5dGVfaW5fcGVyaW9kLCBwZXJpb2QpOwotCi0gICAgLyogYW5vdGhlciBkYXRhIHBvaW50LCBjYXAgYXQgMTYgZm9yIGxvbmcgdGltZSBydW5uaW5nIGF2ZXJhZ2UgKi8KLSAgICBpZiAocXVldWUtPmJ5dGVfaW5fcGVyaW9kIDwgMTYgKiBSQVRFX0lOVEVSVkFMKQotICAgICAgcXVldWUtPmJ5dGVfaW5fcGVyaW9kICs9IHBlcmlvZDsKLQotICAgIC8qIHJlc2V0IHRoZSB2YWx1ZXMgdG8gY2FsY3VsYXRlIHJhdGUgb3ZlciB0aGUgbmV4dCBpbnRlcnZhbCAqLwotICAgIHF1ZXVlLT5sYXN0X2luX2VsYXBzZWQgPSBlbGFwc2VkOwotICAgIHF1ZXVlLT5ieXRlc19pbiA9IDA7Ci0gIH0KLQotICBpZiAocXVldWUtPmJ5dGVfaW5fcmF0ZSA+IDAuMCkgewotICAgIHF1ZXVlLT5jdXJfbGV2ZWwucmF0ZV90aW1lID0KLSAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyAvIHF1ZXVlLT5ieXRlX2luX3JhdGUgKiBHU1RfU0VDT05EOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicmF0ZXM6IGluICVmLCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIHF1ZXVlLT5ieXRlX2luX3JhdGUsIEdTVF9USU1FX0FSR1MgKHF1ZXVlLT5jdXJfbGV2ZWwucmF0ZV90aW1lKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfb3V0X3JhdGVzIChHc3RRdWV1ZTIgKiBxdWV1ZSkKLXsKLSAgZ2RvdWJsZSBlbGFwc2VkLCBwZXJpb2Q7Ci0gIGdkb3VibGUgYnl0ZV9vdXRfcmF0ZTsKLQotICBpZiAoIXF1ZXVlLT5vdXRfdGltZXJfc3RhcnRlZCkgewotICAgIHF1ZXVlLT5vdXRfdGltZXJfc3RhcnRlZCA9IFRSVUU7Ci0gICAgZ190aW1lcl9zdGFydCAocXVldWUtPm91dF90aW1lcik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgZWxhcHNlZCA9IGdfdGltZXJfZWxhcHNlZCAocXVldWUtPm91dF90aW1lciwgTlVMTCk7Ci0KLSAgLyogcmVjYWxjIGFmdGVyIGVhY2ggaW50ZXJ2YWwuICovCi0gIGlmIChxdWV1ZS0+bGFzdF9vdXRfZWxhcHNlZCArIFJBVEVfSU5URVJWQUwgPCBlbGFwc2VkKSB7Ci0gICAgcGVyaW9kID0gZWxhcHNlZCAtIHF1ZXVlLT5sYXN0X291dF9lbGFwc2VkOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCi0gICAgICAgICJyYXRlczogcGVyaW9kICVmLCBvdXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgcGVyaW9kLCBxdWV1ZS0+Ynl0ZXNfb3V0KTsKLQotICAgIGJ5dGVfb3V0X3JhdGUgPSBxdWV1ZS0+Ynl0ZXNfb3V0IC8gcGVyaW9kOwotCi0gICAgaWYgKHF1ZXVlLT5ieXRlX291dF9yYXRlID09IDAuMCkKLSAgICAgIHF1ZXVlLT5ieXRlX291dF9yYXRlID0gYnl0ZV9vdXRfcmF0ZTsKLSAgICBlbHNlCi0gICAgICBxdWV1ZS0+Ynl0ZV9vdXRfcmF0ZSA9IEFWR19PVVQgKHF1ZXVlLT5ieXRlX291dF9yYXRlLCBieXRlX291dF9yYXRlKTsKLQotICAgIC8qIHJlc2V0IHRoZSB2YWx1ZXMgdG8gY2FsY3VsYXRlIHJhdGUgb3ZlciB0aGUgbmV4dCBpbnRlcnZhbCAqLwotICAgIHF1ZXVlLT5sYXN0X291dF9lbGFwc2VkID0gZWxhcHNlZDsKLSAgICBxdWV1ZS0+Ynl0ZXNfb3V0ID0gMDsKLSAgfQotICBpZiAocXVldWUtPmJ5dGVfaW5fcmF0ZSA+IDAuMCkgewotICAgIHF1ZXVlLT5jdXJfbGV2ZWwucmF0ZV90aW1lID0KLSAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyAvIHF1ZXVlLT5ieXRlX2luX3JhdGUgKiBHU1RfU0VDT05EOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicmF0ZXM6IG91dCAlZiwgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBxdWV1ZS0+Ynl0ZV9vdXRfcmF0ZSwgR1NUX1RJTUVfQVJHUyAocXVldWUtPmN1cl9sZXZlbC5yYXRlX3RpbWUpKTsKLX0KLQotc3RhdGljIHZvaWQKLXVwZGF0ZV9jdXJfcG9zIChHc3RRdWV1ZTIgKiBxdWV1ZSwgR3N0UXVldWUyUmFuZ2UgKiByYW5nZSwgZ3VpbnQ2NCBwb3MpCi17Ci0gIGd1aW50NjQgcmVhZGluZ19wb3MsIG1heF9yZWFkaW5nX3BvczsKLQotICByZWFkaW5nX3BvcyA9IHBvczsKLSAgbWF4X3JlYWRpbmdfcG9zID0gcmFuZ2UtPm1heF9yZWFkaW5nX3BvczsKLQotICBtYXhfcmVhZGluZ19wb3MgPSBNQVggKG1heF9yZWFkaW5nX3BvcywgcmVhZGluZ19wb3MpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgInVwZGF0aW5nIG1heF9yZWFkaW5nX3BvcyBmcm9tICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiB0byAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgcmFuZ2UtPm1heF9yZWFkaW5nX3BvcywgbWF4X3JlYWRpbmdfcG9zKTsKLSAgcmFuZ2UtPm1heF9yZWFkaW5nX3BvcyA9IG1heF9yZWFkaW5nX3BvczsKLQotICB1cGRhdGVfY3VyX2xldmVsIChxdWV1ZSwgcmFuZ2UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBlcmZvcm1fc2Vla190b19vZmZzZXQgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBndWludDY0IG9mZnNldCkKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgLyogdW50aWwgd2UgcmVjZWl2ZSB0aGUgRkxVU0hfU1RPUCBmcm9tIHRoaXMgc2Vlaywgd2Ugc2tpcCBkYXRhICovCi0gIHF1ZXVlLT5zZWVraW5nID0gVFJVRTsKLSAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICBkZWJ1Z19yYW5nZXMgKHF1ZXVlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIlNlZWtpbmcgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLQotICBldmVudCA9Ci0gICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFLCBHU1RfU0VFS19UWVBFX1NFVCwgb2Zmc2V0LAotICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCAtMSk7Ci0KLSAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChxdWV1ZS0+c2lua3BhZCwgZXZlbnQpOwotICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLQotICBpZiAocmVzKSB7Ci0gICAgLyogQmV0d2VlbiB1cyBzZW5kaW5nIHRoZSBzZWVrIGV2ZW50IGFuZCByZS1hY3F1aXJpbmcgdGhlIGxvY2ssIHRoZSBzb3VyY2UKLSAgICAgKiB0aHJlYWQgbWlnaHQgYWxyZWFkeSBoYXZlIHB1c2hlZCBkYXRhIGFuZCBtb3ZlZCBhbG9uZyB0aGUgcmFuZ2UncwotICAgICAqIHdyaXRpbmdfcG9zIGJleW9uZCB0aGUgc2VlayBvZmZzZXQuIEluIHRoYXQgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHNldAotICAgICAqIHRoZSB3cml0aW5nIHBvc2l0aW9uIGJhY2sgdG8gdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLCBhcyBpdCB3b3VsZAotICAgICAqIGNhdXNlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgd3Jvbmcgb2Zmc2V0IGluIHRoZSBmaWxlIG9yIHJpbmcgYnVmZmVyLgotICAgICAqIFdlIHN0aWxsIGRvIHRoZSBhZGRfcmFuZ2UgY2FsbCB0byBzd2l0Y2ggdGhlIGN1cnJlbnQgcmFuZ2UgdG8gdGhlCi0gICAgICogcmVxdWVzdGVkIHJhbmdlLCBvciBjcmVhdGUgb25lIGlmIG9uZSBkb2Vzbid0IGV4aXN0IHlldC4gKi8KLSAgICBxdWV1ZS0+Y3VycmVudCA9IGFkZF9yYW5nZSAocXVldWUsIG9mZnNldCwgRkFMU0UpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogZ2V0IHRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgZGVjaWRlIHRvIHNlZWsgcmF0aGVyIHRoYW4gd2FpdCAqLwotc3RhdGljIGd1aW50NjQKLWdldF9zZWVrX3RocmVzaG9sZCAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIGd1aW50NjQgdGhyZXNob2xkOwotCi0gIC8qIEZJWE1FLCBmaW5kIGEgZ29vZCB0aHJlc2hvbGQgYmFzZWQgb24gdGhlIGluY29taW5nIHJhdGUuICovCi0gIHRocmVzaG9sZCA9IDEwMjQgKiA1MTI7Ci0KLSAgaWYgKFFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSIChxdWV1ZSkpIHsKLSAgICB0aHJlc2hvbGQgPSBNSU4gKHRocmVzaG9sZCwKLSAgICAgICAgUVVFVUVfTUFYX0JZVEVTIChxdWV1ZSkgLSBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzKTsKLSAgfQotICByZXR1cm4gdGhyZXNob2xkOwotfQotCi0vKiBzZWUgaWYgdGhlcmUgaXMgZW5vdWdoIGRhdGEgaW4gdGhlIGZpbGUgdG8gcmVhZCBhIGZ1bGwgYnVmZmVyICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9xdWV1ZTJfaGF2ZV9kYXRhIChHc3RRdWV1ZTIgKiBxdWV1ZSwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IGxlbmd0aCkKLXsKLSAgR3N0UXVldWUyUmFuZ2UgKnJhbmdlOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAibG9va2luZyBmb3Igb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgbGVuICV1IiwKLSAgICAgIG9mZnNldCwgbGVuZ3RoKTsKLQotICBpZiAoKHJhbmdlID0gZmluZF9yYW5nZSAocXVldWUsIG9mZnNldCkpKSB7Ci0gICAgaWYgKHF1ZXVlLT5jdXJyZW50ICE9IHJhbmdlKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgInN3aXRjaGluZyByYW5nZXMsIGRvIHNlZWsgdG8gcmFuZ2UgcG9zaXRpb24iKTsKLSAgICAgIHBlcmZvcm1fc2Vla190b19vZmZzZXQgKHF1ZXVlLCByYW5nZS0+d3JpdGluZ19wb3MpOwotICAgIH0KLQotICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsICJjdXJfbGV2ZWwuYnl0ZXMgJXUgKG1heCAlIiBHX0dVSU5UNjRfRk9STUFUICIpIiwKLSAgICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcywgUVVFVUVfTUFYX0JZVEVTIChxdWV1ZSkpOwotCi0gICAgLyogd2UgaGF2ZSBhIHJhbmdlIGZvciBvZmZzZXQgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgIndlIGhhdmUgYSByYW5nZSAlcCwgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgd3JpdGluZ19wb3MgJSIKLSAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgcmFuZ2UsIHJhbmdlLT5vZmZzZXQsIHJhbmdlLT53cml0aW5nX3Bvcyk7Ci0KLSAgICBpZiAoIVFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSIChxdWV1ZSkgJiYgcXVldWUtPmlzX2VvcykKLSAgICAgIHJldHVybiBUUlVFOwotCi0gICAgaWYgKG9mZnNldCArIGxlbmd0aCA8PSByYW5nZS0+d3JpdGluZ19wb3MpCi0gICAgICByZXR1cm4gVFJVRTsKLSAgICBlbHNlCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgICAiTmVlZCBtb3JlIGRhdGEgKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBieXRlcyBtb3JlKSIsCi0gICAgICAgICAgKG9mZnNldCArIGxlbmd0aCkgLSByYW5nZS0+d3JpdGluZ19wb3MpOwotCi0gIH0gZWxzZSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwgIm5vdCBmb3VuZCBpbiBhbnkgcmFuZ2Ugb2ZmICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgIiBsZW4gJXUiLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgLyogd2UgZG9uJ3QgaGF2ZSB0aGUgcmFuZ2UsIHNlZSBob3cgZmFyIGF3YXkgd2UgYXJlICovCi0gICAgaWYgKCFxdWV1ZS0+aXNfZW9zICYmIHF1ZXVlLT5jdXJyZW50KSB7Ci0gICAgICBndWludDY0IHRocmVzaG9sZCA9IGdldF9zZWVrX3RocmVzaG9sZCAocXVldWUpOwotCi0gICAgICBpZiAob2Zmc2V0ID49IHF1ZXVlLT5jdXJyZW50LT5vZmZzZXQgJiYgb2Zmc2V0IDw9Ci0gICAgICAgICAgcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zICsgdGhyZXNob2xkKSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsCi0gICAgICAgICAgICAicmVxdWVzdGVkIGRhdGEgaXMgd2l0aGluIHJhbmdlLCB3YWl0IGZvciBkYXRhIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiB0b28gZmFyIGF3YXksIGRvIGEgc2VlayAqLwotICAgIHBlcmZvcm1fc2Vla190b19vZmZzZXQgKHF1ZXVlLCBvZmZzZXQpOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0jaWZkZWYgSEFWRV9GU0VFS08KLSNkZWZpbmUgRlNFRUtfRklMRShmaWxlLG9mZnNldCkgIChmc2Vla28gKGZpbGUsIChvZmZfdCkgb2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkKLSNlbGlmIGRlZmluZWQgKEdfT1NfVU5JWCkgfHwgZGVmaW5lZCAoR19PU19XSU4zMikKLSNkZWZpbmUgRlNFRUtfRklMRShmaWxlLG9mZnNldCkgIChsc2VlayAoZmlsZW5vIChmaWxlKSwgKG9mZl90KSBvZmZzZXQsIFNFRUtfU0VUKSA9PSAob2ZmX3QpIC0xKQotI2Vsc2UKLSNkZWZpbmUgRlNFRUtfRklMRShmaWxlLG9mZnNldCkgIChmc2VlayAoZmlsZSwgb2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkKLSNlbmRpZgotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F1ZXVlMl9yZWFkX2RhdGFfYXRfb2Zmc2V0IChHc3RRdWV1ZTIgKiBxdWV1ZSwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IGxlbmd0aCwKLSAgICBndWludDggKiBkc3QsIGdpbnQ2NCAqIHJlYWRfcmV0dXJuKQotewotICBndWludDggKnJpbmdfYnVmZmVyOwotICBzaXplX3QgcmVzOwotCi0gIHJpbmdfYnVmZmVyID0gcXVldWUtPnJpbmdfYnVmZmVyOwotCi0gIGlmIChRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKSAmJiBGU0VFS19GSUxFIChxdWV1ZS0+dGVtcF9maWxlLCBvZmZzZXQpKQotICAgIGdvdG8gc2Vla19mYWlsZWQ7Ci0KLSAgLyogdGhpcyBzaG91bGQgbm90IGJsb2NrICovCi0gIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgIlJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIGxlbmd0aCwgb2Zmc2V0KTsKLSAgaWYgKFFVRVVFX0lTX1VTSU5HX1RFTVBfRklMRSAocXVldWUpKSB7Ci0gICAgcmVzID0gZnJlYWQgKGRzdCwgMSwgbGVuZ3RoLCBxdWV1ZS0+dGVtcF9maWxlKTsKLSAgfSBlbHNlIHsKLSAgICBtZW1jcHkgKGRzdCwgcmluZ19idWZmZXIgKyBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgcmVzID0gbGVuZ3RoOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF1ZXVlLCAicmVhZCAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgcmVzKTsKLQotICBpZiAoR19VTkxJS0VMWSAocmVzIDwgbGVuZ3RoKSkgewotICAgIGlmICghUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpCi0gICAgICBnb3RvIGNvdWxkX25vdF9yZWFkOwotICAgIC8qIGNoZWNrIGZvciBlcnJvcnMgb3IgRU9GICovCi0gICAgaWYgKGZlcnJvciAocXVldWUtPnRlbXBfZmlsZSkpCi0gICAgICBnb3RvIGNvdWxkX25vdF9yZWFkOwotICAgIGlmIChmZW9mIChxdWV1ZS0+dGVtcF9maWxlKSAmJiBsZW5ndGggPiAwKQotICAgICAgZ290byBlb3M7Ci0gIH0KLQotICAqcmVhZF9yZXR1cm4gPSByZXM7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi1zZWVrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdWV1ZSwgUkVTT1VSQ0UsIFNFRUssIChOVUxMKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1jb3VsZF9ub3RfcmVhZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdWV1ZSwgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJub24tcmVndWxhciBmaWxlIGhpdHMgRU9TIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F1ZXVlMl9jcmVhdGVfcmVhZCAoR3N0UXVldWUyICogcXVldWUsIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsCi0gICAgR3N0QnVmZmVyICoqIGJ1ZmZlcikKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLSAgZ3VpbnQ4ICpkYXRhOwotICBndWludDY0IGZpbGVfb2Zmc2V0OwotICBndWludCBibG9ja19sZW5ndGgsIHJlbWFpbmluZywgcmVhZF9sZW5ndGg7Ci0gIGd1aW50NjQgcmJfc2l6ZTsKLSAgZ3VpbnQ2NCBtYXhfc2l6ZTsKLSAgZ3VpbnQ2NCBycG9zOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIC8qIGFsbG9jYXRlIHRoZSBvdXRwdXQgYnVmZmVyIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZSAqLwotICBpZiAoKmJ1ZmZlciA9PSBOVUxMKQotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBsZW5ndGgsIE5VTEwpOwotICBlbHNlCi0gICAgYnVmID0gKmJ1ZmZlcjsKLQotICBpZiAoIWdzdF9idWZmZXJfbWFwIChidWYsICZpbmZvLCBHU1RfTUFQX1dSSVRFKSkKLSAgICBnb3RvIGJ1ZmZlcl93cml0ZV9mYWlsOwotICBkYXRhID0gaW5mby5kYXRhOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiUmVhZGluZyAldSBieXRlcyBmcm9tICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGxlbmd0aCwKLSAgICAgIG9mZnNldCk7Ci0KLSAgcnBvcyA9IG9mZnNldDsKLSAgcmJfc2l6ZSA9IHF1ZXVlLT5yaW5nX2J1ZmZlcl9tYXhfc2l6ZTsKLSAgbWF4X3NpemUgPSBRVUVVRV9NQVhfQllURVMgKHF1ZXVlKTsKLQotICByZW1haW5pbmcgPSBsZW5ndGg7Ci0gIHdoaWxlIChyZW1haW5pbmcgPiAwKSB7Ci0gICAgLyogY29uZmlndXJlIGhvdyBtdWNoL3doZXRoZXIgdG8gcmVhZCAqLwotICAgIGlmICghZ3N0X3F1ZXVlMl9oYXZlX2RhdGEgKHF1ZXVlLCBycG9zLCByZW1haW5pbmcpKSB7Ci0gICAgICByZWFkX2xlbmd0aCA9IDA7Ci0KLSAgICAgIGlmIChRVUVVRV9JU19VU0lOR19SSU5HX0JVRkZFUiAocXVldWUpKSB7Ci0gICAgICAgIGd1aW50NjQgbGV2ZWw7Ci0KLSAgICAgICAgLyogY2FsY3VsYXRlIGhvdyBmYXIgYXdheSB0aGUgb2Zmc2V0IGlzICovCi0gICAgICAgIGlmIChxdWV1ZS0+Y3VycmVudC0+d3JpdGluZ19wb3MgPiBycG9zKQotICAgICAgICAgIGxldmVsID0gcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zIC0gcnBvczsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGxldmVsID0gMDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgICAgICJyZWFkaW5nICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgd3JpdGluZyAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAiLCBsZXZlbCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIG1heCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgcnBvcywgcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zLCBsZXZlbCwgbWF4X3NpemUpOwotCi0gICAgICAgIGlmIChsZXZlbCA+PSBtYXhfc2l6ZSkgewotICAgICAgICAgIC8qIHdlIGRvbid0IGhhdmUgdGhlIGRhdGEgYnV0IGlmIHdlIGhhdmUgYSByaW5nIGJ1ZmZlciB0aGF0IGlzIGZ1bGwsIHdlCi0gICAgICAgICAgICogbmVlZCB0byByZWFkICovCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCi0gICAgICAgICAgICAgICJyaW5nIGJ1ZmZlciBmdWxsLCByZWFkaW5nIFFVRVVFX01BWF9CWVRFUyAlIgotICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMiLCBtYXhfc2l6ZSk7Ci0gICAgICAgICAgcmVhZF9sZW5ndGggPSBtYXhfc2l6ZTsKLSAgICAgICAgfSBlbHNlIGlmIChxdWV1ZS0+aXNfZW9zKSB7Ci0gICAgICAgICAgLyogd29uJ3QgZ2V0IGFueSBtb3JlIGRhdGEgc28gcmVhZCBhbnkgZGF0YSB3ZSBoYXZlICovCi0gICAgICAgICAgaWYgKGxldmVsKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgICAgICAgICAiRU9TIGhpdCBidXQgcmVhZCAlIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMgdGhhdCB3ZSBoYXZlIiwKLSAgICAgICAgICAgICAgICBsZXZlbCk7Ci0gICAgICAgICAgICByZWFkX2xlbmd0aCA9IGxldmVsOwotICAgICAgICAgICAgcmVtYWluaW5nID0gbGV2ZWw7Ci0gICAgICAgICAgICBsZW5ndGggPSBsZXZlbDsKLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGdvdG8gaGl0X2VvczsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAocmVhZF9sZW5ndGggPT0gMCkgewotICAgICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAgICAgICAidXBkYXRlIGN1cnJlbnQgcG9zaXRpb24gWyUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIgotICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICJdIiwgcnBvcywgcXVldWUtPmN1cnJlbnQtPm1heF9yZWFkaW5nX3Bvcyk7Ci0gICAgICAgICAgdXBkYXRlX2N1cl9wb3MgKHF1ZXVlLCBxdWV1ZS0+Y3VycmVudCwgcnBvcyk7Ci0gICAgICAgICAgR1NUX1FVRVVFMl9TSUdOQUxfREVMIChxdWV1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocXVldWUtPnVzZV9idWZmZXJpbmcpCi0gICAgICAgICAgdXBkYXRlX2J1ZmZlcmluZyAocXVldWUpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAid2FpdGluZyBmb3IgYWRkIik7Ci0gICAgICAgIEdTVF9RVUVVRTJfV0FJVF9BRERfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c3JjcmVzdWx0LCBvdXRfZmx1c2hpbmcpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogd2UgaGF2ZSB0aGUgcmVxdWVzdGVkIGRhdGEgc28gcmVhZCBpdCAqLwotICAgICAgcmVhZF9sZW5ndGggPSByZW1haW5pbmc7Ci0gICAgfQotCi0gICAgLyogc2V0IHJhbmdlIHJlYWRpbmdfcG9zIHRvIGFjdHVhbCByZWFkaW5nIHBvc2l0aW9uIGZvciB0aGlzIHJlYWQgKi8KLSAgICBxdWV1ZS0+Y3VycmVudC0+cmVhZGluZ19wb3MgPSBycG9zOwotCi0gICAgLyogY29uZmlndXJlIGhvdyBtdWNoIGFuZCBmcm9tIHdoZXJlIHRvIHJlYWQgKi8KLSAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgewotICAgICAgZmlsZV9vZmZzZXQgPQotICAgICAgICAgIChxdWV1ZS0+Y3VycmVudC0+cmJfb2Zmc2V0ICsgKHJwb3MgLQotICAgICAgICAgICAgICBxdWV1ZS0+Y3VycmVudC0+b2Zmc2V0KSkgJSByYl9zaXplOwotICAgICAgaWYgKGZpbGVfb2Zmc2V0ICsgcmVhZF9sZW5ndGggPiByYl9zaXplKSB7Ci0gICAgICAgIGJsb2NrX2xlbmd0aCA9IHJiX3NpemUgLSBmaWxlX29mZnNldDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGJsb2NrX2xlbmd0aCA9IHJlYWRfbGVuZ3RoOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBmaWxlX29mZnNldCA9IHJwb3M7Ci0gICAgICBibG9ja19sZW5ndGggPSByZWFkX2xlbmd0aDsKLSAgICB9Ci0KLSAgICAvKiB3aGlsZSB3ZSBzdGlsbCBoYXZlIGRhdGEgdG8gcmVhZCwgd2UgbG9vcCAqLwotICAgIHdoaWxlIChyZWFkX2xlbmd0aCA+IDApIHsKLSAgICAgIGdpbnQ2NCByZWFkX3JldHVybjsKLQotICAgICAgcmV0ID0KLSAgICAgICAgICBnc3RfcXVldWUyX3JlYWRfZGF0YV9hdF9vZmZzZXQgKHF1ZXVlLCBmaWxlX29mZnNldCwgYmxvY2tfbGVuZ3RoLAotICAgICAgICAgIGRhdGEsICZyZWFkX3JldHVybik7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIHJlYWRfZXJyb3I7Ci0KLSAgICAgIGZpbGVfb2Zmc2V0ICs9IHJlYWRfcmV0dXJuOwotICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSIChxdWV1ZSkpCi0gICAgICAgIGZpbGVfb2Zmc2V0ICU9IHJiX3NpemU7Ci0KLSAgICAgIGRhdGEgKz0gcmVhZF9yZXR1cm47Ci0gICAgICByZWFkX2xlbmd0aCAtPSByZWFkX3JldHVybjsKLSAgICAgIGJsb2NrX2xlbmd0aCA9IHJlYWRfbGVuZ3RoOwotICAgICAgcmVtYWluaW5nIC09IHJlYWRfcmV0dXJuOwotCi0gICAgICBycG9zID0gKHF1ZXVlLT5jdXJyZW50LT5yZWFkaW5nX3BvcyArPSByZWFkX3JldHVybik7Ci0gICAgICB1cGRhdGVfY3VyX3BvcyAocXVldWUsIHF1ZXVlLT5jdXJyZW50LCBxdWV1ZS0+Y3VycmVudC0+cmVhZGluZ19wb3MpOwotICAgIH0KLSAgICBHU1RfUVVFVUUyX1NJR05BTF9ERUwgKHF1ZXVlKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIiV1IGJ5dGVzIGxlZnQgdG8gcmVhZCIsIHJlbWFpbmluZyk7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLSAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgbGVuZ3RoKTsKLQotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IG9mZnNldDsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gb2Zmc2V0ICsgbGVuZ3RoOwotCi0gICpidWZmZXIgPSBidWY7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWhpdF9lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIkVPUyBoaXQgYW5kIHdlIGRvbid0IGhhdmUgYW55IHJlcXVlc3RlZCBkYXRhIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mbyk7Ci0gICAgaWYgKCpidWZmZXIgPT0gTlVMTCkKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJ3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLSAgICBpZiAoKmJ1ZmZlciA9PSBOVUxMKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLXJlYWRfZXJyb3I6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIndlIGhhdmUgYSByZWFkIGVycm9yIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mbyk7Ci0gICAgaWYgKCpidWZmZXIgPT0gTlVMTCkKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotYnVmZmVyX3dyaXRlX2ZhaWw6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXVldWUsIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLAotICAgICAgICAoIkNhbid0IHdyaXRlIHRvIGJ1ZmZlciIpKTsKLSAgICBpZiAoKmJ1ZmZlciA9PSBOVUxMKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIFFVRVVFX0xPQ0sgKi8KLXN0YXRpYyBHc3RNaW5pT2JqZWN0ICoKLWdzdF9xdWV1ZTJfcmVhZF9pdGVtX2Zyb21fZmlsZSAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIEdzdE1pbmlPYmplY3QgKml0ZW07Ci0KLSAgaWYgKHF1ZXVlLT5zdHJlYW1fc3RhcnRfZXZlbnQgIT0gTlVMTCkgewotICAgIGl0ZW0gPSBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocXVldWUtPnN0cmVhbV9zdGFydF9ldmVudCk7Ci0gICAgcXVldWUtPnN0cmVhbV9zdGFydF9ldmVudCA9IE5VTEw7Ci0gIH0gZWxzZSBpZiAocXVldWUtPnN0YXJ0aW5nX3NlZ21lbnQgIT0gTlVMTCkgewotICAgIGl0ZW0gPSBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocXVldWUtPnN0YXJ0aW5nX3NlZ21lbnQpOwotICAgIHF1ZXVlLT5zdGFydGluZ19zZWdtZW50ID0gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICBHc3RGbG93UmV0dXJuIHJldDsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IE5VTEw7Ci0gICAgZ3VpbnQ2NCByZWFkaW5nX3BvczsKLQotICAgIHJlYWRpbmdfcG9zID0gcXVldWUtPmN1cnJlbnQtPnJlYWRpbmdfcG9zOwotCi0gICAgcmV0ID0KLSAgICAgICAgZ3N0X3F1ZXVlMl9jcmVhdGVfcmVhZCAocXVldWUsIHJlYWRpbmdfcG9zLCBERUZBVUxUX0JVRkZFUl9TSVpFLAotICAgICAgICAmYnVmZmVyKTsKLQotICAgIHN3aXRjaCAocmV0KSB7Ci0gICAgICBjYXNlIEdTVF9GTE9XX09LOgotICAgICAgICBpdGVtID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfRkxPV19FT1M6Ci0gICAgICAgIGl0ZW0gPSBHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGl0ZW0gPSBOVUxMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGl0ZW07Ci19Ci0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggTVVURVhfTE9DSy4gV2lsbCBicmllZmx5IHJlbGVhc2UgdGhlIGxvY2sgd2hlbiBub3RpZnlpbmcKLSAqIHRoZSB0ZW1wIGZpbGVuYW1lLiAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcXVldWUyX29wZW5fdGVtcF9sb2NhdGlvbl9maWxlIChHc3RRdWV1ZTIgKiBxdWV1ZSkKLXsKLSAgZ2ludCBmZCA9IC0xOwotICBnY2hhciAqbmFtZSA9IE5VTEw7Ci0KLSAgaWYgKHF1ZXVlLT50ZW1wX2ZpbGUpCi0gICAgZ290byBhbHJlYWR5X29wZW5lZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIm9wZW5pbmcgdGVtcCBmaWxlICVzIiwgcXVldWUtPnRlbXBfdGVtcGxhdGUpOwotCi0gIC8qIElmIHRlbXBfdGVtcGxhdGUgd2FzIHNldCwgYWxsb2NhdGUgYSBmaWxlbmFtZSBhbmQgb3BlbiB0aGF0IGZpbGUgKi8KLQotICAvKiBub3RoaW5nIHRvIGRvICovCi0gIGlmIChxdWV1ZS0+dGVtcF90ZW1wbGF0ZSA9PSBOVUxMKQotICAgIGdvdG8gbm9fZGlyZWN0b3J5OwotCi0gIC8qIG1ha2UgY29weSBvZiB0aGUgdGVtcGxhdGUsIHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoaXMgKi8KLSAgbmFtZSA9IGdfc3RyZHVwIChxdWV1ZS0+dGVtcF90ZW1wbGF0ZSk7Ci0KLSNpZmRlZiBfX0JJT05JQ19fCi0gIGZkID0gZ19ta3N0ZW1wX2Z1bGwgKG5hbWUsIE9fUkRXUiB8IE9fTEFSR0VGSUxFLCBTX0lSVVNSIHwgU19JV1VTUik7Ci0jZWxzZQotICBmZCA9IGdfbWtzdGVtcCAobmFtZSk7Ci0jZW5kaWYKLQotICBpZiAoZmQgPT0gLTEpCi0gICAgZ290byBta3N0ZW1wX2ZhaWxlZDsKLQotICAvKiBvcGVuIHRoZSBmaWxlIGZvciB1cGRhdGUvd3JpdGluZyAqLwotICBxdWV1ZS0+dGVtcF9maWxlID0gZmRvcGVuIChmZCwgIndiKyIpOwotICAvKiBlcnJvciBjcmVhdGluZyBmaWxlICovCi0gIGlmIChxdWV1ZS0+dGVtcF9maWxlID09IE5VTEwpCi0gICAgZ290byBvcGVuX2ZhaWxlZDsKLQotICBnX2ZyZWUgKHF1ZXVlLT50ZW1wX2xvY2F0aW9uKTsKLSAgcXVldWUtPnRlbXBfbG9jYXRpb24gPSBuYW1lOwotCi0gIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgLyogd2UgY2FuJ3QgZW1pdCB0aGUgbm90aWZ5IHdpdGggdGhlIGxvY2sgKi8KLSAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAocXVldWUpLCAidGVtcC1sb2NhdGlvbiIpOwotCi0gIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAib3BlbmVkIHRlbXAgZmlsZSAlcyIsIHF1ZXVlLT50ZW1wX3RlbXBsYXRlKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWFscmVhZHlfb3BlbmVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJ0ZW1wIGZpbGUgd2FzIGFscmVhZHkgb3BlbiIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci1ub19kaXJlY3Rvcnk6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXVldWUsIFJFU09VUkNFLCBOT1RfRk9VTkQsCi0gICAgICAgIChfKCJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIikpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbWtzdGVtcF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXVldWUsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgIChfKCJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIiksIHF1ZXVlLT50ZW1wX3RlbXBsYXRlKSwKLSAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW9wZW5fZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF1ZXVlLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAoXygiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIiksIG5hbWUpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGlmIChmZCAhPSAtMSkKLSAgICAgIGNsb3NlIChmZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVldWUyX2Nsb3NlX3RlbXBfbG9jYXRpb25fZmlsZSAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIC8qIG5vdGhpbmcgdG8gZG8gKi8KLSAgaWYgKHF1ZXVlLT50ZW1wX2ZpbGUgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJjbG9zaW5nIHRlbXAgZmlsZSIpOwotCi0gIGZmbHVzaCAocXVldWUtPnRlbXBfZmlsZSk7Ci0gIGZjbG9zZSAocXVldWUtPnRlbXBfZmlsZSk7Ci0KLSAgaWYgKHF1ZXVlLT50ZW1wX3JlbW92ZSkgewotICAgIGlmIChyZW1vdmUgKHF1ZXVlLT50ZW1wX2xvY2F0aW9uKSA8IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXVldWUsICJGYWlsZWQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlICVzOiAlcyIsCi0gICAgICAgICAgcXVldWUtPnRlbXBfbG9jYXRpb24sIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgfQotICB9Ci0KLSAgcXVldWUtPnRlbXBfZmlsZSA9IE5VTEw7Ci0gIGNsZWFuX3JhbmdlcyAocXVldWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F1ZXVlMl9mbHVzaF90ZW1wX2ZpbGUgKEdzdFF1ZXVlMiAqIHF1ZXVlKQotewotICBpZiAocXVldWUtPnRlbXBfZmlsZSA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImZsdXNoaW5nIHRlbXAgZmlsZSIpOwotCi0gIHF1ZXVlLT50ZW1wX2ZpbGUgPSBnX2ZyZW9wZW4gKHF1ZXVlLT50ZW1wX2xvY2F0aW9uLCAid2IrIiwgcXVldWUtPnRlbXBfZmlsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVldWUyX2xvY2tlZF9mbHVzaCAoR3N0UXVldWUyICogcXVldWUsIGdib29sZWFuIGZ1bGwsIGdib29sZWFuIGNsZWFyX3RlbXApCi17Ci0gIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgewotICAgIGlmIChRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKSAmJiBjbGVhcl90ZW1wKQotICAgICAgZ3N0X3F1ZXVlMl9mbHVzaF90ZW1wX2ZpbGUgKHF1ZXVlKTsKLSAgICBpbml0X3JhbmdlcyAocXVldWUpOwotICB9IGVsc2UgewotICAgIHdoaWxlICghZ19xdWV1ZV9pc19lbXB0eSAoJnF1ZXVlLT5xdWV1ZSkpIHsKLSAgICAgIEdzdFF1ZXVlMkl0ZW0gKnFpdGVtID0gZ19xdWV1ZV9wb3BfaGVhZCAoJnF1ZXVlLT5xdWV1ZSk7Ci0KLSAgICAgIGlmICghZnVsbCAmJiBxaXRlbS0+dHlwZSA9PSBHU1RfUVVFVUUyX0lURU1fVFlQRV9FVkVOVAotICAgICAgICAgICYmIEdTVF9FVkVOVF9JU19TVElDS1kgKHFpdGVtLT5pdGVtKQotICAgICAgICAgICYmIEdTVF9FVkVOVF9UWVBFIChxaXRlbS0+aXRlbSkgIT0gR1NUX0VWRU5UX1NFR01FTlQKLSAgICAgICAgICAmJiBHU1RfRVZFTlRfVFlQRSAocWl0ZW0tPml0ZW0pICE9IEdTVF9FVkVOVF9FT1MpIHsKLSAgICAgICAgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsCi0gICAgICAgICAgICBHU1RfRVZFTlRfQ0FTVCAocWl0ZW0tPml0ZW0pKTsKLSAgICAgIH0KLQotICAgICAgLyogVGhlbiBsb3NlIGFub3RoZXIgcmVmZXJlbmNlIGJlY2F1c2Ugd2UgYXJlIHN1cHBvc2VkIHRvIGRlc3Ryb3kgdGhhdAotICAgICAgICAgZGF0YSB3aGVuIGZsdXNoaW5nICovCi0gICAgICBpZiAocWl0ZW0tPnR5cGUgIT0gR1NUX1FVRVVFMl9JVEVNX1RZUEVfUVVFUlkpCi0gICAgICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAocWl0ZW0tPml0ZW0pOwotICAgICAgZ19zbGljZV9mcmVlIChHc3RRdWV1ZTJJdGVtLCBxaXRlbSk7Ci0gICAgfQotICB9Ci0gIHF1ZXVlLT5sYXN0X3F1ZXJ5ID0gRkFMU0U7Ci0gIGdfY29uZF9zaWduYWwgKCZxdWV1ZS0+cXVlcnlfaGFuZGxlZCk7Ci0gIEdTVF9RVUVVRTJfQ0xFQVJfTEVWRUwgKHF1ZXVlLT5jdXJfbGV2ZWwpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmcXVldWUtPnNpbmtfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnF1ZXVlLT5zcmNfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgcXVldWUtPnNpbmt0aW1lID0gcXVldWUtPnNyY3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBxdWV1ZS0+c2lua190YWludGVkID0gcXVldWUtPnNyY190YWludGVkID0gVFJVRTsKLSAgaWYgKHF1ZXVlLT5zdGFydGluZ19zZWdtZW50ICE9IE5VTEwpCi0gICAgZ3N0X2V2ZW50X3VucmVmIChxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCk7Ci0gIHF1ZXVlLT5zdGFydGluZ19zZWdtZW50ID0gTlVMTDsKLSAgcXVldWUtPnNlZ21lbnRfZXZlbnRfcmVjZWl2ZWQgPSBGQUxTRTsKLSAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZxdWV1ZS0+c3RyZWFtX3N0YXJ0X2V2ZW50LCBOVUxMKTsKLQotICAvKiB3ZSBkZWxldGVkIGEgbG90IG9mIHNvbWV0aGluZyAqLwotICBHU1RfUVVFVUUyX1NJR05BTF9ERUwgKHF1ZXVlKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXVldWUyX3dhaXRfZnJlZV9zcGFjZSAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIC8qIFdlIG1ha2Ugc3BhY2UgYXZhaWxhYmxlIGlmIHdlJ3JlICJmdWxsIiBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIKLSAgICogdGhlIHVzZXIgZGVmaW5lZCBhcyAiZnVsbCIuICovCi0gIGlmIChnc3RfcXVldWUyX2lzX2ZpbGxlZCAocXVldWUpKSB7Ci0gICAgZ2Jvb2xlYW4gc3RhcnRlZDsKLQotICAgIC8qIHBhdXNlIHRoZSB0aW1lciB3aGlsZSB3ZSB3YWl0LiBUaGUgZmFjdCB0aGF0IHdlIGFyZSB3YWl0aW5nIGRvZXMgbm90IG1lYW4KLSAgICAgKiB0aGUgYnl0ZXJhdGUgb24gdGhlIGlucHV0IHBhZCBpcyBsb3dlciAqLwotICAgIGlmICgoc3RhcnRlZCA9IHF1ZXVlLT5pbl90aW1lcl9zdGFydGVkKSkKLSAgICAgIGdfdGltZXJfc3RvcCAocXVldWUtPmluX3RpbWVyKTsKLQotICAgIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICJxdWV1ZSBpcyBmdWxsLCB3YWl0aW5nIGZvciBmcmVlIHNwYWNlIik7Ci0gICAgZG8gewotICAgICAgLyogV2FpdCBmb3Igc3BhY2UgdG8gYmUgYXZhaWxhYmxlLCB3ZSBjb3VsZCBiZSB1bmxvY2tlZCBiZWNhdXNlIG9mIGEgZmx1c2guICovCi0gICAgICBHU1RfUVVFVUUyX1dBSVRfREVMX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNpbmtyZXN1bHQsIG91dF9mbHVzaGluZyk7Ci0gICAgfQotICAgIHdoaWxlIChnc3RfcXVldWUyX2lzX2ZpbGxlZCAocXVldWUpKTsKLQotICAgIC8qIGFuZCBjb250aW51ZSBpZiB3ZSB3ZXJlIHJ1bm5pbmcgYmVmb3JlICovCi0gICAgaWYgKHN0YXJ0ZWQpCi0gICAgICBnX3RpbWVyX2NvbnRpbnVlIChxdWV1ZS0+aW5fdGltZXIpOwotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgInF1ZXVlIGlzIGZsdXNoaW5nIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1ZXVlMl9jcmVhdGVfd3JpdGUgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE1hcEluZm8gaW5mbzsKLSAgZ3VpbnQ4ICpkYXRhLCAqcmluZ19idWZmZXI7Ci0gIGd1aW50IHNpemUsIHJiX3NpemU7Ci0gIGd1aW50NjQgd3JpdGluZ19wb3MsIG5ld193cml0aW5nX3BvczsKLSAgR3N0UXVldWUyUmFuZ2UgKnJhbmdlLCAqcHJldiwgKm5leHQ7Ci0gIGdib29sZWFuIGRvX3NlZWsgPSBGQUxTRTsKLQotICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkKLSAgICB3cml0aW5nX3BvcyA9IHF1ZXVlLT5jdXJyZW50LT5yYl93cml0aW5nX3BvczsKLSAgZWxzZQotICAgIHdyaXRpbmdfcG9zID0gcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zOwotICByaW5nX2J1ZmZlciA9IHF1ZXVlLT5yaW5nX2J1ZmZlcjsKLSAgcmJfc2l6ZSA9IHF1ZXVlLT5yaW5nX2J1ZmZlcl9tYXhfc2l6ZTsKLQotICBpZiAoIWdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpKQotICAgIGdvdG8gYnVmZmVyX3JlYWRfZXJyb3I7Ci0KLSAgc2l6ZSA9IGluZm8uc2l6ZTsKLSAgZGF0YSA9IGluZm8uZGF0YTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIldyaXRpbmcgJXUgYnl0ZXMgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgc2l6ZSwKLSAgICAgIHdyaXRpbmdfcG9zKTsKLQotICAvKiBzYW5pdHkgY2hlY2sgKi8KLSAgaWYgKEdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEIChidWZmZXIpICYmCi0gICAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSAhPSBxdWV1ZS0+Y3VycmVudC0+d3JpdGluZ19wb3MpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF1ZXVlLCAiYnVmZmVyIG9mZnNldCBkb2VzIG5vdCBtYXRjaCBjdXJyZW50IHdyaXRpbmcgIgotICAgICAgICAicG9zaXRpb24hICUiIEdfR0lOVDY0X0ZPUk1BVCAiICE9ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlciksIHF1ZXVlLT5jdXJyZW50LT53cml0aW5nX3Bvcyk7Ci0gIH0KLQotICB3aGlsZSAoc2l6ZSA+IDApIHsKLSAgICBndWludCB0b193cml0ZTsKLQotICAgIGlmIChRVUVVRV9JU19VU0lOR19SSU5HX0JVRkZFUiAocXVldWUpKSB7Ci0gICAgICBnaW50NjQgc3BhY2U7Ci0KLSAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgc3BhY2UgaW4gdGhlIHJpbmcgYnVmZmVyIG5vdCB1c2VkIGJ5IGRhdGEgZnJvbQotICAgICAgICogdGhlIGN1cnJlbnQgcmFuZ2UgKi8KLSAgICAgIHdoaWxlIChRVUVVRV9NQVhfQllURVMgKHF1ZXVlKSA8PSBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzKSB7Ci0gICAgICAgIC8qIHdhaXQgdW50aWwgdGhlcmUgaXMgc29tZSBmcmVlIHNwYWNlICovCi0gICAgICAgIEdTVF9RVUVVRTJfV0FJVF9ERUxfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c2lua3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgICAgIH0KLSAgICAgIC8qIGdldCB0aGUgYW1vdW50IG9mIHNwYWNlIHdlIGhhdmUgKi8KLSAgICAgIHNwYWNlID0gUVVFVUVfTUFYX0JZVEVTIChxdWV1ZSkgLSBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzOwotCi0gICAgICAvKiBjYWxjdWxhdGUgaWYgd2UgbmVlZCB0byBzcGxpdCBvciBpZiB3ZSBjYW4gd3JpdGUgdGhlIGVudGlyZQotICAgICAgICogYnVmZmVyIG5vdyAqLwotICAgICAgdG9fd3JpdGUgPSBNSU4gKHNpemUsIHNwYWNlKTsKLQotICAgICAgLyogdGhlIHdyaXRpbmcgcG9zaXRpb24gaW4gdGhlIHJpbmcgYnVmZmVyIGFmdGVyIHdyaXRpbmcgKHBhcnQKLSAgICAgICAqIG9yIGFsbCBvZikgdGhlIGJ1ZmZlciAqLwotICAgICAgbmV3X3dyaXRpbmdfcG9zID0gKHdyaXRpbmdfcG9zICsgdG9fd3JpdGUpICUgcmJfc2l6ZTsKLQotICAgICAgcHJldiA9IE5VTEw7Ci0gICAgICByYW5nZSA9IHF1ZXVlLT5yYW5nZXM7Ci0KLSAgICAgIC8qIGlmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIGRhdGEgaW4gdGhlIHJpbmcgYnVmZmVyLCB3ZSBuZWVkIHRvCi0gICAgICAgKiB1cGRhdGUgdGhlIHJhbmdlcwotICAgICAgICoKLSAgICAgICAqIHdhcm5pbmc6IHRoaXMgY29kZSBpcyBjb21wbGljYXRlZCBhbmQgaW5jbHVkZXMgc29tZQotICAgICAgICogc2ltcGxpZmljYXRpb25zIC0gcGVuLCBwYXBlciBhbmQgZGlhZ3JhbXMgZm9yIHRoZSBjYXNlcwotICAgICAgICogcmVjb21tZW5kZWQhICovCi0gICAgICB3aGlsZSAocmFuZ2UpIHsKLSAgICAgICAgZ3VpbnQ2NCByYW5nZV9kYXRhX3N0YXJ0LCByYW5nZV9kYXRhX2VuZDsKLSAgICAgICAgR3N0UXVldWUyUmFuZ2UgKnJhbmdlX3RvX2Rlc3Ryb3kgPSBOVUxMOwotCi0gICAgICAgIGlmIChyYW5nZSA9PSBxdWV1ZS0+Y3VycmVudCkKLSAgICAgICAgICBnb3RvIG5leHRfcmFuZ2U7Ci0KLSAgICAgICAgcmFuZ2VfZGF0YV9zdGFydCA9IHJhbmdlLT5yYl9vZmZzZXQ7Ci0gICAgICAgIHJhbmdlX2RhdGFfZW5kID0gcmFuZ2UtPnJiX3dyaXRpbmdfcG9zOwotCi0gICAgICAgIC8qIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSByYW5nZSBoYXMgbm8gZGF0YSBpbiBpdCAqLwotICAgICAgICBpZiAocmFuZ2UtPndyaXRpbmdfcG9zID09IHJhbmdlLT5vZmZzZXQpIHsKLSAgICAgICAgICBpZiAocmFuZ2UgIT0gcXVldWUtPmN1cnJlbnQpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAgICAgICAgICJSZW1vdmluZyByYW5nZTogb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgd3BvcyAlIgotICAgICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIHJhbmdlLT5vZmZzZXQsIHJhbmdlLT53cml0aW5nX3Bvcyk7Ci0gICAgICAgICAgICAvKiByZW1vdmUgcmFuZ2UgKi8KLSAgICAgICAgICAgIHJhbmdlX3RvX2Rlc3Ryb3kgPSByYW5nZTsKLSAgICAgICAgICAgIGlmIChwcmV2KQotICAgICAgICAgICAgICBwcmV2LT5uZXh0ID0gcmFuZ2UtPm5leHQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdvdG8gbmV4dF9yYW5nZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyYW5nZV9kYXRhX2VuZCA+IHJhbmdlX2RhdGFfc3RhcnQpIHsKLSAgICAgICAgICBpZiAod3JpdGluZ19wb3MgPj0gcmFuZ2VfZGF0YV9lbmQgJiYgbmV3X3dyaXRpbmdfcG9zID49IHdyaXRpbmdfcG9zKQotICAgICAgICAgICAgZ290byBuZXh0X3JhbmdlOwotCi0gICAgICAgICAgaWYgKG5ld193cml0aW5nX3BvcyA+IHJhbmdlX2RhdGFfc3RhcnQpIHsKLSAgICAgICAgICAgIGlmIChuZXdfd3JpdGluZ19wb3MgPj0gcmFuZ2VfZGF0YV9lbmQpIHsKLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCi0gICAgICAgICAgICAgICAgICAiUmVtb3ZpbmcgcmFuZ2U6IG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIHdwb3MgJSIKLSAgICAgICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIHJhbmdlLT5vZmZzZXQsIHJhbmdlLT53cml0aW5nX3Bvcyk7Ci0gICAgICAgICAgICAgIC8qIHJlbW92ZSByYW5nZSAqLwotICAgICAgICAgICAgICByYW5nZV90b19kZXN0cm95ID0gcmFuZ2U7Ci0gICAgICAgICAgICAgIGlmIChwcmV2KQotICAgICAgICAgICAgICAgIHByZXYtPm5leHQgPSByYW5nZS0+bmV4dDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAgICAgICAgICAgImFkdmFuY2luZyBvZmZzZXRzIGZyb20gJSIgR19HVUlOVDY0X0ZPUk1BVCAiICglIgotICAgICAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiKSB0byAlIiBHX0dVSU5UNjRfRk9STUFUICIgKCUiCi0gICAgICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIpIiwgcmFuZ2UtPm9mZnNldCwgcmFuZ2UtPnJiX29mZnNldCwKLSAgICAgICAgICAgICAgICAgIHJhbmdlLT5vZmZzZXQgKyBuZXdfd3JpdGluZ19wb3MgLSByYW5nZV9kYXRhX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgbmV3X3dyaXRpbmdfcG9zKTsKLSAgICAgICAgICAgICAgcmFuZ2UtPm9mZnNldCArPSAobmV3X3dyaXRpbmdfcG9zIC0gcmFuZ2VfZGF0YV9zdGFydCk7Ci0gICAgICAgICAgICAgIHJhbmdlLT5yYl9vZmZzZXQgPSBuZXdfd3JpdGluZ19wb3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGd1aW50NjQgbmV3X3dwb3NfdmlydCA9IHdyaXRpbmdfcG9zICsgdG9fd3JpdGU7Ci0KLSAgICAgICAgICBpZiAobmV3X3dwb3NfdmlydCA8PSByYW5nZV9kYXRhX3N0YXJ0KQotICAgICAgICAgICAgZ290byBuZXh0X3JhbmdlOwotCi0gICAgICAgICAgaWYgKG5ld193cG9zX3ZpcnQgPiByYl9zaXplICYmIG5ld193cml0aW5nX3BvcyA+PSByYW5nZV9kYXRhX2VuZCkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCi0gICAgICAgICAgICAgICAgIlJlbW92aW5nIHJhbmdlOiBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCB3cG9zICUiCi0gICAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgcmFuZ2UtPm9mZnNldCwgcmFuZ2UtPndyaXRpbmdfcG9zKTsKLSAgICAgICAgICAgIC8qIHJlbW92ZSByYW5nZSAqLwotICAgICAgICAgICAgcmFuZ2VfdG9fZGVzdHJveSA9IHJhbmdlOwotICAgICAgICAgICAgaWYgKHByZXYpCi0gICAgICAgICAgICAgIHByZXYtPm5leHQgPSByYW5nZS0+bmV4dDsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCi0gICAgICAgICAgICAgICAgImFkdmFuY2luZyBvZmZzZXRzIGZyb20gJSIgR19HVUlOVDY0X0ZPUk1BVCAiICglIgotICAgICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIikgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCAiICglIgotICAgICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIikiLCByYW5nZS0+b2Zmc2V0LCByYW5nZS0+cmJfb2Zmc2V0LAotICAgICAgICAgICAgICAgIHJhbmdlLT5vZmZzZXQgKyBuZXdfd3JpdGluZ19wb3MgLSByYW5nZV9kYXRhX3N0YXJ0LAotICAgICAgICAgICAgICAgIG5ld193cml0aW5nX3Bvcyk7Ci0gICAgICAgICAgICByYW5nZS0+b2Zmc2V0ICs9IChuZXdfd3Bvc192aXJ0IC0gcmFuZ2VfZGF0YV9zdGFydCk7Ci0gICAgICAgICAgICByYW5nZS0+cmJfb2Zmc2V0ID0gbmV3X3dyaXRpbmdfcG9zOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICBuZXh0X3JhbmdlOgotICAgICAgICBpZiAoIXJhbmdlX3RvX2Rlc3Ryb3kpCi0gICAgICAgICAgcHJldiA9IHJhbmdlOwotCi0gICAgICAgIHJhbmdlID0gcmFuZ2UtPm5leHQ7Ci0gICAgICAgIGlmIChyYW5nZV90b19kZXN0cm95KSB7Ci0gICAgICAgICAgaWYgKHJhbmdlX3RvX2Rlc3Ryb3kgPT0gcXVldWUtPnJhbmdlcykKLSAgICAgICAgICAgIHF1ZXVlLT5yYW5nZXMgPSByYW5nZTsKLSAgICAgICAgICBnX3NsaWNlX2ZyZWUgKEdzdFF1ZXVlMlJhbmdlLCByYW5nZV90b19kZXN0cm95KTsKLSAgICAgICAgICByYW5nZV90b19kZXN0cm95ID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICB0b193cml0ZSA9IHNpemU7Ci0gICAgICBuZXdfd3JpdGluZ19wb3MgPSB3cml0aW5nX3BvcyArIHRvX3dyaXRlOwotICAgIH0KLQotICAgIGlmIChRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKQotICAgICAgICAmJiBGU0VFS19GSUxFIChxdWV1ZS0+dGVtcF9maWxlLCB3cml0aW5nX3BvcykpCi0gICAgICBnb3RvIHNlZWtfZmFpbGVkOwotCi0gICAgaWYgKG5ld193cml0aW5nX3BvcyA+IHdyaXRpbmdfcG9zKSB7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAgICJ3cml0aW5nICV1IGJ5dGVzIHRvIHJhbmdlIFslIiBHX0dVSU5UNjRfRk9STUFUICItJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAgICJdIChyYiB3cG9zICUiIEdfR1VJTlQ2NF9GT1JNQVQgIikiLCB0b193cml0ZSwgcXVldWUtPmN1cnJlbnQtPm9mZnNldCwKLSAgICAgICAgICBxdWV1ZS0+Y3VycmVudC0+d3JpdGluZ19wb3MsIHF1ZXVlLT5jdXJyZW50LT5yYl93cml0aW5nX3Bvcyk7Ci0gICAgICAvKiBlaXRoZXIgbm90IHVzaW5nIHJpbmcgYnVmZmVyIG9yIG5vIHdyYXBwaW5nLCBqdXN0IHdyaXRlICovCi0gICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpIHsKLSAgICAgICAgaWYgKGZ3cml0ZSAoZGF0YSwgdG9fd3JpdGUsIDEsIHF1ZXVlLT50ZW1wX2ZpbGUpICE9IDEpCi0gICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtZW1jcHkgKHJpbmdfYnVmZmVyICsgd3JpdGluZ19wb3MsIGRhdGEsIHRvX3dyaXRlKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFRVUVVRV9JU19VU0lOR19SSU5HX0JVRkZFUiAocXVldWUpKSB7Ci0gICAgICAgIC8qIHRyeSB0byBtZXJnZSB3aXRoIG5leHQgcmFuZ2UgKi8KLSAgICAgICAgd2hpbGUgKChuZXh0ID0gcXVldWUtPmN1cnJlbnQtPm5leHQpKSB7Ci0gICAgICAgICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgICAgICAgImNoZWNraW5nIG1lcmdlIHdpdGggbmV4dCByYW5nZSAlIiBHX0dVSU5UNjRfRk9STUFUICIgPCAlIgotICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBuZXdfd3JpdGluZ19wb3MsIG5leHQtPm9mZnNldCk7Ci0gICAgICAgICAgaWYgKG5ld193cml0aW5nX3BvcyA8IG5leHQtPm9mZnNldCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJtZXJnaW5nIHJhbmdlcyAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgICBuZXh0LT53cml0aW5nX3Bvcyk7Ci0KLSAgICAgICAgICAvKiByZW1vdmUgdGhlIGdyb3VwICovCi0gICAgICAgICAgcXVldWUtPmN1cnJlbnQtPm5leHQgPSBuZXh0LT5uZXh0OwotCi0gICAgICAgICAgLyogV2UgdXNlIHRoZSB0aHJlc2hvbGQgdG8gZGVjaWRlIGlmIHdlIHdhbnQgdG8gZG8gYSBzZWVrIG9yIHNpbXBseQotICAgICAgICAgICAqIHJlYWQgdGhlIGRhdGEgYWdhaW4uIElmIHRoZXJlIGlzIG5vdCBzbyBtdWNoIGRhdGEgaW4gdGhlIHJhbmdlIHdlCi0gICAgICAgICAgICogcHJlZmVyIHRvIGF2b2lkIHRvIHNlZWsgYW5kIHJlYWQgaXQgYWdhaW4uICovCi0gICAgICAgICAgaWYgKG5leHQtPndyaXRpbmdfcG9zID4gbmV3X3dyaXRpbmdfcG9zICsgZ2V0X3NlZWtfdGhyZXNob2xkIChxdWV1ZSkpIHsKLSAgICAgICAgICAgIC8qIHRoZSBuZXcgcmFuZ2UgaGFkIG1vcmUgZGF0YSB0aGFuIHRoZSB0aHJlc2hvbGQsIGl0J3Mgd29ydGgga2VlcGluZwotICAgICAgICAgICAgICogaXQgYW5kIGRvaW5nIGEgc2Vlay4gKi8KLSAgICAgICAgICAgIG5ld193cml0aW5nX3BvcyA9IG5leHQtPndyaXRpbmdfcG9zOwotICAgICAgICAgICAgZG9fc2VlayA9IFRSVUU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdfc2xpY2VfZnJlZSAoR3N0UXVldWUyUmFuZ2UsIG5leHQpOwotICAgICAgICB9Ci0gICAgICAgIGdvdG8gdXBkYXRlX2FuZF9zaWduYWw7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHdyYXBwaW5nICovCi0gICAgICBndWludCBibG9ja19vbmUsIGJsb2NrX3R3bzsKLQotICAgICAgYmxvY2tfb25lID0gcmJfc2l6ZSAtIHdyaXRpbmdfcG9zOwotICAgICAgYmxvY2tfdHdvID0gdG9fd3JpdGUgLSBibG9ja19vbmU7Ci0KLSAgICAgIGlmIChibG9ja19vbmUgPiAwKSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsICJ3cml0aW5nICV1IGJ5dGVzIiwgYmxvY2tfb25lKTsKLSAgICAgICAgLyogd3JpdGUgZGF0YSB0byBlbmQgb2YgcmluZyBidWZmZXIgKi8KLSAgICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1RFTVBfRklMRSAocXVldWUpKSB7Ci0gICAgICAgICAgaWYgKGZ3cml0ZSAoZGF0YSwgYmxvY2tfb25lLCAxLCBxdWV1ZS0+dGVtcF9maWxlKSAhPSAxKQotICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbWVtY3B5IChyaW5nX2J1ZmZlciArIHdyaXRpbmdfcG9zLCBkYXRhLCBibG9ja19vbmUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKSAmJiBGU0VFS19GSUxFIChxdWV1ZS0+dGVtcF9maWxlLCAwKSkKLSAgICAgICAgZ290byBzZWVrX2ZhaWxlZDsKLQotICAgICAgaWYgKGJsb2NrX3R3byA+IDApIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwgIndyaXRpbmcgJXUgYnl0ZXMiLCBibG9ja190d28pOwotICAgICAgICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpIHsKLSAgICAgICAgICBpZiAoZndyaXRlIChkYXRhICsgYmxvY2tfb25lLCBibG9ja190d28sIDEsIHF1ZXVlLT50ZW1wX2ZpbGUpICE9IDEpCi0gICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBtZW1jcHkgKHJpbmdfYnVmZmVyLCBkYXRhICsgYmxvY2tfb25lLCBibG9ja190d28pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gIHVwZGF0ZV9hbmRfc2lnbmFsOgotICAgIC8qIHVwZGF0ZSB0aGUgd3JpdGluZyBwb3NpdGlvbnMgKi8KLSAgICBzaXplIC09IHRvX3dyaXRlOwotICAgIEdTVF9JTkZPX09CSkVDVCAocXVldWUsCi0gICAgICAgICJ3cm90ZSAldSBieXRlcyB0byAlIiBHX0dVSU5UNjRfRk9STUFUICIgKCV1IGJ5dGVzIHJlbWFpbmluZyB0byB3cml0ZSkiLAotICAgICAgICB0b193cml0ZSwgd3JpdGluZ19wb3MsIHNpemUpOwotCi0gICAgaWYgKFFVRVVFX0lTX1VTSU5HX1JJTkdfQlVGRkVSIChxdWV1ZSkpIHsKLSAgICAgIGRhdGEgKz0gdG9fd3JpdGU7Ci0gICAgICBxdWV1ZS0+Y3VycmVudC0+d3JpdGluZ19wb3MgKz0gdG9fd3JpdGU7Ci0gICAgICBxdWV1ZS0+Y3VycmVudC0+cmJfd3JpdGluZ19wb3MgPSB3cml0aW5nX3BvcyA9IG5ld193cml0aW5nX3BvczsKLSAgICB9IGVsc2UgewotICAgICAgcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zID0gd3JpdGluZ19wb3MgPSBuZXdfd3JpdGluZ19wb3M7Ci0gICAgfQotICAgIGlmIChkb19zZWVrKQotICAgICAgcGVyZm9ybV9zZWVrX3RvX29mZnNldCAocXVldWUsIG5ld193cml0aW5nX3Bvcyk7Ci0KLSAgICB1cGRhdGVfY3VyX2xldmVsIChxdWV1ZSwgcXVldWUtPmN1cnJlbnQpOwotCi0gICAgLyogdXBkYXRlIHRoZSBidWZmZXJpbmcgc3RhdHVzICovCi0gICAgaWYgKHF1ZXVlLT51c2VfYnVmZmVyaW5nKSB7Ci0gICAgICBHc3RNZXNzYWdlICptc2c7Ci0gICAgICB1cGRhdGVfYnVmZmVyaW5nIChxdWV1ZSk7Ci0gICAgICBtc2cgPSBnc3RfcXVldWUyX2dldF9idWZmZXJpbmdfbWVzc2FnZSAocXVldWUpOwotICAgICAgaWYgKG1zZykgewotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgICAgICBnX211dGV4X2xvY2sgKCZxdWV1ZS0+YnVmZmVyaW5nX3Bvc3RfbG9jayk7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAocXVldWUpLCBtc2cpOwotICAgICAgICBnX211dGV4X3VubG9jayAoJnF1ZXVlLT5idWZmZXJpbmdfcG9zdF9sb2NrKTsKLSAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwgImN1cl9sZXZlbC5ieXRlcyAldSAobWF4ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIikiLAotICAgICAgICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzLCBRVUVVRV9NQVhfQllURVMgKHF1ZXVlKSk7Ci0KLSAgICBHU1RfUVVFVUUyX1NJR05BTF9BREQgKHF1ZXVlKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJ3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLSAgICAvKiBGSVhNRSAtIEdTVF9GTE9XX0VPUyA/ICovCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1zZWVrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdWV1ZSwgUkVTT1VSQ0UsIFNFRUssIChOVUxMKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1oYW5kbGVfZXJyb3I6Ci0gIHsKLSAgICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgICBjYXNlIEVOT1NQQzp7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdWV1ZSwgUkVTT1VSQ0UsIE5PX1NQQUNFX0xFRlQsIChOVUxMKSwgKE5VTEwpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OnsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHF1ZXVlLCBSRVNPVVJDRSwgV1JJVEUsCi0gICAgICAgICAgICAoXygiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIpKSwKLSAgICAgICAgICAgICgiJXMiLCBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1idWZmZXJfcmVhZF9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdWV1ZSwgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICAgKCJDYW4ndCByZWFkIGZyb20gYnVmZmVyIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1ZmZlcl9saXN0X2NyZWF0ZV93cml0ZSAoR3N0QnVmZmVyICoqIGJ1ZiwgZ3VpbnQgaWR4LCBncG9pbnRlciBxKQotewotICBHc3RRdWV1ZTIgKnF1ZXVlID0gcTsKLQotICBHU1RfVFJBQ0VfT0JKRUNUIChxdWV1ZSwKLSAgICAgICJ3cml0aW5nIGJ1ZmZlciAldSBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCBpZHgsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplICgqYnVmKSk7Ci0KLSAgaWYgKCFnc3RfcXVldWUyX2NyZWF0ZV93cml0ZSAocXVldWUsICpidWYpKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChxdWV1ZSwgImNyZWF0ZV93cml0ZSgpIHJldHVybmVkIEZBTFNFLCBiYWlsaW5nIG91dCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1idWZmZXJfbGlzdF9jYWxjX3NpemUgKEdzdEJ1ZmZlciAqKiBidWYsIGd1aW50IGlkeCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ3VpbnQgKnBfc2l6ZSA9IGRhdGE7Ci0gIGdzaXplIGJ1Zl9zaXplOwotCi0gIGJ1Zl9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoKmJ1Zik7Ci0gIEdTVF9UUkFDRSAoImJ1ZmZlciAldSBpbiBoYXMgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwgaWR4LCBidWZfc2l6ZSk7Ci0gICpwX3NpemUgKz0gYnVmX3NpemU7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBlbnF1ZXVlIGFuIGl0ZW0gYW4gdXBkYXRlIHRoZSBsZXZlbCBzdGF0cyAqLwotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZTJfbG9ja2VkX2VucXVldWUgKEdzdFF1ZXVlMiAqIHF1ZXVlLCBncG9pbnRlciBpdGVtLAotICAgIEdzdFF1ZXVlMkl0ZW1UeXBlIGl0ZW1fdHlwZSkKLXsKLSAgaWYgKGl0ZW1fdHlwZSA9PSBHU1RfUVVFVUUyX0lURU1fVFlQRV9CVUZGRVIpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBndWludCBzaXplOwotCi0gICAgYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUIChpdGVtKTsKLSAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLQotICAgIC8qIGFkZCBidWZmZXIgdG8gdGhlIHN0YXRpc3RpY3MgKi8KLSAgICBpZiAoUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgewotICAgICAgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzKys7Ci0gICAgICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzICs9IHNpemU7Ci0gICAgfQotICAgIHF1ZXVlLT5ieXRlc19pbiArPSBzaXplOwotCi0gICAgLyogYXBwbHkgbmV3IGJ1ZmZlciB0byBzZWdtZW50IHN0YXRzICovCi0gICAgYXBwbHlfYnVmZmVyIChxdWV1ZSwgYnVmZmVyLCAmcXVldWUtPnNpbmtfc2VnbWVudCwgc2l6ZSwgVFJVRSk7Ci0gICAgLyogdXBkYXRlIHRoZSBieXRlcmF0ZSBzdGF0cyAqLwotICAgIHVwZGF0ZV9pbl9yYXRlcyAocXVldWUsIEZBTFNFKTsKLQotICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgewotICAgICAgLyogRklYTUUgLSBjaGVjayByZXR1cm4gdmFsdWU/ICovCi0gICAgICBnc3RfcXVldWUyX2NyZWF0ZV93cml0ZSAocXVldWUsIGJ1ZmZlcik7Ci0gICAgfQotICB9IGVsc2UgaWYgKGl0ZW1fdHlwZSA9PSBHU1RfUVVFVUUyX0lURU1fVFlQRV9CVUZGRVJfTElTVCkgewotICAgIEdzdEJ1ZmZlckxpc3QgKmJ1ZmZlcl9saXN0OwotICAgIGd1aW50IHNpemUgPSAwOwotCi0gICAgYnVmZmVyX2xpc3QgPSBHU1RfQlVGRkVSX0xJU1RfQ0FTVCAoaXRlbSk7Ci0KLSAgICBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCAoYnVmZmVyX2xpc3QsIGJ1ZmZlcl9saXN0X2NhbGNfc2l6ZSwgJnNpemUpOwotICAgIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgInRvdGFsIHNpemUgb2YgYnVmZmVyIGxpc3Q6ICV1IGJ5dGVzIiwgc2l6ZSk7Ci0KLSAgICAvKiBhZGQgYnVmZmVyIHRvIHRoZSBzdGF0aXN0aWNzICovCi0gICAgaWYgKFFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKLSAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycyArPSBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChidWZmZXJfbGlzdCk7Ci0gICAgICBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzICs9IHNpemU7Ci0gICAgfQotICAgIHF1ZXVlLT5ieXRlc19pbiArPSBzaXplOwotCi0gICAgLyogYXBwbHkgbmV3IGJ1ZmZlciB0byBzZWdtZW50IHN0YXRzICovCi0gICAgYXBwbHlfYnVmZmVyX2xpc3QgKHF1ZXVlLCBidWZmZXJfbGlzdCwgJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIFRSVUUpOwotCi0gICAgLyogdXBkYXRlIHRoZSBieXRlcmF0ZSBzdGF0cyAqLwotICAgIHVwZGF0ZV9pbl9yYXRlcyAocXVldWUsIEZBTFNFKTsKLQotICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgewotICAgICAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGJ1ZmZlcl9saXN0LCBidWZmZXJfbGlzdF9jcmVhdGVfd3JpdGUsIHF1ZXVlKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoaXRlbV90eXBlID09IEdTVF9RVUVVRTJfSVRFTV9UWVBFX0VWRU5UKSB7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgZXZlbnQgPSBHU1RfRVZFTlRfQ0FTVCAoaXRlbSk7Ci0KLSAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgICAgLyogWmVybyB0aGUgdGhyZXNob2xkcywgdGhpcyBtYWtlcyBzdXJlIHRoZSBxdWV1ZSBpcyBjb21wbGV0ZWx5Ci0gICAgICAgICAqIGZpbGxlZCBhbmQgd2UgY2FuIHJlYWQgYWxsIGRhdGEgZnJvbSB0aGUgcXVldWUuICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAid2UgaGF2ZSBFT1MiKTsKLSAgICAgICAgcXVldWUtPmlzX2VvcyA9IFRSVUU7Ci0gICAgICAgIC8qIEZvcmNlIHVwZGF0aW5nIHRoZSBpbnB1dCBiaXRyYXRlICovCi0gICAgICAgIHVwZGF0ZV9pbl9yYXRlcyAocXVldWUsIFRSVUUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICAgIGFwcGx5X3NlZ21lbnQgKHF1ZXVlLCBldmVudCwgJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIFRSVUUpOwotICAgICAgICAvKiBUaGlzIGlzIG91ciBmaXJzdCBuZXcgc2VnbWVudCwgd2UgaG9sZCBpdAotICAgICAgICAgKiBhcyB3ZSBjYW4ndCBzYXZlIGl0IG9uIHRoZSB0ZW1wIGZpbGUgKi8KLSAgICAgICAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7Ci0gICAgICAgICAgaWYgKHF1ZXVlLT5zZWdtZW50X2V2ZW50X3JlY2VpdmVkKQotICAgICAgICAgICAgZ290byB1bmV4cGVjdGVkX2V2ZW50OwotCi0gICAgICAgICAgcXVldWUtPnNlZ21lbnRfZXZlbnRfcmVjZWl2ZWQgPSBUUlVFOwotICAgICAgICAgIGlmIChxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCAhPSBOVUxMKQotICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChxdWV1ZS0+c3RhcnRpbmdfc2VnbWVudCk7Ci0gICAgICAgICAgcXVldWUtPnN0YXJ0aW5nX3NlZ21lbnQgPSBldmVudDsKLSAgICAgICAgICBpdGVtID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAvKiBhIG5ldyBzZWdtZW50IGFsbG93cyB1cyB0byBhY2NlcHQgbW9yZSBidWZmZXJzIGlmIHdlIGdvdCBFT1MKLSAgICAgICAgICogZnJvbSBkb3duc3RyZWFtICovCi0gICAgICAgIHF1ZXVlLT51bmV4cGVjdGVkID0gRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfRVZFTlRfR0FQOgotICAgICAgICBhcHBseV9nYXAgKHF1ZXVlLCBldmVudCwgJnF1ZXVlLT5zaW5rX3NlZ21lbnQsIFRSVUUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVDoKLSAgICAgICAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7Ci0gICAgICAgICAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZxdWV1ZS0+c3RyZWFtX3N0YXJ0X2V2ZW50LCBldmVudCk7Ci0gICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgICAgaXRlbSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOnsKLSAgICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgICAgR1NUX0lORk8gKCJnb3QgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gICAgICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgewotICAgICAgICAgIEdTVF9MT0cgKCJEcm9wcGluZyBjYXBzIGV2ZW50LCBub3QgdXNpbmcgcXVldWUiKTsKLSAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgICBpdGVtID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkKLSAgICAgICAgICBnb3RvIHVuZXhwZWN0ZWRfZXZlbnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfSBlbHNlIGlmIChHU1RfSVNfUVVFUlkgKGl0ZW0pKSB7Ci0gICAgLyogQ2FuJ3QgaGFwcGVuIGFzIHdlIGNoZWNrIHRoYXQgaW4gdGhlIGNhbGxlciAqLwotICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9IGVsc2UgewotICAgIGdfd2FybmluZyAoIlVuZXhwZWN0ZWQgaXRlbSAlcCBhZGRlZCBpbiBxdWV1ZSAlcyAocmVmY291bnRpbmcgcHJvYmxlbT8pIiwKLSAgICAgICAgaXRlbSwgR1NUX09CSkVDVF9OQU1FIChxdWV1ZSkpOwotICAgIC8qIHdlIGNhbid0IHJlYWxseSB1bnJlZiBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgaXQgaXMgKi8KLSAgICBpdGVtID0gTlVMTDsKLSAgfQotCi0gIGlmIChpdGVtKSB7Ci0gICAgLyogdXBkYXRlIHRoZSBidWZmZXJpbmcgc3RhdHVzICovCi0gICAgaWYgKHF1ZXVlLT51c2VfYnVmZmVyaW5nKQotICAgICAgdXBkYXRlX2J1ZmZlcmluZyAocXVldWUpOwotCi0gICAgaWYgKFFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKLSAgICAgIEdzdFF1ZXVlMkl0ZW0gKnFpdGVtID0gZ19zbGljZV9uZXcgKEdzdFF1ZXVlMkl0ZW0pOwotICAgICAgcWl0ZW0tPnR5cGUgPSBpdGVtX3R5cGU7Ci0gICAgICBxaXRlbS0+aXRlbSA9IGl0ZW07Ci0gICAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoJnF1ZXVlLT5xdWV1ZSwgcWl0ZW0pOwotICAgIH0gZWxzZSB7Ci0gICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChpdGVtKSk7Ci0gICAgfQotCi0gICAgR1NUX1FVRVVFMl9TSUdOQUxfQUREIChxdWV1ZSk7Ci0gIH0KLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi11bmV4cGVjdGVkX2V2ZW50OgotICB7Ci0gICAgZ2Jvb2xlYW4gaXNfY3VzdG9tID0gR1NUX0VWRU5UX1RZUEUgKGl0ZW0pIDwgR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTTsKLQotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXVldWUsICIlcyVzIGV2ZW50IGNhbid0IGJlIGFkZGVkIHRvIHRlbXAgZmlsZTogIgotICAgICAgICAiJSIgR1NUX1BUUl9GT1JNQVQsIGlzX2N1c3RvbSA/ICJVbmV4cGVjdGVkICIgOiAiIiwKLSAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoaXRlbSksIEdTVF9FVkVOVF9DQVNUIChpdGVtKSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChHU1RfRVZFTlRfQ0FTVCAoaXRlbSkpOwotICAgIHJldHVybjsKLSAgfQotfQotCi0vKiBkZXF1ZXVlIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUgYW5kIHVwZGF0ZSBsZXZlbCBzdGF0cyAqLwotc3RhdGljIEdzdE1pbmlPYmplY3QgKgotZ3N0X3F1ZXVlMl9sb2NrZWRfZGVxdWV1ZSAoR3N0UXVldWUyICogcXVldWUsIEdzdFF1ZXVlMkl0ZW1UeXBlICogaXRlbV90eXBlKQotewotICBHc3RNaW5pT2JqZWN0ICppdGVtOwotCi0gIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgewotICAgIGl0ZW0gPSBnc3RfcXVldWUyX3JlYWRfaXRlbV9mcm9tX2ZpbGUgKHF1ZXVlKTsKLSAgfSBlbHNlIHsKLSAgICBHc3RRdWV1ZTJJdGVtICpxaXRlbSA9IGdfcXVldWVfcG9wX2hlYWQgKCZxdWV1ZS0+cXVldWUpOwotCi0gICAgaWYgKHFpdGVtID09IE5VTEwpCi0gICAgICBnb3RvIG5vX2l0ZW07Ci0KLSAgICBpdGVtID0gcWl0ZW0tPml0ZW07Ci0gICAgZ19zbGljZV9mcmVlIChHc3RRdWV1ZTJJdGVtLCBxaXRlbSk7Ci0gIH0KLQotICBpZiAoaXRlbSA9PSBOVUxMKQotICAgIGdvdG8gbm9faXRlbTsKLQotICBpZiAoR1NUX0lTX0JVRkZFUiAoaXRlbSkpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBndWludCBzaXplOwotCi0gICAgYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUIChpdGVtKTsKLSAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLSAgICAqaXRlbV90eXBlID0gR1NUX1FVRVVFMl9JVEVNX1RZUEVfQlVGRkVSOwotCi0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICJyZXRyaWV2ZWQgYnVmZmVyICVwIGZyb20gcXVldWUiLCBidWZmZXIpOwotCi0gICAgaWYgKFFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKLSAgICAgIHF1ZXVlLT5jdXJfbGV2ZWwuYnVmZmVycy0tOwotICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyAtPSBzaXplOwotICAgIH0KLSAgICBxdWV1ZS0+Ynl0ZXNfb3V0ICs9IHNpemU7Ci0KLSAgICBhcHBseV9idWZmZXIgKHF1ZXVlLCBidWZmZXIsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIHNpemUsIEZBTFNFKTsKLSAgICAvKiB1cGRhdGUgdGhlIGJ5dGVyYXRlIHN0YXRzICovCi0gICAgdXBkYXRlX291dF9yYXRlcyAocXVldWUpOwotICAgIC8qIHVwZGF0ZSB0aGUgYnVmZmVyaW5nICovCi0gICAgaWYgKHF1ZXVlLT51c2VfYnVmZmVyaW5nKQotICAgICAgdXBkYXRlX2J1ZmZlcmluZyAocXVldWUpOwotCi0gIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChpdGVtKSkgewotICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChpdGVtKTsKLQotICAgICppdGVtX3R5cGUgPSBHU1RfUVVFVUUyX0lURU1fVFlQRV9FVkVOVDsKLQotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAicmV0cmlldmVkIGV2ZW50ICVwIGZyb20gcXVldWUiLCBldmVudCk7Ci0KLSAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgICAgLyogcXVldWUgaXMgZW1wdHkgbm93IHRoYXQgd2UgZGVxdWV1ZWQgdGhlIEVPUyAqLwotICAgICAgICBHU1RfUVVFVUUyX0NMRUFSX0xFVkVMIChxdWV1ZS0+Y3VyX2xldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgICAgICBhcHBseV9zZWdtZW50IChxdWV1ZSwgZXZlbnQsICZxdWV1ZS0+c3JjX3NlZ21lbnQsIEZBTFNFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9HQVA6Ci0gICAgICAgIGFwcGx5X2dhcCAocXVldWUsIGV2ZW50LCAmcXVldWUtPnNyY19zZWdtZW50LCBGQUxTRSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9IGVsc2UgaWYgKEdTVF9JU19CVUZGRVJfTElTVCAoaXRlbSkpIHsKLSAgICBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdDsKLSAgICBndWludCBzaXplID0gMDsKLQotICAgIGJ1ZmZlcl9saXN0ID0gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGl0ZW0pOwotICAgIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChidWZmZXJfbGlzdCwgYnVmZmVyX2xpc3RfY2FsY19zaXplLCAmc2l6ZSk7Ci0gICAgKml0ZW1fdHlwZSA9IEdTVF9RVUVVRTJfSVRFTV9UWVBFX0JVRkZFUl9MSVNUOwotCi0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICJyZXRyaWV2ZWQgYnVmZmVyIGxpc3QgJXAgZnJvbSBxdWV1ZSIsIGJ1ZmZlcl9saXN0KTsKLQotICAgIGlmIChRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7Ci0gICAgICBxdWV1ZS0+Y3VyX2xldmVsLmJ1ZmZlcnMgLT0gZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAoYnVmZmVyX2xpc3QpOwotICAgICAgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyAtPSBzaXplOwotICAgIH0KLSAgICBxdWV1ZS0+Ynl0ZXNfb3V0ICs9IHNpemU7Ci0KLSAgICBhcHBseV9idWZmZXJfbGlzdCAocXVldWUsIGJ1ZmZlcl9saXN0LCAmcXVldWUtPnNyY19zZWdtZW50LCBGQUxTRSk7Ci0gICAgLyogdXBkYXRlIHRoZSBieXRlcmF0ZSBzdGF0cyAqLwotICAgIHVwZGF0ZV9vdXRfcmF0ZXMgKHF1ZXVlKTsKLSAgICAvKiB1cGRhdGUgdGhlIGJ1ZmZlcmluZyAqLwotICAgIGlmIChxdWV1ZS0+dXNlX2J1ZmZlcmluZykKLSAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKHF1ZXVlKTsKLSAgfSBlbHNlIGlmIChHU1RfSVNfUVVFUlkgKGl0ZW0pKSB7Ci0gICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICJyZXRyaWV2ZWQgcXVlcnkgJXAgZnJvbSBxdWV1ZSIsIGl0ZW0pOwotICAgICppdGVtX3R5cGUgPSBHU1RfUVVFVUUyX0lURU1fVFlQRV9RVUVSWTsKLSAgfSBlbHNlIHsKLSAgICBnX3dhcm5pbmcKLSAgICAgICAgKCJVbmV4cGVjdGVkIGl0ZW0gJXAgZGVxdWV1ZWQgZnJvbSBxdWV1ZSAlcyAocmVmY291bnRpbmcgcHJvYmxlbT8pIiwKLSAgICAgICAgaXRlbSwgR1NUX09CSkVDVF9OQU1FIChxdWV1ZSkpOwotICAgIGl0ZW0gPSBOVUxMOwotICAgICppdGVtX3R5cGUgPSBHU1RfUVVFVUUyX0lURU1fVFlQRV9VTktOT1dOOwotICB9Ci0gIEdTVF9RVUVVRTJfU0lHTkFMX0RFTCAocXVldWUpOwotCi0gIHJldHVybiBpdGVtOwotCi0gIC8qIEVSUk9SUyAqLwotbm9faXRlbToKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAidGhlIHF1ZXVlIGlzIGVtcHR5Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdWV1ZTJfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIEdzdFF1ZXVlMiAqcXVldWU7Ci0KLSAgcXVldWUgPSBHU1RfUVVFVUUyIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgIHsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicmVjZWl2ZWQgZmx1c2ggc3RhcnQgZXZlbnQiKTsKLSAgICAgIGlmIChHU1RfUEFEX01PREUgKHF1ZXVlLT5zcmNwYWQpID09IEdTVF9QQURfTU9ERV9QVVNIKSB7Ci0gICAgICAgIC8qIGZvcndhcmQgZXZlbnQgKi8KLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChxdWV1ZS0+c3JjcGFkLCBldmVudCk7Ci0KLSAgICAgICAgLyogbm93IHVuYmxvY2sgdGhlIGNoYWluIGZ1bmN0aW9uICovCi0gICAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotICAgICAgICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICAgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICAgIC8qIHVuYmxvY2sgdGhlIGxvb3AgYW5kIGNoYWluIGZ1bmN0aW9ucyAqLwotICAgICAgICBHU1RfUVVFVUUyX1NJR05BTF9BREQgKHF1ZXVlKTsKLSAgICAgICAgR1NUX1FVRVVFMl9TSUdOQUxfREVMIChxdWV1ZSk7Ci0gICAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgICAgICAgLyogbWFrZSBzdXJlIGl0IHBhdXNlcywgdGhpcyBzaG91bGQgaGFwcGVuIHNpbmNlIHdlIHNlbnQKLSAgICAgICAgICogZmx1c2hfc3RhcnQgZG93bnN0cmVhbS4gKi8KLSAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrIChxdWV1ZS0+c3JjcGFkKTsKLSAgICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJsb29wIHN0b3BwZWQiKTsKLQotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICAgICAgcXVldWUtPmxhc3RfcXVlcnkgPSBGQUxTRTsKLSAgICAgICAgZ19jb25kX3NpZ25hbCAoJnF1ZXVlLT5xdWVyeV9oYW5kbGVkKTsKLSAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotICAgICAgICAvKiBmbHVzaCB0aGUgc2luayBwYWQgKi8KLSAgICAgICAgcXVldWUtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICAgICAgR1NUX1FVRVVFMl9TSUdOQUxfREVMIChxdWV1ZSk7Ci0gICAgICAgIHF1ZXVlLT5sYXN0X3F1ZXJ5ID0gRkFMU0U7Ci0gICAgICAgIGdfY29uZF9zaWduYWwgKCZxdWV1ZS0+cXVlcnlfaGFuZGxlZCk7Ci0gICAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICB7Ci0gICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgInJlY2VpdmVkIGZsdXNoIHN0b3AgZXZlbnQiKTsKLQotICAgICAgaWYgKEdTVF9QQURfTU9ERSAocXVldWUtPnNyY3BhZCkgPT0gR1NUX1BBRF9NT0RFX1BVU0gpIHsKLSAgICAgICAgLyogZm9yd2FyZCBldmVudCAqLwotICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGV2ZW50KTsKLQotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICAgICAgZ3N0X3F1ZXVlMl9sb2NrZWRfZmx1c2ggKHF1ZXVlLCBGQUxTRSwgVFJVRSk7Ci0gICAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgcXVldWUtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgcXVldWUtPmlzX2VvcyA9IEZBTFNFOwotICAgICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgICBxdWV1ZS0+c2Vla2luZyA9IEZBTFNFOwotICAgICAgICBxdWV1ZS0+c3JjX3RhZ3NfYml0cmF0ZSA9IHF1ZXVlLT5zaW5rX3RhZ3NfYml0cmF0ZSA9IDA7Ci0gICAgICAgIC8qIHJlc2V0IHJhdGUgY291bnRlcnMgKi8KLSAgICAgICAgcmVzZXRfcmF0ZV90aW1lciAocXVldWUpOwotICAgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHF1ZXVlLT5zcmNwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdWV1ZTJfbG9vcCwKLSAgICAgICAgICAgIHF1ZXVlLT5zcmNwYWQsIE5VTEwpOwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICAgIHF1ZXVlLT5zZWdtZW50X2V2ZW50X3JlY2VpdmVkID0gRkFMU0U7Ci0gICAgICAgIHF1ZXVlLT5pc19lb3MgPSBGQUxTRTsKLSAgICAgICAgcXVldWUtPnVuZXhwZWN0ZWQgPSBGQUxTRTsKLSAgICAgICAgcXVldWUtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgcXVldWUtPnNlZWtpbmcgPSBGQUxTRTsKLSAgICAgICAgcXVldWUtPnNyY190YWdzX2JpdHJhdGUgPSBxdWV1ZS0+c2lua190YWdzX2JpdHJhdGUgPSAwOwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzp7Ci0gICAgICBpZiAocXVldWUtPnVzZV90YWdzX2JpdHJhdGUpIHsKLSAgICAgICAgR3N0VGFnTGlzdCAqdGFnczsKLSAgICAgICAgZ3VpbnQgYml0cmF0ZTsKLQotICAgICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ3MpOwotICAgICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdzLCBHU1RfVEFHX0JJVFJBVEUsICZiaXRyYXRlKSB8fAotICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdzLCBHU1RfVEFHX05PTUlOQUxfQklUUkFURSwgJmJpdHJhdGUpKSB7Ci0gICAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICAgICAgcXVldWUtPnNpbmtfdGFnc19iaXRyYXRlID0gYml0cmF0ZTsKLSAgICAgICAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdWV1ZSwgIlNpbmsgcGFkIGJpdHJhdGUgZnJvbSB0YWdzIG5vdyAldSIsIGJpdHJhdGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGYWxsLXRocm91Z2ggKi8KLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpKSB7Ci0gICAgICAgIC8qIHNlcmlhbGl6ZWQgZXZlbnRzIGdvIGluIHRoZSBxdWV1ZSAqLwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c2lua3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgICAgICAgaWYgKHF1ZXVlLT5zcmNyZXN1bHQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgICAvKiBFcnJvcnMgaW4gc3RpY2t5IGV2ZW50IHB1c2hpbmcgYXJlIG5vIHByb2JsZW0gYW5kIGlnbm9yZWQgaGVyZQotICAgICAgICAgICAqIGFzIHRoZXkgd2lsbCBjYXVzZSBtb3JlIG1lYW5pbmdmdWwgZXJyb3JzIGR1cmluZyBkYXRhIGZsb3cuCi0gICAgICAgICAgICogRm9yIEVPUyBldmVudHMsIHRoYXQgYXJlIG5vdCBmb2xsb3dlZCBieSBkYXRhIGZsb3csIHdlIHN0aWxsCi0gICAgICAgICAgICogcmV0dXJuIEZBTFNFIGhlcmUgdGhvdWdoIGFuZCByZXBvcnQgYW4gZXJyb3IuCi0gICAgICAgICAgICovCi0gICAgICAgICAgaWYgKCFHU1RfRVZFTlRfSVNfU1RJQ0tZIChldmVudCkpIHsKLSAgICAgICAgICAgIGdvdG8gb3V0X2Zsb3dfZXJyb3I7Ci0gICAgICAgICAgfSBlbHNlIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICAgICAgICAgIGlmIChxdWV1ZS0+c3JjcmVzdWx0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQKLSAgICAgICAgICAgICAgICB8fCBxdWV1ZS0+c3JjcmVzdWx0IDwgR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKHF1ZXVlLCBxdWV1ZS0+c3JjcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdG8gb3V0X2Zsb3dfZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIHJlZnVzZSBtb3JlIGV2ZW50cyBvbiBFT1MgKi8KLSAgICAgICAgaWYgKHF1ZXVlLT5pc19lb3MpCi0gICAgICAgICAgZ290byBvdXRfZW9zOwotICAgICAgICBnc3RfcXVldWUyX2xvY2tlZF9lbnF1ZXVlIChxdWV1ZSwgZXZlbnQsIEdTVF9RVUVVRTJfSVRFTV9UWVBFX0VWRU5UKTsKLSAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAgICAgZ3N0X3F1ZXVlMl9wb3N0X2J1ZmZlcmluZyAocXVldWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogbm9uLXNlcmlhbGl6ZWQgZXZlbnRzIGFyZSBwYXNzZWQgdXBzdHJlYW0uICovCi0gICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gIH0KLSAgaWYgKHJldCA9PSBGQUxTRSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLW91dF9mbHVzaGluZzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicmVmdXNpbmcgZXZlbnQsIHdlIGFyZSBmbHVzaGluZyIpOwotICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1vdXRfZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJyZWZ1c2luZyBldmVudCwgd2UgYXJlIEVPUyIpOwotICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotb3V0X2Zsb3dfZXJyb3I6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocXVldWUsCi0gICAgICAgICJyZWZ1c2luZyBldmVudCwgd2UgaGF2ZSBhIGRvd25zdHJlYW0gZmxvdyBlcnJvcjogJXMiLAotICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocXVldWUtPnNyY3Jlc3VsdCkpOwotICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIHF1ZXVlLT5zcmNyZXN1bHQ7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXVldWUyX2hhbmRsZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RRdWV1ZTIgKnF1ZXVlOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcXVldWUgPSBHU1RfUVVFVUUyIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoR1NUX1FVRVJZX0lTX1NFUklBTElaRUQgKHF1ZXJ5KSkgewotICAgICAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgInJlY2VpdmVkIHF1ZXJ5ICVwIiwgcXVlcnkpOwotICAgICAgICAvKiBzZXJpYWxpemVkIGV2ZW50cyBnbyBpbiB0aGUgcXVldWUuIFdlIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IHdlCi0gICAgICAgICAqIGRvbid0IGNhdXNlIGRlYWRsb2NrcyB3YWl0aW5nIGZvciB0aGUgcXVlcnkgcmV0dXJuIHZhbHVlLiBXZSBjaGVjayBpZgotICAgICAgICAgKiB0aGUgcXVldWUgaXMgZW1wdHkgKG5vdGhpbmcgaXMgYmxvY2tpbmcgZG93bnN0cmVhbSBhbmQgdGhlIHF1ZXJ5IGNhbgotICAgICAgICAgKiBiZSBwdXNoZWQgZm9yIHN1cmUpIG9yIHdlIGFyZSBub3QgYnVmZmVyaW5nLiBJZiB3ZSBhcmUgYnVmZmVyaW5nLAotICAgICAgICAgKiB0aGUgcGlwZWxpbmUgd2FpdHMgdG8gdW5ibG9jayBkb3duc3RyZWFtIHVudGlsIG91ciBxdWV1ZSBmaWxscyB1cAotICAgICAgICAgKiBjb21wbGV0ZWx5LCB3aGljaCBjYW4gbm90IGhhcHBlbiBpZiB3ZSBibG9jayBvbiB0aGUgcXVlcnkuLgotICAgICAgICAgKiBUaGVyZWZvcmUgd2Ugb25seSBwb3RlbnRpYWxseSBibG9jayB3aGVuIHdlIGFyZSBub3QgYnVmZmVyaW5nLiAqLwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c2lua3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkgJiYgKGdzdF9xdWV1ZTJfaXNfZW1wdHkgKHF1ZXVlKQotICAgICAgICAgICAgICAgIHx8ICFxdWV1ZS0+dXNlX2J1ZmZlcmluZykpIHsKLSAgICAgICAgICBpZiAoIWdfYXRvbWljX2ludF9nZXQgKCZxdWV1ZS0+ZG93bnN0cmVhbV9tYXlfYmxvY2spKSB7Ci0gICAgICAgICAgICBnc3RfcXVldWUyX2xvY2tlZF9lbnF1ZXVlIChxdWV1ZSwgcXVlcnksCi0gICAgICAgICAgICAgICAgR1NUX1FVRVVFMl9JVEVNX1RZUEVfUVVFUlkpOwotCi0gICAgICAgICAgICBTVEFUVVMgKHF1ZXVlLCBxdWV1ZS0+c2lua3BhZCwgIndhaXQgZm9yIFFVRVJZIik7Ci0gICAgICAgICAgICBnX2NvbmRfd2FpdCAoJnF1ZXVlLT5xdWVyeV9oYW5kbGVkLCAmcXVldWUtPnFsb2NrKTsKLSAgICAgICAgICAgIGlmIChxdWV1ZS0+c2lua3Jlc3VsdCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgZ290byBvdXRfZmx1c2hpbmc7Ci0gICAgICAgICAgICByZXMgPSBxdWV1ZS0+bGFzdF9xdWVyeTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJyZWZ1c2luZyBxdWVyeSwgZG93bnN0cmVhbSBtaWdodCBibG9jayIpOwotICAgICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLAotICAgICAgICAgICAgICAicmVmdXNpbmcgcXVlcnksIHdlIGFyZSBub3QgdXNpbmcgdGhlIHF1ZXVlIik7Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICAgICAgZ3N0X3F1ZXVlMl9wb3N0X2J1ZmZlcmluZyAocXVldWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLW91dF9mbHVzaGluZzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicmVmdXNpbmcgcXVlcnksIHdlIGFyZSBmbHVzaGluZyIpOwotICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1ZXVlMl9pc19lbXB0eSAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIC8qIG5ldmVyIGVtcHR5IG9uIEVPUyAqLwotICBpZiAocXVldWUtPmlzX2VvcykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpICYmIHF1ZXVlLT5jdXJyZW50KSB7Ci0gICAgcmV0dXJuIHF1ZXVlLT5jdXJyZW50LT53cml0aW5nX3BvcyA8PSBxdWV1ZS0+Y3VycmVudC0+bWF4X3JlYWRpbmdfcG9zOwotICB9IGVsc2UgewotICAgIGlmIChxdWV1ZS0+cXVldWUubGVuZ3RoID09IDApCi0gICAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXVldWUyX2lzX2ZpbGxlZCAoR3N0UXVldWUyICogcXVldWUpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICAvKiBhbHdheXMgZmlsbGVkIG9uIEVPUyAqLwotICBpZiAocXVldWUtPmlzX2VvcykKLSAgICByZXR1cm4gVFJVRTsKLQotI2RlZmluZSBDSEVDS19GSUxMRUQoZm9ybWF0LGFsdF9tYXgpICgocXVldWUtPm1heF9sZXZlbC5mb3JtYXQpID4gMCAmJiBcCi0gICAgKHF1ZXVlLT5jdXJfbGV2ZWwuZm9ybWF0KSA+PSAoKGFsdF9tYXgpID8gXAotICAgICAgTUlOICgocXVldWUtPm1heF9sZXZlbC5mb3JtYXQpLCAoYWx0X21heCkpIDogKHF1ZXVlLT5tYXhfbGV2ZWwuZm9ybWF0KSkpCi0KLSAgLyogaWYgdXNpbmcgYSByaW5nIGJ1ZmZlciB3ZSdyZSBmaWxsZWQgaWYgYWxsIHJpbmcgYnVmZmVyIHNwYWNlIGlzIHVzZWQKLSAgICogX2J5IHRoZSBjdXJyZW50IHJhbmdlXyAqLwotICBpZiAoUVVFVUVfSVNfVVNJTkdfUklOR19CVUZGRVIgKHF1ZXVlKSkgewotICAgIGd1aW50NjQgcmJfc2l6ZSA9IHF1ZXVlLT5yaW5nX2J1ZmZlcl9tYXhfc2l6ZTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgIm1heCBieXRlcyAldSwgcmIgc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGN1ciBieXRlcyAldSIsCi0gICAgICAgIHF1ZXVlLT5tYXhfbGV2ZWwuYnl0ZXMsIHJiX3NpemUsIHF1ZXVlLT5jdXJfbGV2ZWwuYnl0ZXMpOwotICAgIHJldHVybiBDSEVDS19GSUxMRUQgKGJ5dGVzLCByYl9zaXplKTsKLSAgfQotCi0gIC8qIGlmIHVzaW5nIGZpbGUsIHdlJ3JlIG5ldmVyIGZpbGxlZCBpZiB3ZSBkb24ndCBoYXZlIEVPUyAqLwotICBpZiAoUVVFVUVfSVNfVVNJTkdfVEVNUF9GSUxFIChxdWV1ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIHdlIGFyZSBuZXZlciBmaWxsZWQgd2hlbiB3ZSBoYXZlIG5vIGJ1ZmZlcnMgYXQgYWxsICovCi0gIGlmIChxdWV1ZS0+Y3VyX2xldmVsLmJ1ZmZlcnMgPT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogd2UgYXJlIGZpbGxlZCBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgbGV2ZWxzIGV4Y2VlZHMgdGhlIG1heCAqLwotICByZXMgPSBDSEVDS19GSUxMRUQgKGJ1ZmZlcnMsIDApIHx8IENIRUNLX0ZJTExFRCAoYnl0ZXMsIDApCi0gICAgICB8fCBDSEVDS19GSUxMRUQgKHRpbWUsIDApOwotCi0gIC8qIGlmIHdlIG5lZWQgdG8sIHVzZSB0aGUgcmF0ZSBlc3RpbWF0ZSB0byBjaGVjayBhZ2FpbnN0IHRoZSBtYXggdGltZSB3ZSBhcmUKLSAgICogYWxsb3dlZCB0byBxdWV1ZSAqLwotICBpZiAocXVldWUtPnVzZV9yYXRlX2VzdGltYXRlKQotICAgIHJlcyB8PSBDSEVDS19GSUxMRUQgKHJhdGVfdGltZSwgMCk7Ci0KLSN1bmRlZiBDSEVDS19GSUxMRUQKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdWV1ZTJfY2hhaW5fYnVmZmVyX29yX2J1ZmZlcl9saXN0IChHc3RRdWV1ZTIgKiBxdWV1ZSwKLSAgICBHc3RNaW5pT2JqZWN0ICogaXRlbSwgR3N0UXVldWUySXRlbVR5cGUgaXRlbV90eXBlKQotewotICAvKiB3ZSBoYXZlIHRvIGxvY2sgdGhlIHF1ZXVlIHNpbmNlIHdlIHNwYW4gdGhyZWFkcyAqLwotICBHU1RfUVVFVUUyX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c2lua3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgLyogd2hlbiB3ZSByZWNlaXZlZCBFT1MsIHdlIHJlZnVzZSBtb3JlIGRhdGEgKi8KLSAgaWYgKHF1ZXVlLT5pc19lb3MpCi0gICAgZ290byBvdXRfZW9zOwotICAvKiB3aGVuIHdlIHJlY2VpdmVkIHVuZXhwZWN0ZWQgZnJvbSBkb3duc3RyZWFtLCByZWZ1c2UgbW9yZSBidWZmZXJzICovCi0gIGlmIChxdWV1ZS0+dW5leHBlY3RlZCkKLSAgICBnb3RvIG91dF91bmV4cGVjdGVkOwotCi0gIC8qIHdoaWxlIHdlIGRpZG4ndCByZWNlaXZlIHRoZSBuZXdzZWdtZW50LCB3ZSdyZSBzZWVraW5nIGFuZCB3ZSBza2lwIGRhdGEgKi8KLSAgaWYgKHF1ZXVlLT5zZWVraW5nKQotICAgIGdvdG8gb3V0X3NlZWtpbmc7Ci0KLSAgaWYgKCFnc3RfcXVldWUyX3dhaXRfZnJlZV9zcGFjZSAocXVldWUpKQotICAgIGdvdG8gb3V0X2ZsdXNoaW5nOwotCi0gIC8qIHB1dCBidWZmZXIgaW4gcXVldWUgbm93ICovCi0gIGdzdF9xdWV1ZTJfbG9ja2VkX2VucXVldWUgKHF1ZXVlLCBpdGVtLCBpdGVtX3R5cGUpOwotICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICBnc3RfcXVldWUyX3Bvc3RfYnVmZmVyaW5nIChxdWV1ZSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIHNwZWNpYWwgY29uZGl0aW9ucyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR3N0Rmxvd1JldHVybiByZXQgPSBxdWV1ZS0+c2lua3Jlc3VsdDsKLQotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAiZXhpdCBiZWNhdXNlIHRhc2sgcGF1c2VkLCByZWFzb246ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChpdGVtKTsKLQotICAgIHJldHVybiByZXQ7Ci0gIH0KLW91dF9lb3M6Ci0gIHsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwgImV4aXQgYmVjYXVzZSB3ZSByZWNlaXZlZCBFT1MiKTsKLSAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoaXRlbSk7Ci0KLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci1vdXRfc2Vla2luZzoKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAiZXhpdCBiZWNhdXNlIHdlIGFyZSBzZWVraW5nIik7Ci0gICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKGl0ZW0pOwotCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1vdXRfdW5leHBlY3RlZDoKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAiZXhpdCBiZWNhdXNlIHdlIHJlY2VpdmVkIEVPUyIpOwotICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChpdGVtKTsKLQotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdWV1ZTJfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFF1ZXVlMiAqcXVldWU7Ci0KLSAgcXVldWUgPSBHU1RfUVVFVUUyIChwYXJlbnQpOwotCi0gIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAicmVjZWl2ZWQgYnVmZmVyICVwIG9mICIKLSAgICAgICJzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIsIGR1cmF0aW9uICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIGJ1ZmZlciwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikpKTsKLQotICByZXR1cm4gZ3N0X3F1ZXVlMl9jaGFpbl9idWZmZXJfb3JfYnVmZmVyX2xpc3QgKHF1ZXVlLAotICAgICAgR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlciksIEdTVF9RVUVVRTJfSVRFTV9UWVBFX0JVRkZFUik7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXVldWUyX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlckxpc3QgKiBidWZmZXJfbGlzdCkKLXsKLSAgR3N0UXVldWUyICpxdWV1ZTsKLQotICBxdWV1ZSA9IEdTVF9RVUVVRTIgKHBhcmVudCk7Ci0KLSAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAicmVjZWl2ZWQgYnVmZmVyIGxpc3QgJXAiLCBidWZmZXJfbGlzdCk7Ci0KLSAgcmV0dXJuIGdzdF9xdWV1ZTJfY2hhaW5fYnVmZmVyX29yX2J1ZmZlcl9saXN0IChxdWV1ZSwKLSAgICAgIEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWZmZXJfbGlzdCksIEdTVF9RVUVVRTJfSVRFTV9UWVBFX0JVRkZFUl9MSVNUKTsKLX0KLQotc3RhdGljIEdzdE1pbmlPYmplY3QgKgotZ3N0X3F1ZXVlMl9kZXF1ZXVlX29uX2VvcyAoR3N0UXVldWUyICogcXVldWUsIEdzdFF1ZXVlMkl0ZW1UeXBlICogaXRlbV90eXBlKQotewotICBHc3RNaW5pT2JqZWN0ICpkYXRhOwotCi0gIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAiZ290IEVPUyBmcm9tIGRvd25zdHJlYW0iKTsKLQotICAvKiBzdG9wIHB1c2hpbmcgYnVmZmVycywgd2UgZGVxdWV1ZSBhbGwgaXRlbXMgdW50aWwgd2Ugc2VlIGFuIGl0ZW0gdGhhdCB3ZQotICAgKiBjYW4gcHVzaCBhZ2Fpbiwgd2hpY2ggaXMgRU9TIG9yIFNFR01FTlQuIElmIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlCi0gICAqIHF1ZXVlIHdlIGNhbiBwdXNoLCB3ZSBzZXQgYSBmbGFnIHRvIG1ha2UgdGhlIHNpbmtwYWQgcmVmdXNlIG1vcmUKLSAgICogYnVmZmVycyB3aXRoIGFuIEVPUyByZXR1cm4gdmFsdWUgdW50aWwgd2UgcmVjZWl2ZSBzb21ldGhpbmcKLSAgICogcHVzaGFibGUgYWdhaW4gb3Igd2UgZ2V0IGZsdXNoZWQuICovCi0gIHdoaWxlICgoZGF0YSA9IGdzdF9xdWV1ZTJfbG9ja2VkX2RlcXVldWUgKHF1ZXVlLCBpdGVtX3R5cGUpKSkgewotICAgIGlmICgqaXRlbV90eXBlID09IEdTVF9RVUVVRTJfSVRFTV9UWVBFX0JVRkZFUikgewotICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICAgImRyb3BwaW5nIEVPUyBidWZmZXIgJXAiLCBkYXRhKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSkpOwotICAgIH0gZWxzZSBpZiAoKml0ZW1fdHlwZSA9PSBHU1RfUVVFVUUyX0lURU1fVFlQRV9FVkVOVCkgewotICAgICAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX0VWRU5UX0NBU1QgKGRhdGEpOwotICAgICAgR3N0RXZlbnRUeXBlIHR5cGUgPSBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpOwotCi0gICAgICBpZiAodHlwZSA9PSBHU1RfRVZFTlRfRU9TIHx8IHR5cGUgPT0gR1NUX0VWRU5UX1NFR01FTlQpIHsKLSAgICAgICAgLyogd2UgZm91bmQgYSBwdXNoYWJsZSBpdGVtIGluIHRoZSBxdWV1ZSwgcHVzaCBpdCBvdXQgKi8KLSAgICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsCi0gICAgICAgICAgICAicHVzaGluZyBwdXNoYWJsZSBldmVudCAlcyBhZnRlciBFT1MiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgIH0KLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAgICJkcm9wcGluZyBFT1MgZXZlbnQgJXAiLCBldmVudCk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICB9IGVsc2UgaWYgKCppdGVtX3R5cGUgPT0gR1NUX1FVRVVFMl9JVEVNX1RZUEVfQlVGRkVSX0xJU1QpIHsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAgICJkcm9wcGluZyBFT1MgYnVmZmVyIGxpc3QgJXAiLCBkYXRhKTsKLSAgICAgIGdzdF9idWZmZXJfbGlzdF91bnJlZiAoR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGRhdGEpKTsKLSAgICB9IGVsc2UgaWYgKCppdGVtX3R5cGUgPT0gR1NUX1FVRVVFMl9JVEVNX1RZUEVfUVVFUlkpIHsKLSAgICAgIHF1ZXVlLT5sYXN0X3F1ZXJ5ID0gRkFMU0U7Ci0gICAgICBnX2NvbmRfc2lnbmFsICgmcXVldWUtPnF1ZXJ5X2hhbmRsZWQpOwotICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJkcm9wcGluZyBFT1MgcXVlcnkgJXAiLCBkYXRhKTsKLSAgICB9Ci0gIH0KLSAgLyogbm8gbW9yZSBpdGVtcyBpbiB0aGUgcXVldWUuIFNldCB0aGUgdW5leHBlY3RlZCBmbGFnIHNvIHRoYXQgdXBzdHJlYW0KLSAgICogbWFrZSB1cyByZWZ1c2UgYW55IG1vcmUgYnVmZmVycyBvbiB0aGUgc2lua3BhZC4gU2luY2Ugd2Ugd2lsbCBzdGlsbAotICAgKiBhY2NlcHQgRU9TIGFuZCBTRUdNRU5UIHdlIHJldHVybiBfRkxPV19PSyB0byB0aGUgY2FsbGVyIHNvIHRoYXQgdGhlCi0gICAqIHRhc2sgZnVuY3Rpb24gZG9lcyBub3Qgc2h1dCBkb3duLiAqLwotICBxdWV1ZS0+dW5leHBlY3RlZCA9IFRSVUU7Ci0gIHJldHVybiBOVUxMOwotfQotCi0vKiBkZXF1ZXVlIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUgYW4gcHVzaCBpdCBkb3duc3RyZWFtLiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zCi0gKiB0aGUgcmVzdWx0IG9mIHRoZSBwdXNoLiAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdWV1ZTJfcHVzaF9vbmUgKEdzdFF1ZXVlMiAqIHF1ZXVlKQotewotICBHc3RGbG93UmV0dXJuIHJlc3VsdCA9IHF1ZXVlLT5zcmNyZXN1bHQ7Ci0gIEdzdE1pbmlPYmplY3QgKmRhdGE7Ci0gIEdzdFF1ZXVlMkl0ZW1UeXBlIGl0ZW1fdHlwZTsKLQotICBkYXRhID0gZ3N0X3F1ZXVlMl9sb2NrZWRfZGVxdWV1ZSAocXVldWUsICZpdGVtX3R5cGUpOwotICBpZiAoZGF0YSA9PSBOVUxMKQotICAgIGdvdG8gbm9faXRlbTsKLQotbmV4dDoKLSAgU1RBVFVTIChxdWV1ZSwgcXVldWUtPnNyY3BhZCwgIldlIGhhdmUgc29tZXRoaW5nIGRlcXVldWQiKTsKLSAgZ19hdG9taWNfaW50X3NldCAoJnF1ZXVlLT5kb3duc3RyZWFtX21heV9ibG9jaywKLSAgICAgIGl0ZW1fdHlwZSA9PSBHU1RfUVVFVUUyX0lURU1fVFlQRV9CVUZGRVIgfHwKLSAgICAgIGl0ZW1fdHlwZSA9PSBHU1RfUVVFVUUyX0lURU1fVFlQRV9CVUZGRVJfTElTVCk7Ci0gIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gIGdzdF9xdWV1ZTJfcG9zdF9idWZmZXJpbmcgKHF1ZXVlKTsKLQotICBpZiAoaXRlbV90eXBlID09IEdTVF9RVUVVRTJfSVRFTV9UWVBFX0JVRkZFUikgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gICAgYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUIChkYXRhKTsKLQotICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaCAocXVldWUtPnNyY3BhZCwgYnVmZmVyKTsKLSAgICBnX2F0b21pY19pbnRfc2V0ICgmcXVldWUtPmRvd25zdHJlYW1fbWF5X2Jsb2NrLCAwKTsKLQotICAgIC8qIG5lZWQgdG8gY2hlY2sgZm9yIHNyY3Jlc3VsdCBoZXJlIGFzIHdlbGwgKi8KLSAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c3JjcmVzdWx0LCBvdXRfZmx1c2hpbmcpOwotICAgIGlmIChyZXN1bHQgPT0gR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICBkYXRhID0gZ3N0X3F1ZXVlMl9kZXF1ZXVlX29uX2VvcyAocXVldWUsICZpdGVtX3R5cGUpOwotICAgICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgZ290byBuZXh0OwotICAgICAgLyogU2luY2Ugd2Ugd2lsbCBzdGlsbCBhY2NlcHQgRU9TIGFuZCBTRUdNRU5UIHdlIHJldHVybiBfRkxPV19PSwotICAgICAgICogdG8gdGhlIGNhbGxlciBzbyB0aGF0IHRoZSB0YXNrIGZ1bmN0aW9uIGRvZXMgbm90IHNodXQgZG93biAqLwotICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgfQotICB9IGVsc2UgaWYgKGl0ZW1fdHlwZSA9PSBHU1RfUVVFVUUyX0lURU1fVFlQRV9FVkVOVCkgewotICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVF9DQVNUIChkYXRhKTsKLSAgICBHc3RFdmVudFR5cGUgdHlwZSA9IEdTVF9FVkVOVF9UWVBFIChldmVudCk7Ci0KLSAgICBpZiAodHlwZSA9PSBHU1RfRVZFTlRfVEFHKSB7Ci0gICAgICBpZiAocXVldWUtPnVzZV90YWdzX2JpdHJhdGUpIHsKLSAgICAgICAgR3N0VGFnTGlzdCAqdGFnczsKLSAgICAgICAgZ3VpbnQgYml0cmF0ZTsKLQotICAgICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ3MpOwotICAgICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdzLCBHU1RfVEFHX0JJVFJBVEUsICZiaXRyYXRlKSB8fAotICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdzLCBHU1RfVEFHX05PTUlOQUxfQklUUkFURSwgJmJpdHJhdGUpKSB7Ci0gICAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICAgICAgcXVldWUtPnNyY190YWdzX2JpdHJhdGUgPSBiaXRyYXRlOwotICAgICAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF1ZXVlLCAic3JjIHBhZCBiaXRyYXRlIGZyb20gdGFncyBub3cgJXUiLCBiaXRyYXRlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNyY3BhZCwgZXZlbnQpOwotCi0gICAgLyogaWYgd2UncmUgRU9TLCByZXR1cm4gRU9TIHNvIHRoYXQgdGhlIHRhc2sgcGF1c2VzLiAqLwotICAgIGlmICh0eXBlID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAgICJwdXNoZWQgRU9TIGV2ZW50ICVwLCByZXR1cm4gRU9TIiwgZXZlbnQpOwotICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfRU9TOwotICAgIH0KLQotICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DS19DSEVDSyAocXVldWUsIHF1ZXVlLT5zcmNyZXN1bHQsIG91dF9mbHVzaGluZyk7Ci0gIH0gZWxzZSBpZiAoaXRlbV90eXBlID09IEdTVF9RVUVVRTJfSVRFTV9UWVBFX0JVRkZFUl9MSVNUKSB7Ci0gICAgR3N0QnVmZmVyTGlzdCAqYnVmZmVyX2xpc3Q7Ci0KLSAgICBidWZmZXJfbGlzdCA9IEdTVF9CVUZGRVJfTElTVF9DQVNUIChkYXRhKTsKLQotICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaF9saXN0IChxdWV1ZS0+c3JjcGFkLCBidWZmZXJfbGlzdCk7Ci0gICAgZ19hdG9taWNfaW50X3NldCAoJnF1ZXVlLT5kb3duc3RyZWFtX21heV9ibG9jaywgMCk7Ci0KLSAgICAvKiBuZWVkIHRvIGNoZWNrIGZvciBzcmNyZXN1bHQgaGVyZSBhcyB3ZWxsICovCi0gICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNyY3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgICBpZiAocmVzdWx0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgZGF0YSA9IGdzdF9xdWV1ZTJfZGVxdWV1ZV9vbl9lb3MgKHF1ZXVlLCAmaXRlbV90eXBlKTsKLSAgICAgIGlmIChkYXRhICE9IE5VTEwpCi0gICAgICAgIGdvdG8gbmV4dDsKLSAgICAgIC8qIFNpbmNlIHdlIHdpbGwgc3RpbGwgYWNjZXB0IEVPUyBhbmQgU0VHTUVOVCB3ZSByZXR1cm4gX0ZMT1dfT0sKLSAgICAgICAqIHRvIHRoZSBjYWxsZXIgc28gdGhhdCB0aGUgdGFzayBmdW5jdGlvbiBkb2VzIG5vdCBzaHV0IGRvd24gKi8KLSAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgIH0KLSAgfSBlbHNlIGlmIChpdGVtX3R5cGUgPT0gR1NUX1FVRVVFMl9JVEVNX1RZUEVfUVVFUlkpIHsKLSAgICBHc3RRdWVyeSAqcXVlcnkgPSBHU1RfUVVFUllfQ0FTVCAoZGF0YSk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocXVldWUtPnNyY3BhZCwgIlBlZXJpbmcgcXVlcnkgJXAiLCBxdWVyeSk7Ci0gICAgcXVldWUtPmxhc3RfcXVlcnkgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHF1ZXVlLT5zcmNwYWQsIHF1ZXJ5KTsKLSAgICBHU1RfTE9HX09CSkVDVCAocXVldWUtPnNyY3BhZCwgIlBlZXJlZCBxdWVyeSIpOwotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAiZGlkIHF1ZXJ5ICVwLCByZXR1cm4gJWQiLCBxdWVyeSwgcXVldWUtPmxhc3RfcXVlcnkpOwotICAgIGdfY29uZF9zaWduYWwgKCZxdWV1ZS0+cXVlcnlfaGFuZGxlZCk7Ci0gICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNyY3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotbm9faXRlbToKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLAotICAgICAgICAiZXhpdCBiZWNhdXNlIHdlIGhhdmUgbm8gaXRlbSBpbiB0aGUgcXVldWUiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLW91dF9mbHVzaGluZzoKLSAgewotICAgIEdTVF9DQVRfTE9HX09CSkVDVCAocXVldWVfZGF0YWZsb3csIHF1ZXVlLCAiZXhpdCBiZWNhdXNlIHdlIGFyZSBmbHVzaGluZyIpOwotICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgfQotfQotCi0vKiBjYWxsZWQgcmVwZWF0ZWRseSB3aXRoIEBwYWQgYXMgdGhlIHNvdXJjZSBwYWQuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHB1c2ggb3V0Ci0gKiBkYXRhIHRvIHRoZSBwZWVyIGVsZW1lbnQuICovCi1zdGF0aWMgdm9pZAotZ3N0X3F1ZXVlMl9sb29wIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFF1ZXVlMiAqcXVldWU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHF1ZXVlID0gR1NUX1FVRVVFMiAoR1NUX1BBRF9QQVJFTlQgKHBhZCkpOwotCi0gIC8qIGhhdmUgdG8gbG9jayBmb3IgdGhyZWFkLXNhZmV0eSAqLwotICBHU1RfUVVFVUUyX01VVEVYX0xPQ0tfQ0hFQ0sgKHF1ZXVlLCBxdWV1ZS0+c3JjcmVzdWx0LCBvdXRfZmx1c2hpbmcpOwotCi0gIGlmIChnc3RfcXVldWUyX2lzX2VtcHR5IChxdWV1ZSkpIHsKLSAgICBnYm9vbGVhbiBzdGFydGVkOwotCi0gICAgLyogcGF1c2UgdGhlIHRpbWVyIHdoaWxlIHdlIHdhaXQuIFRoZSBmYWN0IHRoYXQgd2UgYXJlIHdhaXRpbmcgZG9lcyBub3QgbWVhbgotICAgICAqIHRoZSBieXRlcmF0ZSBvbiB0aGUgb3V0cHV0IHBhZCBpcyBsb3dlciAqLwotICAgIGlmICgoc3RhcnRlZCA9IHF1ZXVlLT5vdXRfdGltZXJfc3RhcnRlZCkpCi0gICAgICBnX3RpbWVyX3N0b3AgKHF1ZXVlLT5vdXRfdGltZXIpOwotCi0gICAgR1NUX0NBVF9ERUJVR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKLSAgICAgICAgInF1ZXVlIGlzIGVtcHR5LCB3YWl0aW5nIGZvciBuZXcgZGF0YSIpOwotICAgIGRvIHsKLSAgICAgIC8qIFdhaXQgZm9yIGRhdGEgdG8gYmUgYXZhaWxhYmxlLCB3ZSBjb3VsZCBiZSB1bmxvY2tlZCBiZWNhdXNlIG9mIGEgZmx1c2guICovCi0gICAgICBHU1RfUVVFVUUyX1dBSVRfQUREX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNyY3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgICB9Ci0gICAgd2hpbGUgKGdzdF9xdWV1ZTJfaXNfZW1wdHkgKHF1ZXVlKSk7Ci0KLSAgICAvKiBhbmQgY29udGludWUgaWYgd2Ugd2VyZSBydW5uaW5nIGJlZm9yZSAqLwotICAgIGlmIChzdGFydGVkKQotICAgICAgZ190aW1lcl9jb250aW51ZSAocXVldWUtPm91dF90aW1lcik7Ci0gIH0KLSAgcmV0ID0gZ3N0X3F1ZXVlMl9wdXNoX29uZSAocXVldWUpOwotICBxdWV1ZS0+c3JjcmVzdWx0ID0gcmV0OwotICBxdWV1ZS0+c2lua3Jlc3VsdCA9IHJldDsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIG91dF9mbHVzaGluZzsKLQotICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICBnc3RfcXVldWUyX3Bvc3RfYnVmZmVyaW5nIChxdWV1ZSk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgZ2Jvb2xlYW4gZW9zID0gcXVldWUtPmlzX2VvczsKLSAgICBHc3RGbG93UmV0dXJuIHJldCA9IHF1ZXVlLT5zcmNyZXN1bHQ7Ci0KLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHF1ZXVlLT5zcmNwYWQpOwotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpIHsKLSAgICAgIGdzdF9xdWV1ZTJfbG9ja2VkX2ZsdXNoIChxdWV1ZSwgRkFMU0UsIEZBTFNFKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1FVRVVFMl9TSUdOQUxfREVMIChxdWV1ZSk7Ci0gICAgICBxdWV1ZS0+bGFzdF9xdWVyeSA9IEZBTFNFOwotICAgICAgZ19jb25kX3NpZ25hbCAoJnF1ZXVlLT5xdWVyeV9oYW5kbGVkKTsKLSAgICB9Ci0gICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHF1ZXVlX2RhdGFmbG93LCBxdWV1ZSwKLSAgICAgICAgInBhdXNlIHRhc2ssIHJlYXNvbjogICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHF1ZXVlLT5zcmNyZXN1bHQpKTsKLSAgICAvKiBsZXQgYXBwIGtub3cgYWJvdXQgdXMgZ2l2aW5nIHVwIGlmIHVwc3RyZWFtIGlzIG5vdCBleHBlY3RlZCB0byBkbyBzbyAqLwotICAgIC8qIEVPUyBpcyBhbHJlYWR5IHRha2VuIGNhcmUgb2YgZWxzZXdoZXJlICovCi0gICAgaWYgKGVvcyAmJiAocmV0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQgfHwgcmV0IDwgR1NUX0ZMT1dfRU9TKSkgewotICAgICAgR1NUX0VMRU1FTlRfRkxPV19FUlJPUiAocXVldWUsIHJldCk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF1ZXVlLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1ZXVlMl9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0UXVldWUyICpxdWV1ZSA9IEdTVF9RVUVVRTIgKHBhcmVudCk7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIEdTVF9DQVRfREVCVUdfT0JKRUNUIChxdWV1ZV9kYXRhZmxvdywgcXVldWUsICJnb3QgZXZlbnQgJXAgKCVzKSIsCi0gICAgICBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSNlbmRpZgotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKLSAgICAgICAgLyoganVzdCBmb3J3YXJkIHVwc3RyZWFtICovCi0gICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIG5vdyB1bmJsb2NrIHRoZSBnZXRyYW5nZSBmdW5jdGlvbiAqLwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJmbHVzaGluZyIpOwotICAgICAgICBxdWV1ZS0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICAgIEdTVF9RVUVVRTJfU0lHTkFMX0FERCAocXVldWUpOwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gICAgICAgIC8qIHdoZW4gdXNpbmcgYSB0ZW1wIGZpbGUsIHdlIGVhdCB0aGUgZXZlbnQgKi8KLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKLSAgICAgICAgLyoganVzdCBmb3J3YXJkIHVwc3RyZWFtICovCi0gICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIG5vdyB1bmJsb2NrIHRoZSBnZXRyYW5nZSBmdW5jdGlvbiAqLwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotCi0gICAgICAgIC8qIHdoZW4gdXNpbmcgYSB0ZW1wIGZpbGUsIHdlIGVhdCB0aGUgZXZlbnQgKi8KLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9SRUNPTkZJR1VSRToKLSAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotICAgICAgLyogYXNzdW1lIGRvd25zdHJlYW0gaXMgbGlua2VkIG5vdyBhbmQgdHJ5IHRvIHB1c2ggYWdhaW4gKi8KLSAgICAgIGlmIChxdWV1ZS0+c3JjcmVzdWx0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQpIHsKLSAgICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgICBxdWV1ZS0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgICAgICBpZiAoR1NUX1BBRF9NT0RFIChwYWQpID09IEdTVF9QQURfTU9ERV9QVVNIKSB7Ci0gICAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrIChwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdWV1ZTJfbG9vcCwgcGFkLAotICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChxdWV1ZS0+c2lua3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocXVldWUtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXVldWUyX2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RRdWV1ZTIgKnF1ZXVlOwotCi0gIHF1ZXVlID0gR1NUX1FVRVVFMiAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICB7Ci0gICAgICBnaW50NjQgcGVlcl9wb3M7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAocXVldWUtPnNpbmtwYWQsIHF1ZXJ5KSkKLSAgICAgICAgZ290byBwZWVyX2ZhaWxlZDsKLQotICAgICAgLyogZ2V0IHBlZXIgcG9zaXRpb24gKi8KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsICZwZWVyX3Bvcyk7Ci0KLSAgICAgIC8qIEZJWE1FOiB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZXJlJ3Mgbm8gZGlzY29udCBpbiB0aGUgcXVldWUgKi8KLSAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgICAgICBwZWVyX3BvcyAtPSBxdWV1ZS0+Y3VyX2xldmVsLmJ5dGVzOwotICAgICAgICAgIGlmIChwZWVyX3BvcyA8IDApICAgICAvKiBDbGFtcCByZXN1bHQgdG8gMCAqLwotICAgICAgICAgICAgcGVlcl9wb3MgPSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICBwZWVyX3BvcyAtPSBxdWV1ZS0+Y3VyX2xldmVsLnRpbWU7Ci0gICAgICAgICAgaWYgKHBlZXJfcG9zIDwgMCkgICAgIC8qIENsYW1wIHJlc3VsdCB0byAwICovCi0gICAgICAgICAgICBwZWVyX3BvcyA9IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdWV1ZSwgImRyb3BwaW5nIHF1ZXJ5IGluICVzIGZvcm1hdCwgZG9uJ3QgIgotICAgICAgICAgICAgICAia25vdyBob3cgdG8gYWRqdXN0IHZhbHVlIiwgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSk7Ci0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgICAgLyogc2V0IHVwZGF0ZWQgcG9zaXRpb24gKi8KLSAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIHBlZXJfcG9zKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjoKLSAgICB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImRvaW5nIHBlZXIgcXVlcnkiKTsKLQotICAgICAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKHF1ZXVlLT5zaW5rcGFkLCBxdWVyeSkpCi0gICAgICAgIGdvdG8gcGVlcl9mYWlsZWQ7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicGVlciBxdWVyeSBzdWNjZXNzIik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfQlVGRkVSSU5HOgotICAgIHsKLSAgICAgIGdpbnQgcGVyY2VudDsKLSAgICAgIGdib29sZWFuIGlzX2J1ZmZlcmluZzsKLSAgICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZTsKLSAgICAgIGdpbnQgYXZnX2luLCBhdmdfb3V0OwotICAgICAgZ2ludDY0IGJ1ZmZlcmluZ19sZWZ0OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgInF1ZXJ5IGJ1ZmZlcmluZyIpOwotCi0gICAgICBnZXRfYnVmZmVyaW5nX2xldmVsIChxdWV1ZSwgJmlzX2J1ZmZlcmluZywgJnBlcmNlbnQpOwotICAgICAgcGVyY2VudCA9IGNvbnZlcnRfdG9fYnVmZmVyaW5nX3BlcmNlbnQgKHF1ZXVlLCBwZXJjZW50KTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3BlcmNlbnQgKHF1ZXJ5LCBpc19idWZmZXJpbmcsIHBlcmNlbnQpOwotCi0gICAgICBnZXRfYnVmZmVyaW5nX3N0YXRzIChxdWV1ZSwgcGVyY2VudCwgJm1vZGUsICZhdmdfaW4sICZhdmdfb3V0LAotICAgICAgICAgICZidWZmZXJpbmdfbGVmdCk7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19zdGF0cyAocXVlcnksIG1vZGUsIGF2Z19pbiwgYXZnX291dCwKLSAgICAgICAgICBidWZmZXJpbmdfbGVmdCk7Ci0KLSAgICAgIGlmICghUVVFVUVfSVNfVVNJTkdfUVVFVUUgKHF1ZXVlKSkgewotICAgICAgICAvKiBhZGQgcmFuZ2VzIGZvciBkb3dubG9hZCBhbmQgcmluZ2J1ZmZlciBidWZmZXJpbmcgKi8KLSAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wLCByYW5nZV9zdGFydCwgcmFuZ2Vfc3RvcDsKLSAgICAgICAgZ3VpbnQ2NCB3cml0aW5nX3BvczsKLSAgICAgICAgZ2ludDY0IGVzdGltYXRlZF90b3RhbDsKLSAgICAgICAgZ2ludDY0IGR1cmF0aW9uOwotICAgICAgICBnYm9vbGVhbiBwZWVyX3JlcywgaXNfZW9zOwotICAgICAgICBHc3RRdWV1ZTJSYW5nZSAqcXVldWVkX3JhbmdlczsKLQotICAgICAgICAvKiB3ZSBuZWVkIGEgY3VycmVudCBkb3dubG9hZCByZWdpb24gKi8KLSAgICAgICAgaWYgKHF1ZXVlLT5jdXJyZW50ID09IE5VTEwpCi0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICAgIHdyaXRpbmdfcG9zID0gcXVldWUtPmN1cnJlbnQtPndyaXRpbmdfcG9zOwotICAgICAgICBpc19lb3MgPSBxdWV1ZS0+aXNfZW9zOwotCi0gICAgICAgIGlmIChpc19lb3MpIHsKLSAgICAgICAgICAvKiB3ZSdyZSBFT1MsIHdlIGtub3cgdGhlIGR1cmF0aW9uIGluIGJ5dGVzIG5vdyAqLwotICAgICAgICAgIHBlZXJfcmVzID0gVFJVRTsKLSAgICAgICAgICBkdXJhdGlvbiA9IHdyaXRpbmdfcG9zOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8qIGdldCBkdXJhdGlvbiBvZiB1cHN0cmVhbSBpbiBieXRlcyAqLwotICAgICAgICAgIHBlZXJfcmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChxdWV1ZS0+c2lua3BhZCwKLSAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgJmR1cmF0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicGVyY2VudCAlZCwgZHVyYXRpb24gJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAiLCB3cml0aW5nICUiIEdfR0lOVDY0X0ZPUk1BVCwgcGVyY2VudCwgZHVyYXRpb24sIHdyaXRpbmdfcG9zKTsKLQotICAgICAgICAvKiBjYWxjdWxhdGUgcmVtYWluaW5nIGFuZCB0b3RhbCBkb3dubG9hZCB0aW1lICovCi0gICAgICAgIGlmIChwZWVyX3JlcyAmJiBhdmdfaW4gPiAwLjApCi0gICAgICAgICAgZXN0aW1hdGVkX3RvdGFsID0gKChkdXJhdGlvbiAtIHdyaXRpbmdfcG9zKSAqIDEwMDApIC8gYXZnX2luOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZXN0aW1hdGVkX3RvdGFsID0gLTE7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJlc3RpbWF0ZWQtdG90YWwgJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgICAgICAgZXN0aW1hdGVkX3RvdGFsKTsKLQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgJmZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICBjYXNlIEdTVF9GT1JNQVRfUEVSQ0VOVDoKLSAgICAgICAgICAgIC8qIHdlIG5lZWQgZHVyYXRpb24gKi8KLSAgICAgICAgICAgIGlmICghcGVlcl9yZXMpCi0gICAgICAgICAgICAgIGdvdG8gcGVlcl9mYWlsZWQ7Ci0KLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgICAgICAgIC8qIGdldCBvdXIgYXZhaWxhYmxlIGRhdGEgcmVsYXRpdmUgdG8gdGhlIGR1cmF0aW9uICovCi0gICAgICAgICAgICBpZiAoZHVyYXRpb24gIT0gLTEpCi0gICAgICAgICAgICAgIHN0b3AgPQotICAgICAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfRk9STUFUX1BFUkNFTlRfTUFYLCB3cml0aW5nX3BvcywKLSAgICAgICAgICAgICAgICAgIGR1cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgc3RvcCA9IC0xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgICAgc3RhcnQgPSAwOwotICAgICAgICAgICAgc3RvcCA9IHdyaXRpbmdfcG9zOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN0YXJ0ID0gLTE7Ci0gICAgICAgICAgICBzdG9wID0gLTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGZpbGwgb3V0IHRoZSBidWZmZXJlZCByYW5nZXMgKi8KLSAgICAgICAgZm9yIChxdWV1ZWRfcmFuZ2VzID0gcXVldWUtPnJhbmdlczsgcXVldWVkX3JhbmdlczsKLSAgICAgICAgICAgIHF1ZXVlZF9yYW5nZXMgPSBxdWV1ZWRfcmFuZ2VzLT5uZXh0KSB7Ci0gICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9QRVJDRU5UOgotICAgICAgICAgICAgICBpZiAoZHVyYXRpb24gPT0gLTEpIHsKLSAgICAgICAgICAgICAgICByYW5nZV9zdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgcmFuZ2Vfc3RvcCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQgPQotICAgICAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfRk9STUFUX1BFUkNFTlRfTUFYLAotICAgICAgICAgICAgICAgICAgcXVldWVkX3Jhbmdlcy0+b2Zmc2V0LCBkdXJhdGlvbik7Ci0gICAgICAgICAgICAgIHJhbmdlX3N0b3AgPQotICAgICAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfRk9STUFUX1BFUkNFTlRfTUFYLAotICAgICAgICAgICAgICAgICAgcXVldWVkX3Jhbmdlcy0+d3JpdGluZ19wb3MsIGR1cmF0aW9uKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgICAgICAgICAgIHJhbmdlX3N0YXJ0ID0gcXVldWVkX3Jhbmdlcy0+b2Zmc2V0OwotICAgICAgICAgICAgICByYW5nZV9zdG9wID0gcXVldWVkX3Jhbmdlcy0+d3JpdGluZ19wb3M7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQgPSAtMTsKLSAgICAgICAgICAgICAgcmFuZ2Vfc3RvcCA9IC0xOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHJhbmdlX3N0YXJ0ID09IHJhbmdlX3N0b3ApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwKLSAgICAgICAgICAgICAgInJhbmdlIHN0YXJ0aW5nIGF0ICUiIEdfR0lOVDY0X0ZPUk1BVCAiIGFuZCBmaW5pc2hpbmcgYXQgJSIKLSAgICAgICAgICAgICAgR19HSU5UNjRfRk9STUFULCByYW5nZV9zdGFydCwgcmFuZ2Vfc3RvcCk7Ci0gICAgICAgICAgZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCByYW5nZV9zdGFydCwgcmFuZ2Vfc3RvcCk7Ci0gICAgICAgIH0KLQotICAgICAgICBnc3RfcXVlcnlfc2V0X2J1ZmZlcmluZ19yYW5nZSAocXVlcnksIGZvcm1hdCwgc3RhcnQsIHN0b3AsCi0gICAgICAgICAgICBlc3RpbWF0ZWRfdG90YWwpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX1NDSEVEVUxJTkc6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gcHVsbF9tb2RlOwotICAgICAgR3N0U2NoZWR1bGluZ0ZsYWdzIGZsYWdzID0gMDsKLQotICAgICAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKHF1ZXVlLT5zaW5rcGFkLCBxdWVyeSkpCi0gICAgICAgIGdvdG8gcGVlcl9mYWlsZWQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nIChxdWVyeSwgJmZsYWdzLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgICAgLyogd2UgY2FuIG9wZXJhdGUgaW4gcHVsbCBtb2RlIHdoZW4gd2UgYXJlIHVzaW5nIGEgdGVtcGZpbGUgKi8KLSAgICAgIHB1bGxfbW9kZSA9ICFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpOwotCi0gICAgICBpZiAocHVsbF9tb2RlKQotICAgICAgICBmbGFncyB8PSBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9zY2hlZHVsaW5nIChxdWVyeSwgZmxhZ3MsIDAsIC0xLCAwKTsKLSAgICAgIGlmIChwdWxsX21vZGUpCi0gICAgICAgIGdzdF9xdWVyeV9hZGRfc2NoZWR1bGluZ19tb2RlIChxdWVyeSwgR1NUX1BBRF9NT0RFX1BVTEwpOwotICAgICAgZ3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGUgKHF1ZXJ5LCBHU1RfUEFEX01PREVfUFVTSCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHBlZXIgaGFuZGxlZCBvdGhlciBxdWVyaWVzICovCi0gICAgICBpZiAoIWdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KSkKLSAgICAgICAgZ290byBwZWVyX2ZhaWxlZDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1wZWVyX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZmFpbGVkIHBlZXIgcXVlcnkiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXVldWUyX2hhbmRsZV9xdWVyeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFF1ZXVlMiAqcXVldWUgPSBHU1RfUVVFVUUyIChlbGVtZW50KTsKLQotICAvKiBzaW1wbHkgZm9yd2FyZCB0byB0aGUgc3JjcGFkIHF1ZXJ5IGZ1bmN0aW9uICovCi0gIHJldHVybiBnc3RfcXVldWUyX2hhbmRsZV9zcmNfcXVlcnkgKHF1ZXVlLT5zcmNwYWQsIEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCi0gICAgICBxdWVyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVldWUyX3VwZGF0ZV91cHN0cmVhbV9zaXplIChHc3RRdWV1ZTIgKiBxdWV1ZSkKLXsKLSAgZ2ludDY0IHVwc3RyZWFtX3NpemUgPSAtMTsKLQotICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChxdWV1ZS0+c2lua3BhZCwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgICAgICAmdXBzdHJlYW1fc2l6ZSkpIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHF1ZXVlLCAidXBzdHJlYW0gc2l6ZTogJSIgR19HSU5UNjRfRk9STUFULCB1cHN0cmVhbV9zaXplKTsKLQotICAgIC8qIHVwc3RyZWFtX3NpemUgY2FuIGJlIG5lZ2F0aXZlIGJ1dCBxdWV1ZS0+dXBzdHJlYW1fc2l6ZSBpcyB1bnNpZ25lZC4KLSAgICAgKiBQcmV2ZW50IHNldHRpbmcgbmVnYXRpdmUgdmFsdWVzIHRvIGl0ICh0aGUgcXVlcnkgY2FuIHJldHVybiAtMSkgKi8KLSAgICBpZiAodXBzdHJlYW1fc2l6ZSA+PSAwKQotICAgICAgcXVldWUtPnVwc3RyZWFtX3NpemUgPSB1cHN0cmVhbV9zaXplOwotICAgIGVsc2UKLSAgICAgIHF1ZXVlLT51cHN0cmVhbV9zaXplID0gMDsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F1ZXVlMl9nZXRfcmFuZ2UgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBndWludDY0IG9mZnNldCwKLSAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWZmZXIpCi17Ci0gIEdzdFF1ZXVlMiAqcXVldWU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHF1ZXVlID0gR1NUX1FVRVVFMl9DQVNUIChwYXJlbnQpOwotCi0gIGxlbmd0aCA9IChsZW5ndGggPT0gLTEpID8gREVGQVVMVF9CVUZGRVJfU0laRSA6IGxlbmd0aDsKLSAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLX0NIRUNLIChxdWV1ZSwgcXVldWUtPnNyY3Jlc3VsdCwgb3V0X2ZsdXNoaW5nKTsKLSAgb2Zmc2V0ID0gKG9mZnNldCA9PSAtMSkgPyBxdWV1ZS0+Y3VycmVudC0+cmVhZGluZ19wb3MgOiBvZmZzZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsCi0gICAgICAiR2V0dGluZyByYW5nZTogb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgbGVuZ3RoICV1Iiwgb2Zmc2V0LCBsZW5ndGgpOwotCi0gIC8qIGNhdGNoIGFueSByZWFkcyBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUgaGVyZSB0byBtYWtlIHN1cmUgcXVldWUyCi0gICAqIGRvZXNuJ3Qgc2VuZCBzZWVrIGV2ZW50cyBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUgdXBzdHJlYW0sIHNpbmNlCi0gICAqIHRoYXQgd291bGQgY29uZnVzZSBlbGVtZW50cyBzdWNoIGFzIHNvdXBodHRwc3JjIGFuZC9vciBodHRwIHNlcnZlcnMuCi0gICAqIERlbXV4ZXJzIG9mdGVuIGp1c3QgbG9vcCB1bnRpbCBFT1MgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB0byBmaWd1cmUgb3V0Ci0gICAqIHdoZW4gdGhleSd2ZSByZWFkIGFsbCB0aGUgZW5kLWhlYWRlcnMgb3IgaW5kZXggY2h1bmtzLiAqLwotICBpZiAoR19VTkxJS0VMWSAob2Zmc2V0ID49IHF1ZXVlLT51cHN0cmVhbV9zaXplKSkgewotICAgIGdzdF9xdWV1ZTJfdXBkYXRlX3Vwc3RyZWFtX3NpemUgKHF1ZXVlKTsKLSAgICBpZiAocXVldWUtPnVwc3RyZWFtX3NpemUgPiAwICYmIG9mZnNldCA+PSBxdWV1ZS0+dXBzdHJlYW1fc2l6ZSkKLSAgICAgIGdvdG8gb3V0X3VuZXhwZWN0ZWQ7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAob2Zmc2V0ICsgbGVuZ3RoID4gcXVldWUtPnVwc3RyZWFtX3NpemUpKSB7Ci0gICAgZ3N0X3F1ZXVlMl91cGRhdGVfdXBzdHJlYW1fc2l6ZSAocXVldWUpOwotICAgIGlmIChxdWV1ZS0+dXBzdHJlYW1fc2l6ZSA+IDAgJiYgb2Zmc2V0ICsgbGVuZ3RoID49IHF1ZXVlLT51cHN0cmVhbV9zaXplKSB7Ci0gICAgICBsZW5ndGggPSBxdWV1ZS0+dXBzdHJlYW1fc2l6ZSAtIG9mZnNldDsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiYWRqdXN0aW5nIGxlbmd0aCBkb3dudG8gJWQiLCBsZW5ndGgpOwotICAgIH0KLSAgfQotCi0gIC8qIEZJWE1FIC0gZnVuY3Rpb24gd2lsbCBibG9jayB3aGVuIHRoZSByYW5nZSBpcyBub3QgeWV0IGF2YWlsYWJsZSAqLwotICByZXQgPSBnc3RfcXVldWUyX2NyZWF0ZV9yZWFkIChxdWV1ZSwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlcik7Ci0gIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gIGdzdF9xdWV1ZTJfcG9zdF9idWZmZXJpbmcgKHF1ZXVlKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgcmV0ID0gcXVldWUtPnNyY3Jlc3VsdDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAid2UgYXJlIGZsdXNoaW5nIik7Ci0gICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci1vdXRfdW5leHBlY3RlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAicmVhZCBiZXlvbmQgZW5kIG9mIGZpbGUiKTsKLSAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLX0KLQotLyogc2luayBjdXJyZW50bHkgb25seSBvcGVyYXRlcyBpbiBwdXNoIG1vZGUgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1ZXVlMl9zaW5rX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0gIEdzdFF1ZXVlMiAqcXVldWU7Ci0KLSAgcXVldWUgPSBHU1RfUVVFVUUyIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImFjdGl2YXRpbmcgcHVzaCBtb2RlIik7Ci0gICAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgcXVldWUtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgcXVldWUtPmlzX2VvcyA9IEZBTFNFOwotICAgICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgICByZXNldF9yYXRlX3RpbWVyIChxdWV1ZSk7Ci0gICAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiB1bmJsb2NrIGNoYWluIGZ1bmN0aW9uICovCi0gICAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImRlYWN0aXZhdGluZyBwdXNoIG1vZGUiKTsKLSAgICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgICBxdWV1ZS0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgICBHU1RfUVVFVUUyX1NJR05BTF9ERUwgKHF1ZXVlKTsKLSAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICAgICAgICAvKiB3YWl0IHVudGlsIGl0IGlzIHVuYmxvY2tlZCBhbmQgY2xlYW4gdXAgKi8KLSAgICAgICAgR1NUX1BBRF9TVFJFQU1fTE9DSyAocGFkKTsKLSAgICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICAgIGdzdF9xdWV1ZTJfbG9ja2VkX2ZsdXNoIChxdWV1ZSwgVFJVRSwgRkFMU0UpOwotICAgICAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICAgICAgICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHBhZCk7Ci0gICAgICB9Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogc3JjIG9wZXJhdGluZyBpbiBwdXNoIG1vZGUsIHdlIHN0YXJ0IGEgdGFzayBvbiB0aGUgc291cmNlIHBhZCB0aGF0IHB1c2hlcyBvdXQKLSAqIGJ1ZmZlcnMgZnJvbSB0aGUgcXVldWUgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1ZXVlMl9zcmNfYWN0aXZhdGVfcHVzaCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0gIEdzdFF1ZXVlMiAqcXVldWU7Ci0KLSAgcXVldWUgPSBHU1RfUVVFVUUyIChwYXJlbnQpOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgImFjdGl2YXRpbmcgcHVzaCBtb2RlIik7Ci0gICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgcXVldWUtPmlzX2VvcyA9IEZBTFNFOwotICAgIHF1ZXVlLT51bmV4cGVjdGVkID0gRkFMU0U7Ci0gICAgcmVzdWx0ID0KLSAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrIChwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdWV1ZTJfbG9vcCwgcGFkLCBOVUxMKTsKLSAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICB9IGVsc2UgewotICAgIC8qIHVuYmxvY2sgbG9vcCBmdW5jdGlvbiAqLwotICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZGVhY3RpdmF0aW5nIHB1c2ggbW9kZSIpOwotICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBxdWV1ZS0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIC8qIHRoZSBpdGVtIGFkZCBzaWduYWwgd2lsbCB1bmJsb2NrICovCi0gICAgR1NUX1FVRVVFMl9TSUdOQUxfQUREIChxdWV1ZSk7Ci0gICAgR1NUX1FVRVVFMl9NVVRFWF9VTkxPQ0sgKHF1ZXVlKTsKLQotICAgIC8qIHN0ZXAgMiwgbWFrZSBzdXJlIHN0cmVhbWluZyBmaW5pc2hlcyAqLwotICAgIHJlc3VsdCA9IGdzdF9wYWRfc3RvcF90YXNrIChwYWQpOwotCi0gICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgZ3N0X3F1ZXVlMl9sb2NrZWRfZmx1c2ggKHF1ZXVlLCBGQUxTRSwgRkFMU0UpOwotICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBwdWxsIG1vZGUsIGRvd25zdHJlYW0gd2lsbCBjYWxsIG91ciBnZXRyYW5nZSBmdW5jdGlvbiAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcXVldWUyX3NyY19hY3RpdmF0ZV9wdWxsIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0gIEdzdFF1ZXVlMiAqcXVldWU7Ci0KLSAgcXVldWUgPSBHU1RfUVVFVUUyIChwYXJlbnQpOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBHU1RfUVVFVUUyX01VVEVYX0xPQ0sgKHF1ZXVlKTsKLSAgICBpZiAoIVFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKLSAgICAgIGlmIChRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKSkgewotICAgICAgICAvKiBvcGVuIHRoZSB0ZW1wIGZpbGUgbm93ICovCi0gICAgICAgIHJlc3VsdCA9IGdzdF9xdWV1ZTJfb3Blbl90ZW1wX2xvY2F0aW9uX2ZpbGUgKHF1ZXVlKTsKLSAgICAgIH0gZWxzZSBpZiAoIXF1ZXVlLT5yaW5nX2J1ZmZlcikgewotICAgICAgICBxdWV1ZS0+cmluZ19idWZmZXIgPSBnX21hbGxvYyAocXVldWUtPnJpbmdfYnVmZmVyX21heF9zaXplKTsKLSAgICAgICAgcmVzdWx0ID0gISAhcXVldWUtPnJpbmdfYnVmZmVyOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJhY3RpdmF0aW5nIHB1bGwgbW9kZSIpOwotICAgICAgaW5pdF9yYW5nZXMgKHF1ZXVlKTsKLSAgICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgIHF1ZXVlLT5zaW5rcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICBxdWV1ZS0+aXNfZW9zID0gRkFMU0U7Ci0gICAgICBxdWV1ZS0+dW5leHBlY3RlZCA9IEZBTFNFOwotICAgICAgcXVldWUtPnVwc3RyZWFtX3NpemUgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWV1ZSwgIm5vIHRlbXAgZmlsZSwgY2Fubm90IGFjdGl2YXRlIHB1bGwgbW9kZSIpOwotICAgICAgLyogdGhpcyBpcyBub3QgYWxsb3dlZCwgd2UgY2Fubm90IG9wZXJhdGUgaW4gcHVsbCBtb2RlIHdpdGhvdXQgYSB0ZW1wCi0gICAgICAgKiBmaWxlLiAqLwotICAgICAgcXVldWUtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgcXVldWUtPnNpbmtyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgIH0KLSAgICBHU1RfUVVFVUUyX01VVEVYX1VOTE9DSyAocXVldWUpOwotICB9IGVsc2UgewotICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF1ZXVlLCAiZGVhY3RpdmF0aW5nIHB1bGwgbW9kZSIpOwotICAgIHF1ZXVlLT5zcmNyZXN1bHQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBxdWV1ZS0+c2lua3Jlc3VsdCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIC8qIHRoaXMgd2lsbCB1bmxvY2sgZ2V0cmFuZ2UgKi8KLSAgICBHU1RfUVVFVUUyX1NJR05BTF9BREQgKHF1ZXVlKTsKLSAgICByZXN1bHQgPSBUUlVFOwotICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9xdWV1ZTJfc3JjX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RQYWRNb2RlIG1vZGUsCi0gICAgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVMTDoKLSAgICAgIHJlcyA9IGdzdF9xdWV1ZTJfc3JjX2FjdGl2YXRlX3B1bGwgKHBhZCwgcGFyZW50LCBhY3RpdmUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIHJlcyA9IGdzdF9xdWV1ZTJfc3JjX2FjdGl2YXRlX3B1c2ggKHBhZCwgcGFyZW50LCBhY3RpdmUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJ1bmtub3duIGFjdGl2YXRpb24gbW9kZSAlZCIsIG1vZGUpOwotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9xdWV1ZTJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UXVldWUyICpxdWV1ZTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotCi0gIHF1ZXVlID0gR1NUX1FVRVVFMiAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0gICAgICBpZiAoIVFVRVVFX0lTX1VTSU5HX1FVRVVFIChxdWV1ZSkpIHsKLSAgICAgICAgaWYgKFFVRVVFX0lTX1VTSU5HX1RFTVBfRklMRSAocXVldWUpKSB7Ci0gICAgICAgICAgaWYgKCFnc3RfcXVldWUyX29wZW5fdGVtcF9sb2NhdGlvbl9maWxlIChxdWV1ZSkpCi0gICAgICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKHF1ZXVlLT5yaW5nX2J1ZmZlcikgewotICAgICAgICAgICAgZ19mcmVlIChxdWV1ZS0+cmluZ19idWZmZXIpOwotICAgICAgICAgICAgcXVldWUtPnJpbmdfYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCEocXVldWUtPnJpbmdfYnVmZmVyID0gZ19tYWxsb2MgKHF1ZXVlLT5yaW5nX2J1ZmZlcl9tYXhfc2l6ZSkpKQotICAgICAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIGluaXRfcmFuZ2VzIChxdWV1ZSk7Ci0gICAgICB9Ci0gICAgICBxdWV1ZS0+c2VnbWVudF9ldmVudF9yZWNlaXZlZCA9IEZBTFNFOwotICAgICAgcXVldWUtPnN0YXJ0aW5nX3NlZ21lbnQgPSBOVUxMOwotICAgICAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZxdWV1ZS0+c3RyZWFtX3N0YXJ0X2V2ZW50LCBOVUxMKTsKLSAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICByZXR1cm4gcmV0OwotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIHJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotICAgICAgaWYgKCFRVUVVRV9JU19VU0lOR19RVUVVRSAocXVldWUpKSB7Ci0gICAgICAgIGlmIChRVUVVRV9JU19VU0lOR19URU1QX0ZJTEUgKHF1ZXVlKSkgewotICAgICAgICAgIGdzdF9xdWV1ZTJfY2xvc2VfdGVtcF9sb2NhdGlvbl9maWxlIChxdWV1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocXVldWUtPnJpbmdfYnVmZmVyKSB7Ci0gICAgICAgICAgZ19mcmVlIChxdWV1ZS0+cmluZ19idWZmZXIpOwotICAgICAgICAgIHF1ZXVlLT5yaW5nX2J1ZmZlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY2xlYW5fcmFuZ2VzIChxdWV1ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAocXVldWUtPnN0YXJ0aW5nX3NlZ21lbnQgIT0gTlVMTCkgewotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKHF1ZXVlLT5zdGFydGluZ19zZWdtZW50KTsKLSAgICAgICAgcXVldWUtPnN0YXJ0aW5nX3NlZ21lbnQgPSBOVUxMOwotICAgICAgfQotICAgICAgZ3N0X2V2ZW50X3JlcGxhY2UgKCZxdWV1ZS0+c3RyZWFtX3N0YXJ0X2V2ZW50LCBOVUxMKTsKLSAgICAgIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIGNoYW5naW5nIHRoZSBjYXBhY2l0eSBvZiB0aGUgcXVldWUgbXVzdCB3YWtlIHVwCi0gKiB0aGUgX2NoYWluIGZ1bmN0aW9uLCBpdCBtaWdodCBoYXZlIG1vcmUgcm9vbSBub3cKLSAqIHRvIHN0b3JlIHRoZSBidWZmZXIvZXZlbnQgaW4gdGhlIHF1ZXVlICovCi0jZGVmaW5lIFFVRVVFX0NBUEFDSVRZX0NIQU5HRShxKSBcCi0gIEdTVF9RVUVVRTJfU0lHTkFMX0RFTCAocXVldWUpOyBcCi0gIGlmIChxdWV1ZS0+dXNlX2J1ZmZlcmluZykgICAgICBcCi0gICAgdXBkYXRlX2J1ZmZlcmluZyAocXVldWUpOwotCi0vKiBDaGFuZ2luZyB0aGUgbWluaW11bSByZXF1aXJlZCBmaWxsIGxldmVsIG11c3QKLSAqIHdha2UgdXAgdGhlIF9sb29wIGZ1bmN0aW9uIGFzIGl0IG1pZ2h0IG5vdwotICogYmUgYWJsZSB0byBwcmVjZWVkLgotICovCi0jZGVmaW5lIFFVRVVFX1RIUkVTSE9MRF9DSEFOR0UocSlcCi0gIEdTVF9RVUVVRTJfU0lHTkFMX0FERCAocXVldWUpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3F1ZXVlMl9zZXRfdGVtcF90ZW1wbGF0ZSAoR3N0UXVldWUyICogcXVldWUsIGNvbnN0IGdjaGFyICogdGVtcGxhdGUpCi17Ci0gIEdzdFN0YXRlIHN0YXRlOwotCi0gIC8qIHRoZSBlbGVtZW50IG11c3QgYmUgc3RvcHBlZCBpbiBvcmRlciB0byBkbyB0aGlzICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAocXVldWUpOwotICBzdGF0ZSA9IEdTVF9TVEFURSAocXVldWUpOwotICBpZiAoc3RhdGUgIT0gR1NUX1NUQVRFX1JFQURZICYmIHN0YXRlICE9IEdTVF9TVEFURV9OVUxMKQotICAgIGdvdG8gd3Jvbmdfc3RhdGU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChxdWV1ZSk7Ci0KLSAgLyogc2V0IG5ldyBsb2NhdGlvbiAqLwotICBnX2ZyZWUgKHF1ZXVlLT50ZW1wX3RlbXBsYXRlKTsKLSAgcXVldWUtPnRlbXBfdGVtcGxhdGUgPSBnX3N0cmR1cCAodGVtcGxhdGUpOwotCi0gIHJldHVybjsKLQotLyogRVJST1IgKi8KLXdyb25nX3N0YXRlOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdWV1ZSwgInNldHRpbmcgdGVtcC10ZW1wbGF0ZSBwcm9wZXJ0eSBpbiB3cm9uZyBzdGF0ZSIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChxdWV1ZSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZTJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFF1ZXVlMiAqcXVldWUgPSBHU1RfUVVFVUUyIChvYmplY3QpOwotCi0gIC8qIHNvbWVvbmUgY291bGQgY2hhbmdlIGxldmVscyBoZXJlLCBhbmQgc2luY2UgdGhpcwotICAgKiBhZmZlY3RzIHRoZSBnZXQvcHV0IGZ1bmNzLCB3ZSBuZWVkIHRvIGxvY2sgZm9yIHNhZmV0eS4gKi8KLSAgR1NUX1FVRVVFMl9NVVRFWF9MT0NLIChxdWV1ZSk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01BWF9TSVpFX0JZVEVTOgotICAgICAgcXVldWUtPm1heF9sZXZlbC5ieXRlcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIFFVRVVFX0NBUEFDSVRZX0NIQU5HRSAocXVldWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9TSVpFX0JVRkZFUlM6Ci0gICAgICBxdWV1ZS0+bWF4X2xldmVsLmJ1ZmZlcnMgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBRVUVVRV9DQVBBQ0lUWV9DSEFOR0UgKHF1ZXVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgotICAgICAgcXVldWUtPm1heF9sZXZlbC50aW1lID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0gICAgICAvKiBzZXQgcmF0ZV90aW1lIHRvIHRoZSBzYW1lIHZhbHVlLiBXZSB1c2UgYW4gZXh0cmEgZmllbGQgaW4gdGhlIGxldmVsCi0gICAgICAgKiBzdHJ1Y3R1cmUgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGFjY2VzcyBhbmQgY29tcGFyZSBpdCAqLwotICAgICAgcXVldWUtPm1heF9sZXZlbC5yYXRlX3RpbWUgPSBxdWV1ZS0+bWF4X2xldmVsLnRpbWU7Ci0gICAgICBRVUVVRV9DQVBBQ0lUWV9DSEFOR0UgKHF1ZXVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfQlVGRkVSSU5HOgotICAgICAgcXVldWUtPnVzZV9idWZmZXJpbmcgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBpZiAoIXF1ZXVlLT51c2VfYnVmZmVyaW5nICYmIHF1ZXVlLT5pc19idWZmZXJpbmcpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXVldWUsICJEaXNhYmxlZCBidWZmZXJpbmcgd2hpbGUgYnVmZmVyaW5nLCAiCi0gICAgICAgICAgICAicG9zdGluZyAxMDAlJSBtZXNzYWdlIik7Ci0gICAgICAgIFNFVF9QRVJDRU5UIChxdWV1ZSwgMTAwKTsKLSAgICAgICAgcXVldWUtPmlzX2J1ZmZlcmluZyA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBpZiAocXVldWUtPnVzZV9idWZmZXJpbmcpIHsKLSAgICAgICAgcXVldWUtPmlzX2J1ZmZlcmluZyA9IFRSVUU7Ci0gICAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKHF1ZXVlKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfVEFHU19CSVRSQVRFOgotICAgICAgcXVldWUtPnVzZV90YWdzX2JpdHJhdGUgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFX1JBVEVfRVNUSU1BVEU6Ci0gICAgICBxdWV1ZS0+dXNlX3JhdGVfZXN0aW1hdGUgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTE9XX1BFUkNFTlQ6Ci0gICAgICBxdWV1ZS0+bG93X3dhdGVybWFyayA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpICogQlVGX0xFVkVMX1BFUkNFTlRfRkFDVE9SOwotICAgICAgaWYgKHF1ZXVlLT5pc19idWZmZXJpbmcpCi0gICAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKHF1ZXVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ISUdIX1BFUkNFTlQ6Ci0gICAgICBxdWV1ZS0+aGlnaF93YXRlcm1hcmsgPQotICAgICAgICAgIGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpICogQlVGX0xFVkVMX1BFUkNFTlRfRkFDVE9SOwotICAgICAgaWYgKHF1ZXVlLT5pc19idWZmZXJpbmcpCi0gICAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKHF1ZXVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT1dfV0FURVJNQVJLOgotICAgICAgcXVldWUtPmxvd193YXRlcm1hcmsgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKSAqIE1BWF9CVUZGRVJJTkdfTEVWRUw7Ci0gICAgICBpZiAocXVldWUtPmlzX2J1ZmZlcmluZykKLSAgICAgICAgdXBkYXRlX2J1ZmZlcmluZyAocXVldWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0hJR0hfV0FURVJNQVJLOgotICAgICAgcXVldWUtPmhpZ2hfd2F0ZXJtYXJrID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSkgKiBNQVhfQlVGRkVSSU5HX0xFVkVMOwotICAgICAgaWYgKHF1ZXVlLT5pc19idWZmZXJpbmcpCi0gICAgICAgIHVwZGF0ZV9idWZmZXJpbmcgKHF1ZXVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9URU1QX1RFTVBMQVRFOgotICAgICAgZ3N0X3F1ZXVlMl9zZXRfdGVtcF90ZW1wbGF0ZSAocXVldWUsIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9URU1QX1JFTU9WRToKLSAgICAgIHF1ZXVlLT50ZW1wX3JlbW92ZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SSU5HX0JVRkZFUl9NQVhfU0laRToKLSAgICAgIHF1ZXVlLT5yaW5nX2J1ZmZlcl9tYXhfc2l6ZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci0gIGdzdF9xdWV1ZTJfcG9zdF9idWZmZXJpbmcgKHF1ZXVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWV1ZTJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFF1ZXVlMiAqcXVldWUgPSBHU1RfUVVFVUUyIChvYmplY3QpOwotCi0gIEdTVF9RVUVVRTJfTVVURVhfTE9DSyAocXVldWUpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DVVJfTEVWRUxfQllURVM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXVldWUtPmN1cl9sZXZlbC5ieXRlcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1VSX0xFVkVMX0JVRkZFUlM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXVldWUtPmN1cl9sZXZlbC5idWZmZXJzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DVVJfTEVWRUxfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHF1ZXVlLT5jdXJfbGV2ZWwudGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfQllURVM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXVldWUtPm1heF9sZXZlbC5ieXRlcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfQlVGRkVSUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBxdWV1ZS0+bWF4X2xldmVsLmJ1ZmZlcnMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9TSVpFX1RJTUU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBxdWV1ZS0+bWF4X2xldmVsLnRpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRV9CVUZGRVJJTkc6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcXVldWUtPnVzZV9idWZmZXJpbmcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRV9UQUdTX0JJVFJBVEU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcXVldWUtPnVzZV90YWdzX2JpdHJhdGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRV9SQVRFX0VTVElNQVRFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHF1ZXVlLT51c2VfcmF0ZV9lc3RpbWF0ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTE9XX1BFUkNFTlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBxdWV1ZS0+bG93X3dhdGVybWFyayAvIEJVRl9MRVZFTF9QRVJDRU5UX0ZBQ1RPUik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSElHSF9QRVJDRU5UOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcXVldWUtPmhpZ2hfd2F0ZXJtYXJrIC8gQlVGX0xFVkVMX1BFUkNFTlRfRkFDVE9SKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT1dfV0FURVJNQVJLOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgcXVldWUtPmxvd193YXRlcm1hcmsgLwotICAgICAgICAgIChnZG91YmxlKSBNQVhfQlVGRkVSSU5HX0xFVkVMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ISUdIX1dBVEVSTUFSSzoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHF1ZXVlLT5oaWdoX3dhdGVybWFyayAvCi0gICAgICAgICAgKGdkb3VibGUpIE1BWF9CVUZGRVJJTkdfTEVWRUwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RFTVBfVEVNUExBVEU6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBxdWV1ZS0+dGVtcF90ZW1wbGF0ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEVNUF9MT0NBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHF1ZXVlLT50ZW1wX2xvY2F0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9URU1QX1JFTU9WRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBxdWV1ZS0+dGVtcF9yZW1vdmUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JJTkdfQlVGRkVSX01BWF9TSVpFOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgcXVldWUtPnJpbmdfYnVmZmVyX21heF9zaXplKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVkdfSU5fUkFURToKLSAgICB7Ci0gICAgICBnZG91YmxlIGluX3JhdGUgPSBxdWV1ZS0+Ynl0ZV9pbl9yYXRlOwotCi0gICAgICAvKiBEdXJpbmcgdGhlIGZpcnN0IFJBVEVfSU5URVJWQUwsIGJ5dGVfaW5fcmF0ZSB3aWxsIG5vdCBoYXZlIGJlZW4KLSAgICAgICAqIGNhbGN1bGF0ZWQsIHNvIGNhbGN1bGF0ZSBpdCBoZXJlLiAqLwotICAgICAgaWYgKGluX3JhdGUgPT0gMC4wICYmIHF1ZXVlLT5ieXRlc19pbgotICAgICAgICAgICYmIHF1ZXVlLT5sYXN0X3VwZGF0ZV9pbl9yYXRlc19lbGFwc2VkID4gMC4wKQotICAgICAgICBpbl9yYXRlID0gcXVldWUtPmJ5dGVzX2luIC8gcXVldWUtPmxhc3RfdXBkYXRlX2luX3JhdGVzX2VsYXBzZWQ7Ci0KLSAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgKGdpbnQ2NCkgaW5fcmF0ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9RVUVVRTJfTVVURVhfVU5MT0NLIChxdWV1ZSk7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFiOTRhNy4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAzIENvbGluIFdhbHRlcnMgPGN3YWx0ZXJzQGdub21lLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwLDIwMDUsMjAwNyBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDcgVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NAbGNjLnVmY2cuZWR1LmJyPgotICoKLSAqIGdzdHF1ZXVlMi5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9fR1NUX1FVRVVFMl9IX18KLSNkZWZpbmUgX19HU1RfUVVFVUUyX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9RVUVVRTIgXAotICAoZ3N0X3F1ZXVlMl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUVVFVUUyKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUVVFVUUyLEdzdFF1ZXVlMikpCi0jZGVmaW5lIEdTVF9RVUVVRTJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUVVFVUUyLEdzdFF1ZXVlMkNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1FVRVVFMihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1FVRVVFMikpCi0jZGVmaW5lIEdTVF9JU19RVUVVRTJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUVVFVUUyKSkKLSNkZWZpbmUgR1NUX1FVRVVFMl9DQVNUKG9iaikgXAotICAoKEdzdFF1ZXVlMiAqKShvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UXVldWUyIEdzdFF1ZXVlMjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RRdWV1ZTJTaXplIEdzdFF1ZXVlMlNpemU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UXVldWUyQ2xhc3MgR3N0UXVldWUyQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UXVldWUyUmFuZ2UgR3N0UXVldWUyUmFuZ2U7Ci0KLS8qIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBzaXplcyAoY3VycmVudCBhbmQgbWF4KSAqLwotc3RydWN0IF9Hc3RRdWV1ZTJTaXplCi17Ci0gIGd1aW50IGJ1ZmZlcnM7Ci0gIGd1aW50IGJ5dGVzOwotICBndWludDY0IHRpbWU7Ci0gIGd1aW50NjQgcmF0ZV90aW1lOwotfTsKLQotc3RydWN0IF9Hc3RRdWV1ZTJSYW5nZQotewotICBHc3RRdWV1ZTJSYW5nZSAqbmV4dDsKLQotICBndWludDY0IG9mZnNldDsgICAgICAgICAgLyogb2Zmc2V0IG9mIHJhbmdlIHN0YXJ0IGluIHNvdXJjZSAqLwotICBndWludDY0IHJiX29mZnNldDsgICAgICAgLyogb2Zmc2V0IG9mIHJhbmdlIHN0YXJ0IGluIHJpbmcgYnVmZmVyICovCi0gIGd1aW50NjQgd3JpdGluZ19wb3M7ICAgICAvKiB3cml0aW5nIHBvc2l0aW9uIGluIHNvdXJjZSAqLwotICBndWludDY0IHJiX3dyaXRpbmdfcG9zOyAgLyogd3JpdGluZyBwb3NpdGlvbiBpbiByaW5nIGJ1ZmZlciAqLwotICBndWludDY0IHJlYWRpbmdfcG9zOyAgICAgLyogcmVhZGluZyBwb3NpdGlvbiBpbiBzb3VyY2UgKi8KLSAgZ3VpbnQ2NCBtYXhfcmVhZGluZ19wb3M7IC8qIGxhdGVzdCByZXF1ZXN0ZWQgb2Zmc2V0IGluIHNvdXJjZSAqLwotfTsKLQotc3RydWN0IF9Hc3RRdWV1ZTIKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4gKi8KLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RQYWQgKnNyY3BhZDsKLQotICAvKiB1cHN0cmVhbSBzaXplIGluIGJ5dGVzIChpZiBkb3duc3RyZWFtIGlzIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUpICovCi0gIGd1aW50NjQgdXBzdHJlYW1fc2l6ZTsKLQotICAvKiBzZWdtZW50cyB0byBrZWVwIHRyYWNrIG9mIHRpbWVzdGFtcHMgKi8KLSAgR3N0U2VnbWVudCBzaW5rX3NlZ21lbnQ7Ci0gIEdzdFNlZ21lbnQgc3JjX3NlZ21lbnQ7Ci0KLSAgLyogUG9zaXRpb24gb2Ygc3JjL3NpbmsgKi8KLSAgR3N0Q2xvY2tUaW1lIHNpbmt0aW1lLCBzcmN0aW1lOwotICAvKiBUUlVFIGlmIGVpdGhlciBwb3NpdGlvbiBuZWVkcyB0byBiZSByZWNhbGN1bGF0ZWQgKi8KLSAgZ2Jvb2xlYW4gc2lua190YWludGVkLCBzcmNfdGFpbnRlZDsKLSAgLyogQml0cmF0ZXMgdGFrZW4gZnJvbSB0YWdzICovCi0gIGd1aW50IHNpbmtfdGFnc19iaXRyYXRlOwotICBndWludCBzcmNfdGFnc19iaXRyYXRlOwotCi0gIC8qIGZsb3dyZXR1cm4gd2hlbiBzcmNwYWQgaXMgcGF1c2VkICovCi0gIEdzdEZsb3dSZXR1cm4gc3JjcmVzdWx0OwotICBHc3RGbG93UmV0dXJuIHNpbmtyZXN1bHQ7Ci0gIGdib29sZWFuIGlzX2VvczsKLSAgZ2Jvb2xlYW4gdW5leHBlY3RlZDsKLQotICAvKiB0aGUgcXVldWUgb2YgZGF0YSB3ZSdyZSBrZWVwaW5nIG91ciBoYW5kcyBvbiAqLwotICBHUXVldWUgcXVldWU7Ci0KLSAgR0NvbmQgcXVlcnlfaGFuZGxlZDsKLSAgZ2Jvb2xlYW4gbGFzdF9xdWVyeTsgLyogcmVzdWx0IG9mIGxhc3Qgc2VyaWFsaXplZCBxdWVyeSAqLwotCi0gIEdzdFF1ZXVlMlNpemUgY3VyX2xldmVsOyAgICAgICAvKiBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlICovCi0gIEdzdFF1ZXVlMlNpemUgbWF4X2xldmVsOyAgICAgICAvKiBtYXguIGFtb3VudCBvZiBkYXRhIGFsbG93ZWQgaW4gdGhlIHF1ZXVlICovCi0gIGdib29sZWFuIHVzZV9idWZmZXJpbmc7Ci0gIGdib29sZWFuIHVzZV90YWdzX2JpdHJhdGU7Ci0gIGdib29sZWFuIHVzZV9yYXRlX2VzdGltYXRlOwotICBHc3RDbG9ja1RpbWUgYnVmZmVyaW5nX2ludGVydmFsOwotCi0gIC8qIGxvdy9oaWdoIHdhdGVybWFya3MgZm9yIGJ1ZmZlcmluZyAqLwotICBnaW50IGxvd193YXRlcm1hcms7Ci0gIGdpbnQgaGlnaF93YXRlcm1hcms7Ci0KLSAgLyogY3VycmVudCBidWZmZXJpbmcgc3RhdGUgKi8KLSAgZ2Jvb2xlYW4gaXNfYnVmZmVyaW5nOwotICBnaW50IGJ1ZmZlcmluZ19wZXJjZW50OwotCi0gIC8qIGZvciBtZWFzdXJpbmcgaW5wdXQvb3V0cHV0IHJhdGVzICovCi0gIEdUaW1lciAqaW5fdGltZXI7Ci0gIGdib29sZWFuIGluX3RpbWVyX3N0YXJ0ZWQ7Ci0gIGdkb3VibGUgbGFzdF91cGRhdGVfaW5fcmF0ZXNfZWxhcHNlZDsKLSAgZ2RvdWJsZSBsYXN0X2luX2VsYXBzZWQ7Ci0gIGd1aW50NjQgYnl0ZXNfaW47Ci0gIGdkb3VibGUgYnl0ZV9pbl9yYXRlOwotICBnZG91YmxlIGJ5dGVfaW5fcGVyaW9kOwotCi0gIEdUaW1lciAqb3V0X3RpbWVyOwotICBnYm9vbGVhbiBvdXRfdGltZXJfc3RhcnRlZDsKLSAgZ2RvdWJsZSBsYXN0X291dF9lbGFwc2VkOwotICBndWludDY0IGJ5dGVzX291dDsKLSAgZ2RvdWJsZSBieXRlX291dF9yYXRlOwotCi0gIEdNdXRleCBxbG9jazsgICAgICAgICAgICAgICAgLyogbG9jayBmb3IgcXVldWUgKHZzIG9iamVjdCBsb2NrKSAqLwotICBnYm9vbGVhbiB3YWl0aW5nX2FkZDsKLSAgR0NvbmQgaXRlbV9hZGQ7ICAgICAgICAgICAgICAvKiBzaWduYWxzIGJ1ZmZlcnMgbm93IGF2YWlsYWJsZSBmb3IgcmVhZGluZyAqLwotICBnYm9vbGVhbiB3YWl0aW5nX2RlbDsKLSAgR0NvbmQgaXRlbV9kZWw7ICAgICAgICAgICAgICAvKiBzaWduYWxzIHNwYWNlIG5vdyBhdmFpbGFibGUgZm9yIHdyaXRpbmcgKi8KLQotICAvKiB0ZW1wIGxvY2F0aW9uIHN0dWZmICovCi0gIGdjaGFyICp0ZW1wX3RlbXBsYXRlOwotICBnYm9vbGVhbiB0ZW1wX2xvY2F0aW9uX3NldDsKLSAgZ2NoYXIgKnRlbXBfbG9jYXRpb247Ci0gIGdib29sZWFuIHRlbXBfcmVtb3ZlOwotICBGSUxFICp0ZW1wX2ZpbGU7Ci0gIC8qIGxpc3Qgb2YgZG93bmxvYWRlZCBhcmVhcyBhbmQgdGhlIGN1cnJlbnQgYXJlYSAqLwotICBHc3RRdWV1ZTJSYW5nZSAqcmFuZ2VzOwotICBHc3RRdWV1ZTJSYW5nZSAqY3VycmVudDsKLSAgLyogd2UgbmVlZCB0aGlzIHRvIHNlbmQgdGhlIGZpcnN0IG5ldyBzZWdtZW50IGV2ZW50IG9mIHRoZSBzdHJlYW0KLSAgICogYmVjYXVzZSB3ZSBjYW4ndCBzYXZlIGl0IG9uIHRoZSBmaWxlICovCi0gIGdib29sZWFuIHNlZ21lbnRfZXZlbnRfcmVjZWl2ZWQ7Ci0gIEdzdEV2ZW50ICpzdGFydGluZ19zZWdtZW50OwotICBnYm9vbGVhbiBzZWVraW5nOwotCi0gIEdzdEV2ZW50ICpzdHJlYW1fc3RhcnRfZXZlbnQ7Ci0KLSAgZ3VpbnQ2NCByaW5nX2J1ZmZlcl9tYXhfc2l6ZTsKLSAgZ3VpbnQ4ICogcmluZ19idWZmZXI7Ci0KLSAgdm9sYXRpbGUgZ2ludCBkb3duc3RyZWFtX21heV9ibG9jazsKLQotICBHc3RCdWZmZXJpbmdNb2RlIG1vZGU7Ci0gIGdpbnQ2NCBidWZmZXJpbmdfbGVmdDsKLSAgZ2ludCBhdmdfaW47Ci0gIGdpbnQgYXZnX291dDsKLSAgZ2Jvb2xlYW4gcGVyY2VudF9jaGFuZ2VkOwotICBHTXV0ZXggYnVmZmVyaW5nX3Bvc3RfbG9jazsgLyogYXNzdXJlcyBvbmx5IG9uZSBwb3N0ZWQgYXQgYSB0aW1lICovCi19OwotCi1zdHJ1Y3QgX0dzdFF1ZXVlMkNsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X3F1ZXVlMl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9RVUVVRTJfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHNwYXJzZWZpbGUuYyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0c3BhcnNlZmlsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGEwYWYxLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0c3BhcnNlZmlsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjc0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE0IFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotCi0jaW5jbHVkZSAiZ3N0c3BhcnNlZmlsZS5oIgotCi0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKLSN1bmRlZiBvZmZfdAotI2RlZmluZSBvZmZfdCBndWludDY0Ci0jZWxzZQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLSNpZmRlZiBfX0JJT05JQ19fICAgICAgICAgICAgICAgLyogQW5kcm9pZCAqLwotI3VuZGVmIGxzZWVrCi0jZGVmaW5lIGxzZWVrIGxzZWVrNjQKLSN1bmRlZiBvZmZfdAotI2RlZmluZSBvZmZfdCBndWludDY0Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfRlNFRUtPCi0jZGVmaW5lIEZTRUVLX0ZJTEUoZmlsZSxvZmZzZXQpICAoZnNlZWtvIChmaWxlLCAob2ZmX3QpIG9mZnNldCwgU0VFS19TRVQpICE9IDApCi0jZWxpZiBkZWZpbmVkIChHX09TX1VOSVgpIHx8IGRlZmluZWQgKEdfT1NfV0lOMzIpCi0jZGVmaW5lIEZTRUVLX0ZJTEUoZmlsZSxvZmZzZXQpICAobHNlZWsgKGZpbGVubyAoZmlsZSksIChvZmZfdCkgb2Zmc2V0LCBTRUVLX1NFVCkgPT0gKG9mZl90KSAtMSkKLSNlbHNlCi0jZGVmaW5lIEZTRUVLX0ZJTEUoZmlsZSxvZmZzZXQpICAoZnNlZWsgKGZpbGUsIG9mZnNldCwgU0VFS19TRVQpICE9IDApCi0jZW5kaWYKLQotI2RlZmluZSBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1IgXAotICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJnc3Qtc3BhcnNlLWZpbGUtaW8tZXJyb3ItcXVhcmsiKQotCi1zdGF0aWMgR3N0U3BhcnNlRmlsZUlPRXJyb3JFbnVtCi1nc3Rfc3BhcnNlX2ZpbGVfaW9fZXJyb3JfZnJvbV9lcnJubyAoZ2ludCBlcnJfbm8pOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3BhcnNlUmFuZ2UgR3N0U3BhcnNlUmFuZ2U7Ci0KLXN0cnVjdCBfR3N0U3BhcnNlUmFuZ2UKLXsKLSAgR3N0U3BhcnNlUmFuZ2UgKm5leHQ7Ci0KLSAgZ3NpemUgc3RhcnQ7Ci0gIGdzaXplIHN0b3A7Ci19OwotCi0jZGVmaW5lIFJBTkdFX0NPTlRBSU5TKHIsbykgKChyKS0+c3RhcnQgPD0gKG8pICYmIChyKS0+c3RvcCA+IChvKSkKLQotc3RydWN0IF9Hc3RTcGFyc2VGaWxlCi17Ci0gIGdpbnQgZmQ7Ci0gIEZJTEUgKmZpbGU7Ci0gIGdzaXplIGN1cnJlbnRfcG9zOwotCi0gIEdzdFNwYXJzZVJhbmdlICpyYW5nZXM7Ci0gIGd1aW50IG5fcmFuZ2VzOwotCi0gIEdzdFNwYXJzZVJhbmdlICp3cml0ZV9yYW5nZTsKLSAgR3N0U3BhcnNlUmFuZ2UgKnJlYWRfcmFuZ2U7Ci19OwotCi1zdGF0aWMgR3N0U3BhcnNlUmFuZ2UgKgotZ2V0X3dyaXRlX3JhbmdlIChHc3RTcGFyc2VGaWxlICogZmlsZSwgZ3NpemUgb2Zmc2V0KQotewotICBHc3RTcGFyc2VSYW5nZSAqbmV4dCwgKnByZXYsICpyZXN1bHQgPSBOVUxMOwotCi0gIGlmIChmaWxlLT53cml0ZV9yYW5nZSAmJiBmaWxlLT53cml0ZV9yYW5nZS0+c3RvcCA9PSBvZmZzZXQpCi0gICAgcmV0dXJuIGZpbGUtPndyaXRlX3JhbmdlOwotCi0gIHByZXYgPSBOVUxMOwotICBuZXh0ID0gZmlsZS0+cmFuZ2VzOwotICB3aGlsZSAobmV4dCkgewotICAgIGlmIChuZXh0LT5zdGFydCA+IG9mZnNldCkKLSAgICAgIGJyZWFrOwotCi0gICAgaWYgKG5leHQtPnN0b3AgPj0gb2Zmc2V0KSB7Ci0gICAgICByZXN1bHQgPSBuZXh0OwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHByZXYgPSBuZXh0OwotICAgIG5leHQgPSBuZXh0LT5uZXh0OwotICB9Ci0gIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgIHJlc3VsdCA9IGdfc2xpY2VfbmV3MCAoR3N0U3BhcnNlUmFuZ2UpOwotICAgIHJlc3VsdC0+c3RhcnQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0LT5zdG9wID0gb2Zmc2V0OwotCi0gICAgcmVzdWx0LT5uZXh0ID0gbmV4dDsKLSAgICBpZiAocHJldikKLSAgICAgIHByZXYtPm5leHQgPSByZXN1bHQ7Ci0gICAgZWxzZQotICAgICAgZmlsZS0+cmFuZ2VzID0gcmVzdWx0OwotCi0gICAgZmlsZS0+d3JpdGVfcmFuZ2UgPSByZXN1bHQ7Ci0gICAgZmlsZS0+cmVhZF9yYW5nZSA9IE5VTEw7Ci0KLSAgICBmaWxlLT5uX3JhbmdlcysrOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBHc3RTcGFyc2VSYW5nZSAqCi1nZXRfcmVhZF9yYW5nZSAoR3N0U3BhcnNlRmlsZSAqIGZpbGUsIGdzaXplIG9mZnNldCwgZ3NpemUgY291bnQpCi17Ci0gIEdzdFNwYXJzZVJhbmdlICp3YWxrLCAqcmVzdWx0ID0gTlVMTDsKLQotICBpZiAoZmlsZS0+cmVhZF9yYW5nZSAmJiBSQU5HRV9DT05UQUlOUyAoZmlsZS0+cmVhZF9yYW5nZSwgb2Zmc2V0KSkKLSAgICByZXR1cm4gZmlsZS0+cmVhZF9yYW5nZTsKLQotICBmb3IgKHdhbGsgPSBmaWxlLT5yYW5nZXM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgaWYgKHdhbGstPnN0YXJ0ID4gb2Zmc2V0KQotICAgICAgYnJlYWs7Ci0KLSAgICBpZiAod2Fsay0+c3RvcCA+PSBvZmZzZXQgKyBjb3VudCkgewotICAgICAgcmVzdWx0ID0gd2FsazsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIGdzdF9zcGFyc2VfZmlsZV9uZXc6Ci0gKgotICogTWFrZSBhIG5ldyAjR3N0U3BhcnNlRmlsZQotICoKLSAqIFJldHVybnM6IGEgbmV3ICNHc3RTcGFyc2VGaWxlLCBnc3Rfc3BhcnNlX2ZpbGVfZnJlZSgpIGFmdGVyIHVzYWdlLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotR3N0U3BhcnNlRmlsZSAqCi1nc3Rfc3BhcnNlX2ZpbGVfbmV3ICh2b2lkKQotewotICBHc3RTcGFyc2VGaWxlICpyZXN1bHQ7Ci0KLSAgcmVzdWx0ID0gZ19zbGljZV9uZXcwIChHc3RTcGFyc2VGaWxlKTsKLSAgcmVzdWx0LT5jdXJyZW50X3BvcyA9IDA7Ci0gIHJlc3VsdC0+cmFuZ2VzID0gTlVMTDsKLSAgcmVzdWx0LT5uX3JhbmdlcyA9IDA7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBnc3Rfc3BhcnNlX2ZpbGVfc2V0X2ZkOgotICogQGZpbGU6IGEgI0dzdFNwYXJzZUZpbGUKLSAqIEBmZDogYSBmaWxlIGRlc2NyaXB0b3IKLSAqCi0gKiBTdG9yZSB0aGUgZGF0YSBmb3IgQGZpbGUgaW4gdGhlIGZpbGUgcmVwcmVzZW50ZWQgd2l0aCBAZmQuCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiBAZmQgY291bGQgYmUgc2V0Ci0gKgotICogU2luY2U6IDEuNAotICovCi1nYm9vbGVhbgotZ3N0X3NwYXJzZV9maWxlX3NldF9mZCAoR3N0U3BhcnNlRmlsZSAqIGZpbGUsIGdpbnQgZmQpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWxlICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZkICE9IDAsIEZBTFNFKTsKLQotICBmaWxlLT5maWxlID0gZmRvcGVuIChmZCwgIndiKyIpOwotICBmaWxlLT5mZCA9IGZkOwotCi0gIHJldHVybiBmaWxlLT5maWxlICE9IE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X3NwYXJzZV9maWxlX2NsZWFyOgotICogQGZpbGU6IGEgI0dzdFNwYXJzZUZpbGUKLSAqCi0gKiBDbGVhciBhbGwgdGhlIHJhbmdlcyBpbiBAZmlsZS4KLSAqLwotdm9pZAotZ3N0X3NwYXJzZV9maWxlX2NsZWFyIChHc3RTcGFyc2VGaWxlICogZmlsZSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmlsZSAhPSBOVUxMKTsKLQotICBpZiAoZmlsZS0+ZmlsZSkgewotICAgIGZjbG9zZSAoZmlsZS0+ZmlsZSk7Ci0gICAgZmlsZS0+ZmlsZSA9IGZkb3BlbiAoZmlsZS0+ZmQsICJ3YisiKTsKLSAgfQotICBnX3NsaWNlX2ZyZWVfY2hhaW4gKEdzdFNwYXJzZVJhbmdlLCBmaWxlLT5yYW5nZXMsIG5leHQpOwotICBmaWxlLT5jdXJyZW50X3BvcyA9IDA7Ci0gIGZpbGUtPnJhbmdlcyA9IE5VTEw7Ci0gIGZpbGUtPm5fcmFuZ2VzID0gMDsKLX0KLQotLyoqCi0gKiBnc3Rfc3BhcnNlX2ZpbGVfZnJlZToKLSAqIEBmaWxlOiBhICNHc3RTcGFyc2VGaWxlCi0gKgotICogRnJlZSB0aGUgbWVtb3J5IHVzZWQgYnkgQGZpbGUuCi0gKgotICogU2luY2U6IDEuNAotICovCi12b2lkCi1nc3Rfc3BhcnNlX2ZpbGVfZnJlZSAoR3N0U3BhcnNlRmlsZSAqIGZpbGUpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZpbGUgIT0gTlVMTCk7Ci0KLSAgaWYgKGZpbGUtPmZpbGUpIHsKLSAgICBmZmx1c2ggKGZpbGUtPmZpbGUpOwotICAgIGZjbG9zZSAoZmlsZS0+ZmlsZSk7Ci0gIH0KLSAgZ19zbGljZV9mcmVlX2NoYWluIChHc3RTcGFyc2VSYW5nZSwgZmlsZS0+cmFuZ2VzLCBuZXh0KTsKLSAgZ19zbGljZV9mcmVlIChHc3RTcGFyc2VGaWxlLCBmaWxlKTsKLX0KLQotLyoqCi0gKiBnc3Rfc3BhcnNlX2ZpbGVfd3JpdGU6Ci0gKiBAZmlsZTogYSAjR3N0U3BhcnNlRmlsZQotICogQG9mZnNldDogdGhlIG9mZnNldAotICogQGRhdGE6IHRoZSBkYXRhCi0gKiBAY291bnQ6IGFtb3VudCBvZiBieXRlcwotICogQGF2YWlsYWJsZTogYW1vdW50IG9mIGJ5dGVzIGFscmVhZHkgYXZhaWxhYmxlCi0gKiBAZXJyb3I6IGEgI0dFcnJvcgotICoKLSAqIFdyaXRlIEBjb3VudCBieXRlcyBmcm9tIEBkYXRhIHRvIEBmaWxlIGF0IEBvZmZzZXQuCi0gKgotICogSWYgQGF2YWlsYWJsZSBpcyBub3QgJU5VTEwsIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBhbW91bnQgb2YKLSAqIGRhdGEgYWxyZWFkeSBhdmFpbGFibGUgYWZ0ZXIgdGhlIGxhc3Qgd3JpdHRlbiBieXRlLgotICoKLSAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciAwIG9uIGVycm9yLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotZ3NpemUKLWdzdF9zcGFyc2VfZmlsZV93cml0ZSAoR3N0U3BhcnNlRmlsZSAqIGZpbGUsIGdzaXplIG9mZnNldCwgZ2NvbnN0cG9pbnRlciBkYXRhLAotICAgIGdzaXplIGNvdW50LCBnc2l6ZSAqIGF2YWlsYWJsZSwgR0Vycm9yICoqIGVycm9yKQotewotICBHc3RTcGFyc2VSYW5nZSAqcmFuZ2UsICpuZXh0OwotICBnc2l6ZSBzdG9wOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWxlICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY291bnQgIT0gMCwgMCk7Ci0KLSAgaWYgKGZpbGUtPmZpbGUpIHsKLSAgICBpZiAoZmlsZS0+Y3VycmVudF9wb3MgIT0gb2Zmc2V0KSB7Ci0gICAgICBHU1RfREVCVUcgKCJzZWVraW5nIHRvICUiIEdfR1NJWkVfRk9STUFULCBvZmZzZXQpOwotICAgICAgaWYgKEZTRUVLX0ZJTEUgKGZpbGUtPmZpbGUsIG9mZnNldCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIGlmIChmd3JpdGUgKGRhdGEsIGNvdW50LCAxLCBmaWxlLT5maWxlKSAhPSAxKQotICAgICAgZ290byBlcnJvcjsKLSAgfQotCi0gIGZpbGUtPmN1cnJlbnRfcG9zID0gb2Zmc2V0ICsgY291bnQ7Ci0KLSAgLyogdXBkYXRlIHRoZSBuZXcgc3RvcCBwb3NpdGlvbiBpbiB0aGUgcmFuZ2UgKi8KLSAgcmFuZ2UgPSBnZXRfd3JpdGVfcmFuZ2UgKGZpbGUsIG9mZnNldCk7Ci0gIHN0b3AgPSBvZmZzZXQgKyBjb3VudDsKLSAgcmFuZ2UtPnN0b3AgPSBNQVggKHJhbmdlLT5zdG9wLCBzdG9wKTsKLQotICAvKiBzZWUgaWYgd2UgY2FuIG1lcmdlIHdpdGggbmV4dCByZWdpb24gKi8KLSAgd2hpbGUgKChuZXh0ID0gcmFuZ2UtPm5leHQpKSB7Ci0gICAgaWYgKG5leHQtPnN0YXJ0ID4gcmFuZ2UtPnN0b3ApCi0gICAgICBicmVhazsKLQotICAgIEdTVF9ERUJVRyAoIm1lcmdpbmcgcmFuZ2UgJSIgR19HU0laRV9GT1JNQVQgIi0lIiBHX0dTSVpFX0ZPUk1BVCAiLCBuZXh0ICUiCi0gICAgICAgIEdfR1NJWkVfRk9STUFUICItJSIgR19HU0laRV9GT1JNQVQsIHJhbmdlLT5zdGFydCwgcmFuZ2UtPnN0b3AsCi0gICAgICAgIG5leHQtPnN0YXJ0LCBuZXh0LT5zdG9wKTsKLQotICAgIHJhbmdlLT5zdG9wID0gTUFYIChuZXh0LT5zdG9wLCByYW5nZS0+c3RvcCk7Ci0gICAgcmFuZ2UtPm5leHQgPSBuZXh0LT5uZXh0OwotCi0gICAgaWYgKGZpbGUtPndyaXRlX3JhbmdlID09IG5leHQpCi0gICAgICBmaWxlLT53cml0ZV9yYW5nZSA9IE5VTEw7Ci0gICAgaWYgKGZpbGUtPnJlYWRfcmFuZ2UgPT0gbmV4dCkKLSAgICAgIGZpbGUtPnJlYWRfcmFuZ2UgPSBOVUxMOwotICAgIGdfc2xpY2VfZnJlZSAoR3N0U3BhcnNlUmFuZ2UsIG5leHQpOwotICAgIGZpbGUtPm5fcmFuZ2VzLS07Ci0gIH0KLSAgaWYgKGF2YWlsYWJsZSkKLSAgICAqYXZhaWxhYmxlID0gcmFuZ2UtPnN0b3AgLSBzdG9wOwotCi0gIHJldHVybiBjb3VudDsKLQotICAvKiBFUlJPUlMgKi8KLWVycm9yOgotICB7Ci0gICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1IsCi0gICAgICAgIGdzdF9zcGFyc2VfZmlsZV9pb19lcnJvcl9mcm9tX2Vycm5vIChlcnJubyksICJFcnJvciB3cml0aW5nIGZpbGU6ICVzIiwKLSAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICByZXR1cm4gMDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9zcGFyc2VfZmlsZV9yZWFkOgotICogQGZpbGU6IGEgI0dzdFNwYXJzZUZpbGUKLSAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQKLSAqIEBkYXRhOiB0aGUgZGF0YQotICogQGNvdW50OiBhbW91bnQgb2YgYnl0ZXMKLSAqIEByZW1haW5pbmc6IGFtb3VudCBvZiBieXRlcyByZW1haW5pbmcKLSAqIEBlcnJvcjogYSAjR0Vycm9yCi0gKgotICogUmVhZCBAY291bnQgYnl0ZXMgZnJvbSBAZmlsZSBhdCBAb2Zmc2V0IGludG8gQGRhdGEuCi0gKgotICogT24gZXJyb3IsIEBlcnJvciB3aWxsIGJlIHNldC4gSWYgdGhlcmUgYXJlIG5vIEBjb3VudCBieXRlcyBhdmFpbGFibGUKLSAqIGF0IEBvZmZzZXQsICVHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfV09VTERfQkxPQ0sgaXMgcmV0dXJuZWQuCi0gKgotICogQHJlbWFpbmluZyB3aWxsIGJlIHNldCB0byB0aGUgYW1vdW50IG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgcmVhZAotICogcmFuZ2UuCi0gKgotICogUmV0dXJuczogVGhlIG51bWJlciBvZiBieXRlcyByZWFkIG9mIDAgb24gZXJyb3IuCi0gKgotICogU2luY2U6IDEuNAotICovCi1nc2l6ZQotZ3N0X3NwYXJzZV9maWxlX3JlYWQgKEdzdFNwYXJzZUZpbGUgKiBmaWxlLCBnc2l6ZSBvZmZzZXQsIGdwb2ludGVyIGRhdGEsCi0gICAgZ3NpemUgY291bnQsIGdzaXplICogcmVtYWluaW5nLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdzdFNwYXJzZVJhbmdlICpyYW5nZTsKLSAgZ3NpemUgcmVzID0gMDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmlsZSAhPSBOVUxMLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvdW50ICE9IDAsIDApOwotCi0gIGlmICgocmFuZ2UgPSBnZXRfcmVhZF9yYW5nZSAoZmlsZSwgb2Zmc2V0LCBjb3VudCkpID09IE5VTEwpCi0gICAgZ290byBub19yYW5nZTsKLQotICBpZiAoZmlsZS0+ZmlsZSkgewotICAgIGlmIChmaWxlLT5jdXJyZW50X3BvcyAhPSBvZmZzZXQpIHsKLSAgICAgIEdTVF9ERUJVRyAoInNlZWtpbmcgZnJvbSAlIiBHX0dTSVpFX0ZPUk1BVCAiIHRvICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgICAgIGZpbGUtPmN1cnJlbnRfcG9zLCBvZmZzZXQpOwotICAgICAgaWYgKEZTRUVLX0ZJTEUgKGZpbGUtPmZpbGUsIG9mZnNldCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIHJlcyA9IGZyZWFkIChkYXRhLCAxLCBjb3VudCwgZmlsZS0+ZmlsZSk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHJlcyA8IGNvdW50KSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0gIH0KLQotICBmaWxlLT5jdXJyZW50X3BvcyA9IG9mZnNldCArIHJlczsKLQotICBpZiAocmVtYWluaW5nKQotICAgICpyZW1haW5pbmcgPSByYW5nZS0+c3RvcCAtIGZpbGUtPmN1cnJlbnRfcG9zOwotCi0gIHJldHVybiBjb3VudDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3JhbmdlOgotICB7Ci0gICAgZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUiwKLSAgICAgICAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1dPVUxEX0JMT0NLLCAiT2Zmc2V0IG5vdCB3cml0dGVuIHRvIGZpbGUgeWV0Iik7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLWVycm9yOgotICB7Ci0gICAgaWYgKGZlcnJvciAoZmlsZS0+ZmlsZSkpIHsKLSAgICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SLAotICAgICAgICAgIGdzdF9zcGFyc2VfZmlsZV9pb19lcnJvcl9mcm9tX2Vycm5vIChlcnJubyksICJFcnJvciByZWFkaW5nIGZpbGU6ICVzIiwKLSAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgIH0gZWxzZSBpZiAoZmVvZiAoZmlsZS0+ZmlsZSkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3NwYXJzZV9maWxlX25fcmFuZ2VzOgotICogQGZpbGU6IGEgI0dzdFNwYXJzZUZpbGUKLSAqCi0gKiBHZXQgdGhlIG51bWJlciBvZiByYW5nZXMgdGhhdCBhcmUgd3JpdHRlbiBpbiBAZmlsZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gcmFuZ2VzLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotZ3VpbnQKLWdzdF9zcGFyc2VfZmlsZV9uX3JhbmdlcyAoR3N0U3BhcnNlRmlsZSAqIGZpbGUpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWxlICE9IE5VTEwsIDApOwotCi0gIHJldHVybiBmaWxlLT5uX3JhbmdlczsKLX0KLQotLyoqCi0gKiBnc3Rfc3BhcnNlX2ZpbGVfZ2V0X3JhbmdlX2JlZm9yZToKLSAqIEBmaWxlOiBhICNHc3RTcGFyc2VGaWxlCi0gKiBAb2Zmc2V0OiB0aGUgcmFuZ2Ugb2Zmc2V0Ci0gKiBAc3RhcnQ6IHJlc3VsdCBzdGFydAotICogQHN0b3A6IHJlc3VsdCBzdG9wCi0gKgotICogR2V0IHRoZSBzdGFydCBhbmQgc3RvcCBvZmZzZXQgb2YgdGhlIHJhbmdlIGNvbnRhaW5pbmcgZGF0YSBiZWZvcmUgb3IKLSAqIGluY2x1ZGluZyBAb2Zmc2V0LgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSByYW5nZSB3aXRoIGRhdGEgYmVmb3JlIEBvZmZzZXQgZXhpc3RzLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotZ2Jvb2xlYW4KLWdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYmVmb3JlIChHc3RTcGFyc2VGaWxlICogZmlsZSwgZ3NpemUgb2Zmc2V0LAotICAgIGdzaXplICogc3RhcnQsIGdzaXplICogc3RvcCkKLXsKLSAgR3N0U3BhcnNlUmFuZ2UgKndhbGssICpyZXN1bHQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWxlICE9IE5VTEwsIEZBTFNFKTsKLQotICBmb3IgKHdhbGsgPSBmaWxlLT5yYW5nZXM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgR1NUX0RFQlVHICgic3RhcnQgJSIgR19HU0laRV9GT1JNQVQgIiA+ICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgICB3YWxrLT5zdG9wLCBvZmZzZXQpOwotICAgIGlmICh3YWxrLT5zdGFydCA+IG9mZnNldCkKLSAgICAgIGJyZWFrOwotCi0gICAgaWYgKHdhbGstPnN0YXJ0IDw9IG9mZnNldCkKLSAgICAgIHJlc3VsdCA9IHdhbGs7Ci0gIH0KLQotICBpZiAocmVzdWx0KSB7Ci0gICAgaWYgKHN0YXJ0KQotICAgICAgKnN0YXJ0ID0gcmVzdWx0LT5zdGFydDsKLSAgICBpZiAoc3RvcCkKLSAgICAgICpzdG9wID0gcmVzdWx0LT5zdG9wOwotICB9Ci0gIHJldHVybiByZXN1bHQgIT0gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3Rfc3BhcnNlX2ZpbGVfZ2V0X3JhbmdlX2FmdGVyOgotICogQGZpbGU6IGEgI0dzdFNwYXJzZUZpbGUKLSAqIEBvZmZzZXQ6IHRoZSByYW5nZSBvZmZzZXQKLSAqIEBzdGFydDogcmVzdWx0IHN0YXJ0Ci0gKiBAc3RvcDogcmVzdWx0IHN0b3AKLSAqCi0gKiBHZXQgdGhlIHN0YXJ0IGFuZCBzdG9wIG9mZnNldCBvZiB0aGUgcmFuZ2UgY29udGFpbmluZyBkYXRhIGFmdGVyIG9yCi0gKiBpbmNsdWRpbmcgQG9mZnNldC4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgcmFuZ2Ugd2l0aCBkYXRhIGFmdGVyIEBvZmZzZXQgZXhpc3RzLgotICoKLSAqIFNpbmNlOiAxLjQKLSAqLwotZ2Jvb2xlYW4KLWdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYWZ0ZXIgKEdzdFNwYXJzZUZpbGUgKiBmaWxlLCBnc2l6ZSBvZmZzZXQsCi0gICAgZ3NpemUgKiBzdGFydCwgZ3NpemUgKiBzdG9wKQotewotICBHc3RTcGFyc2VSYW5nZSAqd2FsaywgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbGUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGZvciAod2FsayA9IGZpbGUtPnJhbmdlczsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICBHU1RfREVCVUcgKCJzdG9wICUiIEdfR1NJWkVfRk9STUFUICIgPiAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgd2Fsay0+c3RvcCwgb2Zmc2V0KTsKLSAgICBpZiAod2Fsay0+c3RvcCA+IG9mZnNldCkgewotICAgICAgcmVzdWx0ID0gd2FsazsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBpZiAocmVzdWx0KSB7Ci0gICAgaWYgKHN0YXJ0KQotICAgICAgKnN0YXJ0ID0gcmVzdWx0LT5zdGFydDsKLSAgICBpZiAoc3RvcCkKLSAgICAgICpzdG9wID0gcmVzdWx0LT5zdG9wOwotICB9Ci0gIHJldHVybiByZXN1bHQgIT0gTlVMTDsKLX0KLQotLyogd2UgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGxpYmdpbyBqdXN0IGZvciBnX2lvX2Vycm9yX2Zyb21fZXJybm8oKSAqLwotc3RhdGljIEdzdFNwYXJzZUZpbGVJT0Vycm9yRW51bQotZ3N0X3NwYXJzZV9maWxlX2lvX2Vycm9yX2Zyb21fZXJybm8gKGdpbnQgZXJyX25vKQotewotICBzd2l0Y2ggKGVycl9ubykgewotI2lmZGVmIEVFWElTVAotICAgIGNhc2UgRUVYSVNUOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9FWElTVFM7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgRUlTRElSCi0gICAgY2FzZSBFSVNESVI6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0lTX0RJUkVDVE9SWTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFQUNDRVMKLSAgICBjYXNlIEVBQ0NFUzoKLSAgICAgIHJldHVybiBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfUEVSTUlTU0lPTl9ERU5JRUQ7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgRU5BTUVUT09MT05HCi0gICAgY2FzZSBFTkFNRVRPT0xPTkc6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0ZJTEVOQU1FX1RPT19MT05HOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVOT0VOVAotICAgIGNhc2UgRU5PRU5UOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfRk9VTkQ7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgRU5PVERJUgotICAgIGNhc2UgRU5PVERJUjoKLSAgICAgIHJldHVybiBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfTk9UX0RJUkVDVE9SWTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFUk9GUwotICAgIGNhc2UgRVJPRlM6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1JFQURfT05MWTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFTE9PUAotICAgIGNhc2UgRUxPT1A6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1RPT19NQU5ZX0xJTktTOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVOT1NQQwotICAgIGNhc2UgRU5PU1BDOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT19TUEFDRTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFTk9NRU0KLSAgICBjYXNlIEVOT01FTToKLSAgICAgIHJldHVybiBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfTk9fU1BBQ0U7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgRUlOVkFMCi0gICAgY2FzZSBFSU5WQUw6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgRVBFUk0KLSAgICBjYXNlIEVQRVJNOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9QRVJNSVNTSU9OX0RFTklFRDsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFQ0FOQ0VMRUQKLSAgICBjYXNlIEVDQU5DRUxFRDoKLSAgICAgIHJldHVybiBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfQ0FOQ0VMTEVEOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgICAgLyogRU5PVEVNUFRZID09IEVFWElTVCBvbiBBSVggZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyAqLwotI2lmIGRlZmluZWQgKEVOT1RFTVBUWSkgJiYgKCFkZWZpbmVkIChFRVhJU1QpIHx8IChFTk9URU1QVFkgIT0gRUVYSVNUKSkKLSAgICBjYXNlIEVOT1RFTVBUWToKLSAgICAgIHJldHVybiBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfTk9UX0VNUFRZOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVOT1RTVVAKLSAgICBjYXNlIEVOT1RTVVA6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX05PVF9TVVBQT1JURUQ7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAvKiBFT1BOT1RTVVBQID09IEVOT1RTVVAgb24gTGludXgsIGJ1dCBQT1NJWCBjb25zaWRlcnMgdGhlbSBkaXN0aW5jdCAqLwotI2lmIGRlZmluZWQgKEVPUE5PVFNVUFApICYmICghZGVmaW5lZCAoRU5PVFNVUCkgfHwgKEVPUE5PVFNVUFAgIT0gRU5PVFNVUCkpCi0gICAgY2FzZSBFT1BOT1RTVVBQOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfU1VQUE9SVEVEOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVQUk9UT05PU1VQUE9SVAotICAgIGNhc2UgRVBST1RPTk9TVVBQT1JUOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfU1VQUE9SVEVEOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVTT0NLVE5PU1VQUE9SVAotICAgIGNhc2UgRVNPQ0tUTk9TVVBQT1JUOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfU1VQUE9SVEVEOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVQRk5PU1VQUE9SVAotICAgIGNhc2UgRVBGTk9TVVBQT1JUOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfU1VQUE9SVEVEOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVBRk5PU1VQUE9SVAotICAgIGNhc2UgRUFGTk9TVVBQT1JUOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfU1VQUE9SVEVEOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVUSU1FRE9VVAotICAgIGNhc2UgRVRJTUVET1VUOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9USU1FRF9PVVQ7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgRUJVU1kKLSAgICBjYXNlIEVCVVNZOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9CVVNZOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIEVXT1VMREJMT0NLCi0gICAgY2FzZSBFV09VTERCTE9DSzoKLSAgICAgIHJldHVybiBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfV09VTERfQkxPQ0s7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgICAvKiBFV09VTERCTE9DSyA9PSBFQUdBSU4gb24gbW9zdCBzeXN0ZW1zLCBidXQgUE9TSVggY29uc2lkZXJzIHRoZW0gZGlzdGluY3QgKi8KLSNpZiBkZWZpbmVkIChFQUdBSU4pICYmICghZGVmaW5lZCAoRVdPVUxEQkxPQ0spIHx8IChFV09VTERCTE9DSyAhPSBFQUdBSU4pKQotICAgIGNhc2UgRUFHQUlOOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9XT1VMRF9CTE9DSzsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFTUZJTEUKLSAgICBjYXNlIEVNRklMRToKLSAgICAgIHJldHVybiBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUzsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFQUREUklOVVNFCi0gICAgY2FzZSBFQUREUklOVVNFOgotICAgICAgcmV0dXJuIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9BRERSRVNTX0lOX1VTRTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFSE9TVFVOUkVBQ0gKLSAgICBjYXNlIEVIT1NUVU5SRUFDSDoKLSAgICAgIHJldHVybiBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfSE9TVF9VTlJFQUNIQUJMRTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFTkVUVU5SRUFDSAotICAgIGNhc2UgRU5FVFVOUkVBQ0g6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX05FVFdPUktfVU5SRUFDSEFCTEU7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgRUNPTk5SRUZVU0VECi0gICAgY2FzZSBFQ09OTlJFRlVTRUQ6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRDsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBFUElQRQotICAgIGNhc2UgRVBJUEU6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0JST0tFTl9QSVBFOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0ZBSUxFRDsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHNwYXJzZWZpbGUuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0c3BhcnNlZmlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmY3M2QzLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0c3BhcnNlZmlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE0IFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpZm5kZWYgX19HU1RfU1BBUlNFX0ZJTEVfSF9fCi0jZGVmaW5lIF9fR1NUX1NQQVJTRV9GSUxFX0hfXwotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGFyc2VGaWxlIEdzdFNwYXJzZUZpbGU7Ci0KLS8qIE5PVEU6IFJlbW92ZSB0aGlzIGJlZm9yZSBtYWtpbmcgdGhpcyBwdWJsaWMgQVBJIGFnYWluISAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0ZBSUxFRCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX05PVF9GT1VORCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0VYSVNUUywKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0lTX0RJUkVDVE9SWSwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX05PVF9ESVJFQ1RPUlksCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfRU1QVFksCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfUkVHVUxBUl9GSUxFLAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfTk9UX1NZTUJPTElDX0xJTkssCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9OT1RfTU9VTlRBQkxFX0ZJTEUsCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9GSUxFTkFNRV9UT09fTE9ORywKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0lOVkFMSURfRklMRU5BTUUsCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9UT09fTUFOWV9MSU5LUywKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX05PX1NQQUNFLAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfSU5WQUxJRF9BUkdVTUVOVCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1BFUk1JU1NJT05fREVOSUVELAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfTk9UX1NVUFBPUlRFRCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX05PVF9NT1VOVEVELAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfQUxSRUFEWV9NT1VOVEVELAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfQ0xPU0VELAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfQ0FOQ0VMTEVELAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfUEVORElORywKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1JFQURfT05MWSwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0NBTlRfQ1JFQVRFX0JBQ0tVUCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1dST05HX0VUQUcsCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9USU1FRF9PVVQsCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9XT1VMRF9SRUNVUlNFLAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfQlVTWSwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1dPVUxEX0JMT0NLLAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfSE9TVF9OT1RfRk9VTkQsCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9XT1VMRF9NRVJHRSwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0ZBSUxFRF9IQU5ETEVELAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUywKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX05PVF9JTklUSUFMSVpFRCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0FERFJFU1NfSU5fVVNFLAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfUEFSVElBTF9JTlBVVCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0lOVkFMSURfREFUQSwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0RCVVNfRVJST1IsCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9IT1NUX1VOUkVBQ0hBQkxFLAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfTkVUV09SS19VTlJFQUNIQUJMRSwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1BST1hZX0ZBSUxFRCwKLSAgR1NUX1NQQVJTRV9GSUxFX0lPX0VSUk9SX1BST1hZX0FVVEhfRkFJTEVELAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfUFJPWFlfTkVFRF9BVVRILAotICBHU1RfU1BBUlNFX0ZJTEVfSU9fRVJST1JfUFJPWFlfTk9UX0FMTE9XRUQsCi0gIEdTVF9TUEFSU0VfRklMRV9JT19FUlJPUl9CUk9LRU5fUElQRQotfSBHc3RTcGFyc2VGaWxlSU9FcnJvckVudW07Ci0KLUdzdFNwYXJzZUZpbGUgKiBnc3Rfc3BhcnNlX2ZpbGVfbmV3ICAgICAgICAgICh2b2lkKTsKLXZvaWQgICAgICAgICAgICBnc3Rfc3BhcnNlX2ZpbGVfZnJlZSAgICAgICAgIChHc3RTcGFyc2VGaWxlICpmaWxlKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9zcGFyc2VfZmlsZV9zZXRfZmQgICAgICAgKEdzdFNwYXJzZUZpbGUgKmZpbGUsIGdpbnQgZmQpOwotdm9pZCAgICAgICAgICAgIGdzdF9zcGFyc2VfZmlsZV9jbGVhciAgICAgICAgKEdzdFNwYXJzZUZpbGUgKmZpbGUpOwotCi1nc2l6ZSAgICAgICAgICAgZ3N0X3NwYXJzZV9maWxlX3dyaXRlICAgICAgICAoR3N0U3BhcnNlRmlsZSAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICphdmFpbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwotCi1nc2l6ZSAgICAgICAgICAgZ3N0X3NwYXJzZV9maWxlX3JlYWQgICAgICAgICAoR3N0U3BhcnNlRmlsZSAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqcmVtYWluaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKLQotZ3VpbnQgICAgICAgICAgIGdzdF9zcGFyc2VfZmlsZV9uX3JhbmdlcyAgICAgICAgIChHc3RTcGFyc2VGaWxlICpmaWxlKTsKLQotZ2Jvb2xlYW4gICAgICAgIGdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYmVmb3JlIChHc3RTcGFyc2VGaWxlICpmaWxlLCBnc2l6ZSBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpzdGFydCwgZ3NpemUgKnN0b3ApOwotCi1nYm9vbGVhbiAgICAgICAgZ3N0X3NwYXJzZV9maWxlX2dldF9yYW5nZV9hZnRlciAgKEdzdFNwYXJzZUZpbGUgKmZpbGUsIGdzaXplIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKnN0YXJ0LCBnc2l6ZSAqc3RvcCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TUEFSU0VfRklMRV9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0c3RyZWFtaWRkZW11eC5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RzdHJlYW1pZGRlbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZmMyOTAuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RzdHJlYW1pZGRlbXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTIgKzAsMCBAQAotLyogR1N0cmVhbWVyIHN0cmVhbWlkZGVtdXggZWxlbWVudAotICoKLSAqIENvcHlyaWdodCAyMDEzIExHRSBDb3Jwb3JhdGlvbi4KLSAqICBAYXV0aG9yOiBIb29uaGVlIExlZSA8aG9vbmhlZS5sZWVAbGdlLmNvbT4KLSAqICBAYXV0aG9yOiBKZW9uZ3Nlb2sgS2ltIDxqZW9uZ3Nlb2sua2ltQGxnZS5jb20+Ci0gKiAgQGF1dGhvcjogV29uY2h1bCBMZWUgPHdvbmNodWw4Ni5sZWVAbGdlLmNvbT4KLSAqCi0gKiBnc3RzdHJlYW1pZGRlbXV4LmM6IFNpbXBsZSBzdHJlYW0taWQtZGVtdWx0aXBsZXhlciBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXN0cmVhbWlkZGVtdXgKLSAqCi0gKiBUaGUgYmFzaWMgY29uY2VwdCB3YXMgc3RhcnRlZCBmcm9tIGRlLWZ1bm5lbGluZyBlbGVtZW50IHdoaWNoIHJlc3RvcmVzIG9uZQotICogc2VyaWFsaXplZCBzdHJlYW0gdmlhICNHc3RGdW5uZWwgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiAjR3N0U3RyZWFtaWREZW11eAotICogY2xhc3NpZmllcyBlYWNoIHN0cmVhbSBiYXNlIG9uIHN0cmVhbSBpZHMuCi0gKgotICogVGhlIHN0cmVhbSBpZCBkZW11eCBhbHdheXMgdGFrZXMgb25lIGlucHV0IGFuZCBjaGVja3MgaG93IG1hbnkgc3RyZWFtcwotICogYXJlIGNvbnRhaW5lZCBpbiBhIHN0cmVhbSBieSBTVFJFQU1fU1RBUlQgZXZlbnQuIExpa2V3aXNlICNHc3RGdW5uZWwsCi0gKiAjR3N0U3RyZWFtaWREZW11eCBkb2VzIG5vdCBzeW5jaHJvbml6ZSB0aGUgZGlmZmVyZW50IG91dHB1dCBzdHJlYW1zLgotICoKLSAqICNHc3RTdHJlYW1pZERlbXV4OmFjdGl2ZS1wYWQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggb3V0cHV0IHBhZAotICogaXMgYWN0aXZhdGVkIGF0IHRoZSBtb21lbnQuCi0gKgotICogQHNlZV9hbHNvOiAjR3N0RnVubmVsLCAjZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdHN0cmVhbWlkZGVtdXguaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoc3RyZWFtaWRfZGVtdXhfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgc3RyZWFtaWRfZGVtdXhfZGVidWcKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQUNUSVZFX1BBRCwKLSAgUFJPUF9MQVNUCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3N0cmVhbWlkX2RlbXV4X3NpbmtfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9zdHJlYW1pZF9kZW11eF9zcmNfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyY18ldSIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHN0cmVhbWlkX2RlbXV4X2RlYnVnLCBcCi0gICAgICAgICJzdHJlYW1pZGRlbXV4IiwgMCwgIlN0cmVhbWlkIGRlbXV4ZXIiKTsKLSNkZWZpbmUgZ3N0X3N0cmVhbWlkX2RlbXV4X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RTdHJlYW1pZERlbXV4LCBnc3Rfc3RyZWFtaWRfZGVtdXgsCi0gICAgR1NUX1RZUEVfRUxFTUVOVCwgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZCBnc3Rfc3RyZWFtaWRfZGVtdXhfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3RyZWFtaWRfZGVtdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3N0cmVhbWlkX2RlbXV4X2NoYWluIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9zdHJlYW1pZF9kZW11eF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3N0cmVhbWlkX2RlbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgR3N0UGFkICpnc3Rfc3RyZWFtaWRfZGVtdXhfZ2V0X3NyY3BhZF9ieV9zdHJlYW1faWQgKEdzdFN0cmVhbWlkRGVtdXggKgotICAgIGRlbXV4LCBjb25zdCBnY2hhciAqIHN0cmVhbV9pZCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3N0cmVhbWlkX2RlbXV4X3NyY3BhZF9jcmVhdGUgKEdzdFN0cmVhbWlkRGVtdXggKiBkZW11eCwKLSAgICBHc3RQYWQgKiBwYWQsIGNvbnN0IGdjaGFyICogc3RyZWFtX2lkKTsKLXN0YXRpYyB2b2lkIGdzdF9zdHJlYW1pZF9kZW11eF9yZXNldCAoR3N0U3RyZWFtaWREZW11eCAqIGRlbXV4KTsKLXN0YXRpYyB2b2lkIGdzdF9zdHJlYW1pZF9kZW11eF9yZWxlYXNlX3NyY3BhZCAoY29uc3QgR1ZhbHVlICogaXRlbSwKLSAgICBHc3RTdHJlYW1pZERlbXV4ICogZGVtdXgpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3N0cmVhbWlkX2RlbXV4X2NsYXNzX2luaXQgKEdzdFN0cmVhbWlkRGVtdXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9zdHJlYW1pZF9kZW11eF9nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfc3RyZWFtaWRfZGVtdXhfZGlzcG9zZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FDVElWRV9QQUQsCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiYWN0aXZlLXBhZCIsICJBY3RpdmUgcGFkIiwKLSAgICAgICAgICAiVGhlIGN1cnJlbnRseSBhY3RpdmUgc3JjIHBhZCIsIEdTVF9UWVBFX1BBRCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJTdHJlYW1pZCBEZW11eCIsCi0gICAgICAiR2VuZXJpYyIsICIxLXRvLU4gb3V0cHV0IHN0cmVhbSBieSBzdHJlYW0taWQiLAotICAgICAgIkhvb25IZWUgTGVlIDxob29uaGVlLmxlZUBsZ2UuY29tPiIpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfc3RyZWFtaWRfZGVtdXhfc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfc3RyZWFtaWRfZGVtdXhfc3JjX2ZhY3RvcnkpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9zdHJlYW1pZF9kZW11eF9jaGFuZ2Vfc3RhdGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtaWRfZGVtdXhfaW5pdCAoR3N0U3RyZWFtaWREZW11eCAqIGRlbXV4KQotewotICBkZW11eC0+c2lua3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmdzdF9zdHJlYW1pZF9kZW11eF9zaW5rX2ZhY3RvcnksCi0gICAgICAic2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoZGVtdXgtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3N0cmVhbWlkX2RlbXV4X2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChkZW11eC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3RyZWFtaWRfZGVtdXhfZXZlbnQpKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZGVtdXgpLCBkZW11eC0+c2lua3BhZCk7Ci0KLSAgLyogc3JjcGFkIG1hbmFnZW1lbnQgKi8KLSAgZGVtdXgtPmFjdGl2ZV9zcmNwYWQgPSBOVUxMOwotICBkZW11eC0+bmJfc3JjcGFkcyA9IDA7Ci0KLSAgLyogaW5pdGlhbGl6ZSBoYXNoIHRhYmxlIGZvciBzcmNwYWQgKi8KLSAgZGVtdXgtPnN0cmVhbV9pZF9wYWlycyA9Ci0gICAgICBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtaWRfZGVtdXhfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0U3RyZWFtaWREZW11eCAqZGVtdXggPSBHU1RfU1RSRUFNSURfREVNVVggKG9iamVjdCk7Ci0KLSAgZ3N0X3N0cmVhbWlkX2RlbXV4X3Jlc2V0IChkZW11eCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtaWRfZGVtdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFN0cmVhbWlkRGVtdXggKmRlbXV4ID0gR1NUX1NUUkVBTUlEX0RFTVVYIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9BQ1RJVkVfUEFEOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBkZW11eC0+YWN0aXZlX3NyY3BhZCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcndhcmRfc3RpY2t5X2V2ZW50cyAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RQYWQgKnNyY3BhZCA9IEdTVF9QQURfQ0FTVCAodXNlcl9kYXRhKTsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X3JlZiAoKmV2ZW50KSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3N0cmVhbWlkX2RlbXV4X3NyY3BhZF9jcmVhdGUgKEdzdFN0cmVhbWlkRGVtdXggKiBkZW11eCwgR3N0UGFkICogcGFkLAotICAgIGNvbnN0IGdjaGFyICogc3RyZWFtX2lkKQotewotICBnY2hhciAqcGFkbmFtZSA9IE5VTEw7Ci0gIEdzdFBhZCAqc3JjcGFkID0gTlVMTDsKLSAgR3N0UGFkVGVtcGxhdGUgKnBhZF90bXBsID0gTlVMTDsKLQotICBwYWRuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjXyV1IiwgZGVtdXgtPm5iX3NyY3BhZHMrKyk7Ci0gIHBhZF90bXBsID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmZ3N0X3N0cmVhbWlkX2RlbXV4X3NyY19mYWN0b3J5KTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJnZW5lcmF0aW5nIGEgc3JjcGFkOiVzIiwgcGFkbmFtZSk7Ci0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHBhZF90bXBsLCBwYWRuYW1lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkX3RtcGwpOwotICBnX2ZyZWUgKHBhZG5hbWUpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3JjcGFkICE9IE5VTEwsIEZBTFNFKTsKLQotICBkZW11eC0+YWN0aXZlX3NyY3BhZCA9IHNyY3BhZDsKLSAgZ19oYXNoX3RhYmxlX2luc2VydCAoZGVtdXgtPnN0cmVhbV9pZF9wYWlycywgZ19zdHJkdXAgKHN0cmVhbV9pZCksCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAoc3JjcGFkKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc3RyZWFtaWRfZGVtdXhfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdFN0cmVhbWlkRGVtdXggKmRlbXV4ID0gTlVMTDsKLSAgR3N0UGFkICpzcmNwYWQgPSBOVUxMOwotCi0gIGRlbXV4ID0gR1NUX1NUUkVBTUlEX0RFTVVYIChwYXJlbnQpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgInB1c2hpbmcgYnVmZmVyIHRvICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgZGVtdXgtPmFjdGl2ZV9zcmNwYWQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICBpZiAoZGVtdXgtPmFjdGl2ZV9zcmNwYWQpIHsKLSAgICBzcmNwYWQgPSBnc3Rfb2JqZWN0X3JlZiAoZGVtdXgtPmFjdGl2ZV9zcmNwYWQpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgcmVzID0gZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGJ1Zik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgIGdvdG8gbm9fYWN0aXZlX3NyY3BhZDsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgImhhbmRsZWQgYnVmZmVyICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlcykpOwotICByZXR1cm4gcmVzOwotCi0vKiBFUlJPUiAqLwotbm9fYWN0aXZlX3NyY3BhZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJzcmNwYWQgaXMgbm90IGluaXRpYWxpemVkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X3N0cmVhbWlkX2RlbXV4X2dldF9zcmNwYWRfYnlfc3RyZWFtX2lkIChHc3RTdHJlYW1pZERlbXV4ICogZGVtdXgsCi0gICAgY29uc3QgZ2NoYXIgKiBzdHJlYW1faWQpCi17Ci0gIEdzdFBhZCAqc3JjcGFkID0gTlVMTDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInN0cmVhbV9pZCA9ICVzIiwgc3RyZWFtX2lkKTsKLSAgaWYgKGRlbXV4LT5zdHJlYW1faWRfcGFpcnMgPT0gTlVMTCB8fCBzdHJlYW1faWQgPT0gTlVMTCkgewotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIHNyY3BhZCA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGRlbXV4LT5zdHJlYW1faWRfcGFpcnMsIHN0cmVhbV9pZCk7Ci0KLSAgaWYgKHNyY3BhZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic3JjcGFkID0gJXM6JXMgbWF0Y2hlZCIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoc3JjcGFkKSk7Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIHNyY3BhZDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3RyZWFtaWRfZGVtdXhfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHc3RTdHJlYW1pZERlbXV4ICpkZW11eDsKLSAgY29uc3QgZ2NoYXIgKnN0cmVhbV9pZCA9IE5VTEw7Ci0gIEdzdFBhZCAqYWN0aXZlX3NyY3BhZCA9IE5VTEw7Ci0KLSAgZGVtdXggPSBHU1RfU1RSRUFNSURfREVNVVggKHBhcmVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJldmVudCA9ICVzLCBzdGlja3kgPSAlZCIsCi0gICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksIEdTVF9FVkVOVF9JU19TVElDS1kgKGV2ZW50KSk7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCkgewotICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQgKGV2ZW50LCAmc3RyZWFtX2lkKTsKLSAgICBpZiAoIXN0cmVhbV9pZCkKLSAgICAgIGdvdG8gbm9fc3RyZWFtX2lkOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgYWN0aXZlX3NyY3BhZCA9Ci0gICAgICAgIGdzdF9zdHJlYW1pZF9kZW11eF9nZXRfc3JjcGFkX2J5X3N0cmVhbV9pZCAoZGVtdXgsIHN0cmVhbV9pZCk7Ci0gICAgaWYgKCFhY3RpdmVfc3JjcGFkKSB7Ci0gICAgICAvKiB0cnkgdG8gZ2VuZXJhdGUgYSBzcmNwYWQgKi8KLSAgICAgIGlmIChnc3Rfc3RyZWFtaWRfZGVtdXhfc3JjcGFkX2NyZWF0ZSAoZGVtdXgsIHBhZCwgc3RyZWFtX2lkKSkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotCi0gICAgICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZGVtdXgtPmFjdGl2ZV9zcmNwYWQsIFRSVUUpOwotICAgICAgICAvKiBGb3J3YXJkIHN0aWNreSBldmVudHMgdG8gdGhlIG5ldyBzcmNwYWQgKi8KLSAgICAgICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKGRlbXV4LT5zaW5rcGFkLCBmb3J3YXJkX3N0aWNreV9ldmVudHMsCi0gICAgICAgICAgICBkZW11eC0+YWN0aXZlX3NyY3BhZCk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgZGVtdXgtPmFjdGl2ZV9zcmNwYWQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgICAgZ290byBmYWlsX2NyZWF0ZV9zcmNwYWQ7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChkZW11eC0+YWN0aXZlX3NyY3BhZCAhPSBhY3RpdmVfc3JjcGFkKSB7Ci0gICAgICBkZW11eC0+YWN0aXZlX3NyY3BhZCA9IGFjdGl2ZV9zcmNwYWQ7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotCi0gICAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChkZW11eCksICJhY3RpdmUtcGFkIik7Ci0gICAgfSBlbHNlCi0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICB9Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0ZMVVNIX1NUQVJUCi0gICAgICB8fCBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9GTFVTSF9TVE9QCi0gICAgICB8fCBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gIH0gZWxzZSBpZiAoZGVtdXgtPmFjdGl2ZV9zcmNwYWQpIHsKLSAgICBHc3RQYWQgKnNyY3BhZCA9IE5VTEw7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgc3JjcGFkID0gZ3N0X29iamVjdF9yZWYgKGRlbXV4LT5hY3RpdmVfc3JjcGFkKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBldmVudCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgfQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fc3RyZWFtX2lkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAoIkVycm9yIG9jY3VycmVkIHRyeWluZyB0byBnZXQgc3RyZWFtLWlkIHRvIGNyZWF0ZSBhIHNyY3BhZCIpLAotICAgICAgICAoIm5vIHN0cmVhbS1pZCBmb3VuZCBhdCAlcyIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSkpOwotCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLWZhaWxfY3JlYXRlX3NyY3BhZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBGQUlMRUQsCi0gICAgICAgICgiRXJyb3Igb2NjdXJyZWQgdHJ5aW5nIHRvIGNyZWF0ZSBhIHNyY3BhZCIpLAotICAgICAgICAoIkZhaWxlZCB0byBjcmVhdGUgYSBzcmNwYWQgdmlhIHN0cmVhbS1pZDolcyIsIHN0cmVhbV9pZCkpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N0cmVhbWlkX2RlbXV4X3JlbGVhc2Vfc3JjcGFkIChjb25zdCBHVmFsdWUgKiBpdGVtLAotICAgIEdzdFN0cmVhbWlkRGVtdXggKiBkZW11eCkKLXsKLSAgR3N0UGFkICpwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKGl0ZW0pOwotCi0gIGlmIChwYWQgIT0gTlVMTCkgewotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBGQUxTRSk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCBwYWQpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFtaWRfZGVtdXhfcmVzZXQgKEdzdFN0cmVhbWlkRGVtdXggKiBkZW11eCkKLXsKLSAgR3N0SXRlcmF0b3IgKml0ID0gTlVMTDsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgaXRyZXQgPSBHU1RfSVRFUkFUT1JfT0s7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gIGlmIChkZW11eC0+YWN0aXZlX3NyY3BhZCAhPSBOVUxMKQotICAgIGRlbXV4LT5hY3RpdmVfc3JjcGFkID0gTlVMTDsKLQotICBkZW11eC0+bmJfc3JjcGFkcyA9IDA7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0KLSAgaWYgKGRlbXV4LT5zdHJlYW1faWRfcGFpcnMgIT0gTlVMTCkgewotICAgIGdfaGFzaF90YWJsZV91bnJlZiAoZGVtdXgtPnN0cmVhbV9pZF9wYWlycyk7Ci0gICAgZGVtdXgtPnN0cmVhbV9pZF9wYWlycyA9IE5VTEw7Ci0gIH0KLQotICBpdCA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSk7Ci0gIHdoaWxlIChpdHJldCA9PSBHU1RfSVRFUkFUT1JfT0sgfHwgaXRyZXQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykgewotICAgIGl0cmV0ID0KLSAgICAgICAgZ3N0X2l0ZXJhdG9yX2ZvcmVhY2ggKGl0LAotICAgICAgICAoR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24pIGdzdF9zdHJlYW1pZF9kZW11eF9yZWxlYXNlX3NyY3BhZCwgZGVtdXgpOwotICAgIGlmIChpdHJldCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICB9Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3N0cmVhbWlkX2RlbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RyZWFtaWREZW11eCAqZGVtdXg7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlc3VsdDsKLQotICBkZW11eCA9IEdTVF9TVFJFQU1JRF9ERU1VWCAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJlc3VsdCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3Rfc3RyZWFtaWRfZGVtdXhfcmVzZXQgKGRlbXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHN0cmVhbWlkZGVtdXguaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0c3RyZWFtaWRkZW11eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGI3NGE5Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0c3RyZWFtaWRkZW11eC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lciBzdHJlYW1pZGRlbXV4IGVsZWVtZW50Ci0gKgotICogQ29weXJpZ2h0IDIwMTMgTEdFIENvcnBvcmF0aW9uLgotICogIEBhdXRob3I6IEhvb25oZWUgTGVlIDxob29uaGVlLmxlZUBsZ2UuY29tPgotICogIEBhdXRob3I6IEplb25nc2VvayBLaW0gPGplb25nc2Vvay5raW1AbGdlLmNvbT4KLSAqICBAYXV0aG9yOiBXb25jaHVsIExlZSA8d29uY2h1bDg2LmxlZUBsZ2UuY29tPgotICoKLSAqIGdzdHN0cmVhbWlkZGVtdXguaDogU2ltcGxlIHN0cmVhbS1pZC1kZW11bHRpcGxleGVyIGVsZW1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TVFJFQU1JRF9ERU1VWF9IX18KLSNkZWZpbmUgX19HU1RfU1RSRUFNSURfREVNVVhfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfU1RSRUFNSURfREVNVVggXAotICAoZ3N0X3N0cmVhbWlkX2RlbXV4X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9TVFJFQU1JRF9ERU1VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfU1RSRUFNSURfREVNVVgsIEdzdFN0cmVhbWlkRGVtdXgpKQotI2RlZmluZSBHU1RfU1RSRUFNSURfREVNVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9TVFJFQU1JRF9ERU1VWCwgR3N0U3RyZWFtaWREZW11eENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1NUUkVBTUlEX0RFTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9TVFJFQU1JRF9ERU1VWCkpCi0jZGVmaW5lIEdTVF9JU19TVFJFQU1JRF9ERU1VWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1NUUkVBTUlEX0RFTVVYKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1pZERlbXV4IEdzdFN0cmVhbWlkRGVtdXg7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtaWREZW11eENsYXNzIEdzdFN0cmVhbWlkRGVtdXhDbGFzczsKLQotLyoqCi0gKiBHc3RTdHJlYW1pZERlbXV4OgotICoKLSAqIFRoZSBvcGFxdWUgI0dzdFN0cmVhbWlkRGVtdXggZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0U3RyZWFtaWREZW11eAotewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgR3N0UGFkICpzaW5rcGFkOwotCi0gIGd1aW50IG5iX3NyY3BhZHM7Ci0gIEdzdFBhZCAqYWN0aXZlX3NyY3BhZDsKLQotICAvKiBUaGlzIHRhYmxlIGNvbnRhaW5zIHNyY3BhZCBhbmQgc3RyZWFtLWlkICovCi0gIEdIYXNoVGFibGUgKnN0cmVhbV9pZF9wYWlyczsKLX07Ci0KLXN0cnVjdCBfR3N0U3RyZWFtaWREZW11eENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X3N0cmVhbWlkX2RlbXV4X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9TVFJFQU1JRF9ERU1VWF9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzY5ODE0Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0dGVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDQsMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICAgICAyMDA3IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogZ3N0dGVlLmM6IFRlZSBlbGVtZW50LCBvbmUgaW4gTiBvdXQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC10ZWUKLSAqIEBzZWVfYWxzbzogI0dzdElkZW50aXR5Ci0gKgotICogU3BsaXQgZGF0YSB0byBtdWx0aXBsZSBwYWRzLiBCcmFuY2hpbmcgdGhlIGRhdGEgZmxvdyBpcyB1c2VmdWwgd2hlbiBlLmcuCi0gKiBjYXB0dXJpbmcgYSB2aWRlbyB3aGVyZSB0aGUgdmlkZW8gaXMgc2hvd24gb24gdGhlIHNjcmVlbiBhbmQgYWxzbyBlbmNvZGVkIGFuZAotICogd3JpdHRlbiB0byBhIGZpbGUuIEFub3RoZXIgZXhhbXBsZSBpcyBwbGF5aW5nIG11c2ljIGFuZCBob29raW5nIHVwIGEKLSAqIHZpc3VhbGlzYXRpb24gbW9kdWxlLgotICoKLSAqIE9uZSBuZWVkcyB0byB1c2Ugc2VwYXJhdGUgcXVldWUgZWxlbWVudHMgKG9yIGEgbXVsdGlxdWV1ZSkgaW4gZWFjaCBicmFuY2ggdG8KLSAqIHByb3ZpZGUgc2VwYXJhdGUgdGhyZWFkcyBmb3IgZWFjaCBicmFuY2guIE90aGVyd2lzZSBhIGJsb2NrZWQgZGF0YWZsb3cgaW4gb25lCi0gKiBicmFuY2ggd291bGQgc3RhbGwgdGhlIG90aGVyIGJyYW5jaGVzLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXNvbmcub2dnICEgZGVjb2RlYmluICEgdGVlIG5hbWU9dCAhIHF1ZXVlICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsgdC4gISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIGdvb20gISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBQbGF5IHNvbmcub2dnIGF1ZGlvIGZpbGUgd2hpY2ggbXVzdCBiZSBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQotICogYW5kIHJlbmRlciB2aXN1YWxpc2F0aW9ucyB1c2luZyB0aGUgZ29vbSBlbGVtZW50ICh0aGlzIGNhbiBiZSBlYXNpZXIgZG9uZQotICogdXNpbmcgdGhlIHBsYXliaW4gZWxlbWVudCwgdGhpcyBpcyBqdXN0IGFuIGV4YW1wbGUgcGlwZWxpbmUpLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHRlZS5oIgotI2luY2x1ZGUgImdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF90ZWVfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3RlZV9kZWJ1ZwotCi0jZGVmaW5lIEdTVF9UWVBFX1RFRV9QVUxMX01PREUgKGdzdF90ZWVfcHVsbF9tb2RlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF90ZWVfcHVsbF9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGRhdGFbXSA9IHsKLSAgICB7R1NUX1RFRV9QVUxMX01PREVfTkVWRVIsICJOZXZlciBhY3RpdmF0ZSBpbiBwdWxsIG1vZGUiLCAibmV2ZXIifSwKLSAgICB7R1NUX1RFRV9QVUxMX01PREVfU0lOR0xFLCAiT25seSBvbmUgc3JjIHBhZCBjYW4gYmUgYWN0aXZlIGluIHB1bGwgbW9kZSIsCi0gICAgICAgICJzaW5nbGUifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCF0eXBlKSB7Ci0gICAgdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RUZWVQdWxsTW9kZSIsIGRhdGEpOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQotCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9OVU1fU1JDX1BBRFMJMAotI2RlZmluZSBERUZBVUxUX1BST1BfSEFTX0NIQUlOCQlUUlVFCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9TSUxFTlQJCVRSVUUKLSNkZWZpbmUgREVGQVVMVF9QUk9QX0xBU1RfTUVTU0FHRQlOVUxMCi0jZGVmaW5lIERFRkFVTFRfUFVMTF9NT0RFCQlHU1RfVEVFX1BVTExfTU9ERV9ORVZFUgotI2RlZmluZSBERUZBVUxUX1BST1BfQUxMT1dfTk9UX0xJTktFRAlGQUxTRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9OVU1fU1JDX1BBRFMsCi0gIFBST1BfSEFTX0NIQUlOLAotICBQUk9QX1NJTEVOVCwKLSAgUFJPUF9MQVNUX01FU1NBR0UsCi0gIFBST1BfUFVMTF9NT0RFLAotICBQUk9QX0FMTE9DX1BBRCwKLSAgUFJPUF9BTExPV19OT1RfTElOS0VELAotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjXyV1IiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfdGVlX2RlYnVnLCAidGVlIiwgMCwgInRlZSBlbGVtZW50Iik7Ci0jZGVmaW5lIGdzdF90ZWVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFRlZSwgZ3N0X3RlZSwgR1NUX1RZUEVfRUxFTUVOVCwgX2RvX2luaXQpOwotCi1zdGF0aWMgR1BhcmFtU3BlYyAqcHNwZWNfbGFzdF9tZXNzYWdlID0gTlVMTDsKLXN0YXRpYyBHUGFyYW1TcGVjICpwc3BlY19hbGxvY19wYWQgPSBOVUxMOwotCi1HVHlwZSBnc3RfdGVlX3BhZF9nZXRfdHlwZSAodm9pZCk7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfVEVFX1BBRCBcCi0gIChnc3RfdGVlX3BhZF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVEVFX1BBRChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVEVFX1BBRCwgR3N0VGVlUGFkKSkKLSNkZWZpbmUgR1NUX1RFRV9QQURfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9URUVfUEFELCBHc3RUZWVQYWRDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19URUVfUEFEKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9URUVfUEFEKSkKLSNkZWZpbmUgR1NUX0lTX1RFRV9QQURfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9URUVfUEFEKSkKLSNkZWZpbmUgR1NUX1RFRV9QQURfQ0FTVChvYmopIFwKLSAgKChHc3RUZWVQYWQgKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlZVBhZCBHc3RUZWVQYWQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VGVlUGFkQ2xhc3MgR3N0VGVlUGFkQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0VGVlUGFkCi17Ci0gIEdzdFBhZCBwYXJlbnQ7Ci0KLSAgZ3VpbnQgaW5kZXg7Ci0gIGdib29sZWFuIHB1c2hlZDsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQ7Ci0gIGdib29sZWFuIHJlbW92ZWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFRlZVBhZENsYXNzCi17Ci0gIEdzdFBhZENsYXNzIHBhcmVudDsKLX07Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFRlZVBhZCwgZ3N0X3RlZV9wYWQsIEdTVF9UWVBFX1BBRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVlX3BhZF9jbGFzc19pbml0IChHc3RUZWVQYWRDbGFzcyAqIGtsYXNzKQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RlZV9wYWRfcmVzZXQgKEdzdFRlZVBhZCAqIHBhZCkKLXsKLSAgcGFkLT5wdXNoZWQgPSBGQUxTRTsKLSAgcGFkLT5yZXN1bHQgPSBHU1RfRkxPV19OT1RfTElOS0VEOwotICBwYWQtPnJlbW92ZWQgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZWVfcGFkX2luaXQgKEdzdFRlZVBhZCAqIHBhZCkKLXsKLSAgZ3N0X3RlZV9wYWRfcmVzZXQgKHBhZCk7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKmdzdF90ZWVfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXAsIGNvbnN0IGdjaGFyICogdW51c2VkLCBjb25zdCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3RfdGVlX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKTsKLQotc3RhdGljIHZvaWQgZ3N0X3RlZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfdGVlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF90ZWVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3RlZV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3RlZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF90ZWVfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyTGlzdCAqIGxpc3QpOwotc3RhdGljIGdib29sZWFuIGdzdF90ZWVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3RlZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdGVlX3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIGdib29sZWFuIGdzdF90ZWVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdGVlX3NyY19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfdGVlX3NyY19nZXRfcmFuZ2UgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWYpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3RlZV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHTGlzdCAqaXRlbTsKLQotcmVzdGFydDoKLSAgZm9yIChpdGVtID0gR1NUX0VMRU1FTlRfUEFEUyAob2JqZWN0KTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0IChpdGVtKSkgewotICAgIEdzdFBhZCAqcGFkID0gR1NUX1BBRCAoaXRlbS0+ZGF0YSk7Ci0gICAgaWYgKEdTVF9QQURfSVNfU1JDIChwYWQpKSB7Ci0gICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChHU1RfRUxFTUVOVCAob2JqZWN0KSwgcGFkKTsKLSAgICAgIGdvdG8gcmVzdGFydDsKLSAgICB9Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZWVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFRlZSAqdGVlOwotCi0gIHRlZSA9IEdTVF9URUUgKG9iamVjdCk7Ci0KLSAgZ19oYXNoX3RhYmxlX3VucmVmICh0ZWUtPnBhZF9pbmRleGVzKTsKLQotICBnX2ZyZWUgKHRlZS0+bGFzdF9tZXNzYWdlKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVlX2NsYXNzX2luaXQgKEdzdFRlZUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF90ZWVfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF90ZWVfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdGVlX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF90ZWVfZGlzcG9zZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9TUkNfUEFEUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJudW0tc3JjLXBhZHMiLCAiTnVtIFNyYyBQYWRzIiwKLSAgICAgICAgICAiVGhlIG51bWJlciBvZiBzb3VyY2UgcGFkcyIsIDAsIEdfTUFYSU5ULCBERUZBVUxUX1BST1BfTlVNX1NSQ19QQURTLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSEFTX0NIQUlOLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJoYXMtY2hhaW4iLCAiSGFzIENoYWluIiwKLSAgICAgICAgICAiSWYgdGhlIGVsZW1lbnQgY2FuIG9wZXJhdGUgaW4gcHVzaCBtb2RlIiwgREVGQVVMVF9QUk9QX0hBU19DSEFJTiwKLSAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NJTEVOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2lsZW50IiwgIlNpbGVudCIsCi0gICAgICAgICAgIkRvbid0IHByb2R1Y2UgbGFzdF9tZXNzYWdlIGV2ZW50cyIsIERFRkFVTFRfUFJPUF9TSUxFTlQsCi0gICAgICAgICAgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgcHNwZWNfbGFzdF9tZXNzYWdlID0gZ19wYXJhbV9zcGVjX3N0cmluZyAoImxhc3QtbWVzc2FnZSIsICJMYXN0IE1lc3NhZ2UiLAotICAgICAgIlRoZSBtZXNzYWdlIGRlc2NyaWJpbmcgY3VycmVudCBzdGF0dXMiLCBERUZBVUxUX1BST1BfTEFTVF9NRVNTQUdFLAotICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xBU1RfTUVTU0FHRSwKLSAgICAgIHBzcGVjX2xhc3RfbWVzc2FnZSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUFVMTF9NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJwdWxsLW1vZGUiLCAiUHVsbCBtb2RlIiwKLSAgICAgICAgICAiQmVoYXZpb3Igb2YgdGVlIGluIHB1bGwgbW9kZSIsIEdTVF9UWVBFX1RFRV9QVUxMX01PREUsCi0gICAgICAgICAgREVGQVVMVF9QVUxMX01PREUsCi0gICAgICAgICAgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgcHNwZWNfYWxsb2NfcGFkID0gZ19wYXJhbV9zcGVjX29iamVjdCAoImFsbG9jLXBhZCIsICJBbGxvY2F0aW9uIFNyYyBQYWQiLAotICAgICAgIlRoZSBwYWQgQUxMT0NBVElPTiBxdWVyaWVzIHdpbGwgYmUgcHJveGllZCB0byAodW51c2VkKSIsIEdTVF9UWVBFX1BBRCwKLSAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUxMT0NfUEFELAotICAgICAgcHNwZWNfYWxsb2NfcGFkKTsKLQotICAvKioKLSAgICogR3N0VGVlOmFsbG93LW5vdC1saW5rZWQKLSAgICoKLSAgICogVGhpcyBwcm9wZXJ0eSBtYWtlcyBzaW5rIHBhZCByZXR1cm4gR1NUX0ZMT1dfT0sgZXZlbiBpZiB0aGVyZSBhcmUgbm8KLSAgICogc291cmNlIHBhZHMgb3IgYW55IG9mIHRoZW0gaXMgbGlua2VkLgotICAgKgotICAgKiBUaGlzIGlzIHVzZWZ1bCB0byBhdm9pZCBlcnJvcnMgd2hlbiB5b3UgaGF2ZSBhIGR5bmFtaWMgcGlwZWxpbmUgYW5kIGR1cmluZwotICAgKiBhIHJlY29ubmVjdGlvbiB5b3UgY2FuIGhhdmUgYWxsIHRoZSBwYWRzIHVubGlua2VkIG9yIHJlbW92ZWQuCi0gICAqCi0gICAqIFNpbmNlOiAxLjYKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUxMT1dfTk9UX0xJTktFRCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYWxsb3ctbm90LWxpbmtlZCIsICJBbGxvdyBub3QgbGlua2VkIiwKLSAgICAgICAgICAiUmV0dXJuIEdTVF9GTE9XX09LIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIHNvdXJjZSBwYWRzIG9yIHRoZXkgYXJlICIKLSAgICAgICAgICAiYWxsIHVubGlua2VkIiwgREVGQVVMVF9QUk9QX0FMTE9XX05PVF9MSU5LRUQsCi0gICAgICAgICAgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlRlZSBwaXBlIGZpdHRpbmciLAotICAgICAgIkdlbmVyaWMiLAotICAgICAgIjEtdG8tTiBwaXBlIGZpdHRpbmciLAotICAgICAgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+LCAiICJXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPiIpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfcmVxdWVzdF9uZXdfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3RlZV9yZWxlYXNlX3BhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVlX2luaXQgKEdzdFRlZSAqIHRlZSkKLXsKLSAgdGVlLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsICJzaW5rIik7Ci0gIHRlZS0+c2lua19tb2RlID0gR1NUX1BBRF9NT0RFX05PTkU7Ci0KLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHRlZS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVlX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHRlZS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVlX3NpbmtfcXVlcnkpKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uICh0ZWUtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3RlZV9zaW5rX2FjdGl2YXRlX21vZGUpKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHRlZS0+c2lua3BhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fbGlzdF9mdW5jdGlvbiAodGVlLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfY2hhaW5fbGlzdCkpOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUICh0ZWUtPnNpbmtwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHRlZSksIHRlZS0+c2lua3BhZCk7Ci0KLSAgdGVlLT5wYWRfaW5kZXhlcyA9IGdfaGFzaF90YWJsZV9uZXcgKE5VTEwsIE5VTEwpOwotCi0gIHRlZS0+bGFzdF9tZXNzYWdlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZWVfbm90aWZ5X2FsbG9jX3BhZCAoR3N0VGVlICogdGVlKQotewotICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopIHRlZSwgcHNwZWNfYWxsb2NfcGFkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mb3J3YXJkX3N0aWNreV9ldmVudHMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpzcmNwYWQgPSBHU1RfUEFEX0NBU1QgKHVzZXJfZGF0YSk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHJldCA9IGdzdF9wYWRfc3RvcmVfc3RpY2t5X2V2ZW50IChzcmNwYWQsICpldmVudCk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmNwYWQsICJzdG9yaW5nIHN0aWNreSBldmVudCAlcCAoJXMpIGZhaWxlZDogJXMiLCAqZXZlbnQsCi0gICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKCpldmVudCksIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0UGFkICoKLWdzdF90ZWVfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwKLSAgICBjb25zdCBnY2hhciAqIG5hbWVfdGVtcGwsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBnY2hhciAqbmFtZTsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdzdFRlZSAqdGVlOwotICBHc3RQYWRNb2RlIG1vZGU7Ci0gIGdib29sZWFuIHJlczsKLSAgZ3VpbnQgaW5kZXggPSAwOwotCi0gIHRlZSA9IEdTVF9URUUgKGVsZW1lbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgInJlcXVlc3RpbmcgcGFkIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOwotCi0gIGlmIChuYW1lX3RlbXBsICYmIHNzY2FuZiAobmFtZV90ZW1wbCwgInNyY18ldSIsICZpbmRleCkgPT0gMSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChlbGVtZW50LCAibmFtZTogJXMgKGluZGV4ICVkKSIsIG5hbWVfdGVtcGwsIGluZGV4KTsKLSAgICBpZiAoZ19oYXNoX3RhYmxlX2NvbnRhaW5zICh0ZWUtPnBhZF9pbmRleGVzLCBHVUlOVF9UT19QT0lOVEVSIChpbmRleCkpKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChlbGVtZW50LCAicGFkIG5hbWUgJXMgaXMgbm90IHVuaXF1ZSIsIG5hbWVfdGVtcGwpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IHRlZS0+bmV4dF9wYWRfaW5kZXgpCi0gICAgICB0ZWUtPm5leHRfcGFkX2luZGV4ID0gaW5kZXggKyAxOwotICB9IGVsc2UgewotICAgIGluZGV4ID0gdGVlLT5uZXh0X3BhZF9pbmRleDsKLQotICAgIHdoaWxlIChnX2hhc2hfdGFibGVfY29udGFpbnMgKHRlZS0+cGFkX2luZGV4ZXMsIEdVSU5UX1RPX1BPSU5URVIgKGluZGV4KSkpCi0gICAgICBpbmRleCsrOwotCi0gICAgdGVlLT5uZXh0X3BhZF9pbmRleCA9IGluZGV4ICsgMTsKLSAgfQotCi0gIGdfaGFzaF90YWJsZV9pbnNlcnQgKHRlZS0+cGFkX2luZGV4ZXMsIEdVSU5UX1RPX1BPSU5URVIgKGluZGV4KSwgTlVMTCk7Ci0KLSAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNyY18ldSIsIGluZGV4KTsKLQotICBzcmNwYWQgPSBHU1RfUEFEX0NBU1QgKGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfVEVFX1BBRCwKLSAgICAgICAgICAibmFtZSIsIG5hbWUsICJkaXJlY3Rpb24iLCB0ZW1wbC0+ZGlyZWN0aW9uLCAidGVtcGxhdGUiLCB0ZW1wbCwKLSAgICAgICAgICBOVUxMKSk7Ci0gIEdTVF9URUVfUEFEX0NBU1QgKHNyY3BhZCktPmluZGV4ID0gaW5kZXg7Ci0gIGdfZnJlZSAobmFtZSk7Ci0KLSAgbW9kZSA9IHRlZS0+c2lua19tb2RlOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZWUpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICAvKiB3ZSBhbHJlYWR5IGhhdmUgYSBzcmMgcGFkIGluIHB1bGwgbW9kZSwgYW5kIG91ciBwdWxsIG1vZGUgY2FuIG9ubHkgYmUKLSAgICAgICAgIFNJTkdMRSwgc28gZmFsbCB0aHJvdWdoIHRvIGFjdGl2YXRlIHRoaXMgbmV3IHBhZCBpbiBwdXNoIG1vZGUgKi8KLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVVNIOgotICAgICAgcmVzID0gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChzcmNwYWQsIEdTVF9QQURfTU9ERV9QVVNILCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoIXJlcykKLSAgICBnb3RvIGFjdGl2YXRlX2ZhaWxlZDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKHNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVlX3NyY19hY3RpdmF0ZV9tb2RlKSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzcmNwYWQsIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVlX3NyY19xdWVyeSkpOwotICBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoc3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZWVfc3JjX2dldF9yYW5nZSkpOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzcmNwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKTsKLSAgLyogRm9yd2FyZCBzdGlja3kgZXZlbnRzIHRvIHRoZSBuZXcgc3JjcGFkICovCi0gIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoICh0ZWUtPnNpbmtwYWQsIGZvcndhcmRfc3RpY2t5X2V2ZW50cywgc3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAodGVlKSwgc3JjcGFkKTsKLQotICByZXR1cm4gc3JjcGFkOwotCi0gIC8qIEVSUk9SUyAqLwotYWN0aXZhdGVfZmFpbGVkOgotICB7Ci0gICAgZ2Jvb2xlYW4gY2hhbmdlZCA9IEZBTFNFOwotCi0gICAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgIndhcm5pbmcgZmFpbGVkIHRvIGFjdGl2YXRlIHJlcXVlc3QgcGFkIik7Ci0gICAgaWYgKHRlZS0+YWxsb2NwYWQgPT0gc3JjcGFkKSB7Ci0gICAgICB0ZWUtPmFsbG9jcGFkID0gTlVMTDsKLSAgICAgIGNoYW5nZWQgPSBUUlVFOwotICAgIH0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICAgIGlmIChjaGFuZ2VkKSB7Ci0gICAgICBnc3RfdGVlX25vdGlmeV9hbGxvY19wYWQgKHRlZSk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVlX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotICBHc3RUZWUgKnRlZTsKLSAgZ2Jvb2xlYW4gY2hhbmdlZCA9IEZBTFNFOwotICBndWludCBpbmRleDsKLQotICB0ZWUgPSBHU1RfVEVFIChlbGVtZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0ZWUsICJyZWxlYXNpbmcgcGFkIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOwotICBpbmRleCA9IEdTVF9URUVfUEFEX0NBU1QgKHBhZCktPmluZGV4OwotICAvKiBtYXJrIHRoZSBwYWQgYXMgcmVtb3ZlZCBzbyB0aGF0IGZ1dHVyZSBwYWRfYWxsb2MgZmFpbHMgd2l0aCBOT1RfTElOS0VELiAqLwotICBHU1RfVEVFX1BBRF9DQVNUIChwYWQpLT5yZW1vdmVkID0gVFJVRTsKLSAgaWYgKHRlZS0+YWxsb2NwYWQgPT0gcGFkKSB7Ci0gICAgdGVlLT5hbGxvY3BhZCA9IE5VTEw7Ci0gICAgY2hhbmdlZCA9IFRSVUU7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci0KLSAgZ3N0X29iamVjdF9yZWYgKHBhZCk7Ci0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHRlZSksIHBhZCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIEZBTFNFKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotCi0gIGlmIChjaGFuZ2VkKSB7Ci0gICAgZ3N0X3RlZV9ub3RpZnlfYWxsb2NfcGFkICh0ZWUpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOwotICBnX2hhc2hfdGFibGVfcmVtb3ZlICh0ZWUtPnBhZF9pbmRleGVzLCBHVUlOVF9UT19QT0lOVEVSIChpbmRleCkpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFRlZSAqdGVlID0gR1NUX1RFRSAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9IQVNfQ0hBSU46Ci0gICAgICB0ZWUtPmhhc19jaGFpbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUxFTlQ6Ci0gICAgICB0ZWUtPnNpbGVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QVUxMX01PREU6Ci0gICAgICB0ZWUtPnB1bGxfbW9kZSA9IChHc3RUZWVQdWxsTW9kZSkgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FMTE9DX1BBRDoKLSAgICB7Ci0gICAgICBHc3RQYWQgKnBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICAgICAgaWYgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpID09IEdTVF9PQkpFQ1RfQ0FTVCAob2JqZWN0KSkKLSAgICAgICAgdGVlLT5hbGxvY3BhZCA9IHBhZDsKLSAgICAgIGVsc2UKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmplY3QsICJUcmllZCB0byBzZXQgYWxsb2MgcGFkICVzIHdoaWNoIgotICAgICAgICAgICAgIiBpcyBub3QgbXkgcGFkIiwgR1NUX09CSkVDVF9OQU1FIChwYWQpKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9BTExPV19OT1RfTElOS0VEOgotICAgICAgdGVlLT5hbGxvd19ub3RfbGlua2VkID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZWVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFRlZSAqdGVlID0gR1NUX1RFRSAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9OVU1fU1JDX1BBRFM6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBHU1RfRUxFTUVOVCAodGVlKS0+bnVtc3JjcGFkcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSEFTX0NIQUlOOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHRlZS0+aGFzX2NoYWluKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUxFTlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgdGVlLT5zaWxlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xBU1RfTUVTU0FHRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHRlZS0+bGFzdF9tZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QVUxMX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgdGVlLT5wdWxsX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FMTE9DX1BBRDoKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHRlZS0+YWxsb2NwYWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FMTE9XX05PVF9MSU5LRUQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgdGVlLT5hbGxvd19ub3RfbGlua2VkKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3RlZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3RlZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RlZV9kb19tZXNzYWdlIChHc3RUZWUgKiB0ZWUsIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgZGF0YSwgZ2Jvb2xlYW4gaXNfbGlzdCkKLXsKLSAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOwotICBnX2ZyZWUgKHRlZS0+bGFzdF9tZXNzYWdlKTsKLSAgaWYgKGlzX2xpc3QpIHsKLSAgICB0ZWUtPmxhc3RfbWVzc2FnZSA9Ci0gICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImNoYWluLWxpc3QgICAqKioqKioqICglczolcyl0ICVwIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBkYXRhKTsKLSAgfSBlbHNlIHsKLSAgICB0ZWUtPmxhc3RfbWVzc2FnZSA9Ci0gICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImNoYWluICAgICAgICAqKioqKioqICglczolcyl0ICglIiBHX0dTSVpFX0ZPUk1BVAotICAgICAgICAiIGJ5dGVzLCAlIiBHX0dVSU5UNjRfRk9STUFUICIpICVwIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChkYXRhKSwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGRhdGEpLCBkYXRhKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKLQotICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMgKChHT2JqZWN0ICopIHRlZSwgcHNwZWNfbGFzdF9tZXNzYWdlKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF90ZWVfZG9fcHVzaCAoR3N0VGVlICogdGVlLCBHc3RQYWQgKiBwYWQsIGdwb2ludGVyIGRhdGEsIGdib29sZWFuIGlzX2xpc3QpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotCi0gIC8qIFB1c2ggKi8KLSAgaWYgKHBhZCA9PSB0ZWUtPnB1bGxfcGFkKSB7Ci0gICAgLyogZG9uJ3QgcHVzaCBvbiB0aGUgcGFkIHdlJ3JlIHB1bGxpbmcgZnJvbSAqLwotICAgIHJlcyA9IEdTVF9GTE9XX09LOwotICB9IGVsc2UgaWYgKGlzX2xpc3QpIHsKLSAgICByZXMgPQotICAgICAgICBnc3RfcGFkX3B1c2hfbGlzdCAocGFkLAotICAgICAgICBnc3RfYnVmZmVyX2xpc3RfcmVmIChHU1RfQlVGRkVSX0xJU1RfQ0FTVCAoZGF0YSkpKTsKLSAgfSBlbHNlIHsKLSAgICByZXMgPSBnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9yZWYgKEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSkpKTsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYXJfcGFkcyAoR3N0UGFkICogcGFkLCBHc3RUZWUgKiB0ZWUpCi17Ci0gIEdTVF9URUVfUEFEX0NBU1QgKHBhZCktPnB1c2hlZCA9IEZBTFNFOwotICBHU1RfVEVFX1BBRF9DQVNUIChwYWQpLT5yZXN1bHQgPSBHU1RfRkxPV19OT1RfTElOS0VEOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3RlZV9oYW5kbGVfZGF0YSAoR3N0VGVlICogdGVlLCBncG9pbnRlciBkYXRhLCBnYm9vbGVhbiBpc19saXN0KQotewotICBHTGlzdCAqcGFkczsKLSAgZ3VpbnQzMiBjb29raWU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0LCBjcmV0OwotCi0gIGlmIChHX1VOTElLRUxZICghdGVlLT5zaWxlbnQpKQotICAgIGdzdF90ZWVfZG9fbWVzc2FnZSAodGVlLCB0ZWUtPnNpbmtwYWQsIGRhdGEsIGlzX2xpc3QpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodGVlKTsKLSAgcGFkcyA9IEdTVF9FTEVNRU5UX0NBU1QgKHRlZSktPnNyY3BhZHM7Ci0KLSAgLyogc3BlY2lhbCBjYXNlIGZvciB6ZXJvIHBhZHMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFwYWRzKSkKLSAgICBnb3RvIG5vX3BhZHM7Ci0KLSAgLyogc3BlY2lhbCBjYXNlIGZvciBqdXN0IG9uZSBwYWQgdGhhdCBhdm9pZHMgcmVmZmluZyB0aGUgYnVmZmVyICovCi0gIGlmICghcGFkcy0+bmV4dCkgewotICAgIEdzdFBhZCAqcGFkID0gR1NUX1BBRF9DQVNUIChwYWRzLT5kYXRhKTsKLQotICAgIC8qIEtlZXAgYW5vdGhlciByZWYgYXJvdW5kLCBhIHBhZCBwcm9iZQotICAgICAqIG1pZ2h0IHJlbGVhc2UgYW5kIGRlc3Ryb3kgdGhlIHBhZCAqLwotICAgIGdzdF9vYmplY3RfcmVmIChwYWQpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZWUpOwotCi0gICAgaWYgKHBhZCA9PSB0ZWUtPnB1bGxfcGFkKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICB9IGVsc2UgaWYgKGlzX2xpc3QpIHsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9saXN0IChwYWQsIEdTVF9CVUZGRVJfTElTVF9DQVNUIChkYXRhKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaCAocGFkLCBHU1RfQlVGRkVSX0NBU1QgKGRhdGEpKTsKLSAgICB9Ci0KLSAgICBpZiAoR1NUX1RFRV9QQURfQ0FTVCAocGFkKS0+cmVtb3ZlZCkKLSAgICAgIHJldCA9IEdTVF9GTE9XX05PVF9MSU5LRUQ7Ci0KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQgJiYgdGVlLT5hbGxvd19ub3RfbGlua2VkKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICB9Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotCi0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8qIG1hcmsgYWxsIHBhZHMgYXMgJ25vdCBwdXNoZWQgb24geWV0JyAqLwotICBnX2xpc3RfZm9yZWFjaCAocGFkcywgKEdGdW5jKSBjbGVhcl9wYWRzLCB0ZWUpOwotCi1yZXN0YXJ0OgotICBpZiAodGVlLT5hbGxvd19ub3RfbGlua2VkKSB7Ci0gICAgY3JldCA9IEdTVF9GTE9XX09LOwotICB9IGVsc2UgewotICAgIGNyZXQgPSBHU1RfRkxPV19OT1RfTElOS0VEOwotICB9Ci0gIHBhZHMgPSBHU1RfRUxFTUVOVF9DQVNUICh0ZWUpLT5zcmNwYWRzOwotICBjb29raWUgPSBHU1RfRUxFTUVOVF9DQVNUICh0ZWUpLT5wYWRzX2Nvb2tpZTsKLQotICB3aGlsZSAocGFkcykgewotICAgIEdzdFBhZCAqcGFkOwotCi0gICAgcGFkID0gR1NUX1BBRF9DQVNUIChwYWRzLT5kYXRhKTsKLQotICAgIGlmIChHX0xJS0VMWSAoIUdTVF9URUVfUEFEX0NBU1QgKHBhZCktPnB1c2hlZCkpIHsKLSAgICAgIC8qIG5vdCB5ZXQgcHVzaGVkLCByZWxlYXNlIGxvY2sgYW5kIHN0YXJ0IHB1c2hpbmcgKi8KLSAgICAgIGdzdF9vYmplY3RfcmVmIChwYWQpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJTdGFydGluZyB0byBwdXNoICVzICVwIiwKLSAgICAgICAgICBpc19saXN0ID8gImxpc3QiIDogImJ1ZmZlciIsIGRhdGEpOwotCi0gICAgICByZXQgPSBnc3RfdGVlX2RvX3B1c2ggKHRlZSwgcGFkLCBkYXRhLCBpc19saXN0KTsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIlB1c2hpbmcgaXRlbSAlcCB5aWVsZGVkIHJlc3VsdCAlcyIsIGRhdGEsCi0gICAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7Ci0gICAgICAvKiBrZWVwIHRyYWNrIG9mIHdoaWNoIHBhZCB3ZSBwdXNoZWQgYW5kIHRoZSByZXN1bHQgdmFsdWUgKi8KLSAgICAgIEdTVF9URUVfUEFEX0NBU1QgKHBhZCktPnB1c2hlZCA9IFRSVUU7Ci0gICAgICBHU1RfVEVFX1BBRF9DQVNUIChwYWQpLT5yZXN1bHQgPSByZXQ7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICAgICAgcGFkID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgLyogYWxyZWFkeSBwdXNoZWQsIHVzZSBwcmV2aW91cyByZXR1cm4gdmFsdWUgKi8KLSAgICAgIHJldCA9IEdTVF9URUVfUEFEX0NBU1QgKHBhZCktPnJlc3VsdDsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJwYWQgYWxyZWFkeSBwdXNoZWQgd2l0aCAlcyIsCi0gICAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIH0KLQotICAgIC8qIGJlZm9yZSB3ZSBnbyBjb21iaW5pbmcgdGhlIHJldHVybiB2YWx1ZSwgY2hlY2sgaWYgdGhlIHBhZCBsaXN0IGlzIHN0aWxsCi0gICAgICogdGhlIHNhbWUuIEl0IGNvdWxkIGJlIHBvc3NpYmxlIHRoYXQgdGhlIHBhZCB3ZSBqdXN0IHB1c2hlZCB3YXMgcmVtb3ZlZAotICAgICAqIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGl0IG5vdCB2YWxpZCBhbnltb3JlICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9FTEVNRU5UX0NBU1QgKHRlZSktPnBhZHNfY29va2llICE9IGNvb2tpZSkpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUICh0ZWUsICJwYWQgbGlzdCBjaGFuZ2VkIik7Ci0gICAgICAvKiB0aGUgbGlzdCBvZiBwYWRzIGNoYW5nZWQsIHJlc3RhcnQgaXRlcmF0aW9uLiBQYWRzIHRoYXQgd2UgYWxyZWFkeQotICAgICAgICogcHVzaGVkIG9uIGFuZCBhcmUgc3RpbGwgaW4gdGhlIG5ldyBsaXN0LCB3aWxsIG5vdCBiZSBwdXNoZWQgb24KLSAgICAgICAqIGFnYWluLiAqLwotICAgICAgZ290byByZXN0YXJ0OwotICAgIH0KLQotICAgIC8qIHN0b3AgcHVzaGluZyBtb3JlIGJ1ZmZlcnMgd2hlbiB3ZSBoYXZlIGEgZmF0YWwgZXJyb3IgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxPV19OT1RfTElOS0VEKSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAvKiBrZWVwIGFsbCBvdGhlciByZXR1cm4gdmFsdWVzLCBvdmVyd3JpdGluZyB0aGUgcHJldmlvdXMgb25lLiAqLwotICAgIGlmIChHX0xJS0VMWSAocmV0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAodGVlLCAiUmVwbGFjaW5nIHJldCB2YWwgJWQgd2l0aCAlZCIsIGNyZXQsIHJldCk7Ci0gICAgICBjcmV0ID0gcmV0OwotICAgIH0KLSAgICBwYWRzID0gZ19saXN0X25leHQgKHBhZHMpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZWUpOwotCi0gIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLQotICAvKiBubyBuZWVkIHRvIHVuc2V0IGd2YWx1ZSAqLwotICByZXR1cm4gY3JldDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3BhZHM6Ci0gIHsKLSAgICBpZiAodGVlLT5hbGxvd19ub3RfbGlua2VkKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0ZWUsICJ0aGVyZSBhcmUgbm8gcGFkcywgZHJvcHBpbmcgJXMiLAotICAgICAgICAgIGlzX2xpc3QgPyAiYnVmZmVyLWxpc3QiIDogImJ1ZmZlciIpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgInRoZXJlIGFyZSBubyBwYWRzLCByZXR1cm4gbm90LWxpbmtlZCIpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKLSAgICB9Ci0gICAgZ290byBlbmQ7Ci0gIH0KLWVycm9yOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodGVlLCAicmVjZWl2ZWQgZXJyb3IgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLWVuZDoKLSAgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0ZWUpOwotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGRhdGEpKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdGVlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0VGVlICp0ZWU7Ci0KLSAgdGVlID0gR1NUX1RFRV9DQVNUIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRlZSwgInJlY2VpdmVkIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7Ci0KLSAgcmVzID0gZ3N0X3RlZV9oYW5kbGVfZGF0YSAodGVlLCBidWZmZXIsIEZBTFNFKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0ZWUsICJoYW5kbGVkIGJ1ZmZlciAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3RlZV9jaGFpbl9saXN0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyTGlzdCAqIGxpc3QpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RUZWUgKnRlZTsKLQotICB0ZWUgPSBHU1RfVEVFX0NBU1QgKHBhcmVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodGVlLCAicmVjZWl2ZWQgbGlzdCAlcCIsIGxpc3QpOwotCi0gIHJlcyA9IGdzdF90ZWVfaGFuZGxlX2RhdGEgKHRlZSwgbGlzdCwgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodGVlLCAiaGFuZGxlZCBsaXN0ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlcykpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3RlZV9zaW5rX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RQYWRNb2RlIG1vZGUsCi0gICAgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdFRlZSAqdGVlOwotCi0gIHRlZSA9IEdTVF9URUUgKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICB7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHRlZSk7Ci0gICAgICB0ZWUtPnNpbmtfbW9kZSA9IGFjdGl2ZSA/IG1vZGUgOiBHU1RfUEFEX01PREVfTk9ORTsKLQotICAgICAgaWYgKGFjdGl2ZSAmJiAhdGVlLT5oYXNfY2hhaW4pCi0gICAgICAgIGdvdG8gbm9fY2hhaW47Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2NoYWluOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci0gICAgR1NUX0lORk9fT0JKRUNUICh0ZWUsCi0gICAgICAgICJUZWUgY2Fubm90IG9wZXJhdGUgaW4gcHVzaCBtb2RlIHdpdGggaGFzLWNoYWluPT1GQUxTRSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90ZWVfc3JjX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RQYWRNb2RlIG1vZGUsCi0gICAgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBHc3RUZWUgKnRlZTsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0KLSAgdGVlID0gR1NUX1RFRSAocGFyZW50KTsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVUxMOgotICAgIHsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAodGVlKTsKLQotICAgICAgaWYgKHRlZS0+cHVsbF9tb2RlID09IEdTVF9URUVfUFVMTF9NT0RFX05FVkVSKQotICAgICAgICBnb3RvIGNhbm5vdF9wdWxsOwotCi0gICAgICBpZiAodGVlLT5wdWxsX21vZGUgPT0gR1NUX1RFRV9QVUxMX01PREVfU0lOR0xFICYmIGFjdGl2ZSAmJiB0ZWUtPnB1bGxfcGFkKQotICAgICAgICBnb3RvIGNhbm5vdF9wdWxsX211bHRpcGxlX3NyY3M7Ci0KLSAgICAgIHNpbmtwYWQgPSBnc3Rfb2JqZWN0X3JlZiAodGVlLT5zaW5rcGFkKTsKLQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci0KLSAgICAgIHJlcyA9IGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoc2lua3BhZCwgR1NUX1BBRF9NT0RFX1BVTEwsIGFjdGl2ZSk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAgICAgaWYgKCFyZXMpCi0gICAgICAgIGdvdG8gc2lua19hY3RpdmF0ZV9mYWlsZWQ7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAodGVlKTsKLSAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgaWYgKHRlZS0+cHVsbF9tb2RlID09IEdTVF9URUVfUFVMTF9NT0RFX1NJTkdMRSkKLSAgICAgICAgICB0ZWUtPnB1bGxfcGFkID0gcGFkOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBhZCA9PSB0ZWUtPnB1bGxfcGFkKQotICAgICAgICAgIHRlZS0+cHVsbF9wYWQgPSBOVUxMOwotICAgICAgfQotICAgICAgdGVlLT5zaW5rX21vZGUgPSAoYWN0aXZlID8gR1NUX1BBRF9NT0RFX1BVTEwgOiBHU1RfUEFEX01PREVfTk9ORSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWNhbm5vdF9wdWxsOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci0gICAgR1NUX0lORk9fT0JKRUNUICh0ZWUsICJDYW5ub3QgYWN0aXZhdGUgaW4gcHVsbCBtb2RlLCBwdWxsLW1vZGUgIgotICAgICAgICAic2V0IHRvIE5FVkVSIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1jYW5ub3RfcHVsbF9tdWx0aXBsZV9zcmNzOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci0gICAgR1NUX0lORk9fT0JKRUNUICh0ZWUsICJDYW5ub3QgYWN0aXZhdGUgbXVsdGlwbGUgc3JjIHBhZHMgaW4gcHVsbCBtb2RlLCAiCi0gICAgICAgICJwdWxsLW1vZGUgc2V0IHRvIFNJTkdMRSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotc2lua19hY3RpdmF0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHRlZSwgIkZhaWxlZCB0byAlc2FjdGl2YXRlIHNpbmsgcGFkIGluIHB1bGwgbW9kZSIsCi0gICAgICAgIGFjdGl2ZSA/ICIiIDogImRlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3RlZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RUZWUgKnRlZTsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0KLSAgdGVlID0gR1NUX1RFRSAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9TQ0hFRFVMSU5HOgotICAgIHsKLSAgICAgIGdib29sZWFuIHB1bGxfbW9kZTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLICh0ZWUpOwotICAgICAgcHVsbF9tb2RlID0gVFJVRTsKLSAgICAgIGlmICh0ZWUtPnB1bGxfbW9kZSA9PSBHU1RfVEVFX1BVTExfTU9ERV9ORVZFUikgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHRlZSwgIkNhbm5vdCBhY3RpdmF0ZSBpbiBwdWxsIG1vZGUsIHB1bGwtbW9kZSAiCi0gICAgICAgICAgICAic2V0IHRvIE5FVkVSIik7Ci0gICAgICAgIHB1bGxfbW9kZSA9IEZBTFNFOwotICAgICAgfSBlbHNlIGlmICh0ZWUtPnB1bGxfbW9kZSA9PSBHU1RfVEVFX1BVTExfTU9ERV9TSU5HTEUgJiYgdGVlLT5wdWxsX3BhZCkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHRlZSwgIkNhbm5vdCBhY3RpdmF0ZSBtdWx0aXBsZSBzcmMgcGFkcyBpbiBwdWxsIG1vZGUsICIKLSAgICAgICAgICAgICJwdWxsLW1vZGUgc2V0IHRvIFNJTkdMRSIpOwotICAgICAgICBwdWxsX21vZGUgPSBGQUxTRTsKLSAgICAgIH0KLQotICAgICAgc2lua3BhZCA9IGdzdF9vYmplY3RfcmVmICh0ZWUtPnNpbmtwYWQpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlZSk7Ci0KLSAgICAgIGlmIChwdWxsX21vZGUpIHsKLSAgICAgICAgLyogYXNrIHBlZXIgaWYgd2UgY2FuIG9wZXJhdGUgaW4gcHVsbCBtb2RlICovCi0gICAgICAgIHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAoc2lua3BhZCwgcXVlcnkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVlX3B1c2hfZW9zIChjb25zdCBHVmFsdWUgKiB2cGFkLCBHc3RUZWUgKiB0ZWUpCi17Ci0gIEdzdFBhZCAqcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2cGFkKTsKLQotICBpZiAocGFkICE9IHRlZS0+cHVsbF9wYWQpCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZWVfcHVsbF9lb3MgKEdzdFRlZSAqIHRlZSkKLXsKLSAgR3N0SXRlcmF0b3IgKml0ZXI7Ci0KLSAgaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMgKEdTVF9FTEVNRU5UICh0ZWUpKTsKLSAgd2hpbGUgKGdzdF9pdGVyYXRvcl9mb3JlYWNoIChpdGVyLAotICAgICAgICAgIChHc3RJdGVyYXRvckZvcmVhY2hGdW5jdGlvbikgZ3N0X3RlZV9wdXNoX2VvcywKLSAgICAgICAgICB0ZWUpID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCi0gICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF90ZWVfc3JjX2dldF9yYW5nZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIGd1aW50NjQgb2Zmc2V0LAotICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICoqIGJ1ZikKLXsKLSAgR3N0VGVlICp0ZWU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHRlZSA9IEdTVF9URUUgKHBhcmVudCk7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlICh0ZWUtPnNpbmtwYWQsIG9mZnNldCwgbGVuZ3RoLCBidWYpOwotCi0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0ID0gZ3N0X3RlZV9oYW5kbGVfZGF0YSAodGVlLCBnc3RfYnVmZmVyX3JlZiAoKmJ1ZiksIEZBTFNFKTsKLSAgZWxzZSBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykKLSAgICBnc3RfdGVlX3B1bGxfZW9zICh0ZWUpOwotCi0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3R0ZWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRjZTMxMC4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHRlZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdHRlZS5oOiBIZWFkZXIgZm9yIEdzdFRlZSBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1RFRV9IX18KLSNkZWZpbmUgX19HU1RfVEVFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLQotI2RlZmluZSBHU1RfVFlQRV9URUUgXAotICAoZ3N0X3RlZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVEVFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVEVFLEdzdFRlZSkpCi0jZGVmaW5lIEdTVF9URUVfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVEVFLEdzdFRlZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1RFRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1RFRSkpCi0jZGVmaW5lIEdTVF9JU19URUVfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfVEVFKSkKLSNkZWZpbmUgR1NUX1RFRV9DQVNUKG9iaikgKChHc3RUZWUqKSBvYmopCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUZWUgCQlHc3RUZWU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VGVlQ2xhc3MgCUdzdFRlZUNsYXNzOwotCi0vKioKLSAqIEdzdFRlZVB1bGxNb2RlOgotICogQEdTVF9URUVfUFVMTF9NT0RFX05FVkVSOiBOZXZlciBhY3RpdmF0ZSBpbiBwdWxsIG1vZGUuCi0gKiBAR1NUX1RFRV9QVUxMX01PREVfU0lOR0xFOiBPbmx5IG9uZSBzcmMgcGFkIGNhbiBiZSBhY3RpdmUgaW4gcHVsbCBtb2RlLgotICoKLSAqIFRoZSBkaWZmZXJlbnQgd2F5cyB0aGF0IHRlZSBjYW4gYmVoYXZlIGluIHB1bGwgbW9kZS4gQFRFRV9QVUxMX01PREVfTkVWRVIKLSAqIGRpc2FibGVzIHB1bGwgbW9kZS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1RFRV9QVUxMX01PREVfTkVWRVIsCi0gIEdTVF9URUVfUFVMTF9NT0RFX1NJTkdMRSwKLX0gR3N0VGVlUHVsbE1vZGU7Ci0KLS8qKgotICogR3N0VGVlOgotICoKLSAqIE9wYXF1ZSAjR3N0VGVlIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdFRlZSB7Ci0gIEdzdEVsZW1lbnQgICAgICBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RQYWQgICAgICAgICAqc2lua3BhZDsKLSAgR3N0UGFkICAgICAgICAgKmFsbG9jcGFkOwotCi0gIEdIYXNoVGFibGUgICAgICpwYWRfaW5kZXhlczsKLSAgZ3VpbnQgICAgICAgICAgIG5leHRfcGFkX2luZGV4OwotCi0gIGdib29sZWFuICAgICAgICBoYXNfY2hhaW47Ci0gIGdib29sZWFuICAgICAgICBzaWxlbnQ7Ci0gIGdjaGFyICAgICAgICAgICpsYXN0X21lc3NhZ2U7Ci0KLSAgR3N0UGFkTW9kZSAgICAgIHNpbmtfbW9kZTsKLSAgR3N0VGVlUHVsbE1vZGUgIHB1bGxfbW9kZTsKLSAgR3N0UGFkICAgICAgICAgKnB1bGxfcGFkOwotCi0gIGdib29sZWFuICAgICAgICBhbGxvd19ub3RfbGlua2VkOwotfTsKLQotc3RydWN0IF9Hc3RUZWVDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUJZ3N0X3RlZV9nZXRfdHlwZQkodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9URUVfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYzZGNhNy4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzOSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLSAqCi0gKiBnc3R0eXBlZmluZGVsZW1lbnQuYzogZWxlbWVudCB0aGF0IGRldGVjdHMgdHlwZSBvZiBzdHJlYW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtdHlwZWZpbmQKLSAqCi0gKiBEZXRlcm1pbmVzIHRoZSBtZWRpYS10eXBlIG9mIGEgc3RyZWFtLiBJdCBhcHBsaWVzIHR5cGVmaW5kIGZ1bmN0aW9ucyBpbiB0aGUKLSAqIG9yZGVyIG9mIHRoZWlyIHJhbmsuIE9uY2UgdGhlIHR5cGUgaGFzIGJlZW4gZGV0ZWN0ZWQgaXQgc2V0cyBpdHMgc3JjIHBhZCBjYXBzCi0gKiB0byB0aGUgZm91bmQgbWVkaWEgdHlwZS4KLSAqCi0gKiBXaGVuZXZlciBhIHR5cGUgaXMgZm91bmQgdGhlICNHc3RUeXBlRmluZEVsZW1lbnQ6OmhhdmUtdHlwZSBzaWduYWwgaXMKLSAqIGVtaXR0ZWQsIGVpdGhlciBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIG9yIHRoZSBhcHBsaWNhdGlvbiB0aHJlYWQKLSAqICh0aGUgbGF0dGVyIG1heSBoYXBwZW4gd2hlbiB0eXBlZmluZGluZyBpcyBkb25lIHB1bGwtYmFzZWQgZnJvbSB0aGUKLSAqIHN0YXRlIGNoYW5nZSBmdW5jdGlvbikuCi0gKgotICogUGx1Z2lucyBjYW4gcmVnaXN0ZXIgY3VzdG9tIHR5cGVmaW5kZXJzIGJ5IHVzaW5nICNHc3RUeXBlRmluZEZhY3RvcnkuCi0gKi8KLQotLyogRklYTUU6IG5lZWQgYSBiZXR0ZXIgc29sdXRpb24gZm9yIG5vbi1zZWVrYWJsZSBzdHJlYW1zICovCi0KLS8qIHdheSBvZiBvcGVyYXRpb246Ci0gKiAxKSBnZXQgYSBsaXN0IG9mIGFsbCB0eXBlZmluZCBmdW5jdGlvbnMgc29ydGVkIGJlc3QgdG8gd29yc3QKLSAqIDIpIGlmIGFsbCBlbGVtZW50cyBoYXZlIGJlZW4gY2FsbGVkIHdpdGggYWxsIHJlcXVlc3RlZCBkYXRhIGdvdG8gOAotICogMykgY2FsbCBhbGwgZnVuY3Rpb25zIG9uY2Ugd2l0aCBhbGwgYXZhaWxhYmxlIGRhdGEKLSAqIDQpIGlmIGEgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlID49IFBST1BfTUFYSU1VTSBnb3RvIDggKG5ldmVyIGltcGxlbWVudGVkKSkKLSAqIDUpIGFsbCBmdW5jdGlvbnMgd2l0aCBhIHJlc3VsdCA+IFBST1BfTUlOSU1VTSBvciBmdW5jdGlvbnMgdGhhdCBkaWQgbm90IGdldAotICogICAgYWxsIHJlcXVlc3RlZCBkYXRhICh3aGVyZSBwZWVrIHJldHVybmVkIE5VTEwpIHN0YXkgaW4gbGlzdAotICogNikgc2VlayB0byByZXF1ZXN0ZWQgb2Zmc2V0IG9mIGJlc3QgZnVuY3Rpb24gdGhhdCBzdGlsbCBoYXMgb3BlbiBkYXRhCi0gKiAgICByZXF1ZXN0cwotICogNykgZ290byAyCi0gKiA4KSB0YWtlIGJlc3QgYXZhaWxhYmxlIHJlc3VsdCBhbmQgdXNlIGl0cyBjYXBzCi0gKgotICogVGhlIGVsZW1lbnQgaGFzIHR3byBzY2hlZHVsaW5nIG1vZGVzOgotICoKLSAqIDEpIGNoYWluIGJhc2VkLCBpdCB3aWxsIGNvbGxlY3QgYnVmZmVycyBhbmQgcnVuIHRoZSB0eXBlZmluZCBmdW5jdGlvbiBvbgotICogICAgdGhlIGJ1ZmZlciB1bnRpbCBzb21ldGhpbmcgaXMgZm91bmQuCi0gKiAyKSBnZXRyYW5nZSBiYXNlZCwgaXQgd2lsbCBwcm94eSB0aGUgZ2V0cmFuZ2UgZnVuY3Rpb24gdG8gdGhlIHNpbmtwYWQuIEl0Ci0gKiAgICBpcyBhc3N1bWVkIHRoYXQgdGhlIHBlZXIgZWxlbWVudCBpcyBoYXBweSB3aXRoIHdoYXRldmVyIGZvcm1hdCB3ZQotICogICAgZXZlbnR1YWxseSByZWFkLgotICoKLSAqIEJ5IGRlZmF1bHQgaXQgdHJpZXMgdG8gZG8gcHVsbCBiYXNlZCB0eXBlZmluZGluZyAodGhpcyBhdm9pZHMgam9pbmluZwotICogcmVjZWl2ZWQgYnVmZmVycyBhbmQgaG9sZGluZyB0aGVtIGJhY2sgaW4gc3RvcmUuKQotICoKLSAqIFdoZW4gdGhlIGVsZW1lbnQgaGFzIG5vIGNvbm5lY3RlZCBzcmNwYWQsIGFuZCB0aGUgc2lua3BhZCBjYW4gb3BlcmF0ZSBpbgotICogZ2V0cmFuZ2UgYmFzZWQgbW9kZSwgdGhlIGVsZW1lbnQgc3RhcnRzIGl0cyBvd24gdGFzayB0byBmaWd1cmUgb3V0IHRoZQotICogdHlwZSBvZiB0aGUgc3RyZWFtLgotICoKLSAqIE1vc3Qgb2YgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBpcyBpbiBsaWJzL2dzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmMuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3QvZ3N0X3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgImdzdHR5cGVmaW5kZWxlbWVudC5oIgotI2luY2x1ZGUgImdzdC9nc3QtaTE4bi1saWIuaCIKLSNpbmNsdWRlICJnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oIgotCi0jaW5jbHVkZSA8Z3N0L2dzdHR5cGVmaW5kLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHV0aWxzLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGVycm9yLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZGVidWcKLQotLyogZ2VuZXJpYyB0ZW1wbGF0ZXMgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB0eXBlX2ZpbmRfZWxlbWVudF9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdHlwZV9maW5kX2VsZW1lbnRfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotLyogUmVxdWlyZSBhdCBsZWFzdCAya0Igb2YgZGF0YSBiZWZvcmUgd2UgYXR0ZW1wdCB0eXBlZmluZGluZyBpbiBjaGFpbi1tb2RlLgotICogMTI4a0IgaXMgbWFzc2l2ZSBvdmVya2lsbCBmb3IgdGhlIG1heGltdW0sIGJ1dCBkb2Vzbid0IGRvIGFueSBoYXJtICovCi0jZGVmaW5lIFRZUEVfRklORF9NSU5fU0laRSAgICgyKjEwMjQpCi0jZGVmaW5lIFRZUEVfRklORF9NQVhfU0laRSAoMTI4KjEwMjQpCi0KLS8qIFR5cGVGaW5kIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgSEFWRV9UWVBFLAotICBMQVNUX1NJR05BTAotfTsKLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0NBUFMsCi0gIFBST1BfTUlOSU1VTSwKLSAgUFJPUF9GT1JDRV9DQVBTLAotICBQUk9QX0xBU1QKLX07Ci1lbnVtCi17Ci0gIE1PREVfTk9STUFMLCAgICAgICAgICAgICAgICAgIC8qIGFjdCBhcyBpZGVudGl0eSAqLwotICBNT0RFX1RZUEVGSU5ELCAgICAgICAgICAgICAgICAvKiBkbyB0eXBlZmluZGluZyAgKi8KLSAgTU9ERV9FUlJPUiAgICAgICAgICAgICAgICAgICAgLyogaGFkIGZhdGFsIGVycm9yICovCi19OwotCi0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfZGVidWcsICJ0eXBlZmluZCIsICAgICAgICAgICBcCi0gICAgICAgIEdTVF9ERUJVR19CR19ZRUxMT1cgfCBHU1RfREVCVUdfRkdfR1JFRU4sICJ0eXBlIGZpbmRpbmcgZWxlbWVudCIpOwotI2RlZmluZSBnc3RfdHlwZV9maW5kX2VsZW1lbnRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFR5cGVGaW5kRWxlbWVudCwgZ3N0X3R5cGVfZmluZF9lbGVtZW50LAotICAgIEdTVF9UWVBFX0VMRU1FTlQsIF9kb19pbml0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3R5cGVfZmluZF9lbGVtZW50X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdHlwZV9maW5kX2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zZXRjYXBzIChHc3RUeXBlRmluZEVsZW1lbnQgKiB0eXBlZmluZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4gKEdzdFBhZCAqIHNpbmtwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldHJhbmdlIChHc3RQYWQgKiBzcmNwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBndWludDY0IG9mZnNldCwgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGVfc2luayAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlX3NpbmtfbW9kZSAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIGdib29sZWFuIGdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZV9zcmNfbW9kZSAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbl9kb190eXBlZmluZGluZyAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQsCi0gICAgZ2Jvb2xlYW4gY2hlY2tfYXZhaWwsIGdib29sZWFuIGF0X2Vvcyk7Ci1zdGF0aWMgdm9pZCBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2VuZF9jYWNoZWRfZXZlbnRzIChHc3RUeXBlRmluZEVsZW1lbnQgKgotICAgIHR5cGVmaW5kKTsKLQotc3RhdGljIHZvaWQgZ3N0X3R5cGVfZmluZF9lbGVtZW50X2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBndWludCBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotc3RhdGljIHZvaWQKLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9oYXZlX3R5cGUgKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kLAotICAgIGd1aW50IHByb2JhYmlsaXR5LCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotCi0gIGdfYXNzZXJ0IChjYXBzICE9IE5VTEwpOwotCi0gIEdTVF9JTkZPX09CSkVDVCAodHlwZWZpbmQsICJmb3VuZCBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIsIHByb2JhYmlsaXR5PSV1IiwKLSAgICAgIGNhcHMsIHByb2JhYmlsaXR5KTsKLQotICAvKiBEbyBub3RoaW5nIGlmIGRvd25zdHJlYW0gaXMgcHVsbGluZyBmcm9tIHVzICovCi0gIGlmIChHU1RfUEFEX01PREUgKHR5cGVmaW5kLT5zcmMpID09IEdTVF9QQURfTU9ERV9QVUxMKQotICAgIHJldHVybjsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKLQotICAvKiBOb3cgYWN0dWFsbHkgc2VuZCB0aGUgQ0FQUyBldmVudCBkb3duc3RyZWFtLgotICAgKgotICAgKiBUcnkgdG8gZGlyZWN0bHkgc2VuZCB0aGUgQ0FQUyBldmVudCBkb3duc3RyZWFtIHRoYXQgd2UgY3JlYXRlZCBpbgotICAgKiBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZW1pdF9oYXZlX3R5cGUoKSBpZiBpdCBpcyBzdGlsbCB0aGVyZSwgaW5zdGVhZAotICAgKiBvZiBjcmVhdGluZyBhIG5ldyBvbmUuIE5vIG5lZWQgdG8gY3JlYXRlIGFuIGVxdWl2YWxlbnQgb25lLCByZXBsYWNpbmcKLSAgICogaXQgaW4gdGhlIHN0aWNreSBldmVudCBsaXN0IGFuZCBwb3NzaWJseSBjYXVzaW5nIHJlbmVnb3RpYXRpb24KLSAgICovCi0gIGV2ZW50ID0gZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50ICh0eXBlZmluZC0+c3JjLCBHU1RfRVZFTlRfQ0FQUywgMCk7Ci0gIGlmIChldmVudCkgewotICAgIEdzdENhcHMgKmV2ZW50X2NhcHM7Ci0KLSAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZldmVudF9jYXBzKTsKLSAgICBpZiAoY2FwcyAhPSBldmVudF9jYXBzKSB7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHR5cGVmaW5kLT5zcmMsIGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9lbWl0X2hhdmVfdHlwZSAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQsCi0gICAgZ3VpbnQgcHJvYmFiaWxpdHksIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgLyogVXBkYXRlIGNhcHMgZmllbGQgaW1tZWRpYXRseSBzbyB0aGF0IGNhcHMgcXVlcmllcyBhbmQgcHJvcGVydGllcyBjYW4gYmUKLSAgICogaG9ub3JlZCBpbiBhbGwgImhhdmUtdHlwZSIgc2lnbmFsIGhhbmRsZXJzLgotICAgKi8KLSAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7Ci0gIGlmICh0eXBlZmluZC0+Y2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAodHlwZWZpbmQtPmNhcHMpOwotICB0eXBlZmluZC0+Y2FwcyA9IGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0KLSAgLyogT25seSBzdG9yZSB0aGUgY2FwcyBldmVudCBhdCB0aGlzIHBvaW50LiBXZSBnaXZlIHNpZ25hbCBoYW5kbGVycwotICAgKiB0aGUgY2hhbmNlIHRvIGxvb2sgYXQgdGhlIGNhcHMgYmVmb3JlIHRoZXkgYXJlIHNlbnQgZG93bnN0cmVhbS4KLSAgICogVGhleSBhcmUgb25seSBmb3J3YXJkZWQgZG93bnN0cmVhbSBsYXRlciBpbiB0aGUgZGVmYXVsdCBzaWduYWwKLSAgICogaGFuZGxlciBhZnRlciBhbGwgYXBwbGljYXRpb24gc2lnbmFsIGhhbmRsZXJzCi0gICAqLwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfY2FwcyAoY2Fwcyk7Ci0gIGdzdF9wYWRfc3RvcmVfc3RpY2t5X2V2ZW50ICh0eXBlZmluZC0+c3JjLCBldmVudCk7Ci0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gIGdfc2lnbmFsX2VtaXQgKHR5cGVmaW5kLCBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2lnbmFsc1tIQVZFX1RZUEVdLCAwLAotICAgICAgcHJvYmFiaWxpdHksIGNhcHMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NsYXNzX2luaXQgKEdzdFR5cGVGaW5kRWxlbWVudENsYXNzICogdHlwZWZpbmRfY2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTICh0eXBlZmluZF9jbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTICh0eXBlZmluZF9jbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF90eXBlX2ZpbmRfZWxlbWVudF9kaXNwb3NlOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FQUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImNhcHMiLCBfKCJjYXBzIiksCi0gICAgICAgICAgXygiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIpLCBHU1RfVFlQRV9DQVBTLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUlOSU1VTSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWluaW11bSIsIF8oIm1pbmltdW0iKSwKLSAgICAgICAgICAibWluaW11bSBwcm9iYWJpbGl0eSByZXF1aXJlZCB0byBhY2NlcHQgY2FwcyIsIEdTVF9UWVBFX0ZJTkRfTUlOSU1VTSwKLSAgICAgICAgICBHU1RfVFlQRV9GSU5EX01BWElNVU0sIEdTVF9UWVBFX0ZJTkRfTUlOSU1VTSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GT1JDRV9DQVBTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgiZm9yY2UtY2FwcyIsIF8oImZvcmNlIGNhcHMiKSwKLSAgICAgICAgICBfKCJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIpLCBHU1RfVFlQRV9DQVBTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0VHlwZUZpbmRFbGVtZW50OjpoYXZlLXR5cGU6Ci0gICAqIEB0eXBlZmluZDogdGhlIHR5cGVmaW5kIGluc3RhbmNlCi0gICAqIEBwcm9iYWJpbGl0eTogdGhlIHByb2JhYmlsaXR5IG9mIHRoZSB0eXBlIGZvdW5kCi0gICAqIEBjYXBzOiB0aGUgY2FwcyBvZiB0aGUgdHlwZSBmb3VuZAotICAgKgotICAgKiBUaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgd2hlbiB0aGUgdHlwZSBhbmQgaXRzIHByb2JhYmlsaXR5IGhhcwotICAgKiBiZWVuIGZvdW5kLgotICAgKi8KLSAgZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NpZ25hbHNbSEFWRV9UWVBFXSA9IGdfc2lnbmFsX25ldyAoImhhdmUtdHlwZSIsCi0gICAgICBHX1RZUEVfRlJPTV9DTEFTUyAodHlwZWZpbmRfY2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0VHlwZUZpbmRFbGVtZW50Q2xhc3MsIGhhdmVfdHlwZSksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsCi0gICAgICBHX1RZUEVfVUlOVCwgR1NUX1RZUEVfQ0FQUyB8IEdfU0lHTkFMX1RZUEVfU1RBVElDX1NDT1BFKTsKLQotICB0eXBlZmluZF9jbGFzcy0+aGF2ZV90eXBlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfaGF2ZV90eXBlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlR5cGVGaW5kIiwKLSAgICAgICJHZW5lcmljIiwKLSAgICAgICJGaW5kcyB0aGUgbWVkaWEgdHlwZSBvZiBhIHN0cmVhbSIsCi0gICAgICAiQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Iik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnR5cGVfZmluZF9lbGVtZW50X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnR5cGVfZmluZF9lbGVtZW50X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYW5nZV9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHlwZV9maW5kX2VsZW1lbnRfaW5pdCAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQpCi17Ci0gIC8qIHNpbmtwYWQgKi8KLSAgdHlwZWZpbmQtPnNpbmsgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZ0eXBlX2ZpbmRfZWxlbWVudF9zaW5rX3RlbXBsYXRlLAotICAgICAgInNpbmsiKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAodHlwZWZpbmQtPnNpbmssCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlX3NpbmspKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uICh0eXBlZmluZC0+c2luaywKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGVfc2lua19tb2RlKSk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uICh0eXBlZmluZC0+c2luaywKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHR5cGVmaW5kLT5zaW5rLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9zaW5rX2V2ZW50KSk7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04gKHR5cGVmaW5kLT5zaW5rKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHR5cGVmaW5kKSwgdHlwZWZpbmQtPnNpbmspOwotCi0gIC8qIHNyY3BhZCAqLwotICB0eXBlZmluZC0+c3JjID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmdHlwZV9maW5kX2VsZW1lbnRfc3JjX3RlbXBsYXRlLCAic3JjIik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uICh0eXBlZmluZC0+c3JjLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZV9zcmNfbW9kZSkpOwotICBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAodHlwZWZpbmQtPnNyYywKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0cmFuZ2UpKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHR5cGVmaW5kLT5zcmMsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NyY19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAodHlwZWZpbmQtPnNyYywKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdHlwZV9maW5kX2hhbmRsZV9zcmNfcXVlcnkpKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAodHlwZWZpbmQtPnNyYyk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UICh0eXBlZmluZCksIHR5cGVmaW5kLT5zcmMpOwotCi0gIHR5cGVmaW5kLT5tb2RlID0gTU9ERV9UWVBFRklORDsKLSAgdHlwZWZpbmQtPmNhcHMgPSBOVUxMOwotICB0eXBlZmluZC0+bWluX3Byb2JhYmlsaXR5ID0gMTsKLQotICB0eXBlZmluZC0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChvYmplY3QpOwotCi0gIGlmICh0eXBlZmluZC0+YWRhcHRlcikgewotICAgIGdfb2JqZWN0X3VucmVmICh0eXBlZmluZC0+YWRhcHRlcik7Ci0gICAgdHlwZWZpbmQtPmFkYXB0ZXIgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHR5cGVmaW5kLT5mb3JjZV9jYXBzKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHR5cGVmaW5kLT5mb3JjZV9jYXBzKTsKLSAgICB0eXBlZmluZC0+Zm9yY2VfY2FwcyA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VHlwZUZpbmRFbGVtZW50ICp0eXBlZmluZDsKLQotICB0eXBlZmluZCA9IEdTVF9UWVBFX0ZJTkRfRUxFTUVOVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTUlOSU1VTToKLSAgICAgIHR5cGVmaW5kLT5taW5fcHJvYmFiaWxpdHkgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRk9SQ0VfQ0FQUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAodHlwZWZpbmQpOwotICAgICAgaWYgKHR5cGVmaW5kLT5mb3JjZV9jYXBzKQotICAgICAgICBnc3RfY2Fwc191bnJlZiAodHlwZWZpbmQtPmZvcmNlX2NhcHMpOwotICAgICAgdHlwZWZpbmQtPmZvcmNlX2NhcHMgPSBnX3ZhbHVlX2R1cF9ib3hlZCAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VHlwZUZpbmRFbGVtZW50ICp0eXBlZmluZDsKLQotICB0eXBlZmluZCA9IEdTVF9UWVBFX0ZJTkRfRUxFTUVOVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ0FQUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAodHlwZWZpbmQpOwotICAgICAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCB0eXBlZmluZC0+Y2Fwcyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01JTklNVU06Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgdHlwZWZpbmQtPm1pbl9wcm9iYWJpbGl0eSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRk9SQ0VfQ0FQUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAodHlwZWZpbmQpOwotICAgICAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCB0eXBlZmluZC0+Zm9yY2VfY2Fwcyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90eXBlX2ZpbmRfaGFuZGxlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0VHlwZUZpbmRFbGVtZW50ICp0eXBlZmluZDsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgdHlwZWZpbmQgPSBHU1RfVFlQRV9GSU5EX0VMRU1FTlQgKHBhcmVudCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAiSGFuZGxpbmcgc3JjIHF1ZXJ5ICVzIiwKLSAgICAgIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzoKLSAgICAgIC8qIEZJWE1FLCBmaWx0ZXIgb3V0IHRoZSBzY2hlZHVsaW5nIG1vZGVzIHRoYXQgd2UgdW5kZXJzdGFuZCAqLwotICAgICAgcmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5ICh0eXBlZmluZC0+c2luaywgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwKLSAgICAgICAgICAiR290IGNhcHMgcXVlcnksIG91ciBjYXBzIGFyZSAlIiBHU1RfUFRSX0ZPUk1BVCwgdHlwZWZpbmQtPmNhcHMpOwotCi0gICAgICAvKiBXZSBjYW4gaGlqYWNrIGNhcHMgcXVlcnkgaWYgd2UgdHlwZWZpbmQgYWxyZWFkeSAqLwotICAgICAgaWYgKHR5cGVmaW5kLT5jYXBzKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCB0eXBlZmluZC0+Y2Fwcyk7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXMgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHR5cGVmaW5kLT5zaW5rLCBxdWVyeSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfUE9TSVRJT046Ci0gICAgewotICAgICAgZ2ludDY0IHBlZXJfcG9zOwotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICAgICAgaWYgKCEocmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5ICh0eXBlZmluZC0+c2luaywgcXVlcnkpKSkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsICZwZWVyX3Bvcyk7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAodHlwZWZpbmQpOwotICAgICAgLyogRklYTUU6IHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlcmUncyBubyBkaXNjb250IGluIHRoZSBxdWV1ZSAqLwotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIHBlZXJfcG9zIC09IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAodHlwZWZpbmQtPmFkYXB0ZXIpOwotICAgICAgICAgIGlmIChwZWVyX3BvcyA8IDApICAgICAvKiBDbGFtcCByZXN1bHQgdG8gMCAqLwotICAgICAgICAgICAgcGVlcl9wb3MgPSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIC8qIEZJWE1FICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAocXVlcnksIGZvcm1hdCwgcGVlcl9wb3MpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotb3V0OgotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9zZWVrIChHc3RUeXBlRmluZEVsZW1lbnQgKiB0eXBlZmluZCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RTZWVrVHlwZSBzdGFydF90eXBlLCBzdG9wX3R5cGU7Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gIGdib29sZWFuIGZsdXNoOwotICBnZG91YmxlIHJhdGU7Ci0gIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgR3N0U2VnbWVudCBzZWVrc2VnbWVudCA9IHsgMCwgfTsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsICZzdGFydF90eXBlLCAmc3RhcnQsCi0gICAgICAmc3RvcF90eXBlLCAmc3RvcCk7Ci0KLSAgLyogd2UgY2FuIG9ubHkgc2VlayBvbiBieXRlcyAqLwotICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfQllURVMpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgIkNhbiBvbmx5IHNlZWsgb24gQllURVMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiBjb3B5IHNlZ21lbnQsIHdlIG5lZWQgdGhpcyBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdGhlIG9sZAotICAgKiBzZWdtZW50IHdoZW4gd2UgY2xvc2UgdGhlIGN1cnJlbnQgc2VnbWVudC4gKi8KLSAgbWVtY3B5ICgmc2Vla3NlZ21lbnQsICZ0eXBlZmluZC0+c2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJjb25maWd1cmluZyBzZWVrIik7Ci0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWVrc2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKLSAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsIE5VTEwpOwotCi0gIGZsdXNoID0gISAhKGZsYWdzICYgR1NUX1NFRUtfRkxBR19GTFVTSCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJOZXcgc2VnbWVudCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzZWVrc2VnbWVudCk7Ci0KLSAgaWYgKGZsdXNoKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJTdGFydGluZyBmbHVzaCIpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAodHlwZWZpbmQtPnNpbmssIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAodHlwZWZpbmQtPnNyYywgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJOb24tZmx1c2hpbmcgc2VlaywgcGF1c2luZyB0YXNrIik7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrICh0eXBlZmluZC0+c2luayk7Ci0gIH0KLQotICAvKiBub3cgZ3JhYiB0aGUgc3RyZWFtIGxvY2sgc28gdGhhdCBzdHJlYW1pbmcgY2Fubm90IGNvbnRpbnVlLCBmb3IKLSAgICogbm9uIGZsdXNoaW5nIHNlZWtzIHdoZW4gdGhlIGVsZW1lbnQgaXMgaW4gUEFVU0VEIHRoaXMgY291bGQgYmxvY2sKLSAgICogZm9yZXZlci4gKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJXYWl0aW5nIGZvciBzdHJlYW1pbmcgdG8gc3RvcCIpOwotICBHU1RfUEFEX1NUUkVBTV9MT0NLICh0eXBlZmluZC0+c2luayk7Ci0KLSAgaWYgKGZsdXNoKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJTdG9wcGluZyBmbHVzaCIpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAodHlwZWZpbmQtPnNpbmssIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAodHlwZWZpbmQtPnNyYywgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKSk7Ci0gIH0KLQotICAvKiBub3cgdXBkYXRlIHRoZSByZWFsIHNlZ21lbnQgaW5mbyAqLwotICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgIkNvbW1pdHRpbmcgbmV3IHNlZWsgc2VnbWVudCIpOwotICBtZW1jcHkgKCZ0eXBlZmluZC0+c2VnbWVudCwgJnNlZWtzZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLSAgdHlwZWZpbmQtPm9mZnNldCA9IHR5cGVmaW5kLT5zZWdtZW50LnN0YXJ0OwotCi0gIC8qIG5vdGlmeSBzdGFydCBvZiBuZXcgc2VnbWVudCAqLwotICBpZiAodHlwZWZpbmQtPnNlZ21lbnQuZmxhZ3MgJiBHU1RfU0VHTUVOVF9GTEFHX1NFR01FTlQpIHsKLSAgICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgICBtc2cgPSBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoR1NUX09CSkVDVCAodHlwZWZpbmQpLAotICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCB0eXBlZmluZC0+c2VnbWVudC5zdGFydCk7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAodHlwZWZpbmQpLCBtc2cpOwotICB9Ci0KLSAgdHlwZWZpbmQtPm5lZWRfc2VnbWVudCA9IFRSVUU7Ci0KLSAgLyogcmVzdGFydCBvdXIgdGFzayBzaW5jZSBpdCBtaWdodCBoYXZlIGJlZW4gc3RvcHBlZCB3aGVuIHdlIGRpZCB0aGUKLSAgICogZmx1c2guICovCi0gIGdzdF9wYWRfc3RhcnRfdGFzayAodHlwZWZpbmQtPnNpbmssCi0gICAgICAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfdHlwZV9maW5kX2VsZW1lbnRfbG9vcCwgdHlwZWZpbmQtPnNpbmssIE5VTEwpOwotCi0gIC8qIHN0cmVhbWluZyBjYW4gY29udGludWUgbm93ICovCi0gIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAodHlwZWZpbmQtPnNpbmspOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFR5cGVGaW5kRWxlbWVudCAqdHlwZWZpbmQgPSBHU1RfVFlQRV9GSU5EX0VMRU1FTlQgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBpZiAodHlwZWZpbmQtPm1vZGUgIT0gTU9ERV9OT1JNQUwpIHsKLSAgICAvKiBuZWVkIHRvIGRvIG1vcmU/ICovCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogT25seSBoYW5kbGUgc2Vla3MgaGVyZSBpZiBkcml2aW5nIHRoZSBwaXBlbGluZSAqLwotICBpZiAodHlwZWZpbmQtPnNlZ21lbnQuZm9ybWF0ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVEICYmCi0gICAgICBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUVLKSB7Ci0gICAgcmVzdWx0ID0gZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NlZWsgKHR5cGVmaW5kLCBldmVudCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c2luaywgZXZlbnQpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdGFydF90eXBlZmluZGluZyAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAic3RhcnRpbmcgdHlwZWZpbmRpbmciKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKLSAgaWYgKHR5cGVmaW5kLT5jYXBzKQotICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZ0eXBlZmluZC0+Y2FwcywgTlVMTCk7Ci0gIHR5cGVmaW5kLT5pbml0aWFsX29mZnNldCA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0KLSAgdHlwZWZpbmQtPm1vZGUgPSBNT0RFX1RZUEVGSU5EOwotfQotCi1zdGF0aWMgdm9pZAotc3RvcF90eXBlZmluZGluZyAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQpCi17Ci0gIEdzdFN0YXRlIHN0YXRlOwotICBnYm9vbGVhbiBwdXNoX2NhY2hlZF9idWZmZXJzOwotICBnc2l6ZSBhdmFpbDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdENsb2NrVGltZSBwdHMsIGR0czsKLQotICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UICh0eXBlZmluZCksICZzdGF0ZSwgTlVMTCwgMCk7Ci0KLSAgcHVzaF9jYWNoZWRfYnVmZmVycyA9IChzdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEICYmIHR5cGVmaW5kLT5jYXBzKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgInN0b3BwaW5nIHR5cGVmaW5kaW5nJXMiLAotICAgICAgcHVzaF9jYWNoZWRfYnVmZmVycyA/ICIgYW5kIHB1c2hpbmcgY2FjaGVkIGV2ZW50cyBhbmQgYnVmZmVycyIgOiAiIik7Ci0KLSAgdHlwZWZpbmQtPm1vZGUgPSBNT0RFX05PUk1BTDsKLSAgaWYgKHB1c2hfY2FjaGVkX2J1ZmZlcnMpCi0gICAgZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NlbmRfY2FjaGVkX2V2ZW50cyAodHlwZWZpbmQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodHlwZWZpbmQpOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAodHlwZWZpbmQtPmFkYXB0ZXIpOwotICBpZiAoYXZhaWwgPT0gMCkKLSAgICBnb3RvIG5vX2RhdGE7Ci0KLSAgcHRzID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHMgKHR5cGVmaW5kLT5hZGFwdGVyLCBOVUxMKTsKLSAgZHRzID0gZ3N0X2FkYXB0ZXJfcHJldl9kdHMgKHR5cGVmaW5kLT5hZGFwdGVyLCBOVUxMKTsKLSAgYnVmZmVyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHR5cGVmaW5kLT5hZGFwdGVyLCBhdmFpbCk7Ci0gIEdTVF9CVUZGRVJfUFRTIChidWZmZXIpID0gcHRzOwotICBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSA9IGR0czsKLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPSB0eXBlZmluZC0+aW5pdGlhbF9vZmZzZXQ7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0KLSAgaWYgKCFwdXNoX2NhY2hlZF9idWZmZXJzKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgfSBlbHNlIHsKLSAgICBHc3RQYWQgKnBlZXIgPSBnc3RfcGFkX2dldF9wZWVyICh0eXBlZmluZC0+c3JjKTsKLQotICAgIC8qIG1ha2Ugc3VyZSB0aGUgdXNlciBnZXRzIGEgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlIGluIHRoaXMgY2FzZSwKLSAgICAgKiB3aGljaCBpcyBub3QgYSBjb3JlIGJ1ZyBvciBidWcgb2YgYW55IGtpbmQgKGFzIHRoZSBkZWZhdWx0IGVycm9yCi0gICAgICogbWVzc2FnZSBlbWl0dGVkIGJ5IGdzdHBhZC5jIG90aGVyd2lzZSB3b3VsZCBtYWtlIHlvdSB0aGluaykgKi8KLSAgICBpZiAocGVlciAmJiBHU1RfUEFEX0NIQUlORlVOQyAocGVlcikgPT0gTlVMTCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJ1cHN0cmVhbSBvbmx5IHN1cHBvcnRzIHB1c2ggbW9kZSwgd2hpbGUgIgotICAgICAgICAgICJkb3duc3RyZWFtIGVsZW1lbnQgb25seSB3b3JrcyBpbiBwdWxsIG1vZGUsIGVycm9yaW5nIG91dCIpOwotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHR5cGVmaW5kLCBTVFJFQU0sIEZBSUxFRCwKLSAgICAgICAgICAoIiVzIGNhbm5vdCB3b3JrIGluIHB1c2ggbW9kZS4gVGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkICIKLSAgICAgICAgICAgICAgIndpdGggdGhpcyBzb3VyY2UgZWxlbWVudCBvciBwcm90b2NvbC4iLAotICAgICAgICAgICAgICBHX09CSkVDVF9UWVBFX05BTUUgKEdTVF9QQURfUEFSRU5UIChwZWVyKSkpLAotICAgICAgICAgICgiRG93bnN0cmVhbSBwYWQgJXM6JXMgaGFzIG5vIGNoYWluZnVuY3Rpb24sIGFuZCB0aGUgdXBzdHJlYW0gIgotICAgICAgICAgICAgICAiZWxlbWVudCBkb2VzIG5vdCBzdXBwb3J0IHB1bGwgbW9kZSIsIEdTVF9ERUJVR19QQURfTkFNRSAocGVlcikpKTsKLSAgICAgIHR5cGVmaW5kLT5tb2RlID0gTU9ERV9FUlJPUjsgICAgICAvKiBtYWtlIHRoZSBjaGFpbiBmdW5jdGlvbiBlcnJvciBvdXQgKi8KLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9wYWRfcHVzaCAodHlwZWZpbmQtPnNyYywgYnVmZmVyKTsKLSAgICB9Ci0gICAgaWYgKHBlZXIpCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLSAgfQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1ub19kYXRhOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJ3ZSBoYXZlIG5vIGRhdGEgdG8gdHlwZWZpbmQiKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOwotICAgIHJldHVybjsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR3N0VHlwZUZpbmRFbGVtZW50ICp0eXBlZmluZCA9IEdTVF9UWVBFX0ZJTkRfRUxFTUVOVCAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgImdvdCAlcyBldmVudCBpbiBtb2RlICVkIiwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwgdHlwZWZpbmQtPm1vZGUpOwotCi0gIHN3aXRjaCAodHlwZWZpbmQtPm1vZGUpIHsKLSAgICBjYXNlIE1PREVfVFlQRUZJTkQ6Ci0gICAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICAgICAgewotICAgICAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgICAgICAvKiBQYXJzZSBhbmQgcHVzaCBvdXQgb3VyIGNhcHMgYW5kIGRhdGEgKi8KLSAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgICAgICByZXMgPSBnc3RfdHlwZV9maW5kX2VsZW1lbnRfc2V0Y2FwcyAodHlwZWZpbmQsIGNhcHMpOwotCi0gICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHU1RfRVZFTlRfR0FQOgotICAgICAgICB7Ci0gICAgICAgICAgR1NUX0ZJWE1FX09CSkVDVCAodHlwZWZpbmQsCi0gICAgICAgICAgICAgICJHQVAgZXZlbnRzIGR1cmluZyB0eXBlZmluZGluZyBub3QgaGFuZGxlZCBwcm9wZXJseSIpOwotCi0gICAgICAgICAgLyogRklYTUU6IFRoZXNlIHdvdWxkIG5lZWQgdG8gYmUgaW5zZXJ0ZWQgaW4gdGhlIHN0cmVhbSBhdAotICAgICAgICAgICAqIHRoZSByaWdodCBwb3NpdGlvbiBiZXR3ZWVuIGJ1ZmZlcnMsIGJ1dCB3ZSBjb21iaW5lIGFsbAotICAgICAgICAgICAqIGJ1ZmZlcnMgd2l0aCBhIEdzdEFkYXB0ZXIuIERyb3AgdGhlIEdBUCBldmVudCBmb3Igbm93LAotICAgICAgICAgICAqIHdoaWNoIHdpbGwgb25seSBjYXVzZSBhbiBpbXBsaWNpdCBHQVAgYmV0d2VlbiBidWZmZXJzLgotICAgICAgICAgICAqLwotICAgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgICB7Ci0gICAgICAgICAgR1NUX0lORk9fT0JKRUNUICh0eXBlZmluZCwgIkdvdCBFT1MgYW5kIG5vIHR5cGUgZm91bmQgeWV0Iik7Ci0gICAgICAgICAgZ3N0X3R5cGVfZmluZF9lbGVtZW50X2NoYWluX2RvX3R5cGVmaW5kaW5nICh0eXBlZmluZCwgRkFMU0UsIFRSVUUpOwotCi0gICAgICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLCBldmVudCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDp7Ci0gICAgICAgICAgR0xpc3QgKmw7Ci0KLSAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKLQotICAgICAgICAgIGZvciAobCA9IHR5cGVmaW5kLT5jYWNoZWRfZXZlbnRzOyBsOyBsID0gbC0+bmV4dCkgewotICAgICAgICAgICAgaWYgKEdTVF9FVkVOVF9JU19TVElDS1kgKGwtPmRhdGEpICYmCi0gICAgICAgICAgICAgICAgR1NUX0VWRU5UX1RZUEUgKGwtPmRhdGEpICE9IEdTVF9FVkVOVF9TRUdNRU5UICYmCi0gICAgICAgICAgICAgICAgR1NUX0VWRU5UX1RZUEUgKGwtPmRhdGEpICE9IEdTVF9FVkVOVF9FT1MpIHsKLSAgICAgICAgICAgICAgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgKHR5cGVmaW5kLT5zcmMsIGwtPmRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChsLT5kYXRhKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBnX2xpc3RfZnJlZSAodHlwZWZpbmQtPmNhY2hlZF9ldmVudHMpOwotICAgICAgICAgIHR5cGVmaW5kLT5jYWNoZWRfZXZlbnRzID0gTlVMTDsKLSAgICAgICAgICBnc3RfYWRhcHRlcl9jbGVhciAodHlwZWZpbmQtPmFkYXB0ZXIpOwotICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0gICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLCBldmVudCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgLyogRm9yd2FyZCBldmVudHMgdGhhdCB3b3VsZCBoYXBwZW4gYmVmb3JlIHRoZSBjYXBzIGV2ZW50Ci0gICAgICAgICAgICogZGlyZWN0bHkgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZW0uIFRoZXJlJ3Mgbm8gcmVhc29uIG5vdAotICAgICAgICAgICAqIHRvIHNlbmQgdGhlbSBkaXJlY3RseSBhbmQgd2Ugc2hvdWxkIG9ubHkgc3RvcmUgZXZlbnRzCi0gICAgICAgICAgICogZm9yIGxhdGVyIHNlbmRpbmcgdGhhdCB3b3VsZCBuZWVkIHRvIGNvbWUgYWZ0ZXIgdGhlIGNhcHMKLSAgICAgICAgICAgKiBldmVudCAqLwotICAgICAgICAgIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpIDwgR1NUX0VWRU5UX0NBUFMpIHsKLSAgICAgICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAodHlwZWZpbmQtPnNyYywgZXZlbnQpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgIlNhdmluZyAlcyBldmVudCB0byBzZW5kIGxhdGVyIiwKLSAgICAgICAgICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotICAgICAgICAgICAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7Ci0gICAgICAgICAgICB0eXBlZmluZC0+Y2FjaGVkX2V2ZW50cyA9Ci0gICAgICAgICAgICAgICAgZ19saXN0X2FwcGVuZCAodHlwZWZpbmQtPmNhY2hlZF9ldmVudHMsIGV2ZW50KTsKLSAgICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0gICAgICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9ERV9OT1JNQUw6Ci0gICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHR5cGVmaW5kLT5zcmMsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9ERV9FUlJPUjoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NlbmRfY2FjaGVkX2V2ZW50cyAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQpCi17Ci0gIEdMaXN0ICpsLCAqY2FjaGVkX2V2ZW50czsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKLSAgY2FjaGVkX2V2ZW50cyA9IHR5cGVmaW5kLT5jYWNoZWRfZXZlbnRzOwotICB0eXBlZmluZC0+Y2FjaGVkX2V2ZW50cyA9IE5VTEw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0KLSAgZm9yIChsID0gY2FjaGVkX2V2ZW50czsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdEV2ZW50ICpldmVudCA9IEdTVF9FVkVOVCAobC0+ZGF0YSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgInNlbmRpbmcgY2FjaGVkICVzIGV2ZW50IiwKLSAgICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHR5cGVmaW5kLT5zcmMsIGV2ZW50KTsKLSAgfQotICBnX2xpc3RfZnJlZSAoY2FjaGVkX2V2ZW50cyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3R5cGVfZmluZF9lbGVtZW50X3NldGNhcHMgKEdzdFR5cGVGaW5kRWxlbWVudCAqIHR5cGVmaW5kLCBHc3RDYXBzICogY2FwcykKLXsKLSAgLyogZG9uJ3Qgb3BlcmF0ZSBvbiBBTlkgY2FwcyAqLwotICBpZiAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSkKLSAgICByZXR1cm4gVFJVRTsKLQotICBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZW1pdF9oYXZlX3R5cGUgKHR5cGVmaW5kLCBHU1RfVFlQRV9GSU5EX01BWElNVU0sIGNhcHMpOwotCi0gIC8qIFNob3J0Y2lyY3VpdCB0eXBlZmluZGluZyBpZiB3ZSBnZXQgY2FwcyAqLwotICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgIlNraXBwaW5nIHR5cGVmaW5kaW5nLCB1c2luZyBjYXBzIGZyb20gIgotICAgICAgInVwc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgc3RvcF90eXBlZmluZGluZyAodHlwZWZpbmQpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3R5cGVfZmluZF9nZXRfZXh0ZW5zaW9uIChHc3RUeXBlRmluZEVsZW1lbnQgKiB0eXBlZmluZCwgR3N0UGFkICogcGFkKQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdjaGFyICp1cmksICpyZXN1bHQ7Ci0gIHNpemVfdCBsZW47Ci0gIGdpbnQgZmluZDsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfdXJpICgpOwotCi0gIC8qIHRyeSBnZXR0aW5nIHRoZSBjYXBzIHdpdGggYW4gdXJpIHF1ZXJ5IGFuZCBmcm9tIHRoZSBleHRlbnNpb24gKi8KLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKHBhZCwgcXVlcnkpKQotICAgIGdvdG8gcGVlcl9xdWVyeV9mYWlsZWQ7Ci0KLSAgZ3N0X3F1ZXJ5X3BhcnNlX3VyaSAocXVlcnksICZ1cmkpOwotICBpZiAodXJpID09IE5VTEwpCi0gICAgZ290byBub191cmk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJmaW5kaW5nIGV4dGVuc2lvbiBvZiAlcyIsIHVyaSk7Ci0KLSAgLyogZmluZCB0aGUgZXh0ZW5zaW9uIG9uIHRoZSB1cmksIHRoaXMgaXMgZXZlcnl0aGluZyBhZnRlciBhICcuJyAqLwotICBsZW4gPSBzdHJsZW4gKHVyaSk7Ci0gIGZpbmQgPSBsZW4gLSAxOwotCi0gIHdoaWxlIChmaW5kID49IDApIHsKLSAgICBpZiAodXJpW2ZpbmRdID09ICcuJykKLSAgICAgIGJyZWFrOwotICAgIGZpbmQtLTsKLSAgfQotICBpZiAoZmluZCA8IDApCi0gICAgZ290byBub19leHRlbnNpb247Ci0KLSAgcmVzdWx0ID0gZ19zdHJkdXAgKCZ1cmlbZmluZCArIDFdKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgImZvdW5kIGV4dGVuc2lvbiAlcyIsIHJlc3VsdCk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICBnX2ZyZWUgKHVyaSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLXBlZXJfcXVlcnlfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh0eXBlZmluZCwgImZhaWxlZCB0byBxdWVyeSBwZWVyIHVyaSIpOwotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1ub191cmk6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHR5cGVmaW5kLCAiY291bGQgbm90IHBhcnNlIHRoZSBwZWVyIHVyaSIpOwotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1ub19leHRlbnNpb246Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHR5cGVmaW5kLCAiY291bGQgbm90IGZpbmQgdXJpIGV4dGVuc2lvbiBpbiAlcyIsIHVyaSk7Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0gICAgZ19mcmVlICh1cmkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF90eXBlX2ZpbmRfZ3Vlc3NfYnlfZXh0ZW5zaW9uIChHc3RUeXBlRmluZEVsZW1lbnQgKiB0eXBlZmluZCwgR3N0UGFkICogcGFkLAotICAgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgKiBwcm9iYWJpbGl0eSkKLXsKLSAgZ2NoYXIgKmV4dDsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBleHQgPSBnc3RfdHlwZV9maW5kX2dldF9leHRlbnNpb24gKHR5cGVmaW5kLCBwYWQpOwotICBpZiAoIWV4dCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBjYXBzID0gZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbiAoR1NUX09CSkVDVF9DQVNUICh0eXBlZmluZCksIGV4dCk7Ci0gIGlmIChjYXBzKQotICAgICpwcm9iYWJpbGl0eSA9IEdTVF9UWVBFX0ZJTkRfTUFYSU1VTTsKLQotICBnX2ZyZWUgKGV4dCk7Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0VHlwZUZpbmRFbGVtZW50ICp0eXBlZmluZDsKLSAgR3N0Rmxvd1JldHVybiByZXMgPSBHU1RfRkxPV19PSzsKLQotICB0eXBlZmluZCA9IEdTVF9UWVBFX0ZJTkRfRUxFTUVOVCAocGFyZW50KTsKLQotICBHU1RfTE9HX09CSkVDVCAodHlwZWZpbmQsICJoYW5kbGluZyBidWZmZXIgaW4gbW9kZSAlZCIsIHR5cGVmaW5kLT5tb2RlKTsKLQotICBzd2l0Y2ggKHR5cGVmaW5kLT5tb2RlKSB7Ci0gICAgY2FzZSBNT0RFX0VSUk9SOgotICAgICAgLyogd2Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBjYWxsZWQgR1NUX0VMRU1FTlRfRVJST1IgKi8KLSAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgICBjYXNlIE1PREVfTk9STUFMOgotICAgICAgLyogZG9uJ3QgdGFrZSBvYmplY3QgbG9jayBhcyB0eXBlZmluZC0+Y2FwcyBzaG91bGQgbm90IGNoYW5nZSBhbnltb3JlICovCi0gICAgICByZXR1cm4gZ3N0X3BhZF9wdXNoICh0eXBlZmluZC0+c3JjLCBidWZmZXIpOwotICAgIGNhc2UgTU9ERV9UWVBFRklORDoKLSAgICB7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKLSAgICAgIGlmICh0eXBlZmluZC0+aW5pdGlhbF9vZmZzZXQgPT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSkKLSAgICAgICAgdHlwZWZpbmQtPmluaXRpYWxfb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcik7Ci0gICAgICBnc3RfYWRhcHRlcl9wdXNoICh0eXBlZmluZC0+YWRhcHRlciwgYnVmZmVyKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0KLSAgICAgIHJlcyA9IGdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbl9kb190eXBlZmluZGluZyAodHlwZWZpbmQsIFRSVUUsIEZBTFNFKTsKLQotICAgICAgaWYgKHR5cGVmaW5kLT5tb2RlID09IE1PREVfRVJST1IpCi0gICAgICAgIHJlcyA9IEdTVF9GTE9XX0VSUk9SOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9jaGFpbl9kb190eXBlZmluZGluZyAoR3N0VHlwZUZpbmRFbGVtZW50ICogdHlwZWZpbmQsCi0gICAgZ2Jvb2xlYW4gY2hlY2tfYXZhaWwsIGdib29sZWFuIGF0X2VvcykKLXsKLSAgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSBwcm9iYWJpbGl0eTsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIGdzaXplIGF2YWlsOwotICBjb25zdCBndWludDggKmRhdGE7Ci0gIGdib29sZWFuIGhhdmVfbWluLCBoYXZlX21heDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHR5cGVmaW5kKTsKLSAgaWYgKHR5cGVmaW5kLT5mb3JjZV9jYXBzKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX3JlZiAodHlwZWZpbmQtPmZvcmNlX2NhcHMpOwotICAgIHByb2JhYmlsaXR5ID0gR1NUX1RZUEVfRklORF9NQVhJTVVNOwotICB9Ci0KLSAgaWYgKCFjYXBzKSB7Ci0gICAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHR5cGVmaW5kLT5hZGFwdGVyKTsKLQotICAgIGlmIChjaGVja19hdmFpbCkgewotICAgICAgaGF2ZV9taW4gPSBhdmFpbCA+PSBUWVBFX0ZJTkRfTUlOX1NJWkU7Ci0gICAgICBoYXZlX21heCA9IGF2YWlsID49IFRZUEVfRklORF9NQVhfU0laRTsKLSAgICB9IGVsc2UgewotICAgICAgaGF2ZV9taW4gPSBhdmFpbCA+IDA7Ci0gICAgICBoYXZlX21heCA9IFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKCFoYXZlX21pbikKLSAgICAgIGdvdG8gbm90X2Vub3VnaF9kYXRhOwotCi0gICAgLyogbWFwIGFsbCBhdmFpbGFibGUgZGF0YSAqLwotICAgIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKHR5cGVmaW5kLT5hZGFwdGVyLCBhdmFpbCk7Ci0gICAgY2FwcyA9IGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhIChHU1RfT0JKRUNUICh0eXBlZmluZCksCi0gICAgICAgIGRhdGEsIGF2YWlsLCAmcHJvYmFiaWxpdHkpOwotICAgIGdzdF9hZGFwdGVyX3VubWFwICh0eXBlZmluZC0+YWRhcHRlcik7Ci0KLSAgICBpZiAoY2FwcyA9PSBOVUxMICYmIGhhdmVfbWF4KQotICAgICAgZ290byBub190eXBlX2ZvdW5kOwotICAgIGVsc2UgaWYgKGNhcHMgPT0gTlVMTCkKLSAgICAgIGdvdG8gd2FpdF9mb3JfZGF0YTsKLQotICAgIC8qIGZvdW5kIGEgdHlwZSAqLwotICAgIGlmIChwcm9iYWJpbGl0eSA8IHR5cGVmaW5kLT5taW5fcHJvYmFiaWxpdHkpCi0gICAgICBnb3RvIGxvd19wcm9iYWJpbGl0eTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0KLSAgLyogcHJvYmFiaWxpdHkgaXMgZ29vZCBlbm91Z2ggdG9vLCBzbyBsZXQncyBtYWtlIGl0IGtub3duIC4uLiBlbWl0aW5nIHRoaXMKLSAgICogc2lnbmFsIGNhbGxzIG91ciBvYmplY3QgaGFuZGxlciB3aGljaCBzZXRzIHRoZSBjYXBzLiAqLwotICBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZW1pdF9oYXZlX3R5cGUgKHR5cGVmaW5kLCBwcm9iYWJpbGl0eSwgY2Fwcyk7Ci0KLSAgLyogLi4gYW5kIHNlbmQgb3V0IHRoZSBhY2N1bXVsYXRlZCBkYXRhICovCi0gIHN0b3BfdHlwZWZpbmRpbmcgKHR5cGVmaW5kKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotbm90X2Vub3VnaF9kYXRhOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKLQotICAgIGlmIChhdF9lb3MpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SICh0eXBlZmluZCwgU1RSRUFNLCBUWVBFX05PVF9GT1VORCwKLSAgICAgICAgICAoXygiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iKSksCi0gICAgICAgICAgKCJDYW4ndCB0eXBlZmluZCBzdHJlYW0iKSk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAibm90IGVub3VnaCBkYXRhIGZvciB0eXBlZmluZGluZyB5ZXQgIgotICAgICAgICAgICIoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcykiLCBhdmFpbCk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgfQotICB9Ci1ub190eXBlX2ZvdW5kOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHlwZWZpbmQsIFNUUkVBTSwgVFlQRV9OT1RfRk9VTkQsIChOVUxMKSwgKE5VTEwpKTsKLSAgICBzdG9wX3R5cGVmaW5kaW5nICh0eXBlZmluZCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci13YWl0X2Zvcl9kYXRhOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKLQotICAgIGlmIChhdF9lb3MpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SICh0eXBlZmluZCwgU1RSRUFNLCBUWVBFX05PVF9GT1VORCwKLSAgICAgICAgICAoXygiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iKSksCi0gICAgICAgICAgKCJDYW4ndCB0eXBlZmluZCBzdHJlYW0iKSk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLAotICAgICAgICAgICJubyBjYXBzIGZvdW5kIHdpdGggJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyBvZiBkYXRhLCAiCi0gICAgICAgICAgIndhaXRpbmcgZm9yIG1vcmUgZGF0YSIsIGF2YWlsKTsKLSAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9Ci0gIH0KLWxvd19wcm9iYWJpbGl0eToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAiZm91bmQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiLCBidXQgIgotICAgICAgICAicHJvYmFiaWxpdHkgaXMgJXUgd2hpY2ggaXMgbG93ZXIgdGhhbiB0aGUgcmVxdWlyZWQgbWluaW11bSBvZiAldSIsCi0gICAgICAgIGNhcHMsIHByb2JhYmlsaXR5LCB0eXBlZmluZC0+bWluX3Byb2JhYmlsaXR5KTsKLQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGlmIChoYXZlX21heCkKLSAgICAgIGdvdG8gbm9fdHlwZV9mb3VuZDsKLQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh0eXBlZmluZCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodHlwZWZpbmQsICJ3YWl0aW5nIGZvciBtb3JlIGRhdGEgdG8gdHJ5IGFnYWluIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0cmFuZ2UgKEdzdFBhZCAqIHNyY3BhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWZmZXIpCi17Ci0gIEdzdFR5cGVGaW5kRWxlbWVudCAqdHlwZWZpbmQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChwYXJlbnQpOwotCi0gIHJldCA9IGdzdF9wYWRfcHVsbF9yYW5nZSAodHlwZWZpbmQtPnNpbmssIG9mZnNldCwgbGVuZ3RoLCBidWZmZXIpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3R5cGVfZmluZF9lbGVtZW50X2FjdGl2YXRlX3NyY19tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kOwotCi0gIHR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICAvKiBtYWtlIHN1cmUgb3VyIHRhc2sgc3RvcHMgcHVzaGluZywgd2UgY2FuJ3QgY2FsbCBfc3RvcCBoZXJlIGJlY2F1c2UgdGhpcwotICAgICAgICogYWN0aXZhdGlvbiBtaWdodCBoYXBwZW4gZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZC4gKi8KLSAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayAodHlwZWZpbmQtPnNpbmspOwotICAgICAgcmVzID0gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlICh0eXBlZmluZC0+c2luaywgbW9kZSwgYWN0aXZlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9sb29wIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFR5cGVGaW5kRWxlbWVudCAqdHlwZWZpbmQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgdHlwZWZpbmQgPSBHU1RfVFlQRV9GSU5EX0VMRU1FTlQgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKLQotICBpZiAodHlwZWZpbmQtPm5lZWRfc3RyZWFtX3N0YXJ0KSB7Ci0gICAgZ2NoYXIgKnN0cmVhbV9pZDsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBzdHJlYW1faWQgPSBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWQgKHR5cGVmaW5kLT5zcmMsCi0gICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKHR5cGVmaW5kKSwgTlVMTCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0eXBlZmluZCwgIlB1c2hpbmcgU1RSRUFNX1NUQVJUIik7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc3RyZWFtX2lkKTsKLSAgICBnc3RfZXZlbnRfc2V0X2dyb3VwX2lkIChldmVudCwgZ3N0X3V0aWxfZ3JvdXBfaWRfbmV4dCAoKSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLCBldmVudCk7Ci0KLSAgICB0eXBlZmluZC0+bmVlZF9zdHJlYW1fc3RhcnQgPSBGQUxTRTsKLSAgICBnX2ZyZWUgKHN0cmVhbV9pZCk7Ci0gIH0KLQotICBpZiAodHlwZWZpbmQtPm1vZGUgPT0gTU9ERV9UWVBFRklORCkgewotICAgIEdzdFBhZCAqcGVlciA9IE5VTEw7Ci0gICAgR3N0Q2FwcyAqZm91bmRfY2FwcyA9IE5VTEw7Ci0gICAgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSBwcm9iYWJpbGl0eSA9IEdTVF9UWVBFX0ZJTkRfTk9ORTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHR5cGVmaW5kLCAiZmluZCB0eXBlIGluIHB1bGwgbW9kZSIpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLICh0eXBlZmluZCk7Ci0gICAgaWYgKHR5cGVmaW5kLT5mb3JjZV9jYXBzKSB7Ci0gICAgICBmb3VuZF9jYXBzID0gZ3N0X2NhcHNfcmVmICh0eXBlZmluZC0+Zm9yY2VfY2Fwcyk7Ci0gICAgICBwcm9iYWJpbGl0eSA9IEdTVF9UWVBFX0ZJTkRfTUFYSU1VTTsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHR5cGVmaW5kKTsKLQotICAgIGlmICghZm91bmRfY2FwcykgewotICAgICAgcGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZCk7Ci0gICAgICBpZiAocGVlcikgewotICAgICAgICBnaW50NjQgc2l6ZTsKLSAgICAgICAgZ2NoYXIgKmV4dDsKLQotICAgICAgICBpZiAoIWdzdF9wYWRfcXVlcnlfZHVyYXRpb24gKHBlZXIsIEdTVF9GT1JNQVRfQllURVMsICZzaXplKSkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodHlwZWZpbmQsICJDb3VsZCBub3QgcXVlcnkgdXBzdHJlYW0gbGVuZ3RoISIpOwotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotCi0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgZ290byBwYXVzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHRoZSBzaXplIGlmIDAsIHdlIGNhbm5vdCBjb250aW51ZSAqLwotICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgICAgLyoga2VlcCBtZXNzYWdlIGluIHN5bmMgd2l0aCBtZXNzYWdlIGluIHNpbmsgZXZlbnQgaGFuZGxlciAqLwotICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SICh0eXBlZmluZCwgU1RSRUFNLCBUWVBFX05PVF9GT1VORCwKLSAgICAgICAgICAgICAgKF8oIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIpKSwgKCJDYW4ndCB0eXBlZmluZCBlbXB0eSBzdHJlYW0iKSk7Ci0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgZ290byBwYXVzZTsKLSAgICAgICAgfQotICAgICAgICBleHQgPSBnc3RfdHlwZV9maW5kX2dldF9leHRlbnNpb24gKHR5cGVmaW5kLCBwYWQpOwotCi0gICAgICAgIGZvdW5kX2NhcHMgPQotICAgICAgICAgICAgZ3N0X3R5cGVfZmluZF9oZWxwZXJfZ2V0X3JhbmdlIChHU1RfT0JKRUNUX0NBU1QgKHBlZXIpLAotICAgICAgICAgICAgR1NUX09CSkVDVF9QQVJFTlQgKHBlZXIpLAotICAgICAgICAgICAgKEdzdFR5cGVGaW5kSGVscGVyR2V0UmFuZ2VGdW5jdGlvbikgKEdTVF9QQURfR0VUUkFOR0VGVU5DIChwZWVyKSksCi0gICAgICAgICAgICAoZ3VpbnQ2NCkgc2l6ZSwgZXh0LCAmcHJvYmFiaWxpdHkpOwotICAgICAgICBnX2ZyZWUgKGV4dCk7Ci0KLSAgICAgICAgR1NUX0RFQlVHICgiRm91bmQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgZm91bmRfY2Fwcyk7Ci0KLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZF9jYXBzIHx8IHByb2JhYmlsaXR5IDwgdHlwZWZpbmQtPm1pbl9wcm9iYWJpbGl0eSkgewotICAgICAgR1NUX0RFQlVHICgiVHJ5aW5nIHRvIGd1ZXNzIHVzaW5nIGV4dGVuc2lvbiIpOwotICAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJmZvdW5kX2NhcHMsIE5VTEwpOwotICAgICAgZm91bmRfY2FwcyA9Ci0gICAgICAgICAgZ3N0X3R5cGVfZmluZF9ndWVzc19ieV9leHRlbnNpb24gKHR5cGVmaW5kLCBwYWQsICZwcm9iYWJpbGl0eSk7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZF9jYXBzIHx8IHByb2JhYmlsaXR5IDwgdHlwZWZpbmQtPm1pbl9wcm9iYWJpbGl0eSkgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHR5cGVmaW5kLCBTVFJFQU0sIFRZUEVfTk9UX0ZPVU5ELCAoTlVMTCksIChOVUxMKSk7Ci0gICAgICBnc3RfY2Fwc19yZXBsYWNlICgmZm91bmRfY2FwcywgTlVMTCk7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgIGdvdG8gcGF1c2U7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHICgiRW1pdGluZyBmb3VuZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBmb3VuZF9jYXBzKTsKLSAgICBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZW1pdF9oYXZlX3R5cGUgKHR5cGVmaW5kLCBwcm9iYWJpbGl0eSwgZm91bmRfY2Fwcyk7Ci0gICAgdHlwZWZpbmQtPm1vZGUgPSBNT0RFX05PUk1BTDsKLSAgICBnc3RfY2Fwc191bnJlZiAoZm91bmRfY2Fwcyk7Ci0gIH0gZWxzZSBpZiAodHlwZWZpbmQtPm1vZGUgPT0gTU9ERV9OT1JNQUwpIHsKLSAgICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0KLSAgICBpZiAodHlwZWZpbmQtPm5lZWRfc2VnbWVudCkgewotICAgICAgdHlwZWZpbmQtPm5lZWRfc2VnbWVudCA9IEZBTFNFOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0eXBlZmluZC0+c3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnR5cGVmaW5kLT5zZWdtZW50KSk7Ci0gICAgfQotCi0gICAgLyogUHVsbCA0ayBibG9ja3MgYW5kIHNlbmQgZG93bnN0cmVhbSAqLwotICAgIHJldCA9IGdzdF9wYWRfcHVsbF9yYW5nZSAodHlwZWZpbmQtPnNpbmssIHR5cGVmaW5kLT5vZmZzZXQsIDQwOTYsICZvdXRidWYpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIHBhdXNlOwotCi0gICAgdHlwZWZpbmQtPm9mZnNldCArPSBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpOwotCi0gICAgcmV0ID0gZ3N0X3BhZF9wdXNoICh0eXBlZmluZC0+c3JjLCBvdXRidWYpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIHBhdXNlOwotICB9IGVsc2UgewotICAgIC8qIEVycm9yIG91dCAqLwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gcGF1c2U7Ci0gIH0KLQotICByZXR1cm47Ci0KLXBhdXNlOgotICB7Ci0gICAgY29uc3QgZ2NoYXIgKnJlYXNvbiA9IGdzdF9mbG93X2dldF9uYW1lIChyZXQpOwotICAgIGdib29sZWFuIHB1c2hfZW9zID0gRkFMU0U7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAodHlwZWZpbmQsICJwYXVzaW5nIHRhc2ssIHJlYXNvbiAlcyIsIHJlYXNvbik7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrICh0eXBlZmluZC0+c2luayk7Ci0KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogcGVyZm9ybSBFT1MgbG9naWMgKi8KLQotICAgICAgaWYgKHR5cGVmaW5kLT5zZWdtZW50LmZsYWdzICYgR1NUX1NFR01FTlRfRkxBR19TRUdNRU5UKSB7Ci0gICAgICAgIGdpbnQ2NCBzdG9wOwotCi0gICAgICAgIC8qIGZvciBzZWdtZW50IHBsYXliYWNrIHdlIG5lZWQgdG8gcG9zdCB3aGVuIChpbiBzdHJlYW0gdGltZSkKLSAgICAgICAgICogd2Ugc3RvcHBlZCwgdGhpcyBpcyBlaXRoZXIgc3RvcCAod2hlbiBzZXQpIG9yIHRoZSBkdXJhdGlvbi4gKi8KLSAgICAgICAgaWYgKChzdG9wID0gdHlwZWZpbmQtPnNlZ21lbnQuc3RvcCkgPT0gLTEpCi0gICAgICAgICAgc3RvcCA9IHR5cGVmaW5kLT5vZmZzZXQ7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHR5cGVmaW5kLCAiU2VuZGluZyBzZWdtZW50IGRvbmUsIGF0IGVuZCBvZiBzZWdtZW50Iik7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHR5cGVmaW5kKSwKLSAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUgKEdTVF9PQkpFQ1QgKHR5cGVmaW5kKSwKLSAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBzdG9wKSk7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAodHlwZWZpbmQtPnNyYywKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lIChHU1RfRk9STUFUX0JZVEVTLCBzdG9wKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX2VvcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXQgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIGZvciBmYXRhbCBlcnJvcnMgd2UgcG9zdCBhbiBlcnJvciBtZXNzYWdlICovCi0gICAgICBHU1RfRUxFTUVOVF9GTE9XX0VSUk9SICh0eXBlZmluZCwgcmV0KTsKLSAgICAgIHB1c2hfZW9zID0gVFJVRTsKLSAgICB9Ci0gICAgaWYgKHB1c2hfZW9zKSB7Ci0gICAgICAvKiBzZW5kIEVPUywgYW5kIHByZXZlbnQgaGFuZ2luZyBpZiBubyBzdHJlYW1zIHlldCAqLwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHR5cGVmaW5kLCAiU2VuZGluZyBFT1MsIGF0IGVuZCBvZiBzdHJlYW0iKTsKLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAodHlwZWZpbmQtPnNyYywgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdHlwZV9maW5kX2VsZW1lbnRfYWN0aXZhdGVfc2lua19tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RUeXBlRmluZEVsZW1lbnQgKnR5cGVmaW5kOwotCi0gIHR5cGVmaW5kID0gR1NUX1RZUEVfRklORF9FTEVNRU5UIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZ0eXBlZmluZC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgICAgIHR5cGVmaW5kLT5uZWVkX3NlZ21lbnQgPSBUUlVFOwotICAgICAgICB0eXBlZmluZC0+bmVlZF9zdHJlYW1fc3RhcnQgPSBUUlVFOwotICAgICAgICB0eXBlZmluZC0+b2Zmc2V0ID0gMDsKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfc3RvcF90YXNrIChwYWQpOwotICAgICAgICBnc3Rfc2VnbWVudF9pbml0ICgmdHlwZWZpbmQtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZ0eXBlZmluZC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICAgICAgICBzdGFydF90eXBlZmluZGluZyAodHlwZWZpbmQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RvcF90eXBlZmluZGluZyAodHlwZWZpbmQpOwotICAgICAgICBnc3Rfc2VnbWVudF9pbml0ICgmdHlwZWZpbmQtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIH0KLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90eXBlX2ZpbmRfZWxlbWVudF9hY3RpdmF0ZV9zaW5rIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiBwdWxsX21vZGU7Ci0gIEdzdFNjaGVkdWxpbmdGbGFncyBzY2hlZF9mbGFnczsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAoKTsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSkpIHsKLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgICBnb3RvIHR5cGVmaW5kX3B1c2g7Ci0gIH0KLQotICBnc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZyAocXVlcnksICZzY2hlZF9mbGFncywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgcHVsbF9tb2RlID0gZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGUgKHF1ZXJ5LCBHU1RfUEFEX01PREVfUFVMTCkKLSAgICAgICYmICgoc2NoZWRfZmxhZ3MgJiBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFKSAhPSAwKTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICBpZiAoIXB1bGxfbW9kZSkKLSAgICBnb3RvIHR5cGVmaW5kX3B1c2g7Ci0KLSAgaWYgKCFnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHBhZCwgR1NUX1BBRF9NT0RFX1BVTEwsIFRSVUUpKQotICAgIGdvdG8gdHlwZWZpbmRfcHVzaDsKLQotICAvKiBvbmx5IHN0YXJ0IG91ciB0YXNrIGlmIHdlIG91cnNlbHZlcyBkZWNpZGUgdG8gc3RhcnQgaW4gcHVsbCBtb2RlICovCi0gIHJldHVybiBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHBhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X3R5cGVfZmluZF9lbGVtZW50X2xvb3AsCi0gICAgICBwYWQsIE5VTEwpOwotCi10eXBlZmluZF9wdXNoOgotICB7Ci0gICAgcmV0dXJuIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAocGFkLCBHU1RfUEFEX01PREVfUFVTSCwgVFJVRSk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfdHlwZV9maW5kX2VsZW1lbnRfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFR5cGVGaW5kRWxlbWVudCAqdHlwZWZpbmQ7Ci0KLSAgdHlwZWZpbmQgPSBHU1RfVFlQRV9GSU5EX0VMRU1FTlQgKGVsZW1lbnQpOwotCi0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAodHlwZWZpbmQpOwotICAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnR5cGVmaW5kLT5jYXBzLCBOVUxMKTsKLQotICAgICAgZ19saXN0X2ZvcmVhY2ggKHR5cGVmaW5kLT5jYWNoZWRfZXZlbnRzLAotICAgICAgICAgIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgICAgIGdfbGlzdF9mcmVlICh0eXBlZmluZC0+Y2FjaGVkX2V2ZW50cyk7Ci0gICAgICB0eXBlZmluZC0+Y2FjaGVkX2V2ZW50cyA9IE5VTEw7Ci0gICAgICB0eXBlZmluZC0+bW9kZSA9IE1PREVfVFlQRUZJTkQ7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAodHlwZWZpbmQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTUyNjIyLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLSAqCi0gKiBnc3R0eXBlZmluZGVsZW1lbnQuaDogZWxlbWVudCB0aGF0IGRldGVjdHMgdHlwZSBvZiBzdHJlYW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfVFlQRV9GSU5EX0VMRU1FTlRfSF9fCi0jZGVmaW5lIF9fR1NUX1RZUEVfRklORF9FTEVNRU5UX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGluZm8uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5UCQkoZ3N0X3R5cGVfZmluZF9lbGVtZW50X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfVFlQRV9GSU5EX0VMRU1FTlQob2JqKSAJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5ULCBHc3RUeXBlRmluZEVsZW1lbnQpKQotI2RlZmluZSBHU1RfSVNfVFlQRV9GSU5EX0VMRU1FTlQob2JqKSAJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5UKSkKLSNkZWZpbmUgR1NUX1RZUEVfRklORF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9UWVBFX0ZJTkRfRUxFTUVOVCwgR3N0VHlwZUZpbmRFbGVtZW50Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVFlQRV9GSU5EX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIAkoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1RZUEVfRklORF9FTEVNRU5UKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFR5cGVGaW5kRWxlbWVudCAJCUdzdFR5cGVGaW5kRWxlbWVudDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUeXBlRmluZEVsZW1lbnRDbGFzcyAJR3N0VHlwZUZpbmRFbGVtZW50Q2xhc3M7Ci0KLS8qKgotICogR3N0VHlwZUZpbmRFbGVtZW50OgotICoKLSAqIE9wYXF1ZSAjR3N0VHlwZUZpbmRFbGVtZW50IGRhdGEgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBfR3N0VHlwZUZpbmRFbGVtZW50IHsKLSAgR3N0RWxlbWVudAkJZWxlbWVudDsKLQotICBHc3RQYWQgKgkJc2luazsKLSAgR3N0UGFkICoJCXNyYzsKLQotICBndWludAkJCW1pbl9wcm9iYWJpbGl0eTsKLSAgR3N0Q2FwcyAqCQljYXBzOwotCi0gIGd1aW50CQkJbW9kZTsKLSAgR3N0QWRhcHRlciAqCQlhZGFwdGVyOwotCi0gIEdMaXN0ICogICAgICAgICAgICAgICBjYWNoZWRfZXZlbnRzOwotICBHc3RDYXBzICogICAgICAgICAgICAgZm9yY2VfY2FwczsKLQotICBndWludDY0CQlpbml0aWFsX29mZnNldDsKLSAgCi0gIC8qIE9ubHkgdXNlZCB3aGVuIGRyaXZpbmcgdGhlIHBpcGVsaW5lICovCi0gIGdib29sZWFuIG5lZWRfc2VnbWVudDsKLSAgZ2Jvb2xlYW4gbmVlZF9zdHJlYW1fc3RhcnQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFR5cGVGaW5kRWxlbWVudENsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIAlwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyAqLwotICB2b2lkIAkJCSgqaGF2ZV90eXBlKSAJKEdzdFR5cGVGaW5kRWxlbWVudCAqZWxlbWVudCwKLQkJCQkJIGd1aW50CQkgICAgIHByb2JhYmlsaXR5LAotCQkJCQkgR3N0Q2FwcyAgICAgICAgICAgICpjYXBzKTsKLX07Ci0KLUdfR05VQ19JTlRFUk5BTCBHVHlwZSBnc3RfdHlwZV9maW5kX2VsZW1lbnRfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVFlQRV9GSU5EX0VMRU1FTlRfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdHZhbHZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Y2M5NjUuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qIEdTdHJlYW1lciB2YWx2ZSBlbGVtZW50Ci0gKiAgQ29weXJpZ2h0IDIwMDctMjAwOSBDb2xsYWJvcmEgTHRkCi0gKiAgIEBhdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotICogIENvcHlyaWdodCAyMDA3LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtdmFsdmUKLSAqCi0gKiBUaGUgdmFsdmUgaXMgYSBzaW1wbGUgZWxlbWVudCB0aGF0IGRyb3BzIGJ1ZmZlcnMgd2hlbiB0aGUgI0dzdFZhbHZlOmRyb3AKLSAqIHByb3BlcnR5IGlzIHNldCB0byAlVFJVRSBhbmQgbGV0cyB0aGVuIHRocm91Z2ggb3RoZXJ3aXNlLgotICoKLSAqIEFueSBkb3duc3RyZWFtIGVycm9yIHJlY2VpdmVkIHdoaWxlIHRoZSAjR3N0VmFsdmU6ZHJvcCBwcm9wZXJ0eSBpcyAlVFJVRQotICogaXMgaWdub3JlZC4gU28gZG93bnN0cmVhbSBlbGVtZW50IGNhbiBiZSBzZXQgdG8gICVHU1RfU1RBVEVfTlVMTCBhbmQgcmVtb3ZlZCwKLSAqIHdpdGhvdXQgdXNpbmcgcGFkIGJsb2NraW5nLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHZhbHZlLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAodmFsdmVfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHZhbHZlX2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfRFJPUAotfTsKLQotI2RlZmluZSBERUZBVUxUX0RST1AgRkFMU0UKLQotc3RhdGljIHZvaWQgZ3N0X3ZhbHZlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF92YWx2ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92YWx2ZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdmFsdmVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3ZhbHZlX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotI2RlZmluZSBfZG9faW5pdCBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh2YWx2ZV9kZWJ1ZywgInZhbHZlIiwgMCwgIlZhbHZlIik7Ci0jZGVmaW5lIGdzdF92YWx2ZV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VmFsdmUsIGdzdF92YWx2ZSwgR1NUX1RZUEVfRUxFTUVOVCwgX2RvX2luaXQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHZlX2NsYXNzX2luaXQgKEdzdFZhbHZlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3ZhbHZlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3ZhbHZlX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RST1AsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImRyb3AiLCAiRHJvcCBidWZmZXJzIGFuZCBldmVudHMiLAotICAgICAgICAgICJXaGV0aGVyIHRvIGRyb3AgYnVmZmVycyBhbmQgZXZlbnRzIG9yIGxldCB0aGVtIHRocm91Z2giLAotICAgICAgICAgIERFRkFVTFRfRFJPUCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmN0ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiVmFsdmUgZWxlbWVudCIsCi0gICAgICAiRmlsdGVyIiwgIkRyb3BzIGJ1ZmZlcnMgYW5kIGV2ZW50cyBvciBsZXRzIHRoZW0gdGhyb3VnaCIsCi0gICAgICAiT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdmVfaW5pdCAoR3N0VmFsdmUgKiB2YWx2ZSkKLXsKLSAgdmFsdmUtPmRyb3AgPSBGQUxTRTsKLSAgdmFsdmUtPmRpc2NvbnQgPSBGQUxTRTsKLQotICB2YWx2ZS0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmN0ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAodmFsdmUtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmFsdmVfcXVlcnkpKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUyAodmFsdmUtPnNyY3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UICh2YWx2ZSksIHZhbHZlLT5zcmNwYWQpOwotCi0gIHZhbHZlLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsICJzaW5rIik7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uICh2YWx2ZS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmFsdmVfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHZhbHZlLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92YWx2ZV9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uICh2YWx2ZS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmFsdmVfcXVlcnkpKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUyAodmFsdmUtPnNpbmtwYWQpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9BTExPQ0FUSU9OICh2YWx2ZS0+c2lua3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UICh2YWx2ZSksIHZhbHZlLT5zaW5rcGFkKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZhbHZlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWYWx2ZSAqdmFsdmUgPSBHU1RfVkFMVkUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RST1A6Ci0gICAgICBnX2F0b21pY19pbnRfc2V0ICgmdmFsdmUtPmRyb3AsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHZhbHZlLT5zaW5rcGFkLCBnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICgpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92YWx2ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmFsdmUgKnZhbHZlID0gR1NUX1ZBTFZFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9EUk9QOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGdfYXRvbWljX2ludF9nZXQgKCZ2YWx2ZS0+ZHJvcCkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZm9yd2FyZF9zdGlja3lfZXZlbnRzIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICoqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFZhbHZlICp2YWx2ZSA9IHVzZXJfZGF0YTsKLQotICBpZiAoIWdzdF9wYWRfcHVzaF9ldmVudCAodmFsdmUtPnNyY3BhZCwgZ3N0X2V2ZW50X3JlZiAoKmV2ZW50KSkpCi0gICAgdmFsdmUtPm5lZWRfcmVwdXNoX3N0aWNreSA9IFRSVUU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmFsdmVfcmVwdXNoX3N0aWNreSAoR3N0VmFsdmUgKiB2YWx2ZSkKLXsKLSAgdmFsdmUtPm5lZWRfcmVwdXNoX3N0aWNreSA9IEZBTFNFOwotICBnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAodmFsdmUtPnNpbmtwYWQsIGZvcndhcmRfc3RpY2t5X2V2ZW50cywgdmFsdmUpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3ZhbHZlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RWYWx2ZSAqdmFsdmUgPSBHU1RfVkFMVkUgKHBhcmVudCk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZ2YWx2ZS0+ZHJvcCkpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHZhbHZlLT5kaXNjb250ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBpZiAodmFsdmUtPmRpc2NvbnQpIHsKLSAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmZmVyKTsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgdmFsdmUtPmRpc2NvbnQgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAodmFsdmUtPm5lZWRfcmVwdXNoX3N0aWNreSkKLSAgICAgIGdzdF92YWx2ZV9yZXB1c2hfc3RpY2t5ICh2YWx2ZSk7Ci0KLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHZhbHZlLT5zcmNwYWQsIGJ1ZmZlcik7Ci0gIH0KLQotCi0gIC8qIElnbm9yZSBlcnJvcnMgaWYgImRyb3AiIHdhcyBjaGFuZ2VkIHdoaWxlIHRoZSB0aHJlYWQgd2FzIGJsb2NrZWQKLSAgICogZG93bndhcmRzCi0gICAqLwotICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnZhbHZlLT5kcm9wKSkKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLQotICByZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZhbHZlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RWYWx2ZSAqdmFsdmU7Ci0gIGdib29sZWFuIGlzX3N0aWNreSA9IEdTVF9FVkVOVF9JU19TVElDS1kgKGV2ZW50KTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICB2YWx2ZSA9IEdTVF9WQUxWRSAocGFyZW50KTsKLQotICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnZhbHZlLT5kcm9wKSkgewotICAgIHZhbHZlLT5uZWVkX3JlcHVzaF9zdGlja3kgfD0gaXNfc3RpY2t5OwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9IGVsc2UgewotICAgIGlmICh2YWx2ZS0+bmVlZF9yZXB1c2hfc3RpY2t5KQotICAgICAgZ3N0X3ZhbHZlX3JlcHVzaF9zdGlja3kgKHZhbHZlKTsKLSAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gIH0KLQotICAvKiBJZ25vcmUgZXJyb3JzIGlmICJkcm9wIiB3YXMgY2hhbmdlZCB3aGlsZSB0aGUgdGhyZWFkIHdhcyBibG9ja2VkCi0gICAqIGRvd253YXJkcy4KLSAgICovCi0gIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmdmFsdmUtPmRyb3ApKSB7Ci0gICAgdmFsdmUtPm5lZWRfcmVwdXNoX3N0aWNreSB8PSBpc19zdGlja3k7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92YWx2ZV9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFZhbHZlICp2YWx2ZSA9IEdTVF9WQUxWRSAocGFyZW50KTsKLQotICBpZiAoR1NUX1FVRVJZX0lTX1NFUklBTElaRUQgKHF1ZXJ5KSAmJiBnX2F0b21pY19pbnRfZ2V0ICgmdmFsdmUtPmRyb3ApKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oIGIvcGx1Z2lucy9lbGVtZW50cy9nc3R2YWx2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjNjMjllLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0dmFsdmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qIEdTdHJlYW1lciB2YWx2ZSBlbGVtZW50Ci0gKgotICogIENvcHlyaWdodCAyMDA3IENvbGxhYm9yYSBMdGQsIAotICogIENvcHlyaWdodCAyMDA3IE5va2lhIENvcnBvcmF0aW9uCi0gKiAgIEBhdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1ZBTFZFX0hfXwotI2RlZmluZSBfX0dTVF9WQUxWRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotLyogI2RlZmluZSdzIGRvbid0IGxpa2Ugd2hpdGVzcGFjZXkgYml0cyAqLwotI2RlZmluZSBHU1RfVFlQRV9WQUxWRSBcCi0gIChnc3RfdmFsdmVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1ZBTFZFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFwKLSAgR1NUX1RZUEVfVkFMVkUsR3N0VmFsdmUpKQotI2RlZmluZSBHU1RfVkFMVkVfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFwKLSAgR1NUX1RZUEVfVkFMVkUsR3N0VmFsdmVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WQUxWRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1ZBTFZFKSkKLSNkZWZpbmUgR1NUX0lTX1ZBTFZFX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WQUxWRSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWYWx2ZSBHc3RWYWx2ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWYWx2ZUNsYXNzIEdzdFZhbHZlQ2xhc3M7Ci0KLS8qKgotICogR3N0VmFsdmU6Ci0gKgotICogVGhlIHByaXZhdGUgdmFsdmUgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBfR3N0VmFsdmUKLXsKLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdEVsZW1lbnQgcGFyZW50OwotCi0gIC8qIGF0b21pYyBib29sZWFuICovCi0gIHZvbGF0aWxlIGdpbnQgZHJvcDsKLQotICAvKiBQcm90ZWN0ZWQgYnkgdGhlIHN0cmVhbSBsb2NrICovCi0gIGdib29sZWFuIGRpc2NvbnQ7Ci0gIGdib29sZWFuIG5lZWRfcmVwdXNoX3N0aWNreTsKLQotICBHc3RQYWQgKnNyY3BhZDsKLSAgR3N0UGFkICpzaW5rcGFkOwotfTsKLQotc3RydWN0IF9Hc3RWYWx2ZUNsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X3ZhbHZlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1ZBTFZFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy90cmFjZXJzL01ha2VmaWxlLmFtIGIvcGx1Z2lucy90cmFjZXJzL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTE0NDQ3Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLQotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0Y29yZXRyYWNlcnMubGEKLQotaWYgSEFWRV9HRVRSVVNBR0UKLVJVU0FHRV9TT1VSQ0VTID0gZ3N0cnVzYWdlLmMKLWVsc2UKLVJVU0FHRV9TT1VSQ0VTID0KLWVuZGlmCi0KLWlmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotTE9HX1NPVVJDRVMgPQotR1NUX1BSSU5URl9MQSA9Ci1lbHNlCi1MT0dfU09VUkNFUyA9IGdzdGxvZy5jCi1HU1RfUFJJTlRGX0xBID0gJCh0b3BfYnVpbGRkaXIpL2dzdC9wcmludGYvbGliZ3N0cHJpbnRmLmxhCi1lbmRpZgotCi1saWJnc3Rjb3JldHJhY2Vyc19sYV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvZ3N0L2xpYmdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQC5sYQotbGliZ3N0Y29yZXRyYWNlcnNfbGFfU09VUkNFUyA9IFwKLSAgZ3N0bGF0ZW5jeS5jIFwKLSAgZ3N0bGVha3MuYyBcCi0gICQoTE9HX1NPVVJDRVMpIFwKLSAgJChSVVNBR0VfU09VUkNFUykgXAotICBnc3RzdGF0cy5jIFwKLSAgZ3N0dHJhY2Vycy5jCi0KLWxpYmdzdGNvcmV0cmFjZXJzX2xhX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpIFwKLSAgLURHU1RfVVNFX1VOU1RBQkxFX0FQSQotbGliZ3N0Y29yZXRyYWNlcnNfbGFfTElCQUREID0gXAotCSQoR1NUX1BSSU5URl9MQSkgXAotCSQoR1NUX09CSl9MSUJTKSBcCi0JJChVTldJTkRfTElCUykKLWxpYmdzdGNvcmV0cmFjZXJzX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGNvcmV0cmFjZXJzX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gXAotICBnc3RsYXRlbmN5LmggXAotICBnc3RsZWFrcy5oIFwKLSAgZ3N0bG9nLmggXAotICBnc3RydXNhZ2UuaCBcCi0gIGdzdHN0YXRzLmgKLQotQ0xFQU5GSUxFUyA9ICouZ2NubyAqLmdjZGEgKi5nY292ICouZ2Nvdi5vdXQKLQotJS5jLmdjb3Y6IC5saWJzL2xpYmdzdGNvcmV0cmFjZXJzX2xhLSUuZ2NkYSAlLmMKLQkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0Ci0KLWdjb3Y6ICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfU09VUkNFUzo9Lmdjb3YpCi0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5pbiBiL3BsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBmY2FiOS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL3RyYWNlcnMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NTMgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gcGx1Z2lucy90cmFjZXJzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1AR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFQGFtX19ERVBFTkRFTkNJRVNfMSA9ICQodG9wX2J1aWxkZGlyKS9nc3QvcHJpbnRmL2xpYmdzdHByaW50Zi5sYQotYW1fX0RFUEVOREVOQ0lFU18yID0KLWFtX19saWJnc3Rjb3JldHJhY2Vyc19sYV9TT1VSQ0VTX0RJU1QgPSBnc3RsYXRlbmN5LmMgZ3N0bGVha3MuYyBcCi0JZ3N0bG9nLmMgZ3N0cnVzYWdlLmMgZ3N0c3RhdHMuYyBnc3R0cmFjZXJzLmMKLUBHU1RfRElTQUJMRV9HU1RfREVCVUdfRkFMU0VAYW1fX29iamVjdHNfMSA9ICBcCi1AR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFQAlsaWJnc3Rjb3JldHJhY2Vyc19sYS1nc3Rsb2cubG8KLUBIQVZFX0dFVFJVU0FHRV9UUlVFQGFtX19vYmplY3RzXzIgPSAgXAotQEhBVkVfR0VUUlVTQUdFX1RSVUVACWxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHJ1c2FnZS5sbwotYW1fbGliZ3N0Y29yZXRyYWNlcnNfbGFfT0JKRUNUUyA9IGxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxhdGVuY3kubG8gXAotCWxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxlYWtzLmxvICQoYW1fX29iamVjdHNfMSkgXAotCSQoYW1fX29iamVjdHNfMikgbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0c3RhdHMubG8gXAotCWxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHRyYWNlcnMubG8KLWxpYmdzdGNvcmV0cmFjZXJzX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGNvcmV0cmFjZXJzX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3Rjb3JldHJhY2Vyc19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0Y29yZXRyYWNlcnNfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoYW1fX2xpYmdzdGNvcmV0cmFjZXJzX2xhX1NPVVJDRVNfRElTVCkKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3Rjb3JldHJhY2Vycy5sYQotQEhBVkVfR0VUUlVTQUdFX0ZBTFNFQFJVU0FHRV9TT1VSQ0VTID0gCi1ASEFWRV9HRVRSVVNBR0VfVFJVRUBSVVNBR0VfU09VUkNFUyA9IGdzdHJ1c2FnZS5jCi1AR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFQExPR19TT1VSQ0VTID0gZ3N0bG9nLmMKLUBHU1RfRElTQUJMRV9HU1RfREVCVUdfVFJVRUBMT0dfU09VUkNFUyA9IAotQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19GQUxTRUBHU1RfUFJJTlRGX0xBID0gJCh0b3BfYnVpbGRkaXIpL2dzdC9wcmludGYvbGliZ3N0cHJpbnRmLmxhCi1AR1NUX0RJU0FCTEVfR1NUX0RFQlVHX1RSVUVAR1NUX1BSSU5URl9MQSA9IAotbGliZ3N0Y29yZXRyYWNlcnNfbGFfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2dzdC9saWJnc3RyZWFtZXItQEdTVF9BUElfVkVSU0lPTkAubGEKLWxpYmdzdGNvcmV0cmFjZXJzX2xhX1NPVVJDRVMgPSBcCi0gIGdzdGxhdGVuY3kuYyBcCi0gIGdzdGxlYWtzLmMgXAotICAkKExPR19TT1VSQ0VTKSBcCi0gICQoUlVTQUdFX1NPVVJDRVMpIFwKLSAgZ3N0c3RhdHMuYyBcCi0gIGdzdHRyYWNlcnMuYwotCi1saWJnc3Rjb3JldHJhY2Vyc19sYV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSBcCi0gIC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkKLQotbGliZ3N0Y29yZXRyYWNlcnNfbGFfTElCQUREID0gXAotCSQoR1NUX1BSSU5URl9MQSkgXAotCSQoR1NUX09CSl9MSUJTKSBcCi0JJChVTldJTkRfTElCUykKLQotbGliZ3N0Y29yZXRyYWNlcnNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0Y29yZXRyYWNlcnNfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gXAotICBnc3RsYXRlbmN5LmggXAotICBnc3RsZWFrcy5oIFwKLSAgZ3N0bG9nLmggXAotICBnc3RydXNhZ2UuaCBcCi0gIGdzdHN0YXRzLmgKLQotQ0xFQU5GSUxFUyA9ICouZ2NubyAqLmdjZGEgKi5nY292ICouZ2Nvdi5vdXQKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHBsdWdpbnMvdHJhY2Vycy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBwbHVnaW5zL3RyYWNlcnMvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3Rjb3JldHJhY2Vycy5sYTogJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9PQkpFQ1RTKSAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3Rjb3JldHJhY2Vyc19sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0Y29yZXRyYWNlcnNfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX09CSkVDVFMpICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsYXRlbmN5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0bGVha3MuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3Rsb2cuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RydXNhZ2UuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RzdGF0cy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHRyYWNlcnMuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxhdGVuY3kubG86IGdzdGxhdGVuY3kuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsYXRlbmN5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsYXRlbmN5LlRwbyAtYyAtbyBsaWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsYXRlbmN5LmxvIGB0ZXN0IC1mICdnc3RsYXRlbmN5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGxhdGVuY3kuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0bGF0ZW5jeS5UcG8gJChERVBESVIpL2xpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxhdGVuY3kuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bGF0ZW5jeS5jJyBvYmplY3Q9J2xpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxhdGVuY3kubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsYXRlbmN5LmxvIGB0ZXN0IC1mICdnc3RsYXRlbmN5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGxhdGVuY3kuYwotCi1saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsZWFrcy5sbzogZ3N0bGVha3MuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsZWFrcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0bGVha3MuVHBvIC1jIC1vIGxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxlYWtzLmxvIGB0ZXN0IC1mICdnc3RsZWFrcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RsZWFrcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsZWFrcy5UcG8gJChERVBESVIpL2xpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxlYWtzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGxlYWtzLmMnIG9iamVjdD0nbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0bGVha3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RsZWFrcy5sbyBgdGVzdCAtZiAnZ3N0bGVha3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bGVha3MuYwotCi1saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3Rsb2cubG86IGdzdGxvZy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxvZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0bG9nLlRwbyAtYyAtbyBsaWJnc3Rjb3JldHJhY2Vyc19sYS1nc3Rsb2cubG8gYHRlc3QgLWYgJ2dzdGxvZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rsb2cuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0bG9nLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0bG9nLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGxvZy5jJyBvYmplY3Q9J2xpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxvZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdGxvZy5sbyBgdGVzdCAtZiAnZ3N0bG9nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGxvZy5jCi0KLWxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHJ1c2FnZS5sbzogZ3N0cnVzYWdlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0cnVzYWdlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RydXNhZ2UuVHBvIC1jIC1vIGxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHJ1c2FnZS5sbyBgdGVzdCAtZiAnZ3N0cnVzYWdlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ1c2FnZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RydXNhZ2UuVHBvICQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RydXNhZ2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnVzYWdlLmMnIG9iamVjdD0nbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0cnVzYWdlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0cnVzYWdlLmxvIGB0ZXN0IC1mICdnc3RydXNhZ2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnVzYWdlLmMKLQotbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0c3RhdHMubG86IGdzdHN0YXRzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rjb3JldHJhY2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0c3RhdHMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHN0YXRzLlRwbyAtYyAtbyBsaWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RzdGF0cy5sbyBgdGVzdCAtZiAnZ3N0c3RhdHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3RhdHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0c3RhdHMuVHBvICQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3RzdGF0cy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzdGF0cy5jJyBvYmplY3Q9J2xpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHN0YXRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0c3RhdHMubG8gYHRlc3QgLWYgJ2dzdHN0YXRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHN0YXRzLmMKLQotbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0dHJhY2Vycy5sbzogZ3N0dHJhY2Vycy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHRyYWNlcnMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHRyYWNlcnMuVHBvIC1jIC1vIGxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHRyYWNlcnMubG8gYHRlc3QgLWYgJ2dzdHRyYWNlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHJhY2Vycy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rjb3JldHJhY2Vyc19sYS1nc3R0cmFjZXJzLlRwbyAkKERFUERJUikvbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0dHJhY2Vycy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R0cmFjZXJzLmMnIG9iamVjdD0nbGliZ3N0Y29yZXRyYWNlcnNfbGEtZ3N0dHJhY2Vycy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNvcmV0cmFjZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNvcmV0cmFjZXJzX2xhLWdzdHRyYWNlcnMubG8gYHRlc3QgLWYgJ2dzdHRyYWNlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dHJhY2Vycy5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotJS5jLmdjb3Y6IC5saWJzL2xpYmdzdGNvcmV0cmFjZXJzX2xhLSUuZ2NkYSAlLmMKLQkkKEdDT1YpIC1iIC1mIC1vICReID4gJEAub3V0Ci0KLWdjb3Y6ICQobGliZ3N0Y29yZXRyYWNlcnNfbGFfU09VUkNFUzo9Lmdjb3YpCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmMgYi9wbHVnaW5zL3RyYWNlcnMvZ3N0bGF0ZW5jeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjU3NDZiLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3RsYXRlbmN5LmM6IHRyYWNpbmcgbW9kdWxlIHRoYXQgbG9ncyBwcm9jZXNzaW5nIGxhdGVuY3kgc3RhdHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmdzdGxhdGVuY3kKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogbG9nIHByb2Nlc3NpbmcgbGF0ZW5jeSBzdGF0cwotICoKLSAqIEEgdHJhY2luZyBtb2R1bGUgdGhhdCBkZXRlcm1pbmVzIHNyYy10by1zaW5rIGxhdGVuY2llcyBieSBpbmplY3RpbmcgY3VzdG9tCi0gKiBldmVudHMgYXQgc291cmNlcyBhbmQgcHJvY2VzcyB0aGVtIGF0IHNpbmtzLgotICovCi0vKiBUT0RPKGVuc29uaWMpOiBpZiB0aGVyZSBhcmUgdHdvIHNvdXJjZXMgZmVlZGluZyBpbnRvIGEgbWl4ZXIvbXV4ZXIgYW5kIGxhdGVyCi0gKiB3ZSBmYW4tb3V0IHdpdGggdGVlIGFuZCBoYXZlIHR3byBzaW5rcywgZWFjaCBzaW5rIHdvdWxkIGdldCBhbGwgdHdvIGV2ZW50cywKLSAqIHRoZSBsYXRlciBldmVudCB3b3VsZCBvdmVyd3JpdGUgdGhlIGZvcm1lci4gVW5mb3J0dW5hdGVseSB3aGVuIHRoZSBidWZmZXIKLSAqIGFycml2ZXMgb24gdGhlIHNpbmsgd2UgZG9uJ3Qga25vdyB0byB3aGljaCBldmVudCBpdCBjb3JyZWxhdGVzLiBCZXR0ZXIgd291bGQKLSAqIGJlIHRvIHVzZSB0aGUgYnVmZmVyIG1ldGEgaW4gMS4wIGluc3RlYWQgb2YgdGhlIGV2ZW50LiBPciB3ZSB0cmFjayBhIG1pbi9tYXgKLSAqIGxhdGVuY3kuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RsYXRlbmN5LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9sYXRlbmN5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9sYXRlbmN5X2RlYnVnCi0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfbGF0ZW5jeV9kZWJ1ZywgImxhdGVuY3kiLCAwLCAibGF0ZW5jeSB0cmFjZXIiKTsKLSNkZWZpbmUgZ3N0X2xhdGVuY3lfdHJhY2VyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RMYXRlbmN5VHJhY2VyLCBnc3RfbGF0ZW5jeV90cmFjZXIsIEdTVF9UWVBFX1RSQUNFUiwKLSAgICBfZG9faW5pdCk7Ci0KLXN0YXRpYyBHUXVhcmsgbGF0ZW5jeV9wcm9iZV9pZDsKLXN0YXRpYyBHUXVhcmsgbGF0ZW5jeV9wcm9iZV9wYWQ7Ci1zdGF0aWMgR1F1YXJrIGxhdGVuY3lfcHJvYmVfdHM7Ci0KLXN0YXRpYyBHc3RUcmFjZXJSZWNvcmQgKnRyX2xhdGVuY3k7Ci0KLS8qIGRhdGEgaGVscGVycyAqLwotCi0vKgotICogR2V0IHRoZSBlbGVtZW50L2JpbiBvd25pbmcgdGhlIHBhZC4KLSAqCi0gKiBpbjogYSBub3JtYWwgcGFkCi0gKiBvdXQ6IHRoZSBlbGVtZW50Ci0gKgotICogaW46IGEgcHJveHkgcGFkCi0gKiBvdXQ6IHRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHBlZXIgb2YgdGhlIHByb3h5Ci0gKgotICogaW46IGEgZ2hvc3QgcGFkCi0gKiBvdXQ6IHRoZSBiaW4gb3duaW5nIHRoZSBnaG9zdHBhZAotICovCi0vKiBUT0RPKGVuc29uaWMpOiBnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCgpIHdvdWxkIG5vdCB3b3JrIGhlcmUsIHNob3VsZCB3ZQotICogYWRkIHRoaXMgYXMgbmV3IGFwaSwgZS5nLiBnc3RfcGFkX2ZpbmRfcGFyZW50X2VsZW1lbnQoKTsKLSAqLwotc3RhdGljIEdzdEVsZW1lbnQgKgotZ2V0X3JlYWxfcGFkX3BhcmVudCAoR3N0UGFkICogcGFkKQotewotICBHc3RPYmplY3QgKnBhcmVudDsKLQotICBpZiAoIXBhZCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBwYXJlbnQgPSBHU1RfT0JKRUNUX1BBUkVOVCAocGFkKTsKLQotICAvKiBpZiBwYXJlbnQgb2YgcGFkIGlzIGEgZ2hvc3QtcGFkLCB0aGVuIHBhZCBpcyBhIHByb3h5X3BhZCAqLwotICBpZiAocGFyZW50ICYmIEdTVF9JU19HSE9TVF9QQUQgKHBhcmVudCkpIHsKLSAgICBwYWQgPSBHU1RfUEFEX0NBU1QgKHBhcmVudCk7Ci0gICAgcGFyZW50ID0gR1NUX09CSkVDVF9QQVJFTlQgKHBhZCk7Ci0gIH0KLSAgcmV0dXJuIEdTVF9FTEVNRU5UX0NBU1QgKHBhcmVudCk7Ci19Ci0KLS8qIGhvb2tzICovCi0KLXN0YXRpYyB2b2lkCi1sb2dfbGF0ZW5jeSAoY29uc3QgR3N0U3RydWN0dXJlICogZGF0YSwgR3N0UGFkICogc2lua19wYWQsIGd1aW50NjQgc2lua190cykKLXsKLSAgR3N0UGFkICpzcmNfcGFkOwotICBndWludDY0IHNyY190czsKLSAgZ2NoYXIgKnNyYywgKnNpbms7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKGRhdGEsCi0gICAgICBsYXRlbmN5X3Byb2JlX3BhZCwgR1NUX1RZUEVfUEFELCAmc3JjX3BhZCwKLSAgICAgIGxhdGVuY3lfcHJvYmVfdHMsIEdfVFlQRV9VSU5UNjQsICZzcmNfdHMsIE5VTEwpOwotCi0gIHNyYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzXyVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChzcmNfcGFkKSk7Ci0gIHNpbmsgPSBnX3N0cmR1cF9wcmludGYgKCIlc18lcyIsIEdTVF9ERUJVR19QQURfTkFNRSAoc2lua19wYWQpKTsKLQotICBnc3RfdHJhY2VyX3JlY29yZF9sb2cgKHRyX2xhdGVuY3ksIHNyYywgc2luaywKLSAgICAgIEdTVF9DTE9DS19ESUZGIChzcmNfdHMsIHNpbmtfdHMpKTsKLSAgZ19mcmVlIChzcmMpOwotICBnX2ZyZWUgKHNpbmspOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9sYXRlbmN5X3Byb2JlIChHc3RFbGVtZW50ICogcGFyZW50LCBHc3RQYWQgKiBwYWQsIGd1aW50NjQgdHMpCi17Ci0gIGlmIChwYXJlbnQgJiYgKCFHU1RfSVNfQklOIChwYXJlbnQpKSAmJgotICAgICAgR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFyZW50LCBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSkpIHsKLSAgICBHc3RFdmVudCAqbGF0ZW5jeV9wcm9iZSA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU0sCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3X2lkIChsYXRlbmN5X3Byb2JlX2lkLAotICAgICAgICAgICAgbGF0ZW5jeV9wcm9iZV9wYWQsIEdTVF9UWVBFX1BBRCwgcGFkLAotICAgICAgICAgICAgbGF0ZW5jeV9wcm9iZV90cywgR19UWVBFX1VJTlQ2NCwgdHMsCi0gICAgICAgICAgICBOVUxMKSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGxhdGVuY3lfcHJvYmUpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wdXNoX2J1ZmZlcl9wcmUgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0RWxlbWVudCAqcGFyZW50ID0gZ2V0X3JlYWxfcGFkX3BhcmVudCAocGFkKTsKLQotICBzZW5kX2xhdGVuY3lfcHJvYmUgKHBhcmVudCwgcGFkLCB0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wdWxsX3JhbmdlX3ByZSAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogcGFkKQotewotICBHc3RQYWQgKnBlZXJfcGFkID0gR1NUX1BBRF9QRUVSIChwYWQpOwotICBHc3RFbGVtZW50ICpwYXJlbnQgPSBnZXRfcmVhbF9wYWRfcGFyZW50IChwZWVyX3BhZCk7Ci0KLSAgc2VuZF9sYXRlbmN5X3Byb2JlIChwYXJlbnQsIHBlZXJfcGFkLCB0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYWxjdWxhdGVfbGF0ZW5jeSAoR3N0RWxlbWVudCAqIHBhcmVudCwgR3N0UGFkICogcGFkLCBndWludDY0IHRzKQotewotICBpZiAocGFyZW50ICYmICghR1NUX0lTX0JJTiAocGFyZW50KSkgJiYKLSAgICAgIEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBhcmVudCwgR1NUX0VMRU1FTlRfRkxBR19TSU5LKSkgewotICAgIEdzdEV2ZW50ICpldiA9IGdfb2JqZWN0X2dldF9xZGF0YSAoKEdPYmplY3QgKikgcGFkLCBsYXRlbmN5X3Byb2JlX2lkKTsKLQotICAgIGxvZ19sYXRlbmN5IChnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXYpLCBwYWQsIHRzKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9idWZmZXJfcG9zdCAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogcGFkKQotewotICBHc3RQYWQgKnBlZXJfcGFkID0gR1NUX1BBRF9QRUVSIChwYWQpOwotICBHc3RFbGVtZW50ICpwYXJlbnQgPSBnZXRfcmVhbF9wYWRfcGFyZW50IChwZWVyX3BhZCk7Ci0KLSAgY2FsY3VsYXRlX2xhdGVuY3kgKHBhcmVudCwgcGVlcl9wYWQsIHRzKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3B1bGxfcmFuZ2VfcG9zdCAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogcGFkKQotewotICBHc3RFbGVtZW50ICpwYXJlbnQgPSBnZXRfcmVhbF9wYWRfcGFyZW50IChwYWQpOwotCi0gIGNhbGN1bGF0ZV9sYXRlbmN5IChwYXJlbnQsIHBhZCwgdHMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9ldmVudF9wcmUgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldikKLXsKLSAgR3N0UGFkICpwZWVyX3BhZCA9IEdTVF9QQURfUEVFUiAocGFkKTsKLSAgR3N0RWxlbWVudCAqcGFyZW50ID0gZ2V0X3JlYWxfcGFkX3BhcmVudCAocGVlcl9wYWQpOwotCi0gIGlmIChwYXJlbnQgJiYgKCFHU1RfSVNfQklOIChwYXJlbnQpKSAmJgotICAgICAgR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAocGFyZW50LCBHU1RfRUxFTUVOVF9GTEFHX1NJTkspKSB7Ci0gICAgaWYgKEdTVF9FVkVOVF9UWVBFIChldikgPT0gR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNKSB7Ci0gICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKmRhdGEgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXYpOwotCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZCAoZGF0YSkgPT0gbGF0ZW5jeV9wcm9iZV9pZCkgewotICAgICAgICAvKiBzdG9yZSBldmVudCBhbmQgY2FsY3VsYXRlIGxhdGVuY3kgd2hlbiB0aGUgYnVmZmVyIHRoYXQgZm9sbG93cwotICAgICAgICAgKiBoYXMgYmVlbiBwcm9jZXNzZWQgKi8KLSAgICAgICAgZ19vYmplY3Rfc2V0X3FkYXRhICgoR09iamVjdCAqKSBwZWVyX3BhZCwgbGF0ZW5jeV9wcm9iZV9pZCwKLSAgICAgICAgICAgIGdzdF9ldmVudF9yZWYgKGV2KSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLS8qIHRyYWNlciBjbGFzcyAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2xhdGVuY3lfdHJhY2VyX2NsYXNzX2luaXQgKEdzdExhdGVuY3lUcmFjZXJDbGFzcyAqIGtsYXNzKQotewotICBsYXRlbmN5X3Byb2JlX2lkID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJsYXRlbmN5X3Byb2JlLmlkIik7Ci0gIGxhdGVuY3lfcHJvYmVfcGFkID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJsYXRlbmN5X3Byb2JlLnBhZCIpOwotICBsYXRlbmN5X3Byb2JlX3RzID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJsYXRlbmN5X3Byb2JlLnRzIik7Ci0KLSAgLyogYW5ub3VuY2UgdHJhY2UgZm9ybWF0cyAqLwotICAvKiAqSU5ERU5ULU9GRiogKi8KLSAgdHJfbGF0ZW5jeSA9IGdzdF90cmFjZXJfcmVjb3JkX25ldyAoImxhdGVuY3kuY2xhc3MiLAotICAgICAgInNyYyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfUEFELAotICAgICAgICAgIE5VTEwpLAotICAgICAgInNpbmsiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgic2NvcGUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJ0aW1lIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICAgICAidGltZSBpdCB0b29rIGZvciB0aGUgYnVmZmVyIHRvIGdvIGZyb20gc3JjIHRvIHNpbmsgbnMiLAotICAgICAgICAgICJmbGFncyIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9GTEFHUywgR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19BR0dSRUdBVEVELAotICAgICAgICAgICJtaW4iLCBHX1RZUEVfVUlOVDY0LCBHX0dVSU5UNjRfQ09OU1RBTlQgKDApLAotICAgICAgICAgICJtYXgiLCBHX1RZUEVfVUlOVDY0LCBHX01BWFVJTlQ2NCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgIE5VTEwpOwotICAvKiAqSU5ERU5ULU9OKiAqLwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2xhdGVuY3lfdHJhY2VyX2luaXQgKEdzdExhdGVuY3lUcmFjZXIgKiBzZWxmKQotewotICBHc3RUcmFjZXIgKnRyYWNlciA9IEdTVF9UUkFDRVIgKHNlbGYpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJwYWQtcHVzaC1wcmUiLAotICAgICAgR19DQUxMQkFDSyAoZG9fcHVzaF9idWZmZXJfcHJlKSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLWxpc3QtcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1c2hfYnVmZmVyX3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJwYWQtcHVzaC1wb3N0IiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1c2hfYnVmZmVyX3Bvc3QpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXB1c2gtbGlzdC1wb3N0IiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1c2hfYnVmZmVyX3Bvc3QpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXB1bGwtcmFuZ2UtcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1bGxfcmFuZ2VfcHJlKSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdWxsLXJhbmdlLXBvc3QiLAotICAgICAgR19DQUxMQkFDSyAoZG9fcHVsbF9yYW5nZV9wb3N0KSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLWV2ZW50LXByZSIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2V2ZW50X3ByZSkpOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy90cmFjZXJzL2dzdGxhdGVuY3kuaCBiL3BsdWdpbnMvdHJhY2Vycy9nc3RsYXRlbmN5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMzQzMDMuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy90cmFjZXJzL2dzdGxhdGVuY3kuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0cnVzYWdlLmg6IHRyYWNpbmcgbW9kdWxlIHRoYXQgbG9ncyByZXNvdXJjZSB1c2FnZSBzdGF0cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfTEFURU5DWV9UUkFDRVJfSF9fCi0jZGVmaW5lIF9fR1NUX0xBVEVOQ1lfVFJBQ0VSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3R0cmFjZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0xBVEVOQ1lfVFJBQ0VSIFwKLSAgKGdzdF9sYXRlbmN5X3RyYWNlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfTEFURU5DWV9UUkFDRVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9MQVRFTkNZX1RSQUNFUixHc3RMYXRlbmN5VHJhY2VyKSkKLSNkZWZpbmUgR1NUX0xBVEVOQ1lfVFJBQ0VSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0xBVEVOQ1lfVFJBQ0VSLEdzdExhdGVuY3lUcmFjZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19MQVRFTkNZX1RSQUNFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0xBVEVOQ1lfVFJBQ0VSKSkKLSNkZWZpbmUgR1NUX0lTX0xBVEVOQ1lfVFJBQ0VSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0xBVEVOQ1lfVFJBQ0VSKSkKLSNkZWZpbmUgR1NUX0xBVEVOQ1lfVFJBQ0VSX0NBU1Qob2JqKSAoKEdzdExhdGVuY3lUcmFjZXIgKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdExhdGVuY3lUcmFjZXIgR3N0TGF0ZW5jeVRyYWNlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RMYXRlbmN5VHJhY2VyQ2xhc3MgR3N0TGF0ZW5jeVRyYWNlckNsYXNzOwotCi0vKioKLSAqIEdzdExhdGVuY3lUcmFjZXI6Ci0gKgotICogT3BhcXVlICNHc3RMYXRlbmN5VHJhY2VyIGRhdGEgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBfR3N0TGF0ZW5jeVRyYWNlciB7Ci0gIEdzdFRyYWNlciAJIHBhcmVudDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLX07Ci0KLXN0cnVjdCBfR3N0TGF0ZW5jeVRyYWNlckNsYXNzIHsKLSAgR3N0VHJhY2VyQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIHNpZ25hbHMgKi8KLX07Ci0KLUdfR05VQ19JTlRFUk5BTCBHVHlwZSBnc3RfbGF0ZW5jeV90cmFjZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTEFURU5DWV9UUkFDRVJfSF9fICovCmRpZmYgLS1naXQgYS9wbHVnaW5zL3RyYWNlcnMvZ3N0bGVha3MuYyBiL3BsdWdpbnMvdHJhY2Vycy9nc3RsZWFrcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTljMjk1Li4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvdHJhY2Vycy9nc3RsZWFrcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjU3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE2IENvbGxhYm9yYSBMdGQuIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBnc3RsZWFrcy5jOiB0cmFjaW5nIG1vZHVsZSBkZXRlY3Rpbmcgb2JqZWN0IGxlYWtzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3RsZWFrcwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBkZXRlY3QgR3N0T2JqZWN0IGFuZCBHc3RNaW5pT2JqZWN0IGxlYWtzCi0gKgotICogQSB0cmFjaW5nIG1vZHVsZSB0cmFja2luZyB0aGUgbGlmZXRpbWUgb2Ygb2JqZWN0cyBieSBsb2dnaW5nIHRob3NlIHN0aWxsCi0gKiBhbGl2ZSB3aGVuIHByb2dyYW0gaXMgZXhpdGluZyBhbmQgcmFpc2luZyBhIHdhcm5pbmcuCi0gKiBUaGUgdHlwZSBvZiBvYmplY3RzIHRyYWNrZWQgY2FuIGJlIGZpbHRlcmVkIHVzaW5nIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZQotICogdHJhY2VyLCBmb3IgZXhhbXBsZTogR1NUX1RSQUNFUlM9ImxlYWtzKEdzdEV2ZW50LEdzdE1lc3NhZ2UpIgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9VTldJTkQKLS8qIE5vIG5lZWQgZm9yIHJlbW90ZSBkZWJ1Z2dpbmcgc28gdHVybiBvbiB0aGUgJ2xvY2FsIG9ubHknIG9wdGltaXphdGlvbnMgaW4KLSAqIGxpYnVud2luZCAqLwotI2RlZmluZSBVTldfTE9DQUxfT05MWQotI2luY2x1ZGUgPGxpYnVud2luZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5XSU5EICovCi0KLSNpZmRlZiBIQVZFX0JBQ0tUUkFDRQotI2luY2x1ZGUgPGV4ZWNpbmZvLmg+Ci0jZW5kaWYgLyogSEFWRV9CQUNLVFJBQ0UgKi8KLQotI2luY2x1ZGUgImdzdGxlYWtzLmgiCi0KLSNpZmRlZiBHX09TX1VOSVgKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZiAvKiBHX09TX1VOSVggKi8KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2xlYWtzX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9sZWFrc19kZWJ1ZwotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2xlYWtzX2RlYnVnLCAibGVha3MiLCAwLCAibGVha3MgdHJhY2VyIik7Ci0jZGVmaW5lIGdzdF9sZWFrc190cmFjZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdExlYWtzVHJhY2VyLCBnc3RfbGVha3NfdHJhY2VyLAotICAgIEdTVF9UWVBFX1RSQUNFUiwgX2RvX2luaXQpOwotCi1zdGF0aWMgR3N0VHJhY2VyUmVjb3JkICp0cl9hbGl2ZTsKLSNpZmRlZiBHX09TX1VOSVgKLXN0YXRpYyBHc3RUcmFjZXJSZWNvcmQgKnRyX2FkZGVkID0gTlVMTDsKLXN0YXRpYyBHc3RUcmFjZXJSZWNvcmQgKnRyX3JlbW92ZWQgPSBOVUxMOwotI2VuZGlmIC8qIEdfT1NfVU5JWCAqLwotc3RhdGljIEdRdWV1ZSBpbnN0YW5jZXMgPSBHX1FVRVVFX0lOSVQ7Ci0KLXN0YXRpYyB2b2lkCi1zZXRfZmlsdGVyaW5nIChHc3RMZWFrc1RyYWNlciAqIHNlbGYpCi17Ci0gIGdjaGFyICpwYXJhbXM7Ci0gIEdTdHJ2IHRtcDsKLSAgZ3VpbnQgaTsKLQotICBnX29iamVjdF9nZXQgKHNlbGYsICJwYXJhbXMiLCAmcGFyYW1zLCBOVUxMKTsKLSAgaWYgKCFwYXJhbXMpCi0gICAgcmV0dXJuOwotCi0gIHRtcCA9IGdfc3Ryc3BsaXQgKHBhcmFtcywgIiwiLCAtMSk7Ci0KLSAgc2VsZi0+ZmlsdGVyID0gZ19hcnJheV9zaXplZF9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChHVHlwZSksCi0gICAgICBnX3N0cnZfbGVuZ3RoICh0bXApKTsKLSAgZm9yIChpID0gMDsgdG1wW2ldOyBpKyspIHsKLSAgICBHVHlwZSB0eXBlOwotCi0gICAgdHlwZSA9IGdfdHlwZV9mcm9tX25hbWUgKHRtcFtpXSk7Ci0gICAgaWYgKHR5cGUgPT0gMCkgewotICAgICAgLyogVGhlIHR5cGUgbWF5IG5vdCB5ZXQgYmUga25vd24gYnkgdGhlIHR5cGUgc3lzdGVtLCB0eXBpY2FsbHkgYmVjYXVzZQotICAgICAgICogdGhlIHBsdWdpbiBpbXBsZW1lbnRpbmcgaXQgYXMgbm90IHlldCBiZSBsb2FkZWQuIFNhdmUgaXQgZm9yIG5vdyBhcwotICAgICAgICogaXQgd2lsbCBoYXZlIGFub3RoZXIgY2hhbmNlIHRvIGJlIGFkZGVkIHRvIHRoZSBmaWx0ZXIgbGF0ZXIgaW4KLSAgICAgICAqIHNob3VsZF9oYW5kbGVfb2JqZWN0X3R5cGUoKSB3aGVuL2lmIHRoZSBvYmplY3QgdHlwZSBpcyBhY3R1YWxseQotICAgICAgICogdXNlZC4gKi8KLSAgICAgIGlmICghc2VsZi0+dW5oYW5kbGVkX2ZpbHRlcikKLSAgICAgICAgc2VsZi0+dW5oYW5kbGVkX2ZpbHRlciA9IGdfaGFzaF90YWJsZV9uZXcgKE5VTEwsIE5VTEwpOwotCi0gICAgICBnX2hhc2hfdGFibGVfYWRkIChzZWxmLT51bmhhbmRsZWRfZmlsdGVyLAotICAgICAgICAgIEdVSU5UX1RPX1BPSU5URVIgKGdfcXVhcmtfZnJvbV9zdHJpbmcgKHRtcFtpXSkpKTsKLSAgICAgIGdfYXRvbWljX2ludF9pbmMgKCZzZWxmLT51bmhhbmRsZWRfZmlsdGVyX2NvdW50KTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJhZGQgZmlsdGVyIG9uICVzIiwgdG1wW2ldKTsKLQotICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoc2VsZi0+ZmlsdGVyLCB0eXBlKTsKLSAgfQotCi0gIGdfc3RyZnJlZXYgKHRtcCk7Ci0gIGdfZnJlZSAocGFyYW1zKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zaG91bGRfaGFuZGxlX29iamVjdF90eXBlIChHc3RMZWFrc1RyYWNlciAqIHNlbGYsIEdUeXBlIG9iamVjdF90eXBlKQotewotICBndWludCBpLCBsZW47Ci0KLSAgaWYgKCFzZWxmLT5maWx0ZXIpCi0gICAgLyogTm8gZmlsdGVyaW5nLCBoYW5kbGUgYWxsIHR5cGVzICovCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZzZWxmLT51bmhhbmRsZWRfZmlsdGVyX2NvdW50KSkgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICAgaWYgKHNlbGYtPnVuaGFuZGxlZF9maWx0ZXIpIHsKLSAgICAgIEdRdWFyayBxOwotCi0gICAgICBxID0gZ190eXBlX3FuYW1lIChvYmplY3RfdHlwZSk7Ci0gICAgICBpZiAoZ19oYXNoX3RhYmxlX2NvbnRhaW5zIChzZWxmLT51bmhhbmRsZWRfZmlsdGVyLCBHVUlOVF9UT19QT0lOVEVSIChxKSkpIHsKLSAgICAgICAgZ19hcnJheV9hcHBlbmRfdmFsIChzZWxmLT5maWx0ZXIsIG9iamVjdF90eXBlKTsKLSAgICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZSAoc2VsZi0+dW5oYW5kbGVkX2ZpbHRlciwgR1VJTlRfVE9fUE9JTlRFUiAocSkpOwotCi0gICAgICAgIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0ICgmc2VsZi0+dW5oYW5kbGVkX2ZpbHRlcl9jb3VudCkpCi0gICAgICAgICAgZ19jbGVhcl9wb2ludGVyICgmc2VsZi0+dW5oYW5kbGVkX2ZpbHRlciwgZ19oYXNoX3RhYmxlX3VucmVmKTsKLQotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgICAgfQotICAgIH0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gIH0KLQotICBsZW4gPSBzZWxmLT5maWx0ZXItPmxlbjsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgR1R5cGUgdHlwZSA9IGdfYXJyYXlfaW5kZXggKHNlbGYtPmZpbHRlciwgR1R5cGUsIGkpOwotCi0gICAgaWYgKGdfdHlwZV9pc19hIChvYmplY3RfdHlwZSwgdHlwZSkpCi0gICAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotI2lmZGVmIEdfT1NfVU5JWAotLyogVGhlIG9iamVjdCBtYXkgYmUgZGVzdHJveWVkIHdoZW4gd2UgbG9nIGl0IHVzaW5nIHRoZSBjaGVja3BvaW50aW5nIHN5c3RlbSBzbwotICogd2UgaGF2ZSB0byBzYXZlIGl0cyB0eXBlIG5hbWUgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdwb2ludGVyIG9iamVjdDsKLSAgY29uc3QgZ2NoYXIgKnR5cGVfbmFtZTsKLX0gT2JqZWN0TG9nOwotCi1zdGF0aWMgT2JqZWN0TG9nICoKLW9iamVjdF9sb2dfbmV3IChncG9pbnRlciBvYmopCi17Ci0gIE9iamVjdExvZyAqbyA9IGdfc2xpY2VfbmV3IChPYmplY3RMb2cpOwotCi0gIG8tPm9iamVjdCA9IG9iajsKLQotICBpZiAoR19JU19PQkpFQ1QgKG9iaikpCi0gICAgby0+dHlwZV9uYW1lID0gR19PQkpFQ1RfVFlQRV9OQU1FIChvYmopOwotICBlbHNlCi0gICAgby0+dHlwZV9uYW1lID0gZ190eXBlX25hbWUgKEdTVF9NSU5JX09CSkVDVF9UWVBFIChvYmopKTsKLQotICByZXR1cm4gbzsKLX0KLQotc3RhdGljIHZvaWQKLW9iamVjdF9sb2dfZnJlZSAoT2JqZWN0TG9nICogb2JqKQotewotICBnX3NsaWNlX2ZyZWUgKE9iamVjdExvZywgb2JqKTsKLX0KLSNlbmRpZiAvKiBHX09TX1VOSVggKi8KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9vYmplY3RfZGVzdHJveWVkIChHc3RMZWFrc1RyYWNlciAqIHNlbGYsIGdwb2ludGVyIG9iamVjdCkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgaWYgKHNlbGYtPmRvbmUpIHsKLSAgICBnX3dhcm5pbmcKLSAgICAgICAgKCJvYmplY3QgJXAgZGVzdHJveWVkIHdoaWxlIHRoZSBsZWFrcyB0cmFjZXIgd2FzIGZpbmFsaXppbmcuIFNvbWUgdGhyZWFkcyBhcmUgc3RpbGwgcnVubmluZz8iLAotICAgICAgICBvYmplY3QpOwotICAgIGdvdG8gb3V0OwotICB9Ci0KLSAgZ19oYXNoX3RhYmxlX3JlbW92ZSAoc2VsZi0+b2JqZWN0cywgb2JqZWN0KTsKLSNpZmRlZiBHX09TX1VOSVgKLSAgaWYgKHNlbGYtPnJlbW92ZWQpCi0gICAgZ19oYXNoX3RhYmxlX2FkZCAoc2VsZi0+cmVtb3ZlZCwgb2JqZWN0X2xvZ19uZXcgKG9iamVjdCkpOwotI2VuZGlmIC8qIEdfT1NfVU5JWCAqLwotb3V0OgotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vYmplY3Rfd2Vha19jYiAoZ3BvaW50ZXIgZGF0YSwgR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TGVha3NUcmFjZXIgKnNlbGYgPSBkYXRhOwotCi0gIGhhbmRsZV9vYmplY3RfZGVzdHJveWVkIChzZWxmLCBvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotbWluaV9vYmplY3Rfd2Vha19jYiAoZ3BvaW50ZXIgZGF0YSwgR3N0TWluaU9iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TGVha3NUcmFjZXIgKnNlbGYgPSBkYXRhOwotCi0gIGhhbmRsZV9vYmplY3RfZGVzdHJveWVkIChzZWxmLCBvYmplY3QpOwotfQotCi0jaWZkZWYgSEFWRV9VTldJTkQKLSNkZWZpbmUgQlRfTkFNRV9TSVpFIDI1Ngotc3RhdGljIGdjaGFyICoKLWdlbmVyYXRlX3Vud2luZF90cmFjZSAodm9pZCkKLXsKLSAgdW53X2NvbnRleHRfdCBjdHg7Ci0gIHVud19jdXJzb3JfdCBjdXJzb3I7Ci0gIEdTdHJpbmcgKnRyYWNlOwotCi0gIGlmICh1bndfZ2V0Y29udGV4dCAoJmN0eCkpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKHVud19pbml0X2xvY2FsICgmY3Vyc29yLCAmY3R4KSkKLSAgICByZXR1cm4gTlVMTDsKLQotICB0cmFjZSA9IGdfc3RyaW5nX25ldyAoTlVMTCk7Ci0gIHdoaWxlICh1bndfc3RlcCAoJmN1cnNvcikgPiAwKSB7Ci0gICAgY2hhciBuYW1lW0JUX05BTUVfU0laRV07Ci0gICAgdW53X3dvcmRfdCBvZmZwOwotICAgIGludCByZXQ7Ci0KLSAgICByZXQgPSB1bndfZ2V0X3Byb2NfbmFtZSAoJmN1cnNvciwgbmFtZSwgQlRfTkFNRV9TSVpFLCAmb2ZmcCk7Ci0gICAgLyogLVVOV19FTk9NRU0gaXMgcmV0dXJuZWQgaWYgbmFtZSBoYXMgYmVlbiB0cnVuY2F0ZWQgKi8KLSAgICBpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1VTldfRU5PTUVNKQotICAgICAgYnJlYWs7Ci0KLSAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmICh0cmFjZSwgIiVzXG4iLCBuYW1lKTsKLSAgfQotCi0gIHJldHVybiBnX3N0cmluZ19mcmVlICh0cmFjZSwgRkFMU0UpOwotfQotI2VuZGlmIC8qIEhBVkVfVU5XSU5EICovCi0KLSNpZmRlZiBIQVZFX0JBQ0tUUkFDRQotI2RlZmluZSBCVF9CVUZfU0laRSAxMDAKLXN0YXRpYyBnY2hhciAqCi1nZW5lcmF0ZV9iYWNrdHJhY2VfdHJhY2UgKHZvaWQpCi17Ci0gIGludCBqLCBucHRyczsKLSAgdm9pZCAqYnVmZmVyW0JUX0JVRl9TSVpFXTsKLSAgY2hhciAqKnN0cmluZ3M7Ci0gIEdTdHJpbmcgKnRyYWNlOwotCi0gIHRyYWNlID0gZ19zdHJpbmdfbmV3IChOVUxMKTsKLSAgbnB0cnMgPSBiYWNrdHJhY2UgKGJ1ZmZlciwgQlRfQlVGX1NJWkUpOwotCi0gIHN0cmluZ3MgPSBiYWNrdHJhY2Vfc3ltYm9scyAoYnVmZmVyLCBucHRycyk7Ci0gIGlmICghc3RyaW5ncykKLSAgICByZXR1cm4gTlVMTDsKLQotICBmb3IgKGogPSAwOyBqIDwgbnB0cnM7IGorKykKLSAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmICh0cmFjZSwgIiVzXG4iLCBzdHJpbmdzW2pdKTsKLQotICByZXR1cm4gZ19zdHJpbmdfZnJlZSAodHJhY2UsIEZBTFNFKTsKLX0KLSNlbmRpZiAvKiBIQVZFX0JBQ0tUUkFDRSAqLwotCi1zdGF0aWMgZ2NoYXIgKgotZ2VuZXJhdGVfdHJhY2UgKHZvaWQpCi17Ci0gIGdjaGFyICp0cmFjZSA9IE5VTEw7Ci0KLSNpZmRlZiBIQVZFX1VOV0lORAotICB0cmFjZSA9IGdlbmVyYXRlX3Vud2luZF90cmFjZSAoKTsKLSAgaWYgKHRyYWNlKQotICAgIHJldHVybiB0cmFjZTsKLSNlbmRpZiAvKiBIQVZFX1VOV0lORCAqLwotCi0jaWZkZWYgSEFWRV9CQUNLVFJBQ0UKLSAgdHJhY2UgPSBnZW5lcmF0ZV9iYWNrdHJhY2VfdHJhY2UgKCk7Ci0jZW5kaWYgLyogSEFWRV9CQUNLVFJBQ0UgKi8KLQotICByZXR1cm4gdHJhY2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfb2JqZWN0X2NyZWF0ZWQgKEdzdExlYWtzVHJhY2VyICogc2VsZiwgZ3BvaW50ZXIgb2JqZWN0LCBHVHlwZSB0eXBlLAotICAgIGdib29sZWFuIGdvYmplY3QpCi17Ci0gIGdjaGFyICp0cmFjZSA9IE5VTEw7Ci0KLSAgaWYgKCFzaG91bGRfaGFuZGxlX29iamVjdF90eXBlIChzZWxmLCB0eXBlKSkKLSAgICByZXR1cm47Ci0KLSAgaWYgKGdvYmplY3QpCi0gICAgZ19vYmplY3Rfd2Vha19yZWYgKChHT2JqZWN0ICopIG9iamVjdCwgb2JqZWN0X3dlYWtfY2IsIHNlbGYpOwotICBlbHNlCi0gICAgZ3N0X21pbmlfb2JqZWN0X3dlYWtfcmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAob2JqZWN0KSwKLSAgICAgICAgbWluaV9vYmplY3Rfd2Vha19jYiwgc2VsZik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgaWYgKHNlbGYtPmxvZ19zdGFja190cmFjZSkgewotICAgIHRyYWNlID0gZ2VuZXJhdGVfdHJhY2UgKCk7Ci0gIH0KLQotICBnX2hhc2hfdGFibGVfaW5zZXJ0IChzZWxmLT5vYmplY3RzLCBvYmplY3QsIHRyYWNlKTsKLQotI2lmZGVmIEdfT1NfVU5JWAotICBpZiAoc2VsZi0+YWRkZWQpCi0gICAgZ19oYXNoX3RhYmxlX2FkZCAoc2VsZi0+YWRkZWQsIG9iamVjdF9sb2dfbmV3IChvYmplY3QpKTsKLSNlbmRpZiAvKiBHX09TX1VOSVggKi8KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotfQotCi1zdGF0aWMgdm9pZAotbWluaV9vYmplY3RfY3JlYXRlZF9jYiAoR3N0VHJhY2VyICogdHJhY2VyLCBHc3RDbG9ja1RpbWUgdHMsCi0gICAgR3N0TWluaU9iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TGVha3NUcmFjZXIgKnNlbGYgPSBHU1RfTEVBS1NfVFJBQ0VSX0NBU1QgKHRyYWNlcik7Ci0KLSAgaGFuZGxlX29iamVjdF9jcmVhdGVkIChzZWxmLCBvYmplY3QsIEdTVF9NSU5JX09CSkVDVF9UWVBFIChvYmplY3QpLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vYmplY3RfY3JlYXRlZF9jYiAoR3N0VHJhY2VyICogdHJhY2VyLCBHc3RDbG9ja1RpbWUgdHMsIEdzdE9iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TGVha3NUcmFjZXIgKnNlbGYgPSBHU1RfTEVBS1NfVFJBQ0VSX0NBU1QgKHRyYWNlcik7Ci0gIEdUeXBlIG9iamVjdF90eXBlID0gR19PQkpFQ1RfVFlQRSAob2JqZWN0KTsKLQotICAvKiBDYW4ndCB0cmFjayB0cmFjZXJzIGFzIHRoZXkgbWF5IGJlIGRpc3Bvc2VkIGFmdGVyIHRoZSBsZWFrIHRyYWNlciBpdHNlbGYgKi8KLSAgaWYgKGdfdHlwZV9pc19hIChvYmplY3RfdHlwZSwgR1NUX1RZUEVfVFJBQ0VSKSkKLSAgICByZXR1cm47Ci0KLSAgaGFuZGxlX29iamVjdF9jcmVhdGVkIChzZWxmLCBvYmplY3QsIG9iamVjdF90eXBlLCBUUlVFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9sZWFrc190cmFjZXJfaW5pdCAoR3N0TGVha3NUcmFjZXIgKiBzZWxmKQotewotICBzZWxmLT5vYmplY3RzID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChOVUxMLCBOVUxMLCBOVUxMLCBnX2ZyZWUpOwotCi0gIGlmIChnX2dldGVudiAoIkdTVF9MRUFLU19UUkFDRVJfU1RBQ0tfVFJBQ0UiKSkgewotICAgIGdjaGFyICp0cmFjZTsKLQotICAgIC8qIFRlc3QgaWYgd2UgY2FuIHJldHJpZXZlIGJhY2t0cmFjZSAqLwotICAgIHRyYWNlID0gZ2VuZXJhdGVfdHJhY2UgKCk7Ci0gICAgaWYgKHRyYWNlKSB7Ci0gICAgICBzZWxmLT5sb2dfc3RhY2tfdHJhY2UgPSBUUlVFOwotICAgICAgZ19mcmVlICh0cmFjZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfd2FybmluZyAoIkNhbid0IHJldHJpZXZlIGJhY2t0cmFjZSBvbiB0aGlzIHN5c3RlbSIpOwotICAgIH0KLSAgfQotCi0gIGdfcXVldWVfcHVzaF90YWlsICgmaW5zdGFuY2VzLCBzZWxmKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9sZWFrc190cmFjZXJfY29uc3RydWN0ZWQgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdExlYWtzVHJhY2VyICpzZWxmID0gR1NUX0xFQUtTX1RSQUNFUiAob2JqZWN0KTsKLSAgR3N0VHJhY2VyICp0cmFjZXIgPSBHU1RfVFJBQ0VSIChvYmplY3QpOwotCi0gIHNldF9maWx0ZXJpbmcgKHNlbGYpOwotCi0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgIm1pbmktb2JqZWN0LWNyZWF0ZWQiLAotICAgICAgR19DQUxMQkFDSyAobWluaV9vYmplY3RfY3JlYXRlZF9jYikpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJvYmplY3QtY3JlYXRlZCIsCi0gICAgICBHX0NBTExCQUNLIChvYmplY3RfY3JlYXRlZF9jYikpOwotCi0gIC8qIFdlIHJlbHkgb24gd2VhayBwb2ludGVycyByYXRoZXIgdGhhbiAobWluaS0pb2JqZWN0LWRlc3Ryb3llZCBob29rcyBzbyB3ZQotICAgKiBhcmUgbm90aWZpZWQgb2Ygb2JqZWN0cyBiZWluZyBkZXN0cm95ZWQgZXZlbiBkdXJpbmcgdGhlIHNodXRpbmcgZG93biBvZgotICAgKiB0aGUgdHJhY2luZyBzeXN0ZW0uICovCi0KLSAgKChHT2JqZWN0Q2xhc3MgKikgZ3N0X2xlYWtzX3RyYWNlcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3BvaW50ZXIgb2JqOwotICBjb25zdCBnY2hhciAqdHlwZV9uYW1lOwotICBndWludCByZWZfY291bnQ7Ci0gIGdjaGFyICpkZXNjOwotICBjb25zdCBnY2hhciAqdHJhY2U7Ci19IExlYWs7Ci0KLS8qIFRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCBMZWFrIHN0cnVjdCBpcyB2YWxpZCB1bnRpbCB0aGUgc2VsZi0+b2JqZWN0cwotICogaGFzaCB0YWJsZSBoYXMgYmVlbiBtb2RpZmllZC4gKi8KLXN0YXRpYyBMZWFrICoKLWxlYWtfbmV3IChncG9pbnRlciBvYmosIEdUeXBlIHR5cGUsIGd1aW50IHJlZl9jb3VudCwgY29uc3QgZ2NoYXIgKiB0cmFjZSkKLXsKLSAgTGVhayAqbGVhayA9IGdfc2xpY2VfbmV3IChMZWFrKTsKLQotICBsZWFrLT5vYmogPSBvYmo7Ci0gIGxlYWstPnR5cGVfbmFtZSA9IGdfdHlwZV9uYW1lICh0eXBlKTsKLSAgbGVhay0+cmVmX2NvdW50ID0gcmVmX2NvdW50OwotICBsZWFrLT5kZXNjID0gZ3N0X2luZm9fc3RyZHVwX3ByaW50ZiAoIiUiIEdTVF9QVFJfRk9STUFULCBvYmopOwotICBsZWFrLT50cmFjZSA9IHRyYWNlOwotCi0gIHJldHVybiBsZWFrOwotfQotCi1zdGF0aWMgdm9pZAotbGVha19mcmVlIChMZWFrICogbGVhaykKLXsKLSAgZ19mcmVlIChsZWFrLT5kZXNjKTsKLSAgZ19zbGljZV9mcmVlIChMZWFrLCBsZWFrKTsKLX0KLQotc3RhdGljIGdpbnQKLXNvcnRfbGVha3MgKGdjb25zdHBvaW50ZXIgX2EsIGdjb25zdHBvaW50ZXIgX2IpCi17Ci0gIGNvbnN0IExlYWsgKmEgPSBfYSwgKmIgPSBfYjsKLQotICByZXR1cm4gZ19zdHJjbXAwIChhLT50eXBlX25hbWUsIGItPnR5cGVfbmFtZSk7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqCi1jcmVhdGVfbGVha3NfbGlzdCAoR3N0TGVha3NUcmFjZXIgKiBzZWxmKQotewotICBHTGlzdCAqbCA9IE5VTEw7Ci0gIEdIYXNoVGFibGVJdGVyIGl0ZXI7Ci0gIGdwb2ludGVyIG9iaiwgdHJhY2U7Ci0KLSAgZ19oYXNoX3RhYmxlX2l0ZXJfaW5pdCAoJml0ZXIsIHNlbGYtPm9iamVjdHMpOwotICB3aGlsZSAoZ19oYXNoX3RhYmxlX2l0ZXJfbmV4dCAoJml0ZXIsICZvYmosICZ0cmFjZSkpIHsKLSAgICBHVHlwZSB0eXBlOwotICAgIGd1aW50IHJlZl9jb3VudDsKLQotICAgIGlmIChHU1RfSVNfT0JKRUNUIChvYmopKSB7Ci0gICAgICBpZiAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAob2JqLCBHU1RfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCkpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICB0eXBlID0gR19PQkpFQ1RfVFlQRSAob2JqKTsKLSAgICAgIHJlZl9jb3VudCA9ICgoR09iamVjdCAqKSBvYmopLT5yZWZfY291bnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChHU1RfTUlOSV9PQkpFQ1RfRkxBR19JU19TRVQgKG9iaiwgR1NUX01JTklfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCkpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICB0eXBlID0gR1NUX01JTklfT0JKRUNUX1RZUEUgKG9iaik7Ci0gICAgICByZWZfY291bnQgPSAoKEdzdE1pbmlPYmplY3QgKikgb2JqKS0+cmVmY291bnQ7Ci0gICAgfQotCi0gICAgbCA9IGdfbGlzdF9wcmVwZW5kIChsLCBsZWFrX25ldyAob2JqLCB0eXBlLCByZWZfY291bnQsIHRyYWNlKSk7Ci0gIH0KLQotICAvKiBTb3J0IGxlYWtzIGJ5IHR5cGUgbmFtZSBzbyB0aGV5IGFyZSBncm91cGVkIHRvZ2V0aGVyIG1ha2luZyB0aGUgb3V0cHV0Ci0gICAqIGVhc2llciB0byByZWFkICovCi0gIGwgPSBnX2xpc3Rfc29ydCAobCwgc29ydF9sZWFrcyk7Ci0KLSAgcmV0dXJuIGw7Ci19Ci0KLS8qIFJldHVybiBUUlVFIGlmIGF0IGxlYXN0IG9uZSBsZWFrZWQgb2JqZWN0IGhhcyBiZWVuIGxvZ2dlZCAqLwotc3RhdGljIGdib29sZWFuCi1sb2dfbGVha2VkIChHc3RMZWFrc1RyYWNlciAqIHNlbGYpCi17Ci0gIEdMaXN0ICpsZWFrcywgKmw7Ci0KLSAgbGVha3MgPSBjcmVhdGVfbGVha3NfbGlzdCAoc2VsZik7Ci0gIGlmICghbGVha3MpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZvciAobCA9IGxlYWtzOyBsICE9IE5VTEw7IGwgPSBnX2xpc3RfbmV4dCAobCkpIHsKLSAgICBMZWFrICpsZWFrID0gbC0+ZGF0YTsKLQotICAgIGdzdF90cmFjZXJfcmVjb3JkX2xvZyAodHJfYWxpdmUsIGxlYWstPnR5cGVfbmFtZSwgbGVhay0+b2JqLCBsZWFrLT5kZXNjLAotICAgICAgICBsZWFrLT5yZWZfY291bnQsIGxlYWstPnRyYWNlID8gbGVhay0+dHJhY2UgOiAiIik7Ci0gIH0KLQotICBnX2xpc3RfZnJlZV9mdWxsIChsZWFrcywgKEdEZXN0cm95Tm90aWZ5KSBsZWFrX2ZyZWUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2xlYWtzX3RyYWNlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TGVha3NUcmFjZXIgKnNlbGYgPSBHU1RfTEVBS1NfVFJBQ0VSIChvYmplY3QpOwotICBnYm9vbGVhbiBsZWFrczsKLSAgR0hhc2hUYWJsZUl0ZXIgaXRlcjsKLSAgZ3BvaW50ZXIgb2JqOwotCi0gIHNlbGYtPmRvbmUgPSBUUlVFOwotCi0gIC8qIFRyYWNlcnMgYXJlIGRlc3Ryb3llZCBhcyBwYXJ0IG9mIGdzdF9kZWluaXQoKSBzbyBub3cgaXMgYSBnb29kIHRpbWUgdG8KLSAgICogcmVwb3J0IGFsbCB0aGUgb2JqZWN0cyB3aGljaCBhcmUgc3RpbGwgYWxpdmUuICovCi0gIGxlYWtzID0gbG9nX2xlYWtlZCAoc2VsZik7Ci0KLSAgLyogUmVtb3ZlIHdlYWsgcmVmZXJlbmNlcyAqLwotICBnX2hhc2hfdGFibGVfaXRlcl9pbml0ICgmaXRlciwgc2VsZi0+b2JqZWN0cyk7Ci0gIHdoaWxlIChnX2hhc2hfdGFibGVfaXRlcl9uZXh0ICgmaXRlciwgJm9iaiwgTlVMTCkpIHsKLSAgICBpZiAoR1NUX0lTX09CSkVDVCAob2JqKSkKLSAgICAgIGdfb2JqZWN0X3dlYWtfdW5yZWYgKG9iaiwgb2JqZWN0X3dlYWtfY2IsIHNlbGYpOwotICAgIGVsc2UKLSAgICAgIGdzdF9taW5pX29iamVjdF93ZWFrX3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAob2JqKSwKLSAgICAgICAgICBtaW5pX29iamVjdF93ZWFrX2NiLCBzZWxmKTsKLSAgfQotCi0gIGdfY2xlYXJfcG9pbnRlciAoJnNlbGYtPm9iamVjdHMsIGdfaGFzaF90YWJsZV91bnJlZik7Ci0gIGlmIChzZWxmLT5maWx0ZXIpCi0gICAgZ19hcnJheV9mcmVlIChzZWxmLT5maWx0ZXIsIFRSVUUpOwotICBnX2NsZWFyX3BvaW50ZXIgKCZzZWxmLT5hZGRlZCwgZ19oYXNoX3RhYmxlX3VucmVmKTsKLSAgZ19jbGVhcl9wb2ludGVyICgmc2VsZi0+cmVtb3ZlZCwgZ19oYXNoX3RhYmxlX3VucmVmKTsKLSAgZ19jbGVhcl9wb2ludGVyICgmc2VsZi0+dW5oYW5kbGVkX2ZpbHRlciwgZ19oYXNoX3RhYmxlX3VucmVmKTsKLQotICBnX3F1ZXVlX3JlbW92ZSAoJmluc3RhbmNlcywgc2VsZik7Ci0KLSAgaWYgKGxlYWtzKQotICAgIGdfd2FybmluZyAoIkxlYWtzIGRldGVjdGVkIik7Ci0KLSAgKChHT2JqZWN0Q2xhc3MgKikgZ3N0X2xlYWtzX3RyYWNlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotI2RlZmluZSBSRUNPUkRfRklFTERfVFlQRV9OQU1FIFwKLSAgICAidHlwZS1uYW1lIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwgXAotICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1NUUklORywgXAotICAgICAgICAicmVsYXRlZC10byIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSwgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QUk9DRVNTLCBcCi0gICAgICAgIE5VTEwpCi0jZGVmaW5lIFJFQ09SRF9GSUVMRF9BRERSRVNTIFwKLSAgICAiYWRkcmVzcyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsIFwKLSAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9QT0lOVEVSLCBcCi0gICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBcCi0gICAgICAgIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfUFJPQ0VTUywgXAotICAgICAgICBOVUxMKQotI2RlZmluZSBSRUNPUkRfRklFTERfREVTQyBcCi0gICAgImRlc2NyaXB0aW9uIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwgXAotICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1NUUklORywgXAotICAgICAgICAicmVsYXRlZC10byIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSwgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QUk9DRVNTLCBcCi0gICAgICAgIE5VTEwpCi0jZGVmaW5lIFJFQ09SRF9GSUVMRF9SRUZfQ09VTlQgXAotICAgICJyZWYtY291bnQiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLCBcCi0gICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVCwgXAotICAgICAgICAicmVsYXRlZC10byIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSwgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QUk9DRVNTLCBcCi0gICAgICAgIE5VTEwpCi0jZGVmaW5lIFJFQ09SRF9GSUVMRF9UUkFDRSBcCi0gICAgInRyYWNlIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwgXAotICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1NUUklORywgXAotICAgICAgICAicmVsYXRlZC10byIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSwgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QUk9DRVNTLCBcCi0gICAgICAgIE5VTEwpCi0KLSNpZmRlZiBHX09TX1VOSVgKLXN0YXRpYyB2b2lkCi1zaWdfdXNyMV9oYW5kbGVyX2ZvcmVhY2ggKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0TGVha3NUcmFjZXIgKnRyYWNlciA9IGRhdGE7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0cmFjZXIpOwotICBHU1RfVFJBQ0VfT0JKRUNUICh0cmFjZXIsICJzdGFydCBsaXN0aW5nIGN1cnJlbnRseSBhbGl2ZSBvYmplY3RzIik7Ci0gIGxvZ19sZWFrZWQgKHRyYWNlcik7Ci0gIEdTVF9UUkFDRV9PQkpFQ1QgKHRyYWNlciwgImRvbmUgbGlzdGluZyBjdXJyZW50bHkgYWxpdmUgb2JqZWN0cyIpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhY2VyKTsKLX0KLQotc3RhdGljIHZvaWQKLXNpZ191c3IxX2hhbmRsZXIgKEdfR05VQ19VTlVTRUQgaW50IHNpZ25hbCkKLXsKLSAgZ19xdWV1ZV9mb3JlYWNoICgmaW5zdGFuY2VzLCBzaWdfdXNyMV9oYW5kbGVyX2ZvcmVhY2gsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotbG9nX2NoZWNrcG9pbnQgKEdIYXNoVGFibGUgKiBoYXNoLCBHc3RUcmFjZXJSZWNvcmQgKiByZWNvcmQpCi17Ci0gIEdIYXNoVGFibGVJdGVyIGl0ZXI7Ci0gIGdwb2ludGVyIG87Ci0KLSAgZ19oYXNoX3RhYmxlX2l0ZXJfaW5pdCAoJml0ZXIsIGhhc2gpOwotICB3aGlsZSAoZ19oYXNoX3RhYmxlX2l0ZXJfbmV4dCAoJml0ZXIsICZvLCBOVUxMKSkgewotICAgIE9iamVjdExvZyAqb2JqID0gbzsKLQotICAgIGdzdF90cmFjZXJfcmVjb3JkX2xvZyAocmVjb3JkLCBvYmotPnR5cGVfbmFtZSwgb2JqLT5vYmplY3QpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19jaGVja3BvaW50IChHc3RMZWFrc1RyYWNlciAqIHNlbGYpCi17Ci0gIEdTVF9UUkFDRV9PQkpFQ1QgKHNlbGYsICJsaXN0aW5nIG9iamVjdHMgY3JlYXRlZCBzaW5jZSBsYXN0IGNoZWNrcG9pbnQiKTsKLSAgbG9nX2NoZWNrcG9pbnQgKHNlbGYtPmFkZGVkLCB0cl9hZGRlZCk7Ci0gIEdTVF9UUkFDRV9PQkpFQ1QgKHNlbGYsICJsaXN0aW5nIG9iamVjdHMgcmVtb3ZlZCBzaW5jZSBsYXN0IGNoZWNrcG9pbnQiKTsKLSAgbG9nX2NoZWNrcG9pbnQgKHNlbGYtPnJlbW92ZWQsIHRyX3JlbW92ZWQpOwotCi0gIGdfaGFzaF90YWJsZV9yZW1vdmVfYWxsIChzZWxmLT5hZGRlZCk7Ci0gIGdfaGFzaF90YWJsZV9yZW1vdmVfYWxsIChzZWxmLT5yZW1vdmVkKTsKLX0KLQotc3RhdGljIHZvaWQKLXNpZ191c3IyX2hhbmRsZXJfZm9yZWFjaCAoZ3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RMZWFrc1RyYWNlciAqdHJhY2VyID0gZGF0YTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRyYWNlcik7Ci0KLSAgaWYgKCF0cmFjZXItPmFkZGVkKSB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVCAodHJhY2VyLCAiRmlyc3QgY2hlY2twb2ludCwgc3RhcnQgdHJhY2tpbmcgb2JqZWN0cyIpOwotCi0gICAgdHJhY2VyLT5hZGRlZCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoTlVMTCwgTlVMTCwKLSAgICAgICAgKEdEZXN0cm95Tm90aWZ5KSBvYmplY3RfbG9nX2ZyZWUsIE5VTEwpOwotICAgIHRyYWNlci0+cmVtb3ZlZCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoTlVMTCwgTlVMTCwKLSAgICAgICAgKEdEZXN0cm95Tm90aWZ5KSBvYmplY3RfbG9nX2ZyZWUsIE5VTEwpOwotICB9IGVsc2UgewotICAgIGRvX2NoZWNrcG9pbnQgKHRyYWNlcik7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAodHJhY2VyKTsKLX0KLQotc3RhdGljIHZvaWQKLXNpZ191c3IyX2hhbmRsZXIgKEdfR05VQ19VTlVTRUQgaW50IHNpZ25hbCkKLXsKLSAgZ19xdWV1ZV9mb3JlYWNoICgmaW5zdGFuY2VzLCBzaWdfdXNyMl9oYW5kbGVyX2ZvcmVhY2gsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0dXBfc2lnbmFscyAodm9pZCkKLXsKLSAgdHJfYWRkZWQgPSBnc3RfdHJhY2VyX3JlY29yZF9uZXcgKCJvYmplY3QtYWRkZWQuY2xhc3MiLAotICAgICAgUkVDT1JEX0ZJRUxEX1RZUEVfTkFNRSwgUkVDT1JEX0ZJRUxEX0FERFJFU1MsIE5VTEwpOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUICh0cl9hZGRlZCwgR1NUX09CSkVDVF9GTEFHX01BWV9CRV9MRUFLRUQpOwotCi0gIHRyX3JlbW92ZWQgPSBnc3RfdHJhY2VyX3JlY29yZF9uZXcgKCJvYmplY3QtcmVtb3ZlZC5jbGFzcyIsCi0gICAgICBSRUNPUkRfRklFTERfVFlQRV9OQU1FLCBSRUNPUkRfRklFTERfQUREUkVTUywgTlVMTCk7Ci0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHRyX3JlbW92ZWQsIEdTVF9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEKTsKLQotICBzaWduYWwgKFNJR1VTUjEsIHNpZ191c3IxX2hhbmRsZXIpOwotICBzaWduYWwgKFNJR1VTUjIsIHNpZ191c3IyX2hhbmRsZXIpOwotfQotI2VuZGlmIC8qIEdfT1NfVU5JWCAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2xlYWtzX3RyYWNlcl9jbGFzc19pbml0IChHc3RMZWFrc1RyYWNlckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+Y29uc3RydWN0ZWQgPSBnc3RfbGVha3NfdHJhY2VyX2NvbnN0cnVjdGVkOwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9sZWFrc190cmFjZXJfZmluYWxpemU7Ci0KLSAgdHJfYWxpdmUgPSBnc3RfdHJhY2VyX3JlY29yZF9uZXcgKCJvYmplY3QtYWxpdmUuY2xhc3MiLAotICAgICAgUkVDT1JEX0ZJRUxEX1RZUEVfTkFNRSwgUkVDT1JEX0ZJRUxEX0FERFJFU1MsIFJFQ09SRF9GSUVMRF9ERVNDLAotICAgICAgUkVDT1JEX0ZJRUxEX1JFRl9DT1VOVCwgUkVDT1JEX0ZJRUxEX1RSQUNFLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAodHJfYWxpdmUsIEdTVF9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEKTsKLQotICBpZiAoZ19nZXRlbnYgKCJHU1RfTEVBS1NfVFJBQ0VSX1NJRyIpKSB7Ci0jaWZkZWYgR19PU19VTklYCi0gICAgc2V0dXBfc2lnbmFscyAoKTsKLSNlbHNlCi0gICAgZ193YXJuaW5nICgiU3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBQT1NJWCBzaWduYWxzIik7Ci0jZW5kaWYgLyogR19PU19VTklYICovCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvdHJhY2Vycy9nc3RsZWFrcy5oIGIvcGx1Z2lucy90cmFjZXJzL2dzdGxlYWtzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZDNkZWYuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy90cmFjZXJzL2dzdGxlYWtzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNiBDb2xsYWJvcmEgTHRkLiA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0gKgotICogZ3N0bGVha3MuYzogdHJhY2luZyBtb2R1bGUgZGV0ZWN0aW5nIG9iamVjdCBsZWFrcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfTEVBS1NfVFJBQ0VSX0hfXwotI2RlZmluZSBfX0dTVF9MRUFLU19UUkFDRVJfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRyYWNlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfTEVBS1NfVFJBQ0VSIFwKLSAgKGdzdF9sZWFrc190cmFjZXJfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0xFQUtTX1RSQUNFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0xFQUtTX1RSQUNFUixHc3RMZWFrc1RyYWNlcikpCi0jZGVmaW5lIEdTVF9MRUFLU19UUkFDRVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTEVBS1NfVFJBQ0VSLEdzdExlYWtzVHJhY2VyQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTEVBS1NfVFJBQ0VSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfTEVBS1NfVFJBQ0VSKSkKLSNkZWZpbmUgR1NUX0lTX0xFQUtTX1RSQUNFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9MRUFLU19UUkFDRVIpKQotI2RlZmluZSBHU1RfTEVBS1NfVFJBQ0VSX0NBU1Qob2JqKSAoKEdzdExlYWtzVHJhY2VyICopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RMZWFrc1RyYWNlciBHc3RMZWFrc1RyYWNlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RMZWFrc1RyYWNlckNsYXNzIEdzdExlYWtzVHJhY2VyQ2xhc3M7Ci0KLS8qKgotICogR3N0TGVha3NUcmFjZXI6Ci0gKgotICogT3BhcXVlICNHc3RMZWFrc1RyYWNlciBkYXRhIHN0cnVjdHVyZQotICovCi1zdHJ1Y3QgX0dzdExlYWtzVHJhY2VyIHsKLSAgR3N0VHJhY2VyIHBhcmVudDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgLyogZ3BvaW50ZXIgKG9iamVjdCBjdXJyZW50bHkgYWxpdmUpIC0+IGdjaGFyICogKGl0cyBjcmVhdGlvbiB0cmFjZSwgb3IKLSAgICogTlVMTCkuIFByb3RlY3RlZCBieSBvYmplY3QgbG9jayAqLwotICBHSGFzaFRhYmxlICpvYmplY3RzOwotICAvKiBhcnJheSBvZiBHVHlwZSB1c2VkIGFzIGZpbHRlcmluZyAqLwotICBHQXJyYXkgKmZpbHRlcjsKLSAgLyogU2V0IG9mIG93bmVkIE9iamVjdExvZy4gIFByb3RlY3RlZCBieSBvYmplY3QgbG9jayAqLwotICBHSGFzaFRhYmxlICphZGRlZDsKLSAgLyogU2V0IG9mIG93bmVkIE9iamVjdExvZy4gIFByb3RlY3RlZCBieSBvYmplY3QgbG9jayAqLwotICBHSGFzaFRhYmxlICpyZW1vdmVkOwotICAvKiBJZiBub3QgTlVMTCwgY29udGFpbiBhIHNldCBvZiBHUXVhcmsgcmVwcmVzZW50aW5nIHR5cGUgZmlsdGVyIG5vdAotICAgKiAoeWV0Pykga25vd24gYnkgdGhlIHR5cGUgc3lzdGVtLgotICAgKiBQcm90ZWN0ZWQgYnkgb2JqZWN0IGxvY2suICovCi0gIEdIYXNoVGFibGUgKnVuaGFuZGxlZF9maWx0ZXI7Ci0gIC8qIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdW5oYW5kbGVkX2ZpbHRlciAqLwotICBnaW50IHVuaGFuZGxlZF9maWx0ZXJfY291bnQ7Ci0gIGdib29sZWFuIGRvbmU7Ci0KLSAgZ2Jvb2xlYW4gbG9nX3N0YWNrX3RyYWNlOwotfTsKLQotc3RydWN0IF9Hc3RMZWFrc1RyYWNlckNsYXNzIHsKLSAgR3N0VHJhY2VyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR19HTlVDX0lOVEVSTkFMIEdUeXBlIGdzdF9sZWFrc190cmFjZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTEVBS1NfVFJBQ0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy90cmFjZXJzL2dzdGxvZy5jIGIvcGx1Z2lucy90cmFjZXJzL2dzdGxvZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGRlZDIxLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDM3NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdGxvZy5jOiB0cmFjaW5nIG1vZHVsZSB0aGF0IGxvZ3MgZXZlbnRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3Rsb2cKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogbG9nIGhvb2sgZXZlbnQKLSAqCi0gKiBBIHRyYWNpbmcgbW9kdWxlIHRoYXQgbG9ncyBhbGwgZGF0YSBmcm9tIGFsbCBob29rcy4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGxvZy5oIgotCi0jaW5jbHVkZSA8Z3N0L3ByaW50Zi9wcmludGYuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2xvZ19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfbG9nX2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0JJTik7Ci1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0JVRkZFUik7Ci1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0JVRkZFUl9MSVNUKTsKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfRVZFTlQpOwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9NRVNTQUdFKTsKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfUVVFUlkpOwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9TVEFURVMpOwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9QQURTKTsKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfRUxFTUVOVF9QQURTKTsKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfRUxFTUVOVF9GQUNUT1JZKTsKLQotI2RlZmluZSBfZG9faW5pdCBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9sb2dfZGVidWcsICJsb2ciLCAwLCAibG9nIHRyYWNlciIpOyBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCAoR1NUX0NBVF9CVUZGRVIsICJHU1RfQlVGRkVSIik7IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfR0VUIChHU1RfQ0FUX0JVRkZFUl9MSVNULCAiR1NUX0JVRkZFUl9MSVNUIik7IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfR0VUIChHU1RfQ0FUX0VWRU5ULCAiR1NUX0VWRU5UIik7IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfR0VUIChHU1RfQ0FUX01FU1NBR0UsICJHU1RfTUVTU0FHRSIpOyBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCAoR1NUX0NBVF9TVEFURVMsICJHU1RfU1RBVEVTIik7IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfR0VUIChHU1RfQ0FUX1BBRFMsICJHU1RfUEFEUyIpOyBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsICJHU1RfRUxFTUVOVF9QQURTIik7IFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfR0VUIChHU1RfQ0FUX0VMRU1FTlRfRkFDVE9SWSwgIkdTVF9FTEVNRU5UX0ZBQ1RPUlkiKTsgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9HRVQgKEdTVF9DQVRfUVVFUlksICJxdWVyeSIpOyBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCAoR1NUX0NBVF9CSU4sICJiaW4iKTsKLSNkZWZpbmUgZ3N0X2xvZ190cmFjZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdExvZ1RyYWNlciwgZ3N0X2xvZ190cmFjZXIsIEdTVF9UWVBFX1RSQUNFUiwKLSAgICBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkCi1kb19sb2cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICB2YV9saXN0IHZhcl9hcmdzOwotCi0gIHZhX3N0YXJ0ICh2YXJfYXJncywgZm10KTsKLSAgZ3N0X2RlYnVnX2xvZ192YWxpc3QgKGNhdCwgR1NUX0xFVkVMX1RSQUNFLCAiIiwgIiIsIDAsIE5VTEwsIGZtdCwgdmFyX2FyZ3MpOwotICB2YV9lbmQgKHZhcl9hcmdzKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3B1c2hfYnVmZmVyX3ByZSAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0JVRkZFUiwKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgcGFkPSUiIEdTVF9QVFJfRk9STUFUICIsIGJ1ZmZlcj0lIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRzKSwgcGFkLCBidWZmZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9idWZmZXJfcG9zdCAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogcGFkLAotICAgIEdzdEZsb3dSZXR1cm4gcmVzKQotewotICBkb19sb2cgKEdTVF9DQVRfQlVGRkVSLAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwYWQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgcmVzPSVkIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRzKSwgcGFkLCByZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9idWZmZXJfbGlzdF9wcmUgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RCdWZmZXJMaXN0ICogbGlzdCkKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0JVRkZFUl9MSVNULAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwYWQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgbGlzdD0lcCIsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIHBhZCwgbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wdXNoX2J1ZmZlcl9saXN0X3Bvc3QgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RGbG93UmV0dXJuIHJlcykKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0JVRkZFUl9MSVNULAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwYWQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgcmVzPSVkIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRzKSwgcGFkLCByZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVsbF9yYW5nZV9wcmUgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCwgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgc2l6ZSkKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0JVRkZFUiwKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgcGFkPSUiIEdTVF9QVFJfRk9STUFUICIsIG9mZnNldD0lIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCBzaXplPSV1IiwgR1NUX1RJTUVfQVJHUyAodHMpLCBwYWQsIG9mZnNldCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wdWxsX3JhbmdlX3Bvc3QgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIsIEdzdEZsb3dSZXR1cm4gcmVzKQotewotICBkb19sb2cgKEdTVF9DQVRfQlVGRkVSLAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwYWQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgYnVmZmVyPSUiIEdTVF9QVFJfRk9STUFUCi0gICAgICAiLCByZXM9JWQiLCBHU1RfVElNRV9BUkdTICh0cyksIHBhZCwgYnVmZmVyLCByZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9ldmVudF9wcmUgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0VWRU5ULAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwYWQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgZXZlbnQ9JSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIHBhZCwgZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9ldmVudF9wb3N0IChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RQYWQgKiBwYWQsIGdib29sZWFuIHJlcykKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0VWRU5ULAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwYWQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgcmVzPSVkIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRzKSwgcGFkLCByZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcGFkX3F1ZXJ5X3ByZSAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogcGFkLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBkb19sb2cgKEdTVF9DQVRfUVVFUlksCi0gICAgICAiJSIgR1NUX1RJTUVfRk9STUFUICIsIHBhZD0lIiBHU1RfUFRSX0ZPUk1BVCAiLCBxdWVyeT0lIgotICAgICAgR1NUX1BUUl9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRzKSwgcGFkLCBxdWVyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wYWRfcXVlcnlfcG9zdCAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogcGFkLCBnYm9vbGVhbiByZXMpCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9RVUVSWSwKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgcGFkPSUiIEdTVF9QVFJfRk9STUFUICIsIHJlcz0lZCIsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIHBhZCwgcmVzKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3Bvc3RfbWVzc2FnZV9wcmUgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdEVsZW1lbnQgKiBlbGVtLAotICAgIEdzdE1lc3NhZ2UgKiBtc2cpCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9FVkVOVCwKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgZWxlbWVudD0lIiBHU1RfUFRSX0ZPUk1BVCAiLCBtZXNzYWdlPSUiCi0gICAgICBHU1RfUFRSX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodHMpLCBlbGVtLCBtc2cpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcG9zdF9tZXNzYWdlX3Bvc3QgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdEVsZW1lbnQgKiBlbGVtLAotICAgIGdib29sZWFuIHJlcykKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0VWRU5ULAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBlbGVtZW50PSUiIEdTVF9QVFJfRk9STUFUICIsIHJlcz0lZCIsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIGVsZW0sIHJlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19lbGVtZW50X3F1ZXJ5X3ByZSAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0RWxlbWVudCAqIGVsZW0sCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX1FVRVJZLAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBlbGVtZW50PSUiIEdTVF9QVFJfRk9STUFUICIsIHF1ZXJ5PSUiCi0gICAgICBHU1RfUFRSX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodHMpLCBlbGVtLCBxdWVyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19lbGVtZW50X3F1ZXJ5X3Bvc3QgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdEVsZW1lbnQgKiBlbGVtLAotICAgIGdib29sZWFuIHJlcykKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX1FVRVJZLAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBlbGVtZW50PSUiIEdTVF9QVFJfRk9STUFUICIsIHJlcz0lZCIsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIGVsZW0sIHJlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19lbGVtZW50X25ldyAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0RWxlbWVudCAqIGVsZW0pCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9FTEVNRU5UX0ZBQ1RPUlksCi0gICAgICAiJSIgR1NUX1RJTUVfRk9STUFUICIsIGVsZW1lbnQ9JSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIGVsZW0pOwotfQotCi1zdGF0aWMgdm9pZAotZG9fZWxlbWVudF9hZGRfcGFkIChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RFbGVtZW50ICogZWxlbSwKLSAgICBHc3RQYWQgKiBwYWQpCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCi0gICAgICAiJSIgR1NUX1RJTUVfRk9STUFUICIsIGVsZW1lbnQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgcGFkPSUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodHMpLCBlbGVtLCBwYWQpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fZWxlbWVudF9yZW1vdmVfcGFkIChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RFbGVtZW50ICogZWxlbSwKLSAgICBHc3RQYWQgKiBwYWQpCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9FTEVNRU5UX1BBRFMsCi0gICAgICAiJSIgR1NUX1RJTUVfRk9STUFUICIsIGVsZW1lbnQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgcGFkPSUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodHMpLCBlbGVtLCBwYWQpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fZWxlbWVudF9jaGFuZ2Vfc3RhdGVfcHJlIChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RFbGVtZW50ICogZWxlbSwKLSAgICBHc3RTdGF0ZUNoYW5nZSBjaGFuZ2UpCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9TVEFURVMsCi0gICAgICAiJSIgR1NUX1RJTUVfRk9STUFUICIsIGVsZW1lbnQ9JSIgR1NUX1BUUl9GT1JNQVQgIiwgY2hhbmdlPSVkIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRzKSwgZWxlbSwgKGdpbnQpIGNoYW5nZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19lbGVtZW50X2NoYW5nZV9zdGF0ZV9wb3N0IChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RFbGVtZW50ICogZWxlbSwKLSAgICBHc3RTdGF0ZUNoYW5nZSBjaGFuZ2UsIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlcykKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX1NUQVRFUywKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgZWxlbWVudD0lIiBHU1RfUFRSX0ZPUk1BVCAiLCBjaGFuZ2U9JWQsIHJlcz0lZCIsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIGVsZW0sIChnaW50KSBjaGFuZ2UsIChnaW50KSByZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fYmluX2FkZF9wcmUgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIGVsZW0pCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9CSU4sCi0gICAgICAiJSIgR1NUX1RJTUVfRk9STUFUICIsIGJpbj0lIiBHU1RfUFRSX0ZPUk1BVCAiLCBlbGVtZW50PSUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodHMpLCBiaW4sIGVsZW0pOwotfQotCi1zdGF0aWMgdm9pZAotZG9fYmluX2FkZF9wb3N0IChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtLAotICAgIGdib29sZWFuIHJlcykKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0JJTiwKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgYmluPSUiIEdTVF9QVFJfRk9STUFUICIsIGVsZW1lbnQ9JSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICIsIHJlcz0lZCIsIEdTVF9USU1FX0FSR1MgKHRzKSwgYmluLCBlbGVtLCByZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fYmluX3JlbW92ZV9wcmUgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdEJpbiAqIGJpbiwKLSAgICBHc3RFbGVtZW50ICogZWxlbSkKLXsKLSAgZG9fbG9nIChHU1RfQ0FUX0JJTiwKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgYmluPSUiIEdTVF9QVFJfRk9STUFUICIsIGVsZW1lbnQ9JSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIGJpbiwgZWxlbSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19iaW5fcmVtb3ZlX3Bvc3QgKEdzdFRyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdEJpbiAqIGJpbiwgZ2Jvb2xlYW4gcmVzKQotewotICBkb19sb2cgKEdTVF9DQVRfQklOLAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBiaW49JSIgR1NUX1BUUl9GT1JNQVQgIiwgcmVzPSVkIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRzKSwgYmluLCByZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcGFkX2xpbmtfcHJlIChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RQYWQgKiBzcmMsIEdzdEVsZW1lbnQgKiBzaW5rKQotewotICBkb19sb2cgKEdTVF9DQVRfUEFEUywKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgc3JjPSUiIEdTVF9QVFJfRk9STUFUICIsIHNpbms9JSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0cyksIHNyYywgc2luayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wYWRfbGlua19wb3N0IChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RQYWQgKiBzcmMsIEdzdEVsZW1lbnQgKiBzaW5rLAotICAgIEdzdFBhZExpbmtSZXR1cm4gcmVzKQotewotICBkb19sb2cgKEdTVF9DQVRfUEFEUywKLSAgICAgICIlIiBHU1RfVElNRV9GT1JNQVQgIiwgc3JjPSUiIEdTVF9QVFJfRk9STUFUICIsIHNpbms9JSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICIsIHJlcz0lZCIsIEdTVF9USU1FX0FSR1MgKHRzKSwgc3JjLCBzaW5rLCAoZ2ludCkgcmVzKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3BhZF91bmxpbmtfcHJlIChHc3RUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RQYWQgKiBzcmMsCi0gICAgR3N0RWxlbWVudCAqIHNpbmspCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9QQURTLAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzcmM9JSIgR1NUX1BUUl9GT1JNQVQgIiwgc2luaz0lIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRzKSwgc3JjLCBzaW5rKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3BhZF91bmxpbmtfcG9zdCAoR3N0VHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogc3JjLAotICAgIEdzdEVsZW1lbnQgKiBzaW5rLCBnYm9vbGVhbiByZXMpCi17Ci0gIGRvX2xvZyAoR1NUX0NBVF9QQURTLAotICAgICAgIiUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzcmM9JSIgR1NUX1BUUl9GT1JNQVQgIiwgc2luaz0lIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiwgcmVzPSVkIiwgR1NUX1RJTUVfQVJHUyAodHMpLCBzcmMsIHNpbmssIChnaW50KSByZXMpOwotfQotCi0vKiB0cmFjZXIgY2xhc3MgKi8KLQotc3RhdGljIHZvaWQKLWdzdF9sb2dfdHJhY2VyX2NsYXNzX2luaXQgKEdzdExvZ1RyYWNlckNsYXNzICoga2xhc3MpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbG9nX3RyYWNlcl9pbml0IChHc3RMb2dUcmFjZXIgKiBzZWxmKQotewotICBHc3RUcmFjZXIgKnRyYWNlciA9IEdTVF9UUkFDRVIgKHNlbGYpOwotCi0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLXByZSIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2J1ZmZlcl9wcmUpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXB1c2gtcG9zdCIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2J1ZmZlcl9wb3N0KSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLWxpc3QtcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1c2hfYnVmZmVyX2xpc3RfcHJlKSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLWxpc3QtcG9zdCIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2J1ZmZlcl9saXN0X3Bvc3QpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXB1bGwtcmFuZ2UtcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1bGxfcmFuZ2VfcHJlKSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdWxsLXJhbmdlLXBvc3QiLAotICAgICAgR19DQUxMQkFDSyAoZG9fcHVsbF9yYW5nZV9wb3N0KSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLWV2ZW50LXByZSIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2V2ZW50X3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJwYWQtcHVzaC1ldmVudC1wb3N0IiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1c2hfZXZlbnRfcG9zdCkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJwYWQtcXVlcnktcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3BhZF9xdWVyeV9wcmUpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXF1ZXJ5LXBvc3QiLAotICAgICAgR19DQUxMQkFDSyAoZG9fcGFkX3F1ZXJ5X3Bvc3QpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAiZWxlbWVudC1wb3N0LW1lc3NhZ2UtcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3Bvc3RfbWVzc2FnZV9wcmUpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAiZWxlbWVudC1wb3N0LW1lc3NhZ2UtcG9zdCIsCi0gICAgICBHX0NBTExCQUNLIChkb19wb3N0X21lc3NhZ2VfcG9zdCkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJlbGVtZW50LXF1ZXJ5LXByZSIsCi0gICAgICBHX0NBTExCQUNLIChkb19lbGVtZW50X3F1ZXJ5X3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJlbGVtZW50LXF1ZXJ5LXBvc3QiLAotICAgICAgR19DQUxMQkFDSyAoZG9fZWxlbWVudF9xdWVyeV9wb3N0KSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgImVsZW1lbnQtbmV3IiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX2VsZW1lbnRfbmV3KSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgImVsZW1lbnQtYWRkLXBhZCIsCi0gICAgICBHX0NBTExCQUNLIChkb19lbGVtZW50X2FkZF9wYWQpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAiZWxlbWVudC1yZW1vdmUtcGFkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX2VsZW1lbnRfcmVtb3ZlX3BhZCkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJlbGVtZW50LWNoYW5nZS1zdGF0ZS1wcmUiLAotICAgICAgR19DQUxMQkFDSyAoZG9fZWxlbWVudF9jaGFuZ2Vfc3RhdGVfcHJlKSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgImVsZW1lbnQtY2hhbmdlLXN0YXRlLXBvc3QiLAotICAgICAgR19DQUxMQkFDSyAoZG9fZWxlbWVudF9jaGFuZ2Vfc3RhdGVfcG9zdCkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJiaW4tYWRkLXByZSIsCi0gICAgICBHX0NBTExCQUNLIChkb19iaW5fYWRkX3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJiaW4tYWRkLXBvc3QiLAotICAgICAgR19DQUxMQkFDSyAoZG9fYmluX2FkZF9wb3N0KSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgImJpbi1yZW1vdmUtcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX2Jpbl9yZW1vdmVfcHJlKSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgImJpbi1yZW1vdmUtcG9zdCIsCi0gICAgICBHX0NBTExCQUNLIChkb19iaW5fcmVtb3ZlX3Bvc3QpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLWxpbmstcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3BhZF9saW5rX3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJwYWQtbGluay1wb3N0IiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3BhZF9saW5rX3Bvc3QpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXVubGluay1wcmUiLAotICAgICAgR19DQUxMQkFDSyAoZG9fcGFkX3VubGlua19wcmUpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXVubGluay1wb3N0IiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3BhZF91bmxpbmtfcG9zdCkpOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy90cmFjZXJzL2dzdGxvZy5oIGIvcGx1Z2lucy90cmFjZXJzL2dzdGxvZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjBkZDdmLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvdHJhY2Vycy9nc3Rsb2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0bG9nLmg6IHRyYWNpbmcgbW9kdWxlIHRoYXQgbG9ncyBldmVudHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0xPR19UUkFDRVJfSF9fCi0jZGVmaW5lIF9fR1NUX0xPR19UUkFDRVJfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRyYWNlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfTE9HX1RSQUNFUiBcCi0gIChnc3RfbG9nX3RyYWNlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfTE9HX1RSQUNFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0xPR19UUkFDRVIsR3N0TG9nVHJhY2VyKSkKLSNkZWZpbmUgR1NUX0xPR19UUkFDRVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTE9HX1RSQUNFUixHc3RMb2dUcmFjZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19MT0dfVFJBQ0VSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfTE9HX1RSQUNFUikpCi0jZGVmaW5lIEdTVF9JU19MT0dfVFJBQ0VSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0xPR19UUkFDRVIpKQotI2RlZmluZSBHU1RfTE9HX1RSQUNFUl9DQVNUKG9iaikgKChHc3RMb2dUcmFjZXIgKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdExvZ1RyYWNlciBHc3RMb2dUcmFjZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TG9nVHJhY2VyQ2xhc3MgR3N0TG9nVHJhY2VyQ2xhc3M7Ci0KLS8qKgotICogR3N0TG9nVHJhY2VyOgotICoKLSAqIE9wYXF1ZSAjR3N0TG9nVHJhY2VyIGRhdGEgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBfR3N0TG9nVHJhY2VyIHsKLSAgR3N0VHJhY2VyIAkgcGFyZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotfTsKLQotc3RydWN0IF9Hc3RMb2dUcmFjZXJDbGFzcyB7Ci0gIEdzdFRyYWNlckNsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWxzICovCi19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X2xvZ190cmFjZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTE9HX1RSQUNFUl9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYyBiL3BsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E3ODNlZS4uMDAwMDAwMAotLS0gYS9wbHVnaW5zL3RyYWNlcnMvZ3N0cnVzYWdlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3RydXNhZ2UuYzogdHJhY2luZyBtb2R1bGUgdGhhdCBsb2dzIHJlc291cmNlIHVzYWdlIHN0YXRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3RydXNhZ2UKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogbG9nIHJlc291cmNlIHVzYWdlIHN0YXRzCi0gKgotICogQSB0cmFjaW5nIG1vZHVsZSB0aGF0IHRha2UgcnVzYWdlKCkgc25hcHNob3RzIGFuZCBsb2dzIHRoZW0uCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlICJnc3RydXNhZ2UuaCIKLQotI2lmZGVmIEhBVkVfU1lTX1JFU09VUkNFX0gKLSNpZm5kZWYgX19VU0VfR05VCi0jIGRlZmluZSBfX1VTRV9HTlUgICAgICAgICAgICAgIC8qIFJVU0FHRV9USFJFQUQgKi8KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgotI2VuZGlmCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9ydXNhZ2VfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J1c2FnZV9kZWJ1ZwotCi1HX0xPQ0tfREVGSU5FIChfcHJvYyk7Ci0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfcnVzYWdlX2RlYnVnLCAicnVzYWdlIiwgMCwgInJ1c2FnZSB0cmFjZXIiKTsKLSNkZWZpbmUgZ3N0X3J1c2FnZV90cmFjZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFJVc2FnZVRyYWNlciwgZ3N0X3J1c2FnZV90cmFjZXIsIEdTVF9UWVBFX1RSQUNFUiwKLSAgICBfZG9faW5pdCk7Ci0KLS8qIHJlbWVtYmVyIHggbWVhc3VyZW1lbnRzIHBlciBzZWxmLT53aW5kb3cgKi8KLSNkZWZpbmUgV0lORE9XX1NVQkRJViAxMDAKLQotLyogbnVtYmVyIG9mIGNwdXMgdG8gc2NhbGUgY3B1LXVzYWdlIGluIHRocmVhZHMgKi8KLXN0YXRpYyBnbG9uZyBudW1fY3B1cyA9IDE7Ci0KLXN0YXRpYyBHc3RUcmFjZXJSZWNvcmQgKnRyX3Byb2MsICp0cl90aHJlYWQ7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIC8qIHRpbWUgc3BlbmQgaW4gdGhpcyB0aHJlYWQgKi8KLSAgR3N0Q2xvY2tUaW1lIHR0aHJlYWQ7Ci0gIEdzdFRyYWNlVmFsdWVzICp0dnNfdGhyZWFkOwotfSBHc3RUaHJlYWRTdGF0czsKLQotLyogZGF0YSBoZWxwZXIgKi8KLQotc3RhdGljIHZvaWQKLWZyZWVfdHJhY2VfdmFsdWUgKGdwb2ludGVyIGRhdGEpCi17Ci0gIGdfc2xpY2VfZnJlZSAoR3N0VHJhY2VWYWx1ZSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyBHc3RUcmFjZVZhbHVlcyAqCi1tYWtlX3RyYWNlX3ZhbHVlcyAoR3N0Q2xvY2tUaW1lIHdpbmRvdykKLXsKLSAgR3N0VHJhY2VWYWx1ZXMgKnNlbGYgPSBnX3NsaWNlX25ldzAgKEdzdFRyYWNlVmFsdWVzKTsKLSAgc2VsZi0+d2luZG93ID0gd2luZG93OwotICBnX3F1ZXVlX2luaXQgKCZzZWxmLT52YWx1ZXMpOwotICByZXR1cm4gc2VsZjsKLX0KLQotc3RhdGljIHZvaWQKLWZyZWVfdHJhY2VfdmFsdWVzIChHc3RUcmFjZVZhbHVlcyAqIHNlbGYpCi17Ci0gIGdfcXVldWVfZm9yZWFjaCAoJnNlbGYtPnZhbHVlcywgKEdGdW5jKSBmcmVlX3RyYWNlX3ZhbHVlLCBOVUxMKTsKLSAgZ19xdWV1ZV9jbGVhciAoJnNlbGYtPnZhbHVlcyk7Ci0gIGdfc2xpY2VfZnJlZSAoR3N0VHJhY2VWYWx1ZXMsIHNlbGYpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXVwZGF0ZV90cmFjZV92YWx1ZSAoR3N0VHJhY2VWYWx1ZXMgKiBzZWxmLCBHc3RDbG9ja1RpbWUgbnRzLAotICAgIEdzdENsb2NrVGltZSBudmFsLCBHc3RDbG9ja1RpbWUgKiBkdHMsIEdzdENsb2NrVGltZSAqIGR2YWwpCi17Ci0gIEdzdFRyYWNlVmFsdWUgKmx2OwotICBHc3RDbG9ja1RpbWVEaWZmIGR0OwotICBHc3RDbG9ja1RpbWUgd2luZG93ID0gc2VsZi0+d2luZG93OwotICBHUXVldWUgKnEgPSAmc2VsZi0+dmFsdWVzOwotICBHTGlzdCAqbm9kZSA9IHEtPnRhaWw7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0KLSAgLyogc2VhcmNoIGZyb20gdGhlIHRhaWwgb2YgdGhlIHF1ZXVlIGZvciBhIGdvb2QgR3N0VHJhY2VWYWx1ZSAqLwotICB3aGlsZSAobm9kZSkgewotICAgIGx2ID0gbm9kZS0+ZGF0YTsKLSAgICBkdCA9IEdTVF9DTE9DS19ESUZGIChsdi0+dHMsIG50cyk7Ci0gICAgaWYgKGR0IDwgd2luZG93KSB7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgewotICAgICAgbm9kZSA9IGdfbGlzdF9wcmV2aW91cyAobm9kZSk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG5vZGUpIHsKLSAgICAvKiBjYWxjdWxhdGUgdGhlIHdpbmRvd2VkIHZhbHVlICovCi0gICAgKmR0cyA9IGR0OwotICAgICpkdmFsID0gR1NUX0NMT0NLX0RJRkYgKGx2LT52YWwsIG52YWwpOwotCi0gICAgLyogZHJvcCBhbGwgb2xkZXIgbWVhc3VyZW1lbnRzICovCi0gICAgd2hpbGUgKHEtPnRhaWwgIT0gbm9kZSkgewotICAgICAgZnJlZV90cmFjZV92YWx1ZSAoZ19xdWV1ZV9wb3BfdGFpbCAocSkpOwotICAgIH0KLSAgICByZXQgPSBUUlVFOwotICB9IGVsc2UgewotICAgICpkdHMgPSBudHM7Ci0gICAgKmR2YWwgPSBudmFsOwotICB9Ci0KLSAgLyogZG9uJ3QgcHVzaCB0b28gbWFueSBkYXRhIGl0ZW1zICovCi0gIGx2ID0gcS0+aGVhZCA/IHEtPmhlYWQtPmRhdGEgOiBOVUxMOwotICBpZiAoIWx2IHx8IChHU1RfQ0xPQ0tfRElGRiAobHYtPnRzLCBudHMpID4gKHdpbmRvdyAvIFdJTkRPV19TVUJESVYpKSkgewotICAgIC8qIHB1c2ggdGhlIG5ldyBtZWFzdXJlbWVudCAqLwotICAgIGx2ID0gZ19zbGljZV9uZXcwIChHc3RUcmFjZVZhbHVlKTsKLSAgICBsdi0+dHMgPSBudHM7Ci0gICAgbHYtPnZhbCA9IG52YWw7Ci0gICAgZ19xdWV1ZV9wdXNoX2hlYWQgKHEsIGx2KTsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyB2b2lkCi1mcmVlX3RocmVhZF9zdGF0cyAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZnJlZV90cmFjZV92YWx1ZXMgKCgoR3N0VGhyZWFkU3RhdHMgKikgZGF0YSktPnR2c190aHJlYWQpOwotICBnX3NsaWNlX2ZyZWUgKEdzdFRocmVhZFN0YXRzLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3N0YXRzIChHc3RUcmFjZXIgKiBvYmosIGd1aW50NjQgdHMpCi17Ci0gIEdzdFJVc2FnZVRyYWNlciAqc2VsZiA9IEdTVF9SVVNBR0VfVFJBQ0VSX0NBU1QgKG9iaik7Ci0gIEdzdFRocmVhZFN0YXRzICpzdGF0czsKLSAgZ3BvaW50ZXIgdGhyZWFkX2lkID0gZ190aHJlYWRfc2VsZiAoKTsKLSAgZ3VpbnQgYXZnX2NwdWxvYWQsIGN1cl9jcHVsb2FkOwotICBzdHJ1Y3QgcnVzYWdlIHJ1OwotICBHc3RDbG9ja1RpbWUgdHByb2MgPSBHX0dVSU5UNjRfQ09OU1RBTlQgKDApOwotICBHc3RDbG9ja1RpbWUgdHRocmVhZCA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMCk7Ci0gIEdzdENsb2NrVGltZSBkdHMsIGR0cHJvYzsKLQotI2lmZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQotICB7Ci0gICAgc3RydWN0IHRpbWVzcGVjIG5vdzsKLQotICAgIGlmICghY2xvY2tfZ2V0dGltZSAoQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lELCAmbm93KSkgewotICAgICAgdHByb2MgPSBHU1RfVElNRVNQRUNfVE9fVElNRSAobm93KTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmosCi0gICAgICAgICAgImNsb2NrX2dldHRpbWUgKENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCwuLi4pIGZhaWxlZDogJXMiLAotICAgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgICBnZXRydXNhZ2UgKFJVU0FHRV9TRUxGLCAmcnUpOwotICAgICAgdHByb2MgPQotICAgICAgICAgIEdTVF9USU1FVkFMX1RPX1RJTUUgKHJ1LnJ1X3V0aW1lKSArIEdTVF9USU1FVkFMX1RPX1RJTUUgKHJ1LnJ1X3N0aW1lKTsKLSAgICB9Ci0KLSAgICAvKiBjcHUgdGltZSBwZXIgdGhyZWFkICovCi0gICAgaWYgKCFjbG9ja19nZXR0aW1lIChDTE9DS19USFJFQURfQ1BVVElNRV9JRCwgJm5vdykpIHsKLSAgICAgIHR0aHJlYWQgPSBHU1RfVElNRVNQRUNfVE9fVElNRSAobm93KTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmosCi0gICAgICAgICAgImNsb2NrX2dldHRpbWUgKENMT0NLX1RIUkVBRF9DUFVUSU1FX0lELC4uLikgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSNpZmRlZiBSVVNBR0VfVEhSRUFECi0gICAgICBnZXRydXNhZ2UgKFJVU0FHRV9USFJFQUQsICZydSk7Ci0gICAgICB0dGhyZWFkID0KLSAgICAgICAgICBHU1RfVElNRVZBTF9UT19USU1FIChydS5ydV91dGltZSkgKyBHU1RfVElNRVZBTF9UT19USU1FIChydS5ydV9zdGltZSk7Ci0jZW5kaWYKLSAgICB9Ci0gIH0KLSNlbHNlCi0gIGdldHJ1c2FnZSAoUlVTQUdFX1NFTEYsICZydSk7Ci0gIHRwcm9jID0gR1NUX1RJTUVWQUxfVE9fVElNRSAocnUucnVfdXRpbWUpICsgR1NUX1RJTUVWQUxfVE9fVElNRSAocnUucnVfc3RpbWUpOwotI2lmZGVmIFJVU0FHRV9USFJFQUQKLSAgZ2V0cnVzYWdlIChSVVNBR0VfVEhSRUFELCAmcnUpOwotICB0dGhyZWFkID0KLSAgICAgIEdTVF9USU1FVkFMX1RPX1RJTUUgKHJ1LnJ1X3V0aW1lKSArIEdTVF9USU1FVkFMX1RPX1RJTUUgKHJ1LnJ1X3N0aW1lKTsKLSNlbmRpZgotI2VuZGlmCi0gIC8qIGdldCBzdGF0cyByZWNvcmQgZm9yIGN1cnJlbnQgdGhyZWFkICovCi0gIGlmICghKHN0YXRzID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoc2VsZi0+dGhyZWFkcywgdGhyZWFkX2lkKSkpIHsKLSAgICBzdGF0cyA9IGdfc2xpY2VfbmV3MCAoR3N0VGhyZWFkU3RhdHMpOwotICAgIHN0YXRzLT50dnNfdGhyZWFkID0gbWFrZV90cmFjZV92YWx1ZXMgKEdTVF9TRUNPTkQpOwotICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKHNlbGYtPnRocmVhZHMsIHRocmVhZF9pZCwgc3RhdHMpOwotICB9Ci0gIHN0YXRzLT50dGhyZWFkID0gdHRocmVhZDsKLQotICAvKiBDYWxpYnJhdGUgdHMgZm9yIHRoZSBwcm9jZXNzIGFuZCBtYWluIHRocmVhZC4gRm9yIHR0aHJlYWRbbWFpbl0gYW5kIHRwcm9jCi0gICAqIHRoZSB0aW1lIGlzIGxhcmdlciB0aGFuIHRzLCBhcyBvdXIgYmFzZS10cyBpcyB0YWtlbiBhZnRlciB0aGUgcHJvY2VzcyBoYXMKLSAgICogc3RhcnRlZC4KLSAgICovCi0gIGlmIChHX1VOTElLRUxZICh0aHJlYWRfaWQgPT0gc2VsZi0+bWFpbl90aHJlYWRfaWQpKSB7Ci0gICAgc2VsZi0+bWFpbl90aHJlYWRfaWQgPSBOVUxMOwotICAgIC8qIHdoZW4gdGhlIHJlZ2lzdHJ5IGdldHMgdXBkYXRlZCwgdGhlIHRwcm9jIGlzIGxlc3MgdGhhbiB0aGUgZGVidWcgdGltZSA/ICovCi0gICAgLyogVE9ETyhlbnNvbmljKTogd2Ugc3RpbGwgc2VlIGNhc2VzIHdoZXJlIHRwcm9jIG92ZXJ0YWtlcyB0cywgZXNwZWNpYWxseQotICAgICAqIHdoZW4gd2l0aCBzeW5jPWZhbHNlLCBjYW4gdGhpcyBiZSBkdWUgdG8gbXVsdGlwbGUgY29yZXMgaW4gdXNlPyAqLwotICAgIGlmICh0cHJvYyA+IHRzKSB7Ci0gICAgICBzZWxmLT50cHJvY19iYXNlID0gdHByb2MgLSB0czsKLSAgICAgIEdTVF9ERUJVRyAoInJ1c2FnZTogY2FsaWJyYXRpbmcgYnkgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCB0aHJlYWQ6ICUiCi0gICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLCBwcm9jOiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgIHNlbGYtPnRwcm9jX2Jhc2UsIHN0YXRzLT50dGhyZWFkLCB0cHJvYyk7Ci0gICAgICBzdGF0cy0+dHRocmVhZCAtPSBzZWxmLT50cHJvY19iYXNlOwotICAgIH0KLSAgfQotICAvKiB3ZSBhbHdheXMgbmVlZCB0byBjb3JyZWN0IHByb2MgdGltZSAqLwotICB0cHJvYyAtPSBzZWxmLT50cHJvY19iYXNlOwotCi0gIC8qIEZJWE1FOiBob3cgY2FuIHdlIHRha2UgY3B1LWZyZXF1ZW5jeSBzY2FsaW5nIGludG8gYWNjb3VudD8KLSAgICogLSBsb29raW5nIGF0IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS8KLSAgICogICBzY2FsZV9mYWN0b3I9c2NhbGluZ19tYXhfZnJlcS9zY2FsaW5nX2N1cl9mcmVxCi0gICAqIC0gYXMgYSB3b3JrYXJvdW5kIHdlIGNhbiBzd2l0Y2ggaXQgdmlhIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX2dvdmVybm9yCi0gICAqICAgY3B1ZnJlcS1zZWxlY3RvciAtZyBwZXJmb3JtYW5jZQotICAgKiAgIGNwdWZyZXEtc2VsZWN0b3IgLWcgb25kZW1hbmQKLSAgICovCi0gIC8qICpJTkRFTlQtT0ZGKiAqLwotICBhdmdfY3B1bG9hZCA9IChndWludCkgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzdGF0cy0+dHRocmVhZCwKLSAgICAgIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwKSwgdHMpOwotICB1cGRhdGVfdHJhY2VfdmFsdWUgKHN0YXRzLT50dnNfdGhyZWFkLCB0cywgc3RhdHMtPnR0aHJlYWQsICZkdHMsICZkdHByb2MpOwotICBjdXJfY3B1bG9hZCA9IChndWludCkgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChkdHByb2MsCi0gICAgICBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMCksIGR0cyk7Ci0gIGdzdF90cmFjZXJfcmVjb3JkX2xvZyAodHJfdGhyZWFkLCAoZ3VpbnQ2NCkgKGd1aW50cHRyKSB0aHJlYWRfaWQsIHRzLAotICAgICAgTUlOIChhdmdfY3B1bG9hZCwgMTAwMCksIE1JTiAoY3VyX2NwdWxvYWQsIDEwMDApLCBzdGF0cy0+dHRocmVhZCk7Ci0KLSAgYXZnX2NwdWxvYWQgPSAoZ3VpbnQpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAodHByb2MgLyBudW1fY3B1cywKLSAgICAgIEdfR0lOVDY0X0NPTlNUQU5UICgxMDAwKSwgdHMpOwotICBHX0xPQ0sgKF9wcm9jKTsKLSAgdXBkYXRlX3RyYWNlX3ZhbHVlIChzZWxmLT50dnNfcHJvYywgdHMsIHRwcm9jLCAmZHRzLCAmZHRwcm9jKTsKLSAgR19VTkxPQ0sgKF9wcm9jKTsKLSAgY3VyX2NwdWxvYWQgPSAoZ3VpbnQpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZHRwcm9jIC8gbnVtX2NwdXMsCi0gICAgICBHX0dJTlQ2NF9DT05TVEFOVCAoMTAwMCksIGR0cyk7Ci0gIGdzdF90cmFjZXJfcmVjb3JkX2xvZyAodHJfcHJvYywgKGd1aW50NjQpIGdldHBpZCAoKSwgdHMsCi0gICAgICBNSU4gKGF2Z19jcHVsb2FkLCAxMDAwKSwgTUlOIChjdXJfY3B1bG9hZCwgMTAwMCksIHRwcm9jKTsKLSAgLyogKklOREVOVC1PTiogKi8KLX0KLQotLyogdHJhY2VyIGNsYXNzICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfcnVzYWdlX3RyYWNlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iaikKLXsKLSAgR3N0UlVzYWdlVHJhY2VyICpzZWxmID0gR1NUX1JVU0FHRV9UUkFDRVIgKG9iaik7Ci0KLSAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKHNlbGYtPnRocmVhZHMpOwotICBmcmVlX3RyYWNlX3ZhbHVlcyAoc2VsZi0+dHZzX3Byb2MpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydXNhZ2VfdHJhY2VyX2NsYXNzX2luaXQgKEdzdFJVc2FnZVRyYWNlckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnVzYWdlX3RyYWNlcl9maW5hbGl6ZTsKLQotICBpZiAoKG51bV9jcHVzID0gc3lzY29uZiAoX1NDX05QUk9DRVNTT1JTX09OTE4pKSA9PSAtMSkgewotICAgIEdTVF9XQVJOSU5HICgiZmFpbGVkIHRvIGdldCBudW1iZXIgb2YgY3B1cyBvbmxpbmUiKTsKLSAgICBpZiAoKG51bV9jcHVzID0gc3lzY29uZiAoX1NDX05QUk9DRVNTT1JTX0NPTkYpKSA9PSAtMSkgewotICAgICAgR1NUX1dBUk5JTkcgKCJmYWlsZWQgdG8gZ2V0IG51bWJlciBvZiBjcHVzLCBhc3N1bWluZyAxIik7Ci0gICAgICBudW1fY3B1cyA9IDE7Ci0gICAgfQotICB9Ci0gIEdTVF9ERUJVRyAoInJ1c2FnZTogbnVtX2NwdXM9JWxkIiwgbnVtX2NwdXMpOwotCi0gIC8qIGFubm91bmNlIHRyYWNlIGZvcm1hdHMgKi8KLSAgLyogKklOREVOVC1PRkYqICovCi0gIHRyX3RocmVhZCA9IGdzdF90cmFjZXJfcmVjb3JkX25ldyAoInRocmVhZC1ydXNhZ2UuY2xhc3MiLAotICAgICAgInRocmVhZC1pZCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfVEhSRUFELAotICAgICAgICAgIE5VTEwpLAotICAgICAgInRzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAiZXZlbnQgdHMiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgImF2ZXJhZ2UtY3B1bG9hZCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJhdmVyYWdlIGNwdSB1c2FnZSBwZXIgdGhyZWFkIGluIOKAsCIsCi0gICAgICAgICAgImZsYWdzIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX0ZMQUdTLCBHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX0FHR1JFR0FURUQsCi0gICAgICAgICAgIm1pbiIsIEdfVFlQRV9VSU5ULCAwLAotICAgICAgICAgICJtYXgiLCBHX1RZUEVfVUlOVCwgMTAwMCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJjdXJyZW50LWNwdWxvYWQiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAiY3VycmVudCBjcHUgdXNhZ2UgcGVyIHRocmVhZCBpbiDigLAiLAotICAgICAgICAgICJtaW4iLCBHX1RZUEVfVUlOVCwgMCwKLSAgICAgICAgICAibWF4IiwgR19UWVBFX1VJTlQsIDEwMDAsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAidGltZSIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgInRpbWUgc3BlbnQgaW4gdGhyZWFkIGluIG5zIiwKLSAgICAgICAgICAiZmxhZ3MiLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfRkxBR1MsIEdTVF9UUkFDRVJfVkFMVUVfRkxBR1NfQUdHUkVHQVRFRCwKLSAgICAgICAgICAibWluIiwgR19UWVBFX1VJTlQ2NCwgR19HVUlOVDY0X0NPTlNUQU5UICgwKSwKLSAgICAgICAgICAibWF4IiwgR19UWVBFX1VJTlQ2NCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgTlVMTCksCi0gICAgICBOVUxMKTsKLSAgdHJfcHJvYyA9IGdzdF90cmFjZXJfcmVjb3JkX25ldyAoInByb2MtcnVzYWdlLmNsYXNzIiwKLSAgICAgICJwcm9jZXNzLWlkIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInNjb3BlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAicmVsYXRlZC10byIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSwgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QUk9DRVNTLAotICAgICAgICAgIE5VTEwpLAotICAgICAgInRzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAiZXZlbnQgdHMiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgImF2ZXJhZ2UtY3B1bG9hZCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJhdmVyYWdlIGNwdSB1c2FnZSBwZXIgcHJvY2VzcyBpbiDigLAiLAotICAgICAgICAgICJmbGFncyIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9GTEFHUywgR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19BR0dSRUdBVEVELAotICAgICAgICAgICJtaW4iLCBHX1RZUEVfVUlOVCwgMCwKLSAgICAgICAgICAibWF4IiwgR19UWVBFX1VJTlQsIDEwMDAsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAiY3VycmVudC1jcHVsb2FkIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgImN1cnJlbnQgY3B1IHVzYWdlIHBlciBwcm9jZXNzIGluIOKAsCIsCi0gICAgICAgICAgIm1pbiIsIEdfVFlQRV9VSU5ULCAwLAotICAgICAgICAgICJtYXgiLCBHX1RZUEVfVUlOVCwgMTAwMCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJ0aW1lIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAidGltZSBzcGVudCBpbiBwcm9jZXNzIGluIG5zIiwKLSAgICAgICAgICAiZmxhZ3MiLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfRkxBR1MsIEdTVF9UUkFDRVJfVkFMVUVfRkxBR1NfQUdHUkVHQVRFRCwKLSAgICAgICAgICAibWluIiwgR19UWVBFX1VJTlQ2NCwgR19HVUlOVDY0X0NPTlNUQU5UICgwKSwKLSAgICAgICAgICAibWF4IiwgR19UWVBFX1VJTlQ2NCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgTlVMTCksCi0gICAgICBOVUxMKTsKLSAgLyogKklOREVOVC1PTiogKi8KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydXNhZ2VfdHJhY2VyX2luaXQgKEdzdFJVc2FnZVRyYWNlciAqIHNlbGYpCi17Ci0gIEdzdFRyYWNlciAqdHJhY2VyID0gR1NUX1RSQUNFUiAoc2VsZik7Ci0KLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCBOVUxMLCBHX0NBTExCQUNLIChkb19zdGF0cykpOwotCi0gIHNlbGYtPnRocmVhZHMgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKE5VTEwsIE5VTEwsIE5VTEwsIGZyZWVfdGhyZWFkX3N0YXRzKTsKLSAgc2VsZi0+dHZzX3Byb2MgPSBtYWtlX3RyYWNlX3ZhbHVlcyAoR1NUX1NFQ09ORCk7Ci0gIHNlbGYtPm1haW5fdGhyZWFkX2lkID0gZ190aHJlYWRfc2VsZiAoKTsKLQotICBHU1RfREVCVUcgKCJydXNhZ2U6IG1haW4gdGhyZWFkPSVwIiwgc2VsZi0+bWFpbl90aHJlYWRfaWQpOwotfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy90cmFjZXJzL2dzdHJ1c2FnZS5oIGIvcGx1Z2lucy90cmFjZXJzL2dzdHJ1c2FnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWFiYmNhLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvdHJhY2Vycy9nc3RydXNhZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0cnVzYWdlLmg6IHRyYWNpbmcgbW9kdWxlIHRoYXQgbG9ncyByZXNvdXJjZSB1c2FnZSBzdGF0cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlVTQUdFX1RSQUNFUl9IX18KLSNkZWZpbmUgX19HU1RfUlVTQUdFX1RSQUNFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dHJhY2VyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVVNBR0VfVFJBQ0VSIFwKLSAgKGdzdF9ydXNhZ2VfdHJhY2VyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVVNBR0VfVFJBQ0VSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlVTQUdFX1RSQUNFUixHc3RSVXNhZ2VUcmFjZXIpKQotI2RlZmluZSBHU1RfUlVTQUdFX1RSQUNFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVVNBR0VfVFJBQ0VSLEdzdFJVc2FnZVRyYWNlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JVU0FHRV9UUkFDRVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVVNBR0VfVFJBQ0VSKSkKLSNkZWZpbmUgR1NUX0lTX1JVU0FHRV9UUkFDRVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlVTQUdFX1RSQUNFUikpCi0jZGVmaW5lIEdTVF9SVVNBR0VfVFJBQ0VSX0NBU1Qob2JqKSAoKEdzdFJVc2FnZVRyYWNlciAqKShvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UlVzYWdlVHJhY2VyIEdzdFJVc2FnZVRyYWNlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSVXNhZ2VUcmFjZXJDbGFzcyBHc3RSVXNhZ2VUcmFjZXJDbGFzczsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0Q2xvY2tUaW1lIHRzOwotICBHc3RDbG9ja1RpbWUgdmFsOwotfSBHc3RUcmFjZVZhbHVlOwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RDbG9ja1RpbWUgd2luZG93OwotICBHUXVldWUgdmFsdWVzOyAgICAgICAgICAgICAgICAvKiBHc3RUcmFjZVZhbHVlKiAqLwotfSBHc3RUcmFjZVZhbHVlczsKLQotLyoqCi0gKiBHc3RSVXNhZ2VUcmFjZXI6Ci0gKgotICogT3BhcXVlICNHc3RSVXNhZ2VUcmFjZXIgZGF0YSBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IF9Hc3RSVXNhZ2VUcmFjZXIgewotICBHc3RUcmFjZXIgCSBwYXJlbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovICAgICAgICAKLSAgR0hhc2hUYWJsZSAqdGhyZWFkczsKLSAgR3N0VHJhY2VWYWx1ZXMgKnR2c19wcm9jOwotCi0gIC8qIGZvciB0cyBjYWxpYnJhdGlvbiAqLwotICBncG9pbnRlciBtYWluX3RocmVhZF9pZDsKLSAgZ3VpbnQ2NCB0cHJvY19iYXNlOwotfTsKLQotc3RydWN0IF9Hc3RSVXNhZ2VUcmFjZXJDbGFzcyB7Ci0gIEdzdFRyYWNlckNsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWxzICovCi19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X3J1c2FnZV90cmFjZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlVTQUdFX1RSQUNFUl9IX18gKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5jIGIvcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNzcwNWIuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy90cmFjZXJzL2dzdHN0YXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3RzdGF0cy5jOiB0cmFjaW5nIG1vZHVsZSB0aGF0IGxvZ3MgZXZlbnRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3RzdGF0cwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBsb2cgZXZlbnQgc3RhdHMKLSAqCi0gKiBBIHRyYWNpbmcgbW9kdWxlIHRoYXQgYnVpbGRzIHVzYWdlIHN0YXRpc3RpYyBmb3IgZWxlbWVudHMgYW5kIHBhZHMuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RzdGF0cy5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3N0YXRzX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9zdGF0c19kZWJ1ZwotCi1zdGF0aWMgR1F1YXJrIGRhdGFfcXVhcms7Ci1HX0xPQ0tfREVGSU5FIChfZWxlbV9zdGF0cyk7Ci1HX0xPQ0tfREVGSU5FIChfcGFkX3N0YXRzKTsKLQotI2RlZmluZSBfZG9faW5pdCBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9zdGF0c19kZWJ1ZywgInN0YXRzIiwgMCwgInN0YXRzIHRyYWNlciIpOyBcCi0gICAgZGF0YV9xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZ3N0c3RhdHM6ZGF0YSIpOwotI2RlZmluZSBnc3Rfc3RhdHNfdHJhY2VyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RTdGF0c1RyYWNlciwgZ3N0X3N0YXRzX3RyYWNlciwgR1NUX1RZUEVfVFJBQ0VSLAotICAgIF9kb19pbml0KTsKLQotc3RhdGljIEdzdFRyYWNlclJlY29yZCAqdHJfbmV3X2VsZW1lbnQ7Ci1zdGF0aWMgR3N0VHJhY2VyUmVjb3JkICp0cl9uZXdfcGFkOwotc3RhdGljIEdzdFRyYWNlclJlY29yZCAqdHJfYnVmZmVyOwotc3RhdGljIEdzdFRyYWNlclJlY29yZCAqdHJfZWxlbWVudF9xdWVyeTsKLXN0YXRpYyBHc3RUcmFjZXJSZWNvcmQgKnRyX2V2ZW50Owotc3RhdGljIEdzdFRyYWNlclJlY29yZCAqdHJfbWVzc2FnZTsKLXN0YXRpYyBHc3RUcmFjZXJSZWNvcmQgKnRyX3F1ZXJ5OwotCi10eXBlZGVmIHN0cnVjdAotewotICAvKiB3ZSBjYW4ndCByZWx5IG9uIHRoZSBhZGRyZXNzIHRvIGJlIHVuaXF1ZSBvdmVyIHRpbWUgKi8KLSAgZ3VpbnQgaW5kZXg7Ci0gIC8qIGZvciBwcmUgKyBwb3N0ICovCi0gIEdzdENsb2NrVGltZSBsYXN0X3RzOwotICAvKiBoaWVyYXJjaHkgKi8KLSAgZ3VpbnQgcGFyZW50X2l4OwotfSBHc3RQYWRTdGF0czsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgLyogd2UgY2FuJ3QgcmVseSBvbiB0aGUgYWRkcmVzcyB0byBiZSB1bmlxdWUgb3ZlciB0aW1lICovCi0gIGd1aW50IGluZGV4OwotICAvKiBmb3IgcHJlICsgcG9zdCAqLwotICBHc3RDbG9ja1RpbWUgbGFzdF90czsKLSAgLyogdGltZSBzcGVuZCBpbiB0aGlzIGVsZW1lbnQgKi8KLSAgR3N0Q2xvY2tUaW1lIHRyZWFsOwotICAvKiBoaWVyYXJjaHkgKi8KLSAgZ3VpbnQgcGFyZW50X2l4OwotfSBHc3RFbGVtZW50U3RhdHM7Ci0KLS8qIGRhdGEgaGVscGVyICovCi0KLXN0YXRpYyBHc3RFbGVtZW50U3RhdHMgbm9fZWxlbV9zdGF0cyA9IHsgMCwgfTsKLQotc3RhdGljIEdzdEVsZW1lbnRTdGF0cyAqCi1maWxsX2VsZW1lbnRfc3RhdHMgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEVsZW1lbnRTdGF0cyAqc3RhdHMgPSBnX3NsaWNlX25ldzAgKEdzdEVsZW1lbnRTdGF0cyk7Ci0KLSAgc3RhdHMtPmluZGV4ID0gc2VsZi0+bnVtX2VsZW1lbnRzKys7Ci0gIHN0YXRzLT5wYXJlbnRfaXggPSBHX01BWFVJTlQ7Ci0gIHJldHVybiBzdGF0czsKLX0KLQotc3RhdGljIHZvaWQKLWxvZ19uZXdfZWxlbWVudF9zdGF0cyAoR3N0RWxlbWVudFN0YXRzICogc3RhdHMsIEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdENsb2NrVGltZSBlbGFwc2VkKQotewotICBnc3RfdHJhY2VyX3JlY29yZF9sb2cgKHRyX25ld19lbGVtZW50LCAoZ3VpbnQ2NCkgKGd1aW50cHRyKSBnX3RocmVhZF9zZWxmICgpLAotICAgICAgZWxhcHNlZCwgc3RhdHMtPmluZGV4LCBzdGF0cy0+cGFyZW50X2l4LCBHU1RfT0JKRUNUX05BTUUgKGVsZW1lbnQpLAotICAgICAgR19PQkpFQ1RfVFlQRV9OQU1FIChlbGVtZW50KSwgR1NUX0lTX0JJTiAoZWxlbWVudCkpOwotfQotCi1zdGF0aWMgdm9pZAotZnJlZV9lbGVtZW50X3N0YXRzIChncG9pbnRlciBkYXRhKQotewotICBnX3NsaWNlX2ZyZWUgKEdzdEVsZW1lbnRTdGF0cywgZGF0YSk7Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50U3RhdHMgKgotY3JlYXRlX2VsZW1lbnRfc3RhdHMgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEVsZW1lbnRTdGF0cyAqc3RhdHM7Ci0KLSAgc3RhdHMgPSBmaWxsX2VsZW1lbnRfc3RhdHMgKHNlbGYsIGVsZW1lbnQpOwotICBnX29iamVjdF9zZXRfcWRhdGFfZnVsbCAoKEdPYmplY3QgKikgZWxlbWVudCwgZGF0YV9xdWFyaywgc3RhdHMsCi0gICAgICBmcmVlX2VsZW1lbnRfc3RhdHMpOwotCi0gIHJldHVybiBzdGF0czsKLX0KLQotc3RhdGljIGlubGluZSBHc3RFbGVtZW50U3RhdHMgKgotZ2V0X2VsZW1lbnRfc3RhdHMgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEVsZW1lbnRTdGF0cyAqc3RhdHM7Ci0gIGdib29sZWFuIGlzX25ldyA9IEZBTFNFOwotCi0gIGlmICghZWxlbWVudCkgewotICAgIG5vX2VsZW1fc3RhdHMuaW5kZXggPSBHX01BWFVJTlQ7Ci0gICAgcmV0dXJuICZub19lbGVtX3N0YXRzOwotICB9Ci0KLSAgR19MT0NLIChfZWxlbV9zdGF0cyk7Ci0gIGlmICghKHN0YXRzID0gZ19vYmplY3RfZ2V0X3FkYXRhICgoR09iamVjdCAqKSBlbGVtZW50LCBkYXRhX3F1YXJrKSkpIHsKLSAgICBzdGF0cyA9IGNyZWF0ZV9lbGVtZW50X3N0YXRzIChzZWxmLCBlbGVtZW50KTsKLSAgICBpc19uZXcgPSBUUlVFOwotICB9Ci0gIEdfVU5MT0NLIChfZWxlbV9zdGF0cyk7Ci0gIGlmIChHX1VOTElLRUxZIChzdGF0cy0+cGFyZW50X2l4ID09IEdfTUFYVUlOVCkpIHsKLSAgICBHc3RFbGVtZW50ICpwYXJlbnQgPSBHU1RfRUxFTUVOVF9QQVJFTlQgKGVsZW1lbnQpOwotICAgIGlmIChwYXJlbnQpIHsKLSAgICAgIEdzdEVsZW1lbnRTdGF0cyAqcGFyZW50X3N0YXRzID0gZ2V0X2VsZW1lbnRfc3RhdHMgKHNlbGYsIHBhcmVudCk7Ci0gICAgICBzdGF0cy0+cGFyZW50X2l4ID0gcGFyZW50X3N0YXRzLT5pbmRleDsKLSAgICB9Ci0gIH0KLSAgaWYgKEdfVU5MSUtFTFkgKGlzX25ldykpIHsKLSAgICBsb2dfbmV3X2VsZW1lbnRfc3RhdHMgKHN0YXRzLCBlbGVtZW50LCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgfQotICByZXR1cm4gc3RhdHM7Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIGVsZW1lbnQvYmluIG93bmluZyB0aGUgcGFkLgotICoKLSAqIGluOiBhIG5vcm1hbCBwYWQKLSAqIG91dDogdGhlIGVsZW1lbnQKLSAqCi0gKiBpbjogYSBwcm94eSBwYWQKLSAqIG91dDogdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgcGVlciBvZiB0aGUgcHJveHkKLSAqCi0gKiBpbjogYSBnaG9zdCBwYWQKLSAqIG91dDogdGhlIGJpbiBvd25pbmcgdGhlIGdob3N0cGFkCi0gKi8KLS8qIFRPRE8oZW5zb25pYyk6IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KCkgd291bGQgbm90IHdvcmsgaGVyZSwgc2hvdWxkIHdlCi0gKiBhZGQgdGhpcyBhcyBuZXcgYXBpLCBlLmcuIGdzdF9wYWRfZmluZF9wYXJlbnRfZWxlbWVudCgpOwotICovCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1nZXRfcmVhbF9wYWRfcGFyZW50IChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotCi0gIGlmICghcGFkKQotICAgIHJldHVybiBOVUxMOwotCi0gIHBhcmVudCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpOwotCi0gIC8qIGlmIHBhcmVudCBvZiBwYWQgaXMgYSBnaG9zdC1wYWQsIHRoZW4gcGFkIGlzIGEgcHJveHlfcGFkICovCi0gIGlmIChwYXJlbnQgJiYgR1NUX0lTX0dIT1NUX1BBRCAocGFyZW50KSkgewotICAgIHBhZCA9IEdTVF9QQURfQ0FTVCAocGFyZW50KTsKLSAgICBwYXJlbnQgPSBHU1RfT0JKRUNUX1BBUkVOVCAocGFkKTsKLSAgfQotICByZXR1cm4gR1NUX0VMRU1FTlRfQ0FTVCAocGFyZW50KTsKLX0KLQotc3RhdGljIEdzdFBhZFN0YXRzIG5vX3BhZF9zdGF0cyA9IHsgMCwgfTsKLQotc3RhdGljIEdzdFBhZFN0YXRzICoKLWZpbGxfcGFkX3N0YXRzIChHc3RTdGF0c1RyYWNlciAqIHNlbGYsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0UGFkU3RhdHMgKnN0YXRzID0gZ19zbGljZV9uZXcwIChHc3RQYWRTdGF0cyk7Ci0KLSAgc3RhdHMtPmluZGV4ID0gc2VsZi0+bnVtX3BhZHMrKzsKLSAgc3RhdHMtPnBhcmVudF9peCA9IEdfTUFYVUlOVDsKLQotICByZXR1cm4gc3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sb2dfbmV3X3BhZF9zdGF0cyAoR3N0UGFkU3RhdHMgKiBzdGF0cywgR3N0UGFkICogcGFkKQotewotICBnc3RfdHJhY2VyX3JlY29yZF9sb2cgKHRyX25ld19wYWQsIChndWludDY0KSAoZ3VpbnRwdHIpIGdfdGhyZWFkX3NlbGYgKCksCi0gICAgICBzdGF0cy0+aW5kZXgsIHN0YXRzLT5wYXJlbnRfaXgsIEdTVF9PQkpFQ1RfTkFNRSAocGFkKSwKLSAgICAgIEdfT0JKRUNUX1RZUEVfTkFNRSAocGFkKSwgR1NUX0lTX0dIT1NUX1BBRCAocGFkKSwKLSAgICAgIEdTVF9QQURfRElSRUNUSU9OIChwYWQpKTsKLX0KLQotc3RhdGljIHZvaWQKLWZyZWVfcGFkX3N0YXRzIChncG9pbnRlciBkYXRhKQotewotICBnX3NsaWNlX2ZyZWUgKEdzdFBhZFN0YXRzLCBkYXRhKTsKLX0KLQotc3RhdGljIEdzdFBhZFN0YXRzICoKLWdldF9wYWRfc3RhdHMgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgR3N0UGFkICogcGFkKQotewotICBHc3RQYWRTdGF0cyAqc3RhdHM7Ci0gIGdib29sZWFuIGlzX25ldyA9IEZBTFNFOwotCi0gIGlmICghcGFkKSB7Ci0gICAgbm9fcGFkX3N0YXRzLmluZGV4ID0gR19NQVhVSU5UOwotICAgIHJldHVybiAmbm9fcGFkX3N0YXRzOwotICB9Ci0KLSAgR19MT0NLIChfcGFkX3N0YXRzKTsKLSAgaWYgKCEoc3RhdHMgPSBnX29iamVjdF9nZXRfcWRhdGEgKChHT2JqZWN0ICopIHBhZCwgZGF0YV9xdWFyaykpKSB7Ci0gICAgc3RhdHMgPSBmaWxsX3BhZF9zdGF0cyAoc2VsZiwgcGFkKTsKLSAgICBnX29iamVjdF9zZXRfcWRhdGFfZnVsbCAoKEdPYmplY3QgKikgcGFkLCBkYXRhX3F1YXJrLCBzdGF0cywKLSAgICAgICAgZnJlZV9wYWRfc3RhdHMpOwotICAgIGlzX25ldyA9IFRSVUU7Ci0gIH0KLSAgR19VTkxPQ0sgKF9wYWRfc3RhdHMpOwotICBpZiAoR19VTkxJS0VMWSAoc3RhdHMtPnBhcmVudF9peCA9PSBHX01BWFVJTlQpKSB7Ci0gICAgR3N0RWxlbWVudCAqZWxlbSA9IGdldF9yZWFsX3BhZF9wYXJlbnQgKHBhZCk7Ci0gICAgaWYgKGVsZW0pIHsKLSAgICAgIEdzdEVsZW1lbnRTdGF0cyAqZWxlbV9zdGF0cyA9IGdldF9lbGVtZW50X3N0YXRzIChzZWxmLCBlbGVtKTsKLQotICAgICAgc3RhdHMtPnBhcmVudF9peCA9IGVsZW1fc3RhdHMtPmluZGV4OwotICAgIH0KLSAgfQotICBpZiAoR19VTkxJS0VMWSAoaXNfbmV3KSkgewotICAgIGxvZ19uZXdfcGFkX3N0YXRzIChzdGF0cywgcGFkKTsKLSAgfQotICByZXR1cm4gc3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19idWZmZXJfc3RhdHMgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgR3N0UGFkICogdGhpc19wYWQsCi0gICAgR3N0UGFkU3RhdHMgKiB0aGlzX3BhZF9zdGF0cywgR3N0UGFkICogdGhhdF9wYWQsCi0gICAgR3N0UGFkU3RhdHMgKiB0aGF0X3BhZF9zdGF0cywgR3N0QnVmZmVyICogYnVmLCBHc3RDbG9ja1RpbWUgZWxhcHNlZCkKLXsKLSAgR3N0RWxlbWVudCAqdGhpc19lbGVtID0gZ2V0X3JlYWxfcGFkX3BhcmVudCAodGhpc19wYWQpOwotICBHc3RFbGVtZW50U3RhdHMgKnRoaXNfZWxlbV9zdGF0cyA9IGdldF9lbGVtZW50X3N0YXRzIChzZWxmLCB0aGlzX2VsZW0pOwotICBHc3RFbGVtZW50ICp0aGF0X2VsZW0gPSBnZXRfcmVhbF9wYWRfcGFyZW50ICh0aGF0X3BhZCk7Ci0gIEdzdEVsZW1lbnRTdGF0cyAqdGhhdF9lbGVtX3N0YXRzID0gZ2V0X2VsZW1lbnRfc3RhdHMgKHNlbGYsIHRoYXRfZWxlbSk7Ci0KLSAgZ3N0X3RyYWNlcl9yZWNvcmRfbG9nICh0cl9idWZmZXIsIChndWludDY0KSAoZ3VpbnRwdHIpIGdfdGhyZWFkX3NlbGYgKCksCi0gICAgICBlbGFwc2VkLCB0aGlzX3BhZF9zdGF0cy0+aW5kZXgsIHRoaXNfZWxlbV9zdGF0cy0+aW5kZXgsCi0gICAgICB0aGF0X3BhZF9zdGF0cy0+aW5kZXgsIHRoYXRfZWxlbV9zdGF0cy0+aW5kZXgsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksCi0gICAgICBHU1RfQlVGRkVSX1BUUyAoYnVmKSwgR1NUX0JVRkZFUl9EVFMgKGJ1ZiksIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZiksCi0gICAgICBHU1RfQlVGRkVSX0ZMQUdTIChidWYpKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3F1ZXJ5X3N0YXRzIChHc3RTdGF0c1RyYWNlciAqIHNlbGYsIEdzdFBhZCAqIHRoaXNfcGFkLAotICAgIEdzdFBhZFN0YXRzICogdGhpc19wYWRfc3RhdHMsIEdzdFBhZCAqIHRoYXRfcGFkLAotICAgIEdzdFBhZFN0YXRzICogdGhhdF9wYWRfc3RhdHMsIEdzdFF1ZXJ5ICogcXJ5LCBHc3RDbG9ja1RpbWUgZWxhcHNlZCwKLSAgICBnYm9vbGVhbiBoYXZlX3JlcywgZ2Jvb2xlYW4gcmVzKQotewotICBHc3RFbGVtZW50ICp0aGlzX2VsZW0gPSBnZXRfcmVhbF9wYWRfcGFyZW50ICh0aGlzX3BhZCk7Ci0gIEdzdEVsZW1lbnRTdGF0cyAqdGhpc19lbGVtX3N0YXRzID0gZ2V0X2VsZW1lbnRfc3RhdHMgKHNlbGYsIHRoaXNfZWxlbSk7Ci0gIEdzdEVsZW1lbnQgKnRoYXRfZWxlbSA9IGdldF9yZWFsX3BhZF9wYXJlbnQgKHRoYXRfcGFkKTsKLSAgR3N0RWxlbWVudFN0YXRzICp0aGF0X2VsZW1fc3RhdHMgPSBnZXRfZWxlbWVudF9zdGF0cyAoc2VsZiwgdGhhdF9lbGVtKTsKLQotICBnc3RfdHJhY2VyX3JlY29yZF9sb2cgKHRyX3F1ZXJ5LCAoZ3VpbnQ2NCkgKGd1aW50cHRyKSBnX3RocmVhZF9zZWxmICgpLAotICAgICAgZWxhcHNlZCwgdGhpc19wYWRfc3RhdHMtPmluZGV4LCB0aGlzX2VsZW1fc3RhdHMtPmluZGV4LAotICAgICAgdGhhdF9wYWRfc3RhdHMtPmluZGV4LCB0aGF0X2VsZW1fc3RhdHMtPmluZGV4LCBHU1RfUVVFUllfVFlQRV9OQU1FIChxcnkpLAotICAgICAgZ3N0X3F1ZXJ5X2dldF9zdHJ1Y3R1cmUgKHFyeSksIGhhdmVfcmVzLCByZXMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fZWxlbWVudF9zdGF0cyAoR3N0U3RhdHNUcmFjZXIgKiBzZWxmLCBHc3RQYWQgKiBwYWQsIEdzdENsb2NrVGltZSBlbGFwc2VkMSwKLSAgICBHc3RDbG9ja1RpbWUgZWxhcHNlZDIpCi17Ci0gIEdzdENsb2NrVGltZURpZmYgZWxhcHNlZCA9IEdTVF9DTE9DS19ESUZGIChlbGFwc2VkMSwgZWxhcHNlZDIpOwotICBHc3RPYmplY3QgKnBhcmVudCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChwYWQpOwotICBHc3RFbGVtZW50ICp0aGlzID0KLSAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKEdTVF9JU19QQUQgKHBhcmVudCkgPyBHU1RfT0JKRUNUX1BBUkVOVCAocGFyZW50KSA6Ci0gICAgICBwYXJlbnQpOwotICBHc3RFbGVtZW50U3RhdHMgKnRoaXNfc3RhdHMgPSBnZXRfZWxlbWVudF9zdGF0cyAoc2VsZiwgdGhpcyk7Ci0gIEdzdFBhZCAqcGVlcl9wYWQgPSBHU1RfUEFEX1BFRVIgKHBhZCk7Ci0gIEdzdEVsZW1lbnRTdGF0cyAqcGVlcl9zdGF0czsKLQotICBpZiAoIXBlZXJfcGFkKQotICAgIHJldHVybjsKLQotICAvKiB3YWxrIHRoZSBnaG9zdCBwYWQgY2hhaW4gZG93bnN0cmVhbSB0byBnZXQgdGhlIHJlYWwgcGFkICovCi0gIC8qIGlmIHBhcmVudCBvZiBwZWVyX3BhZCBpcyBhIGdob3N0LXBhZCwgdGhlbiBwZWVyX3BhZCBpcyBhIHByb3h5X3BhZCAqLwotICBwYXJlbnQgPSBHU1RfT0JKRUNUX1BBUkVOVCAocGVlcl9wYWQpOwotICBpZiAocGFyZW50ICYmIEdTVF9JU19HSE9TVF9QQUQgKHBhcmVudCkpIHsKLSAgICBwZWVyX3BhZCA9IEdTVF9QQURfQ0FTVCAocGFyZW50KTsKLSAgICAvKiBpZiB0aGlzIGlzIG5vdyB0aGUgZ2hvc3QgcGFkLCBnZXQgdGhlIHBlZXIgb2YgdGhpcyAqLwotICAgIGdldF9wYWRfc3RhdHMgKHNlbGYsIHBlZXJfcGFkKTsKLSAgICBpZiAoKHBhcmVudCA9IEdTVF9PQkpFQ1RfUEFSRU5UIChwZWVyX3BhZCkpKSB7Ci0gICAgICBnZXRfZWxlbWVudF9zdGF0cyAoc2VsZiwgR1NUX0VMRU1FTlRfQ0FTVCAocGFyZW50KSk7Ci0gICAgfQotICAgIHBlZXJfcGFkID0gR1NUX1BBRF9QRUVSIChHU1RfR0hPU1RfUEFEX0NBU1QgKHBlZXJfcGFkKSk7Ci0gICAgcGFyZW50ID0gcGVlcl9wYWQgPyBHU1RfT0JKRUNUX1BBUkVOVCAocGVlcl9wYWQpIDogTlVMTDsKLSAgfQotICAvKiB3YWxrIHRoZSBnaG9zdCBwYWQgY2hhaW4gdXBzdHJlYW0gdG8gZ2V0IHRoZSByZWFsIHBhZCAqLwotICAvKiBpZiBwZWVyX3BhZCBpcyBhIGdob3N0LXBhZCwgdGhlbiBwYXJlbnQgaXMgYSBiaW4gYW5kIGl0IGlzIHRoZSBwYXJlbnQgb2YKLSAgICogYSBwcm94eV9wYWQgKi8KLSAgd2hpbGUgKHBlZXJfcGFkICYmIEdTVF9JU19HSE9TVF9QQUQgKHBlZXJfcGFkKSkgewotICAgIGdldF9wYWRfc3RhdHMgKHNlbGYsIHBlZXJfcGFkKTsKLSAgICBnZXRfZWxlbWVudF9zdGF0cyAoc2VsZiwgR1NUX0VMRU1FTlRfQ0FTVCAocGFyZW50KSk7Ci0gICAgcGVlcl9wYWQgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQURfQ0FTVCAocGVlcl9wYWQpKTsKLSAgICBwYXJlbnQgPSBwZWVyX3BhZCA/IEdTVF9PQkpFQ1RfUEFSRU5UIChwZWVyX3BhZCkgOiBOVUxMOwotICB9Ci0KLSAgaWYgKCFwYXJlbnQpIHsKLSAgICBwcmludGYgKCIlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiB0cmFuc21pc3Npb24gb24gdW5wYXJlbnRlZCB0YXJnZXQgcGFkICVzXyVzIC0+ICVzXyVzXG4iLAotICAgICAgICBHU1RfVElNRV9BUkdTIChlbGFwc2VkKSwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBlZXJfcGFkKSk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHBlZXJfc3RhdHMgPSBnZXRfZWxlbWVudF9zdGF0cyAoc2VsZiwgR1NUX0VMRU1FTlRfQ0FTVCAocGFyZW50KSk7Ci0KLSAgLyogd2UnZCBsaWtlIHRvIGdhdGhlciB0aW1lIHNwZW5kIGluIGVhY2ggZWxlbWVudCwgYnV0IHRoaXMgZG9lcyBub3QgbWFrZSB0b28KLSAgICogbXVjaCBzZW5zZSB5ZXQKLSAgICogcHVyZSBwdXNoL3B1bGwtYmFzZWQ6Ci0gICAqICAgLSB0aGUgdGltZSBzcGVuZCBpbiB0aGUgcHVzaC9wdWxsX3JhbmdlIGlzIGFjY291bnRlZCBmb3IgdGhlIHBlZXIgYW5kCi0gICAqICAgICByZW1vdmVkIGZyb20gdGhlIGN1cnJlbnQgZWxlbWVudAotICAgKiAgIC0gdGhpcyB3b3JrcyBmb3IgY2hhaW5zCi0gICAqICAgLSBkcmF3YmFjayBpcyBzaW5rIGVsZW1lbnRzIHRoYXQgYmxvY2sgdG8gc3luYyBoYXZlIGEgaGlnaCB0aW1lIHVzYWdlCi0gICAqICAgICAtIHdlIGNvdWxkIHJlcnVuIHRoZSBlc3RzIHdpdGggc3luYz1mYWxzZQotICAgKiBib3RoOgotICAgKiAgIC0gYS5nLiBkZW11eGVycyBib3RoIHB1c2ggYW5kIHB1bGwuIHRodXMgd2Ugc3VidHJhY3QgdGltZSBmb3IgdGhlIHB1bGwKLSAgICogICAgIGFuZCB0aGUgcHVzaCBvcGVyYXRpb25zLCBidXQgbmV2ZXIgYWRkIGFueXRoaW5nLgotICAgKiAgIC0gY2FuIHdlIHN0YXJ0IGEgY291bnRlciBhZnRlciBwdXNoL3B1bGwgaW4gc3VjaCBlbGVtZW50cyBhbmQgYWRkIHRoZW4KLSAgICogICAgIHRpbWUgdG8gdGhlIGVsZW1lbnQgdXBvbiBuZXh0IHBhZCBhY3Rpdml0eT8KLSAgICovCi0jaWYgMQotICAvKiB0aGlzIGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIGRlbXV4ZXJzICovCi0gIHRoaXNfc3RhdHMtPnRyZWFsIC09IGVsYXBzZWQ7Ci0gIHBlZXJfc3RhdHMtPnRyZWFsICs9IGVsYXBzZWQ7Ci0jZWxzZQotICAvKiB0aGlzIGNyZWF0ZXMgc2V2ZXJhbCA+MTAwJSBmaWd1cmVzICovCi0gIHRoaXNfc3RhdHMtPnRyZWFsICs9IEdTVF9DTE9DS19ESUZGICh0aGlzX3N0YXRzLT5sYXN0X3RzLCBlbGFwc2VkMikgLSBlbGFwc2VkOwotICBwZWVyX3N0YXRzLT50cmVhbCArPSBlbGFwc2VkOwotICB0aGlzX3N0YXRzLT5sYXN0X3RzID0gZWxhcHNlZDI7Ci0gIHBlZXJfc3RhdHMtPmxhc3RfdHMgPSBlbGFwc2VkMjsKLSNlbmRpZgotfQotCi0vKiBob29rcyAqLwotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9idWZmZXJfcHJlIChHc3RTdGF0c1RyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHRoaXNfcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UGFkU3RhdHMgKnRoaXNfcGFkX3N0YXRzID0gZ2V0X3BhZF9zdGF0cyAoc2VsZiwgdGhpc19wYWQpOwotICBHc3RQYWQgKnRoYXRfcGFkID0gR1NUX1BBRF9QRUVSICh0aGlzX3BhZCk7Ci0gIEdzdFBhZFN0YXRzICp0aGF0X3BhZF9zdGF0cyA9IGdldF9wYWRfc3RhdHMgKHNlbGYsIHRoYXRfcGFkKTsKLQotICBkb19idWZmZXJfc3RhdHMgKHNlbGYsIHRoaXNfcGFkLCB0aGlzX3BhZF9zdGF0cywgdGhhdF9wYWQsIHRoYXRfcGFkX3N0YXRzLAotICAgICAgYnVmZmVyLCB0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wdXNoX2J1ZmZlcl9wb3N0IChHc3RTdGF0c1RyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RGbG93UmV0dXJuIHJlcykKLXsKLSAgR3N0UGFkU3RhdHMgKnN0YXRzID0gZ2V0X3BhZF9zdGF0cyAoc2VsZiwgcGFkKTsKLQotICBkb19lbGVtZW50X3N0YXRzIChzZWxmLCBwYWQsIHN0YXRzLT5sYXN0X3RzLCB0cyk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFN0YXRzVHJhY2VyICpzZWxmOwotICBHc3RQYWQgKnRoaXNfcGFkOwotICBHc3RQYWRTdGF0cyAqdGhpc19wYWRfc3RhdHM7Ci0gIEdzdFBhZCAqdGhhdF9wYWQ7Ci0gIEdzdFBhZFN0YXRzICp0aGF0X3BhZF9zdGF0czsKLSAgZ3VpbnQ2NCB0czsKLX0gRG9QdXNoQnVmZmVyTGlzdEFyZ3M7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZG9fcHVzaF9idWZmZXJfbGlzdF9pdGVtIChHc3RCdWZmZXIgKiogYnVmZmVyLCBndWludCBpZHgsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgRG9QdXNoQnVmZmVyTGlzdEFyZ3MgKmFyZ3MgPSAoRG9QdXNoQnVmZmVyTGlzdEFyZ3MgKikgdXNlcl9kYXRhOwotCi0gIGRvX2J1ZmZlcl9zdGF0cyAoYXJncy0+c2VsZiwgYXJncy0+dGhpc19wYWQsIGFyZ3MtPnRoaXNfcGFkX3N0YXRzLAotICAgICAgYXJncy0+dGhhdF9wYWQsIGFyZ3MtPnRoYXRfcGFkX3N0YXRzLCAqYnVmZmVyLCBhcmdzLT50cyk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9idWZmZXJfbGlzdF9wcmUgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogdGhpc19wYWQsCi0gICAgR3N0QnVmZmVyTGlzdCAqIGxpc3QpCi17Ci0gIEdzdFBhZFN0YXRzICp0aGlzX3BhZF9zdGF0cyA9IGdldF9wYWRfc3RhdHMgKHNlbGYsIHRoaXNfcGFkKTsKLSAgR3N0UGFkICp0aGF0X3BhZCA9IEdTVF9QQURfUEVFUiAodGhpc19wYWQpOwotICBHc3RQYWRTdGF0cyAqdGhhdF9wYWRfc3RhdHMgPSBnZXRfcGFkX3N0YXRzIChzZWxmLCB0aGF0X3BhZCk7Ci0gIERvUHVzaEJ1ZmZlckxpc3RBcmdzIGFyZ3MgPSB7IHNlbGYsIHRoaXNfcGFkLCB0aGlzX3BhZF9zdGF0cywgdGhhdF9wYWQsCi0gICAgdGhhdF9wYWRfc3RhdHMsIHRzCi0gIH07Ci0KLSAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGxpc3QsIGRvX3B1c2hfYnVmZmVyX2xpc3RfaXRlbSwgJmFyZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9idWZmZXJfbGlzdF9wb3N0IChHc3RTdGF0c1RyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RGbG93UmV0dXJuIHJlcykKLXsKLSAgR3N0UGFkU3RhdHMgKnN0YXRzID0gZ2V0X3BhZF9zdGF0cyAoc2VsZiwgcGFkKTsKLQotICBkb19lbGVtZW50X3N0YXRzIChzZWxmLCBwYWQsIHN0YXRzLT5sYXN0X3RzLCB0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wdWxsX3JhbmdlX3ByZSAoR3N0U3RhdHNUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFBhZFN0YXRzICpzdGF0cyA9IGdldF9wYWRfc3RhdHMgKHNlbGYsIHBhZCk7Ci0gIHN0YXRzLT5sYXN0X3RzID0gdHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wdWxsX3JhbmdlX3Bvc3QgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogdGhpc19wYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RQYWRTdGF0cyAqdGhpc19wYWRfc3RhdHMgPSBnZXRfcGFkX3N0YXRzIChzZWxmLCB0aGlzX3BhZCk7Ci0gIGd1aW50NjQgbGFzdF90cyA9IHRoaXNfcGFkX3N0YXRzLT5sYXN0X3RzOwotICBHc3RQYWQgKnRoYXRfcGFkID0gR1NUX1BBRF9QRUVSICh0aGlzX3BhZCk7Ci0gIEdzdFBhZFN0YXRzICp0aGF0X3BhZF9zdGF0cyA9IGdldF9wYWRfc3RhdHMgKHNlbGYsIHRoYXRfcGFkKTsKLQotICBpZiAoYnVmZmVyICE9IE5VTEwpIHsKLSAgICBkb19idWZmZXJfc3RhdHMgKHNlbGYsIHRoaXNfcGFkLCB0aGlzX3BhZF9zdGF0cywgdGhhdF9wYWQsIHRoYXRfcGFkX3N0YXRzLAotICAgICAgICBidWZmZXIsIHRzKTsKLSAgfQotICBkb19lbGVtZW50X3N0YXRzIChzZWxmLCB0aGlzX3BhZCwgbGFzdF90cywgdHMpOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaF9ldmVudF9wcmUgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogcGFkLAotICAgIEdzdEV2ZW50ICogZXYpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW0gPSBnZXRfcmVhbF9wYWRfcGFyZW50IChwYWQpOwotICBHc3RFbGVtZW50U3RhdHMgKmVsZW1fc3RhdHMgPSBnZXRfZWxlbWVudF9zdGF0cyAoc2VsZiwgZWxlbSk7Ci0gIEdzdFBhZFN0YXRzICpwYWRfc3RhdHMgPSBnZXRfcGFkX3N0YXRzIChzZWxmLCBwYWQpOwotCi0gIGVsZW1fc3RhdHMtPmxhc3RfdHMgPSB0czsKLSAgZ3N0X3RyYWNlcl9yZWNvcmRfbG9nICh0cl9ldmVudCwgKGd1aW50NjQpIChndWludHB0cikgZ190aHJlYWRfc2VsZiAoKSwgdHMsCi0gICAgICBwYWRfc3RhdHMtPmluZGV4LCBlbGVtX3N0YXRzLT5pbmRleCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXYpKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3Bvc3RfbWVzc2FnZV9wcmUgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0RWxlbWVudCAqIGVsZW0sCi0gICAgR3N0TWVzc2FnZSAqIG1zZykKLXsKLSAgR3N0RWxlbWVudFN0YXRzICpzdGF0cyA9IGdldF9lbGVtZW50X3N0YXRzIChzZWxmLCBlbGVtKTsKLSAgY29uc3QgR3N0U3RydWN0dXJlICptc2dfcyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1zZyk7Ci0gIEdzdFN0cnVjdHVyZSAqcyA9Ci0gICAgICBtc2dfcyA/IChHc3RTdHJ1Y3R1cmUgKikgbXNnX3MgOiBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoImR1bW15Iik7Ci0KLSAgc3RhdHMtPmxhc3RfdHMgPSB0czsKLSAgLyogRklYTUU6IHdvcmsgb3V0IHdoZXRoZXIgdXNpbmcgTlVMTCBpbnN0ZWFkIG9mIGEgZHVtbXkgc3RydWN0IHdvdWxkIHdvcmsgKi8KLSAgZ3N0X3RyYWNlcl9yZWNvcmRfbG9nICh0cl9tZXNzYWdlLCAoZ3VpbnQ2NCkgKGd1aW50cHRyKSBnX3RocmVhZF9zZWxmICgpLCB0cywKLSAgICAgIHN0YXRzLT5pbmRleCwgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtc2cpLCBzKTsKLSAgaWYgKHMgIT0gbXNnX3MpCi0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX2VsZW1lbnRfbmV3IChHc3RTdGF0c1RyYWNlciAqIHNlbGYsIGd1aW50NjQgdHMsIEdzdEVsZW1lbnQgKiBlbGVtKQotewotICBHc3RFbGVtZW50U3RhdHMgKnN0YXRzOwotCi0gIHN0YXRzID0gY3JlYXRlX2VsZW1lbnRfc3RhdHMgKHNlbGYsIGVsZW0pOwotICBsb2dfbmV3X2VsZW1lbnRfc3RhdHMgKHN0YXRzLCBlbGVtLCB0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19lbGVtZW50X3F1ZXJ5X3ByZSAoR3N0U3RhdHNUcmFjZXIgKiBzZWxmLCBndWludDY0IHRzLCBHc3RFbGVtZW50ICogZWxlbSwKLSAgICBHc3RRdWVyeSAqIHFyeSkKLXsKLSAgR3N0RWxlbWVudFN0YXRzICpzdGF0cyA9IGdldF9lbGVtZW50X3N0YXRzIChzZWxmLCBlbGVtKTsKLQotICBzdGF0cy0+bGFzdF90cyA9IHRzOwotICBnc3RfdHJhY2VyX3JlY29yZF9sb2cgKHRyX2VsZW1lbnRfcXVlcnksCi0gICAgICAoZ3VpbnQ2NCkgKGd1aW50cHRyKSBnX3RocmVhZF9zZWxmICgpLCB0cywgc3RhdHMtPmluZGV4LAotICAgICAgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXJ5KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19xdWVyeV9wcmUgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogdGhpc19wYWQsCi0gICAgR3N0UXVlcnkgKiBxcnkpCi17Ci0gIEdzdFBhZFN0YXRzICp0aGlzX3BhZF9zdGF0cyA9IGdldF9wYWRfc3RhdHMgKHNlbGYsIHRoaXNfcGFkKTsKLSAgR3N0UGFkICp0aGF0X3BhZCA9IEdTVF9QQURfUEVFUiAodGhpc19wYWQpOwotICBHc3RQYWRTdGF0cyAqdGhhdF9wYWRfc3RhdHMgPSBnZXRfcGFkX3N0YXRzIChzZWxmLCB0aGF0X3BhZCk7Ci0KLSAgZG9fcXVlcnlfc3RhdHMgKHNlbGYsIHRoaXNfcGFkLCB0aGlzX3BhZF9zdGF0cywgdGhhdF9wYWQsIHRoYXRfcGFkX3N0YXRzLAotICAgICAgcXJ5LCB0cywgRkFMU0UsIEZBTFNFKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3F1ZXJ5X3Bvc3QgKEdzdFN0YXRzVHJhY2VyICogc2VsZiwgZ3VpbnQ2NCB0cywgR3N0UGFkICogdGhpc19wYWQsCi0gICAgR3N0UXVlcnkgKiBxcnksIGdib29sZWFuIHJlcykKLXsKLSAgR3N0UGFkU3RhdHMgKnRoaXNfcGFkX3N0YXRzID0gZ2V0X3BhZF9zdGF0cyAoc2VsZiwgdGhpc19wYWQpOwotICBHc3RQYWQgKnRoYXRfcGFkID0gR1NUX1BBRF9QRUVSICh0aGlzX3BhZCk7Ci0gIEdzdFBhZFN0YXRzICp0aGF0X3BhZF9zdGF0cyA9IGdldF9wYWRfc3RhdHMgKHNlbGYsIHRoYXRfcGFkKTsKLQotICBkb19xdWVyeV9zdGF0cyAoc2VsZiwgdGhpc19wYWQsIHRoaXNfcGFkX3N0YXRzLCB0aGF0X3BhZCwgdGhhdF9wYWRfc3RhdHMsCi0gICAgICBxcnksIHRzLCBUUlVFLCByZXMpOwotfQotCi0vKiB0cmFjZXIgY2xhc3MgKi8KLQotc3RhdGljIHZvaWQKLWdzdF9zdGF0c190cmFjZXJfY2xhc3NfaW5pdCAoR3N0U3RhdHNUcmFjZXJDbGFzcyAqIGtsYXNzKQotewotICAvKiBhbm5vdW5jZSB0cmFjZSBmb3JtYXRzICovCi0gIC8qICpJTkRFTlQtT0ZGKiAqLwotICB0cl9idWZmZXIgPSBnc3RfdHJhY2VyX3JlY29yZF9uZXcgKCJidWZmZXIuY2xhc3MiLAotICAgICAgInRocmVhZC1pZCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfVEhSRUFELAotICAgICAgICAgIE5VTEwpLAotICAgICAgInRzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAiZXZlbnQgdHMiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgInBhZC1peCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJlbGVtZW50LWl4IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInNjb3BlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfRUxFTUVOVCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJwZWVyLXBhZC1peCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJwZWVyLWVsZW1lbnQtaXgiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgic2NvcGUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgICAicmVsYXRlZC10byIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSwgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9FTEVNRU5ULAotICAgICAgICAgIE5VTEwpLAotICAgICAgImJ1ZmZlci1zaXplIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgInNpemUgb2YgYnVmZmVyIGluIGJ5dGVzIiwKLSAgICAgICAgICAibWluIiwgR19UWVBFX1VJTlQsIDAsCi0gICAgICAgICAgIm1heCIsIEdfVFlQRV9VSU5ULCBHX01BWFVJTlQsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAiYnVmZmVyLXB0cyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgInByZXNlbnRhdGlvbiB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciBpbiBucyIsCi0gICAgICAgICAgIm1pbiIsIEdfVFlQRV9VSU5UNjQsIEdfR1VJTlQ2NF9DT05TVEFOVCAoMCksCi0gICAgICAgICAgIm1heCIsIEdfVFlQRV9VSU5UNjQsIEdfTUFYVUlOVDY0LAotICAgICAgICAgIE5VTEwpLAotICAgICAgImJ1ZmZlci1kdHMiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVDY0LAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJkZWNvZGluZyB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciBpbiBucyIsCi0gICAgICAgICAgIm1pbiIsIEdfVFlQRV9VSU5UNjQsIEdfR1VJTlQ2NF9DT05TVEFOVCAoMCksCi0gICAgICAgICAgIm1heCIsIEdfVFlQRV9VSU5UNjQsIEdfTUFYVUlOVDY0LAotICAgICAgICAgIE5VTEwpLAotICAgICAgImJ1ZmZlci1kdXJhdGlvbiIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgImR1cmF0aW9uIG9mIHRoZSBidWZmZXIgaW4gbnMiLAotICAgICAgICAgICJtaW4iLCBHX1RZUEVfVUlOVDY0LCBHX0dVSU5UNjRfQ09OU1RBTlQgKDApLAotICAgICAgICAgICJtYXgiLCBHX1RZUEVfVUlOVDY0LCBHX01BWFVJTlQ2NCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJidWZmZXItZmxhZ3MiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHU1RfVFlQRV9CVUZGRVJfRkxBR1MsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgImZsYWdzIG9mIHRoZSBidWZmZXIiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgTlVMTCk7Ci0gIHRyX2V2ZW50ID0gZ3N0X3RyYWNlcl9yZWNvcmRfbmV3ICgiZXZlbnQuY2xhc3MiLAotICAgICAgInRocmVhZC1pZCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfVEhSRUFELAotICAgICAgICAgIE5VTEwpLAotICAgICAgInRzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAiZXZlbnQgdHMiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgInBhZC1peCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJlbGVtZW50LWl4IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInNjb3BlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfRUxFTUVOVCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJuYW1lIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1NUUklORywKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAibmFtZSBvZiB0aGUgZXZlbnQiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgTlVMTCk7Ci0gIHRyX21lc3NhZ2UgPSBnc3RfdHJhY2VyX3JlY29yZF9uZXcgKCJtZXNzYWdlLmNsYXNzIiwKLSAgICAgICJ0aHJlYWQtaWQiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgic2NvcGUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVDY0LAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJ0cyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgImV2ZW50IHRzIiwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJlbGVtZW50LWl4IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInNjb3BlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfRUxFTUVOVCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJuYW1lIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1NUUklORywKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAibmFtZSBvZiB0aGUgbWVzc2FnZSIsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAic3RydWN0dXJlIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInN0cnVjdHVyZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdTVF9UWVBFX1NUUlVDVFVSRSwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAibWVzc2FnZSBzdHJ1Y3R1cmUiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgTlVMTCk7Ci0gIHRyX2VsZW1lbnRfcXVlcnkgPSBnc3RfdHJhY2VyX3JlY29yZF9uZXcgKCJlbGVtZW50LXF1ZXJ5LmNsYXNzIiwKLSAgICAgICJ0aHJlYWQtaWQiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgic2NvcGUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVDY0LAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJ0cyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgImV2ZW50IHRzIiwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJlbGVtZW50LWl4IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInNjb3BlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfRUxFTUVOVCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJuYW1lIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1NUUklORywKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAibmFtZSBvZiB0aGUgcXVlcnkiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgTlVMTCk7Ci0gIHRyX3F1ZXJ5ID0gZ3N0X3RyYWNlcl9yZWNvcmRfbmV3ICgicXVlcnkuY2xhc3MiLAotICAgICAgInRocmVhZC1pZCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfVEhSRUFELAotICAgICAgICAgIE5VTEwpLAotICAgICAgInRzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQ2NCwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAiZXZlbnQgdHMiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgInBhZC1peCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJlbGVtZW50LWl4IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInNjb3BlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfRUxFTUVOVCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJwZWVyLXBhZC1peCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJwZWVyLWVsZW1lbnQtaXgiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgic2NvcGUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgICAicmVsYXRlZC10byIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSwgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9FTEVNRU5ULAotICAgICAgICAgIE5VTEwpLAotICAgICAgIm5hbWUiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJuYW1lIG9mIHRoZSBxdWVyeSIsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAic3RydWN0dXJlIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR1NUX1RZUEVfU1RSVUNUVVJFLAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJxdWVyeSBzdHJ1Y3R1cmUiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgInJlcyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9CT09MRUFOLAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJxdWVyeSByZXN1bHQiLAotICAgICAgICAgICJmbGFncyIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9GTEFHUywgR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19PUFRJT05BTCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgIE5VTEwpOwotICB0cl9uZXdfZWxlbWVudCA9IGdzdF90cmFjZXJfcmVjb3JkX25ldyAoIm5ldy1lbGVtZW50LmNsYXNzIiwKLSAgICAgICJ0aHJlYWQtaWQiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgic2NvcGUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVDY0LAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJ0cyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5UNjQsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgImV2ZW50IHRzIiwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJpeCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX0VMRU1FTlQsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAicGFyZW50LWl4IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInNjb3BlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1VJTlQsCi0gICAgICAgICAgInJlbGF0ZWQtdG8iLCBHU1RfVFlQRV9UUkFDRVJfVkFMVUVfU0NPUEUsIEdTVF9UUkFDRVJfVkFMVUVfU0NPUEVfRUxFTUVOVCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJuYW1lIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX1NUUklORywKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAibmFtZSBvZiB0aGUgZWxlbWVudCIsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAidHlwZSIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgInR5cGUgbmFtZSBvZiB0aGUgZWxlbWVudCIsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAiaXMtYmluIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX0JPT0xFQU4sCi0gICAgICAgICAgImRlc2NyaXB0aW9uIiwgR19UWVBFX1NUUklORywgImlzIGVsZW1lbnQgYSBiaW4iLAotICAgICAgICAgIE5VTEwpLAotICAgICAgTlVMTCk7Ci0gIHRyX25ld19wYWQgPSBnc3RfdHJhY2VyX3JlY29yZF9uZXcgKCJuZXctcGFkLmNsYXNzIiwKLSAgICAgICJ0aHJlYWQtaWQiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgic2NvcGUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVDY0LAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJpeCIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJzY29wZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICJyZWxhdGVkLXRvIiwgR1NUX1RZUEVfVFJBQ0VSX1ZBTFVFX1NDT1BFLCBHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJwYXJlbnQtaXgiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgic2NvcGUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgICAicmVsYXRlZC10byIsIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSwgR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9FTEVNRU5ULAotICAgICAgICAgIE5VTEwpLAotICAgICAgIm5hbWUiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJuYW1lIG9mIHRoZSBwYWQiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgInR5cGUiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJ0eXBlIG5hbWUgb2YgdGhlIHBhZCIsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAiaXMtZ2hvc3RwYWQiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfQk9PTEVBTiwKLSAgICAgICAgICAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCAiaXMgcGFkIGEgZ2hvc3RwYWQiLAotICAgICAgICAgIE5VTEwpLAotICAgICAgInBhZC1kaXJlY3Rpb24iLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHU1RfVFlQRV9QQURfRElSRUNUSU9OLAotICAgICAgICAgICJkZXNjcmlwdGlvbiIsIEdfVFlQRV9TVFJJTkcsICJpcGFkIGRpcmVjdGlvbiIsCi0gICAgICAgICAgTlVMTCksCi0gICAgICBOVUxMKTsKLSAgLyogKklOREVOVC1PTiogKi8KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdGF0c190cmFjZXJfaW5pdCAoR3N0U3RhdHNUcmFjZXIgKiBzZWxmKQotewotICBHc3RUcmFjZXIgKnRyYWNlciA9IEdTVF9UUkFDRVIgKHNlbGYpOwotCi0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLXByZSIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2J1ZmZlcl9wcmUpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXB1c2gtcG9zdCIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2J1ZmZlcl9wb3N0KSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLWxpc3QtcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1c2hfYnVmZmVyX2xpc3RfcHJlKSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLWxpc3QtcG9zdCIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2J1ZmZlcl9saXN0X3Bvc3QpKTsKLSAgZ3N0X3RyYWNpbmdfcmVnaXN0ZXJfaG9vayAodHJhY2VyLCAicGFkLXB1bGwtcmFuZ2UtcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3B1bGxfcmFuZ2VfcHJlKSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdWxsLXJhbmdlLXBvc3QiLAotICAgICAgR19DQUxMQkFDSyAoZG9fcHVsbF9yYW5nZV9wb3N0KSk7Ci0gIGdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sgKHRyYWNlciwgInBhZC1wdXNoLWV2ZW50LXByZSIsCi0gICAgICBHX0NBTExCQUNLIChkb19wdXNoX2V2ZW50X3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJlbGVtZW50LW5ldyIsCi0gICAgICBHX0NBTExCQUNLIChkb19lbGVtZW50X25ldykpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJlbGVtZW50LXBvc3QtbWVzc2FnZS1wcmUiLAotICAgICAgR19DQUxMQkFDSyAoZG9fcG9zdF9tZXNzYWdlX3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJlbGVtZW50LXF1ZXJ5LXByZSIsCi0gICAgICBHX0NBTExCQUNLIChkb19lbGVtZW50X3F1ZXJ5X3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJwYWQtcXVlcnktcHJlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRvX3F1ZXJ5X3ByZSkpOwotICBnc3RfdHJhY2luZ19yZWdpc3Rlcl9ob29rICh0cmFjZXIsICJwYWQtcXVlcnktcG9zdCIsCi0gICAgICBHX0NBTExCQUNLIChkb19xdWVyeV9wb3N0KSk7Ci19CmRpZmYgLS1naXQgYS9wbHVnaW5zL3RyYWNlcnMvZ3N0c3RhdHMuaCBiL3BsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQ2YjFiLi4wMDAwMDAwCi0tLSBhL3BsdWdpbnMvdHJhY2Vycy9nc3RzdGF0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3RzdGF0cy5oOiB0cmFjaW5nIG1vZHVsZSB0aGF0IGxvZ3MgZXZlbnRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TVEFUU19UUkFDRVJfSF9fCi0jZGVmaW5lIF9fR1NUX1NUQVRTX1RSQUNFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dHJhY2VyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9TVEFUU19UUkFDRVIgXAotICAoZ3N0X3N0YXRzX3RyYWNlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU1RBVFNfVFJBQ0VSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfU1RBVFNfVFJBQ0VSLEdzdFN0YXRzVHJhY2VyKSkKLSNkZWZpbmUgR1NUX1NUQVRTX1RSQUNFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TVEFUU19UUkFDRVIsR3N0U3RhdHNUcmFjZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TVEFUU19UUkFDRVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9TVEFUU19UUkFDRVIpKQotI2RlZmluZSBHU1RfSVNfU1RBVFNfVFJBQ0VSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1NUQVRTX1RSQUNFUikpCi0jZGVmaW5lIEdTVF9TVEFUU19UUkFDRVJfQ0FTVChvYmopICgoR3N0U3RhdHNUcmFjZXIgKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0YXRzVHJhY2VyIEdzdFN0YXRzVHJhY2VyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0YXRzVHJhY2VyQ2xhc3MgR3N0U3RhdHNUcmFjZXJDbGFzczsKLQotLyoqCi0gKiBHc3RTdGF0c1RyYWNlcjoKLSAqCi0gKiBPcGFxdWUgI0dzdFN0YXRzVHJhY2VyIGRhdGEgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBfR3N0U3RhdHNUcmFjZXIgewotICBHc3RUcmFjZXIgCSBwYXJlbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGd1aW50IG51bV9lbGVtZW50cywgbnVtX3BhZHM7Ci19OwotCi1zdHJ1Y3QgX0dzdFN0YXRzVHJhY2VyQ2xhc3MgewotICBHc3RUcmFjZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyAqLwotfTsKLQotR19HTlVDX0lOVEVSTkFMIEdUeXBlIGdzdF9zdGF0c190cmFjZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfU1RBVFNfVFJBQ0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy90cmFjZXJzL2dzdHRyYWNlcnMuYyBiL3BsdWdpbnMvdHJhY2Vycy9nc3R0cmFjZXJzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwM2UyNWEuLjAwMDAwMDAKLS0tIGEvcGx1Z2lucy90cmFjZXJzL2dzdHRyYWNlcnMuYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0dHJhY2Vycy5jOiB0cmFjaW5nIG1vZHVsZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3RsYXRlbmN5LmgiCi0jaW5jbHVkZSAiZ3N0bG9nLmgiCi0jaW5jbHVkZSAiZ3N0cnVzYWdlLmgiCi0jaW5jbHVkZSAiZ3N0c3RhdHMuaCIKLSNpbmNsdWRlICJnc3RsZWFrcy5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGlmICghZ3N0X3RyYWNlcl9yZWdpc3RlciAocGx1Z2luLCAibGF0ZW5jeSIsIGdzdF9sYXRlbmN5X3RyYWNlcl9nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgaWYgKCFnc3RfdHJhY2VyX3JlZ2lzdGVyIChwbHVnaW4sICJsb2ciLCBnc3RfbG9nX3RyYWNlcl9nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9HRVRSVVNBR0UKLSAgaWYgKCFnc3RfdHJhY2VyX3JlZ2lzdGVyIChwbHVnaW4sICJydXNhZ2UiLCBnc3RfcnVzYWdlX3RyYWNlcl9nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotI2VuZGlmCi0gIGlmICghZ3N0X3RyYWNlcl9yZWdpc3RlciAocGx1Z2luLCAic3RhdHMiLCBnc3Rfc3RhdHNfdHJhY2VyX2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X3RyYWNlcl9yZWdpc3RlciAocGx1Z2luLCAibGVha3MiLCBnc3RfbGVha3NfdHJhY2VyX2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCBjb3JldHJhY2VycywKLSAgICAiR1N0cmVhbWVyIGNvcmUgdHJhY2VycyIsIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwKLSAgICBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pOwpkaWZmIC0tZ2l0IGEvcG8vTElOR1VBUyBiL3BvL0xJTkdVQVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNDkxMTYuLjAwMDAwMDAKLS0tIGEvcG8vTElOR1VBUworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWFmIGF6IGJlIGJnIGNhIGNzIGRhIGRlIGVuX0dCIGVvIGVzIGVsIGV1IGZpIGZyIGdsIGhyIGh1IGlkIGl0IGphIGx0IG5iIG5sIHBsIHB0X0JSIHJvIHJ1IHJ3IHNrIHNsIHNxIHNyIHN2IHRyIHVrIHZpIHpoX0NOIHpoX1RXCmRpZmYgLS1naXQgYS9wby9NYWtlZmlsZS5pbi5pbiBiL3BvL01ha2VmaWxlLmluLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWNmNTAwLi4wMDAwMDAwCi0tLSBhL3BvL01ha2VmaWxlLmluLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDI5ICswLDAgQEAKLSMgTWFrZWZpbGUgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KLSMgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwNyBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4KLSMKLSMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCi0jIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci0jIGZ1bmN0aW9uYWxpdHkuCi0jIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIEdOVSBnZXR0ZXh0IGlzIGNvdmVyZWQgYnkgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBpcyAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMKLSMgT3JpZ2luOiBnZXR0ZXh0LTAuMTcKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTcKLQotUEFDS0FHRSA9IEBQQUNLQUdFQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi0KLVNIRUxMID0gL2Jpbi9zaAotQFNFVF9NQUtFQAotCi1zcmNkaXIgPSBAc3JjZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotVlBBVEggPSBAc3JjZGlyQAotCi1wcmVmaXggPSBAcHJlZml4QAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1nZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCi0KLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi0KLSMgV2UgdXNlICQobWtkaXJfcCkuCi0jIEluIGF1dG9tYWtlIDw9IDEuOS54LCAkKG1rZGlyX3ApIGlzIGRlZmluZWQgZWl0aGVyIGFzICJta2RpciAtcCAtLSIgb3IgYXMKLSMgIiQobWtpbnN0YWxsZGlycykiIG9yIGFzICIkKGluc3RhbGxfc2gpIC1kIi4gRm9yIHRoZXNlIGF1dG9tYWtlIHZlcnNpb25zLAotIyBAaW5zdGFsbF9zaEAgZG9lcyBub3Qgc3RhcnQgd2l0aCAkKFNIRUxMKSwgc28gd2UgYWRkIGl0LgotIyBJbiBhdXRvbWFrZSA+PSAxLjEwLCBAbWtkaXJfcEAgaXMgZGVyaXZlZCBmcm9tICR7TUtESVJfUH0sIHdoaWNoIGlzIGRlZmluZWQKLSMgZWl0aGVyIGFzICIvcGF0aC90by9ta2RpciAtcCIgb3IgIi4uLi9pbnN0YWxsLXNoIC1jIC1kIi4gRm9yIHRoZXNlIGF1dG9tYWtlCi0jIHZlcnNpb25zLCAkKG1raW5zdGFsbGRpcnMpIGFuZCAkKGluc3RhbGxfc2gpIGFyZSB1bnVzZWQuCi1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgQGluc3RhbGxfc2hAIC1kCi1pbnN0YWxsX3NoID0gJChTSEVMTCkgQGluc3RhbGxfc2hACi1NS0RJUl9QID0gQE1LRElSX1BACi1ta2Rpcl9wID0gQG1rZGlyX3BACi0KLUdNU0dGTVRfID0gQEdNU0dGTVRACi1HTVNHRk1UX25vID0gQEdNU0dGTVRACi1HTVNHRk1UX3llcyA9IEBHTVNHRk1UXzAxNUAKLUdNU0dGTVQgPSAkKEdNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCi1NU0dGTVRfID0gQE1TR0ZNVEAKLU1TR0ZNVF9ubyA9IEBNU0dGTVRACi1NU0dGTVRfeWVzID0gQE1TR0ZNVF8wMTVACi1NU0dGTVQgPSAkKE1TR0ZNVF8kKFVTRV9NU0dDVFhUKSkKLVhHRVRURVhUXyA9IEBYR0VUVEVYVEAKLVhHRVRURVhUX25vID0gQFhHRVRURVhUQAotWEdFVFRFWFRfeWVzID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUID0gJChYR0VUVEVYVF8kKFVTRV9NU0dDVFhUKSkKLU1TR01FUkdFID0gbXNnbWVyZ2UKLU1TR01FUkdFX1VQREFURSA9IEBNU0dNRVJHRUAgLS11cGRhdGUKLU1TR0lOSVQgPSBtc2dpbml0Ci1NU0dDT05WID0gbXNnY29udgotTVNHRklMVEVSID0gbXNnZmlsdGVyCi0KLVBPRklMRVMgPSBAUE9GSUxFU0AKLUdNT0ZJTEVTID0gQEdNT0ZJTEVTQAotVVBEQVRFUE9GSUxFUyA9IEBVUERBVEVQT0ZJTEVTQAotRFVNTVlQT0ZJTEVTID0gQERVTU1ZUE9GSUxFU0AKLURJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbi5pbiByZW1vdmUtcG90Y2RhdGUuc2luIFwKLSQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTEpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTIpICQoRElTVEZJTEVTLmNvbW1vbi5leHRyYTMpCi1ESVNURklMRVMgPSAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzIFBPVEZJTEVTLmluIFwKLSQoUE9GSUxFUykgJChHTU9GSUxFUykgXAotJChESVNURklMRVMuZXh0cmExKSAkKERJU1RGSUxFUy5leHRyYTIpICQoRElTVEZJTEVTLmV4dHJhMykKLQotUE9URklMRVMgPSBcCi0KLUNBVEFMT0dTID0gQENBVEFMT0dTQAotCi0jIE1ha2V2YXJzIGdldHMgaW5zZXJ0ZWQgaGVyZS4gKERvbid0IHJlbW92ZSB0aGlzIGxpbmUhKQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5wbyAuZ21vIC5tbyAuc2VkIC5zaW4gLm5vcCAucG8tY3JlYXRlIC5wby11cGRhdGUKLQotLnBvLm1vOgotCUBlY2hvICIkKE1TR0ZNVCkgLWMgLW8gJEAgJDwiOyBcCi0JJChNU0dGTVQpIC1jIC1vIHQtJEAgJDwgJiYgbXYgdC0kQCAkQAotCi0ucG8uZ21vOgotCUBsYW5nPWBlY2hvICQqIHwgc2VkIC1lICdzLC4qLywsJ2A7IFwKLQl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKLQllY2hvICIkJHtjZGNtZH1ybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLW8gJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvIjsgXAotCWNkICQoc3JjZGlyKSAmJiBybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLW8gdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30ucG8gJiYgbXYgdC0kJHtsYW5nfS5nbW8gJCR7bGFuZ30uZ21vCi0KLS5zaW4uc2VkOgotCXNlZCAtZSAnL14jL2QnICQ8ID4gdC0kQAotCW12IHQtJEAgJEAKLQotCi1hbGw6IGNoZWNrLW1hY3JvLXZlcnNpb24gYWxsLUBVU0VfTkxTQAotCi1hbGwteWVzOiBzdGFtcC1wbwotYWxsLW5vOgotCi0jIEVuc3VyZSB0aGF0IHRoZSBnZXR0ZXh0IG1hY3JvcyBhbmQgdGhpcyBNYWtlZmlsZS5pbi5pbiBhcmUgaW4gc3luYy4KLWNoZWNrLW1hY3JvLXZlcnNpb246Ci0JQHRlc3QgIiQoR0VUVEVYVF9NQUNST19WRVJTSU9OKSIgPSAiQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAiIFwKLQkgIHx8IHsgZWNobyAiKioqIGVycm9yOiBnZXR0ZXh0IGluZnJhc3RydWN0dXJlIG1pc21hdGNoOiB1c2luZyBhIE1ha2VmaWxlLmluLmluIGZyb20gZ2V0dGV4dCB2ZXJzaW9uICQoR0VUVEVYVF9NQUNST19WRVJTSU9OKSBidXQgdGhlIGF1dG9jb25mIG1hY3JvcyBhcmUgZnJvbSBnZXR0ZXh0IHZlcnNpb24gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAiIDE+JjI7IFwKLQkgICAgICAgZXhpdCAxOyBcCi0JICAgICB9Ci0KLSMgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgb25seSBjcmVhdGVkIHdoZW4gbmVlZGVkLiBXaGVuIHhnZXR0ZXh0IGZpbmRzIG5vCi0jIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLCBubyAkKHNyY2RpcikvJChET01BSU4pLnBvdCBpcyBjcmVhdGVkIChiZWNhdXNlCi0jIHdlIGRvbid0IHdhbnQgdG8gYm90aGVyIHRyYW5zbGF0b3JzIHdpdGggZW1wdHkgUE9UIGZpbGVzKS4gV2UgYXNzdW1lIHRoYXQKLSMgTElOR1VBUyBpcyBlbXB0eSBpbiB0aGlzIGNhc2UsIGkuZS4gJChQT0ZJTEVTKSBhbmQgJChHTU9GSUxFUykgYXJlIGVtcHR5LgotIyBJbiB0aGlzIGNhc2UsIHN0YW1wLXBvIGlzIGEgbm9wIChpLmUuIGEgcGhvbnkgdGFyZ2V0KS4KLQotIyBzdGFtcC1wbyBpcyBhIHRpbWVzdGFtcCBkZW5vdGluZyB0aGUgbGFzdCB0aW1lIGF0IHdoaWNoIHRoZSBDQVRBTE9HUyBoYXZlCi0jIGJlZW4gbG9vc2VseSB1cGRhdGVkLiBJdHMgcHVycG9zZSBpcyB0aGF0IHdoZW4gYSBkZXZlbG9wZXIgb3IgdHJhbnNsYXRvcgotIyBjaGVja3Mgb3V0IHRoZSBwYWNrYWdlIHZpYSBDVlMsIGFuZCB0aGUgJChET01BSU4pLnBvdCBmaWxlIGlzIG5vdCBpbiBDVlMsCi0jICJtYWtlIiB3aWxsIHVwZGF0ZSB0aGUgJChET01BSU4pLnBvdCBhbmQgdGhlICQoQ0FUQUxPR1MpLCBidXQgc3Vic2VxdWVudAotIyBpbnZvY2F0aW9ucyBvZiAibWFrZSIgd2lsbCBkbyBub3RoaW5nLiBUaGlzIHRpbWVzdGFtcCB3b3VsZCBub3QgYmUgbmVjZXNzYXJ5Ci0jIGlmIHVwZGF0aW5nIHRoZSAkKENBVEFMT0dTKSB3b3VsZCBhbHdheXMgdG91Y2ggdGhlbTsgaG93ZXZlciwgdGhlIHJ1bGUgZm9yCi0jICQoUE9GSUxFUykgaGFzIGJlZW4gZGVzaWduZWQgdG8gbm90IHRvdWNoIGZpbGVzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZQotIyBjaGFuZ2VkLgotc3RhbXAtcG86ICQoc3JjZGlyKS8kKERPTUFJTikucG90Ci0JdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IFwKLQkgIHRlc3QgLXogIiQoR01PRklMRVMpIiB8fCAkKE1BS0UpICQoR01PRklMRVMpCi0JQHRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCB7IFwKLQkgIGVjaG8gInRvdWNoIHN0YW1wLXBvIiAmJiBcCi0JICBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLXBvVCAmJiBcCi0JICBtdiBzdGFtcC1wb1Qgc3RhbXAtcG87IFwKLQl9Ci0KLSMgTm90ZTogVGFyZ2V0ICdhbGwnIG11c3Qgbm90IGRlcGVuZCBvbiB0YXJnZXQgJyQoRE9NQUlOKS5wb3QtdXBkYXRlJywKLSMgb3RoZXJ3aXNlIHBhY2thZ2VzIGxpa2UgR0NDIGNhbiBub3QgYmUgYnVpbHQgaWYgb25seSBwYXJ0cyBvZiB0aGUgc291cmNlCi0jIGhhdmUgYmVlbiBkb3dubG9hZGVkLgotCi0jIFRoaXMgdGFyZ2V0IHJlYnVpbGRzICQoRE9NQUlOKS5wb3Q7IGl0IGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCi0jIE5vdGUgdGhhdCAkKERPTUFJTikucG90IGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgotJChET01BSU4pLnBvdC11cGRhdGU6ICQoUE9URklMRVMpICQoc3JjZGlyKS9QT1RGSUxFUy5pbiByZW1vdmUtcG90Y2RhdGUuc2VkCi0JaWYgTENfQUxMPUMgZ3JlcCAnR05VIEBQQUNLQUdFQCcgJCh0b3Bfc3JjZGlyKS8qIDI+L2Rldi9udWxsIHwgZ3JlcCAtdiAnbGlidG9vbDonID4vZGV2L251bGw7IHRoZW4gXAotCSAgcGFja2FnZV9nbnU9J0dOVSAnOyBcCi0JZWxzZSBcCi0JICBwYWNrYWdlX2dudT0nJzsgXAotCWZpOyBcCi0JaWYgdGVzdCAtbiAnJChNU0dJRF9CVUdTX0FERFJFU1MpJyB8fCB0ZXN0ICckKFBBQ0tBR0VfQlVHUkVQT1JUKScgPSAnQCdQQUNLQUdFX0JVR1JFUE9SVCdAJzsgdGhlbiBcCi0JICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoTVNHSURfQlVHU19BRERSRVNTKSc7IFwKLQllbHNlIFwKLQkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChQQUNLQUdFX0JVR1JFUE9SVCknOyBcCi0JZmk7IFwKLQljYXNlIGAkKFhHRVRURVhUKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKLQkgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTVdIHwgMC4xWzAtNV0uKiB8IDAuMTYgfCAwLjE2LlswLTFdKikgXAotCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKLQkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAotCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAotCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAotCSAgICAgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIgXAotCSAgICA7OyBcCi0JICAqKSBcCi0JICAgICQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAotCSAgICAgIC0tYWRkLWNvbW1lbnRzPVRSQU5TTEFUT1JTOiAkKFhHRVRURVhUX09QVElPTlMpIEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQCBcCi0JICAgICAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCi0JICAgICAgLS1jb3B5cmlnaHQtaG9sZGVyPSckKENPUFlSSUdIVF9IT0xERVIpJyBcCi0JICAgICAgLS1wYWNrYWdlLW5hbWU9IiQke3BhY2thZ2VfZ251fUBQQUNLQUdFQCIgXAotCSAgICAgIC0tcGFja2FnZS12ZXJzaW9uPSdAVkVSU0lPTkAnIFwKLQkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKLQkgICAgOzsgXAotCWVzYWMKLQl0ZXN0ICEgLWYgJChET01BSU4pLnBvIHx8IHsgXAotCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgdGhlbiBcCi0JICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgPiAkKERPTUFJTikuMXBvICYmIFwKLQkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKERPTUFJTikucG8gPiAkKERPTUFJTikuMnBvICYmIFwKLQkgICAgaWYgY21wICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKERPTUFJTikucG87IFwKLQkgICAgZWxzZSBcCi0JICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90ICYmIFwKLQkgICAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKLQkgICAgZmk7IFwKLQkgIGVsc2UgXAotCSAgICBtdiAkKERPTUFJTikucG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKLQkgIGZpOyBcCi0JfQotCi0jIFRoaXMgcnVsZSBoYXMgbm8gZGVwZW5kZW5jaWVzOiB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSAkKERPTUFJTikucG90IGF0Ci0jIGV2ZXJ5ICJtYWtlIiBpbnZvY2F0aW9uLCBvbmx5IGNyZWF0ZSBpdCB3aGVuIGl0IGlzIG1pc3NpbmcuCi0jIE9ubHkgIm1ha2UgJChET01BSU4pLnBvdC11cGRhdGUiIG9yICJtYWtlIGRpc3QiIHdpbGwgZm9yY2UgYW4gdXBkYXRlLgotJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q6Ci0JJChNQUtFKSAkKERPTUFJTikucG90LXVwZGF0ZQotCi0jIFRoaXMgdGFyZ2V0IHJlYnVpbGRzIGEgUE8gZmlsZSBpZiAkKERPTUFJTikucG90IGhhcyBjaGFuZ2VkLgotIyBOb3RlIHRoYXQgYSBQTyBmaWxlIGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgotJChQT0ZJTEVTKTogJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKLQlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncywuKi8sLCcgLWUgJ3MvXC5wbyQkLy8nYDsgXAotCWlmIHRlc3QgLWYgIiQoc3JjZGlyKS8kJHtsYW5nfS5wbyI7IHRoZW4gXAotCSAgdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCi0JICBlY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFX1VQREFURSkgJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdCI7IFwKLQkgIGNkICQoc3JjZGlyKSAmJiAkKE1TR01FUkdFX1VQREFURSkgJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkJHtsYW5nfS5wby1jcmVhdGU7IFwKLQlmaQotCi0KLWluc3RhbGw6IGluc3RhbGwtZXhlYyBpbnN0YWxsLWRhdGEKLWluc3RhbGwtZXhlYzoKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAotCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKLQkgICQobWtkaXJfcCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKLQkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKLQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgXAotCQkJICAgICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAotCSAgZG9uZTsgXAotCSAgZm9yIGZpbGUgaW4gTWFrZXZhcnM7IGRvIFwKLQkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCi0JICBkb25lOyBcCi0JZWxzZSBcCi0JICA6IDsgXAotCWZpCi1pbnN0YWxsLWRhdGEtbm86IGFsbAotaW5zdGFsbC1kYXRhLXllczogYWxsCi0JJChta2Rpcl9wKSAkKERFU1RESVIpJChkYXRhZGlyKQotCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCi0JZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCi0JICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAotCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAotCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKLQkgICQobWtkaXJfcCkgJChERVNURElSKSQkZGlyOyBcCi0JICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCi0JICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKLQkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCi0JICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKLQkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAotCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAotCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAotCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAotCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAotCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKLQkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCi0JICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCi0JICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKLQkgICAgICAgICAgIGZpOyBcCi0JICAgICAgICAgZG9uZSk7IFwKLQkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCi0JICAgICAgZWxzZSBcCi0JICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAotCSAgICAgICAgICA6OyBcCi0JICAgICAgICBlbHNlIFwKLQkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAotCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCi0JICAgICAgICBmaTsgXAotCSAgICAgIGZpOyBcCi0JICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKLQkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAotCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCi0JICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCi0JICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQlkb25lCi0KLWluc3RhbGwtc3RyaXA6IGluc3RhbGwKLQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQotaW5zdGFsbGRpcnMtZXhlYzoKLWluc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACi0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAotCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAotCWVsc2UgXAotCSAgOiA7IFwKLQlmaQotaW5zdGFsbGRpcnMtZGF0YS1ubzoKLWluc3RhbGxkaXJzLWRhdGEteWVzOgotCSQobWtkaXJfcCkgJChERVNURElSKSQoZGF0YWRpcikKLQlAY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAotCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAotCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKLQkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKLQkgIGRpcj0kKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTOyBcCi0JICAkKG1rZGlyX3ApICQoREVTVERJUikkJGRpcjsgXAotCSAgZm9yIGxjIGluICcnICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCi0JICAgIGlmIHRlc3QgLW4gIiQkbGMiOyB0aGVuIFwKLQkgICAgICBpZiAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyAyPi9kZXYvbnVsbCkgfCBncmVwICcgLT4gJyA+L2Rldi9udWxsOyB0aGVuIFwKLQkgICAgICAgIGxpbms9YGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgfCBzZWQgLWUgJ3MvXi4qIC0+IC8vJ2A7IFwKLQkgICAgICAgIG12ICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKLQkgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKLQkgICAgICAgIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZCAmJiBcCi0JICAgICAgICAgZm9yIGZpbGUgaW4gKjsgZG8gXAotCSAgICAgICAgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAotCSAgICAgICAgICAgICBsbiAtcyAuLi8kJGxpbmsvJCRmaWxlICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJCRmaWxlOyBcCi0JICAgICAgICAgICBmaTsgXAotCSAgICAgICAgIGRvbmUpOyBcCi0JICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAotCSAgICAgIGVsc2UgXAotCSAgICAgICAgaWYgdGVzdCAtZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyB0aGVuIFwKLQkgICAgICAgICAgOjsgXAotCSAgICAgICAgZWxzZSBcCi0JICAgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKLQkgICAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAotCSAgICAgICAgZmk7IFwKLQkgICAgICBmaTsgXAotCSAgICBmaTsgXAotCSAgZG9uZTsgXAotCWRvbmUKLQotIyBEZWZpbmUgdGhpcyBhcyBlbXB0eSB1bnRpbCBJIGZvdW5kIGEgdXNlZnVsIGFwcGxpY2F0aW9uLgotaW5zdGFsbGNoZWNrOgotCi11bmluc3RhbGw6IHVuaW5zdGFsbC1leGVjIHVuaW5zdGFsbC1kYXRhCi11bmluc3RhbGwtZXhlYzoKLXVuaW5zdGFsbC1kYXRhOiB1bmluc3RhbGwtZGF0YS1AVVNFX05MU0AKLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCi0JICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCi0JICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAotCSAgZG9uZTsgXAotCWVsc2UgXAotCSAgOiA7IFwKLQlmaQotdW5pbnN0YWxsLWRhdGEtbm86Ci11bmluc3RhbGwtZGF0YS15ZXM6Ci0JY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAotCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAotCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKLQkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKLQkgIGZvciBsYyBpbiBMQ19NRVNTQUdFUyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAotCSAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAotCSAgZG9uZTsgXAotCWRvbmUKLQotY2hlY2s6IGFsbAotCi1pbmZvIGR2aSBwcyBwZGYgaHRtbCB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgSUQ6Ci0KLW1vc3RseWNsZWFuOgotCXJtIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQKLQlybSAtZiBzdGFtcC1wb1QKLQlybSAtZiBjb3JlIGNvcmUuKiAkKERPTUFJTikucG8gJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICoubmV3LnBvCi0Jcm0gLWZyICoubwotCi1jbGVhbjogbW9zdGx5Y2xlYW4KLQotZGlzdGNsZWFuOiBjbGVhbgotCXJtIC1mIE1ha2VmaWxlIE1ha2VmaWxlLmluIFBPVEZJTEVTICoubW8KLQotbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCi0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi0Jcm0gLWYgc3RhbXAtcG8gJChHTU9GSUxFUykKLQotZGlzdGRpciA9ICQodG9wX2J1aWxkZGlyKS8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCi1kaXN0IGRpc3RkaXI6Ci0JJChNQUtFKSB1cGRhdGUtcG8KLQlAJChNQUtFKSBkaXN0MgotIyBUaGlzIGlzIGEgc2VwYXJhdGUgdGFyZ2V0IGJlY2F1c2UgJ3VwZGF0ZS1wbycgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUuCi1kaXN0Mjogc3RhbXAtcG8gJChESVNURklMRVMpCi0JZGlzdHM9IiQoRElTVEZJTEVTKSI7IFwKLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCi0JICBkaXN0cz0iJCRkaXN0cyBNYWtldmFycy50ZW1wbGF0ZSI7IFwKLQlmaTsgXAotCWlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAotCSAgZGlzdHM9IiQkZGlzdHMgJChET01BSU4pLnBvdCBzdGFtcC1wbyI7IFwKLQlmaTsgXAotCWlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZzsgdGhlbiBcCi0JICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2ciOyBcCi0JZmk7IFwKLQlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2cuJCRpOyB0aGVuIFwKLQkgICAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nLiQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCWlmIHRlc3QgLWYgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZGlzdHM9IiQkZGlzdHMgTElOR1VBUyI7IGZpOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAotCSAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQotdXBkYXRlLXBvOiBNYWtlZmlsZQotCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKLQl0ZXN0IC16ICIkKFVQREFURVBPRklMRVMpIiB8fCAkKE1BS0UpICQoVVBEQVRFUE9GSUxFUykKLQkkKE1BS0UpIHVwZGF0ZS1nbW8KLQotIyBHZW5lcmFsIHJ1bGUgZm9yIGNyZWF0aW5nIFBPIGZpbGVzLgotCi0ubm9wLnBvLWNyZWF0ZToKLQlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLWNyZWF0ZSQkLy8nYDsgXAotCWVjaG8gIkZpbGUgJCRsYW5nLnBvIGRvZXMgbm90IGV4aXN0LiBJZiB5b3UgYXJlIGEgdHJhbnNsYXRvciwgeW91IGNhbiBjcmVhdGUgaXQgdGhyb3VnaCAnbXNnaW5pdCcuIiAxPiYyOyBcCi0JZXhpdCAxCi0KLSMgR2VuZXJhbCBydWxlIGZvciB1cGRhdGluZyBQTyBmaWxlcy4KLQotLm5vcC5wby11cGRhdGU6Ci0JQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUkJC8vJ2A7IFwKLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IGZpOyBcCi0JdG1wZGlyPWBwd2RgOyBcCi0JZWNobyAiJCRsYW5nOiI7IFwKLQl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKLQllY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFKSAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJGxhbmcubmV3LnBvIjsgXAotCWNkICQoc3JjZGlyKTsgXAotCWlmICQoTVNHTUVSR0UpICQkbGFuZy5wbyAkKERPTUFJTikucG90IC1vICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAotCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKLQkgIGVsc2UgXAotCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCi0JICAgICAgOjsgXAotCSAgICBlbHNlIFwKLQkgICAgICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKLQkgICAgICBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgIGZpOyBcCi0JZWxzZSBcCi0JICBlY2hvICJtc2dtZXJnZSBmb3IgJCRsYW5nLnBvIGZhaWxlZCEiIDE+JjI7IFwKLQkgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKLQlmaQotCi0kKERVTU1ZUE9GSUxFUyk6Ci0KLXVwZGF0ZS1nbW86IE1ha2VmaWxlICQoR01PRklMRVMpCi0JQDoKLQotTWFrZWZpbGU6IE1ha2VmaWxlLmluLmluIE1ha2V2YXJzICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzIEBQT01BS0VGSUxFREVQU0AKLQljZCAkKHRvcF9idWlsZGRpcikgXAotCSAgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQC5pbiBwby1kaXJlY3RvcmllcwotCi1mb3JjZToKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcG8vTWFrZXZhcnMgYi9wby9NYWtldmFycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY0ZTdkMC4uMDAwMDAwMAotLS0gYS9wby9NYWtldmFycworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCi0KLSMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KLURPTUFJTiA9IGdzdHJlYW1lci0xLjAKLQotIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCi1zdWJkaXIgPSBwbwotdG9wX2J1aWxkZGlyID0gLi4KLQotIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCi1YR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCi0KLSMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQotIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKLSMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCi0jIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKLSMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCi0jIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCi0jIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQotIyB0aGVpciBjb3B5cmlnaHQuCi1DT1BZUklHSFRfSE9MREVSID0KLQotIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0Ci0jIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgotIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcwotIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCi0jIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQotIyAgIHVuZGVyc3Rvb2QuCi0jIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgotIyAgIG1vbmV5LgotIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCi0jIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCi0jIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCi0jIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKLSMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKLSMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KLU1TR0lEX0JVR1NfQUREUkVTUyA9IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvCi0KLSMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCi0jIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCi1FWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9Ci0KLSMgQXZvaWQgbGluZSBudW1iZXJzIGluICoucG8sIGJ1dCBrZWVwIHRoZW0gaW4gKi5wb3QuCi1NU0dNRVJHRSA9IG1zZ21lcmdlIC0tbm8tbG9jYXRpb24KLU1TR01FUkdFX1VQREFURSA9IG1zZ21lcmdlIC0tbm8tbG9jYXRpb24gLS11cGRhdGUgLS1iYWNrdXA9b2ZmCi1NU0dGSUxURVIgPSBtc2dmaWx0ZXIgLS1uby1sb2NhdGlvbgotCmRpZmYgLS1naXQgYS9wby9QT1RGSUxFUy5pbiBiL3BvL1BPVEZJTEVTLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTNkOWM2Li4wMDAwMDAwCi0tLSBhL3BvL1BPVEZJTEVTLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBGaWxlcyBmcm9tIHRoZSBHU3RyZWFtZXIgZGlzdHJpYnV0aW9uIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuCi0jIG1hcmtlZCB0byBhbGxvdyBydW50aW1lIHRyYW5zbGF0aW9ucyBvZiBtZXNzYWdlcwotCi1nc3QvZ3N0LmMKLWdzdC9nc3RlbGVtZW50LmMKLWdzdC9nc3RlcnJvci5jCi1nc3QvZ3N0cGlwZWxpbmUuYwotZ3N0L2dzdHJlZ2lzdHJ5LmMKLWdzdC9nc3R0YWdsaXN0LmMKLWdzdC9nc3R1cmkuYwotZ3N0L2dzdHV0aWxzLmMKLWdzdC9wYXJzZS9ncmFtbWFyLnkKLWxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYwotbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmMKLXBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jCi1wbHVnaW5zL2VsZW1lbnRzL2dzdGRvd25sb2FkYnVmZmVyLmMKLXBsdWdpbnMvZWxlbWVudHMvZ3N0ZmFrZXNpbmsuYwotcGx1Z2lucy9lbGVtZW50cy9nc3RmZHNpbmsuYwotcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jCi1wbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYwotcGx1Z2lucy9lbGVtZW50cy9nc3RpZGVudGl0eS5jCi1wbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlLmMKLXBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmMKLXBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmMKLXRvb2xzL2dzdC1pbnNwZWN0LmMKLXRvb2xzL2dzdC1sYXVuY2guYwpkaWZmIC0tZ2l0IGEvcG8vUnVsZXMtcXVvdCBiL3BvL1J1bGVzLXF1b3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMmE5OTUuLjAwMDAwMDAKLS0tIGEvcG8vUnVsZXMtcXVvdAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSMgU3BlY2lhbCBNYWtlZmlsZSBydWxlcyBmb3IgRW5nbGlzaCBtZXNzYWdlIGNhdGFsb2dzIHdpdGggcXVvdGF0aW9uIG1hcmtzLgotCi1ESVNURklMRVMuY29tbW9uLmV4dHJhMSA9IHF1b3Quc2VkIGJvbGRxdW90LnNlZCBlbkBxdW90LmhlYWRlciBlbkBib2xkcXVvdC5oZWFkZXIgaW5zZXJ0LWhlYWRlci5zaW4gUnVsZXMtcXVvdAotCi0uU1VGRklYRVM6IC5pbnNlcnQtaGVhZGVyIC5wby11cGRhdGUtZW4KLQotZW5AcXVvdC5wby1jcmVhdGU6Ci0JJChNQUtFKSBlbkBxdW90LnBvLXVwZGF0ZQotZW5AYm9sZHF1b3QucG8tY3JlYXRlOgotCSQoTUFLRSkgZW5AYm9sZHF1b3QucG8tdXBkYXRlCi0KLWVuQHF1b3QucG8tdXBkYXRlOiBlbkBxdW90LnBvLXVwZGF0ZS1lbgotZW5AYm9sZHF1b3QucG8tdXBkYXRlOiBlbkBib2xkcXVvdC5wby11cGRhdGUtZW4KLQotLmluc2VydC1oZWFkZXIucG8tdXBkYXRlLWVuOgotCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlLWVuJCQvLydgOyBcCi0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKLQl0bXBkaXI9YHB3ZGA7IFwKLQllY2hvICIkJGxhbmc6IjsgXAotCWxsPWBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy9ALiovLydgOyBcCi0JTENfQUxMPUM7IGV4cG9ydCBMQ19BTEw7IFwKLQljZCAkKHNyY2Rpcik7IFwKLQlpZiAkKE1TR0lOSVQpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGwgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAotCSAgaWYgY21wICQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKLQkgIGVsc2UgXAotCSAgICBpZiBtdiAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvICQkbGFuZy5wbzsgdGhlbiBcCi0JICAgICAgOjsgXAotCSAgICBlbHNlIFwKLQkgICAgICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkOiBjYW5ub3QgbW92ZSAkJHRtcGRpci8kJGxhbmcubmV3LnBvIHRvICQkbGFuZy5wbyIgMT4mMjsgXAotCSAgICAgIGV4aXQgMTsgXAotCSAgICBmaTsgXAotCSAgZmk7IFwKLQllbHNlIFwKLQkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCi0JICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCi0JZmkKLQotZW5AcXVvdC5pbnNlcnQtaGVhZGVyOiBpbnNlcnQtaGVhZGVyLnNpbgotCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBxdW90Lmluc2VydC1oZWFkZXIKLQotZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KLQlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AYm9sZHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQGJvbGRxdW90Lmluc2VydC1oZWFkZXIKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXF1b3QKLW1vc3RseWNsZWFuLXF1b3Q6Ci0Jcm0gLWYgKi5pbnNlcnQtaGVhZGVyCmRpZmYgLS1naXQgYS9wby9hZi5nbW8gYi9wby9hZi5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZDJmMzcuLjAwMDAwMDAKLS0tIGEvcG8vYWYuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vYWYucG8gYi9wby9hZi5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjNzYwOS4uMDAwMDAwMAotLS0gYS9wby9hZi5wbworKysgL2Rldi9udWxsCkBAIC0xLDEzOTYgKzAsMCBAQAotIyBUcmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIgbWVzc2FnZXMgdG8gQWZyaWthYW5zLgotIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jIFBldHJpIEpvb3N0ZSA8cmt3anBqQHB1ay5hYy56YT4sIDIwMDQuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC45LjdcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0xMi0wNSAxMTo0NSswMjAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBQZXRyaSBKb29zdGUgPHJrd2pwakBwdWsuYWMuemE+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogQWZyaWthYW5zIDxpMThuQGFmLm9yZy56YT5cbiIKLSJMYW5ndWFnZTogYWZcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiVmVydG9vbiBkaWUgR1N0cmVhbWVyIHdlZXJnYXdlIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIk1hYWsgYWxsZSB3YWFyc2t1d2luZ3MgZmF0YWFsIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIlZlcnRvb24gYmVza2lrYmFyZSBvbnRmb3V0a2F0ZWdvcmnDqyBlbiBzdG9wIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIlZlcnN0ZWsgb250Zm91dHZsYWsgdmFuYWYgMSAoc2xlZ3MgZm91dCkgdG90IDUgKGVuaWdpZXRzKSBvZiAwIHZpciBnZWVuICIKLSJhZnZvZXIiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiVkxBSyIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSJLb21tYS1nZXNrZWlkZSBseXMgdmFuIGthdGVnb3JpZV9uYWFtOnZsYWsgcGFyZSBvbSBkaWUgaW5kaXZpZHVlbGUgIgotImthdGVnb3JpZcOrIG9wIHRlIHN0ZWwuIEJ5dm9vcmJlZWxkOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMWVMiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiU2tha2VsIGdla2xldXJkZSBvbnRmb3V0LWFmdm9lciBhZiIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiU2tha2VsIG9udGZvdXRpbmcgYWYiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiQWt0aXZlZXIgdm9sbGVkaWdlIGRpYWdub3N0aWVzZSBib29kc2thcHBlIHZpciBpbnByb3BsYWFpaW5nIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiRHViYmVscHVudC1nZXNrZWlkZSBwYWFpZSB3YXQgaW5wcm9wcGUgYmV2YXQiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiUEFBSUUiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0iS29tbWEtZ2Vza2VpZGUgbHlzIHZhbiBpbnByb3BwZSBvbSB2b29yYWYgdGUgbGFhaSBieSBkaWUgbHlzIGdlc3Rvb3IgaW4gZGllICIKLSJvbWdld2luZ3N2ZXJhbmRlcmxpa2UgR1NUX1BMVUdJTl9QQVRIIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiSU5QUk9QUEUiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICJNb2VuaWUgc2VnbWVudGVyaW5nc2ZvdXRlIHR5ZGVucyBpbnByb3BsYWFpaW5nIG9uZGVydmFuZyBuaWUiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkdTdHJlYW1lciBPcHNpZXMiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJXeXMgR1N0cmVhbWVyIG9wc2llcyIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICJPbmJla2VuZGUgb3BzaWUiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoZXQgJ24gZm91dCB0ZcOrZ2Vrb20gaW4gZGllIGFsZ2VtZW5lIGtlcm5iaWJsaW90ZWVrLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyIG9udHdpa2tlbGFhcnMgd2FzIHRlIGx1aSBvbSAnbiBmb3V0a29kZSB2aXIgaGllcmRpZSBmb3V0IHRvZSB0ZSAiCi0ia2VuLiAgIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCi1tc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IHBhZCBwcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiB0aHJlYWQgcHJvYmxlbS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiBldmVudCBwcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogc2VlayBwcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogY2FwcyBwcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiB0YWcgcHJvYmxlbS4iCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICJKb3UgR1N0cmVhbWVyLWluc3RhbGxhc2llIGtvcnQgJ24gaW5wcm9wLiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiBzZWVrIHByb2JsZW0uIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiIgotIkdTdHJlYW1lciBoZXQgJ24gZm91dCB0ZcOrZ2Vrb20gaW4gJ24gYWxnZW1lbmUgb25kZXJzdGV1bmluZ3NiaWJsaW90ZWVrLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk9uZGVyc3RldW5pbmdzYmlibGlvdGVlayBrb24gbmllIGFhbiBkaWUgZ2FuZyBnZXNpdCB3b3JkIG5pZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiS29uIG5pZSBvbmRlcnN0ZXVuZW5kZSBiaWJsaW90ZWVrIHRvZW1hYWsgbmllLiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIktvbiBuaWUgb25kZXJzdGV1bmVuZGUgYmlibGlvdGVlayB0b2VtYWFrIG5pZS4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgaGV0ICduIGFsZ2VtZW5lIGh1bHBicm9uZm91dCB0ZcOrZ2Vrb20uIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiSHVscGJyb24gbmllIGdldmluZCBuaWUuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiSHVscGJyb24gaXMgYmVzaWcgb2YgbmllIGJlc2tpa2JhYXIgbmllLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS29uIG5pZSBodWxwYnJvbiBvb3BtYWFrIG9tIHRlIGxlZXMgbmllLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiS29uIG5pZSBodWxwYnJvbiBvb3BtYWFrIG9tIHRlIHNrcnlmIG5pZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIktvbiBuaWUgaHVscGJyb24gb29wbWFhayB2aXIgbGVlcyBlbiBza3J5ZiBuaWUuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiS29uIG5pZSBodWxwYnJvbiB0b2VtYWFrIG5pZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiS29uIG5pZSB1aXQgaHVscGJyb24gbGVlcyBuaWUuIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAiS29uIG5pZSBuYSBodWxwYnJvbiBza3J5ZiBuaWUuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIktvbiBuaWUgc29la29wZHJhZyB1aXR2b2VyIG9wIGh1bHBicm9uIG5pZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJLb24gbmllIGh1bHBicm9uIHNpbmtyb25pc2VlciBuaWUuIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIktvbiBuaWUgaHVscGJyb25zdGVsbGluZ3MgdmVya3J5L3ZlcmFuZGVyIG5pZS4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJLb24gbmllIG5hIGh1bHBicm9uIHNrcnlmIG5pZS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoZXQgJ24gYWxnZW1lbmUgc3Ryb29tZm91dCB0ZcOrZ2Vrb20uIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iRWxlbWVudCBpbXBsZW1lbnRlZXIgbmllIGRpZSBoYW50ZXJpbmcgdmFuIGhpZXJkaWUgc3Ryb29tIG5pZS4gIE1lbGQgYXNiLiAnbiAiCi0iZm91dCBhYW4uIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIktvbiBuaWUgZGllIHN0cm9vbXRpcGUgYmVwYWFsIG5pZS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJEaWUgc3Ryb29tIGlzIG5pZSB2YW4gZGllc2VsZmRlIHRpcGUgYXMgd2F0IGRldXIgZGllIGVsZW1lbnQgaGFudGVlciB3b3JkICIKLSJuaWUuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICIiCi0iRGFhciBpcyBuaWUgJ24ga29kZWsgYmVza2lrYmFhciBvbSBoaWVyZGllIHN0cm9vbSBzZSB0aXBlIHRlIGhhbnRlZXIgbmllLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiS29uIG5pZSBzdHJvb20gZGVrb2RlZXIgbmllLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiS29uIG5pZSBzdHJvb20gZW5rb2RlZXIgbmllLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJLb24gbmllIHN0cm9vbSBkZW11bHRpcGxla3NlZXIgbmllLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiS29uIG5pZSBzdHJvb20gbXVsdGlwbGVrc2VlciBuaWUuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCi0iYmVlbiBzdXBwbGllZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJHZWVuIGZvdXRib29kc2thcCB2aXIgZG9tZWluICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICJHZWVuIHN0YW5kYWFyZCBmb3V0Ym9vZHNrYXAgdmlyIGRvbWVpbiAlcyBlbiBrb2RlICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAidGl0ZWwiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJhbGdlbWVlbmJla2VuZGUgdGl0ZWwiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsZ2VtZWVuYmVrZW5kZSB0aXRlbCIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAia3Vuc3RlbmFhciIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAicGVyc29vbihlKSB2ZXJhbnR3b29yZGVsaWsgdmlyIGRpZSBvcG5hbWUiCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvb24oZSkgdmVyYW50d29vcmRlbGlrIHZpciBkaWUgb3BuYW1lIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImFsYnVtIHdhdCBoaWVyZGllIGRhdGEgYmV2YXQiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJhbGJ1bSB3YXQgaGllcmRpZSBkYXRhIGJldmF0IgotCi0jLCBmdXp6eQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAia3Vuc3RlbmFhciIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImRhdHVtIgotCi1tc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkaWUgZGF0dW0gd2Fhcm9wIGRpZSBkYXRhIGdlc2tlcCBpcyAoYXMgJ24gR0RhdGUtc3RydWt0dXVyKSIKLQotIywgZnV6enkKLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAiZGF0dW0iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkaWUgZGF0dW0gd2Fhcm9wIGRpZSBkYXRhIGdlc2tlcCBpcyAoYXMgJ24gR0RhdGUtc3RydWt0dXVyKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJnZW5yZSIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICJnZW5yZSB3YWFydG9lIGhpZXJkaWUgZGF0YSBiZWhvb3J0IgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAia29tbWVudGFhciIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICJ2cnllIHRla3MgbWV0IGtvbW1lbnRhYXIgb3AgZGllIGRhdGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAia29tbWVudGFhciIKLQotIywgZnV6enkKLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgInZyeWUgdGVrcyBtZXQga29tbWVudGFhciBvcCBkaWUgZGF0YSIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAic25pdG5vbW1lciIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJzbml0bm9tbWVyIGJpbm5lIGRpZSB2ZXJzYW1lbGluZyIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJhYW50YWwgc25pdHRlIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiYWFudGFsIHNuaXR0ZSBpbiBkaWUgdmVyc2FtZWxpbmcgd2FhcnVpdCBoaWVyZGllIHNuaXQga29tIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgInNreWZub21tZXIiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJza3lmbm9tbWVyIGJpbm5lICduIHZlcnNhbWVsaW5nIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAiYWFudGFsIHNreXdlIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImFhbnRhbCBza3l3ZSBpbiBkaWUgdmVyc2FtZWxpbmcgd2FhcnVpdCBoaWVyZGllIHNreWYga29tIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgImxpZ2dpbmciCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJiZXNrcnl3aW5nIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJrb3J0IHRla3Mgd2F0IGRpZSBpbmhvdWQgdmFuIGRpZSBkYXRhIGJlc2tyeWYiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ3ZWVyZ2F3ZSIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJ3ZWVyZ2F3ZSB2YW4gaGllcmRpZSBkYXRhIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiSW50ZXJuYXNpb25hbGUgU3RhbmRhYXJkIE9wbmFtZWtvZGUgLSBzaWVuIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXphdGlvbiIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAia29waWVyZWciCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJrb3BpZXJlZ25vdGEgdmFuIGRpZSBkYXRhIgotCi0jLCBmdXp6eQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgImtvcGllcmVnIgotCi0jLCBmdXp6eQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAia29waWVyZWdub3RhIHZhbiBkaWUgZGF0YSIKLQotIywgZnV6enkKLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJlbmtvZGVlcmRlciIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgImtvbnRhayIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImtvbnRha2luZm9ybWFzaWUiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaXNlbnNpZSIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAiZGF0YWxpc2Vuc2llIgotCi0jLCBmdXp6eQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJsaXNlbnNpZSIKLQotIywgZnV6enkKLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgImRhdGFsaXNlbnNpZSIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAia3Vuc3RlbmFhciIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJrdW5zdGVuYWFyKHMpIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgInBlcnNvb24oZSkgdmVyYW50d29vcmRlbGlrIHZpciBkaWUgb3BuYW1lIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJkdXVyIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgImxlbmd0ZSBpbiBHU3RyZWFtZXIgdHlkZWVuaGVkZSAobmFub3Nla29uZGVzKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgd2Fhcm1lZSBkaWUgZGF0YSBnZXN0b29yIGlzIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgInZpZGVvLWtvZGVrIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2RlayB3YWFybWVlIGRpZSB2aWRlb2RhdGEgZ2VzdG9vciBpcyIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJvdWRpby1rb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgd2Fhcm1lZSBkaWUgb3VkaW9kYXRhIGdlc3Rvb3IgaXMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgInZpZGVvLWtvZGVrIgotCi0jLCBmdXp6eQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgd2Fhcm1lZSBkaWUgdmlkZW9kYXRhIGdlc3Rvb3IgaXMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAia29udGFraW5mb3JtYXNpZSIKLQotIywgZnV6enkKLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgd2Fhcm1lZSBkaWUgZGF0YSBnZXN0b29yIGlzIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAiYmlzdGVtcG8iCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJwcmVzaWVzZSBvZiBnaW1pZGRlbGRlIGJpc3RlbXBvIGluIGJpc3NlL3Nla29uZGUiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIm5vbWluYWxlIGJpc3RlbXBvIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibm9tbWluYWxlIGJpc3RlbXBvIGlzIGJpc3NlL3Nla29uZGUiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm1pbmltdW0gYmlzdGVtcG8iCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtaW5pbXVtIGJpc3RlbXBvIGlzIGJpc3NlL3MiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm1ha3NpbXVtIGJpc3RlbXBvIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibWFrc2ltdW0gYmlzdGVtcG8gaW4gYmlzc2Uvc2Vrb25kZSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImVua29kZWVyZGVyIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZW5rb2RlZXJkZXIgd2F0IGhpZXJkaWUgc3Ryb29tIGVua29kZWVyIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJlbmtvZGVlcmRlcndlZXJnYXdlIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAid2Vlcmdhd2UgdmFuIGRpZSBlbmtvZGVlcmRlciB3YXQgaGllcmRpZSBzdHJvb20gZW5rb2RlZXIiCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgInJlZWtzIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAic2VyaWVub21tZXIgdmFuIHNuaXQiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgInRlcnVnc3BlZWx2ZXJzdGVya2luZyBzbml0dmVyc3RlcmtpbmciCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJzbml0dmVyc3RlcmtpbmcgKGluIGRiKSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAidGVydWdzcGVlbHZlcnN0ZXJraW5nIHNuaXR0b3BwdW50IgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgInRvcHB1bnQgdmFuIGRpZSBzbml0IgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJ0ZXJ1Z3NwZWVsdmVyc3RlcmtpbmcgYWxidW12ZXJzdGVya2luZyIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgImFsYnVtdmVyc3RlcmtpbmcgKGluIGRiKSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAidGVydWdzcGVlbHZlcnN0ZXJraW5nIGFsYnVtdG9wcHVudCIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJ0b3BwdW50IHZhbiBkaWUgYWxidW0iCi0KLSMsIGZ1enp5Ci1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgInRlcnVnc3BlZWx2ZXJzdGVya2luZyBzbml0dG9wcHVudCIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgInRhYWxrb2RlIgotCi0jLCBmdXp6eQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgInRhYWxrb2RlIHZpciBoaWVyZGllIHN0cm9vbSwgd2F0IHZvbGRvZW4gYWFuIElTTy02MzktMSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJ0YWFsa29kZSIKLQotbXNnaWQgImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImVua29kZWVyZGVyIHdhdCBoaWVyZGllIHN0cm9vbSBlbmtvZGVlciIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZW5rb2RlZXJkZXIgd2F0IGhpZXJkaWUgc3Ryb29tIGVua29kZWVyIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgIiIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgImtvcnQgdGVrcyB3YXQgZGllIGluaG91ZCB2YW4gZGllIGRhdGEgYmVza3J5ZiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibGlnZ2luZyIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICJsaWdnaW5nIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAibGlnZ2luZyIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJsaWdnaW5nIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAibGlnZ2luZyIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJsaWdnaW5nIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAibGlnZ2luZyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAibGlnZ2luZyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgInNreWZub21tZXIiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgInNreWZub21tZXIiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAibGlzZW5zaWUiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAicGVyc29vbihlKSB2ZXJhbnR3b29yZGVsaWsgdmlyIGRpZSBvcG5hbWUiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgImR1dXIiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIndlZXJnYXdlIHZhbiBkaWUgZW5rb2RlZXJkZXIgd2F0IGhpZXJkaWUgc3Ryb29tIGVua29kZWVyIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJ3ZWVyZ2F3ZSB2YW4gZGllIGVua29kZWVyZGVyIHdhdCBoaWVyZGllIHN0cm9vbSBlbmtvZGVlciIKLQotIywgZnV6enkKLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJsaWdnaW5nIgotCi0jLCBmdXp6eQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAid2Vlcmdhd2UgdmFuIGRpZSBlbmtvZGVlcmRlciB3YXQgaGllcmRpZSBzdHJvb20gZW5rb2RlZXIiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkZPVVQ6IHZhbmFmIGVsZW1lbnQgJXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iQWRkaXNpb25lbGUgb250Zm91dC1pbmxpZ3Rpbmc6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiR2VlbiBlaWVuc2thcCBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJrb24gbmllIGVpZW5za2FwIFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiBzdGVsIG5hIFwiJXNcIiBuaWUiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJLb24gbmllICVzIGFhbiAlcyB2ZXJiaW5kIG5pZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiZ2VlbiBlbGVtZW50IFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAia29uIG5pZSBjYXBzIFwiJXNcIiBvbnRsZWVkIG5pZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgImdlZW4gYmVzdGVtbWluZy1lbGVtZW50IHZpciBVUkkgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJnZWVuIGJyb25lbGVtZW50IHZpciBVUkkgXCIlc1wiIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJnZXNwZXNpZmlzZWVyZGUgbGXDqyBob3VlciBcIiVzXCIgaXMgb250b2VsYWF0YmFhciIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJnZWVuIGhvdWVyIFwiJXNcIiwgZGl0IHdvcmQgb29yZ2VzbGFhbiIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJsZcOrIHB5cGx5biB3b3JkIG5pZSB0b2VnZWxhYXQgbmllIgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZSBkYXRhdmxvZWlwcm9ibGVlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJJbnRlcm5lIGRhdGF2bG9laWZvdXQuIgotCi0jLCBmdXp6eQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiSW50ZXJuZSBkYXRhdmxvZWlmb3V0LiIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgImtvbiBuaWUgaW5saWd0aW5nIG9vciBcIiVzXCIga3J5IG5pZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS29uIG5pZSBsw6plciBcIiVzXCIgb29wbWFhayBvbSB0ZSBsZWVzIG5pZS4gJXMuIgotCi0jLCBmdXp6eQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIkZvdXQgdHlkZW5zIHNrcnlmIG5hIGzDqmVyIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiR2VlbiBsw6plcm5hYW0gb20gaGVlbiB0ZSBza3J5ZiBuaWUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiS29uIG5pZSBsw6plciBcIiVzXCIgb29wbWFhayBvbSBpbiB0ZSBza3J5ZiBuaWUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJGb3V0IG1ldCB0b2VtYWFrIHZhbiBsw6plciBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRm91dCB0eWRlbnMgc2tyeWYgbmEgbMOqZXIgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRm91dCB0eWRlbnMgc2tyeWYgbmEgbMOqZXIgXCIlc1wiLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJHZWVuIGzDqmVybmFhbSBvbSB1aXQgdGUgbGVlcyBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAia29uIG5pZSBpbmxpZ3Rpbmcgb29yIFwiJXNcIiBrcnkgbmllLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICJcIiVzXCIgaXMgJ24gZ2lkcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJMw6plciBcIiVzXCIgaXMgJ24gc29rLiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIk1pc2x1a2tpbmcgbmEgZGllIHZhc2dlc3RlbGRlIGFhbnRhbCBwcm9iZWVyc2xhZS4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJjYXBzIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAidmVybW/Dq25zIHdhdCBiZXNwZXVyIGtvbiB3b3JkIGluIGRpZSBzdHJvb20iCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtaW5pbXVtIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiYWxidW0gd2F0IGhpZXJkaWUgZGF0YSBiZXZhdCIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCi1tc2dzdHIgImFsYnVtIHdhdCBoaWVyZGllIGRhdGEgYmV2YXQiCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICJ0aXRlbCIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJhYW50YWwgc25pdHRlIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiRHJ1ayBhbGxlIGVsZW1lbnRlIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiS29uIG5pZSBsw6plciBcIiVzXCIgb29wbWFhayBvbSBpbiB0ZSBza3J5ZiBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiZ2VlbiBicm9uZWxlbWVudCB2aXIgVVJJIFwiJXNcIiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJCb29kc2thcCB2YW5hZiBlbGVtZW50IFwiJXNcIiAoJXMpOiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIkJvb2Rza2FwIHZhbmFmIGVsZW1lbnQgXCIlc1wiICglcyk6IgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiQm9vZHNrYXAgdmFuYWYgZWxlbWVudCBcIiVzXCIgKCVzKToiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIkJvb2Rza2FwIHZhbmFmIGVsZW1lbnQgXCIlc1wiICglcyk6IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRU9TIGdla3J5IHZhbmFmIGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkVUSUtFVCBHRVZJTkQgIDogZ2V2aW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIkVUSUtFVCBHRVZJTkQgIDogZ2V2aW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIkVUSUtFVCBHRVZJTkQgIDogZ2V2aW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRVRJS0VUIEdFVklORCAgOiBnZXZpbmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRVRJS0VUIEdFVklORCAgOiBnZXZpbmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJGT1VUOiB2YW5hZiBlbGVtZW50ICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIlB5cGx5biB3b3JkIGdlc3RlbCBuYSBTUEVFTCAuLi5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJTdGVsIHB5cGx5biBuYSBQT1VTRUVSIC4uLlxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJQeXBseW4gd29yZCBnZXN0ZWwgbmEgTlVMTCAuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiZ2VlbiBlbGVtZW50IFwiJXNcIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIkZPVVQ6IHZhbmFmIGVsZW1lbnQgJXM6ICVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIld5cyBldGlrZXR0ZSAob29rIGJla2VuZCBhcyBtZXRhZGF0YSkiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJXeXMgc3RhdHVzaW5saWd0aW5nIGVuIGtlbm5pc2dld2luZ3MgdmFuIGVpZW5za2FwcGUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiTW9lbmllIHN0YXR1c2lubGlndGluZyB2YW4gVElQRSB3eXMgbmllIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICJBZnZvZXJib29kc2thcHBlIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiTW9lbmllICduIGZvdXRoYW50ZWVyZGVyIGluc3RhbGxlZXIgbmllIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRk9VVDogcHlwbHluIGtvbiBuaWUgb3BnZXN0ZWwgd29yZCBuaWU6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiRk9VVDogcHlwbHluIGtvbiBuaWUgb3BnZXN0ZWwgd29yZCBuaWUuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJXQUFSU0tVV0lORzogZm91dGlld2UgcHlwbHluOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJGT1VUOiBkaWUgcHlwbHluZWxlbWVudCBrb24gbmllIGdldmluZCB3b3JkIG5pZS5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJTdGVsIHB5cGx5biBuYSBQT1VTRUVSIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiRk9VVDogcHlwbHluIHdpbCBuaWUgcG91c2VlciBuaWUuXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICJQeXBseW4gaXMgVk9PUkdFUk9MIC4uLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiUHlwbHluIGRvZW4gVk9PUlJPTExJTkcgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIkZPVVQ6IHB5cGx5biB3aWwgbmllIHZvb3Jyb2wgbmllLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJQeXBseW4gaXMgVk9PUkdFUk9MIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJQeXBseW4gd29yZCBnZXN0ZWwgbmEgU1BFRUwgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkZPVVQ6IHB5cGx5biB3aWwgbmllIHNwZWVsIG5pZS5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiUHlwbHluIHdvcmQgZ2VzdGVsIG5hIE5VTEwgLi4uXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIlVpdHZvZXJpbmcgaGV0IGdlw6tpbmRpZyBuYSAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiUHlwbHluIHdvcmQgZ2VzdGVsIG5hIEdFUkVFRCAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiUHlwbHluIHdvcmQgZ2VzdGVsIG5hIE5VTEwgLi4uXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiUHlwbHluIHdvcmQgZ2VzdGVsIG5hIE5VTEwgLi4uXG4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJJbnRlcm5lIGRhdGF2bG9laWZvdXQuIgotCi0jfiBtc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKLSN+IG1zZ3N0ciAiTW9lbmllIHN0YXR1c2lubGlndGluZyB2YW4gVElQRSB3eXMgbmllIgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICJUSVBFMSwgVElQRTIsLi4uIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotI34gbXNnc3RyICJ2ZXJiaW5kaW5nIHNvbmRlciBicm9uLWVsZW1lbnQiCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgotI34gbXNnc3RyICJ2ZXJiaW5kaW5nIHNvbmRlciBiZXN0ZW1taW5nLWVsZW1lbnQiCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAiZ2VlbiBlbGVtZW50IHZpciBVUkkgXCIlc1wiIG9tIGhlZW4gdGUgc2tha2VsIG5pZSIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAia29uIG5pZSBhYW4gYmVzdGVtbWluZy1lbGVtZW50IHZpciAgVVJJIFwiJXNcIiB2ZXJiaW5kIG5pZSIKLQotI34gbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCi0jfiBtc2dzdHIgIkRydWsgXCJhbGxvYyB0cmFjZVwiIChpbmRpZW4gYWFuZ2Vza2FrZWwgdHlkZW5zIGtvbXBpbGVyaW5nKSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJHZWJydWlrIHNvOiBnc3QteG1sbGF1bmNoIDxsw6plci54bWw+IFsgZWxlbWVudC5laWVuc2thcD13YWFyZGUgLi4uIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiRk9VVDogb250bGVkaW5nIHZhbiB4bWwtbMOqZXIgJyVzJyBoZXQgbWlzbHVrLlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgotI34gbXNnc3RyICJGT1VUOiBnZWVuIHRvcHZsYWsgcHlwbHluZWxlbWVudCBpbiBsw6plciAnJXMnIG5pZS5cbiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCi0jfiBtc2dzdHIgIldBQVJTS1VXSU5HOiBzbGVncyBlZW4gdG9wdmxhayBlbGVtZW50IHdvcmQgdGFucyBvbmRlcnN0ZXVuLiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiRk9VVDogb252ZXJzdGFhbmJhcmUgYmV2ZWxseW5wYXJhbWV0ZXIgJWQ6ICVzLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKLSN+IG1zZ3N0ciAiV0FBUlNLVVdJTkc6IGVsZW1lbnQgZ2VuYWFtZCAnJXMnIG5pZSBnZXZpbmQgbmllLlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiU3Rvb3IgeG1sLXZvb3JzdGVsbGluZyB2YW4gcHlwbHluIG5hIEzDikVSIGVuIHN0b3AiCi0KLSN+IG1zZ2lkICJGSUxFIgotI34gbXNnc3RyICJMw4pFUiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIk1vZW5pZSAnbiBmb3V0aGFudGVlcmRlciBpbnN0YWxsZWVyIG5pZSIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4iCi0jfiBtc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IHN0YXRlIGNoYW5nZSBmYWlsZWQuIgotCi0jfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKLSN+IG1zZ3N0ciAib29yc3Byb25nIHZhbiBsw6plciBnZWdlZSBhcyAnbiBVUkkiCi0KLSN+IG1zZ2lkICJFbGVtZW50IFwiJXNcIiBoYXMgZ29uZSBmcm9tIFBMQVlJTkcgdG8gUEFVU0VELCBxdWl0dGluZy5cbiIKLSN+IG1zZ3N0ciAiRWxlbWVudCBcIiVzXCIgaGV0IHZlcmFuZGVyIHZhbiBTUEVFTCBuYSBQT1VTRSwgdmVybGFhdCBkdXMuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogUGlwZWxpbmUgY2FuJ3QgUFJFUk9MTCAuLi5cbiIKLSN+IG1zZ3N0ciAiRk9VVDogcHlwbHluIGthbiBuaWUgVk9PUlJPTCBuaWUgLi4uXG4iCi0KLSN+IG1zZ2lkICIgbnMuXG4iCi0jfiBtc2dzdHIgIiBucy5cbiIKLQotI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCi0jfiBtc2dzdHIgInB5cGx5biB3b3JkIFZSWUdFTUFBSyAuLi5cbiIKZGlmZiAtLWdpdCBhL3BvL2F6LmdtbyBiL3BvL2F6LmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4ODA3NC4uMDAwMDAwMAotLS0gYS9wby9hei5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9hei5wbyBiL3BvL2F6LnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGE0YmZjLi4wMDAwMDAwCi0tLSBhL3BvL2F6LnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTI3NiArMCwwIEBACi0jIFRyYW5zbGF0aW9uIG9mICdnc3RyZWFtZXInIG1lc3NhZ2VzIHRvIEF6ZXJiYWlqYW5pLgotIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jIE3JmXRpbiDGj21pcm92IDxtZXRpbkBrYXJlZ2VuLmNvbT4sIDIwMDQuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXItMC44LjBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wMy0xOSAxODo0MCswMjAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBNZXRpbiBBbWlyb2ZmIDxtZXRpbkBrYXJlZ2VuLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBBemVyYmFpamFuaSA8dHJhbnNsYXRpb24tdGVhbS1hekBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IGF6XG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjAuMlxuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJHU3RyZWFtZXIgYnVyYXjEsWzEscWfxLFuxLEgZ8O2c3TJmXIiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiQsO8dMO8biB4yZl0YWxhcsSxIMO2bMO8bWPDvGwgZXQiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiU8aPVsSwWVnGjyIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIlPEsFlBSEkiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJYyZl0YSBhecSxcm1hc8SxbsSxIGJhxJ9sYSIKLQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiQ0nEnklSTEFSIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAixo9MQVbGj0zGj1IiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJHU3RyZWFtZXIgYnVyYXjEsWzEscWfxLFuxLEgZ8O2c3TJmXIiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidGl0bGUgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAidGFyaXgiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAidGFyaXgiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAixZ/JmXJoIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICLFn8mZcmgiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIiIKLQotbXNnaWQgImxvY2F0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJpemFoYXQiCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgImJ1cmF4xLFsxLHFnyIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJtw7zJmWxsaWYgaMO8cXVxdSIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIm3JmSdsdW1hdMSxbiBtw7zJmWxsaWYgaMO8cXVxdSBxZXlkaSIKLQotIywgZnV6enkKLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJtw7zJmWxsaWYgaMO8cXVxdSIKLQotIywgZnV6enkKLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIm3JmSdsdW1hdMSxbiBtw7zJmWxsaWYgaMO8cXVxdSBxZXlkaSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgIsmZbGFxyZkiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICLJmWxhccmZIG3JmSdsdW1hdMSxIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAibGlzZW56aXlhIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJtyZknbHVtYXTEsW4gbGlzZW56aXlhc8SxIgotCi0jLCBmdXp6eQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJsaXNlbnppeWEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJtyZknbHVtYXTEsW4gbGlzZW56aXlhc8SxIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJpZmHDp8SxIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgImlmYSBlZMmZbiDFn8mZeHMobMmZcikiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiaWZhIGVkyZluIMWfyZl4cyhsyZlyKSIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IgotbXNnc3RyICIiCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAic8O8csmZa2xpayIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiyZlsYXHJmSBtyZknbHVtYXTEsSIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAic2VyaXlhIG7Dtm1yyZlzaSIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgIm1haG7EsW7EsW4gc2VyaXlhIG7Dtm1yyZlzaSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgIiIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQotbXNnaWQgInByZXZpZXcgaW1hZ2UiCi1tc2dzdHIgIiIKLQotbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgIiIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICIiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAibGlzZW56aXlhIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImlmYSBlZMmZbiDFn8mZeHMobMmZcikiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgInPDvHLJmWtsaWsiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIiIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIm1pbmltYWwiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICIiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jfiBtc2dpZCAiRklMRSIKLSN+IG1zZ3N0ciAiRkFZTCIKLQotI34gbXNnaWQgIicpIgotI34gbXNnc3RyICInKSIKLQotI34gbXNnaWQgIlNDSEVEVUxFUiIKLSN+IG1zZ3N0ciAiVkFYVExBxZ5ESVJJQ0kiCi0KLSN+IG1zZ2lkICJSZWdpc3RyeSB0byB1c2UiCi0jfiBtc2dzdHIgIsSwxZ9syZlkaWzJmWPJmWsgcWV5ZCBiYXphc8SxIgotCi0jfiBtc2dpZCAiUkVHSVNUUlkiCi0jfiBtc2dzdHIgIlFFWURCQVpBU0kiCmRpZmYgLS1naXQgYS9wby9iZS5nbW8gYi9wby9iZS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OTZkMDkuLjAwMDAwMDAKLS0tIGEvcG8vYmUuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vYmUucG8gYi9wby9iZS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0YjYzMC4uMDAwMDAwMAotLS0gYS9wby9iZS5wbworKysgL2Rldi9udWxsCkBAIC0xLDEyNzMgKzAsMCBAQAotIyBCZWxhcnVzaWFuIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgQWxlcyBOeWFraGF5Y2h5ayA8bmFiQG1haWwuYnk+LCAyMDA2LgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuOS43XG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDYtMDEtMTggMjI6MjYrMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogQWxlcyBOeWFraGF5Y2h5ayA8bmFiQG1haWwuYnk+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogQmVsYXJ1c2lhbiA8aTE4bkBtb3ZhLm9yZz5cbiIKLSJMYW5ndWFnZTogYmVcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAi0JTRgNGD0LrRg9C1INCy0Y3RgNGB0YvRjiBHU3RyZWFtZXIiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAi0KDQvtCx0ZbRhtGMINGD0YHQtSDQv9Cw0L/Rj9GA0Y3QtNC20LDQvdGM0L3RliDRhNCw0YLQsNC70YzQvdGL0LzRliIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICLQlNGA0YPQutGD0LUg0L3QsNGP0Z7QvdGL0Y8g0LrQsNGC0Y3Qs9C+0YDRi9GWINCw0LTQu9Cw0LTQutGWINC5INCy0YvRhdC+0LTQt9GW0YbRjCIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSLQn9GA0LDQtNCy0YvQt9C90LDRh9Cw0L3RiyDRntC30YDQvtCy0LXQvdGMINCw0LTQu9Cw0LTQutGWINCw0LQgMSAo0YLQvtC70YzQutGWINC/0LDQvNGL0LvQutGWKSDQtNCwIDUgKNGD0YHRkSkg0YbRliAwINC60LDQsSAiCi0i0LLRi9C60LvRjtGH0YvRhtGMINCy0YvQstCw0LQiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAi0KPQl9Cg0J7QktCV0J3QrCIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSLQoNCw0LfRjNC80LXQttCw0LLQsNC90Ysg0LrQvtGB0LrQsNC80ZYg0YHRjNC/0ZbRgSDQv9Cw0YAgY2F0ZWdvcl9uYW1lOmxldmVsINC00LvRjyDQstGL0YHRgtCw0Z7Qu9C10L3RjNC90Y8gIgotItCw0LTQvNGL0YHQu9C+0LLRi9GFINGD0LfRgNC+0Z7QvdGP0Z4g0LTQu9GPINCw0YHQvtCx0L3Ri9GFINC60LDRgtGN0LPQvtGA0YvRj9GeLiDQndCw0L/RgNGL0LrQu9Cw0LQsIEdTVF9BVVRPUExVRzo1LCIKLSJHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICLQodCs0J/QhtChIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgItCS0YvQutC70Y7Rh9Cw0LUg0LrQsNC70Y/RgNC+0LLRiyDQstGL0LLQsNC0INCw0LTQu9Cw0LTQutGWIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICLQktGL0LrQu9GO0YfQsNC1INCw0LTQu9Cw0LTQutGDIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgItCj0LrQu9GO0YfQsNC1INGI0LzQsNGC0YHQu9C+0Z7QvdGD0Y4g0LTRi9GP0LPQvdC+0YHRgtGL0LrRgyDQt9Cw0LPRgNGD0LfQutGWINGe0YLRg9C70LDQuiIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgItCf0LDQtNC30LXQu9C10L3RiyDQtNCy0YPQutGA0L7QvyfRj9C80ZYg0YHRjNC/0ZbRgSDRiNC70Y/RhdC+0Z4sINC00LfQtSDQvNC10YHRjNGG0Y/RhtGG0LAg0Z7RgtGD0LvQutGWIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgItCo0JvQr9Cl0IYiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgItCd0LXQvNCw0LPRh9GL0LzQsCDQsNC00YfRi9C90ZbRhtGMINGA0LDRgdGD0YDRgSDQtNC70Y8g0LfQsNC/0ZbRgdGDLiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgItCg0LDRgdGD0YDRgSDQvdGPINC30L3QvtC50LTQt9C10L3Riy4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICLQoNCw0YHRg9GA0YEg0LfQsNC90Y/RgtGLINGG0ZYg0L3QtdC00LDRgdGC0YPQv9C90YsuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LDQtNGH0YvQvdGW0YbRjCDRgNCw0YHRg9GA0YEg0LTQu9GPINGH0YvRgtCw0L3RjNC90Y8uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LDQtNGH0YvQvdGW0YbRjCDRgNCw0YHRg9GA0YEg0LTQu9GPINC30LDQv9GW0YHRgy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgItCd0LXQvNCw0LPRh9GL0LzQsCDQsNC00YfRi9C90ZbRhtGMINGA0LDRgdGD0YDRgSDQtNC70Y8g0YfRi9GC0LDQvdGM0L3RjyDRliDQt9Cw0L/RltGB0YMuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINC30LDRh9GL0L3RltGG0Ywg0YDQsNGB0YPRgNGBLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0L/RgNCw0YfRi9GC0LDRhtGMINC3INGA0LDRgdGD0YDRgdGDLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LXQvNCw0LPRh9GL0LzQsCDQt9Cw0L/RltGB0LDRhtGMINGDINGA0LDRgdGD0YDRgS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LXQvNCw0LPRh9GL0LzQsCDQt9Cw0L/RltGB0LDRhtGMINGDINGA0LDRgdGD0YDRgS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgItCd0LXQvNCw0LPRh9GL0LzQsCDQstGL0LfQvdCw0YfRi9GG0Ywg0YLRi9C/INC/0LvRi9C90ZYuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINC00Y3QutCw0LTQsNCy0LDRhtGMINC/0LvRi9C90Y4uIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LfQsNC60LDQtNCw0LLQsNGG0Ywg0L/Qu9GL0L3Rji4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgItCQ0LTRgdGD0YLQvdGW0YfQsNC1INC/0LDQstC10LTQsNC80LvQtdC90YzQvdC1INCw0LEg0L/QsNC80YvQu9GG0Ysg0LTQu9GPINC80LDRkdC90YLQutCwICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAi0LfQsNCz0LDQu9C+0LLQsNC6IgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAi0LDQs9GD0LvRjNC90LAg0Z7QttGL0LLQsNC70YzQvdCw0Y8g0L3QsNC30LLQsCIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi0LDQs9GD0LvRjNC90LAg0Z7QttGL0LLQsNC70YzQvdCw0Y8g0L3QsNC30LLQsCIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAi0LLRi9C60LDQvdCw0Z7RhtCwIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICLQsNGB0L7QsdCwKNGLKSDQsNC00LrQsNC30L3Ri9GPINC30LAg0LfQsNC/0ZbRgSIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi0LDRgdC+0LHQsCjRiykg0LDQtNC60LDQt9C90YvRjyDQt9CwINC30LDQv9GW0YEiCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAi0LDQu9GM0LHQvtC8IgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgItCw0LvRjNCx0L7QvCwg0Y/QutGW0Y8g0LfRjNC80Y/RiNGH0LDQtSDQs9GN0YLRi9GPINC00LDQvdGM0ZYiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLQsNC70YzQsdC+0LwsINGP0LrRltGPINC30YzQvNGP0YjRh9Cw0LUg0LPRjdGC0YvRjyDQtNCw0L3RjNGWIgotCi0jLCBmdXp6eQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAi0LLRi9C60LDQvdCw0Z7RhtCwIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAi0LTQsNGC0LAiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgItC00LDRgtCwLCDQutCw0LvRliDQs9GN0YLRi9GPINC00LDQvdGM0L3RliDQsdGL0LvRliDRgdGC0LLQvtGA0LDQvdCwICjRj9C6INGB0YLRgNGD0LrRgtGD0YDQsCBHRGF0ZSkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgItC00LDRgtCwIgotCi0jLCBmdXp6eQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAi0LTQsNGC0LAsINC60LDQu9GWINCz0Y3RgtGL0Y8g0LTQsNC90YzQvdGWINCx0YvQu9GWINGB0YLQstC+0YDQsNC90LAgKNGP0Log0YHRgtGA0YPQutGC0YPRgNCwIEdEYXRlKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICLQttCw0L3RgCIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICLQttCw0L3RgCDQtNCwINGP0LPQvtC60LAg0L3QsNC70LXQttCw0YbRjCDQs9GN0YLRi9GPINC00LDQvdGM0L3RliIKLQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgItC60LDQvNGN0L3RgtCw0YAiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAi0LvRjtCx0Ysg0YLRjdC60YEsINGP0LrRliDQutCw0LzRjdC90YLRg9C1INCz0Y3RgtGL0Y8g0LTQsNC90YzQvdGWIgotCi0jLCBmdXp6eQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgItC60LDQvNGN0L3RgtCw0YAiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICLQu9GO0LHRiyDRgtGN0LrRgSwg0Y/QutGWINC60LDQvNGN0L3RgtGD0LUg0LPRjdGC0YvRjyDQtNCw0L3RjNC90ZYiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgItC90YPQvNGAINC30LDQv9GW0YHRgyIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLQvdGD0LzQsNGAINC30LDQv9GW0YHRgyDRniDQvNC10LbQsNGFINC60LDQu9C10LrRhtGL0ZYiCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAi0LrQvtC70YzQutCw0YHRjNGG0Ywg0LfQsNC/0ZbRgdCw0Z4iCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICLQutC+0LvRjNC60LDRgdGM0YbRjCDQt9Cw0L/RltGB0LDRniDRniDQvNC10LbQsNGFINC60LDQu9C10LrRhtGL0ZYg0LTQsCDRj9C60L7QuSDQs9GN0YLRiyDQt9Cw0L/RltGBINC90LDQu9C10LbRi9GG0YwiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAi0L3Rg9C80LDRgCDQtNGL0YHQutCwIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAi0L3Rg9C80LDRgCDQtNGL0YHQutCwINGeINC80LXQttCw0YUg0LrQsNC70LXQutGG0YvRliIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICLQsNGB0L7QsdCwKNGLKSDQsNC00LrQsNC30L3Ri9GPINC30LAg0LfQsNC/0ZbRgSIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IgotbXNnc3RyICIiCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgIiIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgIiIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICIiCi0KLW1zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgItC90YPQvNCw0YAg0LTRi9GB0LrQsCIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAi0L3Rg9C80LDRgCDQtNGL0YHQutCwIgotCi1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIiIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgItCw0YHQvtCx0LAo0YspINCw0LTQutCw0LfQvdGL0Y8g0LfQsCDQt9Cw0L/RltGBIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0i0JTQsNC00LDRgtC60L7QstCw0Y8g0LDQtNC70LDQtNCw0YfQvdCw0Y8g0ZbQvdGE0LDRgNC80LDRhtGL0Y86XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICLQndC10LzQsNCz0YfRi9C80LAg0LfQsNC60LDQtNCw0LLQsNGG0Ywg0L/Qu9GL0L3Rji4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINCw0LTRh9GL0L3RltGG0Ywg0YDQsNGB0YPRgNGBINC00LvRjyDRh9GL0YLQsNC90YzQvdGPLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAi0J3QtdC80LDQs9GH0YvQvNCwINC30LDQutCw0LTQsNCy0LDRhtGMINC/0LvRi9C90Y4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgItCw0LvRjNCx0L7QvCwg0Y/QutGW0Y8g0LfRjNC80Y/RiNGH0LDQtSDQs9GN0YLRi9GPINC00LDQvdGM0ZYiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICLQsNC70YzQsdC+0LwsINGP0LrRltGPINC30YzQvNGP0YjRh9Cw0LUg0LPRjdGC0YvRjyDQtNCw0L3RjNGWIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAi0LfQsNCz0LDQu9C+0LLQsNC6IgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgItC60L7Qu9GM0LrQsNGB0YzRhtGMINC30LDQv9GW0YHQsNGeIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL2JnLmdtbyBiL3BvL2JnLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzliNjFiMS4uMDAwMDAwMAotLS0gYS9wby9iZy5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9iZy5wbyBiL3BvL2JnLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTFkMThmLi4wMDAwMDAwCi0tLSBhL3BvL2JnLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTMyNiArMCwwIEBACi0jIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIuCi0jIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvbmRhdGlvbiwgSW5jLgotIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTYgRnJlZSBTb2Z0d2FyZSBGb25kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgotIyBBbGV4YW5kZXIgU2hvcG92IDxhc2hAY29udGFjdC5iZz4sIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAuCi0jIEFsZXhhbmRlciBTaG9wb3YgPGFzaEBjb250YWN0LmJnPiwgMjAxMSwgMjAxNi4KLSMKLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAxLjcuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTAyLTIxIDIxOjAyKzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz5cbiIKLSJMYW5ndWFnZS1UZWFtOiBCdWxnYXJpYW4gPGRpY3RAbHVkb3N0Lm5ldD5cbiIKLSJMYW5ndWFnZTogYmdcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uICE9IDE7XG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgItCe0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QsCDQstC10YDRgdC40Y/RgtCwINC90LAgR1N0cmVhbWVyIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgItCS0YHQuNGH0LrQuCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC00LAg0YHQsCDRhNCw0YLQsNC70L3QuCIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICLQntGC0L/QtdGH0LDRgtCy0LDQvdC1INC90LAg0L3QsNC70LjRh9C90LjRgtC1INC60LDRgtC10LPQvtGA0LjQuCDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LPRgNC10YjQutC4INC4INC40LfRhdC+0LQiCi0KLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSLQodGC0LDQvdC00LDRgNGC0L3QvtGC0L4g0L3QuNCy0L4g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCDigJQg0L7RgiAxICjRgdCw0LzQviDQs9GA0LXRiNC60LgpINC00L4gOSAo0LLRgdC40YfQutC+KSAiCi0i0LjQu9C4IDAg4oCUINCx0LXQtyDQvdC40LrQsNC60LLQuCDRgdGK0L7QsdGJ0LXQvdC40Y8g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICLQndCY0JLQniIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSLQodC/0LjRgdGK0Log0L7RgiDQtNCy0L7QudC60Lgg0LjQvNC1X9C90LBf0LrQsNGC0LXQs9C+0YDQuNGPOtC90LjQstC+INGA0LDQt9C00LXQu9C10L3QuCDRgdGK0YEg0LfQsNC/0LXRgtCw0LguINCi0L7QuSDRg9C60LDQt9Cy0LAgIgotItC60L7QvdC60YDQtdGC0L3QuNGC0LUg0L3QuNCy0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40Y8g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCDQvdCwINC+0YLQtNC10LvQvdC40YLQtSAiCi0i0LrQsNGC0LXQs9C+0YDQuNC4LiDQndCw0L/RgNC40LzQtdGAOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICLQodCf0JjQodCq0JoiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAi0KHQv9C40YDQsNC90LUg0L3QsCDQvtGG0LLQtdGC0LXQvdC40YLQtSDRgdGK0L7QsdGJ0LXQvdC40Y8g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0i0KHQvNGP0L3QsCDQvdCwINGA0LXQttC40LzQsCDQvdCwINC+0YbQstC10YLRj9Cy0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNGP0YLQsCDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LPRgNC10YjQutC4LiAiCi0i0JLRitC30LzQvtC20L3QuNGC0LUg0YHRgtC+0LnQvdC+0YHRgtC4INGB0LA6IOKAnm9mZuKAnCAo0LjQt9C60LvRjtGH0LLQsNC90LUpLCDigJ5vbuKAnCAo0LLQutC70Y7Rh9Cy0LDQvdC1KSwgIgotIuKAnmRpc2FibGXigJwgKNGB0L/QuNGA0LDQvdC1KSwg4oCeYXV0b+KAnCAo0LDQstGC0L7QvNCw0YLQuNGH0L3QviksIOKAnnVuaXjigJwgKNGB0YLQsNC90LTQsNGA0YLQvdC+INC30LAgdW5peCkiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAi0KHQv9C40YDQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40Y/RgtCwINC30LAg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQs9GA0LXRiNC60LgiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAi0JLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0L/QvtC00YDQvtCx0L3QuCDRgdGK0L7QsdGJ0LXQvdC40Y8g0L/RgNC4INC30LDRgNC10LbQtNCw0L3QtSDQvdCwINC/0YDQuNGB0YLQsNCy0LrQsCIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgItCf0YrRgtC40YnQsCDRgSDQv9GA0LjRgdGC0LDQstC60LgsINGA0LDQt9C00LXQu9C10L3QuCDRgSDQtNCy0L7QtdGC0L7Rh9C40LUiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAi0J/QqtCi0JjQqdCQIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotItCh0L/QuNGB0YrQuiDQvtGCINC/0YDQuNGB0YLQsNCy0LrQuCwg0YDQsNC30LTQtdC70LXQvdC4INGB0YrRgSDQt9Cw0L/QtdGC0LDRjywg0LrQvtC40YLQviDQtNCwINCx0YrQtNCw0YIg0L/RgNC10LTQstCw0YDQuNGC0LXQu9C90L4gIgotItC30LDRgNC10LTQtdC90Lgg0LIg0LTQvtC/0YrQu9C90LXQvdC40LUg0LrRitC8INGC0LXQt9C4INC+0YIg0YHQv9C40YHRitC60LAg0LIg0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwINC90LAg0YHRgNC10LTQsNGC0LAgIgotIkdTVF9QUExVR0lOX1BBVEgiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICLQn9Cg0JjQodCi0JDQktCa0JgiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICIiCi0i0KHQv9C40YDQsNC90LUg0L3QsCDQv9GA0LjRhdCy0LDRidCw0L3QtdGC0L4g0L3QsCDRgdC10LPQvNC10L3RgtCw0YbQuNC+0L3QvdC4INCz0YDQtdGI0LrQuCDQv9C+INCy0YDQtdC80LXRgtC+INC90LAg0LfQsNGA0LXQttC00LDQvdC1INC90LAgIgotItC/0YDQuNGB0YLQsNCy0LrQsCIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICLQoNC10LPQuNGB0YLRitGA0YrRgiDQtNCwINC90LUg0YHQtSDQv9GA0L7Rh9C40YLQsCIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgItCR0LXQtyDRgdGC0LDRgNGC0LjRgNCw0L3QtdGC0L4g0L3QsCDRgdC/0L7QvNCw0LPQsNGC0LXQu9C10L0g0L/RgNC+0YbQtdGBINC/0YDQuCDQuNC30YfQuNGC0LDQvdC10YLQviDQvdCwINGA0LXQs9C40YHRgtGK0YDQsCIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L3QsCBHU3RyZWFtZXIiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQvtC/0YbQuNC40YLQtSDQvdCwIEdTdHJlYW1lciIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRjyIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyINC/0L7Qu9GD0YfQuCDQvtCx0YnQsCDQs9GA0LXRiNC60LAg0LIg0L7RgdC90L7QstC90LAg0LHQuNCx0LvQuNC+0YLQtdC60LAuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSLQoNCw0LfRgNCw0LHQvtGC0YfQuNGG0LjRgtC1INC90LAgR1N0cmVhbWVyINGB0LAg0LHQuNC70Lgg0L/RgNC10LrQsNC70LXQvdC+INC80YrRgNC30LXQu9C40LLQuCDQuCDQvdC1INGB0LAg0LfQsNC00LDQu9C4INC60L7QtCAiCi0i0LfQsCDQs9GA0LXRiNC60LAg0L3QsCDRgtC+0LfQuCDQv9GA0L7QsdC70LXQvC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAi0JLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAg0L3QsCBHU3RyZWFtZXI6INC60L7QtNGK0YIg0L3QtSDQtSDRgNC10LDQu9C40LfQuNGA0LDQvS4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLSLQk9GA0LXRiNC60LAg0L3QsCBHU3RyZWFtZXI6INC90LXRg9GB0L/QtdGI0L3QsCDQv9GA0L7QvNGP0L3QsCDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4sINCwINC90Y/QutC+0Lkg0L7RgiDQtdC70LXQvNC10L3RgtC40YLQtSAiCi0i0L/RgNC+0L/Rg9GB0L3QsCDQtNCwINC/0L7QtNCw0LTQtSDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQs9GA0LXRiNC60LAg0YEg0L/RgNC40YfQuNC90LDRgtCwINC30LAg0YLQvtCy0LAuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvCDQsiDQtNC+0L/RitC70LLQsNC90LXRgtC+LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICLQktGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQvdCwIEdTdHJlYW1lcjog0L/RgNC+0LHQu9C10Lwg0YEg0L3QuNGI0LrQuNGC0LUuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAi0JLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAg0L3QsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC8INGBINC00L7Qs9C+0LLQsNGA0Y/QvdC10YLQvi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICLQktGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQvdCwIEdTdHJlYW1lcjog0L/RgNC+0LHQu9C10Lwg0YHRitGBINGB0YrQsdC40YLQuNGP0YLQsC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvCDQv9GA0Lgg0L/QvtC30LjRhtC40L7QvdC40YDQsNC90LXRgtC+LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAi0JLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAg0L3QsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC8INGBINCy0YrQt9C80L7QttC90L7RgdGC0LjRgtC1LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICLQktGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQvdCwIEdTdHJlYW1lcjog0L/RgNC+0LHQu9C10Lwg0YEg0LXRgtC40LrQtdGC0LjRgtC1LiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgItCb0LjQv9GB0LLQsCDQvdC10L7QsdGF0L7QtNC40LzQsCDQv9GA0LjRgdGC0LDQstC60LAg0LIg0YLQsNC30Lgg0LjQvdGB0YLQsNC70LDRhtC40Y8g0L3QsCBHU3RyZWFtZXIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L3QsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC8INGBINGH0LDRgdC+0LLQvdC40LrQsC4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotItCi0L7QstCwINC/0YDQuNC70L7QttC10L3QuNC1INGB0LUg0L7Qv9C40YLQstCwINC00LAg0L/QvtC70LfQstCwINGE0YPQvdC60YbQuNC+0L3QsNC70L3QvtGB0YIg0L3QsCBHU3RyZWFtZXIsINC60L7Rj9GC0L4g0LUgIgotItC40LfQutC70Y7Rh9C10L3QsC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDQv9C+0LvRg9GH0Lgg0L7QsdGJ0LAg0LPRgNC10YjQutCwINCyINC/0L7QvNC+0YnQvdCwINCx0LjQsdC70LjQvtGC0LXQutCwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgItCf0L7QvNC+0YnQvdCw0YLQsCDQsdC40LHQu9C40L7RgtC10LrQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QsC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAi0J/QvtC80L7RidC90LDRgtCwINCx0LjQsdC70LjQvtGC0LXQutCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0YLQstC+0YDQtdC90LAuIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLQn9C+0LzQvtGJ0L3QsNGC0LAg0LHQuNCx0LvQuNC+0YLQtdC60LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC90LDRgdGC0YDQvtC10L3QsC4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LrQvtC00LjRgNCw0L3QtS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyINC/0L7Qu9GD0YfQuCDQvtCx0YnQsCDQs9GA0LXRiNC60LAg0LIg0YDQtdGB0YPRgNGBLiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgItCg0LXRgdGD0YDRgdGK0YIg0L3QtSDQtSDQvtGC0LrRgNC40YIuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAi0KDQtdGB0YPRgNGB0YrRgiDQtSDQt9Cw0LXRgiDQuNC70Lgg0L3QtSDQtSDQtNC+0YHRgtGK0L/QtdC9LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAi0KDQtdGB0YPRgNGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0g0LfQsCDRh9C10YLQtdC90LUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICLQoNC10YHRg9GA0YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQt9CwINC30LDQv9C40YEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLQoNC10YHRg9GA0YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQt9CwINGH0LXRgtC10L3QtSDQuCDQt9Cw0L/QuNGBLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgItCg0LXRgdGD0YDRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDRgtCy0L7RgNC10L0uIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INGH0LXRgtC1INC+0YIg0YDQtdGB0YPRgNGB0LAuIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LjRgdCy0LAg0LIg0YDQtdGB0YPRgNGB0LAuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qt9C40YbQuNC+0L3QuNGA0LAg0LIg0YDQtdGB0YPRgNGB0LAuIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHQuNC90YXRgNC+0L3QuNC30LjRgNCwINC/0L4g0YDQtdGB0YPRgNGB0LAuIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuC/Qt9Cw0LTQsNC00LUg0L3QsNGB0YLRgNC+0LnQutCwINC+0YIv0L3QsCDRgNC10YHRg9GA0YHQsC4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgItCS0YrRgNGF0YMg0YDQtdGB0YPRgNGB0LAg0L3QtSDQtSDQvtGB0YLQsNC90LDQu9C+INGB0LLQvtCx0L7QtNC90L4g0LzRj9GB0YLQvi4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICLQndGP0LzQsCDQv9GA0LDQstCwINC30LAg0LTQvtGB0YLRitC/INC00L4g0YDQtdGB0YPRgNGB0LAuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIg0L/QvtC70YPRh9C4INC+0LHRidCwINCz0YDQtdGI0LrQsCDQsiDQv9C+0YLQvtC60LAg0L7RgiDQtNCw0L3QvdC4LiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotItCV0LvQtdC80LXQvdGC0YrRgiDQvdC1INC+0YHRitGJ0LXRgdGC0LLRj9Cy0LAg0L7QsdGA0LDQsdC+0YLQutCw0YLQsCDQvdCwINGC0L7Qt9C4INC/0L7RgtC+0LouINCc0L7Qu9GPLCDQv9C+0LTQsNC50YLQtSDQtNC+0LrQu9Cw0LQg0LfQsCAiCi0i0LPRgNC10YjQutCwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICLQktC40LTRitGCINC90LAg0L/QvtGC0L7QutCwINC+0YIg0LTQsNC90L3QuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9GA0LXQtNC10LvQtdC9LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L7RgiDQtNCw0L3QvdC4INC90LUg0LUg0L7RgiDQstC40LTQsCwg0LrQvtC50YLQviDRgdC1INC+0LHRgNCw0LHQvtGC0LLQsCDQvtGCINC10LvQtdC80LXQvdGC0LAuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICLQndGP0LzQsCDQutC+0LTQtdGAINC30LAg0L7QsdGA0LDQsdC+0YLQutCw0YLQsCDQvdCwINGC0L7Qt9C4INCy0LjQtCDQv9C+0YLQvtC6INC+0YIg0LTQsNC90L3QuC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgItCf0L7RgtC+0LrRitGCINC+0YIg0LTQsNC90L3QuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LTQtdC60L7QtNC40YDQsNC9LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L7RgiDQtNCw0L3QvdC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQutC+0LTQuNGA0LDQvS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L7RgiDQtNCw0L3QvdC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgNCw0LfQtNC10LvQtdC9ICjQtNC10LzRg9C70YLQuNC/0LvQtdC60YHQuNGA0LDQvSkuIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICLQn9C+0YLQvtC60YrRgiDQvtGCINC00LDQvdC90Lgg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGD0L/Qu9GK0YLQvdC10L0gKNC80YPQu9GC0LjQv9C70LXQutGB0LjRgNCw0L0pLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgItCf0L7RgtC+0LrRitGCINC1INGBINCz0YDQtdGI0LXQvSDRhNC+0YDQvNCw0YIuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgItCf0L7RgtC+0LrRitGCINC1INGI0LjRhNGA0LjRgNCw0L0uINCU0LXRiNC40YTRgNC40YDQsNC90LXRgtC+INC80YMg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAuIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotItCf0L7RgtC+0LrRitGCINC1INGI0LjRhNGA0LjRgNCw0L0uINCU0LXRiNC40YTRgNC40YDQsNC90LXRgtC+INC80YMg0LUg0L3QtdCy0YrQt9C80L7QttC90L4sINC30LDRidC+0YLQviDQvdC1INC1INC/0L7QtNCw0LTQtdC9ICIKLSLQv9C+0LTRhdC+0LTRj9GJINC60LvRjtGHLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICLQndGP0LzQsCDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQs9GA0LXRiNC60LAg0LfQsCDQvtCx0LvQsNGB0YLRgtCwICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICLQndGP0LzQsCDRgdGC0LDQvdC00LDRgNGC0L3QviDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQs9GA0LXRiNC60LAg0LfQsCDQvtCx0LvQsNGB0YLRgtCwICVzINGBINC60L7QtCAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgItCY0LfQsdGA0LDQvdC40Y/RgiDRh9Cw0YHQvtCy0L3QuNC6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LIg0LrQvtC90LLQtdC50LXRgC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LrQtdGI0LAg0L3QsCDRgNC10LPQuNGB0YLRitGA0LAg0LIg4oCeJXPigJw6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgItC30LDQs9C70LDQstC40LUiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICLQv9C+0L/Rg9C70Y/RgNC90L4g0LfQsNCz0LvQsNCy0LjQtSIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICLQt9Cw0LPQu9Cw0LLQuNC1LCDQv9C+0LvQt9Cy0LAg0YHQtSDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLQv9C+0L/Rg9C70Y/RgNC90L4g0LfQsNCz0LvQsNCy0LjQtSwg0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICLQuNC30L/RitC70L3QuNGC0LXQuyIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAi0L7RgtCz0L7QstC+0YDQvdC40Lov0YbQuCDQt9CwINC30LDQv9C40YHQsCIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAi0LjQvNC1INC90LAg0LjQt9C/0YrQu9C90LjRgtC10LssINC/0L7Qu9C30LLQsCDRgdC1INC/0YDQuCDQv9C+0LTRgNC10LbQtNCw0L3QtSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi0L7RgtCz0L7QstC+0YDQvdC40Lov0YbQuCDQt9CwINC30LDQv9C40YHQsCwg0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgItCw0LvQsdGD0LwiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAi0LDQu9Cx0YPQvCDRgdGK0LTRitGA0LbQsNGJINGC0LXQt9C4INC00LDQvdC90LgiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAi0LDQu9Cx0YPQvCwg0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgItCw0LvQsdGD0Lwg0YHRitC00YrRgNC20LDRiSDRgtC10LfQuCDQtNCw0L3QvdC4LCDQv9C+0LvQt9Cy0LAg0YHQtSDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgItC40LfQv9GK0LvQvdC40YLQtdC7INC90LAg0LDQu9Cx0YPQvCIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAi0LjQt9C/0YrQu9C90LjRgtC10Lsg0L3QsCDRhtC10LvQuNGPINCw0LvQsdGD0LwsINC/0L7Qu9C30LLQsCDRgdC1INC/0YDQuCDQv9C+0LrQsNC30LLQsNC90LUiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgItC40LfQv9GK0LvQvdC40YLQtdC7INC90LAg0LDQu9Cx0YPQvCwg0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICLQuNC30L/RitC70L3QuNGC0LXQuyDQvdCwINGG0LXQu9C40Y8g0LDQu9Cx0YPQvCwg0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAi0LTQsNGC0LAiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgItC00LDRgtCwINC90LAg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LTQsNC90L3QuNGC0LUgKNC60LDRgtC+INGB0YLRgNGD0LrRgtGD0YDQsCBHRGF0ZSkiCi0KLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAi0LzQvtC80LXQvdGCIgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICLQvNC+0LzQtdC90YIg0L3QsCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQtNCw0L3QvdC40YLQtSAo0LrQsNGC0L4g0YHRgtGA0YPQutGC0YPRgNCwIEdzdERhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICLQttCw0L3RgCIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICLQttCw0L3RgCDQvdCwINGC0LXQt9C4INC00LDQvdC90LgiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICLQutC+0LzQtdC90YLQsNGAIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgItGB0LLQvtCx0L7QtNC10L0g0YLQtdC60YHRgiDQvtGC0L3QvtGB0L3QviDQtNCw0L3QvdC40YLQtSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgItC00L7Qv9GK0LvQvdC40YLQtdC70LXQvSDQutC+0LzQtdC90YLQsNGAIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0i0YHQstC+0LHQvtC00LXQvSDRgtC10LrRgdGCINC+0YLQvdC+0YHQvdC+INC00LDQvdC90LjRgtC1INCy0YrQsiDRhNC+0YDQvNCw0YIg0LrQu9GO0Yc90YHRgtC+0LnQvdC+0YHRgiDQuNC70LggIgotItC60LvRjtGHW9C10LfQuNC6XT3QutC+0LzQtdC90YLQsNGAIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICLQvdC+0LzQtdGAINC90LAg0L/QtdGB0LXQvdGC0LAiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAi0L3QvtC80LXRgCDQvdCwINC/0LXRgdC10L3RgtCwINCyINC60L7Qu9C10LrRhtC40Y8iCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAi0LHRgNC+0Lkg0L/QtdGB0L3QuCIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgItCx0YDQvtC5INC/0LXRgdC90LjRgtC1INCyINC60L7Qu9C10LrRhtC40Y/RgtCwLCDQutGK0Lwg0LrQvtGP0YLQviDQv9GA0LjQvdCw0LTQu9C10LbQuCDRgtCw0LfQuCDQv9C10YHQtdC9IgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgItC90L7QvNC10YAg0L3QsCDQtNC40YHQutCwIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAi0L3QvtC80LXRgCDQvdCwINC00LjRgdC60LAg0L7RgiDQutC+0LvQtdC60YbQuNGPIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAi0LHRgNC+0Lkg0LTQuNGB0LrQvtCy0LUiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAi0LHRgNC+0Lkg0LTQuNGB0LrQvtCy0LUg0LIg0LrQvtC70LXQutGG0LjRjywg0LrRitC8INC60L7Rj9GC0L4g0L/RgNC40L3QsNC00LvQtdC20Lgg0YLQvtC30Lgg0LTQuNGB0LoiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAi0LDQtNGA0LXRgSIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0i0J/RgNC+0LjQt9GF0L7QtCDQvdCwINC80LXQtNC40Y/RgtCwINC60LDRgtC+INCw0LTRgNC10YEgKNC80Y/RgdGC0L7RgtC+INCyINCY0L3RgtC10YDQvdC10YIsINC+0YLQutGK0LTQtdGC0L4g0LUg0L7RgNC40LPQuNC90LDQu9C90LjRj9GCICIKLSLRhNCw0LnQuykiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAi0YHQsNC50YIiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICLQodGC0YDQsNC90LjRhtCwINCyINCY0L3RgtC10YDQvdC10YIg0LfQsCDRgtCw0LfQuCDQvNC10LTQuNGPICjQvdCw0L/RgC4g0YHQsNC50YIg0L3QsCDQuNC30L/RitC70L3QuNGC0LXQuyDQuNC70Lgg0YTQuNC70LwpIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgItC+0L/QuNGB0LDQvdC40LUiCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgItC60YDQsNGC0YrQuiDRgtC10LrRgdGCIOKAlCDRgdGK0LTRitGA0LbQsNC90LjQtSIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgItCy0LXRgNGB0LjRjyIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICLQstC10YDRgdC40Y8g0L3QsCDRgtC10LfQuCDQtNCw0L3QvdC4IgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC10L0sINC80LXQttC00YPQvdCw0YDQvtC00LXQvSDQutC+0LQg0L3QsCDQt9Cw0L/QuNGBIOKAlCBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICLQvtGA0LPQsNC90LjQt9Cw0YbQuNGPIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICLQsNCy0YLQvtGA0YHQutC4INC/0YDQsNCy0LAiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLQvtC30L3QsNGH0LXQvdC40LUg0L3QsCDQsNCy0YLQvtGA0YHQutC40YLQtSDQv9GA0LDQstCwINC90LAg0LTQsNC90L3QuNGC0LUiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICLQsNC00YDQtdGBINC30LAg0LDQstGC0L7RgNGB0LrQuCDQv9GA0LDQstCwIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLQsNC00YDQtdGBINC90LAg0L7Qt9C90LDRh9C10L3QuNC10YLQviDQvdCwINCw0LLRgtC+0YDRgdC60LjRgtC1INC/0YDQsNCy0LAg0L3QsCDQtNCw0L3QvdC40YLQtSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgItC60L7QtNC40YDQsNC90L4g0L7RgiIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgItC40LzQtSDQvdCwINGH0L7QstC10LrQsCDQuNC70Lgg0L7RgNCz0LDQvdC40LfQsNGG0LjRj9GC0LAg0LjQt9Cy0YrRgNGI0LLQsNGJ0Lgg0LrQvtC00LjRgNCw0L3QtdGC0L4iCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICLQutC+0L3RgtCw0LrRgiIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgItC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0LrQvtC90YLQsNC60YIiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICLQu9C40YbQtdC90LciCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgItC70LjRhtC10L3QtyDQvdCwINC00LDQvdC90LjRgtC1IgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgItCw0LTRgNC10YEg0L3QsCDQu9C40YbQtdC90LfQsCIKLQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAi0LDQtNGA0LXRgSDQvdCwINC70LjRhtC10L3Qt9CwINC90LAg0LTQsNC90L3QuNGC0LUiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgItC40LfQv9GK0LvQvdC40YLQtdC7IgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgItC60L7QuSDQuNC30L/RitC70L3Rj9Cy0LAg0LTQsNC90L3QuNGC0LUiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAi0LrQvtC80L/QvtC30LjRgtC+0YAiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgItC60L7QvNC/0L7Qt9C40YLQvtGAL9C4INC90LAg0LfQsNC/0LjRgdCwIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICLQv9GA0L7QtNGK0LvQttC40YLQtdC70L3QvtGB0YIiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAi0L/RgNC+0LTRitC70LbQuNGC0LXQu9C90L7RgdGCINCyINC10LTQuNC90LjRhtC4INC90LAgR1N0cmVhbWVyICjQvdCw0L3QvtGB0LXQutGD0L3QtNC4KSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICLQutC+0LTQtdGAIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLQutC+0LTQtdGALCDRh9GA0LXQtyDQutC+0LnRgtC+INGB0LAg0YHRitGF0YDQsNC90LXQvdC4INC00LDQvdC90LjRgtC1IgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgItCy0LjQtNC10L4g0LrQvtC00LXRgCIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi0LrQvtC00LXRgCwg0YfRgNC10Lcg0LrQvtC50YLQviDRgdCwINGB0YrRhdGA0LDQvdC10L3QuCDQstC40LTQtdC+INC00LDQvdC90LjRgtC1IgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgItCw0YPQtNC40L4g0LrQvtC00LXRgCIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi0LrQvtC00LXRgCwg0YfRgNC10Lcg0LrQvtC50YLQviDRgdCwINGB0YrRhdGA0LDQvdC10L3QuCDQsNGD0LTQuNC+INC00LDQvdC90LjRgtC1IgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgItC60L7QtNC10YAg0LfQsCDRgdGD0LHRgtC40YLRgNC40YLQtSIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi0LrQvtC00LXRgCwg0YfRgNC10Lcg0LrQvtC50YLQviDRgdCwINGB0YrRhdGA0LDQvdC10L3QuCDQtNCw0L3QvdC40YLQtSDQvdCwINGB0YPQsdGC0LjRgtGA0LjRgtC1IgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQutC+0L3RgtC10LnQvdC10YDQsCIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLRhNC+0YDQvNCw0YIg0L3QsCDQutC+0L3RgtC10LnQvdC10YDQsCwg0LIg0LrQvtC50YLQviDRgdCwINGB0YrRhdGA0LDQvdC10L3QuCDQtNCw0L3QvdC40YLQtSIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgItGB0LrQvtGA0L7RgdGCINC90LAg0LHQuNGC0L7QstC10YLQtSIKLQotbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgItGC0L7Rh9C90LAg0LjQu9C4INGD0YHRgNC10LTQvdC10L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgItC90L7QvNC40L3QsNC70L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLQvdC+0LzQuNC90LDQu9C90LAg0YHQutC+0YDQvtGB0YIg0L3QsCDQsdC40YLQvtCy0LXRgtC1INCyIGJwcyIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAi0LzQuNC90LjQvNCw0LvQvdCwINGB0LrQvtGA0L7RgdGCINC90LAg0LHQuNGC0L7QstC10YLQtSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgItC80LjQvdC40LzQsNC70L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUg0LIgYnBzIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70L3QsCDRgdC60L7RgNC+0YHRgiDQvdCwINCx0LjRgtC+0LLQtdGC0LUg0LIgYnBzIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAi0LrQvtC00LXRgCIKLQotbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgItC60L7QtNC10YAsINGH0YDQtdC3INC60L7QudGC0L4g0LUg0LrQvtC00LjRgNCw0L0g0YLQvtC30Lgg0L/QvtGC0L7QuiIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAi0LLQtdGA0YHQuNGPINC90LAg0LrQvtC00LXRgNCwIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0LLQtdGA0YHQuNGPINC90LAg0LrQvtC00LXRgNCwLCDRh9GA0LXQtyDQutC+0LnRgtC+INC1INC60L7QtNC40YDQsNC9INGC0L7Qt9C4INC/0L7RgtC+0LoiCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgItGB0LXRgC4g4oSWIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAi0YHQtdGA0LjQtdC9INC90L7QvNC10YAg0L3QsCDQv9C10YHQtdC90YLQsCIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAi0YPRgdC40LvQstCw0L3QtSDQvdCwINC/0LXRgdC10L3RgtCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtSIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgItGD0YHQuNC70LLQsNC90LUg0L3QsCDQv9C10YHQtdC90YLQsCDQsiBkYiIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C90L4g0YPRgdC40LvQstCw0L3QtSDQvdCwINC/0LXRgdC10L3RgtCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70L3QviDRg9GB0LjQu9Cy0LDQvdC1INC90LAg0L/QtdGB0LXQvdGC0LAiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgItGD0YHQuNC70LLQsNC90LUg0L3QsCDQsNC70LHRg9C80LAg0L/RgNC4INC40LfQv9GK0LvQvdC10L3QuNC1IgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAi0YPRgdC40LvQstCw0L3QtSDQvdCwINCw0LvQsdGD0LzQsCDQsiBkYiIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C90L4g0YPRgdC40LvQstCw0L3QtSDQvdCwINCw0LvQsdGD0LzQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAi0LzQsNC60YHQuNC80LDQu9C90L4g0YPRgdC40LvQstCw0L3QtSDQvdCwINCw0LvQsdGD0LzQsCIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICLQtdGC0LDQu9C+0L3QvdC+INC80LDQutGB0LjQvNCw0LvQvdC+INGD0YHQuNC70LLQsNC90LUg0L3QsCDQv9C10YHQtdC90YLQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICLQtdGC0LDQu9C+0L3QvdC+INC90LjQstC+INC90LAg0YPRgdC40LvQstCw0L3QtdGC0L4g0L3QsCDQv9C10YHQvdC40YLQtSDQuCDQsNC70LHRg9C80LjRgtC1IgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAi0LXQt9C40LrQvtCyINC60L7QtCIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgItC10LfQuNC60L7QstC40Y/RgiDQutC+0LQg0L3QsCDRgtC+0LfQuCDQv9C+0YLQvtC6INGB0L/QvtGA0LXQtCBJU08tNjM5LTEg0LjQu9C4IElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgItC40LzQtSDQvdCwINC10LfQuNC60LAiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAi0YHQstC+0LHQvtC00L3QviDQuNC80LUg0L3QsCDQtdC30LjQutCwINC90LAg0L/QvtGC0L7QutCwIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgItC40LfQvtCx0YDQsNC20LXQvdC40LUiCi0KLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICLQuNC30L7QsdGA0LDQttC10L3QuNC1INGB0LLRitGA0LfQsNC90L4g0YEg0YLQvtC30Lgg0L/QvtGC0L7QuiIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAi0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDQt9CwINC/0YDQtdCz0LvQtdC0IgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICLQuNC30L7QsdGA0LDQttC10L3QuNC1INC30LAg0L/RgNC10LPQu9C10LQg0YHQstGK0YDQt9Cw0L3QviDRgSDRgtC+0LfQuCDQv9C+0YLQvtC6IgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAi0L/RgNC40YLRg9GA0LrQsCIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgItGE0LDQudC7INC/0YDQuNC60LDRh9C10L0g0LrRitC8INGC0L7Qt9C4INC/0L7RgtC+0LoiCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICLRgtCw0LrRgtCwINCyINC80LjQvdGD0YLQsCIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICLQsdGA0L7QuSDRgtCw0LrRgtC+0LLQtSDQsiDQvNC40L3Rg9GC0LAg0LIg0LDRg9C00LjQviIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICLQutC70Y7Rh9C+0LLQuCDQtNGD0LzQuCIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICLQutC70Y7Rh9C+0LLQuCDQtNGD0LzQuCDQt9CwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviwg0YDQsNC30LTQtdC70LXQvdC4INGB0YrRgSDQt9Cw0L/QtdGC0LDQuCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICLQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1IgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgItGA0LDQt9Cx0LjRgNCw0LXQvNC+INC+0L/QuNGB0LDQvdC40LUg0L3QsCDQvNGP0YHRgtC+0YLQviDQvdCwINC30LDQv9C40YEg0LjQu9C4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC80LXQtNC40Y/RgtCwIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICLQs9C10L7Qs9GA0LDRhNGB0LrQsCDRiNC40YDQuNC90LAiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSLQs9C10L7Qs9GA0LDRhNGB0LrQsCDRiNC40YDQuNC90LAg0L3QsCDQvNGP0YHRgtC+0YLQviDQvdCwINC30LDQv9C40YEg0LjQu9C4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC80LXQtNC40Y/RgtCwINCyINCz0YDQsNC00YPRgdC4ICIKLSLRgdC/0L7RgNC10LQgV0dTODQgKDAg0L/RgNC4INC10LrQstCw0YLQvtGA0LAsINC+0YLRgNC40YbQsNGC0LXQu9C90LAg0LIg0Y7QttC90L7RgtC+INC/0L7Qu9GD0LrRitC70LHQvikiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICLQs9C10L7Qs9GA0LDRhNGB0LrQsCDQtNGK0LvQttC40L3QsCIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSLQs9C10L7Qs9GA0LDRhNGB0LrQsCDQtNGK0LvQttC40L3QsCDQvdCwINC80Y/RgdGC0L7RgtC+INC90LAg0LfQsNC/0LjRgSDQuNC70Lgg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LzQtdC00LjRj9GC0LAg0LIg0LPRgNCw0LTRg9GB0LggIgotItGB0L/QvtGA0LXQtCBXR1M4NCAoMCDQv9GA0Lgg0JPRgNC40L3Rg9C40YcsINCS0LXQu9C40LrQvtCx0YDQuNGC0LDQvdC40Y8sINC+0YLRgNC40YbQsNGC0LXQu9C90LAg0LIg0LfQsNC/0LDQtNC90L7RgtC+ICIKLSLQv9C+0LvRg9C60YrQu9Cx0L4pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAi0L3QsNC00LzQvtGA0YHQutCwINCy0LjRgdC+0YfQuNC90LAiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0i0L3QsNC00LzQvtGA0YHQutCwINCy0LjRgdC+0YfQuNC90LAg0L3QsCDQvNGP0YHRgtC+0YLQviDQvdCwINC30LDQv9C40YEg0LjQu9C4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC80LXQtNC40Y/RgtCwINCyINC80LXRgtGA0LggIgotItGB0L/QvtGA0LXQtCBXR1M4NCAoMCDQv9GA0Lgg0YHRgNC10LTQvdC+0YLQviDQvNC+0YDRgdC60L4g0YDQsNCy0L3QuNGJ0LUpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgItC00YrRgNC20LDQstCwINC/0L4g0LrQvtC+0YDQtNC40L3QsNGC0LgiCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAi0LTRitGA0LbQsNCy0LDRgtCwINC90LAg0LfQsNC/0LjRgSDQuNC70Lgg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LzQtdC00LjRj9GC0LAgKNC90LAg0LDQvdCz0LvQuNC50YHQutC4KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICLQs9GA0LDQtCDQv9C+INC60L7QvtGA0LTQuNC90LDRgtC4IgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgItCz0YDQsNC0INC90LAg0LfQsNC/0LjRgSDQuNC70Lgg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LzQtdC00LjRj9GC0LAgKNC90LAg0LDQvdCz0LvQuNC50YHQutC4KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAi0LrQstCw0YDRgtCw0Lsg0L/QviDQutC+0L7RgNC00LjQvdCw0YLQuCIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICLQvNGP0YHRgtC+INCyINCz0YDQsNC00LAg0L3QsCDQt9Cw0L/QuNGBINC40LvQuCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvNC10LTQuNGP0YLQsCAo0L3QsNC/0YAuINC60LLQsNGA0YLQsNC7KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICLRhdC+0YDQuNC30L7QvdGC0LDQu9C90LAg0LPRgNC10YjQutCwINC/0L4g0LrQvtC+0YDQtNC40L3QsNGC0LgiCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAi0L7Rh9Cw0LrQstCw0L3QsCDQs9GA0LXRiNC60LAg0L/QviDRhdC+0YDQuNC30L7QvdGC0LDQuyAo0LIg0LzQtdGC0YDQuCkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgItGB0LrQvtGA0L7RgdGCINC/0L4g0LrQvtC+0YDQtNC40L3QsNGC0LgiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgItGB0LrQvtGA0L7RgdGCINC90LAg0LTQstC40LbQtdC90LjQtSDQvdCwINCy0YXQvtC00L3QvtGC0L4g0YPRgdGC0YDQvtC50YHRgtCy0L4g0L/RgNC4INC30LDQv9C40YHQsCBbbS9zXSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgItC/0L7RgdC+0LrQsCDQvdCwINC00LLQuNC20LXQvdC40LUg0L/QviDQutC+0L7RgNC00LjQvdCw0YLQuCIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotItC/0L7RgdC+0LrQsCDQvdCwINC00LLQuNC20LXQvdC40LUg0L3QsCDQstGF0L7QtNC90L7RgtC+INGD0YHRgtGA0L7QudGB0YLQstC+INC/0YDQuCDQt9Cw0L/QuNGB0LAuINCh0YLQvtC50L3QvtGB0YLRgtCwINC1INCyINCz0YDQsNC00YPRgdC4ICIKLSLQsiDQtNC10YHQtdGC0LjRh9C90L4g0L/RgNC10LTRgdGC0LDQstGP0L3QtS4gMCDQtSDQs9C10L7Qs9GA0LDRhNGB0LrQuNGP0YIg0YHQtdCy0LXRgC4g0KHRgtC+0LnQvdC+0YHRgtGC0LAg0YDQsNGB0YLQtSDQv9C+INC/0L7RgdC+0LrQsCAiCi0i0L3QsCDRh9Cw0YHQvtCy0L3QuNC60L7QstCw0YLQsCDRgdGC0YDQtdC70LrQsCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAi0L/QvtGB0L7QutCwINC90LAg0LfQsNGB0L3QtdC80LDQvdC1INC/0L4g0LrQvtC+0YDQtNC40L3QsNGC0LgiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSLQv9C+0YHQvtC60LAg0L3QsCDQstGF0L7QtNC90L7RgtC+INGD0YHRgtGA0L7QudGB0YLQstC+INC/0YDQuCDQt9Cw0L/QuNGB0LAuINCh0YLQvtC50L3QvtGB0YLRgtCwINC1INCyINCz0YDQsNC00YPRgdC4INCyINC00LXRgdC10YLQuNGH0L3QviAiCi0i0L/RgNC10LTRgdGC0LDQstGP0L3QtS4gMCDQtSDQs9C10L7Qs9GA0LDRhNGB0LrQuNGP0YIg0YHQtdCy0LXRgC4g0KHRgtC+0LnQvdC+0YHRgtGC0LAg0YDQsNGB0YLQtSDQv9C+INC/0L7RgdC+0LrQsCDQvdCwICIKLSLRh9Cw0YHQvtCy0L3QuNC60L7QstCw0YLQsCDRgdGC0YDQtdC70LrQsCIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICLQuNC80LUg0L3QsCDRiNC+0YMiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICIiCi0i0JjQvNC10YLQviDQvdCwINGC0LXQu9C10LLQuNC30LjQvtC90L3QviDQuNC70Lgg0JjQvdGC0LXRgNC90LXRgiDRiNC+0YMsINC/0L7RgNC10LTQuNGG0LAg0L7RgiDRgdC10YDQuNC4LCDQvtGCINC60L7QtdGC0L4g0LUg0LzQtdC00LjRj9GC0LAiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgItC40LzQtSDQvdCwINGI0L7RgyDQt9CwINC/0L7QtNGA0LXQttC00LDQvdC1IgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0i0JjQvNC10YLQviDQvdCwINGC0LXQu9C10LLQuNC30LjQvtC90L3QviDQuNC70Lgg0JjQvdGC0LXRgNC90LXRgiDRiNC+0YMsINC/0L7RgNC10LTQuNGG0LAg0L7RgiDRgdC10YDQuNC4LCDQvtGCINC60L7QtdGC0L4g0LUgIgotItC80LXQtNC40Y/RgtCwLCDQv9C+0LvQt9Cy0LAg0YHQtSDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAi0L3QvtC80LXRgCDQvdCwINC10L/QuNC30L7QtNCwIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgItCd0L7QvNC10YDRitGCINC90LAg0LXQv9C40LfQvtC00LAg0LIg0L/QvtGA0LXQtNC40YbQsNGC0LAg0LfQsCDRgdC10LfQvtC90LAiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICLQvdC+0LzQtdGAINC90LAg0YHQtdC30L7QvdCwIgotCi1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgItCd0L7QvNC10YDRitGCINC90LAg0YHQtdC30L7QvdCwINCyINC/0L7RgNC10LTQuNGG0LDRgtCwLCDQvtGCINC60L7Rj9GC0L4g0LUg0LzQtdC00LjRj9GC0LAiCi0KLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgItGC0LXQutGB0YIiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgItCi0LXQutGB0YLRitGCINC90LAg0LzQtdC00LjRj9GC0LAsINGH0LXRgdGC0L4g0YHQtSDQuNC30L/QvtC70LfQstCwINC30LAg0L/QtdGB0L3QuCIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICLQutC+0LzQv9C+0LfQuNGC0L7RgCDQv9GA0Lgg0L/QvtC00YDQtdC20LTQsNC90LUiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLQmtC+0LzQv9C+0LfQuNGC0L7RgC/QuCDQt9CwINC30LDQv9C40YHQsCwg0L/QvtC70LfQstCwINGB0LUg0L/RgNC4INC/0L7QtNGA0LXQttC00LDQvdC1IgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgItCz0YDRg9C/0LjRgNCw0L3QtSIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotItCh0LHQuNGA0LAg0LIg0LXQtNC90LAg0LPRgNGD0L/QsCDQv9GA0L7QuNC30LLQtdC00LXQvdC40LUsINC60L7QtdGC0L4g0LUg0L7RgiDQvdGP0LrQvtC70LrQviDRh9Cw0YHRgtC4LCDQvdCw0L/RgC4g0YfQsNGB0YLQuNGC0LUg0L3QsCAiCi0i0LrQvtC90YbQtdGA0YIuINCi0L7QstCwINC90LjQstC+INC1INC/0L4t0LLQuNGB0L7QutC+INC+0YIg0L/QtdGB0LXQvSwg0L3QviDQv9C+LdC90LjRgdC60L4g0L7RgiDQsNC70LHRg9C8LiIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICLQvtGG0LXQvdC60LAiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotItCe0YbQtdC90LrQsCDRgdC/0L7RgNC10LQg0L/QvtGC0YDQtdCx0LjRgtC10LvRjy4g0J/Qvi3QstC40YHQvtC60LAg0YHRgtC+0LnQvdC+0YHRgiDQvtC30L3QsNGH0LDQstCwINC/0L4t0YHQuNC70L3QviDQv9GA0LXQtNC/0L7Rh9C40YLQsNC90LjQtSIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgItC/0YDQvtC40LfQstC+0LTQuNGC0LXQuyDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+IgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAi0J/RgNC+0LjQt9Cy0L7QtNC40YLQtdC7INC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+LCDRgSDQutC+0LXRgtC+INC1INGB0YrQt9C00LDQtNC10L3QsCDQvNC10LTQuNGP0YLQsCIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAi0LzQvtC00LXQuyDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+IgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLQnNC+0LTQtdC7INC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+LCDRgSDQutC+0LXRgtC+INC1INGB0YrQt9C00LDQtNC10L3QsCDQvNC10LTQuNGP0YLQsCIKLQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgItC40LzQtSDQvdCwINC/0YDQvtCz0YDQsNC80LAiCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgItCf0YDQvtCz0YDQsNC80LDRgtCwLCDRgSDQutC+0LXRgtC+INC1INGB0YrQt9C00LDQtNC10L3QsCDQvNC10LTQuNGP0YLQsCIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgItC00LDQvdC90Lgg0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgItCf0YDQvtC40LfQstC+0LvQvdC4INC00LDQvdC90Lgg0L7RgiDQv9GA0L7Qs9GA0LDQvNCwLCDQv9C+0YHRgtCw0LLQtdC90Lgg0LIg0LzQtdC00LjRj9GC0LAiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAi0L7RgNC40LXQvdGC0LDRhtC40Y8iCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgItCa0LDQuiDQtNCwINGB0LUg0LfQsNCy0YrRgNGC0Lgg0LjQt9C+0LHRgNCw0LbQtdC90LjQtdGC0L4g0L/RgNC4INC/0L7QutCw0LfQstCw0L3QtSIKLQotbXNnaWQgInB1Ymxpc2hlciIKLW1zZ3N0ciAi0LjQt9C00LDRgtC10LsiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgItCY0LzQtdGC0L4g0L3QsCDQuNC30LTQsNGC0LXQu9GPINC40LvQuCDQuNC30LTQsNGC0LXQu9GB0LrQsNGC0LAg0LrRitGJ0LAiCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAi0LjQvdGC0LXRgNC/0YDQtdGC0LjRgNCw0L3QviDQvtGCIgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgItCY0L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YXQvtGA0LDRgtCwINGB0YrQt9C00LDQu9C4INGA0LXQvNC40LrRgSDQuNC70Lgg0LTRgNGD0LPQsCDQuNC90YLQtdGA0L/RgNC10YLQsNGG0LjRjyIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICLQvdC+0YLQsCDQt9CwIG1pZGkiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgItCd0L7QvNC10YAg0L3QsCDQvdC+0YLQsNGC0LAg0L/QviBNaWRpINC30LAg0L/QtdGB0LXQvdGC0LAiCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgItGB0L7QsdGB0YLQstC10L3QuCDQtNCw0L3QvdC4IgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICLQodC+0LHRgdGC0LLQtdC90Lgg0LTQsNC90L3QuCIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICLQndGP0LzQsCDQvNC+0LTRg9C7INC30LAg0L7QsdGA0LDQsdC+0YLQutCwINC90LAg0L/RgNC+0YLQvtC60L7Qu9CwIOKAniVz4oCcIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICLQodGF0LXQvNCw0YLQsCDigJ4lc+KAnCDQsiDQsNC00YDQtdGB0LAg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAi0JPQoNCV0KjQmtCQOiDQvtGCINC10LvQtdC80LXQvdGCICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotItCU0L7Qv9GK0LvQvdC40YLQtdC70L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LPRgNC10YjQutC4OlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAi0LLRgNGK0LfQutCwINCx0LXQtyDQuNC30YLQvtGH0L3QuNC6IFtzaW5rPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICLQstGA0YrQt9C60LAg0LHQtdC3INC/0YDQuNC10LzQvdC40LogW3NvdXJjZT0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICLQtdC70LXQvNC10L3RgtGK0YIg4oCeMiQlc+KAnCDQvdGP0LzQsCDRgdCy0L7QudGB0YLQstC+0YLQviDigJ4xJCVz4oCcIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAi0YHQstC+0LnRgdGC0LLQvtGC0L4g4oCeJXPigJwg0L3QsCDQtdC70LXQvNC10L3RgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQtNCw0LTQtSDQtNCwINC1IOKAniVz4oCcIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LvQvtC20LXQvdC+INGB0LLRitGA0LfQstCw0L3QtS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIiVzINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0LLRitGA0LbQtSDQutGK0LwgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgItC10LvQtdC80LXQvdGC0YrRgiDigJ4lc+KAnCDQu9C40L/RgdCy0LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDRg9C60LDQt9Cw0YLQtdC7IOKAniVz4oCcIOKAlCDQv9GA0LXRgdC60LDRh9CwINGB0LUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0YPQutCw0LfQsNGC0LXQuyDQt9CwINC00L7Qv9GK0LvQstCw0L3QtSDigJ4lc+KAnCDigJQg0L/RgNC10YHQutCw0YfQsCDRgdC1IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAi0LLRitC30LzQvtC20L3QvtGB0YLQuNGC0LUg4oCeJXPigJwg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQsNC90LDQu9C40LfQuNGA0LDQvdC4IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAi0L3Rj9C80LAg0LXQu9C10LzQtdC90YIt0L/RgNC40LXQvNC90LjQuiDQt9CwINCw0LTRgNC10YEg4oCeJXPigJwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgItC90Y/QvNCwINC10LvQtdC80LXQvdGCLdC40LfRgtC+0YfQvdC40Log0LfQsCDQsNC00YDQtdGBIOKAniVz4oCcIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICLRgdC40L3RgtCw0LrRgtC40YfQvdCwINCz0YDQtdGI0LrQsCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgItGD0LrQsNC30LDQvSDQtSDQv9GA0LDQt9C10L0g0YDQtdC30LXRgNCy0L7QsNGAIOKAniVz4oCcLCDRgtC+0LLQsCDQtSDQt9Cw0LHRgNCw0L3QtdC90L4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICLQvdGP0LzQsCDRgNC10LfQtdGA0LLQvtCw0YAg0L3QsCDQuNC80LUg4oCeJXPigJwsINC10LvQtdC80LXQvdGC0LjRgtC1INGB0LUg0YDQsNC30L/QsNC60LXRgtC40YDQsNGCIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgItC90LUg0LUg0L/QvtC30LLQvtC70LXQvSDQv9GA0LDQt9C10L0g0LrQvtC90LLQtdC50LXRgCIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICLQnNC90L7Qs9C+INCx0YPRhNC10YDQuCDRgdC1INC/0YDQvtC/0YPRgdC60LDRgi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgItCS0YrRgtGA0LXRiNC10L0g0L/RgNC+0LHQu9C10Lwg0L3QsCDQv9C+0YLQvtC60LAg0L7RgiDQtNCw0L3QvdC4LiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAg0L/QvtGC0L7QutCwINC+0YIg0LTQsNC90L3QuC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCi1tc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAg0YfQsNGB0L7QstC90LjQutCwLiIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0L7QvNC10YHRgtCy0LDQvdC1INC90LAg0LHRg9GE0LXRgNCwINCyINC/0LDQvNC10YLRgtCwLiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICLQktGK0LfQvNC+0LbQvdC+0YHRgtC4INC90LAg0YTQuNC70YLRitGAIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLSLQntCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0L3QsCDQv9C+0LfQstC+0LvQtdC90LjRgtC1INCy0YrQt9C80L7QttC90L7RgdGC0LggKOKAnk5VTEzigJwg0L7Qt9C90LDRh9Cw0LLQsCDQstGB0Y/QutCw0LrQstC4KS4gIgotItCX0LDQtNCw0LLQsNC90LXRgtC+INC90LAg0YLQvtCy0LAg0YHQstC+0LnRgdGC0LLQviDQv9C+0LXQvNCwINGD0LrQsNC30LDRgtC10Lsg0LrRitC8INC/0L7QtNCw0LTQtdC90LjRjyDQvtCx0LXQutGCIEdzdENhcHMuIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAi0KDQtdC20LjQvCDQvdCwINGB0LzRj9C90LAg0L3QsCDQstGK0LfQvNC+0LbQvdC+0YHRgtC40YLQtSIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgItCk0LjQu9GC0YDQuNGA0LDQvdC1INC90LAg0L/QvtCy0LXQtNC10L3QuNC10YLQviDQvdCwINGB0LzRj9C90LAg0L3QsCDQstGK0LfQvNC+0LbQvdC+0YHRgtC40YLQtSIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgItCd0LUg0LUg0YPQutCw0LfQsNC90LAg0LLRgNC10LzQtdC90L3QsCDQv9Cw0L/QutCwIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INCy0YDQtdC80LXQvdC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgItCk0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LfQsCDRh9C10YLQtdC90LUuIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBINCyINGB0LLQsNC70LXQvdC40Y8g0YTQsNC50LsuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0LUg0YPQutCw0LfQsNC90L4g0LjQvNC1INC90LAg0YTQsNC50Lsg0LfQsCDQt9Cw0L/QuNGBLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgItCk0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LfQsCDQt9Cw0L/QuNGBLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YLQstCw0YDRj9C90LXRgtC+INC90LAg0YTQsNC50LvQsCDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/QvtC30LjRhtC40L7QvdC40YDQsNC90LUg0LLRitCyINGE0LDQudC7IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGBINCy0YrQsiDRhNCw0LnQuyDigJ4lc+KAnC4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAi0J3QtSDQtSDRg9C60LDQt9Cw0L3QviDQuNC80LUg0L3QsCDRhNCw0LnQuyDQt9CwINGH0LXRgtC10L3QtS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICLigJ4lc+KAnCDQtSDQv9Cw0L/QutCwLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgItCk0LDQudC70YrRgiDigJ4lc+KAnCDQtSDQs9C90LXQt9C00L4uIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINGB0LvQtdC0INC30LDRj9Cy0LXQvdC40Y8g0LHRgNC+0Lkg0L/QvtCy0YLQvtGA0LXQvdC40Y8uIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAi0LLRitC30LzQvtC20L3QvtGB0YLQuCIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgItC30LDRgdC10YfQtdC90LjRgtC1INCy0YrQt9C80L7QttC90L7RgdGC0Lgg0L3QsCDQv9C+0YLQvtC60LAiCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICLQvNC40L3QuNC80YPQvCIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQstGK0LfQvNC+0LbQvdC+0YHRgtC4IgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQstGK0LfQvNC+0LbQvdC+0YHRgtC4INCx0LXQtyDRgtGK0YDRgdC10L3QtSDQvdCwINCy0LjQtNC+0LLQtdGC0LUiCi0KLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L3QtSDRgdGK0LTRitGA0LbQsCDQtNC+0YHRgtCw0YLRitGH0L3QviDQtNCw0L3QvdC4LiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L3QtSDRgdGK0LTRitGA0LbQsCDQvdC40LrQsNC60LLQuCDQtNCw0L3QvdC4IgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAi0KDQtdCw0LvQuNC30LjRgNCw0L3QuCDQuNC90YLQtdGA0YTQtdC50YHQuDpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICLRgSDQv9GA0LDQstCwINC30LAg0YfQtdGC0LXQvdC1IgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgItGBINC/0YDQsNCy0LAg0LfQsCDQt9Cw0L/QuNGBIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAi0LjQt9C+0YHRgtCw0LLQtdC9IgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICLQvNC+0LbQtSDQtNCwINGB0LUg0LrQvtC90YLRgNC+0LvQuNGA0LAiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiIgotItC80L7QttC1INC00LAg0YHQtSDQv9GA0L7QvNC10L3RjyDRgdCw0LzQviDQsiDRgdGK0YHRgtC+0Y/QvdC40Y/RgtCwIE5VTEwgKNC30LDQvdGD0LvRj9Cy0LDQvdC1KSwgUkVBRFkgKNCz0L7RgtC+0LLQvdC+0YHRgiksICIKLSJQQVVTRUQgKNC90LAg0L/QsNGD0LfQsCkg0LjQu9C4IFBMQVlJTkcgKNC40LfQv9GK0LvQvdC10L3QuNC1KSIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgIiIKLSLQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQsNC80L4g0LIg0YHRitGB0YLQvtGP0L3QuNGP0YLQsCBOVUxMICjQt9Cw0L3Rg9C70Y/QstCw0L3QtSksIFJFQURZICjQs9C+0YLQvtCy0L3QvtGB0YIpICIKLSLQuNC70LggUEFVU0VEICjQvdCwINC/0LDRg9C30LApIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgIiIKLSLQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQsNC80L4g0LIg0YHRitGB0YLQvtGP0L3QuNGP0YLQsCBOVUxMICjQt9Cw0L3Rg9C70Y/QstCw0L3QtSkg0LjQu9C4IFJFQURZICjQs9C+0YLQvtCy0L3QvtGB0YIpIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICLQl9Cw0LHRgNCw0L3QtdC90Lgg0YTQsNC50LvQvtCy0LU6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAi0J7QsdGJINCx0YDQvtC5OiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQg0LfQsNCx0YDQsNC90LXQvSDRhNCw0LnQuyIKLW1zZ3N0clsxXSAiJWQg0LfQsNCx0YDQsNC90LXQvdC4INGE0LDQudC70LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCDQv9GA0LjRgdGC0LDQstC60LAiCi1tc2dzdHJbMV0gIiVkINC/0YDQuNGB0YLQsNCy0LrQuCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCDQt9Cw0LHRgNCw0L3QtdC9INC30LDQv9C40YEiCi1tc2dzdHJbMV0gIiVkINC30LDQsdGA0LDQvdC10L3QuCDQt9Cw0L/QuNGB0LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkINGB0LLQvtC50YHRgtCy0L4iCi1tc2dzdHJbMV0gIiVkINGB0LLQvtC50YHRgtCy0LAiCi0KLW1zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCi1tc2dzdHIgItCe0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0LXQu9C10LzQtdC90YLQuCIKLQotbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHIgItCe0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgdGK0YEg0LfQsNCx0YDQsNC90LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0i0J7RgtC/0LXRh9Cw0YLQstCw0L3QtSDQvdCwINGB0L/QuNGB0YrQuiDRgSDQstGK0LfQvNC+0LbQvdC+0YHRgtC40YLQtSDQvdCwINGD0LrQsNC30LDQvdCw0YLQsCDQv9GA0LjRgdGC0LDQstC60LAg0LjQu9C4INCy0YHQuNGH0LrQuCAiCi0i0L/RgNC40YHRgtCw0LLQutC4LlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINCj0LTQvtCx0L3QviDQstGK0LIg0LLRgNGK0LfQutCwINGBINCy0YrQvdGI0L3QuCDQvNC10YXQsNC90LjQt9C80LggIgotItC30LAg0LDQstGC0L7QvNCw0YLQuNGH0L3QviDQuNC90YHRgtCw0LvQuNGA0LDQvdC1INC90LAg0L/RgNC40YHRgtCw0LLQutC4IgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICLQntGC0L/QtdGH0LDRgtCy0LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0L/RgNC40YHRgtCw0LLQutC40YLQtSIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC00LDQu9C4INC40LfQsdGA0LDQvdC40Y/RgiDQtdC70LXQvNC10L3RgiDQuNC70Lgg0L/RgNC40YHRgtCw0LLQutCwINGB0YrRidC10YHRgtCy0YPQstCw0YIiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0i0J/RgNC4INC/0YDQvtCy0LXRgNC60LDRgtCwINC30LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDQvdC1INC90LAg0LXQu9C10LzQtdC90YIg0LjQu9C4INC/0YDQuNGB0YLQsNCy0LrQsCDQtNCwINGB0LUg0L/RgNC+0LLQtdGA0Y/QstCwINC00LDQu9C4ICIKLSLQstC10YDRgdC40Y/RgtCwINC1INC80LjQvdC40LzRg9C8INGD0LrQsNC30LDQvdCw0YLQsCIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotItCe0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QsCDQv9C+0LTQtNGK0YDQttCw0L3QuNGC0LUg0YHRhdC10LzQuCDQt9CwINCw0LTRgNC10YHQuCBVUkksINC60LDQutGC0L4g0Lgg0LXQu9C10LzQtdC90YLQuNGC0LUg0YEg0YLRj9GF0L3QsCAiCi0i0YDQtdCw0LvQuNC30LDRhtC40Y8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgItCk0LDQudC70YrRgiDQvdCwINC/0YDQuNGB0YLQsNCy0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDRgNC10LTQtdC9OiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICLQndGP0LzQsCDRgtCw0LrRitCyINC10LvQtdC80LXQvdGCINC40LvQuCDQv9GA0LjRgdGC0LDQstC60LAg4oCeJXPigJxcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgItCh0YLQsNGC0LjRgdGC0LjQutCwINC90LAg0LjQvdC00LXQutGB0LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC+INC1INGB0YrQvtCx0YnQtdC90LjQtSAjJXUg0L7RgiDQtdC70LXQvNC10L3RgiDigJ4lc+KAnCAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgItCf0L7Qu9GD0YfQtdC90L4g0LUg0YHRitC+0LHRidC10L3QuNC1ICMldSDQvtGCINC00L7Qv9GK0LvQstCw0L3QtdGC0L4g4oCeJXM6JXPigJwgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC+INC1INGB0YrQvtCx0YnQtdC90LjQtSAjJXUg0L7RgiDQvtCx0LXQutGCIOKAniVz4oCcICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC+INC1INGB0YrQvtCx0YnQtdC90LjQtSAjJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAi0J/QvtC70YPRh9C10L0g0LUgRU9TICjQutGA0LDQuSDQvdCwINC/0L7RgtC+0LrQsCkg0L7RgiDQtdC70LXQvNC10L3RgiDigJ4lc+KAnC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLQntCi0JrQoNCY0KIg0JXQotCY0JrQldCiICAgICAgOiDQvtGC0LrRgNC40YIg0L7QutC+0LvQviDQtdC70LXQvNC10L3RgiDigJ4lc+KAnC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgItCe0KLQmtCg0JjQoiDQldCi0JjQmtCV0KIgICAgICA6INC+0YLQutGA0LjRgiDQvtC60L7Qu9C+INC00L7Qv9GK0LvQstCw0L3QtdGC0L4g4oCeJXM6JXPigJwuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICLQntCi0JrQoNCY0KIg0JXQotCY0JrQldCiICAgICAgOiDQvtGC0LrRgNC40YIg0L7QutC+0LvQviDQvtCx0LXQutGCIOKAniVz4oCcLlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgItCe0KLQmtCg0JjQoiDQldCi0JjQmtCV0KJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLQntCi0JrQoNCY0KLQniDQodCq0JTQqtCg0JbQkNCd0JjQlSA6INC+0YLQutGA0LjRgtC+INC+0LrQvtC70L4g0LXQu9C10LzQtdC90YIg4oCeJXPigJwuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICLQntCi0JrQoNCY0KLQniDQodCq0JTQqtCg0JbQkNCd0JjQlSA6INC+0YLQutGA0LjRgtC+INC+0LrQvtC70L4g0L7QsdC10LrRgiDigJ4lc+KAnC5cbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICLQntCi0JrQoNCY0KLQniDQodCq0JTQqtCg0JbQkNCd0JjQlVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSLQmNCd0KTQntCg0JzQkNCm0JjQrzpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0L7RgiDQtdC70LXQvNC10L3RgiAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICLQkdGD0YTQtdGA0LjRgNCw0L0sINC40LfRh9Cw0LrQstCwINGB0LUg0LfQsNCy0YrRgNGI0LLQsNC90LXRgtC+INC90LAg0LHRg9GE0LXRgNC40YDQsNC90LXRgtC+4oCmXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICLQkdGD0YTQtdGA0LjRgNCw0L0sINC40LfRh9Cw0LrQstCwINGB0LUg0LfQsNCy0YrRgNGI0LLQsNC90LXRgtC+4oCmXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgItCx0YPRhNC10YDQuNGA0LDQvdC14oCmIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAi0JHRg9GE0LXRgNC40YDQsNC90LXRgtC+INC30LDQstGK0YDRiNC4LCDQutC+0L3QstC10LnQtdGA0YrRgiDRgdC1INC00LDQstCwINC30LAg0JjQl9Cf0KrQm9Cd0JXQndCY0JXigKZcbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgItCR0YPRhNC10YDQuNGA0LDQvdC1LCDQutC+0L3QstC10LnQtdGA0YrRgiDRgdC1INC00LDQstCwINCd0JAg0J/QkNCj0JfQkOKAplxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAi0J/RgNC10YDQsNC30L/RgNC10LTQtdC70Y/QvdC1INC90LAg0LvQsNGC0LXQvdGC0L3QvtGB0YLRgtCw4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAi0JfQsNC00LDQstCw0L3QtSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCAlcyDQv9C+INC30LDRj9Cy0LrQsCDQvdCwICVz4oCmXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICLQn9GA0LXQutGK0YHQstCw0L3QtTog0JrQvtC90LLQtdC50LXRgNGK0YIg0YHQtSDRgdC/0LjRgNCw4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAi0J3QsNC/0YDQtdC00YrQujogKCVzKSAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAi0JvQuNC/0YHQstCw0Ykg0LXQu9C10LzQtdC90YI6IOKAniVz4oCcXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgItCf0L7Qu9GD0YfQtdC9INC1INC60L7QvdGC0LXQutGB0YIg0L7RgiDQtdC70LXQvNC10L3RgtCwIOKAniVz4oCcOiAlcz0lc1xuIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuNGC0LUgKNC80LXRgtCw0LTQsNC90L3QuNGC0LUpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+ICjQs9C70LDQstC4INC4INC40LfQtNCw0L3QuNGPKSIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjRjyDQt9CwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0Lgg0L/RgNC+0LzRj9C90LDRgtCwINC90LAg0YHQstC+0LnRgdGC0LLQsCIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgItCU0LAg0L3QtSDRgdC1INC40LfQstC10LbQtNCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L3QsNC/0YDQtdC00YrQutCwIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICLQmNC30YXQvtC00L3QuCDRgdGK0L7QsdGJ0LXQvdC40Y8iCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotItCR0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YPQutCw0LfQsNC90L7RgtC+INGB0LLQvtC50YHRgtCy0L4sINCw0LrQviDQtSAiCi0i0LLQutC70Y7Rh9C10L0g0L/QvtC00YDQvtCx0L3QuNGPINC40LfRhdC+0LQgKNC80L7QttC1INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0LzQvdC+0LPQviDQv9GK0YLQuCkiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICLQmNCc0JUt0J3QkC3QodCS0J7QmdCh0KLQktCeIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICLQlNCwINC90LUg0YHQtSDQuNC90YHRgtCw0LvQuNGA0LAg0LzQvtC00YPQuyDQt9CwINC+0LHRgNCw0LHQvtGC0LrQsCDQvdCwINCz0YDQtdGI0LrQuCIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiIgotItCf0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30LLQtdC20LTQsNC90LUg0L3QsCBFT1Mg0LfQsCDQuNC30YLQvtGH0L3QuNGG0LjRgtC1INC/0YDQtdC00Lgg0YHQv9C40YDQsNC90LXRgtC+INC90LAg0LrQvtC90LLQtdC50LXRgNCwIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICLQodGK0LHQuNGA0LDQvdC1INC4INC/0L7QutCw0LfQstCw0L3QtSDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCwINC30LAg0LjQvdC00LXQutGB0LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgItCT0KDQldCo0JrQkDog0LrQvtC90LLQtdC50LXRgNGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC60L7QvdGB0YLRgNGD0LjRgNCw0L06ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAi0JPQoNCV0KjQmtCQOiDQutC+0L3QstC10LnQtdGA0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LrQvtC90YHRgtGA0YPQuNGA0LDQvS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC60L7QvdCy0LXQudC10YAg0YEg0LPRgNC10YjQutC4OiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC90LUg0LUg0L7RgtC60YDQuNGCINC10LvQtdC80LXQvdGCINC30LAg0LrQvtC90LLQtdC50LXRgCDigJQg4oCecGlwZWxpbmXigJwuXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAi0JrQvtC90LLQtdC50LXRgNGK0YIg0YHQtSDQtNCw0LLQsCDQndCQINCf0JDQo9CX0JDigKZcbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgItCT0KDQldCo0JrQkDog0LrQvtC90LLQtdC50LXRgNGK0YIg0L3QtSDQuNC30L/RitC70L3Rj9Cy0LAg0LTQsNCy0LDQvdC10YLQviDQvdCwINC/0LDRg9C30LAuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgItCa0L7QvdCy0LXQudC10YDRitGCINGA0LDQsdC+0YLQuCDQuCDQvdC1INGB0LUg0L3Rg9C20LTQsNC1INC+0YIg0JHQo9Ck0JXQoNCY0KDQkNCd0JXigKZcbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgItCa0L7QvdCy0LXQudC10YDRitGCINGB0LUg0JHQo9Ck0JXQoNCY0KDQkOKAplxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC60L7QvdCy0LXQudC10YDRitGCINC90LUg0LjRgdC60LAg0LTQsCDQv9GA0LXQstGK0YDRgtC4INC90LDQv9GA0LXQtC5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAi0JrQvtC90LLQtdC50LXRgNGK0YIg0LUg0JHQo9Ck0JXQoNCY0KDQkNCd4oCmXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgItCa0L7QvdCy0LXQudC10YDRitGCINGB0LUg0LTQsNCy0LAg0LfQsCDQmNCX0J/QqtCb0J3QldCd0JjQleKAplxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgotbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC60L7QvdCy0LXQudC10YDRitGCINC90LUg0LjRgdC60LAg0LTQsCDQv9GA0L7RgNCw0LHQvtGC0LguXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAi0JLQutC70Y7Rh9C10L0g0LUgRU9TINC/0YDQuCDRgdC/0LjRgNCw0L3QtSDigJQg0LjQt9Cy0LXQttC00LDQvdC1INC90LAgRU9TINC/0L4g0LrQvtC90LLQtdC50LXRgNCwXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAi0JLQutC70Y7Rh9C10L0g0LUgRU9TINC/0YDQuCDRgdC/0LjRgNCw0L3QtSDigJQg0LjQt9Cy0LXQttC00LDQvdC1INC90LAgRU9TINGB0LvQtdC0INCz0YDQtdGI0LrQsFxuIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgItCY0LfRh9Cw0LrQstCw0L3QtSDQvdCwIEVPU+KAplxuIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAi0J/QvtC70YPRh9C10L0g0LUg0LrRgNCw0Lkg0L3QsCDQv9C+0YLQvtC6OiDQutC+0L3QstC10LnQtdGA0YrRgiDRgdC1INGB0L/QuNGA0LDigKZcbiIKLQotbXNnaWQgIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICLQn9GA0LXQutGK0YHQstCw0L3QtSDQv9GA0Lgg0LjQt9GH0LDQutCy0LDQvdC1OiDQutC+0L3QstC10LnQtdGA0YrRgiDRgdC1INGB0L/QuNGA0LDigKZcbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICLQktGK0LfQvdC40LrQvdCwINCz0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GH0LDQutCy0LDQvdC10YLQviDQvdCwIEVPU1xuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC10YLQviDQt9Cw0LLRitGA0YjQuCDRgdC70LXQtCAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAi0JrQvtC90LLQtdC50LXRgNGK0YIg0LUg0LIg0JPQntCi0J7QktCd0J7QodCi4oCmXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgItCa0L7QvdCy0LXQudC10YDRitGCINGB0LUg0JfQkNCd0KPQm9Cv0JLQkOKAplxuIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAi0JrQvtC90LLQtdC50LXRgNGK0YIg0YHQtSDQvtGB0LLQvtCx0L7QttC00LDQstCw4oCmXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgItGA0LXQt9C10YDQstC+0LDRgCIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAi0JLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAg0L3QsCDQv9C+0YLQvtC60LAg0L7RgiDQtNCw0L3QvdC4LiIKZGlmZiAtLWdpdCBhL3BvL2JvbGRxdW90LnNlZCBiL3BvL2JvbGRxdW90LnNlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5MzdhYS4uMDAwMDAwMAotLS0gYS9wby9ib2xkcXVvdC5zZWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKLXMvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKLXMvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCi1zLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCi1zL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCi1zL+KAnOKAnS8iIi9nCi1zL+KAnC/igJwbWzFtL2cKLXMv4oCdLxtbMG3igJ0vZwotcy/igJgv4oCYG1sxbS9nCi1zL+KAmS8bWzBt4oCZL2cKZGlmZiAtLWdpdCBhL3BvL2NhLmdtbyBiL3BvL2NhLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3ZmYzMC4uMDAwMDAwMAotLS0gYS9wby9jYS5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9jYS5wbyBiL3BvL2NhLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWRiNTA5Li4wMDAwMDAwCi0tLSBhL3BvL2NhLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTU3NyArMCwwIEBACi0jIENhdGFsYW4gdHJhbnNsYXRpb24gZm9yIGdzdHJlYW1lci4KLSMgQ29weXJpZ2h0IMKpIDIwMDQsIDIwMDUsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbmNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KLSMgSm9yZGkgTWFsbGFjaCA8am9yZGlAc2luZG9taW5pby5uZXQ+LCAyMDA0LCAyMDA1LCAyMDEwLgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzAuM1xuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTExLTA0IDE5OjQxKzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEpvcmRpIE1hbGxhY2ggPGpvcmRpQHNpbmRvbWluaW8ubmV0PlxuIgotIkxhbmd1YWdlLVRlYW06IENhdGFsYW4gPGNhQGRvZGRzLm5ldD5cbiIKLSJMYW5ndWFnZTogY2FcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uIT0xO1xuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJJbXByaW1laXggbGEgdmVyc2nDsyBkZSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiRmVzIGZhdGFscyB0b3RzIGVscyBhdmlzb3MiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiSW1wcmltZWl4IGxlcyBjYXRlZ29yaWVzIGRlIGRlcHVyYWNpw7MgZGlzcG9uaWJsZXMgaSBzdXJ0IgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIk5pdmVsbCBkZSBkZXB1cmFjacOzIHBlciBkZWZlY3RlIGRlcyBkZSAxIChub23DqXMgZXJyb3JzKSBhIDUgKHRvdCkgbyAwIHBlciBhICIKLSJjYXAgc29ydGlkYSIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJOSVZFTEwiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iTGxpc3RhIHNlcGFyYWRhIHBlciBjb21lcyBkZSBwYXJlbGxlcyBub21fY2F0ZWdvcmlhOm5pdmVsbCBwZXIgYSBlc3RhYmxpciAiCi0ibml2ZWxscyBlc3BlY8OtZmljcyBwZXIgYSBsZXMgY2F0ZWdvcmllcyBpbmRpdmlkdWFscy4gUGVyIGV4ZW1wbGU6ICIKLSJHU1RfQVVUT1BMVUc6NSwgR1NUX0VMRU1FTlRfKjozIgotCi1tc2dpZCAiTElTVCIKLW1zZ3N0ciAiTExJU1RBIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIkluaGFiaWxpdGEgbGEgc29ydGlkYSBkZSBkZXB1cmFjacOzIGNvbG9yZWphZGEiCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIkluaGFiaWxpdGEgbGEgZGVwdXJhY2nDsyIKLQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICJIYWJpbGl0YSBlbHMgZGlhZ27DsnN0aWNzIGRldGFsbGF0cyBkZSBjw6BycmVnYSBkZSBjb25uZWN0b3JzIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiQ2FtaW5zIHNlcGFyYXRzIHBlciBkb3MgcHVudHMgcXVlIGNvbnRlbmVuIGNvbm5lY3RvcnMiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiQ0FNSU5TIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIkxsaXN0YSBzZXBhcmFkYSBwZXIgY29tZXMgZGUgY29ubmVjdG9ycyBhIHByZWNhcnJlZ2FyIGEgbcOpcyBkZSBsYSBsbGlzdGEgIgotImVtbWFnYXR6ZW1hZGEgZW4gbGEgdmFyaWFibGUgZCdlbnRvcm4gR1NUX1BMVUdJTl9QQVRIIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiQ09OTkVDVE9SUyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSJJbmhhYmlsaXRhIGxhIGNhcHR1cmEgZGUgdmlvbGFjaW9ucyBkZSBzZWdtZW50IGR1cmFudCBsYSBjw6BycmVnYSBkZSAiCi0iY29ubmVjdG9ycyIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJJbmhhYmlsaXRhIGwnYWN0dWFsaXR6YWNpw7MgZGVsIHJlZ2lzdHJlIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotIkluaGFiaWxpdGEgZWwgbGxhbsOnYW1lbnQgZCd1biBwcm9jw6lzIGF1eGlsaWFyIG1lbnRyZSBzJ2FuYWxpdHphIGVsIHJlZ2lzdHJlIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIk9wY2lvbnMgZGVsIEdTdHJlYW1lciIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIk1vc3RyYSBsZXMgb3BjaW9ucyBkZWwgR1N0cmVhbWVyIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIk9wY2nDsyBkZXNjb25lZ3VkYSIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGhhIHRyb2JhdCB1biBlcnJvciBnZW5lcmFsIGRlIGxhIGJpYmxpb3RlY2EgcHJpbmNpcGFsLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iRWxzIGRlc2Vudm9sdXBhZG9ycyBkZSBHU3RyZWFtZXJzIGhhbiBzaWd1dCB0YW4gZ2FuZHVscyBxdWUgbm8gaGFuIGFzc2lnbmF0ICIKLSJ1biBjb2RpIGQnZXJyb3IgcGVyIGEgYXF1ZXN0IGVycm9yLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IGNvZGkgbm8gaW1wbGVtZW50YXQuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iUydoYSBwcm9kdcOvdCB1biBlcnJvciBkZWwgR1N0cmVhbWVyOiBlbCBjYW52aSBkJ2VzdGF0IGhhIGZhbGxhdCBpIGFsZ3VuICIKLSJlbGVtZW50IG5vIGhhIHBvZ3V0IGVudmlhciB1biBtaXNzYXRnZSBkJ2Vycm9yIGFtYiBsYSByYcOzIGRlIGxhIGZhbGxpZGEuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgY2XFgGxhLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGRlIGZpbHMuIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgbmVnb2NpYWNpw7MuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkJ2VzZGV2ZW5pbWVudC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgY2VyY2EuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGRlIGNhcGFjaXRhdHMuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZCdldGlxdWV0YS4iCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICJMYSB2b3N0cmEgaW5zdGFswrdsYWNpw7MgZGVsIEdTdHJlYW1lciBtYW5jYSB1biBjb25uZWN0b3IuIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgcmVsbG90Z2UuIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLSJBcXVlc3RhIGFwbGljYWNpw7MgZXN0w6AgdHJhY3RhbnQgZCdlbXByYXIgZnVuY2lvbmFsaXRhdCBkZWwgR1N0cmVhbWVyIHF1ZSAiCi0icydoYSBpbmhhYmlsaXRhdC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoYSB0cm9iYXQgdW4gZXJyb3IgZ2VuZXJhbCBkZSBsYSBiaWJsaW90ZWNhIGRlIHJlY29semFtZW50LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgaW5pY2lhbGl0emFyIGxhIGJpYmxpb3RlY2EgZGUgcmVjb2x6YW1lbnQuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgdGFuY2FyIGxhIGJpYmxpb3RlY2EgZGUgcmVjb2x6YW1lbnQuIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNvbmZpZ3VyYXIgbGEgYmlibGlvdGVjYSBkZSByZWNvbHphbWVudC4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZGUgY29kaWZpY2FjacOzLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgaGEgdHJvYmF0IHVuIGVycm9yIGdlbmVyYWwgZGUgcmVjdXJzb3MuIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiTm8gcydoYSB0cm9iYXQgZWwgcmVjdXJzLiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIkVsIHJlY3VycyBlc3TDoCBvY3VwYXQgbyBubyBlc3TDoCBkaXNwb25pYmxlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciBlbCByZWN1cnMgcGVyIGEgbGEgbGVjdHVyYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgcmVjdXJzIHBlciBhIGwnZXNjcmlwdHVyYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgcmVjdXJzIHBlciBhIGwnZXNjcmlwdHVyYSBpIGxhIGxlY3R1cmEuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCB0YW5jYXIgZWwgcmVjdXJzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciBkZXMgZGVsIHJlY3Vycy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGFsIHJlY3Vycy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBmZXIgdW5hIGNlcmNhIGFsIHJlY3Vycy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHNpbmNyb25pdHphciBhbCByZWN1cnMuIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2J0ZW5pci9lc3RhYmxpciBlbHMgcGFyw6BtZXRyZXMgZGVzIGRlbC9hbCByZWN1cnMuIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJObyByZXN0YSBlc3BhaSBhbCByZWN1cnMuIgotCi0jLCBmdXp6eQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIk5vIHJlc3RhIGVzcGFpIGFsIHJlY3Vycy4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoYSB0cm9iYXQgdW4gZXJyb3IgZ2VuZXJhbCBkZSBmbHV4LiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotIkwnZWxlbWVudCBubyBpbXBsZW1lbnRhIGxhIGdlc3Rpw7MgZCdhcXVlc3QgZmx1eC4gRW52aWV1IHVuIGluZm9ybWUgZCdlcnJvci4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBkZXRlcm1pbmFyIGVsIHRpcHVzIGRlIGZsdXguIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iRWwgZmx1eCDDqXMgZCd1biB0aXB1cyBkaWZlcmVudCBkZWwgcXVhbCDDqXMgZ2VzdGlvbmF0IHBlciBhcXVlc3QgZWxlbWVudC4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIk5vIGhpIGhhIGNhcCBjw7JkZWMgcHJlc2VudCBxdWUgcHVnYSBnZXN0aW9uYXIgZWwgdGlwdXMgZGVsIGZsdXguIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGRlY29kaWZpY2FyIGVsIGZsdXguIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNvZGlmaWNhciBlbCBmbHV4LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGRlbXVsdGlwbGV4YXIgZWwgZmx1eC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgbXVsdGlwbGV4YXIgZWwgZmx1eC4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJFbCBmbHV4IMOpcyBlbiBlbCBmb3JtYXQgZXJyb25pLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJFbCBmbHV4IMOpcyB4aWZyYXQgaSBubyBzJ2hhIGltcGxlbWVudGF0IGVsIGRlc3hpZnJhdGdlLiIKLQotbXNnaWQgIiIKLSJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCi0iYmVlbiBzdXBwbGllZC4iCi1tc2dzdHIgIiIKLSJFbCBmbHV4IMOpcyB4aWZyYXQgaSBubyBlcyBwb3QgZGVzeGlmcmFyIHBlcnF1w6ggbm8gcydoYSBwcm92ZcOvdCB1bmEgY2xhdSAiCi0iYWRlcXVhZGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIk5vIGhpIGhhIGNhcCBtaXNzYXRnZSBkJ2Vycm9yIHBlciBhbCBkb21pbmkgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIiIKLSJObyBzJ2hhIHRyb2JhdCBjYXAgbWlzc2F0Z2UgZCdlcnJvciBlc3TDoG5kYXJkIHBlciBhbCBkb21pbmkgJXMgaSBlbCBjb2RpICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiRWwgcmVsbG90Z2Ugc2VsZWNjaW9uYXQgbm8gZXMgcG90IGVtcHJhciBhbCBjb25kdWN0ZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgInRpdGxlIgotbXNnc3RyICJ0w610b2wiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJ0w610b2wgdXNhdCBoYWJpdHVhbG1lbnQiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tIGQnb3JkZW5hY2nDsyBkZWwgdMOtdG9sIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAidMOtdG9sIHVzYXQgaGFiaXR1YWxtZW50IHBlciBhIGwnb3JkZW5hY2nDsyIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAiYXJ0aXN0YSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAicGVyc29uZXMgcmVzcG9uc2FibGVzIGRlIGxhIGdyYXZhY2nDsyIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tIGQnb3JkZW5hY2nDsyBkZSBsJ2FydGlzdGEiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvbmVzIHJlc3BvbnNhYmxlcyBkZSBsYSBncmF2YWNpw7MgcGVyIGEgbCdvcmRlbmFjacOzIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgIsOgbGJ1bSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICLDoGxidW0gcXVlIGNvbnTDqSBhcXVlc3RhIGRhZGVzIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgIm5vbSBkJ29yZGVuYWNpw7MgZGUgbCfDoGxidW0iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiw6BsYnVtIHF1ZSBjb250w6kgYXF1ZXN0YSBkYWRlcyBwZXIgYSBsJ29yZGVuYWNpw7MiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgImFydGlzdGEgZGUgbCfDoGxidW0iCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgIkwnYXJ0aXN0YSBkZSBsJ8OgbGJ1bSBzZW5jZXIsIHRhbCBpIGNvbSBzJ2hhdXJpYSBkZSBtb3N0cmFyIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJub20gZCdvcmRlbmFjacOzIGRlIGwnYXJ0aXN0YSBkZSBsJ8OgbGJ1bSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiTCdhcnRpc3RhIGRlIGwnw6BsYnVtIHNlbmNlciwgdGFsIGkgY29tIHMnaGF1cmlhIGQnb3JkZW5hciIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImRhdGEiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdGEgZW4gbGEgcXVhbCBlcyB2YW4gY3JlYXIgbGVzIGRhZGVzIChjb20gYSB1bmEgZXN0cnVjdHVyYSBHRGF0ZSkiCi0KLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAiZGF0YWhvcmEiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgIiIKLSJkYXRhIGkgaG9yYSBlbiBxdcOoIGVzIHZhbiBjcmVhciBsZXMgZGFkZXMgKGNvbSBhIHVuYSBlc3RydWN0dXJhIEdzdERhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJnw6huZXJlIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImfDqG5lcmUgYWwgcXVhbCBwZXJ0YW55ZW4gYXF1ZXN0ZXMgZGFkZXMiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJjb21lbnRhcmkiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAidGV4dCBsbGl1cmUgY29tZW50YW50IGxlcyBkYWRlcyIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImNvbWVudGFyaSBlc3TDqXMiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJ0ZXh0IGxsaXVyZSBjb21lbnRhbnQgbGVzIGRhZGVzIGVuIGZvcm1hIGNsYXU9dmFsb3IgbyBjbGF1W2NhXT1jb21lbnRhcmkiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIm7Dum1lcm8gZGUgcGlzdGEiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibsO6bWVybyBkZSBwaXN0YSBkaW5zIGQndW5hIGNvbMK3bGVjY2nDsyIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJjb21wdGUgZGUgcGlzdGVzIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiY29tcHRlIGRlIHBpc3RlcyBkaW5zIGRlIGxhIGNvbMK3bGVjY2nDsyBhIGxhIHF1YWwgcGVydGFueSBhcXVlc3RhIHBpc3RhIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgIm7Dum1lcm8gZGUgZGlzYyIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIm7Dum1lcm8gZGUgZGlzYyBkaW5zIGQndW5hIGNvbMK3bGVjY2nDsyIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgImNvbXB0ZSBkZSBkaXNjIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImNvbXRlIGRlIGRpc2NzIGRpbnMgZGUgbGEgY29swrdsZWNjacOzIGEgbGEgcXVhbCBwZXJ0YW55IGFxdWVzdCBkaXNjIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgInViaWNhY2nDsyIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0iT3JpZ2VuIGRlbCBtZWRpIGNvbSBhIFVSSSAodWJpY2FjacOzLCBvbiBzJ2FsbG90amEgZWwgZml0eGVyIG8gZmx1eCBvcmlnaW5hbCkiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAicMOgZ2luYSBwcmluY2lwYWwiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICIiCi0iUMOgZ2luYSBwcmluY2lwYWwgZCdhcXVlc3QgbWVkaSAocC4gZXguIGxhIHDDoGdpbmEgcHJpbmNpcGFsIGRlIGwnYXJ0aXN0YSBvICIKLSJwZcWAbMOtY3VsYSkiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAiZGVzY3JpcGNpw7MiCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgInRleHQgY3VydCBkZXNjcml2aW50IGVsIGNvbnRpbmd1dCBkZSBsZXMgZGFkZXMiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzacOzIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgInZlcnNpw7MgZCdhcXVlc3RlcyBkYWRlcyIKLQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIklTUkMiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gdmVnZXUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAib3JnYW5pdHphY2nDsyIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAibm90YSBkZSBjb3B5cmlnaHQgZGUgbGVzIGRhZGVzIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAidXJpIGRlbCBjb3B5cmlnaHQiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSBhIGxhIG5vdGEgZGVsIGNvcHlyaWdodCBkZSBsZXMgZGFkZXMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAiY29kaWZpY2Fkb3IiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICJjb250YWN0ZSIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImluZm9ybWFjacOzIGRlIGNvbnRhY3RlIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAibGxpY8OobmNpYSIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAibGxpY8OobmNpYSBkZSBsZXMgZGFkZXMiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAidXJpIGRlIGxhIGxsaWPDqG5jaWEiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSBhIGxhIGxsaWPDqG5jaWEgZGUgbGVzIGRhZGVzIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJtw7pzaWMiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVyc29uZXMgcXVlIHRvcXVlbiIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJjb21wb3NpdG9yIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb25lcyBxdWUgY29tcG9zYXJlbiBsYSBncmF2YWNpw7MiCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgImR1cmFkYSIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJkdXJhZGEgZW4gbGEgdW5pdGF0IGRlIHRlbXBzIGRlIEdTdHJlYW1lciAobmFub3NlZ29ucykiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAiY8OyZGVjIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjw7JkZWMgZW4gZWwgcXVhbCBlc3RhbiBlbW1hZ2F0emVtYWRlcyBsZXMgZGFkZXMiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAiY8OyZGVjIGRlIHbDrWRlbyIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY8OyZGVsIGVuIGVsIHF1YWwgZXN0YW4gZW1tYWdhdHplbWFkZXMgbGVzIGRhZGVzIGRlIHbDrWRlbyIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJjw7JkZWMgZCfDoHVkaW8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImPDsmRlYyBlbiBlbCBxdWFsIGVzdGFuIGVtbWFnYXR6ZW1hZGVzIGxlcyBkYWRlcyBkJ8OgdWRpbyIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJjw7JkZWMgZGUgc3VidMOtdG9scyIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY8OyZGVsIGVuIGVsIHF1YWwgZXN0YW4gZW1tYWdhdHplbWFkZXMgbGVzIGRhZGVzIGRlIHN1YnTDrXRvbHMiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJmb3JtYXQgZGVsIGNvbnRlbmlkb3IiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiZm9ybWF0IGRlIGNvbnRlbmlkb3IgZW4gcXXDqCBlc3RhbiBlbW1hZ2F0emVtYWRlcyBsZXMgZGFkZXMiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJyw6B0aW8gZGUgYml0cyIKLQotbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm1pdGphIG8gdmFsb3IgZXhhY3RlIGRlIHLDoHRpbyBkZSBiaXRzIGVuIGJpdHMvcyIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAicsOgdGlvIGRlIGJpdHMgbm9taW5hbCIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgInLDoHRpbyBkZSBiaXRzIG5vbWluYWwgZW4gYml0cy9zIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIgotbXNnc3RyICJyw6B0aW8gZGUgYml0cyBtw61uaW0iCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJyw6B0aW8gZGUgYml0cyBtw61uaW0gZW4gYml0cy9zIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJyw6B0aW8gZGUgYml0cyBtw6B4aW0iCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJyw6B0aW8gZGUgYml0cyBtw6B4aW0gZW4gYml0cy9zIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAiY29kaWZpY2Fkb3IiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJjb2RpZmljYWRvciB1dGlsaXR6YXQgcGVyIGEgY29kaWZpY2FyIGFxdWVzdCBmbHV4IgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzacOzIGRlbCBjb2RpZmljYWRvciIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgInZlcnNpw7MgZGVsIGNvZGlmaWNhZG9yIHV0aWxpdHphdCBwZXIgYSBjb2RpZmljYXIgYXF1ZXN0IGZsdXgiCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgIm7Dum1lcm8gZGUgc8OocmllIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAibsO6bWVybyBkZSBzw6hyaWUgZGUgbGEgcGlzdGEiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgImdhbsOgbmNpYSBkZSByZXBsYXlnYWluIGRlIGxhIHBpc3RhIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiZ2Fuw6BuY2lhIGRlIGxhIHBpc3RhIGVuIGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJjaW0gZGUgbGVzIHBpc3RlcyBkZWwgcmVwbGF5Z2FpbiIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJjaW0gZGUgbGVzIHBpc3RlcyIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAiZ2Fuw6BuY2lhIGRlIGwnw6BsYnVtIGRlbCByZXBsYXlnYWluIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiZ2Fuw6BuY2lhIGRlIGwnw6BsYnVtIGVuIGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJjaW0gZGUgbCfDoGxidW0gZGVsIHJlcGxheWdhaW4iCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAiY2ltIGRlIGwnw6BsYnVtIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgIm5pdmVsbCBkZSByZWZlcsOobmNpYSBkZWwgcmVwbGF5Z2FpbiIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgIm5pdmVsbCBkZSByZWZlcsOobmNpYSBkZWxzIHZhbG9ycyBkZSBndWFueSBkZSBsYSBwaXN0YSBpIMOgbGJ1bSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgImNvZGkgZGUgbGEgbGxlbmd1YSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICJjb2RpIGRlIGxhIGxsZW5ndWEgcGVyIGEgYXF1ZXN0IGZsdXgsIGNvbmZvcm1hbnQgYW1iIElTTy02MzktMSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJjb2RpIGRlIGxhIGxsZW5ndWEiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgImltYXRnZSIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImltYXRnZSByZWxhY2lvbmFkYSBhbWIgYXF1ZXN0IGZsdXgiCi0KLSMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQotbXNnaWQgInByZXZpZXcgaW1hZ2UiCi1tc2dzdHIgInByZXZpc3VhbGl0emFjacOzIGRlIGxhIGltYXRnZSIKLQotbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAicHJldmlzdWFsaXR6YWNpw7MgZGUgbGEgaW1hdGdlIHJlbGFjaW9uYWRhIGFtYiBhcXVlc3QgZmx1eCIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgImFkanVudCIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImZpdHhlciBhZGp1bnRhdCBhIGFxdWVzdCBmbHV4IgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiY29wcyBwZXIgbWludXQiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAibm9tYnJlIGRlIGNvcHMgcGVyIG1pbnV0IGEgbCfDoHVkaW8iCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAicGFyYXVsZXMgY2xhdSIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICJwYXJhdWxlcyBjbGF1IHNlcGFyYWRlcyBwZXIgY29tZXMgcXVlIGRlc2NyaXVlbiBlbCBjb250aW5ndXQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibm9tIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotInViaWNhY2nDsyBkZXNjcmlwdGl2YSBsbGVnaWJsZSBwZWxzIGh1bWFucyBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gIgotInByb2R1w690IGVsIG1lZGkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgImxhdGl0dWQgZGUgbGEgZ2VvbG9jYWxpdHphY2nDsyIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotImxhdGl0dWQgZGUgbGEgZ2VvbG9jYWxpdHphY2nDsyBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gcHJvZHXDr3QgZWwgIgotIm1lZGksIGVuIGdyYXVzIGNvbmNvcmRhbnRzIGEgV0dTODQgKHplcm8gYSBsJ2VxdWFkb3IsIHZhbG9ycyBuZWdhdGl1cyBwZXIgYSAiCi0ibGF0aXR1ZHMgYWwgc3VkKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgImxvbmdpdHVkIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0ibG9uZ2l0dWQgZGUgbGEgZ2VvbG9jYWxpdHphY2nDsyBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gcHJvZHXDr3QgZWwgIgotIm1lZGksIGVuIGdyYXVzIGNvbmNvcmRhbnRzIGEgV0dTODQgKHplcm8gYWwgbWVyaWRpw6AgaW5pY2lhbCBhIEdyZWVud2ljaC9VSywgIgotInZhbG9ycyBuZWdhdGl1cyBwZXIgYSBsb25naXR1ZHMgb2NjaWRlbnRhbHMpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiZWxldmFjacOzIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0iZWxldmFjacOzIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MgZGVsIGxsb2Mgb24gcydoYSBlbnJlZ2lzdHJhdCBvIHByb2R1w690IGVsICIKLSJtZWRpLCBlbiBncmF1cyBjb25jb3JkYW50cyBhIFdHUzg0ICh6ZXJvIMOpcyBlbCBuaXZlbGwgZGVsIG1hciBtaXRqw6ApIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgImVzdGF0IGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiZXN0YXQgKG5vbSBlbiBhbmdsw6hzKSBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gcHJvZHXDr3QgZWwgbWVkaSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICJjaXV0YXQgZGUgbGEgZ2VvbG9jYWxpdHphY2nDsyIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJjaXV0YXQgKG5vbSBlbiBhbmdsw6hzKSBkZWwgbGxvYyBvbiBzJ2hhIGVucmVnaXN0cmF0IG8gcHJvZHXDr3QgZWwgbWVkaSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAic3VidWJpY2FjacOzIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLSJ1bmEgdWJpY2FjacOzIGRpbnMgZGUgbGEgY2l1dGF0IG9uIHMnaGEgZW5yZWdpc3RyYXQgbyBwcm9kdcOvdCBlbCBtZWRpIChwLiBleC4gIgotImVsIGJhcnJpKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJlcnJvciBob3JpdHpvbnRhbCBkZSBsYSBnZW9sb2NhbGl0emFjacOzIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgImVycm9yIGVzcGVyYXQgZGUgbGVzIG1lc3VyZXMgZGUgcG9zaWNpb25hbWVudCBob3JpdHpvbmF0IChlbiBtZXRyZXMpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJ2ZWxvY2l0YXQgZGVsIG1vdmltZW50IGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLSJ2ZWxvY2l0YXQgZGVsIG1vdmltZW50IGRlbCBkaXNwb3NpdGl1IGRlIGNhcHR1cmEgbWVudHJlIGVzIHByZW5pYSBsYSBjYXB0dXJhICIKLSJlbiBtL3MiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlY2Npw7MgZGVsIG1vdmltZW50IGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJpbmRpY2EgbGEgZGlyZWNjacOzIGRlbCBtb3ZpbWVudCBkZWwgZGlzcG9zaXRpdSBxdWUgcHJlbmlhIGxhIGNhcHR1cmEgZCd1biAiCi0ibWVkaS4gRXMgcmVwcmVzZW50YSBlbiBncmF1cyBlbiByZXByZXNlbnRhY2nDsyBkZSBjb21hIGZsb3RhbnQsIDAgdm9sIGRpciBlbCAiCi0ibm9yZCBnZW9ncsOgZmljLCBpIGF1Z21lbnRhIGVuIHNlbnRpdCBkZSBsZXMgYWd1bGxlcyBkZWwgcmVsbG90Z2UiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgImRpcmVjY2nDsyBkZSBsYSBjYXB0dXJhIGRlIGxhIGdlb2xvY2FsaXR6YWNpw7MiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJpbmRpY2EgbGEgZGlyZWNjacOzIG9uIGFwdW50YSBlbCBkaXNwb3NpdGl1IG1lbnRyZSBjYXB0dXJhIHVuIG1lZGkuIEVzICIKLSJyZXByZXNlbnRhIGVuIGdyYXVzIGVuIHJlcHJlc2VudGFjacOzIGRlIGNvbWEgZmxvdGFudCwgMCB2b2wgZGlyIGVsIG5vcmQgIgotImdlb2dyw6BmaWMsIGkgYXVnbWVudGEgZW4gc2VudGl0IGRlIGxlcyBhZ3VsbGVzIGRlbCByZWxsb3RnZSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICJub20gZGVsIHByb2dyYW1hIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAiTm9tIGRlbCBwcm9ncmFtYSBkZSBUVi9wb2RjYXN0L3PDqHJpZSBhbCBxdWFsIHBlcnRhbnkgZWwgbWVkaSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tIGQnb3JkZW5hY2nDsyBkZWwgcHJvZ3JhbWEiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJOb20gcHJvZ3JhbWEgZGUgVFYvcG9kY2FzdC9zw6hyaWUgYWwgcXVhbCBwZXJ0YW55IGVsIG1lZGksIHBlciBhIGwnb3JkZW5hY2nDsyIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICJuw7ptZXJvIGQnZXBpc29kaSIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJFbCBuw7ptZXJvIGQnZXBpc29kaSBkZSBsYSB0ZW1wb3JhZGEgYWwgcXVhbCBwZXJ0YW55IGVsIG1lZGkiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJuw7ptZXJvIGRlIHRlbXBvcmFkYSIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJFbCBuw7ptZXJvIGRlIHRlbXBvcmFkYSBkZWwgcHJvZ3JhbWEgYWwgcXVhbCBwZXJ0YW55IGVsIG1lZGkiCi0KLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgImxsZXRyZXMiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIkxlcyBsbGV0cmVzIGRlbCBtZWRpLCBoYWJpdHVhbG1lbnQgZW1wcmF0IHBlciBhIGNhbsOnb25zIgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgIm5vbSBkJ29yZGVuYWNpw7MgZGVsIGNvbXBvc2l0b3IiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwZXJzb25lcyBxdWUgY29tcG9zYXJlbiBsYSBncmF2YWNpw7MsIHBlciBhIGwnb3JkZW5hY2nDsyIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICJhZ3J1cGFjacOzIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0ibWVkaXMgYWdydXBhdHMgcXVlIGVzIGNvbXBvc2VuIGRlIGRpdmVyc2VzIHBpc3RlcywgY29tIGxlcyBkaWZlcmVudHMgcGVjZXMgIgotImQndW4gY29uY2VydC4gw4lzIGRlIG5pdmVsbCBtw6lzIGFsdCBxdWUgdW5hIHBpc3RhLCBwZXLDsiBtw6lzIGJhaXggcXVlIHVuIMOgbGJ1bSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJ2YWxvcmFjacOzIGRlIGwndXN1YXJpIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJWYWxvcmFjacOzIGF0cmlidcOvZGEgcGVyIHVuIHVzdWFyaS4gQ29tIG3DqXMgYWx0YSDDqXMsIG3DqXMgbGkgYWdyYWRhIGVsIG1lZGkgYSAiCi0ibCd1c3VhcmkiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICJmYWJyaWNhbnQgZGVsIGRpc3Bvc2l0aXUiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJGYWJyaWNhbnQgZGVsIGRpc3Bvc2l0aXUgZW1wcmF0IHBlciBhIGNyZWFyIGFxdWVzdCBtZWRpIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJtb2RlbCBkZWwgZGlzcG9zaXRpdSIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTW9kZWwgZGVsIGRpc3Bvc2l0aXUgZW1wcmF0IHBlciBhIGNyZWFyIGFxdWVzdCBtZWRpIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAibm9tIGRlIGwnYXBsaWNhY2nDsyIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiQXBsaWNhY2nDsyBlbXByYWRhIHBlciBhIGNyZWFyIGVsIG1lZGkiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJkYWRlcyBkZSBsJ2FwbGljYWNpw7MiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICJEYWRlcyBhcmJpdHLDoHJpZXMgZGUgbCdhcGxpY2FjacOzIGEgc2VyaWFsaXR6YXIgYWwgbWVkaSIKLQotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICJvcmllbnRhY2nDsyBkZSBsYSBpbWF0Z2UiCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIkNvbSBzJ2hhdXJpYSBkZSByb3RhciBvIGdpcmFyIGxhIGltYXRnZSBhYmFucyBkZSBtb3N0cmFyLWxhIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJFUlJPUjogZGVzIGRlIGwnZWxlbWVudCAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJbmZvcm1hY2nDsyBkZSBkZXB1cmFjacOzIGFkZGljaW9uYWw6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAibm8gaGkgaGEgY2FwIHByb3BpZXRhdCDCqyVzwrsgZW4gbCdlbGVtZW50IMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgbGEgcHJvcGlldGF0IMKrJXPCuyBlbiBsJ2VsZW1lbnQgwqslc8K7IGEgwqslc8K7IgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAibm8gcydoYSBwb2d1dCBlbmxsYcOnYXIgJXMgYSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAibm8gaGkgaGEgY2FwIGVsZW1lbnQgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBhbmFsaXR6YXIgbGVzIGNhcGFjaXRhdHMgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibm8gaGkgaGEgY2FwIGVsZW1lbnQgZGUgc29ydGlkYSBwZXIgYSBsJ1VSSSDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5vIGhpIGhhIGNhcCBlbGVtZW50IGZvbnQgcGVyIGEgbCdVUkkgwqslc8K7IgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJlbCBiaW5hcmkgZXNwZWNpZmljYXQgwqslc8K7IMOpcyBidWl0LCBubyBlcyBwZXJtZXQiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAiZWwgYmluYXJpIMKrJXPCuyBubyBleGlzdGVpeCwgZXMgZGVzY2FydGEiCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAibm8gZXMgcGVybWV0IHVuIGNvbmR1Y3RlIGJ1aXQiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAiUydlc3RhbiBkZXNjYXJ0YW50IG1vbHRlcyBtZW3DsnJpZXMgaW50ZXJtw6hkaWVzLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiSGkgaGEgdW4gcHJvYmxlbWEgaW50ZXJuIGRlIGZsdXggZGUgZGFkZXMuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgZmx1eCBkZSBkYWRlcy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlbCByZWxsb3RnZS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNvZGlmaWNhciBsYSBpbWF0Z2UuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkZpbHRyYSBsZXMgY2FwYWNpdGF0cyIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iUmVzdHJpbmdlaXggbGVzIGNhcGFjaXRhdHMgcXVlIGVzIHBvZGVuIHBlcm1ldHJlIChOVUwgdm9sIGRpciBRVUFMU0VWT0wpLiAiCi0iRXN0YWJsaXIgYXF1ZXN0YSBwcm9waWV0YXQgcHJlbiB1bmEgcmVmZXLDqG5jaWEgYSBsJ29iamVjdGUgR3N0Q2FwcyBwcm92ZcOvdC4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICJObyBzJ2hhIGVzcGVjaWZpY2F0IHVuIGRpcmVjdG9yaSB0ZW1wb3JhbC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBjcmVhciBlbCBmaXR4ZXIgdGVtcG9yYWwgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZml0eGVyIMKrJXPCuyBwZXIgYSBsYSBsZWN0dXJhLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNjcml1cmUgYWwgZml0eGVyIGRlIGJhaXhhZGEuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5vIHMnaGEgZXNwZWNpZmljYXQgY2FwIG5vbSBkZSBmaXR4ZXIgcGVyIGEgbCdlc2NyaXB0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgwqslc8K7IHBlciBhIGwnZXNjcmlwdHVyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gdGFuY2FyIGVsIGZpdHhlciDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNlcmNhciBhbCBmaXR4ZXIgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBlc2NyaXVyZSBhbCBmaXR4ZXIgwqslc8K7LiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJObyBzJ2hhIGVzcGVjaWZpY2F0IGNhcCBmaXR4ZXIgcGVyIGEgbGxlZ2lyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnRlbmlyIGluZm9ybWFjacOzIHNvYnJlIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiwqslc8K7IMOpcyB1biBkaXJlY3RvcmkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiRWwgZml0eGVyIMKrJXPCuyDDqXMgdW4gc8OyY29sLiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIkhhIGZhbGxhdCBkZXNwcsOpcyBkZSBsZXMgaXRlcmFjaW9ucyBjb20gcydoYSBkZW1hbmF0LiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgImNhcGFjaXRhdHMiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJjYXBhY2l0YXRzIGRldGVjdGFkZXMgYWwgZmx1eCIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIm3DrW5pbSIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgImZvcsOnYSBsZXMgY2FwYWNpdGF0cyIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICJmb3LDp2EgbGVzIGNhcGFjaXRhdHMgc2Vuc2UgZmVyIHVuIMKrdHlwZWZpbmTCuyIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiRWwgZmx1eCBubyBjb250w6kgZGFkZXMuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJFbCBmbHV4IG5vIGNvbnTDqSBkYWRlcy4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICJJbnRlcmbDrWNpZXMgaW1wbGVtZW50YWRlczpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICJsbGVnaWJsZSIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICJlc2NyaXZpYmxlIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJjb250cm9sYWJsZSIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICJlcyBwb3QgY2FudmlhciBhbHMgZXN0YXRzIE5VTCwgUFJFUEFSQVQsIEVOIFBBVVNBIG8gUkVQUk9EVUlOVCIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgImVzIHBvdCBjYW52aWFyIGFscyBlc3RhdHMgTlVMLCBQUkVQQVJBVCBvIEVOIFBBVVNBIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgImVzIHBvdCBjYW52aWFyIGFscyBlc3RhdHMgTlVMIG8gUFJFUEFSQVQiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIkZpdHhlcnMgYSBsYSBsbGlzdGEgbmVncmE6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAiQ29tcHRlIHRvdGFsOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkIGZpdHhlciBhIGxhIGxsaXN0YSBuZWdyYSIKLW1zZ3N0clsxXSAiJWQgZml0eGVycyBhIGxhIGxsaXN0YSBuZWdyYSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIGNvbm5lY3RvciIKLW1zZ3N0clsxXSAiJWQgY29ubmVjdG9ycyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCBlbnRyYWRhIGRlIGxhIGxsaXN0YSBuZWdyYSIKLW1zZ3N0clsxXSAiJWQgZW50cmFkZXMgZGUgbGEgbGxpc3RhIG5lZ3JhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCBmdW5jaW9uYWxpdGF0IgotbXNnc3RyWzFdICIlZCBmdW5jaW9uYWxpdGF0cyIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiSW1wcmltZWl4IHRvdHMgZWxzIGVsZW1lbnRzIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiTW9zdHJhIHVuYSBsbGlzdGEgZGUgZml0eGVycyBhIGxhIGxsaXN0YSBuZWdyYSIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iTW9zdHJhIHVuYSBsbGlzdGEgYW5hbGl0emFibGUgcGVyIG3DoHF1aW5lcyBkZSBmdW5jaW9uYWxpdGF0cyBxdWUgcHJvdmVlaXhlbiAiCi0iZWwgY29ubmVjdG9yIG8gZXNwZWNpZmljYXQsIG8gdG90cyBlbHMgY29ubmVjdG9ycy5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDDmnRpbCBhbWIgY29ubmV4aW9ucyBhbWIgbWVjYW5pc21lcyAiCi0iZXh0ZXJucyBkJ2luc3RhxYBsYWNpw7MgZGUgY29ubmVjdG9ycyIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiTW9zdHJhIGVsIGNvbnRpbmd1dCBkJ3VuIGNvbm5lY3RvciIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCi1tc2dzdHIgIiIKLSJNb3N0cmEgZWxzIGVzcXVlbWVzIGQnVVJJIGltcGxlbWVudGF0cywgYW1iIGVscyBlbGVtZW50cyBxdWUgZWxzIGltcGxlbWVudGVuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNhcnJlZ2FyIGVsIGZpdHhlciBkZSBjb25uZWN0b3I6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIkwnZWxlbWVudCBvIGNvbm5lY3RvciDCqyVzwrsgbm8gZXhpc3RlaXhcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIlMnaGEgcmVidXQgZWwgbWlzc2F0Z2UgIyV1IGRlIGwnZWxlbWVudCDCqyVzwrsgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICJTJ2hhIHJlYnV0IGVsIG1pc3NhdGdlICMldSBkZSBsYSBjZcWAbGEgwqslczolc8K7ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiUydoYSByZWJ1dCBlbCBtaXNzYXRnZSAjJXUgZGUgbCdvYmplY3RlIMKrJXPCuyAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiUydoYSByZWJ1dCBlbCBtaXNzYXRnZSAldTogKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiUydoYSBvYnRpbmd1dCB1biBmaW5hbCBkZWwgZmx1eCBkZSBsJ2VsZW1lbnQgwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk1BUkNBRE9SIFRST0JBVDogdHJvYmF0IHBlciBsJ2VsZW1lbnQgwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiTUFSQ0FET1IgVFJPQkFUOiB0cm9iYXQgcGVyIGxhIGNlxYBsYSDCqyVzOiVzwrsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJNQVJDQURPUiBUUk9CQVQ6IHRyb2JhdCBwZXIgbCdvYmplY3RlIMKrJXPCuy5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJNQVJDQURPUiBUUk9CQVRcbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiTUFSQ0FET1IgVFJPQkFUOiB0cm9iYXQgcGVyIGwnZWxlbWVudCDCqyVzwrsuXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiTUFSQ0FET1IgVFJPQkFUOiB0cm9iYXQgcGVyIGwnb2JqZWN0ZSDCqyVzwrsuXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIk1BUkNBRE9SIFRST0JBVFxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJBVsONUzogZGVzIGRlIGwnZWxlbWVudCAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICIiCi0iUydoYSBwcmVwYXJhdCwgcydlc3TDoCBlc3BlcmFudCBhIHF1ZSBzJ8OybXBsaWdhIGxhIG1lbcOycmlhIGludGVybcOoZGlhbOKAplxuIgotCi0jLCBmdXp6eQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLSJTJ2hhIHByZXBhcmF0LCBzJ2VzdMOgIGVzcGVyYW50IGEgcXVlIHMnw7JtcGxpZ2EgbGEgbWVtw7JyaWEgaW50ZXJtw6hkaWFs4oCmXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgInMnZXN0w6Agb21wbGludCBsYSBtZW3DsnJpYSBpbnRlcm3DqGRpYeKApiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLSJTJ2VzdMOgIG9tcGxlcnQgbGEgbWVtw7JyaWEgaW50ZXJtw6hkaWEsIHMnZXN0YWJsZWl4IGVsIGNvbmR1Y3RlIFJFUFJPRFVJTlTigKZcbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIiIKLSJTJ2VzdMOgIG9tcGxpbnQgbGEgbWVtw7JyaWEgaW50ZXJtw6hkaWEsIHMnZXN0YWJsZWl4IGVsIGNvbmR1Y3RlIGEgRU4gUEFVU0HigKZcbiIKLQotIyBTJ2VzdMOgIHJlZGlzdHJpYnVpbnQ/IGptCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiUmVkaXN0cmlidWNpw7MgZGUgbGEgbGF0w6huY2lh4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAiUydlc3TDoCBlc3RhYmxpbnQgbCdlc3RhdCBhICVzIGEgcGV0aWNpw7MgZGUgJXPigKZcbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkludGVycnVwY2nDszogUydlc3TDoCBhdHVyYW50IGVsIGNvbmR1Y3Rl4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIm5vIGhpIGhhIGNhcCBlbGVtZW50IMKrJXPCuyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIkFWw41TOiBkZXMgZGUgbCdlbGVtZW50ICVzOiAlc1xuIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICJNb3N0cmEgZWxzIG1hcmNhZG9ycyAodGFtYsOpIGNvbmVndXRzIGNvbSBtZXRhZGFkZXMpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiTW9zdHJhIGxhIGluZm9ybWFjacOzIGQnZXN0YXQgaSBub3RpZmljYWNpb25zIGRlIHByb3BpZXRhdHMiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJObyBtb3N0cmVzIGluZm9ybWFjacOzIGRlbCBwcm9ncsOpcyIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiTWlzc2F0Z2VzIGRlIHNvcnRpZGEiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJObyBpbnN0YWzCt2xlcyB1biBnZXN0b3IgZGUgZmFsbGFkZXMiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIkZvcsOnYSBlbCBmaW5hbCBkZWwgZmx1eCBhYmFucyBkZSB0YW5jYXIgZWwgY29uZHVjdGUiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRVJST1I6IG5vIHMnaGEgcG9ndXQgY29uc3RydWlyIGVsIGNvbmR1Y3RlOiAlcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkVSUk9SOiBubyBzJ2hhIHBvZ3V0IGNvbnN0cnVpciBlbCBjb25kdWN0ZS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIkFWw41TOiBlbCBjb25kdWN0ZSDDqXMgZXJyb25pOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJFUlJPUjogbCdlbGVtZW50IMKrY29uZHVjdGXCuyBubyBzJ2hhIHRyb2JhdC5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJTJ2VzdMOgIGVzdGFibGludCBlbCBjb25kdWN0ZSBhIEVOIFBBVVNB4oCmXG4iCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJFUlJPUjogZWwgY29uZHVjdGUgbm8gZXMgdm9sIHBvc2FyIGVuIHBhdXNhLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICJFbCBjb25kdWN0ZSDDqXMgZW4gZGlyZWN0ZSBpIG5vIG5lY2Vzc2l0YSBQUkVQQVJBQ0nDk+KAplxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiRWwgY29uZHVjdGUgcydlc3TDoCBQUkVQQVJBTlTigKZcbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiRVJST1I6IGVsIGNvbmR1Y3RlIG5vIHZvbCBwcmVwYXJhci1zZS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiRWwgY29uZHVjdGUgcydoYSBQUkVQQVJBVOKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJTJ2VzdMOgIGVzdGFibGludCBlbCBjb25kdWN0ZSBhIFJFUFJPRFVJTlTigKZcbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiRVJST1I6IGVsIGNvbmR1Y3RlIG5vIHZvbCByZXByb2R1aXItc2UuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiIgotIlMnaGEgaGFiaWxpdGF0IGVsIGZpbmFsIGRlbCBmbHV4IGVuIHRhbmNhciAtLSBTJ2VzdMOgIGZvcsOnYW50IHVuIGZpbmFsIGRlbCAiCi0iZmx1eCBhbCBjb25kdWN0ZVxuIgotCi0jLCBmdXp6eQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICIiCi0iUydoYSBoYWJpbGl0YXQgZWwgZmluYWwgZGVsIGZsdXggZW4gdGFuY2FyIC0tIFMnZXN0w6AgZm9yw6dhbnQgdW4gZmluYWwgZGVsICIKLSJmbHV4IGFsIGNvbmR1Y3RlXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiUydlc3TDoCBlc3BlcmFudCBhbCBmaW5hbCBkZWwgZmx1eOKAplxuIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiUydoYSByZWJ1dCB1biBmaW5hbCBkZWwgZmx1eCAtIHMnZXN0w6AgYXR1cmFudCBlbCBjb25kdWN0ZeKAplxuIgotCi0jLCBmdXp6eQotbXNnaWQgIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJJbnRlcnJ1cGNpw7M6IFMnZXN0w6AgYXR1cmFudCBlbCBjb25kdWN0ZeKAplxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gZXNwZXJhciBhbCBmaW5hbCBkZWwgZmx1eFxuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIkwnZXhlY3VjacOzIGhhIGZpbmFsaXR6YXQgZGVzcHLDqXMgZGUgJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIlMnZXN0w6AgZXN0YWJsaW50IGVsIGNvbmR1Y3RlIGEgUFJFUEFSQVTigKZcbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiUydlc3TDoCBlc3RhYmxpbnQgZWwgY29uZHVjdGUgYSBOVUzigKZcbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIlMnZXN0w6AgYWxsaWJlcmFudCBlbCBjb25kdWN0ZeKAplxuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBmbHV4IGRlIGRhZGVzLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIk5vIG1vc3RyZXMgaW5mb3JtYWNpw7MgZCdlc3RhdCBkZSBUSVBVUyIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVElQVVMxLFRJUFVTMizigKYiCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgImwnZW5sbGHDpyBubyB0w6kgdW4gZWxlbWVudCBmb250IgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAibCdlbmxsYcOnIG5vIHTDqSB1biBlbGVtZW50IHNvcnRpZGEiCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAibm8gaGkgaGEgY2FwIGVsZW1lbnQgZWwgcXVhbCBlbmxsYcOnYXIgYSBsJ1VSSSDCqyVzwrsiCi0KLSN+IG1zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0jfiBtc2dzdHIgIk5vIHMnaGEgcG9ndXQgZW5sbGHDp2FyIGwnZWxlbWVudCBkZSBzb3J0aWRhIHBlciBhIGwnVVJJIMKrJXPCuyIKLQotI34gbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCi0jfiBtc2dzdHIgIkltcHJpbWVpeCB1bmEgdHJhw6dhIGQnYWxsb2MgKHNpIHMnaGEgaGFiaWxpdGF0IGFsIGNvbXBpbGFyKSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJGb3JtYSBkJ8O6czogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9waWV0YXQ9dmFsb3Ig4oCmIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiRVJST1I6IGwnYW7DoGxpc2kgZGVsIGZpdHhlciB4bWwgwqslc8K7IGhhIGZhbGxhdC5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkVSUk9SOiBubyBoaSBoYSBjYXAgY29uZHVjdGUgZGUgbml2ZWxsIHN1cGVyaW9yIGVuIGVsIGZpdHhlciDCqyVzwrsuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCi0jfiBtc2dzdHIgIkFWw41TOiBub23DqXMgZXMgZ2VzdGlvbmEgdW4gZWxlbWVudCBkZSBwcmltZXIgbml2ZWxsIGFyYSBtYXRlaXguXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJFUlJPUjogbm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdhcmd1bWVudCBkZSBsYSBsw61uaWEgZCdvcmRyZXMgJWQ6ICVzLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKLSN+IG1zZ3N0ciAiQVbDjVM6IG5vIHMnaGEgdHJvYmF0IGwnZWxlbWVudCBhbm9tZW5hdCDCqyVzwrsuXG4iCi0KLSN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgotI34gbXNnc3RyICJEZXNhIGxhIHJlcHJlc2VudGFjacOzIHhtbCBkZWwgY29uZHVjdGUgYSBGSVRYRVIgaSBzdXJ0IgotCi0jfiBtc2dpZCAiRklMRSIKLSN+IG1zZ3N0ciAiRklUWEVSIgotCi0jfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgotI34gbXNnc3RyICJObyBpbnN0YcWAbGVzIGdlc3RvcnMgZGUgc2VueWFscyBwZXIgYSBTSUdVU1IxIGkgU0lHVVNSMiIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IGhhIGZhbGxhdCBlbCBjYW52aSBkJ2VzdGF0LiIKLQotI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCi0jfiBtc2dzdHIgInViaWNhY2nDsyBvcmlnaW5hbCBkZWwgZml0eGVyIGNvbSB1bmEgVVJJIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmc6ICVzLiIKLSN+IG1zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciBlbCBmaXR4ZXIgwqslc8K7IHBlciBhIGxhIGxlY3R1cmE6ICVzLiIKLQotI34gbXNnaWQgIkVsZW1lbnQgXCIlc1wiIGhhcyBnb25lIGZyb20gUExBWUlORyB0byBQQVVTRUQsIHF1aXR0aW5nLlxuIgotI34gbXNnc3RyICJMJ2VsZW1lbnQgwqslc8K7IGhhIGNhbnZpYXQgZGUgUkVQUk9EVUlOVCBhIFBBVVNBVCwgcydlc3TDoCBzb3J0aW50LlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IFBpcGVsaW5lIGNhbid0IFBSRVJPTEwgLi4uXG4iCi0jfiBtc2dzdHIgIkVSUk9SOiBlbCBjb25kdWN0ZSBubyBwb3QgUFJFUEFSQVItU0UuXG4iCi0KLSN+IG1zZ2lkICIgbnMuXG4iCi0jfiBtc2dzdHIgIiBucy5cbiIKLQotI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCi0jfiBtc2dzdHIgIlMnRVNUw4AgQUxMSUJFUkFOVCBlbCBjb25kdWN0ZeKAplxuIgotCi0jfiBtc2dpZCAiTk9fUFJFUk9MTCBwaXBlbGluZSAuLi5cbiIKLSN+IG1zZ3N0ciAiQ29uZHVjdGUgU0VOU0UgUFJFUEFSQUNJw5PigKZcbiIKLQotI34gbXNnaWQgIlBSRVJPTEwgcGlwZWxpbmUgLi4uXG4iCi0jfiBtc2dzdHIgIkNvbmR1Y3RlIGVuIFBSRVBBUkFDScOT4oCmXG4iCi0KLSMgQXJnaCwgUFJFUk9MTEVEIHZzIFJFQURZLiBqbQotI34gbXNnaWQgIlBSRVJPTExFRCBwaXBlbGluZSAuLi5cbiIKLSN+IG1zZ3N0ciAiQ29uZHVjdGUgUFJFUEFSQVTigKZcbiIKLQotI34gbXNnaWQgIlJVTk5JTkcgcGlwZWxpbmUgLi4uXG4iCi0jfiBtc2dzdHIgIkNvbmR1Y3RlIEVOIEVYRUNVQ0nDk+KAplxuIgotCi0jfiBtc2dpZCAiUkVBRFkgcGlwZWxpbmUgLi4uXG4iCi0jfiBtc2dzdHIgIkNvbmR1Y3RlIFBSRVBBUkFU4oCmXG4iCi0KLSN+IG1zZ2lkICJOVUxMIHBpcGVsaW5lIC4uLlxuIgotI34gbXNnc3RyICJDb25kdWN0ZSBOVUzigKZcbiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgIgotI34gImVycm9yLiAgUGxlYXNlIGZpbGUgYSBidWcuIgotI34gbXNnc3RyICIiCi0jfiAiRWxzIGRlc2Vudm9sdXBhZG9ycyBkZSBHU3RyZWFtZXJzIGhhbiBzaWd1dCB0YW4gZ2FuZHVscyBxdWUgbm8gaGFuICIKLSN+ICJhc3NpZ25hdCB1biBjb2RpIGQnZXJyb3IgcGVyIGEgYXF1ZXN0IGVycm9yLiBTaSB1cyBwbGF1LCBlbnZpZXUgdW4gIgotI34gImluZm9ybWUgZCdlcnJvci4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiAgRmlsZSBhIGJ1Zy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IGNvZGkgbm8gaW1wbGVtZW50YXQuIEVudmlldSB1biAiCi0jfiAiaW5mb3JtZSBkJ2Vycm9yLiIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICIiCi0jfiAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBoYSBmYWxsYXQgZWwgY2FudmkgZCdlc3RhdC4gIgotI34gIkVudmlldSB1biBpbmZvcm1lIGQnZXJyb3IuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICIiCi0jfiAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBmaWxzLiBFbnZpZXUgdW4gIgotI34gImluZm9ybWUgZCdlcnJvci4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKLSN+IG1zZ3N0ciAiIgotI34gIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgbmVnb2NpYWNpw7MuIEVudmlldSAiCi0jfiAidW4gaW5mb3JtZSBkJ2Vycm9yLiIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICIiCi0jfiAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkJ2VzZGV2ZW5pbWVudC4gIgotI34gIkVudmlldSB1biBpbmZvcm1lIGQnZXJyb3IuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKLSN+IG1zZ3N0ciAiIgotI34gIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgY2VyY2EuIEVudmlldSB1biAiCi0jfiAiaW5mb3JtZSBkJ2Vycm9yLiIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwYWJpbGl0aWVzIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKLSN+IG1zZ3N0ciAiIgotI34gIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgaW50ZXJuIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgY2FwYWNpdGF0cy4gRW52aWV1ICIKLSN+ICJ1biBpbmZvcm1lIGQnZXJyb3IuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICIiCi0jfiAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkJ2V0aXF1ZXRhLiBFbnZpZXUgdW4gIgotI34gImluZm9ybWUgZCdlcnJvci4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgc2V0IHNldHRpbmdzLiIKLSN+IG1zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc3RhYmxpciBlbHMgcGFyw6BtZXRyZXMuIgotCi0jfiBtc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoaW4gSnVsaWFuIGNhbGVuZGFyIGRheXMpIgotI34gbXNnc3RyICIiCi0jfiAiZGF0YSBlbiBsYSBxdWFsIGVzIHZhbiBjcmVhciBsZXMgZGFkZXMgKGVuIGRpZXMgZGVsIGNhbGVuZGFyaSBKdWxpw6ApIgotCi0jfiBtc2dpZCAic3RyZWFtIHR5cGUiCi0jfiBtc2dzdHIgInRpcHVzIGRlIGZsdXgiCi0KLSN+IG1zZ2lkICJkZXRlY3RlZCB0eXBlIG9mIHN0cmVhbSIKLSN+IG1zZ3N0ciAicydoYSBkZXRlY3RhdCBlbCB0aXB1cyBkZSBmbHV4IgotCi0jfiBtc2dpZCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgZmVhdHVyZS5cbiIKLSN+IG1zZ2lkX3BsdXJhbCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgZmVhdHVyZXMuXG4iCi0jfiBtc2dzdHJbMF0gIlMnaGEgYWZlZ2l0IGVsIGNvbm5lY3RvciAlcyBhbWIgJWQgZnVuY2lvbmFsaXRhdC5cbiIKLSN+IG1zZ3N0clsxXSAiUydoYSBhZmVnaXQgZWwgY29ubmVjdG9yICVzIGFtYiAlZCBmdW5jaW9uYWxpdGF0cy5cbiIKLQotI34gbXNnaWQgIkxvYWRlZCAlZCBwbHVnaW5zIHdpdGggJWQgZmVhdHVyZS5cbiIKLSN+IG1zZ2lkX3BsdXJhbCAiTG9hZGVkICVkIHBsdWdpbnMgd2l0aCAlZCBmZWF0dXJlcy5cbiIKLSN+IG1zZ3N0clswXSAiUydoYW4gY2FycmVnYXQgJWQgY29ubmVjdG9ycyBhbWIgJWQgZnVuY2lvbmFsaXRhdC5cbiIKLSN+IG1zZ3N0clsxXSAiUydoYW4gY2FycmVnYXQgJWQgY29ubmVjdG9ycyBhbWIgJWQgZnVuY2lvbmFsaXRhdHMuXG4iCi0KLSN+IG1zZ2lkICJwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IgotI34gbXNnc3RyICJpbXByaW1laXggbGEgaW5mb3JtYWNpw7Mgc29icmUgbGEgdmVyc2nDsyBpIHN1cnQiCi0KLSN+IG1zZ2lkICJEaXNhYmxlIGFjY2VsZXJhdGVkIENQVSBpbnN0cnVjdGlvbnMiCi0jfiBtc2dzdHIgIkluaGFiaWxpdGEgbGVzIGludHJ1Y2Npb25zIGQnVUNQIGFjY2VsZXJhZGVzIgotCi0jfiBtc2dpZCAiU0NIRURVTEVSIgotI34gbXNnc3RyICJQTEFOSUZJQ0FET1IiCi0KLSN+IG1zZ2lkICJSZWdpc3RyeSB0byB1c2UiCi0jfiBtc2dzdHIgIlJlZ2lzdHJlIGEgdXRpbGl0emFyIgotCi0jfiBtc2dpZCAiUkVHSVNUUlkiCi0jfiBtc2dzdHIgIlJFR0lTVFJFIgotCi0jfiBtc2dpZCAicGF0aCBsaXN0IGZvciBsb2FkaW5nIHBsdWdpbnMgKHNlcGFyYXRlZCBieSAnJXMnKSIKLSN+IG1zZ3N0ciAibGxpc3RhIGRlIGNhbWlucyBwZXIgYSBjYXJyZWdhciBjb25uZWN0b3JzIChzZXBhcmF0cyBwZXIgwqslc8K7KSIKLQotI34gbXNnaWQgIlNjaGVkdWxlciB0byB1c2UgKGRlZmF1bHQgaXMgJyVzJykiCi0jfiBtc2dzdHIgIlBsYW5pZmljYWRvciBhIHV0aWxpdHphciAocGVyIGRlZmVjdGUgw6lzIMKrJXPCuykiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNjaGVkdWxlciBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGRlbCBwbGFuaWZpY2Fkb3IuICIKLSN+ICJFbnZpZXUgdW4gaW5mb3JtZSBkJ2Vycm9yLiIKLQotI34gbXNnaWQgIlRoZXJlIGlzIG5vIGVsZW1lbnQgcHJlc2VudCB0byBoYW5kbGUgdGhlIHN0cmVhbSdzIG1pbWUgdHlwZSAlcy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJObyBoaSBoYSBjYXAgZWxlbWVudCBwcmVzZW50IHBlciBhIGdlc3Rpb25hciBlbCB0aXB1cyBtaW1lICVzIGRlbCBmbHV4LiIKLQotI34gbXNnaWQgIiIKLSN+ICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJXMgaXRlcmF0aW9ucyAoc3VtICVzIG5zLCBhdmVyYWdlICVzIG5zLCBtaW4gJXMgbnMsICIKLSN+ICJtYXggJXMgbnMpLlxuIgotI34gbXNnc3RyICIiCi0jfiAiTCdleGVjdWNpw7MgaGEgZmluYWxpdHphdCBkZXNwcsOpcyBkZSAlcyBpdGVyYWNpb25zIChzdW1hICVzIG5zLCBtaXRqYSAlcyAiCi0jfiAibnMsIG3DrW4gJXMsIG3DoHggJXMpLlxuIgotCi0jfiBtc2dpZCAiTnVtYmVyIG9mIHRpbWVzIHRvIGl0ZXJhdGUgcGlwZWxpbmUiCi0jfiBtc2dzdHIgIk5vbWJyZSBkZSB2ZWdhZGVzIGEgaXRlcmFyIGVsIGNvbmR1Y3RlIgotCi0jfiBtc2dpZCAiICAgICAgICAgVHJ5aW5nIHRvIHJ1biBhbnl3YXkuXG4iCi0jfiBtc2dzdHIgIiAgICAgICAgIFMnZXN0w6AgaW50ZW50YW50IGV4ZWN1dGFyIHRvdCBpIGFpeMOtLlxuIgotCi0jfiBtc2dpZCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgJXMuXG4iCi0jfiBtc2dzdHIgIlMnaGEgYWZlZ2l0IGVsIGNvbm5lY3RvciAlcyBhbWIgJWQgJXMuXG4iCi0KLSN+IG1zZ2lkICJBZGRlZCBwYXRoICAgJXMgdG8gJXMgXG4iCi0jfiBtc2dzdHIgIlMnaGEgYWZlZ2l0IGVsIGNhbcOtICVzIGEgJXNcbiIKLQotI34gbXNnaWQgIlJlYnVpbGRpbmcgJXMgKCVzKSAuLi5cbiIKLSN+IG1zZ3N0ciAiUydlc3TDoCByZWNvbnN0cnVpbnQgJXMgKCVzKeKAplxuIgotCi0jfiBtc2dpZCAiVHJ5aW5nIHRvIGxvYWQgJXMgLi4uXG4iCi0jfiBtc2dzdHIgIlMnZXN0w6AgaW50ZW50YW50IGNhcnJlZ2FyICVz4oCmXG4iCi0KLSN+IG1zZ2lkICJFcnJvciBsb2FkaW5nICVzXG4iCi0jfiBtc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gY2FycmVnYXIgJXNcbiIKLQotI34gbXNnaWQgIkxvYWRlZCAlZCBwbHVnaW5zIHdpdGggJWQgJXMuXG4iCi0jfiBtc2dzdHIgIlMnaGFuIGNhcnJlZ2F0ICVkIGNvbm5lY3RvcnMgYW1iICVkICVzLlxuIgotCi0jfiBtc2dpZCAiIGl0ZXJhdGlvbnMgKHN1bSAlIgotI34gbXNnc3RyICJpdGVyYWNpb25zIChzdW1hICUiCi0KLSN+IG1zZ2lkICIgbnMsIGF2ZXJhZ2UgJSIKLSN+IG1zZ3N0ciAiIG5zLCBtaXRqYSAlIgotCi0jfiBtc2dpZCAiIG5zLCBtaW4gJSIKLSN+IG1zZ3N0ciAiIG5zLCBtw61uaW0gJSIKLQotI34gbXNnaWQgIiBucywgbWF4ICUiCi0jfiBtc2dzdHIgIiBucywgbcOgeGltICUiCi0KLSN+IG1zZ2lkICIgbnMpLlxuIgotI34gbXNnc3RyICIgbnMpLlxuIgpkaWZmIC0tZ2l0IGEvcG8vY3MuZ21vIGIvcG8vY3MuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTYxYjNkLi4wMDAwMDAwCi0tLSBhL3BvL2NzLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2NzLnBvIGIvcG8vY3MucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZGNkMzEuLjAwMDAwMDAKLS0tIGEvcG8vY3MucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzM2ICswLDAgQEAKLSMgQ3plY2ggdHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyLgotIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggZ3N0cmVhbWVyJ3MgQ09QWVJJR0hUIEhPTERFUgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4sIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDguCi0jIE1hcmVrIMSMZXJub2Nrw70gPG1hcmVrQG1hbmV0LmN6PiwgMjAxMSwgMjAxMywgMjAxNSwgMjAxNi4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAxLjcuOTBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMy0wMyAxNTozMSswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBNYXJlayDEjGVybm9ja8O9IDxtYXJla0BtYW5ldC5jej5cbiIKLSJMYW5ndWFnZS1UZWFtOiBDemVjaCA8dHJhbnNsYXRpb24tdGVhbS1jc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IGNzXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG49PTEpID8gMCA6IChuPj0yICYmIG48PTQpID8gMSA6IDI7XG4iCi0iWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuN1xuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJWeXBzYXQgdmVyemkgc3lzdMOpbXUgR1N0cmVhbWVyIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIkNow6FwYXQgdsWhZWNobmEgdmFyb3bDoW7DrSBqYWtvIGZhdMOhbG7DrSIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJWeXBzYXQgZG9zdHVwbsOpIGthdGVnb3JpZSBsYWTEm27DrSBhIHNrb27EjWl0IgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iVsO9Y2hvesOtIMO6cm92ZcWIIGxhZMSbbsOtIG9kIDEgKGplbiBjaHlieSkgZG8gOSAodsWhZSkgbmVibyAwIHBybyDFvsOhZG7DvSB2w71zdHVwIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIsOaUk9WRcWHIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIsSMw6Fya2FtaSBvZGTEm2xvdmFuw70gc2V6bmFtIGR2b2ppYyBuw6F6ZXZfa2F0ZWdvcmllOsO6cm92ZcWIIHBybyBuYXN0YXZlbsOtICIKLSJrb25rcsOpdG7DrWNoIMO6cm92bsOtIHBybyBqZWRub3RsaXbDqSBrYXRlZ29yaWUuIFDFmcOta2xhZDogR1NUX0FVVE9QTFVHOjUsIgotIkdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIlNFWk5BTSIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJaYWvDoXphdCBvYmFydmVuw70gbGFkaWPDrSB2w71zdHVwIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLSJabcSbbml0IHJlxb5pbSBvYmFydmVuw60gbGFkaWPDrWhvIHrDoXpuYW11LiBNb8W+bsOpIHJlxb5pbXk6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIlpha8OhemF0IGxhZMSbbsOtIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIlBvdm9saXQgcG9kcm9ibm91IGRpYWdub3N0aWt1IG5hxI3DrXTDoW7DrSB6w6FzdXZuw71jaCBtb2R1bMWvIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiRHZvanRlxI1rb3Ugb2RkxJtsb3ZhbsOpIGNlc3R5IG9ic2FodWrDrWPDrSB6w6FzdXZuw6kgbW9kdWx5IgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIkNFU1RZIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIsSMw6Fya2FtaSBvZGTEm2xvdmFuw70gc2V6bmFtIHrDoXN1dm7DvWNoIG1vZHVsxa8sIGt0ZXLDqSBzZSBtYWrDrSBuYcSNw61zdCBkb3DFmWVkdSwgIgotIm5hdsOtYyBrIHNlem5hbXUgdWxvxb5lbsOpbXUgdiBwcm9txJtubsOpIHByb3N0xZllZMOtIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIlrDgVNVVk7DiV9NT0RVTFkiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICJaYWvDoXphdCB6YWNoeXTDoXbDoW7DrSBwb3J1xaFlbsOtIHNlZ21lbnRhY2UgcMWZaSBuYcSNw610w6Fuw60gesOhc3V2bsO9Y2ggbW9kdWzFryIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJaYWvDoXphdCBha3R1YWxpemFjaSByZWdpc3RydSIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIlpha8OhemF0IHbEm3R2ZW7DrSBwb21vY27DvWNoIHByb2Nlc8WvIHDFmWkgcHJvaGxlZMOhdsOhbsOtIHJlZ2lzdHJ1IgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIlDFmWVww61uYcSNZSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJab2JyYXppdCBwxZllcMOtbmHEjWUgR1N0cmVhbWVyIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIk5lem7DoW3DvSBwxZllcMOtbmHEjSIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiViBzeXN0w6ltdSBHU3RyZWFtZXIgZG/FoWxvIGsgb2JlY27DqSBjaHlixJsgesOha2xhZG7DrSBrbmlob3ZueS4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotIlbDvXZvasOhxZlpIHN5c3TDqW11IEdTdHJlYW1lciBieWxpIHDFmcOtbGnFoSBsw61uw60gbmEgdG8sIGFieSB0w6l0byBjaHlixJsgcMWZacWZYWRpbGkgIgotImvDs2QuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCi1tc2dzdHIgIkludGVybsOtIGNoeWJhIHN5c3TDqW11IEdTdHJlYW1lcjoga8OzZCBuZWltcGxlbWVudG92w6FuLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIkNoeWJhIHN5c3TDqW11IEdTdHJlYW1lcjogc2VsaGFsYSB6bcSbbmEgc3RhdnUgYSBuxJtrdGVyw70gZWxlbWVudCBzZWxoYWwgcMWZaSAiCi0icG9zw61sw6Fuw60gcMWZw61zbHXFoW7DqSBjaHlib3bDqSB6cHLDoXZ5IHMgZMWvdm9kZW0gc2VsaMOhbsOtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm7DrSBjaHliYSBzeXN0w6ltdSBHU3RyZWFtZXI6IHByb2Jsw6ltIHDFmcOtcG9qa3kuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybsOtIGNoeWJhIHN5c3TDqW11IEdTdHJlYW1lcjogcHJvYmzDqW0gcyB2bMOha255LiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkNoeWJhIHN5c3TDqW11IEdTdHJlYW1lcjogcHJvYmzDqW0gcMWZaSB2eWplZG7DoXbDoW7DrS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm7DrSBjaHliYSBzeXN0w6ltdSBHU3RyZWFtZXI6IHByb2Jsw6ltIHMgdWTDoWxvc3RtaS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybsOtIGNoeWJhIHN5c3TDqW11IEdTdHJlYW1lcjogcHJvYmzDqW0gcyBwb3N1bmVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuw60gY2h5YmEgc3lzdMOpbXUgR1N0cmVhbWVyOiBwcm9ibMOpbSBzZSBzY2hvcG5vc3RtaS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuw60gY2h5YmEgc3lzdMOpbXUgR1N0cmVhbWVyOiBwcm9ibMOpbSBzZSDFoXTDrXRreS4iCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICJWYcWhw60gaW5zdGFsYWNpIHN5c3TDqW11IEdTdHJlYW1lciBzY2jDoXrDrSB6w6FzdXZuw70gbW9kdWwuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiQ2h5YmEgc3lzdMOpbXUgR1N0cmVhbWVyOiBwcm9ibMOpbSBzIGhvZGluYW1pLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iVGF0byBhcGxpa2FjZSBzZSBwb2tvdcWhw60gcG91xb7DrXZhdCBmdW5rY2Ugc3lzdMOpbXUgR1N0cmVhbWVyLCBrdGVyw6kgYnlseSAiCi0iemFrw6F6w6FueS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIlYgc3lzdMOpbXUgR1N0cmVhbWVyIGRvxaFsbyBrIGNoeWLEmyBvYmVjbsOpIHBvZHDFr3Juw6kga25paG92bnkuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTmVsemUgaW5pY2lhbGl6b3ZhdCBwb2Rwxa9ybm91IGtuaWhvdm51LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJOZWx6ZSB6YXbFmcOtdCBwb2Rwxa9ybm91IGtuaWhvdm51LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTmVsemUgbmFzdGF2aXQgcG9kcMWvcm5vdSBrbmlob3ZudS4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIkNoeWJhIHDFmWkga8OzZG92w6Fuw60uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIlYgc3lzdMOpbXUgR1N0cmVhbWVyIGRvxaFsbyBrIG9iZWNuw6kgY2h5YsSbIHByb3N0xZllZGvFry4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJQcm9zdMWZZWRlayBuZWJ5bCBuYWxlemVuLiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIlByb3N0xZllZGVrIHNlIHByw6F2xJsgcG91xb7DrXbDoSBuZWJvIG5lbsOtIGsgZGlzcG96aWNpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTmVsemUgb3RldsWZw610IHByb3N0xZllZGVrIHBybyDEjXRlbsOtLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTmVsemUgb3RldsWZw610IHByb3N0xZllZGVrIHBybyB6w6FwaXMuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOZWx6ZSBvdGV2xZnDrXQgcHJvc3TFmWVkZWsgcHJvIMSNdGVuw60gYSB6w6FwaXMuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiTmVsemUgemF2xZnDrXQgcHJvc3TFmWVkZWsuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIk5lbHplIMSNw61zdCB6IHByb3N0xZllZGt1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIk5lbHplIHphcGlzb3ZhdCBkbyBwcm9zdMWZZWRrdS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiTmVsemUgc2UgcG9zb3V2YXQgdiBwcm9zdMWZZWRrdS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJOZWx6ZSBzZSBzeW5jaHJvbml6b3ZhdCBzIHByb3N0xZllZGtlbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiTmVsemUgesOtc2thdC96bcSbbml0IG5hc3RhdmVuw60gcHJvc3TFmWVka3UuIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJWIHByb3N0xZllZGt1IG5lemLDvXbDoSBtw61zdG8uIgotCi1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAiTmVuw60gYXV0b3Jpem92w6FubyBwcm8gcMWZw61zdHVwIGsgcHJvc3TFmWVka3UuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJWIHN5c3TDqW11IEdTdHJlYW1lciBkb8WhbG8gayBvYmVjbsOpIGNoeWLEmyBwcm91ZHUuIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iRWxlbWVudCBuZWltcGxlbWVudHVqZSBvYnNsdWh1IHRvaG90byBwcm91ZHUuIE5haGxhc3RlIHRvIHByb3PDrW0gamFrbyBjaHlidS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAiTmVsemUgemppc3RpdCB0eXAgcHJvdWR1LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiUHJvdWQgamUgamluw6lobyB0eXB1LCBuZcW+IGpha8O9IHRlbnRvIGVsZW1lbnQgb2JzbHVodWplLiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiTmVuw60gcMWZw610b21lbiDFvsOhZG7DvSBrb2Rlaywga3RlcsO9IHVtw60gb2JzbG91xb5pdCB0eXAgdG9ob3RvIHByb3VkdS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIk5lbHplIGRla8OzZG92YXQgcHJvdWQuIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJOZWx6ZSB6YWvDs2RvdmF0IHByb3VkLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJOZWx6ZSBkZW11bHRpcGxleG92YXQgcHJvdWQuIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJOZWx6ZSBtdWx0aXBsZXhvdmF0IHByb3VkLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIlByb3VkIGplIHYgbmVzcHLDoXZuw6ltIGZvcm3DoXR1LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJQcm91ZCBqZSB6YcWhaWZyb3bDoW4gYSBkZcWhaWZyb3bDoW7DrSBuZW7DrSBwb2Rwb3JvdsOhbm8uIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIlByb3VkIGplIHphxaFpZnJvdsOhbiBhIG5lbHplIGplaiBkZcWhaWZyb3ZhdCwgcHJvdG/FvmUgbmVieWwgcG9za3l0bnV0IHZob2Ruw70gIgotImtsw63EjS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiUHJvIGRvbcOpbnUgJXMgbmVuw60gxb7DoWRuw6EgenByw6F2YSBvIGNoeWLEmy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiUHJvIGRvbcOpbnUgJXMgYSBrw7NkICVkIG5lbsOtIMW+w6FkbsOhIHN0YW5kYXJkbsOtIHpwcsOhdmEgbyBjaHlixJsuIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICJWeWJyYW7DqSBob2RpbnkgbmVsemUgcG91xb7DrXQgdiByb3XFmWUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICJDaHliYSBwxZlpIHrDoXBpc3UgbWV6aXBhbcSbdGkgcmVnaXN0cnUgZG8gJXM6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIm7DoXpldiIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgIk9iZWNuxJsgcG91xb7DrXZhbsO9IG7DoXpldiIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJuw6F6ZXYgcHJvIMO6xI1lbCDFmWF6ZW7DrSIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIk9iZWNuxJsgcG91xb7DrXZhbsO9IG7DoXpldjsgcHJvIMO6xI1lbCDFmWF6ZW7DrSIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAidW3Em2xlYyIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiT3NvYmEgxI3DrSBvc29ieSBvZHBvdsSbZG7DqSB6YSBuYWhyw6F2a3UiCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgInVtxJtsZWMgcHJvIMO6xI1lbCDFmWF6ZW7DrSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiT3NvYmEgxI1pIG9zb2J5IG9kcG92xJtkbsOpIHphIG5haHLDoXZrdTsgcHJvIMO6xI1lbCDFmWF6ZW7DrSIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICJhbGJ1bSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICJBbGJ1bSBvYnNhaHVqw61jw60gdGF0byBkYXRhIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgImFsYnVtIHBybyDDusSNZWwgxZlhemVuw60iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiQWxidW0gb2JzYWh1asOtY8OtIHRhdG8gZGF0YTsgcHJvIMO6xI1lbCDFmWF6ZW7DrSIKLQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAidW3Em2xlYyBhbGJhIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJVbcSbbGVjIGRhbsOpaG8gYWxiYSB2IHBvZG9ixJssIGphayBzZSBtw6Egem9icmF6b3ZhdCIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAidW3Em2xlYyBhbGJhIHBybyDDusSNZWwgxZlhemVuw60iCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIlVtxJtsZWMgYWxiYSB2IHBvZG9ixJssIHBvZGxlIGt0ZXLDqSBzZSBtw6EgxZlhZGl0IgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiZGF0dW0iCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgIkRhdHVtLCBrZHkgYnlsYSBkYXRhIHZ5dHZvxZllbmEgKGpha28gc3RydWt0dXJhIEdEYXRlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXR1bSBhIMSNYXMiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgIkRhdHVtIGEgxI1hcywga2R5IGJ5bGEgZGF0YSB2eXR2b8WZZW5hIChqYWtvIHN0cnVrdHVyYSBHc3REYXRlVGltZSkiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAixb7DoW5yIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIsW9w6FuciwgZG8ga3RlcsOpaG8gdGF0byBkYXRhIHBhdMWZw60iCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJwb3puw6Fta2EiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiVm9sbsO9IHRleHQga29tZW50dWrDrWPDrSBkYXRhIgotCi1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAicm96xaHDrcWZZW7DoSBwb3puw6Fta2EiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJWb2xuw70gdGV4dCBrb21lbnR1asOtY8OtIGRhdGEgdmUgdHZhcnUga2zDrcSNPWhvZG5vdGEgbmVibyBrbMOtxI1bY3NdPXBvem7DoW1rYSIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAixI3DrXNsbyBzdG9weSIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLEjMOtc2xvIHN0b3B5IHYgcsOhbWNpIHNiw61ya3kiCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAicG/EjWV0IHN0b3AiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJQb8SNZXQgc3RvcCB2IHLDoW1jaSBzYsOtcmt5LCBkbyBrdGVyw6lobyB0YXRvIHN0b3BhIHBhdMWZw60iCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAixI3DrXNsbyBkaXNrdSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIsSMw61zbG8gZGlza3UgdiByw6FtY2kgc2LDrXJreSIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgInBvxI1ldCBkaXNrxa8iCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAiUG/EjWV0IGRpc2vFryB2IHLDoW1jaSBzYsOtcmt5LCBkbyBrdGVyw6lobyB0ZW50byBkaXNrIHBhdMWZw60iCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAidW3DrXN0xJtuw60iCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotIlDFr3ZvZCBtw6lkaWEgamFrbyBVUkkgKHVtw61zdMSbbsOtLCBrZGUgamUgbmFiw616ZW4gb3JpZ2luw6FsIHNvdWJvcnUgbmVibyBwcm91ZHUpIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgImRvbW92c2vDoSBzdHLDoW5rYSIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLSJEb21vdnNrw6Egc3Ryw6Fua2EgdG9ob3RvIG3DqWRpYSAobmFwxZkuIGRvbW92c2vDoSBzdHLDoW5rYSB1bcSbbGNlIG5lYm8gZmlsbXUpIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgInBvcGlzIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJLcsOhdGvDvSB0ZXh0IHBvcGlzdWrDrWPDrSBvYnNhaCBkYXQiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJ6ZSIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJWZXJ6ZSB0xJtjaHRvIGRhdCIKLQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIklTUkMiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIOKAkyBodHRwOi8vd3d3LmludGVyZ3JhbS5jei9jcy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAib3JnYW5pemFjZSIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiT3puw6FtZW7DrSBvIGF1dG9yc2vDvWNoIHByw6F2ZWNoIGsgZGF0xa9tIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAidXJpIGNvcHlyaWdodHUiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIkFkcmVzYSBVUkkgb3puw6FtZW7DrSBvIGF1dG9yc2vDvWNoIHByw6F2ZWNoIGsgZGF0xa9tIgotCi1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAiemFrw7Nkb3ZhbCIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIkptw6lubyBvc29ieSBuZWJvIG7DoXpldiBvcmdhbml6YWNlIG9kcG92xJtkbsO9Y2ggemEga8OzZG92w6Fuw60iCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICJrb250YWt0IgotCi1tc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiS29udGFrdG7DrSBpbmZvcm1hY2UiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaWNlbmNlIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJMaWNlbmNlIGRhdCIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJ1cmkgbGljZW5jZSIKLQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiQWRyZXNhIFVSSSBsaWNlbmNlIGsgZGF0xa9tIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJ2w71rb25uw70gdW3Em2xlYyIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJWeXN0dXB1asOtY8OtIG9zb2JhIMSNaSBvc29ieSIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJza2xhZGF0ZWwiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgIk9zb2J5IMSNaSBvc29ieSwga3RlcsOpIG5haHLDoXZrdSBzbG/FvmlseSIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAiZGlyaWdlbnQiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIkRpcmlnZW50L3VwxZllc27Em27DrSDDusSNaW5rdWrDrWPDrWhvIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgInRydsOhbsOtIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgIkTDqWxrYSB2IGplZG5vdGvDoWNoIMSNYXN1IEdTdHJlYW1lciAobmFub3Nla3VuZMOhY2gpIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgImtvZGVrIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJLb2RlaywgdmUga3RlcsOpbSBqc291IGRhdGEgdWNob3bDoW5hIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgImtvZGVrIHZpZGVhIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJLb2RlaywgdmUga3RlcsOpbSBqc291IHVjaG92w6FuYSBkYXRhIHZpZGVhIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImtvZGVrIHp2dWt1IgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJLb2RlaywgdmUga3RlcsOpbSBqc291IHVjaG92w6FuYSBkYXRhIHp2dWt1IgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgImtvZGVrIHRpdHVsa8WvIgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJLb2RlaywgdmUga3RlcsOpbSBqc291IHVjaG92w6FuYSBkYXRhIHRpdHVsa8WvIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiZm9ybcOhdCBrb250ZWpuZXJ1IgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIkZvcm3DoXQga29udGVqbmVydSwgdmUga3RlcsOpbSBqZG91IHVjaG92w6FuYSBkYXRhIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAiZGF0b3bDvSB0b2siCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJQxZllc27DvSBuZWJvIHByxa9txJtybsO9IGRhdG92w70gdG9rIHYgYml0ZWNoL3MiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIm5vbWluw6FsbsOtIGRhdG92w70gdG9rIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiTm9taW7DoWxuw60gZGF0b3bDvSB0b2sgdiBiaXRlY2gvcyIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWluaW3DoWxuw60gZGF0b3bDvSB0b2siCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJNaW5pbcOhbG7DrSBkYXRvdsO9IHRvayB2IGJpdGVjaC9zIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJtYXhpbcOhbG7DrSBkYXRvdsO9IHRvayIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIk1heGltw6FsbsOtIGRhdG92w70gdG9rIHYgYml0ZWNoL3MiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICJrb2TDqXIiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJLb2TDqXIgcG91xb7DrXZhbsO9IHBybyBrw7Nkb3bDoW7DrSB0b2hvdG8gcHJvdWR1IgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJ2ZXJ6ZSBrb2TDqXJ1IgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiVmVyemUga29kw6lydSBwb3XFvsOtdmFuw6lobyBwcm8ga8OzZG92w6Fuw60gdG9ob3RvIHByb3VkdSIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAic8OpcmlvdsOpIMSNw61zbG8iCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICJTw6lyaW92w6kgxI3DrXNsbyBzdG9weSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAiaGxhc2l0b3N0IHDFmWVocsOhdsOhbsOtIHN0b3B5IgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiWmVzw61sZW7DrSBzdG9weSB2IGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICLFoXBpxI1rb3bDoSBobGFzaXRvc3QgcMWZZWhyw6F2w6Fuw60gc3RvcHkiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAixaBwacSNa292w6kgemVzw61sZW7DrSBzdG9weSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAiaGxhc2l0b3N0IHDFmWVocsOhdsOhbsOtIGFsYmEiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJaZXPDrWxlbsOtIGFsYmEgdiBkYiIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAixaFwacSNa292w6EgaGxhc2l0b3N0IHDFmWVocsOhdsOhbsOtIGFsYmEiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAixaBwacSNa292w6kgemVzw61sZW7DrSBhbGJhIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgInJlZmVyZW7EjW7DrSDDunJvdmXFiCBobGFzaXRvc3RpIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAiSG9kbm90YSByZWZlcmVuxI1uw60gw7pyb3ZuxJsgemVzw61sZW7DrSBzdG9weSBhIGFsYmEiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJrw7NkIGphenlrYSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgIkvDs2QgamF6eWthIHBybyB0ZW50byBwcm91ZCwgdmUgc2hvZMSbIHMgSVNPLTYzOS0xIG5lYm8gSVNPLTYzOS0yIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAibsOhemV2IGphenlrYSIKLQotbXNnaWQgImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIgotbXNnc3RyICJuw6F6ZXYgamF6eWthICh2ZSB2b2xuw6ltIHR2YXJ1KSwgdmUga3RlcsOpbSBqZSB0ZW50byBwcm91ZCIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJvYnLDoXplayIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIk9icsOhemVrIHNvdXZpc2Vqw61jw60gcyB0w61tdG8gcHJvdWRlbSIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAib2Jyw6F6ZWsgcyBuw6FobGVkZW0iCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIk9icsOhemVrIHMgbsOhaGxlZGVtIHNvdXZpc2Vqw61jw60gcyB0w61tdG8gcHJvdWRlbSIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgInDFmcOtbG9oYSIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIlNvdWJvciBwxZlpcG9qZW7DvSBrIHRvbXV0byBwcm91ZHUiCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICJ0ZW1wbyIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICJUZW1wbyAodiBwb8SNdGVjaCDDumRlcsWvIHphIG1pbnV0dSkgenZ1a3UiCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAia2zDrcSNb3bDoSBzbG92YSIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICLEjMOhcmthbWkgb2RkxJtsb3ZhbsOhIGtsw63EjW92w6Egc2xvdmEgcG9waXN1asOtY8OtIG9ic2FoIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgIm7DoXpldiBtw61zdGEiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotIlBvcGlzbsOpIG3DrXN0byB2IMSNbG92xJtrZW0gxI1pdGVsbsOpIHBvZG9ixJssIGtkZSBieWxvIG3DqWRpdW0gbmFocsOhbm8gbmVibyAiCi0idnl0dm/FmWVubyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAiemVtxJtwaXNuw6EgxaHDrcWZa2EgbcOtc3RhIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0iWmVtxJtwaXNuw6EgxaHDrcWZa2EgbcOtc3RhLCBrZGUgYnlsbyBtw6lkaXVtIG5haHLDoW5vIG5lYm8gdnl0dm/FmWVubywgdmUgc3R1cG7DrWNoICIKLSJwb2RsZSBXR1M4NCAobnVsYSBuYSByb3Zuw61rdSwgesOhcG9ybsOpIGhvZG5vdHkgcHJvIGppxb5uw60gcG9sb2tvdWxpKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgInplbcSbcGlzbsOhIGTDqWxrYSBtw61zdGEiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0iWmVtxJtwaXNuw6EgZMOpbGthIG3DrXN0YSwga2RlIGJ5bG8gbcOpZGl1bSBuYWhyw6FubyBuZWJvIHZ5dHZvxZllbm8sIHZlIHN0dXBuw61jaCAiCi0icG9kbGUgV0dTODQgKG51bGEgbmEgaGxhdm7DrW0gcG9sZWRuw61rdSB2IEdyZWVud2ljaGksIHrDoXBvcm7DqSBob2Rub3R5IHBybyAiCi0iesOhcGFkbsOtIHBvbG9rb3VsaSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICJ6ZW3Em3Bpc27DoSB2w73FoWthIG3DrXN0YSIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSJaZW3Em3Bpc27DoSB2w73FoWthIG3DrXN0YSwga2RlIGJ5bG8gbcOpZGl1bSBuYWhyw6FubyBuZWJvIHZ5dHZvxZllbm8sIHYgbWV0cmVjaCAiCi0icG9kbGUgV0dTODQgKG51bGEgamUgcHLFr23Em3Juw6EgaGxhZGluYSBtb8WZZSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiemVtxJsiCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiQW5nbGlja8O9IG7DoXpldiB6ZW3Emywga2RlIGJ5bG8gbcOpZGl1bSBuYWhyw6FubyBuZWJvIHZ5dHZvxZllbm8iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAibcSbc3RvIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIkFuZ2xpY2vDvSBuw6F6ZXYgbcSbc3RhLCBrZGUgYnlsbyBtw6lkaXVtIG5haHLDoW5vIG5lYm8gdnl0dm/FmWVubyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAidXDFmWVzbsSbbsOtIG3DrXN0YSIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICJNw61zdG8gdiByw6FtY2kgbcSbc3RhLCBrZGUgYnlsbyBtw6lkaXVtIG5haHLDoW5vIG5lYm8gdnl0dm/FmWVubyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJ2b2Rvcm92bsOhIGNoeWJhIG3DrXN0YSIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICIiCi0iUMWZZWRwb2tsw6FkYW7DoSBjaHliYSB2IHVkw6Fuw60gcG9sb2h5IG3DrXN0YSB2ZSB2b2Rvcm92bsOpbSBzbcSbcnUgKHYgbWV0cmVjaCkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgInJ5Y2hsb3N0IHBvaHlidSIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAiIgotIlJ5Y2hsb3N0IHBvaHlidSB6YWNoeXTDoXZhY8OtaG8gemHFmcOtemVuw60sIGt0ZXLDqSBtxJtuw60gc3ZvamkgcG9sb2h1ICh2IG0vcykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJzbcSbciBwb2h5YnUiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJVcsSNdWplIHNtxJtyIHBvaHlidSB6YcWZw616ZW7DrSBwcm92w6FkxJtqw61jw61obyB6YWNoeXTDoXbDoW7DrSBtw6lkaWEuIEplIHByZXplbnRvdsOhbm8gIgotImpha28gc3R1cG7EmyB2IHBvZG9ixJsgZGVzZXRpbm7DqWhvIMSNw61zbGEsIGtkeSAwIHpuYcSNw60gemVtxJtwaXNuw70gc2V2ZXIgYSBqZGUgc2UgIgotInBvIHNtxJtydSBob2Rpbm92w71jaCBydcSNacSNZWsiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgInNtxJtyIHphY2h5dMOhdsOhbsOtIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iVXLEjXVqZSBzbcSbciwga3RlcsO9bSBqZSB6YcWZw616ZW7DrSBuYXNtxJtyb3bDoW5vIGLEm2hlbSB6YWNoeXTDoXbDoW7DrSBtw6lkaWEuIEplICIKLSJwcmV6ZW50b3bDoW5vIGpha28gc3R1cG7EmyB2IHBvZG9ixJsgZGVzZXRpbm7DqWhvIMSNw61zbGEsIGtkeSAwIHpuYcSNw60gemVtxJtwaXNuw70gIgotInNldmVyIGEgamRlIHNlIHBvIHNtxJtydSBob2Rpbm92w71jaCBydcSNacSNZWsiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAibsOhemV2IHBvxZlhZHUiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICIiCi0iTsOhemV2IHBvxZlhZHUgKHRlbGV2aXpuw61obywgcG9kY2FzdG92w6lobyBhcG9kLiksIHplIGt0ZXLDqWhvIG3DqWRpdW0gcG9jaMOhesOtIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICJwb8WZYWQgcHJvIMO6xI1lbHkgxZlhemVuw60iCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJOw6F6ZXYgcG/FmWFkdSAodGVsZXZpem7DrWhvLCBwb2RjYXN0b3bDqWhvIGFwb2QuKSwgemUga3RlcsOpaG8gbcOpZGl1bSBwb2Now6F6w607ICIKLSJwcm8gw7rEjWVseSDFmWF6ZW7DrSIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICLEjcOtc2xvIGVwaXpvZHkiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAixIzDrXNsbyBlcGl6b2R5IHYgcsOhbWNpIMWZYWR5LCBrdGVyw6kgamUgbcOpZGl1bSBzb3XEjcOhc3TDrSIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgIsSNw61zbG8gxZlhZHkiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAixIzDrXNsbyDFmWFkeSB2IHLDoW1jaSBwb8WZYWR1LCBqZWhvxb4gamUgbcOpZGl1bSBzb3XEjcOhc3TDrSIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAidGV4dCIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiVGV4dCBrIG3DqWRpdSwgb2J2eWtsZSB0ZXh0IGh1ZGVibsOtIHNrbGFkYnkiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAic2tsYWRhdGVsIHBybyDDusSNZWx5IMWZYXplbsOtIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiT3NvYmEgxI1pIG9zb2J5LCBrdGVyw6kgesOhem5hbSBzbG/FvmlseTsgcHJvIMO6xI1lbHkgxZlhemVuw60iCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAic2Vza3Vwb3bDoW7DrSIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotIlNrdXBpbnkgdnp0YWh1asOtY8OtIHNlIGsgbcOpZGl1LCBrdGVyw6kgamUgcm96bG/FvmVubyBkbyB2w61jZSBzdG9wLCB0xZllYmEgxI3DoXN0aSAiCi0ia29uY2VydHUuIEpkZSBvIHZ5xaHFocOtIMO6cm92ZcWIIMSNbGVuxJtuw60gbmXFviBqc291IHN0b3B5LCBhbGUgbmnFvsWhw60gbmXFviBqZSBhbGJ1bSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJ1xb5pdmF0ZWxza8OpIGhvZG5vY2Vuw60iCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIkhvZG5vY2Vuw60gcMWZaWTEm2xlbsOpIHXFvml2YXRlbGVtLiDEjMOtbSB2ecWhxaHDrSBob2Rub2NlbsOtLCB0w61tIHNlIHXFvml2YXRlbGkgbcOpZGl1bSAiCi0idsOtYyBsw61iw60iCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICJ2w71yb2JjZSB6YcWZw616ZW7DrSIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIlbDvXJvYmNlIHphxZnDrXplbsOtIHBvdcW+aXTDqWhvIGsgdnl0dm/FmWVuw60gdG9ob3RvIG3DqWRpYSIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAibW9kZWwgemHFmcOtemVuw60iCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIk1vZGVsIHphxZnDrXplbsOtIHBvdcW+aXTDqWhvIGsgdnl0dm/FmWVuw60gdG9ob3RvIG3DqWRpYSIKLQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgIm7DoXpldiBhcGxpa2FjZSIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiQXBsaWthY2UgcG91xb5pdMOhIGsgdnl0dm/FmWVuw60gbcOpZGlhIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiZGF0YSBhcGxpa2FjZSIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIkxpYm92b2xuw6EgYXBsaWthxI1uw60gZGF0YSwga3RlcsOhIGpzb3Ugc2VyaWFsaXpvdsOhbmEgZG8gbcOpZGlhIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIm5hdG/EjWVuw60gb2Jyw6F6a3UiCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIkphayBieSBtxJtsIGLDvXQgb2Jyw6F6ZWsgcMWZZWQgem9icmF6ZW7DrW0gb3RvxI1lbiBuZWJvIHDFmWVrbG9wZW4iCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgInZ5ZGF2YXRlbCIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAiTsOhemV2IHZ5ZGF2YXRlbHN0dsOtIG5lYm8gdnlkYXZhdGVsIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgInp0dsOhcm5pbCIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0iSW5mb3JtYWNlIG8gbGlkZWNoIHN0b2rDrWPDrWNoIHphIG1peG92w6Fuw61tIGEgZGFsxaHDrW0gcG9kb2Juw71tIHpwcmFjb3bDoW7DrW0iCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiesOha2xhZG7DrSBub3RhIE1JREkiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgIsSMw61zbG8gbm90eSBNSURJIHBybyB6dnVrb3ZvdSBzdG9wdS4iCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgInNvdWtyb23DoSBkYXRhIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICJTb3Vrcm9tw6EgZGF0YSIKLQotbXNnaWQgIiwgIgotbXNnc3RyICI7ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICJOZWJ5bGEgbmFsZXplbmEgxb7DoWRuw6EgYWRyZXNhIFVSSSBvdmxhZGHEjWUgcHJvIHByb3Rva29sICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICJTY2jDqW1hIFVSSSDigJ4lc+KAnCBuZW7DrSBwb2Rwb3JvdsOhbm8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiQ0hZQkE6IG9kIGVsZW1lbnR1ICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkRvZGF0ZcSNbsOpIGxhZGljw60gaW5mb3JtYWNlOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAicMWZaXBvamVuw60gbmVtw6Egxb7DoWRuw70gemRyb2ogW3Npbms9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgInDFmWlwb2plbsOtIG5lbcOhIMW+w6FkbsO9IGPDrWwgW3NvdXJjZT0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJ2IGVsZW1lbnR1IOKAniUyJHPigJwgbmVuw60gxb7DoWRuw6Egdmxhc3Rub3N0IOKAniUxJHPigJwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJuZWx6ZSBuYXN0YXZpdCB2bGFzdG5vc3Qg4oCeJXPigJwgdiBlbGVtZW50dSDigJ4lc+KAnCBuYSDigJ4lc+KAnCIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICJPZGxvxb5lbsOpIHByb3BvamVuw60gc2VsaGFsby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIm5lbHplIHDFmWlwb2ppdCBlbGVtZW50IOKAniVz4oCcIGsgZWxlbWVudHUg4oCeJXPigJwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImVsZW1lbnQg4oCeJXPigJwgbmVleGlzdHVqZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAibmVvxI1la8OhdmFuw70gb2RrYXog4oCeJXPigJwg4oCTIGlnbm9ydWplIHNlIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAibmVvxI1la8OhdmFuw70gb2RrYXogcMWZw61wb2preSDigJ4lc+KAnCDigJMgaWdub3J1amUgc2UiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICJuZWx6ZSB6cHJhY292YXQgc2Nob3Bub3N0aSDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5lZXhpc3R1amUgxb7DoWRuw70gY8OtbG92w70gZWxlbWVudCBwcm8gYWRyZXN1IFVSSSDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibmVleGlzdHVqZSDFvsOhZG7DvSB6ZHJvam92w70gZWxlbWVudCBwcm8gYWRyZXN1IFVSSSDigJ4lc+KAnCIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAic3ludGFrdGlja8OhIGNoeWJhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiemFkw6FuIHByw6F6ZG7DvSB6w6Fzb2Juw61rIOKAniVz4oCcLCB0byBuZW7DrSBkb3ZvbGVubyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBiaW4gXCIlc1wiLCB1bnBhY2tpbmcgZWxlbWVudHMiCi1tc2dzdHIgInrDoXNvYm7DrWsg4oCeJXPigJwsIHJvemJhbHVqZSBzZSBlbGVtZW50IgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgInByw6F6ZG7DoSByb3VyYSBuZW7DrSBwb3ZvbGVuYSIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJWxJt0xaFpbmEgdnlyb3Zuw6F2YWPDrWNoIHBhbcSbdMOtIGplIHZ5xZlhemVuYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybsOtIHByb2Jsw6ltIHRva3UgZGF0LiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIkludGVybsOtIGNoeWJhIHRva3UgZGF0LiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiSW50ZXJuw60gY2h5YmEgaG9kaW4uIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICJTZWxoYWxvIG5hbWFwb3bDoW7DrSB2eXJvdm7DoXZhY8OtIHBhbcSbdGkuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkZpbHRyb3ZhdCBzY2hvcG5vc3RpIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLSJPbWV6aXQgcG92b2xlbsOpIHNjaG9wbm9zdGkgKE5VTEwgem5hbWVuw6EgVsWgRUNITlkpLiBOYXN0YXZlbsOtIHTDqXRvIHZsYXN0bm9zdGkgIgotInDFmWViw61yw6Egb2RrYXogbmEgemFkYW7DvSBvYmpla3QgR3N0Q2Fwcy4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICJSZcW+aW0gem3Em255IHNjaG9wbm9zdMOtIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiRmlsdHJvdmF0IGNob3bDoW7DrSB6bcSbbnkgc2Nob3Bub3N0w60iCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICJOZW7DrSB1csSNZW5hIHNsb8W+a2EgcHJvIGRvxI1hc27DqSBzb3Vib3J5LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJOZWx6ZSB2eXR2b8WZaXQgZG/EjWFzbsO9IHNvdWJvciDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOZWx6ZSBvdGV2xZnDrXQgc291Ym9yIOKAniVz4oCcIHBybyDEjXRlbsOtLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIkNoeWJhIHDFmWkgesOhcGlzdSBkbyBzdGFob3ZhbsOpaG8gc291Ym9ydS4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTmVuw60gemFkw6FuIG7DoXpldiBzb3Vib3J1IHBybyB6w6FwaXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTmVsemUgb3RldsWZw610IHNvdWJvciDigJ4lc+KAnCBwcm8gesOhcGlzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiQ2h5YmEgcMWZaSB6YXbDrXLDoW7DrSBzb3Vib3J1IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiQ2h5YmEgcMWZaSBwb3N1bnUgdiBzb3Vib3J1IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiQ2h5YmEgcMWZaSB6w6FwaXN1IGRvIHNvdWJvcnUg4oCeJXPigJwuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk5lbsOtIHphZMOhbiBuw6F6ZXYgc291Ym9ydSBwcm8gxI10ZW7DrS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIk5lbHplIHrDrXNrYXQgaW5mb3JtYWNlIG8g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIuKAniVz4oCcIGplIHNsb8W+a2EuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiU291Ym9yIOKAniVz4oCcIGplIHNva2V0LiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIlNlbGjDoW7DrSBwbyBpdGVyYWPDrWNoIHBvZGxlIHBvxb5hZGF2a3UuIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAic2Nob3Bub3N0aSIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgImRldGVrb3ZhbsOpIHNjaG9wbm9zdGkgdiBwcm91ZHUiCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtaW5pbXVtIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAidnludXRpdCBzY2hvcG5vc3RpIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgInZ5bnV0aXQgc2Nob3Bub3N0aSBiZXogaGxlZMOhbsOtIHR5cHUiCi0KLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiUHJvdWQgbmVvYnNhaHVqZSBkb3N0YXRlayBkYXQuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJQcm91ZCBuZW9ic2FodWplIMW+w6FkbsOhIGRhdGEuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiSW1wbGVtZW50b3ZhbsOhIHJvemhyYW7DrTpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICJsemUgxI3DrXN0IgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgImx6ZSB6YXBpc292YXQiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICJ6YXZyxb5lbsOpIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJsemUgb3Zsw6FkYXQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAibHplIHptxJtuaXQgdmUgc3RhdnUgUFLDgVpETsOJLCBQxZhJUFJBVkVOTywgUE9aQVNUQVZFTk8gbmVibyBQxZhFSFLDgVbDgSIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgImx6ZSBtxJtuaXQgamVuIHZlIHN0YXZ1IFBSw4FaRE7DiSwgUMWYSVBSQVZFTk8gbmVibyBQT1pBU1RBVkVOTyIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICJsemUgbcSbbml0IGplbiB2ZSBzdGF2dSBQUsOBWkROw4kgbmVibyBQxZhJUFJBVkVOTyIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiU291Ym9yeSBuYSDEjWVybsOpIGxpc3RpbsSbOiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIkNlbGtvdsO9IHBvxI1ldDogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIlZCBzb3Vib3IgbmEgxI1lcm7DqSBsaXN0aW7EmyIKLW1zZ3N0clsxXSAiJWQgc291Ym9yeSBuYSDEjWVybsOpIGxpc3RpbsSbIgotbXNnc3RyWzJdICIlZCBzb3Vib3LFryBuYSDEjWVybsOpIGxpc3RpbsSbIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgesOhc3V2bsO9IG1vZHVsIgotbXNnc3RyWzFdICIlZCB6w6FzdXZuw6kgbW9kdWx5IgotbXNnc3RyWzJdICIlZCB6w6FzdXZuw71jaCBtb2R1bMWvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkIHrDoXpuYW0gbmEgxI1lcm7DqSBsaXN0aW7EmyIKLW1zZ3N0clsxXSAiJWQgesOhem5hbXkgbmEgxI1lcm7DqSBsaXN0aW7EmyIKLW1zZ3N0clsyXSAiJWQgesOhem5hbcWvIG5hIMSNZXJuw6kgbGlzdGluxJsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIGZ1bmtjZSIKLW1zZ3N0clsxXSAiJWQgZnVua2NlIgotbXNnc3RyWzJdICIlZCBmdW5rY8OtIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJWeXBzYXQgdsWhZWNobnkgZWxlbWVudHkiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJWeXBzYXQgc2V6bmFtIHNvdWJvcsWvIG5hIMSNZXJuw6kgbGlzdGluxJsiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotIlZ5cHNhdCBzdHJvamVtIHpwcmFjb3ZhdGVsbsO9IHNlem5hbSBmdW5rY8OtLCBrdGVyw6kgcG9za3l0dWplIHphZGFuw70gbmVibyAiCi0idsWhZWNobnkgesOhc3V2bsOpIG1vZHVseS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVxb5pdGXEjW7DqSBzcG9sdSBzIGV4dGVybsOtbWkgbWVjaGFuaXNteSAiCi0icHJvIGF1dG9tYXRpY2tvdSBpbnN0YWxhY2kgesOhc3V2bsO9Y2ggbW9kdWzFryIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiVnlwc2F0IG9ic2FoIHrDoXN1dm7DvWNoIG1vZHVsxa8iCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiWmtvbnRyb2xvdmF0LCB6ZGEgemFkYW7DvSBlbGVtZW50IG5lYm8gesOhc3V2bsO9IG1vZHVsIGV4aXN0dWplIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotIlDFmWkga29udHJvbGUgZXhpc3RlbmNlIGVsZW1lbnR1IG5lYm8gesOhc3V2bsOpaG8gbW9kdWx1IHJvdm7Em8W+IHprb250cm9sb3ZhdCwgIgotInpkYSBqZSBqZWhvIHZlcnplIHN0ZWpuw6EgbmVibyBub3bEm2rFocOtIG5lxb4gemFkYW7DoSIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiVnlwc2F0IHBvZHBvcm92YW7DoSBzY2jDqW1hdGEgVVJJLCB2xI1ldG7EmyBlbGVtZW50xa8sIGt0ZXLDqSBpbXBsZW1lbnR1asOtIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJOZWx6ZSBuYcSNw61zdCBzb3Vib3Igc2UgesOhc3V2bsO9bSBtb2R1bGVtOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJFbGVtZW50IG5lYm8gesOhc3V2bsO9IG1vZHVsIOKAniVz4oCcIG5lZXhpc3R1amVcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIlDFmWVobGVkb3bDqSBzdGF0aXN0aWt5IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiT2JkcsW+ZW5hIHpwcsOhdmEgxI3DrXMuICV1IG9kIGVsZW1lbnR1IOKAniVz4oCcICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiT2JkcsW+ZW5hIHpwcsOhdmEgxI3DrXMuICV1IG9kIHDFmcOtcG9qa3kg4oCeJXM6JXPigJwgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJPYmRyxb5lbmEgenByw6F2YSDEjcOtcy4gJXUgb2Qgb2JqZWt0dSDigJ4lc+KAnCAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiT2JkcsW+ZW5hIHpwcsOhdmEgxI3DrXMuICV1ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk9iZHLFvmVuIGtvbmVjIHByb3VkdSBvZCBlbGVtZW50dSDigJ4lc+KAnC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICIiCi0iTkFMRVpFTiDFoFTDjVRFSzogbmFsZXplbiBlbGVtZW50ZW0g4oCeJXPigJwuXG4iCi0iXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICJOQUxFWkVOIMWgVMONVEVLOiBuYWxlemVuIHDFmcOtcG9qa291IOKAniVzOiVz4oCcLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiTkFMRVpFTiDFoFTDjVRFSzogbmFsZXplbiBvYmpla3RlbSDigJ4lc+KAnC5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJOQUxFWkVOIMWgVMONVEVLXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotIk5BTEVaRU5BIFRBQlVMS0EgUyBPQlNBSEVNOiBuYWxlemVuYSBlbGVtZW50ZW0g4oCeJXPigJwuXG4iCi0iXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJOQUxFWkVOQSBUQUJVTEtBIFMgT0JTQUhFTTogbmFsZXplbmEgb2JqZWt0ZW0g4oCeJXPigJwuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiTkFMRVpFTkEgVEFCVUxLQSBTIE9CU0FIRU1cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iSU5GT1JNQUNFOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJWQVJPVsOBTsONOiBvZCBlbGVtZW50dSAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICIiCi0iVmlkZW8gdmxvxb5lbsOpIHDFmWVkIHphxI3DoXRlaywgxI1la8OhIHNlIG5hIGRva29uxI1lbsOtIHVsb2tsw6Fkw6Fuw60gZG8gdnlyb3Zuw6F2YWPDrSAiCi0icGFtxJt0aeKAplxuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiVmlkZW8gdmxvxb5lbsOpIHDFmWVkIHphxI3DoXRlaywgxI1la8OhIHNlIG5hIGRva29uxI1lbsOtIHByxa9ixJtodeKAplxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICJ1a2zDoWTDoSBzZSBkbyB2eXJvdm7DoXZhY8OtIHBhbcSbdGnigKYiCi0KLW1zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICIiCi0iVWtsw6Fkw6Fuw60gZG8gdnlyb3Zuw6F2YWPDrSBwYW3Em3RpIGhvdG92bywgbmFzdGF2dWplIHNlIHJvdXJhIG5hIFDFmEVIUsOBVsOB4oCmXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJVa2zDoWTDoSBzZSBkbyB2eXJvdm7DoXZhY8OtIHBhbcSbdGksIG5hc3RhdnVqZSBzZSByb3VyYSBuYSBQT1pBU1RBVkVOQeKAplxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAixaDDrcWZw60gc2UgenBvxb5kxJtuw63igKZcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJOYXN0YXZ1amUgc2Ugc3RhdiBuYSAlcyBuYSB6w6FrbGFkxJsgcG/FvmFkYXZrdSBvZCAlc+KAplxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiUMWZZXJ1xaFlbsOtOiBaYXN0YXZ1amUgc2Ugcm91cmHigKZcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICJQcsWvYsSbaDogKCVzKSAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiU2Now6F6w60gZWxlbWVudDogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiT2JkcsW+ZW4ga29udGV4dCBvZCBlbGVtZW50dSDigJ4lc+KAnDogJXM9JXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiVnlwc2F0IMWhdMOtdGt5ICh6bsOhbcOpIHRha8OpIGpha28gbWV0YWRhdGEpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiVnlwc2F0IHRhYnVsa3UgcyBvYnNhaGVtIChrYXBpdG9seSBuZWJvIHZ5ZMOhbsOtKSIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIlZ5cHNhdCBpbmZvcm1hY2UgbyBzdGF2dSBhIHVwb3pvcm7Em27DrSBuYSB2bGFzdG5vc3RpIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiTmV2eXBpc292YXQgxb7DoWRuw6kgaW5mb3JtYWNlIG8gcHLFr2LEm2h1IgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICJacHLDoXZ5IHbDvXN0dXB1IgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLSJLZHnFviBqZSB6YXBudXTDvSBwb2Ryb2Juw70gdsO9cGlzLCBuZXZ5cGlzb3ZhdCBzdGF2b3bDqSBpbmZvcm1hY2UgcHJvIHphZGFub3UgIgotInZsYXN0bm9zdCAobcWvxb5lIGLDvXQgdXZlZGVubyB2w61jZWtyw6F0KSIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIk7DgVpFVi1WTEFTVE5PU1RJIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJOZWluc3RhbG92YXQgb2JzbHVodSB2w71qaW1layIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiVnludWN1amUgc2UgemFrb27EjWVuw60gcHJvdWR1IChFT1MpIHDFmWVkIHZ5cG51dMOtbSByb3VyeSIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiU2VzYsOtcmF0IGEgdnlwc2F0IHDFmWVobGVkb3bDqSBzdGF0aXN0aWt5IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICJDSFlCQTogbmVsemUgc2VzdGF2aXQgcm91cnU6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiQ0hZQkE6IG5lbHplIHNlc3Rhdml0IHJvdXJ1LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLW1zZ3N0ciAiVkFST1bDgU7DjTogY2h5Ym7DoSByb3VyYTogJXNcbiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiQ0hZQkE6IGVsZW1lbnQg4oCecGlwZWxpbmXigJwgbmVieWwgbmFsZXplbi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJOYXN0YXZ1amUgc2Ugcm91cnUgbmEgUE9aQVNUQVZFTkHigKZcbiIKLQotIyBPbiBzdHJpa2U/Ci1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiQ0hZQkE6IFJvdXJhIHNlIG5lY2hjZSBwb3phc3Rhdml0LlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICJSb3VyYSDFvmlqZSBhIG5lcG90xZllYnVqZSBQxZhFRFZJTlVUw43igKZcbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIlJvdXJhIHNlIFDFmEVEVklOVUpF4oCmXG4iCi0KLSMgT24gc3RyaWtlPwotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiQ0hZQkE6IHJvdXJhIHNlIG5lY2hjZSBwxZllZHZpbm91dC5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiUm91cmEgamUgUMWYRURWSU5VVEHigKZcbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiTmFzdGF2dWplIHNlIHJvdXJhIG5hIFDFmEVIUsOBVsOBTsON4oCmXG4iCi0KLSMgT24gc3RyaWtlPwotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiQ0hZQkE6IHJvdXJhIG5lY2hjZSBwxZllaHLDoXZhdC5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICIiCi0iWmFrb27EjWVuw60gcHJvdWR1IChFT1MpIHDFmWkgdnlwbnV0w60gcG92b2xlbm8gLS0gVnludWN1amUgc2UgemFrb27EjWVuw60gcHJvdWR1ICIKLSJ2IHJvdcWZZVxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIiIKLSJaYWtvbsSNZW7DrSBwcm91ZHUgKEVPUykgcMWZaSB2eXBudXTDrSBwb3ZvbGVubyAtLSDEjGVrw6Egc2UgbmEgem5hxI1rdSBFT1MgcG8gIgotInbDvXNreXR1IGNoeWJ5XG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAixIxla8OhIHNlIG5hIGtvbmVjIHByb3VkdSAoRU9TKeKAplxuIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiT2JkcsW+ZW4ga29uZWMgcHJvdWR1IChFT1MpIOKAkyB6YXN0YXZ1amUgc2Ugcm91cmHigKZcbiIKLQotbXNnaWQgIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJQxZllcnXFoWVuw60gcMWZaSDEjWVrw6Fuw60gbmEga29uZWMgcHJvdWR1IOKAkyB6YXN0YXZ1amUgc2Ugcm91cmHigKZcbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJOYXN0YWxhIGNoeWJhIHDFmWkgxI1la8OhbsOtIG5hIGtvbmVjIHByb3VkdSAoRU9TKVxuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIlByb3bDoWTEm27DrSBza29uxI1pbG8gcG8gJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIk5hc3RhdnVqZSBzZSByb3VyYSBuYSBQxZhJUFJBVkVOQeKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICJOYXN0YXZ1amUgc2Ugcm91cmEgbmEgUFLDgVpETsOB4oCmXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJVdm9sxYh1amUgc2Ugcm91cmHigKZcbiIKLQotI34gbXNnaWQgImJpbiIKLSN+IG1zZ3N0ciAiesOhc29ibsOtayIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiSW50ZXJuw60gY2h5YmEgcHJvdWR1IGRhdC4iCmRpZmYgLS1naXQgYS9wby9kYS5nbW8gYi9wby9kYS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmM2I2NGQuLjAwMDAwMDAKLS0tIGEvcG8vZGEuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZGEucG8gYi9wby9kYS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlNGU5Ni4uMDAwMDAwMAotLS0gYS9wby9kYS5wbworKysgL2Rldi9udWxsCkBAIC0xLDEzMzMgKzAsMCBAQAotIyB0cmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIgdG8gRGFuaXNoCi0jIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgotIyBNb2dlbnMgSmFlZ2VyIDxtb2dlbnNqYWVnZXJAZ21haWwuY29tPiwgMjAwNywgMjAxMCwgMjAxMywgMjAxNC4KLSMgSm9lIEhhbnNlbiA8am9lZGFsdG9uMkB5YWhvby5kaz4sIDIwMTUsIDIwMTYuCi0jCi0jIGNvbmR1Y3RvciAtPiBkaXJpZ2VudCAoaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvZ3N0cmVhbWVyLWNvbW1pdHMvMjAxNi1GZWJydWFyeS8wOTI1NDIuaHRtbCkKLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAxLjcuOTBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wNi0yNSAxMzoyNiswMjAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBKb2UgSGFuc2VuIDxqb2VkYWx0b24yQHlhaG9vLmRrPlxuIgotIkxhbmd1YWdlLVRlYW06IERhbmlzaCA8ZGFuc2tAZGFuc2stZ3J1cHBlbi5kaz5cbiIKLSJMYW5ndWFnZTogZGFcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6ICBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCi0iWC1HZW5lcmF0b3I6IExva2FsaXplIDEuNVxuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJVZHNrcml2IEdTdHJlYW1lci12ZXJzaW9uc251bW1lciIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJHw7hyIGFsbGUgYWR2YXJzbGVyIGZhdGFsZSIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJVZHNrcml2IHRpbGfDpm5nZWxpZ2UgZmVqbHPDuGduaW5nc2thdGVnb3JpZXIgb2cgYWZzbHV0IgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iU3RhbmRhcmQgZmVqbHPDuGduaW5nc25pdmVhdSBmcmEgMSAoa3VuIGZlamwpIHRpbCA5IChhbHQpIGVsbGVyIDAgZm9yIGluZ2VuICIKLSJ1ZGRhdGEiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiTklWRUFVIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIktvbW1hc2VwYXJlcmV0IGxpc3RlIG1lZCBrYXRlZ29yaV9uYXZuOm5pdmVhdXBhciB0aWwgYXQgaW5kc3RpbGxlIHNwZWNpZmlra2UgIgotIm5pdmVhdWVyIGZvciBkZSBpbmRpdmlkdWVsbGUga2F0ZWdvcmllci4gRWtzZW1wZWw6IEdTVF9BVVRPUExVRzo1LCIKLSJHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMSVNURSIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJEZWFrdGl2ZXIgYnJ1ZyBhZiBmYXJ2ZXIgdmVkIGZlamxzw7hnbmluZ3MgdWRkYXRhIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLSLDhm5kcmVyIGZhcnZlbMOmZ25pbmdzdGlsc3RhbmQgIGFmIGRlYnVnLWxvZy4gTXVsaWdlIHRpbHN0YW5kZTogdGlsIGZyYSwgIgotImRlYWt0aXZlcmV0LCBhdXRvLCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIkRlYWt0aXZlciBmZWpsc8O4Z25pbmciCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiQWt0aXZlciB1ZGbDuHJsaWcgZGlhZ25vc3RpayB2ZWQgaW5kbMOmc25pbmcgYWYgbW9kdWxlciIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIktvbG9uLXNlcGFyZXJlZGUgc3RpZXIgZGVyIGluZGVob2xkZXIgbW9kdWxlciIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICJTw5hHRVNUSUVSIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIktvbW1hc2VwYXJlcmV0IGxpc3RlIGFmIG1vZHVsZXIgZGVyIHNrYWwgaW5kbMOmc2VzIHDDpSBmb3Jow6VuZCB1ZCBvdmVyIGRlbSBkZXIgIgotImVyIGdlbXQgaSBsaXN0ZW4gbWVkIG1pbGrDuHZhcmlhYmxlciBHU1RfUExVR0lOX1BBVEgiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJNT0RVTEVSIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiRGVha3RpdmVyIGluZGZhbmduaW5nIGFmIHNlZ21lbnRmZWpsIHVuZGVyIGluZGzDpnNuaW5nIGFmIG1vZHVsZXIiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiRGVha3RpdmVyIG9wZGF0ZXJpbmcgYWYgcmVnaXN0cmF0dXIiCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJEZWFrdGl2ZXIgZm9yZ3JlbmluZyBhZiBoasOmbHBlcHJvY2VzIHVuZGVyIHNrYW5uaW5nIGFmIHJlZ2lzdHJhdHVyIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkdTdHJlYW1lciBpbmRzdGlsbGluZ2VyIgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiVmlzIEdTdHJlYW1lci1pbmRzdGlsbGluZ2VyIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIlVrZW5kdCBpbmRzdGlsbGluZyIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIG9wZGFnZWRlIGVuIGdlbmVyZWwgZmVqbCBpIGtlcm5lYmlibGlvdGVrZXQuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSJHU3RyZWFtZXItdWR2aWtsZXJuZSBoYXIgZW5kbnUgaWtrZSBuw6VldCBhdCB0aWxkZWxlIGRlbm5lIGZlamwgZW4gZmVqbGtvZGUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCi1tc2dzdHIgIkludGVybiBHU3RyZWFtZXItZmVqbDoga29kZSBpa2tlIGltcGxlbWVudGVyZXQuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyIGZlamw6IHRpbHN0YW5kc3NraWZ0IGZlamxlZGUsIG9nIGRldCBtaXNseWtrZWRlcyBub2dsZSBwcm9jZXNzZXIgIgotImF0IHNlbmRlIGVuIG9yZGVudGxpZyBmZWpsbWVkZGVsZWxzZSBtZWQgYmVncnVuZGVsc2UgZm9yIGZlamxlbi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lciBmZWpsOiBrb250YWt0cHJvYmxlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lciBmZWpsOiBwcm9ibGVtIG1lZCB0csOlZC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIgZmVqbDogZm9yaGFuZGxpbmdzcHJvYmxlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyIGZlamw6IGjDpm5kZWxzZXNwcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lciBmZWpsOiBzw7hnZXByb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyIGZlamw6IGthcGFiaWxpdGV0c3Byb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybiBHU3RyZWFtZXIgZmVqbDogbcOmcmthdHByb2JsZW0uIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiRGluIEdTdHJlYW1lci1pbnN0YWxsYXRpb24gbWFuZ2xlciBldCBtb2R1bC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIgZmVqbDogdGlkc3Byb2JsZW0uIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLSJEZW5uZSB0aWxmw7hqZWxzZSBwcsO4dmVyIGF0IGJydWdlIEdTdHJlYW1lci1mdW5rdGlvbmFsaXRldCwgZGVyIGVyIGJsZXZldCAiCi0iZnJhdmFsZ3QuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgb3BkYWdlZGUgZW4gZmVqbCBpIGRldCBnZW5lcmVsbGUgaGrDpmxwZWJpYmxpb3Rlay4iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJLdW5uZSBpa2tlIGluaXRpZXJlIGhqw6ZscGViaWJsaW90ZWtldC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBsdWtrZSBoasOmbHBlYmlibGlvdGVrZXQuIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJLdW5uZSBpa2tlIGtvbmZpZ3VyZXJlIGhqw6ZscGViaWJsaW90ZWtldC4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIktvZG5pbmdzZmVqbC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIG9wZGFnZWRlIGVuIGdlbmVyZWwgcmVzc291cmNlZmVqbC4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJSZXNzb3VyY2UgaWtrZSBmdW5kZXQuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiUmVzc291cmNlIG9wdGFnZXQgZWxsZXIgaWtrZSB0aWwgcsOlZGlnaGVkLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSDDpWJuZSByZXNzb3VyY2UgZm9yIGzDpnNuaW5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSDDpWJuZSByZXNzb3VyY2UgZm9yIHNrcml2bmluZy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIkt1bm5lIGlra2Ugw6VibmUgcmVzc291cmNlIGZvciBsw6ZzbmluZyBvZyBza3Jpdm5pbmcuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBsdWtrZSByZXNzb3VyY2UuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgbMOmc2UgZnJhIHJlc3NvdXJjZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJLdW5uZSBpa2tlIHNrcml2ZSB0aWwgcmVzc291cmNlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgotbXNnc3RyICJLdW5uZSBpa2tlIHVkZsO4cmUgc8O4Z25pbmcgcMOlIHJlc3NvdXJjZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJLdW5uZSBpa2tlIHN5bmtyb25pc2VyZSBww6UgcmVzc291cmNlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICJLdW5uZSBpa2tlIGhlbnRlL3PDpnR0ZSBpbmRzdGlsbGluZ2VyIGZyYS9ww6UgcmVzc291cmNlLiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiRGVyIGVyIGlra2UgbWVyZSBsZWRpZyBwbGFkcyBww6UgcmVzc291cmNlbi4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJJa2tlIGF1dG9yaXNlcmV0IHRpbCBhdCB0aWxnw6UgcmVzc291cmNlbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBvcGRhZ2VkZSBlbiBnZW5lcmVsIGZlamwgaSBtZWRpZXN0csO4bW1lbi4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIiIKLSJFbGVtZW50ZXQgaGFyIGlra2UgaW1wbGVtZW50ZXJldCBow6VuZHRlcmluZyBhZiBkZW5uZSBtZWRpZXN0csO4bS4gU2VuZCBlbiAiCi0iZmVqbHJhcHBvcnQuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgYmVzdGVtbWUgbWVkaWVzdHLDuG10eXBlLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiTWVkaWVzdHLDuG1tZW4gZXIgZW4gYW5kZW4gdHlwZSBlbmQgZGVuLCBkZXR0ZSBlbGVtZW50IGthbiBow6VuZHRlcmUuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICIiCi0iRGVyIGVyIGlra2Ugbm9nZXQga29kZWZvcm1hdCB0aWxzdGVkZSwgZGVyIGthbiBow6VuZHRlcmUgZW4gbWVkaWVzdHLDuG0gYWYgIgotImRlbm5lIHR5cGUuIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJLdW5uZSBpa2tlIGFma29kZSBtZWRpZXN0csO4bW1lbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgaW5ka29kZSBtZWRpZXN0csO4bW1lbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBhZm11bHRpcGxla3NlIG1lZGllc3Ryw7htbWVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBtdWx0aXBsZWtzZSBtZWRpZXN0csO4bW1lbi4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJNZWRpZXN0csO4bW1lbiBlciBpIGV0IGZvcmtlcnQgZm9ybWF0LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJNZWRpZXN0csO4bW1lbiBlciBrb2RldCBvZyBhZmtvZG5pbmcgZXIgaWtrZSB1bmRlcnN0w7h0dGV0LiIKLQotbXNnaWQgIiIKLSJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCi0iYmVlbiBzdXBwbGllZC4iCi1tc2dzdHIgIiIKLSJNZWRpZXN0csO4bW1lbiBlciBrb2RldCBvZyBrYW4gaWtrZSBhZmtvZGVzIGZvcmRpIGRlciBpa2tlIGVyIGdpdmV0IGVuICIKLSJwYXNzZW5kZSBuw7hnbGUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIkluZ2VuIGZlamxtZWRkZWxlbHNlIGZvciBkb23Dpm5lICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICJJbmdlbiBzdGFuZGFyZCBmZWpsbWVkZGVsZWxzZSBmb3IgZG9tw6ZuZSAlcyBvZyBrb2RlICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiVmFsZ3QgdGlkIGthbiBpa2tlIGJydWdlcyBpIHLDuHJsZWRuaW5nZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICJLdW5uZSBpa2tlIHNrcml2ZSByZWdpc3RyYXR1cmNhY2hlIHRpbCAlczogJXMiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAidGl0ZWwiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJhbG1pbmRlbGlndCBicnVndCB0aXRlbCIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJzb3J0ZXJpbmdzc3RyZW5nIGZvciB0aXRlbCIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsbWluZGVsaWd0IGJydWd0IHRpdGVsIHRpbCBzb3J0ZXJpbmdzYnJ1ZyIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAia3Vuc3RuZXIiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgInBlcnNvbmVyIGFuc3ZhcmxpZ2UgZm9yIG9wdGFnZWxzZW4iCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgInNvcnRlcmluZ3NzdHJlbmcgZm9yIGt1bnN0bmVyIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwZXJzb24sIGRlciBlciBhbnN2YXJsaWcgZm9yIG9wdGFnZWxzZW4sIHRpbCBzb3J0ZXJpbmdzYnJ1ZyIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICJhbGJ1bSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICJhbGJ1bSBkZXIgaW5kZWhvbGRlciBkaXNzZSBkYXRhIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgInNvcnRlcmluZ3NzdHJlbmcgZm9yIGFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsYnVtIGRlciBpbmRlaG9sZGVyIGRpc3NlIGRhdGEsIHRpbCBzb3J0ZXJpbmdzYnJ1ZyIKLQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAiYWxidW1rdW5zdG5lciIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiS3Vuc3RuZXJlbiBmb3IgaGVsZSBhbGJ1bW1ldCwgc29tIGRldCBza2FsIHZpc2VzIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJzb3J0ZXJpbmdzc3RyZW5nIGZvciBhbGJ1bWt1bnN0bmVyIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICJLdW5zdG5lcmVuIGZvciBoZWxlIGFsYnVtbWV0LCB0aWwgc29ydGVyaW5nc2JydWciCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICJkYXRvIgotCi1tc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXRvIGZvciBvcHJldHRlbHNlIGFmIGRhdGEgKHNvbSBpIGVuIEdyZWdvcmlhbnNrIGRhdG9zdHJ1a3R1cikiCi0KLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAiZGF0byBvZyB0aWQiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdG8gb2cgdGlkIGZvciBvcHJldHRlbHNlIGFmIGRhdGEgKHNvbSBlbiBHc3REYXRlIFRpbWUtc3RydWt0dXIpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgImdlbnJlIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImdlbnJlIGRpc3NlIGRhdGEgdGlsaMO4cmVyIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAia29tbWVudGFyIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgImZyaSBrb21tZW50YXJ0ZWtzdCB0aWwgZGF0YWVuZSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgInVkdmlkZXQga29tbWVudGFyIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0iZnJpIGtvbW1lbnRhcnRla3N0IHRpbCBkYXRhZW5lIGkgdGFzdGU9dsOmcmRpIGVsbGVyIHRhc3RlW2VuXT1rb21tZW50YXIgZm9ybSIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAic3Bvcm51bW1lciIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJzcG9ybnVtbWVyIGluZGVuIGZvciBlbiBzYW1saW5nIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgInNwb3J0w6ZsbGluZyIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgInTDpmxsaW5nIGFmIHNwb3IgaW5kZW4gZm9yIGRlbiBzYW1saW5nIGRldHRlIHNwb3IgdGlsaMO4cmVyIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgInNraXZlbnVtbWVyIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAic2tpdmVudW1tZXIgaW5kZW4gZm9yIGVuIHNhbWxpbmciCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICJza2l2ZXTDpmxsaW5nIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgInTDpmxsaW5nIGFmIHNraXZlciBpbmRlbmZvciBkZW4gc2FtbGluZyBkZW5uZSBza2l2ZSB0aWxow7hyZXIiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAic3RlZCIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0iTWVkaWV0cyBvcHJpbmRlbHNlIHNvbSBlbiBVUkkgKGFkcmVzc2VuLCBodm9yIGRlbiBvcmlnaW5hbGUgZmlsIGVsbGVyIHN0csO4bSAiCi0iZXIpIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgImhqZW1tZXNpZGUiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICJNZWRpZXRzIGhqZW1tZXNpZGUgKGR2cy4gaGplbW1lc2lkZSBmb3Iga3Vuc3RuZXIgZWxsZXIgZmlsbSkiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAiYmVza3JpdmVsc2UiCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgImtvcnQgdGVrc3QgZGVyIGJlc2tyaXZlciBpbmRob2xkZXQgaSBkYXRhZW5lIgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAidmVyc2lvbiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJ2ZXJzaW9uIGFmIGRpc3NlIGRhdGEiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2UgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAib3JnYW5pc2F0aW9uIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJvcGhhdnNyZXQiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJvcGhhdnNyZXRzbm90aXRzIGZvciBkYXRhZW5lIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiVVJJIG1lZCBvcGhhdnNyZXQiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSB0aWwgb3BoYXZzcmV0c25vdGl0cyBmb3IgZGF0YWVuZSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgImluZGtvZGV0IGFmIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAibmF2biBww6UgaW5ka29kZW5kZSBwZXJzb24gZWxsZXIgb3JnYW5pc2F0aW9uIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAia29udGFrdCIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImtvbnRha3RpbmZvcm1hdGlvbiIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgImxpY2VucyIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAibGljZW5zIGZvciBkYXRhIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgIlVSSSBtZWQgbGljZW5zIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgdGlsIGxpY2VucyBmb3IgZGF0YSIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAib3B0csOmZGVuZGUiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVyc29uZXIgZGVyIG9wdHLDpmRlciIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJrb21wb25pc3QiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgInBlcnNvbihlcikgZGVyIGtvbXBvbmVyZWRlIG9wdGFnZWxzZW4iCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgImRpcmlnZW50IgotCi0jIEplZyB0cm9yICJyZWZpbmVtZW50IiByZWZlcmVyZXIgdGlsIGF0IGRlIHNrZWxuZXIgYmVkcmUgbWVsbGVtIGh2ZW0KLSMgZGVyIGRpcmlnZXJlciBvZyBvcGbDuHJlci4gIEYuZWtzLiBzdMOlciBkZXIgb2Z0ZXN0IG5hdm5lIHDDpSBkaXJpZ2VudAotIyBzYW10IHNvbGlzdGVyIGkga29uY2VydGVyLCBvZy9lbGxlciBkZSB2aWd0aWdzdGUgc2FuZ2VyZSAob3BlcmEgb3N2LikKLSMgTcOlc2tlIG1hbiBrYW4gZXJzdGF0dGUgZGV0IG1lZCAtYW5naXZlbHNlIGVsbGVyIG5vZ2V0IGFuZGV0IGluZGlyZWt0ZS4gIElkZWVyPwotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiZGlyaWdlbnQvb3Bmw7hyZXItYW5naXZlbHNlIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgInZhcmlnaGVkIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgImzDpm5nZGUgaSBHU3RyZWFtZXItdGlkc2VuaGVkZXIgKG5hbm9zZWt1bmRlcikiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAia29kZWZvcm1hdCIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiZGV0IGtvZGVmb3JtYXQgZGF0YWVuZSBlciBnZW10IGkiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAia29kbmluZ3Nmb3JtYXQgZm9yIGJpbGxlZGVyIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJkZXQga29kZWZvcm1hdCB2aWRlb2RhdGFlbmUgZXIgZ2VtdCBpIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImtvZG5pbmdzZm9ybWF0IGZvciBseWQiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImRldCBseWRrb2RlZm9ybWF0IGRhdGFlbmUgZXIgZ2VtdCBpIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgImtvZG5pbmdzZm9ybWF0IGZvciB1bmRlcnRla3N0ZXIiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImRldCBrb2RlZm9ybWF0LCB1bmRlcnRla3N0ZXJuZSBlciBnZW10IGkiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJiZWhvbGRlcmZvcm1hdCIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJkZXQgYmVob2xkZXJmb3JtYXQgZGF0YWVuZSBlciBnZW10IGkiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJiaXRoYXN0aWdoZWQiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJwcsOmY2lzIGVsbGVyIGdlbm5lbXNuaXRsaWcgYml0aGFzdGlnaGVkIGkgYml0L3Nla3VuZCIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAiZmFrdGlzayBiaXRoYXN0aWdoZWQiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJmYWt0aXNrIGJpdGhhc3RpZ2hlZCBpIGJpdC9zZWt1bmQiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm1pbmltYWwgYml0aGFzdGlnaGVkIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibWluaW1hbCBiaXRoYXN0aWdoZWQgaSBiaXQvc2VrdW5kIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJtYWtzaW1hbCBiaXRoYXN0aWdoZWQiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtYWtzaW1hbCBiaXRoYXN0aWdoZWQgaSBiaXQvc2VrdW5kIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAiaW5ka29kZXIiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJpbmRrb2RlciBkZXIgYnJ1Z2VzIHRpbCBkZW5uZSBtZWRpZXN0csO4bSIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAiaW5ka29kZXIgdmVyc2lvbiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgImtvZGVydmVyc2lvbiBicnVndCB0aWwgaW5ka29kbmluZyBhZiBkZW5uZSBtZWRpZXN0csO4bSIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAic2VyaWUiCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICJzZXJpZW51bW1lciBww6Ugc3BvciIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAiZ2Vuc3BpbG5pbmdzZm9yc3TDpnJrbmluZyBzcG9yZm9yc3TDpnJrbmluZyIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgInNwb3Jmb3JzdMOmcmtuaW5nIGkgZEIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgImdlbnNwaWxuaW5nc2ZvcnN0w6Zya25pbmcgc3BvciBtYWtzaW11bSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJzcG9yZXRzIG1ha3NpbXVtIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJnZW5zcGlsbmluZ3Nmb3JzdMOmcmtuaW5nIGFsYnVtZm9yc3TDpnJrbmluZyIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgImFsYnVtZm9yc3TDpnJrbmluZyBpIGRCIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJnZW5zcGlsbmluZ3Nmb3JzdMOmcmtuaW5nIGFsYnVtIG1ha3NpbXVtIgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgImFsYnVtbWV0cyBtYWtzaW11bSIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICJnZW5zcGlsbmluZ3Nmb3JzdMOmcmtuaW5nIHJlZmVyZW5jZW5pdmVhdSIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgInJlZmVyZW5jZW5pdmVhdSBmb3Igc3BvciBvZyBhbGJ1bXMgZm9yc3TDpnJrbmluZ3N2w6ZyZGllciIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgInNwcm9na29kZSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgIiIKLSJzcHJvZ2tvZGUgZm9yIGRlbm5lIG1lZGllc3Ryw7htLCBpIG92ZXJlbnNzdGVtbWVsc2UgbWVkIElTTy02MzktMSBlbGxlciAiCi0iSVNPLTYzOS0yIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAic3Byb2duYXZuIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgImZyaWZvcm0gbmF2biBww6UgZGV0IHNwcm9nIGRlbm5lIG1lZGllc3Ryw7htIGVyIGkiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAiYmlsbGVkZSIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImJpbGxlZGUgcmVsYXRlcmV0IHRpbCBkZW5uZSBtZWRpZXN0csO4bSIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiZm9yaMOlbmRzdmlzIGJpbGxlZGUiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImZvcmjDpW5kc3ZpcyBiaWxsZWRlIHJlbGF0ZXJldCB0aWwgZGVubmUgbWVkaWVzdHLDuG0iCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJ2ZWRow6ZmdG5pbmciCi0KLW1zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJmaWwgdmVkaMOmZnRldCBkZW5uZSBtZWRpZXN0csO4bSIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgInNsYWcgcHIuIG1pbnV0IgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgImFudGFsIHNsYWcgcHIuIG1pbnV0IHZlZCBhdWRpbyIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICJuw7hnbGVvcmQiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAia29tbWFzZXBhcmVyZWRlIG7DuGdsZW9yZCBkZXIgYmVza3JpdmVyIGluZGhvbGRldCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICJnZW9ncmFmaXNrIHN0ZWRuYXZuIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLSJsw6ZzYmFyIHN0ZWRiZXNrcml2ZWxzZSBhZiBodm9yIG1lZGlldCBlciBibGV2ZXQgb3B0YWdldCBlbGxlciBwcm9kdWNlcmV0IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICJnZW9ncmFmaXNrIGJyZWRkZWdyYWQiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSJnZW9ncmFmaXNrIGJyZWRkZWdyYWQgaHZvciBtZWRpZXQgZXIgYmxldmV0IG9wdGFnZXQgZWxsZXIgcHJvZHVjZXJldCwgaSAiCi0iZ3JhZGVyIGVmdGVyIFdHUzg0ICjDpmt2YXRvciBlciBudWwsIG9nIHN5ZGxpZ2UgYnJlZGRlZ3JhZGVyIGVyIG5lZ2F0aXZlKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgImdlb2dyYWZpc2sgbMOmbmdkZWdyYWQiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0iZ2VvZ3JhZmlzayBsw6ZuZ2RlZ3JhZCBodm9yIG1lZGlldCBlciBibGV2ZXQgb3B0YWdldCBlbGxlciBwcm9kdWNlcmV0LCBpICIKLSJncmFkZXIgZWZ0ZXIgV0dTODQgKEdyZWVud2ljaC9VSyBlciBudWwsIG9nIHZlc3RsaWdlIGzDpm5nZGVncmFkZXIgZXIgIgotIm5lZ2F0aXZlKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgImdlb2dyYWZpc2sgaMO4amRlIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotImdlb2dyYWZpc2sgaMO4amRlIGh2b3IgbWVkaWV0IGVyIGJsZXZldCBvcHRhZ2V0IGVsbGVyIHByb2R1Y2VyZXQsIGkgbWV0ZXIgIgotImVmdGVyIFdHUzg0IChnZW5uZW1zbml0bGlnIHZhbmRzdGFuZCBlciBudWwpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgImdlb2dyYWZpc2sgcGxhY2VyaW5nIGxhbmQiCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAibGFuZCAoZGFuc2sgbmF2bikgaHZvciBtZWRpZXQgZXIgYmxldmV0IG9wdGFnZXQgZWxsZXIgcHJvZHVjZXJldCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICJnZW9ncmFmaXNrIGJ5IgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgImJ5IChkYW5zayBuYXZuKSBodm9yIG1lZGlldCBlciBibGV2ZXQgb3B0YWdldCBlbGxlciBwcm9kdWNlcmV0IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJnZW9ncmFmaXNrIHVuZGVyaW5kZGVsaW5nIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLSJlbiBzdGVkYW5naXZlbHNlIGluZGVuZm9yIGVuIGJ5IGh2b3IgbWVkaWV0IGVyIGJsZXZldCBvcHRhZ2V0IGVsbGVyICIKLSJwcm9kdWNlcmV0IChmLmVrcy4gbmFib2xhZ2V0KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJnZW9ncmFmaXNrIHBsYWNlcmluZyBob3Jpc29udGFsZmVqbCIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICJmb3J2ZW50ZXQgZmVqbCBpIGRlbiBob3Jpc29udGFsZSBwb3NpdGlvbnNhbmdpdmVsc2UgKGkgbWV0ZXIpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJnZW9ncmFmaXNrIGJldsOmZ2Vsc2VzaGFzdGlnaGVkIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICJiZXbDpmdlbHNlc2hhc3RpZ2hlZCBhZiBkZXQgb3B0YWdlbmRlIHVkc3R5ciB1bmRlciBvcHRhZ2Vsc2VuIGkgbS9zIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiZ2VvZ3JhZmlzayBiZXbDpmdlbHNlc3JldG5pbmciCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJhbmdpdmVyIG9wdGFnZXJldG5pbmdlbiBmb3IgdWRzdHlyZXQgZGVyIG9wdG9nIG1lZGlldC4gRGV0IGFuZ2l2ZXMgbWVkICIKLSJrb21tYXRhbCwgaHZvciAwIGVyIGdlb2dyYWZpc2sgbm9yZCwgb2cga29tbWF0YWxsZXQgw7hnZXMgbWVkIHVyZXRzIHJldG5pbmciCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgImdlb2dyYWZpc2sgb3B0YWdlbHNlc3JldG5pbmciCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJhbmdpdmVyIG9wdGFnZXJldG5pbmdlbiBmb3IgdWRzdHlyZXQgZGVyIG9wdG9nIG1lZGlldC4gRGV0IGFuZ2l2ZXMgbWVkICIKLSJrb21tYXRhbCwgaHZvciAwIGVyIGdlb2dyYWZpc2sgbm9yZCwgb2cga29tbWF0YWxsZXQgw7hnZXMgbWVkIHVyZXRzIHJldG5pbmciCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAidWRzZW5kZWxzZW5zIG5hdm4iCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICJOYXZuZXQgcMOlIHNlcmllbiB0di0gZWxsZXIgcG9kY2FzdHVkc2VuZGVsc2VuIG1lZGlldCBzdGFtbWVyIGZyYSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAic29ydGVyaW5nc3N0cmVuZyBmb3IgdWRzZW5kZWxzZW4iCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJOYXZuZXQgcMOlIHNlcmllbiB0di0gZWxsZXIgcG9kY2FzdHVkc2VuZGVsc2VuIG1lZGlldCBzdGFtbWVyIGZyYSwgdGlsICIKLSJzb3J0ZXJpbmdzYnJ1ZyIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICJlcGlzb2RlbnVtbWVyIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIkVwaXNvZGVudW1tZSBpIGRlbiDDpXJnYW5nIG1lZGlldCBzdGFtbWVyIGZyYSIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgInPDpnNvbm51bW1lciIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJTw6Zzb25udW1tZXJldCBzb20gdWRzZW5kZWxzZW4gaSBtZWRpZXQgc3RhbW1lciBmcmEiCi0KLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgInNhbmd0ZWtzdCIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiU2FuZ3Rla3N0ZW4gaSBtZWRpZXQsIGFsbWluZGVsaWd0IGJydWd0IGZvciBzYW5nZSIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJzb3J0ZXJpbmdzc3RyZW5nIGZvciBrb21wb25pc3QiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwZXJzb24oZXIpIGRlciBrb21wb25lcmVkZSBvcHRhZ2Vsc2VuLCB0aWwgc29ydGVyaW5nc2JydWciCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiZ3J1cHBlcmluZyIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotIkdydXBwZXJlbGF0ZXJldCBtZWRpZSBkZXIgc3DDpm5kZXIgb3ZlciBmbGVyZSBudW1yZSwgc29tIGYuZWtzLiBkZSAiCi0iZm9yc2tlbGxpZ2Ugc2F0c2VyIGkgZW4ga29uY2VydC4gRGV0IGhhciBow7hqZXJlIG5pdmVhdSBlbmQgZXQgc3Bvciwgb2cgIgotImxhdmVyZSBlbmQgZXQgYWxidW0iCi0KLW1zZ2lkICJ1c2VyIHJhdGluZyIKLW1zZ3N0ciAiYnJ1Z2VydnVyZGVyaW5nIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJWdXJkZXJpbmcgdGlsZGVsdCBhZiBlbiBicnVnZXIuIEpvIGjDuGplcmUgcmFuZ2VyaW5nLCBkZXN0byBiZWRyZSBrYW4gIgotImJydWdlcmVuIGxpZGUgbWVkaWV0IgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiZnJlbXN0aWxsZXIgYWYgdWRzdHlyZXQiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJGcmVtc3RpbGxlciBhZiB1ZHN0eXJldCBkZXIgZXIgYnJ1Z3QgdGlsIGF0IG9wcmV0dGUgZGV0dGUgbWVkaWUiCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgInVkc3R5cmV0cyBtb2RlbCIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTW9kZWwgYWYgZGV0IHVkc3R5ciBkZXIgZXIgYnJ1Z3QgdGlsIGF0IGZyZW1zdGlsbGUgbWVkaWV0IgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAicHJvZ3JhbW5hdm4iCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIlByb2dyYW0gYnJ1Z3QgdGlsIGF0IG9wcmV0dGUgbWVkaWV0IgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAicHJvZ3JhbWRhdGEiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICJWaWxrw6VybGlnZSBwcm9ncmFtZGF0YSBkZXIgc2thbCBnZW1tZXMgaSBtZWRpZXQiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAiYmlsbGVkZXRzIG9yaWVudGVyaW5nIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICJIdm9yZGFuIGV0IGJpbGxlZGUgc2thbCByb3RlcmVzIGVsbGVyIHZlbmRlcyBmw7hyIHZpc25pbmciCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgInVkZ2l2ZXIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk3DpnJrZSBlbGxlciB1ZGdpdmVyIG5hdm4iCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAiZm9ydG9sa2V0LWFmIgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgIkluZm9ybWF0aW9uIG9tIHBlcnNvbmVybmUgYmFnIGV0IHJlbWl4IG9nIGxpZ25lbmRlIGZvcnRvbGtuaW5nZXIiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAibWlkaS1iYXNlLW5vZGUiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgIk1pZGktbm9kZW51bW1lciBww6UgbHlkc3BvcmV0LiIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAicHJpdmF0ZS1kYXRhIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICJQcml2YXRlIGRhdGEiCi0KLW1zZ2lkICIsICIKLW1zZ3N0ciAiLCAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gVVJJIGhhbmRsZXIgZm9yIHRoZSAlcyBwcm90b2NvbCBmb3VuZCIKLW1zZ3N0ciAiSW5nZW4gVVJJIGZvcnRvbGtlciBmdW5kZXQgdGlsICVzIHByb3Rva29sbGVuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICJVUkkgc2tlbWFldCAnJXMnIGVyIGlra2UgdW5kZXJzdMO4dHRldCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJGRUpMOiBmcmEgZWxlbWVudCAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJZZGVybGlnZXJlIGZlamxzw7hnbmluZ3NpbmZvcm1hdGlvbjpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIkhlbnZpc25pbmdlbiBoYXIgaW5nZW4ga2lsZGUgW3Npbms9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgIkhlbnZpc25pbmdlbiBoYXIgaW5nZW4gZGVzdGluYXRpb24gW2tpbGRlPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImluZ2VuIGVnZW5za2FiIFwiJXNcIiBmb3IgZWxlbWVudCBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJrdW5uZSBpa2tlIHPDpnR0ZSBlZ2Vuc2thYiBcIiVzXCIgZm9yIGVsZW1lbnQgXCIlc1wiIHRpbCBcIiVzXCIiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiRm9yc2lua2V0IG9wcmV0dGVsc2UgYWYgZm9yYmluZGVsc2UgbWlzbHlra2VkZXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJrdW5uZSBpa2tlIGzDpm5rZSAlcyB0aWwgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImludGV0IGVsZW1lbnQgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJ1dmVudGV0IHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmVyZXIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJ1dmVudGV0IHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JlcmVyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAia3VubmUgaWtrZSB0b2xrZSBrYXBhYmlsaXRldGVuIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgImludGV0IHVkZ2FuZ3NlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJpbnRldCBraWxkZWVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgInN5bnRha3NmZWpsIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAic3BlY2lmaWNlcmV0IHRvbXQgbGFnZXIgXCIlc1wiLCBlciBpa2tlIHRpbGxhZHQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJpbnRldCBsYWdlciBcIiVzXCIsIHVkcGFra2VyIGVsZW1lbnRlciIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJ0b20gcsO4cmxlZG5pbmcgaWtrZSB0aWxsYWR0IgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIkVuIG1hc3NlIGFmIGJ1ZmZlcmVucyBpbmRob2xkIHNtaWRlcyB2w6ZrLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuIGRhdGFzdHLDuG1zcHJvYmxlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJJbnRlcm4gZGF0YXN0csO4bXNmZWpsLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiRmVqbCBpIGludGVybnQgdXIuIgotCi0jIEluZ2VuIGlkw6kgb20gaHZhZCBkZSBtZW5lciBtZWQgbWFwIGhlciwgbWVuICJiZWhhbmRsaW5nIiBlbGxlcgotIyBtdWxpZ3ZpcyBrb3J0bMOmZ2dlIGt1bm5lIG9nc8OlIGTDpmtrZS4gIE1lbiBkZXQga2FuIHNhZ3RlbnMgc2tlIGF0Ci0jIG92ZXJzw6Z0dGUgdmlya2VyIG9nc8OlLi4uCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICJGZWpsZWRlIHZlZCBiZWhhbmRsaW5nIGFmIGJ1ZmZlci4iCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiRmlsdGVya2FwYWJpbGl0ZXQiCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIkJlZ3LDpm5zIGRlbiBtdWxpZ2UgdGlsbGFkdGUga2FwYWJpbGl0ZXQgKE5VTCBiZXR5ZGVyIEFMVCkuIFPDpnR0ZXMgZGVubmUgIgotImVnZW5za2FiIGdpdmVzIGVuIHJlZmVyZW5jZSB0aWwgZGV0IGxldmVyZWRlIEdzdENhcHMgb2JqZWt0LiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIkNhcHMtw6ZuZHJpbmdzdGlsc3RhbmQiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICJGaWx0cmVyIGNhcHMtw6ZuZHJpbmdzb3Bmw7hyc2VsIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiRGVyIGVyIGlra2UgYW5naXZldCBlbiBtYXBwZSB0aWwgbWlkbGVydGlkaWdlIGZpbGVyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJLdW5uZSBpa2tlIG9wcmV0dGUgZGVuIG1pZGxlcnRpZGlnZSBmaWwgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkt1bm5lIGlra2Ugw6VibmUgZmlsZW4gXCIlc1wiIGZvciBsw6ZzbmluZy4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICJGZWpsIHVuZGVyIHNrcml2bmluZyB0aWwgZG93bmxvYWRmaWxlbi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiSW50ZXQgZmlsbmF2biBzcGVjaWZpY2VyZXQgZm9yIHNrcml2bmluZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJLdW5uZSBpa2tlIMOlYm5lIGZpbGVuIFwiJXNcIiBmb3Igc2tyaXZuaW5nLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRmVqbCB2ZWQgbHVrbmluZyBhZiBmaWxlbiBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJGZWpsIHVuZGVyIHPDuGduaW5nIGkgZmlsZW4gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRmVqbCB1bmRlciBza3Jpdm5pbmcgdGlsIGZpbGVuIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiSW50ZXQgZmlsbmF2biBzcGVjaWZpY2VyZXQgZm9yIGzDpnNuaW5nLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBoZW50ZSBpbmZvIHRpbCBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIlwiJXNcIiBlciBldCBrYXRhbG9nLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIkZpbGVuIFwiJXNcIiBlciBlbiBzb2trZWwuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiRmVqbGVkZSBlZnRlciBpdGVyYXRpb25lciBzb20gZm9yZXNwdXJndC4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJrYXBhYmlsaXRldGVyIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAia29uc3RhdGVyZXQga2FwYWJpbGl0ZXQgaSBtZWRpZXN0csO4bSIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIm1pbmltdW0iCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICJnZW5uZW10dmluZyBrYXBhYmlsaXRldGVyIgotCi0jIHR5cGVmaW5kIC0gb3ZlcnPDpnR0ZXMgbWVkID8/Pz8/Ci1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgImdlbm5lbXR2aW5nIGthcGFiaWxpdGV0ZXIgdWRlbiBhdCBnZW5uZW1mw7hyZSBlbiB0eXBlZmluZCIKLQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJTdHLDuG0gaW5kZWhvbGRlciBpa2tlIG5vayBkYXRhLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiTWVkaWVzdHLDuG0gaW5kZWhvbGRlciBpbmdlbiBkYXRhLiIKLQotbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCi1tc2dzdHIgIkltcGxlbWVudGVyZWRlIGdyw6Zuc2VmbGFkZXI6XG4iCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAibMOmc2VsaWciCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAic29tIGthbiBza3JpdmVzIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAiZm9yw6ZsZGV0IgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJrb250cm9sbGVyYmFyIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgImthbiDDpm5kcmVzIGkgdGlsc3RhbmRlbmUgTlVMTCwgUkVBRFksIFBBVVNFRCBlbGxlciBQTEFZSU5HIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAia2FuIGt1biDDpm5kcmVzIGkgdGlsc3RhbmRlbmUgTlVMTCwgUkVBRFkgZWxsZXIgUEFVU0VEIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgImthbiBrdW4gw6ZuZHJlcyBpIHRpbHN0YW5kZW5lIE5VTEwgZWxsZXIgUkVBRFkiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIlNvcnRsaXN0ZWRlIGZpbGVyOiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIlRvdGFsIG9wdMOmbGxpbmc6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgc29ydGxpc3RldCBmaWwiCi1tc2dzdHJbMV0gIiVkIHNvcnRsaXN0ZWRlIGZpbGVyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgcGx1Z2luIgotbXNnc3RyWzFdICIlZCBwbHVnaW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQgc29ydGxpc3RldCBpbmRnYW5nIgotbXNnc3RyWzFdICIlZCBzb3J0bGlzdGVkZSBpbmRnYW5nZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgZWdlbnNrYWIiCi1tc2dzdHJbMV0gIiVkIGVnZW5za2FiZXIiCi0KLW1zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCi1tc2dzdHIgIlVkc2tyaXYgYWxsZSBlbGVtZW50ZXIiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJVZHNrcml2IHNvcnRsaXN0ZWRlIGZpbGVyIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJVZHNrcml2IGVuIGxpc3RlIG92ZXIgZWdlbnNrYWJlciwgc29tIGRldCBhbmdpdm5lIHVkdmlkZWxzZW1vZHVsIGVsbGVyIGFsbGUgIgotInVkdmlkZWxzZXNtb2R1bGVyIHRpbGJ5ZGVyLCBpIGV0IGZvcm1hdCBkZXIga2FuIGZvcnRvbGtlcyBhZiBhbmRyZSAiCi0icHJvZ3JhbW1lci5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJ1Z2VzIGkgZm9yYmluZGVsc2UgbWVkIGF1dG9tYXRpc2sgIgotImluc3RhbGxhdGlvbiBhZiB1ZHZpZGVsc2VzbW9kdWxlci4iCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIk9wbGlzdCB1ZHZpZGVsc2VzbW9kdWxldHMgaW5kaG9sZCIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICJLb250cm9sbGVyIG9tIGRldCBhbmdpdm5lIGVsZW1lbnQgZWxsZXIgcGx1Z2luIGVrc2lzdGVyZXIiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0iVmVkIGtvbnRyb2wgYWYgb20gZXQgZWxlbWVudCBlbGxlciBldCBwbHVnaW4gZWtzaXN0ZXJlciwga29udHJvbGxlciBkYSBvZ3PDpSAiCi0ib20gdmVyc2lvbmVuIGkgZGV0IG1pbmRzdGUgZXIgZGVuIHNwZWNpZmljZXJlZGUgdmVyc2lvbiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotIlZpcyBodmlsa2UgVVJJLXNrZW1hZXIgZGVyIHVuZGVyc3TDuHR0ZXMsIHNhbW1lbiBtZWQgZGUgZWxlbWVudGVyLCBkZXIgIgotImltcGxlbWVudGVyZXIgZGVtLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBpbmRsw6ZzZSBwbHVnaW5maWxlbjogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiRXQgc8OlZGFudCBlbGVtZW50IGVsbGVyIHBsdWdpbiBmaW5kZXMgaWtrZSAnJXMnXG4iCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJJbmRla3Mgc3RhdGlzdGlra2VyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiTW9kdG9nIGJlc2tlZGVuICMldSBmcmEgZWxlbWVudGV0IFwiJXNcIiAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIk1vZHRvZyBiZXNrZWRlbiAjJXUgZnJhIGVuaGVkZW4gXCIlczolc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiTW9kdG9nIGJlc2tlZGVuICMldSBmcmEgb2JqZWt0ZXQgXCIlc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICJNb2R0b2cgYmVza2VkZW4gIyV1ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk1vZHRvZyBtZWRpZXNsdXQgZnJhIGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkZVTkRFVCBNw4ZSS0FUICAgICAgIDogZnVuZGV0IGFmIGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiRlVOREVUIE3DhlJLQVQgICAgICAgOiBmdW5kZXQgYWYgZW5oZWRlbiBcIiVzOiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJGVU5ERVQgTcOGUktBVCAgICAgICA6IGZ1bmRldCBhZiBvYmpla3RldCBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAiRlVOREVUIE3DhlJLQVRcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJGVU5ERVQgVE9DICAgICAgIDogZnVuZGV0IGFmIGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRlVOREVUIFRPQyAgICAgICA6IGZ1bmRldCBhZiBvYmpla3RldCBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiRlVOREVUIFRPQ1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJBRFZBUlNFTDogZnJhIGVsZW1lbnQgJXM6ICVzXG4iCi0KLSMgSW5nZW4gYW5lbHNlCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZXJvbGxlZCwgdmVudGVyIHDDpSBhdCBidWZmZXJpbmdlbiBzbHV0dGVyLi4uXG4iCi0KLSMgSW5nZW4gYW5lbHNlCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiUHJlcm9sbGVkLCB2ZW50ZXIgcMOlIGF0IGZyZW1kcmlmdCBhZnNsdXR0ZXIuLi5cbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiaW5kbMOmc2VyIGkgYnVmZmVyLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiQnVmZmVyaW5nIGbDpnJkaWcsIHPDpnR0ZXIgcsO4cmxlZG5pbmcgdGlsIFBMQVlJTkcgLi4uXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJJbmRsw6ZzZXIgaSBidWZmZXIsIHPDpnR0ZXIgcsO4cmxlZG5pbmcgdGlsIFBBVVNFRCAuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIk9tbMOmZ2dlciB2ZW50ZXRpZC4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIlPDpnR0ZXIgdGlsc3RhbmQgdGlsICVzIHNvbSBrcsOmdmV0IGFmICVzLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJBZmJyeWRlbHNlOiBTdG9wcGVyIHLDuHJsZWRuaW5nLi4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiRnJlbWRyaWZ0OiAoJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICJNYW5nbGVuZGUgZWxlbWVudDogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiRmlrIGtvbnRla3N0IGZyYSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIlVkZGF0YW3DpnJrYXRlciAob2dzw6Uga2VuZHQgc29tIG1ldGFkYXRhKSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIlVkZGF0YSBUT0MgKGthcGl0bGVyIG9nIHZlcnNpb25lcikiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJVZGRhdGEgc3RhdHVzaW5mb3JtYXRpb24gb2cgZWdlbnNrYWJzbWVkZGVsZWxzZXIiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJVZHNrcml2IGlra2UgaW5mb3JtYXRpb24gb20gZnJlbXNrcmlkdCIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiVWRkYXRhbWVkZGVsZWxzZXIiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotIlZpcyBpa2tlIHN0YXR1c2luZm9ybWF0aW9uIGZvciBkZW4gc3BlY2lmaWNlcmVkZSBlZ2Vuc2thYiBodmlzIHVkZHliZW5kZSAiCi0idWRkYXRhIGVyIGFrdGl2ZXJldCAoa2FuIGJydWdlcyBmbGVyZSBnYW5nZSkiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICJFR0VOU0tBQlNOQVZOIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJJbnN0YWxsZXIgaWtrZSBlbiBmZWpsaMOlbmR0ZXJlciIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiR2VubmVtdHZpbmcgbWVkaWVzbHV0IHDDpSBraWxkZXIgZsO4ciBuZWRsdWtuaW5nIGFmIHLDuHJsZWRuaW5nIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJTYW1sIG9nIHVkc2tyaXYgaW5kZWtzIHN0YXRpc3Rpa2tlciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRkVKTDogcsO4cmxlZG5pbmdlbiBrdW5uZSBpa2tlIGRhbm5lczogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICJGRUpMOiByw7hybGVkbmluZ2VuIGt1bm5lIGlra2UgZGFubmVzLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLW1zZ3N0ciAiQURWQVJTRUw6IGZvcmtlcnQgcsO4cmxlZG5pbmc6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIkZFSkw6IGVsZW1lbnRldCAncsO4cmxlZG5pbmcnIGJsZXYgaWtrZSBmdW5kZXQuXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiUEFVU0VSRVIgcsO4cmxlZG5pbmcgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJGRUpMOiByw7hybGVkbmluZyDDuG5za2VyIGlra2UgYXQgcGF1c2VyZS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiUsO4cmxlZG5pbmdlbiBrw7hyZXIsIG9nIGJlaMO4dmVyIGlra2UgYXQgYmxpdmUgUFJFUk9MTCdlZCAuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIlLDuHJsZWRuaW5nZW4gUFJFUk9MTCdlciAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiRkVKTDogcsO4cmxlZG5pbmcgw7huc2tlciBpa2tlIGF0IHByZXJvbGwuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIlLDuHJsZWRuaW5nZW4gZXIgUFJFUk9MTCdlZCAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiUsO4cmxlZG5pbmcgc8OmdHRlcyB0aWwgQUZTUElMIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgotbXNnc3RyICJGRUpMOiByw7hybGVkbmluZyDDuG5za2VyIGlra2UgYXQgc3BpbGxlLlxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIiIKLSJNZWRpZXNsdXQgdmVkIG5lZGx1a25pbmcgYWt0aXZlcmV0IC0tIEdlbm5lbXR2aW5nIG1lZGllc2x1dCBww6UgcsO4cmxlZG5pbmdlblxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIkVPUyB2ZWQgbmVkbHVrbmluZyBha3RpdmVyZXQgLS0gdmVudGVyIHDDpSBFT1MgZWZ0ZXIgRmVqbFxuIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIlZlbnRlciBww6UgbWVkaWVzbHV0Li4uXG4iCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJNZWRpZXNsdXQgbW9kdGFnZXQgLSBzdG9wcGVyIHLDuHJsZWRuaW5nLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiQWZicnlkZWxzZSBhZnZlbnRlbmRlIEVPUyAgLSBzdG9wcGVyIHLDuHJsZWRuaW5nLi4uXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiRGVyIG9wc3RvZCBlbiBmZWpsIG1lbnMgZGVyIHZlbnRlZGVzIHDDpSBtZWRpZXNsdXRcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICJVZGbDuHJzZWwgYWZzbHV0dGV0IGVmdGVyICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICJSw7hybGVkbmluZyBzw6Z0dGVzIHRpbCBLTEFSIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICJSw7hybGVkbmluZyBzw6Z0dGVzIHRpbCBOVUwgLi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJSw7hybGVkbmluZyBmcmlnw7hyZXMgLi4uXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgImxhZ2VyIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJJbnRlcm4gZGF0YXN0csO4bXNmZWpsLiIKZGlmZiAtLWdpdCBhL3BvL2RlLmdtbyBiL3BvL2RlLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1NmRjZC4uMDAwMDAwMAotLS0gYS9wby9kZS5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9kZS5wbyBiL3BvL2RlLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODhhZmI0Li4wMDAwMDAwCi0tLSBhL3BvL2RlLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4NSArMCwwIEBACi0jIEdlcm1hbiB0cmFuc2xhdGlvbiBmb3IgZ3N0cmVhbWVyIDEuNy45MAotIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KLSMKLSMgUm9sYW5kIElsbGlnIDxyb2xhbmQuaWxsaWdAZ214LmRlPiwgMjAwNC4KLSMgQ2hyaXN0aWFuIEtpcmJhY2ggPGNocmlzdGlhbi5raXJiYWNoQGdtYWlsLmNvbT4sIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTUsIDIwMTYuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS43LjkwXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDktMjggMjE6MTMrMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogQ2hyaXN0aWFuIEtpcmJhY2ggPGNocmlzdGlhbi5raXJiYWNoQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBHZXJtYW4gPHRyYW5zbGF0aW9uLXRlYW0tZGVAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiBkZVxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtQnVnczogUmVwb3J0IHRyYW5zbGF0aW9uIGVycm9ycyB0byB0aGUgTGFuZ3VhZ2UtVGVhbSBhZGRyZXNzLlxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgotIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS44LjlcbiIKLSJYLVBvZWRpdC1Tb3VyY2VDaGFyc2V0OiBVVEYtOFxuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJEaWUgVmVyc2lvbiB2b24gR1N0cmVhbWVyIGF1c2dlYmVuIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIkFsbGUgV2FybnVuZ2VuIHdpZSBGZWhsZXIgYmVoYW5kZWxuIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIlZlcmbDvGdiYXJlIEZlaGxlcmRpYWdub3Nla2F0ZWdvcmllbiBhdXNnZWJlbiB1bmQgUHJvZ3JhbW0gYmVlbmRlbiIKLQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIlZvcmdlZ2ViZW5lIEZlaGxlcmRpYWdub3Nlc3R1ZmUgdm9uIDEgKG51ciBGZWhsZXIpIGJpcyA5IChBbGxlcykgb2RlciAwIGbDvHIgIgotImtlaW5lIEF1c2dhYmUiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiU1RVRkUiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iRHVyY2ggS29tbWF0YSBnZXRyZW5udGUgTGlzdGUgdm9uIFBhYXJlbiDCu0thdGVnb3JpZV9OYW1lOkxldmVswqssIHVtICIKLSJiZXN0aW1tdGVuIEthdGVnb3JpZW4gZWlnZW5lIFN0dWZlbiAgenV6dW9yZG5lbi4gQmVpc3BpZWw6IEdTVF9BVVRPUExVRzo1LCIKLSJHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMSVNURSIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJGYXJiaWdlIEZlaGxlcmRpYWdub3NlYXVzZ2FiZSBkZWFrdGl2aWVyZW4iCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotIkRlbiBGYXJibW9kdXMgZGVzIEZlaGxlcmRpYWdub3NlLVByb3Rva29sbHMgw6RuZGVybi4gTcO2Z2xpY2hlIE1vZGk6IG9mZiAiCi0iKGF1cyksIG9uIChhbiksIGRpc2FibGUgKGRlYWt0aXZpZXJ0KSwgYXV0byB1bmQgdW5peCIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJGZWhsZXJkaWFnbm9zZSBkZWFrdGl2aWVyZW4iCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiQXVzZsO8aHJsaWNoZSBNZWxkdW5nZW4gYmVpbSBMYWRlbiB2b24gUGx1Z2lucyBha3RpdmllcmVuIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiRHVyY2ggRG9wcGVscHVua3RlIGdldHJlbm50ZSBQZmFkZSB6dSBkZW4gUGx1Z2lucyIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICJQRkFERSIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSJEdXJjaCBLb21tYXRhIGdldHJlbm50ZSBMaXN0ZSB2b24gUGx1Z2lucywgZGllIHp1c8OkdHpsaWNoIHp1IGRlbiBQbHVnaW5zIGluICIKLSJkZXIgVW1nZWJ1bmdzdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIGdlbGFkZW4gd2VyZGVuIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiUExVR0lOUyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSJWZXJmb2xnZW4gdm9uIFNwZWljaGVyenVncmlmZnNmZWhsZXJuIGJlaW0gTGFkZW4gdm9uIFBsdWdpbnMgZGVha3RpdmllcmVuIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIkFrdHVhbGlzaWVyZW4gZGVyIFJlZ2lzdHJ5IGRlYWt0aXZpZXJlbiIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLSJEaWUgRXJzdGVsbHVuZyBlaW5lcyBIaWxmc3Byb3plc3NlcyBiZWltIEVpbmxlc2VuIGRlciBSZWdpc3RyeSBkZWFrdGl2aWVyZW4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiT3B0aW9uZW4gdm9uIEdTdHJlYW1lciIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkRpZSBPcHRpb25lbiB2b24gR1N0cmVhbWVyIGFuemVpZ2VuIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIlVuYmVrYW5udGUgT3B0aW9uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyIGhhdCBlaW5lbiBhbGxnZW1laW5lbiBGZWhsZXIgaW4gZWluZXIgS2VybmJpYmxpb3RoZWsgZmVzdGdlc3RlbGx0LiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iRGllIEVudHdpY2tsZXIgdm9uIEdTdHJlYW1lciB3YXJlbiB6dSBmYXVsLCBkaWVzZW0gRmVobGVyIGVpbmUgTnVtbWVyIHp1ICIKLSJnZWJlbi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogQ29kZSBuaWNodCBpbXBsZW1lbnRpZXJ0LiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIkdTdHJlYW1lci1GZWhsZXI6IFp1c3RhbmRzd2VjaHNlbCBzY2hsdWcgZmVobCB1bmQgZWluaWdlIEVsZW1lbnRlIGdhYmVuICIKLSJrZWluZSByaWNodGlnZSBGZWhsZXJuYWNocmljaHQgbWl0IGVpbmVyIFVyc2FjaGVuYmVncsO8bmR1bmcuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmVyIEdTdHJlYW1lci1GZWhsZXI6IFBhZGRpbmctUHJvYmxlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogVGhyZWFkLVByb2JsZW0uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyLUZlaGxlcjogVmVyaGFuZGx1bmdzcHJvYmxlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5lciBHU3RyZWFtZXItRmVobGVyOiBFcmVpZ25pc3Byb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5lciBHU3RyZWFtZXItRmVobGVyOiBTdWNobGF1Zi1Qcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogRsOkaGlna2VpdHNwcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5lciBHU3RyZWFtZXItRmVobGVyOiBLZW5uemVpY2hudW5nc3Byb2JsZW0uIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiSWhyZXIgSW5zdGFsbGF0aW9uIHZvbiBHU3RyZWFtZXIgZmVobHQgZWluIFBsdWdpbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXItRmVobGVyOiBaZWl0cHJvYmxlbS4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotIkRpZXNlIEFud2VuZHVuZyB2ZXJzdWNodCBGdW5rdGlvbmFsaXTDpHQgdm9uIEdTdHJlYW1lciB6dSB2ZXJ3ZW5kZW4sIGRpZSAiCi0iZGVha3RpdmllcnQgd29yZGVuIGlzdC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIiIKLSJJbnRlcm5ldCBHU3RyZWFtZXItRmVobGVyOiBQcm9ibGVtIG1pdCBkZXIgVW50ZXJzdMO8dHp1bmdzYmlibGlvdGhlay4gQml0dGUgIgotInNjaGlja2VuIFNpZSBlaW5lbiBGZWhsZXJiZXJpY2h0LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkRpZSBVbnRlcnN0w7x0enVuZ3NiaWJsaW90aGVrIGtvbm50ZSBuaWNodCBpbml0aWFsaXNpZXJ0IHdlcmRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiRGllIFVudGVyc3TDvHR6dW5nc2JpYmxpb3RoZWsga29ubnRlIG5pY2h0IGdlc2NobG9zc2VuIHdlcmRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkRpZSBVbnRlcnN0w7x0enVuZ3NiaWJsaW90aGVrIGtvbm50ZSBuaWNodCBrb25maWd1cmllcnQgd2VyZGVuLiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiRmVobGVyIGJlaSBkZXIgS29kaWVydW5nLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgaGF0IGVpbmVuIGFsbGdlbWVpbmVuIFJlc3NvdXJjZW5mZWhsZXIgZmVzdGdlc3RlbGx0LiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIlJlc3NvdXJjZSBuaWNodCBnZWZ1bmRlbi4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJSZXNzb3VyY2UgaW4gQmVudXR6dW5nIG9kZXIgbmljaHQgdmVyZsO8Z2Jhci4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkRpZSBSZXNzb3VyY2Uga29ubnRlIG5pY2h0IHp1bSBMZXNlbiBnZcO2ZmZuZXQgd2VyZGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiRGllIFJlc3NvdXJjZSBrb25udGUgbmljaHQgenVtIFNjaHJlaWJlbiBnZcO2ZmZuZXQgd2VyZGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiRGllIFJlc3NvdXJjZSBrb25udGUgbmljaHQgenVtIExlc2VuIHVuZCBTY2hyZWliZW4gZ2XDtmZmbmV0IHdlcmRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgotbXNnc3RyICJEaWUgUmVzc291cmNlIGtvbm50ZSBuaWNodCBnZXNjaGxvc3NlbiB3ZXJkZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIkF1cyBkZXIgUmVzc291cmNlIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJJbiBkaWUgUmVzc291cmNlIGtvbm50ZSBuaWNodCBnZXNjaHJpZWJlbiB3ZXJkZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIkluIGRlciBSZXNzb3VyY2Uga29ubnRlIGtlaW4gU3VjaGxhdWYgYXVzZ2Vmw7xocnQgd2VyZGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIkRpZSBSZXNzb3VyY2Uga29ubnRlIG5pY2h0IGFiZ2VnbGljaGVuIHdlcmRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotIkRpZSBFaW5zdGVsbHVuZ2VuIGtvbm50ZW4gbmljaHQgYXVzIGRlciBSZXNzb3VyY2UgZ2VsZXNlbiBvZGVyIGluIGRpZSAiCi0iUmVzc291cmNlIGdlc2NocmllYmVuIHdlcmRlbi4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIktlaW4gUGxhdHogaW4gZGVyIFJlc3NvdXJjZSDDvGJyaWcuIgotCi1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAiS2VpbmUgQmVyZWNodGlndW5nIHp1bSBadWdyaWZmIGF1ZiBkaWUgUmVzc291cmNlLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGhhdCBlaW5lbiBhbGxnZW1laW5lbiBEYXRlbnN0cm9tZmVobGVyIGZlc3RnZXN0ZWxsdC4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIiIKLSJEYXMgRWxlbWVudCBrYW5uIGRpZXNlbiBEYXRlbnN0cm9tIG5pY2h0IHZlcmFyYmVpdGVuLiBCaXR0ZSBzY2hpY2tlbiBTaWUgIgotImVpbmVuIEZlaGxlcmJlcmljaHQuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIkRpZSBBcnQgZGVzIERhdGVuc3Ryb21zIGtvbm50ZSBuaWNodCBlcm1pdHRlbHQgd2VyZGVuLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIkRlciBEYXRlbnN0cm9tIGlzdCB2b24gZWluZXIgYW5kZXJlbiBBcnQgYWxzIGRlciB2b24gZGllc2VtIEVsZW1lbnQgIgotInZlcmFyYmVpdGV0ZS4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIiIKLSJFcyBpc3Qga2VpbiBDb2RlYyB2ZXJmw7xnYmFyLCBkZXIgZGllc2UgQXJ0IHZvbiBEYXRlbnN0csO2bWVuIHZlcmFyYmVpdGVuIGthbm4uIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJEZXIgRGF0ZW5zdHJvbSBrb25udGUgbmljaHQgZGVrb2RpZXJ0IHdlcmRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIkRlciBEYXRlbnN0cm9tIGtvbm50ZSBuaWNodCBrb2RpZXJ0IHdlcmRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiRGVyIERhdGVuc3Ryb20ga29ubnRlIG5pY2h0IGRlbXVsdGlwbGV4dCB3ZXJkZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJEZXIgRGF0ZW5zdHJvbSBrb25udGUgbmljaHQgbXVsdGlwbGV4dCB3ZXJkZW4uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAiRGVyIERhdGVuc3Ryb20gaGF0IGRhcyBmYWxzY2hlIEZvcm1hdC4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotIkRlciBEYXRlbnN0cm9tIGlzdCB2ZXJzY2hsw7xzc2VsdCwgYWJlciBFbnRzY2hsw7xzc2VsdW5nIHdpcmQgbmljaHQgIgotInVudGVyc3TDvHR6dC4iCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0iRGVyIERhdGVuc3Ryb20gaXN0IHZlcnNjaGzDvHNzZWx0LCBrYW5uIGFiZXIgbmljaHQgZW50c2NobMO8c3NlbHQgd2VyZGVuLCB3ZWlsICIKLSJrZWluIHBhc3NlbmRlciBTY2hsw7xzc2VsIHZvcmhhbmRlbiBpc3QuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIktlaW5lIEZlaGxlcm1lbGR1bmcgZsO8ciBkZW4gQmVyZWljaCAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiS2VpbmUgU3RhbmRhcmRmZWhsZXJtZWxkdW5nIGbDvHIgZGVuIEJlcmVpY2ggJXMgdW5kIEZlaGxlcmNvZGUgJWQuIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICIiCi0iRGVyIGF1c2dld8OkaGx0ZSBSZWZlcmVuenRha3Qga2FubiBuaWNodCBpbiBkZXIgUGlwZWxpbmUgdmVyd2VuZGV0IHdlcmRlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXMgWndpc2NoZW5zcGVpY2hlcnMgZGVyIFJlZ2lzdHJ5IG5hY2ggJXM6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIlRpdGVsIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAiw5xibGljaGVyIFRpdGVsIgotCi1tc2dpZCAidGl0bGUgc29ydG5hbWUiCi1tc2dzdHIgIlNvcnRpZXJuYW1lIGRlcyBUaXRlbHMiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLDnGJsaWNoZXIgVGl0ZWwgenUgU29ydGllcnp3ZWNrZW4iCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgIkvDvG5zdGxlciIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiRsO8ciBkaWUgQXVmbmFobWUgdmVyYW50d29ydGxpY2hlIFBlcnNvbihlbikiCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIlNvcnRpZXJuYW1lIGRlcyBLw7xuc3RsZXJzIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJGw7xyIGRpZSBBdWZuYWhtZSB2ZXJhbnR3b3J0bGljaGUgUGVyc29uKGVuKSB6dSBTb3J0aWVyendlY2tlbiIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICJBbGJ1bSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICJBbGJ1bSwgZGFzIGRpZXNlIERhdGVuIGVudGjDpGx0IgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgIlNvcnRpZXJuYW1lIGRlcyBBbGJ1bXMiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiQWxidW0sIGRhcyBkaWVzZSBEYXRlbiBlbnRow6RsdCwgenUgU29ydGllcnp3ZWNrZW4iCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgIkvDvG5zdGxlciBkZXMgQWxidW1zIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJEZXIgS8O8bnN0bGVyIGRlcyBnZXNhbXRlbiBBbGJ1bXMsIHNvIHdpZSBlciBhbmdlemVpZ3Qgd2VyZGVuIHNvbGwiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIlNvcnRpZXJuYW1lIGRlcyBBbGJlbmvDvG5zdGxlcnMiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIkRlciBLw7xuc3RsZXIgZGVzIGdlc2FtdGVuIEFsYnVtcywgc28gd2llIGVyIGVpbnNvcnRpZXJ0IHdlcmRlbiBzb2xsIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiRGF0dW0iCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgIkRhdHVtLCBhbiBkZW0gZGllIERhdGVuIGVyemV1Z3Qgd3VyZGVuIChhbHMgR0RhdGUtU3RydWt0dXIpIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgIkRhdHVtVWhyemVpdCIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiIgotIkRhdHVtIHVuZCBVaHJ6ZWl0LCBhbiBkZW5lbiBkaWUgRGF0ZW4gZXJ6ZXVndCB3dXJkZW4gKGFscyBHc3REYXRlVGltZS0iCi0iU3RydWt0dXIpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgIkdlbnJlIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIkdlbnJlLCB6dSBkZW0gZGllc2UgRGF0ZW4gZ2Vow7ZyZW4iCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJLb21tZW50YXIiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiRWluIGZyZWllciBUZXh0LCBkZXIgZGllIERhdGVuIGJlc2NocmVpYnQiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICJFcndlaXRlcnRlciBLb21tZW50YXIiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJFaW4gYmVsaWViaWdlciBUZXh0LCBkZXIgZGllIERhdGVuIGJlc2NocmVpYnQsIGluIGRlciBGb3JtIMK7U2NobMO8c3NlbD1XZXJ0wqsgIgotIm9kZXIgwrtTY2hsw7xzc2VsW2RlXT1Lb21tZW50YXLCqyIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAiVGl0ZWxudW1tZXIiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiVGl0ZWxudW1tZXIgaW5uZXJoYWxiIGRlciBTYW1tbHVuZyIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJBbnphaGwgZGVyIFRpdGVsIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiQW56YWhsIGRlciBUaXRlbCBpbiBkZXIgU2FtbWx1bmcsIHp1IGRlciBkaWVzZXMgU3TDvGNrIGdlaMO2cnQiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAiTnVtbWVyIGRlciBQbGF0dGUiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJOdW1tZXIgZGVyIFBsYXR0ZSBpbm5lcmhhbGIgZGVyIFNhbW1sdW5nIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAiQW56YWhsIGRlciBQbGF0dGVuIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIkFuemFobCBkZXIgUGxhdHRlbiBpbm5lcmhhbGIgZGVyIFNhbW1sdW5nLCB6dSBkZXIgZGllc2UgUGxhdHRlIGdlaMO2cnQiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAiT3J0IgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJVcnNwcnVuZyBkZXMgTWVkaXVtcyBhbHMgVVJJIChPcnQsIHdvIGRhcyBPcmlnaW5hbCBkZXIgRGF0ZWkgb2RlciBkZXMgIgotIkRhdGVuc3Ryb21zIGJlcmVpdCBzdGVodCkiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAiSW50ZXJuZXRzZWl0ZSIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIkludGVybmV0c2VpdGUgZGllc2VzIE1lZGl1bXMgKHouQi4gS8O8bnN0bGVyIG9kZXIgRmlsbXNlaXRlKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJCZXNjaHJlaWJ1bmciCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgIkVpbmUga3VyemUgQmVzY2hyZWlidW5nIGRlcyBJbmhhbHRzIgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAiVmVyc2lvbiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJWZXJzaW9uIGRpZXNlciBEYXRlbiIKLQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIklTUkMiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2llaGUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiT3JnYW5pc2F0aW9uIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJDb3B5cmlnaHQiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJDb3B5cmlnaHRhbmdhYmUgZGVyIERhdGVuIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiQ29weXJpZ2h0LVVSSSIKLQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJIHp1IGRlciBDb3B5cmlnaHRhbmdhYmUgZGVyIERhdGVuIgotCi1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAiY29kaWVydCBkdXJjaCIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIkRlciBOYW1lIGRlciBjb2RpZXJlbmRlbiBQZXJzb24gb2RlciBPcmdhbmlzYXRpb24iCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICJLb250YWt0IgotCi1tc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiS29udGFrdGluZm9ybWF0aW9uIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAiTGl6ZW56IgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJMaXplbnogZGVyIERhdGVuIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgIkxpemVuei1VUkkiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSB6dXIgTGl6ZW56IGRlciBEYXRlbiIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAiRGFyc3RlbGxlciIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJEaWUgZGFzIFN0w7xjayBhdWZmw7xocmVuZGUgUGVyc29uKGVuKSIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJLb21wb25pc3QiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgIkbDvHIgZGllIEF1Zm5haG1lIHZlcmFudHdvcnRsaWNoZSBQZXJzb24oZW4pIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICJEaXJpZ2VudCIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiRGV0YWlsbGllcnVuZyBEaXJpZ2VudC9EYXJzdGVsbGVyIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgIkRhdWVyIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgIkzDpG5nZSBkZXMgU3TDvGNrcyBpbiBHU3RyZWFtZXItWmVpdGVpbmhlaXRlbiAoTmFub3Nla3VuZGVuKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJDb2RlYyIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiRGF0ZW5mb3JtYXQsIGluIGRlbSBkaWUgRGF0ZW4gZ2VzcGVpY2hlcnQgc2luZCIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJWaWRlby1Db2RlYyIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiRGF0ZW5mb3JtYXQsIGluIGRlbSBkaWUgVmlkZW9kYXRlbiBnZXNwZWljaGVydCBzaW5kIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgIkF1ZGlvLUNvZGVjIgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJEYXRlbmZvcm1hdCwgaW4gZGVtIGRpZSBBdWRpb2RhdGVuIGdlc3BlaWNoZXJ0IHNpbmQiCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAiVW50ZXJ0aXRlbC1Db2RlYyIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiRGF0ZW5mb3JtYXQsIGluIGRlbSBkZXIgVW50ZXJ0aXRlbCBnZXNwZWljaGVydCBzaW5kIgotCi0jIEhpZXIgaXN0IGVpbiBDb250YWluZXJmb3JtYXQgd2llIEFWSSBvZGVyIE1QRUcgZ2VtZWludC4KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJDb250YWluZXJmb3JtYXQiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiQ29udGFpbmVyZm9ybWF0LCBpbiBkZW0gZGllIERhdGVuIGdlc3BlaWNoZXJ0IHNpbmQiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJCaXRyYXRlIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiR2VuYXVlIG9kZXIgZHVyY2hzY2huaXR0bGljaGUgQml0cmF0ZSBpbiBCaXRzL1Nla3VuZGUiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIk5vcm1hbGUgQml0cmF0ZSIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIkJlaSB2YXJpYWJsZXIgQml0cmF0ZSBlaW5lIG1pdHRsZXJlIEJpdHJhdGUgaW4gQml0cy9TZWt1bmRlIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIgotbXNnc3RyICJNaW5pbWFsZSBCaXRyYXRlIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiTWluaW1hbGUgQml0cmF0ZSBpbiBCaXRzL1Nla3VuZGUiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgIk1heGltYWxlIEJpdHJhdGUiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJNYXhpbWFsZSBCaXRyYXRlIGluIEJpdHMvU2VrdW5kZSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgIkNvZGllcmVyIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiQ29kaWVyZXIgZsO8ciBkaWVzZW4gRGF0ZW5zdHJvbSIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAiVmVyc2lvbiBkZXMgQ29kaWVyZXJzIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiVmVyc2lvbiBkZXMgQ29kaWVyZXJzIGbDvHIgZGllc2VuIERhdGVuc3Ryb20iCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgIlNlcmllbm51bW1lciIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgIlNlcmllbm51bW1lciBkZXMgVGl0ZWxzIgotCi0jIGh0dHA6Ly93d3cuYXVkaW9ocS5kZS9pbmRleC5waHA/c2hvd3RvcGljPTIzI1JlZmVyZW56bGF1dHN0YWVya2UKLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgIkxhdXRzdMOkcmtlYW5wYXNzdW5nIGRlcyBUaXRlbHBlZ2VscyIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgIlBlZ2VsYW5wYXNzdW5nIGRlcyBUaXRlbHMgaW4gZEIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgIkxhdXRzdMOkcmtlYW5wYXNzdW5nIGRlcyBTcGl0emVucGVnZWxzIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgIlNwaXR6ZW5wZWdlbCBkZXMgVGl0ZWxzIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJMYXV0c3TDpHJrZWFucGFzc3VuZyBkZXMgQWxiZW5wZWdlbHMiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJQZWdlbGFucGFzc3VuZyBkZXMgQWxidW1zIGluIGRCIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJMYXV0c3TDpHJrZWFucGFzc3VuZyBkZXMgQWxiZW5zcGl0emVucGVnZWxzIgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgIlNwaXR6ZW5wZWdlbCBkZXMgQWxidW1zIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgIlJlZmVyZW56cGVnZWwgZGVyIExhdXRzdMOkcmtlYW5wYXNzdW5nIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAiUmVmZXJlbnpwZWdlbCBmw7xyIGRpZSBQZWdlbGFucGFzc3VuZ2VuIHZvbiBUaXRlbCB1bmQgQWxidW0iCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJTcHJhY2hjb2RlIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAiU3ByYWNoY29kZSBmw7xyIGRpZXNlbiBTdHJvbSBuYWNoIElTTy02MzktMSBvZGVyIElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgIlNwcmFjaG5hbWUiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiTmFtZSBkZXIgU3ByYWNoZSwgaW4gd2VsY2hlciBkZXIgRGF0ZW5zdHJvbSBpc3QiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAiQmlsZCIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIkJpbGQgZsO8ciBkaWVzZW4gRGF0ZW5zdHJvbSIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiVm9yc2NoYXViaWxkIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJWb3JzY2hhdWJpbGQgZsO8ciBkaWVzZW4gRGF0ZW5zdHJvbSIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgIkFuaGFuZyIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIkFuIGRpZXNlbiBEYXRlbnN0cm9tIGFuZ2VoYW5nZW5lIERhdGVpIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiU2NobMOkZ2UgcHJvIE1pbnV0ZSIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICJBbnphaGwgZGVyIFNjaGzDpGdlIHBybyBNaW51dGUgaW0gSMO2cnN0w7xjayIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICJTY2hsYWd3b3J0ZSIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICJEdXJjaCBLb21tYSBnZXRyZW5udGUgU2NobMO8c3NlbHfDtnJ0ZXIsIGRpZSBkZW4gSW5oYWx0IGJlc2NocmVpYmVuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgImdlb2xvZ2lzY2hlciBPcnQiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotIkxlc2JhcmUgT3J0c2Jlc2NocmVpYnVuZywgd28gZGFzIE1lZGl1bSBhdWZnZXplaWNobmV0IG9kZXIgcHJvZHV6aWVydCB3dXJkZSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAiZ2VvZ3JhZmlzY2hlciBCcmVpdGVuZ3JhZCIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotImdlb2dyYWZpc2NoZXIgQnJlaXRlbmdyYWQgZGVzIE9ydGVzIGluIEdyYWQgbmFjaCBXR1M4NCAoTnVsbCBhbSDDhHF1YXRvciwgIgotIm5lZ2F0aXZlIFdlcnRlIGbDvHIgZGllIHPDvGRsaWNoZW4gQnJlaXRlbmdyYWRlKSwgYW4gZGVtIGRhcyBNZWRpdW0gIgotImF1ZmdlemVpY2huZXQgb2RlciBwcm9kdXppZXJ0IHd1cmRlIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiZ2VvZ3JhZmlzY2hlciBMw6RuZ2VuZ3JhZCIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSJnZW9ncmFmaXNjaGVyIEzDpG5nZW5ncmFkIGRlcyBPcnRlcyBpbiBHcmFkIG5hY2ggV0dTODQgKE51bGwgZsO8ciBkZW4gIgotIkhhdXB0bWVyaWRpYW4gZHVyY2ggR3JlZW53aWNoL0dyb8OfYnJpdGFubmllbiwgbmVnYXRpdmUgV2VydGUgZsO8ciBkaWUgIgotIndlc3RsaWNoZW4gTMOkbmdlbmdyYWRlKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgImdlb2dyYWZpc2NoZSBIw7ZoZSIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSJnZW9ncmFmaXNjaGUgSMO2aGUgZGVzIE9ydGVzIGluIE1ldGVybiBuYWNoIFdHUzg0IChIw7ZoZSBOdWxsIGVudHNwcmljaHQgZGVtICIKLSJNZWVyZXNzcGllZ2VsKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICJnZW9ncmFmaXNjaGVzIExhbmQiCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiIgotIkRhcyBMYW5kIChlbmdsaXNjaGVyIE5hbWUpLCBpbiBkZW0gZGFzIE1lZGl1bSBhdWZnZXplaWNobmV0IG9kZXIgcHJvZHV6aWVydCAiCi0id3VyZGUiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiZ2VvZ3JhZmlzY2hlIFN0YWR0IgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLSJEaWUgU3RhZHQgKGVuZ2xpc2NoZXIgTmFtZSksIGluIGRlciBkYXMgTWVkaXVtIGF1ZmdlemVpY2huZXQgb2RlciBwcm9kdXppZXJ0ICIKLSJ3dXJkZSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAiZ2VvZ3JhZmlzY2hlciBPcnRzdGVpbCIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0iZWluIE9ydCBpbm5lcmhhbGIgZWluZXIgU3RhZHQsIGFuIGRlbSBkYXMgTWVkaXVtIGF1ZmdlemVpY2huZXQgb2RlciAiCi0icHJvZHV6aWVydCB3dXJkZSAoei5CLiBkZXIgU3RhZHR0ZWlsKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJHZW9ncmFmaXNjaGVyIGhvcml6b250YWxlciBGZWhsZXIiCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiRXJ3YXJ0ZXRlciBGZWhsZXIgZGVyIGhvcml6b250YWxlbiBQb3NpdGlvbnNtZXNzdW5nIChpbiBNZXRlcikiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgIkdlb2dyYWZpc2NoZSBCZXdlZ3VuZ3NnZXNjaHdpbmRpZ2tlaXQiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLSJCZXdlZ3VuZ3NnZXNjaHdpbmRpZ2tlaXQgZGVzIEF1ZnplaWNobnVuZ3NnZXLDpHRzIHfDpGhyZW5kIGRlciBBdWZ6ZWljaG51bmcgIgotIm1pdCBtL3MiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJHZW9ncmFmaXNjaGUgQmV3ZWd1bmdzcmljaHR1bmciCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJaZWlndCBkaWUgQmV3ZWd1bmdzcmljaHR1bmcgZGVzIEF1ZnplaWNobnVuZ3NnZXLDpHRzIHfDpGhyZW5kIGRlciBBdWZ6ZWljaG51bmcgIgotImVpbmVzIE1lZGl1bXMgYW4uIERpZSBEYXJzdGVsbHVuZyBlcmZvbGd0IGluIEdyYWQgYWxzIEZsaWXDn2tvbW1hemFobC4gMCAiCi0iZW50c3ByaWNodCBkZW0gZ2VvZ3JhZmlzY2hlbiBOb3JkZW4gdW5kIGRpZSBaYWhsIHfDpGNoc3QgaW0gVWhyemVpZ2Vyc2lubiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAiR2VvZ3JhZmlzY2hlIEF1ZnplaWNobnVuZ3NyaWNodHVuZyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotIlplaWd0IGRpZSBSaWNodHVuZyBkZXMgR2Vyw6R0cyB3w6RocmVuZCBkZXIgQXVmemVpY2hudW5nIGVpbmVzIE1lZGl1bXMgYW4uIERpZSAiCi0iRGFyc3RlbGx1bmcgZXJmb2xndCBpbiBHcmFkIGFscyBGbGllw59rb21tYXphaGwuIDAgZW50c3ByaWNodCBkZW0gIgotImdlb2dyYWZpc2NoZW4gTm9yZGVuIHVuZCBkaWUgWmFobCB3w6RjaHN0IGltIFVocnplaWdlcnNpbm4iCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAiTmFtZSB6ZWlnZW4iCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICJOYW1lIGRlcyBUVi9Qb2RjYXN0L2RlciBTZXJpZSwgdm9uIGRlbSBkYXMgTWVkaXVtIHN0YW1tdCIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAiU29ydGllcm5hbWUgemVpZ2VuIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0iTmFtZSBkZXMgVFYvUG9kY2FzdC9kZXIgU2VyaWUsIHZvbiBkZW0gZGFzIE1lZGl1bSBzdGFtbXQsIHp1bSBTb3J0aWVyZW4iCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAiTnVtbWVyIGRlciBGb2xnZSIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJEaWUgTnVtbWVyIGRlciBGb2xnZSBpbiBkZXIgU2VyaWUsIHZvbiBkZXIgZGFzIE1lZGl1bSBlaW4gVGVpbCBpc3QiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJOdW1tZXIgZGVyIFNlcmllIgotCi1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIkRpZSBOdW1tZXIgZGVyIFNlcmllIGRlciBTZW5kdW5nLCB2b24gZGVyIGRhcyBNZWRpdW0gZWluIFRlaWwgaXN0IgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJMaWVkdGV4dCIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiRGVyIExpZWR0ZXh0IGRlcyBNZWRpdW1zLCBnZXfDtmhubGljaCBmw7xyIExpZWRlciB2ZXJ3ZW5kZXQiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAiU29ydGllcm5hbWUgZGVzIEtvbXBvbmlzdGVuIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiRsO8ciBkaWUgQXVmbmFobWUgdmVyYW50d29ydGxpY2hlIFBlcnNvbihlbiksIGbDvHIgU29ydGllcnp3ZWNrZSIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICJHcnVwcGllcmVuIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iR3J1cHBlbmJlem9nZW5lcyBNZWRpdW0sIGRhcyAgbWVocmVyZSBUaXRlbCB1bWZhc3N0LCDDpGhubGljaCBkZXIgIgotInZlcnNjaGllZGVuZW4gU3TDvGNrZSBlaW5lcyBLb256ZXJ0ZXMuIEVzIGlzdCBlaW5lIEViZW5lIGjDtmhlciBhbHMgZWluIFRpdGVsLCAiCi0iYWJlciBuaWVkcmlnZXIgYWxzIGVpbiBBbGJ1bSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJCZW51dHplcmJld2VydHVuZyIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0iQmV3ZXJ0ZXQgZHVyY2ggZWluZW4gQmVudXR6ZXIuIEplIGjDtmhlciBkaWUgQmV3ZXJ0dW5nLCBkZXN0byBiZWxpZWJ0ZXIgaXN0ICIKLSJkYXMgTWVkaXVtIGJlaW0gQmVudXR6ZXIiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICJHZXLDpHRlaGVyc3RlbGxlciIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIkRlciBIZXJzdGVsbGVyIGRlcyBHZXLDpHRzIHp1ciBFcnN0ZWxsdW5nIGRpZXNlcyBNZWRpdW1zIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJHZXLDpHRlbW9kZWxsIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJEYXMgTW9kZWxsIGRlcyBHZXLDpHRzIHp1ciBFcnN0ZWxsdW5nIGRpZXNlcyBNZWRpdW1zIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAiQW53ZW5kdW5nc25hbWUiCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIkRpZSB6dXIgRXJzdGVsbHVuZyBkaWVzZXMgTWVkaXVtcyB2ZXJ3ZW5kZXRlIEFud2VuZHVuZyIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgIkFud2VuZHVuZ3NkYXRlbiIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIkJlbGllYmlnZSBBbndlbmR1bmdzZGF0ZW4genVyIFNlcmlhbGlzaWVydW5nIGluIGRhcyBNZWRpdW0iCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAiQmlsZG9yaWVudGllcnVuZyIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiV2llIGRhcyBCaWxkIHZvciBkZXIgRGFyc3RlbGx1bmcgZ2VkcmVodCBvZGVyIGdlc3BpZWdlbHQgd2VyZGVuIHNvbGwiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIkhlcmF1c2dlYmVyIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgbGFiZWwgb3IgcHVibGlzaGVyIgotbXNnc3RyICJOYW1lIGRlcyBMYWJlbHMgb2RlciBkZXMgSGVyYXVzZ2ViZXJzIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgImludGVycHJldGVkLWJ5IgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgIiIKLSJJbmZvcm1hdGlvbmVuIMO8YmVyIGRpZSBQZXJzb25lbiBoaW50ZXIgZWluZW0gUmVtaXggdW5kIMOkaG5saWNoZSAiCi0iSW50ZXJwcmV0YXRpb25lbiIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICJtaWRpLWJhc2Utbm90ZSIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiTWlkaS1Ob3RlbnphaGwgZGVyIFRvbnNwdXIuIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICJQcml2YXRlLURhdGVuIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICJQcml2YXRlIERhdGVuIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIkVzIHd1cmRlIGtlaW4gQWRyZXNzLUhhbmRsZXIgZsO8ciBkYXMgJXMtUHJvdG9rb2xsIGdlZnVuZGVuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICJEYXMgQWRyZXNzZW5zY2hlbWEgwrslc8KrIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkZFSExFUjogVm9uIEVsZW1lbnQgJXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iWnVzw6R0emxpY2hlIEZlaGxlcmRpYWdub3NlaW5mb3JtYXRpb246XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJWZXJrbsO8cGZ1bmcgaGF0IGtlaW5lIFF1ZWxsZSBbc2luaz0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAiVmVya27DvHBmdW5nIGhhdCBrZWluIFppZWwgW3Npbms9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiS2VpbmUgRWlnZW5zY2hhZnQgwrslc8KrIGltIEVsZW1lbnQgwrslc8KrIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAiIgotIkRpZSBFaWdlbnNjaGFmdCDCuyVzwqsgaW0gRWxlbWVudCDCuyVzwqsga29ubnRlIG5pY2h0IGF1ZiDCuyVzwqsgZ2VzZXR6dCB3ZXJkZW4iCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiVmVyesO2Z2VydGVzIFZlcmtuw7xwZmVuIGlzdCBmZWhsZ2VzY2hsYWdlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIiVzIGtvbm50ZSBuaWNodCBtaXQgJXMgdmVya27DvHBmdCB3ZXJkZW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIktlaW4gRWxlbWVudCDCuyVzwqsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgInVuZXJ3YXJ0ZXRlIFJlZmVyZW56IMK7JXPCqyAtIHdpcmQgaWdub3JpZXJ0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAidW5lcndhcnRldGUgcGFkLVJlZmVyZW56IMK7JXPCqyAtIHdpcmQgaWdub3JpZXJ0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAiRGllIEbDpGhpZ2tlaXRlbiB2b24gwrslc8KrIGtvbm50ZW4gbmljaHQgYXVzZ2VsZXNlbiB3ZXJkZW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJLZWluIFppZWxlbGVtZW50IGbDvHIgVVJJIMK7JXPCqyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiS2VpbiBRdWVsbGVsZW1lbnQgZsO8ciBVUkkgwrslc8KrIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICJTeW50YXhmZWhsZXIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJMZWVyZW4gQmVow6RsdGVyIMK7JXPCqyBhbmdlZ2ViZW4gLS0gbmljaHQgZXJsYXVidCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBiaW4gXCIlc1wiLCB1bnBhY2tpbmcgZWxlbWVudHMiCi1tc2dzdHIgIktlaW4gQmVow6RsdGVyIMK7JXPCqyAtIEVsZW1lbnRlIHdlcmRlbiBlbnRwYWNrdCIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJMZWVyZSBMZWl0dW5nIGlzdCBuaWNodCBlcmxhdWJ0IgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIkVzIHdlcmRlbiB2aWVsZSBQdWZmZXIgdmVyd29yZmVuLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZXMgUHJvYmxlbSBpbSBEYXRlbmZsdXNzLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIkludGVybmVyIEZlaGxlciBpbSBEYXRlbmZsdXNzLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiSW50ZXJuZXIgWmVpdGZlaGxlciIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAiUHVmZmVyenV3ZWlzdW5nIHNjaGx1ZyBmZWhsLiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJGaWx0ZXJmw6RoaWdrZWl0ZW4iCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIkJlc2NocsOkbmt0IGRpZSBtw7ZnbGljaGVuIEZpbHRlcmbDpGhpZ2tlaXRlbiAoTlVMTCBiZWRldXRldCBBTExFKS4gU2V0emVuICIKLSJkaWVzZXIgRWlnZW5zY2hhZnQgcmVmZXJlbnppZXJ0IGVpbiBoaW56dWdlZsO8Z3RlcyBHc3RDYXBzLU9iamVrdC4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICLDhG5kZXJ1bmdzbW9kdXMgZGVyIEbDpGhpZ2tlaXRlbiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIsOEbmRlcnVuZ3Ntb2R1cyBkZXIgRmlsdGVyZsOkaGlna2VpdGVuIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiS2VpbiB0ZW1wb3LDpHJlciBPcmRuZXIgYW5nZWdlYmVuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJEaWUgdGVtcG9yw6RyZSBEYXRlaSDCuyVzwqsga29ubnRlIG5pY2h0IGFuZ2VsZWd0IHdlcmRlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJEaWUgRGF0ZWkgwrslc8KrIGtvbm50ZSBuaWNodCB6dW0gTGVzZW4gZ2XDtmZmbmV0IHdlcmRlbi4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gaW4gZGllIERvd25sb2FkLURhdGVpLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJLZWluIERhdGVpbmFtZSB6dW0gU2NocmVpYmVuIGFuZ2VnZWJlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJEYXRlaSDCuyVzwqsga29ubnRlIG5pY2h0IHp1bSBTY2hyZWliZW4gZ2XDtmZmbmV0IHdlcmRlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkZlaGxlciBiZWltIFNjaGxpZcOfZW4gZGVyIERhdGVpIMK7JXPCqy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkZlaGxlciBiZWltIER1cmNoc3VjaGVuIGRlciBEYXRlbiDCuyVzwqsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIERhdGVuIMK7JXPCqy4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS2VpbiBEYXRlaW5hbWUgenVtIExlc2VuIGFuZ2VnZWJlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIkluZm9ybWF0aW9uZW4genUgwrslc8KrIGtvbm50ZW4gbmljaHQgZ2VsZXNlbiB3ZXJkZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIsK7JXPCqyBpc3QgZWluIE9yZG5lci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJEaWUgRGF0ZWkgwrslc8KrIGlzdCBlaW4gU29ja2V0LiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIk5hY2ggZGVtIER1cmNobGF1ZmVuIGZlaGxnZXNjaGxhZ2VuLiBXaWUgZ2V3w7xuc2NodC4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJGw6RoaWdrZWl0ZW4iCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJFcmthbm50ZSBGw6RoaWdrZWl0ZW4gaW0gRGF0ZW5zdHJvbSIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIk1pbmltdW0iCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICJGw6RoaWdrZWl0ZW4gZXJ6d2luZ2VuIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgIkbDpGhpZ2tlaXRlbiBvaG5lIFR5cGVuc3VjaGUgZXJ6d2luZ2VuIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIkRlciBEYXRlbnN0cm9tIGVudGjDpGx0IG5pY2h0IGdlbnVnIERhdGVuLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiRGVyIERhdGVuc3Ryb20gZW50aMOkbHQga2VpbmUgRGF0ZW4uIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiSW1wbGVtZW50aWVydGUgU2Nobml0dHN0ZWxsZW46XG4iCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAibGVzYmFyIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgInNjaHJlaWJiYXIiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICJ2ZXJhbHRldCIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAicmVnZWxiYXIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiw6RuZGVyYmFyIGluIGRlbiBTdGF0dXMgTlVMTCwgQkVSRUlULCBQQVVTSUVSVCBvZGVyIEFCU1BJRUxFTiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgIsOkbmRlcmJhciBudXIgaW4gZGVuIFN0YXR1cyBOVUxMLCBCRVJFSVQgb2RlciBQQVVTSUVSVCIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICLDpG5kZXJiYXIgbnVyIGluIGRlbiBTdGF0dXMgTlVMTCBvZGVyIEJFUkVJVCIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiRGF0ZWllbiBhdWYgZGVyIHNjaHdhcnplbiBMaXN0ZToiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJHZXNhbXR6YWhsOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkIERhdGVpIGF1ZiBkZXIgc2Nod2FyemVuIExpc3RlIgotbXNnc3RyWzFdICIlZCBEYXRlaWVuIGF1ZiBkZXIgc2Nod2FyemVuIExpc3RlIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgUGx1Z2luIgotbXNnc3RyWzFdICIlZCBQbHVnaW5zIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkIEVpbnRyYWcgaW4gZGVyIHNjaHdhcnplbiBMaXN0ZSIKLW1zZ3N0clsxXSAiJWQgRWludHLDpGdlIGluIGRlciBzY2h3YXJ6ZW4gTGlzdGUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIE1lcmttYWwiCi1tc2dzdHJbMV0gIiVkIE1lcmttYWxlIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJBbGxlIEVsZW1lbnRlIGF1c2dlYmVuIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiRGF0ZWllbiBpbiBkZXIgc2Nod2FyemVuIExpc3RlIGF1c2dlYmVuIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJFaW5lIG1hc2NoaW5lbmxlc2JhcmUgTGlzdGUgZGVyIE1lcmttYWxlLCBkaWUgZGFzIGFuZ2VnZWJlbmUgb2RlciBhbGxlICIKLSJQbHVnaW5zIGJlcmVpdCBzdGVsbGVuLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE7DvHR6bGljaCBpbiBWZXJiaW5kdW5nIG1pdCBleHRlcm5lbiAiCi0iTWVjaGFuaXNtZW4genVyIGF1dG9tYXRpc2NoZW4gSW5zdGFsbGF0aW9uIHZvbiBQbHVnaW5zIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICJEaWUgSW5oYWx0ZSBkZXMgUGx1Z2lucyBhdWZsaXN0ZW4iCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiUHLDvGZlbiBTaWUsIG9iIGRhcyBhbmdlZ2ViZW5lIEVsZW1lbnQgb2RlciBQbHVnaW4gdm9yaGFuZGVuIGlzdCIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLSJLb250cm9sbGllcmVuIFNpZSBiZWltIFByw7xmZW4sIG9iIGVpbiBFbGVtZW50IG9kZXIgUGx1Z2luIHZvcmhhbmRlbiBpc3QsICIKLSJlYmVuZmFsbHMsIG9iIGRpZSBWZXJzaW9uIG1pbmRlc3RlbnMgZGVyIGFuZ2VnZWJlbmVuIGVudHNwcmljaHQuIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICIiCi0iVW50ZXJzdMO8dHp0ZSBVUkktU2NoZW1hdGEgbWl0IGRlbiBFbGVtZW50ZW4gYXVzZ2ViZW4sIGRpZSBzaWUgaW1wbGVtZW50aWVyZW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIkRpZSBQbHVnaW4tRGF0ZWkga29ubnRlIG5pY2h0IGdlbGFkZW4gd2VyZGVuOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJLZWluIHNvbGNoZXMgRWxlbWVudCBvZGVyIFBsdWdpbiDCuyVzwqtcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIkluZGV4LVN0YXRpc3Rpa2VuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiTmFjaHJpY2h0ICMldSB3dXJkZSB2b24gRWxlbWVudCDCuyVzwqsgKCVzKSBlcmhhbHRlbjogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICJOYWNocmljaHQgIyV1IHd1cmRlIHZvbiBQYWRkaW5nIMK7JXM6JXPCqyAoJXMpIGVyaGFsdGVuOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIk5hY2hyaWNodCAjJXUgd3VyZGUgdm9uIE9iamVrdCDCuyVzwqsgKCVzKSBlcmhhbHRlbjogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIk5hY2hyaWNodCAjJXUgKCVzKSB3dXJkZSBlcmhhbHRlbjogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRU9TIHd1cmRlIHZvbiBFbGVtZW50IMK7JXPCqyBlcmhhbHRlbi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJLRU5OWkVJQ0hFTiBHRUZVTkRFTjogR2VmdW5kZW4gdm9uIEVsZW1lbnQgwrslc8KrLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiS0VOTlpFSUNIRU4gR0VGVU5ERU46IEdlZnVuZGVuIHZvbiBQYWRkaW5nIMK7JXM6JXPCqy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIktFTk5aRUlDSEVOIEdFRlVOREVOOiBHZWZ1bmRlbiB2b24gT2JqZWt0IMK7JXPCqy5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJLRU5OWkVJQ0hFTiBHRUZVTkRFTlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIlRPQyBHRUZVTkRFTjogR2VmdW5kZW4gZHVyY2ggRWxlbWVudCDCuyVzwqsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJUT0MgR0VGVU5ERU46IEdlZnVuZGVuIGR1cmNoIE9iamVrdCDCuyVzwqsuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiVE9DIEdFRlVOREVOXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk86XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIldBUk5VTkc6IFZvbiBFbGVtZW50ICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlZvcmdlbGF1ZmVuLCBhdWYgRW5kZSBkZXMgWndpc2NoZW5zcGVpY2hlcm5zIHdhcnRlbiDigKZcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlZvcmdlbGF1ZmVuLCBhdWYgRW5kZSBkZXMgWndpc2NoZW5zcGVpY2hlcm5zIHdhcnRlbiDigKZcbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiWndpc2NoZW5zcGVpY2hlcm4gbMOkdWZ0IOKApiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLSJad2lzY2hlbnNwZWljaGVybiBhYmdlc2NobG9zc2VuLCBMZWl0dW5nIHdpcmQgYXVmIEFCU1BJRUxFTiBnZXNldHp0IOKAplxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiIgotIlp3aXNjaGVuc3BlaWNoZXJuLCBMZWl0dW5nIHdpcmQgYXVmIFBBVVNJRVJUIGdlc2V0enQg4oCmXG4iCi0iXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICJWZXJ6w7ZnZXJ1bmcgbmV1IHZlcnRlaWxlbiDigKZcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJTdGF0dXMgd2lyZCBhdWYgJXMgZ2VzZXR6dCB3aWUgdm9uICVzIGdld8O8bnNjaHQuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkludGVycnVwdDogTGVpdHVuZyB3aXJkIGdlc3RvcHB0IC4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIkZvcnRzY2hyaXR0OiAoJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICJGZWhsZW5kZXMgRWxlbWVudCDCuyVzwqtcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiS29udGV4dCB2b24gRWxlbWVudCDCuyVzwqsgZXJoYWx0ZW46ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIktlbm56ZWljaGVuIChhdWNoIGJla2FubnQgYWxzIE1ldGFkYXRlbikgYXVzZ2ViZW4iCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICJUT0MgYXVzZ2ViZW4gKEthcGl0ZWwgdW5kIEVkaXRpb25lbikiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJadXN0YW5kc2luZm9ybWF0aW9uIHVuZCBFaWdlbnNjaGFmdHNtaXR0ZWlsdW5nZW4gYXVzZ2ViZW4iCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJLZWluZSBGb3J0c2Nocml0dHNpbmZvcm1hdGlvbmVuIGF1c2dlYmVuIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICJBdXNnYWJlbmFjaHJpY2h0ZW4iCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotIktlaW5lIFN0YXR1c2luZm9ybWF0aW9uZW4gZsO8ciBkaWUgYW5nZWdlYmVuZSBFaWdlbnNjaGFmdCBhdXNnZWJlbiwgd2VubiAiCi0iYXVzZsO8aHJsaWNoZSBBdXNnYWJlIGVpbmdlc2NoYWx0ZXQgaXN0IChrYW5uIG1laHJmYWNoIHZlcndlbmRldCB3ZXJkZW4pIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiRUlHRU5TQ0hBRlQtTkFNRSIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiS2VpbmUgUm91dGluZSB6dW0gQWJmYW5nZW4gdm9uIEZlaGxlcm4gaW5zdGFsbGllcmVuIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICJFT1MgYXVmIFF1ZWxsZSB2b3IgZGVtIEJlZW5kZW4gZGVyIExlaXR1bmcgZXJ6d2luZ2VuIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJJbmRleC1TdGF0aXN0aWtlbiBzYW1tZWxuIHVuZCBhdXNnZWJlbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRkVITEVSOiBMZWl0dW5nIGtvbm50ZSBuaWNodCBrb25zdHJ1aWVydCB3ZXJkZW46ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiRkVITEVSOiBMZWl0dW5nIGtvbm50ZSBuaWNodCBrb25zdHJ1aWVydCB3ZXJkZW4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJXQVJOVU5HOiBGZWhsZXJoYWZ0ZSBMZWl0dW5nOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJGRUhMRVI6IERhcyBFbGVtZW50IMK7TGVpdHVuZ8KrIHd1cmRlIG5pY2h0IGdlZnVuZGVuLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIkxlaXR1bmcgd2lyZCBhdWYgUEFVU0lFUlQgZ2VzZXR6dCAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkZFSExFUjogTGVpdHVuZyBtw7ZjaHRlIG5pY2h0IHBhdXNpZXJ0IHdlcmRlbi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiTGVpdHVuZyBpc3QgYWt0aXYgdW5kIGVyZm9yZGVydCBrZWluZW4gVk9STEFVRiDigKZcbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIkxlaXR1bmcgbMOkdWZ0IHZvciDigKZcbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiRkVITEVSOiBMZWl0dW5nIGzDpHVmdCBuaWNodCB2b3IuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIkxlaXR1bmcgaXN0IHZvcmdlbGF1ZmVuIOKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJMZWl0dW5nIHdpcmQgYXVmIEFCU1BJRUxFTiBnZXNldHp0IC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgotbXNnc3RyICJGRUhMRVI6IExlaXR1bmcgc3BpZWx0IG5pY2h0IGFiLlxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIiIKLSJFT1MgYmVpIEJlZW5kZW4gaXN0IGVpbmdlc2NoYWx0ZXQgLS0gRU9TIHdpcmQgYXVmIGRpZSBMZWl0dW5nIGVyend1bmdlblxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIkVPUyBiZWkgQmVlbmRlbiBpc3QgZWluZ2VzY2hhbHRldCAtLSB3YXJ0ZW4gYXVmIEVPUyBuYWNoIGRlbSBGZWhsZXJcbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICJBdWYgRU9TIHdpcmQgZ2V3YXJ0ZXQg4oCmXG4iCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJFT1MgZXJoYWx0ZW4gLSBMZWl0dW5nIHdpcmQgYW5nZWhhbHRlbiDigKZcbiIKLQotbXNnaWQgIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJJbnRlcnJ1cHQgYmVpbSBXYXJ0ZW4gYXVmIEVPUyAtIExlaXR1bmcgd2lyZCBnZXN0b3BwdCAuLi5cbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJFaW4gRmVobGVyIGlzdCBiZWltIFdhcnRlbiBhdWYgRU9TIGF1ZmdldHJldGVuXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiQXVzZsO8aHJ1bmcgYmVlbmRldCBuYWNoICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICJMZWl0dW5nIHdpcmQgYXVmIEJFUkVJVCBnZXNldHp0IC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICJMZWl0dW5nIHdpcmQgYXVmIE5VTEwgZ2VzZXR6dCAuLi5cbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkxlaXR1bmcgd2lyZCBnZWxlZXJ0IC4uLlxuIgotCi0jfiBtc2dpZCAiYmluIgotI34gbXNnc3RyICJCZWjDpGx0ZXIiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybmVyIEZlaGxlciBpbSBEYXRlbnN0cm9tLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIlp1c3RhbmRzaW5mb3JtYXRpb24gZGVyIEFydCBBUlQgbmljaHQgYXVzZ2ViZW4iCi0KLSN+IG1zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCi0jfiBtc2dzdHIgIkFSVDEsQVJUMiwuLi4iCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgIlZlcmtuw7xwZnVuZyBvaG5lIFF1ZWxsZWxlbWVudCIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgIlZlcmtuw7xwZnVuZyBvaG5lIFppZWxlbGVtZW50IgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgIktlaW4gRWxlbWVudCwgdW0gVVJJIMK7JXPCqyB6dSB2ZXJiaW5kZW4iCi0KLSN+IG1zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0jfiBtc2dzdHIgIlppZWxlbGVtZW50IGbDvHIgVVJJIMK7JXPCqyBuaWNodCB2ZXJrbsO8cGZ0IHdlcmRlbiIKLQotI34gbXNnaWQgIm1heGltdW0iCi0jfiBtc2dzdHIgIk1heGltdW0iCi0KLSN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgotI34gbXNnc3RyICJBdWZydWY6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQuZWlnZW5zY2hhZnQ9d2VydCAuLi5dXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCi0jfiBtc2dzdHIgIkZFSExFUjogQXVzbGVzZW4gZGVyIFhNTC1EYXRlaSDCuyVzwqsgZmVobGdlc2NobGFnZW4uXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIkZFSExFUjogS2VpbiBIYXVwdGxlaXR1bmdzZWxlbWVudCBpbiBEYXRlaSDCuyVzwqsuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCi0jfiBtc2dzdHIgIldBUk5VTkc6IFp1ciBaZWl0IHdpcmQgbnVyIGVpbiBIYXVwdGVsZW1lbnQgdW50ZXJzdMO8dHp0LlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgotI34gbXNnc3RyICIiCi0jfiAiRkVITEVSOiBEYXMgQmVmZWhsc3plaWxlbmFyZ3VtZW50IMK7JWTCqyBrb25udGUgbmljaHQgYXVzZ2VsZXNlbiB3ZXJkZW46ICIKLSN+ICIlcy5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCi0jfiBtc2dzdHIgIldBUk5VTkc6IEVsZW1lbnQgbmFtZW5zIMK7JXPCqyBuaWNodCBnZWZ1bmRlbi5cbiIKLQotI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCi0jfiBtc2dzdHIgIlhNTC1SZXByw6RzZW50YXRpb24gZGVyIExlaXR1bmcgaW4gREFURUkgc3BlaWNoZXJuIHVuZCBiZWVuZGVuIgotCi0jfiBtc2dpZCAiRklMRSIKLSN+IG1zZ3N0ciAiREFURUkiCi0KLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIktlaW5lIFJvdXRpbmVuIGbDvHIgU0lHVVNSMSB1bmQgU0lHVVNSMiBpbnN0YWxsaWVyZW4iCi0KLSN+IG1zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgotI34gbXNnc3RyICIiCi0jfiAiU3BlaWNoZXJ6dW9yZG51bmdzdmVyZm9sZ3VuZyBhdXNnZWJlbiAoZmFsbHMgenVyIEtvbXBpbGllcnplaXQgYWt0aXZpZXJ0KSIKLQotI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzOiAlcyIKLSN+IG1zZ3N0ciAiRmVobGVyIGJlaW0gZXJuZXV0ZW4gRWlubGVzZW4gZGVyIFJlZ2lzdHJ5ICVzIDogJXMiCi0KLSN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlcyIKLSN+IG1zZ3N0ciAiRmVobGVyIGJlaW0gZXJuZXV0ZW4gRWlubGVzZW4gZGVyIFJlZ2lzdHJ5ICVzIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKLSN+IG1zZ3N0ciAiSW50ZXJuZXIgR1N0cmVhbWVyLUZlaGxlcjogWnVzdGFuZHN3ZWNoc2VsIGZlaGxnZXNjaGxhZ2VuLiIKLQotI34gbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBkZXNjcmlwdG9yIFwiJWRcIi4iCi0jfiBtc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBpbiBkZW4gRGF0ZWlkZXNrcmlwdG9yIMK7JWTCqy4iCi0KLSN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCi0jfiBtc2dzdHIgIkRlciBEYXRlaWRlc2tyaXB0b3IgwrslZMKrIGlzdCBuaWNodCBnw7xsdGlnLiIKLQotI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKLSN+IG1zZ3N0ciAiQmVzY2hsZXVuaWd0ZSBDUFUtQmVmZWhsZSBkZWFrdGl2aWVyZW4iCi0KLSN+IG1zZ2lkICJTQ0hFRFVMRVIiCi0jfiBtc2dzdHIgIlNDSEVEVUxFUiIKLQotI34gbXNnaWQgIlJlZ2lzdHJ5IHRvIHVzZSIKLSN+IG1zZ3N0ciAiWnUgYmVudXR6ZW5kZSBSZWdpc3RyeSIKLQotI34gbXNnaWQgIlJFR0lTVFJZIgotI34gbXNnc3RyICJSRUdJU1RSWSIKLQotI34gbXNnaWQgInBhdGggbGlzdCBmb3IgbG9hZGluZyBwbHVnaW5zIChzZXBhcmF0ZWQgYnkgJyVzJykiCi0jfiBtc2dzdHIgIlBmYWRsaXN0ZSB6dW0gTGFkZW4gdm9uIFBsdWdpbnMgKER1cmNoIMK7JXPCqyBnZXRyZW5udCkiCi0KLSN+IG1zZ2lkICJTY2hlZHVsZXIgdG8gdXNlIChkZWZhdWx0IGlzICclcycpIgotI34gbXNnc3RyICJadSBiZW51dHplbmRlciBTY2hlZHVsZXIgKFN0YW5kYXJkOiDCuyVzwqspIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzY2hlZHVsZXIgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICIiCi0jfiAiSW50ZXJuZXQgR1N0cmVhbWVyLUZlaGxlcjogU2NoZWR1bGVycHJvYmxlbS4gQml0dGUgc2NoaWNrZW4gU2llIGVpbmVuICIKLSN+ICJGZWhsZXJiZXJpY2h0LiIKLQotI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCi0jfiBtc2dzdHIgIk9yaWdpbmFsb3J0IGRlciBEYXRlaSBhbHMgVVJJIgotCi0jfiBtc2dpZCAiVGhlcmUgaXMgbm8gZWxlbWVudCBwcmVzZW50IHRvIGhhbmRsZSB0aGUgc3RyZWFtJ3MgbWltZSB0eXBlICVzLiIKLSN+IG1zZ3N0ciAiIgotI34gIkVzIGdpYnQga2VpbiBFbGVtZW50LCBkYXMgZGVuIE1JTUUtVHlwIMK7JXPCqyBkaWVzZXMgRGF0ZW5zdHJvbXMgIgotI34gInZlcmFyYmVpdGVuIGthbm4uIgotCi0jfiBtc2dpZCAiIgotI34gImNvdWxkIG5vdCBjb252ZXJ0IFwiJXNcIiBzbyB0aGF0IGl0IGZpdHMgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotI34gbXNnc3RyICIiCi0jfiAiS29ubnRlIMK7JXPCqyBuaWNodCBzbyBrb252ZXJ0aWVyZW4sIGRhc3MgZXMgenVyIEVpZ2Vuc2NoYWZ0IMK7JXPCqyBpbSAiCi0jfiAiRWxlbWVudCDCuyVzwqsgcGFzc3QiCi0KLSN+IG1zZ2lkICJTaG93IHBsdWdpbiBkZXRhaWxzIgotI34gbXNnc3RyICJQbHVnaW5kZXRhaWxzIGFuemVpZ2VuIgotCi0jfiBtc2dpZCAiU2hvdyBzY2hlZHVsZXIgZGV0YWlscyIKLSN+IG1zZ3N0ciAiU2NoZWR1bGVyZGV0YWlscyBhbnplaWdlbiIKLQotI34gbXNnaWQgIiBpdGVyYXRpb25zIChzdW0gJSIKLSN+IG1zZ3N0ciAiIEl0ZXJhdGlvbmVuIChTdW1tZSAlIgotCi0jfiBtc2dpZCAiIG5zLCBhdmVyYWdlICUiCi0jfiBtc2dzdHIgIiBOYW5vc2VrdW5kZW4sIGR1cmNoc2Nobml0dGxpY2ggJSIKLQotI34gbXNnaWQgIiBucywgbWluICUiCi0jfiBtc2dzdHIgIiBOYW5vc2VrdW5kZW4sIG1pbmltYWwgJSIKLQotI34gbXNnaWQgIiBucywgbWF4ICUiCi0jfiBtc2dzdHIgIiBOYW5vc2VrdW5kZW4sIG1heGltYWwgJSIKLQotI34gbXNnaWQgIiBucykuXG4iCi0jfiBtc2dzdHIgIiBOYW5vc2VrdW5kZW4uXG4iCi0KLSN+IG1zZ2lkICJOdW1iZXIgb2YgdGltZXMgdG8gaXRlcmF0ZSBwaXBlbGluZSIKLSN+IG1zZ3N0ciAiQW56YWhsLCB3aWUgb2Z0IGRpZSBMZWl0dW5nIGR1cmNobGF1ZmVuIHdpcmQiCi0KLSN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKLSN+IG1zZ3N0ciAiICAgICAgICAgVmVyc3VjaGUgdHJvdHpkZW0genUgbGF1ZmVuLlxuIgpkaWZmIC0tZ2l0IGEvcG8vZWwuZ21vIGIvcG8vZWwuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGNmMmE0Li4wMDAwMDAwCi0tLSBhL3BvL2VsLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2VsLnBvIGIvcG8vZWwucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYWVmNzMuLjAwMDAwMDAKLS0tIGEvcG8vZWwucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzk2ICswLDAgQEAKLSMgR3JlZWsgdHJhbnNsYXRpb24gZm9yIGdzdHJlYW1lci4KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuIAotIyBNaWNoYWVsIEtvdHNhcmluaXMgPG1rNzM2MjhAZ21haWwuY29tPiwgMjAxMAotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyLTAuMTAuMzAuM1xuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTExLTI5IDExOjE0KzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IE1pY2hhZWwgS290c2FyaW5pcyA8bWs3MzYyOEBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogR3JlZWsgPHRlYW1AbGlzdHMuZ25vbWUuZ3I+XG4iCi0iTGFuZ3VhZ2U6IGVsXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4hPSAxKVxuIgotIlgtUG9lZGl0LUxhbmd1YWdlOiBHcmVla1xuIgotIlgtUG9lZGl0LUNvdW50cnk6IEdSRUVDRVxuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICLOlc68z4bOrM69zrnPg863IM+EzrfPgiDOrc66zrTOv8+DzrfPgiDPhM6/z4UgR1N0cmVhbWVyIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIs6dzrEgzrPOr869zr/Phc69IM+MzrvOtc+CIM6/zrkgz4DPgc6/zrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIM66z4HOr8+DzrnOvM61z4IiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAizpXOvM+GzqzOvc65z4POtyDOtM65zrHOuM6tz4POuc68z4nOvSDOus6xz4TOt86zzr/Pgc65z47OvSDPg8+GzrHOu868zqzPhM+Jzr0gzrrOsc65IM6tzr7Ov860zr/PgiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSLOoM+Bzr/Otc+AzrnOu861zrPOvM6tzr3OvyDOtc+Azq/PgM61zrTOvyDOsc+Azr/Pg8+GzrHOu868zqzPhM+Jz4POt8+CIM6xz4DPjCAxICjOvM+Mzr3OvyDOu86szrjOv8+CKSDOrc+Jz4IgNSAozr/PhM65zrTOrs+Azr/PhM61KSDOriAiCi0iMCDOs865zrEgzrrOsc64z4zOu86/z4UgzrHPgM6/z4TOrc67zrXPg868zrEiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiTEVWRUwiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0izpvOr8+Dz4TOsSDOtM65zrHPh8+Jz4HOuc+DzrzOrc69zrcgzrzOtSDOus+MzrzOvM6xz4TOsSDPhM+Jzr0gzrbOtc+FzrPOsc+BzrnPjs69IM+Mzr3Ov868zrEgzrrOsc+EzrfOs86/z4HOr86xz4I6zrXPgM6vz4DOtc60zr8gIgotIihjYXRlZ29yeV9uYW1lOmxldmVsKSDOs865zrEgzrrOsc64zr/Pgc65z4POvM+MIM+Dz4XOs866zrXOus+BzrnOvM6tzr3Pic69IM61z4DOuc+Azq3OtM+Jzr0gzrPOuc6xIM66zrHOuM61zrzOuc6sICIKLSLOus6xz4TOt86zzr/Pgc6vzrEuIM6gzrHPgc6szrTOtc65zrPOvM6xOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMSVNUIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIs6Rz4DOtc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgzq3Os8+Hz4HPic68z4nOvSDOsc+Azr/PhM61zrvOtc+DzrzOrM+Ez4nOvSDOsc+Azr/Pg8+GzrHOu868zqzPhM+Jz4POt8+CIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICLOkc+AzrXOvc61z4HOs86/z4DOv86vzrfPg863IM6xz4DOv8+Dz4bOsc67zrzOrM+Ez4nPg863z4IiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAizpXOvc61z4HOs86/z4DOv86vzrfPg863IM6xzr3Osc67z4XPhM65zrrPjs69IM60zrnOsc6zzr3Pic+Dz4TOuc66z47OvSDPhs+Mz4HPhM+Jz4POt8+CIM+Az4HPjM+DzrjOtc+Ezr/PhSIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIs6UzrnOsc+Hz4nPgc65z4POvM6tzr3Otc+CIM68zrUgzqzOvc+JLc66zqzPhM+JIM+EzrXOu861zq/OsSDOtM65zrHOtM+Bzr/OvM6tz4Igz4DOv8+FIM+AzrXPgc65zq3Ph86/z4XOvSDPgM+Bz4zPg864zrXPhM6xIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIlBBVEhTIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIs6UzrnOsc+Hz4nPgc65z4POvM6tzr3OtyDOvM61IM66z4zOvM68zrEgzrvOr8+Dz4TOsSDPgM+Bzr/Pg864zq3PhM+Jzr0gzrPOuc6xIM+Az4HOv8+Gz4zPgc+Ez4nPg863IM61z4DOuc+AzrvOrc6/zr0gz4TOt8+CIM67zq/Pg8+EzrHPgiDPgM6/z4UgIgotIs61zq/Ovc6xzrkgzrHPgM6/zrjOt866zrXPhc68zq3Ovc63IM+Dz4TOtyDOvM61z4TOsc6yzrvOt8+Ezq4gz4DOtc+BzrnOss6szrvOu86/zr3PhM6/z4IgR1NUX1BMVUdJTl9QQVRIIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiUExVR0lOUyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSLOkc+AzrXOvc61z4HOs86/z4DOv86vzrfPg863IM+AzrHOs86vzrTOtc+Fz4POt8+CIM+Dz4bOsc67zrzOrM+Ez4nOvSDOtM65zrHPh8+Jz4HOuc+DzrzOv8+NIM66zrHPhM6sIM+Ezrcgz4bPjM+Bz4TPic+Dzrcgz4DPgc6/z4POuM6tz4TOv8+FIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIs6Rz4DOtc69zrXPgc6zzr/PgM6/zq/Ot8+DzrcgzrXOvc63zrzOrc+Bz4nPg863z4Igz4TOv8+FIM68zrfPhM+Bz47Ov8+FIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotIs6Rz4DOtc69zrXPgc6zzr/PgM6/zq/Ot8+DzrcgzrXOus66zq/Ovc63z4POt8+CIM6yzr/Ot864zrfPhM65zrrOrs+CIM60zrnOtc+BzrPOsc+Dzq/Osc+CIM66zrHPhM6sIM+Ezrcgz4POrM+Bz4nPg863IM+Ezr/PhSDOvM63z4TPgc+Ozr/PhSIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICLOlc+AzrnOu86/zrPOrc+CIM+Ezr/PhSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICLOlc68z4bOrM69zrnPg863IM61z4DOuc67zr/Os8+Ozr0gz4TOv8+FIEdTdHJlYW1lciIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICLOhs6zzr3Pic+Dz4TOtyDOtc+AzrnOu86/zrPOriIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAizqTOvyBHU3RyZWFtZXIgzrHOvc+EzrnOvM61z4TPjs+AzrnPg861IM6tzr3OsSDOs861zr3Ouc66z4wgz4PPhs6szrvOvM6xIM6yzrHPg865zrrOrs+CIM6yzrnOss67zrnOv864zq7Ous63z4IuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSLOn865IM+Az4HOv86zz4HOsc68zrzOsc+EzrnPg8+Ezq3PgiDPhM6/z4UgR1N0cmVhbWVyIM+EzrXOvM+Azq3Ou865zrHPg86xzr0gzrrOsc65IM60zrXOvSDOsc69z4TOuc+Dz4TOv86vz4fOuc+DzrHOvSDOus+JzrTOuc66z4wgIgotIs+Dz4bOrM67zrzOsc+Ezr/PgiDPg8+Ezr8gz4PPhs6szrvOvM6xIM6xz4XPhM+MLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICLOlc+Dz4nPhM61z4HOuc66z4wgz4PPhs6szrvOvM6xIEdTdHJlYW1lcjogzr8gzrrPjs60zrnOus6xz4IgzrTOtc69IM+FzrvOv8+Azr/Ouc6uzrjOt866zrUuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0izqPPhs6szrvOvM6xIEdTdHJlYW1lcjogzrHPgM6/z4TPhc+Hzq/OsSDOsc67zrvOsc6zzq7PgiDOus6xz4TOrM+Dz4TOsc+DzrfPgiDOus6xzrkgzrrOrM+Azr/Ouc6/IM+Dz4TOv865z4fOtc6vzr8gzrHPgM6tz4TPhc+HzrUgzr3OsSAiCi0izrHOvc6xz4HPhM6uz4POtc65IM+Dz4nPg8+Ez4wgzrzOrs69z4XOvM6xIM+Dz4bOrM67zrzOsc+Ezr/PgiDOvM61IM+EzrfOvSDOsc65z4TOr86xIM+EzrfPgiDOsc+Azr/PhM+Fz4fOr86xz4IuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgR1N0cmVhbWVyOiDPgM+Bz4zOss67zrfOvM6xIHBhZC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Dz4bOrM67zrzOsSBHU3RyZWFtZXI6IM+Az4HPjM6yzrvOt868zrEgzr3Ors68zrHPhM6/z4IuIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgR1N0cmVhbWVyOiDPgM+Bz4zOss67zrfOvM6xIM+Dz4XOvc61zr3Ovc+MzrfPg863z4IuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Dz4bOrM67zrzOsSBHU3RyZWFtZXI6IM+Az4HPjM6yzrvOt868zrEgzrPOtc6zzr/Ovc+Mz4TOv8+CLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Dz4bOrM67zrzOsSBHU3RyZWFtZXI6IM+Az4HPjM6yzrvOt868zrEgzrHOvc6xzrbOrs+EzrfPg863z4IuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICLOlc+Dz4nPhM61z4HOuc66z4wgz4PPhs6szrvOvM6xIEdTdHJlYW1lcjogz4DPgc+MzrLOu863zrzOsSDOtM+Fzr3Osc+Ezr/PhM6uz4TPic69LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICLOlc+Dz4nPhM61z4HOuc66z4wgz4PPhs6szrvOvM6xIEdTdHJlYW1lcjogz4DPgc+MzrLOu863zrzOsSDOtc+EzrnOus6tz4TOsc+CLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIs6Rz4DPjCDPhM63zr0gzrXOs866zrHPhM6sz4PPhM6xz4POriDPg86xz4Igz4TOv8+FIEdTdHJlYW1lciDOu861zq/PgM61zrkgzq3Ovc6xIM+Az4HPjM+DzrjOtc+Ezr8uIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgR1N0cmVhbWVyOiDPgM+Bz4zOss67zrfOvM6xIM+Bzr/Ou86/zrPOuc6/z40uIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLSLOkc+Fz4TOriDOtyDOtc+GzrHPgc68zr/Os86uIM+Az4HOv8+Dz4DOsc64zrXOryDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7Pg861zrkgzrvOtc65z4TOv8+Fz4HOs86vzrEgz4TOv8+FIEdTdHJlYW1lciDPgM6/z4UgIgotIs6tz4fOtc65IM6xz4DOtc69zrXPgc6zzr/PgM6/zrnOt864zrXOry4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIs6kzr8gR1N0cmVhbWVyIM+Dz4XOvc6szr3PhM63z4POtSDOrc69zrEgzrPOtc69zrnOus+MIM+Dz4bOrM67zrzOsSDOss65zrLOu865zr/OuM6uzrrOt8+CIM+Fz4DOv8+Dz4TOrs+BzrnOvs63z4IuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOsc+Bz4fOuc66zr/PgM6/zq/Ot8+DzrfPgiDPhc+Azr/Pg8+EzrfPgc65zrrPhM65zrrOrs+CIM6yzrnOss67zrnOv864zq7Ous63z4IuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrrOu861zrnPg86vzrzOsc+Ezr/PgiDPhc+Azr/Pg8+EzrfPgc65zrrPhM65zrrOrs+CIM6yzrnOss67zrnOv864zq7Ous63z4IuIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM60zrnOsc68z4zPgc+Gz4nPg863z4Igz4XPgM6/z4PPhM63z4HOuc66z4TOuc66zq7PgiDOss65zrLOu865zr/OuM6uzrrOt8+CLiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAizqPPhs6szrvOvM6xIM66z4nOtM65zrrOv8+Azr/Or863z4POt8+CLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICLOpM6/IEdTdHJlYW1lciDPg8+Fzr3OrM69z4TOt8+DzrUgzq3Ovc6xIM6zzrXOvc65zrrPjCDPg8+GzqzOu868zrEgz4DPjM+Bz4nOvS4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICLOlM61zr0gzrLPgc6tzrjOt866zrUgzr8gz4DPjM+Bzr/Pgi4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICLOnyDPgM+Mz4HOv8+CIM61zq/Ovc6xzrkgzrHPgM6xz4PPh86/zrvOt868zq3Ovc6/z4Igzq4gzrzOtyDOtM65zrHOuM6tz4POuc68zr/Pgi4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc6/zq/Os868zrHPhM6/z4Igz4DPjM+Bzr/PhSDOs865zrEgzrHOvc6szrPOvc+Jz4POty4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc6/zq/Os868zrHPhM6/z4Igz4DPjM+Bzr/PhSDOs865zrEgzrXOs86zz4HOsc+Gzq4uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xzr3Ov86vzrPOvM6xz4TOv8+CIM+Az4zPgc6/z4UgzrPOuc6xIM6xzr3OrM6zzr3Pic+DzrcgzrrOsc65IM61zrPOs8+BzrHPhs6uLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrrOu861zrnPg86vzrzOsc+Ezr/PgiDPgM+Mz4HOv8+FLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xzr3OrM6zzr3Pic+DzrfPgiDOsc+Az4wgz4TOv869IM+Az4zPgc6/LiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrXOs86zz4HOsc+Gzq7PgiDPg8+Ezr/OvSDPgM+Mz4HOvy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOtc66z4TOrc67zrXPg863z4IgzrHOvc6xzrbOrs+EzrfPg863z4Igz4PPhM6/zr0gz4DPjM+Bzr8uIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDPg8+FzrPPh8+Bzr/Ovc65z4POvM6/z40gzrzOtSDPhM6/zr0gz4DPjM+Bzr8uIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrvOrs+IzrfPgi/Ov8+BzrnPg868zr/PjSDPgc+FzrjOvM6vz4POtc+Jzr0gzrHPgM+MIM+Ezr/OvS/Pg8+Ezr/OvSDPgM+Mz4HOvy4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIs6UzrXOvSDOrc+HzrXOuSDOvM61zq/Ovc61zrkgz4fPjs+Bzr/PgiDPg8+Ezr/OvSDPgM+Mz4HOvy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAizpTOtc69IM6tz4fOtc65IM68zrXOr869zrXOuSDPh8+Oz4HOv8+CIM+Dz4TOv869IM+Az4zPgc6/LiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAizqTOvyBHU3RyZWFtZXIgz4PPhc69zqzOvc+EzrfPg861IM6tzr3OsSDOs861zr3Ouc66z4wgz4PPhs6szrvOvM6xIM+Bzr/Ors+CLiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotIs6kzr8gz4PPhM6/zrnPh861zq/OvyDOtM61zr0gz4XOu86/z4DOv865zrXOryDPh861zrnPgc65z4POvM+MIM6xz4XPhM6uIM+EzrfPgiDPgc6/zq7Pgi4gzqDOsc+BzrHOus6xzrvOv8+NzrzOtSDOsc69zrHPhs6tz4HOtc+EzrUgz4TOvyAiCi0iz4PPhs6szrvOvM6xLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM66zrHOuM6/z4HOuc+DzrzOv8+NIM+Ezr/PhSDPhM+Nz4DOv8+FIM+EzrfPgiDPgc6/zq7Pgi4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSLOlyDPgc6/zq4gzrXOr869zrHOuSDOtM65zrHPhs6/z4HOtc+EzrnOus6/z40gz4TPjc+Azr/PhSDOsc+Az4wgzrHPhc+Ez4zOvSDPgM6/z4Ugz4fOtc65z4HOr862zrXPhM6xzrkgzrHPhc+Ez4wgz4TOvyDPg8+Ezr/Ouc+HzrXOr86/LiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiIgotIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPgM6xz4HPjs69IM66z4nOtM65zrrOv8+Azr/Ouc63z4TOrs+CIM+Azr/PhSDOvc6xIM68z4DOv8+BzrXOryDOvc6xIM+HzrXOuc+BzrnPg8+EzrXOryDPhM6/zr0gz4TPjc+Azr8gz4TOt8+CIM+Bzr/Ors+CLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOsc+Azr/Ous+JzrTOuc66zr/PgM6/zq/Ot8+DzrfPgiDPgc6/zq7Pgi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrrPic60zrnOus6/z4DOv86vzrfPg863z4Igz4HOv86uz4IuIgotCi1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHPgM+MLc+Azr/Ou8+Nz4DOu861zr7Ot8+CIM+Bzr/Ors+CLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDPgM6/zrvPjc+AzrvOtc6+zrfPgiDPgc6/zq7Pgi4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICLOlyDPgc6/zq4gzrXOr869zrHOuSDOu86xzr3OuM6xz4POvM6tzr3Ot8+CIM68zr/Pgc+Gzq7Pgi4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAizpcgz4HOv86uIM61zq/Ovc6xzrkgzrrPgc+Fz4DPhM6/zrPPgc6xz4bOt868zq3Ovc63IM66zrHOuSDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXPhM6xzrkgzrHPgM6/zrrPgc+Fz4DPhM6/zrPPgc6sz4bOt8+DzrcuIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIs6XIM+Bzr/OriDOtc6vzr3Osc65IM66z4HPhc+Az4TOv86zz4HOsc+GzrfOvM6tzr3OtyDOus6xzrkgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM6xz4DOv866z4HPhc+Az4TOv86zz4HOsc+GzrfOuM61zq8gzrXPgM61zrnOtM6uIM60zrXOvSAiCi0izq3Ph861zrkgzrTOv864zrXOryDOus6xz4TOrM67zrvOt867zr/PgiDOus+JzrTOuc66z4zPgi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAizpTOtc69IM+Fz4DOrM+Bz4fOtc65IM68zq7Ovc+FzrzOsSDPg8+GzqzOu868zrHPhM6/z4IgzrPOuc6xIM+Ezr/OvSDPhM6/zrzOrc6xICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICIiCi0izpTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Ez4XPgM6/z4DOv865zrfOvM6tzr3OvyDOvM6uzr3Phc68zrEgz4PPhs6szrvOvM6xz4TOv8+CIM6zzrnOsSDPhM6/zr0gz4TOv868zq3OsSAlcyDOus6xzrkgz4TOv869IM66z47OtM65zrrOsSAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIs6kzr8gzrXPgM65zrvOtc6zzrzOrc69zr8gz4HOv867z4zOuSDOtM61zr0gzrzPgM6/z4HOtc6vIM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOt864zrXOryDPg8+EzrcgzrTOuc6xz4PPic67zq7Ovc+Jz4POty4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgInRpdGxlIgotbXNnc3RyICLPhM6vz4TOu86/z4IiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICLOvyDPhM6vz4TOu86/z4Igz4DOv8+FIM+Dz4XOvc6uzrjPic+CIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrHOuSIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICLPjM69zr/OvM6xIM+EzrHOvs65zr3PjM68zrfPg863z4Igz4TOr8+EzrvOv8+FIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAizr8gz4PPhc69zq7OuM63z4Igz4TOr8+EzrvOv8+CIM6zzrnOsSDPg866zr/PgM6/z43PgiDPhM6xzr7Ouc69z4zOvM63z4POt8+CIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICLOus6xzrvOu865z4TOrc+Hzr3Ot8+CIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICLPgM+Bz4zPg8+Jz4DOvyjOsSkgz4XPgM61z43OuM+Fzr3OvyDOs865zrEgz4TOt869IM63z4fOv86zz4HOrM+GzrfPg863IgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICLPjM69zr/OvM6xIM+EzrHOvs65zr3PjM68zrfPg863z4IgzrrOsc67zrvOuc+Ezq3Ph869zrciCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIs+Az4HPjM+Dz4nPgM6/KM6xKSDPhc+AzrXPjc64z4XOvc6/IM6zzrnOsSDPhM63zr0gzrXOs86zz4HOsc+Gzq4gzrPOuc6xIM+DzrrOv8+Azr/Pjc+CIM+EzrHOvs65zr3PjM68zrfPg863z4IiCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAizrTOr8+DzrrOv8+CIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgIs60zq/Pg866zr/PgiDPgM6/z4Ugz4DOtc+BzrnOrc+HzrXOuSDOsc+Fz4TOrCDPhM6xIM60zrXOtM6/zrzOrc69zrEiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiz4zOvc6/zrzOsSDPhM6xzr7Ouc69z4zOvM63z4POt8+CIM60zq/Pg866zr/PhSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLOtM6vz4POus6/z4Igz4DOv8+FIM+AzrXPgc65zq3Ph861zrkgzrHPhc+Ezqwgz4TOsSDOtM61zrTOv868zq3Ovc6xIM6zzrnOsSDPg866zr/PgM6/z43PgiDPhM6xzr7Ouc69z4zOvM63z4POt8+CIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICLOus6xzrvOu865z4TOrc+Hzr3Ot8+CIM60zq/Pg866zr/PhSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAizp8gzrrOsc67zrvOuc+Ezq3Ph869zrfPgiDOv867z4zOus67zrfPgc6/z4Ugz4TOv8+FIM60zq/Pg866zr/PhSwgz4zPgM+Jz4IgzrjOsSDPgM+Bzq3PgM61zrkgzr3OsSDOtc68z4bOsc69zq/Ots61z4TOsc65IgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICLPjM69zr/OvM6xIM+EzrHOvs65zr3PjM68zrfPg863z4IgzrrOsc67zrvOuc+Ezq3Ph869zrcgzrTOr8+DzrrOv8+FIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICLOnyDOus6xzrvOu865z4TOrc+Hzr3Ot8+CIM6/zrvPjM66zrvOt8+Bzr/PhSDPhM6/z4UgzrTOr8+DzrrOv8+FLCDPjM+Az4nPgiDOuM6xIM+Az4HOrc+AzrXOuSDOvc6xIM+EzrHOvs65zr3Ov868zrXOr8+EzrHOuS4iCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICLOt868zrXPgc6/zrzOt869zq/OsSIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAizrfOvM61z4HOv868zrfOvc6vzrEgzrTOt868zrnOv8+Fz4HOs86vzrHPgiDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69ICjPic+CIM68zrnOsSDOtM6/zrzOriBHRGF0ZSkiCi0KLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAiZGF0ZXRpbWUiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgIs63zrzOtc+Bzr/OvM63zr3Or86xIM66zrHOuSDPjs+BzrEgzrTOt868zrnOv8+Fz4HOr86xz4Igz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSAozrTOv868zrfOvM6tzr3Otc+CIM+Jz4IgR3N0RGF0ZVRpbWUpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgIs61zq/OtM6/z4IiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAizrXOr860zr/PgiDPgM6/z4UgzrHOvc6uzrrOv8+Fzr0gzrHPhc+Ezqwgz4TOsSDOtM61zrTOv868zq3Ovc6xIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAiz4PPh8+MzrvOuc6/IgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgIs61zrvOtc+NzrjOtc+Bzr8gzrrOtc6vzrzOtc69zr8gz4PPh86/zrvOuc6xz4POvM6/z40gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgIs61zrrPhM61z4TOsc68zq3Ovc6/IM+Dz4fPjM67zrnOvyIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKLW1zZ3N0ciAiIgotIs61zrvOtc+NzrjOtc+Bzr8gzrrOtc6vzrzOtc69zr8gz4PPh86/zrvOuc6xz4POvM6/z40gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSDPhM63z4IgzrzOv8+Bz4bOrs+CIGtleT12YWx1ZSDOriAiCi0ia2V5W2VuXT1jb21tZW50IgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICLOsc+BzrnOuM68z4zPgiDOus6/zrzOvM6xz4TOuc6/z40iCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAizrHPgc65zrjOvM+Mz4IgzrrOv868zrzOsc+EzrnPjs69IM68zq3Pg86xIM+DzrUgzrzOuc6xIM+Dz4XOu867zr/Os86uIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgIs66zrHPhM6xzrzOrc+Ez4HOt8+DzrcgzrrOv868zrzOsc+EzrnPjs69IgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotIs63IM66zrHPhM6xzrzOrc+Ez4HOt8+Dzrcgz4TPic69IM66zr/OvM68zrHPhM65z47OvSDOvM6tz4POsSDPg8+Ezrcgz4PPhc67zrvOv86zzq4gz4PPhM63zr0gzr/PgM6/zq/OsSDOsc69zq7Ous61zrkgzrHPhc+Ez4wgz4TOvyAiCi0izrrOv868zrzOrM+EzrkiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAizrHPgc65zrjOvM+Mz4IgzrTOr8+DzrrOv8+FIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAizrHPgc65zrjOvM+Mz4IgzrTOr8+DzrrOv8+FIM68zq3Pg86xIM+DzrUgzrzOuc6xIM+Dz4XOu867zr/Os86uIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAizrrOsc+EzrHOvM6tz4TPgc63z4POtyDOtM6vz4POus+Jzr0iCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAizrcgzrrOsc+EzrHOvM6tz4TPgc63z4POtyDPhM+Jzr0gzrTOr8+DzrrPic69IM68zq3Pg86xIM+Dz4TOtyDPg8+FzrvOu86/zrPOriDPgM6/z4UgzrHOvc6uzrrOtc65IM6xz4XPhM+Mz4Igzr8gzrTOr8+DzrrOv8+CIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgIs+Ezr/PgM6/zrjOtc+Dzq/OsSIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0izqDPgc6/zq3Ou861z4XPg863IM+Ezr/PhSDOvM6tz4POv8+FIM+Jz4IgVVJJICjPhM6/z4DOv864zrXPg86vzrEsIM+Mz4DOv8+FIM+GzrnOu86/zr7Otc69zrXOr8+EzrHOuSDPhM6/IM+Az4HPic+Ez4zPhM+Fz4DOvyDPhM6/z4UgIgotIs6xz4HPh861zq/Ov8+FIM6uIM+EzrfPgiDPgc6/zq7PgikiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAizrHPgc+HzrnOus6uIM+DzrXOu86vzrTOsSIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLSLOlyDOsc+Bz4fOuc66zq4gz4POtc67zq/OtM6xIM6zzrnOsSDOsc+Fz4TPjCDPhM6/IM68zq3Pg86/ICjPgC7Phy4gzrcgzrHPgc+HzrnOus6uIM+DzrXOu86vzrTOsSDPhM63z4Igz4TOsc65zr3Or86xz4Igzq4gz4TOv8+FICIKLSLOus6xzrvOu865z4TOrc+Hzr3OtykiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAiz4DOtc+BzrnOs8+BzrHPhs6uIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICLPg8+Nzr3PhM6/zrzOvyDOus61zq/OvM61zr3OvyDPgM6/z4Ugz4DOtc+BzrnOs8+BzqzPhs61zrkgz4TOvyDPgM61z4HOuc61z4fPjM68zrXOvc6/IM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0iCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICLOrc66zrTOv8+DzrciCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAizq3Ous60zr/Pg863IM6xz4XPhM+Ozr0gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSIKLQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIklTUkMiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gzrLOu86tz4DOtSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICLOv8+BzrPOsc69zrnPg868z4zPgiIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiz4DOvc61z4XOvM6xz4TOuc66zqwgzrTOuc66zrHOuc+OzrzOsc+EzrEiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLPg863zrzOtc6vz4nOvM6xIM+Azr3Otc+FzrzOsc+EzrnOus+Ozr0gzrTOuc66zrHOuc+JzrzOrM+Ez4nOvSDPhM+Jzr0gzrTOtc60zr/OvM61zr3Pic69IgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAidXJpIM+Azr3Otc+FzrzOsc+EzrnOus+Ozr0gzrTOuc66zrHOuc+JzrzOrM+Ez4nOvSIKLQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJIM6zzrnOsSDPhM6/IM+DzrfOvM61zq/Pic68zrEgz4DOvc61z4XOvM6xz4TOuc66z47OvSDOtM65zrrOsc65z4nOvM6sz4TPic69IM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAizrrPic60zrnOus6/z4DOv865zrfPhM6uz4IiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICLOtc+AzrnOus6/zrnOvc+Jzr3Or86xIgotCi1tc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiz4DOu863z4HOv8+Gzr/Pgc6vzrXPgiDOtc+AzrnOus6/zrnOvc+Jzr3Or86xz4IiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICLOrM60zrXOuc6xIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICLOrM60zrXOuc6xIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0iCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAidXJpIM6szrTOtc65zrHPgiIKLQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJIM+EzrfPgiDOrM60zrXOuc6xz4Igz4TPic69IM60zrXOtM6/zrzOrc69z4nOvSIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAizrXOus+EzrXOu861z4PPhM6uz4IiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAiz4DPgc+Mz4PPic+Azr8ozrEpIM+Azr/PhSDPgM6xzq/Ots61zrkiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAiz4PPhc69zrjOrc+EzrfPgiIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiz4DPgc+Mz4PPic+Azr8ozrEpIM+Azr/PhSDPg8+Fzr3Orc64zrXPg861IM+EzrfOvSDOt8+Hzr/Os8+BzqzPhs63z4POty4iCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgIs60zrnOrM+BzrrOtc65zrEiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAizrzOrs66zr/PgiDPg861IM68zr/Ovc6szrTOtc+CIM+Hz4HPjM69zr/PhSDPhM6/z4UgR1N0cmVhbWVyIChuYW5vc2Vjb25kcykiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAizrrPic60zrnOus6/z4DOv865zrfPhM6uz4IiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIs63IM66z4nOtM65zrrOv8+Azr/Or863z4POtyDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0iCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAizrrPic60zrnOus6/z4DOv865zrfPhM6uz4IgzrLOr869z4TOtc6/IgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLOus+JzrTOuc66zr/PgM6/zrnOt8+Ezq7PgiDOss6vzr3PhM61zr8gz4TOt8+CIM6xz4DOv864zq7Ous61z4XPg863z4IgIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr0iCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAizrrPic60zrnOus6/z4DOv865zrfPhM6uz4Igzq7Ph86/z4UiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIs66z4nOtM65zrrOv8+Azr/Ouc63z4TOrs+CIM6xz4DOv864zq7Ous61z4XPg863z4Igz4TPic69IM63z4fOt8+EzrnOus+Ozr0gzrTOtc60zr/OvM6tzr3Pic69IgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgIs66z4nOtM65zrrOv8+Azr/Ouc63z4TOrs+CIM+Fz4DOv8+Ezq/PhM67z4nOvSIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAizrrPic60zrnOus6/z4DOv865zrfPhM6uz4IgzrHPgM6/zrjOrs66zrXPhc+DzrfPgiDPhM+Jzr0gz4XPgM6/z4TOr8+EzrvPic69IgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiz4TPjc+Azr/PgiDPgM61z4HOuc6tzrrPhM63IgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIs6/IM+Ez43PgM6/z4Igz4TOv8+FIM+AzrXPgc65zq3Ous+Ezrcgz4PPhM6/zr0gzr/PgM6/zq/OvyDOsc+Azr/OuM63zrrOtc+Nzr/Ovc+EzrHOuSDPhM6xIM60zrXOtM6/zrzOrc69zrEiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICLPgc+FzrjOvM+Mz4IgzrzOtc+EzqzOtM6/z4POt8+CIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAizrHOus+BzrnOss6uz4Igzq4gzrzOrc+Dzr/PgiDPgc+FzrjOvM+Mz4Igz4POtSBiaXRzL3MiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIs6/zr3Ov868zrHPg8+EzrnOus+Mz4Igz4HPhc64zrzPjM+CIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAizr/Ovc6/zrzOsc+Dz4TOuc66z4zPgiDPgc+FzrjOvM+Mz4Igz4POtSBiaXRzL3MiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIs61zrvOrM+HzrnPg8+Ezr/PgiDPgc+FzrjOvM+Mz4IiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLOtc67zqzPh865z4PPhM6/z4Igz4HPhc64zrzPjM+CIM+DzrUgYml0cy9zIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICLOvM6tzrPOuc+Dz4TOv8+CIM+Bz4XOuM68z4zPgiIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIs68zq3Os865z4PPhM6/z4Igz4HPhc64zrzPjM+CIM+DzrUgYml0cy9zIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAizrrPic60zrnOus6/z4DOv865zrfPhM6uz4IiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICLOus+JzrTOuc66zr/PgM6/zrnOt8+Ezq7PgiDPgM6/z4Ugz4fPgc63z4POuc68zr/PgM6/zrnOrs64zrfOus61IM6zzrnOsSDPhM63zr0gzrrPic60zrnOus6/z4DOv86vzrfPg863IM6xz4XPhM6uz4Igz4TOt8+CIM+Bzr/Ors+CIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICLOrc66zrTOv8+DzrcgzrrPic60zrnOus6/z4DOv865zrfPhM6uIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiIgotIs6tzrrOtM6/z4POtyDPhM6/z4UgzrrPic60zrnOus6/z4DOv865zrfPhM6uIM+Azr/PhSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uzrjOt866zrUgzrPOuc6xIM+EzrfOvSDOus+JzrTOuc66zr/PgM6/zq/Ot8+DzrcgzrHPhc+Ezq7PgiDPhM63z4IgIgotIs+Bzr/Ors+CIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICLPg861zrnPgc65zrHOus+Mz4IiCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICLPg861zrnPgc65zrHOus+Mz4IgzrHPgc65zrjOvM+Mz4Igz4TOv8+FIM66zr/OvM68zrHPhM65zr/PjSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAizrrOrc+BzrTOv8+CIM66zr/OvM68zrHPhM65zr/PjSByZXBsYXlnYWluIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAizrrOrc+BzrTOv8+CIM66zr/OvM68zrHPhM65zr/PjSDPg861IGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICLOus6/z4HPhc+Gzq4gzrrOv868zrzOsc+EzrnOv8+NIHJlcGxheWdhaW4iCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAizrrOv8+Bz43Phs+Jz4POtyDPhM6/z4UgzrrOv868zrzOsc+EzrnOv8+NIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICLOus6tz4HOtM6/z4IgzrTOr8+DzrrOv8+FIHJlcGxheWdhaW4iCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICLOus6tz4HOtM6/z4IgzrTOr8+DzrrOv8+FIM+DzrUgZGIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgIs66zr/Pgc+Fz4bOriDOtM6vz4POus6/z4UgcmVwbGF5Z2FpbiIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICLOus6/z4HPjc+Gz4nPg863IM+Ezr/PhSDOtM6vz4POus6/z4UiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAizrXPgM6vz4DOtc60zr8gzrHOvc6xz4bOv8+BzqzPgiByZXBsYXlnYWluIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAizrXPgM6vz4DOtc60zr8gzrHOvc6xz4bOv8+BzqzPgiDPhM+Jzr0gz4TOuc68z47OvSDOus6tz4HOtM6/z4XPgiDOus6/zrzOvM6xz4TOuc6/z40gzrrOsc65IM60zq/Pg866zr/PhSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgIs66z4nOtM65zrrPjM+CIM6zzrvPjs+Dz4POsc+CIgotCi0jLCBmdXp6eQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgIs66z4nOtM65zrrPjM+CIM6zzrvPjs+Dz4POsc+CIM6zzrknIM6xz4XPhM6uIM+Ezrcgz4HOv86uLCDPg8+FzrzOvM6/z4HPhs6/z43OvM61zr3Ov8+CIM68zrUgz4TOvyBJU08tNjM5LTEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAizrrPic60zrnOus+Mz4IgzrPOu8+Oz4PPg86xz4IiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgIs61zrnOus+Mzr3OsSIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIs61zrnOus+Mzr3OsSDPgM6/z4Ugz4PPh861z4TOr862zrXPhM6xzrkgzrzOtSDOsc+Fz4TOriDPhM63IM+Bzr/OriIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAizrXOuc66z4zOvc6xIM+Az4HOv861z4DOuc+DzrrPjM+AzrfPg863z4IiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIs61zrnOus+Mzr3OsSDPgM+Bzr/Otc+AzrnPg866z4zPgM63z4POt8+CIM+Azr/PhSDPg8+HzrXPhM6vzrbOtc+EzrHOuSDOvM61IM6xz4XPhM6uIM+Ezrcgz4HOv86uIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAiz4PPhc69zrfOvM68zq3Ovc6/IgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAizrHPgc+HzrXOr86/IM+Dz4XOvc63zrzOvM6tzr3OvyDPg861IM6xz4XPhM6uIM+Ezrcgz4HOv86uIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiz4fPhM+Nz4DOv865IM6xzr3OrCDOu861z4DPhM+MIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgIs6xz4HOuc64zrzPjM+CIM+Ez4nOvSDPh8+Ez43PgM+Jzr0gzrHOvc6sIM67zrXPgM+Ez4wgz4PPhM6/zr0gzq7Ph86/IgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgIs67zq3Ovs61zrnPgiDOus67zrXOuc60zrnOrCIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICIiCi0izrvOrc6+zrXOuc+CIM66zrvOtc65zrTOuc6sIM60zrnOsc+Hz4nPgc65z4POvM6tzr3Otc+CIM68zrUgzrrPjM68zrzOsc+EzrEsIM+Azr/PhSDPgM61z4HOuc6zz4HOrM+Gzr/Phc69IM+Ezr8gz4DOtc+BzrnOtc+Hz4zOvM61zr3OvyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICLPjM69zr/OvM6xIM6zzrXPic6zz4HOsc+GzrnOus6/z40gzrXOvc+Ezr/PgM65z4POvM6/z40iCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAizrHOvc64z4HPjs+AzrnOvc6xIM66zrHPhM6xzr3Ov863z4TOriDPgM61z4HOuc6zz4HOsc+Gzq4gz4TOv8+Azr/OuM61z4POr86xz4IgzrXOs86zz4HOsc+Gzq7PgiDOriDPgM6xz4HOsc6zz4nOs86uz4IiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4Igz4DOu86sz4TOv8+Fz4IiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSLOs861z4nOs8+BzrHPhs65zrrPjCDPgM67zqzPhM6/z4Igz4TOt8+CIM+Ezr/PgM6/zrjOtc+Dzq/Osc+CLCDPjM+Azr/PhSDOtc6zzrPPgc6sz4bOt866zrUgzq4gz4DOsc+Bzq7Ph864zrcgz4TOvyDOvM6tz4POvywgz4POtSAiCi0izrzOv86vz4HOtc+CIM+Dz43OvM+Gz4nOvc6xIM68zrUgz4TOvyBXR1M4NCAozrzOt860zq3OvSDPg8+Ezr/OvSDOuc+DzrfOvM61z4HOuc69z4wsIM6xz4HOvc63z4TOuc66zq3PgiDPhM65zrzOrc+CIM6zzrnOsSDPgM67zqzPhM63ICIKLSLPg8+Ezr8gzr3PjM+EzrnOvyDOt868zrnPg8+GzrHOr8+BzrnOvykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICLOs861z4nOs8+BzrHPhs65zrrPjM+CIM61zr3PhM6/z4DOuc+DzrzPjM+CIM68zq7Ous6/z4XPgiIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSLOs861z4nOs8+BzrHPhs65zrrPjCDOvM6uzrrOv8+CIM+EzrfPgiDPhM6/z4DOv864zrXPg86vzrHPgiwgz4zPgM6/z4UgzrXOs86zz4HOrM+GzrfOus61IM6uIM+AzrHPgc6uz4fOuM63IM+Ezr8gzrzOrc+Dzr8sIM+DzrUgzrzOv86vz4HOtc+CICIKLSLPg8+NzrzPhs+Jzr3OsSDOvM61IM+Ezr8gV0dTODQgKM68zrfOtM6tzr0gz4PPhM6/zr0gz4DPgc+Oz4TOvyDOvM61z4POt868zrLPgc65zr3PjCDPg8+Ezr8gR3JlZW53aWNoL1VLLCDOsc+Bzr3Ot8+EzrnOus6tz4IgIgotIs+EzrnOvM6tz4IgzrPOuc6xIM68zq7Ous63IM+Dz4TOvyDOtM+Fz4TOuc66z4wgzrfOvM65z4PPhs6xzq/Pgc65zr8pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAizrPOtc+JzrPPgc6xz4bOuc66z4zPgiDOtc69z4TOv8+AzrnPg868z4zPgiDPhc+Izr/OvM6tz4TPgc6/z4UiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0iz4XPiM+MzrzOtc+Ez4HOvyDPhM63z4Igz4TOv8+Azr/OuM61z4POr86xz4IsIM+Mz4DOv8+FIM61zrPOs8+BzqzPhs63zrrOtSDOriDPgM6xz4HOrs+HzrjOtyDPhM6/IM68zq3Pg86/LCDPg861IM68zq3PhM+BzrEgz4PPjc68z4bPic69zrEgIgotIs68zrUgz4TOvyBXR1M4NCAozrzOt860zq3OvSDPg8+Ezr8gzrXPgM6vz4DOtc60zr8gz4TOt8+CIM64zqzOu86xz4PPg86xz4IpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4Igz4fPjs+BzrHPgiIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICLPh8+Oz4HOsSAozrHOs86zzrvOuc66z4wgz4zOvc6/zrzOsSkgz4zPgM6/z4Ugzq3Ph861zrkgzrXOs86zz4HOsc+GzrXOryDOriDPgM6xz4HOsc+HzrjOtc6vIM+Ezr8gzrzOrc+Dzr8iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAizrPOtc+JzrPPgc6xz4bOuc66z4zPgiDOtc69z4TOv8+AzrnPg868z4zPgiDPgM+MzrvOt8+CIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIs+Az4zOu863ICjOsc6zzrPOu865zrrPjCDPjM69zr/OvM6xKSDPjM+Azr/PhSDPhM6/IM68zq3Pg86/IM61zrPOs8+BzqzPhs63zrrOtSDOriDPgM6xz4HOrs+HzrjOtyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAizrPOtc+JzrPPgc6xz4bOuc66z4zPgiDOtc69z4TOv8+AzrnPg868z4zPgiDPhc+Azr/PhM6/z4DOv864zrXPg86vzrHPgiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotIs+Ezr/PgM6/zrjOtc+Dzq/OsSDOvM6tz4POsSDPg861IM68zrnOsSDPgM+MzrvOtyDPjM+Azr/PhSDPhM6/IM68zq3Pg86/IM+AzrHPgc6uz4fOuM63IM6uIM60zrfOvM65zr/Phc+BzrPOrs64zrfOus61ICjPgC7Phy4gzrcgIgotIs6zzrXOuc+Ezr/Ovc65zqwpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCi1tc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4Igzr/Pgc65zrbPjM69z4TOuc6/z4Ugz4PPhs6szrvOvM6xz4TOv8+CIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgIs6xzr3Osc68zrXOvc+MzrzOtc69zr8gz4PPhs6szrvOvM6xIM+Ez4nOvSDOvM61z4TPgc6uz4POtc+Jzr0gzr/Pgc65zrbPjM69z4TOuc6xz4Igz4TOv8+Azr/OuM6tz4TOt8+DzrfPgiAoz4POtSDOvM6tz4TPgc6xKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAizrPOtc+JzrPPgc6xz4bOuc66z4zPgiDOtc69z4TOv8+AzrnPg868z4zPgiDPhM6xz4fPjc+EzrfPhM6xz4IgzrrOr869zrfPg863z4IgIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICIiCi0iz4TOsc+Hz43PhM63z4TOsSDOus6vzr3Ot8+DzrfPgiDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiDPg8+NzrvOu863z4jOt8+CIM66zrHPhM6sIM+EzrcgzrTOuc6sz4HOus61zrnOsSDOtc6zzrPPgc6xz4bOrs+CIM+DzrUgbS9zIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAizrPOtc+JzrPPgc6xz4bOuc66z4zPgiDOtc69z4TOv8+AzrnPg868z4zPgiDOtM65zrXPjc64z4XOvc+DzrfPgiDOus6vzr3Ot8+DzrfPgiAiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSLPhc+Azr/OtM61zrnOus69z43Otc65IM+EzrfOvSDOus6xz4TOtc+NzrjPhc69z4POtyDOus6vzr3Ot8+DzrfPgiDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiDPgM6/z4Ugz4PPhc67zrvOsc68zrLOrM69zrXOuSDOrc69zrEgzrzOrc+Dzr8uICIKLSLOkc69zrHOs8+BzqzPhs61z4TOsc65IM+Jz4IgzrzOv86vz4HOtc+CIM68zrUgzrTOtc66zrHOtM65zrrOrCwgz4TOvyAwIM60zrXOr8+Hzr3Otc65IM+Ezr8gzrPOtc+JzrPPgc6xz4bOuc66z4wgzrLOv8+Bz4HOrCDOus6xzrkgIgotIs6xz4XOvs6szr3Otc65IM60zrXOvs65z4zPg8+Ez4HOv8+GzrEiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgIs6zzrXPic6zz4HOsc+GzrnOus+Mz4IgzrXOvc+Ezr/PgM65z4POvM+Mz4IgzrrOsc+EzrXPjc64z4XOvc+DzrfPgiDPg8+NzrvOu863z4jOt8+CIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iz4XPgM6/zrTOtc65zrrOvc+NzrXOuSDPhM63zr0gzrrOsc+EzrXPjc64z4XOvc+Dzrcgz4DOv8+FIM60zrXOr8+Hzr3Otc65IM63IM+Dz4XPg866zrXPhc6uIM66zrHPhM6sIM+Ezrcgz4PPjc67zrvOt8+IzrcgzrXOvc+Mz4IgzrzOrc+Dzr/PhS4gIgotIs6Rzr3Osc6zz4HOrM+GzrXPhM6xzrkgz4POtSDOvM6/zq/Pgc61z4IgzrzOtSDOtM61zrrOsc60zrnOus6sLCDPhM6/IDAgz4XPgM6/zrTOtc65zrrOvc+NzrXOuSDPhM6/IM6zzrXPic6zz4HOsc+GzrnOus+MIM6yzr/Pgc+BzqwgzrrOsc65ICIKLSLOsc+Fzr7OrM69zrXOuSDOtM61zr7Ouc+Mz4PPhM+Bzr/Phs6xIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIs+Mzr3Ov868zrEgzrXOus+Azr/OvM+Azq7PgiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIiIKLSLOjM69zr/OvM6xIM+EzrfPgiDPhM63zrvOtc6/z4DPhM65zrrOrs+CL8+Gzr/Pgc63z4TOrs+CIChwb2RjYXN0KS/Pg861zrnPgc6sz4IgzrXOus+Azr/OvM+Azq7PgiDOsc+Az4wgz4TOt869IM6/z4DOv86vzrEgzrXOr869zrHOuSAiCi0iz4TOvyDOvM6tz4POvyIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAiz4zOvc6/zrzOsSDPhM6xzr7Ouc69z4zOvM63z4POt8+CIM61zrrPgM6/zrzPgM6uz4IiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSLOjM69zr/OvM6xIM+EzrfPgiDPhM63zrvOtc6/z4DPhM65zrrOrs+CL8+Gzr/Pgc63z4TOrs+CIChwb2RjYXN0KS/Pg861zrnPgc6sz4IgzrXOus+Azr/OvM+Azq7PgiDOsc+Az4wgz4TOt869IM6/z4DOv86vzrEgzrXOr869zrHOuSAiCi0iz4TOvyDOvM6tz4POvywgzrPOuc6xIM+DzrrOv8+Azr/Pjc+CIM+EzrHOvs65zr3PjM68zrfPg863z4IiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAizrHPgc65zrjOvM+Mz4IgzrXPgM61zrnPg86/zrTOr86/z4UiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAizp8gzrHPgc65zrjOvM+Mz4IgzrXPgM61zrnPg86/zrTOr86/z4Ugz4TOv8+FIM66z43Ous67zr/PhSDPg8+Ezr8gzr/PgM6/zq/OvyDOsc69zq7Ous61zrkgz4TOvyDOvM6tz4POvyIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgIs6xz4HOuc64zrzPjM+CIM66z43Ous67zr/PhSIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICLOnyDOsc+BzrnOuM68z4zPgiDOus+NzrrOu86/z4Ugz4TOt8+CIM61zrrPgM6/zrzPgM6uz4Igz4PPhM63zr0gzr/PgM6/zq/OsSDOsc69zq7Ous61zrkgz4TOvyDOvM6tz4POvyIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAiz4PPhM6vz4fOv865IgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICLOn865IM+Dz4TOr8+Hzr/OuSDPhM6/z4UgzrzOrc+Dzr/PhSwgz4PPhc69zq7OuM+Jz4Igz4fPgc63z4POuc68zr/PgM6/zrnOtc6vz4TOsc65IM6zzrnOsSDPhM+BzrHOs86/z43OtM65zrEiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAiz4zOvc6/zrzOsSDPhM6xzr7Ouc69z4zOvM63z4POt8+CIM+Dz4XOvc64zq3PhM63IgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiz4DPgc+Mz4PPic+Azr8ozrEpIM+Azr/PhSDPg8+Fzr3Orc64zrXPg861IM+EzrfOvSDOt8+Hzr/Os8+BzqzPhs63z4POtywgzrPOuc6xIM+DzrrOv8+Azr/Pjc+CIM+EzrHOvs65zr3PjM68zrfPg863z4IiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAizr/OvM6xzrTOv8+Azr/Or863z4POtyIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotIs6fzrzOsc60zr/PgM6/zrnOtc6vIM+Dz4fOtc+EzrnOts+MzrzOtc69zrEgzrzOrc+DzrEgz4DOv8+FIM66zrHOu8+Nz4DPhM6/z4XOvSDPgM6/zrvOu86xz4DOu86sIM66zr/OvM68zqzPhM65zrEsIM+Mz4DPic+CIM+EzrEgIgotIs60zrnOsc+Gzr/Pgc61z4TOuc66zqwgzrzOrc+BzrcgzrXOvc+Mz4IgzrrOv869z4POrc+Bz4TOv8+FLiDOlc6vzr3Osc65IM+Fz4jOt867z4zPhM61z4HOvyDOtc+Azq/PgM61zrTOvyDOsc+Az4wgz4TOvyDOus6/zrzOvM6sz4TOuSDOsc67zrvOrCAiCi0iz4fOsc68zrfOu8+Mz4TOtc+Bzr8gzrHPgM+MIM+Ezr8gzrTOr8+DzrrOvyIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICLOss6xzrjOvM6/zrvOv86zzq/OsSDPh8+Bzq7Pg8+EzrciCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIs6XIM6yzrHOuM68zr/Ou86/zrPOr86xIM+Azr/PhSDOsc+Azr/Ovc61zrzOrs64zrfOus61IM6xz4DPjCDOrc69zrEgz4fPgc6uz4PPhM63LiDOjM+Dzr8gz4XPiM63zrvPjM+EzrXPgc63LCDPhM+Mz4POvyDPgM61z4HOuc+Dz4PPjM+EzrXPgc6/ICIKLSLOsc+Bzq3Pg861zrkgz4PPhM6/IM+Hz4HOrs+Dz4TOtyDPhM6/IM68zq3Pg86/IgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAizrrOsc+EzrHPg866zrXPhc6xz4PPhM6uz4Igz4PPhc+DzrrOtc+Fzq7PgiIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSLOms6xz4TOsc+DzrrOtc+FzrHPg8+Ezq7PgiDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiDPgM6/z4Ugz4fPgc63z4POuc68zr/PgM6/zrnOrs64zrfOus61IM6zzrnOsSDPhM63IM60zrfOvM65zr/Phc+BzrPOr86xIM6xz4XPhM6/z40gz4TOv8+FICIKLSLOvM6tz4POv8+FIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICLOvM6/zr3PhM6tzrvOvyDPg8+Fz4POus61z4XOrs+CIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLOnM6/zr3PhM6tzrvOvyDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiDPgM6/z4Ugz4fPgc63z4POuc68zr/PgM6/zrnOrs64zrfOus61IM6zzrnOsSDPhM63IM60zrfOvM65zr/Phc+BzrPOr86xIM+Ezr/PhSDOvM6tz4POv8+FIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAiz4zOvc6/zrzOsSDOtc+GzrHPgc68zr/Os86uz4IiCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIs6XIM61z4bOsc+BzrzOv86zzq4gz4DOv8+FIM+Hz4HOt8+DzrnOvM6/z4DOv865zq7OuM63zrrOtSDOs865zrEgz4TOtyDOtM63zrzOuc6/z4XPgc6zzq/OsSAgz4TOv8+FIM68zq3Pg86/z4UiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICLOtM61zrTOv868zq3Ovc6xIM61z4bOsc+BzrzOv86zzq7PgiIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIs6Rz4XOuM6xzq/Pgc61z4TOsSDOtM61zrTOv868zq3Ovc6xIM61z4bOsc+BzrzOv86zzq7PgiDOvc6xIM61zr3Pg8+JzrzOsc+Ez4nOuM6/z43OvSDPg861zrnPgc65zrHOus6sIM+Dz4TOvyDOvM6tz4POvyIKLQotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICLPgM+Bzr/Pg86xzr3Osc+Ezr/Ou865z4POvM+Mz4IgzrXOuc66z4zOvc6xz4IiCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIiIKLSLOoM+Jz4IgzrjOsSDPgM+Bzq3PgM61zrkgzr3OsSDPgM61z4HOuc+Dz4TPgc6xz4bOtc6vIM6uIM66zrHOuM+BzrXPhs+EzrnPg8+EzrXOryDOtyDOtc65zrrPjM69zrEgz4DPgc65zr0gz4TOt869IM61zrzPhs6szr3Ouc+Dzq4gz4TOt8+CIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJFUlJPUjogzrHPgM+MIM+Dz4TOv865z4fOtc6vzr8gJXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0izpXPgM65z4DOu86tzr/OvSDPgM67zrfPgc6/z4bOv8+Bzq/Otc+CIM6xz4DOv8+Dz4bOsc67zrzOrM+Ez4nPg863z4I6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAizrTOtc69IM+Fz4DOrM+Bz4fOtc65IM65zrTOuc+Mz4TOt8+EzrEgwqslc8K7IM+Dz4TOvyDPg8+Ezr/Ouc+HzrXOr86/IMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIs6xzrTPhc69zrHOvM6vzrEgzr/Pgc65z4POvM6/z40gzrnOtM65z4zPhM63z4TOsc+CIMKrJXPCuyDPg8+Ezr8gz4PPhM6/zrnPh861zq/OvyDCqyVzwrsgz4POtSDCqyVzwrsiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICLOsc60z4XOvc6xzrzOr86xIM+Dz43Ovc60zrXPg863z4IgJXMgz4POtSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAizrTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Dz4TOv865z4fOtc6vzr8gwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICLOsc60z4XOvc6xzrzOr86xIM6xzr3OrM67z4XPg863z4IgzrTPhc69zrHPhM6/z4TOrs+Ez4nOvSDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgz4PPhM6/zrnPh861zq/OvyDPgM+Bzr/Ov8+BzrnPg868zr/PjSDOs865zrEgz4TOvyBVUkkgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICLOtM61zr0gz4XPgM6sz4HPh861zrkgz4PPhM6/zrnPh861zq/OvyDPgM+Bzr/Orc67zrXPhc+DzrfPgiDOs865zrEgz4TOvyBVUkkgwqslc8K7IgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICLOvyDOus6xzrjOv8+BzrnPg868zq3Ovc6/z4IgzqzOtM61zrnOv8+CIM+AzrXPgc65zq3Ous+EzrfPgiDCqyVzwrssIM60zrXOvSDOtc+AzrnPhM+Bzq3PgM61z4TOsc65IgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJubyBiaW4gXCIlc1wiLCB1bnBhY2tpbmcgZWxlbWVudHMiCi1tc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPgM61z4HOuc6tzrrPhM63z4Igwqslc8K7LCDPgM6xz4HOrM6yzrvOtc+IzrciCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAizrTOtc69IM61z4DOuc+Ez4HOrc+AzrXPhM6xzrkgzrrOtc69zq4gzrTOuc6xz4PPic67zq7Ovc+Jz4POtyIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICLOoM6/zrvOu86tz4IgzrXOvc60zrnOrM68zrXPg861z4IgzrHPgM6/zrjOt866zrXPjc+DzrXOuc+CIM6xz4DOv8+Bz4HOr8+Az4TOv869z4TOsc65LiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Az4HPjM6yzrvOt868zrEgz4HOv86uz4IgzrTOtc60zr/OvM6tzr3Pic69LiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIs6Vz4PPic+EzrXPgc65zrrPjCDPg8+GzqzOu868zrEgz4HOv86uz4IgzrTOtc60zr/OvM6tzr3Pic69LiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAizqPPhs6szrvOvM6xIM61z4PPic+EzrXPgc65zrrOv8+NIM+Bzr/Ou86/zrPOuc6/z40uIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAizqbOuc67z4TPgc6sz4HOuc+DzrzOsSDOtM+Fzr3Osc+Ezr/PhM6uz4TPic69IgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLSLOoM61z4HOuc6/z4HOuc+DzrzPjM+CIM+Ez4nOvSDPgM65zrjOsc69z47OvSDOtc+AzrnPhM+BzrXPgM+MzrzOtc69z4nOvSDOtM+Fzr3Osc+Ezr/PhM6uz4TPic69IChOVUxMIM+DzrfOvM6xzq/Ovc61zrkgQU5ZKS4gzpcgIgotIs+Bz43OuM68zrnPg863IM6xz4XPhM6uz4Igz4TOt8+CIM65zrTOuc+Mz4TOt8+EzrHPgiDOsc+AzrHOuc+EzrXOryDOvM65zrEgzrHOvc6xz4bOv8+Bzqwgz4PPhM6/IM+AzrHPgc61z4fPjM68zrXOvc6/IM6xzr3PhM65zrrOtc6vzrzOtc69zr8gIgotIkdzdENhcHMuIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAizpTOtc69IM6/z4HOr8+DzrjOt866zrUgz4DPgc6/z4PPic+BzrnOvc+Mz4IgzrrOsc+EzqzOu86/zrPOv8+CIChUZW1wKS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOtM63zrzOuc6/z4XPgc6zzq/Osc+CIM+Az4HOv8+Dz4nPgc65zr3Ov8+NIM6xz4HPh861zq/Ov8+FICh0ZW1wKSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAizpHOtM+Fzr3Osc68zq/OsSDOsc69zr/Or86zzrzOsc+Ezr/PgiDOsc+Bz4fOtc6vzr/PhSDCqyVzwrsgzrPOuc6xIM6xzr3OrM6zzr3Pic+DzrcuIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAizqPPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDOtc6zzrPPgc6xz4bOriDPg8+Ezr8gzrHPgc+HzrXOr86/IM68zrXPhM6xz4bPjM+Bz4TPic+DzrfPgi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAizpTOtc69IM6tz4fOtc65IM66zrHOuM6/z4HOuc+DzrjOtc6vIM+Mzr3Ov868zrEgzrHPgc+HzrXOr86/z4UgzrPOuc6xIM61zrPOs8+BzrHPhs6uLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc6/zq/Os868zrHPhM6/z4IgzrHPgc+HzrXOr86/z4Ugwqslc8K7IM6zzrnOsSDOtc6zzrPPgc6xz4bOri4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIs6jz4bOrM67zrzOsSDOus67zrXOuc+Dzq/OvM6xz4TOv8+CIM6xz4HPh861zq/Ov8+FIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIs6jz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gzrHOvc6xzrbOrs+EzrfPg863IM+Dz4TOvyDOsc+Bz4fOtc6vzr8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAizqPPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDOtc6zzrPPgc6xz4bOriDPg8+Ezr8gzrHPgc+HzrXOr86/IMKrJXPCuy4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAizpTOtc69IM66zrHOuM6/z4HOr8+DzrjOt866zrUgz4zOvc6/zrzOsSDOsc+Bz4fOtc6vzr/PhSDOs865zrEgzrHOvc6szrPOvc+Jz4POty4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrvOrs+IzrfPgiDPgM67zrfPgc6/z4bOv8+BzrnPjs69IM6zzrnOsSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIs6kzr8gwqslc8K7IM61zq/Ovc6xzrkgzrrOsc+EzqzOu86/zrPOv8+CLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIs6kzr8gzrHPgc+HzrXOr86/IMKrJXPCuyDOtc6vzr3Osc65IM68zrnOsSDPhc+Azr/OtM6/z4fOri4iCi0KLW1zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgotbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM66zrHPhM+Mz4DOuc69IM61z4DOsc69zrHOu86uz4jOtc+Jzr0gz4nPgiDOts63z4TOrs64zrfOus61LiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgIs60z4XOvc6xz4TPjM+EzrfPhM61z4IiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICLOsc69zrnPh869zrXPjc64zrfOus6xzr0gzrTPhc69zrHPhM+Mz4TOt8+EzrXPgiDPg8+Ezrcgz4HOv86uIgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAizrXOu86sz4fOuc+Dz4TOvyIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgIs61z4DOuc6yzr/Ou86uIM60z4XOvc6xz4TOv8+Ezq7PhM+Jzr0iCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAizrXPgM65zrLOv867zq4gzrTPhc69zrHPhM6/z4TOrs+Ez4nOvSDPh8+Jz4HOr8+CIM61zrrPhM6tzrvOtc+DzrcgdHlwZWZpbmQiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIs6XIM+Bzr/OriDOtM61zr0gz4DOtc+BzrnOrc+HzrXOuSDOtM61zrTOv868zq3Ovc6xLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAizpcgz4HOv86uIM60zrXOvSDPgM61z4HOuc6tz4fOtc65IM60zrXOtM6/zrzOrc69zrEuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAizqXOu86/z4DOv865zrfOvM6tzr3Otc+CIM60zrnOtc+AzrHPhs6tz4I6XG4iCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAizrHOvc6xzrPOvc+Oz4POuc68zr8iCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAizrXOs86zz4HOrM+IzrnOvM6/IgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICLOtc67zrXOs8+Hz4zOvM61zr3OvyIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICLOvM+Azr/Pgc61zq8gzr3OsSDOsc67zrvOrM6+zrXOuSDPg861IM66zrHPhM6sz4PPhM6xz4POtyBOVUxMLCBSRUFEWSwgUEFVU0VEIM6uIFBMQVlJTkciCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICLOvM+Azr/Pgc61zq8gzr3OsSDOsc67zrvOrM6+zrXOuSDOvM+Mzr3OvyDPg861IM66zrHPhM6sz4PPhM6xz4POtyBOVUxMLCBSRUFEWSDOriBQQVVTRUQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAizrzPgM6/z4HOtc6vIM69zrEgzrHOu867zqzOvs61zrkgzrzPjM69zr8gz4POtSDOus6xz4TOrM+Dz4TOsc+DzrcgTlVMTCDOriBSRUFEWSIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAizpHPgc+HzrXOr86xIM+Dz4TOtyDOvM6xz43Pgc63IM67zq/Pg8+EzrE6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAizqPPhc69zr/Ou865zrrOriDOus6xz4TOsc68zq3PhM+BzrfPg863OiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgzrHPgc+HzrXOr86/IM+Dz4TOtyDOvM6xz43Pgc63IM67zq/Pg8+EzrEiCi1tc2dzdHJbMV0gIiVkIM6xz4HPh861zq/OsSDPg8+EzrcgzrzOsc+Nz4HOtyDOu86vz4PPhM6xIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgz4DPgc+Mz4POuM61z4TOvyIKLW1zZ3N0clsxXSAiJWQgz4DPgc+Mz4POuM61z4TOsSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCDOus6xz4TOsc+Hz47Pgc63z4POtyDPg8+EzrcgzrzOsc+Nz4HOtyDOu86vz4PPhM6xIgotbXNnc3RyWzFdICIlZCDOus6xz4TOsc+Hz4nPgc6uz4POtc65z4Igz4PPhM63IM68zrHPjc+BzrcgzrvOr8+Dz4TOsSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgz4fOsc+BzrHOus+EzrfPgc65z4PPhM65zrrPjCIKLW1zZ3N0clsxXSAiJWQgz4fOsc+BzrHOus+EzrfPgc65z4PPhM65zrrOrCIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAizpXOvM+GzqzOvc65z4POtyDPjM67z4nOvSDPhM+Jzr0gz4PPhM6/zrnPh861zq/Pic69IgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAizpXOvM+GzqzOvc65z4POtyDOu86vz4PPhM6xz4Igz4TPic69IM6xz4HPh861zq/Pic69IM+Dz4TOtyDOvM6xz43Pgc63IM67zq/Pg8+EzrEiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotIs6VzrzPhs6szr3Ouc+DzrcgzrzOuc6xz4IgzrvOr8+Dz4TOsc+CIM+Azr/PhSDOvM+Azr/Pgc61zq8gzr3OsSDOsc69zrHOu8+FzrjOtc6vIM6xz4DPjCDPhc+Azr/Ou86/zrPOuc+Dz4TOriDOvM61IM+EzrEgIgotIs+HzrHPgc6xzrrPhM63z4HOuc+Dz4TOuc66zqwgz4DOv8+FIM+AzrHPgc6tz4fOtc65IM+Ezr8gzrXPgM65zrvOtc6zzrzOrc69zr8gz4DPgc+Mz4POuM61z4TOvyDOriDPjM67zrEgz4TOsSDPgM+Bz4zPg864zrXPhM6xLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM6nz4HOrs+DzrnOvM6/IM+DzrUgz4PPhc69zrTPhc6xz4POvM+MIM68zrUgzrXOvs+Jz4TOtc+BzrnOus6/z43PgiAiCi0izrzOt8+HzrHOvc65z4POvM6/z43PgiDOsc+Fz4TPjM68zrHPhM63z4IgzrXOs866zrHPhM6sz4PPhM6xz4POt8+CIM+Az4HOv8+DzrjOrc+Ez4nOvSIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAizpHPgM6xz4HOr864zrzOt8+Dzrcgz4TPic69IM+AzrXPgc65zrXPh86/zrzOrc69z4nOvSDPhM6/z4Ugz4DPgc6/z4POuM6tz4TOv8+FIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAizpXOvM+GzqzOvc65z4POtyDPhc+Azr/Pg8+EzrfPgc65zrbPjM68zrXOvc+Jzr0gzrzOv8+Bz4bPjs69IFVSSSwgzrzOtSDPhM6xIM+Dz4TOv865z4fOtc6vzrEgz4DOv8+FIM+EzrnPgiDPhc67zr/PgM6/zrnOv8+Nzr0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgz4bPjM+Bz4TPic+DzrfPgiDOsc+Bz4fOtc6vzr/PhSDPgM+Bzr/Pg864zq3PhM6/z4U6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIs6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6tz4TOv865zr8gz4PPhM6/zrnPh861zq/OvyDOriDPgM+Bz4zPg864zrXPhM6/ICclcydcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIs6VzrvOrs+GzrjOtyDPhM6/IM68zq7Ovc+FzrzOsSAgIyV1IM6xz4DPjCDPhM6/IM+Dz4TOv865z4fOtc6vzr8gwqslc8K7ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAizpXOu86uz4bOuM63IM+Ezr8gzrzOrs69z4XOvM6xICAjJXUgzrHPgM+MIM+Ezr8gcGFkIMKrJXM6JXPCuyAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIs6VzrvOrs+GzrjOtyDPhM6/IM68zq7Ovc+FzrzOsSAgIyV1IM6xz4DPjCDPhM6/IM6xzr3PhM65zrrOtc6vzrzOtc69zr8gwqslc8K7ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICLOlc67zq7Phs64zrcgz4TOvyDOvM6uzr3Phc68zrEgICMldSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLOlc67zq7Phs64zrcgRU9TIM6xz4DPjCDPhM6/IM+Dz4TOv865z4fOtc6vzr8gwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkZPVU5EIFRBRyAgICAgIDogzrXPjc+BzrXPg863IM66zrHPhM6sIM+Dz4TOv865z4fOtc6vzr8gwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiRk9VTkQgVEFHICAgICAgOiDOtc+Nz4HOtc+DzrcgzrrOsc+EzqwgcGFkIMKrJXM6JXPCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIkZPVU5EIFRBRyAgICAgIDogzrXPjc+BzrXPg863IM66zrHPhM6sIM6xzr3PhM65zrrOtc6vzrzOtc69zr8gwqslc8K7LlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIkZPVU5EIFRBR1xuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJGT1VORCBUQUcgICAgICA6IM61z43Pgc61z4POtyDOus6xz4TOrCDPg8+Ezr/Ouc+HzrXOr86/IMKrJXPCuy5cbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJGT1VORCBUQUcgICAgICA6IM61z43Pgc61z4POtyDOus6xz4TOrCDOsc69z4TOuc66zrXOr868zrXOvc6/IMKrJXPCuy5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiRk9VTkQgVEFHXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk86XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIldBUk5JTkc6IM6xz4DPjCDPhM6/IM+Dz4TOv865z4fOtc6vzr8gJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAizqDPgc6/z4TPhc67zrnOs868zq3Ovc6/LCDOsc69zrHOvM6/zr3OriDOs865zrEgzr/Ou86/zrrOu86uz4HPic+DzrcgzrcgzrHPgM6/zrjOrs66zrXPhc+Dzrcgz4HOv86uz4LigKZcbiIKLQotIywgZnV6enkKLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICLOoM+Bzr/PhM+FzrvOuc6zzrzOrc69zr8sIM6xzr3Osc68zr/Ovc6uIM6zzrnOsSDOv867zr/Ous67zq7Pgc+Jz4POtyDOtyDOsc+Azr/OuM6uzrrOtc+Fz4POtyDPgc6/zq7PguKAplxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICLPgM+Bzr/Pg8+Jz4HOuc69zq4gzrHPgM6/zrjOrs66zrXPhc+DzrfigKYiCi0KLW1zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICLOkc+Azr/OuM6uzrrOtc+Fz4POtyDOv867zr/Ous67zrfPgc+OzrjOt866zrUsIM6/z4HOuc+DzrzPjM+CIM60zrnOsc+Dz4nOu86uzr3Pic+DzrfPgiDPg861IFBMQVlJTkcg4oCmXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICLOkc+Azr/OuM6uzrrOtc+Fz4POtywgzr/Pgc65z4POvM+Mz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+CIM+DzrUgUEFVU0VEIOKAplxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAizprOsc64z4XPg8+Ezq3Pgc63z4POtyDOsc69zrHOtM65zrHOvc6/zrzOrs+C4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAizp/Pgc65z4POvM+Mz4IgzrrOsc+EzqzPg8+EzrHPg863z4Igz4POtSAlcyDPjM+Az4nPgiDOts63z4TOrs64zrfOus61IM6xz4DPjCAlc+KAplxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAizpTOuc6xzrrOv8+Azq46IM6kzrXPgc68zrHPhM65z4POvM+Mz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+C4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIs60zrXOvSDPhc+AzqzPgc+HzrXOuSDPg8+Ezr/Ouc+HzrXOr86/IMKrJXPCuyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIldBUk5JTkc6IM6xz4DPjCDPhM6/IM+Dz4TOv865z4fOtc6vzr8gJXM6ICVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIs6Vz4TOuc66zq3PhM61z4IgzrXOvs+MzrTOv8+FICjOtc+Azq/Pg863z4IgzrPOvc+Jz4PPhM6tz4Igz4nPgiDOvM61z4TOsc60zrXOtM6/zrzOrc69zrEpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAizqDOu863z4HOv8+Gzr/Pgc6vzrXPgiDOus6xz4TOrM+Dz4TOsc+DzrfPgiDOtc6+z4zOtM6/z4UgzrrOsc65IM61zrnOtM6/z4DOv865zq7Pg861zrnPgiDOuc60zrnOv8+Ezq7PhM+Jzr0iCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICLOnc6xIM68zrfOvSDOtc68z4bOsc69zrnPg864zrXOryDOus6xzrzOvM6vzrEgz4DOu863z4HOv8+Gzr/Pgc6vzrEgz4DPgc6/z4zOtM6/z4UiCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgIs6czrfOvc+NzrzOsc+EzrEgzrXOvs+MzrTOv8+FIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAizp3OsSDOvM63zr0gzrXOs866zrHPhM6xz4PPhM6xzrjOtc6vIM+HzrXOuc+BzrnPg8+Ezq7PgiDPg8+GzrHOu868zqzPhM+Jzr0iCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIs6Vzr7Osc69zrHOs866zrHPg868z4zPgiDPhM6/z4UgRU9TIM+Dz4TOuc+CIM+AzrfOs86tz4Igz4DPgc65zr0gz4TOvyDOus67zrXOr8+DzrnOvM6/IM+EzrfPgiDOtM65zrHPg8+JzrvOrs69z4nPg863z4IiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRVJST1I6IM6xzrTPhc69zrHOvM6vzrEgzrrOsc+EzrHPg866zrXPhc6uz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+COiAlcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkVSUk9SOiDOsc60z4XOvc6xzrzOr86xIM66zrHPhM6xz4POus61z4XOrs+CIM60zrnOsc+Dz4nOu86uzr3Pic+DzrfPgi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIldBUk5JTkc6IM61z4PPhs6xzrvOvM6tzr3OtyDOtM65zrHPg8+JzrvOrs69z4nPg863OiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJFUlJPUjogz4TOvyDPg8+Ezr/Ouc+HzrXOr86/ICfOtM65zrHPg8+JzrvOrs69z4nPg863JyDOtM61zr0gzrLPgc6tzrjOt866zrUuXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAizp/Pgc65z4POvM+Mz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+CIM+DzrUgUEFVU0VEIOKAplxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiRVJST1I6IM6XIM60zrnOsc+Dz4nOu86uzr3Pic+DzrcgzrTOtc69IM64zq3Ou861zrkgzr3OsSDPgM6xz43Pg861zrkuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIs6XIM60zrnOsc+Dz4nOu86uzr3Pic+DzrcgzrXOr869zrHOuSDOtc69zrXPgc6zzq4gzrrOsc65IM60zrXOvSDPh8+BzrXOuc6szrbOtc+EzrHOuSBQUkVST0xMIOKApiBcbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIs6XIM60zrnOsc+Dz4nOu86uzr3Pic+DzrcgzrXOr869zrHOuSDPg861IFBSRVJPTExJTkcg4oCmXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIkVSUk9SOiDOtyDOtM65zrHPg8+JzrvOrs69z4nPg863IM60zrXOvSDOuM6tzrvOtc65IM69zrEgz4DPgc6/z4TPhc67zrnPh864zrXOry5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAizpcgzrTOuc6xz4PPic67zq7Ovc+Jz4POtyDOtc6vzr3Osc65IFBSRVJPTExFRCDigKZcbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAizp/Pgc65z4POvM+Mz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+CIM+DzrUgUExBWUlORyDigKZcbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiRVJST1I6IM63IM60zrnOsc+Dz4nOu86uzr3Pic+DzrcgzrTOtc69IM64zq3Ou861zrkgzr3OsSDOsc69zrHPgM6xz4HOsc+HzrjOtc6vLlxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIiIKLSLOlc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgz4TOv8+FIEVPUyDOus6xz4TOrCDPhM6/zr0gz4TOtc+BzrzOsc+EzrnPg868z4wgLS0gzpXPgM65zrLOv867zq4gz4TOv8+FIEVPUyDPg8+EzrcgzrTOuc6xz4PPic67zq7Ovc+Jz4POt1xuIgotCi0jLCBmdXp6eQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICIiCi0izpXOvc61z4HOs86/z4DOv86vzrfPg863IM+Ezr/PhSBFT1MgzrrOsc+Ezqwgz4TOv869IM+EzrXPgc68zrHPhM65z4POvM+MIC0tIM6Vz4DOuc6yzr/Ou86uIM+Ezr/PhSBFT1Mgz4PPhM63IM60zrnOsc+Dz4nOu86uzr3Pic+DzrdcbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICLOkc69zrHOvM6/zr3OriDOs865zrEgRU9T4oCmXG4iCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICLOm86uz4jOtyBFT1MgLSDOtM65zrHOus6/z4DOriDOtM65zrHPg8+JzrvOrs69z4nPg863z4LigKZcbiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAizpTOuc6xzrrOv8+Azq46IM6kzrXPgc68zrHPhM65z4POvM+Mz4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+C4oCmXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAizqDPgc6/zq3Ous+Fz4jOtSDPg8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOt869IM6xzr3Osc68zr/Ovc6uIM6zzrnOsSBFT1NcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICLOlyDOtc66z4TOrc67zrXPg863IM+EzrXOu861zq/Pic+DzrUgzrzOtc+EzqwgJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIs6fz4HOuc+DzrzPjM+CIM60zrnOsc+Dz4nOu86uzr3Pic+DzrfPgiDPg861IFJFQURZIOKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICLOn8+BzrnPg868z4zPgiDOtM65zrHPg8+JzrvOrs69z4nPg863z4Igz4POtSBOVUxMIOKAplxuIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAizpHPgM6/zrTOrc+DzrzOtc+Fz4POtyDPhM63z4IgzrTOuc6xz4PPic67zq7Ovc+Jz4POt8+CIOKAplxuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICLOlc+Dz4nPhM61z4HOuc66z4wgz4PPhs6szrvOvM6xIM+Bzr/Ors+CIM60zrXOtM6/zrzOrc69z4nOvS4iCi0KLSN+IG1zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgotI34gbXNnc3RyICLOnc6xIM68zrfOvSDOtc6+zqzOs861z4TOsc65IM+AzrvOt8+Bzr/Phs6/z4HOr86xIM66zrHPhM6sz4PPhM6xz4POt8+CIM61zr7PjM60zr/PhSDPhM6/z4UgVFlQRSIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVFlQRTEsVFlQRTIs4oCmIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotI34gbXNnc3RyICLPg8+Nzr3OtM61z4POtyDPh8+Jz4HOr8+CIM+Dz4TOv865z4fOtc6vzr8gz4DPgc6/zq3Ou861z4XPg863z4IiCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgotI34gbXNnc3RyICLPg8+Nzr3OtM61z4POtyDPh8+Jz4HOr8+CIM+Dz4TOv865z4fOtc6vzr8gz4DPgc6/zr/Pgc65z4POvM6/z40iCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAizrTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Dz4TOv865z4fOtc6vzr8gzrPOuc6xIM+Ezrcgz4PPjc69zrTOtc+Dzrcgz4TOv8+FIFVSSSDCqyVzwrsgz4POtSIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAizrHOtM+Fzr3Osc68zq/OsSDPg8+Nzr3OtM61z4POt8+CIM+Dz4TOv865z4fOtc6vzr/PhSDPgM+Bzr/Ov8+BzrnPg868zr/PjSDOs865zrEgz4TOvyBVUkkgwqslc8K7IgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiIgotI34gIs6VzrzPhs6szr3Ouc+Dzrcgzq/Ph869zr/Phc+CIM6xzr3PhM65z4PPhM6/zq/Ph865z4POt8+CICjOsc69IM61zq/Ovc6xzrkgzrXOvc61z4HOs86/z4DOv865zrfOvM6tzr3OvyDOus6xz4TOrCDPhM63ICIKLSN+ICLOvM61z4TOsc6zzrvPjs+Ez4TOuc+DzrcgzrrPjs60zrnOus6xKSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIs6nz4HOrs+Dzrc6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiRVJST1I6IM6xz4DOv8+Ez4XPh86vzrEgzrHOvc6szrvPhc+DzrfPgiDOsc+Bz4fOtc6vzr/PhSB4bWwgJyVzJy5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkVSUk9SOiDOtM61zr0gz4XPgM6sz4HPh861zrkgz4PPhM6/zrnPh861zq/OvyDOtM65zrHPg8+JzrvOrs69z4nPg863z4Igz4PPhM6/IM6xzr3Pjs+EzrXPgc6/IM61z4DOr8+AzrXOtM6/IM+Dz4TOvyDOsc+Bz4fOtc6vzr8gIgotI34gIiclcycuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJXQVJOSU5HOiDOvM+Mzr3OvyDOrc69zrEgz4PPhM6/zrnPh861zq/OvyDPg861IM6xzr3Pjs+EzrXPgc6/IM61z4DOr8+AzrXOtM6/IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61z4TOsc65IM6xz4XPhM6uIM+EzrcgIgotI34gIs+Dz4TOuc6zzrzOri5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiRVJST1I6IM6xzrTPhc69zrHOvM6vzrEgzrHOvc6szrvPhc+DzrfPgiDOv8+Bzq/Pg868zrHPhM6/z4IgzrPPgc6xzrzOvM6uz4IgzrXOvc+Ezr/Ou86uz4IgJWQ6ICVzLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKLSN+IG1zZ3N0ciAiV0FSTklORzogz4TOvyDPg8+Ezr/Ouc+HzrXOr86/IM68zrUgz4TOvyDPjM69zr/OvM6xICclcycgzrTOtc69IM6yz4HOrc64zrfOus61LlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAizpHPgM6/zrjOrs66zrXPhc+DzrcgeG1sIM6xzr3Osc+AzrHPgc6sz4PPhM6xz4POt8+CIM+EzrfPgiDOtM65zrHPg8+JzrvOrs69z4nPg863z4Igz4PPhM6/IEZJTEUgzrrOsc65IM6tzr7Ov860zr/PgiIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkZJTEUiCi0KLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIs6dzrEgzrzOt869IM61zrPOus6xz4TOsc+Dz4TOsc64zr/Pjc69IM+HzrXOuc+BzrnPg8+Ezq3PgiDPg863zrzOrM+Ez4nOvSDOs865zrEgU0lHVVNSMSDOus6xzrkgU0lHVVNSMiIKZGlmZiAtLWdpdCBhL3BvL2VuQGJvbGRxdW90LmhlYWRlciBiL3BvL2VuQGJvbGRxdW90LmhlYWRlcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkYjZhMC4uMDAwMDAwMAotLS0gYS9wby9lbkBib2xkcXVvdC5oZWFkZXIKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIEFsbCB0aGlzIGNhdGFsb2cgInRyYW5zbGF0ZXMiIGFyZSBxdW90YXRpb24gY2hhcmFjdGVycy4KLSMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KLSMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCi0jIGFuZCBkb3VibGUgcXVvdGUgKDB4MjIpLiBUaGVzZSBzdWJzdGl0dXRlcyBsb29rIHN0cmFuZ2U7IHNlZQotIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCi0jCi0jIFRoaXMgY2F0YWxvZyB0cmFuc2xhdGVzIGdyYXZlIGFjY2VudCAoMHg2MCkgYW5kIGFwb3N0cm9waGUgKDB4MjcpIHRvCi0jIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCi0jIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bwotIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpCi0jIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KLSMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KLSMKLSMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgotIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKLSMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMgKGJ5IGljb252IGluIGdsaWJjIDIuMiBvciBuZXdlcikgb3IgdG8KLSMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKLSMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KLSMgV2hlbiBvdXRwdXQgdG8gYW4gQVNDSUkgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQotIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQotIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgotIwotIyBUaGlzIGNhdGFsb2cgZnVydGhlcm1vcmUgZGlzcGxheXMgdGhlIHRleHQgYmV0d2VlbiB0aGUgcXVvdGF0aW9uIG1hcmtzIGluCi0jIGJvbGQgZmFjZSwgYXNzdW1pbmcgdGhlIFZUMTAwL1hUZXJtIGVzY2FwZSBzZXF1ZW5jZXMuCi0jCmRpZmYgLS1naXQgYS9wby9lbkBxdW90LmhlYWRlciBiL3BvL2VuQHF1b3QuaGVhZGVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTY0N2ZjLi4wMDAwMDAwCi0tLSBhL3BvL2VuQHF1b3QuaGVhZGVyCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCi0jIFRoZSBtc2dpZHMgbXVzdCBiZSBBU0NJSSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjb250YWluIHJlYWwgcXVvdGF0aW9uCi0jIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQotIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKLSMgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAotIwotIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bwotIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgotIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KLSMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQotIyBhbmQgcGFpcnMgb2YgcXVvdGF0aW9uIG1hcmsgKDB4MjIpIHRvCi0jIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCi0jCi0jIFdoZW4gb3V0cHV0IHRvIGFuIFVURi04IHRlcm1pbmFsLCB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXBwZWFyIHBlcmZlY3RseS4KLSMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCi0jIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCi0jIGdyYXZlL2FjdXRlIGFjY2VudCAoYnkgbGliaWNvbnYpLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCi0jIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCi0jIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKLSMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMsIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKLSMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KLSMKZGlmZiAtLWdpdCBhL3BvL2VuX0dCLmdtbyBiL3BvL2VuX0dCLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MDIxZS4uMDAwMDAwMAotLS0gYS9wby9lbl9HQi5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9lbl9HQi5wbyBiL3BvL2VuX0dCLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTkxMjY5Li4wMDAwMDAwCi0tLSBhL3BvL2VuX0dCLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0MiArMCwwIEBACi0jIFRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lciBtZXNzYWdlcyB0byBFbmdsaXNoIChCcml0aXNoKS4KLSMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBHYXJldGggT3dlbiA8Z293ZW43MkB5YWhvby5jb20+LCAyMDA0LgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuOC4xXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDQtMjYgMTA6MzYtMDQwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogR2FyZXRoIE93ZW4gPGdvd2VuNzJAeWFob28uY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IEVuZ2xpc2ggKEJyaXRpc2gpIDxlbl9nYkBsaS5vcmc+XG4iCi0iTGFuZ3VhZ2U6IGVuX0dCXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gNSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJMRVZFTCIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMSVNUIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIkRpc2FibGUgY29sb3VyZWQgZGVidWdnaW5nIG91dHB1dCIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiRGlzYWJsZSBkZWJ1Z2dpbmciCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi0KLW1zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiUEFUSFMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIlBMVUdJTlMiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiAgIgotIlBsZWFzZSBmaWxlIGEgYnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4gIEZpbGUgYSBidWcuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotCi0jLCBmdXp6eQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotCi0jLCBmdXp6eQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiQ291bGQgbm90IGluaXRpYWxpc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIlJlc291cmNlIG5vdCBmb3VuZC4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJDb3VsZCBub3Qgc3luY2hyb25pc2Ugb24gcmVzb3VyY2UuIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLQotIywgZnV6enkKLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJTdHJlYW0gaXMgb2YgdGhlIHdyb25nIGZvcm1hdC4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAidGl0bGUiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJjb21tb25seSB1c2VkIHRpdGxlIgotCi1tc2dpZCAidGl0bGUgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJjb21tb25seSB1c2VkIHRpdGxlIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICJhcnRpc3QiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhcnRpc3QiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICJkYXRlIgotCi0jLCBmdXp6eQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoaW4gSnVsaWFuIGNhbGVuZGFyIGRheXMpIgotCi0jLCBmdXp6eQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXRlIgotCi0jLCBmdXp6eQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoaW4gSnVsaWFuIGNhbGVuZGFyIGRheXMpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgImdlbnJlIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAiY29tbWVudCIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLQotIywgZnV6enkKLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICJjb21tZW50IgotCi0jLCBmdXp6eQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKLW1zZ3N0ciAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgInRyYWNrIG51bWJlciIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJ0cmFjayBjb3VudCIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAiZGlzYyBudW1iZXIiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAiZGlzYyBjb3VudCIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLQotbXNnaWQgImxvY2F0aW9uIgotbXNnc3RyICJsb2NhdGlvbiIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgImRlc2NyaXB0aW9uIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzaW9uIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJvcmdhbmlzYXRpb24iCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgImNvcHlyaWdodCIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi0jLCBmdXp6eQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLQotIywgZnV6enkKLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJlbmNvZGVyIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAiY29udGFjdCIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImNvbnRhY3QgaW5mb3JtYXRpb24iCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaWNlbmNlIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJsaWNlbmNlIG9mIGRhdGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgImxpY2VuY2UiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJsaWNlbmNlIG9mIGRhdGEiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgInBlcmZvcm1lciIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJwZXJzb24ocykgcGVyZm9ybWluZyIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgImR1cmF0aW9uIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgImNvZGVjIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAidmlkZW8gY29kZWMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJhdWRpbyBjb2RlYyIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotCi0jLCBmdXp6eQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJ2aWRlbyBjb2RlYyIKLQotIywgZnV6enkKLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLQotIywgZnV6enkKLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJjb250YWN0IGluZm9ybWF0aW9uIgotCi0jLCBmdXp6eQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJiaXRyYXRlIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAibm9taW5hbCBiaXRyYXRlIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWluaW11bSBiaXRyYXRlIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWF4aW11bSBiaXRyYXRlIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImVuY29kZXIiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJlbmNvZGVyIHZlcnNpb24iCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJzZXJpYWwiCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJ0cmFjayBnYWluIGluIGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAicGVhayBvZiB0aGUgdHJhY2siCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgImFsYnVtIGdhaW4gaW4gZGIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJwZWFrIG9mIHRoZSBhbGJ1bSIKLQotIywgZnV6enkKLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICIiCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgImxvY2F0aW9uIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgImxvY2F0aW9uIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAibG9jYXRpb24iCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAibG9jYXRpb24iCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJsb2NhdGlvbiIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJsb2NhdGlvbiIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgImxvY2F0aW9uIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJsb2NhdGlvbiIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgImRpc2MgbnVtYmVyIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJkaXNjIG51bWJlciIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJsaWNlbmNlIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJ1c2VyIHJhdGluZyIKLW1zZ3N0ciAiZHVyYXRpb24iCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAibG9jYXRpb24iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAibm8gZWxlbWVudCBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJubyBiaW4gXCIlc1wiLCBza2lwcGluZyIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIkZpbGUgXCIlc1wiIGlzbid0IGEgcmVndWxhciBmaWxlLiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJjYXBzIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIm1pbmltdW0iCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCi1tc2dzdHIgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAidGl0bGUiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAidHJhY2sgY291bnQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAibm8gZWxlbWVudCBcIiVzXCIiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAibm8gZWxlbWVudCBcIiVzXCIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotCi0jLCBmdXp6eQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiUlVOTklORyBwaXBlbGluZSAuLi5cbiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0KLSN+IG1zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCi0jfiBtc2dzdHIgIlRZUEUxLFRZUEUyLC4uLiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLQotI34gbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgotI34gbXNnc3RyICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCi0jfiBtc2dzdHIgIkVSUk9SOiBwYXJzaW5nIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgotI34gbXNnc3RyICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuIgotCi0jfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgotI34gbXNnc3RyICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkZJTEUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgotI34gbXNnc3RyICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi0KLSN+IG1zZ2lkICJEaXNhYmxlIGFjY2VsZXJhdGVkIENQVSBpbnN0cnVjdGlvbnMiCi0jfiBtc2dzdHIgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKLQotI34gbXNnaWQgIlNDSEVEVUxFUiIKLSN+IG1zZ3N0ciAiU0NIRURVTEVSIgotCi0jfiBtc2dpZCAiUmVnaXN0cnkgdG8gdXNlIgotI34gbXNnc3RyICJSZWdpc3RyeSB0byB1c2UiCi0KLSN+IG1zZ2lkICJSRUdJU1RSWSIKLSN+IG1zZ3N0ciAiUkVHSVNUUlkiCi0KLSN+IG1zZ2lkICJwYXRoIGxpc3QgZm9yIGxvYWRpbmcgcGx1Z2lucyAoc2VwYXJhdGVkIGJ5ICclcycpIgotI34gbXNnc3RyICJwYXRoIGxpc3QgZm9yIGxvYWRpbmcgcGx1Z2lucyAoc2VwYXJhdGVkIGJ5ICclcycpIgotCi0jfiBtc2dpZCAiU2NoZWR1bGVyIHRvIHVzZSAoZGVmYXVsdCBpcyAnJXMnKSIKLSN+IG1zZ3N0ciAiU2NoZWR1bGVyIHRvIHVzZSAoZGVmYXVsdCBpcyAnJXMnKSIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuICBGaWxlIGEgYnVnLiIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2NoZWR1bGVyIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKLSN+IG1zZ3N0ciAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzY2hlZHVsZXIgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotCi0jfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKLSN+IG1zZ3N0ciAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKLQotI34gbXNnaWQgIlRoZXJlIGlzIG5vIGVsZW1lbnQgcHJlc2VudCB0byBoYW5kbGUgdGhlIHN0cmVhbSdzIG1pbWUgdHlwZSAlcy4iCi0jfiBtc2dzdHIgIlRoZXJlIGlzIG5vIGVsZW1lbnQgcHJlc2VudCB0byBoYW5kbGUgdGhlIHN0cmVhbSdzIG1pbWUgdHlwZSAlcy4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiY291bGQgbm90IGNvbnZlcnQgXCIlc1wiIHNvIHRoYXQgaXQgZml0cyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi0jfiBtc2dzdHIgIiIKLSN+ICJjb3VsZCBub3QgY29udmVydCBcIiVzXCIgc28gdGhhdCBpdCBmaXRzIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLQotI34gbXNnaWQgIlNob3cgcGx1Z2luIGRldGFpbHMiCi0jfiBtc2dzdHIgIlNob3cgcGx1Z2luIGRldGFpbHMiCi0KLSN+IG1zZ2lkICJTaG93IHNjaGVkdWxlciBkZXRhaWxzIgotI34gbXNnc3RyICJTaG93IHNjaGVkdWxlciBkZXRhaWxzIgotCi0jfiBtc2dpZCAiIGl0ZXJhdGlvbnMgKHN1bSAlIgotI34gbXNnc3RyICIgaXRlcmF0aW9ucyAoc3VtICUiCi0KLSN+IG1zZ2lkICIgbnMsIGF2ZXJhZ2UgJSIKLSN+IG1zZ3N0ciAiIG5zLCBhdmVyYWdlICUiCi0KLSN+IG1zZ2lkICIgbnMsIG1pbiAlIgotI34gbXNnc3RyICIgbnMsIG1pbiAlIgotCi0jfiBtc2dpZCAiIG5zLCBtYXggJSIKLSN+IG1zZ3N0ciAiIG5zLCBtYXggJSIKLQotI34gbXNnaWQgIiBucykuXG4iCi0jfiBtc2dzdHIgIiBucykuXG4iCi0KLSN+IG1zZ2lkICJOdW1iZXIgb2YgdGltZXMgdG8gaXRlcmF0ZSBwaXBlbGluZSIKLSN+IG1zZ3N0ciAiTnVtYmVyIG9mIHRpbWVzIHRvIGl0ZXJhdGUgcGlwZWxpbmUiCi0KLSN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKLSN+IG1zZ3N0ciAiICAgICAgICAgVHJ5aW5nIHRvIHJ1biBhbnl3YXkuXG4iCi0KLSN+IG1zZ2lkICInKSIKLSN+IG1zZ3N0ciAiJykiCi0KLSN+IG1zZ2lkICInIGlzIHRoZSBkZWZhdWx0KSIKLSN+IG1zZ3N0ciAiJyBpcyB0aGUgZGVmYXVsdCkiCmRpZmYgLS1naXQgYS9wby9lby5nbW8gYi9wby9lby5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MTcyYTEuLjAwMDAwMDAKLS0tIGEvcG8vZW8uZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZW8ucG8gYi9wby9lby5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFhYWI4Zi4uMDAwMDAwMAotLS0gYS9wby9lby5wbworKysgL2Rldi9udWxsCkBAIC0xLDEyNjIgKzAsMCBAQAotIyBFc3BlcmFudG8gdHJhbnNsYXRpb24gZm9yIGdzdHJlYW1lci4KLSMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCi0jIEtyaXN0amFuIFNDSE1JRFQgPGtyaXN0amFuLnNjaG1pZHRAZ29vZ2xlbWFpbC5jb20+LCAyMDExLgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzIuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDExLTA2LTA0IDIxOjExKzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEtyaXN0amFuIFNDSE1JRFQgPGtyaXN0amFuLnNjaG1pZHRAZ29vZ2xlbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogRXNwZXJhbnRvIDx0cmFuc2xhdGlvbi10ZWFtLWVvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogZW9cbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiRWxpZ2kgbGEgdmVyc2lvbiBkZSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiSWdpIMSJaXVqbiBhdmVydG9qbiBmYXRhbGFqIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIkVsaWdpIGRpc3BvbmVibGFqIHNlbmNpbWlnLWtvYXRlZ29yaW9qIGthaiBlbGlyaSIKLQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIk5JVkVMTyIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkxJU1RPIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiRWzFnWFsdGkgc2VuY2ltaWdvbiIKLQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiVk9KT0oiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJLUk9NUFJPR1JBTU9KIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJPcGNpb2ogZGUgR1N0cmVhbWVyIgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiTW9udHJpIGxhIG9wY2lqb24gZGUgR1N0cmVhbWVyIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIk5la29uYXRhIG9wY2lvIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIk5lIHRyb3ZpcyByaXN1cmNvbi4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJSaXN1cmNvIGVzdGFzIG9rdXBpdGUgYcWtIG5lIGRpc3BvbmVibGUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOZSBlYmxhcyBtZWxmZXJtaSBsYSByaXN1cmNvbiBwb3IgbGVnYWRvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTmUgZWJsYXMgbWVsZmVybWkgbGEgcmlzdXJjb24gcG9yIHNrcmliYWRvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTmUgZWJsYXMgbWVsZmVybWkgbGEgcmlzdXJjb24gcG9yIGxlZ2FkbyBrYWogc2tyaWJhZG8uIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiTmUgZWJsYXMgZmVybWkgbGEgcmlzdXJjb24uIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIk5lIGVibGFzIGxlZ2kgZGUgbGEgcmlzdXJjby4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJOZSBlYmxhcyBza3JpYmkgYWwgbGEgcmlzdXJjby4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIk5lIGVibGFzIHNrcmliaSBhbCBsYSByaXN1cmNvLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgInRpdG9sbyIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgImFydGlzdG8iCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgIiIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAiYWxidW1vIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhbGJ1bS1hcnRpc3RvIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiZGF0byIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgImRhdG9ob3JvIgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAixJ1lbnJvIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgImtvbWVudG8iCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgImRpc2stbnVtZXJvIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAiZGlzay1ub21icm8iCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgImxva28iCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgImhlam1wYcSdbyIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJwcmlza3JpYm8iCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgInZlcnNpbyIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJ2ZXJzaSBkZSB0aXUgZGF0dW1vIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAia29waXJhanRvIgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICJrb250YWt0byIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgInBlcm1lc2lsbyIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAicGVybWVzaWxvIGRlIGxhIGRhdHVtb2oiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAia29tcG9uaXN0byIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJkYcWtcm8iCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgImtvZGVrbyIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgInZpZGVvLWtvZGVrbyIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgInNvbi1rb2Rla28iCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJzdWJ0ZWtzdC1rb2Rla28iCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJiaXRyYXBpZG8iCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgIiIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgIiIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJMaW5ndm9rb2RvIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgIkxpbmd2b2tvZG8iCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgImJpbGRvIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgImt1bnNlbmRhxLVvIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgIiIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICJtb250cmkgbm9tb24iCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICIiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJsaXJpa29qIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgImdydXBhZG8iCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAibmVuaXUgZWxlbWVudG8gXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIiIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTmUgZWJsaXMgbWFsZmVybWkgbGEgZG9zaWVyb24gXCIlc1wiIHBvciBza3JpYmkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcmFybyBkdW0gZmVybWFkbyBkZSBsYSBkb3NpZXJvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRXJhcm8gZHVtIHNrcmlibyBhbCBsYSBkb3NpZXJvIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiXCIlc1wiIGVzdGFzIGRvc2llcnVqby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtaW5pbXVtbyIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAibGVnZWJsZSIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICJza3JpYmVibGUiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgInJlZ2VibGUiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIGtyb21wcm9ncmFtbyIKLW1zZ3N0clsxXSAiJWQga3JvbXByb2dyYW1vaiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgdHJhanRvIgotbXNnc3RyWzFdICIlZCB0cmFqdG9qIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJFbGlnaSDEiWl1am4gZWxlbWVudG9qbiIKLQotbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk9STU86XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkFWRVJUTzogZGUgZWxlbWVudG8gJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICJidWZyYWRvLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAibmVuaXUgZWxlbWVudG8gXCIlc1wiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiQVZFUlRPOiBkZSBlbGVtZW50byAlczogJXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICIiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybmEgZGF0dW1mbHUtZXJhcm8uIgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICJUSVBPMSxUSVBPMiwuLi4iCi0KLSN+IG1zZ2lkICJGSUxFIgotI34gbXNnc3RyICJET1NJRVJPIgpkaWZmIC0tZ2l0IGEvcG8vZXMuZ21vIGIvcG8vZXMuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmQ4MjVmLi4wMDAwMDAwCi0tLSBhL3BvL2VzLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2VzLnBvIGIvcG8vZXMucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NzQ4YzkuLjAwMDAwMDAKLS0tIGEvcG8vZXMucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxNDA5ICswLDAgQEAKLSMgdHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyLTAuMTAuMzIuMi5wbyB0byBFc3Bhw7FvbAotIyBzcGFuaXNoIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIKLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgSm9yZ2UgR29uesOhbGV6IDxqb3JnZWdvbnpAc3ZuLmdub21lLm9yZz4sIDIwMDksIDIwMTAsIDIwMTEuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC4xMC4zMi4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTEtMTAtMDIgMTU6NDUrMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogSm9yZ2UgR29uesOhbGV6IEdvbnrDoWxleiA8YWxvcmllbEBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogU3BhbmlzaCA8ZXNAbGkub3JnPlxuIgotIkxhbmd1YWdlOiBlc1xuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuIT0xKTtcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiSW1wcmltaXIgbGEgdmVyc2nDs24gZGUgR1N0cmVhbWVyIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIkhhY2VyIHRvZGFzIGxhcyBhZHZlcnRlbmNpYXMgZmF0YWxlcyIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJJbXByaW1pciBjYXRlZ29yw61hcyBkZSBkZXB1cmFjacOzbiBkaXNwb25pYmxlcyB5IHNhbGlyIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIk5pdmVsIGRlIGRlcHVyYWNpw7NuIHByZWRldGVybWluYWRvIGRlc2RlIDEgKHPDs2xvIGVycm9yKSBoYXN0YSA1ICh0b2RvKSBvIDAgIgotInNpbiBzYWxpZGEiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiTklWRUwiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iTGlzdGEgZGUgcGFyZXMgY2F0ZWdvcsOtYV9ub21icmU6bml2ZWwgc2VwYXJhZG9zIHBvciBjb21hcyBwYXJhIGVzdGFibGVjZXIgIgotIm5pdmVsZXMgZXNwZWPDrWZpY29zIHBhcmEgbGFzIGNhdGVnb3LDrWFzIGluZGl2aWR1YWxlcy4gRWplbXBsbzogIgotIkdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkxJU1RBIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIkRlc2FjdGl2YXIgbGEgY29sb3JhY2nDs24gZGUgbGEgc2FsaWRhIGRlcHVyYWRhIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJEZXNhY3RpdmFyIGRlcHVyYWNpw7NuIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIkFjdGl2YXIgbGEgc2FsaWRhIGRldGFsbGFkYSBkZWwgZGlhZ27Ds3N0aWNvIGRlIGNhcmdhIGRlIGNvbXBsZW1lbnRvcyIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIlJ1dGFzIHNlcGFyYWRhcyBwb3IgcHVudG8geSBjb21hIGNvbnRlbmllbmRvIGxvcyBjb21wbGVtZW50b3MiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiUlVUQVMiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0iTGlzdGEgZGUgY29tcGxlbWVudG9zIHBhcmEgcHJlZ2FyY2FyIHNlcGFyYWRvcyBwb3IgY29tYXMgYWRlbcOhcyBkZSBsYSBsaXN0YSAiCi0iYWxtYWNlbmFkYSBlbiBsYSB2YXJpYWJsZSBkZSBlbnRvcm5vIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIkNPTVBMRU1FTlRPUyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSJEZXNhY3RpdmFyIGxhIGNhcHR1cmEgZGUgZmFsbG9zIGRlIHNlZ21lbnRhY2nDs24gZHVyYW50ZSBsYSBjYXJnYSBkZSAiCi0iY29tcGxlbWVudG9zIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIkRlc2FjdGl2YXIgbGEgYWN0dWFsaXphY2nDs24gZGVsIHJlZ2lzdHJvIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotIkRlc2FjdGl2YXIgZWwgbGFuemFtaWVudG8gZGUgdW4gcHJvY2VzbyBkZSBheXVkYSBhbCBlc2NhbmVhciBlbCByZWdpc3RybyIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJPcGNpb25lcyBkZSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJNb3N0cmFyIGxhcyBvcGNpb25lcyBkZSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiT3BjacOzbiBkZXNjb25vY2lkYSIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGVuY29udHLDsyB1biBlcnJvciBnZW5lcmFsIGVuIGVsIG7DumNsZW8gZGUgbGEgYmlibGlvdGVjYS4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotIkxvcyBkZXNhcnJvbGxhZG9yZXMgZGUgR1N0cmVhbWVyIGZ1ZXJvbiBkZW1hc2lhZG8gdmFnb3MgcGFyYSBhw7FhZGlyIHVuICIKLSJjw7NkaWdvIGRlIGVycm9yIGEgZXN0ZSBlcnJvci4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IGPDs2RpZ28gbm8gaW1wbGVtZW50YWRvIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iRXJyb3IgZGUgR1N0cmVhbWVyOiBmYWxsw7MgZWwgY2FtYmlvIGRlIGVzdGFkbyB5IGFsZ8O6biBlbGVtZW50byBmYWxsw7MgYWwgIgotInB1YmxpY2FyIGVsIGVycm9yIGRlIG1lbnNhamUgY29ycmVzcG9uZGllbnRlIGNvbiBlbCBtb3Rpdm8gZGVsIGZhbGxvLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICIgIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm9yIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb24gbGFzIGhlYnJhcy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvbiBsYSBuZWdvY2lhY2nDs24uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvbiBsb3MgZXZlbnRvcy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm9yIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb24gbGEgYsO6c3F1ZWRhLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvbiBsYXMgY2FwYWNpZGFkZXMuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm9yIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb24gbGFzIGV0aXF1ZXRhcy4iCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICJBIGxhIGluc3RhbGFjacOzbiBkZSBHU3RyZWFtZXIgbGUgZmFsdGEgdW4gY29tcGxlbWVudG8uIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm9yIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb24gZWwgcmVsb2ouIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLSJFc3RhIGFwbGljYWNpw7NuIGVzdMOhIHRyYXRhbmRvIGRlIHVzYXIgdW5hIGZ1bmNpb25hbGlkYWQgZGUgR1N0cmVhbWVyIHF1ZSBzZSAiCi0iaGEgZGVzaGFiaWxpdGFkby4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBlbmNvbnRyw7MgdW4gZXJyb3IgZGUgc29wb3J0ZSBnZW5lcmFsIGVuIGxhIGJpYmxpb3RlY2EuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTm8gc2UgcHVkbyBpbmljaWFsaXphciBsYSBiaWJsaW90ZWNhIGRlIHNvcG9ydGUuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gY2VycmFyIGxhIGJpYmxpb3RlY2EgZGUgc29wb3J0ZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gY29uZmlndXJhciBsYSBiaWJsaW90ZWNhIGRlIHNvcG9ydGUuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJFcnJvciBkZSBjb2RpZmljYWNpw7NuLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgZW5jb250csOzIHVuIGVycm9yIGdlbmVyYWwgZGUgcmVjdXJzby4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJSZWN1cnNvIG5vIGVuY29udHJhZG8uIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiRWwgcmVjdXJzbyBlc3TDoSBvY3VwYWRvIG8gbm8gZGlzcG9uaWJsZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gYWJyaXIgZWwgcmVjdXJzbyBwYXJhIHN1IGxlY3R1cmEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJObyBzZSBwdWRvIGFicmlyIGVsIHJlY3Vyc28gcGFyYSBzdSBlc2NyaXR1cmEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJObyBzZSBwdWRvIGFicmlyIGVsIHJlY3Vyc28gcGFyYSBzdSBsZWN0dXJhIHkgZXNjcml0dXJhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gY2VycmFyIGVsIHJlY3Vyc28uIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gbGVlciBkZWwgcmVjdXJzby4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJObyBzZSBwdWRvIGVzY3JpYmlyIGVuIGVsIHJlY3Vyc28uIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gcmVhbGl6YXIgdW5hIGLDunNxdWVkYSBlbiBlbCByZWN1cnNvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gc2luY3Jvbml6YXIgZWwgcmVjdXJzby4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiTm8gc2UgcHVkaWVyb24gb2J0ZW5lci9lc3RhYmxlY2VyIGxvcyBhanVzdGVzIGRlL2VuIGVsIHJlY3Vyc28uIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJObyBxdWVkYSBlc3BhY2lvIGRpc3BvbmlibGUgZW4gZWwgcmVjdXJzby4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAiTm8gcXVlZGEgZXNwYWNpbyBkaXNwb25pYmxlIGVuIGVsIHJlY3Vyc28uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgZW5jb250csOzIHVuIGVycm9yIGdlbmVyYWwgZGUgZmx1am8uIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iRWwgZWxlbWVudG8gbm8gaW1wbGVtZW50YSB1biBtYW5lamFkb3IgZGUgZXN0ZSBmbHVqby4gUG9yIGZhdm9yLCByZWxsZW5lIHVuICIKLSJpbmZvcm1lIGRlIGVycm9yLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJObyBzZSBwdWRvIGRldGVybWluYXIgZWwgdGlwbyBkZSBmbHVqby4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIkVsIGZsdWpvIGVzIGRlIHVuIHRpcG8gZGlmZXJlbnRlIHF1ZSBlbCBtYW5lamFkbyBwb3IgZXN0ZSBlbGVtZW50by4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIk5vIGhheSB1biBjw7NkZWMgZGlzcG9uaWJsZSBxdWUgcHVlZGEgbWFuZWphciBlbCB0aXBvIGRlbCBmbHVqby4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gZGVjb2RpZmljYXIgZWwgZmx1am8uIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJObyBzZSBwdWRvIGNvZGlmaWNhciBlbCBmbHVqby4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiTm8gc2UgcHVkbyBkZW11bHRpcGxleGFyIGVsIGZsdWpvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiTm8gc2UgcHVkbyBtdWx0aXBsZXhhciBlbCBmbHVqby4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJFbCBmbHVqbyBlc3TDoSBlbiBlbCBmb3JtYXRvIGluY29ycmVjdG8uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkVsIGZsdWpvIGVzdMOhIGNpZnJhZG8geSBlbCBkZXNjaWZyYWRvIG5vIGVzdMOhIHNvcG9ydGFkby4iCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0iRWwgZmx1am8gZXN0w6EgY2lmcmFkbyB5IG5vIHNlIHB1ZWRlIGRlc2NpZnJhciBwb3JxdWUgbm8gc2UgaGEgcHJvcG9yY2lvbmFkbyAiCi0idW5hIGNsYXZlIGFkZWN1YWRhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJObyBoYXkgdW4gbWVuc2FqZSBkZSBlcnJvciBwYXJhIGVsIGRvbWluaW8gJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIk5vIGhheSB1biBtZW5zYWplIGRlIGVycm9yIGVzdMOhbmRhciBwYXJhIGVsIGRvbWluaW8gJXMgeSBjw7NkaWdvICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiRWwgcmVsb2ogc2VsZWNjaW9uYWRvIG5vIHNlIHB1ZWRlIHVzYXIgZW4gbGEgc2VnbWVudGFjacOzbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIGxhIGNhY2jDqSBkZSByZWdpc3RybyBhICVzOiAlcyIKLQotbXNnaWQgInRpdGxlIgotbXNnc3RyICJ0w610dWxvIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAidMOtdHVsbyB1c2FkbyBjb23Dum5tZW50ZSIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJub21icmUgZGUgb3JkZW5hY2nDs24gZGVsIHTDrXR1bG8iCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJ0w610dWxvIHVzYWRvIGNvbcO6bm1lbnRlIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hbWllbnRvIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICJhcnRpc3RhIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb25hKHMpIHJlc3BvbnNhYmxlcyBkZSBsYSBncmFiYWNpw7NuIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJub21icmUgZGUgb3JkZW5hY2nDs24gZGVsIGFydGlzdGEiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJwZXJzb25hKHMpIHJlc3BvbnNhYmxlKHMpIGRlIGxhIGdyYWJhY2nDs24gcGFyYSBwcm9ww7NzaXRvcyBkZSBvcmRlbmFtaWVudG8iCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAiw6FsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImVsIMOhbGJ1bSBxdWUgY29udGllbmUgZXN0b3MgZGF0b3MiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tYnJlIGRlIG9yZGVuYWNpw7NuIGRlbCDDoWxidW0iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiZWwgw6FsYnVtIHF1ZSBjb250aWVuZSBlc3RvcyBkYXRvcyBwYXJhIHByb3DDs3NpdG9zIGRlIG9yZGVuYW1pZW50byIKLQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAiYXJ0aXN0YSBkZWwgw6FsYnVtIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJFbCBhcnRpc3RhIGRlbCDDoWxidW0gZW50ZXJvLCBjb21vIHNlIGRlYmVyw61hIG1vc3RyYXIiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIm5vbWJyZSBkZSBvcmRlbmFjacOzbiBkZWwgYXJ0aXN0YSBkZWwgw6FsYnVtIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICJFbCBhcnRpc3RhIGRlbCDDoWxidW0gZW50ZXJvLCBjb21vIHNlIGRlYmVyw61hIG9yZGVuYXIiCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICJmZWNoYSIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZmVjaGEgZW4gbGEgcXVlIHNlIGNyZWFyb24gbG9zIGRhdG9zIChjb21vIGVzdHJ1Y3R1cmEgR0RhdGUpIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgImZlY2hhIHkgaG9yYSIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiIgotImZlY2hhIHkgaG9yYSBlbiBsYSBxdWUgc2UgY3JlYXJvbiBsb3MgZGF0b3MgKGNvbW8gZXN0cnVjdHVyYSBHc3REYXRlVGltZSkiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAiZ8OpbmVybyIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICJnw6luZXJvIGFsIHF1ZSBwZXJ0ZW5lY2VuIGVzdG9zIGRhdG9zIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAiY29tZW50YXJpbyIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICJjb21lbnRhcmlvIGRlIHRleHRvIHNvYnJlIGxvcyBkYXRvcyIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImNvbWVudGFyaW8gZXh0ZW5kaWRvIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0idGV4dG8gbGlicmUgY29tZW50YW5kbyBsb3MgZGF0b3MgY29tbyBrZXk9dmFsb3IgbyBrZXlbZXNdPWZvcm11bGFyaW8gZGUgIgotImNvbWVudGFyaW8iCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIm7Dum1lcm8gZGUgcGlzdGEiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibsO6bWVybyBkZSBwaXN0YSBlbiB1bmEgY29sZWNjacOzbiIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJuw7ptZXJvIGRlIHBpc3RhIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAibsO6bWVybyBkZSBwaXN0YXMgZW4gbGEgY29sZWNjacOzbiBhIGxhIHF1ZSBwZXJ0ZW5lY2UgbGEgcGlzdGEiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAibsO6bWVybyBkZSBkaXNjbyIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIm7Dum1lcm8gZGVsIGRpc2NvIGRlbnRybyBkZSB1bmEgY29sZWNjacOzbiIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgIm7Dum1lcm8gZGUgZGlzY29zIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIm7Dum1lcm8gZGUgZGlzY29zIGVuIGxhIGNvbGVjY2nDs24gYSBsYSBxdWUgcGVydGVuZWNlIGVsIGRpc2NvIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgInViaWNhY2nDs24iCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotIk9yaWdlbiBkZWwgbWVkaW8gY29tbyB1biBVUkkgKHViaWNhY2nDs24sIGRvbmRlIGVzdMOhIGFsb2phZG8gZWwgYXJjaGl2byBvICIKLSJmbHVqbyBvcmlnaW5hbCkiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAicMOhZ2luYSBwcmluY2lwYWwiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICIiCi0iUMOhZ2luYSBwcmluY2lwYWwgcGFyYSBlc3RlIHNvcG9ydGUgKGVqLiBww6FnaW5hIHByaW5jaXBhbCBkZWwgYXJ0aXN0YSBvICIKLSJwZWzDrWN1bGEpIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgImRlc2NyaXBjacOzbiIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAidGV4dG8gY29ydG8gZGVzY3JpYmllbmRvIGVsIGNvbnRlbmlkbyBkZSBsb3MgZGF0b3MiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzacOzbiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJ2ZXJzacOzbiBkZSBlc3RvcyBkYXRvcyIKLQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIklTUkMiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlOyBjb25zdWx0ZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJvcmdhbml6YWNpw7NuIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJjb3B5cmlnaHQiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJub3RhIGRlIGRlcmVjaG9zIGRlIGF1dG9yIGRlIGxvcyBkYXRvcyIKLQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgIlVSSSBhIGxvcyBkZXJlY2hvcyBkZSBhdXRvciIKLQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJIGEgbGEgbm90YSBkZSBkZXJlY2hvcyBkZSBhdXRvciBkZSBsb3MgZGF0b3MiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJjb2RpZmljYWRvIHBvciIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIk5vbWJyZSBkZSBsYSBwZXJzb25hIHUgb3JnYW5pemFjacOzbiBxdWUgbG8gY29kaWZpY8OzIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAiY29udGFjdG8iCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJpbmZvcm1hY2nDs24gZGUgY29udGFjdG8iCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaWNlbmNpYSIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAibGljZW5jaWEgZGUgbG9zIGRhdG9zIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgIlVSSSBhIGxhIGxpY2VuY2lhIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgYSBsYSBsaWNlbmNpYSBkZSBsb3MgZGF0b3MiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgImludMOpcnByZXRlIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgInBlcnNvbmEocykgaW50ZXJwcmV0YW5kbyIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJjb21wb3NpdG9yIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb25hKHMpIHF1ZSBjb21wdXNpZXJvbiBsYSBncmFiYWNpw7NuIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJkdXJhY2lvIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgImR1cmFjacOzbiBlbiB1bmlkYWRlcyBkZSB0aWVtcG8gR1N0cmVhbWVyIChuYW5vc2VndW5kb3MpIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgImPDrWRlYyIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY8OzZGVjIGVuIGVsIHF1ZSBlc3TDoW4gYWxtYWNlbmFkb3MgbG9zIGRhdG9zIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgImPDs2RlYyBkZSB2w61kZW8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImPDs2RlYyBlbiBlbCBxdWUgZXN0w6FuIGFsbWFjZW5hZG9zIGxvcyBkYXRvcyBkZWwgdsOtZGVvIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImPDs2RlYyBkZSBzb25pZG8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImPDs2RlYyBlbiBlbCBxdWUgZXN0w6FuIGFsbWFjZW5hZG9zIGxvcyBkYXRvcyBkZWwgc29uaWRvIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgImPDs2RlYyBkZWwgc3VidMOtdHVsbyIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY8OzZGVjIGVuIGVsIHF1ZSBlc3TDoW4gYWxtYWNlbmFkb3MgbG9zIGRhdG9zIGRlbCBzdWJ0w610dWxvIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiZm9ybWF0byBkZWwgY29udGVuZWRvciIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJmb3JtYXRvIGRlbCBjb250ZW5lZG9yIGVuIGVsIHF1ZSBlc3TDoW4gYWxtYWNlbmFkb3MgbG9zIGRhdG9zIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAidGFzYSBkZSBiaXRzIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAidGFzYSBkZSBiaXRzIGV4YWN0YSBvIG1lZGlhIGVuIGJpdHMvcyIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAidGFzYSBkZSBiaXRzIG5vbWluYWwiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJ0YXNhIGRlIGJpdHMgbm9taW5hbCBlbiBiaXRzL3MiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm3DrW5pbWEgdGFzYSBkZSBiaXRzIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibcOtbmltYSB0YXNhIGRlIGJpdHMgZW4gYml0cy9zIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJtw6F4aW1hIHRhc2EgZGUgYml0cyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm3DoXhpbWEgdGFzYSBkZSBiaXRzIGVuIGJpdHMvcyIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImNvZGlmaWNhZG9yIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiY29kaWZpY2Fkb3IgdXNhZG8gcGFyYSBjb2RpZmljYXIgZXN0ZSBmbHVqbyIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAidmVyc2nDs24gZGVsIGNvZGlmaWNhZG9yIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAidmVyc2nDs24gZGVsIGNvZGlmaWNhZG9yIHVzYWRvIHBhcmEgY29kaWZpY2FyIGVzdGUgZmx1am8iCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgInNlcmllIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAibsO6bWVybyBkZSBzZXJpZSBkZSBsYSBwaXN0YSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAicmVwcm9kdWNpZW5kbyBnYW5hbmNpYSBkZSBsYSBwaXN0YSIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgImdhbmFuY2lhIGRlIGxhIHBpc3RhIGVuIGRCIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJyZXByb2R1Y2llbmRvIHBpY28gZGUgbGEgcGlzdGEiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAicGljbyBkZSBsYSBwaXN0YSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAicmVwcm9kdWNpZW5kbyBnYW5hbmNpYSBkZWwgw6FsYnVtIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiZ2FuYW5jaWEgZGVsIMOhbGJ1bSBlbiBkQiIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAicmVwcm9kdWNpZW5kbyBlbCBwaWNvIGRlbCDDoWxidW0iCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAicGljbyBkZWwgw6FsYnVtIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgIm5pdmVsIGRlIHJlZmVyZW5jaWEgZGUgbGEgZ2FuYW5jaWEiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICJ2YWxvciBkZWwgbml2ZWwgZGUgcmVmZXJlbmNpYSBkZSBnYW5hbmNpYSBkZSBsYSBwaXN0YSB5IGRlbCDDoWxidW0iCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJjw7NkaWdvIGRlIGlkaW9tYSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICJjw7NkaWdvIGRlIGlkaW9tYSBwYXJhIGVzdGUgZmx1am8sIGFqdXN0w6FuZG9zZSBhIElTTy02MzktMSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJjw7NkaWdvIGRlIGlkaW9tYSIKLQotbXNnaWQgImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAiaW1hZ2VuIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiaW1hZ2VuIHJlbGFjaW9uYWRhIGNvbiBlc3RlIGZsdWpvIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJwcmV2aXN1YWxpemFyIGltYWdlbiIKLQotbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAicHJldmlzdWFsaXphciBsYSBpbWFnZW4gcmVsYWNpb25hZGEgY29uIGVzdGUgZmx1am8iCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJhZGp1bnRvIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiYXJjaGl2byBhZGp1bnRvIGEgZXN0ZSBmbHVqbyIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgImdvbHBlcyBwb3IgbWludXRvIChicG0pIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgIm7Dum1lcm8gZGUgZ29scGVzIHBvciBtaW51dG8gKGJwbSkgZW4gZWwgc29uaWRvIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgInBhbGFicmFzIGNsYXZlIgotCi1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgInBhbGFicmFzIGNsYXZlIHNlcGFyYWRhcyBwb3IgY29tYXMgZGVzY3JpYmllbmRvIGVsIGNvbnRlbmlkbyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICJub21icmUgZGUgbGEgZ2VvdWJpY2FjacOzbiIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0iZGVzY3JpcGNpw7NuIGRlIGxhIHViaWNhY2nDs24gZW50ZW5kaWJsZSBwb3IgaHVtYW5vcyBkZSBkw7NuZGUgc2UgaGEgZ3JhYmFkbyBvICIKLSJwcm9kdWNpZG8gZWwgbWVkaW8iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgImxhdGl0dWQgZGUgbGEgZ2VvbG9jYWxpemFjacOzbiIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotImxhdGl0dWQgZ2VvZ3LDoWZpY2EgZG9uZGUgc2UgaGEgZ3JhYmFkbyBvIHByb2R1Y2lkbyBlbCBtZWRpbywgZW4gZ3JhZG9zIGRlICIKLSJhY3VlcmRvIGNvbiBXR1M4NCAoY2VybyBlcyBlbCBlY3VhZG9yLCB2YWxvcmVzIG5lZ2F0aXZvcyBwYXJhIGxhdGl0dWRlcyAiCi0ibWVyaWRpb25hbGVzKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgImxvbmdpdHVkIGRlIGxhIGdlb2xvY2FsaXphY2nDs24iCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0ibG9uZ2l0dWQgZ2VvZ3LDoWZpY2EgZG9uZGUgc2UgaGEgZ3JhYmFkbyBvIHByb2R1Y2lkbyBlbCBtZWRpbywgZW4gZ3JhZG9zIGRlICIKLSJhY3VlcmRvIGNvbiBXR1M4NCAoY2VybyBlcyBlbCBwcmltZXIgbWVyaWRpYW5vIGVuIEdyZWVud2ljaC9HQiwgdmFsb3JlcyAiCi0ibmVnYXRpdm9zIHBhcmEgbG9uZ2l0dWRlcyBvY2NpZGVudGFsZXMpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiZWxldmFjacOzbiBkZSBsYSBnZW9sb2NhbGl6YWNpw7NuIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotImVsZXZhY2nDs24gZ2VvZ3LDoWZpY2EgZG9uZGUgc2UgaGEgZ3JhYmFkbyBvIHByb2R1Y2lkbyBlbCBtZWRpbywgZW4gbWV0cm9zIGRlICIKLSJhY3VlcmRvIGNvbiBXR1M4NCAoY2VybyBlcyBlbCBuaXZlbCBtZWRpbyBkZWwgbWFyKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICJwYcOtcyBkZSBsYSBnZW9sb2NhbGl6YWNpw7NuIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgInBhw61zIChub21icmUgZW4gaW5nbGXMgXMpIGRvbmRlIHNlIGhhIGdyYWJhZG8gbyBwcm9kdWNpZG8gZWwgbWVkaW8iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiY2l1ZGFkIGRlIGxhIGdlb2xvY2FsaXphY2nDs24iCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiY2l1ZGFkIChub21icmUgZW4gaW5nbMOpcykgZG9uZGUgc2UgaGEgZ3JhYmFkbyBvIHByb2R1Y2lkbyBlbCBtZWRpbyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAic3VidWJpY2FjacOzbiBkZSBsYSBnZW9sb2NhbGl6YWNpw7NuIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0idW5hIHViaWNhY2nDs24gZW4gdW5hIGNpdWRhZCBkb25kZSBzZSBoYSBwcm9kdWNpZG8gbyBjcmVhZG8gZWwgbWVkaW8gKGVqLiBlbCAiCi0iYmFycmlvKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJlcnJvciBob3Jpem9udGFsIGRlIGdlb2xvY2FsaXphY2nDs24iCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiIgotImVycm9yIGVzcGVyYWRvIGRlIGxhcyBtZWRpZGFzIGRlIHBvc2ljaW9uYW1pZW50byBob3Jpem9udGFsIChlbiBtZXRyb3MpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJ2ZWxvY2lkYWQgZGUgbW92aW1pZW50byBkZSBsYSBnZW9sb2NhbGl6YWNpw7NuIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICIiCi0idmVsb2NpZGFkIGRlIG1vdmltaWVudG8gZGVsIGRpc3Bvc2l0aXZvIGRlIGNhcHR1cmEgbWllbnRyYXMgcmVhbGl6YSBsYSAiCi0iY2FwdHVyYSwgZW4gbS9zIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiZGlyZWNjacOzbiBkZSBtb3ZpbWllbnRvIGRlIGxhIGdlb2xvY2FsaXphY2lvzIFuIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iaW5kaWNhIGxhIGRpcmVjY2nDs24gZGUgbW92aW1pZW50byBkZWwgZGlzcG9zaXRpdm8gcXVlIHJlYWxpemEgbGEgY2FwdHVyYSBkZSAiCi0idW4gbWVkaW8uIFNlIHJlcHJlc2VudGEgZW4gZ3JhZG9zIG8gZW4gdW5hIHJlcHJlc2VudGFjacOzbiBlbiBjb21hIGZsb3RhbnRlLCAiCi0iMCBzaWduaWZpY2EgZWwgbm9ydGUgZ2VvZ3LDoWZpY28geSBhdW1lbnRhIGRlIGZvcm1hIGhvcmFyaWEuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlY2Npb8yBbiBkZSBjYXB0dXJhIGRlIGxhIGdlb2xvY2FsaXphY2lvzIFuIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iaW5kaWNhIGxhIGRpcmVjY2nDs24gYSBsYSBxdWUgYXB1bnRhIGVsIGRpc3Bvc2l0aXZvIHF1ZSByZWFsaXphIGxhIGNhcHR1cmEgZGUgIgotInVuIG1lZGlvLiBTZSByZXByZXNlbnRhIGVuIGdyYWRvcyBvIGVuIHVuYSByZXByZXNlbnRhY2nDs24gZW4gY29tYSBmbG90YW50ZSwgIgotIjAgc2lnbmlmaWNhIGVsIG5vcnRlIGdlb2dyw6FmaWNvIHkgYXVtZW50YSBkZSBmb3JtYSBob3JhcmlhLiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICJub21icmUgZGVsIHByb2dyYW1hIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAiTm9tYnJlIGRlbCBwcm9ncmFtYS9wb2RjYXN0L3NlcmllIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICJub21icmUgZGUgb3JkZW5hY2nDs24gZGVsIHByb2dyYW1hIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJOb21icmUgZGVsIHByb2dyYW1hL3BvZGNhc3Qvc2VyaWUsIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hY2nDs24iCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAibsO6bWVybyBkZSBlcGlzb2RpbyIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJFbCBuw7ptZXJvIGRlIGVwaXNvZGlvIGVuIGxhIHRlbXBvcmFkYSAiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJuw7ptZXJvIGRlIHRlbXBvcmFkYSIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJFbCBuw7ptZXJvIGRlIHRlbXBvcmFkYSBkZWwgcHJvZ3JhbWEiCi0KLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgImxldHJhcyIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiTGFzIGxldHJhcyBkZWwgYXJjaGl2byBtdWx0aW1lZGlhLCBnZW5lcmFsbWVudGUgdXNhZG8gcGFyYSBjYW5jaW9uZXMiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tYnJlIGNvcnRvIGRlbCBjb21wb3NpdG9yIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotInBlcnNvbmEocykgcXVlIGNvbXB1c2llcm9uIGxhIGdyYWJhY2nDs24sIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hbWllbnRvIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgImFncnVwYWNpw7NuIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iQWdydXBhIHRlbWFzIHJlbGFjaW9uYWRvcyBxdWUgc2UgZXhwYW5kZW4gdmFyaWFzIHBpc3RhcywgY29tbyBsYXMgZGlmZXJlbnRlcyAiCi0icGFydGVzIGRlIHVuIGNvbmNpZXJ0by4gRXMgdW4gbml2ZWwgbcOhcyBhbHRvIHF1ZSBlbCBkZSB1bmEgcGlzdGEsIHBlcm8gbcOhcyAiCi0iYmFqbyBxdWUgZWwgZGUgdW4gw6FsYnVtLiIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJwdW50dWFjacOzbiBkZSB1c3VhcmlvIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJQdW50dWFjacOzbiBhdHJpYnVpZGEgcG9yIHVuIHVzdWFyaW8uIEN1YW50byBtYXlvciBzZWEgbGEgcHVudHVhY2nDs24gbcOhcyBsZSAiCi0iZ3VzdGFyw6EgYWwgdXN1YXJpby4iCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICJmYWJyaWNhbnRlIGRlbCBkaXNwb3NpdGl2byIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIkZhYnJpY2FudGUgZGVsIGRpc3Bvc2l0aXZvIHVzYWRvIHBhcmEgY3JlYXIgZXN0ZSBtZWRpbyIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAibW9kZWxvIGRlbCBkaXNwb3NpdGl2byIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTW9kZWxvIGRlbCBkaXNwb3NpdGl2byB1c2FkbyBwYXJhIGNyZWFyIGVzdGUgbWVkaW8iCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJub21icmUgZGUgbGEgYXBsaWNhY2nDs24iCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIkFwbGljYWNpw7NuIHVzYWRhIHBhcmEgY3JlYXIgZWwgbWVkaW8iCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJkYXRvcyBkZSBsYSBhcGxpY2FjacOzbiIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIkRhdG9zIGFyYml0cmFyaW9zIGRlIGxhIGFwbGljYWNpw7NuIHBhcmEgc2VyaWFsaXphcmxvcyBlbiBlbCBtZWRpbyIKLQotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICJvcmllbnRhY2nDs24gZGUgbGEgaW1hZ2VuIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICJDw7NtbyBzZSBkZWJlcsOtYSByb3RhciBvIHZvbHRlYXIgbGEgaW1hZ2VuIGFudGVzIGRlIG1vc3RyYXJsYSIKLQotbXNnaWQgInB1Ymxpc2hlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgbGFiZWwgb3IgcHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgIiIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICIsICIKLW1zZ3N0ciAiLCAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gVVJJIGhhbmRsZXIgZm9yIHRoZSAlcyBwcm90b2NvbCBmb3VuZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiRVJST1I6IGRlbCBlbGVtZW50byAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJbmZvcm1hY2nDs24gYWRpY2lvbmFsIGRlIGRlcHVyYWNpw7NuOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIm5vIGhheSB1bmEgcHJvcGllZGFkIMKrJXPCuyBlbiBlbCBlbGVtZW50byDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJubyBzZSBwdWRvIGVzdGFibGVjZXIgbGEgcHJvcGllZGFkIMKrJXPCuyBlbiBlbCBlbGVtZW50byDCqyVzwrsgYSDCqyVzwrsiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJubyBzZSBwdWRvIGVubGF6YXIgJXMgYSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAibm8gaGF5IHVuIGVsZW1lbnRvIMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAibm8gc2UgcHVkaWVyb24gYW5hbGl6YXIgbGFzIGNhcGFjaWRhZGVzIMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5vIGV4aXN0ZSBlbCBlbGVtZW50byBzdW1pZGVybyBwYXJhIGVsIFVSSSDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5vIGV4aXN0ZSB1biBlbGVtZW50byBvcmlnZW4gcGFyYSBlbCBVUkkgwqslc8K7IgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJlbCBiaW5hcmlvIGVzcGVjaWZpY2FkbyDCqyVzwrsgZXN0w6EgdmFjw61vLCBubyBlc3TDoSBwZXJtaXRpZG8iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAibm8gZXhpc3RlIGVsIGJpbmFyaW8gwqslc8K7LCBvbWl0aWVuZG8iCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAibm8gc2UgcGVybWl0ZSB1biBjb25kdWN0byB2YWPDrW8iCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAiU2UgZXN0w6FuIGRlc2VjaGFuZG8gbXVjaG9zIGLDumZlcmVzLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiUHJvYmxlbWEgZW4gZWwgZmx1am8gZGUgZGF0b3MgaW50ZXJuby4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJFcnJvciBlbiBlbCBmbHVqbyBkZSBkYXRvcyBpbnRlcm5vLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiRXJyb3IgZW4gZWwgcmVsb2ogaW50ZXJuby4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJGaWx0cm8gZGUgY2FwYWNpZGFkZXMiCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIlJlc3RyaW5naXIgbGFzIHBvc2libGVzIGNhcGFjaWRhZGVzIHBlcm1pdGlkYXMgKE5VTEwgc2lnbmlmaWNhIENVQUxRVUlFUkEpLiAiCi0iQWwgZXN0YWJsZWNlciBlc3RhIHByb3BpZWRhZCBzZSBvYnRpZW5lIHVuYSByZWZlcmVuY2lhIGRlbCBvYmpldG8gR3N0Q2FwcyAiCi0icHJvcG9yY2lvbmFkby4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICJObyBzZSBlc3BlY2lmaWPDsyB1biBkaXJlY3RvcmlvIHRlbXBvcmFsLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJObyBzZSBwdWRvIGNyZWFyIGVsIGFyY2hpdm8gdGVtcG9yYWwgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gYWJyaXIgZWwgYXJjaGl2byDCqyVzwrsgcGFyYSBsZWVyLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIkVycm9yIGFsIGVzY3JpYmlyIHBhcmEgZGVzY2FyZ2FyIGVsIGFyY2hpdm8uIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5vIHNlIGVzcGVjaWZpY8OzIHVuIG5vbWJyZSBkZSBhcmNoaXZvIHBhcmEgZXNjcml0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gYWJyaXIgwqslc8K7IHBhcmEgZXNjcmliaXIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcnJvciBhbCBjZXJyYXIgZWwgYXJjaGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcnJvciBhbCBidXNjYXIgZW4gZWwgYXJjaGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciBhbCBhcmNoaXZvIMKrJXPCuy4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTm8gc2UgZXNwZWNpZmljw7MgdW4gbm9tYnJlIGRlIGFyY2hpdm8gcGFyYSBsYSBsZWN0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiTm8gc2UgcHVkbyBvYnRlbmVyIGxhIGluZm9ybWFjacOzbiBkZSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIsKrJXPCuyBlcyB1biBkaXJlY3RvcmlvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIkVsIGFyY2hpdm8gwqslc8K7IGVzIHVuIHNvY2tldC4iCi0KLW1zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgotbXNnc3RyICJGYWxsw7MgZGVzcHXDqXMgZGUgbGFzIGl0ZXJhY2lvbmVzLCBjb21vIHNlIHBpZGnDsy4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJjYXBhY2lkYWRlcyIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgImNhcGFjaWRhZGVzIGRldGVjdGFkYXMgZW4gZWwgZmx1am8iCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtw61uaW1vIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAiZm9yemFyIGxhcyBjYXBhY2lkYWRlcyIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICJmb3J6YXIgbGFzIGNhcGFjaWRhZGVzIHNpbiBoYWNlciB1biDCq3R5cGVmaW5kwrsiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIkVsIGZsdWpvIG5vIGNvbnRpZW5lIGRhdG9zLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiRWwgZmx1am8gbm8gY29udGllbmUgZGF0b3MuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiSW50ZXJmYWNlcyBpbXBsZW1lbnRhZG9zOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgImxlZ2libGUiCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAiZXNjcmliaWJsZSIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAiY29udHJvbGFibGUiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiaW50ZXJjYW1iaWFibGUgZW50cmUgbG9zIGVzdGFkb3MgTlVMTCwgUkVBRFksIFBBVVNFRCBvIFBMQVlJTkciCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICJpbnRlcmNhbWJpYWJsZSBzw7NsbyBlbnRyZSBsb3MgZXN0YWRvcyBOVUxMLCBSRUFEWSBvIFBBVVNFRCIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICJpbnRlcmNhbWJpYWJsZSBzw7NsbyBlbnRyZSBsb3MgZXN0YWRvcyBOVUxMIG8gUkVBRFkiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIkFyY2hpdm9zIGVuIGxhIGxpc3RhIG5lZ3JhOiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIkNvbnRlbyB0b3RhbDoiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkIGFyY2hpdm8gZW4gbGEgbGlzdGEgbmVncmEiCi1tc2dzdHJbMV0gIiVkIGFyY2hpdm9zIGVuIGxhIGxpc3RhIG5lZ3JhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgY29tcGxlbWVudG8iCi1tc2dzdHJbMV0gIiVkIGNvbXBsZW1lbnRvcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCBlbnRyYWRhIGVuIGxhIGxpc3RhIG5lZ3JhIgotbXNnc3RyWzFdICIlZCBlbnRyYWRhcyBlbiBsYSBsaXN0YSBuZWdyYSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgY2FyYWN0ZXLDrXN0aWNhIgotbXNnc3RyWzFdICIlZCBjYXJhY3RlcsOtc3RpY2FzIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJJbXByaW1pciB0b2RvcyBsb3MgZWxlbWVudG9zIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiSW1wcmltaXIgbGlzdGEgZGUgbG9zIGFyY2hpdm9zIGVuIGxhIGxpc3RhIG5lZ3JhIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJJbXByaW1pciB1bmEgbGlzdGEgZGUgY2FyYWN0ZXLDrXN0aWNhcyBhbmFsaXphYmxlcyBwb3IgdW5hIG3DoXF1aW5hIHF1ZSBlbCAiCi0iY29tcGxlbWVudG8gZXNwZWNpZmljYWRvIHByb3BvcmNpb25hLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIMOadGlsIGp1bnRvIGNvbiBtZWNhbmlzbW9zIGRlICIKLSJpbnN0YWxhY2nDs24gZXh0ZXJuYSBhdXRvbcOhdGljYSBkZSBjb21wbGVtZW50b3MuIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICJMaXN0YXIgZWwgY29udGVuaWRvIGRlbCBjb21wbGVtZW50byIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCi1tc2dzdHIgIiIKLSJJbXByaW1pciBsb3MgZXNxdWVtYXMgVVJJIHNvcG9ydGFkb3MsIGNvbiBsb3MgZWxlbWVudG9zIHF1ZSBsb3MgaW1wbGVtZW50YW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gY2FyZ2FyIGVsIGFyY2hpdm8gZGUgY29tcGxlbWVudG86ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIk5vIGV4aXN0ZSBlbCBlbGVtZW50byBvIGNvbXBsZW1lbnRvIMKrJXPCu1xuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiw61uZGljZSBkZSBsYXMgZXN0YWTDrXN0aWNhcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIlNlIG9idHV2byBlbCBtZW5zYWplIG7CuiAldSBkZWwgZWxlbWVudG8gwqslc8K7ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiU2Ugb2J0dXZvIGVsIG1lbnNhamUgbsK6ICV1IGRlIGxhIGNlbGRhIMKrJXM6JXPCuyAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIlNlIHJlY2liacOzIGVsIG1lbnNhamUgbsK6ICV1IGRlbCBvYmpldG8gwqslc8K7ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICJTZSBvYnR1dm8gZWwgbWVuc2FqZSBuwrogJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiU2UgcmVjaWJpw7MgdW4gRU9TIGRlbCBlbGVtZW50byDCqyVzwrsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRVRJUVVFVEEgRU5DT05UUkFEQSAgICAgIDogZW5jb250cmFkYSBwb3IgZWwgZWxlbWVudG8gwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiRVRJUVVFVEEgRU5DT05UUkFEQSAgICAgIDogZW5jb250cmFkYSBwb3IgbGEgY2VsZGEgwqslczolc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRVRJUVVFVEEgRU5DT05UUkFEQSAgICAgIDogZW5jb250cmFkYSBwb3IgZWwgb2JqZXRvIMKrJXPCuy5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJFVElRVUVUQSBFTkNPTlRSQURBXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkVUSVFVRVRBIEVOQ09OVFJBREEgICAgICA6IGVuY29udHJhZGEgcG9yIGVsIGVsZW1lbnRvIMKrJXPCuy5cbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJFVElRVUVUQSBFTkNPTlRSQURBICAgICAgOiBlbmNvbnRyYWRhIHBvciBlbCBvYmpldG8gwqslc8K7LlxuIgotCi0jLCBmdXp6eQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICJFVElRVUVUQSBFTkNPTlRSQURBXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk9STUFDScOTTjpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiQURWRVJURU5DSUE6IGRlbCBlbGVtZW50byAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJQcmVwYXJhZG8sIGVzcGVyYW5kbyBhIGxsZW5hciBlbCBiw7pmZXIgcGFyYSB0ZXJtaW5hcuKAplxuIgotCi0jLCBmdXp6eQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZXBhcmFkbywgZXNwZXJhbmRvIGEgbGxlbmFyIGVsIGLDumZlciBwYXJhIHRlcm1pbmFy4oCmXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgImFsbWFjZW5hbmRvIGVuIGVsIGLDumZlcuKApiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLSJTZSB0ZXJtaW7DsyBkZSBhbG1hY2VuYXIgZW4gZWwgYsO6ZmVyLCBlc3RhYmxlY2llbmRvIGxhIHNlZ21lbnRhY2nDs24gcGFyYSAiCi0iUkVQUk9EVUNJUuKAplxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiYWxtYWNlbmFuZG8gZW4gZWwgYsO6ZmVyLCBlc3RhYmxlY2llbmRvIGxhIHNlZ21lbnRhY2nDs24gYSBQQVVTQeKAplxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiUmVkaXN0cmlidWlyIGxhdGVuY2lh4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAiRXN0YWJsZWNpZW5kbyBlbCBlc3RhZG8gYSAlcyBzZWfDum4gbG8gc29saWNpdMOzICVz4oCmXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJJbnRlcnJ1bXBpcjogcGFyYW5kbyBlbCBjb25kdWN0byDigKZcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAibm8gaGF5IHVuIGVsZW1lbnRvIMKrJXPCuyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIkFEVkVSVEVOQ0lBOiBkZWwgZWxlbWVudG8gJXM6ICVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIkV0aXF1ZXRhcyBkZSBzYWxpZGEgKHRhbWJpw6luIGNvbm9jaWRvcyBjb21vIG1ldGFkYXRvcykiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJJbmZvcm1hY2nDs24gZGUgZXN0YWRvIGRlIGxhIHNhbGlkYSB5IG5vdGlmaWNhY2lvbmVzIGRlIGxhcyBwcm9waWVkYWRlcyIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIk5vIG1vc3RyYXIgbmluZ3VuYSBpbmZvcm1hY2nDs24gZGUgcHJvZ3Jlc28iCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgIk1lbnNhamVzIGRlIHNhbGlkYSIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgIk5vIGluc3RhbGFyIHVuIG1hbmVqYWRvciBwcmVkZXRlcm1pbmFkbyIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiRm9yemFyIEVPUyBlbiBsYXMgZnVlbnRlcyBhbnRlcyBkZSBjZXJyYXIgbGEgdHViZXLDrWEiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIk9idGVuZXIgeSBtb3N0cmFyIGVsIMOtbmRpY2UgZGUgbGFzIGVzdGFkw61zdGljYXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIkVSUk9SOiBubyBzZSBwdWRvIGNvbnN0cnVpciBlbCBjb25kdWN0bzolcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkVSUk9SOiBubyBzZSBwdWRvIGNvbnN0cnVpciBlbCBjb25kdWN0by5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIkFEVkVSVEVOQ0lBOiBjb25kdWN0byBlcnLDs25lbzogJXNcbiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiRVJST1I6IGVsIGVsZW1lbnRvIMKrY29uZHVjdG/CuyBubyBzZSBlbmNvbnRyw7MuXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiRXN0YWJsZWNpZW5kbyBlbCBjb25kdWN0byBhIFBBVVNBIOKAplxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiRVJST1I6IEVsIGNvbmR1Y3RvIG5vIHF1aWVyZSBwYXVzYXJzZS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiRWwgY29uZHVjdG8gZXN0w6Egdml2byB5IG5vIG5lY2VzaXRhIFBSRVBBUkFSU0Ug4oCmXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICJFbCBjb25kdWN0byBlc3TDoSBQUkVQQVLDgU5ET1NFIOKAplxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJFUlJPUjogZWwgY29uZHVjdG8gbm8gcXVpZXJlIHByZXBhcmFyc2UuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIkVsIGNvbmR1Y3RvIGVzdMOhIFBSRVBBUkFETyDigKZcbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiRXN0YWJsZWNpZW5kbyBlbCBjb25kdWN0byBhIFJFUFJPRFVDSUVORE8g4oCmXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkVSUk9SOiBlbCBjb25kdWN0byBubyBxdWllcmUgcmVwcm9kdWNpci5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICJFT1MgYWwgYXBhZ2FyIGFjdGl2YWRvOyBGb3J6YW5kbyBFT1MgZW4gbGEgdHViZXLDrWFcbiIKLQotIywgZnV6enkKLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiRU9TIGFsIGFwYWdhciBhY3RpdmFkbzsgRm9yemFuZG8gRU9TIGVuIGxhIHR1YmVyw61hXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiRXNwZXJhbmRvIGEgRU9T4oCmXG4iCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJFT1MgcmVjaWJpZG86IHBhcmFuZG8gZWwgY29uZHVjdG8g4oCmXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkludGVycnVtcGlyOiBwYXJhbmRvIGVsIGNvbmR1Y3RvIOKAplxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIk9jdXJyacOzIHVuIGVycm9yIGFsIGVzcGVyYXIgYSBFT1NcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICJMYSBlamVjdWNpw7NuIGZpbmFsaXrDsyBkZXNwdcOpcyBkZSAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiRXN0YWJsZWNpYW5kbyBlbCBjb25kdWN0byBhIFBSRVBBUkFETyDigKZcbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiRXN0YWJsZWNpZW5kbyBlbCBjb25kdWN0byBhIE5VTEwg4oCmXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJMaWJlcmFuZG8gbGEgdHViZXLDrWHigKZcbiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiRXJyb3IgaW50ZXJubyBkZSBmbHVqbyBkZSBkYXRvcy4iCi0KLSN+IG1zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgotI34gbXNnc3RyICJObyBzYWNhciBsYSBzYWxpZGEgZGUgbGEgaW5mb3JtYWNpw7NuIGRlIGVzdGFkbyBkZWwgVElQTyIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVElQTzEsVElQTzIs4oCmIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotI34gbXNnc3RyICJlbmxhY2Ugc2luIGVsZW1lbnRvIG9yaWdlbiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgImVubGFjZSBzaW4gZWxlbWVudG8gc3VtaWRlcm8iCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAibm8gZXhpc3RlIHVuIGVsZW1lbnRvIGNvbiBlbCBxdWUgZW5sYXphciBlbCBVUkkgwqslc8K7IgotCi0jfiBtc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotI34gbXNnc3RyICJubyBzZSBwdWRvIGVubGF6YXIgZWwgZWxlbWVudG8gc3VtaWRlcm8gcGFyYSBlbCBVUkkgwqslc8K7IgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiSW1wcmltaXIgbGEgdHJhemEgZGUgYXNpZ25hY2lvbmVzIChzaSBzZSBhY3RpdsOzIGFsIGNvbXBpbGFyKSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJVc286IGdzdC14bWxsYXVuY2ggPGFyY2hpdm8ueG1sPiBbIHByb3BpZWRhZC5kZWwuZWxlbWVudG89dmFsb3Ig4oCmIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiRVJST1I6IGZhbGzDsyBlbCBhbsOhbGlzaXMgZGVsIGFyY2hpdm8geG1sIMKrJXPCuy5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkVSUk9SOiBubyBleGlzdGUgZWwgZWxlbWVudG8gZGUgbml2ZWwgc3VwZXJpb3IgZGUgbGEgc2VnbWVudGFjacOzbiBlbiBlbCAiCi0jfiAiYXJjaGl2byDCqyVzwrsuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJBRFZFUlRFTkNJQTogZW4gZXN0ZSBtb21lbnRvIHPDs2xvIHNlIHNvcG9ydGEgdW4gZWxlbWVudG8gZGUgbml2ZWwgIgotI34gInN1cGVyaW9yLlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgotI34gbXNnc3RyICIiCi0jfiAiRVJST1I6IG5vIHNlIHB1ZG8gYW5hbGl6YXIgZWwgYXJndW1lbnRvICVkIGRlIGxhIGzDrW5lYSBkZSBjb21hbmRvczogJXMuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICJBRFZFUlRFTkNJQTogbm8gc2UgZW5jb250csOzIGVsIGVsZW1lbnRvIGxsYW1hZG8gwqslc8K7LlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiR3VhcmRhciBsYSByZXByZXNlbnRhY2nDs24geG1sIGRlbCBjb25kdWN0byBhIHVuIEFSQ0hJVk8geSBzYWxpciIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkFSQ0hJVk8iCi0KLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIk5vIGluc3RhbGFyIGxvcyBtYW5lamFkb3JlcyBkZSBzZcOxYWxlcyBwYXJhIFNJR1VTUjEgeSBTSUdVU1IyIgotCi0jfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgotI34gbXNnc3RyICJFcnJvciBhbCB2b2x2ZXIgYSBlc2NhbmVhciBlbCByZWdpc3RybyAlczogJXMiCi0KLSN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlcyIKLSN+IG1zZ3N0ciAiRXJyb3IgYWwgdm9sdmVyIGEgZXNjYW5lYXIgZWwgcmVnaXN0cm8gJXMiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuIgotI34gbXNnc3RyICJFcnJvciBpbnRlcm5vIGRlIEdTdHJlYW1lcjogZmFsbMOzIGVsIGNhbWJpbyBkZSBlc3RhZG8uIgotCi0jfiBtc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIGRlc2NyaXB0b3IgXCIlZFwiLiIKLSN+IG1zZ3N0ciAiRXJyb3IgYWwgZXNjcmliaXIgZWwgZGVzY3JpcHRvciBkZWwgYXJjaGl2byDCqyVkwrsuIgotCi0jfiBtc2dpZCAiRmlsZSBkZXNjcmlwdG9yIFwiJWRcIiBpcyBub3QgdmFsaWQuIgotI34gbXNnc3RyICJFbCBkZXNjcmlwdG9yIGRlbCBhcmNoaXZvIMKrJWTCuyBubyBlcyB2w6FsaWRvLiIKLQotI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCi0jfiBtc2dzdHIgIkxJQkVSQU5ETyBlbCBjb25kdWN0byAuLi5cbiIKLQotI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCi0jfiBtc2dzdHIgInViaWNhY2nDs24gb3JpZ2luYWwgZGVsIGFyY2hpdm8gY29tbyBVUkkiCmRpZmYgLS1naXQgYS9wby9ldS5nbW8gYi9wby9ldS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOTIxOTEuLjAwMDAwMDAKLS0tIGEvcG8vZXUuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZXUucG8gYi9wby9ldS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVhODcwYy4uMDAwMDAwMAotLS0gYS9wby9ldS5wbworKysgL2Rldi9udWxsCkBAIC0xLDEzODUgKzAsMCBAQAotIyB0cmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIubWFzdGVyLnBvIHRvIEJhc3F1ZQotIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KLSMKLSMgScOxYWtpIExhcnJhw7FhZ2EgTXVyZ29pdGlvIDxkb290ZW9AZXVza2FsZ251Lm9yZz4sIDIwMDksIDIwMTAuCi0jIE1pa2VsIE9sYXNhZ2FzdGkgVXJhbmdhIDxoZXlfbmVrZW5AbXVuZHVyYXQubmV0PiwgMjAwOSwgMjAxMC4KLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lci0wLjEwLjI2LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMy0yNSAxMzoxMCswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBNaWtlbCBPbGFzYWdhc3RpIFVyYW5nYSA8aGV5X25la2VuQG11bmR1cmF0Lm5ldD5cbiIKLSJMYW5ndWFnZS1UZWFtOiBCYXNxdWUgPHRyYW5zbGF0aW9uLXRlYW0tZXVAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiBldVxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgotIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIkVyYWt1dHNpIEdTdHJlYW1lci1lbiBiZXJ0c2lvYSIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJCaWh1cnR1IGFiaXN1IGd1enRpYWsgZXJyb3JlIGxhcnJpIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIkVyYWt1dHNpIGFyYXp0ZS1rYXRlZ29yaWEgZXJhYmlsZ2FycmlhaywgZXRhIGlydGVuIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIkFyYXp0ZS1tYWlsYSBsZWhlbmV0c2lhLCAxZXRpayAoc29pbGlrIGVycm9yZWFrKSA1ZXJhIChkZW5hKSwgZWRvIDAgIgotIihpcnRlZXJhcmlrIGV6KSIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJNQUlMQSIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSJLYXRlZ29yaWEgYmFrb2l0emFyaSBtYWlsYSBqYWtpbiBiYXQgZXphcnR6ZWtvLCBlcmFiaWxpIGtvbWF6IGJlcmVpeml0YWtvICIKLSJrYXRlZ29yaWFyZW5faXplbmE6bWFpbGEgcGFyZWVuIHplcnJlbmRhLiBBZGliaWRlYTogR1NUX0FVVE9QTFVHOjUsIgotIkdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIlpFUlJFTkRBIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIkRlc2dhaXR1IGtvbG9yZWFrIGFyYXprZXRha28gaXJ0ZWVyZXRhbiIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiRGVzZ2FpdHUgYXJhemtldGEiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiR2FpdHUgcGx1Z2luZW4ga2FyZ2F0emUtZGlhZ25vc3Rpa28geGVoYXR1YSIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIlBsdWdpbmFrIGRpdHV6dGVuIGJpZGUtaXplbmFrLCBiaSBwdW50dXJla2luIGJlcmVpeml0YSIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICJCSURFLUlaRU5BSyIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSJBdXJyZXoga2FyZ2F0emVrbyBwbHVnaW5lbiB6ZXJyZW5kYSBrb21heiBiZXJlaXppdGEsIEdTVF9QTFVHSU5fUEFUSCAiCi0iaW5ndXJ1bWVuLWFsZGFnYWlhbiBnb3JkZXRha28gemVycmVuZGF6IGdhaW4iCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJQTFVHSU5BSyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSJEZXNnYWl0dSBzZWdtZW50YXppby1odXRzZWdpdGVlbiB0cmFucGFrIHBsdWdpbmFrIGthcmdhdHplbiBkaXJlbiBiaXRhcnRlYW4iCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiRGVzZ2FpdHUgZXJyZWdpc3Ryb2EgZWd1bmVyYXR6ZWEiCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICIiCi0iRGVzZ2FpdHUgcHJvemVzdSBsYWd1bnR6YWlsZWEgYWJpYXJhenRlYSBlcnJlZ2lzdHJvYSBlc2thbmVhdHplbiBkZW4gIgotImJpdGFydGVhbiIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJHU3RyZWFtZXItZW4gYXVrZXJhayIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkVyYWt1dHNpIEdTdHJlYW1lci1lbiBhdWtlcmFrIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIkF1a2VyYSBlemV6YWd1bmEiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIk51a2xlby1saWJ1cnV0ZWdpYXJlbiBlcnJvcmUgb3Jva29ycmEgdG9wYXR1IGR1IEdTdHJlYW1lci1layIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyLWVuIGdhcmF0emFpbGVhayBhbGZlcnJlZ2lhayB6aXJlbiBlcnJvcmUgaG9uaSBlcnJvcmUta29kZSBiYXQgIgotImVzbGVpdHpla28uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCi1tc2dzdHIgIkdTdHJlYW1lci1lbiBiYXJuZS1lcnJvcmVhOiBrb2RlYSBleiBkYWdvIGlucGxlbWVudGF0dWEuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyLWVuIGJhcm5lLWVycm9yZWE6IGVnb2VyYXJlbiBhbGRha2V0YWsgaHV0cyBlZ2luIGR1IGV0YSBlbGVtZW50dSAiCi0iYmF0enVrIGh1dHMgZWdpbiBkdXRlIGRhZ29raW9uIGh1dHNlZ2l0ZWFyZW4gYmVycmkgZW1hdGVuIGR1ZW4gZXJyb3JlYXJlbiAiCi0ibWV6dWEgaWdvcnR6ZWFuLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXItZW4gYmFybmUtZXJyb3JlYTogYmV0ZWdhcnJpLWFyYXpvYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyLWVuIGJhcm5lLWVycm9yZWE6IGhhcmktYXJhem9hLiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXItZW4gYmFybmUtZXJyb3JlYTogbmVnb3ppYXppby1hcmF6b2EuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyLWVuIGJhcm5lLWVycm9yZWE6IGdlcnRhZXJhLWFyYXpvYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIkdTdHJlYW1lci1lbiBiYXJuZS1lcnJvcmVhOiBiaWxha2V0YS1hcmF6b2EuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXItZW4gYmFybmUtZXJyb3JlYTogYWhhbG1lbi1hcmF6b2EuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIkdTdHJlYW1lci1lbiBiYXJuZS1lcnJvcmVhOiBldGlrZXRhLWFyYXpvYS4iCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICJHU3RyZWFtZXItZW4gaW5zdGFsYXppb2FyaSBwbHVnaW4gYmF0IGZhbHRhIHphaW8uIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIkdTdHJlYW1lci1lbiBiYXJuZS1lcnJvcmVhOiBlcmxvanUtYXJhem9hLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyLWVuIGZ1bnR6aW9uYWxpdGF0ZSBkZXNnYWl0dSBiYXQgZXJhYmlsdHplbiBzYWlhdHplbiBhcmkgZGEgIgotImFwbGlrYXppbyBoYXUuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJFdXNrYXJyaS1saWJ1cnV0ZWdpYXJlbiBlcnJvcmUgb3Jva29ycmEgdG9wYXR1IGR1IEdTdHJlYW1lci1lay4iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJFemluIGl6YW4gZGEgZXVza2FycmktbGlidXJ1dGVnaWEgaGFzaWVyYXR1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJFemluIGl6YW4gZGEgZXVza2FycmktbGlidXJ1dGVnaWEgaXR4aS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBldXNrYXJyaS1saWJ1cnV0ZWdpYSBrb25maWd1cmF0dS4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJCYWxpYWJpZGUtZXJyb3JlIG9yb2tvcnJhIHRvcGF0dSBkdSBHU3RyZWFtZXItZWsuIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiRXogZGEgYmFsaWFiaWRlYSBhdXJraXR1LiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIkJhbGlhYmlkZWEgbGFucGV0dWEgZGFnbyBlZG8gZXogZGFnbyBlcmFiaWxnYXJyaS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBiYWxpYWJpZGVhIGlyZWtpIGlyYWt1cnR6ZWtvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIGJhbGlhYmlkZWEgaXJla2kgaWRhenRla28uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJFemluIGl6YW4gZGEgYmFsaWFiaWRlYSBpcmVraSBpcmFrdXJ0emVrbyBldGEgaWRhenRla28uIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIGJhbGlhYmlkZWEgaXR4aS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIGJhbGlhYmlkZWEgaXJha3VycmkuIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIGJhbGlhYmlkZWFuIGlkYXR6aS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIGJpbGFrZXRhIGVnaW4gYmFsaWFiaWRlYW4uIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIGJhbGlhYmlkZWFuIHNpbmtyb25pemF0dS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRpcmEgZXphcnBlbmFrIGVza3VyYXR1L2V6YXJyaSBiYWxpYWJpZGV0aWsvYmFsaWFiaWRlYW4uIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJFeiBkYSBsZWt1cmlrIGdlcmF0emVuIGJhbGlhYmlkZWFuLiIKLQotIywgZnV6enkKLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJFeiBkYSBsZWt1cmlrIGdlcmF0emVuIGJhbGlhYmlkZWFuLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAiS29ycm9udGUtZXJyb3JlIG9yb2tvcnJhIHRvcGF0dSBkdSBHU3RyZWFtZXItZWsuIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iRWxlbWVudHVhayBleiBkdSBrb3Jyb250ZSBob3JyZW4gbWFuZWlhdHphaWxlcmlrIGlucGxlbWVudGF0emVuLiBFZ2luICIKLSJlcnJvcmVhcmVuIHR4b3N0ZW5hLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJFemluIGl6YW4gZGEga29ycm9udGUgbW90YSB6ZWhhenR1LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIktvcnJvbnRlIGhvcmkgZXogZGEgZWxlbWVudHUgaG9uZWsgbWFuZWlhdHplbiBkaXR1ZW4ga29ycm9udGVlbiBtb3RhIGJlcmVrb2EuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICJFeiBkYWdvIGtvcnJvbnRlIG1vdGEgaG9yaSBtYW5laWEgZGV6YWtlZW4ga29kZWsgZXJhYmlsZ2FycmlyaWsuIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJFemluIGl6YW4gZGEga29ycm9udGVhIGRlc2tvZGV0dS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBrb3Jyb250ZWEga29kZXR1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJFemluIGl6YW4gZGEga29ycm9udGVhIGRlbXVsdGlwbGV4YXR1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIGtvcnJvbnRlYSBtdWx0aXBsZXhhdHUuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAiS29ycm9udGVhcmVuIGZvcm1hdHVhIGV6IGRhIHp1emVuYS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiS29ycm9udGVhIGVua3JpcHRhdHV0YSBkYWdvIGV0YSBkZXNlbmtyaXB0YXR6ZWEgZXogZGFnbyBvbmFydHV0YS4iCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0iS29ycm9udGVhIGVua3JpcHRhdHV0YSBkYWdvIGV0YSBlemluIGRhIGRlc2Vua3JpcHRhdHUsIGV6IGJhaXRhIGdha28gIgotImVnb2tpcmlrIGVtYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIkV6IGRhZ28gZXJyb3JlLW1lenVyaWsgJXMgZG9tZWludWFyZW50emF0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICJFeiBkYWdvIGVycm9yZS1tZXp1IGVzdGFuZGFycmlrICVzIGRvbWVpbnVhIGV0YSAlZCBrb2RlYSBkdXRlbmVudHphdC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIkhhdXRhdHV0YWtvIGVybG9qdWEgZXppbiBkYSBrYW5hbGl6YXppb2FuIGVyYWJpbGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAiaXplbmJ1cnVhIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAibm9ybWFsZWFuIGVyYWJpbHR6ZW4gZGVuIGl6ZW5idXJ1YSIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJ0aXR1bHVhcmVraWtvIG9yZGVuYXR1IgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAidGl0dWx1YXJlbiBhcmFiZXJhIG9yZGVuYXR6ZWEiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgImFydGlzdGEiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgImdyYWJhemlvYXJlbiBhcmR1cmFkdW5hKGspIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJhcnRpc3RhcmVraWtvIG9yZGVuYXR1IgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJncmFiYXppb2FyZW4gYXJkdXJhZHVuZWtpa28gb3JkZW5hdHplYSIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICJhbGJ1bWEiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAiZGF0dSBoYXVlayBkaXR1ZW4gYWxidW1hIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgImFsYnVtYXJla2lrbyBvcmRlbmF0dSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJkYXR1IGhhdWVrIGRpdHVlbiBhbGJ1bWFyZWtpa28gb3JkZW5hdHpla28iCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgImFsYnVtYSBhcnRpc3RhIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJBbGJ1bSBvc29rbyBhcnRpc3RhLCBiaXN0YXJhdHUgYmVoYXJrbyBsaXR6YXRla2VlbiBiZXphbGEiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgImFsYnVtYSBhcnRpc3RhcmVraWtvIG9yZGVuYXR1IgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICJBbGJ1bSBvc29rbyBhcnRpc3RhcmVuIGFyYWJlcmEgb3JkZW5hdHplYSIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImRhdGEiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdHVhayAoR0RhdGUgZWdpdHVyYSBnaXNhKSBzb3J0dSB6aXJlbmVrbyBkYXRhIgotCi0jLCBmdXp6eQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXRhIgotCi0jLCBmdXp6eQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZGF0dWFrIChHRGF0ZSBlZ2l0dXJhIGdpc2EpIHNvcnR1IHppcmVuZWtvIGRhdGEiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAiZ2VuZXJvYSIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICJkYXR1IGhvcmllayB6ZXIgZ2VuZXJvdGFrb2FrIGRpcmVuIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAiaXJ1emtpbmEiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiZGF0dWVpIGJ1cnV6a28gaXJ1emtpbmEgKHRlc3R1IGxpYnJlYSkiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICJpcnV6a2luIGhlZGF0dWEiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJkYXR1ZW4gaXJ1emtpbmEgZHVlbiB0ZXN0dSBsaWJyZWEsIGdha29hPWJhbGlvYSBlZG8ga2V5W2VuXT1pcnV6a2luYSBmb3JtYWtvYSIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAicGlzdGEtemVuYmFraWEiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAicGlzdGEtemVuYmFraWEsIGJpbGR1bWEgYmF0ZWFuIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgInBpc3RhLWtvcHVydWEiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJwaXN0YS1rb3B1cnVhLCBwaXN0YSBob3JpIGRhdWthbiBiaWxkdW1hbiIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICJkaXNrby16ZW5iYWtpYSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgImRpc2tvLXplbmJha2lhLCBiaWxkdW1hIGJhdGVhbiIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgImRpc2tvLWtvcHVydWEiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAiZGlza28ta29wdXJ1YSwgZGlza28gaG9yaSBkYXVrYW4gYmlsZHVtYW4iCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAia29rYWxla3VhIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJNdWx0aW1lZGlhcmVuIGphdG9ycmlhIFVSSSBnaXNhIChqYXRvcnJpa28gZml0eGF0ZWdpYSBlZG8ga29ycm9udGVhIGRhZ29lbiAiCi0ia29rYWxla3VhKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICJvcnJpYWxkZSBuYWd1c2lhIgotCi1tc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKLW1zZ3N0ciAiIgotIk11bHRpbWVkaWEgaG9uZW4gb3JyaWFsZGUgbmFndXNpYSAoYWRpYi4gYXJ0aXN0YXJlbiBlZG8gZmlsbWFyZW4gd2ViZ3VuZWEpIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgImRlc2tyaWJhcGVuYSIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiZGF0dWVuIGVkdWtpYSBkZXNrcmliYXR6ZW4gZHVlbiB0ZXN0dSBsYWJ1cnJhIgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAiYmVydHNpb2EiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAiZGF0dSBob3JpZW4gYmVydHNpb2EiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0iTmF6aW9hcnRla28gZXN0YW5kYXJyZWFuIG9pbmFycml0dXRha28gZ3JhYmF0emUta29kZWEgKElTUkMpIC0gaWt1cyBodHRwOi8vIgotInd3dy5pZnBpLm9yZy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiZXJha3VuZGVhIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJjb3B5cmlnaHRhIgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiZGF0dWVuIGVnaWxlLWVza3ViaWRlZWkgYnVydXprbyBpbmZvcm1hemlvYSIKLQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgImNvcHlyaWdodGFyZW4gVVJJYSIKLQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiZGF0dWVuIGVnaWxlLWVza3ViaWRlZWkgYnVydXprbyBpbmZvcm1hemlvYSBhdHppdHpla28gVVJJYSIKLQotIywgZnV6enkKLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJrb2RldHphaWxlYSIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgImtvbnRha3R1YSIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImtvbnRha3R1YXJpIGJ1cnV6a28gaW5mb3JtYXppb2EiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaXplbnR6aWEiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImRhdHVlbiBsaXplbnR6aWEiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAibGl6ZW50emlhcmVuIFVSSWEiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgImRhdHVlbiBsaXplbnR6aWEgYXR6aXR6ZWtvIFVSSWEiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgImludGVycHJldGVhIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgImludGVycHJldGF0emVuIGFyaSBkKGlyKWVuYShrKSIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJrb25wb3NpdG9yZWEiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgImdyYWJhemlvYSBrb25wb3NhdHUgenVlbiBhcmR1cmFkdW5hIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJpcmF1cGVuYSIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJpcmF1cGVuYSBHU3RyZWFtZXItZW4gZGVuYm9yYS11bml0YXRlZXRhbiAobmFub3NlZ3VuZG9haykiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAia29kZWthIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJkYXR1YWsgemVyIGtvZGVrZXRhbiBnb3JkZWFrIGRhdWRlbiIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJiaWRlby1rb2Rla2EiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImJpZGVvLWRhdHVhayB6ZXIga29kZWtldGFuIGdvcmRlYWsgZGF1ZGVuIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImF1ZGlvLWtvZGVrYSIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiYXVkaW8tZGF0dWFrIHplciBrb2Rla2V0YW4gZ29yZGVhayBkYXVkZW4iCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAiYXpwaXRpdHVsdWFyZW4ga29kZWthIgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJhenBpdGl0dWx1YWsgemVyIGtvZGVrZXRhbiBnb3JkZWFrIGRhdWRlbiIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgIm9udHppYXJlbiBmb3JtYXR1YSIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJkYXR1YWsgemVpbiBvbnR6aSBmb3JtYXR1YW4gZ29yZGVhayBkYXVkZW4iCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJiaXQtZW1hcmlhIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiYml0LWVtYXJpIHplaGF0emEgZWRvIGJhdGV6IGJlc3Rla29hIChiaXQvcykiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgImJpdC1lbWFyaSBpemVuZGF0dWEiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJiaXQtZW1hcmkgaXplbmRhdHVhIChiaXQvcykiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgImd1dHhpZW5la28gYml0LWVtYXJpYSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgImd1dHhpZW5la28gYml0LWVtYXJpIGl6ZW5kYXR1YSAoYml0L3MpIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJnZWhpZW5lemtvIGJpdC1lbWFyaWEiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJnZWhpZW5lemtvIGJpdC1lbWFyaWEgKGJpdC9zKSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImtvZGV0emFpbGVhIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAia29ycm9udGUgaGF1IGtvZGV0emVrbyBlcmFiaWxpIGRlbiBrb2RldHphaWxlYSIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAia29kZXR6YWlsZWFyZW4gYmVydHNpb2EiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJrb3Jyb250ZSBoYXUga29kZXR6ZWtvIGVyYWJpbGkgZGVuIGtvZGV0emFpbGVhcmVuIGJlcnRzaW9hIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJzZXJpZWtvYSIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgInBpc3RhcmVuIHNlcmllLXplbmJha2lhIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICJyZXBsYXlnYWluIHBpc3RhLWlyYWJhemlhIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAicGlzdGEtaXJhYmF6aWEgKGRiKSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAicmVwbGF5Z2FpbiBwaXN0YS1nYWlsdXJyYSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJwaXN0YXJlbiBnYWlsdXJyYSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAicmVwbGF5Z2FpbiBhbGJ1bS1pcmFiYXppYSIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgImFsYnVtLWlyYWJhemlhIChkYikiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgInJlcGxheWdhaW4gYWxidW0tZ2FpbHVycmEiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAiYWxidW1hcmVuIGdhaWx1cnJhIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgInJlcGxheWdhaW4gZXJyZWZlcmVudHppYS1tYWlsYSIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgInBpc3RhcmVuIGV0YSBhbGJ1bWFyZW4gaXJhYmF6aS1iYWxpb2VuIGVycmVmZXJlbnR6aWEtbWFpbGEiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJoaXprdW50emEta29kZWEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAia29ycm9udGUgaG9uZW4gaGl6a3VudHphLWtvZGVhLCBJU08tNjM5LTFlbiBhcmFiZXJhIgotCi0jLCBmdXp6eQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgImhpemt1bnR6YS1rb2RlYSIKLQotbXNnaWQgImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAiaXJ1ZGlhIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAia29ycm9udGUgaG9uaSBsb3R1dGFrbyBpcnVkaWEiCi0KLSMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQotbXNnaWQgInByZXZpZXcgaW1hZ2UiCi1tc2dzdHIgImF1cnJlYmlzdGEtaXJ1ZGlhIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJrb3Jyb250ZSBob25pIGxvdHV0YWtvIGF1cnJlYmlzdGEtaXJ1ZGlhIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAiZXJhbnNraW5hIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAia29ycm9udGUgaG9uaSBlcmFudHNpdGFrbyBmaXR4YXRlZ2lhIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiZ29scGUgbWludXR1a28iCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAibWludXR1a28gZ29scGUga29wdXJ1YSwgYXVkaW9hbiIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICJnYWtvLWhpdHphayIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICJlZHVraWEgZGVza3JpYmF0emVuIGR1dGVuIGtvbWF6IGJlcmVpenR1dGFrbyBnYWtvLWhpdHphayIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gaXplbmEiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotIm11bHRpbWVkaWEgZ3JhYmF0dSBlZG8gZWtvaXp0dSBkZW4ga29rYWxla3VhcmVuIGF6YWxwZW5hIGdpemFraW9rIGlyYWt1cnR6ZWtvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gbGF0aXR1ZGVhIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0ibXVsdGltZWRpYSBncmFiYXR1IGVkbyBla29penR1IGRlbiBsZWt1YXJlbiBnZW9sb2thbGl6YXppb2FyZW4gbGF0aXR1ZGVhICIKLSJncmFkdXRhbiBXR1M4NCBlc3RhbmRhcnJhcmVuIGFyYWJlcmEgKHplcm8gZWt1YXRvcmVhIGRhLCBiYWxpbyBuZWdhdGlib2FrICIKLSJoZWdvYWxkZWtvIGxhdGl0dWRlYWsgZGlyYSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gbG9uZ2l0dWRlYSIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSJtdWx0aW1lZGlhIGdyYWJhdHUgZWRvIGVrb2l6dHUgZGVuIGxla3VhcmVuIGdlb2xva2FsaXphemlvYXJlbiBsb25naXR1ZGVhICIKLSJncmFkdXRhbiBXR1M4NCBlc3RhbmRhcnJhcmVuIGFyYWJlcmEgKHplcm8gbWVyaWRpYW5vIG5hZ3VzaWEgZGEgQnJpdGFpbmlhICIKLSJIYW5kaWtvIEdyZWVud2ljaC1lbiwgYmFsaW8gbmVnYXRpYm9hayBtZW5kZWJhbGRla28gbG9uZ2l0dWRlYWsgZGlyYSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gYWx0aXR1ZGVhIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotIm11bHRpbWVkaWEgZ3JhYmF0dSBlZG8gZWtvaXp0dSBkZW4gbGVrdWFyZW4gZ2VvbG9rYWxpemF6aW9hcmVuIGFsdGl0dWRlYSAiCi0ibWV0cm90YW4gV0dTODQgZXN0YW5kYXJyYXJlbiBhcmFiZXJhICh6ZXJvIGJhdGV6IGJlc3Rla28gaXRzYXNvYXJlbiBtYWlsYSBkYSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiZ2VvbG9rYWxpemF6aW9hcmVuIGVzdGF0dWEiCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAibXVsZGltZWRpYSBncmFiYXR1IGVkbyBla29penR1IGRlbiBlc3RhdHVhIChpbmdlbGVzZXprbyBpemVuYSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiZ2VvbG9rYWxpemF6aW9hcmVuIGhlcnJpYSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJtdWxkaW1lZGlhIGdyYWJhdHUgZWRvIGVrb2l6dHUgZGVuIGhlcnJpYSAoaW5nZWxlc2V6a28gaXplbmEpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gYXpwaWtva2FsZWt1YSIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAibXVsZGltZWRpYSBncmFiYXR1IGVkbyBla29penR1IGRlbiBoZXJyaWtvIGtva2FsZWt1IGJhdCAoYWRpYiwgYXV6b2EpIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gaXplbmEiCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAiZ2VvbG9rYWxpemF6aW9hcmVuIGxvbmdpdHVkZWEiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gYWx0aXR1ZGVhIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJnZW9sb2thbGl6YXppb2FyZW4gYWx0aXR1ZGVhIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAiaWt1c2tpenVuYXJlbiBpemVuYSIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIlRiL3BvZGNhc3Qvc2VyaWVlbiBpa3Vza2l6dW5hcmVuIGl6ZW5hIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICJpa3Vza2l6dW5hcmVuIG9yZGVuYXR6ZS1pemVuYSIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiVGIvcG9kY2FzdC9zZXJpZWVuIGlrdXNraXp1bmFyZW4gaXplbmEsIG9yZGVuYXR6ZWtvIGhlbGJ1cnVhcmVraW4iCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAicGFzYXJ0ZWFyZW4gemVuYmFraWEiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiRGVuYm9yYWxkaWtvIHBhc2FydGVhcmVuIHplbmJha2lhIgotCi1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAiZGVuYm9yYWxkaWFyZW4gemVuYmFraWEiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiSWt1c2tpenVuYXJlbiBkZW5ib3JhbGRpYXJlbiB6ZW5iYWtpYSIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAibGlyaWthIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICJNdWx0aW1lZGlhcmVuIGxpcmlrYSwgYmF0aWsgYmF0IGFiZXN0aWV0YW4gZXJhYmlsaXRhIgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgImtvbnBvc2l0b3JlYXJlbiBvcmRlbmF0emUtaXplbmEiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJncmFiYXppb2FyZW4ga29ucG9zYXR1IHp1dGVuIHBlcnRzb25haywgb3JkZW5hdHpla28gaGVsYnVydWFyZWtpbiIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICJ0YWxkZWthdHplYSIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotIlplcmlrdXNpYSBkaXR1enRlbiBwaXN0YWsgZWxrYXJ0emVuIGRpdHUsIGtvbnR6ZXJ0dSBiYXRla28gemF0aSBkZXNiZXJkaW5hayAiCi0iYmV6YWxhLiBQaXN0YSBiYXQgYmFpbm8gZ2VoaWFnbyBkYSwgYmFpbmEgZXogZGEgaXJpc3RlbiBhbGJ1bSBiYXRlbiB0YW1haW5hcmEiCi0KLW1zZ2lkICJ1c2VyIHJhdGluZyIKLW1zZ3N0ciAiZXJhYmlsdHphaWxlYXJlbiBiYWxvcmF6aW9hIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJFcmFiaWx0emFpbGUgYmF0ZWsgZW1hbmRha28gYmFsb3JhemlvYS4gUHVudHVhemlvYSB6ZW5iYXQgZXRhIGFsdHVhZ29hIGl6YW4sICIKLSJhcmUgZXRhIGdlaGlhZ28gYXRzZWdpbiB6YWlvIGVyYWJpbHR6YWlsZWFyaSBtdWx0aW1lZGlhIGhhdSIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJrb3Jyb250ZSBoYXUga29kZXR6ZWtvIGVyYWJpbGkgZGVuIGtvZGV0emFpbGVhcmVuIGJlcnRzaW9hIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJrb3Jyb250ZSBoYXUga29kZXR6ZWtvIGVyYWJpbGkgZGVuIGtvZGV0emFpbGVhcmVuIGJlcnRzaW9hIgotCi0jLCBmdXp6eQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgImdlb2xva2FsaXphemlvYXJlbiBpemVuYSIKLQotIywgZnV6enkKLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgImtvcnJvbnRlIGhhdSBrb2RldHpla28gZXJhYmlsaSBkZW4ga29kZXR6YWlsZWFyZW4gYmVydHNpb2EiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkVSUk9SRUE6ICVzIGVsZW1lbnR1YXJlbmE6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iQXJhemtldGEtaW5mb3JtYXppbyBnZWhpZ2FycmlhOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImV6IGRhZ28gXCIlc1wiIHByb3BpZXRhdGVyaWsgXCIlc1wiIGVsZW1lbnR1YW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICIiCi0iZXppbiBpemFuIGRhIGV6YXJyaSBcIiUyJHNcIiBlbGVtZW50dWtvIFwiJTEkc1wiIHByb3BpZXRhdGVhIGhvbmVsYTogXCIlMyRzXCIiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJlemluIGl6YW4gZGEgJXMgZXN0ZWthdHUgaG9uYTogJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImV6IGRhZ28gXCIlc1wiIGVsZW1lbnR1YSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAiZXppbiBpemFuIGRhIFwiJXNcIiBlZHVraWVyYSBhbmFsaXphdHUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJleiBkYSBrb2xla3RvcmUtZWxlbWVudHVyaWsgZXphcnJpIFwiJXNcIiBVUklhcmVudHphdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiZXogZGEgaXR1cmJ1cnUtZWxlbWVudHVyaWsgZXphcnJpIFwiJXNcIiBVUklhcmVudHphdCIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiXCIlc1wiIHplaGF6dHV0YWtvIG9udHppIGh1dHNhLCBleiBkYSBvbmFydHplbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJleiBkYWdvIFwiJXNcIiBvbnR6aXJpaywgc2FsdGF0emVuIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgImV6IGRpcmEgb25hcnR6ZW4ga2FuYWxpemF6aW8gaHV0c2FrIgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIkJ1ZmZlciBhc2tvIGphcmVnaXRlbiBhcmkgZGlyYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIkRhdHUtZmx1eHVhcmVuIGJhcm5lLWFyYXpvYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJEYXR1LWZsdXh1YXJlbiBiYXJuZS1lcnJvcmVhLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiRXJsb2p1YXJlbiBiYXJuZS1lcnJvcmVhLiIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIklyYWdhenBlbi1haGFsbWVuYSIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iTXVnYXR1IG9uYXIgZGFpdGV6a2VlbiBhaGFsbWVuYWsgKE5VTExlayBFRE9aRVIgYWRpZXJhenRlbiBkdSkuIFByb3BpZXRhdGUgIgotImhvcmkgZXphcnR6ZW4gYmFkYSwgZW1hbmRha28gR3N0Q2FwcyBvYmpla3R1YXJlbiBlcnJlZmVyZW50emlhIGhhcnR6ZW4gZHUuIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiRXogZGEgYWxkaSBiYXRlcmFrbyBkaXJla3RvcmlvcmlrIHplaGF6dHUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBcIiVzXCIgYWxkaSBiYXRlcmFrbyBmaXR4YXRlZ2lhIHNvcnR1LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBcIiVzXCIgZml0eGF0ZWdpYSBpcmVraSBpcmFrdXJ0emVrby4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiRXJyb3JlYSBnZXJ0YXR1IGRhIFwiJXNcIiBmaXR4YXRlZ2lhbiBpZGF6dGVhbi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiRXogZGEgZml0eGF0ZWdpLWl6ZW5payB6ZWhhenR1IGlkYXp0ZWtvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBcIiVzXCIgZml0eGF0ZWdpYSBpcmVraSBpZGF6dGVrby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkVycm9yZWEgZ2VydGF0dSBkYSBcIiVzXCIgZml0eGF0ZWdpYSBpeHRlYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcnJvcmVhIGdlcnRhdHUgZGEgXCIlc1wiIGZpdHhhdGVnaWFuIGJpbGFrZXRhIGVnaXRlYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcnJvcmVhIGdlcnRhdHUgZGEgXCIlc1wiIGZpdHhhdGVnaWFuIGlkYXp0ZWFuLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJFeiBkYSBmaXR4YXRlZ2ktaXplbmlrIHplaGF6dHUgaXJha3VydHpla28uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICJFemluIGl6YW4gZGEgXCIlc1wiKGUpa28gaW5mb3JtYXppb2EgZXNrdXJhdHUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIlwiJXNcIiBkaXJla3RvcmlvYSBkYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJcIiVzXCIgZml0eGF0ZWdpYSBzb2NrZXQtYSBkYS4iCi0KLW1zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgotbXNnc3RyICJIdXRzIGVnaW4gZHUgZXNrYXR1dGFrbyBpdGVyYXppb2FrIGVnaW4gb25kb3Jlbi4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJhaGFsbWVuYWsiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJhaGFsbWVuYWsgZGV0ZWt0YXR1IGRpcmEga29ycm9udGVhbiIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgImd1dHhpZW5la29hIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAiZGVycmlnb3J0dSBnYWl0YXN1bmFrIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgImRlcnJpZ29ydHUgZ2FpdGFzdW5hayBtb3RhcmVuIGJpbGFrZXRhIGxhbmR1IGdhYmUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIktvcnJvbnRlYWsgZXogZHUgZGF0dXJpay4iCi0KLW1zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCi1tc2dzdHIgIktvcnJvbnRlYWsgZXogZHUgZGF0dXJpay4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICJJbnBsZW1lbnRhdHV0YWtvIGludGVyZmF6ZWFrOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgImlyYWt1ciBkYWl0ZWtlZW5hIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgImlkYXR6IGRhaXRla2VlbmEiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgImtvbnRyb2xhIGRhaXRla2VlbmEiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiWmVycmVuZGEgYmVsdHpla28gZml0eGF0ZWdpYWs6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAiS29wdXJ1IG9zb2E6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiemVycmVuZGEgYmVsdHpla28gZml0eGF0ZWdpICVkIgotbXNnc3RyWzFdICJ6ZXJyZW5kYSBiZWx0emVrbyAlZCBmaXR4YXRlZ2kiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCBwbHVnaW4iCi1tc2dzdHJbMV0gIiVkIHBsdWdpbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICJ6ZXJyZW5kYSBiZWx0emVrbyBzYXJyZXJhICVkIgotbXNnc3RyWzFdICJ6ZXJyZW5kYSBiZWx0emVrbyAlZCBzYXJyZXJhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCBlZ2luYmlkZSIKLW1zZ3N0clsxXSAiJWQgZWdpbmJpZGUiCi0KLW1zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCi1tc2dzdHIgIklucHJpbWF0dSBlbGVtZW50dSBndXp0aWFrIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiRXJha3V0c2kgemVycmVuZGEgYmVsdHpla28gZml0eGF0ZWdpZW4gemVycmVuZGEiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotIkVyYWt1dHNpIHplaGF6dHV0YWtvIHBsdWdpbmFyZW4gZWdpbmJpZGUtemVycmVuZGEsIG1ha2luYSBiYXRlayBhbmFsaXphdHpla28gIgotIm1vZHVrb2EuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFsaWFnYXJyaWEgZGEga2FucG9rbyBwbHVnaW5hayAiCi0iYXV0b21hdGlrb2tpIGluc3RhbGF0emVrbyBtZWthbmlzbW9lbiBrb25leGlvZXRhbiIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiWmVycmVuZGF0dSBwbHVnaW5lbiBlZHVraWFrIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotIkVyYWt1dHNpIG9uYXJ0dXRha28gVVJJIGVza2VtYWssIGhhaWVrIGlucGxlbWVudGF0emVuIGRpdHV6dGVuIGVsZW1lbnR1ZWtpbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIHBsdWdpbiBmaXR4YXRlZ2lhIGthcmdhdHU6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIiclcycgZWxlbWVudHVhIGVkbyBwbHVnaW5hIGV6IGRhIGV4aXN0aXR6ZW5cbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIlwiJTIkc1wiICglMyRzKSBlbGVtZW50dWFyZW4gJTEkdS4gbWV6dWEgamFzbyBkYTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICJcIiUyJHM6JTMkc1wiICglNCRzKSBwbGF0YWZvcm1hcmVuICUxJHUuIG1lenVhIGphc28gZGE6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiXCIlMiRzXCIgKCUzJHMpIG9iamVrdHVhcmVuICUxJHUuIG1lenVhIGphc28gZGE6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICIldS4gKCVzKSBtZXp1YSBqYXNvIGRhOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJcIiVzXCIgZWxlbWVudHVhcmVuIEVPUyBiYXQgamFzbyBkYS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJFVElLRVRBIEFVUktJVFUgREE6IFwiJXNcIiBlbGVtZW50dWFrIGF1cmtpdHUgZHUuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICJFVElLRVRBIEFVUktJVFUgREE6IFwiJXM6JXNcIiBwbGF0YWZvcm1hayBhdXJraXR1IGR1LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRVRJS0VUQSBBVVJLSVRVIERBOiBcIiVzXCIgb2JqZWt0dWFrIGF1cmtpdHUgZHUuXG4iCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAiRVRJS0VUQSBBVVJLSVRVIERBXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkVUSUtFVEEgQVVSS0lUVSBEQTogXCIlc1wiIGVsZW1lbnR1YWsgYXVya2l0dSBkdS5cbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJFVElLRVRBIEFVUktJVFUgREE6IFwiJXNcIiBvYmpla3R1YWsgYXVya2l0dSBkdS5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiRVRJS0VUQSBBVVJLSVRVIERBXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk9STUFaSU9BOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJBQklTVUEsICAlcyBlbGVtZW50dWFyZW5hOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZXN0YXR1IGRhOyBidWZmZXJyZXJhdHplbiBidWthdHUgemFpbi4uLlxuIgotCi0jLCBmdXp6eQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZXN0YXR1IGRhOyBidWZmZXJyZXJhdHplbiBidWthdHUgemFpbi4uLlxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICJidWZmZXJyZXJhdHplbi4uLiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLSJCdWZmZXJyZXJhdHUgZGE7IGthbmFsaXphemlvYXJlbiBlemFycGVuYSBFUlJFUFJPRFVaSVRaRUEgZ2lzYSBqYXJ0emVuLi4uIFxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiQnVmZmVycmVyYXR6ZW47IGthbmFsaXphemlvYSBQQVVTQVJBWklBIGdpc2EgZXphcnR6ZW4uLi4gXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICJMYXRlbnR6aWEgYmlyYmFuYXR6ZW4uLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJFZ29lcmEgJXMoZSlyYSBlemFydHplbiAlcyhlKWsgZXNrYXR1IGJlemFsYS4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiRXRlbjogS2FuYWxpemF6aW9hIGdlbGRpdHplbi4uLiBcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiZXogZGFnbyBcIiVzXCIgZWxlbWVudHVhIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiQUJJU1VBLCAgJXMgZWxlbWVudHVhcmVuYTogJXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiRXJha3V0c2kgZXRpa2V0YWsgKG1ldGFkYXR1IGdpc2EgZXJlIGV6YWd1dHplbiBkaXJlbmFrKSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIkVyYWt1dHNpIGVnb2VyYXJpIGJ1cnV6a28gaW5mb3JtYXppb2EgZXRhIHByb3BpZXRhdGVlbiBqYWtpbmFyYXpwZW5hayIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIkV6IGVyYWt1dHNpIGlub2xha28gamFycmFpcGVuZW4gaW5mb3JtYXppb3JpayIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiRXJha3V0c2kgbWV6dWFrIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiRXogaW5zdGFsYXR1IGFrYXRzLW1hbmVpYXR6YWlsZXJpayIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiRGVycmlnb3J0dSBFT1MgaXR1cmJ1cnVldGFuIGthbmFsaXphemlvYSBpdHphbGkgYXVycmV0aWsiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRVJST1JFQTogZXppbiBpemFuIGRhIGthbmFsaXphemlvYSBlcmFpa2k6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiRVJST1JFQTogZXppbiBpemFuIGRhIGthbmFsaXphemlvYSBlcmFpa2kuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJBQklTVUEsICBrYW5hbGl6YXppbyBha2FzdHVuYTogJXNcbiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiRVJST1JFQTogZXppbiBpemFuIGRhICdrYW5hbGl6YXppbycgZWxlbWVudHVhIGF1cmtpdHUuXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiS2FuYWxpemF6aW9hIFBBVVNBUkFaSUEgZ2lzYSBlemFydHplbi4uLiBcbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkVSUk9SRUE6IGV6aW4gZGEga2FuYWxpemF6aW9hIHBhdXNhcmF6aS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiS2FuYWxpemF6aW9hIGFrdGlibyBkYWdvIGV0YSBleiBkdSBQUkVTVEFUVSBiZWhhcnJpay4uLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiS2FuYWxpemF6aW9hIFBSRVNUQVRaRU4gYXJpIGRhLi4uIFxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJFUlJPUkVBOiBlemluIGRhIGthbmFsaXphemlvYSBwcmVzdGF0dS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiS2FuYWxpemF6aW9hIFBSRVNUQVRVQSBkYWdvLi4uIFxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJLYW5hbGl6YXppb2EgRVJSRVBST0RVWklUWkVBIGdpc2EgZXphcnR6ZW4uLi4gXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkVSUk9SRUE6IGV6aW4gZGEga2FuYWxpemF6aW9hIGVycmVwcm9kdXppdHUuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiRU9TIGl0emFsdHplYW4gZ2FpdHV0YSAtLSBFT1MgZGVycmlnb3J0emVuIGthbmFsaXphemlvYW5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiRU9TIGl0emFsdHplYW4gZ2FpdHV0YSAtLSBFT1MgZGVycmlnb3J0emVuIGthbmFsaXphemlvYW5cbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICJFT1NyZW4gemFpbi4uLlxuIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiRU9TYSBqYXNvdGEgLSBrYW5hbGl6YXppb2EgZ2VsZGl0emVuLi4uXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkV0ZW46IEthbmFsaXphemlvYSBnZWxkaXR6ZW4uLi4gXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiRXJyb3JlYSBnZXJ0YXR1IGRhIEVPU3JlbiB6YWluIGVnb3RlYW5cbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICJFcnJlcHJvZHVremlvYSBhbWFpdHUgZWdpbiBkYSAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiS2FuYWxpemF6aW9hIFBSRVNUIGdpc2EgZXphcnR6ZW4uLi4gXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIkthbmFsaXphemlvYSBOVUxVQSBnaXNhIGV6YXJ0emVuLi4uIFxuIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiS2FuYWxpemF6aW9hIGFza2F0emVuLi4uXG4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkRhdHUta29ycm9udGVhcmVuIGJhcm5lLWVycm9yZWEuIgotCi0jfiBtc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKLSN+IG1zZ3N0ciAiRXogZXJha3V0c2kgTU9UQSBoYXVldGFrbyBlZ29lcmEtaW5mb3JtYXppb2E6IgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICIxLk1PVEEsIDIuTU9UQS4uLiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAiaXR1cmJ1cnUtZWxlbWVudHVyaWsgZ2FiZWtvIGVzdGVrYSIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgImtvbGVrdG9yZS1lbGVtZW50dXJpayBnYWJla28gZXN0ZWthIgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgImV6IGRhZ28gZWxlbWVudHVyaWsgXCIlc1wiIFVSSWEgaG9uYSBlc3Rla2F0emVrbzoiCi0KLSN+IG1zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0jfiBtc2dzdHIgImV6aW4gaXphbiBkYSBrb2xla3RvcmUtZWxlbWVudHVhIGVzdGVrYXR1IFwiJXNcIiBVUklhcmVudHphdCIKLQotI34gbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCi0jfiBtc2dzdHIgIklucHJpbWF0dSBlc2xlaXBlbmVuIHNlZ2ltZW5kdWEgKGtvbnBpbGF0emVhbiBnYWl0dSBiYWRhKSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJFcmFiaWxlcmE6IGdzdC14bWxsYXVuY2ggPGZpdHhhdGVnaWEueG1sPiBbIGVsZW1lbnR1YS4iCi0jfiAicHJvcGlldGF0ZWE9YmFsaW9hLi4uIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiRVJST1JFQTogaHV0cyBlZ2luIGR1ICclcycgeG1sIGZpdHhhdGVnaWEgYW5hbGl6YXR6ZWFuLlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgotI34gbXNnc3RyICIiCi0jfiAiRVJST1JFQTogZXogZGFnbyBnb2ktbWFpbGFrbyBrYW5hbGl6YXppby1lbGVtZW50dXJpayAnJXMnIGZpdHhhdGVnaWFuLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICJLT05UVVo6IGdvaS1tYWlsYWtvIGVsZW1lbnR1IGJhdCBiYWthcnJhIG9uYXJ0emVuIGRhIG9yYWluZ29hbi5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkVSUk9SRUE6IGV6aW4gaXphbiBkYSBrb21hbmRvLWxlcnJva28gJWQuIGFyZ3VtZW50dWEgYW5hbGl6YXR1OiAlcy5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCi0jfiBtc2dzdHIgIktPTlRVWjogZXogZGEgYXVya2l0dSAnJXMnIGl6ZW5la28gZWxlbWVudHVhLlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiR29yZGUga2FuYWxpemF6aW9lbiB4bWwgYWRpZXJhenBlbmEgRklUWEFURUdJYW4gZXRhIGlydGVuIgotCi0jfiBtc2dpZCAiRklMRSIKLSN+IG1zZ3N0ciAiRklUWEFURUdJQSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIkV6IGluc3RhbGF0dSBha2F0cy1tYW5laWF0emFpbGVyaWsiCmRpZmYgLS1naXQgYS9wby9maS5nbW8gYi9wby9maS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMWM4NzIuLjAwMDAwMDAKLS0tIGEvcG8vZmkuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZmkucG8gYi9wby9maS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQxYjE2Zi4uMDAwMDAwMAotLS0gYS9wby9maS5wbworKysgL2Rldi9udWxsCkBAIC0xLDE0NTggKzAsMCBAQAotIyBGaW5uaXNoIHRyYW5zbGF0aW9ucyBmb3IgZ3N0cmVhbWVyIHBhY2thZ2UuCi0jIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNy0yMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCi0jIFRvbW1pIFZhaW5pa2FpbmVuIDxUb21taS5WYWluaWthaW5lbkBpa2kuZmk+LCAyMDA1LCAyMDA3LTIwMTAuCi0jCi0jIFdvcmRzOgotIwotIyBiaW4gKGEgY29udGFpbmVyIGVsZW1lbnQpID0gc8OkaWxpw7YKLSMgc2luayA9IG5pZWx1Ci0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC4xMC4zMC4zXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTEtMTcgMjM6MTArMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogVG9tbWkgVmFpbmlrYWluZW4gPFRvbW1pLlZhaW5pa2FpbmVuQGlraS5maT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBGaW5uaXNoIDx0cmFuc2xhdGlvbi10ZWFtLWZpQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogZmlcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiTsOkeXTDpCBHU3RyZWFtZXJpbiB2ZXJzaW8iCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiVGVlIGthaWtpc3RhIHZhcm9pdHVrc2lzdGEgdmFrYXZpYSIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJUdWxvc3RhIHNhYXRhdmlsbGEgb2xldmF0IHZpYW5ldHNpbnTDpGx1b2thdCBqYSBwb2lzdHUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iT2xldHVzdmlhbmV0c2ludMOkdGFzbyB2w6RsaWx0w6QgMTpzdMOkICh2YWluIHZpcmhlZXQpIDU6ZWVuIChrYWlra2kpIHRhaSAwIGVpICIKLSJ0dWxvc3RldHRhIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIlRBU08iCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iUGlsa3VpbiBlcm90ZWx0dSBsdWV0dGVsbyBsdW9ra2FuaW1pOnRhc28tcGFyZWlzdGEsIGpvaWxsYSBhc2V0ZXRhYW4gdGlldHl0ICIKLSJ0YXNvdCB5a3NpdHTDpGlzaWxsZSBsdW9raWxsZS4gRXNpbWVya2tpOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMVUVUVEVMTyIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJFaSB2w6RyaXRldHR5asOkIHZpYW5ldHNpbnTDpHRpZXRvamEiCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIkVpIHZpYW5ldHNpbnTDpMOkIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIkvDpHl0w6QgbW9uaXNhbmFpc3RhIGxpaXTDpG5uw6Rpc3RlbiBsYXRhdXNkaWFnbm9zdGlpa2thIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiS2Frc29pc3Bpc3RlaW4gZXJvdGVsbHV0IHBvbHV0IGxpaXTDpG5uw6Rpc2lpbiIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICJQT0xVVCIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSJQaWxrdWluIGVyb3RlbHR1IGx1ZXR0ZWxvIGxpaXTDpG5uw6Rpc2lzdMOkLCBqb3RrYSBlc2lsYWRhdGFhbiAiCi0ieW1ww6RyaXN0w7ZtdXV0dHVqYXNzYSBHU1RfUExVR0lOX1BBVEggbHVldGVsdHVqZW4gbGlzw6Rrc2kiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJMSUlUw4ROTsOESVNFVCIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIkVpIG11aXN0aWFsdWVlbiB5bGl0eWtzZW4gdGFya2thaWx1YSBsaWl0w6RubsOkaXN0ZW4gbGF0YXVrc2VuIGFpa2FuYSIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICLDhGzDpCBww6Rpdml0w6QgcmVraXN0ZXJpw6QiCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICLDhGzDpCBrw6R5bm5pc3TDpCBhcHVwcm9zZXNzaWEgcmVraXN0ZXJpbiBza2FubmF1a3Nlc3NhIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkdTdHJlYW1lcmluIHZhbGl0c2ltZXQiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJOw6R5dMOkIEdTdHJlYW1lcmluIHZhbGl0c2ltZXQiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiVHVudGVtYXRvbiB2YWxpdHNpbiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGtvaHRhc2kgdmlyaGVlbiB5bGVpc2Vzc8OkIHlkaW5raXJqYXN0b3NzYS4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotIkdTdHJlYW1lci1rZWhpdHTDpGrDpHQgb2xpdmF0IGxpaWFuIGxhaXNrb2phIGFudGFha3NlZW4gdMOkbGxlIHZpcmhlZWxsZSBvbWFhICIKLSJ2aXJoZWtvb2RpYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiU2lzw6RpbmVuIEdTdHJlYW1lci12aXJoZToga29vZGlhIGVpIHRvdGV1dGV0dHUuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iR3N0cmVhbWVyLXZpcmhlOiB0aWxhc2lpcnR5bcOkIGVww6Rvbm5pc3R1aSBqYSBqb2tpbiBlbGVtZW50dGkgZWkgb25uaXN0dW51dCAiCi0iaWxtb2l0dGFtYWFuIGt1bm5vbGxpc3RhIHZpcmhlaWxtb2l0dXN0YSBlcMOkb25uaXN0dW1pc2VuIHN5eWtzaS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiU2lzw6RpbmVuIEdTdHJlYW1lci12aXJoZTogdMOkeXRlb25nZWxtYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiU2lzw6RpbmVuIEdTdHJlYW1lci12aXJoZTogc8OkaWVvbmdlbG1hLiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiBuZXV2b3R0ZWx1b25nZWxtYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiB0YXBhaHR1bWFvbmdlbG1hLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiU2lzw6RpbmVuIEdTdHJlYW1lci12aXJoZToga2VsYXVzb25nZWxtYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgIlNpc8OkaW5lbiBHU3RyZWFtZXItdmlyaGU6IHTDpHl0ZW9uZ2VsbWEuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIlNpc8OkaW5lbiBHU3RyZWFtZXItdmlyaGU6IG1lcmtpbnTDpG9uZ2VsbWEuIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiR1N0cmVhbWVyLWFzZW5udWtzZXN0YSBwdXV0dHV1IGxpaXTDpG5uw6RpbmVuLiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiBrZWxsby1vbmdlbG1hLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iVMOkbcOkIHNvdmVsbHVzIHlyaXR0w6TDpCBrw6R5dHTDpMOkIHNlbGxhaXN0YSBHU3RyZWFtZXJpbiB0b2ltaW5uYWxsaXN1dXR0YSwgam9rYSAiCi0ib24gcG9pc3NhIGvDpHl0w7ZzdMOkLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGtvaHRhc2kgdmlyaGVlbiB5bGVpc2Vzc8OkIHR1a2lraXJqYXN0b3NzYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJUdWtpa2lyamFzdG9hIGVpIHZvaXR1IGFsdXN0YWEuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIlR1a2lraXJqYXN0b2EgZWkgdm9pdHUgc3Vsa2VhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiVHVraWtpcmphc3RvYSBlaSB2b2l0dSBrb25maWd1cm9pZGEuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJLb29kYXVzdmlyaGUuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBrb2h0YXNpIHlsZWlzZW4gcmVzdXJzc2l2aXJoZWVuLiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIlJlc3Vyc3NpYSBlaSBsw7Z5dHlueXQuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiUmVzdXJzc2kgb24gdmFyYXR0dSB0YWkgZWkgc2FhdGF2aWxsYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIlJlc3Vyc3NpYSBlaSB2b2l0dSBhdmF0YSBsdWtlbWlzdGEgdmFydGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiUmVzdXJzc2lhIGVpIHZvaXR1IGF2YXRhIGtpcmpvaXR0YW1pc3RhIHZhcnRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIlJlc3Vyc3NpYSBlaSB2b2l0dSBhdmF0YSBsdWtlbWlzdGEgamEga2lyam9pdHRhbWlzdGEgdmFydGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIlJlc3Vyc3NpYSBlaSB2b2l0dSBzdWxrZWEuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIlJlc3Vyc3Npc3RhIGVpIHZvaXR1IGx1a2VhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIlJlc3Vyc3NpaW4gZWkgdm9pdHUga2lyam9pdHRhYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiUmVzdXJzc2lhIGVpIHZvaXR1IGtlbGF0YS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJSZXN1cnNzaWEgZWkgdm9pdHUgc3lua3Jvbmlzb2lkYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiUmVzdXJzc2luIGFzZXR1a3NpYSBlaSBzYWF0dS92b2l0dSBhc2V0dGFhLiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiUmVzdXJzc2lsbGEgZWkgb2xlIHRpbGFhIGrDpGxqZWxsw6QuIgotCi0jLCBmdXp6eQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIlJlc3Vyc3NpbGxhIGVpIG9sZSB0aWxhYSBqw6RsamVsbMOkLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGtvaHRhc2kgeWxlaXNlbiB0aWV0b3ZpcnRhdmlyaGVlbi4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIkVsZW1lbnR0aSBlaSB0b3RldXRhIHTDpG3DpG4gdGlldG92aXJyYW4ga8Okc2l0dGVsecOkLiBUZWUgdmlrYWlsbW9pdHVzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJUaWV0b3ZpcnJhbiB0eXlwcGnDpCBlaSB2b2l0dSBtw6TDpHJpdHTDpMOkLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiVGlldG92aXJ0YSBvbiBlcmkgdHl5cHBpw6Qga3VpbiBtaXTDpCB0w6Rtw6QgZWxlbWVudHRpIGvDpHNpdHRlbGVlLiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiIgotIlNhYXRhdmlsbGEgZWkgb2xlIGtvb2Rla2tpYSwgam9rYSBvc2FhIGvDpHNpdGVsbMOkIHTDpG3DpG4gdHl5cHBpc3TDpCB0aWV0b3ZpcnRhYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIlRpZXRvdmlydGFhIGVpIHZvaXR1IHB1cmthYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIlRpZXRvdmlydGFhIGVpIHZvaXR1IGtvb2RhdGEuIgotCi1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIlRpZXRvdmlycmFuIGthbmF2b2ludGlhIGVpIHZvaXR1IHB1cmthYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIlRpZXRvdmlydGFhIGVpIHZvaXR1IGthbmF2b2lkYS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJWaXJ0YSBvbiB2w6TDpHLDpHNzw6QgbXVvZG9zc2EuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlZpcnRhIG9uIHNhbGF0dHUgamEgc2FsYXVrc2VuIHB1cmt1YSBlaSB0dWV0YS4iCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0iVmlydGEgb24gc2FsYXR0dSBqYSBzYWxhdXN0YSBlaSB2b2lkYSBwdXJrYWEsIGtvc2thIHNvcGl2YWEgYXZhaW50YSBlaSBvbGUgIgotImFubmV0dHUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIlZpcmhldmllc3Rpw6QgYWx1ZWVsbGUgJXMgZWkgb2xlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICJTdGFuZGFyZGlhIHZpcmhldmllc3Rpw6QgYWx1ZWVsbGUgJXMgamEga29vZGlsbGUgJWQgZWkgb2xlLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiVmFsaXR0dWEga2VsbG9hIGVpIHZvaSBrw6R5dHTDpMOkIGxpdWt1aGlobmFzc2EuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICJWaXJoZSBraXJqb2l0ZXR0YWVzc2EgcmVraXN0ZXJpdsOkbGltdWlzdGlhIGtvaHRlZXNlZW4gJXM6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIm5pbWkiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJ5bGVlbnPDpCBrw6R5dGV0dHkgbmltaSIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJuaW1pIGxhaml0dGVsdXVuIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAieWxlZW5zw6Qga8OkeXRldHR5IG5pbWkgbGFqaXR0ZWx1YSB2YXJ0ZW4iCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgImVzaXR0w6Rqw6QiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgIm5hdWhvaXR1a3Nlc3RhIHZhc3R1dXNzYSBvbGV2YSh0KSBoZW5raWzDtih0KSIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiZXNpdHTDpGrDpCBsYWppdHRlbHV1biIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAibmF1aG9pdHVrc2VzdGEgdmFzdHV1c3NhIG9sZXZhKHQpIGhlbmtpbMO2KHQpIGxhaml0dGVsdWEgdmFydGVuIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImxldnkiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAibGV2eSwgam9rYSBzaXPDpGx0w6TDpCB0w6Rtw6RuIGRhdGFuIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgImxldnkgbGFqaXR0ZWx1dW4iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAibGV2eSwgam9rYSBzaXPDpGx0w6TDpCB0w6Rtw6RuIGRhdGFuLCBsYWppdHRlbHVhIHZhcnRlbiIKLQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAibGV2eW4gZXNpdHTDpGrDpCIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiS29rbyBsZXZ5biBlc2l0dMOkasOkIHNlbGxhaXNlbmEga3VpbiBzZSB0dWxpc2kgbsOkeXR0w6TDpCIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAibGV2eW4gZXNpdHTDpGrDpCBsYWppdHRlbHV1biIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiS29rbyBsZXZ5biBlc2l0dMOkasOkIHNlbGxhaXNlbmEga3VpbiBzaXTDpCB0dWxpc2kga8OkeXR0w6TDpCBsYWppdHRlbHV1biIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgInDDpGl2w6R5cyIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAicMOkaXbDpHlzLCBqb2xsb2luIGRhdGEgbHVvdGlpbiAoR0RhdGUtbXVvZG9zc2EpIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgInDDpGl2w6R5c2Fpa2EiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgInDDpGl2w6R5cyBqYSBhaWthLCBqb2xsb2luIGRhdGEgbHVvdGlpbiAoR3N0RGF0ZVRpbWUtbXVvZG9zc2EpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgImxhamkiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAibGFqaSwgam9ob24gdMOkbcOkIGRhdGEga3V1bHV1IgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAia29tbWVudHRpIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgInZhcGFhIGtvbW1lbnR0aXRla3N0aSBkYXRhbGxlIgotCi1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAibGFhamVubmV0dHUga29tbWVudHRpIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0idmFwYWEga29tbWVudHRpdGVrc3RpIGRhdGFsbGUgbXVvZG9zc2EgYXZhaW49YXJ2byB0YWkgYXZhaW5bZmldPWtvbW1lbnR0aSIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAicmFpZGFuIG51bWVybyIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJyYWlkYW4gbnVtZXJvIGtva29lbG1hbiBzaXPDpGxsw6QiCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAicmFpdG9qZW4gbcOkw6Ryw6QiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJ0w6Row6RuIGtva29lbG1hYW4ga3V1bHV2aWVuIHJhaXRvamVuIGx1a3Vtw6TDpHLDpCIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICJsZXZ5bnVtZXJvIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibGV2eW51bWVybyBrb2tvZWxtYW4gc2lzw6RsbMOkIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAibGV2eW3DpMOkcsOkIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgInTDpG3DpG4gbGV2eW4ga29rb2VsbWFhbiBrdXVsdXZpZW4gbGV2eWplbiBsdWt1bcOkw6Ryw6QiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAic2lqYWludGkiCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotIk1lZGlhbiBhbGt1cGVyw6QgVVJJLW11b2Rvc3NhIChzaWphaW50aSwgam9zc2EgYWxrdXBlcsOkaW5lbiB0aWVkb3N0byB0YWkgIgotInZpcnRhIG9uIHRhcmpvbGxhKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICJrb3Rpc2l2dSIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIlTDpG3DpG4gbWVkaWFuIGtvdGlzaXZ1IChlaXNtLiBhcnRpc3RpbiB0YWkgZWxva3V2YW4ga290aXNpdnUpIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgImt1dmF1cyIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAibHloeXQgdGVrc3RpLCBqb2thIGt1dmFhIGRhdGFuIHNpc8OkbHTDtsOkIgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAidmVyc2lvIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgInTDpG3DpG4gZGF0YW4gdmVyc2lvIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiIgotIkthbnNhaW52w6RsaW5lbiBzdGFuZGFyZG9pdHUgw6TDpG5pdGVrb29kaSBJU1JDIC0ga2F0c28gaHR0cDovL3d3dy5pZnBpLm9yZy8iCi0iaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXNhYXRpbyIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAidGVraWrDpG5vaWtldXMiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJodW9tYXV0dXMgZGF0YW4gdGVraWrDpG5vaWtldWtzaXN0YSIKLQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgInRla2lqw6Rub2lrZXVzLXVyaSIKLQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJIGh1b21hdXR1a3NlZW4gZGF0YW4gdGVraWrDpG5vaWtldWtzaXN0YSIKLQotIywgZnV6enkKLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJrb29kYWluIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAieWh0ZXlzdGllZG90IgotCi1tc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAieWh0ZXlzdGllZG90IgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAibGlzZW5zc2kiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImRhdGFuIGxpc2Vuc3NpIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgImxpc2Vuc3NpbiB1cmkiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSBkYXRhbiBsaXNlbnNzaWluIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJlc2l0dMOkasOkIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgImVzaXR0w6Rtw6Rzc8OkIG9sZXZhKHQpIGhlbmtpbMO2KHQpIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgInPDpHZlbHTDpGrDpCIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAic8OkdmVsbHlrc2VzdMOkIHZhc3R1dXNzYSBvbGV2YSh0KSBoZW5raWzDtih0KSIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IgotbXNnc3RyICIiCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAia2VzdG8iCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAicGl0dXVzIEdTdHJlYW1lcmluIGFpa2F5a3Npa2vDtmluw6QgKG5hbm9zZWt1bnRpYSkiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAia29vZGVra2kiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImtvb2Rla2tpLCBqb2xsYSBkYXRhIG9uIHRhbGxlbm5ldHR1IgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgInZpZGVva29vZGVra2kiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImtvb2Rla2tpLCBqb2xsYSB2aWRlb2RhdGEgb24gdGFsbGVubmV0dHUiCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAiw6TDpG5pa29vZGVra2kiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImtvb2Rla2tpLCBqb2xsYSDDpMOkbmlkYXRhIG9uIHRhbGxlbm5ldHR1IgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgInRla3N0aXR5c2tvb2Rla2tpIgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb29kZWtraSwgam9sbGEgdGVrc3RpdHlzdGllZG90IG9uIHRhbGxlbm5ldHR1IgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAic8OkaWzDtm50w6RtdW90byIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJzw6RpbMO2bnTDpG11b3RvLCBqb2xsYSBkYXRhIG9uIHRhbGxlbm5ldHR1IgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAiYml0dGlub3BldXMiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJ0YXJra2EgdGFpIGtlc2tpbcOkw6Ryw6RpbmVuIGJpdHRpbm9wZXVzIFtiaXR0acOkL3NdIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJuaW1lbGxpbmVuIGJpdHRpbm9wZXVzIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibmltZWxsaW5lbiBiaXR0aW5vcGV1cyBbYml0dGnDpC9zXSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAidsOkaGltbcOkaXNiaXR0aW5vcGV1cyIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgInbDpGhpbW3DpGlzYml0dGlub3BldXMgW2JpdHRpw6Qvc10iCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgImVuaW1tw6Rpc2JpdHRpbm9wZXVzIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiZW5pbW3DpGlzYml0dGlub3BldXMgW2JpdHRpw6Qvc10iCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICJrb29kYWluIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAia29vZGFpbiwgam9rYSBrb29kYWEgdMOkbcOkbiB2aXJyYW4iCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgImtvb2RhaW1lbiB2ZXJzaW8iCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJ0w6Rtw6RuIHZpcnJhbiBrb29kYWFtaXNlZW4ga8OkeXRldHluIGtvb2RhaW1lbiB2ZXJzaW8iCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgInNhcmphbnVtZXJvIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAicmFpZGFuIHNhcmphbnVtZXJvIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICJyYWlkYW4gcmVwbGF5Z2Fpbi12YWh2aXN0dXMiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJyYWlkYW4gdmFodmlzdHVzIGRlc2liZWxlaXNzw6QiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgInJhaWRhbiByZXBsYXlnYWluLWh1aXBwdSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJyYWlkYW4gaHVpcHB1IgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJsZXZ5biByZXBsYXlnYWluLXZhaHZpc3R1cyIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgImxldnluIHZhaHZpc3R1cyBkZXNpYmVsZWlzc8OkIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJsZXZ5biByZXBsYXlnYWluLWh1aXBwdSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJsZXZ5biBodWlwcHUiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAicmFpZGFuIHJlcGxheWdhaW4tdmlpdGV0YXNvIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAidmlpdGV0YXNvIHJhaWRhbiBqYSBhbGJ1bWluIGdhaW4tYXJ2b2lsbGUiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJraWVsaWtvb2RpIgotCi0jLCBmdXp6eQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgInTDpG3DpG4gdmlycmFuIGtpZWxpa29vZGkgSVNPLTYzOS0xLXN0YW5kYXJkaW4gbXVrYWlzZXN0aSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJraWVsaWtvb2RpIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJrdXZhIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAia3V2YSwgam9rYSBsaWl0dHl5IHTDpGjDpG4gdmlydGFhbiIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiZXNpa2F0c2VsdWt1dmEiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImVzaWthdHNlbHVrdXZhLCBqb2thIGxpaXR0eXkgdMOkaMOkbiB2aXJ0YWFuIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAibGlpdGUiCi0KLW1zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJ0aWVkb3N0bywgam9rYSBvbiBsaWl0ZXR0eSB0w6Row6RuIHZpcnRhYW4iCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICJ0YWh0aWEgcGVyIG1pbnV1dHRpIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgInRhaHRpZW4gbcOkw6Ryw6QgcGVyIG1pbnV1dHRpIMOkw6RuZXNzw6QiCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAiYXZhaW5zYW5hdCIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICJwaWxrdWlsbGEgZXJvdGVsbHV0IGF2YWluc2FuYXQsam90a2Ega3V2YWF2YXQgc2lzw6RsdMO2w6QiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibWFhbnRpZXRlbGxpc2VuIHNpamFpbm5pbiBuaW1pIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLSJpaG1pc2x1ZXR0YXZhIGt1dmF1cyBzaWphaW5uaXN0YSB0YWkgcGFpa2FzdGEsIGpvc3NhIG1lZGlhIG9uIG5hdWhvaXRldHR1ICIKLSJ0YWkgdHVvdGV0dHUiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgIm1hYW50aWV0ZWVsbGlzZW4gc2lqYWlubmluIGxldmV5c3BpaXJpIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0ibWFhbnRpZXRlZWxsaW5lbiBsZXZleXNwaWlyaSwgam9zc2EgbWVkaWEgb24gbmF1aG9pdGV0dHUgdGFpIHR1b3RldHR1ICIKLSJhc3RlaW5hIFdHUzg0LWtvb3JkaW5hYXRpc3Rvc3NhIChub2xsYSBvbiBww6RpdsOkbnRhc2FhamEsIG5lZ2F0aWl2aXNldCBhcnZvdCAiCi0ib3ZhdCBldGVsw6Rpc2nDpCBsZXZleXNwaWlyZWrDpCkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICJtYWFudGlldGVlbGxpc2VuIHNpamFpbm5pbiBwaXR1dXNwaWlyaSIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSJtYWFudGlldGVlbGxpbmVuIHBpdHV1c3BpaXJpLCBqb3NzYSBtZWRpYSBvbiBuYXVob2l0ZXR0dSB0YWkgdHVvdGV0dHUgIgotImFzdGVpbmEgV0dTODQta29vcmRpbmFhdGlzdG9zc2EgKG5vbGxhIG9uIG5vbGxhbWVyaWRpYWFuaSBHcmVlbndpY2hpc3PDpCAiCi0iWWhkaXN0eW5lZXNzw6Qga3VuaW5nYXNrdW5uYXNzYSwgbmVnYXRpaXZpc2V0IGFydm90IG92YXQgbMOkbnRpc2nDpCAiCi0icGl0dXVzcGlpcmVqw6QpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAibWFhbnRpZXRlZWxsaXNlbiBzaWphaW5uaW4ga29ya2V1c3Rhc28iCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0ibWFhbnRpZXRlbGxpbmVuIGtvcmtldXN0YXNvLCBqb3NzYSBtZWRpYSBvbiBuYXVob2l0ZXR0dSB0YWkgdHVvdGV0dHUgIgotIm1ldHJlaW7DpCBXR1M4NC1rb29yZGluYWF0ZWlzdGEgKG5vbGxhIG9uIGtlc2tpbcOkw6Ryw6RpbmVuIG1lcmVucGludGEpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgIm1hYW50aWV0ZWVsbGlzZW4gc2lqYWlubmluIG1hYSIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJtYWEgKGVuZ2xhbm5pbmtpZWxpbmVuIG5pbWkpLCBqb3NzYSBtZWRpYSBvbiBuYXVob2l0ZXR0dSB0YWkgdHVvdGV0dHUiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAibWFhbnRpZXRlZWxsaXNlbiBzaWphaW5uaW4ga2F1cHVua2kiCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiIgotImthdXB1bmtpIChlbmdsYW5uaW5raWVsaW5lbiBuaW1pKSwgam9zc2EgbWVkaWEgb24gbmF1aG9pdGV0dHUgdGFpIHR1b3RldHR1IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJtYWFudGlldGVlbGxpc2VuIHNpamFpbm5pbiBhbGlzaWphaW50aSIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAic2lqYWludGkga2F1cHVuZ2luIHNpc8OkbGzDpCwgam9zc2EgbWVkaWEgb24gbmF1aG9pdGV0dHUgdGFpIHR1b3RldHR1IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCi1tc2dzdHIgIm1hYW50aWV0ZWxsaXNlbiBzaWphaW5uaW4gdmlyaGUgdmFha2FzdW9yYXNzYSIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICJvZG90ZXR0dSB2aXJoZSBwYWlrYW5udWtzZW4gdmFha2FzdW9yYXNzYSBtaXR0YXVrc2Vzc2EgKG1ldHJlaW7DpCkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgIm1hYW50aWV0ZWVsbGlzZW4gc2lqYWlubmluIGxpaWtlbm9wZXVzIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICJuYXVob2l0dGF2YW4gbGFpdHRlZW4gbGlpa2Vub3BldXMgbmF1aG9pdGV0dGFlc3NhIHlrc2lrw7Zzc8OkIG0vcyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgIm1hYW50aWV0ZWVsbGlzZW4gc2lqYWlubmluIGxpaWtlc3V1bnRhIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iaWxtb2l0dGFhIG1lZGlhYSBuYXVob2l0dGF2YW4gbGFpdHRlZW4gbGlpa2VzdXVubmFuLiBFc2l0ZXTDpMOkbiBhc3RlaW5hXG4iCi0ibGl1a3VsdWt1bXVvZG9zc2EsIGpvc3NhIDAgdGFya29pdHRhYSBtYWFudGlldGVlbGxpc3TDpCBwb2hqb2lzdGEgamFcbiIKLSJhc3RlZXQga2FzdmF2YXQgbXnDtnTDpHDDpGl2w6TDpG4iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgIm1hYW50aWV0ZWVsbGlzZW4gc2lqYWlubmluIGt1dmF1c3N1dW50YSIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotImlsbW9pdHRhYSBzdXVubmFuLCBqb2hvbiBtZWRpYWEgbmF1aG9pdHRhdmEgbGFpdGUgb3NvaXR0YWEgbmF1aG9pdGV0dGFlc3NhLiAiCi0iRXNpdGV0w6TDpG4gYXN0ZWluYSBsaXVrdWx1a3VtdW9kb3NzYSwgam9zc2EgMCB0YXJrb2l0dGFhIG1hYW50aWV0ZWVsbGlzdMOkICIKLSJwb2hqb2lzdGEgamEgYXN0ZWV0IGthc3ZhdmF0IG15w7Z0w6Rww6RpdsOkw6RuIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIm9oamVsbWFuIG5pbWkiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICJUVi9wb2RjYXN0L3NhcmphbiBvaGplbG1hbiBuaW1pLCBqb3N0YSB0w6Rtw6QgbWVkaWEgb24gbMOkaHTDtmlzaW4iCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgIm9oamVsbWFuIGxhaml0dGVsdW5pbWkiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJMYWppdHRlbHV1biBrw6R5dGV0dMOkdsOkIFRWL3BvZGNhc3Qvc2FyamFuIG9oamVsbWFuIG5pbWksIGpvc3RhIHTDpG3DpCBtZWRpYSBvbiAiCi0ibMOkaHTDtmlzaW4iCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAiZXBpc29kaW4gbnVtZXJvIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIkVwaXNvZGluIG51bWVybyBrYXVkZWxsYSwgam9ob24gdMOkbcOkIG1lZGlhIGt1dWx1dSIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgIkthdWRlbiBudW1lcm8iCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiS2F1ZGVuIG51bWVybyBvaGplbG1hbGxlLCBqb2hvbiB0w6Rtw6QgbWVkaWEga3V1bHV1IgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJzYW5vaXR1a3NldCIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiTWVkaWFuIHNhbm9pdHVrc2V0LCB5bGVlbnPDpCBrw6R5dMO2c3PDpCBsYXVsdWlsbGUiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAic8OkdmVsdMOkasOkbiBsYWppdHRlbHVuaW1pIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAic8OkdmVsbHlrc2VzdMOkIHZhc3R1dXNzYSBvbGV2YSh0KSBoZW5raWzDtih0KSBsYWppdHRlbHVhIHZhcnRlbiIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICJyeWhtaXR0ZWx5IgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iUnlobWl0dGVsZWUgdG9pc2lpbnNhIGxpaXR0eXbDpHQgbWVkaWEsIGpvdGthIGtvb3N0dXZhdCB1c2VhbW1hc3RhIHJhaWRhc3RhLCAiCi0ia3V0ZW4ga29uc2VydGluIGVyaSBvc2F0LiBUw6Rtw6Qgb24ga29ya2VhbW1hbiB0YXNvbiBrdWluIHJhaXRhLCBtdXR0YSAiCi0ibWF0YWxhbW1hbiB0YXNvbiBrdWluIGxldnkiCi0KLW1zZ2lkICJ1c2VyIHJhdGluZyIKLW1zZ3N0ciAia8OkeXR0w6Rqw6RuIGFydmlvIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJBcnZpbyBrw6R5dHTDpGrDpGx0w6QuIE1pdMOkIHN1dXJlbXBpIHNpam9pdHVzLCBzaXTDpCBlbmVtbcOkbiBrw6R5dHTDpGrDpCBwaXTDpMOkIHTDpHN0w6QgIgotIm1lZGlhc3RhIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAibGFpdGV2YWxtaXN0YWphIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiVMOkbcOkbiBtZWRpYW4gbHVvbWlzZWVuIGvDpHl0ZXR5biBsYWl0dGVlbiB2YWxtaXN0YWphIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJsYWl0ZW1hbGxpIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJUw6Rtw6RuIG1lZGlhbiBsdW9taXNlZW4ga8OkeXRldHluIGxhaXR0ZWVuIG1hbGxpIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAic292ZWxsdWtzZW4gbmltaSIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiVMOkbcOkbiBtZWRpYW4gbHVvbWlzZWVuIGvDpHl0ZXR0eSBzb3ZlbGx1cyIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgInNvdmVsbHVzZGF0YSIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIk1pZWxpdmFsdGFpbmVuIHNvdmVsbHVzZGF0YSBqb2thIHNlcmlhbGlzb2lkYWFuIG1lZGlhYW4iCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAia3V2YXN1dW50YSIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiS3VpbmthIGt1dmEgdHVsaXNpIHB5w7Zyw6R5dHTDpMOkIHRhaSBrw6TDpG50w6TDpCB5bXDDpHJpIGVubmVuIG7DpHl0dMOkbWlzdMOkIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJWSVJIRTogZWxlbWVudGlsdMOkICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkxpc8OkdGlldG9qYSB2aWFuZXRzaW50w6TDpG46XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAib21pbmFpc3V1dHRhIOKAnSVz4oCdIGVpIG9sZSBlbGVtZW50aXNzw6Qg4oCdJXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJlbGVtZW50aW4g4oCdJTIkc+KAnSBvbWluYWlzdXV0dGEg4oCdJTEkc+KAnSBlaSB2b2l0dSBhc2V0dGFhIGFydm9vbiDigJ0lMyRz4oCdIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAiZWxlbWVudHRpw6QgJXMgZWkgdm9pdHUgbGlua2l0dMOkw6QgZWxlbWVudHRpaW4gJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImVpIGVsZW1lbnR0acOkIOKAnSVz4oCdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICJreWt5asOkIOKAnSVz4oCdIGVpIHZvaXR1IGrDpHNlbnTDpMOkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiZWkgbmllbHVlbGVtZW50dGnDpCBVUklsbGUg4oCdJXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgImVpIGzDpGhkZS1lbGVtZW50dGnDpCBVUkk6bGxlIOKAnSVz4oCdIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJtw6TDpHJpdGV0dHkgdHloasOkIHPDpGlsacO2IOKAnSVz4oCdLCBlaSBzYWxsaXR0dSIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJlaSBzw6RpbGnDtnTDpCDigJ0lc+KAnSwgb2hpdGV0YWFuIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgInR5aGrDpMOkIGxpdWt1aGlobmFhIGVpIHNhbGxpdGEiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAiVXNlaXRhIHB1c2t1cmVpdGEgcHV0b2lsZWUuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgotbXNnc3RyICJTaXPDpGluZW4gdGllZG9uIHZpcnRhdXNvbmdlbG1hLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIlNpc8OkaW5lbiB0aWVkb24gdmlydGF1c3ZpcmhlLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiU2lzw6RpbmVuIGtlbGxvdmlyaGUuIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAiS3V2YW4ga29vZGF1cyBlcMOkb25uaXN0dWkuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkt5a3lzdW9kYXR1cyIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iUmFqb2l0YSBtYWhkb2xsaXNpYSBzYWxsaXR0dWphIGt5a3lqw6QgKE5VTEwgdGFya29pdHRhYSBtaXTDpCB0YWhhbnNhKS4gVMOkbcOkbiAiCi0ib21pbmFpc3V1ZGVuIGFzZXR0YW1pbmVuIG90dGFhIGthaHZhbiBhbm5ldHR1dW4gR3N0Q2Fwcy1vbGlvb24uIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiVGlsYXDDpGlzaGFrZW1pc3RvYSBlaSBvbGUgbcOkw6RyaXRldHR5LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFaSB2b2l0dSBsdW9kYSB0aWxhcMOkaXN0aWVkb3N0b2Eg4oCdJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiVGllZG9zdG9hIOKAnSVz4oCdIGVpIHZvaXR1IGF2YXRhIGx1a2VtaXN0YSB2YXJ0ZW4uIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiVmlyaGUga2lyam9pdGV0dGFlc3NhIGxhdGF1c3RpZWRvc3Rvb24uIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIktpcmpvaXR1c3RhIHZhcnRlbiBlaSBtw6TDpHJpdGV0dHkgdGllZG9zdG9uaW1lw6QuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiVGllZG9zdG9hIOKAnSVz4oCdIGVpIHZvaXR1IGF2YXRhIGtpcmpvaXR0YW1pc3RhIHZhcnRlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIlZpcmhlIHN1bGpldHRhZXNzYSB0aWVkb3N0b2Eg4oCdJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJWaXJoZSBrZWxhdHRhZXNzYSB0aWVkb3N0b2Eg4oCdJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJWaXJoZSBraXJqb2l0ZXR0YWVzc2EgdGllZG9zdG9vbiDigJ0lc+KAnS4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTHVrZW1pc3RhIHZhcnRlbiBlaSBvbGUgbcOkw6RyaXRldHR5IHRpZWRvc3RvbmltZcOkLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiRWkgc2FhdHUgdGlldG9qYSBrb2h0ZWVzdGEg4oCdJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIuKAnSVz4oCdIG9uIGhha2VtaXN0by4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJUaWVkb3N0byDigJ0lc+KAnSBvbiBwaXN0b2tlLiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIkVww6Rvbm5pc3R1aSwga3V0ZW4gcHl5ZGV0dGlpbiwgeXJpdHlzdGVuIGrDpGxrZWVuLiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgImt5dnl0IgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAidHVubmlzdGV0dHUga3l2eXQgdmlycmFzc2EiCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJ2w6RoaW50w6TDpG4iCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICJwYWtvdGEga3l2eXQiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAicGFrb3RhIGt5dnl0IGlsbWFuIHR5eXBwaWhha3VhIgotCi0jLCBmdXp6eQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJWaXJ0YSBvbiB0eWhqw6QuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJWaXJ0YSBvbiB0eWhqw6QuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiVG90ZXV0ZXR1dCByYWphcGlubmF0OlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgImx1ZXR0YXZpc3NhIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgImtpcmpvaXRldHRhdmlzc2EiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgIm9oamF0dGF2aXNzYSIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICJ2YWloZGV0dGF2aXNzYSBUWUhKw4QtLCBWQUxNSVMtLCBUQVVPTExBLSB0YWkgU09JLXRpbG9pc3NhIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAidmFpaGRldHRhdmlzc2EgdmFpbiBUWUhKw4QtLCBWQUxNSVMtIHRhaSBUQVVPTExBLXRpbG9pc3NhIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgInZhaWhkZXR0YXZpc3NhIHZhaW4gVFlISsOELSB0YWkgVkFMTUlTLS10aWxvaXNzYSIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiTXVzdGFsaXN0YXR1dCB0aWVkb3N0b3Q6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAiWWh0ZWlzbcOkw6Ryw6Q6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgbXVzdGFsaXN0YXR0dSB0aWVkb3N0byIKLW1zZ3N0clsxXSAiJWQgbXVzdGFsaXN0YXR0dWEgdGllZG9zdG9hIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgbGlpdMOkbm7DpGluZW4iCi1tc2dzdHJbMV0gIiVkIGxpaXTDpG5uw6Rpc3TDpCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCBtdXN0YWxpc3RhdXN0aWV0dWUiCi1tc2dzdHJbMV0gIiVkIG11c3RhbGlzdGF1c3RpZXR1ZXR0YSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgb21pbmFpc3V1cyIKLW1zZ3N0clsxXSAiJWQgb21pbmFpc3V1dHRhIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJUdWxvc3RhIGthaWtraSBlbGVtZW50aXQiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJUdWxpc3RhIGx1ZXR0ZWxvIHRpZWRvc3RvaXN0YSBtdXN0YWxsYSBsaXN0YWxsYSIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iVHVsb3N0YSBrb25lbHVldHRhdmEgbHVldHRlbG8gb21pbmFpc3V1a3Npc3RhLCBqb3RrYSBhbm5ldHR1IGxpaXTDpG5uw6RpbmVuICIKLSJ0YXJqb2FhLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh5w7ZkeWxsaW5lbiB1bGtvaXN0ZW4gYXV0b21hYXR0aXN0ZW4gIgotImxpaXTDpG5uw6Rpc3RlbiBhc2VubnVzbWVrYW5pc21pZW4geWh0ZXlkZXNzw6QiCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIkx1ZXR0ZWxlIGxpaXTDpG5uw6Rpc2VuIHNpc8OkbHTDtiIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCi1tc2dzdHIgIlR1bG9zdGEgdHVldHV0IFVSSS1za2VlbWF0IHNla8OkIG5lIHRvdGV1dHRhdmF0IGVsZW1lbnRpdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiRWkgdm9pdHUgbGFkYXRhIGxpaXTDpG5uw6Rpc3RpZWRvc3RvYTogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiRWkgdMOkbGxhaXN0YSBlbGVtZW50dGnDpCB0YWkgbGlpdMOkbm7DpGlzdMOkIOKAnSVz4oCdXG4iCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJTYWF0aWluIHZpZXN0aSAjJXUgZWxlbWVudGlsdMOkIOKAnSVz4oCdICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiU2FhdGlpbiB2aWVzdGkgIyV1IHTDpHl0dGVlbHTDpCDigJ0lczolc+KAnSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIlNhYXRpaW4gdmllc3RpICMldSBvbGlvbHRhIOKAnSVz4oCdICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICJTYWF0aWluIHZpZXN0aSAjJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiU2FhdGlpbiBFT1MgKHZpcnJhbiBsb3BwdSkgZWxlbWVudGlsdMOkIOKAnSVz4oCdLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkzDlllUWUkgTUVSS0lOVMOEOiBzZW4gbMO2eXNpIGVsZW1lbnR0aSDigJ0lc+KAnS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIkzDlllUWUkgTUVSS0lOVMOEOiBzZW4gbMO2eXNpIHTDpHl0ZSDigJ0lczolc+KAnS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIkzDlllUWUkgTUVSS0lOVMOEOiBzZW4gbMO2eXNpIG9saW8g4oCdJXPigJ0uXG4iCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAiTMOWWVRJIE1FUktJTlTDhFxuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJMw5ZZVFlJIE1FUktJTlTDhDogc2VuIGzDtnlzaSBlbGVtZW50dGkg4oCdJXPigJ0uXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiTMOWWVRZSSBNRVJLSU5Uw4Q6IHNlbiBsw7Z5c2kgb2xpbyDigJ0lc+KAnS5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiTMOWWVRJIE1FUktJTlTDhFxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJWQVJPSVRVUzogZWxlbWVudGlsdMOkICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIkVzaXB5w7ZyaXRldHR5LCBvZG90ZXRhYW4gcHVza3Vyb2lubmluIHDDpMOkdHR5bWlzdMOkLi4uXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiRXNpcHnDtnJpdGV0dHksIG9kb3RldGFhbiBwdXNrdXJvaW5uaW4gcMOkw6R0dHltaXN0w6QuLi5cbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAicHVza3Vyb2lkYWFuLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiUHVza3Vyb2ludGkgdGVodHksIGFzZXRldGFhbiBsaXVrdWhpaG5hIHRpbGFhbiBTT0kuLi5cbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIlB1c2t1cm9pZGFhbiwgYXNldGV0YWFuIGxpdWt1aGlobmEgdGlsYWFuIFRBVU9MTEEuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIlV1ZGVsbGVlbmphYSBsYXRlbnNzaS4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIkFzZXRldGFhbiB0aWxhYW4gJXMga3V0ZW4gJXMgcHl5c2kuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIktlc2tleXR5czogUHlzw6R5dGV0w6TDpG4gbGl1a3VoaWhuYSAuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiZWkgZWxlbWVudHRpw6Qg4oCdJXPigJ0iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICJWQVJPSVRVUzogZWxlbWVudGlsdMOkICVzOiAlc1xuIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICJUdWxvc3RlbWVya2lubsOkdCAodHVubmV0YWFuIG15w7ZzIG1ldGFkYXRhbmEpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiVHVsb3N0ZXRpbGF0aWVkb3QgamEgb21pbmFpc3V1c2h1b21pb3QiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICLDhGzDpCB0dWxvc3RhIG1pdMOkw6RuIGVkaXN0eW1pc3RpZXRvYSIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiVHVsb3N0ZXZpZXN0aXQiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICLDhGzDpCBhc2VubmEgdmlyaGVlbmvDpHNpdHRlbGludMOkIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICJQYWtvdGEgdmlycmFuLWxvcHB1IGzDpGh0ZWlsbGUgZW5uZW4gbGl1a3VoaWhhbiBzYW1tdXR0YW1pc3RhIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIlZJUkhFOiBsaXVrdWhpaG5hYSBlaSB2b2l0dSByYWtlbnRhYTogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICJWSVJIRTogbGl1a3VoaWhuYWEgZWkgdm9pdHUgcmFrZW50YWEuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJWQVJPSVRVUzogdmlyaGVlbGxpbmVuIGxpdWt1aGlobmE6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIlZJUkhFOiDigJ1saXVrdWhpaG5h4oCdLWVsZW1lbnR0acOkIGVpIGzDtnl0eW55dC5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJBc2V0ZXRhYW4gbGl1a3VoaWhuYSB0aWxhYW4gVEFVT0xMQS4uLlxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiVklSSEU6IExpdWt1aGlobmEgZWkgaGFsdWEgbWVubsOkIHRhdW9sbGUuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIkxpdWt1aGlobmEgb24ga8OkeW5uaXNzw6QgZWlrw6Qgc2l0w6QgdGFydml0c2UgRVNJUlVMTEFUQS4uLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiTGl1a3VoaWhuYSBFU0lSVUxMQVVUVVUuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiVklSSEU6IExpdWt1aGlobmEgZWkgaGFsdWEgZXNpcnVsbGF1dHVhLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJMaXVrdWhpaG5hIG9uIEVTSVJVTExBVFRVLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIkFzZXRldGFhbiBsaXVrdWhpaG5hIHRpbGFhbiBTT0kuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiVklSSEU6IExpdWt1aGlobmEgZWkgaGFsdWEgdG9pc3RhYS5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICIiCi0iVmlycmFuLWxvcHB1IHNhbW11dGV0dGFlc3NhIGvDpHl0w7Zzc8OkIC0tIHBha290ZXRhYW4gdmlycmFuLWxvcHB1ICIKLSJsaXVrdWhpaG5hbGxlXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIiIKLSJWaXJyYW4tbG9wcHUgc2FtbXV0ZXR0YWVzc2Ega8OkeXTDtnNzw6QgLS0gcGFrb3RldGFhbiB2aXJyYW4tbG9wcHUgIgotImxpdWt1aGlobmFsbGVcbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICJPZG90ZXRhYW4gdmlycmFuIGxvcHB1YS4uLlxuIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiVmlycmFuLWxvcHB1IHZhc3RhYW5vdGV0dHUgLSBweXPDpHl0ZXTDpMOkbiBsaXVrdWhpaG5hLi4uXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIktlc2tleXR5czogUHlzw6R5dGV0w6TDpG4gbGl1a3VoaWhuYSAuLi5cbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJUYXBhaHR1aSB2aXJoZSBvZG90ZXR0YWVzc2EgdmlycmFuLWxvcHB1YVxuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIlN1b3JpdHVzIHDDpMOkdHR5aSBqw6Rsa2VlbiAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiQXNldGV0YWFuIGxpdWt1aGlobmEgdGlsYWFuIFZBTE1JUy4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICJBc2V0ZXRhYW4gbGl1a3VoaWhuYSB0aWxhYW4gVFlISsOELi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJWYXBhdXRldGFhbiBsaXVrdWhpaG5hLi4uXG4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIlNpc8OkaW5lbiB0aWV0b3ZpcnRhdmlyaGUuIgotCi0jfiBtc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKLSN+IG1zZ3N0ciAiw4Rsw6QgdHVsb3N0YSB0aWxhdGlldG9hIFRZWVBQSSIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVFlZUFBJMSxUWVlQUEkyLC4uLiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGlua2tpIGlsbWFuIGzDpGhkZS1lbGVtZW50dGnDpCIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgImxpbmtraSBpbG1hbiBuaWVsdWVsZW1lbnR0acOkIgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgImVpIGVsZW1lbnR0acOkLCBqb3RhIGxpbmtpdHTDpMOkIFVSSWluIOKAnSVz4oCdIgotCi0jfiBtc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotI34gbXNnc3RyICJuaWVsdWVsZW1lbnR0acOkIGVpIHZvaXR1IGxpbmtpdHTDpMOkIFVSSWxsZSDigJ0lc+KAnSIKLQotI34gbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCi0jfiBtc2dzdHIgIlR1bG9zdGEgdmFyYXVzasOkbGtpIChqb3MgdmFsaXR0dSBrw6TDpG5uw7Zrc2VuIHlodGV5ZGVzc8OkKSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJLw6R5dHTDtjogZ3N0LXhtbGxhdW5jaCA8dGllZG9zdG8ueG1sPiBbIGVsZW1lbnR0aS5vbWluYWlzdXVzPWFydm8gLi4uIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiVklSSEU6IFhNTC10aWVkb3N0b24g4oCdJXPigJ0gasOkc2VudMOkbWluZW4gZXDDpG9ubmlzdHVpLlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgotI34gbXNnc3RyICJWSVJIRTogcMOkw6R0YXNvbiBsaXVrdWhpaG5hZWxlbWVudHRpw6QgZWkgb2xlIHRpZWRvc3Rvc3NhIOKAnSVz4oCdLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICJWQVJPSVRVUzogdmFpbiB5aHTDpCBww6TDpHRhc29uIGVsZW1lbnR0acOkIHR1ZXRhYW4gdMOkbGzDpCBrZXJ0YWEuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgIlZJUkhFOiBlaSB2b2l0dSBqw6RzZW50w6TDpCBrb21lbnRvcml2aWFyZ3VtZW50dGlhICVkOiAlcy5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCi0jfiBtc2dzdHIgIlZBUk9JVFVTOiBlbGVtZW50dGnDpCBuaW1lbHTDpCDigJ0lc+KAnSBlaSBsw7Z5dHlueXQuXG4iCi0KLSN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgotI34gbXNnc3RyICJUYWxsZW5uYSBsaXVrdWhpaG5hbiBYTUwtZXNpdHlzIFRJRURPU1RPb24gamEgcG9pc3R1IgotCi0jfiBtc2dpZCAiRklMRSIKLSN+IG1zZ3N0ciAiVElFRE9TVE8iCi0KLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIsOEbMOkIGFzZW5uYSBTSUdVU1IxLSBqYSBTSUdVU1IyLXNpZ25hYWxpbmvDpHNpdHRlbGlqw7ZpdMOkIgotCi0jfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgotI34gbXNnc3RyICJWaXJoZSB1dWRlbGxlZW5za2FubmF0ZXNzYSByZWtpc3RlcmnDpCAlczogJXMiCi0KLSN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlcyIKLSN+IG1zZ3N0ciAiVmlyaGUgdXVkZWxsZWVuc2thbm5hdGVzc2EgcmVraXN0ZXJpw6QgJXMiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuIgotI34gbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiB0aWxhc2lpcnR5bcOkIGVww6Rvbm5pc3R1aS4iCi0KLSN+IG1zZ2lkICJGUkVFSU5HIHBpcGVsaW5lIC4uLlxuIgotI34gbXNnc3RyICJWQVBBVVRFVEFBTiBsaXVrdWhpaG5hLi4uXG4iCi0KLSN+IG1zZ2lkICJvcmlnaW5hbCBsb2NhdGlvbiBvZiBmaWxlIGFzIGEgVVJJIgotI34gbXNnc3RyICJ0aWVkb3N0b24gYWxrdXBlcsOkaW5lbiBzaWphaW50aSBVUkk6bmEiCi0KLSN+IG1zZ2lkICJEaXNhYmxlIGFjY2VsZXJhdGVkIENQVSBpbnN0cnVjdGlvbnMiCi0jfiBtc2dzdHIgIkVpIGtpaWhkeXRldHR5asOkIHN1b3JpdGlua8Okc2t5asOkIgotCi0jfiBtc2dpZCAiU0NIRURVTEVSIgotI34gbXNnc3RyICJWVU9ST1RJTiIKLQotI34gbXNnaWQgIlJlZ2lzdHJ5IHRvIHVzZSIKLSN+IG1zZ3N0ciAiS8OkeXRldHTDpHbDpCByZWtpc3RlcmkiCi0KLSN+IG1zZ2lkICJSRUdJU1RSWSIKLSN+IG1zZ3N0ciAiUkVLSVNURVJJIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzY2hlZHVsZXIgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiB2dW9yb3Rpbm9uZ2VsbWEuIFRlZSB2aWthaWxtb2l0dXMuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBhYmlsaXRpZXMgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICJTaXPDpGluZW4gR1N0cmVhbWVyLXZpcmhlOiBreWt5b25nZWxtYS4gVGVlIHZpa2FpbG1vaXR1cy4iCi0KLSN+IG1zZ2lkICJUaGVyZSBpcyBubyBlbGVtZW50IHByZXNlbnQgdG8gaGFuZGxlIHRoZSBzdHJlYW0ncyBtaW1lIHR5cGUgJXMuIgotI34gbXNnc3RyICIiCi0jfiAiS8OkeXRldHTDpHZpc3PDpCBlaSBvbGUgZWxlbWVudHRpw6QsIGpva2Ega8Okc2l0dGVsaXNpIHRpZXRvdmlycmFuIE1JTUUtdHl5cGluICIKLSN+ICIlcy4iCi0KLSN+IG1zZ2lkICJzdHJlYW0gdHlwZSIKLSN+IG1zZ3N0ciAidGlldG92aXJyYW4gdHl5cHBpIgotCi0jfiBtc2dpZCAiIgotI34gIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlcyBpdGVyYXRpb25zIChzdW0gJXMgbnMsIGF2ZXJhZ2UgJXMgbnMsIG1pbiAlcyBucywgIgotI34gIm1heCAlcyBucykuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJTdW9yaXR1cyBww6TDpHR0eWkgJXMgbMOkcGlrw6R5bm5pbiBqw6Rsa2VlbiAoc3VtbWEgJXMgbnMsIGtlc2tpYXJ2byAlcyBucywgIgotI34gImFsaW4gJXMgbnMsIHlsaW4gJXMgbnMpLlxuIgotCi0jfiBtc2dpZCAiTnVtYmVyIG9mIHRpbWVzIHRvIGl0ZXJhdGUgcGlwZWxpbmUiCi0jfiBtc2dzdHIgIkt1aW5rYSBtb250YSBrZXJ0YWEgbGl1a3VoaWhuYSBrw6R5ZMOkw6RuIGzDpHBpIgotCi0jfiBtc2dpZCAiICAgICAgICAgVHJ5aW5nIHRvIHJ1biBhbnl3YXkuXG4iCi0jfiBtc2dzdHIgIiAgICAgICAgIFlyaXRldMOkw6RuIHN1b3JpdHRhYSBqb2thIHRhcGF1a3Nlc3NhLlxuIgotCi0jfiBtc2dpZCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgZmVhdHVyZS5cbiIKLSN+IG1zZ2lkX3BsdXJhbCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgZmVhdHVyZXMuXG4iCi0jfiBtc2dzdHJbMF0gIkxpc8OkdHR5IGxpaXTDpG5uw6RpbmVuICVzLCBqb2xsYSBvbiAlZCBvbWluYWlzdXVzLlxuIgotI34gbXNnc3RyWzFdICJMaXPDpHR0eSBsaWl0w6RubsOkaW5lbiAlcywgam9sbGEgb24gJWQgb21pbmFpc3V1dHRhLlxuIgotCi0jfiBtc2dpZCAiQWRkZWQgcGF0aCAgICVzIHRvICVzIFxuIgotI34gbXNnc3RyICJMaXPDpHR0eSBwb2xrdSAgJXMgcmVraXN0ZXJpaW4gJXMgXG4iCi0KLSN+IG1zZ2lkICJSZWJ1aWxkaW5nICVzICglcykgLi4uXG4iCi0jfiBtc2dzdHIgIlV1ZGVsbGVlbnJha2VubmV0YWFuICVzICglcykgLi4uXG4iCi0KLSN+IG1zZ2lkICJUcnlpbmcgdG8gbG9hZCAlcyAuLi5cbiIKLSN+IG1zZ3N0ciAiWXJpdGV0w6TDpG4gbGFkYXRhICVzIC4uLlxuIgotCi0jfiBtc2dpZCAiRXJyb3IgbG9hZGluZyAlc1xuIgotI34gbXNnc3RyICJWaXJoZSBsYWRhdHRhZXNzYSAlc1xuIgotCi0jfiBtc2dpZCAiTG9hZGVkICVkIHBsdWdpbnMgd2l0aCAlZCBmZWF0dXJlLlxuIgotI34gbXNnaWRfcGx1cmFsICJMb2FkZWQgJWQgcGx1Z2lucyB3aXRoICVkIGZlYXR1cmVzLlxuIgotI34gbXNnc3RyWzBdICJMYWRhdHR1ICVkIGxpaXTDpG5uw6Rpc3TDpCwgam9pbGxhIG9uICVkIG9taW5haXN1dXMuXG4iCi0jfiBtc2dzdHJbMV0gIkxhZGF0dHUgJWQgbGlpdMOkbm7DpGlzdMOkLCBqb2lsbGEgb24gJWQgb21pbmFpc3V1dHRhLlxuIgotCi0jfiBtc2dpZCAicHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAidHVsb3N0YSB2ZXJzaW90aWVkb3QgamEgcG9pc3R1IgpkaWZmIC0tZ2l0IGEvcG8vZnIuZ21vIGIvcG8vZnIuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmUyNGI3Li4wMDAwMDAwCi0tLSBhL3BvL2ZyLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2ZyLnBvIGIvcG8vZnIucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYmZmYWQuLjAwMDAwMDAKLS0tIGEvcG8vZnIucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzI5ICswLDAgQEAKLSMgVHJhbnNsYXRpb24gb2YgR1N0cmVhbWVyIHRvIEZyZW5jaAotIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMiBHU3RyZWFtZXIgY29yZSB0ZWFtCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KLSMKLSMgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+LCAyMDA0LgotIyBDbGF1ZGUgUGFyb3ogPGNsYXVkZUAyeGxpYnJlLm5ldD4sIDIwMDgtMjAxMi4KLSMgU3TDqXBoYW5lIEF1bGVyeSA8bGtwcG9AZnJlZS5mcj4sIDIwMTUuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS43LjkwXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDMtMDQgMTM6MDgrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogU3TDqXBoYW5lIEF1bGVyeSA8bGtwcG9AZnJlZS5mcj5cbiIKLSJMYW5ndWFnZS1UZWFtOiBGcmVuY2ggPHRyYWR1Y0B0cmFkdWMub3JnPlxuIgotIkxhbmd1YWdlOiBmclxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPW4+MTtcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiQWZmaWNoZSBsYSB2ZXJzaW9uIGRlIEdTdHJlYW1lciIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJSZW5kIHRvdXMgbGVzIGF2ZXJ0aXNzZW1lbnRzIGJsb3F1YW50cyIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJBZmZpY2hlIGxlcyBjYXTDqWdvcmllcyBkZSBkw6lib2dhZ2UgZGlzcG9uaWJsZXMgZXQgcXVpdHRlIgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iTml2ZWF1IGRlIGTDqWJvZ2FnZSBwYXIgZMOpZmF1dCwgZGUgMSAoZXJyZXVycyB1bmlxdWVtZW50KSDDoCA5ICh0b3V0KSBvdSAwICIKLSJwb3VyIGF1Y3VuZSBzb3J0aWUiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiTklWRUFVIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIkxpc3RlIHPDqXBhcsOpZSBwYXIgZGVzIHZpcmd1bGVzIGRlIHBhaXJlcyBub21fY2F0w6lnb3JpZTpuaXZlYXUgZMOpZmluaXNzYW50ICIKLSJkZXMgbml2ZWF1eCBzcMOpY2lmaXF1ZXMgcG91ciBjaGFxdWUgY2F0w6lnb3JpZS4gRXhlbXBsZcKgOiBHU1RfQVVUT1BMVUc6NSwiCi0iR1NUX0VMRU1FTlRfKjozIgotCi1tc2dpZCAiTElTVCIKLW1zZ3N0ciAiTElTVEUiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiRMOpc2FjdGl2ZSBsYSBjb3VsZXVyIGRhbnMgbGEgc29ydGllIGRlIGTDqWJvZ2FnZSIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0iTW9kaWZpY2F0aW9uIGR1IG1vZGUgZGUgY29sb3JhdGlvbiBkdSBqb3VybmFsIGRlIGRlYnVnLiBNb2RlcyBkaXNwb25pYmxlcyA6ICIKLSJvZmYsIG9uLCBkaXNhYmxlLCBhdXRvLCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIkTDqXNhY3RpdmUgbGUgZMOpYm9nYWdlIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIkFjdGl2ZSBsZSBkaWFnbm9zdGljIGTDqXRhaWxsw6kgZHUgY2hhcmdlbWVudCBkZXMgZ3JlZmZvbnMiCi0KLW1zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgotbXNnc3RyICJDaGVtaW5zIGNvbnRlbmFudCBkZXMgZ3JlZmZvbnMsIHPDqXBhcsOpcyBwYXIgZGVzIGRldXgtcG9pbnRzIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIkNIRU1JTlMiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0iTGlzdGUgZGUgZ3JlZmZvbnMgw6AgcHLDqWNoYXJnZXIsIHPDqXBhcsOpZSBwYXIgZGVzIHZpcmd1bGVzLCBlbiBwbHVzIGRlIGxhICIKLSJsaXN0ZSBjb250ZW51ZSBkYW5zIGxhIHZhcmlhYmxlIGTigJllbnZpcm9ubmVtZW50IEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIkdSRUZGT05TIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiIgotIkTDqXNhY3RpdmUgbGEgZMOpdGVjdGlvbiBkZXMgZXJyZXVycyBkZSBzZWdtZW50YXRpb24gcGVuZGFudCBsZSBjaGFyZ2VtZW50IGRlcyAiCi0iZ3JlZmZvbnMiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiRMOpc2FjdGl2ZSBsYSBtaXNlIMOgIGpvdXIgZHUgcmVnaXN0cmUiCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICIiCi0iRMOpc2FjdGl2ZSBsZSBsYW5jZW1lbnQgZOKAmXVuIHByb2Nlc3N1cyBhbm5leGUgbG9ycyBkZSBs4oCZYW5hbHlzZSBkdSByZWdpc3RyZSIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJPcHRpb25zIGRlIEdTdHJlYW1lciIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkFmZmljaGVyIGxlcyBvcHRpb25zIGRlIEdTdHJlYW1lciIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICJPcHRpb24gaW5jb25udWUiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBhIHJlbmNvbnRyw6kgdW5lIGVycmV1ciBnw6luw6lyYWxlIGRlIGJpYmxpb3Row6hxdWUgY2VudHJhbGUuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSJMZXMgZMOpdmVsb3BwZXVycyBkZSBHU3RyZWFtZXIgc29udCB0cm9wIGZhaW7DqWFudHMgcG91ciBhc3NvY2llciB1biBjb2RlICIKLSJk4oCZZXJyZXVyIMOgIGNldHRlIGVycmV1ci4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiRXJyZXVyIGludGVybmUgZGUgR1N0cmVhbWVywqA6IGNvZGUgbm9uIGltcGzDqW1lbnTDqS4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLSJFcnJldXIgR1N0cmVhbWVywqA6IMOpY2hlYyBkZSBjaGFuZ2VtZW50IGTigJnDqXRhdCBldCB1biDDqWzDqW1lbnQgbuKAmWEgcGFzIHB1ICIKLSJzaWduYWxlciB1biBtZXNzYWdlIGTigJllcnJldXIgY29ycmVjdCBjb250ZW5hbnQgbGEgcmFpc29uIGRlIGzigJnDqWNoZWMuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkVycmV1ciBpbnRlcm5lIGRlIEdTdHJlYW1lcsKgOiBwcm9ibMOobWUgZGUgY29ubmVjdGV1ci4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyZXVyIGludGVybmUgZGUgR1N0cmVhbWVywqA6IHByb2Jsw6htZSBkZSB0aHJlYWQuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyZXVyIEdTdHJlYW1lcsKgOiBwcm9ibMOobWUgZGUgbsOpZ29jaWF0aW9uLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIkVycmV1ciBpbnRlcm5lIGRlIEdTdHJlYW1lcsKgOiBwcm9ibMOobWUgZOKAmcOpdsOpbmVtZW50LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyZXVyIGludGVybmUgZGUgR3N0cmVhbWVywqA6IHByb2Jsw6htZSBkZSByZWNoZXJjaGUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJFcnJldXIgaW50ZXJuZSBkZSBHc3RyZWFtZXLCoDogcHJvYmzDqG1lIGRlIGNhcHMuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIkVycmV1ciBpbnRlcm5lIGRlIEdzdHJlYW1lcsKgOiBwcm9ibMOobWUgZGUgYmFsaXNlLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIklsIG1hbnF1ZSB1biBncmVmZm9uIGRhbnMgdm90cmUgaW5zdGFsbGF0aW9uIGRlIEdTdHJlYW1lci4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJFcnJldXIgR3N0cmVhbWVywqA6IHByb2Jsw6htZSBk4oCZaG9ybG9nZS4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotIkNldHRlIGFwcGxpY2F0aW9uIHRlbnRlIGTigJl1dGlsaXNlciB1bmUgZm9uY3Rpb25uYWxpdMOpIGRlIEdTdHJlYW1lciBxdWkgYSDDqXTDqSAiCi0iZMOpc2FjdGl2w6llLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiIgotIkdTdHJlYW1lciBhIHJlbmNvbnRyw6kgdW5lIGVycmV1ciBnw6luw6lyYWxlIGRlIGJpYmxpb3Row6hxdWUgZGUgcHJpc2UgZW4gY2hhcmdlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkltcG9zc2libGUgZOKAmWluaXRpYWxpc2VyIGxhIGJpYmxpb3Row6hxdWUgZGUgcHJpc2UgZW4gY2hhcmdlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIGZlcm1lciBsYSBiaWJsaW90aMOocXVlIGRlIHByaXNlIGVuIGNoYXJnZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgY29uZmlndXJlciBsYSBiaWJsaW90aMOocXVlIGRlIHByaXNlIGVuIGNoYXJnZS4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIkVycmV1ciBkZSBjb2RhZ2UuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBhIHJlbmNvbnRyw6kgdW5lIGVycmV1ciBnw6luw6lyYWxlIGRlIHJlc3NvdXJjZS4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJSZXNzb3VyY2UgaW50cm91dmFibGUuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiUmVzc291cmNlIG9jY3Vww6llIG91IG5vbiBkaXNwb25pYmxlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBk4oCZb3V2cmlyIGxhIHJlc3NvdXJjZSBlbiBsZWN0dXJlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBk4oCZb3V2cmlyIGxhIHJlc3NvdXJjZSBlbiDDqWNyaXR1cmUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJlvdXZyaXIgbGEgcmVzc291cmNlIGVuIGxlY3R1cmUgZXQgw6ljcml0dXJlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgZmVybWVyIGxhIHJlc3NvdXJjZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIMOgIHBhcnRpciBkZSBsYSByZXNzb3VyY2UuIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBk4oCZw6ljcmlyZSBkYW5zIGxhIHJlc3NvdXJjZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSByZWNoZXJjaGVyIGRhbnMgbGEgcmVzc291cmNlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgc3luY2hyb25pc2VyIGRhbnMgbGEgcmVzc291cmNlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJlvYnRlbmlyIG91IGRlIGTDqWZpbmlyIHVuIHBhcmFtw6h0cmUgZGUgcmVzc291cmNlLiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiRXNwYWNlIGxpYnJlIGluc3VmZmlzYW50IGRhbnMgbGEgcmVzc291cmNlLiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIkFjY8OocyDDoCBsYSByZXNzb3VyY2UgaW50ZXJkaXQuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgYSByZW5jb250csOpIHVuZSBlcnJldXIgZ8OpbsOpcmFsZSBkZSBmbHV4LiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiTOKAmcOpbMOpbWVudCBuZSBnw6hyZSBwYXMgY2UgZmx1eC4gVmV1aWxsZXogc2lnbmFsZXIgbGUgcHJvYmzDqG1lLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqXRlcm1pbmVyIGxlIHR5cGUgZHUgZmx1eC4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIkxlIHR5cGUgZHUgZmx1eCBlc3QgZGlmZsOpcmVudCBkZSBjZWx1aSBxdWkgZXN0IGfDqXLDqSBwYXIgY2V0IMOpbMOpbWVudC4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIkF1Y3VuIGNvZGVjIGRpc3BvbmlibGUgcG91ciBnw6lyZXIgbGUgdHlwZSBkdSBmbHV4LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6ljb2RlciBsZSBmbHV4LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjb2RlciBsZSBmbHV4LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqW11bHRpcGxleGVyIGxlIGZsdXguIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIG11bHRpcGxleGVyIGxlIGZsdXguIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAiTGUgZm9ybWF0IGR1IGZsdXggbuKAmWVzdCBwYXMgY29ycmVjdC4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiTGUgZmx1eCBlc3QgY2hpZmZyw6kgZXQgbGUgZMOpY2hpZmZyZW1lbnQgbuKAmWVzdCBwYXMgcHJpcyBlbiBjaGFyZ2UuIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIkxlIGZsdXggZXN0IGNoaWZmcsOpIGV0IGlsIG5lIHBldXQgw6p0cmUgZMOpY2hpZmZyw6kgY2FyIGF1Y3VuZSBjbGVmIHZhbGFibGUgbuKAmWEgIgotIsOpdMOpIGZvdXJuaWUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIkF1Y3VuIG1lc3NhZ2UgZOKAmWVycmV1ciBwb3VyIGxlIGRvbWFpbmUgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIkF1Y3VuIG1lc3NhZ2UgZOKAmWVycmV1ciBzdGFuZGFyZCBwb3VyIGxlIGRvbWFpbmUgJXMgZXQgbGUgY29kZSAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIkzigJlob3Jsb2dlIHPDqWxlY3Rpb25uw6llIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpZSBkYW5zIGxlIHBpcGVsaW5lLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiRXJyZXVyIGTigJnDqWNyaXR1cmUgZHUgY2FjaGUgZGUgcmVnaXN0cmUgw6AgJXPCoDogJXMiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAidGl0cmUiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJ0aXRyZSB1dGlsaXPDqSBoYWJpdHVlbGxlbWVudCIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJ0aXRyZSBwb3VyIGxlIHRyaSIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInRpdHJlIHV0aWxpc8OpIGhhYml0dWVsbGVtZW50IGRhbnMgdW4gYnV0IGRlIHRyaSIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAiYXJ0aXN0ZSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAicGVyc29ubmUocykgcmVzcG9uc2FibGUocykgZGUgbOKAmWVucmVnaXN0cmVtZW50IgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJub20gZOKAmWFydGlzdGUgcG91ciBsZSB0cmkiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvbm5lKHMpIHJlc3BvbnNhYmxlKHMpIGRlIGzigJllbnJlZ2lzdHJlbWVudCwgZGFucyB1biBidXQgZGUgdHJpIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImFsYnVtIGNvbnRlbmFudCBjZXMgZG9ubsOpZXMiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tIGTigJlhbGJ1bSBwb3VyIGxlIHRyaSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJhbGJ1bSBjb250ZW5hbnQgY2VzIGRvbm7DqWVzLCBkYW5zIHVuIGJ1dCBkZSB0cmkiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgImFydGlzdGUgZGUgbOKAmWFsYnVtIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJM4oCZYXJ0aXN0ZSBkZSBs4oCZYWxidW0gZW50aWVyLCB0ZWwgcXXigJlpbCBkZXZyYWl0IHPigJlhZmZpY2hlciIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tIGTigJlhcnRpc3RlIGRlIGzigJlhbGJ1bSBwb3VyIGxlIHRyaSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiTOKAmWFydGlzdGUgZGUgbOKAmWFsYnVtIGVudGllciwgYWRhcHTDqSBwb3VyIGxlIHRyaSIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImRhdGUiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdGUgZGUgY3LDqWF0aW9uIGRlcyBkb25uw6llcyAoc291cyBmb3JtZSBkZSBzdHJ1Y3R1cmUgR0RhdGUpIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgImRhdGUgZXQgaGV1cmUiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgIiIKLSJkYXRlIGV0IGhldXJlIGRlIGNyw6lhdGlvbiBkZXMgZG9ubsOpZXMgKHNvdXMgZm9ybWUgZGUgc3RydWN0dXJlIEdzdERhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJnZW5yZSIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICJnZW5yZSBhdXF1ZWwgY2VzIGRvbm7DqWVzIGFwcGFydGllbm5lbnQiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJjb21tZW50YWlyZSIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICJ0ZXh0ZSBsaWJyZSBkw6ljcml2YW50IGxlcyBkb25uw6llcyIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImNvbW1lbnRhaXJlIMOpdGVuZHUiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJ0ZXh0ZSBsaWJyZSBkw6ljcml2YW50IGxlcyBkb25uw6llcyBzb3VzIGxhIGZvcm1lIGNsw6k9dmFsZXVyIG91ICIKLSJjbMOpW2VuXT1jb21tZW50YWlyZSIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAibnVtw6lybyBkZSBwaXN0ZSIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJudW3DqXJvIGRlIHBpc3RlIGF1IHNlaW4gZOKAmXVuZSBjb2xsZWN0aW9uIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgIm5vbWJyZSBkZSBwaXN0ZXMiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJub21icmUgZGUgcGlzdGVzIGRhbnMgbGEgY29sbGVjdGlvbiBkb250IGNlcyBkb25uw6llcyBmb250IHBhcnRpZSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICJudW3DqXJvIGRlIGRpc3F1ZSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIm51bcOpcm8gZGUgZGlzcXVlIGF1IHNlaW4gZOKAmXVuZSBjb2xsZWN0aW9uIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAibm9tYnJlIGRlIGRpc3F1ZXMiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAibm9tYnJlIGRlIGRpc3F1ZXMgZGFucyBsYSBjb2xsZWN0aW9uIGRvbnQgY2VzIGRvbm7DqWVzIGZvbnQgcGFydGllIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgImVtcGxhY2VtZW50IgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJPcmlnaW5lIGR1IG3DqWRpYSBzb3VzIGZvcm1lIGTigJlVUkkgKGVtcGxhY2VtZW50IGRlIGzigJlow6liZXJnZW1lbnQgZOKAmW9yaWdpbmUgZHUgIgotImZpY2hpZXIgb3UgZHUgZmx1eCkiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAic2l0ZSBXZWIiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICJTaXRlIFdlYiBkZSBjZSBtw6lkaWEgKHBhciBleC4gc2l0ZSBkZSBs4oCZYXJ0aXN0ZSBvdSBkdSBmaWxtKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJkZXNjcmlwdGlvbiIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAidGV4dGUgY291cnQgZMOpY3JpdmFudCBsZSBjb250ZW51IGRlcyBkb25uw6llcyIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgInZlcnNpb24iCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAidmVyc2lvbiBkZSBjZXMgZG9ubsOpZXMiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gdm9pciBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJvcmdhbmlzYXRpb24iCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgImNvcHlyaWdodCIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgImluZm9ybWF0aW9uIHN1ciBsZSBjb3B5cmlnaHQgZGVzIGRvbm7DqWVzIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiVVJJIGR1IGNvcHlyaWdodCIKLQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJIHZlcnMgbOKAmWluZm9ybWF0aW9uIGRlIGNvcHlyaWdodCBkZXMgZG9ubsOpZXMiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJjb2TDqSBwYXIiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICJub20gZGUgbGEgcGVyc29ubmUgb3UgZGUgbOKAmW9yZ2FuaXNhdGlvbiBxdWkgYSBlZmZlY3R1w6kgbGUgY29kYWdlIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAiY29udGFjdCIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImluZm9ybWF0aW9ucyBzdXIgbGUgY29udGFjdCIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgImxpY2VuY2UiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImxpY2VuY2UgZGVzIGRvbm7DqWVzIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgIlVSSSBkZSBsYSBsaWNlbmNlIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgdmVycyBsYSBsaWNlbmNlIGRlcyBkb25uw6llcyIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAiaW50ZXJwcsOodGUiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVyc29ubmUocykgcXVpIGludGVycHLDqHRlKG50KSIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJjb21wb3NpdGV1ciIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAicGVyc29ubmUocykgcXVpIGEvb250IGNvbXBvc8OpIGzigJllbnJlZ2lzdHJlbWVudCIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAicsOpYWxpc2F0ZXVyIgotCi1tc2dpZCAiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IgotbXNnc3RyICJkw6l0YWlscyBzdXIgbGUgcsOpYWxpc2F0ZXVyIC8gaW50ZXJwcsOodGUiCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAiZHVyw6llIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgImxvbmd1ZXVyIGVuIHVuaXTDqSBkZSB0ZW1wcyBHU3RyZWFtZXIgKG5hbm9zZWNvbmRlcykiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAiY29kZWMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIGRlIHN0b2NrYWdlIGRlcyBkb25uw6llcyIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJjb2RlYyB2aWTDqW8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIGRlIHN0b2NrYWdlIGRlcyBkb25uw6llcyB2aWTDqW8iCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAiY29kZWMgYXVkaW8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIGRlIHN0b2NrYWdlIGRlcyBkb25uw6llcyBhdWRpbyIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJjb2RlYyBkZXMgc291cy10aXRyZXMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIGRlIHN0b2NrYWdlIGRlcyBzb3VzLXRpdHJlcyIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgImZvcm1hdCBkdSBjb250ZW5ldXIiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiZm9ybWF0IGR1IGNvbnRlbmV1ciBkYW5zIGxlcXVlbCBzb250IHN0b2Nrw6llcyBsZXMgZG9ubsOpZXMiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJkw6liaXQiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJkw6liaXQgZXhhY3Qgb3UgbW95ZW4gZW4gYml0cyBwYXIgc2Vjb25kZSIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAiZMOpYml0IG5vbWluYWwiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJkw6liaXQgbm9taW5hbCBlbiBiaXRzIHBhciBzZWNvbmRlIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIgotbXNnc3RyICJkw6liaXQgbWluaW11bSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgImTDqWJpdCBtaW5pbXVtIGVuIGJpdHMgcGFyIHNlY29uZGUiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgImTDqWJpdCBtYXhpbXVtIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiZMOpYml0IG1heGltdW0gZW4gYml0cyBwYXIgc2Vjb25kZSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImNvZGV1ciIKLQotbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgImNvZGV1ciB1dGlsaXPDqSBwb3VyIGxlIGNvZGFnZSBkdSBmbHV4IgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzaW9uIGR1IGNvZGV1ciIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgInZlcnNpb24gZHUgY29kZXVyIHV0aWxpc8OpIHBvdXIgbGUgY29kYWdlIGR1IGZsdXgiCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgIm51bcOpcm8gZGUgc8OpcmllIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAibnVtw6lybyBkZSBzw6lyaWUgZGUgbGEgcGlzdGUiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgImdhaW4gZGUgcGlzdGUgcmVwbGF5Z2FpbiIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgImdhaW4gZGUgbGEgcGlzdGUgZW4gZMOpY2liZWxzIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJjcsOqdGUgZGUgcGlzdGUgcmVwbGF5Z2FpbiIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJjcsOqdGUgZGUgbGEgcGlzdGUiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgImdhaW4gZOKAmWFsYnVtIHJlcGxheWdhaW4iCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJnYWluIGRlIGzigJlhbGJ1bSBlbiBkw6ljaWJlbHMiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgImNyw6p0ZSBk4oCZYWxidW0gcmVwbGF5Z2FpbiIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJjcsOqdGUgZGUgbOKAmWFsYnVtIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgIm5pdmVhdSBkZSByw6lmw6lyZW5jZSByZXBsYXlnYWluIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAibml2ZWF1IGRlIHLDqWbDqXJlbmNlIGRlcyB2YWxldXJzIGRlIGdhaW4gZGUgcGlzdGUgZXQgZOKAmWFsYnVtIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAiY29kZSBsaW5ndWlzdGlxdWUiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICJjb2RlIGxpbmd1aXN0aXF1ZSBkdSBmbHV4LCBzZWxvbiBsYSBub3JtZSBJU08tNjM5LTEgb3UgSVNPLTYzOS0yIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAibm9tIGRlIGxhIGxhbmd1ZSIKLQotbXNnaWQgImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIgotbXNnc3RyICJub20gZXhwbGljaXRlIGRlIGxhIGxhbmd1ZSBkZSBjZSBmbHV4IgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgImltYWdlIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiaW1hZ2UgbGnDqWUgw6AgY2UgZmx1eCIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiaW1hZ2UgZOKAmWFwZXLDp3UiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImltYWdlIGTigJlhcGVyw6d1IGxpw6llIMOgIGNlIGZsdXgiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJwacOoY2Ugam9pbnRlIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZmljaGllciBqb2ludCDDoCBjZSBmbHV4IgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAicHVsc2F0aW9ucyBwYXIgbWludXRlIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgIm5vbWJyZSBkZSBwdWxzYXRpb25zIHBhciBtaW51dGUgZGUgbGEgcGlzdGUgYXVkaW8iCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAibW90cy1jbMOpcyIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICJtb3RzLWNsw6lzIGTDqWNyaXZhbnQgbGUgY29udGVudSwgc8OpcGFyw6lzIHBhciBkZXMgdmlyZ3VsZXMiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibm9tIGTigJllbXBsYWNlbWVudCBnw6lvZ3JhcGhpcXVlIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLSJkZXNjcmlwdGlvbiBpbnRlbGxpZ2libGUgZGUgbOKAmWVuZHJvaXQgb8O5IGxlIG3DqWRpYSBhIMOpdMOpIGVucmVnaXN0csOpIG91IHByb2R1aXQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgImxhdGl0dWRlIGRlIGzigJllbXBsYWNlbWVudCIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotImxhdGl0dWRlIGRlIGzigJllbmRyb2l0IGfDqW9ncmFwaGlxdWUgb8O5IGxlIG3DqWRpYSBhIMOpdMOpIGVucmVnaXN0csOpIG91IHByb2R1aXQsICIKLSJlbiBkZWdyw6lzLCBjb25mb3Jtw6ltZW50IMOgIFdHUzg0ICh6w6lybyDDoCBs4oCZw6lxdWF0ZXVyLCB2YWxldXJzIG7DqWdhdGl2ZXMgZGFucyAiCi0ibOKAmWjDqW1pc3Bow6hyZSBzdWQpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAibG9uZ2l0dWRlIGRlIGzigJllbXBsYWNlbWVudCIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSJsb25naXR1ZGUgZGUgbOKAmWVuZHJvaXQgZ8Opb2dyYXBoaXF1ZSBvw7kgbGUgbcOpZGlhIGEgw6l0w6kgZW5yZWdpc3Ryw6kgb3UgcHJvZHVpdCwgIgotImVuIGRlZ3LDqXMsIGNvbmZvcm3DqW1lbnQgw6AgV0dTODQgKHrDqXJvIGF1IHByZW1pZXIgbcOpcmlkaWVuIGRlIEdyZWVud2ljaCAoR0IpLCAiCi0idmFsZXVycyBuw6lnYXRpdmVzIHBvdXIgbGVzIGxvbmdpdHVkZXMgdmVycyBs4oCZb3Vlc3QpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiYWx0aXR1ZGUgZGUgbOKAmWVtcGxhY2VtZW50IgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotImFsdGl0dWRlIGRlIGzigJllbmRyb2l0IGfDqW9ncmFwaGlxdWUgb8O5IGxlIG3DqWRpYSBhIMOpdMOpIGVucmVnaXN0csOpIG91IHByb2R1aXQsICIKLSJlbiBtw6h0cmVzLCBjb25mb3Jtw6ltZW50IMOgIFdHUzg0ICh6w6lybyBhdSBuaXZlYXUgbW95ZW4gZGUgbGEgbWVyKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICJwYXlzIGRlIGzigJllbXBsYWNlbWVudCIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJwYXlzIChub20gYW5nbGFpcykgb8O5IGxlIG3DqWRpYSBhIMOpdMOpIGVucmVnaXN0csOpIG91IHByb2R1aXQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAidmlsbGUgZGUgbOKAmWVtcGxhY2VtZW50IgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgInZpbGxlIChub20gYW5nbGFpcykgb8O5IGxlIG3DqWRpYSBhIMOpdMOpIGVucmVnaXN0csOpIG91IHByb2R1aXQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCi1tc2dzdHIgInpvbmUgbG9jYWxlIGRlIGzigJllbXBsYWNlbWVudCIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0idW4gZW5kcm9pdCBkZSBsYSBsb2NhbGl0w6kgb8O5IGxlIG3DqWRpYSBhIMOpdMOpIGVucmVnaXN0csOpIG91IHByb2R1aXQgKHBhciBleC4gIgotImxlIHZvaXNpbmFnZSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAiZXJyZXVyIGhvcml6b250YWxlIGRlIGzigJllbXBsYWNlbWVudCIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICJlcnJldXIgcHJvYmFibGUgZGVzIG1lc3VyZXMgZGUgcG9zaXRpb24gaG9yaXpvbnRhbGUgKGVuIG3DqHRyZXMpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJ2aXRlc3NlIGRlIGTDqXBsYWNlbWVudCBnw6lvbG9jYWxpc8OpIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICIiCi0idml0ZXNzZSBkdSBtb3V2ZW1lbnQgKGVuIG0vcykgZHUgcMOpcmlwaMOpcmlxdWUgZGUgY2FwdHVyZSBkdXJhbnQgbGEgY2FwdHVyZSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgImRpcmVjdGlvbiBkdSBkw6lwbGFjZW1lbnQgZ8Opb2xvY2FsaXPDqSIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotImluZGlxdWUgbGEgZGlyZWN0aW9uIGR1IGTDqXBsYWNlbWVudCBkdSBww6lyaXBow6lyaXF1ZSBlZmZlY3R1YW50IGxhIGNhcHR1cmUgIgotImTigJl1biBtw6lkaWEuIEVsbGUgZXN0IGluZGlxdcOpZSBlbiBkZWdyw6lzLCBwYXIgdW4gbm9tYnJlIMOgIHZpcmd1bGVzLiAwIGluZGlxdWUgIgotImxlIG5vcmQgZ8Opb2dyYXBoaXF1ZSBldCBsZSBub21icmUgYXVnbWVudGUgZGFucyBsZSBzZW5zIGhvcmFpcmUiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgImRpcmVjdGlvbiBkZSBsYSBjYXB0dXJlIGfDqW9sb2NhbGlzw6llIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iaW5kaXF1ZSBsYSBkaXJlY3Rpb24gZHUgcMOpcmlwaMOpcmlxdWUgYXUgbW9tZW50IGRlIGxhIGNhcHR1cmUgZOKAmXVuIG3DqWRpYS4gIgotIkVsbGUgZXN0IGluZGlxdcOpZSBlbiBkZWdyw6lzLCBwYXIgdW4gbm9tYnJlIMOgIHZpcmd1bGVzLiAwIGluZGlxdWUgbGUgbm9yZCAiCi0iZ8Opb2dyYXBoaXF1ZSBldCBsZSBub21icmUgYXVnbWVudGUgZGFucyBsZSBzZW5zIGhvcmFpcmUiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAibm9tIGTigJnDqW1pc3Npb24iCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICJOb20gZGUgbOKAmcOpbWlzc2lvbiBUViwgZHUgcG9kY2FzdCBvdSBkZSBsYSBzw6lyaWUgZOKAmW/DuSBwcm92aWVudCBsZSBtw6lkaWEiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgIm5vbSBk4oCZw6ltaXNzaW9uIHBvdXIgbGUgdHJpIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0iTm9tIGRlIGzigJnDqW1pc3Npb24gVFYsIGR1IHBvZGNhc3Qgb3UgZGUgbGEgc8OpcmllIGTigJlvw7kgcHJvdmllbnQgbGUgbcOpZGlhLCBkYW5zICIKLSJs4oCZb3B0aXF1ZSBkdSB0cmkiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAibnVtw6lybyBk4oCZw6lwaXNvZGUiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiTGUgbnVtw6lybyBk4oCZw6lwaXNvZGUgZGUgbGEgc8OpcmllIGRvbnQgZmFpdCBwYXJ0aWUgbGUgbcOpZGlhIgotCi1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAibnVtw6lybyBkZSBzYWlzb24iCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiTGUgbnVtw6lybyBkZSBsYSBzYWlzb24gZGUgbOKAmcOpbWlzc2lvbiBkb250IGZhaXQgcGFydGllIGxlIG3DqWRpYSIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAicGFyb2xlcyIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiTGVzIHBhcm9sZXMgZHUgbcOpZGlhLCB1dGlsaXPDqSBzdXJ0b3V0IHBvdXIgbGVzIGNoYW5zb25zIgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgIm5vbSBkdSBjb21wb3NpdGV1ciBwb3VyIGxlIHRyaSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvbm5lKHMpIHF1aSBvbnQgY29tcG9zw6kgbOKAmWVucmVnaXN0cmVtZW50LCBkYW5zIHVuIGJ1dCBkZSB0cmkiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAicmVncm91cGVtZW50IgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iVW5pdMOpIGRlIGdyb3VwZSBwb3VyIGRlcyBtw6lkaWFzIHF1aSBjb250aWVubmVudCBwbHVzaWV1cnMgcGlzdGVzLCBjb21tZSBsZXMgIgotImRpZmbDqXJlbnRzIG1vcmNlYXV4IGTigJl1biBjb25jZXJ0by4gRGUgcGx1cyBoYXV0IG5pdmVhdSBxdWUgbGEgcGlzdGUsIG1haXMgZGUgIgotInBsdXMgYmFzIG5pdmVhdSBxdWUgbOKAmWFsYnVtIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgIsOpdmFsdWF0aW9uIHBhciBs4oCZdXRpbGlzYXRldXIiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIk5vdGUgYXR0cmlidcOpZSBwYXIgdW5lIHBlcnNvbm5lLiBQbHVzIGxhIG5vdGUgZXN0IMOpbGV2w6llLCBwbHVzIGxhIHBlcnNvbm5lICIKLSJhcHByw6ljaWUgY2UgbcOpZGlhIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiZmFicmljYW50IGR1IHDDqXJpcGjDqXJpcXVlIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiRmFicmljYW50IGR1IHDDqXJpcGjDqXJpcXVlIHV0aWxpc8OpIHBvdXIgY3LDqWVyIGNlIG3DqWRpYSIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAibW9kw6hsZSBkdSBww6lyaXBow6lyaXF1ZSIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTW9kw6hsZSBkdSBww6lyaXBow6lyaXF1ZSB1dGlsaXPDqSBwb3VyIGNyw6llciBjZSBtw6lkaWEiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJub20gZGUgbOKAmWFwcGxpY2F0aW9uIgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICJBcHBsaWNhdGlvbiB1dGlsaXPDqWUgcG91ciBjcsOpZXIgY2UgbcOpZGlhIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiZG9ubsOpZXMgYXBwbGljYXRpdmVzIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiRG9ubsOpZXMgYXJiaXRyYWlyZXMgZGUgbOKAmWFwcGxpY2F0aW9uIMOgIHPDqXJpYWxpc2VyIGRhbnMgbGUgbcOpZGlhIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIm9yaWVudGF0aW9uIGRlIGzigJlpbWFnZSIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiIgotIkluZGlxdWUgbGEgbWFuacOocmUgZGUgcGl2b3RlciBvdSBkZSByZXRvdXJuZXIgbOKAmWltYWdlIGF2YW50IGRlIGzigJlhZmZpY2hlciIKLQotbXNnaWQgInB1Ymxpc2hlciIKLW1zZ3N0ciAiw6lkaXRldXIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk5vbSBkZSBs4oCZw6l0aXF1ZXR0ZSBvdSBkZSBs4oCZw6lkaXRldXIiCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAiaW50ZXJwcsOpdMOpLXBhciIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0iSW5mb3JtYXRpb24gc3VyIGxlcyBwZXJzb25uZXMgcXVpIG9udCBmYWl0IHVuIHJlbWl4IGV0IGludGVycHLDqXRhdGlvbnMgIgotInNpbWlsYWlyZXMiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAibWlkaS1iYXNlLW5vdGUiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgIk51bcOocm8gZGUgbm90ZSBNaWRpIGTigJl1bmUgcGlzdGUgYXVkaW8uIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICJkb25uw6llcy1wcml2w6llcyIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiRG9ubsOpZXMgcHJpdsOpZXMiCi0KLW1zZ2lkICIsICIKLW1zZ3N0ciAiLCAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gVVJJIGhhbmRsZXIgZm9yIHRoZSAlcyBwcm90b2NvbCBmb3VuZCIKLW1zZ3N0ciAiQXVjdW4gZ2VzdGlvbm5haXJlIGTigJlVUkkgdHJvdXbDqSBwb3VyIGxlIHByb3RvY29sZSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAic2Now6htYSBVUkkgwqvCoCVzwqDCuyBub24gcHJpcyBlbiBjaGFyZ2UiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiRVJSRVVSwqA6IGRlIGzigJnDqWzDqW1lbnQgJXPCoDogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJbmZvcm1hdGlvbiBkZSBkw6lib2dhZ2Ugc3VwcGzDqW1lbnRhaXJlwqA6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJsaWVuIHNhbnMgc291cmNlIFtzaW5rPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICJsaWVuIHNhbnMgc2luayBbc291cmNlPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgInBhcyBkZSBwcm9wcmnDqXTDqSDCq8KgJXPCoMK7IGRhbnMgbOKAmcOpbMOpbWVudCDCq8KgJXPCoMK7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6lmaW5pciBsYSBwcm9wcmnDqXTDqSDCq8KgJXPCoMK7IGRlIGzigJnDqWzDqW1lbnQgwqvCoCVzwqDCuyDDoCDCq8KgJXPCoMK7IgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIsOJY2hlYyBkdSBjaGFyZ2VtZW50IGR5bmFtaXF1ZSBkaWZmw6lyw6kuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNvbm5lY3RlciAlcyDDoCAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAicGFzIGTigJnDqWzDqW1lbnQgwqvCoCVzwqDCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAicsOpZsOpcmVuY2UgwqvCoCVzwqDCuyBpbmF0dGVuZHVlIC0gaWdub3LDqSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgInBhZC1yw6lmw6lyZW5jZSDCq8KgJXPCoMK7IGluYXR0ZW5kdWUgLSBpZ25vcsOpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAiaW1wb3NzaWJsZSBk4oCZYW5hbHlzZXIgbGUgY2FwcyDCq8KgJXPCoMK7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAicGFzIGTigJnDqWzDqW1lbnQgZOKAmWVudHLDqWUgcG91ciBs4oCZVVJJIMKrwqAlc8KgwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgInBhcyBk4oCZw6lsw6ltZW50IHNvdXJjZSBwb3VyIGzigJlVUkkgwqvCoCVzwqDCuyIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiZXJyZXVyIGRlIHN5bnRheGUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJjb250ZW5ldXIgwqvCoCVzwqDCuyB2aWRlLCBub24gYXV0b3Jpc8OpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAicGFzIGRlIGNvbnRlbmV1ciDCq8KgJXPCoMK7LCBkw6lwYXF1ZXRhZ2UgZGVzIMOpbMOpbWVudHMiCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAicGlwZWxpbmUgdmlkZSBub24gYXV0b3Jpc8OpIgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIkRlIG5vbWJyZXV4IHRhbXBvbnMgc29udCDDqWxpbWluw6lzLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiUHJvYmzDqG1lIGludGVybmUgZGUgZmx1eCBkZSBkb25uw6llcy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJFcnJldXIgaW50ZXJuZSBkZSBmbHV4IGRlIGRvbm7DqWVzLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiRXJyZXVyIGTigJlob3Jsb2dlIGludGVybmUuIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIG1hcHBlciBsZXMgYnVmZmVyLiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJDYXBhY2l0w6lzIGRlIGZpbHRyYWdlIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLSJSZXN0cmVpbnQgbGVzIGNhcGFjaXTDqXMgcG9zc2libGVzIGF1dG9yaXPDqWVzIChOVUxMIHNpZ25pZmllIEFOWSkuIExhICIKLSJkw6lmaW5pdGlvbiBkZSBjZXR0ZSBwcm9wcmnDqXTDqSBuw6ljZXNzaXRlIHVuZSByw6lmw6lyZW5jZSDDoCBs4oCZb2JqZXQgR1NUQ2FwcyAiCi0iZm91cm5pLiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIk1vZGUgbWFqdXNjdWxlIGFjdGl2w6kiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICJGaWx0cmUgZGUgY29tcG9ydGVtZW50IGRlIG1vZGlmaWNhdGlvbiBkZXMgbWFqdXNjdWxlcyIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIkF1Y3VuIHLDqXBlcnRvaXJlIHRlbXBvcmFpcmUgaW5kaXF1w6kuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpY2hpZXIgdGVtcG9yYWlyZSDCq8KgJXPCoMK7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkltcG9zc2libGUgZOKAmW91dnJpciBsZSBmaWNoaWVyIMKrwqAlc8KgwrsgZW4gbGVjdHVyZS4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICJFcnJldXIgZOKAmcOpY3JpdHVyZSBkYW5zIGxlIGZpY2hpZXIgZGUgdMOpbMOpY2hhcmdlbWVudC4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiQXVjdW4gbm9tIGRlIGZpY2hpZXIgaW5kaXF1w6kgcG91ciBs4oCZw6ljcml0dXJlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkltcG9zc2libGUgZOKAmW91dnJpciBsZSBmaWNoaWVyIMKrwqAlc8KgwrsgZW4gw6ljcml0dXJlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgZmVybWV0dXJlIGR1IGZpY2hpZXIgwqvCoCVzwqDCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkVycmV1ciBkZSBwb3NpdGlvbm5lbWVudCBkYW5zIGxlIGZpY2hpZXIgwqvCoCVzwqDCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkVycmV1ciBk4oCZw6ljcml0dXJlIGRhbnMgbGUgZmljaGllciDCq8KgJXPCoMK7LiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJBdWN1biBub20gZGUgZmljaGllciBpbmRpcXXDqSBwb3VyIGxhIGxlY3R1cmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJlvYnRlbmlyIGRlcyBpbmZvcyBzdXIgwqvCoCVzwqDCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiwqvCoCVzwqDCuyBlc3QgdW4gcsOpcGVydG9pcmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiTGUgZmljaGllciDCq8KgJXPCoMK7IGVzdCB1biBjb25uZWN0ZXVyLiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIsOJY2hlYyBzdWl0ZSBhdXggaXTDqXJhdGlvbnMgZGVtYW5kw6llcy4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJjYXBhY2l0w6lzIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAiY2FwYWNpdMOpcyBkw6l0ZWN0w6llcyBkYW5zIGxlIGZsdXgiCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtaW5pbXVtIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAiZm9yY2VyIGxlcyBjYXBhY2l0w6lzIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgImZvcmNlIGxlcyBjYXBhY2l0w6lzIHNhbnMgZmFpcmUgZGUgcmVjaGVyY2hlIGRlIHR5cGUiCi0KLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiTGUgZmx1eCBuZSBjb250aWVudCBwYXMgYXNzZXogZGUgZG9ubsOpZXMuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJMZSBmbHV4IG5lIGNvbnRpZW50IGF1Y3VuZSBkb25uw6llLiIKLQotbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCi1tc2dzdHIgIkludGVyZmFjZXMgaW1wbMOpbWVudMOpZXPCoDpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICJhY2PDqHMgZW4gbGVjdHVyZSIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICJhY2PDqHMgZW4gw6ljcml0dXJlIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAib2Jzb2zDqHRlIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJjb250csO0bGFibGUiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAibW9kaWZpYWJsZSBlbiBs4oCZw6l0YXQgTlVMTCwgUkVBRFksIFBBVVNFRCBvdSBQTEFZSU5HIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAibW9kaWZpYWJsZSB1bmlxdWVtZW50IGVuIGzigJnDqXRhdCBOVUxMLCBSRUFEWSBvdSBQQVVTRUQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAibW9kaWZpYWJsZSB1bmlxdWVtZW50IGVuIGzigJnDqXRhdCBOVUxMIG91IFJFQURZIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICJGaWNoaWVycyBzdXIgbGlzdGUgbm9pcmXCoDoiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJOb21icmUgdG90YWzCoDoiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkIGZpY2hpZXIgc3VyIGxpc3RlIG5vaXJlIgotbXNnc3RyWzFdICIlZCBmaWNoaWVycyBzdXIgbGlzdGUgbm9pcmUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCBncmVmZm9uIgotbXNnc3RyWzFdICIlZCBncmVmZm9ucyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCDDqWzDqW1lbnQgZGUgbGlzdGUgbm9pcmUiCi1tc2dzdHJbMV0gIiVkIMOpbMOpbWVudHMgZGUgbGlzdGUgbm9pcmUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIGZvbmN0aW9ubmFsaXTDqSIKLW1zZ3N0clsxXSAiJWQgZm9uY3Rpb25uYWxpdMOpcyIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiQWZmaWNoZSB0b3VzIGxlcyDDqWzDqW1lbnRzIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiQWZmaWNoZSB1bmUgbGlzdGUgZGVzIGZpY2hpZXJzIHN1ciBsaXN0ZSBub2lyZSIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iQWZmaWNoZSBzb3VzIGZvcm1lIG1hY2hpbmUgdW5lIGxpc3RlIGRlIGZvbmN0aW9ubmFsaXTDqXMgb2ZmZXJ0ZXMgcGFyIGxlICIKLSJncmVmZm9uIGluZGlxdcOpIG91IHRvdXMgbGVzIGdyZWZmb25zLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxlIGVuIGxpZW4gYXZlYyBkZXMgbcOpY2FuaXNtZXMgIgotImV4dGVybmVzIGTigJlpbnN0YWxsYXRpb24gYXV0b21hdGlxdWUgZGUgZ3JlZmZvbnMiCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIsOJbnVtw6hyZSBsZSBjb250ZW51IGR1IGdyZWZmb24iCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiVsOpcmlmaWUgc2kgbOKAmcOpbMOpbWVudCBvdSBsZSBncmVmZm9uIGluZGlxdcOpIGV4aXN0ZSIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLSJMb3JzIGRlIGxhIHbDqXJpZmljYXRpb24gZGUgbOKAmWV4aXN0ZW5jZSBk4oCZdW4gw6lsw6ltZW50IG91IGTigJl1biBncmVmZm9uLCB2w6lyaWZpZSAiCi0iYXVzc2kgcXVlIHNhIHZlcnNpb24gZXN0IGF1IG1pbmltdW0gbGEgdmVyc2lvbiBpbmRpcXXDqWUiCi0KLW1zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCi1tc2dzdHIgIiIKLSJBZmZpY2hlIGxlcyB0eXBlcyBk4oCZVVJJIHByaXMgZW4gY2hhcmdlLCBhdmVjIGxlcyDDqWzDqW1lbnRzIHF1aSBsZXMgIgotImltcGzDqW1lbnRlbnQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgY2hhcmdlciBsZSBmaWNoaWVyIGRlIGdyZWZmb27CoDogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiQXVjdW4gw6lsw6ltZW50IG91IGdyZWZmb24gwqvCoCVzwqDCu1xuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiU3RhdGlzdGlxdWVzIGTigJlpbmRleCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIk1lc3NhZ2UgbsKwICV1IHJlw6d1IGRlIGzigJnDqWzDqW1lbnQgwqvCoCVzwqDCuyAoJXMpwqA6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiTWVzc2FnZSBuwrAgJXUgcmXDp3UgZHUgY29ubmVjdGV1ciDCq8KgJXM6JXPCoMK7ICglcynCoDogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJNZXNzYWdlIG7CsCAldSByZcOndSBkZSBs4oCZb2JqZXQgwqvCoCVzwqDCuyAoJXMpwqA6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICJNZXNzYWdlIG7CsCV1IHJlw6d1ICglcynCoDogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRU9TIHJlw6d1IGRlIGzigJnDqWzDqW1lbnQgwqvCoCVzwqDCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJCQUxJU0UgVFJPVVbDiUUgIDogZMOpY291dmVydGUgcGFyIGzigJnDqWzDqW1lbnQgwqvCoCVzwqDCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIkJBTElTRSBUUk9VVsOJRSAgOiBkw6ljb3V2ZXJ0ZSBwYXIgbGUgY29ubmVjdGV1ciDCq8KgJXM6JXPCoMK7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiQkFMSVNFIFRST1VWw4lFICA6IGTDqWNvdXZlcnRlIHBhciBs4oCZb2JqZXQgwqvCoCVzwqDCuy5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJCQUxJU0UgVFJPVVbDiUVcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJURE0gVFJPVVbDiUUgICAgIDogZMOpY291dmVydGUgcGFyIGzigJnDqWzDqW1lbnQgwqvCoCVzwqDCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIlRETSBUUk9VVsOJRSAgICAgOiBkw6ljb3V2ZXJ0ZSBwYXIgbOKAmW9iamV0IMKrwqAlc8KgwrsuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiVERNIFRST1VWw4lFXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk/CoDpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiQVZFUlRJU1NFTUVOVMKgOiBkZSBs4oCZw6lsw6ltZW50ICVzwqA6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiUHLDqXBhcmF0aW9uIHRlcm1pbsOpZSwgYXR0ZW50ZSBkZSBsYSBmaW4gZGUgcmVtcGxpc3NhZ2UgZHUgdGFtcG9u4oCmXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJQcsOpcGFyYXRpb24gdGVybWluw6llLCBhdHRlbnRlIGRlIGxhIGZpbiBkdSB0cmFpdGVtZW504oCmXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgIm1pc2UgZW4gbcOpbW9pcmUgdGFtcG9u4oCmIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiTcOpbW9pcmUgdGFtcG9uIHBsZWluZSwgZMOpZmluaXRpb24gZHUgcGlwZWxpbmUgw6AgUExBWUlOR+KAplxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiUmVtcGxpc3NhZ2UgZHUgdGFtcG9uLCBkw6lmaW5pdGlvbiBkdSBwaXBlbGluZSDDoCBQQVVTRUTigKZcbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIlJlZGlzdHJpYnV0aW9uIGRlIGxhdGVuY2XigKZcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJEw6lmaW5pdGlvbiBkZSBs4oCZw6l0YXQgw6AgJXMgY29tbWUgZGVtYW5kw6kgcGFyICVz4oCmXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJJbnRlcnJ1cHRpb27CoDogYXJyw6p0IGR1IHBpcGVsaW5l4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiUHJvZ3Jlc3Npb24gOiAoJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICLDiWzDqW1lbnQgbWFucXVhbnTCoDogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiQ29udGV4dGUgZGUgbOKAmcOpbMOpbWVudCDCq8KgJXPCoMK7wqA6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIkFmZmljaGUgbGVzIGJhbGlzZXMgKGF1c3NpIGNvbm51ZXMgc291cyBsZSBub20gZGUgbcOpdGFkb25uw6llcykiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICJBZmZpY2hlIGxhIHRhYmxlIGRlcyBtYXRpw6hyZXMgKGNoYXBpdHJlcyBldCDDqWRpdGlvbnMpIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiQWZmaWNoZSBkZXMgaW5mb3JtYXRpb25zIGTigJnDqXRhdCBldCBkZXMgbm90aWZpY2F0aW9ucyBkZSBwcm9wcmnDqXTDqXMiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJO4oCZYWZmaWNoZSBwYXMgZOKAmWluZm9ybWF0aW9ucyBkZSBwcm9ncmVzc2lvbiIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiQWZmaWNoZSBkZXMgbWVzc2FnZXMiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotIk5lIHBhcyBhZmZpY2hlciBsZXMgaW5mb3JtYXRpb25zIGRlIGxhIHByb3ByacOpdMOpIHNww6ljaWZpw6llIHNpIGxlIG1vZGUgIgotInZlcmJldXggZXN0IGFjdGl2w6kgKHBldXQgw6p0cmUgdXRpbGlzw6kgcGx1c2lldXJzIGZvaXMpIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiTk9NLVBST1BSScOJVMOJIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJO4oCZaW5zdGFsbGUgcGFzIGRlIGdlc3Rpb25uYWlyZSBkZSBkeXNmb25jdGlvbm5lbWVudCIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiRm9yY2UgbOKAmUVPUyBzdXIgbGVzIHNvdXJjZXMgYXZhbnQgZGUgZmVybWVyIGxlIHBpcGVsaW5lIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJSYXNzZW1ibGUgZXQgYWZmaWNoZSBsZXMgc3RhdGlzdGlxdWVzIGTigJlpbmRleCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRVJSRVVSwqA6IGxlIHBpcGVsaW5lIG7igJlhIHBhcyBwdSDDqnRyZSBjb25zdHJ1aXTCoDogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICJFUlJFVVLCoDogbGUgcGlwZWxpbmUgbuKAmWEgcGFzIHB1IMOqdHJlIGNvbnN0cnVpdC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIkFWRVJUSVNTRU1FTlTCoDogcGlwZWxpbmUgZXJyb27DqcKgOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJFUlJFVVLCoDogbOKAmcOpbMOpbWVudCDCq8KgcGlwZWxpbmXCoMK7IGVzdCBpbnRyb3V2YWJsZS5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJEw6lmaW5pdGlvbiBkdSBwaXBlbGluZSDDoCBQQVVTRUQuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkVSUkVVUsKgOiBsZSBwaXBlbGluZSByZWZ1c2UgZGUgc2UgbWV0dHJlIGVuIHBhdXNlLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICJMZSBwaXBlbGluZSBlc3QgYWN0aWYgZXQgbuKAmWEgcGFzIGJlc29pbiBkZSBwaGFzZSBQUkVST0xM4oCmXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICJMZSBwaXBlbGluZSBlc3QgZW4gcGhhc2UgZGUgUFJFUk9MTOKAplxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJFUlJFVVLCoDogbGUgcGlwZWxpbmUgcmVmdXNlIGRlIHBhc3NlciBlbiBwaGFzZSBkZSBwcsOpcGFyYXRpb24uXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIkxlIHBpcGVsaW5lIGEgdGVybWluw6kgbGEgcGhhc2UgUFJFUk9MTOKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJQYXNzYWdlIGR1IHBpcGVsaW5lIMOgIGxhIHBoYXNlIFBMQVlJTkfigKZcbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiRVJSRVVSwqA6IGxlIHBpcGVsaW5lIHJlZnVzZSBkZSBwYXNzZXIgZW4gbW9kZSBhY3RpZi5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICJFT1Mgw6AgbGEgZmVybWV0dXJlIGVzdCBhY3RpdsOpIC0tIEVPUyBmb3Jjw6kgc3VyIGxlIHBpcGVsaW5lXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiRU9TIMOgIGxhIGZlcm1ldHVyZSBlc3QgYWN0aXbDqSAtLSBhdHRlbnRlIGTigJlFT1MgYXByw6hzIGVycmV1clxuIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIkF0dGVudGUgZOKAmUVPUy5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyByZcOndSAtIGFycsOqdCBkdSBwaXBlbGluZeKAplxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkludGVycnVwdGlvbiBsb3JzIGRlIGzigJlhdHRlbmRlIGTigJlFT1MgLSBhcnLDqnQgZHUgcGlwZWxpbmXigKZcbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJVbmUgZXJyZXVyIHPigJllc3QgcHJvZHVpdGUgbG9ycyBkZSBs4oCZYXR0ZW50ZSBkZSBs4oCZRU9TXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiTOKAmWV4w6ljdXRpb24gc+KAmWVzdCB0ZXJtaW7DqWUgYXByw6hzICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICJEw6lmaW5pdGlvbiBkdSBwaXBlbGluZSDDoCBSRUFEWSAocHLDqnQp4oCmXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIkTDqWZpbml0aW9uIGR1IHBpcGVsaW5lIMOgIE5VTEzigKZcbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkxpYsOpcmF0aW9uIGR1IHBpcGVsaW5l4oCmXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgImJpbiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiRXJyZXVyIGludGVybmUgZGUgZmx1eCBkZSBkb25uw6llcy4iCmRpZmYgLS1naXQgYS9wby9nbC5nbW8gYi9wby9nbC5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMmRiMzcuLjAwMDAwMDAKLS0tIGEvcG8vZ2wuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZ2wucG8gYi9wby9nbC5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxMjkzOS4uMDAwMDAwMAotLS0gYS9wby9nbC5wbworKysgL2Rldi9udWxsCkBAIC0xLDEzNzUgKzAsMCBAQAotIyBHYWxpY2lhbiB0cmFuc2xhdGlvbnMgZm9yIGdzdHJlYW1lciBwYWNrYWdlLgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIyBGcmFuY2lzY28gRGnDqWd1ZXogPGZyYW5kaWVndWV6QHVidW50dS5jb20+LCAyMDExLgotIyBGcmFuIERpZWd1ZXogPGZyYW5kaWVndWV6QGdub21lLm9yZz4sIDIwMTIuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS4wLjNcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0xMi0xNSAwMzoyOSswMjAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBGcmFuIERpZWd1ZXogPGZyYW5kaWVndWV6QHVidW50dS5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogR2FsaWNpYW4gPHByb3hlY3RvQHRyYXNuby5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IGdsXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCi0iWC1HZW5lcmF0b3I6IFZpcnRhYWwgMC43LjFcbiIKLSJYLVByb2plY3QtU3R5bGU6IGdub21lXG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIkltcHJpbWlyIGEgdmVyc2nDs24gZGUgR1N0cmVhbWVyIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIkZhY2VyIHRvZGFzIGFzIGFkdmVydGVuY2lhcyBmYXRhaXMiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiSW1wcmltaXIgYXMgY2F0ZWdvcsOtYXMgZGUgZGVwdXJhY2nDs24gZGlzcG/DscOtYmVpcyBlIHNhw61yIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIk5pdmVsIGRlIGRlcHVyYWNpw7NuIHBvciBvbWlzacOzbiBkZXNkZSAxIChzw7MgZXJybykgYXTDqSA1ICh0b2RvKSBvdSAwIHNlbiBzYcOtZGEiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiTklWRUwiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iTGlzdGEgZGUgcGFyZXMgbm9tZV9jYXRlZ29yw61hOm5pdmVsIHNlcGFyYWRvcyBwb3IgY29tYXMgcGFyYSBlc3RhYmVsZWNlciAiCi0ibml2ZWlzIGVzcGVjw61maWNvcyBwYXJhIGFzIGNhdGVnb3LDrWFzIGluZGl2aWR1YWlzLiBFeGVtcGxvOiBHU1RfQVVUT1BMVUc6NSwiCi0iR1NUX0VMRU1FTlRfKjozIgotCi1tc2dpZCAiTElTVCIKLW1zZ3N0ciAiTElTVEEiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiRGVzYWN0aXZhciBhIGNvbG9yYWNpw7NuIGRhIHNhw61kYSBkZXB1cmFkYSIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiRGVzYWN0aXZhciBkZXB1cmFjacOzbiIKLQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICJBY3RpdmFyIGEgc2HDrWRhIGRldGFsbGFkYSBkbyBkaWFnbsOzc3RpY28gZGUgY2FyZ2EgZGUgZW5nYWRpZG9zIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiUnV0YXMgc2VwYXJhZGFzIHBvciBwdW50byBlIGNvbWEgY29udGVuZG8gb3MgZW5nYWRpZG9zIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIlJVVEFTIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIkxpc3RhIGRlIGVuZ2FkaWRvcyBwYXJhIHByZWNhcmdhciBzZXBhcmFkb3MgcG9yIGNvbWFzIGFkZW1haXMgZGEgbGlzdGEgIgotImFsbWFjZW5hZGEgbmEgdmFyacOhYmVsIGRlIGNvbnRvcm5vIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIkNPTVBMRU1FTlRPUyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSJEZXNhY3RpdmFyIGEgY2FwdHVyYSBkZSBmYWxsb3MgZGUgc2VnbWVudGFjacOzbiBkdXJhbnRlIGEgY2FyZ2EgZGUgZW5nYWRpZG9zIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIkRlc2FjdGl2YXIgYSBhY3R1YWxpemFjacOzbiBkbyByZXhpc3RybyIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIkRlc2FjdGl2YXIgbyBsYW56YW1lbnRvIGR1biBwcm9jZXNvIGRlIGF4dWRhIGFvIGVzY2FuZWFyIG8gcmV4aXN0cm8iCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiT3BjacOzbnMgZGUgR1N0cmVhbWVyIgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiTW9zdHJhciBhcyBvcGNpw7NucyBkZSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiT3BjacOzbiBkZXNjb8OxZWNpZGEiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBlbmNvbnRyb3UgdW4gZXJybyB4ZXJhbCBubyBuw7pjbGVvIGRhIGJpYmxpb3RlY2EuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSJPcyBkZXNlbnZvbHZlZG9yZXMgZGUgR1N0cmVhbWVyIGZvcm9uIGRlbWFzaWFkbyB2YWdvcyBwYXJhIGVuZ2FkaXIgdW4gY8OzZGlnbyAiCi0iZGUgZXJybyBhIGVzdGUgZXJyby4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiRXJybyBpbnRlcm5vIGRlIEdTdHJlYW1lcjogY8OzZGlnbyBub24gaW1wbGVtZW50YWRvLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIlByb2R1Y2l1c2UgdW4gZXJybyBkZSBHU3RyZWFtZXI6IHByb2R1Y2l1c2UgdW4gZmFsbG8gZHVyYW50ZSBvIGNhbWJpbyBkZSAiCi0iZXN0YWRvIGUgYWxnw7puIGVsZW1lbnRvIGZyYWNhc291IGFvIHB1YmxpY2FyIGEgbWVuc2F4ZSBkZSBlcnJvICIKLSJjb3JyZXNwb25kZW50ZSBjbyBtb3Rpdm8gZG8gZmFsbG8uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm8gaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGRlIGRlc3ByYXphbWVudG8uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm8gaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvcyBmw61vcyIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkVycm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBkZSBuZWdvY2lhY2nDs24uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJybyBpbnRlcm5vIGRlIEdTdHJlYW1lcjogcHJvYmxlbWEgY29zIGV2ZW50b3MuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJFcnJvIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9ibGVtYSBjb2EgYnVzY2EuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJFcnJvIGludGVybm8gZGUgR1N0cmVhbWVyOiBwcm9iZW1hIGNvYXMgY2FwYWNpZGFkZXMuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm8gaW50ZXJubyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGNvYXMgZXRpcXVldGFzLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIsOBIHPDumEgaW5zdGFsYWNpw7NuIGRlIEdTdHJlYW1lciBmw6FsdGFsbGUgdW4gZW5nYWRpZG8uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJybyBkZSBHU3RyZWFtZXI6IHByb2JsZW1hIGRlIHJlbG94by4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotIkVzdGUgYXBsaWNhdGl2byBlc3TDoSB0ZW50YW5kbyB1c2FyIHVuaGEgZnVuY2lvbmFsaWRhZGUgZGUgR1N0cmVhbWVyIHF1ZSBmb2kgIgotImRlc2hhYmlsaXRhZGEuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgYXRvcG91IHVuIGVycm8gZGUgY29tcGF0aWJpbGlkYWRlIHhlcmFsIG5hIGJpYmxpb3RlY2EuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTm9ub24gZm9pIHBvc8OtYmVsIGluaWNpYXIgYSBiaWJsaW90ZWNhIGRlIGNvbXBhdGliaWxpZGFkZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBwZWhhciBhIGJpYmxpb3RlY2EgZGUgYXNpc3RlbmNpYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgY29uZmlndXJhciBhIGJpYmxpb3RlY2EgZGUgYXNpc3RlbmNpYS4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIkVycm8gZGUgY29kaWZpY2FjacOzbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGVuY29udHJvdSB1biBlcnJvIHhlcmFsIGRlIHJlY3Vyc28uIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiUmVjdXJzbyBub24gZW5jb250cmFkby4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJPIHJlY3Vyc28gZXN0w6Egb2N1cGFkbyBvdSBub24gZGlzcG/DscOtYmVsLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBhYnJpciBvIHJlY3Vyc28gcGFyYSBhIHPDumEgbGVjdHVyYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgYWJyaXIgbyByZWN1cnNvIHBhcmEgYSBzw7phIGVzY3JpdHVyYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgYWJyaXIgbyByZWN1cnNvIHBhcmEgYSBzw7phIGxlY3R1cmEgb3UgZXNjcml0dXJhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgcGVjaGFyIG8gcmVjdXJzby4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBsZXIgZGVzZGUgbyByZWN1cnNvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgZXNjcmliaXIgbm8gcmVjdXJzby4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCByZWFsaXphciB1bmhhIGJ1c2NhIG5vIHJlY3Vyc28uIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBzaW5jcm9uaXphciBvIHJlY3Vyc28uIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgb2J0ZXIvZXN0YWJlbGVjZXIgYSBjb25maWd1cmFjacOzbiBkZS9lbiBvIHJlY3Vyc28uIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJOb24gcXVlZGEgZXNwYWNpbyBkaXNwb8Oxw61iZWwgbm8gcmVjdXJzby4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAiTm9uIHF1ZWRhIGVzcGFjaW8gZGlzcG/DscOtYmVsIG5vIHJlY3Vyc28uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgZW5jb250cm91IHVuIGVycm8geGVyYWwgZGUgZmx1eG8uIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iTyBlbGVtZW50byBub24gaW1wbGVtZW50YSB1biBtYW5leGFkb3IgZGVzdGUgZmx1eG8uIFBvciBmYXZvciwgY29tcGxldGUgbyAiCi0iaW5mb3JtZSBlIGVycm8uIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgZGV0ZXJtaW5hciBvIHRpcG8gZGUgZmx1eG8uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICJPIGZsdXhvIMOpIGR1biB0aXBvIGRpZmVyZW50ZSBxdWUgbyBtYW5leGFkbyBwb3IgZXN0ZSBlbGVtZW50by4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIk5vbiBoYWkgdW4gY8OzZGVjIGRpc3Bvw7HDrWJlbCBxdWUgcG9pZGEgbWFuZXhhciBlc3RlIHRpcG8gZGUgZmx1eG8uIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGRlc2NvZGlmaWNhciBvIGZsdXhvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBjb2RpZmljYXIgbyBmbHV4by4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBkZW11bHRpcGxleGFyIG8gZmx1eG8uIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIG11bHRpcGxleGFyIG8gZmx1eG8uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAiTyBmbHV4byBlc3TDoSBubyBmb3JtYXRvIGluY29ycmVjdG8uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIk8gZmx1eG8gZXN0w6EgY2lmcmFkbyBlIG8gZGVzY3JpZnJhZG8gbm9uIMOpIHBvc8OtYmVsLiIKLQotbXNnaWQgIiIKLSJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCi0iYmVlbiBzdXBwbGllZC4iCi1tc2dzdHIgIiIKLSJPIGZsdXhvIGVzdMOhIGNpZnJhZG8gZSBub24gw6kgcG9zw61iZWwgZGVzY2lmcmFsbyBwb3JxdWUgbm9uIHNlIGZvcm5lY2V1IGEgIgotImNoYXZlIGF4ZWl0YWRhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJOb24gaGFpIHVuaGEgbWVuc2F4ZSBkZSBlcnJvIHBhcmEgbyBkb21pbmlvICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICJOb24gaGFpIHVuaGEgbWVuc2F4ZSBkZSBlcnJvIGVzdMOhbmRhciBwYXIgYW8gZG9taW5pbyAlcyBlIGPDs2RpZ28gJWQuIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICJOb24gw6kgcG9zw61iZWwgdXNhciBvIHJlbG94byBzZWxlY2Npb25hZG8gbmEgY2FuYWxpemFjacOzbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgInRpdGxlIgotbXNnc3RyICJ0w610dWxvIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAidMOtdHVsbyB1c2FkbyBkZSBmb3JtYSBjb23Dum4iCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tZSBkZSBvcmRlbmFjacOzbiBkbyB0w610dWxvIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAidMOtdHVsbyB1c2FkbyBjb211bm1lbnRlIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hbWVudG8iCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgImFydGlzdGEiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgInBlcnNvYShzKSByZXNwb25zw6FiZWwoZWlzKSBkYSBncmF2YWNpw7NuIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJub21lIGRlIG9yZGVuYWNpw7NuIGRvIGFydGlzdGEiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvYShzKSByZXNwb25zw6FiZWwoZWlzKSBkYSBncmF2YWNpw7NuIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hbWVudG8iCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAiw6FsYnVtZSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICJvIMOhbGJ1bSBxdWUgY29udGVuIGVzdGVzIGRhdG9zIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgIm5vbWUgZGUgb3JkZW5hY2nDs24gZG8gw6FsYnVtZSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJvIMOhbGJ1bSBxdWUgY29udGVuIGVzdGVzIGRhdG9zIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hbWVudG8iCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgImFydGlzdGEgZG8gw6FsYnVtZSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiTyBhcnRpc3RhIGRvIMOhbGJ1bSBlbnRlaXJvLCBjb21vIHNlIGRlYmVyw61hIG1vc3RyYXIiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIm5vbWUgZGUgb3JkZW5hY2nDs24gZG8gYXJ0aXN0YSBkbyDDoWxidW1lIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICJPIGFydGlzdGEgZG8gw6FsYnVtIGVudGVpcm8sIGNvbW8gc2UgZGViZXLDrWEgb3JkZW5hciIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImRhdGEiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdGEgbmEgcXVlIHNlIGNyZWFyb24gb3MgZGF0b3MgKGNvbW8gZXN0cnV0dXJhIEdEYXRlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXRhIGUgaG9yYSIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZGF0YSBlIGhvcmEgbmEgcXVlIHNlIGNyZWFyb24gb3MgZGF0b3MgKGNvbW8gZXN0cnV0dXJhIEdzdERhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJ4w6luZXJvIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgInjDqW5lcm8gYW8gcXVlIHBlcnRlbmNlbiBlc3RlcyBkYXRvcyIKLQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgImNvbWVudGFyaW8iCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiY29tZW50YXJpbyBkZSB0ZXh0byBzb2JyZSBvcyBkYXRvcyIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImNvbWVudGFyaW8gZXN0ZW5kaWRvIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0idGV4dG8gbGlicmUgY29tZW50YW5kbyBvcyBkYXRvcyBjb21vIGtleT12YWxvciBvdSBrZXlbZ2xdPWZvcm11bGFyaW8gZGUgIgotImNvbWVudGFyaW8iCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIm7Dum1lcm8gZGUgcGlzdGEiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibsO6bWVybyBkZSBwaXN0YSBudW5oYSBjb2xlY2Npw7NuIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgIm7Dum1lcm8gZGUgcGlzdGFzIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAibsO6bWVybyBkZSBwaXN0YXMgbmEgY29sZWNjacOzbiDDoSBxdWUgcGVydGVuY2UgYSBwaXN0YSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICJuw7ptZXJvIGRlIGRpc2NvIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibsO6bWVybyBkbyBkaXNjbyBkZW50cm8gZHVuaGEgY29sZWNjacOzbiIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgIm7Dum1lcm8gZGUgZGlzY29zIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIm7Dum1lcm8gZGUgZGlzY29zIG5hIGNvbGVjY2nDs24gw6EgcXVlIHBlcnRlbmNlIG8gZGlzY28iCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAibG9jYWxpemFjacOzbiIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0iT3JpeGUgZG8gbWVkaW8gY29tbyB1biBVUkkgKGxvY2FsaXphY2nDs24sIG9uZGUgZXN0w6EgYWxveGFkbyBvIGZpY2hlaXJvIG91ICIKLSJmbHV4byBvcml4aW5hbCkiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAic2l0aW8gd2ViIgotCi1tc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKLW1zZ3N0ciAiIgotIlDDoXhpbmEgcHJpbmNpcGFsIHBhcmEgZXN0ZSBtZWRpbyAocC5leC4gcMOheGluYSBwcmluY2lwYWwgZG8gYXJ0aXN0YSBvdSBmaWxtZSkiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAiZGVzY3JpY2nDs24iCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgInRleHRvIGN1cnRvIGRlc2NyaWJpbmRvIG8gY29udGlkbyBkb3MgZGF0b3MiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzacOzbiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJ2ZXJzacOzbiBkZXN0ZXMgZGF0b3MiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0iSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZTsgY29uc3VsdGUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAib3JnYW5pemFjacOzbiIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAibm90YSBkZSBkZXJlaXRvcyBkZSBhdXRvcsOtYSBkb3MgZGF0b3MiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJVUkkgYW9zIGRlcmVpdG9zIGRlIGF1dG9yIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgw6Egbm90YSBkZSBkZXJlaXRvcyBkZSBhdXRvcsOtYSBkb3MgZGF0b3MiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJjb2RpZmljYWRvIHBvciIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIm5vbWUgZGEgcGVyc29hIG91IG9yZ2FuaXphY2nDs24gY29kaWZpY2Fkb3JhIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAiY29udGFjdG8iCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJpbmZvcm1hY2nDs24gZGUgY29udGFjdG8iCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaWNlbnphIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJsaWNlbnphIGRvcyBkYXRvcyIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJVUkkgw6EgbGljZW56YSIKLQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJIMOhIGxpY2VuemEgZG9zIGRhdG9zIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJpbnTDqXJwcmV0ZSIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJwZXJzb2EocykgaW50ZXJwcmV0YW5kbyIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJjb21wb3NpdG9yIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb2EocykgcXVlIGNvbXB1eGVyb24gYSBncmF2YWNpw7NuIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJkdXJhY2nDs24iCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAiZHVyYWNpw7NuIGVuIHVuaWRhZGVzIGRlIHRlbXBvIEdTdHJlYW1lciAobmFub3NlZ3VuZG9zKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJjw7NkZWMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImPDs2RlYyBubyBxdWUgc2UgYWxtYWNlbmFuIG9zIGRhdG9zIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgImPDs2RlYyBkZSB2w61kZW8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImPDs2RlYyBubyBxdWUgc2UgYWxtYWNlbmFuIG9zIGRhdG9zIGRvIHbDrWRlbyIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJjw7NkZWMgZGUgc29uIgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjw7NkZWMgbm8gcXVlIHNlIGFsbWFjZW5hbiBvcyBkYXRvcyBkbyBzb24iCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAiY8OzZGVjIGRvIHN1YnRpdHVsbyIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY8OzZGVjIG5vIHF1ZSBzZSBhbG1hY2VuYW4gb3MgZGF0b3MgZG9zIHN1YnTDrXR1bG9zIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiZm9ybWF0byBkbyBjb250ZWRvciIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJmb3JtYXRvIGRvIGNvbnRlZG9yIG5vIHF1ZSBzZSBhbG1hY2VuYW4gb3MgZGF0b3MiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJ0YXhhIGRlIGJpdHMiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJ0YXhhIGRlIGJpdHMgZXhhY3RhIG91IHByb21lZGlvIGVuIGJpdHMvcyIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAidGF4YSBkZSBiaXRzIG5vbWluYWwiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJ0YXhhIGRlIGJpdHMgbm9taW5hbCBlbiBiaXRzL3MiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgInRheGEgZGUgYml0cyBtw61uaW1hIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAidGF4YSBtw61uaW1hIGRlIGJpdHMgZW4gYml0cy9zIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJ0YXhhIGRlIGJpdHMgbcOheGltYSIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgInRheGEgbcOheGltYSBkZSBiaXRzIGVuIGJpdHMvcyIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImNvZGlmaWNhZG9yIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiY29kaWZpY2Fkb3IgdXNhZG8gcGFyYSBjb2RpZmljYXIgZXN0ZSBmbHV4byIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAidmVyc2nDs24gZG8gY29kaWZpY2Fkb3IiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJ2ZXJzacOzbiBkbyBjb2RpZmljYWRvciB1c2FkbyBwYXJhIGNvZGlmaWNhciBlc3RlIGZsdXhvIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJzZXJpZSIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgIm7Dum1lcm8gZGUgc2VyaWUgZGEgcGlzdGEiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgImdhbmFuY2lhIGRhIHBpc3RhIChSZXBsYXlHYWluKSIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgImdhbmFuY2lhIGRhIHBpc3RhIGVuIGRCIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJwaWNvIGRhIHBpc3RhIChSZXBsYXlHYWluKSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJwaWNvIGRhIHBpc3RhIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJnYW5hbmNpYSBkbyDDoWxidW0gKFJlcGxheUdhaW4pIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiZ2FuYW5jaWEgZG8gw6FsYnVtIGVuIGRCIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJwaWNvIGRvIMOhbGJ1bSAoUmVwbGF5R2FpbikiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAicGljbyBkbyDDoWxidW0iCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAibml2ZWwgZGUgcmVmZXJlbmNpYSAoUmVwbGF5R2FpbikiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICJ2YWxvciBkbyBuaXZlbCBkZSByZWZlcmVuY2lhIGRhIGdhbmFuY2lhIGRhIHBpc3RhIGUgZG8gw6FsYnVtIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAiY8OzZGlnbyBkZSBpZGlvbWEiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICJjw7NkaWdvIGRlIGlkaW9tYSBwYXJhIGVzdGUgZmx1eG8sIGF4dXN0w6FuZG9zZSBhIElTTy02MzktMSBvdSBJU08tNjM5LTIiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJub21lIGRvIGlkaW9tYSIKLQotbXNnaWQgImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIgotbXNnc3RyICJub21lIGZyZWVmb3JtIGRvIGlkaW9tYSBubyBxdWUgZXN0w6EgZXN0ZSBmbHV4byIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJpbWF4ZSIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImltYXhlIHJlbGFjaW9uYWRhIGNvbiBlc3RlIGZsdXhvIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJwcmV2aXN1YWxpemFyIGltYXhlIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJ2aXN0YSBwcmV2aWEgZGEgaW1heGUgcmVsYWNpb25hZGEgY29uIGVzdGUgZmx1eG8iCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJhbmV4byIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImZpY2hlaXJvIGFuZXhvIGEgZXN0ZSBmbHV4byIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgImdvbHBlcyBwb3IgbWludXRvIChicG0pIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgIm7Dum1lcm8gZGUgZ29scGVzIHBvciBtaW51dG8gKGJwbSkgbm8gc29uIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgInBhbGFicmFzIGNoYXZlIgotCi1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgInBhbGFicmFzIGNsYXZlIHNlcGFyYWRhcyBwb3IgY29tYXMgZGVzY3JpYmluZG8gbyBjb250aWRvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgIm5vbWUgZGEgeGVvbG9jYWxpemFjacOzbiIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0iZGVzY3JpY2nDs24gZGEgbG9jYWxpemFjacOzbiBlbnRlbmTDrWJlbCBwb3IgaHVtYW5vcyBkZSBvbmRlIGZvaSBncmF2YWRvIG91ICIKLSJwcm9kdWNpZG8gbyBtZWRpbyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAibGF0aXR1ZGUgZGEgeGVvbG9jYWxpemFjacOzbiIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotImxhdGl0dWRlIHhlb2dyw6FmaWNhIG9uZGUgZm9pIGdyYXZhZG8gb3UgcHJvZHVjaWRvIG8gbWVkaW8sIGVuIGdyYW9zIGNvbmZvcm1lICIKLSJhIFdHUzg0IChjZXJvIMOpIG8gZWN1YWRvciwgdmFsb3JlcyBuZWdhdGl2b3MgcGFyYSBsYXRpdHVkZXMgbWVyaWRpb25haXMpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAibG9ueGl0dWRlIGRhIHhlb2xvY2FsaXphY2nDs24iCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0ibG9ueGl0dWRlIHhlb2dyw6FmaWNhIG9uZGUgZm9pIGdyYXZhZG8gb3UgcHJvZHVjaWRvIG8gbWVkaW8sIGVuIGdyYW9zICIKLSJjb25mb3JtZSBhIFdHUzg0IChjZXJvIMOpIG8gcHJpbWVpcm8gbWVyaWRpYW5vIGVuIEdyZWVud2ljaC9HQiwgdmFsb3JlcyAiCi0ibmVnYXRpdm9zIHBhcmEgbG9ueGl0dWRlcyBvY2NpZGVudGFpcykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICJlbGV2YWNpw7NuIGRhIHhlb2xvY2FsaXphY2nDs24iCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0iZWxldmFjacOzbiB4ZW9ncsOhZmljYSBvbmRlIGZvaSBncmF2YWRvIG91IHByb2R1Y2lkbyBvIG1lZGlvLCBlbiBncmFvcyAiCi0iY29uZm9ybWUgYSBXR1M4NCAoY2VybyDDqSBvIG5pdmVsIG1lZGlvIGRvIG1hcikiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAicGHDrXMgZGEgeGVvbG9jYWxpemFjacOzbiIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJwYcOtcyAobm9tZSBlbiBpbmdsw6lzKSBvbmRlIGZvaSBncmF2YWRvIG91IHByb2R1Y2lkbyBvIG1lZGlvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgImNpZGFkZSBkYSB4ZW9sb2NhbGl6YWNpw7NuIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgImNpZGFkZSAobm9tZSBlbiBpbmdsw6lzKSBvbmRlIGZvaSBncmF2YWRvIG91IHByb2R1Y2lkbyBvIG1lZGlvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJzdWJsb2NhbGl6YWNpw7NuIGRhIHhlb2xvY2FsaXphY2nDs24iCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotInVuaGEgbG9jYWxpemFjacOzbiBudW5oYSBjaWRhZGUgb25kZSBmb2kgZ3JhdmFkbyBvdSBwcm9kdWNpZG8gbyBtZWRpbyAocC5leC4gIgotIm8gYmFycmlvKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJlcnJvIGhvcml6b250YWwgZGUgeGVvbG9jYWxpemFjacOzbiIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICJlcnJvIGVzcGVyYWRvIGRhcyBtZWRpZGFzIGRlIHBvc2ljaW9uYW1lbnRvIGhvcml6b250YWwgKGVuIG1ldHJvcykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgInZlbG9jaWRhZGUgZGUgbW92ZW1lbnRvIGRhIHhlb2xvY2FsaXphY2nDs24iCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLSJ2ZWxvY2lkYWRlIGRlIG1vdmVtZW50byBkbyBkaXNwb3NpdGl2byBkZSBjYXB0dXJhIG1lbnRyZXMgcmVhbGl6YSBhIGNhcHR1cmEsICIKLSJlbiBtL3MiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlY2Npw7NuIGRlIG1vdmVtZW50byBkYSB4ZW9sb2NhbGl6YWNpw7NuIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iaW5kaWNhIGEgZGlyZWNjacOzbiBkbyBtb3ZlbWVudG8gZG8gZGlzcG9zaXRpdm8gcXVlIHJlYWxpemEgYSBjYXB0dXJhIGR1biAiCi0ibWVkaW8uIFJlcHJlc2VudGFzZSBlbiBncmFvcyBvdSBudW5oYSByZXByZXNlbnRhY2nDs24gZW4gY29tYSBmbG90YW50ZSwgMCAiCi0iY29ycmVzcG9uZGUgYW8gbm9ydGUgeGVvZ3LDoWZpY28gZSBpbmNyZW1lbnRhIGRlIGZvcm1hIGhvcmFyaWEuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlY2Npw7NuIGRlIGNhcHR1cmEgZGEgeGVvbG9jYWxpemFjacOzbiIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotImluZGljYSBhIGRpcmVjY2nDs24gbmEgcXVlIGFwdW50YSBvIGRpc3Bvc2l0aXZvIHF1ZSByZWFsaXphIGEgY2FwdHVyYSBkdW4gIgotIm1lZGlvLiBSZXByZXNlbnRhc2UgZW4gZ3Jhb3Mgb3UgbnVuaGEgcmVwcmVzZW50YWNpw7NuIGVuIGNvbWEgZmxvdGFudGUsIDAgIgotImNvcnJlc3BvbmRlIGFvIG5vcnRlIHhlb2dyw6FmaWNvIGUgaW5jcmVtZW50YSBkZSBmb3JtYSBob3JhcmlhLiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICJub21lIGRvIHByb2dyYW1hIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAiTm9tZSBkbyBwcm9ncmFtYS9wb2RjYXN0L3NlcmllIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICJub21lIGRlIG9yZGVuYWNpw7NuIGRvIHByb2dyYW1hIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJOb21lIGRvIHByb2dyYW1hL3BvZGNhc3Qvc2VyaWUsIHBhcmEgcHJvcMOzc2l0b3MgZGUgb3JkZW5hY2nDs24iCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAibsO6bWVybyBkZSBlcGlzb2RpbyIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJPIG7Dum1lcm8gZG8gY2Fww610dWxvIG5hIHRlbXBhZGEiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJuw7ptZXJvIGRlIHRlbXBhZGEiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiTyBuw7ptZXJvIGRlIHRlbXBhZGEgZG8gcHJvZ3JhbWEiCi0KLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgImxldHJhcyIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiQXMgbGV0cmFzIGRvIGZpY2hlaXJvIG11bHRpbWVkaWEsIHhlcmFsbWVudGUgdXNhZG8gcGFyYSBjYW5jacOzbnMiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tZSBjdXJ0byBkbyBjb21wb3NpdG9yIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAicGVzb2EocykgcXVlIGNvbXB1eGVyb24gYSBncmF2YWNpw7NuLCBwYXJhIHByb3DDs3NpdG9zIGRlIG9yZGVuYW1lbnRvIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgImFncnVwYWNpw7NuIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iQWdydXBhIHRlbWFzIHJlbGFjaW9uYWRvcyBxdWUgc2UgZXhwYW5kZW4gdmFyaWFzIHBpc3RhcywgY29tbyBhcyBkaWZlcmVudGVzICIKLSJwYXJ0ZXMgZHVuIGNvbmNlcnRvLiDDiSB1biBuaXZlbCBtw6FpcyBhbHRvIHF1ZSBvIGR1bmhhIHBpc3RhLCBwZXJvIG3DoWlzIGJhaXhvICIKLSJxdWUgbyBkdW4gw6FsYnVtLiIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJwdW50dWFjacOzbiBkbyB1c3VhcmlvIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJQdW50dWFjacOzbiBhdHJpYnXDrWRhIHBvciB1biB1c3VhcmlvLiBDYW50byBtYWlvciBzZXhhIGEgcHVudHVhY2nDs24gbWFpcyBsbGUgIgotImd1c3RhcsOhIGFvIHVzdWFyaW8uIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiZmFicmljYW50ZSBkbyBkaXNwb3NpdGl2byIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIkZhYnJpY2FudGUgZG8gZGlzcG9zaXRpdm8gdXNhZG8gcGFyYSBjcmVhciBlc3RlIG1lZGlvIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJtb2RlbG8gZG8gZGlzcG9zaXRpdm8iCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIk1vZGVsbyBkbyBkaXNwb3NpdGl2byB1c2FkbyBwYXJhIGNyZWFyIGVzdGUgbWVkaW8iCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJub21lIGRvIGFwbGljYXRpdm8iCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIkFwbGljYXRpdm8gdXNhZG8gcGFyYSBjcmVhciBvIG1lZGlvIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiZGF0b3MgZG8gYXBsaWNhdGl2byIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIkRhdG9zIGFyYml0cmFyaW9zIGRvIGFwbGljYXRpdm8gcGFyYSBzZXJpYWxpemFsb3Mgbm8gbWVkaW8iCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAib3JpZW50YWNpw7NuIGRhIGltYXhlIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICJDb21vIHNlIGRlYmVyw61hIHJvdGFyIG91IHZvbHRlYXIgYSBpbWF4ZSBhbnRlcyBkZSBtb3N0cmFsYSIKLQotbXNnaWQgInB1Ymxpc2hlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgbGFiZWwgb3IgcHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgIiIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICIsICIKLW1zZ3N0ciAiLCAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gVVJJIGhhbmRsZXIgZm9yIHRoZSAlcyBwcm90b2NvbCBmb3VuZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiRVJSTzogZG8gZWxlbWVudG8gJXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iSW5mb3JtYWNpw7NuIGFkaWNpb25hbCBkZSBkZXB1cmFjacOzbjpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJub24gaGFpIHVuaGEgcHJvcGllZGFkZSDCqyVzwrsgbm8gZWxlbWVudG8gwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAibm9uIGZvaSBwb3PDrWJlbCBlc3RhYmVsZWNlciBhIHByb3BpZWRhZGUgwqslc8K7IG5vIGVsZW1lbnRvIMKrJXPCuyBhIMKrJXPCuyIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIm5vbiBmb2kgcG9zw61iZWwgbGlnYXIgJXMgYSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAibm9uIGhhaSB1biBlbGVtZW50byDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgIm5vbiBmb2kgcG9zw61iZWwgYW5hbGl6YXIgYXMgY2FwYWNpZGFkZXMgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibm9uIGV4aXN0ZSBvIGVsZW1lbnRvIHN1bWlkb2lybyBwYXJhIG8gVVJJIMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibm9uIGV4aXN0ZSB1biBlbGVtZW50byBvcml4ZSBwYXJhIG8gVVJJIMKrJXPCuyIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAibyBiaW5hcmlvIGVzcGVjaWZpY2FkbyDCqyVzwrsgZXN0w6EgYmFsZWlybywgbm9uIGVzdMOhIHBlcm1pdGlkbyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJub24gZXhpc3RlIG8gYmluYXJpbyDCqyVzwrssIG9taXRpbmRvIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgIm5vbiBzZSBwZXJtaXRlIHVuaGEgY2FuYWxpemFjacOzbiBiYWxlaXJhIgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIkVzdGFuc2UgYSBkZXNib3RhciBtb2l0b3MgYsO6ZmVyZXMuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgotbXNnc3RyICJIYWkgdW4gcHJvYmxlbWEgbm8gZmx1eG8gaW50ZXJubyBkZSBkYXRvcy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gbm8gZmx1eG8gaW50ZXJubyBkZSBkYXRvcy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCi1tc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyByZWxveG8gaW50ZXJuby4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJGaWx0cm8gZGUgY2FwYWNpZGFkZXMiCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIlJlc3RyaW54aXIgYXMgcG9zw61iZWlzIGNhcGFjaWRhZGVzIHBlcm1pdGlkYXMgKE5VTEwgc2lnbmlmaWNhIENBTFFVRVJBKS4gQW8gIgotImVzdGFiZWxlY2VyIGVzdGEgcHJvcGllZGFkZSBvYnRlbnNlIHVuaGEgcmVmZXJlbmNpYSBkbyBvYnhlY3RvIEdzdENhcHMgIgotImZvcm5lY2lkby4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICJOb24gc2UgZXNwZWNpZmljb3UgdW4gZGlyZWN0b3JpbyB0ZW1wb3JhbC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBjcmVhciBvIGZpY2hlaXJvIHRlbXBvcmFsIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGFicmlyIG8gZmljaGVpcm8gwqslc8K7IHBhcmEgbGVyLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBkZSBlc2NyaXR1cmEgYW8gZGVzY2FyZ2FyIG8gZmljaGVpcm8uIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5vbiBzZSBlc3BlY2lmaWNvdSB1biBub21lIGRlIGZpY2hlaXJvIHBhcmEgZXNjcml0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgYWJyaXIgwqslc8K7IHBhcmEgZXNjcmliaXIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gcGVjaGFyIG8gZmljaGVpcm8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGJ1c2NhciBubyBmaWNoZWlybyDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gZXNjcmliaXIgbm8gZmljaGVpcm8gwqslc8K7LiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOb24gc2UgZXNwZWNpZmljb3UgdW4gbm9tZSBkZSBmaWNoZWlybyBwYXJhIGEgbGVjdHVyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgb2J0ZXIgYSBpbmZvcm1hY2nDs24gZGUgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICLCqyVzwrsgw6kgdW4gZGlyZWN0b3Jpby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJPIGZpY2hlaXJvIMKrJXPCuyDDqSB1biBzb2NrZXQuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiUHJvZHVjaXVzZSB1biBmYWxsbyBkZXNwb2lzIGRhcyBpdGVyYWNpw7NucyBxdWUgc2Ugc29saWNpdGFyb24uIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAiY2FwYWNpZGFkZXMiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJjYXBhY2lkYWRlcyBkZXRlY3RhZGFzIG5vIGZsdXhvIgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAibcOtbmltbyIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgImZvcnphciBhcyBjYXBhY2lkYWRlcyIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICJmb3J6YXIgYXMgY2FwYWNpZGFkZXMgc2VuIGZhY2VyIHVuIMKrdHlwZWZpbmTCuyIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiTyBmbHV4byBub24gY29udMOpbiBkYXRvcy4iCi0KLW1zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCi1tc2dzdHIgIk8gZmx1eG8gbm9uIGNvbnTDqW4gZGF0b3MuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiSW50ZXJmYWNlcyBpbXBsZW1lbnRhZGFzOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgImxleMOtYmVsIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgImVzY3JpYsOtYmVsIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJjb250cm9sw6FiZWwiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiaW50ZXJjYW1iacOhYmVsIGVudHJlIG9zIGVzdGFkb3MgTlVMTCwgUkVBRFksIFBBVVNFRCBvdSBQTEFZSU5HIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAiaW50ZXJjYW1iacOhYmVsIHPDsyBlbnRyZSBvcyBlc3RhZG9zIE5VTEwsIFJFQURZIG91IFBBVVNFRCIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICJpbnRlcmNhbWJpw6FiZWwgc8OzIGVudHJlIG9zIGVzdGFkb3MgTlVMTCBvdSBSRUFEWSIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiRmljaGVpcm9zIG5hIGxpc3RhIG5lZ3JhOiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIkNvbnTDrWEgdG90YWw6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgZmljaGVpcm8gbmEgbGlzdGEgbmVncmEiCi1tc2dzdHJbMV0gIiVkIGZpY2hlaXJvcyBuYSBsaXN0YSBuZWdyYSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIGVuZ2FkaWRvIgotbXNnc3RyWzFdICIlZCBlbmdhZGlkb3MiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQgZW50cmFkYSBuYSBsaXN0YSBuZWdyYSIKLW1zZ3N0clsxXSAiJWQgZW50cmFkYXMgbmEgbGlzdGEgbmVncmEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIGNhcmFjdGVyw61zdGljYSIKLW1zZ3N0clsxXSAiJWQgY2FyYWN0ZXLDrXN0aWNhcyIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiSW1wcmltaXIgdG9kb3Mgb3MgZWxlbWVudG9zIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiSW1wcmltaXIgbGlzdGEgZG9zIGZpY2hlaXJvcyBuYSBsaXN0YSBuZWdyYSIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iSW1wcmltaXIgdW5oYSBsaXN0YSBkZSBjYXJhY3RlcsOtc3RpY2FzIGFuYWxpesOhYmVpcyBwb3IgdW5oYSBtw6FxdWluYSBkbyAiCi0iZW5nYWRpZG8gZXNwZWNpZmljYWRvIG91IGZvcm5lY2VyIHRvZG9zIG9zIGVuZ2FkaWRvcy5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDDmnRpbCB4dW50byBjb24gbWVjYW5pc21vcyBkZSAiCi0iaW5zdGFsYWNpw7NuIGV4dGVybmEgYXV0b23DoXRpY2EgZGUgZW5nYWRpZG9zLiIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiTGlzdGFyIG8gY29udGlkbyBkbyBlbmdhZGlkbyIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICJDb21wcm9iYXIgc2UgbyBlbGVtZW50byBvdSBlbmdhZGlkbyBlc3BlY2lmaWNhZG8gZXhpc3RlIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotIkFvIGNvbXByb2JhciBzZSB1biBlbGVtZW50byBvdSBlbmdhZGlkbyBleGlzdGUsIHRhbcOpbiBjb21wcm9iYXIgc2UgYSBzw7phICIKLSJ2ZXJzacOzbiDDqSBjYW5kbyBtZW5vcyBhIHZlcnNpw7NuIGVzcGVjaWZpY2FkYSIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiSW1wcmltaXIgb3MgZXNxdWVtYXMgVVJJIGFkbWl0aWRvcywgY29zIGVsZW1lbnRvcyBxdWUgb3MgaW1wbGVtZW50YW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgY2FyZ2FyIG8gZmljaGVpcm8gZG8gZW5nYWRpZG86ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIk5vbiBleGlzdGUgbyBlbGVtZW50byBvdSBlbmdhZGlkbyDCqyVzwrtcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIkVzdGF0w61zdGljYXMgZG8gw61uZGljZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIk9idMOtdm9zZSBhIG1lbnNheGUgbsK6ICV1IGRvIGVsZW1lbnRvIMKrJXPCuyAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIk9idMOtdm9zZSBhIG1lbnNheGUgbsK6ICV1IGRhIGNlbGEgwqslczolc8K7ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiT2J0w612b3NlIGEgbWVuc2F4ZSBuwrogJXUgZG8gb2J4ZWN0byDCqyVzwrsgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIk9idMOtdm9zZSBhIG1lbnNheGUgbnVtLiAldSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJPYnTDrXZvc2UgdW4gRU9TIGRvIGVsZW1lbnRvIMKrJXPCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJBVE9QQURBIEVUSVFVRVRBICAgICAgOiBhdG9wYWRhIHBvbG8gZWxlbWVudG8gwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiQVRPUEFEQSBFVElRVUVUQSAgICAgIDogYXRvcGFkYSBwb2xhIGNlbGEgwqslczolc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRVRJUVVFVEEgRU5DT05UUkFEQSAgICAgIDogZW5jb250cmFkYSBwb2xvIG9ieGVjdG8gwqslc8K7LlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIkVUSVFVRVRBIEVOQ09OVFJBREFcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJUT0MgQVRPUEFETyAgICA6IGF0b3BhZG8gcG9sbyBlbGVtZW50byDCqyVzwrsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJUT0MgQVRPUEFETyAgICA6IGVuY29udHJhZG8gcG9sbyBvYnhlY3RvIMKrJXPCuy5cbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICJUT0MgQVRPUEFET1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPUk1BQ0nDk046XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkFWSVNPOiBkbyBlbGVtZW50byAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJQcmVwYXJhZG8sIGFnYXJkYW5kbyBhIGVuY2hlciBvIGLDumZlciBwYXJhIHJlbWF0YXLigKZcbiIKLQotIywgZnV6enkKLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJQcmVwYXJhZG8sIGFnYXJkYW5kbyBhIGVuY2hlciBvIGLDumZlciBwYXJhIHJlbWF0YXLigKZcbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiYWxtYWNlbmFuZG8gbm8gYsO6ZmVy4oCmIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotIlJlbWF0b3VzZSBkZSBhbG1hY2VuYXIgbm8gYsO6ZmVyLCBlc3RhYmVsZWNlbmRvIGEgY2FuYWxpemFjacOzbiBwYXJhICIKLSJSRVBST0RVQ0lSLi4uXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJBbG1hY2VuYW5kbyBubyBiw7pmZXIsIGVzdGFiZWxlY2VuZG8gYSBjYW5hbGl6YWNpw7NuIGEgUEFVU0FEQS4uLlxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiUmVkaXN0cmlidcOtciBsYXRlbmNpYS4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIkVzdGFiZWxlY2VuZG8gbyBlc3RhZG8gYSAlcyBzZWd1bmRvIGZvaSBzb2xpY2l0YWRvIHBvciAlcy4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiSW50ZXJyb21wZXI6IHBhcmFuZG8gYSBjYW5hbGl6YWNpw7NuIOKAplxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIkVsZW1lbnRvIHF1ZSBmYWx0YTogwqslc8K7XG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICJBVklTTzogZG8gZWxlbWVudG8gJXM6ICVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIkV0aXF1ZXRhcyBkZSBzYcOtZGEgKHRhbcOpbiBjb8OxZWNpZG8gY29tbyBtZXRhZGF0b3MpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiVE9DIGRlIHNhw61kYSAoY2Fww610dWxvcyBlIGVkaWNpw7NucykiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJJbmZvcm1hY2nDs24gZG8gZXN0YWRvIGRhIHNhw61kYSBlIG5vdGlmaWNhY2nDs25zIGRhcyBwcm9waWVkYWRlcyIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIk5vbiBtb3N0cmFyIG5pbmd1bmhhIGluZm9ybWFjacOzbiBkZSBwcm9ncmVzbyIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiTWVuc2F4ZXMgZGUgc2HDrWRhIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiTm9uIGluc3RhbGFyIHVuIG1hbmV4YWRvciBwcmVkZXRlcm1pbmFkbyIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiRm9yemFyIEVPUyBuYXMgb3JpeGVzIGFudGVzIGRlIHBlY2hhciBhIGNhbmFsaXphY2nDs24iCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIk9idGVyIGUgaW1wcmltaXIgYXMgZXN0YXTDrXN0aWNhcyBkbyDDrW5kaWNlIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICJFUlJPOiBub24gZm9pIHBvc8OtYmVsIGNvbnN0cnXDrXIgYSBjYW5hbGl6YWNpw7NuOiAlcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkVSUk86IG5vbiBmb2kgcG9zw61iZWwgY29uc3RydcOtciBhIGNhbmFsaXphY2nDs24uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJBVklTTzogY2FuYWxpemFjacOzbiBlcnLDs25lYTogJXNcbiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiRVJSTzogbyBlbGVtZW50byDCq2NhbmFsaXphY2nDs27CuyBub24gZm9pIGF0b3BhZG8uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiRXN0YWJlbGVjZW5kbyBhIHR1YmVyw61hIGEgUEFVU0EuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkVSUk9SOiBBIHR1YmVyw61hIG5vbiBxdWVyZSBwYXVzYXJzZS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiQSB0dWJlcsOtYSBlc3TDoSB2aXZhIGUgbm9uIG5lY2VzaXRhIFBSRVBBUkFSU0UuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIkEgdHViZXLDrWEgZXN0w6EgUFJFUEFSw4FORE9TRS4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJFUlJPOiBhIHR1YmVyw61hIG5vbiBxdWVyZSBwcmVwYXJhcnNlLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJBIHR1YmVyw61hIGVzdMOhIFBSRVBBUkFEQS4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJFc3RhYmVsZWNlbmRvIGEgdHViZXLDrWEgYSBSRVBST0RVQ0lORE8uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkVSUk86IGEgdHViZXLDrWEgbm9uIHF1ZXJlIHJlcHJvZHVjaXJzZS5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICJFT1MgYW8gYXBhZ2FyIGFjdGl2YWRvOyBGb3J6YW5kbyBFT1MgbmEgdHViZXLDrWFcbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICJFT1MgYW8gYXBhZ2FyIGFjdGl2YWRvOyAtLSBhZ2FyZGFuZG8gcG9sbyBFT1MgZGVzcG9pcyBkZSBlcnJvXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiQWdhcmRhbmRvIHBvbGEgRU9TLi4uXG4iCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJFT1MgcmVjaWJpZG86IGRldGVuZG8gYSB0dWJlcsOtYS4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkludGVycm9tcGVyIGFvIGFnYXJkYXIgcG9sbyBFT1MgLSBkZXRlbmRvIGEgY2FuYWxpemFjacOzbuKAplxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBlc3BlcmFyIGEgRU9TXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiQSBleGVjdWNpw7NuIHJlbWF0b3UgZGVzcG9pcyBkZSAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiRXN0YWJlbGVjZW5kbyBhIHR1YmVyw61hIGEgUFJFUEFSQURPLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIkVzdGFiZWxlY2VuZG8gYSB0dWJlcsOtYSBhIE5VTEwuLi5cbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkxpYmVyYW5kbyBhIHR1YmVyw61hLi4uXG4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBmbHV4byBpbnRlcm5vIGRlIGRhdG9zLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIk5vbiBzYWNhciBhIHNhw61kYSBkYSBpbmZvcm1hY2nDs24gZGUgZXN0YWRvIGRvIFRJUE8iCi0KLSN+IG1zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCi0jfiBtc2dzdHIgIlRJUE8xLFRJUE8yLOKApiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGlnYXrDs24gc2VuIGVsZW1lbnRvIG9yaXhlIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGlnYXrDs24gc2VuIGVsZW1lbnRvIHN1bWlkb2lybyIKLQotI34gbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgotI34gbXNnc3RyICJub24gZXhpc3RlIHVuIGVsZW1lbnRvIGNvIHF1ZSBsaWdhciBvIFVSSSDCqyVzwrsiCi0KLSN+IG1zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0jfiBtc2dzdHIgIm5vbiBmb2kgcG9zw61iZWwgbGlnYXIgbyBlbGVtZW50byBzdW1pZG9pcm8gcGFyYSBvIFVSSSDCqyVzwrsiCi0KLSN+IG1zZ2lkICJtYXhpbXVtIgotI34gbXNnc3RyICJtw6F4aW1vIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAiIgotI34gIlVzbzogZ3N0LXhtbGxhdW5jaCA8ZmljaGVpcm8ueG1sPiBbIHByb3BpZWRhZGUuZG8uZWxlbWVudG89dmFsb3Ig4oCmIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiRVJSTzogbm9uIGZvaSBwb3PDrWJlbCBhbmFsaXphciBvIGZpY2hlaXJvIHhtbCDCqyVzwrsuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJFUlJPOiBub24gZXhpc3RlIG8gZWxlbWVudG8gZGUgbml2ZWwgc3VwZXJpb3IgZGEgY2FuYWxpemFjacOzbiBubyBmaWNoZWlybyAiCi0jfiAiwqslc8K7LlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICJBVklTTzogbmVzdGUgbW9tZW50byBzw7Mgc2UgYWRtaXRlIHVuIGVsZW1lbnRvIGRlIG5pdmVsIHN1cGVyaW9yLlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgotI34gbXNnc3RyICIiCi0jfiAiRVJSTzogbm9uIGZvaSBwb3PDrWJlbCBhbmFsaXphciBvIGFyZ3VtZW50byAlZCBkYSBsacOxYSBkZSBvcmRlczogJXMuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICJBVklTTzogbm9uIHNlIGF0b3BvdSBvIGVsZW1lbnRvIG5vbWVhZG8gwqslc8K7LlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiR2FyZGFyIGEgcmVwcmVzZW50YWNpw7NuIHhtbCBkYSBjYW5hbGl6YWNpw7NuIGEgdW4gRklDSEVJUk8gZSBzYcOtciIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkZJQ0hFSVJPIgotCi0jfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgotI34gbXNnc3RyICJOb24gaW5zdGFsYXIgb3MgbWFuZXhhZG9yZXMgZGUgc2luYWlzIHBhcmEgU0lHVVNSMSBlIFNJR1VTUjIiCi0KLSN+IG1zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgotI34gbXNnc3RyICJJbXByaW1pciBhIHRyYXphIGRlIGFzaWduYWNpw7NucyAoc2UgZm9pIGFjdGl2YWRhIGFvIGNvbXBpbGFyKSIKZGlmZiAtLWdpdCBhL3BvL2dzdHJlYW1lci0xLjAucG90IGIvcG8vZ3N0cmVhbWVyLTEuMC5wb3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NDU3MGQuLjAwMDAwMDAKLS0tIGEvcG8vZ3N0cmVhbWVyLTEuMC5wb3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIzICswLDAgQEAKLSMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgRklSU1QgQVVUSE9SIDxFTUFJTEBBRERSRVNTPiwgWUVBUi4KLSMKLSMsIGZ1enp5Ci1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS4xMC40XG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IFlFQVItTU8tREEgSE86TUkrWk9ORVxuIgotIkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPlxuIgotIkxhbmd1YWdlLVRlYW06IExBTkdVQUdFIDxMTEBsaS5vcmc+XG4iCi0iTGFuZ3VhZ2U6IFxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUNIQVJTRVRcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz1JTlRFR0VSOyBwbHVyYWw9RVhQUkVTU0lPTjtcbiIKLQotIzogZ3N0L2dzdC5jOjI0MwotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0LmM6MjQ1Ci1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdC5jOjI0OQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3QuYzoyNTMKLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdC5jOjI1NQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3QuYzoyNTcKLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3QuYzoyNjAKLW1zZ2lkICJMSVNUIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3QuYzoyNjIKLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0LmM6MjY2Ci1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdC5jOjI3MAotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3QuYzoyNzQKLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0LmM6Mjc4Ci1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0LmM6Mjc4Ci1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdC5jOjI4MQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdC5jOjI4MwotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdC5jOjI4NgotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdC5jOjI5MQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3QuYzoyOTYKLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3QuYzozMDEKLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0LmM6MzAyCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0LmM6OTIxCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MTMwCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjEzMiBnc3QvZ3N0ZXJyb3IuYzoxNzQgZ3N0L2dzdGVycm9yLmM6MTk4IGdzdC9nc3RlcnJvci5jOjI0MAotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjEzNQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjEzNwotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoxNDAKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoxNDIKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoxNDQKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjE0NgotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MTQ4Ci1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjE1MAotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoxNTIKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoxNTQKLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjE1NgotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MTU4Ci1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MTcyCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjE3NwotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MTc5Ci1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MTgxCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjE4MwotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoxOTYKLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoyMDEKLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjIwMwotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjA1Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjIwNwotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoyMDkKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjExCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoyMTMKLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoyMTUKLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjIxNwotbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjIxOQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjIxCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjIzCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjIyNQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjM4Ci1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjI0MwotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoyNDYKLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoyNDgKLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjUxCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjI1MwotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzoyNTUKLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjU3Ci1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjU5Ci1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3RlcnJvci5jOjI2MQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjYzCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdGVycm9yLmM6MjY1Ci1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzozMDUKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0ZXJyb3IuYzozMTMKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0cGlwZWxpbmUuYzo1NDkKLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHJlZ2lzdHJ5LmM6MTcwOQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjEwNwotbXNnaWQgInRpdGxlIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTA3Ci1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjExMAotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTEwCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjExMwotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjExNAotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjExOAotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjExOQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjEyMgotbXNnaWQgImFsYnVtIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTIzCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxMjYKLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjEyNwotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTMwCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTMxCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTM1Ci1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTM2Ci1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTM4Ci1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjEzOAotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE0MAotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTQxCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTQ1Ci1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNDYKLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE0OQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNTAKLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE1MwotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNTQKLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNTgKLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNTkKLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE2MgotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTYzCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE2NwotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTY4Ci1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE3MQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxNzIKLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE3NgotbXNnaWQgImxvY2F0aW9uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MTc2Ci1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxODEKLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE4MgotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxODUKLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE4NgotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE4OQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxODkKLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjE5MQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxOTMKLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoxOTcKLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMDAKLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMDAKLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjAyCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjIwMwotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjIwNQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMDUKLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjA5Ci1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjIwOQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMTEKLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjExCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjEzCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMTQKLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMTcKLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMTgKLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjIyMQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjIyCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjI2Ci1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjI3Ci1tc2dpZCAiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjMwCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMzAKLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjIzMwotbXNnaWQgImNvZGVjIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjM0Ci1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjM3Ci1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyMzcKLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNDAKLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI0MAotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI0MwotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjQzCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjQ1Ci1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI0NgotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjQ4Ci1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI0OAotbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNTAKLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNTAKLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjUyCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjUyCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI1NAotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI1NAotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNTcKLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjU3Ci1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI2MAotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI2MQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNjMKLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNjMKLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjY1Ci1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjY1Ci1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI2NwotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI2NwotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjY5Ci1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjY5Ci1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI3MQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI3MQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjczCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyNzQKLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6Mjc2Ci1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI3NwotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyODAKLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MjgxCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyODMKLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI4MwotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI4NwotbXNnaWQgInByZXZpZXcgaW1hZ2UiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyODcKLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyODkKLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6Mjg5Ci1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI5MgotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyOTMKLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI5NQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6Mjk1Ci1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzoyOTgKLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjI5OQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzAyCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzAzCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzA3Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjMwOAotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozMTIKLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzEzCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjMxNgotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzE3Ci1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozMjAKLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjMyMQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzI0Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzI1Ci1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozMjgKLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjMyOQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzMyCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzMzCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzM2Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjMzNwotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM0MgotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM0MwotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzQ5Ci1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzUwCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzU1Ci1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM1NgotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM1OQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzYwCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozNjMKLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzY0Ci1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozNjcKLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozNjcKLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozNzAKLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM3MQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozNzMKLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM3NAotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM3OAotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6Mzc5Ci1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozODIKLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzgzCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM4NQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM4NgotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM4OAotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozODkKLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzozOTEKLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6MzkyCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjM5NAotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6Mzk1Ci1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6Mzk4Ci1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6Mzk5Ci1tc2dpZCAiTmFtZSBvZiB0aGUgbGFiZWwgb3IgcHVibGlzaGVyIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6NDAyCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHRhZ2xpc3QuYzo0MDMKLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvZ3N0dGFnbGlzdC5jOjQwNwotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6NDA3Ci1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6NDEwCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6NDEwCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R0YWdsaXN0LmM6NDUwCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHVyaS5jOjY1NQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSM6IGdzdC9nc3R1cmkuYzo4MzAKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHV0aWxzLmM6MjQ4NiB0b29scy9nc3QtbGF1bmNoLmM6MzI1Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2dzdHV0aWxzLmM6MjQ4OCB0b29scy9nc3QtbGF1bmNoLmM6MzI3IHRvb2xzL2dzdC1sYXVuY2guYzo2NzEKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9wYXJzZS9ncmFtbWFyLnk6MjE2Ci0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueToyMjEKLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvcGFyc2UvZ3JhbW1hci55OjQxMgotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo0NTMKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICIiCi0KLSM6IGdzdC9wYXJzZS9ncmFtbWFyLnk6NTAzCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo2NDEKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo3MTYKLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo3NzcKLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo3ODMKLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSM6IGdzdC9wYXJzZS9ncmFtbWFyLnk6ODIyCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvcGFyc2UvZ3JhbW1hci55Ojg1MAotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo4NjkKLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo5NTkKLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgIiIKLQotIzogZ3N0L3BhcnNlL2dyYW1tYXIueTo5ODIKLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICIiCi0KLSM6IGdzdC9wYXJzZS9ncmFtbWFyLnk6OTkyCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvcGFyc2UvZ3JhbW1hci55OjEwMjMKLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiIgotCi0jOiBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmM6MjgzMwotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICIiCi0KLSM6IGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzozMzMyCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgotbXNnc3RyICIiCi0KLSM6IGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYzo0MDQzIGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOjI5NTgKLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICIiCi0KLSM6IGxpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jOjI1NTAKLW1zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCi1tc2dzdHIgIiIKLQotIzogbGlicy9nc3QvYmFzZS9nc3RiYXNlc3JjLmM6MjU3OAotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoxMjgKLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoxMjkKLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGNhcHNmaWx0ZXIuYzoxMzYKLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICIiCi0KLSM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0Y2Fwc2ZpbHRlci5jOjEzNwotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOjkyMCBwbHVnaW5zL2VsZW1lbnRzL2dzdHF1ZXVlMi5jOjE3MTAKLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICIiCi0KLSM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0ZG93bmxvYWRidWZmZXIuYzo5MjYgcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoxNzE2Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOjkzNCBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzo1MzkKLSM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0cXVldWUyLmM6MTcyNAotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3Rkb3dubG9hZGJ1ZmZlci5jOjEyNTggcGx1Z2lucy9lbGVtZW50cy9nc3RxdWV1ZTIuYzoyMTQ0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6NDMxCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOjQzNwotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOjQ0OQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzaW5rLmM6NjE4Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICIiCi0KLSM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0ZmlsZXNpbmsuYzo2MjYgcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOjcwMwotIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc2luay5jOjczOAotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzo1MjcKLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGZpbGVzcmMuYzo1NDgKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6NTU0Ci0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3RmaWxlc3JjLmM6NTYwCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdGlkZW50aXR5LmM6NjU5Ci1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOjI1MgotbXNnaWQgImNhcHMiCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoyNTMKLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICIiCi0KLSM6IHBsdWdpbnMvZWxlbWVudHMvZ3N0dHlwZWZpbmRlbGVtZW50LmM6MjU2Ci1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOjI2MQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoyNjIKLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAiIgotCi0jOiBwbHVnaW5zL2VsZW1lbnRzL2dzdHR5cGVmaW5kZWxlbWVudC5jOjk4NAotIzogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoxMDA2Ci1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIiIKLQotIzogcGx1Z2lucy9lbGVtZW50cy9nc3R0eXBlZmluZGVsZW1lbnQuYzoxMTI2Ci1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTk1Ci1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtaW5zcGVjdC5jOjI4MQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MjkwCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWluc3BlY3QuYzoyOTQKLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6Mjk4Ci1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MzAyCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWluc3BlY3QuYzozMDQKLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MzA2Ci1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWluc3BlY3QuYzo5MDkKLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWluc3BlY3QuYzo5MjEgdG9vbHMvZ3N0LWluc3BlY3QuYzoxMDEwCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtaW5zcGVjdC5jOjkyMgotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTAxMQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jOiB0b29scy9nc3QtaW5zcGVjdC5jOjEwMTQKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTAxOQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTQ2OAotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtaW5zcGVjdC5jOjE0NzAKLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTQ3MgotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTQ3NwotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtaW5zcGVjdC5jOjE0NzkKLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtaW5zcGVjdC5jOjE0ODIKLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1pbnNwZWN0LmM6MTQ4NgotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtaW5zcGVjdC5jOjE2MzQKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWluc3BlY3QuYzoxNjM5Ci0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoyNTIKLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo1NTIKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo1NTYKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjU2MAotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6NTY0Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjU5NgotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjYwNQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo2MDgKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo2MTEKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo2MTQKLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6NjI5Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjYzMgotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjYzNQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo2NTIKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6NjY5Ci0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6NzA0Ci1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjcwOAotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjcyMAotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6NzMxCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6NzM5Ci1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6NzQ4Ci1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6NzU5Ci0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjc3NQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjgwNAotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo4MTcKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo4MzEKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjk2MQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6OTYzCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6OTY1Ci1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6OTY3Ci1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6OTY5Ci1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo5NzEKLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6OTczCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6OTc1Ci1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzo5NzcKLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjk4MAotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTA0NwotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTA1MQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjEwNTUKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMDcxCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMTAyIHRvb2xzL2dzdC1sYXVuY2guYzoxMjAzCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjExMDcKLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMTEyCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMTE2Ci1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTExOSB0b29scy9nc3QtbGF1bmNoLmM6MTEzMwotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTEyNgotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTEzOQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTE0NgotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTE2NQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMTY5Ci1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjExNzIKLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTE3OQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjExODMKLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiIgotCi0jOiB0b29scy9nc3QtbGF1bmNoLmM6MTE4OAotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMTk5Ci1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIiIKLQotIzogdG9vbHMvZ3N0LWxhdW5jaC5jOjEyMTUKLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMjI3Ci1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICIiCi0KLSM6IHRvb2xzL2dzdC1sYXVuY2guYzoxMjMxCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vaHIuZ21vIGIvcG8vaHIuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDc4Y2U2Li4wMDAwMDAwCi0tLSBhL3BvL2hyLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2hyLnBvIGIvcG8vaHIucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMDk0NjAuLjAwMDAwMDAKLS0tIGEvcG8vaHIucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzg4ICswLDAgQEAKLSMgVHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyIHRvIENyb2F0aWFuLgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIwotIyBHU3RyZWFtZXIgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgTWFudWFsCi0jIGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9tYW51YWwvaHRtbC9pbmRleC5odG1sCi0jCi0jIFRvbWlzbGF2IEtyem5hciA8dG9taXNsYXYua3J6bmFyQGdtYWlsLmNvbT4sIDIwMTIuCi0jIEJvxb5pZGFyIFB1dGFuZWMgPGJvemlkYXJwQHlhaG9vLmNvbT4sIDIwMTYuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXItMS4xMC4wXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMTEtMTkgMDk6NTUtMDgwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogQm/FvmlkYXIgUHV0YW5lYyA8Ym96aWRhcnBAeWFob28uY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IENyb2F0aWFuIDxsb2thbGl6YWNpamFAbGludXguaHI+XG4iCi0iTGFuZ3VhZ2U6IGhyXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1CdWdzOiBSZXBvcnQgdHJhbnNsYXRpb24gZXJyb3JzIHRvIHRoZSBMYW5ndWFnZS1UZWFtIGFkZHJlc3MuXG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiIKLSIlMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCi0iWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjguNy4xXG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIklzcGnFoWkgaW5hxI1pY3UgR1N0cmVhbWVyLWEiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiVcSNaW5pIHN2YSB1cG96b3JlbmphIGZhdGFsbmltIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIklzcGnFoWkgZG9zdHVwbmUga2F0ZWdvcmlqZSBkZWJ1Z2lyYW5qYSBpIGl6acSRaSIKLQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIlphZGFuYSByYXppbmEgZGVidWdpcmFuamEgb2QgMSAoc2FtbyBncmXFoWtlKSBkbyA5IChzdmUpIGlsaSAwIGJleiBpc3Bpc2EiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiUkFaSU5BIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIlBvcGlzIHphcmV6b20gb2R2b2plbmloIHBhcm92YSBjYXRlZ29yeV9uYW1lOmxldmVsIHphIHBvc3RhdmxqYW5qZSBwb3NlYm5paCAiCi0icmF6aW5hIHphIHBvamVkaW5lIGthdGVnb3JpamUuIFByaW1qZXI6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIlBPUElTIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIk9uZW1vZ3XEh2kgb2JvamVuaSBpc3BpcyBkZWJ1Z2lyYW5qYSIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0iTWlqZW5qYSBuYcSNaW4gYm9qZW5qYSBkbmV2bmlrYSBkZWJ1Z2lyYW5qYS4gTW9ndcSHaSBuYcSNaW5pIHN1OiBvZmYsIG9uLCAiCi0iZGlzYWJsZSwgYXV0bywgdW5peCIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJPbmVtb2d1xIdpIGRlYnVnaXJhbmplIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIk9tb2d1xIdpIG9wxaFpcm51IGRpamFnbm96dSBwcmkgdcSNaXRhdmFuanUgcGx1Z2luYSAocGx1Z2luKSIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIkR2b3RvxI1rb20gb2R2b2plbmUgcHV0YW5qZSBrb2plIHNhZHLFvmF2YWp1IHBsdWdpbiIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICJQVVRBTkpFIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIlphcmV6aW1hIG9kdm9qZW4gcG9waXMgcHJpa2xqdcSNYWthIGtvamkgxIdlIHNlIHXEjWl0YXRpIHV6IHBvcGlzIHNwcmVtbGplbiB1ICIKLSJ2YXJpamFibHUgb2tvbGluZSBHU1RfUExVR0lOX1BBVEgiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJQTFVHSU5TIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiT25lbW9ndcSHaSBodmF0YW5qZSBzZWdtZW50YWNpanNraWggZ3JlxaFha2EgcHJpIHXEjWl0YXZhbmp1IHBsdWdpbmEiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiT25lbW9ndcSHaSBhxb51cmlyYW5qZSByZWdpc3RyYSIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIk9uZW1vZ3XEh2kgc3R2YXJhbmplIHBvbW/Eh25vZyBwcm9jZXNhIHByaSBwcmV0cmHFvml2YW5qdSByZWdpc3RyYSIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJPcGNpamUgR1N0cmVhbWVyLWEiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJQcmlrYcW+aSBvcGNpamUgR1N0cmVhbWVyLWEiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiTmVwb3puYXRhIG9wY2lqYSIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGplIG5hacWhYW8gbmEgb3DEh3UgZ3JlxaFrdSB1IG9zbm92bm9qIGJpYmxpb3RlY2kuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIlN0dmFyYW9jaSBHU3RyZWFtZXItYSBiaWxpIHN1IGxpamVuaSBkYSBkb2RpamVsZSBryI9kIG92b2ogZ3JlxaFjaS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiSW50ZXJuYSBHU3RyZWFtZXIgZ3JlxaFrYToga8iPZCBuaWplIGltcGxlbWVudGlyYW4uIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyIGdyZcWha2E6IG5pamUgdXNwamVsYSBwcm9tamVuYSBzdGFuamEgaSBuZWtpIGVsZW1lbnQgbmlqZSB1c3BpbyAiCi0icG9zbGF0aSBwcmF2aWxudSBwb3J1a3UgbyBncmXFoWNpIHMgcmF6bG9nb20gemEgbmV1c3BqZWguIgotCi0jIDEuIGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9tYW51YWwvaHRtbC9zZWN0aW9uLWludHJvLWJhc2ljcy1wYWRzLmh0bWwKLSMgMi4gcGFkICh1IGVsZWt0cm9uc2tvaiBnbGF6YmkpID4gQSBjYXRlZ29yeSBvZiBzeW50aHNpemVyIHBhdGNoZXMgd2hpY2ggcHJvZHVjZSBhIHNvZnQsIHBsZWFzaW5nIHNvdW5kLgotIyAzLiBQYWRzIGFyZSBlbGVtZW50J3MgaW5wdXQgYW5kIG91dHB1dCwgd2hlcmUgeW91IGNhbiBjb25uZWN0IG90aGVyIGVsZW1lbnRzCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLSJJbnRlcm5hIEdTdHJlYW1lciBncmXFoWthOiBwcm9ibGVtIHMg4oCYcGFk4oCZLW9tIChzcG9qacWhdGVtOyB1bGF6L2l6bGF6ICIKLSJlbGVtZW5hdGEpLiIKLQotIyBSYcSNLjogbmV6YXZpc25pIHNrdXAgbmFyZWRiaSBrb2ppIHNlIHNhbW9zdGFsbm8gaXp2csWhYXZhanUgdSBwcm9ncmFtdQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5hIEdTdHJlYW1lciBncmXFoWthOiBwcm9ibGVtIHMgbml0aSAodGhyZWFkKS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIgZ3JlxaFrYTogcHJvYmxlbSB1IGRvZ292YXJhbmp1IChwb3Zleml2YW5qZSBlbGVtZW5hdGEpLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmEgR1N0cmVhbWVyIGdyZcWha2E6IHByb2JsZW0gcyBkb2dhxJFhamVtIChldmVudCkuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5hIEdTdHJlYW1lciBncmXFoWthOiBwcm9ibGVtIHUgdHJhZ2FuanUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5hIEdTdHJlYW1lciBncmXFoWthOiBwcm9ibGVtIHMgbW9ndcSHbm9zdGltYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuYSBHU3RyZWFtZXIgZ3JlxaFrYTogcHJvYmxlbSBzIHRhZ292aW1hIChvem5ha2FtYSkuIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiVmHFoW9qIEdTdHJlYW1lciBpbnN0YWxhY2lqaSBuZWRvc3RhamUgcGx1Zy1pbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIgZ3JlxaFrYTogcHJvYmxlbSBzIHZyZW1lbm9tIChzaW5rcm9uaXphY2lqYSkuIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLSJBcGxpa2FjaWphIHBva3XFoWF2YSBrb3Jpc3RpdGkgR1N0cmVhbWVyIGZ1bmtjaWp1IGtvamEgamUgYmlsYSBvbmVtb2d1xIdlbmEuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgamUgbmFpxaFhbyBuYSBvcMSHdSBncmXFoWt1IHUgcG9tb8SHbm9qIGJpYmxpb3RlY2kuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiUG9tb8SHbnUgYmlibGlvdGVrdSBuaWplIG1vZ3XEh2UgaW5pY2lqYWxpemlyYXRpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJQb21vxIdudSBiaWJsaW90ZWt1IG5pamUgbW9ndcSHZSB6YXR2b3JpdGkuIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJQb21vxIdudSBiaWJsaW90ZWt1IG5pamUgbW9ndcSHZSBrb25maWd1cmlyYXRpLiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiR3JlxaFrYSB1IGtvZGlyYW5qdS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGplIG5hacWhYW8gbmEgb3DEh3UgZ3JlxaFrdSByZXN1cnNhLiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIlJlc3VycyBuaWplIHByb25hxJFlbi4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJSZXN1cnMgamUgemF1emV0IGlsaSBuZWRvc3R1cGFuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiUmVzdXJzIG5pamUgbW9ndcSHZSBvdHZvcml0aSB6YSDEjWl0YW5qZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIlJlc3VycyBuaWplIG1vZ3XEh2Ugb3R2b3JpdGkgemEgcGlzYW5qZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIlJlc3VycyBuaWplIG1vZ3XEh2Ugb3R2b3JpdGkgemEgxI1pdGFuamUgaSBwaXNhbmplLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIk5pamUgbW9ndcSHZSB6YXR2b3JpdGkgcmVzdXJzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICJOaWplIG1vZ3XEh2UgxI1pdGF0aSBpeiByZXN1cnNhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIk5pamUgbW9ndcSHZSBwaXNhdGkgdSByZXN1cnMuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5pamUgbW9ndcSHZSBpenZyxaFpdGkgdHJhZ2FuamUgbmEgcmVzdXJzdS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJOaWplIG1vZ3XEh2Ugc2lua3Jvbml6aXJhdGkgc2UgbmEgcmVzdXJzdS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiTmlqZSBtb2d1xIdlIGRvaHZhdGl0aSBpbGkgcHJpbGFnb2RpdGkgcG9zdGF2a2UgcmVzdXJzYS4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIk5lbWEgdmnFoWUgcHJvc3RvcmEgbmEgcmVzdXJzdS4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJQcmlzdHVwIHJlc3Vyc3UgbmlqZSBhdXRvcml6aXJhbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBqZSBuYWnFoWFvIG5hIG9wxId1IHN0cmVhbSAodG9rIHBvZGF0YWthKSBncmXFoWt1LiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotIkVsZW1lbnQgbmUgaW1wbGVtZW50aXJhIG1hbmlwdWxpcmFuamUgb3ZpbSBzdHJlYW1vbSAodG9rb20gcG9kYXRha2EpLiBNb2xpbSAiCi0icHJpamF2aXRlIGthbyBncmXFoWt1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJOaWplIG1vZ3XEh2Ugb2RyZWRpdGkgdnJzdHUgb3ZvZyBzdHJlYW1hICh0b2thIHBvZGF0YWthKS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJTdHJlYW0gKHRvayBwb2RhdGFrYSkgamUgdnJzdGUga29qb20gb3ZhaiBlbGVtZW50IG5lIG1vxb5lIG1hbmlwdWxpcmF0aS4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIiIKLSJOZW1hIGtvZGVrYSAoY29kZWMpIGtvamkgbW/FvmUgbWFuaXB1bGlyYXRpIG92b20gdnJzdG9tIHN0cmVhbWEgKHRva2EgIgotInBvZGF0YWthKS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIlN0cmVhbSAodG9rIHBvZGF0YWthKSBzZSBuZSBtb8W+ZSBkZWtvZGlyYXRpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiU3RyZWFtICh0b2sgcG9kYXRha2EpIHNlIG5lIG1vxb5lIGtvZGlyYXRpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJTdHJlYW0gKHRvayBwb2RhdGFrYSkgc2UgbmUgbW/FvmUgZGVtdWx0aXBsZWtzaXJhdGkuIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJTdHJlYW0gKHRvayBwb2RhdGFrYSkgc2UgbmUgbW/FvmUgbXVsdGlwbGVrc2lyYXRpLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIlN0cmVhbSAodG9rIHBvZGF0YWthKSBqZSB1IGtyaXZvbSBmb3JtYXR1LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJTdHJlYW0gKHRvayBwb2RhdGFrYSkgamUga3JpcHRpcmFuLCBhIGRla3JpcHRpcmFuamUgbmlqZSBwb2Ryxb5hbm8uIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIlN0cmVhbSAodG9rIHBvZGF0YWthKSBqZSBrcmlwdGlyYW4gaSBuZSBtb8W+ZSBzZSBkZWtyaXB0aXJhdGkgamVyIG5pamUgIgotImRvYml2ZW4gcHJpa2xhZGFuIGtsanXEjS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiTmVtYSBwb3J1a2UgbyBncmXFoWNpIHphIGRvbWVudSAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiTmVtYSBzdGFuZGFyZG5lIHBvcnVrZSBvIGdyZcWhY2kgemEgZG9tZW51ICVzIGkga8iPZCAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIk9kYWJyYW5pIHRha3QgKHNhdCkgc2UgbmUgbW/FvmUga29yaXN0aXRpIHUgY2pldm92b2R1LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiR3JlxaFrYSBwcmkgemFwaXNpdmFuanUgdSBtZcSRdXNwcmVtbmlrIHJlZ2lzdHJhIHUgJXM6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIm5hc2xvdiIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgInVvYmnEjWFqZW5vIGtvcmnFoXRlbmkgbmFzbG92IgotCi1tc2dpZCAidGl0bGUgc29ydG5hbWUiCi1tc2dzdHIgIm5hc2xvdiAoemEgc29ydGlyYW5qZSkiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJ1b2JpxI1hamVubyBrb3JpxaF0ZW5pIG5hc2xvdiAoemEgc29ydGlyYW5qZSkiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgIml6dm/EkWHEjSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAib3NvYmEgb2Rnb3Zvcm5hIHphIHNuaW1rdSIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiaXp2b8SRYcSNIChzb3J0aXJhbmplKSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAib3NvYmEgb2Rnb3Zvcm5hIHphIHNuaW1rdSAoemEgc29ydGlyYW5qZSkiCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAiYWxidW0iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAiYWxidW0ga29qaSBzYWRyxb5pIG92ZSBwb2RhdGtlIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgImFsYnVtIChzb3J0aXJhbmplKSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJhbGJ1bSBrb2ppIHNhZHLFvmkgb3ZlIHBvZGF0a2UgKHphIHNvcnRpcmFuamUpIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJpenZvxJFhxI0gYWxidW1hIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJJenZvxJFhxI0gY2lqZWxvZyBhbGJ1bWEgKHphIHByaWtheikiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIml6dm/EkWHEjSBhbGJ1bWEgKHNvcnRpcmFuamUpIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICJJenZvxJFhxI0gY2lqZWxvZyBhbGJ1bWEgKHphIHNvcnRpcmFuamUpIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiZGF0dW0iCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdHVtIHN0dmFyYW5qYSBwb2RhdGFrYSAodSBvYmxpa3UgR0RhdGUgc3RydWt0dXJlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXR1bS12cmlqZW1lIgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXR1bSBpIHZyaWplbWUgc3R2YXJhbmphIHBvZGF0YWthICh1IG9ibGlrdSBHc3REYXRlVGltZSBzdHJ1a3R1cmUpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgIsW+YW5yIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIsW+YW5yIGtvamVtIHByaXBhZGFqdSBwb2RhY2kiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJrb21lbnRhciIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICJzbG9ib2RhbiB0ZWtzdCBrb2ppIG9waXN1amUgcG9kYXRrZSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgInByb8WhaXJlbmkga29tZW50YXIiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJzbG9ib2RhbiB0ZWtzdCBrb2ppIG9waXN1amUgcG9kYXRrZSB1IG9ibGlrdSBrbGp1xI09dnJpamVkbm9zdCBpbGkgIgotImtsanXEjVtocl09a29tZW50YXIiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgInJlZG5pIGJyb2ogcGplc21lIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgInJlZG5pIGJyb2ogcGplc21lIHUga29sZWtjaWppIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgImJyb2ogcGplc2FtYSIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImJyb2ogcGplc2FtYSB1IGtvbGVrY2lqaSBrb2pvaiBwcmlwYWRhIG92YSBwamVzbWEiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAicmVkbmkgYnJvaiBkaXNrYSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgInJlZG5pIGJyb2ogZGlza2EgdSBrb2xla2NpamkiCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICJicm9qIGRpc2tvdmEiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAiYnJvaiBkaXNrb3ZhIHUga29sZWtjaWppIGtvam9qIHByaXBhZGEgb3ZhaiBkaXNrIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgIm1qZXN0byIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0iUG9kcmlqZXRsbyBtZWRpamEga2FvIFVSSSAobWplc3RvLCBnZGplIHNlIG5hbGF6aSBvcmlnaW5hbG5hIGRhdG90ZWthIGlsaSAiCi0ic3RyZWFtICh0b2sgcG9kYXRha2EpKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICJwb8SNZXRuYSBzdHJhbmljYSIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLSJQb8SNZXRuYSBzdHJhbmljYSBvdm9nIG1lZGlqYSAobnByLiBwb8SNZXRuYSBzdHJhbmljYSBpenZvxJFhxI1hIGlsaSBmaWxtYSkiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAib3BpcyIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAic2HFvmV0YWsga29qaSBvcGlzdWplIHNhZHLFvmFqIHBvZGF0YWthIgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAiaW5hxI1pY2EiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAiaW5hxI1pY2Egb3ZpaCBwb2RhdGFrYSIKLQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIklTUkMiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gcG9nbGVkYWp0ZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJvcmdhbml6YWNpamEiCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgImNvcHlyaWdodCIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIm5hcG9tZW5hIG8gYXV0b3Jza2ltIHByYXZpbWEgcG9kYXRha2EiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJjb3B5cmlnaHQgdXJpIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgYWRyZXNhIHMgbmFwb21lbm9tIG8gYXV0b3Jza2ltIHByYXZpbWEgbmEgcG9kYXRrZSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgImtvZGlyYW8iCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICJpbWUgb3NvYmUgaWxpIG9yZ2FuaXphY2lqZSBrb2phIGplIGtvZGlyYWxhIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAia29udGFrdCIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImluZm9ybWFjaWplIG8ga29udGFrdHUiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaWNlbmNpamEiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImxpY2VuY2lqYSB6YSBwb2RhdGtlIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgInVyaSBsaWNlbmNpamEiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSBhZHJlc2EgemEgbGljZW5jaWp1IHBvZGF0YWthIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJpenZvxJFhxI0iCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAib3NvYmEga29qYSBpenZvZGkiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAic2tsYWRhdGVsaiIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAib3NvYmEga29qYSBqZSBza2xhZGFsYSBzbmlta3UgLyBvc29iZSBrb2plIHNlIHNrbGFkYWxlIHNuaW1rdSIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAiZGlyaWdlbnQiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgImRpcmlnZW50L25hcm/EjWl0aSBpenZvxJFhxI0iCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAidHJhamFuamUiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAiZHXFvmluYSB1IEdTdHJlYW1lciB2cmVtZW5za2ltIGplZGluaWNhbWEgKG5hbm9zZWt1bmRlKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgdSBrb2plbSBzdSBzcHJlbWxqZW5pIHBvZGFjaSIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJ2aWRlbyBrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgdSBrb2plbSBzdSBzcHJlbWxqZW5pIHZpZGVvIHBvZGFjaSIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJhdWRpbyBrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgdSBrb2plbSBzdSBzcHJlbWxqZW5pIGF1ZGlvIHBvZGFjaSIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJrb2RlayB0aXRsb3ZhIgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2RlayB1IGtvamVtIHN1IHNwcmVtbGplbmkgcG9kYWNpIG8gdGl0bG92aW1hIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiZm9ybWF0IGtvbnRlam5lcmEiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiZm9ybWF0IGtvbnRlam5lcmEgdSBrb2plbSBzdSBzcHJlbWxqZW5pIHBvZGFjaSIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgImJyemluYSIKLQotbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgInRvxI1uYSBpbGkgcHJvc2plxI1uYSBicnppbmEgdSBiaXRvdmltYSBwbyBzZWt1bmRpIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJub21pbmFsbmEgYnJ6aW5hIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibm9taW5hbG5hIGJyemluYSB1IGJpdG92aW1hIHBvIHNla3VuZGkiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm5ham1hbmphIGJyemluYSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm5ham1hbmphIGJyemluYSB1IGJpdG92aW1hIHBvIHNla3VuZGkiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm5hanZlxIdhIGJyemluYSIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm5hanZlxIdhIGJyemluYSB1IGJpdG92aW1hIHBvIHNla3VuZGkiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICJrb2RlciIKLQotbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgImtvZGVyIHVwb3RyZWJsamVuIHphIGtvZGlyYW5qZSBvdm9nIHN0cmVhbWEgKHRva2EgcG9kYXRha2EpIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJpbmHEjWljYSBrb2RlcmEiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJpbmHEjWljYSBrb2RlcmEgdXBvdHJlYmxqZW5vZyB6YSBrb2RpcmFuamUgb3ZvZyBzdHJlYW1hICh0b2thIHBvZGF0YWthKSIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAic2VyaWpza2kgYnJvaiIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgInNlcmlqc2tpIGJyb2ogcGplc21lIgotCi0jIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlcGxheUdhaW4KLSMgaHR0cDovL3d3dy5hdWRpb2hxLmRlL2luZGV4LnBocD9zaG93dG9waWM9MjMjUmVmZXJlbnpsYXV0c3RhZXJrZQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAicHJpbGFnb2RiYSBnbGFzbm/Eh2UgKHJlcGxheWdhaW4pIHBqZXNtZSAodHJhY2spIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAicmF6aW5hIGdsYXNub8SHZSBwamVzbWUgKHRyYWNrKSB1IGRlY2liZWxpbWEiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgInByaWxhZ29kYmEgKHJlcGxheWdhaW4pIHZyxaFuZSBnbGFzbm/Eh2UgcGplc21lICh0cmFjaykiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAidnLFoW5hIHJhemluYSBnbGFzbm/Eh2UgcGplc21lIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJwcmlsYWdvZGJhIChyZXBsYXlnYWluKSBnbGFzbm/Eh2UgYWxidW1hIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAicmF6aW5hIGdsYXNub8SHZSBhbGJ1bWEgdSBkZWNpYmVsaW1hIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJwcmlsYWdvZGJhIChyZXBsYXlnYWluKSB2csWhbmUgZ2xhc25vxIdlIGFsYnVtYSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJ2csWhbmEgcmF6aW5hIGdsYXNub8SHZSBhbGJ1bWEiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAicHJpbGFnb2RiYSAocmVwbGF5Z2FpbikgcmVmZXJlbnRuZSBnbGFzbm/Eh2UiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICJyZWZlcmVudG5hIHJhemluYSB6YSBwcmlsYWdvZGJ1IGdsYXNub8SHZSBwamVzbWUgaSBhbGJ1bWEiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJqZXppxI1uaSBryI9kIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAiIgotImplemnEjW5pIGvIj2QgemEgb3ZhaiBzdHJlYW0gKHRvayBwb2RhdGFrYSksIHUgc2tsYWR1IHMgSVNPLTYzOS0xIGlsaSBJU08tNjM5LTIiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJpbWUgamV6aWthIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgInVvYmnEjWFqZW5vIGltZSBqZXppa2EgdSBrb2plbSBqZSBvdmFqIHN0cmVhbSAodG9rIHBvZGF0YWthKSIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJzbGlrYSIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgInNsaWthIHBvdmV6YW5hIHMgb3ZpbSBzdHJlYW1vbSAodG9rb20gcG9kYXRha2EpIgotCi0jIHRodW1ibmFpbAotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAic2xpxI1pY2EiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgInNsacSNaWNhIHBvdmV6YW5hIHMgb3ZpbSBzdHJlYW1vbSAodG9rb20gcG9kYXRha2EpIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAicHJpbG9nIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZGF0b3Rla2EgcHJpbG/FvmVuYSBvdm9tIHN0cmVhbXUgKHRva3UgcG9kYXRha2EpIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAib3RrdWNhamEgdSBtaW51dGkgKHRlbXBvKSIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICJicm9qIG90a3VjYWphIHUgbWludXRpICh0ZW1wbykgenZ1xI1ub2cgemFwaXNhIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgImtsanXEjW5lIHJpamXEjWkiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAiemFyZXppbWEgb2R2b2plbmUga2xqdcSNbmUgcmlqZcSNaSBrb2plIG9waXN1anUgc2FkcsW+YWoiCi0KLSMgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2VvbG9jYXRpb24KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAiZ2VvbG9rYWNpanNrbyBpbWUgbWplc3RhIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIsSMaXRsaml2IG9waXMgbWplc3RhIGdkamUgamUgbWVkaWogc25pbWxqZW4gaWxpIHByb2R1Y2lyYW4iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgImdlb2xva2FjaWpza2EgxaFpcmluYSIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotImdlb2dyYWZza2EgxaFpcmluYSBtamVzdGEgZ2RqZSBqZSBtZWRpaiBzbmltbGplbiBpbGkgcHJvZHVjaXJhbiwgdSAiCi0ic3R1cG5qZXZpbWEgcHJlbWEgV0dTODQgKG51bGEgbmEgZWt2YXRvcnUsIG5lZ2F0aXZuZSB2cmlqZWRub3N0aSB6YSBqdcW+bnUgIgotInBvbHV0a3UpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiZ2VvbG9rYWNpanNrYSBkdcW+aW5hIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotImdlb2dyYWZza2EgZHXFvmluYSBtamVzdGEgZ2RqZSBqZSBtZWRpaiBzbmltbGplbiBpbGkgcHJvZHVjaXJhbiwgdSAiCi0ic3R1cG5qZXZpbWEgcHJlbWEgV0dTODQgKG51bGEgbmEgbnVsdG9tIG1lcmlkaWphbnUgR3JlZW53aWNoL1VLLCBuZWdhdGl2bmUgIgotInZyaWplZG5vc3RpIHphIHphcGFkbmUgZHXFvmluZSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICJnZW9sb2thY2lqc2thIHZpc2luYSIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSJuYWRtb3Jza2EgdmlzaW5hIG1qZXN0YSBnZGplIGplIG1lZGlqIHNuaW1samVuIGlsaSBwcm9kdWNpcmFuLCB1IG1ldHJpbWEgIgotInByZW1hIFdHUzg0IChudWxhIGplIHByb3NqZcSNbmEgcmF6aW5hIG1vcmEpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgImdlb2xva2FjaWpza2kgcG9sb8W+YWogZHLFvmF2ZSIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJkcsW+YXZhIChlbmdsZXNrbyBpbWUpIGdkamUgamUgbWVkaWogc25pbWxqZW4gaWxpIHByb2R1Y2lyYW4iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiZ2VvbG9rYWNpanNraSBwb2xvxb5haiBncmFkYSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJncmFkIChlbmdsZXNrbyBpbWUpIGdkamUgamUgbWVkaWogc25pbWxqZW4gaWxpIHByb2R1Y2lyYW4iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCi1tc2dzdHIgImdlb2xva2FjaWpza2kgcG9sb8W+YWogZGplbGEgZ3JhZGEiCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotIm1qZXN0byB1IGdyYWR1IGdkamUgamUgbWVkaWogc25pbWxqZW4gaWxpIHByb2R1Y2lyYW4gKG5wci4gZ3JhZHNrYSDEjWV0dnJ0KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJnZW9sb2thY2lqc2thIHZvZG9yYXZuYSBncmXFoWthIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgIm/EjWVraXZhbmEgZ3JlxaFrYSBtamVyZSB2b2RvcmF2bm9nIHBvbG/FvmFqYSAodSBtZXRyaW1hKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAiZ2VvbG9rYWNpanNrYSBicnppbmEga3JldGFuamEiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgImJyemluYSBrcmV0YW5qYSB1cmXEkWFqYSB6YSBzbmltYW5qZSBwcmkgc25pbWFuanUsIHUgbS9zIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiZ2VvbG9rYWNpanNraSBzbWplciBrcmV0YW5qYSIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotIm96bmHEjWF2YSBzbWplciBrcmV0YW5qYSB1cmXEkWFqYSBrb2ppIHNuaW1hIG1lZGlqLiBQcmlrYXphbiBqZSB1IHN0dXBuamV2aW1hICIKLSJ1IHByaWthenUgcyBkZWNpbWFsbmltIHphcmV6b20sIDAgb3puYcSNYXZhIHplbWxqb3Bpc25pIHNqZXZlciBpIHBvdmXEh2F2YSBzZSAiCi0idSBzbWplcnUga2F6YWxqa2UgbmEgc2F0dSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAiZ2VvbG9rYWNpanNraSBzbWplciBzbmltYW5qYSIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotIm96bmHEjWF2YSB1c21qZXJlbmplIHVyZcSRYWphIGtvamkgc25pbWEgbWVkaWouIFByaWthemFuIGplIHUgc3R1cG5qZXZpbWEgdSAiCi0icHJpa2F6dSBzIGRlY2ltYWxuaW0gemFyZXpvbSwgMCBvem5hxI1hdmEgemVtbGpvcGlzbmkgc2pldmVyIGkgcG92ZcSHYXZhIHNlIHUgIgotInNtamVydSBrYXphbGprZSBuYSBzYXR1IgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgImltZSBlbWlzaWplIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAiSW1lIHNlcmlqZSBpbGkgdHYvcG9kY2FzdCBlbWlzaWplIGl6IGtvamUgamUgbWVkaWoiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgImltZSBlbWlzaWplIChzb3J0aXJhbmplKSIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiSW1lIHNlcmlqZSBpbGkgdHYvcG9kY2FzdCBlbWlzaWplIGl6IGtvamUgamUgbWVkaWogKHphIHNvcnRpcmFuamUpIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgImJyb2ogZXBpem9kZSIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJCcm9qIGVwaXpvZGUgdSBzZXpvbmkgaXoga29qZSBqZSBtZWRpaiIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgImJyb2ogc2V6b25lIgotCi1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIkJyb2ogc2V6b25lIGVtaXNpamUgaXoga29qZSBqZSBtZWRpaiIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAidGVrc3RvdmkiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIlRla3N0b3ZpIG1lZGlqYSwga29yaXN0aSBzZSBvYmnEjW5vIHphIHBqZXNtZSIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJza2xhZGF0ZWxqIChzb3J0aXJhbmplKSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIm9zb2JhIGtvamEgamUgc2tsYWRhbGEgc25pbWt1ICh6YSBzb3J0aXJhbmplKSIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICJncnVwaXJhbmplIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iR3J1cGlyYSBwb3ZlemFuZSBtZWRpamUga29qaSBzZSBwcm90ZcW+dSBrcm96IHZpxaFlIHBqZXNhbWEsIGthbyBucHIuICIKLSJyYXpsacSNaXRpIHN0YXZjaSBrb25jZXJ0YS4gVG8gamUgdmnFoWEgcmF6aW5hIG9kIHBqZXNtZSwgYWxpIG5pxb5hIG9kIGFsYnVtYSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJrb3Jpc25pxI1rYSBvY2plbmEiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIk9jamVuYSBrb2p1IGplIGRvZGlqZWxpbyBrb3Jpc25pay4gxaB0byBqZSB2ZcSHYSwga29yaXNuaWt1IHNlIHZpxaFlIHN2acSRYSBtZWRpaiIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgInByb2l6dm/EkWHEjSB1cmXEkWFqYSIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIlByb2l6dm/EkWHEjSB1cmXEkWFqYSBrb2ppbSBqZSBuYXByYXZsamVuIG1lZGlqIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJtb2RlbCB1cmXEkWFqYSIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTW9kZWwgdXJlxJFhamEga29yacWhdGVuIHphIGl6cmFkdSBtZWRpamEiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJpbWUgcHJvZ3JhbWEiCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIlByb2dyYW0ga29yacWhdGVuIHphIGl6cmFkdSBtZWRpamEiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJwcm9ncmFtc2tpIHBvZGFjaSIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIlByb2l6dm9sam5pIHByb2dyYW1za2kgcG9kYWNpIHVrbGp1xI1lbmkgdSBtZWRpaiIKLQotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICJvcmlqZW50YWNpamEgc2xpa2UiCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIktha28gc2Ugc2xpa2EgdHJlYmEgcm90aXJhdGkgaWxpIHByZW9rcmVudXRpIHByaWplIHByaWthemEiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIml6ZGF2YcSNIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgbGFiZWwgb3IgcHVibGlzaGVyIgotbXNnc3RyICJJbWUgc3R1ZGlqYSBpbGkgaXpkYXZhxI1hIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIm9icmFkYSIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICJJbmZvcm1hY2lqZSBvIGxqdWRpbWEga29qaSBzdSByYWRpbGkgbmEgcmVtaWtzdSBpIHNsacSNbmltIG9icmFkYW1hIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIm1pZGktYmFzZS1ub3RlIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICJCcm9qIG5vdGUgTUlESSBuYSBhdWRpbyB6YXBpc3UuIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICJwcml2YXRuaS1wb2RhY2kiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIlByaXZhdG5pIHBvZGFjaSIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICJaYSBwcm90b2tvbCAlcyBuaWplIHByb25hxJFlbiBVUkkgcnVrb3ZhdGVsaiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAiVVJJIHNoZW1hIOKAmCVz4oCZIG5pamUgcG9kcsW+YW5hIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkdSRcWgS0E6IGl6IGVsZW1lbnRhICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkRvZGF0bmUgaW5mb3JtYWNpamUgemEgZGVidWdpcmFuamU6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJ2ZXphIG5lbWEgc291cmNlIChpenZvcikgW3Npbms9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgInZlemEgbmVtYSBzaW5rIChjaWxqKSBbc291cmNlPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIm5lbWEgc3ZvanN0dmEg4oCeJXPigJwgdSBlbGVtZW50dSDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIk5pamUgbW9ndcSHZSBwb3N0YXZpdGkgc3ZvanN0dm8g4oCeJXPigJwgdSBlbGVtZW50dSDigJ4lc+KAnCBzYSDigJ4lc+KAnCIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICJPZGdvxJFlbm8gcG92ZXppdmFuamUgbmlqZSB1c3BqZWxvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAibmlqZSBtb2d1xIdlIHBvdmV6YXRpICVzIHNhICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJuZW1hIGVsZW1lbnRhIOKAniVz4oCcIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJuZW/EjWVraXZhbmEgcmVmZXJlbmNpamEg4oCeJXPigJwgLSB6YW5lbWFydWplIHNlIgotCi0jIHBhZCAodSBlbGVrdHJvbnNrb2ogZ2xhemJpKSA+IEEgY2F0ZWdvcnkgb2Ygc3ludGhzaXplciBwYXRjaGVzIHdoaWNoIHByb2R1Y2UgYSBzb2Z0LCBwbGVhc2luZyBzb3VuZC4KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0ibmVvxI1la2l2YW4g4oCYcGFkLXJlZmVyZW5jZeKAmSAocmVmZXJlbmNpamEgbmEgc3BvamnFoXRlKSDigJ4lc+KAnCAtIHphbmVtYXJ1amUgc2UiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICJNb2d1xIdub3N0IOKAniVz4oCcIG5pamUgbW9ndcSHZSBvYnJhZGl0aSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5lIHBvc3Rvamkgc2luayBlbGVtZW50IHphIGFkcmVzdSBVUkkg4oCeJXPigJwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5lIHBvc3Rvamkgc291cmNlIChpenZvcikgZWxlbWVudCB6YSBhZHJlc3UgVVJJIOKAniVz4oCcIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICJncmXFoWthIHUgc2ludGFrc2kiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJzcGVjaWZpY2lyYW4gamUgcHJhem5pIHNwcmVtbmlrIOKAniVz4oCcOyB0byBuaWplIGRvcHXFoXRlbm8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJuZW1hIHNwcmVtbmlrYSDigJ4lc+KAnCwgcmFzcGFraXJhdmFuamUgZWxlbWVuYXRhIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgInByYXphbiBjamV2b3ZvZCBuaWplIGRvcHXFoXRlbiIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJQdW5vIG1lxJF1c3ByZW1uaWthIGplIG9kYmHEjWVuby4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIlByb2JsZW0gdW51dHJhxaFuamVnIHByb3Rva2EgcG9kYXRha2EuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiSW50ZXJuYSBncmXFoWthIHByb3Rva2EgcG9kYXRha2EuIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICJJbnRlcm5hIGdyZcWha2EgdSB2cmVtZW51IChzaW5rcm9uaXphY2lqZSkuIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICJOaWplIHVzcGplbG8gcHJlc2xpa2F0aSAobWFwKSBtZcSRdXNwcmVtbmlrLiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJGaWx0cmlyYW5qZSBtb2d1xIdub3N0aSIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iT2dyYW5pxI1pIGRvcHXFoXRlbmUgbW9ndcSHbm9zdGkgKE5VTEwgem5hxI1pIEFOWSkuIFBvc3RhdmxqYW5qZSBvdm9nIHN2b2pzdHZhICIKLSJwcm9zbGplxJF1amUgcmVmZXJlbmNpanUgbmEgbmF2ZWRlbmkgR3N0Q2FwcyBvYmpla3R1LiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIk5hxI1pbiBpem1qZW5hIG1vZ3XEh25vc3RpIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiRmlsdHJpcmFuamUgcG9uYcWhYW5qYSBpem1qZW5hIG1vZ3XEh25vc3RpIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiTmlqZWRhbiBwcml2cmVtZW5pIGRpcmVrdG9yaWogbmlqZSBzcGVjaWZpY2lyYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIlByaXZyZW1lbnUgZGF0b3Rla3Ug4oCeJXPigJwgbmlqZSBtb2d1xIdlIG5hcHJhdml0aSAoa3JlaXJhdGkpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkRhdG90ZWt1IOKAniVz4oCcIG5pamUgbW9ndcSHZSBvdHZvcml0aSB6YSDEjWl0YW5qZS4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICJHcmXFoWthIHByaSBwaXNhbmp1IHUgcHJldXpldHUgZGF0b3Rla3UuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5pamUgc3BlY2lmaWNpcmFuYSBkYXRvdGVrYSB6YSBwaXNhbmplLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkRhdG90ZWt1IOKAniVz4oCcIG5pamUgbW9ndcSHZSBvdHZvcml0aSB6YSBwaXNhbmplLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiR3JlxaFrYSB6YXR2YXJhbmphIGRhdG90ZWtlIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiR3JlxaFrYSBwcmkgdHJhZ2FuanUgdSBkYXRvdGVjaSDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkdyZcWha2EgcHJpIHBpc2FuanUgdSBkYXRvdGVrdSDigJ4lc+KAnC4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTmlqZSBzcGVjaWZpY2lyYW5hIGRhdG90ZWthIHphIMSNaXRhbmplLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiTmUgbW9ndSBzZSBkb2JpdGkgcG9kYWNpIG8g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIuKAniVz4oCcIGplIGRpcmVrdG9yaWouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiRGF0b3Rla2Eg4oCeJXPigJwgamUgdXRpxI1uaWNhIChwcmlzdHVwbmEgdG/EjWthLCBzb2NrZXQpLiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIkdyZcWha2EgKG5ldXNwamVoKSBuYWtvbiBpdGVyYWNpamEsIGthbyDFoXRvIGplIGkgemF0cmHFvmVuby4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJtb2d1xIdub3N0aSIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgIm90a3JpdmVuZSBzdSBtb2d1xIdub3N0aSB1IHN0cmVhbXUgKHRva3UgcG9kYXRha2EpIgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAibmFqbWFuamUiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICJwcmlzaWxpIG1vZ3XEh25vc3RpIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgInByaXNpbGkgbW9ndcSHbm9zdGkgYmV6IHVwb3RyZWJlIOKAmHR5cGVmaW5k4oCZIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIlN0cmVhbSAodG9rIHBvZGF0YWthKSBuZSBzYWRyxb5pIGRvdm9sam5vIHBvZGF0YWthLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiU3RyZWFtICh0b2sgcG9kYXRha2EpIG5lIHNhZHLFvmkgcG9kYXRrZS4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICJJbXBsZW1lbnRpcmFuYSBzdcSNZWxqYTpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICLEjWl0bGppdm8iCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAiemFwaXNpdm8iCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICJ6YXN0YXJqZWxvIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJ1cHJhdmxqaXZvIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgInByb21qZW5qaXZvIHUgc3RhbmphIE5VTEwsIFJFQURZLCBQQVVTRUQgaWxpIFBMQVlJTkciCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICJwcm9tamVuaml2byBzYW1vIHUgc3RhbmphIE5VTEwsIFJFQURZIGlsaSBQQVVTRUQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAicHJvbWplbmppdm8gc2FtbyB1IHN0YW5qYSBOVUxMIGlsaSBSRUFEWSIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiWmFicmFuamVuZSBkYXRvdGVrZSAoY3JuYSBsaXN0YSk6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAiVWt1cGFuIGJyb2o6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgemFicmFuamVuYSBkYXRvdGVrYSIKLW1zZ3N0clsxXSAiJWQgemFicmFuamVuZSBkYXRvdGVrZSIKLW1zZ3N0clsyXSAiJWQgemFicmFuamVuaWggZGF0b3Rla2EiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCBwbHVnaW4iCi1tc2dzdHJbMV0gIiVkIHBsdWdpbmEiCi1tc2dzdHJbMl0gIiVkIHBsdWdpbmEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQgc3RhdmthIHBvcGlzYSB6YWJyYW5hIChjcm5lIGxpc3RlKSIKLW1zZ3N0clsxXSAiJWQgc3RhdmtlIHBvcGlzYSB6YWJyYW5hIChjcm5lIGxpc3RlKSIKLW1zZ3N0clsyXSAiJWQgc3RhdmtpIHBvcGlzYSB6YWJyYW5hIChjcm5lIGxpc3RlKSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgem5hxI1hamthIgotbXNnc3RyWzFdICIlZCB6bmHEjWFqa2UiCi1tc2dzdHJbMl0gIiVkIHpuYcSNYWpraSIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiSXNwacWhaSBzdmUgZWxlbWVudGUiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJJc3BpxaFpIHBvcGlzIHphYnJhbmplbmloIGRhdG90ZWthIChjcm51IGxpc3R1KSIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iSXNwacWhaSBzdHJvam5vIMSNaXRsaml2IHBvcGlzIHpuYcSNYWpraSBzcGVjaWZpY2lyYW5vZyBwbHVnaW5hIGlsaSBzdmloICIKLSJwbHVnaW5hLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS29yaXNubyBwcmkgcG92ZXppdmFuanUgcyB2YW5qc2tpbSAiCi0ibWVoYW5pem1pbWEgemEgYXV0b21hdHNrdSBpbnN0YWxhY2lqdSBwbHVnaW5hIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICJJc3BpxaFpIHNhZHLFvmFqIHBsdWdpbmEiCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiUHJvdmplcml0ZSBha28gc3BlY2lmaWNpcmFuaSBlbGVtZW50IGlsaSBwbHVnaW4gcG9zdG9qaSIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLSJQcmlsaWtvbSBwcm92amVyZSBkYSBsaSBlbGVtZW50IGlsaSBwbHVnaW4gcG9zdG9qaSwgdGFrb8SRZXIgcHJvdmplcml0ZSBkYSBqZSAiCi0ibmplZ292YSBpbmHEjWljYSBiYXJlbSBvbmEga29qYSBqZSBzcGVjaWZpY2lyYW5hIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICJJc3BpxaFpIHBvZHLFvmFuZSBVUkkgc2hlbWUsIHMgZWxlbWVudGltYSBrb2ppIGloIGltcGxlbWVudGlyYWp1IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJOaWplIG1vZ3XEh2UgdcSNaXRhdGkgcGx1Z2luIGRhdG90ZWt1OiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJOZW1hIHRha3ZvZyBlbGVtZW50YSBpbGkgcGx1Z2luYSDigJ4lc+KAnFxuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiU3RhdGlzdGlrZSBpbmRla3NhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiRG9iaW8gcG9ydWt1ICMldSBvZCBlbGVtZW50YSDigJ4lc+KAnCAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIkRvYml2ZW5hIHBvcnVrYSAjJXUgb2Qg4oCYcGFk4oCZLWEgKHNwb2ppxaF0YSkg4oCeJXM6JXPigJwgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJEb2JpbyBwb3J1a3UgIyV1IG9kIG9iamVrdGEg4oCeJXPigJwgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIkRvYmlvIHBvcnVrdSAjJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRG9iaW8gRU9TIG9kIGVsZW1lbnRhIOKAniVz4oCcLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIlBST05BxJBFTiBUQUc6IHByb25hxJFlbiBlbGVtZW50b20g4oCeJXPigJwuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICJQUk9OQcSQRU4gVEFHOiBwcm9uYcSRZW4gcyDigJhwYWTigJktb20gKHNwb2ppxaF0ZW0pIOKAniVzOiVz4oCcLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiUFJPTkHEkEVOIFRBRzogcHJvbmHEkWVuIG9iamVrdG9tIOKAniVz4oCcLlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIlBST05BxJBFTiBUQUdcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJQUk9OQcSQRU4gVE9DOiBwcm9uYcSRZW4gZWxlbWVudG9tIOKAniVz4oCcLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiUFJPTkHEkEVOIFRPQzogcHJvbmHEkWVuIG9iamVrdG9tIOKAniVz4oCcLlxuIgotCi1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIlBST05BxJBFTiBUT0NcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iSU5GT1JNQUNJSkU6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIlVQT1pPUkVOSkU6IG9kIGVsZW1lbnRhICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByaXByZW1samVuLCDEjWVrYW5qZSBkYSB6YXZyxaFpIHB1bmplbmplIG1lxJF1c3ByZW1uaWthLi4uXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJQcmlwcmVtbGplbiwgxI1la2FuamUgZGEgc2UgemF2csWhaSBwcm9ncmVzLi4uXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgInB1bmplbmplIG1lxJF1c3ByZW1uaWthLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotIkdvdG92byBqZSBzcHJlbWFuamUgdSBtZcSRdXNwcmVtbmlrLCBwb3N0YXZsamFtIGNqZXZvdm9kIHUgUExBWUlORyAuLi5cbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIlB1bmplbmplIG1lxJF1c3ByZW1uaWthLCBwb3N0YXZsamFtIGNqZXZvdm9kIHUgUEFVU0VEIC4uLlxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiUHJlcmFzcG9kamVsYSBsYXRlbmNpamUuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJQb3N0YXZsamFtIHN0YW5qZSB1ICVzIGthbyDFoXRvIHRyYcW+aSAlcy4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiUHJla2lkOiBaYXVzdGF2bGphbSBjamV2b3ZvZCAuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICJQcm9ncmVzOiAoJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICJOZWRvc3RhamUgZWxlbWVudCAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICJEb2JpdmVuIGtvbnRla3N0IG9kIGVsZW1lbnRhIOKAmCVz4oCZOiAlcz0lc1xuIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICJJemxhem5pIHRhZ292aSAob3puYWtlLCBwb3puYXRlIGkga2FvIG1ldGFwb2RhY2kpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiUHJpa2HFvmkgVE9DIChwb2dsYXZsamEgaSBpemRhbmphKSIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIlByaWthxb5pIGluZm9ybWFjaWp1IG8gc3RhdHVzdSBpIHByaW9wxIdlbmphIG8gc3ZvanN0dmltYSIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIk5lIGlzcGlzdWogaW5mb3JtYWNpamUgbyBwcm9ncmVzdSIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiSXNwaXN1aiBwb3J1a2UiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotIkFrbyBqZSBvbW9ndcSHZW4gb3DFoWlybmkgaXNwaXMsIG9uZGEgbmUgaXNwaXN1aiBvYmF2aWplc3RpIG8gc3RhdHVzdSB6YSAiCi0ic3BlY2lmaWNpcmFubyBzdm9qc3R2byAob3ZvIHNlIG1vxb5lIHZpxaFla3JhdG5vIHVwb3RyaWplYml0aSkiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICJJTUUtU1ZPSlNUVkEiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgIk5lIGluc3RhbGlyYWogcnVrb3ZhdGVsaiBncmXFoWthbWEiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIlByaXNpbGkgRU9TIG5hIHNvdXJjZXMgKGl6dm9yZSkgcHJpamUgemF0dmFyYW5qYSBjamV2b3ZvZGEiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIlByaWt1cGkgaSBpc3BpxaFpIHN0YXRpc3Rpa2UgaW5kZWtzYSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiR1JFxaBLQTogQ2pldm92b2Qgc2UgbmUgbW/FvmUga29uc3RydWlyYXRpOiAlcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkdSRcWgS0E6IENqZXZvdm9kIHNlIG5lIG1vxb5lIGtvbnN0cnVpcmF0aS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIlVQT1pPUkVOSkU6IGNqZXZvdm9kIGplIHNrbG9uIGdyZcWha2FtYTogJXNcbiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiR1JFxaBLQTog4oCYY2pldm92b2RuaeKAmSBlbGVtZW50IG5pamUgcHJvbmHEkWVuLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIkNqZXZvdm9kIHNlIHBvc3RhdmxqYSB1IHN0YW5qZSBQQVVTRUQgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJHUkXFoEtBOiBDamV2b3ZvZCBuZSDFvmVsaSBwYXV6aXJhdGkuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIkNqZXZvdm9kIGplIMW+aXYgaSBuZSB0cmViYSBQUkVST0xMIChwcmlwcmF2dSkuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIkNqZXZvdm9kIHNlIHByaXByZW1hIChQUkVST0xMSU5HKS4uLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiR1JFxaBLQTogY2pldm92b2Qgc2UgbmUgxb5lbGkgcHJpcHJlbWl0aSAocHJlcm9sbCkuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIkNqZXZvdm9kIGplIHByaXByZW1samVuIChQUkVST0xMRUQpIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJDamV2b3ZvZCBqZSBwb3N0YXZsamVuIHUgc3RhbmplIFBMQVlJTkcgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkdSRcWgS0E6IGNqZXZvdm9kIG5lIMW+ZWxpIHJlcHJvZHVjaXJhdGkgKHBsYXkpLlxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIkVPUyBwcmkgemF0dmFyYW5qdSBvbW9ndcSHZW4gLS0gRU9TIHNlIHByaW51xJF1amUgbmEgY2pldm92b2RcbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICJFT1MgcHJpIHphdHZhcmFuanUgb21vZ3XEh2VuIC0tIMSNZWthbmplIG5hIEVPUyBuYWtvbiBncmXFoWtlXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAixIxla2FuamUgbmEgRU9TLi4uXG4iCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJFT1MgcHJpbWxqZW4gLSB6YXVzdGF2bGphbmplIGNqZXZvdm9kYS4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIlUgcHJla2lkdSBkb2sgc2UgxI1la2EgbmEgRU9TIC0gemF1c3RhdmxqYW5qZSBjamV2b3ZvZGEgLi4uXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiRG9nb2RpbGEgc2UgZ3JlxaFrYSBwcmkgxI1la2FuanUgbmEgRU9TXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiSXp2csWhZW5qZSBqZSB6YXZyxaFpbG8gbmFrb24gJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIkNqZXZvdm9kIHNlIHBvc3RhdmxqYSB1IHN0YW5qZSBSRUFEWSAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiQ2pldm92b2Qgc2UgcG9zdGF2bGphIHUgc3RhbmplIE5VTEwgLi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJDamV2b3ZvZCBzZSBwcmF6bmkuLi5cbiIKLQotI34gbXNnaWQgImJpbiIKLSN+IG1zZ3N0ciAic3ByZW1uaWsiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybmEgZ3JlxaFrYSBwcm90b2thIChzdHJlYW0pIHBvZGF0YWthLiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAidmV6YSBiZXogaXp2b3Jub2cgZWxlbWVudGEiCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgotI34gbXNnc3RyICJ2ZXphIGJleiBwcmlqYW1ub2cgZWxlbWVudGEiCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAibmVtYSBlbGVtZW50YSBuYSBrb2ppIMSHZSBzZSBwb3ZlemF0aSBVUkkg4oCeJXPigJ0iCi0KLSN+IG1zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0jfiBtc2dzdHIgIm5lIG1vZ3UgcG92ZXphdGkgcHJpamFtbmkgZWxlbWVudCB6YSBVUkkg4oCeJXPigJ0iCi0KLSN+IG1zZ2lkICJtYXhpbXVtIgotI34gbXNnc3RyICJuYWp2acWhZSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJVcG9yYWJhOiBnc3QteG1sbGF1bmNoIDxkYXRvdGVrYS54bWw+IFsgZWxlbWVudC4iCi0jfiAic3ZvanN0dm89dnJpamVkbm9zdCAuLi4gXVxuIgotCi0jfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgotI34gbXNnc3RyICJHUkXFoEtBOiBhbmFsaXphIHhtbCBkYXRvdGVrZSDigJ4lc+KAnSBuaWplIHVzcGplbGEuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIkdSRcWgS0E6IG5lIHBvc3RvamkgdnLFoW5pIGVsZW1lbnQgY2pldm92b2RhIHUgZGF0b3RlY2kg4oCeJXPigJ0uXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCi0jfiBtc2dzdHIgIlVQT1pPUkVOSkU6IHRyZW51dG5vIGplIHBvZHLFvmFuIHNhbW8gamVkYW4gdnLFoW5pIGVsZW1lbnQuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgIkdSRcWgS0E6IG5lIG1vZ3UgYW5hbGl6aXJhdGkgYXJndW1lbnQgbmFyZWRiZW5vZyByZXRrYSAlZDogJXMuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICJVUE9aT1JFTkpFOiBlbGVtZW50IOKAniVz4oCdIG5pamUgcHJvbmHEkWVuLlxuIgotCi0jfiBtc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKLSN+IG1zZ3N0ciAiTmUgaXNwaXN1aiBpbmZvcm1hY2lqZSBuYXZlZGVuZSBWUlNURSBvIGl6bGF6bm9tIHN0YW5qdSIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVlJTVEExLFZSU1RBMiwuLi4iCi0KLSN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgotI34gbXNnc3RyICJTcHJlbWkgeG1sIHByaWtheiBjamV2b3ZvZGEgdSBEQVRPVEVLVSBpIGl6YcSRaSIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkRBVE9URUtBIgotCi0jfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgotI34gbXNnc3RyICJOZW1vaiBpbnN0YWxpcmF0aSBydWtvdmF0ZWxqIHNpZ25hbGEgemEgU0lHVVNSMSBpIFNJR1VTUjIiCi0KLSN+IG1zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgotI34gbXNnc3RyICJJc3BpxaFpIGFsbG9jIHByYcSHZW5qZSAoYWtvIGplIG9tb2d1xIdlbm8gcHJpIGtvbXBhamxpcmFuanUpIgpkaWZmIC0tZ2l0IGEvcG8vaHUuZ21vIGIvcG8vaHUuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGZjZDkxLi4wMDAwMDAwCi0tLSBhL3BvL2h1LmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2h1LnBvIGIvcG8vaHUucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YTEyNTQuLjAwMDAwMDAKLS0tIGEvcG8vaHUucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzY3ICswLDAgQEAKLSMgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIKLSMgQ29weXJpZ2h0IChjKSAyMDA2IENhbm9uaWNhbCBMdGQsIGFuZCBSb3NldHRhIENvbnRyaWJ1dG9ycwotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCi0jCi0jIEdhYm9yIEtlbGVtZW4gPGtlbGVtZW5nQGdub21lLmh1PiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxNi4KLSMgQmFsw6F6cyDDmnIgPHVyYmFsYXpzQGdtYWlsLmNvbT4sIDIwMTQsIDIwMTUuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS43LjkwXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDMtMTQgMTY6MTArMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogR2Fib3IgS2VsZW1lbiA8a2VsZW1lbmdAZ25vbWUuaHU+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogSHVuZ2FyaWFuIDx0cmFuc2xhdGlvbi10ZWFtLWh1QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogaHVcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCi0iUGx1cmFsLUZvcm1zOiAgbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJBIEdTdHJlYW1lciB2ZXJ6acOzasOhbmFrIGtpw61yw6FzYSIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJNaW5kZW4gZmlneWVsbWV6dGV0w6lzIHbDqWd6ZXRlcyBsZWd5ZW4iCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiQXogZWzDqXJoZXTFkSBoaWJha2VyZXPDqXNpIGthdGVnw7NyacOhayBracOtcsOhc2Egw6lzIGtpbMOpcMOpcyIKLQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIkFsYXDDqXJ0ZWxtZXpldHQgaGliYWtlcmVzw6lzaSBzemludCAxIChjc2FrIGhpYsOhaykgw6lzIDkgKGLDoXJtaSkga8O2esO2dHQsIHZhZ3kgIgotIjAgZXNldMOpbiBuaW5jcyBraW1lbmV0IgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIlNaSU5UIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIkEga2F0ZWfDs3JpYW7DqXY6c3ppbnQgcMOhcm9rIHZlc3N6xZFra2VsIGVsdsOhbGFzenRvdHQgbGlzdMOhamEgYWRvdHQgc3ppbnRlayAiCi0iYmXDoWxsw610w6Fzw6Fob3ogYXogZWd5ZXMga2F0ZWfDs3Jpw6FraG96LiBQw6lsZMOhdWw6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkxJU1RBIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIlN6w61uZXMgaGliYWtlcmVzw6lzaSBraW1lbmV0IGxldGlsdMOhc2EiCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotIk1lZ3bDoWx0b3p0YXRqYSBhIGhpYmFrZXJlc8Opc2kgbmFwbMOzIHN6w61uZXrDqXNpIG3Ds2Rqw6F0LiBMZWhldHPDqWdlcyBtw7Nkb2s6IG9mZiwgIgotIm9uLCBkaXNhYmxlLCBhdXRvLCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIkhpYmFrZXJlc8OpcyBsZXRpbHTDoXNhIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIlLDqXN6bGV0ZXMgYsWRdsOtdG3DqW55YmV0w7ZsdMOpc2kgZGlhZ25vc3p0aWthIGVuZ2Vkw6lseWV6w6lzZSIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIkLFkXbDrXRtw6lueWVrZXQgdGFydGFsbWF6w7Mgw7p0dm9uYWxhayB2ZXNzesWRa2tlbCBlbHbDoWxhc3p0b3R0IGxpc3TDoWphIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIsOaVFZPTkFMQUsiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0iQSBHU1RfUExVR0lOX1BBVEgga8O2cm55ZXpldGkgdsOhbHRvesOzYmFuIG1lZ2Fkb3R0IGxpc3TDoW4ga8OtdsO8bCBlbMWRcmUgIgotImJldMO2bHRlbmTFkSBixZF2w610bcOpbnllayB2ZXNzesWRdmVsIGVsdsOhbGFzenRvdHQgbGlzdMOhamEuIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiQsWQVsONVE3DiU5ZRUsiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICJTemVnbWVudMOhbMOhc2kgaGliw6FrIGVsZm9nw6Fzw6FuYWsgbGV0aWx0w6FzYSBhIGLFkXbDrXRtw6lueWJldMO2bHTDqXMgc29yw6FuIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIkEgbnlpbHbDoW50YXJ0w6FzIGZyaXNzw610w6lzw6luZWsgbGV0aWx0w6FzYSIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIlNlZ8OpZGZvbHlhbWF0IGluZMOtdMOhc8OhbmFrIGxldGlsdMOhc2EgYSBueWlsdsOhbnRhcnTDoXMgZWxlbXrDqXNlIGvDtnpiZW4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiR1N0cmVhbWVyIGJlw6FsbMOtdMOhc2FpIgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiQSBHU3RyZWFtZXIgYmXDoWxsw610w6FzYWluYWsgbWVnamVsZW7DrXTDqXNlIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIklzbWVyZXRsZW4gYmXDoWxsw610w6FzIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJBIEdTdHJlYW1lciDDoWx0YWzDoW5vcyBtYWdrw7ZueXZ0w6FyaGliw6F0IHRhcGFzenRhbHQuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSJBIEdTdHJlYW1lciBmZWpsZXN6dMWRayB0w7psIGx1c3TDoWsgdm9sdGFrIGhpYmFrw7Nkb3QgcmVuZGVsbmkgZWhoZXogYSBoaWLDoWhvei4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiQmVsc8WRIEdTdHJlYW1lciBoaWJhOiBhIGvDs2QgbmluY3MgbWVndmFsw7Nzw610dmEuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyIGhpYmE6IGF6IMOhbGxhcG90dsOhbHTDoXMgbWVnaGnDunN1bHQgw6lzIG7DqWjDoW55IGVsZW0gbmVtIHZvbHQga8OpcGVzICIKLSJtZWdmZWxlbMWRIGhpYmHDvHplbmV0ZXQga8O8bGRlbmkgYSBoaWJhIG9rw6Fyw7NsLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJCZWxzxZEgR1N0cmVhbWVyIGhpYmE6IGtpdMO2bHTDqXNpIHByb2Jsw6ltYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiQmVsc8WRIEdTdHJlYW1lciBoaWJhOiBzesOhbHByb2Jsw6ltYS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIgaGliYTogbWVnw6FsbGFwb2TDoXNpIHByb2Jsw6ltYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJCZWxzxZEgR1N0cmVhbWVyIGhpYmE6IGVzZW3DqW55cHJvYmzDqW1hLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiQmVsc8WRIEdTdHJlYW1lciBoaWJhOiBwb3ppY2lvbsOhbMOhc2kgcHJvYmzDqW1hLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiQmVsc8WRIEdTdHJlYW1lciBoaWJhOiBrw6lwZXNzw6lncHJvYmzDqW1hLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICJCZWxzxZEgR1N0cmVhbWVyIGhpYmE6IGPDrW1rZXByb2Jsw6ltYS4iCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICJBIEdTdHJlYW1lciB0ZWxlcMOtdMOpc2LFkWwgaGnDoW55emlrIGVneSBixZF2w610bcOpbnkuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGhpYmE6IMOzcmFwcm9ibMOpbWEuIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIkF6IGFsa2FsbWF6w6FzIGxldGlsdG90dCBHU3RyZWFtZXIgZnVua2Npw7NrYXQgcHLDs2LDoWwgbWVnIGhhc3puw6FsbmkuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJBIEdTdHJlYW1lciDDoWx0YWzDoW5vcyB0w6Ftb2dhdMOzIHByb2dyYW1rw7ZueXZ0w6FyaGliw6F0IMOpc3psZWx0LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5lbSBzaWtlcsO8bHQgaW5pY2lhbGl6w6FsbmkgYSB0w6Ftb2dhdMOzIHByb2dyYW1rw7ZueXZ0w6FyYXQuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5lbSB6w6FyaGF0w7MgYmUgYSB0w6Ftb2dhdMOzIHByb2dyYW1rw7ZueXZ0w6FyLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTmVtIMOhbGzDrXRoYXTDsyBiZSBhIHTDoW1vZ2F0w7MgcHJvZ3JhbWvDtm55dnTDoXIuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJLw7Nkb2zDoXNpIGhpYmEuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkEgR1N0cmVhbWVyIMOhbHRhbMOhbm9zIGVyxZFmb3Jyw6FzaGliw6F0IMOpc3psZWx0LiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIkF6IGVyxZFmb3Jyw6FzIG5lbSB0YWzDoWxoYXTDsy4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJBeiBlcsWRZm9ycsOhcyBmb2dsYWx0IHZhZ3kgbmVtIMOpcmhldMWRIGVsLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiQXogZXLFkWZvcnLDoXMgbmVtIG55aXRoYXTDsyBtZWcgb2x2YXPDoXNyYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkF6IGVyxZFmb3Jyw6FzIG5lbSBueWl0aGF0w7MgbWVnIMOtcsOhc3JhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiQXogZXLFkWZvcnLDoXMgbmVtIG55aXRoYXTDsyBtZWcgb2x2YXPDoXNyYSDDqXMgw61yw6FzcmEuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiQXogZXLFkWZvcnLDoXMgbmVtIHrDoXJoYXTDsyBsZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiTmVtIGxlaGV0IG9sdmFzbmkgYXogZXLFkWZvcnLDoXNiw7NsLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIk5lbSBsZWhldCDDrXJuaSBheiBlcsWRZm9ycsOhc2JhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgotbXNnc3RyICJOZW0gdsOpZ2V6aGV0xZEgcG96aWNpb27DoWzDoXMgYXogZXLFkWZvcnLDoXNvbi4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJOZW0gbGVoZXQgc3ppbmtyb25pesOhbG5pIGF6IGVyxZFmb3Jyw6Fzb24uIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5lbSBsZWhldCBsZWvDqXJuaS9iZcOhbGzDrXRhbmkgYXogZXLFkWZvcnLDoXMgYmXDoWxsw610w6FzYWl0LiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiTmluY3MgdMO2YmIgaGVseSBheiBlcsWRZm9ycsOhc29uLiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIk5pbmNzIGpvZ29zdWx0c8OhZ2EgYXogZXLFkWZvcnLDoXMgZWzDqXLDqXPDqWhlei4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkEgR1N0cmVhbWVyIMOhbHRhbMOhbm9zIGFkYXRmb2x5YW1oaWLDoXQgw6lzemxlbHQuIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iQXogZWxlbSBuZW0gdmFsw7Nzw610amEgbWVnIGF6IGFkYXRmb2x5YW0ga2V6ZWzDqXPDqXQuIEvDvGxkasO2biBiZSBlZ3kgIgotImhpYmFqZWxlbnTDqXN0LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJOZW0gw6FsbGFww610aGF0w7MgbWVnIGF6IGFkYXRmb2x5YW0gdMOtcHVzYS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIkF6IGFkYXRmb2x5YW0gdMOtcHVzYSBlbHTDqXIgYXogZWxlbSDDoWx0YWwga2V6ZWx0dMWRbC4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIk5pbmNzIGplbGVuIGF6IGFkYXRmb2x5YW0gdMOtcHVzw6F0IGtlemVsbmkga8OpcGVzIGtvZGVrLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiTmVtIGZlanRoZXTFkSB2aXNzemEgYXogYWRhdGZvbHlhbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIkF6IGFkYXRmb2x5YW0gbmVtIGvDs2RvbGhhdMOzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJOZW0gdsOhbGFzenRoYXTDsyBzesOpdCBheiBhZGF0Zm9seWFtLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiTmVtIGVneWVzw610aGV0xZEgYXogYWRhdGZvbHlhbS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJBeiBhZGF0Zm9seWFtIGZvcm3DoXR1bWEgcm9zc3ouIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkF6IGFkYXRmb2x5YW0gdGl0a29zw610b3R0IMOpcyBhIHZpc3N6YWZlanTDqXMgbmVtIHTDoW1vZ2F0b3R0LiIKLQotbXNnaWQgIiIKLSJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCi0iYmVlbiBzdXBwbGllZC4iCi1tc2dzdHIgIiIKLSJBeiBhZGF0Zm9seWFtIHRpdGtvc8OtdG90dCDDqXMgbmVtIGZlanRoZXTFkSB2aXNzemEsIG1pdmVsIG5lbSBrZXLDvGx0IG1lZ2Fkw6FzcmEgIgotIm1lZ2ZlbGVsxZEga3VsY3MuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIk5pbmNzIGhpYmHDvHplbmV0IGEga8O2dmV0a2V6xZEgdGFydG9tw6FueWhvejogJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIiIKLSJOaW5jcyBzemFidsOhbnlvcyBoaWJhw7x6ZW5ldCBhIGvDtnZldGtlesWRIHRhcnRvbcOhbnlob3o6ICVzIMOpcyBrw7NkaG96OiAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIkEga2lqZWzDtmx0IMOzcmEgbmVtIGhhc3puw6FsaGF0w7MgYWRhdGNzYXRvcm7DoWJhbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIkhpYmEgYSByZWdpc3p0csOhY2nDs3MgZ3lvcnPDrXTDs3TDoXIgw61yw6FzYWtvciBlYmJlOiAlczogJXMiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAiY8OtbSIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgIsOhbHRhbMOhbm9zYW4gaGFzem7DoWx0IGPDrW0iCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAiY8OtbSByZW5kZXrDqXNpIG5ldmUiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLDoWx0YWzDoW5vc2FuLCByZW5kZXrDqXNpIGPDqWxsYWwgaGFzem7DoWx0IGPDrW0iCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgImVsxZFhZMOzIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJhIGZlbHbDqXRlbMOpcnQgZmVsZWzFkXMgc3plbcOpbHllayIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiZWzFkWFkw7MgcmVuZGV6w6lzaSBuZXZlIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJhIGZlbHbDqXRlbMOpcnQgZmVsZWzFkXMgc3plbcOpbHllaywgcmVuZGV6w6lzaSBjw6lsbGFsIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImF6IGFkYXRva2F0IHRhcnRhbG1hesOzIGFsYnVtIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgImFsYnVtIHJlbmRlesOpc2kgbmV2ZSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJheiBhZGF0b2thdCB0YXJ0YWxtYXrDsyBhbGJ1bSwgcmVuZGV6w6lzaSBjw6lsbGFsIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhbGJ1bWVsxZFhZMOzIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJBIHRlbGplcyBhbGJ1bSBlbMWRYWTDs2phLCBtZWdqZWxlbsOtdGVuZMWRIGZvcm3DoWJhbiIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiYWxidW1lbMWRYWTDsyByZW5kZXrDqXNpIG5ldmUiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIkEgdGVsamVzIGFsYnVtIGVsxZFhZMOzamEsIHJlbmRlesOpc2hleiBoYXN6bsOhbGhhdMOzIGZvcm3DoWJhbiIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImTDoXR1bSIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiYXogYWRhdG9rIGzDqXRyZWhvesOhc2kgZMOhdHVtYSAoR0RhdGUgc3RydWt0w7pyYWvDqW50KSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkw6F0dW1pZMWRIgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJheiBhZGF0b2sgbMOpdHJlaG96w6FzaSBkw6F0dW1hIMOpcyBpZGVqZSAoR3N0RGF0ZVRpbWUgc3RydWt0w7pyYWvDqW50KSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJtxbFmYWoiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAiYSBzdMOtbHVzLCBhbWVseWhleiBheiBhZGF0b2sgdGFydG96bmFrIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAibWVnamVneXrDqXMiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiYXogYWRhdG9raG96IHRhcnRvesOzIHN6YWJhZCBzesO2dmVnZXMgbWVnamVneXrDqXMiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICJraXRlcmplc3p0ZXR0IG1lZ2plZ3l6w6lzIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0iYXogYWRhdG9raG96IGbFsXrDtnR0IHN6YWJhZCBzesO2dmVnZXMgbWVnamVneXrDqXMga3VsY3M9w6lydMOpayB2YWd5ICIKLSJrdWxjc1todV09bWVnamVneXrDqXMgZm9ybcOhYmFuIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICJkYWxzb3JzesOhbSIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJkYWxzb3JzesOhbSBlZ3kgZ3nFsWp0ZW3DqW55ZW4gYmVsw7xsIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgImRhbHN6w6FtIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiZGFsb2sgbWVubnlpc8OpZ2UgYXpvbiBnecWxanRlbcOpbnllbiBiZWzDvGwsIGFtZWx5aGV6IGV6IGEgZGFsIHRhcnRvemlrIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgImxlbWV6c3rDoW0iCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJsZW1lenN6w6FtIGVneSBnecWxanRlbcOpbnllbiBiZWzDvGwiCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICJsZW1lemVrIG1lbm55aXPDqWdlIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIiIKLSJsZW1lemVrIG1lbm55aXPDqWdlIGF6b24gZ3nFsWp0ZW3DqW55ZW4gYmVsw7xsLCBhbWVseWhleiBleiBhIGxlbWV6IHRhcnRvemlrIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgImhlbHkiCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotIkEgbcOpZGlhIGVyZWRldGUgVVJJIGPDrW1rw6ludCAoYXogYSBoZWx5LCBhaG9sIGF6IGVyZWRldGkgZsOhamwgdmFneSBtxbFzb3IgIgotIm1lZ3RhbMOhbGhhdMOzKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICJob25sYXAiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICJBIG3DqWRpYSBob25sYXBqYSAoZWzFkWFkw7MgdmFneSBmaWxtIGhvbmxhcGphKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJsZcOtcsOhcyIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiYXogYWRhdG9rYXQgbGXDrXLDsyByw7Z2aWQgc3rDtnZlZyIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgInZlcnppw7MiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAiYXogYWRhdG9rIHZlcnppw7NzesOhbWEiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0iSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSDigJMgbMOhc2Q6IGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgInN6ZXJ2ZXpldCIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiYXogYWRhdG9rIGNvcHlyaWdodCBtZWdqZWd5esOpc2UiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJ2w6lkamVneSB1cmkiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIkF6IGFkYXRvayB2w6lkamVneW1lZ2plZ3l6w6lzw6luZWsgVVJJIGPDrW1lIgotCi1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAia8OzZG9sdGEiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICJhIGvDs2RvbMOzIHN6ZW3DqWx5IHZhZ3kgc3plcnZlemV0IgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAibsOpdmplZ3kiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJrYXBjc29sYXRpbmZvcm3DoWNpw7NrIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAibGljZW5jIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJheiBhZGF0b2sgbGljZW5jZSIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJsaWNlbmMgdXJpIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJBeiBhZGF0b2sgbGljZW5jw6luZWsgVVJJIGPDrW1lIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJlbMWRYWTDsyIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJheiBlbMWRYWTDsyhrKSIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJ6ZW5lc3plcnrFkSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiYSBmZWx2w6l0ZWwgc3plcnrFkWkiCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgInZlesOpbnllbCIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAidmV6w6lueWVsL2VsxZFhZMOzIGZpbm9tw610w6FzYSIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJpZMWRdGFydGFtIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgImhvc3N6IEdTdHJlYW1lciBpZMWRZWd5c8OpZ2VrYmVuIChuYW5vbcOhc29kcGVyYykiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAia29kZWsiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImF6IGFkYXRvayB0w6Fyb2zDoXPDoXJhIGhhc3puw6FsdCBrb2RlayIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJ2aWRlb2tvZGVrIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJhIHZpZGVvYWRhdG9rIHTDoXJvbMOhc8OhcmEgaGFzem7DoWx0IGtvZGVrIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImhhbmdrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiYSBoYW5nYWRhdG9rIHTDoXJvbMOhc8OhcmEgaGFzem7DoWx0IGtvZGVrIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgImZlbGlyYXRrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiYSBmZWxpcmF0YWRhdG9rIHTDoXJvbMOhc8OhcmEgaGFzem7DoWx0IGtvZGVrIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAidMOhcm9sw7Nmb3Jtw6F0dW0iCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiYXogYWRhdG9rIHTDoXJvbMOhc8OhcmEgaGFzem7DoWx0IHTDoXJvbMOzZm9ybcOhdHVtIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAiYml0c2ViZXNzw6lnIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAicG9udG9zIHZhZ3kgw6F0bGFnb3MgYml0c2ViZXNzw6lnIGJpdC9tcC1iZW4iCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIm7DqXZsZWdlcyBiaXRzZWJlc3PDqWciCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJuw6l2bGVnZXMgYml0c2ViZXNzw6lnIGJpdC9tcC1iZW4iCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm1pbmltw6FsaXMgYml0c2ViZXNzw6lnIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibWluaW3DoWxpcyBiaXRzZWJlc3PDqWcgYml0L21wLWJlbiIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWF4aW3DoWxpcyBiaXRzZWJlc3PDqWciCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtYXhpbcOhbGlzIGJpdHNlYmVzc8OpZyBiaXQvbXAtYmVuIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAia8OzZG9sw7MiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJheiBhZGF0Zm9seWFtIGvDs2RvbMOhc8OhcmEgaGFzem7DoWx0IGvDs2RvbMOzIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJrw7Nkb2zDsyB2ZXJ6acOzc3rDoW1hIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiYXogYWRhdGZvbHlhbSBrw7Nkb2zDoXPDoXJhIGhhc3puw6FsdCBrw7Nkb2zDsyB2ZXJ6acOzc3rDoW1hIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJzb3JvcyIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgImEgZGFsIHNvcnN6w6FtYSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAidmlzc3phasOhdHN6w6FzaSBoYW5nZXLFkTogZGFsIGhhbmdvc8OtdMOhc2EiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJkYWwgaGFuZ29zw610w6FzYSBkQi1iZW4iCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgInZpc3N6YWrDoXRzesOhc2kgaGFuZ2VyxZE6IGRhbCBoYW5nZXJlasOpbmVrIGNzw7pjc8OpcnTDqWtlIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgImEgZGFsIGhhbmdlcmVqw6luZWsgY3PDumNzw6lydMOpa2UiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgInZpc3N6YWrDoXRzesOhc2kgaGFuZ2VyxZE6IGFsYnVtIGhhbmdvc8OtdMOhc2EiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJhbGJ1bSBoYW5nb3PDrXTDoXNhIGRCLWJlbiIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAidmlzc3phasOhdHN6w6FzaSBoYW5nZXLFkTogYWxidW0gaGFuZ2VyZWrDqW5layBjc8O6Y3PDqXJ0w6lrZSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJheiBhbGJ1bSBoYW5nZXJlasOpbmVrIGNzw7pjc8OpcnTDqWtlIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgInZpc3N6YWrDoXRzesOhc2kgaGFuZ2VyxZEgcmVmZXJlbmNpYXN6aW50amUiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICJzesOhbSDDqXMgYWxidW0gaGFuZ29zw610w6Fzw6FuYWsgcmVmZXJlbmNpYXN6aW50amUiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJueWVsdmkga8OzZCIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgIiIKLSJheiBhZGF0Zm9seWFtIElTTy02MzktMSB2YWd5IElTTy02MzktMiBzemFidsOhbnluYWsgbWVnZmVsZWzFkSBueWVsdmkga8OzZGphIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAibnllbHZpIGvDs2QiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiYXogYWRhdGZvbHlhbSBueWVsdsOpbmVrIHN6YWJhZCBmb3Jtw6F0dW3DuiBuZXZlIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgImvDqXAiCi0KLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJheiBhZGF0Zm9seWFtaG96IGthcGNzb2zDs2TDsyBrw6lwIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJlbMWRbsOpemV0aSBrw6lwIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJheiBhZGF0Zm9seWFtaG96IGthcGNzb2zDs2TDsyBlbMWRbsOpemV0aSBrw6lwIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAibWVsbMOpa2xldCIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImF6IGFkYXRmb2x5YW1ob3ogbWVsbMOpa2VsdCBmw6FqbCIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgInBlcmNlbmvDqW50aSDDvHTDqXNlayBzesOhbWEiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAicGVyY2Vua8OpbnRpIMO8dMOpc2VrIHN6w6FtYSBhIGhhbmdiYW4iCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAia3VsY3NzemF2YWsiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAiYSB0YXJ0YWxtYXQgbGXDrXLDsywgdmVzc3rFkXZlbCBlbHbDoWxhc3p0b3R0IGt1bGNzc3phdmFrIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgImbDtmxkcmFqemkgaGVseSBuZXZlIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLSJlbWJlcmVrIMOhbHRhbCBvbHZhc2hhdMOzIGxlw61yw7MgamVsbGVnxbEgaGVseSwgYWhvbCBhIG3DqWRpYSBmZWx2w6l0ZWxyZSB2YWd5ICIKLSJlbMWRw6FsbMOtdMOhc3JhIGtlcsO8bHQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgImbDtmxkcmFqemkgaGVseSBzesOpbGVzc8OpZ2UiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSJhem9uIGhlbHkgZsO2bGRyYWp6aSBzesOpbGVzc8OpZ2UsIGFob2wgYSBtw6lkaWEgZmVsdsOpdGVscmUgdmFneSBlbMWRw6FsbMOtdMOhc3JhICIKLSJrZXLDvGx0IGZva29rYmFuLCBhIFdHUzg0LW5layBtZWdmZWxlbMWRZW4gKG51bGxhIGF6IGVneWVubMOtdMWRbsOpbCwgbmVnYXTDrXYgIgotIsOpcnTDqWtlayBkw6lsaSBzesOpbGVzc8OpZ2VrZW4pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiZsO2bGRyYWp6aSBoZWx5IGhvc3N6w7pzw6FnYSIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSJhem9uIGhlbHkgZsO2bGRyYWp6aSBob3NzesO6c8OhZ2EsIGFob2wgYSBtw6lkaWEgZmVsdsOpdGVscmUgdmFneSBlbMWRw6FsbMOtdMOhc3JhICIKLSJrZXLDvGx0IGZva29rYmFuLCBhIFdHUzg0LW5layBtZWdmZWxlbMWRZW4gKG51bGxhIGEga2V6ZMWRIGTDqWxrw7ZybsOpbCAiCi0iR3JlZW53aWNoYmVuLCBuZWdhdMOtdiDDqXJ0w6lrZWsgbnl1Z2F0aSBob3NzesO6c8OhZ29rb24pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiZsO2bGRyYWp6aSBoZWx5IG1hZ2Fzc8OhZ2EiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0iYXpvbiBoZWx5IGbDtmxkcmFqemkgbWFnYXNzw6FnYSwgYWhvbCBhIG3DqWRpYSBmZWx2w6l0ZWxyZSB2YWd5IGVsxZHDoWxsw610w6FzcmEgIgotImtlcsO8bHQgbcOpdGVyYmVuLCBhIFdHUzg0LW5layBtZWdmZWxlbMWRZW4gKG51bGxhIGF6IMOhdGxhZ29zIHRlbmdlcnN6aW50ZW4pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgImbDtmxkcmFqemkgaGVseSBvcnN6w6FnYSIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJvcnN6w6FnIChhbmdvbCBuw6l2KSwgYWhvbCBhIG3DqWRpYSBmZWx2w6l0ZWxyZSB2YWd5IGVsxZHDoWxsw610w6FzcmEga2Vyw7xsdCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICJmw7ZsZHJhanppIGhlbHkgdsOhcm9zYSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJ2w6Fyb3MgKGFuZ29sIG7DqXYpLCBhaG9sIGEgbcOpZGlhIGZlbHbDqXRlbHJlIHZhZ3kgZWzFkcOhbGzDrXTDoXNyYSBrZXLDvGx0IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJmw7ZsZHJhanppIGhlbHkgcsOpc3poZWx5ZSIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0iYSB2w6Fyb3NvbiBiZWzDvGxpIGhlbHksIGFob2wgYSBtw6lkaWEgZWzFkcOhbGzDrXTDoXNyYSB2YWd5IGzDqXRyZWhvesOhc3JhIGtlcsO8bHQgIgotIihww6lsZMOhdWwga8O2cm55w6lrKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJmw7ZsZHJhanppIGhlbHkgdsOtenN6aW50ZXMgaGliw6FqYSIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICJhIHbDrXpzemludGVzIHBvemljaW9uw6Fsw6FzaSDDqXJ0w6lrZWsgdsOhcnQgaGliw6FqYSAobcOpdGVyYmVuKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAiZsO2bGRyYWp6aSBoZWx5IG1vemfDoXNpIHNlYmVzc8OpZ2UiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgImEgZmVsdmV2xZFlc3prw7Z6IG1vemfDoXNpIHNlYmVzc8OpZ2UgYSBmZWx2w6l0ZWwga8Opc3rDrXTDqXNla29yLCBtL3MtYmFuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiZsO2bGRyYWp6aSBoZWx5IG1vemfDoXNpIGlyw6FueWEiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJhIG3DqWRpYSBmZWx2w6l0ZWzDqXQgdsOpZ3rFkSBlc3prw7Z6IG1vemfDoXNpIGlyw6FuecOhdCBqZWx6aS4gbGViZWfFkXBvbnRvc2FuICIKLSLDoWJyw6F6b2x0IGZva29rIGvDqXB2aXNlbGlrLCBhIDAgYSBmw7ZsZHJhanppIMOpc3pha290IGplbHppIMOpcyBheiDDs3JhIGrDoXLDoXPDoW5hayAiCi0iaXLDoW55w6FiYSBuxZEuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJmw7ZsZHJhanppIGhlbHkgZmVsdsOpdGVsaSBpcsOhbnlhIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iYSBtw6lkaWEgZmVsdsOpdGVsw6l0IHbDqWd6xZEgZXN6a8O2eiBpcsOhbnnDoXQgamVsemkuIGxlYmVnxZFwb250b3NhbiDDoWJyw6F6b2x0IGZva29rICIKLSJrw6lwdmlzZWxpaywgYSAwIGEgZsO2bGRyYWp6aSDDqXN6YWtvdCBqZWx6aSDDqXMgYXogw7NyYSBqw6Fyw6Fzw6FuYWsgaXLDoW55w6FiYSBuxZEuIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIm3FsXNvcm7DqXYiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICJBIHR2L3BvZGNhc3Qvc29yb3phdCBtxbFzb3IgbmV2ZSwgYW1lbHlixZFsIGEgbcOpZGlhIHN6w6FybWF6aWsiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgIm3FsXNvciByZW5kZXrDqXNpIG5ldmUiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJBIHR2L3BvZGNhc3Qvc29yb3phdCBtxbFzb3IgbmV2ZSwgYW1lbHlixZFsIGEgbcOpZGlhIHN6w6FybWF6aWssIHJlbmRlesOpc2kgY8OpbHJhIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgImVwaXrDs2RzesOhbSIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJBem9uIMOpdmFkb24gYmVsw7xsaSBlcGl6w7NkIHN6w6FtYSwgYW1lbHluZWsgZXogYSBtw6lkaWEgcsOpc3plIgotCi1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAiw6l2YWRzesOhbSIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJBem9uIG3FsXNvciDDqXZhZHN6w6FtYSwgYW1lbHluZWsgZXogYSBtw6lkaWEgcsOpc3plIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJkYWxzesO2dmVnIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICJBIG3DqWRpYSBkYWxzesO2dmVnZSIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJzemVyesWRIHJlbmRlesOpc2kgbmV2ZSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImEgZmVsdsOpdGVsdCBzemVyesWRIHN6ZW3DqWx5ZWssIHJlbmRlesOpc2kgY8OpbGxhbCIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICJjc29wb3J0b3PDrXTDoXMiCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLSJUw7ZiYiBzesOhbW90IMOhdGZvZ8OzIG3DqWRpYSBjc29wb3J0b3PDrXTDoXNhLCBww6lsZMOhdWwgZWd5IGtvbmNlcnQga8O8bMO2bmLDtnrFkSAiCi0iZGFyYWJqYWkuIE1hZ2FzYWJiIHN6aW50xbEgYSBzesOhbW7DoWwsIGRlIGFsYWNzb255YWJiIGF6IGFsYnVtbsOhbCIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJmZWxoYXN6bsOhbMOzaSDDqXJ0w6lrZWzDqXMiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIkZlbGhhc3puw6Fsw7Mgw6FsdGFsIHTDoXJzw610b3R0IMOpcnTDqWtlbMOpcy4gTWluw6lsIG1hZ2FzYWJiLCBhbm7DoWwgam9iYmFuIGtlZHZlbGkgIgotImEgZmVsaGFzem7DoWzDsyBhIG3DqWRpw6F0IgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiZXN6a8O2eiBnecOhcnTDs2phIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiQSBtw6lkaWEgZWzFkcOhbGzDrXTDoXPDoWhveiBoYXN6bsOhbHQgZXN6a8O2eiBnecOhcnTDs2phIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJlc3prw7Z6bW9kZWxsIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJBIG3DqWRpYSBsw6l0cmVob3rDoXPDoXJhIGhhc3puw6FsdCBlc3prw7Z6bW9kZWxsIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAiYWxrYWxtYXrDoXMgbmV2ZSIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiQSBtw6lkaWEgbMOpdHJlaG96w6Fzw6FyYSBoYXN6bsOhbHQgYWxrYWxtYXrDoXMiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJhbGthbG1hesOhc2FkYXRvayIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIlRldHN6xZFsZWdlcywgYSBtw6lkacOhYmEgbWVudGVuZMWRIGFsa2FsbWF6w6FzYWRhdG9rIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgImvDqXAgdMOham9sw6FzYSIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiQSBrw6lwIGhvZ3lhbiBmb3JnYXRhbmTDsyB2YWd5IHTDvGtyw7Z6ZW5kxZEgbWVnamVsZW7DrXTDqXMgZWzFkXR0IgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICJraWFkw7MiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIkEgY8OtbWtlIHZhZ3kga2lhZMOzIG5ldmUiCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAiZmVsZG9sZ296dGEiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiSW5mb3Jtw6FjacOzIGEgcmVtaXggbcO2Z8O2dHQgbMOpdsWRIHN6ZW3DqWx5ZWtyxZFsIMOpcyBoYXNvbmzDsyBmZWxkb2xnb3rDoXNvayIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICJtaWRpLWFsYXDDui1oYW5namVneSIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiQSBoYW5nc8OhdiBtaWRpIGhhbmdqZWd5IHN6w6FtYS4iCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgInByaXbDoXQtYWRhdG9rIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICJQcml2w6F0IGFkYXRvayIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICJOZW0gdGFsw6FsaGF0w7MgVVJJLWtlemVsxZEgYSh6KSAlcyBwcm90b2tvbGxob3oiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIkEoeikg4oCeJXPigJ0gVVJJLXPDqW1hIG5lbSB0w6Ftb2dhdG90dCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJISUJBOiBhIGvDtnZldGtlesWRIGVsZW10xZFsOiAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJUb3bDoWJiaSBoaWJha2VyZXPDqXNpIGluZm9ybcOhY2nDs2s6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJhIGhpdmF0a296w6FzbmFrIG5pbmNzIGZvcnLDoXNhIFtueWVsxZE9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgImEgaGl2YXRrb3rDoXNuYWsgbmluY3MgbnllbMWRamUgW2ZvcnLDoXM9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAibmluY3Mg4oCeJXPigJ0gdHVsYWpkb25zw6FnIGEoeikg4oCeJXPigJ0gZWxlbWJlbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIm5lbSDDoWxsw610aGF0w7MgYmUgYSh6KSDigJ4lMiRz4oCdIGVsZW0g4oCeJTEkc+KAnSB0dWxhamRvbnPDoWdhIOKAniUzJHPigJ0gw6lydMOpa3JlIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIkEga8Opc2xlbHRldGV0dCBsaW5rZWzDqXMgbWVnaGnDunN1bHQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICIlcyBuZW0gbGlua2VsaGV0xZEgYSBrw7Z2ZXRrZXrFkXJlOiAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAibmluY3Mg4oCeJXPigJ0gZWxlbSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAibmVtIHbDoXJ0IOKAniVz4oCdIGhpdmF0a296w6FzIC0gbWVsbMWResOpcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIm5lbSB2w6FydCDigJ4lc+KAnSBraXTDtmx0w6lzaSBoaXZhdGtvesOhcyAtIG1lbGzFkXrDqXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICJhKHopIOKAniVz4oCdIGvDqXBlc3PDqWcgbmVtIGVsZW1lemhldMWRIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibmluY3MgbnllbMWRZWxlbSBhIGvDtnZldGtlesWRIFVSSSBjw61taGV6OiDigJ4lc+KAnSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibmluY3MgZm9ycsOhc2VsZW0gYSBrw7Z2ZXRrZXrFkSBVUkkgY8OtbWhlejog4oCeJXPigJ0iCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgInN6aW50YWt0aWthaSBoaWJhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiYSBtZWdhZG90dCDDvHJlcyDigJ4lc+KAnSB0w6Fyb2zDsyBuZW0gZW5nZWTDqWx5ZXpldHQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJuaW5jcyDigJ4lc+KAnSB0w6Fyb2zDsywgZWxlbWVrIGtpY3NvbWFnb2zDoXNhIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgIsO8cmVzIGFkYXRjc2F0b3JuYSBuZW0gZW5nZWTDqWx5ZXpldHQiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAiUmVuZ2V0ZWsgcHVmZmVyIGtlcsO8bCBlbGRvYsOhc3JhLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiQmVsc8WRIGFkYXRmb2x5YW0tcHJvYmzDqW1hLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIkJlbHPFkSBhZGF0Zm9seWFtLWhpYmEuIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICJCZWxzxZEgw7NyYWhpYmEuIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICJOZW0gc2lrZXLDvGx0IGEgcHVmZmVyIGxla8OpcGV6w6lzZS4iCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiS8OpcGVzc8OpZ2VrIHN6xbFyw6lzZSIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iQXogZW5nZWTDqWx5ZXpoZXTFkSBrw6lwZXNzw6lnZWsga29ybMOhdG96w6FzYSAoYSBOVUxMLCBBTlktdCBqZWxlbnQpLiBFemVuICIKLSJ0dWxhamRvbnPDoWcgYmXDoWxsw610w6FzYSBhIGJpenRvc8OtdG90dCBHc3RDYXBzIG9iamVrdHVtcmEgaGl2YXRrb3ppay4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICJLw6lwZXNzw6lnZWsgdsOhbHRvenRhdMOhc2EgbcOzZCIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIkvDqXBlc3PDqWdlayB2w6FsdG96dGF0w6FzYSB2aXNlbGtlZMOpcyBzesWxcsOpc2UiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICJOaW5jcyBtZWdhZHZhIGlkZWlnbGVuZXMga8O2bnl2dMOhci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiTmVtIGhvemhhdMOzIGzDqXRyZSBhIGvDtnZldGtlesWRIGlkZWlnbGVuZXMgZsOhamw6IOKAniVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk5lbSBueWl0aGF0w7MgbWVnIGEoeikg4oCeJXPigJ0gZsOhamwgb2x2YXPDoXNyYS4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICJIaWJhIGEgbGV0w7ZsdMOpc2kgZsOhamwgw61yw6FzYSBrw7Z6YmVuLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJOaW5jcyBmw6FqbG7DqXYgbWVnYWR2YSBheiDDrXLDoXNob3ouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTmVtIGxlaGV0IMOtcsOhc3JhIG1lZ255aXRuaSBhKHopIOKAniVz4oCdIGbDoWpsdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkhpYmEgYSh6KSDigJ4lc+KAnSBmw6FqbCBiZXrDoXLDoXNhIGvDtnpiZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJIaWJhIGEga8O2dmV0a2V6xZEgZsOhamxiYW4gdmFsw7MgdGVrZXLDqXMga8O2emJlbjog4oCeJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJIaWJhIGEoeikg4oCeJXPigJ0gZsOhamwgw61yw6FzYSBrw7Z6YmVuLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOaW5jcyBtZWdhZHZhIGbDoWpsbsOpdiBheiBvbHZhc8Ohc2hvei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIk5lbSBrw6lyaGV0xZFrIGxlIGluZm9ybcOhY2nDs2sgYSBrw7Z2ZXRrZXrFkWtyxZFsOiDigJ4lc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAi4oCeJXPigJ0gZWd5IGvDtm55dnTDoXIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiQSh6KSDigJ4lc+KAnSBmw6FqbCBlZ3kgZm9nbGFsYXQuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiSXNtw6l0bMOpc2VrIHV0w6FuIGvDqXLDqXPDqXJlIG1lZ2hpw7pzdWx0LiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgImvDqXBlc3PDqWdlayIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgImF6IGFkYXRmb2x5YW1iYW4gw6lzemxlbHQga8OpcGVzc8OpZ2VrIgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAibWluaW11bSIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgIm5hZ3liZXTFsWsga8OpbnlzemVyw610w6lzZSIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICJuYWd5YmV0xbFrIGvDqW55c3plcsOtdMOpc2UgYmV0xbFrZXJlc8OpcyBuw6lsa8O8bCIKLQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJBeiBhZGF0Zm9seWFtIG5lbSB0YXJ0YWxtYXogZWzDqWcgYWRhdG90LiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiQXogYWRhdGZvbHlhbSBuZW0gdGFydGFsbWF6IGFkYXRva2F0LiIKLQotbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCi1tc2dzdHIgIk1lZ3ZhbMOzc8OtdG90dCBmZWzDvGxldGVrOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgIm9sdmFzaGF0w7MiCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAiw61yaGF0w7MiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICJlbGF2dWx0IgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJ2ZXrDqXJlbGhldMWRIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgIm3Ds2Rvc8OtdGhhdMOzIGEgTlVMTCwgS8OJU1osIFNaw5xORVRFTCB2YWd5IExFSsOBVFNaw4FTIMOhbGxhcG90YmFuIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAiY3NhayBhIE5VTEwsIEvDiVNaIHZhZ3kgU1rDnE5FVEVMIMOhbGxhcG90YmFuIG3Ds2Rvc8OtdGhhdMOzIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgImNzYWsgYSBOVUxMIHZhZ3kgS8OJU1ogw6FsbGFwb3RiYW4gbcOzZG9zw610aGF0w7MiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIkZla2V0ZWxpc3TDoXMgZsOhamxvazoiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJUZWxqZXMgc3rDoW06ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgZmVrZXRlbGlzdMOhcyBmw6FqbCIKLW1zZ3N0clsxXSAiJWQgZmVrZXRlbGlzdMOhcyBmw6FqbCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIGLFkXbDrXRtw6lueSIKLW1zZ3N0clsxXSAiJWQgYsWRdsOtdG3DqW55IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkIGZla2V0ZWxpc3RhLWJlamVneXrDqXMiCi1tc2dzdHJbMV0gIiVkIGZla2V0ZWxpc3RhLWJlamVneXrDqXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIHN6b2xnw6FsdGF0w6FzIgotbXNnc3RyWzFdICIlZCBzem9sZ8OhbHRhdMOhcyIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiQXogw7Zzc3plcyBlbGVtIGtpw61yw6FzYSIKLQotbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHIgIkZla2V0ZWxpc3TDoXMgZsOhamxvayBsaXN0w6Fqw6FuYWsga2nDrXLDoXNhIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJBIG1lZ2Fkb3R0IGLFkXbDrXRtw6lueSDDoWx0YWwgYml6dG9zw610b3R0IHN6b2xnw6FsdGF0w6Fzb2sgZ8OpcGlsZWcgZmVsZG9sZ296aGF0w7MgIgotImxpc3TDoWrDoW5hayBracOtcsOhc2EuXG4iCi0iS8O8bHPFkSBixZF2w610bcOpbnl0ZWxlcMOtdMOpc2kgbcOzZHN6ZXJla2tlbCBlZ3nDvHR0IGhhc3pub3MuIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICJBIGLFkXbDrXRtw6lueSB0YXJ0YWxtw6FuYWsgZmVsc29yb2zDoXNhIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIkVsbGVuxZFyaXp6ZSwgaG9neSBhIG1lZ2Fkb3R0IGVsZW0gdmFneSBixZF2w610bcOpbnkgbMOpdGV6aWstZSIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLSJFbGVtIHZhZ3kgYsWRdsOtdG3DqW55IGzDqXRlesOpc8OpbmVrIGVsbGVuxZFyesOpc2Vrb3IgYXp0IGlzIGVsbGVuxZFyaXp6ZSwgaG9neSBhICIKLSJ2ZXJ6acOzamEgbGVnYWzDoWJiIGEgbWVnYWRvdHQtZSIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiVMOhbW9nYXRvdHQgVVJJIHPDqW3DoWsga2nDrXLDoXNhLCBheiBhem9rYXQgbWVndmFsw7Nzw610w7MgZWxlbW1lbCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiTmVtIHTDtmx0aGV0xZEgYmUgYSBixZF2w610bcOpbnlmw6FqbDogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiTmluY3MgaWx5ZW4gZWxlbSB2YWd5IGLFkXbDrXRtw6lueTog4oCeJXPigJ1cbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIkluZGV4c3RhdGlzenRpa2EiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICIldSBzesOhbcO6IMO8emVuZXQgw6lya2V6ZXR0IGEga8O2dmV0a2V6xZEgZWxlbXTFkWw6IOKAniVz4oCdICglcykuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICIldSBzesOhbcO6IMO8emVuZXQgw6lya2V6ZXR0IGEoeikg4oCeJXM6JXPigJ0gKCVzKSBraXTDtmx0xZF0xZFsOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIiV1IHN6w6Ftw7ogw7x6ZW5ldCDDqXJrZXpldHQgYSh6KSDigJ4lc+KAnSAoJXMpIG9iamVrdHVtdMOzbDogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIiV1IHN6w6Ftw7ogw7x6ZW5ldCAoJXMpIMOpcmtlemV0dDoiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJFT1Mgw6lya2V6ZXR0IGEga8O2dmV0a2V6xZEgZWxlbXTFkWw6IOKAniVz4oCdLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkPDjU1LRSBNRUdUQUzDgUxWQTogYSh6KSDigJ4lc+KAnSBlbGVtIMOhbHRhbC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIkPDjU1LRSBNRUdUQUzDgUxWQTogYSh6KSDigJ4lczolc+KAnSBraXTDtmx0xZEgw6FsdGFsLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiQ8ONTUtFIE1FR1RBTMOBTFZBOiBhKHopIOKAniVz4oCdIG9iamVrdHVtIMOhbHRhbC5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJDw41NS0UgTUVHVEFMw4FMVkFcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJUQVJUQUxPTUpFR1law4lLIE1FR1RBTMOBTFZBOiBhKHopIOKAniVz4oCdIGVsZW0gw6FsdGFsLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiVEFSVEFMT01KRUdZWsOJSyBNRUdUQUzDgUxWQTogYSh6KSDigJ4lc+KAnSBvYmpla3R1bSDDoWx0YWwuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiVEFSVEFMT01KRUdZWsOJSyBNRUdUQUzDgUxWQVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPUk3DgUNJw5M6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkZJR1lFTE1FWlRFVMOJUzogYSBrw7Z2ZXRrZXrFkSBlbGVtdMWRbDogJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiRWzFkXpldGVzZW4gYmV0w7ZsdHZlLCB2w6FyYWtvesOhcyBhIHB1ZmZlcmVsw6lzIGJlZmVqZXrFkWTDqXPDqXJl4oCmXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJFbMWRemV0ZXNlbiBiZXTDtmx0dmUsIHbDoXJha296w6FzIGEgZm9seWFtYXQgYmVmZWplesWRZMOpc8OpcmXigKZcbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAicHVmZmVyZWzDqXPigKYiCi0KLW1zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJBIHB1ZmZlcmVsw6lzIGvDqXN6LCBhZGF0Y3NhdG9ybmEgYmXDoWxsw610w6FzYSBMRUrDgVRTWsOBU1JB4oCmXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJQdWZmZXJlbMOpcywgYXogYWRhdGNzYXRvcm5hIGJlw6FsbMOtdMOhc2EgU1rDnE5FVEVMVEVURVRUIMOhbGxhcG90w7pyYeKAplxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiS8Opc2xlbHRldMOpcyDDumpyYWVsb3N6dMOhc2HigKZcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICLDgWxsYXBvdCBiZcOhbGzDrXTDoXNhIGVycmU6ICVzLCAlcyBrw6lyw6lzw6luZWsgbWVnZmVsZWzFkWVu4oCmXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJNZWdzemFrw610w6FzOiBBZGF0Y3NhdG9ybmEgbGXDoWxsw610w6FzYeKAplxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIkZvbHlhbWF0OiAoJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICJIacOhbnl6w7MgZWxlbTog4oCeJXPigJ1cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiS8O2cm55ZXpldCBsZWvDqXLDqXNlIGEoeikg4oCeJXPigJ0gZWxlbXTFkWw6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIktpbWVuZXRpIGPDrW1rw6lrIChtZXRhYWRhdG9rKSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIlRBUlRBTE9NSkVHWVrDiUsgKGZlamV6ZXRlayDDqXMgdsOhbHRvemF0b2spIGtpw61yw6FzYSIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIktpbWVuZXRpIMOhbGxhcG90aW5mb3Jtw6FjacOzayDDqXMgdHVsYWpkb25zw6FnLcOpcnRlc8OtdMOpc2VrIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiTmUgw61yam9uIGtpIGVsxZFyZWhhbGFkw6FzLWluZm9ybcOhY2nDs2thdCIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiS2ltZW5ldGkgw7x6ZW5ldGVrIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLSJOZSDDrXJqYSBraSBheiDDoWxsYXBvdGluZm9ybcOhY2nDs2thdCBhIG1lZ2Fkb3R0IHR1bGFqZG9uc8OhZ27DoWwsIGhhIGEgcsOpc3psZXRlcyAiCi0ia2ltZW5ldCBlbmdlZMOpbHllenZlIHZhbiAodMO2YmJzesO2ciBpcyBoYXN6bsOhbGhhdMOzKSIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIlRVTEFKRE9OU8OBR07DiVYiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgIk5lIHRlbGVww610c2VuIGhpYmFrZXplbMWRdCIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiRU9TIGvDqW55c3plcsOtdMOpc2UgYSBmb3Jyw6Fzb2tyYSBheiBhZGF0Y3NhdG9ybmEgbGXDoWxsw610w6FzYSBlbMWRdHQiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIkluZGV4c3RhdGlzenRpa8OhayBnecWxanTDqXNlIMOpcyBracOtcsOhc2EiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIkhJQkE6IGF6IGFkYXRjc2F0b3JuYSBuZW0gw6lww610aGV0xZEgZmVsOiAlcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkhJQkE6IGF6IGFkYXRjc2F0b3JuYSBuZW0gw6lww610aGV0xZEgZmVsLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLW1zZ3N0ciAiRklHWUVMTUVaVEVUw4lTOiBoaWLDoXMgYWRhdGNzYXRvcm5hOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJISUJBOiBheiDigJ5hZGF0Y3NhdG9ybmHigJ0gZWxlbSBuZW0gdGFsw6FsaGF0w7MuXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiQWRhdGNzYXRvcm5hIGJlw6FsbMOtdMOhc2EgU1rDnE5FVEVMVEVURVRUIMOhbGxhcG90w7pyYeKAplxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiSElCQTogYXogYWRhdGNzYXRvcm5hIG5lbSBha2FyIG1lZ8OhbGxuaS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiQXogYWRhdGNzYXRvcm5hIMOpbCDDqXMgbmVtIHN6w7xrc8OpZ2VzIEVMSU5Ew41UQU5J4oCmXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICJBeiBhZGF0Y3NhdG9ybmEgSU5Ew41Uw4FTQeKAplxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJISUJBOiBheiBhZGF0Y3NhdG9ybmEgbmVtIGFrYXIgZWxpbmR1bG5pLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJBeiBhZGF0Y3NhdG9ybmEgRUxJTkTDjVRWQeKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJBZGF0Y3NhdG9ybmEgYmXDoWxsw610w6FzYSBMRUrDgVRTWsOBU1JB4oCmXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkhJQkE6IGF6IGFkYXRjc2F0b3JuYSBuZW0gYWthciBsZWrDoXRzemFuaS5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICJMZcOhbGzDrXTDoXNrb3IgRU9TIGVuZ2Vkw6lseWV6dmUg4oCTIEVPUyBrw6lueXN6ZXLDrXTDqXNlIGF6IGFkYXRjc2F0b3Juw6FyYVxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIkxlw6FsbMOtdMOhc2tvciBFT1MgZW5nZWTDqWx5ZXp2ZSDigJMgdsOhcmFrb3rDoXMgRU9TLXJhIGhpYmEgdXTDoW5cbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICJWw6FyYWtvesOhcyBFT1MtcmHigKZcbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyDDqXJrZXpldHQg4oCTIGFkYXRjc2F0b3JuYSBsZcOhbGzDrXTDoXNh4oCmXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiTWVnc3pha8OtdMOhcyBheiBFT1MtcmEgdsOhcmFrb3rDoXMga8O2emJlbiDigJMgYWRhdGNzYXRvcm5hIGxlw6FsbMOtdMOhc2HigKZcbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJIaWJhIHTDtnJ0w6ludCBheiBFT1MtcmEgdsOhcmFrb3rDoXNrb3JcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICJBIHbDqWdyZWhhanTDoXMgYmVmZWplesWRZMO2dHQgJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIkF6IGFkYXRjc2F0b3JuYSBiZcOhbGzDrXTDoXNhIEvDiVNaIMOhbGxhcG90cmHigKZcbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiQXogYWRhdGNzYXRvcm5hIGJlw6FsbMOtdMOhc2EgTlVMTCDDqXJ0w6lrcmXigKZcbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkFkYXRjc2F0b3JuYSBmZWxzemFiYWTDrXTDoXNh4oCmXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgInTDoXJvbMOzIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJCZWxzxZEgYWRhdGZvbHlhbS1oaWJhLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIk5lIMOtcmpvbiBraSBhIFTDjVBVUyB0w61wdXMgw6FsbGFwb3RpbmZvcm3DoWNpw7NpdCIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVMONUFVTMSxUw41QVVMyLOKApiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGluayBmb3Jyw6FzZWxlbSBuw6lsa8O8bCIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgImxpbmsgbnllbMWRZWxlbSBuw6lsa8O8bCIKLQotI34gbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgotI34gbXNnc3RyICJuaW5jcyBlbGVtLCBhbWVseWhleiBhKHopIOKAniVz4oCdIFVSSSBsaW5rZWxoZXTFkSBsZW5uZSIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAibmVtIGxpbmtlbGhldMWRIG55ZWzFkWVsZW0gYSBrw7Z2ZXRrZXrFkSBVUkkgY8OtbWhlejog4oCeJXPigJ0iCi0KLSN+IG1zZ2lkICJtYXhpbXVtIgotI34gbXNnc3RyICJtYXhpbXVtIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAiSGFzem7DoWxhdDogZ3N0LXhtbGxhdW5jaCA8ZsOhamwueG1sPiBbIGVsZW0udHVsYWpkb25zw6FnPcOpcnTDqWsg4oCmIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiSElCQTogYSh6KSDigJ4lc+KAnSB4bWwgZsOhamwgZmVsZG9sZ296w6FzYSBtZWdoacO6c3VsdC5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkhJQkE6IG5pbmNzIGZlbHPFkSBzemludMWxIGFkYXRjc2F0b3JuYSBlbGVtIGEga8O2dmV0a2V6xZEgZsOhamxiYW46IOKAniVz4oCdLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICJGSUdZRUxNRVpURVTDiVM6IGVneXN6ZXJyZSBjc2FrIGVneSBmZWxzxZEgc3ppbnTFsSBlbGVtIHTDoW1vZ2F0b3R0LlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgJWQ6ICVzLlxuIgotI34gbXNnc3RyICJISUJBOiBuZW0gZWxlbWV6aGV0xZEgYSh6KSAlZC4gcGFyYW5jc3NvcmkgYXJndW1lbnR1bTogJXMuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICJGSUdZRUxNRVpURVTDiVM6IGEoeikg4oCeJXPigJ0gbmV2xbEgZWxlbSBuZW0gdGFsw6FsaGF0w7MuXG4iCi0KLSN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgotI34gbXNnc3RyICJBeiBhZGF0Y3NhdG9ybmEgeG1sIMOhYnLDoXpvbMOhc8OhbmFrIG1lbnTDqXNlIGEgRsOBSkxCQSDDqXMga2lsw6lww6lzIgotCi0jfiBtc2dpZCAiRklMRSIKLSN+IG1zZ3N0ciAiRsOBSkwiCi0KLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIk5lIHRlbGVww610c2VuIHN6aWduw6Fsa2V6ZWzFkWtldCBhIFNJR1VTUjEgw6lzIFNJR1VTUjIgc3ppZ27DoWxva2hveiIKLQotI34gbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCi0jfiBtc2dzdHIgIkZvZ2xhbMOhc2kgbnlvbWvDtnZldMOpcyBracOtcsOhc2EgKGhhIGZvcmTDrXTDoXNrb3IgZW5nZWTDqWx5ZXp0w6lrKSIKZGlmZiAtLWdpdCBhL3BvL2lkLmdtbyBiL3BvL2lkLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFjM2QyMC4uMDAwMDAwMAotLS0gYS9wby9pZC5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9pZC5wbyBiL3BvL2lkLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDU4MDhmLi4wMDAwMDAwCi0tLSBhL3BvL2lkLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNSArMCwwIEBACi0jIEluZG9uZXNpYW4gdHJhbnNsYXRpb25zIGZvciBnc3RyZWFtZXIgcGFja2FnZS4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgQW5kaWthIFRyaXdpZGFkYSA8YW5kaWthQGdtYWlsLmNvbT4sIDIwMTMuCi0jIEFuZGhpa2EgUGFkbWF3YW4gPGFuZGhpa2EucGFkbWF3YW5AZ21haWwuY29tPiwgMjAxMC0yMDE2LgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDEuMTAuMFxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTExLTE0IDIwOjU5KzA3MDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEFuZGhpa2EgUGFkbWF3YW4gPGFuZGhpa2EucGFkbWF3YW5AZ21haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IEluZG9uZXNpYW4gPHRyYW5zbGF0aW9uLXRlYW0taWRAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiBpZFxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtQnVnczogUmVwb3J0IHRyYW5zbGF0aW9uIGVycm9ycyB0byB0aGUgTGFuZ3VhZ2UtVGVhbSBhZGRyZXNzLlxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIkNldGFrIHZlcnNpIEdTdHJlYW1lciIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJCdWF0IHNlbXVhIHBlcmluZ2F0YW4gZmF0YWwiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiQ2V0YWsga2F0ZWdvcmkgYXdha3V0dSB5YW5nIHRlcnNlZGlhIGxhbHUga2VsdWFyIgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iTGV2ZWwgYXdha3V0dSBzdGFuZGFyIGRhcmkgMSAoaGFueWEgZ2FsYXQpIGtlIDkgKGFwYXB1bikgYXRhdSAwIHVudHVrIHRhayAiCi0iYWRhIGtlbHVhcmFuIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIkxFVkVMIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIlNlbmFyYWkgZGlwaXNhaGthbiBrb21hIGRhcmkgY2F0ZWdvcnlfbmFtZTpsZXZlbCBkaXBhc2FuZ2thbiB1bnR1ayBtZW5nYXR1ciAiCi0ibGV2ZWwgc3Blc2lmaWsgdW50dWsga2F0ZWdvcmkgaW5kaXZpZHVhbC4gTWlzYWxueWE6IEdTVF9BVVRPUExVRzo1LCIKLSJHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJTRU5BUkFJIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIk5vbmFrdGlma2FuIGtlbHVhcmFuIGF3YWt1dHUgYmVyd2FybmEiCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotIk1lbmd1YmFoIG1vZGUgcGV3YXJuYWFuIGRhcmkgbG9nIGF3YWt1dHUuIE1vZGUgeWFuZyBtdW5na2luOiBvZmYgKG1hdGkpLCBvbiAiCi0iKG55YWxhKSwgZGlzYWJsZSAoZGlub25ha3RpZmthbiksIGF1dG8gKG90b21hdGlzKSwgdW5peCIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJOb25ha3RpZmthbiBhd2FrdXR1IgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIk1lbmdha3RpZmthbiBwbHVnaW4gdmVyYm9zZSBrZXRpa2EgbWVtdWF0IGRpYWdub3NpcyIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIkFsYW1hdCBkaXBpc2Foa2FuIHRhbmRhIHRpdGlrIGR1YSBiZXJpc2kgcGx1Z2luIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIkFMQU1BVCIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSJTZW5hcmFpIHBsdWdpbiBkaXBpc2Foa2FuIG9sZWgga29tYSB1bnR1ayBwcmFtdWF0IHNlYmFnYWkgdGFtYmFoYW4gZGFyaSAiCi0ic2VuYXJhaSB5YW5nIGRpc2ltcGFuIGRpIGxpbmdrdW5nYW4gdmFyaWFiZWwgR1NUX1BMVUdJTl9QQVRIIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiUExVR0lOIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiTm9uYWt0aWZrYW4gcGVuamViYWsgZ2FsYXQgc2VnbWVudGFzaSBzZWxhbWEgbWVtdWF0IHBsdWdpbiIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJOb25ha3RpZmthbiBwZW11dGFraGlyYW4gcmVnaXN0cnkiCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJOb25ha3RpZmthbiBtZW1ha3NhIHBlbm9sb25nIHByb3NlcyBrZXRpa2EgbWVtaW5kYWkgcmVnaXN0cnkiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiT3BzaSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJUYW1waWxrYW4gT3BzaSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiT3BzaSB0YWsgZGlrZXRhaHVpIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbWVuZ2hhZGFwaSBnYWxhdCB1bXVtIHB1c3Rha2EgaW50aS4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotIlBlbmdlbWJhbmcgR1N0cmVhbWVyIHRlcmxhbHUgbWFsYXMgdW50dWsgbWVudWxpcyBrb2RlIGdhbGF0IHVudHVrIGdhbGF0IGluaS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiR2FsYXQgR1N0cmVhbWVyIGludGVybmFsOiBrb2RlIGJlbHVtIGRpaW1wbGVtZW50YXNpa2FuLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIkdhbGF0IEdTdHJlYW1lcjogZ2FnYWwgbWVuZ3ViYWgga29uZGlzaSBkYW4gYmViZXJhcGEgZWxlbWVuIGdhZ2FsIHVudHVrICIKLSJtZW5naXJpbSBwZXNhbiBnYWxhdCB5YW5nIGJlbmFyIGRlbmdhbiBhbGFzYW4gYmFnaSBrZWdhZ2FsYW4uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkdhbGF0IEdTdHJlYW1lciBpbnRlcm5hbDogbWFzYWxhaCBsYW5kYXNhbi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiR2FsYXQgR1N0cmVhbWVyIGludGVybmFsOiBtYXNhbGFoIGJlbmFuZy4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJHYWxhdCBHU3RyZWFtZXI6IG1hc2FsYWggbmVnb3NpYXNpLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIkdhbGF0IEdTdHJlYW1lciBpbnRlcm5hbDogbWFzYWxhaCBldmVudC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIkdhbGF0IEdTdHJlYW1lciBpbnRlcm5hbDogbWFzYWxhaCBwZW5jYXJpYW4uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJHYWxhdCBHU3RyZWFtZXIgaW50ZXJuYWw6IG1hc2FsYWggaHVydWYuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIkdhbGF0IEdTdHJlYW1lciBpbnRlcm5hbDogbWFzYWxhaCB0YWcuIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiSW5zdGFsYXNpIEdTdHJlYW1lciBhbmRhIGtlaGlsYW5nYW4gcGx1Zy1pbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJHYWxhdCBHU3RyZWFtZXI6IG1hc2FsYWggamFtLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iQXBsaWthc2kgaW5pIG1lbmNvYmEgdW50dWsgbWVuZ2d1bmFrYW4gZnVuZ3Npb25hbGl0YXMgR1N0cmVhbWVyIHlhbmcgdGVsYWggIgotImRpbm9uYWt0aWZrYW4uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbWVuZ2hhZGFwaSBnYWxhdCB1bXVtIHB1c3Rha2EgcGVuZHVrdW5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW5naW5pc2lhbGlzYXNpIHB1c3Rha2EgcGVuZHVrdW5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJUYWsgZGFwYXQgbWVudXR1cCBwdXN0YWthIHBlbmR1a3VuZy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW5nYXR1ciBwdXN0YWthIHBlbmR1a3VuZy4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIkdhbGF0IHBlbnlhbmRpYW4uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBtZW5naGFkYXBpIGdhbGF0IHVtdW0gc3VtYmVyIGRheWEuIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiU3VtYmVyIGRheWEgdGFrIGRpdGVtdWthbi4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJTdW1iZXIgZGF5YSBzaWJ1ayBhdGF1IHRhayB0ZXJzZWRpYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW1idWthIHN1bWJlciBkYXlhIHVudHVrIGRpYmFjYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW1idWthIHN1bWJlciBkYXlhIHVudHVrIGRpdHVsaXMuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJUYWsgZGFwYXQgbWVtYnVrYSBzdW1iZXIgZGF5YSB1bnR1ayBkaWJhY2EgZGFuIGRpdHVsaXMuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbnV0dXAgc3VtYmVyIGRheWEuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW1iYWNhIGRhcmkgc3VtYmVyIGRheWEuIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbnVsaXMga2Ugc3VtYmVyIGRheWEuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZWxha3VrYW4gcGVuY2FyaWFuIGRpIHN1bWJlciBkYXlhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIlRhayBkYXBhdCBzaW5rcm9uaXNhc2kgZGkgc3VtYmVyIGRheWEuIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIlRhayBiaXNhIG1lbmRhcGF0a2FuL21lbmdhdHVyIHBlbmdhdHVyYW4gZGFyaS9kaSBzdW1iZXIgZGF5YS4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIlRhayBhZGEgcnVhbmcgdGVyc2lzYSBkaSBzdW1iZXIgZGF5YS4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJUYWsgZGlpemlua2FuIHVudHVrIG1lbmdha3NlcyBzdW1iZXIgZGF5YS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBtZW5naGFkYXBhaSBnYWxhdCBhcnVzIHVtdW0uIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iRWxlbWVuIHRpZGFrIG1lbmdpbXBsZW1lbnRhc2lrYW4gcGVuYW5nYW5hbiB1bnR1ayBhcnVzIGluaS4gU2lsYWthbiBsYXBvcmthbiAiCi0ia3V0dS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbmVudHVrYW4gdGlwZSBhcnVzLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIkFydXMgYmVyYXNhbCBkYXJpIHRpcGUgeWFuZyBiZXJiZWRhIGRhcmkgeWFuZyBkaXRhbmdhbmkgb2xlaCBlbGVtZW4gaW5pLiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiVGlkYWsgYWRhIGNvZGVjIHNhYXQgaW5pIHlhbmcgZGFwYXQgbWVuYW5nYW5pIHRpcGUgYXJ1cy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW5nYXdhc2FuZGkgYXJ1cy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW55YW5kaSBhcnVzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJUYWsgZGFwYXQgbWVueWF0dWthbiBhcnVzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbXBlcmJhbnlhayBhcnVzLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIkFydXMgYmVyYWRhIGRhbGFtIGZvcm1hdCB5YW5nIHNhbGFoLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJBcnVzIHRlcmVua3JpcHNpIGRhbiBkZWtyaXBzaSB0aWRhayBkaWR1a3VuZy4iCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0iQXJ1cyB0ZXJlbmtyaXBzaSBkYW4gdGFrIGRhcGF0IGRpZGVrcmlwc2kga2FyZW5hIHRpZGFrIGFkYSBrdW5jaSB5YW5nICIKLSJkaXNlZGlha2FuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJUYWsgYWRhIHBlc2FuIGdhbGF0IHVudHVrIGRvbWFpbiAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiVGFrIGFkYSBwZXNhbiBnYWxhdCBzdGFuZGFyIHVudHVrIGRvbWFpbiAlcyBkYW4ga29kZSAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIkphbSB0ZXJwaWxpaCB0YWsgZGFwYXQgZGlndW5ha2FuIGRhbGFtIGJhcmlzIHBpcGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICJHYWxhdCBtZW51bGlzIHRlbWJvbG9rIHJlZ2lzdHJ5IGtlICVzOiAlcyIKLQotbXNnaWQgInRpdGxlIgotbXNnc3RyICJqdWR1bCIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgImp1ZHVsIHlhbmcgdW11bSBkaWd1bmFrYW4iCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAibmFtYSBzaW5na2F0IGp1ZHVsIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAianVkdWwgeWFuZyB1bXVtIGRpZ3VuYWthbiB1bnR1ayBrZXBlbnRpbmdhbiBwZW5ndXJ1dGFuIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICJhcnRpcyIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAib3JhbmcgeWFuZyBiZXJ0YW5nZ3VuZ2phd2FiIHRlcmhhZGFwIHJla2FtYW4iCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIm5hbWEgc2luZ2thdCBhcnRpcyIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotIm9yYW5nIHlhbmcgYmVydGFuZ2d1bmdqYXdhYiB0ZXJoYWRhcCByZWthbWFuIHVudHVrIGtlcGVudGluZ2FuIHBlbmd1cnV0YW4iCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAiYWxidW0iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAiYWxidW0geWFuZyBiZXJpc2kgZGF0YSBpbmkiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAibmFtYSBzaW5na2F0IGFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsYnVtIHlhbmcgYmVyaXNpIGRhdGEgaW5pIHVudHVrIGtlcGVudGluZ2FuIHBlbmd1cnV0YW4iCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgImFsYnVtIGFydGlzIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJBcnRpcyB1bnR1ayBzZW11YSBhbGJ1bSwgc2VwZXJ0aSB5YW5nIHNlaGFydXNueWEgZGl0YW1waWxrYW4iCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgImFsYnVtIGFydGlzIG5hbWEgdXJ1dCIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiQXJ0aXMgdW50dWsgc2VtdWEgYWxidW0sIHNlcGVydGkgeWFuZyBzZWhhcnVzbnlhIGRpdXJ1dGthbiIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgInRhbmdnYWwiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgInRhbmdnYWwgZGF0YSBkaWJ1YXQgKG1lbnVydXQgc3RydWt0dXIgR0RhdGUpIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgInRhbmdnYWx3YWt0dSIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAidGFuZ2dhbCBkYW4gd2FrdHUgZGF0YSBkaWJ1YXQgKG1lbnVydXQgc3RydWt0dXIgR0RhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJnZW5yZSIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICJnZW5yZSBhc2FsIGRhdGEgaW5pIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAia29tZW50YXIiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAidGVrcyBiZWJhcyB1bnR1ayBtZW5nb21lbnRhcmkgZGF0YSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImtvbWVudGFyIGRpcGVycGFuamFuZyIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKLW1zZ3N0ciAiIgotInRla3MgYmViYXMgdW50dWsgbWVuZ29tZW50YXJpIGRhdGEgZGFsYW0gYmVudHVrIGt1bmNpPW5pbGFpIGF0YXUgIgotImt1bmNpW2VuXT1rb21lbnRhciIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAibm9tb3IgamFsdXIiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibm9tb3IgamFsdXIgZGkgZGFsYW0ga29sZWtzaSIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJoaXR1bmdhbiBqYWx1ciIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImhpdHVuZ2FuIGphbHVyIGRpIGRhbGFtIGtvbGVrc2kgYXNhbCBqYWx1ciBpbmkiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAibm9tb3IgY2FrcmFtIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibm9tb3IgY2FrcmFtIGRpIGRhbGFtIGtvbGVrc2kiCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICJoaXR1bmdhbiBjYWtyYW0iCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAiaGl0dW5nYW4gY2FrcmFtIGRpIGRhbGFtIGtvbGVrc2kgYXNhbCBjYWtyYW0gaW5pIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgImxva2FzaSIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0iQXNhbCBtZWRpYSBkYWxhbSBiZW50dWsgVVJJIChsb2thc2ksIGRpbWFuYSBiZXJrYXMgYXNhbCBhdGF1IGFydXMgIgotImRpdGVtcGF0a2FuKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICJsYW1hbiIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIkxhbWFuIHVudHVrIG1lZGlhIGluaSAobWlzYWxueWEgbGFtYW4gYXJ0aXMgYXRhdSBmaWxtKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJrZXRlcmFuZ2FuIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJ0ZWtzIHBlbmRlayB5YW5nIG1lbmVyYW5na2FuIGlzaSBkYXRhIgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAidmVyc2kiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAidmVyc2kgZGF0YSBpbmkiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0iSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIGxpaGF0IGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXNhc2kiCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgImhhayBjaXB0YSIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgImtldGVyYW5nYW4gaGFrIGNpcHRhIGRhdGEiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJ1cmkgaGFrIGNpcHRhIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkga2Uga2V0ZXJhbmdhbiBoYWsgY2lwdGEgZGF0YSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgImRpc2FuZGlrYW4gb2xlaCIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIm5hbWEgcGVueWFuZGlhbiBvcmFuZyBhdGF1IG9yZ2FuaXNhc2kiCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICJrb250YWsiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJpbmZvcm1hc2kga29udGFrIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAibGlzZW5zaSIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAibGlzZW5zaSBkYXRhIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgInVyaSBsaXNlbnNpIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkga2UgbGlzZW5zaSBkYXRhIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJwZW5hbXBpbCIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJvcmFuZyB5YW5nIHRhbXBpbCIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJwZW55dXN1biIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAib3JhbmcgeWFuZyBtZW55dXN1biBwZXJla2FtYW4iCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgImtvbmR1a3RvciIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAicGVtdXJuaWFuIGtvbmR1a3Rvci9wZW5hbXBpbCIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJkdXJhc2kiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAicGFuamFuZyBkYWxhbSB1bml0IHdha3R1IEdTdHJlYW1lciAobmFub2RldGlrKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJjb2RlYyIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29kZWMgZGF0YSB0ZXJzaW1wYW4iCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAiY29kZWMgdmlkZW8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIGRhdGEgdmlkZW8gdGVyc2ltcGFuIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImNvZGVjIGF1ZGlvIgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjb2RlYyBkYXRhIGF1ZGlvIHRlcnNpbXBhbiIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJjb2RlYyBzdWJqdWR1bCIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29kZWMgZGF0YSBzdWJqdWR1bCB0ZXJzaW1wYW4gZGkiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJmb3JtYXQgcGVtYmF0YXNhbiIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJmb3JtYXQgcGVtYmF0YXNhbiBkYXRhIHRlcnNpbXBhbiIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgImJpdHJhc2kiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJiaXRyYXNpIHRlcGF0IGF0YXUgcmF0YS1yYXRhIGRhbGFtIGJpdGEvZGV0aWsiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgImJpdHJhc2kgbm9ybWFsIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiYml0cmFzaSBub21pbmFsIGRhbGFtIGJpdGEvZGV0aWsiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgImJpdHJhc2kgbWluaW11bSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgImJpdHJhc2kgbWluaW11bSBkYWxhbSBiaXRhL2RldGlrIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJiaXRyYXNpIG1ha3NpbXVtIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiYml0cmFzaSBtYWtzaW11bSBkYWxhbSBiaXRhL2RldGlrIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAicGVueWFuZGkiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJwZW55YW5kaSB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW55YW5kaSBhcnVzIGluaSIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAidmVyc2kgcGVueWFuZGkiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJ2ZXJzaSBwZW55YW5kaSB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW55YW5kaSBhcnVzIGluaSIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAic2VyaSIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgIm5vbW9yIHNlcmkgamFsdXIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgInBlcmFpaGFuIGphbHVyIHBlcmFpaGFuIHB1dGFyIHVsYW5nIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAicGVyYWloYW4gamFsdXIgZGFsYW0gZGIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgInB1bmNhayBwZXJhaWhhbiBwdXRhciB1bGFuZyBqYWx1ciIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJwdW5jYWsgamFsdXIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgInBlcmFpaGFuIGFsYnVtIHBlcmFpaGFuIHB1dGFyIHVsYW5nIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAicGVyYWloYW4gYWxidW0gZGFsYW0gZGIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgInB1bmNhayBwZXJhaWhhbiBwdXRhciB1bGFuZyBhbGJ1bSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJwdW5jYWsgYWxidW0iCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAibGV2ZWwgcmVmZXJlbnNpIHBlcmFpaGFuIHB1dGFyIHVsYW5nIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAibGV2ZWwgcmVmZXJlbnNpIG5pbGFpIHBlcmFpaGFuIGphbHVyIGRhbiBhbGJ1bSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgImtvZGUgYmFoYXNhIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAia29kZSBiYWhhc2EgYXJ1cyBpbmksIG1lbmdhbnV0IGtlIElTTy02MzktMSBhdGF1IElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgIm5hbWEgYmFoYXNhIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIm5hbWEgYmViYXMgZGFyaSBiYWhhc2EgdGVtcGF0IGFydXMgaW5pIGJlcmFkYSIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJnYW1iYXIiCi0KLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJnYW1iYXIgeWFuZyBiZXJodWJ1bmdhbiBkZW5nYW4gYXJ1cyBpbmkiCi0KLSMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQotbXNnaWQgInByZXZpZXcgaW1hZ2UiCi1tc2dzdHIgImdhbWJhciBwcmF0YXlhbmciCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImdhbWJhciBwcmF0YXlhbmcgeWFuZyBiZXJodWJ1bmdhbiBkZW5nYW4gYXJ1cyBpbmkiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJsYW1waXJhbiIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImJlcmthcyB5YW5nIGRpbGFtcGlya2FuIGRhbGFtIGFydXMgaW5pIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiZGVueXV0IHBlciBtZW5pdCIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICJqdW1sYWggZGVueXV0IHBlciBtZW5pdCBkYWxhbSBhdWRpbyIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICJrYXRhIGt1bmNpIgotCi1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgImthdGEga3VuY2kgeWFuZyBkaXBpc2Foa2FuIGtvbWEgbWVuZXJhbmdrYW4gaXNpIGRhdGEiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibmFtYSBsb2thc2kgZ2VvZ3JhZmlzIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLSJsb2thc2kgZGVza3JpcHRpZiBkYXBhdCBkaWJhY2EgbWFudXNpYSBkaW1hbmEgbWVkaWEgdGVsYWggZGlyZWthbSBhdGF1ICIKLSJkaWhhc2lsa2FuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICJsaW50YW5nIGxva2FzaSBnZW9ncmFmaXMiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSJsb2thc2kgbGludGFuZyBnZW9ncmFmaXMgdGVtcGF0IG1lZGlhIGRpcmVrYW0gYXRhdSBkaWhhc2lsa2FuIGRhbGFtIGRlcmFqYXQgIgotIm1lbnVydXQgV0dTODQgKG5vbCBwYWRhIGtoYXR1bGlzdGl3YSwgbmlsYWkgbmVnYXRpZiB1bnR1ayBsaW50YW5nIHNlbGF0YW4pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiYnVqdXIgbG9rYXNpIGdlb2dyYWZpcyIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSJsb2thc2kgYnVqdXIgZ2VvZ3JhZmlzIHRlbXBhdCBtZWRpYSBkaXJla2FtIGF0YXUgZGloYXNpbGthbiBkYWxhbSBkZXJhamF0ICIKLSJtZW51cnV0IFdHUzg0IChub2wgcGFkYSBtZXJpZGlhbiB1dGFtYSBkaSBHcmVlbndpY2gvVUssIG5pbGFpIG5lZ2F0aWYgdW50dWsgIgotImJ1anVyIHRpbXVyKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgImtldGluZ2dpYW4gbG9rYXNpIGdlb2dyYWZpcyIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSJrZXRpbmdnaWFuIGdlb2dyYWZpcyB0ZW1wYXQgbWVkaWEgZGlyZWthbSBhdGF1IGRpaGFzaWxrYW4gZGFsYW0gbWV0ZXIgIgotIm1lbnVydXQgV0dTODQgKG5vbCBhZGFsYWggcGVybXVrYWFuIGxhdXQgcmF0YS1yYXRhKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICJuZWdhcmEgbG9rYXNpIGdlb2dyYWZpcyIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0ibmVnYXJhIChkYWxhbSBiYWhhc2EgSW5nZ3JpcykgdGVtcGF0IG1lZGlhIHRlbGFoIGRpcmVrYW0gYXRhdSBkaWhhc2lsa2FuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgImtvdGEgbG9rYXNpIGdlb2dyYWZpcyIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJrb3RhIChkYWxhbSBiYWhhc2EgSW5nZ3JpcykgdGVtcGF0IG1lZGlhIHRlbGFoIGRpcmVrYW0gYXRhdSBkaWhhc2lsa2FuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJzdWJsb2thc2kgbG9rYXNpIGdlb2dyYWZpcyIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0ibG9rYXNpIGRpIGRhbGFtIGtvdGEgdGVtcGF0IG1lZGlhIGRpaGFzaWxrYW4gYXRhdSBkaWJ1YXQgKG1pcy4gbGluZ2t1bmdhbikiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAiZ2FsYXQgaG9yaXpvbnRhbCBsb2thc2kgZ2VvZ3JhZmlzIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgImdhbGF0IHlhbmcgZGloYXJhcGthbiBkYXJpIHBlbmd1a3VyYW4gcG9zaXNpIGhvcml6b250YWwgKGRhbGFtIG1ldGVyKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAia2VjZXBhdGFuIGdlcmFrIGxva2FzaSBnZW9ncmFmaXMiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLSJrZWNlcGF0YW4gZ2VyYWsgZGl2YWlzIHBlbmFuZ2thcCBrZXRpa2EgbWVsYWt1a2FuIHBlbmFuZ2thcGFuIGRhbGFtIG0vZCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgImFyYWggZ2VyYWsgbG9rYXNpIGdlb2dyYWZpcyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotIm1lbmdpbmRpa2FzaWthbiBhcmFoIGdlcmFrIGRpdmFpcyB5YW5nIG1lbGFrdWthbiBwZW5hbmdrYXBhbiBtZWRpYS4gQXJhaCAiCi0iZGlyZXByZXNlbnRhc2lrYW4gc2ViYWdhaSBkZXJhamF0IGRhbGFtIHJlcHJlc2VudGFzaSB0aXRpayBtZW5nYW1iYW5nLCAwICIKLSJiZXJhcnRpIHV0YXJhIGdlb2dyYWZpcywgZGFuIG1lbmluZ2thdCBzZWFyYWggamFydW0gamFtIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJhcmFoIHBlbmFuZ2thcGFuIGxva2FzaSBnZW9ncmFmaXMiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJtZW5naW5kaWthc2lrYW4gYXJhaCBkaXZhaXMgbWVudW5qdWsga2V0aWthIG1lbmFuZ2thcCBtZWRpYS4gQXJhaCAiCi0iZGlyZXByZXNlbnRhc2lrYW4gc2ViYWdhaSBkZXJhamF0IGRhbGFtIHJlcHJlc2VudGFzaSB0aXRpayBtZW5nYW1iYW5nLCAwICIKLSJiZXJhcnRpIHV0YXJhIGdlb2dyYWZpcywgZGFuIG1lbmluZ2thdCBzZWFyYWggamFydW0gamFtIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgInRhbXBpbGthbiBuYW1hIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAiTmFtYSBkYXJpIGFjYXJhIHR2L3BvZGNhc3Qvc2VyaWFsIG1lZGlhIGJlcmFzYWwiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgInRhbXBpbGthbiBuYW1hIHNpbmdrYXQiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJOYW1hIGRhcmkgYWNhcmEgdHYvcG9kY2FzdC9zZXJpYWwgbWVkaWEgYmVyYXNhbCwgdW50dWsgdHVqdWFuIHBlbmd1cnV0YW4iCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAianVtbGFoIGVwaXNvZGUiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiSnVtbGFoIGVwaXNvZGUgZGFsYW0gc2VtdXNpbSB0ZW1wYXQgbWVkaWEgbWVuamFkaSBiYWdpYW5ueWEiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJqdW1sYWggbXVzaW0iCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiSnVtbGFoIG11c2ltIGRhcmkgYWNhcmEgdGVtcGF0IG1lZGlhIG1lbmphZGkgYmFnaWFubnlhIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJsaXJpayIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiTGlyaWsgZGFyaSBtZWRpYSwgdW11bW55YSBkaWd1bmFrYW4gdW50dWsgbGFndSIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJuYW1hIHNpbmdrYXQga29tcG9zZXIiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJvcmFuZyB5YW5nIG1lbmdvbXBvc2lzaSByZWthbWFuLCB1bnR1ayBrZXBlbnRpbmdhbiBwZW5ndXJ1dGFuIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgInBlbmdlbG9tcG9ra2FuIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iR3J1cCB0ZXJrYWl0IG1lZGlhIHlhbmcgbWVsaXB1dGkgYmFueWFrIGphbHVyLCBzZXBlcnRpIGJhZ2lhbiB5YW5nIGJlcmJlZGEgIgotImRhcmkgc2VidWFoIGtvbnNlci4gSW5pIGFkYWxhaCBsZXZlbCB5YW5nIGxlYmloIHRpbmdnaSBkYXJpIGphbHVyLCB0YXBpICIKLSJsZWJpaCByZW5kYWggZGFyaSBhbGJ1bSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJwZXJpbmdrYXQgcGVuZ2d1bmEiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIlBlcmluZ2thdCBkaWF0cmlidXNpIG9sZWggcGVuZ2d1bmEuIE1ha2luIHRpbmdnaSBwZXJpbmdrYXQsIG1ha2luIHN1a2EgIgotInBlbmdndW5hIHRlcmhhZGFwIG1lZGlhIGluaSIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgIm1hbnVmYWt0dXIgZGl2YWlzIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTWFudWZha3R1ciBkaXZhaXMgeWFuZyBkaWd1bmFrYW4gdW50dWsgbWVuYW5na2FwIG1lZGlhIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJtb2RlbCBkaXZhaXMiCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIk1vZGVsIGRpdmFpcyB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1idWF0IG1lZGlhIGluaSIKLQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgIm5hbWEgYXBsaWthc2kiCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIkFwbGlrYXNpIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbWJ1YXQgbWVkaWEiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJkYXRhIGFwbGlrYXNpIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiRGF0YSBhcGxpa2FzaSB3YWppYiB5YW5nIGFrYW4gZGl1cnV0a2FuIGRhbGFtIG1lZGlhIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIm9yaWVudGFzaSBnYW1iYXIiCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIkJhZ2FpbWFuYSBnYW1iYXIgaGFydXMgZGlwdXRhciBhdGF1IGRpYmFsaWsgc2ViZWx1bSBkaXRhbXBpbGthbiIKLQotbXNnaWQgInB1Ymxpc2hlciIKLW1zZ3N0ciAicGVuZXJiaXQiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk5hbWEgbGFiZWwgYXRhdSBwZW5lcmJpdCIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICJkaWludGVycHJldGFzaS1vbGVoIgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgIiIKLSJJbmZvcm1hc2kgdGVudGFuZyBvcmFuZyBkaSBiZWxha2FuZyBzdWF0dSByZW1peCBkYW4gaW50ZXJwcmV0YXNpIHlhbmcgc2VydXBhIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIm1pZGktYmFzZS1ub3RlIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICJOb21vciBjYXRhdGFuIG1pZGkgZGFyaSBqYWx1ciBhdWRpby4iCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgImRhdGEtcHJpdmF0IgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICJEYXRhIHByaXZhdCIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICJUYWsgZGl0ZW11a2FuIHBlbmFuZ2FuIFVSSSBiYWdpIHByb3Rva29sICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICJTa2VtYSBVUkkgJyVzJyB0YWsgZGlkdWt1bmciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiR0FMQVQ6IGRhcmkgZWxlbWVuICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkluZm8gYXdha3V0dSB0YW1iYWhhbjpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgInRhdXRhbiB0aWRhayBtZW1wdW55YWkgc3VtYmVyIFtzaW5rPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICJ0YXV0YW4gbWVtcHVueWFpIGJ1YW5nYW4gW3NvdXJjZT0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJ0YWsgYWRhIHByb3BlcnRpIFwiJXNcIiBkaSBlbGVtZW4gXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAidGFrIGRhcGF0IG1lbmdhdHVyIHByb3BlcnRpIFwiJXNcIiBkaSBlbGVtZW4gXCIlc1wiIGtlIFwiJXNcIiIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICJKZWRhIHBlbmF1dGFuIGdhZ2FsLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAidGFrIGRhcGF0IG1lbmF1dGthbiAlcyBrZSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAidGFrIGFkYSBlbGVtZW4gXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJyZWZlcmVuc2kgdGFrIGRpaGFyYXBrYW4gXCIlc1wiIC0gbWVuZ2FiYWlrYW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJyZWZlcmVuc2kgcGFkIHRhayBkaWhhcmFwa2FuIFwiJXNcIiAtIG1lbmdhYmFpa2FuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAidGFrIGRhcGF0IG1lbmd1cmFpa2FuIGh1cnVmIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgInRhayBhZGEgZWxlbWVuIGJ1YW5nIHVudHVrIFVSSSBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgInRhayBhZGEgZWxlbWVuIHN1bWJlciB1bnR1ayBVUkkgXCIlc1wiIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICJnYWxhdCBzaW50YWtzaXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJtZW5lbnR1a2FuIGtvdGFrIHNhbXBhaCBrb3NvbmcgXCIlc1wiLCB0YWsgZGlpemlua2FuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAidGFrIGFkYSB0ZW1wYXQgc2FtcGFoIFwiJXNcIiwgbWVtYm9uZ2thciBlbGVtZW4iCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiYmFyaXMgcGlwYSBrb3NvbmcgdGFrIGRpaXppbmthbiIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJCYW55YWsgcGVueWFuZ2dhIHlhbmcgZGlkcm9wLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiTWFzYWxhaCBhbGlyYW4gZGF0YSBpbnRlcm5hbC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJHYWxhdCBhbGlyYW4gZGF0YSBpbnRlcm5hbC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCi1tc2dzdHIgIkdhbGF0IGphbSBpbnRlcm5hbC4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIkdhZ2FsIG1lbWV0YWthbiBwZW55YW5nZ2EuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkZpbHRlciBodXJ1ZiIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iTGFyYW5nIGtlbWFtcHVhbiB5YW5nIG11bmdraW4gZGlpemlua2FuIChLT1NPTkcgYmVyYXJ0aSBBUEFQVU4pLiBQZW5nYXR1cmFuICIKLSJwcm9wZXJ0aSBpbmkgYmVyc3VtYmVyIHBhZGEgb2JqZWsgR3N0Q2FwcyB5YW5nIGRpc2VkaWFrYW4uIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiTW9kZSBVYmFoIEh1cnVmIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiRmlsdGVyIHBlcmlsYWt1IHViYWggaHVydWYiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICJUYWsgYWRhIGRpcmVrdG9yaSBUZW1wIHlhbmcgZGl0ZW50dWthbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiVGFrIGJpc2EgbWVtYnVhdCBiZXJrYXMgdGVtcCBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbWJ1a2EgYmVya2FzIFwiJXNcIiB1bnR1ayBkaWJhY2EuIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiR2FsYXQga2V0aWthIG1lbnVsaXMga2UgYmVya2FzIHVuZHVoYW4uIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIlRhayBhZGEgbmFtYSBiZXJrYXMgeWFuZyBkaXRlbnR1a2FuIHVudHVrIGRpdHVsaXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbWJ1a2EgYmVya2FzIFwiJXNcIiB1bnR1ayBkaXR1bGlzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiR2FsYXQgbWVudWxpcyBiZXJrYXMgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiR2FsYXQga2V0aWthIG1lbmNhcmkgZGkgYmVya2FzIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkdhbGF0IGtldGlrYSBtZW51bGlzIGtlIGJlcmthcyBcIiVzXCIuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIlRhayBhZGEgbmFtYSB5YW5nIGRpdGVudHVrYW4gdW50dWsgZGliYWNhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiVGFrIGJpc2EgbWVuZGFwYXRrYW4gaW5mbyBkaSBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIlwiJXNcIiBhZGFsYWggZGlyZWt0b3JpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIkJlcmthcyBcIiVzXCIgYWRhbGFoIHNva2V0LiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIkdhZ2FsIHNldGVsYWggcGVuZ3VsYW5nYW4gc2VwZXJ0aSB5YW5nIGRpbWludGEuIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAiaHVydWYiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJtZW5kZXRla3NpIGtlbWFtcHVhbiBkYWxhbSBhcnVzIgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAibWluaW11bSIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgInBha3NhIGh1cnVmIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgInBha3NhIGh1cnVmIHRhbnBhIG1lbGFrdWthbiBwZW5jYXJpYW4gdGlwZSIKLQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJBcnVzIHRpZGFrIGJlcmlzaSBjdWt1cCBkYXRhLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiQXJ1cyB0aWRhayBiZXJpc2kgZGF0YS4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICJBbnRhcm11a2EgVGVyaW1wbGVtZW50YXNpOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgImRhcGF0IGRpYmFjYSIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICJkYXBhdCBkaXR1bGlzIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAidXNhbmciCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgImRhcGF0IGRpa2VuZGFsaWthbiIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICJkYXBhdCBkaXViYWggZGFsYW0ga29uZGlzaSBOVUxMLCBSRUFEWSwgUEFVU0VEIGF0YXUgUExBWUlORyIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgImhhbnlhIGRhcGF0IGRpdWJhaCBkYWxhbSBrb25kaXNpIE5VTEwsIFJFQURZLCBhdGF1IFBBVVNFRCIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICJoYW55YSBkYXBhdCBkaXViYWggZGFsYW0ga29uZGlzaSBOVUxMIGF0YXUgUkVBRFkiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIkJlcmthcyB5YW5nIGRpbGFyYW5nOiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIkp1bWxhaCB0b3RhbDogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIlZCBiZXJrYXMgdGVybGFyYW5nIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgcGx1Z2luIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkIGVudHJpIHRlcmxhcmFuZyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgZml0dXIiCi0KLW1zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCi1tc2dzdHIgIkNldGFrIHNlbXVhIGVsZW1lbiIKLQotbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHIgIkNldGFrIHNlbmFyYWkgZGFyaSBiZXJrYXMgeWFuZyBkaWxhcmFuZyIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iQ2V0YWsgc2VuYXJhaSBkYXBhdCBkaWJhY2EgbWVzaW4gZGFyaSBmaXR1ciBwbHVnaW4geWFuZyBkaXRlbnR1a2FuIGF0YXUgIgotInNlbXVhIHBsdWdpbiB5YW5nIGRpc2VkaWFrYW4uXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVyZ3VuYSBkYWxhbSBrb25la3NpIGRlbmdhbiBwbHVnaW4gIgotIm90b21hdGlzIGVrc3Rlcm5hbCBkYWxhbSBtZWthbmlzbWUgaW5zdGFsYXNpIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICJUYW1waWxrYW4gaXNpIHBsdWdpbiIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICJLbGlrIGJpbGEgZWxlbWVuIGF0YXUgcGx1Z2luIHlhbmcgZGlueWF0YWthbiBhZGEiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0iS2V0aWthIG1lbWVyaWtzYSBhcGFrYWggc3VhdHUgZWxlbWVuIGF0YXUgcGx1Z2luIGFkYSwganVnYSBwZXJpa3NhIHZlcnNpbnlhICIKLSJwYWxpbmcgdGlkYWsgYWRhbGFoIHZlcnNpIHlhbmcgZGlueWF0YWthbiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotIkNldGFrIHNrZW1hIFVSSSB5YW5nIGRpZHVrdW5nLCBkZW5nYW4gZWxlbWVuIHlhbmcgbWVuZ2ltcGxlbWVudGFzaWthbm55YSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbWJ1YXQgYmVya2FzIHBsdWdpbjogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiVGFrIGFkYSBlbGVtZW4gYXRhdSBwbHVnaW4gJyVzJ1xuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiU3RhdGlzdGlrIGluZGVrcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIk1lbmRhcGF0IHBlc2FuICMldSBkYXJpIGVsZW1lbiBcIiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICJNZW5kYXBhdCBwZXNhbiAjJXUgZGFyaSBiYW50YWxhbiBcIiVzOiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJNZW5kYXBhdCBwZXNhbiAjJXUgZGFyaSBvYmplayBcIiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIk1lbmRhcGF0IFBlc2FuICMldSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJNZW5kYXBhdCBFT1MgZGFyaSBlbGVtZW4gXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk1FTkVNVUtBTiBUQUcgICAgICA6IGRpdGVtdWthbiBvbGVoIGVsZW1lbiBcIiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICJNRU5FTVVLQU4gVEFHICAgICAgOiBkaXRlbXVrYW4gb2xlaCBiYW50YWxhbiBcIiVzOiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJNRU5FTVVLQU4gVEFHICAgICAgOiBkaXRlbXVrYW4gb2xlaCBvYmplayBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAiTUVORU1VS0FOIFRBR1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk1FTkVNVUtBTiBUT0MgICAgICA6IGRpdGVtdWthbiBvbGVoIGVsZW1lbiBcIiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJNRU5FTVVLQU4gVE9DICAgICAgOiBkaXRlbXVrYW4gb2xlaCBvYmplayBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiTUVORU1VS0FOIFRPQ1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJQRVJJTkdBVEFOOiBkYXJpIGVsZW1lbiAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJQcmFndWx1bmcsIG1lbnVuZ2d1IGhpbmdnYSBwZW55YW5nZ2Egc2VsZXNhaS4uLlxuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiUHJhZ3VsdW5nLCBtZW51bmdndSBrZW1hanVhbiBzZWxlc2FpLi4uXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgIm1lbnlhbmdnYS4uLiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIlNlbGVzYWkgbWVueWFuZ2dhLCBtZW5nYXR1ciBiYXJpcyBwaXBhIGtlIE1FTVVUQVIgLi4uXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJNZW55YW5nZ2EsIG1lbmdhdHVyIGJhcmlzIHBpcGEga2UgSkVEQSAuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIk1lbmRpc3RyaWJ1c2lrYW4gdWxhbmcgbGF0ZW5jeS4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIk1lbmdhdHVyIHRpbmdrYXQga2UgJXMgc2VwZXJ0aSBkaW1pbnRhIG9sZWggJXMuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkludGVydXBzaTogTWVuZ2hlbnRpa2FuIGJhcmlzIHBpcGEgLi4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiS2VtYWp1YW46ICglcykgJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIkVsZW1lbiBrdXJhbmc6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIk1lbmRhcGF0IGtvbnRla3MgZGFyaSBlbGVtZW4gJyVzJzogJXM9JXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiVGFnIGtlbHVhcmFuIChqdWdhIGRpa2VuYWwgc2ViYWdhaSBtZXRhZGF0YSkiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICJUT0Mga2VsdWFyYW4gKGJhYiBkYW4gZWRpc2kpIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiSW5mb3JtYXNpIHN0YXR1cyBrZWx1YXJhbiBkYW4gcGVtYmVyaXRhaHVhbiBwcm9wZXJ0aSIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIkphbmdhbiBjZXRhayBpbmZvcm1hc2kgcHJvc2VzIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICJQZXNhbiBrZWx1YXJhbiIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0iSmFuZ2FuIGtlbHVhcmthbiBpbmZvcm1hc2kgc3RhdHVzIHVudHVrIHByb3BlcnRpIHlhbmcgZGl0ZW50dWthbiBqaWthICIKLSJrZWx1YXJhbiBsZW5na2FwIGRpYWt0aWZrYW4gKGRhcGF0IGRpZ3VuYWthbiBiZXJrYWxpLWthbGkpIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiTkFNQS1QUk9QRVJUSSIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiSmFuZ2FuIGluc3RhbCBwZW5hbmdhbmFuIGdhbGF0IgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICJQYWtzYSBFT1MgcGFkYSBzdW1iZXIgc2ViZWx1bSBtZW1hdGlrYW4gcGVtaXBhYW4iCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIkt1bXB1bGthbiBkYW4gY2V0YWsgc3RhdGlzdGlrIGluZGVrcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiR0FMQVQ6IGJhcmlzIHBpcGEgdGFrIGRhcGF0IGRpYmFuZ3VuOiAlcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkdBTEFUOiBiYXJpcyBwaXBhIHRhayBkYXBhdCBkaWJhbmd1bi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIlBFUklOR0FUQU46IGJhcmlzIHBpcGEgYmVyaXNpIGdhbGF0OiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJHQUxBVDogZWxlbWVuICdiYXJpcyBwaXBhJyB0YWsgZGl0ZW11a2FuLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIk1lbmdhdHVyIGJhcmlzIHBpcGEga2UgSkVEQSAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkdBTEFUOiBCYXJpcyBwaXBhIHRhayBpbmdpbiBkaWplZGFrYW4uXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIkJhcmlzIHBpcGEgdGVsYWggaGlkdXAgZGFuIHRhayBtZW1idXR1aGthbiBQUkFHVUxVTkcgLi4uXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICJCYXJpcyBwaXBhIFBSQUdVTFVORyAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiR0FMQVQ6IGJhcmlzIHBpcGEgdGFrIGluZ2luIGRpcHJhZ3VsdW5nLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJCYXJpcyBwaXBhIHRlbGFoIFBSQUdVTFVORyAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiTWVuZ2F0dXIgYmFyaXMgcGlwYSBrZSBQVVRBUiAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiR0FMQVQ6IGJhcmlzIHBpcGEgdGlkYWsgaW5naW4gZGlwdXRhci5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICJFT1MgcGFkYSBtYXRpa2FuIGRpYWt0aWZrYW4gLS0gUGFrc2EgRU9TIHBhZGEgcGVtaXBhYW5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICJFT1MgcGFkYSBtYXRpa2FuIGRpYWt0aWZrYW4gLS0gbWVudW5nZ3UgRU9TIHNldGVsYWggR2FsYXRcbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICJNZW51bmdndSB1bnR1ayBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyBkaXRlcmltYSAtIG1lbmdoZW50aWthbiBiYXJpcyBwaXBhLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiSW50ZXJ1cHNpIHNhYXQgbWVudW5nZ3UgRU9TIC0gbWVuZ2hlbnRpa2FuIGJhcmlzIHBpcGEuLi5cbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJHYWxhdCB0ZXJqYWRpIGtldGlrYSBtZW51bmdndSBFT1NcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICJFa3Nla3VzaSBiZXJha2hpciBzZXRlbGFoICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICJNZW5nYXR1ciBiYXJpcyBwaXBhIGtlIFNJQVAgLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIk1lbmdhdHVyIGJhcmlzIHBpcGEga2UgS09TT05HIC4uLlxuIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiTWVtYmViYXNrYW4gYmFyaXMgcGlwYSAuLi5cbiIKLQotI34gbXNnaWQgImJpbiIKLSN+IG1zZ3N0ciAidGVtcGF0IHNhbXBhaCIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiR2FsYXQgYXJ1cyBkYXRhIGludGVybmFsLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIkphbmdhbiBrZWx1YXJrYW4gaW5mb3JtYXNpIHN0YXR1cyBkYXJpIFRJUEUiCi0KLSN+IG1zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCi0jfiBtc2dzdHIgIlRJUEUxLCBUSVBFMiwuLi4iCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgInRhdXQgdGFucGEgZWxlbWVuIHN1bWJlciIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgInRhdXQgdGFucGEgZWxlbWVuIGJ1YW5nIgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgInRhayBhZGEgZWxlbWVuIGtlIHRhdXQgVVJJIFwiJXNcIiIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAidGFrIGRhcGF0IG1lbmF1dGthbiBlbGVtZW4gYnVhbmcgdW50dWsgVVJJIFwiJXNcIiIKZGlmZiAtLWdpdCBhL3BvL2luc2VydC1oZWFkZXIuc2luIGIvcG8vaW5zZXJ0LWhlYWRlci5zaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNmRlMDEuLjAwMDAwMDAKLS0tIGEvcG8vaW5zZXJ0LWhlYWRlci5zaW4KKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jIFNlZCBzY3JpcHQgdGhhdCBpbnNlcnRzIHRoZSBmaWxlIGNhbGxlZCBIRUFERVIgYmVmb3JlIHRoZSBoZWFkZXIgZW50cnkuCi0jCi0jIEF0IGVhY2ggb2NjdXJyZW5jZSBvZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCAibXNnaWQgIiwgd2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nCi0jIGNvbW1hbmRzLiBBdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSwgaW5zZXJ0IHRoZSBmaWxlLiBBdCB0aGUgZm9sbG93aW5nCi0jIG9jY3VycmVuY2VzLCBkbyBub3RoaW5nLiBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZSBmb2xsb3dpbmcKLSMgb2NjdXJyZW5jZXMgaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KLS9ebXNnaWQgL3sKLXgKLSMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KLXMvbS9tLwotdGEKLSMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVhZCB0aGUgZmlsZS4KLXIgSEVBREVSCi0jIE91dHB1dCB0aGUgZmlsZSdzIGNvbnRlbnRzIGJ5IHJlYWRpbmcgdGhlIG5leHQgbGluZS4gQnV0IGRvbid0IGxvc2UgdGhlCi0jIGN1cnJlbnQgbGluZSB3aGlsZSBkb2luZyB0aGlzLgotZwotTgotYmIKLTphCi0jIFRoZSBob2xkIHNwYWNlIHdhcyBub25lbXB0eS4gRm9sbG93aW5nIG9jY3VycmVuY2VzLiBEbyBub3RoaW5nLgoteAotOmIKLX0KZGlmZiAtLWdpdCBhL3BvL2l0LmdtbyBiL3BvL2l0LmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3NjM2NC4uMDAwMDAwMAotLS0gYS9wby9pdC5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9pdC5wbyBiL3BvL2l0LnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGY2ZmE4Li4wMDAwMDAwCi0tLSBhL3BvL2l0LnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTU2NCArMCwwIEBACi0jIEl0YWxpYW4gdHJhbnNsYXRpb24gZm9yIGdzdHJlYW1lciBwYWNrYWdlIG9mIEdTdHJlYW1lciBwcm9qZWN0LgotIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgR1N0cmVhbWVyIHRlYW0KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgotIwotIyBBbGN1bmUgbm90ZSAoZXNzZW56aWFsbWVudGUgdW5hIHRyYWR1emlvbmUpIGRvcG8gdW5hIGxldHR1cmEgbm9uIHRyb3BwbwotIyBhcHByb2ZvbmRpdGEgZGVsIG1hbnVhbGUgZGkgR1N0cmVhbWVyCi0jCi0jIFRlbmV0ZSBwcmVzZW50ZSBjaGUsIGRhIHVuIHB1bnRvIGRpIHZpc3RhIGRlbGxvIHN2aWx1cHBhdG9yZSwgR1N0cmVhbWVyCi0jIMOoIHBlc2FudGVtZW50ZSBpbmZsdWVuemF0byBkYWxsYSBzdHJ1dHR1cmEgZGkgR0xpYiwgZWQgaW4gcGFydGljb2xhcmUKLSMgZGVpIEdPYmplY3QsIHBlciBjdWkgbGUgdmFyaWUgZnVuemlvbmkgZGkgbGlicmVyaWEgb3BlcmFubyBjb24gaWwKLSMgY3JpdGVyaW8gZGVsbGEgcHJvZ3JhbW1hemlvbmUgb3JpZW50YXRhIGFnbGkgb2dnZXR0aS4KLSMKLSMgUGVyIGNoaSBtaSBjYXBpc2NlLCBlIHRhZ2xpYW5kbyB2aWEgZWxlbWVudGkgcXVpIG5vbiBlc3NlbnppYWxpCi0jCi0jIEdPYmplY3QKLSMgICAgICAgICBHc3RPYmplY3QKLSMgICAgICAgICAgICAgICAgIEdzdFBhZAotIyAgICAgICAgICAgICAgICAgR3N0RWxlbWVudAotIyAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCaW4KLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RQaXBlbGluZQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFRocmVhZAotIwotIwotIyAtLS0gRWxlbWVudHMgLS0tCi0jCi0jIFVuIGVsZW1lbnRvIMOoIGlsIGJsb2NjbyBjb3N0cnV0dGl2byBkaSBiYXNlIHBlciB1bmEgIm1lZGlhIHBpcGVsaW5lIi4KLSMgVHV0dGkgaSBkaWZmZXJlbnRpIGVsZW1lbnRpIGRpIGFsdG8gbGl2ZWxsbyB1c2F0aSBzb25vIGRlcml2YXRpIGRhCi0jIEdzdEVsZW1lbnQuIEdsaSBlbGVtZW50aSBzb25vICJibGFjayBib3hlcyIgY29uIHVuIG51bWVybyBkaSBkaWZmZXJlbnRpCi0jIGFzcGV0dGkuIFVubyBkaSBxdWVzdGkgYXNwZXR0aSDDqCBsYSBwcmVzZW56YSBkaSAicGFkcyIsIG8gcHVudGkgZGkKLSMgY29sbGVnYW1lbnRvIChsaW5rIHBvaW50cykuIFRoaXMgdGVybWlub2xvZ3kgYXJpc2VzIGZyb20gc29sZGVyaW5nOyBwYWRzCi0jIGFyZSB3aGVyZSB3aXJlcyBjYW4gYmUgYXR0YWNoZWQuCi0jCi0jIFRpcGkgZGkgZWxlbWVudG86Ci0jICAgICAgICogc291cmNlIC0gZ2VuZXJhIGkgZGF0aSBkYSB1c2FyZSBpbiB1bmEgcGlwZWxpbmUsIGFkIGVzLiBsZWdnZW5kbwotIyAgICAgICAgIGRhIHF1YWxjb3NhIChkaXNjbywgcmV0ZSwgY2FuYWxlIHNjaGVkYSBhdWRpby4uLikuIEhhbm5vIHNvbG8gdW4KLSMgICAgICAgICBzb3VyY2UgcGFkCi0jICAgICAgICogZmlsdGVyL2NvZGVjIC0gaGFubm8gZGVpIHBhZCBkaSBpbnB1dCBlZCBvdXRwdXQuIE9wZXJhbm8gc3VpCi0jICAgICAgICAgZGF0aSBjaGUgcmljZXZvbm8gbmVsIHNpbmsgcGFkIGUgcHJvZHVjb25vIGRhdGkgc3VsIGxvcm8gc291cmNlCi0jICAgICAgICAgcGFkLiBVbiBkZW11eGVyIGFwcGFydGllbmUgYSBxdWVzdGEgY2F0ZWdvcmlhICgxIGluLCAyIG91dCkKLSMgICAgICAgKiBzaW5rIC0gcHVudG8gZCd1c2NpdGEgZGkgdW5hIHBpcGVsaW5lLCBhY2NldHRhbm8gZGF0aSBzZW56YQotIyAgICAgICAgIHByb2R1cm5lIGFsdHJpLiBJbXBsZW1lbnRhemlvbmkgZGkgZWxlbWVudGkgc2luayBzb25vIGxhCi0jICAgICAgICAgc2NyaXR0dXJhIHN1IGZpbGUsIGxhIHJpcHJvZHV6aW9uZSBhdWRpbyBvIHZpZGVvLgotIwotIyAtLS0gUGFkcyAtLS0KLSMKLSMgU29ubyBsJ2ludGVyZmFjY2lhIGRpIHVuIGVsZW1lbnRvIHZlcnNvIGlsIG1vbmRvIGVzdGVybm8uIFBlcm1ldHRvbm8gZGkKLSMgZXNwb3JyZSBpbCB0aXBvIHNwZWNpZmljbyBkaSBtZWRpYSBjaGUgbCdlbGVtZW50byBwdcOyIGdlc3RpcmUuCi0jCi0jIEkgcGFkIHBvc3Nvbm8gZXNzZXJlIHNvdXJjZSBlIHNpbms6IGNpw7IgZGlwZW5kZSBkYWwgcHVudG8gZGkgdmlzdGEKLSMgZGVsbCdlbGVtZW50byBjdWkgYXBwYXJ0ZW5nb25vCi0jCi0jIFRpcGkgZGkgcGFkOgotIyAgICAgICAqIGRpbmFtaWNpIC0gbCdlbGVtZW50byBjcmVhIHVuIHBhZCBzZSBuZWNlc3NhcmlvLCBlc2VtcGlvOiBtcGVnCi0jICAgICAgICAgbXVsdGlwbGV4ZXIgY3JlYSBwYWQgYSBzZWNvbmRhIGRlaSBkaWZmZXJlbnRpIHN0cmVhbSBlbGVtZW50YXJpCi0jICAgICAgICAgcmlsZXZhdGkgbmVsbG8gc3RyZWFtIG1wZWcKLSMgICAgICAgKiByZXF1ZXN0ZWQgLSBwYWQgY3JlYXRvIG9uIGRlbWFuZAotIwotIyAtLS0gQ2FwYWJpbGl0aWVzIC0tLQotIwotIyBVc2F0ZSBwZXIgZGVzY3JpdmVyZSBpIHRpcGkgZGkgZGF0aSBjaGUgcG9zc29ubyAiYXR0cmF2ZXJzYXJlIiBpbCBwYWQuCi0jIFNvbm8gYWxsZWdhdGUgYWwgcGFkIHN0ZXNzby4gQ2FwYWJpbGl0aWVzIHN0YSBwZXIgImNhcGFiaWxpdHkgY2hhaW4iCi0jCi0jIFtTYWx0byBsZSBwYXJ0aSBjb21wbGljYXRlXSBMZSBjYXBhYmlsaXRpZXMgc29ubyB1c2F0ZSBwZXIKLSMgbCdhdXRvcGx1Z2dpbmcgKGF1dG9tYXRpY2FsbHkgZmluZGluZyBwbHVnaW5zIGZvciBhIHNldCBvZiBjYXBhYmlsaXRpZXMpCi0jIGVkIGlsIHJpbGV2YW1lbnRvIGRpIGNvbXBhdGliaWxpdMOgICh0cmEgZHVlIHBhZCBjb2xsZWdhdGkgLSAiY2FwcwotIyBuZWdvdGlhdGlvbiIpCi0jCi0jIC0tLSBMaW5rIC0tLQotIwotIyBEYXRpIHRyZSBlbGVtZW50aSAoc291cmNlLCBmaWx0ZXIsIHNpbmspIHBvc3NvIGNvbGxlZ2FyZSBpbiBtb2RvCi0jIG9wcG9ydHVubyBpIHJlbGF0aXZpIHBhZCwgY3JlYW5kbyB1bmEgY2F0ZW5hLiBWZWRpIGFsbGVnYXRvLgotIwotIyAtLS0gQmlucyAtLS0KLSMKLSMgVW4gYmluIMOoIHVuIGVsZW1lbnRvIGNvbnRlbml0b3JlLiDDiCBwb3NzaWJpbGUgYWdnaXVuZ2VyZSBlbGVtZW50aSBhZCB1bgotIyBiaW4sIGNvc8OsIGNvbWUgw6ggcG9zc2liaWxlIGFnZ2l1bmdlcmxvIGFkIHVuIGFsdHJvIGJpbi4KLSMKLSMgQ29uc2VudGUgZGkgY29tYmluYXJlIHVuIGdydXBwbyBkaSBlbGVtZW50aSBjb2xsZWdhdGkgaW4gdW4gZWxlbWVudG8KLSMgbG9naWNvLiBBIHF1ZXN0byBwdW50byBub24gc2VydmUgKyByYWdpb25hcmUgaW4gdGVybWluaSBkZWkgc2luZ29saQotIyBlbGVtZW50aSwgbWEgZGVsIGJpbi4KLSMKLSMgVW5hIHBpcGVsaW5lIMOoIHVuIGVsZW1lbnRvIGJpbiwgdW4gY29udGVuaXRvcmUgZ2VuZXJpY28gY2hlIGNvbnNlbnRlIGxhCi0jIHNjaGVkdWxhemlvbmUgZGVnbGkgZWxlbWVudGkgY29udGVudXRpLiBJbCAidG9wbGV2ZWwgYmluIiBkZXZlIGVzc2VyZQotIyB1bmEgcGlwZWxpbmUuCi0jCi0jIEFuY2hlIHVuIHRocmVhZCDDqCB1biBlbGVtZW50byBiaW4sIGNoZSBjb25zZW50ZSBsJ2VzZWN1emlvbmUgc2VwYXJhdGEuCi0jCi0jIC0tLSBCdWZmZXJzIC0tLQotIwotIyBDb250ZW5nb25vIGkgZGF0aSBjaGUgc2NvcnJvbm8gKGZsb3cpIGF0dHJhdmVyc28gdW5hIHBpcGVsaW5lLgotIyBUaXBpY2FtZW50ZSBnbGkgZWxlbWVudGkgc291cmNlIGNyZWFubyB1biBudW92byBidWZmZXIuCi0jCi0jIC0tLSBFbGVtZW50IHN0YXRlcyAtLS0KLSMKLSMgICAgICAgKiBOVUxMIC0gcHJlZGVmaW5pdG8sIGwnZWxlbWVudG8gw6ggY3JlYXRvIGUgbm9uIHN0YSBmYWNlbmRvCi0jICAgICAgICAgYWxjdW5jaMOpCi0jICAgICAgICogUkVBRFkgLSBwcm9udG8gYSBmYXJlIHF1YWxjb3NhCi0jICAgICAgICogUEFVU0VEIC0gaW4gcGF1c2EKLSMgICAgICAgKiBQTEFZSU5HIC0gc3RhIGZhY2VuZG8gcXVhbGNvc2EKLSMKLSMgU2kgcGFzc2EgZGEgTlVMTCBhIFBMQVlJTkcgYXR0cmF2ZXJzbyBpIGR1ZSBzdGF0aSBpbnRlcm1lZGkuCi0jCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTHVjYSBGZXJyZXR0aSA8ZWxsZS51Y2FAaW5maW5pdG8uaXQ+LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMzAuM1xuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTEwLTI1IDEwOjAzKzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEx1Y2EgRmVycmV0dGkgPGVsbGUudWNhQGluZmluaXRvLml0PlxuIgotIkxhbmd1YWdlLVRlYW06IEl0YWxpYW4gPHRwQGxpc3RzLmxpbnV4Lml0PlxuIgotIkxhbmd1YWdlOiBpdFxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPW4gIT0gMTtcbiIKLQotIyAtLWdzdC12ZXJzaW9uCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJTdGFtcGEgbGEgdmVyc2lvbmUgZGkgR1N0cmVhbWVyIgotCi0jIC0tZ3N0LWZhdGFsLXdhcm5pbmdzCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIlJlbmRlIHR1dHRpIGkgd2FybmluZyBjcml0aWNpIgotCi0jIC0tZ3N0LWRlYnVnLWhlbHAKLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiU3RhbXBhIGxlIGNhdGVnb3JpZSBkaSBkZWJ1ZyBkaXNwb25pYmlsaSBlZCBlc2NlIgotCi0jIC0tZ3N0LWRlYnVnLWxldmVsPUxJVkVMTE8KLSMsIGZ1enp5Ci1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iTGl2ZWxsbyBkaSBkZWJ1ZyBwcmVkZWZpbml0byBkYSAxIChzb2xvIGVycm9yaSkgYSA1ICh0dXR0byksIG9wcHVyZSAwIHBlciAiCi0ibmVzc3VuIG91dHB1dCIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJMSVZFTExPIgotCi0jIC0tZ3N0LWRlYnVnPUVMRU5DTwotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSJFbGVuY28gZGkgY29wcGllIFwibm9tZV9jYXRlZ29yaWE9bGl2ZWxsb1wiIHNlcGFyYXRlIGRhIHZpcmdvbGUgcGVyICIKLSJpbXBvc3RhcmUgaSBsaXZlbGxpIHNwZWNpZmljaSBwZXIgb2duaSBzaW5nb2xhIGNhdGVnb3JpYS4gRXNlbXBpbzogIgotIkdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkVMRU5DTyIKLQotIyAtLWdzdC1kZWJ1Zy1uby1jb2xvcgotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJEaXNhYmlsaXRhIG91dHB1dCBkaSBkZWJ1ZyBjb2xvcmF0byIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLSMgLS1nc3QtZGVidWctZGlzYWJsZQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJEaXNhYmlsaXRhIGRlYnVnIgotCi0jIC0tZ3N0LXBsdWdpbi1zcGV3Ci1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIkFiaWxpdGEgZGlhZ25vc3RpY2EgcHJvbGlzc2EgZGVsIGNhcmljYW1lbnRvIHBsdWdpbiIKLQotIyAtLWdzdC1wbHVnaW4tcGF0aD1QRVJDT1JTSQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIlBlcmNvcnNpIGNoZSBjb250ZW5nb25vIGkgcGx1Z2luIHNlcGFyYXRpIGRhIGR1ZSBwdW50aSAoOikiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiUEVSQ09SU0kiCi0KLSMgLS1nc3QtcGx1Z2luLWxvYWQ9UExVR0lOCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIkVsZW5jbyBzZXBhcmF0byBkYSB2aXJnb2xlIGRlaSBwbHVnaW4gZGEgcHJlLWNhcmljYXJlIGluIGFnZ2l1bnRhIGFsbCdlbGVuY28gIgotIm1lbW9yaXp6YXRvIG5lbGxhIHZhcmlhYmlsZSBkJ2FtYmllbnRlIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIlBMVUdJTiIKLQotIyAtLWdzdC1kaXNhYmxlLXNlZ3RyYXAKLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICJEaXNhYmlsaXRhIGlsIHRyYXBwaW5nIGRlaSBzZWdmYXVsdCBkdXJhbnRlIGlsIGNhcmljYW1lbnRvIGRlaSBwbHVnaW4iCi0KLSMgLS1nc3QtZGlzYWJsZS1yZWdpc3RyeS11cGRhdGUKLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiRGlzYWJpbGl0YSBsJ2FnZ2lvcm5hbWVudG8gZGVsIHJlZ2lzdHJvIgotCi0jIC0tZ3N0LWRpc2FibGUtcmVnaXN0cnktZm9yawotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLSJEaXNhYmlsaXRhIGxhIGdlbmVyYXppb25lIGRpIHVuIHByb2Nlc3NvIGhlbHBlciBkdXJhbnRlIGxhIHNjYW5zaW9uZSBkZWwgIgotInJlZ2lzdHJvIgotCi0jIGludGVzdGF6aW9uZSBjYXRlZ29yaWEgb3B6aW9uaSBwcmVjZW5kZW50aQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJPcHppb25pIGRpIEdTdHJlYW1lciIKLQotIyAtLWhlbHAtZ3N0Ci1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiTW9zdHJhIGxlIG9wemlvbmkgZGkgR1N0cmVhbWVyIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIk9wemlvbmUgc2Nvbm9zY2l1dGEiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoYSBpbmNvbnRyYXRvIHVuIGVycm9yZSBnZW5lcmljbyBkZWxsZSBsaWJyZXJpZSBkaSBiYXNlLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iR2xpIHN2aWx1cHBhdG9yaSBkaSBHU3RyZWFtZXIgc29ubyBzdGF0aSB0cm9wcG8gcGlncmkgcGVyIGFzc2VnbmFyZSB1biAiCi0iY29kaWNlIGQnZXJyb3JlIGEgcXVlc3RvIGVycm9yZS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBjb2RpY2Ugbm9uIGltcGxlbWVudGF0by4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLSJFcnJvcmUgZGkgR1N0cmVhbWVyOiBjYW1iaW8gZGkgc3RhdG8gbm9uIHJpdXNjaXRvLCBhbGN1bmkgZWxlbWVudGkgbm9uIHNvbm8gIgotInJpdXNjaXRpIGEgcHViYmxpY2FyZSB1biBhcHByb3ByaWF0byBtZXNzYWdnaW8gZGkgZXJyb3JlIGNvbiBpbCBtb3Rpdm8gZGVsICIKLSJmYWxsaW1lbnRvLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJFcnJvcmUgaW50ZXJubyBkaSBHU3RyZWFtZXI6IHByb2JsZW1hIGRpIHBhZC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBwcm9ibGVtYSBkaSB0aHJlYWQuIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkVycm9yZSBpbnRlcm5vIGRpIEdTdHJlYW1lcjogcHJvYmxlbWEgZGkgbmVnb3ppYXppb25lLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm9yZSBpbnRlcm5vIGRpIEdTdHJlYW1lcjogcHJvYmxlbWEgZGkgZXZlbnRvLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBwcm9ibGVtYSBkaSBwb3NpemlvbmFtZW50by4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm9yZSBpbnRlcm5vIGRpIEdTdHJlYW1lcjogcHJvYmxlbWEgZGkgY2Fwcy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJyb3JlIGludGVybm8gZGkgR1N0cmVhbWVyOiBwcm9ibGVtYSBkaSB0YWcuIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiTmVsbCdpbnN0YWxsYXppb25lIGRpIEdTdHJlYW1lciBpbiB1c28gbWFuY2EgdW4gcGx1Z2luLiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJFcnJvcmUgaW50ZXJubyBkaSBHU3RyZWFtZXI6IHByb2JsZW1hIGRpIGNsb2NrLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iUXVlc3RhIGFwcGxpY2F6aW9uZSBzdGEgdGVudGFuZG8gZGkgdXNhcmUgdW5hIGZ1bnppb25hbGl0w6AgZGkgR1N0cmVhbWVyIGNoZSAiCi0iw6ggc3RhdGEgZGlzYWJpbGl0YXRhLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGhhIGluY29udHJhdG8gdW4gZXJyb3JlIGdlbmVyaWNvIG5lbGxlIGxpYnJlcmllIGRpIHN1cHBvcnRvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGluaXppYWxpenphcmUgbGEgbGlicmVyaWEgZGkgc3VwcG9ydG8uIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGNoaXVkZXJlIGxhIGxpYnJlcmlhIGRpIHN1cHBvcnRvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY29uZmlndXJhcmUgbGEgbGlicmVyaWEgZGkgc3VwcG9ydG8uIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJFcnJvcmUgbmVsIGNvZGlmaWNhcmUuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoYSBpbmNvbnRyYXRvIHVuIGVycm9yZSBnZW5lcmljbyBkaSByaXNvcnNlLiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIlJpc29yc2Egbm9uIHRyb3ZhdGEuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiUmlzb3JzYSBvY2N1cGF0YSBvIG5vbiBkaXNwb25pYmlsZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGFwcmlyZSBsYSByaXNvcnNhIGluIGxldHR1cmEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgbGEgcmlzb3JzYSBpbiBzY3JpdHR1cmEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgbGEgcmlzb3JzYSBpbiBsZXR0dXJhIGUgc2NyaXR0dXJhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGNoaXVkZXJlIGxhIHJpc29yc2EuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGxlZ2dlcmUgZGFsbGEgcmlzb3JzYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBzY3JpdmVyZSBzdWxsYSByaXNvcnNhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBlZmZldHR1YXJlIHVuIHBvc2l6aW9uYW1lbnRvIHN1bGxhIHJpc29yc2EuIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgc2luY3Jvbml6emFyc2kgc3VsbGEgcmlzb3JzYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgb3R0ZW5lcmUvcmVnb2xhcmUgbGUgaW1wb3N0YXppb25pIGRlbGxhIHJpc29yc2EuIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJOaWVudGUgc3BhemlvIHN1bGxhIHJpc29yc2EuIgotCi0jLCBmdXp6eQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIk5pZW50ZSBzcGF6aW8gc3VsbGEgcmlzb3JzYS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoYSBpbmNvbnRyYXRvIHVuIGVycm9yZSBnZW5lcmljbyBkaSBzdHJlYW0uIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iTCdlbGVtZW50byBub24gaW1wbGVtZW50YSBsYSBnZXN0aW9uZSBkaSBxdWVzdG8gc3RyZWFtLiBTZSBwb3NzaWJpbGUgIgotInNlZ25hbGFyZSBpbCBidWcuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGlsIHRpcG8gZGkgc3RyZWFtLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIkxvIHN0cmVhbSDDqCBkaSB1biB0aXBvIGRpZmZlcmVudGUgZGEgcXVlbGxvIGdlc3RpdG8gZGEgcXVlc3RvIGVsZW1lbnRvLiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiTm9uIMOoIHByZXNlbnRlIGFsY3VuIGNvZGVjIGNoZSBwb3NzYSBnZXN0aXJlIHF1ZXN0byB0aXBvIGRpIHN0cmVhbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGRlY29kaWZpY2FyZSBsbyBzdHJlYW0uIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJJbXBvc3NpYmlsZSBmYXJlIGwnZW5jb2RpbmcgZGVsbG8gc3RyZWFtLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJJbXBvc3NpYmlsZSBkZS1tdWx0aXBsYXJlIGxvIHN0cmVhbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIkltcG9zc2liaWxlIG11bHRpcGxhcmUgbG8gc3RyZWFtLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIkxvIHN0cmVhbSDDqCBuZWwgZm9ybWF0byBlcnJhdG8uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlF1ZXN0byBzdHJlYW0gw6ggY2lmcmF0byBlIG5vbiDDqCBzdXBwb3J0YXRhIGxhIGRlY29kaWZpY2EuIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIlF1ZXN0byBzdHJlYW0gw6ggY2lmcmF0byBlIG5vbiBwdcOyIGVzc2VyZSBkZWNvZGlmaWNhdG8gcGVyY2jDqSBub24gw6ggc3RhdGEgIgotImZvcm5pdGEgYWxjdW5hIGNoaWF2ZSBhZGF0dGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIk5lc3N1biBtZXNzYWdnaW8gZCdlcnJvcmUgcGVyIGlsIGRvbWluaW8gJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIk5lc3N1biBtZXNzYWdnaW8gZCdlcnJvcmUgc3RhbmRhcmQgcGVyIGlsIGRvbWluaW8gJXMgZSBpbCBjb2RpY2UgJWQuIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICJJbCBjbG9jayBzZWxlemlvbmF0byBub24gcHXDsiBlc3NlcmUgdXNhdG8gbmVsbGEgcGlwZWxpbmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICJFcnJvcmUgbmVsbG8gc2NyaXZlcmUgbGEgY2FjaGUgZGkgcmVnaXN0cm8gc3UgJXM6ICVzIgotCi0jIHF1ZXN0byBlIGkgc3VjY2Vzc2l2aSBzb25vIG5vbWUgKyBkZXNjcml6aW9uZSBkZWxsZSBwcm9wcmlldMOgCi0jIGRlaSB0YWcgSUQzIChvIHNpbWlsaSk7IGxlIGRlc2NyaXppb25pIHBlciBvbW9nZW5laXTDoCBpbml6aWFubwotIyB0dXR0ZSBjb24gbGEgbGV0dGVyYSBtaW51c2NvbGEKLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAidGl0b2xvIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAiaWwgdGl0b2xvIHVzYXRvIGNvbXVuZW1lbnRlIgotCi1tc2dpZCAidGl0bGUgc29ydG5hbWUiCi1tc2dzdHIgIm5vbWUgb3JkaW5hbWVudG8gdGl0b2xvIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiaWwgdGl0b2xvIHVzYXRvIGNvbXVuZW1lbnRlIGEgc2NvcG8gZGkgb3JkaW5hbWVudG8iCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgImFydGlzdGEiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgImxhIG8gbGUgcGVyc29uZSByZXNwb25zYWJpbGkgZGVsbGEgcmVnaXN0cmF6aW9uZSIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tZSBvcmRpbmFtZW50byBhcnRpc3RhIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0ibGEgbyBsZSBwZXJzb25lIHJlc3BvbnNhYmlsaSBkZWxsYSByZWdpc3RyYXppb25lIGEgc2NvcG8gZGkgb3JkaW5hbWVudG8iCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAiYWxidW0iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAibCdhbGJ1bSBjaGUgY29udGllbmUgcXVlc3RpIGRhdGkiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tZSBvcmRpbmFtZW50byBhbGJ1bSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJsJ2FsYnVtIGNoZSBjb250aWVuZSBxdWVzdGkgZGF0aSBhIHNjb3BvIGRpIG9yZGluYW1lbnRvIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhcnRpc3RhIGFsYnVtIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJsJ2FydGlzdGEgZGVsbCdpbnRlcm8gYWxidW0sIGNvc8OsIGNvbWUgZG92cmViYmUgZXNzZXJlIG1vc3RyYXRvIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJub21lIG9yZGluYW1lbnRvIGFydGlzdGEgYWxidW0iCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgImwnYXJ0aXN0YSBkZWxsJ2ludGVybyBhbGJ1bSwgY29zw6wgY29tZSBkb3ZyZWJiZSBlc3NlcmUgb3JkaW5hdG8iCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICJkYXRhIgotCi1tc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJsYSBkYXRhIGluIGN1aSBpIGRhdGkgc29ubyBzdGF0aSBjcmVhdGkgKGNvbWUgc3RydXR0dXJhIEdEYXRlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXRhL29yYSIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiIgotImxhIGRhdGEgZSBsJ29yYSBpbiBjdWkgaSBkYXRpIHNvbm8gc3RhdGkgY3JlYXRpIChjb21lIHN0cnV0dHVyYSBHc3REYXRlVGltZSkiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAiZ2VuZXJlIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImlsIGdlbmVyZSBhIGN1aSBhcHBhcnRlbmdvbm8gcXVlc3RpIGRhdGkiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJjb21tZW50byIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICJkZWwgdGVzdG8gbGliZXJvIGEgY29tbWVudG8gZGVpIGRhdGkiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICJjb21tZW50byBlc3Rlc28iCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJkZWwgdGVzdG8gbGliZXJvIGEgY29tbWVudG8gZGVpIGRhdGkgbmVsbGEgZm9ybWEgY2hpYXZlPXZhbG9yZSBvICIKLSJjaGlhdmVbaXRdPWNvbW1lbnRvIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICJudW1lcm8gZGkgdHJhY2NpYSIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJpbCBudW1lcm8gZGVsbGEgdHJhY2NpYSBhbGwnaW50ZXJubyBkaSB1bmEgY29sbGV6aW9uZSIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJ0b3RhbGUgdHJhY2NlIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotImlsIHRvdGFsZSBkZWxsZSB0cmFjY2UgYWxsJ2ludGVybm8gZGVsbGEgY29sbGV6aW9uZSBhIGN1aSBxdWVzdGEgdHJhY2NpYSAiCi0iYXBwYXJ0aWVuZSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICJudW1lcm8gZGVsIGRpc2NvIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiaWwgbnVtZXJvIGRlbCBkaXNjbyBhbGwnaW50ZXJubyBkaSB1bmEgY29sbGV6aW9uZSIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgInRvdGFsZSBkaXNjaGkiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotImlsIHRvdGFsZSBkZWkgZGlzY2hpIGFsbCdpbnRlcm5vIGRlbGxhIGNvbGxlemlvbmUgYSBjdWkgcXVlc3RvIGRpc2NvICIKLSJhcHBhcnRpZW5lIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgInBvc2l6aW9uZSIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0ibCdvcmlnaW5lIGRlbCBjb250ZW51dG8gbXVsdGltZWRpYWxlIGNvbWUgVVJJIChwb3NpemlvbmUgaW4gY3VpIGlsIGZpbGUgbyAiCi0ic3RyZWFtIG9yaWdpbmFsZSDDqCBvc3BpdGF0bykiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAic2l0byB3ZWIiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICIiCi0ic2l0byB3ZWIgcGVyIHF1ZXN0byBjb250ZW51dG8gbXVsdGltZWRpYWxlIChjaW/DqCBpbCBzaXRvIHdlYiBkZWxsJ2FydGlzdGEgbyAiCi0iZGVsIGZpbG0pIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgImRlc2NyaXppb25lIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJ1biBicmV2ZSB0ZXN0byBjaGUgZGVzY3JpdmUgaWwgY29udGVudXRvIGRlaSBkYXRpIgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAidmVyc2lvbmUiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAibGEgdmVyc2lvbmUgZGkgcXVlc3RpIGRhdGkiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0iSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIGNvbnN1bHRhcmUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJvcmdhbml6emF6aW9uZSIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAibCdhdnZpc28gc3VsIGNvcHlyaWdodCBkZWkgZGF0aSIKLQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgInVyaSBjb3B5cmlnaHQiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgImwnVVJJIGFsbCdhdnZpc28gc3VsIGNvcHlyaWdodCBkZWkgZGF0aSIKLQotIywgZnV6enkKLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJlbmNvZGVyIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAiY29udGF0dG8iCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJsZSBpbmZvcm1hemlvbmkgc3VsIGNvbnRhdHRvIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAibGljZW56YSIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAibGEgbGljZW56YSBkZWkgZGF0aSIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJ1cmkgbGljZW56YSIKLQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAibCdVUkkgYWxsYSBsaWNlbnphIGRlaSBkYXRpIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJpbnRlcnByZXRlIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgImxhIG8gbGUgcGVyc29uZSBjaGUgaGFubm8gaW50ZXJwcmV0YXRvIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgImNvbXBvc2l0b3JlIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJsYSBvIGxlIHBlcnNvbmUgY2hlIGhhbm5vIGNvbXBvc3RvIGRlbGxhIHJlZ2lzdHJhemlvbmUiCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgImR1cmF0YSIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJsYSBsdW5naGV6emEgaW4gdW5pdMOgIGRpIHRlbXBvIGRpIEdTdHJlYW1lciAobmFub3NlY29uZGkpIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgImNvZGVjIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJpbCBjb2RlYyBjb24gY3VpIGRpIGRhdGkgc29ubyBtZW1vcml6emF0aSIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJjb2RlYyB2aWRlbyIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiaWwgY29kZWMgY29uIGN1aSBpIGRhdGkgdmlkZW8gc29ubyBtZW1vcml6emF0aSIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJjb2RlYyBhdWRpbyIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiaWwgY29kZWMgY29uIGN1aSBpIGRhdGkgYXVkaW8gc29ubyBtZW1vcml6emF0aSIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJjb2RlYyBzb3R0b3RpdG9saSIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiaWwgY29kZWMgY29uIGN1aSBpIGRhdGkgZGVpIHNvdHRvdGl0b2xpIHNvbm8gbWVtb3JpenphdGkiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJmb3JtYXRvIGNvbnRlbml0b3JlIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImlsIGZvcm1hdG8gY29udGVuaXRvcmUgY29uIGN1aSBpIGRhdGkgc29ubyBtZW1vcml6emF0aSIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgImJpdHJhdGUiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJpbCBiaXRyYXRlIGVzYXR0byBvIG1lZGlvIGluIGJpdC9zIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJiaXRyYXRlIG5vbWluYWxlIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiaWwgYml0cmF0ZSBub21pbmFsZSBpbiBiaXQvcyIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAiYml0cmF0ZSBtaW5pbW8iCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJpbCBiaXRyYXRlIG1pbmltbyBpbiBiaXQvcyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAiYml0cmF0ZSBtYXNzaW1vIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiaWwgYml0cmF0ZSBtYXNzaW1vIGluIGJpdC9zIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAiZW5jb2RlciIKLQotbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgImwnZW5jb2RlciB1c2F0byBwZXIgY29kaWZpY2FyZSBxdWVzdG8gc3RyZWFtIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzaW9uZSBlbmNvZGVyIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAibGEgdmVyc2lvbmUgZGVsbCdlbmNvZGVyIHVzYXRvIHBlciBjb2RpZmljYXJlIHF1ZXN0byBzdHJlYW0iCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgInNlcmlhbGUiCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICJpbCBudW1lcm8gc2VyaWFsZSBkZWxsYSB0cmFjY2lhIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICJndWFkYWdubyB0cmFjY2lhIHJlcGxheWdhaW4iCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJpbCBndWFkYWdubyBkZWxsYSB0cmFjY2lhIGluIGRCIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJwaWNjbyB0cmFjY2lhIHJlcGxheWdhaW4iCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAiaWwgcGljY28gZGVsbGEgdHJhY2NpYSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAiZ3VhZGFnbm8gYWxidW0gcmVwbGF5Z2FpbiIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgImlsIGd1YWRhZ25vIGRlbGwnYWxidW0gaW4gZEIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgInBpY2NvIGFsYnVtIHJlcGxheWdhaW4iCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAiaWwgcGljY28gZGVsbCdhbGJ1bSIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICJsaXZlbGxvIHJpZmVyaW1lbnRvIHJlcGxheWdhaW4iCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICIiCi0iaWwgbGl2ZWxsbyBkaSByaWZlcmltZW50byBkZWkgdmFsb3JpIGRpIGd1YWRhZ25vIGRlbGxhIHRyYWNjaWEgZSBkZWxsJ2FsYnVtIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAiY29kaWNlIGxpbmd1YSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICJpbCBjb2RpY2UgZGVsbGEgbGluZ3VhIHBlciBxdWVzdG8gc3RyZWFtLCBjb25mb3JtZSBhIElTTy02MzktMSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJjb2RpY2UgbGluZ3VhIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJpbW1hZ2luZSIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImwnaW1tYWdpbmUgcmVsYXppb25hdGEgYSBxdWVzdG8gc3RyZWFtIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJpbW1hZ2luZSBhbnRlcHJpbWEiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImwnaW1tYWdpbmUgZGkgYW50ZXByaW1hIHJlbGF6aW9uYXRhIGEgcXVlc3RvIHN0cmVhbSIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgImFsbGVnYXRvIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiaWwgZmlsZSBhbGxlZ2F0byBhIHF1ZXN0byBzdHJlYW0iCi0KLSMgY2ZyIGh0dHA6Ly9pdC53aWtpcGVkaWEub3JnL3dpa2kvQmF0dGl0aV9wZXJfbWludXRvCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAiYmF0dGl0aSBwZXIgbWludXRvIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgImlsIG51bWVybyBkaSBiYXR0aXRpIGFsIG1pbnV0byBuZWxsJ2F1ZGlvIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgInBhcm9sZSBjaGlhdmUiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAibGUgcGFyb2xlIGNoaWF2ZSBzZXBhcmF0ZSBkYSB2aXJnb2xlIGNoZSBkZXNjcml2b25vIGlsIGNvbnRlc3RvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgIm5vbWUgbG9jYWxpdMOgIGdlb2cuIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLSJsYSBkZXNjcml6aW9uZSBjb21wcmVuc2liaWxlIGRlbGxhIGxvY2FsaXTDoCBpbiBjdWkgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSAiCi0iw6ggc3RhdG8gcmVnaXN0cmF0byBvIHByb2RvdHRvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICJsYXRpdHVkaW5lIGxvY2FsaXTDoCBnZW9nLiIKLQotIyBodHRwOi8vaXQud2lraXBlZGlhLm9yZy93aWtpL1dHUzg0Ci0jIFdvcmxkIEdlb2RldGljIFN5c3RlbSAxOTg0Ci1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0ibGEgbGF0aXR1ZGluZSBnZW9ncmFmaWNhIGRlbGxhIGxvY2FsaXTDoCBpbiBjdWkgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSDDqCAiCi0ic3RhdG8gcmVnaXN0cmF0byBvIHByb2RvdHRvLCBlc3ByZXNzbyBpbiBncmFkaSBzZWNvbmRvIGxvIHN0YW5kYXJkIFdHUzg0ICIKLSIoemVybyBhbGwnZXF1YXRvcmUsIHZhbG9yaSBuZWdhdGl2aSBwZXIgbGUgbGF0aXR1ZGluaSBhIHN1ZCkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICJsb25naXR1ZGluZSBsb2NhbGl0w6AgZ2VvZy4iCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0ibGEgbG9uZ2l0dWRpbmUgZ2VvZ3JhZmljYSBkZWxsYSBsb2NhbGl0w6AgaW4gY3VpIGlsIGNvbnRlbnV0byBtdWx0aW1lZGlhbGUgw6ggIgotInN0YXRvIHJlZ2lzdHJhdG8gbyBwcm9kb3R0bywgaW4gZ3JhZGkgc2Vjb25kbyBsbyBzdGFuZGFyZCBXR1M4NCAoemVybyBhbCAiCi0icHJpbW8gbWVyaWRpYW5vIHN1IEdyZWVud2ljaC9VSywgdmFsb3JpIG5lZ2F0aXZpIHBlciBsZSBsb25naXR1ZGluaSBhIG92ZXN0KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgImVsZXZhemlvbmUgbG9jYWxpdMOgIGdlb2cuIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotImwnZWxldmF6aW9uZSBnZW9ncmFmaWNhIGRlbGxhIGxvY2FsaXTDoCBpbiBjdWkgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSDDqCAiCi0ic3RhdG8gcmVnaXN0cmF0byBvIHByb2RvdHRvLCBpbiBtZXRyaSBzZWNvbmRvIGxvIHN0YW5kYXJkIFdHUzg0ICh6ZXJvIMOoIGlsICIKLSJsaXZlbGxvIG1lZGlvIGRlbCBtYXJlKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICJuYXppb25lIGxvY2FsaXTDoCBnZW9nLiIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0ibmF6aW9uZSAobm9tZSBpbmdsZXNlKSBpbiBjdWkgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSDDqCBzdGF0byByZWdpc3RyYXRvIG8gIgotInByb2RvdHRvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgImNpdHTDoCBsb2NhbGl0w6AgZ2VvZy4iCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiIgotImNpdHTDoCAobm9tZSBpbmdsZXNlKSBpbiBjdWkgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSDDqCBzdGF0byByZWdpc3RyYXRvIG8gIgotInByb2RvdHRvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJzdWItbG9jYWxpdMOgIGxvY2FsaXTDoCBnZW9nLiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotInVuYSBsb2NhbGl0w6AgYWxsJ2ludGVybm8gZGkgdW5hIGNpdHTDoCBpbiBjdWkgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSDDqCAiCi0ic3RhdG8gcmVnaXN0cmF0byBvIHByb2RvdHRvIChwLmUuIGlsIHF1YXJ0aWVyZSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAiZXJyb3JlIG9yaXp6b250YWxlIGxvY2FsaXTDoCBnZW9nLiIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICJlcnJvcmUgYXR0ZXNvIGRlbGxlIG1pc3VyZSBkaSBwb3NpemlvbmFtZW50byBvcml6em9udGFsZSAoaW4gbWV0cmkpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJ2ZWxvY2l0w6AgbW92aW1lbnRvIGxvY2FsaXTDoCBnZW9nLiIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAiIgotImxhIHZlbG9jaXTDoCBkaSBtb3ZpbWVudG8gZGVsIGRpc3Bvc2l0aXZvIGRpIGFjcXVpc2l6aW9uZSBkdXJhbnRlICIKLSJsJ2FjcXVpc2l6aW9uZSBzdGVzc2EgaW4gbS9zIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiZGlyZXppb25lIG1vdmltZW50byBsb2NhbGl0w6AgZ2VvZy4iCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJpbmRpY2EgbGEgZGlyZXppb25lIGRpIG1vdmltZW50byBkZWwgZGlzcG9zaXRpdm8gbmVsbCdlc2VndWlyZSAiCi0ibCdhY3F1aXNpemlvbmUgZGkgdW4gY29udGVudXRvIG11bHRpbWVkaWFsZTsgw6ggcmFwcHJlc2VudGF0byBjb21lIGdyYWRpIGluICIKLSJub3RhemlvbmUgZmxvYXRpbmcgcG9pbnQsIGNvbiAwIGNoZSBpbmRpY2EgaWwgbm9yZCBnZW9ncmFmaWNvIGUgaW5jcmVtZW50aSAiCi0iaW4gc2VudG8gb3JhcmlvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlemlvbmUgZGkgYWNxdWlzaXppb25lIGxvY2FsaXTDoCBnZW9nLiIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotImluZGljYSBsYSBkaXJlemlvbmUgZGVsIGRpc3Bvc2l0aXZvIG5lbGwnZXNlZ3VpcmUgbCdhY3F1aXNpemlvbmUgZGkgdW4gIgotImNvbnRlbnV0byBtdWx0aW1lZGlhbGU7IMOoIHJhcHByZXNlbnRhdG8gY29tZSBncmFkaSBpbiBub3RhemlvbmUgZmxvYXRpbmcgIgotInBvaW50LCBjb24gMCBjaGUgaW5kaWNhIGlsIG5vcmQgZ2VvZ3JhZmljbyBlIGluY3JlbWVudGkgaW4gc2VudG8gb3JhcmlvIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIm5vbWUgZGVsbG8gc2hvdyIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIiIKLSJpbCBub21lIGRlbGxvIHNob3cgdHYvcG9kY2FzdC9zZXJpZSBkYSBjdWkgcHJvdmllbmUgaWwgY29udGVudXRvIG11bHRpbWVkaWFsZSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tZSBvcmRpbmFtZW50byBkZWxsbyBzaG93IgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0iaWwgbm9tZSBkZWxsbyBzaG93IHR2L3BvZGNhc3Qvc2VyaWUgZGEgY3VpIHByb3ZpZW5lIGlsIGNvbnRlbnV0byAiCi0ibXVsdGltZWRpYWxlLCBhIHNjb3BvIGRpIG9yZGluYW1lbnRvIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgIm51bWVybyBkaSBlcGlzb2RpbyIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICIiCi0iaWwgbnVtZXJvIGRpIGVwaXNvZGlvIG5lbGxhIHN0YWdpb25lIGRpIGN1aSBmYSBwYXJ0ZSBpbCBjb250ZW51dG8gIgotIm11bHRpbWVkaWFsZSIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgIm51bWVybyBkaSBzdGFnaW9uZSIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICIiCi0iaWwgbnVtZXJvIGRpIHN0YWdpb25lIGRlbGxvIHNob3cgZGkgY3VpIGZhIHBhcnRlIGlsIGNvbnRlbnV0byBtdWx0aW1lZGlhbGUiCi0KLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgInRlc3RvIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICJpbCB0ZXN0byBkZWwgY29udGVudXRvIG11bHRpbWVkaWFsZSwgdGlwaWNhbWVudGUgdXNhdG8gcGVyIGxlIGNhbnpvbmkiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAibm9tZSBvcmRpbmFtZW50byBjb21wb3NpdG9yZSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJsYSBvIGxlIHBlcnNvbmUgY2hlIGhhbm5vIGNvbXBvc3RvIGxhIHJlZ2lzdHJhemlvbmUsIGEgc2NvcG8gZGkgb3JkaW5hbWVudG8iCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAicmFnZ3J1cHBhbWVudG8iCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLSJyYWdncnVwcGEgZWxlbWVudGkgbXVsdGltZWRpYWxpIGNvcnJlbGF0aSBjaGUgc2kgZGl2aWRvbm8gc3UgZGl2ZXJzZSB0cmFjY2UsICIKLSJjb21lIGxlIGRpdmVyc2UgcGFydGkgZGkgdW4gY29uY2VydG87IMOoIHVuIGxpdmVsbG8gc3VwZXJpb3JlIHJpc3BldHRvIGFsbGEgIgotInRyYWNjaWEsIG1hIGluZmVyaW9yZSByaXNwZXR0byBhbGwnYWxidW0iCi0KLW1zZ2lkICJ1c2VyIHJhdGluZyIKLW1zZ3N0ciAiZ2l1ZGl6aW8gdXRlbnRlIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJnaXVkaXppbyBhdHRyaWJ1aXRvIGRhIHVuIHV0ZW50ZTsgbWFnZ2lvcmUgw6ggaWwgbGl2ZWxsbywgcGnDuSBhbGwndXRlbnRlICIKLSJwaWFjZSBxdWVzdG8gY29udGVudXRvIG11bHRpbWVkaWFsZSIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgInByb2R1dHRvcmUgZGlzcG9zaXRpdm8iCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0iaWwgcHJvZHV0dG9yZSBkZWwgZGlzcG9zaXRpdm8gdXNhdG8gcGVyIGNyZWFyZSBxdWVzdG8gY29udGVudXRvIG11bHRpbWVkaWFsZSIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAibW9kZWxsbyBkaXNwb3NpdGl2byIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotImlsIG1vZGVsbG8gZGVsIGRpc3Bvc2l0aXZvIHVzYXRvIHBlciBjcmVhcmUgcXVlc3RvIGNvbnRlbnV0byBtdWx0aW1lZGlhbGUiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJub21lIGFwcGxpY2F6aW9uZSIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAibCdhcHBsaWNhemlvbmUgdXNhdGEgcGVyIGNyZWFyZSBpbCBjb250ZW51dG8gbXVsdGltZWRpYWxlIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiZGF0aSBhcHBsaWNhemlvbmUiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICIiCi0iaSBkYXRpIGFyYml0cmFyaSBkZWxsJ2FwcGxpY2F6aW9uZSBkYSBzZXJpYWxpenphcmUgYWxsJ2ludGVybm8gZGVsIGNvbnRlbnV0byAiCi0ibXVsdGltZWRpYWxlIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIm9yaWVudGFtZW50byBpbW1hZ2luZSIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiY29tZSBydW90YXJlIG8gY2Fwb3ZvbGdlcmUgbCdpbW1hZ2luZSBwcmltYSBkaSBtb3N0cmFybGEiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkVSUk9SRTogZGFsbCdlbGVtZW50byAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJbmZvcm1hemlvbmkgZGkgZGVidWcgYWdnaXVudGl2ZTpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJuZXNzdW5hIHByb3ByaWV0w6Agwqslc8K7IG5lbGwnZWxlbWVudG8gwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAiaW1wb3NzaWJpbGUgaW1wb3N0YXJlIGxhIHByb3ByaWV0w6Agwqslc8K7IG5lbGwnZWxlbWVudG8gwqslc8K7IGEgwqslc8K7IgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAiaW1wb3NzaWJpbGUgY29sbGVnYXJlICVzIGEgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIm5lc3N1biBlbGVtZW50byDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaSBjYXBzIMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgImVsZW1lbnRvIHNpbmsgbWFuY2FudGUgcGVyIGwnVVJJIMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiZWxlbWVudG8gc29yZ2VudGUgbWFuY2FudGUgcGVyIGwnVVJJIMKrJXPCuyIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAic3BlY2lmaWNhdG8gaWwgYmluIHZ1b3RvIMKrJXPCuywgbm9uIGNvbnNlbnRpdG8iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAibmVzc3VuIGJpbiDCqyVzwrssIG9tZXNzbyIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJwaXBlbGluZSB2dW90YSBub24gY29uc2VudGl0byIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJTdGFubm8gcGVyIGVzc2VyZSBzY2FydGF0aSBtb2x0aSBidWZmZXIuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgotbXNnc3RyICJQcm9ibGVtYSBpbnRlcm5vIG5lbCBmbHVzc28gZGkgZGF0aS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJFcnJvcmUgaW50ZXJubyBuZWwgZmx1c3NvIGRpIGRhdGkuIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICJFcnJvcmUgaW50ZXJubyBkaSBjbG9jay4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJDYXBzIGRpIGZpbHRybyIKLQotIyAqIHN1bCBwZXJjaMOpIGxhc2NpYXRvIGNhcGFiaWxpdGllcywgdmVkaSBpbnRybwotIyAqIHBvc3NpYmxlIGFsbG93ZWQgLS0+IGFtbWVzc2UgKGUgYmFzdGEpCi0jICogQU5ZIHRyYWRvdHRvLCAgbWEgbm9uIHNvIHNlIMOoIHBhcm9sYSBjaGlhdmUsIGRvdnJlaSBjb250cm9sbGFyZS4KLSMKLSMgICAtLUx1Y2EKLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIlBvbmUgbGltaXRhemlvbmkgc3VsbGUgY2FwYWJpbGl0aWVzIGFtbWVzc2UgKE5VTEwgc2lnbmlmaWNhIFFVQUxTSUFTSSkuICIKLSJJbXBvc3RhbmRvIHF1ZXN0YSBwcm9wcmlldMOgIHNpIHByZW5kZSB1biByaWZlcmltZW50byBhbGwnb2dnZXR0byBHc3RDYXBzICIKLSJmb3JuaXRvLiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIk5lc3N1bmEgZGlyZWN0b3J5IHRlbXBvcmFuZWEgc3BlY2lmaWNhdGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGNyZWFyZSBpbCBmaWxlIHRlbXBvcmFuZW8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkltcG9zc2liaWxlIGFwcmlyZSBpbCBmaWxlIMKrJXPCuyBpbiBsZXR0dXJhLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIHNjcml0dGEgc3VsIGZpbGUgZGkgc2NhcmljYW1lbnRvLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJOZXNzdW4gbm9tZSBkaSBmaWxlIHNwZWNpZmljYXRvIHBlciBsYSBzY3JpdHR1cmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgwqslc8K7IGluIHNjcml0dHVyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkVycm9yZSBuZWwgY2hpdWRlcmUgaWwgZmlsZSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBpbCBwb3NpemlvbmFtZW50byBzdWwgZmlsZSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBzY3JpdHR1cmEgc3VsIGZpbGUgwqslc8K7LiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOZXNzdW4gbm9tZSBkaSBmaWxlIHNwZWNpZmljYXRvIHBlciBsYSBsZXR0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgb3R0ZW5lcmUgaW5mb3JtYXppb25pIHN1IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiwqslc8K7IMOoIHVuYSBkaXJlY3RvcnkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiSWwgZmlsZSDCqyVzwrsgw6ggdW4gc29ja2V0LiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIkZhbGxpdG8gZG9wbyBsZSBpdGVyYXppb25pIGNvbWUgcmljaGllc3RvLiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgImNhcHMiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJyaWxldmF0ZSBjYXBhYmlsaXRlcyBuZWxsbyBzdHJlYW0iCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtaW5pbW8iCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICJmb3J6YSBpIGNhcHMiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAiZm9yemEgaSBjYXBzIHNlbnphIGVzZWd1aXJlIHVuIHR5cGVmaW5kIgotCi0jLCBmdXp6eQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJMbyBzdHJlYW0gbm9uIGNvbnRpZW5lIGRhdGkuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJMbyBzdHJlYW0gbm9uIGNvbnRpZW5lIGRhdGkuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiSW50ZXJmYWNjZSBpbXBsZW1lbnRhdGU6XG4iCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAibGVnZ2liaWxlIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgInNjcml2aWJpbGUiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgImNvbnRyb2xsYWJpbGUiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAicHXDsiBwYXNzYXJlIGFsbG8gc3RhdG8gIE5VTEwsIFJFQURZLCBQQVVTRUQgbyBQTEFZSU5HIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAicHXDsiBwYXNzYXJlIHNvbG8gYWxsbyBzdGF0byAgTlVMTCwgUkVBRFkgbyBQQVVTRUQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAicHXDsiBwYXNzYXJlIHNvbG8gYWxsbyBzdGF0byAgTlVMTCBvIFJFQURZIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICJGaWxlIG5lbGxhIGJsYWNrbGlzdDoiCi0KLSMgRXNlbXBpbzoKLSMgICAgVG90YWwgY291bnQ6IDIzIHBsdWdpbnMsIDM0IGZlYXR1cmUKLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJJbiB0b3RhbGU6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgZmlsZSBuZWxsYSBibGFja2xpc3QiCi1tc2dzdHJbMV0gIiVkIGZpbGUgbmVsbGEgYmxhY2tsaXN0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgcGx1Z2luIgotbXNnc3RyWzFdICIlZCBwbHVnaW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQgdm9jZSBuZWxsYSBibGFja2xpc3QiCi1tc2dzdHJbMV0gIiVkIHZvY2kgbmVsbGEgYmxhY2tsaXN0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCBmdW56aW9uYWxpdMOgIgotbXNnc3RyWzFdICIlZCBmdW56aW9uYWxpdMOgIgotCi0jIC1hLCAtLXByaW50LWFsbAotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiU3RhbXBhIHR1dHRpIGdsaSBlbGVtZW50aSIKLQotIyAtYiwgLS1wcmludC1ibGFja2xpc3QKLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJTdGFtcGEgbCdlbGVuY28gZGVpIGZpbGUgbmVsbGEgYmxhY2tsaXN0IgotCi0jIC0tcHJpbnQtcGx1Z2luLWF1dG8taW5zdGFsbC1pbmZvCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJTdGFtcGEgdW4gZWxlbmNvIG1hY2hpbmUtcGFyc2FibGUgZGkgZnVuemlvbmFsaXTDoCBmb3JuaXRlIGRhbCBwbHVnaW4gIgotInNwZWNpZmljYXRvIG8gZGEgdHV0dGkgaSBwbHVnaW4uXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGUgbmVsbGUgY29ubmVzc2lvbmkgY29uICIKLSJtZWNjYW5pc21pIGVzdGVybmkgZGkgaW5zdGFsbGF6aW9uZSBhdXRvbWF0aWNhIGRlaSBwbHVnaW4uIgotCi0jIEVzZW1waW86Ci0jICQgZ3N0LWluc3BlY3QtMC4xMCAtLXBsdWdpbgotIyB2aWRlbzRsaW51eDogIHY0bHNyYzogVmlkZW8gKHZpZGVvNGxpbnV4L3JhdykgU291cmNlCi0jIHF1ZXVlMjogIHF1ZXVlMjogUXVldWUKLSMgZ2lvOiAgZ2lvc3RyZWFtc3JjOiBHSU8gc3RyZWFtIHNvdXJjZQotIyBnaW86ICBnaW9zdHJlYW1zaW5rOiBHSU8gc3RyZWFtIHNpbmsKLSMgZ2lvOiAgZ2lvc3JjOiBHSU8gc291cmNlCi0jIGdpbzogIGdpb3Npbms6IEdJTyBzaW5rCi0jIHZvbHVtZTogIHZvbHVtZTogVm9sdW1lCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICJFbGVuY2EgaWwgY29udGVudXRvIGRlaSBwbHVnaW4iCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotCi0jIC11LCAtLXVyaS1oYW5kbGVycwotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiU3RhbXBhIGdsaSBzY2hlbWkgVVJJIHN1cHBvcnRhdGksIGNvbiBnbGkgZWxlbWVudGkgY2hlIGxpIGltcGxlbWVudGFubyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgY2FyaWNhcmUgaWwgZmlsZSBkaSBwbHVnaW46ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIkVsZW1lbnRvIG8gcGx1Z2luIMKrJXPCuyBpbmVzaXN0ZW50ZVxuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiT3R0ZW51dG8gbWVzc2FnZ2lvICMldSBkYWxsJ2VsZW1lbnRvIFwiJXNcIiAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIk90dGVudXRvIG1lc3NhZ2dpbyAjJXUgZGFsIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJPdHRlbnV0byBtZXNzYWdnaW8gIyV1IGRhbGwnb2dnZXR0byBcIiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIk90dGVudXRvIG1lc3NhZ2dpbyAjJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiT3R0ZW51dG8gRU9TIGRhbGwnZWxlbWVudG8gwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIlRBRyBUUk9WQVRPICAgIDogdHJvdmF0byBkYWxsJ2VsZW1lbnRvIFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIlRBRyBUUk9WQVRPICAgIDogdHJvdmF0byBkYWwgcGFkIFwiJXM6JXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIlRBRyBUUk9WQVRPICAgIDogdHJvdmF0byBkYWxsJ29nZ2V0dG8gXCIlc1wiLlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIlRBRyBUUk9WQVRPXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIlRBRyBUUk9WQVRPICAgIDogdHJvdmF0byBkYWxsJ2VsZW1lbnRvIFwiJXNcIi5cbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJUQUcgVFJPVkFUTyAgICA6IHRyb3ZhdG8gZGFsbCdvZ2dldHRvIFwiJXNcIi5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiVEFHIFRST1ZBVE9cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iSU5GT1JNQVpJT05FOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJBVFRFTlpJT05FOiBkYWxsJ2VsZW1lbnRvICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZXJvbGwgZXNlZ3VpdG8sIGluIGF0dGVzYSBkZWwgcmllbXBpbWVudG8gYnVmZmVyIHBlciBjb21wbGV0YXJlLi4uXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiUHJlcm9sbCBlc2VndWl0bywgaW4gYXR0ZXNhIGRlbCByaWVtcGltZW50byBidWZmZXIgcGVyIGNvbXBsZXRhcmUuLi5cbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAicmllbXBpbWVudG8gYnVmZmVyLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotIlJpZW1waW1lbnRvIGJ1ZmZlciBjb21wbGV0YXRvLCBpbXBvc3RhemlvbmUgZGVsbGEgcGlwZWxpbmUgYSBQTEFZSU5HIC4uLlxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiUmllbXBpbWVudG8gYnVmZmVyLCBpbXBvc3RhemlvbmUgZGVsbGEgcGlwZWxpbmUgYSBQQVVTRUQgLi4uXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICJSaWRpc3RyaWJ1emlvbmUgbGF0ZW56YS4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsbyBzdGF0byBhICVzIGNvbWUgcmljaGllc3RvIGRhICVzLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJJbnRlcnJvdHRvOiBhcnJlc3RvIGRlbGxhIHBpcGVsaW5lIC4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICJuZXNzdW4gZWxlbWVudG8gwqslc8K7IgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiQVRURU5aSU9ORTogZGFsbCdlbGVtZW50byAlczogJXNcbiIKLQotIyAtdCwgLS10YWdzCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICJTdGFtcGEgaSB0YWcgKGFuY2hlIG5vdGkgY29tZSBtZXRhZGF0aSkiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICIiCi0KLSMgLXYsIC0tdmVyYm9zZQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIlN0YW1wYSBpbmZvcm1hemlvbmkgZGkgc3RhdG8gZSBub3RpZmljaGUgZGVsbGUgcHJvcHJpZXTDoCIKLQotIyAtcSwgLS1xdWlldAotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIk5vbiBzdGFtcGEgYWxjdW5hIGluZm9ybWF6aW9uZSBkaSBhdmFuemFtZW50byIKLQotIyAtbSwgLS1tZXNzYWdlcwotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiU3RhbXBhIGkgbWVzc2FnZ2kiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi0jIC1mLCAtLW5vLWZhdWx0Ci1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJOb24gaW5zdGFsbGEgdW4gZ2VzdG9yZSBkaSBmYXVsdCIKLQotIyAtZSwgLS1lb3Mtb24tc2h1dGRvd24KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIkZvcnphIEVPUyBzdWxsZSBzb3JnZW50aSBwcmltYSBkaSBhcnJlc3RhcmUgbGEgcGlwZWxpbmUiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRVJST1JFOiBpbXBvc3NpYmlsZSBjb3N0cnVpcmUgbGEgcGlwZWxpbmU6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiRVJST1JFOiBpbXBvc3NpYmlsZSBjb3N0cnVpcmUgbGEgcGlwZWxpbmUuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJBVFRFTlpJT05FOiBwaXBlbGluZSBlcnJhdGE6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJFUlJPUkU6IGwnZWxlbWVudG8gwqtwaXBlbGluZcK7IG5vbiDDqCBzdGF0byB0cm92YXRvLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsYSBwaXBlbGluZSBhIFBBVVNFRCAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkVSUk9SRTogbGEgcGlwZWxpbmUgbm9uIHZ1b2xlIG1ldHRlcnNpIGluIHBhdXNhLlxuIgotCi0jIFNpbmtzIGFyZSBzcGVjaWFsIGVsZW1lbnRzIGluIEdTdHJlYW1lci4gVGhpcyBpcyBiZWNhdXNlIHNpbmsgZWxlbWVudHMgaGF2ZSB0byB0YWtlIGNhcmUgb2YgcHJlcm9sbCwgd2hpY2ggaXMgdGhlIHByb2Nlc3MgdGhhdCB0YWtlcyBjYXJlIHRoYXQgZWxlbWVudHMgZ29pbmcgaW50byB0aGUgR1NUX1NUQVRFX1BBVVNFRCBzdGF0ZSB3aWxsIGhhdmUgYnVmZmVycyByZWFkeSBhZnRlciB0aGUgc3RhdGUgY2hhbmdlLiBUaGUgcmVzdWx0IG9mIHRoaXMgaXMgdGhhdCBzdWNoIGVsZW1lbnRzIGNhbiBzdGFydCBwcm9jZXNzaW5nIGRhdGEgaW1tZWRpYXRlbHkgYWZ0ZXIgZ29pbmcgaW50byB0aGUgR1NUX1NUQVRFX1BMQVlJTkcgc3RhdGUsIHdpdGhvdXQgcmVxdWlyaW5nIHRvIHRha2Ugc29tZSB0aW1lIHRvIGluaXRpYWxpemUgb3V0cHV0cyBvciBzZXQgdXAgZGVjb2RlcnM7IGFsbCB0aGF0IGlzIGRvbmUgYWxyZWFkeSBiZWZvcmUgdGhlIHN0YXRlLWNoYW5nZSB0byBHU1RfU1RBVEVfUEFVU0VEICBzdWNjZXNzZnVsbHkgY29tcGxldGVzLgotIwotIyBQcmVyb2xsLCBob3dldmVyLCBpcyBhIGNvbXBsZXggcHJvY2VzcyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlIHNhbWUgY29kZSBpbiBtYW55IGVsZW1lbnRzLiBUaGVyZWZvcmUsIHNpbmsgZWxlbWVudHMgY2FuIGRlcml2ZSBmcm9tIHRoZSBHc3RCYXNlU2luayBiYXNlLWNsYXNzLCB3aGljaCBkb2VzIHByZXJvbGwgYW5kIGEgZmV3IG90aGVyIHV0aWxpdHkgZnVuY3Rpb25zIGF1dG9tYXRpY2FsbHkuIFRoZSBkZXJpdmVkIGNsYXNzIG9ubHkgbmVlZHMgdG8gaW1wbGVtZW50IGEgYnVuY2ggb2YgdmlydHVhbCBmdW5jdGlvbnMgYW5kIHdpbGwgd29yayBhdXRvbWF0aWNhbGx5LgotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiTGEgcGlwZWxpbmUgw6ggdml2YSBlIG5vbiBuZWNlc3NpdGEgaWwgUFJFUk9MTCAuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIkxhIHBpcGVsaW5lIMOoIGluIFBSRVJPTExJTkcgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIkVSUk9SRTogbGEgcGlwZWxpbmUgbm9uIHZ1b2xlIGZhcmUgaWwgcHJlcm9sbC5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiTGEgcGlwZWxpbmUgw6ggaW4gUFJFUk9MTEVEIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsbGEgcGlwZWxpbmUgYSBQTEFZSU5HIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgotbXNnc3RyICJFUlJPUkU6IGxhIHBpcGVsaW5lIG5vbiB2dW9sZSByaXByb2R1cnJlLlxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIkVPUyBhbGwnYXJyZXN0byBhYmlsaXRhdG8gLS0gRm9yemF0byBFT1Mgc3VsbGEgcGlwZWxpbmVcbiIKLQotIywgZnV6enkKLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiRU9TIGFsbCdhcnJlc3RvIGFiaWxpdGF0byAtLSBGb3J6YXRvIEVPUyBzdWxsYSBwaXBlbGluZVxuIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIkluIGF0dGVzYSBkaSBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIlJpY2V2dXRvIEVPUyAtIGFycmVzdG8gZGVsbGEgcGlwZWxpbmUuLi5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiSW50ZXJyb3R0bzogYXJyZXN0byBkZWxsYSBwaXBlbGluZSAuLi5cbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJTaSDDqCB2ZXJpZmljYXRvIHVuIGVycm9yZSBkdXJhbnRlIGwnYXR0ZXNhIGRpIEVPU1xuIgotCi0jIHNlY29uZG8gbWUgcXVlbCAlIMOoIHVuIGVycm9yZS4uLiBtYWdhcmkgZG92cmViYmUKLSMgZXNzZXJlICVkIG8gJXMsIGEgbWVubyBjaGUgbm9uIGNvc3RydXNjYW5vIGlsIG1lc3NhZ2lvCi0jIGluIHF1YWxjaGUgbW9kbyBlc290ZXJpY28uLi4KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiRXNlY3V6aW9uZSB0ZXJtaW5hdGEgZG9wbyAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiSW1wb3N0YXppb25lIGRlbGxhIHBpcGVsaW5lIGEgUkVBRFkgLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsYSBwaXBlbGluZSBhIE5VTEwgLi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJFc2VjdXppb25lIGRpIGZyZWUgc3VsbGEgcGlwZWxpbmUuLi5cbiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiRXJyb3JlIGludGVybm8gbmVsbG8gc3RyZWFtIGRpIGRhdGkuIgotCi0jIC1YLCAtLWV4Y2x1ZGU9VElQTzEsVElQTzIsLi4uCi0jfiBtc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKLSN+IG1zZ3N0ciAiTm9uIHN0YW1wYSBsZSBpbmZvcm1hemlvbmkgZGkgc3RhdG8gcGVyIFRJUE8iCi0KLSN+IG1zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCi0jfiBtc2dzdHIgIlRJUE8xLFRJUE8yLC4uLiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAiY29sbGVnYW1lbnRvIHNlbnphIGVsZW1lbnRvIHNvcmdlbnRlIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAiY29sbGVnYW1lbnRvIHNlbnphIGVsZW1lbnRvIHNpbmsiCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAiZWxlbWVudG8gbWFuY2FudGUgcGVyIGNvbGxlZ2FyZSBsJ1VSSSDCqyVzwrsgYSIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAiaW1wb3NzaWJpbGUgY29sbGVnYXJlIGwnZWxlbWVudG8gc2luayBwZXIgbCdVUkkgwqslc8K7IgotCi0jIC1ULCAtLXRyYWNlCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiU3RhbXBhIHRyYWNjaWEgZGkgYWxsb2MgKHNlIGFiaWxpdGF0byBpbiBjb21waWxhemlvbmUpIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAiVXNvOiBnc3QteG1sbGF1bmNoIDxGSUxFLlhNTD4gWyBFTEVNRU5UTy5QUk9QUklFVEE9VkFMT1JFIC4uLiBdXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCi0jfiBtc2dzdHIgIkVSUk9SRTogYW5hbGlzaSBkZWwgZmlsZSB4bWwgwqslc8K7IG5vbiByaXVzY2l0YS5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKLSN+IG1zZ3N0ciAiRVJST1JFOiBuZXNzdW4gZWxlbWVudG8gcGlwZWxpbmUgdG9wbGV2ZWwgbmVsIGZpbGUgwqslc8K7LlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICJBVFRFTlpJT05FOiBhbCBtb21lbnRvIMOoIHN1cHBvcnRhdG8gc29ubyB1biBlbGVtZW50byB0b3BsZXZlbC5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkVSUk9SRTogaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsJ2FyZ29tZW50byAlZCBkZWxsYSByaWdhIGRpIGNvbWFuZG86ICVzLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKLSN+IG1zZ3N0ciAiQVRURU5aSU9ORTogZWxlbWVudG8gY29uIG5vbWUgwqslc8K7IG5vbiB0cm92YXRvLlxuIgotCi0jIC1vLCAtLW91dHB1dD1GSUxFCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiU2FsdmEgc3UgRklMRSB1bmEgcmFwcHJlc2VudGF6aW9uZSB4bWwgZGVsbGEgcGlwZWxpbmUgZWQgZXNjZSIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkZJTEUiCi0KLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIk5vbiBpbnN0YWxsYSBpIGdlc3RvcmkgZGkgc2VnbmFsZSBwZXIgU0lHVVNSMSBlIFNJR1VTUjIiCi0KLSN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlczogJXMiCi0jfiBtc2dzdHIgIkVycm9yZSBuZWwgcmktc2NhbnNpb25hcmUgaWwgcmVnaXN0cm8gJXM6ICVzIgotCi0jfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXMiCi0jfiBtc2dzdHIgIkVycm9yZSBuZWwgcmktc2NhbnNpb25hcmUgaWwgcmVnaXN0cm8gJXMiCmRpZmYgLS1naXQgYS9wby9qYS5nbW8gYi9wby9qYS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZDE3OGQuLjAwMDAwMDAKLS0tIGEvcG8vamEuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vamEucG8gYi9wby9qYS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODljM2Q5MC4uMDAwMDAwMAotLS0gYS9wby9qYS5wbworKysgL2Rldi9udWxsCkBAIC0xLDEzMjggKzAsMCBAQAotIyBKYXBhbmVzZSB0cmFuc2xhdGlvbiBmaWxlIGZvciBnc3RyZWFtZXIKLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMKLSMgTWFrb3RvIEthdG8gPG1ha290by5rdEBnbWFpbC5jb20+LCAyMDA4LCAyMDEzLgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDEuMC4zXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTMtMDgtMjAgMTQ6NTYrMDkwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogTWFrb3RvIEthdG8gPG1ha290by5rdEBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogSmFwYW5lc2UgPHRyYW5zbGF0aW9uLXRlYW0tamFAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiBqYVxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAwLjJcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOODkOODvOOCuOODp+ODs+OCkuihqOekuuOBmeOCiyIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAi5Yip55So5Y+v6IO944Gq44OH44OQ44OD44Kw44Kr44OG44K044Oq44KS6KGo56S644GX44Gm57WC5LqG44GZ44KLIgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiTEVWRUwiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMSVNUIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIuODh+ODkOODg+OCsOWHuuWKm+OBruOCq+ODqeODvOWHuuWKm+OCkueEoeWKueOBq+OBmeOCiyIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAi44OH44OQ44OD44Kw44KS54Sh5Yq544Gr44GZ44KLIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIuODl+ODqeOCsOOCpOODs+OCkuWQq+OCgOOCs+ODreODsyAoOikg44Gn5Yy65YiH44KJ44KM44Gf44OR44K5IgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIlBBVEhTIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiUExVR0lOUyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSLjg5fjg6njgrDjgqTjg7Pjga7jg63jg7zjg4nkuK3jgavnmbrnlJ/jgZfjgZ/jgrvjgrDjg6Hjg7Pjg4bjg7zjgrfjg6fjg7PpgZXlj43jga7jg4jjg6njg4Pjg5fjgpLnhKHlirnjgavjgZnjgosiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAi44Os44K444K544OI44Oq44Gu44Ki44OD44OX44OH44O844OI44KS54Sh5Yq544Gr44GZ44KLIgotCi0jLCBmdXp6eQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIuODrOOCuOOCueODiOODquOCkuOCueOCreODo+ODs+OBmeOCi+mam+OBqyBmb3JrKCkg44KS5L2/44KP44Gq44GEIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkdTdHJlYW1lciDjgqrjg5fjgrfjg6fjg7MiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJHU3RyZWFtZXIg44Kq44OX44K344On44Oz44KS6KGo56S644GZ44KLIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIuS4jeaYjuOBquOCquODl+OCt+ODp+ODsyIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo44Ko44Op44O8OiDjgrPjg7zjg4njgYzlrp/oo4XjgZXjgozjgabjgYTjgb7jgZvjgpMiCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo44Ko44Op44O8OiDjg5Hjg4Pjg4njga7llY/poYwiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOOCqOODqeODvDog44K544Os44OD44OJ44Gu5ZWP6aGMIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOOCqOODqeODvDog44ON44K044K344Ko44O844K344On44Oz44Gu5ZWP6aGMIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOOCqOODqeODvDog44Kk44OZ44Oz44OI44Gu5ZWP6aGMIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo44Ko44Op44O8OiDjgrfjg7zjgq/jga7llY/poYwiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo44Ko44Op44O8OiDjgr/jgrDjga7llY/poYwiCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICJHU3RyZWFtZXIg44Gv44OX44Op44Kw44Kk44Oz44KS6KaL44Gk44GR44KL44GT44Go44GM44Gn44GN44G+44Gb44KTIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOOCqOODqeODvDog44Kv44Ot44OD44Kv44Gu5ZWP6aGMIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLSLjgZPjga7jgqLjg5fjg6rjgrHjg7zjgrfjg6fjg7Pjga9HU3RyZWFtZXIg44Gn54Sh5Yq544Gr44GX44Gm44GE44KL5qmf6IO944KS5L2/55So44GX44KI44GG44Go44GX44Gm44GE44G+44GZIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXLkuIrjgafkuIDoiKznmoTjgarjgrXjg53jg7zjg4jjg6njgqTjg5bjg6njg6rjgqjjg6njg7zjgYzotbfjgY3jgb7jgZfjgZ8iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLjgrXjg53jg7zjg4jjg6njgqTjg5bjg6njg6rjgpLliJ3mnJ/ljJbjgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAi44K144Od44O844OI44Op44Kk44OW44Op44Oq44KS44Kv44Ot44O844K644Gn44GN44G+44Gb44KTIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLjgrXjg53jg7zjg4jjg6njgqTjg5bjg6njg6rjgpLmp4vmiJDjgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIuOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOCqOODqeODvCIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIg5LiK44Gn5LiA6Iis55qE44Gq44Oq44K944O844K544Ko44Op44O844GM6LW344GN44G+44GX44GfIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAi44Oq44K944O844K544GM6KaL44Gk44GL44KK44G+44Gb44KTIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAi44Oq44K944O844K544GM44OT44K444O844GL5Yip55So5Y+v6IO944Gn44Gv44GC44KK44G+44Gb44KTIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICLoqq3jgb/ovrzjgb/nlKjjgavjg6rjgr3jg7zjgrnjgpLplovjgY/jgZPjgajjgYzjgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIuabuOOBjei+vOOBv+eUqOOBq+ODquOCveODvOOCueOCkumWi+OBj+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAi6Kqt44G/5pu444GN55So44Gr44Oq44K944O844K544KS6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KTIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAi44Oq44K944O844K544KS44Kv44Ot44O844K644Gn44GN44G+44Gb44KTIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIuODquOCveODvOOCueOBi+OCieiqreOBv+i+vOOCgOOBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIuODquOCveODvOOCueOCkuabuOOBjei+vOOCgOOBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKLQotbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgotbXNnc3RyICLjg6rjgr3jg7zjgrnkuIrjgafjg6rjg7zjgq/jgYzjgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICLjg6rjgr3jg7zjgrnjgpLlkIzmnJ/jgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAi44Oq44K944O844K55LiK44G+44Gf44Gv44Oq44K944O844K544GL44KJ6Kit5a6a44KS5Y+W5b6X44O75aSJ5pu044GM44Gn44GN44G+44Gb44KTIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICLjg6rjgr3jg7zjgrnjgavnqbrjgY3jgYzjgYLjgorjgb7jgZvjgpMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAi44Oq44K944O844K544Gr56m644GN44GM44GC44KK44G+44Gb44KTIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIg5LiK44Gn5LiA6Iis55qE44Gq44K544OI44Oq44O844Og44Ko44Op44O844GM6LW344GN44G+44GX44GfIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0i44Ko44Os44Oh44Oz44OI44Gv44GT44Gu44K544OI44Oq44O844Og44Gu44Gf44KB44Gu5Yem55CG44KS5a6f6KOF44GX44Gm44GE44G+44Gb44KT44CC44OQ44Kw44KS55m76Yyy44GX44Gm44GP44GgIgotIuOBleOBhCIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICLjgrnjg4jjg6rjg7zjg6Djga7nqK7poZ7jgpLliKTliKXjgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAi44GT44Gu44K544OI44Oq44O844Og44KS5Yem55CG44GZ44KL44GT44Go44GM44Gn44GN44KL44Kz44O844OH44OD44Kv44GM44GC44KK44G+44Gb44KTIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICLjgrnjg4jjg6rjg7zjg6DjgpLjg4fjgrPjg7zjg4njgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIuOCueODiOODquODvOODoOOCkuOCqOODs+OCs+ODvOODieOBp+OBjeOBvuOBm+OCkyIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICLlh7rlipvjgrnjg4jjg6rjg7zjg6DjgpLlj5bjgorlh7rjgZvjgb7jgZvjgpMiCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIuOCueODiOODquODvOODoOOCkuWkmumHjeWMluOBp+OBjeOBvuOBm+OCkyIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIuOCueODiOODquODvOODoOOBruODleOCqeODvOODnuODg+ODiOOBjOato+OBl+OBj+OBguOCiuOBvuOBm+OCkyIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICLjgrnjg4jjg6rjg7zjg6Djga/mmpflj7fljJbjgpLjgrXjg53jg7zjg4jjgZfjgabjgYTjgb7jgZvjgpMiCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICLjgrnjg4jjg6rjg7zjg6Djga/mmpflj7fljJbjgZXjgozjgabjgYTjgb7jgZnjgYzpganjgZfjgZ/jgq3jg7zjgYzjgarjgYTjgZ/jgoHlvqnlhYPjgafjgY3jgb7jgZvjgpMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICIlcyDjgbjjga7jg6zjgrjjgrnjg4jjg6rjgq3jg6Pjg4Pjgrfjg6Xjga7mm7jjgY3ovrzjgb/kuK3jgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ86ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIuOCv+OCpOODiOODqyIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgIuWFsemAmuOBq+OBpOOBi+OCj+OCjOOCi+OCv+OCpOODiOODqyIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICLjgr/jgqTjg4jjg6vjga7jgr3jg7zjg4jlkI0iCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgIuOCouODvOODhuOCo+OCueODiCIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICLjgqLjg7zjg4bjgqPjgrnjg4jjga7jgr3jg7zjg4jlkI0iCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICLjgqLjg6vjg5Djg6AiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgIuOCouODq+ODkOODoOOBruOCveODvOODiOWQjSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICLjgqLjg7zjg4bjgqPjgrnjg4giCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIuOCouODvOODhuOCo+OCueODiOOBruOCveODvOODiOWQjSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAi5pel5LuYIgotCi1tc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICLjg4fjg7zjgr/jgYzkvZzmiJDjgZXjgozjgZ/ml6Xku5ggKEdEYXRhIOani+mAoOS9k+OBqOOBl+OBpikiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgIuaXpeS7mCIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAi44OH44O844K/44GM5L2c5oiQ44GV44KM44Gf5pel5LuYIChHc3REYXRlVGltZSDmp4vpgKDkvZPjgajjgZfjgaYpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgIuOCuOODo+ODs+ODqyIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICLjgZPjga7jg4fjg7zjgr/jgYzlsZ7jgZfjgabjgYTjgovjgrjjg6Pjg7Pjg6siCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICLjgrPjg6Hjg7Pjg4giCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIuODiOODqeODg+OCr+eVquWPtyIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLjgrPjg6zjgq/jgrfjg6fjg7PlhoXjga7jg4jjg6njg4Pjgq/nlarlj7ciCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAi44OI44Op44OD44Kv5pWwIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgIuODh+OCo+OCueOCr+eVquWPtyIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIuOCs+ODrOOCr+OCt+ODp+ODs+WGheOBruODh+OCo+OCueOCr+eVquWPtyIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgIuODh+OCo+OCueOCr+aemuaVsCIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAi5aC05omAIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAi6Kmz57SwIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICLjg5Djg7zjgrjjg6fjg7MiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAi44GT44Gu44OH44O844K/44Gu44OQ44O844K444On44OzIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiIgotIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIOOCkuWPgueFp+OBl+OBpiIKLSLjgY/jgaDjgZXjgYQiCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIue1hOe5lCIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAi44Ko44Oz44Kz44O844OA44O8IgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAi44Kz44Oz44K/44Kv44OIIgotCi1tc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAi44Kz44Oz44K/44Kv44OI5oOF5aCxIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAi44Op44Kk44K744Oz44K5IgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICLjg4fjg7zjgr/jga7jg6njgqTjgrvjg7PjgrkiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAi44Op44Kk44K744Oz44K5IHVyaSIKLQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAi44OH44O8dOOBruODqeOCpOOCu+ODs+OCueOBuOOBriBVUkkiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgIua8lOWlj+iAhSIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAi5L2c5puy6ICFIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgIua8lOWlj+aZgumWkyIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJHU3RyZWFtZXIg5pmC6ZaT5Y2Y5L2NIChuYW5vc2Vjb25kcykg44Gn44Gu6ZW344GVIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgIuOCs+ODvOODh+ODg+OCryIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgIuWLleeUu+OCs+ODvOODh+ODg+OCryIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgIumfs+WjsOOCs+ODvOODh+ODg+OCryIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgIuWtl+W5leOCs+ODvOODh+ODg+OCryIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi5a2X5bmV44OH44O844K/44GM5L+d5a2Y44GV44KM44Gm44GE44KL44Kz44O844OH44OD44KvIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAi44Kz44Oz44OG44OK5b2i5byPIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgIuODk+ODg+ODiOODrOODvOODiCIKLQotbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAi5YWs56ew44OT44OD44OI44Os44O844OIIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAi5YWs56ew44OT44OD44OI44Os44O844OIIChiaXRzL+enkikiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIuacgOWwj+ODk+ODg+ODiOODrOODvOODiCIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIuacgOWwj+ODk+ODg+ODiOODrOODvOODiCAoYml0cy/np5IpIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICLmnIDlpKfjg5Pjg4Pjg4jjg6zjg7zjg4giCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLmnIDlpKfjg5Pjg4Pjg4jjg6zjg7zjg4ggKGJpdHMv56eSKSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgIuOCqOODs+OCs+ODvOODgOODvCIKLQotbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgIuOBk+OBruOCueODiOODquODvOODoOOCkuOCqOODs+OCs+ODvOODieOBmeOCi+OBruOBq+S9v+OBo+OBn+OCqOODs+OCs+ODvOODgOODvCIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAi44Ko44Oz44Kz44O844OA44O844OQ44O844K444On44OzIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi44GT44Gu44K544OI44Oq44O844Og44KS44Ko44Oz44Kz44O844OJ44GZ44KL44Gu44Gr5L2/44Gj44Gf44Ko44Oz44Kz44O844OA44O844Gu44OQ44O844K444On44OzIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICLjgrfjg6rjgqLjg6siCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICLjg4jjg6njg4Pjgq/jga7jgrfjg6rjgqLjg6vnlarlj7ciCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgIiIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgIuODiOODqeODg+OCr+OBruODlOODvOOCryIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAi44Ki44Or44OQ44Og44Gu44OU44O844KvIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgIiIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgIuiogOiqnuOCs+ODvOODiSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgIuOBk+OBruOCueODiOODquODvOODoOOBriBJU08tNjM5LTEg44G+44Gf44GvIElTTy02MzktMiDjgafmm7jjgYvjgozjgZ/oqIDoqp7jgrPjg7zjg4kiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICLoqIDoqp7lkI0iCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgIueUu+WDjyIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIuOBk+OBruOCueODiOODquODvOODoOOBq+mWoumAo+OBl+OBn+eUu+WDjyIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAi44OX44Os44OT44Ol44O855S75YOPIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICLjgZPjga7jgrnjg4jjg6rjg7zjg6DjgavplqLpgKPjgZfjgZ/jg5fjg6zjg5Pjg6Xjg7znlLvlg48iCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICLmt7vku5giCi0KLW1zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICLjgZPjga7jgrnjg4jjg6rjg7zjg6Djgavmt7vku5jjgZXjgozjgZ/jg5XjgqHjgqTjg6siCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICJCUE0iCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgIuOCreODvOODr+ODvOODiSIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAi5aC05omAIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotIywgZnV6enkKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICLjgqLjg7zjg4bjgqPjgrnjg4jjga7jgr3jg7zjg4jlkI0iCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICLjgqjjg5Tjgr3jg7zjg4nnlarlj7ciCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAi44K344O844K644Oz55Wq5Y+3IgotCi1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIiIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAi5q2M6KmeIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAi5L2c5puy6ICF44Gu44K944O844OI5ZCNIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICLjg4fjg5DjgqTjgrnoo73pgKDlhYMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAi44GT44Gu44K544OI44Oq44O844Og44KS44Ko44Oz44Kz44O844OJ44GZ44KL44Gu44Gr5L2/44Gj44Gf44Ko44Oz44Kz44O844OA44O844Gu44OQ44O844K444On44OzIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICLjg4fjg5DjgqTjgrnjg6Ljg4fjg6siCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLjgZPjga7jgrnjg4jjg6rjg7zjg6DjgpLjgqjjg7PjgrPjg7zjg4njgZnjgovjga7jgavkvb/jgaPjgZ/jgqjjg7PjgrPjg7zjg4Djg7zjga7jg5Djg7zjgrjjg6fjg7MiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICLjgqLjg5fjg6rjgrHjg7zjgrfjg6fjg7PlkI0iCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIiIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgIuOCouODl+ODquOCseODvOOCt+ODp+ODs+ODh+ODvOOCvyIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIiIKLQotbXNnaWQgInB1Ymxpc2hlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgbGFiZWwgb3IgcHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgIiIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICIsICIKLW1zZ3N0ciAiLCAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gVVJJIGhhbmRsZXIgZm9yIHRoZSAlcyBwcm90b2NvbCBmb3VuZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIui/veWKoOOBruODh+ODkOODg+OCsOaDheWgsTpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICLjg5fjg63jg5Hjg4bjgqMgXCIlc1wiIOOBjOOCqOODrOODoeODs+ODiCBcIiVzXCIg44Gr44GC44KK44G+44Gb44KTIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAiJXMg44KSICVzIOOBuOODquODs+OCr+OBp+OBjeOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAi44Ko44Os44Oh44Oz44OIIFwiJXNcIiDjgYzjgYLjgorjgb7jgZvjgpMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiVVJJIFwiJXNcIiDjga7jgr3jg7zjgrnjgqjjg6zjg6Hjg7Pjg4jjgYzjgYLjgorjgb7jgZvjgpMiCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICLjg5fjg63jg5Hjg4bjgqMgXCIlc1wiIOOBjOOCqOODrOODoeODs+ODiCBcIiVzXCIg44Gr44GC44KK44G+44Gb44KTIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgIuepuuOBruODkeOCpOODl+ODqeOCpOODs+OBr+ioseWPr+OBleOCjOOBvuOBm+OCkyIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIuWGhemDqOODh+ODvOOCv+ODleODreODvOOCqOODqeODvCIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICLkuIDmmYLjg5XjgqHjgqTjg6sgXCIlc1wiIOOCkuS9nOaIkOOBp+OBjeOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIuiqreOBv+i+vOOBv+eUqOOBq+ODleOCoeOCpOODqyBcIiVzXCIg44KS6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KTIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAi44OV44Kh44Kk44Or44Gu5pu444GN6L6844G/5Lit44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIuabuOOBjei+vOOBv+eUqOOBruODleOCoeOCpOODq+WQjeOBjOaMh+WumuOBleOCjOOBpuOBhOOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIuabuOOBjei+vOOBv+eUqOOBq+ODleOCoeOCpOODqyBcIiVzXCIg44KS6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KTIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICLjg5XjgqHjgqTjg6sgXCIlc1wiIOOBruOCr+ODreODvOOCuuaZguOBq+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBnyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi44OV44Kh44Kk44OrIFwiJXNcIiDjga7jgrfjg7zjgq/kuK3jgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIuODleOCoeOCpOODqyBcIiVzXCIg44Gu5pu444GN6L6844G/5Lit44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIuiqreOBv+i+vOOBv+eUqOOBruODleOCoeOCpOODq+WQjeOBjOaMh+WumuOBleOCjOOBpuOBhOOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiXCIlc1wiIOS4iuOBruaDheWgseOCkuWPluW+l+OBp+OBjeOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICLjg5XjgqHjgqTjg6sgXCIlc1wiIOOBr+ODh+OCo+ODrOOCr+ODiOODquOBp+OBmSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIuODleOCoeOCpOODqyBcIiVzXCIg44Gv44K944Kx44OD44OI44Gn44GZIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAi44K544OI44Oq44O844Og5YaF44Gu44Kx44Kk44OR44OT44Oq44OG44Kj44KS5qSc5Ye644GX44G+44GX44GfIgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAi5pyA5bCP5YCkIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAi44K544OI44Oq44O844Og44Gn44OH44O844K/44GM5ZCr44G+44KM44Gm44GE44G+44Gb44KTIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICLjgrnjg4jjg6rjg7zjg6Djgafjg4fjg7zjgr/jgYzlkKvjgb7jgozjgabjgYTjgb7jgZvjgpMiCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICLlrp/oo4XjgZXjgozjgabjgYTjgovjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrk6XG4iCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAi6Kqt44G/6L6844G/5Y+v6IO9IgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgIuabuOOBjei+vOOBv+WPr+iDvSIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAi44Kz44Oz44OI44Ot44O844Or5Y+v6IO9IgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIuWQiOioiOaVsDogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAi44GZ44G544Gm44Gu44Ko44Os44Oh44Oz44OI44KS6KGo56S644GZ44KLIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICLjg5fjg6njgrDjgqTjg7Pjg5XjgqHjgqTjg6vjgpLjg63jg7zjg4njgafjgY3jgb7jgZvjgpPjgafjgZfjgZ86ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIkZPVU5EIFRPQ1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSLmg4XloLE6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgIuODkOODg+ODleOCoeODquODs+OCsOS4rS4uLiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLSLjg5Djg4Pjg5XjgqHjg6rjg7PjgrDjgYzlrozkuobjgZfjgb7jgZfjgZ/jga7jgafjgIHjg5HjgqTjg5fjg6njgqTjg7PjgpLlho3nlJ/kuK0gKFBMQVlJTkcpIOOBq+OBl+OBviIKLSLjgZkuLi5cbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIuODkOODg+ODleOCoeODquODs+OCsOS4reOBquOBruOBp+OAgeODkeOCpOODl+ODqeOCpOODs+OCkuS4gOaZguWBnOatoiAoUEFVU0VEKSDjgavjgZfjgb7jgZkuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICLlibLjgorovrzjgb86IOODkeOCpOODl+ODqeOCpOODs+OCkuWBnOatouOBl+OBpuOBhOOBvuOBmS4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIuOCqOODrOODoeODs+ODiOOBjOimi+OBpOOBi+OCiuOBvuOBm+OCkzogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICLjgr/jgrAgKOODoeOCv+ODh+ODvOOCvykg44KS5Ye65Yqb44GZ44KLIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIlRZUEUg44Gu44K544OG44O844K/44K55oOF5aCx44KS5Ye65Yqb44GX44Gq44GEIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICLlh7rlipvjg6Hjg4Pjgrvjg7zjgrgiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICLjg5Xjgqnjg7zjg6vjg4jjg4/jg7Pjg4njg6njgpLjgqTjg7Pjgrnjg4jjg7zjg6vjgZfjgarjgYQiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICLjgqjjg6njg7w6IOODkeOCpOODl+ODqeOCpOODs+OCkuani+evieOBmeOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkzogJXNcbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIuOCqOODqeODvDog44OR44Kk44OX44Op44Kk44Oz44KS5qeL56+J44GZ44KL44GT44Go44GM44Gn44GN44G+44Gb44KTXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIuOCqOODqeODvDogJ3BpcGVsaW5lJyDjgqjjg6zjg6Hjg7Pjg4jjgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ9cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICLjg5HjgqTjg5fjg6njgqTjg7PjgpLkuIDmmYLlgZzmraIgKFBBVVNFRCkg44Gr44GX44Gm44GE44G+44GZLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIuODkeOCpOODl+ODqeOCpOODs+OCkuWGjeeUn+S4rSAoUExBWUlORykg44Gr44GX44Gm44GE44G+44GZLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICLlibLjgorovrzjgb86IOODkeOCpOODl+ODqeOCpOODs+OCkuWBnOatouOBl+OBpuOBhOOBvuOBmS4uLlxuIgotCi0jLCBmdXp6eQotbXNnaWQgIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICLlibLjgorovrzjgb86IOODkeOCpOODl+ODqeOCpOODs+OCkuWBnOatouOBl+OBpuOBhOOBvuOBmS4uLlxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICLjg5HjgqTjg5fjg6njgqTjg7PjgpLop6PmlL4gKEZSRUVJTkcpIOOBl+OBpuOBhOOBvuOBmS4uLlxuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICLlhoXpg6jjg4fjg7zjgr/jgrnjg4jjg6rjg7zjg6Djgqjjg6njg7wiCi0KLSN+IG1zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgotI34gbXNnc3RyICJUWVBFIOOBruOCueODhuODvOOCv+OCueaDheWgseOCkuWHuuWKm+OBl+OBquOBhCIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVFlQRTEsVFlQRTIsLi4uIgotCi0jfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgotI34gbXNnc3RyICLjg6zjgrjjgrnjg4jjg6ogJXMg44Gu5YaN44K544Kt44Oj44Oz5Lit44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfOiAlcyIKLQotI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgotI34gbXNnc3RyICLjg6zjgrjjgrnjg4jjg6ogJXMg44Gu5YaN44K544Kt44Oj44Oz5Lit44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOOCqOODqeODvDog54q25oWL5aSJ5pu044Gr5aSx5pWX44GX44G+44GX44GfIgotCi0jfiBtc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIGRlc2NyaXB0b3IgXCIlZFwiLiIKLSN+IG1zZ3N0ciAi44OV44Kh44Kk44Or44OH44Kj44K544Kv44Oq44OX44K/IFwiJWRcIiDjgbjjga7mm7jjgY3ovrzjgb/kuK3jgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ8iCi0KLSN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCi0jfiBtc2dzdHIgIuODleOCoeOCpOODq+ODh+OCo+OCueOCr+ODquODl+OCvyBcIiVkXCIg44GM5q2j44GX44GP44GC44KK44G+44Gb44KTIgotCi0jfiBtc2dpZCAibWF4aW11bSIKLSN+IG1zZ3N0ciAi5pyA5aSn5YCkIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAi5L2/44GE5pa5OiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLl1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAi44Ko44Op44O8OiB4bWwg44OV44Kh44Kk44OrICclcycg44Gu6Kej5p6Q44Gr5aSx5pWX44GX44G+44GX44GfXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICLjgqjjg6njg7w6IOODleOCoeOCpOODqyAnJXMnIOOBq+ODiOODg+ODl+ODrOODmeODq+OBruODkeOCpOODl+ODqeOCpOODs+OCqOODrOODoeODs+ODiOOBjOOBguOCiuOBvuOBm+OCk1xuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLiIKLSN+IG1zZ3N0ciAi6K2m5ZGKOiDjg4jjg4Pjg5fjg6zjg5njg6vjga7jgqjjg6zjg6Hjg7Pjg4jjga/kuIDjgaTjga7jgb/jgrXjg53jg7zjg4jjgZfjgabjgYTjgb7jgZkiCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgIuOCqOODqeODvDog44Kz44Oe44Oz44OJ44Op44Kk44Oz5byV5pWwICVkIOOCkuino+aekOOBp+OBjeOBvuOBm+OCkzogJXNcbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCi0jfiBtc2dzdHIgIuitpuWRijog44Ko44Os44Oh44Oz44OI5ZCNICclcycg44GM6KaL44Gk44GL44KK44G+44Gb44KTXG4iCi0KLSN+IG1zZ2lkICJGSUxFIgotI34gbXNnc3RyICJGSUxFIgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiYWxsb2Mg44OI44Os44O844K544KS6KGo56S644GZ44KLICjjgrPjg7Pjg5HjgqTjg6vmmYLjgavmnInlirnjgavjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkpIgpkaWZmIC0tZ2l0IGEvcG8vbHQuZ21vIGIvcG8vbHQuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTQyNWFiLi4wMDAwMDAwCi0tLSBhL3BvL2x0LmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2x0LnBvIGIvcG8vbHQucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YzFjMjEuLjAwMDAwMDAKLS0tIGEvcG8vbHQucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzc5ICswLDAgQEAKLSMgTGl0aHVhbmlhbiB0cmFuc2xhdGlvbiBmb3IgZ3N0cmVhbWVyLgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KLSMgQXVyaW1hcyDEjGVybml1cyA8YXVyaXNjNEBnbWFpbC5jb20+LCAyMDEwLgotIyDFvXlnaW1hbnRhcyBCZXJ1xI1rYSA8dWlkMEBha2wubHQ+LCAyMDEwLgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDAuMTAuMjkuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA3LTE2IDAwOjUwKzAzMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IMW9eWdpbWFudGFzIEJlcnXEjWthIDx1aWQwQGFrbC5sdD5cbiIKLSJMYW5ndWFnZS1UZWFtOiBMaXRodWFuaWFuIDxrb21wX2x0QGtvbmZlcmVuY2lqb3MubHQ+XG4iCi0iTGFuZ3VhZ2U6IGx0XG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgKG4iCi0iJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDIpO1xuIgotIlgtR2VuZXJhdG9yOiBWaXJ0YWFsIDAuNi4xXG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIknFoXZlc3RpIEdTdHJlYW1lciB2ZXJzaWrEhSIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJQYWRhcnl0aSB2aXN1cyDEr3NwxJdqaW11cyBsZW10aW5nYWlzIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIknFoXZlc3RpIHByaWVpbmFtYXMgZGVyaW5pbW8ga2F0ZWdvcmlqYXMgaXIgacWhZWl0aSIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSJOdW1hdHl0YXNpcyBkZXJpbmltbyBseWdpcyBudW8gMSAodGlrIGtsYWlkb3MpIGlraSA1IChiZXQga2FzKSBhcmJhIDAg4oCTICIKLSJqb2tpb3MgacWhdmVzdGllcyIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJMWUdJUyIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSJLYWJsZWxpYWlzIHNraXJpYW1hcyBjYXRlZ29yeV9uYW1lOmxldmVsIHBvcsWzIHPEhXJhxaFhcywgbnVzdGF0YW50aXMgIgotImtvbmtyZcSNaXVzIGx5Z2l1cyBwYXNraXJvbXMga2F0ZWdvcmlqb21zLiBQYXZ5emR5czogR1NUX0FVVE9QTFVHOjUsIgotIkdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIlPEhFJBxaBBUyIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJJxaFqdW5ndGkgc3BhbHZvdMSFIGRlcmluaW1vIGnFoXZlc3TEryIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiScWhanVuZ3RpIGRlcmluaW3EhSIKLQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICLErmp1bmd0aSBpbmZvcm1hdHl2acSFIMSvc2tpZXBpxbMgxK9rxJdsaW1vIGRpYWdub3N0aWvEhSIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIkR2aXRhxaFraWFpcyBza2lyaWFtaSBrZWxpYWksIGt1ciB5cmEgxK9za2llcGnFsyIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICJLRUxJQUkiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0iS2FibGVsaWFpcyBza2lyaWFtYXMgc8SFcmHFoWFzIMSvc2tpZXBpxbMsIMSva2VsdGluxbMgcGFwaWxkb21haSBwcmllICIKLSJHU1RfUExVR0lOX1BBVEggYXBsaW5rb3Mga2ludGFtYWphbWUgc2F1Z29tbyBzxIVyYcWhbyIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIsSuU0tJRVBJQUkiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICJJxaFqdW5ndGkgc2VnbWVudGF2aW1vIGtsYWlkxbMgZ2F1ZHltxIUgxK9za2llcGnFsyDEr2vEl2xpbW8gbWV0dSIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJJxaFqdW5ndGkgcmVnaXN0cm8gYXRuYXVqaW5pbcSFIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiScWhanVuZ3RpIHBhZ2FsYmluaW8gcHJvY2VzbyBwYWxlaWRpbcSFIHNrZW51b2phbnQgcmVnaXN0csSFIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkdTdHJlYW1lciBwYXJpbmt0eXMiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJSb2R5dGkgR1N0cmVhbWVyIHBhcmlua3RpcyIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICJOZcW+aW5vbWEgcGFyaW5rdGlzIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgc3VzaWTFq3LElyBzdSBiZW5kcsSFasSFIHBhZ3JpbmRpbsSXcyBiaWJsaW90ZWtvcyBrbGFpZGEuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBrxatyxJdqYWkgbmVwYXNpdmFyZ2lubyBwcmlza2lydGkgxaFpYWkga2xhaWRhaSBrbGFpZG9zIGtvZG8uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCi1tc2dzdHIgIlZpZGluxJcgR1N0cmVhbWVyIGtsYWlkYToga29kYXMgbmVyZWFsaXp1b3Rhcy4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLSJHU3RyZWFtZXIga2xhaWRhOiBuZXBhdnlrbyBwYWtlaXN0aSBixatzZW5vcyBpciBrYcW+a3VyaWFtIGVsZW1lbnR1aSBuZXBhdnlrbyAiCi0iacWhdmVzdGkgdGlua2FtbyBrbGFpZG9zIHByYW5lxaFpbW8gc3UgbmVzxJdrbcSXcyBwcmllxb5hc3RpbWkuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIlZpZGluxJcgR1N0cmVhbWVyIGtsYWlkYTogcGFncmluZG8ga2xhaWRhLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICJWaWRpbsSXIEdTdHJlYW1lciBrbGFpZGE6IGdpam9zIHByb2JsZW1hLiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJWaWRpbsSXIEdTdHJlYW1lciBrbGFpZGE6IGRlcnlixbMgcHJvYmxlbWEuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiVmlkaW7ElyBHU3RyZWFtZXIga2xhaWRhOiDEr3Z5a2lvIHByb2JsZW1hLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiVmlkaW7ElyBHU3RyZWFtZXIga2xhaWRhOiBpZcWha29qaW1vIGtsYWlkYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgIlZpZGluxJcgR1N0cmVhbWVyIGtsYWlkYTogZ2FsaW15YmnFsyBwcm9ibGVtYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiVmlkaW7ElyBHU3RyZWFtZXIga2xhaWRhOiDFvnltb3MgcHJvYmxlbWEuIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiSsWrc8WzIMSvZGllZ3RhbWUgR1N0cmVhbWVyIHRyxatrc3RhIMSvc2tpZXBpby4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiVmlkaW7ElyBHU3RyZWFtZXIga2xhaWRhOiBsYWlrcm9kxb5pbyBwcm9ibGVtYS4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAixaBpIHByb2dyYW1hIGJhbmRvIG5hdWRvdGkgR1N0cmVhbWVyIGZ1bmtjaWphcywga3VyaW9zIGJ1dm8gacWhanVuZ3Rvcy4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBhcHRpa28gYmVuZHLEhWrEhSBwYWxhaWthbsSNaW9zaW9zIGJpYmxpb3Rla29zIGtsYWlkxIUuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTmVwYXZ5a28gaW5pY2lhbGl6dW90aSBwYWxhaWthbsSNaW9zaW9zIGJpYmxpb3Rla29zLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJOZXBhdnlrbyB1xb52ZXJ0aSBwYWxhaWthbsSNaW9zaW9zIGJpYmxpb3Rla29zLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTmVwYXZ5a28gc3Vrb25maWfFq3J1b3RpIHBhbGFpa2FuxI1pb3Npb3MgYmlibGlvdGVrb3MuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGFwdGlrbyBiZW5kcsSFasSFIGnFoXRla2xpYXVzIGtsYWlkxIUuIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiScWhdGVrbGl1cyBuZXJhc3Rhcy4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJJxaF0ZWtsaXVzIHXFvmltdGFzIGFyYmEgbmVwcmllaW5hbWFzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTmVwYXZ5a28gYXR2ZXJ0aSBpxaF0ZWtsaWF1cyBza2FpdHltdWkuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJOZXBhdnlrbyBhdHZlcnRpIGnFoXRla2xpYXVzIHJhxaF5bXVpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTmVwYXZ5a28gYXR2ZXJ0aSBpxaF0ZWtsaWF1cyBza2FpdHltdWkgaXIgcmHFoXltdWkuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiTmVwYXZ5a28gdcW+dmVydGkgacWhdGVrbGlhdXMuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIk5lcGF2eWtvIHNrYWl0eXRpIGnFoSBpxaF0ZWtsaWF1cy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJOZXBhdnlrbyByYcWheXRpIMSvIGnFoXRla2xpxbMuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5lcGF2eWtvIGF0bGlrdGkgcGFpZcWha29zIGnFoXRla2xpdWplLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5lcGF2eWtvIHNpbmNocm9uaXp1b3RpIHN1IGnFoXRla2xpdW1pLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICJOZXBhdnlrbyBnYXV0aS9udXN0YXR5dGkgacWhdGVrbGlhdXMgcGFyYW1ldHLFsy4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIknFoXRla2xpdWplIG5lYsSXcmEgdmlldG9zLiIKLQotIywgZnV6enkKLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJJxaF0ZWtsaXVqZSBuZWLEl3JhIHZpZXRvcy4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBhcHRpa28gYmVuZHLEhWrEhSBzcmF1dG8ga2xhaWTEhS4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIiIKLSJFbGVtZW50YXMgbmVzdWt1cmlhIHNyYXV0byBhcGRvcm9qaW1vIGdhbGlteWLEl3MuIFByYW5lxaFraXRlIGFwaWUga2xhaWTEhS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAiTmVwYXZ5a28gYXB0aWt0aSBzcmF1dG8gdGlwby4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIlNyYXV0YXMgeXJhIGtpdG9raW8gdGlwbyBuZWd1IMWhaXMgZWxlbWVudGFzIGdhbGkgYXBkb3JvdGkuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICJOxJdyYSBrb2Rla28sIGdhbGluxI1pbyBhcGRvcm90aSDFoWlvIHRpcG8gc3JhdXTEhS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIk5lcGF2eWtvIGRla29kdW90aSBzcmF1dG8uIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJOZXBhdnlrbyBrb2R1b3RpIHNyYXV0by4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiTmVwYXZ5a28gacWhcmV0aW50aSBzcmF1dG8uIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJOZXBhdnlrbyBzdXRhbmtpbnRpIHNyYXV0by4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJTcmF1dGFzIHlyYSBuZXRlaXNpbmdvIGZvcm1hdG8uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlNyYXV0YXMgeXJhIMWhaWZydW90YXMsIG8gacWhxaFpZnJhdmltbyBnYWxpbXlixJcgbmVwYWxhaWtvbWEuIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIlNyYXV0YXMgeXJhIMWhaWZydW90YXMgaXIgbmVnYWxpIGLFq3RpIGnFocWhaWZydW90YXMsIGthZGFuZ2kgbmVidXZvIHBhdGVpa3RhcyAiCi0idGlua2FtYXMgcmFrdGFzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJOxJdyYSBrbGFpZG9zIHByYW5lxaFpbW8gc3JpxI1pYWkgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIk7El3JhIHN0YW5kYXJ0aW5pbyBrbGFpZG9zIHByYW5lxaFpbW8gc3JpxI1pYWkgJXMgaXIga29kdWkgJWQuIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICJQYXNpcmlua3RhcyBsYWlrcm9kaXMgbmVnYWxpIGLFq3RpIG5hdWRvamFtYXMga29udmVqZXJ5amUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAicGF2YWRpbmltYXMiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJiZW5kcmFpIG5hdWRvamFtYXMgcGF2YWRpbmltYXMiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAicGF2YWRpbmltbyByaWtpdW9qYW1hcyBwYXZhZGluaW1hcyIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImJlbmRyYWkgbmF1ZG9qYW1hcyBwYXZhZGluaW1hcyByaWtpYXZpbW8gcmVpa23El21zIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICJhdGxpa8SXamFzIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJhc211byAoLWVueXMpLCBhdHNha2luZ2kgdcW+IMSvcmHFocSFIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJhdGxpa8SXam8gcmlraXVvamFtYXMgcGF2YWRpbmltYXMiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFzbXVvICgtZW55cyksIGF0c2FraW5naSB1xb4gxK9yYcWhxIUgcmlraWF2aW1vIHJlaWttxJdtcyIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICJhbGJ1bWFzIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImFsYnVtYXMgc3UgxaFpYWlzIGR1b21lbmltaXMiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiYWxidW1vIHJpa2l1b2phbWFzIHBhdmFkaW5pbWFzIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsYnVtYXMgc3UgxaFpYWlzIGR1b21lbmltaXMgcmlraWF2aW1vIHJlaWttxJdtcyIKLQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAiYWxidW1vIGF0bGlrxJdqYXMiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgIlZpc28gYWxidW1vIGF0bGlrxJdqYXMsIGtva3MgdHVyaSBixat0aSByb2RvbWFzIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJhbGJ1bW8gYXRsaWvEl2pvIHJpa2l1b2phbWFzIHBhdmFkaW5pbWFzIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICJWaXNvIGFsYnVtbyBhdGxpa8SXamFzLCBrb2tzIHR1csSXdMWzIGLFq3RpIHJpa2l1b2phbWFzIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiZGF0YSIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZGF0YSwga2FkYSBkdW9tZW55cyBidXZvIHN1a3VydGkgKGthaXAgR0RhdGUgc3RydWt0xatyYSkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgImRhdGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXRhLCBrYWRhIGR1b21lbnlzIGJ1dm8gc3VrdXJ0aSAoa2FpcCBHRGF0ZSBzdHJ1a3TFq3JhKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICLFvmFucmFzIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIsW+YW5yYXMsIGt1cmlhbSBwcmlza2lyaWFtaSDFoWllIGR1b21lbnlzIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAia29tZW50YXJhcyIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICJsYWlzdmFzIHRla3N0YXMsIGFwaWLFq2RpbmFudGlzIGR1b21lbmlzIgotCi1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAiacWhcGzEl3N0aW5pcyBrb21lbnRhcmFzIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0ibGFpc3ZhcyB0ZWtzdGFzLCBhcGlixatkaW5hbnRpcyBkdW9tZW5pcyByYWt0YXM9cmVpa8WhbcSXIGFyYmEgIgotInJha3Rhc1tlbl09a29tZW50YXJhcyBmb3JtYSIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAidGFrZWxpbyBudW1lcmlzIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgInRha2VsaW8gbnVtZXJpcyBrb2xla2Npam9qZSIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJ0YWtlbGnFsyBza2FpxI1pdXMiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJ0YWtlbGnFsyBza2FpxI1pdXMga29sZWtjaWpvamUsIGt1cmlhaSBwcmlrbGF1c28gxaFpcyB0YWtlbGlzIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgImRpc2tvIG51bWVyaXMiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJkaXNrbyBudW1lcmlzIGtvbGVrY2lqb2plIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAiZGlza8WzIHNrYWnEjWl1cyIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICJkaXNrxbMgc2thacSNaXVzIGtvbGVrY2lqb2plLCBrdXJpYWkgcHJpa2xhdXNvIMWhaXMgZGlza2FzIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgInZpZXRhIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJNZWRpam9zIMWhYWx0aW5pcyBrYWlwIFVSSSAodmlldGEsIGt1ciBwYXRhbHBpbnRhcyBvcmlnaW5hbHVzIGZhaWxhcyBhcmJhICIKLSJzcmF1dGFzKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICJzdmV0YWluxJciCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICLFoGlvcyBtZWRpam9zIG5hbcWzIHN2ZXRhaW7ElyAodC4geS4gYXRsaWvEl2pvIGFyYmEgZmlsbW8gc3ZldGFpbsSXKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJhcHJhxaF5bWFzIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJ0cnVtcGFzIHRla3N0YXMsIGFwcmHFoWFudGlzIGR1b21lbsWzIHR1cmluxK8iCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzaWphIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgIsWhacWzIGR1b21lbsWzIHZlcnNpamEiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0iVGFycHRhdXRpbmlzIHN0YW5kYXJ0aW5pcyDEr3JhxaHFsyBrb2RhcyDigJMgxb5pxatyxJdraXRlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXphY2lqYSIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiYXV0b3JpYXVzIHRlaXPEl3MiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJwcmFuZcWhaW1hcyBhcGllIGR1b21lbsWzIGF1dG9yaWF1cyB0ZWlzZXMiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJhdXRvcmlhdXMgdGVpc2nFsyB1cmkiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSwga3VyIHlyYSBwcmFuZcWhaW1hcyBhcGllIGR1b21lbsWzIGF1dG9yaWF1cyB0ZWlzZXMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAiZW5rb2RlcmlzIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAia29udGFrdGFpIgotCi1tc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAia29udGFrdGluxJcgaW5mb3JtYWNpamEiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaWNlbmNpamEiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImR1b21lbsWzIGxpY2VuY2lqYSIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJsaWNlbmNpam9zIHVyaSIKLQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJLCBrdXIgeXJhIGR1b21lbsWzIGxpY2VuY2lqYSIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAiYXRsaWvEl2phcyIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJhdGxpZWthbnRpcyAoLXlzKSBhc211byAoLWVueXMpIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgImtvbXBveml0b3JpdXMiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgImFzbXVvICgtZW55cyksIGt1cmlzICgtaWUpIHN1a8WrcsSXIMSvcmHFocSFIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJ0cnVrbcSXIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgInRydWttxJcgR1N0cmVhbWVyIGxhaWtvIHZpZW5ldGFpcyAobmFub3Nla3VuZMSXbWlzKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJrb2Rla2FzIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2Rla2FzLCBrdXJpYW1lIGxhaWtvbWkgZHVvbWVueXMiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAidmFpemRvIGtvZGVrYXMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgInZhaXpkbyBrb2Rla2FzLCBrdXJpYW1lIGxhaWtvbWkgZHVvbWVueXMiCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAiZ2Fyc28ga29kZWthcyIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiZ2Fyc28ga29kZWthcywga3VyaWFtZSBsYWlrb21pIGR1b21lbnlzIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgInN1YnRpdHLFsyBrb2Rla2FzIgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2Rla2FzLCBrdXJpYW1lIGxhaWtvbWkgc3VidGl0csWzIGR1b21lbnlzIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAia29udGVpbmVyaW8gZm9ybWF0YXMiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29udGVpbmVyaW8gZm9ybWF0YXMsIGt1cmlhbWUgbGFpa29taSBkdW9tZW55cyIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgInByYWxhaWR1bWFzIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAidGlrc2x1cyBhcmJhIHZpZHV0aW5pcyBwcmFsYWlkdW1hcyBiaXRhaXMgcGVyIHNla3VuZMSZIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJub21pbmFsdXMgcHJhbGFpZHVtYXMiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJub21pbmFsdXMgcHJhbGFpZHVtYXMgYml0YWlzIHBlciBzZWt1bmTEmSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWHFvmlhdXNpYXMgcHJhbGFpZHVtYXMiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtYcW+aWF1c2lhcyBwcmFsYWlkdW1hcyBiaXRhaXMgcGVyIHNla3VuZMSZIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJkaWTFvmlhdXNpYXMgcHJhbGFpZHVtYXMiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJkaWTFvmlhdXNpYXMgcHJhbGFpZHVtYXMgYml0YWlzIHBlciBzZWt1bmTEmSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImVua29kZXJpcyIKLQotbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgImVua29kZXJpcywgbmF1ZG90YXMgxaFpYW0gc3JhdXR1aSBrb2R1b3RpIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJlbmtvZGVyaW8gdmVyc2lqYSIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgImVua29kZXJpbywgbmF1ZG90byDFoWlhbSBzcmF1dHVpIGtvZHVvdGksIHZlcnNpamEiCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgInNlcmlqYSIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgInRha2VsaW8gc2VyaWpvcyBudW1lcmlzIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICJyZXBsYXlnYWluIHRha2VsaW8gc3RpcHJpbmltYXMiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJ0YWtlbGlvIHN0aXByaW5pbWFzIGRlY2liZWxhaXMiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgInJlcGxheWdhaW4gdGFrZWxpbyB2aXLFocWrbsSXIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgInRha2VsaW8gdmlyxaHFq27ElyIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAicmVwbGF5Z2FpbiBhbGJ1bW8gc3RpcHJpbmltYXMiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJhbGJ1bW8gc3RpcHJpbmltYXMgZGVjaWJlbGFpcyIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAicmVwbGF5Z2FpbiBhbGJ1bW8gdmlyxaHFq27ElyIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJhbGJ1bW8gdmlyxaHFq27ElyIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICJyZXBsYXlnYWluIHNhbnR5a2luaXMgbHlnaXMiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICJ0YWtlbGlvIGlyIGFsYnVtbyBzdGlwcmluaW1vIHJlaWvFoW1pxbMgc2FudHlraW5pcyBseWdpcyIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgImthbGJvcyBrb2RhcyIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICLFoWlvIHNyYXV0byBrYWxib3Mga29kYXMsIGF0aXRpbmthbnRpcyBJU08tNjM5LTEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAia2FsYm9zIGtvZGFzIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJwYXZlaWtzbMSXbGlzIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAicGF2ZWlrc2zEl2xpcywgc3VzaWV0YXMgc3Ugc3JhdXR1IgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJwZXLFvmnFq3JvcyBwYXZlaWtzbMSXbGlzIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJwZXLFvmnFq3JvcyBwYXZlaWtzbMSXbGlzLCBzdXNpasSZcyBzdSBzcmF1dHUiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJwcmllZGFzIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZmFpbGFzLCBwcmlkxJd0YXMgcHJpZSBzcmF1dG8iCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICJ0YWt0xbMgcGVyIG1pbnV0xJkiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAidGFrdMWzIHNrYWnEjWl1cyBwZXIgbWludXTEmSBnYXJzbyDEr3JhxaFlIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgInJha3Rhxb5vZMW+aWFpIgotCi1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgImthYmxlbGlhaXMgc2tpcmlhbWkgcmFrdGHFvm9kxb5pYWksIGFwcmHFoWFudHlzIHR1cmluxK8iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyBwYXZhZGluaW1hcyIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICJhacWha3VzIHZpZXRvdsSXcywga3VyaW9qZSBtZWRpamEgYnV2byDEr3JhxaF5dGEgYXJiYSBzdWt1cnRhLCBhcHJhxaF5bWFzIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICJnZW9ncmFmaW7El3MgdmlldG9zIHBsYXR1bWEiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSJ2aWV0b3bEl3MgcGxhdHVtYSwga3VyIG1lZGlqYSBidXZvIMSvcmHFoXl0YSBhcmJhIHN1a3VydGEsIGxhaXBzbmlhaXMgcGFnYWwgIgotIldHUzg1IChudWxpcyB0aWVzIHB1c2lhdWp1LCBuZWlnaWFtb3MgcmVpa8WhbcSXcyDigJMgcGlldGluxJdtcyBwbGF0dW1vbXMpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyBpbGd1bWEiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0idmlldG92xJdzIGlsZ3VtYSwga3VyIG1lZGlqYSBidXZvIMSvcmHFoXl0YSBhcmJhIHN1a3VydGEsIGxhaXBzbmlhaXMgcGFnYWwgIgotIldHUzg0IChudWxpcyB0aWVzIHBpcm11b2p1IG1lcmlkaWFudSBHcmludmnEjWUvSkssIG5laWdpYW1vcyByZWlrxaFtxJdzIOKAkyAiCi0icnl0aW7El21zIGlsZ3Vtb21zKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgImdlb2dyYWZpbsSXcyB2aWV0b3MgYXVrxaF0dW1hIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotImF1a8WhdHVtYSwga3VyIG1lZGlqYSBidXZvIMSvcmHFoXl0YSBhcmJhIHN1a3VydGEsIG1ldHJhaXMgcGFnYWwgV0dTODQgKG51bGlzIOKAkyAiCi0idmlkdXRpbmlzIGrFq3JvcyBseWdpcykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiZ2VvZ3JhZmluxJcgdmlldG9zIMWhYWxpcyIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0ixaFhbGlzIChhbmdsacWha2FzIHBhdmFkaW5pbWFzKSwga3VyaW9qZSBtZWRpamEgYnV2byDEr3JhxaF5dGEgYXJiYSBzdWt1cnRhIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgImdlb2dyYWZpbsSXcyB2aWV0b3MgbWllc3RhcyIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0ibWllc3RhcyAoYW5nbGnFoWthcyBwYXZhZGluaW1hcyksIGt1cmlhbWUgbWVkaWphIGJ1dm8gxK9yYcWheXRhIGFyYmEgc3VrdXJ0YSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyBzdWJsb2thY2lqYSIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotInZpZXRvdmUgbWllc3RlLCBrdXJpYW1lIG1lZGlqYSBidXZvIHBhZ2FtaW50YSBhcmJhIHN1a3VydGEsIChwdnouLCAiCi0ia2FpbXlueXN0xJcpIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJnZW9ncmFmaW7El3MgdmlldG9zIHBhdmFkaW5pbWFzIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyBqdWTEl2ppbW8gZ3JlaXRpcyIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAixK9yYcWhYW7EjWlvIHByaWV0YWlzbyBqdWTEl2ppbW8gZ3JlaXRpcyBtL3MgxK9yYcWhaW7El2phbnQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJnZW9ncmFmaW7El3MgdmlldG9zIGp1ZMSXamltbyBrcnlwdGlzIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0ibnVyb2RvIG1lZGlqxIUgxK9yYcWhYW7EjWlvIHByaWV0YWlzbyBqdWTEl2ppbW8ga3J5cHTEry4gSmkgbnVyb2RvbWEgbGFpcHNuaWFpcyAiCi0ic2xhbmthdXMga2FibGVsaW8gcGF2aWRhbHUsIOKAnjDigJwgcmVpxaFraWEgxaFpYXVyxJksIHJlaWvFoW3ElyBkaWTEl2phIHBhZ2FsICIKLSJsYWlrcm9kxb5pbyByb2R5a2zEmSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAiZ2VvZ3JhZmluxJdzIHZpZXRvcyDEr3JhxaF5bW8ga3J5cHRpcyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotIm51cm9kbyBrcnlwdMSvLCBrdXJpYSBudWtyZWlwdGFzIG1lZGlqxIUgxK9yYcWhYW50aXMgxK9yZW5naW55cy4gUGF0ZWlraWFtYSAiCi0ibGFpcHNuaWFpcyBzbGFua2F1cyBrYWJsZWxpbyBwYXZpZGFsdSwg4oCeMOKAnCByZWnFoWtpYSBnZW9ncmFmaW7EmSDFoWlhdXLEmSwgIgotInJlaWvFoW3ElyBkaWTEl2phIHBhZ2FsIGxhaWtyb2TFvmlvIHJvZHlrbMSZIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgImxhaWRvcyBwYXZhZGluaW1hcyIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIlR2IC8gdGlua2xhbGFpZMSXcyAvIHNlcmlhbG8sIGnFoSBrdXJpbyB5cmEgbWVkaWphLCBsYWlkb3MgcGF2YWRpbmltYXMiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgImxhaWRvcyByaWtpdW9qYW1hcyBwYXZhZGluaW1hcyIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotIlR2IC8gdGlua2xhbGFpZMSXcyAvIHNlcmlhbG8sIGnFoSBrdXJpbyB5cmEgbWVkaWphLCBsYWlkb3MgcGF2YWRpbmltYXMgIgotInJpa2lhdmltbyByZWlrbcSXbXMiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAiZXBpem9kbyBudW1lcmlzIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIlNlem9ubywga3VyaWFtIHByaWtsYXVzbyBtZWRpamEsIGVwaXpvZG8gbnVtZXJpcyIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgInNlem9ubyBudW1lcmlzIgotCi1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIkxhaWRvcyBzZXpvbm8sIGt1cmlhbSBwcmlrbGF1c28gbWVkaWphLCBudW1lcmlzIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICLFvm9kxb5pYWkiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIk1lZGlqb3Mgxb5vZMW+aWFpLCBkYcW+bmlhdXNpYWkgbmF1ZG9qYW1hIGRhaW5vbXMiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAia29tcG96aXRvcmlhdXMgcmlraXVvamFtYXMgdmFyZGFzIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiYXNtZW5zICgtZW7FsyksIGt1cmlzICgtaWUpIHN1a8WrcsSXIMSvcmHFocSFLCB2YXJkYXMgcmlraWF2aW1vIHJlaWttxJdtcyIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICJncnVwYXZpbWFzIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iR3J1cHVvamEgc3VzaWp1c2lhcyBtZWRpamFzLCBzdXNpZGVkYW7EjWlhcyBpxaEgZGF1Z2VsaW8gdGFrZWxpxbMsIHB2ei4sICIKLSJza2lydGluZ2FzIGtvbmNlcnRvIGRhbGlzLiBUYWkgYXVrxaF0ZXNuaXMgbHlnbXVvIG5laSB0YWtlbGlzLCBiZXQgxb5lbWVzbmlzICIKLSJuZWkgYWxidW1hcyIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJuYXVkb3Rvam8gxK92ZXJ0aW5pbWFzIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJOYXVkb3Rvam8gbnVyb2R5dGFzIMSvdmVydGluaW1hcy4gS3VvIGdlcmVzbmlzIMSvdmVydGluaW1hcywgdHVvIGxhYmlhdSAiCi0ibmF1ZG90b2phcyBtxJdnc3RhIMWhacSFIG1lZGlqxIUiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICLEr3JlbmdpbmlvIGdhbWludG9qYXMiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLErnJlbmdpbmlvLCBuYXVkb3RvIMWhaWFpIG1lZGlqYWkgc3VrdXJ0aSwgZ2FtaW50b2phcyIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAixK9yZW5naW5pbyBtb2RlbGlzIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLErnJlbmdpbmlvLCBuYXVkb3RvIMWhaWFpIG1lZGlqYWkgc3VrdXJ0aSwgbW9kZWxpcyIKLQotIywgZnV6enkKLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJnZW9ncmFmaW7El3MgdmlldG9zIHBhdmFkaW5pbWFzIgotCi0jLCBmdXp6eQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAixK5yZW5naW5pbywgbmF1ZG90byDFoWlhaSBtZWRpamFpIHN1a3VydGksIG1vZGVsaXMiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAicGF2ZWlrc2zEl2xpbyBvcmllbnRhY2lqYSIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiS2FpcCBwYXZlaWtzbMSXbGlzIHR1csSXdMWzIGLFq3RpIHBhc3VrdGFzIGFyYmEgYXB2ZXJzdGFzIHByaWXFoSBwYXJvZHltxIUiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIktMQUlEQTogacWhIGVsZW1lbnRvICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIlBhcGlsZG9tYSBkZXJpbmltbyBpbmZvcm1hY2lqYTpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJuZW51cm9keXRhIHNhdnlixJcg4oCeJXPigJwgZWxlbWVudGUg4oCeJXPigJwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJuZXBhdnlrbyBudXN0YXR5dGkgc2F2eWLEl3Mg4oCeJXPigJwgZWxlbWVudGUg4oCeJXPigJwgxK8g4oCeJXPigJwiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJuZXBhdnlrbyBzdXNpZXRpICVzIHN1ICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJuxJdyYSBlbGVtZW50byDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAibmVwYXZ5a28gcGVyc2thaXR5dGkgZ2FsaW15YmnFsyDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm7El3JhIGnFoXZlc3RpZXMgZWxlbWVudG8gVVJJIOKAniVz4oCcIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJuxJdyYSDFoWFsdGluaW8gZWxlbWVudG8gVVJJIOKAniVz4oCcIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJudXJvZHl0YXMgdHXFocSNaWFzIGTEl2tsYXMg4oCeJXPigJwsIG5lbGVpZMW+aWFtYSIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJuxJdyYSBkxJdrbG8g4oCeJXPigJwsIHByYWxlaWTFvmlhbWEiCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAidHXFocSNaWFzIGtvbnZlamVyaXMgbmVsZWlkxb5pYW1hcyIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJBdGxhaXN2aW5hbWEgZGF1ZyBidWZlcmnFsy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIlZpZGluxJcgZHVvbWVuxbMgdMSXa23El3MgcHJvYmxlbWEuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiVmlkaW7ElyBkdW9tZW7FsyB0xJdrbcSXcyBrbGFpZGEuIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICJWaWRpbsSXIGxhaWtyb2TFvmlvIGtsYWlkYS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJGaWx0cnVvdGkgZ2FsaW15YmVzIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLSJSaWJvdGkgZ2FsaW1hcyBsZWlkxb5pYW1hcyBnYWxpbXliZXMgKE5VTEwg4oCTIEJFVCBLT0tJQVMpLiBOdXN0YXRhbnQgxaFpxIUgIgotInNhdnlixJkgbnVyb2RvbWEgxK8gcGF0ZWlrdMSFIEdzdENhcHMgb2JqZWt0xIUuIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiTmVudXJvZHl0YXMgbGFpa2luYXMga2F0YWxvZ2FzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJOZXBhdnlrbyBzdWt1cnRpIGxhaWtpbm8gZmFpbG8g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTmVwYXZ5a28gYXR2ZXJ0aSBmYWlsbyDigJ4lc+KAnCBza2FpdHltdWkuIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiS2xhaWRhIHJhxaFhbnQgxK8gYXRzaXVudGltbyBmYWlsxIUuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5lbnVyb2R5dGFzIGZhaWxvIHBhdmFkaW5pbWFzIHJhxaF5bXVpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5lcGF2eWtvIGF0dmVydGkgZmFpbG8g4oCeJXPigJwgcmHFoXltdWkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJLbGFpZGEgdcW+dmVyaWFudCBmYWlsxIUg4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJLbGFpZGEgaWXFoWthbnQgZmFpbGUg4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJLbGFpZGEgcmHFoWFudCDEryBmYWlsxIUg4oCeJXPigJwuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk5lbnVyb2R5dGFzIGZhaWxvIHBhdmFkaW5pbWFzIHNrYWl0eW11aS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIk5lcGF2eWtvIGdhdXRpIGR1b21lbsWzIGFwaWUg4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIuKAniVz4oCcIHlyYSBrYXRhbG9nYXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiRmFpbGFzIOKAniVz4oCcIHlyYSBsaXpkYXMuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiTmVzxJdrbcSXIHBvIGl0ZXJhY2lqxbMga2FpcCBpciByZWlrYWxhdXRhLiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgImdhbGlteWLEl3MiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJhcHRpa3RvcyBnYWxpbXlixJdzIHNyYXV0ZSIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIm1hxb5pYXVzaW9zIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAicmVpa2FsYXV0aSBnYWxpbXliacWzIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgInByaXZlcnN0aW5haSBuYXVkb3RpIGdhbGlteWJlcyBuZWF0bGlla2FudCB0aXBvIHBhaWXFoWtvcyIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiU3JhdXRlIG7El3JhIGR1b21lbsWzLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiU3JhdXRlIG7El3JhIGR1b21lbsWzLiIKLQotbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCi1tc2dzdHIgIlJlYWxpenVvdG9zIHPEhXNham9zOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgInNrYWl0b21hcyIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICJyYcWhb21hcyIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAidmFsZG9tYXMiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiRmFpbGFpIGp1b2RhamFtZSBzxIVyYcWhZToiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJCZW5kcmFzIHNrYWnEjWl1czoiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkIGZhaWxhcyBqdW9kYWphbWUgc8SFcmHFoWUiCi1tc2dzdHJbMV0gIiVkIGZhaWxhaSBqdW9kYWphbWUgc8SFcmHFoWUiCi1tc2dzdHJbMl0gIiVkIGZhaWzFsyBqdW9kYWphbWUgc8SFcmHFoWUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCDEr3NraWVwaXMiCi1tc2dzdHJbMV0gIiVkIMSvc2tpZXBpYWkiCi1tc2dzdHJbMl0gIiVkIMSvc2tpZXBpxbMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQganVvZG9qbyBzxIVyYcWhbyDEr3JhxaFhcyIKLW1zZ3N0clsxXSAiJWQganVvZG9qbyBzxIVyYcWhbyDEr3JhxaFhaSIKLW1zZ3N0clsyXSAiJWQganVvZG9qbyBzxIVyYcWhbyDEr3JhxaHFsyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgZnVua2NpamEiCi1tc2dzdHJbMV0gIiVkIGZ1bmtjaWpvcyIKLW1zZ3N0clsyXSAiJWQgZnVua2NpasWzIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJJxaF2ZXN0aSB2aXN1cyBlbGVtZW50dXMiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJJxaF2ZXN0aSBmYWlsdXMganVvZGFqYW1lIHPEhXJhxaFlIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJJxaFzcGF1c2RpbnRpIG1hxaFpbmluaXUgYsWrZHUgcGVyc2thaXRvbcSFIHPEhXJhxaHEhSBmdW5rY2lqxbMsIGt1cmlhcyBzdXRlaWtpYSAiCi0ibnVyb2R5dGFzaXMgYXJiYSB2aXNpIMSvc2tpZXBpYWkuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF1ZGluZ2EgbmF1ZG9qYW50IHN1IGnFoW9yaW5pYWlzICIKLSJhdXRvbWF0aW5pYWlzIMSvc2tpZXBpxbMgZGllZ2ltbyBtZWNoYW5pem1haXMiCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIlBhcm9keXRpIMSvc2tpZXBpbyB0dXJpbsSvIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiScWhdmVzdGkgcGFsYWlrb21hcyBVUkkgc2NoZW1hcyBzdSBqYXMgc3VrdXJpYW7EjWlhaXMgZWxlbWVudGFpcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiTmVwYXZ5a28gxK9rZWx0aSDEr3NraWVwaW8gZmFpbG86ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIk7El3JhIHRva2lvIGVsZW1lbnRvIGFyYmEgxK9za2llcGlvIOKAniVz4oCcXG4iCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJHYXV0YXMgcHJhbmXFoWltYXMgIyV1IGnFoSBlbGVtZW50byDigJ4lc+KAnCAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIkdhdXRhcyBwcmFuZcWhaW1hcyAjJXUgacWhIHBhZ3JpbmRvIOKAniVzOiVz4oCcICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiR2F1dGFzIHByYW5lxaFpbWFzICMldSBpxaEgb2JqZWt0byDigJ4lc+KAnCAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiR2F1dGFzIHByYW5lxaFpbWFzICMldSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJHYXV0YXMgRU9TIGnFoSBlbGVtZW50byDigJ4lc+KAnC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJSQVNUQSDFvVlNQSAgICAgIDogcmFzdGEgZWxlbWVudG8g4oCeJXPigJwuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICJSQVNUQSDFvVlNQSAgICAgIDogcmFzdGEgcGFncmluZG8g4oCeJXM6JXPigJwuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJSQVNUQSDFvVlNQSAgICAgIDogcmFzdGEgb2JqZWt0byDigJ4lc+KAnC5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJSQVNUQSDFvVlNQVxuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJSQVNUQSDFvVlNQSAgICAgIDogcmFzdGEgZWxlbWVudG8g4oCeJXPigJwuXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiUkFTVEEgxb1ZTUEgICAgICA6IHJhc3RhIG9iamVrdG8g4oCeJXPigJwuXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIlJBU1RBIMW9WU1BXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk9STUFDSUpBOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICLErlNQxJZKSU1BUzogacWhIGVsZW1lbnRvICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlBhcnVvxaF0YSwgbGF1a2lhbWEga29sIGJ1cyBzdWt1cnRhcyBidWZlcmlzLi4uXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiUGFydW/FoXRhLCBsYXVraWFtYSBrb2wgYnVzIHN1a3VydGFzIGJ1ZmVyaXMuLi5cbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAia3VyaWFtYXMgYnVmZXJpcy4uLiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIkJ1ZmVyaXMgc3VrdXJ0YXMsIGtvbnZlamVyaXMgbnVzdGF0b21hcyBHUk9KSU1VSS4uLlxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiS3VyaWFtYXMgYnVmZXJpcywga29udmVqZXJpcyBudXN0YXRvbWFzIMSvIFBSSVNUQUJEWVTEhC4uLlxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiUGVyc2tpcnN0eXRpIGdhacWhdGllcyBsYWlrxIUuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJOdXN0YXRvbWEgYsWrc2VuYSDEryAlcywga2FpcCBwcmHFocSXICVzLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJQZXJ0cmF1a2ltYXM6IHN0YWJkb21hcyBrb252ZWplcmlzLi4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIm7El3JhIGVsZW1lbnRvIOKAniVz4oCcIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAixK5TUMSWSklNQVM6IGnFoSBlbGVtZW50byAlczogJXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiScWhdmVzdGkgxb55bWFzIChkYXIgxb5pbm9tYXMga2FpcCBtZXRhZHVvbWVueXMpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiScWhdmVzdGkgYsWrc2Vub3MgaW5mb3JtYWNpasSFIGlyIHNhdnliacWzIHByYW5lxaFpbXVzIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiTmVpxaF2ZXN0aSBqb2tpb3MgaW5mb3JtYWNpam9zIGFwaWUgcGHFvmFuZ8SFIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICJJxaF2ZXN0aSBwcmFuZcWhaW11cyIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgIk5lxK9kaWVndGkga2xhaWTFsyBhcGRvcm9qaW1vIHBvc2lzdGVtxJdzIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICJQcml2ZXJzdGluYWkgbmF1ZG90aSBFT1MgxaFhbHRpbml1b3NlIHByaWUgacWhanVuZ2lhbnQga29udmVqZXLEryIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICJLTEFJREE6IG5lcGF2eWtvIHN1a3VydGkga29udmVqZXJpbzogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICJLTEFJREE6IG5lcGF2eWtvIHN1a3VydGkga29udmVqZXJpby5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIsSuU1DElkpJTUFTOiBrbGFpZGluZ2FzIGtvbnZlamVyaXM6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIktMQUlEQTog4oCecGlwZWxpbmXigJwgZWxlbWVudGFzIG5lcmFzdGFzLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIk51c3RhdG9tYXMga29udmVqZXJpcyDEryBQUklTVEFCRFlUxIQuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIktMQUlEQToga29udmVqZXJpcyBuZXNpbGVpZMW+aWEgcHJpc3RhYmRvbWFzLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICJLb252ZWplcmlzIGFrdHl2dXMgaXIgbmVyZWlrYWxhdWphIFBBUlVPxaBJTU8uLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIktvbnZlamVyaXMgUlVPxaBJQU1BUy4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJLTEFJREE6IGtvbnZlamVyaXMgbmVzaWxlaWTFvmlhIHBhcnVvxaFpYW1hcy5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiS29udmVqZXJpcyBQQVJVT8WgVEFTLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIk51c3RhdG9tYXMga29udmVqZXJpcyDEryBHUk9KQU1BLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIktMQUlEQToga29udmVqZXJpcyBuZXByYWRlZGEgZ3JvdGkuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAixK5qdW5ndGFzIEVPUyBpxaFqdW5naWFudCDigJMgcHJpdmVyc3RpbmFpIG5hdWRvamFtYSBFT1Mga29udmVqZXJ5amVcbiIKLQotIywgZnV6enkKLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAixK5qdW5ndGFzIEVPUyBpxaFqdW5naWFudCDigJMgcHJpdmVyc3RpbmFpIG5hdWRvamFtYSBFT1Mga29udmVqZXJ5amVcbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICJMYXVraWFtYSBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyBnYXV0YXMg4oCTIHN0YWJkb21hcyBrb252ZWplcmlzLi4uXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIlBlcnRyYXVraW1hczogc3RhYmRvbWFzIGtvbnZlamVyaXMuLi5cbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICLErnZ5a28ga2xhaWRhIGxhdWtpYW50IEVPU1xuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIlZ5a2R5bWFzIGJhaWfEl3NpIHBvICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICJOdXN0YXRvbWFzIGtvbnZlamVyaXMgxK8gUEFSVU/FoFRBLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIk51c3RhdG9tYXMga29udmVqZXJpcyDEryBOVUxMLi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJBdGxhaXN2aW5hbWFzIGtvbnZlamVyaXMuLi5cbiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiVmlkaW7ElyBkdW9tZW7FsyBzcmF1dG8ga2xhaWRhLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIk5lacWhdmVzdGkgxaFpbyBUSVBPIGLFq3Nlbm9zIGluZm9ybWFjaWpvcyIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVElQQVMxLFRJUEFTMiwuLi4iCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgInNhaXRhcyBiZSDFoWFsdGluaW8gZWxlbWVudG8iCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgotI34gbXNnc3RyICJzYWl0YXMgYmUgacWhdmVzdGllcyBlbGVtZW50byIKLQotI34gbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgotI34gbXNnc3RyICJuxJdyYSBlbGVtZW50bywgc3Uga3VyaXVvIHN1c2lldGkgVVJJIOKAniVz4oCcIgotCi0jfiBtc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotI34gbXNnc3RyICJuZXBhdnlrbyBzdXNpZXRpIGnFoXZlc3RpZXMgZWxlbWVudG8gVVJJIOKAniVz4oCcIgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiScWhdmVzdGkgYWxsb2Mgc2VraW3EhSAoamVpIMSvanVuZ3RhIGtvbXBpbGlhdmltbyBtZXR1KSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJOYXVkb2ppbWFzOiBnc3QteG1sbGF1bmNoIDxmYWlsYXMueG1sPiBbIGVsZW1lbnRhcy5zYXZ5YsSXPXJlaWvFoW3ElyAuLi4gXVxuIgotCi0jfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgotI34gbXNnc3RyICJLTEFJREE6IG5lcGF2eWtvIHBlcnNrYWl0eXRpIHhtbCBmYWlsbyDigJ4lc+KAnC5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKLSN+IG1zZ3N0ciAiS0xBSURBOiBuxJdyYSBhdWvFocSNaWF1c2lvIGx5Z21lbnMga29udmVqZXJpbyBlbGVtZW50byBmYWlsZSDigJ4lc+KAnC5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIsSuU1DElkpJTUFTOiDFoWl1byBtZXR1IHBhbGFpa29tYXMgdGlrIHZpZW5hcyBhdWvFocSNaWF1c2lvIGx5Z21lbnMgIgotI34gImVsZW1lbnRhcy5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiS0xBSURBOiBuZXBhdnlrbyBhcGRvcm90aSBrb21hbmRpbsSXcyBlaWx1dMSXcyBhcmd1bWVudG8gJWQ6ICVzLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKLSN+IG1zZ3N0ciAixK5TUMSWSklNQVM6IG5lcmFzdGFzIGVsZW1lbnRhcyDigJ4lc+KAnC5cbiIKLQotI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCi0jfiBtc2dzdHIgIsSucmHFoXl0aSBrb252ZWplcmlvIHhtbCBhdGl0aWttZW7EryDEryBGQUlMxIQgaXIgacWhZWl0aSIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkZBSUxBUyIKLQotI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKLSN+IG1zZ3N0ciAiIgotI34gIk5lxK9kaWVndGkgc2lnbmFsxbMgYXBkb3JvamltbyBwb3Npc3RlbcSXcyBzaWduYWxhbXMgU0lHVVNSMSBpciBTSUdVU1IyIgpkaWZmIC0tZ2l0IGEvcG8vbmIuZ21vIGIvcG8vbmIuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTM4YzUxLi4wMDAwMDAwCi0tLSBhL3BvL25iLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL25iLnBvIGIvcG8vbmIucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YjI4MTUuLjAwMDAwMDAKLS0tIGEvcG8vbmIucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzI1ICswLDAgQEAKLSMgTm9yd2VnaWFuIGJva21hYWwgdHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyLgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBLamFydGFuIE1hcmFhcyA8a21hcmFhc0Bnbm9tZS5vcmc+LCAyMDA0LTIwMTAuCi0jIEpvaG5ueSBBLiBTb2xidSA8am9obm55QHNvbGJ1Lm5ldD4sIDIwMTUtMjAxNgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDEuNy45MFxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTEwLTA4IDIxOjI2KzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEpvaG5ueSBBLiBTb2xidSA8am9obm55QHNvbGJ1Lm5ldD5cbiIKLSJMYW5ndWFnZS1UZWFtOiBOb3J3ZWdpYW4gQm9rbWFhbCA8aTE4bi1uYkBsaXN0ZXIucGluZy51aW8ubm8+XG4iCi0iTGFuZ3VhZ2U6IG5iX05PXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1CdWdzOiBSZXBvcnQgdHJhbnNsYXRpb24gZXJyb3JzIHRvIHRoZSBMYW5ndWFnZS1UZWFtIGFkZHJlc3MuXG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCi0iWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjguNy4xXG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIlNrcml2IHV0IHZlcnNqb25zbnVtbWVyIGZvciBHU3RyZWFtZXIiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiTGEgYWxsZSBhZHZhcnNsZXIgdsOmcmUgZmF0YWxlIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIlNrcml2IHV0IHRpbGdqZW5nZWxpZ2UgZmVpbHPDuGtpbmdza2F0ZWdvcmllciBvZyBhdnNsdXR0IgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iU3RhbmRhcmQgZmVpbHPDuGtpbmdzbml2w6UgZnJhIDEgKGt1biBmZWlsKSB0aWwgOSAobm9lKSBlbGxlciAwIGZvciBpbmdlbiAiCi0idXRkYXRhIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIk5JVsOFIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIktvbW1hc2VwYXJlcnQgbGlzdGUgb3ZlciBrYXRlZ29yaV9uYXZuOm5pdsOlcGFyIGZvciDDpSBzZXR0ZSBzcGVzaWZpa2tlIG5pdsOlZXIgIgotImZvciBkZSBlbmtlbHRlIGthdGVnb3JpZW5lLiBFa3NlbXBlbDogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotCi1tc2dpZCAiTElTVCIKLW1zZ3N0ciAiTElTVEUiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiRGVha3RpdmVyIGZhcmdldCBmZWlsc8O4a2luZ3NpbmZvcm1hc2pvbiIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0iRW5kcmVyIGZhcmdlbW9kdXMgZm9yIGZlaWxzw7hraW5nIGxvZ2cuIE11bGlnZSBtb2R1c2VyOiBhdiwgcMOlLCBkZWFrdGl2ZXIsICIKLSJhdXRvLCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIlNsw6UgYXYgZmVpbHPDuGtpbmciCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiQWt0aXZlciB1dGbDuHJsaWcgZGlhZ25vc3Rpa2sgdmVkIGxhc3RpbmcgYXYgcHJvZ3JhbXRpbGxlZ2ciCi0KLW1zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgotbXNnc3RyICJLb2xvbi1zZXBhcmVydGUgc3RpZXIgc29tIGlubmVob2xkZXIgcHJvZ3JhbXRpbGxlZ2ciCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiU1RJRVIiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0iS29tbWFzZXBhcmVydCBsaXN0ZSBhdiBwcm9ncmFtdGlsbGVnZyB0aWwgw6UgZm9yaMOlbmRzbGFzdGUgaSB0aWxsZWdnIHRpbCAiCi0ibGlzdGVuIHNvbSBlciBsYWdyZXQgaSBtaWxqw7h2YXJpYWJlbGVuIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIlRJTExFR0ciCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICJEZWFrdGl2ZXIgZmFuZ3N0IGF2IHNlZ21lbnRlcmluZ3NmZWlsIHVuZGVyIHByb2dyYW10aWxsZWdnbGFzdGluZyIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJEZWFrdGl2ZXIgb3BwZGF0ZXJpbmcgYXYgcmVnaXN0ZXJldCIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIkRlYWt0aXZlciBmb3JncmVuaW5nIGF2IGhqZWxwZXJwcm9zZXNzIHVuZGVyIHNjYW5uaW5nIGF2IHJlZ2lzdGVyZXQiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiR1N0cmVhbWVyLWZsYWdnIgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiVmlzIGZsYWdnIGZvciBHU3RyZWFtZXIiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiVWtqZW50IGZsYWdnIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbcO4dHRlIGVuIGdlbmVyZWxsIGtqZXJuZWJpYmxpb3Rla3NmZWlsLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVydXR2aWtsZXJuZSB2YXIgZm9yIGxhdCB0aWwgw6UgdGlsZGVsZSBkZW5uZSBmZWlsZW4gZW4gZmVpbGtvZGUgLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyZmVpbDoga29kZSBpa2tlIGltcGxlbWVudGVydC4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLSJHU3RyZWFtZXJmZWlsOiBzdGF0dXNlbmRyaW5nIG1pc2x5a3RlcyBvZyBub2VuIGVsZW1lbnQgbWlzbHlrdGVzIGkgw6UgbGVnZ2UgIgotImlubiBlbiBza2lra2VsaWcgZmVpbG1lbGRpbmcgbWVkIMOlcnNha2VuIHRpbCBzdmlrdGVuLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyZmVpbDogdXRmeWxsaW5nc3Byb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybiBHU3RyZWFtZXJmZWlsOiB0csOlZHByb2JsZW0uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lcmZlaWw6IGZvcmhhbmRsaW5nc3Byb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lcmZlaWw6IGhlbmRlbHNlc3Byb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm4gR1N0cmVhbWVyZmVpbDogc8O4a2Vwcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lcmZlaWw6IGNhcHMtcHJvYmxlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuIEdTdHJlYW1lcmZlaWw6IHRhZ2dwcm9ibGVtLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIkdTdHJlYW1lcmluc3RhbGxhc2pvbmVuIGRpbiBtYW5nbGVyIGV0IHByb2dyYW10aWxsZWdnLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybiBHU3RyZWFtZXJmZWlsOiBrbG9ra2Vwcm9ibGVtLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iRGV0dGUgcHJvZ3JhbW1ldCBwcsO4dmVyIMOlIGJydWtlIEdTdHJlYW1lcmZ1bmtzam9uYWxpdGV0IHNvbSBoYXIgYmxpdHQgIgotImRlYWt0aXZlcnQuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgaGFyIG3DuHR0IGV0IGdlbmVyZWx0IHN0w7h0dGViaWJsaW90ZWtzZmVpbC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJLdW5uZSBpa2tlIGluaXRpZXJlIHN0w7h0dGViaWJsaW90ZWsuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgbHVra2Ugc3TDuHR0ZWJpYmxpb3Rlay4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkt1bm5lIGlra2Uga29uZmlndXJlcmUgc3TDuHR0ZWJpYmxpb3Rlay4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIkZlaWwgaSBrb2RpbmcuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoYXIgbcO4dHQgZW4gZ2VuZXJlbHQgcmVzdXJzZmVpbC4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJSZXNzdXJzZW4gYmxlIGlra2UgZnVubmV0LiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIlJlc3N1cnNlbiBlciBvcHB0YXR0IGVsbGVyIGlra2UgdGlsZ2plbmdlbGlnLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSByZXNzdXJzIGZvciBsZXNpbmcuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJLdW5uZSBpa2tlIMOlcG5lIHJlc3N1cnMgZm9yIHNrcml2aW5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSByZXNzdXJzIGZvciBsZXNpbmcgb2cgc2tyaXZpbmcuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBsdWtlIHJlc3N1cnMuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgbGVzZSBmcmEgcmVzc3Vycy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJLdW5uZSBpa2tlIHNrcml2ZSB0aWwgcmVzc3Vycy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBzw7hrZSBpIHJlc3N1cnMuIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBzeW5rcm9uaXNlcmUgcMOlIHJlc3N1cnMuIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgaGVudGUvc2V0dGUgaW5uc3RpbGxpbmdlciBmcmEvcMOlIHJlc3N1cnMuIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJJbmdlbiBwbGFzcyBpZ2plbiBww6UgcmVzc3Vyc2VuLiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIklra2UgYXV0b3Jpc2VydCB0aWwgw6UgZsOlIHRpbGdhbmcgdGlsIHJlc3N1cnNlbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBoYXIgbcO4dHQgZW4gZ2VuZXJlbHQgc3Ryw7htbWVmZWlsLiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotIkVsZW1lbnQgaW1wbGVtZW50ZXJlciBpa2tlIGjDpW5kdGVyaW5nIGF2IGRlbm5lIHN0csO4bW1lbi4gU2VuZCBpbm4gZW4gIgotImZlaWxyYXBwb3J0LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJLdW5uZSBpa2tlIGJlc3RlbW1lIHR5cGUgc3Ryw7htLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiU3Ryw7htbWVuIGVyIGF2IGVuIGFubmVuIHR5cGUgZW5uIGRldCBzb20gaMOlbmR0ZXJlcyBhdiBkZXR0ZSBlbGVtZW50ZXQuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICJEZXQgZXIgaW5nZW4ga29kZWsgdGlsIHN0ZWRlIHNvbSBrYW4gaMOlbmR0ZXJlIHN0csO4bW1lbnMgdHlwZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgZGVrb2RlIHN0csO4bS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIkt1bm5lIGlra2Uga29kZSBzdHLDuG0uIgotCi1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgYnJ5dGUgb3BwIHN0csO4bS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIkt1bm5lIGlra2Ugc2V0dGUgc2FtbWVuIHN0csO4bS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJTdHLDuG1tZW4gZXIgaSBmZWlsIGZvcm1hdC4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiU3Ryw7htbWVuIGVyIGtyeXB0ZXJ0IG9nIGRla3J5cHRlcmluZyBlciBpa2tlIHN0w7h0dGV0LiIKLQotbXNnaWQgIiIKLSJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCi0iYmVlbiBzdXBwbGllZC4iCi1tc2dzdHIgIiIKLSJTdHLDuG1tZW4gZXIga3J5cHRlcnQgb2cga2FuIGlra2UgZGVrcnlwdGVyZXMgZm9yZGkgaW5nZW4gcGFzc2VuZGUgbsO4a2tlbCBlciAiCi0ib3BwZ2l0dC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiSW5nZW4gZmVpbG1lbGRpbmcgZm9yIGRvbWVuZSAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiSW5nZW4gc3RhbmRhcmQgZmVpbG1lbGRpbmcgZm9yIGRvbWVuZSAlcyBvZyBrb2RlICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiVmFsZ3Qga2xva2tlIGthbiBpa2tlIGJydWtlcyBpIHLDuHJldC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIkt1bm5lIGlra2Ugc2tyaXZlIHJlZ2lzdGVyYnVmZmVyIHRpbCAlczogJXMiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAidGl0dGVsIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAib2Z0ZSBicnVrdCB0aXR0ZWwiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAidGl0dGVsc29ydGVyaW5nc3N0cmVuZyIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIm9mdGUgYnJ1a3QgdGl0dGVsIGZvciBzb3J0ZXJpbmdzZm9ybcOlbCIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAiYXJ0aXN0IgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb24oZXIpIHNvbSBlciBhbnN2YXJsaWdlIGZvciBvcHB0YWtldCIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAic29ydGVyaW5nc25hdm4gZm9yIGFydGlzdCIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAicGVyc29uKGVyKSBzb20gZXIgYW5zdmFybGlnZSBmb3Igb3BwdGFrZXQgLSB0aWwgc29ydGVyaW5nIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImFsYnVtIHNvbSBpbm5laG9sZGVyIGRpc3NlIGRhdGFlbmUiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiYWxidW1zb3J0ZXJpbmdzc3RyZW5nIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsYnVtIHNvbSBpbm5laG9sZGVyIGRpc3NlIGRhdGFlbmUgZm9yIHNvcnRlcmluZ3Nmb3Jtw6VsIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhbGJ1bWFydGlzdCIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiQXJ0aXN0ZW4gYXYgaGVsZSBhbGJ1bWV0LCBzb20gZGV0IGJ1cmRlIGJsaSB2aXN0IgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJhbGJ1bS0sIGFydGlzdHNvcnRlcmluZ3NzdHJlbmciCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIkFydGlzdGVuIGF2IGhlbGUgYWxidW1ldCwgc29tIGRldCBidXJkZSBibGkgc29ydGVydCIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImRhdG8iCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdG8gZm9yIG9wcHJldHRpbmcgYXYgZGF0YWVuZSAoc29tIGVuIEdEYXRlLXN0cnVrdHVyKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXRvdGlkIgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICIiCi0iZGF0byBvZyBrbG9ra2VzbGV0dCBkYXRhZW5lIGJsZSBvcHByZXR0ZXQgKHNvbSBldCBHc3REYXRlVGltZS1zdHJ1a3R1cikiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAic2phbmdlciIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICJzamFuZ2VyIGRpc3NlIGRhdGFlbmUgdGlsaMO4cmVyIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAia29tbWVudGFyIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgImZyaXRla3N0a29tbWVudGFyIHNvbSBiZXNrcml2ZXIgZGF0YWVuZSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgInV0dmlkZXQga29tbWVudGFyIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICJmcml0ZWtzdGtvbW1lbnRhciBzb20gYmVza3JpdmVyIGRhdGFlbmUiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgInNwb3JudW1tZXIiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAic3Bvcm51bW1lciBpIGVuIHNhbWxpbmciCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAiYW50YWxsIHNwb3IiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJ0ZWxsaW5nIGF2IHNwb3JlbmUgaW5uZSBpIHNhbWxpbmdlbiBkZXR0ZSBzcG9yZXQgdGlsaMO4cmVyIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgInBsYXRlbnVtbWVyIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiZGlza251bW1lciBpbm5lIGkgZW4gc2FtbGluZyIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgImRpc2t0ZWxsaW5nIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgInRlbGxpbmcgYXYgZGlza2VuZSBpIHNhbWxpbmdlbiBkZW5uZSBkaXNrZW4gdGlsaMO4cmVyIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgInBsYXNzZXJpbmciCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotIk9wcHJpbm5lbHNlbiB0aWwgbWVkaWV0IHNvbSBlbiBVUkkgKHBsYXNzZXJpbmcsIGh2b3IgZGVuIG9yaWdpbmFsZSBmaWwgZWxsZXIgIgotInN0csO4bSBsaWdnZXIpIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgImhqZW1tZXNpZGUiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICIiCi0iSGplbW1lc2lkZW4gdGlsIGRldHRlIG1lZGlldCAoZHZzLiBoamVtbWVzaWRlbiB0aWwgYXJ0aXN0ZW4gZWxsZXIgZmlsbWVuKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJiZXNrcml2ZWxzZSIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAia29ydCB0ZWtzdCBzb20gYmVza3JpdmVyIGRhdGFpbm5ob2xkZXQiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzam9uIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgInZlcnNqb24gZm9yIGRhdGEiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2UgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAib3JnYW5pc2Fzam9uIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJvcHBoYXZzcmV0dCIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIm1lbGRpbmcgb20gb3BwaGF2c3JldHQgZm9yIGRhdGEiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJsZW5rZSB0aWwgaW5mb3JtYXNqb24gb20gb3BwaGF2c3JldHQiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIkxlbmtlIHRpbCBtZWxkaW5nIG9tIG9wcGhhdnNyZXR0IGZvciBkYXRhIgotCi1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAia29kZXQgYXYiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICJOYXZuZXQgcMOlIHBlcnNvbmVuIGVsbGVyIG9yZ2FuaXNhc2pvbmVuIHNvbSBrb2RldCIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgImtvbnRha3QiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJrb250YWt0aW5mb3JtYXNqb24iCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaXNlbnMiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImxpc2VucyBmb3IgZGF0YSIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJsZW5rZSB0aWwgbGlzZW5zIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJMZW5rZSB0aWwgbGlzZW5zZW4gZm9yIGRhdGFlbmUiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgInV0w7h2ZXIiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVyc29uZXIgc29tIHNwaWxsZXIiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAia29tcG9uaXN0IgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb24oZXIpIHNvbSBlciBrb21wb25lcnRlIG9wcHRha2V0IgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICJkaXJpZ2VudCIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiZGlyaWdlbnQvdXTDuHZlci1yYWZmaW5lcmluZyIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJ2YXJpZ2hldCIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJsZW5nZGUgaSBHU3RyZWFtZXIgdGlkc2VuaGV0ZXIgKG5hbm9zZWt1bmRlcikiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAiY29kZWMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImtvZGVrIGRhdGFlbmUgZXIgbGFncmV0IGkiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAidmlkZW9rb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgdmlkZW9kYXRhZW5lIGVyIGxhZ3JldCBpIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImx5ZGtvZGVrIgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2RlayBseWRkYXRhZW5lIGVyIGxhZ3JldCBpIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgInVuZGVydGVrc3Rrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgdW5kZXJ0ZWtzdGRhdGFlbmUgZXIgbGFncmV0IGkiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJiZWhvbGRlcmZvcm1hdCIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJiZWhvbGRlcmZvcm1hdGV0IGRhdGFlbmUgZXIgbGFncmV0IGkiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJiaXRyYXRlIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiZWtzYWt0IGVsbGVyIGdqZW5ub21zbml0dGxpZyBiaXRyYXRlIGkgYml0cy9zIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJub21pbmVsbCBiaXRyYXRlIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibm9taW5lbGwgYml0cmF0ZSBpIGJpdHMvcyIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWluc3RlIGJpdHJhdGUiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtaW5zdGUgYml0cmF0ZSBpIGJpdHMvcyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWFrc2ltYWwgYml0cmF0ZSIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm1ha3NpbWFsIGJpdHJhdGUgaSBiaXRzL3MiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICJrb2RlciIKLQotbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgIm9ta29kZXIgc29tIHNrYWwgYnJ1a2VzIHRpbCDDpSBrb2RlIGRlbm5lIHN0csO4bW1lbiIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAidmVyc2pvbiBhdiBrb2RlciIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgInZlcnNqb24gYXYgb21rb2RlcmVuIHNvbSBicnVrZXMgdGlsIMOlIGtvZGUgZGVubmUgc3Ryw7htbWVuIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJzZXJpZW51bW1lciIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgInNlcmllbnVtbWVyIGZvciBzcG9yIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICJhdnNwaWxsaW5nc2ZvcnN0ZXJrbmluZyBzcG9yZm9yc3RlcmtuaW5nIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAic3BvcmZvcnN0ZXJrbmluZyBpIGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJhdnNwaWxsaW5nc2ZvcnN0ZXJrbmluZyBzcG9ydG1ha3NpbXVtIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgInNwb3JldHMgbWFrc2ltdW0iCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgImF2c3BpbGxpbmdzZm9yc3RlcmtuaW5nIGFsYnVtZm9yc3RlcmtuaW5nIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiYWxidW1mb3JzdGVya25pbmcgaSBkYiIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAiYXZzcGlsbGluZ3Nmb3JzdGVya25pbmcgYWxidW1tYWtzaW11bSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJhbGJ1bWV0cyBtYWtzaW11bSIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICJhdnNwaWxsaW5nc2ZvcnN0ZXJrbmluZyByZWZlcmFuc2VuaXbDpSIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgInJlZmVyYW5zZW5pdsOlIGZvciBzcG9yLSBvZyBhbGJ1bWZvcnN0ZXJrbmluZ3N2ZXJkaWVyIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAic3Byw6Vra29kZSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgInNwcsOla2tvZGVuIGZvciBkZW5uZSBzdHLDuG1tZW4sIGkgc2Ftc3ZhciBtZWQgSVNPLTYzOS0xIGVsbGVyIElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgInNwcsOla25hdm4iCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiZnJpZm9ybW5hdm5ldCBww6Ugc3Byw6VrZXQgZGVubmUgc3Ryw7htbWVuIGVyIGkiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAiYmlsZGUiCi0KLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJiaWxkZSByZWxhdGVydCB0aWwgZGVubmUgc3Ryw7htbWVuIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJmb3Jow6VuZHN2aXMgYmlsZGUiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImZvcmjDpW5kc3ZpcyBiaWxkZSByZWxhdGVydCB0aWwgZGVubmUgc3Ryw7htbWVuIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAidmVkbGVnZyIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImZpbCB2ZWRsYWd0IGRlbm5lIHN0csO4bW1lbiIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgInNsYWcgaSBtaW51dHRldCIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICJhbnRhbGwgc2xhZyBpIG1pbnV0dGV0IGkgbHlkIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgIm7DuGtrZWxvcmQiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAia29tbWFzZXBhcmVydGUgbsO4a2tlbG9yZCBzb20gYmVza3JpdmVyIGlubmhvbGRldCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICJnZW9ncmFmaXNrIHN0ZWRzbmF2biIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0ibGVzYmFyIGJlc2tyaXZlbmRlIHBsYXNzZXJpbmcgYXYgaHZvciBtZWRpZW5lIGhhciBibGl0dCBpbm5zcGlsdCBlbGxlciAiCi0icHJvZHVzZXJ0IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICJnZW9ncmFmaXNrIGJyZWRkZWdyYWQiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSJnZW9ncmFmaXNrIGJyZWRkZWdyYWRwbGFzc2VyaW5nIGh2b3IgbWVkaWVuZSBoYXIgdsOmcnQgaW5uc3BpbHQgZWxsZXIgIgotInByb2R1c2VydCBpIGdyYWRlciBpIGhlbmhvbGQgdGlsIFdHUzg0IChudWxsIHZlZCBla3ZhdG9yLCBuZWdhdGl2ZSB2ZXJkaWVyICIKLSJmb3Igc3lkbGlnZSBicmVkZGVncmFkZXIpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiZ2VvZ3JhZmlzayBsZW5nZGVncmFkIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotImdlb2dyYWZpc2sgbGVuZ2RlZ3JhZHBsYXNzZXJpbmcgaHZvciBtZWRpZW5lIGhhciB2w6ZydCBpbm5zcGlsdCBlbGxlciAiCi0icHJvZHVzZXJ0IGkgZ3JhZGVyIGkgaGVuaG9sZCB0aWwgV0dTODQgKG51bGwgdmVkIG51bGxtZXJpZGlhbmVuIGkgIgotIkdyZWVud2ljaCAvIFVLLCBuZWdhdGl2ZSB2ZXJkaWVyIGZvciB2ZXN0bGlnZSBsZW5nZGVncmFkZXIpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiZ2VvZ3JhZmlzayBow7h5ZGUiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0iZ2VvZ3JhZmlzayBow7h5ZGUgaSBtZXRlciBkZXIgbWVkaWVuZSBlciBpbm5zcGlsdCBlbGxlciBwcm9kdXNlcnQsIGkgaGVuaG9sZCAiCi0idGlsIFdHUzg0IChudWxsIGVyIGdqZW5ub21zbml0dGxpZyBoYXZuaXbDpSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiZ2VvZ3JhZmlzayBuYXNqb24iCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAibGFuZCAoZW5nZWxzayBuYXZuKSBkZXIgbWVkaWVuZSBlciBpbm5zcGlsdCBlbGxlciBwcm9kdXNlcnQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiZ2VvZ3JhZmlzayBieSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJieSAoZW5nZWxzayBuYXZuKSBkZXIgbWVkaWVuZSBlciBpbm5zcGlsdCBlbGxlciBwcm9kdXNlcnQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCi1tc2dzdHIgImdlb2dyYWZpc2sgdW5kZXJsb2thc2pvbiIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0iZXQgc3RlZCBpIGVuIGJ5IGh2b3IgbWVkaWVuZSBoYXIgYmxpdHQgcHJvZHVzZXJ0IGVsbGVyIGxhZ2V0IChmLmVrcyAiCi0ibmFib2xhZ2V0KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJnZW9ncmFmaXNrIHBsYXNzZXJpbmcgaG9yaXNvbnRhbGZlaWwiCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiZm9ydmVudGV0IGZlaWwgaSBkZW4gaG9yaXNvbnRhbGUgcG9zaXNqb25lcmluZ3Ntw6VsIChpIG1ldGVyKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAiZ2VvZ3JhZmlzayBiZXZlZ2Vsc2VzaGFzdGlnaGV0IgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICJiZXZlZ2Vsc2VzaGFzdGlnaGV0ZW4gdGlsIG9wcHRha3NlbmhldGVuIG1lbnMgZHUgdXRmw7hyZXIgb3BwdGFrIGkgbS9zIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiZ2VvZ3JhZmlzayBiZXZlZ2Vsc2VzcmV0bmluZyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotImluZGlrZXJlciBiZXZlZ2Vsc2VzcmV0bmluZ2VuIGF2IGlubnJldG5pbmdlbiBzb20gdXRmw7hyZXIgb3BwdGFrIGF2IGV0ICIKLSJtZWRpdW0uIERldCBlciByZXByZXNlbnRlcnQgc29tIGdyYWRlciBpIGZseXR0YWxsLXJlcHJlc2VudGFzam9uLCAwIGJldHlyICIKLSJnZW9ncmFmaXNrIG5vcmQgb2cgw7hrZXIgbWVkIGtsb2trZW4iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgImdlb2dyYWZpc2sgb3BwdGFrc3JldG5pbmciCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJpbmRpa2VyZXIgaSBodmlsa2VuIHJldG5pbmcgZW5oZXRlbiBwZWtlciBuw6VyIGR1IHRhciBvcHAgZXQgbWVkaWUuIERldCBlciAiCi0icmVwcmVzZW50ZXJ0IHNvbSBncmFkZXIgaSBmbHl0dGFsbC1yZXByZXNlbnRhc2pvbiwgMCBiZXR5ciBnZW9ncmFmaXNrIG5vcmQgIgotIm9nIMO4a2VyIG1lZCBrbG9ra2VuIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIm5hdm4gcMOlIHByb2dyYW0iCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICJOYXZuZXQgcMOlIHNlcmllbiB0di0gZWxsZXIgcG9kY2FzdGVuIG1lZGlldCBzdGFtbWVyIGZyYSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAic2VyaWUtc29ydGVyaW5nc25hdm4iCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJOYXZuZXQgcMOlIHNlcmllbiB0di0gZWxsZXIgcG9kY2FzdGVuIG1lZGlldCBzdGFtbWVyIGZyYSwgZm9yIHNvcnRlcmluZ3Nmb3Jtw6VsIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgImVwaXNvZGVudW1tZXIiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiRXBpc29kZW51bW1lcmV0IGkgc2Vzb25nZW4gbWVkaWV0IGVyIGVuIGRlbCBhdiIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgInNlc29uZ251bW1lciIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJTZXNvbmdudW1tZXJldCBpIHNlcmllbiBtZWRpZXQgZXIgZW4gZGVsIGF2IgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJ0ZWtzdGVyIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICJUZWtzdGVuIHRpbCBtZWRpZW5lLCB2YW5saWd2aXMgYnJ1a3QgZm9yIHNhbmdlciIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJrb21wb25pc3Qtc29ydGVyaW5nc25hdm4iCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwZXJzb24oZXIpIHNvbSBrb21wb25lcnQgb3BwdGFrZXQsIGZvciBzb3J0ZXJpbmdzZm9ybcOlbCIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICJncnVwcGVyaW5nIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iR3J1cHBlcmVsYXRlcnRlIG1lZGlhIHNvbSBnw6VyIG92ZXIgZmxlcmUgc3Bvciwgc29tIGRlIGZvcnNramVsbGlnZSBkZWxlbmUgYXYgIgotImVuIGtvbnNlcnQuIERldCBlciBldCBow7h5ZXJlIG5pdsOlIGVubiBldCBzcG9yLCBtZW4gbGF2ZXJlIGVubiBldCBhbGJ1bSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJicnVrZXJyYW5nZXJpbmciCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIlJhdGluZyB0aWxza3JldmV0IGF2IGVuIGJydWtlci4gSm8gaMO4eWVyZSByYW5nLCBqbyBtZXIgbGlrZXIgYnJ1a2VyZW4gZGV0dGUgIgotIm1lZGlldCIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgImVuaGV0c3Byb2R1c2VudCIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIlByb2R1c2VudGVuIGF2IGVuaGV0ZW4gc29tIGJydWtlcyB0aWwgw6UgbGFnZSBkZXR0ZSBtZWRpZXQiCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgImVuaGV0c21vZGVsbCIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTW9kZWxsIGF2IGVuaGV0ZW4gc29tIGJydWtlcyB0aWwgw6UgbGFnZSBkZXR0ZSBtZWRpZXQiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJQcm9ncmFtbmF2biIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiUHJvZ3JhbSBicnVrdCB0aWwgw6UgbGFnZSBtZWRpZXQiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJQcm9ncmFtZGF0YSIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIlZpbGvDpXJsaWdlIHByb2dyYW1kYXRhIHNvbSBza2FsIHNlcmlhbGlzZXJlcyBpIG1lZGlldCIKLQotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICJiaWxkZW9yaWVudGVyaW5nIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICJIdm9yZGFuIGJpbGRldCBza2FsIHJvdGVyZXMgZWxsZXIgc251cyBmw7hyIHZpc25pbmciCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgInV0Z2l2ZXIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk5hdm5ldCBww6UgZm9ybGFnZXQgZWxsZXIgdXRnaXZlcmVuIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgInRvbGtldCBhdiIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICJJbmZvcm1hc2pvbiBvbSBtZW5uZXNrZW5lIGJhayBlbiByZW1pa3Mgb2cgbGlnbmVuZGUgdG9sa25pbmdlciIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICJtaWRpLWJhc2Utbm9kZSIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiTWlkaS1ub2RlbnVtbWVyIHDDpSBseWRzcG9yZXQuIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICJwcml2YXRlLWRhdGEiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIlByaXZhdGUgZGF0YSIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICJJbmdlbiBVUkktYmVoYW5kbGVyIGZvciAlcyBwcm90b2tvbGxlbiBmdW5uZXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIlVSSS1vcmRuaW5nZW4gwqslc8K7IHN0w7h0dGVzIGlra2UiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiRkVJTDogZnJhIGVsZW1lbnQgJXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iVGlsbGVnZ3NpbmZvcm1hc2pvbiBmb3IgZmVpbHPDuGtpbmc6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJsaW5rIGhhciBpbmdlbiBzbGlrIGtpbGRlIFtzaW5rPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICJsaW5rIGhhciBpbmdlbiBzbGlrIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJpbmdlbiBlZ2Vuc2thcCDCqyVzwrsgaSBlbGVtZW50IMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgImt1bm5lIGlra2Ugc2V0dGUgZWdlbnNrYXBlbiDCqyVzwrsgaSBlbGVtZW50ZXQgwqslc8K7IHRpbCDCqyVzwrsiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiRm9yc2lua2V0IGxpbmtpbmcgZmVpbGV0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAia3VubmUgaWtrZSBsZW5rZSAlcyB0aWwgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImluZ2VuIGVsZW1lbnQgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJ1dmVudGV0IHJlZmVyYW5zZSDCqyVzwrsg4oCTIGlnbm9yZXJlciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgInV2ZW50ZXQgcGFkLXJlZmVyYW5zZSDCqyVzwrsg4oCTIGlnbm9yZXJlciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgImt1bm5lIGlra2UgYW5hbHlzZXJlIGNhcHNrdW5uZSBpa2tlIGFuYWx5c2VyZSBjYXBzIMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgImluZ2VuIHNpbmstZWxlbWVudCBmb3IgVVJJIMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiaW5nZW4ga2lsZGUtZWxlbWVudCBmb3IgVVJJIMKrJXPCuyIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiU3ludGFrc2ZlaWwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJzcGVzaWZpc2VydCB0b210IGxhZ2VyIMKrJXPCuywgaWtrZSB0aWxsYXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJpbnRldCBsYWdlciDCqyVzwrssIHBha2tlciB1dCBlbGVtZW50ZXIiCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiVG9tIHLDuHJsZWRuaW5nIGlra2UgdGlsbGF0dCIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJNYW5nZSBhdiBidWZmZXJlIGJsaXIgZHJvcHBldC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybiBkYXRhZmx5dHByb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiSW50ZXJuIGZlaWwgbWVkIGRhdGFmbHl0LiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiRmVpbCBpIGludGVybiBrbG9ra2UiCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIktsYXJ0ZSBpa2tlIMOlIGthcnRsZWdnZSBidWZmZXIuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkZpbHRyZXIgY2FwcyIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iQmVncmVuc2UgbXVsaWdlIHRpbGxhdHQgZXZuZXIgKE5VTEwgYmV0eXIgQUxUKS4gSW5uc3RpbGxpbmcgYXYgZGVubmUgIgotImVnZW5za2FwZW4gdGFyIGVuIHJlZmVyYW5zZSB0aWwgZGV0IG1lZGbDuGxnZW5kZSBHc3RDYXBzLW9iamVrdGV0LiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIkNhcHMtZW5kcmluZ3N0aWxzdGFuZCIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIkZpbHRlciBjYXBzLWVuZHJpbmdzYXRmZXJkIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiSW50ZW4gdGVtcC1tYXBwZSBzcGVzaWZpc2VydC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBsYWdlIG1pZGxlcnRpZGlnIGZpbCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSBmaWwgwqslc8K7IGZvciBsZXNpbmcuIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiRmVpbCB2ZWQgc2tyaXZpbmcgdGlsIG5lZGFzdGluZ3NmaWxlbi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiSW5nZW4gZmlsbmF2biBvcHBnaXR0IGZvciBza3JpdmluZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJLdW5uZSBpa2tlIMOlcG5lIGZpbCDCqyVzwrsgZm9yIHNrcml2aW5nLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRmVpbCB2ZWQgbHVra2luZyBhdiBmaWwgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRmVpbCB2ZWQgc8O4a2luZyBpIGZpbCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJGZWlsIHZlZCBza3JpdmluZyB0aWwgZmlsIMKrJXPCuy4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiSW5nZW4gZmlsbmF2biBvcHBnaXR0IGZvciBsZXNpbmcuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICJLdW5uZSBpa2tlIGhlbnRlIGluZm9ybWFzam9uIG9tIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiwqslc8K7IGVyIGVuIGthdGFsb2cuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiRmlsIMKrJXPCuyBlciBlbiBwbHVnZy4iCi0KLW1zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgotbXNnc3RyICJNaXNseWt0ZXMgZXR0ZXIgaXRlcmFzam9uZXIgc29tIGZvcmVzcHVydC4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJjYXBzIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAib3BwZGFnZXQgZXZuZXIgaSBzdHLDuG0iCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtaW5pbXVtIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAidHZpbmcgY2FwcyIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICJ0dmluZyBjYXBzIHV0ZW4gw6UgZm9yZXRhIHR5cGVmaW5kIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIlN0csO4bW1lbiBpbm5laG9sZGVyIGlra2Ugbm9rIGRhdGEuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJTdHLDuG1tZW4gaW5uZWhvbGRlciBpa2tlIGRhdGEuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiSW1wbGVtZW50ZXJ0ZSBncmVuc2Vzbml0dDpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICJsZXNiYXIiCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAic2tyaXZiYXIiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICJmb3JlbGRldCIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAia29udHJvbGxlcmJhciIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICJrYW4gYmFyZSBlbmRyZXMgaSBOVUxMLSwgS0xBUi0sIFBBVVNFLSBlbGxlciBTUElMTEVSLXRpbHN0YW5kIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAia2FuIGJhcmUgZW5kcmVzIGkgTlVMTC0sIEtMQVItIGVsbGVyIFBBVVNFLXRpbHN0YW5kIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgImthbiBiYXJlIGVuZHJlcyBpIE5VTEwtLCBlbGxlciBLTEFSLXRpbHN0YW5kIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICJTdmFydGVsaXN0ZWRlIGZpbGVyOiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIlRvdGFsdCBhbnRhbGw6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgc29ydGVsaXN0ZXQgZmlsIgotbXNnc3RyWzFdICIlZCBzb3J0ZWxpc3RlZGUgZmlsZXIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCBwcm9ncmFtdGlsbGVnZyIKLW1zZ3N0clsxXSAiJWQgcHJvZ3JhbXRpbGxlZ2ciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQgc29ydGVsaXN0ZW9wcGbDuHJpbmciCi1tc2dzdHJbMV0gIiVkIHNvcnRlbGlzdGVvcHBmw7hyaW5nZXIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIGZ1bmtzam9uIgotbXNnc3RyWzFdICIlZCBmdW5rc2pvbmVyIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJTa3JpdiB1dCBhbGxlIGVsZW1lbnRlbmUiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJTa3JpdiB1dCBsaXN0ZSBtZWQgc29ydGVsaXN0ZWRlIGZpbGVyIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJTa3JpdiB1dCBlbiBtYXNraW4tYW5hbHlzZXJlcyBsaXN0ZSBvdmVyIGZ1bmtzam9uZXIgZGV0IGFuZ2l0dGUgIgotInByb2dyYW10aWxsZWdnZXQgZWxsZXIgYWxsZSBwcm9ncmFtdGlsbGVnZyBnaXIuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnl0dGlnIGkgZm9yYmluZGVsc2UgbWVkIGVrc3Rlcm5lICIKLSJhdXRvbWF0aXNrZSBpbnN0YWxsYXNqb25zbWVrYW5pc21lciBmb3IgcHJvZ3JhbXRpbGxlZ2ciCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIkxpc3QgaW5uaG9sZCBpIHByb2dyYW10aWxsZWdnIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIlNqZWtrIG9tIGRldCBzcGVzaWZpc2VydGUgZWxlbWVudGV0IGVsbGVyIHByb2dyYW10aWxsZWdnIGVrc2lzdGVyZXIiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0iVmVkIHNqZWtraW5nIG9tIGV0IGVsZW1lbnQgZWxsZXIgcHJvZ3JhbXRpbGxlZ2cgZWtzaXN0ZXJlciwgc2pla2sgb2dzw6UgYXQgIgotImRlbnMgdmVyc2pvbiBlciBtaW5zdCBkZW4gYW5naXR0ZSB2ZXJzam9uZW4iCi0KLW1zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCi1tc2dzdHIgIlNrcml2ZSB1dCBzdMO4dHRlZGUgVVJJLXNjaGVtZXMsIG1lZCBlbGVtZW50ZXIgc29tIGltcGxlbWVudGVyZXIgZGVtIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJLdW5uZSBpa2tlIGxhc3RlIHByb2dyYW10aWxsZWdnc2ZpbDogwqslc8K7XG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIkluZ2VuIHNsaWsgZWxlbWVudCBlbGxlciBwcm9ncmFtdGlsbGVnZyAnJXMnXG4iCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJJbmRla3NzdGF0aXN0aWtrIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiRmlrayBtZWxkaW5nICMldSBmcmEgZWxlbWVudCDCqyVzwrsgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICJGaWtrIG1lbGRpbmcgIyV1IGZyYSBwYWQgwqslczolc8K7ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiRmlrayBtZWxkaW5nICMldSBmcmEgb2JqZWt0IMKrJXPCuyAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiRmlrayBtZWxkaW5nICMldSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJGaWtrIEVPUyBmcmEgZWxlbWVudCDCqyVzwrsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRkFOVCBUQUcgICAgICA6IGZ1bm5ldCBhdiBlbGVtZW50IMKrJXPCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIkZBTlQgVEFHICAgICAgOiBmdW5uZXQgYXYgcGFkIMKrJXM6JXPCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIkZBTlQgVEFHICAgICAgOiBmdW5uZXQgYXYgb2JqZWt0IMKrJXPCuy5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJGQU5UIFRBR0dcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJGQU5UIFRPQyAgICAgIDogZnVubmV0IGF2IGVsZW1lbnQgwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRkFOVCBUT0MgICAgICA6IGZ1bm5ldCBhdiBvYmpla3Qgwqslc8K7LlxuIgotCi1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIkZBTlQgVE9DXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk86XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkFEVkFSU0VMOiBmcmEgZWxlbWVudCAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJGb3JiZXJlZGVyLCB2ZW50ZXIgcMOlIGF0IGJ1ZmZlcmluZyBmdWxsZsO4cmVyIC4uLlxuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiRm9yYmVyZWRlciwgdmVudGVyIHDDpSBhdCBmcmVtZHJpZnRlbiBmdWxsZsO4cmVyIC4uLlxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICJidWZyZXIgLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiRmVyZGlnIG1lZCBidWZyaW5nLCBzZXR0ZXIgcsO4cmxlZG5pbmcgdGlsIFNQSUxMRVJcbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIkJ1ZnJlciwgc2V0dGVyIHLDuHJsZWRuaW5nIHRpbCBQQVVTRSAuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIlJlZGlzdHJpYnVlciB2ZW50ZXRpZCAuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJTZXR0ZXIgc3RhdHVzIHRpbCAlcyBzb20gZm9yZXPDpXVydCBhdiAgJXMuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkF2YnJ1ZGQ6IFN0b3BwZXIgcsO4cmxlZG5pbmcgLi4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiRnJlbWRyaWZ0OiAoJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICJNYW5nbGVyIGVsZW1lbnQ6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIkZpa2sgc2FtbWVuaGVuZyBmcmEgZWxlbWVudCDCqyVzwrs6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgInNrcml2IHV0IHRhZ2dlciAob2dzw6Uga2plbnQgc29tIG1ldGFkYXRhKSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIlNrcml2IHV0IFRPQyAoa2FwaXRsZXIgb2cgdXRnYXZlcikiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJTa3JpdiB1dCBzdGF0dXNpbmZvcm1hc2pvbiBvZyBlZ2Vuc2thcHN2YXJzbGluZ2VyIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiSWtrZSBza3JpdiB1dCBmcmVtZHJpZnRzaW5mb3JtYXNqb24iCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgIlV0ZGF0YW1lbGRpbmdlciIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0iSWtrZSBnaSB1dCBzdGF0dXNpbmZvcm1hc2pvbiBmb3IgZGVuIGFuZ2l0dGUgZWdlbnNrYXBlbiBodmlzIHZlcmJvc2UtdXRnYW5nICIKLSJlciBha3RpdmVydCAoa2FuIGJydWtlcyBmbGVyZSBnYW5nZXIpIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiRUdFTlNLQVBTTkFWTiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiaWtrZSBpbnN0YWxsZXIgZmVpbGjDpW5kdGVyZXIiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIlR2aW5nZSBFT1MgcMOlIGtpbGRlciBmw7hyIHLDuHJsZWRuaW5nZW4gc3RlbmdlcyIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiU2FtbGUgb2cgc2tyaXYgdXQgaW5kZWtzc3RhdGlzdGlrayIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRkVJTDogcsO4cmxlZG5pbmdlbiBrdW5uZSBpa2tlIGJ5Z2dlczogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICJGRUlMOiByw7hybGVkbmluZ2VuIGt1bm5lIGlra2UgYnlnZ2VzLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLW1zZ3N0ciAiQURWQVJTRUw6IGZlaWxha3RpZyByw7hybGVkbmluZzogJXNcbiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiRkVJTDogZWxlbWVudGV0IMKrcsO4cmxlZG5pbmfCuyBibGUgaWtlIGZ1bm5ldC5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJTZXR0ZXIgcsO4cmxlZG5pbmcgdGlsIFBBVVNFXG4iCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJGRUlMOiByw7hybGVkbmluZ2VuIHZpbCBpa2tlIHBhdXNlXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIlLDuHJsZWRuaW5nZW4gZXIgbGl2ZSBvZyB0cmVuZ2VyIGlra2UgZm9yYmVyZWRlbHNlXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICJSw7hybGVkbmluZ2VuIGZvcmJlcmVkZXIgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIkZFSUw6IHLDuHJsZWRuaW5nZW4gdmlsIGlra2UgZm9yYmVyZWRlLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJSw7hybGVkbmluZyBlciBmb3JiZXJlZHQgLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIlNldHRlciByw7hybGVkbmluZyB0aWwgU1BJTExFUiAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiRkVJTDogcsO4cmxlZG5pbmdlbiB2aWwgaWtrZSBzcGlsbGUuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiRU9TIHZlZCBhdnNsdXRuaW5nIGFrdGl2ZXJ0IC0gVHZpbmdlciBFT1MgcMOlIHLDuHJsZWRuaW5nZW5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICJFT1MgdmVkIGF2c2x1dG5pbmcgYWt0aXZlcnQgLSB2ZW50ZXIgcMOlIEFPUyBldHRlciBmZWlsXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiVmVudGVyIHDDpSBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyBtb3R0YXR0IC0gc3RvcHBlciByw7hybGVkbmluZy4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkF2YnJ5dCBtZW5zIGR1IHZlbnRlciBww6UgRU9TIC0gc3RvcHBlciByw7hybGVkbmluZy4uLlxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIkVuIGZlaWwgb3Bwc3RvIHZlZCB2ZW50aW5nIHDDpSBFT1NcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICJLasO4cmluZyBlbmR0ZSBldHRlciAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiU2V0dGVyIHLDuHJsZWRuaW5nIHRpbCBLTEFSIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICJTZXR0ZXIgcsO4cmxlZG5pbmcgdGlsIE5VTEwgLi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJGcmlnasO4ciByw7hyIC4uLlxuIgotCi0jfiBtc2dpZCAiYmluIgotI34gbXNnc3RyICJiaW4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybiBkYXRhc3Ryw7htLWZlaWwuIgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICJUWVBFMSxUWVBFMiwuLi4iCi0KLSN+IG1zZ2lkICJtYXhpbXVtIgotI34gbXNnc3RyICJtYWtzaW11bSIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkZJTCIKZGlmZiAtLWdpdCBhL3BvL25sLmdtbyBiL3BvL25sLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5OGUxOS4uMDAwMDAwMAotLS0gYS9wby9ubC5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9ubC5wbyBiL3BvL25sLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTlhZGE4Li4wMDAwMDAwCi0tLSBhL3BvL25sLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTM4NCArMCwwIEBACi0jIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci5wbyB0byBEdXRjaAotIyBEdXRjaCB0cmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIKLSMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KLSMKLSMgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+LCAyMDA0LgotIyBUYWNvIFdpdHRlIDx0Y3dpdHRlQGNzLnV1Lm5sPiwgMjAwNi4KLSMgRnJlZWsgZGUgS3J1aWpmIDxmLmRlLmtydWlqZkBnbWFpbC5jb20+LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2LgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDEuNy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDItMjAgMTY6NDIrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogRnJlZWsgZGUgS3J1aWpmIDxmLmRlLmtydWlqZkBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogRHV0Y2ggPHZlcnRhbGluZ0B2cmlqc2NocmlmdC5vcmc+XG4iCi0iTGFuZ3VhZ2U6IG5sXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9biAhPSAxO1xuIgotIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxLjVcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiVG9vbiBkZSBHU3RyZWFtZXIgdmVyc2llIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIkFsbGUgd2FhcnNjaHV3aW5nZW4gZmF0YWFsIG1ha2VuIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIkJlc2NoaWtiYXJlIGRlYnVnLWNhdGVnb3JpZcOrbiB3ZWVyZ2V2ZW4gZW4gYWZzbHVpdGVuIgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iU3RhbmRhYXJkIGRlYnVnLW5pdmVhdSB2YW4gMSAoYWxsZWVuIGZvdXRlbikgdG90IDkgKGFsbGVzKSBvZiAwIHZvb3IgZ2VlbiAiCi0idWl0dm9lciIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJOSVZFQVUiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iS29tbWEtZ2VzY2hlaWRlbiBsaWpzdCB2YW4gY2F0ZWdvcmllX25hYW06bml2ZWF1IHBhcmVuIG9tIHNwZWNpZmlla2UgIgotIm5pdmVhdSdzIGluIHRlIHN0ZWxsZW4gdm9vciBkZSBpbmRpdmlkdWVsZSBjYXRlZ29yaWXDq24uIFZvb3JiZWVsZDogIgotIkdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkxJSlNUIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIktsZXVyZW4gdWl0IHpldHRlbiBpbiBkZWJ1Zy11aXR2b2VyIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLSJXaWp6aWcgZGUgbW9kdXMgdmFuIGtsZXVyaW5nIHZhbiBkZSBkZWJ1Zy1sb2cuIE1vZ2VsaWprZSBtb2RpOiBvZmYsIG9uLCAiCi0iZGlzYWJsZSwgYXV0bywgdW5peCIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJEZWJ1Z2dpbmcgdWl0IHpldHRlbiIKLQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICJVaXRnZWJyZWlkZSBkaWFnbm9zdGllayB2b29yIGhldCBsYWRlbiB2YW4gcGx1Z2lucyBhYW4gemV0dGVuIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiRHViYmVsZSBwdW50LWdlc2NoZWlkZW4gbGlqc3QgbWV0IHBhZGVuIG1ldCBwbHVnaW5zIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIlBBREVOIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIktvbW1hLWdlc2NoZWlkZW4gbGlqc3QgdmFuIHBsdWdpbnMgb20gdm9vciB0ZSBsYWRlbiBuYWFzdCBkZSBsaWpzdCAiCi0ib3BnZXNsYWdlbiBpbiBvbWdldmluZ3N2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJQTFVHSU5TIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiIgotIkhldCBvcHZhbmdlbiB2YW4gc2VnbWVudGF0aWVmb3V0ZW4gdWl0IHpldHRlbiB0aWpkZW5zIGxhZGVuIHZhbiBwbHVnaW5zIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIlpldCBoZXQgaGV0IGJpandlcmtlbiB2YW4gZGUgcmVnaXN0cnkgdWl0IgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotIlpldCBoZXQgc3RhcnRlbiB2YW4gZWVuIGh1bHBwcm9ncmFtbWEgdWl0IHRpamRlbnMgaGV0IGRvb3Jsb3BlbiB2YW4gZGUgIgotInJlZ2lzdHJ5IgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkdTdHJlYW1lci1vcHRpZXMiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJUb29uIGRlIEdTdHJlYW1lci1vcHRpZXMiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiT25iZWtlbmRlIG9wdGllIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIga3JlZWcgZWVuIGFsZ2VtZW5lIGZvdXQgdmFuIGRlIGtlcm5iaWJsaW90aGVlay4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotIkdTdHJlYW1lciBvbnR3aWtrZWxhYXJzIHdhcmVuIHRlIGx1aSBvbSBlZW4gZm91dGNvZGUgdG9lIHRlIHdpanplbiBhYW4gZGV6ZSAiCi0iZm91dC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogY29kZSBuaWV0IGdlw69tcGxlbWVudGVlcmQuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iR1N0cmVhbWVyLWZvdXQ6IHN0YXR1c3dpanppZ2luZyBpcyBtaXNsdWt0IGVuIGVlbiBlbGVtZW50IGhlZWZ0IGdlZW4gZ29lZGUgIgotImZvdXRtZWxkaW5nIGFmZ2VnZXZlbiBtZXQgZWVuIHJlZGVuIHZvb3IgaGV0IG1pc2x1a2tlbi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogcGFkcHJvYmxlZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybmUgR1N0cmVhbWVyLWZvdXQ6IHRocmVhZHByb2JsZWVtLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkdTdHJlYW1lci1mb3V0OiBvbmRlcmhhbmRlbGluZ3Nwcm9ibGVlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm5lIEdTdHJlYW1lci1mb3V0OiBnZWJldXJ0ZW5pc3Byb2JsZWVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogem9la3Byb2JsZWVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogbW9nZWxpamtoZWRlbi1wcm9ibGVlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJuZSBHU3RyZWFtZXItZm91dDogdGFncHJvYmxlZW0uIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiRXIgb250YnJlZWt0IGVlbiBwbHVnaW4gaW4gdXcgR1N0cmVhbWVyIGluc3RhbGxhdGllLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIkdTdHJlYW1lci1mb3V0OiBrbG9rcHJvYmxlZW0uIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLSJEZXplIGFwbGxpY2F0aWUgcHJvYmVlcnQgZWVuIGZ1bmN0aWUgdmFuIEdTdHJlYW1lciB0ZSBnZWJydWlrZW4gZGllIGlzICIKLSJ1aXRnZXpldC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBrcmVlZyBlZW4gYWxnZW1lbmUgZm91dCB2YW4gZWVuIG9uZGVyc3RldW5lbmRlIGJpYmxpb3RoZWVrLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkthbiBvbmRlcnN0ZXVuZW5kZSBiaWJsaW90aGVlayBuaWV0IGluaXRpYWxpc2VyZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkthbiBvbmRlcnN0ZXVuZW5kZSBiaWJsaW90aGVlayBuaWV0IHNsdWl0ZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJLYW4gb25kZXJzdGV1bmVuZGUgYmlibGlvdGhlZWsgbmlldCBjb25maWd1cmVyZW4uIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJDb2RlcmluZ3Nmb3V0LiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIga3dhbSBlZW4gYWxnZW1lbmUgZm91dCB0ZWdlbiBtZXQgc3lzdGVlbWJyb25uZW4uIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiQnJvbiBuaWV0IGdldm9uZGVuLiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIkJyb24gYmV6ZXQgb2YgbmlldCBiZXNjaGlrYmFhci4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkthbiBicm9uIG5pZXQgb3BlbmVuIG9tIHRlIGxlemVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiS2FuIGJyb24gbmlldCBvcGVuZW4gb20gdGUgc2NocmlqdmVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS2FuIGJyb24gbmlldCBvcGVuZW4gb20gdGUgbGV6ZW4gZW4gc2NocmlqdmVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIkthbiBicm9uIG5pZXQgc2x1aXRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiS2FuIG5pZXQgbGV6ZW4gdmFuIGJyb24uIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAiS2FuIG5pZXQgc2NocmlqdmVuIG5hYXIgYnJvbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiS2FuIGRlIGJyb24gbmlldCBzcG9lbGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIkthbiBuaWV0IHN5bmNocm9uaXNlcmVuIG9wIGRlIGJyb24uIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIkthbiBnZWVuIGluc3RlbGxpbmdlbiBsZXplbi9zY2hyaWp2ZW4gdmFuL25hYXIgYnJvbi4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIkVyIGlzIGdlZW4gcnVpbXRlIG1lZXIgaW4gZGUgYnJvbi4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJOaWV0IGdlYXV0b3Jpc2VlcmQgdm9vciB0b2VnYW5nIHRvdCBodWxwYnJvbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBrd2FtIGVlbiBhbGdlbWVuZSBzdHJvb21mb3V0IHRlZ2VuLiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiRWxlbWVudCBvbmRlcnN0ZXVudCBkZXplIHN0cm9vbSBuaWV0LiAgU3R1dXIgZWVuIGZvdXRyYXBwb3J0LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJLYW4gZGUgc29vcnQgdmFuIGRlIHN0cm9vbSBuaWV0IGhlcmtlbm5lbi4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIkRlIHN0cm9vbSBpcyB2YW4gZWVuIGFuZGVyZSBzb29ydCBkYW4gZGl0IGVsZW1lbnQga2FuIHZlcndlcmtlbi4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIkVyIGlzIGdlZW4gY29kZWMgYWFud2V6aWcgZGllIGRlemUgc29vcnQgc3Ryb29tIGthbiB2ZXJ3ZXJrZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJLYW4gZGUgc3Ryb29tIG5pZXQgZGVjb2RlcmVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiS2FuIGRlIHN0cm9vbSBuaWV0IGNvZGVyZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIkthbiBkZSBzdHJvb20gbmlldCBkZW11bHRpcGxleGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiS2FuIGRlIHN0cm9vbSBuaWV0IG11bHRpcGxleGVuLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIkRlIHN0cm9vbSBpcyB2YW4gaGV0IHZlcmtlZXJkZSBmb3JtYWF0LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJEZSBzdHJvb20gaXMgdmVyY2lqZmVyZCBlbiBvbnRjaWpmZXJpbmcgd29yZHQgbmlldCBvbmRlcnN0ZXVuZC4iCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0iRGUgc3Ryb29tIGlzIHZlcmNpamZlcmQgZW4ga2FuIG5pZXQgd29yZGVuIG9udGNpamZlcmQgb21kYXQgZXIgZ2VlbiAiCi0iZ2VzY2hpa3RlIHNsZXV0ZWwgYWFuZ2VsZXZlcmQgaXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIkdlZW4gZm91dGJvb2RzY2hhcCB2b29yIGRvbWVpbiAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiR2VlbiBzdGFuZGFhcmQgZm91dGJvb2RzY2hhcCB2b29yIGRvbWVpbiAlcyBlbiBjb2RlICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiR2VzZWxlY3RlZXJkZSBrbG9rIGthbiBuaWV0IGdlYnJ1aWt0IHdvcmRlbiBpbiBkZSBwaWpwbGlqbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIkZvdXQgYmlqIHNjaHJpanZlbiB2YW4gcmVnaXN0cnktY2FjaGUgbmFhciAlczogJXMiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAidGl0ZWwiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJ2YWFrIGdlYnJ1aWt0ZSB0aXRlbCIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJ0aXRlbCB2b29yIGhldCBzb3J0ZXJlbiIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInZhYWsgZ2VicnVpa3RlIHRpdGVsIHZvb3IgaGV0IHNvcnRlcmVuIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICJhcnRpZXN0IgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzbyhvKW4oZW4pIGRpZSBkZSBvcG5hbWUgZ2VtYWFrdCBoZWJiZW4iCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIm5hYW0gYXJ0aWVzdCB2b29yIHNvcnRlcmVuIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwZXJzbyhvKW4oZW4pIGRpZSBkZSBvcG5hbWUgZ2VtYWFrdCBoZWJiZW4gZ2VicnVpa3Qgdm9vciBzb3J0ZXJlbiIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICJhbGJ1bSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICJhbGJ1bSB3YWFyb3AgZGl0IHN0dWsgc3RhYXQiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAibmFhbSBhbGJ1bSB2b29yIHNvcnRlcmVuIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsYnVtIHdhYXJvcCBkaXQgc3R1ayBzdGFhdCB2b29yIHNvcnRlcmVuIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhbGJ1bWFydGllc3QiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgIkRlIGFydGllc3QgdmFuIGhldCBnZWhlbGUgYWxidW0sIHpvYWxzIGRhdCB6b3UgbW9ldGVuIHdvcmRlbiBnZXRvb25kIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJuYWFtIGFydGllc3Qgdm9vciBzb3J0ZXJlbiIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiIgotIkRlIGFydGllc3QgdmFuIGhldCBnZWhlbGUgYWxidW0sIHpvYWxzIGRhdCB6b3UgbW9ldGVuIHdvcmRlbiBnZWJydWlrdCB2b29yICIKLSJzb3J0ZXJlbiIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImRhdHVtIgotCi1tc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXR1bSB3YWFyb3AgaGV0IHN0dWsgZ2VtYWFrdCBpcyAoYWxzIEdEYXRlLXN0cnVjdHV1cikiCi0KLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAiZGF0dW0tdGlqZCIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiIgotImRhdHVtIGVuIHRpamQgd2Fhcm9wIGRlIGdlZ2V2ZW5zIHppam4gZ2VtYWFrdCAoYWxzIGVlbiBHc3REYXRlVGltZS1zdHJ1Y3R1dXIpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgImdlbnJlIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImdlbnJlIHZhbiBoZXQgc3R1ayIKLQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgImNvbW1lbnRhYXIiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAidnJpaiB0ZSBraWV6ZW4gY29tbWVudGFhcnRla3N0IGRpZSBoZXQgc3R1ayBiZXNjaHJpamZ0IgotCi1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAidWl0Z2VicmVpZCBjb21tZW50YWFyIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0idnJpaiB0ZSBraWV6ZW4gY29tbWVudGFhcnRla3N0IGJpaiBnZWdldmVucyBpbiBkZSB2b3JtIGtleT13YWFyZGUgb2YgIgotImtleVtlbl09Y29tbWVudGFhciAiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIm51bW1lciIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJudW1tZXIgdmFuIGhldCBzdHVrIGluIGVlbiB2ZXJ6YW1lbGluZyIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJhYW50YWwgbnVtbWVycyIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImFhbnRhbCBudW1tZXJzIGluIGRlIHZlcnphbWVsaW5nIHdhYXJiaWogZGl0IHN0dWsgaG9vcnQiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAic2NoaWpmbnVtbWVyIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibnVtbWVyIHZhbiBkZSBzY2hpamYgaW4gZWVuIHZlcnphbWVsaW5nIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAiYWFudGFsIHNjaGlqdmVuIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImFhbnRhbCBzY2hpanZlbiBpbiBkZSB2ZXJ6YW1lbGluZyB3YWFydG9lIGRlemUgc2NoaWpmIGJlaG9vcnQiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAibG9rYXRpZSIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0ib29yc3Byb25nIHZhbiBoZXQgbWVkaXVtIGFscyBlZW4gVVJJIChsb2NhdGllLCB3YWFyIGRlIG9vcnNwcm9uZyB2YW4gaGV0ICIKLSJiZXN0YW5kIG9mIHN0cm9vbSB3b3JkdCBnZWhvc3QpIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgIndlYnBhZ2luYSIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIldlYnBhZ2luYSB2b29yIGRpdCBtZWRpdW0gKGJpanYuIGFydGllc3Qgb2YgZmlsbS13ZWJwYWdpbmEpIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgIm9tc2NocmlqdmluZyIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAia29ydGUgdGVrc3QgZGllIGRlIGluaG91ZCB2YW4gaGV0IHN0dWsgb21zY2hyaWpmdCIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgInZlcnNpZSIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJ2ZXJzaWUgdmFuIGRpdCBzdHVrIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiSW50ZXJuYXRpb25hbGUgU3RhbmRhYXJkIE9wbmFtZSBDb2RlIC0gemllIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXNhdGllIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJhdXRldXJzcmVjaHQiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJhdXRldXJzcmVjaHR2ZXJtZWxkaW5nIHZhbiBoZXQgc3R1ayIKLQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgImF1dGV1cnNyZWNodC11cmkiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSBuYWFyIGRlIGF1dGV1cnNyZWNodHZlcm1lbGRpbmcgdmFuIGRlIGdlZ2V2ZW5zIgotCi1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAiZ2Vjb2RlZXJkIGRvb3IiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICJuYWFtIHZhbiBkZSBjb2RlcmVuZGUgcGVyc29vbiBvZiBvcmdhbmlzYXRpZSIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgImNvbnRhY3QiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJjb250YWN0aW5mb3JtYXRpZSIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgImxpY2VudGllIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJsaWNlbnRpZSB2YW4gaGV0IHN0dWsiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAibGljZW50aWUtdXJpIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgbmFhciBkZSBsaWNlbnRpZSB2YW4gZGUgZ2VnZXZlbnMiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgInVpdHZvZXJkZXIiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVyc28obyluKGVuKSBkaWUgaGV0IHN0dWsgdWl0dm9lcmVuIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgImNvbXBvbmlzdCIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAicGVyc28obyluKGVuKSBkaWUgZGUgb3BuYW1lIGdlY29tcG9uZWVyZCBoZWJiZW4iCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgImR1dXIiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAibGVuZ3RlIGluIEdTdHJlYW1lciB0aWpkc2VlbmhlZGVuIChuYW5vc2Vjb25kZW4pIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgImNvZGVjIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjb2RlYyB3YWFyaW4gaGV0IHN0dWsgaXMgb3BnZXNsYWdlbiIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJ2aWRlbyBjb2RlYyIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29kZWMgd2FhcmluIGhldCBzdHVrIGlzIG9wZ2VzbGFnZW4iCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAiYXVkaW8gY29kZWMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIHdhYXJpbiBkZSBhdWRpb2dlZ2V2ZW5zIGlzIG9wZ2VzbGFnZW4iCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAiY29kZWMgdm9vciBvbmRlcnRpdGVsaW5nIgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjb2RlYyB3YWFyaW4gZGUgb25kZXJ0aXRlbGluZyBpcyBvcGdlc2xhZ2VuIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiY29udGFpbmVyaW5kZWxpbmciCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29udGFpbmVyaW5kZWxpbmcgd2FhcmluIGRlIGdlZ2V2ZW5zIHppam4gb3BnZXNsYWdlbiIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgImJpdHNuZWxoZWlkIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiZXhhY3RlIG9mIGdlbWlkZGVsZGUgYml0c25lbGhlaWQgaW4gYml0cy9zIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJub21pbmFsZSBiaXRzbmVsaGVpZCIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm5vbWluYWxlIGJpdHNuZWxoZWlkIGluIGJpdHMgcGVyIHNlY29uZGUiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm1pbmltdW0gYml0c25lbGhlaWQiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtaW5pbXVtIGJpdHNuZWxoZWlkIGluIGJpdHMgcGVyIHNlY29uZGUiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm1heGltdW0gYml0c25lbGhlaWQiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtYXhpbXVtIGJpdHNuZWxoZWlkIGluIGJpdHMgcGVyIHNlY29uZGUiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICJlbmNvZGVyIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZW5jb2RlciBnZWJydWlrdCBvbSBkZXplIHN0cm9vbSB0ZSBjb2RlcmVuIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJlbmNvZGVyIHZlcnNpZSIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgInZlcnNpZSB2YW4gZGUgZW5jb2RlciBnZWJydWlrdCBvbSBkZXplIHN0cm9vbSB0ZSBjb2RlcmVuIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJ2b2xnbnVtbWVyIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAidm9sZ251bW1lciB2YW4gZGl0IG51bW1lciIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAiYWFuZ2VwYXN0ZS1nZWx1aWRzc3Rlcmt0ZSBudW1tZXIiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJ2ZXJzdGVya2luZyB2YW4gbnVtbWVyIGluIGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJhYW5nZXBhc3RlLWdlbHVpZHNzdGVya3RlIHBpZWsgdmFuIG51bW1lciIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJwaWVrIHZhbiBoZXQgbnVtbWVyIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJhYW5nZXBhc3RlLWdlbHVpZHNzdGVya3RlIGFsYnVtIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAidmVyc3RlcmtpbmcgYWxidW0gaW4gZGIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgImFhbmdlcGFzdGUtZ2VsdWlkc3N0ZXJrdGUgcGllayB2YW4gYWxidW0iCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAicGllayB2YW4gaGV0IGFsYnVtIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgInJlZmVyZW50aWVuaXZlYXUgdmFuIGFhbmdlcGFzdGUtZ2VsdWlkc3N0ZXJrdGUgdmFuIG51bW1lciIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgInJlZmVyZW50aWVuaXZlYXUgdmFuIGRlIHdhYXJkZSB2YW4gdGFyY2stIGVuIGFsYnVtZ2VsdWlkc3Rlcmt0ZSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgInRhYWxjb2RlIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAidGFhbGNvZGUgdmFuIGRlemUgc3RyZWFtLCBjb25mb3JtIElTTy02MzktMSBvZiBJU08tNjM5LTIiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJuYWFtIHZhbiB0YWFsIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIm5hYW0gdmFuIGRlIHRhYWwgaW4gdnJpamUgdm9ybSB2YW4gZGV6ZSBzdHJlYW0iCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAiYWZiZWVsZGluZyIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImFmYmVlbGRpbmcgYmVob3JlbmRlIGJpaiBkZXplIHN0cm9vbSIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAidm9vcmJlZWxkYWZiZWVsZGluZyIKLQotbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAidm9vcmJlZWxkYWZiZWVsZGluZyBiZWhvcmVuZGUgYmlqIGRlemUgc3Ryb29tIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAiYmlqbGFnZSIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImJlc3RhbmQgYmVob3JlbmRlIGJpaiBkZXplIHN0cm9vbSIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgInNsYWdlbiBwZXIgbWludXV0IgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgImFhbnRhbCBzbGFnZW4gcGVyIG1pbnV1dCBpbiBhdWRpbyIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICJ0cmVmd29vcmRlbiIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICJrb21tYSBnZXNjaGVpZGVuIHRyZWZ3b29yZGVuIGRpZSBkZSBpbmhvdWQgb21zY2hyaWp2ZW4iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibmFhbSBnZW9ncmFmaXNjaGUgbG9jYXRpZSIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0ibGVlc2JhcmUgYmVzY2hyaWp2aW5nIHZhbiBkZSBsb2NhdGllIHdhYXIgaGV0IG1lZGl1bSBpcyBvcGdlbm9tZW4gb2YgIgotImdlcHJvZHVjZWVyZCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAibGVuZ3RlZ3JhYWQgdmFuIGRlIGdlb2dyYWZpc2NoZSBsb2NhdGllIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0ibGVuZ3RlZ3JhYWQgdmFuIGRlIGdlb2dyYWZpc2NoZSBsb2NhdGllIHZhbiB3YWFyIGhldCBtZWRpdW0gaXMgb3BnZW5vbWVuIG9mICIKLSJnZXByb2R1Y2VlcmQgaW4gZ3JhZGVuIHZvbGdlbnMgV0dTODQgKG51bCBvcCBkZSBldmVuYWFyLCBuZWdhdGlldmUgd2FhcmRlbiAiCi0idm9vciB6dWlkZWxpamtlIGxlbmd0ZWdyYWRlbikiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICJicmVlZHRlZ3JhYWQgdmFuIGRlIGdlb2dyYWZpc2NoZSBsb2NhdGllIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotImJyZWVkdGVncmFhZCB2YW4gZGUgZ2VvZ3JhZmlzY2hlIGxvY2F0aWUgdmFuIHdhYXIgaGV0IG1lZGl1bSBpcyBvcGdlbm9tZW4gb2YgIgotImdlcHJvZHVjZWVyZCBpbiBncmFkZW4gdm9sZ2VucyBXR1M4NCAobnVsIG9wIHByaW1haXJlIG1lcmlkaWFhbiwgbmVnYXRpZXZlICIKLSJ3YWFyZGVuIHZvb3Igd2VzdGVsaWprZSBicmVlZHRlZ3JhZGVuKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgImhvb2d0ZSB2YW4gZGUgZ2VvZ3JhZmlzY2hlIGxvY2F0aWUiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0iaG9vZ3RlIHZhbiBkZSBnZW9ncmFmaXNjaGUgbG9jYXRpZSB2YW4gd2FhciBoZXQgbWVkaXVtIGlzIG9wZ2Vub21lbiBvZiAiCi0iZ2Vwcm9kdWNlZXJkIGluIG1ldGVycyB2b2xnZW5zIFdHUzg0IChudWwgb3AgZ2VtaWRkZWxkIHplZW5pdmVhdSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiZ2VvZ3JhZmlzY2hlIGxvY2F0aWUgdmFuIGhldCBsYW5kIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgImxhbmQgKEVuZ2Vsc2UgbmFhbSkgd2FhciBoZXQgbWVkaXVtIGlzIG9wZ2Vub21lbiBvZiBnZXByb2R1Y2VlcmQiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAiZ2VvZ3JhZmlzY2hlIGxvY2F0aWUgdmFuIGRlIHN0YWQiCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAic3RhZCAoRW5nZWxzZSBuYWFtKSB3YWFyIGhldCBtZWRpdW0gaXMgb3BnZW5vbWVuIG9mIGdlcHJvZHVjZWVyZCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAiZ2VvZ3JhZmlzY2hlIGxvY2F0aWUgdmFuIGRlIHN1YmxvY2F0aWUiCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotImVlbiBsb2NhdGllIGluIGVlbiBzdGFkIHdhYXIgaGV0IG1lZGl1bSBpcyBnZXByb2R1Y2VlcmQgb2YgZ2VtYWFrdCAoYmlqdi4gZGUgIgotImJ1dXJ0KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJmb3V0IGluIGhvcml6b250YWxlIGdlby1sb2NhdGllIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgInZlcndhY2h0ZSBmb3V0IHZhbiBkZSBob3Jpem9udGFsZSBwb3NpdGlvbmVyaW5nc2FmbWV0aW5nZW4gKGluIG1ldGVycykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgInZlcnBsYWF0c2luZ3NzbmVsaGVpZCBvcCBkZSBnZW9ncmFmaXNjaGUgbG9jYXRpZSIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAidmVycGxhYXRzaW5nc3NuZWxoZWlkIHZhbiBoZXQgb3BuYW1lYXBwYXJhYXQgdGlqZGVucyBkZSBvcG5hbWUgaW4gbS9zIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiYmV3ZWdpbmdzcmljaHRpbmcgb3AgZGUgZ2VvZ3JhZmlzY2hlIGxvY2F0aWUiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJnZWVmdCBkZSBiZXdlZ2luZ3NyaWNodGluZyBhYW4gdmFuIGhldCBhcHBhcmFhdCBkYXQgZGUgb3BuYW1lIG9wIGhldCBtZWRpdW0gIgotImRvZXQuIEhldCB3b3JkdCB3ZWVyZ2VnZXZlbiBpbiBncmFkZW4gaW4gZHJpanZlbmRla29tbWF2b3JtLCAwIGJldGVrZW50IGhldCAiCi0iZ2VvZ3JhZmlzY2hlIG5vb3JkZW4gZW4gbmVlbSByZWNodHNvbSB0b2UiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgIm9wbmFtZXJpY2h0aW5nIG9wIGRlIGdlb2dyYWZpc2NoZSBsb2NhdGllIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iZ2VlZnQgZGUgcmljaHRpbmcgYWFuIHdhYXJuYWFyIGhldCBhcHBhcmFhdCB3aWpzdCBkYXQgZGUgb3BuYW1lIG9wIGhldCAiCi0ibWVkaXVtIGRvZXQuIEhldCB3b3JkdCB3ZWVyZ2VnZXZlbiBpbiBncmFkZW4gaW4gZHJpanZlbmRla29tbWF2b3JtLCAwICIKLSJiZXRla2VudCBoZXQgZ2VvZ3JhZmlzY2hlIG5vb3JkZW4gZW4gbmVlbSByZWNodHNvbSB0b2UiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAibmFhbSB0b25lbiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIk1lZGl1bW5hYW0gdmFuIGRlIHNob3cgdmFuIGRlIHR2L3BvZGNhc3Qvc2VyaWUiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgIm5hYW0gdm9vciBzb3J0ZXJlbiIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiTWVkaXVtbmFhbSB2YW4gZGUgc2hvdyB2YW4gZGUgdHYvcG9kY2FzdC9zZXJpZSwgdm9vciBzb3J0ZXJlbiIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICJlcGlzb2RlbnVtbWVyIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIkhldCBlcGlzb2RlbnVtbWVyIGluIGhldCBzZWl6b2VuIHdhYXIgaGV0IG1lZGl1bSBkZWVsIHZhbiBpcyIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgInNlaXpvZW5udW1tZXIiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiSGV0IG51bW1lciB2YW4gaGV0IHNlaXpvZW4gdmFuIGRlIHNob3cgd2FhciBoZXQgbWVkaXVtIGRlZWwgdmFuIGlzIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJsaWVkdGVrc3QiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIkRlIGxpZWR0ZWtzdCB2YW4gaGV0IG1lZGl1bSwgZ2V3b29ubGlqayB2b29yIHNvbmdzIGdlYnJ1aWt0IgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgImNvbXBvbmlzdCB2b29yIHNvcnRlcmVuIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotInBlcnNvKG8pbihlbikgZGllIGRlIG9wbmFtZSBnZWNvbXBvbmVlcmQgaGUoZWZ0KWJiZW4sIGdlYnJ1aWt0IHZvb3Igc29ydGVyZW4iCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiZ3JvZXBlcmluZyIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotIkdyb2VwZW4gZ2VyZWxhdGVlcmRlIG1lZGlhIGRpZSBtZWVyZGVyZSB0cmFja3Mgb212YXR0ZW4sIHpvYWxzIGRlICIKLSJ2ZXJzY2hpbGxlbmRlIGRlbGVuIHZhbiBlZW4gY29uY2VydC4gSGV0IGlzIGVlbiBob2dlciBuaXZlYXUgZGFuIGVlbiB0cmFjaywgIgotIm1hYXQgbGFnZXIgZGFuIGVlbiBhbGJ1bSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJ3YWFyZGVyaW5nIHZhbiBnZWJydWlrZXIiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIldhYXJkZXJpbmcgdG9lZ2VrZW5kIGRvb3IgZWVuIGdlYnJ1aWtlci4gSG9lIGhvZ2VyIGRlIHdhYXJkZXJpbmcsIGhvZSBtZWVyICIKLSJkZSBnZWJydWlrZXIgZGl0IG1lZGl1bSB3YWFyZGVlcnQiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICJhcHBhcmFhdGZhYnJpa2FudCIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJGYWJyaWthbnQgdmFuIGhldCBhcHBhcmFhdCBkYXQgZ2VicnVpa3Qgd29yZHQgb20gZGl0IG1lZGl1bSBhYW4gdGUgbWFrZW4iCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgImFwcGFyYWF0bW9kZWwiCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIk1vZGVsIHZhbiBoZXQgYXBwYXJhYXQgZGF0IGdlYnJ1aWt0IHdvcmR0IG9tIGRpdCBtZWRpdW0gYWFuIHRlIG1ha2VuIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAidG9lcGFzc2luZ3NuYWFtIgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICJHZWJydWlrdGUgdG9lcGFzc2luZyBvbSBoZXQgbWVkaXVtIGFhbiB0ZSBtYWtlbiIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgInRvZXBhc3NpbmdzZ2VnZXZlbnMiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICIiCi0iV2lsbGVrZXVyaWdlIHRvZXBhc3NpbmdzZ2VnZXZlbnMgZGllIGdlc2VyaWFsaXNlZXJkIG1vZXRlbiB3b3JkZW4gb3AgaGV0ICIKLSJtZWRpdW0iCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAib3Jpw6tudGF0aWUgdmFuIGRlIGFmYmVlbGRpbmciCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIkhvZSBkZSBhZmJlZWxkaW5nIGdlcm90ZWVyZCBtb2V0IHdvcmRlbiBvZiBnZXNwaWVnZWxkIGJpaiB0b25lbiIKLQotbXNnaWQgInB1Ymxpc2hlciIKLW1zZ3N0ciAidWl0Z2V2ZXIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk5hYW0gb2YgbGFiZWwgdmFuIGRlIHVpdGdldmVyIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgImdlw69udGVycHJldGVlcmQtZG9vciIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0iSW5mb3JtYXRpZSBvdmVyIGRlIG1lbnNlbiBhY2h0ZXIgZWVuIHJlbWl4IGVuIHNvb3J0Z2VsaWprZSBpbnRlcnByZXRhdGllcyIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICJtaWRpLWJhc2Utbm90ZSIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiTWlkaSBub3RpdGllbnVtbWVyIHZhbiBkZSBnZWx1aWRzdHJhY2siCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgInByaXbDqWdlZ2V2ZW5zIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICJQcml2w6lnZWdldmVucyIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICJHZWVuIGJlaGFuZGVsYWFyIHZhbiBkZSBVUkkgdm9vciBoZXQgcHJvdG9jb2wgJXMgZ2V2b25kZW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIlVSSS1zY2hlbWEgJyVzJyBuaWV0IG9uZGVyc3RldW5kIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkZPVVQ6IHZhbiBlbGVtZW50ICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkV4dHJhIGRlYnVnLWluZm9ybWF0aWU6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJsaW5rIGhlZWZ0IGdlZW4gYnJvbiBbc2luaz0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAibGluayBoZWVmdCBnZWVuIHNpbmsgW2Jyb249JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiZ2VlbiBlaWdlbnNjaGFwIFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgImtvbiBlaWdlbnNjaGFwIFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiBuaWV0IG9wIFwiJXNcIiBpbnN0ZWxsZW4iCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiVmVydHJhYWdkIGtvcHBlbGVuIGlzIG1pc2x1a3QuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJrb24gJXMgbmlldCB2ZXJiaW5kZW4gbWV0ICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJnZWVuIGVsZW1lbnQgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJvbnZlcndhY2h0ZSByZWZlcmVudGllIFwiJXNcIiAtIHdvcmR0IGdlbmVnZWVyZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIm9udmVyd2FjaHRlIHBhZC1yZWZlcmVudGllIFwiJXNcIiAtIHdvcmR0IGdlbmVnZWVyZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgImtvbiBtb2dlbGlqa2hlZGVuIFwiJXNcIiBuaWV0IHZlcndlcmtlbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgImdlZW4gZG9lbGVsZW1lbnQgdm9vciBVUkkgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJnZWVuIGJyb25lbGVtZW50IHZvb3IgVVJJIFwiJXNcIiIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAic3ludGF4aXNmb3V0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAibGVnZSB0b24gXCIlc1wiIG9wZ2VnZXZlbiwgbmlldCB0b2VnZWxhdGVuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAiZ2VlbiBiaW4gXCIlc1wiLCBlbGVtZW50ZW4gdWl0cGFra2VuIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgImxlZ2UgcGlqcGxpam4gbmlldCB0b2VnZWxhdGVuIgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIkVyIHdvcmRlbiB2ZWVsIGJ1ZmZlcnMgZ2Vkcm9wdC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybiBwcm9ibGVlbSBtZXQgZ2VnZXZlbnNkb29ydm9lci4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJJbnRlcm5lIGZvdXQgbWV0IGdlZ2V2ZW5zZG9vcnZvZXIuIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICJJbnRlcm5lIGZvdXQgbWV0IGRlIGtsb2suIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICJNYXBwZW4gdmFuIGJ1ZmZlciBpcyBtaXNsdWt0LiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJGaWx0ZXJvcHpldHN0dWtrZW4iCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIkJlcGVyayBoZXQgYWFudGFsIHRvZWdlc3RhbmUgbW9nZWxpamtoZWRlbiAoTlVMIGJldGVrZW50IGFsbGUpLiBIZXQgIgotImluc3RlbGxlbiAgdmFuIGRlemUgZWlnZW5zY2hhcCB2ZXJlaXN0IGVlbiByZWZlcmVudGllIG5hYXIgaGV0IGdlZ2V2ZW4gIgotIkdzdENhcHMtb2JqZWN0LiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIk1vZHVzIGhvb2ZkLSBrbGVpbmUgbGV0dGVycyB2ZXJhbmRlcmVuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiR2VkcmFnIHZhbiBob29mZC0ga2xlaW5lIGxldHRlcnMgdmVyYW5kZXJlbiBmaWx0ZXJlbiIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIkdlZW4gdGlqZGVsaWprZSBtYXAgb3BnZWdldmVuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJLb24gZ2VlbiB0aWpkZWxpamsgYmVzdGFuZCBcIiVzXCIgYWFubWFrZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS2FuIGJlc3RhbmQgXCIlc1wiIG5pZXQgb3BlbmVuIG9tIHRlIGxlemVuLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIkZvdXQgYmlqIGhldCBzY2hyaWp2ZW4gb20gYmVzdGFuZCB0ZSBkb3dubG9hZGVuLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJHZWVuIGJlc3RhbmRzbmFhbSBnZWdldmVuIG9tIHRlIHNjaHJpanZlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJLYW4gYmVzdGFuZCBcIiVzXCIgbmlldCBvcGVuZW4gb20gdGUgc2NocmlqdmVuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRm91dCBiaWogaGV0IHNsdWl0ZW4gdmFuIGJlc3RhbmQgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRm91dCBiaWogZWVuIHNlZWsgaW4gYmVzdGFuZCBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJGb3V0IGJpaiBoZXQgc2NocmlqdmVuIG5hYXIgYmVzdGFuZCBcIiVzXCIuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkdlZW4gYmVzdGFuZHNuYWFtIGdlZ2V2ZW4gb20gdGUgbGV6ZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICJLYW4gZ2VlbiBpbmZvIG92ZXIgXCIlc1wiIGtyaWpnZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIlwiJXNcIiBpcyBlZW4gbWFwLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIkJlc3RhbmQgXCIlc1wiIGlzIGVlbiBzb2NrZXQuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiTWlzbHVrdCBuYSBpdGVyYXRpZXMgem9hbHMgZ2V2cmFhZ2QuIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAibW9nZWxpamtoZWRlbiIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgImdlZGV0ZWN0ZWVyZGUgbW9nZWxpamtoZWRlbiBpbiBzdHJvb20iCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtaW5pbXVtIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAiZm9yY2VlciBtb2dlbGlqa2hlZGVuIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgImZvcmNlZXIgbW9nZWxpamtoZWRlbiB6b25kZXIgZWVuIFwidHlwZWZpbmRcIiB0ZSBkb2VuIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIlN0cmVhbSBiZXZhdCBuaWV0IGdlbm9lZyBnZWdldmVucy4iCi0KLW1zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCi1tc2dzdHIgIlN0cm9vbSB6b25kZXIgZ2VnZXZlbnMuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiR2XDr21wbGVtZW50ZWVyZGUgaW50ZXJmYWNlczpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICJsZWVzYmFhciIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICJzY2hyaWpmYmFhciIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgInZlcm91ZGVyZCIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAiY29udHJvbGVlcmJhYXIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAidGUgdmVyYW5kZXJlbiBpbiBOVUwsIEdFUkVFRC0sIEdFUEFVWkVFUkQtIG9mIFNQRUVMLXN0YXR1cyIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgInRlIHZlcmFuZGVyZW4gaW4gTlVMLCBHRVJFRUQtIG9mIEdFUEFVWkVFUkQtc3RhdHVzIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwgb3IgUkVBRFkgc3RhdGUiCi1tc2dzdHIgImFsbGVlbiB0ZSB2ZXJhbmRlcmVuIGluIE5VTCBvZiBHRVJFRUQtc3RhdHVzIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICJCZXN0YW5kZW4gb3AgZGUgendhcnRlIGxpanN0OiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIlRvdGFhbCBhYW50YWw6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgYmVzdGFuZCBvcCBkZSB6d2FydGUgbGlqc3QiCi1tc2dzdHJbMV0gIiVkIGJlc3RhbmRlbiBvcCBkZSB6d2FydGUgbGlqc3QiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCBwbHVnaW4iCi1tc2dzdHJbMV0gIiVkIHBsdWdpbnMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQgaXRlbSBvcCBkZSB6d2FydGUgbGlqc3QiCi1tc2dzdHJbMV0gIiVkIGl0ZW1zIG9wIGRlIHp3YXJ0ZSBsaWpzdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQgbW9nZWxpamtoZWlkIgotbXNnc3RyWzFdICIlZCBtb2dlbGlqa2hlZGVuIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJBbGxlIGVsZW1lbnRlbiB3ZWVyZ2V2ZW4iCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJEcnVrIGRlIGxpanN0IG1ldCBiZXN0YW5kZW4gb3AgZGUgendhcnRlIGxpanN0IGFmIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJUb29uIGVlbiBkb29yIGVlbiBtYWNoaW5lIHRlIG9udGxlZGVuIGxpanN0IHZhbiBtb2dlbGlqa2hlZGVuIGRpZSBkZSAiCi0iZ2VzcGVjaWZpY2VlcmRlIHBsdWdpbiBvZiBhbGxlIHBsdWdpbnMgYWFuYmllZGVuLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJydWlrYmFhciBpbiB2ZXJiYW5kIG1ldCBleHRlcm5lICIKLSJhdXRvbWF0aXNjaGUgcGx1Z2luLWluc3RhbGxhdGllbWVjaGFuaXNtZW4iCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIlRvb24gZGUgaW5ob3VkIHZhbiBkZSBwbHVnaW4iCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiQ29udHJvbGVlciBvZiBoZXQgZ2VzcGVjaWZpY2VlcmRlIGVsZW1lbnQgb2YgcGx1Zy1pbiBiZXN0YWF0IgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotIkJpaiBoZXQgY29udHJvbGVyZW4gb2YgaGV0IGdlc3BlY2lmaWNlZXJkZSBlbGVtZW50IG9mIHBsdWctaW4gYmVzdGFhdCwgIgotImNvbnRyb2xlZXIgb29rIGRhdCB6aWpuIHZlcnNpZSBtaW5zdGVucyBkZSBnZXNwZWNpZmljZWVyZGUgdmVyc2llIGlzIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICIiCi0iVG9vbiBkZSBvbmRlcnN0ZXVuZGUgVVJJLXNjaGVtYSdzIG1ldCBkZSBlbGVtZW50ZW4gZGllIGRlemUgaW1wbGVtZW50ZXJlbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiS2FuIHBsdWdpbi1iZXN0YW5kIFwiJXNcIiBuaWV0IGxhZGVuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIkdlZW4gZWxlbWVudCBvZiBwbHVnaW4gJyVzJ1xuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiSW5kZXhzdGF0aXN0aWVrZW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJCZXJpY2h0ICMldSBvbnR2YW5nZW4gdWl0IGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiQmVyaWNodCAjJXUgb250dmFuZ2VuIHVpdCBwYWQgXCIlczolc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiQmVyaWNodCAjJXUgb250dmFuZ2VuIHVpdCBvYmplY3QgXCIlc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICJCZXJpY2h0ICMldSAoJXMpIG9udHZhbmdlbjogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRWluZGUtc3Ryb29tIG9udHZhbmdlbiB2YW4gZWxlbWVudCBcIiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiVEFHIEdFVk9OREVOICAgOiBnZXZvbmRlbiBkb29yIGVsZW1lbnQgXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiVEFHIEdFVk9OREVOICAgOiBnZXZvbmRlbiBkb29yIHBhZCBcIiVzOiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJUQUcgR0VWT05ERU4gICA6IGdldm9uZGVuIGRvb3Igb2JqZWN0IFwiJXNcIi5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJUQUcgR0VWT05ERU5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJJTkggR0VWT05ERU4gICA6IGdldm9uZGVuIGRvb3IgZWxlbWVudCBcIiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJJTkggR0VWT05ERU4gICA6IGdldm9uZGVuIGRvb3Igb2JqZWN0IFwiJXNcIi5cbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICJJTkggR0VWT05ERU5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiV0FBUlNDSFVXSU5HOiB2YW4gZWxlbWVudCAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJWb29yYmVyZWlkLCB3YWNodCBvcCBnZXJlZWRrb21lbiB2YW4gZGUgYnVmZmVyaW5nLi4uXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJWb29yYmVyZWlkLCB3YWNodCBvcCB2b29ydGdhbmcgb20gdGUgYmXDq2luZGlnZW4uLi5cbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiaW4gYnVmZmVyIG9wc2xhYW4uLi4iCi0KLW1zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJCdWZmZXJpbmcgaXMgZ2VyZWVkLCBwaWpwbGlqbiBnZXpldCBvcCBBRlNQRUxFTiAuLi5cbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIldvcmR0IGdlYnVmZmVyZCwgcGlqcGxpam4gZ2V6ZXQgb3AgUEFVWkUgLi4uXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICJIZXJ2ZXJkZWVsIGRlIHZlcnRyYWdpbmcuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJTdGVsIGRlIHN0YXR1cyBpbiBvcCAlcyB6b2FscyB2ZXJ6b2NodCBkb29yICVzLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJJbnRlcnJ1cHQ6IFBpanBsaWpuIGluZ2VzdGVsZCBvcCBnZXN0b3B0IC4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIlZvb3J0Z2FuZzogKCVzKSAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAib250YnJla2VuZCBlbGVtZW50OiBcIiVzXCJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiQ29udGV4dCB2ZXJrcmVnZW4gdmFuIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiVGFncyAob29rIGJla2VuZCBhbHMgbWV0YWRhdGEpIHdlZXJnZXZlbiIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIklOSCB1aXR2b2VyZW4gKGhvb2Zkc3R1a2tlbiBlbiB1aXRnYXZlbikiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJTdGF0dXNpbmZvcm1hdGllIGVuIGVpZ2Vuc2NoYXBzd2FhcnNjaHV3aW5nZW4gd2VlcmdldmVuIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiR2VlbiB2b29ydGdhbmdzaW5mb3JtYXRpZSBhZmRydWtrZW4iCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgIlVpdHZvZXIiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotIlN0YXR1c2luZm9ybWF0aWUgdm9vciBkZSBnZXNwZWNpZmljZWVyZGUgZWlnZW5zY2hhcCBuaWV0IHVpdHZvZXJlbiBhbHMgIgotInZlcmJvc2UtdWl0dm9lciBpcyBpbmdlc2NoYWtlbGQgKGthbiBtZWVyZGVyZSBrZXJlbiB3b3JkZW4gZ2VicnVpa3QpIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiTkFBTS1FSUdFTlNDSEFQIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJHZWVuIGZvdXRhZmhhbmRlbGFhciBpbnN0YWxsZXJlbiIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiRm9yY2VlciBlZW4gRU9TIG9wIGRlIGJyb24gYmlqIGhldCBhZnNsdWl0ZW4gdmFuIGRlIHBpanBsaWpuIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJWZXJ6YW1lbCBlbiBwcmludCBpbmRleHN0YXRpc3RpZWtlbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRk9VVDogcGlqcGxpam4ga29uIG5pZXQgZ2VtYWFrdCB3b3JkZW46ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiRk9VVDogcGlqcGxpam4ga29uIG5pZXQgZ2VtYWFrdCB3b3JkZW4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJXQUFSU0NIVVdJTkc6IGZvdXRpZXZlIHBpanBsaWpuOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJGT1VUOiBoZXQgJ3BpanBsaWpuJyBlbGVtZW50IHdlcmQgbmlldCBnZXZvbmRlbi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJQaWpwbGlqbiBnZXpldCBvcCBnZXBhdXplZXJkIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiRk9VVDogcGlqcGxpam4gd2lsIG5pZXQgcGF1emVyZW4uXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIlBpanBsaWpuIGtsYWFyIGVuIGhlZWZ0IFBSRVJPTEwgbmlldCBub2RpZy4uLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiUGlqcGxpam4gaXMgYmV6aWcgbWV0IFBSRVJPTEwgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIkZPVVQ6IHBpanBsaWpuIHdpbCBuaWV0IFBSRVJPTEwgdWl0dm9lcmVuLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJQaWpwbGlqbiBrbGFhciBtZXQgUFJFUk9MTCAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiUGlqcGxpam4gZ2V6ZXQgb3AgYWZzcGVsZW4gLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkZPVVQ6IHBpanBsaWpuIHdpbCBuaWV0IGFmc3BlbGVuLlxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIkVPUyBiaWogYWZzbHVpdGVuIGluZ2VzY2hha2VsZCAtLSBGb3JjZWVyIGVlbiBFT1Mgb3AgZGUgcGlqcGxpam5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICJFT1MgYmlqIGFmc2x1aXRlbiBpbmdlc2NoYWtlbGQgLS0gd2FjaHQgb3AgRU9TIG5hIGZvdXRcbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICJXYWNodCBvcCBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyBvbnR2YW5nZW4gLSBwaWpwbGlqbiB3b3JkdCBnZXN0b3B0Li4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiSW50ZXJydXB0IGJpaiB3YWNodGVuIG9wIEVPUyAtIHBpanBsaWpuIHdvcmR0IGdlc3RvcHQuLi5cbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJFciB0cmFkIGVlbiBmb3V0IG9wIGJpaiBoZXQgd2FjaHRlbiBvcCBFT1NcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICJVaXR2b2VyaW5nIGJlw6tpbmRpZ2QgbmEgJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIlBpanBsaWpuIGdlemV0IG9wIGdlcmVlZCAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiUGlqcGxpam4gZ2V6ZXQgb3AgTlVMTCAuLi5cbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIlBpanBsaWpuIHdvcmR0IHZyaWpnZW1hYWt0IC4uLlxuIgotCi0jfiBtc2dpZCAiYmluIgotI34gbXNnc3RyICJiaW4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybmUgZm91dCBpbiBnZWdldmVuc3N0cm9vbS4iCi0KLSN+IG1zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgotI34gbXNnc3RyICJTdGF0dXNpbmZvcm1hdGllIHZhbiBzb29ydCBTT09SVCBuaWV0IHdlZXJnZXZlbiIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiU09PUlQxLFNPT1JUMiwuLi4iCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgInZlcmJpbmRpbmcgem9uZGVyIGJyb25lbGVtZW50IgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAidmVyYmluZGluZyB6b25kZXIgZG9lbGVsZW1lbnQiCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAiZ2VlbiBlbGVtZW50IG9tIFVSSSBcIiVzXCIgbWVlIHRlIHZlcmJpbmRlbiIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAia29uIGRvZWxlbGVtZW50IG5pZXQgdmVyYmluZGVuIHZvb3IgVVJJIFwiJXNcIiIKLQotI34gbXNnaWQgIm1heGltdW0iCi0jfiBtc2dzdHIgIm1heGltdW0iCi0KLSN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgotI34gbXNnc3RyICIiCi0jfiAiR2VicnVpazogZ3N0LXhtbGxhdW5jaCA8YmVzdGFuZC54bWw+IFsgZWxlbWVudC5laWdlbnNjaGFwPXdhYXJkZSAuLi4gXVxuIgotCi0jfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgotI34gbXNnc3RyICJGT1VUOiB2ZXJ3ZXJrZW4gdmFuIHhtbC1iZXN0YW5kICclcycgbWlzbHVrdC5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKLSN+IG1zZ3N0ciAiRk9VVDogZ2VlbiBib3ZlbnN0ZSBwaWpwbGlqbi1lbGVtZW50IGdldm9uZGVuIGluIGZpbGUgJyVzJy5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIldBQVJTQ0hVV0lORzogc2xlY2h0cyDDqcOpbiBlbGVtZW50IG9wIGhldCBob29nc3RlIG5pdmVhdSBvbmRlcnN0ZXVuZCBvcCAiCi0jfiAiZGl0IG1vbWVudC5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiRk9VVDoga29uIGFyZ3VtZW50ICVkIG9wIG9wZHJhY2h0cmVnZWwgbmlldCB2ZXJ3ZXJrZW46ICVzLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKLSN+IG1zZ3N0ciAiV0FBUlNDSFVXSU5HOiBlbGVtZW50IG1ldCBuYWFtICclcycgbmlldCBnZXZvbmRlbi5cbiIKLQotI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCi0jfiBtc2dzdHIgIlhNTC1yZXByZXNlbnRhdGllIHZhbiBwaWpwbGlqbiBpbiBCRVNUQU5EIG9wc2xhYW4gZW4gYWZzbHVpdGVuIgotCi0jfiBtc2dpZCAiRklMRSIKLSN+IG1zZ3N0ciAiQkVTVEFORCIKLQotI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKLSN+IG1zZ3N0ciAiR2VlbiBzaWduYWFsYWZoYW5kZWxhYXJzIGluc3RhbGxlcmVuIHZvb3IgU0lHVVNSMSBlbiBTSUdVU1IyIgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiVG9ld2lqemluZ3NzcG9vciB3ZWVyZ2V2ZW4gKGluZGllbiBhYW5nZXpldCB0aWpkZW5zIGNvbXBpbGVyZW4pIgpkaWZmIC0tZ2l0IGEvcG8vcGwuZ21vIGIvcG8vcGwuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGNjNDQ5Li4wMDAwMDAwCi0tLSBhL3BvL3BsLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3BsLnBvIGIvcG8vcGwucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTc5MDYuLjAwMDAwMDAKLS0tIGEvcG8vcGwucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxMzI0ICswLDAgQEAKLSMgUG9saXNoIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KLSMgSmFrdWIgQm9ndXN6IDxxYm9vc2hAcGxkLWxpbnV4Lm9yZz4sIDIwMDctMjAxNi4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAxLjEwLjBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0xMS0wMSAyMDo0MSswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBKYWt1YiBCb2d1c3ogPHFib29zaEBwbGQtbGludXgub3JnPlxuIgotIkxhbmd1YWdlLVRlYW06IFBvbGlzaCA8dHJhbnNsYXRpb24tdGVhbS1wbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IHBsXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1CdWdzOiBSZXBvcnQgdHJhbnNsYXRpb24gZXJyb3JzIHRvIHRoZSBMYW5ndWFnZS1UZWFtIGFkZHJlc3MuXG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG49PTEgPyAwIDogbiUxMD49MiAmJiBuJTEwPD00ICYmIChuJTEwMDwxMCAiCi0ifHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiV3lwaXNhbmllIHdlcnNqaSBHU3RyZWFtZXJhIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIlVjenluaWVuaWUgd3N6eXN0a2ljaCBvc3RyemXFvGXFhCBrcnl0eWN6bnltaSIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJXeXBpc2FuaWUgZG9zdMSZcG55Y2gga2F0ZWdvcmlpIGRpYWdub3N0eWtpIGkgemFrb8WEY3plbmllIgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iRG9tecWbbG55IHBvemlvbSBkaWFnbm9zdHlraSBvZCAxICh0eWxrbyBixYLEmWR5KSBkbyA5ICh3c3p5c3RrbykgbHViIDAgZGxhICIKLSJicmFrdSB3eWrFm2NpYSIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJQT1pJT00iCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iUm96ZHppZWxvbmEgcHJ6ZWNpbmthbWkgbGlzdGEgcGFyIG5hendhX2thdGVnb3JpaTpwb3ppb20gZGxhIHV6eXNrYW5pYSAiCi0ib2tyZcWbbG9ueWNoIHBvemlvbcOzdyBkbGEgcG9zemN6ZWfDs2xueWNoIGthdGVnb3JpaS4gUHJ6eWvFgmFkOiBHU1RfQVVUT1BMVUc6NSwiCi0iR1NUX0VMRU1FTlRfKjozIgotCi1tc2dpZCAiTElTVCIKLW1zZ3N0ciAiTElTVEEiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiV3nFgsSFY3plbmllIGtvbG9yb3dhbmVnbyB3eWrFm2NpYSBkaWFnbm9zdHljem5lZ28iCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotIlptaWFuYSB0cnlidSBrb2xvcm93YW5pYSBsb2d1IGRpYWdub3N0eWN6bmVnby4gTW/FvGxpd2UgdHJ5Ynk6IG9mZiwgb24sICIKLSJkaXNhYmxlLCBhdXRvLCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIld5xYLEhWN6ZW5pZSBkaWFnbm9zdHlraSIKLQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICJXxYLEhWN6ZW5pZSBzemN6ZWfDs8WCb3dlaiBkaWFnbm9zdHlraSB3Y3p5dHl3YW5pYSB3dHljemVrIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiUm96ZHppZWxvbmUgcHJ6ZWNpbmthbWkgxZtjaWXFvGtpIHphd2llcmFqxIVjZSB3dHljemtpIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIsWaQ0lFxbtLSSIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSJSb3pkemllbG9uYSBwcnplY2lua2FtaSBsaXN0YSB3dHljemVrIGRvIHdjemVzbmVnbyB3Y3p5dGFuaWEgb2JvayBsaXN0eSAiCi0iemFwaXNhbmVqIHcgem1pZW5uZWogxZtyb2Rvd2lza293ZWogR1NUX1BMVUdJTl9QQVRIIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiV1RZQ1pLSSIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSJXecWCxIVjemVuaWUgcHJ6ZWNod3l0eXdhbmlhIGLFgsSZZMOzdyBvY2hyb255IHBhbWnEmWNpIHByenkgd2N6eXR5d2FuaXUgd3R5Y3playIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJXecWCxIVjemVuaWUgdWFrdHVhbG5pYW5pYSByZWplc3RydSIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLSJXecWCxIVjemVuaWUgdXJ1Y2hhbWlhbmlhIHByb2Nlc3UgcG9tb2NuaWN6ZWdvIHByenkgcHJ6ZXN6dWtpd2FuaXUgcmVqZXN0cnUiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiT3BjamUgR1N0cmVhbWVyYSIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIlBva2F6YW5pZSBvcGNqaSBHU3RyZWFtZXJhIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIk5pZXpuYW5hIG9wY2phIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbmFwb3RrYcWCIG9nw7NsbnkgYsWCxIVkIGfFgsOzd25laiBiaWJsaW90ZWtpLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iUHJvZ3JhbWnFm2NpIEdTdHJlYW1lcmEgYnlsaSB6Ynl0IGxlbml3aSwgYWJ5IHByenlwaXNhxIcgdGVtdSBixYLEmWRvd2kga29kLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYToga29kIG5pZSB6YWltcGxlbWVudG93YW55LiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIkLFgsSFZCBHU3RyZWFtZXJhOiB6bWlhbmEgc3RhbnUgbmllIHBvd2lvZMWCYSBzacSZLCBhIGt0w7NyecWbIGVsZW1lbnQgbmllICIKLSJwcnplc8WCYcWCIHfFgmHFm2Npd2VnbyBrb211bmlrYXR1IGLFgsSZZHUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkLFgsSFZCB3ZXduxJl0cnpueSBHU3RyZWFtZXJhOiBwcm9ibGVtIHogd3lyw7N3bmFuaWVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYTogcHJvYmxlbSB6IHfEhXRrYW1pLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkLFgsSFZCBHU3RyZWFtZXJhOiBwcm9ibGVtIHogbmVnb2NqYWNqxIUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55IEdTdHJlYW1lcmE6IHByb2JsZW0gemUgemRhcnplbmlhbWkuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYTogcHJvYmxlbSB6IHByemVtaWVzemN6YW5pZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJCxYLEhWQgd2V3bsSZdHJ6bnkgR1N0cmVhbWVyYTogcHJvYmxlbSB6IG1vxbxsaXdvxZtjaWFtaS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55IEdTdHJlYW1lcmE6IHByb2JsZW0gemUgem5hY3puaWthbWkuIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiVyB0ZWogaW5zdGFsYWNqaSBHU3RyZWFtZXJhIGJyYWt1amUgd3R5Y3praS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJCxYLEhWQgR1N0cmVhbWVyYTogcHJvYmxlbSB6IHplZ2FyZW0uIgotCi1tc2dpZCAiIgotIlRoaXMgYXBwbGljYXRpb24gaXMgdHJ5aW5nIHRvIHVzZSBHU3RyZWFtZXIgZnVuY3Rpb25hbGl0eSB0aGF0IGhhcyBiZWVuICIKLSJkaXNhYmxlZC4iCi1tc2dzdHIgIiIKLSJUYSBhcGxpa2FjamEgcHLDs2J1amUgdcW8ecSHIGZ1bmtjam9uYWxub8WbY2kgR1N0cmVhbWVyYSwga3TDs3JhIHpvc3RhxYJhICIKLSJ3ecWCxIVjem9uYS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBuYXBvdGthxYIgb2fDs2xueSBixYLEhWQgYmlibGlvdGVraSB3c3BpZXJhasSFY2VqLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6YWluaWNqb3dhxIcgYmlibGlvdGVraSB3c3BpZXJhasSFY2VqLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgemFta27EhcSHIGJpYmxpb3Rla2kgd3NwaWVyYWrEhWNlai4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBza29uZmlndXJvd2HEhyBiaWJsaW90ZWtpIHdzcGllcmFqxIVjZWouIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJCxYLEhWQga29kb3dhbmlhLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbmFwb3RrYcWCIG9nw7NsbnkgYsWCxIVkIHphc29iw7N3LiIKLQotbXNnaWQgIlJlc291cmNlIG5vdCBmb3VuZC4iCi1tc2dzdHIgIk5pZSB6bmFsZXppb25vIHphc29idS4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJaYXPDs2IgemFqxJl0eSBsdWIgbmllZG9zdMSZcG55LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG90d29yennEhyB6YXNvYnUgZG8gb2Rjenl0dS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgemFzb2J1IGRvIHphcGlzdS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgemFzb2J1IGRvIG9kY3p5dHUgaSB6YXBpc3UuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHphbWtuxIXEhyB6YXNvYnUuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIk5pZSB1ZGHFgiBzacSZIG9kY3p5dCB6IHphc29idS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJOaWUgdWRhxYIgc2nEmSB6YXBpcyBkbyB6YXNvYnUuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnplbWllc3pjemVuaWUgdyB6YXNvYmllLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6c3luY2hyb25pem93YcSHIHphc29idS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHBvYnJhxIcvdXN0YXdpxIcgdXN0YXdpZcWEIHphc29idS4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIkJyYWsgd29sbmVnbyBtaWVqc2NhIHcgemFzb2JpZS4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJCcmFrIGF1dG9yeXphY2ppIGRvc3TEmXB1IGRvIHphc29idS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBuYXBvdGthxYIgb2fDs2xueSBixYLEhWQgc3RydW1pZW5pLiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiRWxlbWVudCBuaWUgb2JzxYJ1Z3VqZSB0ZWdvIHN0cnVtaWVuaWEuIFByb3N6xJkgemfFgm9zacSHIGLFgsSFZC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9rcmXFm2xpxIcgcm9kemFqdSBzdHJ1bWllbmlhLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiU3RydW1pZcWEIGplc3QgaW5uZWdvIHJvZHphanUgbmnFvCBvYnPFgnVnaXdhbmUgcHJ6ZXogdGVuIGVsZW1lbnQuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICJCcmFrIGtvZGVrYSBwb3RyYWZpxIVjZWdvIG9ic8WCdcW8ecSHIHRlbiByb2R6YWogc3RydW1pZW5pYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB6ZGVrb2Rvd2HEhyBzdHJ1bWllbmlhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHpha29kb3dhxIcgc3RydW1pZW5pYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHJvenBsZcWbxIcgc3RydW1pZW5pYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBzcGxlxZvEhyBzdHJ1bWllbmlhLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIlN0cnVtaWXFhCBtYSBuaWV3xYJhxZtjaXd5IGZvcm1hdC4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiU3RydW1pZcWEIGplc3QgemFzenlmcm93YW55LCBhIG9kc3p5ZnJvd3l3YW5pZSBuaWUgamVzdCBvYnPFgnVnaXdhbmUuIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIlN0cnVtaWXFhCBqZXN0IHphc3p5ZnJvd2FueSBpIG5pZSBtb8W8ZSBiecSHIG9kc3p5ZnJvd2FueSB6IHBvd29kdSBicmFrdSAiCi0icGFzdWrEhWNlZ28ga2x1Y3phLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJCcmFrIGtvbXVuaWthdHUgYsWCxJlkdSBkbGEgZG9tZW55ICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICJCcmFrIHN0YW5kYXJkb3dlZ28ga29tdW5pa2F0dSBvIGLFgsSZZHppZSBkbGEgZG9tZW55ICVzIGkga29kdSAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIld5YnJhbnkgemVnYXIgbmllIG1vxbxlIGJ5xIcgdcW8eXdhbnkgdyBwb3Rva3UuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICJCxYLEhWQgemFwaXN1IHBhbWnEmWNpIHBvZHLEmWN6bmVqIHJlamVzdHJ1IGRvICVzOiAlcyIKLQotbXNnaWQgInRpdGxlIgotbXNnc3RyICJ0eXR1xYIiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJwb3dzemVjaG5pZSB1xbx5d2FueSB0eXR1xYIiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAidHl0dcWCIGRvIHNvcnRvd2FuaWEiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwb3dzemVjaG5pZSB1xbx5d2FueSB0eXR1xYIgbmEgcG90cnplYnkgc29ydG93YW5pYSIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAiYXJ0eXN0YSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAib3NvYmEgbHViIG9zb2J5IG9kcG93aWVkemlhbG5lIHphIG5hZ3JhbmllIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJhcnR5c3RhIGRvIHNvcnRvd2FuaWEiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIm9zb2JhIGx1YiBvc29ieSBvZHBvd2llZHppYWxuZSB6YSBuYWdyYW5pZSAtIG5hIHBvdHJ6ZWJ5IHNvcnRvd2FuaWEiCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAiYWxidW0iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAiYWxidW0gemF3aWVyYWrEhWN5IHRlIGRhbmUiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiYWxidW0gZG8gc29ydG93YW5pYSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJhbGJ1bSB6YXdpZXJhasSFY3kgdGUgZGFuZSAtIG5hIHBvdHJ6ZWJ5IHNvcnRvd2FuaWEiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgImFydHlzdGEgZGxhIGFsYnVtdSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiQXJ0eXN0YSBkbGEgY2HFgmVnbyBhbGJ1bXUgdyBwb3N0YWNpIGRvIHd5xZt3aWV0bGFuaWEiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgImFydHlzdGEgZG8gc29ydG93YW5pYSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiQXJ0eXN0YSBkbGEgY2HFgmVnbyBhbGJ1bXUgdyBwb3N0YWNpIGRvIHNvcnRvd2FuaWEiCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICJkYXRhIgotCi1tc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXRhIHV0d29yemVuaWEgdHljaCBkYW55Y2ggKGpha28gc3RydWt0dXJhIEdEYXRlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXRhL2N6YXMiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdGEgaSBjemFzIHV0d29yemVuaWEgdHljaCBkYW55Y2ggKGpha28gc3RydWt0dXJhIEdzdERhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJnYXR1bmVrIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImdhdHVuZWsgZG8ga3TDs3JlZ28gbmFsZcW8xIUgdGUgZGFuZSIKLQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgImtvbWVudGFyeiIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICJkb3dvbG55IHRla3N0IGtvbWVudHVqxIVjeSB0ZSBkYW5lIgotCi1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAicm96c3plcnpvbnkga29tZW50YXJ6IgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0iZG93b2xueSB0ZWtzdCBrb21lbnR1asSFY3kgZGFuZSB3IHBvc3RhY2kga2x1Y3o9d2FydG/Fm8SHIGx1YiAiCi0ia2x1Y3pbasSZenlrXT1rb21lbnRhcnoiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIm51bWVyIMWbY2llxbxraSIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJudW1lciDFm2NpZcW8a2kgd2V3bsSFdHJ6IHpiaW9ydSIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJsaWN6YmEgxZtjaWXFvGVrIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAibGljemJhIMWbY2llxbxlayB3ZXduxIV0cnogemJpb3J1IG9iZWptdWrEhWN5Y2ggdMSZIMWbY2llxbxrxJkiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAibnVtZXIgcMWCeXR5IgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibnVtZXIgcMWCeXR5IHdld27EhXRyeiBrb2xla2NqaSIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgImxpY3piYSBwxYJ5dCIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICJsaWN6YmEgcMWCeXQgd2V3bsSFdHJ6IGtvbGVrY2ppIG9iZWptdWrEhWN5Y2ggdMSZIMWbY2llxbxrxJkiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAicG/Fgm/FvGVuaWUiCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotIlBvY2hvZHplbmllIHV0d29ydSBqYWtvIFVSSSAocG/Fgm/FvGVuaWUsIGdkemllIHRyenltYW55IGplc3Qgb3J5Z2luYcWCIHBsaWt1ICIKLSJsdWIgc3RydW1pZW5pYSkiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAic3Ryb25hIGRvbW93YSIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIlN0cm9uYSBkb21vd2EgdGVnbyB1dHdvcnUgKGFydHlzdHkgbHViIGZpbG11KSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJvcGlzIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJrcsOzdGtpIHRla3N0IG9waXN1asSFY3kgdHJlxZvEhyBkYW55Y2giCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ3ZXJzamEiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAid2Vyc2phIHR5Y2ggZGFueWNoIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiIgotIkludGVuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAobWnEmWR6eW5hcm9kb3d5IGtvZCBuYWdyYW5pYSkgLSBwLiAiCi0iaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAib3JnYW5pemFjamEiCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgInByYXdhIGF1dG9yc2tpZSIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgImluZm9ybWFjamEgbyBwcmF3YWNoIGF1dG9yc2tpY2ggZG8gdHljaCBkYW55Y2giCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJVUkkgcHJhdyBhdXRvcnNraWNoIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgZG8gaW5mb3JtYWNqaSBvIHByYXdhY2ggYXV0b3Jza2ljaCBkbyB0eWNoIGRhbnljaCIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgImtvZHVqxIVjeSIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIm5hendhIG9zb2J5IGx1YiBvcmdhbml6YWNqaSBrb2R1asSFY2VqIG5hZ3JhbmllIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAia29udGFrdCIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImluZm9ybWFjamUga29udGFrdG93ZSIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgImxpY2VuY2phIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJsaWNlbmNqYSBkYW55Y2giCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAiVVJJIGxpY2VuY2ppIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgZG8gbGljZW5jamkgZGFueWNoIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJ3eWtvbmF3Y2EiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAib3NvYmEgbHViIG9zb2J5IHd5a29udWrEhWNlIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgImtvbXBvenl0b3IiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgIm9zb2JhIGx1YiBvc29ieSwga3TDs3JlIHNrb21wb25vd2HFgnkgdG8gbmFncmFuaWUiCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgImR5cnlnZW50IgotCi1tc2dpZCAiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IgotbXNnc3RyICJ3eXN6Y3plZ8OzbG5pZW5pZSBkeXJ5Z2VudGEvd3lrb25hd2N5IgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgImN6YXMgdHJ3YW5pYSIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJkxYJ1Z2/Fm8SHIHcgamVkbm9zdGthY2ggY3phc3UgR1N0cmVhbWVyYSAobmFub3Nla3VuZGFjaCkiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAia29kZWsiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImtvZGVrIHXFvHl0eSBkbyB6YXBpc3UgZGFueWNoIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgImtvZGVrIG9icmF6dSIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgdcW8eXR5IGRvIHphcGlzdSBkYW55Y2ggb2JyYXp1IgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImtvZGVrIGTFundpxJlrdSIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgdcW8eXR5IGRvIHphcGlzdSBkYW55Y2ggZMW6d2nEmWt1IgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgImtvZGVrIG5hcGlzw7N3IgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2RlayB1xbx5dHkgZG8gemFwaXN1IGRhbnljaCBuYXBpc8OzdyIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgImZvcm1hdCBrb250ZW5lcmEiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiZm9ybWF0IGtvbnRlbmVyYSB1xbx5dGVnbyBkbyB6YXBpc3UgZGFueWNoIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAicHLEmWRrb8WbxIcgYml0b3dhIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiZG9rxYJhZG5hIGx1YiDFm3JlZG5pYSBwcsSZZGtvxZvEhyB3IGJpdGFjaCBuYSBzZWt1bmTEmSIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAibm9taW5hbG5hIHByxJlka2/Fm8SHIGJpdG93YSIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm5vbWluYWxuYSBwcsSZZGtvxZvEhyB3IGJpdGFjaCBuYSBzZWt1bmTEmSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWluaW1hbG5hIHByxJlka2/Fm8SHIGJpdG93YSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm1pbmltYWxuYSBwcsSZZGtvxZvEhyB3IGJpdGFjaCBuYSBzZWt1bmTEmSIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWFrc3ltYWxuYSBwcsSZZGtvxZvEhyBiaXRvd2EiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtYWtzeW1hbG5hIHByxJlka2/Fm8SHIHcgYml0YWNoIG5hIHNla3VuZMSZIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAia29kZXIiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJrb2RlciB1xbx5dHkgZG8gemFrb2Rvd2FuaWEgdGVnbyBzdHJ1bWllbmlhIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJ3ZXJzamEga29kZXJhIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAid2Vyc2phIGtvZGVyYSB1xbx5dGEgZG8gemFrb2Rvd2FuaWEgdGVnbyBzdHJ1bWllbmlhIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJudW1lciBzZXJ5am55IgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAibnVtZXIgc2VyeWpueSDFm2NpZcW8a2kiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgIm9zacSFZ2kgb2R0d2FyemFuaWEgxZtjaWXFvGtpIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAib3NpxIVnaSDFm2NpZcW8a2kgdyBkYiIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAic3pjenl0IG9kdHdhcnphbmlhIMWbY2llxbxraSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJzemN6eXQgxZtjaWXFvGtpIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJvc2nEhWdpIG9kdHdhcnphbmlhIGFsYnVtdSIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgIm9zacSFZ2kgYWxidW11IHcgZGIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgInN6Y3p5dCBvZHR3YXJ6YW5pYSBhbGJ1bXUiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAic3pjenl0IGFsYnVtdSIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICJwb3ppb20gb2RuaWVzaWVuaWEgb3NpxIVnw7N3IgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAicG96aW9tIG9kbmllc2llbmlhIHdhcnRvxZtjaSBvc2nEhWfDs3cgxZtjaWXFvGtpIGkgYWxidW11IgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAia29kIGrEmXp5a2EiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICJrb2QgasSZenlrYSBkbGEgdGVnbyBzdHJ1bWllbmlhLCB6Z29kbnkgeiBJU08tNjM5LTEgbHViIElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgIm5hendhIGrEmXp5a2EiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAidGVrc3Rvd2EgbmF6d2EgasSZenlrYSwgdyBqYWtpbSBqZXN0IHRlbiBzdHJ1bWllxYQiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAib2JyYXplayIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIm9icmF6ZWsgendpxIV6YW55IHogdHltIHN0cnVtaWVuaWVtIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJwb2RnbMSFZCBvYnJhemthIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJwb2RnbMSFZCBvYnJhemthIHp3acSFemFuZWdvIHogdHltIHN0cnVtaWVuaWVtIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAiemHFgsSFY3puaWsiCi0KLW1zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJwbGlrIHphxYLEhWN6b255IGRvIHRlZ28gc3RydW1pZW5pYSIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgInVkZXJ6ZW5pYSBuYSBtaW51dMSZIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgImxpY3piYSB1ZGVyemXFhCBuYSBtaW51dMSZIHcgZMW6d2nEmWt1IgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgInPFgm93YSBrbHVjem93ZSIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICJvZGR6aWVsb25lIHByemVjaW5rYW1pIHPFgm93YSBrbHVjem93ZSBvcGlzdWrEhWNlIHRyZcWbxIciCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibmF6d2EgcG/Fgm/FvGVuaWEgZ2VvZ3JhZmljem5lZ28iCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotImN6eXRlbG55IGRsYSBjesWCb3dpZWthIG9waXMgbWllanNjYSwgZ2R6aWUgdXR3w7NyIHpvc3RhxYIgbmFncmFueSBsdWIgIgotInd5cHJvZHVrb3dhbnkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgInN6ZXJva2/Fm8SHIGdlb2dyYWZpY3puYSIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotInN6ZXJva2/Fm8SHIGdlb2dyYWZpY3puYSBtaWVqc2NhLCBnZHppZSB1dHfDs3Igem9zdGHFgiBuYWdyYW55IGx1YiB3eXByb2R1a293YW55ICIKLSJ3eXJhxbxvbmEgdyBzdG9wbmlhY2ggemdvZG5pZSB6IFdTRzg0ICgwIGRsYSByw7N3bmlrYSwgd2FydG/Fm2NpIHVqZW1uZSBkbGEgIgotInN6ZXJva2/Fm2NpIHBvxYJ1ZG5pb3d5Y2gpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiZMWCdWdvxZvEhyBnZW9ncmFmaWN6bmEiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0iZMWCdWdvxZvEhyBnZW9ncmFmaWN6bmEgbWllanNjYSwgZ2R6aWUgdXR3w7NyIHpvc3RhxYIgbmFncmFueSBsdWIgd3lwcm9kdWtvd2FueSAiCi0id3lyYcW8b25hIHcgc3RvcG5pYWNoIHpnb2RuaWUgeiBXU0c4NCAoMCBkbGEgcGllcndzemVnbyBwb8WCdWRuaWthIHcgR3JlZW53aWNoLyIKLSJVSywgd2FydG/Fm2NpIHVqZW1uZSBkbGEgZMWCdWdvxZtjaSB6YWNob2RuaWNoKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgInd5c29rb8WbxIcgbi5wLm0uIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotInd5c29rb8WbxIcgbWllanNjYSwgZ2R6aWUgdXR3w7NyIHpvc3RhxYIgbmFncmFueSBsdWIgd3lwcm9kdWtvd2FueSB3eXJhxbxvbmEgdyAiCi0ibWV0cmFjaCB6Z29kbmllIHogV1NHODQgKDAgdG8gxZtyZWRuaSBwb3ppb20gbW9yemEpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgImtyYWogbG9rYWxpemFjamkiCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAiIgotImtyYWogKG5hendhIGFuZ2llbHNrYSksIHcga3TDs3J5bSB1dHfDs3Igem9zdGHFgiBuYWdyYW55IGx1YiB3eXByb2R1a293YW55IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgIm1pYXN0byBsb2thbGl6YWNqaSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0ibWllanNjb3dvxZvEhyAobmF6d2EgYW5naWVsc2thKSwgdyBrdMOzcmVqIHV0d8OzciB6b3N0YcWCIG5hZ3JhbnkgbHViICIKLSJ3eXByb2R1a293YW55IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJjesSZxZvEhyBtaWVqc2Nvd2/Fm2NpIGxva2FsaXphY2ppIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLSJtaWVqc2NlIHdld27EhXRyeiBtaWVqc2Nvd2/Fm2NpLCB3IGt0w7NyeW0gdXR3w7NyIHpvc3RhxYIgbmFncmFueSBsdWIgIgotInd5cHJvZHVrb3dhbnkgKG5wLiBkemllbG5pY2EpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCi1tc2dzdHIgImLFgsSFZCBwb3ppb21lZ28gcG/Fgm/FvGVuaWEgZ2VvZ3JhZmljem5lZ28iCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAic3BvZHppZXdhbnkgYsWCxIVkIG9zemFjb3dhbmlhIHBvxYJvxbxlbmlhIHBvemlvbWVnbyAodyBtZXRyYWNoKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAicHLEmWRrb8WbxIcgem1pYW55IHBvxYJvxbxlbmlhIGdlb2dyYWZpY3puZWdvIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICJwcsSZZGtvxZvEhyBydWNodSB1cnrEhWR6ZW5pYSBuYWdyeXdhasSFY2VnbyB3IHRyYWtjaWUgbmFncmFuaWEgKG0vcykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJraWVydW5layB6bWlhbnkgcG/Fgm/FvGVuaWEgZ2VvZ3JhZmljem5lZ28iCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJva3JlxZtsZW5pZSBraWVydW5rdSBydWNodSB1cnrEhWR6ZW5pYSBuYWdyeXdhasSFY2VnbyB3IHN0b3BuaWFjaCAodyBub3RhY2ppICIKLSJ6bWllbm5vcHJ6ZWNpbmtvd2VqKTsgMCBvem5hY3phIGdlb2dyYWZpY3puxIUgcMOzxYJub2MsIHJvxZtuaWUgemdvZG5pZSB6IHJ1Y2hlbSAiCi0id3NrYXrDs3dlayB6ZWdhcmEiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgImtpZXJ1bmVrIGdlb2dyYWZpY3pueSB1cnrEhWR6ZW5pYSBuYWdyeXdhasSFY2VnbyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotIm9rcmXFm2xlbmllIGtpZXJ1bmt1LCB3IGpha2ltIGJ5xYJvIHNraWVyb3dhbmUgdXJ6xIVkemVuaWUgbmFncnl3YWrEhWNlIHcgIgotInRyYWtjaWUgbmFncmFuaWEgLSB3IHN0b3BuaWFjaCwgdyBub3RhY2ppIHptaWVubm9wcnplY2lua293ZWo7IDAgb3puYWN6YSAiCi0iZ2VvZ3JhZmljem7EhSBww7PFgm5vYywgcm/Fm25pZSB6Z29kbmllIHogcnVjaGVtIHdza2F6w7N3ZWsgemVnYXJhIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIm5hendhIHdpZG93aXNrYSIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIiIKLSJOYXp3YSB3aWRvd2lza2EgdGVsZXdpenlqbmVnby9wb2RjYXN0dS9zZXJpYWx1LCB6IGt0w7NyZWdvIHBvY2hvZHppIHV0d8OzciIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAibmF6d2Egd2lkb3dpc2thIGRvIHNvcnRvd2FuaWEiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIk5hendhIHdpZG93aXNrYSB0ZWxld2l6eWpuZWdvL3BvZGNhc3R1L3NlcmlhbHUgbmEgcG90cnplYnkgc29ydG93YW5pYSIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICJudW1lciBvZGNpbmthIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIk51bWVyIG9kY2lua2EgdyBzZXpvbmllLCB6IGt0w7NyZWdvIHBvY2hvZHppIHV0d8OzciIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgIm51bWVyIHNlem9udSIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJOdW1lciBzZXpvbnUgd2lkb3dpc2thLCB6IGt0w7NyZWdvIHBvY2hvZHppIHV0d8OzciIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAidGVrc3QiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIlRla3N0IHV0d29ydSwgdcW8eXdhbnkgbmFqY3rEmcWbY2llaiBkbGEgcGlvc2VuZWsiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAibmF6d2Ega29tcG96eXRvcmEgZG8gc29ydG93YW5pYSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIm9zb2JhIGx1YiBvc29ieSwga3TDs3JlIHNrb21wb25vd2HFgnkgbmFncmFuaWUgLSBuYSBwb3RyemVieSBzb3J0b3dhbmlhIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgImdydXBvd2FuaWUiCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLSJHcnVwb3dhbmllIHBvd2nEhXphbnljaCB1dHdvcsOzdyByb3pjacSFZ2FqxIVjZSBzacSZIG5hIHdpZWxlIMWbY2llxbxlaywgamFrIHLDs8W8bmUgIgotImN6xJnFm2NpIGtvbmNlcnR1OyBqZXN0IHRvIHBvemlvbSB3ecW8c3p5IG5pxbwgxZtjaWXFvGthLCBhIG5pxbxzenkgbmnFvCBhbGJ1bSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJvY2VuYSB1xbx5dGtvd25pa2EiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIk9jZW5hIHByenlwaXNhbmEgcHJ6ZXogdcW8eXRrb3duaWthLiBJbSB3ecW8c3phLCB0eW0gYmFyZHppZWogdcW8eXRrb3duaWsgbHViaSAiCi0idXR3w7NyIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAicHJvZHVjZW50IHVyesSFZHplbmlhIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiUHJvZHVjZW50IHVyesSFZHplbmlhIHXFvHl0ZWdvIGRvIHV0d29yemVuaWEgdGVnbyBuYWdyYW5pYSIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAibW9kZWwgdXJ6xIVkemVuaWEiCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIk1vZGVsIHVyesSFZHplbmlhIHXFvHl0ZWdvIGRvIHV0d29yemVuaWEgdGVnbyBuYWdyYW5pYSIKLQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgIm5hendhIGFwbGlrYWNqaSIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiQXBsaWthY2phIHXFvHl0YSBkbyB1dHdvcnplbmlhIHRlZ28gbmFncmFuaWEiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJkYW5lIGFwbGlrYWNqaSIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIkRvd29sbmUgZGFuZSBhcGxpa2FjamkgenNlcmlhbGl6b3dhbmUgdyBuYWdyYW5pdSIKLQotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICJvcmllbnRhY2phIG9icmF6dSIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiIgotIlcgamFraSBzcG9zw7NiIG9icmF6IHBvd2luaWVuIGJ5xIcgb2Jyw7Njb255IGx1YiBvZGJpdHkgcHJ6ZWQgd3nFm3dpZXRsZW5pZW0iCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgInd5ZGF3Y2EiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk5hendhIHd5dHfDs3JuaSBsdWIgd3lkYXdjeSIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICJpbnRlcnByZXRhY2phIgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgIiIKLSJJbmZvcm1hY2phIG8gb3NvYmFjaCBvZHBvd2llZHppYWxueWNoIHphIHJlbWl4IGx1YiBwb2RvYm5lIGludGVycHJldGFjamUiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiZMW6d2nEmWstcG9kc3Rhd293eS1taWRpIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICJOdW1lciBkxbp3acSZa3UgTUlESSDFm2NpZcW8a2kgZMW6d2nEmWtvd2VqLiIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAiZGFuZS1wcnl3YXRuZSIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiRGFuZSBwcnl3YXRuZSIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICJOaWUgem5hbGV6aW9ubyBzcG9zb2J1IG9ic8WCdWdpIFVSSSBkbGEgcHJvdG9rb8WCdSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAiU2NoZW1hdCBVUkkgJyVzJyBuaWUgamVzdCBvYnPFgnVnaXdhbnkiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiQsWBxIREOiBvZCBlbGVtZW50dSAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJEb2RhdGtvd2UgaW5mb3JtYWNqZSBkaWFnbm9zdHljem5lOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAiZG93acSFemFuaWUgbmllIG1hIMW6csOzZMWCYSBbY2VsPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICJkb3dpxIV6YW5pZSBuaWUgbWEgY2VsdSBbxbpyw7NkxYJvPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImJyYWsgd8WCYcWbY2l3b8WbY2kgXCIlc1wiIHcgZWxlbWVuY2llIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSB1c3Rhd2nEhyB3xYJhxZtjaXdvxZtjaSBcIiVzXCIgdyBlbGVtZW5jaWUgXCIlc1wiIG5hIFwiJXNcIiIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICJPcMOzxbpuaW9uZSBkb3dpxIV6YW5pZSBuaWUgcG93aW9kxYJvIHNpxJkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgZG93acSFemHEhyAlcyBkbyAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiYnJhayBlbGVtZW50dSBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIm5pZW9jemVraXdhbmUgb2RuaWVzaWVuaWUgXCIlc1wiIC0gemlnbm9yb3dhbm8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJuaWVvY3pla2l3YW5lIG9kbmllc2llbmllIGRvcGXFgm5pYWrEhWNlIFwiJXNcIiAtIHppZ25vcm93YW5vIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAibmllIHVkYcWCbyBzacSZIHByemVhbmFsaXpvd2HEhyBtb8W8bGl3b8WbY2kgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiYnJhayBlbGVtZW50dSBvc2FkemFqxIVjZWdvIGRsYSBVUkkgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJicmFrIGVsZW1lbnR1IMW6csOzZMWCb3dlZ28gZGxhIFVSSSBcIiVzXCIiCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgImLFgsSFZCBza8WCYWRuaSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgInBvZGFubyBwdXN0eSBrb250ZW5lciBcIiVzXCIsIG5pZSBqZXN0IHRvIGRvendvbG9uZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBiaW4gXCIlc1wiLCB1bnBhY2tpbmcgZWxlbWVudHMiCi1tc2dzdHIgImJyYWsga29udGVuZXJhIFwiJXNcIiwgcm96cGFrb3d5d2FuaWUgZWxlbWVudMOzdyIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJwdXN0eSBwb3RvayBuaWUgamVzdCBkb3p3b2xvbnkiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAiV2llbGUgYnVmb3LDs3cgem9zdGHFgm8gemd1YmlvbnljaC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIldld27EmXRyem55IHByb2JsZW0gcHJ6ZXDFgnl3dSBkYW55Y2guIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiV2V3bsSZdHJ6bnkgYsWCxIVkIHByemVwxYJ5d3UgZGFueWNoLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiV2V3bsSZdHJ6bnkgYsWCxIVkIHplZ2FyYS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvZHd6b3Jvd2HEhyBidWZvcmEuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkZpbHRyb3dhbmllIG1vxbxsaXdvxZtjaSIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iT2dyYW5pY3plbmllIG1vxbxsaXd5Y2ggZG96d29sb255Y2ggbW/FvGxpd2/Fm2NpIChOVUxMIG96bmFjemEgV1NaWVNUS0lFKS4gIgotIlVzdGF3aWVuaWUgdGVqIHfFgmHFm2Npd2/Fm2NpIG9kd2/FgnVqZSBzacSZIGRvIHByemVrYXphbmVnbyBvYmlla3R1IEdzdENhcHMuIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiVHJ5YiB6bWlhbnkgbW/FvGxpd2/Fm2NpIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiRmlsdHJvd2FuaWUgemFjaG93YW5pYSB6bWlhbnkgbW/FvGxpd2/Fm2NpIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiTmllIHBvZGFubyBrYXRhbG9ndSB0eW1jemFzb3dlZ28uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB1dHdvcnp5xIcgcGxpa3UgdHltY3phc293ZWdvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgb3R3b3J6ecSHIHBsaWt1IFwiJXNcIiBkbyBvZGN6eXR1LiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIkLFgsSFZCBwb2RjemFzIHphcGlzdSBkbyDFm2NpxIVnYW5lZ28gcGx1a3UuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5pZSBwb2Rhbm8gbmF6d3kgcGxpa3UgZG8gemFwaXN1LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgcGxpa3UgXCIlc1wiIGRvIHphcGlzdS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkLFgsSFZCBwb2RjemFzIHphbXlrYW5pYSBwbGlrdSBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJCxYLEhWQgcG9kY3phcyBwcnplbWllc3pjemFuaWEgdyBwbGlrdSBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJCxYLEhWQgcG9kY3phcyB6YXBpc3UgZG8gcGxpa3UgXCIlc1wiLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOaWUgcG9kYW5vIG5hend5IHBsaWt1IGRvIG9kY3p5dHUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgdXp5c2thxIcgaW5mb3JtYWNqaSBvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiXCIlc1wiIGplc3Qga2F0YWxvZ2llbS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJQbGlrIFwiJXNcIiBqZXN0IGduaWF6ZGVtLiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIk5pZXBvd29kemVuaWUgcG8gaXRlcmFjamFjaCBqYWsgxbzEhWRhbm8uIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAibW/FvGxpd2/Fm2NpIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAid3lrcnl0ZSBtb8W8bGl3b8WbY2kgdyBzdHJ1bWllbml1IgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAibWluaW11bSIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgInd5bXVzemVuaWUgbW/FvGxpd2/Fm2NpIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgInd5bXVzemVuaWUgbW/FvGxpd2/Fm2NpIGJleiBzcHJhd2R6YW5pYSIKLQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJTdHJ1bWllxYQgbmllIHphd2llcmEgd3lzdGFyY3phasSFY28gZHXFvG8gZGFueWNoLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiU3RydW1pZcWEIG5pZSB6YXdpZXJhIGRhbnljaC4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICJaYWltcGxlbWVudG93YW5lIGludGVyZmVqc3k6XG4iCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAib2Rjenl0IgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgInphcGlzIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAicHJ6ZXN0YXJ6YcWCZSIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAic3Rlcm93YW5pZSIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICJtb8W8bGl3YSB6bWlhbmEgdyBzdGFuaWUgTlVMTCwgR09UT1dPxZrEhiwgUEFVWk9XQU5JRSBsdWIgT0RUV0FSWkFOSUUiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICJtb8W8bGl3YSB6bWlhbmEgdHlsa28gdyBzdGFuaWUgTlVMTCwgR09UT1dPxZrEhiBsdWIgUEFVWk9XQU5JRSIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICJtb8W8bGl3YSB6bWlhbmEgdHlsa28gdyBzdGFuaWUgTlVMTCBsdWIgR09UT1dPxZrEhiIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiUGxpa2kgd3lrbHVjem9uZToiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJDYcWCa293aXRhIGxpY3piYTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIlZCBwbGlrIHd5a2x1Y3pvbnkiCi1tc2dzdHJbMV0gIiVkIHBsaWtpIHd5a2x1Y3pvbmUiCi1tc2dzdHJbMl0gIiVkIHBsaWvDs3cgd3lrbHVjem9ueWNoIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQgd3R5Y3prYSIKLW1zZ3N0clsxXSAiJWQgd3R5Y3praSIKLW1zZ3N0clsyXSAiJWQgd3R5Y3playIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCB3cGlzIHd5a2x1Y3pvbnkiCi1tc2dzdHJbMV0gIiVkIHdwaXN5IHd5a2x1Y3pvbmUiCi1tc2dzdHJbMl0gIiVkIHdwaXPDs3cgd3lrbHVjem9ueWNoIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCBjZWNoYSIKLW1zZ3N0clsxXSAiJWQgY2VjaHkiCi1tc2dzdHJbMl0gIiVkIGNlY2giCi0KLW1zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCi1tc2dzdHIgIld5cGlzYW5pZSB3c3p5c3RraWNoIGVsZW1lbnTDs3ciCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJXeXBpc2FuaWUgbGlzdHkgcGxpa8OzdyB3eWtsdWN6b255Y2giCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotIld5cGlzYW5pZSBuYWRhasSFY2VqIHNpxJkgZG8gcHJ6ZXR3b3J6ZW5pYSBwcnpleiBtYXN6eW7EmSBsaXN0eSBjZWNoICIKLSJkb3N0YXJjemFueWNoIHByemV6IG9rcmXFm2xvbsSFIHd0eWN6a8SZLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByenlkYXRuZSB3IHBvxYLEhWN6ZW5pdSB6IHpld27EmXRyem55bWkgIgotImF1dG9tYXR5Y3pueW1pIG1lY2hhbml6bWFtaSBpbnN0YWxhY2ppIHd0eWN6ZWsiCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIld5cGlzYW5pZSB6YXdhcnRvxZtjaSB3dHljemVrIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIlNwcmF3ZHplbmllLCBjenkgcG9kYW55IGVsZW1lbnQgbHViIHd0eWN6a2EgaXN0bmllamUiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0iUHJ6eSBzcHJhd2R6YW5pdSBpc3RuaWVuaWEgZWxlbWVudHUgbHViIHd0eWN6a2ksIHNwcmF3ZHphbmllIHRha8W8ZSBjenkgIgotIndlcnNqYSBqZXN0IGNvIG5ham1uaWVqIHBvZGFuxIUiCi0KLW1zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCi1tc2dzdHIgIiIKLSJXeXBpc2FuaWUgb2JzxYJ1Z2l3YW55Y2ggc2NoZW1hdMOzdyBVUkkgd3JheiB6IGltcGxlbWVudHVqxIVjeW1pIGplIGVsZW1lbnRhbWkiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB3Y3p5dGHEhyBwbGlrdSB3dHljemtpOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJOaWUgbWEgdGFraWVnbyBlbGVtZW50dSBsdWIgd3R5Y3praSAnJXMnXG4iCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJTdGF0eXN0eWtpIGluZGVrc3UiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJPZGVicmFubyBrb211bmlrYXQgIyV1IG9kIGVsZW1lbnR1IFwiJXNcIiAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIk9kZWJyYW5vIGtvbXVuaWthdCAjJXUgb2QgcG9sYSBcIiVzOiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJPZGVicmFubyBrb211bmlrYXQgIyV1IG9kIG9iaWVrdHUgXCIlc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICJPZGVicmFubyBrb211bmlrYXQgIyV1ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk90cnp5bWFubyBFT1Mgb2QgZWxlbWVudHUgXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIlpOQUNaTklLICAgICAgIDogem5hbGV6aW9ueSBwcnpleiBlbGVtZW50IFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIlpOQUNaTklLICAgICAgIDogem5hbGV6aW9ueSBwcnpleiBwb2xlIFwiJXM6JXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIlpOQUNaTklLICAgICAgIDogem5hbGV6aW9ueSBwcnpleiBvYmlla3QgXCIlc1wiLlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIlpOQUNaTklLXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiU1BJUyBUUkXFmkNJICAgIDogem5hbGV6aW9ueSBwcnpleiBlbGVtZW50IFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIlNQSVMgVFJFxZpDSSAgICA6IHpuYWxlemlvbnkgcHJ6ZXogb2JpZWt0IFwiJXNcIi5cbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICJTUElTIFRSRcWaQ0lcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iSU5GT1JNQUNKQTpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiVVdBR0E6IG9kIGVsZW1lbnR1ICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByemV3aW5pxJl0bywgY3pla2FuaWUgbmEgemFrb8WEY3plbmllIGJ1Zm9yb3dhbmlhLi4uXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJQcnpld2luacSZdG8sIGN6ZWthbmllIG5hIHpha2/FhGN6ZW5pZSBwb3N0xJlwdS4uLlxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICJidWZvcm93YW5pZS4uLiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIkJ1Zm9yb3dhbmllIHpha2/FhGN6b25lLCB1c3Rhd2lhbmllIHBvdG9rdSBuYSBPRFRXQVJaQU5JRS4uLlxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiQnVmb3Jvd2FuaWUsIHVzdGF3aWFuaWUgcG90b2t1IG5hIFBBVVpPV0FOSUUuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIlJvenByemVzdHJ6ZW5pYW5pZSBvcMOzxbpuaWXFhC4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIlVzdGF3aWFuaWUgc3RhbnUgbmEgJXMgemdvZG5pZSB6IHd5bWFnYW5pZW0gJXMuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIlByemVyd2FuaWU6IFphdHJ6eW15d2FuaWUgcG90b2t1Li4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiUG9zdMSZcDogKCVzKSAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiQnJhayBlbGVtZW50dTogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiT3RyenltYW5vIGtvbnRla3N0IG9kIGVsZW1lbnR1ICclcyc6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIld5cGlzYW5pZSB6bmFjem5pa8OzdyAoem5hbnljaCB0YWvFvGUgamFrbyBtZXRhZGFuZSkiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICJXeXBpc2FuaWUgc3Bpc3UgdHJlxZtjaSAocm96ZHppYcWCw7N3IGkgd3lkYcWEKSIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIld5cGlzeXdhbmllIGluZm9ybWFjamkgbyBzdGFuaWUgaSBwb3dpYWRvbWllxYQgd8WCYcWbY2l3b8WbY2kiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJOaWUgd3lwaXN5d2FuaWUgxbxhZG5laiBpbmZvcm1hY2ppIG8gcG9zdMSZcGllIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICJXeXBpc3l3YW5pZSBrb211bmlrYXTDs3ciCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotIkJleiB3eXBpc3l3YW5pYSBpbmZvcm1hY2ppIG8gc3RhbmllIG9rcmXFm2xvbmVqIHfFgmFzbm/Fm2NpLCBqZcWbbGkgc3pjemVnw7PFgm93ZSAiCi0id3lqxZtjaWUgamVzdCB3xYLEhWN6b25lIChtb8W8ZSBiecSHIHXFvHl0ZSB3aWVsb2tyb3RuaWUpIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiTkFaV0EtV8WBQVNOT8WaQ0kiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgIk5pZSBpbnN0YWxvd2FuaWUgb2JzxYJ1Z2kgYsWCxJlkw7N3IgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICJXeW11c3phbmllIEVPUyBuYSDFunLDs2TFgmFjaCBwcnplZCB6YW1rbmnEmWNpZW0gcG90b2t1IgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJaZWJyYW5pZSBpIHd5cGlzYW5pZSBzdGF0eXN0eWsgaW5kZWtzdSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiQsWBxIREOiBuaWUgdWRhxYJvIHNpxJkgc2tvbnN0cnVvd2HEhyBwb3Rva3U6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiQsWBxIREOiBuaWUgdWRhxYJvIHNpxJkgc2tvbnN0cnVvd2HEhyBwb3Rva3UuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJVV0FHQTogYsWCxJlkbnkgcG90b2s6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIkLFgcSERDogbmllIHpuYWxlemlvbm8gZWxlbWVudHUgJ3BpcGVsaW5lJy5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJVc3Rhd2lhbmllIHBvdG9rdSBuYSBQQVVaT1dBTklFLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJCxYHEhEQ6IHBvdG9rIG9kbWF3aWEgcGF1em93YW5pYS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiUG90b2sgamVzdCBuYSDFvHl3byBpIG5pZSB3eW1hZ2EgUFJaRVdJTknEmENJQS4uLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiUG90b2sgamVzdCBQUlpFV0lKQU5ZLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIkLFgcSERDogcG90b2sgb2RtYXdpYSBwcnpld2luacSZY2lhLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJQb3RvayBqZXN0IFBSWkVXSU5JxJhUWS4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJVc3Rhd2lhbmllIHBvdG9rdSBuYSBPRFRXQVJaQU5JRS4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgotbXNnc3RyICJCxYHEhEQ6IHBvdG9rIG9kbWF3aWEgb2R0d2FyemFuaWEuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiV8WCxIVjem9ueSBFT1MgcHJ6eSB3ecWCxIVjemFuaXUgLSB3eW11c3phbmllIEVPUyB3IHBvdG9rdVxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIlfFgsSFY3pvbnkgRU9TIHByenkgd3nFgsSFY3phbml1IC0gb2N6ZWtpd2FuaWUgbmEgRU9TIHBvIGLFgsSZZHppZVxuIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIk9jemVraXdhbmllIG5hIEVPUy4uLlxuIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiT3RyenltYW5vIEVPUyAtIHphdHJ6eW15d2FuaWUgcG90b2t1Li4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiUHJ6ZXJ3YW5pZSBwb2RjemFzIG9jemVraXdhbmlhIG5hIEVPUyAtIHphdHJ6eW15d2FuaWUgcG90b2t1Li4uXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiV3lzdMSFcGnFgiBixYLEhWQgdyB0cmFrY2llIG9jemVraXdhbmlhIG5hIEVPU1xuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIld5a29ueXdhbmllIHpha2/FhGN6b25lIHBvICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICJVc3Rhd2lhbmllIHBvdG9rdSBuYSBHT1RPV0/FmsSGLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIlVzdGF3aWFuaWUgcG90b2t1IG5hIE5VTEwuLi5cbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIlp3YWxuaWFuaWUgcG90b2t1Li4uXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgImtvbnRlbmVyIgpkaWZmIC0tZ2l0IGEvcG8vcHRfQlIuZ21vIGIvcG8vcHRfQlIuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWNlNmEwLi4wMDAwMDAwCi0tLSBhL3BvL3B0X0JSLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3B0X0JSLnBvIGIvcG8vcHRfQlIucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYzViMGUuLjAwMDAwMDAKLS0tIGEvcG8vcHRfQlIucG8KKysrIC9kZXYvbnVsbApAQCAtMSwxNDA2ICswLDAgQEAKLSMgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb24gb2YgR1N0cmVhbWVyLgotIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdTdHJlYW1lciBwYWNrYWdlLgotIyBGYWJyw61jaW8gR29kb3kgPHNrYXJsbG90QGdtYWlsLmNvbT4sIDIwMDgtMjAxNi4KLSMKLSMgcGlwZWxpbmUgLT4gZmlsYSBkZSBwcm9jZXNzYW1lbnRvCi0jIHNpbmsgLT4gY29uc3VtaWRvcgotIyBmbG93IC0+IGZsdXhvCi0jIHN0cmVhbSAtPiBmbHV4bwotIyBwcmVyb2xsIC0+IHByZXBhcmFyCi0jIGNsb2NrIC0+IHRlbXBvcml6YWRvcgotIyBzb3VyY2VzICsgc2lua3MgPSBwYWQKLSMgZWxlbWVudCArIGVsZW1lbnQgKyAuLi4gPSBiaW4KLSMgZGVzY3JpcHRpb24gb2YgbWVkaWEgZm9ybWF0cyA9IGNhcHMKLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lci0xLjcuOTBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wNS0wNiAxODoyMy0wMzAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBGYWJyw61jaW8gR29kb3kgPHNrYXJsbG90QGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBCcmF6aWxpYW4gUG9ydHVndWVzZSA8bGRwYnItdHJhbnNsYXRpb25AbGlzdHMuc291cmNlZm9yZ2UuIgotIm5ldD5cbiIKLSJMYW5ndWFnZTogcHRfQlJcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJFeGliaXIgYSB2ZXJzw6NvIGRvIEdTdHJlYW1lciIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJUcmF0YXIgdG9kb3MgYXZpc29zIGNvbW8gZmF0YWlzIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIkV4aWJpciBhcyBjYXRlZ29yaWFzIGRlIGRlcHVyYcOnw6NvIGRpc3BvbsOtdmVpcyBlIHNhaXIiCi0KLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSJOw612ZWlzIGRlIGRlcHVyYcOnw6NvIHByZWRlZmluaWRvcyBkZSAxIChhcGVuYXMgZXJyb3MpIGF0w6kgOSAodHVkbykgb3UgMCBwYXJhICIKLSJuZW5odW1hIHNhw61kYSIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJOw41WRUwiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iTGlzdGEgZGUgXCJjYXRlZ29yaWFfbm9tZTpuw612ZWxcIiBzZXBhcmFkb3MgcG9yIHbDrXJndWxhcywgcGFyYSBkZWZpbmlyICIKLSJuw612ZWlzIGVzcGVjw61maWNvcyBwYXJhIGFzIGNhdGVnb3JpYXMgaW5kaXZpZHVhaXMuIEV4ZW1wbG86IEdTVF9BVVRPUExVRzo1LCIKLSJHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMSVNUQSIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJEZXNhYmlsaXRhciBzYcOtZGEgZGUgZGVwdXJhw6fDo28gY29sb3JpZGEiCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotIkFsdGVyYSBvIG1vZG8gZGUgY29yIGRvIGxvZyBkZSBkZXB1cmHDp8Ojby4gTW9kb3MgcG9zc8OtdmVpczogb2ZmIChkZXNsaWdhZG8pLCAiCi0ib24gKGxpZ2FkbyksIGRpc2FibGUgKGRlc2FiaWxpdGFkbyksIGF1dG8gKGF1dG9tw6F0aWNvKSBlIHVuaXgiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiRGVzYWJpbGl0YXIgZGVwdXJhw6fDo28iCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiSGFiaWxpdGFyIGRpYWduw7N0aWNvIGRldGFsaGFkbyBkbyBjYXJyZWdhbWVudG8gZG8gcGx1Zy1pbiIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIkNhbWluaG9zLCBzZXBhcmFkb3MgcG9yIGRvaXMtcG9udG9zLCBkZSBwbHVnLWlucyIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICJDQU1JTkhPUyIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSJMaXN0YSwgc2VwYXJhZGEgcG9yIHbDrXJndWxhcywgZGUgcGx1Zy1pbnMgcGFyYSBwcsOpLWNhcnJlZ2FyIGFsw6ltIGRhIGxpc3RhICIKLSJhcm1hemVuYWRhIG5hIHZhcmnDoXZlbCBkZSBhbWJpZW50ZSBHU1RfUExVR0lOX1BBVEgiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJQTFVHLUlOUyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSJEZXNhYmlsaXRhciBpbnRlcmNlcMOnw6NvIGRhcyBmYWxoYXMgZGUgc2VnbWVudGHDp8OjbyBkdXJhbnRlIG8gY2FycmVnYW1lbnRvIGRvICIKLSJwbHVnLWluIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIkRlc2FiaWxpdGFyIGF0dWFsaXphw6fDo28gZG8gcmVnaXN0cm8iCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICIiCi0iRGVzYWJpbGl0YXIgYSBjcmlhw6fDo28gZGUgdW0gcHJvY2Vzc28gYXV4aWxpYXIgZHVyYW50ZSBhIGFuw6FsaXNlIGRvIHJlZ2lzdHJvIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIk9ww6fDtWVzIGRvIEdTdHJlYW1lciIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkV4aWJpciBvcMOnw7VlcyBkbyBHU3RyZWFtZXIiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiT3DDp8OjbyBkZXNjb25oZWNpZGEiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIk8gR1N0cmVhbWVyIGVuY29udHJvdSB1bSBlcnJvIGdlcmFsIG5hIGJpYmxpb3RlY2EgcHJpbmNpcGFsLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iT3MgZGVzZW52b2x2ZWRvcmVzIGRvIEdTdHJlYW1lciBzw6NvIG11aXRvIHByZWd1acOnb3NvcyBwYXJhIGRlZmluaXIgdW0gY8OzZGlnbyAiCi0iZGUgZXJybyBwYXJhIGVzc2UgZXJyby4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogY8OzZGlnbyBuw6NvIGltcGxlbWVudGFkby4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLSJFcnJvIG5vIEdTdHJlYW1lcjogZmFsaGEgYW8gYWx0ZXJhciBlc3RhZG8gZSBhbGd1bSBlbGVtZW50byBmYWxob3UgYW8gZW52aWFyICIKLSJ1bWEgbWVuc2FnZW0gZGUgZXJybyBhcHJvcHJpYWRhIGNvbSBhIHJhesOjbyBkYSBmYWxoYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgbm8gUGFkLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICJFcnJvIGludGVybm8gbm8gR1N0cmVhbWVyOiBwcm9ibGVtYSBubyBzZWdtZW50byAodGhyZWFkKS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJFcnJvIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgZGUgbmVnb2NpYcOnw6NvLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm8gaW50ZXJubyBubyBHU3RyZWFtZXI6IHByb2JsZW1hIG5vIGV2ZW50by4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIkVycm8gaW50ZXJubyBubyBHU3RyZWFtZXI6IHByb2JsZW1hIG5hIGJ1c2NhLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgbm8gQ2Fwcy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIEdTdHJlYW1lcjogcHJvYmxlbWEgbmEgZXRpcXVldGEuIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiU3VhIGluc3RhbGHDp8OjbyBkbyBHU3RyZWFtZXIgZXN0w6EgY29tIHVtIHBsdWctaW4gZmFsdGFuZG8uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJybyBubyBHU3RyZWFtZXI6IHByb2JsZW1hIG5vIHRlbXBvcml6YWRvci4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotIkVzdGUgYXBsaWNhdGl2byBlc3TDoSB0ZW50YW5kbyB1c2FyIHVtYSBmdW5jaW9uYWxpZGFkZSBkbyBHU3RyZWFtZXIgcXVlIGZvaSAiCi0iZGVzYWJpbGl0YWRhLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiTyBHU3RyZWFtZXIgZW5jb250cm91IHVtIGVycm8gZ2VyYWwgbmEgYmlibGlvdGVjYSBkZSBzdXBvcnRlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIGEgYmlibGlvdGVjYSBkZSBzdXBvcnRlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZmVjaGFyIGEgYmlibGlvdGVjYSBkZSBzdXBvcnRlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNvbmZpZ3VyYXIgYSBiaWJsaW90ZWNhIGRlIHN1cG9ydGUuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJFcnJvIGRlIGNvZGlmaWNhw6fDo28uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIk8gR1N0cmVhbWVyIGVuY29udHJvdSB1bSBlcnJvIGdlcmFsIG5vcyByZWN1cnNvcy4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJSZWN1cnNvIG7Do28gZW5jb250cmFkby4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJPIHJlY3Vyc28gZXN0w6Egb2N1cGFkbyBvdSBuw6NvIGRpc3BvbsOtdmVsLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gcmVjdXJzbyBwYXJhIGxlaXR1cmEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyByZWN1cnNvIHBhcmEgZXNjcml0YS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciBvIHJlY3Vyc28gcGFyYSBsZWl0dXJhIGUgZXNjcml0YS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZmVjaGFyIG8gcmVjdXJzby4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGxlciBkbyByZWN1cnNvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBlc2NyZXZlciBubyByZWN1cnNvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcmVhbGl6YXIgdW1hIGJ1c2NhIG5vIHJlY3Vyc28uIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHNpbmNyb25pemFyIG5vIHJlY3Vyc28uIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlci9kZWZpbmlyIGNvbmZpZ3VyYcOnw7VlcyBwYXJhL2RvIHJlY3Vyc28uIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJOw6NvIGZvaSBkZWl4YWRvIGVzcGHDp28gbm8gcmVjdXJzby4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJPIGFjZXNzbyBhbyByZWN1cnNvIG7Do28gZm9pIGF1dG9yaXphZG8uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJPIEdTdHJlYW1lciBlbmNvbnRyb3UgdW0gZXJybyBnZXJhbCBubyBmbHV4by4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIiIKLSJPIGVsZW1lbnRvIG7Do28gaW1wbGVtZW50YSBhIG1hbmlwdWxhw6fDo28gZGVzc2UgZmx1eG8uIFBvciBmYXZvciwgcmVsYXRlIG8gIgotImVycm8uIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBkZXRlcm1pbmFyIG8gdGlwbyBkbyBmbHV4by4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIk8gZmx1eG8gw6kgZGUgdW0gdGlwbyBkaWZlcmVudGUgZG8gcXVlIG8gbWFuaXB1bGFkbyBwb3IgZXNzZSBlbGVtZW50by4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIk7Do28gaMOhIHVtIENPREVDIHByZXNlbnRlIHF1ZSBwb3NzYSBtYW5pcHVsYXIgZXNzZSB0aXBvIGRlIGZsdXhvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGRlY29kaWZpY2FyIG8gZmx1eG8uIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY29kaWZpY2FyIG8gZmx1eG8uIgotCi1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBkZW11bHRpcGxleGFyIG8gZmx1eG8uIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbXVsdGlwbGV4YXIgbyBmbHV4by4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJFc3NlIGZsdXhvIGVzdMOhIGNvbSB1bSBmb3JtYXRvIGVycmFkby4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiTyBmbHV4byBlc3TDoSBjcmlwdG9ncmFmYWRvIGUgbsOjbyBow6Egc3Vwb3J0ZSBhIGRlc2NyaXB0b2dyYWZhw6fDo28uIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIk8gZmx1eG8gZXN0w6EgY3JpcHRvZ3JhZmFkbyBlIG7Do28gcMO0ZGUgc2VyIGRlc2NyaXB0b2dyYWZhZG8gcG9ycXVlIG5lbmh1bWEgIgotImNoYXZlIGFwcm9wcmlhZGEgZm9pIGZvcm5lY2lkYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiTmVuaHVtYSBtZW5zYWdlbSBkZSBlcnJvIHBhcmEgbyBkb23DrW5pbyAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiTmVuaHVtYSBtZW5zYWdlbSBkZSBlcnJvIHByZWRlZmluaWRhIHBhcmEgbyBkb23DrW5pbyAlcyBlIGPDs2RpZ28gJWQuIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICIiCi0iTyB0ZW1wb3JpemFkb3Igc2VsZWNpb25hZG8gbsOjbyBww7RkZSBzZXIgdXNhZG8gbmEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiRXJybyBhbyBlc2NyZXZlciBvIGNhY2hlIGRlIHJlZ2lzdHJvIGVtICVzOiAlcyIKLQotbXNnaWQgInRpdGxlIgotbXNnc3RyICJ0w610dWxvIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAidMOtdHVsbyBub3JtYWxtZW50ZSB1c2FkbyIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJ0w610dWxvIHBhcmEgb3JkZW5hw6fDo28iCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJ0w610dWxvIG5vcm1hbG1lbnRlIHVzYWRvLCBwYXJhIG9yZGVuYcOnw6NvIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICJhcnRpc3RhIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXNzb2EocykgcmVzcG9uc8OhdmVsKGlzKSBwZWxhIGdyYXZhw6fDo28iCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgImFydGlzdGEgcGFyYSBvcmRlbmHDp8OjbyIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAicGVzc29hKHMpIHJlc3BvbnPDoXZlbChpcykgcGVsYSBncmF2YcOnw6NvLCBwYXJhIG9yZGVuYcOnw6NvIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgIsOhbGJ1bSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICLDoWxidW0gY29udGVuZG8gZXNzZXMgZGFkb3MiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiw6FsYnVtIHBhcmEgb3JkZW5hw6fDo28iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiw6FsYnVtIGNvbnRlbmRvIGVzc2VzIGRhZG9zLCBwYXJhIG9yZGVuYcOnw6NvIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhcnRpc3RhIGRvIMOhbGJ1bSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiTyBhcnRpc3RhIGRlIHRvZG8gw6FsYnVtLCBjb21vIGVsZSBkZXZlcmlhIHNlciBleGliaWRvIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJhcnRpc3RhIGRvIMOhbGJ1bSBwYXJhIG9yZGVuYcOnw6NvIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICJPIGFydGlzdGEgZGUgdG9kbyDDoWxidW0sIGNvbW8gZWxlIGRldmVyaWEgc2VyIG9yZGVuYWRvIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiZGF0YSIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZGF0YSBxdWUgb3MgZGFkb3MgZm9yYW0gY3JpYWRvcyAoZXN0cnV0dXJhIEdEYXRlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXRhIGhvcmEiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdGEgZSBob3JhIHF1ZSBvcyBkYWRvcyBmb3JhbSBjcmlhZG9zIChlc3RydXR1cmEgR3N0RGF0ZVRpbWUpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgImfDqm5lcm8iCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAiZ8OqbmVybyBxdWUgZXN0ZSBkYWRvIHBlcnRlbmNlIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAiY29tZW50w6FyaW8iCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAidGV4dG8gbGl2cmUgY29tZW50YW5kbyBvcyBkYWRvcyIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImNvbWVudMOhcmlvIHByb2xvbmdhZG8iCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJ0ZXh0byBsaXZyZSBjb21lbnRhbmRvIG9zIGRhZG9zLCB1c2FuZG8gbyBmb3JtYXRvIGNoYXZlPXZhbG9yIG91ICIKLSJjaGF2ZVtwdF9CUl09Y29tZW50w6FyaW8iCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIm7Dum1lcm8gZGEgZmFpeGEiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibsO6bWVybyBkYSBmYWl4YSBkZW50cm8gZGEgY29sZcOnw6NvIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgIm7Dum1lcm8gZGUgZmFpeGFzIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAibsO6bWVybyBkZSBmYWl4YXMgZGVudHJvIGRhIGNvbGXDp8OjbyBxdWUgZXN0YSBmYWl4YSBwZXJ0ZW5jZSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICJuw7ptZXJvIGRvIGRpc2NvIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibsO6bWVybyBkbyBkaXNjbyBkZW50cm8gZGEgY29sZcOnw6NvIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAibsO6bWVybyBkZSBkaXNjb3MiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAibsO6bWVybyBkZSBkaXNjb3MgZGVudHJvIGRhIGNvbGXDp8OjbyBxdWUgZXN0ZSBkaXNjbyBwZXJ0ZW5jZSIKLQotbXNnaWQgImxvY2F0aW9uIgotbXNnc3RyICJsb2NhbCIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0iQSBvcmlnZW0gZGEgbcOtZGlhIGNvbW8gdW0gVVJJIChsb2NhbGl6YcOnw6NvIG9uZGUgbyBhcnF1aXZvIG91IGZsdXhvIG9yaWdpbmFsICIKLSJlc3TDoSBob3NwZWRhZG8pIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgInDDoWdpbmEgaW5pY2lhbCIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIlDDoWdpbmEgaW5pY2lhbCBkZXN0YSBtw61kaWEgKHDDoWdpbmEgaW5pY2lhbCBkbyBhcnRpc3RhIG91IGZpbG1lKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJkZXNjcmnDp8OjbyIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAidGV4dG8gcGVxdWVubyBkZXNjcmV2ZW5kbyBvIGNvbnRlw7pkbyBkb3MgZGFkb3MiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzw6NvIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgInZlcnPDo28gZGVzdGVzIGRhZG9zIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiIgotIkPDs2RpZ28gZGUgR3JhdmHDp8OjbyBQYWRyw6NvIEludGVybmFjaW9uYWwgKElTUkMpIC0gY29uc3VsdGUgaHR0cDovL3d3dy5pZnBpLiIKLSJvcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXphw6fDo28iCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgImNvcHlyaWdodCIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgImluZm9ybWHDp8OjbyBkZSBjb3B5cmlnaHQgZG9zIGRhZG9zIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiVVJJIGRvIGNvcHlyaWdodCIKLQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVVJJIHBhcmEgYSBpbmZvcm1hw6fDo28gZGUgY29weXJpZ2h0IGRvcyBkYWRvcyIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgImNvZGlmaWNhZG8gcG9yIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAibm9tZSBkYSBwZXNzb2Egb3Ugb3JnYW5pemHDp8OjbyBxdWUgY29kaWZpY291IG8gYXJxdWl2byIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgImNvbnRhdG8iCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJpbmZvcm1hw6fDo28gZGUgY29udGF0byIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgImxpY2Vuw6dhIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJsaWNlbsOnYSBkb3MgZGFkb3MiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAiVVJJIGRhIGxpY2Vuw6dhIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgcGFyYSBhIGxpY2Vuw6dhIGRvcyBkYWRvcyIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAicGFydGljaXBhw6fDo28iCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVzc29hKHMpIHBhcnRpY2lwYW50ZShzKSIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJjb21wb3NpdG9yIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXNzb2EocykgcXVlIGNvbXDDtHModXNlcmFtKSBhIGdyYXZhw6fDo28iCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIm1hZXN0cm8iCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIm1hZXN0cm8vbcO6c2ljbyBkZSBhZmluYcOnw6NvIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgImR1cmHDp8OjbyIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJjb21wcmltZW50byBlbSB1bmlkYWRlcyBkZSB0ZW1wbyBkbyBHU3RyZWFtZXIgKG5hbm9zZWd1bmRvcykiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAiQ09ERUMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIkNPREVDIHVzYWRvIG5vcyBkYWRvcyIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJDT0RFQyBkZSB2w61kZW8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIkNPREVDIGRlIHbDrWRlbyB1c2FkbyBub3MgZGFkb3MiCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAiQ09ERUMgZGUgw6F1ZGlvIgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJDT0RFQyBkZSDDoXVkaW8gdXNhZG8gbm9zIGRhZG9zIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgIkNPREVDIGRlIGxlZ2VuZGEiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIkNPREVDIGRlIGxlZ2VuZGEgdXNhZG8gbm9zIGRhZG9zIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiZm9ybWF0byBkbyBjb250w6ppbmVyIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImZvcm1hdG8gZG8gY29udMOqaW5lciB1c2FkbyBwYXJhIG9zIGRhZG9zIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAidGF4YSBkZSBiaXRzIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAidGF4YSBkZSBiaXRzIGV4YXRhIG91IG3DqWRpYSwgZW0gYml0cy9zIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJ0YXhhIGRlIGJpdHMgbm9taW5hbCIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgInRheGEgZGUgYml0cyBub21pbmFsLCBlbSBiaXRzL3MiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgInRheGEgZGUgYml0cyBtw61uaW1hIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAidGF4YSBkZSBiaXRzIG3DrW5pbWEsIGVtIGJpdHMvcyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAidGF4YSBkZSBiaXRzIG3DoXhpbWEiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJ0YXhhIGRlIGJpdHMgbcOheGltYSwgZW0gYml0cy9zIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAiY29kaWZpY2Fkb3IiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJjb2RpZmljYWRvciB1c2FkbyBwZWxvIGZsdXhvIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzw6NvIGRvIGNvZGlmaWNhZG9yIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAidmVyc8OjbyBkbyBjb2RpZmljYWRvciB1c2FkbyBwZWxvIGZsdXhvIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJzw6lyaWUiCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICJuw7ptZXJvIGRlIHPDqXJpZSBkYSBmYWl4YSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAiZ2FuaG8gZGEgZmFpeGEgKFJlcGxheUdhaW4pIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiZ2FuaG8gZGEgZmFpeGEgZW0gZGVjaWLDqWlzIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJwaWNvIGRhIGZhaXhhIChSZXBsYXlHYWluKSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIHRyYWNrIgotbXNnc3RyICJwaWNvIGRhIGZhaXhhIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJnYW5obyBkbyDDoWxidW0gKFJlcGxheUdhaW4pIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiZ2FuaG8gZG8gw6FsYnVtIGVtIGRlY2liw6lpcyIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAicGljbyBkbyDDoWxidW0gKFJlcGxheUdhaW4pIgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgInBpY28gZG8gw6FsYnVtIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgIm7DrXZlbCBkZSByZWZlcsOqbmNpYSAoUmVwbGF5R2FpbikiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICJuw612ZWwgZGUgcmVmZXLDqm5jaWEgZG9zIHZhbG9yZXMgZGUgZ2FuaG8gZGEgZmFpeGEgZSBkbyDDoWxidW0iCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJjw7NkaWdvIGRhIGzDrW5ndWEiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICJjw7NkaWdvIGRhIGzDrW5ndWEgZGVzdGUgZmx1eG8sIGNvbmZvcm1lIG8gSVNPLTYzOS0xIG91IElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgIm5vbWUgZG8gaWRpb21hIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIm5vbWUsIGVtIGZvcm1hdG8gbGl2cmUsIGRvIGlkaW9tYSBkbyBmbHV4byIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJpbWFnZW0iCi0KLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJpbWFnZW0gcmVsYWNpb25hZGEgYSBlc3RlIGZsdXhvIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJtaW5pYXR1cmEiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIm1pbmlhdHVyYSByZWxhY2lvbmFkYSBhIGVzdGUgZmx1eG8iCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJhbmV4byIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImFycXVpdm8gYW5leGFkbyBhIGVzdGUgZmx1eG8iCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICJiYXRpZGFzIHBvciBtaW51dG8iCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAibsO6bWVybyBkZSBiYXRpZGFzIHBvciBtaW51dG8gbm8gw6F1ZGlvIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgInBhbGF2cmFzLWNoYXZlIgotCi1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgInBhbGF2cmFzLWNoYXZlIHNlcGFyYWRhcyBwb3IgdsOtcmd1bGEgZGVzY3JldmVuZG8gbyBjb250ZcO6ZG8iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibm9tZSBkYSBsb2NhbGl6YcOnw6NvIGdlb2dyw6FmaWNhIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLSJkZXNjcmnDp8OjbyBsZWfDrXZlbCBkYSBsb2NhbGl6YcOnw6NvIGRlIG9uZGUgYSBtw61kaWEgZm9pIGdyYXZhZGEgb3UgcHJvZHV6aWRhIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICJsYXRpdHVkZSBkYSBsb2NhbGl6YcOnw6NvIGdlb2dyw6FmaWNhIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0ibGF0aXR1ZGUgZGEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSBkZSBvbmRlIGEgbcOtZGlhIGZvaSBncmF2YWRhIG91IHByb2R1emlkYSAiCi0iZW0gZ3JhdXMgZGUgYWNvcmRvIGNvbSBXR1M4NCAoemVybyBjb3JyZXNwb25kZSBhbyBlcXVhZG9yIGUgdmFsb3JlcyAiCi0ibmVnYXRpdm9zIGEgbGF0aXR1ZGVzIGFvIHN1bCkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICJsb25naXR1ZGUgZGEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSJsb25naXR1ZGUgZGEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSBkZSBvbmRlIGEgbcOtZGlhIGZvaSBncmF2YWRhIG91IHByb2R1emlkYSAiCi0iZW0gZ3JhdXMgZGUgYWNvcmRvIGNvbSBXR1M4NCAoemVybyBjb3JyZXNwb25kZSBhbyBtZXJpZGlhbm8gZGUgR3JlZW53aWNoL1VLICIKLSJlIHZhbG9yZXMgbmVnYXRpdm9zIGEgbGF0aXR1ZGVzIGFvIG9lc3RlKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgImVsZXZhw6fDo28gZGEgbG9jYWxpemHDp8OjbyBnZW9ncsOhZmljYSIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSJlbGV2YcOnw6NvIGdlb2dyw6FmaWNhIGRlIG9uZGUgYSBtw61kaWEgZm9pIGdyYXZhZGEgb3UgcHJvZHV6aWRhIGVtIG1ldHJvcyBkZSAiCi0iYWNvcmRvIGNvbSBXR1M4NCAoemVybyDDqSBhIG3DqWRpYSBkbyBuw612ZWwgZG8gbWFyKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICJsb2NhbGl6YcOnw6NvIGdlb2dyw6FmaWNhIGRvIHBhw61zIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgInBhw61zLCBlbSBpbmdsw6pzLCBvbmRlIGEgbcOtZGlhIGZvaSBncmF2YWRhIG91IHByb2R1emlkYSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICJsb2NhbGl6YcOnw6NvIGdlb2dyw6FmaWNhIGRhIGNpZGFkZSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJjaWRhZGUsIGVtIGluZ2zDqnMsIG9uZGUgYSBtw61kaWEgZm9pIGdyYXZhZGEgb3UgcHJvZHV6aWRhIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJzdWJsb2NhbGl6YcOnw6NvIGdlb2dyw6FmaWNhIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLSJsb2NhbGl6YcOnw6NvIG51bWEgY2lkYWRlIG9uZGUgYSBtw61kaWEgZm9pIHByb2R1emlkYSBvdSBjcmlhZGEgKGV4OiBiYWlycm8pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCi1tc2dzdHIgImRlc3ZpbyBob3Jpem9udGFsIGRhIGxvY2FsaXphw6fDo28gZ2VvZ3LDoWZpY2EiCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiZGVzdmlvIGVzcGVyYWRvIG5hcyBtZWRpZGFzIGRlIHBvc2ljaW9uYW1lbnRvIGhvcml6b250YWwgKGVtIG1ldHJvcykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgInZlbG9jaWRhZGUgZGUgbW92aW1lbnRvIG5hIGxvY2FsaXphw6fDo28gZ2VvZ3LDoWZpY2EiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLSJ2ZWxvY2lkYWRlIGRlIG1vdmltZW50byBkbyAgZGlzcG9zaXRpdm8gZGUgY2FwdHVyYSBhbyByZWFsaXphciBhIGNhcHR1cmEsIGVtICIKLSJtL3MiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlw6fDo28gZGUgbW92aW1lbnRvIG5hIGxvY2FsaXphw6fDo28gZ2VvZ3LDoWZpY2EiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJpbmRpY2EgYSBkaXJlw6fDo28gZGUgbW92aW1lbnRvIGRvIGRpc3Bvc2l0aXZvIGFvIHJlYWxpemFyIGEgY2FwdHVyYSBkZSB1bWEgIgotIm3DrWRpYS4gw4kgcmVwcmVzZW50YWRvIGNvbW8gZ3JhdXMgZW0gcmVwcmVzZW50YcOnw6NvIGZyYWNpb27DoXJpYSwgMCBpbmRpY2EgIgotIk5vcnRlIGUgaW5jcmVtZW50YS1zZSBubyBzZW50aWRvIGRvIHJlbMOzZ2lvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlw6fDo28gZGUgY2FwdHVyYSBuYSBsb2NhbGl6YcOnw6NvIGdlb2dyw6FmaWNhIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iaW5kaWNhIGEgZGlyZcOnw6NvIHF1ZSBvIGRpc3Bvc2l0aXZvIGVzdGF2YSBhcG9udGFuZG8gcXVhbmRvIGNhcHR1cmF2YSB1bWEgIgotIm3DrWRpYS4gw4kgcmVwcmVzZW50YWRvIGNvbW8gZ3JhdXMgZW0gcmVwcmVzZW50YcOnw6NvIGZyYWNpb27DoXJpYSwgMCBpbmRpY2EgIgotIk5vcnRlIGUgaW5jcmVtZW50YS1zZSBubyBzZW50aWRvIGRvIHJlbMOzZ2lvIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIm5vbWUgZG8gcHJvZ3JhbWEiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICIiCi0iTm9tZSBkbyBwcm9ncmFtYSBkZSBUViwgZG8gcG9kY2FzdCBvdSBkYSBzw6lyaWUgZGUgb25kZSBhIG3DrWRpYSB0ZW0gb3JpZ2VtIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICJwcm9ncmFtYSBwYXJhIG9yZGVuYcOnw6NvIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0iTm9tZSBkbyBwcm9ncmFtYSBkZSBUViwgZG8gcG9kY2FzdCBvdSBkYSBzw6lyaWUgZGUgb25kZSBhIG3DrWRpYSB0ZW0gb3JpZ2VtLCAiCi0icGFyYSBvcmRlbmHDp8OjbyIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICJuw7ptZXJvIGRvIGVwaXPDs2RpbyIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJPIG7Dum1lcm8gZG8gZXBpc8OzZGlvIGRhIHRlbXBvcmFkYSBxdWUgYSBtw61kaWEgZmF6IHBhcnRlIgotCi1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAibsO6bWVybyBkYSB0ZW1wb3JhZGEiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiTyBuw7ptZXJvIGRhIHRlbXBvcmFkYSBkYSBzw6lyaWUgcXVlIGEgbcOtZGlhIGZheiBwYXJ0ZSIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAibGV0cmFzIGRlIG3DunNpY2EiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIkFzIGxldHJhcyBkZSBtw7pzaWNhIGRhIG3DrWRpYSIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJjb21wb3NpdG9yIHBhcmEgb3JkZW5hw6fDo28iCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwZXNzb2EocykgcXVlIGNvbXDDtHMgYSBncmF2YcOnw6NvLCBwYXJhIG9yZGVuYcOnw6NvIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgInBhcnRlIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iUGFydGVzIGRhIG3DrWRpYSBxdWUgc2UgZXh0ZW5kZSBlbSB2w6FyaWFzIGZhaXhhcywgY29tbyBkaWZlcmVudGVzIHBhcnRlcyBkZSAiCi0idW0gY29uY2VydG8uIFRlbSB1bSBuw612ZWwgYWNpbWEgZGEgZmFpeGEsIG1hcyBhYmFpeG8gZG8gw6FsYnVtIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgImF2YWxpYcOnw6NvIGRvIHVzdcOhcmlvIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJBdmFsaWHDp8OjbyBhdHJpYnXDrWRhIHBlbG8gdXN1w6FyaW8uIFF1YW50byBtZWxob3IgYSBhdmFsaWHDp8OjbywgbWFpcyBvIHVzdcOhcmlvICIKLSJnb3N0YSBkYSBtw61kaWEiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICJmYWJyaWNhbnRlIGRvIGRpc3Bvc2l0aXZvIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiRmFicmljYW50ZSBkbyBkaXNwb3NpdGl2byB1c2FkbyBwYXJhIGNyaWFyIGVzdGEgbcOtZGlhIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJtb2RlbG8gZG8gZGlzcG9zaXRpdm8iCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIk1vZGVsbyBkbyBkaXNwb3NpdGl2byB1c2FkbyBwYXJhIGNyaWFyIGVzdGEgbcOtZGlhIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAibm9tZSBkbyBhcGxpY2F0aXZvIgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICJBcGxpY2F0aXZvIHVzYWRvIHBhcmEgY3JpYXIgYSBtw61kaWEiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJEYWRvcyBkbyBhcGxpY2F0aXZvIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiRGFkb3MgYXJiaXRyw6FyaW9zIGRvIGFwbGljYXRpdm8gcGFyYSBzZXIgc2VyaWFsaXphZG8gbmEgbcOtZGlhIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIm9yaWVudGHDp8OjbyBkZSBpbWFnZW0iCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIkNvbW8gYSBpbWFnZW0gZGV2ZXJpYSBzZXIgcm90YWNpb25hZGEgb3UgaW52ZXJ0aWRhIGFudGVzIGRhIGV4aWJpw6fDo28iCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgImVkaXRvcmEiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk5vbWUgZGEgZ3JhdmFkb3JhIG91IGVkaXRvcmEiCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAiaW50ZXJwcmV0YWRvIHBvciIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICIiCi0iSW5mb3JtYcOnw7VlcyBzb2JyZSBhIHBlc3NvYSBkZXRyw6FzIGRlIHVtIHJlbWl4IG91IGludGVycHJldGHDp8O1ZXMgc2ltaWxhcmVzIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIm5vdGEtYmFzZS1taWRpIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICJOw7ptZXJvIE1JREkgZGEgbm90YSBkYSB0cmlsaGEgZGUgw6F1ZGlvLiIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAiZGFkb3MtcHJpdmFkb3MiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIkRhZG9zIHByaXZhZG9zIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIk5lbmh1bSBtYW5pcHVsYWRvciBVUkkgcGFyYSBvIHByb3RvY29sbyAlcyBmb2kgZW5jb250cmFkbyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAiTsOjbyBow6Egc3Vwb3J0ZSBwYXJhIG8gZXNxdWVtYSBVUkkgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkVSUk86IGRvIGVsZW1lbnRvICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkluZm9ybWHDp8OjbyBhZGljaW9uYWwgZGUgZGVwdXJhw6fDo286XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJuw6NvIGjDoSBlbGVtZW50byBmb250ZSBubyBsaW5rIFtzaW5rPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICJuw6NvIGjDoSBjb25zdW1pZG9yIG5vIGxpbmsgW3NvdXJjZT0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJuZW5odW1hIHByb3ByaWVkYWRlIFwiJXNcIiBubyBlbGVtZW50byBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICIiCi0ibsOjbyBmb2kgcG9zc8OtdmVsIGRlZmluaXIgYSBwcm9wcmllZGFkZSBcIiVzXCIgbm8gZWxlbWVudG8gXCIlc1wiIHBhcmEgbyAiCi0idmFsb3IgXCIlc1wiIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIkZhbGhhIG5vIHbDrW5jdWxvIHBvc3RlcmdhZG8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgdmluY3VsYXIgJXMgZW0gJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIm5lbmh1bSBlbGVtZW50byBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgInJlZmVyw6puY2lhIGluZXNwZXJhZGEgXCIlc1wiIC0gaWdub3JhbmRvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAicmVmZXLDqm5jaWEgYW8gUGFkIGluZXNwZXJhZGEgXCIlc1wiIC0gaWdub3JhbmRvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gQ2FwcyBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJuZW5odW0gZWxlbWVudG8gY29uc3VtaWRvciBwYXJhIG8gVVJJIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibmVuaHVtIGVsZW1lbnRvIGZvbnRlIHBhcmEgbyBVUkkgXCIlc1wiIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICJlcnJvIGRlIHNpbnRheGUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJvIEJpbiBcIiVzXCIgZXN0w6EgdmF6aW8sIG9wZXJhw6fDo28gbsOjbyBwZXJtaXRpZGEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJuZW5odW0gQmluIFwiJXNcIiwgZGVzY2FycmVnYW5kbyBlbGVtZW50b3MiCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAibsOjbyDDqSBwZXJtaXRpZG8gcXVlIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIHNlamEgdmF6aWEiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAiVW1hIGdyYW5kZSBxdWFudGlkYWRlIGRlIGJ1ZmZlcnMgZXN0w6Egc2VuZG8gZGVzY2FydGFkYS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIlByb2JsZW1hIGludGVybm8gbm8gZmx1eG8gZGUgZGFkb3MuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIGZsdXhvIGRlIGRhZG9zLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIHRlbXBvcml6YWRvci4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIkZhbGhhIGFvIG1hcGVhciBvIGJ1ZmZlci4iCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiRmlsdHJvIENhcHMiCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIlJlc3RyaW5qYSBhcyBwb3Nzw612ZWlzIGNhcGFjaWRhZGVzIHBlcm1pdGlkYXMgKE5VTEwgPSBBTlkpLiBEZWZpbmluZG8gZXNzYSAiCi0icHJvcHJpZWRhZGUgw6kgbGV2YWRhIHVtYSByZWZlcsOqbmNpYSBhbyBvYmpldG8gR3N0Q2FwcyBmb3JuZWNpZG8uIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiTW9kbyBkZSBBbHRlcmHDp8OjbyBkbyBDYXBzIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiQ29tcG9ydGFtZW50byBkZSBhbHRlcmHDp8OjbyBkbyBmaWx0cm8gQ2FwcyIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIk5lbmh1bSBkaXJldMOzcmlvIHRlbXBvcsOhcmlvIGVzcGVjaWZpY2Fkby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIG8gYXJxdWl2byB0ZW1wb3LDoXJpbyBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gYXJxdWl2byBcIiVzXCIgcGFyYSBsZWl0dXJhLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIkVycm8gYW8gZXNjcmV2ZXIgbm8gYXJxdWl2byBiYWl4YWRvLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJOZW5odW0gbm9tZSBkZSBhcnF1aXZvIGVzcGVjaWZpY2FkbyBwYXJhIGVzY3JpdGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gYXJxdWl2byBcIiVzXCIgcGFyYSBlc2NyaXRhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRXJybyBhbyBmZWNoYXIgbyBhcnF1aXZvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkVycm8gYW8gYnVzY2FyIG5vIGFycXVpdm8gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRXJybyBhbyBlc2NyZXZlciBubyBhcnF1aXZvIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTmVuaHVtIG5vbWUgZGUgYXJxdWl2byBlc3BlY2lmaWNhZG8gcGFyYSBsZWl0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIG9idGVyIGluZm9ybWHDp8O1ZXMgZW0gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICJcIiVzXCIgw6kgdW0gZGlyZXTDs3Jpby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJPIGFycXVpdm8gXCIlc1wiIMOpIHVtIHNvcXVldGUuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiRmFsaGEgYXDDs3MgYXMgaW50ZXJhw6fDtWVzIHJlcXVlcmlkYXMuIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAiQ2FwcyIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgImNhcGFjaWRhZGVzIGRldGVjdGFkYXMgbm8gZmx1eG8iCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtw61uaW1vIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAiZm9yw6dhciBDYXBzIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgImZvcsOnYXIgQ2FwcyBzZW0gdXNhciBvIHR5cGVmaW5kIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIk8gZmx1eG8gbsOjbyBjb250w6ltIGRhZG9zIHN1ZmljaWVudGVzLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAiTyBmbHV4byBuw6NvIGNvbnTDqW0gZGFkb3MuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiSW50ZXJmYWNlcyBpbXBsZW1lbnRhZGFzOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgImxlZ8OtdmVsIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgImdyYXbDoXZlbCIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIm9ic29sZXRvIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJjb250cm9sw6F2ZWwiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiZXN0YWRvIGFsdGVyw6F2ZWwgcGFyYSBOVUxPLCBQUk9OVE8sIFBBVVNBRE8gb3UgUkVQUk9EVVpJTkRPIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAiZXN0YWRvIGFsdGVyw6F2ZWwgYXBlbmFzIHBhcmEgTlVMTywgUFJPTlRPIG91IFBBVVNBRE8iCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAiZXN0YWRvIGFsdGVyw6F2ZWwgYXBlbmFzIHBhcmEgTlVMTyBvdSBQUk9OVE8iCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIkFycXVpdm9zIGNvbG9jYWRvcyBuYSBsaXN0YSBuZWdyYToiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJDb250YWdlbSB0b3RhbDogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIlZCBhcnF1aXZvIG5hIGxpc3RhIG5lZ3JhIgotbXNnc3RyWzFdICIlZCBhcnF1aXZvcyBuYSBsaXN0YSBuZWdyYSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIHBsdWctaW4iCi1tc2dzdHJbMV0gIiVkIHBsdWctaW5zIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkIGVudHJhZGEgbmEgbGlzdGEgbmVncmEiCi1tc2dzdHJbMV0gIiVkIGVudHJhZGFzIG5hIGxpc3RhIG5lZ3JhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCByZWN1cnNvIgotbXNnc3RyWzFdICIlZCByZWN1cnNvcyIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiRXhpYmlyIHRvZG9zIGVsZW1lbnRvcyIKLQotbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHIgIkV4aWJpciBsaXN0YSBkb3MgYXJxdWl2b3MgbmEgbGlzdGEgbmVncmEiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotIkV4aWJpciB1bWEgbGlzdGEsIGxlZ8OtdmVsIHBhcmEgbcOhcXVpbmEsIGRlIHJlY3Vyc29zIHF1ZSBvIHBsdWctaW4gIgotImVzcGVjaWZpY2FkbyBvdSB0b2RvcyBvcyBwbHVnLWlucyBmb3JuZWNlbS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDDmnRpbCBuYSBjb25leMOjbyBjb20gbWVjYW5pc21vcyAiCi0iZXh0ZXJub3MgZGUgaW5zdGFsYcOnw6NvIGF1dG9tw6F0aWNhIGRlIHBsdWctaW5zIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICJMaXN0YXIgbyBjb250ZcO6ZG8gZG8gcGx1Z2luIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIlZlcmlmaWNhciBzZSBvIGVsZW1lbnRvIG91IHBsdWctaW4gZXNwZWNpZmljYWRvIGV4aXN0ZSIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLSJBbyB2ZXJpZmljYXIgc2UgdW0gZWxlbWVudG8gb3UgcGx1Zy1pbiBleGlzdGUsIHRhbWLDqW0gdmVyaWZpY2FyIHNlIGEgdmVyc8OjbyAiCi0iw6kgbm8gbcOtbmltbyBhIGVzcGVjaWZpY2FkYSIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiRXhpYmlyIGVzcXVlbWFzIFVSSSBjb20gc3Vwb3J0ZSwgY29tIG9zIGVsZW1lbnRvcyBxdWUgb3MgaW1wbGVtZW50YW0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjYXJyZWdhciBvIGFycXVpdm8gZG8gcGx1Zy1pbjogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiTmVuaHVtIGVsZW1lbnRvIG91IHBsdWctaW4gXCIlc1wiXG4iCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJUYWJlbGEgZGUgZXN0YXTDrXN0aWNhcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIk9idGlkYSBhIG1lbnNhZ2VtICMldSBkbyBlbGVtZW50byBcIiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICJPYnRpZGEgYSBtZW5zYWdlbSAjJXUgZG8gUGFkIFwiJXM6JXNcIiAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIk9idGlkYSBhIG1lbnNhZ2VtICMldSBkbyBvYmpldG8gXCIlc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICJPYnRpZGEgYSBtZW5zYWdlbSAjJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiT2J0aWRvIG8gZmluYWwgZG8gZmx1eG8gZG8gZWxlbWVudG8gXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkVUSVEuIEVOQ09OVFIuIDogZW5jb250cmFkYSBwZWxvIGVsZW1lbnRvIFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIkVUSVEuIEVOQ09OVFIuIDogZW5jb250cmFkYSBwZWxvIFBhZCBcIiVzOiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJFVElRLiBFTkNPTlRSLiA6IGVuY29udHJhZGEgcGVsbyBvYmpldG8gXCIlc1wiLlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIkVUSVFVRVRBIEVOQ09OVFJBREFcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJUT0MgRU5DT05UUi4gICA6IGVuY29udHJhZGEgcGVsbyBlbGVtZW50byBcIiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJUT0MgRU5DT05UUi4gICA6IGVuY29udHJhZGEgcGVsbyBvYmpldG8gXCIlc1wiLlxuIgotCi1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIlRPQyBFTkNPTlRSQURBXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIklORk9STUHDh8ODTzpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiQVZJU086IGRvIGVsZW1lbnRvICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZXBhcmFkbywgZXNwZXJhbmRvIG8gcHJlZW5jaGltZW50byBkbyBidWZmZXIgcGFyYSBmaW5hbGl6YXIuLi5cbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZXBhcmFkbywgZXNwZXJhbmRvIG8gcHJvZ3Jlc3NvIHBhcmEgZmluYWxpemFyLi4uXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgInByZWVuY2hlbmRvIGJ1ZmZlci4uLiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLSJQcmVlbmNoaW1lbnRvIGRvIGJ1ZmZlciBjb21wbGV0bywgZGVmaW5pbmRvIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIHBhcmEgIgotIlJFUFJPRFVaSVIuLi5cbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIiIKLSJQcmVlbmNoZW5kbyBidWZmZXIsIGRlZmluaW5kbyBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50byBwYXJhIFBBVVNBRE8uLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIlJlZGlzdHJpYnVpw6fDo28gZGUgbGF0w6puY2lhLi4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAiRGVmaW5pbmRvIGVzdGFkbyBkZSAlcyBjb21vIHJlcXVlcmlkbyBwb3IgJXMuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkludGVycnVww6fDo286IFBhcmFuZG8gYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8uLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICJQcm9ncmVzc286ICglcykgJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIkVsZW1lbnRvIGZhbHRhbmRvOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICJDb250ZXh0byBvYnRpZG8gZG8gZWxlbWVudG8gXCIlc1wiOiAlcz0lc1xuIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICJFeGliaXIgZXRpcXVldGFzIChtZXRhZGFkb3MpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiRXhpYmlyIFRPQyAoY2Fww610dWxvcyBlIGVkacOnw7VlcykiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJFeGliaXIgaW5mb3JtYcOnw7VlcyBkZSBlc3RhZG8gZSBub3RpZmljYcOnw7VlcyBkZSBwcm9wcmllZGFkZSIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIk7Do28gaW1wcmltaXIgbmVuaHVtYSBpbmZvcm1hw6fDo28gZGUgcHJvZ3Jlc3NvIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICJFeGliaXIgbWVuc2FnZW5zIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLSJOw6NvIGV4aWJpciBpbmZvcm1hw6fDtWVzIGRlIHN0YXR1cyBwYXJhIGEgcHJvcHJpZWRhZGUgZXNwZWNpZmljYWRhIHNlIG8gbW9kbyAiCi0iZGV0YWxoYWRvIGRlIHNhw61kYSBlc3RpdmVyIGF0aXZhZG8gKHBvZGUgc2VyIHVzYWRvIHbDoXJpYXMgdmV6ZXMpIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiTk9NRS1QUk9QUklFREFERSIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiTsOjbyBpbnN0YWxlIHVtIG1hbmlwdWxhZG9yIGRlIGZhbGhhcyIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiIgotIkZvcsOnYXIgZmluYWxpemHDp8OjbyBkbyBmbHV4byBub3MgZWxlbWVudG9zIGZvbnRlIGFudGVzIGRlIGRlc2xpZ2FyIGEgZmlsYSBkZSAiCi0icHJvY2Vzc2FtZW50byIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiUmV1bmlyIGUgaW1wcmltaXIgYSB0YWJlbGEgZGUgZXN0YXTDrXN0aWNhcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiRVJSTzogbsOjbyBmb2kgcG9zc8OtdmVsIGNvbnN0cnVpciBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50bzogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICJFUlJPOiBuw6NvIGZvaSBwb3Nzw612ZWwgY29uc3RydWlyIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLW1zZ3N0ciAiQVZJU086IGZpbGEgZGUgcHJvY2Vzc2FtZW50byBjb20gZXJyb3M6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIkVSUk86IG8gZWxlbWVudG8gZGUgXCJmaWxhIGRlIHByb2Nlc3NhbWVudG9cIiBuw6NvIGZvaSBlbmNvbnRyYWRvLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIkRlZmluaW5kbyBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50byBwYXJhIFBBVVNBRE8uLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkVSUk86IEEgZmlsYSBkbyBwcm9jZXNzYW1lbnRvIG7Do28gcXVlciBwYXVzYXIuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIiIKLSJBIGZpbGEgZGUgcHJvY2Vzc2FtZW50byBlc3TDoSBleGVjdXRhbmRvIGUgbsOjbyBuZWNlc3NpdGEgZGUgUFJFUEFSQcOHw4NPLi4uXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICJBIGZpbGEgZGUgcHJvY2Vzc2FtZW50byBlc3TDoSBQUkVQQVJBTkRPLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIkVSUk86IGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIG7Do28gcXVlciBwcmVwYXJhci5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiQSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gZm9pIFBSRVBBUkFEQS4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICJEZWZpbmluZG8gYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gcGFyYSBSRVBST0RVWklORE8uLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiRVJSTzogYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gbsOjbyBxdWVyIHJlcHJvZHV6aXIuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiIgotIkZpbmFsaXphciBmbHV4byBhbyBzYWlyIGhhYmlsaXRhZG8gLS0gRm9yw6dhbmRvIGZpbmFsaXphw6fDo28gZG8gZmx1eG8gbmEgZmlsYSAiCi0iZGUgcHJvY2Vzc2FtZW50b1xuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIiIKLSJGaW5hbGl6YXIgZmx1eG8gYW8gc2FpciBoYWJpbGl0YWRvIC0tIGVzcGVyYW5kbyBvIGZpbSBkbyBmbHV4byBhcMOzcyBlcnJvXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiRXNwZXJhbmRvIHBlbG8gZmluYWwgZG8gZmx1eG8uLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkZpbmFsIGRvIGZsdXhvIGVuY29udHJhZG8gLSBwYXJhbmRvIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiIgotIkludGVycnVww6fDo28gcmVjZWJpZGEgZW5xdWFudG8gYSBmaW5hbGl6YcOnw6NvIGRvIGZsdXhvIGVzdGF2YSBzZW5kbyBhZ3VhcmRhZGEgIgotIi0gcGFyYW5kbyBhIGZpbGEgZGUgcHJvY2Vzc2FtZW50by4uLlxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIlVtIGVycm8gb2NvcnJldSBhbyBlc3BlcmFyIHBlbG8gZmluYWwgZG8gZmx1eG9cbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICJFeGVjdcOnw6NvIGZpbmFsaXphZGEgZGVwb2lzIGRlICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICJEZWZpbmluZG8gYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gcGFyYSBQUk9OVE8uLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiRGVmaW5pbmRvIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvIHBhcmEgTlVMTy4uLlxuIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiTGliZXJhbmRvIGEgZmlsYSBkZSBwcm9jZXNzYW1lbnRvLi4uXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgIkJpbiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiRXJybyBpbnRlcm5vIG5vIGZsdXhvIGRlIGRhZG9zLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIG9idGVyIGluZm9ybWHDp8O1ZXMgZG8gZXN0YWRvIGRlIHNhw61kYSBkbyBUSVBPIgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICJUSVBPMSxUSVBPMiwuLi4iCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgInbDrW5jdWxvIHNlbSBvIGVsZW1lbnRvIGZvbnRlIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAidsOtbmN1bG8gc2VtIG8gZWxlbWVudG8gY29uc3VtaWRvciIKLQotI34gbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgotI34gbXNnc3RyICJuZW5odW0gZWxlbWVudG8gcGFyYSB2aW5jdWxhciBvIFVSSSBcIiVzXCIgcGFyYSIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAibsOjbyBmb2kgcG9zc8OtdmVsIHZpbmN1bGFyIG8gZWxlbWVudG8gY29uc3VtaWRvciBwYXJhIG8gVVJJIFwiJXNcIiIKLQotI34gbXNnaWQgIm1heGltdW0iCi0jfiBtc2dzdHIgIm3DoXhpbW8iCi0KLSN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgotI34gbXNnc3RyICIiCi0jfiAiVXNvOiBnc3QteG1sbGF1bmNoIDxhcnF1aXZvLnhtbD4gWyBlbGVtZW50by5wcm9wcmllZGFkZT12YWxvciAuLi4gXVxuIgotCi0jfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgotI34gbXNnc3RyICJFUlJPOiBhIHZhbGlkYcOnw6NvIGRvIGFycXVpdm8geG1sIFwiJXNcIiBmYWxob3UuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJFUlJPOiBuZW5odW0gZWxlbWVudG8gZGUgbsOtdmVsIHN1cGVyaW9yIG5hIGZpbGEgZGUgcHJvY2Vzc2FtZW50byBkbyAiCi0jfiAiYXJxdWl2byBcIiVzXCIuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJBVklTTzogYXR1YWxtZW50ZSBow6Egc3Vwb3J0ZSBhcGVuYXMgYSB1bSBlbGVtZW50byBkZSBuw612ZWwgc3VwZXJpb3IuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJFUlJPOiBuw6NvIGZvaSBwb3Nzw612ZWwgdmFsaWRhciBvIGFyZ3VtZW50byAlZCBkYSBsaW5oYSBkZSBjb21hbmRvOiAlcy5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCi0jfiBtc2dzdHIgIkFWSVNPOiBvIGVsZW1lbnRvIGNvbSBvIG5vbWUgXCIlc1wiIG7Do28gZm9pIGVuY29udHJhZG8uXG4iCi0KLSN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgotI34gbXNnc3RyICIiCi0jfiAiU2FsdmFyIHJlcHJlc2VudGHDp8OjbyBkYSBmaWxhIGRlIHByb2Nlc3NhbWVudG8gY29tbyB4bWwgcGFyYSBvIEFSUVVJVk8gZSAiCi0jfiAic2FpciIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkFSUVVJVk8iCi0KLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIk7Do28gZml4YXIgbWFuaXB1bGFkb3JlcyBkZSBzaW5hbCBwYXJhIFNJR1VTUjEgZSBTSUdVU1IyIgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiRXhpYmlyIHRyaWxoYSBkZSBhbG9jYcOnw6NvIChzZSBoYWJpbGl0YWRvIG5hIGNvbXBpbGHDp8OjbykiCmRpZmYgLS1naXQgYS9wby9xdW90LnNlZCBiL3BvL3F1b3Quc2VkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTIyYzQ2Li4wMDAwMDAwCi0tLSBhL3BvL3F1b3Quc2VkCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1zLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKLXMvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKLXMvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCi1zLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCi1zL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCi1zL+KAnOKAnS8iIi9nCmRpZmYgLS1naXQgYS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIGIvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQzNmM0OS4uMDAwMDAwMAotLS0gYS9wby9yZW1vdmUtcG90Y2RhdGUuc2luCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBTZWQgc2NyaXB0IHRoYXQgcmVtb3ZlIHRoZSBQT1QtQ3JlYXRpb24tRGF0ZSBsaW5lIGluIHRoZSBoZWFkZXIgZW50cnkKLSMgZnJvbSBhIFBPVCBmaWxlLgotIwotIyBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXMgb2YgdGhlCi0jIHBhdHRlcm4gaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KLS9eIlBPVC1DcmVhdGlvbi1EYXRlOiAuKiIkL3sKLXgKLSMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KLXMvUC9QLwotdGEKLSMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVtb3ZlIHRoZSBsaW5lLgotZwotZAotYmIKLTphCi0jIFRoZSBob2xkIHNwYWNlIHdhcyBub25lbXB0eS4gRm9sbG93aW5nIG9jY3VycmVuY2VzLiBEbyBub3RoaW5nLgoteAotOmIKLX0KZGlmZiAtLWdpdCBhL3BvL3JvLmdtbyBiL3BvL3JvLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU2YTkyZS4uMDAwMDAwMAotLS0gYS9wby9yby5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9yby5wbyBiL3BvL3JvLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWQ2ZjBjLi4wMDAwMDAwCi0tLSBhL3BvL3JvLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTQwMCArMCwwIEBACi0jIFJvbWFuaWFuIHRyYW5zbGF0aW9uIGZvciBnc3RyZWFtZXIKLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgotIyBMdWNpYW4gQWRyaWFuIEdyaWppbmN1IDxsdWNpYW4uZ3JpamluY3VAZ21haWwuY29tPiwgMjAxMC4KLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjEwLjI5LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wOC0xNiAwMToxMCswMzAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBMdWNpYW4gQWRyaWFuIEdyaWppbmN1IDxsdWNpYW4uZ3JpamluY3VAZ21haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IFJvbWFuaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXJvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogcm9cbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obj09MSA/IDAgOiAobj09MCB8fCAobiUxMDAgPiAwICYmIG4lMTAwIDwgIgotIjIwKSkgPyAxIDogMik7O1xuIgotIlgtR2VuZXJhdG9yOiBWaXJ0YWFsIDAuNi4xXG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIkFmaciZZWF6xIMgdmVyc2l1bmVhIEdTdHJlYW1lciIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICJTZXRlYXrEgyB0b2F0ZSBhdmVydGl6xINyaWxlIGNhIGZpaW5kIGZhdGFsZSIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJBZmnImWVhesSDIGNhdGVnb3JpaWxlIGRlIGRlcGFuYXJlIGRpc3BvbmliaWxlIMiZaSBpZciZaSIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSJOaXZlbHVsIHN0YW5kYXJkIGRlIGRlcGFuYXJlIGRlIGxhIDEgKG51bWFpIGVyb3JpbGUpIGxhIDUgKG9yaWNlKSBzYXUgMCBmxINyxIMgIgotImFmaciZYXJlIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIk5JVkVMIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIkxpc3RhIHNlcGFyYXTEgyBkZSB2aXJndWxlIGN1IHBlcmVjaGlsZSBudW1lX2NhdGVnb3JpZTpuaXZlbCBwZW50cnUgYSBzZXRhICIKLSJuaXZlbHVsIHNwZWNpZmljIHBlbnRydSBmaWVjYXJlIGNhdGVnb3JpZS4gRXhlbXBsdTogR1NUX0FVVE9QTFVHOjUsIgotIkdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkxJU1TEgiIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJEZXphY3RpdmVhesSDIGFmaciZYXJlYSDDrm4gY3Vsb3JpIHBlbnRydSBkZXBhbmFyZSIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiRGV6YWN0aXZlYXrEgyBkZXBhbmFyZWEiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiIgotIkFjdGl2ZWF6xIMgZGlhZ25vc3RpY2VsZSBkZXRhbGlhdGUgcGVudHJ1IMOubmPEg3JjYXJlYSBtb2R1bGVsb3IgZGUgZXh0ZW5zaWUiCi0KLW1zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgotbXNnc3RyICJDxINpbGUgY8SDdHJlIG1vZHVsZSBkZSBleHRlbnNpZSwgc2VwYXJhdGUgcHJpbiBkb3XEgyBwdW5jdGUgKDopIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIkPEgkkiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0iTGlzdGEgbW9kdWxlbG9yIGRlIHByZcOubmPEg3JjYXQsIHNlcGFyYXRlIHByaW4gdmlyZ3VsxIMsIMOubiBwbHVzIGZhyJvEgyBkZSBsaXN0YSAiCi0ic3RvY2F0xIMgw65uIHZhcmlhYmlsYSBkZSBtZWRpdSBHU1RfUExVR0lOX1BBVEgiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJNT0RVTEUiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICIiCi0iRGV6YWN0aXZlYXrEgyBjYXB0dXJhcmVhIGVyb3JpbG9yIGRlIHNlZ21lbnRhcmUgw65uIHRpbXB1bCDDrm5jxINyY8SDcmlpIG1vZHVsZWxvciIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJEZXphY3RpdmVhesSDIGFjdHVhbGl6YXJlYSByZWdpc3RydWx1aSIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLSJEZXphY3RpdmVhesSDIGxhbnNhcmVhIGRlIHByb2Nlc2UgYWp1dMSDdG9hcmUgw65uIHRpbXB1bCBzY2FuxINyaWkgcmVnaXN0cnVsdWkiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiT3DIm2l1bmkgR1N0cmVhbWVyIgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiQXJhdMSDIG9wyJtpdW5pbGUgR1N0cmVhbWVyIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIk9wyJtpdW5lIG5lY3Vub3NjdXTEgyIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgY29yZSBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGEgw65udMOibG5pdCBvIGVyb2FyZSBnZW5lcmFsxIMgw65udHItbyBiaWJsaW90ZWPEgyBwcmluY2lwYWzEgy4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotIkRlenZvbHRhdG9yaWkgcHJvZ3JhbXVsdWkgR1N0cmVhbWVyIGF1IGZvc3QgcHJlYSBsZW5lyJlpIHBlbnRydSBhIGF0cmlidWkgdW4gIgotImNvZCBhY2VzdGVpIGVyb3JpLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBjb2QgbmVpbXBsZW1lbnRhdC4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLSJFcm9hcmUgR1N0cmVhbWVyOiBzY2hpbWJhcmVhIGRlIHN0YXJlIG51IGEgcmV1yJlpdCDImWkgdW4gZWxlbWVudCBudSBwZW50cnUgYSAiCi0icG9zdGEgdW4gbWVzYWogZGUgZXJvYXJlIGNvcmVzcHVuesSDdG9yIGN1IG1vdGl2dWwgZciZZWN1bHVpLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBwcm9ibGVtxIMgZGUg4oCecGFk4oCdLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBwcm9ibGVtxIMgY3UgZmlyZWxlIGRlIGV4ZWN1yJtpZS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAiRXJvYXJlIGludGVybsSDIEdTdHJlYW1lcjogcHJvYmxlbcSDIGRlIG5lZ29jaWVyZS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBwcm9ibGVtxIMgbGVnYXTEgyBkZSB1biBldmVuaW1lbnQuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBwcm9ibGVtxIMgZGUgZGVydWxhcmUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR1N0cmVhbWVyOiBwcm9ibGVtxIMgZGUgbWFqdXNjdWxlLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgR3N0cmVhbWVyOiBwcm9ibGVtxIMgZGUgZXRpY2hldMSDLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIkxpcHNlyJl0ZSB1biBtb2R1bCBkaW4gaW5zdGFsYXJlYSBwcm9ncmFtdWx1aSBHU3RyZWFtZXIuIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIkVyb2FyZSBpbnRlcm7EgyBHU3RyZWFtZXI6IHByb2JsZW3EgyBkZSBjZWFzLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iQWNlYXN0xIMgYXBsaWNhyJtpZSDDrm5jZWFyY8SDIHPEgyBmb2xvc2Vhc2PEgyBvIGZ1bmPIm2llIGEgcHJvZ3JhbXVsdWkgR1N0cmVhbWVyICIKLSJjYXJlIGEgZm9zdCBkZXphY3RpdmF0xIMuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgYSDDrm50w6Jsbml0IG8gZXJvYXJlIGdlbmVyYWzEgyDDrm50ci1vIGJpYmxpb3RlY8SDIHN1cG9ydC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJOdSBzZSBwb2F0ZSBpbmnIm2lhbGl6YSBiaWJsaW90ZWNhIHN1cG9ydC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgw65uY2hpZGUgYmlibGlvdGVjYSBzdXBvcnQuIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJOdSBzZSBwb2F0ZSBjb25maWd1cmEgYmlibGlvdGVjYSBzdXBvcnQuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGEgw65udMOibG5pdCBvIGVyb2FyZSBnZW5lcmFsxIMgZGUgcmVzdXJzZS4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJSZXN1cnPEgyBuZWfEg3NpdMSDLiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIlJlc3Vyc8SDIG9jdXBhdMSDIHNhdSBuZWRpc3BvbmliaWzEgy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk51IHNlIHBvYXRlIGRlc2NoaWRlIHJlc3Vyc2EgcGVudHJ1IGNpdGlyZS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk51IHNlIHBvYXRlIGRlc2NoaWRlIHJlc3Vyc2EgcGVudHJ1IHNjcmllcmUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOdSBzZSBwb2F0ZSBkZXNjaGlkZSByZXN1cnNhIHBlbnRydSBjaXRpcmUgyJlpIHNjcmllcmUuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgw65uY2hpZGUgcmVzdXJzYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgY2l0aSBkaW4gcmVzdXJzxIMuIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgc2NyaWUgw65uIHJlc3Vyc8SDLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgotbXNnc3RyICJOdSBzZSBwb2F0ZSBkZXJ1bGEgw65uIHJlc3Vyc8SDLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk51IHNlIHBvYXRlIHNpbmNyb25pemEgcmVzdXJzYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiTnUgcy1hdSBwdXR1dCBvYsibaW5lL2RlZmluaSBjb25maWd1csSDcmlsZSBkaW4vw65uIHJlc3Vyc8SDLiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiTnUgbWFpIGV4aXN0xIMgc3BhyJtpdSBsaWJlciBwZSByZXN1cnPEgy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAiTnUgbWFpIGV4aXN0xIMgc3BhyJtpdSBsaWJlciBwZSByZXN1cnPEgy4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBhIMOubnTDomxuaXQgbyBlcm9hcmUgZ2VuZXJhbMSDIGRlIGZsdXguIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iRWxlbWVudHVsIG51IGltcGxlbWVudGVhesSDIGdlc3Rpb25hcmVhIGFjZXN0dWkgZmx1eC4gVHJpbWl0ZcibaSBvIHNlc2l6YXJlIGRlICIKLSJkZWZlY8ibaXVuZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgZGV0ZXJtaW5hIHRpcHVsIGZsdXh1bHVpLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiRmx1eHVsIGVzdGUgZGUgdW4gdGlwIGRpZmVyaXQgZGUgY2VsIGdlc3Rpb25hdCBkZSBhY2VzdCBlbGVtZW50LiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiTnUgZXhpc3TEgyBuaWNpdW4gY29kZWMgY2FyZSBzxIMgcG9hdMSDIGdlc3Rpb25hIGFjZXN0IHRpcCBkZSBmbHV4LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgZGVjb2RhIGZsdXh1bC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIk51IHNlIHBvYXRlIGNvZGEgZmx1eHVsLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJOdSBzZSBwb2F0ZSBkZW11bHRpcGxleGEgZmx1eHVsLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgbXVsdGlwbGV4YSBmbHV4dWwuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAiRmx1eHVsIGVzdGUgw65udHItdW4gZm9ybWF0IGdyZciZaXQuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkZsdXh1bCBlc3RlIGNyaXB0YXQgyJlpIGRlY3JpcHRhcmVhIG51IGVzdGUgc3Vwb3J0YXTEgy4iCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0iRmx1eHVsIGVzdGUgY3JpcHRhdCDImWkgbnUgcG9hdGUgZmkgZGVjcmlwdGF0IGRlb2FyZWNlIG51IHMtYSBvZmVyaXQgbyBjaGVpZSAiCi0icG90cml2aXTEgy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiTmljaXVuIG1lc2FqIGRlIGVyb2FyZSBwZW50cnUgZG9tZW5pdWwgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIk5pY2l1biBtZXNhaiBzdGFuZGFyZCBkZSBlcm9hcmUgcGVudHJ1IGRvbWVuaXVsICVzIMiZaSBjb2R1bCAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIkNlYXN1bCBzZWxlY3RhdCBudSBwb2F0ZSBmaSB1dGlsaXphdCDDrm4gbGluaWEgZGUgYXNhbWJsYXJlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgInRpdGx1IgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAidGl0bHUgZm9sb3NpdCDDrm4gbW9kIG9iaciZbnVpdCIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJudW1lIGRlIHNvcnRhcmUgYWwgdGl0bHVsdWkiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJ0aXRsdSBmb2xvc2l0IMOubiBtb2Qgb2JpyJludWl0IMOubiBzY29wIGRlIHNvcnRhcmUiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgImFydGlzdCIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAicGVyc29hbmEgcmVzcG9uc2FiaWzEgyBwZW50cnUgw65ucmVnaXN0cmFyZSIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAibnVtZSBkZSBzb3J0YXJlIGFsIGFydGlzdHVsdWkiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvYW5hIHJlc3BvbnNhYmlsxIMgcGVudHJ1IMOubnJlZ2lzdHJhcmVhIMOubiBzY29wIGRlIHNvcnRhcmUiCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAiYWxidW0iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAiYWxidW0gY2FyZSBjb27Im2luZSBhY2VzdGUgZGF0ZSIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICJudW1lbGUgZGUgc29ydGFyZSBhbCBhbGJ1bXVsdWkiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiYWxidW0gY2FyZSBjb27Im2luZSBhY2VzdGUgZGF0ZSDDrm4gc2NvcCBkZSBzb3J0YXJlIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhcnRpc3QgYWxidW0iCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgIkFydGlzdHVsIGFsYnVtdWx1aSDDrm50cmVnLCBhyJlhIGN1bSBhciB0cmVidWkgc8SDIGZpZSBhZmnImWF0IgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJudW1lIGRlIHNvcnRhcmUgYWwgYXJ0aXN0dWx1aSBhbGJ1bXVsdWkiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIkFydGlzdHVsIGFsIGFsYnVtdWx1aSDDrm50cmVnLCBhyJlhIGN1bSBhciB0cmVidWkgc8SDIGZpZSBzb3J0YXQiCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICJkYXRhIgotCi1tc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXRhIGxhIGNhcmUgYXUgZm9zdCBjcmVhdGUgYWNlc3RlIGRhdGUgKGNhIHN0cnVjdHVyxIMgR0RhdGUpIgotCi0jLCBmdXp6eQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXRhIgotCi0jLCBmdXp6eQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZGF0YSBsYSBjYXJlIGF1IGZvc3QgY3JlYXRlIGFjZXN0ZSBkYXRlIChjYSBzdHJ1Y3R1csSDIEdEYXRlKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJnZW4iCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAiZ2VudWwgY8SDcnVpYSDDrmkgYXBhcsibaW4gYWNlc3RlIGRhdGUiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJjb21lbnRhcml1IgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgImNvbWVudGFyaXUgbGliZXIgcGVudHJ1IGRhdGUiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICJjb21lbnRhcml1IGV4dGlucyIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKLW1zZ3N0ciAiIgotInRleHQgbGliZXIgY2FyZSBjb21lbnRlYXrEgyBkYXRlbGUgw65uIGtleT12YWxvYXJlIHNhdSBrZXlbZW5dPWNvbWVudGFyaXUgZGUgbGEiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIm51bcSDciBwaWVzxIMiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAibnVtxINydWwgcGllc2VpIMOubiBjYWRydWwgdW5laSBjb2xlY8ibaWkiCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAibnVtxINyIHBpZXPEgyIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIm51bcSDcnVsIHBpZXNlbG9yIMOubiBjb2xlY8ibaWEgZGluIGNhcmUgZmFjZSBwYXJ0ZSBhY2Vhc3TEgyBwaWVzxIMiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAibnVtxINyIGRpc2MiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJudW3Eg3IgZGlzYyDDrm4gY2FkcnVsIHVuZWkgY29sZWPIm2lpIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAibnVtxINydWwgZGlzY3VyaWxvciIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICJudW3Eg3J1bCBkaXNjdXJpbG9yIMOubiBjb2xlY8ibaWEgZGluIGNhcmUgZmFjZSBwYXJ0ZSBhY2VzdCBkaXNjIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgImxvY2HIm2llIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJPcmlnaW5lYSBmaciZaWVydWx1aSBtZWRpYSBjYSB1biBVUkkgKGxvY2HIm2llIHVuZGUgZXN0ZSBzdG9jYXTEgyB2ZXJzaXVuZWEgIgotIm9yaWdpbmFsxIMgYSBmaciZaWVydWx1aSBzYXUgZmx1eHVsdWkpIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgInBhZ2luYSBkZSBwb3JuaXJlIgotCi1tc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKLW1zZ3N0ciAiIgotIlBhZ2luYSBkZSBwb3JuaXJlIHBlbnRydSBhY2VzdCBmaciZaWVyIG1lZGlhIChhZGljxIMgcGFnaW5hIGRlIHBvcm5pcmUgYSAiCi0iYXJ0aXN0dWx1aSBzYXUgYSBmaWxtdWx1aSkiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAiZGVzY3JpZXJlIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJ0ZXh0IHNjdXJ0IGNhcmUgZGVzY3JpZSBjb27Im2ludXR1bCBhY2VzdG9yIGRhdGUiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzaXVuZSIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJ2ZXJzaXVuZWEgYWNlc3RvciBkYXRlIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiIgotIkNvZHVsIEludGVybmHIm2lvbmFsIFN0YW5kYXJkaXphdCBkZSDDjm5yZWdpc3RyxINyaSAtIHZlemkgaHR0cDovL3d3dy5pZnBpLm9yZy8iCi0iaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXphyJtpZSIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiZHJlcHR1cmkgZGUgYXV0b3IiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJub3RpyJvEgyBhc3VwcmEgZHJlcHR1cmlsb3IgZGUgYXV0b3IgcGVudHJ1IGFjZXN0ZSBkYXRlIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAidXJpIHBlbnRydSBkcmVwdHVyaWxlIGRlIGF1dG9yIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkgY8SDdHJlIG5vdGnIm2EgYXN1cHJhIGRyZXB0dXJpbG9yIGRlIGF1dG9yIHBlbnRydSBhY2VzdGUgZGF0ZSAoVVJJKSIKLQotIywgZnV6enkKLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJjb2RvciIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgImNvbnRhY3QiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJpbmZvcm1hyJtpaSBkZSBjb250YWN0IgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAibGljZW7Im8SDIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICJsaWNlbsibYSBkYXRlbG9yIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgInVyaSBsaWNlbsibxIMiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSBwZW50cnUgbGljZW7Im2EgYWNlc3RvciBkYXRlIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJpbnRlcnByZXQiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVyc29hbmEgY2FyZSBpbnRlcnByZXRlYXrEgyIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJjb21wb3ppdG9yIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb2FuYSBjYXJlIGEgY29tcHVzIMOubnJlZ2lzdHJhcmVhIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJkdXJhdGEiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAiZHVyYXRhIMOubiB1bml0xIPIm2lsZSBkZSB0aW1wIGFsZSBwcm9ncmFtdWx1aSBHU3RyZWFtZXIgKG5hbm9zZWN1bmRlKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJjb2RlYyIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29kZWN1bCBjdSBjYXJlIGF1IGZvc3Qgc3RvY2F0ZSBkYXRlbGUiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAiY29kZWMgdmlkZW8iCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjdWwgY3UgY2FyZSBhdSBmb3N0IHN0b2NhdGUgZGF0ZWxlIHZpZGVvIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgImNvZGVjIGF1ZGlvIgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjb2RlYyBjdSBjYXJlIGF1IGZvc3Qgc3RvY2F0ZSBkYXRlbGUgYXVkaW8iCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAiY29kZWMgc3VidGl0cmFyZSIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29kZWMgY3UgY2FyZSBhdSBmb3N0IHN0b2NhdGUgZGF0ZWxlIHN1YnRpdHLEg3JpaSIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgImZvcm1hdCBjb250YWluZXIiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiZm9ybWF0dWwgY29udGFpbmVydWx1aSDDrm4gY2FyZSBzdW50IHN0b2NhdGUgZGF0ZWxlIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAicmF0YSBkZSBiacibaSIKLQotbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgInJhdGEgZGUgYmnIm2kgZXhhY3TEgyBzYXUgbWVkaWUsIMOubiBiacibaS9zIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJyYXRhIGRlIGJpyJtpIG5vbWluYWzEgyIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgInJhdGEgZGUgYmnIm2kgbm9taW5hbMSDIMOubiBiacibaS9zIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIgotbXNnc3RyICJyYXRhIGRlIGJpyJtpIG1pbmltxIMiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJyYXRhIGRlIGJpyJtpIG1pbmltxIMgw65uIGJpyJtpL3MiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgInJhdGEgZGUgYmnIm2kgbWF4aW3EgyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgInJhdGEgZGUgYmnIm2kgbWF4aW3EgyDDrm4gYmnIm2kvcyIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImNvZG9yIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiY29kb3J1bCBmb2xvc2l0IHBlbnRydSBhIGNvZGEgYWNlc3QgZmx1eCIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAidmVyc2l1bmVhIGNvZG9ydWx1aSIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgInZlcnNpdW5lYSBjb2RvcnVsdWkgZm9sb3NpdCBwZW50cnUgYSBjb2RhIGFjZXN0IGZsdXgiCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgInNlcmlhbCIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgIm51bcSDcnVsIHNlcmlhbCBhbCBwaXN0ZWkiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgImPDosiZdGlndWwgcmVwbGF5Z2FpbiBhbCBwaXN0ZWkiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJjw6LImXRpZ3VsIMOubiBkYiBhbCBwaXN0ZWkiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgInbDonJmdWwgcmVwbGF5Z2FpbiBhbCBwaXN0ZWkiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAidsOicmZ1bCBwaXN0ZWkiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgImPDosiZdGlndWwgcmVwbGF5Z2FpbiBhbCBhbGJ1bXVsdWkiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJjw6LImXRpZ3VsIMOubiBkYiBhbCBhbGJ1bXVsdWkiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgInbDonJmdWwgcmVwbGF5Z2FpbiBhbCBhbGJ1bXVsdWkiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAidsOicmZ1bCBhbGJ1bXVsdWkiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAibml2ZWx1bCBkZSByZWZlcmluyJvEgyByZXBsYXlnYWluIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAibml2ZWx1bCBkZSByZWZlcmluyJvEgyBhbCB2YWxvcmlsb3IgY8OiyJl0aWd1bHVpIHBlbnRydSBwaXN0xIMgyJlpIGFsYnVtIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAiY29kIGxpbWLEgyIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICJjb2R1bCBkZSBsaW1ixIMgYWwgYWNlc3R1aSBmbHV4LCBjb25mb3JtIElTTy02MzktMSIKLQotIywgZnV6enkKLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJjb2QgbGltYsSDIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJpbWFnaW5lIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiaW1hZ2luZSDDrm4gbGVnxIN0dXLEgyBjdSBhY2VzdCBmbHV4IgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICJwcmV2aXp1YWxpemFyZSBpbWFnaW5lIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJwcmV2aXp1YWxpemFyZWEgaW1hZ2luaWkgw65uIGxlZ8SDdHVyxIMgY3UgYWNlc3QgZmx1eCIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgImF0YciZYW1lbnQiCi0KLW1zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJmaciZaWVyIGF0YciZYXQgbGEgYWNlc3QgZmx1eCIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgImLEg3TEg2kgcGUgbWludXQiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAibnVtxINydWwgZGUgYsSDdMSDaSBwZSBtaW51dCDDrm4gcGFydGVhIGF1ZGlvIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgImN1dmludGUgY2hlaWUiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAiY3V2aW50ZSBjaGVpZSBzZXBhcmF0ZSBwcmluIHZpcmd1bMSDLCBjYXJlIGRlc2NyaXUgY29uyJtpbnV0dWwiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAibnVtZSBnZW8tbG9jYcibaWUiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotIm51bWUgbGl6aWJpbCBkZXNjcmlwdGl2IGFsIGxvY2HIm2llaSB1bmRlIGEgZm9zdCDDrm5yZWdpc3RyYXQgc2F1IHByb2R1cyBhY2VzdCAiCi0iZmnImWllciBtZWRpYSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAibGF0aXR1ZGluZSBnZW8tbG9jYcibaWUiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSJsYXRpdHVkaW5lYSBnZW8tbG9jYcibaWVpIHVuZGUgYSBmb3N0IMOubnJlZ2lzdHJhdCBzYXUgcHJvZHVzIGFjZXN0IGZpyJlpZXIgIgotIm1lZGlhIGNvbmZvcm0gV0dTODQgKHplcm8gbGEgZWN1YXRvciwgdmFsb3JpIG5lZ2F0aXZlIHBlbnRydSBsYXRpdHVkaW5pICIKLSJzdWRpY2UpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAibG9uZ2l0dWRpbmUgZ2VvLWxvY2HIm2llIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotImxvbmdpdHVkaW5lIGdlby1sb2NhyJtpZWkgdW5kZSBhIGZvc3Qgw65ucmVnaXN0cmF0IHNhdSBwcm9kdXMgYWNlc3QgZmnImWllciAiCi0ibWVkaWEgw65uIGdyYWRlIGNvbmZvcm0gV0dTODQgKHplcm8gbGEgcHJpbXVsIG1lcmlkaWFuIGRpbiBHcmVlbndpY2gvTWFyZWEgIgotIkJyaXRhbmllLCB2YWxvcmkgbmVnYXRpdmUgcGVudHJ1IGxvbmdpdHVkaW5pIHZlc3RpY2UpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAiYWx0aXR1ZGluZSBnZW8tbG9jYcibaWUiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0iYWx0aXR1ZGluZWEgZ2VvLWxvY2HIm2llaSB1bmRlIGEgZm9zdCDDrm5yZWdpc3RyYXQgc2F1IHByb2R1cyBhY2VzdCBmaciZaWVyICIKLSJtZWRpYSBjb25mb3JtIFdHUzg0ICh6ZXJvIGxhIGVjdWF0b3IsIHZhbG9yaSBuZWdhdGl2ZSBwZW50cnUgbGF0aXR1ZGluaSAiCi0ic3VkaWNlKSAoemVybyBlc3RlIG5pdmVsdWwgbWVkaXUgYWwgbcSDcmlpKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICLIm2FyxIMgZ2VvLWxvY2HIm2llIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLSLIm2FyYSAobnVtZSDDrm4gbGltYmEgZW5nbGV6xIMpIHVuZGUgYSBmb3N0IMOubnJlZ2lzdHJhdCBzYXUgcHJvZHVzIGFjZXN0IGZpyJlpZXIgIgotIm1lZGlhIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgIm9yYciZIGdlby1sb2NhyJtpZSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0ib3JhyJkgKG51bWUgw65uIGxpbWJhIGVuZ2xlesSDKSB1bmRlIGEgZm9zdCDDrm5yZWdpc3RyYXQgc2F1IHByb2R1cyBhY2VzdCBmaciZaWVyICIKLSJtZWRpYSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAic3VibG9jYcibaWUgZ2VvLWxvY2HIm2llIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0ibG9jYcibaWUgw65uIG9yYciZdWwgdW5kZSBhIGZvc3Qgw65ucmVnaXN0cmF0IHNhdSBwcm9kdXMgYWNlc3QgZmnImWllciBtZWRpYSAoZGUgIgotImV4LiBjYXJ0aWVydWwpIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJudW1lIGdlby1sb2NhyJtpZSIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgInZpdGV6YSBkZSBjaXJjdWxhyJtpZSBhIGdlby1sb2NhyJtpZWkiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLSJ2aXRlemEgZGUgY2lyY3VsYcibaWUgYSBkaXNwb3ppdGl2dWx1aSBkZSBjYXB0dXJhcmUgw65uIHRpbXAgY2UgZGVzZsSDyJl1cmF1ICIKLSJhY3Rpdml0xIPIm2lsZSBkZSBjYXB0YXJlIMOubiBtL3MiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlY8ibaWEgZGUgY2lyY3VsYcibaWUgYSBnZW8tbG9jYcibaWVpIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iaW5kaWNhIGRpcmVjyJtpYSBkZSBtaciZY2FyZSBhIGFwYXJhdHVsdWkgZGUgY2FwdGFyZSBjdSBjYXJlIGEgZm9zdCAiCi0iw65ucmVnaXN0cmF0IGZpyJlpZXJ1bCBtZWRpYS4gQWNlc3RhIGVzdGUgcmVwcmV6ZW50YXQgY2EgZGUgZ3JhZGUgw65uIHZpcmd1bMSDICIKLSJtb2JpbMSDLCAwIMOubnNlYW1uxIMgbm9yZCBnZW9ncmFmaWMgyJlpIGNyZciZdGUgw65uIHNlbnN1bCBhY2Vsb3IgZGUgY2Vhc29ybmljIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJkaXJlY8ibaWEgZGUgY2FwdGFyZSBhIGdlby1sb2NhyJtpZWkiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJpbmRpY2EgZGlyZWPIm2lhIMOubiBjYXJlIGFyxIN0YSBhcGFyYXR1bCBkZSBjYXB0YXJlIGN1IGNhcmUgYSBmb3N0IMOubnJlZ2lzdHJhdCAiCi0iZmnImWllcnVsIG1lZGlhLiBBY2VzdGEgZXN0ZSByZXByZXplbnRhdCBjYSBkZSBncmFkZSDDrm4gdmlyZ3VsxIMgbW9iaWzEgywgMCAiCi0iw65uc2VhbW7EgyBub3JkIGdlb2dyYWZpYyDImWkgY3JlyJl0ZSDDrm4gc2Vuc3VsIGFjZWxvciBkZSBjZWFzb3JuaWMiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAibnVtZSBzaG93IgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAiIgotIk51bWVsZSB1bnVpIHNob3cgdHYvcG9kY2FzdC9zZXJpYWwgZGluIGNhcmUgYWNlc3QgZmnImWllciBtZWRpYSBmYWNlIHBhcnRlIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICJhcmF0xIMgbnVtZWxlIGRlIHNvcnRhcmUiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSJOdW1lbGUgdW51aSBzaG93IHR2L3BvZGNhc3Qvc2VyaWFsIGRpbiBjYXJlIGFjZXN0IGZpyJlpZXIgbWVkaWEgZmFjZSBwYXJ0ZSwgIgotInBlbnRydSBzb3J0YXJlIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgIm51bcSDciBlcGlzb2QiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiTnVtxINydWwgZXBpc29kdWx1aSBkaW4gY2FyZSBhY2VzdCBmaciZaWVyIG1lZGlhIGZhY2UgcGFydGUiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJudW3Eg3J1bCBzZXpvbiIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJOdW3Eg3J1bCBzZXpvbnVsdWkgZGluIGNhcmUgYWNlc3QgZmnImWllciBtZWRpYSBmYWNlIHBhcnRlIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJ2ZXJzdXJpIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICJWZXJzdXJpbGUgZmnImWllcnVsdWkgbWVkaWEsIGZyZWN2ZW50IHV0aWxpemF0ZSBwZW50cnUgY8OibnRlY2UiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAibnVtZSBzb3J0YXJlIGNvbXBveml0b3IiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwZXJzb2FuYSBjYXJlIGEgY29tcHVzIMOubnJlZ2lzdHJhcmVhLCDDrm4gc2NvcCBkZSBzb3J0YXJlIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgImdydXBhcmUiCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLSJHcnVwZWF6xIMgbWVkaWEgw65ucnVkaXRlIGNhcmUgc2Ugw65udGluZCBwZSBtYWkgbXVsdGUgcGlzdGUsIGNhIGRlIGV4LiAiCi0iZGlmZXJpdGVsZSBwaWVzZSBhbGUgdW51aSBjb25jZXJ0LiBFc3RlIHVuIG5pdmVsIGRlIG9yZ2FuaXphcmUgbWFpIHJpZGljYXQgIgotImRlY8OidCBhbCB1bmVpIHBpZXNlLCBkYXIgbWFpIGNvYm9yw6J0IGRlY8OidCBhbCB1bnVpIGFsYnVtIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgImV2YWx1YXJlIHV0aWxpemF0b3IiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIkV2YWx1YXJlYSBhdHJpYnVpdMSDIGRlIHVuIHV0aWxpemF0b3IuIEN1IGPDonQgZXN0ZSBtYWkgbWFyZSBldmFsdWFyZWEsIGN1ICIKLSJhdMOidCBtYWkgbXVsdCBpLWEgcGzEg2N1dCBhY2VsdWkgdXRpbGl6YXRvciIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgInByb2R1Y8SDdG9ydWwgZGlzcG96aXRpdnVsdWkiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJQcm9kdWPEg3RvcnVsIGRpc3Bveml0aXZ1bHVpIHV0aWxpemF0IHBlbnRydSBhIGNyZWEgYWNlc3QgZmnImWllciBtZWRpYSIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAibW9kZWwgZGlzcG96aXRpdiIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTW9kZWx1bCBkaXNwb3ppdGl2dWx1aSB1dGlsaXphdCBwZW50cnUgYSBjcmVhIGFjZXN0IGZpyJlpZXIgbWVkaWEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAibnVtZSBnZW8tbG9jYcibaWUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICJNb2RlbHVsIGRpc3Bveml0aXZ1bHVpIHV0aWxpemF0IHBlbnRydSBhIGNyZWEgYWNlc3QgZmnImWllciBtZWRpYSIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIiIKLQotbXNnaWQgImltYWdlIG9yaWVudGF0aW9uIgotbXNnc3RyICJvcmllbnRhcmUgaW1hZ2luZSIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiQ3VtIGFyIHRyZWJ1aSByb3RpdMSDIHNhdSDDrm50b2Fyc8SDIGltYWdpbmVhIMOubmFpbnRlIGRlIGFmaciZYXJlIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJFUk9BUkU6IGRlIGxhIGVsZW1lbnR1bCAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJbmZvcm1hyJtpaSBzdXBsaW1lbnRhcmUgcGVudHJ1IGRlcGFuYXJlOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIm5pY2lvIHByb3ByaWV0YXRlIOKAniVz4oCdIMOubiBlbGVtZW50dWwg4oCeJXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICIiCi0ibnUgc2UgcG9hdGUgc3RhYmlsaSBwcm9wcmlldGF0ZWEg4oCeJXPigJ0gw65uIGVsZW1lbnR1bCDigJ4lc+KAnSBsYSB2YWxvYXJlYSDigJ4lc+KAnSIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIm51IHNlIHBvYXRlIGxlZ2EgJXMgbGEgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIm5pY2l1biBlbGVtZW50IOKAniVz4oCdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICJudSBzZSBwb3QgYW5hbGl6YSBtYWp1c2N1bGVsZSDigJ4lc+KAnSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5pY2l1biBlbGVtZW50IGRlcml2YXQgcGVudHJ1IFVSSSDigJ4lc+KAnSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibmljaXVuIGVsZW1lbnQgc3Vyc8SDIHBlbnRydSBVUkkg4oCeJXPigJ0iCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgImNvbnRhaW5lcnVsIGdvbCDigJ4lc+KAnSBzcGVjaWZpY2F0LCBudSBlc3RlIHBlcm1pcyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJuaWNpdW4gY29udGFpbmVyIOKAniVz4oCdLCBzZSBvbWl0ZSIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJsaW5pYSBkZSBhc2FtYmxhcmUgdmlkxIMgbnUgZXN0ZSBwZXJtaXPEgyIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJNdWx0ZSB6b25lIGRlIG1lbW9yaWUgdGFtcG9uIHN1bnQgYWJhbmRvbmF0ZS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIlByb2JsZW3EgyBpbnRlcm7EgyBkZSBmbHV4IGFsIGRhdGVsb3IuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiRXJvYXJlIGludGVybsSDIGRlIGZsdXggYWwgZGF0ZWxvci4iCi0KLW1zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCi1tc2dzdHIgIkVyb2FyZSBpbnRlcm7EgyBkZSBjZWFzLiIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkZpbHRyYXJlIG1hanVzY3VsZSIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iUmVzdHJpY8ibaW9uZWF6xIMgY2FwYWNpdMSDyJtpbGUgcGVybWlzZSAoTlVMTCDDrm5zZWFtbsSDIE9SSUNFKS4gRGVmaW5pcmVhICIKLSJhY2VzdGVpIHByb3ByaWV0xIPIm2kgcHJlaWEgbyByZWZlcmluyJvEgyBjxIN0cmUgb2JpZWN0dWwgR3N0Q2FwcyBmdXJuaXphdC4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICJOaWNpdW4gZGlyZWN0b3IgdGVtcG9yYXIgc3BlY2lmaWNhdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiTnUgYW0gcHV0dXQgY3JlYSBmaciZaWVydWwgdGVtcG9yYXIg4oCeJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgZGVzY2hpZGUgZmnImWllcnVsIOKAniVz4oCdIHBlbnRydSBjaXRpcmUuIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiRXJvYXJlIGxhIHNjcmllcmVhIMOubiBmaciZaWVydWwgZGVzY8SDcmNhdC4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTmljaXVuIG51bWUgZGUgZmnImWllciBzcGVjaWZpY2F0IHBlbnRydSBzY3JpZXJlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIk51IHMtYSBwdXR1dCBkZXNjaGlkZSBmaciZaWVydWwg4oCeJXPigJ0gcGVudHJ1IHNjcmllcmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcm9hcmUgbGEgw65uY2hpZGVyZWEgZmnImWllcnVsdWkg4oCeJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcm9hcmUgw65uIHRpbXB1bCBkZXJ1bMSDcmlpIMOubiBmaciZaWVydWwg4oCeJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJFcm9hcmUgbGEgc2NyaWVyZWEgZmnImWllcnVsdWkg4oCeJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTmljaXVuIG51bWUgZGUgZmnImWllciBzcGVjaWZpY2F0IHBlbnRydSBjaXRpcmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICJOdSBzZSBwb3Qgb2LIm2luZSBpbmZvcm1hyJtpaSBkZXNwcmUg4oCeJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlwiJXNcIiBpcyBhIGRpcmVjdG9yeS4iCi1tc2dzdHIgIuKAniVz4oCdIGVzdGUgdW4gZGlyZWN0b3IuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiRmnImWllcnVsIOKAniVz4oCdIGVzdGUgdW4gc29ja2V0LiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIkXImWVjIGR1cMSDIG51bcSDcnVsIGRlIGl0ZXJhyJtpaSBjYXJlIGEgZm9zdCBjZXJ1dC4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJtYWp1c2N1bGUiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJjYXBhYmlsaXTEg8ibaSBkZXRlY3RhdGUgw65uIGZsdXgiCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJtaW5pbSIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgImZvcsibZWF6xIMgY2FwcyIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICJmb3LIm2VhesSDIGNhcHMgZsSDcsSDIGEgZWZlY3R1YSB1biB0eXBlZmluZCIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiRmx1eHVsIG51IGNvbsibaW5lIGRhdGUuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJGbHV4dWwgbnUgY29uyJtpbmUgZGF0ZS4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICJJbnRlcmZlyJtlIGltcGxlbWVudGF0ZTpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICJzZSBwb2F0ZSBjaXRpIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgInNlIHBvYXRlIHNjcmllIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJzZSBwb2F0ZSBjb250cm9sYSIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICJGaciZaWVyZWxlIGRlIHBlIGxpc3RhIG5lYWdyxIM6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAiTnVtxINyIHRvdGFsOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkIGZpyJlpZXIgcGUgbGlzdGEgbmVhZ3LEgyIKLW1zZ3N0clsxXSAiJWQgZmnImWllcmUgcGUgbGlzdGEgbmVhZ3LEgyIKLW1zZ3N0clsyXSAiJWQgZGUgZmnImWllcmUgcGUgbGlzdGEgbmVhZ3LEgyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIG1vZHVsIgotbXNnc3RyWzFdICIlZCBtb2R1bGUiCi1tc2dzdHJbMl0gIiVkIGRlIG1vZHVsZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCBpbnRyYXJlIHBlIGxpc3RhIG5lYWdyxIMiCi1tc2dzdHJbMV0gIiVkIGludHLEg3JpIHBlIGxpc3RhIG5lYWdyxIMiCi1tc2dzdHJbMl0gIiVkIGRlIGludHLEg3JpIHBlIGxpc3RhIG5lYWdyxIMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIGNhcmFjdGVyaXN0aWPEgyIKLW1zZ3N0clsxXSAiJWQgY2FyYWN0ZXJpc3RpY2kiCi1tc2dzdHJbMl0gIiVkIGRlIGNhcmFjdGVyaXN0aWNpIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJUaXDEg3JlyJl0ZSB0b2F0ZSBlbGVtZW50ZWxlIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiVGlwxINyZciZdGUgbGlzdGEgZGUgZmnImWllcmUgZGUgcGUgbGlzdGEgbmVhZ3LEgyIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iVGlwxINyZciZdGUgbyBsaXN0xIMgcHJlbHVjcmFiaWzEgyBkZSBvIG1hyJlpbsSDIGEgY2FyYWN0ZXJpc3RpY2lsb3IgZnVybml6YXRlIGRlICIKLSJtb2R1bHVsIGRlIGV4dGVuc2llIHNwZWNpZmljYXQgc2F1IGRlIHRvYXRlIG1vZHVsZWxlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWwgw65uIGNvbmV4aXVuaWxlIGPEg3RyZSBtZWNhbmlzbWUgIgotImV4dGVybmUgZGUgaW5zdGFsYXJlIGF1dG9tYXTEgyBkZSBtb2R1bGUgZGUgZXh0ZW5zaWUiCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIkxpc3RlYXrEgyBjb27Im2ludXR1bCBtb2R1bHVsdWkgZGUgZXh0ZW5zaWUiCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICIiCi0iVGlwxINyZciZdGUgc2NoZW1lbGUgVVJJIHN1cG9ydGF0ZSwgY3UgZWxlbWVudGVsZSBwZSBjYXJlIGxlIGltcGxlbWVudGVhesSDIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJOdSBzZSBwb2F0ZSDDrm5jxINyY2EgZmnImWllcnVsIG1vZHVsOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJOaWNpdW4gYXN0ZmVsIGRlIGVsZW1lbnQgc2F1IG1vZHVsIOKAniVz4oCdXG4iCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJQcmltaXQgbWVzYWp1bCAjJXUsIGRlIGxhIGVsZW1lbnR1bCDigJ4lc+KAnSAoJXMpOiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiUHJpbWl0IG1lc2FqdWwgIyV1LCBkZSBsYSBwYWQtdWwg4oCeJXM6JXPigJ0gKCVzKToiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIlByaW1pdCBtZXNhanVsICMldSwgZGUgbGEgb2JpZWN0dWwg4oCeJXPigJ0gKCVzKToiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiUHJpbWl0IG1lc2FqdWwgIyV1ICglcyk6IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiUHJpbWlyZSBFT1MgZGUgbGEgZWxlbWVudHVsIOKAniVz4oCdLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk1BUkNBSiBHxIJTSVQ6IGfEg3NpdCBkZSBjxIN0cmUgZWxlbWVudHVsIOKAniVz4oCdLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiTUFSQ0FKIEfEglNJVCAgIDogZ8SDc2l0IGRlIGPEg3RyZSBwYWQg4oCeJXM6JXPigJ0uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJNQVJDQUogR8SCU0lUICAgOiBnxINzaXQgZGUgY8SDdHJlIG9iaWVjdHVsIOKAniVz4oCdLlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIk1BUkNBSiBHxIJTSVRcbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiTUFSQ0FKIEfEglNJVDogZ8SDc2l0IGRlIGPEg3RyZSBlbGVtZW50dWwg4oCeJXPigJ0uXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiTUFSQ0FKIEfEglNJVCAgIDogZ8SDc2l0IGRlIGPEg3RyZSBvYmllY3R1bCDigJ4lc+KAnS5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiTUFSQ0FKIEfEglNJVFxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPUk1ByJpJSTpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiQVZFUlRJU01FTlQ6IGRlIGxhIGVsZW1lbnR1bCAlczogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJQcmXDrm5jxINyY2FyZSwgc2UgYciZdGVhcHTEgyB0ZXJtaW5hcmVhIHVtcGxlcmlpIG1lbW9yaWVpIHRhbXBvbi4uLlxuIgotCi0jLCBmdXp6eQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZcOubmPEg3JjYXJlLCBzZSBhyJl0ZWFwdMSDIHRlcm1pbmFyZWEgdW1wbGVyaWkgbWVtb3JpZWkgdGFtcG9uLi4uXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIlByZcOubmPEg3JjYXJlIGNvbXBsZXTEgywgc2Ugc2V0ZWF6xIMgbGluaWVpIGRlIGFzYW1ibGFyZSBwZSBSRURBUkUgLi4uXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJQcmXDrm5jxINyY2FyZSwgc2Ugc2V0ZWF6xIMgbGluaWEgZGUgYXNhbWJsYXJlIHBlIFBBVVrEgiAuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIlNlIHJlZGlzdHJpYnVpZSBsYXRlbsibYS4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIlNlIGRlZmluZciZdGUgc3RhcmVhIGxhICVzIGR1cMSDIGN1bSBhIGZvc3QgY2VydXQgZGUgJXMuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIsOObnRyZXJ1cGVyZTogU2Ugb3ByZciZdGUgbGluaWEgZGUgYXNhbWJsYXJlIC4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICJuaWNpdW4gZWxlbWVudCDigJ4lc+KAnSIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIkFWRVJUSVNNRU5UOiBkZSBsYSBlbGVtZW50dWwgJXM6ICVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIk1hcmNhamUgZGUgaWXImWlyZSAoY3Vub3NjdXRlIMiZaSBjYSDigJ5tZXRhZGF0YeKAnSkiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICJJbmZvcm1hyJtpaSBhc3VwcmEgc3TEg3JpaSBkZSBpZciZaXJlIMiZaSBub3RpZmljxINyaSBwcm9wcmlldMSDyJtpIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiTnUgdGlwxINyaSBuaWNpdW4gZmVsIGRlIGluZm9ybWHIm2lpIGRlIHByb2dyZXMiCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgIk1lc2FqZSBkZSBpZciZaXJlIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiTnUgaW5zdGFsYSB1biBnZXN0aW9uYXIgZGUgZXJvcmkiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIkZvcsibZWF6xIMgRU9TIHBlIHN1cnNlIMOubmFpbnRlIGRlIGEgw65uY2hpZGUgbGluaWEgZGUgYXNhbWJsYXJlIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIkVST0FSRTogbGluaWEgZGUgYXNhbWJsYXJlIG51IGEgcHV0dXQgZmkgY29uc3RydWl0xIM6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiRVJPQVJFOiBsaW5pYSBkZSBhc2FtYmxhcmUgbnUgYSBwdXR1dCBmaSBjb25zdHJ1aXTEgy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIkFWRVJUSVNNRU5UOiBsaW5pYSBkZSBhc2FtYmxhcmUgY29uyJtpbmUgZXJvcmk6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIkVST0FSRTogZWxlbWVudHVsIOKAnnBpcGVsaW5l4oCdIChsaW5pZSBkZSBhc2FtYmxhcmUpIG51IGEgZm9zdCBnxINzaXQuXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiU2Ugc2V0ZWF6xIMgbGluaWEgZGUgYXNhbWJsYXJlIHBlIFBBVVrEgiAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkVST0FSRTogTGluaWEgZGUgYXNhbWJsYXJlIG51IHZyZWEgc8SDIGZpZSBwdXPEgyBwZSBwYXV6xIMuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIkxpbmlhIGRlIGFzYW1ibGFyZSBlc3RlIOKAnmxpdmXigJ0gyJlpIG51IG5lY2VzaXTEgyBQUkXDjk5DxIJSQ0FSRSAuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIkxpbmlhIGRlIGFzYW1ibGFyZSBlc3RlIFBSRcOOTkPEglJDQVTEgiAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiRVJPQVJFOiBsaW5pYSBkZSBhc2FtYmxhcmUgbnUgdnJlYSBzxIMgc2UgcHJlw65uY2FyY2UuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIkxpbmlhIGRlIGFzYW1ibGFyZSBzZSBQUkXDjk5DQVJDxIIgLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIlNlIHNldGVhesSDIGxpbmlhIGRlIGFzYW1ibGFyZSBwZSBSRURBUkUgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkVST0FSRTogbGluaWEgZGUgYXNhbWJsYXJlIG51IHZyZWEgc8SDIHJlZGVhLlxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIkVPUyBsYSDDrm5jaGlkZXJlIGFjdGl2YXQgLS0gU2UgZm9yyJtlYXrEgyBFT1MgcGUgbGluaWEgZGUgYXNhbWJsYXJlXG4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIkVPUyBsYSDDrm5jaGlkZXJlIGFjdGl2YXQgLS0gU2UgZm9yyJtlYXrEgyBFT1MgcGUgbGluaWEgZGUgYXNhbWJsYXJlXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiU2UgYciZdGVhcHTEgyBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyBwcmltaXQgLSBzZSBvcHJlyJl0ZSBsaW5pYSBkZSBhc2FtYmxhcmUuLi5cbiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiw45udHJlcnVwZXJlOiBTZSBvcHJlyJl0ZSBsaW5pYSBkZSBhc2FtYmxhcmUgLi4uXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiQSBhcMSDcnV0IG8gZXJvYXJlIMOubiB0aW1wIGNlIHNlIGHImXRlcHRhIEVPU1xuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIkV4ZWN1yJtpZSB0ZXJtaW5hdMSDIGR1cMSDICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICJTZSBzZXRlYXrEgyBsaW5pYSBkZSBhc2FtYmxhcmUgcGUgUFJFR8SCVElUIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICJTZSBzZXRlYXrEgyBsaW5pYSBkZSBhc2FtYmxhcmUgcGUgTlVMTCAuLi5cbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIlNlIGVsaWJlcmVhesSDIGxpbmlhIGRlIGFzYW1ibGFyZS4uLlxuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgYSBmbHV4dWx1aSBkZSBkYXRlLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIk51IHNjb2F0ZSBpbmZvcm1hyJtpaSBkZXNwcmUgc3TEg3JpbGUgZGUgVElQVUwiCi0KLSN+IG1zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCi0jfiBtc2dzdHIgIlRJUDEsVElQMiwuLi4iCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgImxlZ8SDdHVyxIMgZsSDcsSDIHVuIGVsZW1lbnQgc3Vyc8SDIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGVnxIN0dXLEgyBmxINyxIMgdW4gZWxlbWVudCBkZXJpdmF0IgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgIm5pY2l1biBlbGVtZW50IHBlbnRydSBhIGxlZ2EgVVJJIOKAniVz4oCdIGxhIgotCi0jfiBtc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotI34gbXNnc3RyICJudSBzZSBwb2F0ZSBsZWdhIGVsZW1lbnR1bCBkZXJpdmF0IHBlbnRydSBVUkkg4oCeJXPigJ0iCi0KLSN+IG1zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgotI34gbXNnc3RyICJBZmnImWVhesSDIGPEg2lsZSBkZSBhbG9jYXJlIChkYWPEgyBzLWEgYWN0aXZhdCBsYSBtb21lbnR1bCBjb21waWzEg3JpaSkiCi0KLSN+IG1zZ2lkICJVc2FnZTogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgotI34gbXNnc3RyICIiCi0jfiAiVXRpbGl6YXJlOiBnc3QteG1sbGF1bmNoIDxmaciZaWVyLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbG9hcmUgLi4uIF1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiRVJPQVJFOiBwcmVsdWNyYXJlYSBmaciZaWVydWx1aSB4bWwg4oCeJXPigJ0gYSBlyJl1YXQuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJFUk9BUkU6IG5pY2l1biBlbGVtZW50IGRlIHByaW0gbml2ZWwgYWwgbGluaWVpIGRlIGFzYW1ibGFyZSDDrm4gZmnImWllcnVsICIKLSN+ICLigJ4lc+KAnS5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkFWRVJUSVNNRU5UOiBkb2FyIHVuIGVsZW1lbnQgZGUgbml2ZWwgZGUgdsOicmYgZXN0ZSBzdXBvcnRhdCDDrm4gYWNlc3QgIgotI34gIm1vbWVudC5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiRVJPQVJFOiBudSBzZSBwb2F0ZSBhbmFsaXphIGFyZ3VtZXR1bCAlZCBhbCBsaW5pZWkgZGUgY29tYW5kxIM6ICVzXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICJBVkVSVElTTUVOVDogZWxlbWVudHVsIGN1IG51bWVsZSDigJ4lc+KAnSBudSBhIGZvc3QgZ8SDc2l0LlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiIgotI34gIlNhbHZhcmVhIHVuZWkgcmVwcmV6ZW50xINyaSB4bWwgYSBsaW5pZWkgZGUgYXNhbWJsYXJlIMOubiBGSciYSUVSIMiZaSBpZciZaXJlIgotCi0jfiBtc2dpZCAiRklMRSIKLSN+IG1zZ3N0ciAiRknImElFUiIKLQotI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKLSN+IG1zZ3N0ciAiTnUgaW5zdGFsYSBydXRpbmUgZGUgdHJhdGFyZSBhIHNlbW5hbHVsdWkgcGVudHJ1IFNJR1VTUjEgyJlpIFNJR1VTUjIiCmRpZmYgLS1naXQgYS9wby9ydS5nbW8gYi9wby9ydS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZjc5OWUuLjAwMDAwMDAKLS0tIGEvcG8vcnUuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vcnUucG8gYi9wby9ydS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg4YjU0Zi4uMDAwMDAwMAotLS0gYS9wby9ydS5wbworKysgL2Rldi9udWxsCkBAIC0xLDE0NDEgKzAsMCBAQAotIyBUcmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIgbWVzc2FnZXMgdG8gUnVzc2lhbgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBQZXRlciBBc3Rha2hvdiA8YXN0YWtob3ZwQG1haWwucnU+LCAyMDA1LgotIyDQkNGA0YLRkdC8INCf0L7Qv9C+0LIgPGFydGZ3b0BnbWFpbC5jb20+LCAyMDA5LgotIyBQYXZlbCBNYXJ5YW5vdiA8YWNpZF9qYWNrQHVrci5uZXQ+LCAyMDA5LgotIyBZdXJpIEtvemxvdiA8eXVyYXlAa29teWFraW5vLnJ1PiwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNi4KLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAxLjcuOTBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMy0wNSAwODo0MSswMzAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBZdXJpIEtvemxvdiA8eXVyYXlAa29teWFraW5vLnJ1PlxuIgotIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW4gPGdudUBkMDcucnU+XG4iCi0iTGFuZ3VhZ2U6IHJ1XG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9biUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgotIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyO1xuIgotIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxLjVcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAi0JLRi9Cy0LXRgdGC0Lgg0LLQtdGA0YHQuNGOIEdTdHJlYW1lciIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICLQodC00LXQu9Cw0YLRjCDQstGB0LUg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjRjyDRhNCw0YLQsNC70YzQvdGL0LzQuCIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICLQktGL0LLQtdGB0YLQuCDQtNC+0YHRgtGD0L/QvdGL0LUg0LrQsNGC0LXQs9C+0YDQuNC4INC+0YLQu9Cw0LTQutC4INC4INCy0YvQudGC0LgiCi0KLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSLQo9GA0L7QstC10L3RjCDQvtGC0LvQsNC00LrQuCDQv9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgiAxICjRgtC+0LvRjNC60L4g0L7RiNC40LHQutC4KSDQtNC+IDkgKNCy0YHRkSksINC40LvQuCAwICjQvdC40YfQtdCz0L4gIgotItC90LUg0L/QtdGH0LDRgtCw0YLRjCkiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAi0KPQoNCe0JLQldCd0KwiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0i0KHQv9C40YHQvtC6INC/0LDRgCwg0YDQsNC30LTQtdC70ZHQvdC90YvRhSDQt9Cw0L/Rj9GC0YvQvNC4LCDQsiDRhNC+0YDQvNCw0YLQtSDCq9C40LzRj1/QutCw0YLQtdCz0L7RgNC40Lg60YPRgNC+0LLQtdC90YzCuyDQtNC70Y8gIgotItGD0YHRgtCw0L3QvtCy0LrQuCDRg9GA0L7QstC90LXQuSDQvtGC0LTQtdC70YzQvdGL0YUg0LrQsNGC0LXQs9C+0YDQuNC5LiDQn9GA0LjQvNC10YA6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgItCh0J/QmNCh0J7QmiIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICLQntGC0LrQu9GO0YfQuNGC0Ywg0YbQstC10YLQvtCy0YPRjiDRgNCw0LfQvNC10YLQutGDINC/0YDQuCDQstGL0LLQvtC00LUg0L7RgtC70LDQtNC+0YfQvdGL0YUg0YHQvtC+0LHRidC10L3QuNC5IgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLSLQmNC30LzQtdC90LjRgtGMINGG0LLQtdGC0L7QstC+0Lkg0YDQtdC20LjQvCDQvtGC0LvQsNC00L7Rh9C90L7Qs9C+INCy0YvQstC+0LTQsC4g0JLQvtC30LzQvtC20L3Ri9C1INGA0LXQttC40LzRizogb2ZmLCBvbiwgIgotImRpc2FibGUsIGF1dG8sIHVuaXgiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAi0J7RgtC60LvRjtGH0LjRgtGMINC+0YLQu9Cw0LTQutGDIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgItCS0YvQstC+0LTQuNGC0Ywg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjiDQv9GA0Lgg0LfQsNCz0YDRg9C30LrQtSDQvNC+0LTRg9C70LXQuSIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgItCh0L/QuNGB0L7QuiDQv9GD0YLQtdC5INC/0L7QuNGB0LrQsCDQvNC+0LTRg9C70LXQuSwg0YDQsNC30LTQtdC70ZHQvdC90YvRhSDQtNCy0L7QtdGC0L7Rh9C40Y/QvNC4IgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgItCf0KPQotCYIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotItCh0L/QuNGB0L7QuiDQvNC+0LTRg9C70LXQuSAo0YDQsNC30LTQtdC70Y/QtdC80YvRhSDQt9Cw0L/Rj9GC0YvQvNC4KSDQtNC70Y8g0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QvtC5INC30LDQs9GA0YPQt9C60LgsICIKLSLQtNC+0L/QvtC70L3Rj9GO0YnQuNC5INGB0L/QuNGB0L7Quiwg0LrQvtGC0L7RgNGL0Lkg0YHQvtC00LXRgNC20LjRgtGB0Y8g0LIg0L/QtdGA0LXQvNC10L3QvdC+0Lkg0YHRgNC10LTRiyBHU1RfUExVR0lOX1BBVEgiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICLQnNCe0JTQo9Cb0JgiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICLQntGC0LrQu9GO0YfQuNGC0Ywg0L/QtdGA0LXRhdCy0LDRgiDQvtGI0LjQsdC+0Log0YHQtdCz0LzQtdC90YLQsNGG0LjQuCDQv9Cw0LzRj9GC0Lgg0LLQviDQstGA0LXQvNGPINC30LDQs9GA0YPQt9C60Lgg0LzQvtC00YPQu9C10LkiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAi0J7RgtC60LvRjtGH0LjRgtGMINC+0LHQvdC+0LLQu9C10L3QuNC1INGA0LXQtdGB0YLRgNCwIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotItCe0YLQutC70Y7Rh9C40YLRjCDRgdC+0LfQtNCw0L3QuNC1INCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90L7Qs9C+INC/0YDQvtGG0LXRgdGB0LAsINC/0L7QutCwINC/0YDQvtC40YHRhdC+0LTQuNGCINGB0LrQsNC90LjRgNC+0LLQsNC90LjQtSAiCi0i0YDQtdC10YHRgtGA0LAiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgNGLIEdTdHJlYW1lciIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0L/QsNGA0LDQvNC10YLRgNGLIEdTdHJlYW1lciIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgItCe0LHQvdCw0YDRg9C20LXQvdCwINC+0YjQuNCx0LrQsCDQsiDQsdC40LHQu9C40L7RgtC10LrQtSDRj9C00YDQsCBHU3RyZWFtZXIuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSLQoNCw0LfRgNCw0LHQvtGC0YfQuNC60LggR1N0cmVhbWVyINCx0YvQu9C4INGB0LvQuNGI0LrQvtC8INC70LXQvdC40LLRi9C80LgsINGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDQutC+0LQg0L7QsdGA0LDQsdC+0YLQutC4ICIKLSLQtNC70Y8g0Y3RgtC+0Lkg0L7RiNC40LHQutC4LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAgR1N0cmVhbWVyOiDRhNGD0L3QutGG0LjRjyDQvdC1INGA0LXQsNC70LjQt9C+0LLQsNC90LAuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0i0J7RiNC40LHQutCwIEdTdHJlYW1lcjog0L3QtSDRg9C00LDQu9C+0YHRjCDQuNC30LzQtdC90LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQuCDQvdC10LrQvtGC0L7RgNGL0Lwg0Y3Qu9C10LzQtdC90YLQsNC8INC90LUgIgotItGD0LTQsNC70L7RgdGMINC/0L7QvNC10YHRgtC40YLRjCDQv9GA0LDQstC40LvRjNC90L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUg0L4g0L/RgNC40YfQuNC90L7QuSDQvtGI0LjQsdC60LguIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YEg0LrQvtC90YLQsNC60YLQvdGL0Lwg0LPQvdC10LfQtNC+0LwuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YEg0L3QuNGC0Y/QvNC4LiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YHQstGP0LfQutC4INGN0LvQtdC80LXQvdGC0L7Qsi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvNCwINGBINGB0L7QsdGL0YLQuNGP0LzQuC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC+0YjQuNCx0LrQsCDQv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjRjy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YEg0LLQvtC30LzQvtC20L3QvtGB0YLRj9C80LguIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0YEg0YLQtdCz0LDQvNC4LiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgItCSINCy0LDRiNC10Lkg0YPRgdGC0LDQvdC+0LLQutC1IEdTdHJlYW1lciDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINC80L7QtNGD0LvRjC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICLQntGI0LjQsdC60LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvNCwINGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNC4LiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0i0J/RgNC40LvQvtC20LXQvdC40LUg0L/Ri9GC0LDQtdGC0YHRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YTRg9C90LrRhtC40Y4gR1N0cmVhbWVyLCDQutC+0YLQvtGA0LDRjyDQsdGL0LvQsCDQstGL0LrQu9GO0YfQtdC90LAuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICLQntCx0L3QsNGA0YPQttC10L3QsCDQvtGI0LjQsdC60LAg0LIg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQsdC40LHQu9C40L7RgtC10LrQtSBHU3RyZWFtZXIuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjCDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Rg9GOINCx0LjQsdC70LjQvtGC0LXQutGDLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQutGA0YvRgtGMINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGD0Y4g0LHQuNCx0LvQuNC+0YLQtdC60YMuIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDRgdGC0YDQvtC40YLRjCDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Rg9GOINCx0LjQsdC70LjQvtGC0LXQutGDLiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDQutC+0LTQuNGA0L7QstCw0L3QuNC4LiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICLQntCx0L3QsNGA0YPQttC10L3QsCDQvtCx0YnQsNGPINC+0YjQuNCx0LrQsCDRgNC10YHRg9GA0YHQsCBHU3RyZWFtZXIuIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAi0KDQtdGB0YPRgNGBINC90LUg0L3QsNC50LTQtdC9LiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgItCg0LXRgdGD0YDRgSDQt9Cw0L3Rj9GCINC40LvQuCDQvdC10LTQvtGB0YLRg9C/0LXQvS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YDQtdGB0YPRgNGBINC00LvRjyDRh9GC0LXQvdC40Y8uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGA0LXRgdGD0YDRgSDQtNC70Y8g0LfQsNC/0LjRgdC4LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRgNC10YHRg9GA0YEg0LTQu9GPINGH0YLQtdC90LjRjyDQuCDQt9Cw0L/QuNGB0LguIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrRgNGL0YLRjCDRgNC10YHRg9GA0YEuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40Lcg0YDQtdGB0YPRgNGB0LAuIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINCyINGA0LXRgdGD0YDRgS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7QuNC30LLQtdGB0YLQuCDQv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjQtSDQsiDRgNC10YHRg9GA0YHQtS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtC40LfQstC10YHRgtC4INGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGOINC00LvRjyDRgNC10YHRg9GA0YHQsC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGML9GD0YHRgtCw0L3QvtCy0LjRgtGMINC/0LDRgNCw0LzQtdGC0YDRiyDRgNC10YHRg9GA0YHQsC4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgItCSINGA0LXRgdGD0YDRgdC1INC90LXRgiDRgdCy0L7QsdC+0LTQvdC+0LPQviDQvNC10YHRgtCwLiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LXQv9GA0LDQstC+0LzQvtGH0L3Ri9C5INC00L7RgdGC0YPQvyDQuiDRgNC10YHRg9GA0YHRgy4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgItCe0LHQvdCw0YDRg9C20LXQvdCwINC+0LHRidCw0Y8g0L7RiNC40LHQutCwINC/0L7RgtC+0LrQsCBHU3RyZWFtZXIuIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0i0JIg0Y3Qu9C10LzQtdC90YLQtSDQvdC1INGA0LXQsNC70LjQt9C+0LLQsNC90LAg0L7QsdGA0LDQsdC+0YLQutCwINGN0YLQvtCz0L4g0L/QvtGC0L7QutCwLiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0YHQvtC+0LHRidC40YLQtSDQvtCxICIKLSLQvtGI0LjQsdC60LUuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0YLQuNC/INC/0L7RgtC+0LrQsC4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgItCi0LjQvyDQv9C+0YLQvtC60LAg0L7RgtC70LjRh9Cw0LXRgtGB0Y8g0L7RgiDQvtCx0YDQsNCx0LDRgtGL0LLQsNC10LzQvtCz0L4g0Y3RgtC40Lwg0Y3Qu9C10LzQtdC90YLQvtC8LiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAi0J3QtdGCINC60L7QtNC10LrQsCDQtNC70Y8g0L7QsdGA0LDQsdC+0YLQutC4INC00LDQvdC90L7Qs9C+INGC0LjQv9CwINC/0L7RgtC+0LrQsC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQtdC60L7QtNC40YDQvtCy0LDRgtGMINC/0L7RgtC+0LouIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQutC+0LTQuNGA0L7QstCw0YLRjCDQv9C+0YLQvtC6LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00LXQvNGD0LvRjNGC0LjQv9C70LXQutGB0LjRgNC+0LLQsNGC0Ywg0L/QvtGC0L7Qui4iCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LzRg9C70YzRgtC40L/Qu9C10LrRgdC40YDQvtCy0LDRgtGMINC/0L7RgtC+0LouIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAi0J/QvtGC0L7QuiDQuNC80LXQtdGCINC90LXQstC10YDQvdGL0Lkg0YTQvtGA0LzQsNGCLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICLQn9C+0YLQvtC6INC30LDRiNC40YTRgNC+0LLQsNC9INC4INC10LPQviDRgNCw0YHRiNC40YTRgNC+0LLQutCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjy4iCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0i0J/QvtGC0L7QuiDQt9Cw0YjQuNGE0YDQvtCy0LDQvSDQuCDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNGB0YjQuNGE0YDQvtCy0LDQvSwg0L/QvtGC0L7QvNGDINGH0YLQviDQvdC1INC/0YDQtdC00L7RgdGC0LDQstC70LXQvSAiCi0i0L/QvtC00YXQvtC00Y/RidC40Lkg0LrQu9GO0YcuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgItCd0LXRgiDRgdC+0L7QsdGJ0LXQvdC40Y8g0L7QsSDQvtGI0LjQsdC60LUg0LTQu9GPINC00L7QvNC10L3QsCAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAi0J3QtdGCINGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDRgdC+0L7QsdGJ0LXQvdC40Y8g0L7QsSDQvtGI0LjQsdC60LUg0LTQu9GPINC00L7QvNC10L3QsCAlcyDQuCDQutC+0LTQsCAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgItCS0YvQsdGA0LDQvdC90YvQtSDRh9Cw0YHRiyDQvdC1INC80L7Qs9GD0YIg0LHRi9GC0Ywg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdGLINCyINC60L7QvdCy0LXQudC10YDQtS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/QuNGB0Lgg0LrRjdGI0LAg0YDQtdC10YHRgtGA0LAg0LIgJXM6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgItC90LDQt9Cy0LDQvdC40LUiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICLQvtCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10LzQvtC1INC90LDQt9Cy0LDQvdC40LUiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAi0L3QsNC30LLQsNC90LjQtSAo0LTQu9GPINGB0L7RgNGC0LjRgNC+0LLQutC4KSIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgItC+0LHRi9GH0L3QviDQuNGB0L/QvtC70YzQt9GD0LXQvNC+0LUg0L3QsNC30LLQsNC90LjQtSAo0LTQu9GPINGB0L7RgNGC0LjRgNC+0LLQutC4KSIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAi0LjRgdC/0L7Qu9C90LjRgtC10LvRjCIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAi0LvQuNGG0L4v0LvQuNGG0LAsINC+0YLQstC10YLRgdGC0LLQtdC90L3Ri9C1INC30LAg0LfQsNC/0LjRgdGMIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICLQuNGB0L/QvtC70L3QuNGC0LXQu9GMICjQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60LgpIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLQu9C40YbQvi/Qu9C40YbQsCwg0L7RgtCy0LXRgtGB0YLQstC10L3QvdGL0LUg0LfQsCDQt9Cw0L/QuNGB0YwgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCi0KLW1zZ2lkICJhbGJ1bSIKLW1zZ3N0ciAi0LDQu9GM0LHQvtC8IgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgItCw0LvRjNCx0L7QvCwg0YHQvtC00LXRgNC20LDRidC40Lkg0Y3RgtC4INC00LDQvdC90YvQtSIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICLQsNC70YzQsdC+0LwgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi0LDQu9GM0LHQvtC8LCDRgdC+0LTQtdGA0LbQsNGJ0LjQuSDRjdGC0Lgg0LTQsNC90L3Ri9C1ICjQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60LgpIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICLQuNGB0L/QvtC70L3QuNGC0LXQu9GMINCw0LvRjNCx0L7QvNCwIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICLQmNGB0L/QvtC70L3QuNGC0LXQu9GMINCy0YHQtdCz0L4g0LDQu9GM0LHQvtC80LAsINC60L7RgtC+0YDRi9C5INC00L7Qu9C20LXQvSDQvtGC0L7QsdGA0LDQttCw0YLRjNGB0Y8iCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgItC40YHQv9C+0LvQvdC40YLQtdC70Ywg0LDQu9GM0LHQvtC80LAgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgItCY0YHQv9C+0LvQvdC40YLQtdC70Ywg0LLRgdC10LPQviDQsNC70YzQsdC+0LzQsCwg0L/QviDQutC+0YLQvtGA0L7QvNGDINC90YPQttC90L4g0LLRi9C/0L7Qu9C90Y/RgtGMINGB0L7RgNGC0LjRgNC+0LLQutGDIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAi0LTQsNGC0LAiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgItC00LDRgtCwINGB0L7Qt9C00LDQvdC40Y8g0Y3RgtC40YUg0LTQsNC90L3Ri9GFICjQutCw0Log0YHRgtGA0YPQutGC0YPRgNCwIEdEYXRlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICLQtNCw0YLQsC3QstGA0LXQvNGPIgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICLQtNCw0YLQsCDQuCDQstGA0LXQvNGPINGB0L7Qt9C00LDQvdC40Y8g0Y3RgtC40YUg0LTQsNC90L3Ri9GFICjQutCw0Log0YHRgtGA0YPQutGC0YPRgNCwIEdzdERhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICLQttCw0L3RgCIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICLQttCw0L3RgCwg0Log0LrQvtGC0L7RgNC+0LzRgyDQvtGC0L3QvtGB0Y/RgtGB0Y8g0Y3RgtC4INC00LDQvdC90YvQtSIKLQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgItC60L7QvNC80LXQvdGC0LDRgNC40LkiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAi0LrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDRjdGC0LjQvCDQtNCw0L3QvdGL0Lwg0LIg0YHQstC+0LHQvtC00L3QvtC5INGE0L7RgNC80LUiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICLQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9C5INC60L7QvNC80LXQvdGC0LDRgNC40LkiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSLQutC+0LzQvNC10L3RgtCw0YDQuNC5INC6INGN0YLQuNC8INC00LDQvdC90YvQvCDQsiDRgdCy0L7QsdC+0LTQvdC+0Lkg0YTQvtGA0LzQtSDQsiDQstC40LTQtSDQutC70Y7Rhz3Qt9C90LDRh9C10L3QuNC1INC40LvQuCAiCi0i0LrQu9GO0YdbZW5dPdC30L3QsNGH0LXQvdC40LUiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgItC90L7QvNC10YAg0LTQvtGA0L7QttC60LgiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAi0L3QvtC80LXRgCDQtNC+0YDQvtC20LrQuCDQstC90YPRgtGA0Lgg0LrQvtC70LvQtdC60YbQuNC4IgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgItC60L7Qu9C40YfQtdGB0YLQstC+INC00L7RgNC+0LbQtdC6IgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAi0LrQvtC70LjRh9C10YHRgtCy0L4g0LTQvtGA0L7QttC10Log0LLQvdGD0YLRgNC4INC60L7Qu9C70LXQutGG0LjQuCwg0Log0LrQvtGC0L7RgNC+0Lkg0L/RgNC40L3QsNC00LvQtdC20LjRgiDRjdGC0LAg0LTQvtGA0L7QttC60LAiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAi0L3QvtC80LXRgCDQtNC40YHQutCwIgotCi1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAi0L3QvtC80LXRgCDQtNC40YHQutCwINCyINC60L7Qu9C70LXQutGG0LjQuCIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgItC60L7Qu9C40YfQtdGB0YLQstC+INC00LjRgdC60L7QsiIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQviDQtNC40YHQutC+0LIg0LIg0LrQvtC70LvQtdC60YbQuNC4LCDQuiDQutC+0YLQvtGA0L7QuSDQv9GA0LjQvdCw0LTQu9C10LbQuNGCINGN0YLQvtGCINC00LjRgdC6IgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgItC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LUiCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotItCY0YHRgtC+0YfQvdC40Log0LTQsNC90L3Ri9GFINCyINCy0LjQtNC1IFVSSSAo0LDQtNGA0LXRgSDRgNCw0LfQvNC10YnQtdC90LjRjyDQvtGA0LjQs9C40L3QsNC70YzQvdC+0LPQviDRhNCw0LnQu9CwINC40LvQuCDQv9C+0YLQvtC60LApIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgItC00L7QvNCw0YjQvdGP0Y8g0YHRgtGA0LDQvdC40YbQsCIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLSLQlNC+0LzQsNGI0L3Rj9GPINGB0YLRgNCw0L3QuNGG0LAg0Y3RgtC+0LPQviDQvdC+0YHQuNGC0LXQu9GPICjRgi7QtS4g0YHRgtGA0LDQvdC40YbQsCDQuNGB0L/QvtC70L3QuNGC0LXQu9GPINC40LvQuCDRhNC40LvRjNC80LApIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgItC+0L/QuNGB0LDQvdC40LUiCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgItC60L7RgNC+0YLQutC+0LUg0L7Qv9C40YHQsNC90LjQtSDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC00LDQvdC90YvRhSIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgItCy0LXRgNGB0LjRjyIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICLQstC10YDRgdC40Y8g0Y3RgtC40YUg0LTQsNC90L3Ri9GFIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSDigJQg0YHQvC4gaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAi0L7RgNCz0LDQvdC40LfQsNGG0LjRjyIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAi0LDQstGC0L7RgNGB0LrQuNC1INC/0YDQsNCy0LAiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INC+0LEg0LDQstGC0L7RgNGB0LrQuNGFINC/0YDQsNCy0LDRhSDQvdCwINGN0YLQuCDQtNCw0L3QvdGL0LUiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJVUkkg0LDQstGC0L7RgNGB0LrQuNGFINC/0YDQsNCyIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkg0YPQstC10LTQvtC80LvQtdC90LjRjyDQvtCxINCw0LLRgtC+0YDRgdC60LjRhSDQv9GA0LDQstCw0YUiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICLQmtC+0LTQuNGA0L7QstCw0L3QuNC1INCy0YvQv9C+0LvQvdC10L3QviIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgItCY0LzRjyDRh9C10LvQvtCy0LXQutCwINC40LvQuCDQvdCw0LfQstCw0L3QuNC1INC+0YDQs9Cw0L3QuNC30LDRhtC40LgsINCy0YvQv9C+0LvQvdGP0LLRiNC10Lkg0LrQvtC00LjRgNC+0LLQutGDIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAi0LrQvtC90YLQsNC60YIiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICLQutC+0L3RgtCw0LrRgtC90LDRjyDQuNC90YTQvtGA0LzQsNGG0LjRjyIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgItC70LjRhtC10L3Qt9C40Y8iCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgItC70LjRhtC10L3Qt9C40Y8g0L3QsCDRjdGC0Lgg0LTQsNC90L3Ri9C1IgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgIlVSSSDQu9C40YbQtdC90LfQuNC4IgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkg0LvQuNGG0LXQvdC30LjQuCDQvdCwINGN0YLQuCDQtNCw0L3QvdGL0LUiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgItC40YHQv9C+0LvQvdC40YLQtdC70YwiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAi0LvQuNGG0L4v0LvQuNGG0LAsINC40YHQv9C+0LvQvdGP0Y7RidC40LUg0LrQvtC80L/QvtC30LjRhtC40Y4iCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAi0LrQvtC80L/QvtC30LjRgtC+0YAiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgItC70LjRhtC+L9C70LjRhtCwLCDQvdCw0L/QuNGB0LDQstGI0LjQtSDQutC+0LzQv9C+0LfQuNGG0LjRjiIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAi0LTQuNGA0LjQttGR0YAiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgItC00LjRgNC40LbRkdGAL9CyINC+0LHRgNCw0LHQvtGC0LrQtSIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICLQtNC70LjRgtC10LvRjNC90L7RgdGC0YwiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAi0LTQu9C40YLQtdC70YzQvdC+0YHRgtGMINCyINC10LTQuNC90LjRhtCw0YUgR1N0cmVhbWVyICjQsiDQvdCw0L3QvtGB0LXQutGD0L3QtNCw0YUpIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgItC60L7QtNC10LoiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgItC60L7QtNC10LosINCyINC60L7RgtC+0YDQvtC8INGB0L7RhdGA0LDQvdC10L3RiyDQtNCw0L3QvdGL0LUiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAi0LLQuNC00LXQvi3QutC+0LTQtdC6IgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLQutC+0LTQtdC6LCDQsiDQutC+0YLQvtGA0L7QvCDRgdC+0YXRgNCw0L3QtdC90Ysg0LLQuNC00LXQvi3QtNCw0L3QvdGL0LUiCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAi0LDRg9C00LjQvi3QutC+0LTQtdC6IgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLQutC+0LTQtdC6LCDQsiDQutC+0YLQvtGA0L7QvCDRgdC+0YXRgNCw0L3QtdC90Ysg0LDRg9C00LjQvi3QtNCw0L3QvdGL0LUiCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAi0LrQvtC00LXQuiDRgdGD0LHRgtC40YLRgNC+0LIiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgItC60L7QtNC10LosINCyINC60L7RgtC+0YDQvtC8INGF0YDQsNC90Y/RgtGB0Y8g0YHRg9Cx0YLQuNGC0YDRiyIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgItGE0L7RgNC80LDRgiDQutC+0L3RgtC10LnQvdC10YDQsCIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLRhNC+0YDQvNCw0YIg0LrQvtC90YLQtdC50L3QtdGA0LAsINCyINC60L7RgtC+0YDQvtC8INGF0YDQsNC90Y/RgtGB0Y8g0LTQsNC90L3Ri9C1IgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAi0LHQuNGC0YDQtdC50YIiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLRgtC+0YfQvdGL0Lkg0LjQu9C4INGB0YDQtdC00L3QuNC5INCx0LjRgtGA0LXQudGCICjQsdC40YIv0YEpIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICLQvdC+0LzQuNC90LDQu9GM0L3Ri9C5INCx0LjRgtGA0LXQudGCIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAi0L3QvtC80LjQvdCw0LvRjNC90YvQuSDQsdC40YLRgNC10LnRgiAo0LHQuNGCL9GBKSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAi0LzQuNC90LjQvNCw0LvRjNC90YvQuSDQsdC40YLRgNC10LnRgiIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgItC80LjQvdC40LzQsNC70YzQvdGL0Lkg0LHQuNGC0YDQtdC50YIgKNCx0LjRgi/RgSkiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgItC80LDQutGB0LjQvNCw0LvRjNC90YvQuSDQsdC40YLRgNC10LnRgiIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgItC80LDQutGB0LjQvNCw0LvRjNC90YvQuSDQsdC40YLRgNC10LnRgiAo0LHQuNGCL9GBKSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgItC60L7QtNC40YDQvtCy0YnQuNC6IgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0LrQvtC00LjRgNC+0LLRidC40LosINC40YHQv9C+0LvRjNC30YPQtdC80YvQuSDQtNC70Y8g0LrQvtC00LjRgNC+0LLQsNC90LjRjyDQv9C+0YLQvtC60LAiCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgItCy0LXRgNGB0LjRjyDQutC+0LTQuNGA0L7QstGJ0LjQutCwIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0LLQtdGA0YHQuNGPINC60L7QtNC40YDQvtCy0YnQuNC60LAsINC40YHQv9C+0LvRjNC30YPQtdC80L7Qs9C+INC00LvRjyDQutC+0LTQuNGA0L7QstCw0L3QuNGPINC/0L7RgtC+0LrQsCIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAi0YHQtdGA0LjQudC90YvQuSDQvdC+0LzQtdGAIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAi0YHQtdGA0LjQudC90YvQuSDQvdC+0LzQtdGAINC00L7RgNC+0LbQutC4IgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICLRg9GA0L7QstC10L3RjCBSZXBsYXlHYWluINC00LvRjyDQtNC+0YDQvtC20LrQuCIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgItGD0YDQvtCy0LXQvdGMINGD0YHQuNC70LXQvdC40Y8g0LTQvtGA0L7QttC60Lgg0LIg0LTQkSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAi0L/QuNC6IFJlcGxheUdhaW4g0LTQu9GPINC00L7RgNC+0LbQutC4IgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgItC/0LjQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUg0YHQuNCz0L3QsNC70LAg0LTQu9GPINC00L7RgNC+0LbQutC4IgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICLRg9GA0L7QstC10L3RjCBSZXBsYXlHYWluINC00LvRjyDQsNC70YzQsdC+0LzQsCIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgItGD0YDQvtCy0LXQvdGMINGD0YHQuNC70LXQvdC40Y8g0LDQu9GM0LHQvtC80LAg0LIg0LTQkSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAi0L/QuNC6IFJlcGxheUdhaW4g0LTQu9GPINCw0LvRjNCx0L7QvNCwIgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgItC/0LjQutC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUg0YHQuNCz0L3QsNC70LAg0LTQu9GPINCw0LvRjNCx0L7QvNCwIgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgItGN0YLQsNC70L7QvdC90YvQuSDRg9GA0L7QstC10L3RjCBSZXBsYXlHYWluIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAi0Y3RgtCw0LvQvtC90L3Ri9C5INGD0YDQvtCy0LXQvdGMINC00LvRjyDQutC+0YDRgNC10LrRgtC40YDQvtCy0LrQuCDQs9GA0L7QvNC60L7RgdGC0Lgg0LTQvtGA0L7QttC60Lgg0Lgg0LDQu9GM0LHQvtC80LAiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICLQutC+0LQg0Y/Qt9GL0LrQsCIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgItC60L7QtCDRj9C30YvQutCwINC00LvRjyDRjdGC0L7Qs9C+INC/0L7RgtC+0LrQsCDRgdC+0LPQu9Cw0YHQvdC+IElTTy02MzktMSDQuNC70LggSVNPLTYzOS0yIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAi0L3QsNC30LLQsNC90LjQtSDRj9C30YvQutCwIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgItC90LDQt9Cy0LDQvdC40LUg0Y/Qt9GL0LrQsCDQsiDQv9GA0L7QuNC30LLQvtC70YzQvdC+0Lwg0YTQvtGA0LzQsNGC0LUg0Y3RgtC+0LPQviDQv9C+0YLQvtC60LAg0LIiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAi0LjQt9C+0LHRgNCw0LbQtdC90LjQtSIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgItC40LfQvtCx0YDQsNC20LXQvdC40LUsINGB0LLRj9C30LDQvdC90L7QtSDRgSDRjdGC0LjQvCDQv9C+0YLQvtC60L7QvCIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAi0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDQtNC70Y8g0L/RgNC10LTQv9GA0L7RgdC80L7RgtGA0LAiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgItC40LfQvtCx0YDQsNC20LXQvdC40LUg0LTQu9GPINC/0YDQtdC00L/RgNC+0YHQvNC+0YLRgNCwLCDRgdCy0Y/Qt9Cw0L3QvdC+0LUg0YEg0Y3RgtC40Lwg0L/QvtGC0L7QutC+0LwiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICLQstC70L7QttC10L3QuNC1IgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0YTQsNC50LssINCy0LvQvtC20LXQvdC90YvQuSDQsiDRjdGC0L7RgiDQv9C+0YLQvtC6IgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAi0YPQtNCw0YDQvtCyINCyINC80LjQvdGD0YLRgyIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICLRh9C40YHQu9C+INGD0LTQsNGA0L7QsiDQsiDQvNC40L3Rg9GC0YMg0LTQu9GPINCw0YPQtNC40L4iCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAi0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwIgotCi1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgItGA0LDQt9C00LXQu9GP0LXQvNGL0LUg0LfQsNC/0Y/RgtGL0LzQuCDQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LAsINC+0L/QuNGB0YvQstCw0Y7RidC40LUg0YHQvtC00LXRgNC20LjQvNC+0LUiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAi0LPQtdC+0LPRgC4g0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQtSIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0i0L7Qv9C40YHQsNGC0LXQu9GM0L3QvtC1INC90LDQt9Cy0LDQvdC40LUg0LzQtdGB0YLQvdC+0YHRgtC4LCDQsiDQutC+0YLQvtGA0L7QuSDQv9GA0L7QuNC30LLQvtC00LjQu9Cw0YHRjCDQt9Cw0L/QuNGB0Ywg0LjQu9C4ICIKLSLQv9GA0L7QuNC30LLQvtC00YHRgtCy0L4g0LTQsNC90L3Ri9GFIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICLQs9C10L7Qs9GALiDRiNC40YDQvtGC0LAiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSLQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQsNGPINGI0LjRgNC+0YLQsCDQvNC10YHRgtC90L7RgdGC0LgsINCyINC60L7RgtC+0YDQvtC5INC/0YDQvtC40LfQstC+0LTQuNC70LDRgdGMINC30LDQv9C40YHRjCDQuNC70LggIgotItC/0YDQvtC40LfQstC+0LTRgdGC0LLQviDQtNCw0L3QvdGL0YUsINCyINCz0YDQsNC00YPRgdCw0YUg0LIg0YHQuNGB0YLQtdC80LUg0LrQvtC+0YDQtNC40L3QsNGCIFdHUzg0ICgwINC90LAg0Y3QutCy0LDRgtC+0YDQtSwgIgotItC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9C1INC30L3QsNGH0LXQvdC40Y8g0LTQu9GPINGO0LbQvdGL0YUg0YjQuNGA0L7RgikiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICLQs9C10L7Qs9GALiDQtNC+0LvQs9C+0YLQsCIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSLQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQsNGPINC00L7Qu9Cz0L7RgtCwINC80LXRgdGC0L3QvtGB0YLQuCwg0LIg0LrQvtGC0L7RgNC+0Lkg0L/RgNC+0LjQt9Cy0L7QtNC40LvQsNGB0Ywg0LfQsNC/0LjRgdGMINC40LvQuCAiCi0i0L/RgNC+0LjQt9Cy0L7QtNGB0YLQstC+INC00LDQvdC90YvRhSwg0LIg0LPRgNCw0LTRg9GB0LDRhSDQsiDRgdC40YHRgtC10LzQtSDQutC+0L7RgNC00LjQvdCw0YIgV0dTODQgKDAg0L3QsCDQk9GA0LjQvdCy0LjRh9GB0LrQvtC8ICIKLSLQvNC10YDQuNC00LjQsNC90LUsINC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9C1INC30L3QsNGH0LXQvdC40Y8g0LTQu9GPINC30LDQv9Cw0LTQvdGL0YUg0LTQvtC70LPQvtGCKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgItCz0LXQvtCz0YAuINCy0YvRgdC+0YLQsCIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSLQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQsNGPINCy0YvRgdC+0YLQsCDQvNC10YHRgtC90L7RgdGC0LgsINCyINC60L7RgtC+0YDQvtC5INC/0YDQvtC40LfQstC+0LTQuNC70LDRgdGMINC30LDQv9C40YHRjCDQuNC70LggIgotItC/0YDQvtC40LfQstC+0LTRgdGC0LLQviDQtNCw0L3QvdGL0YUsINCyINC80LXRgtGA0LDRhSDRgdC+0LPQu9Cw0YHQvdC+INGB0LjRgdGC0LXQvNC1INC60L7QvtGA0LTQuNC90LDRgiBXR1M4NCAoMCDQvdCwINGB0YDQtdC00L3QtdC8ICIKLSLRg9GA0L7QstC90LUg0LzQvtGA0Y8pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgItGB0YLRgNCw0L3QsCIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0i0YHRgtGA0LDQvdCwICjQvdCwINCw0L3Qs9C70LjQudGB0LrQvtC8KSwg0LIg0LrQvtGC0L7RgNC+0Lkg0L/RgNC+0LjQt9Cy0L7QtNC40LvQsNGB0Ywg0LfQsNC/0LjRgdGMINC40LvQuCDQv9GA0L7QuNC30LLQvtC00YHRgtCy0L4gIgotItC00LDQvdC90YvRhSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICLQs9C+0YDQvtC0IgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLSLQs9C+0YDQvtC0ICjQvdCwINCw0L3Qs9C70LjQudGB0LrQvtC8KSwg0LIg0LrQvtGC0L7RgNC+0Lwg0L/RgNC+0LjQt9Cy0L7QtNC40LvQsNGB0Ywg0LfQsNC/0LjRgdGMINC40LvQuCDQv9GA0L7QuNC30LLQvtC00YHRgtCy0L4g0LTQsNC90L3Ri9GFIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICLQtNC+0L8uINC6INC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40Y4iCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotItC80LXRgdGC0L4g0LIg0LPQvtGA0L7QtNC1LCDQsiDQutC+0YLQvtGA0L7QvCDQv9GA0L7QuNC30LLQvtC00LjQu9Cw0YHRjCDQt9Cw0L/QuNGB0Ywg0LjQu9C4INC/0YDQvtC40LfQstC+0LTRgdGC0LLQviDQtNCw0L3QvdGL0YUgIgotIijQvdCw0L/RgNC40LzQtdGALCDRgNCw0LnQvtC9KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICLQvtGI0LjQsdC60LAg0LIg0LPQtdC+0LPRgC4g0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQuCIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICLQvtC20LjQtNCw0LXQvNCw0Y8g0L7RiNC40LHQutCwINC+0L/RgNC10LTQtdC70LXQvdC40Y8g0LPQtdC+0LPRgC4g0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjRjyAo0LIg0LzQtdGC0YDQsNGFKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAi0YHQutC+0YDQvtGB0YLRjCDQtNCy0LjQttC10L3QuNGPIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICLRgdC60L7RgNC+0YHRgtGMINC00LLQuNC20LXQvdC40Y8g0YPRgdGC0YDQvtC50YHRgtCy0LAg0YHRitGR0LzQutC4INCyINC/0YDQuCDQstGL0L/QvtC70L3QtdC90LjQuCDRgdGK0ZHQvNC60Lgg0LIg0LwvYyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgItC90LDQv9GA0LDQstC70LXQvdC40LUg0LTQstC40LbQtdC90LjRjyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotItC90LDQv9GA0LDQstC70LXQvdC40LUg0LTQstC40LbQtdC90LjRjyDRg9GB0YLRgNC+0LnRgdGC0LLQsCDRgdGK0ZHQvNC60LguINCX0LDQtNCw0ZHRgtGB0Y8g0LIg0LPRgNCw0LTRg9GB0LDRhSDRh9C40YHQu9C+0Lwg0YEgIgotItC/0LvQsNCy0LDRjtGJ0LXQuSDRgtC+0YfQutC+0LksIDAg0L7Qt9C90LDRh9Cw0LXRgiDQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQuNC5INGB0LXQstC10YAg0Lgg0LTQsNC70YzRiNC1INC/0L4g0YfQsNGB0L7QstC+0Lkg0YHRgtGA0LXQu9C60LUiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgItC90LDQv9GA0LDQstC70LXQvdC40LUg0YHRitGR0LzQutC4IgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0i0L3QsNC/0YDQsNCy0LvQtdC90LjQtSwg0LrRg9C00LAg0YPQutCw0LfRi9Cy0LDQu9C+INGD0YHRgtGA0L7QudGB0YLQstC+INGB0YrRkdC80LrQuC4g0JfQsNC00LDRkdGC0YHRjyDQsiDQs9GA0LDQtNGD0YHQsNGFINGH0LjRgdC70L7QvCDRgSAiCi0i0L/Qu9Cw0LLQsNGO0YnQtdC5INGC0L7Rh9C60L7QuSwgMCDQvtC30L3QsNGH0LDQtdGCINCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC40Lkg0YHQtdCy0LXRgCDQuCDQtNCw0LvRjNGI0LUg0L/QviDRh9Cw0YHQvtCy0L7QuSDRgdGC0YDQtdC70LrQtSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICLQvdCw0LfQstCw0L3QuNC1INC/0LXRgNC10LTQsNGH0LgiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICLQndCw0LfQstCw0L3QuNC1INGC0LIv0L/QvtC00LrQsNGB0YLQsC/Qv9C10YDQtdC00LDRh9C4INC90LAg0L3QvtGB0LjRgtC10LvQtSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAi0LrQvtGA0L7RgtC60L7QtSDQvdCw0LfQstCw0L3QuNC1INC/0LXRgNC10LTQsNGH0LgiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgItCd0LDQt9Cy0LDQvdC40LUg0YLQsi/Qv9C+0LTQutCw0YHRgtCwL9C/0LXRgNC10LTQsNGH0Lgg0L3QsCDQvdC+0YHQuNGC0LXQu9C1ICjQtNC70Y8g0YHQvtGA0YLQuNGA0L7QstC60LgpIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgItC90L7QvNC10YAg0Y3Qv9C40LfQvtC00LAiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAi0J3QvtC80LXRgCDRjdC/0LjQt9C+0LTQsCDQsiDRgdC10LfQvtC90LUg0L3QsCDQvdC+0YHQuNGC0LXQu9C1IgotCi1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAi0L3QvtC80LXRgCDRgdC10LfQvtC90LAiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAi0J3QvtC80LXRgCDRgdC10LfQvtC90LAg0L3QsCDQvdC+0YHQuNGC0LXQu9C1IgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICLRgdGC0LjRhdC4IgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICLQodGC0LjRhdC4INC/0LXRgdC10L0g0L3QsCDQvdC+0YHQuNGC0LXQu9C1IgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgItCw0LLRgtC+0YAgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLQu9C40YbQvi/Qu9C40YbQsCwg0L7RgtCy0LXRgtGB0YLQstC10L3QvdGL0LUg0LfQsCDQt9Cw0L/QuNGB0YwgKNC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCkiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAi0LPRgNGD0L/Qv9C40YDQvtCy0LrQsCIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotItCT0YDRg9C/0L/RiyDQvdC+0YHQuNGC0LXQu9C10Lkg0YEg0L3QtdGB0LrQvtC70YzQutC40LzQuCDQtNC+0YDQvtC20LrQsNC80LgsINC90LDQv9GA0LjQvNC10YAsINGA0LDQt9C70LjRh9C90YvQtSDRh9Cw0YHRgtC4ICIKLSLQutC+0L3RhtC10YDRgtCwLiDQrdGC0L4g0LHQvtC70YzRiNC1INGH0LXQvCDQtNC+0YDQvtC20LrQsCwg0L3QviDQvNC10L3RjNGI0LUg0YfQtdC8INCw0LvRjNCx0L7QvCIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICLQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LDRjyDQvtGG0LXQvdC60LAiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotItCe0YbQtdC90LrQsCwg0LTQsNC90L3QsNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC8LiDQp9C10Lwg0LLRi9GI0LUg0L7RhtC10L3QutCwLCDRgtC10Lwg0LHQvtC70YzRiNC10LzRgyDRh9C40YHQu9GDICIKLSLQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDQv9C+0L3RgNCw0LLQuNC70YHRjyDQvdC+0YHQuNGC0LXQu9GMIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAi0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70Ywg0YPRgdGC0YDQvtC50YHRgtCy0LAiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLQn9GA0L7QuNC30LLQvtC00LjRgtC10LvRjCDRg9GB0YLRgNC+0LnRgdGC0LLQsCwg0L3QsCDQutC+0YLQvtGA0L7QvCDRgdC+0LfQtNCw0L0g0L3QvtGB0LjRgtC10LvRjCIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAi0LzQvtC00LXQu9GMINGD0YHRgtGA0L7QudGB0YLQstCwIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLQnNC+0LTQtdC70Ywg0YPRgdGC0YDQvtC50YHRgtCy0LAsINC90LAg0LrQvtGC0L7RgNC+0Lwg0YHQvtC30LTQsNC9INC90L7RgdC40YLQtdC70YwiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICLQuNC80Y8g0L/RgNC40LvQvtC20LXQvdC40Y8iCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgItCf0YDQuNC70L7QttC10L3QuNC1INGBINC/0L7QvNC+0YnRjNGOINC60L7RgtC+0YDQvtCz0L4g0YHQvtC30LTQsNC9INC90L7RgdC40YLQtdC70YwiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICLQtNCw0L3QvdGL0LUg0L/RgNC40LvQvtC20LXQvdC40Y8iCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICLQn9GA0L7QuNC30LLQvtC70YzQvdGL0LUg0LTQsNC90L3Ri9C1INC/0YDQuNC70L7QttC10L3QuNGPINC00LvRjyDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNGPINCyINC00LDQvdC90YvQtSDQvdC+0YHQuNGC0LXQu9GPIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgItC+0YDQuNC10L3RgtCw0YbQuNGPINC40LfQvtCx0YDQsNC20LXQvdC40Y8iCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgItCS0LvQuNGP0LXRgiDQvdCwINCy0YDQsNGJ0LXQvdC40LUg0LjQu9C4INC/0L7QstC+0YDQvtGCINC40LfQvtCx0YDQsNC20LXQvdC40Y8g0L/QtdGA0LXQtCDQv9C+0LrQsNC30L7QvCIKLQotbXNnaWQgInB1Ymxpc2hlciIKLW1zZ3N0ciAi0LjQt9C00LDRgtC10LvRjCIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAi0J3QsNC30LLQsNC90LjQtSDRgdGC0YPQtNC40Lgg0LjQu9C4INC40LfQtNCw0YLQtdC70Y8iCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAi0LIg0L7QsdGA0LDQsdC+0YLQutC1IgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgItCY0L3RhNC+0YDQvNCw0YbQuNGPINC+INC70Y7QtNGP0YUsINC60L7RgtC+0YDRi9C1INGB0LTQtdC70LDQu9C4INGA0LXQvNC40LrRgSDQuNC70Lgg0L/QvtC00L7QsdC90YvQtSDQvtCx0YDQsNCx0L7RgtC60LgiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAibWlkaS1iYXNlLW5vdGUiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgItCd0L7QvNC10YAg0L3QvtGC0YsgbWlkaSDQvdCwINCw0YPQtNC40L4g0LTQvtGA0L7QttC60LUuIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICJwcml2YXRlLWRhdGEiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgItCn0LDRgdGC0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgItCU0LvRjyDQv9GA0L7RgtC+0LrQvtC70LAgwqslc8K7INC90LUg0L3QsNC50LTQtdC9IFVSSSDQvtCx0YDQsNCx0L7RgtGH0LjQutCwIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICLQodGF0LXQvNCwIFVSSSDCqyVzwrsg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgItCe0KjQmNCR0JrQkDog0LjQtyDRjdC70LXQvNC10L3RgtCwICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotItCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0L7RgtC70LDQtNC+0YfQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y86XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICLRgdC+0LXQtNC40L3QtdC90LjQtSDQsdC10Lcg0LjRgdGC0L7Rh9C90LjQutCwIFvQv9GA0LjRkdC80L3QuNC6PSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICLRgdC+0LXQtNC40L3QtdC90LjQtSDQsdC10Lcg0L/RgNC40ZHQvNC90LjQutCwIFvQuNGB0YLQvtGH0L3QuNC6PSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgItGB0LLQvtC50YHRgtCy0L4gwqslc8K7INC90LUg0L3QsNC50LTQtdC90L4g0LTQu9GPINGN0LvQtdC80LXQvdGC0LAgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRg9GB0YLQsNC90L7QstC40YLRjCDRgdCy0L7QudGB0YLQstC+IMKrJXPCuyDRjdC70LXQvNC10L3RgtCwIMKrJXPCuyDQsiDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC4INC+0YLQu9C+0LbQtdC90L3QvtC5INC60L7QvNC/0L7QvdC+0LLQutC1LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LXQtNC40L3QuNGC0YwgJXMg0LggJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgItGN0LvQtdC80LXQvdGCIMKrJXPCuyDQvdC1INC90LDQudC00LXQvSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAi0L3QtdC+0LbQuNC00LDQvdC90LDRjyDRgdGB0YvQu9C60LAgwqslc8K7IOKAlCDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICLQvdC10L7QttC40LTQsNC90L3QsNGPINGB0YHRi9C70LrQsCDQvdCwINC60L7QvdGC0LDQutGC0L3QvtC1INCz0L3QtdC30LTQviDCqyVzwrsg4oCUINC40LPQvdC+0YDQuNGA0YPQtdGC0YHRjyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LLQvtC30LzQvtC20L3QvtGB0YLQuCDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICLQvdC10YIg0Y3Qu9C10LzQtdC90YLQsC3Qv9GA0LjRkdC80L3QuNC60LAg0LTQu9GPIFVSSSDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgItC90LXRgiDRjdC70LXQvNC10L3RgtCwLdC40YHRgtC+0YfQvdC40LrQsCDQtNC70Y8gVVJJIMKrJXPCuyIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICLRg9C60LDQt9Cw0L3QvdGL0Lkg0L/Rg9GB0YLQvtC5INC60L7QvdGC0LXQudC90LXRgCDCqyVzwrsg0L3QtdC00L7Qv9GD0YHRgtC40LwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICLQvdC1INC90LDQudC00LXQvSDQutC+0L3RgtC10LnQvdC10YAgwqslc8K7LCDRgNCw0YHQv9Cw0LrQvtCy0LrQsCDRjdC70LXQvNC10L3RgtC+0LIiCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAi0L/Rg9GB0YLQvtC5INC60L7QvdCy0LXQudC10YAg0L3QtdC00L7Qv9GD0YHRgtC40LwiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAi0JzQvdC+0LPQvtC1INC40Lcg0LHRg9GE0LXRgNCwINCx0YvQu9C+INC+0YLQsdGA0L7RiNC10L3Qvi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3Rj9GPINC/0YDQvtCx0LvQtdC80LAg0L/QtdGA0LXQtNCw0YfQuCDQtNCw0L3QvdGL0YUuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwINC/0LXRgNC10LTQsNGH0Lgg0LTQsNC90L3Ri9GFLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwINGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNC4LiIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDQvtGC0L7QsdGA0LDQttC10L3QuNC4IChtYXApINCx0YPRhNC10YDQsC4iCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAi0KTQuNC70YzRgtGA0L7QstCw0YLRjCDQstC+0LfQvNC+0LbQvdC+0YHRgtC4IgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLSLQntCz0YDQsNC90LjRh9C40YLRjCDRgNCw0LfRgNC10YjRkdC90L3Ri9C1INCy0L7Qt9C80L7QttC90L7RgdGC0LggKE5VTEwg0YDQsNCy0L3QvtGB0LjQu9GM0L3QviBBTlkpLiDQo9GB0YLQsNC90L7QstC60LAg0Y3RgtC+0LPQviAiCi0i0YHQstC+0LnRgdGC0LLQsCDRg9Cy0LXQu9C40YfQuNCy0LDQtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INGB0YHRi9C70L7QuiDQtNC70Y8g0L/RgNC10LTQvtGB0YLQsNCy0LvQtdC90L3QvtCz0L4g0L7QsdGK0LXQutGC0LAgR3N0Q2Fwcy4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICLQoNC10LbQuNC8INC40LfQvNC10L3QtdC90LjRjyDQstC+0LfQvNC+0LbQvdC+0YHRgtC10LkiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICLQpNC40LvRjNGC0YDQvtCy0LDRgtGMINC/0L7QstC10LTQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Y8g0LLQvtC30LzQvtC20L3QvtGB0YLQtdC5IgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAi0J3QtSDQt9Cw0LTQsNC90LAg0LLRgNC10LzQtdC90L3Ri9C5IChUZW1wKSDQutCw0YLQsNC70L7Qsy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0YTQsNC50Lsgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YTQsNC50Lsgwqslc8K7INC00LvRjyDRh9GC0LXQvdC40Y8uIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9C40YHQuCDQt9Cw0LPRgNGD0LbQsNC10LzQvtCz0L4g0YTQsNC50LvQsC4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAi0J3QtSDRg9C60LDQt9Cw0L3QviDQuNC80Y8g0YTQsNC50LvQsCDQtNC70Y8g0LfQsNC/0LjRgdC4LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LTQu9GPINC30LDQv9C40YHQuCDRhNCw0LnQuyDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNC60YDRi9GC0LjRjyDRhNCw0LnQu9CwIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjRjyDQsiDRhNCw0LnQu9C1IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/QuNGB0Lgg0LIg0YTQsNC50Lsgwqslc8K7LiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICLQndC1INGD0LrQsNC30LDQvdC+INC40LzRjyDRhNCw0LnQu9CwINC00LvRjyDRh9GC0LXQvdC40Y8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0YHQstC10LTQtdC90LjRjyDQtNC70Y8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICLCqyVzwrsg0Y/QstC70Y/QtdGC0YHRjyDQutCw0YLQsNC70L7Qs9C+0LwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAi0KTQsNC50Lsgwqslc8K7INGP0LLQu9GP0LXRgtGB0Y8g0YHQvtC60LXRgtC+0LwuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAi0KHQsdC+0Lkg0L/QvtGB0LvQtSDQuNGC0LXRgNCw0YbQuNC5LCDRgdC+0LPQu9Cw0YHQvdC+INC30LDQv9GA0L7RgdGDLiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgItCy0L7Qt9C80L7QttC90L7RgdGC0LgiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICLQvtCx0L3QsNGA0YPQttC10L3QvdGL0LUg0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQv9C+0YLQvtC60LAiCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICLQvNC40L3QuNC80YPQvCIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgItGE0L7RgNGB0LjRgNC+0LLQsNGC0Ywg0LLQvtC30LzQvtC20L3QvtGB0YLQuCIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICLRhNC+0YDRgdC40YDQvtCy0LDRgtGMINCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0LHQtdC3INCy0YvQv9C+0LvQvdC10L3QuNGPIHR5cGVmaW5kIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgItCf0L7RgtC+0Log0YHQvtC00LXRgNC20LjRgiDQvdC10LTQvtGB0YLQsNGC0L7Rh9C90L4g0LTQsNC90L3Ri9GFLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAi0J/QvtGC0L7QuiDQvdC1INGB0L7QtNC10YDQttC40YIg0LTQsNC90L3Ri9GFLiIKLQotbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCi1tc2dzdHIgItCg0LXQsNC70LjQt9C+0LLQsNC90L3Ri9C1INC40L3RgtC10YDRhNC10LnRgdGLOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgItGB0YfQuNGC0YvQstCw0LXQvNGL0LkiCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAi0LfQsNC/0LjRgdGL0LLQsNC10LzRi9C5IgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAi0YPRgdGC0LDRgNC10LLRiNC40LkiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgItC60L7QvdGC0YDQvtC70LjRgNGD0LXQvNGL0LkiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAi0LzQvtC20LXRgiDQsdGL0YLRjCDRgNCw0LLQvdC+INGB0L7RgdGC0L7Rj9C90LjRjiBOVUxMLCBSRUFEWSwgUEFVU0VEINC40LvQuCBQTEFZSU5HIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAi0LzQvtC20LXRgiDQsdGL0YLRjCDRgNCw0LLQvdC+INGC0L7Qu9GM0LrQviDRgdC+0YHRgtC+0Y/QvdC40Y4gTlVMTCwgUkVBRFkg0LjQu9C4IFBBVVNFRCIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICLQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQstC90L4g0YLQvtC70YzQutC+INGB0L7RgdGC0L7Rj9C90LjRjiBOVUxMINC40LvQuCBSRUFEWSIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAi0KTQsNC50LvRiyDQuNC3INGH0ZHRgNC90L7Qs9C+INGB0L/QuNGB0LrQsDoiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICLQntCx0YnQtdC1INC60L7Qu9C40YfQtdGB0YLQstC+OiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkINGE0LDQudC7INCyINGH0ZHRgNC90L7QvCDRgdC/0LjRgdC60LUiCi1tc2dzdHJbMV0gIiVkINGE0LDQudC70LAg0LIg0YfRkdGA0L3QvtC8INGB0L/QuNGB0LrQtSIKLW1zZ3N0clsyXSAiJWQg0YTQsNC50LvQvtCyINCyINGH0ZHRgNC90L7QvCDRgdC/0LjRgdC60LUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCDQvNC+0LTRg9C70YwiCi1tc2dzdHJbMV0gIiVkINC80L7QtNGD0LvRjyIKLW1zZ3N0clsyXSAiJWQg0LzQvtC00YPQu9C10LkiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQg0Y3Qu9C10LzQtdC90YIg0LIg0YfRkdGA0L3QvtC8INGB0L/QuNGB0LrQtSIKLW1zZ3N0clsxXSAiJWQg0Y3Qu9C10LzQtdC90YLQsCDQsiDRh9GR0YDQvdC+0Lwg0YHQv9C40YHQutC1IgotbXNnc3RyWzJdICIlZCDRjdC70LXQvNC10L3RgtC+0LIg0LIg0YfRkdGA0L3QvtC8INGB0L/QuNGB0LrQtSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQg0YTRg9C90LrRhtC40Y8iCi1tc2dzdHJbMV0gIiVkINGE0YPQvdC60YbQuNC4IgotbXNnc3RyWzJdICIlZCDRhNGD0L3QutGG0LjQuSIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAi0JLRi9Cy0LXRgdGC0Lgg0LLRgdC1INGN0LvQtdC80LXQvdGC0YsiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICLQktGL0LLQtdGB0YLQuCDRhNCw0LnQu9GLINC40Lcg0YfRkdGA0L3QvtCz0L4g0YHQv9C40YHQutCwIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSLQktGL0LLQtdGB0YLQuCDQvNCw0YjQuNC90L3Qvi3Rh9C40YLQsNC10LzRi9C5INGB0L/QuNGB0L7QuiDRhNGD0L3QutGG0LjQuSwg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9C10LzRi9GFINGD0LrQsNC30LDQvdC90YvQvCDQvNC+0LTRg9C70LXQvCAiCi0i0LjQu9C4INC80L7QtNGD0LvRj9C80LguXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0J/QvtC70LXQt9C90L4g0LTQu9GPINC/0L7QtNC60LvRjtGH0LXQvdC40Y8g0LLQvdC10YjQvdC40YUgIgotItC80LXRhdCw0L3QuNC30LzQvtCyINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0Lkg0YPRgdGC0LDQvdC+0LLQutC4INC80L7QtNGD0LvQtdC5IgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICLQktGL0LLQtdGB0YLQuCDRgdC+0LTQtdGA0LbQuNC80L7QtSDQvNC+0LTRg9C70Y8iCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAi0J/RgNC+0LLQtdGA0YzRgtC1LCDRh9GC0L4g0YPQutCw0LfQsNC90L3Ri9C5INGN0LvQtdC80LXQvdGCINC40LvQuCDQvNC+0LTRg9C70Ywg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0i0J/RgNC4INC/0YDQvtCy0LXRgNC60LUg0YHRg9GJ0LXRgdGC0LLQvtCy0LDQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsCDQuNC70Lgg0LzQvtC00YPQu9GPINGC0LDQutC20LUg0L/RgNC+0LLQtdGA0YzRgtC1LCDRh9GC0L7QsdGLINC10LPQviAiCi0i0LLQtdGA0YHQuNGPINCx0YvQu9CwINC90LUg0YHRgtCw0YDQtdC1INGD0LrQsNC30LDQvdC90L7QuSIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAi0JLRi9Cy0LXRgdGC0Lgg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80YvQtSDRgdGF0LXQvNGLIFVSSSDQtNC70Y8g0Y3Qu9C10LzQtdC90YLQvtCyLCDQutC+0YLQvtGA0YvQtSDQuNGFINC40YHQv9C+0LvRjNC30YPRjtGCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQs9GA0YPQt9C40YLRjCDRhNCw0LnQuyDQvNC+0LTRg9C70Y86IMKrJXPCu1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICLQnNC+0LTRg9C70Ywg0LjQu9C4INGN0LvQtdC80LXQvdGCIMKrJXPCuyDQvdC1INC90LDQudC00LXQvVxuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAi0JjQvdC00LXQutGB0L3QsNGPINGB0YLQsNGC0LjRgdGC0LjQutCwIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAi0J/QvtC70YPRh9C10L3QviDRgdC+0L7QsdGJ0LXQvdC40LUgIyV1INC+0YIg0Y3Qu9C10LzQtdC90YLQsCDCqyVzwrsgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC+INGB0L7QvtCx0YnQtdC90LjQtSAjJXUg0L7RgiDQutC+0L3RgtCw0LrRgtC90L7Qs9C+INCz0L3QtdC30LTQsCDCqyVzOiVzwrsgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC+INGB0L7QvtCx0YnQtdC90LjQtSAjJXUg0L7RgiDQvtCx0YrQtdC60YLQsCDCqyVzwrsgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgItCf0L7Qu9GD0YfQtdC90L4g0YHQvtC+0LHRidC10L3QuNC1ICMldSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLQn9C+0LvRg9GH0LXQvSDQvNCw0YDQutC10YAgRU9TICjCq9C60L7QvdC10YYg0L/QvtGC0L7QutCwwrspINC+0YIg0Y3Qu9C10LzQtdC90YLQsCDCqyVzwrsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAi0J3QkNCZ0JTQldCdINCi0JXQkzog0L3QsNC50LTQtdC9INGN0LvQtdC80LXQvdGC0L7QvCDCqyVzwrsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICLQndCQ0JnQlNCV0J0g0KLQldCTOiDQvdCw0LnQtNC10L0g0LrQvtC90YLQsNC60YLQvdGL0Lwg0LPQvdC10LfQtNC+0Lwgwqslczolc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAi0J3QkNCZ0JTQldCdINCi0JXQkzog0L3QsNC50LTQtdC9INC+0LHRitC10LrRgtC+0Lwgwqslc8K7LlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgItCd0JDQmdCU0JXQnSDQotCV0JNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLQndCQ0JnQlNCV0J0gVE9DOiDQvdCw0LnQtNC10L0g0Y3Qu9C10LzQtdC90YLQvtC8IMKrJXPCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgItCd0JDQmdCU0JXQnSBUT0M6INC90LDQudC00LXQvSDQvtCx0YrQtdC60YLQvtC8IMKrJXPCuy5cbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICLQndCQ0JnQlNCV0J0gVE9DXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotItCY0J3QpNCe0KDQnNCQ0KbQmNCvOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQvtGCINGN0LvQtdC80LXQvdGC0LAgJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAi0JrQvtC90LLQtdC50LXRgCDQv9C+0LTQs9C+0YLQvtCy0LvQtdC9LCDQvtC20LjQtNCw0LXRgtGB0Y8g0LfQsNCy0LXRgNGI0LXQvdC40LUg0LHRg9GE0LXRgNC40LfQsNGG0LjQuOKAplxuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAi0JLRgNC10LzRjyDQv9GA0LXQtNC/0YPRgdC60LAsINC+0LbQuNC00LDQtdGC0YHRjyDQt9Cw0LLQtdGA0YjQtdC90LjQtSDQv9GA0L7RhtC10YHRgdCw4oCmXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgItCx0YPRhNC10YDQuNC30LDRhtC40Y/igKYiCi0KLW1zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICLQkdGD0YTQtdGA0LjQt9Cw0YbQuNGPINC30LDQstC10YDRiNC10L3QsCwg0LrQvtC90LLQtdC50LXRgCDQv9C10YDQtdCy0LXQtNGR0L0g0LIg0YHQvtGB0YLQvtGP0L3QuNC1IFBMQVlJTkfigKZcbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgItCY0LTRkdGCINCx0YPRhNC10YDQuNC30LDRhtC40Y8sINC60L7QvdCy0LXQudC10YAg0L/QtdGA0LXQstC10LTRkdC9INCyINGB0L7RgdGC0L7Rj9C90LjQtSBQQVVTRUTigKZcbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgItCf0LXRgNC10YDQsNGB0L/RgNC10LTQtdC70LXQvdC40LUg0LvQsNGC0LXQvdGC0L3QvtGB0YLQuOKAplxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgItCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGC0YHRjyDRgdC+0YHRgtC+0Y/QvdC40LUgJXMsINC30LDQv9GA0L7RiNC10L3QvdC+0LUgJXPigKZcbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgItCf0YDQtdGA0YvQstCw0L3QuNC1OiDQntGB0YLQsNC90L7QstC60LAg0LrQvtC90LLQtdC50LXRgNCw4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAi0KXQvtC0INCy0YvQv9C+0LvQvdC10L3QuNGPOiAoJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICLQrdC70LXQvNC10L3RgiDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICLQn9C+0LvRg9GH0LXQvSDQutC+0L3RgtC10LrRgdGCINC40Lcg0Y3Qu9C10LzQtdC90YLQsCDCqyVzwrs6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgItCS0YvQstC+0LTQuNGC0Ywg0YLQtdCz0LggKNC80LXRgtCw0LTQsNC90L3Ri9C1KSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgItCS0YvQstC+0LTQuNGC0YwgVE9DICjQs9C70LDQstGLINC4INGA0LXQtNCw0LrRhtC40LgpIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAi0JLRi9Cy0L7QtNC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDRgdC+0YHRgtC+0Y/QvdC40Lgg0Lgg0YPQstC10LTQvtC80LvQtdC90LjRjyDQviDRgdCy0L7QudGB0YLQstCw0YUiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICLQndC1INCy0YvQstC+0LTQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0YXQvtC00LUg0LLRi9C/0L7Qu9C90LXQvdC40Y8iCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgItCS0YvQstC+0LTQuNGC0Ywg0YHQvtC+0LHRidC10L3QuNGPIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLSLQndC1INCy0YvQstC+0LTQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0YHQvtGB0YLQvtGP0L3QuNC4INC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0LPQviDRgdCy0L7QudGB0YLQstCwLCDQtdGB0LvQuCDQstC60LvRjtGH0LXQvdCwICIKLSLQtNC10YLQsNC70LjQt9Cw0YbQuNGPINCy0YvQstC+0LTQsCAo0LzQvtC20L3QviDRg9C60LDQt9GL0LLQsNGC0Ywg0L3QtdGB0LrQvtC70YzQutC+INGA0LDQtykiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICLQmNCc0K8t0KHQktCe0JnQodCi0JLQkCIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAi0J3QtSDRg9GB0YLQsNC90LDQstC70LjQstCw0YLRjCDQvtCx0YDQsNCx0L7RgtGH0LjQuiDQvtGI0LjQsdC+0LoiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgItCS0YvQtNCw0YLRjCBFT1Mg0LIg0LjRgdGC0L7Rh9C90LjQutC4INC/0LXRgNC10LQg0LfQsNC60YDRi9GC0LjQtdC8INC60L7QvdCy0LXQudC10YDQsCIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAi0KHQvtCx0YDQsNGC0Ywg0Lgg0LLRi9Cy0LXRgdGC0Lgg0LjQvdC00LXQutGB0L3Rg9GOINGB0YLQsNGC0LjRgdGC0LjQutGDIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICLQntCo0JjQkdCa0JA6INC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtCx0YDQsNGC0Ywg0LrQvtC90LLQtdC50LXRgDogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICLQntCo0JjQkdCa0JA6INC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtCx0YDQsNGC0Ywg0LrQvtC90LLQtdC50LXRgC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC+0YjQuNCx0L7Rh9C90YvQuSDQutC+0L3QstC10LnQtdGAOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICLQntCo0JjQkdCa0JA6INC90LUg0L3QsNC50LTQtdC9INGN0LvQtdC80LXQvdGCIMKrcGlwZWxpbmXCuy5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICLQo9GB0YLQsNC90L7QstC60LAg0LrQvtC90LLQtdC50LXRgNCwINCyINGB0L7RgdGC0L7Rj9C90LjQtSBQQVVTRUTigKZcbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgItCe0KjQmNCR0JrQkDog0JrQvtC90LLQtdC50LXRgCDQvdC1INGF0L7Rh9C10YIg0YHRgtCw0L3QvtCy0LjRgtGM0YHRjyDQvdCwINC/0LDRg9C30YMuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgItCa0L7QvdCy0LXQudC10YAg0YDQsNCx0L7RgtCw0LXRgiDQuCDQvdC1INGC0YDQtdCx0YPQtdGCINGB0L7RgdGC0L7Rj9C90LjRjyBQUkVST0xM4oCmXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LrQsCDQutC+0L3QstC10LnQtdGA0LAgKFBSRVJPTEwp4oCmXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgItCe0KjQmNCR0JrQkDog0LrQvtC90LLQtdC50LXRgCDQvdC1INGF0L7Rh9C10YIg0L/QvtC00LPQvtGC0LDQstC70LjQstCw0YLRjNGB0Y8gKFBSRVJPTEwpLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICLQmtC+0L3QstC10LnQtdGAINC/0L7QtNCz0L7RgtC+0LLQu9C10L0gKFBSRVJPTExFRCnigKZcbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQutCwINC60L7QvdCy0LXQudC10YDQsCDQsiDRgdC+0YHRgtC+0Y/QvdC40LUgUExBWUlOR+KAplxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgotbXNnc3RyICLQntCo0JjQkdCa0JA6INC60L7QvdCy0LXQudC10YAg0L3QtSDRhdC+0YfQtdGCINCy0L7RgdC/0YDQvtC40LfQstC+0LTQuNGC0YwuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAi0JLQutC70Y7Rh9GR0L0gRU9TINC/0YDQuCDQt9Cw0LrRgNGL0YLQuNC4IOKAlCDQktGL0LTQsNGH0LAgRU9TINCyINC60L7QvdCy0LXQudC10YBcbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICLQktC60LvRjtGH0ZHQvSBFT1Mg0L/RgNC4INC30LDQutGA0YvRgtC40Lgg4oCUINC+0LbQuNC00LDQvdC40LUgRU9TINC/0L7RgdC70LUg0L7RiNC40LHQutC4XG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAi0J7QttC40LTQsNC90LjQtSBFT1PigKZcbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgItCf0L7Qu9GD0YfQtdC9IEVPUyDigJQg0L7RgdGC0LDQvdC+0LLQutCwINC60L7QvdCy0LXQudC10YDQsOKAplxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgItCf0YDQtdGA0YvQstCw0L3QuNC1INCy0L4g0LLRgNC10LzRjyDQvtC20LjQtNCw0L3QuNGPIEVPUyDigJQg0L7RgdGC0LDQvdC+0LLQutCwINC60L7QvdCy0LXQudC10YDQsOKAplxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgItCS0L4g0LLRgNC10LzRjyDQvtC20LjQtNCw0L3QuNGPIEVPUyDQv9GA0L7QuNC30L7RiNC70LAg0L7RiNC40LHQutCwXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAi0JLRi9C/0L7Qu9C90LXQvdC40LUg0L7QutC+0L3Rh9C10L3QviDQv9C+0YHQu9C1ICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICLQo9GB0YLQsNC90L7QstC60LAg0LrQvtC90LLQtdC50LXRgNCwINCyINGB0L7RgdGC0L7Rj9C90LjQtSBSRUFEWeKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICLQo9GB0YLQsNC90L7QstC60LAg0LrQvtC90LLQtdC50LXRgNCwINCyINGB0L7RgdGC0L7Rj9C90LjQtSBOVUxM4oCmXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICLQntGB0LLQvtCx0L7QttC00LXQvdC40LUg0LrQvtC90LLQtdC50LXRgNCw4oCmXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgItC60L7QvdGC0LXQudC90LXRgCIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwINC/0L7RgtC+0LrQsCDQtNCw0L3QvdGL0YUuIgotCi0jfiBtc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKLSN+IG1zZ3N0ciAi0J3QtSDQstGL0LLQvtC00LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INGB0L7RgdGC0L7Rj9C90LjQuCDQotCY0J/QkCIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAi0KLQmNCfMSwg0KLQmNCfMizigKYiCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgItC/0L7Qv9GL0YLQutCwINGB0L7QtdC00LjQvdC10L3QuNGPINCx0LXQtyDRjdC70LXQvNC10L3RgtCwLdC40YHRgtC+0YfQvdC40LrQsCIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgItC/0L7Qv9GL0YLQutCwINGB0L7QtdC00LjQvdC10L3QuNGPINCx0LXQtyDRjdC70LXQvNC10L3RgtCwLdC/0YDQuNGR0LzQvdC40LrQsCIKLQotI34gbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgotI34gbXNnc3RyICLQvdC10YIg0Y3Qu9C10LzQtdC90YLQsCwg0LrQvtGC0L7RgNGL0Lkg0LzQvtC20L3QviDQsdGL0LvQviDQsdGLINC/0YDQuNGB0L7QtdC00LjQvdC40YLRjCDQuiBVUkkgwqslc8K7IgotCi0jfiBtc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotI34gbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7QtdC00LjQvdC40YLRjCDRjdC70LXQvNC10L3Rgi3Qv9GA0LjRkdC80L3QuNC6INC00LvRjyBVUkkgwqslc8K7IgotCi0jfiBtc2dpZCAibWF4aW11bSIKLSN+IG1zZ3N0ciAi0LzQsNC60YHQuNC80YPQvCIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICLQmNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtTogZ3N0LXhtbGxhdW5jaCA80YTQsNC50LsueG1sPiBbINGN0LvQtdC80LXQvdGCLtGB0LLQvtC50YHRgtCy0L490LfQvdCw0YfQtdC90LjQtS4uLl1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAi0J7QqNCY0JHQmtCQOiDQvtGI0LjQsdC60LAg0YDQsNC30LHQvtGA0LAgeG1sLdGE0LDQudC70LAgwqslc8K7LlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgotI34gbXNnc3RyICLQntCo0JjQkdCa0JA6INCyINGE0LDQudC70LUgwqslc8K7INC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0LPQu9Cw0LLQvdGL0Lkg0Y3Qu9C10LzQtdC90YIg0LrQvtC90LLQtdC50LXRgNCwLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICIiCi0jfiAi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0LIg0LTQsNC90L3Ri9C5INC80L7QvNC10L3RgiDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPINGC0L7Qu9GM0LrQviDQvtC00LjQvSDQs9C70LDQstC90YvQuSAiCi0jfiAi0Y3Qu9C10LzQtdC90YIuXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgItCe0KjQmNCR0JrQkDog0L7RiNC40LHQutCwINC+0LHRgNCw0LHQvtGC0LrQuCDQsNGA0LPRg9C80LXQvdGC0LAg0LrQvtC80LDQvdC00L3QvtC5INGB0YLRgNC+0LrQuCAlZDogJXMuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDRjdC70LXQvNC10L3RgiDRgSDQuNC80LXQvdC10Lwgwqslc8K7INC90LUg0L3QsNC50LTQtdC9LlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAi0KHQvtGF0YDQsNC90LjRgtGMINC60L7QvdCy0LXQudC10YAg0LIgWE1MLdGE0LDQudC7INC4INCy0YvQudGC0LgiCi0KLSN+IG1zZ2lkICJGSUxFIgotI34gbXNnc3RyICLQpNCQ0JnQmyIKLQotI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKLSN+IG1zZ3N0ciAi0J3QtSDRg9GB0YLQsNC90LDQstC70LjQstCw0YLRjCDQvtCx0YDQsNCx0L7RgtGH0LjQutC4INGB0LjQs9C90LDQu9C+0LIgU0lHVVNSMSDQuCBTSUdVU1IyIgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAi0JLRi9Cy0LXRgdGC0Lgg0YLRgNCw0YHRgdC40YDQvtCy0LrRgyDQstGL0LTQtdC70LXQvdC40Y8g0L/QsNC80Y/RgtC4ICjQtdGB0LvQuCDQstC60LvRjtGH0LXQvdC+INC/0YDQuCDRgdCx0L7RgNC60LUpIgotCi0jfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgotI34gbXNnc3RyICLQntGI0LjQsdC60LAg0L/QvtCy0YLQvtGA0L3QvtCz0L4g0YHQutCw0L3QuNGA0L7QstCw0L3QuNGPINGA0LXQtdGB0YLRgNCwICVzOiAlcyIKLQotI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgotI34gbXNnc3RyICLQntGI0LjQsdC60LAg0L/QvtCy0YLQvtGA0L3QvtCz0L4g0YHQutCw0L3QuNGA0L7QstCw0L3QuNGPINGA0LXQtdGB0YLRgNCwICVzIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKLSN+IG1zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwIEdTdHJlYW1lcjog0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC80LXQvdC40YLRjCDRgdC+0YHRgtC+0Y/QvdC40LUuIgotCi0jfiBtc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIGRlc2NyaXB0b3IgXCIlZFwiLiIKLSN+IG1zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9C40YHQuCDQsiDQtNC10YHQutGA0LjQv9GC0L7RgCDRhNCw0LnQu9CwIMKrJWTCuy4iCi0KLSN+IG1zZ2lkICJGaWxlIGRlc2NyaXB0b3IgXCIlZFwiIGlzIG5vdCB2YWxpZC4iCi0jfiBtc2dzdHIgItCU0LXRgdC60YDQuNC/0YLQvtGAINGE0LDQudC70LAgwqslZMK7INC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9C10L0uIgotCi0jfiBtc2dpZCAiRlJFRUlORyBwaXBlbGluZSAuLi5cbiIKLSN+IG1zZ3N0ciAi0J7RgdCy0L7QsdC+0LbQtNC10L3QuNC1INC60L7QvdCy0LXQudC10YDQsC4uLlxuIgotCi0jfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKLSN+IG1zZ3N0ciAi0L7RgNC40LPQuNC90LDQu9GM0L3QvtC1INGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSDRhNCw0LnQu9CwINCyINCy0LjQtNC1IFVSSSIKLQotI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKLSN+IG1zZ3N0ciAi0J7RgtC60LvRjtGH0LjRgtGMINGB0L/QtdGG0LjRhNC40YfQtdGB0LrQuNC1INC60L7QvNCw0L3QtNGLINC/0YDQvtGG0LXRgdGB0L7RgNCwIgotCi0jfiBtc2dpZCAiU0NIRURVTEVSIgotI34gbXNnc3RyICLQn9Cb0JDQndCY0KDQntCS0KnQmNCaIgotCi0jfiBtc2dpZCAicGF0aCBsaXN0IGZvciBsb2FkaW5nIHBsdWdpbnMgKHNlcGFyYXRlZCBieSAnJXMnKSIKLSN+IG1zZ3N0ciAi0YHQv9C40YHQvtC6INC/0YPRgtC10Lkg0LTQu9GPINC30LDQs9GA0YPQt9C60Lgg0YDQsNGB0YjQuNGA0LXQvdC40LkgKNGA0LDQt9C00LXQu9C10L3QvdGL0YUgJyVzJykiCi0KLSN+IG1zZ2lkICJTY2hlZHVsZXIgdG8gdXNlIChkZWZhdWx0IGlzICclcycpIgotI34gbXNnc3RyICLQn9C70LDQvdC40YDQvtCy0YnQuNC6INC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4gLSAgJyVzJykiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNjaGVkdWxlciBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCi0jfiBtc2dzdHIgIiIKLSN+ICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAgR1N0cmVhbWVyOiDQv9GA0L7QsdC70LXQvNCwINGBINC/0LvQsNC90LjRgNC+0LLRidC40LrQvtC8LiAg0J7RgtC/0YDQsNCy0YzRgtC1ICIKLSN+ICLRgdC+0L7QsdGJ0LXQvdC40LUg0L7QsSDQvtGI0LjQsdC60LUuIgotCi0jfiBtc2dpZCAiIgotI34gIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlcyBpdGVyYXRpb25zIChzdW0gJXMgbnMsIGF2ZXJhZ2UgJXMgbnMsIG1pbiAlcyBucywgIgotI34gIm1heCAlcyBucykuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICLQktGL0L/QvtC70L3QtdC90LjQtSDQt9Cw0LLQtdGA0YjQuNC70L7RgdGMINC/0L7RgdC70LUgJXMg0LjRgtC10YDQsNGG0LjQuSAo0LLRgdC10LPQviAlcyBucywg0YHRgNC10LTQvdC10LUgJXMgbnMsICIKLSN+ICLQvNC40L3QuNC80YPQvCAlcyBucywg0LzQsNC60YHQuNC80YPQvCAlcyBucykuXG4iCi0KLSN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKLSN+IG1zZ3N0ciAiICAgICAgICAg0JLRgdC1INGA0LDQstC90L4g0L/Ri9GC0LDRjtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMLlxuIgotCi0jfiBtc2dpZCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgJXMuXG4iCi0jfiBtc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QviDRgNCw0YHRiNC40YDQtdC90LjQtSAlcyDRgSAlZCAlcy5cbiIKLQotI34gbXNnaWQgIkFkZGVkIHBhdGggICAlcyB0byAlcyBcbiIKLSN+IG1zZ3N0ciAi0JTQvtCx0LDQstC70LXQvSDQv9GD0YLRjCAgICVzINC6ICVzIFxuIgotCi0jfiBtc2dpZCAiVHJ5aW5nIHRvIGxvYWQgJXMgLi4uXG4iCi0jfiBtc2dzdHIgItCf0YvRgtCw0Y7RgdGMINC30LDQs9GA0YPQt9C40YLRjCAlcyAuLi5cbiIKLQotI34gbXNnaWQgIkVycm9yIGxvYWRpbmcgJXNcbiIKLSN+IG1zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQs9GA0YPQt9C60LggJXNcbiIKLQotI34gbXNnaWQgIkxvYWRlZCAlZCBwbHVnaW5zIHdpdGggJWQgJXMuXG4iCi0jfiBtc2dzdHIgItCX0LDQs9GA0YPQttC10L3QviAlZCDRgNCw0YHRiNC40YDQtdC90LjQuSDRgSAlZCAlcy5cbiIKZGlmZiAtLWdpdCBhL3BvL3J3LmdtbyBiL3BvL3J3LmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg1NDdkZC4uMDAwMDAwMAotLS0gYS9wby9ydy5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9ydy5wbyBiL3BvL3J3LnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmU4Y2FiLi4wMDAwMDAwCi0tLSBhL3BvL3J3LnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTYyNyArMCwwIEBACi0jIEtpbnlhcndhbmRhIHRyYW5zbGF0aW9ucyBmb3IgZ3N0cmVhbWVyIHBhY2thZ2UuCi0jIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgU3RldmUgTXVycGh5IDxtdXJmQGUtdG9vbHMuY29tPiwgMjAwNS4KLSMgU3RldmUgcGVyZm9ybWVkIGluaXRpYWwgcm91Z2ggdHJhbnNsYXRpb24gZnJvbSBjb21wZW5kaXVtIGJ1aWx0IGZyb20gdHJhbnNsYXRpb25zIHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgdHJhbnNsYXRvcnM6Ci0jIFBoaWxpYmVydCBOZGFuZGFsaSAgPG5kYW5kYWxpQHlhaG9vLmZyPiwgMjAwNS4KLSMgVmlhdGV1ciBNVUdFTlpJIDxtdXZpYTFAeWFob28uZnI+LCAyMDA1LgotIyBOb8OrbGxhIE11cG9sZSA8czI0MjExMDQ1QHR1a3MuY28uemE+LCAyMDA1LgotIyBDYXJvbGUgS2FyZW1hIDxrYXJlbWFjYXJvbGVAaG90bWFpbC5jb20+LCAyMDA1LgotIyBKRUFOIEJBUFRJU1RFIE5HRU5EQUhBWU8gPG5nZW5kYV9kZW5pc0B5YWhvby5jby51az4sIDIwMDUuCi0jIEF1Z3VzdGluIEtJQkVSV0EgIDxha2liZXJ3YUB5YWhvby5jby51az4sIDIwMDUuCi0jIERvbmF0aWVuIE5TRU5HSVlVTVZBIDxuZG9uYXRpZW51a0B5YWhvby5jby51az4sIDIwMDUuCi0jIEFudG9pbmUgQmlnaXJpbWFuYSA8YW50b2luZUBlLXRvb2xzLmNvbT4sIDIwMDUuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMC44LjhcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0wNC0wNCAxMDo1NS0wNzAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBTdGV2ZW4gTWljaGFlbCBNdXJwaHkgPG11cmZAZS10b29scy5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogS2lueWFyd2FuZGEgPHRyYW5zbGF0aW9uLXRlYW0tcndAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiByd1xuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgotCi0jLCBmdXp6eQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiaSBWZXJpc2l5byIKLQotIywgZnV6enkKLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiQnlvc2UgSWJ1cmlyYSIKLQotIywgZnV6enkKLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiQmloYXJpIEtvc29yYSBhbWFrb3NhIElieWljaXJvIE5hIEd1c29ob2thIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIktvc29yYSBhbWFrb3NhIHVyd2VnbyBCaXZ1eWUgMS4gSWtvc2EgS3VyaSA1IEN5YW5nd2EgMCBrdWdpcmFuZ28gT3lhICIKLSJJYmlzb2hva2EiCi0KLSMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uSW5zZXJ0LkNhcHRpb24uV3JpdGVyT2JqZWN0LlRhYmxlLlNldHRpbmdzLkxldmVsLnRleHQKLSMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uSW5zZXJ0LkNhcHRpb24uV3JpdGVyT2JqZWN0LkZyYW1lLlNldHRpbmdzLkxldmVsLnRleHQKLSMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uSW5zZXJ0LkNhcHRpb24uV3JpdGVyT2JqZWN0LkdyYXBoaWMuU2V0dGluZ3MuTGV2ZWwudGV4dAotIyAjLSMtIy0jLSMgIG9mZmljZWNmZy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIwotIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5JbnNlcnQuQ2FwdGlvbi5PZmZpY2VPYmplY3QuQ2FsYy5TZXR0aW5ncy5MZXZlbC50ZXh0Ci0jICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCi0jIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkluc2VydC5DYXB0aW9uLk9mZmljZU9iamVjdC5EcmF3LlNldHRpbmdzLkxldmVsLnRleHQKLSMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uSW5zZXJ0LkNhcHRpb24uT2ZmaWNlT2JqZWN0LkNoYXJ0LlNldHRpbmdzLkxldmVsLnRleHQKLSMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uSW5zZXJ0LkNhcHRpb24uT2ZmaWNlT2JqZWN0LkltYWdlLlNldHRpbmdzLkxldmVsLnRleHQKLSMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uSW5zZXJ0LkNhcHRpb24uT2ZmaWNlT2JqZWN0LkZvcm11bGEuU2V0dGluZ3MuTGV2ZWwudGV4dAotIyAjLSMtIy0jLSMgIG9mZmljZWNmZy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIwotIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5JbnNlcnQuQ2FwdGlvbi5PZmZpY2VPYmplY3QuSW1wcmVzcy5TZXR0aW5ncy5MZXZlbC50ZXh0Ci0jICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCi0jIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkluc2VydC5DYXB0aW9uLk9mZmljZU9iamVjdC5PTEVNaXNjLlNldHRpbmdzLkxldmVsLnRleHQKLSMsIGZ1enp5Ci1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgInVyd2VnbyIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iVXJ1dG9uZGUgQnlhIEl6aW5hIHJ5J2ljeWljaXJvIHVyd2VnbyBLdXJpIEd1c2h5aXJhaG8gSW50ZXJhIGt1Z2lyYW5nbyBpICIKLSJJYnlpY2lybyBVcnVnZXJvIDUgMy4iCi0KLSMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uRGVmYXVsdEZvbnQuTGlzdC50ZXh0Ci0jICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCi0jIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLkRlZmF1bHRGb250Q0pLLkxpc3QudGV4dAotIyAjLSMtIy0jLSMgIG9mZmljZWNmZy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIwotIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5EZWZhdWx0Rm9udENUTC5MaXN0LnRleHQKLSMsIGZ1enp5Ci1tc2dpZCAiTElTVCIKLW1zZ3N0ciAiVXJ1dG9uZGUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIkliaXNvaG9rYSIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICJJdGFuZ2lyYS4uLiIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIiIKLQotIyBvZmZtZ3Ivc291cmNlXG9mZmFwcFxkaWFsb2dcdHJlZW9wdC5zcmM6UklEX09GQURMR19PUFRJT05TX1RSRUVfUEFHRVMuU0lEX0dFTkVSQUxfT1BUSU9OUy44LnRleHQKLSMsIGZ1enp5Ci1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIkluemlyYSIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICJVcnV0b25kZSBCeWEgS3VyaSBpbiBHdXRlcmFueWErIEt1cmkgaSBVcnV0b25kZSBpbiBJTVBJTkRVUkFHQUNJUk8iCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiQnlhIEl0YW5naXJhLi4uIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiaSBWZXJpc2l5byIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJhIFJ1c2FuZ2UgSXNvbWVybyBJa29zYSIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiS3VyaSBLdWdlbmVyYS4uLiBJa29zYSBJVEVHRUtPTkdFTkdBIEt1cmkgaXlpIElrb3NhIElET1NJWUUgYSIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiSWtvc2EgSVRFR0VLT05HRU5HQSBPWUEgSWRvc2l5ZSBhIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIklrb3NhIElkb3NpeWUgYSIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiSWtvc2EgVXJ1ZG9kbyBJZG9zaXllIGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAiSWtvc2EgSWRvc2l5ZSBhIgotCi0jLCBmdXp6eQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogZXZlbnQgcHJvYmxlbS4iCi1tc2dzdHIgIklrb3NhIEljeWFiYXllIElkb3NpeWUgYSIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIklrb3NhIElkb3NpeWUgYSIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgIklrb3NhIElueXVndXRpIG5rdXJ1IElkb3NpeWUgYSIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiSWtvc2EgSXRhZ2k6IElkb3NpeWUgYSIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJJa29zYSBJZG9zaXllIGEiCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiYSBSdXNhbmdlIElzb21lcm8gSWtvc2EiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiT1lBIGd1dGFuZ2l6YSBJc29tZXJvIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJPWUEgR3VmdW5nYSBJc29tZXJvIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiT1lBIEd1ZnVuZ2EgSXNvbWVybyIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJhIFJ1c2FuZ2UgSXNvbWVybyBJa29zYSIKLQotIywgZnV6enkKLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJPWUEgQnlhYm9uZXRzZSIKLQotIywgZnV6enkKLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJJcmFodXplIEN5YW5nd2EgT1lBIEJpaGFyaSIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk9ZQSBHdWZ1bmd1cmEga3VnaXJhbmdvIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiT1lBIEd1ZnVuZ3VyYSBrdWdpcmFuZ28iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJPWUEgR3VmdW5ndXJhIGt1Z2lyYW5nbyBOYSIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgotbXNnc3RyICJPWUEgR3VmdW5nYSIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAiT1lBIEd1c29tYSBCaXZ1eWUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAiT1lBIEt3YW5kaWthIEt1cmkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk9ZQSBrdSIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJPWUEgS3VyaW5nYW5pemEga3UiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIk9ZQSBLdWJvbmEgR3VzaHlpcmFobyBBbWFnZW5hbWl0ZXJlcmUgQml2dXllIGt1IgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHJlc291cmNlLiIKLW1zZ3N0ciAiT1lBIEt3YW5kaWthIEt1cmkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJhIFJ1c2FuZ2UgSXNvbWVybyBJa29zYSIKLQotIywgZnV6enkKLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIkJ5YSBpeWkgSURPU0lZRSBhIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJPWUEgVWJ3b2tvIEJ5YSIKLQotIywgZnV6enkKLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIm5pIEJ5YSBhIFVid29rbyBrdSBpeWkgSWtpZ2l6ZToiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICJuaSBPeWEgaSBVYndva28iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJPWUEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJPWUEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIk9ZQSIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIk9ZQSIKLQotIywgZnV6enkKLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJuaSBCeWEgaSBJbWl0ZXJlcmUiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJJa29zYSBVYnV0dW13YSBrdWdpcmFuZ28gVXJ3ZWdvIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICJCaXNhbnp3ZSBJa29zYSBVYnV0dW13YSBrdWdpcmFuZ28gVXJ3ZWdvIE5hIElURUdFS09OR0VOR0EiCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgInVtdXR3ZSIKLQotIywgZnV6enkKLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJVbXV0d2UiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIlVtdXR3ZSIKLQotIywgZnV6enkKLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgIlVtdWhhbnppIgotCi0jLCBmdXp6eQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiUyBOc2hpbmd3YWJpa29yd2Ega3VnaXJhbmdvIGkiCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIlMgTnNoaW5nd2FiaWtvcndhIGt1Z2lyYW5nbyBpIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAiaXlpIElieWF0YW56d2UiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJpeWkgSWJ5YXRhbnp3ZSIKLQotIywgZnV6enkKLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgIlVtdWhhbnppIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiSXRhcmlraSIKLQotIywgZnV6enkKLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgIkl0YXJpa2kgaSBJYnlhdGFuendlIEJ5YXJlbXdlIGluIEthbGluZGFyaSBJbWluc2kiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgIkl0YXJpa2kiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJJdGFyaWtpIGkgSWJ5YXRhbnp3ZSBCeWFyZW13ZSBpbiBLYWxpbmRhcmkgSW1pbnNpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAiaXlpIElieWF0YW56d2UgS3VyaSIKLQotIyBwYWRtaW4vc291cmNlXHBhZGlhbG9nLnNyYzpSSURfVFhUX1RFU1RQQUdFX0NPTU1FTlQudGV4dAotIywgZnV6enkKLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJJY3lvIHdvbmdlcmFobyIKLQotIywgZnV6enkKLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAiS2lnZW5nYSBVbXdhbmRpa28gaSBJYnlhdGFuendlIgotCi0jIHBhZG1pbi9zb3VyY2VccGFkaWFsb2cuc3JjOlJJRF9UWFRfVEVTVFBBR0VfQ09NTUVOVC50ZXh0Ci0jLCBmdXp6eQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgIkljeW8gd29uZ2VyYWhvIgotCi0jLCBmdXp6eQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKLW1zZ3N0ciAiS2lnZW5nYSBVbXdhbmRpa28gaSBJYnlhdGFuendlIgotCi0jLCBmdXp6eQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAiVW11YmFyZSIKLQotIywgZnV6enkKLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiVW11YmFyZSBNbyBJbWJlcmUgYSIKLQotIywgZnV6enkKLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAiSUJBUkEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAiSUJBUkEgQnlhIE1vIEltYmVyZSBpeWkgS3VyaSIKLQotIywgZnV6enkKLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAiRElTSUtJIFVtdWJhcmUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGlzYyBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAiRElTSUtJIFVtdWJhcmUgTW8gSW1iZXJlIGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAiRElTSUtJIElCQVJBIgotCi0jLCBmdXp6eQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICJJQkFSQSBCeWEgTW8gSW1iZXJlIGl5aSBESVNJS0kgS3VyaSIKLQotbXNnaWQgImxvY2F0aW9uIgotbXNnc3RyICJJbnR1cm8iCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJJc29iYW51cmFtaXRlcmVyZSIKLQotIywgZnV6enkKLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVtd2FuZGlrbyBpIEliaWt1Yml5ZW1vIEJ5YSBpIElieWF0YW56d2UiCi0KLSMgZ29vZGllcy9zb3VyY2VcZmlsdGVyLnZjbFxlcHNcZGxnZXBzLnNyYzpETEdfRVhQT1JUX0VQUy5HUlBfVkVSU0lPTi50ZXh0Ci0jLCBmdXp6eQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgIlZlcmlzaXlvIgotCi0jLCBmdXp6eQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJWZXJpc2l5byBCeWEgaXlpIElieWF0YW56d2UiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICJIVFRQIHd3dyBvcmciCi0KLSMsIGZ1enp5Ci1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJJaHV6YWdhaHVuZGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJVYnVyZW5nYW56aXJhIGJ3J3VtdWhpbWJ5aSIKLQotIywgZnV6enkKLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVYnVyZW5nYW56aXJhIGJ3J3VtdWhpbWJ5aSBCeWEgaSBJYnlhdGFuendlIgotCi0jLCBmdXp6eQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgIlVidXJlbmdhbnppcmEgYncndW11aGltYnlpIgotCi0jLCBmdXp6eQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiVWJ1cmVuZ2FuemlyYSBidyd1bXVoaW1ieWkgQnlhIGkgSWJ5YXRhbnp3ZSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIiIKLQotIyAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCi0jIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotIwotIyBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KLSMgMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0jIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0jCi0jIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCi0jIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQotIyBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQotIyBMaWNlbnNlLgotIwotIyBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29kZSwgcmVsZWFzZWQKLSMgTWFyY2ggMzEsIDE5OTguCi0jCi0jIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwotIyBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSMgUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OC0xOTk5Ci0jIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgQ29udHJpYnV0b3Iocyk6Ci0jCi0jIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCi0jIGVpdGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLAotIyBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKLSMgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKLSMgb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKLSMgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotIyB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgotIyBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotIyBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQotIyB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCi0jIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCi0jCi0jICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqCi0jIEJveCBIZWFkaW5ncwotIywgZnV6enkKLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICJVbXVudHUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiVW11bnR1IEliaXNvYmFudXJvIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAiQnlhIElieWF0YW56d2UiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgIkJ5YSBJYnlhdGFuendlIgotCi0jLCBmdXp6eQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiQnlhIElieWF0YW56d2UiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAiUyIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJTIE5zaGluZ3dhYmlrb3J3YSBrdWdpcmFuZ28gaSIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IgotbXNnc3RyICIiCi0KLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uQWdlbmRhVHlwZS5EdXJhdGlvbi50ZXh0Ci0jLCBmdXp6eQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJJZ2loZS0gbmdvbWJ3YSIKLQotIywgZnV6enkKLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAiVWJ1cmVidXJlIGluIElnaWhlIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImkgSWJ5YXRhbnp3ZSBuaSBpbiIKLQotIywgZnV6enkKLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAiVmlkZXdvLi4uIgotCi0jLCBmdXp6eQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiaSBWaWRld28uLi4gSWJ5YXRhbnp3ZSBuaSBpbiIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJpIElieWF0YW56d2UgbmkgaW4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgIlZpZGV3by4uLiIKLQotIywgZnV6enkKLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImkgVmlkZXdvLi4uIElieWF0YW56d2UgbmkgaW4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiVW11bnR1IEliaXNvYmFudXJvIgotCi0jLCBmdXp6eQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJpIElieWF0YW56d2UgbmkgaW4iCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiTllBQ1lPIEN5YW5nd2EgSW1wdXphbmRlbmdvIGluIFMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJTSElOR0lSTyIKLQotIywgZnV6enkKLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJTSElOR0lSTyBpbiBTIgotCi0jLCBmdXp6eQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAiR2l0byIKLQotIywgZnV6enkKLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJHaXRvIGluIFMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICJLaW5pbmkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiS2luaW5pIGluIFMiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiS3VyaSBpeWkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJWZXJpc2l5byIKLQotIywgZnV6enkKLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJWZXJpc2l5byBCeWEgaSBLdXJpIGl5aSIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgIlVtdWJhcmUgQnlhIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiaW4gREIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAiQnlhIGkiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJpbiBEQiIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJCeWEgaSIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICIiCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJLdXJpIGl5aSIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiS3VyaSBpeWkiCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAiVW13YW5kaWtvIGkgSWJpa3ViaXllbW8gQnlhIGkgSWJ5YXRhbnp3ZSIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAiSW50dXJvIgotCi1tc2dpZCAiIgotImh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aXZlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciAiCi0icHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbG9uZ2l0dWRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgIkludHVybyIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgIkludHVybyIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJJbnR1cm8iCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJJbnR1cm8iCi0KLW1zZ2lkICJleHBlY3RlZCBlcnJvciBvZiB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbmluZyBtZWFzdXJlcyAoaW4gbWV0ZXJzKSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAiSW50dXJvIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiSW50dXJvIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJJbnR1cm8iCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICJESVNJS0kgVW11YmFyZSIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAiRElTSUtJIFVtdWJhcmUiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiUyBOc2hpbmd3YWJpa29yd2Ega3VnaXJhbmdvIGkiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0KLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uQWdlbmRhVHlwZS5EdXJhdGlvbi50ZXh0Ci0jLCBmdXp6eQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJJZ2loZS0gbmdvbWJ3YSIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiVmVyaXNpeW8gQnlhIGkgS3VyaSBpeWkiCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIlZlcmlzaXlvIEJ5YSBpIEt1cmkgaXlpIgotCi0jLCBmdXp6eQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgIkludHVybyIKLQotIywgZnV6enkKLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIlZlcmlzaXlvIEJ5YSBpIEt1cmkgaXlpIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiQml2dXllIElraWdpemU6IgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIktvc29yYSBhbWFrb3NhIEliaXNvYmFudXJvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiT3lhIGluZGFuZ2FraW50dSBpbiBJa2lnaXplOiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJPWUEgR3VzaHlpcmFobyBpbmRhbmdha2ludHUgaW4gSWtpZ2l6ZTogS3VyaSIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJPWUEgSWh1emEgS3VyaSIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIk95YSBJa2lnaXplOiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgIk9ZQSBJbnl1Z3V0aSBua3VydSIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJPeWEgSWtpZ2l6ZToga3VnaXJhbmdvIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiT3lhIElua29tb2tvIElraWdpemU6IGt1Z2lyYW5nbyIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgInVidXNhIE9ZQSIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJPeWEgR3VzaW1idWthOiAlcyVzIgotCi0jLCBmdXp6eQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJ1YnVzYSBPWUEiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBjbG9jayBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIk9ZQSBLdWJvbmEgR3VzaHlpcmFobyBBbWFnZW5hbWl0ZXJlcmUgQml2dXllIGt1IgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk9ZQSBHdWZ1bmd1cmEgSURPU0lZRSBrdWdpcmFuZ28iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiS3VyaSBJRE9TSVlFIgotCi0jLCBmdXp6eQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJJRE9TSVlFIEl6aW5hOiBrdWdpcmFuZ28iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiT1lBIEd1ZnVuZ3VyYSBJRE9TSVlFIGt1Z2lyYW5nbyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIklET1NJWUUiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJLdXJpIElET1NJWUUiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJLdXJpIElET1NJWUUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIklET1NJWUUgSXppbmE6IGt1Z2lyYW5nbyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIk9ZQSBLdWJvbmEgR3VzaHlpcmFobyBBbWFnZW5hbWl0ZXJlcmUgQml2dXllIGt1IgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICJcIiVzXCJuaSBhIGJ1c2h5aW5ndXJvIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIklkb3NpeWUgbmkgYSIKLQotIywgZnV6enkKLW1zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgotbXNnc3RyICJOeXVtYSBBbWFzdWJpcmFtbyBOa2EiCi0KLSMgIy0jLSMtIy0jICBvZmZpY2VjZmcucG90IChQQUNLQUdFIFZFUlNJT04pICAjLSMtIy0jLSMKLSMgb2ZmaWNlY2ZnL3JlZ2lzdHJ5XHNjaGVtYVxvcmdcb3Blbm9mZmljZVxPZmZpY2VcV3JpdGVyLnhjczouLi4uUmV2aXNpb24uVGV4dERpc3BsYXkuSW5zZXJ0LkF0dHJpYnV0ZS4uNS50ZXh0Ci0jICMtIy0jLSMtIyAgb2ZmaWNlY2ZnLnBvdCAoUEFDS0FHRSBWRVJTSU9OKSAgIy0jLSMtIy0jCi0jIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXFdyaXRlci54Y3M6Li4uLlJldmlzaW9uLlRleHREaXNwbGF5LkRlbGV0ZS5BdHRyaWJ1dGUuLjQudGV4dAotIyAjLSMtIy0jLSMgIG9mZmljZWNmZy5wb3QgKFBBQ0tBR0UgVkVSU0lPTikgICMtIy0jLSMtIwotIyBvZmZpY2VjZmcvcmVnaXN0cnlcc2NoZW1hXG9yZ1xvcGVub2ZmaWNlXE9mZmljZVxXcml0ZXIueGNzOi4uLi5SZXZpc2lvbi5UZXh0RGlzcGxheS5DaGFuZ2VkQXR0cmlidXRlLkF0dHJpYnV0ZS4uNS50ZXh0Ci0jLCBmdXp6eQotbXNnaWQgImNhcHMiCi1tc2dzdHIgIklueXVndXRpIG5rdXJ1IgotCi0jLCBmdXp6eQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgImluIgotCi0jIG9mZmljZWNmZy9yZWdpc3RyeVxzY2hlbWFcb3JnXG9wZW5vZmZpY2VcT2ZmaWNlXENhbGMueGNzOi4uLi5MYXlvdXQuT3RoZXIuU3RhdHVzYmFyRnVuY3Rpb24uLjUudGV4dAotIywgZnV6enkKLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICJHaXRvIgotCi1tc2dpZCAiZm9yY2UgY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAiaXlpIElieWF0YW56d2UiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJpeWkgSWJ5YXRhbnp3ZSIKLQotbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgInVtdXR3ZSIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJJQkFSQSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiIgotbXNnc3RyWzFdICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJCeW9zZSBJYmludHUiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJPWUEgR3VmdW5ndXJhIElET1NJWUUga3VnaXJhbmdvIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAiT3lhIElua29tb2tvIElraWdpemU6IGt1Z2lyYW5nbyIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJCaXZ1eWUgSWtpZ2l6ZToiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICJCaXZ1eWUgSWtpZ2l6ZToiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJCaXZ1eWUgSWtpZ2l6ZToiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIkJpdnV5ZSBJa2lnaXplOiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJCaXZ1eWUgSWtpZ2l6ZToiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkJ5YWJvbmV0c2Uga3UgSWtpZ2l6ZToiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiQnlhYm9uZXRzZSBrdSBJa2lnaXplOiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJCeWFib25ldHNlIGt1IElraWdpemU6IgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiQnlhYm9uZXRzZSBrdSBJa2lnaXplOiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJCeWFib25ldHNlIGt1IElraWdpemU6IgotCi1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiQml2dXllIElraWdpemU6IgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiT3lhIElraWdpemU6IgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiQml2dXllIElraWdpemU6IgotCi0jLCBmdXp6eQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiTmthIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIkltaW1lcmVyZSBJYmlzb2JhbnVybyBOYSBpbmRhbmdha2ludHUgSWJpbWVueWV0c28iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiT1lBIEliaXNvaG9rYSBJbWltZXJlcmUgSWJpc29iYW51cm8gQnlhIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiT1lBIEt3aW5qaXphIHBvcm9nYXJhbXUgYSIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICJPWUEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiT1lBIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAiaSBJa2lnaXplOiBCeWFib25ldHNlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJLdXJpIEd1a2luYSIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiS3VyaSBHdWtpbmEiCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiS3VyaSBHdWtpbmEiCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgotI34gbXNnc3RyICJPWUEgSWJpc29ob2thIEltaW1lcmVyZSBJYmlzb2JhbnVybyBCeWEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotI34gbXNnc3RyICJJaHV6YSBJbmtvbW9rbyBJa2lnaXplOiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgotI34gbXNnc3RyICJJaHV6YSBJa2lnaXplOiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAiT3lhIElraWdpemU6IEt1cmkgSWh1emEgS3VyaSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0jfiBtc2dzdHIgIk9ZQSBJaHV6YSBJa2lnaXplOiBrdWdpcmFuZ28iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiTklCQSBCaWtvcmEga3UgR3VrdXNhbnlhIElnaWhlIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIklET1NJWUUgeG1sIElraWdpemU6IGluZGFuZ2FraW50dSBBZ2FjaXJvIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiQnlhIHhtbCBJRE9TSVlFIEJ5YW56ZSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIk95YSBJa2lnaXplOiBpbiBJRE9TSVlFIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKLSN+IG1zZ3N0ciAiSWtpZ2l6ZTogbmkga3UgaXlpIElnaWhlIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiT1lBIEtvbWFuZGk6IFVtdXJvbmdvIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCi0jfiBtc2dzdHIgIklraWdpemU6IE9ZQSBCeWFib25ldHNlIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlNhdmUgeG1sIHJlcHJlc2VudGF0aW9uIG9mIHBpcGVsaW5lIHRvIEZJTEUgYW5kIGV4aXQiCi0jfiBtc2dzdHIgIkt1YmlrYSB4bWwgQnlhIEt1cmkgTmEgR3Vzb2hva2EiCi0KLSN+IG1zZ2lkICJGSUxFIgotI34gbXNnc3RyICJJRE9TSVlFIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKLSN+IG1zZ3N0ciAiT1lBIEt3aW5qaXphIHBvcm9nYXJhbXUgYSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgZGVzY3JpcHRvciBcIiVkXCIuIgotI34gbXNnc3RyICJLdXJpIElET1NJWUUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJWRcIi4iCi0jfiBtc2dzdHIgIkt1cmkgSURPU0lZRSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQuIgotI34gbXNnc3RyICJJa29zYSBMZXRhIEd1aGluZHVyYT4+IEJ5YW56ZSBJZG9zaXllIGEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKLSN+IG1zZ3N0ciAiVW13aW1lcmVyZSBBaGFudHUgQnlhIElET1NJWUUgTmthIGEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRGlzYWJsZSBhY2NlbGVyYXRlZCBDUFUgaW5zdHJ1Y3Rpb25zIgotI34gbXNnc3RyICJBbWFid2lyaXphIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlJlZ2lzdHJ5IHRvIHVzZSIKLSN+IG1zZ3N0ciAiS3VyaSBHdWtvcmVzaGEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAicGF0aCBsaXN0IGZvciBsb2FkaW5nIHBsdWdpbnMgKHNlcGFyYXRlZCBieSAnJXMnKSIKLSN+IG1zZ3N0ciAiSW56aXJhIFVydXRvbmRlIGt1Z2lyYW5nbyBJdGFuZ2lyYS4uLiBrdSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJTY2hlZHVsZXIgdG8gdXNlIChkZWZhdWx0IGlzICclcycpIgotI34gbXNnc3RyICJLdXJpIEd1a29yZXNoYSBNYnVyYWJ1emkgbmkiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzY2hlZHVsZXIgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICJJa29zYSBJZG9zaXllIGEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVGhlcmUgaXMgbm8gZWxlbWVudCBwcmVzZW50IHRvIGhhbmRsZSB0aGUgc3RyZWFtJ3MgbWltZSB0eXBlICVzLiIKLSN+IG1zZ3N0ciAibmkgT3lhIElraWdpemU6IEt1cmkgaSBVYndva28iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiIgotI34gIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlcyBpdGVyYXRpb25zIChzdW0gJXMgbnMsIGF2ZXJhZ2UgJXMgbnMsIG1pbiAlcyBucywgIgotI34gIm1heCAlcyBucykuXG4iCi0jfiBtc2dzdHIgIk55dW1hIEFtYXN1YmlyYW1vIElnaXRlcmFueW8gSW1wdXphbmRlbmdvIEdJVE8gS0lOSU5JIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk51bWJlciBvZiB0aW1lcyB0byBpdGVyYXRlIHBpcGVsaW5lIgotI34gbXNnc3RyICJCeWEgVGltZXMgS3VyaSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKLSN+IG1zZ3N0ciAiS3VyaSBHdWtvcmVzaGEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQWRkZWQgcGx1Z2luICVzIHdpdGggJWQgJXMuXG4iCi0jfiBtc2dzdHIgIk5hOiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJBZGRlZCBwYXRoICAgJXMgdG8gJXMgXG4iCi0jfiBtc2dzdHIgIkluemlyYSBLdXJpIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlRyeWluZyB0byBsb2FkICVzIC4uLlxuIgotI34gbXNnc3RyICJLdXJpIEliaXJpbW8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRXJyb3IgbG9hZGluZyAlc1xuIgotI34gbXNnc3RyICJJdGFuZ2lyYS4uLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJMb2FkZWQgJWQgcGx1Z2lucyB3aXRoICVkICVzLlxuIgotI34gbXNnc3RyICJOYToiCmRpZmYgLS1naXQgYS9wby9zay5nbW8gYi9wby9zay5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OTlmZDYuLjAwMDAwMDAKLS0tIGEvcG8vc2suZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vc2sucG8gYi9wby9zay5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc3ZjcyZS4uMDAwMDAwMAotLS0gYS9wby9zay5wbworKysgL2Rldi9udWxsCkBAIC0xLDE0MDMgKzAsMCBAQAotIyB0cmFuc2xhdGlvbiBvZiBzay5wbyB0byBTbG92YWsKLSMgU2xvdmFrIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci4KLSMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IGdzdHJlYW1lcidzIENPUFlSSUdIVCBIT0xERVIKLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMKLSMgUGV0ZXIgVHVow6Fyc2t5IDx0dWhhcnNreUBtaXNiYi5zaz4sIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTQsIDIwMTYuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS43LjkwXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDUtMjAgMTE6MzIrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogUGV0ZXIgVHVow6Fyc2t5IDx0dWhhcnNreUBtaXNiYi5zaz5cbiIKLSJMYW5ndWFnZS1UZWFtOiBTbG92YWsgPHNrLWkxOG5AbGlzdHMubGludXguc2s+XG4iCi0iTGFuZ3VhZ2U6IHNrXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiIKLSIlMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCi0iWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjYuMTBcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAiVnlww61zYcWlIHZlcnppdSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiQ2jDoXBhxaUgdsWhZXRreSB2YXJvdmFuaWEgYWtvIHrDoXZhxb5uw6kiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiVnlww61zYcWlIGRvc3R1cG7DqSBsYWRpYWNlIGthdGVnw7NyaWUgYSBza29uxI1pxaUiCi0KLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSJQcmVkdm9sZW7DoSDDunJvdmXFiCBsYWRlbmlhIG9kIDEgKGxlbiBjaHlieSkgcG8gOSAodsWhZXRrbykgYWxlYm8gMCAoYmV6ICIKLSJ2w71zdHVwdSkiCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiw5pST1ZFxYciCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0ixIxpYXJrYW1pIG9kZGVsZW7DvSB6b3puYW0gZHZvasOtYyBuw6F6b3Zfa2F0ZWfDs3JpZTrDunJvdmXFiCBwcmUgbmFzdGF2ZW5pZSAiCi0ixaFwZWNpZmlja8O9Y2ggw7pyb3Zuw60gcHJlIGplZG5vdGxpdsOpIGthdGVnw7NyaWUuIFByw61rbGFkOiBHU1RfQVVUT1BMVUc6NSwiCi0iR1NUX0VMRU1FTlRfKjozIgotCi1tc2dpZCAiTElTVCIKLW1zZ3N0ciAiWk9aTkFNIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIlpha8OhemHFpSBmYXJlYm7DvSBsYWRpYWNpIHbDvXN0dXAiCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotIlptZW7DrSBmYXJlYm7DvSByZcW+aW0gbGFkaWFjZWhvIHbDvXN0dXB1LiBEb3N0dXBuw6kgcmXFvmlteTogemFwbnV0w70sIHZ5cG51dMO9LCAiCi0iemFrw6F6YW7DvSwgYXV0b21hdGlja8O9LCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIlpha8OhemHFpSBsYWRlbmllIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIlBvdm9sacWlIHBvZHJvYm7DuiBkaWFnbm9zdGlrdSBuYcSNw610YXZhbmlhIHrDoXN1dm7DvWNoIG1vZHVsb3YiCi0KLW1zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgotbXNnc3RyICJEdm9qYm9ka291IG9kZGVsZW7DqSBjZXN0eSwga3RvcsOpIG9ic2FodWrDuiB6w6FzdXZuw6kgbW9kdWx5IgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIkNFU1RZIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIsSMaWFya2FtaSBvZGRlbGVuw70gem96bmFtIHrDoXN1dm7DvWNoIG1vZHVsb3YsIGt0b3LDqSBzYSBtYWrDuiBwcmVkbmHEjcOtdGHFpSBwb3ByaSAiCi0iem96bmFtZSwga3RvcsO9IGplIHVsb8W+ZW7DvSB2IHByZW1lbm5laiBwcm9zdHJlZGlhIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIlrDgVNVVk7DiSBNT0RVTFkiCi0KLW1zZ2lkICJEaXNhYmxlIHRyYXBwaW5nIG9mIHNlZ21lbnRhdGlvbiBmYXVsdHMgZHVyaW5nIHBsdWdpbiBsb2FkaW5nIgotbXNnc3RyICJaYWvDoXphxaUgemFjaHl0w6F2YW5pZSBjaMO9YiBzZWdtZW50w6FjaWUgcG/EjWFzIG5hxI3DrXRhbmlhIHrDoXN1dm7DqWhvIG1vZHVsdSIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJaYWvDoXphxaUgYWt0dWFsaXrDoWNpdSByZWdpc3Ryb3YiCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJaYWvDoXphxaUgdnl0dsOhcmFuaWUgcG9tb2Nuw71jaCBwcm9jZXNvdiBwb8SNYXMgc2tlbm92YW5pYSByZWdpc3Ryb3YiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiTW/Fvm5vc3RpIHByZSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJab2JyYXppxaUgbW/Fvm5vc3RpIHByZSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAiTmV6bsOhbWEgbW/Fvm5vc8WlIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbmFyYXppbCBuYSB2xaFlb2JlY27DuiBjaHlidSBobGF2bmVqIGtuacW+bmljZS4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotIlbDvXZvasOhcmkgR1N0cmVhbWVyIGJvbGkgcHLDrWxpxaEgbGVuaXbDrSBuYSB0bywgYWJ5IHRlanRvIGNoeWJlIHByaXJhZGlsaSBrw7NkLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjoga8OzZCBuZWJvbCBpbXBsZW1lbnRvdmFuw70uIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iQ2h5YmEgR1N0cmVhbWVyOiB6bHloYWxhIHptZW5hIHN0YXZ1IGEgbmlla3RvcsO9IHBydm9rIG5lZG9rw6F6YWwgcG9zbGHFpSAiCi0icGF0cmnEjW7DqSBobMOhc2VuaWUgbyBjaHliZSBzIGTDtHZvZG9tIHpseWhhbmlhLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogcHJvYmzDqW0gcHJpIHZ5cGzFiG92YW7DrS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiVm7DunRvcm7DoSBjaHliYSBHU3RyZWFtZXI6IHByb2Jsw6ltIHMgdmzDoWtuYW1pLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIlZuw7p0b3Juw6EgY2h5YmEgR1N0cmVhbWVyOiBwcm9ibMOpbSBwcmkgdnlqZWRuw6F2YW7DrS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogcHJvYmzDqW0gcyB1ZGFsb3PFpWFtaS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIlZuw7p0b3Juw6EgY2h5YmEgR1N0cmVhbWVyOiBwcm9ibMOpbSBzIG5hc3RhdmVuw61tIHBvesOtY2llLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAiVm7DunRvcm7DoSBjaHliYSBHU3RyZWFtZXI6IHByb2Jsw6ltIHNjaG9wbm9zdMOtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogcHJvYmzDqW0gc28gem5hxI1rYW1pLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIlZhxaFlaiBpbsWhdGFsw6FjaWkgR1N0cmVhbWVyIGNow71iYSBuZWpha8O9IHrDoXN1dm7DvSBtb2R1bC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogcHJvYmzDqW0gcyDEjWFzb3ZhbsOtbS4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotIlTDoXRvIGFwbGlrw6FjaWEgc2EgcG9rw7rFoWEgcG91xb5pxaUgdGFrw7ogZnVua2Npb25hbGl0dSBHU3RyZWFtZXIsIGt0b3LDoSBqZSAiCi0idnlwbnV0w6EuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbmFyYXppbCBuYSB2xaFlb2JlY27DuiBjaHlidSBwb2Rwb3JuZWoga25pxb5uaWNlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgaW5pY2lhbGl6b3ZhxaUgcG9kcG9ybsO6IGtuacW+bmljdS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSB6YXR2b3JpxaUgcG9kcG9ybsO6IGtuacW+bmljdS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgbmFzdGF2acWlIHBvZHBvcm7DuiBrbmnFvm5pY3UuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJDaHliYSBwcmkga8OzZG92YW7DrS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIG5hcmF6aWwgbmEgdsWhZW9iZWNuw7ogY2h5YnUgemRyb2pvdi4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJaZHJvaiBzYSBuZW5hxaFpZWwuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiWmRyb2ogc2EgcG91xb7DrXZhIGFsZWJvIG5pZSBqZSBrIGRpc3BvesOtY2lpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBvdHZvcmnFpSB6ZHJvaiBuYSDEjcOtdGFuaWUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHpkcm9qIG5hIHrDoXBpcy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2Egb3R2b3JpxaUgemRyb2ogbmEgxI3DrXRhbmllIGEgesOhcGlzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgemF0dm9yacWlIHpkcm9qLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIMSNw610YcWlIHpvIHpkcm9qYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIHphcGlzb3ZhxaUgbmEgemRyb2ouIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgbmFzdGF2acWlIHBvesOtY2l1IG5hIHpkcm9qaS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIHN5bmNocm9uaXpvdmHFpSBzbyB6ZHJvam9tLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIHrDrXNrYcWlL3VwcmF2acWlIG5hc3RhdmVuaWEgemRyb2phLiIKLQotbXNnaWQgIk5vIHNwYWNlIGxlZnQgb24gdGhlIHJlc291cmNlLiIKLW1zZ3N0ciAiTmEgemRyb2ppIHXFviBuZXpvc3RhbG8gbWllc3RvLiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIk5lZG9zdGF0b8SNbsOpIHByw6F2YSBuYSBwcsOtc3R1cCBrIHRvbXV0byB6ZHJvanUuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbmFyYXppbCBuYSB2xaFlb2JlY27DuiBjaHlidSBwcsO6ZHUgw7pkYWpvdi4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIiIKLSJQcnZvayBuZWltcGxlbWVudHVqZSBvYnNsdWh1IHRvaG90byBwcsO6ZHUgw7pkYWpvdi4gT2hsw6FzdGUgcHJvc8OtbSB0dXRvIGNoeWJ1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIHppc3RpxaUgdHlwIHByw7pkdSDDumRham92LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIlRlbnRvIHByw7pkIMO6ZGFqb3YgamUgb2RsacWhbsOpaG8gdHlwdSwgbmXFviBqZSBzY2hvcG7DvSBvYnNsw7rFvmnFpSB0ZW50byBwcnZvay4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIiIKLSJOaWUgamUgayBkaXNwb3rDrWNpaSDFvmlhZG55IGtvZGVrLCBrdG9yw70gYnkgZG9rw6F6YWwgb2JzbMO6xb5pxaUgdGVudG8gdHlwIHByw7pkdSAiCi0iw7pkYWpvdi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgZGVrw7Nkb3ZhxaUgcHLDumQgw7pkYWpvdi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgemFrw7Nkb3ZhxaUgcHLDumQgw7pkYWpvdi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBkZW11bHRpcGxleG92YcWlIHByw7pkIMO6ZGFqb3YuIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG11bHRpcGxleG92YcWlIHByw7pkIMO6ZGFqb3YuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAiVGVudG8gcHLDumQgw7pkYWpvdiBqZSB2IG5lc3Byw6F2bm9tIGZvcm3DoXRlLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJUZW50byBwcsO6ZCDDumRham92IGplIMWhaWZyb3ZhbsO9IGEgZGXFoWlmcm92YW5pZSBuaWUgamUgcG9kcG9yb3ZhbsOpIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIlRlbnRvIHByw7pkIMO6ZGFqb3YgamUgxaFpZnJvdmFuw70gYSBuZWTDoSBzYSBkZcWhaWZyb3ZhxaUsIHByZXRvxb5lIG5pZSBqZSBrICIKLSJkaXNwb3rDrWNpaSB2aG9kbsO9IGvEvsO6xI0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIsW9aWFkbmEgY2h5Ym92w6Egc3Byw6F2YSBwcmUgZG9tw6ludSAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAixb1pYWRuYSDFoXRhbmRhcmRuw6EgY2h5Ym92w6Egc3Byw6F2YSBwcmUgZG9tw6ludSAlcyBhIGvDs2QgJWQuIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICJWeWJyYW7DvSDEjWFzb3ZhxI0gc2EgbmVkw6EgcG91xb5pxaUgdiByw7pyZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIkNoeWJhIHByaSB6w6FwaXNlIHZ5cm92bsOhdmFjZWogcGFtw6R0ZSByZWdpc3Ryb3YgZG8gJXM6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIm7DoXpvdiIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgIsSNYXN0byBwb3XFvsOtdmFuw70gbsOhem92IgotCi1tc2dpZCAidGl0bGUgc29ydG5hbWUiCi1tc2dzdHIgIm7DoXpvdi90cmllZGVuaWUiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLEjWFzdG8gcG91xb7DrXZhbsO9IG7DoXpvdiwgbmEgw7rEjWVseSB0cmllZGVuaWEiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgInVtZWxlYyIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAib3NvYnkgem9kcG92ZWRuw6kgemEgbmFocsOhdmt1IgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJ1bWVsZWMvdHJpZWRlbmllIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJvc29ieSB6b2Rwb3ZlZG7DqSB6YSBuYWhyw6F2a3UsIG5hIMO6xI1lbHkgdHJpZWRlbmlhIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImFsYnVtIG9ic2FodWrDumNpIHRpZXRvIMO6ZGFqZSIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICJhbGJ1bS90cmllZGVuaWUiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiYWxidW0gb2JzYWh1asO6Y2kgdGlldG8gw7pkYWplLCBuYSDDusSNZWx5IHRyaWVkZW5pYSIKLQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAidW1lbGVjIGFsYnVtdSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiVW1lbGVjIGNlbMOpaG8gYWxidW11LCBha28gc2EgbcOhIHpvYnJhemnFpSIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAibWVubyB1bWVsY2EgYWxidW11IHByZSB0cmllZGVuaWUiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIlVtZWxlYyBjZWzDqWhvIGFsYnVtdSwgYWtvIHNhIG3DoSB6b3JhZGnFpSIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImTDoXR1bSIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiZMOhdHVtLCBrZWR5IGJvbGkgdGlldG8gw7pkYWplIHZ5dHZvcmVuw6kgKGFrbyDFoXRydWt0w7pyYSBHRGF0ZSkiCi0KLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAiZMOhdHVtIGEgxI1hcyIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAiIgotImTDoXR1bSBhIMSNYXMsIGtlZHkgYm9saSB0aWV0byDDumRhamUgdnl0dm9yZW7DqSAoYWtvIMWhdHJ1a3TDunJhIEdzdERhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICLFvsOhbmVyIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIsW+w6FuZXIsIGRvIGt0b3LDqWhvIHBhdHJpYSB0aWV0byDDumRhamUiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJwb3puw6Fta2EiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAidm/Evm7DvSB0ZXh0IGtvbWVudHVqw7pjaSDDumRhamUiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICJyb3rFocOtcmVuw6EgcG96bsOhbWthIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0idnnEjWlzdGnFpSB0ZXh0IHBvem7DoW1reSBrdSDDumRham9tIHZvIGZvcm3DoXRlIGtleT12YWx1ZSBhbGVibyBrZXlbZW5dPWNvbW1lbnQgIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICLEjcOtc2xvIHN0b3B5IgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIsSNw61zbG8gc3RvcHkgdiByw6FtY2kgemJpZXJreSIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICJwb8SNZXQgc3TDtHAiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJwb8SNZXQgc3TDtHAgdiB6YmllcmtlLCBkbyBrdG9yZWogcGF0csOtIHTDoXRvIHN0b3BhIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgIsSNw61zbG8gZGlza3UiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLEjcOtc2xvIGRpc2t1IHYgcsOhbWNpIHpiaWVya3kiCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICJwb8SNZXQgZGlza292IgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgInBvxI1ldCBkaXNrb3YgdiByw6FtY2kgemJpZXJreSwgZG8ga3RvcmVqIHRlbnRvIGRpc2sgcGF0csOtIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgInVtaWVzdG5lbmllIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJaZHJvaiBtw6lkaWEsIGFrbyBuYXByw61rbGFkIFVSSSAobWllc3RvLCBrZGUgamUgdWxvxb5lbsO9IG9yaWdpbsOhbCB0b2h0byBzw7pib3J1ICIKLSJhbGVibyBwcsO6ZHUgw7pkYWpvdikiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAiZG9tb3Zza8OhIHN0csOhbmthIgotCi1tc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKLW1zZ3N0ciAiRG9tb3Zza8OhIHN0csOhbmthIHRvaHRvIG3DqWRpYSAobmFwci4gdW1lbGNhLCBhbGVibyBmaWxtdSkiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAicG9waXMiCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgImtyw6F0a3kgdGV4dCBwb3Bpc3Vqw7pjaSBvYnNhaCDDumRham92IgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAidmVyemlhIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgInZlcnppYSB0w71jaHRvIMO6ZGFqb3YiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gdml6IGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXrDoWNpYSIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAicG96bsOhbWthIG8gYXV0b3Jza8O9Y2ggcHLDoXZhY2ggayDDumRham9tIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAidXJpIHByZSBjb3B5cmlnaHQiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSBwcmUgcG96bsOhbWt1IG8gYXV0b3Jza8O9Y2ggcHLDoXZhY2ggw7pkYWpvdiIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgImtvZMOpciIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIm1lbm8ga8OzZHVqw7pjZWogb3NvYnkgYWxlYm8gb3JnYW5pesOhY2llIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAia29udGFrdCIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgImtvbnRha3Ruw6kgaW5mb3Jtw6FjaWUiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaWNlbmNpYSIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAibGljZW5jaWEgw7pkYWpvdiIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJVUkkgbGljZW5jaWUiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSBrdSBsaWNlbmNpaSB0w71jaHRvIMO6ZGFqb3YiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgImludGVycHJldCIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJ2eXN0dXB1asO6Y2Ugb3NvYnkgIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgInNrbGFkYXRlxL4iCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgIm9zb2J5IHpvZHBvdmVkbsOpIHphIHNrbGFkYnUgbmFocsOhdmt5IgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICJkaXJpZ2VudCIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAidXByZXNuZW5pZSBkaXJpZ2VudGEvaW50ZXJwcmV0YSIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJ0cnZhbmllIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgImTEusW+a2EgdiBqZWRub3Rrw6FjaCDEjWFzdSBHU3RyZWFtZXIgKG5hbm9zZWt1bmTDoWNoKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWssIHYga3Rvcm9tIHPDuiDDumRhamUgdWxvxb5lbsOpIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgInZpZGVvIGtvZGVrIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2RlaywgdiBrdG9yb20gc8O6IHZpZGVvIMO6ZGFqZSB1bG/FvmVuw6kiCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAienZ1a292w70ga29kZWsiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImtvZGVrLCB2IGt0b3JvbSBzw7ogenZ1a292w6kgw7pkYWplIHVsb8W+ZW7DqSIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJrb2RlayBwcmUgdGl0dWxreSIKLQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29kZWsgcHJlIHRpdHVsa3kgc2EgbmFjaMOhZHphIHYiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJmb3Jtw6F0IGtvbnRham5lcnUiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiZm9ybcOhdCBrb250YWpuZXJ1LCB2IGt0b3JvbSBzw7ogdWxvxb5lbsOpIGTDoXRhIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAiQml0b3bDoSByw71jaGxvc8WlIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAicHJlc27DoSBhbGVibyBwcmllbWVybsOhIGJpdG92w6EgcsO9Y2hsb3PFpSB2IGJpdG9jaC9zIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJub21pbsOhbG5hIGJpdG92w6EgcsO9Y2hsb3PFpSIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm5vbWluw6FsbmEgYml0b3bDoSByw71jaGxvc8WlIHYgYml0b2NoL3MiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm1pbmltw6FsbmEgYml0b3bDoSByw71jaGxvc8WlIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibWluaW3DoWxuYSBiaXRvdsOhIHLDvWNobG9zxaUgdiBiaXRvY2gvcyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAibWF4aW3DoWxuYSBiaXRvdsOhIHLDvWNobG9zxaUiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJtYXhpbcOhbG5hIGJpdG92w6EgcsO9Y2hsb3PFpSB2IGJpdG9jaC9zIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAia29kw6lyIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAia29kw6lyIHBvdcW+w612YW7DvSBwcmUga8OzZG92YW5pZSB0b2hvdG8gcHLDumR1IMO6ZGFqb3YiCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgInZlcnppYSBrb2TDqXJ1IgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAidmVyemlhIGtvZMOpcnUgcG91xb7DrXZhbsOpaG8gcHJlIGvDs2RvdmFuaWUgdG9odG8gcHLDumR1IgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJzw6lyaW92w6kiCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICJzw6lyaW92w6kgxI3DrXNsbyBzdG9weSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAicHJlaHLDoXZhY8OtIHppc2sgc3RvcHkiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJ6aXNrIHN0b3B5IHYgZGIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgIsWhcGnEjWthIHByZWhyw6F2YWNpZWhvIHppc2t1IHN0b3B5IgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgIsWhcGnEjWthIHN0b3B5IgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJwcmVocsOhdmFjw60gemlzayBhbGJ1bXUiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJ6aXNrIGFsYnVtdSB2IGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICLFoXBpxI1rYSBwcmVocsOhdmFjaWVobyB6aXNrdSBhbGJ1bXUiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAixaFwacSNa2EgYWxidW11IgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgInJlZmVyZW7EjW7DoSDDunJvdmXFiCBwcmVocsOhdmFjaWVobyB6aXNrdSBzdG9weSIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgIlJlZmVyZW7EjW7DoSDDunJvdmXFiCB6aXNrdSBwcmUgc3RvcHUgYSBwcmUgYWxidW0iCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJqYXp5a292w70ga8OzZCIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgIiIKLSJKYXp5a292w70ga8OzZCBwcmUgdGVudG8gcHLDumQgw7pkYWpvdiwgdiBzw7psYWRlIHMgSVNPLTYzOS0xIGFsZWJvIElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgIm7DoXpvdiBqYXp5a3UiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAibsOhem92IHJlxI1pIHRvaHRvIHByw7pkdSDDumRham92IgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgIm9icsOhem9rIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAib2Jyw6F6b2sgem9kcG92ZWRhasO6Y2kgayB0b211dG8gcHLDumR1IMO6ZGFqb3YiCi0KLSMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQotbXNnaWQgInByZXZpZXcgaW1hZ2UiCi1tc2dzdHIgInVrw6HFvmthIG9icsOhemt1IgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJ1a8Ohxb5rYSBvYnLDoXprdSB6b2Rwb3ZlZGFqw7pjYSB0b211dG8gcHLDumR1IMO6ZGFqb3YiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJwcsOtbG9oYSIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgInPDumJvciBwcmlwb2plbsO9IGt1IHRvbXV0byBwcsO6ZHUgw7pkYWpvdiIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgIsO6ZGVyb3YgemEgbWluw7p0dSIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICJwb8SNZXQgw7pkZXJvdiB6YSBtaW7DunR1LCB2byB6dnVrdSIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICJrxL7DusSNb3bDqSBzbG92w6EiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAia8S+w7rEjW92w6kgc2xvdsOhLCBvcGlzdWrDumNlIG9ic2FoLCBvZGRlbGVuw6kgxI1pYXJrb3UiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAiemVtZXBpc27DoSBwb2xvaGEgLSBuw6F6b3YiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotIm9waXMgbWllc3RhLCB2IMS+dWRza2VqIHJlxI1pLCBrZGUgYm9saSB0aWV0byBtw6lkacOhIG5haHJhdMOpIGFsZWJvIHByb2R1a292YW7DqSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAiemVtZXBpc27DoSDFocOtcmthIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0iemVtZXBpc27DoSDFocOtcmthIG1pZXN0YSwga2RlIGJvbGkgdGlldG8gbcOpZGnDoSBuYWhyYXTDqSBhbGVibyBwcm9kdWtvdmFuw6ksIHYgIgotInN0dXDFiG9jaCBwb2TEvmEgV0dTODQgKDAgcHJlIHJvdm7DrWssIHrDoXBvcm7DqSBob2Rub3R5IHByZSBqdcW+bsOpIMWhw61ya3kpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAiemVtZXBpc27DoSBkxLrFvmthIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotInplbWVwaXNuw6EgZMS6xb5rYSBtaWVzdGEsIGtkZSBib2xpIHRpZXRvIG3DqWRpw6EgbmFocmF0w6kgYWxlYm8gcHJvZHVrb3ZhbsOpLCB2ICIKLSJzdHVwxYhvY2ggcG9kxL5hIFdHUzg0ICgwIHByZSBudWx0w70gcG9sdWRuw61rIHYgR3JlZW53aWNoL1VLLCB6w6Fwb3Juw6kgaG9kbm90eSAiCi0icHJlIHrDoXBhZG7DqSBkxLrFvmt5KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgIm5hZG1vcnNrw6EgdsO9xaFrYSIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSJ6ZW1lcGlzbsOhIG5hZG1vcnNrw6EgdsO9xaFrYSAgbWllc3RhLCBrZGUgYm9saSB0aWV0byBtw6lkacOhIG5haHJhdMOpIGFsZWJvICIKLSJwcm9kdWtvdmFuw6ksIHYgbWV0cm9jaCBwb2TEvmEgV0dTODQgKDAgamUgcHJpZW1lcm7DoSBobGFkaW5hIG1vcmEpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgInplbWVwaXNuw6EgcG9sb2hhIC0ga3JhamluYSIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJrcmFqaW5hICh2IGFuZ2xpxI10aW5lKSwga2RlIGJvbG8gdG90byBtw6lkaXVtIG5haHJhdMOpIGFsZWJvIHByb2R1a292YW7DqSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICJ6ZW1lcGlzbsOhIHBvbG9oYSAtIG1lc3RvIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIm1lc3RvICh2IGFuZ2xpxI10aW5lKSwga2RlIGJvbG8gdG90byBtw6lkaXVtIG5haHJhdMOpIGFsZWJvIHByb2R1a292YW7DqSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAiemVtZXBpc27DoSBwb2xvaGEgLSB1cHJlc25lbmllIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLSJ1bWllc3RuZW5pZSB2IHLDoW1jaSBtZXN0YSwga2RlIGJvbG8gdG90byBtw6lkaXVtIHZ5cHJvZHVrb3ZhbsOpIGFsZWJvICIKLSJ2eXR2b3JlbsOpIChuYXByLiB2IHN1c2Vkc3R2ZSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAiZ2VvZ3JhZmlja8OhIHBvbG9oYSAtIHZvZG9yb3Zuw6Egb2RjaMO9bGthIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgIm/EjWFrw6F2YW7DoSBvZGNow71sa2Egdm9kb3Jvdm7DqWhvIHVtaWVzdG5lbmlhICh2IG1ldHJvY2gpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJ6ZW1lcGlzbsOhIHBvbG9oYSAtIHLDvWNobG9zxaUgcG9oeWJ1IgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICJyw71jaGxvc8WlIHBvaHlidSB6YWNoeXTDoXZhasO6Y2VobyB6YXJpYWRlbmlhIHBvxI1hcyB6YWNoeXTDoXZhbmlhIHYgbS9zIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAiemVtZXBpc27DoSBwb2xvaGEgLSBzbWVyIHBvaHlidSIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotInVrYXp1amUgc21lciBwb2h5YnUgemFyaWFkZW5pYSwga3RvcsOpIHZ5a29uw6F2YWxvIHphY2h5dMOhdmFuaWUgbcOpZGlhLiBKZSAiCi0icmVwcmV6ZW50b3ZhbsO9IGFrbyBzdHVwbmUgdiBuZWNlbG/EjcOtc2VsbmVqIHJlcHJlemVudMOhY2lpLCAwIHpuYW1lbsOhICIKLSJnZW9ncmFmaWNrw70gc2V2ZXIsIGEgenZ5xaF1amUgc2EgdiBzbWVyZSBob2Rpbm92w71jaCBydcSNacSNaWVrIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJ6ZW1lcGlzbsOhIHBvbG9oYSAtIHNtZXIgemFjaHl0w6F2YW5pYSIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotInVrYXp1amUgc21lciwga2FtIHphcmlhZGVuaWUgc21lcm92YWxvIHBvxI1hcyB6YWNoeXTDoXZhbmlhIG3DqWRpYS4gSmUgIgotInJlcHJlemVudG92YW7DvSBha28gc3R1cG5lIHYgbmVjZWxvxI3DrXNlbG5laiByZXByZXplbnTDoWNpaSwgMCB6bmFtZW7DoSAiCi0iZ2VvZ3JhZmlja8O9IHNldmVyLCBhIHp2ecWhdWplIHNhIHYgc21lcmUgaG9kaW5vdsO9Y2ggcnXEjWnEjWllayIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICJuw6F6b3YgxaFvdSIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIk7DoXpvdiB0di9wb2RjYXN0L3NlcmnDoWxvdmVqIMWhb3UgeiBrdG9yw6lobyBwb2Now6FkemEgdG90byBtw6lkaXVtIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICJuw6F6b3YgxaFvdSBwcmUgdHJpZWRlbmllIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0iTsOhem92IHR2L3BvZGNhc3Qvc2VyacOhbG92ZWogxaFvdSB6IGt0b3LDqWhvIHBvY2jDoWR6YSB0b3RvIG3DqWRpdW0sIHByZSDDusSNZWx5ICIKLSJ0cmllZGVuaWEiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAixI3DrXNsbyBlcGl6w7NkeSIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICLEjMOtc2xvIGVwaXrDs2R5IHYgdG9tdG8gb2Jkb2LDrSwga3RvcsOpaG8gc8O6xI1hc8Wlb3UgamUgdG90byBtw6lkaXVtIgotCi1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAixI3DrXNsbyBvYmRvYmlhIgotCi1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIsSMw61zbG8gb2Jkb2JpYSB0ZWp0byDFoW91LCBrdG9yZWogc8O6xI1hc8Wlb3UgamUgdG90byBtw6lkaXVtIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJ0ZXh0IgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICJUZXh0IHRvaHRvIG3DqWRpYSwgenZ5xI1ham5lIHNhIHBvdcW+w612YSBwcmkgcGllc8WIYWNoIgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgIm1lbm8gc2tsYWRhdGXEvmEgcHJlIHRyaWVkZW5pZSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIm9zb2J5IHpvZHBvdmVkbsOpIHphIG5haHLDoXZrdSwgbmEgw7rEjWVseSB0cmllZGVuaWEiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiem9za3Vwb3ZhbmllIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iWm9za3Vww60gc8O6dmlzaWFjZSBtw6lkacOhLCBrdG9yw6kgemFiZXJhasO6IHZpYWNlcm8gc3TDtHAsIGFrbyBuYXByw61rbGFkIHLDtHpuZSAiCi0ixI1hc3RpIGtvbmNlcnR1LiBUb3RvIGplIHZ5xaHFoWlhIMO6cm92ZcWIIG5lxb4gc3RvcGEsIGFsZSBuacW+xaFpYSBuZcW+IGFsYnVtLiIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJob2Rub3RlbmllIHBvdcW+w612YXRlxL5hIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSJIb2Rub3RlbmllIHBvZMS+YSBwb3XFvsOtdmF0ZcS+YS4gxIzDrW0gdnnFocWhaWUsIHTDvW0gdmlhYyBzYSB0b3RvIG3DqWRpdW0gcMOhxI1pLiIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgInbDvXJvYmNhIHphcmlhZGVuaWEiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJWw71yb2JjYSB6YXJpYWRlbmlhIHBvdcW+aXTDqWhvIG5hIHZ5dHZvcmVuaWUgdG9odG8gbcOpZGlhIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICJtb2RlbCB6YXJpYWRlbmlhIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJNb2RlbCB6YXJpYWRlbmlhIHBvdcW+aXTDqWhvIG5hIHZ5dHZvcmVuaWUgdG9odG8gbcOpZGlhIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAibsOhem92IGFwbGlrw6FjaWUiCi0KLW1zZ2lkICJBcHBsaWNhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVkaWEiCi1tc2dzdHIgIkFwbGlrw6FjaWEgcG91xb5pdMOhIHByaSB0dm9yYmUgdG9odG8gbcOpZGlhIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiZMOhdGEgYXBsaWvDoWNpZSIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIsS9dWJvdm/Evm7DqSDDumRhamUgYXBsaWvDoWNpZSwga3RvcsOpIHNhIG1hasO6IHNlcmlhbGl6b3ZhxaUgZG8gbcOpZGlhIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIm9yaWVudMOhY2lhIG9icsOhemt1IgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICJBa28gbcOhIGJ5xaUgb2Jyw6F6b2sgb3RvxI1lbsO9IGFsZWJvIHByZXZyw6F0ZW7DvSBwcmVkIGplaG8gem9icmF6ZW7DrW0iCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgInZ5ZGF2YXRlxL4iCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk1lbm8gdGl0dWx1IGFsZWJvIHZ5ZGF2YXRlxL5hIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgImludGVycHJldCIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICJJbmZvcm3DoWNpZSBvIMS+dcSPb2NoIHYgcG96YWTDrSByZW1peG92YW5pYSBhIHBvZG9ibsO9Y2ggaW50ZXJwcmV0w6FjacOtIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICJzw7prcm9tbsOpLWTDoXRhIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICJTw7prcm9tbsOpIGTDoXRhIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIk5lbmHFoWxhIHNhIG9ic2x1aGEgVVJJIHByZSBwcm90b2tvbCAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAiVVJJIHNjaMOpbWEgJyVzJyBuaWUgamUgcG9kcG9yb3ZhbsOhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkNIWUJBOiBvZCBwcnZrdSAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJQcsOtZGF2bsOpIGxhZGlhY2UgaW5mb3Jtw6FjaWU6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJvZGtheiBuZW3DoSB6ZHJvaiBbc2luaz0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAib2RrYXogbmVtw6Egc2luayAgW3NvdXJjZT0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJuZWV4aXN0dWplIHZsYXN0bm9zxaUgXCIlc1wiIHYgcHJ2a3UgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAibmVwb2RhcmlsbyBzYSBuYXN0YXZpxaUgdmxhc3Rub3PFpSBcIiVzXCIgdiBwcnZrdSBcIiVzXCIgbmEgXCIlc1wiIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIk9uZXNrb3JlbsOpIG9ka2F6b3ZhbmllIHpseWhhbG8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJuZXBvZGFyaWxvIHNhIHByaXBvamnFpSAlcyBrdSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAicHJ2b2sgXCIlc1wiIG5lZXhpc3R1amUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIm5lxI1ha2Fuw70gb2RrYXogXCIlc1wiIC0gaWdub3J1amVtIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAibmVwb2RhcmlsbyBzYSBhbmFseXpvdmHFpSBzY2hvcG5vc3RpIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIm5lZXhpc3R1amUgcHJ2b2sgc2luayBwcmUgVVJJIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAibmVleGlzdHVqZSB6ZHJvam92w70gcHJ2b2sgcHJlIFVSSSBcIiVzXCIiCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgImNoeWJhIHN5bnRheGUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJib2wgemFkYW7DvSBwcsOhemRueSB6w6Fzb2Juw61rIFwiJXNcIiwgxI1vIG5pZSBqZSBkb3ZvbGVuw6kiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJuZWV4aXN0dWplIHrDoXNvYm7DrWsgXCIlc1wiLCByb3piYcS+dWplbSBwcnZreSIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJwcsOhemRuYSByw7pyYSBzYSBuZXByaXDDusWhxaVhIgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIlZlxL5hIHZ5cm92bsOhdmFjZWogcGFtw6R0ZSBzYSB6YWhhZHp1amUuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgotbXNnc3RyICJWbsO6dG9ybsO9IHByb2Jsw6ltIHYgdG9rdSDDumRham92LiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIlZuw7p0b3Juw6EgY2h5YmEgdG9rdSDDumRham92LiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiVm7DunRvcm7DoSBjaHliYSDEjWFzb3ZhxI1hLiIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAiWmx5aGFsbyB2eXR2w6FyYW5pZSB2eXJvdm7DoXZhY2VqIHBhbcOkdGUuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkZpbHRyb3ZhxaUgc2Nob3Bub3N0aSIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iT2JtZWR6acWlIG1vxb5uw6kgcG92b2xlbsOpIHNjaG9wbm9zdGkgKE5VTE9Ww4kgem5hbWVuw6EgxL1VQk9WT8S9TsOJKS4gTmFzdGF2ZW5pZSAiCi0idGVqdG8gdmxhc3Rub3N0aSBiZXJpZSByZWZlcmVuY2l1IG5hIHphZGFuw70gb2JqZWt0IEdzdENhcHMuIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiTmVib2wgdXLEjWVuw70gZG/EjWFzbsO9IHByaWXEjWlub2sgKFRlbXApLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIHrDrXNrYcWlIGluZm9ybcOhY2llIG8gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2Egb3R2b3JpxaUgc8O6Ym9yIFwiJXNcIiBwcmUgxI3DrXRhbmllLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIkNoeWJhIHByaSB6w6FwaXNlIGRvIHPFpWFob3ZhbsOpaG8gc8O6Ym9ydS4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTmVib2wgdXLEjWVuw70gbsOhem92IHPDumJvcnUgcHJlIHrDoXBpcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHPDumJvciBcIiVzXCIgcHJlIHrDoXBpcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkNoeWJhIHByaSB6YXR2w6FyYW7DrSBzw7pib3J1IFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkNoeWJhIHByaSBuYXN0YXZvdmFuw60gcG96w61jaWUgdiBzw7pib3JlIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkNoeWJhIHByaSB6w6FwaXNlIGRvIHPDumJvcnUgXCIlc1wiLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJOZWJvbCB1csSNZW7DvSBuw6F6b3Ygc8O6Ym9ydSBwcmUgxI3DrXRhbmllLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSB6w61za2HFpSBpbmZvcm3DoWNpZSBvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiXCIlc1wiIGplIGFkcmVzw6FyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIlPDumJvciBcIiVzXCIgamUgesOhc3V2a2EuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiWmx5aGFuaWUgcG8gdnlrb25hbsOtIHBvxb5hZG92YW7DvWNoIGl0ZXLDoWNpw60uIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAic2Nob3Bub3N0aSIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgInppc3RlbsOpIHNjaG9wbm9zdGkgdiBwcsO6ZGUgw7pkYWpvdiIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIm1pbmltdW0iCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICJ2eW7DunRpxaUgdmXEvmvDqSBww61zbWVuw6EiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAidnluw7p0acWlIHZlxL5rw6kgcMOtc21lbsOhIGJleiBrb250cm9seSIKLQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJQcsO6ZCBuZW9ic2FodWplIGRvc3RhdG9rIMO6ZGFqb3YuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJQcsO6ZCBuZW9ic2FodWplIMO6ZGFqZS4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICJJbXBsZW1lbnRvdmFuw6kgcm96aHJhbmlhOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgIsSNaXRhdGXEvm7DqSIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICJ6YXBpc292YXRlxL5uw6kiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICJ6YXN0YXJhbMOpIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICJvdmzDoWRhdGXEvm7DqSIKLQotbXNnaWQgImNoYW5nZWFibGUgaW4gTlVMTCwgUkVBRFksIFBBVVNFRCBvciBQTEFZSU5HIHN0YXRlIgotbXNnc3RyICJtZW5pdGXEvm7DqSB2IHN0YXZlIE5VTE9Ww50sIFBSSVBSQVZFTsOdLCBQT1pBU1RBVkVOw50gYWxlYm8gSFJBSsOaQ0kiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICJtZW5pdGXEvm7DqSB2IGliYSBzdGF2ZSBOVUxPVsOdLCBQUklQUkFWRU7DnSBhbGVibyBQT1pBU1RBVkVOw50iCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAibWVuaXRlxL5uw6kgaWJhIHYgc3RhdmUgTlVMT1bDnSBhbGVibyBQUklQUkFWRU7DnSIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiWmFrw6F6YW7DqSBzw7pib3J5OiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIkNlbGtvdsO9IHBvxI1ldDoiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkIHpha8OhemFuw70gc8O6Ym9yIgotbXNnc3RyWzFdICIlZCB6YWvDoXphbsOpIHPDumJvcnkiCi1tc2dzdHJbMl0gIiVkIHpha8OhemFuw71jaCBzw7pib3JvdiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIHrDoXN1dm7DvSBtb2R1bCIKLW1zZ3N0clsxXSAiJWQgesOhc3V2bsOpIG1vZHVseSIKLW1zZ3N0clsyXSAiJWQgesOhc3V2bsO9Y2ggbW9kdWxvdiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCB6YWvDoXphbsOhIHBvbG/FvmthIgotbXNnc3RyWzFdICIlZCB6YWvDoXphbsOpIHBvbG/Fvmt5IgotbXNnc3RyWzJdICIlZCB6YWvDoXphbsO9Y2ggcG9sb8W+aWVrIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCBmdW5rY2lhIgotbXNnc3RyWzFdICIlZCBmdW5rY2llIgotbXNnc3RyWzJdICIlZCBmdW5rY2nDrSIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiVnlww61zYcWlIHbFoWV0a3kgcHJ2a3kiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJWeXRsYcSNacWlIHpvem5hbSB6YWvDoXphbsO9Y2ggc8O6Ym9yb3YiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotIlZ5cMOtc2HFpSB0YWvDvSB6b3puYW0gbW/Fvm5vc3TDrSB0b2h0byB6w6FzdXZuw6lobyBtb2R1bHUsIGt0b3LDvSBzYSBkw6Egc3ByYWNvdmHFpSAiCi0iYXV0b21hdGlja3kuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmUgdG8gdcW+aXRvxI1uw6kgdiBzcG9qaXRvc3RpIHMgIgotInZvbmthasWhw61taSBhdXRvbWF0aWNrw71taSBtZWNoYW5pem1hbWkgaW7FoXRhbMOhY2llIHrDoXN1dm7DvWNoIG1vZHVsb3YiCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIlZ5cMOtc2HFpSB6b3puYW0gesOhc3V2bsO9Y2ggbW9kdWxvdiIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICJTa29udHJvbG92YcWlLCDEjWkgZXhpc3R1amUgdnlicmFuw70gcHJ2b2sgYWxlYm8gesOhc3V2bsO9IG1vZHVsIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotIlByaSBrb250cm9sZSwgxI1pIGV4aXN0dWplIGRhbsO9IHBydm9rIGFsZWJvIHrDoXN1dm7DvSBtb2R1bCwgc2tvbnRyb2xvdmHFpSBhaiDEjWkgIgotImplIGplaG8gdmVyemlhIGFzcG/FiCBuYSB1csSNZW5laiDDunJvdm5pIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICIiCi0iWm9icmF6acWlIHBvZHBvcm92YW7DqSBVUkkgc2Now6lteSwgc3BvbHUgcyBwcnZrYW1pIGt0b3LDqSBpY2ggaW1wbGVtZW50dWrDuiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBuYcSNw610YcWlIHPDumJvciB6w6FzdXZuw6lobyBtb2R1bHU6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIlRha8O9dG8gcHJ2b2sgYWxlYm8gesOhc3V2bsO9IG1vZHVsIG5lZXhpc3R1amUgJyVzJ1xuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAixaB0YXRpc3Rpa2EgaW5kZXh1IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiRG9zdGFsIHNvbSBzcHLDoXZ1ICMldSBvZCBwcnZrdSBcIiVzXCIgKCVzKToiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIkRvc3RhbCBzb20gc3Byw6F2dSAjJXUgb2QgcGFkdSBcIiVzOiVzXCIgKCVzKToiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIkRvc3RhbCBzb20gc3Byw6F2dSAjJXUgb2Qgb2JqZWt0dSBcIiVzXCIgKCVzKToiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiRG9zdGFsIHNvbSBzcHLDoXZ1ICMldSAoJXMpOiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIkRvc3RhbCBzb20gRU9TIG9kIHBydmt1IFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJOQcWgTEEgU0EgWk5BxIxLQSAgICA6IG5hxaFpZWwganUgcHJ2b2sgXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiTkHFoExBIFNBIFpOQcSMS0EgICAgOiBuYcWhaWVsIGp1IHBhZCBcIiVzOiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJOQcWgTEEgU0EgWk5BxIxLQSAgICA6IG5hxaFpZWwganUgb2JqZWt0IFwiJXNcIi5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJOQcWgTEEgU0EgWk5BxIxLQVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk5BxaBMQSBTQSBUQUJVxL1LQSAgICA6IG5hxaFpZWwganUgcHJ2b2sgXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiTkHFoExBIFNBIFRBQlXEvUtBICAgIDogbmHFoWllbCBqdSBvYmpla3QgXCIlc1wiLlxuIgotCi1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgIk5BxaBMQSBTQSBUQUJVxL1LQVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJWQVJPVkFOSUU6IHogcHJ2a3UgJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiUHJlZMSNw610YW7DqSwgxI1ha8OhbSBuYSBkb2tvbsSNZW5pZSBuYXDEusWIYW5pYSB2eXJvdm7DoXZhY2VqIHBhbcOkdGUuLi5cbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIlByZWTEjcOtdGFuw6ksIMSNYWvDoW0gbmEgZG9rb27EjWVuaWUuLi5cbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiVWtsYWTDoW0gZG8gdnlyb3Zuw6F2YWNlaiBwYW3DpHRlLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiVnlyb3Zuw6F2YWNpYSBwYW3DpMWlIGplIG5hcGxuZW7DoSwgbmFzdGF2dWplbSByw7pydSBuYSBIUkFKw5pDVSAuLi5cbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIk5hcMS6xYhhIHNhIHZ5cm92bsOhdmFjaWEgcGFtw6TFpSwgbmFzdGF2dWplbSByw7pydSBuYSBQT1pBU1RBVkVOw5ogLi4uXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICJQcmVkaXN0cmlidW92YcWlIGxhdGVuY2l1Li4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAiTmFzdGF2dWplbSBzdGF2IG5hICVzIGFrbyBwb8W+YWR1amUgJXMuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIlByZXJ1xaFlbmllOiBaYXN0YXZ1amVtIHLDunJ1IC4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlByb2dyZXNzOiAoJXMpICVzXG4iCi1tc2dzdHIgIlByaWViZWg6ICglcykgJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIkNow71iYSBwcnZvayAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICJaw61za2FsIHNvbSBrb250ZXh0IHogcHJ2a3UgJyVzJzogJXM9JXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiVnlww61zYcWlIHpuYcSNa3kgKHpuw6FtZSB0aWXFviBha28gbWV0YWTDoXRhKSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIlbDvXN0dXBuw6EgdGFidcS+a2Egb2JzYWh1IChrYXBpdG9seSBhIHZ5ZGFuaWEpIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiVnlww61zYcWlIGluZm9ybcOhY2llIG8gc3RhdmUgYSB1cG96b3JuZW5pYSBvIHZsYXN0bm9zdGlhY2giCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJOZXZ5cGlzb3ZhxaUgaW5mb3Jtw6FjaWUgbyBzdGF2ZSIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiVnlww61zYcWlIHNwcsOhdnkiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotIk5lcG9za3l0bsO6xaUgZG8gdsO9c3R1cHUgaW5mb3Jtw6FjaWUgbyB2eWJyYW5vbSB2bGFzdG7DrWN0dmUgYWsgamUgcG92b2xlbsO9ICIKLSJwb2Ryb2Juw70gdsO9c3R1cCApZMOhIHNhIHBvdcW+acWlIG5pZWtvxL5rb2tyw6F0KSIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIk1lbm8gdmxhc3Ruw61jdHZhIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJOZWluxaF0YWxvdmHFpSBvYnNsdWh1IHbDvW5pbWllayIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiVnluw7p0acWlIEVPUyBuYSB6ZHJvam9jaCBwcmVkIHZ5cG51dMOtbSByw7pyeSIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiWm96YmllcmHFpSBhIHpvYnJhemnFpSDFoXRhdGlzdGlrdSBpbmRleHUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIkNIWUJBOiBuZXBvZGFyaWxvIHNhIHZ5dHZvcmnFpSByw7pydTogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICJDSFlCQTogbmVwb2RhcmlsbyBzYSB2eXR2b3JpxaUgcsO6cnUuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJWQVJPVkFOSUU6IGNoeWJuw6EgcsO6cmE6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIkNIWUJBOiBwcnZvayAncsO6cmEnIHNhIG5lbmHFoWllbC5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJOYXN0YXZ1amVtIHLDunJ1IG5hIFBPWkFTVEFWRU7DmiAuLi5cbiIKLQotIyBPbiBzdHJpa2U/Ci1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiQ0hZQkE6IFLDunJhIHNhIG5lY2hjZSBwb3phc3RhdmnFpS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiUsO6cmEgamUgxb5pdsOhIGEgbmVwb3RyZWJ1amUgUFJFUk9MTCAuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIlLDunJhIGplIHYgc3RhdmUgUFJFUk9MTElORyAuLi5cbiIKLQotIyBPbiBzdHJpa2U/Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJDSFlCQTogcsO6cmEgbmVjaGNlIHByZXJvbGxvdmHFpS5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiUsO6cmEgamUgdiBzdGF2ZSBQUkVST0xMRUQgLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIk5hc3RhdnVqZW0gcsO6cnUgbmEgSFJBSsOaQ1UgLi4uXG4iCi0KLSMgT24gc3RyaWtlPwotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiQ0hZQkE6IFLDunJhIG5lY2hjZSBocmHFpS5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICJFT1MgcHJpIHZ5cG51dMOtIGplIHBvdm9sZW7DvSAtLSBWeW51Y3VqZW0gRU9TIHByZSByw7pydVxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIkVPUyBwcmkgdnlwbnV0w60gamUgcG92b2xlbsO9IC0tIMSNYWvDoW0gbmEgRU9TIHBvIGNoeWJlXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAixIxha8OhbSBuYSBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIlByaWphdMO9IEVPUyAtIHphc3RhdnVqZW0gcsO6cnUgLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiUHJlcnXFoWVuaWUgcG/EjWFzIMSNYWthbmlhIG5hIEVPUyAtIHphc3RhdnVqZW0gcsO6cnUgLi4uXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiUG/EjWFzIMSNYWthbmlhIG5hIEVPUyBuYXN0YWxhIGNoeWJhXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiVnlrb27DoXZhbmllIHNrb27EjWlsbyBwbyAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiTmFzdGF2dWplbSByw7pydSBuYSBQUklQUkFWRU7DmiAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiTmFzdGF2dWplbSByw7pydSBuYSBOVUxPVsOaIC4uLlxuIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiVXZvxL7FiHVqZW0gcsO6cnUgLi4uXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgInrDoXNvYm7DrWsiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIlZuw7p0b3Juw6EgY2h5YmEgcHLDumR1IMO6ZGFqb3YuIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotI34gbXNnc3RyICJwcmlwb2plbmllIGJleiB6ZHJvam92w6lobyBwcnZrdSIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgIm9ka2F6IGJleiBwcnZrdSBzaW5rIgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgIm5lZXhpc3R1amUgcHJ2b2ssIGt1IGt0b3LDqW11IHNhIG3DoSBwcmlwb2ppxaUgVVJJIFwiJXNcIiIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAibmVwb2RhcmlsbyBzYSBwcmlwb2ppxaUgcHJ2b2sgc2luayBwcmUgVVJJIFwiJXNcIiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIk5ldnlwaXNvdmHFpSBpbmZvcm3DoWNpZSBvIHN0YXZlIFRZUFUiCi0KLSN+IG1zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCi0jfiBtc2dzdHIgIlRZUDEsVFlQMiwuLi4iCi0KLSN+IG1zZ2lkICJtYXhpbXVtIgotI34gbXNnc3RyICJtYXhpbXVtIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAiIgotI34gIlBvdcW+aXRpZTogZ3N0LXhtbGxhdW5jaCA8c8O6Ym9yLnhtbD4gWyBwcnZrLnZsYXN0bm9zxaU9aG9kbm90YSAuLi4gXVxuIgotCi0jfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgotI34gbXNnc3RyICJDSFlCQTogemx5aGFsYSBhbmFsw716YSB4bWwgc8O6Ym9ydSAnJXMnLlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgotI34gbXNnc3RyICJDSFlCQTogdiBzw7pib3JlICclcycgY2jDvWJhIHBydm9rIHLDunJ5IG5hanZ5xaHFoWVqIMO6cm92bmUuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJWQVJPVkFOSUU6IHYgc8O6xI1hc25vc3RpIGplIHBvZHBvcm92YW7DvSBpYmEgamVkZW4gcHJ2b2sgbmFqdnnFocWhZWogw7pyb3ZuZS5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkNIWUJBOiBuZXBvZGFyaWxvIHNhIGFuYWx5em92YcWlIGFyZ3VtZW50IHByw61rYXpvdsOpaG8gcmlhZGt1ICVkOiAlcy5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCi0jfiBtc2dzdHIgIlZBUk9WQU5JRTogcHJ2b2sgcyBuw6F6dm9tICclcycgc2EgbmVuYcWhaWVsLlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiVWxvxb5pxaUgcmVwcmV6ZW50w6FjaXUgcsO6cnkgdiB4bWwgZG8gU8OaQk9SVSBhIHNrb27EjWnFpSIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIlPDmkJPUiIKLQotI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKLSN+IG1zZ3N0ciAiTmVpbsWhdGFsb3ZhxaUgb2JzbHVodSBzaWduw6Fsb3YgU0lHVVNSMSBhIFNJR1VTUjIiCi0KLSN+IG1zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgotI34gbXNnc3RyICJWeXBpc292YcWlIHN0b3B1IGFsb2vDoWNpZSAoYWsgamUgdG8gcG92b2xlbsOpIHByaSBrb21waWzDoWNpaSkiCi0KLSN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlczogJXMiCi0jfiBtc2dzdHIgIkNoeWJhIHByaSBvcMOkdG92bm9tIHNrZW5vdmFuw60gcmVnaXN0cm92ICVzOiAlcyIKLQotI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgotI34gbXNnc3RyICJDaHliYSBwcmkgb3DDpHRvdm5vbSBza2Vub3ZhbsOtIHJlZ2lzdHJvdiAlcyIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJWbsO6dG9ybsOhIGNoeWJhIEdTdHJlYW1lcjogbmVwb2RhcmlsbyBzYSB6bWVuacWlIHN0YXYuIE9obMOhc3RlIHByb3PDrW0gdMO6dG8gIgotI34gImNoeWJ1LiIKLQotI34gbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBkZXNjcmlwdG9yIFwiJWRcIi4iCi0jfiBtc2dzdHIgIkNoeWJhIHByaSB6w6FwaXNlIGRvIHBvcGlzb3ZhxI1hIHPDumJvcnUgXCIlZFwiLiIKLQotI34gbXNnaWQgIkZpbGUgZGVzY3JpcHRvciBcIiVkXCIgaXMgbm90IHZhbGlkLiIKLSN+IG1zZ3N0ciAiUG9waXNvdmHEjSBzw7pib3J1IFwiJWRcIiBuaWUgamUgcGxhdG7DvS4iCi0KLSN+IG1zZ2lkICJGUkVFSU5HIHBpcGVsaW5lIC4uLlxuIgotI34gbXNnc3RyICJVVk/EvcWHVUpFTSByw7pydSAuLi5cbiIKLQotI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCi0jfiBtc2dzdHIgInDDtHZvZG7DqSB1bWllc3RuZW5pZSBzw7pib3J1IGFrbyBVUkkiCmRpZmYgLS1naXQgYS9wby9zbC5nbW8gYi9wby9zbC5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZjQ4NGQuLjAwMDAwMDAKLS0tIGEvcG8vc2wuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vc2wucG8gYi9wby9zbC5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I1NTY0OS4uMDAwMDAwMAotLS0gYS9wby9zbC5wbworKysgL2Rldi9udWxsCkBAIC0xLDEzNDEgKzAsMCBAQAotIyBTbG92ZW5pYW4gdHJhbnNsYXRpb24gZm9yIGdzdHJlYW1lci4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgotIyBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBNYXRlaiBVcmJhbsSNacSNIDxtYXRlai51cmJhbkBnbWFpbC5jb20+LCAyMDEwIC0gMjAxMS4KLSMgTWFydGluIFNyZWJvdG5qYWsgPG1pbGVzQGZpbG1zaS5uZXQ+LCAyMDExLgotIyBLbGVtZW4gS2/FoWlyIDxrbGVtZW45MTNAZ21haWwuY29tPiwgMjAxMSAtIDIwMTQuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXItMS4yLjFcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNC0wNC0wOSAyMjozOCswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBLbGVtZW4gS2/FoWlyIDxrbGVtZW45MTNAZ21haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IFNsb3ZlbmlhbiA8dHJhbnNsYXRpb24tdGVhbS1zbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IHNsXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz00OyBwbHVyYWw9KG4lMTAwPT0xID8gMSA6IG4lMTAwPT0yID8gMiA6IG4lMTAwPT0zIHx8IG4iCi0iJTEwMD09NCA/IDMgOiAwKTtcbiIKLSJYLUdlbmVyYXRvcjogUG9lZGl0IDEuNi40XG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIkl6cGnFoWUgcmF6bGnEjWljbyBwcm9ncmFtYSBHU3RyZWFtZXIiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiSXpwacWhaSB2c2Egb3Bvem9yaWxhIGtvdCB1c29kbmEiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAiSXpwacWhZSByYXpwb2xvxb5saml2ZSBrYXRlZ29yaWplIHJhemhyb8WhxI1ldmFuamEgaW4gc2Uga29uxI1hIgotCi1tc2dpZCAiIgotIkRlZmF1bHQgZGVidWcgbGV2ZWwgZnJvbSAxIChvbmx5IGVycm9yKSB0byA5IChhbnl0aGluZykgb3IgMCBmb3Igbm8gb3V0cHV0IgotbXNnc3RyICIiCi0iUHJpdnpldGEgcmF2ZW4gcmF6aHJvxaHEjWV2YW5qYSBvZCAxIChsZSBuYXBha2UpIGRvIDkgKGthcmtvbGkpLiBWcmVkbm9zdCAwICIKLSJwb21lbmkgYnJleiBpenBpc2EuIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIlJBVkVOIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIlogdmVqaWNvIGxvxI1lbiBzZXpuYW0gcGFyb3YgaW1lX2thdGVnb3JpamU6cmF2ZW4gemEgZG9sb8SNZXZhbmplIHBvc2VibmloICIKLSJyYXZuaSBwb3NhbWV6bmloIGthdGVnb3Jpai4gUHJpbWVyOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJTRVpOQU0iCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiT25lbW9nb8SNaSBvYmFydmFuaSByYXpocm/FocSNZXZhbG5pIGl6cGlzIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLSJTcHJlbWVuaSBuYcSNaW4gYmFydmFuamEgZG5ldm5pa2EgcmF6aHJvxaHEjWV2YW5qYS4gUmF6cG9sb8W+bGppdmUgbW/Fvm5vc3RpIHNvOiAiCi0ib2ZmLCBvbiwgZGlzYWJsZSwgYXV0bywgdW5peCIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJPbmVtb2dvxI1pIHJhemhyb8WhxI1ldmFuamUiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiT21vZ2/EjWkgcG9kcm9ibm8gZGlhZ25vc3Rpa28gbmFsYWdhbmphIHZzdGF2a292IgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiWiB2ZWppY28gbG/EjWVuIHNlem5hbSBwb3RpIGRvIHZzdGF2a292IgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIlBPVEkiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0iWiB2ZWppY28gbG/EjWVuIHNlem5hbSB2c3RhdmtvdiB6YSB1cG9yYWJvIG9iIHNlem5hbXUsIGtpIGplIHNocmFuamVuIHYgIgotIm9rb2xqc2tpIHNwcmVtZW5saml2a2kgR1NUX1BMVUdJTl9QQVRIIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiVlNUQVZLSSIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIk9uZW1vZ2/EjWkgdWplbWFuamUgbmFwYWsgxI1sZW5qZW5qYSBtZWQgbmFsYWdhbmplbSB2c3RhdmtvdiIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJPbmVtb2dvxI1pIHBvc29kYWJsamFuamUgdnBpc25pa2EiCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJPbmVtb2dvxI1pIHVzdHZhcmphbmplIHBvbW/Fvm5paCBwcm9jZXNvdiBtZWQgcHJlZ2xlZG92YW5qZW0gdnBpc25pa2EiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiTW/Fvm5vc3RpIEdTdHJlYW1lciIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIlBva2HFvmkgbW/Fvm5vc3RpIEdTdHJlYW1lciIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICJOZXpuYW5hIG1vxb5ub3N0IgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJWIHByb2dyYW11IEdTdHJlYW1lciBqZSBwcmnFoWxvIGRvIHNwbG/FoW5lIG5hcGFrZSBqZWRybmUga25qacW+bmljZS4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiWmEgdG8gbmFwYWtvIG5pIGRvbG/EjWVuZSBrb2RlIG5hcGFrZS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiTm90cmFuamEgbmFwYWthIEdTdHJlYW1lcjogemFodGV2YW5hIHptb8W+bm9zdCBuaSBwb2RwcnRhLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIk5hcGFrYTogc3ByZW1lbWluamFuamUgc3RhbmphIGplIHNwb2RsZXRlbG8gaW4gbmkgcHJhdmVnYSBzcG9yb8SNaWxhIHZ6cm9rYSAiCi0iemEgdG8gdnJzdG8gbmFwYWtlLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJOb3RyYW5qYSBuYXBha2EgR1N0cmVhbWVyOiB0ZcW+YXZlIHBsYWRuamEuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIk5vdHJhbmphIG5hcGFrYSBHU3RyZWFtZXI6IHRlxb5hdmUgeiBuaXRlbmplbS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJOYXBha2EgR1N0cmVhbWVyOiB0ZcW+YXZlIHMgcG9nYWphbmplbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJOb3RyYW5qYSBuYXBha2EgR1N0cmVhbWVyOiB0ZcW+YXZlIHogZG9nb2Rrb20uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJOb3RyYW5qYSBuYXBha2EgR1N0cmVhbWVyOiB0ZcW+YXZlIHogaXNrYW5qZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJOb3RyYW5qYSBuYXBha2EgR1N0cmVhbWVyOiB0ZcW+YXZlIHogdmVsaWtpbWkgxI1ya2FtaS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiTm90cmFuamEgbmFwYWthIEdTdHJlYW1lcjogdGXFvmF2ZSB6IG96bmFrby4iCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICJOYW1lc3RpdHZpIEdTdHJlYW1lciBtYW5qa2EgdnN0YXZlay4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJOYXBha2EgR1N0cmVhbWVyOiB0ZcW+YXZlIHogdXJvLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICJQcm9ncmFtIHBvc2t1xaFhIHVwb3JhYml0aSBmdW5rY2lqbyBHU3RyZWFtZXIsIGtpIGplIG9uZW1vZ2/EjWVuYS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIlYgcHJvZ3JhbXUgR1N0cmVhbWVyIGplIHByacWhbG8gZG8gc3Bsb8WhbmUgbmFwYWtlIHBvZHBvcm5lIGtuamnFvm5pY2UuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiUG9kcG9ybmUga25qacW+bmljZSBuaSBtb2dvxI1lIHphxI1ldGkuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIlBvZHBvcm5lIGtuamnFvm5pY2UgbmkgbW9nb8SNZSB6YXByZXRpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiUG9kcG9ybmUga25qacW+bmljZSBuaSBtb2dvxI1lIG5hc3Rhdml0aS4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIk5hcGFrYSBrb2RpcmFuamEuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIlYgcHJvZ3JhbXUgR1N0cmVhbWVyIGplIHByacWhbG8gZG8gc3Bsb8WhbmUgbmFwYWtlIHZpcmEuIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiVmlyYSBuaSBtb2dvxI1lIG5hanRpLiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgIlZpciBqZSB6YXBvc2xlbiBhbGkgcGEgbmkgbmEgdm9sam8uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJWaXJhIG5pIG1vZ2/EjWUgb2RwcmV0aSB6YSBicmFuamUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJWaXJhIG5pIG1vZ2/EjWUgb2RwcmV0aSB6YSBwaXNhbmplLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiVmlyYSBuaSBtb2dvxI1lIG9kcHJldGkgemEgYnJhbmplIGluIHBpc2FuamUuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiVmlyYSBuaSBtb2dvxI1lIHphcHJldGkuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIlZpcmEgbmkgbW9nb8SNZSBwcmVicmF0aS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJWaXJhIG5pIG1vZ2/EjWUgemFwaXNhdGkuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIk5hIHZpcnUgbmkgbW9nb8SNZSBpenZlc3RpIGlza2FuamEuIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiWiB2aXJvbSBzZSBuaSBtb2dvxI1lIHVza2xhZGl0aS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiTmFzdGF2aXRldiB2aXJhIG5pIG1vZ2/EjWUgcHJpZG9iaXRpIGFsaSBkb2xvxI1pdGkuIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJOYSB2aXJ1IG5pIHByb3N0b3JhLiIKLQotIywgZnV6enkKLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJOYSB2aXJ1IG5pIHByb3N0b3JhLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAiViBwcm9ncmFtdSBHU3RyZWFtZXIgamUgcHJpxaFsbyBkbyBzcGxvxaFuZSBuYXBha2UgcHJldGFrYW5qYS4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIiIKLSJQcmVkbWV0IG5lIHBvZHBpcmEgb2JyYXZuYXZhbmphIHRlZ2EgcHJldG9rYS4gUHJvc2ltbywgcG/FoWxqaXRlIHBvcm/EjWlsbyBvICIKLSJuYXBha2kuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIlZyc3RlIHByZXRva2EgbmkgbW9nb8SNZSBkb2xvxI1pdGkuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICJQcmV0b2sgc2UgcmF6bGlrdWplIG9kIHZyc3RlLCBraSBqbyBvYnJhdm5hdmEgcHJlZG1ldC4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIlphIG9icmF2bmF2YW5qZSB0ZWdhIHByZXRva2EgbmkgdXN0cmV6bmVnYSBrb2Rla2EuIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJQcmV0b2thIG5pIG1vZ2/EjWUgb2Rrb2RpcmF0aS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZW5jb2RlIHN0cmVhbS4iCi1tc2dzdHIgIlByZXRva2EgbmkgbW9nb8SNZSBrb2RpcmF0aS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiUHJldG9rYSBuaSBtb2dvxI1lIG9kdml0aS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIlByZXRva2EgbmkgbW9nb8SNZSB6dml0aS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJQcmV0b2sgamUgdiBuYXBhxI1uZW0gemFwaXN1LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJQcmV0b2sgamUgxaFpZnJpcmFuLCBvZMWhaWZyaXJhbmplIHBhIG5pIHBvZHBydG8uIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIlByZXRvayBqZSDFoWlmcmlyYW4gaW4gZ2EgbmkgbW9nb8SNZSBvZMWhaWZyaXJhdGksIGtlciBuaSBwb2RhbmVnYSB1c3RyZXpuZWdhICIKLSJrbGp1xI1hLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJTcG9yb8SNaWxvIG5hcGFrZSB6YSBkb21lbm8gJXMgbmUgb2JzdGFqYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiU3Bsb8Whbm8gc3Bvcm/EjWlsbyBuYXBha2UgemEgZG9tZW5vICVzIGluIGtvZG8gJWQgbmUgb2JzdGFqYS4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIkl6YnJhbmUgdXJlIG5pIG1vZ2/EjWUgdXBvcmFiaXRpIHYgY2V2b3ZvZHUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICJNZWQgemFwaXNvdmFuamVtIHByZWRwb21uaWxuaWthIHZwaXNuaWthIHYgJXMgamUgcHJpxaFsbyBkbyBuYXBha2U6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIm5hc2xvdiIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgIm9iacSNYWpubyB1cG9yYWJsamVuIG5hc2xvdiIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICJyYXp2csWhxI1ldmFsbm8gaW1lIG5hc2xvdmEiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJzcGxvxaFubyB1cG9yYWJsamVuIG5hc2xvdiB6YSByYXp2csWhxI1hbmplIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICJpenZhamFsZWMiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgIm9zZWJlLCB6YWRvbMW+ZW5lIHphIHNuZW1hbmplIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJyYXp2csWhxI1ldmFsbm8gaW1lIGl6dmFqYWxjYSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAib3NlYmUsIG9kZ292b3JuZSB6YSBwb3NuZXRlaywgemEgcG90cmViZSByYXp2csWhxI1hbmphIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgImFsYnVtLCBraSB2c2VidWplIHRlIHBvZGF0a2UiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAicmF6dnLFocSNZXZhbG5vIGltZSBhbGJ1bWEiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiYWxidW0sIGtpIHZzZWJ1amUgdGUgcG9kYXRrZSwgemEgcG90cmViZSByYXp2csWhxI1hbmphIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJpenZhamFsZWMgYWxidW1hIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJpenZhamFsZWMgY2Vsb3RuZWdhIGFsYnVtYTsgemFwaXNhbiwga290IG1vcmEgYml0aSBwcmlrYXphbiIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAicmF6dnLFocSNZXZhbG5vIGltZSBpenZhamFsY2EgYWxidW1hIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICJpenZhamFsZWMgY2Vsb3RuZWdhIGFsYnVtYSwgemFwaXNhbiB6YSByYXp2csWhxI1hbmplIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiZGF0dW0iCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdHVtIHVzdHZhcml0dmUgcG9kYXRrb3YgKGtvdCB6Z3JhZGJhIEdEYXRlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJkYXR1bcSNYXMiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdHVtIGluIMSNYXMgdXN0dmFyaXR2ZSBwb2RhdGtvdiAoa290IHpncmFkYmEgR0RhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJ6dnJzdCIKLQotbXNnaWQgImdlbnJlIHRoaXMgZGF0YSBiZWxvbmdzIHRvIgotbXNnc3RyICJ6dnJzdCwga2kgdnNlYnVqZSB0ZSBwb2RhdGtlIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAib3BvbWJhIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgInByb3N0byBiZXNlZGlsbyB6YSBvcG9tYmUgcG9kYXRrb3YiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICJyYXrFoWlyamVuYSBvcG9tYmEiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJwcm9zdG8gYmVzZWRpbG8gemEgemFwaXNvdmFuamUgb3BvbWIgcG9kYXRrb3YgdiBvYmxpa2kga2xqdcSNPXZyZWRub3N0IGFsaSAiCi0ia2xqdcSNW2VuXT1vcG9tYmEiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIiCi1tc2dzdHIgIsWhdGV2aWxrYSBza2xhZGJlIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIsWhdGV2aWxrYSBza2xhZGJlIHYgemJpcmtpIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgIsWhdGV2aWxvIHNrbGFkYiIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgInNrdXBubyDFoXRldmlsbyBza2xhZGIgem5vdHJhaiB6Ymlya2UsIGtpIGppIHNrbGFkYmEgcHJpcGFkYSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICLFoXRldmlsa2EgZGlza2EiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLFoXRldmlsa2EgZGlza2EgdiB6Ymlya2kiCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICLFoXRldmlsbyBkaXNrb3YiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAic2t1cG5vIMWhdGV2aWxvIGRpc2tvdiB6bm90cmFqIHpiaXJrZSwga2kgamkgZGlzayBwcmlwYWRhIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgIm1lc3RvIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJpenZvciBtZWRpamEga290IG5hc2xvdiBVUkkgKG1lc3RvLCBramVyIGplIHNocmFuamVuIGl6dmlybmlrIGRhdG90ZWtlIGFsaSAiCi0icHJldG9rYSkiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAic3BsZXRuYSBzdHJhbiIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgInNwbGV0bmEgc3RyYW4gbWVkaWphIChpenZhamFsY2EsIGZpbG1hIGFsaSBza3VwaW5lKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJvcGlzIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJrcmF0a28gYmVzZWRpbG8sIGtpIG9waXN1amUgdnNlYmlubyBwb2RhdGtvdiIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgInJhemxpxI1pY2EiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAicmF6bGnEjWljYSBwb2RhdGtvdiIKLQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIklTUkMiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIChodHRwOi8vd3d3LmlmcGkub3JnL2NvbnRlbnQvIgotInNlY3Rpb25fcmVzb3VyY2VzL2lzcmMuaHRtbCkiCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgInVzdGFub3ZhIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJhdnRvcnNrZSBwcmF2aWNlIgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAib3Bvem9yaWxvIGF2dG9yc2tpaCBwcmF2aWMgcG9kYXRrb3YiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJuYXNsb3YgVVJJIGF2dG9yc2tpaCBwcmF2aWMiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIm5hc2xvdiBVUkkgZG8gb2J2ZXN0aWxhIGF2dG9yc3R2YSBwb2RhdGtvdiIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgImtvZGlyYWwiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICJpbWUgb3NlYmUgYWxpIG9yZ2FuaXphY2lqZSwga2kgamUgb3ByYXZpbGEga29kaXJhbmplIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAic3RpayIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgInBvZGF0a2kgbyBzdGlrdSIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgImRvdm9samVuamUiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImRvdm9samVuamUgcG9kYXRrb3YiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAibmFzbG92IFVSSSBkb3ZvbGplbmphIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJuYXNsb3YgVVJJIGRvdm9samVuamEgcG9kYXRrb3YiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgIml6dmFqYWxlYyIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJvc2ViZSwga2kgc28gaXp2YWphbGNpIHBvc25ldGthIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgInNrbGFkYXRlbGoiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgIm9zZWJhLCBraSBqZSBza2xhZGF0ZWxqIHBvc25ldGthIgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImR1cmF0aW9uIgotbXNnc3RyICJ0cmFqYW5qZSIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJkb2zFvmluYSBlbm90IMSNYXNhIEdTdHJlYW1lciAobmFub3Nla3VuZGUpIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgImtvZGVrIgotCi1tc2dpZCAiY29kZWMgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2RlaywgdiBrYXRlcmVtIHNvIHNocmFuamVuaSBwb2RhdGtpIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgInZpZGVvIGtvZGVrIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2RlaywgdiBrYXRlcmVtIHNvIHNocmFuamVuaSB2aWRlbyBwb2RhdGtpIgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgInp2b8SNbmkga29kZWsiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImtvZGVrLCB2IGthdGVyZW0gamUgc2hyYW5qZW4genZvayIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICJrb2RlayBwb2RuYXBpc292IgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJrb2RlaywgdiBrYXRlcmVtIHNvIHNocmFuamVuaSBwb2RuYXBpc2kiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICJ6YXBpcyB6YWJvam5pa2EiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiemFib2puaWssIHYga2F0ZXJlbSBzbyBzaHJhbmplbmkgcG9kYXRraSIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgImJpdG5hIGhpdHJvc3QiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJuYXRhbsSNbmEgYWxpIHBvdnByZcSNbmEgYml0bmEgaGl0cm9zdCB2IGJpdGloL3MiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIm5heml2bmEgYml0bmEgaGl0cm9zdCIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm5heml2bmEgYml0bmEgaGl0cm9zdCB2IGJpdGloL3MiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm5ham1hbmrFoWEgYml0bmEgaGl0cm9zdCIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm5ham1hbmrFoWEgYml0bmEgaGl0cm9zdCB2IGJpdGloL3MiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm5hanZlxI1qYSBiaXRuYSBoaXRyb3N0IgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAibmFqdmXEjWphIGJpdG5hIGhpdHJvc3QgdiBiaXRpaC9zIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAia29kaXJuaWsiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJrb2Rpcm5paywgdXBvcmFibGplbiB6YSBrb2RpcmFuamUgcHJldG9rYSIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAicmF6bGnEjWljYSBrb2Rpcm5pa2EiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJyYXpsacSNaWNhIGtvZGlybmlrYSwgdXBvcmFibGplbmVnYSB6YSBrb2RpcmFuamUgcHJldG9rYSIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAiemFwb3JlZG5hIMWhdGV2aWxrYSIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgInphcG9yZWRuYSDFoXRldmlsa2Egc2tsYWRiZSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAib2phxI1pdGV2IHNsZWRpIFJlcGxheUdhaW4iCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJwcmlkb2JpdGV2IHNsZWRpIHYgZEIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgInZyaCBzbGVkaSBSZXBsYXlHYWluIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgIm9qYcSNYW5qZSB2cmhhIHNsZWRpIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJvamHEjWl0ZXYgYWxidW1hIFJlcGxheUdhaW4iCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJwcmlkb2JpdGV2IGFsYnVtYSB2IGRCIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJ2cmhhIGFsYnVtYSBSZXBsYXlHYWluIgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgIm9qYcSNYW5qZSB2cmhhIGFsYnVtYSIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICJza2xpY25hIHJhdmVuIFJlcGxheUdhaW4iCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICJza2xpY25hIHJhdmVuIHZyZWRub3N0aSBwcmlkb2JpdHZlIHNsZWRpIGluIGFsYnVtYSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgImplemlrb3ZuYSBrb2RhIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAia29kYSBqZXppa2EgcHJldG9rYSB2IHNrbGFkdSB6IElTTy02MzktMSBhbGkgSVNPLTYzOS0yIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAiaW1lIGplemlrYSIKLQotbXNnaWQgImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIgotbXNnc3RyICJwcm9zdG8gaW1lIGplemlrYSB0ZWdhIHByZXRva2EiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAic2xpa2EiCi0KLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJzbGlrYSwgcG92ZXphbmEgcyBwcmV0b2tvbSIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAicHJlZG9nbGVkbmEgc2xpa2EiCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgInByZWRvZ2xlZG5hIHNsaWthLCBwb3ZlemFuYSBzIHByZXRva29tIgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAicHJpbG9nYSIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImRhdG90ZWthLCBwcmlsb8W+ZW5hIHByZXRva3UiCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICJ1ZGFyY2kgbmEgbWludXRvIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgIsWhdGV2aWxvIHVkYXJjZXYgbmEgbWludXRvIHYgenZvxI1uZW0gcG9zbmV0a3UiCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAia2xqdcSNbmUgYmVzZWRlIgotCi1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgInogdmVqaWNvIGxvxI1lbmUga2xqdcSNbmUgYmVzZWRlLCBraSBvcGlzdWplam8gdnNlYmlubyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICJpbWUgemVtbGplcGlzbmVnYSBtZXN0YSIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0ixI1sb3Zla3UgYmVybGppdiBvcGlzIG1lc3RhLCBramVyIGplIGJpbCBiaWwgcG9zbmV0ZWsgcG9zbmV0IGFsaSBpemRlbGFuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICJ6ZW1samVwaXNuYSDFoWlyaW5hIG1lc3RhIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0iemVtbGplcGlzbmEgxaFpcmluYSwga2plciBqZSBiaWwgYmlsIHBvc25ldGVrIHBvc25ldCBhbGkgaXpkZWxhbiB2IHN0b3BpbmphaCAiCi0iZ2xlZGUgbmEgV0dTODQgKHZyZWRub3N0IDAgamUgZG9sb8SNZW5hIHogZWt2YXRvcmplbSwgbmVnYXRpdm5lIHZyZWRub3N0aSBzbyAiCi0iZG9sb8SNZW5lIHphIGp1xb5uZSB6ZW1samVwaXNuZSDFoWlyaW5lKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgInplbWxqZXBpc25hIGRvbMW+aW5hIG1lc3RhIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotInplbWxqZXBpc25hIGRvbMW+aW5hLCBramVyIGplIGJpbCBiaWwgcG9zbmV0ZWsgcG9zbmV0IGFsaSBpemRlbGFuIHYgc3RvcGluamFoICIKLSJnbGVkZSBuYSBXR1M4NCAodnJlZG5vc3QgMCBqZSBkb2xvxI1lbmEgeiBnbGF2bmltLCBncmVlbndpxaFraW0vbmnEjWVsbmltICIKLSJwb2xkbmV2bmlrb20sIG5lZ2F0aXZuZSB2cmVkbm9zdGkgc28gZG9sb8SNZW5lIHphIHphaG9kbmUgemVtbGplcGlzbmUgZG9sxb5pbmUpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAibmFkbW9yc2thIHZpxaFpbmEgbWVzdGEiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0ibmFkbW9yc2thIHZpxaFpbmEsIGtqZXIgamUgYmlsIGJpbCBwb3NuZXRlayBwb3NuZXQgYWxpIGl6ZGVsYW4gdiBtZXRyaWggZ2xlZGUgIgotIm5hIFdHUzg0ICh2cmVkbm9zdCAwIGplIHBvdnByZcSNbmEgdmnFoWluYSBtb3Jza2UgZ2xhZGluZSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiZHLFvmF2YSB6ZW1samVwaXNuZSBsZWdlIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgImRyxb5hdmEgKGFuZ2xlxaFrYSByYXpsacSNaWNhKSwga2plciBqZSBiaWwgcG9zbmV0ZWsgcG9zbmV0IGFsaSBpemRlbGFuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgIm1lc3RvIHplbWxqZXBpc25lIGxlZ2UiCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAibWVzdG8gKGFuZ2xlxaFrYSByYXpsacSNaWNhKSwga2plciBqZSBiaWwgcG9zbmV0ZWsgcG9zbmV0IGFsaSBpemRlbGFuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICJwb2Ryb8SNamUgemVtbGplcGlzbmUgbGVnZSIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0ib2tyYWogem5vdHJhaiBtZXN0YSwga2plciBqZSBiaWwgcG9zbmV0ZWsgcG9zbmV0IGFsaSBpemRlbGFuIChuYSBwcmltZXI6ICIKLSJzb3NlxaHEjWluYSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAidm9kb3Jhdm5hIG5hcGFrYSB6ZW1samVwaXNuZWdhIG1lc3RhIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgInByacSNYWtvdmFuYSBuYXBha2Egdm9kb3Jhdm5vIHVtZcWhxI1ldmFsbmloIG1lciAodiBtZXRyaWgpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJ6ZW1samVwaXNuYSBoaXRyb3N0IGdpYmFuamEiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgImhpdHJvc3QgZ2liYW5qYSBuYXByYXZlIHphamVtYW5qYSBtZWQgaXp2YWphbmplbSB6YWplbWFuamEgdiBtL3MiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJ6ZW1samVwaXNuYSBzbWVyIGdpYmFuamEiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJkb2xvxI1hIHNtZXIgZ2liYW5qYSBuYXByYXZlLCBzIGthdGVybyBqZSBiaWwgemFqZXQgcG9zbmV0ZWsuIERvbG/EjWVuIGplIHYgIgotInN0b3BpbmphaCB2IHphcGlzdSBzIHBsYXZham/EjW8gdmVqaWNvLiBWcmVkbm9zdCAwIGRvbG/EjWEgemVtbGplcGlzbmkgc2V2ZXIgIgotImluIHNlIHBvdmXEjXVqZSB2IHNtZXJpIHVyaW5lZ2Ega2F6YWxjYSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAiemVtbGplcGlzbmEgc21lciB6YWplbWFuamEiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSJkb2xvxI1hIHNtZXIgdXNtZXJqZW5vc3RpIG5hcHJhdmUsIHMga2F0ZXJvIGplIGJpbCB6YWpldCBwb3NuZXRlay4gRG9sb8SNZW4gamUgIgotInYgc3RvcGluamFoIHYgemFwaXN1IHMgcGxhdmFqb8SNbyB2ZWppY28uIFZyZWRub3N0IDAgZG9sb8SNYSB6ZW1samVwaXNuaSBzZXZlciAiCi0iaW4gc2UgcG92ZcSNdWplIHYgc21lcmkgdXJpbmVnYSBrYXphbGNhIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgInBva2HFvmkgaW1lIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAiSW1lIFRWL25hbml6YW5rZS9vZGRhamUsIGtpIGppIHBvc25ldGVrIHByaXBhZGEiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgInBva2HFvmkgcmF6dnLFocSNZXZhbG5vIGltZSIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotIkltZSBUVi9uYW5pemFua2Uvb2RkYWplLCBraSBqaSBwb3NuZXRlayBwcmlwYWRhLCB6YSBwb3RyZWJlIHJhenZyxaHEjWFuamEiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAiZXBpem9kYSIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICLFoHRldmlsa2EgZXBpem9kZSB2IHNlem9uaSwga2kgamkgcG9zbmV0ZWsgcHJpcGFkYSIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgInNlem9uYSIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICLFoHRldmlsa2Egc2V6b25lIG9kZGFqZSwga2kgamkgcG9zbmV0ZWsgcHJpcGFkYSIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAiYmVzZWRpbG8iCi0KLW1zZ2lkICJUaGUgbHlyaWNzIG9mIHRoZSBtZWRpYSwgY29tbW9ubHkgdXNlZCBmb3Igc29uZ3MiCi1tc2dzdHIgIkJlc2VkaWxvIHBvc25ldGthLCBvYmnEjWFqbm8gdXBvcmFibGplbm8gemEgc2tsYWRiZSIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJyYXp2csWhxI1ldmFsbm8gaW1lIHNrbGFkYXRlbGphIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAib3NlYmUsIGtpIHNvIHNvZGVsb3ZhbGUgcHJpIHNuZW1hbmp1LCB6YSBwb3RyZWJlIHJhenZyxaHEjWFuamEiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiemRydcW+ZXZhbmplIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iVnNlYmluYSwga2kgc2VnYSDEjWV6IHZlxI0gcG9zbmV0a292LCBwb2RvYm5vIGtvdCBzdGF2a2kgc2ltZm9uaWplLiBKZSB2acWhamUgIgotInJhdm5pIGtvdCBwb3NuZXRlaywgdmVuZGFyIG5pxb5qZSBrb3QgYWxidW0uIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgIm9jZW5hIHVwb3JhYm5pa2EiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIk9jZW5hLCBraSBqbyBwcmlzcGV2YSB1cG9yYWJuaWsuIFZpxaFqYSBrb3QgamUsIGJvbGogamUgdXBvcmFibmlrdSB2xaFlxI0uIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAicHJvaXp2YWphbGVjIG5hcHJhdmUiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJQcm9penZhamFsZWMgbmFwcmF2ZSwgcyBrYXRlcm8gamUgYmlsIHVzdHZhcmplbmEgZGF0b3Rla2EiCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgIm1vZGVsIG5hcHJhdmUiCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgIk1vZGVsIG5hcHJhdmUsIHMga2F0ZXJvIGplIGJpbCB1c3R2YXJqZW5hIGRhdG90ZWthIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAiaW1lIHByb2dyYW1hIgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICJQcm9ncmFtLCB1cG9yYWJsamVuIHphIGl6ZGVsYXZvIHBvc25ldGthIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAicHJvZ3JhbXNraSBwb2RhdGtpIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotIlBvbGp1Ym5pIHBvZGF0a2kgcHJvZ3JhbWEsIGtpIGJvZG8gcG9zdGF2bGplbmkgdiB2cnN0byBwcmVkc3Rhdm5lIHZzZWJpbmUiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAidXNtZXJqZW5vc3Qgc2xpa2UiCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgIktha28gbmFqIGJvIHNsaWthIHphdnJ0aSBhbGkgenJjYWxpIHByZWQgcHJpa2F6b20iCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgInphbG/FvmJhIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgbGFiZWwgb3IgcHVibGlzaGVyIgotbXNnc3RyICJJbWUgemFsb8W+YmUiCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAiYXZ0b3JqaS1wcmVkZWxhdmUiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiUG9kYXRraSBvIGF2dG9yamloIHByZWRlbGF2IGluIGRydWdpaCByYXpsacSNaWMiCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICIiCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIlJvxI1uaWthIFVSSSB6YSBwcm90b2tvbCAlcyBuaSBtb2dvxI1lIG5hanRpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICJTaGVtYSBVUkkgXCIlc1wiIG5pIHBvZHBydGEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiTkFQQUtBOiBwcmVkbWV0ICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkRvZGF0bmkgcG9kYXRraSByYXpocm/FocSNZXZhbmphOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImxhc3Rub3N0IFwiJXNcIiB2IHByZWRtZXR1IFwiJXNcIiBuZSBvYnN0YWphIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAiIgotImxhc3Rub3N0aSBcIiVzXCIgdiBwcmVkbWV0dSBcIiVzXCIgbmkgbW9nb8SNZSBuYXN0YXZpdGkgbmEgdnJlZG5vc3QgXCIlc1wiIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAiJXMgaW4gJXMgbmkgbW9nb8SNZSBwb3ZlemF0aSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAicHJlZG1ldCBcIiVzXCIgbmUgb2JzdGFqYSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAidmVsaWtpaCDEjXJrIFwiJXNcIiBuaSBtb2dvxI1lIHJhesSNbGVuaXRpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAicHJlZG1ldCBwb25vcmEgemEgbmFzbG92IFVSSSBcIiVzXCIgbmUgb2JzdGFqYSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiaXp2b3JuaSBwcmVkbWV0IHphIG5hc2xvdiBVUkkgXCIlc1wiIG5lIG9ic3RhamEiCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgImRvbG/EjWVuYSBqZSBwcmF6bmEgZHZvamnFoWthIGRhdG90ZWthIFwiJXNcIiwga2FyIG5pIGRvdm9samVubyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJkdm9qacWha2EgZGF0b3Rla2EgXCIlc1wiIG5lIG9ic3RhamEsIHphdG8gYm8gZGVqYW5qZSBpenB1xaHEjWVubyIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJjZXZvdm9kIGJyZXogdnNlYmluZSBuaSBkb3ZvbGplbiIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJWZWxpa28gbWVkcG9tbmlsbmlrb3Ygc2UgcHJhem5pLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiTm90cmFuamEgdGXFvmF2YSB0b2thIHBvZGF0a292LiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIk5vdHJhbmphIG5hcGFrYSB0b2thIHBvZGF0a292LiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiTm90cmFuamEgbmFwYWthIHVyZS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIk1lZHBvbW5pbG5pa2EgbmkgbW9nb8SNZSBwcmVzbGlrYXRpLiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJGaWx0cmlyYWogdmVsaWtvc3QgxI1yayIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iT21lamkgbW/Fvm5lIGRvdm9samVuZSB6bW/Fvm5vc3RpIChOVUxMIHBvbWVuaSBBTlksIHZzZSkuIFMgdGVtIG5hc2xhdmxqYXRlICIKLSJwcmlsb8W+ZW5pIHByZWRtZXQgR3N0Q2Fwcy4iCi0KLW1zZ2lkICJDYXBzIENoYW5nZSBNb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICJaYcSNYXNuYSBtYXBhIG5pIGRvbG/EjWVuYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiWmHEjWFzbmUgZGF0b3Rla2UgXCIlc1wiIG5pIG1vZ2/EjWUgdXN0dmFyaXRpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkRhdG90ZWtlIFwiJXNcIiBuaSBtb2dvxI1lIG9kcHJldGkgemEgYnJhbmplLiIKLQotbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZG93bmxvYWQgZmlsZS4iCi1tc2dzdHIgIk5hcGFrYSBtZWQgemFwaXNvdmFuamVtIHYgcHJlamV0byBkYXRvdGVrby4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiSW1lIGRhdG90ZWtlIHphIHBpc2FuamUgbmkgZG9sb8SNZW5vLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkRhdG90ZWtlIFwiJXNcIiBuaSBtb2dvxI1lIG9kcHJldGkgemEgcGlzYW5qZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIk5hcGFrYSBtZWQgemFwaXJhbmplbSBkYXRvdGVrZSBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJOYXBha2EgbWVkIGlza2FuamVtIHYgZGF0b3Rla2kgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiTmFwYWthIG1lZCBwaXNhbmplbSB2IGRhdG90ZWtvIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiSW1lIGRhdG90ZWtlIHphIGJyYW5qZSBuaSBkb2xvxI1lbm8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICJQb2RhdGtvdiBvIFwiJXNcIiBuaSBtb2fEjWUgcHJpZG9iaXRpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICJcIiVzXCIgamUgbWFwYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJEYXRvdGVrYSBcIiVzXCIgamUgdnRpxI0uIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiUG8gdmXEjSBwb25vdml0dmFoIGplIGJpbG8gKHBvIHphaHRldmkpIG9wcmF2aWxvIG5ldXNwZcWhbm8gcHJla2luamVuby4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJ2ZWxpa2UgxI1ya2UiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJ6YXpuYW5lIHNvIHptb8W+bm9zdGkgcHJldG9rYSIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIm5ham1hbmoiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICJ2c2lsaSB2ZWxpa2UgxI1ya2UiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAidnNpbGkgdmVsaWtlIMSNcmtlIGJyZXogcG90cmpldmFuamEgcGlzYXZlIgotCi0jLCBmdXp6eQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJQcmV0b2sgbmUgdnNlYnVqZSBwb2RhdGtvdi4iCi0KLW1zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCi1tc2dzdHIgIlByZXRvayBuZSB2c2VidWplIHBvZGF0a292LiIKLQotbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCi1tc2dzdHIgIlZncmFqZW5pIHZtZXNuaWtpOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgImJlcmxqaXZvIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgInphcGlzbGppdm8iCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgIm5hZHpvcmxqaXZvIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgInNwcmVtZW5saml2byBsZSB2IHN0YW5qaWggTlVMTCwgUkVBRFksIFBBVVNFRCBpbiBQTEFZSU5HIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAic3ByZW1lbmxqaXZvIGxlIHYgc3RhbmppaCBOVUxMLCBSRUFEWSBpbiBQQVVTRUQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAic3ByZW1lbmxqaXZvIGxlIHYgc3RhbmppaCBOVUxMIGluIFJFQURZIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICJEYXRvdGVrZSBuYSDEjXJuZW0gc2V6bmFtdToiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJTa3Vwbm86ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQgZGF0b3RlayBuYSDEjXJuZW0gc2V6bmFtdSIKLW1zZ3N0clsxXSAiJWQgZGF0b3Rla2EgbmEgxI1ybmVtIHNlem5hbXUiCi1tc2dzdHJbMl0gIiVkIGRhdG90ZWtpIG5hIMSNcm5lbSBzZXpuYW11IgotbXNnc3RyWzNdICIlZCBkYXRvdGVrZSBuYSDEjXJuZW0gc2V6bmFtdSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIHZzdGF2a292IgotbXNnc3RyWzFdICIlZCB2c3RhdmVrIgotbXNnc3RyWzJdICIlZCB2c3RhdmthIgotbXNnc3RyWzNdICIlZCB2c3RhdmtpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkIHZub3NvdiBuYSDEjXJuZW0gc2V6bmFtdSIKLW1zZ3N0clsxXSAiJWQgdm5vcyBuYSDEjXJuZW0gc2V6bmFtdSIKLW1zZ3N0clsyXSAiJWQgdm5vc2EgbmEgxI1ybmVtIHNlem5hbXUiCi1tc2dzdHJbM10gIiVkIHZub3NpIG5hIMSNcm5lbSBzZXpuYW11IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCB6bW/Fvm5vc3RpIgotbXNnc3RyWzFdICIlZCB6bW/Fvm5vc3QiCi1tc2dzdHJbMl0gIiVkIHptb8W+bm9zdGkiCi1tc2dzdHJbM10gIiVkIHptb8W+bm9zdGkiCi0KLW1zZ2lkICJQcmludCBhbGwgZWxlbWVudHMiCi1tc2dzdHIgIkl6cGnFoWkgdnNlIHByZWRtZXRlIgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiSXpwacWhaSBzZXpuYW0gZGF0b3RlayBuYSDEjXJuZW0gc2V6bmFtdSIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iSXpwacWhaSBzdHJvam5vIHJhesSNbGVuamVuIHNlem5hbSBtb8W+bm9zdGkgbmF2ZWRlbmVnYSB2c3RhdmthIGFsaSB2c2VoICIKLSJ2c3Rhdmtvdi5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcG9yYWJubyB2IHBvdmV6YXZpIHogenVuYW5qaW1pICIKLSJtZWhhbml6bWkgemEgc2Ftb2Rlam5vIG5hbWVzdGl0ZXYgdnN0YXZrb3YiCi0KLW1zZ2lkICJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiCi1tc2dzdHIgIkl6cGnFoWkgc2V6bmFtIHZzZWJpbmUgdnN0YXZrb3YiCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiUHJldmVyaSwgxI1lIHBvZGFuIHByZWRtZXQgYWxpIHZzdGF2ZWsgxb5lIG9ic3RhamEiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0iTWVkIHByZXZlcmphbmplbSwgxI1lIHByZWRtZXQgYWxpIHZzdGF2ZWsgxb5lIG9ic3RhamEsIHByZXZlcmksIMSNZSBqZSB1c3RyZXpuYSAiCi0idHVkaSByYXpsacSNaWNhIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICJJenBpxaFpIHBvZHBydGUgc2hlbWUgVVJJIHMgcHJlZG1ldGksIGtpIGppaCB2c3RhdmxqYWpvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJEYXRvdGVrZSB2c3RhdmthIG5pIG1vZ2/EjWUgbmFsb8W+aXRpOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJQcmVkbWV0IGFsaSBkYXRvdGVrYSBcIiVzXCIgbmUgb2JzdGFqYVxuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiU3RhdGlzdGlrYSBrYXphbGEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJQcmVqZXRvIHNwb3JvxI1pbG8gIyV1IG9kIHByZWRtZXRhIFwiJXNcIiAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiCi1tc2dzdHIgIlByZWpldG8gc3Bvcm/EjWlsbyAjJXUgb2QgcGxhZG5qYSBcIiVzOiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJQcmVqZXRvIHNwb3JvxI1pbG8gIyV1IG9kIHByZWRtZXRhIFwiJXNcIiAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiUHJlamV0byBzcG9yb8SNaWxvICMldSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJQcmVqZXQgRU9TIHByZWRtZXRhIFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJOQUpERU5BIE9aTkFLQSAgICAgIDogbmFqZGVubyBzIHByZWRtZXRvbSBcIiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIgotbXNnc3RyICJOQUpERU5BIE9aTkFLQSAgICAgIDogbmFqZGVubyBzIHBsYWRuamVtIFwiJXM6JXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIk5BSkRFTkEgT1pOQUtBICAgICAgOiBuYWpkZW5vIHMgcHJlZG1ldG9tIFwiJXNcIi5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJOQUpERU5BIE9aTkFLQVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk5BSkRFTk8gS0FaQUxPICAgICAgOiBuYWpkZW5vIHMgcHJlZG1ldG9tIFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIk5BSkRFTk8gS0FaQUxPICAgICAgOiBuYWpkZW5vIHMgcHJlZG1ldG9tIFwiJXNcIi5cbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICJOQUpERU5PIEtBWkFMT1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJQT0RBVEtJOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJPUE9aT1JJTE86IHByZWRtZXQgJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiUHJpcHJhdmxqZW5vLCDEjWFrYW5qZSBuYSB6YWtsanXEjWVrIHBvbG5qZW5qYSBtZWRwb21uaWxuaWthIC4uLlxuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiUHJpcHJhdmxqZW5vLCDEjWFrYW5qZSBuYSB6YWtsanXEjWVrIG9wcmF2aWxhIC4uLlxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICJwb2xuamVuamUgbWVkcG9tbmlsbmlrYSAuLi4iCi0KLW1zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICIiCi0iUG9sbmplbmplIG1lZHBvbW5pbG5pa2EgamUga29uxI1hbm8sIG5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBQTEFZSU5HIC4uLlxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiUG9sbmplbmplIG1lZHBvbW5pbG5pa2EsIG5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBQQVVTRUQgLi4uXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICJQcmVyYXpwb3JlamFuamUgcHJpdGFqZW5vc3RpIC4uLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIk5hc3RhdmxqYW5qZSBzdGFuamEgbmEgJXMsIGtvdCB0byB6YWh0ZXZhICVzIC4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiUHJla2luaXRldjogemF1c3RhdmxqYW5qZSBjZXZvdm9kYSAuLi4gXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiTmFwcmVkZWs6ICglcykgJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgIk1hbmprYWpvxI1pIGVsZW1lbnQ6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIlZzZWJpbmEgamUgYmlsYSBwcmlkb2JsamVuYSBpeiBlbGVtZW50YSBcIiVzXCI6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIkl6aG9kbmUgb3puYWtlICh6bmFuZSB0dWRpIGtvdCBtZXRhcG9kYXRraSkiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICJJenBpxaFpIGthemFsbyAocG9nbGF2amEpIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiSXpob2RuaSBwb2RhdGtpIG8gc3Rhbmp1IGluIG9idmVzdGlsYSBvIGxhc3Rub3N0aWgiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJOZSBpenBpxaFpIHBvZHJvYm5vc3RpIG5hcHJlZGthIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICJJemhvZG5hIHNwb3JvxI1pbGEiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJOYSBuYW1lc3RpIHJvxI1uaWthIG5hcGFrIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICJWaXJ1IHZzaWxpIEVPUyBwcmVkIHphdXN0YXZpdHZpam8gY2V2b3ZvZGEiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIlpiZXJpIGluIG5hdGlzbmkgc3RhdGlzdGlrbyBrYXphbGEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIk5BUEFLQTogY2V2b3ZvZGEgbmkgbW9nb8SNZSBpemdyYWRpdGk6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiTkFQQUtBOiBjZXZvdm9kYSBuaSBtb2dvxI1lIGl6Z3JhZGl0aS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIk9QT1pPUklMTzogY2V2b3ZvZCB6IG5hcGFrYW1pOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJOQVBBS0E6IHByZWRtZXRhIFwiY2V2b3ZvZGFcIiBuaSBtb2dvxI1lIG5hanRpLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIk5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBQQVVTRUQgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJOQVBBS0E6IGNldm92b2RhIG5pIG1vZ2/EjWUgcG9zdGF2aXRpIHYgbWlyb3ZhbmplLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICJDZXZvdm9kIGplIMW+aXYgaW4gZ2EgbmkgcG90cmVibm8gcHJpcHJhdml0aSAuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIkNldm92b2Qgc2UgcHJpcHJhdmxqYSAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiTkFQQUtBOiBjZXZvdm9kYSBuaSBtb2dvxI1lIHByaXByYXZpdGkuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIkNldm92b2QgamUgcHJpcHJhdmxqZW4gLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIk5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBQTEFZSU5HIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIgotbXNnc3RyICJOQVBBS0E6IHZzZWJpbmUgY2V2b3ZvZGEgbmkgbW9nb8SNZSBwcmVkdmFqYXRpLlxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iCi1tc2dzdHIgIkVPUyBvYiBpemtsb3B1IGplIG9tb2dvxI1lbiAtLSB2c2lsamVuIEVPUyB2c2ViaW5lIGNldm92b2RhXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiRU9TIG9iIGl6a2xvcHUgamUgb21vZ2/EjWVuIC0tIMSNYWthbmplIG5hIEVPUywga2kgc2xlZGkgbmFwYWtpXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAixIxha2FuamUgbmEgRU9TIC4uLlxuIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiUHJlamV0IEVPUyAtIHphdXN0YXZsamFuamUgY2V2b3ZvZGEgLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiUHJla2luaXRldiBtZWQgxI1ha2FuamVtIG5hIEVPUy4gWmF1c3RhdmxqYW5qZSBjZXZvdm9kYSAuLi5cbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICJNZWQgxI1ha2FuamVtIG5hIEVPUyBqZSBwcmnFoWxvIGRvIG5hcGFrZVxuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIkl6dmFqYW5qZSBqZSBiaWxvIHByZWtpbmplbm8gcG8gJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIk5hc3RhdmxqYW5qZSBjZXZvdm9kYSBuYSBSRUFEWSAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gTlVMTCAuLi5cbiIKLW1zZ3N0ciAiTmFzdGF2bGphbmplIGNldm92b2RhIG5hIE5VTEwgLi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJTcHJvxaHEjWFuamUgY2V2b3ZvZGEgLi4uXG4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIk5vdHJhbmphIG5hcGFrYSBwcmV0b2thIHBvZGF0a292LiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIk5lIGl6cGnFoWkgcG9kcm9ibm9zdGkgc3RhbmphIFZSU1RFIgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICJWUlNUQTEsIFZSU1RBMiAuLi4iCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgInBvdmV6YXZhIGJyZXogcHJlZG1ldGEgdmlyYSIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgInBvdmV6YXZhIGJyZXogcHJlZG1ldGEgcG9ub3JhIgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgIm5pIHByZWRtZXRhIHphIHBvdmV6b3ZhbmplIG5hc2xvdmEgXCIlc1wiIG5hIgotCi0jfiBtc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotI34gbXNnc3RyICJwcmVkbWV0YSBrb3JpdGEgemEgbmFzbG92IFVSSSBcIiVzXCIgbmkgbW9nb8SNZSBwb3ZlemF0aSIKZGlmZiAtLWdpdCBhL3BvL3NxLmdtbyBiL3BvL3NxLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY5YjlkYy4uMDAwMDAwMAotLS0gYS9wby9zcS5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9zcS5wbyBiL3BvL3NxLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDRiZTMwLi4wMDAwMDAwCi0tLSBhL3BvL3NxLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1MiArMCwwIEBACi0jIFDDq3JrdGhpbWkgaSBtZXNhemhldmUgdMOrIGdzdHJlYW1lciBuw6sgc2hxaXAuCi0jIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgTGF1cmVudCBEaGltYSA8bGF1cmVudGlAYWxibGludXgubmV0PiwgMjAwNC4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAwLjguNFxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjEyKzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTA4LTA3IDIzOjQ2KzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IExhdXJlbnQgRGhpbWEgPGxhdXJlbnRpQGFsYmxpbnV4Lm5ldD5cbiIKLSJMYW5ndWFnZS1UZWFtOiBBbGJhbmlhbiA8YmVncmFqQGhvdG1haWwuY29tPlxuIgotIkxhbmd1YWdlOiBzcVxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJQcmludG8gdmVyc2lvbmluIGUgR1N0cmVhbWVyIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIkLDq2ogccOrIHTDqyBnaml0aMOrIHBhcmFsYWptw6tyaW1ldCB0w6sgamVuw6sgZmF0YWxlIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIlByaW50byBrYXRlZ29yaXTDqyBlIGRlYnVnIG7DqyBkaXNwb3ppY2lvbiBkaGUgZGlsIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIk5pdmVsaSBpIHByZXpnamVkaHVyIGkgZGVidWcgbmdhIDEgKHZldMOrbSBnYWJpbWkpIG7DqyA1IChnaml0aMOna2EpIG9zZSAwIHDDq3IgIgotImpvIG91dHB1dCIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJOSVZFTEkiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iTGlzdGEgZSBjYXRlZ29yeV9uYW1lLCBuZGFyw6sgbWUgcHJlc2plOmV0aWtldMOrIMOnaWZ0ZSBww6tyIHTDqyBww6tyY2FrdHVhciAiCi0iZXRpa2V0YSBzcGVjaWZpa2UgcMOrciBrYXRlZ29yaXTDqyBpbmRpdmlkdWFsZS4gU2hlbWJ1bGw6IEdTVF9BVVRPUExVRzo1LCIKLSJHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICJMSVNUw4siCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiw4cnYWt0aXZvIG91dHB1dCBzaHVtw6tuZ2p5csOrc2ggdMOrIGRlYnVnIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICLDhydha3Rpdm8gZGVidWciCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiQWt0aXZvIGvDq3JrZXPDq24gZSBwbHVnaW4gdMOrIG5nYXJraW1pdCB0w6sgZGlhZ25vc3Rpa2ltZXZlIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIlBPWklDSU9ORVQiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIkxpc3RhIGUgcGx1Z2luLCB0w6sgbmRhcsOrIG1lIHByZXNqZSwgccOrIGR1aGVuIHBhcmFuZ2Fya3VhciBuw6sgcGxvdMOrc2ltIHTDqyAiCi0ibGlzdMOrcyBzw6sgcmVnamlzdHJ1YXIgdGVrIGUgbmRyeXNodWVzaG1qYSBlIGFtYmllbnRpdCBHU1RfUExVR0lOX1BBVEgiCi0KLW1zZ2lkICJQTFVHSU5TIgotbXNnc3RyICJQTFVHSU5TIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiIgotIsOHJ2FrdGl2byByZWdqaXN0cmltaW4gZSBkw6tzaHRpbWV2ZSB0w6sgc2VnbWVudHVhcmEgZ2phdMOrIG5nYXJraW1pdCB0w6sgcGx1Z2luIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiUHJpbnRvIHZlcnNpb25pbiBlIEdTdHJlYW1lciIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBuZGVzaGkgbsOrIG5qw6sgZ2FiaW0gdMOrIHDDq3Jnaml0aHNow6ttIHTDqyBsaWJyYXJpc8OrIGJhesOrLiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGRldmVsb3BlcnMgd2VyZSB0b28gbGF6eSB0byBhc3NpZ24gYW4gZXJyb3IgY29kZSB0byB0aGlzIGVycm9yLiIKLW1zZ3N0ciAiIgotIlpodmlsbHVlc2l0IGUgR1N0cmVhbWVyIGlzaGluIHRlcMOrciB0w6sgbG9kaHVyIHDDq3IgdCdpIGNha3R1YXIgbmrDqyBrb2QgZ2FiaW1pICIKLSJrw6t0aWogZGlmZWt0aS4gIEp1IGx1dGVtIGTDq3Jnb25pIG5qw6sgcmFwb3J0LiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiR2FiaW0gaSBicmVuZHNow6ttIGkgR1N0cmVhbWVyOiBrb2RpIG11bmdvbi4gIFJhcG9ydG8gYnVnLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJHYWJpbSBpIGJyZW5kc2jDq20gaSBHU3RyZWFtZXI6IHByb2JsZW0gbWUgc2h0ZWd1bi4gIFJhcG9ydG8gYnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiR2FiaW0gaSBicmVuZHNow6ttIGkgR1N0cmVhbWVyOiBwcm9ibGVtIGkgdGhyZWFkLiAgUmFwb3J0byBidWcuIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkdhYmltIGkgYnJlbmRzaMOrbSBpIEdTdHJlYW1lcjogcHJvYmxlbSBuZWdvY2ltaS4gIFJhcG9ydG8gYnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJHYWJpbSBpIGJyZW5kc2jDq20gaSBHU3RyZWFtZXI6IHByb2JsZW0gbmRvZGhpZS4gIFJhcG9ydG8gYnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNlZWsgcHJvYmxlbS4iCi1tc2dzdHIgIkdhYmltIGkgYnJlbmRzaMOrbSBpIEdTdHJlYW1lcjogcHJvYmxlbSBrw6tya2ltaS4gIFJhcG9ydG8gYnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgIkdhYmltIGkgYnJlbmRzaMOrbSBpIEdTdHJlYW1lcjogcHJvYmxlbSBkcmVqdGltaS4gIFJhcG9ydG8gYnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiR2FiaW0gaSBicmVuZHNow6ttIGkgR1N0cmVhbWVyOiBwcm9ibGVtIG1lIHRhZy4gIFJhcG9ydG8gYnVnLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IGNsb2NrIHByb2JsZW0uIgotbXNnc3RyICJHYWJpbSBpIGJyZW5kc2jDq20gaSBHU3RyZWFtZXI6IHByb2JsZW0ga8OrcmtpbWkuICBSYXBvcnRvIGJ1Zy4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgbmRlc2hpIG7DqyBuasOrIGdhYmltIGxpYnJhcmllIHTDqyBzdXBvcnRpdCB0w6sgcMOrcmdqaXRoc2jDq20uIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBuaXNqYSBlIGxpYnJhcmlzw6sgbWLDq3NodGV0w6tzZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYnlsbGphIGUgbGlicmFyaXPDqyBtYsOrc2h0ZXTDq3NlLiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWJ5bGxqYSBlIGxpYnJhcmlzw6sgbWLDq3NodGV0w6tzZS4iCi0KLW1zZ2lkICJFbmNvZGluZyBlcnJvci4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIG5kZXNoaSBuw6sgbmrDqyBnYWJpbSB0w6sgcMOrcmdqaXRoc2jDq20gdMOrIGxpYnJhcmlzw6sgYmF6w6suIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiQnVyaW1pIG51ayB1IGdqZXQuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiQnVyaW1pIMOrc2h0w6sgaSB6w6tuw6sgb3NlIGpvIG7DqyBkaXNwb3ppY2lvbi4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBidXJpbWl0IHDDq3IgbGV4aW0uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJFIHBhbXVuZHVyIGhhcGphIGUgYnVyaW1pdCBww6tyIHNoa3JpbS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBidXJpbWl0IHDDq3IgbGV4aW0gZGhlIHNoa3JpbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgotbXNnc3RyICJFIHBhbXVuZHVyIG1ieWxsamEgZSBidXJpbWl0LiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICJJIHBhbXVuZHVyIGxleGltaSBuZ2EgYnVyaW1pLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIkkgcGFtdW5kdXIgaGtyaW1pIG7DqyBidXJpbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBrcnllcmphIGUga8OrcmtpbWl0IG7DqyBidXJpbS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJTaW5rcm9uaXppbSBpIHBhbXVuZHVyIG7DqyBidXJpbS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYXJyamEvdmVuZG9zamEgZSBycmVndWxsaW1ldmUgbmdhL27DqyBidXJpbS4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJJIHBhbXVuZHVyIGhrcmltaSBuw6sgYnVyaW0uIgotCi0jLCBmdXp6eQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIG5kZXNoaSBuw6sgbmrDqyBnYWJpbSB0w6sgcMOrcmdqaXRoc2jDq20gdMOrIGxpYnJhcmlzw6sgYmF6w6suIgotCi1tc2dpZCAiRWxlbWVudCBkb2Vzbid0IGltcGxlbWVudCBoYW5kbGluZyBvZiB0aGlzIHN0cmVhbS4gUGxlYXNlIGZpbGUgYSBidWcuIgotbXNnc3RyICIiCi0iRWxlbWVudGkgbnVrIHN1cG9ydG9uIHRyYWp0aW1pbiBlIGvDq3NhaiB2YXpoZGUuIEp1IGx1dGVtIHJhcG9ydG8gbmrDqyBidWcuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIkkgcGFtdW5kdXIgcMOrcmNha3RpbWkgaSBsbG9qaXQgdMOrIHZhemhkw6tzLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiVmF6aGRhIMOrc2h0w6sgZSBuasOrIGxsb2ppIHTDqyBuZHJ5c2jDq20gbmdhIHTDqyB0cmFqdHVhcml0IG5nYSBreSBlbGVtZW50LiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiQXNuasOrIGtvZHVlcy9kZWtvZHVlcyBuw6sgZGlzcG96aWNpb24gcMOrciB0w6sgdHJhanR1YXIgbGxvamluIGUgdmF6aGTDq3MuIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJJIHBhbXVuZHVyIGRla29kaWZpa2ltaSBpIHZhemhkw6tzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiSSBwYW11bmR1ciBrb2RpZmlraW1pIGkgdmF6aGTDq3MuIgotCi1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIkkgcGFtdW5kdXIgZGVtdWx0aXBsZWtzaW1pIGkgc3RyZWFtLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiSSBwYW11bmR1ciBtdWx0aXBsZWtzaW1pIGkgdmF6aGTDq3MuIgotCi0jLCBmdXp6eQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgIlZhemhkYSDDq3NodMOrIG7DqyBuasOrIGZvcm1hdCB0w6sgZ2FidWFyLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGNhbid0IGJlIGRlY3J5cHRlZCBiZWNhdXNlIG5vIHN1aXRhYmxlIGtleSBoYXMgIgotImJlZW4gc3VwcGxpZWQuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiQXNuasOrIG1lc2F6aCBnYWJpbWkgcMOrciBkb21haW4gJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIkFzbmrDqyBtZXNhemggZ2FiaW1pIHN0YW5kYXJ0IHDDq3IgZG9tYWluICVzIGRoZSBrb2RpbiAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgInRpdHVsbGkiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJ0aXR1bGxpIGkgcMOrcmRvcnVyIHpha29uaXNodCIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAidGl0dWxsaSBpIHDDq3Jkb3J1ciB6YWtvbmlzaHQiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgImFydGlzdGkiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgInBlcnNvbmkoYXQpIHDDq3JnamVnasOrcyBww6tyIHJlZ2ppc3RyaW1pbiIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAicGVyc29uaShhdCkgcMOrcmdqZWdqw6tzIHDDq3IgcmVnamlzdHJpbWluIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgImFsYnVtaSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICJhbGJ1bWkgccOrIHDDq3JtYmFuIGvDq3TDqyB0w6sgZGjDq27DqyIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsYnVtaSBxw6sgcMOrcm1iYW4ga8OrdMOrIHTDqyBkaMOrbsOrIgotCi0jLCBmdXp6eQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAiYXJ0aXN0aSIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgImRhdGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHRGF0ZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXRhIGUga3JpamltaXQgdMOrIHPDqyBkaMOrbsOrcyAobsOrIGRpdMOrIHTDqyBrYWxlbmRhcml0IEp1bGlhbikiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgImRhdGEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXRhIGUga3JpamltaXQgdMOrIHPDqyBkaMOrbsOrcyAobsOrIGRpdMOrIHTDqyBrYWxlbmRhcml0IEp1bGlhbikiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAibGxvamkiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAibGxvamkgc8OrIGNpbGl0IGkgdGFrb24gZSBkaMOrbmEiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJrb21lbnRpIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgInRla3N0IGkgbGlyw6sga29tZW50dWVzIGkgc8OrIGRow6tuw6tzIgotCi0jLCBmdXp6eQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImtvbWVudGkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICJ0ZWtzdCBpIGxpcsOrIGtvbWVudHVlcyBpIHPDqyBkaMOrbsOrcyIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAibnVtcmkgaSBwaXN0w6tzIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIm51bXJpIGkgcGplc8OrcyBuw6sgYnJlbmTDq3NpIHTDqyBuasOrIGtvbGVrc2lvbmkiCi0KLW1zZ2lkICJ0cmFjayBjb3VudCIKLW1zZ3N0ciAibnVtw6tyaW1pIGkgcGplc8OrcyIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIm51bXVyaW1pIGkgcGplc8OrdmUgbsOrIGJyZW5kw6tzaSB0w6sga29sZWtzaW9uaXQgdMOrIGNpbGl0IGkgcMOrcmtldCBwamVzYSIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICJudW1yaSBpIGRpc2t1dCIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgIm51bXJpIGkgZGlza3V0IG7DqyBicmVuZMOrc2kgdMOrIG5qw6sga29sZWtzaW9uaSIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgIm51bXVyaW1pIGkgZGlza3V0IgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIm51bXVyaW1pIGkgZGlzcWV2ZSBuw6sgYnJlbmTDq3NpIHTDqyBrb2xla3Npb25pdCB0w6sgY2lsaXQgaSBww6tya2V0IGRpc2t1IgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgInBvemljaW9uaSIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICIiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgInDDq3JzaGtyaW1pIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICJ0ZWtzIGkgc2hrdXJ0w6tyIHDDq3JzaGtydWVzIGkgcMOrcm1iYWp0amVzIHPDqyBzw6sgZGjDq27Dq3MiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJ2ZXJzaW9uaSIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhpcyBkYXRhIgotbXNnc3RyICJ2ZXJzaW9uaSBpIGvDq3NhaiB0w6sgZGjDq25lIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiIgotIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzaGlrbyBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJvcmdhbml6YXRhIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICJjb3B5cmlnaHQiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJzaMOrbmltZSBtYmkgdMOrIGRyZWp0YXQgZSBzw6sgZGjDq27Dq3MiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi0jLCBmdXp6eQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAic2jDq25pbWUgbWJpIHTDqyBkcmVqdGF0IGUgc8OrIGRow6tuw6tzIgotCi0jLCBmdXp6eQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgImtvZGlmaWt1ZXNpIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAia29udGFrdGkiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJpbmZvcm1hY2lvbmUgbsOrIGxpZGhqZSBtZSBrb250YWt0aW4iCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsacOnZW5jYSIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAibGnDp2VuY2EgZSBzw6sgZGjDq27Dq3MiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgImxpw6dlbmNhIgotCi0jLCBmdXp6eQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAibGnDp2VuY2EgZSBzw6sgZGjDq27Dq3MiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgImludGVycHJldHVlc2kiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVyc29uaShhdCkgaW50ZXJwcmV0dWVzIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgInBlcnNvbmkoYXQpIHDDq3JnamVnasOrcyBww6tyIHJlZ2ppc3RyaW1pbiIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29uZHVjdG9yL3BlcmZvcm1lciByZWZpbmVtZW50IgotbXNnc3RyICIiCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAia29ow6t6Z2phdGphIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgImdqYXTDq3NpYSBuw6sgbmrDq3NpIGtvaG9yZSB0w6sgR1N0cmVhbWVyIChuYW5vc2Vrb25kYSkiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAiY29kZWMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIGt1IGphbsOrIHJlZ2ppc3RydWFyIHTDqyBkaMOrbmF0IgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgInZpZGVvIGNvZGVjIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjb2RlYyBrdSBqYW7DqyByZWdqaXN0cnVhciB0w6sgZGjDq25hdCB2aWRlbyIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJhdWRpbyBjb2RlYyIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29kZWMga3UgamFuw6sgcmVnamlzdHJ1YXIgdMOrIGRow6tuYXQgYXVkaW8iCi0KLSMsIGZ1enp5Ci1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgInZpZGVvIGNvZGVjIgotCi0jLCBmdXp6eQotbXNnaWQgImNvZGVjIHRoZSBzdWJ0aXRsZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAiY29kZWMga3UgamFuw6sgcmVnamlzdHJ1YXIgdMOrIGRow6tuYXQgdmlkZW8iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAiaW5mb3JtYWNpb25lIG7DqyBsaWRoamUgbWUga29udGFrdGluIgotCi0jLCBmdXp6eQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjb2RlYyBrdSBqYW7DqyByZWdqaXN0cnVhciB0w6sgZGjDq25hdCIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgImJpdHJhdGUiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJiaXRyYXRlIHByZcOnaXplIG9zZSBtZXNhdGFyZSBuw6sgYml0cy9zIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJiaXRyYXRlIG5vbWluYWxlIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiYml0cmF0ZSBub21pbmFsZSBuw6sgYml0cy9zIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIgotbXNnc3RyICJiaXRyYXRlIG1pbmltdW0iCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJiaXRyYXRlIG1pbmltdW0gbsOrIGJpdHMvcyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSIKLW1zZ3N0ciAiYml0cmF0ZSBtYWtzaW11bSIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgImJpdHJhdGUgbWFrc2ltdW0gbsOrIGJpdHMvcyIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImtvZGlmaWt1ZXNpIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAia29kaWZpa3Vlc2kgaSBww6tyZG9ydXIgcMOrciB0w6sga29kaWZpa3VhciBrw6t0w6sgZmx1a3MiCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgInZlcnNpb25pIGkga29kaWZpa3Vlc2l0IgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAidmVyc2lvbmkgaSBrb2RpZmlrdWVzaXQgdMOrIHDDq3Jkb3J1ciBww6tyIHTDqyBrb2RpZmlrdWFyIGvDq3TDqyBmbHVrcyIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAic2VyaWEiCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICJudW1yaSBzZXJpc8OrIHPDqyBwamVzw6tzIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICJlY3VyaWEgaSBwamVzw6tzIG7DqyByZXBseWdhaW4iCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICJycml0amEgZSBwamVzw6tzIG7DqyBkYiIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAibWFrc2ltdW1pIGkgcGplc8OrcyBuw6sgcmVwbHlnYWluIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgInNrYWppIGkgcGlzdMOrcyIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiZ2FpbiBpIGFsYnVtaXQgbsOrIGRiIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAia3VsbWkgaSBhbGJ1bWl0IgotCi0jLCBmdXp6eQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICJtYWtzaW11bWkgaSBwamVzw6tzIG7DqyByZXBseWdhaW4iCi0KLW1zZ2lkICJyZWZlcmVuY2UgbGV2ZWwgb2YgdHJhY2sgYW5kIGFsYnVtIGdhaW4gdmFsdWVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIGZvciB0aGlzIHN0cmVhbSwgY29uZm9ybWluZyB0byBJU08tNjM5LTEgb3IgSVNPLTYzOS0yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2UiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJrb2RpZmlrdWVzaSBpIHDDq3Jkb3J1ciBww6tyIHTDqyBrb2RpZmlrdWFyIGvDq3TDqyBmbHVrcyIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICIiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAia29kaWZpa3Vlc2kgaSBww6tyZG9ydXIgcMOrciB0w6sga29kaWZpa3VhciBrw6t0w6sgZmx1a3MiCi0KLW1zZ2lkICJiZWF0cyBwZXIgbWludXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAidGVrcyBpIHNoa3VydMOrciBww6tyc2hrcnVlcyBpIHDDq3JtYmFqdGplcyBzw6sgc8OrIGRow6tuw6tzIgotCi0jLCBmdXp6eQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICJwb3ppY2lvbmkiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAicG96aWNpb25pIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAicG96aWNpb25pIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCi1tc2dzdHIgInBvemljaW9uaSIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCi1tc2dzdHIgInBvemljaW9uaSIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJwb3ppY2lvbmkiCi0KLW1zZ2lkICIiCi0ibW92ZW1lbnQgc3BlZWQgb2YgdGhlIGNhcHR1cmluZyBkZXZpY2Ugd2hpbGUgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBpbiBtL3MiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJwb3ppY2lvbmkiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgInBvemljaW9uaSIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgIm51bXJpIGkgZGlza3V0IgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJudW1yaSBpIGRpc2t1dCIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJsacOnZW5jYSIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJwZXJzb25pKGF0KSBww6tyZ2plZ2rDq3MgcMOrciByZWdqaXN0cmltaW4iCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgImtvaMOremdqYXRqYSIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAidmVyc2lvbmkgaSBrb2RpZmlrdWVzaXQgdMOrIHDDq3Jkb3J1ciBww6tyIHTDqyBrb2RpZmlrdWFyIGvDq3TDqyBmbHVrcyIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAidmVyc2lvbmkgaSBrb2RpZmlrdWVzaXQgdMOrIHDDq3Jkb3J1ciBww6tyIHTDqyBrb2RpZmlrdWFyIGvDq3TDqyBmbHVrcyIKLQotIywgZnV6enkKLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJwb3ppY2lvbmkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICJ2ZXJzaW9uaSBpIGtvZGlmaWt1ZXNpdCB0w6sgcMOrcmRvcnVyIHDDq3IgdMOrIGtvZGlmaWt1YXIga8OrdMOrIGZsdWtzIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVvcGxlIGJlaGluZCBhIHJlbWl4IGFuZCBzaW1pbGFyIGludGVycHJldGF0aW9ucyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAibWlkaS1iYXNlLW5vdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicHJpdmF0ZS1kYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJHQUJJTTogbmdhIGVsZW1lbnRpICVzOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIkluZm9ybWFjaW9uZSBzaHRlc8OrIHTDqyBkZWJ1ZzpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJhc25qw6sgcHJvbsOrc2kgXCIlc1wiIHRlayBlbGVtZW50aSBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJlIHBhbXVuZHVyIHZlbmRvc2phIGUgcHJvbsOrc2lzw6sgXCIlc1wiIHRlayBlbGVtZW50aSBcIiVzXCIgbsOrIFwiJXMiCi0KLW1zZ2lkICJEZWxheWVkIGxpbmtpbmcgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBsaW5rICVzIHRvICVzIgotbXNnc3RyICJlIHBhbXVuZHVyIGxpZGhqYSBlICVzIG1lICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJhc25qw6sgZWxlbWVudCBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgImkgcGFtdW5kdXIgYW5hbGl6aW1pIGkgY2FwcyBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJhc25qw6sgZWxlbWVudCBzaHDDq3JuZGFyw6tzIHDDq3IgVVJJIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiYXNuasOrIGVsZW1lbnQgYnVydWVzIHDDq3IgVVJJIFwiJXNcIiIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAidSBzcGVjaWZpa3VhIGJpbiBib3NoIFwiJXNcIiwgbnVrIGxlam9oZXQiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAiYXNuasOrIGJpbiBcIiVzXCIsIHUga2Fww6tyY3llIgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgIm51ayBsZWpvaGV0IGtvbmR1a3RvcmkgYm9zaCIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIG1hcCBidWZmZXIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYXJyamEvdmVuZG9zamEgZSBycmVndWxsaW1ldmUgbmdhL27DqyBidXJpbS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJFIHBhbXVuZHVyIGhhcGphIGUgZmlsZSBcIiVzXCIgcMOrciBsZXhpbS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAiR2FiaW0gZ2phdMOrIHNoa3JpbWl0IHRlayBmaWxlIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiTnVrIMOrc2h0w6sgcMOrcmNha3R1YXIgYXNuasOrIGVtw6tyIGZpbGUgcMOrciB0dSBzaGtydWFyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBmaWxlIFwiJXNcIiBuw6sgc2hrcmltLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiR2FiaW0gZ2phdMOrIG1ieWxsamVzIHPDqyBmaWxlIFwiJXNcIi4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJHYWJpbSBnamF0w6sgc2hrcmltaXQgdGVrIGZpbGUgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiR2FiaW0gZ2phdMOrIHNoa3JpbWl0IHRlayBmaWxlIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiTnVrIMOrc2h0w6sgcMOrcmNha3R1YXIgYXNuasOrIGVtw6tyIGZpbGUgcMOrciB0dSBsZXh1YXIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYXJyamEvdmVuZG9zamEgZSBycmVndWxsaW1ldmUgbmdhL27DqyBidXJpbS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiXCIlc1wiIMOrc2h0w6sgbmrDqyBkaXJlY3RvcnkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiRmlsZSBcIiVzXCIgw6tzaHTDqyBuasOrIHNvY2tldC4iCi0KLW1zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgotbXNnc3RyICJEw6tzaHRvaSBtYmFzIHDDq3Jzw6tyaXRqZXZlIHNpa3Vyc2UgdMOrIGvDq3JrdWFyYS4iCi0KLW1zZ2lkICJjYXBzIgotbXNnc3RyICJtYnJvanTDq3NlIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAidSB6YnVsdWFuIG11bmTDq3NpIG7DqyBmbHVrcyIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIm1pbmltdW0iCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJhbGJ1bWkgccOrIHDDq3JtYmFuIGvDq3TDqyB0w6sgZGjDq27DqyIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iCi1tc2dzdHIgImFsYnVtaSBxw6sgcMOrcm1iYW4ga8OrdMOrIHTDqyBkaMOrbsOrIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAidGl0dWxsaSIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICIiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICJudW3Dq3JpbWkgaSBwamVzw6tzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIiCi1tc2dzdHJbMV0gIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiIKLW1zZ3N0clsxXSAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAia2FyYWt0ZXJpc3Rpa2EiCi1tc2dzdHJbMV0gImthcmFrdGVyaXN0aWthdCIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiUHJpbnRvIHTDqyBnaml0aMOrIGVsZW1lbnTDq3QiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJFIHBhbXVuZHVyIGhhcGphIGUgZmlsZSBcIiVzXCIgbsOrIHNoa3JpbS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJhc25qw6sgZWxlbWVudCBidXJ1ZXMgcMOrciBVUkkgXCIlc1wiIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiR0FCSU06IG5nYSBlbGVtZW50aSAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJORFJZU0hJTSBJIEdKRVRVUiAgICAgIDogdSBnamV0IG5nYSBlbGVtZW50aSBcIiVzXCIuXG4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiTkRSWVNISU0gSSBHSkVUVVIgICAgICA6IHUgZ2pldCBuZ2EgZWxlbWVudGkgXCIlc1wiLlxuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIk5EUllTSElNIEkgR0pFVFVSICAgICAgOiB1IGdqZXQgbmdhIGVsZW1lbnRpIFwiJXNcIi5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIk5EUllTSElNIEkgR0pFVFVSICAgICAgOiB1IGdqZXQgbmdhIGVsZW1lbnRpIFwiJXNcIi5cbiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJORFJZU0hJTSBJIEdKRVRVUiAgICAgIDogdSBnamV0IG5nYSBlbGVtZW50aSBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJHQUJJTTogbmdhIGVsZW1lbnRpICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlNldHRpbmcgc3RhdGUgdG8gJXMgYXMgcmVxdWVzdGVkIGJ5ICVzLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiYXNuasOrIGVsZW1lbnQgXCIlc1wiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAiR0FCSU06IG5nYSBlbGVtZW50aSAlczogJXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiVGFncyBlIG91dHB1dCAobmpvaHVyIGdqaXRoYXNodHUgc2kgbWV0YWRhdGEpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiTmpvZnRpbWUgdMOrIGluZm9ybWFjaW9uZXZlIGRoZSBwcm9uw6tzaXPDqyBzw6sga29uZGljaW9uaXQgdMOrIGRhbGplcyIKLQotIywgZnV6enkKLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJNb3MgamVwIGluZm9ybWFjaW9uaW4gZSBnamVuZGplcyBzw6sgTExPSklUIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICJNb3MgaW5zdGFsbyBuasOrIHVzaHF5ZXMgdMOrIGTDq210dWFyIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiR0FCSU06IGkgcGFtdW5kdXIgbmTDq3J0aW1pIGkgcGlwZWxpbmU6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAiR0FCSU06IGkgcGFtdW5kdXIgbmTDq3J0aW1pIGkgcGlwZWxpbmUuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICJLVUpERVM6IHBpcGxpbmUgZSBnYWJ1YXI6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIkdBQklNOiBlbGVtZW50aSAna29uZHVrdG9yJyBudWsgdSBnamV0LlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICJHQUJJTTogcGlwZWxpbmUgbnVrIGTDq3NoaXJvbiB0w6sgbHVhasOrLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJHQUJJTTogcGlwZWxpbmUgbnVrIGTDq3NoaXJvbiB0w6sgbHVhasOrLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiR0FCSU06IHBpcGVsaW5lIG51ayBkw6tzaGlyb24gdMOrIGx1YWrDqy5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIkVremVrdXRpbWkgcMOrcmZ1bmRvaSBtYmFzICUiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJEVUtFIFpCQVRVQVIgcGlwZWxpbmUgLi4uXG4iCi0KLSN+IG1zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgotI34gbXNnc3RyICJNb3MgamVwIGluZm9ybWFjaW9uaW4gZSBnamVuZGplcyBzw6sgTExPSklUIgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICJMTE9KSTEsTExPSkkyLC4uLiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGlkaGplIG1hIGVsZW1lbnQgYnVydWVzIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGlkaGplIHBhIGVsZW1lbnRpbiBzaW5rIgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgImFzbmrDqyBlbGVtZW50IHDDq3IgdMOrIGxpZGh1ciBVUkkgXCIlc1wiIG1lIgotCi0jfiBtc2dpZCAiY291bGQgbm90IGxpbmsgc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotI34gbXNnc3RyICJlIHBhbXVuZHVyIGxpZGhqYSBlIGVsZW1lbnRpdCBzaW5rIHDDq3IgVVJJIFwiJXNcIiIKLQotI34gbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCi0jfiBtc2dzdHIgIlByaW50byBzaGVuamF0IGUgYWxsb2MgKG7Dq3NlIGFrdGl2dWFyIG7DqyBrb2jDq24gZSBrb21waWxpbWl0KSIKLQotI34gbXNnaWQgIlVzYWdlOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJQw6tyZG9yaW1pOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZsZXJhIC4uLiBdXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCi0jfiBtc2dzdHIgIkdBQklNOiBhbmFsaXppbWkgaSBmaWxlIHhtbCAnJXMnIGTDq3NodG9pLlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgotI34gbXNnc3RyICJHQUJJTTogYXNuasOrIGVsZW1lbnQgaSBwaXBsaW5lIHTDqyB0b3BsZXZlbCB0ZWsgZmlsZSAnJXMnLlxuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKLSN+IG1zZ3N0ciAiS1VKREVTOiB2ZXTDq20gbmrDqyBlbGVtZW50IHRvcGxldmVsIHN1cG9ydG9oZXQgYWt0dWFsaXNodC4iCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICJHQUJJTTogaSBwYW11bmR1ciBhbmFsaXppbWkgaSBhcmd1bWVudGl0ICVkIHTDqyBycmVzaHRpdCB0w6sga29tYW5kw6tzOiAlcy5cbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IGVsZW1lbnQgbmFtZWQgJyVzJyBub3QgZm91bmQuXG4iCi0jfiBtc2dzdHIgIktVSkRFUzogZWxlbWVudGkgbWUgZW1yaW4gJyVzJyBudWsgdSBnamV0LlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiUnVhaiBwcmV6YW50aW1pbiB4bWwgdMOrIHBpcGVsaW5lIHRlayBGSUxFIGRoZSBkaWwiCi0KLSN+IG1zZ2lkICJGSUxFIgotI34gbXNnc3RyICJGSUxFIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRvIG5vdCBpbnN0YWxsIHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHVVNSMSBhbmQgU0lHVVNSMiIKLSN+IG1zZ3N0ciAiTW9zIGluc3RhbG8gbmrDqyB1c2hxeWVzIHTDqyBkw6ttdHVhciIKLQotI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKLSN+IG1zZ3N0ciAiw4cnYWt0aXZvIGluc3RydWtzaW9uZXQgZSBww6tyc2hwZWp0aW1pdCB0w6sgQ1BVIgotCi0jfiBtc2dpZCAiU0NIRURVTEVSIgotI34gbXNnc3RyICJQTEFOSUZJS1VFUyIKLQotI34gbXNnaWQgIlJlZ2lzdHJ5IHRvIHVzZSIKLSN+IG1zZ3N0ciAiUmVnamlzdHJpIHHDqyBkdWhldCBww6tyZG9ydXIiCi0KLSN+IG1zZ2lkICJSRUdJU1RSWSIKLSN+IG1zZ3N0ciAiUkVHSklTVFJJIgotCi0jfiBtc2dpZCAicGF0aCBsaXN0IGZvciBsb2FkaW5nIHBsdWdpbnMgKHNlcGFyYXRlZCBieSAnJXMnKSIKLSN+IG1zZ3N0ciAicG96aWNpb25pIGkgbGlzdMOrcyBww6tyIG5nYXJraW1pbiBlIHBsdWdpbnMgKG5kYXLDqyBtZSAnJXMnKSIKLQotI34gbXNnaWQgIlNjaGVkdWxlciB0byB1c2UgKGRlZmF1bHQgaXMgJyVzJykiCi0jfiBtc2dzdHIgIlBsYW5pZmlrdWVzaSBxw6sgZHVoZXQgcMOrcmRvcnVyIChpIHByZXpnamVkaHVyaSDDq3NodMOrICclcycpIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiAgRmlsZSBhIGJ1Zy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJHYWJpbSBpIGJyZW5kc2jDq20gaSBHU3RyZWFtZXI6IG5kcnlzaGltaSBpIGdqZW5kamVzIGTDq3NodG9pLiAgUmFwb3J0byBidWcuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzY2hlZHVsZXIgcHJvYmxlbS4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICJHYWJpbSBpIGJyZW5kc2jDq20gaSBHU3RyZWFtZXI6IHByb2JsZW0gcGxhbmlmaWtpbWkuICBSYXBvcnRvIGJ1Zy4iCi0KLSN+IG1zZ2lkICJvcmlnaW5hbCBsb2NhdGlvbiBvZiBmaWxlIGFzIGEgVVJJIgotI34gbXNnc3RyICJ2ZW5kb2RoamEgb3JnamluYWxlIGUgZmlsZSBzaSBuasOrIFVSSSIKLQotI34gbXNnaWQgIlRoZXJlIGlzIG5vIGVsZW1lbnQgcHJlc2VudCB0byBoYW5kbGUgdGhlIHN0cmVhbSdzIG1pbWUgdHlwZSAlcy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJOdWsgZWt6aXN0b24gYXNuasOrIGVsZW1lbnQgcMOrciB0w6sgdHJhanR1YXIgbGxvamluIG1pbWUgJXMgdMOrIGZsdWtzaXQuIgotCi0jfiBtc2dpZCAiIGl0ZXJhdGlvbnMgKHN1bSAlIgotI34gbXNnc3RyICIgcMOrcnPDq3JpdGpldCAoc2h1bWEgJSIKLQotI34gbXNnaWQgIiBucywgYXZlcmFnZSAlIgotI34gbXNnc3RyICIgbnMsIG1lc2F0YXJqYSAlIgotCi0jfiBtc2dpZCAiIG5zLCBtaW4gJSIKLSN+IG1zZ3N0ciAiIG5zLCBtaW4gJSIKLQotI34gbXNnaWQgIiBucywgbWF4ICUiCi0jfiBtc2dzdHIgIiBucywgbWF4ICUiCi0KLSN+IG1zZ2lkICIgbnMpLlxuIgotI34gbXNnc3RyICIgbnMpLlxuIgotCi0jfiBtc2dpZCAiTnVtYmVyIG9mIHRpbWVzIHRvIGl0ZXJhdGUgcGlwZWxpbmUiCi0jfiBtc2dzdHIgIk51bXJpIGkgaGVyw6t2ZSB0w6sgcMOrcnPDq3JpdGplcyBzw6sga2FuYWxpdCIKLQotI34gbXNnaWQgIiAgICAgICAgIFRyeWluZyB0byBydW4gYW55d2F5LlxuIgotI34gbXNnc3RyICIgICAgICAgICBEdWtlIHUgcMOrcnBqZWt1ciB0w6sgemJhdG9oZXQgc2lkb3FvZnTDqy5cbiIKLQotI34gbXNnaWQgIkFkZGVkIHBsdWdpbiAlcyB3aXRoICVkICVzLlxuIgotI34gbXNnc3RyICJVIHNodHVhIHBsdWdpbiAlcyBtZSAlZCAlcy5cbiIKLQotI34gbXNnaWQgIkFkZGVkIHBhdGggICAlcyB0byAlcyBcbiIKLSN+IG1zZ3N0ciAiVSBzaHR1YSBwb3ppY2lvbmkgICAlcyB0ZWsgJXMgXG4iCi0KLSN+IG1zZ2lkICJSZWJ1aWxkaW5nICVzICglcykgLi4uXG4iCi0jfiBtc2dzdHIgIkR1a2UgcmluZMOrcnR1YXIgJXMgKCVzKSAuLi5cbiIKLQotI34gbXNnaWQgIlRyeWluZyB0byBsb2FkICVzIC4uLlxuIgotI34gbXNnc3RyICJEdWtlIHUgcMOrcnBqZWt1ciB0w6sgbmdhcmtvaiAlcyAuLi5cbiIKLQotI34gbXNnaWQgIkVycm9yIGxvYWRpbmcgJXNcbiIKLSN+IG1zZ3N0ciAiR2FiaW0gZ2phdMOrIG5nYXJraW1pdCB0w6sgJXNcbiIKLQotI34gbXNnaWQgIkxvYWRlZCAlZCBwbHVnaW5zIHdpdGggJWQgJXMuXG4iCi0jfiBtc2dzdHIgIlUgbmdhcmt1YW4gJWQgcGx1Z2lucyBtZSAlZCAlcy5cbiIKZGlmZiAtLWdpdCBhL3BvL3NyLmdtbyBiL3BvL3NyLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzNzBhOS4uMDAwMDAwMAotLS0gYS9wby9zci5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9zci5wbyBiL3BvL3NyLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTQ3MTAzLi4wMDAwMDAwCi0tLSBhL3BvL3NyLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTM0MyArMCwwIEBACi0jIFNlcmJpYW4gdHJhbnNsYXRpb24gb2YgZ3N0cmVhbWVyCi0jIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgotIyBEYW5pbG8gU2VnYW4gPGRzZWdhbkBnbXgubmV0PiwgMjAwNC0yMDA1LgotIyDQnNC40YDQvtGB0LvQsNCyINCd0LjQutC+0LvQuNGbIDxtaXJvc2xhdm5pa29saWNAcm9ja2V0bWFpbC5jb20+LCAyMDEx4oCUMjAxNi4KLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lci0xLjcuOTBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMy0wNSAxMDowMyswMjAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiDQnNC40YDQvtGB0LvQsNCyINCd0LjQutC+0LvQuNGbIDxtaXJvc2xhdm5pa29saWNAcm9ja2V0bWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogU2VyYmlhbiA8KG5vdGhpbmcpPlxuIgotIkxhbmd1YWdlOiBzclxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIG4iCi0iJTEwPD00ICYmIChuJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDIpO1xuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICLQmNGB0L/QuNGB0YPRmNC1INC40LfQtNCw0ZrQtSDQk9GB0YLRgNC40LzQtdGA0LAiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAi0KfQuNC90Lgg0YHQstCwINGD0L/QvtC30L7RgNC10ZrQsCDQutC+0LHQvdC40LwiCi0KLW1zZ2lkICJQcmludCBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgZXhpdCIKLW1zZ3N0ciAi0JjRgdC/0LjRgdGD0ZjQtSDQtNC+0YHRgtGD0L/QvdC1INC60LDRgtC10LPQvtGA0LjRmNC1INC30LAg0YPQutC70LDRmtCw0ZrQtSDQs9GA0LXRiNCw0LrQsCDQuCDQuNC30LvQsNC30LgiCi0KLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSLQntGB0L3QvtCy0L3QuCDQvdC40LLQviDQt9CwINGD0LrQu9Cw0ZrQsNGa0LUg0LPRgNC10YjQsNC60LAg0L7QtCAxICjRgdCw0LzQviDQs9GA0LXRiNC60LUpINC00L4gOSAo0YHQstC1KSDQuNC70LggMCAo0LHQtdC3ICIKLSLQuNC30LvQsNC30LApIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgItCd0JjQktCeIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotItCX0LDRgNC10LfQvtC8INC+0LTQstC+0ZjQtdC9INGB0L/QuNGB0LDQuiDQv9Cw0YDQvtCy0LAg0L3QsNC30LjQsl/QutCw0YLQtdCz0L7RgNC40ZjQtTrQvdC40LLQviDQt9CwINC/0L7RgdGC0LDQstGZ0LDRmtC1INC90LDRgNC+0YfQuNGC0LjRhSAiCi0i0L3QuNCy0L7QsCDQt9CwINC/0L7RmNC10LTQuNC90LDRh9C90LUg0LrQsNGC0LXQs9C+0YDQuNGY0LUuINCf0YDQuNC80LXRgDogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotCi1tc2dpZCAiTElTVCIKLW1zZ3N0ciAi0KHQn9CY0KHQkNCaIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgItCY0YHQutGZ0YPRh9GD0ZjQtSDQvtCx0L7RmNC10L3QuCDQuNC30LvQsNC3INC30LAg0YPQutC70LDRmtCw0ZrQtSDQs9GA0LXRiNCw0LrQsCIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0i0JzQtdGa0LAg0YDQtdC20LjQvCDQsdC+0ZjQtdGa0LAg0LTQvdC10LLQvdC40LrQsCDQt9CwINGD0LrQu9Cw0ZrQsNGa0LUg0LPRgNC10YjQsNC60LAuINCc0L7Qs9GD0ZvQuCDRgNC10LbQuNC80Lgg0YHRgzogb2ZmLCBvbiwgIgotImRpc2FibGUsIGF1dG8sIHVuaXgiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAi0JjRgdC60ZnRg9GH0YPRmNC1INGD0LrQu9Cw0ZrQsNGa0LUg0LPRgNC10YjQsNC60LAiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAi0KPQutGZ0YPRh9GD0ZjQtSDQvtC/0YjQuNGA0L3RgyDQtNC40ZjQsNCz0L3QvtGB0YLQuNC60YMg0YPRh9C40YLQsNCy0LDRmtCwINC/0YDQuNC60ZnRg9GH0LrQsCIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgItCU0LLQvtGC0LDRh9C60L7QvCDRgNCw0LfQtNCy0L7RmNC10L3QtSDQv9GD0YLQsNGa0LUg0LrQvtGY0LUg0YHQsNC00YDQttC1INC/0YDQuNC60ZnRg9GH0LrQtSIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICLQn9Cj0KLQkNCK0JUiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0i0JfQsNGA0LXQt9C+0Lwg0YDQsNC30LTQstC+0ZjQtdC9INGB0L/QuNGB0LDQuiDQv9GA0LjQutGZ0YPRh9Cw0LrQsCDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INGD0L3QsNC/0YDQtdC0INGD0YfQuNGC0LDQvdC4INC60LDQviDQtNC+0LTQsNGC0LDQuiAiCi0i0YHQv9C40YHQutGDINC60L7RmNC4INGB0LUg0YfRg9Cy0LAg0YMg0L/RgNC+0LzQtdC90ZnQuNCy0L7RmCDQvtC60YDRg9C20LXRmtCwIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgItCf0KDQmNCa0InQo9Cn0KbQmCIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSLQmNGB0LrRmdGD0YfRg9GY0LUg0L/RgNC10YHRgNC10YLQsNGa0LUg0L/QvtCz0YDQtdGI0L3QuNGFINC/0YDQuNGB0YLRg9C/0LAg0LzQtdC80L7RgNC40ZjQuCDQv9GA0LjQu9C40LrQvtC8INGD0YfQuNGC0LDQstCw0ZrQsCDQv9GA0LjQutGZ0YPRh9C60LAiCi0KLW1zZ2lkICJEaXNhYmxlIHVwZGF0aW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAi0JjRgdC60ZnRg9GH0YPRmNC1INCw0LbRg9GA0LjRgNCw0ZrQtSDRgNC10LPQuNGB0YLRgNCwIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAi0JjRgdC60ZnRg9GH0YPRmNC1INC40LfRgNCw0ZLQsNGa0LUg0L/QvtC80L7Rm9C90LjQutC+0LLQvtCzINC/0YDQvtGG0LXRgdCwINC/0YDQuNC70LjQutC+0Lwg0L/RgNC10YLRgNCw0LbQuNCy0LDRmtCwINGA0LXQs9C40YHRgtGA0LAiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAi0J7Qv9GG0LjRmNC1INCT0YHRgtGA0LjQvNC10YDQsCIKLQotbXNnaWQgIlNob3cgR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgItCf0YDQuNC60LDQt9GD0ZjQtSDQvtC/0YbQuNGY0LUg0JPRgdGC0YDQuNC80LXRgNCwIgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGY0LAiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgItCT0YHRgtGA0LjQvNC10YAg0ZjQtSDQvdCw0LjRiNCw0L4g0L3QsCDQvtC/0YjRgtGDINCz0YDQtdGI0LrRgyDRgyDQvtGB0L3QvtCy0L3QvtGYINCx0LjQsdC70LjQvtGC0LXRhtC4LiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0i0J/RgNC+0LPRgNCw0LzQtdGA0Lgg0JPRgdGC0YDQuNC80LXRgNCwINGB0YMg0LHQuNC70Lgg0YHRg9Cy0LjRiNC1INC70LXRmtC4INC00LAg0LTQvtC00LXQu9C1INC90LXQutC4INC6w7TQtCDQt9CwINC+0LLRgyDQs9GA0LXRiNC60YMuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjb2RlIG5vdCBpbXBsZW1lbnRlZC4iCi1tc2dzdHIgItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0JPRgdGC0YDQuNC80LXRgNCwOiDQusO00LQg0L3QuNGY0LUg0L/RgNC40LzQtdGa0LXQvS4gIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0i0JPRgNC10YjQutCwINCT0YHRgtGA0LjQvNC10YDQsDog0L/RgNC+0LzQtdC90LAg0YHRgtCw0ZrQsCDQvdC40ZjQtSDRg9GB0L/QtdC70LAg0Lgg0L3QtdC60Lgg0LXQu9C10LzQtdC90YIg0L3QuNGY0LUg0YPRgdC/0LXQviDQtNCwICIKLSLQvtCz0LvQsNGB0Lgg0YHQvtC/0YHRgtCy0LXQvdGDINC/0L7RgNGD0LrRgyDQs9GA0LXRiNC60LUg0YHQsCDRgNCw0LfQu9C+0LPQvtC8INC90LXRg9GB0L/QtdGF0LAuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0JPRgdGC0YDQuNC80LXRgNCwOiDQvdC10L/RgNC40LvQuNC60LAg0YHQsCDQv9C+0L/Rg9C90L7QvC4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAi0KPQvdGD0YLRgNCw0YjRmtCwINCz0YDQtdGI0LrQsCDQk9GB0YLRgNC40LzQtdGA0LA6INC90LXQv9GA0LjQu9C40LrQsCDRgdCwINC90LjRgtC40LzQsC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICLQs9GA0LXRiNC60LAg0JPRgdGC0YDQuNC80LXRgNCwOiDQvdC10L/RgNC40LvQuNC60LAg0YMg0L/RgNC10LPQvtCy0LDRgNCw0ZrRgy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICLQo9C90YPRgtGA0LDRiNGa0LAg0LPRgNC10YjQutCwINCT0YHRgtGA0LjQvNC10YDQsDog0L3QtdC/0YDQuNC70LjQutCwINGB0LAg0LTQvtCz0LDRktCw0ZjQtdC8LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAi0KPQvdGD0YLRgNCw0YjRmtCwINCz0YDQtdGI0LrQsCDQk9GB0YLRgNC40LzQtdGA0LA6INC90LXQv9GA0LjQu9C40LrQsCDRgdCwINGC0YDQsNC20LXRmtC10LwuIgotCi0jIGJ1ZzogaXMgImNhcHMiIHNob3J0IGZvciAiY2FwYWJpbGl0aWVzIj8gaWYgc28sIGl0IHNob3VsZCBiZSBzcGVsbGVkIGNvbXBsZXRlbHkKLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNhcHMgcHJvYmxlbS4iCi1tc2dzdHIgItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0JPRgdGC0YDQuNC80LXRgNCwOiDQvdC10L/RgNC40LvQuNC60LAg0YHQsCDQvNC+0LPRg9Gb0L3QvtGB0YLQuNC80LAuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgItCj0L3Rg9GC0YDQsNGI0ZrQsCDQs9GA0LXRiNC60LAg0JPRgdGC0YDQuNC80LXRgNCwOiDQvdC10L/RgNC40LvQuNC60LAg0YHQsCDQvtC30L3QsNC60L7QvC4iCi0KLW1zZ2lkICJZb3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24gaXMgbWlzc2luZyBhIHBsdWctaW4uIgotbXNnc3RyICLQktCw0YjQvtGYINC40L3RgdGC0LDQu9Cw0YbQuNGY0Lgg0JPRgdGC0YDQuNC80LXRgNCwINC90LXQtNC+0YHRgtCw0ZjQtSDQv9GA0LjQutGZ0YPRh9Cw0LouIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINCT0YHRgtGA0LjQvNC10YDQsDog0L3QtdC/0YDQuNC70LjQutCwINGB0LAg0YHQsNGC0L7QvC4iCi0KLW1zZ2lkICIiCi0iVGhpcyBhcHBsaWNhdGlvbiBpcyB0cnlpbmcgdG8gdXNlIEdTdHJlYW1lciBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzIGJlZW4gIgotImRpc2FibGVkLiIKLW1zZ3N0ciAiIgotItCe0LLQsNGYINC/0YDQvtCz0YDQsNC8INC/0L7QutGD0YjQsNCy0LAg0LTQsCDQutC+0YDQuNGB0YLQuCDRhNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCINCT0YHRgtGA0LjQvNC10YDQsCDQutC+0ZjQsCDRmNC1INC40YHQutGZ0YPRh9C10L3QsC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgItCT0YHRgtGA0LjQvNC10YAg0ZjQtSDQvdCw0LjRiNCw0L4g0L3QsCDQvtC/0YjRgtGDINCz0YDQtdGI0LrRgyDRgyDQsdC40LHQu9C40L7RgtC10YbQuCDQv9C+0LTRgNGI0LrQtS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0L/QvtC60YDQtdC90LXQvCDQsdC40LHQu9C40L7RgtC10LrRgyDQv9C+0LTRgNGI0LrQtS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC30LDRgtCy0L7RgNC40Lwg0LHQuNCx0LvQuNC+0YLQtdC60YMg0L/QvtC00YDRiNC60LUuIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0L/QvtC00LXRgdC40Lwg0LHQuNCx0LvQuNC+0YLQtdC60YMg0L/QvtC00YDRiNC60LUuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0LrQvtC00LjRgNCw0ZrQsC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAi0JPRgdGC0YDQuNC80LXRgCDRmNC1INC90LDQuNGI0LDQviDQvdCwINC+0L/RiNGC0YMg0LPRgNC10YjQutGDINC40LfQstC+0YDQuNGI0YLQsC4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICLQmNC30LLQvtGA0LjRiNGC0LUg0L3QuNGY0LUg0L3QsNGS0LXQvdC+LiIKLQotbXNnaWQgIlJlc291cmNlIGJ1c3kgb3Igbm90IGF2YWlsYWJsZS4iCi1tc2dzdHIgItCY0LfQstC+0YDQuNGI0YLQtSDRmNC1INC30LDRg9C30LXRgtC+INC40LvQuCDQvdC10LTQvtGB0YLRg9C/0L3Qvi4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQvtGC0LLQvtGA0LjQvCDQuNC30LLQvtGA0LjRiNGC0LUg0YDQsNC00Lgg0YfQuNGC0LDRmtCwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC+0YLQstC+0YDQuNC8INC40LfQstC+0YDQuNGI0YLQtSDRgNCw0LTQuCDRg9C/0LjRgdCwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC+0YLQstC+0YDQuNC8INC40LfQstC+0YDQuNGI0YLQtSDRgNCw0LTQuCDRh9C40YLQsNGa0LAg0Lgg0L/QuNGB0LDRmtCwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQt9Cw0YLQstC+0YDQuNC8INC40LfQstC+0YDQuNGI0YLQtS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINGH0LjRgtCw0Lwg0LjQtyDQuNC30LLQvtGA0LjRiNGC0LAuIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINGD0L/QuNGI0LXQvCDRgyDQuNC30LLQvtGA0LjRiNGC0LUuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQuNC30LLRgNGI0LjQvCDQv9C+0YHRgtCw0LLRmdCw0ZrQtSDQvdCwINC40LfQstC+0YDQuNGI0YLRgy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0YPRgdC60LvQsNC00LjQvCDRgdCwINC40LfQstC+0YDQuNGI0YLQtdC8LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0LTQvtCx0LDQstC40Lwv0L/QvtGB0YLQsNCy0LjQvCDQv9C+0LTQtdGI0LDQstCw0ZrQsCDQuNC3L9GDINC40LfQstC+0YDQuNGI0YLQtS4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LjRmNC1INC/0YDQtdC+0YHRgtCw0LvQviDQv9GA0L7RgdGC0L7RgNCwINGDINC40LfQstC+0YDQuNGI0YLRgy4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICLQndC40YHQsNC8INC+0LLQu9Cw0YjRm9C10L0g0LTQsCDQv9GA0LjRgdGC0YPQv9C40Lwg0LjQt9Cy0L7RgNC40YjRgtGDLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAi0JPRgdGC0YDQuNC80LXRgCDRmNC1INC90LDQuNGI0LDQviDQvdCwINC+0L/RiNGC0YMg0LPRgNC10YjQutGDINGC0L7QutCwLiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAi0JXQu9C10LzQtdC90YIg0L3QtSDQvtCx0LXQt9Cx0LXRktGD0ZjQtSDQsdCw0YDQsNGC0LDRmtC1INC+0LLQuNC8INGC0L7QutC+0LwuINCf0YDQuNGY0LDQstC40YLQtSDQs9GA0LXRiNC60YMuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQvtC00YDQtdC00LjQvCDQstGA0YHRgtGDINGC0L7QutCwLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAi0KLQvtC6INGY0LUg0LLRgNGB0YLQtSDRgNCw0LfQu9C40YfQuNGC0LUg0L7QtCDQvtC90LUg0LrQvtGY0LjQvCDQsdCw0YDQsNGC0LAg0L7QstCw0Zgg0LXQu9C10LzQtdC90YIuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICLQndC40ZjQtSDQv9GA0LjRgdGD0YLQvdC+INC60L7QtNC40YDQsNGa0LUg0LrQvtGY0LUg0LzQvtC20LUg0LTQsCDQsdCw0YDQsNGC0LAg0YLQvtC60L7QvCDQvtCy0LUg0LLRgNGB0YLQtS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQtNC10LrQvtC00LjRgNCw0Lwg0YLQvtC6LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC60L7QtNC40YDQsNC8INGC0L7Qui4iCi0KLSMg0L3QtdGB0LjQs9GD0YDQvdC+Ci1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDRgNCw0LfQs9GA0LDQtNC40Lwg0YLQvtC6LiIKLQotIyDQvdC10YHQuNCz0YPRgNC90L4KLW1zZ2lkICJDb3VsZCBub3QgbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQuNC30LPRgNCw0LTQuNC8INGC0L7Qui4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICLQotC+0Log0ZjQtSDRgyDQv9C+0LPRgNC10YjQvdC+0Lwg0LfQsNC/0LjRgdGDLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICLQotC+0Log0ZjQtSDRiNC40YTRgNC+0LLQsNC9INCw0LvQuCDQtNC10YjQuNGE0YDQvtCy0LDRmtC1INC90LjRmNC1INC/0L7QtNGA0LbQsNC90L4uIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotItCi0L7QuiDRmNC1INGI0LjRhNGA0L7QstCw0L0g0Lgg0L3QtSDQvNC+0LbQtSDQsdC40YLQuCDQtNC10YjQuNGE0YDQvtCy0LDQvSDQt9Cw0YLQviDRiNGC0L4g0L3QuNGY0LUg0L/RgNC40LTQvtC00LDRgiAiCi0i0L7QtNCz0L7QstCw0YDQsNGY0YPRm9C4INC60ZnRg9GHLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICLQndC10LzQsCDQv9C+0YDRg9C60LUg0L4g0LPRgNC10YjRhtC4INC30LAg0LTQvtC80LXQvSAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAi0J3QtdC80LAg0YPQvtCx0LjRh9Cw0ZjQtdC90LUg0L/QvtGA0YPQutC1INC+INCz0YDQtdGI0YbQuCDQt9CwINC00L7QvNC10L0gJXMg0Lgg0LrQvtC0ICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAi0JjQt9Cw0LHRgNCw0L3QuCDRgdCw0YIg0L3QtSDQvNC+0LbQtSDQsdC40YLQuCDQutC+0YDQuNGI0ZvQtdC9INGDINGB0L/QvtGY0YbQuCDQvdC40LfQsC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQt9Cw0L/QuNGB0LjQstCw0ZrQsCDQvtGB0YLQsNCy0LUg0YDQtdCz0LjRgdGC0YDQsCDRgyAlczogJXMiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAi0L3QsNGB0LvQvtCyIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAi0YPQvtCx0LjRh9Cw0ZjQtdC90L4g0LrQvtGA0LjRiNGb0LXQvSDQvdCw0YHQu9C+0LIiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAi0L3QsNC30LjQsiDQvdCw0YHQu9C+0LLQsCDQv9GA0Lgg0YDQtdGS0LDRmtGDIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi0YPQvtCx0LjRh9Cw0ZjQtdC90L4g0LrQvtGA0LjRiNGb0LXQvSDQvdCw0YHQu9C+0LIg0LfQsCDRgdCy0YDRhdC1INGA0LXRktCw0ZrQsCIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAi0LjQt9Cy0L7RktCw0YciCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgItC+0YHQvtCx0LUg0L7QtNCz0L7QstC+0YDQvdC1INC30LAg0YHQvdC40LzQsNGa0LUiCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgItC40LzQtSDQuNC30LLQvtGS0LDRh9CwINC/0YDQuCDRgNC10ZLQsNGa0YMiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgItC+0YHQvtCx0LUg0L7QtNCz0L7QstC+0YDQvdC1INC30LAg0YHQvdC40LzQsNGa0LUg0LfQsCDRgdCy0YDRhdC1INGA0LXRktCw0ZrQsCIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICLQsNC70LHRg9C8IgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEiCi1tc2dzdHIgItCw0LvQsdGD0Lwg0LrQvtGY0Lgg0YHQsNC00YDQttC4INC+0LLQtSDQv9C+0LTQsNGC0LrQtSIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICLQvdCw0LfQuNCyINCw0LvQsdGD0LzQsCDQv9GA0Lgg0YDQtdGS0LDRmtGDIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgItCw0LvQsdGD0Lwg0LrQvtGY0Lgg0YHQsNC00YDQttC4INC+0LLQtSDQv9C+0LTQsNGC0LrQtSDQt9CwINGB0LLRgNGF0LUg0YDQtdGS0LDRmtCwIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICLQuNC30LLQvtGS0LDRhyDQsNC70LHRg9C80LAiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgItCY0LfQstC+0ZLQsNGHINGH0LjRgtCw0LLQvtCzINCw0LvQsdGD0LzQsCwg0L7QvdCw0LrQviDQutCw0LrQviDRgtGA0LXQsdCwINCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L0iCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgItC40LzQtSDQuNC30LLQvtGS0LDRh9CwINCw0LvQsdGD0LzQsCDQv9GA0Lgg0YDQtdGS0LDRmtGDIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICLQmNC30LLQvtGS0LDRhyDRh9C40YLQsNCy0L7QsyDQsNC70LHRg9C80LAsINC+0L3QsNC60L4g0LrQsNC60L4g0YLRgNC10LHQsCDQsdC40YLQuCDQv9C+0YDQtdGS0LDQvSIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgItC00LDRgtGD0LwiCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgItC00LDRgtGD0Lwg0YHRgtCy0LDRgNCw0ZrQsCDQv9C+0LTQsNGC0LDQutCwICjQutCw0L4g0LHRgNC+0Zgg0IjRg9C70LjRmNCw0L3RgdC60L7QsyDQtNCw0L3QsCkiCi0KLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAi0LTQsNGC0YPQvCDQuCDQstGA0LXQvNC1IgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICLQtNCw0YLRg9C8INC4INCy0YDQtdC80LUg0YHRgtCy0LDRgNCw0ZrQsCDQv9C+0LTQsNGC0LDQutCwICjQutCw0L4g0LHRgNC+0Zgg0IjRg9C70LjRmNCw0L3RgdC60L7QsyDQtNCw0L3QsCkiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAi0LbQsNC90YAiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAi0LbQsNC90YAg0LrQvtGY0LXQvCDQvtCy0Lgg0L/QvtC00LDRhtC4INC/0YDQuNC/0LDQtNCw0ZjRgyIKLQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgItC90LDQv9C+0LzQtdC90LAiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAi0YHQu9C+0LHQvtC00LDQvSDRgtC10LrRgdGCINC+INC+0LLQuNC8INC/0L7QtNCw0YbQuNC80LAiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICLQtNC+0LTQsNGC0L3QsCDQvdCw0L/QvtC80LXQvdCwIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEgaW4ga2V5PXZhbHVlIG9yIGtleVtlbl09Y29tbWVudCBmb3JtIgotbXNnc3RyICIiCi0i0YHQu9C+0LHQvtC00LDQvSDRgtC10LrRgdGCINC+INC+0LLQuNC8INC/0L7QtNCw0YbQuNC80LAg0YMg0L7QsdC70LjQutGDINC60ZnRg9GHPdCy0YDQtdC00L3QvtGB0YIg0LjQu9C4INC60ZnRg9GHW2VuXT3QvdCw0L/QvtC80LXQvdCwIgotCi0jINC80L7QttC00LAg4oCe0L3Rg9C80LXRgNC14oCcINGD0LzQtdGB0YLQviDigJ7Qv9C10YHQvNC14oCcLCDQv9C+0YjRgtC+INC80L7QttC10LzQviDQuNC80LDRgtC4INC4INCy0LjQtNC10L4g0YHQvdC40LzQutC1Ci1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICLQsdGA0L7RmCDQvdGD0LzQtdGA0LUiCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAi0LHRgNC+0Zgg0L3Rg9C80LXRgNC1INGDINC30LHQuNGA0YbQuCIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICLRg9C60YPQv9C90L4g0L3Rg9C80LXRgNCwIgotCi1tc2dpZCAiY291bnQgb2YgdHJhY2tzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgdHJhY2sgYmVsb25ncyB0byIKLW1zZ3N0ciAi0YPQutGD0L/QvdC+INC90YPQvNC10YDQsCDRgyDQt9Cx0LjRgNGG0Lgg0LrQvtGY0L7RmCDQv9GA0LjQv9Cw0LTQsCDQvtCy0LAg0L3Rg9C80LXRgNCwIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgItCx0YDQvtGYINC00LjRgdC60LAiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLQsdGA0L7RmCDQtNC40YHQutCwINGDINC30LHQuNGA0YbQuCIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgItGD0LrRg9C/0L3QviDQtNC40YHQutC+0LLQsCIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICLRg9C60YPQv9C90L4g0LTQuNGB0LrQvtCy0LAg0YMg0LfQsdC40YDRhtC4INC60L7RmNC+0Zgg0L/RgNC40L/QsNC00LAg0L7QstCw0Zgg0LTQuNGB0LoiCi0KLW1zZ2lkICJsb2NhdGlvbiIKLW1zZ3N0ciAi0L/QvtC70L7QttCw0ZgiCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotItCf0L7RgNC10LrQu9C+INC80LXQtNC40ZjQsCDQtNCw0YLQviDQutCw0L4g0LDQtNGA0LXRgdCwICjQvNC10YHRgtC+LCDQs9C00LUg0YHQtSDQvdCw0LvQsNC30Lgg0L7RgNC40LPQuNC90LDQu9C90LAg0LTQsNGC0L7RgtC10LrQsCDQuNC70LggIgotItGC0L7QuikiCi0KLW1zZ2lkICJob21lcGFnZSIKLW1zZ3N0ciAi0LzQsNGC0LjRh9C90LAg0YHRgtGA0LDQvdC40YbQsCIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIiIKLSLQnNCw0YLQuNGH0L3QsCDRgdGC0YDQsNC90LjRhtCwINC30LAg0L7QstCw0Zgg0LzQtdC00LjRmCAo0L3Qv9GALiDQvNCw0YLQuNGH0L3QsCDRgdGC0YDQsNC90LjRhtCwINC40LfQstC+0ZLQsNGH0LAg0LjQu9C4INGE0LjQu9C80LApIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgItC+0L/QuNGBIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICLQutGA0LDRgtCw0Log0YLQtdC60YHRgiDQutC+0ZjQuCDQvtC/0LjRgdGD0ZjQtSDRgdCw0LTRgNC20LDRmCDQv9C+0LTQsNGC0LDQutCwIgotCi0jCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAi0LjQt9C00LDRmtC1IgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgItC40LfQtNCw0ZrQtSDQvtCy0LjRhSDQv9C+0LTQsNGC0LDQutCwIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAi0JzQodCa0KEiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSLQnNC10ZLRg9C90LDRgNC+0LTQvdC4INGB0YLQsNC90LTQsNGA0LTQvdC4INC60L7QtCDQt9CwINGB0L3QuNC80LDRmtC1IOKAlCDQv9C+0LPQu9C10LTQsNGY0YLQtSDigJ5odHRwOi8vd3d3LmlmcGkub3JnLyIKLSJpc3JjL+KAnCIKLQotbXNnaWQgIm9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAi0L7RgNCz0LDQvdC40LfQsNGG0LjRmNCwIgotCi1tc2dpZCAiY29weXJpZ2h0IgotbXNnc3RyICLQsNGD0YLQvtGA0YHQutCwINC/0YDQsNCy0LAiCi0KLW1zZ2lkICJjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLQv9C+0YDRg9C60LAg0L4g0LDRg9GC0L7RgNGB0LrQuNC8INC/0YDQsNCy0LjQvNCwINC30LAg0L/QvtC00LDRgtC60LUiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICLQsNC00YDQtdGB0LAg0LDRg9GC0L7RgNGB0LrQuNGFINC/0YDQsNCy0LAiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgItCw0LTRgNC10YHQsCDQtNC+INC/0L7RgNGD0LrQtSDQviDQsNGD0YLQvtGA0YHQutC40Lwg0L/RgNCw0LLQuNC80LAg0LfQsCDQv9C+0LTQsNGC0LrQtSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgItC60L7QtNC40YDQsNC+IgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAi0LjQvNC1INC+0YHQvtCx0LUg0LjQu9C4INC90LDQt9C40LIg0L7RgNCz0LDQvdC40LfQsNGG0LjRmNC1INC60L7QtNC40YDQsNGa0LAiCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICLQutC+0L3RgtCw0LrRgiIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgItC/0L7QtNCw0YbQuCDQt9CwINGB0YLRg9C/0LDRmtC1INGDINCy0LXQt9GDIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAi0LTQvtC30LLQvtC70LAiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgItC00L7Qt9Cy0L7Qu9CwINC30LAg0YPQv9C+0YLRgNC10LHRgyDQv9C+0LTQsNGC0LDQutCwIgotCi1tc2dpZCAibGljZW5zZSB1cmkiCi1tc2dzdHIgItCw0LTRgNC10YHQsCDQtNC+0LfQstC+0LvQtSIKLQotbXNnaWQgIlVSSSB0byB0aGUgbGljZW5zZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAi0LDQtNGA0LXRgdCwINC00L4g0LTQvtC30LLQvtC70LUg0LfQsCDRg9C/0L7RgtGA0LXQsdGDINC/0L7QtNCw0YLQsNC60LAiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgItC40LfQstC+0ZLQsNGHIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgItC+0YHQvtCx0LUg0LrQvtGY0LUg0LjQt9Cy0L7QtNC1IgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgItGB0LDRgdGC0LDQstGZ0LDRhyIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAi0L7RgdC+0LHQtSDQutC+0ZjQtSDRgdGDINGB0LDRgdGC0LDQstC40LvQtSDRgdC90LjQvNCw0LoiCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgItC00LjRgNC40LPQtdC90YIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgItC00LjRgNC40LPQtdC90YIv0L/QvtGY0LDRiNGa0LXRmtC1INC40LfQstC+0ZLQsNGH0LAiCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAi0YLRgNCw0ZjQsNGa0LUiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAi0LTRg9C20LjQvdCwINGDINCy0YDQtdC80LXQvdGB0LrQuNC8INGY0LXQtNC40L3QuNGG0LDQvNCwINCT0YHRgtGA0LjQvNC10YDQsCAo0L3QsNC90L7RgdC10LrRg9C90LTQsNC80LApIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgItC60L7QtNC10LoiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgItC60L7QtNC10Log0YMg0LrQvtC80LUg0YHRgyDQv9C+0LTQsNGG0Lgg0YHQsNGH0YPQstCw0L3QuCIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICLQstC40LTQtdC+INC60L7QtNC10LoiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgItC60L7QtNC10Log0YMg0LrQvtC80LUg0YHRgyDQstC40LTQtdC+INC/0L7QtNCw0YbQuCDRgdCw0YfRg9Cy0LDQvdC4IgotCi1tc2dpZCAiYXVkaW8gY29kZWMiCi1tc2dzdHIgItC30LLRg9GH0L3QuCDQutC+0LTQtdC6IgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLQutC+0LTQtdC6INGDINC60L7QvNC1INGB0YMg0LfQstGD0YfQvdC4INC/0L7QtNCw0YbQuCDRgdCw0YfRg9Cy0LDQvdC4IgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgItC60L7QtNC10Log0L/RgNC10LLQvtC00LAiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgItC60L7QtNC10Log0YMg0LrQvtC80LUg0YHRgyDQv9C+0LTQsNGG0Lgg0L/RgNC10LLQvtC00LAg0YHQsNGH0YPQstCw0L3QuCIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgItC+0LHQu9C40Log0YHQsNC00YDQttCw0L7RhtCwIgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgItC+0LHQu9C40Log0YHQsNC00YDQttCw0L7RhtCwINGDINC60L7QvNC1INGB0YMg0L/QvtC00LDRhtC4INGB0LDRh9GD0LLQsNC90LgiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICLQsdGA0LfQuNC90LAg0LHQuNGC0L7QstCwIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAi0YLQsNGH0L3QsCDQuNC70Lgg0L/RgNC+0YHQtdGH0L3QsCDQsdGA0LfQuNC90LAg0LHQuNGC0L7QstCwINGDINCx0LjRgtC+0LLQuNC80LAg0L/QviDRgdC10LrRg9C90LTQuCIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAi0L3QsNCy0LXQtNC10L3QsCDQsdGA0LfQuNC90LAg0LHQuNGC0L7QstCwIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAi0L3QsNCy0LXQtNC10L3QsCDQsdGA0LfQuNC90LAg0LHQuNGC0L7QstCwINGDINCx0LjRgtC+0LLQuNC80LAg0L/QviDRgdC10LrRg9C90LTQuCIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAi0L3QsNGY0LzQsNGa0LAg0LHRgNC30LjQvdCwINCx0LjRgtC+0LLQsCIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgItC90LDRmNC80LDRmtCwINCx0YDQt9C40L3QsCDQsdC40YLQvtCy0LAg0YMg0LHQuNGC0L7QstC40LzQsCDQv9C+INGB0LXQutGD0L3QtNC4IgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICLQvdCw0ZjQstC10ZvQsCDQsdGA0LfQuNC90LAg0LHQuNGC0L7QstCwIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAi0L3QsNGY0LLQtdGb0LAg0LHRgNC30LjQvdCwINCx0LjRgtC+0LLQsCDRgyDQsdC40YLQvtCy0LjQvNCwINC/0L4g0YHQtdC60YPQvdC00LgiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICLQutC+0LTQtdGAIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0LrQvtC00LXRgCDQutC+0YDQuNGI0ZvQtdC9INC30LAg0LrQvtC00LjRgNCw0ZrQtSDQvtCy0L7QsyDRgtC+0LrQsCIKLQotbXNnaWQgImVuY29kZXIgdmVyc2lvbiIKLW1zZ3N0ciAi0LjQt9C00LDRmtC1INC60L7QtNC10YDQsCIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgItC40LfQtNCw0ZrQtSDQutC+0LTQtdGA0LAg0LrQvtGA0LjRiNGb0LXQvdC+0LMg0LfQsCDQutC+0LTQuNGA0LDRmtC1INC+0LLQvtCzINGC0L7QutCwIgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICLRgdC10YDQuNGY0LAiCi0KLW1zZ2lkICJzZXJpYWwgbnVtYmVyIG9mIHRyYWNrIgotbXNnc3RyICLRgdC10YDQuNGY0YHQutC4INCx0YDQvtGYINC90YPQvNC10YDQtSIKLQotIyBidWc6IHRoaXMgaXMgc29tZXRoaW5nIHN0cmFuZ2UKLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgItC/0L7RmNCw0YfQsNGa0LUg0L3Rg9C80LXRgNC1INC/0L7RmNCw0YfQsNGa0LAg0L/Rg9GI0YLQsNGa0LAiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICLQv9C+0ZjQsNGH0LDRmtC1INC/0LXRgdC80LUg0YMg0LTQtdGG0LjQsdC10LvQuNC80LAiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgItCy0YDRhdGD0L3QsNGGINC90YPQvNC10YDQtSDQv9C+0ZjQsNGH0LDRmtCwINC/0YPRiNGC0LDRmtCwIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgItCy0YDRhdGD0L3QsNGGINC90YPQvNC10YDQtSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAi0L/QvtGY0LDRh9Cw0ZrQtSDQsNC70LHRg9C80LAg0L/QvtGY0LDRh9Cw0ZrQsCDQv9GD0YjRgtCw0ZrQsCIKLQotbXNnaWQgImFsYnVtIGdhaW4gaW4gZGIiCi1tc2dzdHIgItC/0L7RmNCw0YfQsNGa0LUg0LDQu9Cx0YPQvNCwINGDINC00LXRhtC40LHQtdC70LjQvNCwIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICLQstGA0YXRg9C90LDRhiDQsNC70LHRg9C80LAg0L/QvtGY0LDRh9Cw0ZrQsCDQv9GD0YjRgtCw0ZrQsCIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICLQstGA0YXRg9C90LDRhiDQsNC70LHRg9C80LAiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAi0L3QuNCy0L4g0L/QvtC00YHQtdGC0L3QuNC60LAg0L/QvtGY0LDRh9Cw0ZrQsCDQv9GD0YjRgtCw0ZrQsCIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgItC/0L7QtNGB0LXRgtC90Lgg0L3QuNCy0L4g0LLRgNC10LTQvdC+0YHRgtC4INC/0L7RmNCw0YfQsNGa0LAg0L3Rg9C80LXRgNC1INC4INCw0LvQsdGD0LzQsCIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgItGI0LjRhNGA0LAg0ZjQtdC30LjQutCwIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAi0YjQuNGE0YDQsCDRmNC10LfQuNC60LAg0LfQsCDQvtCy0LDRmCDRgtC+0LosINC/0YDQtdC80LAg0YHRgtCw0L3QtNCw0YDQtNGDINCY0KHQni02MzktMSDQuNC70Lgg0JjQodCeLTYzOS0yIgotCi1tc2dpZCAibGFuZ3VhZ2UgbmFtZSIKLW1zZ3N0ciAi0L3QsNC30LjQsiDRmNC10LfQuNC60LAiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAi0YHQu9C+0LHQvtC00LDQvSDQvtCx0LvQuNC6INC90LDQt9C40LLQsCDRmNC10LfQuNC60LAg0L3QsCDQutC+0LzQtSDRmNC1INC+0LLQsNGYINGC0L7QuiIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICLRgdC70LjQutCwIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0YHQu9C40LrQsCDQutC+0ZjQsCDRgdC1INC+0LTQvdC+0YHQuCDQvdCwINC+0LLQsNGYINGC0L7QuiIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAi0YHQu9C40LrQsCDQv9GA0LXQs9C70LXQtNCwIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICLRgdC70LjQutCwINC/0YDQtdCz0LvQtdC00LAg0LrQvtGY0LAg0YHQtSDQvtC00L3QvtGB0Lgg0L3QsCDQvtCy0LDRmCDRgtC+0LoiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICLQv9GA0LjQu9C+0LMiCi0KLW1zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICLQtNCw0YLQvtGC0LXQutCwINC/0YDQuNC70L7QttC10L3QsCDRg9C3INC+0LLQsNGYINGC0L7QuiIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgItGC0LDQutGC0L7QstCwINGDINC80LjQvdGD0YLRgyIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICLQsdGA0L7RmCDRgtCw0LrRgtC+0LLQsCDRgyDQvNC40L3Rg9GC0YMg0YMg0LfQstGD0LrRgyIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICLQutGZ0YPRh9C90LUg0YDQtdGH0LgiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAi0LfQsNGA0LXQt9C+0Lwg0L7QtNCy0L7RmNC10L3QtSDQutGZ0YPRh9C90LUg0YDQtdGH0Lgg0LrQvtGY0LUg0L7Qv9C40YHRg9GY0YMg0YHQsNC00YDQttCw0ZgiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAi0L3QsNC30LjQsiDQs9C10L7Qs9GA0LDRhNGB0LrQvtCzINC80LXRgdGC0LAiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAi0ZnRg9C00LjQvNCwINGH0LjRgtGZ0LjQstC+INC+0L/QuNGB0L3QviDQvNC10YHRgtC+INCz0LTQtSDRmNC1INC80LXQtNC40Zgg0YHQvdC40LzRmdC10L0g0LjQu9C4INC/0YDQvtC40LfQstC10LTQtdC9IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICLQu9Cw0YLQuNGC0YPQtNCwINCz0LXQviDQv9C+0LvQvtC20LDRmNCwIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0i0LPQtdC+0LPRgNCw0YTRgdC60LAg0YjQuNGA0LjQvdCwINC80LXRgdGC0LAg0YMg0LrQvtC80LUg0ZjQtSDQvNC10LTQuNGYINGB0L3QuNC80ZnQtdC9INC40LvQuCDQv9GA0L7QuNC30LLQtdC00LXQvSDRgyDRgdGC0LXQv9C10L3QuNC80LAgIgotItC/0YDQtdC80LAg0YHRgtCw0L3QtNCw0YDQtNGDIOKAnldHUzg04oCcICjQvdGD0LvQsCDQvdCwINC10LrQstCw0YLQvtGA0YMsINC90LXQs9Cw0YLQuNCy0L3QtSDQstGA0LXQtNC90L7RgdGC0Lgg0LfQsCDRmNGD0LbQvdC1ICIKLSLRiNC40YDQuNC90LUpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAi0LvQvtC90LPQuNGC0YPQtNCwINCz0LXQviDQv9C+0LvQvtC20LDRmNCwIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotItCz0LXQvtCz0YDQsNGE0YHQutCwINC00YPQttC40L3QsCDQvNC10YHRgtCwINGDINC60L7QvNC1INGY0LUg0LzQtdC00LjRmCDRgdC90LjQvNGZ0LXQvSDQuNC70Lgg0L/RgNC+0LjQt9Cy0LXQtNC10L0g0YMg0YHRgtC10L/QtdC90LjQvNCwICIKLSLQv9GA0LXQvNCwINGB0YLQsNC90LTQsNGA0LTRgyDigJ5XR1M4NOKAnCAo0L3Rg9C70LAg0L3QsCDQv9GA0LLQvtC8INC80LXRgNC40LTQuNGY0LDQvdGDINGDINCT0YDQuNC90LLQuNGH0YMv0JLQtdC70LjQutCwICIKLSLQkdGA0LjRgtCw0L3QuNGY0LAsINC90LXQs9Cw0YLQuNCy0L3QtSDQstGA0LXQtNC90L7RgdGC0Lgg0LfQsCDQt9Cw0L/QsNC00L3QtSDQtNGD0LbQuNC90LUpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAi0LjQt9C00LjQs9C90YPRm9C1INCz0LXQviDQv9C+0LvQvtC20LDRmNCwIgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotItC90LDQtNC80L7RgNGB0LrQsCDQstC40YHQuNC90LAg0LzQtdGB0YLQsCDRgyDQutC+0LzQtSDRmNC1INC80LXQtNC40Zgg0YHQvdC40LzRmdC10L0g0LjQu9C4INC/0YDQvtC40LfQstC10LTQtdC9INGDINC80LXRgtGA0LjQvNCwICIKLSLQv9GA0LXQvNCwINGB0YLQsNC90LTQsNGA0LTRgyDigJ5XR1M4NOKAnCAo0L3Rg9C70LAg0ZjQtSDQv9GA0L7RgdC10YfQvdC4INC90LjQstC+INC80L7RgNCwKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICLQt9C10LzRmdCwINCz0LXQviDQv9C+0LvQvtC20LDRmNCwIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgItC30LXQvNGZ0LAgKNC10L3Qs9C70LXRgdC60Lgg0L3QsNC30LjQsikg0YMg0LrQvtGY0L7RmCDRmNC1INC80LXQtNC40Zgg0YHQvdC40LzRmdC10L0g0LjQu9C4INC/0YDQvtC40LfQstC10LTQtdC9IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgItCz0YDQsNC0INCz0LXQviDQv9C+0LvQvtC20LDRmNCwIgotCi1tc2dpZCAiY2l0eSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgItCz0YDQsNC0ICjQtdC90LPQu9C10YHQutC4INC90LDQt9C40LIpINGDINC60L7QvNC1INGY0LUg0LzQtdC00LjRmCDRgdC90LjQvNGZ0LXQvSDQuNC70Lgg0L/RgNC+0LjQt9Cy0LXQtNC10L0iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCi1tc2dzdHIgItC/0L7RgtC/0L7Qu9C+0LbQsNGYINCz0LXQviDQv9C+0LvQvtC20LDRmNCwIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLSLQvNC10YHRgtC+INGD0L3Rg9GC0LDRgCDQs9GA0LDQtNCwINGDINC60L7QvNC1INGY0LUg0LzQtdC00LjRmCDQv9GA0L7QuNC30LLQtdC00LXQvSDQuNC70Lgg0YHRgtCy0L7RgNC10L0gKNC90L/RgC4g0YHRg9GB0LXQtNGB0YLQstC+KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICLQstC+0LTQvtGA0LDQstC90LAg0LPRgNC10YjQutCwINCz0LXQviDQv9C+0LvQvtC20LDRmNCwIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgItC+0YfQtdC60LjQstCw0L3QsCDQs9GA0LXRiNC60LAg0LzQtdGA0LXRmtCwINCy0L7QtNC+0YDQsNCy0L3QvtCzINC/0L7Qt9C40YbQuNC+0L3QuNGA0LDRmtCwICjRgyDQvNC10YLRgNC40LzQsCkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgItCx0YDQt9C40L3QsCDQutGA0LXRgtCw0ZrQsCDQs9C10L4g0L/QvtC70L7QttCw0ZjQsCIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAiIgotItCx0YDQt9C40L3QsCDQutGA0LXRgtCw0ZrQsCDRg9GA0LXRktCw0ZjQsCDQt9CwINGB0L3QuNC80LDRmtC1INC/0YDQuNC70LjQutC+0Lwg0LjQt9Cy0YDRiNCw0LLQsNGa0LAg0YHQvdC40LzQsNGa0LAg0YMg0LzQtdGC0YDQuNC80LAg0YMgIgotItGB0LXQutGD0L3QtNC4IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAi0YPRgdC80LXRgNC10ZrQtSDQutGA0LXRgtCw0ZrQsCDQs9C10L4g0L/QvtC70L7QttCw0ZjQsCIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotItC+0LfQvdCw0YfQsNCy0LAg0YPRgdC80LXRgNC10ZrQtSDQutGA0LXRgtCw0ZrQsCDRg9GA0LXRktCw0ZjQsCDQv9GA0LjQu9C40LrQvtC8INGB0L3QuNC80LDRmtCwINC80LXQtNC40ZjQsC4g0J/RgNC10LTRgdGC0LDQstGZ0LAg0YHQtSDRgyAiCi0i0YHRgtC10L/QtdC90LjQvNCwINGB0LAg0L/QvtC60YDQtdGC0L3QuNC8INC30LDRgNC10LfQvtC8LCAwINC30L3QsNGH0Lgg0YHQtdCy0LXRgNC90Lgg0L/QvtC7LCDQuCDQv9C+0LLQtdGb0LDQstCwINGB0LUg0YMg0YHQvNC10YDRgyAiCi0i0LrQsNC30LDRmdC60LUg0L3QsCDRgdCw0YLRgy4iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgItGD0YHQvNC10YDQtdGa0LUg0YHQvdC40LzQsNGa0LAg0LPQtdC+INC/0L7Qu9C+0LbQsNGY0LAiCi0KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBkaXJlY3Rpb24gdGhlIGRldmljZSBpcyBwb2ludGluZyB0byB3aGVuIGNhcHR1cmluZyAgYSBtZWRpYS4gIgotIkl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgIHJlcHJlc2VudGF0aW9uLCAwIG1lYW5zIHRoZSAiCi0iZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIiIKLSLQvtC30L3QsNGH0LDQstCwINGD0YHQvNC10YDQtdGa0LUg0L3QsCDQutC+0ZjQtSDRg9GA0LXRktCw0Zgg0YPQutCw0LfRg9GY0LUg0L/RgNC40LvQuNC60L7QvCDRgdC90LjQvNCw0ZrQsCDQvNC10LTQuNGY0LAuINCf0YDQtdC00YHRgtCw0LLRmdCwICIKLSLRgdC1INGDINGB0YLQtdC/0LXQvdC40LzQsCDRgdCwINC/0L7QutGA0LXRgtC90LjQvCDQt9Cw0YDQtdC30L7QvCwgMCDQt9C90LDRh9C4INGB0LXQstC10YDQvdC4INC/0L7Quywg0Lgg0L/QvtCy0LXRm9Cw0LLQsCDRgdC1INGDICIKLSLRgdC80LXRgNGDINC60LDQt9Cw0ZnQutC1INC90LAg0YHQsNGC0YMuIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgItC90LDQt9C40LIg0L/RgNC+0LPRgNCw0LzQsCIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgItCd0LDQt9C40LIg0L/RgNC+0LPRgNCw0LzQsCDRgtC10LvQtdCy0LjQt9C40ZjQtS/Qv9C+0LTQtdC80LjRgdC40ZjQtS/RgdC10YDQuNGY0LUg0LjQtyDQutC+0LMg0ZjQtSDQvNC10LTQuNGYIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICLQvdCw0LfQuNCyINC/0YDQvtCz0YDQsNC80LAg0L/RgNC4INGA0LXRktCw0ZrRgyIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotItCd0LDQt9C40LIg0L/RgNC+0LPRgNCw0LzQsCDRgtC10LvQtdCy0LjQt9C40ZjQtS/Qv9C+0LTQtdC80LjRgdC40ZjQtS/RgdC10YDQuNGY0LUg0LjQtyDQutC+0LMg0ZjQtSDQvNC10LTQuNGYLCDQt9CwINGB0LLRgNGF0LUg0YDQtdGS0LDRmtCwIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgItCx0YDQvtGYINC10L/QuNC30L7QtNC1IgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgItCR0YDQvtGYINC10L/QuNC30L7QtNC1INGB0LXQt9C+0L3QtSDQutC+0ZjQvtGYINC/0YDQuNC/0LDQtNCwINC80LXQtNC40ZgiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICLQsdGA0L7RmCDRgdC10LfQvtC90LUiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAi0JHRgNC+0Zgg0YHQtdC30L7QvdC1INC/0YDQvtCz0YDQsNC80LAg0LrQvtGY0L7RmCDQv9GA0LjQv9Cw0LTQsCDQvNC10LTQuNGYIgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICLRgdGC0LjRhdC+0LLQuCIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAi0KHRgtC40YXQvtCy0Lgg0LzQtdC00LjRmNCwLCDQvtCx0LjRh9C90L4g0LrQvtGA0LjRiNGb0LXQvdC4INC30LAg0L/QtdGB0LzQtSIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICLQvdCw0LfQuNCyINGB0LDRgdGC0LDQstGZ0LDRh9CwINC/0YDQuCDRgNC10ZLQsNGa0YMiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLQvtGB0L7QsdC1INC60L7RmNC1INGB0YMg0YHQsNGB0YLQsNCy0LjQu9C1INGB0L3QuNC80LDRmtC1LCDQt9CwINGB0LLRgNGF0LUg0YDQtdGS0LDRmtCwIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgItCz0YDRg9C/0LjRgdCw0ZrQtSIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotItCT0YDRg9C/0LjRiNC1INC+0LTQs9C+0LLQsNGA0LDRmNGD0ZvQtSDQvNC10LTQuNGY0LUg0LrQvtGY0Lgg0L7QsdGD0YXQstCw0YLQsNGY0YMg0LLQuNGI0LUg0L3Rg9C80LXRgNCwLCDQutCw0L4g0YDQsNC30LvQuNGH0LjRgtC1ICIKLSLQtNC10LvQvtCy0LUg0LrQvtC90YbQtdGA0YLQsC4g0KLQviDRmNC1INCy0LjRiNC4INC90LjQstC+INC+0LQg0L3Rg9C80LXRgNC1LCDQsNC70Lgg0L3QuNC20Lgg0L7QtCDQsNC70LHRg9C80LAuIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgItC+0YbQtdC90LUg0LrQvtGA0LjRgdC90LjQutCwIgotCi1tc2dpZCAiIgotIlJhdGluZyBhdHRyaWJ1dGVkIGJ5IGEgdXNlci4gVGhlIGhpZ2hlciB0aGUgcmFuaywgdGhlIG1vcmUgdGhlIHVzZXIgbGlrZXMgIgotInRoaXMgbWVkaWEiCi1tc2dzdHIgIiIKLSLQntGG0LXQvdC1INC60L7RmNC1INGB0YMg0LTQvtC00LXQu9C40LvQuCDQutC+0YDQuNGB0L3QuNGG0LguINCS0LjRiNC4INC70Lgg0ZjQtSDQv9C70LDRgdC80LDQvSwg0YLQviDRgdC1INCy0LXRm9C10Lwg0LHRgNC+0ZjRgyAiCi0i0LrQvtGA0LjRgdC90LjQutCwINGB0LLQuNGS0LAg0L7QstCw0Zgg0LzQtdC00LjRmC4iCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICLQv9GA0L7QuNC30LLQvtGS0LDRhyDRg9GA0LXRktCw0ZjQsCIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgItCf0YDQvtC40LfQstC+0ZLQsNGHINGD0YDQtdGS0LDRmNCwINC60L7RmNC4INGY0LUg0LrQvtGA0LjRiNGb0LXQvSDQt9CwINGB0YLQstCw0YDQsNGa0LUg0L7QstC+0LMg0LzQtdC00LjRmNCwIgotCi1tc2dpZCAiZGV2aWNlIG1vZGVsIgotbXNnc3RyICLQvNC+0LTQtdC7INGD0YDQtdGS0LDRmNCwIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLQnNC+0LTQtdC7INGD0YDQtdGS0LDRmNCwINC60L7RmNC4INGY0LUg0LrQvtGA0LjRiNGb0LXQvSDQt9CwINGB0YLQstCw0YDQsNGa0LUg0L7QstC+0LMg0LzQtdC00LjRmNCwIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAi0L3QsNC30LjQsiDQsNC/0LvQuNC60LDRhtC40ZjQtSIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAi0JDQv9C70LjQutCw0YbQuNGY0LAg0LrQvtGY0LAg0ZjQtSDQutC+0YDQuNGI0ZvQtdC90LAg0LfQsCDRgdGC0LLQsNGA0LDRmtC1INC80LXQtNC40ZjQsCIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgItC/0L7QtNCw0YbQuCDQsNC/0LvQuNC60LDRhtC40ZjQtSIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgItCf0YDQvtC40LfQstC+0ZnQvdC4INC/0L7QtNCw0YbQuCDQsNC/0LvQuNC60LDRhtC40ZjQtSDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INC30LDQv9Cw0LrQvtCy0LDQvdC4INGDINC80LXQtNC40ZgiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAi0YPRgdC80LXRgNC10ZrQtSDRgdC70LjQutC1IgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICLQmtCw0LrQviDQsdC4INGB0LvQuNC60LAg0YLRgNC10LHQsNC70LAg0LTQsCDQsdGD0LTQtSDQvtC60YDQtdC90YPRgtCwINC40LvQuCDQuNC30LLRgNC90YPRgtCwINC/0YDQtSDQv9GA0LjQutCw0LfQuNCy0LDRmtCwIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICLQuNC30LTQsNCy0LDRhyIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAi0J3QsNC30LjQsiDQvdCw0YLQv9C40YHQsCDQuNC70Lgg0LjQt9C00LDQstCw0YfQsCIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICLQuNC30LLQvtGS0LDRhyIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICLQn9C+0LTQsNGG0Lgg0L4g0ZnRg9C00LjQvNCwINC60L7RmNC4INGB0YMg0YPRgNCw0LTQuNC70Lgg0YDQtdC80LjQutGBINC4INGB0LvQuNGH0L3QtSDQuNC30LLQtdC00LHQtSIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICLQvNC40LTQuC3QvtGB0L3QvtCy0L3QsC3QvdC+0YLQsCIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAi0JHRgNC+0Zgg0LzQuNC00Lgg0L3QvtGC0LUg0LfQstGD0YfQvdC1INC90YPQvNC10YDQtS4iCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgItC/0YDQuNCy0LDRgtC90Lgg0L/QvtC00LDRhtC4IgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICLQn9GA0LjQstCw0YLQvdC4INC/0L7QtNCw0YbQuCIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICLQndC40YHQsNC8INC/0YDQvtC90LDRiNCw0L4g0YDRg9C60L7QstCw0L7RhtCwINC/0YPRgtCw0ZrQvtC8INC30LAg0L/RgNC+0YLQvtC60L7QuyAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAi0KjQtdC80LAg0L/Rg9GC0LDRmtC1IOKAniVz4oCcINC90LjRmNC1INC/0L7QtNGA0LbQsNC90LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAi0JPQoNCV0KjQmtCQOiDQuNC3INC10LvQtdC80LXQvdGC0LAgJXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0i0JTQvtC00LDRgtC90Lgg0L/QvtC00LDRhtC4INC30LAg0LjRgdC/0YDQsNCy0ZnQsNGa0LUg0LPRgNC10YjQsNC60LA6XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICLQstC10LfQsCDQvdC10LzQsCDQuNC30LLQvtGA0LAgW3Npbms9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgItCy0LXQt9CwINC90LXQvNCwINGD0YHQutC70LDRktC40LLQsNGa0LUgW3NvdXJjZT0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICLQvdC10LzQsCDQvtGB0L7QsdC40L3QtSDigJ4lc+KAnCDRgyDQtdC70LXQvNC10L3RgtGDIOKAniVz4oCcIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINC/0L7RgdGC0LDQstC40Lwg0L7RgdC+0LHQuNC90YMg4oCeJXPigJwg0YMg0LXQu9C10LzQtdC90YLRgyDigJ4lc+KAnCDQvdCwIOKAniVz4oCcIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgItCe0LTQu9C+0LbQtdC90L4g0L/QvtCy0LXQt9C40LLQsNGa0LUg0L3QuNGY0LUg0YPRgdC/0LXQu9C+LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAi0L3QtSDQvNC+0LPRgyDQtNCwINCy0LXQttC10LwgJXMg0YHQsCAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAi0L3QtdC80LAg0LXQu9C10LzQtdC90YLQsCDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAi0L3QtdC+0YfQtdC60LjQstCw0L3QsCDRg9C/0YPRgtCwIOKAniVz4oCcIOKAlCDQt9Cw0L3QtdC80LDRgNGD0ZjQtdC8IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcGFkLXJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAi0L3QtdC+0YfQtdC60LjQstCw0L3QsCDRg9C/0YPRgtCwLdC/0L7Qv9GD0L3QtSDigJ4lc+KAnCDigJQg0LfQsNC90LXQvNCw0YDRg9GY0LXQvCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgItC90LUg0LzQvtCz0YMg0LTQsCDQvtCx0YDQsNC00LjQvCDQvNC+0LPRg9Gb0L3QvtGB0YLQuCDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgItC90LXQvNCwINC10LvQtdC80LXQvdGC0LAg0YPRgdC60LvQsNGS0LjQstCw0ZrQsCDQt9CwINCw0LTRgNC10YHRgyDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAi0L3QtdC80LAg0LjQt9Cy0L7RgNC90L7QsyDQtdC70LXQvNC10L3RgtCwINC30LAg0LDQtNGA0LXRgdGDIOKAniVz4oCcIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICLQs9GA0LXRiNC60LAg0YHQuNC90YLQsNC60YHQtSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgItC90LDQstC10LTQtdC90LAg0ZjQtSDQv9GA0LDQt9C90LAg0LrQsNC90YLQsCDigJ4lc+KAnCwg0L7QstC+INC90LjRmNC1INC00L7Qt9Cy0L7RmdC10L3QviIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBiaW4gXCIlc1wiLCB1bnBhY2tpbmcgZWxlbWVudHMiCi1tc2dzdHIgItC90LXQvNCwINC60LDQvdGC0LUg4oCeJXPigJwsINGA0LDRgdC/0LDQutGD0ZjQtdC8INC10LvQtdC80LXQvdGC0LUiCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAi0L3QuNGY0LUg0LTQvtC/0YPRiNGC0LXQvdCwINC/0YDQsNC30L3QsCDRgdC/0L7RmNC60LAg0L3QuNC30LAiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAi0JzQvdC+0LPQviDQv9C+0LzQvtGb0L3QtSDQvNC10LzQvtGA0LjRmNC1INGY0LUg0L7QtNCx0LDRh9C10L3Qvi4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgItCj0L3Rg9GC0YBh0YjRmtC4INC/0YDQvtCx0LvQtdC8INC/0YDQvtGC0L7QutCwINC/0L7QtNCw0YLQsNC60LAuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAi0KPQvdGD0YLRgGHRiNGa0LAg0LPRgNC10YjQutCwINC/0YDQvtGC0L7QutCwINC/0L7QtNCw0YLQsNC60LAuIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICLQo9C90YPRgtGA0LDRiNGa0LAg0LPRgNC10YjQutCwINGB0LDRgtCwLiIKLQotbXNnaWQgIkZhaWxlZCB0byBtYXAgYnVmZmVyLiIKLW1zZ3N0ciAi0J3QuNGB0LDQvCDRg9GB0L/QtdC+INC00LAg0LzQsNC/0LjRgNCw0Lwg0LzQtdGS0YPQvNC10LzQvtGA0LjRmNGDLiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICLQmNC30LTQstCw0ZjQsCDQvNC+0LPRg9Gb0L3QvtGB0YLQuCIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0i0KPQvNCw0ZrRg9GY0LUg0LzQvtCz0YPRm9C1INC00L7Qv9GD0YjRgtC10L3QtSDQvNC+0LPRg9Gb0L3QvtGB0YLQuCAo0J3QmNCo0KLQkCDQt9C90LDRh9C4INCR0JjQm9CeINCa0J7QiNCQKS4g0J/QvtGB0YLQsNCy0ZnQsNGa0LUg0L7QstC+0LMgIgotItGB0LLQvtGY0YHRgtCy0LAg0L/QvtGB0YLQsNCy0ZnQsCDQutCw0L4g0L7RgNGY0LXQvdGC0LjRgCDQv9GA0LjQtNC+0LTQsNGC0Lgg0L7QsdGY0LXQutCw0YIg0JPRgdGCINC80L7Qs9GD0ZvQvdC+0YHRgtC4LiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgItCg0LXQttC40Lwg0L/RgNC+0LzQtdC90LUg0LzQvtCz0YPRm9C90L7RgdGC0LgiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICLQmNC30LTQstCw0ZjQsCDQv9C+0L3QsNGI0LDRmtC1INC/0YDQvtC80LXQvdC1INC80L7Qs9GD0ZvQvdC+0YHRgtC4IgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAi0J3QuNGY0LUg0L3QsNCy0LXQtNC10L0g0L/RgNC40LLRgNC10LzQtdC90Lgg0LTQuNGA0LXQutGC0L7RgNC40ZjRg9C8LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0YHRgtCy0L7RgNC40Lwg0L/RgNC40LLRgNC10LzQtdC90YMg0LTQsNGC0L7RgtC10LrRgyDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0L7RgtCy0L7RgNC40Lwg0LTQsNGC0L7RgtC10LrRgyDigJ4lc+KAnCDRgNCw0LTQuCDRh9C40YLQsNGa0LAuIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDRg9C/0LjRgdGDINGDINC00LDRgtC+0YLQtdC60YMg0L/RgNC10YPQt9C40LzQsNGa0LAuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgItCd0LjRmNC1INC90LDQstC10LTQtdC9INC90LDQt9C40LIg0LTQsNGC0L7RgtC10LrQtSDQt9CwINGD0L/QuNGBLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQvtGC0LLQvtGA0LjQvCDQtNCw0YLQvtGC0LXQutGDIOKAniVz4oCcINGA0LDQtNC4INGD0L/QuNGB0LAuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDRgtCy0LDRgNCw0ZrRgyDQtNCw0YLQvtGC0LXQutC1IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuNC70LjQutC+0Lwg0L/RgNC10LzQvtGC0LDQstCw0ZrQsCDRgyDQtNCw0YLQvtGC0LXRhtC4IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDRg9C/0LjRgdGDINGDINC00LDRgtC+0YLQtdC60YMg4oCeJXPigJwuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgItCd0LjRmNC1INC90LDQstC10LTQtdC9INC90LDQt9C40LIg0LTQsNGC0L7RgtC10LrQtSDQt9CwINGH0LjRgtCw0ZrQtS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQtNC+0LHQsNCy0LjQvCDQv9C+0LTQsNGC0LrQtSDQvdCwIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICLigJ4lc+KAnCDRmNC1INC00LjRgNC10LrRgtC+0YDQuNGY0YPQvC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICLQlNCw0YLQvtGC0LXQutCwIOKAniVz4oCcINGY0LUg0L/RgNC40LrRmdGD0YfQvdC40YbQsC4iCi0KLW1zZ2lkICJGYWlsZWQgYWZ0ZXIgaXRlcmF0aW9ucyBhcyByZXF1ZXN0ZWQuIgotbXNnc3RyICLQndC10YPRgdC/0LXRhSDQvdCw0LrQvtC9INGC0YDQsNC20LXQvdC+0LMg0LHRgNC+0ZjQsCDQv9C+0LrRg9GI0LDRmNCwLiIKLQotIyBidWc6IHRoaXMgc2hvdWxkIGJlIGZ1bGwgd29yZAotbXNnaWQgImNhcHMiCi1tc2dzdHIgItC80L7Qs9GD0ZvQvdC+0YHRgtC4IgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAi0L7RgtC60YDQuNCy0LXQvdC1INC80L7Qs9GD0ZvQvdC+0YHRgtC4INGDINGC0L7QutGDIgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAi0L3QsNGY0LzQsNGa0LUiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICLQv9GA0LjQvNC+0YDQsNGYINC80L7Qs9GD0ZvQvdC+0YHRgtC4IgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgItC/0YDQuNC80L7RgNCw0Zgg0LzQvtCz0YPRm9C90L7RgdGC0Lgg0LHQtdC3INC+0LHQsNCy0ZnQsNGa0LAg0L/RgNC10YLRgNCw0LPQtSDRg9C/0LjRgdCwIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgItCe0LLQsNGYINGC0L7QuiDQvdC1INGB0LDQtNGA0LbQuCDQtNC+0LLQvtGZ0L3QviDQv9C+0LTQsNGC0LDQutCwLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAi0J7QstCw0Zgg0YLQvtC6INC90LUg0YHQsNC00YDQttC4INC/0L7QtNCw0YLQutC1LiIKLQotbXNnaWQgIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iCi1tc2dzdHIgItCf0YDQuNC80LXRmtC10L3QuCDRg9GA0LXRktCw0ZjQuDpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICLRh9C40YLRmdC40LIiCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAi0YPQv9C40YHQuNCyIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAi0LfQsNGB0YLQsNGA0LXQu9C+IgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICLRg9C/0YDQsNCy0ZnQuNCyIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgItC40LfQvNC10ZrQuNCyINGDINGB0YLQsNGa0LUg0J3QmNCo0KLQkCwg0KHQn9Cg0JXQnNCQ0J0sINCf0JDQo9CX0JjQoNCQ0J0g0LjQu9C4INCf0KPQqNCi0JDQnCIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgItC40LfQvNC10ZrQuNCyINGB0LDQvNC+INGDINGB0YLQsNGa0LUg0J3QmNCo0KLQkCwg0KHQn9Cg0JXQnNCQ0J0g0LjQu9C4INCf0JDQo9CX0JjQoNCQ0J0iCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAi0LjQt9C80LXRmtC40LIg0YHQsNC80L4g0YMg0YHRgtCw0ZrQtSDQndCY0KjQotCQINC40LvQuCDQodCf0KDQldCc0JDQnSIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAi0JfQsNCx0YDQsNGa0LXQvdC1INC00LDRgtC+0YLQtdC60LU6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAi0KPQutGD0L/QsNC9INCx0YDQvtGYOiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQg0LfQsNCx0YDQsNGa0LXQvdCwINC00LDRgtC+0YLQtdC60LAiCi1tc2dzdHJbMV0gIiVkINC30LDQsdGA0LDRmtC10L3QtSDQtNCw0YLQvtGC0LXQutC1IgotbXNnc3RyWzJdICIlZCDQt9Cw0LHRgNCw0ZrQtdC90LjRhSDQtNCw0YLQvtGC0LXQutCwIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQg0L/RgNC40LrRmdGD0YfQsNC6IgotbXNnc3RyWzFdICIlZCDQv9GA0LjQutGZ0YPRh9C60LAiCi1tc2dzdHJbMl0gIiVkINC/0YDQuNC60ZnRg9GH0LDQutCwIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkINC30LDQsdGA0LDRmtC10L3QsCDRgdGC0LDQstC60LAiCi1tc2dzdHJbMV0gIiVkINC30LDQsdGA0LDRmtC10L3QtSDRgdGC0LDQstC60LUiCi1tc2dzdHJbMl0gIiVkINC30LDQsdGA0LDRmtC10L3QuNGFINGB0YLQsNCy0LrQuCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQg0L7QtNC70LjQutCwIgotbXNnc3RyWzFdICIlZCDQvtC00LvQuNC60LUiCi1tc2dzdHJbMl0gIiVkINC+0LTQu9C40LrQsCIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAi0JjRgdC/0LjRgdGD0ZjQtSDRgdCy0LUg0LXQu9C10LzQtdC90YLQtSIKLQotbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHIgItCo0YLQsNC80L/QsCDRgdC/0LjRgdCw0Log0LfQsNCx0YDQsNGa0LXQvdC40YUg0LTQsNGC0YLQtdC60LAiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotItCo0YLQsNC80L/QsCDQvNCw0YjQuNC90LDQvNCwINC+0LHRgNCw0LTQuNCyINGB0L/QuNGB0LDQuiDQvtC00LvQuNC60LAg0LrQvtGY0LUg0L3QsNCy0LXQtNC10L3QuCDQv9GA0LjQutGZ0YPRh9Cw0Log0LjQu9C4INC/0YDQuNC60ZnRg9GH0YbQuCAiCi0i0L7QsdC10LfQsdC10ZLRg9GY0YMuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0JrQvtGA0LjRgdC90L4g0YMg0LLQtdC30LDQvNCwINGB0LAg0YHQv9C+0ZnQvdC40LwgIgotItGB0LDQvNC+0YHRgtCw0LvQvdC40Lwg0LzQtdGF0LDQvdC40LfQvNC+0Lwg0LjQvdGB0YLQsNC70LjRgNCw0ZrQsCDQv9GA0LjQutGZ0YPRh9C60LAuIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICLQndCw0LLQvtC00Lgg0YHQsNC00YDQttCw0Zgg0L/RgNC40LrRmdGD0YfQutCwIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgItCf0YDQvtCy0LXRgNCw0LLQsCDQtNCwINC70Lgg0L/QvtGB0YLQvtGY0Lgg0L3QsNCy0LXQtNC10L3QuCDQtdC70LXQvNC10L3RgiDQuNC70Lgg0L/RgNC40LrRmdGD0YfQsNC6IgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotItCa0LDQtNCwINC/0YDQvtCy0LXRgNCw0LLQsCDQtNCwINC70Lgg0L/QvtGB0YLQvtGY0Lgg0LXQu9C10LzQtdC90YIg0LjQu9C4INC/0YDQuNC60ZnRg9GH0LDQuiwg0YLQsNC60L7RktC1INC/0YDQvtCy0LXRgNCw0LLQsCDQtNCwINC70LggIgotItGY0LUg0ZrQtdCz0L7QstC+INC40LfQtNCw0ZrQtSDQsdCw0YDQtdC8INC+0L3QviDQvdCw0LLQtdC00LXQvdC+IgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICLQqNGC0LDQvNC/0LAg0L/QvtC00YDQttCw0L3QtSDRiNC10LzQtSDQsNC00YDQtdGB0LAsINGB0LAg0LXQu9C10LzQtdC90YLQuNC80LAg0LrQvtGY0Lgg0LjRhSDQv9GA0LjQvNC10ZrRg9GY0YMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0YPRh9C40YLQsNC8INC00LDRgtC+0YLQtdC60YMg0L/RgNC40LrRmdGD0YfQutCwOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICLQndC10LzQsCDRgtCw0LrQstC+0LMg0LXQu9C10LzQtdC90YLQsCDQuNC70Lgg0L/RgNC40LrRmdGD0YfQutCwIOKAniVz4oCcXG4iCi0KLW1zZ2lkICJJbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICLQodGC0LDRgtC40YHRgtC40LrQtSDQv9C+0L/QuNGB0LAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICLQlNC+0LHQuNGFINC/0L7RgNGD0LrRgyAjJXUg0L7QtCDQtdC70LXQvNC10L3RgtCwIOKAniVz4oCcICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAi0JTQvtCx0LjRhSDQv9C+0YDRg9C60YMgIyV1INC+0LQg0L/QvtC/0YPQvdC1IOKAniVzOiVz4oCcICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAi0JTQvtCx0LjRhSDQv9C+0YDRg9C60YMgIyV1INC+0LQg0L7QsdGY0LXQutGC0LAg4oCeJXPigJwgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgItCU0L7QsdC40YUg0L/QvtGA0YPQutGDICMldSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLQlNC+0LHQuNGFINCV0J7QoSDQvtC0INC10LvQtdC80LXQvdGC0LAg4oCeJXPigJwuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAi0J3QkNCC0J7QpSDQntCX0J3QkNCa0KMgICA6INC90LDRktC10L3QsCDRmNC1INC10LvQtdC80LXQvdGC0L7QvCDigJ4lc+KAnC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgItCd0JDQgtCe0KUg0J7Ql9Cd0JDQmtCjICAgOiDQvdCw0ZLQtdC90LAg0ZjQtSDQv9C+0L/Rg9C90L7QvCDigJ4lczolc+KAnC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgItCd0JDQgtCe0KUg0J7Ql9Cd0JDQmtCjICAgOiDQvdCw0ZLQtdC90LAg0ZjQtSDQvtCx0ZjQtdC60YLQvtC8IOKAniVz4oCcLlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgItCd0JDQgtCe0KUg0J7Ql9Cd0JDQmtCjXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAi0J3QkNCC0J7QpSDQotCQ0KEgICA6INC90LDRktC10L3QsCDRmNC1INC10LvQtdC80LXQvdGC0L7QvCDigJ4lc+KAnC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgItCd0JDQgtCe0KUg0KLQkNChICAgOiDQvdCw0ZLQtdC90LAg0ZjQtSDQvtCx0ZjQtdC60YLQvtC8IOKAniVz4oCcLlxuIgotCi1tc2dpZCAiRk9VTkQgVE9DXG4iCi1tc2dzdHIgItCd0JDQgtCe0KUg0KLQkNChXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotItCf0J7QlNCQ0KbQmDpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAi0KPQn9Ce0JfQntCg0JXQitCVOiDQuNC3INC10LvQtdC80LXQvdGC0LAgJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAi0J/RgNC40L/RgNC10LzRmdC10L3Qviwg0YfQtdC60LDQvCDQtNCwINC30LDQstGA0YjQuCDRgdC80LXRiNGC0LDRmtC1INGDINC80LXRktGD0LzQtdC80L7RgNC40ZjRg+KAplxuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAi0J/RgNC40L/RgNC10LzRmdC10L3Qviwg0YfQtdC60LDQvCDQvdCwINC90LDQv9GA0LXQtNC+0LLQsNGa0LUg0LTQsCDQt9Cw0LLRgNGI0LjigKZcbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAi0YHQvNC10YjRgtCw0Lwg0YMg0LzQtdGS0YPQvNC10LzQvtGA0LjRmNGDLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiIgotItCe0LHQsNCy0LjQviDRgdCw0Lwg0YHQvNC10YjRgtCw0ZrQtSDRgyDQvNC10ZLRg9C80LXQvNC+0YDQuNGY0YMsINC/0L7RgdGC0LDQstGZ0LDQvCDRgdC/0L7RmNC60YMg0L3QuNC30LAg0L3QsCDQn9Cj0KjQotCQ0JwgLi4uXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICLQodC80LXRiNGC0LDQvCDRgyDQvNC10ZLRg9C80LXQvNC+0YDQuNGY0YMsINC/0L7RgdGC0LDQstGZ0LDQvCDRgdC/0L7RmNC60YMg0L3QuNC30LAg0L3QsCDQn9CQ0KPQl9CY0KDQkNCdIC4uLlxuIgotCi1tc2dpZCAiUmVkaXN0cmlidXRlIGxhdGVuY3kuLi5cbiIKLW1zZ3N0ciAi0KDQsNGB0L/QvtC00LXRmdGD0ZjQtdC8INC60LDRiNGa0LXRmtC1Li4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAi0J/QvtGB0YLQsNCy0ZnQsNC8INGB0YLQsNGa0LUg0L3QsCAlcyDQutCw0L4g0YjRgtC+INGY0LUg0LfQsNGC0YDQsNC20LjQviAlcy4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAi0J/RgNC10LrQuNC0OiDQl9Cw0YPRgdGC0LDQstGZ0LDQvCDRgdC/0L7RmNC60YMg0L3QuNC30LAgLi4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAi0J3QsNC/0YDQtdC00L7QstCw0ZrQtTogKCVzKSAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAi0J3QtdC00L7RgdGC0LDRmNC1INC10LvQtdC80LXQvdGCOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICLQlNC+0LHQuNGFINGB0LDQtNGA0LbQsNGYINC40Lcg0LXQu9C10LzQtdC90YLQsCDigJ4lc+KAnDogJXM9JXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAi0JjQt9C70LDQt9C90LUg0L7Qt9C90LDQutC1ICjRgtCw0LrQvtGS0LUg0L/QvtC30L3QsNGC0LUg0Lgg0LrQsNC+INC80LXRgtCw0L/QvtC00LDRhtC4KSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgItCY0LfQu9Cw0LfQvdCwINGC0LDQsdC10LvQsCDRgdCw0LTRgNC20LDRmNCwICjQv9C+0LPQu9Cw0LLRmdCwINC4INC40LfQtNCw0ZrQsCkiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICLQmNGB0L/QuNGB0YPRmNC1INC/0L7QtNCw0YLQutC1INC+INGB0YLQsNGa0YMg0Lgg0L7QsdCw0LLQtdGI0YLQtdGa0LAg0L4g0L7RgdC+0LHQuNC90LDQvNCwIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAi0J3QtSDQuNGB0L/QuNGB0YPRmNC1INC/0L7QtNCw0YLQutC1INC+INC90LDQv9GA0LXQtNC+0LLQsNGa0YMiCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgItCY0LfQu9Cw0LfQvdC1INC/0L7RgNGD0LrQtSIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0i0J3QtSDQuNGB0L/QuNGB0YPRmNC1INC/0L7QtNCw0YLQutC1INGB0YLQsNGa0LAg0LfQsCDQvdCw0LLQtdC00LXQvdC+INGB0LLQvtGY0YHRgtCy0L4g0LDQutC+INGY0LUg0YPQutGZ0YPRh9C10L0g0L7Qv9GI0LjRgNCw0L0g0LjQt9C70LDQtyAiCi0iKNC80L7QttC1INC00LAg0YHQtSDQutC+0YDQuNGB0YLQuCDQstC40YjQtSDQv9GD0YLQsCkiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICLQodCS0J7QiNCh0KLQktCeLdCd0JDQl9CY0JIiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgItCd0LXRm9C1INC40L3RgdGC0LDQu9C40YDQsNGC0Lgg0YDRg9C60L7QstCw0L7RhtCwINCz0YDQtdGI0LrQsNC80LAiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgItCf0YDQuNC80L7RgNCw0Zgg0JXQntChINC90LAg0LjQt9Cy0L7RgNGDINC/0YDQtSDQs9Cw0YjQtdGa0LAg0YHQv9C+0ZjQutC1INC90LjQt9CwIgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICLQn9GA0LjQutGD0L/QuCDQuCDRiNGC0LDQvNC/0LDRmCDRgdGC0LDRgtC40YHRgtC40LrQtSDRgNC10LPQuNGB0YLRgNCwIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC90LUg0LzQvtCz0YMg0LTQsCDRgdCw0YHRgtCw0LLQuNC8INGB0L/QvtGY0LrRgyDQvdC40LfQsDogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC90LUg0LzQvtCz0YMg0LTQsCDRgdCw0YHRgtCw0LLQuNC8INGB0L/QvtGY0LrRgyDQvdC40LfQsC5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgItCj0J/QntCX0J7QoNCV0IrQlTog0L3QtdC40YHQv9GA0LDQstC90LAg0YHQv9C+0ZjQutCwINC90LjQt9CwOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICLQk9Cg0JXQqNCa0JA6INC10LvQtdC80LXQvdGCIOKAntGB0L/QvtGY0LrQsCDQvdC40LfQsOKAnCDQvdC40ZjQtSDQvdCw0ZLQtdC9LlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgItCf0L7RgdGC0LDQstGZ0LDQvCDRgdC/0L7RmNC60YMg0L3QuNC30LAg0L3QsCDQn9CQ0KPQl9CY0KDQkNCdIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAi0JPQoNCV0KjQmtCQOiDQodC/0L7RmNC60LAg0L3QuNC30LAg0L3QtSDQttC10LvQuCDQtNCwINC40LTQtSDQvdCwINC/0LDRg9C30YMuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgItCh0L/QvtGY0LrQsCDQvdC40LfQsCDRmNC1INC20LjQstCwINC4INC90LUg0YLRgNC10LHQsCDRmNC+0Zgg0J/QoNCY0J/QoNCV0JzQkCAuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgItCh0L/QvtGY0LrQsCDQvdC40LfQsCDQstGA0YjQuCDQn9Cg0JjQn9Cg0JXQnNCjIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICLQk9Cg0JXQqNCa0JA6INGB0L/QvtGY0LrQsCDQvdC40LfQsCDQvdC1INC20LXQu9C4INC00LAg0L/RgNC40L/RgNC10LzQuC5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAi0KHQv9C+0ZjQutCwINC90LjQt9CwINGY0LUg0J/QoNCY0J/QoNCV0JzQidCV0J3QkCAuLi5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAi0J/QvtGB0YLQsNCy0ZnQsNC8INGB0L/QvtGY0LrRgyDQvdC40LfQsCDQvdCwINCf0KPQqNCi0JDQnCAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAi0JPQoNCV0KjQmtCQOiDRgdC/0L7RmNC60LAg0L3QuNC30LAg0L3QtSDQttC10LvQuCDQtNCwINC/0YPRgdGC0LguXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAi0JXQntChINGY0LUg0YPQutGZ0YPRh9C10L0g0L/RgNC40LvQuNC60L7QvCDQs9Cw0YjQtdGa0LAg4oCU4oCUINCf0YDQuNGB0LjRmdCw0LLQsNC8INCV0J7QoSDQvdCwINGB0L/QvtGY0YbQuCDQvdC40LfQsFxuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgItCV0J7QoSDRmNC1INGD0LrRmdGD0YfQtdC9INCz0LDRiNC10ZrQtdC8IOKAlOKAlCDRh9C10LrQsNC8INC90LAg0JXQntChINC90LDQutC+0L0g0LPRgNC10YjQutC1XG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAi0KfQtdC60LDQvCDQvdCwINCV0J7QoS4uLlxuIgotCi1tc2dpZCAiRU9TIHJlY2VpdmVkIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAi0JXQntChINGY0LUg0L/RgNC40LzRmdC10L0g4oCUINC30LDRg9GB0YLQsNCy0ZnQsNC8INGB0L/QvtGY0LrRgyDQvdC40LfQsOKAplxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgItCf0YDQtdC60LjQtCDQt9CwINCy0YDQtdC80LUg0YfQtdC60LDRmtCwINC90LAg0JXQntChIOKAlCDQt9Cw0YPRgdGC0LDQstGZ0LDQvCDRgdC/0L7RmNC60YMg0L3QuNC30LAuLi5cbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICLQlNC+0YjQu9C+INGY0LUg0LTQviDQs9GA0LXRiNC60LUg0LTQvtC6INGB0LDQvCDRh9C10LrQsNC+INC90LAg0JXQntChXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAi0JjQt9Cy0YDRiNC10ZrQtSDRmNC1INC+0LrQvtC90YfQsNC90L4g0L3QsNC60L7QvSAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAi0J/QvtGB0YLQsNCy0ZnQsNC8INGB0L/QvtGY0LrRgyDQvdC40LfQsCDQvdCwINCh0J/QoNCV0JzQkNCdIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICLQn9C+0YHRgtCw0LLRmdCw0Lwg0YHQv9C+0ZjQutGDINC90LjQt9CwINC90LAg0J3QmNCo0KLQkCAuLi5cbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgItCe0YHQu9C+0LHQsNGS0LDQvCDRgdC/0L7RmNC60YMg0L3QuNC30LAuLi5cbiIKLQotI34gbXNnaWQgImJpbiIKLSN+IG1zZ3N0ciAi0LrQsNC90YLQsCIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAi0KPQvdGD0YLRgNCw0YjRmtCwINCz0YDQtdGI0LrQsCDRgtC+0LrQsCDQv9C+0LTQsNGC0LDQutCwLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgItCd0LUg0LjRgdC/0LjRgdGD0ZjQtSDQv9C+0LTQsNGC0LrQtSDQviDRgdGC0LDRmtGDINC30LAg0JLQoNCh0KLQoyIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAi0JLQoNCh0KLQkDEs0JLQoNCh0KLQkDIsLi4uIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotI34gbXNnc3RyICLQstC10LfQsCDQsdC10Lcg0LjQt9Cy0L7RgNC90L7QsyDQtdC70LXQvNC10L3RgtCwIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAi0LLQtdC30LAg0LHQtdC3INC10LvQtdC80LXQvdGC0LAg0YPRgdC60LvQsNGS0LjQstCw0ZrQsCIKLQotI34gbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgotI34gbXNnc3RyICLQvdC10LzQsCDQtdC70LXQvNC10L3RgtCwINC30LAg0LLQtdC30LjQstCw0ZrQtSDQsNC00YDQtdGB0LUg4oCeJXPigJwiCi0KLSN+IG1zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0jfiBtc2dzdHIgItC90LUg0LzQvtCz0YMg0LTQsCDQstC10LbQtdC8INC10LvQtdC80LXQvdGCINGD0YHQutC70LDRktC40LLQsNGa0LAg0LfQsCDQsNC00YDQtdGB0YMg4oCeJXPigJwiCmRpZmYgLS1naXQgYS9wby9zdGFtcC1wbyBiL3BvL3N0YW1wLXBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Nzg4ZjcwLi4wMDAwMDAwCi0tLSBhL3BvL3N0YW1wLXBvCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGltZXN0YW1wCmRpZmYgLS1naXQgYS9wby9zdi5nbW8gYi9wby9zdi5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMjI1ZGQuLjAwMDAwMDAKLS0tIGEvcG8vc3YuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vc3YucG8gYi9wby9zdi5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiMWQwMC4uMDAwMDAwMAotLS0gYS9wby9zdi5wbworKysgL2Rldi9udWxsCkBAIC0xLDEzMjkgKzAsMCBAQAotIyBTd2VkaXNoIG1lc3NhZ2VzIGZvciBnc3RyZWFtZXIuCi0jIENvcHlyaWdodCDCqSAyMDA0LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3RyZWFtZXIgcGFja2FnZS4KLSMgQ2hyaXN0aWFuIFJvc2UgPG1lbnRob3NAbWVudGhvcy5jb20+LCAyMDA0LCAyMDA1LgotIyBEYW5pZWwgTnlsYW5kZXIgPHBvQGRhbmllbG55bGFuZGVyLnNlPiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMS4KLSMgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGdtYWlsLmNvbT4sIDIwMTQsIDIwMTUsIDIwMTYuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS43LjkwXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDMtMDIgMjI6MTkrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBTd2VkaXNoIDx0cC1zdkBsaXN0b3IudHAtc3Yuc2U+XG4iCi0iTGFuZ3VhZ2U6IHN2XG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCi0iWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjguN1xuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJTa3JpdiB1dCBHU3RyZWFtZXItdmVyc2lvbmVuIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIkfDtnIgYWxsYSB2YXJuaW5nYXIgw7ZkZXNkaWdyYSIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJTa3JpdiB1dCB0aWxsZ8OkbmdsaWdhIGZlbHPDtmtuaW5nc2thdGVnb3JpZXIgb2NoIGF2c2x1dGEiCi0KLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSJTdGFuZGFyZGZlbHPDtmtuaW5nc25pdsOlIGZyw6VuIDEgKGVuZGFzdCBmZWwpIHRpbGwgOSAoYWxsdGluZykgZWxsZXIgMCBmw7ZyICIKLSJpbmdlbiB1dG1hdG5pbmciCi0KLW1zZ2lkICJMRVZFTCIKLW1zZ3N0ciAiTklWw4UiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0iS29tbWFzZXBhcmVyYWQgbGlzdGEgbWVkIGthdGVnb3JpbmFtbjpuaXbDpS1wYXIgZsO2ciBhdHQgc3TDpGxsYSBpbiBzcGVjaWZpa2EgIgotIm5pdsOlZXIgZsO2ciBkZSBlbnNraWxkYSBrYXRlZ29yaWVybmEuIEV4ZW1wZWw6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkxJU1RBIgotCi1tc2dpZCAiRGlzYWJsZSBjb2xvcmVkIGRlYnVnZ2luZyBvdXRwdXQiCi1tc2dzdHIgIkluYWt0aXZlcmEgZsOkcmdsYWdkIGZlbHPDtmtuaW5nc3V0bWF0bmluZyIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0iw4RuZHJhciBmw6RyZ2zDpGdnbmluZyBhdiBmZWxzw7ZrbmluZ3N1dHNrcmlmdGVyLiBNw7ZqbGlnYSBhbHRlcm5hdGl2OiBvZmYsIG9uLCAiCi0iZGlzYWJsZSwgYXV0bywgdW5peCIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICJJbmFrdGl2ZXJhIGZlbHPDtmtuaW5nIgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIkFrdGl2ZXJhIHV0ZsO2cmxpZyBkaWFnbm9zdGlrIHZpZCBpbmzDpHNuaW5nIGF2IGluc3RpY2tzbW9kdWxlciIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIktvbG9uc2VwYXJlcmFkZSBzw7ZrdsOkZ2FyIHNvbSBpbm5laMOlbGxlciBpbnN0aWNrc21vZHVsZXIiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAiU8OWS1bDhEdBUiIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSJLb21tYXNlcGFyZXJhZCBsaXN0YSBtZWQgaW5zdGlja3Ntb2R1bGVyIGF0dCBmw7ZyaGFuZHNpbmzDpHNhIHV0w7Z2ZXIgbGlzdGFuICIKLSJzb20gbGFncmFzIGkgbWlsasO2dmFyaWFiZWxuIEdTVF9QTFVHSU5fUEFUSCIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIklOU1RJQ0tTTU9EVUxFUiIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIiIKLSJJbmFrdGl2ZXJhIGbDpW5nc3QgYXYgc2VnbWVudGVyaW5nc2ZlbCB1bmRlciBpbmzDpHNuaW5nIGF2IGluc3RpY2tzbW9kdWxlciIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJJbmFrdGl2ZXJhIHVwcGRhdGVyaW5nIGF2IHJlZ2lzdHJldCIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIkluYWt0aXZlcmEgc3RhcnQgYXYgZW4gaGrDpGxwcHJvY2VzcyB2aWQgYXZzw7ZrbmluZyBhdiByZWdpc3RyZXQiCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiR1N0cmVhbWVyLWFsdGVybmF0aXYiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJWaXNhIEdTdHJlYW1lci1hbHRlcm5hdGl2IgotCi1tc2dpZCAiVW5rbm93biBvcHRpb24iCi1tc2dzdHIgIk9rw6RudCBhbHRlcm5hdGl2IgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgc3TDtnR0ZSBww6UgZXR0IGFsbG3DpG50IGZlbCBpIGvDpHJuYmlibGlvdGVrLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICIiCi0iVXR2ZWNrbGFybmEgYXYgR1N0cmVhbWVyIHZhciBmw7ZyIGxhdGEgZsO2ciBhdHQgdGlsbGRlbGEgZGV0dGEgZmVsIGV0dCAiCi0iZmVsbnVtbWVyLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IGtvZGVuIGludGUgaW1wbGVtZW50ZXJhZC4iCi0KLW1zZ2lkICIiCi0iR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkIGFuZCBzb21lIGVsZW1lbnQgZmFpbGVkIHRvIHBvc3QgYSAiCi0icHJvcGVyIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4iCi1tc2dzdHIgIiIKLSJHU3RyZWFtZXItZmVsOiB0aWxsc3TDpW5kc8OkbmRyaW5nIG1pc3NseWNrYWRlcyBvY2ggbsOlZ3JhIGVsZW1lbnQgbWlzc2x5Y2thZGVzICIKLSJtZWQgYXR0IHNraWNrYSBldHQga29ycmVrdCBmZWxtZWRkZWxhbmRlIG1lZCBhbmxlZG5pbmdlbiB0aWxsIGZlbGV0LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogcGFkIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IGtvbnRha3Rwcm9ibGVtLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGhyZWFkIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IHRyw6VkcHJvYmxlbS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXItZmVsOiBmw7ZyaGFuZGxpbmdzcHJvYmxlbS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IGjDpG5kZWxzZXByb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IHNwb2xuaW5nc3Byb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJJbnRlcm50IEdTdHJlYW1lci1mZWw6IGbDtnJtw6VnZXByb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIkludGVybnQgR1N0cmVhbWVyLWZlbDogdGFnZ3Byb2JsZW0uIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiRGluIEdTdHJlYW1lci1pbnN0YWxsYXRpb24gc2FrbmFyIGVuIGluc3RpY2tzbW9kdWwuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyLWZlbDoga2xvY2twcm9ibGVtLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iRGV0IGjDpHIgcHJvZ3JhbW1ldCBmw7Zyc8O2a2VyIGFudsOkbmRhIEdTdHJlYW1lci1mdW5rdGlvbmFsaXRldCBzb20gaGFyICIKLSJpbmFrdGl2ZXJhdHMuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgc3TDtnR0ZSBww6UgZXR0IGFsbG3DpG50IGZlbCBpIHN0w7ZkYmlibGlvdGVrLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkt1bmRlIGludGUgaW5pdGllcmEgc3TDtmRiaWJsaW90ZWsuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkt1bmRlIGludGUgc3TDpG5nYSBzdMO2ZGJpYmxpb3Rlay4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIkt1bmRlIGludGUga29uZmlndXJlcmEgc3TDtmRiaWJsaW90ZWsuIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICJLb2RuaW5nc2ZlbC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIHN0w7Z0dGUgcMOlIGV0dCBhbGxtw6RudCByZXN1cnNmZWwuIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiUmVzdXJzZW4ga3VuZGUgaW50ZSBoaXR0YXMuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiUmVzdXJzZW4gdXBwdGFnZW4gZWxsZXIgaW50ZSB0aWxsZ8OkbmdsaWcuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSByZXN1cnNlbiBmw7ZyIGzDpHNuaW5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgcmVzdXJzZW4gZsO2ciBza3Jpdm5pbmcuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSByZXN1cnNlbiBmw7ZyIGzDpHNuaW5nIG9jaCBza3Jpdm5pbmcuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBzdMOkbmdhIHJlc3Vyc2VuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIGZyw6VuIHJlc3Vyc2VuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byByZXNvdXJjZS4iCi1tc2dzdHIgIkt1bmRlIGludGUgc2tyaXZhIHRpbGwgcmVzdXJzZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIkt1bmRlIGludGUgdXRmw7ZyYSBzcG9sbmluZyBww6UgcmVzdXJzZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBzeW5rcm9uaXNlcmEgcMOlIHJlc3Vyc2VuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YS9zdMOkbGxhIGluIGluc3TDpGxsbmluZ2FyIGZyw6VuL3DDpSByZXN1cnNlbi4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIkluZ2V0IGxlZGlndCB1dHJ5bW1lIHDDpSByZXN1cnNlbi4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJIYXIgZWogYmVmb2dlbmhldCBhdHQgYW52w6RuZGEgcmVzdXJzZW4uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgc3TDtnR0ZSBww6UgZXR0IGFsbG3DpG50IHN0csO2bWZlbC4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgIiIKLSJFbGVtZW50ZXQgc3TDtmRlciBpbnRlIGhhbnRlcmluZyBhdiBkZW5uYSBzdHLDtm0uIFNraWNrYSBnw6RybmEgaW4gZW4gIgotImZlbHJhcHBvcnQuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIkt1bmRlIGludGUgZmFzdHN0w6RsbGEgdHlwZW4gYXYgc3Ryw7ZtLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiU3Ryw7ZtbWVuIMOkciBhdiBlbiBhbm5hbiB0eXAgw6RuIGRlbiBzb20gaGFudGVyYXMgYXYgZGV0dGEgZWxlbWVudC4iCi0KLW1zZ2lkICJUaGVyZSBpcyBubyBjb2RlYyBwcmVzZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc3RyZWFtJ3MgdHlwZS4iCi1tc2dzdHIgIkRldCBmaW5ucyBpbmdlbiBvbWtvZGFyZSBzb20ga2FuIGhhbnRlcmEgZGVubmEgc3Ryw7ZtdHlwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBhdmtvZGEgc3Ryw7ZtLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBrb2RhIHN0csO2bS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBhdm11bHRpcGxleGVyYSBzdHLDtm0uIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJLdW5kZSBpbnRlIG11bHRpcGxleGVyYSBzdHLDtm0uIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAiU3Ryw7ZtbWVuIMOkciBhdiBmZWwgZm9ybWF0LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICJTdHLDtm1tZW4gw6RyIGtyeXB0ZXJhZCBvY2ggZGVrcnlwdGVyaW5nIHN0w7ZkcyBpbnRlLiIKLQotbXNnaWQgIiIKLSJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCi0iYmVlbiBzdXBwbGllZC4iCi1tc2dzdHIgIiIKLSJTdHLDtm1tZW4gw6RyIGtyeXB0ZXJhZCBvY2gga2FuIGludGUgZGVrcnlwdGVyYXMgZMOkcmbDtnIgYXR0IGRldCBpbnRlIGZpbm5zIGVuICIKLSJsw6RtcGxpZyBueWNrZWwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgIkluZ2V0IGZlbG1lZGRlbGFuZGUgZsO2ciBkb23DpG5lbiAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzIGFuZCBjb2RlICVkLiIKLW1zZ3N0ciAiSW5nZXQgc3RhbmRhcmRmZWxtZWRkZWxhbmRlIGbDtnIgZG9tw6RuZW4gJXMgb2NoIGtvZGVuICVkLiIKLQotbXNnaWQgIlNlbGVjdGVkIGNsb2NrIGNhbm5vdCBiZSB1c2VkIGluIHBpcGVsaW5lLiIKLW1zZ3N0ciAiVmFsZCBrbG9ja2Ega2FuIGludGUgYW52w6RuZGFzIGkgcsO2cmxlZG5pbmcuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiByZWdpc3RlcmNhY2hlIHRpbGwgJXM6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgInRpdGVsIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAidmFubGlndHZpcyBhbnbDpG5kIHRpdGVsIgotCi1tc2dpZCAidGl0bGUgc29ydG5hbWUiCi1tc2dzdHIgInNvcnRlcmluZ3NuYW1uIGbDtnIgdGl0ZWwiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJ2YW5saWdlbiBhbnbDpG5kIHRpdGVsIGbDtnIgc29ydGVyaW5nc8OkbmRhbcOlbCIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAiYXJ0aXN0IgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb24oZXIpIHNvbSBhbnN2YXJhciBmw7ZyIGluc3BlbG5pbmdlbiIKLQotbXNnaWQgImFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAic29ydGVyaW5nc25hbW4gZsO2ciBhcnRpc3QiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvbihlcikgc29tIGFuc3ZhcmFyIGbDtnIgaW5zcGVsbmluZ2VuIGbDtnIgc29ydGVyaW5nc8OkbmRhbcOlbCIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICJhbGJ1bSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICJhbGJ1bSBzb20gaW5uZWjDpWxsZXIgZGVzc2EgZGF0YSIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICJzb3J0ZXJpbmdzbmFtbiBmw7ZyIGFsYnVtIgotCi1tc2dpZCAiYWxidW0gY29udGFpbmluZyB0aGlzIGRhdGEgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFsYnVtIHNvbSBpbm5laMOlbGxlciBkZXNzYSBkYXRhIGbDtnIgc29ydGVyaW5nc8OkbmRhbcOlbCIKLQotbXNnaWQgImFsYnVtIGFydGlzdCIKLW1zZ3N0ciAiYWxidW1hcnRpc3QiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgIkFydGlzdGVuIGbDtnIgaGVsYSBhbGJ1bWV0LCBzb20gZGV0IHNrYSB2aXNhcyIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAic29ydGVyaW5nc25hbW4gZsO2ciBhbGJ1bWFydGlzdCIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIHNvcnRlZCIKLW1zZ3N0ciAiQXJ0aXN0ZW4gZsO2ciBoZWxhIGFsYnVtZXQsIHNvbSBkZXQgc2thIHNvcnRlcmFzIgotCi1tc2dpZCAiZGF0ZSIKLW1zZ3N0ciAiZGF0dW0iCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgImRhdHVtIGTDpSBkZXNzYSBkYXRhIHNrYXBhZGVzIChzb20gZW4gR0RhdGUtc3RydWt0dXIpIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgImRhdHVtdGlkIgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJkYXR1bSBvY2ggdGlkIGTDpSBkZXNzYSBkYXRhIHNrYXBhZGVzIChzb20gZW4gR3N0RGF0ZVRpbWUtc3RydWt0dXIpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgImdlbnJlIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImdlbnJlIHNvbSBkZXNzYSBkYXRhIHRpbGxow7ZyIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAia29tbWVudGFyIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgImZyaSB0ZXh0IHNvbSBrb21tZW50ZXJhciBkZXNzYSBkYXRhIgotCi1tc2dpZCAiZXh0ZW5kZWQgY29tbWVudCIKLW1zZ3N0ciAidXTDtmthZCBrb21tZW50YXIiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSJmcmkgdGV4dCBzb20ga29tbWVudGVyYXIgZGVzc2EgZGF0YSBpIGZvcm1hdGV0IGtleT12w6RyZGUgZWxsZXIgIgotImtleVtzdl09a29tbWVudGFyIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICJzcMOlcm51bW1lciIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJzcMOlcm51bW1lciBpbnV0aSBlbiBzYW1saW5nIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgInNww6VyYW50YWwiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJhbnRhbCBzcMOlciBpbnV0aSBkZW4gc2FtbGluZyBzb20gZGV0dGEgc3DDpXIgdGlsbGjDtnIiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAic2tpdm51bW1lciIKLQotbXNnaWQgImRpc2MgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgInNraXZudW1tZXIgaW51dGkgZW4gc2FtbGluZyIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgInNraXZhbnRhbCIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICJhbnRhbCBza2l2b3IgaW51dGkgZGVuIHNhbWxpbmcgc29tIGRlbm5hIHNraXZhIHRpbGxow7ZyIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgInBsYXRzIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJVcnNwcnVuZ2V0IGbDtnIgbWVkaWV0IHNvbSBlbiBVUkkgKHBsYXRzIGTDpHIgZGVuIHVyc3BydW5nbGlnYSBmaWxlbiBlbGxlciAiCi0ic3Ryw7ZtbWVuIGZpbm5zKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICJ3ZWJic2lkYSIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIldlYmJzaWRhIGbDtnIgZGV0dGEgbWVkaWEgKGFsbHRzw6Ugd2ViYnNpZGFuIGbDtnIgYXJ0aXN0ZW4gZWxsZXIgZmlsbWVuKSIKLQotbXNnaWQgImRlc2NyaXB0aW9uIgotbXNnc3RyICJiZXNrcml2bmluZyIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAia29ydCB0ZXh0IHNvbSBiZXNrcml2ZXIgaW5uZWjDpWxsZXQgYXYgZGVzc2EgZGF0YSIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgInZlcnNpb24iCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAidmVyc2lvbiBhdiBkZXNzYSBkYXRhIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgIm9yZ2FuaXNhdGlvbiIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAiY29weXJpZ2h0IgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAiY29weXJpZ2h0bm90aXMgZsO2ciBkZXNzYSBkYXRhIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAiVXJpIHRpbGwgY29weXJpZ2h0bm90aXMiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVyaSB0aWxsIGNvcHlyaWdodG5vdGlzIGbDtnIgZGF0YXQiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJrb2RhdCBhdiIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgIm5hbW4gcMOlIGRlbiBwZXJzb24gZWxsZXIgb3JnYW5pc2F0aW9uIHNvbSBrb2RhdCIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgImtvbnRha3QiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJrb250YWt0aW5mb3JtYXRpb24iCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJsaWNlbnMiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImxpY2VucyBmw7ZyIGRhdGEiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAiVXJpIGbDtnIgbGljZW5zaW5mb3JtYXRpb24iCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVyaSB0aWxsIGxpY2VucyBmw7ZyIGRhdGF0IgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICJha3TDtnIiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAicGVyc29uKGVyKSBzb20gYWdlcmFyIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgImtvbXBvc2l0w7ZyIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJwZXJzb24oZXIpIHNvbSBrb21wb25lcmFkZSBpbnNwZWxuaW5nZW4iCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgImtvbmR1a3TDtnIiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgImtvbmR1a3TDtnIvYXJ0aXN0IGbDtnJmaW5pbmciCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAidmFyYWt0aWdoZXQiCi0KLW1zZ2lkICJsZW5ndGggaW4gR1N0cmVhbWVyIHRpbWUgdW5pdHMgKG5hbm9zZWNvbmRzKSIKLW1zZ3N0ciAibMOkbmdkIGkgR1N0cmVhbWVyLXRpZHNlbmhldGVyIChuYW5vc2VrdW5kZXIpIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgImtvbXByaW1lcmluZ3NtZXRvZCIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29tcHJpbWVyaW5nc21ldG9kIHNvbSBkZXNzYSBkYXRhIGxhZ3JhcyBtZWQiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAidmlkZW9rb21wcmltZXJpbmdzbWV0b2QiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImtvbXByaW1lcmluZ3NtZXRvZCBzb20gZGVzc2EgdmlkZW9kYXRhIGxhZ3JhcyBtZWQiCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAibGp1ZGtvbXByaW1lcmluZ3NtZXRvZCIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAia29tcHJpbWVyaW5nc21ldG9kIHNvbSBkZXNzYSBsanVkZGF0YSBsYWdyYXMgbWVkIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgIm9ta29kYXJlIGbDtnIgdW5kZXJ0ZXh0IgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJvbWtvZGFyZSBzb20gdW5kZXJ0ZXh0ZGF0YSBsYWdyYXRzIG1lZCIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgImJlaMOlbGxhcmZvcm1hdCIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJiZWjDpWxsYXJmb3JtYXRldCBzb20gZGVzc2EgZGF0YSBsYWdyYXMgbWVkIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAiYml0ZnJla3ZlbnMiCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJleGFrdCBiaXRmcmVrdmVucyBlbGxlciBnZW5vbXNuaXR0bGlnIGJpdGZyZWt2ZW5zIGkgYml0YXIvcyIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSIKLW1zZ3N0ciAibm9taW5lbGwgYml0ZnJla3ZlbnMiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJub21pbmVsbCBiaXRmcmVrdmVucyBpIGJpdGFyL3MiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgIm1pbnN0YSBiaXRmcmVrdmVucyIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIm1pbnN0YSBiaXRmcmVrdmVucyBpIGJpdGFyL3MiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgImjDtmdzdGEgYml0ZnJla3ZlbnMiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICJow7Znc3RhIGJpdGZyZWt2ZW5zIGkgYml0YXIvcyIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgImtvZGFyZSIKLQotbXNnaWQgImVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgImtvZGFyZSBzb20gYW52w6RudHMgZsO2ciBhdHQga29kYSBkZW5uYSBzdHLDtm0iCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgImtvZGFydmVyc2lvbiIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgInZlcnNpb24gYXYga29kYXJlbiBzb20gYW52w6RudHMgZsO2ciBhdHQga29kYSBkZW5uYSBzdHLDtm0iCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgInNlcmllbnVtbWVyIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAic2VyaWVudW1tZXIgZsO2ciBzcMOlciIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAidXBwc3BlbG5pbmdzZsO2cnN0w6Rya25pbmcgc3DDpXJmw7Zyc3TDpHJrbmluZyIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgInNww6VyZsO2cnN0w6Rya25pbmcgaSBkYiIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAidXBwc3BlbG5pbmdzZsO2cnN0w6Rya25pbmcgc3DDpXJ0b3BwIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgInRvcHBlbiBmw7ZyIHNww6VyZXQiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIGdhaW4iCi1tc2dzdHIgInVwcHNwZWxuaW5nc2bDtnJzdMOkcmtuaW5nIGFsYnVtZsO2cnN0w6Rya25pbmciCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJhbGJ1bWbDtnJzdMOkcmtuaW5nIGkgZGIiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgInVwcHNwZWxuaW5nc2bDtnJzdMOkcmtuaW5nIGFsYnVtdG9wcCIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJ0b3BwZW4gZsO2ciBhbGJ1bWV0IgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgInJlZmVyZW5zbml2w6UgZsO2ciB1cHBzcGVsbmluZ3Nmw7Zyc3TDpHJrbmluZyIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgInJlZmVyZW5zbml2w6UgZsO2ciBmw7Zyc3TDpHJrbmluZ3N2w6RyZGVuIGbDtnIgc3DDpXIgb2NoIGFsYnVtIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAic3Byw6Vra29kIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAic3Byw6Vra29kIGbDtnIgZGVubmEgc3Ryw7ZtLCBlbmxpZ3QgSVNPLTYzOS0xIGVsbGVyIElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgInNwcsOla25hbW4iCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAibmFtbiBww6UgZGV0IHNwcsOlayBzb20gZGVubmEgc3Ryw7ZtIGFudsOkbmRlciIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJiaWxkIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiYmlsZCByZWxhdGVyYWQgdGlsbCBkZW4gaMOkciBzdHLDtm1tZW4iCi0KLSMuIFRSQU5TTEFUT1JTOiAncHJldmlldyBpbWFnZScgPSBpbWFnZSB0aGF0IHNob3dzIGEgcHJldmlldyBvZiB0aGUgZnVsbCBpbWFnZQotbXNnaWQgInByZXZpZXcgaW1hZ2UiCi1tc2dzdHIgImbDtnJoYW5kc3Zpc25pbmdzYmlsZCIKLQotbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiZsO2cmhhbmRzdmlzbmluZ3NiaWxkIHJlbGF0ZXJhZCB0aWxsIGRlbiBow6RyIHN0csO2bW1lbiIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgImJpbGFnYSIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImZpbCBiaWZvZ2FkIHRpbGwgZGVuIGjDpHIgc3Ryw7ZtbWVuIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAic2xhZyBwZXIgbWludXQiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAiYW50YWxldCBzbGFnIHBlciBtaW51dCBpIGxqdWRldCIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICJueWNrZWxvcmQiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAia29tbWFzZXBhcmVyYWRlIG55Y2tlbG9yZCBzb20gYmVza3JpdmVyIGlubmVow6VsbGV0IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgImdlb2dyYWZpc2t0IHBsYXRzbmFtbiIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0ibcOkbnNrbGlndCBsw6RzbGlnIGJlc2tyaXZhbmRlIHBsYXRzIGbDtnIgdmFyIG1lZGlldCBoYXIgc3BlbGF0cyBpbiBlbGxlciAiCi0icHJvZHVjZXJhdHMiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgImxhdGl0dWQgZsO2ciBnZW9ncmFmaXNrIHBsYXRzIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0ibGF0aXR1ZCBpIGdyYWRlciBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMgZMOkciBtZWRpZXQgaGFyIHNwZWxhdHMgaW4gZWxsZXIgIgotInByb2R1Y2VyYXRzIGVubGlndCBXR1M4NCAobm9sbCBmw7ZyIGVrdmF0b3JuLCBuZWdhdGl2YSB2w6RyZGVuIGbDtnIgc3lkbGlnYSAiCi0ibGF0aXR1ZGVyKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgImxvbmdpdHVkIGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSJsb25naXR1ZCBpIGdyYWRlciBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMgZMOkciBtZWRpZXQgaGFyIHNwZWxhdHMgaW4gZWxsZXIgIgotInByb2R1Y2VyYXRzIGVubGlndCBXR1M4NCAobm9sbCBmw7ZyIG1lcmlkaWFubGluamVuIGkgR3JlZW53aWNoLCAiCi0iU3RvcmJyaXRhbm5pZW4sIG5lZ2F0aXZhIHbDpHJkZW4gZsO2ciB2w6RzdGxpZ2EgbG9uZ2l0dWRlcikiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICJow7ZqZCBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0iaMO2amQgaSBtZXRlciBmw7ZyIGdlb2dyYWZpc2sgcGxhdHMgZMOkciBtZWRpZXQgaGFyIHNwZWxhdHMgaW4gZWxsZXIgIgotInByb2R1Y2VyYXRzIGVubGlndCBXR1M4NCAobm9sbCBmw7ZyIGdlbm9tc25pdHRsaWcgaGF2c25pdsOlKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICJsYW5kIGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJsYW5kIChlbmdlbHNrdCBuYW1uKSBkw6RyIG1lZGlldCBoYXIgc3BlbGF0cyBpbiBlbGxlciBwcm9kdWNlcmF0cyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICJzdGFkIGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJzdGFkIChlbmdlbHNrdCBuYW1uKSBkw6RyIG1lZGlldCBoYXIgc3BlbGF0cyBpbiBlbGxlciBwcm9kdWNlcmF0cyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAic3BlY2lmaWsgcGxhdHMgZsO2ciBnZW9ncmFmaXNrIHBsYXRzIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLSJlbiBwbGF0cyBpbm9tIGVuIHN0YWQgZMOkciBtZWRpZXQgaGFyIHByb2R1Y2VyYXRzIGVsbGVyIHNrYXBhdHMgKHQuZXguICIKLSJuw6Ryb21yw6VkZSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAiZmVsIGkgaG9yaXNvbnRlbGwgZ2VvZ3JhZmlzayBwbGF0cyIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICJmw7ZydsOkbnRhdCBmZWwgaSBob3Jpc29udGVsbCBwb3NpdGlvbmVyaW5nc23DpHRuaW5nIChpIG1ldGVyKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAiZsO2cmZseXR0bmluZ3NoYXN0aWdoZXQgZsO2ciBnZW9ncmFmaXNrIHBsYXRzIgotCi1tc2dpZCAiIgotIm1vdmVtZW50IHNwZWVkIG9mIHRoZSBjYXB0dXJpbmcgZGV2aWNlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgaW4gbS9zIgotbXNnc3RyICJmw7ZyZmx5dHRuaW5nc2hhc3RpZ2hldCBmw7ZyIGbDpW5nc3RlbmhldGVuIG7DpHIgbWVkaWV0IHNrYXBhcyAoaSBtZXRlci9zKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBkaXJlY3Rpb24iCi1tc2dzdHIgImbDtnJmbHl0dG5pbmdzcmlrdG5pbmcgZsO2ciBnZW9ncmFmaXNrIHBsYXRzIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iaW5kaWtlcmFyIHJpa3RuaW5nZW4gc29tIGVuaGV0ZW4gZsO2cmZseXR0YXMgbsOkciBtZWRpZXQgc2thcGFzLiBEZXQgIgotInJlcHJlc2VudGVyYXMgc29tIGdyYWRlciBpIGZseXR0YWxzcmVwcmVzZW50YXRpb24sIDAgYmV0eWRlciBnZW9ncmFmaXNrdCAiCi0ibm9yZGxpZyByaWt0bmluZyBvY2ggw7ZrYXIgbWVkc29scyIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAiZsOlbmdzdHJpa3RuaW5nIGbDtnIgZ2VvZ3JhZmlzayBwbGF0cyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotImluZGlrZXJhciByaWt0bmluZ2VuIHNvbSBlbmhldGVuIHBla2FyIG1vdCBuw6RyIG1lZGlldCBza2FwYXMuIERldCAiCi0icmVwcmVzZW50ZXJhcyBzb20gZ3JhZGVyIGkgZmx5dHRhbHNyZXByZXNlbnRhdGlvbiwgMCBiZXR5ZGVyIGdlb2dyYWZpc2t0ICIKLSJub3JkbGlnIHJpa3RuaW5nIG9jaCDDtmthciBtZWRzb2xzIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgInZpc25pbmdzbmFtbiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgIk5hbW4gcMOlIFRWLXByb2dyYW0vcG9kZHPDpG5kbmluZy9zZXJpZSBzb20gbWVkaWV0IGtvbW1lciBmcsOlbiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAidmlzYSBzb3J0ZXJpbmdzbmFtbiIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotIk5hbW4gcMOlIFRWLXByb2dyYW0vcG9kZHPDpG5kbmluZy9zZXJpZSBzb20gbWVkaWV0IGtvbW1lciBmcsOlbiwgZsO2ciAiCi0ic29ydGVyaW5nc8OkbmRhbcOlbCIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICJhdnNuaXR0c251bW1lciIKLQotbXNnaWQgIlRoZSBlcGlzb2RlIG51bWJlciBpbiB0aGUgc2Vhc29uIHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJBdnNuaXR0c251bXJldCBpIHPDpHNvbmdlbiBzb20gbWVkaWV0IMOkciBlbiBkZWwgYXYiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJzw6Rzb25nc251bW1lciIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICJTw6Rzb25nc251bXJldCBmw7ZyIHByb2dyYW1tZXQgc29tIG1lZGlldCDDpHIgZW4gZGVsIGF2IgotCi1tc2dpZCAibHlyaWNzIgotbXNnc3RyICJsw6V0dGV4dGVyIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICJMw6V0dGV4dGVyIGbDtnIgbWVkaWV0LCBhbnbDpG5kcyBvZnRhc3QgZsO2ciBsw6V0YXIiCi0KLW1zZ2lkICJjb21wb3NlciBzb3J0bmFtZSIKLW1zZ3N0ciAic29ydGVyaW5nc25hbW4gZsO2ciBrb21wb3NpdMO2ciIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInBlcnNvbihlcikgc29tIGtvbXBvbmVyYWRlIGluc3BlbG5pbmdlbiwgZsO2ciBzb3J0ZXJpbmdzw6RuZGFtw6VsIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgImdydXBwZXJpbmciCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLSJHcnVwcHJlbGF0ZXJhZGUgbWVkaWEgc29tIHNww6RubmVyIMO2dmVyIGZsZXJhIHNww6VyLCBzw6Vzb20gb2xpa2EgZGVsYXIgYXYgZW4gIgotImtvbnNlcnQuIERldCDDpHIgZW4gaMO2Z3JlIG5pdsOlIMOkbiBldHQgc3DDpXIsIG1lbiBsw6RncmUgw6RuIGV0dCBhbGJ1bSIKLQotbXNnaWQgInVzZXIgcmF0aW5nIgotbXNnc3RyICJhbnbDpG5kYXJiZXR5ZyIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0iQmV0eWcgYW5naXZpdCBhdiBlbiBhbnbDpG5kYXJlLiBEZXN0byBow7ZncmUgcmFua25pbmcsIGRlc3RvIG1lciBnaWxsYXIgIgotImFudsOkbmRhcmVuIGRldHRhIG1lZGlhIgotCi1tc2dpZCAiZGV2aWNlIG1hbnVmYWN0dXJlciIKLW1zZ3N0ciAiZW5oZXRzdGlsbHZlcmthcmUiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJUaWxsdmVya2FyZSBhdiBlbmhldGVuIHNvbSBhbnbDpG50cyBmw7ZyIGF0dCBza2FwYSBkZXR0YSBtZWRpYSIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAiZW5oZXRzbW9kZWxsIgotCi1tc2dpZCAiTW9kZWwgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICJNb2RlbGwgYXYgZW5oZXRlbiBzb20gYW52w6RudHMgZsO2ciBhdHQgc2thcGEgZGV0dGEgbWVkaWEiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBuYW1lIgotbXNnc3RyICJwcm9ncmFtbmFtbiIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiUHJvZ3JhbW1ldCBzb20gYW52w6RudHMgZsO2ciBhdHQgc2thcGEgZGV0dGEgbWVkaWEiCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICJwcm9ncmFtZGF0YSIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIkdvZHR5Y2tsaWcgcHJvZ3JhbWRhdGEgYXR0IHNlcmlhbGlzZXJhIGludXRpIGRldHRhIG1lZGlhIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgImJpbGRvcmllbnRlcmluZyIKLQotbXNnaWQgIkhvdyB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCBiZWZvcmUgZGlzcGxheSIKLW1zZ3N0ciAiSHVyIGJpbGRlbiBza2Egcm90ZXJhcyBlbGxlciB2w6RuZGFzIGbDtnJlIHZpc25pbmciCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgInV0Z2l2YXJlIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgbGFiZWwgb3IgcHVibGlzaGVyIgotbXNnc3RyICJOYW1uIHDDpSBmw7ZybGFnIGVsbGVyIHV0Z2l2YXJlIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgInRvbGthZCBhdiIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICJJbmZvcm1hdGlvbiBvbSBtw6Rubmlza29ybmEgYmFrb20gZW4gcmVtaXggZWxsZXIgbGlrbmFuZGUgdG9sa25pbmciCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAibWlkaS1iYXMtbm90IgotCi1tc2dpZCAiTWlkaSBub3RlIG51bWJlciBvZiB0aGUgYXVkaW8gdHJhY2suIgotbXNnc3RyICJNaWRpLW5vdC1udW1tZXIgZsO2ciBsanVkc3DDpXJldC4iCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgInByaXZhdC1kYXRhIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICJQcml2YXQgZGF0YSIKLQotbXNnaWQgIiwgIgotbXNnc3RyICIsICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBVUkkgaGFuZGxlciBmb3IgdGhlICVzIHByb3RvY29sIGZvdW5kIgotbXNnc3RyICJJbmdlbiB1cmktaGFudGVyYXJlIGhpdHRhZGVzIGbDtnIgJXMtcHJvdG9rb2xsZXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVVJJIHNjaGVtZSAnJXMnIG5vdCBzdXBwb3J0ZWQiCi1tc2dzdHIgIlVyaS1zY2hlbWEgXCIlc1wiIHNha25hciBzdMO2ZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJGRUw6IGZyw6VuIGVsZW1lbnQgJXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iWXR0ZXJsaWdhcmUgZmVsc8O2a25pbmdzaW5mb3JtYXRpb246XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJsw6RuayBoYXIgaW5nZW4ga8OkbGxhIFt1dGfDpW5nPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICJsw6RuayBoYXIgaW5nZW4gdXRnw6VuZyBba8OkbGxhPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImluZ2VuIFwiJXNcIi1lZ2Vuc2thcCBpIGVsZW1lbnRldCBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJrdW5kZSBpbnRlIHN0w6RsbGEgaW4gZWdlbnNrYXBlbiBcIiVzXCIgaSBlbGVtZW50ZXQgXCIlc1wiIHRpbGwgXCIlc1wiIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIkbDtnJkcsO2amQgbMOkbmtuaW5nIG1pc3NseWNrYWRlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgImt1bmRlIGludGUgbMOkbmthICVzIHRpbGwgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImluZ2V0IFwiJXNcIi1lbGVtZW50IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJvdsOkbnRhZCByZWZlcmVucyBcIiVzXCIgLSBpZ25vcmVyYXIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJvdsOkbnRhZCBrb250YWt0LXJlZmVyZW5zIFwiJXNcIiAtIGlnbm9yZXJhciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZsO2cm3DpWdvcm5hIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgImluZ2V0IHV0Z8OlbmdzZWxlbWVudCBmw7ZyIFVSSTpuIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiaW5nZXQga8OkbGxlbGVtZW50IGbDtnIgVVJJOm4gXCIlc1wiIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICJzeW50YXhmZWwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJhbmdhdiB0b20ga29yZyBcIiVzXCIsIGludGUgdGlsbMOldGV0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAiaW5nZW4ga29yZyBcIiVzXCIsIHBhY2thciB1cHAgZWxlbWVudCIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJ0b20gcsO2cmxlZG5pbmcgw6RyIGludGUgdGlsbMOldGV0IgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIkbDtnJrYXN0YXIgZW4gc3RvciBtw6RuZ2QgYnVmZmVydGFyLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAiSW50ZXJudCBkYXRhZmzDtmRlc3Byb2JsZW0uIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAiSW50ZXJudCBmZWwgaSBkYXRhZmzDtmRlLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAiSW50ZXJudCBrbG9ja2ZlbC4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IG1hcHBhIGJ1ZmZlcnQuIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkZpbHRyZXJhIGbDtnJtw6Vnb3IiCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIkJlZ3LDpG5zYSBkZSBtw7ZqbGlnYSB0aWxsw6V0bmEgZsO2cm3DpWdvcm5hIChOVUxMIGJldHlkZXIgQU5ZKS4gSW5zdMOkbGxuaW5nIGF2ICIKLSJlZ2Vuc2thcGVuIHRhciBlbiByZWZlcmVucyB0aWxsIGRldCBhbmdpdm5hIEdzdENhcHMtb2JqZWt0ZXQuIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiw4RuZHJpbmdzbMOkZ2UgZsO2ciBmw7ZybcOlZ29yIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiw4RuZHJpbmdzbMOkZ2UgZsO2ciBmaWx0ZXJmw7ZybcOlZ29yIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiSW5nZW4gdGVtcG9yw6Rya2F0YWxvZyBhbmdpdmVuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIHRlbXBvcsOkcmZpbGVuIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBmaWxlbiBcIiVzXCIgZsO2ciBsw6RzbmluZy4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyB0aWxsIGjDpG10bmluZ3NmaWxlbi4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiSW5nZXQgZmlsbmFtbiBhbmdpdmV0IGbDtnIgc2tyaXZuaW5nLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkt1bmRlIGludGUgw7ZwcG5hIGZpbGVuIFwiJXNcIiBmw7ZyIHNrcml2bmluZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkZlbCB2aWQgc3TDpG5nbmluZyBhdiBmaWxlbiBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICJGZWwgdmlkIHPDtmtuaW5nIGkgZmlsZW4gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgdGlsbCBmaWxlbiBcIiVzXCIuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIkluZ2V0IGZpbG5hbW4gYW5naXZldCBmw7ZyIGzDpHNuaW5nLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBmw6UgaW5mb3JtYXRpb24gb20gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICJcIiVzXCIgw6RyIGVuIGthdGFsb2cuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAiRmlsZW4gXCIlc1wiIMOkciBldHQgdXR0YWcuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIGVmdGVyIGl0ZXJhdGlvbmVyIHNvbSBiZWfDpHJ0LiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgImbDtnJtw6Vnb3IiCi0KLW1zZ2lkICJkZXRlY3RlZCBjYXBhYmlsaXRpZXMgaW4gc3RyZWFtIgotbXNnc3RyICJkZXRla3RlcmFkZSBmw7ZybcOlZ29yIGkgc3Ryw7ZtbWVuIgotCi1tc2dpZCAibWluaW11bSIKLW1zZ3N0ciAibWluaW11bSIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgInR2aW5nYSBmw7ZybcOlZ29yIgotCi1tc2dpZCAiZm9yY2UgY2FwcyB3aXRob3V0IGRvaW5nIGEgdHlwZWZpbmQiCi1tc2dzdHIgInR2aW5nYSBmw7ZybcOlZ29yIHV0YW4gYXR0IGfDtnJhIGVuIHR5cGVmaW5kIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgIlN0csO2bW1lbiBpbm5laMOlbGxlciBpbnRlIHRpbGxyw6Rja2xpZ3QgbWVkIGRhdGEuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJTdHLDtm1tZW4gaW5uZWjDpWxsZXIgaW5nZXQgZGF0YS4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICJJbXBsZW1lbnRlcmFkZSBncsOkbnNzbml0dDpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICJsw6RzYmFyIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgInNrcml2YmFyIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAiZsO2csOlbGRyYWQiCi0KLW1zZ2lkICJjb250cm9sbGFibGUiCi1tc2dzdHIgImtvbnRyb2xsZXJiYXIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiw6RuZHJpbmdzYmFydCBpIHRpbGxzdMOlbmRlbiBOVUxMLCBSRUFEWSwgUEFVU0VEIGVsbGVyIFBMQVlJTkciCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICLDpG5kcmluZ3NiYXJ0IGVuZGFzdCBpIHRpbGxzdMOlbmRlbiBOVUxMLCBSRUFEWSBlbGxlciBQQVVTRUQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAiw6RuZHJpbmdzYmFydCBlbmRhc3QgaSB0aWxsc3TDpW5kZW4gTlVMTCBlbGxlciBSRUFEWSIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiU3ZhcnRsaXN0YWRlIGZpbGVyOiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIlRvdGFsdCBhbnRhbDogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIlZCBzdmFydGxpc3RhZCBmaWwiCi1tc2dzdHJbMV0gIiVkIHN2YXJ0bGlzdGFkZSBmaWxlciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIGluc3RpY2tzbW9kdWwiCi1tc2dzdHJbMV0gIiVkIGluc3RpY2tzbW9kdWxlciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3QgZW50cnkiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIgotbXNnc3RyWzBdICIlZCBzdmFydGxpc3RhZCBwb3N0IgotbXNnc3RyWzFdICIlZCBzdmFydGxpc3RhZGUgcG9zdGVyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCBmdW5rdGlvbiIKLW1zZ3N0clsxXSAiJWQgZnVua3Rpb25lciIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAiU2tyaXYgdXQgYWxsYSBlbGVtZW50IgotCi1tc2dpZCAiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0ciAiU2tyaXYgdXQgbGlzdGEgw7Z2ZXIgc3ZhcnRsaXN0YWRlIGZpbGVyIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSJTa3JpdiB1dCBlbiBtYXNraW50b2xrbmluZ3NiYXIgbGlzdGEgw7Z2ZXIgZnVua3Rpb25lciBzb20gZGVuIGFuZ2l2bmEgIgotImluc3RpY2tzbW9kdWxlblxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGVyIGFsbGEgaW5zdGlja3Ntb2R1bGVyICIKLSJ0aWxsaGFuZGFow6VsbGVyLiBBbnbDpG5kYmFydFxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGxzYW1tYW5zIG1lZCBleHRlcm5hIG1la2FuaXNtZXIgIgotImbDtnIgYXV0b21hdGlzayBpbnN0YWxsYXRpb24gYXYgaW5zdGlja3Ntb2R1bGVyIgotCi1tc2dpZCAiTGlzdCB0aGUgcGx1Z2luIGNvbnRlbnRzIgotbXNnc3RyICJMaXN0YSBpbnN0aWNrc21vZHVsZW5zIGlubmVow6VsbCIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICJLb250cm9sbGVyYSBvbSBkZXQgYW5naXZuYSBlbGVtZW50ZXQgZWxsZXIgaW5zdGlja3Ntb2R1bGVuIGV4aXN0ZXJhciIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLSJOw6RyIGV4aXN0ZW5zZW4gYXYgZXR0IGVsZW1lbnQgZWxsZXIgaW5zdGlja3Ntb2R1bCBrb250cm9sbGVyYXMsIGtvbnRyb2xsZXJhICIKLSLDpHZlbiBhdHQgZGVzcyB2ZXJzaW9uIMOldG1pbnN0b25lIMOkciBkZW4gYW5naXZuYSIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiIgotIlNrcml2IHV0IHVyaS1zY2hlbWFuIHNvbSBzdMO2ZHMsIHRpbGxzYW1tYW5zIG1lZCBlbGVtZW50ZW4gc29tIGltcGxlbWVudGVyYXIgIgotImRlbSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBsw6RzYSBpbiBmaWwgZsO2ciBpbnN0aWNrc21vZHVsOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN1Y2ggZWxlbWVudCBvciBwbHVnaW4gJyVzJ1xuIgotbXNnc3RyICJJbmdldCBzw6VkYW50IGVsZW1lbnQgZWxsZXIgaW5zdGlja3Ntb2R1bCBcIiVzXCJcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIkluZGV4c3RhdGlzdGlrIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiRmljayBtZWRkZWxhbmRlICMldSBmcsOlbiBlbGVtZW50ZXQgXCIlc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiRmljayBtZWRkZWxhbmRlICMldSBmcsOlbiBrb250YWt0ZW4gKHBhZCkgXCIlczolc1wiICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiRmljayBtZWRkZWxhbmRlICMldSBmcsOlbiBvYmpla3RldCBcIiVzXCIgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIkZpY2sgbWVkZGVsYW5kZSAjJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRmljayBFT1MgZnLDpW4gZWxlbWVudCBcIiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiSElUVEFERSBUQUdHICAgOiBoaXR0YXQgYXYgZWxlbWVudGV0IFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIkhJVFRBREUgVEFHRyAgIDogaGl0dGF0IGF2IGtvbnRha3RlbiBcIiVzOiVzXCIuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICJISVRUQURFIFRBR0cgICA6IGhpdHRhdCBhdiBvYmpla3RldCBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAiSElUVEFERSBUQUdHXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiSElUVEFERSBJTk5FSMOFTEwgOiBoaXR0YXQgYXYgZWxlbWVudGV0IFwiJXNcIi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIkhJVFRBREUgSU5ORUjDhUxMIDogaGl0dGF0IGF2IG9iamVrdGV0IFwiJXNcIi5cbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICJISVRUQURFIElOTkVIw4VMTFxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJWQVJOSU5HOiBmcsOlbiBlbGVtZW50ZXQgJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiRsO2cmlubMOkc3QsIHbDpG50YXIgcMOlIGF0dCBidWZmcmluZ2VuIHNrYSBibGkgZsOkcmRpZy4uLlxuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiRsO2cmlubMOkc3QsIHbDpG50YXIgcMOlIGF0dCBmw7ZybG9wcGV0IHNrYSBhdnNsdXRhcy4uLlxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICJidWZmcmFyLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAiRsOkcmRpZyBtZWQgYnVmZnJpbmdlbiwgc3TDpGxsZXIgaW4gcsO2cmxlZG5pbmdlbiB0aWxsIFBMQVlJTkcuLi5cbiIKLQotbXNnaWQgIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIkJ1ZmZyYXIsIHN0w6RsbGVyIGluIHLDtnJsZWRuaW5nZW4gdGlsbCBQQVVTRUQuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIkbDtnJkcsO2am5pbmcgZsO2ciB2aWRhcmVzw6RuZG5pbmcuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJTdMOkbGxlciBpbiB0aWxsc3TDpW5kZXQgdGlsbCAlcyBlbmxpZ3QgYmVnw6RyYW4gZnLDpW4gJXMuLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkF2YnJvdHQ6IFN0b3BwYXIgcsO2cmxlZG5pbmdlbiAuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICJGw7ZybG9wcDogKCVzKSAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiRWxlbWVudCBzYWtuYXM6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIkZpY2sga29udGV4dCBmcsOlbiBlbGVtZW50ZXQgXCIlc1wiOiAlcz0lc1xuIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICJNYXRhIHV0IHRhZ2dhciAow6R2ZW4ga8OkbnQgc29tIG1ldGFkYXRhKSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIlNrcml2IHV0IElOTkVIw4VMTCAoa2FwaXRlbCBvY2ggdXRnw6V2b3IpIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiU2tyaXYgdXQgc3RhdHVzaW5mb3JtYXRpb24gb2NoIGVnZW5za2Fwc25vdGlmaWVyaW5nYXIiCi0KLW1zZ2lkICJEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uIgotbXNnc3RyICJTa3JpdiBpbnRlIHV0IG7DpWdvbiBmw7ZybG9wcHNpbmZvcm1hdGlvbiIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiTWF0YSB1dCBtZWRkZWxhbmRlbiIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0iTWF0YSBpbnRlIHV0IHN0YXR1c2luZm9ybWF0aW9uIGbDtnIgZGVuIGFuZ2l2bmEgZWdlbnNrYXBlbiBvbSB1dGbDtnJsaWcgIgotImRpYWdub3N0aWsgw6RyIGFrdGl2ZXJhZCAoa2FuIGFudsOkbmRhcyBmbGVyYSBnw6VuZ2VyKSIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIkVHRU5TS0FQU05BTU4iCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgIkluc3RhbGxlcmEgaW50ZSBlbiBmZWxoYW50ZXJhcmUiCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIlR2aW5nYSBFT1MgcMOlIGvDpGxsb3IgaW5uYW4gcsO2cmxlZG5pbmdlbiBzdMOkbmdzIGF2IgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICJTYW1sYSBvY2ggc2tyaXYgdXQgaW5kZXhzdGF0aXN0aWsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIkZFTDogcsO2cmxlZG5pbmdlbiBrdW5kZSBpbnRlIGtvbnN0cnVlcmFzOiAlcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkZFTDogcsO2cmxlZG5pbmdlbiBrdW5kZSBpbnRlIGtvbnN0cnVlcmFzLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGVycm9uZW91cyBwaXBlbGluZTogJXNcbiIKLW1zZ3N0ciAiVkFSTklORzogZmVsYWt0aWcgcsO2cmxlZG5pbmc6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIkZFTDogXCJwaXBlbGluZVwiLWVsZW1lbnRldCBoaXR0YWRlcyBpbnRlLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIlN0w6RsbGVyIGluIHLDtnJsZWRuaW5nZW4gdGlsbCBQQVVTRUQuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIkZFTDogUsO2cmxlZG5pbmdlbiB2aWxsIGludGUgZ8O2cmEgcGF1cy5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiUsO2cmxlZG5pbmdlbiBsZXZlciBvY2ggYmVow7Z2ZXIgaW50ZSBQUkVST0xMIC4uLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAiUsO2cmxlZG5pbmdlbiB1dGbDtnIgUFJFUk9MTC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJGRUw6IHLDtnJsZWRuaW5nZW4gdmlsbCBpbnRlIHV0ZsO2cmEgcHJlcm9sbC5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiUsO2cmxlZG5pbmdlbiBoYXIgdXRmw7ZydCBQUkVST0xMLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIlN0w6RsbGVyIGluIHLDtnJsZWRuaW5nZW4gdGlsbCBQTEFZSU5HLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgIkZFTDogcsO2cmxlZG5pbmdlbiB2aWxsIGludGUgc3BlbGEuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiRU9TIHZpZCBhdnN0w6RuZ25pbmcgYWt0aXZlcmFkIC0tIFR2aW5nYXIgRU9TIHDDpSByw7ZybGVkbmluZ2VuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiRU9TIHZpZCBhdnN0w6RuZ25pbmcgYWt0aXZlcmFkIC0tIFbDpG50YXIgcMOlIEVPUyBlZnRlciBmZWxcbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICJWw6RudGFyIHDDpSBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyB0b2dzIGVtb3QgLSBzdG9wcGFyIHLDtnJsZWRuaW5nLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAiQXZicm90dCBtZWRhbiBFT1MgdsOkbnRhZGVzIHDDpTogU3RvcHBhciByw7ZybGVkbmluZ2VuLi4uXG4iCi0KLW1zZ2lkICJBbiBlcnJvciBoYXBwZW5lZCB3aGlsZSB3YWl0aW5nIGZvciBFT1NcbiIKLW1zZ3N0ciAiRXR0IGZlbCBpbnRyw6RmZmFkZSB2aWQgdsOkbnRhbiBww6UgRU9TXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiS8O2cm5pbmcgYXZzbHV0YWRlcyBlZnRlciAlIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAiU3TDpGxsZXIgaW4gcsO2cmxlZG5pbmdlbiB0aWxsIFJFQURZLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIlN0w6RsbGVyIGluIHLDtnJsZWRuaW5nZW4gdGlsbCBOVUxMLi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICJGcmlnw7ZyIHLDtnJsZWRuaW5nIC4uLlxuIgotCi0jfiBtc2dpZCAiYmluIgotI34gbXNnc3RyICJrb3JnIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJJbnRlcm50IGZlbCBpIGRhdGFzdHLDtm0uIgotCi0jfiBtc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKLSN+IG1zZ3N0ciAiTWF0YSBpbnRlIHV0IHN0YXR1c2luZm9ybWF0aW9uIGF2IFRZUCIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVFlQMSxUWVAyLC4uLiIKZGlmZiAtLWdpdCBhL3BvL3RyLmdtbyBiL3BvL3RyLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgxZGRlZS4uMDAwMDAwMAotLS0gYS9wby90ci5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby90ci5wbyBiL3BvL3RyLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODIyMjU1Li4wMDAwMDAwCi0tLSBhL3BvL3RyLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTQyOSArMCwwIEBACi0jIHRyYW5zbGF0aW9uIG9mIEdTdHJlYW1lciB0byBUdXJraXNoCi0jIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgotIwotIyBCYXJpcyBDaWNlayA8YmFyaXNAdGVhbWZvcmNlLm5hbWUudHI+LCAyMDA0LCAyMDE1LgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDEuNC4xXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDEtMTAgMjE6MDYrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogVm9sa2FuIEdlemVyIDx2b2xrYW5nZXplckBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogVHVya2lzaCA8Z251LXRyLXUxMmFAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiB0clxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCi0iWC1HZW5lcmF0b3I6IExva2FsaXplIDEuNVxuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJHU3RyZWFtZXIgc8O8csO8bsO8bcO8IHlhemTEsXIiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAiVMO8bSB1eWFyxLFsYXLEsSDDtmzDvG1jw7xsIHlhcCIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJHZcOnZXJsaSBoYXRhIGF5xLFrbGFtYSBzxLFuxLFmbGFyxLFuxLEgeWF6ZMSxciB2ZSDDp8SxayIKLQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotIsOWbnRhbsSxbWzEsSBoYXRhIGF5xLFrbGFtYSBzZXZpeWVzaSAxJ2RlbiAoc2FkZWNlIGhhdGFsYXIpIDknYSAoaGVyIMWfZXkpIHlhIGRhICIKLSLDp8Sxa3TEsSBvbG1hbWFzxLEgacOnaW4gMCIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICJTRVbEsFlFIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIkF5csSxIHPEsW7EsWZsYXLEsW4gYmVsaXJsaSBzZXZpeWVsZXJpIGnDp2luIHPEsW7EsWZfaXNtaTpzZXZpeWUgw6dpZnRsZXJpbmluIHZpcmfDvGwgIgotImlsZSBheXLEsWxtxLHFnyBsaXN0ZXNpLiDDlnJuZWs6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkzEsFNURSIKLQotbXNnaWQgIkRpc2FibGUgY29sb3JlZCBkZWJ1Z2dpbmcgb3V0cHV0IgotbXNnc3RyICJSZW5rbGkgaGF0YSBhecSxa2xhbWEgw6fEsWt0xLFzxLFuxLEga2FwYXQiCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotIkhhdGEgYXnEsWtsYW1hIGfDvG5sw7xrbGVyaW5pIHJlbmtsZW5kaXJtZSBraXBpbmkgZGXEn2nFn3RpcmlyLiBPbGFzxLEga2lwbGVyOiAiCi0ia2FwYWzEsSwgYcOnxLFrLCBkZXZyZWTEscWfxLEsIG90b21hdGlrLCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIkhhdGEgYXnEsWtsYW1hecSxIGthcGF0IgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIkF5csSxbnTEsWzEsSBla2xlbnRpIHnDvGtsZW1lIGRldGF5bGFyxLFuxLEgZXRraW5sZcWfdGlyIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiRWtsZW50aWxlcmkgacOnZXJlbiBpa2kgbm9rdGEgw7xzdCDDvHN0ZSBpbGUgYXlyxLFsbcSxxZ8geW9sbGFyIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIllPTExBUiIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSLDh2V2cmUgZGXEn2nFn2tlbmkgR1NUX1BMVUdJTl9QQVRIIGnDp2luZGUgc2FrbGFuYW4gbGlzdGV5ZSBlayBvbGFyYWsgw7ZuY2VkZW4gIgotInnDvGtsZW5lY2VrIHZpcmfDvG4gaWxlIGF5csSxbG3EscWfIGVrbGVudGkgbGlzdGVzaSIKLQotbXNnaWQgIlBMVUdJTlMiCi1tc2dzdHIgIkVLTEVOVMSwTEVSIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAiRWtsZW50aSB5w7xrbGVuaXJrZW4ga2VzaW1sZW1lIGhhdGFsYXLEsW7EsSB5YWthbGFtYXnEsSBrYXBhdCIKLQotbXNnaWQgIkRpc2FibGUgdXBkYXRpbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICJLYXnEsXQgZGVmdGVyaSBnw7xuY2VsbGVtZXlpIGRldnJlIGTEscWfxLEgYsSxcmFrIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAiIgotIkthecSxdCBkZWZ0ZXJpIHRhcmFuxLFya2VuIHlhcmTEsW1jxLEgYmlyIGnFn2xlbSBvbHXFn3R1cm1hecSxIGRldnJlIGTEscWfxLEgYsSxcmFrIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgIkdTdHJlYW1lciBTZcOnZW5la2xlcmkiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJHU3RyZWFtZXIgU2XDp2VuZWtsZXJpbmkgR8O2c3RlciIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICJCaWxpbm1leWVuIHNlw6dlbmVrIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgZ2VuZWwgdGVtZWwga8O8dMO8cGhhbmUgaGF0YXPEsSBpbGUga2FyxZ/EsWxhxZ90xLEuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSJHU3RyZWFtZXIgZ2VsacWfdGlyaWNpbGVyaSBidSBoYXRhIGnDp2luIGJpciBoYXRhIGtvZHUgYXRhbWF5YSDDvMWfZW5tacWfbGVyLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICLEsMOnIEdTdHJlYW1lciBoYXRhc8SxOiBrb2QgdGFtYW1sYW5tYW3EscWfLiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIkdTdHJlYW1lciBoYXRhc8SxOiBkdXJ1bSBkZcSfacWfaWtsacSfaSBiYcWfYXLEsXPEsXogb2xkdSB2ZSBiYXrEsSDDtmdlIGJhxZ9hcsSxc8SxemzEsWsgIgotIm5lZGVuaSBpbGUgaWxnaWxpIHV5Z3VuIGJpciBoYXRhIGlsZXRpc2kgZ8O2bmRlcm1lZGUgYmHFn2FyxLFzxLF6IG9sZHUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkRhaGlsaSBHU3RyZWFtZXIgaGF0YXPEsTogZG9sZ3UgcHJvYmxlbWkuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIsSww6cgR1N0cmVhbWVyIGhhdGFzxLE6IGnFnyBwYXLDp2FjxLHEn8SxIHNvcnVudS4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICLEsMOnIEdTdHJlYW1lciBoYXRhc8SxOiB1emxhxZ9tYSBzb3J1bnUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAixLDDpyBHU3RyZWFtZXIgaGF0YXPEsTogb2xheSBzb3J1bnUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICLEsMOnIEdTdHJlYW1lciBoYXRhc8SxOiBhcmFtYSBzb3J1bnUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICLEsMOnIEdTdHJlYW1lciBoYXRhc8SxOiBrYXBhc2l0ZSBzb3J1bnUuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0YWcgcHJvYmxlbS4iCi1tc2dzdHIgIsSww6cgR1N0cmVhbWVyIGhhdGFzxLE6IGV0aWtldCBzb3J1bnUuIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGt1cnVsdW11bnV6ZGEgYmlyIGVrbGVudGkgZWtzaWsuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIGhhdGFzxLE6IHNhYXQgc29ydW51LiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0iQnUgdXlndWxhbWEgZGV2cmUgZMSxxZ/EsSBixLFyYWvEsWxtxLHFnyBHU3RyZWFtZXIgacWfbGV2aW5pIGt1bGxhbm1hecSxIGRlbml5b3IuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgZ2VuZWwga8O8dMO8cGhhbmUgZGVzdGVrbGVtZSBoYXRhc8SxIGlsZSBrYXLFn8SxbGHFn3TEsS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICJEZXN0ZWtsZXlpY2kga8O8dMO8cGhhbmUgYmHFn2xhdMSxbGFtYWTEsS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2Ugc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiRGVzdGVrbGV5aWNpIGvDvHTDvHBoYW5lIGthcGF0xLFsYW1hZMSxLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25maWd1cmUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiRGVzdGVrbGVuZW4ga8O8dMO8cGhhbmUgeWFwxLFsYW5kxLFyxLFsYW1hZMSxLiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiS29kbGFtYSBoYXRhc8SxLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgcmVzb3VyY2UgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIgZ2VuZWwgYmlyIGtheW5hayBoYXRhc8SxIGlsZSBrYXLFn8SxbGHFn3TEsS4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICJLYXluYWsgYnVsdW5hbWFkxLEuIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAiS2F5bmFrIG1lxZ9ndWwgdmV5YSB1bGHFn8SxbGFiaWxpciBkZcSfaWwuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJPa3VtYSBpw6dpbiBrYXluYWsgYcOnxLFsYW1hZMSxLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiWWF6bWEgacOnaW4ga2F5bmFrIGHDp8SxbGFtYWTEsS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk9rdW1hIHZlIHlhem1hIGnDp2luIGtheW5hayBhw6fEsWxhbWFkxLEuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiS2F5bmFrIGthcGF0xLFsYW1hZMSxLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICJLYXluYWt0YW4gb2t1bmFtYWTEsS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICJLYXluYcSfYSB5YXrEsWxhbWFkxLEuIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIktheW5hayDDvHplcmluZGUgYXRsYW1hIHlhcMSxbGFtYWTEsS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgc3luY2hyb25pemUgb24gcmVzb3VyY2UuIgotbXNnc3RyICJLYXluYWsgZcWfemFtYW5sYW5kxLFyxLFsYW1hZMSxLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICJLYXluYcSfYSBkZcSfZXJsZXIgYXRhbmFtYWTEsSB5YSBkYSBhbMSxbmFtYWTEsS4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIktheW5ha3RhIGJvxZ8gYWxhbiBrYWxtYWTEsS4iCi0KLW1zZ2lkICJOb3QgYXV0aG9yaXplZCB0byBhY2Nlc3MgcmVzb3VyY2UuIgotbXNnc3RyICJLYXluYcSfYSBlcmnFn21layBpw6dpbiB5ZXRraWxpIGRlxJ9pbC4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciBnZW5lbCBiaXIgYWvEscWfIGhhdGFzxLEgaWxlIGthcsWfxLFsYcWfdMSxLiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotIsOWxJ9lIGJ1IGFrxLFtxLFuIGnFn2xlbWVzaW5pIGdlcsOnZWtsZcWfdGlyZW1peW9yLiBMw7x0ZmVuIGhhdGEgYmlsZGlyaW1pbmRlICIKLSJidWx1bnVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICJBa8SxbSB0w7xyw7wgYmVsaXJsZW5lbWVkaS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIG9mIGEgZGlmZmVyZW50IHR5cGUgdGhhbiBoYW5kbGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIkFrxLFtIGJ1IMO2xJ9lIHRhcmFmxLFuZGFuIGnFn2xlbmVuIHTDvHJkZW4gZmFya2zEsSBiaXIgdMO8cmRlLiIKLQotbXNnaWQgIlRoZXJlIGlzIG5vIGNvZGVjIHByZXNlbnQgdGhhdCBjYW4gaGFuZGxlIHRoZSBzdHJlYW0ncyB0eXBlLiIKLW1zZ3N0ciAiQWvEsW0gdMO8csO8bsO8IGnFn2xleWViaWxlY2VrIGtvZGVrIGJ1bHVubXV5b3IuIgotCi1tc2dpZCAiQ291bGQgbm90IGRlY29kZSBzdHJlYW0uIgotbXNnc3RyICJBa8SxbSDDp8O2esO8bWxlbmVtZWRpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAiQWvEsW0ga29kbGFuYW1hZMSxLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJBa8SxbSDDp29rbGFtYXPEsSBnZXJpeWUgYWzEsW5hbWFkxLEuIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJBa8SxbSDDp29rbGFuZMSxcsSxbGFtYWTEsS4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJBa8SxxZ8geWFubMSxxZ8gYmnDp2ltZGVkaXIuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkFrxLHFnyDFn2lmcmVsaWRpciB2ZSDFn2lmcmUgYcOnbWEgZGVzdGVrbGVubWl5b3IuIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIkFrxLHFnyDFn2lmcmVsaWRpciB2ZSDFn2lmcmVzaSBhw6fEsWxhbWF6IMOnw7xua8O8IHV5Z3VuIGFuYWh0YXIgdGVtaW4gZWRpbG1lbWnFn3Rpci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gZXJyb3IgbWVzc2FnZSBmb3IgZG9tYWluICVzLiIKLW1zZ3N0ciAiJXMgZXRraSBhbGFuxLEgacOnaW4gaGnDpyBoYXRhIGlsZXRpc2kgeW9rLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICIlcyBldGtpIGFsYW7EsSB2ZSAlZCBrb2R1IGnDp2luIHN0YW5kYXJ0IGhhdGEgaWxldGlzaSB5b2suIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICJTZcOnaWxlbiBzYWF0IGFyZMSxxZ/EsWsgZMO8emVuZGUga3VsYW7EsWxhbcSxeW9yLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIHJlZ2lzdHJ5IGNhY2hlIHRvICVzOiAlcyIKLW1zZ3N0ciAiJXMga29udW11bmEga2F5xLF0IGRlZnRlcmkgw7ZuYmVsbGXEn2luaSB5YXptYWRhIGhhdGE6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgImJhxZ9sxLFrIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAieWF5Z8SxbiBvbGFyYWsga3VsbGFuxLFsYW4gYmHFn2zEsWsiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAic8SxcmFsYW1hYWTEsSBiYcWfbMSxxJ/EsSIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgImFtYcOnbGFyxLEgc8SxcmFsYW1hayBpw6dpbiB5YXlnxLFuIG9sYXJhayBrdWxsYW7EsWxhbiBiYcWfbMSxayIKLQotbXNnaWQgImFydGlzdCIKLW1zZ3N0ciAic2FuYXTDp8SxIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJrYXnEsXR0YW4gc29ydW1sdSBvbGFuIGtpxZ9pIHlhIGRhIGtpxZ9pbGVyIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICJzYW5hdMOnxLEgc8SxcmFsYW1hZMSxIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJzxLFyYWxhbWEgYW1hw6dsxLEga2F5xLF0dGFuIHNvcnVtbHUga2nFn2kobGVyKSIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICJhbGLDvG0iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAiYnUgYmlsZ2l5aSBpw6dlcmVuIGFsYsO8bSIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICJhbGLDvG0gc8SxcmFsYW1hIGFkxLEiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAic8SxcmFsYW1hIGFtYcOnbMSxIGJ1IHZlcmlsZXJpIGnDp2VyZW4gYWxiw7xtIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJhbGLDvG0gc2FuYXTDp8Sxc8SxIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJHZXJla3RpxJ9pIGdpYmkgZ8O2c3RlcmlsZW4gdMO8bSBhbGLDvG1sZXJpbiBzYW5hdMOnxLFsYXLEsSIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAiYWxiw7xtIHNhbmF0w6fEsWxhcsSxIHPEsXJhbGFtYWFkxLEiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIkdlcmVrdGnEn2kgZ2liaSBzxLFyYWxhbmFuIHTDvG0gYWxiw7xtbGVyaW4gc2FuYXTDp8SxbGFyxLEiCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICJ0YXJpaCIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAidGFyaWggdmVyaXNpIG9sdcWfdHVydWxkdSAoYmlyIEdEYXRlIHlhcMSxc8SxIG9sYXJhaykiCi0KLW1zZ2lkICJkYXRldGltZSIKLW1zZ3N0ciAidGFyaWhzYWF0IgotCi1tc2dpZCAiZGF0ZSBhbmQgdGltZSB0aGUgZGF0YSB3YXMgY3JlYXRlZCAoYXMgYSBHc3REYXRlVGltZSBzdHJ1Y3R1cmUpIgotbXNnc3RyICJ0YXJpaCB2ZSBzYWF0IHZlcmlzaSBvbHXFn3R1cnVsZHUgKGJpciBHc3REYXRlVGltZSB5YXDEsXPEsSBvbGFyYWspIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgInTDvHIiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAiYnUgdmVyaW5pbiBhaXQgb2xkdcSfdSB0w7xyIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAieW9ydW0iCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSIKLW1zZ3N0ciAidmVyaXlpIHlvcnVtbGF5YW4gc2VyYmVzdCBtZXRpbiIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImdlbmnFn2xldGlsbWnFnyB5b3J1bSIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKLW1zZ3N0ciAiYW5haHRhcj1kZWdlciB5YSBkYSBhbmFodGFyW2VuXT15b3J1bSBiacOnaW1pbmRla2kgbWV0aW4geW9ydW1sYW1hIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICJwYXLDp2EgbnVtYXJhc8SxIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgImtvbGxla3NpeW9uIGnDp2luZGVraSBwYXLDp2EgbnVtYXJhc8SxIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgInBhcsOnYSBzYXnEsXPEsSIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImJ1IHBhcsOnYW7EsW4gYWl0IG9sZHXEn3Uga29sbGVrc2l5b251biBwYXLDp2Egc2F5xLFzxLEiCi0KLW1zZ2lkICJkaXNjIG51bWJlciIKLW1zZ3N0ciAiZGlzayBudW1hcmFzxLEiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJrb2xsZWtzaXlvbiBpw6dpbmRla2kgZGlzayBudW1hcmFzxLEiCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICJkaXNrIHNhecSxc8SxIgotCi1tc2dpZCAiY291bnQgb2YgZGlzY3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyBkaXNjIGJlbG9uZ3MgdG8iCi1tc2dzdHIgImJ1IGRpc2tpbiBhaXQgb2xkdcSfdSBrb2xsZWtzaXlvbmRha2kgZGlza2xlcmluIHNhecSxc8SxIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgImtvbnVtIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJVUkkgb2xhcmFrIG9ydGFtIGtheW5hxJ/EsSAoZG9zeWFuxLFuIMO2emfDvG4ga29udW11IHlhIGRhIGFrxLHFn8SxbiBiYXLEsW5kxLFyxLFsZMSxxJ/EsSAiCi0ia29udW0pIgotCi1tc2dpZCAiaG9tZXBhZ2UiCi1tc2dzdHIgImFuYXNheWZhIgotCi1tc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKLW1zZ3N0ciAiQnUgb3J0YW3EsW4gYW5hc2F5ZmFzxLEgKHlhbmkgc2FuYXTDp8SxIHlhIGRhIGZpbG0gYW5hc2F5ZmFzxLEpIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgInRhbsSxbSIKLQotbXNnaWQgInNob3J0IHRleHQgZGVzY3JpYmluZyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAidmVyaW5pbiBpw6dlcmnEn2luaSB0YW7EsW1sYXlhbiBrxLFzYSBtZXRpbiIKLQotbXNnaWQgInZlcnNpb24iCi1tc2dzdHIgInPDvHLDvG0iCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAiYnUgdmVyaW5pbiBzw7xyw7xtw7wiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0iVWx1c2xhcmFyYXPEsSBTdGFuZGFydCBLYXnEsXQgS29kdSAtIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8gYWRyZXNpbmUgYmFrxLFuIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJrdXJ1bSIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAidGVsaWYgaGFra8SxIgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAidmVyaW5pbiB0ZWxpZiBoYWtrxLEgbm90dSIKLQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgInRlbGlmIGhha2vEsSB1cmkiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlZlcmluaW4gdGVsaWYgaGFra8SxIGJpbGRpcmltaSBpw6dpbiBVUkkiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICJrb2RsYXlhbiIKLQotbXNnaWQgIm5hbWUgb2YgdGhlIGVuY29kaW5nIHBlcnNvbiBvciBvcmdhbml6YXRpb24iCi1tc2dzdHIgImtvZGxheWFuIGtpxZ9pIHlhIGRhIG9yZ2FuaXphc3lvbnVuIGFkxLEiCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICJpbGV0acWfaW0iCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICJpbGV0acWfaW0gYmlsZ2lzaSIKLQotbXNnaWQgImxpY2Vuc2UiCi1tc2dzdHIgImxpc2FucyIKLQotbXNnaWQgImxpY2Vuc2Ugb2YgZGF0YSIKLW1zZ3N0ciAidmVyaW5pbiBsaXNhbnPEsSIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJsaXNhbnMgdXJpIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJWZXJpbmluIGxpc2Fuc8SxIGnDp2luIFVSSSIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAiaWNyYSBlZGVuIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgImljcmEgZWRlbiBracWfaSIKLQotbXNnaWQgImNvbXBvc2VyIgotbXNnc3RyICJkw7x6ZW5sZXlpY2kiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgImthecSxdCBvbHXFn3R1cmFuIGtpxZ9pKGxlcikiCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgInPDvHJlIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgIkdTdHJlYW1lciB6YW1hbiBiaXJpbWkgKG5hbm8gc2FuaXllKSBvbGFyYWsgdXp1bmx1ayIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICJrb2RlayIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAidmVyaW5pbiBzYWtsYW5kxLHEn8SxIGtvZGVrIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgInZpZGVvIGtvZGVraSIKLQotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAidmlkZW9udW4gc2FrbGFuZMSxxJ/EsSBrb2RlayIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJzZXMga29kZWtpIgotCi1tc2dpZCAiY29kZWMgdGhlIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJzZXMgdmVyaXNpbmluIHNha2xhbmTEscSfxLEga29kZWsiCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAiYWx0eWF6xLEga29kbGF5xLFjxLEta29kIMOnw7Z6w7xjw7xzw7wiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImFsdHlhesSxIHZlcmlzaW5pbiBzYWtsYW5kxLHEn8SxIGtvZGxhecSxY8SxLWtvZCDDp8O2esO8Y8O8IgotCi1tc2dpZCAiY29udGFpbmVyIGZvcm1hdCIKLW1zZ3N0ciAia2FwIGJpw6dpbWkiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAidmVyaWxlcmluIHNha2xhbmTEscSfxLEga2FwIGJpw6dlbWkiCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICLDtnJuZWtsZW1lIGjEsXrEsSIKLQotbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgImJpdC9zIG9sYXJhayBvcnRhbGFtYSB2ZXlhIGtlc2luIMO2cm5la2xlbWUgaMSxesSxIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICJub21pbmFsIMO2cm5la2xlbWUgaMSxesSxIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiYml0L3Mgb2xhcmFrIG5vbWluYWwgw7ZybmVrbGVtZSBoxLF6xLEiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUiCi1tc2dzdHIgImFzZ2FyaSDDtnJuZWtsZW1lIGjEsXrEsSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgImJpdC9zIG9sYXJhayBhc2dhcmkgw7ZybmVrbGVtZSBoxLF6xLEiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgImF6YW1pIMO2cm5la2xlbWUgaMSxesSxIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiYml0L3Mgb2xhcmFrIGF6YW1pIMO2cm5la2xlbWUgaMSxesSxIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAia29kbGF5xLFjxLEiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJidSBha8SxbcSxIGtvZGxhcmtlbiBrdWxsYW7EsWxhY2FrIGtvZGxhecSxY8SxIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICJrb2RsYXnEsWPEsSBzw7xyw7xtw7wiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJidSBha8SxbcSxIGtvZGxhcmtlbiBrdWxsYW7EsWxhbiBrb2RsYXnEsWPEsW7EsW4gc8O8csO8bcO8IgotCi1tc2dpZCAic2VyaWFsIgotbXNnc3RyICJzZXJpIG51bWFyYXPEsSIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgInBhcsOnYW7EsW4gc2VyaSBudW1hcmFzxLEiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgInRla3JhcmthemFuw6cgcGFyw6dhIGthemFuY8SxIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAiZGIgb2xhcmFrIHBhcsOnYSBrYXphbmPEsSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAidGVrcmFya2F6YW7DpyBwYXLDp2Egw7xzdCBzxLFuxLFyxLEiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAicGFyw6dhbsSxbiDDvHN0IHPEsW7EsXLEsSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAidGVrcmFya2F6YW7DpyBhbGLDvG0ga2F6YW5jxLEiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICJkYiBvbGFyYWsgYWxiw7xtIGthemFuY8SxIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJ0ZWtyYXJrYXphbsOnIGFsYsO8bSDDvHN0IHPEsW7EsXLEsSIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICJhbGLDvG0gw7xzdCBzxLFuxLFyxLEiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAieWVuaWRlbiBrYXphbsOnIGtheW5hayBzZXZpeWVzaSIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgIsWfYXJrxLEgdmUgYWxiw7xtIGthemFuw6cgZGXEn2VybGVyaW5pbiBrYXluYWsgc2V2aXllc2kiCi0KLW1zZ2lkICJsYW5ndWFnZSBjb2RlIgotbXNnc3RyICJkaWwga29kdSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgImJ1IGFrxLHFnyBpw6dpbiBJU08tNjM5LTEgeWEgZGEgSVNPLTYzOS0yIHN0YW5kYXJ0bGFyxLFuYSB1eWd1biBkaWwga29kdSIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgImRpbCBhZMSxIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgImJ1IGFrxLHFn3Rha2kgZGlsaW4gc2VyYmVzdCBiacOnZW0gYWTEsSIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICJnw7Zyw7xudMO8IgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiYnUgYWvEscWfIGlsZSBpbGnFn2tpbGkgZ8O2csO8bnTDvCIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAiZ8O2csO8bnTDvHnDvCDDtm5pemxlIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJidSBha8SxxZ8gaWxlIGlsacWfa2lsaSBnw7Zyw7xudMO8ecO8IMO2bml6bGUiCi0KLW1zZ2lkICJhdHRhY2htZW50IgotbXNnc3RyICJlayIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgImJ1IGFrxLHFn2EgZG9zeWEgZWtsZW5kaSIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgImRha2lrYWRha2kgdnVydcWfIgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgInNlc3RlIGRha2lrYWRha2kgdnVydcWfIHNhecSxc8SxIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgImFuYWh0YXIgc8O2emPDvGtsZXIiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAiacOnZXJpxJ9pIHRhbsSxbWxheWFuIHZpcmfDvGxsZSBheXLEsWxtxLHFnyBhbmFodGFyIHPDtnpjw7xrbGVyIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgImNvxJ9yYWZpIGtvbnVtIGFkxLEiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAib3J0YW3EsW4ga2F5ZGVkaWxkacSfaSB5YSBkYSDDvHJldGlsZGnEn2kgb2t1bmFiaWxpciBhw6fEsWtsYXnEsWPEsSBrb251bSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAiY2/En3JhZmkga29udW0gZW5sZW1pIgotCi1tc2dpZCAiIgotImdlbyBsYXRpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBlcXVhdG9yLCBuZWdhdGl2ZSB2YWx1ZXMgZm9yICIKLSJzb3V0aGVybiBsYXRpdHVkZXMpIgotbXNnc3RyICIiCi0iV0dTODQgeWVybGVtIGRlcmVjZXNpbmRlIChla3ZhdG9yZGEgc8SxZsSxciwgZ8O8bmV5IGVubGVtbGVyIGnDp2luIG5lZ2F0aWYgIgotImRlxJ9lcmxlcikgw7xyZXRpbGVuIHlhIGRhIGtheWRlZGlsZW4gb3J0YW3EsW4gY2/En3JhZmlrIGVubGVtIGtvbnVtdSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgImNvxJ9yYWZpIGtvbnVtIGJveWxhbcSxIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotIldHUzg0IHllcmxlbSBkZXJlY2VzaW5kZSAoR3JlZW53aWNoL1VLIGJhxZ8gbWVyaWR5ZW5pbmRlIHPEsWbEsXIsICBiYXTEsSAiCi0iYm95bGFtbGFyxLEgacOnaW4gbmVnYXRpZiBkZcSfZXJsZXIpIMO8cmV0aWxlbiB5YSBkYSBrYXlkZWRpbGVuIG9ydGFtxLFuIGNvxJ9yYWZpayAiCi0iYm95bGFtIGtvbnVtdSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBlbGV2YXRpb24iCi1tc2dzdHIgImNvxJ9yYWZpIGtvbnVtIHnDvGtzZWtsacSfaSIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSJXR1M4NCB5ZXJsZW0gw7Zsw6fDvHPDvG5kZSAob3J0YWxhbWEgZGVuaXogc2V2aXllc2kgc8SxZsSxcmTEsXIpIMO8cmV0aWxlbiB5YSBkYSAiCi0ia2F5ZGVkaWxlbiBvcnRhbcSxbiBjb8SfcmFmaWsgecO8a3Nla2xpxJ9pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgIsO8bGtlIGNvxJ9yYWZpIGtvbnVtdSIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICJvcnRhbcSxbiDDvHJldGlsZGnEn2kgeWEgZGEga2F5ZGVkaWxkacSfaSDDvGxrZSAoaW5naWxpemNlIGFkxLEpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgIsWfZWhpciBjb8SfcmFmaSBrb251bXUiCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAib3J0YW3EsW4ga2F5ZGVkaWxkacSfaSB5YSBkYSDDvHJldGlsZGnEn2kgxZ9laGlyIChpbmdpbGl6Y2UgYWTEsSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCi1tc2dzdHIgImLDtmxnZSBjb8SfcmFmaSBrb251bXUiCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotIm9ydGFtxLFuIMO8cmV0aWxkacSfaSB5YSBkYSBvbHXFn3R1cnVsZHXEn3UgxZ9laGlyZGVraSBiaXIga29udW0gKMO2cm5lxJ9pbiBzZW10KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJjb8SfcmFmaSB5YXRheSBrb251bSBoYXRhc8SxIgotCi1tc2dpZCAiZXhwZWN0ZWQgZXJyb3Igb2YgdGhlIGhvcml6b250YWwgcG9zaXRpb25pbmcgbWVhc3VyZXMgKGluIG1ldGVycykiCi1tc2dzdHIgInlhdGF5IGtvbnVtbGFuZMSxcm1hIMO2bMOnw7xtbGVyaW5kZSBiZWtsZW5lbiBoYXRhIChtZXRyZSBjaW5zaW5kZW4pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IHNwZWVkIgotbXNnc3RyICJjb8SfcmFmaSBrb251bSBoYXJla2V0IGjEsXrEsSIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAieWFrYWxhbWEgYXlnxLF0xLFuxLFuIG0vcyBjaW5zaW5kZW4geWFrYWxhbWEgeWFwYXJrZW4ga2kgaGFyZWtldCBoxLF6xLEiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJjb8SfcmFmaSBrb251bSBoYXJla2V0IGRvxJ9ydWx0dXN1IgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iQmlyIG1lZHlhZGEgeWFrYWxhbWEgeWFwYW4gYXlnxLF0xLFuIGhhcmFrZXQgecO2bsO8bsO8IGJlbGlydGlyLiBLYXlhbiBub2t0YWzEsSAiCi0ic2F5xLEgb2xhcmFrLCBkZXJlY2UgYmnDp2ltaW5kZSBnw7ZzdGVyaWxpciwgMCDDp2/En3JhZmlrIGt1emV5ZGlyIHZlIHNhYXQgIgotInnDtm7DvG5kZSBiZWxpcnRpbGlyIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJjb8SfcmFmaSBrb251bSB5YWthbGFtYSBhw6fEsWtsYW1hc8SxIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iQmlyIG1lZHlhIHlha2FsYW7EsXJrZW4gacWfYXJldCBlZGlsZW4gYXlnxLF0xLFuIHnDtm7DvG7DvCBiZWxpcnRpci4gS2F5YW4gbm9rdGFsxLEgIgotInNhecSxIG9sYXJhaywgZGVyZWNlIGJpw6dpbWluZGUgZ8O2c3RlcmlsaXIsIDAgw6dvxJ9yYWZpayBrdXpleWRpciB2ZSBzYWF0ICIKLSJ5w7Zuw7xuZGUgYmVsaXJ0aWxpciIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lJyBoZXJlCi1tc2dpZCAic2hvdyBuYW1lIgotbXNnc3RyICJhZMSxIGfDtnN0ZXIiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICJPcnRhbcSxbiB0di9wb2RjYXN0L3NlcmllIGRlbiBiaXJpc2luaW4gYWTEsSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAic8SxcmFsYW1hYWTEsW7EsSBnw7ZzdGVyIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJPcnRhbcSxbiB0di9wb2RjYXN0L3NlcmllIGRlbiBiaXJpc2luaW4gYWTEsSwgc8SxcmFsYW1hIGnDp2luIgotCi1tc2dpZCAiZXBpc29kZSBudW1iZXIiCi1tc2dzdHIgImLDtmzDvG0gbnVtYXJhc8SxIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIk9ydGFtxLFuIHBhcsOnYXPEsSBvbGR1xJ91IHNlem9udW4gYsO2bMO8bSBudW1hcmFzxLEiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJvdHVydW0gbnVtYXJhc8SxIgotCi1tc2dpZCAiVGhlIHNlYXNvbiBudW1iZXIgb2YgdGhlIHNob3cgdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIk9ydGFtxLFuIHBhcsOnYXPEsSBvbGR1xJ91IHNlem9uIG51bWFyYXPEsSIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAixZ9hcmvEsSBzw7Z6bGVyaSIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAiT3J0YW3EsW4gxZ9hcmvEsSBzw7Z6bGVyaSwgZ2VuZWxsaWtsZSDFn2Fya8SxbGFyIGnDp2luIGt1bGxhbsSxbMSxciIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJiZXN0ZWNpIHPEsXJhbGFtYSBhZMSxIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAic8SxcmFsYW1hIGFtYcOnbMSxIGthecSxdCBvbHXFn3R1cmFuIGtpxZ9pKGxlcikiCi0KLW1zZ2lkICJncm91cGluZyIKLW1zZ3N0ciAiZ3J1cGxhbmTEsXJtYSIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotIkdydXAgaWxnaWxpIG9ydGFtIMOnb2tsdSDFn2Fya8SxbGFyIGnDp2VyaXIsIGJpciBrb27Dp2VydG9udW4gZmFya2zEsSBwYXLDp2FsYXLEsSAiCi0iZ2liaS4gQnUgxZ9hcmvEsWRhbiBkYWhhIMO8c3Qgc2V2aXllZGlyIGFuY2FrIGFsYsO8bWRlbiBhbHQgc2V2aXllZGlyIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgImt1bGxhbsSxY8SxIGRlxJ9lcmxlbmRpcm1lc2kiCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIkt1bGxhbsSxY8SxIHRhcmFmxLFuZGFuIHZlcmlsbWnFnyBwdWFubGFtYS4gRW4gecO8a3NlayBwdWFubGFtYSwgYmlyIMOnb2sgIgotImt1bGxhbsSxY8SxIGJ1IG9ydGFtxLEgYmXEn2VubWnFnyIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgImF5Z8SxdCDDvHJldGljaXNpIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiQnUgb3J0YW3EsSBvbHXFn3R1cm1hayBpw6dpbiBrdWxsYW7EsWxhbiBheWfEsXQgw7xyZXRpY2lzaSIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAiYXlnxLF0IG1vZGVsaSIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiQnUgb3J0YW3EsSBvbHXFn3R1cm1hayBpw6dpbiBrdWxsYW7EsWxhbiBheWfEsXTEsW4gbW9kZWxpIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAidXlndWxhbWEgYWTEsSIKLQotbXNnaWQgIkFwcGxpY2F0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSIKLW1zZ3N0ciAiQnUgb3J0YW3EsSBvbHXFn3R1cm1hayBpw6dpbiBrdWxsYW7EsWxhbiB1eWd1bGFtYSIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgInV5Z3VsYW1hIHZlcmlsZXJpIgotCi1tc2dpZCAiQXJiaXRyYXJ5IGFwcGxpY2F0aW9uIGRhdGEgdG8gYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBtZWRpYSIKLW1zZ3N0ciAiT3J0YW1kYSBzZXJpbGXFn3RpcmlsZWNlayBnZWxpxZ9pZ8O8emVsIHV5Z3VsYW1hIHZlcmlsZXJpIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgImfDtnLDvG50w7wgecO2bsO8IgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICJHw7Zyw7xudMO8IGfDtnN0ZXJpbG1lZGVuIMO2bmNlIG5hc8SxbCBkw7ZuZMO8csO8bG1lbGlkaXIgeWEgZGEgw6dldmlyaWxtZWxpZGlyIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICJ5YXnEsW1jxLEiCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgIk1hcmthIHlhIGRhIHlhecSxbWPEsW7EsW4gYWTEsSIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICJ0YXJhZsSxbmRhbi15b3J1bWxhbm3EscWfIgotCi1tc2dpZCAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlb3BsZSBiZWhpbmQgYSByZW1peCBhbmQgc2ltaWxhciBpbnRlcnByZXRhdGlvbnMiCi1tc2dzdHIgIlllbmlkZW4gZMO8emVubGVtZSB2ZSBiZW56ZXIgeW9ydW1sYXLEsW4gYXJrYXPEsW5kYWtpIGtpxZ9pIGhha2vEsW5kYSBiaWxnaSIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICJtaWRpLWJhc2Utbm90ZSIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiU2VzIGtheWTEsW7EsW4gbWlkaSBub3R1IG51bWFyYXPEsS4iCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIiVzIHByb3Rva29sw7wgacOnaW4gVVJJIGnFn2xleWljaXNpIGJ1bHVuYW1hZMSxIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICJVUkkgxZ9lbWEgJyVzJyBkZXN0ZWtsZW5tZXoiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAiSEFUQTogJXMgw7bEn2VzaW5kZW46ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0iRWsgaGF0YSBhecSxa2xhbWEgYmlsZ2lzaTpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgImJhxJ9sYW50xLEga2F5bmHEn8SxIHlvayBbYWzEsWPEsT0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc2luayBbc291cmNlPSVzQCVwXSIKLW1zZ3N0ciAiYmHEn2xhbnTEsSBhbMSxxZ8gbm9rdGFzxLEgeW9rIFtrYXluYWs9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiXCIlMiRzXCIgw7bEn2VzaW5kZSBcIiUxJHNcIiDDtnplbGxpxJ9pIHlvayIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIlwiJTIkc1wiIMO2xJ9lc2luZGVraSBcIiUxJHNcIiDDtnplbGxpxJ9pbmUgXCIlMyRzXCIgZGXEn2VyaSBhdGFuYW1hZMSxIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAiJXMsICVzJ2EgYmHEn2xhbmFtYWTEsSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAiXCIlc1wiIMO2xJ9lc2kgeW9rIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJiZWtsZW5tZXllbiBrYXluYWsgXCIlc1wiIC0geW9rc2F5xLFsxLF5b3IiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJiZWtsZW5tZWRpayBkb2xndS1rYXluYcSfxLEgXCIlc1wiIC0geW9rc2F5xLFsxLF5b3IiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHBhcnNlIGNhcHMgXCIlc1wiIgotbXNnc3RyICJcIiVzXCIga2FiaWxpeWV0bGVyaSBheXLEscWfdMSxcsSxbGFtYWTEsSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgIlwiJXNcIiBVUkknc2kgacOnaW4gJ3NpbmsnIMO2xJ9lc2kgeW9rIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNvdXJjZSBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJcIiVzXCIgVVJJJ3NpIGnDp2luIGtheW5hayDDtsSfZXNpIHlvayIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAic8O2eiBkaXppbSBoYXRhc8SxIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInNwZWNpZmllZCBlbXB0eSBiaW4gXCIlc1wiLCBub3QgYWxsb3dlZCIKLW1zZ3N0ciAiYmVsaXJ0aWxlbiBib8WfIGlraWxpIFwiJXNcIiwgaXppbiB2ZXJpbG1lZGkiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICJcIiVzXCIgaWtpbGlzaSB5b2ssIMO2Z2UgYcOnxLFsYW3EsXlvciIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICJib8WfIGJvcnVoYXR0xLFuYSBpemluIHZlcmlsbWl5b3IiCi0KLW1zZ2lkICJBIGxvdCBvZiBidWZmZXJzIGFyZSBiZWluZyBkcm9wcGVkLiIKLW1zZ3N0ciAiVGFtcG9uIGJlbGxla2xlcmluIGJpciDDp2/En3UgYsSxcmFrxLFsxLF5b3IuIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IHByb2JsZW0uIgotbXNnc3RyICLEsMOnIHZlcmkgYWvEscWfIHNvcnVudS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICLEsMOnIHZlcmkgYWvEscWfIGhhdGFzxLEuIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICLEsMOnIHNhYXQgaGF0YXPEsS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIlRhbXBvbiBlxZ9sZcWfdGlybWUgYmHFn2FyxLFzxLF6LiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICJCw7x5w7xrIGhhcmZsZXJpIHPDvHoiCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIsSwemluIHZlcmlsZW4geWV0ZW5la2xlcmkga8Sxc8SxdGxhIChOVUxMIEjEsMOHIGFubGFtxLFuYSBnZWxpcikuIEJ1IMO2emVsbGlrbGVyaW4gIgotImF5YXJsYW5tYXPEsSB2ZXJpbGVuIEdzdENhcHMgbmVzbmVzaW5pIGtheW5hayBvbGFyYWsgYWzEsXIuIgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAiR2XDp2ljaSBkaXppbiBiZWxpcnRpbG1lZGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkdlw6dpY2kgZG9zeWEgXCIlc1wiIG9sdcWfdHVydWxhbWFkxLEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiXCIlc1wiIGRvc3lhc8SxIG9rdW1hIGnDp2luIGHDp8SxbGFtYWTEsS4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICJEb3N5YSBpbmRpcm1layBpw6dpbiB5YXphcmtlbiBoYXRhLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHdyaXRpbmcuIgotbXNnc3RyICJZYXrEsW0gacOnaW4gaGnDpyBiaXIgZG9zeWEgYWTEsSBiZWxpcnRpbG1lZGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiXCIlc1wiIGRvc3lhc8SxIHlhesSxbSBpw6dpbiBhw6fEsWxhbWFkxLEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICJcIiVzXCIga2FwYXTEsWzEsXJrZW4gaGF0YS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgc2Vla2luZyBpbiBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIlwiJXNcIiBkb3N5YXPEsW5kYSBhcmFtYSB5YXBhcmtlbiBoYXRhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiXCIlc1wiIGRvc3lhc8SxIHlhesSxbMSxcmtlbiBoYXRhLiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICJPa3VtYSBpw6dpbiBoacOnIGJpciBkb3N5YSBhZMSxIGJlbGlydGlsbWVkaS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIlwiJXNcIiDDtmdlc2luZGVuIGJpbGdpIGFsxLFuYW1hZMSxLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICJcIiVzXCIgYmlyIGRpemluZGlyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGaWxlIFwiJXNcIiBpcyBhIHNvY2tldC4iCi1tc2dzdHIgIkRvc3lhIFwiJXNcIiBiaXIgc29rZXR0aXIuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAixLBzdGVuaWxkacSfaSBnaWJpIHRla3JhcmxhbWEgYmHFn2FyxLFzxLF6IG9sZHUuIgotCi1tc2dpZCAiY2FwcyIKLW1zZ3N0ciAia2FiaWxpeWV0bGVyIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAiYWvEsW1kYSB0ZXNiaXQgZWRpbGVuIGthYmlsaXlldGxlciIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgImFzZ2FyaSIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgImthcGFzaXRleWkgem9ybGEiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAiYmlyIHTDvHIgdGFuxLFtbGFtYXPEsSB5YXBtYWRhbiBrYXBhc2l0ZXlpIHpvcmxhIgotCi0jLCBmdXp6eQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJBa8SxxZ8gaGnDp2JpciB2ZXJpIGnDp2VybWl5b3IuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJBa8SxxZ8gaGnDp2JpciB2ZXJpIGnDp2VybWl5b3IuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiR2Vyw6dla2xlbm1pxZ8gQXJhecO8emxlcjpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICJva3VuYWJpbGlyIgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgInlhesSxbGFiaWxpciIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAiecO2bmVsdGlsZWJpbGlyIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgIkJPxZ4sIEhBWklSLCBEVVJEVVJVTE1VxZ4geWEgZGEgWcOcUsOcVMOcTMOcWU9SIGR1cnVtbGFyxLFuYSBkZcSfacWfdGlyaWxlYmlsaXIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICJzYWRlY2UgTlVMTCwgUkVBRFkgeWEgZGEgUEFVU0VEIG9sYXJhayBkZcSfacWfdGlyaWxlYmlsaXIiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAic2FkZWNlIE5VTEwgeWEgZGEgUkVBRFkgb2xhcmFrIGRlxJ9pxZ90aXJpbGViaWxpciIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAiS2FyYSBsaXN0ZXllIGFsxLFuYW4gZG9zeWFsYXI6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAiVG9wbGFtIHNhecSxOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkIGthcmEgbGlzdGV5ZSBhbMSxbmFuIGRvc3lhIgotbXNnc3RyWzFdICIlZCBrYXJhIGxpc3RleWUgYWzEsW5hbiBkb3N5YSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIGVrbGVudGlzaSIKLW1zZ3N0clsxXSAiJWQgZWtsZW50aXNpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkIGthcmEgbGlzdGUgZ2lyZGlzaSIKLW1zZ3N0clsxXSAiJWQga2FyYSBsaXN0ZSBnaXJkaXNpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGZlYXR1cmUiCi1tc2dpZF9wbHVyYWwgIiVkIGZlYXR1cmVzIgotbXNnc3RyWzBdICIlZCDDtnplbGxpxJ9pIgotbXNnc3RyWzFdICIlZCDDtnplbGxpxJ9pIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJCw7x0w7xuIMO2Z2VsZXJpIHlhemTEsXIiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICJLYXJhIGxpc3RleWUgYWzEsW5txLHFnyBkb3N5YWxhcsSxbiBsaXN0ZXNpbmkgeWF6ZMSxciIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iQmVsaXJ0aWxlbiBla2xlbnRpIHlhIGRhIHNhxJ9sYW5hbiBiw7x0w7xuIGVrbGVudGlsZXJpbiDDtnplbGxpa2xlcmluaW4gbWFraW5lLSIKLSLDp8O2esO8bWxlbmViaWxpciBiaXIgbGlzdGVzaW5pIHlhemTEsXIuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFyaWNpIG90b21hdGlrIGVrbGVudGkga3VydWx1bSAiCi0idGVrbmnEn2kgaWxlIGJhxJ9sYW50xLFkYSBmYXlkYWzEsSIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiRWtsZW50aSBpw6dlcmlrbGVyaW5pIGxpc3RlbGUiCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiQmVsaXJ0aWxlbiDDtmdlIHlhIGRhIGVrbGVudGluaW4gdmFyIG9sdXAgb2xtYWTEscSfxLFuxLEga29udHJvbCBldCIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIiIKLSJCaXIgw7ZnZSB5YSBkYSBla2xlbnRpbmluIHZhciBvbHVwIG9sbWFkxLHEn8SxbsSxIGtvbnRyb2wgZXR0acSfaW5pemRlIGF5csSxY2EgIgotIm9ubGFyxLFuIGJlbGlydGlsZW4gZW4gc29uIHZlcnNpeW9uZGEgb2x1cCBvbG1hZMSxa2xhcsSxbsSxIGRhIGtvbnRyb2wgZWRpbiIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAiRGVzdGVrbGVuZW4gVVJJIMWfZW1hbGFyxLFuxLEgb25sYXJhIHV5Z3VsYW5hbiDDtmdlbGVybGUgeWF6ZMSxciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmlsZTogJXNcbiIKLW1zZ3N0ciAiRWtsZW50aSBkb3N5YXPEsSB5w7xrbGVuZW1lZGk6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIkLDtnlsZSBiaXIgw7ZnZSB5YSBkYSAnJXMnIGVrbGVudGlzaSB5b2tcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIkRpemluIGlzdGF0aXN0aWtsZXJpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAiIyV1IGlsZXRpc2kgXCIlc1wiIMO2Z2VzaW5kZW4gYWzEsW5kxLEgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICIjJXUgaWxldGlzaSBkb2xndSBcIiVzOiVzXCIgKCVzKSDDvHplcmluZGVuIGFsxLFuZMSxOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIiMldSBpbGV0aXNpIFwiJXNcIiBuZXNuZXNpbmRlbiBhbMSxbmTEsSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAixLBsZXRpICMldSBhbMSxbmTEsSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJcIiVzXCIgw7ZnZXNpbmRlbiBnZWxlbiBFT1MuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRVTEsEtFVCBCVUxVTkRVICAgICAgOiBcIiVzXCIgw7bEn2VzaSB0YXJhZsSxbmRhbiBidWx1bmR1LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAiRVTEsEtFVCBCVUxVTkRVICAgICAgOiBcIiVzOiVzXCIgZG9sZ3VzdSB0YXJhZsSxbmRhbiBidWx1bmR1LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiRVTEsEtFVCBCVUxVTkRVICAgICAgOiBcIiVzXCIgbmVzbmVzaSB0YXJhZsSxbmRhbiBidWx1bmR1LlxuIgotCi1tc2dpZCAiRk9VTkQgVEFHXG4iCi1tc2dzdHIgIkVUxLBLRVQgQlVMVU5EVVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIsSww4fEsE5ERUvEsExFUiBCVUxVTkRVICAgICAgOiBcIiVzXCIgw7ZnZXNpIHRhcmFmxLFuZGFuIGJ1bHVuZHUuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICLEsMOHxLBOREVLxLBMRVIgQlVMVU5EVSAgICAgIDogXCIlc1wiIG5lc25lc2kgdGFyYWbEsW5kYW4gYnVsdW5kdS5cbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICLEsMOHxLBOREVLxLBMRVIgQlVMVU5EVVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJJTkZPOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJCxLBMR8SwOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJVWUFSSTogJXMgw7ZnZXNpbmRlbjogJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJLdWxsYW7EsW0gw7ZuY2VzaSwgw7ZuYmVsbGXEn2UgYWxtYSBpxZ9sZW1pbmluIGJpdG1lc2kgYmVrbGVuaXlvci4uLlxuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBwcm9ncmVzcyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiS3VsbGFuxLFtIMO2bmNlc2ksIGlsZXJsZW1lbmluIGJpdG1lc2kgacOnaW4gYmVrbGVuaXlvci4uLlxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICJ0YW1wb25sYW7EsXlvci4uLiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIiIKLSLDlm5iZWxsZcSfZSBhbG1hIGnFn2xlbWksIFnDnFLDnFTDnEzDnFlPUiBkdXJ1bXUgacOnaW4gYXJkxLHFn8SxayBkw7x6ZW4gYXlhcmxhbWFsYXLEsSAiCi0ieWFwxLFsZMSxIC4uLlxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAiVGFtcG9ubGFtYSwgRFVSQUtMQVQgb2xhcmFrIGF5YXJsYW7EsXlvciAuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgIlllbmlkZW4gZGHEn8SxdMSxbSBnZWNpa21lc2kuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICJEdXJ1bSAlcyBvbGFyYWsgYXlhcmxhbsSxeW9yLCAlcyB0YXJhZsSxbmRhbiBpc3Rlbm1pxZ8uLi5cbiIKLQotbXNnaWQgIkludGVycnVwdDogU3RvcHBpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIktlc21lOiBCb3J1IGhhdHTEsSBkdXJkdXJ1bHV5b3IgLi4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAixLBsZXJsZW1lOiAoJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICJFa3NpayDDtmdlOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICLDlmdlZGVuICclcycgacOnZXJpayBhbMSxbmTEsTogJXM9JXNcbiIKLQotbXNnaWQgIk91dHB1dCB0YWdzIChhbHNvIGtub3duIGFzIG1ldGFkYXRhKSIKLW1zZ3N0ciAiw4fEsWt0xLEgZXRpa2V0bGVyaSAobWV0YWRhdGEgb2xhcmFrIGRhIGJpbGluaXIpIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAixLDDp2luZGVraWxlciDDh8Sxa3TEsXPEsSAoYsO2bMO8bWxlciB2ZSBzw7xyw7xtbGVyaSkiCi0KLW1zZ2lkICJPdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zIgotbXNnc3RyICLDh8Sxa3TEsSBkdXJ1bSBiaWxnaXNpIHZlIMO2emVsbGlrIHV5YXLEsWxhcsSxIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAiSGVyaGFuZ2kgYmlyIGlsZXJsZW1lIGJpbGdpc2kgeWF6ZMSxcm1hecSxbiIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAiw4fEsWt0xLEgaWxldGlsZXJpIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiSGF0YWzEsSBpxZ9sZXRpY2l5aSBrdXJtYSIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiQm9ydSBoYXR0xLEga2FwYXTEsWxtYWRhbiDDtm5jZSBrYXluYWtsYXJkYSBFT1Mgem9ybGEiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIkRpemluIGlzdGF0aXN0aWtsZXJpbmkgdG9wbGEgdmUgeWF6ZMSxciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAiSEFUQTogYm9ydWhhdHTEsSBvbHXFn3R1cnVsYW1hZMSxOiAlcy5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXG4iCi1tc2dzdHIgIkhBVEE6IGJvcnVoYXR0xLEgb2x1xZ90dXJ1bGFtYWTEsS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIlVZQVJJOiBoYXRhbMSxIGJvcnVoYXR0xLE6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgIkhBVEE6ICdwaXBlbGluZScgw7bEn2VzaSBidWx1bmFtYWTEsS5cbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICJEVVJEVVJVTERVIGR1cnVtdSBpw6dpbiBhcmTEscWfxLFrIGTDvHplbiBheWFybGFtYWxhcsSxIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiSEFUQTogQXJkxLHFn8SxayBkw7x6ZW4gZHVyZHVybWF5xLEgaXN0ZW1lei5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90IG5lZWQgUFJFUk9MTCAuLi5cbiIKLW1zZ3N0ciAiQm9ydSBoYXR0xLEgw6dhbMSxxZ/EsXlvciB2ZSBQUkVST0xMIGlodGl5YWPEsSB5b2sgLi4uXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICJCb3J1IGhhdHTEsSBQUkVST0xMSU5HIHlhcMSxeW9yIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJIQVRBOiBib3J1IGhhdHTEsSBrdWxsYW7EsW0gw7ZuY2VzaSB5YXBtYWsgaXN0ZW1peW9yLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICJCb3J1IGhhdHTEsSBQUkVST0xMRUQgLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIkJvcnUgaGF0dMSxIFBMQVlJTkcgb2xhcmFrIGF5YXJsYW7EsXlvciAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiSEFUQTogYm9ydWhhdHTEsSDDp2FsbWFrIGlzdGVtaXlvci5cbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICJLYXBhbm1hZGEgRU9TIGV0a2luIC0gQm9ydSBoYXR0xLFuZGEgRU9TIHpvcmxhbsSxeW9yXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSB3YWl0aW5nIGZvciBFT1MgYWZ0ZXIgRXJyb3JcbiIKLW1zZ3N0ciAiS2FwYW5tYWRhIEVPUyBldGtpbiAtLSBIYXRhZGFuIHNvbnJhIEVPUyBpw6dpbiBiZWtsZW5peW9yXG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAiRU9TIGnDp2luIGJla2xlbml5b3IuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyBhbMSxbmTEsSAtIGJvcnUgaGF0dMSxIGR1cmR1cnVsdXlvci4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIkVPUyBpw6dpbiBiZWtsZW5pcmtlbiBrZXNtZSAtIGJvcnUgaGF0dMSxIGR1cmR1cnVsdXlvci4uLlxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIkFrxLHFnyBzb251IGnDp2luIGJla2xlcmtlbiBiaXIgaGF0YSBvbGR1XG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAiw4dhbMSxxZ90xLFybWEgJSBzb25yYXPEsSBiaXR0aSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIkJvcnUgaGF0dMSxIFJFQURZIG9sYXJhayBheWFybGFuxLF5b3IgLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIkJvcnUgaGF0dMSxIE5VTEwgb2xhcmFrIGF5YXJsYW7EsXlvciAuLi5cbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIkJvcnUgaGF0dMSxIGJvxZ9hbHTEsWzEsXlvciAuLi5cbiIKLQotI34gbXNnaWQgImJpbiIKLSN+IG1zZ3N0ciAiYmluIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICLEsMOnIHZlcmkgYWvEscWfxLEgaGF0YXPEsS4iCi0KLSN+IG1zZ2lkICJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBUWVBFIgotI34gbXNnc3RyICJUw5xSw5xOIGR1cnVtIGJpbGdpc2luaSBnw7ZzdGVybWUiCi0KLSN+IG1zZ2lkICJUWVBFMSxUWVBFMiwuLi4iCi0jfiBtc2dzdHIgIlTDnFIxLFTDnFIyLC4uLiIKLQotI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKLSN+IG1zZ3N0ciAiSMSxemxhbmTEsXLEsWxtxLHFnyBDUFUgacWfbGVtbGVyaW5pIGthcGF0IgotCi0jfiBtc2dpZCAicGF0aCBsaXN0IGZvciBsb2FkaW5nIHBsdWdpbnMgKHNlcGFyYXRlZCBieSAnIgotI34gbXNnc3RyICJla2xlbnRpIHnDvGtsZW1layBpw6dpbiB5b2wgbGlzdGVzaSAoJyBpbGUgYXnEsXLEsWxtxLHFnyIKLQotI34gbXNnaWQgIicpIgotI34gbXNnc3RyICInKSIKLQotI34gbXNnaWQgIlNjaGVkdWxlciB0byB1c2UgKCciCi0jfiBtc2dzdHIgIkt1bGxhbsSxbGFjYWsgemFtYW5sYW5kxLFyxLFjxLEgKCciCi0KLSN+IG1zZ2lkICInIGlzIHRoZSBkZWZhdWx0KSIKLSN+IG1zZ3N0ciAiJyDDtm4gdGFuxLFtbMSxIG9sYW7EsSkiCi0KLSN+IG1zZ2lkICJTQ0hFRFVMRVIiCi0jfiBtc2dzdHIgIlpBTUFOTEFORElSSUNJIgotCi0jfiBtc2dpZCAiUmVnaXN0cnkgdG8gdXNlIgotI34gbXNnc3RyICJLdWxsYW7EsWxhY2FrIGthecSxdCIKLQotI34gbXNnaWQgIlJFR0lTVFJZIgotI34gbXNnc3RyICJLQVlJVCIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZC4gIEZpbGUgYSBidWcuIgotI34gbXNnc3RyICIiCi0jfiAiRGFoaWxpIEdTdHJlYW1lciBoYXRhc8SxOiBkdXJ1bSBkZcSfacWfdGlyaWxlbWVkaS4gIEhhdGEgYmlsZGlyaW1pbmRlICIKLSN+ICJidWx1bnVuLiIKLQotI34gbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2NoZWR1bGVyIHByb2JsZW0uICBGaWxlIGEgYnVnLiIKLSN+IG1zZ3N0ciAiIgotI34gIkRhaGlsaSBHU3RyZWFtZXIgaGF0YXPEsTogemFtYW5sYW5kxLFyxLFjxLEgc29ydW51LiAgSGF0YSBiaWxkaXJpbWluZGUgIgotI34gImJ1bHVudW4uIgotCi0jfiBtc2dpZCAib3JpZ2luYWwgbG9jYXRpb24gb2YgZmlsZSBhcyBhIFVSSSIKLSN+IG1zZ3N0ciAiZG9zeWFuxLFuIFVSSSBvbGFyYWsgw7Z6Z8O8biBrb251bXUiCi0KLSN+IG1zZ2lkICJUaGVyZSBpcyBubyBlbGVtZW50IHByZXNlbnQgdG8gaGFuZGxlIHRoZSBzdHJlYW0ncyBtaW1lIHR5cGUgJXMuIgotI34gbXNnc3RyICJBa8SxbcSxbiAlcyBtaW1lIHTDvHLDvG7DvCBpxZ9sZXllYmlsZWNlayBoacOnIGJpciDDtsSfZSB5b2suIgotCi0jfiBtc2dpZCAibWF4aW11bSIKLSN+IG1zZ3N0ciAiYXphbWkiCi0KLSN+IG1zZ2lkICIiCi0jfiAiY291bGQgbm90IGNvbnZlcnQgXCIlc1wiIHNvIHRoYXQgaXQgZml0cyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi0jfiBtc2dzdHIgIiIKLSN+ICJcIiUxJHNcIiwgXCIlMyRzXCIgw7bEn2VzaW5kZWtpIFwiJTIkc1wiIMO2emVsbGnEn2luaW5lIHV5YWNhayDFn2VraWxkZSAiCi0jfiAiZMO2bsO8xZ90w7xyw7xsZW1lZGkiCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc291cmNlIGVsZW1lbnQiCi0jfiBtc2dzdHIgImtheW5hayDDtsSfZXNpIG9sbWF5YW4gYmHEnyIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzaW5rIGVsZW1lbnQiCi0jfiBtc2dzdHIgIidzaW5rJyDDtsSfZXNpIG9sbWF5YW4gYmHEnyIKLQotI34gbXNnaWQgIm5vIGVsZW1lbnQgdG8gbGluayBVUkkgXCIlc1wiIHRvIgotI34gbXNnc3RyICJcIiVzXCIgVVJJJ3NpbmkgYmVsaXJ0aWxlbmUgYmHEn2xheWFjYWsgw7bEn2UgeW9rOiIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAiXCIlc1wiIFVSSSdzaSBpw6dpbiAnc2luaycgw7bEn2VzaSBiYcSfbGFuYW1hZMSxIgotCi0jfiBtc2dpZCAiU2hvdyBwbHVnaW4gZGV0YWlscyIKLSN+IG1zZ3N0ciAiRWtsZW50aSBkZXRheWxhcsSxbsSxIGfDtnN0ZXIiCi0KLSN+IG1zZ2lkICJTaG93IHNjaGVkdWxlciBkZXRhaWxzIgotI34gbXNnc3RyICJaYW1hbmxhbmTEsXLEsWPEsSBkZXRheWxhcsSxbsSxIGfDtnN0ZXIiCi0KLSN+IG1zZ2lkICIgaXRlcmF0aW9ucyAoc3VtICUiCi0jfiBtc2dzdHIgIiB0ZWtyYXJsYXIgKHRvcGxhbSAlIgotCi0jfiBtc2dpZCAiIG5zLCBhdmVyYWdlICUiCi0jfiBtc2dzdHIgIiBucywgb3J0YWxhbWEgJSIKLQotI34gbXNnaWQgIiBucywgbWluICUiCi0jfiBtc2dzdHIgIiBucywgZGFrICUiCi0KLSN+IG1zZ2lkICIgbnMsIG1heCAlIgotI34gbXNnc3RyICIgbnMsIGVuIGZhemxhICUiCi0KLSN+IG1zZ2lkICIgbnMpLlxuIgotI34gbXNnc3RyICIgbnMpIFxuIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAiS3VsbGFuxLFtOiBnc3QteG1sbGF1bmNoIDxkb3N5YS54bWw+IFsgw7bEn2Uuw7Z6ZWxsaWs9ZGXEn2VyIC4uLiBdXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCi0jfiBtc2dzdHIgIkhBVEE6IHhtbCBkb3N5YXPEsSAnJXMnIGF5csSxxZ90xLFybWFzxLEgYmHFn2FyxLFzxLF6LlxuIgotCi0jfiBtc2dpZCAiRVJST1I6IG5vIHRvcGxldmVsIHBpcGVsaW5lIGVsZW1lbnQgaW4gZmlsZSAnJXMnLlxuIgotI34gbXNnc3RyICJIQVRBOiAnJXMnIGRvc3lhc8SxbmRhIMO8c3Qgc2V2aXllIMO2xJ9lc2kgYnVsdW5hbWFkxLEuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBvbmx5IG9uZSB0b3BsZXZlbCBlbGVtZW50IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuIgotI34gbXNnc3RyICJVWUFSSTogxZ51IGFuZGEgc2FkZWNlIGJpciB0YW5lIMO8c3Qgc2V2aXllIMO2xJ9lc2kgZGVzdGVrbGVuaXlvci4iCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgIkhBVEE6IGtvbXV0IHNhdMSxcsSxIGFyZ8O8bWFuxLEgJWQgYXlyxLHFn3TEsXLEsWxhbWFkxLE6ICVzLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKLSN+IG1zZ3N0ciAiVVlBUkk6ICclcycgaXNpbWxpIMO2xJ9lIGJ1bHVuYW1hZMSxLlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiQm9ydWhhdHTEsW7EsW4geG1sIGJlbGlydGltaW5pIERPU1lBJ3lhIGtheWRldCB2ZSDDp8SxayIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIkRPU1lBIgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiJ2FsbG9jJyB0YWtpYmluaSB5YXpkxLFyIChkZXJsZW1lIHPEsXJhc8SxbmRhIGV0a2lubGXFn3RpcmlsbWnFn3NlKSIKLQotI34gbXNnaWQgIk51bWJlciBvZiB0aW1lcyB0byBpdGVyYXRlIHBpcGVsaW5lIgotI34gbXNnc3RyICJCb3J1aGF0dMSxbsSxbiBrYcOnIGRlZmEgdGVrcmFybGFuYWNhxJ/EsSIKLQotI34gbXNnaWQgIiAgICAgICAgIFRyeWluZyB0byBydW4gYW55d2F5LlxuIgotI34gbXNnc3RyICIgICAgICAgICBHZW5lIGRlIMOnYWzEscWfdMSxcm1hIGRlbmVuaXlvci5cbiIKZGlmZiAtLWdpdCBhL3BvL3VrLmdtbyBiL3BvL3VrLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBiODg0Ny4uMDAwMDAwMAotLS0gYS9wby91ay5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby91ay5wbyBiL3BvL3VrLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTYxNDdiLi4wMDAwMDAwCi0tLSBhL3BvL3VrLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTQwNCArMCwwIEBACi0jIFVrcmFpbmlhbiB0cmFuc2xhdGlvbiB0byBnc3RyZWFtZXIuCi0jIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdHJlYW1lciBwYWNrYWdlLgotIwotIyBNYXhpbSBWLiBEeml1bWFuZW5rbyA8ZHppdW1hbmVua29AZ21haWwuY29tPiwgMjAwNC0yMDA3LgotIyBZdXJpIENob3Jub2l2YW4gPHl1cmNob3JAdWtyLm5ldD4sIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS43LjkwXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDMtMDIgMjI6MDArMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogWXVyaSBDaG9ybm9pdmFuIDx5dXJjaG9yQHVrci5uZXQ+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogVWtyYWluaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXVrQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogdWtcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgotIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKLSJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Lgg0LTQsNC90ZYg0YnQvtC00L4g0LLQtdGA0YHRltGXIEdTdHJlYW1lciIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICLQktCy0LDQttCw0YLQuCDQstGB0ZYg0L/QvtC/0LXRgNC10LTQttC10L3QvdGPINC/0L7QvNC40LvQutCw0LzQuCIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICLQktC40LLQtdGB0YLQuCDQvdCw0Y/QstC90ZYg0LrQsNGC0LXQs9C+0YDRltGXINC00ZbQsNCz0L3QvtGB0YLQuNC60Lgg0ZYg0LfQsNCy0LXRgNGI0LjRgtC4INGA0L7QsdC+0YLRgyIKLQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAiIgotItCi0LjQv9C+0LLQuNC5INGA0ZbQstC10L3RjCDQtNGW0LDQs9C90L7RgdGC0LjQutC4INCy0ZbQtCAxICjQu9C40YjQtSDQv9C+0LzQuNC70LrQuCkg0LTQviA5ICjRg9GB0LUpLCDQsNCx0L4gMCDigJQg0LHQtdC3ICIKLSLQtNGW0LDQs9C90L7RgdGC0LjQutC4IgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgItCg0IbQktCV0J3QrCIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSLQn9C10YDQtdC70ZbQuiDRgNC+0LfQtNGW0LvQtdC90LjRhSDQutC+0LzQvtGOINC/0LDRgCDCq9C90LDQt9Cy0LBf0LrQsNGC0LXQs9C+0YDRltGXOtGA0ZbQstC10L3RjMK7INC00LvRjyDQstGB0YLQsNC90L7QstC70LXQvdC90Y8gIgotItC/0LXQstC90LjRhSDRgNGW0LLQvdGW0LIg0L7QutGA0LXQvNC40Lwg0LrQsNGC0LXQs9C+0YDRltGP0LwuINCf0YDQuNC60LvQsNC0OiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICLQodCf0JjQodCe0JoiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAi0JLQuNC80LrQvdGD0YLQuCDQvtGE0L7RgNC80LvQtdC90L3RjyDQutC+0LvRjNC+0YDQvtC8INC00ZbQsNCz0L3QvtGB0YLQuNGH0L3QuNGFINC/0L7QstGW0LTQvtC80LvQtdC90YwiCi0KLW1zZ2lkICIiCi0iQ2hhbmdlcyBjb2xvcmluZyBtb2RlIG9mIHRoZSBkZWJ1ZyBsb2cuIFBvc3NpYmxlIG1vZGVzOiBvZmYsIG9uLCBkaXNhYmxlLCAiCi0iYXV0bywgdW5peCIKLW1zZ3N0ciAiIgotItCX0LzRltC90LjRgtC4INGA0LXQttC40Lwg0YDQvtC30YTQsNGA0LHQvtCy0YPQstCw0L3QvdGPINC/0L7QstGW0LTQvtC80LvQtdC90Ywg0LTRltCw0LPQvdC+0YHRgtC40YfQvdC+0LPQviDQttGD0YDQvdCw0LvRgy4g0JzQvtC20LvQuNCy0ZYgIgotItGA0LXQttC40LzQuDogb2ZmLCBvbiwgZGlzYWJsZSwgYXV0bywgdW5peCIKLQotbXNnaWQgIkRpc2FibGUgZGVidWdnaW5nIgotbXNnc3RyICLQktC40LzQutC90YPRgtC4INC00ZbQsNCz0L3QvtGB0YLQuNC60YMiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAi0JLQuNC80LrQvdGD0YLQuCDQtNC+0LrQu9Cw0LTQvdGDINC00ZbQsNCz0L3QvtGB0YLQuNC60YMg0LfQsNCy0LDQvdGC0LDQttC10L3QvdGPINC80L7QtNGD0LvRltCyIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAi0KHQv9C40YHQvtC6INGA0L7Qt9C00ZbQu9C10L3QuNGFINC60YDQsNC/0LrQvtGOINC3INC60L7QvNC+0Y4g0YjQu9GP0YXRltCyLCDRj9C60ZYg0LzRltGB0YLRj9GC0Ywg0LzQvtC00YPQu9GWIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgItCo0JvQr9Cl0JgiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0i0J/QtdGA0LXQu9GW0Log0YDQvtC30LTRltC70LXQvdC40YUg0LrQvtC80L7RjiDQvdCw0LfQsiDQvNC+0LTRg9C70ZbQsiwg0YnQviDQv9C+0L/QtdGA0LXQtNC90YzQviDQt9Cw0LLQsNC90YLQsNC20YPRjtGC0YzRgdGPLCAiCi0i0LTQvtC00LDRgtC60L7QstC+INC00L4g0L/QtdGA0LXQu9GW0LrRgywg0Y/QutC40Lkg0LfQsdC10YDRltCz0LDRlNGC0YzRgdGPINGDINC30LzRltC90L3RltC5INC+0YLQvtGH0LXQvdC90Y8gR1NUX1BMVUdJTl9QQVRIIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAi0JzQntCU0KPQm9CGIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAi0JLQuNC80LrQvdGD0YLQuCDQv9C10YDQtdGF0L7Qv9C70LXQvdC90Y8g0L/QvtC80LjQu9C+0Log0YHQtdCz0LzQtdC90YLQsNGG0ZbRlyDQv9GA0Lgg0LfQsNCy0LDQvdGC0LDQttC10L3QvdGWINC80L7QtNGD0LvRltCyIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgItCS0LjQvNC60L3Rg9GC0Lgg0L7QvdC+0LLQu9C10L3QvdGPINGA0LXRlNGB0YLRgNGDIgotCi1tc2dpZCAiRGlzYWJsZSBzcGF3bmluZyBhIGhlbHBlciBwcm9jZXNzIHdoaWxlIHNjYW5uaW5nIHRoZSByZWdpc3RyeSIKLW1zZ3N0ciAi0JLQuNC80LrQvdGD0YLQuCDRgdGC0LLQvtGA0LXQvdC90Y8g0LTQvtC/0L7QvNGW0LbQvdC+0LPQviDQv9GA0L7RhtC10YHRgyDQv9GW0LQg0YfQsNGBINGB0LrQsNC90YPQstCw0L3QvdGPINGA0LXRlNGB0YLRgNGDIgotCi1tc2dpZCAiR1N0cmVhbWVyIE9wdGlvbnMiCi1tc2dzdHIgItCf0LDRgNCw0LzQtdGC0YDQuCBHU3RyZWFtZXIiCi0KLW1zZ2lkICJTaG93IEdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtC4INC/0LDRgNCw0LzQtdGC0YDQuCBHU3RyZWFtZXIiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAi0J3QtdCy0ZbQtNC+0LzQuNC5INC/0LDRgNCw0LzQtdGC0YAiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIGNvcmUgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDQv9C10YDQtdGF0L7Qv9C40LIg0LfQsNCz0LDQu9GM0L3RgyDQv9C+0LzQuNC70LrRgyDQvtGB0L3QvtCy0L3QvtGXINCx0ZbQsdC70ZbQvtGC0LXQutC4LiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZGV2ZWxvcGVycyB3ZXJlIHRvbyBsYXp5IHRvIGFzc2lnbiBhbiBlcnJvciBjb2RlIHRvIHRoaXMgZXJyb3IuIgotbXNnc3RyICLQoNC+0LfRgNC+0LHQvdC40LrQuCBHU3RyZWFtZXIg0L3QtSDQv9GA0LjQt9C90LDRh9C40LvQuCDQutC+0LQg0LTQu9GPINGG0ZbRlNGXINC/0L7QvNC40LvQutC4LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQutC+0LQg0L3QtSDRgNC10LDQu9GW0LfQvtCy0LDQvdC+LiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotItCf0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L3QtSDQstC00LDQu9C+0YHRjyDQt9C80ZbQvdC40YLQuCDRgdGC0LDQvSwg0LTQtdGP0LrQuNC8INC10LvQtdC80LXQvdGC0LDQvCDQvdC1INCy0LTQsNC70L7RgdGPICIKLSLQstC40LLQtdGB0YLQuCDQvdCw0LvQtdC20L3QtSDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8g0L/RgNC+INC/0L7QvNC40LvQutGDINC3INC/0YDQuNGH0LjQvdC+0Y4g0L/QvtC80LjQu9C60LguIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgItCS0L3Rg9GC0YDRltGI0L3RjyDQv9C+0LzQuNC70LrQsCBHU3RyZWFtZXI6INC/0YDQvtCx0LvQtdC80LAg0L3QsNC/0L7QstC90LXQvdC90Y8uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgItCS0L3Rg9GC0YDRltGI0L3RjyDQv9C+0LzQuNC70LrQsCBHU3RyZWFtZXI6INC/0L7QvNC40LvQutCwINC/0L7RgtC+0LrRgyDQstC40LrQvtC90LDQvdC90Y8uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBuZWdvdGlhdGlvbiBwcm9ibGVtLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQv9C+0LzQuNC70LrQsCDQstGB0YLQsNC90L7QstC70LXQvdC90Y8g0LfQsifRj9C30LrRgy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQv9C+0LzQuNC70LrQsCDQv9C+0LTRltGXLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAi0JLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L/QvtC80LjQu9C60LAg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINC/0L7Qt9C40YbRltGXLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY2FwcyBwcm9ibGVtLiIKLW1zZ3N0ciAi0JLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L/RgNC+0LHQu9C10LzQsCDQvNC+0LbQu9C40LLQvtGB0YLQtdC5LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICLQktC90YPRgtGA0ZbRiNC90Y8g0L/QvtC80LjQu9C60LAgR1N0cmVhbWVyOiDQv9C+0LzQuNC70LrQsCDRgyDQvNGW0YLRhtGWLiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgItCjINCy0LDRiNGW0Lkg0LfQsdGW0YDRhtGWIEdTdHJlYW1lciDQstGW0LTRgdGD0YLQvdGW0Lkg0LzQvtC00YPQu9GMLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgItCf0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L/QvtC80LjQu9C60LAg0LPQvtC00LjQvdC90LjQutCwLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICIiCi0i0J/RgNC+0LPRgNCw0LzQsCDQvdCw0LzQsNCz0LDRlNGC0YzRgdGPINCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuCDQstC40LzQutC90LXQvdGDINGE0YPQvdC60YbRltC+0L3QsNC70YzQvdGW0YHRgtGMIEdTdHJlYW1lci4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDQv9C10YDQtdGF0L7Qv9C40LIg0LfQsNCz0LDQu9GM0L3RgyDQv9C+0LzQuNC70LrRgyDQvtGB0L3QvtCy0L3QvtGXINCx0ZbQsdC70ZbQvtGC0LXQutC4INC/0ZbQtNGC0YDQuNC80LrQuC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINGW0L3RltGG0ZbQsNC70ZbQt9GD0LLQsNGC0Lgg0LHRltCx0LvRltC+0YLQtdC60YMg0L/RltC00YLRgNC40LzQutC4LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30LDQutGA0LjRgtC4INCx0ZbQsdC70ZbQvtGC0LXQutGDINC/0ZbQtNGC0YDQuNC80LrQuC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L3QsNC70LDRiNGC0YPQstCw0YLQuCDQsdGW0LHQu9GW0L7RgtC10LrRgyDQv9GW0LTRgtGA0LjQvNC60LguIgotCi1tc2dpZCAiRW5jb2RpbmcgZXJyb3IuIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQutC+0LTRg9Cy0LDQvdC90Y8uIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDQv9C10YDQtdGF0L7Qv9C40LIg0LfQsNCz0LDQu9GM0L3RgyDQv9C+0LzQuNC70LrRgyDRgNC10YHRg9GA0YHRgy4iCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICLQoNC10YHRg9GA0YHRgyDQvdC1INC30L3QsNC50LTQtdC90L4uIgotCi1tc2dpZCAiUmVzb3VyY2UgYnVzeSBvciBub3QgYXZhaWxhYmxlLiIKLW1zZ3N0ciAi0KDQtdGB0YPRgNGBINC30LDQudC90Y/RgtC40Lkg0LDQsdC+INC90LXQtNC+0YHRgtGD0L/QvdC40LkuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0YDQtdGB0YPRgNGBINC00LvRjyDRh9C40YLQsNC90L3Rjy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDRgNC10YHRg9GA0YEg0LTQu9GPINC30LDQv9C40YHRgy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDRgNC10YHRg9GA0YEg0LTQu9GPINGH0LjRgtCw0L3QvdGPINGH0Lgg0LfQsNC/0LjRgdGDLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfQsNC60YDQuNGC0Lgg0YDQtdGB0YPRgNGBLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gcmVzb3VyY2UuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC/0YDQvtGH0LjRgtCw0YLQuCDQtyDRgNC10YHRg9GA0YHRgy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gcmVzb3VyY2UuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30LDQv9C40YHQsNGC0Lgg0YMg0YDQtdGB0YPRgNGBLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBwZXJmb3JtIHNlZWsgb24gcmVzb3VyY2UuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0LjQutC+0L3QsNGC0Lgg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINC/0L7Qt9C40YbRltGXINGDINGA0LXRgdGD0YDRgdGWLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YHQuNC90YXRgNC+0L3RltC30YPQstCw0YLQuNGB0Ywg0Lcg0YDQtdGB0YPRgNGB0L7QvC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZ2V0L3NldCBzZXR0aW5ncyBmcm9tL29uIHJlc291cmNlLiIKLW1zZ3N0ciAiIgotItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQv9Cw0YDQsNC80LXRgtGA0Lgg0Lcg0YDQtdGB0YPRgNGB0YMg0LDQsdC+INCy0YHRgtCw0L3QvtCy0LjRgtC4INC/0LDRgNCw0LzQtdGC0YDQuCDRgyDRgNC10YHRg9GA0YHRli4iCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LAg0YDQtdGB0YPRgNGB0ZYg0L3QtSDQt9Cw0LvQuNGI0LjQu9C+0YHRjCDQvNGW0YHRhtGPLiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgItCd0LUg0YPQv9C+0LLQvdC+0LLQsNC20LXQvdC+INC90LAg0LTQvtGB0YLRg9C/INC00L4g0YDQtdGB0YPRgNGB0YMuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdHJlYW0gZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIg0L/QtdGA0LXRhdC+0L/QuNCyINC30LDQs9Cw0LvRjNC90YMg0L/QvtC80LjQu9C60YMg0L/QvtGC0L7QutGDLiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiIgotItCjINC10LvQtdC80LXQvdGC0ZYg0L3QtSDRgNC10LDQu9GW0LfQvtCy0LDQvdC+INC/0LXRgNC10YXQvtC/0LvQtdC90L3RjyDRhtGM0L7Qs9C+INC/0L7RgtC+0LrRgy4g0KHQv9C+0LLRltGB0YLRltGC0Ywg0L/RgNC+INC/0L7QvNC40LvQutGDLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdHlwZSBvZiBzdHJlYW0uIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0LjQt9C90LDRh9C40YLQuCDRgtC40L8g0L/QvtGC0L7QutGDLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAi0J/QvtGC0ZbQuiDRltC90YjQvtCz0L4g0YLQuNC/0YMg0L3RltC2INGC0LjQvywg0Y/QutC40Lkg0L7QsdGA0L7QsdC70Y/RlCDRhtC10Lkg0LXQu9C10LzQtdC90YIuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICLQndC10LzQsNGUINC60L7QtNC10LrQsCwg0Y/QutC40Lkg0LfQtNCw0YLQtdC9INC+0LHRgNC+0LHQu9GP0YLQuCDRhtC10Lkg0YLQuNC/INC/0L7RgtC+0LrRgy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YDQvtC30LrQvtC00YPQstCw0YLQuCDQv9C+0YLRltC6LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQt9Cw0LrQvtC00YPQstCw0YLQuCDQv9C+0YLRltC6LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZW11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC00LXQvNGD0LvRjNGC0LjQv9C70LXQutGB0YPQstCw0YLQuCDQv9C+0YLRltC6LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQvNGD0LvRjNGC0LjQv9C70LXQutGB0YPQstCw0YLQuCDQv9C+0YLRltC6LiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgaW4gdGhlIHdyb25nIGZvcm1hdC4iCi1tc2dzdHIgItCf0L7RgtGW0Log0YMg0L3QtdC60L7RgNC10LrRgtC90L7QvNGDINGE0L7RgNC80LDRgtGWLiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIgotbXNnc3RyICLQlNCw0L3RliDQv9C+0YLQvtC60YMg0LfQsNGI0LjRhNGA0L7QstCw0L3Qviwg0LTQtdGI0LjRhNGA0YPQstCw0L3QvdGPINC90LUg0L/RltC00YLRgNC40LzRg9GU0YLRjNGB0Y8uIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotItCU0LDQvdGWINC/0L7RgtC+0LrRgyDQt9Cw0YjQuNGE0YDQvtCy0LDQvdC+LCDRl9GFINC90LUg0LzQvtC20L3QsCDQtNC10YjQuNGE0YDRg9Cy0LDRgtC4LCDQvtGB0LrRltC70YzQutC4INC90LUg0L3QsNC00LDQvdC+ICIKLSLQstGW0LTQv9C+0LLRltC00L3QvtCz0L4g0LrQu9GO0YfQsCDQtNC10YjQuNGE0YDRg9Cy0LDQvdC90Y8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgItCd0LXQvNCw0ZQg0L/QvtCy0ZbQtNC+0LzQu9C10L3QvdGPINC/0YDQviDQv9C+0LzQuNC70LrRgyDQtNC70Y8g0LTQvtC80LXQvdGDICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICLQndC10LzQsNGUINGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8g0L/RgNC+INC/0L7QvNC40LvQutGDINC00LvRjyDQtNC+0LzQtdC90YMgJXMg0YLQsCDQutC+0LTRgyAlZC4iCi0KLW1zZ2lkICJTZWxlY3RlZCBjbG9jayBjYW5ub3QgYmUgdXNlZCBpbiBwaXBlbGluZS4iCi1tc2dzdHIgItCe0LHRgNCw0L3QuNC5INCz0L7QtNC40L3QvdC40Log0L3QtSDQvNC+0LbQtSDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0LjRgdGMINGDINC60L7QvdCy0LXRlNGA0ZYuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0LfQsNC/0LjRgdGWINC60LXRiNGDINGA0LXRlNGB0YLRgNGDINGDICVzOiAlcyIKLQotbXNnaWQgInRpdGxlIgotbXNnc3RyICLQvdCw0LfQstCwIgotCi1tc2dpZCAiY29tbW9ubHkgdXNlZCB0aXRsZSIKLW1zZ3N0ciAi0LfQsNCz0LDQu9GM0L3QvtCy0LbQuNCy0LDQvdCwINC90LDQt9Cy0LAiCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAi0L3QsNC30LLQsCAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgItC30LDQs9Cw0LvRjNC90L7QstC20LjQstCw0L3QsCDQvdCw0LfQstCwICjQtNC70Y8g0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8pIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICLQstC40LrQvtC90LDQstC10YbRjCIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAi0L7RgdC+0LHQsCwg0LLRltC00L/QvtCy0ZbQtNCw0LvRjNC90LAg0LfQsCDQt9Cw0L/QuNGBIgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICLQstC40LrQvtC90LDQstC10YbRjCAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi0L7RgdC+0LHQsCDQsNCx0L4g0L7RgdC+0LHQuCwg0LLRltC00L/QvtCy0ZbQtNCw0LvRjNC90ZYg0LfQsCDQt9Cw0L/QuNGBICjQtNC70Y8g0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8pIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgItCw0LvRjNCx0L7QvCIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICLQsNC70YzQsdC+0LwsINGJ0L4g0LzRltGB0YLQuNGC0Ywg0YbRliDQtNCw0L3RliIKLQotbXNnaWQgImFsYnVtIHNvcnRuYW1lIgotbXNnc3RyICLQsNC70YzQsdC+0LwgKNC00LvRjyDQstC/0L7RgNGP0LTQutGD0LLQsNC90L3RjykiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi0LDQu9GM0LHQvtC8LCDRj9C60LjQuSDQvNGW0YHRgtC40YLRjCDRhtGWINC00LDQvdGWICjQtNC70Y8g0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8pIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICLQstC40LrQvtC90LDQstC10YbRjCDQsNC70YzQsdC+0LzRgyIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAi0JLQuNC60L7QvdCw0LLQtdGG0Ywg0LLRgdGM0L7Qs9C+INCw0LvRjNCx0L7QvNGDINGDINGE0L7RgNC80LDRgtGWINC/0L7QutCw0LfRgyDQt9Cw0L/QuNGB0YMiCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgItCy0LjQutC+0L3QsNCy0LXRhtGMINCw0LvRjNCx0L7QvNGDICjQtNC70Y8g0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8pIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICLQktC40LrQvtC90LDQstC10YbRjCDQstGB0YzQvtCz0L4g0LDQu9GM0LHQvtC80YMg0YMg0YTQvtGA0LzQsNGC0ZYg0LLQv9C+0YDRj9C00LrRg9Cy0LDQvdC90Y8iCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICLQtNCw0YLQsCIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAi0LTQsNGC0LAg0YHRgtCy0L7RgNC10L3QvdGPICjRgyDRhNC+0YDQvNCw0YLRliDRgdGC0YDRg9C60YLRg9GA0LggR0RhdGUpIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgItC00LDRgtCwLdGH0LDRgSIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAi0LTQsNGC0LAg0ZYg0YfQsNGBINGB0YLQstC+0YDQtdC90L3RjyDQtNCw0L3QuNGFICjRgyDRhNC+0YDQvNCw0YLRliDRgdGC0YDRg9C60YLRg9GA0LggR3N0RGF0ZVRpbWUpIgotCi1tc2dpZCAiZ2VucmUiCi1tc2dzdHIgItC20LDQvdGAIgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgItC20LDQvdGAINGG0LjRhSDQtNCw0L3QuNGFIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAi0LrQvtC80LXQvdGC0LDRgCIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICLQtNC+0LLRltC70YzQvdC40Lkg0YLQtdC60YHRgiDQtyDQvtC/0LjRgdC+0Lwg0LTQsNC90LjRhSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgItGA0L7Qt9GI0LjRgNC10L3QuNC5INC60L7QvNC10L3RgtCw0YAiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIiIKLSLQtNC+0LLRltC70YzQvdC40Lkg0YLQtdC60YHRgiDQtyDQvtC/0LjRgdC+0Lwg0LTQsNC90LjRhSDRgyDRhNC+0YDQvNGWINC60LvRjtGHPdC30L3QsNGH0LXQvdC90Y8g0YfQuCDQutC70Y7Rh1tlbl090LrQvtC80LXQvdGC0LDRgCIKLQotbXNnaWQgInRyYWNrIG51bWJlciIKLW1zZ3N0ciAi0L3QvtC80LXRgCDQutC+0LzQv9C+0LfQuNGG0ZbRlyIKLQotbXNnaWQgInRyYWNrIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLQvdC+0LzQtdGAINC60L7QvNC/0L7Qt9C40YbRltGXINGDINC30LHRltGA0YbRliIKLQotbXNnaWQgInRyYWNrIGNvdW50IgotbXNnc3RyICLQutGW0LvRjNC60ZbRgdGC0Ywg0LrQvtC80L/QvtC30LjRhtGW0LkiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICLQutGW0LvRjNC60ZbRgdGC0Ywg0LrQvtC80L/QvtC30LjRhtGW0Lkg0YMg0LfQsdGW0YDRhtGWLCDQtNC+INGP0LrQvtGXINC90LDQu9C10LbQuNGC0Ywg0YbRjyDQutC+0LzQv9C+0LfQuNGG0ZbRjyIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICLQvdC+0LzQtdGAINC00LjRgdC60LAiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLQvdC+0LzQtdGAINC00LjRgdC60LAg0YMg0LfQsdGW0YDRhtGWIgotCi1tc2dpZCAiZGlzYyBjb3VudCIKLW1zZ3N0ciAi0LrRltC70YzQutGW0YHRgtGMINC00LjRgdC60ZbQsiIKLQotbXNnaWQgImNvdW50IG9mIGRpc2NzIGluc2lkZSBjb2xsZWN0aW9uIHRoaXMgZGlzYyBiZWxvbmdzIHRvIgotbXNnc3RyICLQutGW0LvRjNC60ZbRgdGC0Ywg0LTQuNGB0LrRltCyINGDINC30LHRltGA0YbRliwg0LTQviDRj9C60L7RlyDQvdCw0LvQtdC20LjRgtGMINGG0LXQuSDQtNC40YHQuiIKLQotbXNnaWQgImxvY2F0aW9uIgotbXNnc3RyICLQsNC00YDQtdGB0LAiCi0KLW1zZ2lkICIiCi0iT3JpZ2luIG9mIG1lZGlhIGFzIGEgVVJJIChsb2NhdGlvbiwgd2hlcmUgdGhlIG9yaWdpbmFsIG9mIHRoZSBmaWxlIG9yIHN0cmVhbSAiCi0iaXMgaG9zdGVkKSIKLW1zZ3N0ciAiIgotItCU0LbQtdGA0LXQu9C+INC00LDQvdC40YUg0Y/QuiDQsNC00YDQtdGB0LAgKNC80ZbRgdGG0LUsINC00LUg0YDQvtC30YLQsNGI0L7QstCw0L3QviDQv9C+0YfQsNGC0LrQvtCy0ZYg0LTQsNC90ZYg0YTQsNC50LvQsCDQsNCx0L4gIgotItCw0LTRgNC10YHQsCDQv9C+0YjQuNGA0LXQvdC90Y8g0L/QvtGC0L7QutGDKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICLQtNC+0LzQsNGI0L3RjyDRgdGC0L7RgNGW0L3QutCwIgotCi1tc2dpZCAiSG9tZXBhZ2UgZm9yIHRoaXMgbWVkaWEgKGkuZS4gYXJ0aXN0IG9yIG1vdmllIGhvbWVwYWdlKSIKLW1zZ3N0ciAiIgotItCU0L7QvNCw0YjQvdGPINGB0YLQvtGA0ZbQvdC60LAg0YbRjNC+0LPQviDQvdC+0YHRltGPINC00LDQvdC40YUgKNC00L7QvNCw0YjQvdGPINGB0YLQvtGA0ZbQvdC60LAg0LLQuNC60L7QvdCw0LLRhtGPINCw0LHQviDRhNGW0LvRjNC80YMpIgotCi1tc2dpZCAiZGVzY3JpcHRpb24iCi1tc2dzdHIgItC+0L/QuNGBIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICLQutC+0YDQvtGC0LrQuNC5INGC0LXQutGB0YIg0Lcg0L7Qv9C40YHQvtC8INCy0LzRltGB0YLRgyDQtNCw0L3QuNGFIgotCi1tc2dpZCAidmVyc2lvbiIKLW1zZ3N0ciAi0LLQtdGA0YHRltGPIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGlzIGRhdGEiCi1tc2dzdHIgItCy0LXRgNGB0ZbRjyDRhtC40YUg0LTQsNC90LjRhSIKLQotbXNnaWQgIklTUkMiCi1tc2dzdHIgIklTUkMiCi0KLW1zZ2lkICJJbnRlcm5hdGlvbmFsIFN0YW5kYXJkIFJlY29yZGluZyBDb2RlIC0gc2VlIGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8iCi1tc2dzdHIgIiIKLSLQhtC90YLQtdGA0L3QsNGG0ZbQvtC90LDQu9GM0L3QuNC5INGB0YLQsNC90LTQsNGA0YLQvdC40Lkg0LrQvtC0INC30LDQv9C40YHRgyAoSVNSQykg4oCUINC00LjQstGW0YLRjNGB0Y8gaHR0cDovL3d3dy5pZnBpLiIKLSJvcmcvaXNyYy8iCi0KLW1zZ2lkICJvcmdhbml6YXRpb24iCi1tc2dzdHIgItC+0YDQs9Cw0L3RltC30LDRhtGW0Y8iCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgItCw0LLRgtC+0YDRgdGM0LrRliDQv9GA0LDQstCwIgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAi0L/RgNC40LzRltGC0LrQsCDRidC+0LTQviDQsNCy0YLQvtGA0YHRjNC60LjRhSDQv9GA0LDQsiDQvdCwINC00LDQvdGWIgotCi1tc2dpZCAiY29weXJpZ2h0IHVyaSIKLW1zZ3N0ciAidXJpINCw0LLRgtC+0YDRgdGM0LrQuNGFINC/0YDQsNCyIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICJVUkkg0L/RgNC40LzRltGC0LrQuCDQv9GA0L4g0LDQstGC0L7RgNGB0YzQutGWINC/0YDQsNCy0LAg0LTQsNC90LjRhSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgItCw0LLRgtC+0YAg0LrQvtC00YPQstCw0L3QvdGPIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAi0ZbQvOKAmdGPINC70Y7QtNC40L3QuCDQsNCx0L4g0L3QsNC30LLQsCDRg9GB0YLQsNC90L7QstC4LCDRj9C60L7RjiDQsdGD0LvQviDQstC40LrQvtC90LDQvdC+INC60L7QtNGD0LLQsNC90L3RjyIKLQotbXNnaWQgImNvbnRhY3QiCi1tc2dzdHIgItC60L7QvdGC0LDQutGC0LgiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICLQutC+0L3RgtCw0LrRgtC90LAg0ZbQvdGE0L7RgNC80LDRhtGW0Y8iCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICLQu9GW0YbQtdC90LfRltGPIgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICLQu9GW0YbQtdC90LfRltGPINC00LDQvdC40YUiCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAidXJpINC70ZbRhtC10L3Qt9GW0ZciCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGxpY2Vuc2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIlVSSSDQu9GW0YbQtdC90LfRltGXINC00LDQvdC40YUiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgItCy0LjQutC+0L3QsNCy0LXRhtGMIgotCi1tc2dpZCAicGVyc29uKHMpIHBlcmZvcm1pbmciCi1tc2dzdHIgItC+0YHQvtCx0LAo0LgpLCDRidC+INCy0LjQutC+0L3QsNC70LAiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAi0LrQvtC80L/QvtC30LjRgtC+0YAiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmciCi1tc2dzdHIgItC+0YHQvtCx0LAg0YfQuCDQvtGB0L7QsdC4LCDRj9C60LjQvNC4INCx0YPQu9C+INGB0YLQstC+0YDQtdC90L4g0LzRg9C30LjQutGDINC30LDQv9C40YHRgyIKLQotbXNnaWQgImNvbmR1Y3RvciIKLW1zZ3N0ciAi0LTQuNGA0LjQs9C10L3RgiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAi0LTQuNGA0LjQs9C10L3RgiDQsNCx0L4g0L/QvtC60YDQsNGJ0YPQstCw0Ycg0LLQuNC60L7QvdCw0L3QvdGPIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgItGC0YDQuNCy0LDQu9GW0YHRgtGMIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgItGC0YDQuNCy0LDQu9GW0YHRgtGMINGDINC+0LTQuNC90LjRhtGP0YUg0LLQuNC80ZbRgNGDIEdTdHJlYW1lciAo0L3QsNC90L7RgdC10LrRg9C90LTQuCkiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAi0LrQvtC00LXQuiIKLQotbXNnaWQgImNvZGVjIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi0LrQvtC00LXQuiwg0Y/QutC40Lwg0LfQsNC60L7QtNC+0LLQsNC90L4g0LTQsNC90ZYiCi0KLW1zZ2lkICJ2aWRlbyBjb2RlYyIKLW1zZ3N0ciAi0LLRltC00LXQvtC60L7QtNC10LoiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgItC60L7QtNC10LosINGP0LrQuNC8INC30LDQutC+0LTQvtCy0LDQvdC+INCy0ZbQtNC10L7QtNCw0L3RliIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICLQsNGD0LTRltC+0LrQvtC00LXQuiIKLQotbXNnaWQgImNvZGVjIHRoZSBhdWRpbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi0LrQvtC00LXQuiwg0Y/QutC40Lwg0LfQsNC60L7QtNC+0LLQsNC90ZYg0LfQstGD0LrQvtCy0ZYg0LTQsNC90ZYiCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAi0LrQvtC00LXQuiDRgdGD0LHRgtC40YLRgNGW0LIiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgItC60L7QtNC10LosINGDINGP0LrQvtC80YMg0LfQsdC10YDRltCz0LDRjtGC0YzRgdGPINGB0YPQsdGC0LjRgtGA0LgiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IgotbXNnc3RyICLRhNC+0YDQvNCw0YIg0LrQvtC90YLQtdC50L3QtdGA0LAiCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi0YTQvtGA0LzQsNGCINC60L7QvdGC0LXQudC90LXRgNCwLCDRgyDRj9C60L7QvNGDINC30LHQtdGA0ZbQs9Cw0Y7RgtGM0YHRjyDQtNCw0L3RliIKLQotbXNnaWQgImJpdHJhdGUiCi1tc2dzdHIgItGJ0ZbQu9GM0L3RltGB0YLRjCDQv9C+0YLQvtC60YMg0LHRltGC0ZbQsiIKLQotbXNnaWQgImV4YWN0IG9yIGF2ZXJhZ2UgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgItGC0L7Rh9C90LAg0LDQsdC+INC/0YDQuNCx0LvQuNC30L3QsCDRidGW0LvRjNC90ZbRgdGC0Ywg0L/QvtGC0L7QutGDINCx0ZbRgtGW0LIg0YMg0LHRltGCL9GBIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIgotbXNnc3RyICLQvdC+0LzRltC90LDQu9GM0L3QsCDRidGW0LvRjNC90ZbRgdGC0Ywg0L/QvtGC0L7QutGDINCx0ZbRgtGW0LIiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLQvdC+0LzRltC90LDQu9GM0L3QsCDRidGW0LvRjNC90ZbRgdGC0Ywg0L/QvtGC0L7QutGDINCx0ZbRgtGW0LIg0YMg0LHRltGCL9GBIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIgotbXNnc3RyICLQvNGW0L3RltC80LDQu9GM0L3QsCDRidGW0LvRjNC90ZbRgdGC0Ywg0L/QvtGC0L7QutGDINCx0ZbRgtGW0LIiCi0KLW1zZ2lkICJtaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLQvNGW0L3RltC80LDQu9GM0L3QsCDRidGW0LvRjNC90ZbRgdGC0Ywg0L/QvtGC0L7QutGDINCx0ZbRgtGW0LIg0YMg0LHRltGCL9GBIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70YzQvdCwINGJ0ZbQu9GM0L3RltGB0YLRjCDQv9C+0YLQvtC60YMg0LHRltGC0ZbQsiIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgItC80LDQutGB0LjQvNCw0LvRjNC90LAg0YnRltC70YzQvdGW0YHRgtGMINC/0L7RgtC+0LrRgyDQsdGW0YLRltCyINGDINCx0ZbRgi/RgSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgItC60L7QtNGD0LLQsNC70YzQvdC40LoiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICLQutC+0LTRg9Cy0LDQu9GM0L3QuNC6LCDRj9C60LjQuSDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNCy0YHRjyDQtNC70Y8g0LrQvtC00YPQstCw0L3QvdGPINGG0LjRhSDQtNCw0L3QuNGFIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICLQstC10YDRgdGW0Y8g0LrQvtC00YPQstCw0LvRjNC90LjQutCwIgotCi1tc2dpZCAidmVyc2lvbiBvZiB0aGUgZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0LLQtdGA0YHRltGPINC60L7QtNGD0LLQsNC70YzQvdC40LrQsCwg0Y/QutC40Lkg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDQstGB0Y8g0LTQu9GPINC60L7QtNGD0LLQsNC90L3RjyDRhtC40YUg0LTQsNC90LjRhSIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAi0L3QvtC80LXRgCIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgItC/0L7RgdC70ZbQtNC+0LLQvdC40Lkg0L3QvtC80LXRgCDQutC+0LzQv9C+0LfQuNGG0ZbRlyIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAi0YDRltCy0LXQvdGMINCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8g0LrQvtC80L/QvtC30LjRhtGW0ZciCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICLRgNGW0LLQtdC90Ywg0LrQvtC80L/QvtC30LjRhtGW0ZcsINGDINC00JEiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIHBlYWsiCi1tc2dzdHIgItC/0ZbQuiDQstGW0LTRgtCy0L7RgNC10L3QvdGPINC60L7QvNC/0L7Qt9C40YbRltGXIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgItC/0ZbQuiDQutC+0LzQv9C+0LfQuNGG0ZbRlyIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAi0YDRltCy0LXQvdGMINCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8g0LDQu9GM0LHQvtC80YMiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICLRgNGW0LLQtdC90Ywg0LDQu9GM0LHQvtC80YMsINGDINC00JEiCi0KLW1zZ2lkICJyZXBsYXlnYWluIGFsYnVtIHBlYWsiCi1tc2dzdHIgItC/0ZbQuiDQstGW0LTRgtCy0L7RgNC10L3QvdGPINCw0LvRjNCx0L7QvNGDIgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgItC/0ZbQuiDQsNC70YzQsdC+0LzRgyIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICLQvtC/0L7RgNC90LjQuSDRgNGW0LLQtdC90Ywg0LPRg9GH0L3QvtGB0YLRliDQstGW0LTRgtCy0L7RgNC10L3QvdGPIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAi0L7Qv9C+0YDQvdGWINGA0ZbQstC90ZYg0LPRg9GH0L3QvtGB0YLRliDQutC+0LzQv9C+0LfQuNGG0ZbRlyDRh9C4INCw0LvRjNCx0L7QvNGDIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAi0LrQvtC0INC80L7QstC4IgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAi0LrQvtC0INC80L7QstC4INC00LvRjyDQv9C+0YLQvtC60YMsINC60L7QtCDQvNCw0ZQg0LLRltC00L/QvtCy0ZbQtNCw0YLQuCBJU08tNjM5LTEg0LDQsdC+IElTTy02MzktMiIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgItC90LDQt9Cy0LAg0LzQvtCy0LgiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAi0L3QsNC30LLQsCDQvNC+0LLQuCDRhtGM0L7Qs9C+INC/0L7RgtC+0LrRgyDQt9Cy0YPQutC+0LLQuNGFINC00LDQvdC40YUg0YMg0LTQvtCy0ZbQu9GM0L3RltC5INGE0L7RgNC80ZYiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAi0LfQvtCx0YDQsNC20LXQvdC90Y8iCi0KLW1zZ2lkICJpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICLQt9C+0LHRgNCw0LbQtdC90L3Rjywg0YnQviDRgdGC0L7RgdGD0ZTRgtGM0YHRjyDRhtGM0L7Qs9C+INC/0L7RgtC+0LrRgyIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAi0L/QvtC/0LXRgNC10LTQvdGW0Lkg0L/QtdGA0LXQs9C70Y/QtCDQt9C+0LHRgNCw0LbQtdC90L3RjyIKLQotbXNnaWQgInByZXZpZXcgaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0L/QvtC/0LXRgNC10LTQvdGW0Lkg0L/QtdGA0LXQs9C70Y/QtCDQt9C+0LHRgNCw0LbQtdC90L3Rjywg0L/QvtCy4oCZ0Y/Qt9Cw0L3QvtCz0L4g0Lcg0YbQuNC8INC/0L7RgtC+0LrQvtC8IgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAi0LTQvtC70YPRh9C10L3QvdGPIgotCi1tc2dpZCAiZmlsZSBhdHRhY2hlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi0YTQsNC50LssINC00L7Qu9GD0YfQtdC90LjQuSDQtNC+INGG0YzQvtCz0L4g0L/QvtGC0L7QutGDIgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAi0YLQsNC60YLRltCyINC30LAg0YXQstC40LvQuNC90YMiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAi0LrRltC70YzQutGW0YHRgtGMINGC0LDQutGC0ZbQsiDQt9Cy0YPQutGDINC30LAg0YXQstC40LvQuNC90YMiCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAi0LrQu9GO0YfQvtCy0ZYg0YHQu9C+0LLQsCIKLQotbXNnaWQgImNvbW1hIHNlcGFyYXRlZCBrZXl3b3JkcyBkZXNjcmliaW5nIHRoZSBjb250ZW50IgotbXNnc3RyICLQstGW0LTQvtC60YDQtdC80LvQtdC90ZYg0LrQvtC80LDQvNC4INC60LvRjtGH0L7QstGWINGB0LvQvtCy0LAsINGJ0L4g0L7Qv9C40YHRg9GO0YLRjCDQtNCw0L3RliIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICLQs9C10L7Qs9GA0LDRhNGW0YfQvdCwINC90LDQt9Cy0LAiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAiIgotItC30YDRg9GH0L3QuNC5INC00LvRjyDRh9C40YLQsNC90L3RjyDQvtC/0LjRgdC+0LLQsCDQvdCw0LfQstCwINC80ZbRgdGG0LXQstC+0YHRgtGWLCDRgyDRj9C60ZbQuSDQsdGD0LvQviDQt9Cw0L/QuNGB0LDQvdC+INCw0LHQviAiCi0i0YHRgtCy0L7RgNC10L3QviDQtNCw0L3RliIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsYXRpdHVkZSIKLW1zZ3N0ciAi0LPQtdC+0LPRgNCw0YTRltGH0L3QsCDRiNC40YDQvtGC0LAiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSLQs9C10L7Qs9GA0LDRhNGW0YfQvdCwINGI0LjRgNC+0YLQsCDQvNGW0YHRhtC10LLQvtGB0YLRliwg0LTQtSDQsdGD0LvQviDQt9Cw0L/QuNGB0LDQvdC+INCw0LHQviDRgdGC0LLQvtGA0LXQvdC+INC00LDQvdGWINGDINCz0YDQsNC00YPRgdCw0YUgIgotItCy0ZbQtNC/0L7QstGW0LTQvdC+INC00L4gV0dTODQgKNC90YPQu9GMIOKAlCDQtdC60LLQsNGC0L7RgCwg0LLRltC04oCZ0ZTQvNC90ZYg0LfQvdCw0YfQtdC90L3RjyDQstGW0LTQv9C+0LLRltC00LDRjtGC0YwgIgotItC/0ZbQstC00LXQvdC90ZbQuSDRiNC40YDQvtGC0ZYpIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAi0LPQtdC+0LPRgNCw0YTRltGH0L3QsCDQtNC+0LLQs9C+0YLQsCIKLQotbXNnaWQgIiIKLSJnZW8gbG9uZ2l0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIHByaW1lIG1lcmlkaWFuIGluIEdyZWVud2ljaC9VSywgICIKLSJuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdlc3Rlcm4gbG9uZ2l0dWRlcykiCi1tc2dzdHIgIiIKLSLQs9C10L7Qs9GA0LDRhNGW0YfQvdCwINC00L7QstCz0L7RgtCwINC80ZbRgdGG0LXQstC+0YHRgtGWLCDQtNC1INCx0YPQu9C+INC30LDQv9C40YHQsNC90L4g0LDQsdC+INGB0YLQstC+0YDQtdC90L4g0LTQsNC90ZYg0YMgIgotItCz0YDQsNC00YPRgdCw0YUg0LLRltC00L/QvtCy0ZbQtNC90L4g0LTQviBXR1M4NCAo0L3Rg9C70Ywg4oCUINC90YPQu9GM0L7QstC40Lkg0LzQtdGA0LjQtNGW0LDQvSDQk9GA0LjQvdCy0ZbRh9CwLCDQstGW0LTigJnRlNC80L3RliAiCi0i0LfQvdCw0YfQtdC90L3RjyDQstGW0LTQv9C+0LLRltC00LDRjtGC0Ywg0LfQsNGF0ZbQtNC90ZbQuSDQtNC+0LLQs9C+0YLRlikiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICLQs9C10L7Qs9GA0LDRhNGW0YfQvdCwINCy0LjRgdC+0YLQsCIKLQotbXNnaWQgIiIKLSJnZW8gZWxldmF0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiBtZXRlcnMgIgotImFjY29yZGluZyB0byBXR1M4NCAoemVybyBpcyBhdmVyYWdlIHNlYSBsZXZlbCkiCi1tc2dzdHIgIiIKLSLQstC40YHQvtGC0LAg0L3QsNC0INGA0ZbQstC90LXQvCDQvNC+0YDRjywg0LTQtSDQsdGD0LvQviDQt9Cw0L/QuNGB0LDQvdC+INCw0LHQviDRgdGC0LLQvtGA0LXQvdC+INC00LDQvdGWINGDINC80LXRgtGA0LDRhSAiCi0i0LLRltC00L/QvtCy0ZbQtNC90L4g0LTQviBXR1M4NCAo0L3Rg9C70Ywg0LLRltC00L/QvtCy0ZbQtNCw0ZQg0YDRltCy0L3RjiDQvNC+0YDRjykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAi0LrRgNCw0ZfQvdCwIgotCi1tc2dpZCAiY291bnRyeSAoZW5nbGlzaCBuYW1lKSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQiCi1tc2dzdHIgItC60YDQsNGX0L3QsCAo0LDQvdCz0LvRltC50YHRjNC60L7RjiksINGDINGP0LrRltC5INCx0YPQu9C+INC30LDQv9C40YHQsNC90L4g0LDQsdC+INGB0YLQstC+0YDQtdC90L4g0LTQsNC90ZYiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2l0eSIKLW1zZ3N0ciAi0LzRltGB0YLQviIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICLQvNGW0YHRgtC+ICjQsNC90LPQu9GW0LnRgdGM0LrQvtGOKSwg0YMg0Y/QutC+0LzRgyDQsdGD0LvQviDQt9Cw0L/QuNGB0LDQvdC+INCw0LHQviDRgdGC0LLQvtGA0LXQvdC+INC00LDQvdGWIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICLQtNC+0LTQsNGC0LrQvtCy0ZYg0LTQsNC90ZYg0YDQvtC30YLQsNGI0YPQstCw0L3QvdGPIgotCi1tc2dpZCAiIgotImEgbG9jYXRpb24gd2l0aGluIGEgY2l0eSB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcHJvZHVjZWQgb3IgY3JlYXRlZCAoZS5nLiAiCi0idGhlIG5laWdoYm9yaG9vZCkiCi1tc2dzdHIgIiIKLSLQvNGW0YHRhtC1INGDINC80ZbRgdGC0ZYsINC00LUg0LLQuNC60L7QvdGD0LLQsNC70LDRgdGPINC30LnQvtC80LrQsCDQsNCx0L4g0LHRg9C70L4g0YHRgtCy0L7RgNC10L3QviDQtNCw0L3RliAo0L3QsNC/0YDQuNC60LvQsNC0LCAiCi0i0YDQsNC50L7QvSkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gaG9yaXpvbnRhbCBlcnJvciIKLW1zZ3N0ciAi0L/QvtGF0LjQsdC60LAg0YMg0LTQsNC90LjRhSDQs9C+0YAuINGA0L7Qt9GC0LDRiNGD0LLQsNC90L3RjyIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICLQvtGH0ZbQutGD0LLQsNC90LAg0L/QvtGF0LjQsdC60LAg0YMg0LLQuNC80ZbRgNGO0LLQsNC90L3RliDQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QuNGFINC60L7QvtGA0LTQuNC90LDRgiAo0YMg0LzQtdGC0YDQsNGFKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAi0LPQtdC+0LPRgNCw0YTRltGH0L3QsCDRiNCy0LjQtNC60ZbRgdGC0Ywg0L/QtdGA0LXRgdGD0LLQsNC90L3RjyIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAi0YjQstC40LTQutGW0YHRgtGMINGA0YPRhdGDINC/0YDQuNGB0YLRgNC+0Y4g0LTQu9GPINC30L3RltC80LDQvdC90Y8g0L/RltC0INGH0LDRgSDQstC40LrQvtC90LDQvdC90Y8g0LfQudC+0LzQutC4INGDINC8L9GBIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAi0LPQtdC+0LPRgNCw0YTRltGH0L3QuNC5INC90LDQv9GA0Y/QvNC+0Log0L/QtdGA0LXRgdGD0LLQsNC90L3RjyIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIG1vdmVtZW50IGRpcmVjdGlvbiBvZiB0aGUgZGV2aWNlIHBlcmZvcm1pbmcgdGhlIGNhcHR1cmUgb2YgYSAiCi0ibWVkaWEuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGRlZ3JlZXMgaW4gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIDAgIgotIm1lYW5zIHRoZSBnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotItC90LDQv9GA0Y/QvNC+0Log0YDRg9GF0YMg0L/RgNC40YHRgtGA0L7Rjiwg0Y/QutC40Lwg0LLQuNC60L7QvdGD0LLQsNC70L7RgdGPINC30L3RltC80LDQvdC90Y8g0LTQsNC90LjRhS4g0JLQuNC30L3QsNGH0LDRlNGC0YzRgdGPINGDICIKLSLQs9GA0LDQtNGD0YHQsNGFINC3INCy0LjQutC+0YDQuNGB0YLQsNC90L3Rj9C8INC00LXRgdGP0YLQutC+0LLQuNGFINC00YDQvtCx0ZbQsiwgMCDQstGW0LTQv9C+0LLRltC00LDRlCDQs9C10L7Qs9GA0LDRhNGW0YfQvdGW0LkgIgotItC/0ZbQstC90L7Rh9GWLCDQstGW0LTQu9GW0Log0LLQtdC00LXRgtGM0YHRjyDQt9CwINCz0L7QtNC40L3QvdC40LrQvtCy0L7RjiDRgdGC0YDRltC70LrQvtGOLiIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAi0LPQtdC+0LPRgNCw0YTRltGH0L3QuNC5INC90LDQv9GA0Y/QvNC+0Log0LfQudC+0LzQutC4IgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0i0L3QsNC/0YDRj9C80L7Quiwg0YMg0Y/QutC+0LzRgyDQsdGD0LvQviDRgdC/0YDRj9C80L7QstCw0L3QviDQvtCx4oCZ0ZTQutGC0LjQsiDQv9GA0LjRgdGC0YDQvtGOLCDRj9C60LjQvCDQstC40LrQvtC90YPQstCw0LvQvtGB0Y8gIgotItC30L3RltC80LDQvdC90Y8g0LTQsNC90LjRhS4g0JLQuNC30L3QsNGH0LDRlNGC0YzRgdGPINGDINCz0YDQsNC00YPRgdCw0YUg0Lcg0LLQuNC60L7RgNC40YHRgtCw0L3QvdGP0Lwg0LTQtdGB0Y/RgtC60L7QstC40YUg0LTRgNC+0LHRltCyLCAwICIKLSLQstGW0LTQv9C+0LLRltC00LDRlCDQs9C10L7Qs9GA0LDRhNGW0YfQvdGW0Lkg0L/RltCy0L3QvtGH0ZYsINCy0ZbQtNC70ZbQuiDQstC10LTQtdGC0YzRgdGPINC30LAg0LPQvtC00LjQvdC90LjQutC+0LLQvtGOINGB0YLRgNGW0LvQutC+0Y4uIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgItC90LDQt9Cy0LAg0L/QtdGA0LXQtNCw0YfRliIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgItCd0LDQt9Cy0LAg0YLQtdC70LXQv9GA0L7Qs9GA0LDQvNC4L9GC0YDQsNC90YHQu9GP0YbRltGXL9GB0LXRgNGW0LDQu9GDINC30LLRltC00LrQuCDQstC30Y/RgtC+INC00LDQvdGWIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgc29ydG5hbWUnID0gJ1RWL3JhZGlvL3BvZGNhc3Qgc2hvdyBuYW1lIGFzIHVzZWQgZm9yIHNvcnRpbmcgcHVycG9zZXMnIGhlcmUKLW1zZ2lkICJzaG93IHNvcnRuYW1lIgotbXNnc3RyICLQvdCw0LfQstCwINC/0LXRgNC10LTQsNGH0ZYgKNC00LvRjyDQstC/0L7RgNGP0LTQutGD0LLQsNC90L3RjykiCi0KLW1zZ2lkICIiCi0iTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSwgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSLQndCw0LfQstCwINGC0LXQu9C10L/RgNC+0LPRgNCw0LzQuC/RgtGA0LDQvdGB0LvRj9GG0ZbRly/RgdC10YDRltCw0LvRgyDQt9Cy0ZbQtNC60Lgg0LLQt9GP0YLQviDQtNCw0L3RliAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKLQotbXNnaWQgImVwaXNvZGUgbnVtYmVyIgotbXNnc3RyICLQvdC+0LzQtdGAINGB0LXRgNGW0ZciCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAi0J3QvtC80LXRgCDRgdC10YDRltGXINGDINGB0LXQt9C+0L3Rliwg0YfQsNGB0YLQuNC90L7RjiDRj9C60L7Qs9C+INGUINC00LDQvdGWIgotCi1tc2dpZCAic2Vhc29uIG51bWJlciIKLW1zZ3N0ciAi0L3QvtC80LXRgCDRgdC10LfQvtC90YMiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAi0J3QvtC80LXRgCDRgdC10LfQvtC90YMsINGH0LDRgdGC0LjQvdC+0Y4g0Y/QutC+0LPQviDRlCDQtNCw0L3RliIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAi0YLQtdC60YHRgiIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAi0KLQtdC60YHRgiwg0YnQviDRgdGD0L/RgNC+0LLQvtC00LbRg9GUINC00LDQvdGWLCDRgtC40L/QvtCy0L4g4oCUINGC0LXQutGB0YIg0L/RltGB0L3RliIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICLQutC+0LzQv9C+0LfQuNGC0L7RgCAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIiIKLSLQvtGB0L7QsdCwICjRh9C4INC+0YHQvtCx0LgpLCDRj9C60L7RjiDQstC40LrQvtC90YPQstCw0LvQvtGB0Y8g0LrQvtC80L/QvtC90YPQstCw0L3QvdGPINC30LDQv9C40YHRgyAo0LTQu9GPINCy0L/QvtGA0Y/QtNC60YPQstCw0L3QvdGPKSIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICLQs9GA0YPQv9GD0LLQsNC90L3RjyIKLQotbXNnaWQgIiIKLSJHcm91cHMgcmVsYXRlZCBtZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIHRyYWNrcywgbGlrZSB0aGUgZGlmZmVyZW50IHBpZWNlcyAiCi0ib2YgYSBjb25jZXJ0by4gSXQgaXMgYSBoaWdoZXIgbGV2ZWwgdGhhbiBhIHRyYWNrLCBidXQgbG93ZXIgdGhhbiBhbiBhbGJ1bSIKLW1zZ3N0ciAiIgotItCT0YDRg9C/0YPRlCDQv9C+0LLigJnRj9C30LDQvdGWINC00LDQvdGWLCDRj9C60ZYg0YHQutC70LDQtNCw0Y7RgtGM0YHRjyDQtyDQtNC10LrRltC70YzQutC+0YUg0LrQvtC80L/QvtC30LjRhtGW0LksINC90LDQv9GA0LjQutC70LDQtCwgIgotItGA0ZbQt9C90ZYg0YfQsNGB0YLQuNC90Lgg0LrQvtC90YbQtdGA0YLRgy4g0JzQsNGUINCy0LjRidC40Lkg0YDRltCy0LXQvdGMINC30LAg0L7QutGA0LXQvNGDINC60L7QvNC/0L7Qt9C40YbRltGOLCDQsNC70LUg0L3QuNC20YfQuNC5INC30LAgIgotItGA0ZbQstC10L3RjCDQsNC70YzQsdC+0LzRgy4iCi0KLW1zZ2lkICJ1c2VyIHJhdGluZyIKLW1zZ3N0ciAi0L7RhtGW0L3QutCwINC60L7RgNC40YHRgtGD0LLQsNGH0LXQvCIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICIiCi0i0J7RhtGW0L3QutCwLCDQstC40LfQvdCw0YfQtdC90LAg0LrQvtGA0LjRgdGC0YPQstCw0YfQtdC8LiDQkdGW0LvRjNGI0LjQvCDQt9C90LDRh9C10L3QvdGP0Lwg0LLRltC00L/QvtCy0ZbQtNCw0ZQg0LLQuNGJ0LAg0L7RhtGW0L3QutCwLiIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgItCy0LjRgNC+0LHQvdC40Log0L/RgNC40YHRgtGA0L7RjiIKLQotbXNnaWQgIk1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgItCS0LjRgNC+0LHQvdC40Log0L/RgNC40YHRgtGA0L7Rjiwg0LLQuNC60L7RgNC40YHRgtCw0L3QvtCz0L4g0LTQu9GPINGB0YLQstC+0YDQtdC90L3RjyDRhtC40YUg0LTQsNC90LjRhSIKLQotbXNnaWQgImRldmljZSBtb2RlbCIKLW1zZ3N0ciAi0LzQvtC00LXQu9GMINC/0YDQuNGB0YLRgNC+0Y4iCi0KLW1zZ2lkICJNb2RlbCBvZiB0aGUgZGV2aWNlIHVzZWQgdG8gY3JlYXRlIHRoaXMgbWVkaWEiCi1tc2dzdHIgItCc0L7QtNC10LvRjCDQv9GA0LjRgdGC0YDQvtGOLCDQstC40LrQvtGA0LjRgdGC0LDQvdC+0LPQviDQtNC70Y8g0YHRgtCy0L7RgNC10L3QvdGPINGG0LjRhSDQtNCw0L3QuNGFIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAi0L3QsNC30LLQsCDQv9GA0L7Qs9GA0LDQvNC4IgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNCwLCDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDRj9C60L7RlyDQt9Cw0L/QuNGB0LDQvdC+INC00LDQvdGWIgotCi1tc2dpZCAiYXBwbGljYXRpb24gZGF0YSIKLW1zZ3N0ciAi0LTQsNC90ZYg0L/RgNC+0LPRgNCw0LzQuCIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgItCU0L7QstGW0LvRjNC90ZYg0LTQsNC90ZYg0L/RgNC+0LPRgNCw0LzQuCwg0Y/QutC40LzQuCDQv9GW0LTQv9C40YHQsNC90L4g0LTQsNC90ZYiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAi0L7RgNGW0ZTQvdGC0LDRhtGW0Y8g0LfQvtCx0YDQsNC20LXQvdC90Y8iCi0KLW1zZ2lkICJIb3cgdGhlIGltYWdlIHNob3VsZCBiZSByb3RhdGVkIG9yIGZsaXBwZWQgYmVmb3JlIGRpc3BsYXkiCi1tc2dzdHIgItCS0LjQt9C90LDRh9Cw0ZQg0L7QsdC10YDRgtCw0L3QvdGPINGC0LAg0LLRltC00LTQt9C10YDQutCw0LvQtdC90L3RjyDQt9C+0LHRgNCw0LbQtdC90L3RjyDQv9C10YDQtdC0INC/0L7QutCw0LfQvtC8IgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICLQv9C+0YjQuNGA0Y7QstCw0YciCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSBsYWJlbCBvciBwdWJsaXNoZXIiCi1tc2dzdHIgItCd0LDQt9Cy0LAg0LvQtdC50LHQu9CwINCw0LHQviDQv9C+0YjQuNGA0Y7QstCw0YfQsCIKLQotbXNnaWQgImludGVycHJldGVkLWJ5IgotbXNnc3RyICLRltC90YLQtdGA0L/RgNC10YLQsNGG0ZbRjyIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICLQlNCw0L3RliDRidC+0LTQviDRgtC40YUsINC60LjQvCDQsdGD0LvQviDQstC40LrQvtC90LDQvdC+INGA0LXQvNGW0LrRgSDQsNCx0L4g0L/QvtC00ZbQsdC90YMg0ZbQvdGC0LXRgNC/0YDQtdGC0LDRhtGW0Y4iCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAi0LHQsNC30L7QstCwLdC90L7RgtCwLW1pZGkiCi0KLW1zZ2lkICJNaWRpIG5vdGUgbnVtYmVyIG9mIHRoZSBhdWRpbyB0cmFjay4iCi1tc2dzdHIgItCd0L7QvNC10YAg0L3QvtGC0LggTUlESSDQt9Cy0YPQutC+0LLQvtGXINC00L7RgNGW0LbQutC4LiIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAi0LrQvtC90YTRltC00LXQvdGG0ZbQudC90ZYt0LTQsNC90ZYiCi0KLW1zZ2lkICJQcml2YXRlIGRhdGEiCi1tc2dzdHIgItCa0L7QvdGE0ZbQtNC10L3RhtGW0LnQvdGWINC00LDQvdGWIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgItCd0LUg0LfQvdCw0LnQtNC10L3QviDQvtCx0YDQvtCx0L3QuNC60LAg0LDQtNGA0LXRgSDQtNC70Y8g0L/RgNC+0YLQvtC60L7Qu9GDICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICLQn9GW0LTRgtGA0LjQvNC60Lgg0YHRhdC10LzQuCDQsNC00YDQtdGB0Lggwqslc8K7INC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QviIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICLQn9Ce0JzQmNCb0JrQkDog0YMg0LXQu9C10LzQtdC90YLRliAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSLQlNC+0LTQsNGC0LrQvtCy0LAg0LTRltCw0LPQvdC+0YHRgtC40YfQvdCwINGW0L3RhNC+0YDQvNCw0YbRltGPOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAi0YMg0L/QvtGB0LjQu9Cw0L3QvdGPINC90LXQvNCw0ZQg0LTQttC10YDQtdC70LAgW9C/0YDQuNC50LzQsNGHPSVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICLRgyDQv9C+0YHQuNC70LDQvdC90Y8g0L3QtdC80LDRlCDQv9GA0LjQudC80LDRh9CwIFvQtNC20LXRgNC10LvQvj0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICLQvdC10LzQsNGUINCy0LvQsNGB0YLQuNCy0L7RgdGC0ZYgwqslc8K7INGDINC10LvQtdC80LXQvdGC0ZYgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAi0L3QtSDQstC00LDQu9C+0YHRjyDQstGB0YLQsNC90L7QstC40YLQuCDQstC70LDRgdGC0LjQstGW0YHRgtGMIMKrJXPCuyDRgyDQtdC70LXQvNC10L3RgtGWIMKrJXPCuyDRgyDQt9C90LDRh9C10L3QvdGPIMKrJXPCuyIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICLQodC/0YDQvtCx0LAg0LLRltC00LrQu9Cw0LTQtdC90L7Qs9C+INC60L7QvNC/0L7QvdGD0LLQsNC90L3RjyDQt9Cw0LfQvdCw0LvQsCDQvdC10LLQtNCw0YfRli4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgItC90LUg0LLQtNCw0LvQvtGB0Y8g0L/RgNC40LIn0Y/Qt9Cw0YLQuCAlcyDQtNC+ICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICLQvdC10LzQsNGUINC10LvQtdC80LXQvdGC0LAgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICLQvdC10L7Rh9GW0LrRg9Cy0LDQvdC1INC/0L7RgdC40LvQsNC90L3RjyDCqyVzwrsg4oCUINGW0LPQvdC+0YDRg9GU0LzQviIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgItC90LXQvtGH0ZbQutGD0LLQsNC90LUg0L/QvtGB0LjQu9Cw0L3QvdGPLdC/0ZbQtNC60LvQsNC00LrQsCDCqyVzwrsg4oCUINGW0LPQvdC+0YDRg9GU0LzQviIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgItC90LUg0LLQtNCw0LvQvtGB0Y8g0YDQvtC30ZbQsdGA0LDRgtC4INC80L7QttC70LjQstC+0YHRgtGWIMKrJXPCuyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgItC90LXQvNCw0ZQg0LXQu9C10LzQtdC90YLQsC3RgdC/0L7QttC40LLQsNGH0LAg0LTQu9GPIFVSSSDCqyVzwrsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgItCy0ZbQtNGB0YPRgtC90ZbQuSDQtdC70LXQvNC10L3Rgi3QtNC20LXRgNC10LvQviDQtNC70Y8gVVJJIMKrJXPCuyIKLQotbXNnaWQgInN5bnRheCBlcnJvciIKLW1zZ3N0ciAi0YHQuNC90YLQsNC60YHQuNGH0L3QsCDQv9C+0LzQuNC70LrQsCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgItCy0LrQsNC30LDQvdC+INC/0L7RgNC+0LbQvdGW0Lkg0LrQvtC90YLQtdC50L3QtdGAIMKrJXPCuywg0L3QtSDQtNC+0L/Rg9GB0LrQsNGU0YLRjNGB0Y8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gYmluIFwiJXNcIiwgdW5wYWNraW5nIGVsZW1lbnRzIgotbXNnc3RyICLQvdC10LzQsNGUINGE0YDQsNCz0LzQtdC90YLQsCDCqyVzwrssINGA0L7Qt9C/0LDQutC+0LLRg9GU0LzQviDQtdC70LXQvNC10L3RgtC4IgotCi1tc2dpZCAiZW1wdHkgcGlwZWxpbmUgbm90IGFsbG93ZWQiCi1tc2dzdHIgItC90LUg0LzQvtC20L3QsCDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0Lgg0L/QvtGA0L7QttC90ZbQuSDQutCw0L3QsNC7IgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgItCS0LjQutC40L3Rg9GC0L4g0LHQsNCz0LDRgtC+INCx0YPRhNC10YDRltCyLiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LLQvdGD0YLRgNGW0YjQvdGM0L7Qs9C+INC/0LXRgNC10L3QtdGB0LXQvdC90Y8g0LTQsNC90LjRhS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQstC90YPRgtGA0ZbRiNC90YzQvtCz0L4g0L/QtdGA0LXQvdC10YHQtdC90L3RjyDQtNCw0L3QuNGFLiIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LLQvdGD0YLRgNGW0YjQvdGM0L7RlyDRgdC40L3RhdGA0L7QvdGW0LfQsNGG0ZbRly4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQvNGW0YHRhtC1INC/0ZbQtCDQsdGD0YTQtdGALiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICLQpNGW0LvRjNGC0YAg0LzQvtC20LvQuNCy0L7RgdGC0LXQuSIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0i0J7QsdC80LXQttC40YLQuCDQtNC+0L/Rg9GB0YLQuNC80ZYg0LzQvtC20LvQuNCy0L7RgdGC0ZYgKE5VTEwg0L7Qt9C90LDRh9Cw0ZQgQU5ZKS4g0JLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINGG0ZbRlNGXICIKLSLQstC70LDRgdGC0LjQstC+0YHRgtGWINC/0YDQuNC30LLQvtC00LjRgtGMINC00L4g0L/QvtGB0LjQu9Cw0L3QvdGPINC90LAg0L/QvtGB0YLQsNCy0LvQtdC90LjQuSDQvtCxJ9GU0LrRgiBHc3RDYXBzLiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgItCg0LXQttC40Lwg0LfQvNGW0L3QuCDQvNC+0LbQu9C40LLQvtGB0YLQtdC5IgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAi0JfQvNGW0L3QsCDQv9C+0LLQtdC00ZbQvdC60Lgg0LzQvtC20LvQuNCy0L7RgdGC0LXQuSDRhNGW0LvRjNGC0YDRg9Cy0LDQvdC90Y8iCi0KLW1zZ2lkICJObyBUZW1wIGRpcmVjdG9yeSBzcGVjaWZpZWQuIgotbXNnc3RyICLQndC1INCy0LrQsNC30LDQvdC+INC60LDRgtCw0LvQvtCzINGC0LjQvNGH0LDRgdC+0LLQuNGFINC00LDQvdC40YUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YHRgtCy0L7RgNC40YLQuCDRgtC40LzRh9Cw0YHQvtCy0LjQuSDRhNCw0LnQuyDQtNCw0L3QuNGFIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0YTQsNC50Lsgwqslc8K7INC00LvRjyDRh9C40YLQsNC90L3Rjy4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINC30LDQv9C40YHRgyDQtNC+INGE0LDQudC70LAg0L7RgtGA0LjQvNCw0L3QuNGFINC00LDQvdC40YUuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0LLQutCw0LfQsNC90L4g0L3QsNC30LLQuCDRhNCw0LnQu9CwINC00LvRjyDQt9Cw0L/QuNGB0YMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstGW0LTQutGA0LjRgtC4INGE0LDQudC7IMKrJXPCuyDQtNC70Y8g0LfQsNC/0LjRgdGDLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LfQsNC60YDQuNCy0LDQvdC90Y8g0YTQsNC50LvQsCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdoaWxlIHNlZWtpbmcgaW4gZmlsZSBcIiVzXCIuIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGWINC/0L7Qt9C40YbRltGXINGDINGE0LDQudC70ZYgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RgNC4INC30LDQv9C40YHRg9Cy0LDQvdC90ZYg0LTQviDRhNCw0LnQu9CwIMKrJXPCuy4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAi0J3QtSDQstC60LDQt9Cw0L3QviDQvdCw0LfQstGDINGE0LDQudC70LAg0LTQu9GPINGH0LjRgtCw0L3QvdGPLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQvtGC0YDQuNC80LDRgtC4INGW0L3RhNC+0YDQvNCw0YbRltGOINGJ0L7QtNC+IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAiwqslc8K7INGUINC60LDRgtCw0LvQvtCz0L7QvC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICLQpNCw0LnQuyDCqyVzwrsg0ZQg0YHQvtC60LXRgtC+0LwuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltGB0LvRjyDRltGC0LXRgNCw0YbRltC5INGDINC30LDQv9C40YLQsNC90L7QvNGDINC/0L7RgNGP0LTQutGDLiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgItC80L7QttC70LjQstC+0YHRgtGWIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAi0YMg0L/QvtGC0L7RhtGWINC30L3QsNC50LTQtdC90L4g0LzQvtC20LvQuNCy0L7RgdGC0ZYiCi0KLW1zZ2lkICJtaW5pbXVtIgotbXNnc3RyICLQvNGW0L3RltC80YPQvCIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgItC/0YDQuNC80YPRgdC+0LLQviDQstC40LfQvdCw0YfQtdC90ZYg0LzQvtC20LvQuNCy0L7RgdGC0ZYiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAi0L/RgNC40LzRg9GB0L7QstC+INCy0LjQt9C90LDRh9C40YLQuCDQvNC+0LbQu9C40LLQvtGB0YLRliDQsdC10Lcg0LLQuNC60L7QvdCw0L3QvdGPIHR5cGVmaW5kIgotCi1tc2dpZCAiU3RyZWFtIGRvZXNuJ3QgY29udGFpbiBlbm91Z2ggZGF0YS4iCi1tc2dzdHIgItCjINC/0L7RgtC+0YbRliDQvNGW0YHRgtC40YLRjNGB0Y8g0L3QtdC00L7RgdGC0LDRgtC90YzQviDQtNCw0L3QuNGFLiIKLQotbXNnaWQgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIKLW1zZ3N0ciAi0J/QvtGC0ZbQuiDQvdC1INC80ZbRgdGC0LjRgtGMINC00LDQvdC40YUuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAi0KDQtdCw0LvRltC30L7QstCw0L3RliDRltC90YLQtdGA0YTQtdC50YHQuDpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICLRh9C40YLQsNC90L3RjyIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICLQt9Cw0L/QuNGBIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAi0LfQsNGB0YLQsNGA0ZbQu9C1IgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICLQutC+0L3RgtGA0L7Qu9GMIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgItC80L7QttC90LAg0LfQvNGW0L3RjtCy0LDRgtC4INGDINGB0YLQsNC90LDRhSBOVUxMLCBSRUFEWSwgUEFVU0VEINGC0LAgUExBWUlORyIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgItC80L7QttC90LAg0LfQvNGW0L3RjtCy0LDRgtC4INC70LjRiNC1INGDINGB0YLQsNC90LDRhSBOVUxMLCBSRUFEWSDRliBQQVVTRUQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAi0LzQvtC20L3QsCDQt9C80ZbQvdGO0LLQsNGC0Lgg0LvQuNGI0LUg0YMg0YHRgtCw0L3QsNGFIE5VTEwg0ZYgUkVBRFkiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgItCX0LDQsdC70L7QutC+0LLQsNC90ZYg0YTQsNC50LvQuDoiCi0KLW1zZ2lkICJUb3RhbCBjb3VudDogIgotbXNnc3RyICLQl9Cw0LPQsNC70YzQvdCwINC60ZbQu9GM0LrRltGB0YLRjDoiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0ZWQgZmlsZSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHJbMF0gIiVkINC30LDQsdC70L7QutC+0LLQsNC90LjQuSDRhNCw0LnQuyIKLW1zZ3N0clsxXSAiJWQg0LfQsNCx0LvQvtC60L7QstCw0L3QuNGFINGE0LDQudC70LgiCi1tc2dzdHJbMl0gIiVkINC30LDQsdC70L7QutC+0LLQsNC90LjRhSDRhNCw0LnQu9GW0LIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCDQvNC+0LTRg9C70YwiCi1tc2dzdHJbMV0gIiVkINC80L7QtNGD0LvRliIKLW1zZ3N0clsyXSAiJWQg0LzQvtC00YPQu9GW0LIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQg0LfQsNCx0LvQvtC60L7QstCw0L3QuNC5INC30LDQv9C40YEiCi1tc2dzdHJbMV0gIiVkINC30LDQsdC70L7QutC+0LLQsNC90LjRhSDQt9Cw0L/QuNGB0LgiCi1tc2dzdHJbMl0gIiVkINC30LDQsdC70L7QutC+0LLQsNC90LjRhSDQt9Cw0L/QuNGB0ZbQsiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQg0YTRg9C90LrRhtGW0Y8iCi1tc2dzdHJbMV0gIiVkINGE0YPQvdC60YbRltGXIgotbXNnc3RyWzJdICIlZCDRhNGD0L3QutGG0ZbQuSIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAi0JLQuNCy0LXRgdGC0Lgg0YPRgdGWINC10LvQtdC80LXQvdGC0LgiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtC4INGB0L/QuNGB0L7QuiDQt9Cw0LHQu9C+0LrQvtCy0LDQvdC40YUg0YTQsNC50LvRltCyIgotCi1tc2dpZCAiIgotIlByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIG9yIGFsbCAiCi0icGx1Z2lucyBwcm92aWRlLlxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgIgotImF1dG9tYXRpYyBwbHVnaW4gaW5zdGFsbGF0aW9uIG1lY2hhbmlzbXMiCi1tc2dzdHIgIiIKLSLQktC40LLQtdGB0YLQuCDQv9GA0LjQtNCw0YLQvdC40Lkg0LTQu9GPINC+0LHRgNC+0LHQutC4INC60L7QvNC/4oCZ0Y7RgtC10YDQvtC8INGB0L/QuNGB0L7QuiDQvNC+0LbQu9C40LLQvtGB0YLQtdC5LCDRgNC+0LHQvtGC0YMg0Y/QutC40YUgIgotItC30LDQsdC10LfQv9C10YfRg9GUINC80L7QtNGD0LvRjCDQsNCx0L4g0LLRgdGWINC80L7QtNGD0LvRli5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQktC40LrQvtGA0LjRgdGC0L7QstGD0ZTRgtGM0YHRjyDRgNCw0LfQvtC8INC3INC30L7QstC90ZbRiNC90ZbQvNC4ICIKLSLQvNC10YXQsNC90ZbQt9C80LDQvNC4INCw0LLRgtC+0LzQsNGC0LjRh9C90L7Qs9C+INCy0YHRgtCw0L3QvtCy0LvQtdC90L3RjyDQvNC+0LTRg9C70ZbQsiIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLQuCDQstC80ZbRgdGCINC80L7QtNGD0LvRjyIKLQotbXNnaWQgIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIgotbXNnc3RyICLQn9C10YDQtdCy0ZbRgNC40YLQuCwg0YfQuCDRltGB0L3Rg9GUINCy0LrQsNC30LDQvdC40Lkg0LXQu9C10LzQtdC90YIg0LDQsdC+INC00L7QtNCw0YLQvtC6IgotCi1tc2dpZCAiIgotIldoZW4gY2hlY2tpbmcgaWYgYW4gZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzLCBhbHNvIGNoZWNrIHRoYXQgaXRzIHZlcnNpb24gaXMgIgotImF0IGxlYXN0IHRoZSB2ZXJzaW9uIHNwZWNpZmllZCIKLW1zZ3N0ciAiIgotItCf0ZbQtCDRh9Cw0YEg0L/QtdGA0LXQstGW0YDQutC4INGW0YHQvdGD0LLQsNC90L3RjyDQtdC70LXQvNC10L3RgtCwINCw0LHQviDQtNC+0LTQsNGC0LrQsCDRgtCw0LrQvtC2INC/0LXRgNC10LLRltGA0LjRgtC4LCDRh9C4INGUINC50L7Qs9C+ICIKLSLQstC10YDRgdGW0Y8g0L3QvtCy0ZbRiNC+0Y4g0LfQsCDQstC60LDQt9Cw0L3RgyDQsNCx0L4g0YDRltCy0L3QvtGOINGX0LkiCi0KLW1zZ2lkICJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iCi1tc2dzdHIgItCf0L7QutCw0LfQsNGC0Lgg0L/RltC00YLRgNC40LzRg9Cy0LDQvdGWINGB0YXQtdC80Lgg0LDQtNGA0LXRgSDQtyDQtdC70LXQvNC10L3RgtCw0LzQuCwg0Y/QutGWINGX0YUg0YDQtdCw0LvRltC30YPRjtGC0YwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfQsNCy0LDQvdGC0LDQttC40YLQuCDRhNCw0LnQuyDQvNC+0LTRg9C70Y4gJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAi0J3QtdC80LDRlCDQtdC70LXQvNC10L3RgtCwINC10LvQtdC80LXQvdGC0LAg0LDQsdC+INC80L7QtNGD0LvRjyDCqyVzwrtcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgItCh0YLQsNGC0LjRgdGC0LjRh9C90ZYg0LTQsNC90ZYg0L/QvtC60LDQttGH0LjQutCwIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIGVsZW1lbnQgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAi0J7RgtGA0LjQvNCw0L3QviDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8gJXUg0LLRltC0INC10LvQtdC80LXQvdGC0LAgwqslc8K7ICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAi0J7RgtGA0LjQvNCw0L3QviDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8gJXUg0LLRltC0INCz0L3RltC30LTQsCDCqyVzOiVzwrsgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICLQntGC0YDQuNC80LDQvdC+INC/0L7QstGW0LTQvtC80LvQtdC90L3RjyAldSDQstGW0LQg0L7QseKAmdGU0LrRgtCwIMKrJXPCuyAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAi0J7RgtGA0LjQvNCw0L3QviDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8gJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAi0J7RgtGA0LjQvNCw0L3QviDQvtC30L3QsNC60YMg0LrRltC90YbRjyDRgNGP0LTQutCwINCy0ZbQtCDQtdC70LXQvNC10L3RgtGDIMKrJXPCuy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLQl9Cd0JDQmdCU0JXQndCeINCi0JXQkyAgOiDQt9C90LDQudC00LXQvdC+INGDINC10LvQtdC80LXQvdGC0ZYgwqslc8K7LlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgcGFkIFwiJXM6JXNcIi5cbiIKLW1zZ3N0ciAi0JfQndCQ0JnQlNCV0J3QniDQnNCG0KLQmtCjICA6INC30L3QsNC50LTQtdC90L4g0YMg0LXQu9C10LzQtdC90YLRliDCqyVzOiVzwrsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICLQl9Cd0JDQmdCU0JXQndCeINCc0IbQotCa0KMgOiDQt9C90LDQudC00LXQvdC+INC+0LHigJnRlNC60YLQvtC8IMKrJXPCuy5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICLQl9Cd0JDQmdCU0JXQndCeINCc0IbQotCa0KNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLQl9Cd0JDQmdCU0JXQndCeINCX0JzQhtCh0KIgOiDQt9C90LDQudC00LXQvdC+INC10LvQtdC80LXQvdGC0L7QvCDCqyVzwrsuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBvYmplY3QgXCIlc1wiLlxuIgotbXNnc3RyICLQl9Cd0JDQmdCU0JXQndCeINCX0JzQhtCh0KLQozog0LfQvdCw0LnQtNC10L3QviDQvtCx4oCZ0ZTQutGC0L7QvCDCqyVzwrsuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAi0JfQndCQ0JnQlNCV0J3QniDQl9Cc0IbQodCiXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotItCG0J3QpNCe0KDQnNCQ0KbQhtCvOlxuIgotIiVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICLQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INGDINC10LvQtdC80LXQvdGC0ZYgJXM6ICVzXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAiIgotItCS0LjQutC+0L3QsNC90L4g0LLQuNC/0LXRgNC10LTQttCw0LvRjNC90LUg0L/RgNC+0YHRg9Cy0LDQvdC90Y8g0LTQsNC90LjRhSwg0L7Rh9GW0LrRg9GU0LzQviDQvdCwINC30LDQstC10YDRiNC10L3QvdGPICIKLSLQsdGD0YTQtdGA0LjQt9Cw0YbRltGXLi4uXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICIiCi0i0JLQuNC60L7QvdCw0L3QviDQstC40L/QtdGA0LXQtNC20LDQu9GM0L3QtSDQv9GA0L7RgdGD0LLQsNC90L3RjyDQtNCw0L3QuNGFLCDQvtGH0ZbQutGD0ZTQvNC+INC90LAg0LfQsNCy0LXRgNGI0LXQvdC90Y8g0L7QsdGA0L7QsdC60LguLi5cbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAi0LHRg9GE0LXRgNC40LfQsNGG0ZbRjy4uLiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgItCR0YPRhNC10YDQuNC30LDRhtGW0Y4g0LfQsNCy0LXRgNGI0LXQvdC+LCDQutCw0L3QsNC7INC/0LXRgNC10LLQvtC00LjRgtGM0YHRjyDRgyDRgdGC0LDQvSDQktCG0JTQotCS0J7QoNCV0J3QndCvIC4uLlxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAi0JHRg9GE0LXRgNC40LfQsNGG0ZbRjywg0LrQsNC90LDQuyDQv9C10YDQtdCy0L7QtNC40YLRjNGB0Y8g0YMg0YHRgtCw0L0g0J/QoNCY0JfQo9Cf0JjQndCV0J3QniAuLi5cbiIKLQotbXNnaWQgIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iCi1tc2dzdHIgItCf0LXRgNC10YDQvtC30L/QvtC00ZbQuyDQt9Cw0YLRgNC40LzQutC4Li4uXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiU2V0dGluZyBzdGF0ZSB0byAlcyBhcyByZXF1ZXN0ZWQgYnkgJXMuLi5cbiIKLW1zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINGB0YLQsNC90YMgJXMsINC/0L7RgtGA0ZbQsdC90L4g0LTQu9GPICVzLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICLQn9C10YDQtdGA0LjQstCw0L3QvdGPOiDQt9GD0L/QuNC90LrQsCDQutCw0L3QsNC70YMuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICLQn9C+0YHRgtGD0L86ICglcykgJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJNaXNzaW5nIGVsZW1lbnQ6ICVzXG4iCi1tc2dzdHIgItCd0LUg0LLQuNGB0YLQsNGH0LDRlCDQtdC70LXQvNC10L3RgtCwOiAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICLQntGC0YDQuNC80LDQvdC+INC60L7QvdGC0LXQutGB0YIg0Lcg0LXQu9C10LzQtdC90YLQsCDCqyVzwrs6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgItCS0LjQstC10YHRgtC4INC80ZbRgtC60LggKNGC0LDQutC+0LYg0LLRltC00L7QvNGWINGP0Log0LzQtdGC0LDQtNCw0L3RlikiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICLQktC40LLQtdC00LXQvdC40Lkg0LfQvNGW0YHRgiAo0YDQvtC30LTRltC70Lgg0YLQsCDRgNC10LTQsNC60YbRltGXKSIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgItCS0LjQstC10YHRgtC4INGW0L3RhNC+0YDQvNCw0YbRltGOINC/0YDQviDRgdGC0LDQvSDRgtCwINGB0L/QvtCy0ZbRidC10L3QvdGPINGJ0L7QtNC+INCy0LvQsNGB0YLQuNCy0L7RgdGC0LXQuSIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgItCd0LUg0L/QvtC60LDQt9GD0LLQsNGC0Lgg0LTQsNC90LjRhSDRidC+0LTQviDQv9C+0YHRgtGD0L/RgyIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAi0JLQuNCy0LXQtNC10L3QviDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8iCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAiIgotItCd0LUg0LLQuNCy0L7QtNC40YLQuCDQtNCw0L3RliDRidC+0LTQviDRgdGC0LDQvdGDINC00LvRjyDQstC60LDQt9Cw0L3QvtGXINCy0LvQsNGB0YLQuNCy0L7RgdGC0ZYsINGP0LrRidC+INGD0LLRltC80LrQvdC10L3QviAiCi0i0LTQvtC60LvQsNC00L3QtSDQstC40LLQtdC00LXQvdC90Y8gKNC80L7QttC90LAg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC00LXQutGW0LvRjNC60LAg0YDQsNC30ZbQsikiCi0KLW1zZ2lkICJQUk9QRVJUWS1OQU1FIgotbXNnc3RyICLQndCQ0JfQktCQLdCS0JvQkNCh0KLQmNCS0J7QodCi0IYiCi0KLW1zZ2lkICJEbyBub3QgaW5zdGFsbCBhIGZhdWx0IGhhbmRsZXIiCi1tc2dzdHIgItCd0LUg0LLRgdGC0LDQvdC+0LLQu9GO0LLQsNGC0Lgg0L7QsdGA0L7QsdC90LjQuiDQt9Cx0L7Rl9CyIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICLQn9GA0LjQvNGD0YHQvtCy0L4g0L3QsNC00ZbRgdC70LDRgtC4IEVPUyDQtNC+INC00LbQtdGA0LXQuyDQtNC+INC30LDQstC10YDRiNC10L3QvdGPINGA0L7QsdC+0YLQuCDQutCw0L3QsNC70YMiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgItCX0ZbQsdGA0LDRgtC4INGC0LAg0L/QvtC60LDQt9Cw0YLQuCDRgdGC0LDRgtC40YHRgtC40YfQvdGWINC00LDQvdGWINC/0L7QutCw0LbRh9C40LrQsCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAi0J/QntCc0JjQm9Ca0JA6INC60LDQvdCw0Lsg0L3QtSDQvNC+0LbQtSDQsdGD0YLQuCDRgdC60L7QvdGB0YLRgNGD0LnQvtCy0LDQvdC40Lk6ICVzLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAi0J/QntCc0JjQm9Ca0JA6INC60LDQvdCw0Lsg0L3QtSDQvNC+0LbQtSDQsdGD0YLQuCDRgdC60L7QvdGB0YLRgNGD0LnQvtCy0LDQvdC40LkuXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiV0FSTklORzogZXJyb25lb3VzIHBpcGVsaW5lOiAlc1xuIgotbXNnc3RyICLQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INC/0L7QvNC40LvQutC+0LLQuNC5INC60LDQvdCw0Ls6ICVzXG4iCi0KLW1zZ2lkICJFUlJPUjogdGhlICdwaXBlbGluZScgZWxlbWVudCB3YXNuJ3QgZm91bmQuXG4iCi1tc2dzdHIgItCf0J7QnNCY0JvQmtCQOiDQvdC1INC30L3QsNC50LTQtdC90LjQuSDQtdC70LXQvNC10L3RgiBcInBpcGVsaW5lXCIuXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAi0JrQsNC90LDQuyDQv9C10YDQtdCy0L7QtNC40YLRjNGB0Y8g0YMg0YHRgtCw0L0gUEFVU0VELi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIgotbXNnc3RyICLQn9Ce0JzQmNCb0JrQkDog0LrQsNC90LDQuyDQvdC1INC80L7QttC1INC/0YDQuNC30YPQv9C40L3QuNGC0LjRgdGMLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICLQmtC+0L3QstC10ZTRgCDQsNC60YLQuNCy0L3QuNC5INGC0LAg0L3QtSDQv9C+0YLRgNC10LHRg9GUINCy0LjQv9C10YDQtdC00LbQsNC70YzQvdC+0LPQviDQv9GA0L7RgdGD0LLQsNC90L3RjyDQtNCw0L3QuNGFLi4uXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLlxuIgotbXNnc3RyICLQmtCw0L3QsNC7INGDINGB0YLQsNC90ZYg0L/RgNC40LPQvtGC0YPQstCw0L3QvdGPINC00L4g0LLQuNC/0LXRgNC10LTQttCw0LvRjNC90L7Qs9C+INC/0YDQvtGB0YPQstCw0L3QvdGPINC00LDQvdC40YUuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIKLW1zZ3N0ciAiIgotItCf0J7QnNCY0JvQmtCQOiDQutCw0L3QsNC7INC90LUg0LzQvtC20LUg0L/QtdGA0LXQudGC0Lgg0YMg0YHRgtCw0L0g0LLQuNC/0LXRgNC10LTQttCw0LvRjNC90L7Qs9C+INC/0YDQvtGB0YPQstCw0L3QvdGPINC00LDQvdC40YUuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgItCa0LDQvdCw0Lsg0YMg0YHRgtCw0L3RliDQstC40L/QtdGA0LXQtNC20LDQu9GM0L3QvtCz0L4g0L/RgNC+0YHRg9Cy0LDQvdC90Y8g0LTQsNC90LjRhS4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICLQmtCw0L3QsNC7INC/0LXRgNC10LLQvtC00LjRgtGM0YHRjyDRgyDRgdGC0LDQvSDQktCG0JTQotCS0J7QoNCV0J3QndCvLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBsYXkuXG4iCi1tc2dzdHIgItCf0J7QnNCY0JvQmtCQOiDQutCw0L3QsNC7INC90LUg0LzQvtC20LUg0L/QvtGH0LDRgtC4INCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8uXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAi0KPQstGW0LzQutC90LXQvdC+IEVPUyDQv9GA0Lgg0LfQsNCy0LXRgNGI0LXQvdC90ZYgLSDQn9GA0LjQvNGD0YHQvtCy0LUg0LLQuNCy0LXQtNC10L3QvdGPIEVPUyDQtNC+INC60LDQvdCw0LvRg1xuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgItCj0LLRltC80LrQvdC10L3QviBFT1Mg0L/RgNC4INC30LDQstC10YDRiNC10L3QvdGWIC0g0L7Rh9GW0LrRg9GU0LzQviDQvdCwIEVPUyDQv9GW0YHQu9GPINC/0L7QvNC40LvQutC4XG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAi0J7Rh9GW0LrRg9Cy0LDQvdC90Y8g0L3QsCBFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgItCe0YLRgNC40LzQsNC90L4gRU9TIC0g0LfQsNCy0LXRgNGI0LXQvdC90Y8g0YDQvtCx0L7RgtC4INC60LDQvdCw0LvRgy4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIiIKLSLQn9C10YDQtdGA0LjQstCw0L3QvdGPINC/0ZbQtCDRh9Cw0YEg0L7Rh9GW0LrRg9Cy0LDQvdC90Y8g0L3QsCBFT1MgLSDQv9C10YDQtdGA0LjQstCw0ZTQvNC+INGA0L7QsdC+0YLRgyDQutCw0L3QsNC70YMgIgotItC/0LXRgNC10LTQsNCy0LDQvdC90Y8g0LTQsNC90LjRhS4uLlxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgItCf0ZbQtCDRh9Cw0YEg0L7Rh9GW0LrRg9Cy0LDQvdC90Y8g0L3QsCBFT1Mg0YHRgtCw0LvQsNGB0Y8g0L/QvtC80LjQu9C60LBcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICLQktC40LrQvtC90LDQvdC90Y8g0LfQsNCy0LXRgNGI0LXQvdC+INC/0ZbRgdC70Y8gJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgItCa0LDQvdCw0Lsg0L/QtdGA0LXQstC+0LTQuNGC0YzRgdGPINGDINGB0YLQsNC9INCT0J7QotCe0JLQmNCZIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICLQmtCw0L3QsNC7INC/0LXRgNC10LLQvtC00LjRgtGM0YHRjyDRgyDRgdGC0LDQvSBOVUxMIC4uLlxuIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAi0KHQv9C+0YDQvtC20L3QtdC90L3RjyDQutCw0L3QsNC70YMuLi5cbiIKLQotI34gbXNnaWQgImJpbiIKLSN+IG1zZ3N0ciAi0YTRgNCw0LPQvNC10L3RgiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LLQvdGD0YLRgNGW0YjQvdGM0L7Qs9C+INC/0L7RgtC+0LrRgyDQtNCw0L3QuNGFLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgItCd0LUg0LLQuNCy0L7QtNC40YLQuCDRltC90YTQvtGA0LzQsNGG0ZbRjiDQv9GA0L4g0YHRgtCw0L0g0YLQuNC/0YMg0KLQmNCfIgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICLQotCY0J8xLNCi0JjQnzIsLi4uIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotI34gbXNnc3RyICLQt9CyJ9GP0LfQvtC6INCx0LXQtyDQtdC70LXQvNC10L3RgtCwLdC00LbQtdGA0LXQu9CwIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAi0LfQsifRj9C30L7QuiDQsdC10Lcg0LXQu9C10LzQtdC90YLQsC3RgdC/0L7QttC40LLQsNGH0LAiCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAi0L3QtdC80LDRlCDQtdC70LXQvNC10L3RgtCwINC00LvRjyDQt9CyJ9GP0LfQutGDIFVSSSDCqyVzwrsg0LTQviIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAi0L3QtSDQstC00LDQu9C+0YHRjyDQv9GA0LjQsifRj9C30LDRgtC4INC10LvQtdC80LXQvdGCLdGB0L/QvtC20LjQstCw0Ycg0LTQu9GPIFVSSSDCqyVzwrsiCi0KLSN+IG1zZ2lkICJtYXhpbXVtIgotI34gbXNnc3RyICLQvNCw0LrRgdC40LzRg9C8IgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAiIgotI34gItCS0LjQutC+0YDQuNGB0YLQsNC90L3RjzogZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsg0LXQu9C10LzQtdC90YIuIgotI34gItCy0LvQsNGB0YLQuNCy0ZbRgdGC0Yw90LfQvdCw0YfQtdC90L3RjyAuLi4gXVxuIgotCi0jfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgotI34gbXNnc3RyICLQn9Ce0JzQmNCb0JrQkDog0L/QvtC80LjQu9C60LAg0L/RgNC4INCw0L3QsNC70ZbQt9GWIHhtbCDRhNCw0LnQu9GDIMKrJXPCuy5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBubyB0b3BsZXZlbCBwaXBlbGluZSBlbGVtZW50IGluIGZpbGUgJyVzJy5cbiIKLSN+IG1zZ3N0ciAi0J/QntCc0JjQm9Ca0JA6INC90LXQvNCw0ZQg0LLQtdGA0YXQvdGM0L7Qs9C+INC10LvQtdC80LXQvdGC0LAg0LrQsNC90LDQu9GDINGDINGE0LDQudC70ZYgwqslc8K7LlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICIiCi0jfiAi0J/QntCf0JXQoNCV0JTQltCV0J3QndCvOiDQvdCw0YDQsNC30ZYg0L/RltC00YLRgNC40LzRg9GU0YLRjNGB0Y8g0LvQuNGI0LUg0L7QtNC40L0g0LXQu9C10LzQtdC90YIg0L3QsNC50LLQuNGJ0L7Qs9C+INGA0ZbQstC90Y8uXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogY291bGQgbm90IHBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAlZDogJXMuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICLQn9Ce0JzQmNCb0JrQkDog0L3QtSDQstC00LDQu9C+0YHRjyDQv9GA0L7QsNC90LDQu9GW0LfRg9Cy0LDRgtC4INCw0YDQs9GD0LzQtdC90YIg0LrQvtC80LDQvdC00L3QvtCz0L4g0YDRj9C00LrQsCAlZDogJXMuXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICLQn9Ce0J/QldCg0JXQlNCW0JXQndCd0K86INC10LvQtdC80LXQvdGCINC3INC90LDQt9Cy0L7RjiDCqyVzwrsg0L3QtSDRltGB0L3Rg9GULlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAi0JfQsdC10YDQtdCz0YLQuCB4bWwg0L/RgNC10LTRgdGC0LDQstC70LXQvdC90Y8g0LrQsNC90LDQu9GDINGDINGE0LDQudC7INCk0JDQmdCbINGC0LAg0LfQsNCy0LXRgNGI0LjRgtC40YHRjCIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgItCk0JDQmdCbIgotCi0jfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgotI34gbXNnc3RyICLQndC1INCy0YHRgtCw0L3QvtCy0LvRjtCy0LDRgtC4INC+0LHRgNC+0LHQvdC40LrQuCDRgdC40LPQvdCw0LvRltCyINC00LvRjyBTSUdVU1IxINGWIFNJR1VTUjIiCi0KLSN+IG1zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgotI34gbXNnc3RyICIiCi0jfiAi0JLQuNCy0LXRgdGC0Lgg0YLRgNCw0YHRg9Cy0LDQvdC90Y8g0YDQvtC30L/QvtC00ZbQu9GDINC/0LDQvOKAmdGP0YLRliAo0Y/QutGJ0L4g0LLQstGW0LzQutC90LXQvdC+INC/0YDQuCDQutC+0LzQv9GW0LvRj9GG0ZbRlykiCi0KLSN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlczogJXMiCi0jfiBtc2dzdHIgItCf0L7QvNC40LvQutCwINC/0YDQuCDQv9C+0LLRgtC+0YDQvdC+0LzRgyDRgdC60LDQvdGD0LLQsNC90L3RliDRgNC10ZTRgdGC0YDRgyDQvNC+0LTRg9C70ZbQsiAlczogJXMiCi0KLSN+IG1zZ2lkICJFcnJvciByZS1zY2FubmluZyByZWdpc3RyeSAlcyIKLSN+IG1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RgNC4INC/0L7QstGC0L7RgNC90L7QvNGDINGB0LrQsNC90YPQstCw0L3QvdGWINGA0LXRlNGB0YLRgNGDICVzIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKLSN+IG1zZ3N0ciAi0JLQvdGD0YLRgNGW0YjQvdGPINC/0L7QvNC40LvQutCwIEdTdHJlYW1lcjog0L/QvtC80LjQu9C60LAg0LfQvNGW0L3QuCDRgdGC0LDQvdGDLiIKLQotI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCi0jfiBtc2dzdHIgItC+0YDQuNCz0ZbQvdCw0LvRjNC90LUg0YDQvtC30YLQsNGI0YPQstCw0L3QvdGPINGE0LDQudC70YMg0YMg0LLQuNCz0LvRj9C00ZYgVVJJIgotCi0jfiBtc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIGRlc2NyaXB0b3IgXCIlZFwiLiIKLSN+IG1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RgNC4INC30LDQv9C40YHRg9Cy0LDQvdC90ZYg0YMg0LTQtdGB0LrRgNC40L/RgtC+0YAg0YTQsNC50LvRgyBcIiVkXCIuIgotCi0jfiBtc2dpZCAiRmlsZSBkZXNjcmlwdG9yIFwiJWRcIiBpcyBub3QgdmFsaWQuIgotI34gbXNnc3RyICLQlNC10YHQutGA0LjQv9GC0L7RgCDRhNCw0LnQu9GDIFwiJWRcIiDQvdC10LrQvtGA0LXQutGC0L3QuNC5LiIKLQotI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCi0jfiBtc2dzdHIgItC60LDQvdCw0Lsg0JfQktCG0JvQrNCd0JXQndCd0K8uLi5cbiIKZGlmZiAtLWdpdCBhL3BvL3ZpLmdtbyBiL3BvL3ZpLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkYWVmYy4uMDAwMDAwMAotLS0gYS9wby92aS5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby92aS5wbyBiL3BvL3ZpLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDk0OWUxLi4wMDAwMDAwCi0tLSBhL3BvL3ZpLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTM3NyArMCwwIEBACi0jIFZpZXRuYW1lc2UgVHJhbnNsYXRpb24gZm9yIEdTdHJlYW1lci4KLSMgQuG6o24gZOG7i2NoIHRp4bq/bmcgVmnhu4d0IGTDoG5oIGNobyBHU3RyZWFtZXIuCi0jIENvcHlyaWdodCDCqSAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0cmVhbWVyIHBhY2thZ2UuCi0jIENseXRpZSBTaWRkYWxsIDxjbHl0aWVAcml2ZXJsYW5kLm5ldC5hdT4sIDIwMDUtMjAxMC4KLSMgVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuQGdtYWlsLmNvbT4sIDIwMTItMjAxNCwgMjAxNSwgMjAxNi4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdHJlYW1lciAxLjcuOTBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxMiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMy0wMyAwNzo0NCswNzAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHRyYW5zbGF0aW9uLXRlYW0tdmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiB2aVxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCi0iWC1MYW5ndWFnZS1UZWFtLVdlYnNpdGU6IDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL3ZpLmh0bWw+XG4iCi0iWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuN1xuIgotCi1tc2dpZCAiUHJpbnQgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIgotbXNnc3RyICJIaeG7g24gdGjhu4sgcGhpw6puIGLhuqNuIGPhu6dhIEdTdHJlYW1lciIKLQotbXNnaWQgIk1ha2UgYWxsIHdhcm5pbmdzIGZhdGFsIgotbXNnc3RyICLEkOG6t3QgbeG7jWkgY+G6o25oIGLDoW8gbMOgIG5naGnDqm0gdHLhu41uZyIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICJIaeG7g24gdGjhu4sgdOG6pXQgY+G6oyBjw6FjIGxv4bqhaSBn4buhIGzhu5dpIHPhurVuIGPDsyBy4buTaSB0aG/DoXQiCi0KLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSJN4bupYyBn4buhIGzhu5dpIG3hurdjIMSR4buLbmggdOG7qyAxIChjaOG7iSBs4buXaSkgxJHhur9uIDkgKG3hu41pIHRo4bupKSBoYXkgMCAoa2jDtG5nIHh14bqldCBnw6wpIgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIk3hu6hDIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc2V0IHNwZWNpZmljIGxldmVscyBmb3IgIgotInRoZSBpbmRpdmlkdWFsIGNhdGVnb3JpZXMuIEV4YW1wbGU6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLW1zZ3N0ciAiIgotIkRhbmggc8OhY2ggxJHhu4tuaCBnaeG7m2kgYuG6sW5nIGThuqV1IHBo4bqpeSBj4bunYSDEkcO0aSDigJx0w6puX2xv4bqhaTpj4bqlcOKAnSDEkeG7gyDEkeG6t3QgY+G6pXAgcsO1IHLDoG5nICIKLSJjaG8gbeG7l2kgbG/huqFpLiBUaMOtIGThu6U6IEdTVF9BVVRPUExVRzo1LEdTVF9FTEVNRU5UXyo6MyIKLQotbXNnaWQgIkxJU1QiCi1tc2dzdHIgIkRBTkhfU8OBQ0giCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAiVOG6r3QgeHXhuqV0IGThu68gbGnhu4d1IGfhu6EgbOG7l2kgduG7m2kgbcOgdSIKLQotbXNnaWQgIiIKLSJDaGFuZ2VzIGNvbG9yaW5nIG1vZGUgb2YgdGhlIGRlYnVnIGxvZy4gUG9zc2libGUgbW9kZXM6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotbXNnc3RyICIiCi0ixJDhu5VpIGNo4bq/IMSR4buZIG3DoHUgY+G7p2Egbmjhuq10IGvDvSBn4buhIGzhu5dpLiBDw6FjIGNo4bq/IMSR4buZIGPDsyB0aOG7gyBsw6A6IG9mZiwgb24sIGRpc2FibGUsICIKLSJhdXRvLCB1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIlThuq90IGfhu6EgbOG7l2kiCi0KLW1zZ2lkICJFbmFibGUgdmVyYm9zZSBwbHVnaW4gbG9hZGluZyBkaWFnbm9zdGljcyIKLW1zZ3N0ciAiQuG6rXQgY2jhuqluIMSRb8OhbiBjaGkgdGnhur90IHZp4buHYyBu4bqhcCBwaOG6p24gYuG7lSBzdW5nIgotCi1tc2dpZCAiQ29sb24tc2VwYXJhdGVkIHBhdGhzIGNvbnRhaW5pbmcgcGx1Z2lucyIKLW1zZ3N0ciAiQ8OhYyDEkcaw4budbmcgZOG6q24gxJHhu4tuaCBnaeG7m2kgYuG6sW5nIGThuqV1IGhhaSBjaOG6pW0gbcOgIGNo4bupYSBwaOG6p24gYuG7lSBzdW5nIgotCi1tc2dpZCAiUEFUSFMiCi1tc2dzdHIgIsSQxq/hu5xOR19E4bqqTiIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwbHVnaW5zIHRvIHByZWxvYWQgaW4gYWRkaXRpb24gdG8gdGhlIGxpc3Qgc3RvcmVkIGluICIKLSJlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgiCi1tc2dzdHIgIiIKLSJEYW5oIHPDoWNoIMSR4buLbmggZ2nhu5tpIGLhurFuZyBk4bqldSBwaOG6qXkgY2jhu6lhIGPDoWMgcGjhuqduIGLhu5Ugc3VuZyBj4bqnbiBu4bqhcCB0csaw4bubYywgdGjDqm0gIgotInbDoG8gZGFuaCBzw6FjaCDEkcaw4bujYyBj4bqldCBnaeG7ryB0cm9uZyBiaeG6v24gbcO0aSB0csaw4budbmcgR1NUX1BMVUdJTl9QQVRIIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAiUEjhuqZOX0Lhu5RfU1VORyIKLQotbXNnaWQgIkRpc2FibGUgdHJhcHBpbmcgb2Ygc2VnbWVudGF0aW9uIGZhdWx0cyBkdXJpbmcgcGx1Z2luIGxvYWRpbmciCi1tc2dzdHIgIlThuq90IGNo4bupYyBuxINuZyBi4bqvdCBs4buXaSBwaMOibiDEkW/huqFuIHRyb25nIGtoaSBu4bqhcCBwaOG6p24gYuG7lSBzdW5nIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIlThuq90IGto4bqjIG7Eg25nIGPhuq1wIG5o4bqtdCBi4buZIMSRxINuZyBrw70iCi0KLW1zZ2lkICJEaXNhYmxlIHNwYXduaW5nIGEgaGVscGVyIHByb2Nlc3Mgd2hpbGUgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IgotbXNnc3RyICIiCi0iVOG6r3Qga2jhuqMgbsSDbmcgdOG6oW8gdsOgIHRo4buxYyBoaeG7h24gdGnhur9uIHRyw6xuaCBi4buVIHRy4bujIHRyb25nIGtoaSBxdcOpdCBi4buZIMSRxINuZyBrw70iCi0KLW1zZ2lkICJHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiVMO5eSBjaOG7jW4gR1N0cmVhbWVyIgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAiSGnhu4duIFTDuXkgY2jhu41uIEdTdHJlYW1lciIKLQotbXNnaWQgIlVua25vd24gb3B0aW9uIgotbXNnc3RyICJUw7l5IGNo4buNbiBs4bqhIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJUcsOsbmggR1N0cmVhbWVyIG3hu5tpIGfhurdwIG3hu5l0IGzhu5dpIHRoxrAgdmnhu4duIGzDtWkgY2h1bmcuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIiIKLSJOaOG7r25nIG5ow6AgcGjDoXQgdHJp4buDbiBHU3RyZWFtZXIgxJHDoyBxdcOhIGzGsOG7nWkgbcOgIGNoxrBhIGfDoW4gbcOjIGzhu5dpIGNobyBs4buXaSBuw6B5LiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogY29kZSBub3QgaW1wbGVtZW50ZWQuIgotbXNnc3RyICJM4buXaSBu4buZaSBi4buZIEdTdHJlYW1lcjogY2jGsGEgdmnhur90IG3DoyBjaG8gY2jhu6ljIG7Eg25nIG7DoHkuIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBlcnJvcjogc3RhdGUgY2hhbmdlIGZhaWxlZCBhbmQgc29tZSBlbGVtZW50IGZhaWxlZCB0byBwb3N0IGEgIgotInByb3BlciBlcnJvciBtZXNzYWdlIHdpdGggdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuIgotbXNnc3RyICIiCi0iTOG7l2kgR1N0cmVhbWVyOiBraMO0bmcgdGhheSDEkeG7lWkgxJHGsOG7o2MgdMOsbmggdHLhuqFuZywgdsOgIG3hu5l0IHBo4bqnbiB04butIG7DoG8gxJHDsyBraMO0bmcgIgotImfhu61pIMSRxrDhu6NjIHRow7RuZyDEkWnhu4dwIGzhu5dpIMSRw7puZyBjaOG7qWEgbMO9IGRvIGPhu6dhIGzhu5dpIG7DoHkuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkzhu5dpIG7hu5lpIGLhu5kgR1N0cmVhbWVyOiB24bqlbiDEkeG7gSDEkeG7h20uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkzhu5dpIG7hu5lpIGLhu5kgR1N0cmVhbWVyOiB24bqlbiDEkeG7gSB24buBIHR1eeG6v24gdHLDrG5oLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkzhu5dpIEdTdHJlYW1lcjogduG6pW4gxJHhu4EgdGjhu49hIHRodeG6rW4uIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBldmVudCBwcm9ibGVtLiIKLW1zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mSBHU3RyZWFtZXI6IHbhuqVuIMSR4buBIHPhu7Ega2nhu4duLiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogc2VlayBwcm9ibGVtLiIKLW1zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mSBHU3RyZWFtZXI6IHbhuqVuIMSR4buBIGRpIGNodXnhu4NuIHbhu4sgdHLDrSDEkeG7jWMuIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJM4buXaSBu4buZaSBi4buZIEdTdHJlYW1lcjogduG6pW4gxJHhu4EgY2Fwcy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mSBHU3RyZWFtZXI6IHbhuqVuIMSR4buBIHRo4bq7LiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIkLhuqNuIGPDoGkgxJHhurd0IEdTdHJlYW1lciBj4bunYSBi4bqhbiBjw7JuIHRoaeG6v3UgbeG7mXQgYuG7lSBzdW5nLiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogY2xvY2sgcHJvYmxlbS4iCi1tc2dzdHIgIkzhu5dpIEdTdHJlYW1lcjogduG6pW4gxJHhu4EgxJHhu5NuZyBo4buTLiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICLhu6huZyBk4bulbmcgbsOgeSDEkWFuZyB0aOG7rSBz4butIGThu6VuZyBjaOG7qWMgbsSDbmcgR1N0cmVhbWVyIGLhu4sgdOG6r3QuIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBzdXBwb3J0aW5nIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJUcsOsbmggR1N0cmVhbWVyIG3hu5tpIGfhurdwIG3hu5l0IGzhu5dpIHRoxrAgdmnhu4duIGjhu5cgdHLhu6MgY2h1bmcuIgotCi1tc2dpZCAiQ291bGQgbm90IGluaXRpYWxpemUgc3VwcG9ydGluZyBsaWJyYXJ5LiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIGto4bufaSDEkeG7mW5nIHRoxrAgdmnhu4duIGjhu5cgdHLhu6MuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyDEkcOzbmcgdGjGsCB2aeG7h24gaOG7lyB0cuG7oy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyBj4bqldSBow6xuaCB0aMawIHZp4buHbiBo4buXIHRy4bujLiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAiTOG7l2kgZ2nhuqNpIG3Doy4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHJlc291cmNlIGVycm9yLiIKLW1zZ3N0ciAiVHLDrG5oIEdTdHJlYW1lciBt4bubaSBn4bq3cCBt4buZdCBs4buXaSB0w6BpIG5ndXnDqm4gY2h1bmcuIgotCi1tc2dpZCAiUmVzb3VyY2Ugbm90IGZvdW5kLiIKLW1zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IHTDoGkgbmd1ecOqbi4iCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICJUw6BpIG5ndXnDqm4gxJFhbmcgYuG6rW4gaGF5IGNoxrBhIHPhurVuIHPDoG5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gdMOgaSBuZ3V5w6puIMSR4buDIMSR4buNYy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIHTDoGkgbmd1ecOqbiDEkeG7gyBnaGkuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB0w6BpIG5ndXnDqm4gxJHhu4MgxJHhu41jIHbDoCBnaGkuIgotCi1tc2dpZCAiQ291bGQgbm90IGNsb3NlIHJlc291cmNlLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIMSRw7NuZyB0w6BpIG5ndXnDqm4uIgotCi1tc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSByZXNvdXJjZS4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgdOG7qyB0w6BpIG5ndXnDqm4uIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSB2w6BvIHTDoGkgbmd1ecOqbi4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcGVyZm9ybSBzZWVrIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHRoaSBow6BuaCB2aeG7h2MgZGkgY2h1eeG7g24gduG7iyB0csOtIMSR4buNYyB0csOqbiB0w6BpIG5ndXnDqm4uIgotCi1tc2dpZCAiQ291bGQgbm90IHN5bmNocm9uaXplIG9uIHJlc291cmNlLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buTbmcgYuG7mSB0csOqbiB0w6BpIG5ndXnDqm4uIgotCi1tc2dpZCAiQ291bGQgbm90IGdldC9zZXQgc2V0dGluZ3MgZnJvbS9vbiByZXNvdXJjZS4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleS/EkeG6t3QgY8OgaSDEkeG6t3QgdOG7qy90csOqbiB0w6BpIG5ndXnDqm4uIgotCi1tc2dpZCAiTm8gc3BhY2UgbGVmdCBvbiB0aGUgcmVzb3VyY2UuIgotbXNnc3RyICJLaMO0bmcgY8OybiBraMO0bmcgZ2lhbiB0cuG7kW5nIHRyw6puIHTDoGkgbmd1ecOqbiDEkcOzLiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIktow7RuZyDEkeG7pyB0aOG6qW0gcXV54buBbiB0cnV5IGPhuq1wIHRyw6puIHTDoGkgbmd1ecOqbi4iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN0cmVhbSBlcnJvci4iCi1tc2dzdHIgIlRyw6xuaCBHU3RyZWFtZXIgbeG7m2kgZ+G6t3AgbeG7mXQgbOG7l2kgbHXhu5NuZyBjaHVuZy4iCi0KLW1zZ2lkICJFbGVtZW50IGRvZXNuJ3QgaW1wbGVtZW50IGhhbmRsaW5nIG9mIHRoaXMgc3RyZWFtLiBQbGVhc2UgZmlsZSBhIGJ1Zy4iCi1tc2dzdHIgInBo4bqnbiB04butIGtow7RuZyB0aGkgaMOgbmgga2jhuqMgbsSDbmcgcXXhuqNuIGzDvSBsdeG7k25nIG7DoHkuIEjDo3kgdGjDtG5nIGLDoW8gbOG7l2kuIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyBxdXnhur90IMSR4buLbmgga2nhu4N1IGx14buTbmcgZOG7ryBsaeG7h3UuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICJMdeG7k25nIGThu68gbGnhu4d1IMSRw7Mga2jDoWMga2nhu4N1IHbhu5tpIGx14buTbmcgbcOgIHBo4bqnbiB04butIG7DoHkgeOG7rSBsw70gxJHGsOG7o2MuIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICIiCi0iSGnhu4duIHRo4budaSBraMO0bmcgY8OzIHBo4bqnbiBtw6MgaMOzYS9naeG6o2kgbcOjIChjb2RlYykgeOG7rSBsw70gxJHGsOG7o2MgbHXhu5NuZyBraeG7g3UgxJHDsy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyBnaeG6o2kgbcOjIGx14buTbmcgZOG7ryBsaeG7h3UuIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbcOjIGjDs2EgbHXhu5NuZyBk4buvIGxp4buHdS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHTDoWNoIGvDqm5oIGx14buTbmcgZOG7ryBsaeG7h3UuIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjhu5FpIGjhu6NwIGx14buTbmcgxJHhu4MgdHJ1eeG7gW4gdGjDtG5nIHF1YSBt4buZdCBrw6puaCByacOqbmcgbOG6uy4iCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICJMdeG7k25nIGThu68gbGnhu4d1IGPDsyDEkeG7i25oIGThuqFuZyBzYWkuIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkx14buTbmcgZOG7ryBsaeG7h3UgYuG7iyBtw6MgaMOzYSB2w6Aga2jDtG5nIGjhu5cgdHLhu6MgY2jhu6ljIG7Eg25nIGdp4bqjaSBtw6MuIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAiIgotIkx14buTbmcgZOG7ryBsaeG7h3UgYuG7iyBtw6MgaMOzYSB2w6Aga2jDtG5nIHRo4buDIGdp4bqjaSBtw6MgdsOsIGNoxrBhIGN1bmcgY+G6pXAga2jDs2EgdGjDrWNoIGjhu6NwLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICJLaMO0bmcgY8OzIHRow7RuZyDEkWnhu4dwIGzhu5dpIGNobyBtaeG7gW4gJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIktow7RuZyBjw7MgdGjDtG5nIMSRaeG7h3AgY2h14bqpbiBjaG8gbWnhu4FuICVzIHbDoCBtw6MgJWQuIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICLEkOG7k25nIGjhu5MgxJHDoyBjaOG7jW4ga2jDtG5nIHRo4buDIGTDuW5nIHRyb25nIMSRxrDhu51uZyDhu5FuZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIkzhu5dpIGdoaSDEkcSDbmcga8O9IGLhu5kgbmjhu5sgdOG6oW0gdsOgbyAlczogJXMiCi0KLW1zZ2lkICJ0aXRsZSIKLW1zZ3N0ciAidOG7sWEgxJHhu4EiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIgotbXNnc3RyICJ04buxYSDEkeG7gSB0aMaw4budbmcgZMO5bmciCi0KLW1zZ2lkICJ0aXRsZSBzb3J0bmFtZSIKLW1zZ3N0ciAidMOqbiBz4bqvcCIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgInRoxrDhu51uZyBkw7luZyBjaG8gbeG7pWMgxJHDrWNoIHPhuq9wIHjhur9wIgotCi1tc2dpZCAiYXJ0aXN0IgotbXNnc3RyICJuZ2jhu4cgc8SpIgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICJuZ8aw4budaSB0aHUgbmjhuqFjIG7DoHkiCi0KLW1zZ2lkICJhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgInTDqm4gbmdo4buHIHPEqSBk4bqhbmcgdmnhur90IHThuq90IgotCi1tc2dpZCAicGVyc29uKHMpIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVjb3JkaW5nIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIoY8OhYykgbmfGsOG7nWkgY2jhu4t1IHRyw6FjaCBuaGnhu4dtIHbhu4EgYuG6o24gdGh1LCBjaG8gbeG7pWMgxJHDrWNoIHPhuq9wIHjhur9wIgotCi1tc2dpZCAiYWxidW0iCi1tc2dzdHIgInThuq1wIG5o4bqhYyIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIgotbXNnc3RyICJ04bqtcCBuaOG6oWMgY2jhu6lhIGThu68gbGnhu4d1IG7DoHkiCi0KLW1zZ2lkICJhbGJ1bSBzb3J0bmFtZSIKLW1zZ3N0ciAidMOqbiBz4bqvcCB44bq/cCB04bqtcCBuaOG6oWMiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAidOG6rXAgbmjhuqFjIGNo4bupYSBk4buvIGxp4buHdSBuw6B5LCBjaG8gbeG7pWMgxJHDrWNoIHPhuq9wIHjhur9wIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICJuZ2jhu4cgc8SpIHThuq1wIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIgotbXNnc3RyICJOZ2jhu4cgc8SpIGPhu6dhIHRvw6BuIGLhu5kgdOG6rXAgbmjhuqFjLCBuaMawIGhp4buDbiB0aOG7iyDEkcO6bmciCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3Qgc29ydG5hbWUiCi1tc2dzdHIgInTDqm4gc+G6r3Agbmdo4buHIHPEqSB04bqtcCBuaOG6oWMiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIk5naOG7hyBzxKkgY+G7p2EgdG/DoG4gYuG7mSB04bqtcCBuaOG6oWMsIHRoZW8gdGjhu6kgdOG7sSDEkcO6bmciCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICJuZ8OgeSIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAibmfDoHkgdOG6oW8gZOG7ryBsaeG7h3UgbsOgeSAoZOG6oW5nIGPhuqV1IHRyw7pjIEdEYXRlKSIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICJuZ8OgeS1naeG7nSIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAibmfDoHkgdsOgIGdp4budIG3DoCBk4buvIGxp4buHdSDEkcaw4bujYyB04bqhbyAoZOG6oW5nIGPhuqV1IHRyw7pjIEdzdERhdGVUaW1lKSIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICJ0aOG7gyBsb+G6oWkiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAidGjhu4MgbG/huqFpIGPhu6dhIGThu68gbGnhu4d1IG7DoHkiCi0KLW1zZ2lkICJjb21tZW50IgotbXNnc3RyICJnaGkgY2jDuiIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICLDvSBraeG6v24gY+G7p2EgYuG6oW4gduG7gSBuaOG6oWMgbsOgeSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgImdoaSBjaMO6IGvDqW8gZMOgaSIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKLW1zZ3N0ciAiIgotInbEg24gYuG6o24gdOG7sSBkbyDEkeG6t3QgZ2hpIGNow7ogduG7gSBk4buvIGxp4buHdSBkxrDhu5tpIGThuqFuZyBrZXk9dmFsdWUgKGtow7NhPWdpw6EgdHLhu4spIGhheSAiCi0ia2V5W2VuXT1jb21tZW50IChraMOzYVtlbl09Z2hpIGNow7opIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICJz4buRIHLDo25oIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIGluc2lkZSBhIGNvbGxlY3Rpb24iCi1tc2dzdHIgInPhu5EgdGjhu6kgdOG7sSByw6NuaCDhu58gdHJvbmcgYuG7mSBzxrB1IHThuq1wIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgInPhu5EgbMaw4bujbmcgcsOjbmgiCi0KLW1zZ2lkICJjb3VudCBvZiB0cmFja3MgaW5zaWRlIGNvbGxlY3Rpb24gdGhpcyB0cmFjayBiZWxvbmdzIHRvIgotbXNnc3RyICJz4buRIMSR4bq/bSByw6NuaCDhu58gdHJvbmcgYuG7mSBzxrB1IHThuq1wIgotCi1tc2dpZCAiZGlzYyBudW1iZXIiCi1tc2dzdHIgInPhu5EgxJHEqWEiCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICJz4buRIHRo4bupIHThu7EgxJHEqWEg4bufIHRyb25nIGLhu5kgc8awdSB04bqtcCIKLQotbXNnaWQgImRpc2MgY291bnQiCi1tc2dzdHIgInPhu5EgxJHEqWEiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAic+G7kSBsxrDhu6NuZyDEkcSpYSDhu58gdHJvbmcgYuG7mSBzxrB1IHThuq1wIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgIsSR4buLYSDEkWnhu4NtIgotCi1tc2dpZCAiIgotIk9yaWdpbiBvZiBtZWRpYSBhcyBhIFVSSSAobG9jYXRpb24sIHdoZXJlIHRoZSBvcmlnaW5hbCBvZiB0aGUgZmlsZSBvciBzdHJlYW0gIgotImlzIGhvc3RlZCkiCi1tc2dzdHIgIiIKLSJOZ3Xhu5NuIGPhu6dhIG5o4bqhYy9waGltIGTGsOG7m2kgZOG6oW5nIG3hu5l0IMSR4buLYSBjaOG7iSBVUkkgKMSR4buLYSBjaOG7iSBn4buRYyBj4bunYSB04bqtcCB0aW4gaGF5ICIKLSJsdeG7k25nKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICJ0cmFuZyBjaOG7pyIKLQotbXNnaWQgIkhvbWVwYWdlIGZvciB0aGlzIG1lZGlhIChpLmUuIGFydGlzdCBvciBtb3ZpZSBob21lcGFnZSkiCi1tc2dzdHIgIlRyYW5nIGNo4bunIGPhu6dhIG5naOG7hyBzxKkgaGF5IHBoaW0iCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAibcO0IHThuqMiCi0KLW1zZ2lkICJzaG9ydCB0ZXh0IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRhdGEiCi1tc2dzdHIgImLDoGkgdMOzbSB04bqvdCBkaeG7hW4gdOG6oyBu4buZaSBkdW5nIGPhu6dhIGThu68gbGnhu4d1IG7DoHkiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICJwaGnDqm4gYuG6o24iCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAicGhpw6puIGLhuqNuIGPhu6dhIGThu68gbGnhu4d1IG7DoHkiCi0KLW1zZ2lkICJJU1JDIgotbXNnc3RyICJJU1JDIgotCi1tc2dpZCAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotbXNnc3RyICIiCi0iTHXhuq10IHRodSDDom0gVGnDqnUgY2h14bqpbiBRdeG7kWMgdOG6vyAoSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSkg4oCUIHhlbSAiCi0iPGh0dHA6Ly93d3cuaWZwaS5vcmcvaXNyYy8+IgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICJ04buVIGNo4bupYyIKLQotbXNnaWQgImNvcHlyaWdodCIKLW1zZ3N0ciAidMOhYyBxdXnhu4FuIgotCi1tc2dpZCAiY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAidGjDtG5nIGLDoW8gdMOhYyBxdXnhu4FuIGPhu6dhIGThu68gbGnhu4d1IG7DoHkiCi0KLW1zZ2lkICJjb3B5cmlnaHQgdXJpIgotbXNnc3RyICJVUkkgdMOhYyBxdXnhu4FuIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLEkeG7i2EgY2jhu4kgVVJJIMSR4bq/biB0aMO0bmcgYsOhbyB0w6FjIHF1eeG7gW4gY+G7p2EgZOG7ryBsaeG7h3UgbsOgeSIKLQotbXNnaWQgImVuY29kZWQgYnkiCi1tc2dzdHIgIm3DoSBow7NhIGLhu59pIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAidMOqbiBj4bunYSBuZ8aw4budaSBoYXkgdOG7lSBjaOG7qWMgxJHDoyBtw6MgaMOzYSB04bqtcCB0aW4iCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICJsacOqbiBs4bqhYyIKLQotbXNnaWQgImNvbnRhY3QgaW5mb3JtYXRpb24iCi1tc2dzdHIgInRow7RuZyB0aW4gbGnDqm4gbOG6oWMiCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICJnaeG6pXkgcGjDqXAiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgImdp4bqleSBwaMOpcCBj4bunYSBk4buvIGxp4buHdSIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICJVUkkgZ2nhuqV5IHBow6lwIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLEkeG7i2EgY2jhu4kgVVJJIMSR4bq/biBnaeG6pXkgcGjDqXAgY+G7p2EgZOG7ryBsaeG7h3UgbsOgeSIKLQotbXNnaWQgInBlcmZvcm1lciIKLW1zZ3N0ciAibmfGsOG7nWkgYmnhu4N1IGRp4buFbiIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICJuZ8aw4budaSBiaeG7g3UgZGnhu4VuIG5o4bqhYy/huqNuaCBuw6B5IgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgIm5nxrDhu51pIHNv4bqhbiIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAiKG5o4buvbmcpIG5nxrDhu51pIMSRw6Mgc2/huqFuIGLhuqNuIHRodSBuw6B5IgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICJuZ8aw4budaSBjaOG7iSBodXkiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgInRoYW5oIGzhu41jIG5nxrDhu51pIGNo4buJIGh1eSAvIGJp4buDdSBkaeG7hW4iCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAidGjhu51pIGzGsOG7o25nIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgInRo4budaSBnaWFuIGLhurFuZyDEkcahbiB24buLIHRo4budaSBnaWFuIGtp4buDdSBHU3RyZWFtZXIgKHBo4bqnbiB04bu3IGdpw6J5OiBucykiCi0KLW1zZ2lkICJjb2RlYyIKLW1zZ3N0ciAibcOjIGjDs2EiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImPDoWNoIG3DoyBow7NhL2dp4bqjaSBtw6AgZOG7ryBsaeG7h3UgbsOgeSIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICJjb2RlYyBj4bunYSBwaGltIgotCi1tc2dpZCAiY29kZWMgdGhlIHZpZGVvIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICJjw6FjaCBtw6MgaMOzYS9naeG6o2kgbcOjIGThu68gbGnhu4d1IOG6o25oIMSR4buZbmcgbsOgeSIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICJjb2RlYyDDom0gdGhhbmgiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImPDoWNoIG3DoyBow7NhL2dp4bqjaSBtw6MgZOG7ryBsaeG7h3Ugw6JtIHRoYW5oIG7DoHkiCi0KLW1zZ2lkICJzdWJ0aXRsZSBjb2RlYyIKLW1zZ3N0ciAiY29kZWMgcGjhu6UgxJHhu4EiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgImNvZGVjIHRoZW8gxJHDsyBk4buvIGxp4buHdSBwaOG7pSDEkeG7gSDEkcaw4bujYyBtw6MgaMOzYSIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgIsSR4buLbmggZOG6oW5nIGNo4bupYSIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLEkeG7i25oIGThuqFuZyBjaOG7qWEgZOG7ryBsaeG7h3UgxJHGsOG7o2MgY+G6pXQgZ2nhu68iCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICJ04buRYyDEkeG7mSBiw610IgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAiIgotInPhu5EgYsOtdCBk4buvIGxp4buHdSB0cm9uZyBt4buXaSBnacOieSBwaMOhdCwgY2jDrW5oIHjDoWMgaGF5IHRydW5nIGLDrG5oLCB0aGVvIGLDrXQvZ2nDonkiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgInThu5FjIMSR4buZIGLDrXQga2jDtG5nIMSRw6FuZyBr4buDIgotCi1tc2dpZCAibm9taW5hbCBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAic+G7kSBiw610IGThu68gbGnhu4d1IHRyb25nIG3hu5dpIGdpw6J5IHBow6F0LCBraMO0bmcgxJHDoW5nIGvhu4MsIHRoZW8gYsOtdC9nacOieSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAidOG7kWMgxJHhu5kgYsOtdCB04buRaSB0aGnhu4N1IgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAic+G7kSBiw610IGThu68gbGnhu4d1IHRyb25nIG3hu5dpIGdpw6J5IHBow6F0LCB04buRaSB0aGnhu4N1LCB0aGVvIGLDrXQvZ2nDonkiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgInThu5FjIMSR4buZIGLDrXQgdOG7kWkgxJFhIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAic+G7kSBiw610IGThu68gbGnhu4d1IHRyb25nIG3hu5dpIGdpw6J5IMSRxrDhu6NjIHBow6F0LCB04buRaSDEkWEsIHRoZW8gYsOtdC9nacOieSIKLQotbXNnaWQgImVuY29kZXIiCi1tc2dzdHIgIm3DoyBow7NhIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAiYuG7mSBtw6MgaMOzYSDEkcaw4bujYyBkw7luZyDEkeG7gyBtw6MgaMOzYSBsdeG7k25nIG7DoHkiCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgInBoacOqbiBi4bqjbiBi4buZIGdp4bqjaSBtw6MiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICJwaGnDqm4gYuG6o24gY+G7p2EgYuG7mSBtw6MgaMOzYSDEkcaw4bujYyBkw7luZyDEkeG7gyBtw6MgaMOzYSBsdeG7k25nIG7DoHkiCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgInPhu5Egc8OqLXJpIgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAic+G7kSBzw6otcmkgY+G7p2EgcsOjbmgiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHRyYWNrIGdhaW4iCi1tc2dzdHIgIm5o4bubIMOibSBsxrDhu6NuZyByw6NuaCIKLQotbXNnaWQgInRyYWNrIGdhaW4gaW4gZGIiCi1tc2dzdHIgInTEg25nIGhheSBnaeG6o20gw6JtIGzGsOG7o25nIGPhu6dhIHLDo25oIHTDrW5oIHRoZW8gxJHhu4EteGktYmVuIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICJuaOG7myDDom0gbMaw4bujbmcgdOG7kWkgxJFhIHLDo25oIgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgIsOibSBsxrDhu6NuZyB04buRaSDEkWEgYuG6oW4gbXXhu5FuIGNobyByw6NuaCBuw6B5IgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICJuaOG7myDDom0gbMaw4bujbmcgdOG6rXAgbmjhuqFjL+G6o25oIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAidMSDbmcgaGF5IGdp4bqjbSDDom0gbMaw4bujbmcgY+G7p2EgdOG6rXAgbmjhuqFjL+G6o25oIHTDrW5oIHRoZW8gxJHhu4EteGktYmVuIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICJuaOG7myDDom0gbMaw4bujbmcgdOG7kWkgxJFhIHThuq1wIG5o4bqhYy/huqNuaCIKLQotbXNnaWQgInBlYWsgb2YgdGhlIGFsYnVtIgotbXNnc3RyICLDom0gbMaw4bujbmcgdOG7kWkgxJFhIGLhuqFuIG114buRbiBjaG8gdOG6rXAgbmjhuqFjL+G6o25oIG7DoHkiCi0KLW1zZ2lkICJyZXBsYXlnYWluIHJlZmVyZW5jZSBsZXZlbCIKLW1zZ3N0ciAibOG7m3AgY2jhu4kgZOG6q24ga2h14bq/Y2ggxJHhuqFpIHBow6F0IGzhuqFpIgotCi1tc2dpZCAicmVmZXJlbmNlIGxldmVsIG9mIHRyYWNrIGFuZCBhbGJ1bSBnYWluIHZhbHVlcyIKLW1zZ3N0ciAibOG7m3AgY2jhu4kgZOG6q24gY8OhYyBnacOhIHRy4buLIGtodeG6v2NoIMSR4bqhaSBj4bunYSByw6NuaCB2w6AgdOG6rXAgbmjhuqFjIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAibcOjIG5nw7RuIG5n4buvIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAiIgotIm3DoyBuZ8O0biBuZ+G7ryBjaG8gbHXhu5NuZyBk4buvIGxp4buHdSBuw6B5LCB0w7l5IHRoZW8gdGnDqnUgY2h14bqpbiBJU08tNjM5LTEgaG/hurdjICIKLSJJU08tNjM5LTIiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICJUw6puIG5nw7RuIG5n4buvIgotCi1tc2dpZCAiZnJlZWZvcm0gbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgdGhpcyBzdHJlYW0gaXMgaW4iCi1tc2dzdHIgInTDqm4gZOG6oW5nIHThu7EgZG8gY+G7p2EgbmfDtG4gbmfhu68gbHXhu5NuZyBk4buvIGxp4buHdSBuw6B5IGzDoCB0cm9uZyIKLQotbXNnaWQgImltYWdlIgotbXNnc3RyICLhuqNuaCIKLQotbXNnaWQgImltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIuG6o25oIGxpw6puIHF1YW4gxJHhur9uIGx14buTbmcgbsOgeSIKLQotIy4gVFJBTlNMQVRPUlM6ICdwcmV2aWV3IGltYWdlJyA9IGltYWdlIHRoYXQgc2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBmdWxsIGltYWdlCi1tc2dpZCAicHJldmlldyBpbWFnZSIKLW1zZ3N0ciAi4bqjbmggeGVtIHRo4butIgotCi1tc2dpZCAicHJldmlldyBpbWFnZSByZWxhdGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICLhuqNuaCB4ZW0gdGjhu60gbGnDqm4gcXVhbiDEkeG6v24gbHXhu5NuZyBk4buvIGxp4buHdSBuw6B5IgotCi1tc2dpZCAiYXR0YWNobWVudCIKLW1zZ3N0ciAixJHDrW5oIGvDqG0iCi0KLW1zZ2lkICJmaWxlIGF0dGFjaGVkIHRvIHRoaXMgc3RyZWFtIgotbXNnc3RyICJ04bqtcCB0aW4gxJHDrW5oIGvDqG0gbHXhu5NuZyBuw6B5IgotCi1tc2dpZCAiYmVhdHMgcGVyIG1pbnV0ZSIKLW1zZ3N0ciAidGnhur9uZyBuaOG7i3AgxJHhuq1wIG3hu5dpIHBow7p0IgotCi1tc2dpZCAibnVtYmVyIG9mIGJlYXRzIHBlciBtaW51dGUgaW4gYXVkaW8iCi1tc2dzdHIgInPhu5EgdGnhur9uZyBuaOG7i3AgdHJvbmcgbeG7l2kgcGjDunQgw6JtIHRoYW5oIgotCi1tc2dpZCAia2V5d29yZHMiCi1tc2dzdHIgInThu6sga2jDs2EiCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAiY8OhYyB04burIGtow7NhIMSR4buLbmggZ2nhu5tpIGLhurFuZyBk4bqldSBwaOG6qXksIGRp4buFbiB04bqjIG7hu5lpIGR1bmciCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbmFtZSIKLW1zZ3N0ciAidMOqbiDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICIiCi0iduG7iyB0csOtIG1pw6p1IHThuqMgY2hvIG5nxrDhu51pIMSR4buNYyDEkcaw4bujYyBj4bunYSBuxqFpIOG7nyDEkcOzIG5o4bqhYy9waMOtbSDEkcOjIMSRxrDhu6NjIHRodSBoYXkgdOG6oW8iCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgInbEqSDEkeG7mSDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSIKLQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAiIgotInbEqSDEkeG7mSDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyB0aHUgaGF5IHThuqFvLCB0aGVvIMSR4buZIHTDuXkgdGhlbyAiCi0iV0dTODQgKHjDrWNoIMSR4bqhbyBsw6Agc+G7kSBraMO0bmcsIMSR4buZIHbEqSBOYW0gY8OzIHPhu5Egw6JtKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBsb25naXR1ZGUiCi1tc2dzdHIgIsSR4buZIGtpbmggxJHhu4tuaCB24buLIMSR4buLYSBsw70iCi0KLW1zZ2lkICIiCi0iZ2VvIGxvbmdpdHVkZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gIgotImRlZ3JlZXMgYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGF0IHRoZSBwcmltZSBtZXJpZGlhbiBpbiBHcmVlbndpY2gvVUssICAiCi0ibmVnYXRpdmUgdmFsdWVzIGZvciB3ZXN0ZXJuIGxvbmdpdHVkZXMpIgotbXNnc3RyICIiCi0ia2luaCDEkeG7mSDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyB0aHUgaGF5IHThuqFvLCB0aGVvIMSR4buZIHTDuXkgdGhlbyAiCi0iV0dTODQgKGtpbmggdHV54bq/biBn4buRYyDhu58gUXXhu5FjIEFuaCBsw6Agc+G7kSBraMO0bmcsIMSR4buZIGtpbmggVMOieSBjw7Mgc+G7kSDDom0pIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAixJHhu5kgY2FvIMSR4buLbmggduG7iyDEkeG7i2EgbMO9IgotCi1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAiIgotIsSR4buZIGNhbyDEkeG7i25oIHbhu4sgxJHhu4thIGzDvSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyB0aHUgaGF5IHThuqFvLCB0aGVvIG3DqXQgdMO5eSB0aGVvICIKLSJXU0c4NCAobeG6t3QgYmnhu4NuIHRydW5nIGLDrG5oIGzDoCBz4buRIGtow7RuZykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY291bnRyeSIKLW1zZ3N0ciAiduG7iyB0csOtIMSR4buLYSBsw70gY+G7p2EgcXXhu5FjIGdpYSIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0icXXhu5FjIGdpYSAodMOqbiB0aeG6v25nIEFuaCwgdi5kLiDigJxWaWV0bmFt4oCdKSDhu58gxJHDsyBuaOG6oWMvcGhpbSDEkcOjIMSRxrDhu6NjIHF1YXkvdGh1IgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgInbhu4sgdHLDrSDEkeG7i2EgbMO9IGPhu6dhIHRow6BuaCBwaOG7kSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICIiCi0idGjDoG5oIHBo4buRICh0w6puIHRp4bq/bmcgQW5oLCB2LmQuIOKAnEhhbm9p4oCdKSDhu58gxJHDsyBuaOG6oWMvcGjDrW0gxJHDoyDEkcaw4bujYyBxdWF5L3RodSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBzdWJsb2NhdGlvbiIKLW1zZ3N0ciAiduG7iyB0csOtIHBo4bulIMSR4buLYSBsw70iCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAiIgotIm3hu5l0IHbDuW5nIGLDqm4gdHJvbmcgdGjDoG5oIHBo4buRIOG7nyDEkcOzIGThu68gbGnhu4d1IMSRYSBwaMawxqFuZyB0aeG7h24gxJHDoyDEkcaw4bujYyB04bqhbyBoYXkgc+G6o24gIgotInh14bqldCAodi5kLiBow6BuZyB4w7NtKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBob3Jpem9udGFsIGVycm9yIgotbXNnc3RyICJs4buXaSB24buLIHRyw60gxJHGsOG7nW5nIGNow6JuIHRy4budaSB0aGVvIFRyw6FpIMSQ4bqldCIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICJjaOG7nSDEkeG7o2kgbeG7mXQgbOG7l2kgY+G7p2EgxJFvIGzGsOG7nW5nIHbhu4sgdHLDrSDEkcaw4budbmcgbuG6sW0gbmdhbmcgKHTDrW5oIGLhurFuZyBtw6l0KSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBtb3ZlbWVudCBzcGVlZCIKLW1zZ3N0ciAidOG7kWMgxJHhu5kgZGkgY2h1eeG7g24gdGhlbyB24buLIHRyw60gxJHhuqFpIGzDvSIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAiIgotInThu5FjIMSR4buZIGRpIGNodXnhu4NuIGPhu6dhIHRoaeG6v3QgYuG7iyBi4bqvdCB0cm9uZyBraGkgdGjhu7FjIGhp4buHbiB2aeG7h2MgYuG6r3QgdGhlbyBtaWxpZ2nDonkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICJoxrDhu5tuZyBkaSBjaHV54buDbiB0aGVvIHbhu4sgdHLDrSDEkeG6oWkgbMO9IgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0ibmfhu6Ugw70gaMaw4bubbmcgZGkgY2h1eeG7g24gY+G7p2EgdGhp4bq/dCBi4buLIMSRYW5nIGLhuq90IHBoxrDGoW5nIHRp4buHbi4gR2nDoSB0cuG7iyBuw6B5IMSRxrDhu6NjICIKLSLEkeG6oWkgZGnhu4duIGLhurFuZyDEkeG7mSB0aGVvIGThuqV1IHBo4bqpeSDEkeG7mW5nOiAwIGzDoCBC4bqvYyDEkeG6oWkgbMO9LCB2w6AgZ2nDoSB0cuG7iyB0xINuZyB0aGVvICIKLSJjaGnhu4F1IGtpbSDEkeG7k25nIGjhu5MuIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNhcHR1cmUgZGlyZWN0aW9uIgotbXNnc3RyICJoxrDhu5tuZyBi4bqvdCB0aGVvIHbhu4sgdHLDrSDEkeG6oWkgbMO9IgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0iY2hvIGJp4bq/dCBy4bqxbmcgaMaw4bubbmcgdGhp4bq/dCBi4buLIMSRYW5nIGNo4buJIGtoaSBi4bqvdCBwaMawxqFuZyB0aeG7h24uIEdpw6EgdHLhu4sgbsOgeSDEkcaw4bujYyAiCi0ixJHhuqFpIGRp4buHbiBi4bqxbmcgxJHhu5kgdGhlbyBk4bqldSBwaOG6qXkgxJHhu5luZzogMCBsw6AgY+G7sWMgQuG6r2MsIHbDoCBnacOhIHRy4buLIHTEg25nIHRoZW8gIgotImNoaeG7gXUga2ltIMSR4buTbmcgaOG7ky4iCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAiaGnhu4duIHTDqm4iCi0KLW1zZ2lkICJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tIgotbXNnc3RyICJUw6puIGPhu6dhIGJ14buVaSBiaeG7g3UgZGnhu4VuIFRWL3BvZGNhc3QvYuG7mSBsw6AgZ+G7kWMgY+G7p2EgcGjGsMahbmcgdGnhu4duIG7DoHkiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgImhp4buHbiB0w6puIG5n4bqvbiIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAiIgotIlTDqm4gY+G7p2EgY3Xhu5ljIGJp4buDdSBkaeG7hW4gVFYvcG9kY2FzdC9i4buZIGzDoCBn4buRYyBj4bunYSBwaMawxqFuZyB0aeG7h24gbsOgeSwgY2hvIG3hu6VjICIKLSLEkcOtY2ggc+G6r3AgeOG6v3AiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAic+G7kSB0w6xuaCB0aeG6v3QiCi0KLW1zZ2lkICJUaGUgZXBpc29kZSBudW1iZXIgaW4gdGhlIHNlYXNvbiB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiU+G7kSB0aOG7qSB04buxIHTDrG5oIHRp4bq/dCB0cm9uZyBtw7lhIGN1bmcgY+G6pXAgcGjGsMahbmcgdGnhu4duIG7DoHkiCi0KLW1zZ2lkICJzZWFzb24gbnVtYmVyIgotbXNnc3RyICJz4buRIG3DuWEiCi0KLW1zZ2lkICJUaGUgc2Vhc29uIG51bWJlciBvZiB0aGUgc2hvdyB0aGUgbWVkaWEgaXMgcGFydCBvZiIKLW1zZ3N0ciAiU+G7kSB0aOG7qSB04buxIG3DuWEgdHJvbmcgY3Xhu5ljIGJp4buDdSBkaeG7hW4gY3VuZyBj4bqlcCBwaMawxqFuZyB0aeG7h24gbsOgeSIKLQotbXNnaWQgImx5cmljcyIKLW1zZ3N0ciAibOG7nWkgbmjhuqFjIgotCi1tc2dpZCAiVGhlIGx5cmljcyBvZiB0aGUgbWVkaWEsIGNvbW1vbmx5IHVzZWQgZm9yIHNvbmdzIgotbXNnc3RyICJM4budaSBuaOG6oWMgY+G7p2EgcGjGsMahbmcgdGnhu4duLCB0aMaw4budbmcgZMO5bmcgY2hvIGLDoGkgaMOhdCIKLQotbXNnaWQgImNvbXBvc2VyIHNvcnRuYW1lIgotbXNnc3RyICJ0w6puIHPhuq9wIG5o4bqhYyBzxKkiCi0KLW1zZ2lkICJwZXJzb24ocykgd2hvIGNvbXBvc2VkIHRoZSByZWNvcmRpbmcsIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICIobmjhu69uZykgbmfGsOG7nWkgxJHDoyBzb+G6oW4gYuG6o24gdGh1LCBkw6BuaCBjaG8gbeG7pWMgxJHDrWNoIHPhuq9wIHjhur9wIgotCi1tc2dpZCAiZ3JvdXBpbmciCi1tc2dzdHIgIm5ow7NtIGzhuqFpIgotCi1tc2dpZCAiIgotIkdyb3VwcyByZWxhdGVkIG1lZGlhIHRoYXQgc3BhbnMgbXVsdGlwbGUgdHJhY2tzLCBsaWtlIHRoZSBkaWZmZXJlbnQgcGllY2VzICIKLSJvZiBhIGNvbmNlcnRvLiBJdCBpcyBhIGhpZ2hlciBsZXZlbCB0aGFuIGEgdHJhY2ssIGJ1dCBsb3dlciB0aGFuIGFuIGFsYnVtIgotbXNnc3RyICIiCi0iTmjDs20gbOG6oWkgY8OhYyBwaMawxqFuZyB0aeG7h24gbGnDqm4gcXVhbiBtw6AgY2hp4bq/bSBnaeG7ryBuaGnhu4F1IHLDo25oIGtow6FjIG5oYXUgKHYuZC4gIgotImPDoWMgcGjhuqduIGtow6FjIG5oYXUgY+G7p2EgbeG7mXQgY8O0bmd4ZWN0w7QpLiBD4bqlcCBuw6B5IGNhbyBoxqFuIHLDo25oIGPDsm4gdGjhuqVwIGjGoW4gdOG6rXAgIgotIm5o4bqhYy4iCi0KLW1zZ2lkICJ1c2VyIHJhdGluZyIKLW1zZ3N0ciAixJHDoW5oIGdpw6EgZG8gbmfGsOG7nWkgZMO5bmciCi0KLW1zZ2lkICIiCi0iUmF0aW5nIGF0dHJpYnV0ZWQgYnkgYSB1c2VyLiBUaGUgaGlnaGVyIHRoZSByYW5rLCB0aGUgbW9yZSB0aGUgdXNlciBsaWtlcyAiCi0idGhpcyBtZWRpYSIKLW1zZ3N0ciAiIgotIsSQw6FuaCBnacOhIGLhu59pIG5nxrDhu51pIGTDuW5nLiBDw6BuZyBjYW8gxJFp4buDbSBjw6BuZyBuaGnhu4F1IG5nxrDhu51pIGTDuW5nIHRow61jaCBuaOG6oWMvcGhpbSAiCi0ibsOgeSIKLQotbXNnaWQgImRldmljZSBtYW51ZmFjdHVyZXIiCi1tc2dzdHIgIm5ow6AgY2jhur8gdOG6oW8gdGhp4bq/dCBi4buLIgotCi1tc2dpZCAiTWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTmjDoCBjaOG6vyB04bqhbyBj4bunYSB0aGnhur90IGLhu4sgxJHGsOG7o2MgZMO5bmcgxJHhu4MgdOG6oW8gcGjGsMahbmcgdGnhu4duIG7DoHkiCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgIm3huqt1IHRoaeG6v3QgYuG7iyIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAiTcO0IGjDrG5oIGPhu6dhIHRoaeG6v3QgYuG7iyDEkcaw4bujYyBkw7luZyDEkeG7gyB04bqhbyBwaMawxqFuZyB0aeG7h24gbsOgeSIKLQotbXNnaWQgImFwcGxpY2F0aW9uIG5hbWUiCi1tc2dzdHIgInTDqm4g4bupbmcgZOG7pW5nIgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICLhu6huZyBk4bulbmcgc+G7rSBk4bulbmcgxJHhu4MgdOG6oW8gxJFhIHBoxrDGoW5nIHRp4buHbiIKLQotbXNnaWQgImFwcGxpY2F0aW9uIGRhdGEiCi1tc2dzdHIgImThu68gbGnhu4d1IOG7qW5nIGThu6VuZyIKLQotbXNnaWQgIkFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHRvIGJlIHNlcmlhbGl6ZWQgaW50byB0aGUgbWVkaWEiCi1tc2dzdHIgIiIKLSJE4buvIGxp4buHdSDhu6luZyBk4bulbmcgdMO5eSDDvSDEkeG7gyDEkcaw4bujYyB44bq/cCB0aOG7qSB04buxIHbDoG8gdHJvbmcgxJFhIHBoxrDGoW5nIHRp4buHbiAobWVkaWEpIgotCi1tc2dpZCAiaW1hZ2Ugb3JpZW50YXRpb24iCi1tc2dzdHIgImjGsOG7m25nIOG6o25oIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICJIxrDhu5tuZyBtw6Ag4bqjbmggbsOqbiDEkcaw4bujYyBxdWF5IGhv4bq3YyBs4bqtdCB0csaw4bubYyBraGkgaGnhu4NuIHRo4buLIgotCi1tc2dpZCAicHVibGlzaGVyIgotbXNnc3RyICJuaMOgIHh14bqldCBi4bqjbiIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAiVMOqbiBj4bunYSBuaMOjbiBoYXkgbmjDoCB4deG6pXQgYuG6o24iCi0KLW1zZ2lkICJpbnRlcnByZXRlZC1ieSIKLW1zZ3N0ciAicGhpw6puLWThu4tjaC1i4bufaSIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICJUaMO0bmcgdGluIHbhu4EgbmfGsOG7nWkgxJHhu6luZyBzYXUgcGjhu5FpIHbDoCBiacOqbiB04bqtcCBs4bqhaSIKLQotbXNnaWQgIm1pZGktYmFzZS1ub3RlIgotbXNnc3RyICJtaWRpLWJhc2Utbm90ZSIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAiU+G7kSBnaGkgY2jDuiBtaWRpIGPhu6dhIHLDo25oIMOibSB0aGFuaC4iCi0KLW1zZ2lkICJwcml2YXRlLWRhdGEiCi1tc2dzdHIgImThu68tbGnhu4d1LXJpw6puZyIKLQotbXNnaWQgIlByaXZhdGUgZGF0YSIKLW1zZ3N0ciAiROG7ryBsaeG7h3UgcmnDqm5nIgotCi1tc2dpZCAiLCAiCi1tc2dzdHIgIiwgIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBi4buZIHRp4bq/cCBo4bujcCB24bubaSBVUkkgZMOgbmggY2hvIGdpYW8gdGjhu6ljICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICJLaMO0bmcgaOG7lyB0cuG7oyBsxrDhu6NjIMSR4buTIFVSSSDigJwlc+KAnSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIgotbXNnc3RyICJM4buWSTogdOG7qyBwaOG6p24gdOG7rSAlczogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSJUaMO0bmcgdGluIGfhu6EgbOG7l2kgdGjDqm06XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzb3VyY2UgW3Npbms9JXNAJXBdIgotbXNnc3RyICJsacOqbiBr4bq/dCBraMO0bmcgY8OzIG5ndeG7k24gW3Npbms9JXNAJXBdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgImxpw6puIGvhur90IGtow7RuZyBjw7Mgc2luayBbbmd14buTbj0lc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICJraMO0bmcgY8OzIHRodeG7mWMgdMOtbmgg4oCcJXPigJ0gdHJvbmcgcGjhuqduIHThu60g4oCcJXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IHNldCBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIgdG8gXCIlc1wiIgotbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhurd0IHRodeG7mWMgdMOtbmgg4oCcJXPigJ0gdHJvbmcgcGjhuqduIHThu60g4oCcJXPigJ0gdGjDoG5oIOKAnCVz4oCdIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBsacOqbiBr4bq/dCB0cuG7hS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgImtow7RuZyB0aOG7gyBsacOqbiBr4bq/dCAlcyDEkeG6v24gJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgImtow7RuZyBjw7MgcGjhuqduIHThu60g4oCcJXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCByZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgImfhurdwIHRoYW0gY2hp4bq/dSBraMO0bmcgY+G6p24gXCIlc1wiIG7Dqm4gYuG7jyBxdWEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICJn4bq3cCB0aGFtIGNoaeG6v3UgxJHhu4dtIGtow7RuZyBj4bqnbiBcIiVzXCIgbsOqbiBi4buPIHF1YSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w6FjaCBjYXBzIOKAnCVz4oCdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiIgotImtow7RuZyBjw7MgcGjhuqduIHThu60gcXXhuqNuIGzDvSB2aeG7h2MgcGjDom4gcGjhu5FpIGThu68gbGnhu4d1IHbDoG8gxJHhu4dtIGtow6FjIG5oYXUsIGNobyDEkeG7i2EgIgotIsSRaeG7g20g4oCcJXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc291cmNlIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi1tc2dzdHIgImtow7RuZyBjw7MgcGjhuqduIHThu60gbmd14buTbiBjaG8gVVJJIOKAnCVz4oCdIgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICJs4buXaSBjw7ogcGjDoXAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICJraMO0bmcgY2hvIHBow6lwIG5o4buLIHBow6JuIHRy4buRbmcgxJHGsOG7o2MgZ2hpIHLDtSDigJwlc+KAnSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBiaW4gXCIlc1wiLCB1bnBhY2tpbmcgZWxlbWVudHMiCi1tc2dzdHIgImtow7RuZyBjw7Mgbmjhu4sgcGjDom4g4oCcJXPigJ0sIMSRYW5nIGdp4bqjaSBuw6luIGPDoWMgcGjhuqduIHThu60iCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAia2jDtG5nIGNobyBwaMOpcCDEkcaw4budbmcg4buRbmcgdHLhu5FuZyIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICJOaGnhu4F1IGLhu5kgxJHhu4dtIGLhu4sgYuG7jy4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIlbhuqVuIMSR4buBIGx14buTbmcgZOG7ryBsaeG7h3UgbuG7mWkgYuG7mS4iCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotbXNnc3RyICJM4buXaSBsdeG7k25nIGThu68gbGnhu4d1IG7hu5lpIGLhu5kuIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICJM4buXaSDEkeG7k25nIGjhu5MgbuG7mWkgYuG7mS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDDoW5oIHjhuqEgYuG7mSBuaOG7myDEkeG7h20uIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMiCi1tc2dzdHIgIkzhu41jIHThu5FpIMSRYSIKLQotbXNnaWQgIiIKLSJSZXN0cmljdCB0aGUgcG9zc2libGUgYWxsb3dlZCBjYXBhYmlsaXRpZXMgKE5VTEwgbWVhbnMgQU5ZKS4gU2V0dGluZyB0aGlzICIKLSJwcm9wZXJ0eSB0YWtlcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VwcGxpZWQgR3N0Q2FwcyBvYmplY3QuIgotbXNnc3RyICIiCi0iSOG6oW4gY2jhur8gY8OhYyBraOG6oyBuxINuZyBjw7MgdGjhu4MgY2hvIHBow6lwIChOVUxMIFt2w7QgZ2nDoSB0cuG7i10gY2hvIHBow6lwIHThuqV0IGPhuqMpLiAiCi0ixJDhurd0IHRodeG7mWMgdMOtbmggbsOgeSB0aMOsIGNo4bqlcCBuaOG6rW4gdGhhbSBjaGnhur91IMSR4bq/biDEkeG7kWkgdMaw4bujbmcgR3N0Q2FwcyDEkcOjIGN1bmcgIgotImPhuqVwLiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIlRoYXkgxJHhu5VpIGNo4bq/IMSR4buZIENhcHMiCi0KLW1zZ2lkICJGaWx0ZXIgY2FwcyBjaGFuZ2UgYmVoYXZpb3VyIgotbXNnc3RyICJC4buZIGzhu41jIGNhcHMgdGhheSDEkeG7lWkgY8OhY2gg4bupbmcgeOG7rSIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIkNoxrBhIHjDoWMgxJHhu4tuaCB0aMawIG3hu6VjIHThuqFtIHRo4budaS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGNyZWF0ZSB0ZW1wIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIHThuq1wIHRpbiB04bqhbSB0aOG7nWkg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gdOG6rXAgdGluIOKAnCVz4oCdIMSR4buDIMSR4buNYy4iCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgZ2hpIHbDoG8gdOG6rXAgdGluIHThuqNpIHbhu4EuIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIkNoxrBhIGdoaSByw7UgdMOqbiB04bqtcCB0aW4gxJHhu4MgZ2hpIHbDoG8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gdOG6rXAgdGluIOKAnCVz4oCdIMSR4buDIGdoaS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcOzbmcgdOG6rXAgdGluIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGRpIGNodXnhu4NuIHbhu4sgdHLDrSDEkeG7jWMgdHJvbmcgdOG6rXAgdGluIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGdoaSB2w6BvIHThuq1wIHRpbiDigJwlc+KAnS4iCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciByZWFkaW5nLiIKLW1zZ3N0ciAiQ2jGsGEgZ2hpIHLDtSB0w6puIHThuq1wIHRpbiDEkeG7gyDEkeG7jWMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgaW5mbyBvbiBcIiVzXCIuIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB24buBIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJcIiVzXCIgaXMgYSBkaXJlY3RvcnkuIgotbXNnc3RyICLigJwlc+KAnSBsw6AgdGjGsCBt4bulYy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICJU4bqtcCB0aW4g4oCcJXPigJ0gbMOgIOG7lSBj4bqvbSBt4bqhbmcuIgotCi1tc2dpZCAiRmFpbGVkIGFmdGVyIGl0ZXJhdGlvbnMgYXMgcmVxdWVzdGVkLiIKLW1zZ3N0ciAiTOG7l2kgc2F1IHPhu5EgbOG6p24gbOG6t3AgbOG6oWkgxJHGsOG7o2MgY2jhu41uLiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgImto4bqjIG7Eg25nIgotCi1tc2dpZCAiZGV0ZWN0ZWQgY2FwYWJpbGl0aWVzIGluIHN0cmVhbSIKLW1zZ3N0ciAixJHDoyBwaMOhdCBoaeG7h24ga2jhuqMgbsSDbmcgdHJvbmcgbHXhu5NuZyIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgInThu5FpIHRoaeG7g3UiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIgotbXNnc3RyICJideG7mWMga2jhuqMgbsSDbmciCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAiYnXhu5ljIGPDoWMga2jhuqMgbsSDbmcgbcOgIGtow7RuZyB0w6xtIGtp4buDdSIKLQotbXNnaWQgIlN0cmVhbSBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEuIgotbXNnc3RyICJMdeG7k25nIGtow7RuZyBjaOG7qWEgxJHhu6cgZOG7ryBsaeG7h3UuIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICJMdeG7k25nIGtow7RuZyBjaOG7qWEgZOG7ryBsaeG7h3UuIgotCi1tc2dpZCAiSW1wbGVtZW50ZWQgSW50ZXJmYWNlczpcbiIKLW1zZ3N0ciAiR2lhbyBkaeG7h24gxJHDoyB0aOG7sWMgaGnhu4duOlxuIgotCi1tc2dpZCAicmVhZGFibGUiCi1tc2dzdHIgIsSRxrDhu6NjIMSR4buNYyIKLQotbXNnaWQgIndyaXRhYmxlIgotbXNnc3RyICLEkcaw4bujYyBnaGkiCi0KLW1zZ2lkICJkZXByZWNhdGVkIgotbXNnc3RyICLEkcOjIGzhuqFjIGjhuq11IgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICLEkWnhu4F1IGtoaeG7g24gxJHGsOG7o2MiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAiY8OzIHRo4buDIHRoYXkgxJHhu5VpIMSRxrDhu6NjIHRyb25nIHRy4bqhbmcgdGjDoWkgTlVMTCwgUkVBRFksIFBBVVNFRCBoYXkgUExBWUlORyIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMLCBSRUFEWSBvciBQQVVTRUQgc3RhdGUiCi1tc2dzdHIgImNo4buJIGPDsyB0aOG7gyB0aGF5IMSR4buVaSB0cm9uZyB0cuG6oW5nIHRow6FpIE5VTEwsIFJFQURZIGhheSBQQVVTRUQiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAiY2jhu4kgY8OzIHRo4buDIHRoYXkgxJHhu5VpIHRyb25nIHRy4bqhbmcgdGjDoWkgTlVMTCBoYXkgUkVBRFkiCi0KLW1zZ2lkICJCbGFja2xpc3RlZCBmaWxlczoiCi1tc2dzdHIgIlThuq1wIHRpbiBi4buLIGPhuqVtOiIKLQotbXNnaWQgIlRvdGFsIGNvdW50OiAiCi1tc2dzdHIgIlPhu5EgbMaw4bujbmcgdOG7lW5nIGPhu5luZzogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdGVkIGZpbGUiCi1tc2dpZF9wbHVyYWwgIiVkIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyWzBdICIlZCB04bqtcCB0aW4gYuG7iyBj4bqlbSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBwbHVnaW4iCi1tc2dpZF9wbHVyYWwgIiVkIHBsdWdpbnMiCi1tc2dzdHJbMF0gIiVkIHBo4bqnbiBi4buVIHN1bmciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWQgbeG7pWMgdGluIGLhu4sgY+G6pW0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIHTDrW5oIG7Eg25nIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICJJbiByYSBt4buNaSBwaOG6p24gdOG7rSIKLQotbXNnaWQgIlByaW50IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZmlsZXMiCi1tc2dzdHIgIkluIGRhbmggc8OhY2ggY8OhYyB04bqtcCB0aW4gYuG7iyBj4bqlbSIKLQotbXNnaWQgIiIKLSJQcmludCBhIG1hY2hpbmUtcGFyc2FibGUgbGlzdCBvZiBmZWF0dXJlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbiBvciBhbGwgIgotInBsdWdpbnMgcHJvdmlkZS5cbiIKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgaW4gY29ubmVjdGlvbiB3aXRoIGV4dGVybmFsICIKLSJhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zIgotbXNnc3RyICIiCi0iSW4gcmEgZGFuaCBzw6FjaCBjaG8gbcOheSBwaMOibiB0w61jaCDEkcaw4bujYyBjaOG7qWEgY8OhYyB0w61uaCBuxINuZyBj4bunYSBwaOG6p24gYuG7lSBzdW5nICIKLSLEkcOjIGdoaSByw7UgaG/hurdjIG3hu41pIHBo4bqnbiBi4buVIHN1bmcuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ8OzIMOtY2gga2hpIGTDuW5nIGPGoSBjaOG6vyB04buxIMSR4buZbmcgYsOqbiAiCi0ibmdvw6BpIG3DoCBjw6BpIMSR4bq3dCBwaOG6p24gYuG7lSBzdW5nLiIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAiTGnhu4d0IGvDqiBu4buZaSBkdW5nIHBo4bqnbiBi4buVIHN1bmciCi0KLW1zZ2lkICJDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cyIKLW1zZ3N0ciAiS2nhu4NtIHRyYSB4ZW0gbeG7mXQgcGjhuqduIHThu60gaGF5IHBo4bqnbiBi4buVIHh1bmcgxJHDoyBjaG8gY8OzIHThu5NuIHThuqFpIGhheSBraMO0bmciCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICIiCi0iS2nhu4NtIHRyYSB4ZW0gbeG7mXQgcGjhuqduIHThu60gaGF5IHBo4bqnbiBi4buVIHh1bmcgxJHDoyBjaG8gY8OzIHThu5NuIHThuqFpIGhheSBraMO0bmcsIMSR4buTbmcgIgotInRo4budaSBjxaluZyBraeG7g20gdHJhIGPhuqMgcGhpw6puIGLhuqNuIHThu5FpIHRoaeG7g3UgY8OzIHRo4buDIGhv4bqhdCDEkeG7mW5nIMSRxrDhu6NjIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICJJbiByYSBjw6FjIGzGsOG7o2MgxJHhu5MgVVJJIMSRxrDhu6NjIGjhu5cgdHLhu6MsIHbhu5tpIG5o4buvbmcgcGjhuqduIHThu60gdGjhu7FjIGhp4buHbiBjaMO6bmcuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbuG6oXAgdOG6rXAgdGluIHBo4bqnbiBi4buVIHN1bmc6ICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iCi1tc2dzdHIgIktow7RuZyBjw7MgcGjhuqduIHThu60gaGF5IHBo4bqnbiBi4buVIHN1bmcgbmjGsCB24bqteSDigJwlc+KAnVxuIgotCi1tc2dpZCAiSW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiVGjhu5FuZyBrw6ogY2jhu4kgbeG7pWMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gZWxlbWVudCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJOaOG6rW4gxJHGsOG7o2MgdGjDtG5nIMSRaeG7h3Agc+G7kSAldSB04burIHBo4bqnbiB04butIOKAnCVz4oCdICglcyk6ICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAiTmjhuq1uIMSRxrDhu6NjIHRow7RuZyDEkWnhu4dwIHPhu5EgJXUgdOG7qyDEkeG7h20g4oCcJXM6JXPigJ0gKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIG9iamVjdCBcIiVzXCIgKCVzKTogIgotbXNnc3RyICJOaOG6rW4gxJHGsOG7o2MgdGjDtG5nIMSRaeG7h3Agc+G7kSAldSB04burIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSAoJXMpOiAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAiTmjhuq1uIMSRxrDhu6NjIHRow7RuZyDEkWnhu4dwIHPhu5EgJXUgKCVzKTogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBFT1MgZnJvbSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAiTeG7m2kgbmjhuq1uIGvhur90IHRow7pjIGx14buTbmcgKEVPUykgdOG7qyBwaOG6p24gdOG7rSDigJwlc+KAnS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJUSOG6uiDEkMODIFTDjE0gICAgIDogxJHGsOG7o2MgdMOsbSBi4bufaSBwaOG6p24gdOG7rSDigJwlc+KAnS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIlRI4bq6IMSQw4MgVMOMTSAgICAgOiDEkcaw4bujYyB0w6xtIGLhu59pIMSR4buHbSDigJwlczolc+KAnS5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIlRI4bq6IMSQw4MgVMOMTSAgICAgOiDEkcaw4bujYyB0w6xtIGLhu59pIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnS5cbiIKLQotbXNnaWQgIkZPVU5EIFRBR1xuIgotbXNnc3RyICJUSOG6uiDEkMODIFTDjE1cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICJUT0MgxJDDgyBUw4xNICAgICA6IMSRxrDhu6NjIHTDrG0gYuG7n2kgcGjhuqduIHThu60gXCIlc1wiLlxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAiVE9DIMSQw4MgVMOMTSAgICAgOiDEkcaw4bujYyB0w6xtIGLhu59pIMSR4buRaSB0xrDhu6NuZyBcIiVzXCIuXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAiVE9DIFTDjE0gVEjhuqRZXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIlRIw5RORyBUSU46XG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIkPhuqJOSCBCw4FPOiB04burIHBo4bqnbiB04butICVzOiAlc1xuIgotCi1tc2dpZCAiUHJlcm9sbGVkLCB3YWl0aW5nIGZvciBidWZmZXJpbmcgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIkN14buZbiBz4bq1biwgxJHhu6NpIGNodXnhu4NuIGhvw6FuIMSR4buHbSB4b25n4oCmXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICJDdeG7mW4gc+G6tW4sIMSR4bujaSB0aeG6v24gdHLDrG5oIGhvw6BuIHThuqV04oCmXG4iCi0KLW1zZ2lkICJidWZmZXJpbmcuLi4iCi1tc2dzdHIgIsSRYW5nIGNodXnhu4NuIGhvw6FuIMSR4buHbeKApiIKLQotbXNnaWQgIkRvbmUgYnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIkhvw6BuIHThuqV0IGNodXnhu4NuIGhvw6FuIMSR4buHbSBuw6puIMSR4bq3dCDEkcaw4budbmcg4buRbmcgdGjDoG5oIMSQQU5HIFBIw4FUIOKAplxuIgotCi1tc2dpZCAiQnVmZmVyaW5nLCBzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCAuLi5cbiIKLW1zZ3N0ciAixJBhbmcgY2h1eeG7g24gaG/DoW4gxJHhu4dtIG7Dqm4gxJHhurd0IMSRxrDhu51uZyDhu5FuZyB0aMOgbmggQuG7iiBU4bqgTSBE4buqTkcg4oCmXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICJQaMOibiBwaOG7kWkgbOG6oWkgxJHhu5kgdHLhu4XigKZcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICLEkGFuZyDEkeG6t3QgdMOsbmggdHLhuqFuZyB0aMOgbmggJXMgbmjGsCB5w6p1IGPhuqd1IGLhu59pICVz4oCmLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAiTmfhuq90OiDEkWFuZyBuZ+G7q25nIGNo4bqheSDEkcaw4budbmcg4buRbmcg4oCmXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiUHJvZ3Jlc3M6ICglcykgJXNcbiIKLW1zZ3N0ciAiVGnhur9uIHRyw6xuaDogKCVzKSAlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk1pc3NpbmcgZWxlbWVudDogJXNcbiIKLW1zZ3N0ciAiVGhp4bq/dSBwaOG6p24gdOG7rTogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgY29udGV4dCBmcm9tIGVsZW1lbnQgJyVzJzogJXM9JXNcbiIKLW1zZ3N0ciAixJDDoyBuaOG6rW4gbuG7mWkgZHVuZyB04burIHBo4bqnbiB04butIOKAnCVz4oCdOiAlcz0lc1xuIgotCi1tc2dpZCAiT3V0cHV0IHRhZ3MgKGFsc28ga25vd24gYXMgbWV0YWRhdGEpIgotbXNnc3RyICJYdeG6pXQgY8OhYyB0aOG6uyAoY8WpbmcgxJHGsOG7o2MgYmnhur90IGzDoCBzacOqdSBk4buvIGxp4buHdSkiCi0KLW1zZ2lkICJPdXRwdXQgVE9DIChjaGFwdGVycyBhbmQgZWRpdGlvbnMpIgotbXNnc3RyICJYdeG6pXQgVE9DIChjw6FjIGNoxrDGoW5nIHbDoCBwaGnDqm4gYuG6o24pIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAiWHXhuqV0IHRow7RuZyB0aW4gdHLhuqFuZyB0aMOhaSB2w6AgdGjDtG5nIGLDoW8gdMOgaSBz4bqjbiIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIktow7RuZyBpbiByYSB0aMO0bmcgdGluIG7DoG8gduG7gSB0aeG6v24gaMOgbmgiCi0KLW1zZ2lkICJPdXRwdXQgbWVzc2FnZXMiCi1tc2dzdHIgIlRow7RuZyDEkWnhu4dwIHh14bqldCIKLQotbXNnaWQgIiIKLSJEbyBub3Qgb3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBpZiB2ZXJib3NlICIKLSJvdXRwdXQgaXMgZW5hYmxlZCAoY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMpIgotbXNnc3RyICIiCi0ixJDhu6tuZyB4deG6pXQgdGjDtG5nIHRpbmggdHLhuqFuZyB0aMOhaSBjaG8gdGh14buZYyB0w61uaCDEkcOjIGNobyBu4bq/dSBi4bqtdCBr4bq/dCB4deG6pXQgY2hpICIKLSJ0aeG6v3QgKGPDsyB0aOG7gyBz4butIGThu6VuZyBuaGnhu4F1IGzhuqduKSIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIlTDik4tVEhV4buYQy1Uw41OSCIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAiS2jDtG5nIGPDoGkgxJHhurd0IGLhu5kgcXXhuqNuIGzDvSBs4buXaSIKLQotbXNnaWQgIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIKLW1zZ3N0ciAiw4lwIGJ14buZYyBr4bq/dCB0aMO6YyBsdeG7k25nIHRyw6puIGPDoWMgbmd14buTbiB0csaw4bubYyBraGkgxJHDs25nIMSRxrDhu51uZyDhu5FuZyIKLQotbXNnaWQgIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIKLW1zZ3N0ciAiVOG6rXAgaOG7o3AgbOG6oWkgdsOgIGluIHJhIHRo4buRbmcga8OqIGNo4buJIG3hu6VjIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIgotbXNnc3RyICJM4buWSToga2jDtG5nIHRo4buDIHjDonkgZOG7sW5nIMSRxrDhu51uZyDhu5FuZzogJXMuXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlxuIgotbXNnc3RyICJM4buWSToga2jDtG5nIHRo4buDIHjDonkgZOG7sW5nIMSRxrDhu51uZyDhu5FuZy5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIkPhuqJOSCBCw4FPOiDEkcaw4budbmcg4buRbmcgY8OzIGzhu5dpOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICJM4buWSToga2jDtG5nIHTDrG0gdGjhuqV5IHBo4bqnbiB04butIOKAnMSRxrDhu51uZyDhu5FuZ+KAnSAocGlwZWxpbmUpLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIsSQYW5nIMSR4bq3dCDEkcaw4budbmcg4buRbmcgdGjDoG5oIELhu4ogVOG6oE0gROG7qk5HIOKAplxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAiTOG7lkk6IMSRxrDhu51uZyDhu5FuZyBraMO0bmcgdOG6oW0gZOG7q25nIMSRxrDhu6NjLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgbGl2ZSBhbmQgZG9lcyBub3QgbmVlZCBQUkVST0xMIC4uLlxuIgotbXNnc3RyICLEkMaw4budbmcg4buRbmcgxJFhbmcgc+G7kW5nIHbDoCBraMO0bmcgY+G6p24gVEnhu4BOIENV4buYTiDigKZcbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIsSQxrDhu51uZyDhu5FuZyDEkEFORyBUSeG7gE4gQ1Xhu5hOIOKAplxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICJM4buWSTogxJHGsOG7nW5nIOG7kW5nIGtow7RuZyB0aeG7gW4gY3Xhu5luIMSRxrDhu6NjLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLlxuIgotbXNnc3RyICLEkMaw4budbmcg4buRbmcgxJDDgyBUSeG7gE4gQ1Xhu5hOIOKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICLEkGFuZyDEkeG6t3QgxJHGsOG7nW5nIOG7kW5nIHRow6BuaCDEkEFORyBQSMOBVCDigKZcbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAiTOG7lkk6IMSRxrDhu51uZyDhu5FuZyBraMO0bmcgcGjDoXQgxJHGsOG7o2MuXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAiIgotIkvhur90IHRow7pjIGx14buTbmcga2hpIHThuq90IHBo4bqnbiBt4buBbSB24bqrbiBjw7JuIGhv4bqhdCDEkeG7mW5nIHRow6wgxJFhbmcgw6lwIGJ14buZYyBr4bq/dCB0aMO6YyAiCi0ibHXhu5NuZyB0csOqbiDEkcaw4budbmcg4buRbmdcbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICJFT1Mga2hpIHThuq90IG3DoXkgxJHGsOG7o2MgYuG6rXQgLS0gY2jhu50gc2F1IEzhu5dpIEVPU1xuIgotCi1tc2dpZCAiV2FpdGluZyBmb3IgRU9TLi4uXG4iCi1tc2dzdHIgIsSQYW5nIMSR4bujaSBr4bq/dCB0aMO6YyBsdeG7k25n4oCmXG4iCi0KLW1zZ2lkICJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIgotbXNnc3RyICJOaOG6rW4gxJHGsOG7o2MgdMOtbiBoaeG7h3Uga+G6v3QgdGjDumMgbHXhu5NuZzogxJFhbmcgbmfhu6tuZyBjaOG6oXkgxJHGsOG7nW5nIOG7kW5nIOKAplxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIk5n4bqvdCB0cm9uZyBraGkgY2jhu50gRU9TIC0gxJFhbmcgZOG7q25nIMSRxrDhu51uZyDhu5FuZyBs4bqhaeKAplxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIHRyb25nIGtoaSDEkeG7o2kga+G6v3QgdGjDumMgbHXhu5NuZ1xuIgotCi1tc2dpZCAiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiCi1tc2dzdHIgIlRo4buxYyBoaeG7h24geG9uZyBzYXUgJSIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUkVBRFkgLi4uXG4iCi1tc2dzdHIgIsSQYW5nIMSR4bq3dCDEkcaw4budbmcg4buRbmcgdGjDoG5oIFPhurROX1PDgE5HIOKAplxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICLEkGFuZyDEkeG6t3QgxJHGsOG7nW5nIOG7kW5nIHRow6BuaCBWw5RfR0nDgV9UUuG7iiDigKZcbiIKLQotbXNnaWQgIkZyZWVpbmcgcGlwZWxpbmUgLi4uXG4iCi1tc2dzdHIgIsSQYW5nIGdp4bqjaSBwaMOzbmcgxJHGsOG7nW5nIOG7kW5nIOKAplxuIgotCi0jfiBtc2dpZCAiYmluIgotI34gbXNnc3RyICJuaOG7iyBwaMOibiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiTOG7l2kgbHXhu5NuZyBk4buvIGxp4buHdSBu4buZaSBi4buZLiIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIktow7RuZyB4deG6pXQgdGjDtG5nIHRpbiB0cuG6oW5nIHRow6FpIEtJ4buCVSIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiS0nhu4JVMSxLSeG7glUyLOKApiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAibGnDqm4ga+G6v3Qga2jDtG5nIGPDsyBwaOG6p24gdOG7rSBuZ3Xhu5NuIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAiIgotI34gImxpw6puIGvhur90IGtow7RuZyBjw7MgcGjhuqduIHThu60gcXXhuqNuIGzDvSB2aeG7h2MgcGjDom4gcGjhu5FpIGThu68gbGnhu4d1IHbDoG8gxJHhu4dtIGtow6FjIG5oYXUiCi0KLSN+IG1zZ2lkICJubyBlbGVtZW50IHRvIGxpbmsgVVJJIFwiJXNcIiB0byIKLSN+IG1zZ3N0ciAia2jDtG5nIGPDsyBwaOG6p24gdOG7rSDEkeG6v24gxJHDsyBj4bqnbiBsacOqbiBr4bq/dCBVUkkg4oCcJXPigJ0iCi0KLSN+IG1zZ2lkICJjb3VsZCBub3QgbGluayBzaW5rIGVsZW1lbnQgZm9yIFVSSSBcIiVzXCIiCi0jfiBtc2dzdHIgIiIKLSN+ICJraMO0bmcgdGjhu4Mga+G6v3QgaOG7o3AgcGjhuqduIHThu60gcXXhuqNuIGzDvSB2aeG7h2MgcGjDom4gcGjhu5FpIGThu68gbGnhu4d1IHbDoG8gxJHhu4dtIGtow6FjICIKLSN+ICJuaGF1LCBjaG8gVVJJIOKAnCVz4oCdIgotCi0jfiBtc2dpZCAibWF4aW11bSIKLSN+IG1zZ3N0ciAidOG7kWkgxJFhIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAiIgotI34gIkPDoWNoIHPhu60gZOG7pW5nOiBnc3QteG1sbGF1bmNoIDx04bqtcF90aW4ueG1sPiBbIHnhur91X3Thu5EudMOgaV9z4bqjbj1nacOhX3Ry4buLIOKApl1cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBwYXJzZSBvZiB4bWwgZmlsZSAnJXMnIGZhaWxlZC5cbiIKLSN+IG1zZ3N0ciAiTOG7lkk6IGzhu5dpIHBow6JuIHTDoWNoIHThuq1wIHRpbiB4bWwg4oCcJXPigJ0uXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIkzhu5ZJOiBraMO0bmcgY8OzIHBo4bqnbiB04butIMSRxrDhu51uZyDhu5FuZyBj4bqlcCDEkeG6p3UgdHJvbmcgdOG6rXAgdGluIOKAnCVz4oCdLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogb25seSBvbmUgdG9wbGV2ZWwgZWxlbWVudCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLlxuIgotI34gbXNnc3RyICJD4bqiTkggQsOBTzogaGnhu4duIHRo4budaSBo4buXIHRy4bujIGNo4buJIG3hu5l0IHBo4bqnbiB04butIGPhuqVwIMSR4bqndS5cbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAiTOG7lkk6IGtow7RuZyB0aOG7gyBwaMOibiB0w6FjaCDEkeG7kWkgc+G7kSBkw7JuZyBs4buHbmggJWQ6ICVzLlxuIgotCi0jfiBtc2dpZCAiV0FSTklORzogZWxlbWVudCBuYW1lZCAnJXMnIG5vdCBmb3VuZC5cbiIKLSN+IG1zZ3N0ciAiQ+G6ok5IIELDgU86IGtow7RuZyB0w6xtIHRo4bqleSBwaOG6p24gdOG7rSB0w6puIOKAnCVz4oCdLlxuIgotCi0jfiBtc2dpZCAiU2F2ZSB4bWwgcmVwcmVzZW50YXRpb24gb2YgcGlwZWxpbmUgdG8gRklMRSBhbmQgZXhpdCIKLSN+IG1zZ3N0ciAiTMawdSDEkcaw4budbmcg4buRbmcgZOG6oW5nIFhNTCB2w6BvIFThuqxQX1RJTiBy4buTaSB0aG/DoXQiCi0KLSN+IG1zZ2lkICJGSUxFIgotI34gbXNnc3RyICJU4bqsUF9USU4iCi0KLSN+IG1zZ2lkICJEbyBub3QgaW5zdGFsbCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR1VTUjEgYW5kIFNJR1VTUjIiCi0jfiBtc2dzdHIgIsSQ4burbmcgY8OgaSDEkeG6t3QgYuG7mSBxdeG6o24gbMO9IHTDrW4gaGnhu4d1IGNobyBTSUdVU1IxIHbDoCBTSUdVU1IyIgotCi0jfiBtc2dpZCAiUHJpbnQgYWxsb2MgdHJhY2UgKGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lKSIKLSN+IG1zZ3N0ciAiSW4gcmEgduG6v3QgY+G6pXAgcGjDoXQgKG7hur91IMSRxrDhu6NjIGLhuq10IGtoaSBiacOqbiBkaWNoKSIKZGlmZiAtLWdpdCBhL3BvL3poX0NOLmdtbyBiL3BvL3poX0NOLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk1OWYxMS4uMDAwMDAwMAotLS0gYS9wby96aF9DTi5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby96aF9DTi5wbyBiL3BvL3poX0NOLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjgxYmMyLi4wMDAwMDAwCi0tLSBhL3BvL3poX0NOLnBvCisrKyAvZGV2L251bGwKQEAgLTEsMTM0OSArMCwwIEBACi0jIENoaW5lc2UgKHNpbXBsaWZpZWQpIHRyYW5zbGF0aW9uIGFib3V0IGdzdHJlYW1lci4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgRnVuZGEgV2FuZyA8ZnVuZGF3YW5nQGxpbnV4Lm5ldC5jbj4sIDIwMDUuCi0jIEppIFpoZW5nWXUgPHpoZW5neXVqaUBnbWFpbC5jb20+LCAyMDA4LCAyMDA5LgotIyBUaWFuemUgV2FuZyA8endwd2p3dHpAMTI2LmNvbT4sIDIwMTUuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3RyZWFtZXIgMS4xMC4wXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMTEtMDIgMTM6NDMrMDgwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogVGlhbnplIFdhbmcgPHp3cHdqd3R6QDEyNi5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogQ2hpbmVzZSAoc2ltcGxpZmllZCkgPGkxOG4temhAZ29vZ2xlZ3JvdXBzLmNvbT5cbiIKLSJMYW5ndWFnZTogemhfQ05cbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUJ1Z3M6IFJlcG9ydCB0cmFuc2xhdGlvbiBlcnJvcnMgdG8gdGhlIExhbmd1YWdlLVRlYW0gYWRkcmVzcy5cbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTE7IHBsdXJhbD0wO1xuIgotIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS44LjlcbiIKLQotbXNnaWQgIlByaW50IHRoZSBHU3RyZWFtZXIgdmVyc2lvbiIKLW1zZ3N0ciAi5omT5Y2wIEdTdHJlYW1lciDniYjmnKwiCi0KLW1zZ2lkICJNYWtlIGFsbCB3YXJuaW5ncyBmYXRhbCIKLW1zZ3N0ciAi5bCG5omA5pyJ55qE6K2m5ZGK5Lmf5b2T5L2c5Lil6YeN6Zeu6aKYIgotCi1tc2dpZCAiUHJpbnQgYXZhaWxhYmxlIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGV4aXQiCi1tc2dzdHIgIuaJk+WNsOWPr+eUqOeahOiwg+ivleexu+WIq+W5tumAgOWHuiIKLQotbXNnaWQgIiIKLSJEZWZhdWx0IGRlYnVnIGxldmVsIGZyb20gMSAob25seSBlcnJvcikgdG8gOSAoYW55dGhpbmcpIG9yIDAgZm9yIG5vIG91dHB1dCIKLW1zZ3N0ciAi6buY6K6k6LCD6K+V57qn5Yir77yM5LuOIDEo5LuF5pyJ6ZSZ6K+vKeWIsCA5KOaJgOacieWGheWuuSnvvIww5Luj6KGo5peg6L6T5Ye6IgotCi1tc2dpZCAiTEVWRUwiCi1tc2dzdHIgIue6p+WIqyIKLQotbXNnaWQgIiIKLSJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeV9uYW1lOmxldmVsIHBhaXJzIHRvIHNldCBzcGVjaWZpYyBsZXZlbHMgZm9yICIKLSJ0aGUgaW5kaXZpZHVhbCBjYXRlZ29yaWVzLiBFeGFtcGxlOiBHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi1tc2dzdHIgIiIKLSLpgJflj7fliIbpmpTnmoTigJznsbvliKvlkI3np7A657qn5Yir4oCd5YiX6KGo55So5p2l5Li65q+P5Liq57G75Yir6K6+572u5oyH5a6a55qE6LCD6K+V57qn5Yir44CC5aaCOiIKLSJHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICLliJfooagiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAi56aB5q2i5b2p6Imy55qE6LCD6K+V5L+h5oGv6L6T5Ye6IgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIuaUueWPmOiwg+ivleaXpeW/l+eahOminOiJsuaooeW8j+OAguWPr+iDveeahOaooeW8j+acie+8mm9mZuOAgW9u44CBZGlzYWJsZeOAgWF1dG/lkox1bml4IgotCi1tc2dpZCAiRGlzYWJsZSBkZWJ1Z2dpbmciCi1tc2dzdHIgIuemgeatouiwg+ivlSIKLQotbXNnaWQgIkVuYWJsZSB2ZXJib3NlIHBsdWdpbiBsb2FkaW5nIGRpYWdub3N0aWNzIgotbXNnc3RyICLlvIDlkK/or6bnu4bnmoTmj5Lku7bovb3lhaXliIbmnpAiCi0KLW1zZ2lkICJDb2xvbi1zZXBhcmF0ZWQgcGF0aHMgY29udGFpbmluZyBwbHVnaW5zIgotbXNnc3RyICLlhpLlj7fliIbpmpTnmoTljIXlkKvmj5Lku7bnmoTot6/lvoQiCi0KLW1zZ2lkICJQQVRIUyIKLW1zZ3N0ciAi6Lev5b6EIgotCi1tc2dpZCAiIgotIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsdWdpbnMgdG8gcHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBzdG9yZWQgaW4gIgotImVudmlyb25tZW50IHZhcmlhYmxlIEdTVF9QTFVHSU5fUEFUSCIKLW1zZ3N0ciAiIgotIumAl+WPt+WIhumalOeahOmihOi9veWFpeeahOaPkuS7tuWIl+ihqO+8jOiAjOS4lOatpOWIl+ihqOiiq+S/neWtmOS6jueOr+Wig+WPmOmHjyBHU1RfUExVR0lOX1BBVEgg5LitIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAi5o+S5Lu2IgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAi56aB5q2i6Lef6Liq6KOF5YWl5o+S5Lu25pe255qE5q615Lil6YeN6ZSZ6K+vIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIuemgeatouabtOaWsOWvhOWtmOWZqCIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIuaJq+aPj+WvhOWtmOWZqOaXtuemgeatouWQr+WKqOW4ruWKqei/m+eoiyIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJHU3RyZWFtZXIg6YCJ6aG5IgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAi5pi+56S6IEdTdHJlYW1lciDpgInpobkiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAi5pyq55+l6YCJ6aG5IgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIg6YGH5Yiw5LqG5bi46KeE5qC45b+D5bqT6ZSZ6K+v44CCIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDlvIDlj5HogIXmnKrlr7nmraTplJnor6/mjIfmtL7plJnor6/ku6PnoIHjgIIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivr++8muS7o+eggeacquWunueOsOOAgiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIkdzdHJlYW1lciDplJnor6/vvJrmlLnlj5jnirbmgIHml7blpLHotKXvvIzlubbkuJTkuIDkupvnu4Tku7bml6Dms5Xmj5DkvpvmnInlhbPplJnor6/ljp/lm6DnmoTkv6Hmga/jgIIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHBhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivrzog5aGr5YWF6Zeu6aKY44CCIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiB0aHJlYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkdTdHJlYW1lciDlhoXpg6jplJnor6/vvJrnur/nqIvpl67popjjgIIiCi0KLW1zZ2lkICJHU3RyZWFtZXIgZXJyb3I6IG5lZ290aWF0aW9uIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg6ZSZ6K+vOiDljY/llYbpl67popjjgIIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo6ZSZ6K+v77ya5LqL5Lu26Zeu6aKY44CCIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo6ZSZ6K+v77ya5pCc57Si6Zeu6aKY44CCIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YaF6YOo6ZSZ6K+vOiDliIbmnpDlmajpl67popjjgIIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRhZyBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivr++8muagh+etvumXrumimOOAgiIKLQotbXNnaWQgIllvdXIgR1N0cmVhbWVyIGluc3RhbGxhdGlvbiBpcyBtaXNzaW5nIGEgcGx1Zy1pbi4iCi1tc2dzdHIgIuaCqOeahCBHU3RyZWFtZXIg5a6J6KOF57y65bCR5o+S5Lu244CCIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOmUmeivr++8muaXtumSn+mUmeivr+OAgiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICLmraTnqIvluo/mraPlsJ3or5Xkvb/nlKjlt7LooqvnpoHnlKjnmoQgR1N0cmVhbWVyIOWKn+iDveOAgiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3VwcG9ydGluZyBsaWJyYXJ5IGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOmBh+WIsOS6huW4uOinhOaUr+aMgeW6k+mUmeivr+OAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBpbml0aWFsaXplIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIuaXoOazleWIneWni+WMluaUr+aMgeW6k+OAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLml6Dms5XlhbPpl63mlK/mjIHlupPjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIuaXoOazlemFjee9ruaUr+aMgeW6k+OAgiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAi57yW56CB6ZSZ6K+v44CCIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDpgYfliLDkuobluLjop4TotYTmupDplJnor6/jgIIiCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICLotYTmupDmnKrmib7liLDjgIIiCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICLotYTmupDlv5nmiJbkuI3lj6/nlKjjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIuaXoOazleaJk+W8gOi1hOa6kOivu+WPluOAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAi5peg5rOV5omT5byA6LWE5rqQ5YaZ5YWl44CCIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLml6Dms5XmiZPlvIDotYTmupDor7vlj5blkozlhpnlhaXjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgotbXNnc3RyICLml6Dms5XlhbPpl63otYTmupDjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAi5peg5rOV5LuO6LWE5rqQ6ZiF6K+744CCIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAi5peg5rOV5YaZ5YWl6LWE5rqQ44CCIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIuaXoOazleWcqOi1hOa6kOS4iuaJp+ihjOaQnOe0ouOAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIuaXoOazleWcqOi1hOa6kOS4iuWQjOatpeOAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICLml6Dms5Xku47otYTmupDojrflvpforr7nva7miJblnKjotYTmupDkuIrorr7lrprorr7nva7jgIIiCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIui1hOa6kOS4iuaXoOWJqeS9meepuumXtOOAgiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIuaXoOadg+iuv+mXrui1hOa6kOOAgiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOmBh+WIsOS6huW4uOinhOa1gemUmeivr+OAgiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAi57uE5Lu25pyq5a6e546w5a+55q2k5rWB55qE5aSE55CG44CC6K+35o+Q5Lqk6ZSZ6K+v5oql5ZGK44CCIgotCi1tc2dpZCAiQ291bGQgbm90IGRldGVybWluZSB0eXBlIG9mIHN0cmVhbS4iCi1tc2dzdHIgIuaXoOazleehruWumua1geexu+Wei+OAgiIKLQotbXNnaWQgIlRoZSBzdHJlYW0gaXMgb2YgYSBkaWZmZXJlbnQgdHlwZSB0aGFuIGhhbmRsZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAi5q2k5rWB55qE57G75Z6L5LiO5q2k57uE5Lu25Y+v5aSE55CG55qE57G75Z6L5LiN56ym44CCIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICLmsqHmnInlj6/lpITnkIbmraTmtYHnsbvlnovnmoTnvJbop6PnoIHlmajjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVjb2RlIHN0cmVhbS4iCi1tc2dzdHIgIuaXoOazleino+eggea1geOAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlbmNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAi5peg5rOV57yW56CB5rWB44CCIgotCi1tc2dpZCAiQ291bGQgbm90IGRlbXVsdGlwbGV4IHN0cmVhbS4iCi1tc2dzdHIgIuaXoOazleino+eggeWkmuW3peS8oOmAgeeahOa1geOAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAi5peg5rOV57yW56CB5aSa5bel5Lyg6YCB55qE5rWB44CCIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBpbiB0aGUgd3JvbmcgZm9ybWF0LiIKLW1zZ3N0ciAi5q2k5rWB55qE5qC85byP6ZSZ6K+v44CCIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRpb24gaXMgbm90IHN1cHBvcnRlZC4iCi1tc2dzdHIgIuatpOS4uuWKoOWvhua1geS4lOS4jeaUr+aMgeino+WvhuOAgiIKLQotbXNnaWQgIiIKLSJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgY2FuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugbm8gc3VpdGFibGUga2V5IGhhcyAiCi0iYmVlbiBzdXBwbGllZC4iCi1tc2dzdHIgIuatpOS4uuWKoOWvhua1ge+8jOiAjOS4lOeUseS6juacquaPkOS+m+WQiOmAgueahOWvhumSpeWboOatpOaXoOazleino+WvhuOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMuIgotbXNnc3RyICLln58gJXMg5peg6ZSZ6K+v5L+h5oGv44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcyBhbmQgY29kZSAlZC4iCi1tc2dzdHIgIuWfnyAlcyDlkozku6PnoIEgJWQg5Lit5peg5qCH5YeG6ZSZ6K+v5L+h5oGv44CCIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICLpgInkuK3nmoTml7bpkp/luo/liJfml6Dms5XnlKjlnKjnrqHpgZPkuK3jgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyByZWdpc3RyeSBjYWNoZSB0byAlczogJXMiCi1tc2dzdHIgIuWvhOWtmOWZqOe8k+WtmOWGmeWFpSAlcyDml7blh7rplJk6ICVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIuagh+mimCIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgIuWFrOeUqOagh+mimCIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICLmjpLluo/lkI7nmoTmoIfpopjlkI0iCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLnlKjkuo7mjpLluo/nmoTlhaznlKjmoIfpopgiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgIuiJuuacr+WutiIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAi6LSf6LSj5b2V5Yi255qE5Liq5Lq6IgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICLmjpLluo/lkI7nmoToibrmnK/lrrYiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIueUqOS6juaOkuW6j+eahOi0n+i0o+W9leWItueahOS6uuWQjSIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICLkuJPovpEiCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAi5YyF5ZCr5q2k5pWw5o2u55qE5LiT6L6RIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgIuaOkuW6j+WQjueahOS4k+i+keWQjSIKLQotbXNnaWQgImFsYnVtIGNvbnRhaW5pbmcgdGhpcyBkYXRhIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLnlKjkuo7mjpLluo/nmoTkuJPovpHlkI0iCi0KLW1zZ2lkICJhbGJ1bSBhcnRpc3QiCi1tc2dzdHIgIuiJuuacr+WutuWIl+ihqCIKLQotbXNnaWQgIlRoZSBhcnRpc3Qgb2YgdGhlIGVudGlyZSBhbGJ1bSwgYXMgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCIKLW1zZ3N0ciAi55So5LqO5pi+56S655qE5pW05byg5LiT6L6R55qE6Im65pyv5a62IgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICLmjpLluo/lkI7nmoToibrmnK/lrrblkI0iCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBzb3J0ZWQiCi1tc2dzdHIgIueUqOS6juaOkuW6j+eahOaVtOW8oOS4k+i+keeahOiJuuacr+WutuWQjSIKLQotbXNnaWQgImRhdGUiCi1tc2dzdHIgIuaXpeacnyIKLQotbXNnaWQgImRhdGUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR0RhdGUgc3RydWN0dXJlKSIKLW1zZ3N0ciAi5Yib5bu65pWw5o2u55qE5pel5pyfKOS4uiBHRGF0ZSDnu5PmnoQpIgotCi1tc2dpZCAiZGF0ZXRpbWUiCi1tc2dzdHIgIuaXpeacn+WSjOaXtumXtCIKLQotbXNnaWQgImRhdGUgYW5kIHRpbWUgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgKGFzIGEgR3N0RGF0ZVRpbWUgc3RydWN0dXJlKSIKLW1zZ3N0ciAi5Yib5bu65pWw5o2u55qE5pel5pyf5ZKM5pe26Ze05Li6IEdEYXRlIOe7k+aehCkiCi0KLW1zZ2lkICJnZW5yZSIKLW1zZ3N0ciAi5rWB5rS+IgotCi1tc2dpZCAiZ2VucmUgdGhpcyBkYXRhIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIuatpOaVsOaNruaJgOWxnueahOa1gea0viIKLQotbXNnaWQgImNvbW1lbnQiCi1tc2dzdHIgIuazqOmHiiIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIgotbXNnc3RyICLms6jph4rmlbDmja7nmoTku7vmhI/mlofmnKwiCi0KLW1zZ2lkICJleHRlbmRlZCBjb21tZW50IgotbXNnc3RyICLmm7TlpJrms6jph4oiCi0KLW1zZ2lkICJmcmVlIHRleHQgY29tbWVudGluZyB0aGUgZGF0YSBpbiBrZXk9dmFsdWUgb3Iga2V5W2VuXT1jb21tZW50IGZvcm0iCi1tc2dzdHIgIuS7peKAnOWFs+mUruivje+8neWAvOaIliBrZXlbZW5d77yd5rOo6YeK4oCd6L+Z56eN5b2i5byP5rOo6YeK5pWw5o2u55qE5Lu75oSP5paH5pysIgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICLpn7PovajnvJblj7ciCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAi5pS26JeP6ZuG5Lit55qE6Z+z6L2o57yW5Y+3IgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgIumfs+i9qOaVsCIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIuatpOmfs+i9qOaJgOWxnueahOaUtuiXj+mbhuS4reeahOmfs+i9qOaVsCIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICLnop/niYfnvJblj7ciCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLmlLbol4/pm4bkuK3nmoTnop/niYfnvJblj7ciCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICLnop/niYfmlbAiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAi5q2k56Kf5omA5bGe55qE5pS26JeP6ZuG5Lit55qE56Kf54mH5pWwIgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgIuS9jee9riIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICLlqpLkvZPmnaXmupDkvZzkuLogVVJJIOWcsOWdgO+8iOWOn+Wni+aWh+S7tuaIlua1geaJgOWcqOeahOS9jee9ru+8iSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICLkuLvpobUiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICLmraTlqpLkvZPnmoTkuLvpobXvvIjoibrmnK/lrrbmiJbnlLXlvbHnrYnvvIkiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAi5o+P6L+wIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICLmj4/ov7DmlbDmja7lhoXlrrnnmoTnroDopoHmlofmnKwiCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICLniYjmnKwiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAi5q2k5pWw5o2u55qE54mI5pysIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAiSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBSZWNvcmRpbmcgQ29kZSAtIHNlZSBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICLnu4Tnu4ciCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgIueJiOadgyIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIuaVsOaNrueahOeJiOadg+itpuWRiiIKLQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgIueJiOadgyB1cmkiCi0KLW1zZ2lkICJVUkkgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIuaVsOaNrueahOeJiOadg+itpuWRiiBVUkkiCi0KLW1zZ2lkICJlbmNvZGVkIGJ5IgotbXNnc3RyICLnvJbnoIHogIXkuLoiCi0KLW1zZ2lkICJuYW1lIG9mIHRoZSBlbmNvZGluZyBwZXJzb24gb3Igb3JnYW5pemF0aW9uIgotbXNnc3RyICLov5vooYznvJbnoIHnmoTkurrmiJbnu4Tnu4ciCi0KLW1zZ2lkICJjb250YWN0IgotbXNnc3RyICLogZTns7vkuroiCi0KLW1zZ2lkICJjb250YWN0IGluZm9ybWF0aW9uIgotbXNnc3RyICLogZTns7vkurrkv6Hmga8iCi0KLW1zZ2lkICJsaWNlbnNlIgotbXNnc3RyICLorrjlj6/or4EiCi0KLW1zZ2lkICJsaWNlbnNlIG9mIGRhdGEiCi1tc2dzdHIgIuaVsOaNruiuuOWPr+ivgSIKLQotbXNnaWQgImxpY2Vuc2UgdXJpIgotbXNnc3RyICLorrjlj6/or4EgdXJpIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLmlbDmja7orrjlj6/or4HnmoQgVVJJIgotCi1tc2dpZCAicGVyZm9ybWVyIgotbXNnc3RyICLmvJTlpY/ogIUiCi0KLW1zZ2lkICJwZXJzb24ocykgcGVyZm9ybWluZyIKLW1zZ3N0ciAi5ryU5aWP6ICFIgotCi1tc2dpZCAiY29tcG9zZXIiCi1tc2dzdHIgIuS9nOabsuS6uiIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAi6LSf6LSj5b2V5Yi255qE5Lq6IgotCi1tc2dpZCAiY29uZHVjdG9yIgotbXNnc3RyICLmjIfmjKUiCi0KLW1zZ2lkICJjb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQiCi1tc2dzdHIgIueOsOWcuuaMh+aMpS/mvJTlpY/ogIUiCi0KLW1zZ2lkICJkdXJhdGlvbiIKLW1zZ3N0ciAi5pe25pyfIgotCi1tc2dpZCAibGVuZ3RoIGluIEdTdHJlYW1lciB0aW1lIHVuaXRzIChuYW5vc2Vjb25kcykiCi1tc2dzdHIgIkdTdHJlYW1lciDml7bpl7TljZXkvY3nmoTplb/luqYo57qz56eSKSIKLQotbXNnaWQgImNvZGVjIgotbXNnc3RyICLnvJbnoIEiCi0KLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIuaVsOaNruS7pS4uLue8lueggeWtmOWCqCIKLQotbXNnaWQgInZpZGVvIGNvZGVjIgotbXNnc3RyICLop4bpopHnvJbnoIEiCi0KLW1zZ2lkICJjb2RlYyB0aGUgdmlkZW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIuinhumikeaVsOaNruS7pS4uLue8lueggeWtmOWCqCIKLQotbXNnaWQgImF1ZGlvIGNvZGVjIgotbXNnc3RyICLpn7PpopHnvJbnoIEiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIumfs+mikeaVsOaNruS7pS4uLue8lueggeWtmOWCqCIKLQotbXNnaWQgInN1YnRpdGxlIGNvZGVjIgotbXNnc3RyICLlrZfluZXnvJbnoIEiCi0KLW1zZ2lkICJjb2RlYyB0aGUgc3VidGl0bGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIuWtl+W5lee8lueggeaVsOaNruS/neWtmOWcqCIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgIuWuueWZqOagvOW8jyIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQgdGhlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLnlKjkuo7lgqjlrZjmlbDmja7nmoTlrrnlmajmoLzlvI8iCi0KLW1zZ2lkICJiaXRyYXRlIgotbXNnc3RyICLmr5TnibnnjociCi0KLW1zZ2lkICJleGFjdCBvciBhdmVyYWdlIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLnsr7noa7miJblubPlnYfmr5Tnibnnjoco5q+U54m5L+enkikiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIuWQjeS5ieavlOeJueeOhyIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIuWQjeS5ieavlOeJueeOhyjmr5Tnibkv56eSKSIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAi5pyA5bCP5q+U54m5546HIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAi5pyA5bCP5q+U54m5546HKOavlOeJuS/np5IpIgotCi1tc2dpZCAibWF4aW11bSBiaXRyYXRlIgotbXNnc3RyICLmnIDlpKfmr5TnibnnjociCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUgaW4gYml0cy9zIgotbXNnc3RyICLmnIDlpKfmr5Tnibnnjoco5q+U54m5L+enkikiCi0KLW1zZ2lkICJlbmNvZGVyIgotbXNnc3RyICLnvJbnoIHlmagiCi0KLW1zZ2lkICJlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICLnlKjkuo7nvJbnoIHmraTmtYHnmoTnvJbnoIHlmagiCi0KLW1zZ2lkICJlbmNvZGVyIHZlcnNpb24iCi1tc2dzdHIgIue8lueggeWZqOeJiOacrCIKLQotbXNnaWQgInZlcnNpb24gb2YgdGhlIGVuY29kZXIgdXNlZCB0byBlbmNvZGUgdGhpcyBzdHJlYW0iCi1tc2dzdHIgIueUqOS6jue8lueggeatpOa1geeahOe8lueggeWZqOeJiOacrCIKLQotbXNnaWQgInNlcmlhbCIKLW1zZ3N0ciAi5bqP5YiX5Y+3IgotCi1tc2dpZCAic2VyaWFsIG51bWJlciBvZiB0cmFjayIKLW1zZ3N0ciAi6Z+z6L2o55qE5bqP5YiX5Y+3IgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBnYWluIgotbXNnc3RyICLph43mlL7lop7nm4rpn7Povajlop7nm4oiCi0KLW1zZ2lkICJ0cmFjayBnYWluIGluIGRiIgotbXNnc3RyICLpn7Povajlop7nm4ooZGIpIgotCi1tc2dpZCAicmVwbGF5Z2FpbiB0cmFjayBwZWFrIgotbXNnc3RyICLph43mlL7lop7nm4rpn7Povajls7DlgLwiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSB0cmFjayIKLW1zZ3N0ciAi6Z+z6L2o5bOw5YC8IgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBnYWluIgotbXNnc3RyICLph43mlL7lop7nm4rkuJPovpHlop7nm4oiCi0KLW1zZ2lkICJhbGJ1bSBnYWluIGluIGRiIgotbXNnc3RyICLkuJPovpHlop7nm4ooZGIpIgotCi1tc2dpZCAicmVwbGF5Z2FpbiBhbGJ1bSBwZWFrIgotbXNnc3RyICLlm57mlL7lop7nm4rkuJPovpHls7DlgLwiCi0KLW1zZ2lkICJwZWFrIG9mIHRoZSBhbGJ1bSIKLW1zZ3N0ciAi5LiT6L6R5bOw5YC8IgotCi1tc2dpZCAicmVwbGF5Z2FpbiByZWZlcmVuY2UgbGV2ZWwiCi1tc2dzdHIgIuWbnuaUvuWinuebiuWPguiAg+e6p+WIqyIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgIumfs+i9qOWSjOS4k+i+keWinuebiueahOWPguiAg+e6p+WIq+WAvCIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUiCi1tc2dzdHIgIuivreiogOS7o+eggSIKLQotbXNnaWQgImxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgc3RyZWFtLCBjb25mb3JtaW5nIHRvIElTTy02MzktMSBvciBJU08tNjM5LTIiCi1tc2dzdHIgIuatpOa1geeahOivreiogOS7o+egge+8iOS+neeFpyBJU08tNjM5LTEg5oiWIElTTy02MzktMiDop4TojIPvvIkiCi0KLW1zZ2lkICJsYW5ndWFnZSBuYW1lIgotbXNnc3RyICLor63oqIDlkI3np7AiCi0KLW1zZ2lkICJmcmVlZm9ybSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0aGlzIHN0cmVhbSBpcyBpbiIKLW1zZ3N0ciAi5q2k5rWB55qE6K+t6KiA5ZCN56ew77yIZnJlZWZvcm3moLzlvI/vvIkiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAi5Zu+5YOPIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi5pyJ5YWz5q2k5rWB55qE5Zu+5YOPIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICLkuIrkuIDlm77lg48iCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIuacieWFs+atpOa1geeahOS4iuS4gOWbvuWDjyIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgIumZhOWKoOS/oeaBryIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIuacieWFs+atpOa1geeahOaWh+S7tiIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgIuavj+WIhumSn+iKguaLjeaVsCIKLQotbXNnaWQgIm51bWJlciBvZiBiZWF0cyBwZXIgbWludXRlIGluIGF1ZGlvIgotbXNnc3RyICLpn7PpopHkuK3nmoTmr4/liIbpkp/oioLmi43mlbAiCi0KLW1zZ2lkICJrZXl3b3JkcyIKLW1zZ3N0ciAi566A6KaB5paH5pysIgotCi1tc2dpZCAiY29tbWEgc2VwYXJhdGVkIGtleXdvcmRzIGRlc2NyaWJpbmcgdGhlIGNvbnRlbnQiCi1tc2dzdHIgIumAl+WPt+WIhumalOeahOaPj+i/sOaVsOaNruWGheWuueeahOeugOimgeaWh+acrCIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBuYW1lIgotbXNnc3RyICLlnLDnkIbkvY3nva7lkI3np7AiCi0KLW1zZ2lkICIiCi0iaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpdmUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yICIKLSJwcm9kdWNlZCIKLW1zZ3N0ciAi5pyJ5YWz5q2k5aqS5L2T5Zyo5L2V5aSE5b2V5Yi25oiW55Sf5Lqn55qE5Y+v6K+75L+h5oGvIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxhdGl0dWRlIgotbXNnc3RyICLlnLDnkIbnuqzluqYiCi0KLW1zZ2lkICIiCi0iZ2VvIGxhdGl0dWRlIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCBpbiAiCi0iZGVncmVlcyBhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gYXQgdGhlIGVxdWF0b3IsIG5lZ2F0aXZlIHZhbHVlcyBmb3IgIgotInNvdXRoZXJuIGxhdGl0dWRlcykiCi1tc2dzdHIgIiIKLSLmoLnmja4gV0dTODTvvIjotaTpgZPkuLogMCDluqbvvIzljZfljYrnkIPkuLrotJ/lgLzvvInmoIflh4bnoa7lrprnmoTlnLDnkIbnuqzluqblgLzvvIjmnInlhbPmraTlqpLkvZPlnKjlk6rph4wiCi0i5b2V5Yi25oiW5Lqn55Sf55qE77yJIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAi5Zyw55CG57uP5bqmIgotCi1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAiIgotIuagueaNriBXR1M4NO+8iOiLseWbveagvOael+Wogeayu+acrOWIneWtkOWNiOe6v+S4iuS4uiAwIOW6pu+8jOilv+WNiueQg+S4uui0n+WAvO+8ieagh+WHhuehruWumueahOWcsOeQhue7j+W6piIKLSLlgLzvvIjmnInlhbPmraTlqpLkvZPlnKjlk6rph4zlvZXliLbmiJbkuqfnlJ/nmoTvvIkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gZWxldmF0aW9uIgotbXNnc3RyICLlnLDnkIbmtbfmi5QiCi0KLW1zZ2lkICIiCi0iZ2VvIGVsZXZhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgcHJvZHVjZWQgaW4gbWV0ZXJzICIKLSJhY2NvcmRpbmcgdG8gV0dTODQgKHplcm8gaXMgYXZlcmFnZSBzZWEgbGV2ZWwpIgotbXNnc3RyICIiCi0i5qC55o2uIFdHUzg077yI5bmz5Z2H5rW35bmz6Z2i5Li6IDAg57Gz77yJ5qCH5YeG56Gu5a6a55qE5Zyw55CG5rW35ouU6auY5bqm77yI5pyJ5YWz5q2k5aqS5L2T5Zyo5ZOq6YeM5b2V5Yi25oiWIgotIuS6p+eUn+eahO+8iSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjb3VudHJ5IgotbXNnc3RyICLlnLDnkIbkvY3nva7vvIjlm73lrrbvvIkiCi0KLW1zZ2lkICJjb3VudHJ5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAi5aqS5L2T5b2V5Yi25oiW5Yi25L2c5Zyw5omA5Zyo5Zu95a6277yI55qE6Iux6K+t5ZCN77yJIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNpdHkiCi1tc2dzdHIgIuWcsOeQhuS9jee9ru+8iOWfjuW4gu+8iSIKLQotbXNnaWQgImNpdHkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICLlqpLkvZPlvZXliLbmiJbliLbkvZzlnLDmiYDlnKjln47luILvvIjnmoToi7Hor63lkI3vvIkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gc3VibG9jYXRpb24iCi1tc2dzdHIgIuWcsOeQhuWMuuWfn++8iOWMuu+8iSIKLQotbXNnaWQgIiIKLSJhIGxvY2F0aW9uIHdpdGhpbiBhIGNpdHkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHByb2R1Y2VkIG9yIGNyZWF0ZWQgKGUuZy4gIgotInRoZSBuZWlnaGJvcmhvb2QpIgotbXNnc3RyICLlqpLkvZPlvZXliLbmiJbliLbkvZzlnLDmiYDlnKjln47luILnmoTljLrvvIjnmoToi7Hor63lkI3vvInvvIzlpoLigJx0aGUgbmVpZ2hib3Job29k4oCdIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCi1tc2dzdHIgIuWcsOeQhuS9jee9ru+8iOawtOW5s+ivr+W3ru+8iSIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICLpooTmnJ/nmoTmsLTlubPlrprkvY3mtYvph4/or6/lt67vvIjljZXkvY3kuLrnsbPvvIkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgIuWcsOeQhuS9jee9ru+8iOenu+WKqOmAn+W6pu+8iSIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAi6L+b6KGM5o2V5o2J5pe25o2V5o2J6K6+5aSH55qE56e75Yqo6YCf5bqm77yM5Y2V5L2N77ya57Gz5q+P56eSIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG1vdmVtZW50IGRpcmVjdGlvbiIKLW1zZ3N0ciAi5Zyw55CG5L2N572u77yI56e75Yqo5pa55ZCR77yJIgotCi1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgbW92ZW1lbnQgZGlyZWN0aW9uIG9mIHRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSBvZiBhICIKLSJtZWRpYS4gSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgMCAiCi0ibWVhbnMgdGhlIGdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICIiCi0i6L+b6KGM5o2V5o2J5pe25o2V5o2J6K6+5aSH55qE56e75Yqo5pa55ZCR44CC5a6D55Sx6KeS5bqm55qE5rWu54K55YC86KGo56S677yMMOS4uuWcsOeQhuWMl+aege+8jOS4lOaMiemhuuaXtumSiOaWuSIKLSLlkJHlop7lpKciCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gY2FwdHVyZSBkaXJlY3Rpb24iCi1tc2dzdHIgIuWcsOeQhuS9jee9ru+8iOaNleiOt+aWueWQke+8iSIKLQotbXNnaWQgIiIKLSJpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiB0aGUgZGV2aWNlIGlzIHBvaW50aW5nIHRvIHdoZW4gY2FwdHVyaW5nICBhIG1lZGlhLiAiCi0iSXQgaXMgcmVwcmVzZW50ZWQgYXMgZGVncmVlcyBpbiBmbG9hdGluZyBwb2ludCAgcmVwcmVzZW50YXRpb24sIDAgbWVhbnMgdGhlICIKLSJnZW9ncmFwaGljIG5vcnRoLCBhbmQgaW5jcmVhc2VzIGNsb2Nrd2lzZSIKLW1zZ3N0ciAiIgotIui/m+ihjOaNleaNieaXtuaNleaNieiuvuWkh+eahOacneWQkeOAguWug+eUseinkuW6pueahOa1rueCueWAvOihqOekuu+8jDDkuLrlnLDnkIbljJfmnoHvvIzkuJTmjInpobrml7bpkojmlrnlkJHlop4iCi0i5aSnIgotCi0jLiBUUkFOU0xBVE9SUzogJ3Nob3cgbmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUnIGhlcmUKLW1zZ2lkICJzaG93IG5hbWUiCi1tc2dzdHIgIuaYvuekuuWQjeensCIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20iCi1tc2dzdHIgInR2L3BvZGNhc3Qvc2VyaWVzIOeahOWQjeensO+8jOatpOWQjeensOS7o+ihqOWqkuS9k+adpeiHquS9leWkhCIKLQotIy4gVFJBTlNMQVRPUlM6ICdzaG93IHNvcnRuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZSBhcyB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzJyBoZXJlCi1tc2dpZCAic2hvdyBzb3J0bmFtZSIKLW1zZ3N0ciAi5pi+56S65o6S5bqP5ZCNIgotCi1tc2dpZCAiIgotIk5hbWUgb2YgdGhlIHR2L3BvZGNhc3Qvc2VyaWVzIHNob3cgdGhlIG1lZGlhIGlzIGZyb20sIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICJ0di9wb2RjYXN0L3NlcmllcyDlkI3np7Dku6PooajmraTlqpLkvZPmnaXoh6rkvZXlpITvvIjmjpLlkI3mmL7npLrvvIkiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAi5bm05LujIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIuWqkuS9k+aYr+S4gOWto+S4reeahOesrOWHoOWcuuaZryIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgIuWto+WPtyIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICLlqpLkvZPmmK/nrKzlh6DlraMiCi0KLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgIuatjOivjSIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAi5aqS5L2T5q2M6K+N77yM6YCa5bi455So5LqO5q2M5puyIgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgIuaOkuW6j+WQjueahOS9nOabsuiAhSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIueUqOS6juaOkuW6j+eahOi0n+i0o+WItuS9nOeahOS6uuWQjSIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICLlqpLkvZPnu4QiCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLSLlqpLkvZPnu4TmqKrot6jlpJrkuKrpn7PovajvvIzlsLHlpb3lg4/mmK/kuIDlnLrpn7PkuZDkvJrnmoTkuI3lkIzml7bmrrXjgILov5nkuKrmpoLlv7XojIPlm7Tmr5Tpn7Povajpq5jvvIzkvYblsI8iCi0i5LqO5LiT6L6RIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgIueUqOaIt+ivhOe6pyIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICLnlLHnlKjmiLfmj5DkvpvnmoTor4TnuqfjgILor4Tnuqfotorpq5jvvIzmhI/lkbPnnYDmnInotorlpJrnmoTnlKjmiLfllpzmrKLov5nkuIDlqpLkvZMiCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICLorr7lpIfllYYiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLnlKjkuo7liJvlu7rmraTlqpLkvZPnmoTorr7lpIfnmoTnlJ/kuqfljoLlrrYiCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgIuiuvuWkh+aooeW8jyIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAi55So5LqO5Yib5bu65q2k5aqS5L2T55qE6K6+5aSH55qE5qih5byPIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAi5bqU55So56iL5bqP5ZCN56ewIgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICLnlKjkuo7liJvlu7rmraTlqpLkvZPnmoTlupTnlKjnqIvluo8iCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICLlupTnlKjnqIvluo/mlbDmja4iCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICLooqvluo/liJfljJblkI7lhpnlhaXliLDlqpLkvZPkuK3nmoTlupTnlKjnqIvluo/mlbDmja4iCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAi5Zu+5YOP5pa55ZCRIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICLmjIfnpLrlupTlpoLkvZXml4vovazmiJbnv7vovazor6Xlm77lg4/lkI7lho3mmL7npLrlroMiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIuWHuueJiOiAhSIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAi5qCH562+5oiW5Ye654mI5ZWG55qE5ZCN56ewIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIuino+ivtOiAheS4uiIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICLmt7fpn7PvvIjmiJbnsbvkvLzop6Por7TvvInkvZzogIXnmoTkv6Hmga8iCi0KLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAi5Z+65LqObWlkaeeahOazqOinoyIKLQotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAi6Z+z6aKR6L2o55qEbWlkaeazqOino+e8luWPtyIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAi56eB5pyJ5pWw5o2uIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICLkuJPmnInnlKjpgJTnmoTmlbDmja4iCi0KLW1zZ2lkICIsICIKLW1zZ3N0ciAiLCAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTm8gVVJJIGhhbmRsZXIgZm9yIHRoZSAlcyBwcm90b2NvbCBmb3VuZCIKLW1zZ3N0ciAi5pyq5om+5Yiw55So5LqOICVzIOWNj+iurueahFVSSeWkhOeQhuWZqCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJVUkkgc2NoZW1lICclcycgbm90IHN1cHBvcnRlZCIKLW1zZ3N0ciAi5LiN5pSv5oyBVVJJ5pa55qGI4oCcJXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAi6ZSZ6K+v77ya5p2l6Ieq57uE5Lu2ICVz77yaJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iQWRkaXRpb25hbCBkZWJ1ZyBpbmZvOlxuIgotIiVzXG4iCi1tc2dzdHIgIiIKLSLpop3lpJbnmoTosIPor5Xkv6Hmga/vvJpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNvdXJjZSBbc2luaz0lc0AlcF0iCi1tc2dzdHIgIumTvuaOpeayoeaciea6kCBb5rGH5Li6ICVzQCVwXSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJsaW5rIGhhcyBubyBzaW5rIFtzb3VyY2U9JXNAJXBdIgotbXNnc3RyICLpk77mjqXmsqHmnInmsYcgW+a6kOS4uiAlc0AlcF0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIgotbXNnc3RyICLnu4Tku7bigJwlMiRz4oCd5Lit5om+5LiN5Yiw5bGe5oCn4oCcJTEkc+KAnSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3Qgc2V0IHByb3BlcnR5IFwiJXNcIiBpbiBlbGVtZW50IFwiJXNcIiB0byBcIiVzXCIiCi1tc2dzdHIgIuaXoOazleiuvue9rue7hOS7tuKAnCUyJHPigJ3kuK3nmoTlsZ7mgKfigJwlMSRz4oCd5Li64oCcJTMkc+KAnSIKLQotbXNnaWQgIkRlbGF5ZWQgbGlua2luZyBmYWlsZWQuIgotbXNnc3RyICLlu7bov5/pk77mjqXlpLHotKXjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiY291bGQgbm90IGxpbmsgJXMgdG8gJXMiCi1tc2dzdHIgIuaXoOazleWwhiAlcyDpk77mjqXliLAgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIuaXoOe7hOS7tuKAnCVz4oCdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgInVuZXhwZWN0ZWQgcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICLmnKrpooTmnJ/nmoTlvJXnlKjigJwlc+KAnSAtIOW/veeVpSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHBhZC1yZWZlcmVuY2UgXCIlc1wiIC0gaWdub3JpbmciCi1tc2dzdHIgIuacqumihOacn+eahOWhq+WFheW8leeUqOKAnCVz4oCdIC0g5b+955WlIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjYXBzIFwiJXNcIiIKLW1zZ3N0ciAi5peg5rOV6Kej5p6Q5YiG5p6Q5Zmo4oCcJXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibm8gc2luayBlbGVtZW50IGZvciBVUkkgXCIlc1wiIgotbXNnc3RyICJVUknigJwlc+KAneS4iuaXoOa2iOmfs+e7hOS7tiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiVVJJ4oCcJXPigJ3ml6DmupDnu4Tku7YiCi0KLW1zZ2lkICJzeW50YXggZXJyb3IiCi1tc2dzdHIgIuivreazlemUmeivryIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJzcGVjaWZpZWQgZW1wdHkgYmluIFwiJXNcIiwgbm90IGFsbG93ZWQiCi1tc2dzdHIgIuS4jeWFgeiuuOaMh+WumuepuuWCqOS7k+KAnCVz4oCdIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIGJpbiBcIiVzXCIsIHVucGFja2luZyBlbGVtZW50cyIKLW1zZ3N0ciAi5om+5LiN5Yiw55So5LqO6Kej5YyF57uE5Lu255qE5YKo5LuT4oCcJXPigJ0iCi0KLW1zZ2lkICJlbXB0eSBwaXBlbGluZSBub3QgYWxsb3dlZCIKLW1zZ3N0ciAi5LiN5YWB6K6456m6566h6YGTIgotCi1tc2dpZCAiQSBsb3Qgb2YgYnVmZmVycyBhcmUgYmVpbmcgZHJvcHBlZC4iCi1tc2dzdHIgIuiuuOWkmue8k+WGsuiiq+S4ouW8g+OAgiIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBwcm9ibGVtLiIKLW1zZ3N0ciAi5YaF6YOo5pWw5o2u5rWB6Zeu6aKY44CCIgotCi1tc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLW1zZ3N0ciAi5YaF6YOo5pWw5o2u5rWB6ZSZ6K+v44CCIgotCi1tc2dpZCAiSW50ZXJuYWwgY2xvY2sgZXJyb3IuIgotbXNnc3RyICLlhoXpg6jml7bpkp/plJnor6/jgIIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIuaYoOWwhOe8k+WGsuWksei0peOAgiIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICLov4fmu6TliIbmnpDlmagiCi0KLW1zZ2lkICIiCi0iUmVzdHJpY3QgdGhlIHBvc3NpYmxlIGFsbG93ZWQgY2FwYWJpbGl0aWVzIChOVUxMIG1lYW5zIEFOWSkuIFNldHRpbmcgdGhpcyAiCi0icHJvcGVydHkgdGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN1cHBsaWVkIEdzdENhcHMgb2JqZWN0LiIKLW1zZ3N0ciAiIgotIumZkOWItuaJgOWFgeiuuOeahOWKn+iDvSAoTlVMTCDooajnpLrml6DpmZDliLYp44CC5q2k5bGe5oCn5Y+v5Lul5Li65omA5o+Q5L6b55qEIEdzdENhcHMg5a+56LGh6K6+572u5LiA5LiqIgotIuWFs+iBlOW6lOeUqOOAgiIKLQotbXNnaWQgIkNhcHMgQ2hhbmdlIE1vZGUiCi1tc2dzdHIgIuWIhuaekOWZqOWPmOabtOaooeW8jyIKLQotbXNnaWQgIkZpbHRlciBjYXBzIGNoYW5nZSBiZWhhdmlvdXIiCi1tc2dzdHIgIui/h+a7pOWIhuaekOWZqOWPmOabtOihjOS4uiIKLQotbXNnaWQgIk5vIFRlbXAgZGlyZWN0b3J5IHNwZWNpZmllZC4iCi1tc2dzdHIgIuacquaMh+WumuS4tOaXtuebruW9leOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZSBcIiVzXCIuIgotbXNnc3RyICLml6Dms5XliJvlu7rkuLTml7bmlofku7bigJwlc+KAneOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIuaXoOazleaJk+W8gOaWh+S7tuKAnCVz4oCd6K+75Y+W44CCIgotCi1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBkb3dubG9hZCBmaWxlLiIKLW1zZ3N0ciAi5YaZ5YWl5LiL6L295paH5Lu25pe25Ye66ZSZ44CCIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIuacquaMh+WumuWGmeWFpeeahOaWh+S7tuWQjeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi1tc2dzdHIgIuaXoOazleaJk+W8gOaWh+S7tuKAnCVz4oCd5YaZ5YWl44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotbXNnc3RyICLlhbPpl63mlofku7bigJwlc+KAneWHuumUmeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi5Zyo5paH5Lu24oCcJXPigJ3mkJzlr7vml7blh7rplJnjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIuWGmeWFpeaWh+S7tuKAnCVz4oCd5pe25Ye66ZSZ44CCIgotCi1tc2dpZCAiTm8gZmlsZSBuYW1lIHNwZWNpZmllZCBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIuacquaMh+Wumuivu+WPlueahOaWh+S7tuWQjeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IGluZm8gb24gXCIlc1wiLiIKLW1zZ3N0ciAi5peg5rOV5Zyo4oCcJXPigJ3kuIrojrflvpfkv6Hmga/jgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAi4oCcJXPigJ3kuI3mmK/nm67lvZXjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmlsZSBcIiVzXCIgaXMgYSBzb2NrZXQuIgotbXNnc3RyICLmlofku7bigJwlc+KAneaYr+Wll+aOpeWtl+OAgiIKLQotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIuWcqOWujOaIkOaJgOimgeaxgueahOi/reS7o+aTjeS9nOWQjuWHuumUmeOAgiIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgIuWIhuaekOWZqCIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgIua1geS4reaOoua1i+WIsOeahOS/oeaBryIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIuacgOWwjyIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgIuW8uuWItuWIhuaekCIKLQotbXNnaWQgImZvcmNlIGNhcHMgd2l0aG91dCBkb2luZyBhIHR5cGVmaW5kIgotbXNnc3RyICLkuI3lgZrnsbvlnovmn6Xmib7nmoTlvLrliLbliIbmnpAiCi0KLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAi5rWB5Lit5rKh5pyJ6Laz5aSf5pWw5o2u44CCIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICLmtYHkuK3kuI3lkKvmlbDmja4iCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICLlrp7njrDnmoTmjqXlj6M6XG4iCi0KLW1zZ2lkICJyZWFkYWJsZSIKLW1zZ3N0ciAi5Y+v6K+7IgotCi1tc2dpZCAid3JpdGFibGUiCi1tc2dzdHIgIuWPr+WGmSIKLQotbXNnaWQgImRlcHJlY2F0ZWQiCi1tc2dzdHIgIuW3suW6n+W8gyIKLQotbXNnaWQgImNvbnRyb2xsYWJsZSIKLW1zZ3N0ciAi5Y+v5o6n5Yi2IgotCi1tc2dpZCAiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiCi1tc2dzdHIgIuWPr+S7peWcqE5VTEzjgIFSRUFEWeOAgVBBVVNFROaIllBMQVlJTkfnirbmgIHkuIvmlLnlj5giCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCwgUkVBRFkgb3IgUEFVU0VEIHN0YXRlIgotbXNnc3RyICLlj6rog73lnKhOVUxM44CBUkVBRFnmiJZQQVVTRUTnirbmgIHkuIvmlLnlj5giCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIG9ubHkgaW4gTlVMTCBvciBSRUFEWSBzdGF0ZSIKLW1zZ3N0ciAi5Y+q6IO95ZyoTlVMTOOAgeaIllJFQURZ54q25oCB5LiL5pS55Y+YIgotCi1tc2dpZCAiQmxhY2tsaXN0ZWQgZmlsZXM6IgotbXNnc3RyICLmlofku7bpu5HlkI3ljZU6IgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAi5oC75pWwOiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWQg5Liq6buR5ZCN5Y2V5paH5Lu2IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIHBsdWdpbiIKLW1zZ2lkX3BsdXJhbCAiJWQgcGx1Z2lucyIKLW1zZ3N0clswXSAiJWQg5Liq5o+S5Lu2IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiVkIGJsYWNrbGlzdCBlbnRyeSIKLW1zZ2lkX3BsdXJhbCAiJWQgYmxhY2tsaXN0IGVudHJpZXMiCi1tc2dzdHJbMF0gIiVkIOS4qum7keWQjeWNleiusOW9lSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBmZWF0dXJlIgotbXNnaWRfcGx1cmFsICIlZCBmZWF0dXJlcyIKLW1zZ3N0clswXSAiJWQg5Liq54m55oCnIgotCi1tc2dpZCAiUHJpbnQgYWxsIGVsZW1lbnRzIgotbXNnc3RyICLmiZPljbDlhajpg6jnu4Tku7YiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICLmmL7npLrpu5HlkI3ljZXmlofku7bliJfooagiCi0KLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotIuaJk+WNsOacuuWZqOWPr+ino+aekOeahOaMh+Wumu+8iOaIluaJgOacie+8ieaPkuS7tuaPkOS+m+eahOeJueaAp+WIl+ihqOOAglxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWPr+S7peeUqOS6juS4juWklumDqOiHquWKqOaPkuS7tuWuieijheacuuWItueahOi/nuaOpSIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAi5YiX5Ye65o+S5Lu25L+h5oGvIgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIuajgOafpeaMh+WumueahOe7hOS7tuaIluaPkuS7tuaYr+WQpuWtmOWcqCIKLQotbXNnaWQgIiIKLSJXaGVuIGNoZWNraW5nIGlmIGFuIGVsZW1lbnQgb3IgcGx1Z2luIGV4aXN0cywgYWxzbyBjaGVjayB0aGF0IGl0cyB2ZXJzaW9uIGlzICIKLSJhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiCi1tc2dzdHIgIuW9k+ajgOafpee7hOS7tuaIluaPkuS7tuaYr+WQpuWtmOWcqOaXtu+8jOS5n+ajgOa1i+Wug+S7rOeahOeJiOacrOaYr+WQpuWkp+S6juetieS6juaMh+WumueJiOacrCIKLQotbXNnaWQgIlByaW50IHN1cHBvcnRlZCBVUkkgc2NoZW1lcywgd2l0aCB0aGUgZWxlbWVudHMgdGhhdCBpbXBsZW1lbnQgdGhlbSIKLW1zZ3N0ciAi5omT5Y2w5omA5pSv5oyB55qEIFVSSSDmoLflvI/lj4rlroPku6znmoTlhbPogZTnu4Tku7YiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iCi1tc2dzdHIgIuaXoOazlei9veWFpeaPkuS7tuaWh+S7tjogJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAi5rKh5pyJ6YKj5qC355qE57uE5Lu25oiW5o+S5Lu24oCYJXPigJlcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIue0ouW8lee7n+iuoSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIuS7jue7hOS7tuKAnCUyJHPigJ3ojrflvpfmtojmga8gIyUxJHXvvIglMyRz77yJ77yaICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBwYWQgXCIlczolc1wiICglcyk6ICIKLW1zZ3N0ciAi5LuO5aGr5YWF4oCcJTIkc++8miUzJHPigJ3ojrflvpfmtojmga8gIyUxJHXvvIglNCRz77yJ77yaICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIKLW1zZ3N0ciAi5LuO5a+56LGh4oCcJTIkc+KAneiOt+W+l+a2iOaBryAjJTEkde+8iCUzJHPvvInvvJogIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSAoJXMpOiAiCi1tc2dzdHIgIuiOt+W+l+a2iOaBryAjJXXvvIglc++8ie+8miAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIgotbXNnc3RyICLmlLbliLDmnaXoh6rnu4Tku7bigJwlc+KAneeahCBFT1Mg5L+h5Y+344CCXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAi5om+5Yiw5qCH6K+GICAgICAg77ya55Sx57uE5Lu24oCcJXPigJ3mib7liLDjgIJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIuaJvuWIsOagh+ivhiAgICAgIO+8mueUseWhq+WFheKAnCVz77yaJXPigJ3mib7liLDjgIJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIuaJvuWIsOagh+ivhiAgICAgIO+8mueUseWvueixoeKAnCVz4oCd5om+5Yiw44CCXG4iCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAi5om+5Yiw5qCH6K+GXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAi5om+5YiwVE9DICAgICAg77ya55Sx57uE5Lu24oCcJXPigJ3mib7liLDjgIJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIuaJvuWIsFRPQyAgICAgIO+8mueUseWvueixoeKAnCVz4oCd5om+5Yiw44CCXG4iCi0KLW1zZ2lkICJGT1VORCBUT0NcbiIKLW1zZ3N0ciAi5om+5YiwVE9DXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIklORk86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIuS/oeaBrzpcbiIKLSIlc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIldBUk5JTkc6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAi6K2m5ZGK77ya5p2l6Ieq57uE5Lu2ICVz77yaJXNcbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgYnVmZmVyaW5nIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICLlt7LliqDovb3pooTlkYrniYfvvIznrYnlvoXnvJPlhrLlrozmiJAuLi5cbiIKLQotbXNnaWQgIlByZXJvbGxlZCwgd2FpdGluZyBmb3IgcHJvZ3Jlc3MgdG8gZmluaXNoLi4uXG4iCi1tc2dzdHIgIuW3suWKoOi9vemihOWRiueJh++8jOetieW+heWkhOeQhuWujOaIkC4uLlxuIgotCi1tc2dpZCAiYnVmZmVyaW5nLi4uIgotbXNnc3RyICLmraPlnKjnvJPlhrIuLi4iCi0KLW1zZ2lkICJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICLnvJPlhrLlrozmiJDvvIzorr7nva7mkq3mlL7nrqHpgZMgLi4uXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICLmraPlnKjnvJPlhrLvvIzorr7nva7mmoLlgZznrqHpgZMgLi4uXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICLph43mlrDliIbphY3lu7bov5/ml7bpl7QuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICIlMiRzIOWPkei1t+ivt+axguaXtueKtuaAgeiuvue9ruS4uiAlMSRzLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQ6IFN0b3BwaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICLkuK3mlq06IOS4reatoueuoemBkyAuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICLov5vluqbvvJrvvIglc++8iSVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICLnvLrlsJHnu4Tku7bvvJrigJwlc+KAnVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBjb250ZXh0IGZyb20gZWxlbWVudCAnJXMnOiAlcz0lc1xuIgotbXNnc3RyICLku47nu4Tku7bigJwlc+KAneiOt+WPluS4iuS4i+aWh++8miVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIui+k+WHuuagh+ivhijkuZ/lj6/orqTkuLrmmK/lhYPmlbDmja4pIgotCi1tc2dpZCAiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIKLW1zZ3N0ciAi6L6T5Ye6VE9D77yI56ug6IqC5ZKM54mI5pys77yJIgotCi1tc2dpZCAiT3V0cHV0IHN0YXR1cyBpbmZvcm1hdGlvbiBhbmQgcHJvcGVydHkgbm90aWZpY2F0aW9ucyIKLW1zZ3N0ciAi6L6T5Ye654q25oCB5L+h5oGv5ZKM5bGe5oCn6YCa55+lIgotCi1tc2dpZCAiRG8gbm90IHByaW50IGFueSBwcm9ncmVzcyBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAi5LiN5omT5Y2w5Lu75L2V6L+b5bqm5L+h5oGvIgotCi1tc2dpZCAiT3V0cHV0IG1lc3NhZ2VzIgotbXNnc3RyICLovpPlh7rkv6Hmga8iCi0KLW1zZ2lkICIiCi0iRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaWYgdmVyYm9zZSAiCi0ib3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIKLW1zZ3N0ciAi5aaC5p6c5ZCv55So5LqG6K+m57uG6L6T5Ye65qih5byP77yM5LiN6L6T5Ye65oyH5a6a5bGe5oCn55qE54q25oCB5L+h5oGv77yI5Y+v5Lul5aSa5qyh5L2/55So77yJIgotCi1tc2dpZCAiUFJPUEVSVFktTkFNRSIKLW1zZ3N0ciAi5bGe5oCn5ZCNIgotCi1tc2dpZCAiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIgotbXNnc3RyICLkuI3lronoo4XplJnor6/nmoTlpITnkIbnqIvluo8iCi0KLW1zZ2lkICJGb3JjZSBFT1Mgb24gc291cmNlcyBiZWZvcmUgc2h1dHRpbmcgdGhlIHBpcGVsaW5lIGRvd24iCi1tc2dzdHIgIuWFs+mXreeuoemBk+WJjeW8uuWItuWvuea6kOWPkeWHuiBFT1Mg5L+h5Y+3IgotCi1tc2dpZCAiR2F0aGVyIGFuZCBwcmludCBpbmRleCBzdGF0aXN0aWNzIgotbXNnc3RyICLmlLbpm4blubbmmL7npLrntKLlvJXnu5/orqEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZDogJXMuXG4iCi1tc2dzdHIgIumUmeivrzog5peg5rOV5Yib5bu6566h6YGTOiAlc+OAglxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAi6ZSZ6K+vOiDml6Dms5XliJvlu7rnrqHpgZPjgIJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIuitpuWRijog6ZSZ6K+v566h6YGTOiAlc1xuIgotCi1tc2dpZCAiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIgotbXNnc3RyICLplJnor686IOacquaJvuWIsOKAmOeuoemBk+KAmee7hOS7tuOAglxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iCi1tc2dzdHIgIuiuvue9ruaaguWBnOeuoemBkyAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBQaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGF1c2UuXG4iCi1tc2dzdHIgIumUmeivrzog566h6YGT5LiN5oOz5pqC5YGc44CCXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIueuoemBk+ato+WcqOS9v+eUqOS4lOS4jemcgOimgSBQUkVST0xMIC4uLlxuIgotCi1tc2dpZCAiUGlwZWxpbmUgaXMgUFJFUk9MTElORyAuLi5cbiIKLW1zZ3N0ciAi566h6YGT5q2j5ZyoIFBSRVJPTExJTkcgLi4uXG4iCi0KLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHByZXJvbGwuXG4iCi1tc2dzdHIgIumUmeivrzog566h6YGT5LiN6ZyA6KaBIHByZXJvbGwuXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iCi1tc2dzdHIgIueuoemBk+iiqyBQUkVST0xMRUQgLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uXG4iCi1tc2dzdHIgIuiuvue9ruaSreaUvueuoemBkyAuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAi6ZSZ6K+vOiDnrqHpgZPkuI3mg7Pmkq3mlL7jgIJcbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIEZvcmNpbmcgRU9TIG9uIHRoZSBwaXBlbGluZVxuIgotbXNnc3RyICLlhYHorrjlhbPpl63ml7blj5Hlh7ogRU9TIOS/oeWPtyDigJTigJQg5by65Yi25a+5566h6YGT5Y+R5Ye6IEVPUyDkv6Hlj7dcbiIKLQotbXNnaWQgIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIgotbXNnc3RyICLlhYHorrjlhbPpl63ml7blj5Hlh7ogRU9TIOS/oeWPtyDigJTigJQg5Y+R55Sf6ZSZ6K+v5ZCO562J5b6FRU9T5L+h5Y+3XG4iCi0KLW1zZ2lkICJXYWl0aW5nIGZvciBFT1MuLi5cbiIKLW1zZ3N0ciAi562J5b6FIEVPUyDkv6Hlj7cuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIuaUtuWIsCBFT1Mg5L+h5Y+3IC0g5Lit5q2i566h6YGTIC4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0IHdoaWxlIHdhaXRpbmcgZm9yIEVPUyAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIuetieW+hUVPU+S/oeWPt+aXtuiiq+S4reaWrSAtIOato+WcqOS4reatoueuoemBky4uLlxuIgotCi1tc2dpZCAiQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgRU9TXG4iCi1tc2dzdHIgIuetieW+hSBFT1Mg5L+h5Y+35pe25Ye6546w5LiA5Liq6ZSZ6K+vXG4iCi0KLW1zZ2lkICJFeGVjdXRpb24gZW5kZWQgYWZ0ZXIgJSIKLW1zZ3N0ciAi5ZyoICUg5ZCO6L+Q6KGM57uI5q2iIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSAuLi5cbiIKLW1zZ3N0ciAi6K6+572u5aSH55So566h6YGTIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIgotbXNnc3RyICLorr7nva4gTlVMTCDnrqHpgZMgLi4uXG4iCi0KLW1zZ2lkICJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIgotbXNnc3RyICLph4rmlL7nrqHpgZPotYTmupAgLi4uXG4iCi0KLSN+IG1zZ2lkICJiaW4iCi0jfiBtc2dzdHIgIuWCqOS7kyIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAi5YaF6YOo5pWw5o2u5rWB6ZSZ6K+v44CCIgotCi0jfiBtc2dpZCAiRG8gbm90IG91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gb2YgVFlQRSIKLSN+IG1zZ3N0ciAi5LiN6L6T5Ye657G75Z6L55qE54q25oCB5L+h5oGvIgotCi0jfiBtc2dpZCAiVFlQRTEsVFlQRTIsLi4uIgotI34gbXNnc3RyICLnsbvlnosx77yM57G75Z6LMu+8jC4uLiIKLQotI34gbXNnaWQgImxpbmsgd2l0aG91dCBzb3VyY2UgZWxlbWVudCIKLSN+IG1zZ3N0ciAi5LiN5bim5rqQ57uE5Lu255qE6ZO+5o6lIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNpbmsgZWxlbWVudCIKLSN+IG1zZ3N0ciAi5LiN5bim5raI6Z+z57uE5Lu255qE6ZO+5o6lIgotCi0jfiBtc2dpZCAibm8gZWxlbWVudCB0byBsaW5rIFVSSSBcIiVzXCIgdG8iCi0jfiBtc2dzdHIgIuaXoOe7hOS7tuiuqSBVUknigJwlc+KAneadpei/nuaOpSIKLQotI34gbXNnaWQgImNvdWxkIG5vdCBsaW5rIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLSN+IG1zZ3N0ciAi5peg5rOV6L+e5o6lIFVSSeKAnCVz4oCd55qE5raI6Z+z57uE5Lu2IgotCi0jfiBtc2dpZCAibWF4aW11bSIKLSN+IG1zZ3N0ciAi5pyA5aSnIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAi55So5rOVOiBnc3QteG1sbGF1bmNoIDxmaWxlLnhtbD4gWyBlbGVtZW50LnByb3BlcnR5PXZhbHVlIC4uLiBdXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogcGFyc2Ugb2YgeG1sIGZpbGUgJyVzJyBmYWlsZWQuXG4iCi0jfiBtc2dzdHIgIumUmeivrzogeG1sIOaWh+S7tuKAmCVz4oCZ6Kej5p6Q5aSx6LSl44CCXG4iCi0KLSN+IG1zZ2lkICJFUlJPUjogbm8gdG9wbGV2ZWwgcGlwZWxpbmUgZWxlbWVudCBpbiBmaWxlICclcycuXG4iCi0jfiBtc2dzdHIgIumUmeivrzog5paH5Lu24oCYJXPigJnkuK3msqHmnInpobbnuqfnrqHpgZPnu4Tku7bjgIJcbiIKLQotI34gbXNnaWQgIldBUk5JTkc6IG9ubHkgb25lIHRvcGxldmVsIGVsZW1lbnQgaXMgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS5cbiIKLSN+IG1zZ3N0ciAi6K2m5ZGKOiDmraTml7bku4XmlK/mjIHkuIDkuKrkuIDnuqfnu4Tku7bjgIJcbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAi6ZSZ6K+vOiDml6Dms5Xop6PmnpDlkb3ku6TooYzlj4LmlbAgJWQ6ICVz44CCXG4iCi0KLSN+IG1zZ2lkICJXQVJOSU5HOiBlbGVtZW50IG5hbWVkICclcycgbm90IGZvdW5kLlxuIgotI34gbXNnc3RyICLorablkYo6IOe7hOS7tuWQjeKAmCVz4oCZ5pyq5om+5Yiw44CCXG4iCi0KLSN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgotI34gbXNnc3RyICLkv53lrZjnrqHpgZPnmoQgeG1sIOaPj+i/sOespuiHs+aWh+S7tuW5tumAgOWHuiIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIuaWh+S7tiIKLQotI34gbXNnaWQgIlByaW50IGFsbG9jIHRyYWNlIChpZiBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSkiCi0jfiBtc2dzdHIgIuaJk+WNsOWIhumFjeiusOW9lSjlpoLmnpzlnKjnvJbor5Hml7blvIDlkK/nmoTor50pIgotCi0jfiBtc2dpZCAiRXJyb3IgcmUtc2Nhbm5pbmcgcmVnaXN0cnkgJXM6ICVzIgotI34gbXNnc3RyICLph43mlrDmiavmj4/lr4TlrZjlmaggJXMg5pe25Ye66ZSZOiAlcyIKLQotI34gbXNnaWQgIkVycm9yIHJlLXNjYW5uaW5nIHJlZ2lzdHJ5ICVzIgotI34gbXNnc3RyICLph43mlrDmiavmj4/lr4TlrZjlmaggJXMg5pe25Ye66ZSZIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyIOWGhemDqOmUmeivr++8mueKtuaAgeabtOaUueWksei0peOAgiIKLQotI34gbXNnaWQgIkVycm9yIHdoaWxlIHdyaXRpbmcgdG8gZmlsZSBkZXNjcmlwdG9yIFwiJWRcIi4iCi0jfiBtc2dzdHIgIuWGmeWFpeaWh+S7tuaPj+i/sOespuKAnCVk4oCd5pe25Ye66ZSZ44CCIgotCi0jfiBtc2dpZCAiRmlsZSBkZXNjcmlwdG9yIFwiJWRcIiBpcyBub3QgdmFsaWQuIgotI34gbXNnc3RyICLmlofku7bmj4/ov7DnrKbigJwlZOKAneaXoOaViOOAgiIKLQotI34gbXNnaWQgIkZSRUVJTkcgcGlwZWxpbmUgLi4uXG4iCi0jfiBtc2dzdHIgIuato+WcqOmHiuaUvueuoemBkyAuLi5cbiIKLQotI34gbXNnaWQgIm9yaWdpbmFsIGxvY2F0aW9uIG9mIGZpbGUgYXMgYSBVUkkiCi0jfiBtc2dzdHIgIuaWh+S7tuWOn+Wni+S9jee9ruS9nOS4uiBVUkkg5Zyw5Z2AIgotCi0jfiBtc2dpZCAiRG8gbm90IGluc3RhbGwgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdVU1IxIGFuZCBTSUdVU1IyIgotI34gbXNnc3RyICLkuI3orr7nva4gU0lHVVNSMSDlkowgU0lHVVNSMiDkv6Hlj7fnmoTlpITnkIblmagiCmRpZmYgLS1naXQgYS9wby96aF9UVy5nbW8gYi9wby96aF9UVy5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwODUyMDMuLjAwMDAwMDAKLS0tIGEvcG8vemhfVFcuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vemhfVFcucG8gYi9wby96aF9UVy5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYzMzJkZS4uMDAwMDAwMAotLS0gYS9wby96aF9UVy5wbworKysgL2Rldi9udWxsCkBAIC0xLDEzNjkgKzAsMCBAQAotIyB0cmFkaXRpb25hbCBDaGluZXNlIHRyYW5zbGF0aW9uIG9mIGdzdHJlYW1lci4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgQWJlbCBDaGV1bmcgPGFiZWxjaGV1bmdAZ21haWwuY29tPiwgMjAwNS4KLSMgV2VuIExpYW8gPHdlbi5jZjgzQGdtYWlsLmNvbT4sIDIwMTQKLSMgVGVybXMgc3luYy11cDoKLSMgcGx1Z2luOiDlpJbmjpvnqIvlvI8KLSMgbG9nOiDml6XoqowKLSMgcmVnaXN0cnk6IOeZu+mMhOizh+aWmQotIyB0aHJlYWQ6IOWft+ihjOe3kgotIyBzZWVrOiDot7Pmkq0gKOmAmuW4uOWkmuWqkumrlOaSreaUvuS4rXNlZWvkuI3mmK/lrZfpnaLkuIrnmoTmkJzlsIvvvIzogIzmmK/ot7PliLDlqpLpq5Tku7vmhI/lnLDmlrnvvIzlm6DmraQKLSMgICAgICAgICAgICAg5L2/55So5pCc5bCL77yM5bCL5om+5Lim5LiN5aSg57K+56K677yJCi0jIHN0cmVhbTog6LOH5paZ5Liy5rWBCi0jIG11bHRpcGxleDog5aSa5bel5Liy5o6lCi0jIGRlbXVsdGlwbGV4OiDop6PlpJrlt6XliIbmjqUKLSMga2V5OiDph5HpkbAKLSMgcmVwbGF5Z2Fpbjog5Zue5pS+5aKe55uK77yM55So5Zyo56K65L+dcGxheWxpc3TlhafmiYDmnInpn7Pou4zkuI3mnIPpn7Pph4/kuI3lkIwKLSMgICAgICAgICAgIGh0dHA6Ly96aC53aWtpcGVkaWEub3JnL3poLXR3LyVFNSU5QiU5RSVFNiU5NCVCRSVFNSVBMiU5RSVFNyU5QiU4QQotIyBwcm9ibGVtOiDlpKfpg6jliIbnv7vmiJDpjK/oqqQKLSMgcmVmZXJlbmNlOiDlj4PnhafvvIjmh4noqbLmnInmm7Tlpb3nmoTlkI3oqZ7vvIkKLSMg5L+d55WZ5Y6f5ZCN77yaCi0jIDEuIEdTdHJlYW1lcuWwiOeUqOWFg+S7tjogZWxlbWVudCwgcGFkLCBjYXBzLCBjbG9jaywgcGlwZWxpbmUsIGJpbiwg5p+Q5LqbbGluawotIyAyLiDlsIjmnInlkI3oqZ7vvJogY29kZWMsIGNvbnRhaW5lciwgYmVhdCwgVVJJLCBVUkkgc2NoZW1lLCBUT0MKLSMgMy4g55aR5Ly85bCI5pyJ5ZCN6Kme77yaZG9tYWluCi0jIDQuIEdTdHJlYW1lcuWFp+mDqOeLgOaFiwotIyA1LiBtZXRhZGF0YQotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0cmVhbWVyIDEuMy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTIrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTQtMDYtMDggMDA6MjIrMDgwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogV2VuIExpYW8gPHdlbi5jZjgzQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBDaGluZXNlICh0cmFkaXRpb25hbCkgPHpoLWwxMG5AbGludXgub3JnLnR3PlxuIgotIkxhbmd1YWdlOiB6aF9UV1xuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCi0KLW1zZ2lkICJQcmludCB0aGUgR1N0cmVhbWVyIHZlcnNpb24iCi1tc2dzdHIgIumhr+ekuiBHU3RyZWFtZXIg54mI5pysIgotCi1tc2dpZCAiTWFrZSBhbGwgd2FybmluZ3MgZmF0YWwiCi1tc2dzdHIgIuWwh+aJgOacieitpuWRiuimlueCuuWatOmHjemMr+iqpCIKLQotbXNnaWQgIlByaW50IGF2YWlsYWJsZSBkZWJ1ZyBjYXRlZ29yaWVzIGFuZCBleGl0IgotbXNnc3RyICLpoa/npLrlj6/ku6XlgbXpjK/nmoTpoZ7liKXvvIzkuKbntZDmnZ8iCi0KLW1zZ2lkICIiCi0iRGVmYXVsdCBkZWJ1ZyBsZXZlbCBmcm9tIDEgKG9ubHkgZXJyb3IpIHRvIDkgKGFueXRoaW5nKSBvciAwIGZvciBubyBvdXRwdXQiCi1tc2dzdHIgIiIKLSLlsIfpoJDoqK3lgbXpjK/nrYnntJroqK3lrprngrogMSAo5Y+q6aGv56S66Yyv6KqkKSDoh7MgOSAo5Lu75L2V6KiK5oGvKe+8jOaIluiAheeUqCAwIOihqOekuuS4jemhr+ekuuioiuaBryIKLQotbXNnaWQgIkxFVkVMIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnlfbmFtZTpsZXZlbCBwYWlycyB0byBzZXQgc3BlY2lmaWMgbGV2ZWxzIGZvciAiCi0idGhlIGluZGl2aWR1YWwgY2F0ZWdvcmllcy4gRXhhbXBsZTogR1NUX0FVVE9QTFVHOjUsR1NUX0VMRU1FTlRfKjozIgotbXNnc3RyICIiCi0i5Lul6YCX6Jmf5YiG6ZqU5YiX6KGo5Lit55qE5YWn5a6577yM5YWn5a6555qE5qC85byP54K644CM5YiG6aGeOuetiee0muOAje+8jOS7peatpOaWueW8j+aMh+WumuWQhOWAi+WIhumhnueahOetiSIKLSLntJrjgILkvovlpoLvvJpHU1RfQVVUT1BMVUc6NSxHU1RfRUxFTUVOVF8qOjMiCi0KLW1zZ2lkICJMSVNUIgotbXNnc3RyICIiCi0KLW1zZ2lkICJEaXNhYmxlIGNvbG9yZWQgZGVidWdnaW5nIG91dHB1dCIKLW1zZ3N0ciAi5YG16Yyv57WQ5p6c5LiN6aGv56S66aGP6ImyIgotCi1tc2dpZCAiIgotIkNoYW5nZXMgY29sb3JpbmcgbW9kZSBvZiB0aGUgZGVidWcgbG9nLiBQb3NzaWJsZSBtb2Rlczogb2ZmLCBvbiwgZGlzYWJsZSwgIgotImF1dG8sIHVuaXgiCi1tc2dzdHIgIuabtOaUueWBtemMr+aXpeiqjOmFjeiJsuaooeW8j++8jOaUr+aPtOmFjeiJsuaooeW8j+eCuu+8mm9mZiwgb24sIGRpc2FibGUsIGF1dG8sIHVuaXgiCi0KLW1zZ2lkICJEaXNhYmxlIGRlYnVnZ2luZyIKLW1zZ3N0ciAi6Zec6ZaJ5YG16Yyv5Yqf6IO9IgotCi1tc2dpZCAiRW5hYmxlIHZlcmJvc2UgcGx1Z2luIGxvYWRpbmcgZGlhZ25vc3RpY3MiCi1tc2dzdHIgIui8ieWFpeWkluaOm+aZgumhr+ekuuips+e0sOioiuaBryIKLQotbXNnaWQgIkNvbG9uLXNlcGFyYXRlZCBwYXRocyBjb250YWluaW5nIHBsdWdpbnMiCi1tc2dzdHIgIuS7peWIhuiZn+WIhumalOeahOi3r+W+keS4reacieWMheWQq+WkluaOm+eoi+W8jyIKLQotbXNnaWQgIlBBVEhTIgotbXNnc3RyICLot6/lvpEiCi0KLW1zZ2lkICIiCi0iQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGx1Z2lucyB0byBwcmVsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBsaXN0IHN0b3JlZCBpbiAiCi0iZW52aXJvbm1lbnQgdmFyaWFibGUgR1NUX1BMVUdJTl9QQVRIIgotbXNnc3RyICIiCi0i6Zmk5LqG5pyJ6Ly45YWl55Kw5aKD6K6K5pW4IEdTVF9QTFVHSU5fUEFUSCDnmoTlpJbmjpvnqIvlvI/kuYvlpJbvvIzmiYDmnInku6XpgJfomZ/liIbpmpTnmoTlpJbmjpvnqIvlvI/muIUiCi0i5Zau6YO95pyD6KKr6aCQ6LyJIgotCi1tc2dpZCAiUExVR0lOUyIKLW1zZ3N0ciAi5aSW5o6b56iL5byPIgotCi1tc2dpZCAiRGlzYWJsZSB0cmFwcGluZyBvZiBzZWdtZW50YXRpb24gZmF1bHRzIGR1cmluZyBwbHVnaW4gbG9hZGluZyIKLW1zZ3N0ciAi6LyJ5YWl5aSW5o6b56iL5byP5pmC5LiN5pSU5oiq56iL5byP5Y2A5q6156K86Yyv6KqkIgotCi1tc2dpZCAiRGlzYWJsZSB1cGRhdGluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIuWBnOatouabtOaWsOeZu+mMhOizh+aWmSIKLQotbXNnaWQgIkRpc2FibGUgc3Bhd25pbmcgYSBoZWxwZXIgcHJvY2VzcyB3aGlsZSBzY2FubmluZyB0aGUgcmVnaXN0cnkiCi1tc2dzdHIgIuaOg+aPj+eZu+mMhOizh+aWmeaZguS4jeeUoueUn+WNlOWKqeiZleeQhuizh+aWmeeahOihjOeoiyIKLQotbXNnaWQgIkdTdHJlYW1lciBPcHRpb25zIgotbXNnc3RyICJHU3RyZWFtZXIg6YG46aCFIgotCi1tc2dpZCAiU2hvdyBHU3RyZWFtZXIgT3B0aW9ucyIKLW1zZ3N0ciAi6aGv56S6IEdTdHJlYW1lciDpgbjpoIUiCi0KLW1zZ2lkICJVbmtub3duIG9wdGlvbiIKLW1zZ3N0ciAi5pyq55+l55qE6YG46aCFIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCBjb3JlIGxpYnJhcnkgZXJyb3IuIgotbXNnc3RyICJHU3RyZWFtZXIg5Li76KaB5Ye95byP5bqr55m855Sf5LiA6Iis5oCn55qE6Yyv6Kqk44CCIgotCi1tc2dpZCAiIgotIkdTdHJlYW1lciBkZXZlbG9wZXJzIHdlcmUgdG9vIGxhenkgdG8gYXNzaWduIGFuIGVycm9yIGNvZGUgdG8gdGhpcyBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDplovnmbzkurrlk6HlsJrmnKrlrprnvqnpgJnpoZ7pjK/oqqTnmoTpjK/oqqTku6PnorzjgIIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGNvZGUgbm90IGltcGxlbWVudGVkLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOWFp+mDqOmMr+iqpO+8muacquWvpuS9nOeahOWKn+iDveOAgiIKLQotbXNnaWQgIiIKLSJHU3RyZWFtZXIgZXJyb3I6IHN0YXRlIGNoYW5nZSBmYWlsZWQgYW5kIHNvbWUgZWxlbWVudCBmYWlsZWQgdG8gcG9zdCBhICIKLSJwcm9wZXIgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiIKLW1zZ3N0ciAiIgotIkdTdHJlYW1lcumMr+iqpO+8miDni4DmhYvliIfmj5vlpLHmlZfvvIzlkIzmmYLpg6jku71lbGVtZW505Zyo6Kmy5qyh5aSx5pWX5Lit54Sh5rOV6aGv56S655u46Zec6Yyv6Kqk6KiK5oGvIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBwYWQgcHJvYmxlbS4iCi1tc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJpwYWTpjK/oqqTjgIIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHRocmVhZCBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOWFp+mDqOmMr+iqpO+8muWft+ihjOe3kumMr+iqpOOAgiIKLQotbXNnaWQgIkdTdHJlYW1lciBlcnJvcjogbmVnb3RpYXRpb24gcHJvYmxlbS4iCi1tc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJrmup3pgJrljZTlrprpjK/oqqTjgIIiCi0KLW1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IGV2ZW50IHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YWn6YOo6Yyv6Kqk77ya5LqL5Lu26Yyv6Kqk44CCIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzZWVrIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YWn6YOo6Yyv6Kqk77ya6Lez5pKt6Yyv6Kqk44CCIgotCi1tc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBjYXBzIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YWn6YOo6Yyv6Kqk77yaY2Fwc+mMr+iqpOOAgiIKLQotbXNnaWQgIkludGVybmFsIEdTdHJlYW1lciBlcnJvcjogdGFnIHByb2JsZW0uIgotbXNnc3RyICJHU3RyZWFtZXIg5YWn6YOo6Yyv6Kqk77ya5qiZ57Gk6Yyv6Kqk44CCIgotCi1tc2dpZCAiWW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uIGlzIG1pc3NpbmcgYSBwbHVnLWluLiIKLW1zZ3N0ciAi5oKo55qER1N0cmVhbWVy57y65bCR5aSW5o6b56iL5byP44CCIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVycm9yOiBjbG9jayBwcm9ibGVtLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOWFp+mDqOmMr+iqpO+8muaZguiEiOmMr+iqpOOAgiIKLQotbXNnaWQgIiIKLSJUaGlzIGFwcGxpY2F0aW9uIGlzIHRyeWluZyB0byB1c2UgR1N0cmVhbWVyIGZ1bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiAiCi0iZGlzYWJsZWQuIgotbXNnc3RyICLmh4nnlKjnqIvlvI/lmJfoqabkvb/nlKjlt7Looqvpl5zplonnmoTpgbjpoIXlhafnmoTlip/og70iCi0KLW1zZ2lkICJHU3RyZWFtZXIgZW5jb3VudGVyZWQgYSBnZW5lcmFsIHN1cHBvcnRpbmcgbGlicmFyeSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDovJTliqnlh73lvI/luqvnmbznlJ/kuIDoiKzmgKfnmoTpjK/oqqTjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLnhKHms5XliJ3lp4vljJbmlK/mj7Tlh73lvI/luqvjgIIiCi0KLSMgKGFiZWwpIGNsb3NlIGxpYnJhcnk/IOipsuino+mHi+a4healmuaJjeaYr+OAggotbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSBzdXBwb3J0aW5nIGxpYnJhcnkuIgotbXNnc3RyICLnhKHms5Xpl5zplonmlK/mj7Tlh73lvI/luqvjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIHN1cHBvcnRpbmcgbGlicmFyeS4iCi1tc2dzdHIgIueEoeazleioreWumuaUr+aPtOWHveW8j+W6q+e1hOaFi+OAgiIKLQotbXNnaWQgIkVuY29kaW5nIGVycm9yLiIKLW1zZ3N0ciAi57eo56K86Yyv6Kqk44CCIgotCi1tc2dpZCAiR1N0cmVhbWVyIGVuY291bnRlcmVkIGEgZ2VuZXJhbCByZXNvdXJjZSBlcnJvci4iCi1tc2dzdHIgIkdTdHJlYW1lciDpga3pgYfkuIDoiKzmgKfnmoTos4fmupDpjK/oqqTjgIIiCi0KLW1zZ2lkICJSZXNvdXJjZSBub3QgZm91bmQuIgotbXNnc3RyICLmib7kuI3liLDos4fmupDjgIIiCi0KLW1zZ2lkICJSZXNvdXJjZSBidXN5IG9yIG5vdCBhdmFpbGFibGUuIgotbXNnc3RyICLos4fmupDkvb/nlKjkuK3vvIzmiJbogIXnhKHms5XlrZjlj5bjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiByZXNvdXJjZSBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIueEoeazlemWi+WVn+iugOWPlueUqOeahOizh+a6kCIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHJlc291cmNlIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAi54Sh5rOV6ZaL5ZWf5a+r5YWl55So55qE6LOH5rqQ44CCIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gcmVzb3VyY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLnhKHms5XplovllZ/oroDlj5blkozlr6vlhaXnlKjnmoTos4fmupDjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgY2xvc2UgcmVzb3VyY2UuIgotbXNnc3RyICLnhKHms5Xpl5zplonos4fmupDjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIHJlc291cmNlLiIKLW1zZ3N0ciAi54Sh5rOV5b6e6LOH5rqQ5Lit6K6A5Y+W6LOH5paZ44CCIgotCi1tc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIHJlc291cmNlLiIKLW1zZ3N0ciAi54Sh5rOV5a+r5YWl6LOH5paZ5Yiw6LOH5rqQ5YWn44CCIgotCi1tc2dpZCAiQ291bGQgbm90IHBlcmZvcm0gc2VlayBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIuipsuizh+a6kOWFp+eEoeazlei3s+aSreOAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBvbiByZXNvdXJjZS4iCi1tc2dzdHIgIueEoeazleWSjOizh+a6kOWQjOatpeOAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBnZXQvc2V0IHNldHRpbmdzIGZyb20vb24gcmVzb3VyY2UuIgotbXNnc3RyICLnhKHms5Xlvp7os4fmupDlj5blvpfmiJboqK3lrprntYTmhYvoqK3lrprjgIIiCi0KLW1zZ2lkICJObyBzcGFjZSBsZWZ0IG9uIHRoZSByZXNvdXJjZS4iCi1tc2dzdHIgIuizh+a6kOW3sue2k+aykuacieWJqemkmOepuumWk+OAgiIKLQotbXNnaWQgIk5vdCBhdXRob3JpemVkIHRvIGFjY2VzcyByZXNvdXJjZS4iCi1tc2dzdHIgIuacque2k+aOiOasiueEoeazleWtmOWPluizh+a6kOOAgiIKLQotbXNnaWQgIkdTdHJlYW1lciBlbmNvdW50ZXJlZCBhIGdlbmVyYWwgc3RyZWFtIGVycm9yLiIKLW1zZ3N0ciAiR1N0cmVhbWVyIOmBremBh+S4gOiIrOaAp+eahOizh+aWmeS4sua1gemMr+iqpOOAgiIKLQotbXNnaWQgIkVsZW1lbnQgZG9lc24ndCBpbXBsZW1lbnQgaGFuZGxpbmcgb2YgdGhpcyBzdHJlYW0uIFBsZWFzZSBmaWxlIGEgYnVnLiIKLW1zZ3N0ciAiRWxlbWVudCDmspLmnInlr6bkvZzomZXnkIboqbLos4fmlpnkuLLmtYHvvIzoq4vlm57loLHpjK/oqqTjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIHR5cGUgb2Ygc3RyZWFtLiIKLW1zZ3N0ciAi54Sh5rOV5rG65a6a6LOH5paZ5Liy5rWB55qE6aGe5Z6L44CCIgotCi1tc2dpZCAiVGhlIHN0cmVhbSBpcyBvZiBhIGRpZmZlcmVudCB0eXBlIHRoYW4gaGFuZGxlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICLoqbLos4fmlpnkuLLmtYHlkoxlbGVtZW506IO96JmV55CG55qE5Z6L5oWL5LiN5LiA6Ie044CCIgotCi1tc2dpZCAiVGhlcmUgaXMgbm8gY29kZWMgcHJlc2VudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHN0cmVhbSdzIHR5cGUuIgotbXNnc3RyICLmspLmnInog73lpKDomZXnkIboqbLos4fmlpnkuLLmtYHnmoRjb2RlY+OAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBkZWNvZGUgc3RyZWFtLiIKLW1zZ3N0ciAi54Sh5rOV5bCH6LOH5paZ5Liy5rWB6YCy6KGM6Kej56K844CCIgotCi1tc2dpZCAiQ291bGQgbm90IGVuY29kZSBzdHJlYW0uIgotbXNnc3RyICLnhKHms5XlsIfos4fmlpnkuLLmtYHpgLLooYznt6jnorzjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgZGVtdWx0aXBsZXggc3RyZWFtLiIKLW1zZ3N0ciAi54Sh5rOV5bCH6LOH5paZ5Liy5rWB6Kej5aSa5bel5YiG5o6l44CCIgotCi1tc2dpZCAiQ291bGQgbm90IG11bHRpcGxleCBzdHJlYW0uIgotbXNnc3RyICLnhKHms5XlsIfos4fmlpnkuLLmtYHlpJrlt6XkuLLmjqXjgIIiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGluIHRoZSB3cm9uZyBmb3JtYXQuIgotbXNnc3RyICLos4fmlpnkuLLmtYHmoLzlvI/pjK/oqqTjgIIiCi0KLW1zZ2lkICJUaGUgc3RyZWFtIGlzIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIKLW1zZ3N0ciAi6LOH5paZ5Liy5rWB5bey5Yqg5a+G77yM5L2G5piv55uu5YmN5LiN5pSv5o+06Kej5a+G44CCIgotCi1tc2dpZCAiIgotIlRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCBjYW4ndCBiZSBkZWNyeXB0ZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBrZXkgaGFzICIKLSJiZWVuIHN1cHBsaWVkLiIKLW1zZ3N0ciAi6LOH5paZ5Liy5rWB5bey5Yqg5a+G77yM5L2G5piv5rKS5pyJ6YGp55W255qE6YeR6ZGw5Zug6ICM54Sh5rOV6Kej5a+G44CCIgotCi0jIFdlbiwg5oCq5oCq55qE77yfRG9tYWlu5oSP576p5LiN5piO44CCCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIGVycm9yIG1lc3NhZ2UgZm9yIGRvbWFpbiAlcy4iCi1tc2dzdHIgImRvbWFpbiAlc+aykuacieWPr+eUqOeahOmMr+iqpOioiuaBr+OAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBkb21haW4gJXMgYW5kIGNvZGUgJWQuIgotbXNnc3RyICJkb21haW4gJXMg5Lul5Y+K5Luj56K8ICVk5rKS5pyJ5qiZ5rqW55qE6Yyv6Kqk6KiK5oGv44CCIgotCi1tc2dpZCAiU2VsZWN0ZWQgY2xvY2sgY2Fubm90IGJlIHVzZWQgaW4gcGlwZWxpbmUuIgotbXNnc3RyICLlnKhwaXBlbGluZeS4reeEoeazleS9v+eUqOmBuOaTh+eahGNsb2Nr44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgcmVnaXN0cnkgY2FjaGUgdG8gJXM6ICVzIgotbXNnc3RyICLlr6vlhaXnmbvpjITos4fmlpnlv6vlj5bliLAlc+aZgueZvOeUn+mMr+iqpO+8miVzIgotCi1tc2dpZCAidGl0bGUiCi1tc2dzdHIgIuaomemhjCIKLQotbXNnaWQgImNvbW1vbmx5IHVzZWQgdGl0bGUiCi1tc2dzdHIgIumAmueUqOaomemhjCIKLQotbXNnaWQgInRpdGxlIHNvcnRuYW1lIgotbXNnc3RyICLmjpLluo/lvoznmoTmqJnpoYwiCi0KLW1zZ2lkICJjb21tb25seSB1c2VkIHRpdGxlIGZvciBzb3J0aW5nIHB1cnBvc2VzIgotbXNnc3RyICLmjpLluo/nlKjnmoTpgJrnlKjmqJnpoYwiCi0KLW1zZ2lkICJhcnRpc3QiCi1tc2dzdHIgIuS9nOiAhSIKLQotbXNnaWQgInBlcnNvbihzKSByZXNwb25zaWJsZSBmb3IgdGhlIHJlY29yZGluZyIKLW1zZ3N0ciAi6YyE6KO95Lq6IgotCi1tc2dpZCAiYXJ0aXN0IHNvcnRuYW1lIgotbXNnc3RyICLmjpLluo/lvoznmoTkvZzogIUiCi0KLW1zZ2lkICJwZXJzb24ocykgcmVzcG9uc2libGUgZm9yIHRoZSByZWNvcmRpbmcgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIuaOkuW6j+W+jOeahOmMhOijveS6uiIKLQotbXNnaWQgImFsYnVtIgotbXNnc3RyICLlsIjovK8iCi0KLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSIKLW1zZ3N0ciAi6YCZ5Lqb5qiC5puy5omA5bGs55qE5bCI6LyvIgotCi1tc2dpZCAiYWxidW0gc29ydG5hbWUiCi1tc2dzdHIgIuaOkuW6j+W+jOeahOWwiOi8ryIKLQotIyDlvp5nc3R0YWdsaXN0LmPnjJzmuKzpgJnlgIvmmK/liY3pnaLoqIrmga/nmoToqbPntLDniYjmnKwKLW1zZ2lkICJhbGJ1bSBjb250YWluaW5nIHRoaXMgZGF0YSBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi5o6S5bqP5b6M5YyF5ZCr6YCZ5Lqb6LOH5paZ55qE5bCI6LyvIgotCi1tc2dpZCAiYWxidW0gYXJ0aXN0IgotbXNnc3RyICLlsIjovK/kvZzogIUiCi0KLW1zZ2lkICJUaGUgYXJ0aXN0IG9mIHRoZSBlbnRpcmUgYWxidW0sIGFzIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQiCi1tc2dzdHIgIuaVtOW8teWwiOi8r+eahOS9nOiAhSIKLQotbXNnaWQgImFsYnVtIGFydGlzdCBzb3J0bmFtZSIKLW1zZ3N0ciAi5o6S5bqP5b6M55qE5bCI6Lyv5L2c6ICFIgotCi1tc2dpZCAiVGhlIGFydGlzdCBvZiB0aGUgZW50aXJlIGFsYnVtLCBhcyBpdCBzaG91bGQgYmUgc29ydGVkIgotbXNnc3RyICLmjpLluo/lvoznmoTmlbTlvLXlsIjovK/kvZzogIUiCi0KLW1zZ2lkICJkYXRlIgotbXNnc3RyICLml6XmnJ8iCi0KLW1zZ2lkICJkYXRlIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdEYXRlIHN0cnVjdHVyZSkiCi1tc2dzdHIgIuWqkumrlOizh+aWmeijveS9nOaXpeacnyIKLQotbXNnaWQgImRhdGV0aW1lIgotbXNnc3RyICLml6XmnJ/mmYLplpMiCi0KLW1zZ2lkICJkYXRlIGFuZCB0aW1lIHRoZSBkYXRhIHdhcyBjcmVhdGVkIChhcyBhIEdzdERhdGVUaW1lIHN0cnVjdHVyZSkiCi1tc2dzdHIgIuWqkumrlOizh+aWmeijveS9nOaXpeacnyIKLQotbXNnaWQgImdlbnJlIgotbXNnc3RyICLlqpLpq5TpoZ7lnosiCi0KLW1zZ2lkICJnZW5yZSB0aGlzIGRhdGEgYmVsb25ncyB0byIKLW1zZ3N0ciAi5aqS6auU6aGe5Z6LIgotCi1tc2dpZCAiY29tbWVudCIKLW1zZ3N0ciAi6Ki76KejIgotCi1tc2dpZCAiZnJlZSB0ZXh0IGNvbW1lbnRpbmcgdGhlIGRhdGEiCi1tc2dzdHIgIuWqkumrlOiou+ino+eahOWFp+WuuSIKLQotbXNnaWQgImV4dGVuZGVkIGNvbW1lbnQiCi1tc2dzdHIgIuW7tuS8uOiou+inoyIKLQotbXNnaWQgImZyZWUgdGV4dCBjb21tZW50aW5nIHRoZSBkYXRhIGluIGtleT12YWx1ZSBvciBrZXlbZW5dPWNvbW1lbnQgZm9ybSIKLW1zZ3N0ciAi5L2/55So6Zec6Y215a2XPeWAvOaIluaYr+mXnOmNteWtl1tlbl096Ki76Kej5qC85byP6KGo56S65aqS6auU6Ki76Kej55qE5YWn5a65IgotCi1tc2dpZCAidHJhY2sgbnVtYmVyIgotbXNnc3RyICLpn7Pou4znt6jomZ8iCi0KLW1zZ2lkICJ0cmFjayBudW1iZXIgaW5zaWRlIGEgY29sbGVjdGlvbiIKLW1zZ3N0ciAi6JKQ6ZuG6LOH5paZ5YWn55qE6Z+z6LuM57eo6JmfIgotCi1tc2dpZCAidHJhY2sgY291bnQiCi1tc2dzdHIgIumfs+i7jOe4veaVuCIKLQotbXNnaWQgImNvdW50IG9mIHRyYWNrcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIHRyYWNrIGJlbG9uZ3MgdG8iCi1tc2dzdHIgIuebruWJjemfs+i7jOaJgOWxrOeahOiSkOmbhuizh+aWmemfs+i7jOe4veaVuCIKLQotbXNnaWQgImRpc2MgbnVtYmVyIgotbXNnc3RyICLnop/niYfnt6jomZ8iCi0KLW1zZ2lkICJkaXNjIG51bWJlciBpbnNpZGUgYSBjb2xsZWN0aW9uIgotbXNnc3RyICLokpDpm4bos4fmlpnkuK3nmoTnop/niYfnt6jomZ8iCi0KLW1zZ2lkICJkaXNjIGNvdW50IgotbXNnc3RyICLnop/niYfnuL3mlbgiCi0KLW1zZ2lkICJjb3VudCBvZiBkaXNjcyBpbnNpZGUgY29sbGVjdGlvbiB0aGlzIGRpc2MgYmVsb25ncyB0byIKLW1zZ3N0ciAi55uu5YmN56Kf54mH57eo6Jmf5omA5pW455qE6JKQ6ZuG6LOH5paZ56Kf54mH57i95pW4IgotCi1tc2dpZCAibG9jYXRpb24iCi1tc2dzdHIgIuS9jee9riIKLQotbXNnaWQgIiIKLSJPcmlnaW4gb2YgbWVkaWEgYXMgYSBVUkkgKGxvY2F0aW9uLCB3aGVyZSB0aGUgb3JpZ2luYWwgb2YgdGhlIGZpbGUgb3Igc3RyZWFtICIKLSJpcyBob3N0ZWQpIgotbXNnc3RyICLlqpLpq5TnmoRVUkko5qqU5qGI5oiW5piv6LOH5paZ5Liy5rWB55qE5L2N572uKSIKLQotbXNnaWQgImhvbWVwYWdlIgotbXNnc3RyICLpppbpoIEiCi0KLW1zZ2lkICJIb21lcGFnZSBmb3IgdGhpcyBtZWRpYSAoaS5lLiBhcnRpc3Qgb3IgbW92aWUgaG9tZXBhZ2UpIgotbXNnc3RyICLoqbLlqpLpq5TnmoTpppbpoIHvvIjlpoLkvZzogIXmiJbmmK/pm7vlvbHpppbpoIHvvIkiCi0KLW1zZ2lkICJkZXNjcmlwdGlvbiIKLW1zZ3N0ciAi5o+P6L+wIgotCi1tc2dpZCAic2hvcnQgdGV4dCBkZXNjcmliaW5nIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIgotbXNnc3RyICLkuIDmrrXmnInpl5zlqpLpq5TlhaflrrnnmoTnsKHnn63oqqrmmI7mloflrZciCi0KLW1zZ2lkICJ2ZXJzaW9uIgotbXNnc3RyICLniYjmnKwiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoaXMgZGF0YSIKLW1zZ3N0ciAi5aqS6auU5qqU5qGI54mI5pysIgotCi1tc2dpZCAiSVNSQyIKLW1zZ3N0ciAiSVNSQyIKLQotbXNnaWQgIkludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgLSBzZWUgaHR0cDovL3d3dy5pZnBpLm9yZy9pc3JjLyIKLW1zZ3N0ciAi5ZyL6Zqb5qiZ5rqW6YyE6Z+z6YyE5b2x6LOH5paZ5Luj56K8IC0g6KuL5Y+D6ICDOiBodHRwOi8vd3d3LmlmcGkub3JnL2lzcmMvIgotCi1tc2dpZCAib3JnYW5pemF0aW9uIgotbXNnc3RyICLntYTnuZQiCi0KLW1zZ2lkICJjb3B5cmlnaHQiCi1tc2dzdHIgIueJiOasiiIKLQotbXNnaWQgImNvcHlyaWdodCBub3RpY2Ugb2YgdGhlIGRhdGEiCi1tc2dzdHIgIuizh+aWmeeahOeJiOasiumAmuefpSIKLQotbXNnaWQgImNvcHlyaWdodCB1cmkiCi1tc2dzdHIgIueJiOasilVSSSIKLQotbXNnaWQgIlVSSSB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgZGF0YSIKLW1zZ3N0ciAi6LOH5paZ55qE54mI5qyK6YCa55+lVVJJIgotCi1tc2dpZCAiZW5jb2RlZCBieSIKLW1zZ3N0ciAi57eo56K86ICFIgotCi1tc2dpZCAibmFtZSBvZiB0aGUgZW5jb2RpbmcgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiIKLW1zZ3N0ciAi57eo56K86ICF5oiW5piv57eo56K857WE57mU5ZCN56ixIgotCi1tc2dpZCAiY29udGFjdCIKLW1zZ3N0ciAi6YCj57WhIgotCi1tc2dpZCAiY29udGFjdCBpbmZvcm1hdGlvbiIKLW1zZ3N0ciAi6YCj57Wh6LOH6KiKIgotCi1tc2dpZCAibGljZW5zZSIKLW1zZ3N0ciAi5qKd5qy+IgotCi1tc2dpZCAibGljZW5zZSBvZiBkYXRhIgotbXNnc3RyICLos4fmlpnnmoTmop3mrL4iCi0KLW1zZ2lkICJsaWNlbnNlIHVyaSIKLW1zZ3N0ciAi5qKd5qy+dXJpIgotCi1tc2dpZCAiVVJJIHRvIHRoZSBsaWNlbnNlIG9mIHRoZSBkYXRhIgotbXNnc3RyICLos4fmlpnnmoTmop3mrL5VUkkiCi0KLW1zZ2lkICJwZXJmb3JtZXIiCi1tc2dzdHIgIua8lOWHuuiAhSIKLQotbXNnaWQgInBlcnNvbihzKSBwZXJmb3JtaW5nIgotbXNnc3RyICLmvJTlh7rogIUiCi0KLW1zZ2lkICJjb21wb3NlciIKLW1zZ3N0ciAi5L2c5puy6ICFIgotCi1tc2dpZCAicGVyc29uKHMpIHdobyBjb21wb3NlZCB0aGUgcmVjb3JkaW5nIgotbXNnc3RyICLkvZzmm7LogIUiCi0KLW1zZ2lkICJjb25kdWN0b3IiCi1tc2dzdHIgIiIKLQotbXNnaWQgImNvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiZHVyYXRpb24iCi1tc2dzdHIgIuaZgumWk+mVt+W6piIKLQotbXNnaWQgImxlbmd0aCBpbiBHU3RyZWFtZXIgdGltZSB1bml0cyAobmFub3NlY29uZHMpIgotbXNnc3RyICJHU3RyZWFtZXIg5pmC6ZaT5Zau5L2N77yI5aWI56eS77yJ6ZW35bqmIgotCi1tc2dpZCAiY29kZWMiCi1tc2dzdHIgIiIKLQotIyBXZW4sIOaAquaAqueahAotIyDlvp5nc3R0YWdsaXN0LmPnjJzmuKzpgJnlgIvmmK/liY3pnaLoqIrmga/nmoToqbPntLDniYjmnKwKLW1zZ2lkICJjb2RlYyB0aGUgZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIuiZleeQhuizh+aWmeeUqOeahGNvZGVjIgotCi1tc2dpZCAidmlkZW8gY29kZWMiCi1tc2dzdHIgIuW9seeJh2NvZGVjIgotCi0jIFdlbiwg5oCq5oCq55qECi0jIOW+nmdzdHRhZ2xpc3QuY+eMnOa4rOmAmeWAi+aYr+WJjemdouioiuaBr+eahOips+e0sOeJiOacrAotbXNnaWQgImNvZGVjIHRoZSB2aWRlbyBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi6JmV55CG5b2x54mH6LOH5paZ55So55qEY29kZWMiCi0KLW1zZ2lkICJhdWRpbyBjb2RlYyIKLW1zZ3N0ciAi6IGy6Z+zY29kZWMiCi0KLW1zZ2lkICJjb2RlYyB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4iCi1tc2dzdHIgIuiZleeQhuiBsumfs+izh+aWmeeUqOeahGNvZGVjIgotCi1tc2dpZCAic3VidGl0bGUgY29kZWMiCi1tc2dzdHIgIuWtl+W5lWNvZGVjIgotCi1tc2dpZCAiY29kZWMgdGhlIHN1YnRpdGxlIGRhdGEgaXMgc3RvcmVkIGluIgotbXNnc3RyICLomZXnkIblrZfluZXos4fmlpnnmoRjb2RlYyIKLQotbXNnaWQgImNvbnRhaW5lciBmb3JtYXQiCi1tc2dzdHIgImNvbnRhaW5lciDmoLzlvI8iCi0KLW1zZ2lkICJjb250YWluZXIgZm9ybWF0IHRoZSBkYXRhIGlzIHN0b3JlZCBpbiIKLW1zZ3N0ciAi6JmV55CG6LOH5paZ55qEY29udGFpbmVy5qih5byPIgotCi1tc2dpZCAiYml0cmF0ZSIKLW1zZ3N0ciAi5L2N5YWD546HIgotCi1tc2dpZCAiZXhhY3Qgb3IgYXZlcmFnZSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAi5rqW56K655qE5oiW5bmz5Z2H55qE5L2N5YWD546HIChiaXQvcykiCi0KLW1zZ2lkICJub21pbmFsIGJpdHJhdGUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm5vbWluYWwgYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIiIKLQotbXNnaWQgIm1pbmltdW0gYml0cmF0ZSIKLW1zZ3N0ciAi5pyA5L2O5L2N5YWD546HIgotCi1tc2dpZCAibWluaW11bSBiaXRyYXRlIGluIGJpdHMvcyIKLW1zZ3N0ciAi5pyA5L2O5L2N5YWD546HIChiaXQvcykiCi0KLW1zZ2lkICJtYXhpbXVtIGJpdHJhdGUiCi1tc2dzdHIgIuacgOmrmOS9jeWFg+eOhyIKLQotbXNnaWQgIm1heGltdW0gYml0cmF0ZSBpbiBiaXRzL3MiCi1tc2dzdHIgIuacgOmrmOS9jeWFg+eOhyAoYml0L3MpIgotCi1tc2dpZCAiZW5jb2RlciIKLW1zZ3N0ciAi57eo56K85ZmoIgotCi1tc2dpZCAiZW5jb2RlciB1c2VkIHRvIGVuY29kZSB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi6Kmy6LOH5paZ5Liy5rWB5L2/55So55qE57eo56K85ZmoIgotCi1tc2dpZCAiZW5jb2RlciB2ZXJzaW9uIgotbXNnc3RyICLnt6jnorzlmajniYjmnKwiCi0KLW1zZ2lkICJ2ZXJzaW9uIG9mIHRoZSBlbmNvZGVyIHVzZWQgdG8gZW5jb2RlIHRoaXMgc3RyZWFtIgotbXNnc3RyICLoqbLos4fmlpnkuLLmtYHkvb/nlKjnmoTnt6jnorzlmajniYjmnKwiCi0KLW1zZ2lkICJzZXJpYWwiCi1tc2dzdHIgIua1geawtOiZnyIKLQotbXNnaWQgInNlcmlhbCBudW1iZXIgb2YgdHJhY2siCi1tc2dzdHIgIumfs+i7jOeahOa1geawtOiZnyIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgZ2FpbiIKLW1zZ3N0ciAi5Zue5pS+5aKe55uK6Z+z6LuM5aKe55uKIgotCi1tc2dpZCAidHJhY2sgZ2FpbiBpbiBkYiIKLW1zZ3N0ciAi6Z+z6LuM5aKe55uKKGRiKSIKLQotbXNnaWQgInJlcGxheWdhaW4gdHJhY2sgcGVhayIKLW1zZ3N0ciAi5Zue5pS+5aKe55uK6Z+z6LuM5bOw5YC8IgotCi1tc2dpZCAicGVhayBvZiB0aGUgdHJhY2siCi1tc2dzdHIgIumfs+i7jOWzsOWAvCIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gZ2FpbiIKLW1zZ3N0ciAi5Zue5pS+5aKe55uK5bCI6Lyv5aKe55uKIgotCi1tc2dpZCAiYWxidW0gZ2FpbiBpbiBkYiIKLW1zZ3N0ciAi5bCI6Lyv5aKe55uKKGRiKSIKLQotbXNnaWQgInJlcGxheWdhaW4gYWxidW0gcGVhayIKLW1zZ3N0ciAi5Zue5pS+5aKe55uK5bCI6Lyv5bOw5YC8IgotCi1tc2dpZCAicGVhayBvZiB0aGUgYWxidW0iCi1tc2dzdHIgIuWwiOi8r+WzsOWAvCIKLQotbXNnaWQgInJlcGxheWdhaW4gcmVmZXJlbmNlIGxldmVsIgotbXNnc3RyICLlm57mlL7lop7nm4rlj4PogINsZXZlbCIKLQotbXNnaWQgInJlZmVyZW5jZSBsZXZlbCBvZiB0cmFjayBhbmQgYWxidW0gZ2FpbiB2YWx1ZXMiCi1tc2dzdHIgIumfs+i7jOS7peWPiuWinuebiuWAvOeahOWPg+iAg2xldmVsIgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSIKLW1zZ3N0ciAi6Kqe6KiA57eo56K8IgotCi1tc2dpZCAibGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBzdHJlYW0sIGNvbmZvcm1pbmcgdG8gSVNPLTYzOS0xIG9yIElTTy02MzktMiIKLW1zZ3N0ciAi6Kmy6LOH5paZ5Liy5rWB55qE6Kqe6KiA57eo56K877yM5ZKMSVNPLTYzOeaIlklTTy02MzktMuebuOWuuSIKLQotbXNnaWQgImxhbmd1YWdlIG5hbWUiCi1tc2dzdHIgIuiqnuiogOWQjeeosSIKLQotbXNnaWQgImZyZWVmb3JtIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRoaXMgc3RyZWFtIGlzIGluIgotbXNnc3RyICLoqbLos4fmlpnkuLLmtYHkvb/nlKjnmoToqp7oqIAiCi0KLW1zZ2lkICJpbWFnZSIKLW1zZ3N0ciAi5b2x5YOPIgotCi1tc2dpZCAiaW1hZ2UgcmVsYXRlZCB0byB0aGlzIHN0cmVhbSIKLW1zZ3N0ciAi5ZKM6Kmy6LOH5paZ5Liy5rWB5pyJ6Zec55qE5b2x5YOPIgotCi0jLiBUUkFOU0xBVE9SUzogJ3ByZXZpZXcgaW1hZ2UnID0gaW1hZ2UgdGhhdCBzaG93cyBhIHByZXZpZXcgb2YgdGhlIGZ1bGwgaW1hZ2UKLW1zZ2lkICJwcmV2aWV3IGltYWdlIgotbXNnc3RyICLlvbHlg4/poJDopr0iCi0KLW1zZ2lkICJwcmV2aWV3IGltYWdlIHJlbGF0ZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIuWSjOipsuizh+aWmeS4sua1geaciemXnOeahOW9seWDj+mgkOimvSIKLQotbXNnaWQgImF0dGFjaG1lbnQiCi1tc2dzdHIgIumZhOS7tiIKLQotbXNnaWQgImZpbGUgYXR0YWNoZWQgdG8gdGhpcyBzdHJlYW0iCi1tc2dzdHIgIuipsuizh+aWmeS4sua1geaJgOmZhOeahOaqlOahiCIKLQotbXNnaWQgImJlYXRzIHBlciBtaW51dGUiCi1tc2dzdHIgIuavj+WIhumQmGJlYXTmlbgiCi0KLW1zZ2lkICJudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBhdWRpbyIKLW1zZ3N0ciAi6IGy6Z+z5Lit5q+P5YiG6ZCYYmVhdOaVuCIKLQotbXNnaWQgImtleXdvcmRzIgotbXNnc3RyICLpl5zpjbXlrZciCi0KLW1zZ2lkICJjb21tYSBzZXBhcmF0ZWQga2V5d29yZHMgZGVzY3JpYmluZyB0aGUgY29udGVudCIKLW1zZ3N0ciAi55So5L6G5pWY6L+w5aqS6auU5YWn5a6555qE6Zec6Y215a2X77yM6Zec6Y215a2X5LmL6ZaT5Lul6YCX6Jmf5YiG6ZaLIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIG5hbWUiCi1tc2dzdHIgIuWcsOeQhuS9jee9ruWQjeeosSIKLQotbXNnaWQgIiIKLSJodW1hbiByZWFkYWJsZSBkZXNjcmlwdGl2ZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgbWVkaWEgaGFzIGJlZW4gcmVjb3JkZWQgb3IgIgotInByb2R1Y2VkIgotbXNnc3RyICLkurrpoZ7lj6/oroDnmoTlqpLpq5TpjIToo73lnLDpu57os4foqIrjgIIiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbGF0aXR1ZGUiCi1tc2dzdHIgIuWcsOeQhue3r+W6puS9jee9riIKLQotIyBXZW4sIOecgeeVpeimj+agvOaPj+i/sOmDqOS7vQotbXNnaWQgIiIKLSJnZW8gbGF0aXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgZXF1YXRvciwgbmVnYXRpdmUgdmFsdWVzIGZvciAiCi0ic291dGhlcm4gbGF0aXR1ZGVzKSIKLW1zZ3N0ciAi5aqS6auU6YyE6KO95Zyw6bue57ev5bqmIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGxvbmdpdHVkZSIKLW1zZ3N0ciAi5Zyw55CG57aT5bqm5L2N572uIgotCi0jIFdlbiwg55yB55Wl6KaP5qC85o+P6L+w6YOo5Lu9Ci1tc2dpZCAiIgotImdlbyBsb25naXR1ZGUgbG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluICIKLSJkZWdyZWVzIGFjY29yZGluZyB0byBXR1M4NCAoemVybyBhdCB0aGUgcHJpbWUgbWVyaWRpYW4gaW4gR3JlZW53aWNoL1VLLCAgIgotIm5lZ2F0aXZlIHZhbHVlcyBmb3Igd2VzdGVybiBsb25naXR1ZGVzKSIKLW1zZ3N0ciAi5aqS6auU6YyE6KO95Zyw6bue57aT5bqmIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGVsZXZhdGlvbiIKLW1zZ3N0ciAi5Zyw55CG5L2N572u5rW35ouUIgotCi0jIFdlbiwg55yB55Wl6KaP5qC85o+P6L+w6YOo5Lu9Ci1tc2dpZCAiIgotImdlbyBlbGV2YXRpb24gb2Ygd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIGluIG1ldGVycyAiCi0iYWNjb3JkaW5nIHRvIFdHUzg0ICh6ZXJvIGlzIGF2ZXJhZ2Ugc2VhIGxldmVsKSIKLW1zZ3N0ciAi5aqS6auU6YyE6KO95Zyw6bue5rW35ouUIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGNvdW50cnkiCi1tc2dzdHIgIuWcsOeQhuS9jee9ruWci+WutiIKLQotbXNnaWQgImNvdW50cnkgKGVuZ2xpc2ggbmFtZSkgd2hlcmUgdGhlIG1lZGlhIGhhcyBiZWVuIHJlY29yZGVkIG9yIHByb2R1Y2VkIgotbXNnc3RyICLlqpLpq5TpjIToo73nmoTlnIvlrrYo6Iux5paH5ZCNKSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjaXR5IgotbXNnc3RyICLlnLDnkIbkvY3nva7ln47luIIiCi0KLW1zZ2lkICJjaXR5IChlbmdsaXNoIG5hbWUpIHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiByZWNvcmRlZCBvciBwcm9kdWNlZCIKLW1zZ3N0ciAi5Lul6Iux5paH6KGo56S655qE5aqS6auU6YyE6KO95Z+O5biCIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIHN1YmxvY2F0aW9uIgotbXNnc3RyICLlnLDnkIbkvY3nva7ln47luILlhafljYDln58iCi0KLW1zZ2lkICIiCi0iYSBsb2NhdGlvbiB3aXRoaW4gYSBjaXR5IHdoZXJlIHRoZSBtZWRpYSBoYXMgYmVlbiBwcm9kdWNlZCBvciBjcmVhdGVkIChlLmcuICIKLSJ0aGUgbmVpZ2hib3Job29kKSIKLW1zZ3N0ciAi5aqS6auU6YyE6KO95Z+O5biC5YWn5Y2A5Z+fIgotCi1tc2dpZCAiZ2VvIGxvY2F0aW9uIGhvcml6b250YWwgZXJyb3IiCi1tc2dzdHIgIuWcsOeQhuS9jee9ruawtOW5s+iqpOW3riIKLQotbXNnaWQgImV4cGVjdGVkIGVycm9yIG9mIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uaW5nIG1lYXN1cmVzIChpbiBtZXRlcnMpIgotbXNnc3RyICLpoJDmnJ/nmoTmsLTlubPoqqTlt67vvIjku6XlhazlsLrngrrllq7kvY3vvIkiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgc3BlZWQiCi1tc2dzdHIgIuWcsOeQhuS9jeWdgOenu+WLlemAn+W6piIKLQotbXNnaWQgIiIKLSJtb3ZlbWVudCBzcGVlZCBvZiB0aGUgY2FwdHVyaW5nIGRldmljZSB3aGlsZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIGluIG0vcyIKLW1zZ3N0ciAi6YyE6KO96Kit5YKZ5pON5L2c5pmC55qE56e75YuV6YCf5bqmKG0vcykiCi0KLW1zZ2lkICJnZW8gbG9jYXRpb24gbW92ZW1lbnQgZGlyZWN0aW9uIgotbXNnc3RyICLlnLDnkIbkvY3lnYDnp7vli5XmlrnlkJEiCi0KLSMgV2VuLCDnnIHnlaXopo/moLzmj4/ov7Dpg6jku70KLW1zZ2lkICIiCi0iaW5kaWNhdGVzIHRoZSBtb3ZlbWVudCBkaXJlY3Rpb24gb2YgdGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIG9mIGEgIgotIm1lZGlhLiBJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uLCAwICIKLSJtZWFucyB0aGUgZ2VvZ3JhcGhpYyBub3J0aCwgYW5kIGluY3JlYXNlcyBjbG9ja3dpc2UiCi1tc2dzdHIgIumMhOijveioreWCmeaTjeS9nOaZgueahOenu+WLleaWueWQkSIKLQotbXNnaWQgImdlbyBsb2NhdGlvbiBjYXB0dXJlIGRpcmVjdGlvbiIKLW1zZ3N0ciAi5Zyw55CG5L2N5Z2A6YyE6KO96Kit5YKZ5pa55ZCRIgotCi0jIFdlbiwg55yB55Wl6KaP5qC85o+P6L+w6YOo5Lu9Ci1tc2dpZCAiIgotImluZGljYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBkZXZpY2UgaXMgcG9pbnRpbmcgdG8gd2hlbiBjYXB0dXJpbmcgIGEgbWVkaWEuICIKLSJJdCBpcyByZXByZXNlbnRlZCBhcyBkZWdyZWVzIGluIGZsb2F0aW5nIHBvaW50ICByZXByZXNlbnRhdGlvbiwgMCBtZWFucyB0aGUgIgotImdlb2dyYXBoaWMgbm9ydGgsIGFuZCBpbmNyZWFzZXMgY2xvY2t3aXNlIgotbXNnc3RyICLpjIToo73oqK3lgpnmk43kvZzmmYLnmoTmlrnlkJEiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBuYW1lJyA9ICdUVi9yYWRpby9wb2RjYXN0IHNob3cgbmFtZScgaGVyZQotbXNnaWQgInNob3cgbmFtZSIKLW1zZ3N0ciAi6aGv56S65ZCN56ixIgotCi1tc2dpZCAiTmFtZSBvZiB0aGUgdHYvcG9kY2FzdC9zZXJpZXMgc2hvdyB0aGUgbWVkaWEgaXMgZnJvbSIKLW1zZ3N0ciAidHYvcG9kY2FzdC/lvbHpm4bkuK3lqpLpq5TnmoTlkI3nqLEiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc2hvdyBzb3J0bmFtZScgPSAnVFYvcmFkaW8vcG9kY2FzdCBzaG93IG5hbWUgYXMgdXNlZCBmb3Igc29ydGluZyBwdXJwb3NlcycgaGVyZQotbXNnaWQgInNob3cgc29ydG5hbWUiCi1tc2dzdHIgIumhr+ekuuaOkuW6j+W+jOWQjeeosSIKLQotbXNnaWQgIiIKLSJOYW1lIG9mIHRoZSB0di9wb2RjYXN0L3NlcmllcyBzaG93IHRoZSBtZWRpYSBpcyBmcm9tLCBmb3Igc29ydGluZyBwdXJwb3NlcyIKLW1zZ3N0ciAi5o6S5bqP5b6M55qEdHYvcG9kY2FzdC/lvbHpm4bkuK3lqpLpq5TnmoTlkI3nqLEiCi0KLW1zZ2lkICJlcGlzb2RlIG51bWJlciIKLW1zZ3N0ciAi6ZuG5pW457eo6JmfIgotCi1tc2dpZCAiVGhlIGVwaXNvZGUgbnVtYmVyIGluIHRoZSBzZWFzb24gdGhlIG1lZGlhIGlzIHBhcnQgb2YiCi1tc2dzdHIgIuipsuWto+S4reWqkumrlOmbhuaVuOe3qOiZnyIKLQotbXNnaWQgInNlYXNvbiBudW1iZXIiCi1tc2dzdHIgIuWto+aVuOe3qOiZnyIKLQotbXNnaWQgIlRoZSBzZWFzb24gbnVtYmVyIG9mIHRoZSBzaG93IHRoZSBtZWRpYSBpcyBwYXJ0IG9mIgotbXNnc3RyICLlqpLpq5TnmoTlraPmlbjnt6jomZ8iCi0KLW1zZ2lkICJseXJpY3MiCi1tc2dzdHIgIuatjOipniIKLQotbXNnaWQgIlRoZSBseXJpY3Mgb2YgdGhlIG1lZGlhLCBjb21tb25seSB1c2VkIGZvciBzb25ncyIKLW1zZ3N0ciAi5q2M5puy5q2M6KmeIgotCi1tc2dpZCAiY29tcG9zZXIgc29ydG5hbWUiCi1tc2dzdHIgIuaOkuW6j+W+jOeahOe3qOabsuiAhSIKLQotbXNnaWQgInBlcnNvbihzKSB3aG8gY29tcG9zZWQgdGhlIHJlY29yZGluZywgZm9yIHNvcnRpbmcgcHVycG9zZXMiCi1tc2dzdHIgIuaOkuW6j+W+jOeahOe3qOabsuiAhSIKLQotbXNnaWQgImdyb3VwaW5nIgotbXNnc3RyICLnvqTntYQiCi0KLW1zZ2lkICIiCi0iR3JvdXBzIHJlbGF0ZWQgbWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSB0cmFja3MsIGxpa2UgdGhlIGRpZmZlcmVudCBwaWVjZXMgIgotIm9mIGEgY29uY2VydG8uIEl0IGlzIGEgaGlnaGVyIGxldmVsIHRoYW4gYSB0cmFjaywgYnV0IGxvd2VyIHRoYW4gYW4gYWxidW0iCi1tc2dzdHIgIiIKLSLlsIfmnInpl5zoga/nmoTkuI3lkIznmoTpn7Pou4zoqK3miJDnvqTntYTvvIzkvovlpoLkuIDloLTmvJTllLHmnIPliIfmiJDkuI3lkIzmrrXokL3jgILmr5Tllq7kuIDpn7Pou4zpq5jpmo7vvIzkvYYiCi0i5piv5q+U5bCI6Lyv5L2O6ZqOIgotCi1tc2dpZCAidXNlciByYXRpbmciCi1tc2dzdHIgIuS9v+eUqOiAheipleWDuSIKLQotbXNnaWQgIiIKLSJSYXRpbmcgYXR0cmlidXRlZCBieSBhIHVzZXIuIFRoZSBoaWdoZXIgdGhlIHJhbmssIHRoZSBtb3JlIHRoZSB1c2VyIGxpa2VzICIKLSJ0aGlzIG1lZGlhIgotbXNnc3RyICLkvb/nlKjogIXoqZXlg7nvvIzliIbmlbjmhIjpq5jooajnpLrmhIjlj5fmraHov44iCi0KLW1zZ2lkICJkZXZpY2UgbWFudWZhY3R1cmVyIgotbXNnc3RyICLoqK3lgpnoo73pgKDllYYiCi0KLW1zZ2lkICJNYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIG1lZGlhIgotbXNnc3RyICLpjIToo73lqpLpq5ToqK3lgpnnmoToo73pgKDllYYiCi0KLW1zZ2lkICJkZXZpY2UgbW9kZWwiCi1tc2dzdHIgIuioreWCmeWei+iZnyIKLQotbXNnaWQgIk1vZGVsIG9mIHRoZSBkZXZpY2UgdXNlZCB0byBjcmVhdGUgdGhpcyBtZWRpYSIKLW1zZ3N0ciAi6YyE6KO95aqS6auU6Kit5YKZ55qE5Z6L6JmfIgotCi1tc2dpZCAiYXBwbGljYXRpb24gbmFtZSIKLW1zZ3N0ciAi5oeJ55So56iL5byP5ZCN56ixIgotCi1tc2dpZCAiQXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIgotbXNnc3RyICLnlKLnlJ/lqpLpq5Tkvb/nlKjnmoTmh4nnlKjnqIvlvI8iCi0KLW1zZ2lkICJhcHBsaWNhdGlvbiBkYXRhIgotbXNnc3RyICLmh4nnlKjnqIvlvI/os4fmlpkiCi0KLW1zZ2lkICJBcmJpdHJhcnkgYXBwbGljYXRpb24gZGF0YSB0byBiZSBzZXJpYWxpemVkIGludG8gdGhlIG1lZGlhIgotbXNnc3RyICLku7vmhI/nmoTmh4nnlKjnqIvlvI/os4fmlpnvvIzmnIDlvozmnIPooqvkuLLliJfljJblvozmlL7lhaXlqpLpq5QiCi0KLW1zZ2lkICJpbWFnZSBvcmllbnRhdGlvbiIKLW1zZ3N0ciAi5b2x5YOP5pa55ZCRIgotCi1tc2dpZCAiSG93IHRoZSBpbWFnZSBzaG91bGQgYmUgcm90YXRlZCBvciBmbGlwcGVkIGJlZm9yZSBkaXNwbGF5IgotbXNnc3RyICLnlKjkvobljZTliqnliKTmlrflvbHlg4/mkq3mlL7mmYLmh4noqbLml4vovYnmiJbmmK/nv7vpnaIiCi0KLW1zZ2lkICJwdWJsaXNoZXIiCi1tc2dzdHIgIuWHuueJiOiAhSIKLQotbXNnaWQgIk5hbWUgb2YgdGhlIGxhYmVsIG9yIHB1Ymxpc2hlciIKLW1zZ3N0ciAi5qiZ57C95oiW5Ye654mI5ZWG5ZCN56ixIgotCi1tc2dpZCAiaW50ZXJwcmV0ZWQtYnkiCi1tc2dzdHIgIuiprumHi+iAhSIKLQotbXNnaWQgIkluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIgaW50ZXJwcmV0YXRpb25zIgotbXNnc3RyICLph43mlrDmt7fpn7PmiJbmmK/ph43mlrDoqa7ph4vnmoTkvZzogIUiCi0KLSMgV2VuLCDmgKrmgKrnmoQKLW1zZ2lkICJtaWRpLWJhc2Utbm90ZSIKLW1zZ3N0ciAiTWlkaeewoeitnCIKLQotIyBXZW4sIOaAquaAqueahAotbXNnaWQgIk1pZGkgbm90ZSBudW1iZXIgb2YgdGhlIGF1ZGlvIHRyYWNrLiIKLW1zZ3N0ciAi6Z+z6LuMTWlkaeewoeitnCIKLQotbXNnaWQgInByaXZhdGUtZGF0YSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUHJpdmF0ZSBkYXRhIgotbXNnc3RyICIiCi0KLW1zZ2lkICIsICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIk5vIFVSSSBoYW5kbGVyIGZvciB0aGUgJXMgcHJvdG9jb2wgZm91bmQiCi1tc2dzdHIgIuaJvuS4jeWIsCVz55qEVVJJ6JmV55CG56iL5byPIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlVSSSBzY2hlbWUgJyVzJyBub3Qgc3VwcG9ydGVkIgotbXNnc3RyICLkuI3mlK/mj7RVUkkgc2NoZW1lOiclcyciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRVJST1I6IGZyb20gZWxlbWVudCAlczogJXNcbiIKLW1zZ3N0ciAi6Yyv6Kqk77ya5L6G6IeqICVzIGVsZW1lbnTvvJolc1xuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4iCi0iJXNcbiIKLW1zZ3N0ciAiIgotIumhjeWkluWBtemMr+izh+ioiu+8mlxuIgotIiVzXG4iCi0KLSMgV2VuLCDkuI3nv7vora/vvIzlub7kuY7pg73mmK/lsIjmnInlkI3oqZ4KLSMsIGMtZm9ybWF0Ci1tc2dpZCAibGluayBoYXMgbm8gc291cmNlIFtzaW5rPSVzQCVwXSIKLW1zZ3N0ciAiIgotCi0jIFdlbiwg5LiN57+76K2v77yM5bm+5LmO6YO95piv5bCI5pyJ5ZCN6KmeCi0jLCBjLWZvcm1hdAotbXNnaWQgImxpbmsgaGFzIG5vIHNpbmsgW3NvdXJjZT0lc0AlcF0iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBwcm9wZXJ0eSBcIiVzXCIgaW4gZWxlbWVudCBcIiVzXCIiCi1tc2dzdHIgIuKAnCUyJHPigJ0g5YWD5Lu25rKS5pyJIOKAnCUxJHPigJ0g5bGs5oCnIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgImNvdWxkIG5vdCBzZXQgcHJvcGVydHkgXCIlc1wiIGluIGVsZW1lbnQgXCIlc1wiIHRvIFwiJXNcIiIKLW1zZ3N0ciAi54Sh5rOV5bCHIOKAnCUyJHPigJ0gZWxlbWVudOeahCDigJwlMSRz4oCdIOWxrOaAp+ioreWumueCuiDigJwlMyRz4oCdIgotCi1tc2dpZCAiRGVsYXllZCBsaW5raW5nIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgbGluayAlcyB0byAlcyIKLW1zZ3N0ciAi54Sh5rOV6YCj5o6lICVzIOWSjCAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBlbGVtZW50IFwiJXNcIiIKLW1zZ3N0ciAi4oCcJXPigJ0gZWxlbWVudOS4jeWtmOWcqCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJ1bmV4cGVjdGVkIHJlZmVyZW5jZSBcIiVzXCIgLSBpZ25vcmluZyIKLW1zZ3N0ciAi5b+955Wl6Z2e6aCQ5pyf55qE5Y+D54WnOiBcIiVzXCIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAidW5leHBlY3RlZCBwYWQtcmVmZXJlbmNlIFwiJXNcIiAtIGlnbm9yaW5nIgotbXNnc3RyICLlv73nlaXpnZ7poJDmnJ/nmoRwYWTlj4Pnhac6IFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJjb3VsZCBub3QgcGFyc2UgY2FwcyBcIiVzXCIiCi1tc2dzdHIgIueEoeazleWIhuaekGNhcHMgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIm5vIHNpbmsgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiVVJJIOKAnCVz4oCdIOaykuacieWPr+eUqOeahHNpbmsgZWxlbWVudCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBzb3VyY2UgZWxlbWVudCBmb3IgVVJJIFwiJXNcIiIKLW1zZ3N0ciAiVVJJIOKAnCVz4oCdIOaykuacieWPr+eUqOeahHNvdXJjZSBlbGVtZW50IgotCi1tc2dpZCAic3ludGF4IGVycm9yIgotbXNnc3RyICLoqp7ms5XpjK/oqqQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAic3BlY2lmaWVkIGVtcHR5IGJpbiBcIiVzXCIsIG5vdCBhbGxvd2VkIgotbXNnc3RyICLkuI3lhYHoqLHmjIflrprnqbrnmoRiaW46IFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJubyBiaW4gXCIlc1wiLCB1bnBhY2tpbmcgZWxlbWVudHMiCi1tc2dzdHIgImJpbiBcIiVzXCLkuI3lrZjlnKjvvIzop6PplotlbGVtZW50cyIKLQotbXNnaWQgImVtcHR5IHBpcGVsaW5lIG5vdCBhbGxvd2VkIgotbXNnc3RyICLkuI3lhYHoqLHnqbrnmoRwaXBlbGluZSIKLQotbXNnaWQgIkEgbG90IG9mIGJ1ZmZlcnMgYXJlIGJlaW5nIGRyb3BwZWQuIgotbXNnc3RyICLmraPlnKjmi4vmo4TlpKfph4/nmoTnt6nooZ3ljYAiCi0KLW1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgcHJvYmxlbS4iCi1tc2dzdHIgIuWFp+mDqOizh+aWmea1geeoi+mMr+iqpCIKLQotbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi1tc2dzdHIgIuWFp+mDqOizh+aWmea1geeoi+mMr+iqpCIKLQotbXNnaWQgIkludGVybmFsIGNsb2NrIGVycm9yLiIKLW1zZ3N0ciAi5YWn6YOoY2xvY2vpjK/oqqQiCi0KLW1zZ2lkICJGYWlsZWQgdG8gbWFwIGJ1ZmZlci4iCi1tc2dzdHIgIuWwjeaHiee3qeihneWNgOWkseaVlyIKLQotbXNnaWQgIkZpbHRlciBjYXBzIgotbXNnc3RyICLpgY7mv75jYXBzIgotCi0jIFdlbiwg5oCq5oCq55qECi1tc2dpZCAiIgotIlJlc3RyaWN0IHRoZSBwb3NzaWJsZSBhbGxvd2VkIGNhcGFiaWxpdGllcyAoTlVMTCBtZWFucyBBTlkpLiBTZXR0aW5nIHRoaXMgIgotInByb3BlcnR5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBwbGllZCBHc3RDYXBzIG9iamVjdC4iCi1tc2dzdHIgIumZkOWItuWFgeioseeahGNhcGFiaWxpdGllcyAoTlVMTOihqOekuuS4jemZkOWItinvvIzmiZPplovoqbLlsazmgKflsIfmnIPlj4PnhadHc3RDYXBz54mp5Lu2IgotCi1tc2dpZCAiQ2FwcyBDaGFuZ2UgTW9kZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmlsdGVyIGNhcHMgY2hhbmdlIGJlaGF2aW91ciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVGVtcCBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIKLW1zZ3N0ciAi5pyq5oyH5a6a5pqr5a2Y55uu6YyEIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlIFwiJXNcIi4iCi1tc2dzdHIgIueEoeazleeUoueUn+aaq+WtmOaqlOahiFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi1tc2dzdHIgIueEoeazlemWi+WVn+aqlOahiCDigJwlc+KAnSDkvoboroDlj5blhaflrrnjgIIiCi0KLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGRvd25sb2FkIGZpbGUuIgotbXNnc3RyICLkuIvovInkuKblr6vlhaXlhaflrrnoh7PmqpTmoYjmmYLnmbznlJ/pjK/oqqTjgIIiCi0KLW1zZ2lkICJObyBmaWxlIG5hbWUgc3BlY2lmaWVkIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAi5pyq5oyH5a6a5rqW5YKZ5a+r5YWl55qE5qqU5qGI5ZCN56ix44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLW1zZ3N0ciAi54Sh5rOV6ZaL5ZWfIOKAnCVz4oCdIOaqlOahiOS+huWvq+WFpeWFp+WuueOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBjbG9zaW5nIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi6Zec6ZaJ5qqU5qGIIOKAnCVz4oCdIOaZgueZvOeUn+mMr+iqpOOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSBzZWVraW5nIGluIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi5bCN5qqU5qGIIOKAnCVz4oCdIOWumuS9jeaZgueZvOeUn+mMr+iqpOOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUgXCIlc1wiLiIKLW1zZ3N0ciAi55W25a+r5YWl5YWn5a656Iez5qqU5qGIIOKAnCVz4oCdIOaZgueZvOeUn+mMr+iqpOOAgiIKLQotbXNnaWQgIk5vIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yIHJlYWRpbmcuIgotbXNnc3RyICLmnKrmjIflrpropoHoroDlj5bnmoTmqpTmoYjlkI3nqLHjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBpbmZvIG9uIFwiJXNcIi4iCi1tc2dzdHIgIueEoeazleW+niAlcyDlj5blvpfos4fmlpkiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiXCIlc1wiIGlzIGEgZGlyZWN0b3J5LiIKLW1zZ3N0ciAi4oCcJXPigJ0g5piv5LiA5YCL55uu6YyE44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZpbGUgXCIlc1wiIGlzIGEgc29ja2V0LiIKLW1zZ3N0ciAi4oCcJXPigJ0g5piv5LiA5YCLIHNvY2tldOOAgiIKLQotIyBXZW4sIOaAquaAqueahAotbXNnaWQgIkZhaWxlZCBhZnRlciBpdGVyYXRpb25zIGFzIHJlcXVlc3RlZC4iCi1tc2dzdHIgIumHjeikh+mAgeWHuuiri+axguW+jOeZvOeUn+WkseaVlyIKLQotbXNnaWQgImNhcHMiCi1tc2dzdHIgIiIKLQotbXNnaWQgImRldGVjdGVkIGNhcGFiaWxpdGllcyBpbiBzdHJlYW0iCi1tc2dzdHIgIuW3suW+nuizh+aWmeS4sua1geS4reWBtea4rOWIsGNhcGFiaWxpdGllcyIKLQotbXNnaWQgIm1pbmltdW0iCi1tc2dzdHIgIuacgOS9jiIKLQotbXNnaWQgImZvcmNlIGNhcHMiCi1tc2dzdHIgIuW8t+i/q2NhcHMiCi0KLW1zZ2lkICJmb3JjZSBjYXBzIHdpdGhvdXQgZG9pbmcgYSB0eXBlZmluZCIKLW1zZ3N0ciAi5LiN5bCL5om+5Z6L5oWL77yM55u05Lqb5by36L+rY2FwcyIKLQotIywgZnV6enkKLW1zZ2lkICJTdHJlYW0gZG9lc24ndCBjb250YWluIGVub3VnaCBkYXRhLiIKLW1zZ3N0ciAi6LOH5paZ5Liy5rWB5Lit5rKS5pyJ6LOH5paZIgotCi1tc2dpZCAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIgotbXNnc3RyICLos4fmlpnkuLLmtYHkuK3mspLmnInos4fmlpkiCi0KLW1zZ2lkICJJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOlxuIgotbXNnc3RyICLlr6bkvZzku4vpnaLvvJpcbiIKLQotbXNnaWQgInJlYWRhYmxlIgotbXNnc3RyICLlj6/oroAiCi0KLW1zZ2lkICJ3cml0YWJsZSIKLW1zZ3N0ciAi5Y+v5a+rIgotCi1tc2dpZCAiZGVwcmVjYXRlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiY29udHJvbGxhYmxlIgotbXNnc3RyICLlj6/mjqfliLYiCi0KLW1zZ2lkICJjaGFuZ2VhYmxlIGluIE5VTEwsIFJFQURZLCBQQVVTRUQgb3IgUExBWUlORyBzdGF0ZSIKLW1zZ3N0ciAi5Y+v5Lul5YiH5o+b5YiwTlVMTCwgUkVBRFksIFBBVVNFRCDmiJZQTEFZSU5H54uA5oWLIgotCi1tc2dpZCAiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIKLW1zZ3N0ciAi5Y+q6IO95YiH5o+b5YiwTlVMTCwgUkVBRFksIOaIllBBVVNFROeLgOaFiyIKLQotbXNnaWQgImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIgotbXNnc3RyICLlj6rog73liIfmj5vliLBOVUxMIOaIliBSRUFEWeeLgOaFiyIKLQotbXNnaWQgIkJsYWNrbGlzdGVkIGZpbGVzOiIKLW1zZ3N0ciAi6buR5ZCN5Zau5qqU5qGIIgotCi1tc2dpZCAiVG90YWwgY291bnQ6ICIKLW1zZ3N0ciAi57i95pW46YePOiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIlZCBibGFja2xpc3RlZCBmaWxlIgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3RlZCBmaWxlcyIKLW1zZ3N0clswXSAiJWTlgIvpu5HlkI3llq7mqpTmoYgiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgcGx1Z2luIgotbXNnaWRfcGx1cmFsICIlZCBwbHVnaW5zIgotbXNnc3RyWzBdICIlZCDlgIvlpJbmjpvnqIvlvI8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgYmxhY2tsaXN0IGVudHJ5IgotbXNnaWRfcGx1cmFsICIlZCBibGFja2xpc3QgZW50cmllcyIKLW1zZ3N0clswXSAiJWTnrYbpu5HlkI3llq7ntIDpjIQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJWQgZmVhdHVyZSIKLW1zZ2lkX3BsdXJhbCAiJWQgZmVhdHVyZXMiCi1tc2dzdHJbMF0gIiVkIOWAi+WKn+iDvSIKLQotbXNnaWQgIlByaW50IGFsbCBlbGVtZW50cyIKLW1zZ3N0ciAi6aGv56S65omA5pyJZWxlbWVudHMiCi0KLW1zZ2lkICJQcmludCBsaXN0IG9mIGJsYWNrbGlzdGVkIGZpbGVzIgotbXNnc3RyICLpoa/npLrmiYDmnInpu5HlkI3llq7mqpTmoYgiCi0KLSMgV2VuLCDmgKrmgKrnmoQKLW1zZ2lkICIiCi0iUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gb3IgYWxsICIKLSJwbHVnaW5zIHByb3ZpZGUuXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCAiCi0iYXV0b21hdGljIHBsdWdpbiBpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIKLW1zZ3N0ciAiIgotIuW+nuaMh+WumuWkluaOm+eoi+W8j+aIluaYr+aJgOacieWkluaOm+eoi+W8j+WNsOWHuumbu+iFpuWPr+S7peWIhuaekOeahOWKn+iDveWIl+ihqOOAglxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWwjeaWvOmAo+e1kOS4puWuieijneWklumDqOiHquWLleWkluaOm+eoi+W8j+acieeUqCIKLQotbXNnaWQgIkxpc3QgdGhlIHBsdWdpbiBjb250ZW50cyIKLW1zZ3N0ciAi5YiX5Ye65aSW5o6b56iL5byP5YWn5a65IgotCi1tc2dpZCAiQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMiCi1tc2dzdHIgIuaqouafpeaMh+WumueahGVsZW1lbnTmiJbmmK/lpJbmjpvnqIvlvI/mmK/lkKblrZjlnKgiCi0KLW1zZ2lkICIiCi0iV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgdmVyc2lvbiBpcyAiCi0iYXQgbGVhc3QgdGhlIHZlcnNpb24gc3BlY2lmaWVkIgotbXNnc3RyICLmqqLmn6XmjIflrprnmoRlbGVtZW505oiW5piv5aSW5o6b56iL5byP5piv5ZCm5a2Y5Zyo5pmC6aCG5L6/5qqi5p+l5piv5ZCm54K65pyA5paw54mI5pysIgotCi1tc2dpZCAiUHJpbnQgc3VwcG9ydGVkIFVSSSBzY2hlbWVzLCB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGltcGxlbWVudCB0aGVtIgotbXNnc3RyICLljbDlh7rmlK/mj7TnmoRVUkkgc2NoZW1lc+S7peWPiuacieWvpuS9nOWug+eahGVsZW1lbnRzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBsb2FkIHBsdWdpbiBmaWxlOiAlc1xuIgotbXNnc3RyICLnhKHms5Xlho3lhaXlpJbmjpvnqIvlvI/mqpTmoYjvvJog4oCcJXPigJ1cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJObyBzdWNoIGVsZW1lbnQgb3IgcGx1Z2luICclcydcbiIKLW1zZ3N0ciAi5om+5LiN5YiwZWxlbWVudOaIluWkluaOm+eoi+W8jyclcydcbiIKLQotbXNnaWQgIkluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIue0ouW8lee1seioiCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIuW+nmVsZW1lbnQgXCIlMiRzXCIoJTMkcykg5Lit5b6X5Yiw6KiK5oGvIyUxJHU6IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkdvdCBtZXNzYWdlICMldSBmcm9tIHBhZCBcIiVzOiVzXCIgKCVzKTogIgotbXNnc3RyICLlvp5wYWQgXCIlNCRzXCIoJTIkczolMyRzKSDkuK3lvpfliLDoqIrmga8jJTEkdToiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1IGZyb20gb2JqZWN0IFwiJXNcIiAoJXMpOiAiCi1tc2dzdHIgIuW+nueJqeS7tiBcIiUyJHNcIiglMyRzKSDkuK3lvpfliLDoqIrmga8jJTEkdToiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IG1lc3NhZ2UgIyV1ICglcyk6ICIKLW1zZ3N0ciAi5pS25Yiw6KiK5oGvICMldSAoJXMpOiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJHb3QgRU9TIGZyb20gZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIuW+nmVsZW1lbnQgXCIlc1wiIOS4reW+l+WIsEVPU+mAmuefpVxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iCi1tc2dzdHIgIuaJvuWIsOaomeexpCAgICAgIDog55SxZWxlbWVudCBcIiVzXCLmib7liLDjgIJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IHBhZCBcIiVzOiVzXCIuXG4iCi1tc2dzdHIgIuaJvuWIsOaomeexpCAgICAgIDog55SxcGFkIFwiJXM6JXNcIuaJvuWIsOOAglxuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIKLW1zZ3N0ciAi5om+5Yiw5qiZ57GkICAgICAgOiDnlLHlvp7nianku7YgXCIlc1wi5om+5Yiw44CCXG4iCi0KLW1zZ2lkICJGT1VORCBUQUdcbiIKLW1zZ3N0ciAi5om+5Yiw5qiZ57GkXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRk9VTkQgVE9DICAgICAgOiBmb3VuZCBieSBlbGVtZW50IFwiJXNcIi5cbiIKLW1zZ3N0ciAi5om+5YiwIFRPQyAgICAgIDog5b6eZWxlbWVudCBcIiVzXCLjgIJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iCi1tc2dzdHIgIuaJvuWIsCBUT0MgICAgICA6IOW+nueJqeS7tiBcIiVzXCLjgIJcbiIKLQotbXNnaWQgIkZPVU5EIFRPQ1xuIgotbXNnc3RyICLmib7liLBUT0NcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iSU5GTzpcbiIKLSIlc1xuIgotbXNnc3RyICIiCi0i6LOH6KiK77yaXG4iCi0iJXNcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iCi1tc2dzdHIgIuitpuWRiu+8muS+huiHqmVsZW1lbnQgJXMg77yaJXNcbiIKLQotIyBXZW4sIOaAquaAqueahCwg5aaC5L2V57K+56K65Y2A5YiGcHJlcm9sbOWSjGJ1ZmZlcj8KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIKLW1zZ3N0ciAi57ep6KGd5Lit77yM562J5b6F57ep6KGd5a6M5oiQLi4uXG4iCi0KLW1zZ2lkICJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIgotbXNnc3RyICLnt6nooZ3kuK3vvIznrYnlvoXlrozmiJDpgLLluqYuLi5cbiIKLQotbXNnaWQgImJ1ZmZlcmluZy4uLiIKLW1zZ3N0ciAi57ep6KGd5LitLi4uIgotCi1tc2dpZCAiRG9uZSBidWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIKLW1zZ3N0ciAi57ep6KGd5a6M5oiQ77yM5bCHcGlwZWxpbmXni4DmhYvoqK3miJBQTEFZSU5HLi4uXG4iCi0KLW1zZ2lkICJCdWZmZXJpbmcsIHNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICLnt6nooZ3lrozmiJDvvIzlsIdwaXBlbGluZeeLgOaFi+ioreaIkFBBVVNFLi4uXG4iCi0KLW1zZ2lkICJSZWRpc3RyaWJ1dGUgbGF0ZW5jeS4uLlxuIgotbXNnc3RyICLph43mlrDliIbphY3lu7bpgbLmmYLplpMuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIgotbXNnc3RyICLnlLElMiRz6KaB5rGC77yM5bCH54uA5oWL6Kit5oiQJTEkcy4uLlxuIgotCi1tc2dpZCAiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAi5Lit5pa377ya5YGc5q2icGlwZWxpbmUuLi5cbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJQcm9ncmVzczogKCVzKSAlc1xuIgotbXNnc3RyICLpgLLluqbvvJooJXMpICVzXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiTWlzc2luZyBlbGVtZW50OiAlc1xuIgotbXNnc3RyICLigJwlc+KAnSBlbGVtZW505LiN5a2Y5ZyoXG4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iCi1tc2dzdHIgIuW+nmVsZW1lbnQgJyVzJyDlj5blvpflhaflrrk6ICVzPSVzXG4iCi0KLW1zZ2lkICJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiCi1tc2dzdHIgIui8uOWHuuaomeexpCDvvIjljbNtZXRhZGF0Ye+8iSIKLQotbXNnaWQgIk91dHB1dCBUT0MgKGNoYXB0ZXJzIGFuZCBlZGl0aW9ucykiCi1tc2dzdHIgIui8uOWHulRPQyAo56ug56+A5Lul5Y+K54mI5pysKSIKLQotbXNnaWQgIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiCi1tc2dzdHIgIui8uOWHuueLgOaFi+izh+ioiuS7peWPiuWxrOaAp+mAmuefpSIKLQotbXNnaWQgIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iCi1tc2dzdHIgIuS4jemhr+ekuuS7u+S9lemAsuW6puizh+ioiiIKLQotbXNnaWQgIk91dHB1dCBtZXNzYWdlcyIKLW1zZ3N0ciAi6Ly45Ye66KiK5oGvIgotCi1tc2dpZCAiIgotIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlmIHZlcmJvc2UgIgotIm91dHB1dCBpcyBlbmFibGVkIChjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcykiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBST1BFUlRZLU5BTUUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkRvIG5vdCBpbnN0YWxsIGEgZmF1bHQgaGFuZGxlciIKLW1zZ3N0ciAi5LiN5a6J6KOd6Yyv6Kqk6JmV55CG56iL5byPIgotCi1tc2dpZCAiRm9yY2UgRU9TIG9uIHNvdXJjZXMgYmVmb3JlIHNodXR0aW5nIHRoZSBwaXBlbGluZSBkb3duIgotbXNnc3RyICLlnKjpl5zplolwaXBlbGluZeWJjeW8t+i/q3NvdXJjZSBFT1MiCi0KLW1zZ2lkICJHYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MiCi1tc2dzdHIgIuaUtumbhuS4puWIl+WNsOe0ouW8lee1seioiCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFUlJPUjogcGlwZWxpbmUgY291bGQgbm90IGJlIGNvbnN0cnVjdGVkOiAlcy5cbiIKLW1zZ3N0ciAi6Yyv6Kqk77ya54Sh5rOV5bu656uLcGlwZWxpbmXvvJolc+OAglxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIKLW1zZ3N0ciAi6Yyv6Kqk77ya54Sh5rOV5bu656uLcGlwZWxpbmXjgIJcbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iCi1tc2dzdHIgIuitpuWRiu+8mnBpcGVsaW5l6Yyv6Kqk77yaJXNcbiIKLQotbXNnaWQgIkVSUk9SOiB0aGUgJ3BpcGVsaW5lJyBlbGVtZW50IHdhc24ndCBmb3VuZC5cbiIKLW1zZ3N0ciAi6Yyv6Kqk77ya5om+5LiN5YiwIOKAmHBpcGVsaW5l4oCZIGVsZW1lbnTjgIJcbiIKLQotbXNnaWQgIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIgotbXNnc3RyICLlsIdwaXBlbGluZeeLgOaFi+ioreeCulBBVVNFRC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IFBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwYXVzZS5cbiIKLW1zZ3N0ciAi6Yyv6Kqk77yaUGlwZWxpbmUg5LiN5oOz6KaB5pqr5YGc44CCXG4iCi0KLW1zZ2lkICJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iCi1tc2dzdHIgIlBpcGVwbGluZeWPr+S7peato+W4uOmBi+WLle+8jOS4jemcgOimgee3qeihnSAuLi5cbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iCi1tc2dzdHIgIlBpcGVsaW5l5q2j5Zyo57ep6KGdIC4uLlxuIgotCi1tc2dpZCAiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIgotbXNnc3RyICLpjK/oqqTvvJpQaXBlbGluZSDkuI3mg7PopoHnt6nooZ3jgIJcbiIKLQotbXNnaWQgIlBpcGVsaW5lIGlzIFBSRVJPTExFRCAuLi5cbiIKLW1zZ3N0ciAiUGlwbGVsaW5l5bey57aT57ep6KGd5a6M55WiIC4uLlxuIgotCi1tc2dpZCAiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIgotbXNnc3RyICLlsIdwaXBlbGluZeeLgOaFi+ioreeCulBMQVlJTkcuLi5cbiIKLQotbXNnaWQgIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcGxheS5cbiIKLW1zZ3N0ciAi6Yyv6Kqk77yaUGlwZWxpbmUg5LiN5oOz6KaB5pKt5pS+44CCXG4iCi0KLW1zZ2lkICJFT1Mgb24gc2h1dGRvd24gZW5hYmxlZCAtLSBGb3JjaW5nIEVPUyBvbiB0aGUgcGlwZWxpbmVcbiIKLW1zZ3N0ciAi6Zec6ZaJ5pmC6YCB5Ye6RU9T5bey6Kit5a6aIC0tIOW8t+i/q1BpcGVsaW5lIEVPU1xuIgotCi1tc2dpZCAiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gd2FpdGluZyBmb3IgRU9TIGFmdGVyIEVycm9yXG4iCi1tc2dzdHIgIumXnOmWieaZgumAgeWHukVPU+W3suioreWumiAtLSDnlKLnlJ/pjK/oqqTlvoznrYnlvoVFT1NcbiIKLQotbXNnaWQgIldhaXRpbmcgZm9yIEVPUy4uLlxuIgotbXNnc3RyICLnrYnlvoVFT1MuLi5cbiIKLQotbXNnaWQgIkVPUyByZWNlaXZlZCAtIHN0b3BwaW5nIHBpcGVsaW5lLi4uXG4iCi1tc2dzdHIgIuaUtuWIsEVPUyAtIOWBnOatonBpcGVsaW5lLi4uXG4iCi0KLW1zZ2lkICJJbnRlcnJ1cHQgd2hpbGUgd2FpdGluZyBmb3IgRU9TIC0gc3RvcHBpbmcgcGlwZWxpbmUuLi5cbiIKLW1zZ3N0ciAi562J5b6FRU9T5pmC55m855Sf5Lit5pa3IC0g5YGc5q2icGlwZWxpbmVcbiIKLQotbXNnaWQgIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIgotbXNnc3RyICLnrYnlvoVFT1PmmYLnmbznlJ/pjK/oqqRcbiIKLQotbXNnaWQgIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlIgotbXNnc3RyICLlnKggJSDkuYvlvozln7fooYzntZDmnZ8iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIgotbXNnc3RyICLlsIdwaXBlbGluZeeLgOaFi+ioreeCulJFQURZLi4uXG4iCi0KLW1zZ2lkICJTZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgLi4uXG4iCi1tc2dzdHIgIuWwh3BpcGVsaW5l54uA5oWL6Kit54K6TlVMTC4uLlxuIgotCi1tc2dpZCAiRnJlZWluZyBwaXBlbGluZSAuLi5cbiIKLW1zZ3N0ciAi6YeL5pS+cGlwZWxpbmUgLi4uXG4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIuWFp+mDqOizh+aWmeS4sua1gemMr+iqpCIKLQotI34gbXNnaWQgIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIFRZUEUiCi0jfiBtc2dzdHIgIuS4jemhr+ekuuWSjCBUWVBFIOaciemXnOeahOeLgOaFi+izh+ioiiIKLQotI34gbXNnaWQgIlRZUEUxLFRZUEUyLC4uLiIKLSN+IG1zZ3N0ciAiVFlQRTEsVFlQRTIsLi4uIgotCi0jfiBtc2dpZCAibGluayB3aXRob3V0IHNvdXJjZSBlbGVtZW50IgotI34gbXNnc3RyICLnrqHnt5rkuK3mspLmnInkvobmupDlhYPku7YiCi0KLSN+IG1zZ2lkICJsaW5rIHdpdGhvdXQgc2luayBlbGVtZW50IgotI34gbXNnc3RyICLnrqHnt5rkuK3mspLmnInovLjlh7rlhYPku7YiCi0KLSN+IG1zZ2lkICJQcmludCBhbGxvYyB0cmFjZSAoaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUpIgotI34gbXNnc3RyICLljbDlh7ogYWxsb2Mg6L+96Lmk6KiK5oGvICjlpoLmnpznt6jora/nqIvlvI/mmYLmnInllZ/nlKjpgJnpoIXlip/og70pIgotCi0jfiBtc2dpZCAiVXNhZ2U6IGdzdC14bWxsYXVuY2ggPGZpbGUueG1sPiBbIGVsZW1lbnQucHJvcGVydHk9dmFsdWUgLi4uIF1cbiIKLSN+IG1zZ3N0ciAi55So5rOV77yaZ3N0LXhtbGxhdW5jaCA8ZmlsZS54bWw+IFsgZWxlbWVudC5wcm9wZXJ0eT12YWx1ZSAuLi4gXVxuIgotCi0jfiBtc2dpZCAiRVJST1I6IHBhcnNlIG9mIHhtbCBmaWxlICclcycgZmFpbGVkLlxuIgotI34gbXNnc3RyICLpjK/oqqTvvJrnhKHms5Xop6PmnpAgWE1MIOaqlOahiCDigJglc+KAmSDnmoTlhaflrrnjgIJcbiIKLQotI34gbXNnaWQgIkVSUk9SOiBjb3VsZCBub3QgcGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICVkOiAlcy5cbiIKLSN+IG1zZ3N0ciAi6Yyv6Kqk77ya54Sh5rOV6Kej5p6Q5oyH5Luk55qE56ysICVkIOWAi+WPg+aVuO+8miVz44CCXG4iCi0KLSN+IG1zZ2lkICJTYXZlIHhtbCByZXByZXNlbnRhdGlvbiBvZiBwaXBlbGluZSB0byBGSUxFIGFuZCBleGl0IgotI34gbXNnc3RyICLlsIfku6PooajnrqHnt5rnmoTmnrbmp4vlhLLlrZjoh7M85qqU5qGIPu+8jOeEtuW+jOe1kOadnyIKLQotI34gbXNnaWQgIkZJTEUiCi0jfiBtc2dzdHIgIuaqlOahiCIKLQotI34gbXNnaWQgIkRpc2FibGUgYWNjZWxlcmF0ZWQgQ1BVIGluc3RydWN0aW9ucyIKLSN+IG1zZ3N0ciAi6Zec6ZaJIENQVSDlhKrljJblip/og70iCi0KLSN+IG1zZ2lkICJTQ0hFRFVMRVIiCi0jfiBtc2dzdHIgIlNDSEVEVUxFUiIKLQotI34gbXNnaWQgIlJFR0lTVFJZIgotI34gbXNnc3RyICJSRUdJU1RSWSIKLQotI34gbXNnaWQgInBhdGggbGlzdCBmb3IgbG9hZGluZyBwbHVnaW5zIChzZXBhcmF0ZWQgYnkgJyVzJykiCi0jfiBtc2dzdHIgIuaQnOWwi+WkluaOm+aZgueahOi3r+W+kea4heWWru+8jOS7peKAmCVz4oCZ5YiG6ZqUIgotCi0jfiBtc2dpZCAiU2NoZWR1bGVyIHRvIHVzZSAoZGVmYXVsdCBpcyAnJXMnKSIKLSN+IG1zZ3N0ciAi5rqW5YKZ5L2/55So55qE5o6S56iL5ZmoICjpoJDoqK3ngrog4oCYJXPigJkpIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgR1N0cmVhbWVyIGVycm9yOiBzdGF0ZSBjaGFuZ2UgZmFpbGVkLiAgRmlsZSBhIGJ1Zy4iCi0jfiBtc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJrnhKHms5Xmm7TmlLnni4DmhYvjgILoq4vljK/loLHpjK/oqqTjgIIiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBHU3RyZWFtZXIgZXJyb3I6IHNjaGVkdWxlciBwcm9ibGVtLiAgRmlsZSBhIGJ1Zy4iCi0jfiBtc2dzdHIgIkdTdHJlYW1lciDlhafpg6jpjK/oqqTvvJrmjpLnqIvlmajnmbznlJ/llY/poYzjgILoq4vljK/loLHpjK/oqqTjgIIiCi0KLSN+IG1zZ2lkICJvcmlnaW5hbCBsb2NhdGlvbiBvZiBmaWxlIGFzIGEgVVJJIgotI34gbXNnc3RyICJVUkkg5b2i5byP55qE5qqU5qGI5L2N572uIgotCi0jfiBtc2dpZCAiIgotI34gIkV4ZWN1dGlvbiBlbmRlZCBhZnRlciAlcyBpdGVyYXRpb25zIChzdW0gJXMgbnMsIGF2ZXJhZ2UgJXMgbnMsIG1pbiAlcyBucywgIgotI34gIm1heCAlcyBucykuXG4iCi0jfiBtc2dzdHIgIiIKLSN+ICIlcyDlgIvov7TlnIjlvozln7fooYzlroznlaIgKOe4veWFsSAlcyBuc++8jOW5s+WdhyAlcyBuc++8jOacgOWwkSAlcyBuc++8jOacgOWkmiAlcyBucylcbiIKLQotI34gbXNnaWQgIk51bWJlciBvZiB0aW1lcyB0byBpdGVyYXRlIHBpcGVsaW5lIgotI34gbXNnc3RyICLnrqHnt5rln7fooYzmrKHmlbgiCi0KLSN+IG1zZ2lkICIgICAgICAgICBUcnlpbmcgdG8gcnVuIGFueXdheS5cbiIKLSN+IG1zZ3N0ciAiICAgICAg5ZiX6Kmm5by35Yi25Z+36KGM44CCXG4iCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dzdC11bmluc3RhbGxlZCBiL3NjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjYTdiZTFkLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvZ3N0LXVuaW5zdGFsbGVkCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLSMhL2Jpbi9iYXNoIC1pCi0jCi0jIHRoaXMgc2NyaXB0IGlzIGluIGdpdCBhcyBnc3RyZWFtZXIvc2NyaXB0cy9nc3QtdW5pbnN0YWxsZWQKLSMKLSMgSXQgd2lsbCBzZXQgdXAgdGhlIGVudmlyb25tZW50IHRvIHVzZSBhbmQgZGV2ZWxvcCBnc3RyZWFtZXIgYW5kIHByb2plY3RzCi0jIHRoYXQgdXNlIGdzdHJlYW1lciB3aXRoIGFuIHVuaW5zdGFsbGVkIGdpdCBjaGVja291dCBvZiBnc3RyZWFtZXIgYW5kIHRoZQotIyBwbHVnaW4gbW9kdWxlcy4KLSMKLSMgSXQgd2lsbCBzZXQgdXAgTERfTElCUkFSWV9QQVRILCBEWUxEX0xJQlJBUllfUEFUSCwgUEtHX0NPTkZJR19QQVRILAotIyBHU1RfUExVR0lOX1BBVEgsIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEgsIEdTVF9SRUdJU1RSWSwgTUFOUEFUSCwgUFlUSE9OUEFUSAotIyB0byBwcmVmZXIgdGhlIHVuaW5zdGFsbGVkIHZlcnNpb25zIGJ1dCBhbHNvIGNvbnRhaW4gdGhlIGluc3RhbGxlZCBvbmVzLgotIyBUaGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcywgdGhhdCBubyBzeXN0ZW0gaW5zdGFsbGVkIHBsdWdpbnMgd2lsbCBiZQotIyB1c2VkIGJ1dCBvbmx5IHRoZSB1bmluc3RhbGxlZCBvbmVzLgotIwotIyBUaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgdGhlIHJlbGV2YW50IG1vZHVsZXMgYXJlIGNoZWNrZWQgb3V0IG9uZSBieSBvbmUKLSMgdW5kZXIgYSBnaXZlbiB0cmVlIHNwZWNpZmllZCBiZWxvdyBpbiBNWUdTVC4KLSMKLSMgU3ltbGluayB0aGlzIHNjcmlwdCBpbiBhIGRpcmVjdG9yeSBpbiB5b3VyIHBhdGggKGZvciBleGFtcGxlICRIT01FL2JpbikuIFlvdQotIyBtdXN0IG5hbWUgdGhlIHN5bWxpbmsgZ3N0LXNvbWV0aGluZywgd2hlcmUgc29tZXRoaW5nIGlzIHRoZSBzdWJkaXJlY3RvcnkKLSMgb2YgTVlHU1QgdGhhdCBjb250YWlucyB5b3VyIGdzdHJlYW1lciBtb2R1bGUgY2hlY2tvdXRzLgotIwotIyBlLmcuOgotIyAtIG1rZGlyICRIT01FL2dzdC9oZWFkCi0jIC0gbG4gLXNmIGdzdC11bmluc3RhbGxlZCAkSE9NRS9iaW4vZ3N0LWhlYWQKLSMgLSBjaGVja291dCBjb3BpZXMgb2YgZ3N0cmVhbWVyIG1vZHVsZXMgaW4gJEhPTUUvZ3N0L2hlYWQKLSMgLSBnc3QtaGVhZAotCi0jIFRoaXMgc2NyaXB0IGlzIHJ1biAtaSBzbyB0aGF0IFBTMSBkb2Vzbid0IGdldCBjbGVhcmVkCi0KLWlmIFsgLXogJEdTVF9VTklOU1RBTExFRF9ST09UIF07Ci10aGVuCi0gICAgIyBDaGFuZ2UgdGhpcyB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgeW91ciBnc3RyZWFtZXIgZ2l0IGNoZWNrb3V0cwotICAgIE1ZR1NUPSRIT01FL2dzdAotCi0gICAgIwotICAgICMgRXZlcnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgc2hvdWxkbid0IGJlIGVkaXRlZCEKLSAgICAjCi0KLSAgICAjIGV4dHJhY3QgdmVyc2lvbiBmcm9tICQwCi0gICAgIyBpZiB0aGlzIHNjcmlwdCBpcyBjYWxsZWQgImdzdC1oZWFkIiB0aGVuIHZlcnNpb24gd2lsbCBiZSAiaGVhZCIKLSAgICBWRVJTSU9OPWBlY2hvICQwIHwgc2VkIHMvLipnc3QtLy9nYAotCi0gICAgIyBiYXNlIHBhdGggdW5kZXIgd2hpY2ggZGlycyBhcmUgaW5zdGFsbGVkCi0gICAgR1NUPSRNWUdTVC8kVkVSU0lPTgotZWxzZQotICAgICMgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhlIEdTVF9VTklOU1RBTExFRF9ST09UIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZQotICAgICMgbG9jYXRpb24gb2YgeW91ciBjaGVja291dCBhbmQgY2FsbCB0aGlzIHNjcmlwdCBkaXJlY3RseS4KLSAgICAjCi0gICAgIyBFeDogR1NUX1VOSU5TVEFMTEVEX1JPT1Q9JEhPTUUvY2hlY2tvdXQvbG9jYXRpb24gZ3N0LXVuaW5zdGFsbGVkCi0KLSAgICBHU1Q9JEdTVF9VTklOU1RBTExFRF9ST09UCi1maQotCi1HU1RfUFJFRklYPSRHU1QvcHJlZml4Ci1pZiB0ZXN0ICEgLWUgJEdTVDsgdGhlbgotICBlY2hvICIkR1NUIGRvZXMgbm90IGV4aXN0ICEiCi0gIGV4aXQKLWZpCi0KLSMgc2V0IHVwIGEgYnVuY2ggb2YgcGF0aHMKLVBBVEg9IlwKLSRHU1QvZ3N0cmVhbWVyL3Rvb2xzOlwKLSRHU1QvZ3N0LXBsdWdpbnMtYmFzZS90b29sczpcCi0kR1NUL2dzdC1wbGF5ZXIvc3JjOlwKLSRHU1QvZ3N0LWVkaXRvci9zcmM6XAotJEdTVC9nc3RyZWFtZXItc2hhcnAvdG9vbHM6XAotJEdTVC9vcmMvdG9vbHM6XAotJEdTVF9QUkVGSVgvYmluOlwKLSRQQVRIIgotCi0jIC9zb21lL3BhdGg6IG1ha2VzIHRoZSBkeW5hbWljIGxpbmtlciBsb29rIGluIC4gdG9vLCBzbyBhdm9pZCB0aGlzCi1MRF9MSUJSQVJZX1BBVEg9JEdTVF9QUkVGSVgvbGliJHtMRF9MSUJSQVJZX1BBVEg6KzokTERfTElCUkFSWV9QQVRIfQotRFlMRF9MSUJSQVJZX1BBVEg9JEdTVF9QUkVGSVgvbGliJHtEWUxEX0xJQlJBUllfUEFUSDorOiREWUxEX0xJQlJBUllfUEFUSH0KLUdJX1RZUEVMSUJfUEFUSD0kR1NUX1BSRUZJWC9zaGFyZS9naXItMS4wJHtHSV9UWVBFTElCX1BBVEg6KzokR0lfVFlQRUxJQl9QQVRIfQotCi0jIE9SQwotTERfTElCUkFSWV9QQVRIPSRHU1Qvb3JjL29yYy8ubGliczokR1NUL29yYy9vcmMtdGVzdC8ubGliczokTERfTElCUkFSWV9QQVRICi1EWUxEX0xJQlJBUllfUEFUSD0kR1NUL29yYy9vcmMvLmxpYnM6JEdTVC9vcmMvb3JjLXRlc3QvLmxpYnM6JERZTERfTElCUkFSWV9QQVRICi0KLSMgR1N0cmVhbWVyIHJ0c3Agc2VydmVyIGxpYnJhcnkKLUxEX0xJQlJBUllfUEFUSD0kR1NUL2dzdC1ydHNwLXNlcnZlci9nc3QvcnRzcC1zZXJ2ZXIvLmxpYnM6JExEX0xJQlJBUllfUEFUSAotRFlMRF9MSUJSQVJZX1BBVEg9JEdTVC9nc3QtcnRzcC1zZXJ2ZXIvZ3N0L3J0c3Atc2VydmVyLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAotR0lfVFlQRUxJQl9QQVRIPSRHU1QvZ3N0LXJ0c3Atc2VydmVyL2dzdC9ydHNwLXNlcnZlcjokR0lfVFlQRUxJQl9QQVRICi0KLSMgR1N0cmVhbWVyIEVkaXRpbmcgU2VydmljZXMgbGlicmFyeQotTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0LWVkaXRpbmctc2VydmljZXMvZ2VzLy5saWJzOiRMRF9MSUJSQVJZX1BBVEgKLURZTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0LWVkaXRpbmctc2VydmljZXMvZ2VzLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAotR0lfVFlQRUxJQl9QQVRIPSRHU1QvZ3N0LWVkaXRpbmctc2VydmljZXMvZ2VzOiRHSV9UWVBFTElCX1BBVEgKLVBBVEg9JEdTVC9nc3QtZWRpdGluZy1zZXJ2aWNlcy90b29sczokUEFUSAotCi0jIEdTdHJlYW1lciBwbHVnaW5zIHZhYXBpIGxpYnJhcmllcwotTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0cmVhbWVyLXZhYXBpL2dzdC1saWJzL2dzdC92YWFwaS8ubGliczokTERfTElCUkFSWV9QQVRICi1EWUxEX0xJQlJBUllfUEFUSD0kR1NUL2dzdHJlYW1lci12YWFwaS9nc3QtbGlicy9nc3QvdmFhcGkvLmxpYnM6JERZTERfTElCUkFSWV9QQVRICi0KLSMgR1N0cmVhbWVyIHBsdWdpbnMgYmFzZSBsaWJyYXJpZXMKLWZvciBwYXRoIGluIGFsbG9jYXRvcnMgYXBwIGF1ZGlvIGZmdCBwYnV0aWxzIHJpZmYgcnRwIHJ0c3Agc2RwIHRhZyB1dGlscyB2aWRlbwotZG8KLSAgTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvJHBhdGgvLmxpYnM6JExEX0xJQlJBUllfUEFUSAotICBEWUxEX0xJQlJBUllfUEFUSD0kR1NUL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LWxpYnMvZ3N0LyRwYXRoLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAotICBHSV9UWVBFTElCX1BBVEg9JEdTVC9nc3QtcGx1Z2lucy1iYXNlL2dzdC1saWJzL2dzdC8kcGF0aDokR0lfVFlQRUxJQl9QQVRICi1kb25lCi0KLSMgR1N0cmVhbWVyIHBsdWdpbnMgYmFkIGxpYnJhcmllcwotZm9yIHBhdGggaW4gYWRhcHRpdmVkZW11eCBhdWRpbyBiYXNlIGJhc2VjYW1lcmFiaW5zcmMgY29kZWNwYXJzZXJzIGdsIGluc2VydGJpbiBpbnRlcmZhY2VzIG1wZWd0cyBwbGF5ZXIgdXJpZG93bmxvYWRlciB2aWRlbyB3YXlsYW5kCi1kbwotICBMRF9MSUJSQVJZX1BBVEg9JEdTVC9nc3QtcGx1Z2lucy1iYWQvZ3N0LWxpYnMvZ3N0LyRwYXRoLy5saWJzOiRMRF9MSUJSQVJZX1BBVEgKLSAgRFlMRF9MSUJSQVJZX1BBVEg9JEdTVC9nc3QtcGx1Z2lucy1iYWQvZ3N0LWxpYnMvZ3N0LyRwYXRoLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAotICBHSV9UWVBFTElCX1BBVEg9JEdTVC9nc3QtcGx1Z2lucy1iYWQvZ3N0LWxpYnMvZ3N0LyRwYXRoOiRHSV9UWVBFTElCX1BBVEgKLWRvbmUKLWV4cG9ydCBHU1RfSEFBUl9DQVNDQURFU19QQVRIPSRHU1QvZ3N0LXBsdWdpbnMtYmFkL2V4dC9vcGVuY3YvCi0KLSMgR1N0cmVhbWVyIGNvcmUgbGlicmFyaWVzCi1mb3IgcGF0aCBpbiBiYXNlIGNoZWNrIGNvbnRyb2xsZXIgbmV0Ci1kbwotICBMRF9MSUJSQVJZX1BBVEg9JEdTVC9nc3RyZWFtZXIvbGlicy9nc3QvJHBhdGgvLmxpYnM6JExEX0xJQlJBUllfUEFUSAotICBEWUxEX0xJQlJBUllfUEFUSD0kR1NUL2dzdHJlYW1lci9saWJzL2dzdC8kcGF0aC8ubGliczokRFlMRF9MSUJSQVJZX1BBVEgKLSAgR0lfVFlQRUxJQl9QQVRIPSRHU1QvZ3N0cmVhbWVyL2xpYnMvZ3N0LyRwYXRoOiRHSV9UWVBFTElCX1BBVEgKLWRvbmUKLUxEX0xJQlJBUllfUEFUSD0kR1NUL2dzdHJlYW1lci9nc3QvLmxpYnM6JExEX0xJQlJBUllfUEFUSAotRFlMRF9MSUJSQVJZX1BBVEg9JEdTVC9nc3RyZWFtZXIvZ3N0Ly5saWJzOiREWUxEX0xJQlJBUllfUEFUSAotR0lfVFlQRUxJQl9QQVRIPSRHU1QvZ3N0cmVhbWVyL2dzdDokR0lfVFlQRUxJQl9QQVRICi1leHBvcnQgTERfTElCUkFSWV9QQVRICi1leHBvcnQgRFlMRF9MSUJSQVJZX1BBVEgKLWV4cG9ydCBHSV9UWVBFTElCX1BBVEgKLSAgCi1leHBvcnQgUEtHX0NPTkZJR19QQVRIPSJcCi0kR1NUX1BSRUZJWC9saWIvcGtnY29uZmlnXAotOiRHU1QvZ3N0cmVhbWVyL3BrZ2NvbmZpZ1wKLTokR1NUL2dzdC1wbHVnaW5zLWJhc2UvcGtnY29uZmlnXAotOiRHU1QvZ3N0LXBsdWdpbnMtZ29vZC9wa2djb25maWdcCi06JEdTVC9nc3QtcGx1Z2lucy11Z2x5L3BrZ2NvbmZpZ1wKLTokR1NUL2dzdC1wbHVnaW5zLWJhZC9wa2djb25maWdcCi06JEdTVC9nc3QtbGliYXYvcGtnY29uZmlnXAotOiRHU1QvZ3N0LWZmbXBlZy9wa2djb25maWdcCi06JEdTVC9nc3QtcHl0aG9uL3BrZ2NvbmZpZ1wKLTokR1NUL2dzdC1ydHNwLXNlcnZlci9wa2djb25maWdcCi06JEdTVC9nc3QtZWRpdGluZy1zZXJ2aWNlcy9wa2djb25maWdcCi06JEdTVC9nc3RyZWFtZXItc2hhcnAvcGtnY29uZmlnXAotOiRHU1QvZ3N0cmVhbWVyLXZhYXBpL3BrZ2NvbmZpZ1wKLTokR1NUL29yY1wKLTokR1NUL2ZhcnNpZ2h0MlwKLTokR1NUL2xpYm5pY2UvbmljZVwKLSR7UEtHX0NPTkZJR19QQVRIOis6JFBLR19DT05GSUdfUEFUSH0iCi0KLWV4cG9ydCBHU1RfUExVR0lOX1BBVEg9IlwKLSRHU1QvZ3N0cmVhbWVyL3BsdWdpbnNcCi06JEdTVC9nc3QtcGx1Z2lucy1iYXNlL2V4dFwKLTokR1NUL2dzdC1wbHVnaW5zLWJhc2UvZ3N0XAotOiRHU1QvZ3N0LXBsdWdpbnMtYmFzZS9zeXNcCi06JEdTVC9nc3QtcGx1Z2lucy1nb29kL2V4dFwKLTokR1NUL2dzdC1wbHVnaW5zLWdvb2QvZ3N0XAotOiRHU1QvZ3N0LXBsdWdpbnMtZ29vZC9zeXNcCi06JEdTVC9nc3QtcGx1Z2lucy11Z2x5L2V4dFwKLTokR1NUL2dzdC1wbHVnaW5zLXVnbHkvZ3N0XAotOiRHU1QvZ3N0LXBsdWdpbnMtdWdseS9zeXNcCi06JEdTVC9nc3QtcGx1Z2lucy1iYWQvZXh0XAotOiRHU1QvZ3N0LXBsdWdpbnMtYmFkL2dzdFwKLTokR1NUL2dzdC1wbHVnaW5zLWJhZC9zeXNcCi06JEdTVC9nc3QtbGliYXYvZXh0L1wKLTokR1NUL2dzdC1mZm1wZWcvZXh0L1wKLTokR1NUL2dzdC1vbXgvb214Ly5saWJzXAotOiRHU1QvY2x1dHRlci1nc3QvY2x1dHRlci1nc3QvLmxpYnNcCi06JEdTVC9nc3RyZWFtZXItdmFhcGkvZ3N0L3ZhYXBpLy5saWJzXAotOiRHU1QvcGx1Z2luc1wKLTokR1NUL2ZhcnNpZ2h0Mi9nc3RcCi06JEdTVC9mYXJzaWdodDIvdHJhbnNtaXR0ZXJzXAotOiRHU1QvbGlibmljZS9nc3RcCi06JEdTVC9nc3QtcnBpY2Ftc3JjL3NyYy8ubGlic1wKLTokR1NUL2dzdC1ydHNwLXNlcnZlci9nc3QvcnRzcC1zaW5rLy5saWJzXAotOiRHU1QvZ3N0LWVkaXRpbmctc2VydmljZXMvcGx1Z2lucy9ubGUvLmxpYnNcCi0ke0dTVF9QTFVHSU5fUEFUSDorOiRHU1RfUExVR0lOX1BBVEh9IgotCi1leHBvcnQgR1NUX1BSRVNFVF9QQVRIPSJcCi0kR1NUL2dzdC1wbHVnaW5zLWdvb2QvZ3N0L2VxdWFsaXplci9cCi06JEdTVC9nc3QtcGx1Z2lucy1nb29kL2dzdC9lcXVhbGl6ZXJcCi06JEdTVC9nc3QtcGx1Z2lucy1nb29kL2V4dC92cHgvXAotOiRHU1QvZ3N0LXBsdWdpbnMtdWdseS9leHQveDI2NFwKLTokR1NUL2dzdC1wbHVnaW5zLXVnbHkvZXh0L2Ftcm5iXAotOiRHU1QvZ3N0LXBsdWdpbnMtYmFkL2dzdC9mcmVldmVyYlwKLTokR1NUL2dzdC1wbHVnaW5zLWJhZC9leHQvdm9hbXJ3YmVuY1wKLSR7R1NUX1BSRVNFVF9QQVRIOis6JEdTVF9QUkVTRVRfUEFUSH0iCi0KLSMgZG9uJ3QgdXNlIGFueSBzeXN0ZW0taW5zdGFsbGVkIHBsdWctaW5zIGF0IGFsbAotZXhwb3J0IEdTVF9QTFVHSU5fU1lTVEVNX1BBVEg9Ci0jIHNldCBvdXIgcmVnaXN0cnkgc29tZXdoZXJlIGVsc2Ugc28gd2UgZG9uJ3QgbWVzcyB1cCB0aGUgcmVnaXN0cnkgZ2VuZXJhdGVkCi0jIGJ5IGFuIGluc3RhbGxlZCBjb3B5Ci1ybSAtZiAkR1NUL2dzdHJlYW1lci9yZWdpc3RyeS54bWwgMj4vZGV2L251bGwKLWV4cG9ydCBHU1RfUkVHSVNUUlk9JEdTVC9nc3RyZWFtZXIvcmVnaXN0cnkuZGF0Ci0jIFBvaW50IGF0IHRoZSB1bmluc3RhbGxlZCBwbHVnaW4gc2Nhbm5lcgotZXhwb3J0IEdTVF9QTFVHSU5fU0NBTk5FUj0kR1NUL2dzdHJlYW1lci9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lcgotIyBQb2ludCBhdCB0aGUgdW5pbnN0YWxsZWQgUFRQIGhlbHBlcgotZXhwb3J0IEdTVF9QVFBfSEVMUEVSPSRHU1QvZ3N0cmVhbWVyL2xpYnMvZ3N0L2hlbHBlcnMvLmxpYnMvZ3N0LXB0cC1oZWxwZXIKLQotIyBvbmNlIE1BTlBBVEggaXMgc2V0LCBpdCBuZWVkcyBhdCBsZWFzdCBhbiAiZW1wdHkiY29tcG9uZW50IHRvIGtlZXAgcHVsbGluZwotIyBpbiB0aGUgc3lzdGVtLWNvbmZpZ3VyZWQgbWFuIHBhdGhzIGZyb20gbWFuLmNvbmZpZwotIyB0aGlzIHN0aWxsIGRvZXNuJ3QgbWFrZSBpdCB3b3JrIGZvciB0aGUgdW5pbnN0YWxsZWQgY2FzZSwgc2luY2UgbWFuIGdvZXMKLSMgbG9vayBmb3IgYSBtYW4gZGlyZWN0b3J5ICJuZWFyYnkiIGluc3RlYWQgb2YgdGhlIGRpcmVjdG9yeSBJJ20gdGVsbGluZyBpdCB0bwotZXhwb3J0IE1BTlBBVEg9JEdTVC9nc3RyZWFtZXIvdG9vbHM6JEdTVF9QUkVGSVgvc2hhcmUvbWFuOiRHU1QvZ3N0LWVkaXRpbmctc2VydmljZXMvZG9jcy9tYW4vOiRNQU5QQVRICi1pZiBbIC16ICIkUFlUSE9OIiBdOyB0aGVuIFBZVEhPTj0icHl0aG9uIjsgZmkKLXB5dGhvbnZlcj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgKHN5cy52ZXJzaW9uWzozXSkiYAotcHl0aG9uc2l0ZXM9YCRQWVRIT04gLWMgImltcG9ydCBzaXRlOyBwcmludCgnOicuam9pbihzaXRlLmdldHNpdGVwYWNrYWdlcygpKSkiYAotZXhwb3J0IFBZVEhPTlBBVEg9IiR7UFlUSE9OUEFUSH06JHtweXRob25zaXRlc306JHtHU1R9L2dzdC1weXRob24iCi0KLSMgY2x1dHRlci1nc3QKLWV4cG9ydCBQS0dfQ09ORklHX1BBVEg9JEdTVC9jbHV0dGVyLWdzdDokUEtHX0NPTkZJR19QQVRICi1leHBvcnQgTERfTElCUkFSWV9QQVRIPSRHU1QvY2x1dHRlci1nc3QvY2x1dHRlci1nc3QvLmxpYnM6JExEX0xJQlJBUllfUEFUSAotZXhwb3J0IERZTERfTElCUkFSWV9QQVRIPSRHU1QvY2x1dHRlci1nc3QvY2x1dHRlci1nc3QvLmxpYnM6JERZTERfTElCUkFSWV9QQVRICi0KLSMgdG90ZW0tcGwtcGFyc2VyCi1leHBvcnQgUEtHX0NPTkZJR19QQVRIPSRHU1QvdG90ZW0tcGwtcGFyc2VyOiRQS0dfQ09ORklHX1BBVEgKLWV4cG9ydCBMRF9MSUJSQVJZX1BBVEg9JEdTVC90b3RlbS1wbC1wYXJzZXIvcGxwYXJzZS8ubGliczokTERfTElCUkFSWV9QQVRICi1leHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg9JEdTVC90b3RlbS1wbC1wYXJzZXIvcGxwYXJzZS8ubGliczokRFlMRF9MSUJSQVJZX1BBVEgKLQotIyB0b3RlbQotZXhwb3J0IFBBVEg9JEdTVC90b3RlbS9zcmM6JFBBVEgKLQotIyBnc3RyZWFtZXItc2hhcnAKLWV4cG9ydCBNT05PX1BBVEg9JEdTVC9nc3RyZWFtZXItc2hhcnAvZ3N0cmVhbWVyLXNoYXJwOiRNT05PX1BBVEgKLWV4cG9ydCBMRF9MSUJSQVJZX1BBVEg9JEdTVC9nc3RyZWFtZXItc2hhcnAvZ3N0cmVhbWVyLXNoYXJwL2dsdWUvLmxpYnM6JExEX0xJQlJBUllfUEFUSAotZXhwb3J0IERZTERfTElCUkFSWV9QQVRIPSRHU1QvZ3N0cmVhbWVyLXNoYXJwL2dzdHJlYW1lci1zaGFycC9nbHVlLy5saWJzOiREWUxEX0xJQlJBUllfUEFUSAotCi0jIGdzdC1kZXZ0b29scy92YWxpZGF0ZQotZXhwb3J0IFBBVEg9JEdTVC9nc3QtZGV2dG9vbHMvdmFsaWRhdGUvdG9vbHM6JFBBVEgKLWV4cG9ydCBQS0dfQ09ORklHX1BBVEg9JEdTVC9nc3QtZGV2dG9vbHMvdmFsaWRhdGUvcGtnY29uZmlnOiRQS0dfQ09ORklHX1BBVEgKLWV4cG9ydCBHU1RfVkFMSURBVEVfU0NFTkFSSU9TX1BBVEg9JEdTVC9nc3QtZGV2dG9vbHMvdmFsaWRhdGUvZGF0YS9zY2VuYXJpb3M6JEdTVF9WQUxJREFURV9TQ0VOQVJJT1NfUEFUSAotZXhwb3J0IEdTVF9WQUxJREFURV9BUFBTX0RJUj0kR1NUX1ZBTElEQVRFX0FQUFNfRElSOiRHU1QvZ3N0LWVkaXRpbmctc2VydmljZXMvdGVzdHMvdmFsaWRhdGUvCi1leHBvcnQgR1NUX1ZBTElEQVRFX1BMVUdJTl9QQVRIPSRHU1RfVkFMSURBVEVfUExVR0lOX1BBVEg6JEdTVC9nc3QtZGV2dG9vbHMvdmFsaWRhdGUvcGx1Z2lucy8KLQotaWYgWyAtZCAiJEdTVC9nc3QtbGliYXYiIC1hIC1kICIkR1NUL2dzdC1mZm1wZWciIF07IHRoZW4KLSAgZWNobwotICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0gIGVjaG8gIiBZb3UgaGF2ZSBib3RoIGFuIHVuaW5zdGFsbGVkIGdzdC1mZm1wZWcgY2hlY2tvdXQgYW5kIGEgZ3N0LWxpYmF2IgotICBlY2hvICIgY2hlY2tvdXQuIFlvdSBuZWVkIHRvIHJlbW92ZSBvbmUgb2YgdGhvc2UuIFlvdSBzaG91bGQgcmVtb3ZlIgotICBlY2hvCi0gIGVjaG8gIiAgICRHU1QvZ3N0LWZmbXBlZyIKLSAgZWNobwotICBlY2hvICIgc2luY2UgZ3N0LWxpYmF2IHJlcGxhY2VzIGdzdC1mZm1wZWcuIgotICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0gIGVjaG8KLWZpCi0KLSMgaWYgd2UgZ290IGEgY29tbWFuZCwgcnVuIGl0LCBlbHNlIHN0YXJ0IGEgc2hlbGwKLWlmIHRlc3QgISAteiAiJDEiOwotdGhlbgotICAkQAotICBleGl0ICQ/Ci1maQotCi0jIHNldCB1cCBwcm9tcHQgdG8gaGVscCB1cyByZW1lbWJlciB3ZSdyZSBpbiBhIHN1YnNoZWxsLCBjZCB0bwotIyB0aGUgZ3N0cmVhbWVyIGJhc2UgZGlyIGFuZCBzdGFydCAkU0hFTEwKLWNkICRHU1QKLXNoZWxsPSRTSEVMTAotaWYgdGVzdCAieCRTSEVMTCIgPSAieC9iaW4vYmFzaCIKLXRoZW4KLSAgIyBkZWJpYW4vdWJ1bnR1IHJlc2V0cyBvdXIgUFMxLiAgYmFzdGFyZHMuCi0gIHNoZWxsPSIkU0hFTEwgLS1ub3Byb2ZpbGUiCi1maQotUFMxPSJbZ3N0LSRWRVJTSU9OXSAkUFMxIiAkc2hlbGwKLQpkaWZmIC0tZ2l0IGEvc3RhbXAuaC5pbiBiL3N0YW1wLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ODhmNzAuLjAwMDAwMDAKLS0tIGEvc3RhbXAuaC5pbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRpbWVzdGFtcApkaWZmIC0tZ2l0IGEvdGVzdC1kcml2ZXIgYi90ZXN0LWRyaXZlcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGU1NzViMC4uMDAwMDAwMAotLS0gYS90ZXN0LWRyaXZlcgorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0jISAvYmluL3NoCi0jIHRlc3QtZHJpdmVyIC0gYmFzaWMgdGVzdHN1aXRlIGRyaXZlciBzY3JpcHQuCi0KLXNjcmlwdHZlcnNpb249MjAxMy0wNy0xMy4yMjsgIyBVVEMKLQotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0KLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi0jIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0Ci0jIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KLSMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCi0KLSMgTWFrZSB1bmNvbmRpdGlvbmFsIGV4cGFuc2lvbiBvZiB1bmRlZmluZWQgdmFyaWFibGVzIGFuIGVycm9yLiAgVGhpcwotIyBoZWxwcyBhIGxvdCBpbiBwcmV2ZW50aW5nIHR5cG8tcmVsYXRlZCBidWdzLgotc2V0IC11Ci0KLXVzYWdlX2Vycm9yICgpCi17Ci0gIGVjaG8gIiQwOiAkKiIgPiYyCi0gIHByaW50X3VzYWdlID4mMgotICBleGl0IDIKLX0KLQotcHJpbnRfdXNhZ2UgKCkKLXsKLSAgY2F0IDw8RU5ECi1Vc2FnZToKLSAgdGVzdC1kcml2ZXIgLS10ZXN0LW5hbWU9TkFNRSAtLWxvZy1maWxlPVBBVEggLS10cnMtZmlsZT1QQVRICi0gICAgICAgICAgICAgIFstLWV4cGVjdC1mYWlsdXJlPXt5ZXN8bm99XSBbLS1jb2xvci10ZXN0cz17eWVzfG5vfV0KLSAgICAgICAgICAgICAgWy0tZW5hYmxlLWhhcmQtZXJyb3JzPXt5ZXN8bm99XSBbLS1dCi0gICAgICAgICAgICAgIFRFU1QtU0NSSVBUIFtURVNULVNDUklQVC1BUkdVTUVOVFNdCi1UaGUgJy0tdGVzdC1uYW1lJywgJy0tbG9nLWZpbGUnIGFuZCAnLS10cnMtZmlsZScgb3B0aW9ucyBhcmUgbWFuZGF0b3J5LgotRU5ECi19Ci0KLXRlc3RfbmFtZT0gIyBVc2VkIGZvciByZXBvcnRpbmcuCi1sb2dfZmlsZT0gICMgV2hlcmUgdG8gc2F2ZSB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0IHNjcmlwdC4KLXRyc19maWxlPSAgIyBXaGVyZSB0byBzYXZlIHRoZSBtZXRhZGF0YSBvZiB0aGUgdGVzdCBydW4uCi1leHBlY3RfZmFpbHVyZT1ubwotY29sb3JfdGVzdHM9bm8KLWVuYWJsZV9oYXJkX2Vycm9ycz15ZXMKLXdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gIGNhc2UgJDEgaW4KLSAgLS1oZWxwKSBwcmludF91c2FnZTsgZXhpdCAkPzs7Ci0gIC0tdmVyc2lvbikgZWNobyAidGVzdC1kcml2ZXIgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKLSAgLS10ZXN0LW5hbWUpIHRlc3RfbmFtZT0kMjsgc2hpZnQ7OwotICAtLWxvZy1maWxlKSBsb2dfZmlsZT0kMjsgc2hpZnQ7OwotICAtLXRycy1maWxlKSB0cnNfZmlsZT0kMjsgc2hpZnQ7OwotICAtLWNvbG9yLXRlc3RzKSBjb2xvcl90ZXN0cz0kMjsgc2hpZnQ7OwotICAtLWV4cGVjdC1mYWlsdXJlKSBleHBlY3RfZmFpbHVyZT0kMjsgc2hpZnQ7OwotICAtLWVuYWJsZS1oYXJkLWVycm9ycykgZW5hYmxlX2hhcmRfZXJyb3JzPSQyOyBzaGlmdDs7Ci0gIC0tKSBzaGlmdDsgYnJlYWs7OwotICAtKikgdXNhZ2VfZXJyb3IgImludmFsaWQgb3B0aW9uOiAnJDEnIjs7Ci0gICAqKSBicmVhazs7Ci0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotbWlzc2luZ19vcHRzPQotdGVzdCB4IiR0ZXN0X25hbWUiID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS10ZXN0LW5hbWUiCi10ZXN0IHgiJGxvZ19maWxlIiAgPSB4ICYmIG1pc3Npbmdfb3B0cz0iJG1pc3Npbmdfb3B0cyAtLWxvZy1maWxlIgotdGVzdCB4IiR0cnNfZmlsZSIgID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS10cnMtZmlsZSIKLWlmIHRlc3QgeCIkbWlzc2luZ19vcHRzIiAhPSB4OyB0aGVuCi0gIHVzYWdlX2Vycm9yICJ0aGUgZm9sbG93aW5nIG1hbmRhdG9yeSBvcHRpb25zIGFyZSBtaXNzaW5nOiRtaXNzaW5nX29wdHMiCi1maQotCi1pZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCi0gIHVzYWdlX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IgotZmkKLQotaWYgdGVzdCAkY29sb3JfdGVzdHMgPSB5ZXM7IHRoZW4KLSAgIyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoICdsaWIvYW0vY2hlY2suYW06JChhbV9fdHR5X2NvbG9ycyknLgotICByZWQ9JxtbMDszMW0nICMgUmVkLgotICBncm49JxtbMDszMm0nICMgR3JlZW4uCi0gIGxnbj0nG1sxOzMybScgIyBMaWdodCBncmVlbi4KLSAgYmx1PScbWzE7MzRtJyAjIEJsdWUuCi0gIG1nbj0nG1swOzM1bScgIyBNYWdlbnRhLgotICBzdGQ9JxtbbScgICAgICMgTm8gY29sb3IuCi1lbHNlCi0gIHJlZD0gZ3JuPSBsZ249IGJsdT0gbWduPSBzdGQ9Ci1maQotCi1kb19leGl0PSdybSAtZiAkbG9nX2ZpbGUgJHRyc19maWxlOyAoZXhpdCAkc3QpOyBleGl0ICRzdCcKLXRyYXAgInN0PTEyOTsgJGRvX2V4aXQiIDEKLXRyYXAgInN0PTEzMDsgJGRvX2V4aXQiIDIKLXRyYXAgInN0PTE0MTsgJGRvX2V4aXQiIDEzCi10cmFwICJzdD0xNDM7ICRkb19leGl0IiAxNQotCi0jIFRlc3Qgc2NyaXB0IGlzIHJ1biBoZXJlLgotIiRAIiA+JGxvZ19maWxlIDI+JjEKLWVzdGF0dXM9JD8KLQotaWYgdGVzdCAkZW5hYmxlX2hhcmRfZXJyb3JzID0gbm8gJiYgdGVzdCAkZXN0YXR1cyAtZXEgOTk7IHRoZW4KLSAgdHdlYWtlZF9lc3RhdHVzPTEKLWVsc2UKLSAgdHdlYWtlZF9lc3RhdHVzPSRlc3RhdHVzCi1maQotCi1jYXNlICR0d2Vha2VkX2VzdGF0dXM6JGV4cGVjdF9mYWlsdXJlIGluCi0gIDA6eWVzKSBjb2w9JHJlZCByZXM9WFBBU1MgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKLSAgMDoqKSAgIGNvbD0kZ3JuIHJlcz1QQVNTICByZWNoZWNrPW5vICBnY29weT1ubzs7Ci0gIDc3OiopICBjb2w9JGJsdSByZXM9U0tJUCAgcmVjaGVjaz1ubyAgZ2NvcHk9eWVzOzsKLSAgOTk6KikgIGNvbD0kbWduIHJlcz1FUlJPUiByZWNoZWNrPXllcyBnY29weT15ZXM7OwotICAqOnllcykgY29sPSRsZ24gcmVzPVhGQUlMIHJlY2hlY2s9bm8gIGdjb3B5PXllczs7Ci0gICo6KikgICBjb2w9JHJlZCByZXM9RkFJTCAgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKLWVzYWMKLQotIyBSZXBvcnQgdGhlIHRlc3Qgb3V0Y29tZSBhbmQgZXhpdCBzdGF0dXMgaW4gdGhlIGxvZ3MsIHNvIHRoYXQgb25lIGNhbgotIyBrbm93IHdoZXRoZXIgdGhlIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCBzaW1wbHkgYnkgbG9va2luZyBhdCB0aGUgJy5sb2cnCi0jIGZpbGUsIHdpdGhvdXQgdGhlIG5lZWQgb2YgYWxzbyBwZWFraW5nIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgJy50cnMnCi0jIGZpbGUgKGF1dG9tYWtlIGJ1ZyMxMTgxNCkuCi1lY2hvICIkcmVzICR0ZXN0X25hbWUgKGV4aXQgc3RhdHVzOiAkZXN0YXR1cykiID4+JGxvZ19maWxlCi0KLSMgUmVwb3J0IG91dGNvbWUgdG8gY29uc29sZS4KLWVjaG8gIiR7Y29sfSR7cmVzfSR7c3RkfTogJHRlc3RfbmFtZSIKLQotIyBSZWdpc3RlciB0aGUgdGVzdCByZXN1bHQsIGFuZCBvdGhlciByZWxldmFudCBtZXRhZGF0YS4KLWVjaG8gIjp0ZXN0LXJlc3VsdDogJHJlcyIgPiAkdHJzX2ZpbGUKLWVjaG8gIjpnbG9iYWwtdGVzdC1yZXN1bHQ6ICRyZXMiID4+ICR0cnNfZmlsZQotZWNobyAiOnJlY2hlY2s6ICRyZWNoZWNrIiA+PiAkdHJzX2ZpbGUKLWVjaG8gIjpjb3B5LWluLWdsb2JhbC1sb2c6ICRnY29weSIgPj4gJHRyc19maWxlCi0KLSMgTG9jYWwgVmFyaWFibGVzOgotIyBtb2RlOiBzaGVsbC1zY3JpcHQKLSMgc2gtaW5kZW50YXRpb246IDIKLSMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKLSMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgotIyBFbmQ6CmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmUyOTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotRVhUUkFfRElTVCA9IFJFQURNRQotCi0jIEJ1aWxkIG1pc2MgdW5sZXNzIGJvdGggLS1kaXNhYmxlLWV4YW1wbGVzIGFuZCAtLWRpc2FibGUtYmVuY2htYXJrcyB3ZXJlIHBhc3NlZAotCi1pZiBCVUlMRF9CRU5DSE1BUktTCi1TVUJESVJTX0JFTkNITUFSS1MgPSBiZW5jaG1hcmtzCi1TVUJESVJTX01JU0MgPSBtaXNjCi1lbHNlCi1TVUJESVJTX0JFTkNITUFSS1MgPQotZW5kaWYKLQotaWYgQlVJTERfVEVTVFMKLSMjIFNVQkRJUlNfVEVTVFMgPSB0ZXN0cyB0ZXN0c3VpdGUKLSMjIEZJWE1FOiB3cml0ZSB0ZXN0cyBmcm9tIHNjcmF0Y2gKLVNVQkRJUlNfVEVTVFMgPQotaWYgSEFWRV9DSEVDSwotU1VCRElSU19DSEVDSyA9IGNoZWNrCi1lbHNlCi1TVUJESVJTX0NIRUNLID0KLWVuZGlmCi1lbHNlCi1TVUJESVJTX1RFU1RTID0KLVNVQkRJUlNfQ0hFQ0sgPQotZW5kaWYKLQotaWYgQlVJTERfRVhBTVBMRVMKLVNVQkRJUlNfRVhBTVBMRVMgPSBleGFtcGxlcwotU1VCRElSU19NSVNDID0gbWlzYwotZWxzZQotU1VCRElSU19FWEFNUExFUyA9Ci1lbmRpZgotCi1TVUJESVJTID0gXAotCSQoU1VCRElSU19CRU5DSE1BUktTKSBcCi0JJChTVUJESVJTX0NIRUNLKSBcCi0JJChTVUJESVJTX01JU0MpIFwKLQkkKFNVQkRJUlNfVEVTVFMpIFwKLQkkKFNVQkRJUlNfRVhBTVBMRVMpCi0KLSMgVGhlc2UgYXJlIGFsbCB0aGUgcG9zc2libGUgc3ViZGlycwotRElTVF9TVUJESVJTID0gXAotCWJlbmNobWFya3MgXAotCWNoZWNrIFwKLQlleGFtcGxlcyBcCi0JbWlzYwpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuaW4gYi90ZXN0cy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUwNDQxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDg1MiArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IHRlc3RzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAotCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKLSAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAotICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCi0gICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKLSAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKLQlkaXN0ZGlyCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1hbV9fcmVsYXRpdml6ZSA9IFwKLSAgZGlyMD1gcHdkYDsgXAotICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKLSAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKLSAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKLSAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCi0gIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKLSAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCi0gICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAotICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKLSAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCi0gICAgICBlbHNlIFwKLSAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCi0gICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gICAgICAgIGVsc2UgXAotICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKLSAgICAgICAgZmk7IFwKLSAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKLSAgICAgIGZpOyBcCi0gICAgZmk7IFwKLSAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgZG9uZTsgXAotICByZWxkaXI9IiQkZGlyMiIKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1FWFRSQV9ESVNUID0gUkVBRE1FCi1AQlVJTERfQkVOQ0hNQVJLU19GQUxTRUBTVUJESVJTX0JFTkNITUFSS1MgPSAKLQotIyBCdWlsZCBtaXNjIHVubGVzcyBib3RoIC0tZGlzYWJsZS1leGFtcGxlcyBhbmQgLS1kaXNhYmxlLWJlbmNobWFya3Mgd2VyZSBwYXNzZWQKLUBCVUlMRF9CRU5DSE1BUktTX1RSVUVAU1VCRElSU19CRU5DSE1BUktTID0gYmVuY2htYXJrcwotQEJVSUxEX0JFTkNITUFSS1NfVFJVRUBTVUJESVJTX01JU0MgPSBtaXNjCi1AQlVJTERfRVhBTVBMRVNfVFJVRUBTVUJESVJTX01JU0MgPSBtaXNjCi1AQlVJTERfVEVTVFNfRkFMU0VAU1VCRElSU19URVNUUyA9IAotQEJVSUxEX1RFU1RTX1RSVUVAU1VCRElSU19URVNUUyA9IAotQEJVSUxEX1RFU1RTX0ZBTFNFQFNVQkRJUlNfQ0hFQ0sgPSAKLUBCVUlMRF9URVNUU19UUlVFQEBIQVZFX0NIRUNLX0ZBTFNFQFNVQkRJUlNfQ0hFQ0sgPSAKLUBCVUlMRF9URVNUU19UUlVFQEBIQVZFX0NIRUNLX1RSVUVAU1VCRElSU19DSEVDSyA9IGNoZWNrCi1AQlVJTERfRVhBTVBMRVNfRkFMU0VAU1VCRElSU19FWEFNUExFUyA9IAotQEJVSUxEX0VYQU1QTEVTX1RSVUVAU1VCRElSU19FWEFNUExFUyA9IGV4YW1wbGVzCi1TVUJESVJTID0gXAotCSQoU1VCRElSU19CRU5DSE1BUktTKSBcCi0JJChTVUJESVJTX0NIRUNLKSBcCi0JJChTVUJESVJTX01JU0MpIFwKLQkkKFNVQkRJUlNfVEVTVFMpIFwKLQkkKFNVQkRJUlNfRVhBTVBMRVMpCi0KLQotIyBUaGVzZSBhcmUgYWxsIHRoZSBwb3NzaWJsZSBzdWJkaXJzCi1ESVNUX1NVQkRJUlMgPSBcCi0JYmVuY2htYXJrcyBcCi0JY2hlY2sgXAotCWV4YW1wbGVzIFwKLQltaXNjCi0KLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKLQlAZmFpbD07IFwKLQlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAotCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCi0JZWxzZSBcCi0JICBmYWlsY29tPSdleGl0IDEnOyBcCi0JZmk7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1yZWN1cnNpdmUKLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1yZWN1cnNpdmUKLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKLQkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKLQkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAotCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKLQkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAotCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCi0JCWFtX19za2lwX21vZGVfZml4PTogXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktcmVjdXJzaXZlCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1yZWN1cnNpdmUKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1yZWN1cnNpdmUKLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBcCi0JY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAotCXBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9SRUFETUUgYi90ZXN0cy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkYWQ0NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcmVncmVzc2lvbiB0ZXN0cywgZnVuY3Rpb25hbGl0eSB0ZXN0cywgZXhhbXBsZXMsCi1iZW5jaG1hcmtzLCAuLi4KLQotYmVuY2htYXJrcy8KLSAgIGJlbmNobWFya3MgdG8gcHJvZmlsZSBwaWVjZXMgb2YgR1N0cmVhbWVyCi1jaGVjay8KLSAgIHVuaXQgdGVzdHMgdXNpbmcgdGhlIGNoZWNrIGxpYnJhcnksIG5vbi1pbnRlcmFjdGl2ZQotZXhhbXBsZXMvCi0gICBzbWFsbCBleGFtcGxlcyBkZW1vbnN0cmF0aW5nIHRoZSB1c2Ugb2YgdmFyaW91cyBmZWF0dXJlcwotbWlzYy8KLSAgIHByb3RvdHlwZXMsIHJhbmRvbSBiaXRzLCAuLi4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbSBiL3Rlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNzY5ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvYmVuY2htYXJrcy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLWlmICFHU1RfRElTQUJMRV9HU1RfREVCVUcKLVRSQUNFUl9CRU5DSCA9IHRyYWNlcnNlcmlhbGl6ZQotZWxzZQotVFJBQ0VSX0JFTkNIID0KLWVuZGlmCi0KLW5vaW5zdF9QUk9HUkFNUyA9IFwKLSAgICAgICAgY2FwcyBcCi0gICAgICAgIGNhcHNuZWdvIFwKLSAgICAgICAgY29tcGxleGl0eSBcCi0gICAgICAgIGNvbnRyb2xsZXIgXAotICAgICAgICBpbml0IFwKLSAgICAgICAgbWFzcy1lbGVtZW50cyBcCi0gICAgICAgIGdzdHBvbGxzdHJlc3MgXAotICAgICAgICBnc3Rwb29sc3RyZXNzIFwKLSAgICAgICAgZ3N0Y2xvY2tzdHJlc3MJXAotICAgICAgICBnc3RidWZmZXJzdHJlc3MgXAotICAgICAgICAkKFRSQUNFUl9CRU5DSCkKLQotTERBREQgPSAkKEdTVF9PQkpfTElCUykKLUFNX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi0KLWNvbnRyb2xsZXJfQ0ZMQUdTICA9ICQoR1NUX09CSl9DRkxBR1MpIC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMKLWNvbnRyb2xsZXJfTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhICQoTERBREQpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuaW4gYi90ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDZhOGFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MTggKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IGNhcHMkKEVYRUVYVCkgY2Fwc25lZ28kKEVYRUVYVCkgY29tcGxleGl0eSQoRVhFRVhUKSBcCi0JY29udHJvbGxlciQoRVhFRVhUKSBpbml0JChFWEVFWFQpIG1hc3MtZWxlbWVudHMkKEVYRUVYVCkgXAotCWdzdHBvbGxzdHJlc3MkKEVYRUVYVCkgZ3N0cG9vbHN0cmVzcyQoRVhFRVhUKSBcCi0JZ3N0Y2xvY2tzdHJlc3MkKEVYRUVYVCkgZ3N0YnVmZmVyc3RyZXNzJChFWEVFWFQpIFwKLQkkKGFtX19FWEVFWFRfMSkKLXN1YmRpciA9IHRlc3RzL2JlbmNobWFya3MKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUBHU1RfRElTQUJMRV9HU1RfREVCVUdfRkFMU0VAYW1fX0VYRUVYVF8xID0gdHJhY2Vyc2VyaWFsaXplJChFWEVFWFQpCi1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotY2Fwc19TT1VSQ0VTID0gY2Fwcy5jCi1jYXBzX09CSkVDVFMgPSBjYXBzLiQoT0JKRVhUKQotY2Fwc19MREFERCA9ICQoTERBREQpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotY2Fwc19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWNhcHNuZWdvX1NPVVJDRVMgPSBjYXBzbmVnby5jCi1jYXBzbmVnb19PQkpFQ1RTID0gY2Fwc25lZ28uJChPQkpFWFQpCi1jYXBzbmVnb19MREFERCA9ICQoTERBREQpCi1jYXBzbmVnb19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWNvbXBsZXhpdHlfU09VUkNFUyA9IGNvbXBsZXhpdHkuYwotY29tcGxleGl0eV9PQkpFQ1RTID0gY29tcGxleGl0eS4kKE9CSkVYVCkKLWNvbXBsZXhpdHlfTERBREQgPSAkKExEQUREKQotY29tcGxleGl0eV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWNvbnRyb2xsZXJfU09VUkNFUyA9IGNvbnRyb2xsZXIuYwotY29udHJvbGxlcl9PQkpFQ1RTID0gY29udHJvbGxlci1jb250cm9sbGVyLiQoT0JKRVhUKQotYW1fX0RFUEVOREVOQ0lFU18yID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1jb250cm9sbGVyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotY29udHJvbGxlcl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChjb250cm9sbGVyX0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLWdzdGJ1ZmZlcnN0cmVzc19TT1VSQ0VTID0gZ3N0YnVmZmVyc3RyZXNzLmMKLWdzdGJ1ZmZlcnN0cmVzc19PQkpFQ1RTID0gZ3N0YnVmZmVyc3RyZXNzLiQoT0JKRVhUKQotZ3N0YnVmZmVyc3RyZXNzX0xEQUREID0gJChMREFERCkKLWdzdGJ1ZmZlcnN0cmVzc19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdGNsb2Nrc3RyZXNzX1NPVVJDRVMgPSBnc3RjbG9ja3N0cmVzcy5jCi1nc3RjbG9ja3N0cmVzc19PQkpFQ1RTID0gZ3N0Y2xvY2tzdHJlc3MuJChPQkpFWFQpCi1nc3RjbG9ja3N0cmVzc19MREFERCA9ICQoTERBREQpCi1nc3RjbG9ja3N0cmVzc19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdHBvbGxzdHJlc3NfU09VUkNFUyA9IGdzdHBvbGxzdHJlc3MuYwotZ3N0cG9sbHN0cmVzc19PQkpFQ1RTID0gZ3N0cG9sbHN0cmVzcy4kKE9CSkVYVCkKLWdzdHBvbGxzdHJlc3NfTERBREQgPSAkKExEQUREKQotZ3N0cG9sbHN0cmVzc19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdHBvb2xzdHJlc3NfU09VUkNFUyA9IGdzdHBvb2xzdHJlc3MuYwotZ3N0cG9vbHN0cmVzc19PQkpFQ1RTID0gZ3N0cG9vbHN0cmVzcy4kKE9CSkVYVCkKLWdzdHBvb2xzdHJlc3NfTERBREQgPSAkKExEQUREKQotZ3N0cG9vbHN0cmVzc19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWluaXRfU09VUkNFUyA9IGluaXQuYwotaW5pdF9PQkpFQ1RTID0gaW5pdC4kKE9CSkVYVCkKLWluaXRfTERBREQgPSAkKExEQUREKQotaW5pdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLW1hc3NfZWxlbWVudHNfU09VUkNFUyA9IG1hc3MtZWxlbWVudHMuYwotbWFzc19lbGVtZW50c19PQkpFQ1RTID0gbWFzcy1lbGVtZW50cy4kKE9CSkVYVCkKLW1hc3NfZWxlbWVudHNfTERBREQgPSAkKExEQUREKQotbWFzc19lbGVtZW50c19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXRyYWNlcnNlcmlhbGl6ZV9TT1VSQ0VTID0gdHJhY2Vyc2VyaWFsaXplLmMKLXRyYWNlcnNlcmlhbGl6ZV9PQkpFQ1RTID0gdHJhY2Vyc2VyaWFsaXplLiQoT0JKRVhUKQotdHJhY2Vyc2VyaWFsaXplX0xEQUREID0gJChMREFERCkKLXRyYWNlcnNlcmlhbGl6ZV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSBjYXBzLmMgY2Fwc25lZ28uYyBjb21wbGV4aXR5LmMgY29udHJvbGxlci5jIFwKLQlnc3RidWZmZXJzdHJlc3MuYyBnc3RjbG9ja3N0cmVzcy5jIGdzdHBvbGxzdHJlc3MuYyBcCi0JZ3N0cG9vbHN0cmVzcy5jIGluaXQuYyBtYXNzLWVsZW1lbnRzLmMgdHJhY2Vyc2VyaWFsaXplLmMKLURJU1RfU09VUkNFUyA9IGNhcHMuYyBjYXBzbmVnby5jIGNvbXBsZXhpdHkuYyBjb250cm9sbGVyLmMgXAotCWdzdGJ1ZmZlcnN0cmVzcy5jIGdzdGNsb2Nrc3RyZXNzLmMgZ3N0cG9sbHN0cmVzcy5jIFwKLQlnc3Rwb29sc3RyZXNzLmMgaW5pdC5jIG1hc3MtZWxlbWVudHMuYyB0cmFjZXJzZXJpYWxpemUuYwotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1AR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0ZBTFNFQFRSQUNFUl9CRU5DSCA9IHRyYWNlcnNlcmlhbGl6ZQotQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19UUlVFQFRSQUNFUl9CRU5DSCA9IAotTERBREQgPSAkKEdTVF9PQkpfTElCUykKLUFNX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1jb250cm9sbGVyX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpIC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMKLWNvbnRyb2xsZXJfTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhICQoTERBREQpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9iZW5jaG1hcmtzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2JlbmNobWFya3MvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLW5vaW5zdFBST0dSQU1TOgotCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLQotY2FwcyQoRVhFRVhUKTogJChjYXBzX09CSkVDVFMpICQoY2Fwc19ERVBFTkRFTkNJRVMpICQoRVhUUkFfY2Fwc19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBjYXBzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGNhcHNfT0JKRUNUUykgJChjYXBzX0xEQUREKSAkKExJQlMpCi0KLWNhcHNuZWdvJChFWEVFWFQpOiAkKGNhcHNuZWdvX09CSkVDVFMpICQoY2Fwc25lZ29fREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NhcHNuZWdvX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGNhcHNuZWdvJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGNhcHNuZWdvX09CSkVDVFMpICQoY2Fwc25lZ29fTERBREQpICQoTElCUykKLQotY29tcGxleGl0eSQoRVhFRVhUKTogJChjb21wbGV4aXR5X09CSkVDVFMpICQoY29tcGxleGl0eV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfY29tcGxleGl0eV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBjb21wbGV4aXR5JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGNvbXBsZXhpdHlfT0JKRUNUUykgJChjb21wbGV4aXR5X0xEQUREKSAkKExJQlMpCi0KLWNvbnRyb2xsZXIkKEVYRUVYVCk6ICQoY29udHJvbGxlcl9PQkpFQ1RTKSAkKGNvbnRyb2xsZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NvbnRyb2xsZXJfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgY29udHJvbGxlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoY29udHJvbGxlcl9MSU5LKSAkKGNvbnRyb2xsZXJfT0JKRUNUUykgJChjb250cm9sbGVyX0xEQUREKSAkKExJQlMpCi0KLWdzdGJ1ZmZlcnN0cmVzcyQoRVhFRVhUKTogJChnc3RidWZmZXJzdHJlc3NfT0JKRUNUUykgJChnc3RidWZmZXJzdHJlc3NfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdGJ1ZmZlcnN0cmVzc19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBnc3RidWZmZXJzdHJlc3MkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0YnVmZmVyc3RyZXNzX09CSkVDVFMpICQoZ3N0YnVmZmVyc3RyZXNzX0xEQUREKSAkKExJQlMpCi0KLWdzdGNsb2Nrc3RyZXNzJChFWEVFWFQpOiAkKGdzdGNsb2Nrc3RyZXNzX09CSkVDVFMpICQoZ3N0Y2xvY2tzdHJlc3NfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdGNsb2Nrc3RyZXNzX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGdzdGNsb2Nrc3RyZXNzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdGNsb2Nrc3RyZXNzX09CSkVDVFMpICQoZ3N0Y2xvY2tzdHJlc3NfTERBREQpICQoTElCUykKLQotZ3N0cG9sbHN0cmVzcyQoRVhFRVhUKTogJChnc3Rwb2xsc3RyZXNzX09CSkVDVFMpICQoZ3N0cG9sbHN0cmVzc19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0cG9sbHN0cmVzc19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBnc3Rwb2xsc3RyZXNzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdHBvbGxzdHJlc3NfT0JKRUNUUykgJChnc3Rwb2xsc3RyZXNzX0xEQUREKSAkKExJQlMpCi0KLWdzdHBvb2xzdHJlc3MkKEVYRUVYVCk6ICQoZ3N0cG9vbHN0cmVzc19PQkpFQ1RTKSAkKGdzdHBvb2xzdHJlc3NfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdHBvb2xzdHJlc3NfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZ3N0cG9vbHN0cmVzcyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3Rwb29sc3RyZXNzX09CSkVDVFMpICQoZ3N0cG9vbHN0cmVzc19MREFERCkgJChMSUJTKQotCi1pbml0JChFWEVFWFQpOiAkKGluaXRfT0JKRUNUUykgJChpbml0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9pbml0X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGluaXQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoaW5pdF9PQkpFQ1RTKSAkKGluaXRfTERBREQpICQoTElCUykKLQotbWFzcy1lbGVtZW50cyQoRVhFRVhUKTogJChtYXNzX2VsZW1lbnRzX09CSkVDVFMpICQobWFzc19lbGVtZW50c19ERVBFTkRFTkNJRVMpICQoRVhUUkFfbWFzc19lbGVtZW50c19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBtYXNzLWVsZW1lbnRzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKG1hc3NfZWxlbWVudHNfT0JKRUNUUykgJChtYXNzX2VsZW1lbnRzX0xEQUREKSAkKExJQlMpCi0KLXRyYWNlcnNlcmlhbGl6ZSQoRVhFRVhUKTogJCh0cmFjZXJzZXJpYWxpemVfT0JKRUNUUykgJCh0cmFjZXJzZXJpYWxpemVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3RyYWNlcnNlcmlhbGl6ZV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiB0cmFjZXJzZXJpYWxpemUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQodHJhY2Vyc2VyaWFsaXplX09CSkVDVFMpICQodHJhY2Vyc2VyaWFsaXplX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYXBzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYXBzbmVnby5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29tcGxleGl0eS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29udHJvbGxlci1jb250cm9sbGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RidWZmZXJzdHJlc3MuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dzdGNsb2Nrc3RyZXNzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3Rwb2xsc3RyZXNzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3Rwb29sc3RyZXNzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbml0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9tYXNzLWVsZW1lbnRzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90cmFjZXJzZXJpYWxpemUuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotY29udHJvbGxlci1jb250cm9sbGVyLm86IGNvbnRyb2xsZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNvbnRyb2xsZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNvbnRyb2xsZXItY29udHJvbGxlci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9jb250cm9sbGVyLWNvbnRyb2xsZXIuVHBvIC1jIC1vIGNvbnRyb2xsZXItY29udHJvbGxlci5vIGB0ZXN0IC1mICdjb250cm9sbGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbnRyb2xsZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY29udHJvbGxlci1jb250cm9sbGVyLlRwbyAkKERFUERJUikvY29udHJvbGxlci1jb250cm9sbGVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY29udHJvbGxlci5jJyBvYmplY3Q9J2NvbnRyb2xsZXItY29udHJvbGxlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb250cm9sbGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNvbnRyb2xsZXItY29udHJvbGxlci5vIGB0ZXN0IC1mICdjb250cm9sbGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbnRyb2xsZXIuYwotCi1jb250cm9sbGVyLWNvbnRyb2xsZXIub2JqOiBjb250cm9sbGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb250cm9sbGVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjb250cm9sbGVyLWNvbnRyb2xsZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jb250cm9sbGVyLWNvbnRyb2xsZXIuVHBvIC1jIC1vIGNvbnRyb2xsZXItY29udHJvbGxlci5vYmogYGlmIHRlc3QgLWYgJ2NvbnRyb2xsZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjb250cm9sbGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NvbnRyb2xsZXIuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY29udHJvbGxlci1jb250cm9sbGVyLlRwbyAkKERFUERJUikvY29udHJvbGxlci1jb250cm9sbGVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY29udHJvbGxlci5jJyBvYmplY3Q9J2NvbnRyb2xsZXItY29udHJvbGxlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNvbnRyb2xsZXJfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY29udHJvbGxlci1jb250cm9sbGVyLm9iaiBgaWYgdGVzdCAtZiAnY29udHJvbGxlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NvbnRyb2xsZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY29udHJvbGxlci5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvY2Fwcy5jIGIvdGVzdHMvYmVuY2htYXJrcy9jYXBzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YzIxMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvYmVuY2htYXJrcy9jYXBzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0gKgotICogY2Fwcy5jOiBiZW5jaG1hcmsgZm9yIGNhcHMgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0KLSNkZWZpbmUgTlVNX0NBUFMgMTAwMDAKLQotI2RlZmluZSBBVURJT19GT1JNQVRTX0FMTCAiIHsgUzgsIFU4LCAiIFwKLSAgICAiUzE2TEUsIFMxNkJFLCBVMTZMRSwgVTE2QkUsICIgXAotICAgICJTMjRfMzJMRSwgUzI0XzMyQkUsIFUyNF8zMkxFLCBVMjRfMzJCRSwgIiBcCi0gICAgIlMzMkxFLCBTMzJCRSwgVTMyTEUsIFUzMkJFLCAiIFwKLSAgICAiUzI0TEUsIFMyNEJFLCBVMjRMRSwgVTI0QkUsICIgXAotICAgICJTMjBMRSwgUzIwQkUsIFUyMExFLCBVMjBCRSwgIiBcCi0gICAgIlMxOExFLCBTMThCRSwgVTE4TEUsIFUxOEJFLCAiIFwKLSAgICAiRjMyTEUsIEYzMkJFLCBGNjRMRSwgRjY0QkUgfSIKLQotI2RlZmluZSBHU1RfQVVESU9fSU5UX1BBRF9URU1QTEFURV9DQVBTIFwKLSAgImF1ZGlvL3gtcmF3LCAiIFwKLSAgImZvcm1hdCA9IChzdHJpbmcpICIgQVVESU9fRk9STUFUU19BTEwgIiwgIiBcCi0gICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiBcCi0gICJjaGFubmVscyA9IChpbnQpIFsgMSwgTUFYIF0iCi0KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKLXsKLSAgR3N0Q2FwcyAqKmNhcHNlczsKLSAgR3N0Q2FwcyAqcHJvdG9jYXBzOwotICBHc3RDbG9ja1RpbWUgc3RhcnQsIGVuZDsKLSAgZ2ludCBpOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIHByb3RvY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChHU1RfQVVESU9fSU5UX1BBRF9URU1QTEFURV9DQVBTKTsKLQotICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGNhcHNlcyA9IGdfbmV3IChHc3RDYXBzICosIE5VTV9DQVBTKTsKLSAgZm9yIChpID0gMDsgaSA8IE5VTV9DQVBTOyBpKyspCi0gICAgY2Fwc2VzW2ldID0gZ3N0X2NhcHNfY29weSAocHJvdG9jYXBzKTsKLSAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gY3JlYXRpbmcgJWQgY2Fwc1xuIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSwgaSk7Ci0KLSAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBmb3IgKGkgPSAwOyBpIDwgTlVNX0NBUFM7IGkrKykKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwc2VzW2ldKTsKLSAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gZGVzdHJveWluZyAlZCBjYXBzXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpLCBpKTsKLQotICBnX2ZyZWUgKGNhcHNlcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChwcm90b2NhcHMpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jIGIvdGVzdHMvYmVuY2htYXJrcy9jYXBzbmVnby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTdhMzkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2JlbmNobWFya3MvY2Fwc25lZ28uYworKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogY2Fwc25lZ28uYzogYmVuY2htYXJrIGZvciBjYXBzIG5lZ290aWF0aW9uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogVGhpcyBiZW5jaG1hcmsgcmVjdXJzaXZlbHkgYnVpbGRzIGEgcGlwZWxpbmUgYW5kIG1lYXN1cmVzIHRoZSB0aW1lIHRvIGdvCi0gKiBmcm9tIFJFQURZIHRvIFBBVVNFRCBzdGF0ZS4KLSAqCi0gKiBUaGUgZ3JhcGggc2l6ZSBhbmQgdHlwZSBjYW4gYmUgY29udHJvbGxlZCB3aXRoIGEgZmV3IGNvbW1hbmQgbGluZSBvcHRpb25zOgotICoKLSAqICAtZCBkZXB0aDogaXMgdGhlIGRlcHRoIG9mIHRoZSB0cmVlCi0gKiAgLWMgY2hpbGRyZW46IGlzIHRoZSBudW1iZXIgb2YgYnJhbmNoZXMgb24gZWFjaCBsZXZlbAotICogIC1mIDxmbGF2b3VyPjogY2FuIGJlICJhdWRpbyIgb3IgInZpZGVvIiBhbmQgaXMgY29udHJvbGxpbmcgdGhlIGtpbmQgb2YKLSAqICAgICAgICAgICAgICAgIGVsZW1lbnRzIHRoYXQgYXJlIHVzZWQuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotZW51bQotewotICBGTEFWT1VSX0FVRElPID0gMCwKLSAgRkxBVk9VUl9WSURFTywKLSAgTlVNX0ZMQVZPVVJTCi19OwotCi1lbnVtCi17Ci0gIEVMRU1fU1JDID0gMCwKLSAgRUxFTV9NSVgsCi0gIEVMRU1fUFJPQywKLSAgRUxFTV9DT05WLAotICBOVU1fRUxFTQotfTsKLQotc3RhdGljIGNvbnN0IGdjaGFyICpmYWN0b3JpZXNbTlVNX0ZMQVZPVVJTXVtOVU1fRUxFTV0gPSB7Ci0gIHsiYXVkaW90ZXN0c3JjIiwgImFkZGVyIiwgInZvbHVtZSIsICJhdWRpb2NvbnZlcnQifSwKLSAgeyJ2aWRlb3Rlc3RzcmMiLCAidmlkZW9taXhlciIsICJ2aWRlb3NjYWxlIiwgInZpZGVvY29udmVydCJ9Ci19OwotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKnNpbmtfcGFkc1tOVU1fRkxBVk9VUlNdW05VTV9FTEVNXSA9IHsKLSAge05VTEwsICJzaW5rXyV1IiwgTlVMTCwgTlVMTH0sCi0gIHtOVUxMLCAic2lua18ldSIsIE5VTEwsIE5VTEx9Ci19OwotCi0KLXN0YXRpYyBnYm9vbGVhbgotY3JlYXRlX25vZGUgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIHNpbmssIGNvbnN0IGdjaGFyICogc2lua3BhZG5hbWUsCi0gICAgR3N0RWxlbWVudCAqKiBuZXdfc2luaywgZ2ludCBjaGlsZHJlbiwgZ2ludCBmbGF2b3VyKQotewotICBHc3RFbGVtZW50ICptaXgsICpwcm9jLCAqY29udjsKLQotICBpZiAoY2hpbGRyZW4gPj0gMSkgewotICAgIG1peCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZmFjdG9yaWVzW2ZsYXZvdXJdW0VMRU1fTUlYXSwgTlVMTCk7Ci0gICAgaWYgKCFtaXgpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgibmVlZCBlbGVtZW50ICclcyciLCBmYWN0b3JpZXNbZmxhdm91cl1bRUxFTV9NSVhdKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgbWl4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKTsKLSAgfQotICBwcm9jID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChmYWN0b3JpZXNbZmxhdm91cl1bRUxFTV9QUk9DXSwgTlVMTCk7Ci0gIGlmICghcHJvYykgewotICAgIEdTVF9XQVJOSU5HICgibmVlZCBlbGVtZW50ICclcyciLCBmYWN0b3JpZXNbZmxhdm91cl1bRUxFTV9QUk9DXSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGNvbnYgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGZhY3Rvcmllc1tmbGF2b3VyXVtFTEVNX0NPTlZdLCBOVUxMKTsKLSAgaWYgKCFjb252KSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJuZWVkIGVsZW1lbnQgJyVzJyIsIGZhY3Rvcmllc1tmbGF2b3VyXVtFTEVNX0NPTlZdKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoYmluLCBtaXgsIHByb2MsIGNvbnYsIE5VTEwpOwotICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChtaXgsICJzcmMiLCBwcm9jLCAic2luayIsCi0gICAgICAgICAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpCi0gICAgICB8fCAhZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHByb2MsICJzcmMiLCBjb252LCAic2luayIsCi0gICAgICAgICAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpCi0gICAgICB8fCAhZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKGNvbnYsICJzcmMiLCBzaW5rLCBzaW5rcGFkbmFtZSwKLSAgICAgICAgICBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORykpIHsKLSAgICBHU1RfV0FSTklORyAoImNhbid0IGxpbmsgZWxlbWVudHMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgKm5ld19zaW5rID0gbWl4OwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1jcmVhdGVfbm9kZXMgKEdzdEJpbiAqIGJpbiwgR3N0RWxlbWVudCAqIHNpbmssIGdpbnQgZGVwdGgsIGdpbnQgY2hpbGRyZW4sCi0gICAgZ2ludCBmbGF2b3VyKQotewotICBHc3RFbGVtZW50ICpuZXdfc2luaywgKnNyYzsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbjsgaSsrKSB7Ci0gICAgaWYgKGRlcHRoID4gMCkgewotICAgICAgaWYgKCFjcmVhdGVfbm9kZSAoYmluLCBzaW5rLCBzaW5rX3BhZHNbZmxhdm91cl1bRUxFTV9NSVhdLCAmbmV3X3NpbmssCi0gICAgICAgICAgICAgIGNoaWxkcmVuLCBmbGF2b3VyKSkgewotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBpZiAoIWNyZWF0ZV9ub2RlcyAoYmluLCBuZXdfc2luaywgZGVwdGggLSAxLCBjaGlsZHJlbiwgZmxhdm91cikpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGZhY3Rvcmllc1tmbGF2b3VyXVtFTEVNX1NSQ10sIE5VTEwpOwotICAgICAgaWYgKCFzcmMpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJuZWVkIGVsZW1lbnQgJyVzJyIsIGZhY3Rvcmllc1tmbGF2b3VyXVtFTEVNX1NSQ10pOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBnc3RfYmluX2FkZCAoYmluLCBzcmMpOwotICAgICAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAoc3JjLCAic3JjIiwgc2luaywKLSAgICAgICAgICAgICAgc2lua19wYWRzW2ZsYXZvdXJdW0VMRU1fTUlYXSwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiY2FuJ3QgbGluayBlbGVtZW50cyIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZXZlbnRfbG9vcCAoR3N0RWxlbWVudCAqIGJpbikKLXsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1zZyA9IE5VTEw7Ci0gIGdib29sZWFuIHJ1bm5pbmcgPSBUUlVFOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0KLSAgd2hpbGUgKHJ1bm5pbmcpIHsKLSAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywKLSAgICAgICAgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSB8IEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfV0FSTklORywgLTEpOwotCi0gICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkU6Ci0gICAgICAgIHJ1bm5pbmcgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6ewotICAgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gICAgICAgIGdjaGFyICpkYmcgPSBOVUxMOwotCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1zZywgJmVyciwgJmRiZyk7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoR1NUX01FU1NBR0VfU1JDIChtc2cpLCAiJXMgKCVzKSIsIGVyci0+bWVzc2FnZSwKLSAgICAgICAgICAgIChkYmcgPyBkYmcgOiAibm8gZGV0YWlscyIpKTsKLSAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICAgIGdfZnJlZSAoZGJnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKLSAgICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotICAgICAgICBnY2hhciAqZGJnID0gTlVMTDsKLQotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmZXJyLCAmZGJnKTsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoR1NUX01FU1NBR0VfU1JDIChtc2cpLCAiJXMgKCVzKSIsIGVyci0+bWVzc2FnZSwKLSAgICAgICAgICAgIChkYmcgPyBkYmcgOiAibm8gZGV0YWlscyIpKTsKLSAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICAgIGdfZnJlZSAoZGJnKTsKLSAgICAgICAgcnVubmluZyA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgfQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotfQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICAvKiBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KLSAgZ2NoYXIgKmZsYXZvdXJfc3RyID0gZ19zdHJkdXAoImF1ZGlvIik7Ci0gIGdpbnQgZmxhdm91ciA9IEZMQVZPVVJfQVVESU87Ci0gIGdpbnQgY2hpbGRyZW4gPSAzOwotICBnaW50IGRlcHRoID0gNDsKLSAgZ2ludCBsb29wcyA9IDUwOwotCi0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7Ci0gICAgeyJjaGlsZHJlbiIsICdjJywgMCwgR19PUFRJT05fQVJHX0lOVCwgJmNoaWxkcmVuLAotICAgICAgICAiTnVtYmVyIG9mIGNoaWxkcmVuIChicmFuY2hlcyBvbiBlYWNoIGxldmVsKSAoZGVmYXVsdDogMykiLCBOVUxMfSwKLSAgICB7ImRlcHRoIiwgJ2QnLCAwLCBHX09QVElPTl9BUkdfSU5ULCAmZGVwdGgsCi0gICAgICAgICJEZXB0aCBvZiBwaXBlbGluZSBoaWVyYXJjaHkgdHJlZSAoZGVmYXVsdDogNCkiLCBOVUxMfSwKLSAgICB7ImZsYXZvdXIiLCAnZicsIDAsIEdfT1BUSU9OX0FSR19TVFJJTkcsICZmbGF2b3VyX3N0ciwKLSAgICAgICAgIkZsYXZvdXIgKHZpZGVvfGF1ZGlvKSBjb250cm9sbGluZyB0aGUga2luZCBvZiBlbGVtZW50cyB1c2VkICIKLSAgICAgICAgICAiKGRlZmF1bHQ6IGF1ZGlvKSIsIE5VTEx9LAotICAgIHsibG9vcHMiLCAnbCcsIDAsIEdfT1BUSU9OX0FSR19JTlQsICZsb29wcywKLSAgICAgICAgIkhvdyBtYW55IGxvb3BzIHRvIHJ1biAoZGVmYXVsdDogNTApIiwgTlVMTH0sCi0gICAge05VTEx9Ci0gIH07Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgR3N0QmluICpiaW47Ci0gIEdzdENsb2NrVGltZSBzdGFydCwgZW5kOwotICBHc3RFbGVtZW50ICpzaW5rLCAqbmV3X3Npbms7Ci0gIGdpbnQgaTsKLQotICBnX3NldF9wcmduYW1lICgiY2Fwc25lZ28iKTsKLQotICAvKiBjaGVjayBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLwotICBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIiIpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgb3B0aW9ucywgTlVMTCk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOwotICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkgewotICAgIGdfcHJpbnQgKCJFcnJvciBpbml0aWFsaXppbmc6ICVzXG4iLCBHU1RfU1RSX05VTEwgKGVyci0+bWVzc2FnZSkpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLSAgICByZXR1cm4gMTsKLSAgfQotICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0KLSAgaWYgKHN0cmNtcCAoZmxhdm91cl9zdHIsICJ2aWRlbyIpID09IDApCi0gICAgZmxhdm91ciA9IEZMQVZPVVJfVklERU87Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgZ19wcmludCAoImJ1aWxkaW5nICVzIHBpcGVsaW5lIHdpdGggZGVwdGggPSAlZCBhbmQgY2hpbGRyZW4gPSAlZFxuIiwKLSAgICAgIGZsYXZvdXJfc3RyLCBkZXB0aCwgY2hpbGRyZW4pOwotICBnX2ZyZWUgKGZsYXZvdXJfc3RyKTsKLQotICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGJpbiA9IEdTVF9CSU4gKGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChiaW4sIHNpbmspOwotICBpZiAoIWNyZWF0ZV9ub2RlIChiaW4sIHNpbmssICJzaW5rIiwgJm5ld19zaW5rLCBjaGlsZHJlbiwgZmxhdm91cikpIHsKLSAgICBnb3RvIEVycm9yOwotICB9Ci0gIGlmICghY3JlYXRlX25vZGVzIChiaW4sIG5ld19zaW5rLCBkZXB0aCwgY2hpbGRyZW4sIGZsYXZvdXIpKSB7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICAvKiBudW0tdGhyZWFkcyA9IG51bS1zb3VyY2VzID0gcG93IChjaGlsZHJlbiwgZGVwdGgpICovCi0gIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiBidWlsdCBwaXBlbGluZSB3aXRoICVkIGVsZW1lbnRzXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpLCBHU1RfQklOX05VTUNISUxEUkVOIChiaW4pKTsKLQotICAvKiBtZWFzdXJlICovCi0gIGdfcHJpbnQgKCJzdGFydGluZyBwaXBlbGluZVxuIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9SRUFEWSk7Ci0gIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEUgKGJpbiwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfTUVESUFfVFlQRSwgImNhcHNuZWdvIik7Ci0KLSAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBmb3IgKGkgPSAwOyBpIDwgbG9vcHM7ICsraSkgewotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGV2ZW50X2xvb3AgKEdTVF9FTEVNRU5UIChiaW4pKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUkVBRFkpOwotICB9Ci0gIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiByZWFjaGVkIFBBVVNFRCBzdGF0ZSAoJWQgbG9vcCBpdGVyYXRpb25zKVxuIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSwgbG9vcHMpOwotICAvKiBjbGVhbiB1cCAqLwotRXJyb3I6Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL2NvbXBsZXhpdHkuYyBiL3Rlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDUxZjc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2JlbmNobWFya3MvY29tcGxleGl0eS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNkZWZpbmUgQlVGRkVSX0NPVU5UICgxMDAwKQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc3JjLCAqZTsKLSAgR1NMaXN0ICpzYXZlZF9zcmNfbGlzdCwgKnNyY19saXN0LCAqbmV3X3NyY19saXN0OwotICBndWludCBjb21wbGV4aXR5X29yZGVyLCBuX2VsZW1lbnRzLCBpLCBqLCBtYXhfdGhpc19sZXZlbDsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBlbmQ7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgaWYgKGFyZ2MgIT0gMykgewotICAgIGdfcHJpbnQgKCJ1c2FnZTogJXMgQ09NUExFWElUWV9PUkRFUiBOX0VMRU1FTlRTXG4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIGNvbXBsZXhpdHlfb3JkZXIgPSBhdG9pIChhcmd2WzFdKTsKLSAgbl9lbGVtZW50cyA9IGF0b2kgKGFyZ3ZbMl0pOwotCi0gIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLQotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChwaXBlbGluZSk7Ci0KLSAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChlLCAibnVtLWJ1ZmZlcnMiLCBCVUZGRVJfQ09VTlQsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGUsICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZSk7Ci0gIHNyY19saXN0ID0gc2F2ZWRfc3JjX2xpc3QgPSBnX3NsaXN0X2FwcGVuZCAoTlVMTCwgZSk7Ci0KLSAgbmV3X3NyY19saXN0ID0gTlVMTDsKLQotICBtYXhfdGhpc19sZXZlbCA9IDE7Ci0gIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbl9lbGVtZW50czsgaSsrLCBqKyspIHsKLSAgICBpZiAoaiA+PSBtYXhfdGhpc19sZXZlbCkgewotICAgICAgZ19zbGlzdF9mcmVlIChzYXZlZF9zcmNfbGlzdCk7Ci0gICAgICBzYXZlZF9zcmNfbGlzdCA9IGdfc2xpc3RfcmV2ZXJzZSAobmV3X3NyY19saXN0KTsKLSAgICAgIG5ld19zcmNfbGlzdCA9IE5VTEw7Ci0gICAgICBqID0gMDsKLSAgICAgIG1heF90aGlzX2xldmVsICo9IGNvbXBsZXhpdHlfb3JkZXI7Ci0gICAgfQotCi0gICAgaWYgKCFzcmNfbGlzdCkgewotICAgICAgc3JjX2xpc3QgPSBzYXZlZF9zcmNfbGlzdDsKLSAgICB9Ci0KLSAgICBzcmMgPSAoR3N0RWxlbWVudCAqKSBzcmNfbGlzdC0+ZGF0YTsKLSAgICBzcmNfbGlzdCA9IHNyY19saXN0LT5uZXh0OwotCi0gICAgaWYgKGkgKyBtYXhfdGhpc19sZXZlbCA8IG5fZWxlbWVudHMpIHsKLSAgICAgIGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZWUiLCBOVUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gICAgICBnX29iamVjdF9zZXQgKGUsICJwcmVyb2xsLXF1ZXVlLWxlbiIsIDEsIE5VTEwpOwotICAgIH0KLSAgICBnX29iamVjdF9zZXQgKGUsICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKLSAgICBuZXdfc3JjX2xpc3QgPSBnX3NsaXN0X3ByZXBlbmQgKG5ld19zcmNfbGlzdCwgZSk7Ci0KLSAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBlKTsKLSAgICBpZiAoIWdzdF9lbGVtZW50X2xpbmsgKHNyYywgZSkpCi0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgfQotCi0gIGdfc2xpc3RfZnJlZSAoc2F2ZWRfc3JjX2xpc3QpOwotICBnX3NsaXN0X2ZyZWUgKG5ld19zcmNfbGlzdCk7Ci0KLSAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gY3JlYXRpbmcgYW5kIGxpbmtpbmcgJXUgZWxlbWVudHNcbiIsCi0gICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCksIGkpOwotCi0gIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgaWYgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgaWYgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSBzZXR0aW5nIHBpcGVsaW5lIHRvIHBsYXlpbmdcbiIsCi0gICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCkpOwotCi0gIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgbXNnID0gZ3N0X2J1c19wb2xsIChnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSksCi0gICAgICBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gcHV0dGluZyAlZCBidWZmZXJzIHRocm91Z2hcbiIsCi0gICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCksIEJVRkZFUl9DT1VOVCk7Ci0KLSAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKQotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSBzZXR0aW5nIHBpcGVsaW5lIHRvIE5VTExcbiIsCi0gICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCkpOwotCi0gIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gdW5yZWZmaW5nIHBpcGVsaW5lXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvY29udHJvbGxlci5jIGIvdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMDEyZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvYmVuY2htYXJrcy9jb250cm9sbGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGNvbnRyb2xsZXIuYzogYmVuY2htYXJrIGZvciBpbnRlcnBvbGF0aW9uIGNvbnRyb2wtc291cmNlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0aW50ZXJwb2xhdGlvbmNvbnRyb2xzb3VyY2UuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oPgotCi0vKiBhIHNvbmcgaW4gYnV6enRhcmQgY2FuIGVhc2lseSByZWFjaCAzMDAwMCBoZXJlICovCi0jZGVmaW5lIE5VTV9DUCAxNTAwMAotI2RlZmluZSBCTE9DS19TSVpFIDY0Ci0KLXN0YXRpYyB2b2lkCi1ldmVudF9sb29wIChHc3RFbGVtZW50ICogcGlwZSkKLXsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOwotICBnYm9vbGVhbiBydW5uaW5nID0gVFJVRTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChHU1RfRUxFTUVOVCAocGlwZSkpOwotCi0gIHdoaWxlIChydW5uaW5nKSB7Ci0gICAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9BTlksIC0xKTsKLQotICAgIGdfYXNzZXJ0IChtZXNzYWdlICE9IE5VTEwpOwotCi0gICAgc3dpdGNoIChtZXNzYWdlLT50eXBlKSB7Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgICAgcnVubmluZyA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzp7Ci0gICAgICAgIEdFcnJvciAqZ2Vycm9yOwotICAgICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKLSAgICAgICAgR0Vycm9yICpnZXJyb3I7Ci0gICAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgICAgcnVubmluZyA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIH0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLX0KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKLXsKLSAgZ2ludCByZXMgPSAxOwotICBnaW50IGksIGo7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7Ci0gIEdzdEVsZW1lbnQgKmJpbjsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RDbG9ja1RpbWUgYnQsIGN0OwotICBHc3RDbG9ja1RpbWVEaWZmIGVsYXBzZWQ7Ci0gIEdzdENsb2NrVGltZSB0aWNrOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGJ1aWxkIHBpcGVsaW5lICovCi0gIGJpbiA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb3Rlc3RzcmMiLCAiZ2VuX2F1ZGlvIik7Ci0gIGlmICghc3JjKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJuZWVkIGF1ZGlvdGVzdHNyYyBmcm9tIGdzdC1wbHVnaW5zLWJhc2UiKTsKLSAgICBnb3RvIEVycm9yOwotICB9Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzd2FsbG93X2F1ZGlvIik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjLCBzaW5rLCBOVUxMKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJjYW4ndCBsaW5rIGVsZW1lbnRzIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJ3YXZlIiwgNywgICAgICAvKiBzaW5lIHRhYmxlIC0gd2UgZG9uJ3Qgd2FudCB0byBiZW5jaG1hcmsgdGhlIGZwdSAqLwotICAgICAgIm51bS1idWZmZXJzIiwgTlVNX0NQLCAic2FtcGxlc3BlcmJ1ZmZlciIsIEJMT0NLX1NJWkUsIE5VTEwpOwotCi0gIHRpY2sgPSBCTE9DS19TSVpFICogR1NUX1NFQ09ORCAvIDQ0MTAwOwotCi0gIC8qIGNyZWF0ZSBhbmQgY29uZmlndXJlIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICB0dmNzID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzOwotCi0gIGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoc3JjKSwKLSAgICAgIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoR1NUX09CSkVDVCAoc3JjKSwgImZyZXEiLCBjcykpOwotICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSLCBOVUxMKTsKLQotICAvKiBzZXQgY29udHJvbCB2YWx1ZXMsIHdlIHNldCB0aGVtIGluIGEgbGluZWFyIG9yZGVyIGFzIHdlIHdvdWxkIHdoZW4gbG9hZGluZwotICAgKiBhIHN0b3JlZCBwcm9qZWN0Ci0gICAqLwotICBidCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9DUDsgaSsrKSB7Ci0gICAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgaSAqIHRpY2ssCi0gICAgICAgIGdfcmFuZG9tX2RvdWJsZV9yYW5nZSAoNTAuMCwgMzAwMC4wKSk7Ci0gIH0KLQotICBjdCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGVsYXBzZWQgPSBHU1RfQ0xPQ0tfRElGRiAoYnQsIGN0KTsKLSAgcHJpbnRmICgibGluZWFyIGluc2VydCBvZiBjb250cm9sLXBvaW50czogJSIgR1NUX1RJTUVfRk9STUFUICJcbiIsCi0gICAgICBHU1RfVElNRV9BUkdTIChlbGFwc2VkKSk7Ci0KLQotICAvKiBzZXQgZXh0cmEgY29udHJvbCB2YWx1ZXMsIHdlIHNldCB0aGVtIGluIGFyYml0cmFyeSBvcmRlciB0byBzaW11bGF0ZQotICAgKiB0aGUgdXNlciBlZGl0aW5nIGEgcHJvamVjdCBmcm9tIHRoZSB1aQotICAgKi8KLSAgYnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotICAgIGogPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKDAsIE5VTV9DUCAtIDEpOwotICAgIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIGogKiB0aWNrLAotICAgICAgICBnX3JhbmRvbV9kb3VibGVfcmFuZ2UgKDUwLjAsIDMwMDAuMCkpOwotICB9Ci0KLSAgY3QgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBlbGFwc2VkID0gR1NUX0NMT0NLX0RJRkYgKGJ0LCBjdCk7Ci0gIHByaW50ZiAoInJhbmRvbSBpbnNlcnQgb2YgY29udHJvbC1wb2ludHM6ICUiIEdTVF9USU1FX0ZPUk1BVCAiXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCkpOwotCi0gIHsKLSAgICBHc3RDbG9ja1RpbWUgc2FtcGxlX2R1cmF0aW9uID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoMSwgR1NUX1NFQ09ORCwgNDQxMDApOwotICAgIGdkb3VibGUgKnZhbHVlcyA9IGdfbmV3MCAoZ2RvdWJsZSwgQkxPQ0tfU0laRSAqIE5VTV9DUCk7Ci0KLSAgICBidCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gICAgZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoY3MsIDAsIHNhbXBsZV9kdXJhdGlvbiwKLSAgICAgICAgQkxPQ0tfU0laRSAqIE5VTV9DUCwgdmFsdWVzKTsKLSAgICBjdCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gICAgZ19mcmVlICh2YWx1ZXMpOwotICAgIGVsYXBzZWQgPSBHU1RfQ0xPQ0tfRElGRiAoYnQsIGN0KTsKLSAgICBwcmludGYgKCJsaW5lYXIgYXJyYXkgZm9yIGNvbnRyb2wtcG9pbnRzOiAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCkpOwotICB9Ci0KLSAgLyogcGxheSwgdGhpcyB0ZXN0IHNlcXVlbnRpYWwgcmVhZHMgKi8KLSAgYnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotCi0gIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpKSB7Ci0gICAgLyogd2FpdCBmb3IgRU9TICovCi0gICAgZXZlbnRfbG9vcCAoYmluKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOwotICB9Ci0KLSAgY3QgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBlbGFwc2VkID0gR1NUX0NMT0NLX0RJRkYgKGJ0LCBjdCk7Ci0gIHByaW50ZiAoImxpbmVhciByZWFkIG9mIGNvbnRyb2wtcG9pbnRzICA6ICUiIEdTVF9USU1FX0ZPUk1BVCAiXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCkpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotICByZXMgPSAwOwotRXJyb3I6Ci0gIHJldHVybiByZXM7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jIGIvdGVzdHMvYmVuY2htYXJrcy9nc3RidWZmZXJzdHJlc3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlhNGFjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9iZW5jaG1hcmtzL2dzdGJ1ZmZlcnN0cmVzcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2RlZmluZSBNQVhfVEhSRUFEUyAgMTAwMAotCi1zdGF0aWMgZ3VpbnQ2NCBuYmJ1ZmZlcnM7Ci1zdGF0aWMgR011dGV4IG11dGV4OwotCi0KLXN0YXRpYyB2b2lkICoKLXJ1bl90ZXN0ICh2b2lkICp1c2VyX2RhdGEpCi17Ci0gIGdpbnQgdGhyZWFkaWQgPSBHUE9JTlRFUl9UT19JTlQgKHVzZXJfZGF0YSk7Ci0gIGd1aW50NjQgbmI7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RDbG9ja1RpbWUgc3RhcnQsIGVuZDsKLQotICBnX211dGV4X2xvY2sgKCZtdXRleCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOwotCi0gIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLQotICBnX2Fzc2VydCAobmJidWZmZXJzID4gMCk7Ci0KLSAgZm9yIChuYiA9IG5iYnVmZmVyczsgbmI7IG5iLS0pIHsKLSAgICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9Ci0KLSAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19wcmludCAoInRvdGFsICUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gYXZlcmFnZSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIgIC0gVGhyZWFkICVkXG4iLCBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCksCi0gICAgICBHU1RfVElNRV9BUkdTICgoZW5kIC0gc3RhcnQpIC8gbmJidWZmZXJzKSwgdGhyZWFkaWQpOwotCi0KLSAgZ190aHJlYWRfZXhpdCAoTlVMTCk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICBHVGhyZWFkICp0aHJlYWRzW01BWF9USFJFQURTXTsKLSAgZ2ludCBudW1fdGhyZWFkczsKLSAgZ2ludCB0OwotICBHc3RCdWZmZXIgKnRtcDsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBlbmQ7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0gIGdfbXV0ZXhfaW5pdCAoJm11dGV4KTsKLQotICBpZiAoYXJnYyAhPSAzKSB7Ci0gICAgZ19wcmludCAoInVzYWdlOiAlcyA8bnVtX3RocmVhZHM+IDxuYmJ1ZmZlcnM+XG4iLCBhcmd2WzBdKTsKLSAgICBleGl0ICgtMSk7Ci0gIH0KLQotICBudW1fdGhyZWFkcyA9IGF0b2kgKGFyZ3ZbMV0pOwotICBuYmJ1ZmZlcnMgPSBhdG9pIChhcmd2WzJdKTsKLQotICBpZiAobnVtX3RocmVhZHMgPD0gMCB8fCBudW1fdGhyZWFkcyA+IE1BWF9USFJFQURTKSB7Ci0gICAgZ19wcmludCAoIm51bWJlciBvZiB0aHJlYWRzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwgTUFYX1RIUkVBRFMpOwotICAgIGV4aXQgKC0yKTsKLSAgfQotCi0gIGlmIChuYmJ1ZmZlcnMgPD0gMCkgewotICAgIGdfcHJpbnQgKCJudW1iZXIgb2YgYnVmZmVycyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXG4iKTsKLSAgICBleGl0ICgtMyk7Ci0gIH0KLQotICBnX211dGV4X2xvY2sgKCZtdXRleCk7Ci0gIC8qIExldCdzIGp1c3QgbWFrZSBzdXJlIHRoZSBHc3RCdWZmZXJDbGFzcyBpcyBsb2FkZWQgLi4uICovCi0gIHRtcCA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gIHByaW50ZiAoIm1haW4oKTogQ3JlYXRpbmcgJWQgdGhyZWFkcy5cbiIsIG51bV90aHJlYWRzKTsKLSAgZm9yICh0ID0gMDsgdCA8IG51bV90aHJlYWRzOyB0KyspIHsKLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotICAgIHRocmVhZHNbdF0gPSBnX3RocmVhZF90cnlfbmV3ICgiYnVmZmVyc3RyZXNzdGVzdCIsIHJ1bl90ZXN0LAotICAgICAgICBHSU5UX1RPX1BPSU5URVIgKHQpLCAmZXJyb3IpOwotCi0gICAgaWYgKGVycm9yKSB7Ci0gICAgICBwcmludGYgKCJFUlJPUjogZ190aHJlYWRfdHJ5X25ldygpICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICBnX2NsZWFyX2Vycm9yICgmZXJyb3IpOwotICAgICAgZXhpdCAoLTEpOwotICAgIH0KLSAgfQotCi0gIC8qIFNpZ25hbCBhbGwgdGhyZWFkcyB0byBzdGFydCAqLwotICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOwotCi0gIGZvciAodCA9IDA7IHQgPCBudW1fdGhyZWFkczsgdCsrKSB7Ci0gICAgaWYgKHRocmVhZHNbdF0pCi0gICAgICBnX3RocmVhZF9qb2luICh0aHJlYWRzW3RdKTsKLSAgfQotCi0gIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGdfcHJpbnQgKCIqKiogdG90YWwgJSIgR1NUX1RJTUVfRk9STUFUICIgLSBhdmVyYWdlICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiAgLSBEb25lIGNyZWF0aW5nICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBidWZmZXJzXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoKGVuZCAtIHN0YXJ0KSAvIChudW1fdGhyZWFkcyAqIG5iYnVmZmVycykpLAotICAgICAgbnVtX3RocmVhZHMgKiBuYmJ1ZmZlcnMpOwotCi0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAodG1wKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYyBiL3Rlc3RzL2JlbmNobWFya3MvZ3N0Y2xvY2tzdHJlc3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQzMDkwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9iZW5jaG1hcmtzL2dzdGNsb2Nrc3RyZXNzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBXaW0gVGF5bWFucyA8d2ltIHRheW1hbnMgYXQgZ21haWwgZG90IGNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0LXByaXZhdGUuaD4KLQotI2RlZmluZSBNQVhfVEhSRUFEUyAgMTAwCi0KLXN0YXRpYyBnYm9vbGVhbiBydW5uaW5nID0gVFJVRTsKLXN0YXRpYyBnaW50IGNvdW50ID0gMDsKLQotc3RhdGljIHZvaWQgKgotcnVuX3Rlc3QgKHZvaWQgKnVzZXJfZGF0YSkKLXsKLSAgZ2ludCBwcmV2OwotICBHc3RDbG9jayAqc3lzY2xvY2sgPSBHU1RfQ0xPQ0tfQ0FTVCAodXNlcl9kYXRhKTsKLQotICB3aGlsZSAocnVubmluZykgewotICAgIGdzdF9jbG9ja19nZXRfdGltZSAoc3lzY2xvY2spOwotICAgIHByZXYgPSBnX2F0b21pY19pbnRfYWRkICgmY291bnQsIDEpOwotICAgIGlmIChwcmV2ID09IEdfTUFYSU5UKQotICAgICAgZ193YXJuaW5nICgib3ZlcmZsb3ciKTsKLSAgfQotICBnX3RocmVhZF9leGl0IChOVUxMKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCi17Ci0gIEdUaHJlYWQgKnRocmVhZHNbTUFYX1RIUkVBRFNdOwotICBnaW50IG51bV90aHJlYWRzOwotICBnaW50IHQ7Ci0gIEdzdENsb2NrICpzeXNjbG9jazsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoInVzYWdlOiAlcyA8bnVtX3RocmVhZHM+XG4iLCBhcmd2WzBdKTsKLSAgICBleGl0ICgtMSk7Ci0gIH0KLQotICBudW1fdGhyZWFkcyA9IGF0b2kgKGFyZ3ZbMV0pOwotCi0gIGlmIChudW1fdGhyZWFkcyA8PSAwIHx8IG51bV90aHJlYWRzID4gTUFYX1RIUkVBRFMpIHsKLSAgICBnX3ByaW50ICgibnVtYmVyIG9mIHRocmVhZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkXG4iLCBNQVhfVEhSRUFEUyk7Ci0gICAgZXhpdCAoLTIpOwotICB9Ci0KLSAgc3lzY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLQotICBmb3IgKHQgPSAwOyB0IDwgbnVtX3RocmVhZHM7IHQrKykgewotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0gICAgdGhyZWFkc1t0XSA9IGdfdGhyZWFkX3RyeV9uZXcgKCJjbG9ja3N0cmVzc3Rlc3QiLCBydW5fdGVzdCwKLSAgICAgICAgc3lzY2xvY2ssICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgIHByaW50ZiAoIkVSUk9SOiBnX3RocmVhZF90cnlfbmV3KCkgJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnJvcik7Ci0gICAgICBleGl0ICgtMSk7Ci0gICAgfQotICB9Ci0gIHByaW50ZiAoIm1haW4oKTogQ3JlYXRlZCAlZCB0aHJlYWRzLlxuIiwgdCk7Ci0KLSAgLyogcnVuIGZvciA1IHNlY29uZHMgKi8KLSAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDICogNSk7Ci0KLSAgcHJpbnRmICgibWFpbigpOiBTdG9wcGluZyB0aHJlYWRzLi4uXG4iKTsKLQotICBydW5uaW5nID0gRkFMU0U7Ci0KLSAgZm9yICh0ID0gMDsgdCA8IG51bV90aHJlYWRzOyB0KyspIHsKLSAgICBnX3RocmVhZF9qb2luICh0aHJlYWRzW3RdKTsKLSAgfQotCi0gIGdfcHJpbnQgKCJwZXJmb3JtZWQgJWQgZ2V0X3RpbWUgb3BlcmF0aW9uc1xuIiwgY291bnQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHN5c2Nsb2NrKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvZ3N0cG9sbHN0cmVzcy5jIGIvdGVzdHMvYmVuY2htYXJrcy9nc3Rwb2xsc3RyZXNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZmVkMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvYmVuY2htYXJrcy9nc3Rwb2xsc3RyZXNzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwND4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1zdGF0aWMgR3N0UG9sbCAqc2V0Owotc3RhdGljIEdMaXN0ICpmZHMgPSBOVUxMOwotc3RhdGljIEdNdXRleCBmZGxvY2s7Ci1zdGF0aWMgR1RpbWVyICp0aW1lcjsKLQotI2RlZmluZSBNQVhfVEhSRUFEUyAgMTAwCi0KLXN0YXRpYyB2b2lkCi1tZXNzX3NvbWVfbW9yZSAodm9pZCkKLXsKLSAgR0xpc3QgKndhbGs7Ci0gIGdpbnQgcmFuZG9tOwotICBnaW50IHJlbW92ZWQgPSAwOwotCi0gIGdfbXV0ZXhfbG9jayAoJmZkbG9jayk7Ci0KLSAgZm9yICh3YWxrID0gZmRzOyB3YWxrOykgewotICAgIEdzdFBvbGxGRCAqZmQgPSAoR3N0UG9sbEZEICopIHdhbGstPmRhdGE7Ci0KLSAgICB3YWxrID0gZ19saXN0X25leHQgKHdhbGspOwotCi0gICAgcmFuZG9tID0gKGdpbnQpICgxMC4wICogcmFuZCAoKSAvIChSQU5EX01BWCArIDEuMCkpOwotICAgIHN3aXRjaCAocmFuZG9tKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAgIEdzdFBvbGxGRCAqbmV3ZmQgPSBnX25ldzAgKEdzdFBvbGxGRCwgMSk7Ci0KLSAgICAgICAgICAgZ3N0X3BvbGxfYWRkX2ZkIChzZXQsIG5ld2ZkKTsKLSAgICAgICAgICAgZmRzID0gZ19saXN0X3ByZXBlbmQgKGZkcywgbmV3ZmQpOwotICAgICAgICAgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIGlmICgoZ2ludCkgKDEwLjAgKiByYW5kICgpIC8gKFJBTkRfTUFYICsgMS4wKSkgPCAyKSB7Ci0gICAgICAgICAgZ3N0X3BvbGxfcmVtb3ZlX2ZkIChzZXQsIGZkKTsKLSAgICAgICAgICBmZHMgPSBnX2xpc3RfcmVtb3ZlIChmZHMsIGZkKTsKLSAgICAgICAgICBnX2ZyZWUgKGZkKTsKLSAgICAgICAgICByZW1vdmVkKys7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMjoKLSAgICAgICAgZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChzZXQsIGZkLCBUUlVFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDM6Ci0gICAgICAgIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAoc2V0LCBmZCwgRkFMU0UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNDoKLSAgICAgICAgZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKHNldCwgZmQsIFRSVUUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNToKLSAgICAgICAgZ3N0X3BvbGxfZmRfY3RsX3JlYWQgKHNldCwgZmQsIEZBTFNFKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgNjoKLSAgICAgICAgZ3N0X3BvbGxfZmRfaGFzX2Nsb3NlZCAoc2V0LCBmZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA3OgotICAgICAgICBnc3RfcG9sbF9mZF9oYXNfZXJyb3IgKHNldCwgZmQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgODoKLSAgICAgICAgZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKHNldCwgZmQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgOToKLSAgICAgICAgZ3N0X3BvbGxfZmRfY2FuX3dyaXRlIChzZXQsIGZkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGlmIChnX2xpc3RfbGVuZ3RoIChmZHMpIDwgOTAwKSB7Ci0gICAgcmFuZG9tID0gcmVtb3ZlZCArIChnaW50KSAoMi4wICogcmFuZCAoKSAvIChSQU5EX01BWCArIDEuMCkpOwotICAgIHdoaWxlIChyYW5kb20pIHsKLSAgICAgIEdzdFBvbGxGRCAqbmV3ZmQgPSBnX25ldzAgKEdzdFBvbGxGRCwgMSk7Ci0KLSAgICAgIGdzdF9wb2xsX2FkZF9mZCAoc2V0LCBuZXdmZCk7Ci0gICAgICBmZHMgPSBnX2xpc3RfcHJlcGVuZCAoZmRzLCBuZXdmZCk7Ci0gICAgICByYW5kb20tLTsKLSAgICB9Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJmZkbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXJ1bl90ZXN0ICh2b2lkICp0aHJlYWRpZCkKLXsKLSAgZ2ludCBpZCA9IEdQT0lOVEVSX1RPX0lOVCAodGhyZWFkaWQpOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgaWYgKGlkID09IDApIHsKLSAgICAgIGdpbnQgcmVzID0gZ3N0X3BvbGxfd2FpdCAoc2V0LCAxMCk7Ci0KLSAgICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgIGdfcHJpbnQgKCJlcnJvciAlZCAlc1xuIiwgZXJybm8sIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lc3Nfc29tZV9tb3JlICgpOwotICAgICAgaWYgKGdfdGltZXJfZWxhcHNlZCAodGltZXIsIE5VTEwpID4gMC41KSB7Ci0gICAgICAgIGdfbXV0ZXhfbG9jayAoJmZkbG9jayk7Ci0gICAgICAgIGdfcHJpbnQgKCJhY3RpdmUgZmRzIDoldVxuIiwgZ19saXN0X2xlbmd0aCAoZmRzKSk7Ci0gICAgICAgIGdfdGltZXJfc3RhcnQgKHRpbWVyKTsKLSAgICAgICAgZ19tdXRleF91bmxvY2sgKCZmZGxvY2spOwotICAgICAgfQotICAgICAgZ191c2xlZXAgKDEpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICBHVGhyZWFkICp0aHJlYWRzW01BWF9USFJFQURTXTsKLSAgZ2ludCBudW1fdGhyZWFkczsKLSAgZ2ludCB0OwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIGdfbXV0ZXhfaW5pdCAoJmZkbG9jayk7Ci0gIHRpbWVyID0gZ190aW1lcl9uZXcgKCk7Ci0KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnQgKCJ1c2FnZTogJXMgPG51bV90aHJlYWRzPlxuIiwgYXJndlswXSk7Ci0gICAgZXhpdCAoLTEpOwotICB9Ci0KLSAgbnVtX3RocmVhZHMgPSBhdG9pIChhcmd2WzFdKTsKLQotICBzZXQgPSBnc3RfcG9sbF9uZXcgKFRSVUUpOwotCi0gIGZvciAodCA9IDA7IHQgPCBudW1fdGhyZWFkczsgdCsrKSB7Ci0gICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0KLSAgICB0aHJlYWRzW3RdID0gZ190aHJlYWRfdHJ5X25ldyAoInBvbGxzdHJlc3N0ZXN0IiwgcnVuX3Rlc3QsCi0gICAgICAgIEdJTlRfVE9fUE9JTlRFUiAodCksICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgIHByaW50ZiAoIkVSUk9SOiBnX3RocmVhZF90cnlfbmV3KCkgJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnJvcik7Ci0gICAgICBleGl0ICgtMSk7Ci0gICAgfQotICB9Ci0gIHByaW50ZiAoIm1haW4oKTogQ3JlYXRlZCAlZCB0aHJlYWRzLlxuIiwgdCk7Ci0KLSAgZm9yICh0ID0gMDsgdCA8IG51bV90aHJlYWRzOyB0KyspIHsKLSAgICBnX3RocmVhZF9qb2luICh0aHJlYWRzW3RdKTsKLSAgfQotCi0gIGdzdF9wb2xsX2ZyZWUgKHNldCk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL2dzdHBvb2xzdHJlc3MuYyBiL3Rlc3RzL2JlbmNobWFya3MvZ3N0cG9vbHN0cmVzcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzYxNWMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2JlbmNobWFya3MvZ3N0cG9vbHN0cmVzcy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEzPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jZGVmaW5lIEJVRkZFUl9TSVpFICgxNDAwKQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICBnaW50IGk7Ci0gIEdzdEJ1ZmZlciAqdG1wOwotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBHc3RDbG9ja1RpbWUgc3RhcnQsIGVuZDsKLSAgR3N0Q2xvY2tUaW1lRGlmZiBkdXIxLCBkdXIyOwotICBndWludDY0IG5idWZmZXJzOwotICBHc3RTdHJ1Y3R1cmUgKmNvbmY7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnQgKCJ1c2FnZTogJXMgPG5idWZmZXJzPlxuIiwgYXJndlswXSk7Ci0gICAgZXhpdCAoLTEpOwotICB9Ci0KLSAgbmJ1ZmZlcnMgPSBhdG9pIChhcmd2WzFdKTsKLQotICBpZiAobmJ1ZmZlcnMgPD0gMCkgewotICAgIGdfcHJpbnQgKCJudW1iZXIgb2YgYnVmZmVycyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXG4iKTsKLSAgICBleGl0ICgtMyk7Ci0gIH0KLQotICAvKiBMZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGUgR3N0QnVmZmVyQ2xhc3MgaXMgbG9hZGVkIC4uLiAqLwotICB0bXAgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAodG1wKTsKLQotICBwb29sID0gZ3N0X2J1ZmZlcl9wb29sX25ldyAoKTsKLQotICBjb25mID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKGNvbmYsIE5VTEwsIEJVRkZFUl9TSVpFLCAwLCAwKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmYpOwotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBUUlVFKTsKLQotICAvKiBhbGxvY2F0ZSBidWZmZXJzIGRpcmVjdGx5ICovCi0gIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZm9yIChpID0gMDsgaSA8IG5idWZmZXJzOyBpKyspIHsKLSAgICB0bXAgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgQlVGRkVSX1NJWkUsIE5VTEwpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKHRtcCk7Ci0gIH0KLSAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZHVyMSA9IEdTVF9DTE9DS19ESUZGIChzdGFydCwgZW5kKTsKLSAgZ19wcmludCAoIioqKiB0b3RhbCAlIiBHU1RfVElNRV9GT1JNQVQgIiAtIGF2ZXJhZ2UgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiICAtIERvbmUgY3JlYXRpbmcgJSIgR19HVUlOVDY0X0ZPUk1BVCAiIGZyZXNoIGJ1ZmZlcnNcbiIsCi0gICAgICBHU1RfVElNRV9BUkdTIChkdXIxKSwgR1NUX1RJTUVfQVJHUyAoZHVyMSAvIG5idWZmZXJzKSwgbmJ1ZmZlcnMpOwotCi0gIC8qIGFsbG9jYXRlIGJ1ZmZlcnMgZnJvbSB0aGUgcG9vbCAqLwotICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuYnVmZmVyczsgaSsrKSB7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCAmdG1wLCBOVUxMKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmICh0bXApOwotICB9Ci0gIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGR1cjIgPSBHU1RfQ0xPQ0tfRElGRiAoc3RhcnQsIGVuZCk7Ci0gIGdfcHJpbnQgKCIqKiogdG90YWwgJSIgR1NUX1RJTUVfRk9STUFUICIgLSBhdmVyYWdlICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiAgLSBEb25lIGNyZWF0aW5nICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBwb29sZWQgYnVmZmVyc1xuIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGR1cjIpLCBHU1RfVElNRV9BUkdTIChkdXIyIC8gbmJ1ZmZlcnMpLCBuYnVmZmVycyk7Ci0KLSAgZ19wcmludCAoIioqKiBzcGVlZHVwICU2LjRsZlxuIiwgKChnZG91YmxlKSBkdXIxIC8gKGdkb3VibGUpIGR1cjIpKTsKLQotICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgRkFMU0UpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvaW5pdC5jIGIvdGVzdHMvYmVuY2htYXJrcy9pbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMjZhMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvYmVuY2htYXJrcy9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICoKLSAqIGluaXQuYzogYmVuY2htYXJrIGdzdCBpbml0aWFsaXNhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKLXsKLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaG1hcmtzL21hc3MtZWxlbWVudHMuYyBiL3Rlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmU2Yzg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2JlbmNobWFya3MvbWFzcy1lbGVtZW50cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2RlZmluZSBJREVOVElUWV9DT1VOVCAoMTAwMCkKLSNkZWZpbmUgQlVGRkVSX0NPVU5UICgxMDAwKQotI2RlZmluZSBTUkNfRUxFTUVOVCAiZmFrZXNyYyIKLSNkZWZpbmUgU0lOS19FTEVNRU5UICJmYWtlc2luayIKLQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc3JjLCAqc2luaywgKmN1cnJlbnQsICpsYXN0OwotICBndWludCBpLCBidWZmZXJzID0gQlVGRkVSX0NPVU5ULCBpZGVudGl0aWVzID0gSURFTlRJVFlfQ09VTlQ7Ci0gIEdzdENsb2NrVGltZSBzdGFydCwgZW5kOwotICBjb25zdCBnY2hhciAqc3JjX25hbWUgPSBTUkNfRUxFTUVOVCwgKnNpbmtfbmFtZSA9IFNJTktfRUxFTUVOVDsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBpZiAoYXJnYyA+IDEpCi0gICAgaWRlbnRpdGllcyA9IGF0b2kgKGFyZ3ZbMV0pOwotICBpZiAoYXJnYyA+IDIpCi0gICAgYnVmZmVycyA9IGF0b2kgKGFyZ3ZbMl0pOwotICBpZiAoYXJnYyA+IDMpCi0gICAgc3JjX25hbWUgPSBhcmd2WzNdOwotICBpZiAoYXJnYyA+IDQpCi0gICAgc2lua19uYW1lID0gYXJndls0XTsKLQotICBnX3ByaW50Ci0gICAgICAoIioqKiBiZW5jaG1hcmtpbmcgdGhpcyBwaXBlbGluZTogJXMgbnVtLWJ1ZmZlcnM9JXUgISAldSAqIGlkZW50aXR5ICEgJXNcbiIsCi0gICAgICBzcmNfbmFtZSwgYnVmZmVycywgaWRlbnRpdGllcywgc2lua19uYW1lKTsKLSAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChwaXBlbGluZSk7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoc3JjX25hbWUsIE5VTEwpOwotICBpZiAoIXNyYykgewotICAgIGdfcHJpbnQgKCJubyBlbGVtZW50IG5hbWVkIFwiJXNcIiBmb3VuZCwgYWJvcnRpbmcuLi5cbiIsIHNyY19uYW1lKTsKLSAgICByZXR1cm4gMTsKLSAgfQotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgYnVmZmVycywgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKHNpbmtfbmFtZSwgTlVMTCk7Ci0gIGlmICghc2luaykgewotICAgIGdfcHJpbnQgKCJubyBlbGVtZW50IG5hbWVkIFwiJXNcIiBmb3VuZCwgYWJvcnRpbmcuLi5cbiIsIHNpbmtfbmFtZSk7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgbGFzdCA9IHNyYzsKLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIHNpbmssIE5VTEwpOwotICBmb3IgKGkgPSAwOyBpIDwgaWRlbnRpdGllczsgaSsrKSB7Ci0gICAgY3VycmVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgTlVMTCk7Ci0gICAgZ19hc3NlcnQgKGN1cnJlbnQpOwotICAgIC8qIHNodXQgdGhpcyBlbGVtZW50IHVwIChubyBnX3N0cmR1cF9wcmludGYgcGxlYXNlKSAqLwotICAgIGdfb2JqZWN0X3NldCAoY3VycmVudCwgInNpbGVudCIsIFRSVUUsIE5VTEwpOwotICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGN1cnJlbnQpOwotICAgIGlmICghZ3N0X2VsZW1lbnRfbGluayAobGFzdCwgY3VycmVudCkpCi0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICBsYXN0ID0gY3VycmVudDsKLSAgfQotICBpZiAoIWdzdF9lbGVtZW50X2xpbmsgKGxhc3QsIHNpbmspKQotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSBjcmVhdGluZyAldSBpZGVudGl0eSBlbGVtZW50c1xuIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSwgaWRlbnRpdGllcyk7Ci0KLSAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICBpZiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwKLSAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiAtIHNldHRpbmcgcGlwZWxpbmUgdG8gcGxheWluZ1xuIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSk7Ci0KLSAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBtc2cgPSBnc3RfYnVzX3BvbGwgKGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKSwKLSAgICAgIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7Ci0gIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSBwdXR0aW5nICV1IGJ1ZmZlcnMgdGhyb3VnaFxuIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGVuZCAtIHN0YXJ0KSwgYnVmZmVycyk7Ci0KLSAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKQotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICBlbmQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBnX3ByaW50ICgiJSIgR1NUX1RJTUVfRk9STUFUICIgLSBzZXR0aW5nIHBpcGVsaW5lIHRvIE5VTExcbiIsCi0gICAgICBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCkpOwotCi0gIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gdW5yZWZmaW5nIHBpcGVsaW5lXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFya3MvdHJhY2Vyc2VyaWFsaXplLmMgYi90ZXN0cy9iZW5jaG1hcmtzL3RyYWNlcnNlcmlhbGl6ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjhkMTc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2JlbmNobWFya3MvdHJhY2Vyc2VyaWFsaXplLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiB0cmFjZXJzZXJpYWxpemUuYzogYmVuY2htYXJrIGZvciBsb2cgc2VyaWFsaXNhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUY3JlYXRpbmcgJWQgY2Fwc05FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiB0byBjaGVjayB0aGUgc2l6ZXMgcnVuOgotICoKLSAqIEdTVF9ERUJVRz0iZGVmYXVsdDo3IiBHU1RfREVCVUdfRklMRT10cmFjZS5sb2cgLi90cmFjZXJzZXJpYWxpemUKLSAqCi0gKiBncmVwICJsb2dfZ3N0X3N0cnVjdHVyZSIgdHJhY2UubG9nID50cmFjZXJzZXJpYWxpemUuZ3N0c3RydWN0dXJlLmxvZwotICogZ3JlcCAibG9nX2dfdmFyaWFudCIgdHJhY2UubG9nID50cmFjZXJzZXJpYWxpemUuZ3ZhcmlhbnQubG9nCi0gKgotICovCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNkZWZpbmUgTlVNX0xPT1BTIDEwMDAwMAotCi1zdGF0aWMgdm9pZAotbG9nX2dzdF9zdHJ1Y3R1cmUgKGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgZ2NoYXIgKiBmaXJzdCwgLi4uKQotewotICB2YV9saXN0IHZhcl9hcmdzOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGdjaGFyICpsOwotCi0gIHZhX3N0YXJ0ICh2YXJfYXJncywgZmlyc3QpOwotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXdfdmFsaXN0IChuYW1lLCBmaXJzdCwgdmFyX2FyZ3MpOwotICBsID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOwotICBHU1RfVFJBQ0UgKCIlcyIsIGwpOwotICBnX2ZyZWUgKGwpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICB2YV9lbmQgKHZhcl9hcmdzKTsKLX0KLQotc3RhdGljIHZvaWQKLWxvZ19nc3Rfc3RydWN0dXJlX3RtcGwgKGNvbnN0IGdjaGFyICogZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyX2FyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcl9hcmdzLCBmb3JtYXQpOwotICBpZiAoR19MSUtFTFkgKEdTVF9MRVZFTF9UUkFDRSA8PSBfZ3N0X2RlYnVnX21pbikpIHsKLSAgICBnc3RfZGVidWdfbG9nX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfVFJBQ0UsIF9fRklMRV9fLAotICAgICAgICBHU1RfRlVOQ1RJT04sIF9fTElORV9fLCBOVUxMLCBmb3JtYXQsIHZhcl9hcmdzKTsKLSAgfQotICB2YV9lbmQgKHZhcl9hcmdzKTsKLX0KLQotc3RhdGljIHZvaWQKLWxvZ19nX3ZhcmlhbnQgKGNvbnN0IGdjaGFyICogZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyX2FyZ3M7Ci0gIEdWYXJpYW50ICp2OwotICBnY2hhciAqbDsKLQotICB2YV9zdGFydCAodmFyX2FyZ3MsIGZvcm1hdCk7Ci0gIHYgPSBnX3ZhcmlhbnRfbmV3X3ZhIChmb3JtYXQsIE5VTEwsICZ2YXJfYXJncyk7Ci0gIGwgPSBnX3ZhcmlhbnRfcHJpbnQgKHYsIEZBTFNFKTsKLSAgR1NUX1RSQUNFICgiJXMiLCBsKTsKLSAgZ19mcmVlIChsKTsKLSAgZ192YXJpYW50X3VucmVmICh2KTsKLSAgdmFfZW5kICh2YXJfYXJncyk7Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCi17Ci0gIEdzdENsb2NrVGltZSBzdGFydCwgZW5kOwotICBnaW50IGk7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgc3RhcnQgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotICBmb3IgKGkgPSAwOyBpIDwgTlVNX0xPT1BTOyBpKyspIHsKLSAgICBsb2dfZ3N0X3N0cnVjdHVyZSAoIm5hbWUiLAotICAgICAgICAidHMiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwKLSAgICAgICAgImluZGV4IiwgR19UWVBFX1VJTlQsIDEwLAotICAgICAgICAidGVzdCIsIEdfVFlQRV9TVFJJTkcsICJoYWxsbyIsCi0gICAgICAgICJib29sIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsCi0gICAgICAgICJmbGFnIiwgR1NUX1RZUEVfUEFEX0RJUkVDVElPTiwgR1NUX1BBRF9TUkMsIE5VTEwpOwotICB9Ci0gIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIjogR3N0U3RydWN0dXJlXG4iLCBHU1RfVElNRV9BUkdTIChlbmQgLSBzdGFydCkpOwotCi0gIHN0YXJ0ID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZm9yIChpID0gMDsgaSA8IE5VTV9MT09QUzsgaSsrKSB7Ci0gICAgbG9nX2dzdF9zdHJ1Y3R1cmVfdG1wbCAoIm5hbWUsIHRzPShndWludDY0KSUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgIiwgaW5kZXg9KHVpbnQpJXUsIHRlc3Q9KHN0cmluZyklcywgYm9vbD0oYm9vbGVhbiklcywgZmxhZz0oR3N0UGFkRGlyZWN0aW9uKSVkOyIsCi0gICAgICAgIChndWludDY0KSAwLCAxMCwgImhhbGxvIiwgKFRSVUUgPyAidHJ1ZSIgOiAiZmFsc2UiKSwgR1NUX1BBRF9TUkMpOwotICB9Ci0gIGVuZCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGdfcHJpbnQgKCIlIiBHU1RfVElNRV9GT1JNQVQgIjogR3N0U3RydWN0dXJlIHRlbXBsYXRlXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpKTsKLQotICBzdGFydCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBOVU1fTE9PUFM7IGkrKykgewotICAgIGxvZ19nX3ZhcmlhbnQgKCIoc3R1c2J1KSIsICJuYW1lIiwgKGd1aW50NjQpIDAsIDEwLCAiaGFsbG8iLCBUUlVFLAotICAgICAgICBHU1RfUEFEX1NSQyk7Ci0gIH0KLSAgZW5kID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgZ19wcmludCAoIiUiIEdTVF9USU1FX0ZPUk1BVCAiOiBHVmFyaWFudFxuIiwgR1NUX1RJTUVfQVJHUyAoZW5kIC0gc3RhcnQpKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL01ha2VmaWxlLmFtIGIvdGVzdHMvY2hlY2svTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMGViYzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jaGVjay5tYWsKLQotQ0hFQ0tfUkVHSVNUUlkgPSAkKHRvcF9idWlsZGRpcikvdGVzdHMvY2hlY2svdGVzdC1yZWdpc3RyeS5yZWcKLQotR1NUX1RPT0xTX0RJUiA9ICQodG9wX2J1aWxkZGlyKS90b29scwotCi1SRUdJU1RSWV9FTlZJUk9OTUVOVCA9IFwKLQlHU1RfUkVHSVNUUlk9JChDSEVDS19SRUdJU1RSWSkKLQotQU1fVEVTVFNfRU5WSVJPTk1FTlQgKz0gXAotICAgICAgICBHU1RfU1RBVEVfSUdOT1JFX0VMRU1FTlRTPSIkKFNUQVRFX0lHTk9SRV9FTEVNRU5UUykiCVwKLSAgICAgICAgJChSRUdJU1RSWV9FTlZJUk9OTUVOVCkJCQkJCVwKLSAgICAgICAgR1NUX1BMVUdJTl9TQ0FOTkVSXzFfMD0kKHRvcF9idWlsZGRpcikvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXIgXAotICAgICAgICBHU1RfUExVR0lOX1NZU1RFTV9QQVRIXzFfMD0JCQkJCVwKLSAgICAgICAgR1NUX1BMVUdJTl9QQVRIXzFfMD0kKHRvcF9idWlsZGRpcikvcGx1Z2lucwotCi1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ3N0cmVhbWVyLUBHU1RfQVBJX1ZFUlNJT05ACi0KLSMgb3ZlcnJpZGUgdG8gX25vdF8gaW5zdGFsbCB0aGUgdGVzdCBwbHVnaW5zCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCi0jIHRoZSBjb3JlIGR1bXBzIG9mIHNvbWUgbWFjaGluZXMgaGF2ZSBQSURzIGFwcGVuZGVkLCB0ZXN0IHJlZ2lzdHJ5IGFuZAotIyBwcm9maWxpbmcgZGF0YQotQ0xFQU5GSUxFUyA9IGNvcmUgY29yZS4qIHRlc3QtcmVnaXN0cnkuKiAqLmdjbm8gKi5nY2RhCi0KLVNVUFBSRVNTSU9OUyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2dzdC5zdXBwCi0KLWNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbC1jaGVjawotCi0jIFRoZXNlIHRlc3RzIGRvbid0IGV2ZW4gYnVpbGQgYW55IGxvbmdlcjoKLSMgICBnc3QvZ3N0aW5kZXguYwotCi1pZiBHU1RfRElTQUJMRV9QQVJTRQotUEFSU0VfQ0hFQ0tTID0gcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkCi1lbHNlCi1QQVJTRV9DSEVDS1MgPSBwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcyBwaXBlbGluZXMvY2xlYW51cCBwaXBlbGluZXMvcGFyc2UtbGF1bmNoCi1lbmRpZgotCi0jIERvIG5vdCBydW4gdGhlIGFiaSB0ZXN0IGluIGNhc2UgYW55IG9wdGlvbiB3aGljaCBjYXVzZXMgdGhlIEFQSSB0byBjaGFuZ2UgaGFzCi0jIGJlZW4gdXNlZAotaWYgIUdTVF9ESVNBQkxFX1JFR0lTVFJZCi1BQklfQ0hFQ0tTID0gZ3N0L2dzdGFiaQotZW5kaWYKLQotaWYgIUdTVF9ESVNBQkxFX0dTVF9ERUJVRwotUFJJTlRGX0NIRUNLUyA9IGdzdC9nc3RwcmludGYKLWVsc2UKLVBSSU5URl9DSEVDS1MgPQotZW5kaWYKLQotTElCU0FCSV9DSEVDS1MgPSBsaWJzL2xpYnNhYmkKLQotaWYgSEFWRV9DWFgKLUNYWF9DSEVDS1MgPSBnc3QvZ3N0Y3BwIGxpYnMvZ3N0bGlic2NwcAotZWxzZQotQ1hYX0NIRUNLUyA9Ci1lbmRpZgotCi0jIGlmIGl0J3MgY2FsbGluZyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSwgaXQgd2lsbCBwcm9iYWJseSBub3Qgd29yayB3aXRob3V0Ci0jIGEgcmVnaXN0cnkKLWlmIEdTVF9ESVNBQkxFX1JFR0lTVFJZCi1SRUdJU1RSWV9DSEVDS1MgPQotZWxzZQotUkVHSVNUUllfQ0hFQ0tTID0JCQkJXAotCWdzdC9nc3QJCQkJCVwKLQlnc3QvZ3N0YmluCQkJCVwKLQlnc3QvZ3N0Y2hpbGRwcm94eQkJCVwKLQlnc3QvZ3N0Y29udGV4dAkJCQlcCi0JZ3N0L2dzdGNvbnRyb2xsZXIJCQlcCi0JZ3N0L2dzdGVsZW1lbnQJCQkJXAotCWdzdC9nc3RlbGVtZW50ZmFjdG9yeQkJCVwKLQlnc3QvZ3N0ZXZlbnQJCQkJXAotCWdzdC9nc3RnaG9zdHBhZAkJCQlcCi0JZ3N0L2dzdHBsdWdpbgkJCQlcCi0JZ3N0L2dzdHByZXNldAkJCQlcCi0JZ3N0L2dzdHByb3RlY3Rpb24JCQlcCi0JZ3N0L2dzdHF1ZXJ5CQkJCVwKLQlnc3QvZ3N0cmVnaXN0cnkJCQkJXAotCWdzdC9nc3R1cmkgIAkJCQlcCi0JZ3N0L2dzdHV0aWxzCQkJCVwKLQlnZW5lcmljL3NpbmtzCQkJCVwKLQllbGVtZW50cy9jYXBzZmlsdGVyCQkJXAotCWVsZW1lbnRzL2NvbmNhdAkJCQlcCi0JZWxlbWVudHMvZmFrZXNpbmsJCQlcCi0JZWxlbWVudHMvZmFrZXNyYwkJCVwKLQllbGVtZW50cy9mZHNyYwkJCSAgCVwKLQllbGVtZW50cy9maWxlc2luawkJCVwKLQllbGVtZW50cy9maWxlc3JjCQkJXAotCWVsZW1lbnRzL2Z1bm5lbAkJCQlcCi0JZWxlbWVudHMvaWRlbnRpdHkJCQlcCi0JZWxlbWVudHMvbXVsdGlxdWV1ZQkJCVwKLQllbGVtZW50cy9zZWxlY3RvcgkJCVwKLQllbGVtZW50cy90ZWUJCQkgIAlcCi0JZWxlbWVudHMvcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQllbGVtZW50cy9xdWV1ZTIgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWVsZW1lbnRzL3ZhbHZlICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZWxlbWVudHMvc3RyZWFtaWRkZW11eAkJCVwKLQlsaWJzL2Jhc2VwYXJzZQkJCQlcCi0JbGlicy9iYXNlc3JjCQkJCVwKLQlsaWJzL2Jhc2VzaW5rCQkJCVwKLQlsaWJzL3NwYXJzZWZpbGUJCQkJXAotCWxpYnMvY29udHJvbGxlcgkJCQlcCi0JbGlicy9xdWV1ZWFycmF5CQkJCVwKLQlsaWJzL3R5cGVmaW5kaGVscGVyCQkJXAotCXBpcGVsaW5lcy9zZWVrCQkJCVwKLQlwaXBlbGluZXMvc3RyZXNzCQkJXAotCXBpcGVsaW5lcy9xdWV1ZS1lcnJvcgotZW5kaWYKLQotY2hlY2tfUFJPR1JBTVMgPQkJCQlcCi0JJChBQklfQ0hFQ0tTKQkJCSAgICAgCVwKLQlnc3QvZ3N0YXRvbWljcXVldWUJCQlcCi0JZ3N0L2dzdGJ1ZmZlcgkJCQlcCi0JZ3N0L2dzdGJ1ZmZlcmxpc3QJCQlcCi0JZ3N0L2dzdGJ1ZmZlcnBvb2wJCQlcCi0JZ3N0L2dzdG1ldGEJCQkJXAotCWdzdC9nc3RtZW1vcnkJCQkJXAotCWdzdC9nc3RidXMJCQkJXAotCWdzdC9nc3RjYXBzICAgICAJCQlcCi0JZ3N0L2dzdGNhcHNmZWF0dXJlcyAgICAJCQlcCi0JJChDWFhfQ0hFQ0tTKQkJCSAgICAgCVwKLQlnc3QvZ3N0ZGF0ZXRpbWUgICAgIAkJCVwKLQlnc3QvZ3N0ZGV2aWNlCQkJCVwKLQlnc3QvZ3N0aW5mbwkJIAkJXAotCWdzdC9nc3RpdGVyYXRvciAJCQlcCi0JZ3N0L2dzdG1lc3NhZ2UJIAkJCVwKLQlnc3QvZ3N0bWluaW9iamVjdCAJCQlcCi0JZ3N0L2dzdG9iamVjdAkJCQlcCi0JZ3N0L2dzdHBhZAkJCQlcCi0JZ3N0L2dzdHBhcmFtc3BlY3MJCQlcCi0JZ3N0L2dzdHBpcGVsaW5lCQkJCVwKLQlnc3QvZ3N0cG9sbCAgICAgCQkJXAotCWdzdC9nc3Rwcm90ZWN0aW9uICAgICAJCQlcCi0JJChQUklOVEZfQ0hFQ0tTKQkJCVwKLQlnc3QvZ3N0c2VnbWVudAkJCQlcCi0JZ3N0L2dzdHN5c3RlbWNsb2NrCQkJXAotCWdzdC9nc3RjbG9jawkJCQlcCi0JZ3N0L2dzdHN0cmVhbQkJCQlcCi0JZ3N0L2dzdHN0cnVjdHVyZQkJCVwKLQlnc3QvZ3N0dGFnCQkJCVwKLQlnc3QvZ3N0dHJhY2VycmVjb3JkCQkgCQlcCi0JZ3N0L2dzdHRhZ3NldHRlcgkJCVwKLQlnc3QvZ3N0dGFzawkJCQlcCi0JZ3N0L2dzdHRvYwkJCQlcCi0JZ3N0L2dzdHRvY3NldHRlcgkJCVwKLQlnc3QvZ3N0dmFsdWUJCQkJXAotCWdlbmVyaWMvc3RhdGVzCQkJCVwKLQkkKFBBUlNFX0NIRUNLUykJCQkJXAotCSQoUkVHSVNUUllfQ0hFQ0tTKQkJCVwKLQkkKExJQlNBQklfQ0hFQ0tTKQkJICAgICAJXAotCWxpYnMvYWRhcHRlcgkJCQlcCi0JbGlicy9iaXRyZWFkZXIJCQkJXAotCWxpYnMvYnl0ZXJlYWRlcgkJCQlcCi0JbGlicy9ieXRld3JpdGVyCQkJCVwKLQlsaWJzL2JpdHJlYWRlci1ub2lubGluZQkJXAotCWxpYnMvYnl0ZXJlYWRlci1ub2lubGluZQlcCi0JbGlicy9ieXRld3JpdGVyLW5vaW5saW5lCVwKLQlsaWJzL2Zsb3djb21iaW5lcgkJCVwKLQlsaWJzL3NwYXJzZWZpbGUJCQkJXAotCWxpYnMvY29sbGVjdHBhZHMJCQlcCi0JbGlicy9nc3RoYXJuZXNzCQkJCVwKLQlsaWJzL2dzdG5ldGNsaWVudGNsb2NrCQkJXAotCWxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyCQkJXAotCWxpYnMvZ3N0dGVzdGNsb2NrCQkJXAotCWxpYnMvdHJhbnNmb3JtMQkJCQlcCi0JbGlicy90cmFuc2Zvcm0yCQkJCVwKLQl0b29scy9nc3RpbnNwZWN0Ci0KLSMgZmFpbGluZyB0ZXN0cwotbm9pbnN0X1BST0dSQU1TID0KLQotIyBlbGVtZW50cyB0byBpZ25vcmUgZm9yIHRoZSBzdGF0ZSB0ZXN0cwotIyBTVEFURV9JR05PUkVfRUxFTUVOVFMgPQotCi1URVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCi0KLW5vaW5zdF9IRUFERVJTID0gXAotCWdzdC9jYXBzbGlzdC5oIFwKLQlnc3Qvc3RydWN0X2FybS5oIFwKLQlnc3Qvc3RydWN0X2kzODYuaCBcCi0JZ3N0L3N0cnVjdF9ocHBhLmggXAotCWdzdC9zdHJ1Y3RfcHBjMzIuaCBcCi0JZ3N0L3N0cnVjdF9wcGM2NC5oIFwKLQlnc3Qvc3RydWN0X3NwYXJjLmggXAotCWdzdC9zdHJ1Y3RfeDg2XzY0LmggXAotCWxpYnMvc3RydWN0X2FybS5oIFwKLQlsaWJzL3N0cnVjdF9pMzg2LmggXAotCWxpYnMvc3RydWN0X2hwcGEuaCBcCi0JbGlicy9zdHJ1Y3RfcHBjMzIuaCBcCi0JbGlicy9zdHJ1Y3RfcHBjNjQuaCBcCi0JbGlicy9zdHJ1Y3Rfc3BhcmMuaCBcCi0JbGlicy9zdHJ1Y3RfeDg2XzY0LmgKLQotRVhUUkFfRElTVCA9IFwKLQlsaWJzL3Rlc3RfdHJhbnNmb3JtLmMKLQotQU1fQ0ZMQUdTID0gJChQVEhSRUFEX0NGTEFHUykgJChHU1RfT0JKX0NGTEFHUykgLVVHX0RJU0FCTEVfQVNTRVJUIC1VR19ESVNBQkxFX0NBU1RfQ0hFQ0tTIFwKLQktREdTVF9DSEVDS19URVNUX0VOVklST05NRU5UX0JFQUNPTj0iXCJHU1RfU1RBVEVfSUdOT1JFX0VMRU1FTlRTXCIiCi1BTV9DWFhGTEFHUyA9ICQoR1NUX09CSl9DWFhGTEFHUykgLVVHX0RJU0FCTEVfQVNTRVJUIC1VR19ESVNBQkxFX0NBU1RfQ0hFQ0tTIFwKLQktREdTVF9DSEVDS19URVNUX0VOVklST05NRU5UX0JFQUNPTj0iXCJHU1RfU1RBVEVfSUdOT1JFX0VMRU1FTlRTXCIiCi1MREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChHU1RfT0JKX0xJQlMpCi0KLWdzdF9nc3RjcHBfU09VUkNFUyA9IGdzdC9nc3RjcHAuY2MKLQotbGlic19nc3RsaWJzY3BwX1NPVVJDRVMgPSBsaWJzL2dzdGxpYnNjcHAuY2MKLQotZ3N0X2dzdHRyYWNlcnJlY29yZF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAkKEFNX0NGTEFHUykgLURHU1RfVVNFX1VOU1RBQkxFX0FQSQotCi1nc3RfZ3N0dXRpbHNfTERBREQgPSAkKExEQUREKSAkKEdTTF9MSUJTKSAkKEdNUF9MSUJTKQotCi1nc3RfZ3N0cHJpbnRmX0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvcHJpbnRmL2xpYmdzdHByaW50Zi5sYSBcCi0JJChMREFERCkKLQotZWxlbWVudHNfZmRzcmNfQ0ZMQUdTPSQoR1NUX09CSl9DRkxBR1MpICQoQU1fQ0ZMQUdTKSBcCi0JLURURVNURklMRT1cIiQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjXCIKLWVsZW1lbnRzX2ZpbGVzcmNfQ0ZMQUdTPSQoR1NUX09CSl9DRkxBR1MpICQoQU1fQ0ZMQUdTKSBcCi0JLURURVNURklMRT1cIiQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjXCIKLQotbGlic19jb250cm9sbGVyX0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoTERBREQpCi1saWJzX2dzdG5ldGNsaWVudGNsb2NrX0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKExEQUREKQotbGlic19nc3RuZXR0aW1lcHJvdmlkZXJfTERBREQgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L25ldC9saWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR0lPX0xJQlMpICQoTERBREQpCi0KLSMgdmFsZ3JpbmQgdGVzdGluZwotIyB0aGVzZSBqdXN0IG5lZWQgdmFsZ3JpbmQgZml4aW5nLCBwZXJpb2QKLVZBTEdSSU5EX1RPX0ZJWCA9IFwKLQlnc3QvZ3N0aW5mbyBcCi0JZ3N0L2dzdHRyYWNlcnJlY29yZCBcCi0JdG9vbHMvZ3N0aW5zcGVjdAotCi1WQUxHUklORF9JR05PUkUgPSBcCi0JcGlwZWxpbmVzL3N0cmVzcwotCi0jIHRoZXNlIG5lZWQgZml4aW5nIGJlY2F1c2UgdGhlIHRocmVhZHMgY2F1c2Ugc2VnZmF1bHRzIHVuZGVyIHZhbGdyaW5kCi1URVNUU19USFJFQURFRCA9CQkJCVwKLQlnc3QvZ3N0bWluaW9iamVjdCAJCQlcCi0JZ3N0L2dzdG9iamVjdAotCi1WQUxHUklORF9URVNUU19ESVNBQkxFID0gCQkJCQlcCi0JJChURVNUU19USFJFQURFRCkJCQkJCVwKLQkkKFZBTEdSSU5EX0lHTk9SRSkJCQkJCVwKLQkkKFZBTEdSSU5EX1RPX0ZJWCkKLQotIyBpbmRleGVycyBkb2VzIG5vdCBnZXQgdGVzdGVkIHlldAotQ09WRVJBR0VfRElSUyA9IFwKLQlnc3QgXAotCWxpYnMvZ3N0L2Jhc2UgXAotCWxpYnMvZ3N0L2NvbnRyb2xsZXIgXAotCWxpYnMvZ3N0L2NoZWNrIFwKLQlsaWJzL2dzdC9uZXQgXAotCXBsdWdpbnMvZWxlbWVudHMKLUNPVkVSQUdFX0ZJTEVTID0gJChmb3JlYWNoIGRpciwkKENPVkVSQUdFX0RJUlMpLCQod2lsZGNhcmQgJCh0b3BfYnVpbGRkaXIpLyQoZGlyKS8qLmdjb3YpKQotQ09WRVJBR0VfRklMRVNfUkVMID0gJChzdWJzdCAkKHRvcF9idWlsZGRpcikvLCwkKENPVkVSQUdFX0ZJTEVTKSkKLUNPVkVSQUdFX09VVF9GSUxFUyA9ICQoZm9yZWFjaCBkaXIsJChDT1ZFUkFHRV9ESVJTKSwkKHdpbGRjYXJkICQodG9wX2J1aWxkZGlyKS8kKGRpcikvKi5nY292Lm91dCkpCi1DT1ZFUkFHRV9PVVRfRklMRVNfUkVMID0gJChzdWJzdCAkKHRvcF9idWlsZGRpcikvLCwkKENPVkVSQUdFX09VVF9GSUxFUykpCi0KLWRlYnVnOgotCWVjaG8gJChDT1ZFUkFHRV9GSUxFUykKLQllY2hvICQoQ09WRVJBR0VfRklMRVNfUkVMKQotCi0uUEhPTlk6IGNvdmVyYWdlCi1pZiBHU1RfR0NPVl9FTkFCTEVECi0jIHdlIHJlYnVpbGQgYSByZWdpc3RyeSBhbmQgZG8gZ3N0LWluc3BlY3Qgc28gdGhhdCBhbGwgdGhlIGdldC9zZXQgY29kZXBhdGhzCi0jIGFyZSBhbHNvIGNvdmVyZWQKLWNvdmVyYWdlOgotCWZvciBmaWxlIGluIGBmaW5kICQodG9wX2J1aWxkZGlyKSAtbmFtZSAnKi5nY2RhJ2A7IGRvIHJtICQkZmlsZTsgZG9uZQotCS1ybSAkKENIRUNLX1JFR0lTVFJZKQotCWVjaG8gIkluc3BlY3RpbmcgYWxsIGVsZW1lbnRzIgotCWZvciBlIGluIGAkKEdTVF9JTlNQRUNUKSB8IGhlYWQgLW4gLTIgfCBjdXQgLWQ6IC1mMmA7IGRvICQoR1NUX0lOU1BFQ1QpICQkZSA+IC9kZXYvbnVsbCAyPiYxOyBkb25lCi0JbWFrZSBjaGVjawotCW1ha2UgY292ZXJhZ2UtcmVwb3J0Ci1lbHNlCi1jb3ZlcmFnZToKLQllY2hvICJZb3UgbmVlZCB0byBjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IHRvIGdldCBjb3ZlcmFnZSBkYXRhIgotCWV4aXQgMQotZW5kaWYKLQotY292ZXJhZ2UtcmVwb3J0OgotCXJtIC1yIGNvdmVyYWdlCi0JZm9yIGRpciBpbiAkKENPVkVSQUdFX0RJUlMpOyBkbyAJCQkJXAotCSAgbWtkaXIgLXAgY292ZXJhZ2UvJCRkaXI7IAkJCQkJXAotCSAgbWFrZSAtQyAkKHRvcF9idWlsZGRpcikvJCRkaXIgZ2NvdjsJCQkJXAotICAgICAgICBkb25lCi0JZm9yIGRpciBpbiAkKENPVkVSQUdFX0RJUlMpOyBkbwkJCQkJXAotCSAgICBmaWxlcz0iYGxzICQodG9wX2J1aWxkZGlyKS8kJGRpci8qLmdjb3Yub3V0IDI+IC9kZXYvbnVsbGAiOyBcCi0gICAgICAgICAgaWYgdGVzdCAhIC16ICIkJGZpbGVzIjsgdGhlbgkJCQkJXAotCSAgICBwZXJsICQodG9wX3NyY2RpcikvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbCAJXAotCSAgICAgICQodG9wX2J1aWxkZGlyKS8kJGRpci8qLmdjb3Yub3V0ID4JCQlcCi0JICAgICAgY292ZXJhZ2UvJCRkaXIvaW5kZXgueG1sOwkJCQkJXAotCSAgICB4c2x0cHJvYyAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQueHNsCVwKLQkgICAgICBjb3ZlcmFnZS8kJGRpci9pbmRleC54bWwgPiBjb3ZlcmFnZS8kJGRpci9pbmRleC5odG1sOwlcCi0JICBmaTsgXAotICAgICAgICBkb25lCi0JZm9yIGZpbGUgaW4gJChDT1ZFUkFHRV9GSUxFU19SRUwpOyBkbwkJCQlcCi0JICBlY2hvIEdlbmVyYXRpbmcgY292ZXJhZ2UvJCRmaWxlLmh0bWw7IAkJCVwKLQkgIHBlcmwgJCh0b3Bfc3JjZGlyKS9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LWVudHJ5LnBsICAgXAotCSAgICAkKHRvcF9idWlsZGRpcikvJCRmaWxlID4gY292ZXJhZ2UvJCRmaWxlLmh0bWw7IAkJXAotCWRvbmUKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL01ha2VmaWxlLmluIGIvdGVzdHMvY2hlY2svTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYzljZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzOTU0ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLWNoZWNrX1BST0dSQU1TID0gJChhbV9fRVhFRVhUXzEpIGdzdC9nc3RhdG9taWNxdWV1ZSQoRVhFRVhUKSBcCi0JZ3N0L2dzdGJ1ZmZlciQoRVhFRVhUKSBnc3QvZ3N0YnVmZmVybGlzdCQoRVhFRVhUKSBcCi0JZ3N0L2dzdGJ1ZmZlcnBvb2wkKEVYRUVYVCkgZ3N0L2dzdG1ldGEkKEVYRUVYVCkgXAotCWdzdC9nc3RtZW1vcnkkKEVYRUVYVCkgZ3N0L2dzdGJ1cyQoRVhFRVhUKSBcCi0JZ3N0L2dzdGNhcHMkKEVYRUVYVCkgZ3N0L2dzdGNhcHNmZWF0dXJlcyQoRVhFRVhUKSBcCi0JJChhbV9fRVhFRVhUXzIpIGdzdC9nc3RkYXRldGltZSQoRVhFRVhUKSBcCi0JZ3N0L2dzdGRldmljZSQoRVhFRVhUKSBnc3QvZ3N0aW5mbyQoRVhFRVhUKSBcCi0JZ3N0L2dzdGl0ZXJhdG9yJChFWEVFWFQpIGdzdC9nc3RtZXNzYWdlJChFWEVFWFQpIFwKLQlnc3QvZ3N0bWluaW9iamVjdCQoRVhFRVhUKSBnc3QvZ3N0b2JqZWN0JChFWEVFWFQpIFwKLQlnc3QvZ3N0cGFkJChFWEVFWFQpIGdzdC9nc3RwYXJhbXNwZWNzJChFWEVFWFQpIFwKLQlnc3QvZ3N0cGlwZWxpbmUkKEVYRUVYVCkgZ3N0L2dzdHBvbGwkKEVYRUVYVCkgXAotCWdzdC9nc3Rwcm90ZWN0aW9uJChFWEVFWFQpICQoYW1fX0VYRUVYVF8zKSBcCi0JZ3N0L2dzdHNlZ21lbnQkKEVYRUVYVCkgZ3N0L2dzdHN5c3RlbWNsb2NrJChFWEVFWFQpIFwKLQlnc3QvZ3N0Y2xvY2skKEVYRUVYVCkgZ3N0L2dzdHN0cmVhbSQoRVhFRVhUKSBcCi0JZ3N0L2dzdHN0cnVjdHVyZSQoRVhFRVhUKSBnc3QvZ3N0dGFnJChFWEVFWFQpIFwKLQlnc3QvZ3N0dHJhY2VycmVjb3JkJChFWEVFWFQpIGdzdC9nc3R0YWdzZXR0ZXIkKEVYRUVYVCkgXAotCWdzdC9nc3R0YXNrJChFWEVFWFQpIGdzdC9nc3R0b2MkKEVYRUVYVCkgXAotCWdzdC9nc3R0b2NzZXR0ZXIkKEVYRUVYVCkgZ3N0L2dzdHZhbHVlJChFWEVFWFQpIFwKLQlnZW5lcmljL3N0YXRlcyQoRVhFRVhUKSAkKGFtX19FWEVFWFRfNCkgJChhbV9fRVhFRVhUXzUpIFwKLQkkKGFtX19FWEVFWFRfNikgbGlicy9hZGFwdGVyJChFWEVFWFQpIGxpYnMvYml0cmVhZGVyJChFWEVFWFQpIFwKLQlsaWJzL2J5dGVyZWFkZXIkKEVYRUVYVCkgbGlicy9ieXRld3JpdGVyJChFWEVFWFQpIFwKLQlsaWJzL2JpdHJlYWRlci1ub2lubGluZSQoRVhFRVhUKSBcCi0JbGlicy9ieXRlcmVhZGVyLW5vaW5saW5lJChFWEVFWFQpIFwKLQlsaWJzL2J5dGV3cml0ZXItbm9pbmxpbmUkKEVYRUVYVCkgbGlicy9mbG93Y29tYmluZXIkKEVYRUVYVCkgXAotCWxpYnMvc3BhcnNlZmlsZSQoRVhFRVhUKSBsaWJzL2NvbGxlY3RwYWRzJChFWEVFWFQpIFwKLQlsaWJzL2dzdGhhcm5lc3MkKEVYRUVYVCkgbGlicy9nc3RuZXRjbGllbnRjbG9jayQoRVhFRVhUKSBcCi0JbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIkKEVYRUVYVCkgbGlicy9nc3R0ZXN0Y2xvY2skKEVYRUVYVCkgXAotCWxpYnMvdHJhbnNmb3JtMSQoRVhFRVhUKSBsaWJzL3RyYW5zZm9ybTIkKEVYRUVYVCkgXAotCXRvb2xzL2dzdGluc3BlY3QkKEVYRUVYVCkKLW5vaW5zdF9QUk9HUkFNUyA9Ci1zdWJkaXIgPSB0ZXN0cy9jaGVjawotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUBhbV9fRVhFRVhUXzEgPSBnc3QvZ3N0YWJpJChFWEVFWFQpCi1ASEFWRV9DWFhfVFJVRUBhbV9fRVhFRVhUXzIgPSBnc3QvZ3N0Y3BwJChFWEVFWFQpIFwKLUBIQVZFX0NYWF9UUlVFQAlsaWJzL2dzdGxpYnNjcHAkKEVYRUVYVCkKLUBHU1RfRElTQUJMRV9HU1RfREVCVUdfRkFMU0VAYW1fX0VYRUVYVF8zID0gZ3N0L2dzdHByaW50ZiQoRVhFRVhUKQotQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQGFtX19FWEVFWFRfNCA9IHBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUAJcGlwZWxpbmVzL2NsZWFudXAkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQAlwaXBlbGluZXMvcGFyc2UtbGF1bmNoJChFWEVFWFQpCi1AR1NUX0RJU0FCTEVfUEFSU0VfVFJVRUBhbV9fRVhFRVhUXzQgPSAgXAotQEdTVF9ESVNBQkxFX1BBUlNFX1RSVUVACXBpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZCQoRVhFRVhUKQotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQGFtX19FWEVFWFRfNSA9IGdzdC9nc3QkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0YmluJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGNoaWxkcHJveHkkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0Y29udGV4dCQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3Rjb250cm9sbGVyJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGVsZW1lbnQkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0ZWxlbWVudGZhY3RvcnkkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0ZXZlbnQkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0Z2hvc3RwYWQkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0cGx1Z2luJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdHByZXNldCQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3Rwcm90ZWN0aW9uJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdHF1ZXJ5JChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdHJlZ2lzdHJ5JChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdHVyaSQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3R1dGlscyQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdlbmVyaWMvc2lua3MkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9jYXBzZmlsdGVyJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvY29uY2F0JChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZmFrZXNpbmskKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9mYWtlc3JjJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZmRzcmMkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9maWxlc2luayQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL2ZpbGVzcmMkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9mdW5uZWwkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9pZGVudGl0eSQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL211bHRpcXVldWUkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9zZWxlY3RvciQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3RlZSQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3F1ZXVlJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvcXVldWUyJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvdmFsdmUkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9zdHJlYW1pZGRlbXV4JChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9iYXNlcGFyc2UkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlsaWJzL2Jhc2VzcmMkKEVYRUVYVCkgXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlsaWJzL2Jhc2VzaW5rJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9zcGFyc2VmaWxlJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9jb250cm9sbGVyJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9xdWV1ZWFycmF5JChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy90eXBlZmluZGhlbHBlciQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACXBpcGVsaW5lcy9zZWVrJChFWEVFWFQpIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJcGlwZWxpbmVzL3N0cmVzcyQoRVhFRVhUKSBcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACXBpcGVsaW5lcy9xdWV1ZS1lcnJvciQoRVhFRVhUKQotYW1fX0VYRUVYVF82ID0gbGlicy9saWJzYWJpJChFWEVFWFQpCi1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotZWxlbWVudHNfY2Fwc2ZpbHRlcl9TT1VSQ0VTID0gZWxlbWVudHMvY2Fwc2ZpbHRlci5jCi1hbV9fZGlyc3RhbXAgPSAkKGFtX19sZWFkaW5nX2RvdClkaXJzdGFtcAotZWxlbWVudHNfY2Fwc2ZpbHRlcl9PQkpFQ1RTID0gZWxlbWVudHMvY2Fwc2ZpbHRlci4kKE9CSkVYVCkKLWVsZW1lbnRzX2NhcHNmaWx0ZXJfTERBREQgPSAkKExEQUREKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWVsZW1lbnRzX2NhcHNmaWx0ZXJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWVsZW1lbnRzX2NvbmNhdF9TT1VSQ0VTID0gZWxlbWVudHMvY29uY2F0LmMKLWVsZW1lbnRzX2NvbmNhdF9PQkpFQ1RTID0gZWxlbWVudHMvY29uY2F0LiQoT0JKRVhUKQotZWxlbWVudHNfY29uY2F0X0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2NvbmNhdF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfZmFrZXNpbmtfU09VUkNFUyA9IGVsZW1lbnRzL2Zha2VzaW5rLmMKLWVsZW1lbnRzX2Zha2VzaW5rX09CSkVDVFMgPSBlbGVtZW50cy9mYWtlc2luay4kKE9CSkVYVCkKLWVsZW1lbnRzX2Zha2VzaW5rX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2Zha2VzaW5rX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19mYWtlc3JjX1NPVVJDRVMgPSBlbGVtZW50cy9mYWtlc3JjLmMKLWVsZW1lbnRzX2Zha2VzcmNfT0JKRUNUUyA9IGVsZW1lbnRzL2Zha2VzcmMuJChPQkpFWFQpCi1lbGVtZW50c19mYWtlc3JjX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2Zha2VzcmNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX2Zkc3JjX1NPVVJDRVMgPSBlbGVtZW50cy9mZHNyYy5jCi1lbGVtZW50c19mZHNyY19PQkpFQ1RTID0gZWxlbWVudHMvZWxlbWVudHNfZmRzcmMtZmRzcmMuJChPQkpFWFQpCi1lbGVtZW50c19mZHNyY19MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19mZHNyY19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfZmRzcmNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2Zkc3JjX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyBcCi0JJEAKLWVsZW1lbnRzX2ZpbGVzaW5rX1NPVVJDRVMgPSBlbGVtZW50cy9maWxlc2luay5jCi1lbGVtZW50c19maWxlc2lua19PQkpFQ1RTID0gZWxlbWVudHMvZmlsZXNpbmsuJChPQkpFWFQpCi1lbGVtZW50c19maWxlc2lua19MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19maWxlc2lua19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfZmlsZXNyY19TT1VSQ0VTID0gZWxlbWVudHMvZmlsZXNyYy5jCi1lbGVtZW50c19maWxlc3JjX09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy4kKE9CSkVYVCkKLWVsZW1lbnRzX2ZpbGVzcmNfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfZmlsZXNyY19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfZmlsZXNyY19MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfZmlsZXNyY19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1lbGVtZW50c19mdW5uZWxfU09VUkNFUyA9IGVsZW1lbnRzL2Z1bm5lbC5jCi1lbGVtZW50c19mdW5uZWxfT0JKRUNUUyA9IGVsZW1lbnRzL2Z1bm5lbC4kKE9CSkVYVCkKLWVsZW1lbnRzX2Z1bm5lbF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19mdW5uZWxfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX2lkZW50aXR5X1NPVVJDRVMgPSBlbGVtZW50cy9pZGVudGl0eS5jCi1lbGVtZW50c19pZGVudGl0eV9PQkpFQ1RTID0gZWxlbWVudHMvaWRlbnRpdHkuJChPQkpFWFQpCi1lbGVtZW50c19pZGVudGl0eV9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19pZGVudGl0eV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfbXVsdGlxdWV1ZV9TT1VSQ0VTID0gZWxlbWVudHMvbXVsdGlxdWV1ZS5jCi1lbGVtZW50c19tdWx0aXF1ZXVlX09CSkVDVFMgPSBlbGVtZW50cy9tdWx0aXF1ZXVlLiQoT0JKRVhUKQotZWxlbWVudHNfbXVsdGlxdWV1ZV9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19tdWx0aXF1ZXVlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19xdWV1ZV9TT1VSQ0VTID0gZWxlbWVudHMvcXVldWUuYwotZWxlbWVudHNfcXVldWVfT0JKRUNUUyA9IGVsZW1lbnRzL3F1ZXVlLiQoT0JKRVhUKQotZWxlbWVudHNfcXVldWVfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfcXVldWVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX3F1ZXVlMl9TT1VSQ0VTID0gZWxlbWVudHMvcXVldWUyLmMKLWVsZW1lbnRzX3F1ZXVlMl9PQkpFQ1RTID0gZWxlbWVudHMvcXVldWUyLiQoT0JKRVhUKQotZWxlbWVudHNfcXVldWUyX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3F1ZXVlMl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfc2VsZWN0b3JfU09VUkNFUyA9IGVsZW1lbnRzL3NlbGVjdG9yLmMKLWVsZW1lbnRzX3NlbGVjdG9yX09CSkVDVFMgPSBlbGVtZW50cy9zZWxlY3Rvci4kKE9CSkVYVCkKLWVsZW1lbnRzX3NlbGVjdG9yX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3NlbGVjdG9yX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19zdHJlYW1pZGRlbXV4X1NPVVJDRVMgPSBlbGVtZW50cy9zdHJlYW1pZGRlbXV4LmMKLWVsZW1lbnRzX3N0cmVhbWlkZGVtdXhfT0JKRUNUUyA9IGVsZW1lbnRzL3N0cmVhbWlkZGVtdXguJChPQkpFWFQpCi1lbGVtZW50c19zdHJlYW1pZGRlbXV4X0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3N0cmVhbWlkZGVtdXhfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX3RlZV9TT1VSQ0VTID0gZWxlbWVudHMvdGVlLmMKLWVsZW1lbnRzX3RlZV9PQkpFQ1RTID0gZWxlbWVudHMvdGVlLiQoT0JKRVhUKQotZWxlbWVudHNfdGVlX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3RlZV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfdmFsdmVfU09VUkNFUyA9IGVsZW1lbnRzL3ZhbHZlLmMKLWVsZW1lbnRzX3ZhbHZlX09CSkVDVFMgPSBlbGVtZW50cy92YWx2ZS4kKE9CSkVYVCkKLWVsZW1lbnRzX3ZhbHZlX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3ZhbHZlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nZW5lcmljX3NpbmtzX1NPVVJDRVMgPSBnZW5lcmljL3NpbmtzLmMKLWdlbmVyaWNfc2lua3NfT0JKRUNUUyA9IGdlbmVyaWMvc2lua3MuJChPQkpFWFQpCi1nZW5lcmljX3NpbmtzX0xEQUREID0gJChMREFERCkKLWdlbmVyaWNfc2lua3NfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdlbmVyaWNfc3RhdGVzX1NPVVJDRVMgPSBnZW5lcmljL3N0YXRlcy5jCi1nZW5lcmljX3N0YXRlc19PQkpFQ1RTID0gZ2VuZXJpYy9zdGF0ZXMuJChPQkpFWFQpCi1nZW5lcmljX3N0YXRlc19MREFERCA9ICQoTERBREQpCi1nZW5lcmljX3N0YXRlc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdF9TT1VSQ0VTID0gZ3N0L2dzdC5jCi1nc3RfZ3N0X09CSkVDVFMgPSBnc3QvZ3N0LiQoT0JKRVhUKQotZ3N0X2dzdF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0YWJpX1NPVVJDRVMgPSBnc3QvZ3N0YWJpLmMKLWdzdF9nc3RhYmlfT0JKRUNUUyA9IGdzdC9nc3RhYmkuJChPQkpFWFQpCi1nc3RfZ3N0YWJpX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RhYmlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RhdG9taWNxdWV1ZV9TT1VSQ0VTID0gZ3N0L2dzdGF0b21pY3F1ZXVlLmMKLWdzdF9nc3RhdG9taWNxdWV1ZV9PQkpFQ1RTID0gZ3N0L2dzdGF0b21pY3F1ZXVlLiQoT0JKRVhUKQotZ3N0X2dzdGF0b21pY3F1ZXVlX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RhdG9taWNxdWV1ZV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdGJpbl9TT1VSQ0VTID0gZ3N0L2dzdGJpbi5jCi1nc3RfZ3N0YmluX09CSkVDVFMgPSBnc3QvZ3N0YmluLiQoT0JKRVhUKQotZ3N0X2dzdGJpbl9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0YmluX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0YnVmZmVyX1NPVVJDRVMgPSBnc3QvZ3N0YnVmZmVyLmMKLWdzdF9nc3RidWZmZXJfT0JKRUNUUyA9IGdzdC9nc3RidWZmZXIuJChPQkpFWFQpCi1nc3RfZ3N0YnVmZmVyX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RidWZmZXJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RidWZmZXJsaXN0X1NPVVJDRVMgPSBnc3QvZ3N0YnVmZmVybGlzdC5jCi1nc3RfZ3N0YnVmZmVybGlzdF9PQkpFQ1RTID0gZ3N0L2dzdGJ1ZmZlcmxpc3QuJChPQkpFWFQpCi1nc3RfZ3N0YnVmZmVybGlzdF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0YnVmZmVybGlzdF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdGJ1ZmZlcnBvb2xfU09VUkNFUyA9IGdzdC9nc3RidWZmZXJwb29sLmMKLWdzdF9nc3RidWZmZXJwb29sX09CSkVDVFMgPSBnc3QvZ3N0YnVmZmVycG9vbC4kKE9CSkVYVCkKLWdzdF9nc3RidWZmZXJwb29sX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RidWZmZXJwb29sX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0YnVzX1NPVVJDRVMgPSBnc3QvZ3N0YnVzLmMKLWdzdF9nc3RidXNfT0JKRUNUUyA9IGdzdC9nc3RidXMuJChPQkpFWFQpCi1nc3RfZ3N0YnVzX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RidXNfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RjYXBzX1NPVVJDRVMgPSBnc3QvZ3N0Y2Fwcy5jCi1nc3RfZ3N0Y2Fwc19PQkpFQ1RTID0gZ3N0L2dzdGNhcHMuJChPQkpFWFQpCi1nc3RfZ3N0Y2Fwc19MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0Y2Fwc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdGNhcHNmZWF0dXJlc19TT1VSQ0VTID0gZ3N0L2dzdGNhcHNmZWF0dXJlcy5jCi1nc3RfZ3N0Y2Fwc2ZlYXR1cmVzX09CSkVDVFMgPSBnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLiQoT0JKRVhUKQotZ3N0X2dzdGNhcHNmZWF0dXJlc19MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0Y2Fwc2ZlYXR1cmVzX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0Y2hpbGRwcm94eV9TT1VSQ0VTID0gZ3N0L2dzdGNoaWxkcHJveHkuYwotZ3N0X2dzdGNoaWxkcHJveHlfT0JKRUNUUyA9IGdzdC9nc3RjaGlsZHByb3h5LiQoT0JKRVhUKQotZ3N0X2dzdGNoaWxkcHJveHlfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdGNoaWxkcHJveHlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RjbG9ja19TT1VSQ0VTID0gZ3N0L2dzdGNsb2NrLmMKLWdzdF9nc3RjbG9ja19PQkpFQ1RTID0gZ3N0L2dzdGNsb2NrLiQoT0JKRVhUKQotZ3N0X2dzdGNsb2NrX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RjbG9ja19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdGNvbnRleHRfU09VUkNFUyA9IGdzdC9nc3Rjb250ZXh0LmMKLWdzdF9nc3Rjb250ZXh0X09CSkVDVFMgPSBnc3QvZ3N0Y29udGV4dC4kKE9CSkVYVCkKLWdzdF9nc3Rjb250ZXh0X0xEQUREID0gJChMREFERCkKLWdzdF9nc3Rjb250ZXh0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0Y29udHJvbGxlcl9TT1VSQ0VTID0gZ3N0L2dzdGNvbnRyb2xsZXIuYwotZ3N0X2dzdGNvbnRyb2xsZXJfT0JKRUNUUyA9IGdzdC9nc3Rjb250cm9sbGVyLiQoT0JKRVhUKQotZ3N0X2dzdGNvbnRyb2xsZXJfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdGNvbnRyb2xsZXJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2dzdF9nc3RjcHBfT0JKRUNUUyA9IGdzdC9nc3RjcHAuJChPQkpFWFQpCi1nc3RfZ3N0Y3BwX09CSkVDVFMgPSAkKGFtX2dzdF9nc3RjcHBfT0JKRUNUUykKLWdzdF9nc3RjcHBfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdGNwcF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdGRhdGV0aW1lX1NPVVJDRVMgPSBnc3QvZ3N0ZGF0ZXRpbWUuYwotZ3N0X2dzdGRhdGV0aW1lX09CSkVDVFMgPSBnc3QvZ3N0ZGF0ZXRpbWUuJChPQkpFWFQpCi1nc3RfZ3N0ZGF0ZXRpbWVfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdGRhdGV0aW1lX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0ZGV2aWNlX1NPVVJDRVMgPSBnc3QvZ3N0ZGV2aWNlLmMKLWdzdF9nc3RkZXZpY2VfT0JKRUNUUyA9IGdzdC9nc3RkZXZpY2UuJChPQkpFWFQpCi1nc3RfZ3N0ZGV2aWNlX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RkZXZpY2VfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RlbGVtZW50X1NPVVJDRVMgPSBnc3QvZ3N0ZWxlbWVudC5jCi1nc3RfZ3N0ZWxlbWVudF9PQkpFQ1RTID0gZ3N0L2dzdGVsZW1lbnQuJChPQkpFWFQpCi1nc3RfZ3N0ZWxlbWVudF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0ZWxlbWVudF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdGVsZW1lbnRmYWN0b3J5X1NPVVJDRVMgPSBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYwotZ3N0X2dzdGVsZW1lbnRmYWN0b3J5X09CSkVDVFMgPSBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuJChPQkpFWFQpCi1nc3RfZ3N0ZWxlbWVudGZhY3RvcnlfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdGVsZW1lbnRmYWN0b3J5X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0ZXZlbnRfU09VUkNFUyA9IGdzdC9nc3RldmVudC5jCi1nc3RfZ3N0ZXZlbnRfT0JKRUNUUyA9IGdzdC9nc3RldmVudC4kKE9CSkVYVCkKLWdzdF9nc3RldmVudF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0ZXZlbnRfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RnaG9zdHBhZF9TT1VSQ0VTID0gZ3N0L2dzdGdob3N0cGFkLmMKLWdzdF9nc3RnaG9zdHBhZF9PQkpFQ1RTID0gZ3N0L2dzdGdob3N0cGFkLiQoT0JKRVhUKQotZ3N0X2dzdGdob3N0cGFkX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RnaG9zdHBhZF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdGluZm9fU09VUkNFUyA9IGdzdC9nc3RpbmZvLmMKLWdzdF9nc3RpbmZvX09CSkVDVFMgPSBnc3QvZ3N0aW5mby4kKE9CSkVYVCkKLWdzdF9nc3RpbmZvX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RpbmZvX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0aXRlcmF0b3JfU09VUkNFUyA9IGdzdC9nc3RpdGVyYXRvci5jCi1nc3RfZ3N0aXRlcmF0b3JfT0JKRUNUUyA9IGdzdC9nc3RpdGVyYXRvci4kKE9CSkVYVCkKLWdzdF9nc3RpdGVyYXRvcl9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0aXRlcmF0b3JfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RtZW1vcnlfU09VUkNFUyA9IGdzdC9nc3RtZW1vcnkuYwotZ3N0X2dzdG1lbW9yeV9PQkpFQ1RTID0gZ3N0L2dzdG1lbW9yeS4kKE9CSkVYVCkKLWdzdF9nc3RtZW1vcnlfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdG1lbW9yeV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdG1lc3NhZ2VfU09VUkNFUyA9IGdzdC9nc3RtZXNzYWdlLmMKLWdzdF9nc3RtZXNzYWdlX09CSkVDVFMgPSBnc3QvZ3N0bWVzc2FnZS4kKE9CSkVYVCkKLWdzdF9nc3RtZXNzYWdlX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RtZXNzYWdlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0bWV0YV9TT1VSQ0VTID0gZ3N0L2dzdG1ldGEuYwotZ3N0X2dzdG1ldGFfT0JKRUNUUyA9IGdzdC9nc3RtZXRhLiQoT0JKRVhUKQotZ3N0X2dzdG1ldGFfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdG1ldGFfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RtaW5pb2JqZWN0X1NPVVJDRVMgPSBnc3QvZ3N0bWluaW9iamVjdC5jCi1nc3RfZ3N0bWluaW9iamVjdF9PQkpFQ1RTID0gZ3N0L2dzdG1pbmlvYmplY3QuJChPQkpFWFQpCi1nc3RfZ3N0bWluaW9iamVjdF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0bWluaW9iamVjdF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdG9iamVjdF9TT1VSQ0VTID0gZ3N0L2dzdG9iamVjdC5jCi1nc3RfZ3N0b2JqZWN0X09CSkVDVFMgPSBnc3QvZ3N0b2JqZWN0LiQoT0JKRVhUKQotZ3N0X2dzdG9iamVjdF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0b2JqZWN0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0cGFkX1NPVVJDRVMgPSBnc3QvZ3N0cGFkLmMKLWdzdF9nc3RwYWRfT0JKRUNUUyA9IGdzdC9nc3RwYWQuJChPQkpFWFQpCi1nc3RfZ3N0cGFkX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RwYWRfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RwYXJhbXNwZWNzX1NPVVJDRVMgPSBnc3QvZ3N0cGFyYW1zcGVjcy5jCi1nc3RfZ3N0cGFyYW1zcGVjc19PQkpFQ1RTID0gZ3N0L2dzdHBhcmFtc3BlY3MuJChPQkpFWFQpCi1nc3RfZ3N0cGFyYW1zcGVjc19MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0cGFyYW1zcGVjc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdHBpcGVsaW5lX1NPVVJDRVMgPSBnc3QvZ3N0cGlwZWxpbmUuYwotZ3N0X2dzdHBpcGVsaW5lX09CSkVDVFMgPSBnc3QvZ3N0cGlwZWxpbmUuJChPQkpFWFQpCi1nc3RfZ3N0cGlwZWxpbmVfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHBpcGVsaW5lX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0cGx1Z2luX1NPVVJDRVMgPSBnc3QvZ3N0cGx1Z2luLmMKLWdzdF9nc3RwbHVnaW5fT0JKRUNUUyA9IGdzdC9nc3RwbHVnaW4uJChPQkpFWFQpCi1nc3RfZ3N0cGx1Z2luX0xEQUREID0gJChMREFERCkKLWdzdF9nc3RwbHVnaW5fREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3Rwb2xsX1NPVVJDRVMgPSBnc3QvZ3N0cG9sbC5jCi1nc3RfZ3N0cG9sbF9PQkpFQ1RTID0gZ3N0L2dzdHBvbGwuJChPQkpFWFQpCi1nc3RfZ3N0cG9sbF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0cG9sbF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdHByZXNldF9TT1VSQ0VTID0gZ3N0L2dzdHByZXNldC5jCi1nc3RfZ3N0cHJlc2V0X09CSkVDVFMgPSBnc3QvZ3N0cHJlc2V0LiQoT0JKRVhUKQotZ3N0X2dzdHByZXNldF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0cHJlc2V0X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0cHJpbnRmX1NPVVJDRVMgPSBnc3QvZ3N0cHJpbnRmLmMKLWdzdF9nc3RwcmludGZfT0JKRUNUUyA9IGdzdC9nc3RwcmludGYuJChPQkpFWFQpCi1hbV9fREVQRU5ERU5DSUVTXzIgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdHByaW50Zl9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvcHJpbnRmL2xpYmdzdHByaW50Zi5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1nc3RfZ3N0cHJvdGVjdGlvbl9TT1VSQ0VTID0gZ3N0L2dzdHByb3RlY3Rpb24uYwotZ3N0X2dzdHByb3RlY3Rpb25fT0JKRUNUUyA9IGdzdC9nc3Rwcm90ZWN0aW9uLiQoT0JKRVhUKQotZ3N0X2dzdHByb3RlY3Rpb25fTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHByb3RlY3Rpb25fREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RxdWVyeV9TT1VSQ0VTID0gZ3N0L2dzdHF1ZXJ5LmMKLWdzdF9nc3RxdWVyeV9PQkpFQ1RTID0gZ3N0L2dzdHF1ZXJ5LiQoT0JKRVhUKQotZ3N0X2dzdHF1ZXJ5X0xEQUREID0gJChMREFERCkKLWdzdF9nc3RxdWVyeV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdHJlZ2lzdHJ5X1NPVVJDRVMgPSBnc3QvZ3N0cmVnaXN0cnkuYwotZ3N0X2dzdHJlZ2lzdHJ5X09CSkVDVFMgPSBnc3QvZ3N0cmVnaXN0cnkuJChPQkpFWFQpCi1nc3RfZ3N0cmVnaXN0cnlfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHJlZ2lzdHJ5X0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0c2VnbWVudF9TT1VSQ0VTID0gZ3N0L2dzdHNlZ21lbnQuYwotZ3N0X2dzdHNlZ21lbnRfT0JKRUNUUyA9IGdzdC9nc3RzZWdtZW50LiQoT0JKRVhUKQotZ3N0X2dzdHNlZ21lbnRfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHNlZ21lbnRfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3RzdHJlYW1fU09VUkNFUyA9IGdzdC9nc3RzdHJlYW0uYwotZ3N0X2dzdHN0cmVhbV9PQkpFQ1RTID0gZ3N0L2dzdHN0cmVhbS4kKE9CSkVYVCkKLWdzdF9nc3RzdHJlYW1fTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHN0cmVhbV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdHN0cnVjdHVyZV9TT1VSQ0VTID0gZ3N0L2dzdHN0cnVjdHVyZS5jCi1nc3RfZ3N0c3RydWN0dXJlX09CSkVDVFMgPSBnc3QvZ3N0c3RydWN0dXJlLiQoT0JKRVhUKQotZ3N0X2dzdHN0cnVjdHVyZV9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0c3RydWN0dXJlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0c3lzdGVtY2xvY2tfU09VUkNFUyA9IGdzdC9nc3RzeXN0ZW1jbG9jay5jCi1nc3RfZ3N0c3lzdGVtY2xvY2tfT0JKRUNUUyA9IGdzdC9nc3RzeXN0ZW1jbG9jay4kKE9CSkVYVCkKLWdzdF9nc3RzeXN0ZW1jbG9ja19MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0c3lzdGVtY2xvY2tfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3R0YWdfU09VUkNFUyA9IGdzdC9nc3R0YWcuYwotZ3N0X2dzdHRhZ19PQkpFQ1RTID0gZ3N0L2dzdHRhZy4kKE9CSkVYVCkKLWdzdF9nc3R0YWdfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHRhZ19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdHRhZ3NldHRlcl9TT1VSQ0VTID0gZ3N0L2dzdHRhZ3NldHRlci5jCi1nc3RfZ3N0dGFnc2V0dGVyX09CSkVDVFMgPSBnc3QvZ3N0dGFnc2V0dGVyLiQoT0JKRVhUKQotZ3N0X2dzdHRhZ3NldHRlcl9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0dGFnc2V0dGVyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0dGFza19TT1VSQ0VTID0gZ3N0L2dzdHRhc2suYwotZ3N0X2dzdHRhc2tfT0JKRUNUUyA9IGdzdC9nc3R0YXNrLiQoT0JKRVhUKQotZ3N0X2dzdHRhc2tfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHRhc2tfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF9nc3R0b2NfU09VUkNFUyA9IGdzdC9nc3R0b2MuYwotZ3N0X2dzdHRvY19PQkpFQ1RTID0gZ3N0L2dzdHRvYy4kKE9CSkVYVCkKLWdzdF9nc3R0b2NfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHRvY19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdHRvY3NldHRlcl9TT1VSQ0VTID0gZ3N0L2dzdHRvY3NldHRlci5jCi1nc3RfZ3N0dG9jc2V0dGVyX09CSkVDVFMgPSBnc3QvZ3N0dG9jc2V0dGVyLiQoT0JKRVhUKQotZ3N0X2dzdHRvY3NldHRlcl9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0dG9jc2V0dGVyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0dHJhY2VycmVjb3JkX1NPVVJDRVMgPSBnc3QvZ3N0dHJhY2VycmVjb3JkLmMKLWdzdF9nc3R0cmFjZXJyZWNvcmRfT0JKRUNUUyA9ICBcCi0JZ3N0L2dzdF9nc3R0cmFjZXJyZWNvcmQtZ3N0dHJhY2VycmVjb3JkLiQoT0JKRVhUKQotZ3N0X2dzdHRyYWNlcnJlY29yZF9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0dHJhY2VycmVjb3JkX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0dHJhY2VycmVjb3JkX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChnc3RfZ3N0dHJhY2VycmVjb3JkX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWdzdF9nc3R1cmlfU09VUkNFUyA9IGdzdC9nc3R1cmkuYwotZ3N0X2dzdHVyaV9PQkpFQ1RTID0gZ3N0L2dzdHVyaS4kKE9CSkVYVCkKLWdzdF9nc3R1cmlfTERBREQgPSAkKExEQUREKQotZ3N0X2dzdHVyaV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2dzdHV0aWxzX1NPVVJDRVMgPSBnc3QvZ3N0dXRpbHMuYwotZ3N0X2dzdHV0aWxzX09CSkVDVFMgPSBnc3QvZ3N0dXRpbHMuJChPQkpFWFQpCi1nc3RfZ3N0dXRpbHNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nc3RfZ3N0dmFsdWVfU09VUkNFUyA9IGdzdC9nc3R2YWx1ZS5jCi1nc3RfZ3N0dmFsdWVfT0JKRUNUUyA9IGdzdC9nc3R2YWx1ZS4kKE9CSkVYVCkKLWdzdF9nc3R2YWx1ZV9MREFERCA9ICQoTERBREQpCi1nc3RfZ3N0dmFsdWVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWxpYnNfYWRhcHRlcl9TT1VSQ0VTID0gbGlicy9hZGFwdGVyLmMKLWxpYnNfYWRhcHRlcl9PQkpFQ1RTID0gbGlicy9hZGFwdGVyLiQoT0JKRVhUKQotbGlic19hZGFwdGVyX0xEQUREID0gJChMREFERCkKLWxpYnNfYWRhcHRlcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotbGlic19iYXNlcGFyc2VfU09VUkNFUyA9IGxpYnMvYmFzZXBhcnNlLmMKLWxpYnNfYmFzZXBhcnNlX09CSkVDVFMgPSBsaWJzL2Jhc2VwYXJzZS4kKE9CSkVYVCkKLWxpYnNfYmFzZXBhcnNlX0xEQUREID0gJChMREFERCkKLWxpYnNfYmFzZXBhcnNlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1saWJzX2Jhc2VzaW5rX1NPVVJDRVMgPSBsaWJzL2Jhc2VzaW5rLmMKLWxpYnNfYmFzZXNpbmtfT0JKRUNUUyA9IGxpYnMvYmFzZXNpbmsuJChPQkpFWFQpCi1saWJzX2Jhc2VzaW5rX0xEQUREID0gJChMREFERCkKLWxpYnNfYmFzZXNpbmtfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWxpYnNfYmFzZXNyY19TT1VSQ0VTID0gbGlicy9iYXNlc3JjLmMKLWxpYnNfYmFzZXNyY19PQkpFQ1RTID0gbGlicy9iYXNlc3JjLiQoT0JKRVhUKQotbGlic19iYXNlc3JjX0xEQUREID0gJChMREFERCkKLWxpYnNfYmFzZXNyY19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotbGlic19iaXRyZWFkZXJfU09VUkNFUyA9IGxpYnMvYml0cmVhZGVyLmMKLWxpYnNfYml0cmVhZGVyX09CSkVDVFMgPSBsaWJzL2JpdHJlYWRlci4kKE9CSkVYVCkKLWxpYnNfYml0cmVhZGVyX0xEQUREID0gJChMREFERCkKLWxpYnNfYml0cmVhZGVyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1saWJzX2JpdHJlYWRlcl9ub2lubGluZV9TT1VSQ0VTID0gbGlicy9iaXRyZWFkZXItbm9pbmxpbmUuYwotbGlic19iaXRyZWFkZXJfbm9pbmxpbmVfT0JKRUNUUyA9IGxpYnMvYml0cmVhZGVyLW5vaW5saW5lLiQoT0JKRVhUKQotbGlic19iaXRyZWFkZXJfbm9pbmxpbmVfTERBREQgPSAkKExEQUREKQotbGlic19iaXRyZWFkZXJfbm9pbmxpbmVfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWxpYnNfYnl0ZXJlYWRlcl9TT1VSQ0VTID0gbGlicy9ieXRlcmVhZGVyLmMKLWxpYnNfYnl0ZXJlYWRlcl9PQkpFQ1RTID0gbGlicy9ieXRlcmVhZGVyLiQoT0JKRVhUKQotbGlic19ieXRlcmVhZGVyX0xEQUREID0gJChMREFERCkKLWxpYnNfYnl0ZXJlYWRlcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotbGlic19ieXRlcmVhZGVyX25vaW5saW5lX1NPVVJDRVMgPSBsaWJzL2J5dGVyZWFkZXItbm9pbmxpbmUuYwotbGlic19ieXRlcmVhZGVyX25vaW5saW5lX09CSkVDVFMgPSBsaWJzL2J5dGVyZWFkZXItbm9pbmxpbmUuJChPQkpFWFQpCi1saWJzX2J5dGVyZWFkZXJfbm9pbmxpbmVfTERBREQgPSAkKExEQUREKQotbGlic19ieXRlcmVhZGVyX25vaW5saW5lX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1saWJzX2J5dGV3cml0ZXJfU09VUkNFUyA9IGxpYnMvYnl0ZXdyaXRlci5jCi1saWJzX2J5dGV3cml0ZXJfT0JKRUNUUyA9IGxpYnMvYnl0ZXdyaXRlci4kKE9CSkVYVCkKLWxpYnNfYnl0ZXdyaXRlcl9MREFERCA9ICQoTERBREQpCi1saWJzX2J5dGV3cml0ZXJfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWxpYnNfYnl0ZXdyaXRlcl9ub2lubGluZV9TT1VSQ0VTID0gbGlicy9ieXRld3JpdGVyLW5vaW5saW5lLmMKLWxpYnNfYnl0ZXdyaXRlcl9ub2lubGluZV9PQkpFQ1RTID0gbGlicy9ieXRld3JpdGVyLW5vaW5saW5lLiQoT0JKRVhUKQotbGlic19ieXRld3JpdGVyX25vaW5saW5lX0xEQUREID0gJChMREFERCkKLWxpYnNfYnl0ZXdyaXRlcl9ub2lubGluZV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotbGlic19jb2xsZWN0cGFkc19TT1VSQ0VTID0gbGlicy9jb2xsZWN0cGFkcy5jCi1saWJzX2NvbGxlY3RwYWRzX09CSkVDVFMgPSBsaWJzL2NvbGxlY3RwYWRzLiQoT0JKRVhUKQotbGlic19jb2xsZWN0cGFkc19MREFERCA9ICQoTERBREQpCi1saWJzX2NvbGxlY3RwYWRzX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1saWJzX2NvbnRyb2xsZXJfU09VUkNFUyA9IGxpYnMvY29udHJvbGxlci5jCi1saWJzX2NvbnRyb2xsZXJfT0JKRUNUUyA9IGxpYnMvY29udHJvbGxlci4kKE9CSkVYVCkKLWxpYnNfY29udHJvbGxlcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWxpYnNfZmxvd2NvbWJpbmVyX1NPVVJDRVMgPSBsaWJzL2Zsb3djb21iaW5lci5jCi1saWJzX2Zsb3djb21iaW5lcl9PQkpFQ1RTID0gbGlicy9mbG93Y29tYmluZXIuJChPQkpFWFQpCi1saWJzX2Zsb3djb21iaW5lcl9MREFERCA9ICQoTERBREQpCi1saWJzX2Zsb3djb21iaW5lcl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotbGlic19nc3RoYXJuZXNzX1NPVVJDRVMgPSBsaWJzL2dzdGhhcm5lc3MuYwotbGlic19nc3RoYXJuZXNzX09CSkVDVFMgPSBsaWJzL2dzdGhhcm5lc3MuJChPQkpFWFQpCi1saWJzX2dzdGhhcm5lc3NfTERBREQgPSAkKExEQUREKQotbGlic19nc3RoYXJuZXNzX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJzX2dzdGxpYnNjcHBfT0JKRUNUUyA9IGxpYnMvZ3N0bGlic2NwcC4kKE9CSkVYVCkKLWxpYnNfZ3N0bGlic2NwcF9PQkpFQ1RTID0gJChhbV9saWJzX2dzdGxpYnNjcHBfT0JKRUNUUykKLWxpYnNfZ3N0bGlic2NwcF9MREFERCA9ICQoTERBREQpCi1saWJzX2dzdGxpYnNjcHBfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWxpYnNfZ3N0bmV0Y2xpZW50Y2xvY2tfU09VUkNFUyA9IGxpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYwotbGlic19nc3RuZXRjbGllbnRjbG9ja19PQkpFQ1RTID0gbGlicy9nc3RuZXRjbGllbnRjbG9jay4kKE9CSkVYVCkKLWxpYnNfZ3N0bmV0Y2xpZW50Y2xvY2tfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1saWJzX2dzdG5ldHRpbWVwcm92aWRlcl9TT1VSQ0VTID0gbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYwotbGlic19nc3RuZXR0aW1lcHJvdmlkZXJfT0JKRUNUUyA9IGxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLiQoT0JKRVhUKQotbGlic19nc3RuZXR0aW1lcHJvdmlkZXJfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18yKQotbGlic19nc3R0ZXN0Y2xvY2tfU09VUkNFUyA9IGxpYnMvZ3N0dGVzdGNsb2NrLmMKLWxpYnNfZ3N0dGVzdGNsb2NrX09CSkVDVFMgPSBsaWJzL2dzdHRlc3RjbG9jay4kKE9CSkVYVCkKLWxpYnNfZ3N0dGVzdGNsb2NrX0xEQUREID0gJChMREFERCkKLWxpYnNfZ3N0dGVzdGNsb2NrX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1saWJzX2xpYnNhYmlfU09VUkNFUyA9IGxpYnMvbGlic2FiaS5jCi1saWJzX2xpYnNhYmlfT0JKRUNUUyA9IGxpYnMvbGlic2FiaS4kKE9CSkVYVCkKLWxpYnNfbGlic2FiaV9MREFERCA9ICQoTERBREQpCi1saWJzX2xpYnNhYmlfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWxpYnNfcXVldWVhcnJheV9TT1VSQ0VTID0gbGlicy9xdWV1ZWFycmF5LmMKLWxpYnNfcXVldWVhcnJheV9PQkpFQ1RTID0gbGlicy9xdWV1ZWFycmF5LiQoT0JKRVhUKQotbGlic19xdWV1ZWFycmF5X0xEQUREID0gJChMREFERCkKLWxpYnNfcXVldWVhcnJheV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotbGlic19zcGFyc2VmaWxlX1NPVVJDRVMgPSBsaWJzL3NwYXJzZWZpbGUuYwotbGlic19zcGFyc2VmaWxlX09CSkVDVFMgPSBsaWJzL3NwYXJzZWZpbGUuJChPQkpFWFQpCi1saWJzX3NwYXJzZWZpbGVfTERBREQgPSAkKExEQUREKQotbGlic19zcGFyc2VmaWxlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1saWJzX3RyYW5zZm9ybTFfU09VUkNFUyA9IGxpYnMvdHJhbnNmb3JtMS5jCi1saWJzX3RyYW5zZm9ybTFfT0JKRUNUUyA9IGxpYnMvdHJhbnNmb3JtMS4kKE9CSkVYVCkKLWxpYnNfdHJhbnNmb3JtMV9MREFERCA9ICQoTERBREQpCi1saWJzX3RyYW5zZm9ybTFfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWxpYnNfdHJhbnNmb3JtMl9TT1VSQ0VTID0gbGlicy90cmFuc2Zvcm0yLmMKLWxpYnNfdHJhbnNmb3JtMl9PQkpFQ1RTID0gbGlicy90cmFuc2Zvcm0yLiQoT0JKRVhUKQotbGlic190cmFuc2Zvcm0yX0xEQUREID0gJChMREFERCkKLWxpYnNfdHJhbnNmb3JtMl9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotbGlic190eXBlZmluZGhlbHBlcl9TT1VSQ0VTID0gbGlicy90eXBlZmluZGhlbHBlci5jCi1saWJzX3R5cGVmaW5kaGVscGVyX09CSkVDVFMgPSBsaWJzL3R5cGVmaW5kaGVscGVyLiQoT0JKRVhUKQotbGlic190eXBlZmluZGhlbHBlcl9MREFERCA9ICQoTERBREQpCi1saWJzX3R5cGVmaW5kaGVscGVyX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1waXBlbGluZXNfY2xlYW51cF9TT1VSQ0VTID0gcGlwZWxpbmVzL2NsZWFudXAuYwotcGlwZWxpbmVzX2NsZWFudXBfT0JKRUNUUyA9IHBpcGVsaW5lcy9jbGVhbnVwLiQoT0JKRVhUKQotcGlwZWxpbmVzX2NsZWFudXBfTERBREQgPSAkKExEQUREKQotcGlwZWxpbmVzX2NsZWFudXBfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9TT1VSQ0VTID0gcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMKLXBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9PQkpFQ1RTID0gcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLiQoT0JKRVhUKQotcGlwZWxpbmVzX3BhcnNlX2Rpc2FibGVkX0xEQUREID0gJChMREFERCkKLXBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotcGlwZWxpbmVzX3BhcnNlX2xhdW5jaF9TT1VSQ0VTID0gcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jCi1waXBlbGluZXNfcGFyc2VfbGF1bmNoX09CSkVDVFMgPSBwaXBlbGluZXMvcGFyc2UtbGF1bmNoLiQoT0JKRVhUKQotcGlwZWxpbmVzX3BhcnNlX2xhdW5jaF9MREFERCA9ICQoTERBREQpCi1waXBlbGluZXNfcGFyc2VfbGF1bmNoX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1waXBlbGluZXNfcXVldWVfZXJyb3JfU09VUkNFUyA9IHBpcGVsaW5lcy9xdWV1ZS1lcnJvci5jCi1waXBlbGluZXNfcXVldWVfZXJyb3JfT0JKRUNUUyA9IHBpcGVsaW5lcy9xdWV1ZS1lcnJvci4kKE9CSkVYVCkKLXBpcGVsaW5lc19xdWV1ZV9lcnJvcl9MREFERCA9ICQoTERBREQpCi1waXBlbGluZXNfcXVldWVfZXJyb3JfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXBpcGVsaW5lc19zZWVrX1NPVVJDRVMgPSBwaXBlbGluZXMvc2Vlay5jCi1waXBlbGluZXNfc2Vla19PQkpFQ1RTID0gcGlwZWxpbmVzL3NlZWsuJChPQkpFWFQpCi1waXBlbGluZXNfc2Vla19MREFERCA9ICQoTERBREQpCi1waXBlbGluZXNfc2Vla19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotcGlwZWxpbmVzX3NpbXBsZV9sYXVuY2hfbGluZXNfU09VUkNFUyA9ICBcCi0JcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYwotcGlwZWxpbmVzX3NpbXBsZV9sYXVuY2hfbGluZXNfT0JKRUNUUyA9ICBcCi0JcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuJChPQkpFWFQpCi1waXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19MREFERCA9ICQoTERBREQpCi1waXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY2hlY2svbGliZ3N0Y2hlY2stQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotcGlwZWxpbmVzX3N0cmVzc19TT1VSQ0VTID0gcGlwZWxpbmVzL3N0cmVzcy5jCi1waXBlbGluZXNfc3RyZXNzX09CSkVDVFMgPSBwaXBlbGluZXMvc3RyZXNzLiQoT0JKRVhUKQotcGlwZWxpbmVzX3N0cmVzc19MREFERCA9ICQoTERBREQpCi1waXBlbGluZXNfc3RyZXNzX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jaGVjay9saWJnc3RjaGVjay1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi10b29sc19nc3RpbnNwZWN0X1NPVVJDRVMgPSB0b29scy9nc3RpbnNwZWN0LmMKLXRvb2xzX2dzdGluc3BlY3RfT0JKRUNUUyA9IHRvb2xzL2dzdGluc3BlY3QuJChPQkpFWFQpCi10b29sc19nc3RpbnNwZWN0X0xEQUREID0gJChMREFERCkKLXRvb2xzX2dzdGluc3BlY3RfREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLUNYWENPTVBJTEUgPSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQotTFRDWFhDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKLUFNX1ZfQ1hYID0gJChhbV9fdl9DWFhfQEFNX1ZAKQotYW1fX3ZfQ1hYXyA9ICQoYW1fX3ZfQ1hYX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ1hYXzAgPSBAZWNobyAiICBDWFggICAgICIgJEA7Ci1hbV9fdl9DWFhfMSA9IAotQ1hYTEQgPSAkKENYWCkKLUNYWExJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpIFwKLQkkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ1hYTEQgPSAkKGFtX192X0NYWExEX0BBTV9WQCkKLWFtX192X0NYWExEXyA9ICQoYW1fX3ZfQ1hYTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DWFhMRF8wID0gQGVjaG8gIiAgQ1hYTEQgICAiICRAOwotYW1fX3ZfQ1hYTERfMSA9IAotU09VUkNFUyA9IGVsZW1lbnRzL2NhcHNmaWx0ZXIuYyBlbGVtZW50cy9jb25jYXQuYyBlbGVtZW50cy9mYWtlc2luay5jIFwKLQllbGVtZW50cy9mYWtlc3JjLmMgZWxlbWVudHMvZmRzcmMuYyBlbGVtZW50cy9maWxlc2luay5jIFwKLQllbGVtZW50cy9maWxlc3JjLmMgZWxlbWVudHMvZnVubmVsLmMgZWxlbWVudHMvaWRlbnRpdHkuYyBcCi0JZWxlbWVudHMvbXVsdGlxdWV1ZS5jIGVsZW1lbnRzL3F1ZXVlLmMgZWxlbWVudHMvcXVldWUyLmMgXAotCWVsZW1lbnRzL3NlbGVjdG9yLmMgZWxlbWVudHMvc3RyZWFtaWRkZW11eC5jIGVsZW1lbnRzL3RlZS5jIFwKLQllbGVtZW50cy92YWx2ZS5jIGdlbmVyaWMvc2lua3MuYyBnZW5lcmljL3N0YXRlcy5jIGdzdC9nc3QuYyBcCi0JZ3N0L2dzdGFiaS5jIGdzdC9nc3RhdG9taWNxdWV1ZS5jIGdzdC9nc3RiaW4uYyBnc3QvZ3N0YnVmZmVyLmMgXAotCWdzdC9nc3RidWZmZXJsaXN0LmMgZ3N0L2dzdGJ1ZmZlcnBvb2wuYyBnc3QvZ3N0YnVzLmMgXAotCWdzdC9nc3RjYXBzLmMgZ3N0L2dzdGNhcHNmZWF0dXJlcy5jIGdzdC9nc3RjaGlsZHByb3h5LmMgXAotCWdzdC9nc3RjbG9jay5jIGdzdC9nc3Rjb250ZXh0LmMgZ3N0L2dzdGNvbnRyb2xsZXIuYyBcCi0JJChnc3RfZ3N0Y3BwX1NPVVJDRVMpIGdzdC9nc3RkYXRldGltZS5jIGdzdC9nc3RkZXZpY2UuYyBcCi0JZ3N0L2dzdGVsZW1lbnQuYyBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYyBnc3QvZ3N0ZXZlbnQuYyBcCi0JZ3N0L2dzdGdob3N0cGFkLmMgZ3N0L2dzdGluZm8uYyBnc3QvZ3N0aXRlcmF0b3IuYyBcCi0JZ3N0L2dzdG1lbW9yeS5jIGdzdC9nc3RtZXNzYWdlLmMgZ3N0L2dzdG1ldGEuYyBcCi0JZ3N0L2dzdG1pbmlvYmplY3QuYyBnc3QvZ3N0b2JqZWN0LmMgZ3N0L2dzdHBhZC5jIFwKLQlnc3QvZ3N0cGFyYW1zcGVjcy5jIGdzdC9nc3RwaXBlbGluZS5jIGdzdC9nc3RwbHVnaW4uYyBcCi0JZ3N0L2dzdHBvbGwuYyBnc3QvZ3N0cHJlc2V0LmMgZ3N0L2dzdHByaW50Zi5jIFwKLQlnc3QvZ3N0cHJvdGVjdGlvbi5jIGdzdC9nc3RxdWVyeS5jIGdzdC9nc3RyZWdpc3RyeS5jIFwKLQlnc3QvZ3N0c2VnbWVudC5jIGdzdC9nc3RzdHJlYW0uYyBnc3QvZ3N0c3RydWN0dXJlLmMgXAotCWdzdC9nc3RzeXN0ZW1jbG9jay5jIGdzdC9nc3R0YWcuYyBnc3QvZ3N0dGFnc2V0dGVyLmMgXAotCWdzdC9nc3R0YXNrLmMgZ3N0L2dzdHRvYy5jIGdzdC9nc3R0b2NzZXR0ZXIuYyBcCi0JZ3N0L2dzdHRyYWNlcnJlY29yZC5jIGdzdC9nc3R1cmkuYyBnc3QvZ3N0dXRpbHMuYyBcCi0JZ3N0L2dzdHZhbHVlLmMgbGlicy9hZGFwdGVyLmMgbGlicy9iYXNlcGFyc2UuYyBsaWJzL2Jhc2VzaW5rLmMgXAotCWxpYnMvYmFzZXNyYy5jIGxpYnMvYml0cmVhZGVyLmMgbGlicy9iaXRyZWFkZXItbm9pbmxpbmUuYyBcCi0JbGlicy9ieXRlcmVhZGVyLmMgbGlicy9ieXRlcmVhZGVyLW5vaW5saW5lLmMgbGlicy9ieXRld3JpdGVyLmMgXAotCWxpYnMvYnl0ZXdyaXRlci1ub2lubGluZS5jIGxpYnMvY29sbGVjdHBhZHMuYyBcCi0JbGlicy9jb250cm9sbGVyLmMgbGlicy9mbG93Y29tYmluZXIuYyBsaWJzL2dzdGhhcm5lc3MuYyBcCi0JJChsaWJzX2dzdGxpYnNjcHBfU09VUkNFUykgbGlicy9nc3RuZXRjbGllbnRjbG9jay5jIFwKLQlsaWJzL2dzdG5ldHRpbWVwcm92aWRlci5jIGxpYnMvZ3N0dGVzdGNsb2NrLmMgbGlicy9saWJzYWJpLmMgXAotCWxpYnMvcXVldWVhcnJheS5jIGxpYnMvc3BhcnNlZmlsZS5jIGxpYnMvdHJhbnNmb3JtMS5jIFwKLQlsaWJzL3RyYW5zZm9ybTIuYyBsaWJzL3R5cGVmaW5kaGVscGVyLmMgcGlwZWxpbmVzL2NsZWFudXAuYyBcCi0JcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmMgcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jIFwKLQlwaXBlbGluZXMvcXVldWUtZXJyb3IuYyBwaXBlbGluZXMvc2Vlay5jIFwKLQlwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jIHBpcGVsaW5lcy9zdHJlc3MuYyBcCi0JdG9vbHMvZ3N0aW5zcGVjdC5jCi1ESVNUX1NPVVJDRVMgPSBlbGVtZW50cy9jYXBzZmlsdGVyLmMgZWxlbWVudHMvY29uY2F0LmMgXAotCWVsZW1lbnRzL2Zha2VzaW5rLmMgZWxlbWVudHMvZmFrZXNyYy5jIGVsZW1lbnRzL2Zkc3JjLmMgXAotCWVsZW1lbnRzL2ZpbGVzaW5rLmMgZWxlbWVudHMvZmlsZXNyYy5jIGVsZW1lbnRzL2Z1bm5lbC5jIFwKLQllbGVtZW50cy9pZGVudGl0eS5jIGVsZW1lbnRzL211bHRpcXVldWUuYyBlbGVtZW50cy9xdWV1ZS5jIFwKLQllbGVtZW50cy9xdWV1ZTIuYyBlbGVtZW50cy9zZWxlY3Rvci5jIGVsZW1lbnRzL3N0cmVhbWlkZGVtdXguYyBcCi0JZWxlbWVudHMvdGVlLmMgZWxlbWVudHMvdmFsdmUuYyBnZW5lcmljL3NpbmtzLmMgXAotCWdlbmVyaWMvc3RhdGVzLmMgZ3N0L2dzdC5jIGdzdC9nc3RhYmkuYyBnc3QvZ3N0YXRvbWljcXVldWUuYyBcCi0JZ3N0L2dzdGJpbi5jIGdzdC9nc3RidWZmZXIuYyBnc3QvZ3N0YnVmZmVybGlzdC5jIFwKLQlnc3QvZ3N0YnVmZmVycG9vbC5jIGdzdC9nc3RidXMuYyBnc3QvZ3N0Y2Fwcy5jIFwKLQlnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmMgZ3N0L2dzdGNoaWxkcHJveHkuYyBnc3QvZ3N0Y2xvY2suYyBcCi0JZ3N0L2dzdGNvbnRleHQuYyBnc3QvZ3N0Y29udHJvbGxlci5jICQoZ3N0X2dzdGNwcF9TT1VSQ0VTKSBcCi0JZ3N0L2dzdGRhdGV0aW1lLmMgZ3N0L2dzdGRldmljZS5jIGdzdC9nc3RlbGVtZW50LmMgXAotCWdzdC9nc3RlbGVtZW50ZmFjdG9yeS5jIGdzdC9nc3RldmVudC5jIGdzdC9nc3RnaG9zdHBhZC5jIFwKLQlnc3QvZ3N0aW5mby5jIGdzdC9nc3RpdGVyYXRvci5jIGdzdC9nc3RtZW1vcnkuYyBcCi0JZ3N0L2dzdG1lc3NhZ2UuYyBnc3QvZ3N0bWV0YS5jIGdzdC9nc3RtaW5pb2JqZWN0LmMgXAotCWdzdC9nc3RvYmplY3QuYyBnc3QvZ3N0cGFkLmMgZ3N0L2dzdHBhcmFtc3BlY3MuYyBcCi0JZ3N0L2dzdHBpcGVsaW5lLmMgZ3N0L2dzdHBsdWdpbi5jIGdzdC9nc3Rwb2xsLmMgXAotCWdzdC9nc3RwcmVzZXQuYyBnc3QvZ3N0cHJpbnRmLmMgZ3N0L2dzdHByb3RlY3Rpb24uYyBcCi0JZ3N0L2dzdHF1ZXJ5LmMgZ3N0L2dzdHJlZ2lzdHJ5LmMgZ3N0L2dzdHNlZ21lbnQuYyBcCi0JZ3N0L2dzdHN0cmVhbS5jIGdzdC9nc3RzdHJ1Y3R1cmUuYyBnc3QvZ3N0c3lzdGVtY2xvY2suYyBcCi0JZ3N0L2dzdHRhZy5jIGdzdC9nc3R0YWdzZXR0ZXIuYyBnc3QvZ3N0dGFzay5jIGdzdC9nc3R0b2MuYyBcCi0JZ3N0L2dzdHRvY3NldHRlci5jIGdzdC9nc3R0cmFjZXJyZWNvcmQuYyBnc3QvZ3N0dXJpLmMgXAotCWdzdC9nc3R1dGlscy5jIGdzdC9nc3R2YWx1ZS5jIGxpYnMvYWRhcHRlci5jIGxpYnMvYmFzZXBhcnNlLmMgXAotCWxpYnMvYmFzZXNpbmsuYyBsaWJzL2Jhc2VzcmMuYyBsaWJzL2JpdHJlYWRlci5jIFwKLQlsaWJzL2JpdHJlYWRlci1ub2lubGluZS5jIGxpYnMvYnl0ZXJlYWRlci5jIFwKLQlsaWJzL2J5dGVyZWFkZXItbm9pbmxpbmUuYyBsaWJzL2J5dGV3cml0ZXIuYyBcCi0JbGlicy9ieXRld3JpdGVyLW5vaW5saW5lLmMgbGlicy9jb2xsZWN0cGFkcy5jIFwKLQlsaWJzL2NvbnRyb2xsZXIuYyBsaWJzL2Zsb3djb21iaW5lci5jIGxpYnMvZ3N0aGFybmVzcy5jIFwKLQkkKGxpYnNfZ3N0bGlic2NwcF9TT1VSQ0VTKSBsaWJzL2dzdG5ldGNsaWVudGNsb2NrLmMgXAotCWxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMgbGlicy9nc3R0ZXN0Y2xvY2suYyBsaWJzL2xpYnNhYmkuYyBcCi0JbGlicy9xdWV1ZWFycmF5LmMgbGlicy9zcGFyc2VmaWxlLmMgbGlicy90cmFuc2Zvcm0xLmMgXAotCWxpYnMvdHJhbnNmb3JtMi5jIGxpYnMvdHlwZWZpbmRoZWxwZXIuYyBwaXBlbGluZXMvY2xlYW51cC5jIFwKLQlwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQuYyBwaXBlbGluZXMvcGFyc2UtbGF1bmNoLmMgXAotCXBpcGVsaW5lcy9xdWV1ZS1lcnJvci5jIHBpcGVsaW5lcy9zZWVrLmMgXAotCXBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMgcGlwZWxpbmVzL3N0cmVzcy5jIFwKLQl0b29scy9nc3RpbnNwZWN0LmMKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX3R0eV9jb2xvcnNfZHVtbXkgPSBcCi0gIG1nbj0gcmVkPSBncm49IGxnbj0gYmx1PSBicmc9IHN0ZD07IFwKLSAgYW1fX2NvbG9yX3Rlc3RzPW5vCi1hbV9fdHR5X2NvbG9ycyA9IHsgXAotICAkKGFtX190dHlfY29sb3JzX2R1bW15KTsgXAotICBpZiB0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiID0gWG5vOyB0aGVuIFwKLSAgICBhbV9fY29sb3JfdGVzdHM9bm87IFwKLSAgZWxpZiB0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiID0gWGFsd2F5czsgdGhlbiBcCi0gICAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAotICBlbGlmIHRlc3QgIlgkJFRFUk0iICE9IFhkdW1iICYmIHsgdGVzdCAtdCAxOyB9IDI+L2Rldi9udWxsOyB0aGVuIFwKLSAgICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCi0gIGZpOyBcCi0gIGlmIHRlc3QgJCRhbV9fY29sb3JfdGVzdHMgPSB5ZXM7IHRoZW4gXAotICAgIHJlZD0nG1swOzMxbSc7IFwKLSAgICBncm49JxtbMDszMm0nOyBcCi0gICAgbGduPScbWzE7MzJtJzsgXAotICAgIGJsdT0nG1sxOzM0bSc7IFwKLSAgICBtZ249JxtbMDszNW0nOyBcCi0gICAgYnJnPScbWzFtJzsgXAotICAgIHN0ZD0nG1ttJzsgXAotICBmaTsgXAotfQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9fcmVjaGVja19yeCA9IF5bIAldKjpyZWNoZWNrOlsgCV0qCi1hbV9fZ2xvYmFsX3Rlc3RfcmVzdWx0X3J4ID0gXlsgCV0qOmdsb2JhbC10ZXN0LXJlc3VsdDpbIAldKgotYW1fX2NvcHlfaW5fZ2xvYmFsX2xvZ19yeCA9IF5bIAldKjpjb3B5LWluLWdsb2JhbC1sb2c6WyAJXSoKLSMgQSBjb21tYW5kIHRoYXQsIGdpdmVuIGEgbmV3bGluZS1zZXBhcmF0ZWQgbGlzdCBvZiB0ZXN0IG5hbWVzIG9uIHRoZQotIyBzdGFuZGFyZCBpbnB1dCwgcHJpbnQgdGhlIG5hbWUgb2YgdGhlIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJlLXJ1bgotIyB1cG9uICJtYWtlIHJlY2hlY2siLgotYW1fX2xpc3RfcmVjaGVja190ZXN0cyA9ICQoQVdLKSAneyBcCi0gIHJlY2hlY2sgPSAxOyBcCi0gIHdoaWxlICgocmMgPSAoZ2V0bGluZSBsaW5lIDwgKCQkMCAiLnRycyIpKSkgIT0gMCkgXAotICAgIHsgXAotICAgICAgaWYgKHJjIDwgMCkgXAotICAgICAgICB7IFwKLSAgICAgICAgICBpZiAoKGdldGxpbmUgbGluZTIgPCAoJCQwICIubG9nIikpIDwgMCkgXAotCSAgICByZWNoZWNrID0gMDsgXAotICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgIH0gXAotICAgICAgZWxzZSBpZiAobGluZSB+IC8kKGFtX19yZWNoZWNrX3J4KVtuTl1bT29dLykgXAotICAgICAgICB7IFwKLSAgICAgICAgICByZWNoZWNrID0gMDsgXAotICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgIH0gXAotICAgICAgZWxzZSBpZiAobGluZSB+IC8kKGFtX19yZWNoZWNrX3J4KVt5WV1bZUVdW3NTXS8pIFwKLSAgICAgICAgeyBcCi0gICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgfSBcCi0gICAgfTsgXAotICBpZiAocmVjaGVjaykgXAotICAgIHByaW50ICQkMDsgXAotICBjbG9zZSAoJCQwICIudHJzIik7IFwKLSAgY2xvc2UgKCQkMCAiLmxvZyIpOyBcCi19JwotIyBBIGNvbW1hbmQgdGhhdCwgZ2l2ZW4gYSBuZXdsaW5lLXNlcGFyYXRlZCBsaXN0IG9mIHRlc3QgbmFtZXMgb24gdGhlCi0jIHN0YW5kYXJkIGlucHV0LCBjcmVhdGUgdGhlIGdsb2JhbCBsb2cgZnJvbSB0aGVpciAudHJzIGFuZCAubG9nIGZpbGVzLgotYW1fX2NyZWF0ZV9nbG9iYWxfbG9nID0gJChBV0spICcgXAotZnVuY3Rpb24gZmF0YWwobXNnKSBcCi17IFwKLSAgcHJpbnQgImZhdGFsOiBtYWtpbmcgJEA6ICIgbXNnIHwgImNhdCA+JjIiOyBcCi0gIGV4aXQgMTsgXAotfSBcCi1mdW5jdGlvbiByc3Rfc2VjdGlvbihoZWFkZXIpIFwKLXsgXAotICBwcmludCBoZWFkZXI7IFwKLSAgbGVuID0gbGVuZ3RoKGhlYWRlcik7IFwKLSAgZm9yIChpID0gMTsgaSA8PSBsZW47IGkgPSBpICsgMSkgXAotICAgIHByaW50ZiAiPSI7IFwKLSAgcHJpbnRmICJcblxuIjsgXAotfSBcCi17IFwKLSAgY29weV9pbl9nbG9iYWxfbG9nID0gMTsgXAotICBnbG9iYWxfdGVzdF9yZXN1bHQgPSAiUlVOIjsgXAotICB3aGlsZSAoKHJjID0gKGdldGxpbmUgbGluZSA8ICgkJDAgIi50cnMiKSkpICE9IDApIFwKLSAgICB7IFwKLSAgICAgIGlmIChyYyA8IDApIFwKLSAgICAgICAgIGZhdGFsKCJmYWlsZWQgdG8gcmVhZCBmcm9tICIgJCQwICIudHJzIik7IFwKLSAgICAgIGlmIChsaW5lIH4gLyQoYW1fX2dsb2JhbF90ZXN0X3Jlc3VsdF9yeCkvKSBcCi0gICAgICAgIHsgXAotICAgICAgICAgIHN1YigiJChhbV9fZ2xvYmFsX3Rlc3RfcmVzdWx0X3J4KSIsICIiLCBsaW5lKTsgXAotICAgICAgICAgIHN1YigiWyAJXSokJCIsICIiLCBsaW5lKTsgXAotICAgICAgICAgIGdsb2JhbF90ZXN0X3Jlc3VsdCA9IGxpbmU7IFwKLSAgICAgICAgfSBcCi0gICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX2NvcHlfaW5fZ2xvYmFsX2xvZ19yeClbbk5dW29PXS8pIFwKLSAgICAgICAgY29weV9pbl9nbG9iYWxfbG9nID0gMDsgXAotICAgIH07IFwKLSAgaWYgKGNvcHlfaW5fZ2xvYmFsX2xvZykgXAotICAgIHsgXAotICAgICAgcnN0X3NlY3Rpb24oZ2xvYmFsX3Rlc3RfcmVzdWx0ICI6ICIgJCQwKTsgXAotICAgICAgd2hpbGUgKChyYyA9IChnZXRsaW5lIGxpbmUgPCAoJCQwICIubG9nIikpKSAhPSAwKSBcCi0gICAgICB7IFwKLSAgICAgICAgaWYgKHJjIDwgMCkgXAotICAgICAgICAgIGZhdGFsKCJmYWlsZWQgdG8gcmVhZCBmcm9tICIgJCQwICIubG9nIik7IFwKLSAgICAgICAgcHJpbnQgbGluZTsgXAotICAgICAgfTsgXAotICAgICAgcHJpbnRmICJcbiI7IFwKLSAgICB9OyBcCi0gIGNsb3NlICgkJDAgIi50cnMiKTsgXAotICBjbG9zZSAoJCQwICIubG9nIik7IFwKLX0nCi0jIFJlc3RydWN0dXJlZCBUZXh0IHRpdGxlLgotYW1fX3JzdF90aXRsZSA9IHsgc2VkICdzLy4qLyAgICYgICAvO2g7cy8uLz0vZztwO3g7cy8gKiQkLy87cDtnJyAmJiBlY2hvOyB9Ci0jIFNvbGFyaXMgMTAgJ21ha2UnLCBhbmQgc2V2ZXJhbCBvdGhlciB0cmFkaXRpb25hbCAnbWFrZScgaW1wbGVtZW50YXRpb25zLAotIyBwYXNzICItZSIgdG8gJChTSEVMTCksIGFuZCBQT1NJWCAyMDA4IGV2ZW4gcmVxdWlyZXMgdGhpcy4gIFdvcmsgYXJvdW5kIGl0Ci0jIGJ5IGRpc2FibGluZyAtZSAodXNpbmcgdGhlIFhTSSBleHRlbnNpb24gInNldCArZSIpIGlmIGl0J3Mgc2V0LgotYW1fX3NoX2Vfc2V0dXAgPSBjYXNlICQkLSBpbiAqZSopIHNldCArZTs7IGVzYWMKLSMgRGVmYXVsdCBmbGFncyBwYXNzZWQgdG8gdGVzdCBkcml2ZXJzLgotYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MgPSBcCi0gIC0tY29sb3ItdGVzdHMgIiQkYW1fX2NvbG9yX3Rlc3RzIiBcCi0gIC0tZW5hYmxlLWhhcmQtZXJyb3JzICIkJGFtX19lbmFibGVfaGFyZF9lcnJvcnMiIFwKLSAgLS1leHBlY3QtZmFpbHVyZSAiJCRhbV9fZXhwZWN0X2ZhaWx1cmUiCi0jIFRvIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgY29tbWFuZCBydW5uaW5nIHRoZSB0ZXN0LiAgQ3JlYXRlcyB0aGUKLSMgZGlyZWN0b3J5IGZvciB0aGUgbG9nIGlmIG5lZWRlZC4gIFN0b3JlcyBpbiAkZGlyIHRoZSBkaXJlY3RvcnkKLSMgY29udGFpbmluZyAkZiwgaW4gJHRzdCB0aGUgdGVzdCwgaW4gJGxvZyB0aGUgbG9nLiAgRXhlY3V0ZXMgdGhlCi0jIGRldmVsb3Blci0gZGVmaW5lZCB0ZXN0IHNldHVwIEFNX1RFU1RTX0VOVklST05NRU5UIChpZiBhbnkpLCBhbmQKLSMgcGFzc2VzIFRFU1RTX0VOVklST05NRU5ULiAgU2V0IHVwIG9wdGlvbnMgZm9yIHRoZSB3cmFwcGVyIHRoYXQKLSMgd2lsbCBydW4gdGhlIHRlc3Qgc2NyaXB0cyAob3IgdGhlaXIgYXNzb2NpYXRlZCBMT0dfQ09NUElMRVIsIGlmCi0jIHRoeSBoYXZlIG9uZSkuCi1hbV9fY2hlY2tfcHJlID0gXAotJChhbV9fc2hfZV9zZXR1cCk7CQkJCQlcCi0kKGFtX192cGF0aF9hZGpfc2V0dXApICQoYW1fX3ZwYXRoX2FkaikJCQlcCi0kKGFtX190dHlfY29sb3JzKTsJCQkJCVwKLXNyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7CQkJXAotY2FzZSAiJEAiIGluCQkJCQkJXAotICAqLyopIGFtX19vZGlyPWBlY2hvICIuLyRAIiB8IHNlZCAnc3wvW14vXSokJHx8J2A7OwlcCi0gICAgKikgYW1fX29kaXI9Ljs7IAkJCQkJXAotZXNhYzsJCQkJCQkJXAotdGVzdCAieCQkYW1fX29kaXIiID0geCIuIiB8fCB0ZXN0IC1kICIkJGFtX19vZGlyIiAJXAotICB8fCAkKE1LRElSX1ApICIkJGFtX19vZGlyIiB8fCBleGl0ICQkPzsJCVwKLWlmIHRlc3QgLWYgIi4vJCRmIjsgdGhlbiBkaXI9Li87CQkJXAotZWxpZiB0ZXN0IC1mICIkJGYiOyB0aGVuIGRpcj07CQkJCVwKLWVsc2UgZGlyPSIkKHNyY2RpcikvIjsgZmk7CQkJCVwKLXRzdD0kJGRpciQkZjsgbG9nPSckQCc7IAkJCQlcCi1pZiB0ZXN0IC1uICckKERJU0FCTEVfSEFSRF9FUlJPUlMpJzsgdGhlbgkJXAotICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPW5vOyAJCQkJXAotZWxzZQkJCQkJCQlcCi0gIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9eWVzOyAJCQkJXAotZmk7IAkJCQkJCQlcCi1jYXNlICIgJChYRkFJTF9URVNUUykgIiBpbgkJCQlcCi0gICpbXCBcCV0kJGZbXCBcCV0qIHwgKltcIFwJXSQkZGlyJCRmW1wgXAldKikgXAotICAgIGFtX19leHBlY3RfZmFpbHVyZT15ZXM7OwkJCQlcCi0gICopCQkJCQkJCVwKLSAgICBhbV9fZXhwZWN0X2ZhaWx1cmU9bm87OwkJCQlcCi1lc2FjOyAJCQkJCQkJXAotJChBTV9URVNUU19FTlZJUk9OTUVOVCkgJChURVNUU19FTlZJUk9OTUVOVCkKLSMgQSBzaGVsbCBjb21tYW5kIHRvIGdldCB0aGUgbmFtZXMgb2YgdGhlIHRlc3RzIHNjcmlwdHMgd2l0aCBhbnkgcmVnaXN0ZXJlZAotIyBleHRlbnNpb24gcmVtb3ZlZCAoaS5lLiwgZXF1aXZhbGVudGx5LCB0aGUgbmFtZXMgb2YgdGhlIHRlc3QgbG9ncywgd2l0aAotIyB0aGUgJy5sb2cnIGV4dGVuc2lvbiByZW1vdmVkKS4gIFRoZSByZXN1bHQgaXMgc2F2ZWQgaW4gdGhlIHNoZWxsIHZhcmlhYmxlCi0jICckYmFzZXMnLiAgVGhpcyBob25vcnMgcnVudGltZSBvdmVycmlkaW5nIG9mIFRFU1RTIGFuZCBURVNUX0xPR1MuICBTYWRseSwKLSMgd2UgY2Fubm90IHVzZSBzb21ldGhpbmcgc2ltcGxlciwgaW52b2x2aW5nIGUuZy4sICIkKFRFU1RfTE9HUzoubG9nPSkiLAotIyBzaW5jZSB0aGF0IG1pZ2h0IGNhdXNlIHByb2JsZW0gd2l0aCBWUEFUSCByZXdyaXRlcyBmb3Igc3VmZml4LWxlc3MgdGVzdHMuCi0jIFNlZSBhbHNvICd0ZXN0LWhhcm5lc3MtdnBhdGgtcmV3cml0ZS5zaCcgYW5kICd0ZXN0LXRycy1iYXNpYy5zaCcuCi1hbV9fc2V0X1RFU1RTX2Jhc2VzID0gXAotICBiYXNlcz0nJChURVNUX0xPR1MpJzsgXAotICBiYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGk7IGRvbmUgfCBzZWQgJ3MvXC5sb2ckJC8vJ2A7IFwKLSAgYmFzZXM9YGVjaG8gJCRiYXNlc2AKLVJFQ0hFQ0tfTE9HUyA9ICQoVEVTVF9MT0dTKQotQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSBjaGVjayByZWNoZWNrCi1URVNUX1NVSVRFX0xPRyA9IHRlc3Qtc3VpdGUubG9nCi1URVNUX0VYVEVOU0lPTlMgPSBARVhFRVhUQCAudGVzdAotTE9HX0RSSVZFUiA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvdGVzdC1kcml2ZXIKLUxPR19DT01QSUxFID0gJChMT0dfQ09NUElMRVIpICQoQU1fTE9HX0ZMQUdTKSAkKExPR19GTEFHUykKLWFtX19zZXRfYiA9IFwKLSAgY2FzZSAnJEAnIGluIFwKLSAgICAqLyopIFwKLSAgICAgIGNhc2UgJyQqJyBpbiBcCi0gICAgICAgICovKikgYj0nJConOzsgXAotICAgICAgICAgICopIGI9YGVjaG8gJyRAJyB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAotICAgICAgIGVzYWM7OyBcCi0gICAgKikgXAotICAgICAgYj0nJConOzsgXAotICBlc2FjCi1hbV9fdGVzdF9sb2dzMSA9ICQoVEVTVFM6PS5sb2cpCi1hbV9fdGVzdF9sb2dzMiA9ICQoYW1fX3Rlc3RfbG9nczE6QEVYRUVYVEAubG9nPS5sb2cpCi1URVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi50ZXN0LmxvZz0ubG9nKQotVEVTVF9MT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS90ZXN0LWRyaXZlcgotVEVTVF9MT0dfQ09NUElMRSA9ICQoVEVTVF9MT0dfQ09NUElMRVIpICQoQU1fVEVTVF9MT0dfRkxBR1MpIFwKLQkkKFRFU1RfTE9HX0ZMQUdTKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvY29tbW9uL2NoZWNrLm1hayBcCi0JJCh0b3Bfc3JjZGlyKS9kZXBjb21wICQodG9wX3NyY2RpcikvdGVzdC1kcml2ZXIKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gJChsaWJkaXIpL2dzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1BTV9URVNUU19FTlZJUk9OTUVOVCA9IENLX0RFRkFVTFRfVElNRU9VVD0yMCBcCi0JR1NUX1NUQVRFX0lHTk9SRV9FTEVNRU5UUz0iJChTVEFURV9JR05PUkVfRUxFTUVOVFMpIiBcCi0JJChSRUdJU1RSWV9FTlZJUk9OTUVOVCkgXAotCUdTVF9QTFVHSU5fU0NBTk5FUl8xXzA9JCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2hlbHBlcnMvZ3N0LXBsdWdpbi1zY2FubmVyIFwKLQlHU1RfUExVR0lOX1NZU1RFTV9QQVRIXzFfMD0gXAotCUdTVF9QTFVHSU5fUEFUSF8xXzA9JCh0b3BfYnVpbGRkaXIpL3BsdWdpbnMKLQotIyBpbnNwZWN0IGV2ZXJ5IHBsdWdpbiBmZWF0dXJlCi1HU1RfSU5TUEVDVCA9ICQoR1NUX1RPT0xTX0RJUikvZ3N0LWluc3BlY3QtJChHU1RfQVBJX1ZFUlNJT04pCi1DSEVDS19SRUdJU1RSWSA9ICQodG9wX2J1aWxkZGlyKS90ZXN0cy9jaGVjay90ZXN0LXJlZ2lzdHJ5LnJlZwotR1NUX1RPT0xTX0RJUiA9ICQodG9wX2J1aWxkZGlyKS90b29scwotUkVHSVNUUllfRU5WSVJPTk1FTlQgPSBcCi0JR1NUX1JFR0lTVFJZPSQoQ0hFQ0tfUkVHSVNUUlkpCi0KLQotIyB0aGUgY29yZSBkdW1wcyBvZiBzb21lIG1hY2hpbmVzIGhhdmUgUElEcyBhcHBlbmRlZCwgdGVzdCByZWdpc3RyeSBhbmQKLSMgcHJvZmlsaW5nIGRhdGEKLUNMRUFORklMRVMgPSBjb3JlIGNvcmUuKiB0ZXN0LXJlZ2lzdHJ5LiogKi5nY25vICouZ2NkYQotU1VQUFJFU1NJT05TID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0LnN1cHAKLUBHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBQQVJTRV9DSEVDS1MgPSBwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcyBwaXBlbGluZXMvY2xlYW51cCBwaXBlbGluZXMvcGFyc2UtbGF1bmNoCi0KLSMgVGhlc2UgdGVzdHMgZG9uJ3QgZXZlbiBidWlsZCBhbnkgbG9uZ2VyOgotIyAgIGdzdC9nc3RpbmRleC5jCi1AR1NUX0RJU0FCTEVfUEFSU0VfVFJVRUBQQVJTRV9DSEVDS1MgPSBwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQKLQotIyBEbyBub3QgcnVuIHRoZSBhYmkgdGVzdCBpbiBjYXNlIGFueSBvcHRpb24gd2hpY2ggY2F1c2VzIHRoZSBBUEkgdG8gY2hhbmdlIGhhcwotIyBiZWVuIHVzZWQKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUBBQklfQ0hFQ0tTID0gZ3N0L2dzdGFiaQotQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19GQUxTRUBQUklOVEZfQ0hFQ0tTID0gZ3N0L2dzdHByaW50ZgotQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19UUlVFQFBSSU5URl9DSEVDS1MgPSAKLUxJQlNBQklfQ0hFQ0tTID0gbGlicy9saWJzYWJpCi1ASEFWRV9DWFhfRkFMU0VAQ1hYX0NIRUNLUyA9IAotQEhBVkVfQ1hYX1RSVUVAQ1hYX0NIRUNLUyA9IGdzdC9nc3RjcHAgbGlicy9nc3RsaWJzY3BwCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VAUkVHSVNUUllfQ0hFQ0tTID0gXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0CQkJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RiaW4JCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0Y2hpbGRwcm94eQkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGNvbnRleHQJCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0Y29udHJvbGxlcgkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdGVsZW1lbnQJCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0ZWxlbWVudGZhY3RvcnkJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RldmVudAkJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RnaG9zdHBhZAkJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RwbHVnaW4JCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlnc3QvZ3N0cHJlc2V0CQkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZ3N0L2dzdHByb3RlY3Rpb24JCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RxdWVyeQkJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3RyZWdpc3RyeQkJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3R1cmkgIAkJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdzdC9nc3R1dGlscwkJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWdlbmVyaWMvc2lua3MJCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9jYXBzZmlsdGVyCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9jb25jYXQJCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9mYWtlc2luawkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZmFrZXNyYwkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvZmRzcmMJCQkgIAlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL2ZpbGVzaW5rCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9maWxlc3JjCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9mdW5uZWwJCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAllbGVtZW50cy9pZGVudGl0eQkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvbXVsdGlxdWV1ZQkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvc2VsZWN0b3IJCQlcCi1AR1NUX0RJU0FCTEVfUkVHSVNUUllfRkFMU0VACWVsZW1lbnRzL3RlZQkJCSAgCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvcXVldWUyICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvdmFsdmUgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJZWxlbWVudHMvc3RyZWFtaWRkZW11eAkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9iYXNlcGFyc2UJCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlsaWJzL2Jhc2VzcmMJCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlsaWJzL2Jhc2VzaW5rCQkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9zcGFyc2VmaWxlCQkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9jb250cm9sbGVyCQkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy9xdWV1ZWFycmF5CQkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJbGlicy90eXBlZmluZGhlbHBlcgkJCVwKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9GQUxTRUAJcGlwZWxpbmVzL3NlZWsJCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlwaXBlbGluZXMvc3RyZXNzCQkJXAotQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0ZBTFNFQAlwaXBlbGluZXMvcXVldWUtZXJyb3IKLQotCi0jIGlmIGl0J3MgY2FsbGluZyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSwgaXQgd2lsbCBwcm9iYWJseSBub3Qgd29yayB3aXRob3V0Ci0jIGEgcmVnaXN0cnkKLUBHU1RfRElTQUJMRV9SRUdJU1RSWV9UUlVFQFJFR0lTVFJZX0NIRUNLUyA9IAotCi0jIGVsZW1lbnRzIHRvIGlnbm9yZSBmb3IgdGhlIHN0YXRlIHRlc3RzCi0jIFNUQVRFX0lHTk9SRV9FTEVNRU5UUyA9Ci1URVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCi1ub2luc3RfSEVBREVSUyA9IFwKLQlnc3QvY2Fwc2xpc3QuaCBcCi0JZ3N0L3N0cnVjdF9hcm0uaCBcCi0JZ3N0L3N0cnVjdF9pMzg2LmggXAotCWdzdC9zdHJ1Y3RfaHBwYS5oIFwKLQlnc3Qvc3RydWN0X3BwYzMyLmggXAotCWdzdC9zdHJ1Y3RfcHBjNjQuaCBcCi0JZ3N0L3N0cnVjdF9zcGFyYy5oIFwKLQlnc3Qvc3RydWN0X3g4Nl82NC5oIFwKLQlsaWJzL3N0cnVjdF9hcm0uaCBcCi0JbGlicy9zdHJ1Y3RfaTM4Ni5oIFwKLQlsaWJzL3N0cnVjdF9ocHBhLmggXAotCWxpYnMvc3RydWN0X3BwYzMyLmggXAotCWxpYnMvc3RydWN0X3BwYzY0LmggXAotCWxpYnMvc3RydWN0X3NwYXJjLmggXAotCWxpYnMvc3RydWN0X3g4Nl82NC5oCi0KLUVYVFJBX0RJU1QgPSBcCi0JbGlicy90ZXN0X3RyYW5zZm9ybS5jCi0KLUFNX0NGTEFHUyA9ICQoUFRIUkVBRF9DRkxBR1MpICQoR1NUX09CSl9DRkxBR1MpIC1VR19ESVNBQkxFX0FTU0VSVCAtVUdfRElTQUJMRV9DQVNUX0NIRUNLUyBcCi0JLURHU1RfQ0hFQ0tfVEVTVF9FTlZJUk9OTUVOVF9CRUFDT049IlwiR1NUX1NUQVRFX0lHTk9SRV9FTEVNRU5UU1wiIgotCi1BTV9DWFhGTEFHUyA9ICQoR1NUX09CSl9DWFhGTEFHUykgLVVHX0RJU0FCTEVfQVNTRVJUIC1VR19ESVNBQkxFX0NBU1RfQ0hFQ0tTIFwKLQktREdTVF9DSEVDS19URVNUX0VOVklST05NRU5UX0JFQUNPTj0iXCJHU1RfU1RBVEVfSUdOT1JFX0VMRU1FTlRTXCIiCi0KLUxEQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NoZWNrL2xpYmdzdGNoZWNrLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKEdTVF9PQkpfTElCUykKLQotZ3N0X2dzdGNwcF9TT1VSQ0VTID0gZ3N0L2dzdGNwcC5jYwotbGlic19nc3RsaWJzY3BwX1NPVVJDRVMgPSBsaWJzL2dzdGxpYnNjcHAuY2MKLWdzdF9nc3R0cmFjZXJyZWNvcmRfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChBTV9DRkxBR1MpIC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkKLWdzdF9nc3R1dGlsc19MREFERCA9ICQoTERBREQpICQoR1NMX0xJQlMpICQoR01QX0xJQlMpCi1nc3RfZ3N0cHJpbnRmX0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvcHJpbnRmL2xpYmdzdHByaW50Zi5sYSBcCi0JJChMREFERCkKLQotZWxlbWVudHNfZmRzcmNfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChBTV9DRkxBR1MpIFwKLQktRFRFU1RGSUxFPVwiJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWNcIgotCi1lbGVtZW50c19maWxlc3JjX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoQU1fQ0ZMQUdTKSBcCi0JLURURVNURklMRT1cIiQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjXCIKLQotbGlic19jb250cm9sbGVyX0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoTERBREQpCi0KLWxpYnNfZ3N0bmV0Y2xpZW50Y2xvY2tfTERBREQgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L25ldC9saWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoTERBREQpCi0KLWxpYnNfZ3N0bmV0dGltZXByb3ZpZGVyX0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKEdJT19MSUJTKSAkKExEQUREKQotCi0KLSMgdmFsZ3JpbmQgdGVzdGluZwotIyB0aGVzZSBqdXN0IG5lZWQgdmFsZ3JpbmQgZml4aW5nLCBwZXJpb2QKLVZBTEdSSU5EX1RPX0ZJWCA9IFwKLQlnc3QvZ3N0aW5mbyBcCi0JZ3N0L2dzdHRyYWNlcnJlY29yZCBcCi0JdG9vbHMvZ3N0aW5zcGVjdAotCi1WQUxHUklORF9JR05PUkUgPSBcCi0JcGlwZWxpbmVzL3N0cmVzcwotCi0KLSMgdGhlc2UgbmVlZCBmaXhpbmcgYmVjYXVzZSB0aGUgdGhyZWFkcyBjYXVzZSBzZWdmYXVsdHMgdW5kZXIgdmFsZ3JpbmQKLVRFU1RTX1RIUkVBREVEID0gXAotCWdzdC9nc3RtaW5pb2JqZWN0IAkJCVwKLQlnc3QvZ3N0b2JqZWN0Ci0KLVZBTEdSSU5EX1RFU1RTX0RJU0FCTEUgPSBcCi0JJChURVNUU19USFJFQURFRCkJCQkJCVwKLQkkKFZBTEdSSU5EX0lHTk9SRSkJCQkJCVwKLQkkKFZBTEdSSU5EX1RPX0ZJWCkKLQotCi0jIGluZGV4ZXJzIGRvZXMgbm90IGdldCB0ZXN0ZWQgeWV0Ci1DT1ZFUkFHRV9ESVJTID0gXAotCWdzdCBcCi0JbGlicy9nc3QvYmFzZSBcCi0JbGlicy9nc3QvY29udHJvbGxlciBcCi0JbGlicy9nc3QvY2hlY2sgXAotCWxpYnMvZ3N0L25ldCBcCi0JcGx1Z2lucy9lbGVtZW50cwotCi1DT1ZFUkFHRV9GSUxFUyA9ICQoZm9yZWFjaCBkaXIsJChDT1ZFUkFHRV9ESVJTKSwkKHdpbGRjYXJkICQodG9wX2J1aWxkZGlyKS8kKGRpcikvKi5nY292KSkKLUNPVkVSQUdFX0ZJTEVTX1JFTCA9ICQoc3Vic3QgJCh0b3BfYnVpbGRkaXIpLywsJChDT1ZFUkFHRV9GSUxFUykpCi1DT1ZFUkFHRV9PVVRfRklMRVMgPSAkKGZvcmVhY2ggZGlyLCQoQ09WRVJBR0VfRElSUyksJCh3aWxkY2FyZCAkKHRvcF9idWlsZGRpcikvJChkaXIpLyouZ2Nvdi5vdXQpKQotQ09WRVJBR0VfT1VUX0ZJTEVTX1JFTCA9ICQoc3Vic3QgJCh0b3BfYnVpbGRkaXIpLywsJChDT1ZFUkFHRV9PVVRfRklMRVMpKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAuY2MgLmxvIC5sb2cgLm8gLm9iaiAudGVzdCAudGVzdCQoRVhFRVhUKSAudHJzCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29tbW9uL2NoZWNrLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9jaGVjay9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9jaGVjay9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHRvcF9zcmNkaXIpL2NvbW1vbi9jaGVjay5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLWNoZWNrUFJPR1JBTVM6Ci0JQGxpc3Q9JyQoY2hlY2tfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLWNsZWFuLW5vaW5zdFBST0dSQU1TOgotCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKToKLQlAJChNS0RJUl9QKSBlbGVtZW50cwotCUA6ID4gZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi1lbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIGVsZW1lbnRzLyQoREVQRElSKQotCUA6ID4gZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotZWxlbWVudHMvY2Fwc2ZpbHRlci4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9jYXBzZmlsdGVyJChFWEVFWFQpOiAkKGVsZW1lbnRzX2NhcHNmaWx0ZXJfT0JKRUNUUykgJChlbGVtZW50c19jYXBzZmlsdGVyX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19jYXBzZmlsdGVyX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2NhcHNmaWx0ZXIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfY2Fwc2ZpbHRlcl9PQkpFQ1RTKSAkKGVsZW1lbnRzX2NhcHNmaWx0ZXJfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2NvbmNhdC4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9jb25jYXQkKEVYRUVYVCk6ICQoZWxlbWVudHNfY29uY2F0X09CSkVDVFMpICQoZWxlbWVudHNfY29uY2F0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19jb25jYXRfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvY29uY2F0JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2NvbmNhdF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2NvbmNhdF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZmFrZXNpbmsuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvZmFrZXNpbmskKEVYRUVYVCk6ICQoZWxlbWVudHNfZmFrZXNpbmtfT0JKRUNUUykgJChlbGVtZW50c19mYWtlc2lua19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfZmFrZXNpbmtfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvZmFrZXNpbmskKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfZmFrZXNpbmtfT0JKRUNUUykgJChlbGVtZW50c19mYWtlc2lua19MREFERCkgJChMSUJTKQotZWxlbWVudHMvZmFrZXNyYy4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9mYWtlc3JjJChFWEVFWFQpOiAkKGVsZW1lbnRzX2Zha2VzcmNfT0JKRUNUUykgJChlbGVtZW50c19mYWtlc3JjX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19mYWtlc3JjX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2Zha2VzcmMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfZmFrZXNyY19PQkpFQ1RTKSAkKGVsZW1lbnRzX2Zha2VzcmNfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2Zkc3JjLWZkc3JjLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2Zkc3JjJChFWEVFWFQpOiAkKGVsZW1lbnRzX2Zkc3JjX09CSkVDVFMpICQoZWxlbWVudHNfZmRzcmNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2Zkc3JjX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2Zkc3JjJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19mZHNyY19MSU5LKSAkKGVsZW1lbnRzX2Zkc3JjX09CSkVDVFMpICQoZWxlbWVudHNfZmRzcmNfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2ZpbGVzaW5rLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2ZpbGVzaW5rJChFWEVFWFQpOiAkKGVsZW1lbnRzX2ZpbGVzaW5rX09CSkVDVFMpICQoZWxlbWVudHNfZmlsZXNpbmtfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2ZpbGVzaW5rX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2ZpbGVzaW5rJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2ZpbGVzaW5rX09CSkVDVFMpICQoZWxlbWVudHNfZmlsZXNpbmtfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9maWxlc3JjJChFWEVFWFQpOiAkKGVsZW1lbnRzX2ZpbGVzcmNfT0JKRUNUUykgJChlbGVtZW50c19maWxlc3JjX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19maWxlc3JjX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2ZpbGVzcmMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2ZpbGVzcmNfTElOSykgJChlbGVtZW50c19maWxlc3JjX09CSkVDVFMpICQoZWxlbWVudHNfZmlsZXNyY19MREFERCkgJChMSUJTKQotZWxlbWVudHMvZnVubmVsLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2Z1bm5lbCQoRVhFRVhUKTogJChlbGVtZW50c19mdW5uZWxfT0JKRUNUUykgJChlbGVtZW50c19mdW5uZWxfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2Z1bm5lbF9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9mdW5uZWwkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfZnVubmVsX09CSkVDVFMpICQoZWxlbWVudHNfZnVubmVsX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9pZGVudGl0eS4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9pZGVudGl0eSQoRVhFRVhUKTogJChlbGVtZW50c19pZGVudGl0eV9PQkpFQ1RTKSAkKGVsZW1lbnRzX2lkZW50aXR5X0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19pZGVudGl0eV9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9pZGVudGl0eSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19pZGVudGl0eV9PQkpFQ1RTKSAkKGVsZW1lbnRzX2lkZW50aXR5X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9tdWx0aXF1ZXVlLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL211bHRpcXVldWUkKEVYRUVYVCk6ICQoZWxlbWVudHNfbXVsdGlxdWV1ZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX211bHRpcXVldWVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX211bHRpcXVldWVfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvbXVsdGlxdWV1ZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19tdWx0aXF1ZXVlX09CSkVDVFMpICQoZWxlbWVudHNfbXVsdGlxdWV1ZV9MREFERCkgJChMSUJTKQotZWxlbWVudHMvcXVldWUuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvcXVldWUkKEVYRUVYVCk6ICQoZWxlbWVudHNfcXVldWVfT0JKRUNUUykgJChlbGVtZW50c19xdWV1ZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfcXVldWVfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcXVldWUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfcXVldWVfT0JKRUNUUykgJChlbGVtZW50c19xdWV1ZV9MREFERCkgJChMSUJTKQotZWxlbWVudHMvcXVldWUyLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3F1ZXVlMiQoRVhFRVhUKTogJChlbGVtZW50c19xdWV1ZTJfT0JKRUNUUykgJChlbGVtZW50c19xdWV1ZTJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3F1ZXVlMl9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9xdWV1ZTIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfcXVldWUyX09CSkVDVFMpICQoZWxlbWVudHNfcXVldWUyX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9zZWxlY3Rvci4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9zZWxlY3RvciQoRVhFRVhUKTogJChlbGVtZW50c19zZWxlY3Rvcl9PQkpFQ1RTKSAkKGVsZW1lbnRzX3NlbGVjdG9yX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19zZWxlY3Rvcl9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9zZWxlY3RvciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19zZWxlY3Rvcl9PQkpFQ1RTKSAkKGVsZW1lbnRzX3NlbGVjdG9yX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9zdHJlYW1pZGRlbXV4LiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3N0cmVhbWlkZGVtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfc3RyZWFtaWRkZW11eF9PQkpFQ1RTKSAkKGVsZW1lbnRzX3N0cmVhbWlkZGVtdXhfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3N0cmVhbWlkZGVtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvc3RyZWFtaWRkZW11eCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19zdHJlYW1pZGRlbXV4X09CSkVDVFMpICQoZWxlbWVudHNfc3RyZWFtaWRkZW11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvdGVlLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3RlZSQoRVhFRVhUKTogJChlbGVtZW50c190ZWVfT0JKRUNUUykgJChlbGVtZW50c190ZWVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3RlZV9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy90ZWUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfdGVlX09CSkVDVFMpICQoZWxlbWVudHNfdGVlX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy92YWx2ZS4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy92YWx2ZSQoRVhFRVhUKTogJChlbGVtZW50c192YWx2ZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX3ZhbHZlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c192YWx2ZV9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy92YWx2ZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c192YWx2ZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX3ZhbHZlX0xEQUREKSAkKExJQlMpCi1nZW5lcmljLyQoYW1fX2RpcnN0YW1wKToKLQlAJChNS0RJUl9QKSBnZW5lcmljCi0JQDogPiBnZW5lcmljLyQoYW1fX2RpcnN0YW1wKQotZ2VuZXJpYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIGdlbmVyaWMvJChERVBESVIpCi0JQDogPiBnZW5lcmljLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLWdlbmVyaWMvc2lua3MuJChPQkpFWFQpOiBnZW5lcmljLyQoYW1fX2RpcnN0YW1wKSBcCi0JZ2VuZXJpYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdlbmVyaWMvc2lua3MkKEVYRUVYVCk6ICQoZ2VuZXJpY19zaW5rc19PQkpFQ1RTKSAkKGdlbmVyaWNfc2lua3NfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dlbmVyaWNfc2lua3NfREVQRU5ERU5DSUVTKSBnZW5lcmljLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnZW5lcmljL3NpbmtzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdlbmVyaWNfc2lua3NfT0JKRUNUUykgJChnZW5lcmljX3NpbmtzX0xEQUREKSAkKExJQlMpCi1nZW5lcmljL3N0YXRlcy4kKE9CSkVYVCk6IGdlbmVyaWMvJChhbV9fZGlyc3RhbXApIFwKLQlnZW5lcmljLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ2VuZXJpYy9zdGF0ZXMkKEVYRUVYVCk6ICQoZ2VuZXJpY19zdGF0ZXNfT0JKRUNUUykgJChnZW5lcmljX3N0YXRlc19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ2VuZXJpY19zdGF0ZXNfREVQRU5ERU5DSUVTKSBnZW5lcmljLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnZW5lcmljL3N0YXRlcyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnZW5lcmljX3N0YXRlc19PQkpFQ1RTKSAkKGdlbmVyaWNfc3RhdGVzX0xEQUREKSAkKExJQlMpCi1nc3QvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIGdzdAotCUA6ID4gZ3N0LyQoYW1fX2RpcnN0YW1wKQotZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6Ci0JQCQoTUtESVJfUCkgZ3N0LyQoREVQRElSKQotCUA6ID4gZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLWdzdC9nc3QuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIGdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3QkKEVYRUVYVCk6ICQoZ3N0X2dzdF9PQkpFQ1RTKSAkKGdzdF9nc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdF9PQkpFQ1RTKSAkKGdzdF9nc3RfTERBREQpICQoTElCUykKLWdzdC9nc3RhYmkuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0YWJpJChFWEVFWFQpOiAkKGdzdF9nc3RhYmlfT0JKRUNUUykgJChnc3RfZ3N0YWJpX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0YWJpX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0YWJpJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RhYmlfT0JKRUNUUykgJChnc3RfZ3N0YWJpX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0YXRvbWljcXVldWUuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0YXRvbWljcXVldWUkKEVYRUVYVCk6ICQoZ3N0X2dzdGF0b21pY3F1ZXVlX09CSkVDVFMpICQoZ3N0X2dzdGF0b21pY3F1ZXVlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0YXRvbWljcXVldWVfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RhdG9taWNxdWV1ZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0YXRvbWljcXVldWVfT0JKRUNUUykgJChnc3RfZ3N0YXRvbWljcXVldWVfTERBREQpICQoTElCUykKLWdzdC9nc3RiaW4uJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0YmluJChFWEVFWFQpOiAkKGdzdF9nc3RiaW5fT0JKRUNUUykgJChnc3RfZ3N0YmluX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0YmluX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0YmluJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RiaW5fT0JKRUNUUykgJChnc3RfZ3N0YmluX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0YnVmZmVyLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdGJ1ZmZlciQoRVhFRVhUKTogJChnc3RfZ3N0YnVmZmVyX09CSkVDVFMpICQoZ3N0X2dzdGJ1ZmZlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdGJ1ZmZlcl9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdGJ1ZmZlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0YnVmZmVyX09CSkVDVFMpICQoZ3N0X2dzdGJ1ZmZlcl9MREFERCkgJChMSUJTKQotZ3N0L2dzdGJ1ZmZlcmxpc3QuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0YnVmZmVybGlzdCQoRVhFRVhUKTogJChnc3RfZ3N0YnVmZmVybGlzdF9PQkpFQ1RTKSAkKGdzdF9nc3RidWZmZXJsaXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0YnVmZmVybGlzdF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdGJ1ZmZlcmxpc3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGJ1ZmZlcmxpc3RfT0JKRUNUUykgJChnc3RfZ3N0YnVmZmVybGlzdF9MREFERCkgJChMSUJTKQotZ3N0L2dzdGJ1ZmZlcnBvb2wuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0YnVmZmVycG9vbCQoRVhFRVhUKTogJChnc3RfZ3N0YnVmZmVycG9vbF9PQkpFQ1RTKSAkKGdzdF9nc3RidWZmZXJwb29sX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0YnVmZmVycG9vbF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdGJ1ZmZlcnBvb2wkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGJ1ZmZlcnBvb2xfT0JKRUNUUykgJChnc3RfZ3N0YnVmZmVycG9vbF9MREFERCkgJChMSUJTKQotZ3N0L2dzdGJ1cy4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RidXMkKEVYRUVYVCk6ICQoZ3N0X2dzdGJ1c19PQkpFQ1RTKSAkKGdzdF9nc3RidXNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RidXNfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RidXMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGJ1c19PQkpFQ1RTKSAkKGdzdF9nc3RidXNfTERBREQpICQoTElCUykKLWdzdC9nc3RjYXBzLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdGNhcHMkKEVYRUVYVCk6ICQoZ3N0X2dzdGNhcHNfT0JKRUNUUykgJChnc3RfZ3N0Y2Fwc19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdGNhcHNfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RjYXBzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RjYXBzX09CSkVDVFMpICQoZ3N0X2dzdGNhcHNfTERBREQpICQoTElCUykKLWdzdC9nc3RjYXBzZmVhdHVyZXMuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0Y2Fwc2ZlYXR1cmVzJChFWEVFWFQpOiAkKGdzdF9nc3RjYXBzZmVhdHVyZXNfT0JKRUNUUykgJChnc3RfZ3N0Y2Fwc2ZlYXR1cmVzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0Y2Fwc2ZlYXR1cmVzX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0Y2Fwc2ZlYXR1cmVzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RjYXBzZmVhdHVyZXNfT0JKRUNUUykgJChnc3RfZ3N0Y2Fwc2ZlYXR1cmVzX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0Y2hpbGRwcm94eS4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RjaGlsZHByb3h5JChFWEVFWFQpOiAkKGdzdF9nc3RjaGlsZHByb3h5X09CSkVDVFMpICQoZ3N0X2dzdGNoaWxkcHJveHlfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RjaGlsZHByb3h5X0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0Y2hpbGRwcm94eSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0Y2hpbGRwcm94eV9PQkpFQ1RTKSAkKGdzdF9nc3RjaGlsZHByb3h5X0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0Y2xvY2suJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0Y2xvY2skKEVYRUVYVCk6ICQoZ3N0X2dzdGNsb2NrX09CSkVDVFMpICQoZ3N0X2dzdGNsb2NrX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0Y2xvY2tfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RjbG9jayQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0Y2xvY2tfT0JKRUNUUykgJChnc3RfZ3N0Y2xvY2tfTERBREQpICQoTElCUykKLWdzdC9nc3Rjb250ZXh0LiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdGNvbnRleHQkKEVYRUVYVCk6ICQoZ3N0X2dzdGNvbnRleHRfT0JKRUNUUykgJChnc3RfZ3N0Y29udGV4dF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdGNvbnRleHRfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3Rjb250ZXh0JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3Rjb250ZXh0X09CSkVDVFMpICQoZ3N0X2dzdGNvbnRleHRfTERBREQpICQoTElCUykKLWdzdC9nc3Rjb250cm9sbGVyLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdGNvbnRyb2xsZXIkKEVYRUVYVCk6ICQoZ3N0X2dzdGNvbnRyb2xsZXJfT0JKRUNUUykgJChnc3RfZ3N0Y29udHJvbGxlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdGNvbnRyb2xsZXJfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3Rjb250cm9sbGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3Rjb250cm9sbGVyX09CSkVDVFMpICQoZ3N0X2dzdGNvbnRyb2xsZXJfTERBREQpICQoTElCUykKLWdzdC9nc3RjcHAuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0Y3BwJChFWEVFWFQpOiAkKGdzdF9nc3RjcHBfT0JKRUNUUykgJChnc3RfZ3N0Y3BwX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0Y3BwX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0Y3BwJChFWEVFWFQpCi0JJChBTV9WX0NYWExEKSQoQ1hYTElOSykgJChnc3RfZ3N0Y3BwX09CSkVDVFMpICQoZ3N0X2dzdGNwcF9MREFERCkgJChMSUJTKQotZ3N0L2dzdGRhdGV0aW1lLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdGRhdGV0aW1lJChFWEVFWFQpOiAkKGdzdF9nc3RkYXRldGltZV9PQkpFQ1RTKSAkKGdzdF9nc3RkYXRldGltZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdGRhdGV0aW1lX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0ZGF0ZXRpbWUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGRhdGV0aW1lX09CSkVDVFMpICQoZ3N0X2dzdGRhdGV0aW1lX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0ZGV2aWNlLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdGRldmljZSQoRVhFRVhUKTogJChnc3RfZ3N0ZGV2aWNlX09CSkVDVFMpICQoZ3N0X2dzdGRldmljZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdGRldmljZV9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdGRldmljZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0ZGV2aWNlX09CSkVDVFMpICQoZ3N0X2dzdGRldmljZV9MREFERCkgJChMSUJTKQotZ3N0L2dzdGVsZW1lbnQuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0ZWxlbWVudCQoRVhFRVhUKTogJChnc3RfZ3N0ZWxlbWVudF9PQkpFQ1RTKSAkKGdzdF9nc3RlbGVtZW50X0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0ZWxlbWVudF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdGVsZW1lbnQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGVsZW1lbnRfT0JKRUNUUykgJChnc3RfZ3N0ZWxlbWVudF9MREFERCkgJChMSUJTKQotZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdGVsZW1lbnRmYWN0b3J5JChFWEVFWFQpOiAkKGdzdF9nc3RlbGVtZW50ZmFjdG9yeV9PQkpFQ1RTKSAkKGdzdF9nc3RlbGVtZW50ZmFjdG9yeV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdGVsZW1lbnRmYWN0b3J5X0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGVsZW1lbnRmYWN0b3J5X09CSkVDVFMpICQoZ3N0X2dzdGVsZW1lbnRmYWN0b3J5X0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0ZXZlbnQuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0ZXZlbnQkKEVYRUVYVCk6ICQoZ3N0X2dzdGV2ZW50X09CSkVDVFMpICQoZ3N0X2dzdGV2ZW50X0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0ZXZlbnRfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RldmVudCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0ZXZlbnRfT0JKRUNUUykgJChnc3RfZ3N0ZXZlbnRfTERBREQpICQoTElCUykKLWdzdC9nc3RnaG9zdHBhZC4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RnaG9zdHBhZCQoRVhFRVhUKTogJChnc3RfZ3N0Z2hvc3RwYWRfT0JKRUNUUykgJChnc3RfZ3N0Z2hvc3RwYWRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RnaG9zdHBhZF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdGdob3N0cGFkJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RnaG9zdHBhZF9PQkpFQ1RTKSAkKGdzdF9nc3RnaG9zdHBhZF9MREFERCkgJChMSUJTKQotZ3N0L2dzdGluZm8uJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0aW5mbyQoRVhFRVhUKTogJChnc3RfZ3N0aW5mb19PQkpFQ1RTKSAkKGdzdF9nc3RpbmZvX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0aW5mb19ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdGluZm8kKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGluZm9fT0JKRUNUUykgJChnc3RfZ3N0aW5mb19MREFERCkgJChMSUJTKQotZ3N0L2dzdGl0ZXJhdG9yLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdGl0ZXJhdG9yJChFWEVFWFQpOiAkKGdzdF9nc3RpdGVyYXRvcl9PQkpFQ1RTKSAkKGdzdF9nc3RpdGVyYXRvcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdGl0ZXJhdG9yX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0aXRlcmF0b3IkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdGl0ZXJhdG9yX09CSkVDVFMpICQoZ3N0X2dzdGl0ZXJhdG9yX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0bWVtb3J5LiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdG1lbW9yeSQoRVhFRVhUKTogJChnc3RfZ3N0bWVtb3J5X09CSkVDVFMpICQoZ3N0X2dzdG1lbW9yeV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdG1lbW9yeV9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdG1lbW9yeSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0bWVtb3J5X09CSkVDVFMpICQoZ3N0X2dzdG1lbW9yeV9MREFERCkgJChMSUJTKQotZ3N0L2dzdG1lc3NhZ2UuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0bWVzc2FnZSQoRVhFRVhUKTogJChnc3RfZ3N0bWVzc2FnZV9PQkpFQ1RTKSAkKGdzdF9nc3RtZXNzYWdlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0bWVzc2FnZV9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdG1lc3NhZ2UkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdG1lc3NhZ2VfT0JKRUNUUykgJChnc3RfZ3N0bWVzc2FnZV9MREFERCkgJChMSUJTKQotZ3N0L2dzdG1ldGEuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0bWV0YSQoRVhFRVhUKTogJChnc3RfZ3N0bWV0YV9PQkpFQ1RTKSAkKGdzdF9nc3RtZXRhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0bWV0YV9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdG1ldGEkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdG1ldGFfT0JKRUNUUykgJChnc3RfZ3N0bWV0YV9MREFERCkgJChMSUJTKQotZ3N0L2dzdG1pbmlvYmplY3QuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0bWluaW9iamVjdCQoRVhFRVhUKTogJChnc3RfZ3N0bWluaW9iamVjdF9PQkpFQ1RTKSAkKGdzdF9nc3RtaW5pb2JqZWN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0bWluaW9iamVjdF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdG1pbmlvYmplY3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdG1pbmlvYmplY3RfT0JKRUNUUykgJChnc3RfZ3N0bWluaW9iamVjdF9MREFERCkgJChMSUJTKQotZ3N0L2dzdG9iamVjdC4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RvYmplY3QkKEVYRUVYVCk6ICQoZ3N0X2dzdG9iamVjdF9PQkpFQ1RTKSAkKGdzdF9nc3RvYmplY3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RvYmplY3RfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RvYmplY3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdG9iamVjdF9PQkpFQ1RTKSAkKGdzdF9nc3RvYmplY3RfTERBREQpICQoTElCUykKLWdzdC9nc3RwYWQuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0cGFkJChFWEVFWFQpOiAkKGdzdF9nc3RwYWRfT0JKRUNUUykgJChnc3RfZ3N0cGFkX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0cGFkX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0cGFkJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RwYWRfT0JKRUNUUykgJChnc3RfZ3N0cGFkX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0cGFyYW1zcGVjcy4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RwYXJhbXNwZWNzJChFWEVFWFQpOiAkKGdzdF9nc3RwYXJhbXNwZWNzX09CSkVDVFMpICQoZ3N0X2dzdHBhcmFtc3BlY3NfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RwYXJhbXNwZWNzX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0cGFyYW1zcGVjcyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0cGFyYW1zcGVjc19PQkpFQ1RTKSAkKGdzdF9nc3RwYXJhbXNwZWNzX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0cGlwZWxpbmUuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0cGlwZWxpbmUkKEVYRUVYVCk6ICQoZ3N0X2dzdHBpcGVsaW5lX09CSkVDVFMpICQoZ3N0X2dzdHBpcGVsaW5lX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0cGlwZWxpbmVfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RwaXBlbGluZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0cGlwZWxpbmVfT0JKRUNUUykgJChnc3RfZ3N0cGlwZWxpbmVfTERBREQpICQoTElCUykKLWdzdC9nc3RwbHVnaW4uJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0cGx1Z2luJChFWEVFWFQpOiAkKGdzdF9nc3RwbHVnaW5fT0JKRUNUUykgJChnc3RfZ3N0cGx1Z2luX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0cGx1Z2luX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0cGx1Z2luJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RwbHVnaW5fT0JKRUNUUykgJChnc3RfZ3N0cGx1Z2luX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0cG9sbC4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3Rwb2xsJChFWEVFWFQpOiAkKGdzdF9nc3Rwb2xsX09CSkVDVFMpICQoZ3N0X2dzdHBvbGxfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3Rwb2xsX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0cG9sbCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0cG9sbF9PQkpFQ1RTKSAkKGdzdF9nc3Rwb2xsX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0cHJlc2V0LiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdHByZXNldCQoRVhFRVhUKTogJChnc3RfZ3N0cHJlc2V0X09CSkVDVFMpICQoZ3N0X2dzdHByZXNldF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdHByZXNldF9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdHByZXNldCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0cHJlc2V0X09CSkVDVFMpICQoZ3N0X2dzdHByZXNldF9MREFERCkgJChMSUJTKQotZ3N0L2dzdHByaW50Zi4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RwcmludGYkKEVYRUVYVCk6ICQoZ3N0X2dzdHByaW50Zl9PQkpFQ1RTKSAkKGdzdF9nc3RwcmludGZfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RwcmludGZfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RwcmludGYkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHByaW50Zl9PQkpFQ1RTKSAkKGdzdF9nc3RwcmludGZfTERBREQpICQoTElCUykKLWdzdC9nc3Rwcm90ZWN0aW9uLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdHByb3RlY3Rpb24kKEVYRUVYVCk6ICQoZ3N0X2dzdHByb3RlY3Rpb25fT0JKRUNUUykgJChnc3RfZ3N0cHJvdGVjdGlvbl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdHByb3RlY3Rpb25fREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3Rwcm90ZWN0aW9uJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3Rwcm90ZWN0aW9uX09CSkVDVFMpICQoZ3N0X2dzdHByb3RlY3Rpb25fTERBREQpICQoTElCUykKLWdzdC9nc3RxdWVyeS4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RxdWVyeSQoRVhFRVhUKTogJChnc3RfZ3N0cXVlcnlfT0JKRUNUUykgJChnc3RfZ3N0cXVlcnlfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RxdWVyeV9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdHF1ZXJ5JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RxdWVyeV9PQkpFQ1RTKSAkKGdzdF9nc3RxdWVyeV9MREFERCkgJChMSUJTKQotZ3N0L2dzdHJlZ2lzdHJ5LiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdHJlZ2lzdHJ5JChFWEVFWFQpOiAkKGdzdF9nc3RyZWdpc3RyeV9PQkpFQ1RTKSAkKGdzdF9nc3RyZWdpc3RyeV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdHJlZ2lzdHJ5X0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0cmVnaXN0cnkkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHJlZ2lzdHJ5X09CSkVDVFMpICQoZ3N0X2dzdHJlZ2lzdHJ5X0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0c2VnbWVudC4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RzZWdtZW50JChFWEVFWFQpOiAkKGdzdF9nc3RzZWdtZW50X09CSkVDVFMpICQoZ3N0X2dzdHNlZ21lbnRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RzZWdtZW50X0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0c2VnbWVudCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0c2VnbWVudF9PQkpFQ1RTKSAkKGdzdF9nc3RzZWdtZW50X0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0c3RyZWFtLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdHN0cmVhbSQoRVhFRVhUKTogJChnc3RfZ3N0c3RyZWFtX09CSkVDVFMpICQoZ3N0X2dzdHN0cmVhbV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdHN0cmVhbV9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdHN0cmVhbSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0c3RyZWFtX09CSkVDVFMpICQoZ3N0X2dzdHN0cmVhbV9MREFERCkgJChMSUJTKQotZ3N0L2dzdHN0cnVjdHVyZS4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RzdHJ1Y3R1cmUkKEVYRUVYVCk6ICQoZ3N0X2dzdHN0cnVjdHVyZV9PQkpFQ1RTKSAkKGdzdF9nc3RzdHJ1Y3R1cmVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RzdHJ1Y3R1cmVfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3RzdHJ1Y3R1cmUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHN0cnVjdHVyZV9PQkpFQ1RTKSAkKGdzdF9nc3RzdHJ1Y3R1cmVfTERBREQpICQoTElCUykKLWdzdC9nc3RzeXN0ZW1jbG9jay4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3RzeXN0ZW1jbG9jayQoRVhFRVhUKTogJChnc3RfZ3N0c3lzdGVtY2xvY2tfT0JKRUNUUykgJChnc3RfZ3N0c3lzdGVtY2xvY2tfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3RzeXN0ZW1jbG9ja19ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdHN5c3RlbWNsb2NrJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3RzeXN0ZW1jbG9ja19PQkpFQ1RTKSAkKGdzdF9nc3RzeXN0ZW1jbG9ja19MREFERCkgJChMSUJTKQotZ3N0L2dzdHRhZy4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3R0YWckKEVYRUVYVCk6ICQoZ3N0X2dzdHRhZ19PQkpFQ1RTKSAkKGdzdF9nc3R0YWdfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3R0YWdfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3R0YWckKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHRhZ19PQkpFQ1RTKSAkKGdzdF9nc3R0YWdfTERBREQpICQoTElCUykKLWdzdC9nc3R0YWdzZXR0ZXIuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0dGFnc2V0dGVyJChFWEVFWFQpOiAkKGdzdF9nc3R0YWdzZXR0ZXJfT0JKRUNUUykgJChnc3RfZ3N0dGFnc2V0dGVyX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0dGFnc2V0dGVyX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0dGFnc2V0dGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3R0YWdzZXR0ZXJfT0JKRUNUUykgJChnc3RfZ3N0dGFnc2V0dGVyX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0dGFzay4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3R0YXNrJChFWEVFWFQpOiAkKGdzdF9nc3R0YXNrX09CSkVDVFMpICQoZ3N0X2dzdHRhc2tfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3R0YXNrX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0dGFzayQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0dGFza19PQkpFQ1RTKSAkKGdzdF9nc3R0YXNrX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0dG9jLiQoT0JKRVhUKTogZ3N0LyQoYW1fX2RpcnN0YW1wKSBcCi0JZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZ3N0L2dzdHRvYyQoRVhFRVhUKTogJChnc3RfZ3N0dG9jX09CSkVDVFMpICQoZ3N0X2dzdHRvY19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2dzdHRvY19ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdHRvYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0dG9jX09CSkVDVFMpICQoZ3N0X2dzdHRvY19MREFERCkgJChMSUJTKQotZ3N0L2dzdHRvY3NldHRlci4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3R0b2NzZXR0ZXIkKEVYRUVYVCk6ICQoZ3N0X2dzdHRvY3NldHRlcl9PQkpFQ1RTKSAkKGdzdF9nc3R0b2NzZXR0ZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3R0b2NzZXR0ZXJfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3R0b2NzZXR0ZXIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ3N0X2dzdHRvY3NldHRlcl9PQkpFQ1RTKSAkKGdzdF9nc3R0b2NzZXR0ZXJfTERBREQpICQoTElCUykKLWdzdC9nc3RfZ3N0dHJhY2VycmVjb3JkLWdzdHRyYWNlcnJlY29yZC4kKE9CSkVYVCk6ICBcCi0JZ3N0LyQoYW1fX2RpcnN0YW1wKSBnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0dHJhY2VycmVjb3JkJChFWEVFWFQpOiAkKGdzdF9nc3R0cmFjZXJyZWNvcmRfT0JKRUNUUykgJChnc3RfZ3N0dHJhY2VycmVjb3JkX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0dHJhY2VycmVjb3JkX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0dHJhY2VycmVjb3JkJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChnc3RfZ3N0dHJhY2VycmVjb3JkX0xJTkspICQoZ3N0X2dzdHRyYWNlcnJlY29yZF9PQkpFQ1RTKSAkKGdzdF9nc3R0cmFjZXJyZWNvcmRfTERBREQpICQoTElCUykKLWdzdC9nc3R1cmkuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0dXJpJChFWEVFWFQpOiAkKGdzdF9nc3R1cmlfT0JKRUNUUykgJChnc3RfZ3N0dXJpX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0dXJpX0RFUEVOREVOQ0lFUykgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBnc3QvZ3N0dXJpJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3R1cmlfT0JKRUNUUykgJChnc3RfZ3N0dXJpX0xEQUREKSAkKExJQlMpCi1nc3QvZ3N0dXRpbHMuJChPQkpFWFQpOiBnc3QvJChhbV9fZGlyc3RhbXApIFwKLQlnc3QvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nc3QvZ3N0dXRpbHMkKEVYRUVYVCk6ICQoZ3N0X2dzdHV0aWxzX09CSkVDVFMpICQoZ3N0X2dzdHV0aWxzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfZ3N0dXRpbHNfREVQRU5ERU5DSUVTKSBnc3QvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdzdC9nc3R1dGlscyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChnc3RfZ3N0dXRpbHNfT0JKRUNUUykgJChnc3RfZ3N0dXRpbHNfTERBREQpICQoTElCUykKLWdzdC9nc3R2YWx1ZS4kKE9CSkVYVCk6IGdzdC8kKGFtX19kaXJzdGFtcCkgXAotCWdzdC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWdzdC9nc3R2YWx1ZSQoRVhFRVhUKTogJChnc3RfZ3N0dmFsdWVfT0JKRUNUUykgJChnc3RfZ3N0dmFsdWVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dzdF9nc3R2YWx1ZV9ERVBFTkRFTkNJRVMpIGdzdC8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZ3N0L2dzdHZhbHVlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdzdF9nc3R2YWx1ZV9PQkpFQ1RTKSAkKGdzdF9nc3R2YWx1ZV9MREFERCkgJChMSUJTKQotbGlicy8kKGFtX19kaXJzdGFtcCk6Ci0JQCQoTUtESVJfUCkgbGlicwotCUA6ID4gbGlicy8kKGFtX19kaXJzdGFtcCkKLWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKToKLQlAJChNS0RJUl9QKSBsaWJzLyQoREVQRElSKQotCUA6ID4gbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi1saWJzL2FkYXB0ZXIuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvYWRhcHRlciQoRVhFRVhUKTogJChsaWJzX2FkYXB0ZXJfT0JKRUNUUykgJChsaWJzX2FkYXB0ZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfYWRhcHRlcl9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvYWRhcHRlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX2FkYXB0ZXJfT0JKRUNUUykgJChsaWJzX2FkYXB0ZXJfTERBREQpICQoTElCUykKLWxpYnMvYmFzZXBhcnNlLiQoT0JKRVhUKTogbGlicy8kKGFtX19kaXJzdGFtcCkgXAotCWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1saWJzL2Jhc2VwYXJzZSQoRVhFRVhUKTogJChsaWJzX2Jhc2VwYXJzZV9PQkpFQ1RTKSAkKGxpYnNfYmFzZXBhcnNlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJzX2Jhc2VwYXJzZV9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvYmFzZXBhcnNlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfYmFzZXBhcnNlX09CSkVDVFMpICQobGlic19iYXNlcGFyc2VfTERBREQpICQoTElCUykKLWxpYnMvYmFzZXNpbmsuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvYmFzZXNpbmskKEVYRUVYVCk6ICQobGlic19iYXNlc2lua19PQkpFQ1RTKSAkKGxpYnNfYmFzZXNpbmtfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfYmFzZXNpbmtfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBsaWJzL2Jhc2VzaW5rJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfYmFzZXNpbmtfT0JKRUNUUykgJChsaWJzX2Jhc2VzaW5rX0xEQUREKSAkKExJQlMpCi1saWJzL2Jhc2VzcmMuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvYmFzZXNyYyQoRVhFRVhUKTogJChsaWJzX2Jhc2VzcmNfT0JKRUNUUykgJChsaWJzX2Jhc2VzcmNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfYmFzZXNyY19ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvYmFzZXNyYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX2Jhc2VzcmNfT0JKRUNUUykgJChsaWJzX2Jhc2VzcmNfTERBREQpICQoTElCUykKLWxpYnMvYml0cmVhZGVyLiQoT0JKRVhUKTogbGlicy8kKGFtX19kaXJzdGFtcCkgXAotCWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1saWJzL2JpdHJlYWRlciQoRVhFRVhUKTogJChsaWJzX2JpdHJlYWRlcl9PQkpFQ1RTKSAkKGxpYnNfYml0cmVhZGVyX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJzX2JpdHJlYWRlcl9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvYml0cmVhZGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfYml0cmVhZGVyX09CSkVDVFMpICQobGlic19iaXRyZWFkZXJfTERBREQpICQoTElCUykKLWxpYnMvYml0cmVhZGVyLW5vaW5saW5lLiQoT0JKRVhUKTogbGlicy8kKGFtX19kaXJzdGFtcCkgXAotCWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1saWJzL2JpdHJlYWRlci1ub2lubGluZSQoRVhFRVhUKTogJChsaWJzX2JpdHJlYWRlcl9ub2lubGluZV9PQkpFQ1RTKSAkKGxpYnNfYml0cmVhZGVyX25vaW5saW5lX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJzX2JpdHJlYWRlcl9ub2lubGluZV9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvYml0cmVhZGVyLW5vaW5saW5lJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfYml0cmVhZGVyX25vaW5saW5lX09CSkVDVFMpICQobGlic19iaXRyZWFkZXJfbm9pbmxpbmVfTERBREQpICQoTElCUykKLWxpYnMvYnl0ZXJlYWRlci4kKE9CSkVYVCk6IGxpYnMvJChhbV9fZGlyc3RhbXApIFwKLQlsaWJzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotbGlicy9ieXRlcmVhZGVyJChFWEVFWFQpOiAkKGxpYnNfYnl0ZXJlYWRlcl9PQkpFQ1RTKSAkKGxpYnNfYnl0ZXJlYWRlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGlic19ieXRlcmVhZGVyX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgbGlicy9ieXRlcmVhZGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfYnl0ZXJlYWRlcl9PQkpFQ1RTKSAkKGxpYnNfYnl0ZXJlYWRlcl9MREFERCkgJChMSUJTKQotbGlicy9ieXRlcmVhZGVyLW5vaW5saW5lLiQoT0JKRVhUKTogbGlicy8kKGFtX19kaXJzdGFtcCkgXAotCWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1saWJzL2J5dGVyZWFkZXItbm9pbmxpbmUkKEVYRUVYVCk6ICQobGlic19ieXRlcmVhZGVyX25vaW5saW5lX09CSkVDVFMpICQobGlic19ieXRlcmVhZGVyX25vaW5saW5lX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJzX2J5dGVyZWFkZXJfbm9pbmxpbmVfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBsaWJzL2J5dGVyZWFkZXItbm9pbmxpbmUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19ieXRlcmVhZGVyX25vaW5saW5lX09CSkVDVFMpICQobGlic19ieXRlcmVhZGVyX25vaW5saW5lX0xEQUREKSAkKExJQlMpCi1saWJzL2J5dGV3cml0ZXIuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvYnl0ZXdyaXRlciQoRVhFRVhUKTogJChsaWJzX2J5dGV3cml0ZXJfT0JKRUNUUykgJChsaWJzX2J5dGV3cml0ZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfYnl0ZXdyaXRlcl9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvYnl0ZXdyaXRlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX2J5dGV3cml0ZXJfT0JKRUNUUykgJChsaWJzX2J5dGV3cml0ZXJfTERBREQpICQoTElCUykKLWxpYnMvYnl0ZXdyaXRlci1ub2lubGluZS4kKE9CSkVYVCk6IGxpYnMvJChhbV9fZGlyc3RhbXApIFwKLQlsaWJzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotbGlicy9ieXRld3JpdGVyLW5vaW5saW5lJChFWEVFWFQpOiAkKGxpYnNfYnl0ZXdyaXRlcl9ub2lubGluZV9PQkpFQ1RTKSAkKGxpYnNfYnl0ZXdyaXRlcl9ub2lubGluZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGlic19ieXRld3JpdGVyX25vaW5saW5lX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgbGlicy9ieXRld3JpdGVyLW5vaW5saW5lJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfYnl0ZXdyaXRlcl9ub2lubGluZV9PQkpFQ1RTKSAkKGxpYnNfYnl0ZXdyaXRlcl9ub2lubGluZV9MREFERCkgJChMSUJTKQotbGlicy9jb2xsZWN0cGFkcy4kKE9CSkVYVCk6IGxpYnMvJChhbV9fZGlyc3RhbXApIFwKLQlsaWJzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotbGlicy9jb2xsZWN0cGFkcyQoRVhFRVhUKTogJChsaWJzX2NvbGxlY3RwYWRzX09CSkVDVFMpICQobGlic19jb2xsZWN0cGFkc19ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGlic19jb2xsZWN0cGFkc19ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvY29sbGVjdHBhZHMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19jb2xsZWN0cGFkc19PQkpFQ1RTKSAkKGxpYnNfY29sbGVjdHBhZHNfTERBREQpICQoTElCUykKLWxpYnMvY29udHJvbGxlci4kKE9CSkVYVCk6IGxpYnMvJChhbV9fZGlyc3RhbXApIFwKLQlsaWJzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotbGlicy9jb250cm9sbGVyJChFWEVFWFQpOiAkKGxpYnNfY29udHJvbGxlcl9PQkpFQ1RTKSAkKGxpYnNfY29udHJvbGxlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGlic19jb250cm9sbGVyX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgbGlicy9jb250cm9sbGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfY29udHJvbGxlcl9PQkpFQ1RTKSAkKGxpYnNfY29udHJvbGxlcl9MREFERCkgJChMSUJTKQotbGlicy9mbG93Y29tYmluZXIuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvZmxvd2NvbWJpbmVyJChFWEVFWFQpOiAkKGxpYnNfZmxvd2NvbWJpbmVyX09CSkVDVFMpICQobGlic19mbG93Y29tYmluZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfZmxvd2NvbWJpbmVyX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgbGlicy9mbG93Y29tYmluZXIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19mbG93Y29tYmluZXJfT0JKRUNUUykgJChsaWJzX2Zsb3djb21iaW5lcl9MREFERCkgJChMSUJTKQotbGlicy9nc3RoYXJuZXNzLiQoT0JKRVhUKTogbGlicy8kKGFtX19kaXJzdGFtcCkgXAotCWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1saWJzL2dzdGhhcm5lc3MkKEVYRUVYVCk6ICQobGlic19nc3RoYXJuZXNzX09CSkVDVFMpICQobGlic19nc3RoYXJuZXNzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJzX2dzdGhhcm5lc3NfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBsaWJzL2dzdGhhcm5lc3MkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19nc3RoYXJuZXNzX09CSkVDVFMpICQobGlic19nc3RoYXJuZXNzX0xEQUREKSAkKExJQlMpCi1saWJzL2dzdGxpYnNjcHAuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvZ3N0bGlic2NwcCQoRVhFRVhUKTogJChsaWJzX2dzdGxpYnNjcHBfT0JKRUNUUykgJChsaWJzX2dzdGxpYnNjcHBfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfZ3N0bGlic2NwcF9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvZ3N0bGlic2NwcCQoRVhFRVhUKQotCSQoQU1fVl9DWFhMRCkkKENYWExJTkspICQobGlic19nc3RsaWJzY3BwX09CSkVDVFMpICQobGlic19nc3RsaWJzY3BwX0xEQUREKSAkKExJQlMpCi1saWJzL2dzdG5ldGNsaWVudGNsb2NrLiQoT0JKRVhUKTogbGlicy8kKGFtX19kaXJzdGFtcCkgXAotCWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1saWJzL2dzdG5ldGNsaWVudGNsb2NrJChFWEVFWFQpOiAkKGxpYnNfZ3N0bmV0Y2xpZW50Y2xvY2tfT0JKRUNUUykgJChsaWJzX2dzdG5ldGNsaWVudGNsb2NrX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJzX2dzdG5ldGNsaWVudGNsb2NrX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgbGlicy9nc3RuZXRjbGllbnRjbG9jayQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX2dzdG5ldGNsaWVudGNsb2NrX09CSkVDVFMpICQobGlic19nc3RuZXRjbGllbnRjbG9ja19MREFERCkgJChMSUJTKQotbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyJChFWEVFWFQpOiAkKGxpYnNfZ3N0bmV0dGltZXByb3ZpZGVyX09CSkVDVFMpICQobGlic19nc3RuZXR0aW1lcHJvdmlkZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfZ3N0bmV0dGltZXByb3ZpZGVyX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19nc3RuZXR0aW1lcHJvdmlkZXJfT0JKRUNUUykgJChsaWJzX2dzdG5ldHRpbWVwcm92aWRlcl9MREFERCkgJChMSUJTKQotbGlicy9nc3R0ZXN0Y2xvY2suJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvZ3N0dGVzdGNsb2NrJChFWEVFWFQpOiAkKGxpYnNfZ3N0dGVzdGNsb2NrX09CSkVDVFMpICQobGlic19nc3R0ZXN0Y2xvY2tfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfZ3N0dGVzdGNsb2NrX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgbGlicy9nc3R0ZXN0Y2xvY2skKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19nc3R0ZXN0Y2xvY2tfT0JKRUNUUykgJChsaWJzX2dzdHRlc3RjbG9ja19MREFERCkgJChMSUJTKQotbGlicy9saWJzYWJpLiQoT0JKRVhUKTogbGlicy8kKGFtX19kaXJzdGFtcCkgXAotCWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1saWJzL2xpYnNhYmkkKEVYRUVYVCk6ICQobGlic19saWJzYWJpX09CSkVDVFMpICQobGlic19saWJzYWJpX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJzX2xpYnNhYmlfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBsaWJzL2xpYnNhYmkkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic19saWJzYWJpX09CSkVDVFMpICQobGlic19saWJzYWJpX0xEQUREKSAkKExJQlMpCi1saWJzL3F1ZXVlYXJyYXkuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvcXVldWVhcnJheSQoRVhFRVhUKTogJChsaWJzX3F1ZXVlYXJyYXlfT0JKRUNUUykgJChsaWJzX3F1ZXVlYXJyYXlfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfcXVldWVhcnJheV9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvcXVldWVhcnJheSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX3F1ZXVlYXJyYXlfT0JKRUNUUykgJChsaWJzX3F1ZXVlYXJyYXlfTERBREQpICQoTElCUykKLWxpYnMvc3BhcnNlZmlsZS4kKE9CSkVYVCk6IGxpYnMvJChhbV9fZGlyc3RhbXApIFwKLQlsaWJzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotbGlicy9zcGFyc2VmaWxlJChFWEVFWFQpOiAkKGxpYnNfc3BhcnNlZmlsZV9PQkpFQ1RTKSAkKGxpYnNfc3BhcnNlZmlsZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGlic19zcGFyc2VmaWxlX0RFUEVOREVOQ0lFUykgbGlicy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgbGlicy9zcGFyc2VmaWxlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfc3BhcnNlZmlsZV9PQkpFQ1RTKSAkKGxpYnNfc3BhcnNlZmlsZV9MREFERCkgJChMSUJTKQotbGlicy90cmFuc2Zvcm0xLiQoT0JKRVhUKTogbGlicy8kKGFtX19kaXJzdGFtcCkgXAotCWxpYnMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1saWJzL3RyYW5zZm9ybTEkKEVYRUVYVCk6ICQobGlic190cmFuc2Zvcm0xX09CSkVDVFMpICQobGlic190cmFuc2Zvcm0xX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJzX3RyYW5zZm9ybTFfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBsaWJzL3RyYW5zZm9ybTEkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQobGlic190cmFuc2Zvcm0xX09CSkVDVFMpICQobGlic190cmFuc2Zvcm0xX0xEQUREKSAkKExJQlMpCi1saWJzL3RyYW5zZm9ybTIuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvdHJhbnNmb3JtMiQoRVhFRVhUKTogJChsaWJzX3RyYW5zZm9ybTJfT0JKRUNUUykgJChsaWJzX3RyYW5zZm9ybTJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfdHJhbnNmb3JtMl9ERVBFTkRFTkNJRVMpIGxpYnMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGxpYnMvdHJhbnNmb3JtMiQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChsaWJzX3RyYW5zZm9ybTJfT0JKRUNUUykgJChsaWJzX3RyYW5zZm9ybTJfTERBREQpICQoTElCUykKLWxpYnMvdHlwZWZpbmRoZWxwZXIuJChPQkpFWFQpOiBsaWJzLyQoYW1fX2RpcnN0YW1wKSBcCi0JbGlicy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnMvdHlwZWZpbmRoZWxwZXIkKEVYRUVYVCk6ICQobGlic190eXBlZmluZGhlbHBlcl9PQkpFQ1RTKSAkKGxpYnNfdHlwZWZpbmRoZWxwZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnNfdHlwZWZpbmRoZWxwZXJfREVQRU5ERU5DSUVTKSBsaWJzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBsaWJzL3R5cGVmaW5kaGVscGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGxpYnNfdHlwZWZpbmRoZWxwZXJfT0JKRUNUUykgJChsaWJzX3R5cGVmaW5kaGVscGVyX0xEQUREKSAkKExJQlMpCi1waXBlbGluZXMvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIHBpcGVsaW5lcwotCUA6ID4gcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKQotcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6Ci0JQCQoTUtESVJfUCkgcGlwZWxpbmVzLyQoREVQRElSKQotCUA6ID4gcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLXBpcGVsaW5lcy9jbGVhbnVwLiQoT0JKRVhUKTogcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKSBcCi0JcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotcGlwZWxpbmVzL2NsZWFudXAkKEVYRUVYVCk6ICQocGlwZWxpbmVzX2NsZWFudXBfT0JKRUNUUykgJChwaXBlbGluZXNfY2xlYW51cF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcGlwZWxpbmVzX2NsZWFudXBfREVQRU5ERU5DSUVTKSBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIHBpcGVsaW5lcy9jbGVhbnVwJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKHBpcGVsaW5lc19jbGVhbnVwX09CSkVDVFMpICQocGlwZWxpbmVzX2NsZWFudXBfTERBREQpICQoTElCUykKLXBpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZC4kKE9CSkVYVCk6IHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkgXAotCXBpcGVsaW5lcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLXBpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZCQoRVhFRVhUKTogJChwaXBlbGluZXNfcGFyc2VfZGlzYWJsZWRfT0JKRUNUUykgJChwaXBlbGluZXNfcGFyc2VfZGlzYWJsZWRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3BpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKHBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9PQkpFQ1RTKSAkKHBpcGVsaW5lc19wYXJzZV9kaXNhYmxlZF9MREFERCkgJChMSUJTKQotcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC4kKE9CSkVYVCk6IHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkgXAotCXBpcGVsaW5lcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLXBpcGVsaW5lcy9wYXJzZS1sYXVuY2gkKEVYRUVYVCk6ICQocGlwZWxpbmVzX3BhcnNlX2xhdW5jaF9PQkpFQ1RTKSAkKHBpcGVsaW5lc19wYXJzZV9sYXVuY2hfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3BpcGVsaW5lc19wYXJzZV9sYXVuY2hfREVQRU5ERU5DSUVTKSBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIHBpcGVsaW5lcy9wYXJzZS1sYXVuY2gkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQocGlwZWxpbmVzX3BhcnNlX2xhdW5jaF9PQkpFQ1RTKSAkKHBpcGVsaW5lc19wYXJzZV9sYXVuY2hfTERBREQpICQoTElCUykKLXBpcGVsaW5lcy9xdWV1ZS1lcnJvci4kKE9CSkVYVCk6IHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkgXAotCXBpcGVsaW5lcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLXBpcGVsaW5lcy9xdWV1ZS1lcnJvciQoRVhFRVhUKTogJChwaXBlbGluZXNfcXVldWVfZXJyb3JfT0JKRUNUUykgJChwaXBlbGluZXNfcXVldWVfZXJyb3JfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3BpcGVsaW5lc19xdWV1ZV9lcnJvcl9ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgcGlwZWxpbmVzL3F1ZXVlLWVycm9yJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKHBpcGVsaW5lc19xdWV1ZV9lcnJvcl9PQkpFQ1RTKSAkKHBpcGVsaW5lc19xdWV1ZV9lcnJvcl9MREFERCkgJChMSUJTKQotcGlwZWxpbmVzL3NlZWsuJChPQkpFWFQpOiBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApIFwKLQlwaXBlbGluZXMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1waXBlbGluZXMvc2VlayQoRVhFRVhUKTogJChwaXBlbGluZXNfc2Vla19PQkpFQ1RTKSAkKHBpcGVsaW5lc19zZWVrX0RFUEVOREVOQ0lFUykgJChFWFRSQV9waXBlbGluZXNfc2Vla19ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgcGlwZWxpbmVzL3NlZWskKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQocGlwZWxpbmVzX3NlZWtfT0JKRUNUUykgJChwaXBlbGluZXNfc2Vla19MREFERCkgJChMSUJTKQotcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuJChPQkpFWFQpOiBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApIFwKLQlwaXBlbGluZXMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcyQoRVhFRVhUKTogJChwaXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19PQkpFQ1RTKSAkKHBpcGVsaW5lc19zaW1wbGVfbGF1bmNoX2xpbmVzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9waXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQocGlwZWxpbmVzX3NpbXBsZV9sYXVuY2hfbGluZXNfT0JKRUNUUykgJChwaXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19MREFERCkgJChMSUJTKQotcGlwZWxpbmVzL3N0cmVzcy4kKE9CSkVYVCk6IHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkgXAotCXBpcGVsaW5lcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLXBpcGVsaW5lcy9zdHJlc3MkKEVYRUVYVCk6ICQocGlwZWxpbmVzX3N0cmVzc19PQkpFQ1RTKSAkKHBpcGVsaW5lc19zdHJlc3NfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3BpcGVsaW5lc19zdHJlc3NfREVQRU5ERU5DSUVTKSBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIHBpcGVsaW5lcy9zdHJlc3MkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQocGlwZWxpbmVzX3N0cmVzc19PQkpFQ1RTKSAkKHBpcGVsaW5lc19zdHJlc3NfTERBREQpICQoTElCUykKLXRvb2xzLyQoYW1fX2RpcnN0YW1wKToKLQlAJChNS0RJUl9QKSB0b29scwotCUA6ID4gdG9vbHMvJChhbV9fZGlyc3RhbXApCi10b29scy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIHRvb2xzLyQoREVQRElSKQotCUA6ID4gdG9vbHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotdG9vbHMvZ3N0aW5zcGVjdC4kKE9CSkVYVCk6IHRvb2xzLyQoYW1fX2RpcnN0YW1wKSBcCi0JdG9vbHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi10b29scy9nc3RpbnNwZWN0JChFWEVFWFQpOiAkKHRvb2xzX2dzdGluc3BlY3RfT0JKRUNUUykgJCh0b29sc19nc3RpbnNwZWN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV90b29sc19nc3RpbnNwZWN0X0RFUEVOREVOQ0lFUykgdG9vbHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIHRvb2xzL2dzdGluc3BlY3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQodG9vbHNfZ3N0aW5zcGVjdF9PQkpFQ1RTKSAkKHRvb2xzX2dzdGluc3BlY3RfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQktcm0gLWYgZWxlbWVudHMvKi4kKE9CSkVYVCkKLQktcm0gLWYgZ2VuZXJpYy8qLiQoT0JKRVhUKQotCS1ybSAtZiBnc3QvKi4kKE9CSkVYVCkKLQktcm0gLWYgbGlicy8qLiQoT0JKRVhUKQotCS1ybSAtZiBwaXBlbGluZXMvKi4kKE9CSkVYVCkKLQktcm0gLWYgdG9vbHMvKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9jYXBzZmlsdGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvY29uY2F0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmRzcmMtZmRzcmMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19maWxlc3JjLWZpbGVzcmMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9mYWtlc2luay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2Zha2VzcmMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9maWxlc2luay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2Z1bm5lbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2lkZW50aXR5LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvbXVsdGlxdWV1ZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3F1ZXVlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvcXVldWUyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvc2VsZWN0b3IuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9zdHJlYW1pZGRlbXV4LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvdGVlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvdmFsdmUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdlbmVyaWMvJChERVBESVIpL3NpbmtzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnZW5lcmljLyQoREVQRElSKS9zdGF0ZXMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdF9nc3R0cmFjZXJyZWNvcmQtZ3N0dHJhY2VycmVjb3JkLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGFiaS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RhdG9taWNxdWV1ZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RiaW4uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0YnVmZmVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGJ1ZmZlcmxpc3QuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0YnVmZmVycG9vbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RidXMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0Y2Fwcy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RjYXBzZmVhdHVyZXMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0Y2hpbGRwcm94eS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RjbG9jay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3Rjb250ZXh0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGNvbnRyb2xsZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0Y3BwLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGRhdGV0aW1lLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGRldmljZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RlbGVtZW50LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGVsZW1lbnRmYWN0b3J5LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGV2ZW50LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGdob3N0cGFkLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdGluZm8uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0aXRlcmF0b3IuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0bWVtb3J5LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdG1lc3NhZ2UuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0bWV0YS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RtaW5pb2JqZWN0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdG9iamVjdC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RwYWQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0cGFyYW1zcGVjcy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RwaXBlbGluZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RwbHVnaW4uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0cG9sbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RwcmVzZXQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0cHJpbnRmLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdHByb3RlY3Rpb24uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0cXVlcnkuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0cmVnaXN0cnkuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0c2VnbWVudC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3RzdHJlYW0uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0c3RydWN0dXJlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdHN5c3RlbWNsb2NrLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdHRhZy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3R0YWdzZXR0ZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0dGFzay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3R0b2MuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGdzdC8kKERFUERJUikvZ3N0dG9jc2V0dGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBnc3QvJChERVBESVIpL2dzdHVyaS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3R1dGlscy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ3N0LyQoREVQRElSKS9nc3R2YWx1ZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvYWRhcHRlci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvYmFzZXBhcnNlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBsaWJzLyQoREVQRElSKS9iYXNlc2luay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvYmFzZXNyYy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvYml0cmVhZGVyLW5vaW5saW5lLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBsaWJzLyQoREVQRElSKS9iaXRyZWFkZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2J5dGVyZWFkZXItbm9pbmxpbmUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2J5dGVyZWFkZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2J5dGV3cml0ZXItbm9pbmxpbmUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2J5dGV3cml0ZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2NvbGxlY3RwYWRzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBsaWJzLyQoREVQRElSKS9jb250cm9sbGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBsaWJzLyQoREVQRElSKS9mbG93Y29tYmluZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2dzdGhhcm5lc3MuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2dzdGxpYnNjcHAuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2dzdG5ldGNsaWVudGNsb2NrLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBsaWJzLyQoREVQRElSKS9nc3RuZXR0aW1lcHJvdmlkZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGxpYnMvJChERVBESVIpL2dzdHRlc3RjbG9jay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvbGlic2FiaS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvcXVldWVhcnJheS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvc3BhcnNlZmlsZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvdHJhbnNmb3JtMS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvdHJhbnNmb3JtMi5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAbGlicy8kKERFUERJUikvdHlwZWZpbmRoZWxwZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHBpcGVsaW5lcy8kKERFUERJUikvY2xlYW51cC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAcGlwZWxpbmVzLyQoREVQRElSKS9wYXJzZS1kaXNhYmxlZC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAcGlwZWxpbmVzLyQoREVQRElSKS9wYXJzZS1sYXVuY2guUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHBpcGVsaW5lcy8kKERFUERJUikvcXVldWUtZXJyb3IuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHBpcGVsaW5lcy8kKERFUERJUikvc2Vlay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAcGlwZWxpbmVzLyQoREVQRElSKS9zaW1wbGUtbGF1bmNoLWxpbmVzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBwaXBlbGluZXMvJChERVBESVIpL3N0cmVzcy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAdG9vbHMvJChERVBESVIpL2dzdGluc3BlY3QuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotZWxlbWVudHMvZWxlbWVudHNfZmRzcmMtZmRzcmMubzogZWxlbWVudHMvZmRzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2Zkc3JjX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19mZHNyYy1mZHNyYy5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19mZHNyYy1mZHNyYy5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmRzcmMtZmRzcmMubyBgdGVzdCAtZiAnZWxlbWVudHMvZmRzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmRzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmRzcmMtZmRzcmMuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19mZHNyYy1mZHNyYy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2Zkc3JjLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfZmRzcmMtZmRzcmMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZmRzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmRzcmMtZmRzcmMubyBgdGVzdCAtZiAnZWxlbWVudHMvZmRzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmRzcmMuYwotCi1lbGVtZW50cy9lbGVtZW50c19mZHNyYy1mZHNyYy5vYmo6IGVsZW1lbnRzL2Zkc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19mZHNyY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfZmRzcmMtZmRzcmMub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19mZHNyYy1mZHNyYy5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmRzcmMtZmRzcmMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mZHNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2Zkc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2Zkc3JjLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2Zkc3JjLWZkc3JjLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmRzcmMtZmRzcmMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9mZHNyYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2Zkc3JjLWZkc3JjLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZmRzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmRzcmMtZmRzcmMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mZHNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2Zkc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2Zkc3JjLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLm86IGVsZW1lbnRzL2ZpbGVzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2ZpbGVzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19maWxlc3JjLWZpbGVzcmMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vIGB0ZXN0IC1mICdlbGVtZW50cy9maWxlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2ZpbGVzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZmlsZXNyYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19maWxlc3JjX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vIGB0ZXN0IC1mICdlbGVtZW50cy9maWxlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2ZpbGVzcmMuYwotCi1lbGVtZW50cy9lbGVtZW50c19maWxlc3JjLWZpbGVzcmMub2JqOiBlbGVtZW50cy9maWxlc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19maWxlc3JjX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19maWxlc3JjLWZpbGVzcmMub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19maWxlc3JjLWZpbGVzcmMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2ZpbGVzcmMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9maWxlc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2ZpbGVzcmMuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZmlsZXNyYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2ZpbGVzcmMtZmlsZXNyYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2ZpbGVzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmlsZXNyYy1maWxlc3JjLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvZmlsZXNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2ZpbGVzcmMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvZmlsZXNyYy5jJzsgZmlgCi0KLWdzdC9nc3RfZ3N0dHJhY2VycmVjb3JkLWdzdHRyYWNlcnJlY29yZC5vOiBnc3QvZ3N0dHJhY2VycmVjb3JkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfZ3N0dHJhY2VycmVjb3JkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3QvZ3N0X2dzdHRyYWNlcnJlY29yZC1nc3R0cmFjZXJyZWNvcmQubyAtTUQgLU1QIC1NRiBnc3QvJChERVBESVIpL2dzdF9nc3R0cmFjZXJyZWNvcmQtZ3N0dHJhY2VycmVjb3JkLlRwbyAtYyAtbyBnc3QvZ3N0X2dzdHRyYWNlcnJlY29yZC1nc3R0cmFjZXJyZWNvcmQubyBgdGVzdCAtZiAnZ3N0L2dzdHRyYWNlcnJlY29yZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0dHJhY2VycmVjb3JkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZ3N0LyQoREVQRElSKS9nc3RfZ3N0dHJhY2VycmVjb3JkLWdzdHRyYWNlcnJlY29yZC5UcG8gZ3N0LyQoREVQRElSKS9nc3RfZ3N0dHJhY2VycmVjb3JkLWdzdHRyYWNlcnJlY29yZC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdC9nc3R0cmFjZXJyZWNvcmQuYycgb2JqZWN0PSdnc3QvZ3N0X2dzdHRyYWNlcnJlY29yZC1nc3R0cmFjZXJyZWNvcmQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2dzdHRyYWNlcnJlY29yZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3QvZ3N0X2dzdHRyYWNlcnJlY29yZC1nc3R0cmFjZXJyZWNvcmQubyBgdGVzdCAtZiAnZ3N0L2dzdHRyYWNlcnJlY29yZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QvZ3N0dHJhY2VycmVjb3JkLmMKLQotZ3N0L2dzdF9nc3R0cmFjZXJyZWNvcmQtZ3N0dHJhY2VycmVjb3JkLm9iajogZ3N0L2dzdHRyYWNlcnJlY29yZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2dzdHRyYWNlcnJlY29yZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0L2dzdF9nc3R0cmFjZXJyZWNvcmQtZ3N0dHJhY2VycmVjb3JkLm9iaiAtTUQgLU1QIC1NRiBnc3QvJChERVBESVIpL2dzdF9nc3R0cmFjZXJyZWNvcmQtZ3N0dHJhY2VycmVjb3JkLlRwbyAtYyAtbyBnc3QvZ3N0X2dzdHRyYWNlcnJlY29yZC1nc3R0cmFjZXJyZWNvcmQub2JqIGBpZiB0ZXN0IC1mICdnc3QvZ3N0dHJhY2VycmVjb3JkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0L2dzdHRyYWNlcnJlY29yZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QvZ3N0dHJhY2VycmVjb3JkLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZ3N0LyQoREVQRElSKS9nc3RfZ3N0dHJhY2VycmVjb3JkLWdzdHRyYWNlcnJlY29yZC5UcG8gZ3N0LyQoREVQRElSKS9nc3RfZ3N0dHJhY2VycmVjb3JkLWdzdHRyYWNlcnJlY29yZC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdC9nc3R0cmFjZXJyZWNvcmQuYycgb2JqZWN0PSdnc3QvZ3N0X2dzdHRyYWNlcnJlY29yZC1nc3R0cmFjZXJyZWNvcmQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfZ3N0dHJhY2VycmVjb3JkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdC9nc3RfZ3N0dHJhY2VycmVjb3JkLWdzdHRyYWNlcnJlY29yZC5vYmogYGlmIHRlc3QgLWYgJ2dzdC9nc3R0cmFjZXJyZWNvcmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QvZ3N0dHJhY2VycmVjb3JkLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC9nc3R0cmFjZXJyZWNvcmQuYyc7IGZpYAotCi0uY2MubzoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmNjLm9iajoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmNjLmxvOgotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoTFRDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQktcm0gLXJmIGVsZW1lbnRzLy5saWJzIGVsZW1lbnRzL19saWJzCi0JLXJtIC1yZiBnZW5lcmljLy5saWJzIGdlbmVyaWMvX2xpYnMKLQktcm0gLXJmIGdzdC8ubGlicyBnc3QvX2xpYnMKLQktcm0gLXJmIGxpYnMvLmxpYnMgbGlicy9fbGlicwotCS1ybSAtcmYgcGlwZWxpbmVzLy5saWJzIHBpcGVsaW5lcy9fbGlicwotCS1ybSAtcmYgdG9vbHMvLmxpYnMgdG9vbHMvX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLSMgUmVjb3ZlciBmcm9tIGRlbGV0ZWQgJy50cnMnIGZpbGU7IHRoaXMgc2hvdWxkIGVuc3VyZSB0aGF0Ci0jICJybSAtZiBmb28ubG9nOyBtYWtlIGZvby50cnMiIHJlLXJ1biAnZm9vLnRlc3QnLCBhbmQgcmUtY3JlYXRlCi0jIGJvdGggJ2Zvby5sb2cnIGFuZCAnZm9vLnRycycuICBCcmVhayB0aGUgcmVjaXBlIGluIHR3byBzdWJzaGVsbHMKLSMgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCAibWFrZSAtbiIuCi0ubG9nLnRyczoKLQlybSAtZiAkPCAkQAotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQ8Ci0KLSMgTGVhZGluZyAnYW0tLWZub3JkJyBpcyB0aGVyZSB0byBlbnN1cmUgdGhlIGxpc3Qgb2YgdGFyZ2V0cyBkb2VzIG5vdAotIyBleHBhbmQgdG8gZW1wdHksIGFzIGNvdWxkIGhhcHBlbiBlLmcuIHdpdGggbWFrZSBjaGVjayBURVNUUz0nJy4KLWFtLS1mbm9yZCAkKFRFU1RfTE9HUykgJChURVNUX0xPR1M6LmxvZz0udHJzKTogJChhbV9fZm9yY2VfcmVjaGVjaykKLWFtLS1mb3JjZS1yZWNoZWNrOgotCUA6Ci0KLSQoVEVTVF9TVUlURV9MT0cpOiAkKFRFU1RfTE9HUykKLQlAJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAotCWFtX19mX29rICgpIHsgdGVzdCAtZiAiJCQxIiAmJiB0ZXN0IC1yICIkJDEiOyB9OyBcCi0JcmVkb19iYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gXAotCSAgICAgICAgICAgICAgYW1fX2Zfb2sgJCRpLnRycyAmJiBhbV9fZl9vayAkJGkubG9nIHx8IGVjaG8gJCRpOyBcCi0JICAgICAgICAgICAgZG9uZWA7IFwKLQlpZiB0ZXN0IC1uICIkJHJlZG9fYmFzZXMiOyB0aGVuIFwKLQkgIHJlZG9fbG9ncz1gZm9yIGkgaW4gJCRyZWRvX2Jhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCi0JICByZWRvX3Jlc3VsdHM9YGZvciBpIGluICQkcmVkb19iYXNlczsgZG8gZWNobyAkJGkudHJzOyBkb25lYDsgXAotCSAgaWYgJChhbV9fbWFrZV9kcnlydW4pOyB0aGVuIDo7IGVsc2UgXAotCSAgICBybSAtZiAkJHJlZG9fbG9ncyAmJiBybSAtZiAkJHJlZG9fcmVzdWx0cyB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZmk7IFwKLQlpZiB0ZXN0IC1uICIkJGFtX19yZW1ha2luZ19sb2dzIjsgdGhlbiBcCi0JICBlY2hvICJmYXRhbDogbWFraW5nICQoVEVTVF9TVUlURV9MT0cpOiBwb3NzaWJsZSBpbmZpbml0ZSIgXAotCSAgICAgICAicmVjdXJzaW9uIGRldGVjdGVkIiA+JjI7IFwKLQllbGlmIHRlc3QgLW4gIiQkcmVkb19sb2dzIjsgdGhlbiBcCi0JICBhbV9fcmVtYWtpbmdfbG9ncz15ZXMgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRyZWRvX2xvZ3M7IFwKLQlmaTsgXAotCWlmICQoYW1fX21ha2VfZHJ5cnVuKTsgdGhlbiA6OyBlbHNlIFwKLQkgIHN0PTA7ICBcCi0JICBlcnJtc2c9ImZhdGFsOiBtYWtpbmcgJChURVNUX1NVSVRFX0xPRyk6IGZhaWxlZCB0byBjcmVhdGUiOyBcCi0JICBmb3IgaSBpbiAkJHJlZG9fYmFzZXM7IGRvIFwKLQkgICAgdGVzdCAtZiAkJGkudHJzICYmIHRlc3QgLXIgJCRpLnRycyBcCi0JICAgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkudHJzIiA+JjI7IHN0PTE7IH07IFwKLQkgICAgdGVzdCAtZiAkJGkubG9nICYmIHRlc3QgLXIgJCRpLmxvZyBcCi0JICAgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkubG9nIiA+JjI7IHN0PTE7IH07IFwKLQkgIGRvbmU7IFwKLQkgIHRlc3QgJCRzdCAtZXEgMCB8fCBleGl0IDE7IFwKLQlmaQotCUAkKGFtX19zaF9lX3NldHVwKTsgJChhbV9fdHR5X2NvbG9ycyk7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKLQl3cz0nWyAJXSc7IFwKLQlyZXN1bHRzPWBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYi50cnM7IGRvbmVgOyBcCi0JdGVzdCAtbiAiJCRyZXN1bHRzIiB8fCByZXN1bHRzPS9kZXYvbnVsbDsgXAotCWFsbD1gICBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6IiAgICAgICAgICAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCi0JcGFzcz1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlBBU1MiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKLQlmYWlsPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRkFJTCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAotCXNraXA9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypTS0lQIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCi0JeGZhaWw9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhGQUlMIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKLQl4cGFzcz1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWFBBU1MiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAotCWVycm9yPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypFUlJPUiIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCi0JaWYgdGVzdCBgZXhwciAkJGZhaWwgKyAkJHhwYXNzICsgJCRlcnJvcmAgLWVxIDA7IHRoZW4gXAotCSAgc3VjY2Vzcz10cnVlOyBcCi0JZWxzZSBcCi0JICBzdWNjZXNzPWZhbHNlOyBcCi0JZmk7IFwKLQlicj0nPT09PT09PT09PT09PT09PT09PSc7IGJyPSQkYnIkJGJyJCRiciQkYnI7IFwKLQlyZXN1bHRfY291bnQgKCkgXAotCXsgXAotCSAgICBpZiB0ZXN0IHgiJCQxIiA9IHgiLS1tYXliZS1jb2xvciI7IHRoZW4gXAotCSAgICAgIG1heWJlX2NvbG9yaXplPXllczsgXAotCSAgICBlbGlmIHRlc3QgeCIkJDEiID0geCItLW5vLWNvbG9yIjsgdGhlbiBcCi0JICAgICAgbWF5YmVfY29sb3JpemU9bm87IFwKLQkgICAgZWxzZSBcCi0JICAgICAgZWNobyAiJEA6IGludmFsaWQgJ3Jlc3VsdF9jb3VudCcgdXNhZ2UiID4mMjsgZXhpdCA0OyBcCi0JICAgIGZpOyBcCi0JICAgIHNoaWZ0OyBcCi0JICAgIGRlc2M9JCQxIGNvdW50PSQkMjsgXAotCSAgICBpZiB0ZXN0ICQkbWF5YmVfY29sb3JpemUgPSB5ZXMgJiYgdGVzdCAkJGNvdW50IC1ndCAwOyB0aGVuIFwKLQkgICAgICBjb2xvcl9zdGFydD0kJDMgY29sb3JfZW5kPSQkc3RkOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIGNvbG9yX3N0YXJ0PSBjb2xvcl9lbmQ9OyBcCi0JICAgIGZpOyBcCi0JICAgIGVjaG8gIiQke2NvbG9yX3N0YXJ0fSMgJCRkZXNjICQkY291bnQkJHtjb2xvcl9lbmR9IjsgXAotCX07IFwKLQljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAoKSBcCi0JeyBcCi0JICByZXN1bHRfY291bnQgJCQxICJUT1RBTDoiICQkYWxsICAgIiQkYnJnIjsgXAotCSAgcmVzdWx0X2NvdW50ICQkMSAiUEFTUzogIiAkJHBhc3MgICIkJGdybiI7IFwKLQkgIHJlc3VsdF9jb3VudCAkJDEgIlNLSVA6ICIgJCRza2lwICAiJCRibHUiOyBcCi0JICByZXN1bHRfY291bnQgJCQxICJYRkFJTDoiICQkeGZhaWwgIiQkbGduIjsgXAotCSAgcmVzdWx0X2NvdW50ICQkMSAiRkFJTDogIiAkJGZhaWwgICIkJHJlZCI7IFwKLQkgIHJlc3VsdF9jb3VudCAkJDEgIlhQQVNTOiIgJCR4cGFzcyAiJCRyZWQiOyBcCi0JICByZXN1bHRfY291bnQgJCQxICJFUlJPUjoiICQkZXJyb3IgIiQkbWduIjsgXAotCX07IFwKLQl7CQkJCQkJCQlcCi0JICBlY2hvICIkKFBBQ0tBR0VfU1RSSU5HKTogJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpIiB8CVwKLQkgICAgJChhbV9fcnN0X3RpdGxlKTsJCQkJCQlcCi0JICBjcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW5vLWNvbG9yOwkJCQlcCi0JICBlY2hvOwkJCQkJCQkJXAotCSAgZWNobyAiLi4gY29udGVudHM6OiA6ZGVwdGg6IDIiOwkJCQlcCi0JICBlY2hvOwkJCQkJCQkJXAotCSAgZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGI7IGRvbmUJCQkJXAotCSAgICB8ICQoYW1fX2NyZWF0ZV9nbG9iYWxfbG9nKTsJCQkJCVwKLQl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXAgfHwgZXhpdCAxOwkJCQlcCi0JbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKLQlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCi0JICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAotCSBlbHNlCQkJCQkJCQlcCi0JICBjb2w9IiQkcmVkIjsJCQkJCQkJXAotCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKLQlmaTsJCQkJCQkJCVwKLQllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKLQllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKLQllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKLQljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCi0JZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKLQlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAotCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKLQkgIGlmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbgkJCVwKLQkgICAgZWNobyAiJCR7Y29sfVBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkkJHtzdGR9IjsJXAotCSAgZmk7CQkJCQkJCQlcCi0JICBlY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQlcCi0JZmk7CQkJCQkJCQlcCi0JJCRzdWNjZXNzIHx8IGV4aXQgMQotCi1jaGVjay1URVNUUzoKLQlAbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgICAgICAgICAgIHRlc3QgLXogIiQkbGlzdCIgfHwgcm0gLWYgJCRsaXN0Ci0JQGxpc3Q9JyQoUkVDSEVDS19MT0dTOi5sb2c9LnRycyknOyB0ZXN0IC16ICIkJGxpc3QiIHx8IHJtIC1mICQkbGlzdAotCUB0ZXN0IC16ICIkKFRFU1RfU1VJVEVfTE9HKSIgfHwgcm0gLWYgJChURVNUX1NVSVRFX0xPRykKLQlAc2V0ICtlOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCi0JbG9nX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLmxvZzsgZG9uZWA7IFwKLQl0cnNfbGlzdD1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGkudHJzOyBkb25lYDsgXAotCWxvZ19saXN0PWBlY2hvICQkbG9nX2xpc3RgOyB0cnNfbGlzdD1gZWNobyAkJHRyc19saXN0YDsgXAotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCI7IFwKLQlleGl0ICQkPzsKLXJlY2hlY2s6IGFsbCAkKGNoZWNrX1BST0dSQU1TKQotCUB0ZXN0IC16ICIkKFRFU1RfU1VJVEVfTE9HKSIgfHwgcm0gLWYgJChURVNUX1NVSVRFX0xPRykKLQlAc2V0ICtlOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCi0JYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpOyBkb25lIFwKLQkgICAgICAgICB8ICQoYW1fX2xpc3RfcmVjaGVja190ZXN0cylgIHx8IGV4aXQgMTsgXAotCWxvZ19saXN0PWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCi0JbG9nX2xpc3Q9YGVjaG8gJCRsb2dfbGlzdGA7IFwKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBcCi0JICAgICAgICBhbV9fZm9yY2VfcmVjaGVjaz1hbS0tZm9yY2UtcmVjaGVjayBcCi0JICAgICAgICBURVNUX0xPR1M9IiQkbG9nX2xpc3QiOyBcCi0JZXhpdCAkJD8KLWdzdC9nc3RhYmkubG9nOiBnc3QvZ3N0YWJpJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RhYmkkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdGFiaSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGF0b21pY3F1ZXVlLmxvZzogZ3N0L2dzdGF0b21pY3F1ZXVlJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RhdG9taWNxdWV1ZSQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0YXRvbWljcXVldWUnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RidWZmZXIubG9nOiBnc3QvZ3N0YnVmZmVyJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RidWZmZXIkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdGJ1ZmZlcic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGJ1ZmZlcmxpc3QubG9nOiBnc3QvZ3N0YnVmZmVybGlzdCQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0YnVmZmVybGlzdCQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0YnVmZmVybGlzdCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGJ1ZmZlcnBvb2wubG9nOiBnc3QvZ3N0YnVmZmVycG9vbCQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0YnVmZmVycG9vbCQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0YnVmZmVycG9vbCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdG1ldGEubG9nOiBnc3QvZ3N0bWV0YSQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0bWV0YSQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0bWV0YSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdG1lbW9yeS5sb2c6IGdzdC9nc3RtZW1vcnkkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdG1lbW9yeSQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0bWVtb3J5JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0YnVzLmxvZzogZ3N0L2dzdGJ1cyQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0YnVzJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RidXMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RjYXBzLmxvZzogZ3N0L2dzdGNhcHMkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdGNhcHMkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdGNhcHMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RjYXBzZmVhdHVyZXMubG9nOiBnc3QvZ3N0Y2Fwc2ZlYXR1cmVzJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RjYXBzZmVhdHVyZXMkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdGNhcHNmZWF0dXJlcyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGNwcC5sb2c6IGdzdC9nc3RjcHAkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdGNwcCQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0Y3BwJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1saWJzL2dzdGxpYnNjcHAubG9nOiBsaWJzL2dzdGxpYnNjcHAkKEVYRUVYVCkKLQlAcD0nbGlicy9nc3RsaWJzY3BwJChFWEVFWFQpJzsgXAotCWI9J2xpYnMvZ3N0bGlic2NwcCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGRhdGV0aW1lLmxvZzogZ3N0L2dzdGRhdGV0aW1lJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RkYXRldGltZSQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0ZGF0ZXRpbWUnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RkZXZpY2UubG9nOiBnc3QvZ3N0ZGV2aWNlJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RkZXZpY2UkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdGRldmljZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGluZm8ubG9nOiBnc3QvZ3N0aW5mbyQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0aW5mbyQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0aW5mbyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGl0ZXJhdG9yLmxvZzogZ3N0L2dzdGl0ZXJhdG9yJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RpdGVyYXRvciQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0aXRlcmF0b3InOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RtZXNzYWdlLmxvZzogZ3N0L2dzdG1lc3NhZ2UkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdG1lc3NhZ2UkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdG1lc3NhZ2UnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RtaW5pb2JqZWN0LmxvZzogZ3N0L2dzdG1pbmlvYmplY3QkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdG1pbmlvYmplY3QkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdG1pbmlvYmplY3QnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RvYmplY3QubG9nOiBnc3QvZ3N0b2JqZWN0JChFWEVFWFQpCi0JQHA9J2dzdC9nc3RvYmplY3QkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdG9iamVjdCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdHBhZC5sb2c6IGdzdC9nc3RwYWQkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdHBhZCQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0cGFkJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0cGFyYW1zcGVjcy5sb2c6IGdzdC9nc3RwYXJhbXNwZWNzJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RwYXJhbXNwZWNzJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RwYXJhbXNwZWNzJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0cGlwZWxpbmUubG9nOiBnc3QvZ3N0cGlwZWxpbmUkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdHBpcGVsaW5lJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RwaXBlbGluZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdHBvbGwubG9nOiBnc3QvZ3N0cG9sbCQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0cG9sbCQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0cG9sbCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdHByb3RlY3Rpb24ubG9nOiBnc3QvZ3N0cHJvdGVjdGlvbiQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0cHJvdGVjdGlvbiQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0cHJvdGVjdGlvbic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdHByaW50Zi5sb2c6IGdzdC9nc3RwcmludGYkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdHByaW50ZiQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0cHJpbnRmJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0c2VnbWVudC5sb2c6IGdzdC9nc3RzZWdtZW50JChFWEVFWFQpCi0JQHA9J2dzdC9nc3RzZWdtZW50JChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RzZWdtZW50JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0c3lzdGVtY2xvY2subG9nOiBnc3QvZ3N0c3lzdGVtY2xvY2skKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdHN5c3RlbWNsb2NrJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RzeXN0ZW1jbG9jayc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGNsb2NrLmxvZzogZ3N0L2dzdGNsb2NrJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RjbG9jayQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0Y2xvY2snOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RzdHJlYW0ubG9nOiBnc3QvZ3N0c3RyZWFtJChFWEVFWFQpCi0JQHA9J2dzdC9nc3RzdHJlYW0kKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdHN0cmVhbSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdHN0cnVjdHVyZS5sb2c6IGdzdC9nc3RzdHJ1Y3R1cmUkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdHN0cnVjdHVyZSQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0c3RydWN0dXJlJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0dGFnLmxvZzogZ3N0L2dzdHRhZyQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0dGFnJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3R0YWcnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3R0cmFjZXJyZWNvcmQubG9nOiBnc3QvZ3N0dHJhY2VycmVjb3JkJChFWEVFWFQpCi0JQHA9J2dzdC9nc3R0cmFjZXJyZWNvcmQkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdHRyYWNlcnJlY29yZCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdHRhZ3NldHRlci5sb2c6IGdzdC9nc3R0YWdzZXR0ZXIkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdHRhZ3NldHRlciQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0dGFnc2V0dGVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0dGFzay5sb2c6IGdzdC9nc3R0YXNrJChFWEVFWFQpCi0JQHA9J2dzdC9nc3R0YXNrJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3R0YXNrJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0dG9jLmxvZzogZ3N0L2dzdHRvYyQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0dG9jJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3R0b2MnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3R0b2NzZXR0ZXIubG9nOiBnc3QvZ3N0dG9jc2V0dGVyJChFWEVFWFQpCi0JQHA9J2dzdC9nc3R0b2NzZXR0ZXIkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdHRvY3NldHRlcic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdHZhbHVlLmxvZzogZ3N0L2dzdHZhbHVlJChFWEVFWFQpCi0JQHA9J2dzdC9nc3R2YWx1ZSQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0dmFsdWUnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdlbmVyaWMvc3RhdGVzLmxvZzogZ2VuZXJpYy9zdGF0ZXMkKEVYRUVYVCkKLQlAcD0nZ2VuZXJpYy9zdGF0ZXMkKEVYRUVYVCknOyBcCi0JYj0nZ2VuZXJpYy9zdGF0ZXMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmxvZzogcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMkKEVYRUVYVCkKLQlAcD0ncGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMkKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy9jbGVhbnVwLmxvZzogcGlwZWxpbmVzL2NsZWFudXAkKEVYRUVYVCkKLQlAcD0ncGlwZWxpbmVzL2NsZWFudXAkKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL2NsZWFudXAnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy9wYXJzZS1sYXVuY2gubG9nOiBwaXBlbGluZXMvcGFyc2UtbGF1bmNoJChFWEVFWFQpCi0JQHA9J3BpcGVsaW5lcy9wYXJzZS1sYXVuY2gkKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL3BhcnNlLWxhdW5jaCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkLmxvZzogcGlwZWxpbmVzL3BhcnNlLWRpc2FibGVkJChFWEVFWFQpCi0JQHA9J3BpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZCQoRVhFRVhUKSc7IFwKLQliPSdwaXBlbGluZXMvcGFyc2UtZGlzYWJsZWQnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3QubG9nOiBnc3QvZ3N0JChFWEVFWFQpCi0JQHA9J2dzdC9nc3QkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGJpbi5sb2c6IGdzdC9nc3RiaW4kKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdGJpbiQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0YmluJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0Y2hpbGRwcm94eS5sb2c6IGdzdC9nc3RjaGlsZHByb3h5JChFWEVFWFQpCi0JQHA9J2dzdC9nc3RjaGlsZHByb3h5JChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RjaGlsZHByb3h5JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0Y29udGV4dC5sb2c6IGdzdC9nc3Rjb250ZXh0JChFWEVFWFQpCi0JQHA9J2dzdC9nc3Rjb250ZXh0JChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3Rjb250ZXh0JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0Y29udHJvbGxlci5sb2c6IGdzdC9nc3Rjb250cm9sbGVyJChFWEVFWFQpCi0JQHA9J2dzdC9nc3Rjb250cm9sbGVyJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3Rjb250cm9sbGVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0ZWxlbWVudC5sb2c6IGdzdC9nc3RlbGVtZW50JChFWEVFWFQpCi0JQHA9J2dzdC9nc3RlbGVtZW50JChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RlbGVtZW50JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0ZWxlbWVudGZhY3RvcnkubG9nOiBnc3QvZ3N0ZWxlbWVudGZhY3RvcnkkKEVYRUVYVCkKLQlAcD0nZ3N0L2dzdGVsZW1lbnRmYWN0b3J5JChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RlbGVtZW50ZmFjdG9yeSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdGV2ZW50LmxvZzogZ3N0L2dzdGV2ZW50JChFWEVFWFQpCi0JQHA9J2dzdC9nc3RldmVudCQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0ZXZlbnQnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RnaG9zdHBhZC5sb2c6IGdzdC9nc3RnaG9zdHBhZCQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0Z2hvc3RwYWQkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdGdob3N0cGFkJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0cGx1Z2luLmxvZzogZ3N0L2dzdHBsdWdpbiQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0cGx1Z2luJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3RwbHVnaW4nOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RwcmVzZXQubG9nOiBnc3QvZ3N0cHJlc2V0JChFWEVFWFQpCi0JQHA9J2dzdC9nc3RwcmVzZXQkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdHByZXNldCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZ3N0L2dzdHF1ZXJ5LmxvZzogZ3N0L2dzdHF1ZXJ5JChFWEVFWFQpCi0JQHA9J2dzdC9nc3RxdWVyeSQoRVhFRVhUKSc7IFwKLQliPSdnc3QvZ3N0cXVlcnknOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3RyZWdpc3RyeS5sb2c6IGdzdC9nc3RyZWdpc3RyeSQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0cmVnaXN0cnkkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdHJlZ2lzdHJ5JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nc3QvZ3N0dXJpLmxvZzogZ3N0L2dzdHVyaSQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0dXJpJChFWEVFWFQpJzsgXAotCWI9J2dzdC9nc3R1cmknOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWdzdC9nc3R1dGlscy5sb2c6IGdzdC9nc3R1dGlscyQoRVhFRVhUKQotCUBwPSdnc3QvZ3N0dXRpbHMkKEVYRUVYVCknOyBcCi0JYj0nZ3N0L2dzdHV0aWxzJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1nZW5lcmljL3NpbmtzLmxvZzogZ2VuZXJpYy9zaW5rcyQoRVhFRVhUKQotCUBwPSdnZW5lcmljL3NpbmtzJChFWEVFWFQpJzsgXAotCWI9J2dlbmVyaWMvc2lua3MnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2NhcHNmaWx0ZXIubG9nOiBlbGVtZW50cy9jYXBzZmlsdGVyJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2NhcHNmaWx0ZXIkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvY2Fwc2ZpbHRlcic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvY29uY2F0LmxvZzogZWxlbWVudHMvY29uY2F0JChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2NvbmNhdCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9jb25jYXQnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2Zha2VzaW5rLmxvZzogZWxlbWVudHMvZmFrZXNpbmskKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvZmFrZXNpbmskKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvZmFrZXNpbmsnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2Zha2VzcmMubG9nOiBlbGVtZW50cy9mYWtlc3JjJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2Zha2VzcmMkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvZmFrZXNyYyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvZmRzcmMubG9nOiBlbGVtZW50cy9mZHNyYyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9mZHNyYyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9mZHNyYyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvZmlsZXNpbmsubG9nOiBlbGVtZW50cy9maWxlc2luayQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9maWxlc2luayQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9maWxlc2luayc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvZmlsZXNyYy5sb2c6IGVsZW1lbnRzL2ZpbGVzcmMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvZmlsZXNyYyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9maWxlc3JjJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9mdW5uZWwubG9nOiBlbGVtZW50cy9mdW5uZWwkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvZnVubmVsJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2Z1bm5lbCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvaWRlbnRpdHkubG9nOiBlbGVtZW50cy9pZGVudGl0eSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9pZGVudGl0eSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9pZGVudGl0eSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvbXVsdGlxdWV1ZS5sb2c6IGVsZW1lbnRzL211bHRpcXVldWUkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvbXVsdGlxdWV1ZSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9tdWx0aXF1ZXVlJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9zZWxlY3Rvci5sb2c6IGVsZW1lbnRzL3NlbGVjdG9yJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL3NlbGVjdG9yJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3NlbGVjdG9yJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy90ZWUubG9nOiBlbGVtZW50cy90ZWUkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvdGVlJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3RlZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcXVldWUubG9nOiBlbGVtZW50cy9xdWV1ZSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9xdWV1ZSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9xdWV1ZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcXVldWUyLmxvZzogZWxlbWVudHMvcXVldWUyJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL3F1ZXVlMiQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9xdWV1ZTInOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3ZhbHZlLmxvZzogZWxlbWVudHMvdmFsdmUkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvdmFsdmUkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvdmFsdmUnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3N0cmVhbWlkZGVtdXgubG9nOiBlbGVtZW50cy9zdHJlYW1pZGRlbXV4JChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL3N0cmVhbWlkZGVtdXgkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvc3RyZWFtaWRkZW11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotbGlicy9iYXNlcGFyc2UubG9nOiBsaWJzL2Jhc2VwYXJzZSQoRVhFRVhUKQotCUBwPSdsaWJzL2Jhc2VwYXJzZSQoRVhFRVhUKSc7IFwKLQliPSdsaWJzL2Jhc2VwYXJzZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotbGlicy9iYXNlc3JjLmxvZzogbGlicy9iYXNlc3JjJChFWEVFWFQpCi0JQHA9J2xpYnMvYmFzZXNyYyQoRVhFRVhUKSc7IFwKLQliPSdsaWJzL2Jhc2VzcmMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvYmFzZXNpbmsubG9nOiBsaWJzL2Jhc2VzaW5rJChFWEVFWFQpCi0JQHA9J2xpYnMvYmFzZXNpbmskKEVYRUVYVCknOyBcCi0JYj0nbGlicy9iYXNlc2luayc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotbGlicy9zcGFyc2VmaWxlLmxvZzogbGlicy9zcGFyc2VmaWxlJChFWEVFWFQpCi0JQHA9J2xpYnMvc3BhcnNlZmlsZSQoRVhFRVhUKSc7IFwKLQliPSdsaWJzL3NwYXJzZWZpbGUnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvY29udHJvbGxlci5sb2c6IGxpYnMvY29udHJvbGxlciQoRVhFRVhUKQotCUBwPSdsaWJzL2NvbnRyb2xsZXIkKEVYRUVYVCknOyBcCi0JYj0nbGlicy9jb250cm9sbGVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1saWJzL3F1ZXVlYXJyYXkubG9nOiBsaWJzL3F1ZXVlYXJyYXkkKEVYRUVYVCkKLQlAcD0nbGlicy9xdWV1ZWFycmF5JChFWEVFWFQpJzsgXAotCWI9J2xpYnMvcXVldWVhcnJheSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotbGlicy90eXBlZmluZGhlbHBlci5sb2c6IGxpYnMvdHlwZWZpbmRoZWxwZXIkKEVYRUVYVCkKLQlAcD0nbGlicy90eXBlZmluZGhlbHBlciQoRVhFRVhUKSc7IFwKLQliPSdsaWJzL3R5cGVmaW5kaGVscGVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1waXBlbGluZXMvc2Vlay5sb2c6IHBpcGVsaW5lcy9zZWVrJChFWEVFWFQpCi0JQHA9J3BpcGVsaW5lcy9zZWVrJChFWEVFWFQpJzsgXAotCWI9J3BpcGVsaW5lcy9zZWVrJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1waXBlbGluZXMvc3RyZXNzLmxvZzogcGlwZWxpbmVzL3N0cmVzcyQoRVhFRVhUKQotCUBwPSdwaXBlbGluZXMvc3RyZXNzJChFWEVFWFQpJzsgXAotCWI9J3BpcGVsaW5lcy9zdHJlc3MnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy9xdWV1ZS1lcnJvci5sb2c6IHBpcGVsaW5lcy9xdWV1ZS1lcnJvciQoRVhFRVhUKQotCUBwPSdwaXBlbGluZXMvcXVldWUtZXJyb3IkKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL3F1ZXVlLWVycm9yJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1saWJzL2xpYnNhYmkubG9nOiBsaWJzL2xpYnNhYmkkKEVYRUVYVCkKLQlAcD0nbGlicy9saWJzYWJpJChFWEVFWFQpJzsgXAotCWI9J2xpYnMvbGlic2FiaSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotbGlicy9hZGFwdGVyLmxvZzogbGlicy9hZGFwdGVyJChFWEVFWFQpCi0JQHA9J2xpYnMvYWRhcHRlciQoRVhFRVhUKSc7IFwKLQliPSdsaWJzL2FkYXB0ZXInOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvYml0cmVhZGVyLmxvZzogbGlicy9iaXRyZWFkZXIkKEVYRUVYVCkKLQlAcD0nbGlicy9iaXRyZWFkZXIkKEVYRUVYVCknOyBcCi0JYj0nbGlicy9iaXRyZWFkZXInOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvYnl0ZXJlYWRlci5sb2c6IGxpYnMvYnl0ZXJlYWRlciQoRVhFRVhUKQotCUBwPSdsaWJzL2J5dGVyZWFkZXIkKEVYRUVYVCknOyBcCi0JYj0nbGlicy9ieXRlcmVhZGVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1saWJzL2J5dGV3cml0ZXIubG9nOiBsaWJzL2J5dGV3cml0ZXIkKEVYRUVYVCkKLQlAcD0nbGlicy9ieXRld3JpdGVyJChFWEVFWFQpJzsgXAotCWI9J2xpYnMvYnl0ZXdyaXRlcic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotbGlicy9iaXRyZWFkZXItbm9pbmxpbmUubG9nOiBsaWJzL2JpdHJlYWRlci1ub2lubGluZSQoRVhFRVhUKQotCUBwPSdsaWJzL2JpdHJlYWRlci1ub2lubGluZSQoRVhFRVhUKSc7IFwKLQliPSdsaWJzL2JpdHJlYWRlci1ub2lubGluZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotbGlicy9ieXRlcmVhZGVyLW5vaW5saW5lLmxvZzogbGlicy9ieXRlcmVhZGVyLW5vaW5saW5lJChFWEVFWFQpCi0JQHA9J2xpYnMvYnl0ZXJlYWRlci1ub2lubGluZSQoRVhFRVhUKSc7IFwKLQliPSdsaWJzL2J5dGVyZWFkZXItbm9pbmxpbmUnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvYnl0ZXdyaXRlci1ub2lubGluZS5sb2c6IGxpYnMvYnl0ZXdyaXRlci1ub2lubGluZSQoRVhFRVhUKQotCUBwPSdsaWJzL2J5dGV3cml0ZXItbm9pbmxpbmUkKEVYRUVYVCknOyBcCi0JYj0nbGlicy9ieXRld3JpdGVyLW5vaW5saW5lJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1saWJzL2Zsb3djb21iaW5lci5sb2c6IGxpYnMvZmxvd2NvbWJpbmVyJChFWEVFWFQpCi0JQHA9J2xpYnMvZmxvd2NvbWJpbmVyJChFWEVFWFQpJzsgXAotCWI9J2xpYnMvZmxvd2NvbWJpbmVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1saWJzL2NvbGxlY3RwYWRzLmxvZzogbGlicy9jb2xsZWN0cGFkcyQoRVhFRVhUKQotCUBwPSdsaWJzL2NvbGxlY3RwYWRzJChFWEVFWFQpJzsgXAotCWI9J2xpYnMvY29sbGVjdHBhZHMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvZ3N0aGFybmVzcy5sb2c6IGxpYnMvZ3N0aGFybmVzcyQoRVhFRVhUKQotCUBwPSdsaWJzL2dzdGhhcm5lc3MkKEVYRUVYVCknOyBcCi0JYj0nbGlicy9nc3RoYXJuZXNzJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1saWJzL2dzdG5ldGNsaWVudGNsb2NrLmxvZzogbGlicy9nc3RuZXRjbGllbnRjbG9jayQoRVhFRVhUKQotCUBwPSdsaWJzL2dzdG5ldGNsaWVudGNsb2NrJChFWEVFWFQpJzsgXAotCWI9J2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2snOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmxvZzogbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIkKEVYRUVYVCkKLQlAcD0nbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIkKEVYRUVYVCknOyBcCi0JYj0nbGlicy9nc3RuZXR0aW1lcHJvdmlkZXInOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvZ3N0dGVzdGNsb2NrLmxvZzogbGlicy9nc3R0ZXN0Y2xvY2skKEVYRUVYVCkKLQlAcD0nbGlicy9nc3R0ZXN0Y2xvY2skKEVYRUVYVCknOyBcCi0JYj0nbGlicy9nc3R0ZXN0Y2xvY2snOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWxpYnMvdHJhbnNmb3JtMS5sb2c6IGxpYnMvdHJhbnNmb3JtMSQoRVhFRVhUKQotCUBwPSdsaWJzL3RyYW5zZm9ybTEkKEVYRUVYVCknOyBcCi0JYj0nbGlicy90cmFuc2Zvcm0xJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1saWJzL3RyYW5zZm9ybTIubG9nOiBsaWJzL3RyYW5zZm9ybTIkKEVYRUVYVCkKLQlAcD0nbGlicy90cmFuc2Zvcm0yJChFWEVFWFQpJzsgXAotCWI9J2xpYnMvdHJhbnNmb3JtMic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotdG9vbHMvZ3N0aW5zcGVjdC5sb2c6IHRvb2xzL2dzdGluc3BlY3QkKEVYRUVYVCkKLQlAcD0ndG9vbHMvZ3N0aW5zcGVjdCQoRVhFRVhUKSc7IFwKLQliPSd0b29scy9nc3RpbnNwZWN0JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi0udGVzdC5sb2c6Ci0JQHA9JyQ8JzsgXAotCSQoYW1fX3NldF9iKTsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChURVNUX0xPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX1RFU1RfTE9HX0RSSVZFUl9GTEFHUykgJChURVNUX0xPR19EUklWRVJfRkxBR1MpIC0tICQoVEVTVF9MT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLUBhbV9fRVhFRVhUX1RSVUVALnRlc3QkKEVYRUVYVCkubG9nOgotQGFtX19FWEVFWFRfVFJVRUAJQHA9JyQ8JzsgXAotQGFtX19FWEVFWFRfVFJVRUAJJChhbV9fc2V0X2IpOyBcCi1AYW1fX0VYRUVYVF9UUlVFQAkkKGFtX19jaGVja19wcmUpICQoVEVTVF9MT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi1AYW1fX0VYRUVYVF9UUlVFQAktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLUBhbV9fRVhFRVhUX1RSVUVACSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fVEVTVF9MT0dfRFJJVkVSX0ZMQUdTKSAkKFRFU1RfTE9HX0RSSVZFUl9GTEFHUykgLS0gJChURVNUX0xPR19DT01QSUxFKSBcCi1AYW1fX0VYRUVYVF9UUlVFQAkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKFRFU1RfTE9HUykiIHx8IHJtIC1mICQoVEVTVF9MT0dTKQotCS10ZXN0IC16ICIkKFRFU1RfTE9HUzoubG9nPS50cnMpIiB8fCBybSAtZiAkKFRFU1RfTE9HUzoubG9nPS50cnMpCi0JLXRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCS1ybSAtZiBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0JLXJtIC1mIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCS1ybSAtZiBnZW5lcmljLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgZ2VuZXJpYy8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgZ3N0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgZ3N0LyQoYW1fX2RpcnN0YW1wKQotCS1ybSAtZiBsaWJzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgbGlicy8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKQotCS1ybSAtZiB0b29scy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0JLXJtIC1mIHRvb2xzLyQoYW1fX2RpcnN0YW1wKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgXAotCWNsZWFuLW5vaW5zdFBST0dSQU1TIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiBlbGVtZW50cy8kKERFUERJUikgZ2VuZXJpYy8kKERFUERJUikgZ3N0LyQoREVQRElSKSBsaWJzLyQoREVQRElSKSBwaXBlbGluZXMvJChERVBESVIpIHRvb2xzLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiBlbGVtZW50cy8kKERFUERJUikgZ2VuZXJpYy8kKERFUERJUikgZ3N0LyQoREVQRElSKSBsaWJzLyQoREVQRElSKSBwaXBlbGluZXMvJChERVBESVIpIHRvb2xzLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKLQljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBcCi0JY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSByZWNoZWNrIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgXAotCXVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBrZWVwIHRhcmdldCBhcm91bmQsIHNpbmNlIGl0J3MgcmVmZXJlbmNlZCBpbiB0aGUgbW9kdWxlcycgTWFrZWZpbGVzCi1jbGVhbi1sb2NhbC1jaGVjazoKLQlAZWNobwotCi0jIGhhbmdzIHNwZWN0YWN1bGFybHkgb24gc29tZSBtYWNoaW5lcywgc28gbGV0J3Mgbm90IGRvIHRoaXMgYnkgZGVmYXVsdCB5ZXQKLUBIQVZFX1ZBTEdSSU5EX1RSVUVAY2hlY2stdmFsZ3JpbmQ6Ci1ASEFWRV9WQUxHUklORF9UUlVFQAkkKE1BS0UpIHZhbGdyaW5kCi1ASEFWRV9WQUxHUklORF9GQUxTRUBjaGVjay12YWxncmluZDoKLUBIQVZFX1ZBTEdSSU5EX0ZBTFNFQAlAdHJ1ZQotCi1MT09QUyA/PSAxMAotCi0jIHJ1biBhbnkgZ2l2ZW4gdGVzdCBieSBydW5uaW5nIG1ha2UgdGVzdC5jaGVjawotIyBpZiB0aGUgdGVzdCBmYWlscywgcnVuIGl0IGFnYWluIGF0IGF0IGxlYXN0IGRlYnVnIGxldmVsIDIKLSUuY2hlY2s6ICUKLQlAJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQkkKiB8fAkJCQkJCQlcCi0JJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQlHU1RfREVCVUc9JCRHU1RfREVCVUcsKjoyCQkJCVwKLQkkKgotCi0jIGp1c3QgbGlrZSAnY2hlY2snLCBidXQgZG9uJ3QgcnVuIGl0IGFnYWluIGlmIGl0IGZhaWxzICh1c2VmdWwgZm9yIGRlYnVnZ2luZykKLSUuY2hlY2stbm9yZXBlYXQ6ICUKLQlAJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQkkKgotCi0jIHJ1biBhbnkgZ2l2ZW4gdGVzdCBpbiBhIGxvb3AKLSUudG9ydHVyZTogJQotCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCi0JJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQkkKjsgZG9uZQotCi0jIHJ1biBhbnkgZ2l2ZW4gdGVzdCBpbiBhbiBpbmZpbml0ZSBsb29wCi0lLmZvcmV2ZXI6ICUKLQlAd2hpbGUgdHJ1ZTsgZG8JCQkJCQlcCi0JJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQkkKiB8fCBicmVhazsgZG9uZQotCi0jIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IGJ5IHJ1bm5pbmcgbWFrZSB0ZXN0LnZhbGdyaW5kCi0lLnZhbGdyaW5kOiAlCi0JQHZhbGdyaW5kX2xvZz0kKHN1YnN0IC8sLSwkKi12YWxncmluZC5sb2cpOwkJXAotCSQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JQ0tfREVGQVVMVF9USU1FT1VUPTM2MAkJCQkJXAotCUdfU0xJQ0U9YWx3YXlzLW1hbGxvYwkJCQkJXAotCSQoTElCVE9PTCkgLS1tb2RlPWV4ZWN1dGUJCQkJXAotCSQoVkFMR1JJTkRfUEFUSCkgLXEJCQkJCVwKLQkkKGZvcmVhY2ggcywkKFNVUFBSRVNTSU9OUyksLS1zdXBwcmVzc2lvbnM9JChzKSkJXAotCS0tdG9vbD1tZW1jaGVjayAtLWxlYWstY2hlY2s9ZnVsbCAtLXRyYWNlLWNoaWxkcmVuPXllcwlcCi0JLS1zaG93LXBvc3NpYmx5LWxvc3Q9bm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JLS1sZWFrLXJlc29sdXRpb249aGlnaCAtLW51bS1jYWxsZXJzPTIwCQkJXAotCS4vJCogMj4mMSB8IHRlZSAkJHZhbGdyaW5kX2xvZyA7CQkJXAotCWlmIGdyZXAgIl49PSIgJCR2YWxncmluZF9sb2cgPiAvZGV2L251bGwgMj4mMTsgdGhlbglcCi0JICAgIHJtICQkdmFsZ3JpbmRfbG9nOwkJCQkJXAotCSAgICBleGl0IDE7CQkJCQkJXAotCWZpIDsJCQkJCQkJXAotCXJtICQkdmFsZ3JpbmRfbG9nCi0KLSMgdmFsZ3JpbmQgYW55IGdpdmVuIHRlc3QgYW5kIGdlbmVyYXRlIHN1cHByZXNzaW9ucyBmb3IgaXQKLSUudmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9uczogJQotCUAkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCUNLX0RFRkFVTFRfVElNRU9VVD0zNjAJCQkJCVwKLQlHX1NMSUNFPWFsd2F5cy1tYWxsb2MJCQkJCVwKLQkkKExJQlRPT0wpIC0tbW9kZT1leGVjdXRlCQkJCVwKLQkkKFZBTEdSSU5EX1BBVEgpIC1xIAkJCQkJXAotCSQoZm9yZWFjaCBzLCQoU1VQUFJFU1NJT05TKSwtLXN1cHByZXNzaW9ucz0kKHMpKQlcCi0JLS10b29sPW1lbWNoZWNrIC0tbGVhay1jaGVjaz1mdWxsIC0tdHJhY2UtY2hpbGRyZW49eWVzCVwKLQktLXNob3ctcG9zc2libHktbG9zdD1ubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQktLWxlYWstcmVzb2x1dGlvbj1oaWdoIC0tbnVtLWNhbGxlcnM9MjAJCQlcCi0JLS1nZW4tc3VwcHJlc3Npb25zPWFsbAkJCQkJXAotCS4vJCogMj4mMSB8IHRlZSBzdXBwcmVzc2lvbnMubG9nCi0KLSMgdmFsZ3JpbmQgdG9ydHVyZSBhbnkgZ2l2ZW4gdGVzdAotJS52YWxncmluZC10b3J0dXJlOiAlCi0JQGZvciBpIGluIGBzZXEgMSAkKExPT1BTKWA7IGRvCQkJCVwKLQkJJChNQUtFKSAkKi52YWxncmluZCB8fAkJCQlcCi0JCShlY2hvICJGYWlsdXJlIGFmdGVyICQkaSBydW5zIjsgZXhpdCAxKSB8fAlcCi0JCWV4aXQgMTsJCQkJCQlcCi0JZG9uZQotCUBiYW5uZXI9IkFsbCAkKExPT1BTKSBsb29wcyBwYXNzZWQiOwkJCVwKLQlkYXNoZXM9YGVjaG8gIiQkYmFubmVyIiB8IHNlZCBzLy4vPS9nYDsJCQlcCi0JZWNobyAkJGRhc2hlczsgZWNobyAkJGJhbm5lcjsgZWNobyAkJGRhc2hlcwotCi0jIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IHVudGlsIGZhaWx1cmUgYnkgcnVubmluZyBtYWtlIHRlc3QudmFsZ3JpbmQtZm9yZXZlcgotJS52YWxncmluZC1mb3JldmVyOiAlCi0JQHdoaWxlICQoTUFLRSkgJCoudmFsZ3JpbmQ7IGRvCQkJCVwKLQkgIHRydWU7IGRvbmUKLQotIyBnZGIgYW55IGdpdmVuIHRlc3QgYnkgcnVubmluZyBtYWtlIHRlc3QuZ2RiCi0lLmdkYjogJQotCUAkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCUNLX0ZPUks9bm8JCQkJCQlcCi0JJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQkJCQlcCi0JZ2RiICQqCi0KLSUubGNvdi1yZXNldDoKLQkkKE1BS0UpICQqLmxjb3YtcnVuCi0JJChNQUtFKSAkKi5sY292LXJlcG9ydAotCi0lLmxjb3Y6ICUKLQkkKE1BS0UpICQqLmxjb3YtcmVzZXQKLQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAlLmxjb3YtY2xlYW46Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkkKE1BS0UpIC1DICQodG9wX2J1aWxkZGlyKSBsY292LWNsZWFuCi0KLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVAJS5sY292LXJ1bjoKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACSQoTUFLRSkgJCoubGNvdi1jbGVhbgotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJJChNQUtFKSAkKi5jaGVjawotCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQCUubGNvdi1yZXBvcnQ6Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkkKE1BS0UpIC1DICQodG9wX2J1aWxkZGlyKSBsY292LXJlcG9ydAotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VAJS5sY292LXJ1bjoKLUBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQAllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKLQotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VAJS5sY292LXJlcG9ydDoKLUBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQAllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKLQotIyB0b3J0dXJlIHRlc3RzCi10b3J0dXJlOiAkKFRFU1RTKQotCS1ybSB0ZXN0LXJlZ2lzdHJ5LioKLQlAZWNobyAiVG9ydHVyaW5nIHRlc3RzIC4uLiIKLQlAZm9yIGkgaW4gYHNlcSAxICQoTE9PUFMpYDsgZG8JCQkJXAotCQkkKE1BS0UpIGNoZWNrIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUgYWZ0ZXIgJCRpIHJ1bnMiOyBleGl0IDEpIHx8CVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0JQGJhbm5lcj0iQWxsICQoTE9PUFMpIGxvb3BzIHBhc3NlZCI7CQkJXAotCWRhc2hlcz1gZWNobyAiJCRiYW5uZXIiIHwgc2VkIHMvLi89L2dgOwkJCVwKLQllY2hvICQkZGFzaGVzOyBlY2hvICQkYmFubmVyOyBlY2hvICQkZGFzaGVzCi0KLSMgZm9yZXZlciB0ZXN0cwotZm9yZXZlcjogJChURVNUUykKLQktcm0gdGVzdC1yZWdpc3RyeS4qCi0JQGVjaG8gIkZvcmV2ZXIgdGVzdHMgLi4uIgotCUB3aGlsZSB0cnVlOyBkbwkJCQkJCVwKLQkJJChNQUtFKSBjaGVjayB8fAkJCQlcCi0JCShlY2hvICJGYWlsdXJlIjsgZXhpdCAxKSB8fAkJCVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0KLSMgdmFsZ3JpbmQgYWxsIHRlc3RzCi12YWxncmluZDogJChURVNUUykKLQlAZWNobyAiVmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgotCUBmYWlsZWQ9MDsgdmFsZ3JpbmRfdGFyZ2V0cz0iIjsJCQkJCVwKLQlmb3IgdCBpbiAkKGZpbHRlci1vdXQgJChWQUxHUklORF9URVNUU19ESVNBQkxFKSwkKFRFU1RTKSk7IGRvCVwKLQkgIHZhbGdyaW5kX3RhcmdldHM9IiQkdmFsZ3JpbmRfdGFyZ2V0cyAkJHQudmFsZ3JpbmQiOwkJXAotCWRvbmU7CQkJCQkJCQlcCi0JaWYgISAkKE1BS0UpICQkdmFsZ3JpbmRfdGFyZ2V0cyA7IHRoZW4JCQkJXAotCSAgZWNobyAiU29tZSB0ZXN0cyBoYWQgbGVha3Mgb3IgZXJyb3JzIHVuZGVyIHZhbGdyaW5kIjsJCVwKLQkgIGZhbHNlOwkJCQkJCQlcCi0JZmkKLQotIyB2YWxncmluZCBhbGwgdGVzdHMgdW50aWwgZmFpbHVyZQotdmFsZ3JpbmQtZm9yZXZlcjogJChURVNUUykKLQktcm0gdGVzdC1yZWdpc3RyeS4qCi0JQGVjaG8gIkZvcmV2ZXIgdmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgotCUB3aGlsZSB0cnVlOyBkbwkJCQkJCVwKLQkJJChNQUtFKSB2YWxncmluZCB8fAkJCQlcCi0JCShlY2hvICJGYWlsdXJlIjsgZXhpdCAxKSB8fAkJCVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0KLSMgdmFsZ3JpbmQgdG9ydHVyZSBhbGwgdGVzdHMKLXZhbGdyaW5kLXRvcnR1cmU6ICQoVEVTVFMpCi0JLXJtIHRlc3QtcmVnaXN0cnkuKgotCUBlY2hvICJUb3J0dXJpbmcgYW5kIHZhbGdyaW5kaW5nIHRlc3RzIC4uLiIKLQlAZm9yIGkgaW4gYHNlcSAxICQoTE9PUFMpYDsgZG8JCQkJXAotCQkkKE1BS0UpIHZhbGdyaW5kIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUgYWZ0ZXIgJCRpIHJ1bnMiOyBleGl0IDEpIHx8CVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0JQGJhbm5lcj0iQWxsICQoTE9PUFMpIGxvb3BzIHBhc3NlZCI7CQkJXAotCWRhc2hlcz1gZWNobyAiJCRiYW5uZXIiIHwgc2VkIHMvLi89L2dgOwkJCVwKLQllY2hvICQkZGFzaGVzOyBlY2hvICQkYmFubmVyOyBlY2hvICQkZGFzaGVzCi0KLSMgdmFsZ3JpbmQgYWxsIHRlc3RzIGFuZCBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMKLXZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnM6ICQoVEVTVFMpCi0JQGVjaG8gIlZhbGdyaW5kaW5nIHRlc3RzIC4uLiIKLQlAZmFpbGVkPTA7CQkJCQkJCVwKLQlmb3IgdCBpbiAkKGZpbHRlci1vdXQgJChWQUxHUklORF9URVNUU19ESVNBQkxFKSwkKFRFU1RTKSk7IGRvCVwKLQkJJChNQUtFKSAkJHQudmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9uczsJCQlcCi0JCWlmIHRlc3QgIiQkPyIgLW5lIDA7IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZWNobyAiVmFsZ3JpbmQgZXJyb3IgZm9yIHRlc3QgJCR0IjsJCVwKLQkJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOwkJCVwKLQkJCXdoaWNodD0iJCR3aGljaHQgJCR0IjsJCQkJXAotCQlmaTsJCQkJCQkJXAotCWRvbmU7CQkJCQkJCQlcCi0JaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwOyB0aGVuCQkJCQlcCi0JCWVjaG8gIiQkZmFpbGVkIHRlc3RzIGhhZCBsZWFrcyBvciBlcnJvcnMgdW5kZXIgdmFsZ3JpbmQ6IjsJXAotCQllY2hvICIkJHdoaWNodCI7CQkJCQlcCi0JCWZhbHNlOwkJCQkJCQlcCi0JZmkKLWluc3BlY3Q6Ci0JQGVjaG8gIkluc3BlY3RpbmcgZmVhdHVyZXMgLi4uIgotCUBmb3IgZSBpbiBgJChBTV9URVNUU19FTlZJUk9OTUVOVCkgJChHU1RfSU5TUEVDVCkgfCBoZWFkIC1uIC0yIAlcCi0JICB8IGN1dCAtZDogLWYyYDsJCQkJCQlcCi0JICBkbyBlY2hvIEluc3BlY3RpbmcgJCRlOwkJCQkJXAotCSAgICAgJChHU1RfSU5TUEVDVCkgJCRlID4gL2Rldi9udWxsIDI+JjE7IGRvbmUKLQotIyBidWlsZCBhbGwgdGVzdHMKLWJ1aWxkLWNoZWNrczogJChURVNUUykKLQotaGVscDoKLQlAZWNobwotCUBlY2hvICJtYWtlIGNoZWNrICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHJ1biBhbGwgY2hlY2tzIgotCUBlY2hvICJtYWtlIHRvcnR1cmUgICAgICAgICAgICAgICAgICAgICAgIC0tIHJ1biBhbGwgY2hlY2tzICQoTE9PUFMpIHRpbWVzIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS5jaGVjayAgICAgICAgICAgIC0tIHJ1biB0aGUgZ2l2ZW4gY2hlY2sgb25jZSwgcmVwZWF0IHdpdGggR1NUX0RFQlVHPSo6MiBpZiBpdCBmYWlscyIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkuY2hlY2stbm9yZXBlYXQgICAtLSBydW4gdGhlIGdpdmVuIGNoZWNrIG9uY2UsIGJ1dCBkb24ndCBydW4gaXQgYWdhaW4gaWYgaXQgZmFpbHMiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLmZvcmV2ZXIgICAgICAgICAgLS0gcnVuIHRoZSBnaXZlbiBjaGVjayBmb3JldmVyIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS50b3J0dXJlICAgICAgICAgIC0tIHJ1biB0aGUgZ2l2ZW4gY2hlY2sgJChMT09QUykgdGltZXMiCi0JQGVjaG8KLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkuZ2RiICAgICAgICAgICAgICAtLSBzdGFydCB1cCBnZGIgZm9yIHRoZSBnaXZlbiB0ZXN0IgotCUBlY2hvCi0JQGVjaG8gIm1ha2UgdmFsZ3JpbmQgICAgICAgICAgICAgICAgICAgICAgLS0gdmFsZ3JpbmQgYWxsIHRlc3RzIgotCUBlY2hvICJtYWtlIHZhbGdyaW5kLWZvcmV2ZXIgICAgICAgICAgICAgIC0tIHZhbGdyaW5kIGFsbCB0ZXN0cyBmb3JldmVyIgotCUBlY2hvICJtYWtlIHZhbGdyaW5kLXRvcnR1cmUgICAgICAgICAgICAgIC0tIHZhbGdyaW5kIGFsbCB0ZXN0cyAkKExPT1BTKSB0aW1lcyIKLQlAZWNobyAibWFrZSB2YWxncmluZC5nZW4tc3VwcHJlc3Npb25zICAgICAtLSBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMgZm9yIGFsbCB0ZXN0cyIKLQlAZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2F2ZSB0byBzdXBwcmVzc2lvbnMubG9nIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZCAgICAgICAgIC0tIHZhbGdyaW5kIHRoZSBnaXZlbiB0ZXN0IgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZC1mb3JldmVyIC0tIHZhbGdyaW5kIHRoZSBnaXZlbiB0ZXN0IGZvcmV2ZXIiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnZhbGdyaW5kLXRvcnR1cmUgLS0gdmFsZ3JpbmQgdGhlIGdpdmVuIHRlc3QgJChMT09QUykgdGltZXMiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnMgLS0gZ2VuZXJhdGUgc3VwcHJlc3Npb25zIgotCUBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzYXZlIHRvIHN1cHByZXNzaW9ucy5sb2ciCi0JQGVjaG8gIm1ha2UgaW5zcGVjdCAgICAgICAgICAgICAgICAgICAgICAgLS0gaW5zcGVjdCBhbGwgcGx1Z2luIGZlYXR1cmVzIgotCUBlY2hvICJtYWtlIGJ1aWxkLWNoZWNrcyAgICAgICAgICAgICAgICAgIC0tIGJ1aWxkIGFsbCBjaGVja3MgKGJ1dCBkb24ndCBydW4gdGhlbSkiCi0JQGVjaG8KLQlAZWNobwotCUBlY2hvICJBZGRpdGlvbmFsbHksIHlvdSBjYW4gdXNlIHRoZSBHU1RfQ0hFQ0tTIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIgotCUBlY2hvICJzcGVjaWZ5IHdoaWNoIHRlc3Qocykgc2hvdWxkIGJlIHJ1bi4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGFyZSIKLQlAZWNobyAiZGVidWdnaW5nIGEgZmFpbHVyZSBpbiBvbmUgcGFydGljdWxhciB0ZXN0LCBvciB3YW50IHRvIHJlcHJvZHVjZSIKLQlAZWNobyAiYSByYWNlIGNvbmRpdGlvbiBpbiBhIHNpbmdsZSB0ZXN0LiIKLQlAZWNobwotCUBlY2hvICJFeGFtcGxlczoiCi0JQGVjaG8KLQlAZWNobyAiICBHU1RfQ0hFQ0tTPXRlc3RfdGhpcyx0ZXN0X3RoYXQgIG1ha2UgZWxlbWVudC9mb29iYXIuY2hlY2siCi0JQGVjaG8gIiAgR1NUX0NIRUNLUz10ZXN0X21hbnlfdGhyZWFkcyAgICBtYWtlIGVsZW1lbnQvZm9vYmFyLmZvcmV2ZXIiCi0JQGVjaG8KLQotIyBvdmVycmlkZSB0byBfbm90XyBpbnN0YWxsIHRoZSB0ZXN0IHBsdWdpbnMKLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0KLWNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbC1jaGVjawotCi1kZWJ1ZzoKLQllY2hvICQoQ09WRVJBR0VfRklMRVMpCi0JZWNobyAkKENPVkVSQUdFX0ZJTEVTX1JFTCkKLQotLlBIT05ZOiBjb3ZlcmFnZQotIyB3ZSByZWJ1aWxkIGEgcmVnaXN0cnkgYW5kIGRvIGdzdC1pbnNwZWN0IHNvIHRoYXQgYWxsIHRoZSBnZXQvc2V0IGNvZGVwYXRocwotIyBhcmUgYWxzbyBjb3ZlcmVkCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQGNvdmVyYWdlOgotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJZm9yIGZpbGUgaW4gYGZpbmQgJCh0b3BfYnVpbGRkaXIpIC1uYW1lICcqLmdjZGEnYDsgZG8gcm0gJCRmaWxlOyBkb25lCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAktcm0gJChDSEVDS19SRUdJU1RSWSkKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACWVjaG8gIkluc3BlY3RpbmcgYWxsIGVsZW1lbnRzIgotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJZm9yIGUgaW4gYCQoR1NUX0lOU1BFQ1QpIHwgaGVhZCAtbiAtMiB8IGN1dCAtZDogLWYyYDsgZG8gJChHU1RfSU5TUEVDVCkgJCRlID4gL2Rldi9udWxsIDI+JjE7IGRvbmUKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACW1ha2UgY2hlY2sKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACW1ha2UgY292ZXJhZ2UtcmVwb3J0Ci1AR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUBjb3ZlcmFnZToKLUBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQAllY2hvICJZb3UgbmVlZCB0byBjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IHRvIGdldCBjb3ZlcmFnZSBkYXRhIgotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VACWV4aXQgMQotCi1jb3ZlcmFnZS1yZXBvcnQ6Ci0Jcm0gLXIgY292ZXJhZ2UKLQlmb3IgZGlyIGluICQoQ09WRVJBR0VfRElSUyk7IGRvIAkJCQlcCi0JICBta2RpciAtcCBjb3ZlcmFnZS8kJGRpcjsgCQkJCQlcCi0JICBtYWtlIC1DICQodG9wX2J1aWxkZGlyKS8kJGRpciBnY292OwkJCQlcCi0gICAgICAgIGRvbmUKLQlmb3IgZGlyIGluICQoQ09WRVJBR0VfRElSUyk7IGRvCQkJCQlcCi0JICAgIGZpbGVzPSJgbHMgJCh0b3BfYnVpbGRkaXIpLyQkZGlyLyouZ2Nvdi5vdXQgMj4gL2Rldi9udWxsYCI7IFwKLSAgICAgICAgICBpZiB0ZXN0ICEgLXogIiQkZmlsZXMiOyB0aGVuCQkJCQlcCi0JICAgIHBlcmwgJCh0b3Bfc3JjZGlyKS9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsIAlcCi0JICAgICAgJCh0b3BfYnVpbGRkaXIpLyQkZGlyLyouZ2Nvdi5vdXQgPgkJCVwKLQkgICAgICBjb3ZlcmFnZS8kJGRpci9pbmRleC54bWw7CQkJCQlcCi0JICAgIHhzbHRwcm9jICQodG9wX3NyY2RpcikvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2wJXAotCSAgICAgIGNvdmVyYWdlLyQkZGlyL2luZGV4LnhtbCA+IGNvdmVyYWdlLyQkZGlyL2luZGV4Lmh0bWw7CVwKLQkgIGZpOyBcCi0gICAgICAgIGRvbmUKLQlmb3IgZmlsZSBpbiAkKENPVkVSQUdFX0ZJTEVTX1JFTCk7IGRvCQkJCVwKLQkgIGVjaG8gR2VuZXJhdGluZyBjb3ZlcmFnZS8kJGZpbGUuaHRtbDsgCQkJXAotCSAgcGVybCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQtZW50cnkucGwgICBcCi0JICAgICQodG9wX2J1aWxkZGlyKS8kJGZpbGUgPiBjb3ZlcmFnZS8kJGZpbGUuaHRtbDsgCQlcCi0JZG9uZQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9jYXBzZmlsdGVyLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9jYXBzZmlsdGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOGZlZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc2ZpbHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkwICswLDAgQEAKLS8qIEdTdHJlYW1lciB1bml0IHRlc3QgZm9yIGNhcHNmaWx0ZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDg+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jZGVmaW5lIENBUFNfVEVNUExBVEVfU1RSSU5HICAgICAgICAgICAgXAotICAgICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDJdLCAiICAgICAgICBcCi0gICAgInJhdGUgPSAoaW50KSBbIDEsICBNQVggXSIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoQ0FQU19URU1QTEFURV9TVFJJTkcpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoQ0FQU19URU1QTEFURV9TVFJJTkcpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGFueV9zaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGFueV9zcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdMaXN0ICpldmVudHMgPSBOVUxMOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXRlc3RfcGFkX2V2ZW50ZnVuYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGV2ZW50cyA9IGdfbGlzdF9hcHBlbmQgKGV2ZW50cywgZXZlbnQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdW5maXhlZF9kb3duc3RyZWFtX2NhcHMpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGUsICpzcmMsICpmaWx0ZXI7Ci0gIEdzdENhcHMgKmZpbHRlcl9jYXBzOwotICBHc3RQYWQgKm15c2lua3BhZDsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIHBpcGUgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInBpcGVsaW5lIik7Ci0KLSAgc3JjID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJmYWtlc3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAic2l6ZXR5cGUiLCAyLCAic2l6ZW1heCIsIDEwMjQsICJudW0tYnVmZmVycyIsIDEsIE5VTEwpOwotCi0gIGZpbHRlciA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiY2Fwc2ZpbHRlciIpOwotICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsIHJhdGU9KGludCk0NDEwMCIpOwotICBmYWlsX3VubGVzcyAoZmlsdGVyX2NhcHMgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGZpbHRlcl9jYXBzLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlKSwgc3JjLCBmaWx0ZXIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBmaWx0ZXIpKTsKLQotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGZpbHRlciwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogd2FpdCBmb3IgZXJyb3Igb24gYnVzICovCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwKLSAgICAgIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7Ci0KLSAgZmFpbF9pZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUiwKLSAgICAgICJFeHBlY3RlZCBFUlJPUiBtZXNzYWdlLCBnb3QgRU9TIG1lc3NhZ2UiKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgLyogV2UgZG9uJ3QgZXhwZWN0IGFueSBvdXRwdXQgYnVmZmVycyB1bmxlc3MgdGhlIGNoZWNrIGZhaWxzICovCi0gIGZhaWxfdW5sZXNzIChidWZmZXJzID09IE5VTEwpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgR1NUX0RFQlVHICgiY2xlYW51cCIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZmlsdGVyKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKHBpcGUpOwotICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyX2NhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NhcHNfcHJvcGVydHkpCi17Ci0gIEdzdEVsZW1lbnQgKmZpbHRlcjsKLSAgR3N0Q2FwcyAqZmlsdGVyX2NhcHMsICpjYXBzOwotICBjb25zdCBnY2hhciAqY2Fwc19zdHI7Ci0KLSAgZmlsdGVyID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJjYXBzZmlsdGVyIik7Ci0KLSAgLyogdmVyaWZ5IHRoYXQgdGhlIHNldCBjYXBzIGFyZSBhY3R1YWxseSBzZXQgKi8KLSAgY2Fwc19zdHIgPSAiYXVkaW8veC1yYXcsIHJhdGU9KGludCk0NDEwMCwgY2hhbm5lbHM9KGludCkxIjsKLQotICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzX3N0cik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfQ0FQUyAoZmlsdGVyX2NhcHMpKTsKLSAgZ19vYmplY3Rfc2V0IChmaWx0ZXIsICJjYXBzIiwgZmlsdGVyX2NhcHMsIE5VTEwpOwotCi0gIGdfb2JqZWN0X2dldCAoZmlsdGVyLCAiY2FwcyIsICZjYXBzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBmaWx0ZXJfY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChmaWx0ZXJfY2Fwcyk7Ci0KLSAgLyogdmVyaWZ5IHRoYXQgbmV3IGNhcHMgc2V0IHJlcGxhY2UgdGhlIG9sZCBvbmVzICovCi0gIGNhcHNfc3RyID0gInZpZGVvL3gtcmF3LCB3aWR0aD0oaW50KTMyMCwgaGVpZ2h0PShpbnQpMjQwIjsKLQotICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzX3N0cik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfQ0FQUyAoZmlsdGVyX2NhcHMpKTsKLSAgZ19vYmplY3Rfc2V0IChmaWx0ZXIsICJjYXBzIiwgZmlsdGVyX2NhcHMsIE5VTEwpOwotCi0gIGdfb2JqZWN0X2dldCAoZmlsdGVyLCAiY2FwcyIsICZjYXBzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBmaWx0ZXJfY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChmaWx0ZXJfY2Fwcyk7Ci0KLSAgLyogbWFrZSBzdXJlIHRoYXQgTlVMTCBjYXBzIGlzIGludGVycHJldGVkIGFzIEFOWSAqLwotICBnX29iamVjdF9zZXQgKGZpbHRlciwgImNhcHMiLCBOVUxMLCBOVUxMKTsKLQotICBnX29iamVjdF9nZXQgKGZpbHRlciwgImNhcHMiLCAmZmlsdGVyX2NhcHMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfYW55IChmaWx0ZXJfY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyX2NhcHMpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGZpbHRlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY2Fwc19xdWVyeSkKLXsKLSAgR3N0RWxlbWVudCAqZmlsdGVyOwotICBHc3RDYXBzICpmaWx0ZXJfY2FwczsKLSAgY29uc3QgZ2NoYXIgKmNhcHNfc3RyOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZmlsdGVyID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJjYXBzZmlsdGVyIik7Ci0KLSAgLyogc2V0IHNvbWUgY2FwcywgZG8gYSBjYXBzIHF1ZXJ5IHdpdGggYSBmaWx0ZXIgcmVzdWx0aW5nIGluIG5vCi0gICAqIGludGVyc2VjdGluZyBjYXBzICovCi0gIGNhcHNfc3RyID0gImF1ZGlvL3gtcmF3LCByYXRlPShpbnQpNDQxMDAsIGNoYW5uZWxzPShpbnQpMSI7Ci0KLSAgZmlsdGVyX2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoY2Fwc19zdHIpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0NBUFMgKGZpbHRlcl9jYXBzKSk7Ci0gIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGZpbHRlcl9jYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLQotICBjYXBzX3N0ciA9ICJ2aWRlby94LXJhdywgd2lkdGg9KGludCkzMjAsIGhlaWdodD0oaW50KTI0MCI7Ci0gIGZpbHRlcl9jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNhcHNfc3RyKTsKLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2NhcHMgKGZpbHRlcl9jYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChmaWx0ZXIsIHF1ZXJ5KSk7Ci0gIGdzdF9xdWVyeV9wYXJzZV9jYXBzX3Jlc3VsdCAocXVlcnksICZjYXBzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGZpbHRlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWNjZXB0X2NhcHNfcXVlcnkpCi17Ci0gIEdzdEVsZW1lbnQgKmZpbHRlcjsKLSAgR3N0Q2FwcyAqZmlsdGVyX2NhcHM7Ci0gIGNvbnN0IGdjaGFyICpjYXBzX3N0cjsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiBhY2NlcHRlZDsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RQYWQgKnNyY3BhZDsKLQotICBmaWx0ZXIgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImNhcHNmaWx0ZXIiKTsKLQotICAvKiBzZXQgc29tZSBjYXBzIG9uIChib3RoIHBhZHMgb2YpIHRoZSBjYXBzZmlsdGVyICovCi0gIGNhcHNfc3RyID0gImF1ZGlvL3gtcmF3LCByYXRlPShpbnQpNDQxMDAsIGNoYW5uZWxzPShpbnQpMSI7Ci0KLSAgZmlsdGVyX2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoY2Fwc19zdHIpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0NBUFMgKGZpbHRlcl9jYXBzKSk7Ci0gIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGZpbHRlcl9jYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGZpbHRlciwgInNpbmsiKTsKLQotICAvKiBjaGVjayB0aGF0IHRoZSBzZXQgY2FwcyBhcmUgYWNjZXB0YWJsZSBvbiB0aGUgc2lua3BhZCAqLwotICBjYXBzX3N0ciA9ICJhdWRpby94LXJhdywgcmF0ZT0oaW50KTQ0MTAwLCBjaGFubmVscz0oaW50KTEiOwotICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzX3N0cik7Ci0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hY2NlcHRfY2FwcyAoZmlsdGVyX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyX2NhcHMpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9xdWVyeSAoc2lua3BhZCwgcXVlcnkpKTsKLSAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksICZhY2NlcHRlZCk7Ci0gIGZhaWxfdW5sZXNzIChhY2NlcHRlZCk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIC8qIGFuZCB0aGF0IHVucmVsYXRlZCBjYXBzIGFyZSBub3QgYWNjZXB0YWJsZSAqLwotICBjYXBzX3N0ciA9ICJ2aWRlby94LXJhdywgd2lkdGg9KGludCkzMjAsIGhlaWdodD0oaW50KTI0MCI7Ci0gIGZpbHRlcl9jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNhcHNfc3RyKTsKLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2FjY2VwdF9jYXBzIChmaWx0ZXJfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChmaWx0ZXJfY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3F1ZXJ5IChzaW5rcGFkLCBxdWVyeSkpOwotICBnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHNfcmVzdWx0IChxdWVyeSwgJmFjY2VwdGVkKTsKLSAgZmFpbF91bmxlc3MgKCFhY2NlcHRlZCk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIC8qIG5vdyBkbyB0aGUgc2FtZSBmb3IgdGhlIHNyYyBwYWQgKHdoaWNoIGhhcyB0aGUgc2FtZSBjYXBzKSAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmlsdGVyLCAic3JjIik7Ci0KLSAgY2Fwc19zdHIgPSAiYXVkaW8veC1yYXcsIHJhdGU9KGludCk0NDEwMCwgY2hhbm5lbHM9KGludCkxIjsKLSAgZmlsdGVyX2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoY2Fwc19zdHIpOwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYWNjZXB0X2NhcHMgKGZpbHRlcl9jYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcXVlcnkgKHNyY3BhZCwgcXVlcnkpKTsKLSAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksICZhY2NlcHRlZCk7Ci0gIGZhaWxfdW5sZXNzIChhY2NlcHRlZCk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGNhcHNfc3RyID0gInZpZGVvL3gtcmF3LCB3aWR0aD0oaW50KTMyMCwgaGVpZ2h0PShpbnQpMjQwIjsKLSAgZmlsdGVyX2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoY2Fwc19zdHIpOwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYWNjZXB0X2NhcHMgKGZpbHRlcl9jYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcXVlcnkgKHNyY3BhZCwgcXVlcnkpKTsKLSAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksICZhY2NlcHRlZCk7Ci0gIGZhaWxfdW5sZXNzICghYWNjZXB0ZWQpOwotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGZpbHRlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHVzaF9wZW5kaW5nX2V2ZW50cykKLXsKLSAgR3N0RWxlbWVudCAqZmlsdGVyOwotICBHc3RQYWQgKm15c2lua3BhZDsKLSAgR3N0UGFkICpteXNyY3BhZDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHc3RDYXBzICpjYXBzOwotCi0gIGZpbHRlciA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiY2Fwc2ZpbHRlciIpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGZpbHRlciwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChteXNpbmtwYWQsIHRlc3RfcGFkX2V2ZW50ZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoZmlsdGVyLCAmc3JjdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGZpbHRlciwgR1NUX1NUQVRFX1BMQVlJTkcpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiBwdXNoIHRoZSBzdHJlYW0gc3RhcnQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0LXN0cmVhbSIpKSk7Ci0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChldmVudHMpID09IDEpOwotICBldmVudCA9IGV2ZW50cy0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGV2ZW50cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotICBldmVudHMgPSBOVUxMOwotCi0gIC8qIHRoZSB0YWcgc2hvdWxkIGdldCB0cmFwcGVkIGFzIHdlIGhhdmVuJ3QgcHVzaGVkIGEgY2FwcyB5ZXQgKi8KLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXcgKEdTVF9UQUdfQ09NTUVOVCwgInRlc3Rjb21tZW50IiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfcmVmICh0YWdzKSkpKTsKLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGV2ZW50cykgPT0gMCk7Ci0KLSAgLyogcHVzaCBhIGNhcHMgKi8KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsICIKLSAgICAgICJjaGFubmVscz0oaW50KTIsICIgInJhdGUgPSAoaW50KTQ0MTAwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGV2ZW50cykgPT0gMSk7Ci0gIGV2ZW50ID0gZXZlbnRzLT5kYXRhOwotICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQ0FQUyk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGV2ZW50cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotICBldmVudHMgPSBOVUxMOwotCi0gIC8qIHB1c2ggYSBzZWdtZW50ICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGV2ZW50cykgPT0gMSk7Ci0gIGV2ZW50ID0gZXZlbnRzLT5kYXRhOwotICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGV2ZW50cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotICBldmVudHMgPSBOVUxMOwotCi0gIC8qIHB1c2ggYSBidWZmZXIsIHRoZSB0YWcgc2hvdWxkIG5vdyBiZSBwdXNoZWQgZG93bnN0cmVhbSAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX21hbGxvYzAgKDEwMjQpLCAxMDI0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoZXZlbnRzKSA9PSAxKTsKLSAgZXZlbnQgPSBldmVudHMtPmRhdGE7Ci0gIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9UQUcpOwotICBnX2xpc3RfZnJlZV9mdWxsIChldmVudHMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2V2ZW50X3VucmVmKTsKLSAgZXZlbnRzID0gTlVMTDsKLQotICAvKiBXZSBkb24ndCBleHBlY3QgYW55IG91dHB1dCBidWZmZXJzIHVubGVzcyB0aGUgY2hlY2sgZmFpbHMgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDEpOwotICBnX2xpc3RfZnJlZV9mdWxsIChidWZmZXJzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBidWZmZXJzID0gTlVMTDsKLQotICAvKiBjbGVhbnVwICovCi0gIEdTVF9ERUJVRyAoImNsZWFudXAiKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChmaWx0ZXIpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGZpbHRlcik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChmaWx0ZXIpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NhcHNfY2hhbmdlX21vZGVfZGVsYXllZCkKLXsKLSAgR3N0RWxlbWVudCAqZmlsdGVyOwotICBHc3RQYWQgKm15c2lua3BhZDsKLSAgR3N0UGFkICpteXNyY3BhZDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZmlsdGVyID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJjYXBzZmlsdGVyIik7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoZmlsdGVyLCAmYW55X3Npbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChteXNpbmtwYWQsIHRlc3RfcGFkX2V2ZW50ZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoZmlsdGVyLCAmYW55X3NyY3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChmaWx0ZXIsICJjYXBzLWNoYW5nZS1tb2RlIiwgMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChmaWx0ZXIsIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogcHVzaCB0aGUgc3RyZWFtIHN0YXJ0ICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdC1zdHJlYW0iKSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChldmVudHMpLCAxKTsKLSAgZXZlbnQgPSBldmVudHMtPmRhdGE7Ci0gIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQpOwotICBnX2xpc3RfZnJlZV9mdWxsIChldmVudHMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2V2ZW50X3VucmVmKTsKLSAgZXZlbnRzID0gTlVMTDsKLQotICAvKiBwdXNoIGEgY2FwcyAqLwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdywgIgotICAgICAgImNoYW5uZWxzPShpbnQpMiwgIiAicmF0ZSA9IChpbnQpNDQxMDAiKTsKLSAgZ19vYmplY3Rfc2V0IChmaWx0ZXIsICJjYXBzIiwgY2FwcywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZXZlbnRzKSwgMSk7Ci0gIGV2ZW50ID0gZXZlbnRzLT5kYXRhOwotICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQ0FQUyk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGV2ZW50cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotICBldmVudHMgPSBOVUxMOwotCi0gIC8qIHB1c2ggYSBzZWdtZW50ICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZXZlbnRzKSwgMSk7Ci0gIGV2ZW50ID0gZXZlbnRzLT5kYXRhOwotICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGV2ZW50cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotICBldmVudHMgPSBOVUxMOwotCi0gIC8qIHB1c2ggYSBidWZmZXIgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX21hbGxvYzAgKDEwMjQpLCAxMDI0KSksIEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBnX2xpc3RfZnJlZV9mdWxsIChidWZmZXJzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBidWZmZXJzID0gTlVMTDsKLQotICAvKiBTZXQgbmV3IGluY29tcGF0aWJsZSBjYXBzICovCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAiY2hhbm5lbHM9KGludCkyLCAiICJyYXRlID0gKGludCk0ODAwMCIpOwotICBnX29iamVjdF9zZXQgKGZpbHRlciwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLQotICAvKiBwdXNoIGEgYnVmZmVyIHdpdGhvdXQgdXBkYXRpbmcgdGhlIGNhcHMgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX21hbGxvYzAgKDEwMjQpLCAxMDI0KSksIEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBnX2xpc3RfZnJlZV9mdWxsIChidWZmZXJzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBidWZmZXJzID0gTlVMTDsKLQotICAvKiBObyBjYXBzIGV2ZW50IGhlcmUsIHdlJ3JlIHN0aWxsIGF0IHRoZSBvbGQgY2FwcyAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoZXZlbnRzKSA9PSAwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSkpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGV2ZW50cyksIDEpOwotICBldmVudCA9IGV2ZW50cy0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0NBUFMpOwotICBnX2xpc3RfZnJlZV9mdWxsIChldmVudHMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2V2ZW50X3VucmVmKTsKLSAgZXZlbnRzID0gTlVMTDsKLQotICAvKiBQdXNoIGEgbmV3IGJ1ZmZlciwgbm93IHdlIGhhdmUgdGhlIG5ldyBjYXBzICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tYWxsb2MwICgxMDI0KSwgMTAyNCkpLCBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoYnVmZmVycywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgLyogU2V0IGJhY2sgb2xkIGNhcHMgKi8KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsICIKLSAgICAgICJjaGFubmVscz0oaW50KTIsICIgInJhdGUgPSAoaW50KTQ0MTAwIik7Ci0gIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogcHVzaCBhIGJ1ZmZlciB3aXRob3V0IHVwZGF0aW5nIHRoZSBjYXBzICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tYWxsb2MwICgxMDI0KSwgMTAyNCkpLCBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoYnVmZmVycywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgLyogTm93IHNldCBuZXcgY2FwcyBhZ2FpbiBidXQgdGhlIG9sZCBjYXBzIGFyZSBjdXJyZW50bHkgcHVzaGVkICovCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAiY2hhbm5lbHM9KGludCkyLCAiICJyYXRlID0gKGludCk0ODAwMCIpOwotICBnX29iamVjdF9zZXQgKGZpbHRlciwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAvKiBSYWNlIGNvbmRpdGlvbiBzaW11bGF0aW9uIGhlcmUhICovCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAiY2hhbm5lbHM9KGludCkyLCAiICJyYXRlID0gKGludCk0NDEwMCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSkpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGV2ZW50cyksIDEpOwotICBldmVudCA9IGV2ZW50cy0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0NBUFMpOwotICBnX2xpc3RfZnJlZV9mdWxsIChldmVudHMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2V2ZW50X3VucmVmKTsKLSAgZXZlbnRzID0gTlVMTDsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLAotICAgICAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWFsbG9jMCAoMTAyNCksIDEwMjQpKSwgR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGJ1ZmZlcnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgR1NUX0RFQlVHICgiY2xlYW51cCIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGZpbHRlcik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZmlsdGVyKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGZpbHRlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWNhcHNmaWx0ZXJfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiY2Fwc2ZpbHRlciIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91bmZpeGVkX2Rvd25zdHJlYW1fY2Fwcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jYXBzX3Byb3BlcnR5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NhcHNfcXVlcnkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWNjZXB0X2NhcHNfcXVlcnkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHVzaF9wZW5kaW5nX2V2ZW50cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jYXBzX2NoYW5nZV9tb2RlX2RlbGF5ZWQpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoY2Fwc2ZpbHRlcikKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2NvbmNhdC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvY29uY2F0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDU0ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvY29uY2F0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdHMgZm9yIGNvbmNhdAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKLSovCi0KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jZGVmaW5lIE5fQlVGRkVSUyAxMAotc3RhdGljIGdib29sZWFuIGdvdF9lb3M7Ci1zdGF0aWMgZ3VpbnQgYnVmZmVyX2NvdW50Owotc3RhdGljIEdzdFNlZ21lbnQgY3VycmVudF9zZWdtZW50Owotc3RhdGljIGd1aW50NjQgY3VycmVudF9ieXRlczsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLW91dHB1dF9jaGFpbl90aW1lIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBndWludDggYjsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0ICh0aW1lc3RhbXAsCi0gICAgICAoYnVmZmVyX2NvdW50ICUgTl9CVUZGRVJTKSAqIDI1ICogR1NUX01TRUNPTkQpOwotICB0aW1lc3RhbXAgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZjdXJyZW50X3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0ICh0aW1lc3RhbXAsCi0gICAgICAoYnVmZmVyX2NvdW50ICUgTl9CVUZGRVJTKSAqIDI1ICogR1NUX01TRUNPTkQpOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOwotICB0aW1lc3RhbXAgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmY3VycmVudF9zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICB0aW1lc3RhbXApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKHRpbWVzdGFtcCwgYnVmZmVyX2NvdW50ICogMjUgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWZmZXIsIDAsICZiLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoYiwgYnVmZmVyX2NvdW50ICUgTl9CVUZGRVJTKTsKLQotICBidWZmZXJfY291bnQrKzsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW91dHB1dF9ldmVudF90aW1lIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZjdXJyZW50X3NlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJmN1cnJlbnRfc2VnbWVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBnb3RfZW9zID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdwb2ludGVyCi1wdXNoX2J1ZmZlcnNfdGltZSAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RQYWQgKnBhZCA9IGRhdGE7Ci0gIGdpbnQgaTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCA9IDA7Ci0KLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5fQlVGRkVSUzsgaSsrKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMDApOwotCi0gICAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGJ1ZiwgMCwgaSwgMSk7Ci0KLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHRpbWVzdGFtcDsKLSAgICB0aW1lc3RhbXAgKz0gMjUgKiBHU1RfTVNFQ09ORDsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gdGltZXN0YW1wIC0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9jaGFpbiAocGFkLCBidWYpID09IEdTVF9GTE9XX09LKTsKLSAgfQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb25jYXRfc2ltcGxlX3RpbWUpCi17Ci0gIEdzdEVsZW1lbnQgKmNvbmNhdDsKLSAgR3N0UGFkICpzaW5rMSwgKnNpbmsyLCAqc2luazMsICpzcmMsICpvdXRwdXRfc2luazsKLSAgR1RocmVhZCAqdGhyZWFkMSwgKnRocmVhZDIsICp0aHJlYWQzOwotCi0gIGdvdF9lb3MgPSBGQUxTRTsKLSAgYnVmZmVyX2NvdW50ID0gMDsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJmN1cnJlbnRfc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotCi0gIGNvbmNhdCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNvbmNhdCIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoY29uY2F0ICE9IE5VTEwpOwotCi0gIHNpbmsxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChjb25jYXQsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rMSAhPSBOVUxMKTsKLQotICBzaW5rMiA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoY29uY2F0LCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAoc2luazIgIT0gTlVMTCk7Ci0KLSAgc2luazMgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGNvbmNhdCwgInNpbmtfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmszICE9IE5VTEwpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChjb25jYXQsICJzcmMiKTsKLSAgb3V0cHV0X3NpbmsgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOwotICBmYWlsX3VubGVzcyAob3V0cHV0X3NpbmsgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyYywgb3V0cHV0X3NpbmspID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG91dHB1dF9zaW5rLCBvdXRwdXRfY2hhaW5fdGltZSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChvdXRwdXRfc2luaywgb3V0cHV0X2V2ZW50X3RpbWUpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAob3V0cHV0X3NpbmssIFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChjb25jYXQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgdGhyZWFkMSA9IGdfdGhyZWFkX25ldyAoInRocmVhZDEiLCAoR1RocmVhZEZ1bmMpIHB1c2hfYnVmZmVyc190aW1lLCBzaW5rMSk7Ci0gIHRocmVhZDIgPSBnX3RocmVhZF9uZXcgKCJ0aHJlYWQyIiwgKEdUaHJlYWRGdW5jKSBwdXNoX2J1ZmZlcnNfdGltZSwgc2luazIpOwotICB0aHJlYWQzID0gZ190aHJlYWRfbmV3ICgidGhyZWFkMyIsIChHVGhyZWFkRnVuYykgcHVzaF9idWZmZXJzX3RpbWUsIHNpbmszKTsKLQotICBnX3RocmVhZF9qb2luICh0aHJlYWQxKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkMik7Ci0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDMpOwotCi0gIGZhaWxfdW5sZXNzIChnb3RfZW9zKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoYnVmZmVyX2NvdW50LCAzICogTl9CVUZGRVJTKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGNvbmNhdCwgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfcGFkX3VubGluayAoc3JjLCBvdXRwdXRfc2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGNvbmNhdCwgc2luazEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMSk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGNvbmNhdCwgc2luazIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMik7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGNvbmNhdCwgc2luazMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAob3V0cHV0X3NpbmssIEZBTFNFKTsKLSAgZ3N0X29iamVjdF91bnJlZiAob3V0cHV0X3NpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChjb25jYXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1vdXRwdXRfY2hhaW5fYnl0ZXMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIGd1aW50OCBiOwotCi0gIGZhaWxfdW5sZXNzIChjdXJyZW50X2J5dGVzID49IGN1cnJlbnRfc2VnbWVudC5zdGFydCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoY3VycmVudF9zZWdtZW50LnN0YXJ0LAotICAgICAgKGJ1ZmZlcl9jb3VudCAvIE5fQlVGRkVSUykgKiAxMDAwICogTl9CVUZGRVJTKTsKLQotICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZmZlciwgMCwgJmIsIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChiLCBidWZmZXJfY291bnQgJSBOX0JVRkZFUlMpOwotCi0gIGN1cnJlbnRfYnl0ZXMgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSwgYnVmZmVyX2NvdW50Kys7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1vdXRwdXRfZXZlbnRfYnl0ZXMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmN1cnJlbnRfc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmY3VycmVudF9zZWdtZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIGdvdF9lb3MgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXB1c2hfYnVmZmVyc19ieXRlcyAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RQYWQgKnBhZCA9IGRhdGE7Ci0gIGdpbnQgaTsKLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5fQlVGRkVSUzsgaSsrKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMDApOwotICAgIGdzdF9idWZmZXJfbWVtc2V0IChidWYsIDAsIGksIDEpOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfY2hhaW4gKHBhZCwgYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0gIH0KLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY29uY2F0X3NpbXBsZV9ieXRlcykKLXsKLSAgR3N0RWxlbWVudCAqY29uY2F0OwotICBHc3RQYWQgKnNpbmsxLCAqc2luazIsICpzaW5rMywgKnNyYywgKm91dHB1dF9zaW5rOwotICBHVGhyZWFkICp0aHJlYWQxLCAqdGhyZWFkMiwgKnRocmVhZDM7Ci0KLSAgZ290X2VvcyA9IEZBTFNFOwotICBidWZmZXJfY291bnQgPSAwOwotICBjdXJyZW50X2J5dGVzID0gMDsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJmN1cnJlbnRfc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotCi0gIGNvbmNhdCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNvbmNhdCIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoY29uY2F0ICE9IE5VTEwpOwotCi0gIHNpbmsxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChjb25jYXQsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rMSAhPSBOVUxMKTsKLQotICBzaW5rMiA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoY29uY2F0LCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAoc2luazIgIT0gTlVMTCk7Ci0KLSAgc2luazMgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGNvbmNhdCwgInNpbmtfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmszICE9IE5VTEwpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChjb25jYXQsICJzcmMiKTsKLSAgb3V0cHV0X3NpbmsgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOwotICBmYWlsX3VubGVzcyAob3V0cHV0X3NpbmsgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyYywgb3V0cHV0X3NpbmspID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG91dHB1dF9zaW5rLCBvdXRwdXRfY2hhaW5fYnl0ZXMpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAob3V0cHV0X3NpbmssIG91dHB1dF9ldmVudF9ieXRlcyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChvdXRwdXRfc2luaywgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGNvbmNhdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICB0aHJlYWQxID0gZ190aHJlYWRfbmV3ICgidGhyZWFkMSIsIChHVGhyZWFkRnVuYykgcHVzaF9idWZmZXJzX2J5dGVzLCBzaW5rMSk7Ci0gIHRocmVhZDIgPSBnX3RocmVhZF9uZXcgKCJ0aHJlYWQyIiwgKEdUaHJlYWRGdW5jKSBwdXNoX2J1ZmZlcnNfYnl0ZXMsIHNpbmsyKTsKLSAgdGhyZWFkMyA9IGdfdGhyZWFkX25ldyAoInRocmVhZDMiLCAoR1RocmVhZEZ1bmMpIHB1c2hfYnVmZmVyc19ieXRlcywgc2luazMpOwotCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDEpOwotICBnX3RocmVhZF9qb2luICh0aHJlYWQyKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkMyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdvdF9lb3MpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChidWZmZXJfY291bnQsIDMgKiBOX0JVRkZFUlMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKGN1cnJlbnRfYnl0ZXMsIDMgKiBOX0JVRkZFUlMgKiAxMDAwKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGNvbmNhdCwgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfcGFkX3VubGluayAoc3JjLCBvdXRwdXRfc2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGNvbmNhdCwgc2luazEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMSk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGNvbmNhdCwgc2luazIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMik7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGNvbmNhdCwgc2luazMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAob3V0cHV0X3NpbmssIEZBTFNFKTsKLSAgZ3N0X29iamVjdF91bnJlZiAob3V0cHV0X3NpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChjb25jYXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1jb25jYXRfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiY29uY2F0Iik7Ci0gIFRDYXNlICp0Y19jaGFpbjsKLQotICB0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImNvbmNhdCIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY29uY2F0X3NpbXBsZV90aW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvbmNhdF9zaW1wbGVfYnl0ZXMpOwotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGNvbmNhdCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvZmFrZXNpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY4MTFiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc2luay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE5MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGZha2VzaW5rCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICogICAgICAgICAgICAgICA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqICAgICAgICAgICAgICAgPDIwMDk+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RQYWQgKnBhZDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdUaHJlYWQgKnRocmVhZDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci19IENoYWluRGF0YTsKLQotc3RhdGljIGdwb2ludGVyCi1jaGFpbl9hc3luY19idWZmZXIgKGdwb2ludGVyIGRhdGEpCi17Ci0gIENoYWluRGF0YSAqY2hhaW5fZGF0YSA9IChDaGFpbkRhdGEgKikgZGF0YTsKLQotICBjaGFpbl9kYXRhLT5yZXQgPSBnc3RfcGFkX2NoYWluIChjaGFpbl9kYXRhLT5wYWQsIGNoYWluX2RhdGEtPmJ1ZmZlcik7Ci0KLSAgcmV0dXJuIGNoYWluX2RhdGE7Ci19Ci0KLXN0YXRpYyBDaGFpbkRhdGEgKgotY2hhaW5fYXN5bmMgKEdzdFBhZCAqIHBhZCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIENoYWluRGF0YSAqY2hhaW5fZGF0YTsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0KLSAgY2hhaW5fZGF0YSA9IGdfbmV3IChDaGFpbkRhdGEsIDEpOwotICBjaGFpbl9kYXRhLT5wYWQgPSBwYWQ7Ci0gIGNoYWluX2RhdGEtPmJ1ZmZlciA9IGJ1ZmZlcjsKLSAgY2hhaW5fZGF0YS0+cmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0KLSAgdGhyZWFkID0KLSAgICAgIGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCBjaGFpbl9hc3luY19idWZmZXIsIGNoYWluX2RhdGEsICZlcnJvcik7Ci0gIGlmIChlcnJvciAhPSBOVUxMKSB7Ci0gICAgZ193YXJuaW5nICgiY291bGQgbm90IGNyZWF0ZSB0aHJlYWQgcmVhc29uOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICBnX2ZyZWUgKGNoYWluX2RhdGEpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGNoYWluX2RhdGEtPnRocmVhZCA9IHRocmVhZDsKLQotICByZXR1cm4gY2hhaW5fZGF0YTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWNoYWluX2FzeW5jX3JldHVybiAoQ2hhaW5EYXRhICogZGF0YSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgZ190aHJlYWRfam9pbiAoZGF0YS0+dGhyZWFkKTsKLSAgcmV0ID0gZGF0YS0+cmV0OwotICBnX2ZyZWUgKGRhdGEpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NsaXBwaW5nKQotewotICBHc3RFbGVtZW50ICpzaW5rOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICAvKiBjcmVhdGUgc2luayAqLwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZmFpbF9pZiAoc2lua3BhZCA9PSBOVUxMKTsKLQotICAvKiBtYWtlIGVsZW1lbnQgcmVhZHkgdG8gYWNjZXB0IGRhdGEgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLQotICAvKiBzZW5kIHNlZ21lbnQgKi8KLSAgewotICAgIEdzdEV2ZW50ICpldmVudDsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gICAgZ2Jvb2xlYW4gZXJldDsKLQotICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgc2VnbWVudCIpOwotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIHNlZ21lbnQuc3RhcnQgPSAxICogR1NUX1NFQ09ORDsKLSAgICBzZWdtZW50LnN0b3AgPSA1ICogR1NUX1NFQ09ORDsKLSAgICBzZWdtZW50LnRpbWUgPSAxICogR1NUX1NFQ09ORDsKLQotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0KLSAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7Ci0gICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7Ci0gIH0KLQotICAvKiBuZXcgc2VnbWVudCBzaG91bGQgbm90IGhhdmUgZmluaXNoZWQgcHJlcm9sbCAqLwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssIE5VTEwsIE5VTEwsIDApOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotCi0gIC8qIHNlbmQgYnVmZmVyIHRoYXQgc2hvdWxkIGJlIGRyb3BwZWQgKi8KLSAgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotICAgIEdzdEZsb3dSZXR1cm4gZnJldDsKLQotICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMDsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9NU0VDT05EOwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIgdG8gYmUgZHJvcHBlZCIpOwotICAgIGZyZXQgPSBnc3RfcGFkX2NoYWluIChzaW5rcGFkLCBidWZmZXIpOwotICAgIGZhaWxfaWYgKGZyZXQgIT0gR1NUX0ZMT1dfT0spOwotICB9Ci0gIC8qIGRyb3BwZWQgYnVmZmVyIHNob3VsZCBub3QgaGF2ZSBmaW5pc2hlZCBwcmVyb2xsICovCi0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgTlVMTCwgTlVMTCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgLyogc2VuZCBidWZmZXIgdGhhdCBzaG91bGQgYmUgZHJvcHBlZCAqLwotICB7Ci0gICAgR3N0QnVmZmVyICpidWZmZXI7Ci0gICAgR3N0Rmxvd1JldHVybiBmcmV0OwotCi0gICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA1ICogR1NUX1NFQ09ORDsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9NU0VDT05EOwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIgdG8gYmUgZHJvcHBlZCIpOwotICAgIGZyZXQgPSBnc3RfcGFkX2NoYWluIChzaW5rcGFkLCBidWZmZXIpOwotICAgIGZhaWxfaWYgKGZyZXQgIT0gR1NUX0ZMT1dfT0spOwotICB9Ci0gIC8qIGRyb3BwZWQgYnVmZmVyIHNob3VsZCBub3QgaGF2ZSBmaW5pc2hlZCBwcmVyb2xsICovCi0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgTlVMTCwgTlVMTCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgLyogc2VuZCBidWZmZXIgdGhhdCBzaG91bGQgYmxvY2sgYW5kIGZpbmlzaCBwcmVyb2xsICovCi0gIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBHc3RGbG93UmV0dXJuIGZyZXQ7Ci0gICAgQ2hhaW5EYXRhICpkYXRhOwotICAgIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0KLSAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX01TRUNPTkQ7Ci0KLSAgICBHU1RfREVCVUcgKCJzZW5kaW5nIGJ1ZmZlciB0byBmaW5pc2ggcHJlcm9sbCIpOwotICAgIGRhdGEgPSBjaGFpbl9hc3luYyAoc2lua3BhZCwgYnVmZmVyKTsKLSAgICBmYWlsX2lmIChkYXRhID09IE5VTEwpOwotCi0gICAgLyogc3RhdGUgc2hvdWxkIG5vdyBldmVudHVhbGx5IGNoYW5nZSB0byBQQVVTRUQgKi8KLSAgICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICAgIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOwotCi0gICAgLyogcGxheWluZyBzaG91bGQgcmVuZGVyIHRoZSBidWZmZXIgKi8KLSAgICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgICAvKiBhbmQgd2Ugc2hvdWxkIGdldCBhIHN1Y2Nlc3MgcmV0dXJuIHZhbHVlICovCi0gICAgZnJldCA9IGNoYWluX2FzeW5jX3JldHVybiAoZGF0YSk7Ci0gICAgZmFpbF9pZiAoZnJldCAhPSBHU1RfRkxPV19PSyk7Ci0gIH0KLQotICAvKiBzZW5kIHNvbWUgYnVmZmVyIHRoYXQgd2lsbCBiZSBkcm9wcGVkIG9yIGNsaXBwZWQsIHRoaXMgY2FuIAotICAgKiBvbmx5IGJlIG9ic2VydmVkIGluIHRoZSBkZWJ1ZyBsb2cuICovCi0gIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBHc3RGbG93UmV0dXJuIGZyZXQ7Ci0KLSAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDYgKiBHU1RfU0VDT05EOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX01TRUNPTkQ7Ci0KLSAgICAvKiBzaG91bGQgYmUgZHJvcHBlZCAqLwotICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgYnVmZmVyIHRvIGRyb3AiKTsKLSAgICBmcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKLSAgICBmYWlsX2lmIChmcmV0ICE9IEdTVF9GTE9XX09LKTsKLQotICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMCAqIEdTVF9TRUNPTkQ7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDIgKiBHU1RfU0VDT05EOwotCi0gICAgLyogc2hvdWxkIGJlIGNsaXBwZWQgKi8KLSAgICBHU1RfREVCVUcgKCJzZW5kaW5nIGJ1ZmZlciB0byBjbGlwIik7Ci0gICAgZnJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gICAgZmFpbF9pZiAoZnJldCAhPSBHU1RfRkxPV19PSyk7Ci0KLSAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDQgKiBHU1RfU0VDT05EOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAyICogR1NUX1NFQ09ORDsKLQotICAgIC8qIHNob3VsZCBiZSBjbGlwcGVkICovCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIgdG8gY2xpcCIpOwotICAgIGZyZXQgPSBnc3RfcGFkX2NoYWluIChzaW5rcGFkLCBidWZmZXIpOwotICAgIGZhaWxfaWYgKGZyZXQgIT0gR1NUX0ZMT1dfT0spOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2ludCBudW1fcHJlcm9sbCA9IDA7Ci0KLXN0YXRpYyB2b2lkCi1wcmVyb2xsX2NvdW50IChHc3RFbGVtZW50ICogc2luaykKLXsKLSAgbnVtX3ByZXJvbGwrKzsKLSAgR1NUX0RFQlVHICgiZ290IHByZXJvbGwgaGFuZG9mZiAlZCIsIG51bV9wcmVyb2xsKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHJlcm9sbF9zeW5jKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNpbms7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIC8qIGNyZWF0ZSBzaW5rICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGZhaWxfaWYgKHBpcGVsaW5lID09IE5VTEwpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAic3luYyIsIFRSVUUsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzaW5rLCAicHJlcm9sbC1oYW5kb2ZmIiwgR19DQUxMQkFDSyAocHJlcm9sbF9jb3VudCksIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChudW1fcHJlcm9sbCA9PSAwKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7Ci0gIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCk7Ci0KLSAgLyogbWFrZSBwaXBlbGluZSBhbmQgZWxlbWVudCByZWFkeSB0byBhY2NlcHQgZGF0YSAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLQotICAvKiBzZW5kIHNlZ21lbnQgKi8KLSAgewotICAgIEdzdEV2ZW50ICpldmVudDsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gICAgZ2Jvb2xlYW4gZXJldDsKLQotICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgc2VnbWVudCIpOwotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIHNlZ21lbnQuc3RhcnQgPSAwICogR1NUX1NFQ09ORDsKLSAgICBzZWdtZW50LnN0b3AgPSAxMDIgKiBHU1RfU0VDT05EOwotICAgIHNlZ21lbnQudGltZSA9IDAgKiBHU1RfU0VDT05EOwotCi0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLSAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7Ci0gICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7Ci0gIH0KLQotICAvKiBzZW5kIGJ1ZmZlciB0aGF0IHNob3VsZCBibG9jayBhbmQgZmluaXNoIHByZXJvbGwgKi8KLSAgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotICAgIEdzdEZsb3dSZXR1cm4gZnJldDsKLSAgICBDaGFpbkRhdGEgKmRhdGE7Ci0gICAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKLQotICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIgdG8gZmluaXNoIHByZXJvbGwiKTsKLSAgICBkYXRhID0gY2hhaW5fYXN5bmMgKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gICAgZmFpbF9pZiAoZGF0YSA9PSBOVUxMKTsKLQotICAgIC8qIHN0YXRlIHNob3VsZCBub3cgZXZlbnR1YWxseSBjaGFuZ2UgdG8gUEFVU0VEICovCi0gICAgcmV0ID0KLSAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLAotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gICAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyk7Ci0KLSAgICBmYWlsX3VubGVzcyAobnVtX3ByZXJvbGwgPT0gMSk7Ci0KLSAgICAvKiBwbGF5aW5nIHNob3VsZCByZW5kZXIgdGhlIGJ1ZmZlciAqLwotICAgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgICAvKiBhbmQgd2Ugc2hvdWxkIGdldCBhIHN1Y2Nlc3MgcmV0dXJuIHZhbHVlICovCi0gICAgZnJldCA9IGNoYWluX2FzeW5jX3JldHVybiAoZGF0YSk7Ci0gICAgZmFpbF9pZiAoZnJldCAhPSBHU1RfRkxPV19PSyk7Ci0KLSAgICAvKiBub3cgd2UgYXJlIHBsYXlpbmcgbm8gbmV3IHByZXJvbGwgd2FzIGRvbmUgKi8KLSAgICBmYWlsX3VubGVzcyAobnVtX3ByZXJvbGwgPT0gMSk7Ci0KLSAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICAvKiBmYXIgaW4gdGhlIGZ1dHVyZSB0byBtYWtlIHN1cmUgd2UgYmxvY2sgKi8KLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDEwMCAqIEdTVF9TRUNPTkQ7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEwMCAqIEdTVF9TRUNPTkQ7Ci0gICAgZGF0YSA9IGNoYWluX2FzeW5jIChzaW5rcGFkLCBidWZmZXIpOwotICAgIGZhaWxfaWYgKGRhdGEgPT0gTlVMTCk7Ci0KLSAgICBnX3VzbGVlcCAoMTAwMDAwMCk7Ci0KLSAgICAvKiBwYXVzZSBhZ2Fpbi4gU2luY2UgdGhlIGJ1ZmZlciBoYXMgYSBodW1vbmdvdXMgdGltZXN0YW1wIHdlIGxpa2VseQotICAgICAqIGludGVycnVwdCB0aGUgY2xvY2tfd2FpdCBhbmQgd2Ugc2hvdWxkIHByZXJvbGwgb24gdGhpcyBidWZmZXIgYWdhaW4gKi8KLSAgICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotCi0gICAgcmV0ID0KLSAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLAotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gICAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyk7Ci0KLSAgICBmYWlsX3VubGVzcyAobnVtX3ByZXJvbGwgPT0gMik7Ci0KLSAgICAvKiBzaHV0ZG93biAqLwotICAgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gICAgLyogc2hvdWxkIGJlIHdyb25nIHN0YXRlIG5vdyAqLwotICAgIGZyZXQgPSBjaGFpbl9hc3luY19yZXR1cm4gKGRhdGEpOwotICAgIGZhaWxfaWYgKGZyZXQgIT0gR1NUX0ZMT1dfRkxVU0hJTkcpOwotICB9Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogYWZ0ZXIgRU9TLCB3ZSByZWZ1c2UgZXZlcnl0aGluZyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZW9zKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNpbms7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RCdXMgKmJ1czsKLQotICAvKiBjcmVhdGUgc2luayAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBmYWlsX2lmIChwaXBlbGluZSA9PSBOVUxMKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FX0NBU1QgKHBpcGVsaW5lKSk7Ci0gIGZhaWxfaWYgKGJ1cyA9PSBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgInN5bmMiLCBUUlVFLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7Ci0gIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCk7Ci0KLSAgLyogbWFrZSBwaXBlbGluZSBhbmQgZWxlbWVudCByZWFkeSB0byBhY2NlcHQgZGF0YSAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgLyogc2VuZCBFT1MsIHRoaXMgc2hvdWxkIHdvcmsgZmluZSAqLwotICB7Ci0gICAgR3N0RXZlbnQgKmVvczsKLSAgICBnYm9vbGVhbiBlcmV0OwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBFT1MiKTsKLSAgICBlb3MgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLQotICAgIGVyZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGVvcyk7Ci0gICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7Ci0gIH0KLQotICAvKiB3YWl0IGZvciBwcmVyb2xsICovCi0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIC8qIEVPUyBzaG91bGQgYmUgb24gdGhlIGJ1cyBhdCBzb21lIHBvaW50ICovCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgR3N0TWVzc2FnZVR5cGUgdHlwZTsKLQotICAgIC8qIGJsb2NraW5nIHdhaXQgZm9yIG1lc3NhZ2VzICovCi0gICAgbWVzc2FnZSA9IGdzdF9idXNfdGltZWRfcG9wIChidXMsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgIHR5cGUgPSBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKTsKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgICBHU1RfREVCVUcgKCJnb3QgbWVzc2FnZSAlcyIsIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKHR5cGUpKTsKLQotICAgIGlmICh0eXBlID09IEdTVF9NRVNTQUdFX0VPUykKLSAgICAgIGJyZWFrOwotICB9Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgLyogc2VuZCBhbm90aGVyIEVPUywgdGhpcyBzaG91bGQgZmFpbCAqLwotICB7Ci0gICAgR3N0RXZlbnQgKmVvczsKLSAgICBnYm9vbGVhbiBlcmV0OwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBzZWNvbmQgRU9TIik7Ci0gICAgZW9zID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0KLSAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBlb3MpOwotICAgIGZhaWxfaWYgKGVyZXQgPT0gVFJVRSk7Ci0gIH0KLQotICAvKiBzZW5kIHNlZ21lbnQsIHRoaXMgc2hvdWxkIGZhaWwgKi8KLSAgewotICAgIEdzdEV2ZW50ICpldmVudDsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gICAgZ2Jvb2xlYW4gZXJldDsKLQotICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgc2VnbWVudCIpOwotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIHNlZ21lbnQuc3RhcnQgPSAwICogR1NUX1NFQ09ORDsKLSAgICBzZWdtZW50LnN0b3AgPSAyICogR1NUX1NFQ09ORDsKLSAgICBzZWdtZW50LnRpbWUgPSAwICogR1NUX1NFQ09ORDsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotCi0gICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOwotICAgIGZhaWxfaWYgKGVyZXQgPT0gVFJVRSk7Ci0gIH0KLQotICAvKiBzZW5kIGJ1ZmZlciB0aGF0IHNob3VsZCBmYWlsIGFmdGVyIEVPUyAqLwotICB7Ci0gICAgR3N0QnVmZmVyICpidWZmZXI7Ci0gICAgR3N0Rmxvd1JldHVybiBmcmV0OwotCi0gICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7Ci0KLSAgICBHU1RfREVCVUcgKCJzZW5kaW5nIGJ1ZmZlciIpOwotCi0gICAgLyogYnVmZmVyIGFmdGVyIEVPUyBpcyBub3QgRU9TICovCi0gICAgZnJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gICAgZmFpbF91bmxlc3MgKGZyZXQgPT0gR1NUX0ZMT1dfRU9TKTsKLSAgfQotCi0gIC8qIGZsdXNoLCBFT1Mgc3RhdGUgaXMgZmx1c2hlZCBhZ2Fpbi4gKi8KLSAgewotICAgIEdzdEV2ZW50ICpldmVudDsKLSAgICBnYm9vbGVhbiBlcmV0OwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBGTFVTSF9TVEFSVCIpOwotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKTsKLSAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7Ci0gICAgZmFpbF91bmxlc3MgKGVyZXQgPT0gVFJVRSk7Ci0KLSAgICBHU1RfREVCVUcgKCJzZW5kaW5nIEZMVVNIX1NUT1AiKTsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSk7Ci0gICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOwotICAgIGZhaWxfdW5sZXNzIChlcmV0ID09IFRSVUUpOwotICB9Ci0KLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0KLSAgLyogc2VuZCBzZWdtZW50LCB0aGlzIHNob3VsZCBub3cgd29yayBhZ2FpbiAqLwotICB7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgICBnYm9vbGVhbiBlcmV0OwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBzZWdtZW50Iik7Ci0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgc2VnbWVudC5zdGFydCA9IDAgKiBHU1RfU0VDT05EOwotICAgIHNlZ21lbnQuc3RvcCA9IDIgKiBHU1RfU0VDT05EOwotICAgIHNlZ21lbnQudGltZSA9IDAgKiBHU1RfU0VDT05EOwotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0KLSAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7Ci0gICAgZmFpbF91bmxlc3MgKGVyZXQgPT0gVFJVRSk7Ci0gIH0KLQotICAvKiBzZW5kIGJ1ZmZlciB0aGF0IHNob3VsZCB3b3JrIGFuZCBibG9jayAqLwotICB7Ci0gICAgR3N0QnVmZmVyICpidWZmZXI7Ci0gICAgR3N0Rmxvd1JldHVybiBmcmV0OwotCi0gICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7Ci0KLSAgICBHU1RfREVCVUcgKCJzZW5kaW5nIGJ1ZmZlciIpOwotCi0gICAgZnJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gICAgZmFpbF91bmxlc3MgKGZyZXQgPT0gR1NUX0ZMT1dfT0spOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0IEVPUyB0cmlnZ2VyZWQgYnkgdGhlIGVsZW1lbnQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VvczIpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc2luazsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgLyogY3JlYXRlIHNpbmsgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgZmFpbF9pZiAocGlwZWxpbmUgPT0gTlVMTCk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzeW5jIiwgVFJVRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAibnVtLWJ1ZmZlcnMiLCAxLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7Ci0gIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCk7Ci0KLSAgLyogbWFrZSBwaXBlbGluZSBhbmQgZWxlbWVudCByZWFkeSB0byBhY2NlcHQgZGF0YSAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0KLSAgLyogc2VuZCBzZWdtZW50LCB0aGlzIHNob3VsZCB3b3JrICovCi0gIHsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0gICAgR3N0U2VnbWVudCBzZWdtZW50OwotICAgIGdib29sZWFuIGVyZXQ7Ci0KLSAgICBHU1RfREVCVUcgKCJzZW5kaW5nIHNlZ21lbnQiKTsKLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgICBzZWdtZW50LnN0YXJ0ID0gMCAqIEdTVF9TRUNPTkQ7Ci0gICAgc2VnbWVudC5zdG9wID0gMiAqIEdTVF9TRUNPTkQ7Ci0gICAgc2VnbWVudC50aW1lID0gMCAqIEdTVF9TRUNPTkQ7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLQotICAgIGVyZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKLSAgICBmYWlsX2lmIChlcmV0ID09IEZBTFNFKTsKLSAgfQotCi0gIC8qIHNlbmQgYnVmZmVyIHRoYXQgc2hvdWxkIHJldHVybiBFT1MgKi8KLSAgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotICAgIEdzdEZsb3dSZXR1cm4gZnJldDsKLQotICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIiKTsKLQotICAgIC8qIHRoaXMgYnVmZmVyIHdpbGwgZ2VuZXJhdGUgRU9TICovCi0gICAgZnJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gICAgZmFpbF91bmxlc3MgKGZyZXQgPT0gR1NUX0ZMT1dfRU9TKTsKLSAgfQotCi0gIC8qIHNlbmQgYnVmZmVyIHRoYXQgc2hvdWxkIHJldHVybiBFT1MgKi8KLSAgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotICAgIEdzdEZsb3dSZXR1cm4gZnJldDsKLQotICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIiKTsKLQotICAgIGZyZXQgPSBnc3RfcGFkX2NoYWluIChzaW5rcGFkLCBidWZmZXIpOwotICAgIGZhaWxfdW5sZXNzIChmcmV0ID09IEdTVF9GTE9XX0VPUyk7Ci0gIH0KLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgcG9zaXRpb24gcmVwb3J0aW5nIGJlZm9yZSwgZHVyaW5nIGFuZCBhZnRlciBmbHVzaCAKLSAqIGluIFBBVVNFRCBhbmQgUExBWUlORyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9zaXRpb24pCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc2luazsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIGdib29sZWFuIHFyZXQ7Ci0gIGdpbnQ2NCBxY3VyOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Rmxvd1JldHVybiBmcmV0OwotICBDaGFpbkRhdGEgKmRhdGE7Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgZ2Jvb2xlYW4gZXJldDsKLSAgZ2ludCBpOwotCi0gIC8qIGNyZWF0ZSBzaW5rICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGZhaWxfaWYgKHBpcGVsaW5lID09IE5VTEwpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAic3luYyIsIFRSVUUsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgIm51bS1idWZmZXJzIiwgMiwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwpOwotCi0gIC8qIGRvIHBvc2l0aW9uIHF1ZXJ5LCB0aGlzIHNob3VsZCBmYWlsLCB3ZSBoYXZlIG5vdGhpbmcgcmVjZWl2ZWQgeWV0ICovCi0gIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7Ci0gIGZhaWxfdW5sZXNzIChxcmV0ID09IEZBTFNFKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFkpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIGZhaWwsIHdlIGhhdmUgbm90aGluZyByZWNlaXZlZCB5ZXQgKi8KLSAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKLSAgZmFpbF91bmxlc3MgKHFyZXQgPT0gRkFMU0UpOwotCi0gIC8qIG1ha2UgcGlwZWxpbmUgYW5kIGVsZW1lbnQgcmVhZHkgdG8gYWNjZXB0IGRhdGEgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgLyogZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIGZhaWwsIHdlIGhhdmUgbm90aGluZyByZWNlaXZlZCB5ZXQgKi8KLSAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKLSAgZmFpbF91bmxlc3MgKHFyZXQgPT0gRkFMU0UpOwotCi0gIGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotCi0gIC8qIHNlbmQgc2VnbWVudCwgdGhpcyBzaG91bGQgd29yayAqLwotICB7Ci0gICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBzZWdtZW50Iik7Ci0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgc2VnbWVudC5zdGFydCA9IDEgKiBHU1RfU0VDT05EOwotICAgIHNlZ21lbnQuc3RvcCA9IDMgKiBHU1RfU0VDT05EOwotICAgIHNlZ21lbnQudGltZSA9IDEgKiBHU1RfU0VDT05EOwotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0KLSAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7Ci0gICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7Ci0gIH0KLQotICAvKiBGSVhNRSwgZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0aGUgdGltZSB2YWx1ZSBmcm9tIHRoZQotICAgKiBzZWdtZW50LiAqLwotICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOwotICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHFjdXIgPT0gMSAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIHNlbmQgYnVmZmVyIHRoYXQgd2Ugd2lsbCBmbHVzaCBvdXQgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMiAqIEdTVF9TRUNPTkQ7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKLQotICBHU1RfREVCVUcgKCJzZW5kaW5nIGJ1ZmZlciIpOwotCi0gIC8qIHRoaXMgYnVmZmVyIGNhdXNlcyB0aGUgc2luayB0byBwcmVyb2xsICovCi0gIGRhdGEgPSBjaGFpbl9hc3luYyAoc2lua3BhZCwgYnVmZmVyKTsKLSAgZmFpbF9pZiAoZGF0YSA9PSBOVUxMKTsKLQotICAvKiB3YWl0IGZvciBwcmVyb2xsICovCi0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIC0xKTsKLQotICAvKiBkbyBwb3NpdGlvbiBxdWVyeSwgdGhpcyBzaG91bGQgc3VjY2VlZCB3aXRoIHRoZSB0aW1lIHZhbHVlIGZyb20gdGhlCi0gICAqIHNlZ21lbnQuICovCi0gIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7Ci0gIGZhaWxfdW5sZXNzIChxcmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAocWN1ciA9PSAxICogR1NUX1NFQ09ORCk7Ci0KLSAgLyogc3RhcnQgZmx1c2hpbmcsIG5vIHRpbWluZyBpcyBhZmZlY3RlZCB5ZXQgKi8KLSAgewotICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgZmx1c2hfc3RhcnQiKTsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCk7Ci0KLSAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7Ci0gICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7Ci0gIH0KLQotICAvKiBwcmVyb2xsIGJ1ZmZlciBpcyBmbHVzaGVkIG91dCAqLwotICBmcmV0ID0gY2hhaW5fYXN5bmNfcmV0dXJuIChkYXRhKTsKLSAgZmFpbF91bmxlc3MgKGZyZXQgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpOwotCi0gIC8qIGRvIHBvc2l0aW9uIHF1ZXJ5LCB0aGlzIHNob3VsZCBzdWNjZWVkIHdpdGggdGhlIHRpbWUgdmFsdWUgZnJvbSB0aGUKLSAgICogc2VnbWVudCBiZWZvcmUgdGhlIGZsdXNoLiAqLwotICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOwotICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHFjdXIgPT0gMSAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIHN0b3AgZmx1c2hpbmcsIHRpbWluZyBpcyBhZmZlY3RlZCBub3cgKi8KLSAgewotICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgZmx1c2hfc3RvcCIpOwotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKTsKLQotICAgIGVyZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKLSAgICBmYWlsX2lmIChlcmV0ID09IEZBTFNFKTsKLSAgfQotCi0gIC8qIGRvIHBvc2l0aW9uIHF1ZXJ5LCB0aGlzIHNob3VsZCBmYWlsLCB0aGUgc2VnbWVudCBpcyBmbHVzaGVkICovCi0gIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7Ci0gIGZhaWxfdW5sZXNzIChxcmV0ID09IEZBTFNFKTsKLQotICAvKiBzZW5kIHNlZ21lbnQsIHRoaXMgc2hvdWxkIHdvcmsgKi8KLSAgewotICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICAgIEdTVF9ERUJVRyAoInNlbmRpbmcgc2VnbWVudCIpOwotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIHNlZ21lbnQuc3RhcnQgPSAyICogR1NUX1NFQ09ORDsKLSAgICBzZWdtZW50LnN0b3AgPSA0ICogR1NUX1NFQ09ORDsKLSAgICBzZWdtZW50LnRpbWUgPSAxICogR1NUX1NFQ09ORDsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotCi0gICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOwotICAgIGZhaWxfaWYgKGVyZXQgPT0gRkFMU0UpOwotICB9Ci0KLSAgLyogc2VuZCBidWZmZXIgdGhhdCBzaG91bGQgcmV0dXJuIE9LICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDMgKiBHU1RfU0VDT05EOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7Ci0KLSAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIiKTsKLQotICAvKiB0aGlzIGJ1ZmZlciBjYXVzZXMgdGhlIHNpbmsgdG8gcHJlcm9sbCAqLwotICBkYXRhID0gY2hhaW5fYXN5bmMgKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gIGZhaWxfaWYgKGRhdGEgPT0gTlVMTCk7Ci0KLSAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIHN1Y2NlZWQgd2l0aCB0aGUgdGltZSB2YWx1ZSBmcm9tIHRoZQotICAgKiBzZWdtZW50LiAqLwotICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOwotICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHFjdXIgPT0gMSAqIEdTVF9TRUNPTkQpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIHBvc2l0aW9uIG5vdyBpcyBpbmNyZWFzaW5nIGJ1dCBuZXZlciBleGNlZWRzIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBzZWdtZW50ICovCi0gIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLSAgICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOwotICAgIEdTVF9ERUJVRyAoInBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocWN1cikpOwotICAgIGZhaWxfdW5sZXNzIChxcmV0ID09IFRSVUUpOwotICAgIGZhaWxfdW5sZXNzIChxY3VyID49IDEgKiBHU1RfU0VDT05EICYmIHFjdXIgPD0gMyAqIEdTVF9TRUNPTkQpOwotICAgIGdfdXNsZWVwICgxMDAwICogMjUwKTsKLSAgfQotCi0gIC8qIHByZXJvbGwgYnVmZmVyIGlzIHJlbmRlcmVkLCB3ZSBleHBlY3Qgb25lIG1vcmUgYnVmZmVyIGFmdGVyIHRoaXMgb25lICovCi0gIGZyZXQgPSBjaGFpbl9hc3luY19yZXR1cm4gKGRhdGEpOwotICBmYWlsX3VubGVzcyAoZnJldCA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgLyogYWZ0ZXIgcmVuZGVyaW5nIHRoZSBwb3NpdGlvbiBtdXN0IGJlIGJpZ2dlciB0aGVuIHRoZSBzdHJlYW1fdGltZSBvZiB0aGUKLSAgICogYnVmZmVyICovCi0gIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7Ci0gIGZhaWxfdW5sZXNzIChxcmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAocWN1ciA+PSAyICogR1NUX1NFQ09ORCAmJiBxY3VyIDw9IDMgKiBHU1RfU0VDT05EKTsKLQotICAvKiBzdGFydCBmbHVzaGluZyBpbiBQTEFZSU5HICovCi0gIHsKLSAgICBHU1RfREVCVUcgKCJzZW5kaW5nIGZsdXNoX3N0YXJ0Iik7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpOwotCi0gICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOwotICAgIGZhaWxfaWYgKGVyZXQgPT0gRkFMU0UpOwotICB9Ci0KLSAgLyogdGhpcyBzaG91bGQgbm93IGp1c3QgcmVwb3J0IHRoZSBsYXN0IHN0cmVhbSB0aW1lICovCi0gIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7Ci0gIGZhaWxfdW5sZXNzIChxcmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAocWN1ciA+PSAyICogR1NUX1NFQ09ORCAmJiBxY3VyIDw9IDMgKiBHU1RfU0VDT05EKTsKLQotICB7Ci0gICAgR1NUX0RFQlVHICgic2VuZGluZyBmbHVzaF9zdG9wIik7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpOwotCi0gICAgZXJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOwotICAgIGZhaWxfaWYgKGVyZXQgPT0gRkFMU0UpOwotICB9Ci0KLSAgLyogZG8gcG9zaXRpb24gcXVlcnksIHRoaXMgc2hvdWxkIGZhaWwsIHRoZSBzZWdtZW50IGlzIGZsdXNoZWQgKi8KLSAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKLSAgZmFpbF91bmxlc3MgKHFyZXQgPT0gRkFMU0UpOwotCi0gIC8qIHNlbmQgc2VnbWVudCwgdGhpcyBzaG91bGQgd29yayAqLwotICB7Ci0gICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgR1NUX0RFQlVHICgic2VuZGluZyBzZWdtZW50Iik7Ci0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgc2VnbWVudC5zdGFydCA9IDIgKiBHU1RfU0VDT05EOwotICAgIHNlZ21lbnQuc3RvcCA9IDQgKiBHU1RfU0VDT05EOwotICAgIHNlZ21lbnQudGltZSA9IDEgKiBHU1RfU0VDT05EOwotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0KLSAgICBlcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCk7Ci0gICAgZmFpbF9pZiAoZXJldCA9PSBGQUxTRSk7Ci0gIH0KLQotICAvKiBzZW5kIGJ1ZmZlciB0aGF0IHNob3VsZCByZXR1cm4gRU9TICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDMgKiBHU1RfU0VDT05EOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMSAqIEdTVF9TRUNPTkQ7Ci0KLSAgR1NUX0RFQlVHICgic2VuZGluZyBidWZmZXIiKTsKLQotICAvKiB0aGlzIGJ1ZmZlciBjYXVzZXMgdGhlIHNpbmsgdG8gcHJlcm9sbCAqLwotICBkYXRhID0gY2hhaW5fYXN5bmMgKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gIGZhaWxfaWYgKGRhdGEgPT0gTlVMTCk7Ci0KLSAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogcHJlcm9sbCBidWZmZXIgaXMgcmVuZGVyZWQsIHdlIGV4cGVjdCBubyBtb3JlIGJ1ZmZlciBhZnRlciB0aGlzIG9uZSAqLwotICBmcmV0ID0gY2hhaW5fYXN5bmNfcmV0dXJuIChkYXRhKTsKLSAgZmFpbF91bmxlc3MgKGZyZXQgPT0gR1NUX0ZMT1dfRU9TKTsKLQotICAvKiBkbyBwb3NpdGlvbiBxdWVyeSwgdGhpcyBzaG91bGQgc3VjY2VlZCB3aXRoIHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgYnVmZmVyCi0gICAqIGFnYWluc3QgdGhlIGNsb2NrLiBTaW5jZSB0aGUgYnVmZmVyIGlzIHN5bmNlZCBhZ2FpbnN0IHRoZSBjbG9jaywgdGhlIHRpbWUKLSAgICogc2hvdWxkIGJlIGF0IGxlYXN0IHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgYnVmZmVyLiAqLwotICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOwotICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHFjdXIgPj0gMiAqIEdTVF9TRUNPTkQgJiYgcWN1ciA8PSAzICogR1NUX1NFQ09ORCk7Ci0KLSAgLyogd2FpdCAyIG1vcmUgc2Vjb25kcywgZW5vdWdoIHRvIHRlc3QgaWYgdGhlIHBvc2l0aW9uIHdhcyBjbGlwcGVkIGNvcnJlY3RseQotICAgKiBhZ2FpbnN0IHRoZSBzZWdtZW50ICovCi0gIGdfdXNsZWVwICgyICogR19VU0VDX1BFUl9TRUMpOwotCi0gIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcWN1cik7Ci0gIGZhaWxfdW5sZXNzIChxcmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAocWN1ciA9PSAzICogR1NUX1NFQ09ORCk7Ci0KLSAgR1NUX0RFQlVHICgiZ29pbmcgdG8gUEFVU0VEIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgLyogd2UgcmVwb3J0IHRoZSB0aW1lIG9mIHRoZSBsYXN0IHN0YXJ0IG9mIHRoZSBidWZmZXIuIFRoaXMgaXMgc2xpZ2h0bHkKLSAgICogaW5jb3JyZWN0LCB3ZSBzaG91bGQgcmVwb3J0IHRoZSBleGFjdCB0aW1lIHdoZW4gd2UgcGF1c2VkIGJ1dCB0aGVyZSBpcyBubwotICAgKiByZWNvcmQgb2YgdGhhdCBhbnl3aGVyZSAqLwotICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOwotICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHFjdXIgPT0gMyAqIEdTVF9TRUNPTkQpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiBmYWlscyBhZ2FpbiBiZWNhdXNlIHdlIGFyZSBpbiB0aGUgd3Jvbmcgc3RhdGUgKi8KLSAgcXJldCA9IGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZxY3VyKTsKLSAgZmFpbF91bmxlc3MgKHFyZXQgPT0gRkFMU0UpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnFjdXIpOwotICBmYWlsX3VubGVzcyAocXJldCA9PSBGQUxTRSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBsaWtlIGZha2VzcmMsIGJ1dCBhbHNvIHB1c2hlcyBhbiBPT0IgZXZlbnQgYWZ0ZXIgZWFjaCBidWZmZXIgKi8KLXR5cGVkZWYgR3N0UHVzaFNyYyBPT0JTb3VyY2U7Ci10eXBlZGVmIEdzdFB1c2hTcmNDbGFzcyBPT0JTb3VyY2VDbGFzczsKLQotR1R5cGUgb29iX3NvdXJjZV9nZXRfdHlwZSAodm9pZCk7Ci1HX0RFRklORV9UWVBFIChPT0JTb3VyY2UsIG9vYl9zb3VyY2UsIEdTVF9UWVBFX1BVU0hfU1JDKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLW9vYl9zb3VyY2VfY3JlYXRlIChHc3RQdXNoU3JjICogc3JjLCBHc3RCdWZmZXIgKiogcF9idWYpCi17Ci0gICpwX2J1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX0JBU0VfU1JDX1BBRCAoc3JjKSwKLSAgICAgIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09CLCBOVUxMKSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotb29iX3NvdXJjZV9jbGFzc19pbml0IChPT0JTb3VyY2VDbGFzcyAqIGtsYXNzKQotewotICBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgICAgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0UHVzaFNyY0NsYXNzICpwdXNoc3JjX2NsYXNzID0gR1NUX1BVU0hfU1JDX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rdGVtcGxhdGUpOwotCi0gIHB1c2hzcmNfY2xhc3MtPmNyZWF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChvb2Jfc291cmNlX2NyZWF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vb2Jfc291cmNlX2luaXQgKE9PQlNvdXJjZSAqIHNyYykKLXsKLSAgLyogbm90aGluZyB0byBkbyAqLwotfQotCi0jZGVmaW5lIE5PVElGWV9SQUNFX05VTV9QSVBFTElORVMgMTAKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0RWxlbWVudCAqc3JjOwotICBHc3RFbGVtZW50ICpxdWV1ZTsKLSAgR3N0RWxlbWVudCAqc2luazsKLSAgR3N0RWxlbWVudCAqcGlwZTsKLX0gTm90aWZ5UmFjZVBpcGVsaW5lOwotCi1zdGF0aWMgdm9pZAotdGVzdF9ub3RpZnlfcmFjZV9zZXR1cF9waXBlbGluZSAoTm90aWZ5UmFjZVBpcGVsaW5lICogcCkKLXsKLSAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgcGlwZWxpbmUiKTsKLSAgcC0+cGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBwLT5zcmMgPSBnX29iamVjdF9uZXcgKG9vYl9zb3VyY2VfZ2V0X3R5cGUgKCksIE5VTEwpOwotCi0gIHAtPnF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChwLT5xdWV1ZSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAyLCBOVUxMKTsKLQotICBwLT5zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHAtPnBpcGUpLCBwLT5zcmMpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocC0+cGlwZSksIHAtPnF1ZXVlKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHAtPnBpcGUpLCBwLT5zaW5rKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChwLT5zcmMsIHAtPnF1ZXVlLCBwLT5zaW5rLCBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkciKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwLT5waXBlLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLSAgR1NUX0RFQlVHICgiR2V0dGluZyBzdGF0ZSIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHAtPnBpcGUsIE5VTEwsIE5VTEwsIC0xKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X25vdGlmeV9yYWNlX2NsZWFudXBfcGlwZWxpbmUgKE5vdGlmeVJhY2VQaXBlbGluZSAqIHApCi17Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocC0+cGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwLT5waXBlKTsKLSAgbWVtc2V0IChwLCAwLCBzaXplb2YgKE5vdGlmeVJhY2VQaXBlbGluZSkpOwotfQotCi0vKiB3ZSBjcmVhdGUgTiBwaXBlbGluZXMgdG8gbWFrZSBzdXJlIHRoZSBub3RpZnkgcmFjZSBpc24ndCBwZXItY2xhc3MsIGJ1dAotICogb25seSBwZXIgaW5zdGFuY2UgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vdGlmeV9yYWNlKQotewotICBOb3RpZnlSYWNlUGlwZWxpbmUgcGlwZWxpbmVzW05PVElGWV9SQUNFX05VTV9QSVBFTElORVNdOwotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChwaXBlbGluZXMpOyArK2kpIHsKLSAgICBHU1RfREVCVUcgKCJTdGFydGluZyB1cCBwaXBlbGluZSAlZCIsIGkpOwotICAgIHRlc3Rfbm90aWZ5X3JhY2Vfc2V0dXBfcGlwZWxpbmUgKCZwaXBlbGluZXNbaV0pOwotICB9Ci0KLSAgZ191c2xlZXAgKDIgKiBHX1VTRUNfUEVSX1NFQyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAocGlwZWxpbmVzKTsgKytpKSB7Ci0gICAgR1NUX0RFQlVHICgiQ2xlYW5pbmcgdXAgcGlwZWxpbmUgJWQiLCBpKTsKLSAgICB0ZXN0X25vdGlmeV9yYWNlX2NsZWFudXBfcGlwZWxpbmUgKCZwaXBlbGluZXNbaV0pOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLWxhc3RfbWVzc2FnZV9jYiAoR09iamVjdCAqIG9iaiwgR1BhcmFtU3BlYyAqIHBzcGVjLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdpbnQgKnBfY291bnRlciA9IHVzZXJfZGF0YTsKLSAgZ2NoYXIgKnMsICplbmQsICpsYXN0X21zZyA9IE5VTEw7Ci0gIGd1aW50NjQgb2Zmc2V0LCBjb3VudDsKLQotICBnX29iamVjdF9nZXQgKG9iaiwgImxhc3QtbWVzc2FnZSIsICZsYXN0X21zZywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChsYXN0X21zZyAhPSBOVUxMKTsKLQotICBpZiAoIXN0cnN0ciAobGFzdF9tc2csICJjaGFpbiIpKQotICAgIGdvdG8gc2tpcDsKLQotICBHU1RfTE9HX09CSkVDVCAob2JqLCAiJXMiLCBsYXN0X21zZyk7Ci0KLSAgcyA9IHN0cnN0ciAobGFzdF9tc2csICJvZmZzZXQ6ICIpOwotICBmYWlsX3VubGVzcyAocyAhPSBOVUxMKTsKLQotICBzICs9IHN0cmxlbiAoIm9mZnNldDogIik7Ci0KLSAgb2Zmc2V0ID0gZ19hc2NpaV9zdHJ0b3VsbCAocywgJmVuZCwgMTApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0IDwgR19NQVhVSU5UNjQpOwotICBmYWlsX2lmIChlbmQgPT0gcyk7Ci0KLSAgY291bnQgPSAqcF9jb3VudGVyOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGNvdW50LCBvZmZzZXQpOwotCi0gICpwX2NvdW50ZXIgPSBjb3VudCArIDE7Ci0KLXNraXA6Ci0KLSAgZ19mcmVlIChsYXN0X21zZyk7Ci19Ci0KLSNkZWZpbmUgTlVNX0JVRkZFUlMgNTAwCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xhc3RfbWVzc2FnZV9ub3RpZnkpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGUsICpzcmMsICp0ZWUsICpxMSwgKnEyLCAqc2luazEsICpzaW5rMjsKLSAgZ2ludCBjb3VudGVyMSA9IDA7Ci0gIGdpbnQgY291bnRlcjIgPSAwOwotICBHc3RNZXNzYWdlICptOwotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoR19PQkpFQ1QgKHNyYyksICJzaXpldHlwZSIsICJmaXhlZCIpOwotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgTlVNX0JVRkZFUlMsICJzaXplbWF4IiwgMSwgTlVMTCk7Ci0KLSAgdGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVlIiwgTlVMTCk7Ci0KLSAgcTEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpOwotICBzaW5rMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc2luazEsICJzaWxlbnQiLCBGQUxTRSwgTlVMTCk7Ci0KLSAgcTIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpOwotICBzaW5rMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc2luazIsICJzaWxlbnQiLCBGQUxTRSwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZSksIHNyYywgdGVlLCBxMSwgcTIsIHNpbmsxLCBzaW5rMiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX21hbnkgKHNyYywgdGVlLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX21hbnkgKHRlZSwgcTEsIHNpbmsxLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX21hbnkgKHRlZSwgcTIsIHNpbmsyLCBOVUxMKSk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoc2luazEsICJub3RpZnk6Omxhc3QtbWVzc2FnZSIsCi0gICAgICBHX0NBTExCQUNLIChsYXN0X21lc3NhZ2VfY2IpLCAmY291bnRlcjEpOwotICBnX3NpZ25hbF9jb25uZWN0IChzaW5rMiwgIm5vdGlmeTo6bGFzdC1tZXNzYWdlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGxhc3RfbWVzc2FnZV9jYiksICZjb3VudGVyMik7Ci0KLSAgR1NUX0RFQlVHICgiU2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgbSA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLCAtMSwgR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG0pOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjb3VudGVyMSwgTlVNX0JVRkZFUlMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjb3VudGVyMiwgTlVNX0JVRkZFUlMpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1kZWVwX25vdGlmeV9sYXN0X21lc3NhZ2VfY2IgKEdzdE9iamVjdCAqIG9iaiwgR3N0T2JqZWN0ICogcHJvcF9vYmosCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdpbnQgKmNvdW50ZXJfYXJyYXkgPSB1c2VyX2RhdGE7Ci0gIGdpbnQgKnBfY291bnRlcjsKLSAgZ2NoYXIgKnMsICplbmQsICpsYXN0X21zZyA9IE5VTEw7Ci0gIGd1aW50NjQgb2Zmc2V0LCBjb3VudDsKLQotICBpZiAoc3RyY21wIChHU1RfT0JKRUNUX05BTUUgKHByb3Bfb2JqKSwgImZha2VzaW5rMCIpID09IDApCi0gICAgcF9jb3VudGVyID0gY291bnRlcl9hcnJheTsKLSAgZWxzZSBpZiAoc3RyY21wIChHU1RfT0JKRUNUX05BTUUgKHByb3Bfb2JqKSwgImZha2VzaW5rMSIpID09IDApCi0gICAgcF9jb3VudGVyID0gY291bnRlcl9hcnJheSArIDE7Ci0gIGVsc2UKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLQotICBnX29iamVjdF9nZXQgKHByb3Bfb2JqLCAibGFzdC1tZXNzYWdlIiwgJmxhc3RfbXNnLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGxhc3RfbXNnICE9IE5VTEwpOwotCi0gIGlmICghc3Ryc3RyIChsYXN0X21zZywgImNoYWluIikpCi0gICAgZ290byBza2lwOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwcm9wX29iaiwgIiVzIiwgbGFzdF9tc2cpOwotCi0gIHMgPSBzdHJzdHIgKGxhc3RfbXNnLCAib2Zmc2V0OiAiKTsKLSAgZmFpbF91bmxlc3MgKHMgIT0gTlVMTCk7Ci0KLSAgcyArPSBzdHJsZW4gKCJvZmZzZXQ6ICIpOwotCi0gIG9mZnNldCA9IGdfYXNjaWlfc3RydG91bGwgKHMsICZlbmQsIDEwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA8IEdfTUFYVUlOVDY0KTsKLSAgZmFpbF9pZiAoZW5kID09IHMpOwotCi0gIGNvdW50ID0gKnBfY291bnRlcjsKLQotLy8gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGNvdW50LCBvZmZzZXQpOwotCi0gICpwX2NvdW50ZXIgPSBjb3VudCArIDE7Ci0KLXNraXA6Ci0KLSAgZ19mcmVlIChsYXN0X21zZyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xhc3RfbWVzc2FnZV9kZWVwX25vdGlmeSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZSwgKnNyYywgKnRlZSwgKnExLCAqcTIsICpzaW5rMSwgKnNpbmsyOwotICBnaW50IGNvdW50ZXJbMl0gPSB7IDAsIDAgfTsKLSAgR3N0TWVzc2FnZSAqbTsKLQotICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcgKEdfT0JKRUNUIChzcmMpLCAic2l6ZXR5cGUiLCAiZml4ZWQiKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIE5VTV9CVUZGRVJTLCAic2l6ZW1heCIsIDEsIE5VTEwpOwotCi0gIHRlZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlZSIsIE5VTEwpOwotCi0gIHExID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKLSAgc2luazEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmsxLCAic2lsZW50IiwgRkFMU0UsIE5VTEwpOwotCi0gIHEyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKLSAgc2luazIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmsyLCAic2lsZW50IiwgRkFMU0UsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGUpLCBzcmMsIHRlZSwgcTEsIHEyLCBzaW5rMSwgc2luazIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIHRlZSwgTlVMTCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19tYW55ICh0ZWUsIHExLCBzaW5rMSwgTlVMTCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19tYW55ICh0ZWUsIHEyLCBzaW5rMiwgTlVMTCkpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHBpcGUsICJkZWVwLW5vdGlmeTo6bGFzdC1tZXNzYWdlIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRlZXBfbm90aWZ5X2xhc3RfbWVzc2FnZV9jYiksIGNvdW50ZXIpOwotCi0gIEdTVF9ERUJVRyAoIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotCi0gIG0gPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwgLTEsIEdTVF9NRVNTQUdFX0VPUyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgR1NUX0VSUk9SICgic2luazE6ICVkLCBzaW5rMjogJWQsIHRvdGFsOiAlZCIsIGNvdW50ZXJbMF0sIGNvdW50ZXJbMV0sCi0gICAgICBjb3VudGVyWzBdICsgY291bnRlclsxXSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoY291bnRlclswXSwgTlVNX0JVRkZFUlMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjb3VudGVyWzFdLCBOVU1fQlVGRkVSUyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWZha2VzaW5rX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImZha2VzaW5rIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDIwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NsaXBwaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ByZXJvbGxfc3luYyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lb3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZW9zMik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb3NpdGlvbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ub3RpZnlfcmFjZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sYXN0X21lc3NhZ2Vfbm90aWZ5KTsKLSAgdGNhc2Vfc2tpcF9icm9rZW5fdGVzdCAodGNfY2hhaW4sIHRlc3RfbGFzdF9tZXNzYWdlX2RlZXBfbm90aWZ5KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGZha2VzaW5rKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Zha2VzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU2MDVmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9mYWtlc3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBmYWtlc3JjCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLQotc3RhdGljIEdzdFBhZCAqbXlzaW5rcGFkOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZXZlbnRfZnVuYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICBoYXZlX2VvcyA9IFRSVUU7Ci0gIH0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9mYWtlc3JjICh2b2lkKQotewotICBHc3RFbGVtZW50ICpmYWtlc3JjOwotCi0gIEdTVF9ERUJVRyAoInNldHVwX2Zha2VzcmMiKTsKLSAgZmFrZXNyYyA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiZmFrZXNyYyIpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGZha2VzcmMsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAobXlzaW5rcGFkLCBldmVudF9mdW5jKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotICBoYXZlX2VvcyA9IEZBTFNFOwotICByZXR1cm4gZmFrZXNyYzsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfZmFrZXNyYyAoR3N0RWxlbWVudCAqIGZha2VzcmMpCi17Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZmFrZXNyYyk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChmYWtlc3JjKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbnVtX2J1ZmZlcnMpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLQotICBzcmMgPSBzZXR1cF9mYWtlc3JjICgpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibnVtLWJ1ZmZlcnMiLCAzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgd2hpbGUgKCFoYXZlX2VvcykgewotICAgIGdfdXNsZWVwICgxMDAwKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAzKTsKLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9mYWtlc3JjIChzcmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpemV0eXBlX2VtcHR5KQotewotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdMaXN0ICpsOwotCi0gIHNyYyA9IHNldHVwX2Zha2VzcmMgKCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgInNpemV0eXBlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJudW0tYnVmZmVycyIsIDEwMCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgd2hpbGUgKCFoYXZlX2VvcykgewotICAgIGdfdXNsZWVwICgxMDAwKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxMDApOwotICBsID0gYnVmZmVyczsKLSAgd2hpbGUgKGwpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZiA9IGwtPmRhdGE7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSA9PSAwKTsKLSAgICBsID0gbC0+bmV4dDsKLSAgfQotICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2Zha2VzcmMgKHNyYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2l6ZXR5cGVfZml4ZWQpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR0xpc3QgKmw7Ci0KLSAgc3JjID0gc2V0dXBfZmFrZXNyYyAoKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAic2l6ZXR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgInNpemVtYXgiLCA4MTkyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgIm51bS1idWZmZXJzIiwgMTAwLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICB3aGlsZSAoIWhhdmVfZW9zKSB7Ci0gICAgZ191c2xlZXAgKDEwMDApOwotICB9Ci0KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDEwMCk7Ci0gIGwgPSBidWZmZXJzOwotICB3aGlsZSAobCkgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gbC0+ZGF0YTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpID09IDgxOTIpOwotICAgIGwgPSBsLT5uZXh0OwotICB9Ci0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfZmFrZXNyYyAoc3JjKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaXpldHlwZV9yYW5kb20pCi17Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR0xpc3QgKmw7Ci0KLSAgc3JjID0gc2V0dXBfZmFrZXNyYyAoKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAic2l6ZXR5cGUiLCAzLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgInNpemVtaW4iLCA0MDk2LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgInNpemVtYXgiLCA4MTkyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgIm51bS1idWZmZXJzIiwgMTAwLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICB3aGlsZSAoIWhhdmVfZW9zKSB7Ci0gICAgZ191c2xlZXAgKDEwMDApOwotICB9Ci0KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDEwMCk7Ci0gIGwgPSBidWZmZXJzOwotICB3aGlsZSAobCkgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gbC0+ZGF0YTsKLQotICAgIGZhaWxfaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPiA4MTkyKTsKLSAgICBmYWlsX2lmIChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpIDwgNDA5Nik7Ci0gICAgbCA9IGwtPm5leHQ7Ci0gIH0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9mYWtlc3JjIChzcmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vX3ByZXJvbGwpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHNyYyA9IHNldHVwX2Zha2VzcmMgKCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCi0gICAgICAiZXJyb3IgZ29pbmcgdG8gcGF1c2VkIHRoZSBmaXJzdCB0aW1lIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLAotICAgICAgImVycm9yIGdvaW5nIHRvIHBhdXNlZCB0aGUgc2Vjb25kIHRpbWUiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9mYWtlc3JjIChzcmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1oYW5kb2ZmX2NiIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVmZmVyICogYnVmLCBHc3RQYWQgKiBwYWQsCi0gICAgZ2ludCAqIHBfY291bnRlcikKLXsKLSAgKnBfY291bnRlciArPSAxOwotICBHU1RfTE9HICgiY291bnRlciA9ICVkIiwgKnBfY291bnRlcik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JldXNlX3B1c2gpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNlcCwgKnNpbmssICpwaXBlbGluZTsKLSAgR3N0QnVzICpidXM7Ci0gIGdpbnQgY291bnRlciwgcmVwZWF0ID0gMywgbnVtX2J1ZmZlcnMgPSAxMDsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgcGlwZWxpbmUhIik7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmFrZXNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlICdmYWtlc3JjJyBlbGVtZW50ISIpOwotCi0gIHNlcCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgInF1ZXVlIik7Ci0gIGZhaWxfdW5sZXNzIChzZXAgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgJ3F1ZXVlJyBlbGVtZW50Iik7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2VzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlICdmYWtlc2luaycgZWxlbWVudCEiKTsKLQotICBnX29iamVjdF9zZXQgKHNpbmssICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2luaywgImhhbmRvZmYiLCBHX0NBTExCQUNLIChoYW5kb2ZmX2NiKSwgJmNvdW50ZXIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBzZXAsIHNpbmssIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNlcCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc2VwLCBzaW5rKSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIG51bV9idWZmZXJzLCBOVUxMKTsKLQotICBkbyB7Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OwotICAgIEdzdE1lc3NhZ2UgKm1zZzsKLQotICAgIEdTVF9JTkZPICgiPT09PT09PT09PT09PT09PT09PT09PSByb3VuZCAlZCA9PT09PT09PT09PT09PT09PT09PT09IiwgcmVwZWF0KTsKLQotICAgIGNvdW50ZXIgPSAwOwotCi0gICAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gICAgaWYgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7Ci0gICAgICBHU1RfTE9HICgid2FpdGluZyBmb3IgcGlwZWxpbmUgdG8gcmVhY2ggUEFVU0VEIHN0YXRlIik7Ci0gICAgICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdGF0ZV9yZXQsIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gICAgfQotCi0gICAgR1NUX0xPRyAoIlBBVVNFRCwgbGV0J3MgcmVhZCBhbGwgb2YgaXQiKTsKLQotICAgIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TLCAtMSk7Ci0gICAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMLCAiRXhwZWN0ZWQgRU9TIG1lc3NhZ2Ugb24gYnVzISIpOwotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgICBpZiAobnVtX2J1ZmZlcnMgPj0gMCkgewotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoY291bnRlciwgbnVtX2J1ZmZlcnMpOwotICAgIH0KLQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKSwKLSAgICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAgIC0tcmVwZWF0OwotICB9IHdoaWxlIChyZXBlYXQgPiAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWZha2VzcmNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiZmFrZXNyYyIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9udW1fYnVmZmVycyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaXpldHlwZV9lbXB0eSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaXpldHlwZV9maXhlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaXpldHlwZV9yYW5kb20pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm9fcHJlcm9sbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZXVzZV9wdXNoKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGZha2VzcmMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Zkc3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZTYxOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmRzcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGZkc3JjCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gSmFuIFNjaG1pZHQgPHRoYXl0YW4gYXQgbWFkIGRvdCBzY2llbnRpc3QgZG90IGNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotc3RhdGljIGdib29sZWFuIGhhdmVfZW9zID0gRkFMU0U7Ci0KLXN0YXRpYyBHc3RQYWQgKm15c2lua3BhZDsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWV2ZW50X2Z1bmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRU9TKSB7Ci0gICAgaGF2ZV9lb3MgPSBUUlVFOwotICB9Ci0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9mZHNyYyAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqZmRzcmM7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfZmRzcmMiKTsKLSAgZmRzcmMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImZkc3JjIik7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoZmRzcmMsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAobXlzaW5rcGFkLCBldmVudF9mdW5jKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotICByZXR1cm4gZmRzcmM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX2Zkc3JjIChHc3RFbGVtZW50ICogZmRzcmMpCi17Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZmRzcmMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoZmRzcmMpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9udW1fYnVmZmVycykKLXsKLSAgR3N0RWxlbWVudCAqc3JjOwotICBnaW50IHBpcGVfZmRbMl07Ci0gIGdjaGFyIGRhdGFbNDA5Nl07Ci0KLSNpZm5kZWYgR19PU19XSU4zMgotICBmYWlsX2lmIChwaXBlIChwaXBlX2ZkKSA8IDApOwotI2Vsc2UKLSAgZmFpbF9pZiAoX3BpcGUgKHBpcGVfZmQsIDIwNDgsIF9PX0JJTkFSWSkgPCAwKTsKLSNlbmRpZgotCi0gIHNyYyA9IHNldHVwX2Zkc3JjICgpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibnVtLWJ1ZmZlcnMiLCAzLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImZkIiwgcGlwZV9mZFswXSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0jaWYgZGVmaW5lZCAoR19PU19VTklYKSAmJiBkZWZpbmVkIChPX05PTkJMT0NLKQotICB7Ci0gICAgaW50IGZsYWdzOwotCi0gICAgZmxhZ3MgPSBmY250bCAocGlwZV9mZFsxXSwgRl9HRVRGTCwgMCk7Ci0gICAgZmNudGwgKHBpcGVfZmRbMV0sIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyk7Ci0gIH0KLSNlbmRpZgotCi0gIG1lbXNldCAoZGF0YSwgMCwgNDA5Nik7Ci0gIHdoaWxlICghaGF2ZV9lb3MpIHsKLSAgICBpbnQgcmV0ID0gd3JpdGUgKHBpcGVfZmRbMV0sIGRhdGEsIDQwOTYpOwotICAgIGZhaWxfaWYgKHJldCA8IDAgJiYgZXJybm8gIT0gRUFHQUlOKTsKLSAgICBnX3VzbGVlcCAoMTAwKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfZmRzcmMgKHNyYyk7Ci0gIGNsb3NlIChwaXBlX2ZkWzBdKTsKLSAgY2xvc2UgKHBpcGVfZmRbMV0pOwotICBnX2xpc3RfZm9yZWFjaCAoYnVmZmVycywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbm9uc2Vla2luZykKLXsKLSAgR3N0RWxlbWVudCAqc3JjOwotICBHc3RRdWVyeSAqc2Vla2luZ19xdWVyeTsKLSAgZ2ludCBwaXBlX2ZkWzJdOwotICBnY2hhciBkYXRhWzQwOTZdOwotICBnYm9vbGVhbiBzZWVrYWJsZTsKLQotI2lmbmRlZiBHX09TX1dJTjMyCi0gIGZhaWxfaWYgKHBpcGUgKHBpcGVfZmQpIDwgMCk7Ci0jZWxzZQotICBmYWlsX2lmIChfcGlwZSAocGlwZV9mZCwgMjA0OCwgX09fQklOQVJZKSA8IDApOwotI2VuZGlmCi0KLSAgc3JjID0gc2V0dXBfZmRzcmMgKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJudW0tYnVmZmVycyIsIDMsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiZmQiLCBwaXBlX2ZkWzBdLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9QQVVTRUQpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBhdXNlZCIpOwotCi0gIG1lbXNldCAoZGF0YSwgMCwgNDA5Nik7Ci0gIGZhaWxfaWYgKHdyaXRlIChwaXBlX2ZkWzFdLCBkYXRhLCA0MDk2KSA8IDApOwotCi0gIC8qIFRlc3QgdGhhdCBmZHNyYyBpcyBub24tc2Vla2FibGUgd2l0aCBhIHBpcGUgKi8KLSAgZmFpbF91bmxlc3MgKChzZWVraW5nX3F1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHU1RfRk9STUFUX0JZVEVTKSkKLSAgICAgICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKHNyYywgc2Vla2luZ19xdWVyeSkgPT0gVFJVRSk7Ci0gIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChzZWVraW5nX3F1ZXJ5LCBOVUxMLCAmc2Vla2FibGUsIE5VTEwsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2Vla2FibGUgPT0gRkFMU0UpOwotICBnc3RfcXVlcnlfdW5yZWYgKHNlZWtpbmdfcXVlcnkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2Zkc3JjIChzcmMpOwotICBjbG9zZSAocGlwZV9mZFswXSk7Ci0gIGNsb3NlIChwaXBlX2ZkWzFdKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zZWVraW5nKQotewotICBHc3RFbGVtZW50ICpzcmM7Ci0gIGdpbnQgaW5fZmQ7Ci0gIEdzdFF1ZXJ5ICpzZWVraW5nX3F1ZXJ5OwotICBnYm9vbGVhbiBzZWVrYWJsZTsKLQotI2lmbmRlZiBURVNURklMRQotI2Vycm9yIFRFU1RGSUxFIG5vdCBkZWZpbmVkCi0jZW5kaWYKLSAgZmFpbF9pZiAoKGluX2ZkID0gb3BlbiAoVEVTVEZJTEUsIE9fUkRPTkxZKSkgPCAwKTsKLSAgc3JjID0gc2V0dXBfZmRzcmMgKCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImZkIiwgaW5fZmQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BBVVNFRCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGF1c2VkIik7Ci0KLSAgLyogVGVzdCB0aGF0IGZkc3JjIGlzIHNlZWthYmxlIHdpdGggYSBmaWxlIGZkICovCi0gIGZhaWxfdW5sZXNzICgoc2Vla2luZ19xdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2Vla2luZyAoR1NUX0ZPUk1BVF9CWVRFUykpCi0gICAgICAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChzcmMsIHNlZWtpbmdfcXVlcnkpID09IFRSVUUpOwotICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAoc2Vla2luZ19xdWVyeSwgTlVMTCwgJnNlZWthYmxlLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNlZWthYmxlID09IFRSVUUpOwotICBnc3RfcXVlcnlfdW5yZWYgKHNlZWtpbmdfcXVlcnkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2Zkc3JjIChzcmMpOwotICBjbG9zZSAoaW5fZmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1mZHNyY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJmZHNyYyIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9udW1fYnVmZmVycyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ub25zZWVraW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NlZWtpbmcpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZmRzcmMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ZpbGVzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNDJjOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0IGZvciB0aGUgZmlsZXNpbmsgZWxlbWVudAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgICAgIC8qIGZvciBjbG9zZSgpICovCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgR3N0UGFkICpteXNyY3BhZDsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9maWxlc2luayAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqZmlsZXNpbms7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfZmlsZXNpbmsiKTsKLSAgZmlsZXNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImZpbGVzaW5rIik7Ci0gIG15c3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKGZpbGVzaW5rLCAmc3JjdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgcmV0dXJuIGZpbGVzaW5rOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9maWxlc2luayAoR3N0RWxlbWVudCAqIGZpbGVzaW5rKQotewotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChmaWxlc2luayk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChmaWxlc2luayk7Ci19Ci0KLSNpZiAwCi0vKiB0aGlzIHF1ZXJpZXMgdmlhIHRoZSBlbGVtZW50IHZmdW5jLCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkICovCi0jZGVmaW5lIENIRUNLX1FVRVJZX1BPU0lUSU9OKGZpbGVzaW5rLGZvcm1hdCxwb3NpdGlvbikgICAgICAgICAgICAgICAgICBcCi0gICAgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ2ludDY0IHBvczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoZmlsZXNpbmssIGZvcm1hdCwgJnBvcykpOyBcCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChwb3MsIHBvc2l0aW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gR19TVE1UX0VORAotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfUVVFUllfUE9TSVRJT04oZmlsZXNpbmssZm9ybWF0LHBvc2l0aW9uKSAgICAgICAgICAgICAgICAgICBcCi0gICAgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgR3N0UGFkICpwYWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdpbnQ2NCBwb3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmlsZXNpbmssICJzaW5rIik7ICAgICAgICAgICAgICAgXAotICAgICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcXVlcnlfcG9zaXRpb24gKHBhZCwgZm9ybWF0LCAmcG9zKSk7ICAgICAgICAgIFwKLSAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHBvcywgcG9zaXRpb24pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gR19TVE1UX0VORAotI2VuZGlmCi0KLSNkZWZpbmUgUFVTSF9CWVRFUyhudW1fYnl0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhudW1fYnl0ZXMpOyAgICAgICAgICAgICAgIFwKLSAgICAgIEdSYW5kICpyYW5kID0gZ19yYW5kX25ld193aXRoX3NlZWQgKG51bV9ieXRlcyk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgR3N0TWFwSW5mbyBpbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBndWludCBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9XUklURSkpOyAgICAgICAgICAgXAotICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9ieXRlczsgKytpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgoZ3VpbnQ4ICopaW5mby5kYXRhKVtpXSA9IChnX3JhbmRfaW50IChyYW5kKSA+PiAyNCkgJiAweGZmOyAgICAgIFwKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmKSwgR1NUX0ZMT1dfT0spOyBcCi0gICAgICBnX3JhbmRfZnJlZSAocmFuZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IEdfU1RNVF9FTkQKLQotLyogUHVzaCBCdWZmZXIgd2l0aCBudW1fbWVtX2Jsb2NrcyBtZW1vcnkgYmxvY2sgZWFjaCBvZiBzaXplIG51bV9ieXRlcyovCi0jZGVmaW5lIFBVU0hfQlVGRkVSX1dJVEhfTVVMVElQTEVfTUVNX0JMT0NLUyhudW1fbWVtX2Jsb2NrcywgbnVtX2J5dGVzKSAgICAgIFwKLSAgICBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ldygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBndWludCBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fbWVtX2Jsb2NrczsgKytpKXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBHc3RNYXBJbmZvIGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEdzdE1lbW9yeSogbWVtX2Jsb2NrID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyhOVUxMLG51bV9ieXRlcyxOVUxMKTsgICAgIFwKLSAgICAgICAgR1JhbmQgKnJhbmQgPSBnX3JhbmRfbmV3X3dpdGhfc2VlZCAobnVtX2J5dGVzKTsgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBndWludCBqOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtX2Jsb2NrLCAmaW5mbywgR1NUX01BUF9XUklURSkpOyAgICAgIFwKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bV9ieXRlczsgKytqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAoKGd1aW50OCAqKWluZm8uZGF0YSlbal0gPSAoZ19yYW5kX2ludCAocmFuZCkgPj4gMjQpICYgMHhmZjsgICAgICBcCi0gICAgICAgIGdzdF9tZW1vcnlfdW5tYXAgKG1lbV9ibG9jaywgJmluZm8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5KGJ1ZixtZW1fYmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnX3JhbmRfZnJlZSAocmFuZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZiksIEdTVF9GTE9XX09LKTsgICAgXAotICAgIH0gR19TVE1UX0VORAotCi0vKiBQdXNoIEJ1ZmZlciBMaXN0IHdpdGggbnVtX2J1ZmZlcnMgYnVmZmVycyBlYWNoIGNvbnRhaW5pbmcgbnVtX21lbV9ibG9ja3MKLSAqIG1lbW9yeSBibG9ja3Mgb2Ygc2l6ZSBudW1fYnl0ZXMgKi8KLSNkZWZpbmUgUFVTSF9CVUZGRVJfTElTVF9XSVRIX01VTFRJX01FTV9CTE9DS1NfQlVGRkVSUyhudW1fYnVmZmVycywgbnVtX21lbV9ibG9ja3MsIG51bV9ieXRlcykgXAotICAgIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGd1aW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBHc3RCdWZmZXJMaXN0KiBidWZfbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZm9yKGkgPSAwOyBpIDwgbnVtX2J1ZmZlcnM7ICsraSl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ldygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGd1aW50IGo7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtX21lbV9ibG9ja3M7ICsrail7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBHc3RNYXBJbmZvIGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgR3N0TWVtb3J5KiBtZW1fYmxvY2sgPSBnc3RfYWxsb2NhdG9yX2FsbG9jKE5VTEwsbnVtX2J5dGVzLE5VTEwpOyAgICAgXAotICAgICAgICAgIEdSYW5kICpyYW5kID0gZ19yYW5kX25ld193aXRoX3NlZWQgKG51bV9ieXRlcyk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBndWludCBrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbWFwIChtZW1fYmxvY2ssICZpbmZvLCBHU1RfTUFQX1dSSVRFKSk7ICAgICAgXAotICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBudW1fYnl0ZXM7ICsraykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICgoZ3VpbnQ4ICopaW5mby5kYXRhKVtrXSA9IChnX3JhbmRfaW50IChyYW5kKSA+PiAyNCkgJiAweGZmOyAgICAgICBcCi0gICAgICAgICAgZ3N0X21lbW9yeV91bm1hcCAobWVtX2Jsb2NrLCAmaW5mbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeShidWYsbWVtX2Jsb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBnX3JhbmRfZnJlZSAocmFuZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnc3RfYnVmZmVyX2xpc3RfYWRkKGJ1Zl9saXN0LGJ1Zik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2hfbGlzdCAobXlzcmNwYWQsIGJ1Zl9saXN0KSwgR1NUX0ZMT1dfT0spOyBcCi0gICAgfSBHX1NUTVRfRU5ECi0KLS8qIFB1c2ggYnVmZmVyX2xpc3QgY29udGFpbmluZyBudW1fYnVmZmVycyBudW1iZXIgb2YgYnVmZmVycyB3aXRoIHNpemUKLSAqICAgbnVtX2J5dGVzIGJ5dGVzCi0gKiBFeGFtcGxlOiBQVVNIX0JVRkZFUl9MSVNUKDIsMTApIHdpbGwgcHVzaCB0aGUgYnVmZmVyIGxpc3QgY29udGFpbmluZwotICogICAyIGJ1ZmZlcnMgd2l0aCBzaXplIDEwIGJ5dGVzIGVhY2ggKi8KLSNkZWZpbmUgUFVTSF9CVUZGRVJfTElTVChudW1fYnVmZmVycywgbnVtX2J5dGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBndWludCBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEdzdEJ1ZmZlckxpc3QqIGJ1Zl9saXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ldygpOyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZm9yKGkgPSAwOyBpIDwgbnVtX2J1ZmZlcnM7ICsraSl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKG51bV9ieXRlcyk7ICAgICAgICAgICAgIFwKLSAgICAgICAgR1JhbmQgKnJhbmQgPSBnX3JhbmRfbmV3X3dpdGhfc2VlZCAobnVtX2J5dGVzKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBHc3RNYXBJbmZvIGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGd1aW50IGo7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWYsICZpbmZvLCBHU1RfTUFQX1dSSVRFKSk7ICAgICAgICAgXAotICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtX2J5dGVzOyArK2opICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKChndWludDggKilpbmZvLmRhdGEpW2pdID0gKGdfcmFuZF9pbnQgKHJhbmQpID4+IDI0KSAmIDB4ZmY7ICAgIFwKLSAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnc3RfYnVmZmVyX2xpc3RfYWRkKGJ1Zl9saXN0LGJ1Zik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdfcmFuZF9mcmVlIChyYW5kKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoX2xpc3QgKG15c3JjcGFkLCBidWZfbGlzdCksIEdTVF9GTE9XX09LKTsgXAotICAgIH0gR19TVE1UX0VORAotCi0jZGVmaW5lIENIRUNLX1dSSVRURU5fQllURVMob2Zmc2V0LHdyaXR0ZW4sZmlsZV9zaXplKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdjaGFyICpkYXRhID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ3NpemUgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBmYWlsX3VubGVzcyAoZ19maWxlX2dldF9jb250ZW50cyAodG1wX2ZuLCAmZGF0YSwgJmxlbiwgTlVMTCksICAgICAgIFwKLSAgICAgICAgICAiRmFpbGVkIHRvIHJlYWQgaW4gbmV3bHktY3JlYXRlZCBmaWxlICclcyciLCB0bXBfZm4pOyAgICAgICAgICAgXAotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobGVuLCBmaWxlX3NpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLyogd2Ugd3JvdGUgPHdyaXR0ZW4+IGJ5dGVzIGF0IHBvc2l0aW9uIDAgKi8gICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBHUmFuZCAqcmFuZCA9IGdfcmFuZF9uZXdfd2l0aF9zZWVkICh3cml0dGVuKTsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGd1aW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHdyaXR0ZW47ICsraSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGd1aW50OCBieXRlX3dyaXR0ZW4gPSAqKCgoZ3VpbnQ4ICopIGRhdGEpICsgb2Zmc2V0ICsgaSk7ICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChieXRlX3dyaXR0ZW4sIGdfcmFuZF9pbnQgKHJhbmQpID4+IDI0KTsgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdfcmFuZF9mcmVlIChyYW5kKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ19mcmVlIChkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSBHX1NUTVRfRU5ECi0KLXN0YXRpYyBnY2hhciAqCi1jcmVhdGVfdGVtcG9yYXJ5X2ZpbGUgKHZvaWQpCi17Ci0gIGNvbnN0IGdjaGFyICp0bXBkaXI7Ci0gIGdjaGFyICp0bXBfZm47Ci0gIGdpbnQgZmQ7Ci0KLSAgdG1wZGlyID0gZ19nZXRfdG1wX2RpciAoKTsKLSAgaWYgKHRtcGRpciA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIHRoaXMgaXMganVzdCBzaWxseSwgYnV0IGdjYyB3YXJucyBpZiB3ZSB0cnkgdG8gdXNlIHRwbW5hbSgpICovCi0gIHRtcF9mbiA9IGdfYnVpbGRfZmlsZW5hbWUgKHRtcGRpciwgImdzdHJlYW1lci1maWxlc2luay10ZXN0LVhYWFhYWCIsIE5VTEwpOwotICBmZCA9IGdfbWtzdGVtcCAodG1wX2ZuKTsKLSAgaWYgKGZkIDwgMCkgewotICAgIEdTVF9FUlJPUiAoImNhbid0IGNyZWF0ZSB0ZW1wIGZpbGUgJXM6ICVzIiwgdG1wX2ZuLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgIGdfZnJlZSAodG1wX2ZuKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICAvKiBkb24ndCB3YW50IHRoZSBmaWxlLCBqdXN0IGEgZmlsZW5hbWUgKGhlbmNlIHNpbGx5LCBzZWUgYWJvdmUpICovCi0gIGNsb3NlIChmZCk7Ci0gIGdfcmVtb3ZlICh0bXBfZm4pOwotCi0gIHJldHVybiB0bXBfZm47Ci19Ci0KLS8qIFRPRE86IHdlIGRvbid0IGNoZWNrIHRoYXQgdGhlIGRhdGEgaXMgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgcmlnaHQKLSAqIHBvc2l0aW9uIGFmdGVyIGEgc2VlayAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2Vla2luZykKLXsKLSAgR3N0RWxlbWVudCAqZmlsZXNpbms7Ci0gIGdjaGFyICp0bXBfZm47Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICB0bXBfZm4gPSBjcmVhdGVfdGVtcG9yYXJ5X2ZpbGUgKCk7Ci0gIGlmICh0bXBfZm4gPT0gTlVMTCkKLSAgICByZXR1cm47Ci0gIGZpbGVzaW5rID0gc2V0dXBfZmlsZXNpbmsgKCk7Ci0KLSAgR1NUX0xPRyAoInVzaW5nIHRlbXAgZmlsZSAnJXMnIiwgdG1wX2ZuKTsKLSAgZ19vYmplY3Rfc2V0IChmaWxlc2luaywgImxvY2F0aW9uIiwgdG1wX2ZuLCBOVUxMKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGZpbGVzaW5rLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotI2lmIDAKLSAgLyogVGVzdCB0aGF0IGZpbGVzaW5rIGlzIHNlZWthYmxlIHdpdGggYSBmaWxlIGZkICovCi0gIC8qIGZpbGVzaW5rIGRvZXNuJ3QgaW1wbGVtZW50IHNlZWthYmxlIHF1ZXJ5IGF0IHRoZSBtb21lbnQgKi8KLSAgR3N0UXVlcnkgKnNlZWtpbmdfcXVlcnk7Ci0gIGdib29sZWFuIHNlZWthYmxlOwotCi0gIGZhaWxfdW5sZXNzICgoc2Vla2luZ19xdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2Vla2luZyAoR1NUX0ZPUk1BVF9CWVRFUykpCi0gICAgICAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChmaWxlc2luaywgc2Vla2luZ19xdWVyeSkgPT0gVFJVRSk7Ci0gIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChzZWVraW5nX3F1ZXJ5LCBOVUxMLCAmc2Vla2FibGUsIE5VTEwsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2Vla2FibGUgPT0gVFJVRSk7Ci0gIGdzdF9xdWVyeV91bnJlZiAoc2Vla2luZ19xdWVyeSk7Ci0jZW5kaWYKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSkpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCAwKTsKLQotICAvKiBwdXNoIGJ1ZmZlciB3aXRoIHNpemUgMCBhbmQgTlVMTCBkYXRhICovCi0gIFBVU0hfQllURVMgKDApOwotICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDApOwotCi0gIFBVU0hfQllURVMgKDEpOwotICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDEpOwotCi0gIFBVU0hfQllURVMgKDk5KTsKLSAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCAxMDApOwotCi0gIFBVU0hfQllURVMgKDg4MDApOwotICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDg5MDApOwotCi0gIC8qIFB1c2ggYnVmZmVyIGxpc3Qgd2l0aCAyIGJ1ZmZlcnMgZWFjaCBvZiBzaXplIDUwIGJ5dGVzICovCi0gIFBVU0hfQlVGRkVSX0xJU1QgKDIsIDUwKTsKLSAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCA5MDAwKTsKLSAgLyogUHVzaCBidWZmZXIgbGlzdCB3aXRoIDMgYnVmZmVycyBlYWNoIG9mIHNpemUgMTAgYnl0ZXMgKi8KLSAgUFVTSF9CVUZGRVJfTElTVCAoMywgMTApOwotICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDkwMzApOwotICAvKiBDaGVjayBieXRlcyB3cml0dGVuIHVzaW5nIHB1c2ggYnVmZmVyIGxpc3QgKi8KLSAgQ0hFQ0tfV1JJVFRFTl9CWVRFUyAoODkwMCwgNTAsIDkwMzApOwotICBDSEVDS19XUklUVEVOX0JZVEVTICg4OTUwLCA1MCwgOTAzMCk7Ci0gIENIRUNLX1dSSVRURU5fQllURVMgKDkwMDAsIDEwLCA5MDMwKTsKLSAgQ0hFQ0tfV1JJVFRFTl9CWVRFUyAoOTAxMCwgMTAsIDkwMzApOwotICBDSEVDS19XUklUVEVOX0JZVEVTICg5MDIwLCAxMCwgOTAzMCk7Ci0KLSAgLyogUHVzaCBidWZmZXIgd2l0aCAyIG1lbW9yeSBibG9ja3MgZWFjaCBvZiBzaXplIDIwIGJ5dGVzICovCi0gIFBVU0hfQlVGRkVSX1dJVEhfTVVMVElQTEVfTUVNX0JMT0NLUyAoMiwgMjApOwotICBDSEVDS19XUklUVEVOX0JZVEVTICg5MDMwLCAyMCwgOTA3MCk7Ci0gIENIRUNLX1dSSVRURU5fQllURVMgKDkwNTAsIDIwLCA5MDcwKTsKLQotICAvKiBQdXNoIGJ1ZmZlciBsaXN0IHdpdGggMiBidWZmZXJzIGVhY2ggY29udGFpbmluZyAyIG1lbW9yeSBibG9ja3MgZWFjaCBvZiBzaXplIDIwIGJ5dGVzICovCi0gIFBVU0hfQlVGRkVSX0xJU1RfV0lUSF9NVUxUSV9NRU1fQkxPQ0tTX0JVRkZFUlMgKDIsIDIsIDIwKTsKLSAgQ0hFQ0tfV1JJVFRFTl9CWVRFUyAoOTA3MCwgMjAsIDkxNTApOwotICBDSEVDS19XUklUVEVOX0JZVEVTICg5MDkwLCAyMCwgOTE1MCk7Ci0gIENIRUNLX1dSSVRURU5fQllURVMgKDkxMTAsIDIwLCA5MTUwKTsKLSAgQ0hFQ0tfV1JJVFRFTl9CWVRFUyAoOTEzMCwgMjAsIDkxNTApOwotCi0gIHNlZ21lbnQuc3RhcnQgPSA4ODAwOwotICBpZiAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKSB7Ci0gICAgR1NUX0xPRyAoInNlZWsgb2siKTsKLSAgICAvKiBtYWtlIHN1cmUgdGhhdCBuZXcgcG9zaXRpb24gaXMgcmVwb3J0ZWQgaW1tZWRpYXRlbHkgKi8KLSAgICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDg4MDApOwotICAgIFBVU0hfQllURVMgKDEpOwotICAgIENIRUNLX1FVRVJZX1BPU0lUSU9OIChmaWxlc2luaywgR1NUX0ZPUk1BVF9CWVRFUywgODgwMSk7Ci0gICAgUFVTSF9CWVRFUyAoOTI1Nik7Ci0gICAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCAxODA1Nyk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0lORk8gKCJzZWVraW5nIG5vdCBzdXBwb3J0ZWQgZm9yIHRlbXBmaWxlPyEiKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZmlsZXNpbmssIEdTVF9TVEFURV9OVUxMKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2ZpbGVzaW5rIChmaWxlc2luayk7Ci0KLSAgQ0hFQ0tfV1JJVFRFTl9CWVRFUyAoODgwMSwgOTI1NiwgMTgwNTcpOwotCi0gIC8qIHJlbW92ZSBmaWxlICovCi0gIGdfcmVtb3ZlICh0bXBfZm4pOwotICBnX2ZyZWUgKHRtcF9mbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmx1c2gpCi17Ci0gIEdzdEVsZW1lbnQgKmZpbGVzaW5rOwotICBnY2hhciAqdG1wX2ZuOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgdG1wX2ZuID0gY3JlYXRlX3RlbXBvcmFyeV9maWxlICgpOwotICBpZiAodG1wX2ZuID09IE5VTEwpCi0gICAgcmV0dXJuOwotICBmaWxlc2luayA9IHNldHVwX2ZpbGVzaW5rICgpOwotCi0gIEdTVF9MT0cgKCJ1c2luZyB0ZW1wIGZpbGUgJyVzJyIsIHRtcF9mbik7Ci0gIGdfb2JqZWN0X3NldCAoZmlsZXNpbmssICJsb2NhdGlvbiIsIHRtcF9mbiwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChmaWxlc2luaywgR1NUX1NUQVRFX1BMQVlJTkcpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCAwKTsKLQotICBQVVNIX0JZVEVTICg4KTsKLSAgQ0hFQ0tfUVVFUllfUE9TSVRJT04gKGZpbGVzaW5rLCBHU1RfRk9STUFUX0JZVEVTLCA4KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGZpbGVzaW5rLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDApOwotCi0gIFBVU0hfQllURVMgKDQpOwotICBDSEVDS19RVUVSWV9QT1NJVElPTiAoZmlsZXNpbmssIEdTVF9GT1JNQVRfQllURVMsIDQpOwotCi0gIGNsZWFudXBfZmlsZXNpbmsgKGZpbGVzaW5rKTsKLQotICBDSEVDS19XUklUVEVOX0JZVEVTICgwLCA0LCA0KTsKLQotICBnX3JlbW92ZSAodG1wX2ZuKTsKLSAgZ19mcmVlICh0bXBfZm4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NvdmVyYWdlKQotewotICBHc3RFbGVtZW50ICpmaWxlc2luazsKLSAgZ2NoYXIgKmxvY2F0aW9uOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBmaWxlc2luayA9IHNldHVwX2ZpbGVzaW5rICgpOwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzIChmaWxlc2luaywgYnVzKTsKLQotICBnX29iamVjdF9zZXQgKGZpbGVzaW5rLCAibG9jYXRpb24iLCAiL2kvZG8vbm90L2V4aXN0IiwgTlVMTCk7Ci0gIGdfb2JqZWN0X2dldCAoZmlsZXNpbmssICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiL2kvZG8vbm90L2V4aXN0Iik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZmlsZXNpbmssIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgLyogYSBzdGF0ZSBjaGFuZ2UgYW5kIGFuIGVycm9yICovCi0gIGZhaWxfaWYgKChtZXNzYWdlID0gZ3N0X2J1c19wb3AgKGJ1cykpID09IE5VTEwpOwotICBmYWlsX3VubGVzc19tZXNzYWdlX2Vycm9yIChtZXNzYWdlLCBSRVNPVVJDRSwgT1BFTl9XUklURSk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLQotICBnX29iamVjdF9zZXQgKGZpbGVzaW5rLCAibG9jYXRpb24iLCBOVUxMLCBOVUxMKTsKLSAgZ19vYmplY3RfZ2V0IChmaWxlc2luaywgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKLSAgZmFpbF9pZiAobG9jYXRpb24pOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZmlsZXNpbmssIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKLSAgY2xlYW51cF9maWxlc2luayAoZmlsZXNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VyaV9pbnRlcmZhY2UpCi17Ci0gIEdzdEVsZW1lbnQgKmZpbGVzaW5rOwotICBnY2hhciAqbG9jYXRpb247Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIGZpbGVzaW5rID0gc2V0dXBfZmlsZXNpbmsgKCk7Ci0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKGZpbGVzaW5rLCBidXMpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZpbGVzaW5rKSwgImxvY2F0aW9uIiwgIi9pL2RvL25vdC9leGlzdCIsIE5VTEwpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChmaWxlc2luayksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiL2kvZG8vbm90L2V4aXN0Iik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotCi0gIGxvY2F0aW9uID0gZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKEdTVF9VUklfSEFORExFUiAoZmlsZXNpbmspKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICJmaWxlOi8vL2kvZG8vbm90L2V4aXN0Iik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotCi0gIC8qIHNob3VsZCBhY2NlcHQgZmlsZTovLy9mb28vYmFyIFVSSXMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKGZpbGVzaW5rKSwKLSAgICAgICAgICAiZmlsZTovLy9mb28vYmFyIiwgTlVMTCkpOwotICBsb2NhdGlvbiA9IGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKGZpbGVzaW5rKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiZmlsZTovLy9mb28vYmFyIik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChmaWxlc2luayksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiL2Zvby9iYXIiKTsKLSAgZ19mcmVlIChsb2NhdGlvbik7Ci0KLSAgLyogc2hvdWxkIGFjY2VwdCBmaWxlOi8vbG9jYWxob3N0L2Zvby9iYXIgVVJJcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkgKEdTVF9VUklfSEFORExFUiAoZmlsZXNpbmspLAotICAgICAgICAgICJmaWxlOi8vbG9jYWxob3N0L2Zvby9iYXoiLCBOVUxMKSk7Ci0gIGxvY2F0aW9uID0gZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKEdTVF9VUklfSEFORExFUiAoZmlsZXNpbmspKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICJmaWxlOi8vL2Zvby9iYXoiKTsKLSAgZ19mcmVlIChsb2NhdGlvbik7Ci0gIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKGZpbGVzaW5rKSwgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICIvZm9vL2JheiIpOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLQotICAvKiBzaG91bGQgZXNjYXBlIG5vbi11cmkgY2hhcmFjdGVycyBmb3IgdGhlIFVSSSBidXQgbm90IGZvciB0aGUgbG9jYXRpb24gKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmlsZXNpbmspLCAibG9jYXRpb24iLCAiL2Zvby9iP3IiLCBOVUxMKTsKLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoZmlsZXNpbmspLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgIi9mb28vYj9yIik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotICBsb2NhdGlvbiA9IGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKGZpbGVzaW5rKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiZmlsZTovLy9mb28vYiUzRnIiKTsKLSAgZ19mcmVlIChsb2NhdGlvbik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmlsZXNpbmspLCAibG9jYXRpb24iLCAiXCIuZG9ub3RleGlzdCIsIE5VTEwpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChmaWxlc2luayksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiXCIuZG9ub3RleGlzdCIpOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLQotICAvKiBzaG91bGQgZmFpbCB3aXRoIG90aGVyIGhvc3RuYW1lcyAqLwotICBmYWlsX2lmIChnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChmaWxlc2luayksCi0gICAgICAgICAgImZpbGU6Ly9ob3N0bmFtZS9mb28vZm9vIiwgTlVMTCkpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZmlsZXNpbmssIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKLSAgY2xlYW51cF9maWxlc2luayAoZmlsZXNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1maWxlc2lua19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJmaWxlc2luayIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvdmVyYWdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3VyaV9pbnRlcmZhY2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2Vla2luZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mbHVzaCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChmaWxlc2luayk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9maWxlc3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YjVmYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmlsZXNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLXN0YXRpYyBHQ29uZCBlb3NfY29uZDsKLXN0YXRpYyBHTXV0ZXggZXZlbnRfbXV0ZXg7Ci0KLXN0YXRpYyBHc3RQYWQgKm15c2lua3BhZDsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWV2ZW50X2Z1bmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGdfbXV0ZXhfbG9jayAoJmV2ZW50X211dGV4KTsKLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0VPUykgewotICAgIGhhdmVfZW9zID0gVFJVRTsKLSAgICBHU1RfREVCVUcgKCJzaWduYWwgRU9TIik7Ci0gICAgZ19jb25kX2Jyb2FkY2FzdCAoJmVvc19jb25kKTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJmV2ZW50X211dGV4KTsKLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotd2FpdF9lb3MgKHZvaWQpCi17Ci0gIGdfbXV0ZXhfbG9jayAoJmV2ZW50X211dGV4KTsKLSAgR1NUX0RFQlVHICgid2FpdGluZyBmb3IgRU9TIik7Ci0gIHdoaWxlICghaGF2ZV9lb3MpIHsKLSAgICBnX2NvbmRfd2FpdCAoJmVvc19jb25kLCAmZXZlbnRfbXV0ZXgpOwotICB9Ci0gIEdTVF9ERUJVRyAoInJlY2VpdmVkIEVPUyIpOwotICBnX211dGV4X3VubG9jayAoJmV2ZW50X211dGV4KTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfZmlsZXNyYyAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqZmlsZXNyYzsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9maWxlc3JjIik7Ci0gIGZpbGVzcmMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImZpbGVzcmMiKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChmaWxlc3JjLCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKG15c2lua3BhZCwgZXZlbnRfZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICByZXR1cm4gZmlsZXNyYzsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfZmlsZXNyYyAoR3N0RWxlbWVudCAqIGZpbGVzcmMpCi17Ci0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZmlsZXNyYyk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChmaWxlc3JjKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2Vla2luZykKLXsKLSAgR3N0RWxlbWVudCAqc3JjOwotICBHc3RRdWVyeSAqc2Vla2luZ19xdWVyeTsKLSAgZ2Jvb2xlYW4gc2Vla2FibGU7Ci0KLSNpZm5kZWYgVEVTVEZJTEUKLSNlcnJvciBURVNURklMRSBub3QgZGVmaW5lZAotI2VuZGlmCi0gIHNyYyA9IHNldHVwX2ZpbGVzcmMgKCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgVEVTVEZJTEUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BBVVNFRCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGF1c2VkIik7Ci0KLSAgLyogVGVzdCB0aGF0IGZpbGVzcmMgaXMgc2Vla2FibGUgd2l0aCBhIGZpbGUgZmQgKi8KLSAgZmFpbF91bmxlc3MgKChzZWVraW5nX3F1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHU1RfRk9STUFUX0JZVEVTKSkKLSAgICAgICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKHNyYywgc2Vla2luZ19xdWVyeSkgPT0gVFJVRSk7Ci0gIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChzZWVraW5nX3F1ZXJ5LCBOVUxMLCAmc2Vla2FibGUsIE5VTEwsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2Vla2FibGUgPT0gVFJVRSk7Ci0gIGdzdF9xdWVyeV91bnJlZiAoc2Vla2luZ19xdWVyeSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfZmlsZXNyYyAoc3JjKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZXZlcnNlKQotewotICBHc3RFbGVtZW50ICpzcmM7Ci0KLSNpZm5kZWYgVEVTVEZJTEUKLSNlcnJvciBURVNURklMRSBub3QgZGVmaW5lZAotI2VuZGlmCi0gIHNyYyA9IHNldHVwX2ZpbGVzcmMgKCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgVEVTVEZJTEUsIE5VTEwpOwotICAvKiB3ZSdyZSBnb2luZyB0byBwZXJmb3JtIHRoZSBzZWVrIGluIHJlYWR5ICovCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKLSAgICAgICAgICBHU1RfU1RBVEVfUkVBRFkpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHJlYWR5Iik7Ci0KLSAgLyogcmV2ZXJzZSBzZWVrIGZyb20gZW5kIHRvIHN0YXJ0ICovCi0gIGdzdF9lbGVtZW50X3NlZWsgKHNyYywgLTEuMCwgR1NUX0ZPUk1BVF9CWVRFUywgMCwgR1NUX1NFRUtfVFlQRV9TRVQsIDEwMCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAtMSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9QQVVTRUQpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBhdXNlZCIpOwotCi0gIC8qIHdhaXQgZm9yIEVPUyAqLwotICB3YWl0X2VvcyAoKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9maWxlc3JjIChzcmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3B1bGwpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR3N0UXVlcnkgKnNlZWtpbmdfcXVlcnk7Ci0gIGdib29sZWFuIHJlcywgc2Vla2FibGU7Ci0gIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXIgKmJ1ZmZlcjEsICpidWZmZXIyOwotICBHc3RNYXBJbmZvIGluZm8xLCBpbmZvMjsKLQotICBzcmMgPSBzZXR1cF9maWxlc3JjICgpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsIFRFU1RGSUxFLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9SRUFEWSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcmVhZHkiKTsKLQotICAvKiBnZXQgdGhlIHNvdXJjZSBwYWQgKi8KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBmYWlsX3VubGVzcyAocGFkICE9IE5VTEwpOwotCi0gIC8qIGFjdGl2YXRlIHRoZSBwYWQgaW4gcHVsbCBtb2RlICovCi0gIHJlcyA9IGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAocGFkLCBHU1RfUEFEX01PREVfUFVMTCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0KLSAgLyogbm90IHN0YXJ0IHBsYXlpbmcgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwYXVzZWQiKTsKLQotICAvKiBUZXN0IHRoYXQgZmlsZXNyYyBpcyBzZWVrYWJsZSB3aXRoIGEgZmlsZSBmZCAqLwotICBmYWlsX3VubGVzcyAoKHNlZWtpbmdfcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpKQotICAgICAgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9xdWVyeSAoc3JjLCBzZWVraW5nX3F1ZXJ5KSA9PSBUUlVFKTsKLQotICAvKiBnZXQgdGhlIHNlZWtpbmcgY2FwYWJpbGl0aWVzICovCi0gIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChzZWVraW5nX3F1ZXJ5LCBOVUxMLCAmc2Vla2FibGUsICZzdGFydCwgJnN0b3ApOwotICBmYWlsX3VubGVzcyAoc2Vla2FibGUgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChzdGFydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHN0YXJ0ICE9IC0xKTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChzZWVraW5nX3F1ZXJ5KTsKLQotICAvKiBkbyBzb21lIHB1bGxzICovCi0gIGJ1ZmZlcjEgPSBOVUxMOwotICByZXQgPSBnc3RfcGFkX2dldF9yYW5nZSAocGFkLCAwLCAxMDAsICZidWZmZXIxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIxICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyMSkgPT0gMTAwKTsKLQotICBidWZmZXIyID0gTlVMTDsKLSAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgMCwgNTAsICZidWZmZXIyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyMikgPT0gNTApOwotCi0gIC8qIHRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lICovCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmZmVyMSwgJmluZm8xLCBHU1RfTUFQX1JFQUQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWZmZXIyLCAmaW5mbzIsIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAobWVtY21wIChpbmZvMS5kYXRhLCBpbmZvMi5kYXRhLCA1MCkgPT0gMCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlcjIsICZpbmZvMik7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMik7Ci0KLSAgLyogcmVhZCBuZXh0IDUwIGJ5dGVzICovCi0gIGJ1ZmZlcjIgPSBOVUxMOwotICByZXQgPSBnc3RfcGFkX2dldF9yYW5nZSAocGFkLCA1MCwgNTAsICZidWZmZXIyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyMikgPT0gNTApOwotCi0gIC8qIGNvbXBhcmUgd2l0aCBwcmV2aW91c2x5IHJlYWQgZGF0YSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlcjIsICZpbmZvMiwgR1NUX01BUF9SRUFEKSk7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKChndWludDggKikgaW5mbzEuZGF0YSArIDUwLCBpbmZvMi5kYXRhLCA1MCkgPT0gMCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlcjIsICZpbmZvMik7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyMSwgJmluZm8xKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjIpOwotCi0gIC8qIHJlYWQgMTAgYnl0ZXMgYXQgZW5kLTEwIHNob3VsZCBnaXZlIGV4YWN0bHkgMTAgYnl0ZXMgKi8KLSAgYnVmZmVyMSA9IE5VTEw7Ci0gIHJldCA9IGdzdF9wYWRfZ2V0X3JhbmdlIChwYWQsIHN0b3AgLSAxMCwgMTAsICZidWZmZXIxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIxICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyMSkgPT0gMTApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIxKTsKLQotICAvKiByZWFkIDIwIGJ5dGVzIGF0IGVuZC0xMCBzaG91bGQgZ2l2ZSBleGFjdGx5IDEwIGJ5dGVzICovCi0gIGJ1ZmZlcjEgPSBOVUxMOwotICByZXQgPSBnc3RfcGFkX2dldF9yYW5nZSAocGFkLCBzdG9wIC0gMTAsIDIwLCAmYnVmZmVyMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoYnVmZmVyMSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcjEpID09IDEwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMSk7Ci0KLSAgLyogcmVhZCAwIGJ5dGVzIGF0IGVuZC0xIHNob3VsZCByZXR1cm4gMCBieXRlcyAqLwotICBidWZmZXIxID0gTlVMTDsKLSAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCAtIDEsIDAsICZidWZmZXIxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIxICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyMSkgPT0gMCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjEpOwotCi0gIC8qIHJlYWQgMTAgYnl0ZXMgYXQgZW5kLTEgc2hvdWxkIHJldHVybiAxIGJ5dGUgKi8KLSAgYnVmZmVyMSA9IE5VTEw7Ci0gIHJldCA9IGdzdF9wYWRfZ2V0X3JhbmdlIChwYWQsIHN0b3AgLSAxLCAxMCwgJmJ1ZmZlcjEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcjEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIxKSA9PSAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMSk7Ci0KLSAgLyogcmVhZCAwIGJ5dGVzIGF0IGVuZCBzaG91bGQgRU9TICovCi0gIGJ1ZmZlcjEgPSBOVUxMOwotICByZXQgPSBnc3RfcGFkX2dldF9yYW5nZSAocGFkLCBzdG9wLCAwLCAmYnVmZmVyMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX0ZMT1dfRU9TKTsKLQotICAvKiByZWFkIDEwIGJ5dGVzIGJlZm9yZSBlbmQgc2hvdWxkIEVPUyAqLwotICBidWZmZXIxID0gTlVMTDsKLSAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCwgMTAsICZidWZmZXIxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19FT1MpOwotCi0gIC8qIHJlYWQgMCBieXRlcyBhZnRlciBlbmQgc2hvdWxkIEVPUyAqLwotICBidWZmZXIxID0gTlVMTDsKLSAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCArIDEwLCAwLCAmYnVmZmVyMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX0ZMT1dfRU9TKTsKLQotICAvKiByZWFkIDEwIGJ5dGVzIGFmdGVyIGVuZCBzaG91bGQgRU9TIHRvbyAqLwotICBidWZmZXIxID0gTlVMTDsKLSAgcmV0ID0gZ3N0X3BhZF9nZXRfcmFuZ2UgKHBhZCwgc3RvcCArIDEwLCAxMCwgJmJ1ZmZlcjEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9GTE9XX0VPUyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGNsZWFudXBfZmlsZXNyYyAoc3JjKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb3ZlcmFnZSkKLXsKLSAgR3N0RWxlbWVudCAqc3JjOwotICBnY2hhciAqbG9jYXRpb247Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gIHNyYyA9IHNldHVwX2ZpbGVzcmMgKCk7Ci0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKHNyYywgYnVzKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAiL2kvZG8vbm90L2V4aXN0IiwgTlVMTCk7Ci0gIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiL2kvZG8vbm90L2V4aXN0Iik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwKLSAgICAgICJjb3VsZCBzZXQgdG8gcGxheWluZyB3aXRoIHdyb25nIGxvY2F0aW9uIik7Ci0KLSAgLyogYSBzdGF0ZSBjaGFuZ2UgYW5kIGFuIGVycm9yICovCi0gIGZhaWxfaWYgKChtZXNzYWdlID0gZ3N0X2J1c19wb3AgKGJ1cykpID09IE5VTEwpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIGZhaWxfaWYgKChtZXNzYWdlID0gZ3N0X2J1c19wb3AgKGJ1cykpID09IE5VTEwpOwotICBmYWlsX3VubGVzc19tZXNzYWdlX2Vycm9yIChtZXNzYWdlLCBSRVNPVVJDRSwgTk9UX0ZPVU5EKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsIE5VTEwsIE5VTEwpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOwotICBmYWlsX2lmIChsb2NhdGlvbik7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChzcmMsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKLSAgY2xlYW51cF9maWxlc3JjIChzcmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VyaV9pbnRlcmZhY2UpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgZ2NoYXIgKmxvY2F0aW9uOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0UGFkICpwYWQ7Ci0KLSAgc3JjID0gc2V0dXBfZmlsZXNyYyAoKTsKLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoc3JjLCBidXMpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsIE5VTEwsIE5VTEwpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOwotICBmYWlsX3VubGVzcyAobG9jYXRpb24gPT0gTlVMTCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgIi9pL2RvL25vdC9leGlzdCIsIE5VTEwpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgIi9pL2RvL25vdC9leGlzdCIpOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLQotICBsb2NhdGlvbiA9IGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgImZpbGU6Ly8vaS9kby9ub3QvZXhpc3QiKTsKLSAgZ19mcmVlIChsb2NhdGlvbik7Ci0KLSAgLyogc2hvdWxkIGFjY2VwdCBmaWxlOi8vL2Zvby9iYXIgVVJJcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkgKEdTVF9VUklfSEFORExFUiAoc3JjKSwKLSAgICAgICAgICAiZmlsZTovLy9mb28vYmFyIiwgTlVMTCkpOwotICBsb2NhdGlvbiA9IGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgImZpbGU6Ly8vZm9vL2JhciIpOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICIvZm9vL2JhciIpOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLQotICAvKiBzaG91bGQgYWNjZXB0IGZpbGU6Ly9sb2NhbGhvc3QvZm9vL2JhciBVUklzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChzcmMpLAotICAgICAgICAgICJmaWxlOi8vbG9jYWxob3N0L2Zvby9iYXoiLCBOVUxMKSk7Ci0gIGxvY2F0aW9uID0gZ3N0X3VyaV9oYW5kbGVyX2dldF91cmkgKEdTVF9VUklfSEFORExFUiAoc3JjKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCAiZmlsZTovLy9mb28vYmF6Iik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAmbG9jYXRpb24sIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsb2NhdGlvbiwgIi9mb28vYmF6Iik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotCi0gIC8qIHNob3VsZCBlc2NhcGUgbm9uLXVyaSBjaGFyYWN0ZXJzIGZvciB0aGUgVVJJIGJ1dCBub3QgZm9yIHRoZSBsb2NhdGlvbiAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCAiL2Zvby9iP3IiLCBOVUxMKTsKLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoc3JjKSwgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICIvZm9vL2I/ciIpOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLSAgbG9jYXRpb24gPSBnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChzcmMpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobG9jYXRpb24sICJmaWxlOi8vL2Zvby9iJTNGciIpOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLQotICAvKiBzaG91bGQgZmFpbCB3aXRoIG90aGVyIGhvc3RuYW1lcyAqLwotICBmYWlsX2lmIChnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChzcmMpLAotICAgICAgICAgICJmaWxlOi8vaG9zdG5hbWUvZm9vL2ZvbyIsIE5VTEwpKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAibG9jYXRpb24iLCBURVNURklMRSwgTlVMTCk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBmYWlsX3VubGVzcyAocGFkICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgQVNTRVJUX1dBUk5JTkcgKGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsICIvd3JvbmciLCBOVUxMKSk7Ci0gIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsICZsb2NhdGlvbiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGxvY2F0aW9uLCBURVNURklMRSk7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChzcmMsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKLSAgY2xlYW51cF9maWxlc3JjIChzcmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNpZmRlZiBHX09TX1VOSVgKLXN0YXRpYyB2b2lkCi1jaGVja191cmlfZm9yX3VyaSAoR3N0RWxlbWVudCAqIGUsIGNvbnN0IGdjaGFyICogaW5fdXJpLCBjb25zdCBnY2hhciAqIHVyaSkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnY2hhciAqcXVlcnlfdXJpID0gTlVMTDsKLQotICBnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChlKSwgaW5fdXJpLCBOVUxMKTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfdXJpICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKGUsIHF1ZXJ5KSk7Ci0gIGdzdF9xdWVyeV9wYXJzZV91cmkgKHF1ZXJ5LCAmcXVlcnlfdXJpKTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgaWYgKHVyaSAhPSBOVUxMKSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAocXVlcnlfdXJpLCB1cmkpOwotICB9IGVsc2UgewotICAgIGdjaGFyICpmbjsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdXJpX2lzX3ZhbGlkIChxdWVyeV91cmkpKTsKLSAgICBmbiA9IGdfZmlsZW5hbWVfZnJvbV91cmkgKHF1ZXJ5X3VyaSwgTlVMTCwgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGdfcGF0aF9pc19hYnNvbHV0ZSAoZm4pKTsKLSAgICBmYWlsX3VubGVzcyAoZm4gIT0gTlVMTCk7Ci0gICAgZ19mcmVlIChmbik7Ci0gIH0KLQotICBnX2ZyZWUgKHF1ZXJ5X3VyaSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja191cmlfZm9yX2xvY2F0aW9uIChHc3RFbGVtZW50ICogZSwgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbiwKLSAgICBjb25zdCBnY2hhciAqIHVyaSkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnY2hhciAqcXVlcnlfdXJpID0gTlVMTDsKLQotICBnX29iamVjdF9zZXQgKGUsICJsb2NhdGlvbiIsIGxvY2F0aW9uLCBOVUxMKTsKLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3VyaSAoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChlLCBxdWVyeSkpOwotICBnc3RfcXVlcnlfcGFyc2VfdXJpIChxdWVyeSwgJnF1ZXJ5X3VyaSk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGlmICh1cmkgIT0gTlVMTCkgewotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHF1ZXJ5X3VyaSwgdXJpKTsKLSAgfSBlbHNlIHsKLSAgICBnY2hhciAqZm47Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9pc192YWxpZCAocXVlcnlfdXJpKSk7Ci0gICAgZm4gPSBnX2ZpbGVuYW1lX2Zyb21fdXJpIChxdWVyeV91cmksIE5VTEwsIE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChnX3BhdGhfaXNfYWJzb2x1dGUgKGZuKSk7Ci0gICAgZmFpbF91bmxlc3MgKGZuICE9IE5VTEwpOwotICAgIGdfZnJlZSAoZm4pOwotICB9Ci0KLSAgZ19mcmVlIChxdWVyeV91cmkpOwotfQotI2VuZGlmCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VyaV9xdWVyeSkKLXsKLSAgR3N0RWxlbWVudCAqc3JjOwotCi0gIHNyYyA9IHNldHVwX2ZpbGVzcmMgKCk7Ci0KLSNpZmRlZiBHX09TX1VOSVgKLSAgewotICAgIEdTVF9JTkZPICgiKm5peCIpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi9pL2RvL25vdC9leGlzdCIsICJmaWxlOi8vL2kvZG8vbm90L2V4aXN0Iik7Ci0gICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvZG8vbm90Ly4uL2V4aXN0IiwgImZpbGU6Ly8vaS9kby9leGlzdCIpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi9pL2RvL25vdC8uLi8uL2V4aXN0IiwgImZpbGU6Ly8vaS9kby9leGlzdCIpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi9pLy4vZG8vbm90Ly4uL2V4aXN0IiwgImZpbGU6Ly8vaS9kby9leGlzdCIpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi9pL2RvLy4vbm90Ly4uL2V4aXN0IiwgImZpbGU6Ly8vaS9kby9leGlzdCIpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi9pL2RvL25vdC8uLy4uL2V4aXN0IiwgImZpbGU6Ly8vaS9kby9leGlzdCIpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi9pLy4vZG8vLi8uLy4vLi8uL2V4aXN0IiwKLSAgICAgICAgImZpbGU6Ly8vaS9kby9leGlzdCIpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi9pL2RvL25vdC8uLi8uLi9leGlzdCIsICJmaWxlOi8vL2kvZXhpc3QiKTsKLSAgICBjaGVja191cmlfZm9yX2xvY2F0aW9uIChzcmMsICIvaS8uLi9ub3QvLi4vZXhpc3QiLCAiZmlsZTovLy9leGlzdCIpOwotICAgIC8qIGhhcmQgdG8gdGVzdCByZWxhdGl2ZSBVUklzLCBqdXN0IG1ha2Ugc3VyZSBpdCByZXR1cm5zIGFuIFVSSSBvZiBzb3J0cyAqLwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgImZvbyIsIE5VTEwpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgImZvby8uLi9iYXIiLCBOVUxMKTsKLSAgICBjaGVja191cmlfZm9yX2xvY2F0aW9uIChzcmMsICIuL2ZvbyIsIE5VTEwpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgIi4uL2ZvbyIsIE5VTEwpOwotICAgIGNoZWNrX3VyaV9mb3JfbG9jYXRpb24gKHNyYywgImZvby8uL2JhciIsIE5VTEwpOwotICAgIC8qIG1ha2Ugc3VyZSBub24tQVNDSUkgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCBwcm9wZXJseSAoVSswMEY2IGhlcmUpICovCi0gICAgY2hlY2tfdXJpX2Zvcl9sb2NhdGlvbiAoc3JjLCAiL2kvLi9kXDMwM1wyNjYvbm90Ly4uL2V4aXN0IiwKLSAgICAgICAgImZpbGU6Ly8vaS9kJUMzJUI2L2V4aXN0Iik7Ci0gICAgLyogbGV0J3Mgc2VlIHdoYXQgaGFwcGVucyBpZiB3ZSBzZXQgYSBtYWxmb3JtZWQgVVJJIHdpdGggSVNPLTg4NTktMSBjaGFycywKLSAgICAgKiBpLmUuIG9uZSB0aGF0IHRoZSBpbnB1dCBjaGFyYWN0ZXJzIGhhdmVuJ3QgYmVlbiBlc2NhcGVkIHByb3Blcmx5LiBXZQotICAgICAqIHNob3VsZCBnZXQgYmFjayBhIHByb3Blcmx5IGVzY2FwZWQgVVJJICovCi0gICAgY2hlY2tfdXJpX2Zvcl91cmkgKHNyYywgImZpbGU6Ly8vTVwzNjZ0XDM2NnIiLCAiZmlsZTovLy9NJUY2dCVGNnIiKTsKLSAgfQotI2VuZGlmCi0KLSAgY2xlYW51cF9maWxlc3JjIChzcmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1maWxlc3JjX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImZpbGVzcmMiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2Vla2luZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZXZlcnNlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3B1bGwpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY292ZXJhZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdXJpX2ludGVyZmFjZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91cmlfcXVlcnkpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZmlsZXNyYyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9mdW5uZWwuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjU2ZDU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Z1bm5lbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI3ICswLDAgQEAKLS8qIEdTdHJlYW1lciB1bml0IHRlc3RzIGZvciB0aGUgZnVubmVsCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTm9raWEKLSAqIEBhdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKLSovCi0KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RoYXJuZXNzLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0cnVjdCBUZXN0RGF0YQotewotICBHc3RFbGVtZW50ICpmdW5uZWw7Ci0gIEdzdFBhZCAqZnVubmVsc3JjLCAqZnVubmVsc2luazExLCAqZnVubmVsc2luazIyOwotICBHc3RQYWQgKm15c2luaywgKm15c3JjMSwgKm15c3JjMjsKLSAgR3N0Q2FwcyAqbXljYXBzOwotfTsKLQotc3RhdGljIHZvaWQKLXNldHVwX3Rlc3Rfb2JqZWN0cyAoc3RydWN0IFRlc3REYXRhICp0ZCwgR3N0UGFkQ2hhaW5GdW5jdGlvbiBjaGFpbl9mdW5jKQotewotICB0ZC0+bXljYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInRlc3QvdGVzdCIpOwotCi0gIHRkLT5mdW5uZWwgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmdW5uZWwiLCBOVUxMKTsKLQotICB0ZC0+ZnVubmVsc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHRkLT5mdW5uZWwsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHRkLT5mdW5uZWxzcmMgIT0gTlVMTCk7Ci0KLSAgdGQtPmZ1bm5lbHNpbmsxMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAodGQtPmZ1bm5lbCwgInNpbmtfMTEiKTsKLSAgZmFpbF91bmxlc3MgKHRkLT5mdW5uZWxzaW5rMTEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzICghc3RyY21wIChHU1RfT0JKRUNUX05BTUUgKHRkLT5mdW5uZWxzaW5rMTEpLCAic2lua18xMSIpKTsKLQotICB0ZC0+ZnVubmVsc2luazIyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZC0+ZnVubmVsLCAic2lua18yMiIpOwotICBmYWlsX3VubGVzcyAodGQtPmZ1bm5lbHNpbmsyMiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKCFzdHJjbXAgKEdTVF9PQkpFQ1RfTkFNRSAodGQtPmZ1bm5lbHNpbmsyMiksICJzaW5rXzIyIikpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHRkLT5mdW5uZWwsIEdTVF9TVEFURV9QTEFZSU5HKSA9PQotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICB0ZC0+bXlzaW5rID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHRkLT5teXNpbmssIGNoYWluX2Z1bmMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLT5teXNpbmssIFRSVUUpOwotCi0gIHRkLT5teXNyYzEgPSBnc3RfcGFkX25ldyAoInNyYzEiLCBHU1RfUEFEX1NSQyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQtPm15c3JjMSwgVFJVRSk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWQgKHRkLT5teXNyYzEsIHRkLT5mdW5uZWwsIHRkLT5teWNhcHMsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLCAidGVzdDEiKTsKLQotICB0ZC0+bXlzcmMyID0gZ3N0X3BhZF9uZXcgKCJzcmMyIiwgR1NUX1BBRF9TUkMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLT5teXNyYzIsIFRSVUUpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkICh0ZC0+bXlzcmMyLCB0ZC0+ZnVubmVsLCB0ZC0+bXljYXBzLAotICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgInRlc3QyIik7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHRkLT5mdW5uZWxzcmMsCi0gICAgICAgICAgICAgIHRkLT5teXNpbmspKSk7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHRkLT5teXNyYzEsCi0gICAgICAgICAgICAgIHRkLT5mdW5uZWxzaW5rMTEpKSk7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHRkLT5teXNyYzIsCi0gICAgICAgICAgICAgIHRkLT5mdW5uZWxzaW5rMjIpKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQKLXJlbGVhc2VfdGVzdF9vYmplY3RzIChzdHJ1Y3QgVGVzdERhdGEgKnRkKQotewotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLT5teXNpbmssIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC0+bXlzcmMxLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQtPm15c3JjMSwgRkFMU0UpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRkLT5teXNpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZC0+bXlzcmMxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGQtPm15c3JjMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodGQtPmZ1bm5lbCwgR1NUX1NUQVRFX05VTEwpID09Ci0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRkLT5mdW5uZWxzcmMpOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZC0+ZnVubmVsLCB0ZC0+ZnVubmVsc2luazExKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGQtPmZ1bm5lbHNpbmsxMSk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRkLT5mdW5uZWwsIHRkLT5mdW5uZWxzaW5rMjIpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZC0+ZnVubmVsc2luazIyKTsKLQotICBnc3RfY2Fwc191bnJlZiAodGQtPm15Y2Fwcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRkLT5mdW5uZWwpOwotfQotCi1zdGF0aWMgZ2ludCBidWZjb3VudCA9IDA7Ci1zdGF0aWMgZ2ludCBhbGxvY2NvdW50ID0gMDsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWNoYWluX29rIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBidWZjb3VudCsrOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mdW5uZWxfc2ltcGxlKQotewotICBzdHJ1Y3QgVGVzdERhdGEgdGQ7Ci0KLSAgc2V0dXBfdGVzdF9vYmplY3RzICgmdGQsIGNoYWluX29rKTsKLQotICBidWZjb3VudCA9IDA7Ci0gIGFsbG9jY291bnQgPSAwOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjMSwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAodGQubXlzcmMyLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGZhaWxfdW5sZXNzIChidWZjb3VudCA9PSAyKTsKLQotICByZWxlYXNlX3Rlc3Rfb2JqZWN0cyAoJnRkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1ndWludCBudW1fZW9zID0gMDsKLQotc3RhdGljIGdib29sZWFuCi1lb3NfZXZlbnRfZnVuYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpCi0gICAgKytudW1fZW9zOwotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Z1bm5lbF9lb3MpCi17Ci0gIHN0cnVjdCBUZXN0RGF0YSB0ZDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIHNldHVwX3Rlc3Rfb2JqZWN0cyAoJnRkLCBjaGFpbl9vayk7Ci0KLSAgbnVtX2VvcyA9IDA7Ci0gIGJ1ZmNvdW50ID0gMDsKLQotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAodGQubXlzaW5rLCBlb3NfZXZlbnRfZnVuYyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAodGQubXlzcmMxLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoICh0ZC5teXNyYzIsIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgZmFpbF91bmxlc3MgKGJ1ZmNvdW50ID09IDIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjMSwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAodGQubXlzcmMxLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfRU9TKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAodGQubXlzcmMyLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGZhaWxfdW5sZXNzIChidWZjb3VudCA9PSAzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYzIsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjMSwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX0VPUyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjMiwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX0VPUyk7Ci0KLSAgZmFpbF91bmxlc3MgKGJ1ZmNvdW50ID09IDMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjMSwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYzEsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMxLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMyLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAodGQubXlzcmMxLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoICh0ZC5teXNyYzIsIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19FT1MpOwotCi0gIGZhaWxfdW5sZXNzIChidWZjb3VudCA9PSA0KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF91bmxpbmsgKHRkLm15c3JjMSwgdGQuZnVubmVsc2luazExKSk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRkLmZ1bm5lbCwgdGQuZnVubmVsc2luazExKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGQuZnVubmVsc2luazExKTsKLSAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMik7Ci0KLSAgdGQuZnVubmVsc2luazExID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZC5mdW5uZWwsICJzaW5rXzExIik7Ci0gIGZhaWxfdW5sZXNzICh0ZC5mdW5uZWxzaW5rMTEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzICghc3RyY21wIChHU1RfT0JKRUNUX05BTUUgKHRkLmZ1bm5lbHNpbmsxMSksICJzaW5rXzExIikpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAoZ3N0X3BhZF9saW5rICh0ZC5teXNyYzEsCi0gICAgICAgICAgICAgIHRkLmZ1bm5lbHNpbmsxMSkpKTsKLQotICAvKiBUaGlzIHdpbGwgZmFpbCBiZWNhdXNlIGV2ZXJ5dGhpbmcgaXMgRU9TIGFscmVhZHkgKi8KLSAgZmFpbF9pZiAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYzEsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3VubGluayAodGQubXlzcmMxLCB0ZC5mdW5uZWxzaW5rMTEpKTsKLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAodGQuZnVubmVsLCB0ZC5mdW5uZWxzaW5rMTEpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZC5mdW5uZWxzaW5rMTEpOwotICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAyKTsKLQotICAvKiBzZW5kIG9ubHkgZW9zIHRvIGNoZWNrLCBpdCBoYW5kbGVzIGVtcHR5IHN0cmVhbXMgKi8KLSAgdGQuZnVubmVsc2luazExID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZC5mdW5uZWwsICJzaW5rXzExIik7Ci0gIGZhaWxfdW5sZXNzICh0ZC5mdW5uZWxzaW5rMTEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzICghc3RyY21wIChHU1RfT0JKRUNUX05BTUUgKHRkLmZ1bm5lbHNpbmsxMSksICJzaW5rXzExIikpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAoZ3N0X3BhZF9saW5rICh0ZC5teXNyYzEsCi0gICAgICAgICAgICAgIHRkLmZ1bm5lbHNpbmsxMSkpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYzEsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMxLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjMiwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYzIsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYzEsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjMiwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfdW5saW5rICh0ZC5teXNyYzEsIHRkLmZ1bm5lbHNpbmsxMSkpOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZC5mdW5uZWwsIHRkLmZ1bm5lbHNpbmsxMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRkLmZ1bm5lbHNpbmsxMSk7Ci0gIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDMpOwotCi0gIHRkLmZ1bm5lbHNpbmsxMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAodGQuZnVubmVsLCAic2lua18xMSIpOwotICBmYWlsX3VubGVzcyAodGQuZnVubmVsc2luazExICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoIXN0cmNtcCAoR1NUX09CSkVDVF9OQU1FICh0ZC5mdW5uZWxzaW5rMTEpLCAic2lua18xMSIpKTsKLQotICByZWxlYXNlX3Rlc3Rfb2JqZWN0cyAoJnRkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1ndWludCBuYl9zdHJlYW1fc3RhcnRfZXZlbnQgPSAwOwotZ3VpbnQgbmJfY2Fwc19ldmVudCA9IDA7Ci1ndWludCBuYl9zZWdtZW50X2V2ZW50ID0gMDsKLWd1aW50IG5iX2dhcF9ldmVudCA9IDA7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZXZlbnRfY291bnRlciAoR3N0T2JqZWN0ICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEV2ZW50ICpldmVudCA9IEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVCAoaW5mbyk7Ci0KLSAgZmFpbF91bmxlc3MgKGV2ZW50ICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0VWRU5UIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVDoKLSAgICAgICsrbmJfc3RyZWFtX3N0YXJ0X2V2ZW50OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICAgICsrbmJfY2Fwc19ldmVudDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICArK25iX3NlZ21lbnRfZXZlbnQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9HQVA6Ci0gICAgICArK25iX2dhcF9ldmVudDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi0vKgotICogUHVzaCBHQVAgZXZlbnRzIGludG8gZnVubmVsIHRvIGZvcndhcmQgc3RpY2t5IGV2ZW50cy4KLSAqIEZ1bm5lbCBlbGVtZW50IHNob3VkIGFsc28gdHJlYXQgR0FQIGV2ZW50cyBsaWtlcyBidWZmZXJzLgotICogRm9yIGV4YW1wbGUsIGZ1bm5lbCBjYW4gYmUgdXNlZCBmb3IgaW50ZXJuYWwgc3VidGl0bGUgd2l0aCBzdHJlYW1pZGRlbXV4LiAKLSAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiAgfCBwbGF5YmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAotICogIHwgKy0tLS0tLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0tLS0tLS0rICB8ICstLS0tLS0tLS0tLS0rICAgICBwbGF5c2luayAgICB8IHwKLSAqICB8IHwgdXJpZGVjb2RlYmluIHwgIHwgaW5wdXQtc2VsZWN0b3IgfCAgfCB8IHZpZGVvLXNpbmsgfCAgICAgICAgICAgICAgICAgfCB8Ci0gKiAgfCB8ICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLSsgIHwgKy0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgIHwgfAotICogIHwgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKLSAqICB8IHwgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLS0tLS0tKyAgfCArLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgfCB8Ci0gKiAgfCB8ICAgICAgICAgICAgICB8ICB8IGlucHV0LXNlbGVjdG9yIHwgIHwgfCBhdWRpby1zaW5rIHwgICAgICAgICAgICAgICAgIHwgfAotICogIHwgfCAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0rICB8ICstLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8IHwKLSAqICB8IHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8Ci0gKiAgfCB8ICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0tLS0tLSsgIHwgKy0tLS0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rIHwgfAotICogIHwgfCAgICAgICAgICAgICAgfCAgfCBmdW5uZWwgICAgICAgICB8ICB8IHwgc3RyZWFtaWRkZW11eCB8IHwgYXBwc2luazAgfCB8IHwKLSAqICB8ICstLS0tLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tLS0tLS0tKyAgfCArLS0tLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgfCB8Ci0gKiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rIHwgfAotICogIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgYXBwc2lua24gfCB8IHwKLSAqICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsgfCB8Ci0gKiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAotICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqIElmIG5vIGRhdGEgd2FzIHJlY2VpdmVkIGluIGZ1bm5lbCBhbmQgdGhlbiBzdGlja3kgZXZlbnRzIGNhbiBiZSBwZW5kaW5nIGNvbnRpbnVvdXNseS4gCi0gKiBBbmQgc3RyZWFtaWRkZW11eCBvbmx5IHJlY2VpdmUgZ2FwIGV2ZW50cyBjb250aW51b3VzbHkuIAotICogVGh1cywgcGlwZWxpbmUgY2FuIG5vdCBiZSBjb25zdHJ1Y3RlZCBjb21wbGV0ZWx5LgotICogRm9yIHN1cHBvcnQgaXQsIG5lZWQgdG8gaGFuZGxlIEdBUCBldmVudHMgbGlrZXMgYnVmZmVycy4KLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZnVubmVsX2dhcF9ldmVudCkKLXsKLSAgc3RydWN0IFRlc3REYXRhIHRkOwotICBndWludCBwcm9iZSA9IDA7Ci0KLSAgc2V0dXBfdGVzdF9vYmplY3RzICgmdGQsIGNoYWluX29rKTsKLQotICBuYl9zdHJlYW1fc3RhcnRfZXZlbnQgPSAwOwotICBuYl9jYXBzX2V2ZW50ID0gMDsKLSAgbmJfc2VnbWVudF9ldmVudCA9IDA7Ci0gIG5iX2dhcF9ldmVudCA9IDA7Ci0gIGJ1ZmNvdW50ID0gMDsKLQotICBwcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlICh0ZC5teXNpbmssIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGV2ZW50X2NvdW50ZXIsIE5VTEwsIE5VTEwpOwotCi0gIC8qIHB1c2ggYSBnYXAgZXZlbnQgdG8gc3JjcGFkMSB0byBwdXNoIHN0aWNreSBldmVudHMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMxLCBnc3RfZXZlbnRfbmV3X2dhcCAoMCwKLSAgICAgICAgICAgICAgR1NUX1NFQ09ORCkpKTsKLQotICBmYWlsX3VubGVzcyAobmJfc3RyZWFtX3N0YXJ0X2V2ZW50ID09IDEpOwotICBmYWlsX3VubGVzcyAobmJfY2Fwc19ldmVudCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKG5iX3NlZ21lbnRfZXZlbnQgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChuYl9nYXBfZXZlbnQgPT0gMSk7Ci0KLSAgLyogcHVzaCBhIGdhcCBldmVudCB0byBzcmNwYWQyIHRvIHB1c2ggc3RpY2t5IGV2ZW50cyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYzIsIGdzdF9ldmVudF9uZXdfZ2FwICgwLAotICAgICAgICAgICAgICBHU1RfU0VDT05EKSkpOwotCi0gIGZhaWxfdW5sZXNzIChuYl9zdHJlYW1fc3RhcnRfZXZlbnQgPT0gMik7Ci0gIGZhaWxfdW5sZXNzIChuYl9jYXBzX2V2ZW50ID09IDIpOwotICBmYWlsX3VubGVzcyAobmJfc2VnbWVudF9ldmVudCA9PSAyKTsKLSAgZmFpbF91bmxlc3MgKG5iX2dhcF9ldmVudCA9PSAyKTsKLQotICAvKiBwdXNoIGEgZ2FwIGV2ZW50IHRvIHNyY3BhZDIgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMyLCBnc3RfZXZlbnRfbmV3X2dhcCAoMCwKLSAgICAgICAgICAgICAgR1NUX1NFQ09ORCkpKTsKLQotICBmYWlsX3VubGVzcyAobmJfc3RyZWFtX3N0YXJ0X2V2ZW50ID09IDIpOwotICBmYWlsX3VubGVzcyAobmJfY2Fwc19ldmVudCA9PSAyKTsKLSAgZmFpbF91bmxlc3MgKG5iX3NlZ21lbnRfZXZlbnQgPT0gMik7Ci0gIGZhaWxfdW5sZXNzIChuYl9nYXBfZXZlbnQgPT0gMyk7Ci0KLSAgLyogcHVzaCBhIGdhcCBldmVudCB0byBzcmNwYWQxICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjMSwgZ3N0X2V2ZW50X25ld19nYXAgKDAsCi0gICAgICAgICAgICAgIEdTVF9TRUNPTkQpKSk7Ci0KLSAgZmFpbF91bmxlc3MgKG5iX3N0cmVhbV9zdGFydF9ldmVudCA9PSAzKTsKLSAgZmFpbF91bmxlc3MgKG5iX2NhcHNfZXZlbnQgPT0gMyk7Ci0gIGZhaWxfdW5sZXNzIChuYl9zZWdtZW50X2V2ZW50ID09IDMpOwotICBmYWlsX3VubGVzcyAobmJfZ2FwX2V2ZW50ID09IDQpOwotCi0gIC8qIHB1c2ggYnVmZmVyICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjMSwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAodGQubXlzcmMyLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGZhaWxfdW5sZXNzIChuYl9zdHJlYW1fc3RhcnRfZXZlbnQgPT0gNCk7Ci0gIGZhaWxfdW5sZXNzIChuYl9jYXBzX2V2ZW50ID09IDQpOwotICBmYWlsX3VubGVzcyAobmJfc2VnbWVudF9ldmVudCA9PSA0KTsKLSAgZmFpbF91bmxlc3MgKG5iX2dhcF9ldmVudCA9PSA0KTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmNvdW50ID09IDIpOwotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlICh0ZC5teXNpbmssIHByb2JlKTsKLQotICByZWxlYXNlX3Rlc3Rfb2JqZWN0cyAoJnRkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mdW5uZWxfc3RyZXNzKQotewotICBHc3RIYXJuZXNzICpoMCA9IGdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzICgiZnVubmVsIiwgInNpbmtfMCIsICJzcmMiKTsKLSAgR3N0SGFybmVzcyAqaDEgPSBnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50IChoMC0+ZWxlbWVudCwgInNpbmtfMSIsIE5VTEwpOwotICBHc3RIYXJuZXNzVGhyZWFkICpyZXEsICpwdXNoMCwgKnB1c2gxOwotICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwgPQotICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChoMC0+ZWxlbWVudCksCi0gICAgICAic2lua18ldSIpOwotICBHc3RDYXBzICpjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0Y2FwcyIpOwotICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgcmVxID0gZ3N0X2hhcm5lc3Nfc3RyZXNzX3JlcXVlc3RwYWRfc3RhcnQgKGgwLCB0ZW1wbCwgTlVMTCwgTlVMTCwgVFJVRSk7Ci0gIHB1c2gwID0gZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0IChoMCwgY2FwcywgJnNlZ21lbnQsIGJ1Zik7Ci0gIHB1c2gxID0gZ3N0X2hhcm5lc3Nfc3RyZXNzX3B1c2hfYnVmZmVyX3N0YXJ0IChoMSwgY2FwcywgJnNlZ21lbnQsIGJ1Zik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIC8qIHRlc3QtbGVuZ3RoICovCi0gIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAqIDEpOwotCi0gIGdzdF9oYXJuZXNzX3N0cmVzc190aHJlYWRfc3RvcCAocHVzaDEpOwotICBnc3RfaGFybmVzc19zdHJlc3NfdGhyZWFkX3N0b3AgKHB1c2gwKTsKLSAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wIChyZXEpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoMSk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoMCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotZnVubmVsX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImZ1bm5lbCIpOwotICBUQ2FzZSAqdGNfY2hhaW47Ci0KLSAgdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJmdW5uZWwgc2ltcGxlIik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mdW5uZWxfc2ltcGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Z1bm5lbF9lb3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZnVubmVsX2dhcF9ldmVudCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mdW5uZWxfc3RyZXNzKTsKLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChmdW5uZWwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2lkZW50aXR5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNjY3NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvaWRlbnRpdHkuYworKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGlkZW50aXR5Ci0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAxNT4gSGF2YXJkIEdyYWZmICAgICAgICAgICA8aGF2YXJkQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb25lX2J1ZmZlcikKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoImlkZW50aXR5Iik7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyX2luOwotICBHc3RCdWZmZXIgKmJ1ZmZlcl9vdXQ7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaCwgIm15Y2FwcyIpOwotCi0gIGJ1ZmZlcl9pbiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlcl9pbiwgImJ1ZmZlciIsIDEpOwotCi0gIGdzdF9idWZmZXJfZmlsbCAoYnVmZmVyX2luLCAwLCAiZGF0YSIsIDQpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLCBidWZmZXJfaW4pKTsKLQotICAvKiAuLi4gYnV0IGl0IHNob3VsZCBlbmQgdXAgYmVpbmcgY29sbGVjdGVkIG9uIEdzdEhhcm5lc3MgcXVldWUgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMSwgZ3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZSAoaCkpOwotICBidWZmZXJfb3V0ID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0KLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9pbiA9PSBidWZmZXJfb3V0KTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyX291dCwgImJ1ZmZlciIsIDEpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyX291dCk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotaGFuZG9mZl9mdW5jIChHc3RFbGVtZW50ICogaWRlbnRpdHksIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0QnVmZmVyICoqIHJldCkKLXsKLSAgKHZvaWQpIGlkZW50aXR5OwotICAqcmV0ID0gYnVmOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaWduYWxfaGFuZG9mZnMpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJpZGVudGl0eSIpOwotICBHc3RCdWZmZXIgKmJ1ZmZlcl9pbjsKLSAgR3N0QnVmZmVyICpidWZmZXJfc2lnbmFsZWQgPSBOVUxMOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAibXljYXBzIik7Ci0KLSAgLyogY29ubmVjdCB0byB0aGUgaGFuZG9mZiBzaWduYWwgKi8KLSAgZ19zaWduYWxfY29ubmVjdCAoaC0+ZWxlbWVudCwgImhhbmRvZmYiLAotICAgICAgR19DQUxMQkFDSyAoaGFuZG9mZl9mdW5jKSwgJmJ1ZmZlcl9zaWduYWxlZCk7Ci0KLSAgLyogZmlyc3QsIHR1cm4gb2ZmIHNpZ25hbC1oYW5kb2ZmcyAqLwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJzaWduYWwtaGFuZG9mZnMiLCBGQUxTRSwgTlVMTCk7Ci0KLSAgLyogdGhlbiBwdXNoIGEgYnVmZmVyICovCi0gIGJ1ZmZlcl9pbiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLCBidWZmZXJfaW4pKTsKLQotICAvKiB2ZXJpZnkgdGhhdCB3ZSBnb3Qgbm8gYnVmZmVyIHNpZ25hbGVkICovCi0gIGZhaWxfdW5sZXNzIChidWZmZXJfc2lnbmFsZWQgPT0gTlVMTCk7Ci0KLSAgLyogbm93IHR1cm4gb24gc2lnbmFsLWhhbmRvZmZzICovCi0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotCi0gIC8qIHRoZW4gcHVzaCBhbm90aGVyIGJ1ZmZlciAqLwotICBidWZmZXJfaW4gPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgYnVmZmVyX2luKSk7Ci0KLSAgLyogdmVyaWZ5IHRoZSBidWZmZXIgc2lnbmFsZWQgaXMgZXF1YWwgdG8gdGhlIG9uZSBwdXNoZWQgaW4gKi8KLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9zaWduYWxlZCA9PSBidWZmZXJfaW4pOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXJfc2lnbmFsZWQsICJidWZmZXIiLCAxKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zeW5jX29uX3RpbWVzdGFtcCkKLXsKLSAgLyogdGhlIHJlYXNvbiB0byB1c2UgdGhlIHF1ZXVlIGluIGZyb250IG9mIHRoZSBpZGVudGl0eSBlbGVtZW50Ci0gICAgIGlzIHRvIGVmZmVjdGl2ZWx5IG1ha2UgZ3N0X2hhcm5lc3NfcHVzaCBhc3luY2hyb25vdXMsIG5vdCBsb2NraW5nCi0gICAgIHVwIHRoZSB0ZXN0LCB3YWl0aW5nIGZvciBnc3RfY2xvY2tfaWRfd2FpdCAqLwotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3X3BhcnNlICgicXVldWUgISBpZGVudGl0eSBzeW5jPTEiKTsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCA9IDEyMzQ1Njc4OTsKLQotICAvKiB1c2UgdGVzdGNsb2NrICovCi0gIGdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2sgKGgpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAibXljYXBzIik7Ci0KLSAgLyogbWFrZSBhIGJ1ZmZlciBhbmQgc2V0IHRoZSB0aW1lc3RhbXAgKi8KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdTVF9CVUZGRVJfUFRTIChidWYpID0gdGltZXN0YW1wOwotCi0gIC8qIHB1c2ggdGhlIGJ1ZmZlciwgYW5kIHZlcmlmeSBpdCBkb2VzICpub3QqIG1ha2UgaXQgdGhyb3VnaCAqLwotICBnc3RfaGFybmVzc19wdXNoIChoLCBidWYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlIChoKSk7Ci0KLSAgLyogdmVyaWZ5IHRoZSBpZGVudGl0eSBlbGVtZW50IGhhcyByZWdpc3RlcmVkIGV4YWN0bHkgb25lIEdzdENsb2NrSUQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzIChoLCAxLCA0MikpOwotCi0gIC8qIGNyYW5rIHRoZSBjbG9jayBhbmQgcHVsbCB0aGUgYnVmZmVyICovCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0KLSAgLyogdmVyaWZ5IHRoYXQgdGhlIGJ1ZmZlciBoYXMgdGhlIHJpZ2h0IHRpbWVzdGFtcCwgYW5kIHRoYXQgdGhlIHRpbWUgb24KLSAgICAgdGhlIGNsb2NrIGlzIGVxdWFsIHRvIHRoZSB0aW1lc3RhbXAgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0ICh0aW1lc3RhbXAsIEdTVF9CVUZGRVJfUFRTIChidWYpKTsKLSAgY2xvY2sgPSBnc3RfZWxlbWVudF9nZXRfY2xvY2sgKGgtPmVsZW1lbnQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKHRpbWVzdGFtcCwgZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RvcHBpbmdfZWxlbWVudF91bnNjaGVkdWxlc19zeW5jKQotewotICAvKiB0aGUgcmVhc29uIHRvIHVzZSB0aGUgcXVldWUgaW4gZnJvbnQgb2YgdGhlIGlkZW50aXR5IGVsZW1lbnQKLSAgICAgaXMgdG8gZWZmZWN0aXZlbHkgbWFrZSBnc3RfaGFybmVzc19wdXNoIGFzeW5jaHJvbm91cywgbm90IGxvY2tpbmcKLSAgICAgdXAgdGhlIHRlc3QsIHdhaXRpbmcgZm9yIGdzdF9jbG9ja19pZF93YWl0ICovCi0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXdfcGFyc2UgKCJxdWV1ZSAhIGlkZW50aXR5IHN5bmM9MSIpOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCA9IDEyMzQ1Njc4OTsKLQotICAvKiB1c2UgdGVzdGNsb2NrICovCi0gIGdzdF9oYXJuZXNzX3VzZV90ZXN0Y2xvY2sgKGgpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAibXljYXBzIik7Ci0KLSAgLyogbWFrZSBhIGJ1ZmZlciBhbmQgc2V0IHRoZSB0aW1lc3RhbXAgKi8KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdTVF9CVUZGRVJfUFRTIChidWYpID0gdGltZXN0YW1wOwotCi0gIC8qIHB1c2ggdGhlIGJ1ZmZlciwgYW5kIHZlcmlmeSBpdCBkb2VzICpub3QqIG1ha2UgaXQgdGhyb3VnaCAqLwotICBnc3RfaGFybmVzc19wdXNoIChoLCBidWYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlIChoKSk7Ci0KLSAgLyogdmVyaWZ5IHRoZSBpZGVudGl0eSBlbGVtZW50IGhhcyByZWdpc3RlcmVkIGV4YWN0bHkgb25lIEdzdENsb2NrSUQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzIChoLCAxLCA0MikpOwotCi0gIC8qIHNldHRpbmcgaWRlbnRpdHkgdG8gUkVBRFkgc2hvdWxkIHVuc2NoZWR1bGUgdGhlIHN5bmMgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChoLT5lbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOwotCi0gIC8qIHZlcmlmeSB0aGUgaWRlbnRpdHkgZWxlbWVudCBubyBsb25nZXIgd2FpdHMgb24gdGhlIGNsb2NrICovCi0gIGZhaWxfdW5sZXNzIChnc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0cyAoaCwgMCwgNDIpKTsKLQotICAvKiBhbmQgdGhhdCB0aGUgd2FpdGluZyBidWZmZXIgd2FzIGRyb3BwZWQgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZCAoaCkpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotaWRlbnRpdHlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiaWRlbnRpdHkiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfb25lX2J1ZmZlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaWduYWxfaGFuZG9mZnMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3luY19vbl90aW1lc3RhbXApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RvcHBpbmdfZWxlbWVudF91bnNjaGVkdWxlc19zeW5jKTsKLQotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoaWRlbnRpdHkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlxdWV1ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTlmNTU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpcXVldWUuYworKysgL2Rldi9udWxsCkBAIC0xLDE2MzAgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdHMgZm9yIG11bHRpcXVldWUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotc3RhdGljIEdNdXRleCBfY2hlY2tfbG9jazsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfbXVsdGlxdWV1ZSAoR3N0RWxlbWVudCAqIHBpcGUsIEdzdEVsZW1lbnQgKiBpbnB1dHNbXSwKLSAgICBHc3RFbGVtZW50ICogb3V0cHV0c1tdLCBndWludCBudW0pCi17Ci0gIEdzdEVsZW1lbnQgKm1xOwotICBndWludCBpOwotCi0gIG1xID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlxdWV1ZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobXEgIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgJ211bHRpcXVldWUnIGVsZW1lbnQiKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIG1xKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICBHc3RQYWQgKnNpbmtwYWQgPSBOVUxMOwotICAgIEdzdFBhZCAqc3JjcGFkID0gTlVMTDsKLQotICAgIC8qIGNyZWF0ZSBtdWx0aXF1ZXVlIHNpbmsgKGFuZCBzb3VyY2UpIHBhZCAqLwotICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKG1xLCAic2lua18ldSIpOwotICAgIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwsCi0gICAgICAgICJmYWlsZWQgdG8gY3JlYXRlIG11bHRpcXVldWUgcmVxdWVzdCBwYWQgIyV1IiwgaSk7Ci0KLSAgICAvKiBsaW5rIGlucHV0IGVsZW1lbnQgTiB0byB0aGUgTi10aCBtdWx0aXF1ZXVlIHNpbmsgcGFkIHdlIGp1c3QgY3JlYXRlZCAqLwotICAgIGlmIChpbnB1dHMgIT0gTlVMTCAmJiBpbnB1dHNbaV0gIT0gTlVMTCkgewotICAgICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBpbnB1dHNbaV0pOwotCi0gICAgICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoaW5wdXRzW2ldLCAic3JjIik7Ci0gICAgICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwsICJmYWlsZWQgdG8gZmluZCBzcmMgcGFkIGZvciBpbnB1dCAjJXUiLCBpKTsKLQotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1BBRF9MSU5LX09LLCBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkpOwotCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICAgICAgc3JjcGFkID0gTlVMTDsKLSAgICB9Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gICAgc2lua3BhZCA9IE5VTEw7Ci0KLSAgICAvKiBsaW5rIG91dHB1dCBlbGVtZW50IE4gdG8gdGhlIE4tdGggbXVsdGlxdWV1ZSBzcmMgcGFkICovCi0gICAgaWYgKG91dHB1dHMgIT0gTlVMTCAmJiBvdXRwdXRzW2ldICE9IE5VTEwpIHsKLSAgICAgIGdjaGFyIHBhZG5hbWVbMTBdOwotCi0gICAgICAvKiBvbmx5IHRoZSBzaW5rIHBhZHMgYXJlIGJ5IHJlcXVlc3QsIHRoZSBzb3VyY2UgcGFkcyBhcmUgc29tZXRpbWVzIHBhZHMsCi0gICAgICAgKiBzbyB0aGlzIHNob3VsZCByZXR1cm4gTlVMTCAqLwotICAgICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgInNyY18ldSIpOwotICAgICAgZmFpbF91bmxlc3MgKHNyY3BhZCA9PSBOVUxMKTsKLQotICAgICAgZ19zbnByaW50ZiAocGFkbmFtZSwgc2l6ZW9mIChwYWRuYW1lKSwgInNyY18ldSIsIGkpOwotICAgICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKG1xLCBwYWRuYW1lKTsKLSAgICAgIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCwgImZhaWxlZCB0byBnZXQgbXVsdGlxdWV1ZSBzcmMgcGFkICMldSIsIGkpOwotICAgICAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfU1JDIChzcmNwYWQpLAotICAgICAgICAgICIlczolcyBpcyBub3QgYSBzb3VyY2UgcGFkPyEiLCBHU1RfREVCVUdfUEFEX05BTUUgKHNyY3BhZCkpOwotCi0gICAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIG91dHB1dHNbaV0pOwotCi0gICAgICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKG91dHB1dHNbaV0sICJzaW5rIik7Ci0gICAgICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMLCAiZmFpbGVkIHRvIGZpbmQgc2luayBwYWQgb2Ygb3V0cHV0ICMldSIsIGkpOwotICAgICAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfU0lOSyAoc2lua3BhZCkpOwotCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfUEFEX0xJTktfT0ssIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSk7Ci0KLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gbXE7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsZV9waXBlbGluZSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZTsKLSAgR3N0RWxlbWVudCAqaW5wdXRzWzFdOwotICBHc3RFbGVtZW50ICpvdXRwdXRzWzFdOwotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotCi0gIGlucHV0c1swXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGlucHV0c1swXSAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNyYycgZWxlbWVudCIpOwotICBnX29iamVjdF9zZXQgKGlucHV0c1swXSwgIm51bS1idWZmZXJzIiwgMjU2LCBOVUxMKTsKLQotICBvdXRwdXRzWzBdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG91dHB1dHNbMF0gIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgJ2Zha2VzaW5rJyBlbGVtZW50Iik7Ci0KLSAgc2V0dXBfbXVsdGlxdWV1ZSAocGlwZSwgaW5wdXRzLCBvdXRwdXRzLCAxKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBtc2cgPSBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZSksCi0gICAgICBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotCi0gIGZhaWxfaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IsCi0gICAgICAiRXhwZWN0ZWQgRU9TIG1lc3NhZ2UsIGdvdCBFUlJPUiBtZXNzYWdlIik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIEdTVF9MT0cgKCJHb3QgRU9TLCBjbGVhbmluZyB1cCIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGVfc2h1dGRvd25fd2hpbGVfcnVubmluZykKLXsKLSAgR3N0RWxlbWVudCAqcGlwZTsKLSAgR3N0RWxlbWVudCAqaW5wdXRzWzFdOwotICBHc3RFbGVtZW50ICpvdXRwdXRzWzFdOwotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotCi0gIGlucHV0c1swXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGlucHV0c1swXSAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNyYycgZWxlbWVudCIpOwotCi0gIG91dHB1dHNbMF0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAob3V0cHV0c1swXSAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNpbmsnIGVsZW1lbnQiKTsKLQotICBzZXR1cF9tdWx0aXF1ZXVlIChwaXBlLCBpbnB1dHMsIG91dHB1dHMsIDEpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogd2FpdCB1bnRpbCBwaXBlbGluZSBpcyB1cCBhbmQgcnVubmluZyAqLwotICBtc2cgPSBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZSksCi0gICAgICBHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUsIC0xKTsKLSAgZmFpbF9pZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUiwgIkdvdCBFUlJPUiBtZXNzYWdlIik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIEdTVF9MT0cgKCJwaXBlbGluZSBpcyBydW5uaW5nIG5vdyIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIC8qIHdhaXQgYSBiaXQgdG8gYWNjdW11bGF0ZSBzb21lIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlICh3aGlsZSBpdCdzIGJsb2NraW5nCi0gICAqIGluIHRoZSBzaW5rKSAqLwotICBtc2cgPQotICAgICAgZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLCBHU1RfTUVTU0FHRV9FUlJPUiwgR1NUX1NFQ09ORCAvIDQpOwotICBpZiAobXNnKQotICAgIGdfZXJyb3IgKCJHb3QgRVJST1IgbWVzc2FnZSIpOwotCi0gIC8qIG5vdyBzaHV0IGRvd24gb25seSB0aGUgc2luaywgc28gdGhlIHF1ZXVlIGdldHMgYSB3cm9uZy1zdGF0ZSBmbG93IHJldHVybiAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKG91dHB1dHNbMF0sIEdTVF9TVEFURV9OVUxMKTsKLSAgbXNnID0KLSAgICAgIGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlKSwgR1NUX01FU1NBR0VfRVJST1IsIEdTVF9TRUNPTkQgLyAyKTsKLSAgaWYgKG1zZykKLSAgICBnX2Vycm9yICgiR290IEVSUk9SIG1lc3NhZ2UiKTsKLQotICBHU1RfTE9HICgiQ2xlYW5pbmcgdXAiKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2ltcGxlX2NyZWF0ZV9kZXN0cm95KQotewotICBHc3RFbGVtZW50ICptcTsKLQotICBtcSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm11bHRpcXVldWUiLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAobXEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlcXVlc3RfcGFkcykKLXsKLSAgR3N0RWxlbWVudCAqbXE7Ci0gIEdzdFBhZCAqc2luazEsICpzaW5rMjsKLQotICBtcSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm11bHRpcXVldWUiLCBOVUxMKTsKLQotICBzaW5rMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJmb29fJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsxID09IE5VTEwsCi0gICAgICAiRXhwZWN0ZWQgTlVMTCBwYWQsIGFzIHRoZXJlIGlzIG5vIHJlcXVlc3QgcGFkIHRlbXBsYXRlIGZvciAnZm9vXyUldSciKTsKLQotICBzaW5rMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzcmNfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsxID09IE5VTEwsCi0gICAgICAiRXhwZWN0ZWQgTlVMTCBwYWQsIGFzIHRoZXJlIGlzIG5vIHJlcXVlc3QgcGFkIHRlbXBsYXRlIGZvciAnc3JjXyUldSciKTsKLQotICBzaW5rMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rMSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19QQUQgKHNpbmsxKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX1NJTksgKHNpbmsxKSk7Ci0gIEdTVF9MT0cgKCJHb3QgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rMSkpOwotCi0gIHNpbmsyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgInNpbmtfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX1BBRCAoc2luazIpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfU0lOSyAoc2luazIpKTsKLSAgR1NUX0xPRyAoIkdvdCBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmsyKSk7Ci0KLSAgZmFpbF91bmxlc3MgKHNpbmsxICE9IHNpbmsyKTsKLQotICBHU1RfTE9HICgiQ2xlYW5pbmcgdXAiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luazEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKG1xKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0UGFkICoKLW1xX3NpbmtwYWRfdG9fc3JjcGFkIChHc3RFbGVtZW50ICogbXEsIEdzdFBhZCAqIHNpbmspCi17Ci0gIEdzdFBhZCAqc3JjcGFkID0gTlVMTDsKLQotICBnY2hhciAqbXFfc2lua3BhZF9uYW1lOwotICBnY2hhciAqbXFfc3JjcGFkX25hbWU7Ci0KLSAgbXFfc2lua3BhZF9uYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAoc2luayk7Ci0gIGZhaWxfdW5sZXNzIChnX3N0cl9oYXNfcHJlZml4IChtcV9zaW5rcGFkX25hbWUsICJzaW5rIikpOwotICBtcV9zcmNwYWRfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNyY18lcyIsIG1xX3NpbmtwYWRfbmFtZSArIDUpOwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAobXEsIG1xX3NyY3BhZF9uYW1lKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLQotICBnX2ZyZWUgKG1xX3NpbmtwYWRfbmFtZSk7Ci0gIGdfZnJlZSAobXFfc3JjcGFkX25hbWUpOwotCi0gIHJldHVybiBzcmNwYWQ7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlcXVlc3RfcGFkc19uYW1lZCkKLXsKLSAgR3N0RWxlbWVudCAqbXE7Ci0gIEdzdFBhZCAqc2luazEsICpzaW5rMiwgKnNpbmszLCAqc2luazQ7Ci0KLSAgbXEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJtdWx0aXF1ZXVlIiwgTlVMTCk7Ci0KLSAgc2luazEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKG1xLCAic2lua18xIik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rMSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19QQUQgKHNpbmsxKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX1NJTksgKHNpbmsxKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKEdTVF9QQURfTkFNRSAoc2luazEpLCAic2lua18xIik7Ci0gIEdTVF9MT0cgKCJHb3QgcGFkICVzOiVzIiwgR1NUX0RFQlVHX1BBRF9OQU1FIChzaW5rMSkpOwotCi0gIHNpbmszID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgInNpbmtfMyIpOwotICBmYWlsX3VubGVzcyAoc2luazMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfUEFEIChzaW5rMykpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19TSU5LIChzaW5rMykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChHU1RfUEFEX05BTUUgKHNpbmszKSwgInNpbmtfMyIpOwotICBHU1RfTE9HICgiR290IHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAoc2luazMpKTsKLQotICBzaW5rMiA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rXzIiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX1BBRCAoc2luazIpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfU0lOSyAoc2luazIpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX1BBRF9OQU1FIChzaW5rMiksICJzaW5rXzIiKTsKLSAgR1NUX0xPRyAoIkdvdCBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHNpbmsyKSk7Ci0KLSAgLyogVGhpcyBnZXRzIHVzIHRoZSBmaXJzdCB1bnVzZWQgaWQsIHNpbmswICovCi0gIHNpbms0ID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgInNpbmtfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNpbms0ICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX1BBRCAoc2luazQpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfU0lOSyAoc2luazQpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX1BBRF9OQU1FIChzaW5rNCksICJzaW5rXzAiKTsKLSAgR1NUX0xPRyAoIkdvdCBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHNpbms0KSk7Ci0KLSAgR1NUX0xPRyAoIkNsZWFuaW5nIHVwIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmsxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luazIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbms0KTsKLSAgZ3N0X29iamVjdF91bnJlZiAobXEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotbXFfZHVtbXlwYWRfcXVlcnkgKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmZpbHRlciwgKmNhcHM7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICBjYXBzID0gKGZpbHRlciA/IGdzdF9jYXBzX3JlZiAoZmlsdGVyKSA6IGdzdF9jYXBzX25ld19hbnkgKCkpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHNpbmtwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RydWN0IFBhZERhdGEKLXsKLSAgR3N0UGFkICppbnB1dF9wYWQ7Ci0gIEdzdFBhZCAqb3V0X3BhZDsKLSAgZ3VpbnQ4IHBhZF9udW07Ci0gIGd1aW50MzIgKm1heF9saW5rZWRfaWRfcHRyOwotICBndWludDMyICplb3NfY291bnRfcHRyOwotICBnYm9vbGVhbiBpc19saW5rZWQ7Ci0gIGdib29sZWFuIGZpcnN0X2J1ZjsKLSAgZ2ludCBuX2xpbmtlZDsKLQotICBHTXV0ZXggKm11dGV4OwotICBHQ29uZCAqY29uZDsKLQotICAvKiB1c2VkIGJ5IGluaXRpYWxfZXZlbnRzX25vZGVsYXkgKi8KLSAgZ2ludCBldmVudF9jb3VudDsKLX07Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1tcV9kdW1teXBhZF9jaGFpbiAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIGd1aW50MzIgY3VyX2lkOwotICBzdHJ1Y3QgUGFkRGF0YSAqcGFkX2RhdGE7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLQotICBwYWRfZGF0YSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAoc2lua3BhZCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmX2NoZWNrX2xvY2spOwotICBmYWlsX2lmIChwYWRfZGF0YSA9PSBOVUxMKTsKLSAgLyogUmVhZCBhbiBJRCBmcm9tIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIHRoZSBidWZmZXIgZGF0YSBhbmQgY2hlY2sgaXQncwotICAgKiB3aGF0IHdlIGV4cGVjdCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID49IDQpOwotICBnX211dGV4X3VubG9jayAoJl9jaGVja19sb2NrKTsKLSAgY3VyX2lkID0gR1NUX1JFQURfVUlOVDMyX0JFIChpbmZvLmRhdGEpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLQotICBnX211dGV4X2xvY2sgKHBhZF9kYXRhLT5tdXRleCk7Ci0KLSAgLyogRm9yIG5vdC1saW5rZWQgcGFkcywgZW5zdXJlIHRoYXQgd2UncmUgbm90IHJ1bm5pbmcgYWhlYWQgb2YgdGhlICdsaW5rZWQnCi0gICAqIHBhZHMuIFRoZSBmaXJzdCBidWZmZXIgaXMgYWxsb3dlZCB0byBnZXQgYWhlYWQsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoaW5ncyBjYW4ndAotICAgKiBhbHdheXMgcHJlLXJvbGwgY29ycmVjdGx5ICovCi0gIGlmIChwYWRfZGF0YS0+bWF4X2xpbmtlZF9pZF9wdHIpIHsKLSAgICBpZiAoIXBhZF9kYXRhLT5pc19saW5rZWQpIHsKLSAgICAgIC8qIElmIHRoZXJlIGFyZSBubyBsaW5rZWQgcGFkcywgd2UgY2FuJ3QgdHJhY2sgYSBtYXhfaWQgZm9yIHRoZW0gOikgKi8KLSAgICAgIGlmIChwYWRfZGF0YS0+bl9saW5rZWQgPiAwICYmICFwYWRfZGF0YS0+Zmlyc3RfYnVmKSB7Ci0gICAgICAgIGdfbXV0ZXhfbG9jayAoJl9jaGVja19sb2NrKTsKLSAgICAgICAgZmFpbF91bmxlc3MgKGN1cl9pZCA8PSAqKHBhZF9kYXRhLT5tYXhfbGlua2VkX2lkX3B0cikgKyAxLAotICAgICAgICAgICAgIkdvdCBidWZmZXIgJXUgb24gcGFkICV1IGJlZm9yZSBidWZmZXIgJXUgd2FzIHNlZW4gb24gYSAiCi0gICAgICAgICAgICAibGlua2VkIHBhZCAobWF4OiAldSkiLCBjdXJfaWQsIHBhZF9kYXRhLT5wYWRfbnVtLCBjdXJfaWQgLSAxLAotICAgICAgICAgICAgKihwYWRfZGF0YS0+bWF4X2xpbmtlZF9pZF9wdHIpKTsKLSAgICAgICAgZ19tdXRleF91bmxvY2sgKCZfY2hlY2tfbG9jayk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIFVwZGF0ZSB0aGUgbWF4X2lkIHZhbHVlICovCi0gICAgICBpZiAoY3VyX2lkID4gKihwYWRfZGF0YS0+bWF4X2xpbmtlZF9pZF9wdHIpKQotICAgICAgICAqKHBhZF9kYXRhLT5tYXhfbGlua2VkX2lkX3B0cikgPSBjdXJfaWQ7Ci0gICAgfQotICB9Ci0gIHBhZF9kYXRhLT5maXJzdF9idWYgPSBGQUxTRTsKLQotICBnX211dGV4X3VubG9jayAocGFkX2RhdGEtPm11dGV4KTsKLQotICAvKiBVbnJlZiB0aGUgYnVmZmVyICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgLyogUmV0dXJuIE9LIG9yIG5vdC1saW5rZWQgYXMgaW5kaWNhdGVkICovCi0gIHJldHVybiBwYWRfZGF0YS0+aXNfbGlua2VkID8gR1NUX0ZMT1dfT0sgOiBHU1RfRkxPV19OT1RfTElOS0VEOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW1xX2R1bW15cGFkX2V2ZW50IChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIHN0cnVjdCBQYWREYXRhICpwYWRfZGF0YTsKLQotICBwYWRfZGF0YSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAoc2lua3BhZCk7Ci0gIGdfbXV0ZXhfbG9jayAoJl9jaGVja19sb2NrKTsKLSAgZmFpbF9pZiAocGFkX2RhdGEgPT0gTlVMTCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmX2NoZWNrX2xvY2spOwotCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICBnX211dGV4X2xvY2sgKHBhZF9kYXRhLT5tdXRleCk7Ci0KLSAgICAvKiBBY2N1bXVsYXRlIHRoYXQgd2UndmUgc2VlbiB0aGUgRU9TIGFuZCBzaWduYWwgdGhlIG1haW4gdGhyZWFkICovCi0gICAgaWYgKHBhZF9kYXRhLT5lb3NfY291bnRfcHRyKQotICAgICAgKihwYWRfZGF0YS0+ZW9zX2NvdW50X3B0cikgKz0gMTsKLQotICAgIEdTVF9ERUJVRyAoIkVPUyBvbiBwYWQgJXUiLCBwYWRfZGF0YS0+cGFkX251bSk7Ci0KLSAgICBnX2NvbmRfYnJvYWRjYXN0IChwYWRfZGF0YS0+Y29uZCk7Ci0gICAgZ19tdXRleF91bmxvY2sgKHBhZF9kYXRhLT5tdXRleCk7Ci0gIH0KLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb25zdHJ1Y3Rfbl9wYWRzIChHc3RFbGVtZW50ICogbXEsIHN0cnVjdCBQYWREYXRhICpwYWRfZGF0YSwgZ2ludCBuX3BhZHMsCi0gICAgZ2ludCBuX2xpbmtlZCkKLXsKLSAgZ2ludCBpOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotCi0gIC8qIENvbnN0cnVjdCBOUEFEUyBkdW1teSBvdXRwdXQgcGFkcy4gVGhlIGZpcnN0ICduX2xpbmtlZCcgcmV0dXJuIEZMT1dfT0ssIHRoZSByZXN0Ci0gICAqIHJldHVybiBOT1RfTElOS0VELiBUaGUgbm90LWxpbmtlZCBvbmVzIGNoZWNrIHRoZSBleHBlY3RlZCBvcmRlcmluZyBvZiAKLSAgICogb3V0cHV0IGJ1ZmZlcnMgKi8KLSAgZm9yIChpID0gMDsgaSA8IG5fcGFkczsgaSsrKSB7Ci0gICAgR3N0UGFkICptcV9zcmNwYWQsICptcV9zaW5rcGFkLCAqaW5wYWQsICpvdXRwYWQ7Ci0gICAgZ2NoYXIgKm5hbWU7Ci0KLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiZHVtbXlzcmMlZCIsIGkpOwotICAgIGlucGFkID0gZ3N0X3BhZF9uZXcgKG5hbWUsIEdTVF9QQURfU1JDKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChpbnBhZCwgbXFfZHVtbXlwYWRfcXVlcnkpOwotCi0gICAgbXFfc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rXyV1Iik7Ci0gICAgZmFpbF91bmxlc3MgKG1xX3NpbmtwYWQgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoaW5wYWQsIG1xX3NpbmtwYWQpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucGFkLCBUUlVFKTsKLQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgICBtcV9zcmNwYWQgPSBtcV9zaW5rcGFkX3RvX3NyY3BhZCAobXEsIG1xX3NpbmtwYWQpOwotCi0gICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoImR1bW15c2luayVkIiwgaSk7Ci0gICAgb3V0cGFkID0gZ3N0X3BhZF9uZXcgKG5hbWUsIEdTVF9QQURfU0lOSyk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLSAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAob3V0cGFkLCBtcV9kdW1teXBhZF9jaGFpbik7Ci0gICAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKG91dHBhZCwgbXFfZHVtbXlwYWRfZXZlbnQpOwotICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChvdXRwYWQsIG1xX2R1bW15cGFkX3F1ZXJ5KTsKLQotICAgIHBhZF9kYXRhW2ldLnBhZF9udW0gPSBpOwotICAgIHBhZF9kYXRhW2ldLmlucHV0X3BhZCA9IGlucGFkOwotICAgIHBhZF9kYXRhW2ldLm91dF9wYWQgPSBvdXRwYWQ7Ci0gICAgcGFkX2RhdGFbaV0ubWF4X2xpbmtlZF9pZF9wdHIgPSBOVUxMOwotICAgIHBhZF9kYXRhW2ldLmVvc19jb3VudF9wdHIgPSBOVUxMOwotICAgIHBhZF9kYXRhW2ldLmlzX2xpbmtlZCA9IChpIDwgbl9saW5rZWQgPyBUUlVFIDogRkFMU0UpOwotICAgIHBhZF9kYXRhW2ldLm5fbGlua2VkID0gbl9saW5rZWQ7Ci0gICAgcGFkX2RhdGFbaV0uY29uZCA9IE5VTEw7Ci0gICAgcGFkX2RhdGFbaV0ubXV0ZXggPSBOVUxMOwotICAgIHBhZF9kYXRhW2ldLmZpcnN0X2J1ZiA9IFRSVUU7Ci0gICAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChvdXRwYWQsIHBhZF9kYXRhICsgaSk7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChtcV9zcmNwYWQsIG91dHBhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKG91dHBhZCwgVFJVRSk7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zaW5rcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zcmNwYWQpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wdXNoX25fYnVmZmVycyAoc3RydWN0IFBhZERhdGEgKnBhZF9kYXRhLCBnaW50IG51bV9idWZmZXJzLAotICAgIGNvbnN0IGd1aW50OCAqIHBhZF9wYXR0ZXJuLCBndWludCBwYXR0ZXJuX3NpemUpCi17Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1ZmZlcnM7IGkrKykgewotICAgIGd1aW50OCBjdXJfcGFkOwotICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgIEdzdEZsb3dSZXR1cm4gcmV0OwotICAgIEdzdE1hcEluZm8gaW5mbzsKLQotICAgIGN1cl9wYWQgPSBwYWRfcGF0dGVybltpICUgcGF0dGVybl9zaXplXTsKLQotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gICAgZ19tdXRleF9sb2NrICgmX2NoZWNrX2xvY2spOwotICAgIGZhaWxfaWYgKGJ1ZiA9PSBOVUxMKTsKLSAgICBnX211dGV4X3VubG9jayAoJl9jaGVja19sb2NrKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKGluZm8uZGF0YSwgaSArIDEpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gKGkgKyAxKSAqIEdTVF9TRUNPTkQ7Ci0KLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHBhZF9kYXRhW2N1cl9wYWRdLmlucHV0X3BhZCwgYnVmKTsKLSAgICBnX211dGV4X2xvY2sgKCZfY2hlY2tfbG9jayk7Ci0gICAgaWYgKHBhZF9kYXRhW2N1cl9wYWRdLmlzX2xpbmtlZCkgewotICAgICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSywKLSAgICAgICAgICAiUHVzaCBvbiBwYWQgJWQgcmV0dXJuZWQgJWQgd2hlbiBGTE9XX09LIHdhcyBleHBlY3RlZCIsIGN1cl9wYWQsIHJldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIEV4cGVjdCBPSyBpbml0aWFsbHksIHRoZW4gTk9UX0xJTktFRCB3aGVuIHRoZSBzcmNwYWQgc3RhcnRzIHB1c2hpbmcgKi8KLSAgICAgIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX0ZMT1dfT0sgfHwgcmV0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQsCi0gICAgICAgICAgIlB1c2ggb24gcGFkICVkIHJldHVybmVkICVkIHdoZW4gRkxPV19PSyBvciBOT1RfTElOS0VEICB3YXMgZXhwZWN0ZWQiLAotICAgICAgICAgIGN1cl9wYWQsIHJldCk7Ci0gICAgfQotICAgIGdfbXV0ZXhfdW5sb2NrICgmX2NoZWNrX2xvY2spOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydW5fb3V0cHV0X29yZGVyX3Rlc3QgKGdpbnQgbl9saW5rZWQpCi17Ci0gIC8qIFRoaXMgdGVzdCBjcmVhdGVzIGEgbXVsdGlxdWV1ZSB3aXRoIDIgbGlua2VkIG91dHB1dCwgYW5kIDMgb3V0cHV0cyB0aGF0Ci0gICAqIHJldHVybiAnbm90LWxpbmtlZCcgd2hlbiBkYXRhIGlzIHB1c2hlZCwgdGhlbiB2ZXJpZmllcyB0aGF0IGFsbCBidWZmZXJzCi0gICAqIGFyZSByZWNlaXZlZCBvbiBub3QtbGlua2VkIHBhZHMgb25seSBhZnRlciBlYXJsaWVyIGJ1ZmZlcnMgb24gdGhlCi0gICAqICdsaW5rZWQnIHBhZHMgYXJlIG1hZGUgKi8KLSAgR3N0RWxlbWVudCAqcGlwZTsKLSAgR3N0RWxlbWVudCAqbXE7Ci0gIHN0cnVjdCBQYWREYXRhIHBhZF9kYXRhWzVdOwotICBndWludDMyIG1heF9saW5rZWRfaWQ7Ci0gIGd1aW50MzIgZW9zX3NlZW47Ci0gIEdNdXRleCBtdXRleDsKLSAgR0NvbmQgY29uZDsKLSAgZ2ludCBpOwotICBjb25zdCBnaW50IE5QQURTID0gNTsKLSAgY29uc3QgZ2ludCBOQlVGRkVSUyA9IDEwMDA7Ci0KLSAgZ19tdXRleF9pbml0ICgmbXV0ZXgpOwotICBnX2NvbmRfaW5pdCAoJmNvbmQpOwotCi0gIHBpcGUgPSBnc3RfYmluX25ldyAoInRlc3RiaW4iKTsKLQotICBtcSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm11bHRpcXVldWUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG1xICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIG1xKTsKLQotICAvKiBObyBsaW1pdHMgKi8KLSAgZ19vYmplY3Rfc2V0IChtcSwKLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludCkgMCwKLSAgICAgICJtYXgtc2l6ZS1idWZmZXJzIiwgKGd1aW50KSAwLAotICAgICAgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKLSAgICAgICJleHRyYS1zaXplLWJ5dGVzIiwgKGd1aW50KSAwLAotICAgICAgImV4dHJhLXNpemUtYnVmZmVycyIsIChndWludCkgMCwgImV4dHJhLXNpemUtdGltZSIsIChndWludDY0KSAwLCBOVUxMKTsKLQotICBjb25zdHJ1Y3Rfbl9wYWRzIChtcSwgcGFkX2RhdGEsIE5QQURTLCBuX2xpbmtlZCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBOUEFEUzsgaSsrKSB7Ci0gICAgcGFkX2RhdGFbaV0ubWF4X2xpbmtlZF9pZF9wdHIgPSAmbWF4X2xpbmtlZF9pZDsKLSAgICAvKiBPbmx5IGxvb2sgZm9yIEVPUyBvbiB0aGUgbGlua2VkIHBhZHMgKi8KLSAgICBwYWRfZGF0YVtpXS5lb3NfY291bnRfcHRyID0gKGkgPCBuX2xpbmtlZCkgPyAmZW9zX3NlZW4gOiBOVUxMOwotICAgIHBhZF9kYXRhW2ldLmNvbmQgPSAmY29uZDsKLSAgICBwYWRfZGF0YVtpXS5tdXRleCA9ICZtdXRleDsKLSAgfQotCi0gIC8qIFJ1biB0aGUgdGVzdC4gUHVzaCAxMDAwIGJ1ZmZlcnMgdGhyb3VnaCB0aGUgbXVsdGlxdWV1ZSBpbiBhIHBhdHRlcm4gKi8KLSAgbWF4X2xpbmtlZF9pZCA9IDA7Ci0gIGVvc19zZWVuID0gMDsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgewotICAgIGNvbnN0IGd1aW50OCBwYWRfcGF0dGVybltdID0KLSAgICAgICAgeyAwLCAwLCAwLCAwLCAxLCAxLCAyLCAxLCAwLCAyLCAzLCAyLCAzLCAxLCA0IH07Ci0gICAgY29uc3QgZ3VpbnQgbiA9IHNpemVvZiAocGFkX3BhdHRlcm4pIC8gc2l6ZW9mIChndWludDgpOwotICAgIHB1c2hfbl9idWZmZXJzIChwYWRfZGF0YSwgTkJVRkZFUlMsIHBhZF9wYXR0ZXJuLCBuKTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBOUEFEUzsgaSsrKSB7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWRfZGF0YVtpXS5pbnB1dF9wYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgfQotCi0gIC8qIFdhaXQgd2hpbGUgdGhlIGJ1ZmZlcnMgYXJlIHByb2Nlc3NlZCAqLwotICBnX211dGV4X2xvY2sgKCZtdXRleCk7Ci0gIC8qIFdlIHdhaXQgdW50aWwgRU9TIGhhcyBiZWVuIHB1c2hlZCBvbiBhbGwgbGlua2VkIHBhZHMgKi8KLSAgd2hpbGUgKGVvc19zZWVuIDwgbl9saW5rZWQpIHsKLSAgICBnX2NvbmRfd2FpdCAoJmNvbmQsICZtdXRleCk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZtdXRleCk7Ci0KLSAgLyogQ2xlYW4gdXAgKi8KLSAgZm9yIChpID0gMDsgaSA8IE5QQURTOyBpKyspIHsKLSAgICBHc3RQYWQgKm1xX2lucHV0ID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkX2RhdGFbaV0uaW5wdXRfcGFkKTsKLQotICAgIGdzdF9wYWRfdW5saW5rIChwYWRfZGF0YVtpXS5pbnB1dF9wYWQsIG1xX2lucHV0KTsKLSAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChtcSwgbXFfaW5wdXQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKG1xX2lucHV0KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWRfZGF0YVtpXS5pbnB1dF9wYWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZF9kYXRhW2ldLm91dF9wYWQpOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotCi0gIGdfY29uZF9jbGVhciAoJmNvbmQpOwotICBnX211dGV4X2NsZWFyICgmbXV0ZXgpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9vdXRwdXRfb3JkZXIpCi17Ci0gIHJ1bl9vdXRwdXRfb3JkZXJfdGVzdCAoMik7Ci0gIHJ1bl9vdXRwdXRfb3JkZXJfdGVzdCAoMCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbm90X2xpbmtlZF9lb3MpCi17Ci0gIC8qIFRoaXMgdGVzdCBjcmVhdGVzIGEgbXVsdGlxdWV1ZSB3aXRoIDEgbGlua2VkIG91dHB1dCBhbmQgMSBub3QtbGlua2VkCi0gICAqIHBhZC4gSXQgcHVzaGVzIGEgZmV3IGJ1ZmZlcnMgdGhyb3VnaCBlYWNoLCB0aGVuIEVPUyBvbiB0aGUgbGlua2VkCi0gICAqIHBhZCBhbmQgd2FpdHMgdW50aWwgdGhhdCBhcnJpdmVzLiBBZnRlciB0aGF0LCBpdCBwdXNoZXMgc29tZSBtb3JlCi0gICAqIGJ1ZmZlcnMgb24gdGhlIG5vdC1saW5rZWQgcGFkIGFuZCB0aGVuIEVPUyBhbmQgY2hlY2tzIHRoYXQgdGhvc2UKLSAgICogYXJlIGFsbCBvdXRwdXQgKi8KLSAgR3N0RWxlbWVudCAqcGlwZTsKLSAgR3N0RWxlbWVudCAqbXE7Ci0gIHN0cnVjdCBQYWREYXRhIHBhZF9kYXRhWzJdOwotICBndWludDMyIGVvc19zZWVuOwotICBHTXV0ZXggbXV0ZXg7Ci0gIEdDb25kIGNvbmQ7Ci0gIGdpbnQgaTsKLSAgY29uc3QgZ2ludCBOUEFEUyA9IDI7Ci0gIGNvbnN0IGdpbnQgTkJVRkZFUlMgPSAyMDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLQotICBnX211dGV4X2luaXQgKCZtdXRleCk7Ci0gIGdfY29uZF9pbml0ICgmY29uZCk7Ci0KLSAgcGlwZSA9IGdzdF9iaW5fbmV3ICgidGVzdGJpbiIpOwotCi0gIG1xID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlxdWV1ZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobXEgIT0gTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgbXEpOwotCi0gIC8qIE5vIGxpbWl0cyAqLwotICBnX29iamVjdF9zZXQgKG1xLAotICAgICAgIm1heC1zaXplLWJ5dGVzIiwgKGd1aW50KSAwLAotICAgICAgIm1heC1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQpIDAsCi0gICAgICAibWF4LXNpemUtdGltZSIsIChndWludDY0KSAwLAotICAgICAgImV4dHJhLXNpemUtYnl0ZXMiLCAoZ3VpbnQpIDAsCi0gICAgICAiZXh0cmEtc2l6ZS1idWZmZXJzIiwgKGd1aW50KSAwLCAiZXh0cmEtc2l6ZS10aW1lIiwgKGd1aW50NjQpIDAsIE5VTEwpOwotCi0gIC8qIENvbnN0cnVjdCBOUEFEUyBkdW1teSBvdXRwdXQgcGFkcy4gVGhlIGZpcnN0IDEgcmV0dXJucyBGTE9XX09LLCB0aGUgcmVzdAotICAgKiByZXR1cm4gTk9UX0xJTktFRC4gKi8KLSAgY29uc3RydWN0X25fcGFkcyAobXEsIHBhZF9kYXRhLCBOUEFEUywgMSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBOUEFEUzsgaSsrKSB7Ci0gICAgLyogT25seSBsb29rIGZvciBFT1Mgb24gdGhlIGxpbmtlZCBwYWRzICovCi0gICAgcGFkX2RhdGFbaV0uZW9zX2NvdW50X3B0ciA9ICZlb3Nfc2VlbjsKLSAgICBwYWRfZGF0YVtpXS5jb25kID0gJmNvbmQ7Ci0gICAgcGFkX2RhdGFbaV0ubXV0ZXggPSAmbXV0ZXg7Ci0gIH0KLQotICAvKiBSdW4gdGhlIHRlc3QuIFB1c2ggMjAgYnVmZmVycyB0aHJvdWdoIHRoZSBtdWx0aXF1ZXVlIGluIGEgcGF0dGVybiAqLwotICBlb3Nfc2VlbiA9IDA7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIHsKLSAgICBjb25zdCBndWludDggcGFkX3BhdHRlcm5bXSA9IHsgMCwgMSB9OwotICAgIGNvbnN0IGd1aW50IG4gPSBzaXplb2YgKHBhZF9wYXR0ZXJuKSAvIHNpemVvZiAoZ3VpbnQ4KTsKLSAgICBwdXNoX25fYnVmZmVycyAocGFkX2RhdGEsIE5CVUZGRVJTLCBwYWRfcGF0dGVybiwgbik7Ci0gIH0KLQotICAvKiBNYWtlIHRoZSBsaW5rZWQgcGFkIGdvIEVPUyAqLwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZF9kYXRhWzBdLmlucHV0X3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotCi0gIGdfbXV0ZXhfbG9jayAoJm11dGV4KTsKLSAgLyogV2FpdCB1bnRpbCBFT1MgaGFzIGJlZW4gc2VlbiBvbiB0aGUgbGlua2VkIHBhZCAqLwotICB3aGlsZSAoZW9zX3NlZW4gPT0gMCkKLSAgICBnX2NvbmRfd2FpdCAoJmNvbmQsICZtdXRleCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOwotCi0gIC8qIE5vdyBwdXNoIHNvbWUgbW9yZSBidWZmZXJzIHRvIHRoZSBub3QtbGlua2VkIHBhZCAqLwotICB7Ci0gICAgY29uc3QgZ3VpbnQ4IHBhZF9wYXR0ZXJuW10gPSB7IDEsIDEgfTsKLSAgICBjb25zdCBndWludCBuID0gc2l6ZW9mIChwYWRfcGF0dGVybikgLyBzaXplb2YgKGd1aW50OCk7Ci0gICAgcHVzaF9uX2J1ZmZlcnMgKHBhZF9kYXRhLCBOQlVGRkVSUywgcGFkX3BhdHRlcm4sIG4pOwotICB9Ci0gIC8qIEFuZCBFT1Mgb24gdGhlIG5vdC1saW5rZWQgcGFkICovCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkX2RhdGFbMV0uaW5wdXRfcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmbXV0ZXgpOwotICB3aGlsZSAoZW9zX3NlZW4gPCBOUEFEUykKLSAgICBnX2NvbmRfd2FpdCAoJmNvbmQsICZtdXRleCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOwotCi0gIC8qIENsZWFuIHVwICovCi0gIGZvciAoaSA9IDA7IGkgPCBOUEFEUzsgaSsrKSB7Ci0gICAgR3N0UGFkICptcV9pbnB1dCA9IGdzdF9wYWRfZ2V0X3BlZXIgKHBhZF9kYXRhW2ldLmlucHV0X3BhZCk7Ci0KLSAgICBnc3RfcGFkX3VubGluayAocGFkX2RhdGFbaV0uaW5wdXRfcGFkLCBtcV9pbnB1dCk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAobXEsIG1xX2lucHV0KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9pbnB1dCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkX2RhdGFbaV0uaW5wdXRfcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWRfZGF0YVtpXS5vdXRfcGFkKTsKLSAgfQotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLQotICBnX2NvbmRfY2xlYXIgKCZjb25kKTsKLSAgZ19tdXRleF9jbGVhciAoJm11dGV4KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zcGFyc2Vfc3RyZWFtKQotewotICAvKiBUaGlzIHRlc3QgY3JlYXRlcyBhIG11bHRpcXVldWUgd2l0aCAyIHN0cmVhbXMuIE9uZSByZWNlaXZlcwotICAgKiBhIGNvbnN0YW50IGZsb3cgb2YgYnVmZmVycywgdGhlIG90aGVyIG9ubHkgZ2V0cyBvbmUgYnVmZmVyLCBhbmQgdGhlbgotICAgKiBuZXctc2VnbWVudCBldmVudHMsIGFuZCByZXR1cm5zIG5vdC1saW5rZWQuIFRoZSBtdWx0aXF1ZXVlIHNob3VsZCBub3QgZmlsbC4KLSAgICovCi0gIEdzdEVsZW1lbnQgKnBpcGU7Ci0gIEdzdEVsZW1lbnQgKm1xOwotICBHc3RQYWQgKmlucHV0cGFkc1syXTsKLSAgR3N0UGFkICpzaW5rcGFkc1syXTsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBzdHJ1Y3QgUGFkRGF0YSBwYWRfZGF0YVsyXTsKLSAgZ3VpbnQzMiBlb3Nfc2VlbiwgbWF4X2xpbmtlZF9pZDsKLSAgR011dGV4IG11dGV4OwotICBHQ29uZCBjb25kOwotICBnaW50IGk7Ci0gIGNvbnN0IGdpbnQgTkJVRkZFUlMgPSAxMDA7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBnX211dGV4X2luaXQgKCZtdXRleCk7Ci0gIGdfY29uZF9pbml0ICgmY29uZCk7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0YmluIik7Ci0gIG1xID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlxdWV1ZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobXEgIT0gTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgbXEpOwotCi0gIC8qIDEgc2Vjb25kIGxpbWl0ICovCi0gIGdfb2JqZWN0X3NldCAobXEsCi0gICAgICAibWF4LXNpemUtYnl0ZXMiLCAoZ3VpbnQpIDAsCi0gICAgICAibWF4LXNpemUtYnVmZmVycyIsIChndWludCkgMCwKLSAgICAgICJtYXgtc2l6ZS10aW1lIiwgKGd1aW50NjQpIEdTVF9TRUNPTkQsCi0gICAgICAiZXh0cmEtc2l6ZS1ieXRlcyIsIChndWludCkgMCwKLSAgICAgICJleHRyYS1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQpIDAsICJleHRyYS1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwgTlVMTCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgLyogQ29uc3RydWN0IDIgZHVtbXkgb3V0cHV0IHBhZHMuICovCi0gIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICBHc3RQYWQgKm1xX3NyY3BhZCwgKm1xX3NpbmtwYWQ7Ci0gICAgZ2NoYXIgKm5hbWU7Ci0KLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiZHVtbXlzcmMlZCIsIGkpOwotICAgIGlucHV0cGFkc1tpXSA9IGdzdF9wYWRfbmV3IChuYW1lLCBHU1RfUEFEX1NSQyk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLSAgICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoaW5wdXRwYWRzW2ldLCBtcV9kdW1teXBhZF9xdWVyeSk7Ci0KLSAgICBtcV9zaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgInNpbmtfJXUiKTsKLSAgICBmYWlsX3VubGVzcyAobXFfc2lua3BhZCAhPSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChpbnB1dHBhZHNbaV0sIG1xX3NpbmtwYWQpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0cGFkc1tpXSwgVFJVRSk7Ci0KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkc1tpXSwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWRzW2ldLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgICBtcV9zcmNwYWQgPSBtcV9zaW5rcGFkX3RvX3NyY3BhZCAobXEsIG1xX3NpbmtwYWQpOwotCi0gICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoImR1bW15c2luayVkIiwgaSk7Ci0gICAgc2lua3BhZHNbaV0gPSBnc3RfcGFkX25ldyAobmFtZSwgR1NUX1BBRF9TSU5LKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rcGFkc1tpXSwgbXFfZHVtbXlwYWRfY2hhaW4pOwotICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rcGFkc1tpXSwgbXFfZHVtbXlwYWRfZXZlbnQpOwotICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzaW5rcGFkc1tpXSwgbXFfZHVtbXlwYWRfcXVlcnkpOwotCi0gICAgcGFkX2RhdGFbaV0ucGFkX251bSA9IGk7Ci0gICAgcGFkX2RhdGFbaV0ubWF4X2xpbmtlZF9pZF9wdHIgPSAmbWF4X2xpbmtlZF9pZDsKLSAgICBpZiAoaSA9PSAwKQotICAgICAgcGFkX2RhdGFbaV0uZW9zX2NvdW50X3B0ciA9ICZlb3Nfc2VlbjsKLSAgICBlbHNlCi0gICAgICBwYWRfZGF0YVtpXS5lb3NfY291bnRfcHRyID0gTlVMTDsKLSAgICBwYWRfZGF0YVtpXS5pc19saW5rZWQgPSAoaSA9PSAwKSA/IFRSVUUgOiBGQUxTRTsKLSAgICBwYWRfZGF0YVtpXS5uX2xpbmtlZCA9IDE7Ci0gICAgcGFkX2RhdGFbaV0uY29uZCA9ICZjb25kOwotICAgIHBhZF9kYXRhW2ldLm11dGV4ID0gJm11dGV4OwotICAgIHBhZF9kYXRhW2ldLmZpcnN0X2J1ZiA9IFRSVUU7Ci0gICAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzaW5rcGFkc1tpXSwgcGFkX2RhdGEgKyBpKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKG1xX3NyY3BhZCwgc2lua3BhZHNbaV0pID09IEdTVF9QQURfTElOS19PSyk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkc1tpXSwgVFJVRSk7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zaW5rcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zcmNwYWQpOwotICB9Ci0KLSAgLyogUnVuIHRoZSB0ZXN0LiBQdXNoIDEwMCBidWZmZXJzIHRocm91Z2ggdGhlIG11bHRpcXVldWUgKi8KLSAgbWF4X2xpbmtlZF9pZCA9IDA7Ci0gIGVvc19zZWVuID0gMDsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgTkJVRkZFUlM7IGkrKykgewotICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgIEdzdEZsb3dSZXR1cm4gcmV0OwotICAgIEdzdENsb2NrVGltZSB0czsKLSAgICBHc3RNYXBJbmZvIGluZm87Ci0KLSAgICB0cyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdTVF9TRUNPTkQsIGksIDEwKTsKLQotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gICAgZ19tdXRleF9sb2NrICgmX2NoZWNrX2xvY2spOwotICAgIGZhaWxfaWYgKGJ1ZiA9PSBOVUxMKTsKLSAgICBnX211dGV4X3VubG9jayAoJl9jaGVja19sb2NrKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKGluZm8uZGF0YSwgaSArIDEpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotCi0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHU1RfU0VDT05ELCBpLCAxMCk7Ci0KLSAgICAvKiBJZiBpID09IDAsIGFsc28gcHVzaCB0aGUgYnVmZmVyIHRvIHRoZSAybmQgcGFkICovCi0gICAgaWYgKGkgPT0gMCkKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaCAoaW5wdXRwYWRzWzFdLCBnc3RfYnVmZmVyX3JlZiAoYnVmKSk7Ci0KLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKGlucHV0cGFkc1swXSwgYnVmKTsKLSAgICBnX211dGV4X2xvY2sgKCZfY2hlY2tfbG9jayk7Ci0gICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSywKLSAgICAgICAgIlB1c2ggb24gcGFkICVkIHJldHVybmVkICVkIHdoZW4gRkxPV19PSyB3YXMgZXhwZWN0ZWQiLCAwLCByZXQpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmX2NoZWNrX2xvY2spOwotCi0gICAgLyogUHVzaCBhIG5ldyBzZWdtZW50IHVwZGF0ZSBvbiB0aGUgMm5kIHBhZCAqLwotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIHNlZ21lbnQuc3RhcnQgPSB0czsKLSAgICBzZWdtZW50LnRpbWUgPSB0czsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWRzWzFdLCBldmVudCk7Ci0gIH0KLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkc1swXSwgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChpbnB1dHBhZHNbMV0sIGV2ZW50KTsKLQotICAvKiBXYWl0IHdoaWxlIHRoZSBidWZmZXJzIGFyZSBwcm9jZXNzZWQgKi8KLSAgZ19tdXRleF9sb2NrICgmbXV0ZXgpOwotICAvKiBXZSB3YWl0IHVudGlsIEVPUyBoYXMgYmVlbiBwdXNoZWQgb24gcGFkIDEgKi8KLSAgd2hpbGUgKGVvc19zZWVuIDwgMSkgewotICAgIGdfY29uZF93YWl0ICgmY29uZCwgJm11dGV4KTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJm11dGV4KTsKLQotICAvKiBDbGVhbiB1cCAqLwotICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgR3N0UGFkICptcV9pbnB1dCA9IGdzdF9wYWRfZ2V0X3BlZXIgKGlucHV0cGFkc1tpXSk7Ci0KLSAgICBnc3RfcGFkX3VubGluayAoaW5wdXRwYWRzW2ldLCBtcV9pbnB1dCk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAobXEsIG1xX2lucHV0KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9pbnB1dCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoaW5wdXRwYWRzW2ldKTsKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWRzW2ldKTsKLSAgfQotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLQotICBnX2NvbmRfY2xlYXIgKCZjb25kKTsKLSAgZ19tdXRleF9jbGVhciAoJm11dGV4KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ3BvaW50ZXIKLXBhZF9wdXNoX2RhdGFibG9ja190aHJlYWQgKGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdFBhZCAqcGFkID0gZGF0YTsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDgwICogMTAwMCwgTlVMTCk7Ci0gIGdzdF9wYWRfcHVzaCAocGFkLCBidWYpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWJsb2NrX3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLSNkZWZpbmUgQ0hFQ0tfRk9SX0JVRkZFUklOR19NU0coUElQRUxJTkUsIEVYUEVDVEVEX1BFUkMpIFwKLSAgR19TVE1UX1NUQVJUIHsgXAotICAgIGdpbnQgYnVmX3BlcmM7IFwKLSAgICBHc3RNZXNzYWdlICptc2c7IFwKLSAgICBHU1RfTE9HICgid2FpdGluZyBmb3IgJWQlJSBidWZmZXJpbmcgbWVzc2FnZSIsIChFWFBFQ1RFRF9QRVJDKSk7IFwKLSAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAoUElQRUxJTkUpLCBcCi0gICAgICAgIEdTVF9NRVNTQUdFX0JVRkZFUklORyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7IFwKLSAgICBmYWlsX2lmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SLCBcCi0gICAgICAgICJFeHBlY3RlZCBCVUZGRVJJTkcgbWVzc2FnZSwgZ290IEVSUk9SIG1lc3NhZ2UiKTsgXAotICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyAobXNnLCAmYnVmX3BlcmMpOyBcCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7IFwKLSAgICBmYWlsX3VubGVzcyAoYnVmX3BlcmMgPT0gKEVYUEVDVEVEX1BFUkMpLCBcCi0gICAgICAgICJHb3QgaW5jb3JyZWN0IHBlcmNlbnRhZ2U6ICVkJSUgZXhwZWN0ZWQ6ICVkJSUiLCBidWZfcGVyYywgXAotICAgICAgICAoRVhQRUNURURfUEVSQykpOyBcCi0gIH0gR19TVE1UX0VORAotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbml0aWFsX2ZpbGxfYWJvdmVfaGlnaF90aHJlc2hvbGQpCi17Ci0gIC8qIFRoaXMgdGVzdCBjaGVja3Mgd2hhdCBoYXBwZW5zIGlmIHRoZSBmaXJzdCBidWZmZXIgdGhhdCBlbnRlcnMKLSAgICogdGhlIHF1ZXVlIGltbWVkaWF0ZWx5IGZpbGxzIGl0IGFib3ZlIHRoZSBoaWdoLXRocmVzaG9sZC4gKi8KLSAgR3N0RWxlbWVudCAqcGlwZTsKLSAgR3N0RWxlbWVudCAqbXEsICpmYWtlc2luazsKLSAgR3N0UGFkICppbnB1dHBhZDsKLSAgR3N0UGFkICptcV9zaW5rcGFkOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR1RocmVhZCAqdGhyZWFkOwotCi0KLSAgLyogU2V0dXAgdGVzdCBwaXBlbGluZSB3aXRoIG9uZSBtdWx0aXF1ZXVlIGFuZCBvbmUgZmFrZXNpbmsgKi8KLQotICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInRlc3RiaW4iKTsKLSAgbXEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJtdWx0aXF1ZXVlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtcSAhPSBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBtcSk7Ci0KLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZmFrZXNpbmsgIT0gTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgZmFrZXNpbmspOwotCi0gIC8qIEJsb2NrIGZha2VzaW5rIHNpbmtwYWQgZmxvdyB0byBlbnN1cmUgdGhlIHF1ZXVlIGlzbid0IGVtcHRpZWQKLSAgICogYnkgdGhlIHByZXJvbGxpbmcgc2luayAqLwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGZha2VzaW5rLCAic2luayIpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAoc2lua3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLLCBibG9ja19wcm9iZSwgTlVMTCwKLSAgICAgIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAvKiBTZXQgc2l6ZSBsaW1pdCB0byAxMDAwMDAwIGJ5dGUsIGxvdyB0aHJlc2hvbGQgdG8gMSUsIGhpZ2gKLSAgICogdGhyZXNob2xkIHRvIDUlLCB0byBtYWtlIHN1cmUgdGhhdCBldmVuIGp1c3Qgb25lIGRhdGEgcHVzaAotICAgKiB3aWxsIGV4Y2VlZCBib3RoIHRocmVzaG9sZHMuKi8KLSAgZ19vYmplY3Rfc2V0IChtcSwKLSAgICAgICJ1c2UtYnVmZmVyaW5nIiwgKGdib29sZWFuKSBUUlVFLAotICAgICAgIm1heC1zaXplLWJ5dGVzIiwgKGd1aW50KSAxMDAwICogMTAwMCwKLSAgICAgICJtYXgtc2l6ZS1idWZmZXJzIiwgKGd1aW50KSAwLAotICAgICAgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKLSAgICAgICJleHRyYS1zaXplLWJ5dGVzIiwgKGd1aW50KSAwLAotICAgICAgImV4dHJhLXNpemUtYnVmZmVycyIsIChndWludCkgMCwKLSAgICAgICJleHRyYS1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKLSAgICAgICJsb3ctcGVyY2VudCIsIChnaW50KSAxLCAiaGlnaC1wZXJjZW50IiwgKGdpbnQpIDUsIE5VTEwpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIGlucHV0cGFkID0gZ3N0X3BhZF9uZXcgKCJkdW1teXNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGlucHV0cGFkLCBtcV9kdW1teXBhZF9xdWVyeSk7Ci0KLSAgbXFfc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChtcV9zaW5rcGFkICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChpbnB1dHBhZCwgbXFfc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0cGFkLCBUUlVFKTsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zaW5rcGFkKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAobXEsIGZha2VzaW5rKSk7Ci0KLSAgLyogU3RhcnQgcGlwZWxpbmUgaW4gcGF1c2VkIHN0YXRlIHRvIGVuc3VyZSB0aGUgc2luayByZW1haW5zCi0gICAqIGluIHByZXJvbGwgbW9kZSBhbmQgYmxvY2tzICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogRmVlZCBkYXRhLiBxdWV1ZSB3aWxsIGJlIGZpbGxlZCB0byA4JSAoYmVjYXVzZSBpdCBwdXNoZXMgODAwMDAgYnl0ZXMpLAotICAgKiB3aGljaCBpcyBhYm92ZSBib3RoIHRoZSBsb3ctIGFuZCB0aGUgaGlnaC10aHJlc2hvbGQuIFRoaXMgc2hvdWxkCi0gICAqIHByb2R1Y2UgYSAxMDAlIGJ1ZmZlcmluZyBtZXNzYWdlLiAqLwotICB0aHJlYWQgPSBnX3RocmVhZF9uZXcgKCJwdXNoMSIsIHBhZF9wdXNoX2RhdGFibG9ja190aHJlYWQsIGlucHV0cGFkKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLSAgQ0hFQ0tfRk9SX0JVRkZFUklOR19NU0cgKHBpcGUsIDEwMCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGlucHV0cGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfd2F0ZXJtYXJrX2FuZF9maWxsX2xldmVsKQotewotICAvKiBUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiB0aGUgZmlsbCBsZXZlbCBhbmQKLSAgICogdGhlIGxvdy9oaWdoIHdhdGVybWFya3MuIEl0IGFsc28gY2hlY2tzIGlmIHRoZQotICAgKiBsb3cvaGlnaC1wZXJjZW50IGFuZCBsb3cvaGlnaC13YXRlcm1hcmsgcHJvcGVydGllcwotICAgKiBhcmUgY291cGxlZCB0b2dldGhlciBwcm9wZXJseS4gKi8KLSAgR3N0RWxlbWVudCAqcGlwZTsKLSAgR3N0RWxlbWVudCAqbXEsICpmYWtlc2luazsKLSAgR3N0UGFkICppbnB1dHBhZDsKLSAgR3N0UGFkICptcV9zaW5rcGFkOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR1RocmVhZCAqdGhyZWFkOwotICBnaW50IGxvd19wZXJjLCBoaWdoX3BlcmM7Ci0KLQotICAvKiBTZXR1cCB0ZXN0IHBpcGVsaW5lIHdpdGggb25lIG11bHRpcXVldWUgYW5kIG9uZSBmYWtlc2luayAqLwotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgidGVzdGJpbiIpOwotICBtcSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm11bHRpcXVldWUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG1xICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIG1xKTsKLQotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChmYWtlc2luayAhPSBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBmYWtlc2luayk7Ci0KLSAgLyogQmxvY2sgZmFrZXNpbmsgc2lua3BhZCBmbG93IHRvIGVuc3VyZSB0aGUgcXVldWUgaXNuJ3QgZW1wdGllZAotICAgKiBieSB0aGUgcHJlcm9sbGluZyBzaW5rICovCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmFrZXNpbmssICJzaW5rIik7Ci0gIGdzdF9wYWRfYWRkX3Byb2JlIChzaW5rcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0ssIGJsb2NrX3Byb2JlLCBOVUxMLAotICAgICAgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIGdfb2JqZWN0X3NldCAobXEsCi0gICAgICAidXNlLWJ1ZmZlcmluZyIsIChnYm9vbGVhbikgVFJVRSwKLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludCkgMTAwMCAqIDEwMDAsCi0gICAgICAibWF4LXNpemUtYnVmZmVycyIsIChndWludCkgMCwKLSAgICAgICJtYXgtc2l6ZS10aW1lIiwgKGd1aW50NjQpIDAsCi0gICAgICAiZXh0cmEtc2l6ZS1ieXRlcyIsIChndWludCkgMCwKLSAgICAgICJleHRyYS1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQpIDAsCi0gICAgICAiZXh0cmEtc2l6ZS10aW1lIiwgKGd1aW50NjQpIDAsCi0gICAgICAibG93LXdhdGVybWFyayIsIChnZG91YmxlKSAwLjAxLCAiaGlnaC13YXRlcm1hcmsiLCAoZ2RvdWJsZSkgMC4xMCwgTlVMTCk7Ci0KLSAgZ19vYmplY3RfZ2V0IChtcSwgImxvdy1wZXJjZW50IiwgJmxvd19wZXJjLCAiaGlnaC1wZXJjZW50IiwgJmhpZ2hfcGVyYywgTlVMTCk7Ci0KLSAgLyogQ2hlY2sgdGhhdCBsb3cvaGlnaC13YXRlcm1hcmsgYW5kIGxvdy9oaWdoLXBlcmNlbnQgYXJlCi0gICAqIGNvdXBsZWQgcHJvcGVybHkuIChsb3cvaGlnaC1wZXJjZW50IGFyZSBkZXByZWNhdGVkIGFuZAotICAgKiBleGlzdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuKSAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChsb3dfcGVyYywgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGhpZ2hfcGVyYywgMTApOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIGlucHV0cGFkID0gZ3N0X3BhZF9uZXcgKCJkdW1teXNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGlucHV0cGFkLCBtcV9kdW1teXBhZF9xdWVyeSk7Ci0KLSAgbXFfc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChtcV9zaW5rcGFkICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChpbnB1dHBhZCwgbXFfc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0cGFkLCBUUlVFKTsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zaW5rcGFkKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAobXEsIGZha2VzaW5rKSk7Ci0KLSAgLyogU3RhcnQgcGlwZWxpbmUgaW4gcGF1c2VkIHN0YXRlIHRvIGVuc3VyZSB0aGUgc2luayByZW1haW5zCi0gICAqIGluIHByZXJvbGwgbW9kZSBhbmQgYmxvY2tzICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogRmVlZCBkYXRhLiBxdWV1ZSB3aWxsIGJlIGZpbGxlZCB0byA4JSAoYmVjYXVzZSBpdCBwdXNoZXMgODAwMDAgYnl0ZXMpLAotICAgKiB3aGljaCBpcyBiZWxvdyB0aGUgaGlnaC10aHJlc2hvbGQsIHByb3Zva2luZyBhIGJ1ZmZlcmluZyBtZXNzYWdlLiAqLwotICB0aHJlYWQgPSBnX3RocmVhZF9uZXcgKCJwdXNoMSIsIHBhZF9wdXNoX2RhdGFibG9ja190aHJlYWQsIGlucHV0cGFkKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLQotICAvKiBDaGVjayBmb3IgdGhlIGJ1ZmZlcmluZyBtZXNzYWdlOyBpdCBzaG91bGQgaW5kaWNhdGUgODAlIGZpbGwgbGV2ZWwKLSAgICogKE5vdGUgdGhhdCB0aGUgcGVyY2VudGFnZSBmcm9tIHRoZSBtZXNzYWdlIGlzIG5vcm1hbGl6ZWQpICovCi0gIENIRUNLX0ZPUl9CVUZGRVJJTkdfTVNHIChwaXBlLCA4MCk7Ci0KLSAgLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciBzaXplIGFuZCBsb3dlciB0aGUgd2F0ZXJtYXJrcyB0byB0ZXN0Ci0gICAqIGlmIDwxJSB3YXRlcm1hcmtzIGFyZSBzdXBwb3J0ZWQuICovCi0gIGdfb2JqZWN0X3NldCAobXEsCi0gICAgICAibWF4LXNpemUtYnl0ZXMiLCAoZ3VpbnQpIDIwICogMTAwMCAqIDEwMDAsCi0gICAgICAibG93LXdhdGVybWFyayIsIChnZG91YmxlKSAwLjAwMDEsICJoaWdoLXdhdGVybWFyayIsIChnZG91YmxlKSAwLjAwNSwKLSAgICAgIE5VTEwpOwotICAvKiBGaXJzdCBidWZmZXJpbmcgbWVzc2FnZSBpcyBwb3N0ZWQgYWZ0ZXIgdGhlIG1heC1zaXplLWJ5dGVzIGxpbWl0Ci0gICAqIGlzIHNldCB0byAyMDAwMDAwMCBieXRlcyAmIHRoZSBsb3ctd2F0ZXJtYXJrIGlzIHNldC4gU2luY2UgdGhlCi0gICAqIG11bHRpcXVldWUgY29udGFpbnMgODAwMDAgYnl0ZXMsIGFuZCB0aGUgaGlnaCB3YXRlcm1hcmsgc3RpbGwgaXMKLSAgICogMC4xIGF0IHRoaXMgcG9pbnQsIGFuZCB0aGUgYnVmZmVyIGxldmVsIDgwMDAwIC8gMjAwMDAwMDAgPSAwLjAwNCBpcwotICAgKiBub3JtYWxpemVkIGJ5IDAuMTogMC4wMDQgLyAwLjEgPT4gYnVmZmVyaW5nIHBlcmNlbnRhZ2UgNCUuICovCi0gIENIRUNLX0ZPUl9CVUZGRVJJTkdfTVNHIChwaXBlLCA0KTsKLSAgLyogU2Vjb25kIGJ1ZmZlcmluZyBtZXNzYWdlIGlzIHBvc3RlZCBhZnRlciB0aGUgaGlnaC13YXRlcm1hcmsgbGltaXQKLSAgICogaXMgc2V0IHRvIDAuMDA1LiBUaGlzIHRpbWUsIHRoZSBidWZmZXIgbGV2ZWwgaXMgbm9ybWFsaXplZCB0aGlzIHdheToKLSAgICogMC4wMDQgLyAwLjAwNSA9PiBidWZmZXJpbmcgcGVyY2VudGFnZSA4MCUuICovCi0gIENIRUNLX0ZPUl9CVUZGRVJJTkdfTVNHIChwaXBlLCA4MCk7Ci0KLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaW5wdXRwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9oaWdoX3RocmVzaG9sZF9jaGFuZ2UpCi17Ci0gIC8qIFRoaXMgdGVzdCBjaGVja3Mgd2hhdCBoYXBwZW5zIGlmIHRoZSBoaWdoIHRocmVzaG9sZCBpcyBjaGFuZ2VkIHRvIGEKLSAgICogdmFsdWUgYmVsb3cgdGhlIGN1cnJlbnQgYnVmZmVyIGZpbGwgbGV2ZWwuIEV4cGVjdGVkIGJlaGF2aW9yIGlzIGZvcgotICAgKiBtdWx0aXF1ZXVlIHRvIGVtaXQgYSAxMDAlIGJ1ZmZlcmluZyBtZXNzYWdlIGluIHRoYXQgY2FzZS4gKi8KLSAgR3N0RWxlbWVudCAqcGlwZTsKLSAgR3N0RWxlbWVudCAqbXEsICpmYWtlc2luazsKLSAgR3N0UGFkICppbnB1dHBhZDsKLSAgR3N0UGFkICptcV9zaW5rcGFkOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR1RocmVhZCAqdGhyZWFkOwotCi0KLSAgLyogU2V0dXAgdGVzdCBwaXBlbGluZSB3aXRoIG9uZSBtdWx0aXF1ZXVlIGFuZCBvbmUgZmFrZXNpbmsgKi8KLQotICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInRlc3RiaW4iKTsKLSAgbXEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJtdWx0aXF1ZXVlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtcSAhPSBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBtcSk7Ci0KLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZmFrZXNpbmsgIT0gTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgZmFrZXNpbmspOwotCi0gIC8qIEJsb2NrIGZha2VzaW5rIHNpbmtwYWQgZmxvdyB0byBlbnN1cmUgdGhlIHF1ZXVlIGlzbid0IGVtcHRpZWQKLSAgICogYnkgdGhlIHByZXJvbGxpbmcgc2luayAqLwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGZha2VzaW5rLCAic2luayIpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAoc2lua3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLLCBibG9ja19wcm9iZSwgTlVMTCwKLSAgICAgIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICBnX29iamVjdF9zZXQgKG1xLAotICAgICAgInVzZS1idWZmZXJpbmciLCAoZ2Jvb2xlYW4pIFRSVUUsCi0gICAgICAibWF4LXNpemUtYnl0ZXMiLCAoZ3VpbnQpIDEwMDAgKiAxMDAwLAotICAgICAgIm1heC1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQpIDAsCi0gICAgICAibWF4LXNpemUtdGltZSIsIChndWludDY0KSAwLAotICAgICAgImV4dHJhLXNpemUtYnl0ZXMiLCAoZ3VpbnQpIDAsCi0gICAgICAiZXh0cmEtc2l6ZS1idWZmZXJzIiwgKGd1aW50KSAwLAotICAgICAgImV4dHJhLXNpemUtdGltZSIsIChndWludDY0KSAwLAotICAgICAgImxvdy1wZXJjZW50IiwgKGdpbnQpIDEsICJoaWdoLXBlcmNlbnQiLCAoZ2ludCkgOTksIE5VTEwpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIGlucHV0cGFkID0gZ3N0X3BhZF9uZXcgKCJkdW1teXNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGlucHV0cGFkLCBtcV9kdW1teXBhZF9xdWVyeSk7Ci0KLSAgbXFfc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChtcV9zaW5rcGFkICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChpbnB1dHBhZCwgbXFfc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0cGFkLCBUUlVFKTsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zaW5rcGFkKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAobXEsIGZha2VzaW5rKSk7Ci0KLSAgLyogU3RhcnQgcGlwZWxpbmUgaW4gcGF1c2VkIHN0YXRlIHRvIGVuc3VyZSB0aGUgc2luayByZW1haW5zCi0gICAqIGluIHByZXJvbGwgbW9kZSBhbmQgYmxvY2tzICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogRmVlZCBkYXRhLiBxdWV1ZSB3aWxsIGJlIGZpbGxlZCB0byA4JSAoYmVjYXVzZSBpdCBwdXNoZXMgODAwMDAgYnl0ZXMpLAotICAgKiB3aGljaCBpcyBiZWxvdyB0aGUgaGlnaC10aHJlc2hvbGQsIHByb3Zva2luZyBhIGJ1ZmZlcmluZyBtZXNzYWdlLiAqLwotICB0aHJlYWQgPSBnX3RocmVhZF9uZXcgKCJwdXNoMSIsIHBhZF9wdXNoX2RhdGFibG9ja190aHJlYWQsIGlucHV0cGFkKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLQotICAvKiBDaGVjayBmb3IgdGhlIGJ1ZmZlcmluZyBtZXNzYWdlOyBpdCBzaG91bGQgaW5kaWNhdGUgOCUgZmlsbCBsZXZlbAotICAgKiAoTm90ZSB0aGF0IHRoZSBwZXJjZW50YWdlIGZyb20gdGhlIG1lc3NhZ2UgaXMgbm9ybWFsaXplZCwgYnV0IHNpbmNlCi0gICAqIHRoZSBoaWdoIHRocmVzaG9sZCBpcyBhdCA5OSUsIGl0IHNob3VsZCBzdGlsbCBhcHBseSkgKi8KLSAgQ0hFQ0tfRk9SX0JVRkZFUklOR19NU0cgKHBpcGUsIDgpOwotCi0gIC8qIFNldCBoaWdoIHRocmVzaG9sZCB0byBoYWxmIG9mIHdoYXQgaXQgd2FzIGJlZm9yZS4gVGhpcyBtZWFucyB0aGF0IHRoZQotICAgKiByZWxhdGl2ZSBmaWxsIGxldmVsIGRvdWJsZXMuIEFzIGEgcmVzdWx0LCB0aGlzIHNob3VsZCB0cmlnZ2VyIGEgYnVmZmVyaW5nCi0gICAqIG1lc3NhZ2Ugd2l0aCBhIHBlcmNlbnRhZ2Ugb2YgMTYlLiAqLwotICBnX29iamVjdF9zZXQgKG1xLCAiaGlnaC1wZXJjZW50IiwgKGdpbnQpIDUwLCBOVUxMKTsKLSAgQ0hFQ0tfRk9SX0JVRkZFUklOR19NU0cgKHBpcGUsIDE2KTsKLQotICAvKiBTZXQgaGlnaCB0aHJlc2hvbGQgdG8gYSB2YWx1ZSB0aGF0IGxpZXMgYmVsb3cgdGhlIGN1cnJlbnQgZmlsbCBsZXZlbC4KLSAgICogVGhpcyBzaG91bGQgdHJpZ2dlciBhIDEwMCUgYnVmZmVyaW5nIG1lc3NhZ2UgaW1tZWRpYXRlbHksIGV2ZW4gd2l0aG91dAotICAgKiBwdXNoaW5nIGluIGV4dHJhIGRhdGEuICovCi0gIGdfb2JqZWN0X3NldCAobXEsICJoaWdoLXBlcmNlbnQiLCAoZ2ludCkgNSwgTlVMTCk7Ci0gIENIRUNLX0ZPUl9CVUZGRVJJTkdfTVNHIChwaXBlLCAxMDApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChpbnB1dHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xvd190aHJlc2hvbGRfY2hhbmdlKQotewotICAvKiBUaGlzIHRlc3RzIHdoYXQgaGFwcGVucyBpZiB0aGUgcXVldWUgaXNuJ3QgY3VycmVudGx5IGJ1ZmZlcmluZyBhbmQgdGhlCi0gICAqIGxvdy10aHJlc2hvbGQgaXMgcmFpc2VkIGFib3ZlIHRoZSBjdXJyZW50IGZpbGwgbGV2ZWwuICovCi0gIEdzdEVsZW1lbnQgKnBpcGU7Ci0gIEdzdEVsZW1lbnQgKm1xLCAqZmFrZXNpbms7Ci0gIEdzdFBhZCAqaW5wdXRwYWQ7Ci0gIEdzdFBhZCAqbXFfc2lua3BhZDsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIEdUaHJlYWQgKnRocmVhZDsKLQotCi0gIC8qIFNldHVwIHRlc3QgcGlwZWxpbmUgd2l0aCBvbmUgbXVsdGlxdWV1ZSBhbmQgb25lIGZha2VzaW5rICovCi0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0YmluIik7Ci0gIG1xID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlxdWV1ZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobXEgIT0gTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgbXEpOwotCi0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGZha2VzaW5rICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIGZha2VzaW5rKTsKLQotICAvKiBCbG9jayBmYWtlc2luayBzaW5rcGFkIGZsb3cgdG8gZW5zdXJlIHRoZSBxdWV1ZSBpc24ndCBlbXB0aWVkCi0gICAqIGJ5IHRoZSBwcmVyb2xsaW5nIHNpbmsgKi8KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChmYWtlc2luaywgInNpbmsiKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNpbmtwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSywgYmxvY2tfcHJvYmUsIE5VTEwsCi0gICAgICBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgLyogRW5hYmxlIGJ1ZmZlcmluZyBhbmQgc2V0IHRoZSBsb3cvaGlnaCB0aHJlc2hvbGRzIHRvIDElLzUlLiBUaGlzIGVuc3VyZXMKLSAgICogdGhhdCBhZnRlciBwdXNoaW5nIG9uZSBkYXRhIGJsb2NrLCB0aGUgaGlnaCB0aHJlc2hvbGQgaXMgcmVhY2hlZCwgYW5kCi0gICAqIGJ1ZmZlcmluZyBjZWFzZXMuICovCi0gIGdfb2JqZWN0X3NldCAobXEsCi0gICAgICAidXNlLWJ1ZmZlcmluZyIsIChnYm9vbGVhbikgVFJVRSwKLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludCkgMTAwMCAqIDEwMDAsCi0gICAgICAibWF4LXNpemUtYnVmZmVycyIsIChndWludCkgMCwKLSAgICAgICJtYXgtc2l6ZS10aW1lIiwgKGd1aW50NjQpIDAsCi0gICAgICAiZXh0cmEtc2l6ZS1ieXRlcyIsIChndWludCkgMCwKLSAgICAgICJleHRyYS1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQpIDAsCi0gICAgICAiZXh0cmEtc2l6ZS10aW1lIiwgKGd1aW50NjQpIDAsCi0gICAgICAibG93LXBlcmNlbnQiLCAoZ2ludCkgMSwgImhpZ2gtcGVyY2VudCIsIChnaW50KSA1LCBOVUxMKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBpbnB1dHBhZCA9IGdzdF9wYWRfbmV3ICgiZHVtbXlzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChpbnB1dHBhZCwgbXFfZHVtbXlwYWRfcXVlcnkpOwotCi0gIG1xX3NpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKG1xLCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAobXFfc2lua3BhZCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoaW5wdXRwYWQsIG1xX3NpbmtwYWQpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChpbnB1dHBhZCwgVFJVRSk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChpbnB1dHBhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobXFfc2lua3BhZCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKG1xLCBmYWtlc2luaykpOwotCi0gIC8qIFN0YXJ0IHBpcGVsaW5lIGluIHBhdXNlZCBzdGF0ZSB0byBlbnN1cmUgdGhlIHNpbmsgcmVtYWlucwotICAgKiBpbiBwcmVyb2xsIG1vZGUgYW5kIGJsb2NrcyAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIC8qIEZlZWQgZGF0YS4gcXVldWUgd2lsbCBiZSBmaWxsZWQgdG8gOCUgKGJlY2F1c2UgaXQgcHVzaGVzIDgwMDAwIGJ5dGVzKSwKLSAgICogd2hpY2ggaXMgYWJvdmUgdGhlIGhpZ2gtdGhyZXNob2xkLCBlbnN1cmluZyB0aGF0IHRoZSBxdWV1ZSBkaXNhYmxlcwotICAgKiBpdHMgYnVmZmVyaW5nIG1vZGUgaW50ZXJuYWxseS4gKi8KLSAgdGhyZWFkID0gZ190aHJlYWRfbmV3ICgicHVzaDEiLCBwYWRfcHVzaF9kYXRhYmxvY2tfdGhyZWFkLCBpbnB1dHBhZCk7Ci0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZCk7Ci0KLSAgLyogQ2hlY2sgZm9yIHRoZSBidWZmZXJpbmcgbWVzc2FnZTsgaXQgc2hvdWxkIGluZGljYXRlIDEwMCUgcmVsYXRpdmUgZmlsbAotICAgKiBsZXZlbCAoTm90ZSB0aGF0IHRoZSBwZXJjZW50YWdlIGZyb20gdGhlIG1lc3NhZ2UgaXMgbm9ybWFsaXplZCkgKi8KLSAgQ0hFQ0tfRk9SX0JVRkZFUklOR19NU0cgKHBpcGUsIDEwMCk7Ci0KLSAgLyogU2V0IGxvdyB0aHJlc2hvbGQgdG8gYSAxMCUsIHdoaWNoIGlzIGFib3ZlIHRoZSBjdXJyZW50IGZpbGwgbGV2ZWwgb2YgOCUuCi0gICAqIEFzIGEgcmVzdWx0LCB0aGUgcXVldWUgbXVzdCByZS1lbmFibGUgaXRzIGJ1ZmZlcmluZyBtb2RlLCBhbmQgcG9zdCB0aGUKLSAgICogY3VycmVudCByZWxhdGl2ZSBmaWxsIGxldmVsIG9mIDQwJSAoc2luY2UgaGlnaC1wZXJjZW50IGlzIGFsc28gc2V0IHRvIDIwJQotICAgKiBhbmQgOCUvMjAlID0gNDAlKS4gKi8KLSAgZ19vYmplY3Rfc2V0IChtcSwgImhpZ2gtcGVyY2VudCIsIChnaW50KSAyMCwgImxvdy1wZXJjZW50IiwgKGdpbnQpIDEwLCBOVUxMKTsKLSAgQ0hFQ0tfRk9SX0JVRkZFUklOR19NU0cgKHBpcGUsIDQwKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaW5wdXRwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ3BvaW50ZXIKLXBhZF9wdXNoX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0UGFkICpwYWQgPSBkYXRhOwotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X3BhZF9wdXNoIChwYWQsIGJ1Zik7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xpbWl0X2NoYW5nZXMpCi17Ci0gIC8qIFRoaXMgdGVzdCBjcmVhdGVzIGEgbXVsdGlxdWV1ZSB3aXRoIDEgc3RyZWFtLiBUaGUgbGltaXQgb2YgdGhlIHF1ZXVlCi0gICAqIGlzIHR3byBidWZmZXJzLCB3ZSBjaGVjayBpZiB3ZSBibG9jayBvbmNlIHRoaXMgaXMgcmVhY2hlZC4gVGhlbiB3ZQotICAgKiBjaGFuZ2UgdGhlIGxpbWl0IHRvIHRocmVlIGJ1ZmZlcnMgYW5kIGNoZWNrIGlmIHRoaXMgaXMgd2FraW5nIHVwCi0gICAqIHRoZSBxdWV1ZSBhbmQgd2UgZ2V0IHRoZSB0aGlyZCBidWZmZXIuCi0gICAqLwotICBHc3RFbGVtZW50ICpwaXBlOwotICBHc3RFbGVtZW50ICptcSwgKmZha2VzaW5rOwotICBHc3RQYWQgKmlucHV0cGFkOwotICBHc3RQYWQgKm1xX3NpbmtwYWQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR1RocmVhZCAqdGhyZWFkOwotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgidGVzdGJpbiIpOwotICBtcSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm11bHRpcXVldWUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG1xICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIG1xKTsKLQotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChmYWtlc2luayAhPSBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBmYWtlc2luayk7Ci0KLSAgZ19vYmplY3Rfc2V0IChtcSwKLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludCkgMCwKLSAgICAgICJtYXgtc2l6ZS1idWZmZXJzIiwgKGd1aW50KSAyLAotICAgICAgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKLSAgICAgICJleHRyYS1zaXplLWJ5dGVzIiwgKGd1aW50KSAwLAotICAgICAgImV4dHJhLXNpemUtYnVmZmVycyIsIChndWludCkgMCwgImV4dHJhLXNpemUtdGltZSIsIChndWludDY0KSAwLCBOVUxMKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBpbnB1dHBhZCA9IGdzdF9wYWRfbmV3ICgiZHVtbXlzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChpbnB1dHBhZCwgbXFfZHVtbXlwYWRfcXVlcnkpOwotCi0gIG1xX3NpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKG1xLCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAobXFfc2lua3BhZCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoaW5wdXRwYWQsIG1xX3NpbmtwYWQpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChpbnB1dHBhZCwgVFJVRSk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChpbnB1dHBhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobXFfc2lua3BhZCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKG1xLCBmYWtlc2luaykpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgdGhyZWFkID0gZ190aHJlYWRfbmV3ICgicHVzaDEiLCBwYWRfcHVzaF90aHJlYWQsIGlucHV0cGFkKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLSAgdGhyZWFkID0gZ190aHJlYWRfbmV3ICgicHVzaDIiLCBwYWRfcHVzaF90aHJlYWQsIGlucHV0cGFkKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLSAgdGhyZWFkID0gZ190aHJlYWRfbmV3ICgicHVzaDMiLCBwYWRfcHVzaF90aHJlYWQsIGlucHV0cGFkKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLSAgdGhyZWFkID0gZ190aHJlYWRfbmV3ICgicHVzaDQiLCBwYWRfcHVzaF90aHJlYWQsIGlucHV0cGFkKTsKLQotICAvKiBXYWl0IHVudGlsIHdlIGFyZSBhY3R1YWxseSBibG9ja2luZy4uLiB3ZSB1bmZvcnR1bmF0ZWx5IGNhbid0Ci0gICAqIGtub3cgdGhhdCB3aXRob3V0IHNsZWVwaW5nICovCi0gIHNsZWVwICgxKTsKLSAgZ19vYmplY3Rfc2V0IChtcSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQpIDMsIE5VTEwpOwotICBnX3RocmVhZF9qb2luICh0aHJlYWQpOwotCi0gIGdfb2JqZWN0X3NldCAobXEsICJtYXgtc2l6ZS1idWZmZXJzIiwgKGd1aW50KSA0LCBOVUxMKTsKLSAgdGhyZWFkID0gZ190aHJlYWRfbmV3ICgicHVzaDUiLCBwYWRfcHVzaF90aHJlYWQsIGlucHV0cGFkKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaW5wdXRwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR011dGV4IGJsb2NrX211dGV4Owotc3RhdGljIEdDb25kIGJsb2NrX2NvbmQ7Ci1zdGF0aWMgZ2ludCB1bmJsb2NrX2NvdW50Owotc3RhdGljIGdib29sZWFuIGV4cGVjdF9vdmVycnVuOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotcGFkX2NoYWluX2Jsb2NrIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBnX211dGV4X2xvY2sgKCZibG9ja19tdXRleCk7Ci0gIHdoaWxlICh1bmJsb2NrX2NvdW50ID09IDApIHsKLSAgICBnX2NvbmRfd2FpdCAoJmJsb2NrX2NvbmQsICZibG9ja19tdXRleCk7Ci0gIH0KLSAgaWYgKHVuYmxvY2tfY291bnQgPiAwKSB7Ci0gICAgdW5ibG9ja19jb3VudC0tOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmYmxvY2tfbXV0ZXgpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wYWRfZXZlbnRfYWx3YXlzX29rIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotbXFfb3ZlcnJ1biAoR3N0RWxlbWVudCAqIG1xLCBncG9pbnRlciB1ZGF0YSkKLXsKLSAgZmFpbF91bmxlc3MgKGV4cGVjdF9vdmVycnVuKTsKLQotICAvKiB1bmJsb2NrIGFsd2F5cyBzbyB3ZSBkb24ndCBnZXQgc3R1Y2sgKi8KLSAgZ19tdXRleF9sb2NrICgmYmxvY2tfbXV0ZXgpOwotICB1bmJsb2NrX2NvdW50ID0gMjsgICAgICAgICAgICAvKiBsZXQgdGhlIFBUUz0wIGFuZCBQVFM9bm9uZSBnbyAqLwotICBnX2NvbmRfc2lnbmFsICgmYmxvY2tfY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmYmxvY2tfbXV0ZXgpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9idWZmZXJpbmdfd2l0aF9ub25lX3B0cykKLXsKLSAgLyoKLSAgICogVGhpcyB0ZXN0IGNyZWF0ZXMgYSBtdWx0aXF1ZXVlIHdoZXJlIHNvdXJjZSBwdXNoaW5nIGJsb2NrcyBzbyB3ZSBjYW4gY2hlY2sKLSAgICogaG93IGl0cyBidWZmZXJpbmcgbGV2ZWwgaXMgcmVhY3RpbmcgdG8gR1NUX0NMT0NLX1RJTUVfTk9ORSBidWZmZXJzCi0gICAqIG1peGVkIHdpdGggcHJvcGVybHkgdGltZXN0YW1wZWQgYnVmZmVycy4KLSAgICoKLSAgICogU2VxdWVuY2Ugb2YgcHVzaGluZzoKLSAgICogcHRzPTAKLSAgICogcHRzPW5vbmUKLSAgICogcHRzPTEgKGl0IGdldHMgZnVsbCBub3cpCi0gICAqIHB0cz1ub25lIChvdmVycnVuIGV4cGVjdGVkKQotICAgKi8KLSAgR3N0RWxlbWVudCAqbXE7Ci0gIEdzdFBhZCAqaW5wdXRwYWQ7Ci0gIEdzdFBhZCAqb3V0cHV0cGFkOwotICBHc3RQYWQgKm1xX3NpbmtwYWQ7Ci0gIEdzdFBhZCAqbXFfc3JjcGFkOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gIGdfbXV0ZXhfaW5pdCAoJmJsb2NrX211dGV4KTsKLSAgZ19jb25kX2luaXQgKCZibG9ja19jb25kKTsKLSAgdW5ibG9ja19jb3VudCA9IDA7Ci0gIGV4cGVjdF9vdmVycnVuID0gRkFMU0U7Ci0KLSAgbXEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJtdWx0aXF1ZXVlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtcSAhPSBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKG1xLAotICAgICAgIm1heC1zaXplLWJ5dGVzIiwgKGd1aW50KSAwLAotICAgICAgIm1heC1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQpIDAsCi0gICAgICAibWF4LXNpemUtdGltZSIsIChndWludDY0KSBHU1RfU0VDT05ELCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAobXEsICJvdmVycnVuIiwgKEdDYWxsYmFjaykgbXFfb3ZlcnJ1biwgTlVMTCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgaW5wdXRwYWQgPSBnc3RfcGFkX25ldyAoImR1bW15c3JjIiwgR1NUX1BBRF9TUkMpOwotICBvdXRwdXRwYWQgPSBnc3RfcGFkX25ldyAoImR1bW15c2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChvdXRwdXRwYWQsIHBhZF9jaGFpbl9ibG9jayk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChvdXRwdXRwYWQsIHBhZF9ldmVudF9hbHdheXNfb2spOwotICBtcV9zaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChtcSwgInNpbmtfJXUiKTsKLSAgbXFfc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKG1xLCAic3JjXzAiKTsKLSAgZmFpbF91bmxlc3MgKG1xX3NpbmtwYWQgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKGlucHV0cGFkLCBtcV9zaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChtcV9zcmNwYWQsIG91dHB1dHBhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0cGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChvdXRwdXRwYWQsIFRSVUUpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKG1xLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICAvKiBwdXNoIGEgYnVmZmVyIHdpdGggUFRTID0gMCAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSAwOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChpbnB1dHBhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgLyogcHVzaCBhIGJ1ZmZlciB3aXRoIFBUUyA9IE5PTkUgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdTVF9CVUZGRVJfUFRTIChidWZmZXIpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoaW5wdXRwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIHB1c2ggYSBidWZmZXIgd2l0aCBQVFMgPSAxcywgc28gd2UgaGF2ZSAxcyBvZiBkYXRhIGluIG11bHRpcXVldWUsIHdlIGFyZQotICAgKiBmdWxsICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9IEdTVF9TRUNPTkQ7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKGlucHV0cGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLQotICAvKiBwdXNoIGEgYnVmZmVyIHdpdGggUFRTID0gTk9ORSwgdGhlIHF1ZXVlIGlzIGZ1bGwgc28gaXQgc2hvdWxkIG92ZXJydW4gKi8KLSAgZXhwZWN0X292ZXJydW4gPSBUUlVFOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChpbnB1dHBhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgZ19tdXRleF9sb2NrICgmYmxvY2tfbXV0ZXgpOwotICB1bmJsb2NrX2NvdW50ID0gLTE7Ci0gIGdfY29uZF9zaWduYWwgKCZibG9ja19jb25kKTsKLSAgZ19tdXRleF91bmxvY2sgKCZibG9ja19tdXRleCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChtcSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChpbnB1dHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKG91dHB1dHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKG1xX3NpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChtcV9zcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChtcSk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZibG9ja19tdXRleCk7Ci0gIGdfY29uZF9jbGVhciAoJmJsb2NrX2NvbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZXZlbnRfZnVuY19zaWduYWwgKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgc3RydWN0IFBhZERhdGEgKnBhZF9kYXRhOwotCi0gIEdTVF9MT0dfT0JKRUNUIChzaW5rcGFkLCAiJXMgZXZlbnQiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHBhZF9kYXRhID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChzaW5rcGFkKTsKLQotICBnX211dGV4X2xvY2sgKHBhZF9kYXRhLT5tdXRleCk7Ci0gICsrcGFkX2RhdGEtPmV2ZW50X2NvdW50OwotICBnX2NvbmRfYnJvYWRjYXN0IChwYWRfZGF0YS0+Y29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrIChwYWRfZGF0YS0+bXV0ZXgpOwotCi0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5pdGlhbF9ldmVudHNfbm9kZWxheSkKLXsKLSAgc3RydWN0IFBhZERhdGEgcGFkX2RhdGEgPSB7IDAsIH07Ci0gIEdzdEVsZW1lbnQgKnBpcGU7Ci0gIEdzdEVsZW1lbnQgKm1xOwotICBHc3RQYWQgKmlucHV0cGFkOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR011dGV4IG11dGV4OwotICBHQ29uZCBjb25kOwotCi0gIGdfbXV0ZXhfaW5pdCAoJm11dGV4KTsKLSAgZ19jb25kX2luaXQgKCZjb25kKTsKLQotICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInRlc3RiaW4iKTsKLQotICBtcSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm11bHRpcXVldWUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG1xICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIG1xKTsKLQotICB7Ci0gICAgR3N0UGFkICptcV9zcmNwYWQsICptcV9zaW5rcGFkOwotCi0gICAgaW5wdXRwYWQgPSBnc3RfcGFkX25ldyAoImR1bW15c3JjIiwgR1NUX1BBRF9TUkMpOwotCi0gICAgbXFfc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAobXEsICJzaW5rXyV1Iik7Ci0gICAgZmFpbF91bmxlc3MgKG1xX3NpbmtwYWQgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoaW5wdXRwYWQsIG1xX3NpbmtwYWQpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0cGFkLCBUUlVFKTsKLQotICAgIG1xX3NyY3BhZCA9IG1xX3NpbmtwYWRfdG9fc3JjcGFkIChtcSwgbXFfc2lua3BhZCk7Ci0KLSAgICBzaW5rcGFkID0gZ3N0X3BhZF9uZXcgKCJkdW1teXNpbmsiLCBHU1RfUEFEX1NJTkspOwotICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rcGFkLCBldmVudF9mdW5jX3NpZ25hbCk7Ci0KLSAgICBwYWRfZGF0YS5ldmVudF9jb3VudCA9IDA7Ci0gICAgcGFkX2RhdGEuY29uZCA9ICZjb25kOwotICAgIHBhZF9kYXRhLm11dGV4ID0gJm11dGV4OwotICAgIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAoc2lua3BhZCwgJnBhZF9kYXRhKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKG1xX3NyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAobXFfc2lua3BhZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAobXFfc3JjcGFkKTsKLSAgfQotCi0gIC8qIFJ1biB0aGUgdGVzdDogcHVzaCBldmVudHMgdGhyb3VnaCBtdWx0aXF1ZXVlICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImZvby94LWJhciIpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmbXV0ZXgpOwotICB3aGlsZSAocGFkX2RhdGEuZXZlbnRfY291bnQgPCAzKSB7Ci0gICAgR1NUX0xPRyAoIiVkIGV2ZW50cyBzbyBmYXIsIHdhaXRpbmcgZm9yIG1vcmUiLCBwYWRfZGF0YS5ldmVudF9jb3VudCk7Ci0gICAgZ19jb25kX3dhaXQgKCZjb25kLCAmbXV0ZXgpOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbXV0ZXgpOwotCi0gIC8qIENsZWFuIHVwICovCi0gIHsKLSAgICBHc3RQYWQgKm1xX2lucHV0ID0gZ3N0X3BhZF9nZXRfcGVlciAoaW5wdXRwYWQpOwotCi0gICAgZ3N0X3BhZF91bmxpbmsgKGlucHV0cGFkLCBtcV9pbnB1dCk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAobXEsIG1xX2lucHV0KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtcV9pbnB1dCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoaW5wdXRwYWQpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIH0KLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci0KLSAgZ19jb25kX2NsZWFyICgmY29uZCk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZtdXRleCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLW11bHRpcXVldWVfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgibXVsdGlxdWV1ZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfY3JlYXRlX2Rlc3Ryb3kpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2ltcGxlX3BpcGVsaW5lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsZV9zaHV0ZG93bl93aGlsZV9ydW5uaW5nKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVxdWVzdF9wYWRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlcXVlc3RfcGFkc19uYW1lZCk7Ci0KLSAgLyogRGlzYWJsZWQsIFRoZSB0ZXN0IChhbmQgbm90IG11bHRpcXVldWUgaXRzZWxmKSBpcyByYWN5LgotICAgKiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwODY2MSAqLwotICB0Y2FzZV9za2lwX2Jyb2tlbl90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vdXRwdXRfb3JkZXIpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ub3RfbGlua2VkX2Vvcyk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NwYXJzZV9zdHJlYW0pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5pdGlhbF9maWxsX2Fib3ZlX2hpZ2hfdGhyZXNob2xkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3dhdGVybWFya19hbmRfZmlsbF9sZXZlbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9oaWdoX3RocmVzaG9sZF9jaGFuZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbG93X3RocmVzaG9sZF9jaGFuZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGltaXRfY2hhbmdlcyk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2J1ZmZlcmluZ193aXRoX25vbmVfcHRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2luaXRpYWxfZXZlbnRzX25vZGVsYXkpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAobXVsdGlxdWV1ZSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjE5OTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTc1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgcXVldWUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNkZWZpbmUgVU5ERVJSVU5fTE9DSygpIChnX211dGV4X2xvY2sgKCZ1bmRlcnJ1bl9tdXRleCkpCi0jZGVmaW5lIFVOREVSUlVOX1VOTE9DSygpIChnX211dGV4X3VubG9jayAoJnVuZGVycnVuX211dGV4KSkKLSNkZWZpbmUgVU5ERVJSVU5fU0lHTkFMKCkgKGdfY29uZF9zaWduYWwgKCZ1bmRlcnJ1bl9jb25kKSkKLSNkZWZpbmUgVU5ERVJSVU5fV0FJVCgpIChnX2NvbmRfd2FpdCAoJnVuZGVycnVuX2NvbmQsICZ1bmRlcnJ1bl9tdXRleCkpCi0KLXN0YXRpYyBHc3RFbGVtZW50ICpxdWV1ZTsKLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcKLSAqIHNyYyBhbmQgc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsCi0gKiBnZXRfcGVlciwgYW5kIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotc3RhdGljIEdzdFBhZCAqbXlzcmNwYWQ7Ci1zdGF0aWMgR3N0UGFkICpteXNpbmtwYWQ7Ci1zdGF0aWMgR3N0UGFkICpxc3JjcGFkOwotc3RhdGljIGd1bG9uZyBwcm9iZV9pZDsKLQotc3RhdGljIGdpbnQgb3ZlcnJ1bl9jb3VudDsKLQotc3RhdGljIEdNdXRleCB1bmRlcnJ1bl9tdXRleDsKLXN0YXRpYyBHQ29uZCB1bmRlcnJ1bl9jb25kOwotc3RhdGljIGdpbnQgdW5kZXJydW5fY291bnQ7Ci0KLXN0YXRpYyBHTXV0ZXggZXZlbnRzX2xvY2s7Ci1zdGF0aWMgR0NvbmQgZXZlbnRzX2NvbmQ7Ci1zdGF0aWMgZ2ludCBldmVudHNfY291bnQ7Ci1zdGF0aWMgR0xpc3QgKmV2ZW50czsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgdm9pZAotcXVldWVfb3ZlcnJ1biAoR3N0RWxlbWVudCAqIHF1ZXVlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIG92ZXJydW5fY291bnQrKzsKLSAgR1NUX0RFQlVHICgicXVldWUgb3ZlcnJ1biAlZCIsIG92ZXJydW5fY291bnQpOwotfQotCi1zdGF0aWMgdm9pZAotcXVldWVfdW5kZXJydW4gKEdzdEVsZW1lbnQgKiBxdWV1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBVTkRFUlJVTl9MT0NLICgpOwotICB1bmRlcnJ1bl9jb3VudCsrOwotICBHU1RfREVCVUcgKCJxdWV1ZSB1bmRlcnJ1biAlZCIsIHVuZGVycnVuX2NvdW50KTsKLSAgVU5ERVJSVU5fU0lHTkFMICgpOwotICBVTkRFUlJVTl9VTkxPQ0sgKCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZXZlbnRfZnVuYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdTVF9ERUJVRyAoIiVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBnX211dGV4X2xvY2sgKCZldmVudHNfbG9jayk7Ci0KLSAgZXZlbnRzID0gZ19saXN0X2FwcGVuZCAoZXZlbnRzLCBldmVudCk7Ci0gICsrZXZlbnRzX2NvdW50OwotCi0gIGdfY29uZF9icm9hZGNhc3QgKCZldmVudHNfY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmZXZlbnRzX2xvY2spOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotYmxvY2tfc3JjICh2b2lkKQotewotICBxc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlLCAic3JjIik7Ci0gIHByb2JlX2lkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHFzcmNwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS19ET1dOU1RSRUFNLAotICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi11bmJsb2NrX3NyYyAodm9pZCkKLXsKLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHFzcmNwYWQsIHByb2JlX2lkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocXNyY3BhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cCAodm9pZCkKLXsKLSAgR1NUX0RFQlVHICgic2V0dXBfcXVldWUiKTsKLQotICBxdWV1ZSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgicXVldWUiKTsKLSAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJ1bmRlcnJ1biIsIEdfQ0FMTEJBQ0sgKHF1ZXVlX3VuZGVycnVuKSwgTlVMTCk7Ci0KLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAocXVldWUsICZzcmN0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotCi0gIG15c2lua3BhZCA9IE5VTEw7Ci0KLSAgb3ZlcnJ1bl9jb3VudCA9IDA7Ci0KLSAgdW5kZXJydW5fY291bnQgPSAwOwotCi0KLSAgZ19tdXRleF9pbml0ICgmZXZlbnRzX2xvY2spOwotICBnX2NvbmRfaW5pdCAoJmV2ZW50c19jb25kKTsKLSAgZXZlbnRzX2NvdW50ID0gMDsKLSAgZXZlbnRzID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXAgKHZvaWQpCi17Ci0gIEdTVF9ERUJVRyAoImNsZWFudXBfcXVldWUiKTsKLQotICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOwotCi0gIHdoaWxlIChldmVudHMgIT0gTlVMTCkgewotICAgIGdzdF9ldmVudF91bnJlZiAoR1NUX0VWRU5UIChldmVudHMtPmRhdGEpKTsKLSAgICBldmVudHMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGV2ZW50cywgZXZlbnRzKTsKLSAgfQotICBldmVudHNfY291bnQgPSAwOwotICBnX211dGV4X2NsZWFyICgmZXZlbnRzX2xvY2spOwotICBnX2NvbmRfY2xlYXIgKCZldmVudHNfY29uZCk7Ci0KLSAgaWYgKG15c2lua3BhZCAhPSBOVUxMKSB7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKHF1ZXVlKTsKLSAgfQotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHF1ZXVlKTsKLQotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAocXVldWUpOwotICBxdWV1ZSA9IE5VTEw7Ci19Ci0KLS8qIHNldHVwIHRoZSBzaW5rcGFkIG9uIGEgcGxheWluZyBxdWV1ZSBlbGVtZW50LiBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQoKQotICogZG9lcyBub3Qgd29yayBpbiB0aGlzIGNhc2Ugc2luY2UgaXQgZG9lcyBub3QgYWN0aXZhdGUgdGhlIHBhZCBiZWZvcmUgbGlua2luZwotICogaXQuICovCi1zdGF0aWMgR3N0UGFkICoKLXNldHVwX3NpbmtfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsKQotewotICBHc3RQYWQgKnNyY3BhZDsKLSAgR3N0UGFkICpzaW5rcGFkOwotCi0gIHNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAodG1wbCwgInNpbmsiKTsKLSAgZmFpbF9pZiAoc2lua3BhZCA9PSBOVUxMKTsKLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsICJzcmMiKTsKLSAgZmFpbF9pZiAoc3JjcGFkID09IE5VTEwpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2lua3BhZCwgZ3N0X2NoZWNrX2NoYWluX2Z1bmMpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2lua3BhZCwgZXZlbnRfZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICByZXR1cm4gc2lua3BhZDsKLX0KLQotLyogc2V0IHF1ZXVlIHNpemUgdG8gMiBidWZmZXJzCi0gKiBwdWxsIDEgYnVmZmVyCi0gKiBjaGVjayBvdmVyL3VuZGVydW5zCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vbl9sZWFreV91bmRlcnJ1bikKLXsKLSAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJvdmVycnVuIiwgR19DQUxMQkFDSyAocXVldWVfb3ZlcnJ1biksIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChxdWV1ZSksICJtYXgtc2l6ZS1idWZmZXJzIiwgMiwgTlVMTCk7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAocXVldWUsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKLQotICBVTkRFUlJVTl9MT0NLICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotICBVTkRFUlJVTl9XQUlUICgpOwotICBVTkRFUlJVTl9VTkxPQ0sgKCk7Ci0KLSAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAxKTsKLQotICBHU1RfREVCVUcgKCJzdG9wcGluZyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLXF1ZXVlX292ZXJydW5fbGlua19hbmRfYWN0aXZhdGUgKEdzdEVsZW1lbnQgKiBxdWV1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHU1RfREVCVUcgKCJxdWV1ZSBvdmVycnVuIik7Ci0gIG92ZXJydW5fY291bnQrKzsKLQotICAvKiBsaW5rIHRoZSBzcmMgcGFkIG9mIHRoZSBxdWV1ZSB0byBtYWtlIGl0IGRlcXVldWUgYnVmZmVycyAqLwotICBteXNpbmtwYWQgPSBzZXR1cF9zaW5rX3BhZCAocXVldWUsICZzaW5rdGVtcGxhdGUpOwotCi0gIHVuYmxvY2tfc3JjICgpOwotfQotCi0vKiBzZXQgcXVldWUgc2l6ZSB0byAyIGJ1ZmZlcnMKLSAqIHB1c2ggMiBidWZmZXJzCi0gKiBjaGVjayBvdmVyL3VuZGVydW5zCi0gKiBwdXNoIDEgbW9yZSBidWZmZXIKLSAqIGNoZWNrIG92ZXIvdW5kZXJ1bnMgYWdhaW4KLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbm9uX2xlYWt5X292ZXJydW4pCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyMTsKLSAgR3N0QnVmZmVyICpidWZmZXIyOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJvdmVycnVuIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKHF1ZXVlX292ZXJydW5fbGlua19hbmRfYWN0aXZhdGUpLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocXVldWUpLCAibWF4LXNpemUtYnVmZmVycyIsIDIsIE5VTEwpOwotCi0gIGJsb2NrX3NyYyAoKTsKLQotICBHU1RfREVCVUcgKCJzdGFydGluZyIpOwotCi0gIFVOREVSUlVOX0xPQ0sgKCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0gIFVOREVSUlVOX1dBSVQgKCk7Ci0gIFVOREVSUlVOX1VOTE9DSyAoKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7Ci0KLSAgYnVmZmVyMSA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgKi8KLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyMSk7Ci0KLSAgR1NUX0RFQlVHICgiYWRkZWQgMXN0Iik7Ci0gIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDApOwotICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMSk7Ci0KLSAgYnVmZmVyMiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjIpOwotCi0gIEdTVF9ERUJVRyAoImFkZGVkIDJuZCIpOwotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDEpOwotCi0gIGJ1ZmZlcjMgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICAvKiB0aGUgbmV4dCBjYWxsIHRvIGdzdF9wYWRfcHVzaCB3aWxsIGVtaXQgdGhlIG92ZXJydW4gc2lnbmFsLiBUaGUgc2lnbmFsCi0gICAqIGhhbmRsZXIgcXVldWVfb3ZlcnJ1bl9saW5rX2FuZF9hY3RpdmF0ZSgpIChhYm92ZSkgaW5jcmVhc2VzIG92ZXJydW5fY291bnQsCi0gICAqIGFjdGl2YXRlcyBhbmQgbGlua3MgbXlzaW5rcGFkLiBUaGUgcXVldWUgdGFzayB0aGVuIGRlcXVldWVzIGEgYnVmZmVyIGFuZAotICAgKiBnc3RfcGFkX3B1c2goKSB3aWxsIHJldHVybi4gKi8KLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyMyk7Ci0KLSAgR1NUX0RFQlVHICgiYWRkZWQgM3JkIik7Ci0gIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDEpOwotCi0gIC8qIGxvY2sgdGhlIGNoZWNrX211dGV4IHRvIGJsb2NrIHRoZSBmaXJzdCBidWZmZXIgcHVzaGVkIHRvIG15c2lua3BhZCAqLwotICBnX211dGV4X2xvY2sgKCZjaGVja19tdXRleCk7Ci0gIC8qIG5vdyBsZXQgdGhlIHF1ZXVlIHB1c2ggYWxsIGJ1ZmZlcnMgKi8KLSAgd2hpbGUgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpIDwgMykgewotICAgIGdfY29uZF93YWl0ICgmY2hlY2tfY29uZCwgJmNoZWNrX211dGV4KTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJmNoZWNrX211dGV4KTsKLQotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKLSAgLyogbWFrZSBzdXJlIHdlIGdldCB0aGUgdW5kZXJydW4gc2lnbmFsIGJlZm9yZSB3ZSBjaGVjayB1bmRlcnJ1bl9jb3VudCAqLwotICBVTkRFUlJVTl9MT0NLICgpOwotICB3aGlsZSAodW5kZXJydW5fY291bnQgPCAyKSB7Ci0gICAgVU5ERVJSVU5fV0FJVCAoKTsKLSAgfQotICAvKiB3ZSBjYW4ndCBjaGVjayB0aGUgdW5kZXJydW5fY291bnQgaGVyZSBzYWZlbHkgYmVjYXVzZSB3aGVuIGFkZGluZyB0aGUgM3JkCi0gICAqIGJ1ZmZlciwgdGhlIHF1ZXVlIGxvY2sgaXMgcmVsZWFzZWQgdG8gZW1pdCB0aGUgb3ZlcnJ1biBzaWduYWwgYW5kIHRoZQotICAgKiBkb3duc3RyZWFtIHBhcnQgY2FuIHRoZW4gcHVzaCBhbmQgZW1wdHkgdGhlIHF1ZXVlIGFuZCBzaWduYWwgYW4gYWRkaXRpb25hbAotICAgKiB1bmRlcnJ1biAqLwotICAvKiBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh1bmRlcnJ1bl9jb3VudCwgMik7ICovCi0gIFVOREVSUlVOX1VOTE9DSyAoKTsKLQotICBidWZmZXIgPSBnX2xpc3RfbnRoIChidWZmZXJzLCAwKS0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciA9PSBidWZmZXIxKTsKLQotICBidWZmZXIgPSBnX2xpc3RfbnRoIChidWZmZXJzLCAxKS0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciA9PSBidWZmZXIyKTsKLQotICBHU1RfREVCVUcgKCJzdG9wcGluZyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogc2V0IHF1ZXVlIHNpemUgdG8gMiBidWZmZXJzCi0gKiBwdXNoIDIgYnVmZmVycwotICogY2hlY2sgb3Zlci91bmRlcnVucwotICogcHVzaCAxIG1vcmUgYnVmZmVyCi0gKiBjaGVjayBvdmVyL3VuZGVydW5zIGFnYWluCi0gKiBjaGVjayB3aGljaCBidWZmZXIgd2FzIGxlYWtlZAotICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9sZWFreV91cHN0cmVhbSkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIxOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjI7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyMzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBnX3NpZ25hbF9jb25uZWN0IChxdWV1ZSwgIm92ZXJydW4iLCBHX0NBTExCQUNLIChxdWV1ZV9vdmVycnVuKSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHF1ZXVlKSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAyLCAibGVha3kiLCAxLCBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJzdGFydGluZyIpOwotCi0gIGJsb2NrX3NyYyAoKTsKLQotICBVTkRFUlJVTl9MT0NLICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotICBVTkRFUlJVTl9XQUlUICgpOwotICBVTkRFUlJVTl9VTkxPQ0sgKCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDEpOwotCi0gIGJ1ZmZlcjEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlICovCi0gIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjEpOwotCi0gIEdTVF9ERUJVRyAoImFkZGVkIDFzdCIpOwotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDEpOwotCi0gIGJ1ZmZlcjIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIyKTsKLQotICBHU1RfREVCVUcgKCJhZGRlZCAybmQiKTsKLSAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAxKTsKLQotICBidWZmZXIzID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgLyogYnVmZmVyNCB3aWxsIGJlIGxlYWtlZCwga2VlcCBhIHJlZiBzbyByZWZjb3VudCBjYW4gYmUgY2hlY2tlZCBiZWxvdyAqLwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyMyk7Ci0gIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjMpOwotCi0gIEdTVF9ERUJVRyAoImFkZGVkIDNuZCIpOwotICAvKiBpdCBzdGlsbCB0cmlnZ2VycyBvdmVycnVuIHdoZW4gbGVha2luZyAqLwotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDEpOwotCi0gIC8qIHdhaXQgZm9yIHVuZGVycnVuIGFuZCBjaGVjayB0aGF0IHdlIGdvdCBidWZmZXIxIGFuZCBidWZmZXIyIG9ubHkgKi8KLSAgVU5ERVJSVU5fTE9DSyAoKTsKLSAgbXlzaW5rcGFkID0gc2V0dXBfc2lua19wYWQgKHF1ZXVlLCAmc2lua3RlbXBsYXRlKTsKLSAgdW5ibG9ja19zcmMgKCk7Ci0gIFVOREVSUlVOX1dBSVQgKCk7Ci0gIFVOREVSUlVOX1VOTE9DSyAoKTsKLQotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDIpOwotCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAyKTsKLQotICBidWZmZXIgPSBnX2xpc3RfbnRoIChidWZmZXJzLCAwKS0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciA9PSBidWZmZXIxKTsKLQotICBidWZmZXIgPSBnX2xpc3RfbnRoIChidWZmZXJzLCAxKS0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciA9PSBidWZmZXIyKTsKLQotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIzLCAiYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjMpOwotCi0gIEdTVF9ERUJVRyAoInN0b3BwaW5nIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBzZXQgcXVldWUgc2l6ZSB0byAyIGJ1ZmZlcnMKLSAqIHB1c2ggMiBidWZmZXJzCi0gKiBjaGVjayBvdmVyL3VuZGVydW5zCi0gKiBwdXNoIDEgbW9yZSBidWZmZXIKLSAqIGNoZWNrIG92ZXIvdW5kZXJ1bnMgYWdhaW4KLSAqIGNoZWNrIHdoaWNoIGJ1ZmZlciB3YXMgbGVha2VkCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xlYWt5X2Rvd25zdHJlYW0pCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyMTsKLSAgR3N0QnVmZmVyICpidWZmZXIyOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJvdmVycnVuIiwgR19DQUxMQkFDSyAocXVldWVfb3ZlcnJ1biksIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChxdWV1ZSksICJtYXgtc2l6ZS1idWZmZXJzIiwgMiwgImxlYWt5IiwgMiwgTlVMTCk7Ci0KLSAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKLQotICBibG9ja19zcmMgKCk7Ci0KLSAgVU5ERVJSVU5fTE9DSyAoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLSAgVU5ERVJSVU5fV0FJVCAoKTsKLSAgVU5ERVJSVU5fVU5MT0NLICgpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAxKTsKLQotICBidWZmZXIxID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG9uZSByZWZlcmVuY2UgKi8KLSAgLyogYnVmZmVyMSB3aWxsIGJlIGxlYWtlZCwga2VlcCBhIHJlZiBzbyByZWZjb3VudCBjYW4gYmUgY2hlY2tlZCBiZWxvdyAqLwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyMSk7Ci0gIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcjEpOwotCi0gIEdTVF9ERUJVRyAoImFkZGVkIDFzdCIpOwotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDEpOwotCi0gIGJ1ZmZlcjIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIyKTsKLQotICBHU1RfREVCVUcgKCJhZGRlZCAybmQiKTsKLSAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAxKTsKLQotICBidWZmZXIzID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyMyk7Ci0KLSAgR1NUX0RFQlVHICgiYWRkZWQgM3JkIik7Ci0gIC8qIGl0IHN0aWxsIHRyaWdnZXJzIG92ZXJydW4gd2hlbiBsZWFraW5nICovCi0gIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDEpOwotICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMSk7Ci0KLSAgLyogd2FpdCBmb3IgdW5kZXJydW4gYW5kIGNoZWNrIHRoYXQgd2UgZ290IGJ1ZmZlcjEgYW5kIGJ1ZmZlcjIgb25seSAqLwotICBVTkRFUlJVTl9MT0NLICgpOwotICBteXNpbmtwYWQgPSBzZXR1cF9zaW5rX3BhZCAocXVldWUsICZzaW5rdGVtcGxhdGUpOwotICB1bmJsb2NrX3NyYyAoKTsKLSAgVU5ERVJSVU5fV0FJVCAoKTsKLSAgVU5ERVJSVU5fVU5MT0NLICgpOwotCi0gIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDEpOwotICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDIpOwotCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlcjEsICJidWZmZXIiLCAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMSk7Ci0KLSAgYnVmZmVyID0gZ19saXN0X250aCAoYnVmZmVycywgMCktPmRhdGE7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgPT0gYnVmZmVyMik7Ci0KLSAgYnVmZmVyID0gZ19saXN0X250aCAoYnVmZmVycywgMSktPmRhdGE7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgPT0gYnVmZmVyMyk7Ci0KLSAgR1NUX0RFQlVHICgic3RvcHBpbmciKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHNldCBxdWV1ZSBzaXplIHRvIDYgYnVmZmVycyBhbmQgNyBzZWNvbmRzCi0gKiBwdXNoIDcgYnVmZmVycyB3aXRoIGFuZCB3aXRob3V0IGR1cmF0aW9uCi0gKiBjaGVjayBjdXJyZW50LWxldmVsLXRpbWUKLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGltZV9sZXZlbCkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBOVUxMOwotICBHc3RDbG9ja1RpbWUgdGltZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHF1ZXVlLCAib3ZlcnJ1biIsCi0gICAgICBHX0NBTExCQUNLIChxdWV1ZV9vdmVycnVuX2xpbmtfYW5kX2FjdGl2YXRlKSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHF1ZXVlKSwgIm1heC1zaXplLWJ1ZmZlcnMiLCA2LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocXVldWUpLCAibWF4LXNpemUtdGltZSIsIDcgKiBHU1RfU0VDT05ELCBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJzdGFydGluZyIpOwotCi0gIGJsb2NrX3NyYyAoKTsKLQotICBVTkRFUlJVTl9MT0NLICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotICBVTkRFUlJVTl9XQUlUICgpOwotICBVTkRFUlJVTl9VTkxPQ0sgKCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICAvKiBwdXNoIGJ1ZmZlciB3aXRob3V0IGR1cmF0aW9uICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gR1NUX1NFQ09ORDsKLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAqLwotICBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIpOwotCi0gIC8qIGxldmVsIHNob3VsZCBiZSAxIHNlY29uZHMgYmVjYXVzZSBidWZmZXIgaGFzIG5vIGR1cmF0aW9uIGFuZCBzdGFydHMgYXQgMQotICAgKiBTRUNPTkQgKHNwYXJzZSBzdHJlYW0pLiAqLwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0gIGZhaWxfaWYgKHRpbWUgIT0gR1NUX1NFQ09ORCk7Ci0KLSAgLyogc2Vjb25kIHB1c2ggc2hvdWxkIHNldCB0aGUgbGV2ZWwgdG8gMiBzZWNvbmQgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAyICogR1NUX1NFQ09ORDsKLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKLQotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0gIGZhaWxfaWYgKHRpbWUgIT0gMiAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIHRoaXJkIHB1c2ggc2hvdWxkIHNldCB0aGUgbGV2ZWwgdG8gNCBzZWNvbmRzLCB0aGUgMSBzZWNvbmQgZGlmZiB3aXRoIHRoZQotICAgKiBwcmV2aW91cyBidWZmZXIgKHdpdGhvdXQgZHVyYXRpb24pIGFuZCB0aGUgMSBzZWNvbmQgZHVyYXRpb24gb2YgdGhpcwotICAgKiBidWZmZXIuICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMyAqIEdTVF9TRUNPTkQ7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcik7Ci0KLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocXVldWUpLCAiY3VycmVudC1sZXZlbC10aW1lIiwgJnRpbWUsIE5VTEwpOwotICBmYWlsX2lmICh0aW1lICE9IDQgKiBHU1RfU0VDT05EKTsKLQotICAvKiBmb3VydGggcHVzaCBzaG91bGQgc2V0IHRoZSBsZXZlbCB0byA2IHNlY29uZHMsIHRoZSAyIHNlY29uZCBkaWZmIHdpdGggdGhlCi0gICAqIHByZXZpb3VzIGJ1ZmZlciwgc2FtZSBkdXJhdGlvbi4gKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA1ICogR1NUX1NFQ09ORDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKLQotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0gIGZhaWxfaWYgKHRpbWUgIT0gNiAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIGZpZnRoIHB1c2ggc2hvdWxkIG5vdCBhZGp1c3QgdGhlIGxldmVsLCB0aGUgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiBhcmUgdGhlCi0gICAqIHNhbWUsIG1lYW5pbmcgdGhlIHByZXZpb3VzIGJ1ZmZlciBkaWQgbm90IHJlYWxseSBoYXZlIGEgZHVyYXRpb24uICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gNSAqIEdTVF9TRUNPTkQ7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKLQotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0gIGZhaWxfaWYgKHRpbWUgIT0gNiAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIHNpeHRoIHB1c2ggc2hvdWxkIGFkanVzdCB0aGUgbGV2ZWwgd2l0aCAxIHNlY29uZCwgd2Ugbm93IGtub3cgdGhlCi0gICAqIHByZXZpb3VzIGJ1ZmZlciBhY3R1YWxseSBoYWQgYSBkdXJhdGlvbiBvZiAyIFNFQ09ORFMgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA3ICogR1NUX1NFQ09ORDsKLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKLQotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0gIGZhaWxfaWYgKHRpbWUgIT0gNyAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIGVpZ2h0aCBwdXNoIHNob3VsZCBjYXVzZSBvdmVycnVuICovCi0gIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDApOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDggKiBHU1RfU0VDT05EOwotICAvKiB0aGUgbmV4dCBjYWxsIHRvIGdzdF9wYWRfcHVzaCB3aWxsIGVtaXQgdGhlIG92ZXJydW4gc2lnbmFsLiBUaGUgc2lnbmFsCi0gICAqIGhhbmRsZXIgcXVldWVfb3ZlcnJ1bl9saW5rX2FuZF9hY3RpdmF0ZSgpIChhYm92ZSkgaW5jcmVhc2VzIG92ZXJydW5fY291bnQsCi0gICAqIGFjdGl2YXRlcyBhbmQgbGlua3MgbXlzaW5rcGFkLiBUaGUgcXVldWUgdGFzayB0aGVuIGRlcXVldWVzIGEgYnVmZmVyIGFuZAotICAgKiBnc3RfcGFkX3B1c2goKSB3aWxsIHJldHVybi4gKi8KLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKTsKLQotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKLQotICBHU1RfREVCVUcgKCJzdG9wcGluZyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGltZV9sZXZlbF90YXNrX25vdF9zdGFydGVkKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKLQotICBibG9ja19zcmMgKCk7Ci0KLSAgVU5ERVJSVU5fTE9DSyAoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLSAgVU5ERVJSVU5fV0FJVCAoKTsKLSAgVU5ERVJSVU5fVU5MT0NLICgpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgc2VnbWVudC5zdGFydCA9IDEgKiBHU1RfU0VDT05EOwotICBzZWdtZW50LnN0b3AgPSA1ICogR1NUX1NFQ09ORDsKLSAgc2VnbWVudC50aW1lID0gMDsKLSAgc2VnbWVudC5wb3NpdGlvbiA9IDEgKiBHU1RfU0VDT05EOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGV2ZW50KTsKLQotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0gIGZhaWxfaWYgKHRpbWUgIT0gMCAqIEdTVF9TRUNPTkQpOwotCi0gIHNlZ21lbnQuYmFzZSA9IDQgKiBHU1RfU0VDT05EOwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBldmVudCk7Ci0KLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocXVldWUpLCAiY3VycmVudC1sZXZlbC10aW1lIiwgJnRpbWUsIE5VTEwpOwotICBHU1RfREVCVUcgKCJ0aW1lIG5vdyAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRpbWUpKTsKLSAgZmFpbF9pZiAodGltZSAhPSA0ICogR1NUX1NFQ09ORCk7Ci0KLSAgdW5ibG9ja19zcmMgKCk7Ci0KLSAgR1NUX0RFQlVHICgic3RvcHBpbmciKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0aWNreV9ub3RfbGlua2VkKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RGbG93UmV0dXJuIGZsb3dfcmV0OwotCi0gIEdTVF9ERUJVRyAoInN0YXJ0aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChxdWV1ZSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAxLCBOVUxMKTsKLQotICBVTkRFUlJVTl9MT0NLICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotICBVTkRFUlJVTl9XQUlUICgpOwotICBVTkRFUlJVTl9VTkxPQ0sgKCk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBzZWdtZW50LnN0YXJ0ID0gMSAqIEdTVF9TRUNPTkQ7Ci0gIHNlZ21lbnQuc3RvcCA9IDUgKiBHU1RfU0VDT05EOwotICBzZWdtZW50LnRpbWUgPSAwOwotICBzZWdtZW50LnBvc2l0aW9uID0gMSAqIEdTVF9TRUNPTkQ7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLSAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZXZlbnQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotCi0gIC8qIHRoZSBmaXJzdCBmZXcgYnVmZmVycyBjYW4gcmV0dXJuIE9LIGFzIHRoZXkgYXJlIHF1ZXVlZCBhbmQgZ3N0X3F1ZXVlX2xvb3AKLSAgICogaXMgd29rZW4gdXAsIHRyaWVzIHRvIHB1c2ggYW5kIHNldHMgLT5zcmNyZXN1bHQgdG8gTk9UX0xJTktFRAotICAgKi8KLSAgZmxvd19yZXQgPSBHU1RfRkxPV19PSzsKLSAgd2hpbGUgKGZsb3dfcmV0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQpCi0gICAgZmxvd19yZXQgPSBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBnc3RfYnVmZmVyX25ldyAoKSk7Ci0KLSAgLyogc2VuZCBhIG5ldyBzdGlja3kgZXZlbnQgc28gdGhhdCBpdCB3aWxsIGJlIHB1c2hlZCBvbiB0aGUgbmV4dCBnc3RfcGFkX3B1c2gKLSAgICovCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0gIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGV2ZW50KTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLQotICAvKiBtYWtlIHN1cmUgdGhhdCBnc3RfcXVldWVfc2lua19ldmVudCBkb2Vzbid0IHJldHVybiBGQUxTRSBpZiB0aGUgcXVldWUgaXMKLSAgICogdW5saW5rZWQsIGFzIHRoYXQgd291bGQgbWFrZSBnc3RfcGFkX3B1c2ggcmV0dXJuIEVSUk9SCi0gICAqLwotICBmbG93X3JldCA9IGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGdzdF9idWZmZXJfbmV3ICgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZmxvd19yZXQsIEdTVF9GTE9XX05PVF9MSU5LRUQpOwotCi0gIEdTVF9ERUJVRyAoInN0b3BwaW5nIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0jaWYgMAotc3RhdGljIGdib29sZWFuCi1ldmVudF9lcXVhbHNfbmV3c2VnbWVudCAoR3N0RXZlbnQgKiBldmVudCwgZ2Jvb2xlYW4gdXBkYXRlLCBnZG91YmxlIHJhdGUsCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHN0YXJ0LCBnaW50NjQgc3RvcCwgZ2ludDY0IHBvc2l0aW9uKQotewotICBnYm9vbGVhbiBuc191cGRhdGU7Ci0gIGdkb3VibGUgbnNfcmF0ZSwgbnNfYXJhdGU7Ci0gIEdzdEZvcm1hdCBuc19mb3JtYXQ7Ci0gIGdpbnQ2NCBuc19zdGFydDsKLSAgZ2ludDY0IG5zX3N0b3A7Ci0gIGdpbnQ2NCBuc19wb3NpdGlvbjsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSAhPSBHU1RfRVZFTlRfU0VHTUVOVCkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGdzdF9ldmVudF9wYXJzZV9uZXdfc2VnbWVudCAoZXZlbnQsICZuc191cGRhdGUsICZuc19yYXRlLCAmbnNfYXJhdGUsCi0gICAgICAmbnNfZm9ybWF0LCAmbnNfc3RhcnQsICZuc19zdG9wLCAmbnNfcG9zaXRpb24pOwotCi0gIEdTVF9ERUJVRyAoInVwZGF0ZSAlZCwgcmF0ZSAlbGYsIGZvcm1hdCAlcywgc3RhcnQgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiLCBzdG9wICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIG5zX3VwZGF0ZSwKLSAgICAgIG5zX3JhdGUsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKG5zX2Zvcm1hdCksIEdTVF9USU1FX0FSR1MgKG5zX3N0YXJ0KSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKG5zX3N0b3ApLCBHU1RfVElNRV9BUkdTIChuc19wb3NpdGlvbikpOwotCi0gIHJldHVybiAobnNfdXBkYXRlID09IHVwZGF0ZSAmJiBuc19yYXRlID09IHJhdGUgJiYgbnNfZm9ybWF0ID09IGZvcm1hdCAmJgotICAgICAgbnNfc3RhcnQgPT0gc3RhcnQgJiYgbnNfc3RvcCA9PSBzdG9wICYmIG5zX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbmV3c2VnbWVudCkKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHc3RCdWZmZXIgKmJ1ZmZlcjE7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyMjsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAocXVldWUsICJvdmVycnVuIiwgR19DQUxMQkFDSyAocXVldWVfb3ZlcnJ1biksIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChxdWV1ZSksICJtYXgtc2l6ZS1idWZmZXJzIiwgMSwgIm1heC1zaXplLXRpbWUiLAotICAgICAgKGd1aW50NjQpIDAsICJsZWFreSIsIDIsIE5VTEwpOwotCi0gIEdTVF9ERUJVRyAoInN0YXJ0aW5nIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLSAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnQgKEZBTFNFLCAyLjAsIDEuMCwgR1NUX0ZPUk1BVF9USU1FLCAwLAotICAgICAgMiAqIEdTVF9TRUNPTkQsIDApOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBldmVudCk7Ci0KLSAgR1NUX0RFQlVHICgiYWRkZWQgMXN0IG5ld3NlZ21lbnQiKTsKLSAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnQgKEZBTFNFLCAxLjAsIDEuMCwgR1NUX0ZPUk1BVF9USU1FLCAwLAotICAgICAgMyAqIEdTVF9TRUNPTkQsIDApOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBldmVudCk7Ci0KLSAgR1NUX0RFQlVHICgiYWRkZWQgMm5kIG5ld3NlZ21lbnQiKTsKLSAgZmFpbF91bmxlc3MgKG92ZXJydW5fY291bnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmRlcnJ1bl9jb3VudCA9PSAwKTsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnQgKEZBTFNFLCAxLjAsIDEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgNCAqIEdTVF9TRUNPTkQsIDUgKiBHU1RfU0VDT05ELCA0ICogR1NUX1NFQ09ORCk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGV2ZW50KTsKLQotICBHU1RfREVCVUcgKCJhZGRlZCAzcmQgbmV3c2VnbWVudCIpOwotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOwotCi0gIGJ1ZmZlcjEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICAvKiBidWZmZXIxIHdpbGwgYmUgbGVha2VkLCBrZWVwIGEgcmVmIHNvIHJlZmNvdW50IGNhbiBiZSBjaGVja2VkIGJlbG93ICovCi0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIxKTsKLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG9uZSByZWZlcmVuY2UgKi8KLSAgZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyMSk7Ci0KLSAgR1NUX0RFQlVHICgiYWRkZWQgMXN0IGJ1ZmZlciIpOwotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHVuZGVycnVuX2NvdW50ID09IDApOwotCi0gIGJ1ZmZlcjIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICAvKiBuZXh0IHB1c2ggd2lsbCBjYXVzZSBvdmVycnVuIGFuZCBsZWFrIGFsbCBuZXdzZWdtZW50IGV2ZW50cyBhbmQgYnVmZmVyMSAqLwotICBnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIyKTsKLQotICBHU1RfREVCVUcgKCJhZGRlZCAybmQgYnVmZmVyIik7Ci0gIC8qIGl0IHN0aWxsIHRyaWdnZXJzIG92ZXJydW4gd2hlbiBsZWFraW5nICovCi0gIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDEpOwotICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMCk7Ci0KLSAgLyogd2FpdCBmb3IgdW5kZXJydW4gYW5kIGNoZWNrIHRoYXQgd2UgZ290IG9uZSBhY2N1bXVsYXRlZCBuZXdzZWdtZW50IGV2ZW50LAotICAgKiBvbmUgcmVhbCBuZXdzZWdtZW50IGV2ZW50IGFuZCBidWZmZXIyIG9ubHkgKi8KLSAgVU5ERVJSVU5fTE9DSyAoKTsKLSAgbXlzaW5rcGFkID0gc2V0dXBfc2lua19wYWQgKHF1ZXVlLCAmc2lua3RlbXBsYXRlKTsKLSAgVU5ERVJSVU5fV0FJVCAoKTsKLSAgVU5ERVJSVU5fVU5MT0NLICgpOwotCi0gIGZhaWxfdW5sZXNzIChvdmVycnVuX2NvdW50ID09IDEpOwotICBmYWlsX3VubGVzcyAodW5kZXJydW5fY291bnQgPT0gMSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGV2ZW50cykgPT0gMik7Ci0KLSAgZXZlbnQgPSBnX2xpc3RfbnRoIChldmVudHMsIDApLT5kYXRhOwotICBmYWlsX3VubGVzcyAoZXZlbnRfZXF1YWxzX25ld3NlZ21lbnQgKGV2ZW50LCBGQUxTRSwgMS4wLCBHU1RfRk9STUFUX1RJTUUsIDAsCi0gICAgICAgICAgNCAqIEdTVF9TRUNPTkQsIDApKTsKLQotICBldmVudCA9IGdfbGlzdF9udGggKGV2ZW50cywgMSktPmRhdGE7Ci0gIGZhaWxfdW5sZXNzIChldmVudF9lcXVhbHNfbmV3c2VnbWVudCAoZXZlbnQsIEZBTFNFLCAxLjAsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICA0ICogR1NUX1NFQ09ORCwgNSAqIEdTVF9TRUNPTkQsIDQgKiBHU1RfU0VDT05EKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDEpOwotCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlcjEsICJidWZmZXIiLCAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyMSk7Ci0KLSAgYnVmZmVyID0gZ19saXN0X250aCAoYnVmZmVycywgMCktPmRhdGE7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgPT0gYnVmZmVyMik7Ci0KLSAgR1NUX0RFQlVHICgic3RvcHBpbmciKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0jZW5kaWYKLQotc3RhdGljIGdwb2ludGVyCi10aHJlYWRfZnVuYyAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgaW50IGkgPSAwOwotICBmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgICBnYm9vbGVhbiBvazsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbiAoY2FwcywgRkFMU0UpOwotICAgIG9rID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChteXNyY3BhZCwgcXVlcnkpOwotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBxdWVyeSA9IE5VTEw7Ci0gICAgY2FwcyA9IE5VTEw7Ci0KLSAgICBpZiAoIW9rKQotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdib29sZWFuIHF1ZXJ5X2Z1bmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGdib29sZWFuCi1xdWVyeV9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLQotICBnX3VzbGVlcCAoMTAwMCk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9xdWVyaWVzX3doaWxlX2ZsdXNoaW5nKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdUaHJlYWQgKnRocmVhZDsKLSAgaW50IGk7Ci0KLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChxdWV1ZSwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChteXNpbmtwYWQsIHF1ZXJ5X2Z1bmMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgLyogaGFyZCB0byByZXByb2R1Y2UsIHNvIGp1c3QgcnVuIGl0IGEgZmV3IHRpbWVzIGluIGEgcm93ICovCi0gIGZvciAoaSA9IDA7IGkgPCA1MDA7ICsraSkgewotICAgIEdTVF9ERUJVRyAoInN0YXJ0aW5nIik7Ci0gICAgVU5ERVJSVU5fTE9DSyAoKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLSAgICBVTkRFUlJVTl9XQUlUICgpOwotICAgIFVOREVSUlVOX1VOTE9DSyAoKTsKLQotICAgIHRocmVhZCA9IGdfdGhyZWFkX25ldyAoImRlYWN0aXZhdGluZyB0aHJlYWQiLCB0aHJlYWRfZnVuYywgTlVMTCk7Ci0gICAgZ191c2xlZXAgKDEwMDApOwotCi0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGV2ZW50KTsKLQotICAgIGdfdGhyZWFkX2pvaW4gKHRocmVhZCk7Ci0KLSAgICBHU1RfREVCVUcgKCJzdG9wcGluZyIpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAotICAgICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICAgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdwb2ludGVyCi1wdXNoX2V2ZW50X3RocmVhZF9mdW5jIChncG9pbnRlciBkYXRhKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgZXZlbnQgPSBHU1RfRVZFTlQgKGRhdGEpOwotCi0gIEdTVF9ERUJVRyAoInB1c2hpbmcgZXZlbnQgJXAgb24gcGFkICVwIiwgZXZlbnQsIG15c3JjcGFkKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZXZlbnQpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdGF0ZV9jaGFuZ2Vfd2hlbl9mbHVzaGluZykKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHVGhyZWFkICp0aHJlYWQ7Ci0KLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChxdWV1ZSwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwgR1NUX1NUQVRFX1BBVVNFRCkgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBldmVudCk7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpOwotICB0aHJlYWQgPSBnX3RocmVhZF9uZXcgKCJzZW5kIGV2ZW50IiwgcHVzaF9ldmVudF90aHJlYWRfZnVuYywgZXZlbnQpOwotCi0gIEdTVF9ERUJVRyAoImNoYW5naW5nIHN0YXRlIHRvIFJFQURZIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLCBHU1RfU1RBVEVfUkVBRFkpID09Ci0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBHU1RfREVCVUcgKCJzdGF0ZSBjaGFuZ2VkIik7Ci0KLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwgR1NUX1NUQVRFX05VTEwpID09Ci0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RpbWVfbGV2ZWxfYnVmZmVyX2xpc3QpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLSAgR3N0QnVmZmVyTGlzdCAqYnVmZmVyX2xpc3QgPSBOVUxMOwotICBHc3RDbG9ja1RpbWUgdGltZTsKLSAgZ3VpbnQgYnVmZmVyczsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHF1ZXVlLCAib3ZlcnJ1biIsCi0gICAgICBHX0NBTExCQUNLIChxdWV1ZV9vdmVycnVuX2xpbmtfYW5kX2FjdGl2YXRlKSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHF1ZXVlKSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAxMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHF1ZXVlKSwgIm1heC1zaXplLXRpbWUiLAotICAgICAgR19HVUlOVDY0X0NPTlNUQU5UICg3MDAwKSAqIEdTVF9NU0VDT05ELCBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJzdGFydGluZyIpOwotCi0gIGJsb2NrX3NyYyAoKTsKLQotICBVTkRFUlJVTl9MT0NLICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotICBVTkRFUlJVTl9XQUlUICgpOwotICBVTkRFUlJVTl9VTkxPQ0sgKCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICAvKiBwdXNoIGJ1ZmZlciB3aXRob3V0IGR1cmF0aW9uICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMTAwMCAqIEdTVF9NU0VDT05EOwotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlICovCi0gIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcik7Ci0KLSAgLyogbGV2ZWwgc2hvdWxkIGJlIDEgc2Vjb25kcyBiZWNhdXNlIGJ1ZmZlciBoYXMgbm8gZHVyYXRpb24gYW5kIHN0YXJ0cyBhdCAxCi0gICAqIFNFQ09ORCAoc3BhcnNlIHN0cmVhbSkuICovCi0gIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHF1ZXVlKSwgImN1cnJlbnQtbGV2ZWwtdGltZSIsICZ0aW1lLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAodGltZSwgMTAwMCAqIEdTVF9NU0VDT05EKTsKLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocXVldWUpLCAiY3VycmVudC1sZXZlbC1idWZmZXJzIiwgJmJ1ZmZlcnMsIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChidWZmZXJzLCAxKTsKLQotICAvKiBzZWNvbmQgcHVzaCBzaG91bGQgc2V0IHRoZSBsZXZlbCB0byAyIHNlY29uZCAqLwotICBidWZmZXJfbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMTUwMCAqIEdTVF9NU0VDT05EOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChidWZmZXJfbGlzdCwgYnVmZmVyKTsKLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAyMDAwICogR1NUX01TRUNPTkQ7Ci0gIGdzdF9idWZmZXJfbGlzdF9hZGQgKGJ1ZmZlcl9saXN0LCBidWZmZXIpOwotICBnc3RfcGFkX3B1c2hfbGlzdCAobXlzcmNwYWQsIGJ1ZmZlcl9saXN0KTsKLQotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKHRpbWUsIDIwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHF1ZXVlKSwgImN1cnJlbnQtbGV2ZWwtYnVmZmVycyIsICZidWZmZXJzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoYnVmZmVycywgMyk7Ci0KLSAgLyogdGhpcmQgcHVzaCBzaG91bGQgc2V0IHRoZSBsZXZlbCB0byA0IHNlY29uZHMsIHRoZSAxIHNlY29uZCBkaWZmIHdpdGggdGhlCi0gICAqIHByZXZpb3VzIGJ1ZmZlciAod2l0aG91dCBkdXJhdGlvbikgYW5kIHRoZSAxIHNlY29uZCBkdXJhdGlvbiBvZiB0aGlzCi0gICAqIGJ1ZmZlci4gKi8KLSAgYnVmZmVyX2xpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbmV3ICgpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDMwMDAgKiBHU1RfTVNFQ09ORDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDUwMCAqIEdTVF9NU0VDT05EOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAoYnVmZmVyX2xpc3QsIGJ1ZmZlcik7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMzUwMCAqIEdTVF9NU0VDT05EOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gNTAwICogR1NUX01TRUNPTkQ7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChidWZmZXJfbGlzdCwgYnVmZmVyKTsKLSAgZ3N0X3BhZF9wdXNoX2xpc3QgKG15c3JjcGFkLCBidWZmZXJfbGlzdCk7Ci0KLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocXVldWUpLCAiY3VycmVudC1sZXZlbC10aW1lIiwgJnRpbWUsIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0ICh0aW1lLCA0MDAwICogR1NUX01TRUNPTkQpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiLCAmYnVmZmVycywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGJ1ZmZlcnMsIDUpOwotCi0gIC8qIGZvdXJ0aCBwdXNoIHNob3VsZCBzZXQgdGhlIGxldmVsIHRvIDYgc2Vjb25kcywgdGhlIDIgc2Vjb25kIGRpZmYgd2l0aCB0aGUKLSAgICogcHJldmlvdXMgYnVmZmVyLCBzYW1lIGR1cmF0aW9uLiAqLwotICBidWZmZXJfbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gNTAwMCAqIEdTVF9NU0VDT05EOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMTAwMCAqIEdTVF9NU0VDT05EOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAoYnVmZmVyX2xpc3QsIGJ1ZmZlcik7Ci0gIGdzdF9wYWRfcHVzaF9saXN0IChteXNyY3BhZCwgYnVmZmVyX2xpc3QpOwotCi0gIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHF1ZXVlKSwgImN1cnJlbnQtbGV2ZWwtdGltZSIsICZ0aW1lLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAodGltZSwgNjAwMCAqIEdTVF9NU0VDT05EKTsKLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocXVldWUpLCAiY3VycmVudC1sZXZlbC1idWZmZXJzIiwgJmJ1ZmZlcnMsIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChidWZmZXJzLCA2KTsKLQotICAvKiBmaWZ0aCBwdXNoIHNob3VsZCBub3QgYWRqdXN0IHRoZSBsZXZlbCwgdGhlIHRpbWVzdGFtcCBhbmQgZHVyYXRpb24gYXJlIHRoZQotICAgKiBzYW1lLCBtZWFuaW5nIHRoZSBwcmV2aW91cyBidWZmZXIgZGlkIG5vdCByZWFsbHkgaGF2ZSBhIGR1cmF0aW9uLiAqLwotICBidWZmZXJfbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gNTAwMCAqIEdTVF9NU0VDT05EOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMjUwICogR1NUX01TRUNPTkQ7Ci0gIGdzdF9idWZmZXJfbGlzdF9hZGQgKGJ1ZmZlcl9saXN0LCBidWZmZXIpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDUyNTAgKiBHU1RfTVNFQ09ORDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDI1MCAqIEdTVF9NU0VDT05EOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChidWZmZXJfbGlzdCwgYnVmZmVyKTsKLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA1NTAwICogR1NUX01TRUNPTkQ7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAyNTAgKiBHU1RfTVNFQ09ORDsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAoYnVmZmVyX2xpc3QsIGJ1ZmZlcik7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gNTc1MCAqIEdTVF9NU0VDT05EOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMjUwICogR1NUX01TRUNPTkQ7Ci0gIGdzdF9idWZmZXJfbGlzdF9hZGQgKGJ1ZmZlcl9saXN0LCBidWZmZXIpOwotICBnc3RfcGFkX3B1c2hfbGlzdCAobXlzcmNwYWQsIGJ1ZmZlcl9saXN0KTsKLQotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKHRpbWUsIDYwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHF1ZXVlKSwgImN1cnJlbnQtbGV2ZWwtYnVmZmVycyIsICZidWZmZXJzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoYnVmZmVycywgMTApOwotCi0gIC8qIHNpeHRoIHB1c2ggc2hvdWxkIGFkanVzdCB0aGUgbGV2ZWwgd2l0aCAxIHNlY29uZCwgd2Ugbm93IGtub3cgdGhlCi0gICAqIHByZXZpb3VzIGJ1ZmZlciBhY3R1YWxseSBoYWQgYSBkdXJhdGlvbiBvZiAyIFNFQ09ORFMgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA3MDAwICogR1NUX01TRUNPTkQ7Ci0gIGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcik7Ci0KLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocXVldWUpLCAiY3VycmVudC1sZXZlbC10aW1lIiwgJnRpbWUsIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0ICh0aW1lLCA3MDAwICogR1NUX01TRUNPTkQpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChxdWV1ZSksICJjdXJyZW50LWxldmVsLWJ1ZmZlcnMiLCAmYnVmZmVycywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGJ1ZmZlcnMsIDExKTsKLQotICAvKiBlaWdodGggcHVzaCBzaG91bGQgY2F1c2Ugb3ZlcnJ1biAqLwotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAwKTsKLSAgYnVmZmVyX2xpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbmV3ICgpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDgwMDAgKiBHU1RfTVNFQ09ORDsKLSAgLyogdGhlIG5leHQgY2FsbCB0byBnc3RfcGFkX3B1c2ggd2lsbCBlbWl0IHRoZSBvdmVycnVuIHNpZ25hbC4gVGhlIHNpZ25hbAotICAgKiBoYW5kbGVyIHF1ZXVlX292ZXJydW5fbGlua19hbmRfYWN0aXZhdGUoKSAoYWJvdmUpIGluY3JlYXNlcyBvdmVycnVuX2NvdW50LAotICAgKiBhY3RpdmF0ZXMgYW5kIGxpbmtzIG15c2lua3BhZC4gVGhlIHF1ZXVlIHRhc2sgdGhlbiBkZXF1ZXVlcyBhIGJ1ZmZlciBhbmQKLSAgICogZ3N0X3BhZF9wdXNoKCkgd2lsbCByZXR1cm4uICovCi0gIGdzdF9idWZmZXJfbGlzdF9hZGQgKGJ1ZmZlcl9saXN0LCBidWZmZXIpOwotICBnc3RfcGFkX3B1c2hfbGlzdCAobXlzcmNwYWQsIGJ1ZmZlcl9saXN0KTsKLQotICBmYWlsX3VubGVzcyAob3ZlcnJ1bl9jb3VudCA9PSAxKTsKLQotICBHU1RfREVCVUcgKCJzdG9wcGluZyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5pdGlhbF9ldmVudHNfbm9kZWxheSkKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdib29sZWFuIHJldDsKLQotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKHF1ZXVlLCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKG15c2lua3BhZCwgZXZlbnRfZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICBHU1RfREVCVUcgKCJzdGFydGluZyIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiZm9vL3gtYmFyIik7Ci0gIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLQotICBnX211dGV4X2xvY2sgKCZldmVudHNfbG9jayk7Ci0gIHdoaWxlIChldmVudHNfY291bnQgPCAzKSB7Ci0gICAgZ19jb25kX3dhaXQgKCZldmVudHNfY29uZCwgJmV2ZW50c19sb2NrKTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJmV2ZW50c19sb2NrKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChldmVudHMpLCAzKTsKLSAgZXZlbnQgPSBnX2xpc3RfbnRoX2RhdGEgKGV2ZW50cywgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9FVkVOVF9UWVBFIChldmVudCksIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQpOwotICBldmVudCA9IGdfbGlzdF9udGhfZGF0YSAoZXZlbnRzLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSwgR1NUX0VWRU5UX0NBUFMpOwotICBldmVudCA9IGdfbGlzdF9udGhfZGF0YSAoZXZlbnRzLCAyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSwgR1NUX0VWRU5UX1NFR01FTlQpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsIEdTVF9TVEFURV9OVUxMKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotcXVldWVfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgicXVldWUiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlICh0Y19jaGFpbiwgc2V0dXAsIGNsZWFudXApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm9uX2xlYWt5X3VuZGVycnVuKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25vbl9sZWFreV9vdmVycnVuKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xlYWt5X3Vwc3RyZWFtKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xlYWt5X2Rvd25zdHJlYW0pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGltZV9sZXZlbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90aW1lX2xldmVsX3Rhc2tfbm90X3N0YXJ0ZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcXVlcmllc193aGlsZV9mbHVzaGluZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2Vfd2hlbl9mbHVzaGluZyk7Ci0jaWYgMAotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbmV3c2VnbWVudCk7Ci0jZW5kaWYKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0aWNreV9ub3RfbGlua2VkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RpbWVfbGV2ZWxfYnVmZmVyX2xpc3QpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5pdGlhbF9ldmVudHNfbm9kZWxheSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChxdWV1ZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9xdWV1ZTIuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDg3NTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F1ZXVlMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTYzICswLDAgQEAKLS8qIEdTdHJlYW1lciB1bml0IHRlc3RzIGZvciBxdWV1ZTIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX3F1ZXVlMiAoR3N0RWxlbWVudCAqIHBpcGUsIEdzdEVsZW1lbnQgKiBpbnB1dCwgR3N0RWxlbWVudCAqIG91dHB1dCkKLXsKLSAgR3N0RWxlbWVudCAqcXVldWUyOwotICBHc3RQYWQgKnNpbmtwYWQsICpzcmNwYWQ7Ci0KLSAgcXVldWUyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUyIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChxdWV1ZTIgIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgJ3F1ZXVlMicgZWxlbWVudCIpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgcXVldWUyKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBpbnB1dCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgb3V0cHV0KTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlMiwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCwgImZhaWxlZCB0byBnZXQgcXVldWUyIHNpbmsgcGFkIik7Ci0KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGlucHV0LCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCwgImZhaWxlZCB0byBmaW5kIHNyYyBwYWQgZm9yIGlucHV0IGVsZW1lbnQiKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfUEFEX0xJTktfT0ssIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChxdWV1ZTIsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKG91dHB1dCwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCwgImZhaWxlZCB0byBmaW5kIHNpbmsgcGFkIG9mIG91dHB1dCBlbGVtZW50Iik7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1BBRF9MSU5LX09LLCBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIHJldHVybiBxdWV1ZTI7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsZV9waXBlbGluZSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZSwgKmlucHV0LCAqb3V0cHV0OwotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotCi0gIGlucHV0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5wdXQgIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgJ2Zha2VzcmMnIGVsZW1lbnQiKTsKLSAgZ19vYmplY3Rfc2V0IChpbnB1dCwgIm51bS1idWZmZXJzIiwgMjU2LCAic2l6ZXR5cGUiLCAzLCBOVUxMKTsKLQotICBvdXRwdXQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAob3V0cHV0ICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdmYWtlc2luaycgZWxlbWVudCIpOwotCi0gIHNldHVwX3F1ZXVlMiAocGlwZSwgaW5wdXQsIG91dHB1dCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLAotICAgICAgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLQotICBmYWlsX2lmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SLAotICAgICAgIkV4cGVjdGVkIEVPUyBtZXNzYWdlLCBnb3QgRVJST1IgbWVzc2FnZSIpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBHU1RfTE9HICgiR290IEVPUywgY2xlYW5pbmcgdXAiKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2ltcGxlX3BpcGVsaW5lX3JpbmdidWZmZXIpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGUsICpxdWV1ZTIsICppbnB1dCwgKm91dHB1dDsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBpbnB1dCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGlucHV0ICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdmYWtlc3JjJyBlbGVtZW50Iik7Ci0gIGdfb2JqZWN0X3NldCAoaW5wdXQsICJudW0tYnVmZmVycyIsIDI1NiwgInNpemV0eXBlIiwgMywgTlVMTCk7Ci0KLSAgb3V0cHV0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG91dHB1dCAhPSBOVUxMLCAiZmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNpbmsnIGVsZW1lbnQiKTsKLQotICBxdWV1ZTIgPSBzZXR1cF9xdWV1ZTIgKHBpcGUsIGlucHV0LCBvdXRwdXQpOwotICBnX29iamVjdF9zZXQgKHF1ZXVlMiwgInJpbmctYnVmZmVyLW1heC1zaXplIiwgKGd1aW50NjQpIDEwMjQgKiA1MCwgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLAotICAgICAgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLQotICBmYWlsX2lmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SLAotICAgICAgIkV4cGVjdGVkIEVPUyBtZXNzYWdlLCBnb3QgRVJST1IgbWVzc2FnZSIpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBHU1RfTE9HICgiR290IEVPUywgY2xlYW5pbmcgdXAiKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLWRvX3Rlc3Rfc2ltcGxlX3NodXRkb3duX3doaWxlX3J1bm5pbmcgKGd1aW50NjQgcmluZ19idWZmZXJfbWF4X3NpemUpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGUsICpxMjsKLSAgR3N0RWxlbWVudCAqaW5wdXQ7Ci0gIEdzdEVsZW1lbnQgKm91dHB1dDsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBpbnB1dCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGlucHV0ICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdmYWtlc3JjJyBlbGVtZW50Iik7Ci0gIGdfb2JqZWN0X3NldCAoaW5wdXQsICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsICJzaXpldHlwZSIsIDIsCi0gICAgICAic2l6ZW1heCIsIDEwLCBOVUxMKTsKLQotICBvdXRwdXQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAob3V0cHV0ICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlICdmYWtlc2luaycgZWxlbWVudCIpOwotCi0gIHEyID0gc2V0dXBfcXVldWUyIChwaXBlLCBpbnB1dCwgb3V0cHV0KTsKLQotICBpZiAocmluZ19idWZmZXJfbWF4X3NpemUgPiAwKSB7Ci0gICAgZ19vYmplY3Rfc2V0IChxMiwgInJpbmctYnVmZmVyLW1heC1zaXplIiwgcmluZ19idWZmZXJfbWF4X3NpemUsCi0gICAgICAgICJ0ZW1wLXRlbXBsYXRlIiwgTlVMTCwgTlVMTCk7Ci0gIH0KLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIC8qIHdhaXQgdW50aWwgcGlwZWxpbmUgaXMgdXAgYW5kIHJ1bm5pbmcgKi8KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLAotICAgICAgR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FLCAtMSk7Ci0gIGZhaWxfaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IsICJHb3QgRVJST1IgbWVzc2FnZSIpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBHU1RfTE9HICgicGlwZWxpbmUgaXMgcnVubmluZyBub3ciKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAvIDIwKTsKLQotICAvKiBub3cgc2h1dCBkb3duIG9ubHkgdGhlIHNpbmssIHNvIHRoZSBxdWV1ZSBnZXRzIGEgd3Jvbmctc3RhdGUgZmxvdyByZXR1cm4gKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChvdXRwdXQsIEdTVF9TVEFURV9OVUxMKTsKLSAgR1NUX0xPRyAoIkNsZWFuaW5nIHVwIik7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGVfc2h1dGRvd25fd2hpbGVfcnVubmluZykKLXsKLSAgaW50IGk7Ci0KLSAgLyogcnVuIGEgY291cGxlIG9mIGl0ZXJhdGlvbnMsIGdpdmVzIGhpZ2hlciBjaGFuY2Ugb2YgZGlmZmVyZW50IGNvZGUgcGF0aHMKLSAgICogYmVpbmcgZXhlY3V0ZWQgYXQgdGltZSB0aGUgZmx1c2ggaXMgZGV0ZWN0ZWQgKGVzcC4gdXNlZnVsIHRvIG1ha2Ugc3VyZQotICAgKiB0aGluZ3MgYXJlIGNsZWFuZWQgdXAgcHJvcGVybHkgd2hlbiBydW5uaW5nIHVuZGVyIHZhbGdyaW5kKSAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIGRvX3Rlc3Rfc2ltcGxlX3NodXRkb3duX3doaWxlX3J1bm5pbmcgKDApOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2ltcGxlX3NodXRkb3duX3doaWxlX3J1bm5pbmdfcmluZ2J1ZmZlcikKLXsKLSAgaW50IGk7Ci0KLSAgLyogcnVuIGEgY291cGxlIG9mIGl0ZXJhdGlvbnMsIGdpdmVzIGhpZ2hlciBjaGFuY2Ugb2YgZGlmZmVyZW50IGNvZGUgcGF0aHMKLSAgICogYmVpbmcgZXhlY3V0ZWQgYXQgdGltZSB0aGUgZmx1c2ggaXMgZGV0ZWN0ZWQgKGVzcC4gdXNlZnVsIHRvIG1ha2Ugc3VyZQotICAgKiB0aGluZ3MgYXJlIGNsZWFuZWQgdXAgcHJvcGVybHkgd2hlbiBydW5uaW5nIHVuZGVyIHZhbGdyaW5kKSAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIGRvX3Rlc3Rfc2ltcGxlX3NodXRkb3duX3doaWxlX3J1bm5pbmcgKDEwMjQgKiAxMDI0KTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsZV9jcmVhdGVfZGVzdHJveSkKLXsKLSAgR3N0RWxlbWVudCAqcXVldWUyOwotCi0gIHF1ZXVlMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlMiIsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChxdWV1ZTIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXVldWUyX2R1bW15cGFkX3F1ZXJ5IChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpmaWx0ZXIsICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZmaWx0ZXIpOwotICAgICAgY2FwcyA9IChmaWx0ZXIgPyBnc3RfY2Fwc19yZWYgKGZpbHRlcikgOiBnc3RfY2Fwc19uZXdfYW55ICgpKTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBjYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChzaW5rcGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotcGFkX3B1c2hfZGF0YWJsb2NrX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0UGFkICpwYWQgPSBkYXRhOwotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgODAgKiAxMDAwLCBOVUxMKTsKLSAgZ3N0X3BhZF9wdXNoIChwYWQsIGJ1Zik7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotYmxvY2tfcHJvYmUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotI2RlZmluZSBDSEVDS19GT1JfQlVGRkVSSU5HX01TRyhQSVBFTElORSwgRVhQRUNURURfUEVSQykgXAotICBHX1NUTVRfU1RBUlQgeyBcCi0gICAgZ2ludCBidWZfcGVyYzsgXAotICAgIEdzdE1lc3NhZ2UgKm1zZzsgXAotICAgIEdTVF9MT0cgKCJ3YWl0aW5nIGZvciAlZCUlIGJ1ZmZlcmluZyBtZXNzYWdlIiwgKEVYUEVDVEVEX1BFUkMpKTsgXAotICAgIG1zZyA9IGdzdF9idXNfcG9sbCAoR1NUX0VMRU1FTlRfQlVTIChQSVBFTElORSksIFwKLSAgICAgICAgR1NUX01FU1NBR0VfQlVGRkVSSU5HIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsgXAotICAgIGZhaWxfaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IsIFwKLSAgICAgICAgIkV4cGVjdGVkIEJVRkZFUklORyBtZXNzYWdlLCBnb3QgRVJST1IgbWVzc2FnZSIpOyBcCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nIChtc2csICZidWZfcGVyYyk7IFwKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsgXAotICAgIGZhaWxfdW5sZXNzIChidWZfcGVyYyA9PSAoRVhQRUNURURfUEVSQyksIFwKLSAgICAgICAgIkdvdCBpbmNvcnJlY3QgcGVyY2VudGFnZTogJWQlJSBleHBlY3RlZDogJWQlJSIsIGJ1Zl9wZXJjLCBcCi0gICAgICAgIChFWFBFQ1RFRF9QRVJDKSk7IFwKLSAgfSBHX1NUTVRfRU5ECi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3dhdGVybWFya19hbmRfZmlsbF9sZXZlbCkKLXsKLSAgLyogVGhpcyB0ZXN0IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZpbGwgbGV2ZWwgYW5kCi0gICAqIHRoZSBsb3cvaGlnaCB3YXRlcm1hcmtzLiBJdCBhbHNvIGNoZWNrcyBpZiB0aGUKLSAgICogbG93L2hpZ2gtcGVyY2VudCBhbmQgbG93L2hpZ2gtd2F0ZXJtYXJrIHByb3BlcnRpZXMKLSAgICogYXJlIGNvdXBsZWQgdG9nZXRoZXIgcHJvcGVybHkuICovCi0KLSAgR3N0RWxlbWVudCAqcGlwZTsKLSAgR3N0RWxlbWVudCAqcXVldWUyLCAqZmFrZXNpbms7Ci0gIEdzdFBhZCAqaW5wdXRwYWQ7Ci0gIEdzdFBhZCAqcXVldWUyX3NpbmtwYWQ7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIGdpbnQgbG93X3BlcmMsIGhpZ2hfcGVyYzsKLQotCi0gIC8qIFNldHVwIHRlc3QgcGlwZWxpbmUgd2l0aCBvbmUgbXVsdGlxdWV1ZSBhbmQgb25lIGZha2VzaW5rICovCi0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBxdWV1ZTIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZTIiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHF1ZXVlMiAhPSBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBxdWV1ZTIpOwotCi0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGZha2VzaW5rICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIGZha2VzaW5rKTsKLQotICAvKiBCbG9jayBmYWtlc2luayBzaW5rcGFkIGZsb3cgdG8gZW5zdXJlIHRoZSBxdWV1ZSBpc24ndCBlbXB0aWVkCi0gICAqIGJ5IHRoZSBwcmVyb2xsaW5nIHNpbmsgKi8KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChmYWtlc2luaywgInNpbmsiKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNpbmtwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSywgYmxvY2tfcHJvYmUsIE5VTEwsCi0gICAgICBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChxdWV1ZTIsCi0gICAgICAidXNlLWJ1ZmZlcmluZyIsIChnYm9vbGVhbikgVFJVRSwKLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludCkgMTAwMCAqIDEwMDAsCi0gICAgICAibWF4LXNpemUtYnVmZmVycyIsIChndWludCkgMCwKLSAgICAgICJtYXgtc2l6ZS10aW1lIiwgKGd1aW50NjQpIDAsCi0gICAgICAibG93LXdhdGVybWFyayIsIChnZG91YmxlKSAwLjAxLCAiaGlnaC13YXRlcm1hcmsiLCAoZ2RvdWJsZSkgMC4xMCwgTlVMTCk7Ci0KLSAgZ19vYmplY3RfZ2V0IChxdWV1ZTIsICJsb3ctcGVyY2VudCIsICZsb3dfcGVyYywKLSAgICAgICJoaWdoLXBlcmNlbnQiLCAmaGlnaF9wZXJjLCBOVUxMKTsKLQotICAvKiBDaGVjayB0aGF0IGxvdy9oaWdoLXdhdGVybWFyayBhbmQgbG93L2hpZ2gtcGVyY2VudCBhcmUKLSAgICogY291cGxlZCBwcm9wZXJseS4gKGxvdy9oaWdoLXBlcmNlbnQgYXJlIGRlcHJlY2F0ZWQgYW5kCi0gICAqIGV4aXN0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4pICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGxvd19wZXJjLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoaGlnaF9wZXJjLCAxMCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgaW5wdXRwYWQgPSBnc3RfcGFkX25ldyAoImR1bW15c3JjIiwgR1NUX1BBRF9TUkMpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoaW5wdXRwYWQsIHF1ZXVlMl9kdW1teXBhZF9xdWVyeSk7Ci0KLSAgcXVldWUyX3NpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUyLCAic2luayIpOwotICBmYWlsX3VubGVzcyAocXVldWUyX3NpbmtwYWQgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKGlucHV0cGFkLCBxdWV1ZTJfc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0cGFkLCBUUlVFKTsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGlucHV0cGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoaW5wdXRwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChxdWV1ZTJfc2lua3BhZCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHF1ZXVlMiwgZmFrZXNpbmspKTsKLQotICAvKiBTdGFydCBwaXBlbGluZSBpbiBwYXVzZWQgc3RhdGUgdG8gZW5zdXJlIHRoZSBzaW5rIHJlbWFpbnMKLSAgICogaW4gcHJlcm9sbCBtb2RlIGFuZCBibG9ja3MgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICAvKiBXaGVuIHRoZSB1c2UtYnVmZmVyaW5nIHByb3BlcnR5IGlzIHNldCB0byBUUlVFLCBhIGJ1ZmZlcmluZwotICAgKiBtZXNzYWdlIGlzIHBvc3RlZC4gU2luY2UgdGhlIHF1ZXVlIGlzIGVtcHR5IGF0IHRoYXQgcG9pbnQsCi0gICAqIHRoZSBidWZmZXJpbmcgbWVzc2FnZSBjb250YWlucyBhIHZhbHVlIG9mIDAlLiAqLwotICBDSEVDS19GT1JfQlVGRkVSSU5HX01TRyAocGlwZSwgMCk7Ci0KLSAgLyogRmVlZCBkYXRhLiBxdWV1ZSB3aWxsIGJlIGZpbGxlZCB0byA4MCUgKGJlY2F1c2UgaXQgcHVzaGVzIDgwMDAwIGJ5dGVzKSwKLSAgICogd2hpY2ggaXMgYmVsb3cgdGhlIGhpZ2gtdGhyZXNob2xkLCBwcm92b2tpbmcgYSBidWZmZXJpbmcgbWVzc2FnZS4gKi8KLSAgdGhyZWFkID0gZ190aHJlYWRfbmV3ICgicHVzaDEiLCBwYWRfcHVzaF9kYXRhYmxvY2tfdGhyZWFkLCBpbnB1dHBhZCk7Ci0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZCk7Ci0KLSAgLyogQ2hlY2sgZm9yIHRoZSBidWZmZXJpbmcgbWVzc2FnZTsgaXQgc2hvdWxkIGluZGljYXRlIDgwJSBmaWxsIGxldmVsCi0gICAqIChOb3RlIHRoYXQgdGhlIHBlcmNlbnRhZ2UgZnJvbSB0aGUgbWVzc2FnZSBpcyBub3JtYWxpemVkKSAqLwotICBDSEVDS19GT1JfQlVGRkVSSU5HX01TRyAocGlwZSwgODApOwotCi0gIC8qIEluY3JlYXNlIHRoZSBidWZmZXIgc2l6ZSBhbmQgbG93ZXIgdGhlIHdhdGVybWFya3MgdG8gdGVzdAotICAgKiBpZiA8MSUgd2F0ZXJtYXJrcyBhcmUgc3VwcG9ydGVkLiAqLwotICBnX29iamVjdF9zZXQgKHF1ZXVlMiwKLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludCkgMjAgKiAxMDAwICogMTAwMCwKLSAgICAgICJsb3ctd2F0ZXJtYXJrIiwgKGdkb3VibGUpIDAuMDAwMSwgImhpZ2gtd2F0ZXJtYXJrIiwgKGdkb3VibGUpIDAuMDA1LAotICAgICAgTlVMTCk7Ci0KLSAgLyogRmlyc3QgYnVmZmVyaW5nIG1lc3NhZ2UgaXMgcG9zdGVkIGFmdGVyIHRoZSBtYXgtc2l6ZS1ieXRlcyBsaW1pdAotICAgKiBpcyBzZXQgdG8gMjAwMDAwMDAgYnl0ZXMgJiB0aGUgbG93LXdhdGVybWFyayBpcyBzZXQuIFNpbmNlIHRoZQotICAgKiBxdWV1ZSBjb250YWlucyA4MDAwMCBieXRlcywgYW5kIHRoZSBoaWdoIHdhdGVybWFyayBzdGlsbCBpcwotICAgKiAwLjEgYXQgdGhpcyBwb2ludCwgYW5kIHRoZSBidWZmZXIgbGV2ZWwgODAwMDAgLyAyMDAwMDAwMCA9IDAuMDA0IGlzCi0gICAqIG5vcm1hbGl6ZWQgYnkgMC4xOiAwLjAwNCAvIDAuMSA9PiBidWZmZXJpbmcgcGVyY2VudGFnZSA0JS4gKi8KLSAgQ0hFQ0tfRk9SX0JVRkZFUklOR19NU0cgKHBpcGUsIDQpOwotICAvKiBTZWNvbmQgYnVmZmVyaW5nIG1lc3NhZ2UgaXMgcG9zdGVkIGFmdGVyIHRoZSBoaWdoLXdhdGVybWFyayBsaW1pdAotICAgKiBpcyBzZXQgdG8gMC4wMDUuIFRoaXMgdGltZSwgdGhlIGJ1ZmZlciBsZXZlbCBpcyBub3JtYWxpemVkIHRoaXMgd2F5OgotICAgKiAwLjAwNCAvIDAuMDA1ID0+IGJ1ZmZlcmluZyBwZXJjZW50YWdlIDgwJS4gKi8KLSAgQ0hFQ0tfRk9SX0JVRkZFUklOR19NU0cgKHBpcGUsIDgwKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdwb2ludGVyCi1wdXNoX2J1ZmZlciAoR3N0UGFkICogc2lua3BhZCkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxICogMTAyNCk7Ci0KLSAgZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmlsbGVkX3JlYWQpCi17Ci0gIEdzdEVsZW1lbnQgKnF1ZXVlMjsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLSAgR1RocmVhZCAqdGhyZWFkOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgcXVldWUyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUyIiwgTlVMTCk7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUyLCAic2luayIpOwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUyLCAic3JjIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChxdWV1ZTIsICJyaW5nLWJ1ZmZlci1tYXgtc2l6ZSIsIChndWludDY0KSA1ICogMTAyNCwKLSAgICAgICJ1c2UtYnVmZmVyaW5nIiwgRkFMU0UsCi0gICAgICAibWF4LXNpemUtYnVmZmVycyIsIChndWludCkgMCwgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludCkgNCAqIDEwMjQsIE5VTEwpOwotCi0gIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoc3JjcGFkLCBHU1RfUEFEX01PREVfUFVMTCwgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUyLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgLyogZmlsbCB1cCB0aGUgYnVmZmVyICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCAqIDEwMjQpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgdGhyZWFkID0KLSAgICAgIGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCAoR1RocmVhZEZ1bmMpIHB1c2hfYnVmZmVyLCBzaW5rcGFkLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHRocmVhZCAhPSBOVUxMKTsKLQotICBidWZmZXIgPSBOVUxMOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9nZXRfcmFuZ2UgKHNyY3BhZCwgMTAyNCwgNCAqIDEwMjQsCi0gICAgICAgICAgJmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDQgKiAxMDI0KTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlMiwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWJsb2NrX2NhbGxiYWNrIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BlcmNlbnRfb3ZlcmZsb3cpCi17Ci0gIEdzdEVsZW1lbnQgKnF1ZXVlMjsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLSAgZ3Vsb25nIGJsb2NrX3Byb2JlOwotICBndWludDY0IGk7Ci0gIGd1aW50NjQgY3VycmVudF9sZXZlbF90aW1lOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgcXVldWUyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUyIiwgTlVMTCk7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUyLCAic2luayIpOwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUyLCAic3JjIik7Ci0KLSAgYmxvY2tfcHJvYmUgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwKLSAgICAgIGJsb2NrX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKHF1ZXVlMiwgInVzZS1idWZmZXJpbmciLCBUUlVFLAotICAgICAgInVzZS1yYXRlLWVzdGltYXRlIiwgRkFMU0UsCi0gICAgICAibWF4LXNpemUtYnVmZmVycyIsIDAsCi0gICAgICAibWF4LXNpemUtdGltZSIsIDIgKiBHU1RfU0VDT05ELCAibWF4LXNpemUtYnl0ZXMiLCAwLCBOVUxMKTsKLQotICBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHNyY3BhZCwgR1NUX1BBRF9NT0RFX1BVU0gsIFRSVUUpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlMiwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIHNlZ21lbnQuc3RhcnQgPSAwOwotICBzZWdtZW50LnRpbWUgPSAwOwotICBzZWdtZW50LnBvc2l0aW9uID0gMDsKLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIC8qIHB1c2ggMiBzZWNvbmRzIG9mIGRhdGEgd2l0aCB2YWxpZCBidXQgZXhjZXNzaXZlbHkgaGlnaCB0aW1lc3RhbXBzICovCi0gIGZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7Ci0gICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0KTsKLSAgICBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9Ci0gICAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMTg0NDY3NDQwNzE3MDk1NTE2MTYpICsgaSAqIChHU1RfU0VDT05EIC8gMTApOwotICAgIEdTVF9CVUZGRVJfRFRTIChidWZmZXIpID0KLSAgICAgICAgR19HVUlOVDY0X0NPTlNUQU5UICgxODQ0Njc0NDA3MTcwOTU1MTYxNikgKyBpICogKEdTVF9TRUNPTkQgLyAxMCk7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IChHU1RfU0VDT05EIC8gMTApOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2NoYWluIChzaW5rcGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgfQotCi0gIGdfb2JqZWN0X2dldCAocXVldWUyLCAiY3VycmVudC1sZXZlbC10aW1lIiwgJmN1cnJlbnRfbGV2ZWxfdGltZSwgTlVMTCk7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyY3BhZCwgYmxvY2tfcHJvYmUpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUyLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHF1ZXVlMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc21hbGxfcmluZ19idWZmZXIpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICpxdWV1ZTI7Ci0gIGNvbnN0IGdjaGFyICpkZXNjOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIC8qIGJ1ZmZlciB0b28gc21hbGwgdG8gc2VlayB1c2VkIHRvIGNyYXNoLCB0ZXN0IGZvciByZWdyZXNzaW9uICovCi0gIGRlc2MgPSAiZmFrZXNyYyBzaXpldHlwZT0yIHNpemVtYXg9NDA5NiBudW0tYnVmZmVycz0xMDAgZGF0YXJhdGU9MTAwMCAhICIKLSAgICAgICJxdWV1ZTIgcmluZy1idWZmZXItbWF4LXNpemU9MTAwMCBuYW1lPXEyICEgZmFrZXNpbmsgc3luYz10cnVlIjsKLQotICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKGRlc2MsIE5VTEwpOwotICBmYWlsX2lmIChwaXBlbGluZSA9PSBOVUxMKTsKLQotICBxdWV1ZTIgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJxMiIpOwotICBmYWlsX2lmIChxdWV1ZTIgPT0gTlVMTCk7Ci0KLSAgLyogYnJpbmcgdGhlIHBpcGVsaW5lIHRvIFBMQVlJTkcsIHRoZW4gc3RhcnQgc3dpdGNoaW5nICovCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF9pZiAoYnVzID09IE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIC8qIFdhaXQgZm9yIHRoZSBwaXBlbGluZSB0byBoaXQgcGxheWluZyAqLwotICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAvKiBub3cgd2FpdCBmb3IgY29tcGxldGlvbiBvciBlcnJvciAqLwotICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLSAgZmFpbF9pZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUiwKLSAgICAgICJFeHBlY3RlZCBFT1MgbWVzc2FnZSwgZ290IEVSUk9SIG1lc3NhZ2UiKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChxdWV1ZTIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXF1ZXVlMl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJxdWV1ZTIiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2ltcGxlX2NyZWF0ZV9kZXN0cm95KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsZV9waXBlbGluZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfcGlwZWxpbmVfcmluZ2J1ZmZlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfc2h1dGRvd25fd2hpbGVfcnVubmluZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfc2h1dGRvd25fd2hpbGVfcnVubmluZ19yaW5nYnVmZmVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3dhdGVybWFya19hbmRfZmlsbF9sZXZlbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9maWxsZWRfcmVhZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wZXJjZW50X292ZXJmbG93KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NtYWxsX3JpbmdfYnVmZmVyKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHF1ZXVlMikKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9zZWxlY3Rvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzMyMGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NlbGVjdG9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogVW5pdCB0ZXN0IGZvciBzZWxlY3RvciBwbHVnaW4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbi4gKGNvbnRhY3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4pCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jZGVmaW5lIE5VTV9TRUxFQ1RPUl9QQURTIDQKLSNkZWZpbmUgTlVNX0lOUFVUX0JVRkZFUlMgNCAgICAgLy8gYnVmZmVycyB0byBzZW5kIHBlciBlYWNoIHNlbGVjdG9yIHBhZAotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLS8qIERhdGEgcHJvYmUgY2IgdG8gZHJvcCBldmVyeXRoaW5nIGJ1dCBjb3VudCBidWZmZXJzIGFuZCBldmVudHMgKi8KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcHJvYmVfY2IgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnaW50IGNvdW50ID0gMDsKLSAgY29uc3QgZ2NoYXIgKmNvdW50X3R5cGUgPSBOVUxMOwotICBHc3RNaW5pT2JqZWN0ICpvYmogPSBHU1RfUEFEX1BST0JFX0lORk9fREFUQSAoaW5mbyk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImdvdCBkYXRhIik7Ci0KLSAgaWYgKEdTVF9JU19CVUZGRVIgKG9iaikpIHsKLSAgICBjb3VudF90eXBlID0gImJ1ZmZlcl9jb3VudCI7Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChvYmopKSB7Ci0gICAgY291bnRfdHlwZSA9ICJldmVudF9jb3VudCI7Ci0gIH0gZWxzZSB7Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gIH0KLQotICAvKiBpbmNyZW1lbnQgYW5kIHN0b3JlIGNvdW50ICovCi0gIGNvdW50ID0gR1BPSU5URVJfVE9fSU5UIChnX29iamVjdF9nZXRfZGF0YSAoR19PQkpFQ1QgKHBhZCksIGNvdW50X3R5cGUpKTsKLSAgY291bnQrKzsKLSAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChwYWQpLCBjb3VudF90eXBlLCBHSU5UX1RPX1BPSU5URVIgKGNvdW50KSk7Ci0KLSAgLyogZHJvcCBldmVyeSBidWZmZXIgKi8KLSAgcmV0dXJuIEdTVF9JU19CVUZGRVIgKG9iaikgPyBHU1RfUEFEX1BST0JFX0RST1AgOiBHU1RfUEFEX1BST0JFX1BBU1M7Ci19Ci0KLS8qIENyZWF0ZSBhbmQgbGluayBvdXRwdXQgcGFkOiBzZWxlY3RvcjpzcmMlZCAhIG91dHB1dF9wYWQgKi8KLXN0YXRpYyBHc3RQYWQgKgotc2V0dXBfb3V0cHV0X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdG1wbCkKLXsKLSAgR3N0UGFkICpzcmNwYWQgPSBOVUxMLCAqb3V0cHV0X3BhZCA9IE5VTEw7Ci0gIGd1bG9uZyBwcm9iZV9pZCA9IDA7Ci0KLSAgaWYgKHRtcGwgPT0gTlVMTCkKLSAgICB0bXBsID0gJnNpbmt0ZW1wbGF0ZTsKLQotICAvKiBjcmVhdGUgb3V0cHV0X3BhZCAqLwotICBvdXRwdXRfcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKHRtcGwsICJzaW5rIik7Ci0gIGZhaWxfaWYgKG91dHB1dF9wYWQgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYSBvdXRwdXRfcGFkIik7Ci0KLSAgLyogYWRkIHByb2JlICovCi0gIHByb2JlX2lkID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChvdXRwdXRfcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9CT1RILAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIHByb2JlX2NiLCBOVUxMLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChvdXRwdXRfcGFkKSwgInByb2JlX2lkIiwKLSAgICAgIEdJTlRfVE9fUE9JTlRFUiAocHJvYmVfaWQpKTsKLQotICAvKiByZXF1ZXN0IHNyYyBwYWQgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChlbGVtZW50LCAic3JjXyV1Iik7Ci0gIGZhaWxfaWYgKHNyY3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzb3VyY2UgcGFkIGZyb20gJXMiLAotICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotCi0gIC8qIGxpbmsgcGFkcyBhbmQgYWN0aXZhdGUgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBvdXRwdXRfcGFkKSA9PSBHU1RfUEFEX0xJTktfT0ssCi0gICAgICAiQ291bGQgbm90IGxpbmsgJXMgc291cmNlIGFuZCBvdXRwdXQgcGFkIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAob3V0cHV0X3BhZCwgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob3V0cHV0X3BhZCwgInNldCB1cCAlIiBHU1RfUFRSX0ZPUk1BVCAiICEgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBzcmNwYWQsIG91dHB1dF9wYWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyY3BhZCwgInNyY3BhZCIsIDEpOwotCi0gIHJldHVybiBvdXRwdXRfcGFkOwotfQotCi0vKiBDbGVhbiB1cCBvdXRwdXQvaW5wdXQgcGFkIGFuZCByZXNwZWN0aXZlIHNlbGVjdG9yIHJlcXVlc3QgcGFkICovCi1zdGF0aWMgdm9pZAotY2xlYW51cF9wYWQgKEdzdFBhZCAqIHBhZCwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdFBhZCAqc2VscGFkID0gTlVMTDsKLSAgZ3VpbnQgcHJvYmVfaWQgPSAwOwotCi0gIGZhaWxfaWYgKHBhZCA9PSBOVUxMLCAicGFkIGRvZXNuJ3QgZXhpc3QiKTsKLQotICAvKiByZW1vdmUgcHJvYmUgaWYgbmVjZXNzYXJ5ICovCi0gIHByb2JlX2lkID0gR1BPSU5URVJfVE9fSU5UIChnX29iamVjdF9nZXRfZGF0YSAoR19PQkpFQ1QgKHBhZCksICJwcm9iZV9pZCIpKTsKLSAgaWYgKHByb2JlX2lkKQotICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIHByb2JlX2lkKTsKLQotICAvKiB1bmxpbmsgKi8KLSAgc2VscGFkID0gZ3N0X3BhZF9nZXRfcGVlciAocGFkKTsKLSAgaWYgKEdTVF9QQURfRElSRUNUSU9OIChzZWxwYWQpID09IEdTVF9QQURfU1JDKSB7Ci0gICAgZ3N0X3BhZF91bmxpbmsgKHNlbHBhZCwgcGFkKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfcGFkX3VubGluayAocGFkLCBzZWxwYWQpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiY2xlYW4gdXAgJSIgR1NUX1BUUl9GT1JNQVQgIiBhbmQgICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgc2VscGFkLCBwYWQpOwotCi0gIC8qIGNsZWFudXAgdGhlIHBhZCAqLwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwYWQsICJwYWQiLCAxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICAvKiBjbGVhbnVwIHNlbGVjdG9yIHBhZCwgcmVmZmVkIGJ5IHRoaXMgZnVuY3Rpb24gKF9nZXRfcGVlcikgYW5kIGNyZWF0b3IgKi8KLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoZWxlbWVudCwgc2VscGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2VscGFkKTsKLX0KLQotLyogRHVwbGljYXRlIGFuZCBwdXNoIGdpdmVuIGJ1ZmZlciBtYW55IHRpbWVzIHRvIGFsbCBpbnB1dF9wYWRzICovCi1zdGF0aWMgdm9pZAotcHVzaF9pbnB1dF9idWZmZXJzIChHTGlzdCAqIGlucHV0X3BhZHMsIEdzdEJ1ZmZlciAqIGJ1ZiwgZ2ludCBudW1fYnVmZmVycykKLXsKLSAgR3N0QnVmZmVyICpidWZfaW4gPSBOVUxMOwotICBHTGlzdCAqbCA9IGlucHV0X3BhZHM7Ci0gIEdzdFBhZCAqaW5wdXRfcGFkOwotICBnaW50IGkgPSAwOwotCi0gIHdoaWxlIChsICE9IE5VTEwpIHsKLSAgICBpbnB1dF9wYWQgPSBsLT5kYXRhOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGlucHV0X3BhZCwgInB1c2hpbmcgJWQgYnVmZmVycyB0byAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgbnVtX2J1ZmZlcnMsIGlucHV0X3BhZCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyBpKyspIHsKLSAgICAgIGJ1Zl9pbiA9IGdzdF9idWZmZXJfY29weSAoYnVmKTsKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKGlucHV0X3BhZCwgYnVmX2luKSA9PSBHU1RfRkxPV19PSywKLSAgICAgICAgICAicHVzaGluZyBidWZmZXIgZmFpbGVkIik7Ci0gICAgfQotICAgIGwgPSBnX2xpc3RfbmV4dCAobCk7Ci0gIH0KLX0KLQotLyogQ2hlY2sgdGhhdCByZWNlaXZlZCBidWZmZXJzIGNvdW50IG1hdGNoIHRvIGV4cGVjdGVkIGJ1ZmZlcnMgKi8KLXN0YXRpYyB2b2lkCi1jb3VudF9vdXRwdXRfYnVmZmVycyAoR0xpc3QgKiBvdXRwdXRfcGFkcywgZ2ludCBleHBlY3RlZF9idWZmZXJzKQotewotICBnaW50IGNvdW50ID0gMDsKLSAgR0xpc3QgKmwgPSBvdXRwdXRfcGFkczsKLSAgR3N0UGFkICpvdXRwdXRfcGFkID0gTlVMTDsKLQotICB3aGlsZSAobCAhPSBOVUxMKSB7Ci0gICAgb3V0cHV0X3BhZCA9IGwtPmRhdGE7Ci0gICAgY291bnQgPQotICAgICAgICBHUE9JTlRFUl9UT19JTlQgKGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAob3V0cHV0X3BhZCksCi0gICAgICAgICAgICAiYnVmZmVyX2NvdW50IikpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG91dHB1dF9wYWQsICJyZWNlaXZlZCAlZCBidWZmZXJzIiwgY291bnQpOwotICAgIGZhaWxfdW5sZXNzIChjb3VudCA9PSBleHBlY3RlZF9idWZmZXJzLAotICAgICAgICAicmVjZWl2ZWQvZXhwZWN0ZWQgYnVmZmVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggJWQvJWQiLCBjb3VudCwKLSAgICAgICAgZXhwZWN0ZWRfYnVmZmVycyk7Ci0gICAgY291bnQgPQotICAgICAgICBHUE9JTlRFUl9UT19JTlQgKGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAob3V0cHV0X3BhZCksCi0gICAgICAgICAgICAiZXZlbnRfY291bnQiKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAob3V0cHV0X3BhZCwgInJlY2VpdmVkICVkIGV2ZW50cyIsIGNvdW50KTsKLSAgICBsID0gZ19saXN0X25leHQgKGwpOwotICB9Ci19Ci0KLS8qIFNldCBzZWxlY3RvciBhY3RpdmUgcGFkICovCi1zdGF0aWMgdm9pZAotc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtLCBHc3RQYWQgKiBzZWxwYWQpCi17Ci0gIGdjaGFyICpwYWRuYW1lID0gTlVMTDsKLQotICBpZiAoc2VscGFkKSB7Ci0gICAgcGFkbmFtZSA9IGdzdF9wYWRfZ2V0X25hbWUgKHNlbHBhZCk7Ci0gIH0KLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChlbGVtKSwgImFjdGl2ZS1wYWQiLCBzZWxwYWQsIE5VTEwpOwotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtLCAiYWN0aXZhdGVkIHNlbGVjdG9yIHBhZDogJXMiLCBHU1RfU1RSX05VTEwgKHBhZG5hbWUpKTsKLSAgZ19mcmVlIChwYWRuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLXB1c2hfbmV3c2VnbWVudF9ldmVudHMgKEdMaXN0ICogaW5wdXRfcGFkcykKLXsKLSAgR3N0U2VnbWVudCBzZWc7Ci0gIEdMaXN0ICpsOwotCi0gIHNlZy5mbGFncyA9IEdTVF9TRUdNRU5UX0ZMQUdfTk9ORTsKLSAgc2VnLnJhdGUgPSBzZWcuYXBwbGllZF9yYXRlID0gMS4wOwotICBzZWcuZm9ybWF0ID0gR1NUX0ZPUk1BVF9CWVRFUzsKLSAgc2VnLmJhc2UgPSAwOwotICBzZWcuc3RhcnQgPSAwOwotICBzZWcuc3RvcCA9IC0xOwotICBzZWcudGltZSA9IDA7Ci0gIHNlZy5wb3NpdGlvbiA9IDA7Ci0gIHNlZy5kdXJhdGlvbiA9IC0xOwotCi0gIGZvciAobCA9IGlucHV0X3BhZHM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0UGFkICpwYWQgPSBsLT5kYXRhOwotCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnKSk7Ci0gIH0KLX0KLQotLyogUHVzaCBidWZmZXJzIGFuZCBzd2l0Y2ggZm9yIGVhY2ggc2VsZWN0b3IgcGFkICovCi1zdGF0aWMgdm9pZAotcHVzaF9zd2l0Y2hlZF9idWZmZXJzIChHTGlzdCAqIGlucHV0X3BhZHMsCi0gICAgR3N0RWxlbWVudCAqIGVsZW0sIEdMaXN0ICogcGVlcl9wYWRzLCBnaW50IG51bV9idWZmZXJzKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIEdMaXN0ICpsID0gcGVlcl9wYWRzOwotICBHc3RQYWQgKnNlbHBhZCA9IE5VTEw7Ci0KLSAgLyogc2V0dXAgZHVtbXkgYnVmZmVyICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMSk7Ci0KLSAgd2hpbGUgKGwgIT0gTlVMTCkgewotICAgIC8qIHNldCBzZWxlY3RvciBwYWQgKi8KLSAgICBzZWxwYWQgPSBnc3RfcGFkX2dldF9wZWVyIChHU1RfUEFEIChsLT5kYXRhKSk7Ci0gICAgc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKGVsZW0sIHNlbHBhZCk7Ci0gICAgaWYgKHNlbHBhZCkgewotICAgICAgZ3N0X29iamVjdF91bnJlZiAoc2VscGFkKTsKLSAgICB9Ci0gICAgLyogcHVzaCBidWZmZXJzICovCi0gICAgcHVzaF9pbnB1dF9idWZmZXJzIChpbnB1dF9wYWRzLCBidWYsIG51bV9idWZmZXJzKTsKLSAgICAvKiBzd2l0Y2ggdG8gbmV4dCBzZWxlY3RvciBwYWQgKi8KLSAgICBsID0gZ19saXN0X25leHQgKGwpOwotICB9Ci0KLSAgLyogY2xlYW51cCBidWZmZXIgKi8KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLX0KLQotLyogQ3JlYXRlIG91dHB1dC1zZWxlY3RvciB3aXRoIGdpdmVuIG51bWJlciBvZiBzcmMgcGFkcyBhbmQgc3dpdGNoCi0gICBnaXZlbiBudW1iZXIgb2YgaW5wdXQgYnVmZmVycyB0byBlYWNoIHNyYyBwYWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1ydW5fb3V0cHV0X3NlbGVjdG9yX2J1ZmZlcl9jb3VudCAoZ2ludCBudW1fb3V0cHV0X3BhZHMsCi0gICAgZ2ludCBudW1fYnVmZmVyc19wZXJfb3V0cHV0KQotewotICAvKiBzZXR1cCBpbnB1dF9wYWQgISBzZWxlY3RvciAhIG91dHB1dF9wYWRzICovCi0gIGdpbnQgaSA9IDA7Ci0gIEdMaXN0ICpvdXRwdXRfcGFkcyA9IE5VTEwsICppbnB1dF9wYWRzID0gTlVMTDsKLSAgR3N0RWxlbWVudCAqc2VsID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJvdXRwdXQtc2VsZWN0b3IiKTsKLSAgR3N0UGFkICppbnB1dF9wYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoc2VsLCAmc3JjdGVtcGxhdGUpOwotCi0gIGlucHV0X3BhZHMgPSBnX2xpc3RfYXBwZW5kIChpbnB1dF9wYWRzLCBpbnB1dF9wYWQpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0X3BhZCwgVFJVRSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW1fb3V0cHV0X3BhZHM7IGkrKykgewotICAgIG91dHB1dF9wYWRzID0gZ19saXN0X2FwcGVuZCAob3V0cHV0X3BhZHMsIHNldHVwX291dHB1dF9wYWQgKHNlbCwgTlVMTCkpOwotICB9Ci0KLSAgLyogcnVuIHRoZSB0ZXN0ICovCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlbCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotICBwdXNoX25ld3NlZ21lbnRfZXZlbnRzIChpbnB1dF9wYWRzKTsKLSAgcHVzaF9zd2l0Y2hlZF9idWZmZXJzIChpbnB1dF9wYWRzLCBzZWwsIG91dHB1dF9wYWRzLCBudW1fYnVmZmVyc19wZXJfb3V0cHV0KTsKLSAgY291bnRfb3V0cHV0X2J1ZmZlcnMgKG91dHB1dF9wYWRzLCBudW1fYnVmZmVyc19wZXJfb3V0cHV0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLQotICAvKiBjbGVhbnVwIGlucHV0X3BhZCwgc2VsZWN0b3IgYW5kIG91dHB1dF9wYWRzICovCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoaW5wdXRfcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChzZWwpOwotICBnX2xpc3RfZm9yZWFjaCAob3V0cHV0X3BhZHMsIChHRnVuYykgY2xlYW51cF9wYWQsIHNlbCk7Ci0gIGdfbGlzdF9mcmVlIChvdXRwdXRfcGFkcyk7Ci0gIGdfbGlzdF9mcmVlIChpbnB1dF9wYWRzKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKHNlbCk7Ci19Ci0KLS8qIENyZWF0ZSBhbmQgbGluayBpbnB1dCBwYWQ6IGlucHV0X3BhZCAhIHNlbGVjdG9yOnNpbmslZCAqLwotc3RhdGljIEdzdFBhZCAqCi1zZXR1cF9pbnB1dF9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RQYWQgKnNpbmtwYWQgPSBOVUxMLCAqaW5wdXRfcGFkID0gTlVMTDsKLQotICAvKiBjcmVhdGUgaW5wdXRfcGFkICovCi0gIGlucHV0X3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsICJzcmMiKTsKLSAgZmFpbF9pZiAoaW5wdXRfcGFkID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGEgaW5wdXRfcGFkIik7Ci0KLSAgLyogcmVxdWVzdCBzaW5rIHBhZCAqLwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChlbGVtZW50LCAic2lua18ldSIpOwotICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHNpbmsgcGFkIGZyb20gJXMiLAotICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotCi0gIC8qIGxpbmsgcGFkcyBhbmQgYWN0aXZhdGUgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoaW5wdXRfcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0ssCi0gICAgICAiQ291bGQgbm90IGxpbmsgaW5wdXRfcGFkIGFuZCAlcyBzaW5rIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoaW5wdXRfcGFkLCBUUlVFKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChpbnB1dF9wYWQsICJzZXQgdXAgJSIgR1NUX1BUUl9GT1JNQVQgIiAhICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgaW5wdXRfcGFkLCBzaW5rcGFkKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAxKTsKLQotICByZXR1cm4gaW5wdXRfcGFkOwotfQotCi0vKiBDcmVhdGUgaW5wdXQtc2VsZWN0b3Igd2l0aCBnaXZlbiBudW1iZXIgb2Ygc2luayBwYWRzIGFuZCBzd2l0Y2gKLSAgIGdpdmVuIG51bWJlciBvZiBpbnB1dCBidWZmZXJzIHRvIGVhY2ggc2luayBwYWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1ydW5faW5wdXRfc2VsZWN0b3JfYnVmZmVyX2NvdW50IChnaW50IG51bV9pbnB1dF9wYWRzLAotICAgIGdpbnQgbnVtX2J1ZmZlcnNfcGVyX2lucHV0KQotewotICAvKiBzZXQgdXAgaW5wdXRfcGFkcyAhIHNlbGVjdG9yICEgb3V0cHV0X3BhZCAqLwotICBnaW50IGkgPSAwLCBwcm9iZV9pZCA9IDA7Ci0gIEdMaXN0ICppbnB1dF9wYWRzID0gTlVMTCwgKm91dHB1dF9wYWRzID0gTlVMTDsKLSAgR3N0RWxlbWVudCAqc2VsID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJpbnB1dC1zZWxlY3RvciIpOwotICBHc3RQYWQgKm91dHB1dF9wYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKHNlbCwgJnNpbmt0ZW1wbGF0ZSk7Ci0KLSAgb3V0cHV0X3BhZHMgPSBnX2xpc3RfYXBwZW5kIChvdXRwdXRfcGFkcywgb3V0cHV0X3BhZCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAob3V0cHV0X3BhZCwgVFJVRSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW1faW5wdXRfcGFkczsgaSsrKSB7Ci0gICAgaW5wdXRfcGFkcyA9IGdfbGlzdF9hcHBlbmQgKGlucHV0X3BhZHMsIHNldHVwX2lucHV0X3BhZCAoc2VsKSk7Ci0gIH0KLSAgLyogYWRkIHByb2JlICovCi0gIHByb2JlX2lkID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChvdXRwdXRfcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9CT1RILAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIHByb2JlX2NiLCBOVUxMLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChvdXRwdXRfcGFkKSwgInByb2JlX2lkIiwKLSAgICAgIEdJTlRfVE9fUE9JTlRFUiAocHJvYmVfaWQpKTsKLQotICAvKiBydW4gdGhlIHRlc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0gIHB1c2hfbmV3c2VnbWVudF9ldmVudHMgKGlucHV0X3BhZHMpOwotICBwdXNoX3N3aXRjaGVkX2J1ZmZlcnMgKGlucHV0X3BhZHMsIHNlbCwgaW5wdXRfcGFkcywgbnVtX2J1ZmZlcnNfcGVyX2lucHV0KTsKLSAgY291bnRfb3V0cHV0X2J1ZmZlcnMgKG91dHB1dF9wYWRzLCAobnVtX2lucHV0X3BhZHMgKiBudW1fYnVmZmVyc19wZXJfaW5wdXQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAob3V0cHV0X3BhZCwgcHJvYmVfaWQpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG91dHB1dF9wYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChzZWwpOwotICBHU1RfREVCVUcgKCJzZXR0aW5nIHNlbGVjdG9yIHBhZCB0byBOVUxMIik7Ci0gIHNlbGVjdG9yX3NldF9hY3RpdmVfcGFkIChzZWwsIE5VTEwpOyAgLy8gdW5yZWYgaW5wdXQtc2VsZWN0b3IgYWN0aXZlIHBhZAotICBnX2xpc3RfZm9yZWFjaCAoaW5wdXRfcGFkcywgKEdGdW5jKSBjbGVhbnVwX3BhZCwgc2VsKTsKLSAgZ19saXN0X2ZyZWUgKGlucHV0X3BhZHMpOwotICBnX2xpc3RfZnJlZSAob3V0cHV0X3BhZHMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoc2VsKTsKLX0KLQotLyogUHVzaCBidWZmZXJzIHRvIGlucHV0IHBhZCBhbmQgY2hlY2sgdGhlIAotICAgYW1vdW50IG9mIGJ1ZmZlcnMgYXJyaXZlZCB0byBvdXRwdXQgcGFkcyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb3V0cHV0X3NlbGVjdG9yX2J1ZmZlcl9jb3VudCkKLXsKLSAgZ2ludCBpLCBqOwotCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fU0VMRUNUT1JfUEFEUzsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IE5VTV9JTlBVVF9CVUZGRVJTOyBqKyspIHsKLSAgICAgIHJ1bl9vdXRwdXRfc2VsZWN0b3JfYnVmZmVyX2NvdW50IChpLCBqKTsKLSAgICB9Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBQdXNoIGJ1ZmZlcnMgdG8gaW5wdXQgcGFkcyBhbmQgY2hlY2sgdGhlIAotICAgYW1vdW50IG9mIGJ1ZmZlcnMgYXJyaXZlZCB0byBvdXRwdXQgcGFkICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnB1dF9zZWxlY3Rvcl9idWZmZXJfY291bnQpCi17Ci0gIGdpbnQgaSwgajsKLQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX1NFTEVDVE9SX1BBRFM7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCBOVU1fSU5QVVRfQlVGRkVSUzsgaisrKSB7Ci0gICAgICBydW5faW5wdXRfc2VsZWN0b3JfYnVmZmVyX2NvdW50IChpLCBqKTsKLSAgICB9Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqc2VsZWN0b3I7Ci1zdGF0aWMgR3N0UGFkICpvdXRwdXRfcGFkOwotc3RhdGljIEdzdFBhZCAqc3RyZWFtMV9wYWQ7Ci1zdGF0aWMgR3N0UGFkICpzdHJlYW0yX3BhZDsKLQotc3RhdGljIGdib29sZWFuIGVvc19yZWNlaXZlZDsKLXN0YXRpYyBndWxvbmcgZW9zX3Byb2JlOwotc3RhdGljIEdNdXRleCBlb3NfcHJvYmVfbG9jazsKLXN0YXRpYyBHQ29uZCBlb3NfcHJvYmVfY29uZDsKLQotZW51bSBJbnB1dFNlbGVjdG9yUmVzdWx0Ci17Ci0gIElOUFVUX1NFTEVDVE9SX0ZPUldBUkQsCi0gIElOUFVUX1NFTEVDVE9SX0RST1AKLX07Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZW9zX3B1c2hlZF9wcm9iZSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1ZGF0YSkKLXsKLSAgZ19tdXRleF9sb2NrICgmZW9zX3Byb2JlX2xvY2spOwotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGluZm8tPmRhdGEpID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICBlb3NfcmVjZWl2ZWQgPSBUUlVFOwotICAgIGdfY29uZF9icm9hZGNhc3QgKCZlb3NfcHJvYmVfY29uZCk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZlb3NfcHJvYmVfbG9jayk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9pbnB1dF9zZWxlY3Rvcl93aXRoXzJfc3RyZWFtcyAoZ2ludCBhY3RpdmVfc3RyZWFtKQotewotICBlb3NfcmVjZWl2ZWQgPSBGQUxTRTsKLSAgZ19tdXRleF9pbml0ICgmZW9zX3Byb2JlX2xvY2spOwotICBnX2NvbmRfaW5pdCAoJmVvc19wcm9iZV9jb25kKTsKLQotICBzZWxlY3RvciA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiaW5wdXQtc2VsZWN0b3IiKTsKLSAgb3V0cHV0X3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoc2VsZWN0b3IsICZzaW5rdGVtcGxhdGUpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAob3V0cHV0X3BhZCwgVFJVRSk7Ci0gIHN0cmVhbTFfcGFkID0gc2V0dXBfaW5wdXRfcGFkIChzZWxlY3Rvcik7Ci0gIHN0cmVhbTJfcGFkID0gc2V0dXBfaW5wdXRfcGFkIChzZWxlY3Rvcik7Ci0KLSAgaWYgKGFjdGl2ZV9zdHJlYW0gPT0gMSkgewotICAgIGdfb2JqZWN0X3NldCAoc2VsZWN0b3IsICJhY3RpdmUtcGFkIiwgR1NUX1BBRF9QRUVSIChzdHJlYW0xX3BhZCksIE5VTEwpOwotICB9IGVsc2UgewotICAgIGdfb2JqZWN0X3NldCAoc2VsZWN0b3IsICJhY3RpdmUtcGFkIiwgR1NUX1BBRF9QRUVSIChzdHJlYW0yX3BhZCksIE5VTEwpOwotICB9Ci0KLSAgZW9zX3Byb2JlID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChvdXRwdXRfcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwKLSAgICAgIGVvc19wdXNoZWRfcHJvYmUsIE5VTEwsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlbGVjdG9yLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50c193aXRoX3N0cmVhbV9pZCAoc3RyZWFtMV9wYWQsIHNlbGVjdG9yLCBOVUxMLAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCAic3RyZWFtLTEtaWQiKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50c193aXRoX3N0cmVhbV9pZCAoc3RyZWFtMl9wYWQsIHNlbGVjdG9yLCBOVUxMLAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCAic3RyZWFtLTItaWQiKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlYXJkb3duX2lucHV0X3NlbGVjdG9yX3dpdGhfMl9zdHJlYW1zICh2b2lkKQotewotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzZWxlY3RvciwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKG91dHB1dF9wYWQsIGVvc19wcm9iZSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChvdXRwdXRfcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoc2VsZWN0b3IpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoc2VsZWN0b3IpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0xX3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHN0cmVhbTJfcGFkKTsKLQotICBnX211dGV4X2NsZWFyICgmZW9zX3Byb2JlX2xvY2spOwotICBnX2NvbmRfY2xlYXIgKCZlb3NfcHJvYmVfY29uZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnB1dF9zZWxlY3Rvcl9wdXNoX2J1ZmZlciAoZ2ludCBzdHJlYW0sIGVudW0gSW5wdXRTZWxlY3RvclJlc3VsdCByZXMpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RQYWQgKnBhZCA9IHN0cmVhbSA9PSAxID8gc3RyZWFtMV9wYWQgOiBzdHJlYW0yX3BhZDsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcnMgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHBhZCwgYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgaWYgKHJlcyA9PSBJTlBVVF9TRUxFQ1RPUl9EUk9QKSB7Ci0gICAgZmFpbF91bmxlc3MgKGJ1ZmZlcnMgPT0gTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgZmFpbF91bmxlc3MgKGJ1ZmZlcnMgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGJ1ZmZlcnMtPmRhdGEgPT0gYnVmKTsKLSAgICBnX2xpc3RfZnJlZV9mdWxsIChidWZmZXJzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICAgIGJ1ZmZlcnMgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotaW5wdXRfc2VsZWN0b3JfZG9fcHVzaF9lb3MgKEdzdFBhZCAqIHBhZCkKLXsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnB1dF9zZWxlY3Rvcl9jaGVja19lb3MgKGdpbnQgcHJlc2VudCkKLXsKLSAgR3N0RXZlbnQgKmVvczsKLQotICBlb3MgPSBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQgKG91dHB1dF9wYWQsIEdTVF9FVkVOVF9FT1MsIDApOwotICBpZiAocHJlc2VudCkgewotICAgIGZhaWxfdW5sZXNzIChlb3MgIT0gTlVMTCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChlb3MpOwotICB9IGVsc2UgewotICAgIGZhaWxfdW5sZXNzIChlb3MgPT0gTlVMTCk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWlucHV0X3NlbGVjdG9yX3B1c2hfZW9zIChnaW50IHN0cmVhbSwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBHc3RQYWQgKnBhZCA9IHN0cmVhbSA9PSAxID8gc3RyZWFtMV9wYWQgOiBzdHJlYW0yX3BhZDsKLQotICBpZiAoYWN0aXZlKSB7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICB9IGVsc2UgewotICAgIC8qIFRoZSBub24tYWN0aXZlIHBhZHMgd2lsbCBibG9jayB3aGVuIHJlY2V2aW5nIGVvcywgc28gd2UgbmVlZCB0byBkbyBpdAotICAgICAqIGZyb20gYSBzZXBhcmF0ZSB0aHJlYWQuIFRoaXMgbWFrZXMgdGhpcyB0ZXN0IHJhY3ksIGJ1dCBpdCBzaG91bGQgb25seQotICAgICAqIGNhdXNlIGZhbHNlIHBvc2l0aXZlcywgbm90IGZhbHNlIG5lZ2F0aXZlcyAqLwotICAgIEdUaHJlYWQgKnQgPSBnX3RocmVhZF9uZXcgKCJzZWxlY3Rvci10ZXN0LXB1c2gtZW9zIiwKLSAgICAgICAgKEdUaHJlYWRGdW5jKSBpbnB1dF9zZWxlY3Rvcl9kb19wdXNoX2VvcywgcGFkKTsKLQotICAgIC8qIFNsZWVwIGhhbGYgYSBzZWNvbmQgdG8gYWxsb3cgdGhlIG90aGVyIHRocmVhZCB0byBleGVjdXRlLCB0aGlzIGlzIG5vdAotICAgICAqIGEgZGVmaW5pdGl2ZSBzb2x1dGlvbiBidXQgdGhlcmUgaXMgbm8gd2F5IHRvIGtub3cgd2hlbiB0aGUKLSAgICAgKiBFT1MgaGFzIHJlYWNoZWQgaW5wdXQtc2VsZWN0b3IgYW5kIGJsb2NrZWQgdGhlcmUsIHNvIHRoaXMgaXMganVzdAotICAgICAqIHRvIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgb2YgdGhpcyB0ZXN0IGJlaW5nIHJhY3kgKGZhbHNlIHBvc2l0aXZlcykKLSAgICAgKi8KLSAgICBnX3VzbGVlcCAoMC41ICogR19VU0VDX1BFUl9TRUMpOwotICAgIGdfdGhyZWFkX3VucmVmICh0KTsKLSAgfQotCi0gIGlucHV0X3NlbGVjdG9yX2NoZWNrX2VvcyAoYWN0aXZlKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5wdXRfc2VsZWN0b3JfZW1wdHlfc3RyZWFtKQotewotICBzZXR1cF9pbnB1dF9zZWxlY3Rvcl93aXRoXzJfc3RyZWFtcyAoMik7Ci0KLSAgLyogc3RyZWFtMSBpcyB0aGUgZW1wdHkgc3RyZWFtLCBzdHJlYW0yIGhhcyBkYXRhICovCi0KLSAgLyogZW1wdHkgc3RyZWFtIGlzIGp1c3QgYW4gRU9TIGFuZCBpdCBzaG91bGQgbm90IGJlIGZvcndhcmRlZCAqLwotICBpbnB1dF9zZWxlY3Rvcl9wdXNoX2VvcyAoMSwgRkFMU0UpOwotCi0gIGlucHV0X3NlbGVjdG9yX3B1c2hfYnVmZmVyICgyLCBJTlBVVF9TRUxFQ1RPUl9GT1JXQVJEKTsKLSAgaW5wdXRfc2VsZWN0b3JfcHVzaF9lb3MgKDIsIFRSVUUpOwotCi0gIHRlYXJkb3duX2lucHV0X3NlbGVjdG9yX3dpdGhfMl9zdHJlYW1zICgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5wdXRfc2VsZWN0b3Jfc2hvcnRlcl9zdHJlYW0pCi17Ci0gIHNldHVwX2lucHV0X3NlbGVjdG9yX3dpdGhfMl9zdHJlYW1zICgyKTsKLQotICAvKiBzdHJlYW0xIGlzIHNob3J0ZXIgdGhhbiBzdHJlYW0yICovCi0KLSAgaW5wdXRfc2VsZWN0b3JfcHVzaF9idWZmZXIgKDIsIElOUFVUX1NFTEVDVE9SX0ZPUldBUkQpOwotICBpbnB1dF9zZWxlY3Rvcl9wdXNoX2J1ZmZlciAoMSwgSU5QVVRfU0VMRUNUT1JfRFJPUCk7Ci0gIGlucHV0X3NlbGVjdG9yX3B1c2hfYnVmZmVyICgyLCBJTlBVVF9TRUxFQ1RPUl9GT1JXQVJEKTsKLSAgaW5wdXRfc2VsZWN0b3JfcHVzaF9idWZmZXIgKDIsIElOUFVUX1NFTEVDVE9SX0ZPUldBUkQpOwotCi0gIC8qIEVPUyBmcm9tIGluYWN0aXZlIHN0cmVhbSBzaG91bGQgbm90IGdvIHRocm91Z2ggKi8KLSAgaW5wdXRfc2VsZWN0b3JfcHVzaF9lb3MgKDEsIEZBTFNFKTsKLQotICAvKiBidWZmZXJzIGZyb20gYWN0aXZlIHN0cmVhbSBjYW4gc3RpbGwgZmxvdyAqLwotICBpbnB1dF9zZWxlY3Rvcl9wdXNoX2J1ZmZlciAoMiwgSU5QVVRfU0VMRUNUT1JfRk9SV0FSRCk7Ci0KLSAgLyogRU9TIGZyb20gYWN0aXZlIHN0cmVhbSBzaG91bGQgZ28gdGhyb3VnaCAqLwotICBpbnB1dF9zZWxlY3Rvcl9wdXNoX2VvcyAoMiwgVFJVRSk7Ci0KLSAgdGVhcmRvd25faW5wdXRfc2VsZWN0b3Jfd2l0aF8yX3N0cmVhbXMgKCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnB1dF9zZWxlY3Rvcl9zd2l0Y2hfdG9fZW9zX3N0cmVhbSkKLXsKLSAgc2V0dXBfaW5wdXRfc2VsZWN0b3Jfd2l0aF8yX3N0cmVhbXMgKDIpOwotCi0gIC8qIHN0cmVhbTEgcmVjZWl2ZXMgZW9zIGJlZm9yZSBzdHJlYW0yIGFuZCB0aGVuIHdlIHN3aXRjaCB0byBpdCAqLwotCi0gIGlucHV0X3NlbGVjdG9yX3B1c2hfYnVmZmVyICgyLCBJTlBVVF9TRUxFQ1RPUl9GT1JXQVJEKTsKLSAgaW5wdXRfc2VsZWN0b3JfcHVzaF9idWZmZXIgKDEsIElOUFVUX1NFTEVDVE9SX0RST1ApOwotICBpbnB1dF9zZWxlY3Rvcl9wdXNoX2J1ZmZlciAoMiwgSU5QVVRfU0VMRUNUT1JfRk9SV0FSRCk7Ci0gIGlucHV0X3NlbGVjdG9yX3B1c2hfYnVmZmVyICgyLCBJTlBVVF9TRUxFQ1RPUl9GT1JXQVJEKTsKLSAgaW5wdXRfc2VsZWN0b3JfcHVzaF9idWZmZXIgKDEsIElOUFVUX1NFTEVDVE9SX0RST1ApOwotCi0gIC8qIEVPUyBmcm9tIGluYWN0aXZlIHN0cmVhbSBzaG91bGQgbm90IGdvIHRocm91Z2ggKi8KLSAgaW5wdXRfc2VsZWN0b3JfcHVzaF9lb3MgKDEsIEZBTFNFKTsKLQotICAvKiBidWZmZXJzIGZyb20gYWN0aXZlIHN0cmVhbSBjYW4gc3RpbGwgZmxvdyAqLwotICBpbnB1dF9zZWxlY3Rvcl9wdXNoX2J1ZmZlciAoMiwgSU5QVVRfU0VMRUNUT1JfRk9SV0FSRCk7Ci0gIGlucHV0X3NlbGVjdG9yX3B1c2hfYnVmZmVyICgyLCBJTlBVVF9TRUxFQ1RPUl9GT1JXQVJEKTsKLSAgaW5wdXRfc2VsZWN0b3JfcHVzaF9idWZmZXIgKDIsIElOUFVUX1NFTEVDVE9SX0ZPUldBUkQpOwotCi0gIC8qIG5vdyBzd2l0Y2ggdG8gc3RyZWFtMSAqLwotICBnX29iamVjdF9zZXQgKHNlbGVjdG9yLCAiYWN0aXZlLXBhZCIsIEdTVF9QQURfUEVFUiAoc3RyZWFtMV9wYWQpLCBOVUxMKTsKLQotICAvKiB3YWl0IGZvciBlb3MgKGl0IHJ1bnMgZnJvbSBhIHNlcGFyYXRlIHRocmVhZCkgKi8KLSAgZ19tdXRleF9sb2NrICgmZW9zX3Byb2JlX2xvY2spOwotICB3aGlsZSAoIWVvc19yZWNlaXZlZCkgewotICAgIGdfY29uZF93YWl0ICgmZW9zX3Byb2JlX2NvbmQsICZlb3NfcHJvYmVfbG9jayk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZlb3NfcHJvYmVfbG9jayk7Ci0KLSAgdGVhcmRvd25faW5wdXRfc2VsZWN0b3Jfd2l0aF8yX3N0cmVhbXMgKCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9vdXRwdXRfc2VsZWN0b3Jfbm9fc3JjcGFkX25lZ290aWF0aW9uKQotewotICBHc3RFbGVtZW50ICpzZWw7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFBhZCAqcGFkOwotICBnaW50IGk7Ci0KLSAgc2VsID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgib3V0cHV0LXNlbGVjdG9yIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzZWwgIT0gTlVMTCk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNlbCwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzZWwsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBmb3IgKGkgPSAwOyBpIDw9IDI7IGkrKykgewotCi0gICAgLyogcmVnYXJkbGVzcyBvZiBwYWQtbmVnb3RpYXRpb24tbW9kZSwgZ2V0Y2FwcyBzaG91bGQgcmV0dXJuIEFOWSBhbmQKLSAgICAgKiBzZXRjYXBzIHNob3VsZCBhY2NlcHQgYW55IGNhcHMgd2hlbiB0aGVyZSBhcmUgbm8gc3JjcGFkcyAqLwotICAgIGdfb2JqZWN0X3NldCAoc2VsLCAicGFkLW5lZ290aWF0aW9uLW1vZGUiLCBpLCBOVUxMKTsKLQotICAgIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHBhZCwgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykpOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJteW1lZGlhL215Y2FwcyIpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChwYWQsIGNhcHMpKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzZWwsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzZWwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR3N0RWxlbWVudCAqc2VsOwotR3N0UGFkICppbnB1dF9wYWQ7Ci1HTGlzdCAqb3V0cHV0X3BhZHMgPSBOVUxMOyAgICAgIC8qIGxpc3Qgb2Ygc2lua3BhZHMgbGlua2VkIHRvIG91dHB1dC1zZWxlY3RvciAqLwotI2RlZmluZSBPVVRQVVRfU0VMRUNUT1JfTlVNX1BBRFMgMgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RtcGxfbmVnb19hID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiZm9ybWF0L2FiYzsgZm9ybWF0L3h5eiIpKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdG1wbF9uZWdvX2IgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJmb3JtYXQvYWJjIikpOwotCi1zdGF0aWMgdm9pZAotc2V0dXBfb3V0cHV0X3NlbGVjdG9yICh2b2lkKQotewotICBzZWwgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoIm91dHB1dC1zZWxlY3RvciIpOwotICBpbnB1dF9wYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoc2VsLCAmc3JjdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0X3BhZCwgVFJVRSk7Ci0KLSAgb3V0cHV0X3BhZHMgPSBnX2xpc3RfYXBwZW5kIChvdXRwdXRfcGFkcywgc2V0dXBfb3V0cHV0X3BhZCAoc2VsLAotICAgICAgICAgICZzaW5rdG1wbF9uZWdvX2EpKTsKLSAgb3V0cHV0X3BhZHMgPSBnX2xpc3RfYXBwZW5kIChvdXRwdXRfcGFkcywgc2V0dXBfb3V0cHV0X3BhZCAoc2VsLAotICAgICAgICAgICZzaW5rdG1wbF9uZWdvX2IpKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlYXJkb3duX291dHB1dF9zZWxlY3RvciAodm9pZCkKLXsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChpbnB1dF9wYWQsIEZBTFNFKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaW5wdXRfcGFkKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHNlbCk7Ci0gIGdfbGlzdF9mb3JlYWNoIChvdXRwdXRfcGFkcywgKEdGdW5jKSBjbGVhbnVwX3BhZCwgc2VsKTsKLSAgZ19saXN0X2ZyZWUgKG91dHB1dF9wYWRzKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKHNlbCk7Ci0gIG91dHB1dF9wYWRzID0gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb3V0cHV0X3NlbGVjdG9yX2dldGNhcHNfbm9uZSkKLXsKLSAgR0xpc3QgKndhbGtlcjsKLQotICAvKiBzZXQgcGFkIG5lZ290aWF0aW9uIG1vZGUgdG8gbm9uZSAqLwotICBnX29iamVjdF9zZXQgKHNlbCwgInBhZC1uZWdvdGlhdGlvbi1tb2RlIiwgMCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZm9yICh3YWxrZXIgPSBvdXRwdXRfcGFkczsgd2Fsa2VyOyB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKSkgewotICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgR3N0UGFkICpwYWQ7Ci0KLSAgICBwYWQgPSBnc3RfcGFkX2dldF9wZWVyICgoR3N0UGFkICopIHdhbGtlci0+ZGF0YSk7Ci0KLSAgICBnX29iamVjdF9zZXQgKHNlbCwgImFjdGl2ZS1wYWQiLCBwYWQsIE5VTEwpOwotCi0gICAgY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChpbnB1dF9wYWQsIE5VTEwpOwotCi0gICAgLyogaW4gJ25vbmUnIG1vZGUsIHRoZSBnZXRjYXBzIHJldHVybnMgdGhlIHRlbXBsYXRlLCB3aGljaCBpcyBBTlkgKi8KLSAgICBnX2Fzc2VydCAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzZWwsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotCi19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0Y2Fwc19hbGwpCi17Ci0gIEdMaXN0ICp3YWxrZXI7Ci0gIEdzdENhcHMgKmV4cGVjdGVkOwotCi0gIC8qIHNldCBwYWQgbmVnb3RpYXRpb24gbW9kZSB0byAnYWxsJyAqLwotICBnX29iamVjdF9zZXQgKHNlbCwgInBhZC1uZWdvdGlhdGlvbi1tb2RlIiwgMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgLyogaW4gJ2FsbCcgbW9kZSwgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgc3JjcGFkIGNhcHMgc2hvdWxkIGJlIHJldHVybmVkIG9uCi0gICAqIHRoZSBzaW5rcGFkJ3MgZ2V0Y2FwcyAqLwotICBleHBlY3RlZCA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJmb3JtYXQvYWJjIik7Ci0KLSAgZm9yICh3YWxrZXIgPSBvdXRwdXRfcGFkczsgd2Fsa2VyOyB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKSkgewotICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgR3N0UGFkICpwYWQ7Ci0KLSAgICBwYWQgPSBnc3RfcGFkX2dldF9wZWVyICgoR3N0UGFkICopIHdhbGtlci0+ZGF0YSk7Ci0KLSAgICBnX29iamVjdF9zZXQgKHNlbCwgImFjdGl2ZS1wYWQiLCBwYWQsIE5VTEwpOwotCi0gICAgY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChpbnB1dF9wYWQsIE5VTEwpOwotCi0gICAgZ19hc3NlcnQgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBleHBlY3RlZCkpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9Ci0gIGdzdF9jYXBzX3VucmVmIChleHBlY3RlZCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb3V0cHV0X3NlbGVjdG9yX2dldGNhcHNfYWN0aXZlKQotewotICBHTGlzdCAqd2Fsa2VyOwotICBHc3RDYXBzICpleHBlY3RlZDsKLQotICAvKiBzZXQgcGFkIG5lZ290aWF0aW9uIG1vZGUgdG8gJ2FjdGl2ZScgKi8KLSAgZ19vYmplY3Rfc2V0IChzZWwsICJwYWQtbmVnb3RpYXRpb24tbW9kZSIsIDIsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlbCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGZvciAod2Fsa2VyID0gb3V0cHV0X3BhZHM7IHdhbGtlcjsgd2Fsa2VyID0gZ19saXN0X25leHQgKHdhbGtlcikpIHsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIEdzdFBhZCAqcGFkOwotICAgIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLQotICAgIHBhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKChHc3RQYWQgKikgd2Fsa2VyLT5kYXRhKTsKLQotICAgIGdfb2JqZWN0X3NldCAoc2VsLCAiYWN0aXZlLXBhZCIsIHBhZCwgTlVMTCk7Ci0KLSAgICAvKiBpbiAnYWN0aXZlJyBtb2RlLCB0aGUgYWN0aXZlIHNyY3BhZCBwZWVyJ3MgY2FwcyBzaG91bGQgYmUgcmV0dXJuZWQgb24KLSAgICAgKiB0aGUgc2lua3BhZCdzIGdldGNhcHMgKi8KLQotICAgIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlICgoR3N0UGFkICopIHdhbGtlci0+ZGF0YSk7Ci0gICAgZXhwZWN0ZWQgPSBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzICh0ZW1wbCk7Ci0gICAgY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChpbnB1dF9wYWQsIE5VTEwpOwotCi0gICAgZ19hc3NlcnQgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBleHBlY3RlZCkpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoZXhwZWN0ZWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHRlbXBsKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2VsLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLXNlbGVjdG9yX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInNlbGVjdG9yIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X291dHB1dF9zZWxlY3Rvcl9idWZmZXJfY291bnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5wdXRfc2VsZWN0b3JfYnVmZmVyX2NvdW50KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2lucHV0X3NlbGVjdG9yX2VtcHR5X3N0cmVhbSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnB1dF9zZWxlY3Rvcl9zaG9ydGVyX3N0cmVhbSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnB1dF9zZWxlY3Rvcl9zd2l0Y2hfdG9fZW9zX3N0cmVhbSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vdXRwdXRfc2VsZWN0b3Jfbm9fc3JjcGFkX25lZ290aWF0aW9uKTsKLQotICB0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoIm91dHB1dC1zZWxlY3Rvci1uZWdvdGlhdGlvbiIpOwotICB0Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlICh0Y19jaGFpbiwgc2V0dXBfb3V0cHV0X3NlbGVjdG9yLAotICAgICAgdGVhcmRvd25fb3V0cHV0X3NlbGVjdG9yKTsKLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0Y2Fwc19ub25lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X291dHB1dF9zZWxlY3Rvcl9nZXRjYXBzX2FsbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vdXRwdXRfc2VsZWN0b3JfZ2V0Y2Fwc19hY3RpdmUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoc2VsZWN0b3IpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvc3RyZWFtaWRkZW11eC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvc3RyZWFtaWRkZW11eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWJiOTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3N0cmVhbWlkZGVtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgdGhlIHN0cmVhbWlkZGVtdXgKLSAqCi0gKiBDb3B5cmlnaHQgMjAxMyBMR0UgQ29ycG9yYXRpb24uCi0gKiAgQGF1dGhvcjogSG9vbmhlZSBMZWUgPGhvb25oZWUubGVlQGxnZS5jb20+Ci0gKiAgQGF1dGhvcjogSmVvbmdzZW9rIEtpbSA8amVvbmdzZW9rLmtpbUBsZ2UuY29tPgotICogIEBhdXRob3I6IFdvbmNodWwgTGVlIDx3b25jaHVsODYubGVlQGxnZS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQotKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNkZWZpbmUgTlVNX1NVQlNUUkVBTVMgMTAwCi0jZGVmaW5lIE5VTV9CVUZGRVIgMTAwMAotCi1zdGF0aWMgR3N0UGFkICphY3RpdmVfc3JjcGFkOwotCi1zdHJ1Y3QgVGVzdERhdGEKLXsKLSAgR3N0RWxlbWVudCAqZGVtdXg7Ci0gIEdzdFBhZCAqbXlzcmMsICpteXNpbmtbTlVNX1NVQlNUUkVBTVNdOwotICBHc3RQYWQgKmRlbXV4c2luaywgKmRlbXV4c3JjW05VTV9TVUJTVFJFQU1TXTsKLSAgZ2ludCBzcmNwYWRfY250OwotICBHc3RDYXBzICpteWNhcHM7Ci0gIEdzdENhcHMgKmNhcHNbTlVNX1NVQlNUUkVBTVNdOwotICBHc3RTZWdtZW50IHNlZ21lbnRbTlVNX1NVQlNUUkVBTVNdOwotICBnY2hhciAqc3RyZWFtX2lkc1tOVU1fU1VCU1RSRUFNU107Ci19OwotCi1zdGF0aWMgdm9pZAotc2V0X2FjdGl2ZV9zcmNwYWQgKHN0cnVjdCBUZXN0RGF0YSAqdGQpCi17Ci0gIGlmIChhY3RpdmVfc3JjcGFkKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGFjdGl2ZV9zcmNwYWQpOwotCi0gIGdfb2JqZWN0X2dldCAodGQtPmRlbXV4LCAiYWN0aXZlLXBhZCIsICZhY3RpdmVfc3JjcGFkLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlbGVhc2VfdGVzdF9vYmplY3RzIChzdHJ1Y3QgVGVzdERhdGEgKnRkKQotewotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0ZC0+ZGVtdXgsIEdTVF9TVEFURV9OVUxMKSA9PQotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZC0+ZGVtdXhzaW5rKTsKLQotICBnc3RfY2Fwc191bnJlZiAodGQtPm15Y2Fwcyk7Ci0KLSAgaWYgKGFjdGl2ZV9zcmNwYWQpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChhY3RpdmVfc3JjcGFkKTsKLSAgICBhY3RpdmVfc3JjcGFkID0gTlVMTDsKLSAgfQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZC0+ZGVtdXgpOwotfQotCi1zdGF0aWMgdm9pZAotc3JjX3BhZF9hZGRlZF9jYiAoR3N0RWxlbWVudCAqIGRlbXV4LCBHc3RQYWQgKiBwYWQsIHN0cnVjdCBUZXN0RGF0YSAqdGQpCi17Ci0gIGlmICh0ZC0+c3JjcGFkX2NudCA8IE5VTV9TVUJTVFJFQU1TKSB7Ci0gICAgdGQtPmRlbXV4c3JjW3RkLT5zcmNwYWRfY250XSA9IHBhZDsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChwYWQsCi0gICAgICAgICAgICB0ZC0+bXlzaW5rW3RkLT5zcmNwYWRfY250KytdKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF90ZXN0X29iamVjdHMgKHN0cnVjdCBUZXN0RGF0YSAqdGQpCi17Ci0gIHRkLT5teWNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidGVzdC90ZXN0Iik7Ci0gIHRkLT5zcmNwYWRfY250ID0gMDsKLQotICB0ZC0+ZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJzdHJlYW1pZGRlbXV4IiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzICh0ZC0+ZGVtdXggIT0gTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHRkLT5kZW11eCwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sgKHNyY19wYWRfYWRkZWRfY2IpLCB0ZCk7Ci0gIHRkLT5kZW11eHNpbmsgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodGQtPmRlbXV4LCAic2luayIpOwotICBmYWlsX3VubGVzcyAodGQtPmRlbXV4c2luayAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0ZC0+ZGVtdXgsIEdTVF9TVEFURV9QTEFZSU5HKSA9PQotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWNoYWluX29rIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RQYWQgKnBlZXJfcGFkID0gTlVMTDsKLSAgZ2NoYXIgKnBhZF9zdHJlYW1faWQsICphY3RpdmVfc3JjcGFkX3N0cmVhbV9pZDsKLQotICBwZWVyX3BhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKGFjdGl2ZV9zcmNwYWQpOwotICBwYWRfc3RyZWFtX2lkID0gZ3N0X3BhZF9nZXRfc3RyZWFtX2lkIChwYWQpOwotICBhY3RpdmVfc3JjcGFkX3N0cmVhbV9pZCA9IGdzdF9wYWRfZ2V0X3N0cmVhbV9pZCAoYWN0aXZlX3NyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChwYWQgPT0gcGVlcl9wYWQpOwotICBmYWlsX3VubGVzcyAoZ19zdHJjbXAwIChwYWRfc3RyZWFtX2lkLCBhY3RpdmVfc3JjcGFkX3N0cmVhbV9pZCkgPT0gMCk7Ci0KLSAgZ19mcmVlIChwYWRfc3RyZWFtX2lkKTsKLSAgZ19mcmVlIChhY3RpdmVfc3JjcGFkX3N0cmVhbV9pZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXJfcGFkKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsZV9jcmVhdGVfZGVzdHJveSkKLXsKLSAgR3N0RWxlbWVudCAqZGVtdXg7Ci0KLSAgZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJzdHJlYW1pZGRlbXV4IiwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRlbXV4KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJlYW1pZGRlbXV4X3dpdGhfc3RyZWFtX3N0YXJ0KQotewotICBzdHJ1Y3QgVGVzdERhdGEgdGQ7Ci0KLSAgc2V0dXBfdGVzdF9vYmplY3RzICgmdGQpOwotCi0gIEdTVF9ERUJVRyAoIkNyZWF0aW5nIG15c2luayIpOwotICB0ZC5teXNpbmtbMF0gPSBnc3RfcGFkX25ldyAoIm15c2luazAiLCBHU1RfUEFEX1NJTkspOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c2lua1swXSwgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgbXlzcmMiKTsKLSAgdGQubXlzcmMgPSBnc3RfcGFkX25ldyAoIm15c3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwgKGdzdF9wYWRfbGluayAodGQubXlzcmMsIHRkLmRlbXV4c2luaykpKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC5teXNyYywgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHICgiUHVzaGluZyBzdHJlYW0tc3RhcnQgZXZlbnQiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0MCIpKSk7Ci0KLSAgZ19vYmplY3RfZ2V0ICh0ZC5kZW11eCwgImFjdGl2ZS1wYWQiLCAmYWN0aXZlX3NyY3BhZCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChhY3RpdmVfc3JjcGFkICE9IE5VTEwsICJGYWlsZWQgdG8gZ2VuZXJhdGUgYSBzcmNwYWQiKTsKLSAgZmFpbF91bmxlc3MgKHRkLnNyY3BhZF9jbnQgPT0gMSwgInBhZC1hZGRlZCBzaWduYWwgaGFzIG5vdCBlbW1pdGVkIik7Ci0KLSAgR1NUX0RFQlVHICgiUmVsZWFzaW5nIG15c2luayBhbmQgbXlzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC5teXNpbmtbMF0sIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC5teXNyYywgRkFMU0UpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRkLm15c2lua1swXSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRkLm15c3JjKTsKLQotICBHU1RfREVCVUcgKCJSZWxlYXNpbmcgc3RyZWFtaWRkZW11eCIpOwotICByZWxlYXNlX3Rlc3Rfb2JqZWN0cyAoJnRkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJlYW1pZGRlbXV4X3dpdGhvdXRfc3RyZWFtX3N0YXJ0KQotewotICBzdHJ1Y3QgVGVzdERhdGEgdGQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBzZXR1cF90ZXN0X29iamVjdHMgKCZ0ZCk7Ci0KLSAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgbXlzaW5rIik7Ci0gIHRkLm15c2lua1swXSA9IGdzdF9wYWRfbmV3ICgibXlzaW5rMCIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQubXlzaW5rWzBdLCBUUlVFKTsKLQotICBHU1RfREVCVUcgKCJDcmVhdGluZyBteXNyYyIpOwotICB0ZC5teXNyYyA9IGdzdF9wYWRfbmV3ICgibXlzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAoZ3N0X3BhZF9saW5rICh0ZC5teXNyYywgdGQuZGVtdXhzaW5rKSkpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c3JjLCBUUlVFKTsKLQotICBHU1RfREVCVUcgKCJQdXNoaW5nIGNhcHMgYW5kIHNlZ21lbnQgZXZlbnQgd2l0aG91dCBzdHJlYW0tc3RhcnQiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMsIGdzdF9ldmVudF9uZXdfY2FwcyAodGQubXljYXBzKSkpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIGdfb2JqZWN0X2dldCAodGQuZGVtdXgsICJhY3RpdmUtcGFkIiwgJmFjdGl2ZV9zcmNwYWQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoYWN0aXZlX3NyY3BhZCA9PSBOVUxMLCAic3JjcGFkIGhhcyBjcmVhdGVkIHVuZXhwZWN0ZWRseSIpOwotICBmYWlsX3VubGVzcyAodGQuc3JjcGFkX2NudCA9PSAwLCAicGFkLWFkZGVkIHNpZ25hbCBpcyBlbW1pdGVkIHVuZXhwZWN0ZWRseSIpOwotCi0gIEdTVF9ERUJVRyAoIlJlbGVhc2luZyBteXNpbmsgYW5kIG15c3JjIik7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQubXlzaW5rWzBdLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQubXlzcmMsIEZBTFNFKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZC5teXNpbmtbMF0pOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZC5teXNyYyk7Ci0KLSAgR1NUX0RFQlVHICgiUmVsZWFzaW5nIHN0cmVhbWlkZGVtdXgiKTsKLSAgcmVsZWFzZV90ZXN0X29iamVjdHMgKCZ0ZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RyZWFtaWRkZW11eF9zaW1wbGUpCi17Ci0gIHN0cnVjdCBUZXN0RGF0YSB0ZDsKLQotICBzZXR1cF90ZXN0X29iamVjdHMgKCZ0ZCk7Ci0KLSAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgbXlzaW5rIik7Ci0gIHRkLm15c2lua1swXSA9IGdzdF9wYWRfbmV3ICgibXlzaW5rMCIsIEdTVF9QQURfU0lOSyk7Ci0gIHRkLm15c2lua1swXS0+Y2hhaW5kYXRhID0gJnRkOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAodGQubXlzaW5rWzBdLCBjaGFpbl9vayk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQubXlzaW5rWzBdLCBUUlVFKTsKLQotICB0ZC5teXNpbmtbMV0gPSBnc3RfcGFkX25ldyAoIm15c2luazEiLCBHU1RfUEFEX1NJTkspOwotICB0ZC5teXNpbmtbMV0tPmNoYWluZGF0YSA9ICZ0ZDsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHRkLm15c2lua1sxXSwgY2hhaW5fb2spOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c2lua1sxXSwgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgbXlzcmMiKTsKLSAgdGQubXlzcmMgPSBnc3RfcGFkX25ldyAoIm15c3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwgKGdzdF9wYWRfbGluayAodGQubXlzcmMsIHRkLmRlbXV4c2luaykpKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC5teXNyYywgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHICgiUHVzaGluZyBzdHJlYW0tc3RhcnQsIGNhcHMgYW5kIHNlZ21lbnQgZXZlbnQiKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50c193aXRoX3N0cmVhbV9pZCAodGQubXlzcmMsIHRkLmRlbXV4LCB0ZC5teWNhcHMsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLCAidGVzdDAiKTsKLSAgc2V0X2FjdGl2ZV9zcmNwYWQgKCZ0ZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWQgKHRkLm15c3JjLCB0ZC5kZW11eCwgdGQubXljYXBzLAotICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgInRlc3QxIik7Ci0gIHNldF9hY3RpdmVfc3JjcGFkICgmdGQpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoICh0ZC5teXNyYywgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLQotICBHU1RfREVCVUcgKCJQdXNoaW5nIGJ1ZmZlciIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QwIikpKTsKLSAgc2V0X2FjdGl2ZV9zcmNwYWQgKCZ0ZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoICh0ZC5teXNyYywgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QxIikpKTsKLSAgc2V0X2FjdGl2ZV9zcmNwYWQgKCZ0ZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoICh0ZC5teXNyYywgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLQotICBHU1RfREVCVUcgKCJSZWxlYXNpbmcgbXlzaW5rIGFuZCBteXNyYyIpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c2lua1swXSwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c2lua1sxXSwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c3JjLCBGQUxTRSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGQubXlzaW5rWzBdKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGQubXlzaW5rWzFdKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGQubXlzcmMpOwotCi0gIEdTVF9ERUJVRyAoIlJlbGVhc2luZyBzdHJlYW1pZGRlbXV4Iik7Ci0gIHJlbGVhc2VfdGVzdF9vYmplY3RzICgmdGQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdMaXN0ICpleHBlY3RlZFtOVU1fU1VCU1RSRUFNU107Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2lua19ldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR0xpc3QgKipleHBlY3RlZCA9IEdTVF9QQURfRUxFTUVOVF9QUklWQVRFIChwYWQpLCAqbDsKLSAgR3N0RXZlbnQgKmV4cDsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOnsKLSAgICAgIEdzdENhcHMgKnJlY3ZjYXBzLCAqZXhwZWN0Y2FwczsKLQotICAgICAgbCA9IGdfbGlzdF9maXJzdCAoKmV4cGVjdGVkKTsKLSAgICAgIGV4cCA9IEdTVF9FVkVOVCAobC0+ZGF0YSk7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJnJlY3ZjYXBzKTsKLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChleHAsICZleHBlY3RjYXBzKTsKLQotICAgICAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChyZWN2Y2FwcywgZXhwZWN0Y2FwcykpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6ewotICAgICAgY29uc3QgR3N0U2VnbWVudCAqcmVjdnNlZywgKmV4cGVjdHNlZzsKLQotICAgICAgbCA9IGdfbGlzdF9sYXN0ICgqZXhwZWN0ZWQpOwotICAgICAgZXhwID0gR1NUX0VWRU5UIChsLT5kYXRhKTsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmcmVjdnNlZyk7Ci0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXhwLCAmZXhwZWN0c2VnKTsKLQotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAocmVjdnNlZy0+cG9zaXRpb24sIGV4cGVjdHNlZy0+cG9zaXRpb24pOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0cmVhbWlkZGVtdXhfbnVtX2J1ZmZlcnMpCi17Ci0gIHN0cnVjdCBUZXN0RGF0YSB0ZDsKLSAgZ2ludCBidWZmZXJfY250ID0gMDsKLSAgZ2ludCBzdHJlYW1fY250ID0gMDsKLSAgR3N0RXZlbnQgKmV2ZW50OwotCi0gIHNldHVwX3Rlc3Rfb2JqZWN0cyAoJnRkKTsKLQotICBHU1RfREVCVUcgKCJDcmVhdGluZyBteXNpbmsiKTsKLSAgZm9yIChzdHJlYW1fY250ID0gMDsgc3RyZWFtX2NudCA8IE5VTV9TVUJTVFJFQU1TOyArK3N0cmVhbV9jbnQpIHsKLSAgICBnY2hhciAqbmFtZTsKLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgibXlzaW5rJWQiLCBzdHJlYW1fY250KTsKLSAgICB0ZC5teXNpbmtbc3RyZWFtX2NudF0gPSBnc3RfcGFkX25ldyAobmFtZSwgR1NUX1BBRF9TSU5LKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uICh0ZC5teXNpbmtbc3RyZWFtX2NudF0sIGNoYWluX29rKTsKLSAgICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAodGQubXlzaW5rW3N0cmVhbV9jbnRdLCBzaW5rX2V2ZW50X2Z1bmMpOwotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQubXlzaW5rW3N0cmVhbV9jbnRdLCBUUlVFKTsKLSAgICBHU1RfUEFEX0VMRU1FTlRfUFJJVkFURSAodGQubXlzaW5rW3N0cmVhbV9jbnRdKSA9ICZleHBlY3RlZFtzdHJlYW1fY250XTsKLSAgfQotCi0gIEdTVF9ERUJVRyAoIkNyZWF0aW5nIG15c3JjIik7Ci0gIHRkLm15c3JjID0gZ3N0X3BhZF9uZXcgKCJteXNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHRkLm15c3JjLCB0ZC5kZW11eHNpbmspKSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQubXlzcmMsIFRSVUUpOwotCi0gIEdTVF9ERUJVRyAoIkNyZWF0aW5nIGNhcHMiKTsKLSAgZm9yIChzdHJlYW1fY250ID0gMDsgc3RyZWFtX2NudCA8IE5VTV9TVUJTVFJFQU1TOyArK3N0cmVhbV9jbnQpIHsKLSAgICBnY2hhciAqY2Fwc19uYW1lOwotICAgIGNhcHNfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInRlc3QvdGVzdCVkIiwgc3RyZWFtX2NudCk7Ci0gICAgdGQuY2Fwc1tzdHJlYW1fY250XSA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKGNhcHNfbmFtZSk7Ci0KLSAgICBnX2ZyZWUgKGNhcHNfbmFtZSk7Ci0gIH0KLQotICBHU1RfREVCVUcgKCJDcmVhdGluZyBzZWdtZW50Iik7Ci0gIGZvciAoc3RyZWFtX2NudCA9IDA7IHN0cmVhbV9jbnQgPCBOVU1fU1VCU1RSRUFNUzsgKytzdHJlYW1fY250KSB7Ci0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnRkLnNlZ21lbnRbc3RyZWFtX2NudF0sIEdTVF9GT1JNQVRfQllURVMpOwotICAgIHRkLnNlZ21lbnRbc3RyZWFtX2NudF0ucG9zaXRpb24gPSBzdHJlYW1fY250ICogR1NUX1NFQ09ORDsKLSAgfQotCi0gIEdTVF9ERUJVRyAoIlB1c2hpbmcgc3RyZWFtLXN0YXJ0LCBjYXBzIGFuZCBzZWdtZW50IGV2ZW50Iik7Ci0gIGZvciAoc3RyZWFtX2NudCA9IDA7IHN0cmVhbV9jbnQgPCBOVU1fU1VCU1RSRUFNUzsgKytzdHJlYW1fY250KSB7Ci0gICAgZ2NoYXIgKm5hbWU7Ci0gICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInRlc3QlZCIsIHN0cmVhbV9jbnQpOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMsCi0gICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAobmFtZSkpKTsKLQotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jYXBzICh0ZC5jYXBzW3N0cmVhbV9jbnRdKTsKLSAgICBleHBlY3RlZFtzdHJlYW1fY250XSA9Ci0gICAgICAgIGdfbGlzdF9hcHBlbmQgKGV4cGVjdGVkW3N0cmVhbV9jbnRdLCBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjLCBldmVudCkpOwotCi0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZ0ZC5zZWdtZW50W3N0cmVhbV9jbnRdKTsKLSAgICBleHBlY3RlZFtzdHJlYW1fY250XSA9Ci0gICAgICAgIGdfbGlzdF9hcHBlbmQgKGV4cGVjdGVkW3N0cmVhbV9jbnRdLCBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjLCBldmVudCkpOwotCi0gICAgZ19mcmVlIChuYW1lKTsKLSAgICBzZXRfYWN0aXZlX3NyY3BhZCAoJnRkKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotICB9Ci0KLSAgR1NUX0RFQlVHICgiUHVzaGluZyBidWZmZXJzIHRvIHJhbmRvbSBzcmNwYWQiKTsKLSAgZm9yIChidWZmZXJfY250ID0gMDsgYnVmZmVyX2NudCA8IE5VTV9CVUZGRVI7ICsrYnVmZmVyX2NudCkgewotICAgIGdjaGFyICpuYW1lOwotICAgIGdpbnQgYWN0aXZlX3N0cmVhbSA9IHJhbmQgKCkgJSBOVU1fU1VCU1RSRUFNUzsKLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgidGVzdCVkIiwgYWN0aXZlX3N0cmVhbSk7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYywKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChuYW1lKSkpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjLAotICAgICAgICAgICAgZ3N0X2V2ZW50X25ld19jYXBzICh0ZC5jYXBzW2FjdGl2ZV9zdHJlYW1dKSkpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjLAotICAgICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmdGQuc2VnbWVudFthY3RpdmVfc3RyZWFtXSkpKTsKLQotICAgIGdfZnJlZSAobmFtZSk7Ci0gICAgc2V0X2FjdGl2ZV9zcmNwYWQgKCZ0ZCk7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoICh0ZC5teXNyYywgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLSAgfQotCi0gIGZvciAoc3RyZWFtX2NudCA9IDA7IHN0cmVhbV9jbnQgPCBOVU1fU1VCU1RSRUFNUzsgKytzdHJlYW1fY250KQotICAgIGdzdF9jYXBzX3VucmVmICh0ZC5jYXBzW3N0cmVhbV9jbnRdKTsKLQotICBHU1RfREVCVUcgKCJSZWxlYXNpbmcgbXlzaW5rIGFuZCBteXNyYyIpOwotICBmb3IgKHN0cmVhbV9jbnQgPSAwOyBzdHJlYW1fY250IDwgTlVNX1NVQlNUUkVBTVM7ICsrc3RyZWFtX2NudCkgewotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQubXlzaW5rW3N0cmVhbV9jbnRdLCBGQUxTRSk7Ci0gIH0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC5teXNyYywgRkFMU0UpOwotCi0gIGZvciAoc3RyZWFtX2NudCA9IDA7IHN0cmVhbV9jbnQgPCBOVU1fU1VCU1RSRUFNUzsgKytzdHJlYW1fY250KSB7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAodGQubXlzaW5rW3N0cmVhbV9jbnRdKTsKLQotICAgIGdfbGlzdF9mcmVlX2Z1bGwgKGV4cGVjdGVkW3N0cmVhbV9jbnRdLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9ldmVudF91bnJlZik7Ci0gIH0KLSAgZ3N0X29iamVjdF91bnJlZiAodGQubXlzcmMpOwotCi0gIEdTVF9ERUJVRyAoIlJlbGVhc2luZyBzdHJlYW1pZGRlbXV4Iik7Ci0gIHJlbGVhc2VfdGVzdF9vYmplY3RzICgmdGQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLWd1aW50IG51bV9lb3MgPSAwOwotZ3VpbnQgbnVtX2ZsdXNoX3N0YXJ0ID0gMDsKLWd1aW50IG51bV9mbHVzaF9zdG9wID0gMDsKLQotc3RhdGljIGdib29sZWFuCi1ldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOgotICAgICAgKytudW1fZmx1c2hfc3RhcnQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgKytudW1fZmx1c2hfc3RvcDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgICsrbnVtX2VvczsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0cmVhbWlkZGVtdXhfZW9zKQotewotICBzdHJ1Y3QgVGVzdERhdGEgdGQ7Ci0KLSAgc2V0dXBfdGVzdF9vYmplY3RzICgmdGQpOwotCi0gIG51bV9lb3MgPSAwOwotCi0gIEdTVF9ERUJVRyAoIkNyZWF0aW5nIG15c2luayIpOwotICB0ZC5teXNpbmtbMF0gPSBnc3RfcGFkX25ldyAoIm15c2luazAiLCBHU1RfUEFEX1NJTkspOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAodGQubXlzaW5rWzBdLCBjaGFpbl9vayk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uICh0ZC5teXNpbmtbMF0sIGV2ZW50X2Z1bmMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c2lua1swXSwgVFJVRSk7Ci0KLSAgdGQubXlzaW5rWzFdID0gZ3N0X3BhZF9uZXcgKCJteXNpbmsxIiwgR1NUX1BBRF9TSU5LKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHRkLm15c2lua1sxXSwgY2hhaW5fb2spOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAodGQubXlzaW5rWzFdLCBldmVudF9mdW5jKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlICh0ZC5teXNpbmtbMV0sIFRSVUUpOwotCi0gIEdTVF9ERUJVRyAoIkNyZWF0aW5nIG15c3JjIik7Ci0gIHRkLm15c3JjID0gZ3N0X3BhZF9uZXcgKCJteXNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHRkLm15c3JjLCB0ZC5kZW11eHNpbmspKSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAodGQubXlzcmMsIFRSVUUpOwotCi0gIEdTVF9ERUJVRyAoIlB1c2hpbmcgc3RyZWFtLXN0YXJ0LCBjYXBzIGFuZCBzZWdtZW50IGV2ZW50Iik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHNfd2l0aF9zdHJlYW1faWQgKHRkLm15c3JjLCB0ZC5kZW11eCwgdGQubXljYXBzLAotICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgInRlc3QwIik7Ci0gIHNldF9hY3RpdmVfc3JjcGFkICgmdGQpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoICh0ZC5teXNyYywgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLQotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzX3dpdGhfc3RyZWFtX2lkICh0ZC5teXNyYywgdGQuZGVtdXgsIHRkLm15Y2FwcywKLSAgICAgIEdTVF9GT1JNQVRfQllURVMsICJ0ZXN0MSIpOwotICBzZXRfYWN0aXZlX3NyY3BhZCAoJnRkKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAodGQubXlzcmMsIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgR1NUX0RFQlVHICgiUHVzaGluZyBmbHVzaCBldmVudCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZC5teXNyYywgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSkpOwotICBmYWlsX3VubGVzcyAobnVtX2ZsdXNoX3N0YXJ0ID09IDIsCi0gICAgICAiRmFpbGVkIHRvIHNlbmQgZmx1c2gtc3RhcnQgZXZlbnQgdG8gYWxsIHBhZHMgaW50ZXJuYWxseSBsaW5rZWQiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGQubXlzcmMsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpKTsKLSAgZmFpbF91bmxlc3MgKG51bV9mbHVzaF9zdG9wID09IDIsCi0gICAgICAiRmFpbGVkIHRvIHNlbmQgZmx1c2gtc3RvcCBldmVudCB0byBhbGwgcGFkcyBpbnRlcm5hbGx5IGxpbmtlZCIpOwotCi0gIEdTVF9ERUJVRyAoIlB1c2hpbmcgZW9zIGV2ZW50Iik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHRkLm15c3JjLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAyLAotICAgICAgIkZhaWxlZCB0byBzZW5kIGVvcyBldmVudCB0byBhbGwgcGFkcyBpbnRlcm5hbGx5IGxpbmtlZCIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHRkLm15c3JjLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfRU9TKTsKLQotICBHU1RfREVCVUcgKCJSZWxlYXNpbmcgbXlzaW5rIGFuZCBteXNyYyIpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c2lua1swXSwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c2lua1sxXSwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHRkLm15c3JjLCBGQUxTRSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGQubXlzaW5rWzBdKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGQubXlzaW5rWzFdKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGQubXlzcmMpOwotCi0gIEdTVF9ERUJVRyAoIlJlbGVhc2luZyBzdHJlYW1pZGRlbXV4Iik7Ci0gIHJlbGVhc2VfdGVzdF9vYmplY3RzICgmdGQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1zdHJlYW1pZGRlbXV4X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInN0cmVhbWlkZGVtdXgiKTsKLSAgVENhc2UgKnRjX2NoYWluOwotCi0gIHRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgic3RyZWFtaWRkZW11eCBzaW1wbGUiKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsZV9jcmVhdGVfZGVzdHJveSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJlYW1pZGRlbXV4X3dpdGhfc3RyZWFtX3N0YXJ0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cmVhbWlkZGVtdXhfd2l0aG91dF9zdHJlYW1fc3RhcnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RyZWFtaWRkZW11eF9zaW1wbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RyZWFtaWRkZW11eF9udW1fYnVmZmVycyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJlYW1pZGRlbXV4X2Vvcyk7Ci0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoc3RyZWFtaWRkZW11eCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy90ZWUuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2RkMGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3RlZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzIzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgdGVlCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbSBkb3QgdGF5bWFucyBhdCBnbWFpbCBkb3QgY29tPgotICogQ29weXJpZ2h0IChDKSA8MjAwOD4gT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDg+IENocmlzdGlhbiBCZXJlbnRzZW4gPGNocmlzdGlhbi5iZXJlbnRzZW5AdGFuZGJlcmcuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotc3RhdGljIHZvaWQKLWhhbmRvZmYgKEdzdEVsZW1lbnQgKiBmYWtlc2luaywgR3N0QnVmZmVyICogYnVmLCBHc3RQYWQgKiBwYWQsIGd1aW50ICogY291bnQpCi17Ci0gICpjb3VudCA9ICpjb3VudCArIDE7Ci19Ci0KLS8qIGNvbnN0cnVjdCBmYWtlc3JjIG51bS1idWZmZXJzPTMgISB0ZWUgbmFtZT10ICEgcXVldWUgISBmYWtlc2luayB0LiAhIHF1ZXVlICEKLSAqIGZha2VzaW5rLiBFYWNoIGZha2VzaW5rIHNob3VsZCBleGFjdGx5IHJlY2VpdmUgMyBidWZmZXJzLgotICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9udW1fYnVmZmVycykKLXsKLSNkZWZpbmUgTlVNX1NVQlNUUkVBTVMgMTUKLSNkZWZpbmUgTlVNX0JVRkZFUlMgMwotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKnRlZTsKLSAgR3N0RWxlbWVudCAqcXVldWVzW05VTV9TVUJTVFJFQU1TXTsKLSAgR3N0RWxlbWVudCAqc2lua3NbTlVNX1NVQlNUUkVBTVNdOwotICBHc3RQYWQgKnJlcV9wYWRzW05VTV9TVUJTVFJFQU1TXTsKLSAgZ3VpbnQgY291bnRzW05VTV9TVUJTVFJFQU1TXTsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgZ2ludCBpOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiZmFrZXNyYyIpOwotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgTlVNX0JVRkZFUlMsIE5VTEwpOwotICB0ZWUgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInRlZSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCB0ZWUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgdGVlKSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9TVUJTVFJFQU1TOyArK2kpIHsKLSAgICBHc3RQYWQgKnFwYWQ7Ci0gICAgZ2NoYXIgbmFtZVszMl07Ci0KLSAgICBjb3VudHNbaV0gPSAwOwotCi0gICAgcXVldWVzW2ldID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJxdWV1ZSIpOwotICAgIGdfc25wcmludGYgKG5hbWUsIDMyLCAicXVldWUlZCIsIGkpOwotICAgIGdzdF9vYmplY3Rfc2V0X25hbWUgKEdTVF9PQkpFQ1QgKHF1ZXVlc1tpXSksIG5hbWUpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBxdWV1ZXNbaV0pKTsKLQotICAgIHNpbmtzW2ldID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJmYWtlc2luayIpOwotICAgIGdfc25wcmludGYgKG5hbWUsIDMyLCAic2luayVkIiwgaSk7Ci0gICAgZ3N0X29iamVjdF9zZXRfbmFtZSAoR1NUX09CSkVDVCAoc2lua3NbaV0pLCBuYW1lKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2lua3NbaV0pKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAocXVldWVzW2ldLCBzaW5rc1tpXSkpOwotICAgIGdfb2JqZWN0X3NldCAoc2lua3NbaV0sICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChzaW5rc1tpXSwgImhhbmRvZmYiLCAoR0NhbGxiYWNrKSBoYW5kb2ZmLCAmY291bnRzW2ldKTsKLQotICAgIHJlcV9wYWRzW2ldID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmNfJXUiKTsKLSAgICBmYWlsX3VubGVzcyAocmVxX3BhZHNbaV0gIT0gTlVMTCk7Ci0KLSAgICBxcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlc1tpXSwgInNpbmsiKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX2xpbmsgKHJlcV9wYWRzW2ldLCBxcGFkKSwgR1NUX1BBRF9MSU5LX09LKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChxcGFkKTsKLSAgfQotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF9pZiAoYnVzID09IE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7Ci0gIGZhaWxfaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9TVUJTVFJFQU1TOyArK2kpIHsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjb3VudHNbaV0sIE5VTV9CVUZGRVJTKTsKLSAgfQotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX1NVQlNUUkVBTVM7ICsraSkgewotICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRlZSwgcmVxX3BhZHNbaV0pOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJlcV9wYWRzW2ldKTsKLSAgfQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogd2UgdXNlIGZha2VzcmMgISB0ZWUgISBmYWtlc2luayBhbmQgdGhlbiByYW5kb21seSByZXF1ZXN0L3JlbGVhc2UgYW5kIGxpbmsKLSAqIHNvbWUgcGFkcyBmcm9tIHRlZS4gVGhpcyBzaG91bGQgaGFwcGlseSBydW4gd2l0aG91dCBhbnkgZXJyb3JzLiAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RyZXNzKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqdGVlOwotICBjb25zdCBnY2hhciAqZGVzYzsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgZ2ludCBpOwotCi0gIC8qIFB1bXAgMTAwMCBidWZmZXJzICgxMCBieXRlcyBlYWNoKSBwZXIgc2Vjb25kIHRocm91Z2ggdGVlIGZvciA1IHNlY3MgKi8KLSAgZGVzYyA9ICJmYWtlc3JjIGRhdGFyYXRlPTEwMDAwIHNpemVtaW49MTAgc2l6ZW1heD0xMCBudW0tYnVmZmVycz01MDAwICEgIgotICAgICAgInZpZGVvL3gtcmF3LGZyYW1lcmF0ZT0yNS8xICEgdGVlIG5hbWU9dCAhICIKLSAgICAgICJxdWV1ZSBtYXgtc2l6ZS1idWZmZXJzPTIgISBmYWtlc2luayBzeW5jPXRydWUiOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAoZGVzYywgTlVMTCk7Ci0gIGZhaWxfaWYgKHBpcGVsaW5lID09IE5VTEwpOwotCi0gIHRlZSA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInQiKTsKLSAgZmFpbF9pZiAodGVlID09IE5VTEwpOwotCi0gIC8qIGJyaW5nIHRoZSBwaXBlbGluZSB0byBQTEFZSU5HLCB0aGVuIHN0YXJ0IHN3aXRjaGluZyAqLwotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIGZhaWxfaWYgKGJ1cyA9PSBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAvKiBXYWl0IGZvciB0aGUgcGlwZWxpbmUgdG8gaGl0IHBsYXlpbmcgc28gdGhhdCBwYXJzZV9sYXVuY2ggY2FuIGRvIHRoZQotICAgKiBpbml0aWFsIGxpbmssIG90aGVyd2lzZSB3ZSBwZXJmb3JtIGxpbmtpbmcgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGFuZCBjYXVzZQotICAgKiB0cm91YmxlICovCi0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGZvciAoaSA9IDA7IGkgPCA1MDAwMDsgaSsrKSB7Ci0gICAgR3N0UGFkICpwYWQ7Ci0KLSAgICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyY18ldSIpOwotICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRlZSwgcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotCi0gICAgaWYgKChtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIDApKSkKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogbm93IHdhaXQgZm9yIGNvbXBsZXRpb24gb3IgZXJyb3IgKi8KLSAgaWYgKG1zZyA9PSBOVUxMKQotICAgIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBmYWlsX2lmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VPUyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGVlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEVsZW1lbnQgKnRlZTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0UGFkICpzdGFydF9zcmNwYWQ7Ci0gIEdzdFBhZCAqdGVlX3NpbmtwYWQ7Ci0gIEdzdFBhZCAqdGVlX3NyY3BhZDsKLSAgR3N0UGFkICpmaW5hbF9zaW5rcGFkOwotICBHVGhyZWFkICphcHBfdGhyZWFkOwotICBnaW50IGNvdW50ZG93bjsKLSAgZ2Jvb2xlYW4gYXBwX3RocmVhZF9wcmVwcGVkOwotICBnYm9vbGVhbiBidWZmZXJhbGxvY19ibG9ja2VkOwotfSBCdWZmZXJBbGxvY0hhcm5lc3M7Ci0KLXN0YXRpYyB2b2lkCi1idWZmZXJfYWxsb2NfaGFybmVzc19zZXR1cCAoQnVmZmVyQWxsb2NIYXJuZXNzICogaCwgZ2ludCBjb3VudGRvd24pCi17Ci0gIGgtPmFwcF90aHJlYWQgPSBOVUxMOwotCi0gIGgtPnRlZSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgidGVlIik7Ci0gIGZhaWxfaWYgKGgtPnRlZSA9PSBOVUxMKTsKLQotICBoLT5jb3VudGRvd24gPSBjb3VudGRvd247Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChoLT50ZWUsIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIFRSVUUpOwotCi0gIGgtPmNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC1yYXciKTsKLQotICBoLT5zdGFydF9zcmNwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF9pZiAoaC0+c3RhcnRfc3JjcGFkID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfYWN0aXZlIChoLT5zdGFydF9zcmNwYWQsIFRSVUUpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoaC0+c3RhcnRfc3JjcGFkLCBoLT5jYXBzKSA9PSBUUlVFKTsKLQotICBoLT50ZWVfc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChoLT50ZWUsICJzaW5rIik7Ci0gIGZhaWxfaWYgKGgtPnRlZV9zaW5rcGFkID09IE5VTEwpOwotCi0gIGgtPnRlZV9zcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGgtPnRlZSwgInNyY18ldSIpOwotICBmYWlsX2lmIChoLT50ZWVfc3JjcGFkID09IE5VTEwpOwotCi0gIGgtPmZpbmFsX3NpbmtwYWQgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOwotICBmYWlsX2lmIChoLT5maW5hbF9zaW5rcGFkID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfYWN0aXZlIChoLT5maW5hbF9zaW5rcGFkLCBUUlVFKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKGgtPmZpbmFsX3NpbmtwYWQsIGgtPmNhcHMpID09IFRSVUUpOwotICBnX29iamVjdF9zZXRfcWRhdGEgKEdfT0JKRUNUIChoLT5maW5hbF9zaW5rcGFkKSwKLSAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiYnVmZmVyLWFsbG9jLWhhcm5lc3MiKSwgaCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9saW5rIChoLT5zdGFydF9zcmNwYWQsIGgtPnRlZV9zaW5rcGFkKSwKLSAgICAgIEdTVF9QQURfTElOS19PSyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfbGluayAoaC0+dGVlX3NyY3BhZCwgaC0+ZmluYWxfc2lua3BhZCksCi0gICAgICBHU1RfUEFEX0xJTktfT0spOwotfQotCi1zdGF0aWMgdm9pZAotYnVmZmVyX2FsbG9jX2hhcm5lc3NfdGVhcmRvd24gKEJ1ZmZlckFsbG9jSGFybmVzcyAqIGgpCi17Ci0gIGlmIChoLT5hcHBfdGhyZWFkKQotICAgIGdfdGhyZWFkX2pvaW4gKGgtPmFwcF90aHJlYWQpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoaC0+ZmluYWxfc2lua3BhZCwgRkFMU0UpOwotICBnc3Rfb2JqZWN0X3VucmVmIChoLT5maW5hbF9zaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaC0+dGVlX3NyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGgtPnRlZV9zaW5rcGFkKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChoLT5zdGFydF9zcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaC0+c3RhcnRfc3JjcGFkKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGgtPmNhcHMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoaC0+dGVlKTsKLX0KLQotI2lmIDAKLXN0YXRpYyBncG9pbnRlcgotYXBwX3RocmVhZF9mdW5jIChncG9pbnRlciBkYXRhKQotewotICBCdWZmZXJBbGxvY0hhcm5lc3MgKmggPSBkYXRhOwotCi0gIC8qIFNpZ25hbCB0aGF0IHdlIGFyZSBhYm91dCB0byBjYWxsIHJlbGVhc2VfcmVxdWVzdF9wYWQoKS4gKi8KLSAgZ19tdXRleF9sb2NrICgmY2hlY2tfbXV0ZXgpOwotICBoLT5hcHBfdGhyZWFkX3ByZXBwZWQgPSBUUlVFOwotICBnX2NvbmRfc2lnbmFsICgmY2hlY2tfY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmY2hlY2tfbXV0ZXgpOwotCi0gIC8qIFNpbXVsYXRlIHRoYXQgdGhlIGFwcCByZWxlYXNlcyB0aGUgcGFkIHdoaWxlIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGlzIGluCi0gICAqIGJ1ZmZlcl9hbGxvYyBiZWxvdy4gKi8KLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoaC0+dGVlLCBoLT50ZWVfc3JjcGFkKTsKLQotICAvKiBTaWduYWwgdGhlIGJ1ZmZlcmFsbG9jIGZ1bmN0aW9uIGJlbG93IGlmIGl0J3Mgc3RpbGwgd2FpdGluZy4gKi8KLSAgZ19tdXRleF9sb2NrICgmY2hlY2tfbXV0ZXgpOwotICBoLT5idWZmZXJhbGxvY19ibG9ja2VkID0gRkFMU0U7Ci0gIGdfY29uZF9zaWduYWwgKCZjaGVja19jb25kKTsKLSAgZ19tdXRleF91bmxvY2sgKCZjaGVja19tdXRleCk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKLQotI2lmIDAKLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1maW5hbF9zaW5rcGFkX2J1ZmZlcmFsbG9jIChHc3RQYWQgKiBwYWQsIGd1aW50NjQgb2Zmc2V0LCBndWludCBzaXplLAotICAgIEdzdENhcHMgKiBjYXBzLCBHc3RCdWZmZXIgKiogYnVmKQotewotICBCdWZmZXJBbGxvY0hhcm5lc3MgKmg7Ci0gIEdUaW1lVmFsIGRlYWRsaW5lOwotCi0gIGggPSBnX29iamVjdF9nZXRfcWRhdGEgKEdfT0JKRUNUIChwYWQpLAotICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJidWZmZXItYWxsb2MtaGFybmVzcyIpKTsKLSAgZ19hc3NlcnQgKGggIT0gTlVMTCk7Ci0KLSAgaWYgKC0tKGgtPmNvdW50ZG93bikgPT0gMCkgewotICAgIC8qIFRpbWUgdG8gbWFrZSB0aGUgYXBwIHJlbGVhc2UgdGhlIHBhZC4gKi8KLSAgICBoLT5hcHBfdGhyZWFkX3ByZXBwZWQgPSBGQUxTRTsKLSAgICBoLT5idWZmZXJhbGxvY19ibG9ja2VkID0gVFJVRTsKLQotICAgIGgtPmFwcF90aHJlYWQgPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgYXBwX3RocmVhZF9mdW5jLCBoLCBOVUxMKTsKLSAgICBmYWlsX2lmIChoLT5hcHBfdGhyZWFkID09IE5VTEwpOwotCi0gICAgLyogV2FpdCBmb3IgdGhlIGFwcCB0aHJlYWQgdG8gZ2V0IHJlYWR5IHRvIGNhbGwgcmVsZWFzZV9yZXF1ZXN0X3BhZCgpLiAqLwotICAgIGdfbXV0ZXhfbG9jayAoJmNoZWNrX211dGV4KTsKLSAgICB3aGlsZSAoIWgtPmFwcF90aHJlYWRfcHJlcHBlZCkKLSAgICAgIGdfY29uZF93YWl0ICgmY2hlY2tfY29uZCwgJmNoZWNrX211dGV4KTsKLSAgICBnX211dGV4X3VubG9jayAoJmNoZWNrX211dGV4KTsKLQotICAgIC8qIE5vdyB3YWl0IGZvciBpdCB0byBkbyB0aGF0IHdpdGhpbiBhIHNlY29uZCwgdG8gYXZvaWQgZGVhZGxvY2tpbmcKLSAgICAgKiBpbiB0aGUgZXZlbnQgb2YgZnV0dXJlIGNoYW5nZXMgdG8gdGhlIGxvY2tpbmcgc2VtYW50aWNzLiAqLwotICAgIGdfbXV0ZXhfbG9jayAoJmNoZWNrX211dGV4KTsKLSAgICBnX2dldF9jdXJyZW50X3RpbWUgKCZkZWFkbGluZSk7Ci0gICAgZGVhZGxpbmUudHZfc2VjICs9IDE7Ci0gICAgd2hpbGUgKGgtPmJ1ZmZlcmFsbG9jX2Jsb2NrZWQpIHsKLSAgICAgIGlmICghZ19jb25kX3RpbWVkX3dhaXQgKCZjaGVja19jb25kLCAmY2hlY2tfbXV0ZXgsICZkZWFkbGluZSkpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBnX211dGV4X3VubG9jayAoJmNoZWNrX211dGV4KTsKLSAgfQotCi0gICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOwotICBnc3RfYnVmZmVyX3NldF9jYXBzICgqYnVmLCBjYXBzKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0jZW5kaWYKLQotLyogU2ltdWxhdGUgYW4gYXBwIHJlbGVhc2luZyB0aGUgcGFkIHdoaWxlIHRoZSBmaXJzdCBhbGxvY19idWZmZXIoKSBpcyBpbgotICogcHJvZ3Jlc3MuICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZWxlYXNlX3doaWxlX2J1ZmZlcl9hbGxvYykKLXsKLSAgQnVmZmVyQWxsb2NIYXJuZXNzIGg7Ci0KLSAgYnVmZmVyX2FsbG9jX2hhcm5lc3Nfc2V0dXAgKCZoLCAxKTsKLQotICBidWZmZXJfYWxsb2NfaGFybmVzc190ZWFyZG93biAoJmgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFNpbXVsYXRlIGFuIGFwcCByZWxlYXNpbmcgdGhlIHBhZCB3aGlsZSB0aGUgc2Vjb25kIGFsbG9jX2J1ZmZlcigpIGlzIGluCi0gKiBwcm9ncmVzcy4gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlbGVhc2Vfd2hpbGVfc2Vjb25kX2J1ZmZlcl9hbGxvYykKLXsKLSAgQnVmZmVyQWxsb2NIYXJuZXNzIGg7Ci0KLSAgYnVmZmVyX2FsbG9jX2hhcm5lc3Nfc2V0dXAgKCZoLCAyKTsKLQotICBidWZmZXJfYWxsb2NfaGFybmVzc190ZWFyZG93biAoJmgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIENoZWNrIHRoZSBpbnRlcm5hbCBwYWRzIG9mIHRlZSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW50ZXJuYWxfbGlua3MpCi17Ci0gIEdzdEVsZW1lbnQgKnRlZTsKLSAgR3N0UGFkICpzaW5rcGFkLCAqc3JjcGFkMSwgKnNyY3BhZDI7Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzOwotICBHVmFsdWUgdmFsMSA9IHsgMCwgfQotICAsIHZhbDIgPSB7Ci0gIDAsfTsKLQotICB0ZWUgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInRlZSIpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodGVlLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLSAgaXQgPSBnc3RfcGFkX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MgKHNpbmtwYWQpOwotICBmYWlsX3VubGVzcyAoaXQgIT0gTlVMTCk7Ci0KLSAgLyogaXRlcmF0b3Igc2hvdWxkIG5vdCByZXR1cm4gYW55dGhpbmcgKi8KLSAgcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdmFsMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX0RPTkUpOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsMSkgPT0gTlVMTCk7Ci0KLSAgc3JjcGFkMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAodGVlLCAic3JjXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQxICE9IE5VTEwpOwotCi0gIC8qIGl0ZXJhdG9yIHNob3VsZCByZXN5bmMgKi8KLSAgcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdmFsMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSA9PSBOVUxMKTsKLSAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotCi0gIC8qIHdlIHNob3VsZCBnZXQgc29tZXRoaW5nIG5vdyAqLwotICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSkgPT0gc3JjcGFkMSk7Ci0KLSAgZ192YWx1ZV9yZXNldCAoJnZhbDEpOwotCi0gIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9ET05FKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJnZhbDEpID09IE5VTEwpOwotCi0gIHNyY3BhZDIgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyY18ldSIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkMiAhPSBOVUxMKTsKLQotICAvKiBpdGVyYXRvciBzaG91bGQgcmVzeW5jICovCi0gIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmdmFsMSkgPT0gTlVMTCk7Ci0gIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0KTsKLQotICAvKiB3ZSBzaG91bGQgZ2V0IG9uZSBvZiB0aGUgMiBwYWRzIG5vdyAqLwotICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSkgPT0gc3JjcGFkMQotICAgICAgfHwgR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSkgPT0gc3JjcGFkMik7Ci0KLSAgLyogYW5kIHRoZSBvdGhlciAqLwotICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwyKSkgPT0gc3JjcGFkMQotICAgICAgfHwgR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwyKSkgPT0gc3JjcGFkMik7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSAhPSBnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwyKSk7Ci0gIGdfdmFsdWVfcmVzZXQgKCZ2YWwxKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbDIpOwotCi0gIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9ET05FKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJnZhbDEpID09IE5VTEwpOwotCi0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci0KLSAgLyogZ2V0IGFuIGl0ZXJhdG9yIGZvciB0aGUgb3RoZXIgZGlyZWN0aW9uICovCi0gIGl0ID0gZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzIChzcmNwYWQxKTsKLSAgZmFpbF91bmxlc3MgKGl0ICE9IE5VTEwpOwotCi0gIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9PSyk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0NBU1QgKGdfdmFsdWVfZ2V0X29iamVjdCAoJnZhbDEpKSA9PSBzaW5rcGFkKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbDEpOwotCi0gIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJnZhbDEpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9ET05FKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQotICBpdCA9IGdzdF9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rcyAoc3JjcGFkMik7Ci0gIGZhaWxfdW5sZXNzIChpdCAhPSBOVUxMKTsKLQotICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9DQVNUIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2YWwxKSkgPT0gc2lua3BhZCk7Ci0gIGdfdmFsdWVfcmVzZXQgKCZ2YWwxKTsKLQotICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2YWwxKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7Ci0KLSAgZ192YWx1ZV91bnNldCAoJnZhbDEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsMik7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLV9mYWtlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1fZmFrZV9jaGFpbl9lcnJvciAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mbG93X2FnZ3JlZ2F0aW9uKQotewotICBHc3RQYWQgKm15c3JjLCAqbXlzaW5rMSwgKm15c2luazI7Ci0gIEdzdFBhZCAqdGVlc2luaywgKnRlZXNyYzEsICp0ZWVzcmMyOwotICBHc3RFbGVtZW50ICp0ZWU7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ0ZXN0L3Rlc3QiKTsKLQotICB0ZWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZWUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHRlZSAhPSBOVUxMKTsKLSAgdGVlc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICh0ZWUsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzICh0ZWVzaW5rICE9IE5VTEwpOwotICB0ZWVzcmMxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmNfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHRlZXNyYzEgIT0gTlVMTCk7Ci0gIHRlZXNyYzIgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyY18ldSIpOwotICBmYWlsX3VubGVzcyAodGVlc3JjMiAhPSBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJDcmVhdGluZyBteXNpbmsxIik7Ci0gIG15c2luazEgPSBnc3RfcGFkX25ldyAoIm15c2luazEiLCBHU1RfUEFEX1NJTkspOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXlzaW5rMSwgX2Zha2VfY2hhaW4pOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2luazEsIFRSVUUpOwotCi0gIEdTVF9ERUJVRyAoIkNyZWF0aW5nIG15c2luazIiKTsKLSAgbXlzaW5rMiA9IGdzdF9wYWRfbmV3ICgibXlzaW5rMiIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChteXNpbmsyLCBfZmFrZV9jaGFpbik7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rMiwgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHICgiQ3JlYXRpbmcgbXlzcmMiKTsKLSAgbXlzcmMgPSBnc3RfcGFkX25ldyAoIm15c3JjIiwgR1NUX1BBRF9TUkMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjLCBUUlVFKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmMsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAobXlzcmMsIGNhcHMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAobXlzcmMsIHRlZXNpbmspID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRlZXNyYzEsIG15c2luazEpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRlZXNyYzIsIG15c2luazIpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodGVlLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotI2lmIDAKLSAgZ3N0X2J1ZmZlcl9zZXRfY2FwcyAoYnVmZmVyLCBjYXBzKTsKLSNlbmRpZgotCi0gIEdTVF9ERUJVRyAoIlRyeSB0byBwdXNoIGEgYnVmZmVyIik7Ci0gIC8qIEZpcnN0IGNoZWNrIGlmIGV2ZXJ5dGhpbmcgd29ya3MgaW4gbm9ybWFsIHN0YXRlICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjLCBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIE9uZSBwYWQgYmVpbmcgaW4gd3Jvbmcgc3RhdGUgbXVzdCByZXN1bHQgaW4gd3Jvbmcgc3RhdGUgKi8KLSAgR1NUX0RFQlVHICgiVHJ5aW5nIHRvIHB1c2ggd2l0aCBteXNpbmsyIGRpc2FibGVkIik7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rMiwgRkFMU0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpOwotCi0gIEdTVF9ERUJVRyAoIlRyeWluZyB0byBwdXNoIHdpdGggbXlzaW5rMiBkaXNhYmxlZCIpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2luazEsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmsyLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmMsCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX0ZMVVNISU5HKTsKLQotICBHU1RfREVCVUcgKCJUcnlpbmcgdG8gcHVzaCB3aXRoIG15c2luazIgYW5kIG15c2luazEgZGlzYWJsZWQiKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmsyLCBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjLAotICAgICAgICAgIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKSA9PSBHU1RfRkxPV19GTFVTSElORyk7Ci0KLSAgLyogVGVzdCBpZiBldmVyeXRoaW5nIHN0aWxsIHdvcmtzIGluIG5vcm1hbCBzdGF0ZSAqLwotICBHU1RfREVCVUcgKCJSZWFjdGl2YXRlIGJvdGggcGFkcyBhbmQgdHJ5IHB1c2hpbmciKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmsxLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmsyLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmMsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgLyogT25lIHVubGlua2VkIHBhZCBtdXN0IHJldHVybiBPSywgdHdvIHVubGlua2VkIHBhZHMgbXVzdCByZXR1cm4gTk9UX0xJTktFRCAqLwotICBHU1RfREVCVUcgKCJQdXNoaW5nIHdpdGggbXlzaW5rMSB1bmxpbmtlZCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF91bmxpbmsgKHRlZXNyYzEsIG15c2luazEpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKLQotICBHU1RfREVCVUcgKCJQdXNoaW5nIHdpdGggbXlzaW5rMiB1bmxpbmtlZCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0ZWVzcmMxLCBteXNpbmsxKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF91bmxpbmsgKHRlZXNyYzIsIG15c2luazIpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKLQotICBHU1RfREVCVUcgKCJQdXNoaW5nIHdpdGggbXlzaW5rMSBBTkQgbXlzaW5rMiB1bmxpbmtlZCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF91bmxpbmsgKHRlZXNyYzEsIG15c2luazEpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCk7Ci0KLSAgLyogVGVzdCBpZiBldmVyeXRoaW5nIHN0aWxsIHdvcmtzIGluIG5vcm1hbCBzdGF0ZSAqLwotICBHU1RfREVCVUcgKCJSZWxpbmsgYm90aCBwYWRzIGFuZCB0cnkgcHVzaGluZyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0ZWVzcmMxLCBteXNpbmsxKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0ZWVzcmMyLCBteXNpbmsyKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKLQotICAvKiBPbmUgcGFkIHJldHVybmluZyBFUlJPUiBzaG91bGQgcmVzdWx0IGluIEVSUk9SICovCi0gIEdTVF9ERUJVRyAoIlB1c2hpbmcgd2l0aCBteXNpbmsxIHJldHVybmluZyBHU1RfRkxPV19FUlJPUiIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXlzaW5rMSwgX2Zha2VfY2hhaW5fZXJyb3IpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX0VSUk9SKTsKLQotICBHU1RfREVCVUcgKCJQdXNoaW5nIHdpdGggbXlzaW5rMiByZXR1cm5pbmcgR1NUX0ZMT1dfRVJST1IiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG15c2luazEsIF9mYWtlX2NoYWluKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG15c2luazIsIF9mYWtlX2NoYWluX2Vycm9yKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmMsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKSA9PSBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX0RFQlVHICgiUHVzaGluZyB3aXRoIG15c2luazEgQU5EIG15c2luazIgcmV0dXJuaW5nIEdTVF9GTE9XX0VSUk9SIik7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChteXNpbmsxLCBfZmFrZV9jaGFpbl9lcnJvcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjLCBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfRVJST1IpOwotCi0gIC8qIEFuZCBub3cgZXZlcnl0aGluZyBzdGlsbCBuZWVkcyB0byB3b3JrICovCi0gIEdTVF9ERUJVRyAoIlRyeSBwdXNoaW5nIHdpdGggZXZlcnl0aGluZyBvayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXlzaW5rMSwgX2Zha2VfY2hhaW4pOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXlzaW5rMiwgX2Zha2VfY2hhaW4pOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyYywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0ZWUsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfdW5saW5rIChteXNyYywgdGVlc2luaykgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3VubGluayAodGVlc3JjMSwgbXlzaW5rMSkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3VubGluayAodGVlc3JjMiwgbXlzaW5rMikgPT0gVFJVRSk7Ci0KLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZWVzaW5rKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGVlc3JjMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlZXNyYzIpOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZWUsIHRlZXNyYzEpOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZWUsIHRlZXNyYzIpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZWUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG15c2luazEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChteXNpbmsyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAobXlzcmMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVxdWVzdF9wYWRzKQotewotICBHc3RFbGVtZW50ICp0ZWU7Ci0gIEdzdFBhZCAqc3JjcGFkMSwgKnNyY3BhZDIsICpzcmNwYWQzLCAqc3JjcGFkNDsKLQotICB0ZWUgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInRlZSIpOwotCi0gIHNyY3BhZDEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyY18ldSIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkMSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX09CSkVDVF9OQU1FIChzcmNwYWQxKSwgInNyY18wIik7Ci0gIHNyY3BhZDIgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyY18xMDAiKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZDIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKEdTVF9PQkpFQ1RfTkFNRSAoc3JjcGFkMiksICJzcmNfMTAwIik7Ci0gIHNyY3BhZDMgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyY18xMCIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkMyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX09CSkVDVF9OQU1FIChzcmNwYWQzKSwgInNyY18xMCIpOwotICBzcmNwYWQ0ID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmNfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZDQgIT0gTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZDIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkNCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWxsb3dfbm90X2xpbmtlZCkKLXsKLSAgR3N0RWxlbWVudCAqdGVlOwotICBHc3RQYWQgKnNyYzEsICpzcmMyOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgICBHU1RfUEFEX1NSQywKLSAgICAgIEdTVF9QQURfQUxXQVlTLAotICAgICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ0ZXN0L3Rlc3QiKTsKLQotICB0ZWUgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInRlZSIpOwotICBmYWlsX3VubGVzcyAodGVlKTsKLSAgZ19vYmplY3Rfc2V0ICh0ZWUsICJhbGxvdy1ub3QtbGlua2VkIiwgVFJVRSwgTlVMTCk7Ci0KLSAgc3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKHRlZSwgJnNyY3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNwYWQsIFRSVUUpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjcGFkLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHRlZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIHNyYzEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyY18ldSIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY3BhZCwgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKLQotICBzcmMyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmNfJXUiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgZ19vYmplY3Rfc2V0ICh0ZWUsICJhbGxvdy1ub3QtbGlua2VkIiwgRkFMU0UsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY3BhZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCk7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAodGVlLCBzcmMxKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX05PVF9MSU5LRUQpOwotCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHRlZSwgc3JjMik7Ci0gIGdfb2JqZWN0X3VucmVmIChzcmMxKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNyYzIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY3BhZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSkgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHRlZSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50ICh0ZWUpOwotCi0gIGZhaWxfaWYgKGJ1ZmZlci0+bWluaV9vYmplY3QucmVmY291bnQgIT0gMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXRlZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ0ZWUiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIC8qIFNldCB0aGUgdGltZW91dCB0byBhIG11Y2ggbGFyZ2VyIHRpbWUgLSAzIG1pbnV0ZXMgKi8KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAxODApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbnVtX2J1ZmZlcnMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RyZXNzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlbGVhc2Vfd2hpbGVfYnVmZmVyX2FsbG9jKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlbGVhc2Vfd2hpbGVfc2Vjb25kX2J1ZmZlcl9hbGxvYyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcm5hbF9saW5rcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mbG93X2FnZ3JlZ2F0aW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlcXVlc3RfcGFkcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hbGxvd19ub3RfbGlua2VkKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHRlZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvdmFsdmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzMTQ4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy92YWx2ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciB0aGUgdmFsdmUgZWxlbWVudAotICoKLSAqIENvcHlyaWdodCAyMDA5IENvbGxhYm9yYSBMdGQuCi0gKiAgQGF1dGhvcjogT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgMjAwOSBOb2tpYSBDb3JwLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0aGFybmVzcy5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdmVfYmFzaWMpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJ2YWx2ZSIpOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGgsICJteWNhcHMiKTsKLQotICAvKiB3aGVuIG5vdCBkcm9wcGluZywgd2UgZG9uJ3QgZHJvcCBidWZmZXJzLi4uLiAqLwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkcm9wIiwgRkFMU0UsIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ3N0X2J1ZmZlcl9uZXcgKCkpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdzdF9idWZmZXJfbmV3ICgpKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDIsIGdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgKGgpKTsKLQotICAvKiB3aGVuIGRyb3BwaW5nLCB0aGUgYnVmZmVycyBkb24ndCBtYWtlIGl0IHRocm91Z2ggKi8KLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZHJvcCIsIFRSVUUsIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgzLCBnc3RfaGFybmVzc19ldmVudHNfcmVjZWl2ZWQgKGgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdzdF9idWZmZXJfbmV3ICgpKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLCBnc3RfYnVmZmVyX25ldyAoKSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgyLCBnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChoKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZhbHZlX3Vwc3RyZWFtX2V2ZW50c19kb250X3NlbmRfc3RpY2t5KQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgidmFsdmUiKTsKLQotICAvKiBzZXQgdG8gZHJvcCAqLwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkcm9wIiwgVFJVRSwgTlVMTCk7Ci0KLSAgLyogc2V0IGNhcHMgdG8gdHJpZ2dlciBzdGlja3ktZXZlbnRzIGJlaW5nIHB1c2hlZCB0byB2YWx2ZSAqLwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAibXljYXBzIik7Ci0KLSAgLyogdmVyaWZ5IG5vIGV2ZW50cyBoYXZlIG1hZGUgaXQgdGhyb3VnaCB5ZXQgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfZXZlbnRzX3JlY2VpdmVkIChoKSk7Ci0KLSAgLyogc3RvcCBkcm9wcGluZyAqLwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkcm9wIiwgRkFMU0UsIE5VTEwpOwotCi0gIC8qIHNlbmQgYW4gdXBzdHJlYW0gZXZlbnQgYW5kIHZlcmlmeSB0aGF0IG5vCi0gICAgIGRvd25zdHJlYW0gZXZlbnRzIHdhcyBwdXNoZWQgYXMgYSByZXN1bHQgb2YgdGhpcyAqLwotICBnc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50IChoLCBnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlICgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfZXZlbnRzX3JlY2VpdmVkIChoKSk7Ci0KLSAgLyogcHVzaCBhIGJ1ZmZlciwgYW5kIHZlcmlmeSB0aGlzIHB1c2hlcyB0aGUgc3RpY2t5IGV2ZW50cyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ3N0X2J1ZmZlcl9uZXcgKCkpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMywgZ3N0X2hhcm5lc3NfZXZlbnRzX3JlY2VpdmVkIChoKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi12YWx2ZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ2YWx2ZSIpOwotICBUQ2FzZSAqdGNfY2hhaW47Ci0KLSAgdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJ2YWx2ZV9iYXNpYyIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdmVfYmFzaWMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdmVfdXBzdHJlYW1fZXZlbnRzX2RvbnRfc2VuZF9zdGlja3kpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAodmFsdmUpCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmMgYi90ZXN0cy9jaGVjay9nZW5lcmljL3NpbmtzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNjA2MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ2VuZXJpYy9zaW5rcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQxMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHNpbmtzCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbSBhdCBmbHVlbmRvIGRvdCBjb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgdm9pZAotcG9wX3N0YXRlX2NoYW5nZV9tZXNzYWdlIChHc3RCdXMgKiBidXMsIEdzdEVsZW1lbnQgKiBzcmMsIEdzdFN0YXRlIG9sZCwKLSAgICBHc3RTdGF0ZSBuZXcsIEdzdFN0YXRlIHBlbmRpbmcpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOwotICBHc3RTdGF0ZSBfb2xkLCBfbmV3LCBfcGVuZGluZzsKLQotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAobWVzc2FnZSAhPSBOVUxMLAotICAgICAgIkV4cGVjdGVkIHN0YXRlIGNoYW5nZSBtZXNzYWdlLCBidXQgZ290IG5vdGhpbmciKTsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChtZXNzYWdlLCAmX29sZCwgJl9uZXcsICZfcGVuZGluZyk7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gKEdzdE9iamVjdCAqKSBzcmMsCi0gICAgICAiVW5leHBlY3RlZCBzdGF0ZSBjaGFuZ2Ugb3JkZXIiKTsKLSAgZmFpbF91bmxlc3MgKG9sZCA9PSBfb2xkLCAiVW5leHBlY3RlZCBvbGQgc3RhdGUiKTsKLSAgZmFpbF91bmxlc3MgKG5ldyA9PSBfbmV3LCAiVW5leHBlY3RlZCBuZXcgc3RhdGUiKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gX3BlbmRpbmcsICJVbmV4cGVjdGVkIHBlbmRpbmcgc3RhdGUiKTsKLQotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci19Ci0KLS8qIGEgc2luayBzaG91bGQgZ28gQVNZTkMgdG8gUEFVU0UuIGZvcmNpbmcgUExBWUlORyBpcyBwb3NzaWJsZSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2luaykKLXsKLSAgR3N0RWxlbWVudCAqc2luazsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gYXN5bmMgc3RhdGUgcmV0dXJuIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIGZvcmNlZCBhc3luYyBzdGF0ZSBjaGFuZ2UiKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssICZjdXJyZW50LCAmcGVuZGluZywgMCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vdCBjaGFuZ2luZyBzdGF0ZSBhc3luYyIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUkVBRFksICJiYWQgY3VycmVudCBzdGF0ZSIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfUExBWUlORywgImJhZCBwZW5kaW5nIHN0YXRlIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gYXN5bmMgZ29pbmcgYmFjayB0byBwYXVzZWQiKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9SRUFEWSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiZmFpbGVkIHRvIGdvIHRvIHJlYWR5Iik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiZmFpbGVkIHRvIGdvIHRvIG51bGwiKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLX0KLQotR1NUX0VORF9URVNUCi0vKiBhIHNpbmsgc2hvdWxkIGdvIEFTWU5DIHRvIFBBVVNFIGFuZCBQTEFZSU5HLCB3aGVuIGxpbmtpbmcgYSBzcmMsIGl0Ci0gKiBzaG91bGQgY29tcGxldGUgdGhlIHN0YXRlIGNoYW5nZS4gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbmtfY29tcGxldGlvbikKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYzsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAic3luYyIsIFRSVUUsIE5VTEwpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBhc3luYyBzdGF0ZSByZXR1cm4iKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssICZjdXJyZW50LCAmcGVuZGluZywgMCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vdCBjaGFuZ2luZyBzdGF0ZSBhc3luYyIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUkVBRFksICJiYWQgY3VycmVudCBzdGF0ZSIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfUExBWUlORywgImJhZCBwZW5kaW5nIHN0YXRlIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImRhdGFyYXRlIiwgMjAwLCAic2l6ZXR5cGUiLCAyLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIHN1Y2Nlc3Mgc3RhdGUgcmV0dXJuIik7Ci0KLSAgLyogbm93IHdhaXQgZm9yIGZpbmFsIHN0YXRlICovCi0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJmYWlsZWQgdG8gY2hhbmdlIHN0YXRlIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QTEFZSU5HLCAiYmFkIGN1cnJlbnQgc3RhdGUiKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgImJhZCBwZW5kaW5nIHN0YXRlIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiZmFpbGVkIHRvIGdvIHRvIG51bGwiKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImZhaWxlZCB0byBnbyB0byBudWxsIik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVAotLyogYSBzaW5rIHNob3VsZCBnbyBBU1lOQyB0byBQQVVTRS4gUEFVU0Ugc2hvdWxkIGNvbXBsZXRlIHdoZW4KLSAqIHByZXJvbGxlZC4gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NyY19zaW5rKQotewotICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7Ci0gIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIGFzeW5jIHN0YXRlIHJldHVybiIpOwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJubyBzdWNjZXNzIHN0YXRlIHJldHVybiIpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjYW5ub3Qgc3RhcnQgcGxheSIpOwotCi0gIHJldCA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBwbGF5aW5nIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QTEFZSU5HLCAibm90IHBsYXlpbmciKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCBwbGF5aW5nIik7Ci0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjYW5ub3QgbnVsbCBwaXBlbGluZSIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotfQotCi1HU1RfRU5EX1RFU1QKLS8qIGEgcGlwZWxpbmUgd2l0aCBsaXZlIHNvdXJjZSBzaG91bGQgcmV0dXJuIE5PX1BSRVJPTEwgaW4KLSAqIFBBVVNFLiBXaGVuIHJlbW92aW5nIHRoZSBsaXZlIHNvdXJjZSBpdCBzaG91bGQgcmV0dXJuIEFTWU5DCi0gKiBmcm9tIHRoZSBzaW5rICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9saXZlc3JjX3JlbW92ZSkKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotCi0gIGdzdF9vYmplY3RfcmVmIChzcmMpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCi0gICAgICAibm8gbm9fcHJlcm9sbCBzdGF0ZSByZXR1cm4iKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNyYywgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJub3QgcGF1c2VkIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcGxheWluZyIpOwotCi0gIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcmMsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJhc3luYyBnb2luZyB0byBudWxsIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCAwKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm90IGFzeW5jIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImFzeW5jIGdvaW5nIHRvIG51bGwiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1QKLS8qIHRoZSBzaW5rIHNob3VsZCBnbyBBU1lOQyB0byBQQVVTRS4gVGhlIGxpdmUgc291cmNlIHNob3VsZCBnbwotICogTk9fUFJFUk9MTCB0byBQQVVTRS4gdGhlIHBpcGVsaW5lIHJldHVybnMgTk9fUFJFUk9MTC4gQW4KLSAqIGF0dGVtcHQgdG8gZ28gdG8gUExBWUlORyB3aWxsIHJldHVybiBBU1lOQy4gcG9sbGluZyBzdGF0ZQotICogY29tcGxldGlvbiBzaG91bGQgcmV0dXJuIFNVQ0NFU1Mgd2hlbiB0aGUgc2luayBpcyBnb25lIHRvCi0gKiBQTEFZSU5HLiAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGl2ZXNyY19zaW5rKQotewotICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotICBHc3RCdXMgKmJ1czsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCi0gICAgICAibm8gbm9fcHJlcm9sbCBzdGF0ZSByZXR1cm4iKTsKLQotICBwb3Bfc3RhdGVfY2hhbmdlX21lc3NhZ2UgKGJ1cywgc2luaywgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwKLSAgICAgIEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOwotICBwb3Bfc3RhdGVfY2hhbmdlX21lc3NhZ2UgKGJ1cywgc3JjLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLAotICAgICAgR1NUX1NUQVRFX1ZPSURfUEVORElORyk7Ci0gIHBvcF9zdGF0ZV9jaGFuZ2VfbWVzc2FnZSAoYnVzLCBwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwKLSAgICAgIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIC8qIHRoaXMgb3JkZXIgb25seSBob2xkcyB0cnVlIGZvciBsaXZlIHNvdXJjZXMgYmVjYXVzZSB0aGV5IGRvIG5vdCBwdXNoCi0gICAgIGJ1ZmZlcnMgaW4gUEFVU0VEICovCi0gIHBvcF9zdGF0ZV9jaGFuZ2VfbWVzc2FnZSAoYnVzLCBzcmMsIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwKLSAgICAgIEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOwotICBwb3Bfc3RhdGVfY2hhbmdlX21lc3NhZ2UgKGJ1cywgcGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwKLSAgICAgIEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKLSAgICAgICJubyBub19wcmVyb2xsIHN0YXRlIHJldHVybiB0aGUgc2Vjb25kIHRpbWUiKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNyYywgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJub3QgcGF1c2VkIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcGxheWluZyIpOwotCi0gIC8qIGRvbid0IGJsb2NrIGhlcmUgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCAmY3VycmVudCwgJnBlbmRpbmcsIDApOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJub3QgYXN5bmMiKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1JFQURZLCAibm90IHJlYWR5Iik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7Ci0KLSAgcmV0ID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAibm90IHBhdXNlZCIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAibm90IHBsYXlpbmciKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vdCBhc3luYyIpOwotICByZXQgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgcGxheWluZyIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUExBWUlORywgIm5vdCBwbGF5aW5nIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcGxheWluZyIpOwotCi0gIC8qIG5vdyB3ZSBoYXZlIGZvdXIgbWVzc2FnZXMgb24gdGhlIGJ1czogc3JjIGZyb20gcGF1c2VkIHRvIHBsYXlpbmcsIHNpbmsgZnJvbQotICAgICByZWFkeSB0byBwYXVzZWQgYW5kIHBhdXNlZCB0byBwbGF5aW5nLCBhbmQgcGlwZWxpbmUgZnJvbSBwYXVzZWQgdG8gcGxheWluZy4KLSAgICAgdGhlIHBpcGVsaW5lIG1lc3NhZ2Ugc2hvdWxkIGJlIGxhc3QsIGFuZCB0aGUgc2luayBtZXNzYWdlcyBzaG91bGQgZ28gaW4KLSAgICAgb3JkZXIsIGJ1dCB0aGUgc3JjIG1lc3NhZ2UgY2FuIGJlIGludGVybGVhdmVkIHdpdGggdGhlIHNpbmsgb25lLiAqLwotICB7Ci0gICAgR3N0TWVzc2FnZSAqbTsKLSAgICBHc3RTdGF0ZSBvbGQsIG5ldywgcGVuZGluZzsKLSAgICBnaW50IG5fc3JjID0gMSwgbl9zaW5rID0gMjsKLQotICAgIHdoaWxlIChuX3NyYyArIG5fc2luayA+IDApIHsKLSAgICAgIG0gPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgR1NUX1NFQ09ORCk7Ci0gICAgICBmYWlsX3VubGVzcyAobSAhPSBOVUxMLCAiZXhwZWN0ZWQgc3RhdGUgY2hhbmdlIG1lc3NhZ2UiKTsKLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG0sICZvbGQsICZuZXcsICZwZW5kaW5nKTsKLSAgICAgIGlmIChHU1RfTUVTU0FHRV9TUkMgKG0pID09IChHc3RPYmplY3QgKikgc3JjKSB7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChuX3NyYyA9PSAxLCAiYWxyZWFkeSBnb3Qgb25lIG1lc3NhZ2UgZnJvbSB0aGUgc3JjIik7Ci0gICAgICAgIG5fc3JjLS07Ci0gICAgICAgIGZhaWxfdW5sZXNzIChvbGQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgInVuZXhwZWN0ZWQgb2xkIik7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChuZXcgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJ1bmV4cGVjdGVkIG5ldyAoZ290ICVkKSIsIG5ldyk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJ1bmV4cGVjdGVkIHBlbmRpbmciKTsKLSAgICAgIH0gZWxzZSBpZiAoR1NUX01FU1NBR0VfU1JDIChtKSA9PSAoR3N0T2JqZWN0ICopIHNpbmspIHsKLSAgICAgICAgaWYgKG5fc2luayA9PSAyKSB7Ci0gICAgICAgICAgZmFpbF91bmxlc3MgKG9sZCA9PSBHU1RfU1RBVEVfUkVBRFksICJ1bmV4cGVjdGVkIG9sZCIpOwotICAgICAgICAgIGZhaWxfdW5sZXNzIChuZXcgPT0gR1NUX1NUQVRFX1BBVVNFRCwgInVuZXhwZWN0ZWQgbmV3Iik7Ci0gICAgICAgICAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgInVuZXhwZWN0ZWQgcGVuZGluZyIpOwotICAgICAgICB9IGVsc2UgaWYgKG5fc2luayA9PSAxKSB7Ci0gICAgICAgICAgZmFpbF91bmxlc3MgKG9sZCA9PSBHU1RfU1RBVEVfUEFVU0VELCAidW5leHBlY3RlZCBvbGQiKTsKLSAgICAgICAgICBmYWlsX3VubGVzcyAobmV3ID09IEdTVF9TVEFURV9QTEFZSU5HLCAidW5leHBlY3RlZCBuZXciKTsKLSAgICAgICAgICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAidW5leHBlY3RlZCBwZW5kaW5nIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbl9zaW5rLS07Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnX2NyaXRpY2FsCi0gICAgICAgICAgICAoIlVuZXhwZWN0ZWQgc3RhdGUgY2hhbmdlIG1lc3NhZ2Ugc3JjICVzICglZCBzcmMgJWQgc2luayBwZW5kaW5nKSIsCi0gICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKEdTVF9NRVNTQUdFX1NSQyAobSkpLCBuX3NyYywgbl9zaW5rKTsKLSAgICAgIH0KLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtKTsKLSAgICB9Ci0gIH0KLQotICBwb3Bfc3RhdGVfY2hhbmdlX21lc3NhZ2UgKGJ1cywgcGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQsIEdTVF9TVEFURV9QTEFZSU5HLAotICAgICAgR1NUX1NUQVRFX1ZPSURfUEVORElORyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGhlIHNpbmsgc2hvdWxkIGdvIEFTWU5DIHRvIFBMQVlJTkcuIFRoZSBzb3VyY2Ugc2hvdWxkIGdvCi0gKiB0byBQTEFZSU5HIHdpdGggU1VDQ0VTUy4gVGhlIHBpcGVsaW5lIHJldHVybnMgQVNZTkMuICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9saXZlc3JjMl9zaW5rKQotewotICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmU7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7Ci0gIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBhc3luYyBzdGF0ZSByZXR1cm4iKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNyYywgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgcGxheWluZyIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUExBWUlORywgIm5vdCBwbGF5aW5nIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcGxheWluZyIpOwotCi0gIHJldCA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBwbGF5aW5nIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QTEFZSU5HLCAibm90IHBsYXlpbmciKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIm5vdCBwbGF5aW5nIik7Ci0KLSAgLyogYW5kIGJhY2sgZG93biAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCi0gICAgICAibm8gbm9fcHJlcm9sbCBzdGF0ZSByZXR1cm4iKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNyYywgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJub3Qgbm9fcHJlcm9sbCIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAibm90IHBhdXNlZCIpOwotCi0gIC8qIHNpbmsgc3RhdGUgaXMgbm90IGtub3duLi4gaXQgbWlnaHQgYmUgcHJlcm9sbGVkIG9yIG5vdCAqLwotCi0gIC8qIGFuZCB0byBSRUFEWSAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFkpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIHN1Y2Nlc3Mgc3RhdGUgcmV0dXJuIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzcmMsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IHN1Y2Nlc3MiKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1JFQURZLCAibm90IHJlYWR5Iik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcmVhZHkiKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IHN1Y2Nlc3MiKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1JFQURZLCAibm90IHJlYWR5Iik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3QgcmVhZHkiKTsKLQotICAvKiBBbmQgZGVzdHJveS4gTXVzdCBiZSBOVUxMICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJubyBzdWNjZXNzIHN0YXRlIHJldHVybiIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGl2ZXNyYzNfc2luaykKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gYXN5bmMgc3RhdGUgcmV0dXJuIik7Ci0KLSAgcmV0ID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IHBsYXlpbmciKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJub3QgcGxheWluZyIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAibm90IHBsYXlpbmciKTsKLQotICAvKiBhbmQgYmFjayBkb3duICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJubyBzdWNjZXNzIHN0YXRlIHJldHVybiIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbG9ja2VkX3NpbmspCi17Ci0gIEdzdEVsZW1lbnQgKnNpbmssICpzcmMsICpwaXBlbGluZTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0KLSAgLyogd2UgZG9uJ3QgbGluayB0aGUgZWxlbWVudHMgKi8KLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCi0gICAgICAibm8gTk9fUFJFUk9MTCBzdGF0ZSByZXR1cm4iKTsKLQotICByZXQgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJub3Qgbm9fcHJlcm9sbCIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiaGF2ZSBwZW5kaW5nIik7Ci0KLSAgLyogdGhlIHNpbmsgaXMgbm93IGFzeW5jIGdvaW5nIGZyb20gcmVhZHkgdG8gcGF1c2VkICovCi0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgJmN1cnJlbnQsICZwZW5kaW5nLCAwKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm90IGFzeW5jIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9SRUFEWSwgIm5vdCByZWFkeSIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOwotCi0gIC8qIGxvY2sgdGhlIHNpbmsgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoc2luaywgVFJVRSk7Ci0KLSAgLyogbW92ZSB0byBQbEFZSU5HLCB0aGUgc2luayBzaG91bGQgcmVtYWluIEFTWU5DLiBUaGUgcGlwZWxpbmUKLSAgICogcmV0dXJucyBBU1lOQyAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIEFTWU5DIHN0YXRlIHJldHVybiIpOwotCi0gIC8qIGJhY2sgdG8gUEFVU0VELCB3ZSBzaG91bGQgZ2V0IE5PX1BSRVJPTEwgYWdhaW4gKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLAotICAgICAgIm5vIE5PX1BSRVJPTEwgc3RhdGUgcmV0dXJuIik7Ci0KLSAgLyogdW5sb2NrIHRoZSBzaW5rICovCi0gIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHNpbmssIEZBTFNFKTsKLQotICAvKiBhbmQgbm93IGV2ZXJ5dGhpbmcgYmFjayBkb3duICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJubyBzdWNjZXNzIHN0YXRlIHJldHVybiIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdW5saW5rZWRfbGl2ZSkKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKmxzcmMsICpwaXBlbGluZTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKLSAgbHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAibHNyYyIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChsc3JjKSwgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBsc3JjKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0KLSAgLyogbGluayBub24gbGl2ZSBzb3VyY2UgdG8gc2luayAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAvKiB3ZSBkb24ndCBsaW5rIHRoZSBzcmNwYWQgb2YgdGhlIGxpdmUgc291cmNlLCBpdCB3aWxsIG5vdCBjb250cmlidXRlIHRvIHRoZQotICAgKiBOT19QUkVST0xMLiAqLwotCi0gIC8qIHNldCBzdGF0ZSB0byBQQVVTRUQsIHRoaXMgc2hvdWxkIHJldHVybiBOT19QUkVST0xMIGJlY2F1c2UgdGhlcmUgaXMgYSBsaXZlCi0gICAqIHNvdXJjZS4gc2luY2UgdGhlIG9ubHkgc2luayBpbiB0aGlzIHBpcGVsaW5lIGlzIGxpbmtlZCB0byBhIG5vbi1saXZlCi0gICAqIHNvdXJjZSwgaXQgd2lsbCBwcmVyb2xsIGV2ZW50dWFsbHkuICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKLSAgICAgICJubyBOT19QUkVST0xMIHN0YXRlIHJldHVybiIpOwotCi0gIC8qIHdhaXQgdGlsbCB0aGUgc2luayBpcyBwcmVyb2xsZWQgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBzdWNjZXNzIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJoYXZlIHBsYXlpbmciKTsKLQotICAvKiB0aGUgcGlwZWxpbmUgc2hvdWxkIHN0aWxsIHJldHVybiBOT19QUkVST0xMICovCi0gIHJldCA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwgIm5vdCBub19wcmVyb2xsIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJoYXZlIHBsYXlpbmciKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IFNVQ0NFU1MiKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVsYXllZF9hc3luYykKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotCi0gIC8qIGFkZCBzb3VyY2UsIGRvbid0IGFkZCBzaW5rIHlldCAqLwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKLSAgICAgICJubyBOT19QUkVST0xMIHN0YXRlIHJldHVybiIpOwotCi0gIC8qIGFkZCBzaW5rIG5vdyBhbmQgc2V0IHRvIFBBVVNFRCAqLwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICAvKiBUaGlzIHdpbGwgbWFrZSB0aGUgYmluIG5vdGljZSBhbiBBU1lOQyBlbGVtZW50LiAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBBU1lOQyBzdGF0ZSByZXR1cm4iKTsKLQotICAvKiB3ZSBzaG91bGQgc3RpbGwgYmUgTk9fUFJFUk9MTCBub3cgYWx0aG91Z2ggdGhlcmUgaXMgYW4gYXN5bmMgZWxlbWVudCBpbiB0aGUKLSAgICogcGlwZWxpbmUuICovCi0gIHJldCA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwgIm5vdCBOT19QUkVST0xMIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QQVVTRUQsICJub3QgcGF1c2VkIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJoYXZlIHBlbmRpbmciKTsKLQotICAvKiBsaW5rIGxpdmUgc291cmNlIHRvIHNpbmsgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7Ci0gIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBBU1lOQyBzdGF0ZSByZXR1cm4iKTsKLQotICAvKiB3ZSBzaG91bGQgZ2V0IFNVQ0NFU1Mgbm93ICovCi0gIHJldCA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBOT19QUkVST0xMIik7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IEdTVF9TVEFURV9QTEFZSU5HLCAibm90IFBMQVlJTkciKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgImhhdmUgcGVuZGluZyIpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgU1VDQ0VTUyIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRlZF9hc3luYykKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotCi0gIC8qIGFkZCBzb3VyY2UsIGRvbid0IGFkZCBzaW5rIHlldCAqLwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKLSAgICAgICJubyBOT19QUkVST0xMIHN0YXRlIHJldHVybiIpOwotCi0gIC8qIHNldCBzaW5rIHRvIFBBVVNFRCB3aXRob3V0IGFkZGluZyBpdCB0byB0aGUgcGlwZWxpbmUgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gQVNZTkMgc3RhdGUgcmV0dXJuIik7Ci0KLSAgLyogYWRkIHNpbmsgbm93LCBwaXBlbGluZSBzaG91bGQgbm90aWNlIHRoZSBhc3luYyBlbGVtZW50ICovCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOwotCi0gIC8qIHdlIHNob3VsZCBzdGlsbCBiZSBOT19QUkVST0xMIG5vdyBhbHRob3VnaCB0aGVyZSBpcyBhbiBhc3luYyBlbGVtZW50IGluIHRoZQotICAgKiBwaXBlbGluZS4gKi8KLSAgcmV0ID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAibm90IE5PX1BSRVJPTEwiKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgImhhdmUgcGVuZGluZyIpOwotCi0gIC8qIGxpbmsgbGl2ZSBzb3VyY2UgdG8gc2luayAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIEFTWU5DIHN0YXRlIHJldHVybiIpOwotCi0gIC8qIHdlIHNob3VsZCBnZXQgU1VDQ0VTUyBub3cgKi8KLSAgcmV0ID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IE5PX1BSRVJPTEwiKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJub3QgUExBWUlORyIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiaGF2ZSBwZW5kaW5nIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBTVUNDRVNTIik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FkZGVkX2FzeW5jMikKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLQotICAvKiBhZGQgc291cmNlLCBkb24ndCBhZGQgc2luayB5ZXQgKi8KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKLSAgLyogbmVlZCB0byBsb2NrIHN0YXRlIGhlcmUgb3IgdGhlIHBpcGVsaW5lIG1pZ2h0IGdvIGluIGVycm9yICovCi0gIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHNyYywgVFJVRSk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm8gU1VDQ0VTUyBzdGF0ZSByZXR1cm4iKTsKLQotICAvKiBzZXQgc2luayB0byBQQVVTRUQgd2l0aG91dCBhZGRpbmcgaXQgdG8gdGhlIHBpcGVsaW5lICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIEFTWU5DIHN0YXRlIHJldHVybiIpOwotCi0gIC8qIGFkZCBzaW5rIG5vdywgcGlwZWxpbmUgc2hvdWxkIG5vdGljZSB0aGUgYXN5bmMgZWxlbWVudCAqLwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICAvKiB3ZSBzaG91bGQgYmUgQVNZTkMgbm93IGJlY2F1c2UgdGhlcmUgaXMgYW4gYXN5bmMgZWxlbWVudCBpbiB0aGUKLSAgICogcGlwZWxpbmUuICovCi0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgMCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vdCBBU1lOQyIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgU1VDQ0VTUyIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRfbGl2ZSkKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLQotICAvKiBhZGQgc2luaywgZG9uJ3QgYWRkIHNvdXJjMyB5ZXQgKi8KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgIm5vIEFTWU5DIHN0YXRlIHJldHVybiIpOwotCi0gIC8qIHNldCBzb3VyY2UgdG8gUEFVU0VEIHdpdGhvdXQgYWRkaW5nIGl0IHRvIHRoZSBwaXBlbGluZSAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLAotICAgICAgIm5vIE5PX1BSRVJPTEwgc3RhdGUgcmV0dXJuIik7Ci0KLSAgLyogYWRkIHNvdXJjZSBub3csIHBpcGVsaW5lIHNob3VsZCBub3RpY2UgdGhlIE5PX1BSRVJPTEwgZWxlbWVudCAqLwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOwotCi0gIC8qIHdlIHNob3VsZCBiZSBOT19QUkVST0xMIG5vdyBiZWNhdXNlIHRoZXJlIGlzIGEgTk9fUFJFUk9MTCBlbGVtZW50IGluIHRoZQotICAgKiBwaXBlbGluZS4gKi8KLSAgcmV0ID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAibm90IE5PX1BSRVJPTEwiKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BBVVNFRCwgIm5vdCBwYXVzZWQiKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgImhhdmUgcGVuZGluZyIpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgU1VDQ0VTUyIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR011dGV4IGJsb2NrZWRfbG9jazsKLXN0YXRpYyBHQ29uZCBibG9ja2VkX2NvbmQ7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcGFkX2Jsb2NrZWRfY2IgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnX211dGV4X2xvY2sgKCZibG9ja2VkX2xvY2spOwotICBHU1RfREVCVUcgKCJzcmNwYWQgYmxvY2tlZDogJWQsIHNlbmRpbmcgc2lnbmFsIiwgaW5mby0+dHlwZSk7Ci0gIGdfY29uZF9zaWduYWwgKCZibG9ja2VkX2NvbmQpOwotICBnX211dGV4X3VubG9jayAoJmJsb2NrZWRfbG9jayk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FkZF9saXZlMikKLXsKLSAgR3N0RWxlbWVudCAqc2luaywgKnNyYywgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLSAgZ3Vsb25nIGlkOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0KLSAgLyogYWRkIHNpbmssIGRvbid0IGFkZCBzb3VyY2UgeWV0ICovCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOwotCi0gIC8qIHNldCB0aGUgcGlwZWxpbmUgdG8gUExBWUlORy4gVGhpcyB3aWxsIHJldHVybiBBU1lOQyBvbiBSRUFEWS0+UEFVU0VEICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gQVNZTkMgc3RhdGUgcmV0dXJuIik7Ci0KLSAgZ19tdXRleF9sb2NrICgmYmxvY2tlZF9sb2NrKTsKLQotICBHU1RfREVCVUcgKCJibG9ja2luZyBzcmNwYWQiKTsKLSAgLyogYmxvY2sgc291cmNlIHBhZCAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLX0RPV05TVFJFQU0sCi0gICAgICBwYWRfYmxvY2tlZF9jYiwgTlVMTCwgTlVMTCk7Ci0KLSAgLyogc2V0IHNvdXJjZSB0byBQQVVTRUQgd2l0aG91dCBhZGRpbmcgaXQgdG8gdGhlIHBpcGVsaW5lICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsCi0gICAgICAibm8gTk9fUFJFUk9MTCBzdGF0ZSByZXR1cm4iKTsKLQotICAvKiBhZGQgc291cmNlIG5vdywgcGlwZWxpbmUgc2hvdWxkIG5vdGljZSB0aGUgTk9fUFJFUk9MTCBlbGVtZW50LiBUaGlzCi0gICAqIHNob3VsZCB0cmlnZ2VyIGFzIGNvbW1pdCBvZiB0aGUgQVNZTkMgcGlwZWxpbmUgYW5kIG1ha2UgaXQgY29udGludWUKLSAgICogdG8gUExBWUlORy4gV2UgYmxvY2tlZCB0aGUgc291cmNlIHBhZCBzbyB0aGF0IHdlIGRvbid0IGdldCBhbiB1bmxpbmtlZAotICAgKiBlcnJvci4gKi8KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKLQotICAvKiB3YWl0IGZvciBwYWQgYmxvY2tlZCwgdGhpcyBtZWFucyB0aGUgc291cmNlIGlzIG5vdyBQTEFZSU5HLiAqLwotICBnX2NvbmRfd2FpdCAoJmJsb2NrZWRfY29uZCwgJmJsb2NrZWRfbG9jayk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmYmxvY2tlZF9sb2NrKTsKLQotICBHU1RfREVCVUcgKCJsaW5raW5nIHBhZHMiKTsKLQotICAvKiBsaW5rIHRvIHNpbmsgKi8KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIEdTVF9ERUJVRyAoInVuYmxvY2tpbmcgc3JjcGFkIik7Ci0KLSAgLyogYW5kIHVuYmxvY2sgKi8KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyY3BhZCwgaWQpOwotCi0gIEdTVF9ERUJVRyAoImdldHRpbmcgc3RhdGUiKTsKLQotICAvKiB3ZSBzaG91bGQgYmUgU1VDQ0VTUyBub3cgYW5kIFBMQVlJTkcgKi8KLSAgcmV0ID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAibm90IFNVQ0NFU1MiKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcsICJub3QgUExBWUlORyIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiaGF2ZSBwZW5kaW5nIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vdCBTVUNDRVNTIik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Jpbl9saXZlKQotewotICBHc3RFbGVtZW50ICpzaW5rLCAqc3JjLCAqcGlwZWxpbmUsICpiaW47Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZzsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGJpbiA9IGdzdF9iaW5fbmV3ICgiYmluIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJpcy1saXZlIiwgVFJVRSwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIHNyYyk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBzaW5rKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYmluKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAvKiBQQVVTRUQgcmV0dXJucyBOT19QUkVST0xMIGJlY2F1c2Ugb2YgdGhlIGxpdmUgc291cmNlICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwKLSAgICAgICJubyBOT19QUkVST0xMIHN0YXRlIHJldHVybiIpOwotICByZXQgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJub3QgTk9fUFJFUk9MTCIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VELCAibm90IHBhdXNlZCIpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAibm90IHZvaWQgcGVuZGluZyIpOwotCi0gIC8qIHdoZW4gZ29pbmcgdG8gUExBWUlORywgdGhlIHNpbmsgc2hvdWxkIGdvIHRvIFBMQVlJTkcgQVNZTkMgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJub3QgQVNZTkMiKTsKLQotICAvKiBub3cgd2FpdCBmb3IgUExBWUlORyB0byBjb21wbGV0ZSAqLwotICByZXQgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJub3QgcGxheWluZyIpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUExBWUlORywgIm5vdCBwbGF5aW5nIik7Ci0gIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcsICJub3Qgdm9pZCBwZW5kaW5nIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNhbm5vdCBudWxsIHBpcGVsaW5lIik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Qgc3RhdGljIGdwb2ludGVyCi1zZW5kX2VvcyAoR3N0UGFkICogc2lua3BhZCkKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHJldCA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotCi0gIHJldHVybiBHSU5UX1RPX1BPSU5URVIgKHJldCk7Ci19Ci0KLS8qIHB1c2ggYSBidWZmZXIgd2l0aCBhIHZlcnkgbG9uZyBkdXJhdGlvbiBpbiBhIGZha2VzaW5rLCB0aGVuIHB1c2ggYW4gRU9TCi0gKiBldmVudC4gZmFrZXNpbmsgc2hvdWxkIGVtaXQgRU9TIGFmdGVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIGV4cGlyZWQuCi0gKiBHb2luZyB0byBQQVVTRUQsIGhvd2V2ZXIgc2hvdWxkIG5vdCByZXR1cm4gQVNZTkMgd2hpbGUgcHJvY2Vzc2luZyB0aGUKLSAqIGJ1ZmZlci4gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zha2VfZW9zKQotewotICBHc3RFbGVtZW50ICpzaW5rLCAqcGlwZWxpbmU7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdUaHJlYWQgKnRocmVhZDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzeW5jIiwgVFJVRSwgTlVMTCk7Ci0KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOX0NBU1QgKHBpcGVsaW5lKSwgc2luayk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBBU1lOQyBzdGF0ZSByZXR1cm4iKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICAvKiBwdXNoIGJ1ZmZlciBvZiAxMDAgc2Vjb25kcywgc2luY2UgaXQgaGFzIGEgdGltZXN0YW1wIG9mIDAsIGl0IHNob3VsZCBiZQotICAgKiByZW5kZXJlZCBpbW1lZGlhdGVseSBhbmQgdGhlIGNoYWluIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gaW1tZWRpYXRlbHkgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDEwMCAqIEdTVF9TRUNPTkQ7Ci0gIHJlcyA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0ssICJubyBPSyBmbG93IHJldHVybiIpOwotCi0gIC8qIHdhaXQgZm9yIHByZXJvbGwsIHRoaXMgc2hvdWxkIGhhcHBlbiByZWFsbHkgc29vbi4gKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgLTEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIFNVQ0NFU1Mgc3RhdGUgcmV0dXJuIik7Ci0KLSAgLyogcHVzaCBFT1MsIHRoaXMgd2lsbCBibG9jayBmb3IgdXAgdG8gMTAwIHNlY29uZHMsIHVudGlsIHRoZSBwcmV2aW91cwotICAgKiBidWZmZXIgaGFzIGZpbmlzaGVkLiBXZSB0aGVyZWZvcmUgcHVzaCBpdCBpbiBhbm90aGVyIHRocmVhZCBzbyB3ZSBjYW4gZG8KLSAgICogc29tZXRoaW5nIGVsc2Ugd2hpbGUgaXQgYmxvY2tzLiAqLwotICB0aHJlYWQgPQotICAgICAgZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIChHVGhyZWFkRnVuYykgc2VuZF9lb3MsIHNpbmtwYWQsIE5VTEwpOwotICBmYWlsX2lmICh0aHJlYWQgPT0gTlVMTCwgIm5vIHRocmVhZCIpOwotCi0gIC8qIHdhaXQgYSB3aGlsZSBzbyB0aGF0IHRoZSB0aHJlYWQgbWFuYWdlcyB0byBzdGFydCBhbmQgcHVzaCB0aGUgRU9TICovCi0gIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyk7Ci0KLSAgLyogdGhpcyBzaG91bGQgY2FuY2VsIHJlbmRlcmluZyBvZiB0aGUgRU9TIGV2ZW50IGFuZCBzaG91bGQgcmV0dXJuIFNVQ0NFU1MKLSAgICogYmVjYXVzZSB0aGUgc2luayBpcyBub3cgcHJlcm9sbGVkIG9uIHRoZSBFT1MuICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIFNVQ0NFU1Mgc3RhdGUgcmV0dXJuIik7Ci0KLSAgLyogd2UgY2FuIHVucmVmIHRoZSBzaW5rcGFkIG5vdywgd2UncmUgZG9uZSB3aXRoIGl0ICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIC8qIHdhaXQgZm9yIGEgc2Vjb25kLCB1c2UgdGhlIGRlYnVnIGxvZyB0byBzZWUgdGhhdCBiYXNlc2luayBkb2VzIG5vdCBkaXNjYXJkCi0gICAqIHRoZSBFT1MgKi8KLSAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDKTsKLQotICAvKiBnbyBiYWNrIHRvIFBMQVlJTkcsIHdoaWNoIG1lYW5zIHdhaXRpbmcgc29tZSBtb3JlIGluIEVPUywgY2hlY2sgZGVidWcgbG9nCi0gICAqIHRvIHNlZSB0aGlzIGhhcHBlbi4gKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIFNVQ0NFU1Mgc3RhdGUgcmV0dXJuIik7Ci0gIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyk7Ci0KLSAgLyogdGVhcmRvd24gYW5kIGNsZWFudXAgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIm5vIFNVQ0NFU1Mgc3RhdGUgcmV0dXJuIik7Ci0KLSAgLyogd2UgY2FuIGpvaW4gbm93ICovCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRoaXMgdmFyaWFibGUgaXMgdXBkYXRlZCBpbiB0aGUgc2FtZSB0aHJlYWQsIGZpcnN0IGl0IGlzIHNldCBieSB0aGUKLSAqIGhhbmRvZmYtcHJlcm9sbCBzaWduYWwsIHRoZW4gaXQgaXMgY2hlY2tlZCB3aGVuIHRoZSBBU1lOQ19ET05FIGlzIHBvc3RlZCBvbgotICogdGhlIGJ1cyAqLwotc3RhdGljIGdib29sZWFuIGhhdmVfcHJlcm9sbCA9IEZBTFNFOwotCi1zdGF0aWMgdm9pZAotYXN5bmNfZG9uZV9oYW5kb2ZmIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVmZmVyICogYnVmLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0RWxlbWVudCAqIHNpbmspCi17Ci0gIEdTVF9ERUJVRyAoIndlIGhhdmUgdGhlIHByZXJvbGwgYnVmZmVyIik7Ci0gIGhhdmVfcHJlcm9sbCA9IFRSVUU7Ci19Ci0KLS8qIHdoZW4gd2UgZ2V0IHRoZSBBU1lOQ19ET05FLCBxdWVyeSB0aGUgcG9zaXRpb24gKi8KLXN0YXRpYyBHc3RCdXNTeW5jUmVwbHkKLWFzeW5jX2RvbmVfZnVuYyAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBHc3RFbGVtZW50ICogc2luaykKLXsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfQVNZTkNfRE9ORSkgewotICAgIGdpbnQ2NCBwb3NpdGlvbjsKLQotICAgIEdTVF9ERUJVRyAoIndlIGhhdmUgQVNZTkNfRE9ORSBub3ciKTsKLSAgICBmYWlsX3VubGVzcyAoaGF2ZV9wcmVyb2xsID09IFRSVUUsICJubyBwcmVyb2xsIGJ1ZmZlciByZWNlaXZlZCIpOwotCi0gICAgLyogZ2V0IHRoZSBwb3NpdGlvbiBub3cgKi8KLSAgICBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pOwotCi0gICAgR1NUX0RFQlVHICgid2UgaGF2ZSBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHBvc2l0aW9uKSk7Ci0KLSAgICBmYWlsX3VubGVzcyAocG9zaXRpb24gPT0gMTAgKiBHU1RfU0VDT05ELCAicG9zaXRpb24gaXMgd3JvbmciKTsKLSAgfQotCi0gIC8qIHdlIG11c3QgdW5yZWYgdGhlIG1lc3NhZ2UgaWYgd2UgcmV0dXJuIERST1AgKi8KLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgLyogd2UgY2FuIGRyb3AgdGhlIG1lc3NhZ2UsIG5vdGhpbmcgaXMgbGlzdGVuaW5nIGZvciBpdC4gKi8KLSAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfYnVmZmVyIChHc3RQYWQgKiBzaW5rcGFkKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgLyogcHVzaCBhIHNlY29uZCBidWZmZXIgKi8KLSAgR1NUX0RFQlVHICgicHVzaGluZyBsYXN0IGJ1ZmZlciIpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAyMDAgKiBHU1RfU0VDT05EOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMTAwICogR1NUX1NFQ09ORDsKLQotICAvKiB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhbGx5IGJsb2NrICovCi0gIHJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX0ZMT1dfT0ssICJubyBPSyBmbG93IHJldHVybiIpOwotfQotCi0vKiB3aGVuIHdlIGdldCB0aGUgQVNZTkNfRE9ORSBtZXNzYWdlIGZyb20gYSBzaW5rLCB3ZSB3YW50IHRoZSBzaW5rIHRvIGJlIGFibGUKLSAqIHRvIHJlcG9ydCB0aGUgZHVyYXRpb24gYW5kIHBvc2l0aW9uLiBUaGUgc2luayBzaG91bGQgYWxzbyBoYXZlIGNhbGxlZCB0aGUKLSAqIHJlbmRlciBtZXRob2QuICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hc3luY19kb25lKQotewotICBHc3RFbGVtZW50ICpzaW5rOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBnYm9vbGVhbiByZXM7Ci0gIEdzdEJ1cyAqYnVzOwotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIGdpbnQ2NCBwb3NpdGlvbjsKLSAgZ2Jvb2xlYW4gcXJldDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAic3luYyIsIFRSVUUsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHNpbmssICJwcmVyb2xsLWhhbmRvZmYiLCAoR0NhbGxiYWNrKSBhc3luY19kb25lX2hhbmRvZmYsCi0gICAgICBzaW5rKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJzaW5rIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAibm8gQVNZTkMgc3RhdGUgcmV0dXJuIik7Ci0KLSAgLyogc2V0IGJ1cyBvbiBlbGVtZW50IHN5bmNocm9ub3VzbHkgbGlzdGVuIGZvciBBU1lOQ19ET05FICovCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChzaW5rLCBidXMpOwotICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKGJ1cywgKEdzdEJ1c1N5bmNIYW5kbGVyKSBhc3luY19kb25lX2Z1bmMsIHNpbmssCi0gICAgICBOVUxMKTsKLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLQotICAvKiBtYWtlIG5ld3NlZ21lbnQsIHRoaXMgc2V0cyB0aGUgcG9zaXRpb24gdG8gMTBzZWMgd2hlbiB0aGUgYnVmZmVyIHByZXJvbGxzICovCi0gIEdTVF9ERUJVRyAoInNlbmRpbmcgc2VnbWVudCIpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgc2VnbWVudC50aW1lID0gMTAgKiBHU1RfU0VDT05EOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0gIHJlcyA9IGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotCi0gIC8qIFdlIGhhdmUgbm90IHlldCByZWNlaXZlZCBhbnkgYnVmZmVycyBzbyB3ZSBhcmUgc3RpbGwgaW4gdGhlIFJFQURZIHN0YXRlLAotICAgKiB0aGUgcG9zaXRpb24gaXMgdGhlcmVmb3JlIHN0aWxsIG5vdCBxdWVyeWFibGUuICovCi0gIHBvc2l0aW9uID0gLTE7Ci0gIHFyZXQgPSBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pOwotICBmYWlsX3VubGVzcyAocXJldCA9PSBUUlVFLCAicG9zaXRpb24gd3JvbmciKTsKLSAgZmFpbF91bmxlc3MgKHBvc2l0aW9uID09IDEwICogR1NUX1NFQ09ORCwgInBvc2l0aW9uIGlzIHdyb25nIik7Ci0KLSAgLyogbGFzdCBidWZmZXIsIGJsb2NrcyBiZWNhdXNlIHByZXJvbGwgcXVldWUgaXMgZmlsbGVkLiBTdGFydCB0aGUgcHVzaCBpbiBhCi0gICAqIG5ldyB0aHJlYWQgc28gdGhhdCB3ZSBjYW4gY2hlY2sgdGhlIHBvc2l0aW9uICovCi0gIEdTVF9ERUJVRyAoInN0YXJ0aW5nIHRocmVhZCIpOwotICB0aHJlYWQgPQotICAgICAgZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIChHVGhyZWFkRnVuYykgc2VuZF9idWZmZXIsIHNpbmtwYWQsIE5VTEwpOwotICBmYWlsX2lmICh0aHJlYWQgPT0gTlVMTCwgIm5vIHRocmVhZCIpOwotCi0gIEdTVF9ERUJVRyAoIndhaXRpbmcgMSBzZWNvbmQiKTsKLSAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDKTsKLSAgR1NUX0RFQlVHICgid2FpdGluZyBkb25lIik7Ci0KLSAgLyogY2hlY2sgaWYgcG9zaXRpb24gaXMgc3RpbGwgMTAgc2Vjb25kcy4gVGhpcyBpcyByYWN5IGJlY2F1c2UgIHRoZSBhYm92ZQotICAgKiB0aHJlYWQgbWlnaHQgbm90IHlldCBoYXZlIHN0YXJ0ZWQgdGhlIHB1c2gsIGJlY2F1c2Ugb2YgdGhlIGFib3ZlIHNsZWVwLAotICAgKiB0aGlzIGlzIHZlcnkgdW5saWtlbHksIHRob3VnaC4gKi8KLSAgZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnBvc2l0aW9uKTsKLSAgR1NUX0RFQlVHICgic2Vjb25kIGJ1ZmZlciBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChwb3NpdGlvbikpOwotICBmYWlsX3VubGVzcyAocG9zaXRpb24gPT0gMTAgKiBHU1RfU0VDT05ELCAicG9zaXRpb24gaXMgd3JvbmciKTsKLQotICAvKiBub3cgd2UgZ28gdG8gcGxheWluZy4gVGhpcyBzaG91bGQgdW5sb2NrIGFuZCBzdG9wIHRoZSBhYm92ZSB0aHJlYWQuICovCi0gIEdTVF9ERUJVRyAoImdvaW5nIHRvIFBMQVlJTkciKTsKLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgLyogam9pbiB0aGUgdGhyZWFkLiBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhlIHNpbmsgcHJvY2Vzc2VkIHRoZSBsYXN0IGJ1ZmZlcgotICAgKiBhbmQgdGhlIHBvc2l0aW9uIHNob3VsZCBub3cgYmUgMjEwIHNlY29uZHM7IHRoZSB0aW1lIG9mIHRoZSBsYXN0IGJ1ZmZlciB3ZQotICAgKiBwdXNoZWQuIFRoZSBlbGVtZW50IGhhcyBubyBjbG9jayBvciBiYXNlLXRpbWUgc28gaXQgb25seSByZXBvcnRzIHRoZQotICAgKiBsYXN0IHNlZW4gdGltZXN0YW1wIG9mIHRoZSBidWZmZXIsIGl0IGRvZXMgbm90IGtub3cgaG93IG11Y2ggb2YgdGhlIGJ1ZmZlcgotICAgKiBpcyBjb25zdW1lZC4gKi8KLSAgR1NUX0RFQlVHICgiam9pbmluZyB0aHJlYWQiKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLQotICBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pOwotICBHU1RfREVCVUcgKCJsYXN0IGJ1ZmZlciBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChwb3NpdGlvbikpOwotICBmYWlsX3VubGVzcyAocG9zaXRpb24gPT0gMjEwICogR1NUX1NFQ09ORCwgInBvc2l0aW9uIGlzIHdyb25nIik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHdoZW4gd2UgZ2V0IHRoZSBBU1lOQ19ET05FLCBxdWVyeSB0aGUgcG9zaXRpb24gKi8KLXN0YXRpYyBHc3RCdXNTeW5jUmVwbHkKLWFzeW5jX2RvbmVfZW9zX2Z1bmMgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgR3N0RWxlbWVudCAqIHNpbmspCi17Ci0gIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUpIHsKLSAgICBnaW50NjQgcG9zaXRpb247Ci0KLSAgICBHU1RfREVCVUcgKCJ3ZSBoYXZlIEFTWU5DX0RPTkUgbm93Iik7Ci0KLSAgICAvKiBnZXQgdGhlIHBvc2l0aW9uIG5vdyAqLwotICAgIGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzaW5rLCBHU1RfRk9STUFUX1RJTUUsICZwb3NpdGlvbik7Ci0KLSAgICBHU1RfREVCVUcgKCJ3ZSBoYXZlIHBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocG9zaXRpb24pKTsKLQotICAgIGZhaWxfdW5sZXNzIChwb3NpdGlvbiA9PSAxMCAqIEdTVF9TRUNPTkQsICJwb3NpdGlvbiBpcyB3cm9uZyIpOwotICB9Ci0gIC8qIHdlIG11c3QgdW5yZWYgdGhlIG1lc3NhZ2UgaWYgd2UgcmV0dXJuIERST1AgKi8KLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIC8qIHdlIGNhbiBkcm9wIHRoZSBtZXNzYWdlLCBub3RoaW5nIGlzIGxpc3RlbmluZyBmb3IgaXQuICovCi0gIHJldHVybiBHU1RfQlVTX0RST1A7Ci19Ci0KLS8qIHdoZW4gd2UgZ2V0IHRoZSBBU1lOQ19ET05FIG1lc3NhZ2UgZnJvbSBhIHNpbmssIHdlIHdhbnQgdGhlIHNpbmsgdG8gYmUgYWJsZQotICogdG8gcmVwb3J0IHRoZSBkdXJhdGlvbiBhbmQgcG9zaXRpb24uIFRoZSBzaW5rIHNob3VsZCBhbHNvIGhhdmUgY2FsbGVkIHRoZQotICogcmVuZGVyIG1ldGhvZC4gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX2RvbmVfZW9zKQotewotICBHc3RFbGVtZW50ICpzaW5rOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBnYm9vbGVhbiByZXM7Ci0gIEdzdEJ1cyAqYnVzOwotICBnYm9vbGVhbiBxcmV0OwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIGdpbnQ2NCBwb3NpdGlvbjsKLSAgR1RocmVhZCAqdGhyZWFkOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAic3luYyIsIFRSVUUsIE5VTEwpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMsICJubyBBU1lOQyBzdGF0ZSByZXR1cm4iKTsKLQotICAvKiBzZXQgYnVzIG9uIGVsZW1lbnQgc3luY2hyb25vdXNseSBsaXN0ZW4gZm9yIEFTWU5DX0RPTkUgKi8KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKHNpbmssIGJ1cyk7Ci0gIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoYnVzLCAoR3N0QnVzU3luY0hhbmRsZXIpIGFzeW5jX2RvbmVfZW9zX2Z1bmMsIHNpbmssCi0gICAgICBOVUxMKTsKLQotICAvKiBtYWtlIG5ld3NlZ21lbnQsIHRoaXMgc2V0cyB0aGUgcG9zaXRpb24gdG8gMTBzZWMgd2hlbiB0aGUgYnVmZmVyIHByZXJvbGxzICovCi0gIEdTVF9ERUJVRyAoInNlbmRpbmcgc2VnbWVudCIpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgc2VnbWVudC50aW1lID0gMTAgKiBHU1RfU0VDT05EOwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotICByZXMgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGV2ZW50KTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLQotICAvKiBXZSBoYXZlIG5vdCB5ZXQgcmVjZWl2ZWQgYW55IGJ1ZmZlcnMgc28gd2UgYXJlIHN0aWxsIGluIHRoZSBSRUFEWSBzdGF0ZSwKLSAgICogdGhlIHBvc2l0aW9uIGlzIHRoZXJlZm9yZSBzdGlsbCBub3QgcXVlcnlhYmxlLiAqLwotICBwb3NpdGlvbiA9IC0xOwotICBxcmV0ID0gZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHNpbmssIEdTVF9GT1JNQVRfVElNRSwgJnBvc2l0aW9uKTsKLSAgZmFpbF91bmxlc3MgKHFyZXQgPT0gVFJVRSwgInBvc2l0aW9uIHdyb25nIik7Ci0gIGZhaWxfdW5sZXNzIChwb3NpdGlvbiA9PSAxMCAqIEdTVF9TRUNPTkQsICJwb3NpdGlvbiBpcyB3cm9uZyIpOwotCi0gIC8qIFNpbmNlIHdlIGFyZSBwYXVzZWQgYW5kIHRoZSBwcmVyb2xsIHF1ZXVlIGhhcyBhIGxlbmd0aCBvZiAxLCB0aGlzIGZ1bmN0aW9uCi0gICAqIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LiBUaGUgRU9TIHdpbGwgY29tcGxldGUgdGhlIHByZXJvbGwgYW5kIHRoZQotICAgKiBwb3NpdGlvbiBzaG91bGQgbm93IGJlIDEwIHNlY29uZHMuICovCi0gIEdTVF9ERUJVRyAoInB1c2hpbmcgRU9TIik7Ci0gIEdTVF9ERUJVRyAoInN0YXJ0aW5nIHRocmVhZCIpOwotICB0aHJlYWQgPQotICAgICAgZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIChHVGhyZWFkRnVuYykgc2VuZF9lb3MsIHNpbmtwYWQsIE5VTEwpOwotICBmYWlsX2lmICh0aHJlYWQgPT0gTlVMTCwgIm5vIHRocmVhZCIpOwotCi0gIC8qIHdhaXQgZm9yIHByZXJvbGwgKi8KLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzaW5rLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogY2hlY2sgaWYgcG9zaXRpb24gaXMgc3RpbGwgMTAgc2Vjb25kcyAqLwotICBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlvbiAoc2luaywgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pOwotICBHU1RfREVCVUcgKCJFT1MgcG9zaXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChwb3NpdGlvbikpOwotICBmYWlsX3VubGVzcyAocG9zaXRpb24gPT0gMTAgKiBHU1RfU0VDT05ELCAicG9zaXRpb24gaXMgd3JvbmciKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9OVUxMKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdNdXRleCBwcmVyb2xsX2xvY2s7Ci1zdGF0aWMgR0NvbmQgcHJlcm9sbF9jb25kOwotCi1zdGF0aWMgdm9pZAotdGVzdF9hc3luY19mYWxzZV9zZWVrX3ByZXJvbGwgKEdzdEVsZW1lbnQgKiBlbGVtLCBHc3RCdWZmZXIgKiBidWYsCi0gICAgR3N0UGFkICogcGFkLCBncG9pbnRlciBkYXRhKQotewotICBnX211dGV4X2xvY2sgKCZwcmVyb2xsX2xvY2spOwotICBHU1RfREVCVUcgKCJHb3QgcHJlcm9sbCBidWZmZXIgJXAiLCBidWYpOwotICBnX2NvbmRfc2lnbmFsICgmcHJlcm9sbF9jb25kKTsKLSAgZ19tdXRleF91bmxvY2sgKCZwcmVyb2xsX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9hc3luY19mYWxzZV9zZWVrX2hhbmRvZmYgKEdzdEVsZW1lbnQgKiBlbGVtLCBHc3RCdWZmZXIgKiBidWYsCi0gICAgR3N0UGFkICogcGFkLCBncG9pbnRlciBkYXRhKQotewotICAvKiBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZCwgd2UgbmV2ZXIgZ28gdG8gUExBWUlORyAqLwotICBHU1RfREVCVUcgKCJHb3QgaGFuZG9mZiBidWZmZXIgJXAiLCBidWYpOwotICBmYWlsX3VubGVzcyAoRkFMU0UpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hc3luY19mYWxzZV9zZWVrKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNvdXJjZSwgKnNpbms7Ci0KLSAgLyogQ3JlYXRlIGdzdHJlYW1lciBlbGVtZW50cyAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0LXBpcGVsaW5lIik7Ci0gIHNvdXJjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmlsZS1zb3VyY2UiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImF1ZGlvLW91dHB1dCIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAiYXN5bmMiLCBGQUxTRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAibnVtLWJ1ZmZlcnMiLCAxMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAic2lnbmFsLWhhbmRvZmZzIiwgVFJVRSwgTlVMTCk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoc2luaywgImhhbmRvZmYiLCBHX0NBTExCQUNLICh0ZXN0X2FzeW5jX2ZhbHNlX3NlZWtfaGFuZG9mZiksCi0gICAgICBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2luaywgInByZXJvbGwtaGFuZG9mZiIsCi0gICAgICBHX0NBTExCQUNLICh0ZXN0X2FzeW5jX2ZhbHNlX3NlZWtfcHJlcm9sbCksIE5VTEwpOwotCi0gIC8qIHdlIGFkZCBhbGwgZWxlbWVudHMgaW50byB0aGUgcGlwZWxpbmUgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzb3VyY2UsIHNpbmssIE5VTEwpOwotCi0gIC8qIHdlIGxpbmsgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyICovCi0gIGdzdF9lbGVtZW50X2xpbmsgKHNvdXJjZSwgc2luayk7Ci0KLSAgR1NUX0RFQlVHICgiTm93IHBhdXNpbmciKTsKLSAgZ19tdXRleF9sb2NrICgmcHJlcm9sbF9sb2NrKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLwotICBHU1RfREVCVUcgKCJ3YWl0IGZvciBwcmVyb2xsIik7Ci0gIGdfY29uZF93YWl0ICgmcHJlcm9sbF9jb25kLCAmcHJlcm9sbF9sb2NrKTsKLSAgZ19tdXRleF91bmxvY2sgKCZwcmVyb2xsX2xvY2spOwotCi0gIGdfbXV0ZXhfbG9jayAoJnByZXJvbGxfbG9jayk7Ci0gIEdTVF9ERUJVRyAoIlNlZWtpbmciKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NlZWsgKHBpcGVsaW5lLCAxLjAsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSCwgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfU0VULCAtMSkpOwotCi0gIEdTVF9ERUJVRyAoIndhaXQgZm9yIG5ldyBwcmVyb2xsIik7Ci0gIC8qIHRoaXMgZWl0aGVyIHByZXJvbGxzIG9yIGZhaWxzICovCi0gIGdfY29uZF93YWl0ICgmcHJlcm9sbF9jb25kLCAmcHJlcm9sbF9sb2NrKTsKLSAgZ19tdXRleF91bmxvY2sgKCZwcmVyb2xsX2xvY2spOwotCi0gIEdTVF9ERUJVRyAoImJyaW5nIHBpcGUgdG8gc3RhdGUgTlVMTCIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgR1NUX0RFQlVHICgiRGVsZXRpbmcgcGlwZWxpbmUiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR011dGV4IGhhbmRvZmZfbG9jazsKLXN0YXRpYyBHQ29uZCBoYW5kb2ZmX2NvbmQ7Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X2FzeW5jX2ZhbHNlX3NlZWtfaW5fcGxheWluZ19oYW5kb2ZmIChHc3RFbGVtZW50ICogZWxlbSwgR3N0QnVmZmVyICogYnVmLAotICAgIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ19tdXRleF9sb2NrICgmaGFuZG9mZl9sb2NrKTsKLSAgR1NUX0RFQlVHICgiR290IGhhbmRvZmYgYnVmZmVyICVwIiwgYnVmKTsKLSAgZ19jb25kX3NpZ25hbCAoJmhhbmRvZmZfY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmaGFuZG9mZl9sb2NrKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXN5bmNfZmFsc2Vfc2Vla19pbl9wbGF5aW5nKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNvdXJjZSwgKnNpbms7Ci0KLSAgLyogQ3JlYXRlIGdzdHJlYW1lciBlbGVtZW50cyAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0LXBpcGVsaW5lIik7Ci0gIHNvdXJjZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmFrZS1zb3VyY2UiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2Utb3V0cHV0Iik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLQotICBnX3NpZ25hbF9jb25uZWN0IChzaW5rLCAiaGFuZG9mZiIsCi0gICAgICBHX0NBTExCQUNLICh0ZXN0X2FzeW5jX2ZhbHNlX3NlZWtfaW5fcGxheWluZ19oYW5kb2ZmKSwgTlVMTCk7Ci0KLSAgLyogd2UgYWRkIGFsbCBlbGVtZW50cyBpbnRvIHRoZSBwaXBlbGluZSAqLwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNvdXJjZSwgc2luaywgTlVMTCk7Ci0KLSAgLyogd2UgbGluayB0aGUgZWxlbWVudHMgdG9nZXRoZXIgKi8KLSAgZ3N0X2VsZW1lbnRfbGluayAoc291cmNlLCBzaW5rKTsKLQotICBHU1RfREVCVUcgKCJOb3cgcGxheWluZyIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgZ19tdXRleF9sb2NrICgmaGFuZG9mZl9sb2NrKTsKLSAgR1NUX0RFQlVHICgid2FpdCBmb3IgaGFuZG9mZiBidWZmZXIiKTsKLSAgZ19jb25kX3dhaXQgKCZoYW5kb2ZmX2NvbmQsICZoYW5kb2ZmX2xvY2spOwotICBnX211dGV4X3VubG9jayAoJmhhbmRvZmZfbG9jayk7Ci0KLSAgR1NUX0RFQlVHICgiU2Vla2luZyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2VlayAoc291cmNlLCAxLjAsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSCwgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfU0VULCAtMSkpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmhhbmRvZmZfbG9jayk7Ci0gIEdTVF9ERUJVRyAoIndhaXQgZm9yIGhhbmRvZmYgYnVmZmVyIik7Ci0gIGdfY29uZF93YWl0ICgmaGFuZG9mZl9jb25kLCAmaGFuZG9mZl9sb2NrKTsKLSAgZ19tdXRleF91bmxvY2sgKCZoYW5kb2ZmX2xvY2spOwotCi0gIEdTVF9ERUJVRyAoImJyaW5nIHBpcGUgdG8gc3RhdGUgTlVMTCIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgR1NUX0RFQlVHICgiRGVsZXRpbmcgcGlwZWxpbmUiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0OiB0cnkgY2hhbmdpbmcgc3RhdGUgb2Ygc2lua3MgKi8KLXN0YXRpYyBTdWl0ZSAqCi1nc3Rfc2lua3Nfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiU2lua3MiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotICBndWludCB0aW1lb3V0ID0gMTA7Ci0KLSAgLyogdGltZSBvdXQgYWZ0ZXIgMTBzLCBub3QgdGhlIGRlZmF1bHQgMywgd2UgbmVlZCB0aGlzIGZvciB0aGUgbGFzdCB0ZXN0LgotICAgKiBXZSBuZWVkIGEgbG9uZ2VyIHRpbWVvdXQgd2hlbiBydW5uaW5nIHVuZGVyIHZhbGdyaW5kIHRob3VnaC4gKi8KLSAgaWYgKGdfZ2V0ZW52ICgiQ0tfREVGQVVMVF9USU1FT1VUIikgIT0gTlVMTCkKLSAgICB0aW1lb3V0ID0gTUFYICgxMCwgYXRvaSAoZ19nZXRlbnYgKCJDS19ERUZBVUxUX1RJTUVPVVQiKSkpOwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIHRpbWVvdXQpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW5rX2NvbXBsZXRpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3JjX3NpbmspOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGl2ZXNyY19yZW1vdmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGl2ZXNyY19zaW5rKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xpdmVzcmMyX3NpbmspOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGl2ZXNyYzNfc2luayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sb2NrZWRfc2luayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91bmxpbmtlZF9saXZlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlbGF5ZWRfYXN5bmMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkZWRfYXN5bmMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkZWRfYXN5bmMyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9saXZlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9saXZlMik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iaW5fbGl2ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX2Vvcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19kb25lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FzeW5jX2RvbmVfZW9zKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FzeW5jX2ZhbHNlX3NlZWspOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXN5bmNfZmFsc2Vfc2Vla19pbl9wbGF5aW5nKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9zaW5rcyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jIGIvdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4NTg3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3Igc3RhdGUgY2hhbmdlcyBvbiBhbGwgZWxlbWVudHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgR0xpc3QgKmVsZW1lbnRzID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLXNldHVwICh2b2lkKQotewotICBHTGlzdCAqZmVhdHVyZXMsICpmOwotICBHTGlzdCAqcGx1Z2lucywgKnA7Ci0gIGdjaGFyICoqaWdub3JlbGlzdCA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpTVEFURV9JR05PUkVfRUxFTUVOVFMgPSBOVUxMOwotCi0gIEdTVF9ERUJVRyAoImdldHRpbmcgZWxlbWVudHMgZm9yIHBhY2thZ2UgJXMiLCBQQUNLQUdFKTsKLSAgU1RBVEVfSUdOT1JFX0VMRU1FTlRTID0gZ19nZXRlbnYgKCJHU1RfU1RBVEVfSUdOT1JFX0VMRU1FTlRTIik7Ci0gIGZhaWxfdW5sZXNzIChTVEFURV9JR05PUkVfRUxFTUVOVFMgIT0gTlVMTCwgIlRlc3QgZW52aXJvbm1lbnQgbm90IHNldCB1cCEiKTsKLSAgaWYgKCFnX2dldGVudiAoIkdTVF9OT19TVEFURV9JR05PUkVfRUxFTUVOVFMiKSkgewotICAgIEdTVF9ERUJVRyAoIldpbGwgaWdub3JlIGVsZW1lbnQgZmFjdG9yaWVzOiAnJXMnIiwgU1RBVEVfSUdOT1JFX0VMRU1FTlRTKTsKLSAgICBpZ25vcmVsaXN0ID0gZ19zdHJzcGxpdCAoU1RBVEVfSUdOT1JFX0VMRU1FTlRTLCAiICIsIDApOwotICB9Ci0KLSAgcGx1Z2lucyA9IGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKGdzdF9yZWdpc3RyeV9nZXQgKCkpOwotCi0gIGZvciAocCA9IHBsdWdpbnM7IHA7IHAgPSBwLT5uZXh0KSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW4gPSBwLT5kYXRhOwotCi0gICAgaWYgKHN0cmNtcCAoZ3N0X3BsdWdpbl9nZXRfc291cmNlIChwbHVnaW4pLCBQQUNLQUdFKSAhPSAwKQotICAgICAgY29udGludWU7Ci0KLSAgICBmZWF0dXJlcyA9Ci0gICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgICAgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0KLSAgICBmb3IgKGYgPSBmZWF0dXJlczsgZjsgZiA9IGYtPm5leHQpIHsKLSAgICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBmLT5kYXRhOwotICAgICAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gICAgICBnYm9vbGVhbiBpZ25vcmUgPSBGQUxTRTsKLQotICAgICAgaWYgKCFHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKSkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIG5hbWUgPSBHU1RfT0JKRUNUX05BTUUgKGZlYXR1cmUpOwotCi0gICAgICBpZiAoaWdub3JlbGlzdCkgewotICAgICAgICBnY2hhciAqKnM7Ci0KLSAgICAgICAgZm9yIChzID0gaWdub3JlbGlzdDsgcyAmJiAqczsgKytzKSB7Ci0gICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXggKG5hbWUsICpzKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHICgiaWdub3JpbmcgZWxlbWVudCAlcyIsIG5hbWUpOwotICAgICAgICAgICAgaWdub3JlID0gVFJVRTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlnbm9yZSkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgR1NUX0RFQlVHICgiYWRkaW5nIGVsZW1lbnQgJXMiLCBuYW1lKTsKLSAgICAgIGVsZW1lbnRzID0gZ19saXN0X3ByZXBlbmQgKGVsZW1lbnRzLCBnX3N0cmR1cCAobmFtZSkpOwotICAgIH0KLSAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChmZWF0dXJlcyk7Ci0gIH0KLSAgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKHBsdWdpbnMpOwotICBnX3N0cmZyZWV2IChpZ25vcmVsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlYXJkb3duICh2b2lkKQotewotICBHTGlzdCAqZTsKLQotICBmb3IgKGUgPSBlbGVtZW50czsgZTsgZSA9IGUtPm5leHQpIHsKLSAgICBnX2ZyZWUgKGUtPmRhdGEpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChlbGVtZW50cyk7Ci0gIGVsZW1lbnRzID0gTlVMTDsKLX0KLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdGF0ZV9jaGFuZ2VzX3VwX2FuZF9kb3duX3NlcSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR0xpc3QgKmU7Ci0KLSAgZm9yIChlID0gZWxlbWVudHM7IGU7IGUgPSBlLT5uZXh0KSB7Ci0gICAgY29uc3QgZ2NoYXIgKm5hbWUgPSBlLT5kYXRhOwotCi0gICAgR1NUX0RFQlVHICgidGVzdGluZyBlbGVtZW50ICVzIiwgbmFtZSk7Ci0gICAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAobmFtZSwgbmFtZSk7Ci0gICAgZmFpbF9pZiAoZWxlbWVudCA9PSBOVUxMLCAiQ291bGQgbm90IG1ha2UgZWxlbWVudCBmcm9tIGZhY3RvcnkgJXMiLCBuYW1lKTsKLQotICAgIGlmIChHU1RfSVNfUElQRUxJTkUgKGVsZW1lbnQpKSB7Ci0gICAgICBHU1RfREVCVUcgKCJlbGVtZW50ICVzIGlzIGEgcGlwZWxpbmUiLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0YXRlX2NoYW5nZXNfdXBfc2VxKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHTGlzdCAqZTsKLQotICBmb3IgKGUgPSBlbGVtZW50czsgZTsgZSA9IGUtPm5leHQpIHsKLSAgICBjb25zdCBnY2hhciAqbmFtZSA9IGUtPmRhdGE7Ci0KLSAgICBHU1RfREVCVUcgKCJ0ZXN0aW5nIGVsZW1lbnQgJXMiLCBuYW1lKTsKLSAgICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChuYW1lLCBuYW1lKTsKLSAgICBmYWlsX2lmIChlbGVtZW50ID09IE5VTEwsICJDb3VsZCBub3QgbWFrZSBlbGVtZW50IGZyb20gZmFjdG9yeSAlcyIsIG5hbWUpOwotCi0gICAgaWYgKEdTVF9JU19QSVBFTElORSAoZWxlbWVudCkpIHsKLSAgICAgIEdTVF9ERUJVRyAoImVsZW1lbnQgJXMgaXMgYSBwaXBlbGluZSIsIG5hbWUpOwotICAgIH0KLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOwotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0YXRlX2NoYW5nZXNfZG93bl9zZXEpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdMaXN0ICplOwotCi0gIGZvciAoZSA9IGVsZW1lbnRzOyBlOyBlID0gZS0+bmV4dCkgewotICAgIGNvbnN0IGdjaGFyICpuYW1lID0gZS0+ZGF0YTsKLQotICAgIEdTVF9ERUJVRyAoInRlc3RpbmcgZWxlbWVudCAlcyIsIG5hbWUpOwotICAgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKG5hbWUsIG5hbWUpOwotICAgIGZhaWxfaWYgKGVsZW1lbnQgPT0gTlVMTCwgIkNvdWxkIG5vdCBtYWtlIGVsZW1lbnQgZnJvbSBmYWN0b3J5ICVzIiwgbmFtZSk7Ci0KLSAgICBpZiAoR1NUX0lTX1BJUEVMSU5FIChlbGVtZW50KSkgewotICAgICAgR1NUX0RFQlVHICgiZWxlbWVudCAlcyBpcyBhIHBpcGVsaW5lIiwgbmFtZSk7Ci0gICAgfQotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZWxlbWVudF9zdGF0ZV9pcyAoR3N0RWxlbWVudCAqIGUsIEdzdFN0YXRlIHMpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0U3RhdGUgc3RhdGU7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChlLCAmc3RhdGUsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICByZXR1cm4gKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgc3RhdGUgPT0gcyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0YXRlX2NoYW5nZXNfdXBfZmFpbHVyZSkKLXsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RFbGVtZW50ICptaWRbM107Ci0gIGludCBuOwotCi0gIC8qIHdlIHdhbnQgYXQgbGVhc3Qgb25lIGJlZm9yZSBhbmQgb25lIGFmdGVyICovCi0gIGdfYXNzZXJ0IChHX05fRUxFTUVOVFMgKG1pZCkgPj0gMyk7Ci0KLSAgLyogbWFrZSBhIGJpbiAqLwotICBiaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJiaW4iLCBOVUxMKTsKLQotICAvKiBhZGQgY2hpbGRyZW4gKi8KLSAgZm9yIChuID0gMDsgbiA8IEdfTl9FTEVNRU5UUyAobWlkKTsgKytuKSB7Ci0gICAgY29uc3QgY2hhciAqZWxlbWVudCA9IG4gIT0gMSA/ICJpZGVudGl0eSIgOiAiZmFrZXNpbmsiOwotICAgIG1pZFtuXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZWxlbWVudCwgTlVMTCk7Ci0gICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIG1pZFtuXSk7Ci0gICAgaWYgKG4gPT0gMSkKLSAgICAgIGdfb2JqZWN0X3NldCAobWlkW25dLCAiYXN5bmMiLCBGQUxTRSwgTlVMTCk7Ci0gIH0KLQotICAvKiBUaGlzIG9uZSBzaG91bGQgd29yayAqLwotICBmb3IgKG4gPSAwOyBuIDwgR19OX0VMRU1FTlRTIChtaWQpOyArK24pCi0gICAgZmFpbF91bmxlc3MgKGVsZW1lbnRfc3RhdGVfaXMgKG1pZFtuXSwgR1NUX1NUQVRFX05VTEwpKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9SRUFEWSk7Ci0gIGZvciAobiA9IDA7IG4gPCBHX05fRUxFTUVOVFMgKG1pZCk7ICsrbikKLSAgICBmYWlsX3VubGVzcyAoZWxlbWVudF9zdGF0ZV9pcyAobWlkW25dLCBHU1RfU1RBVEVfUkVBRFkpKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgZm9yIChuID0gMDsgbiA8IEdfTl9FTEVNRU5UUyAobWlkKTsgKytuKQotICAgIGZhaWxfdW5sZXNzIChlbGVtZW50X3N0YXRlX2lzIChtaWRbbl0sIEdTVF9TVEFURV9OVUxMKSk7Ci0KLSAgLyogbWFrZSB0aGUgbWlkZGxlIGVsZW1lbnQgZmFpbCB0byBzd2l0Y2ggdXAgKi8KLSAgZ19vYmplY3Rfc2V0IChtaWRbMV0sICJzdGF0ZS1lcnJvciIsIDEgLyogbnVsbC10by1yZWFkeSAqLyAsIE5VTEwpOwotCi0gIC8qIFRoaXMgb25lIHNob3VsZCBub3QgKi8KLSAgZm9yIChuID0gMDsgbiA8IEdfTl9FTEVNRU5UUyAobWlkKTsgKytuKQotICAgIGZhaWxfdW5sZXNzIChlbGVtZW50X3N0YXRlX2lzIChtaWRbbl0sIEdTVF9TVEFURV9OVUxMKSk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUkVBRFkpOwotICBmb3IgKG4gPSAwOyBuIDwgR19OX0VMRU1FTlRTIChtaWQpOyArK24pCi0gICAgZmFpbF91bmxlc3MgKGVsZW1lbnRfc3RhdGVfaXMgKG1pZFtuXSwgR1NUX1NUQVRFX05VTEwpKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgZm9yIChuID0gMDsgbiA8IEdfTl9FTEVNRU5UUyAobWlkKTsgKytuKQotICAgIGZhaWxfdW5sZXNzIChlbGVtZW50X3N0YXRlX2lzIChtaWRbbl0sIEdTVF9TVEFURV9OVUxMKSk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLXN0YXRlc19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJzdGF0ZXNfY29yZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKHRjX2NoYWluLCBzZXR1cCwgdGVhcmRvd24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RhdGVfY2hhbmdlc191cF9hbmRfZG93bl9zZXEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RhdGVfY2hhbmdlc191cF9zZXEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RhdGVfY2hhbmdlc19kb3duX3NlcSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VzX3VwX2ZhaWx1cmUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoc3RhdGVzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9jYXBzbGlzdC5oIGIvdGVzdHMvY2hlY2svZ3N0L2NhcHNsaXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5OTFmYTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2NhcHNsaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0vKiBkZWZpbmVzIGFuIGFycmF5IG9mIHN0cmluZ3MgbmFtZWQgY2Fwc19saXN0LCB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBjYXBzIGZvcgotICAgZ2VuZXJhbCB0ZXN0cy4gU28gaWYgeW91IGRvbid0IGtub3cgd2hhdCBjYXBzIHRvIHVzZSB0byB3cml0ZSBhIHRlc3QsIGp1c3QKLSAgIGluY2x1ZGUgdGhpcyBmaWxlICovCi0KLXN0YXRpYyBjb25zdCBnY2hhciAqY2Fwc19saXN0W10gPSB7Ci0gICJhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylxdWlja3RpbWU7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKXF1aWNrdGltZTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpd2F2OyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyl3YXY7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWRrMzsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZGszOyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylkazQ7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWRrNDsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpd2VzdHdvb2Q7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKXdlc3R3b29kOyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylzbWpwZWc7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKXNtanBlZzsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpbWljcm9zb2Z0OyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyltaWNyb3NvZnQ7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKTR4bTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpNHhtOyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyl4YTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpeGE7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWFkeDsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpYWR4OyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyllYTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZWE7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWc3MjY7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWc3MjYiLAotICAidmlkZW8veC1yYXcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSwgZm9ybWF0PShzdHJpbmcpSTQyMDsgdmlkZW8veC1yYXcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSwgZm9ybWF0PShzdHJpbmcpWVVZMjsgdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVJHQiwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShkb3VibGUpWyAwLCAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQkdSLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF07IHZpZGVvL3gtcmF3LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF0sIGZvcm1hdD0oc3RyaW5nKVk0MkI7IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylCR1J4LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF07IHZpZGVvL3gtcmF3LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF0sIGZvcm1hdD0oc3RyaW5nKVlVVjk7IHZpZGVvL3gtcmF3LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF0sIGZvcm1hdD0oc3RyaW5nKVk0MUI7IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylSR0IxNiAsd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShkb3VibGUpWyAwLCAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCMTUsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSIsCi0gICJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBZVVkyLCBJNDIwIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF07IHZpZGVvL3gtanBlZywgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZGl2eCwgZGl2eHZlcnNpb249KGludClbIDMsIDUgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gteHZpZCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtM2l2eCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtbXNtcGVnLCBtc21wZWd2ZXJzaW9uPShpbnQpWyA0MSwgNDMgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjYzLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1kdiwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCB3aWR0aD0oaW50KTcyMCwgaGVpZ2h0PShpbnQpeyA1NzYsIDQ4MCB9OyB2aWRlby94LWh1ZmZ5dXYsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdIiwKLSAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFlVWTIsIEk0MjAgfSwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShkb3VibGUpWyAwLCAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCBdOyBpbWFnZS9qcGVnLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdOyB2aWRlby94LWRpdngsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGRpdnh2ZXJzaW9uPShpbnQpWyAzLCA1IF07IHZpZGVvL3gteHZpZCwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXTsgdmlkZW8veC0zaXZ4LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdOyB2aWRlby94LW1zbXBlZywgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgbXNtcGVndmVyc2lvbj0oaW50KVsgNDEsIDQzIF07IHZpZGVvL21wZWcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIG1wZWd2ZXJzaW9uPShpbnQpMSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlOyB2aWRlby94LWgyNjMsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF07IHZpZGVvL3gtZHYsIHdpZHRoPShpbnQpNzIwLCBoZWlnaHQ9KGludCl7IDU3NiwgNDgwIH0sIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTsgdmlkZW8veC1odWZmeXV2LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdIiwKLSAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylCR1J4LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylSR0J4LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGRvdWJsZSlbIDAsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4IF0iLAotICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUJHUngsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSIsCi0gICJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBJNDIwIH0sIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZG91YmxlKVsgMCwgMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDggXSIsCi0gICJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpIHhCR1IsIGZyYW1lcmF0ZSA9IChkb3VibGUpIFsgMCwgbWF4IF0iLAotICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKSBSR0J4LCBmcmFtZXJhdGUgPSAoZG91YmxlKSBbIDAsIG1heCBdIiwKLSAgInZpZGVvL3gtcmF3LFxcIGZvcm1hdD0oc3RyaW5nKSB7IFJHQkEsIFJHQngsIEJHUngsIEJHUkEsIHhSR0IsIHhCR1IsIEFSR0IsIEFCR1IgfSIsCi0gIC8qIFRlc3QgZnJhY3Rpb24gdHlwZSAqLwotICAidGVzdC9nc3QtZnJhY3Rpb24sIGZyYWN0aW9uID0gKGZyYWN0aW9uKSAxLzgiLAotICAidGVzdC9nc3QtZnJhY3Rpb24sIGZyYWN0aW9uID0gKGZyYWN0aW9uKSBNSU4iLAotICAidGVzdC9nc3QtZnJhY3Rpb24sIGZyYWN0aW9uID0gKGZyYWN0aW9uKSBNQVgiLAotICAvKiBUZXN0IGZyYWN0aW9uIHJhbmdlICovCi0gICJ0ZXN0L2dzdC1mcmFjdGlvbi1yYW5nZSwgZnJhY3Rpb24gPSAoZnJhY3Rpb24pIFsgMS80LCAxLzMgXSIsCi0gICJ0ZXN0L2dzdC1mcmFjdGlvbi1yYW5nZSwgZnJhY3Rpb24gPSAoZnJhY3Rpb24pIFsgTUlOLCBNQVggXSIsCi0gICJ0ZXN0L2dzdC1mcmFjdGlvbi1yYW5nZSwgZnJhY3Rpb24gPSAoZnJhY3Rpb24pIFsgMS9NQVgsIE1BWCBdIiwKLSAgLyogVGVzdCBsaXN0cyBvZiBmcmFjdGlvbnMgYW5kIGZyYWN0aW9uIHJhbmdlcyAqLwotICAidGVzdC9nc3QtZnJhY3Rpb24tcmFuZ2UsIGZyYWN0aW9uID0gKGZyYWN0aW9uKSB7IFsgMS80LCAxLzMgXSwgMS84IH0iLAotICAidGVzdC9nc3QtZnJhY3Rpb24tcmFuZ2UsIGZyYWN0aW9uID0gKGZyYWN0aW9uKSB7IFsgMS80LCAxLzMgXSwgWyAxLzgsIDIvOCBdIH0iLAotICAvKiBGbGFnU2V0ICovCi0gICJ0ZXN0L2dzdC1mbGFncyx0aGluZ3k9MWYzOTQ6MDBmZjhmZiIsCi0gICJ0ZXN0L2dzdC1mbGFncyx0aGluZ3k9MTAxZmZmZjFmMzk0OmZmZjAwZmYwMGZmOGZmIiwKLSAgLyogU29tZSByYW5kb20gY2hlY2tzICovCi0gICJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykgeyBJNDIwLCBZNDJCLCBZNDQ0IH0sIGZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWzEvTUFYLCBNQVhdLCB3aWR0aCA9IChpbnQpIFsgMSwgTUFYIF0sIGhlaWdodCA9IChpbnQpIFsgMSwgTUFYIF0iLAotCi0gICJBTlkiLAotICAiRU1QVFkiCi19OwotCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZTk1M2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICoKLSAqIGdzdC5jOiBVbml0IHRlc3QgZm9yIGdzdC5jCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9nc3R2ZXJzaW9uLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2luaXQpCi17Ci0gIC8qIGRvbid0IHNlZ2ZhdWx0IHdpdGggTlVMTCwgTlVMTCAqLwotICBnc3RfaW5pdCAoTlVMTCwgTlVMTCk7Ci0gIC8qIGFsbG93IGNhbGxpbmcgdHdpY2UuIHdlbGwsIGFjdHVhbGx5LCB0aHJpY2UuICovCi0gIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZWluaXQpCi17Ci0gIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKLQotICBnc3RfZGVpbml0ICgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RlaW5pdF9zeXNjbG9jaykKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotCi0gIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKLQotICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0KLSAgZ3N0X2RlaW5pdCAoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0cyBpZiB3ZSBjYW4gY3JlYXRlIGFuIGVsZW1lbnQgZnJvbSBhIGNvbXBpbGVkLWluIHBsdWdpbiAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbmV3X3BpcGVsaW5lKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdHMgaWYgd2UgY2FuIGxvYWQgYW4gZWxlbWVudCBmcm9tIGEgcGx1Z2luICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9uZXdfZmFrZXNyYykKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLQotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92ZXJzaW9uKQotewotICBndWludCBtYWpvciwgbWlub3IsIG1pY3JvLCBuYW5vOwotICBnY2hhciAqdmVyc2lvbjsKLQotICBnc3RfdmVyc2lvbiAoJm1ham9yLCAmbWlub3IsICZtaWNybywgJm5hbm8pOwotICBhc3NlcnRfZXF1YWxzX2ludCAobWFqb3IsIEdTVF9WRVJTSU9OX01BSk9SKTsKLQotICB2ZXJzaW9uID0gZ3N0X3ZlcnNpb25fc3RyaW5nICgpOwotICBmYWlsX2lmICh2ZXJzaW9uID09IE5VTEwpOwotICBnX2ZyZWUgKHZlcnNpb24pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3Rfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdzdCB0ZXN0cyIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5pdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9uZXdfcGlwZWxpbmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbmV3X2Zha2VzcmMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmVyc2lvbik7Ci0gIC8qIHJ1biB0aGVzZSBsYXN0IHNvIHRoZSBvdGhlcnMgZG9uJ3QgZmFpbCBpZiBDS19GT1JLPW5vIGlzIGJlaW5nIHVzZWQgKi8KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlaW5pdF9zeXNjbG9jayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZWluaXQpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RhYmkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1NmNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0YWJpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGFiaS5jOiBVbml0IHRlc3QgZm9yIEFCSSBjb21wYXRpYmlsaXR5Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jaWZkZWYgSEFWRV9DUFVfSTM4NgotI2lmbmRlZiBHX09TX1dJTjMyCi0jaW5jbHVkZSAic3RydWN0X2kzODYuaCIKLSNlbHNlCi0jaW5jbHVkZSAic3RydWN0X2kzODZ3LmgiCi0jZW5kaWYKLSNkZWZpbmUgSEFWRV9BQklfU0laRVMgVFJVRQotI2Vsc2UKLSNpZmRlZiBfX3Bvd2VycGM2NF9fCi0jaW5jbHVkZSAic3RydWN0X3BwYzY0LmgiCi0jZGVmaW5lIEhBVkVfQUJJX1NJWkVTIEZBTFNFCi0jZWxzZQotI2lmZGVmIF9fcG93ZXJwY19fCi0jaW5jbHVkZSAic3RydWN0X3BwYzMyLmgiCi0jZGVmaW5lIEhBVkVfQUJJX1NJWkVTIFRSVUUKLSNlbHNlCi0jaWZkZWYgSEFWRV9DUFVfWDg2XzY0Ci0jaW5jbHVkZSAic3RydWN0X3g4Nl82NC5oIgotI2RlZmluZSBIQVZFX0FCSV9TSVpFUyBUUlVFCi0jZWxzZQotI2lmZGVmIEhBVkVfQ1BVX0hQUEEKLSNpbmNsdWRlICJzdHJ1Y3RfaHBwYS5oIgotI2RlZmluZSBIQVZFX0FCSV9TSVpFUyBGQUxTRQotI2Vsc2UKLSNpZmRlZiBIQVZFX0NQVV9TUEFSQwotI2luY2x1ZGUgInN0cnVjdF9zcGFyYy5oIgotI2RlZmluZSBIQVZFX0FCSV9TSVpFUyBGQUxTRQotI2Vsc2UKLSNpZmRlZiBIQVZFX0NQVV9BUk0KLSNpbmNsdWRlICJzdHJ1Y3RfYXJtLmgiCi0jZGVmaW5lIEhBVkVfQUJJX1NJWkVTIFRSVUUKLSNlbHNlCi0vKiBpbiBjYXNlIHNvbWVvbmUgd2FudHMgdG8gZ2VuZXJhdGUgYSBuZXcgYXJjaCAqLwotI2luY2x1ZGUgInN0cnVjdF9pMzg2LmgiCi0jZGVmaW5lIEhBVkVfQUJJX1NJWkVTIEZBTFNFCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfQUJJKQotewotICBnc3RfY2hlY2tfYWJpX2xpc3QgKGxpc3QsIEhBVkVfQUJJX1NJWkVTKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0YWJpX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEFCSSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJzaXplIGNoZWNrIik7Ci0KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0FCSSk7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0YWJpKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RhdG9taWNxdWV1ZS5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGF0b21pY3F1ZXVlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNjJjNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdGF0b21pY3F1ZXVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMTE+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9nc3RhdG9taWNxdWV1ZS5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY3JlYXRlX2ZyZWUpCi17Ci0gIEdzdEF0b21pY1F1ZXVlICphcTsKLQotICBhcSA9IGdzdF9hdG9taWNfcXVldWVfbmV3ICgyMCk7Ci0gIGdzdF9hdG9taWNfcXVldWVfdW5yZWYgKGFxKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2F0b21pY19xdWV1ZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RBdG9taWNRdWV1ZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJHc3RBdG9taWNRdWV1ZSB0ZXN0cyIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY3JlYXRlX2ZyZWUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2F0b21pY19xdWV1ZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0YmluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZTBiZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdGJpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTczNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBnc3RiaW4uYzogVW5pdCB0ZXN0IGZvciBHc3RCaW4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgotCi1zdGF0aWMgdm9pZAotcG9wX2FzeW5jX2RvbmUgKEdzdEJ1cyAqIGJ1cykKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBHU1RfREVCVUcgKCJwb3BwaW5nIGFzeW5jLWRvbmUgbWVzc2FnZSIpOwotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUsIC0xKTsKLQotICBmYWlsX3VubGVzcyAobWVzc2FnZSAmJiBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKQotICAgICAgPT0gR1NUX01FU1NBR0VfQVNZTkNfRE9ORSwgImRpZCBub3QgZ2V0IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUiKTsKLQotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIEdTVF9ERUJVRyAoInBvcHBlZCBtZXNzYWdlIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wb3BfbWVzc2FnZXMgKEdzdEJ1cyAqIGJ1cywgaW50IGNvdW50KQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gIGludCBpOwotCi0gIEdTVF9ERUJVRyAoInBvcHBpbmcgJWQgbWVzc2FnZXMiLCBjb3VudCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAtMSk7Ci0KLSAgICBmYWlsX3VubGVzcyAobWVzc2FnZSAmJiBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKQotICAgICAgICA9PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAiZGlkIG5vdCBnZXQgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCIpOwotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICB9Ci0gIEdTVF9ERUJVRyAoInBvcHBlZCAlZCBtZXNzYWdlcyIsIGNvdW50KTsKLX0KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgZ3BvaW50ZXIKLXB1c2hfb25lX2VvcyAoR3N0UGFkICogcGFkKQotewotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJQdXNoaW5nIEVPUyBldmVudCIpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXB1c2hfb25lX3N0cmVhbV9zdGFydCAoR3N0UGFkICogcGFkKQotewotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJQdXNoaW5nIFNUUkVBTV9TVEFSVCBldmVudCIpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcmZhY2UpCi17Ci0gIEdzdEJpbiAqYmluLCAqYmluMjsKLSAgR3N0RWxlbWVudCAqZmlsZXNyYzsKLSAgR3N0SXRlcmF0b3IgKml0OwotICBHVmFsdWUgaXRlbSA9IHsgMCwgfTsKLQotICBiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoTlVMTCkpOwotICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOwotCi0gIGZpbGVzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChmaWxlc3JjICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZpbGVzcmMiKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19VUklfSEFORExFUiAoZmlsZXNyYyksICJGaWxlc3JjIG5vdCBhIFVSSSBoYW5kbGVyIik7Ci0gIGdzdF9iaW5fYWRkIChiaW4sIGZpbGVzcmMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgKGJpbiwgR1NUX1RZUEVfVVJJX0hBTkRMRVIpID09IGZpbGVzcmMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChmaWxlc3JjKTsKLQotICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlIChiaW4sIEdTVF9UWVBFX1VSSV9IQU5ETEVSKTsKLSAgZmFpbF91bmxlc3MgKGl0ICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSkgPT0gR1NUX0lURVJBVE9SX09LKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pID09IChncG9pbnRlcikgZmlsZXNyYyk7Ci0gIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJml0ZW0pID09IEdTVF9JVEVSQVRPUl9ET05FKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQotICBnc3RfYmluX2FkZF9tYW55IChiaW4sCi0gICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpLAotICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKSwKLSAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgTlVMTCksIE5VTEwpOwotICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlIChiaW4sIEdTVF9UWVBFX1VSSV9IQU5ETEVSKTsKLSAgZmFpbF91bmxlc3MgKGl0ICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSkgPT0gR1NUX0lURVJBVE9SX09LKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pID09IChncG9pbnRlcikgZmlsZXNyYyk7Ci0gIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJml0ZW0pID09IEdTVF9JVEVSQVRPUl9ET05FKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQotICBiaW4yID0gYmluOwotICBiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoTlVMTCkpOwotICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwpOwotICBnc3RfYmluX2FkZF9tYW55IChiaW4sCi0gICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpLAotICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKSwKLSAgICAgIEdTVF9FTEVNRU5UIChiaW4yKSwgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKSwgTlVMTCk7Ci0gIGl0ID0gZ3N0X2Jpbl9pdGVyYXRlX2FsbF9ieV9pbnRlcmZhY2UgKGJpbiwgR1NUX1RZUEVfVVJJX0hBTkRMRVIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSkgPT0gR1NUX0lURVJBVE9SX09LKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJml0ZW0pID09IChncG9pbnRlcikgZmlsZXNyYyk7Ci0gIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJml0ZW0pID09IEdTVF9JVEVSQVRPUl9ET05FKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQotICBnc3RfYmluX2FkZCAoYmluLCBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgTlVMTCkpOwotICBnc3RfYmluX2FkZCAoYmluMiwgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNyYyIsIE5VTEwpKTsKLSAgaXQgPSBnc3RfYmluX2l0ZXJhdGVfYWxsX2J5X2ludGVyZmFjZSAoYmluLCBHU1RfVFlQRV9VUklfSEFORExFUik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VvcykKLXsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc2luazEsICpzaW5rMjsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0UGFkICpwYWQxLCAqcGFkMjsKLSAgR1RocmVhZCAqdGhyZWFkMSwgKnRocmVhZDI7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgidGVzdF9lb3MiKTsKLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLQotICBzaW5rMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsxIik7Ci0gIHNpbmsyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luazIiKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNpbmsxLCBzaW5rMiwgTlVMTCk7Ci0KLSAgcGFkMSA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgKHNpbmsxLCAmc3JjdGVtcGxhdGUsICJzaW5rIik7Ci0gIHBhZDIgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lIChzaW5rMiwgJnNyY3RlbXBsYXRlLCAic2luayIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkMSwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkMiwgVFJVRSk7Ci0KLSAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIC8qIFNlbmQgb25lIEVPUyB0byBzaW5rMSAqLwotICB0aHJlYWQxID0gZ190aHJlYWRfbmV3ICgidGhyZWFkMSIsIChHVGhyZWFkRnVuYykgcHVzaF9vbmVfZW9zLCBwYWQxKTsKLQotICAvKiBNYWtlIHN1cmUgdGhlIEVPUyBtZXNzYWdlIGlzIG5vdCBzZW50ICovCi0gIG1lc3NhZ2UgPQotICAgICAgZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfRU9TLCAyICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfaWYgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0KLSAgLyogU2VuZCBvbmUgRU9TIHRvIHNpbmsyICovCi0gIHRocmVhZDIgPSBnX3RocmVhZF9uZXcgKCJ0aHJlYWQyIiwgKEdUaHJlYWRGdW5jKSBwdXNoX29uZV9lb3MsIHBhZDIpOwotCi0gIC8qIE1ha2Ugc3VyZSB0aGUgRU9TIG1lc3NhZ2UgaXMgc2VudCB0aGVuICovCi0gIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9FT1MsIC0xKTsKLSAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLQotICAvKiBDbGVhbnVwICovCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDEpOwotICBnX3RocmVhZF9qb2luICh0aHJlYWQyKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQxLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkMiwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoc2luazEpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoc2luazIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RyZWFtX3N0YXJ0KQotewotICBHc3RCdXMgKmJ1czsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzaW5rMSwgKnNpbmsyOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RQYWQgKnBhZDEsICpwYWQyOwotICBHVGhyZWFkICp0aHJlYWQxLCAqdGhyZWFkMjsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0X3N0cmVhbV9zdGFydCIpOwotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotCi0gIHNpbmsxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luazEiKTsKLSAgc2luazIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rMiIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luazEsIHNpbmsyLCBOVUxMKTsKLQotICBwYWQxID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWRfYnlfbmFtZSAoc2luazEsICZzcmN0ZW1wbGF0ZSwgInNpbmsiKTsKLSAgcGFkMiA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkX2J5X25hbWUgKHNpbmsyLCAmc3JjdGVtcGxhdGUsICJzaW5rIik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQxLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQyLCBUUlVFKTsKLQotICBmYWlsX2lmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgLyogU2VuZCBvbmUgU1RSRUFNX1NUQVJUIHRvIHNpbmsxICovCi0gIHRocmVhZDEgPSBnX3RocmVhZF9uZXcgKCJ0aHJlYWQxIiwgKEdUaHJlYWRGdW5jKSBwdXNoX29uZV9zdHJlYW1fc3RhcnQsIHBhZDEpOwotCi0gIC8qIE1ha2Ugc3VyZSB0aGUgU1RSRUFNX1NUQVJUIG1lc3NhZ2UgaXMgbm90IHNlbnQgKi8KLSAgbWVzc2FnZSA9Ci0gICAgICBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBUlQsCi0gICAgICAyICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfaWYgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0KLSAgLyogU2VuZCBvbmUgU1RSRUFNX1NUQVJUIHRvIHNpbmsyICovCi0gIHRocmVhZDIgPSBnX3RocmVhZF9uZXcgKCJ0aHJlYWQyIiwgKEdUaHJlYWRGdW5jKSBwdXNoX29uZV9zdHJlYW1fc3RhcnQsIHBhZDIpOwotCi0gIC8qIE1ha2Ugc3VyZSB0aGUgU1RSRUFNX1NUQVJUIG1lc3NhZ2UgaXMgc2VudCB0aGVuICovCi0gIG1lc3NhZ2UgPQotICAgICAgZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJULCAtMSk7Ci0gIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBUlQpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgLyogQ2xlYW51cCAqLwotICBnX3RocmVhZF9qb2luICh0aHJlYWQxKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkMik7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkMSwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZDIsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHNpbmsxKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHNpbmsyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lc3NhZ2Vfc3RhdGVfY2hhbmdlZCkKLXsKLSAgR3N0QmluICpiaW47Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgYmluID0gR1NUX0JJTiAoZ3N0X2Jpbl9uZXcgKE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKGJpbiAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBiaW4iKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYmluLCAiYmluIiwgMSk7Ci0KLSAgYnVzID0gZ19vYmplY3RfbmV3IChnc3RfYnVzX2dldF90eXBlICgpLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgYnVzKTsKLQotICAvKiBjaGFuZ2Ugc3RhdGUsIHNwYXduaW5nIGEgbWVzc2FnZSwgY2F1c2luZyBhbiBpbmNyZWYgb24gdGhlIGJpbiAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUkVBRFkpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYmluLCAiYmluIiwgMik7Ci0KLSAgLyogZ2V0IGFuZCB1bnJlZiB0aGUgbWVzc2FnZSwgY2F1c2luZyBhIGRlY3JlZiBvbiB0aGUgYmluICovCi0gIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgLTEpOwotCi0gIGZhaWxfdW5sZXNzIChtZXNzYWdlICYmIEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpCi0gICAgICA9PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAiZGlkIG5vdCBnZXQgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCIpOwotCi0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiaW4sICJiaW4iLCAxKTsKLQotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lc3NhZ2Vfc3RhdGVfY2hhbmdlZF9jaGlsZCkKLXsKLSAgR3N0QmluICpiaW47Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoTlVMTCkpOwotICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiaW4sICJiaW4iLCAxKTsKLQotICBidXMgPSBnX29iamVjdF9uZXcgKGdzdF9idXNfZ2V0X3R5cGUgKCksIE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pLCBidXMpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKLSAgZ3N0X2Jpbl9hZGQgKGJpbiwgc3JjKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYmluLCAiYmluIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotCi0gIC8qIGNoYW5nZSBzdGF0ZSwgc3Bhd25pbmcgdHdvIG1lc3NhZ2VzOgotICAgKiAtIGZpcnN0IGZvciBmYWtlc3JjLCBmb3J3YXJkZWQgdG8gYmluJ3MgYnVzLCBjYXVzaW5nIGluY3JlZiBvbiBmYWtlc3JjCi0gICAqIC0gc2Vjb25kIGZvciBiaW4sIGNhdXNpbmcgYW4gaW5jcmVmIG9uIHRoZSBiaW4gKi8KLSAgR1NUX0RFQlVHICgic2V0dGluZyBiaW4gdG8gUkVBRFkiKTsKLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiaW4sICJiaW4iLCAyKTsKLQotICAvKiBnZXQgYW5kIHVucmVmIHRoZSBtZXNzYWdlLCBjYXVzaW5nIGEgZGVjcmVmIG9uIHRoZSBzcmMgKi8KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChtZXNzYWdlICYmIEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpCi0gICAgICA9PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAiZGlkIG5vdCBnZXQgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCIpOwotCi0gIGZhaWxfdW5sZXNzIChtZXNzYWdlLT5zcmMgPT0gR1NUX09CSkVDVCAoc3JjKSk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYmluLCAiYmluIiwgMik7Ci0KLSAgLyogZ2V0IGFuZCB1bnJlZiBtZXNzYWdlIDIsIGNhdXNpbmcgYSBkZWNyZWYgb24gdGhlIGJpbiAqLwotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsIC0xKTsKLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgJiYgR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkKLSAgICAgID09IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQsICJkaWQgbm90IGdldCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIik7Ci0KLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UtPnNyYyA9PSBHU1RfT0JKRUNUIChiaW4pKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiaW4sICJiaW4iLCAxKTsKLQotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lc3NhZ2Vfc3RhdGVfY2hhbmdlZF9jaGlsZHJlbikKLXsKLSAgR3N0UGlwZWxpbmUgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICpzcmMsICpzaW5rOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOwotCi0gIHBpcGVsaW5lID0gR1NUX1BJUEVMSU5FIChnc3RfcGlwZWxpbmVfbmV3IChOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOwotICAvKiBuZWVkIHRvIHNpbGVuY2UgdGhlIGVsZW1lbnQgYXMgdGhlIGRlZXBfbm90aWZ5IHJlZmNvdW50cyB0aGUKLSAgICogcGFyZW50cyB3aGlsZSBydW5uaW5nICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgLyogbmVlZCB0byBzaWxlbmNlIHRoZSBlbGVtZW50IGFzIHRoZSBkZWVwX25vdGlmeSByZWZjb3VudHMgdGhlCi0gICAqIHBhcmVudHMgd2hpbGUgcnVubmluZyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgInNpbGVudCIsIFRSVUUsIE5VTEwpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspLCAiY291bGQgbm90IGxpbmsgc3JjIGFuZCBzaW5rIik7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAxKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAocGlwZWxpbmUpOwotCi0gIC8qIGNoYW5nZSBzdGF0ZSB0byBSRUFEWSwgc3Bhd25pbmcgdGhyZWUgbWVzc2FnZXMgKi8KLSAgR1NUX0RFQlVHICgic2V0dGluZyBwaXBlbGluZSB0byBSRUFEWSIpOwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9SRUFEWSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiBlYWNoIG9iamVjdCBpcyByZWZlcmVuY2VkIGJ5IGEgbWVzc2FnZSAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMiLCAyKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAyKTsKLQotICBwb3BfbWVzc2FnZXMgKGJ1cywgMyk7Ci0gIGZhaWxfaWYgKGdzdF9idXNfaGF2ZV9wZW5kaW5nIChidXMpLCAidW5leHBlY3RlZCBwZW5kaW5nIG1lc3NhZ2VzIik7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYnVzLCAiYnVzIiwgMik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7Ci0KLSAgLyogY2hhbmdlIHN0YXRlIHRvIFBBVVNFRCwgc3Bhd25pbmcgZm91ciBtZXNzYWdlcyAqLwotICAvKiBTVEFURV9DSEFOR0VEIChOVUxMID0+IFJFQURZKQotICAgKiBTVFJFQU1fU1RBUlQKLSAgICogQVNZTkNfRE9ORQotICAgKiBTVEFURV9DSEFOR0VEIChSRUFEWSA9PiBQQVVTRUQpCi0gICAqLwotICBHU1RfREVCVUcgKCJzZXR0aW5nIHBpcGVsaW5lIHRvIFBBVVNFRCIpOwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotICByZXQgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCAmY3VycmVudCwgJnBlbmRpbmcsCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmcgPT0gR1NUX1NUQVRFX1ZPSURfUEVORElORyk7Ci0KLSAgLyogd2FpdCBmb3IgYXN5bmMgdGhyZWFkIHRvIHNldHRsZSBkb3duICovCi0gIEdTVF9ERUJVRyAoIndhaXRpbmcgZm9yIHJlZmNvdW50Iik7Ci0gIHdoaWxlIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChwaXBlbGluZSkgPiA0KQotICAgIFRIUkVBRF9TV0lUQ0ggKCk7Ci0gIEdTVF9ERUJVRyAoInJlZmNvdW50IDw9IDQgbm93Iik7Ci0KLSAgLyogZWFjaCBvYmplY3QgaXMgcmVmZXJlbmNlZCBieSBhIG1lc3NhZ2U7Ci0gICAqIGJhc2Vfc3JjIGlzIGJsb2NrZWQgaW4gdGhlIHB1c2ggYW5kIGhhcyBhbiBleHRyYSByZWZjb3VudC4KLSAgICogYmFzZV9zaW5rX2NoYWluIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBzaW5rLCBhbmQgaXMgYmxvY2tlZCBvbgotICAgKiBwcmVyb2xsCi0gICAqIFRoZSBzdHJlYW0tc3RhdHVzIG1lc3NhZ2VzIGhvbGRzIDIgbW9yZSByZWZzIHRvIHRoZSBlbGVtZW50ICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDQpOwotICAvKiByZWZjb3VudCBjYW4gYmUgNCBpZiB0aGUgYmluIGlzIHN0aWxsIHByb2Nlc3NpbmcgdGhlIGFzeW5jX2RvbmUgbWVzc2FnZSBvZgotICAgKiB0aGUgc2luay4gKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOIChzaW5rLCAic2luayIsIDIsIDMpOwotICAvKiAzIG9yIDQgaXMgdmFsaWQsIGJlY2F1c2UgdGhlIHBpcGVsaW5lIG1pZ2h0IHN0aWxsIGJlIHBvc3RpbmcgCi0gICAqIGl0cyBzdGF0ZV9jaGFuZ2UgbWVzc2FnZSAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UX0JFVFdFRU4gKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAzLCA0KTsKLQotICBwb3BfbWVzc2FnZXMgKGJ1cywgMyk7Ci0gIHBvcF9hc3luY19kb25lIChidXMpOwotICBmYWlsX2lmICgoZ3N0X2J1c19wb3AgKGJ1cykpICE9IE5VTEwpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAyKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOwotCi0gIC8qIGNoYW5nZSBzdGF0ZSB0byBQTEFZSU5HLCBzcGF3bmluZyB0aHJlZSBtZXNzYWdlcyAqLwotICBHU1RfREVCVUcgKCJzZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkciKTsKLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgcmV0ID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgJmN1cnJlbnQsICZwZW5kaW5nLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgZmFpbF91bmxlc3MgKGN1cnJlbnQgPT0gR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocGVuZGluZyA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKTsKLQotICAvKiBlYWNoIG9iamVjdCBpcyByZWZlcmVuY2VkIGJ5IG9uZSBtZXNzYWdlCi0gICAqIHNyYyBtaWdodCBoYXZlIGFuIGV4dHJhIHJlZmVyZW5jZSBpZiBpdCdzIHN0aWxsIHB1c2hpbmcKLSAgICogc2luayBtaWdodCBoYXZlIGFuIGV4dHJhIHJlZmVyZW5jZSBpZiBpdCdzIHN0aWxsIGJsb2NrZWQgb24gcHJlcm9sbAotICAgKiBwaXBlbGluZSBwb3N0ZWQgYSBuZXctY2xvY2sgbWVzc2FnZSB0b28uICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTiAoc3JjLCAic3JjIiwgMiwgMyk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTiAoc2luaywgInNpbmsiLCAyLCA0KTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDMpOwotCi0gIHBvcF9tZXNzYWdlcyAoYnVzLCAzKTsKLSAgZmFpbF9pZiAoKGdzdF9idXNfcG9wIChidXMpKSAhPSBOVUxMKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMiLCAyKTsKLSAgLyogc3JjIG1pZ2h0IGhhdmUgYW4gZXh0cmEgcmVmZXJlbmNlIGlmIGl0J3Mgc3RpbGwgcHVzaGluZyAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UX0JFVFdFRU4gKHNyYywgInNyYyIsIDEsIDIpOwotICAvKiBzaW5rIG1pZ2h0IGhhdmUgYW4gZXh0cmEgcmVmZXJlbmNlIGlmIGl0J3Mgc3RpbGwgYmxvY2tlZCBvbiBwcmVyb2xsICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTiAoc2luaywgInNpbmsiLCAxLCAzKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOwotCi0gIC8qIGdvIGJhY2sgdG8gUkVBRFksIHNwYXduaW5nIHNpeCBtZXNzYWdlcyAqLwotICBHU1RfREVCVUcgKCJzZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIik7Ci0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIGVhY2ggb2JqZWN0IGlzIHJlZmVyZW5jZWQgYnkgdHdvIG1lc3NhZ2VzLCB0aGUgc291cmNlIGFsc28gaGFzIHRoZQotICAgKiBzdHJlYW0tc3RhdHVzIG1lc3NhZ2UgcmVmZXJlbmNpbmcgaXQgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgNCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMyk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAzKTsKLQotICBwb3BfbWVzc2FnZXMgKGJ1cywgNik7Ci0gIGZhaWxfaWYgKChnc3RfYnVzX3BvcCAoYnVzKSkgIT0gTlVMTCk7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKLQotICAvKiBzZXR0aW5nIHBpcGVsaW5lIHRvIE5VTEwgZmx1c2hlcyB0aGUgYnVzIGF1dG9tYXRpY2FsbHkgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93YXRjaF9mb3Jfc3RhdGVfY2hhbmdlKQotewotICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqYmluOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOwotCi0gIGJ1cyA9IGdfb2JqZWN0X25ldyAoZ3N0X2J1c19nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbiksIGJ1cyk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc2luayA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luayIpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBzaW5rKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIHNyYyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luayksICJjb3VsZCBub3QgbGluayBzcmMgYW5kIHNpbmsiKTsKLQotICAvKiBjaGFuZ2Ugc3RhdGUsIHNwYXduaW5nIHR3byB0aW1lcyB0aHJlZSBtZXNzYWdlcyAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLSAgcmV0ID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIE5VTEwsIE5VTEwsCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIHBvcF9tZXNzYWdlcyAoYnVzLCA2KTsKLSAgcG9wX2FzeW5jX2RvbmUgKGJ1cyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idXNfaGF2ZV9wZW5kaW5nIChidXMpID09IEZBTFNFLAotICAgICAgIlVuZXhwZWN0ZWQgbWVzc2FnZXMgb24gYnVzIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgcG9wX21lc3NhZ2VzIChidXMsIDMpOwotCi0gIC8qIHRoaXMgb25lIG1pZ2h0IHJldHVybiBlaXRoZXIgU1VDQ0VTUyBvciBBU1lOQywgbGlrZWx5IFNVQ0NFU1MgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIHBvcF9tZXNzYWdlcyAoYnVzLCAzKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQotICAgIHBvcF9hc3luY19kb25lIChidXMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVzX2hhdmVfcGVuZGluZyAoYnVzKSA9PSBGQUxTRSwKLSAgICAgICJVbmV4cGVjdGVkIG1lc3NhZ2VzIG9uIGJ1cyIpOwotCi0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RhdGVfY2hhbmdlX2Vycm9yX21lc3NhZ2UpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpiaW47Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgYmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYmluIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChiaW4gIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYmluIik7Ci0KLSAgYnVzID0gZ19vYmplY3RfbmV3IChnc3RfYnVzX2dldF90eXBlICgpLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoR1NUX0VMRU1FTlRfQ0FTVCAoYmluKSwgYnVzKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIGZhaWxfaWYgKHNyYyA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7Ci0KLSAgLyogYWRkIGJ1dCBkb24ndCBsaW5rIGVsZW1lbnRzICovCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBzaW5rKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIHNyYyk7Ci0KLSAgLyogY2hhbmdlIHN0YXRlLCB0aGlzIHNob3VsZCBzdWNjZWVkICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotCi0gIC8qIG5vdyB3YWl0LCB0aGUgc3RyZWFtaW5nIHRocmVhZCB3aWxsIGVycm9yIGJlY2F1c2UgdGhlIHNvdXJjZSBpcyBub3QKLSAgICogbGlua2VkLiAqLwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLQotICAvKiBzZXR0aW5nIGJpbiB0byBOVUxMIGZsdXNoZXMgdGhlIGJ1cyBhdXRvbWF0aWNhbGx5ICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0vKiBhZGRpbmcgYW4gZWxlbWVudCB3aXRoIGxpbmtlZCBwYWRzIHRvIGEgYmluIHVubGlua3MgdGhlCi0gKiBwYWRzICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRfbGlua2VkKQotewotICBHc3RFbGVtZW50ICpzcmMsICpzaW5rOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsiKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0spOwotCi0gIC8qIHBhZHMgYXJlIGxpbmtlZCBub3cgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfaXNfbGlua2VkIChzcmNwYWQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfaXNfbGlua2VkIChzaW5rcGFkKSk7Ci0KLSAgLyogYWRkaW5nIGVsZW1lbnQgdG8gYmluIHZvaWRzIGhpZXJhcmNoeSBzbyBwYWRzIGFyZSB1bmxpbmtlZCAqLwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOwotCi0gIC8qIGNoZWNrIGlmIHBhZHMgcmVhbGx5IGFyZSB1bmxpbmtlZCAqLwotICBmYWlsX3VubGVzcyAoIWdzdF9wYWRfaXNfbGlua2VkIChzcmNwYWQpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfcGFkX2lzX2xpbmtlZCAoc2lua3BhZCkpOwotCi0gIC8qIGNhbm5vdCBsaW5rIHBhZHMgaW4gd3JvbmcgaGllcmFyY2h5ICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX1dST05HX0hJRVJBUkNIWSk7Ci0KLSAgLyogYWRkaW5nIG90aGVyIGVsZW1lbnQgdG8gYmluIGFzIHdlbGwgKi8KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0KLSAgLyogbm93IHdlIGNhbiBsaW5rIGFnYWluICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICAvKiBjaGVjayBpZiBwYWRzIHJlYWxseSBhcmUgbGlua2VkICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2lzX2xpbmtlZCAoc3JjcGFkKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2lzX2xpbmtlZCAoc2lua3BhZCkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogYWRkaW5nIG91cnNlbGYgc2hvdWxkIGZhaWwgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FkZF9zZWxmKQotewotICBHc3RFbGVtZW50ICpiaW47Ci0KLSAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOwotICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOwotCi0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIGJpbikpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0vKiBnX3ByaW50ICgiJTEwczogJTRkID0+ICU0ZFxuIiwgR1NUX09CSkVDVF9OQU1FIChtc2ctPnNyYyksIG9sZCwgbmV3KTsgKi8KLQotI2RlZmluZSBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyhidXMsZWxlbWVudCxvbGRfc3RhdGUsbmV3X3N0YXRlLG51bSkgICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdzdE1lc3NhZ2UgKm1zZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdzdFN0YXRlIG9sZCA9IDAsIG5ldyA9IDAsIHBlbmRpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCBHU1RfU0VDT05EKTsgICAgICAgICAgXAotICAgIGZhaWxfaWYgKG1zZyA9PSBOVUxMLCAiTm8gc3RhdGUgY2hhbmdlIG1lc3NhZ2Ugd2l0aGluIDEgc2Vjb25kICgjIiAgICAgICAgXAotICAgICAgICBHX1NUUklOR0lGWSAobnVtKSAiKSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1zZywgJm9sZCwgJm5ldywgJnBlbmRpbmcpOyAgICAgICAgICAgICAgXAotICAgIGZhaWxfaWYgKG1zZy0+c3JjICE9IEdTVF9PQkpFQ1QgKGVsZW1lbnQpLCBHX1NUUklOR0lGWShlbGVtZW50KSAgICAgICAgICAgXAotICAgICAgICAiIHNob3VsZCBoYXZlIGNoYW5nZWQgc3RhdGUgbmV4dCAoIyIgR19TVFJJTkdJRlkgKG51bSkgIikiKTsgICAgICAgICAgXAotICAgIGZhaWxfaWYgKG9sZCAhPSBvbGRfc3RhdGUgfHwgbmV3ICE9IG5ld19zdGF0ZSwgInN0YXRlIGNoYW5nZSBpcyBub3QgIiAgICAgXAotICAgICAgICBHX1NUUklOR0lGWSAob2xkX3N0YXRlKSAiID0+ICIgR19TVFJJTkdJRlkgKG5ld19zdGF0ZSkpOyAgICAgICAgICAgICAgXAotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NoaWxkcmVuX3N0YXRlX2NoYW5nZV9vcmRlcl9mbGFnZ2VkX3NpbmspCi17Ci0gIEdzdEVsZW1lbnQgKnNyYywgKmlkZW50aXR5LCAqc2luaywgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFN0YXRlIGN1cnJlbnQsIHBlbmRpbmc7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMLCAiUGlwZWxpbmUgaGFzIG5vIGJ1cz8hIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOwotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgNSwgTlVMTCk7Ci0KLSAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOwotICBmYWlsX2lmIChpZGVudGl0eSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSIpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGlkZW50aXR5LCBzaW5rLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBpZGVudGl0eSkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChpZGVudGl0eSwgc2luaykgPT0gVFJVRSk7Ci0KLSAgLyogKDEpIFRlc3Qgc3RhdGUgY2hhbmdlIHdpdGggZmFrZXNpbmsgYmVpbmcgYSByZWd1bGFyIHNpbmsgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywKLSAgICAgICJTdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBkaWQgbm90IHJldHVybiBBU1lOQyIpOwotICByZXQgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJmN1cnJlbnQsICZwZW5kaW5nLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIlN0YXRlIGNoYW5nZSB0byBQTEFZSU5HIGZhaWxlZCIpOwotICBmYWlsX2lmIChjdXJyZW50ICE9IEdTVF9TVEFURV9QTEFZSU5HLCAiU3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgZmFpbGVkIik7Ci0gIGZhaWxfaWYgKHBlbmRpbmcgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORywgIlN0YXRlIGNoYW5nZSB0byBQTEFZSU5HIGZhaWxlZCIpOwotCi0gIC8qIE5VTEwgPT4gUkVBRFkgKi8KLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc2luaywgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMTAxKTsKLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgaWRlbnRpdHksIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfUkVBRFksIDEwMik7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHNyYywgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMTAzKTsKLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgcGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfUkVBRFksIDEwNCk7Ci0KLSAgLyogUkVBRFkgPT4gUEFVU0VEICovCi0gIC8qIGJlY2F1c2Ugb2YgcHJlLXJvbGxpbmcsIHNpbmsgd2lsbCByZXR1cm4gQVNZTkMgb24gc3RhdGUKLSAgICogY2hhbmdlIGFuZCBjaGFuZ2Ugc3RhdGUgbGF0ZXIgd2hlbiBpdCBoYXMgYSBidWZmZXIgKi8KLSAgR1NUX0RFQlVHICgicG9wcGluZyBSRUFEWSAtPiBQQVVTRUQgbWVzc2FnZXMiKTsKLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgaWRlbnRpdHksIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwKLSAgICAgIDEwNSk7Ci0jaWYgMAotICAvKiBGcm9tIGhlcmUgb24sIGFsbCBiZXRzIGFyZSBvZmYuIFVzdWFsbHkgdGhlIHNvdXJjZSBjaGFuZ2VzIHN0YXRlIG5leHQsCi0gICAqIGJ1dCBpdCBtaWdodCBqdXN0IGFzIHdlbGwgYmUgdGhhdCB0aGUgZmlyc3QgYnVmZmVyIHByb2R1Y2VkIGJ5IHRoZQotICAgKiBzb3VyY2UgcmVhY2hlcyB0aGUgc2luayBiZWZvcmUgdGhlIHNvdXJjZSBoYXMgZmluaXNoZWQgaXRzIHN0YXRlIGNoYW5nZSwKLSAgICogaW4gd2hpY2ggY2FzZSB0aGUgc2luayB3aWxsIGNvbW1pdCBpdHMgbmV3IHN0YXRlIGJlZm9yZSB0aGUgc291cmNlIC4uLiAgKi8KLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc3JjLCBHU1RfU1RBVEVfUkVBRFksIEdTVF9TVEFURV9QQVVTRUQsIDEwNik7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHNpbmssIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwgMTA3KTsKLSNlbHNlCi0KLSAgcG9wX21lc3NhZ2VzIChidXMsIDIpOyAgICAgICAgLyogcG9wIHJlbWFpbmluZyByZWFkeSA9PiBwYXVzZWQgbWVzc2FnZXMgb2ZmIHRoZSBidXMgKi8KLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgcGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwKLSAgICAgIDEwOCk7Ci0gIHBvcF9hc3luY19kb25lIChidXMpOwotI2VuZGlmCi0gIC8qIFBBVVNFRCA9PiBQTEFZSU5HICovCi0gIEdTVF9ERUJVRyAoInBvcHBpbmcgUEFVU0VEIC0+IFBMQVlJTkcgbWVzc2FnZXMiKTsKLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc2luaywgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsIDEwOSk7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIGlkZW50aXR5LCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUExBWUlORywKLSAgICAgIDExMCk7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHNyYywgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsIDExMSk7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUExBWUlORywKLSAgICAgIDExMik7Ci0KLSAgLyogZG9uJ3Qgc2V0IHRvIE5VTEwgdGhhdCB3aWxsIHNldCB0aGUgYnVzIGZsdXNoaW5nIGFuZCBraWxsIG91ciBtZXNzYWdlcyAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFkpOwotICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiU3RhdGUgY2hhbmdlIHRvIFJFQURZIGZhaWxlZCIpOwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIlN0YXRlIGNoYW5nZSB0byBSRUFEWSBmYWlsZWQiKTsKLQotICAvKiBUT0RPOiBkbyB3ZSBuZWVkIHRvIGNoZWNrIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2Ugb3JkZXIgYXMgd2VsbD8gKi8KLSAgcG9wX21lc3NhZ2VzIChidXMsIDQpOyAgICAgICAgLyogcG9wIHBsYXlpbmcgPT4gcGF1c2VkIG1lc3NhZ2VzIG9mZiB0aGUgYnVzICovCi0gIHBvcF9tZXNzYWdlcyAoYnVzLCA0KTsgICAgICAgIC8qIHBvcCBwYXVzZWQgPT4gcmVhZHkgbWVzc2FnZXMgb2ZmIHRoZSBidXMgKi8KLQotICB3aGlsZSAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGlwZWxpbmUpID4gMSkKLSAgICBUSFJFQURfU1dJVENIICgpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiU3RhdGUgY2hhbmdlIHRvIE5VTEwgZmFpbGVkIik7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jaGlsZHJlbl9zdGF0ZV9jaGFuZ2Vfb3JkZXJfc2VtaV9zaW5rKQotewotICBHc3RFbGVtZW50ICpzcmMsICppZGVudGl0eSwgKnNpbmssICpwaXBlbGluZTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RTdGF0ZSBjdXJyZW50LCBwZW5kaW5nOwotICBHc3RCdXMgKmJ1czsKLQotICAvKiAoMikgTm93IGFnYWluLCBidXQgY2hlY2sgb3RoZXIgY29kZSBwYXRoIHdoZXJlIHdlIGRvbid0IGhhdmUKLSAgICogICAgIGEgcHJvcGVyIHNpbmsgY29ycmVjdGx5IGZsYWdnZWQgYXMgc3VjaCwgYnV0IGEgJ3NlbWktc2luaycgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBpcGVsaW5lIik7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotICBmYWlsX3VubGVzcyAoYnVzICE9IE5VTEwsICJQaXBlbGluZSBoYXMgbm8gYnVzPyEiKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIGZhaWxfaWYgKHNyYyA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7Ci0KLSAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOwotICBmYWlsX2lmIChpZGVudGl0eSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSIpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGlkZW50aXR5LCBzaW5rLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBpZGVudGl0eSkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChpZGVudGl0eSwgc2luaykgPT0gVFJVRSk7Ci0KLSAgLyogdGhpcyBpcyBub3QgdmVyeSBuaWNlIGJ1dCBzaG91bGQgd29yayBqdXN0IGZpbmUgaW4gdGhpcyBjYXNlLiAqLwotICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHNpbmssIEdTVF9FTEVNRU5UX0ZMQUdfU0lOSyk7ICAvKiA8PT09PT09PT0gKi8KLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLCAiU3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgbm90IEFTWU5DIik7Ci0gIHJldCA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCAmY3VycmVudCwgJnBlbmRpbmcsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiU3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgZmFpbGVkIik7Ci0gIGZhaWxfaWYgKGN1cnJlbnQgIT0gR1NUX1NUQVRFX1BMQVlJTkcsICJTdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBmYWlsZWQiKTsKLSAgZmFpbF9pZiAocGVuZGluZyAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HLCAiU3RhdGUgY2hhbmdlIHRvIFBMQVlJTkcgZmFpbGVkIik7Ci0KLSAgLyogTlVMTCA9PiBSRUFEWSAqLwotICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBzaW5rLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLCAyMDEpOwotICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBpZGVudGl0eSwgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMjAyKTsKLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc3JjLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLCAyMDMpOwotICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMjA0KTsKLQotICAvKiBSRUFEWSA9PiBQQVVTRUQgKi8KLSAgLyogYmVjYXVzZSBvZiBwcmUtcm9sbGluZywgc2luayB3aWxsIHJldHVybiBBU1lOQyBvbiBzdGF0ZQotICAgKiBjaGFuZ2UgYW5kIGNoYW5nZSBzdGF0ZSBsYXRlciB3aGVuIGl0IGhhcyBhIGJ1ZmZlciAqLwotICBHU1RfREVCVUcgKCJwb3BwaW5nIFJFQURZIC0+IFBBVVNFRCBtZXNzYWdlcyIpOwotICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBpZGVudGl0eSwgR1NUX1NUQVRFX1JFQURZLCBHU1RfU1RBVEVfUEFVU0VELAotICAgICAgMjA1KTsKLSNpZiAwCi0gIC8qIEZyb20gaGVyZSBvbiwgYWxsIGJldHMgYXJlIG9mZi4gVXN1YWxseSB0aGUgc291cmNlIGNoYW5nZXMgc3RhdGUgbmV4dCwKLSAgICogYnV0IGl0IG1pZ2h0IGp1c3QgYXMgd2VsbCBiZSB0aGF0IHRoZSBmaXJzdCBidWZmZXIgcHJvZHVjZWQgYnkgdGhlCi0gICAqIHNvdXJjZSByZWFjaGVzIHRoZSBzaW5rIGJlZm9yZSB0aGUgc291cmNlIGhhcyBmaW5pc2hlZCBpdHMgc3RhdGUgY2hhbmdlLAotICAgKiBpbiB3aGljaCBjYXNlIHRoZSBzaW5rIHdpbGwgY29tbWl0IGl0cyBuZXcgc3RhdGUgYmVmb3JlIHRoZSBzb3VyY2UgLi4uICAqLwotICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBzcmMsIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwgMjA2KTsKLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc2luaywgR1NUX1NUQVRFX1JFQURZLCBHU1RfU1RBVEVfUEFVU0VELCAyMDcpOwotI2Vsc2UKLSAgcG9wX21lc3NhZ2VzIChidXMsIDIpOyAgICAgICAgLyogcG9wIHJlbWFpbmluZyByZWFkeSA9PiBwYXVzZWQgbWVzc2FnZXMgb2ZmIHRoZSBidXMgKi8KLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgcGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwgR1NUX1NUQVRFX1BBVVNFRCwKLSAgICAgIDIwOCk7Ci0gIHBvcF9hc3luY19kb25lIChidXMpOwotCi0gIC8qIFBBVVNFRCA9PiBQTEFZSU5HICovCi0gIEdTVF9ERUJVRyAoInBvcHBpbmcgUEFVU0VEIC0+IFBMQVlJTkcgbWVzc2FnZXMiKTsKLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgc2luaywgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsIDIwOSk7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIGlkZW50aXR5LCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUExBWUlORywKLSAgICAgIDIxMCk7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHNyYywgR1NUX1NUQVRFX1BBVVNFRCwgR1NUX1NUQVRFX1BMQVlJTkcsIDIxMSk7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfUExBWUlORywKLSAgICAgIDIxMik7Ci0jZW5kaWYKLQotICAvKiBkb24ndCBzZXQgdG8gTlVMTCB0aGF0IHdpbGwgc2V0IHRoZSBidXMgZmx1c2hpbmcgYW5kIGtpbGwgb3VyIG1lc3NhZ2VzICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7Ci0gIGZhaWxfaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJTdGF0ZSBjaGFuZ2UgdG8gUkVBRFkgZmFpbGVkIik7Ci0KLSAgLyogVE9ETzogZG8gd2UgbmVlZCB0byBjaGVjayBkb3dud2FyZHMgc3RhdGUgY2hhbmdlIG9yZGVyIGFzIHdlbGw/ICovCi0gIHBvcF9tZXNzYWdlcyAoYnVzLCA0KTsgICAgICAgIC8qIHBvcCBwbGF5aW5nID0+IHBhdXNlZCBtZXNzYWdlcyBvZmYgdGhlIGJ1cyAqLwotICBwb3BfbWVzc2FnZXMgKGJ1cywgNCk7ICAgICAgICAvKiBwb3AgcGF1c2VkID0+IHJlYWR5IG1lc3NhZ2VzIG9mZiB0aGUgYnVzICovCi0KLSAgR1NUX0RFQlVHICgid2FpdGluZyBmb3IgcGlwZWxpbmUgdG8gcmVhY2ggcmVmY291bnQgMSIpOwotICB3aGlsZSAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGlwZWxpbmUpID4gMSkKLSAgICBUSFJFQURfU1dJVENIICgpOwotCi0gIEdTVF9ERUJVRyAoImNoZWNraW5nIHJlZmNvdW50Iik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX2lmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiU3RhdGUgY2hhbmdlIHRvIE5VTEwgZmFpbGVkIik7Ci0KLSAgR1NUX0RFQlVHICgiY2hlY2tpbmcgcmVmY291bnQiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKLQotICBHU1RfREVCVUcgKCJjbGVhbnVwIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jaGlsZHJlbl9zdGF0ZV9jaGFuZ2Vfb3JkZXJfdHdvX3NpbmspCi17Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnRlZSwgKmlkZW50aXR5LCAqc2luazEsICpzaW5rMiwgKnBpcGVsaW5lOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMLCAiUGlwZWxpbmUgaGFzIG5vIGJ1cz8hIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOwotCi0gIHRlZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlZSIsIE5VTEwpOwotICBmYWlsX2lmICh0ZWUgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgdGVlIik7Ci0KLSAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOwotICBmYWlsX2lmIChpZGVudGl0eSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSIpOwotCi0gIHNpbmsxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc2luazEgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsxIik7Ci0KLSAgc2luazIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX2lmIChzaW5rMiA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luazIiKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgdGVlLCBpZGVudGl0eSwgc2luazEsIHNpbmsyLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCB0ZWUpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAodGVlLCBpZGVudGl0eSkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChpZGVudGl0eSwgc2luazEpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAodGVlLCBzaW5rMikgPT0gVFJVRSk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIlN0YXRlIGNoYW5nZSB0byBSRUFEWSBmYWlsZWQiKTsKLQotICAvKiBOVUxMID0+IFJFQURZICovCi0gIHsKLSAgICBHc3RNZXNzYWdlICptc2c7Ci0gICAgR3N0U3RhdGUgb2xkID0gMCwgbmV3ID0gMCwgcGVuZGluZyA9IDA7Ci0gICAgR3N0T2JqZWN0ICpmaXJzdCwgKnNlY29uZDsKLQotICAgIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCBHU1RfU0VDT05EKTsKLSAgICBmYWlsX2lmIChtc2cgPT0gTlVMTCwgIk5vIHN0YXRlIGNoYW5nZSBtZXNzYWdlIHdpdGhpbiAxIHNlY29uZCAoIzIwMSkiKTsKLQotICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1zZywgJm9sZCwgJm5ldywgJnBlbmRpbmcpOwotICAgIGZpcnN0ID0gZ3N0X29iamVjdF9yZWYgKG1zZy0+c3JjKTsKLQotICAgIGZhaWxfaWYgKGZpcnN0ICE9IEdTVF9PQkpFQ1QgKHNpbmsxKSAmJiBmaXJzdCAhPSBHU1RfT0JKRUNUIChzaW5rMiksCi0gICAgICAgICJzaW5rMSBvciBzaW5rMiBzaG91bGQgaGF2ZSBjaGFuZ2VkIHN0YXRlIG5leHQgIygyMDIpIik7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCwgR1NUX1NFQ09ORCk7Ci0gICAgZmFpbF9pZiAobXNnID09IE5VTEwsICJObyBzdGF0ZSBjaGFuZ2UgbWVzc2FnZSB3aXRoaW4gMSBzZWNvbmQgKCMyMDEpIik7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChtc2csICZvbGQsICZuZXcsICZwZW5kaW5nKTsKLSAgICBzZWNvbmQgPSBnc3Rfb2JqZWN0X3JlZiAobXNnLT5zcmMpOwotCi0gICAgZmFpbF9pZiAoc2Vjb25kICE9IEdTVF9PQkpFQ1QgKHNpbmsxKSAmJiBzZWNvbmQgIT0gR1NUX09CSkVDVCAoc2luazIpLAotICAgICAgICAic2luazEgb3Igc2luazIgc2hvdWxkIGhhdmUgY2hhbmdlZCBzdGF0ZSBuZXh0ICMoMjAyKSIpOwotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gICAgZmFpbF9pZiAoc2Vjb25kID09IGZpcnN0LCAiZ290IHN0YXRlIGNoYW5nZSBmcm9tIHNhbWUgb2JqZWN0Iik7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChmaXJzdCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2Vjb25kKTsKLSAgfQotICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBpZGVudGl0eSwgR1NUX1NUQVRFX05VTEwsIEdTVF9TVEFURV9SRUFEWSwgMjAzKTsKLSAgQVNTRVJUX1NUQVRFX0NIQU5HRV9NU0cgKGJ1cywgdGVlLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLCAyMDQpOwotICBBU1NFUlRfU1RBVEVfQ0hBTkdFX01TRyAoYnVzLCBzcmMsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfUkVBRFksIDIwNSk7Ci0gIEFTU0VSVF9TVEFURV9DSEFOR0VfTVNHIChidXMsIHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCwgR1NUX1NUQVRFX1JFQURZLCAyMDYpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0ZWUsICJ0ZWUiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaWRlbnRpdHksICJpZGVudGl0eSIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rMSwgInNpbmsxIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmsyLCAic2luazIiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF9pZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgIlN0YXRlIGNoYW5nZSB0byBOVUxMIGZhaWxlZCIpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0ZWUsICJ0ZWUiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaWRlbnRpdHksICJpZGVudGl0eSIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rMSwgInNpbmsxIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmsyLCAic2luazIiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pdGVyYXRlX3NvcnRlZCkKLXsKLSAgR3N0RWxlbWVudCAqc3JjLCAqdGVlLCAqaWRlbnRpdHksICpzaW5rMSwgKnNpbmsyLCAqcGlwZWxpbmUsICpiaW47Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgR1ZhbHVlIGVsZW0gPSB7IDAsIH07Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBpcGVsaW5lIik7Ci0KLSAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOwotICBmYWlsX3VubGVzcyAoYmluICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGJpbiIpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKLQotICB0ZWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZWUiLCBOVUxMKTsKLSAgZmFpbF9pZiAodGVlID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHRlZSIpOwotCi0gIHNpbmsxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc2luazEgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsxIik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjLCB0ZWUsIHNpbmsxLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCB0ZWUpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAodGVlLCBzaW5rMSkgPT0gVFJVRSk7Ci0KLSAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOwotICBmYWlsX2lmIChpZGVudGl0eSA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSIpOwotCi0gIHNpbmsyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc2luazIgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsyIik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBiaW4sIGlkZW50aXR5LCBzaW5rMiwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHRlZSwgaWRlbnRpdHkpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoaWRlbnRpdHksIHNpbmsyKSA9PSBUUlVFKTsKLQotICBpdCA9IGdzdF9iaW5faXRlcmF0ZV9zb3J0ZWQgKEdTVF9CSU4gKHBpcGVsaW5lKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZlbGVtKSA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfb2JqZWN0ICgmZWxlbSkgPT0gKGdwb2ludGVyKSBzaW5rMik7Ci0gIGdfdmFsdWVfcmVzZXQgKCZlbGVtKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmZWxlbSkgPT0gR1NUX0lURVJBVE9SX09LKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X29iamVjdCAoJmVsZW0pID09IChncG9pbnRlcikgaWRlbnRpdHkpOwotICBnX3ZhbHVlX3Jlc2V0ICgmZWxlbSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9uZXh0IChpdCwgJmVsZW0pID09IEdTVF9JVEVSQVRPUl9PSyk7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9vYmplY3QgKCZlbGVtKSA9PSAoZ3BvaW50ZXIpIGJpbik7Ci0gIGdfdmFsdWVfcmVzZXQgKCZlbGVtKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmZWxlbSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLXRlc3RfbGlua19zdHJ1Y3R1cmVfY2hhbmdlX3N0YXRlX2NoYW5nZWRfc3luY19jYiAoR3N0QnVzICogYnVzLAotICAgIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQotewotICBHc3RQaXBlbGluZSAqcGlwZWxpbmUgPSBHU1RfUElQRUxJTkUgKGRhdGEpOwotICBHc3RFbGVtZW50ICpzcmMsICppZGVudGl0eSwgKnNpbms7Ci0gIEdzdFN0YXRlIG9sZCwgc25ldywgcGVuZGluZzsKLQotICBzaW5rID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMLCAiQ291bGQgbm90IGdldCBzaW5rIik7Ci0KLSAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobWVzc2FnZSwgJm9sZCwgJnNuZXcsICZwZW5kaW5nKTsKLSAgaWYgKG1lc3NhZ2UtPnNyYyAhPSBHU1RfT0JKRUNUIChzaW5rKSB8fCBzbmV3ICE9IEdTVF9TVEFURV9SRUFEWSkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotICAgIHJldHVybjsKLSAgfQotCi0gIHNyYyA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJDb3VsZCBub3QgZ2V0IHNyYyIpOwotCi0gIGlkZW50aXR5ID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAiaWRlbnRpdHkiKTsKLSAgZmFpbF91bmxlc3MgKGlkZW50aXR5ICE9IE5VTEwsICJDb3VsZCBub3QgZ2V0IGlkZW50aXR5Iik7Ci0KLSAgLyogbGluayBzcmMgdG8gaWRlbnRpdHksIHRoZSBwaXBlbGluZSBzaG91bGQgZGV0ZWN0IHRoZSBuZXcgbGluayBhbmQKLSAgICogcmVzeW5jIHRoZSBzdGF0ZSBjaGFuZ2UgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgaWRlbnRpdHkpID09IFRSVUUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGlkZW50aXR5KTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xpbmtfc3RydWN0dXJlX2NoYW5nZSkKLXsKLSAgR3N0RWxlbWVudCAqc3JjLCAqaWRlbnRpdHksICpzaW5rLCAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RTdGF0ZSBzdGF0ZTsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBmYWlsX3VubGVzcyAoYnVzICE9IE5VTEwsICJDb3VsZCBub3QgZ2V0IGJ1cyIpOwotCi0gIC8qIHVzZSB0aGUgc3luYyBzaWduYWwgaGFuZGxlciB0byBsaW5rIGVsZW1lbnRzIHdoaWxlIHRoZSBwaXBlbGluZSBpcyBzdGlsbAotICAgKiBkb2luZyB0aGUgc3RhdGUgY2hhbmdlICovCi0gIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoYnVzLCBnc3RfYnVzX3N5bmNfc2lnbmFsX2hhbmRsZXIsIHBpcGVsaW5lLCBOVUxMKTsKLSAgZ19vYmplY3RfY29ubmVjdCAoYnVzLCAic2lnbmFsOjpzeW5jLW1lc3NhZ2U6OnN0YXRlLWNoYW5nZWQiLAotICAgICAgR19DQUxMQkFDSyAodGVzdF9saW5rX3N0cnVjdHVyZV9jaGFuZ2Vfc3RhdGVfY2hhbmdlZF9zeW5jX2NiKSwgcGlwZWxpbmUsCi0gICAgICBOVUxMKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNyYyIpOwotCi0gIGlkZW50aXR5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCAiaWRlbnRpdHkiKTsKLSAgZmFpbF9pZiAoaWRlbnRpdHkgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgaWRlbnRpdHkiKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rMSIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBpZGVudGl0eSwgc2luaywgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgLyogdGhlIHN0YXRlIGNoYW5nZSB3aWxsIGJlIGRvbmUgb24gc3JjIG9ubHkgaWYgdGhlIHBpcGVsaW5lIGNvcnJlY3RseSByZXN5bmNzCi0gICAqIGFmdGVyIHRoYXQgZmFrZXNyYyBoYXMgYmVlbiBsaW5rZWQgdG8gaWRlbnRpdHkgKi8KLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzcmMsICZzdGF0ZSwgTlVMTCwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0YXRlLCBHU1RfU1RBVEVfUkVBRFkpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RCdXNTeW5jUmVwbHkKLXN5bmNfaGFuZGxlcl9yZW1vdmVfc2luayAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VSUk9SKSB7Ci0gICAgR3N0RWxlbWVudCAqY2hpbGQ7Ci0KLSAgICBjaGlsZCA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKGRhdGEpLCAiZmFrZXNpbmsiKTsKLSAgICBmYWlsX3VubGVzcyAoY2hpbGQgIT0gTlVMTCwgIkNvdWxkIG5vdCBmaW5kIGZha2VzaW5rIik7Ci0KLSAgICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoZGF0YSksIGNoaWxkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChjaGlsZCk7Ci0gIH0KLSAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RhdGVfZmFpbHVyZV9yZW1vdmUpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlbGluZTsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgImZha2VzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHNyYyAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2VzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzaW5rIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAic3RhdGUtZXJyb3IiLCAxLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICBnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGZhaWxfdW5sZXNzIChidXMgIT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgYnVzIik7Ci0KLSAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyIChidXMsIHN5bmNfaGFuZGxlcl9yZW1vdmVfc2luaywgcGlwZWxpbmUsIE5VTEwpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImRpZCBub3QgZ2V0IHN0YXRlIGNoYW5nZSBzdWNjZXNzIik7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tYW55X2JpbnMpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2luaywgKnBpcGVsaW5lLCAqbGFzdF9iaW4gPSBOVUxMOwotICBnaW50IGk7Ci0KLSNkZWZpbmUgTlVNX0JJTlMgMjAwMAotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmFrZXNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIDMsIE5VTEwpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOwotICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luayIpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOwotCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fQklOUzsgKytpKSB7Ci0gICAgR3N0RWxlbWVudCAqYmluLCAqaWRlbnRpdHk7Ci0gICAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gICAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChiaW4gIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYmluICVkIiwgaSk7Ci0gICAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsICJpZGVudGl0eSIpOwotICAgIGZhaWxfdW5sZXNzIChpZGVudGl0eSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpZGVudGl0eSAlZCIsIGkpOwotICAgIGdfb2JqZWN0X3NldCAoaWRlbnRpdHksICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKLSAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgaWRlbnRpdHkpOwotICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoaWRlbnRpdHksICJzaW5rIik7Ci0gICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGlkZW50aXR5LCAic3JjIik7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBzaW5rcGFkKSk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNyYyIsIHNyY3BhZCkpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBiaW4pOwotCi0gICAgaWYgKGxhc3RfYmluID09IE5VTEwpIHsKLSAgICAgIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgICB9IGVsc2UgewotICAgICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGxhc3RfYmluLCAic3JjIik7Ci0gICAgfQotICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYmluLCAic2luayIpOwotICAgIGdzdF9wYWRfbGlua19mdWxsIChzcmNwYWQsIHNpbmtwYWQsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0KLSAgICBsYXN0X2JpbiA9IGJpbjsKLQotICAgIC8qIGluc2VydCBzb21lIHF1ZXVlcyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIGluIGEgcm93ICovCi0gICAgaWYgKChpICUgMTAwKSA9PSAwKSB7Ci0gICAgICBHc3RFbGVtZW50ICpxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKLQotICAgICAgR1NUX0xPRyAoImJpbiAjJWQsIGluc2VydGluZyBxdWV1ZSIsIGkpOwotICAgICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgcSk7Ci0gICAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAobGFzdF9iaW4sIHEpKTsKLSAgICAgIGxhc3RfYmluID0gcTsKLSAgICB9Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAobGFzdF9iaW4sIHNpbmspKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJldCwgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDE1OyArK2kpIHsKLSAgICBHU1RfSU5GTyAoIndhaXRpbmcgZm9yIHByZXJvbGwgLi4uIik7Ci0gICAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX1NFQ09ORCk7Ci0gICAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocmV0LCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZmFrZXNyY19wYWRfYmxvY2tlZF9jYiAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCB2b2lkICphcmcpCi17Ci0gIEdzdFBpcGVsaW5lICpwaXBlbGluZSA9IChHc3RQaXBlbGluZSAqKSBhcmc7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7Ci0KLSAgc3JjID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAiZmFrZXNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJDb3VsZCBub3QgZ2V0IGZha2VzcmMiKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAiZmFrZXNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsiKTsKLQotICBnX29iamVjdF9zZXQgKHNpbmssICJzdGF0ZS1lcnJvciIsIDEsIE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICBnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspOwotICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50IChzaW5rKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9SRU1PVkU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0YXRlX2ZhaWx1cmVfdW5yZWYpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnBpcGVsaW5lOwotICBHc3RQYWQgKnNyY3BhZDsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmFrZXNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgZmFrZXNyYyBzcmNwYWQiKTsKLQotICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSwKLSAgICAgIGZha2VzcmNfcGFkX2Jsb2NrZWRfY2IsIHBpcGVsaW5lLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGZhaWxfdW5sZXNzIChidXMgIT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgYnVzIik7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIC8qIFdhaXQgZm9yIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSBvdXIgZmFrZXNpbmsgKGFkZGVkIGZyb20gdGhlCi0gICAgIHBhZCBibG9jayBjYWxsYmFjaykuICovCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FUlJPUiwgR1NUX1NFQ09ORCk7Ci0gIGZhaWxfaWYgKG1zZyA9PSBOVUxMLCAiTm8gZXJyb3IgbWVzc2FnZSB3aXRoaW4gMSBzZWNvbmQiKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgLyogQ2hlY2sgdGhhdCBhZnRlciB0aGlzIGZhaWx1cmUsIHdlIGNhbiBzdGlsbCBzdG9wLCBhbmQgdGhlbiB1bnJlZiwgdGhlCi0gICAgIHBpcGVsaW5lLiBUaGlzIHNob3VsZCBhbHdheXMgYmUgcG9zc2libGUuICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJkb3dud2FyZCBzdGF0ZSBjaGFuZ2UgZmFpbGVkIik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1vbl9zeW5jX2J1c19lcnJvciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnKQotewotICBmYWlsX2lmIChtc2cgIT0gTlVMTCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0YXRlX2NoYW5nZV9za2lwKQotewotICBHc3RFbGVtZW50ICpzaW5rLCAqcGlwZWxpbmU7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0QnVzICpidXM7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBpcGVsaW5lIik7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMLCAiQ291bGQgbm90IGdldCBidXMiKTsKLQotICAvKiBubyBlcnJvcnMgKi8KLSAgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uIChidXMpOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJzeW5jLW1lc3NhZ2U6OmVycm9yIiwgKEdDYWxsYmFjaykgb25fc3luY19idXNfZXJyb3IsCi0gICAgICBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAiZmFrZXNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgZmFrZXNpbmsiKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICBnX29iamVjdF9zZXQgKHNpbmssICJzdGF0ZS1lcnJvciIsIDUsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAic3RhdGUtZXJyb3IiLCAwLCBOVUxMKTsKLQotICAvKiBDaGVjayB0aGF0IGFmdGVyIHRoaXMgZmFpbHVyZSwgd2UgY2FuIHN0aWxsIHN0b3AsIGFuZCB0aGVuIHVucmVmLCB0aGUKLSAgICAgcGlwZWxpbmUuIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBwb3NzaWJsZS4gKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImRvd253YXJkIHN0YXRlIGNoYW5nZSBmYWlsZWQiKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZHVyYXRpb25faXNfbWF4KQotewotICBHc3RFbGVtZW50ICpiaW4sICpzcmNbM10sICpzaW5rWzNdOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXM7Ci0gIEdzdEZvcm1hdCBmb3JtYXQgPSBHU1RfRk9STUFUX0JZVEVTOwotICBnYm9vbGVhbiByZXM7Ci0gIGdpbnQ2NCBkdXJhdGlvbjsKLSAgR3N0QnVzICpidXM7Ci0KLSAgR1NUX0lORk8gKCJwcmVwYXJpbmcgdGVzdCIpOwotCi0gIC8qIGJ1aWxkIHBpcGVsaW5lICovCi0gIGJpbiA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotCi0gIC8qIDMgc291cmNlcywgYW4gYWRkZXIgYW5kIGEgZmFrZXNpbmsgKi8KLSAgc3JjWzBdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBzcmNbMV0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIHNyY1syXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgc2lua1swXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIHNpbmtbMV0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBzaW5rWzJdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjWzBdLCBzcmNbMV0sIHNyY1syXSwgc2lua1swXSwgc2lua1sxXSwKLSAgICAgIHNpbmtbMl0sIE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1swXSwgc2lua1swXSk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1sxXSwgc2lua1sxXSk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1syXSwgc2lua1syXSk7Ci0KLSAgLyogaXJrcywgZHVyYXRpb24gaXMgcmVzZXQgb24gYmFzZXNyYyAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXMgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCBOVUxMKTsKLQotICAvKiBzZXQgZHVyYXRpb25zIG9uIHNyYyAqLwotICBHU1RfQkFTRV9TUkMgKHNyY1swXSktPnNlZ21lbnQuZHVyYXRpb24gPSAxMDAwOwotICBHU1RfQkFTRV9TUkMgKHNyY1sxXSktPnNlZ21lbnQuZHVyYXRpb24gPSAzMDAwOwotICBHU1RfQkFTRV9TUkMgKHNyY1syXSktPnNlZ21lbnQuZHVyYXRpb24gPSAyMDAwOwotCi0gIC8qIHNldCB0byBwbGF5aW5nICovCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXMgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCBOVUxMKTsKLQotICAvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCi0gIHN0YXRlX3JlcyA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXMgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCBOVUxMKTsKLQotICByZXMgPSBnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbiAoR1NUX0VMRU1FTlQgKGJpbiksIGZvcm1hdCwgJmR1cmF0aW9uKTsKLSAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7Ci0KLSAgY2tfYXNzZXJ0X2ludF9lcSAoZHVyYXRpb24sIDMwMDApOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZHVyYXRpb25fdW5rbm93bl9vdmVycmlkZXMpCi17Ci0gIEdzdEVsZW1lbnQgKmJpbiwgKnNyY1szXSwgKnNpbmtbM107Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JlczsKLSAgR3N0Rm9ybWF0IGZvcm1hdCA9IEdTVF9GT1JNQVRfQllURVM7Ci0gIGdib29sZWFuIHJlczsKLSAgZ2ludDY0IGR1cmF0aW9uOwotICBHc3RCdXMgKmJ1czsKLQotICBHU1RfSU5GTyAoInByZXBhcmluZyB0ZXN0Iik7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0KLSAgLyogMyBzb3VyY2VzLCBhbiBhZGRlciBhbmQgYSBmYWtlc2luayAqLwotICBzcmNbMF0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIHNyY1sxXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgc3JjWzJdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBzaW5rWzBdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgc2lua1sxXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIHNpbmtbMl0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBzcmNbMF0sIHNyY1sxXSwgc3JjWzJdLCBzaW5rWzBdLCBzaW5rWzFdLAotICAgICAgc2lua1syXSwgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfbGluayAoc3JjWzBdLCBzaW5rWzBdKTsKLSAgZ3N0X2VsZW1lbnRfbGluayAoc3JjWzFdLCBzaW5rWzFdKTsKLSAgZ3N0X2VsZW1lbnRfbGluayAoc3JjWzJdLCBzaW5rWzJdKTsKLQotICAvKiBpcmtzLCBkdXJhdGlvbiBpcyByZXNldCBvbiBiYXNlc3JjICovCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlX3JlcyAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsIE5VTEwpOwotCi0gIC8qIHNldCBkdXJhdGlvbnMgb24gc3JjICovCi0gIEdTVF9CQVNFX1NSQyAoc3JjWzBdKS0+c2VnbWVudC5kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CQVNFX1NSQyAoc3JjWzFdKS0+c2VnbWVudC5kdXJhdGlvbiA9IDMwMDA7Ci0gIEdTVF9CQVNFX1NSQyAoc3JjWzJdKS0+c2VnbWVudC5kdXJhdGlvbiA9IDIwMDA7Ci0KLSAgLyogc2V0IHRvIHBsYXlpbmcgKi8KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlX3JlcyAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsIE5VTEwpOwotCi0gIC8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLSAgc3RhdGVfcmVzID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIE5VTEwsIE5VTEwsCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlX3JlcyAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsIE5VTEwpOwotCi0gIHJlcyA9IGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uIChHU1RfRUxFTUVOVCAoYmluKSwgZm9ybWF0LCAmZHVyYXRpb24pOwotICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKLQotICBja19hc3NlcnRfaW50X2VxIChkdXJhdGlvbiwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoYmluKTsKLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWVsZW1lbnRfaW5fbGlzdCAoR0xpc3QgKiogbGlzdCwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdMaXN0ICpsID0gZ19saXN0X2ZpbmQgKCpsaXN0LCBlbGVtZW50KTsKLQotICBpZiAobCA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICAqbGlzdCA9IGdfbGlzdF9kZWxldGVfbGluayAoKmxpc3QsIGwpOwotICByZXR1cm4gVFJVRTsKLX0KLQotI2RlZmluZSBlbGVtZW50X3dhc19hZGRlZChlKSBlbGVtZW50X2luX2xpc3QoJmFkZGVkLGUpCi0jZGVmaW5lIGVsZW1lbnRfd2FzX3JlbW92ZWQoZSkgZWxlbWVudF9pbl9saXN0KCZyZW1vdmVkLGUpCi0KLXN0YXRpYyB2b2lkCi1hZGRfY2IgKEdzdEJpbiAqIHBpcGVsaW5lLCBHc3RCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHTGlzdCAqKiBsaXN0KQotewotICBmYWlsX3VubGVzcyAoR1NUX09CSkVDVF9QQVJFTlQgKGVsZW1lbnQpID09IEdTVF9PQkpFQ1RfQ0FTVCAoYmluKSk7Ci0KLSAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGVsZW1lbnQpOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX2NiIChHc3RCaW4gKiBwaXBlbGluZSwgR3N0QmluICogYmluLCBHc3RFbGVtZW50ICogZWxlbWVudCwgR0xpc3QgKiogbGlzdCkKLXsKLSAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGVsZW1lbnQpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZWVwX2FkZGVkX3JlbW92ZWQpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGUsICplLCAqYmluMCwgKmJpbjE7Ci0gIGd1bG9uZyBpZF9yZW1vdmVkLCBpZF9hZGRlZDsKLSAgR0xpc3QgKnJlbW92ZWQgPSBOVUxMOwotICBHTGlzdCAqYWRkZWQgPSBOVUxMOwotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLQotICBpZF9hZGRlZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKHBpcGUsICJkZWVwLWVsZW1lbnQtYWRkZWQiLAotICAgICAgR19DQUxMQkFDSyAoYWRkX2NiKSwgJmFkZGVkKTsKLSAgaWRfcmVtb3ZlZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKHBpcGUsICJkZWVwLWVsZW1lbnQtcmVtb3ZlZCIsCi0gICAgICBHX0NBTExCQUNLIChyZW1vdmVfY2IpLCAmcmVtb3ZlZCk7Ci0KLSAgLyogc2ltcGxlIGFkZC9yZW1vdmUgKi8KLSAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgZSk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50X3dhc19hZGRlZCAoZSkpOwotICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAocGlwZSksIGUpOwotICBmYWlsX3VubGVzcyAoZWxlbWVudF93YXNfcmVtb3ZlZCAoZSkpOwotCi0gIC8qIGxldCdzIHRyeSB3aXRoIGEgZGVlcGVyIGhpZXJhcmNoeSwgY29uc3RydWN0IGl0IGZyb20gdG9wLWxldmVsIGRvd24gKi8KLSAgYmluMCA9IGdzdF9iaW5fbmV3IChOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBiaW4wKTsKLSAgYmluMSA9IGdzdF9iaW5fbmV3IChOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbjApLCBiaW4xKTsKLSAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4xKSwgZSk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50X3dhc19hZGRlZCAoYmluMCkpOwotICBmYWlsX3VubGVzcyAoZWxlbWVudF93YXNfYWRkZWQgKGJpbjEpKTsKLSAgZmFpbF91bmxlc3MgKGVsZW1lbnRfd2FzX2FkZGVkIChlKSk7Ci0gIGZhaWxfdW5sZXNzIChhZGRlZCA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlbW92ZWQgPT0gTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF9yZWYgKGUpOyAgICAgICAgICAgLyoga2VlcCBlIGFsaXZlICovCi0gIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOIChiaW4xKSwgZSk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50X3dhc19yZW1vdmVkIChlKSk7Ci0gIGZhaWxfdW5sZXNzIChhZGRlZCA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlbW92ZWQgPT0gTlVMTCk7Ci0KLSAgLyogbm93IGFkZCBleGlzdGluZyBiaW4gaGllcmFyY2h5IHRvIHBpcGVsaW5lIChmaXJzdCByZW1vdmUgaXQgc28gd2UgY2FuIHJlLWFkZCBpdCkgKi8KLSAgZ3N0X29iamVjdF9yZWYgKGJpbjApOyAgICAgICAgLyoga2VlcCBiaW4wIGFsaXZlICovCi0gIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOIChwaXBlKSwgYmluMCk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50X3dhc19yZW1vdmVkIChiaW4wKSk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50X3dhc19yZW1vdmVkIChiaW4xKSk7Ci0gIGZhaWxfdW5sZXNzIChhZGRlZCA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlbW92ZWQgPT0gTlVMTCk7Ci0KLSAgLyogcmUtYWRkaW5nIGVsZW1lbnQgdG8gcmVtb3ZlZCBiaW4gc2hvdWxkIG5vdCB0cmlnZ2VyIG91ciBjYWxsYmFja3MgKi8KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbjEpLCBlKTsKLSAgZmFpbF91bmxlc3MgKGFkZGVkID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAocmVtb3ZlZCA9PSBOVUxMKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIGJpbjApOwotICBmYWlsX3VubGVzcyAoZWxlbWVudF93YXNfYWRkZWQgKGJpbjApKTsKLSAgZmFpbF91bmxlc3MgKGVsZW1lbnRfd2FzX2FkZGVkIChiaW4xKSk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50X3dhc19hZGRlZCAoZSkpOwotICBmYWlsX3VubGVzcyAoYWRkZWQgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZW1vdmVkID09IE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZSk7Ci0KLSAgLyogZGlzY29ubmVjdCBzaWduYWxzLCB1bnJlZiB3aWxsIHRyaWdnZXIgcmVtb3ZlIGNhbGxiYWNrcyBvdGhlcndpc2UgKi8KLSAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChwaXBlLCBpZF9hZGRlZCk7Ci0gIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAocGlwZSwgaWRfcmVtb3ZlZCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2RlZmluZSBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTKGVsZW1lbnRfZmxhZ3MsIHN1cHByZXNzZWRfZmxhZ3MsIFwKLSAgICBleHBlY3RlZF9mbGFncykgXAotR19TVE1UX1NUQVJUIHsgXAotICBHc3RCaW4gKmJpbiA9IEdTVF9CSU4gKGdzdF9iaW5fbmV3ICgidGVzdC1iaW4iKSk7IFwKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgInRlc3QtaSIpOyBcCi0gIEdzdEVsZW1lbnRGbGFncyBuYXR1cmFsX2ZsYWdzID0gR1NUX09CSkVDVF9GTEFHUyAoYmluKTsgXAotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChlbGVtZW50LCBlbGVtZW50X2ZsYWdzKTsgXAotICBnc3RfYmluX3NldF9zdXBwcmVzc2VkX2ZsYWdzIChiaW4sIHN1cHByZXNzZWRfZmxhZ3MpOyBcCi0gIGdzdF9iaW5fYWRkIChiaW4sIGVsZW1lbnQpOyBcCi0gIGZhaWxfdW5sZXNzICgobmF0dXJhbF9mbGFncyB8IEdTVF9PQkpFQ1RfRkxBR1MgKGJpbikpIFwKLSAgICAgID09IGV4cGVjdGVkX2ZsYWdzKTsgXAotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOyBcCi19IEdfU1RNVF9FTkQKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3VwcHJlc3NlZF9mbGFncykKLXsKLSAgX0dTVF9DSEVDS19CSU5fU1VQUFJFU1NFRF9GTEFHUyAoR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UsCi0gICAgICAwLCBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSk7Ci0gIF9HU1RfQ0hFQ0tfQklOX1NVUFBSRVNTRURfRkxBR1MgKEdTVF9FTEVNRU5UX0ZMQUdfU09VUkNFLAotICAgICAgR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UsIDApOwotICBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSwKLSAgICAgIEdTVF9FTEVNRU5UX0ZMQUdfU0lOSywgR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UpOwotICBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSB8Ci0gICAgICBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0ssCi0gICAgICBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0ssIEdTVF9FTEVNRU5UX0ZMQUdfU09VUkNFKTsKLQotICBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1NJTkssCi0gICAgICAwLCBHU1RfRUxFTUVOVF9GTEFHX1NJTkspOwotICBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1NJTkssCi0gICAgICBHU1RfRUxFTUVOVF9GTEFHX1NJTkssIDApOwotICBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1NJTkssCi0gICAgICBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSwgR1NUX0VMRU1FTlRfRkxBR19TSU5LKTsKLQotICBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0ssCi0gICAgICAwLCBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0spOwotICBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0ssCi0gICAgICBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0ssIDApOwotICBfR1NUX0NIRUNLX0JJTl9TVVBQUkVTU0VEX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0ssCi0gICAgICBHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0ssIEdTVF9FTEVNRU5UX0ZMQUdfUFJPVklERV9DTE9DSyk7Ci0KLSAgX0dTVF9DSEVDS19CSU5fU1VQUFJFU1NFRF9GTEFHUyAoR1NUX0VMRU1FTlRfRkxBR19SRVFVSVJFX0NMT0NLLAotICAgICAgMCwgR1NUX0VMRU1FTlRfRkxBR19SRVFVSVJFX0NMT0NLKTsKLSAgX0dTVF9DSEVDS19CSU5fU1VQUFJFU1NFRF9GTEFHUyAoR1NUX0VMRU1FTlRfRkxBR19SRVFVSVJFX0NMT0NLLAotICAgICAgR1NUX0VMRU1FTlRfRkxBR19SRVFVSVJFX0NMT0NLLCAwKTsKLSAgX0dTVF9DSEVDS19CSU5fU1VQUFJFU1NFRF9GTEFHUyAoR1NUX0VMRU1FTlRfRkxBR19SRVFVSVJFX0NMT0NLLAotICAgICAgR1NUX0VMRU1FTlRfRkxBR19QUk9WSURFX0NMT0NLLCBHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfYmluX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEJpbiIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJiaW4gdGVzdHMiKTsKLQotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJmYWNlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Vvcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJlYW1fc3RhcnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY2hpbGRyZW5fc3RhdGVfY2hhbmdlX29yZGVyX2ZsYWdnZWRfc2luayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jaGlsZHJlbl9zdGF0ZV9jaGFuZ2Vfb3JkZXJfc2VtaV9zaW5rKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NoaWxkcmVuX3N0YXRlX2NoYW5nZV9vcmRlcl90d29fc2luayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tZXNzYWdlX3N0YXRlX2NoYW5nZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVzc2FnZV9zdGF0ZV9jaGFuZ2VkX2NoaWxkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lc3NhZ2Vfc3RhdGVfY2hhbmdlZF9jaGlsZHJlbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF93YXRjaF9mb3Jfc3RhdGVfY2hhbmdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0YXRlX2NoYW5nZV9lcnJvcl9tZXNzYWdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9saW5rZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkX3NlbGYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaXRlcmF0ZV9zb3J0ZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGlua19zdHJ1Y3R1cmVfY2hhbmdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0YXRlX2ZhaWx1cmVfcmVtb3ZlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0YXRlX2ZhaWx1cmVfdW5yZWYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RhdGVfY2hhbmdlX3NraXApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZHVyYXRpb25faXNfbWF4KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2R1cmF0aW9uX3Vua25vd25fb3ZlcnJpZGVzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlZXBfYWRkZWRfcmVtb3ZlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdXBwcmVzc2VkX2ZsYWdzKTsKLQotICAvKiBmYWlscyBvbiBPU1ggYnVpbGQgYm90IGZvciBzb21lIHJlYXNvbiwgYW5kIGlzIGEgYml0IHNpbGx5IGFueXdheSAqLwotICBpZiAoMCkKLSAgICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWFueV9iaW5zKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9iaW4pOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjBkODU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RidWZmZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDkyMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIEdzdEJ1ZmZlcgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N1YmJ1ZmZlcikKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIsICpzdWI7Ci0gIEdzdE1hcEluZm8gaW5mbywgc2luZm87Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLQotICAvKiBjaGVjayBzaXplcywgYnVmZmVyIHN0YXJ0cyBvdXQgZW1wdHkgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1dSSVRFKSk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvLnNpemUgPT0gNCwgImJ1ZmZlciBoYXMgd3Jvbmcgc2l6ZSIpOwotICBmYWlsX3VubGVzcyAoaW5mby5tYXhzaXplID49IDQsICJidWZmZXIgaGFzIHdyb25nIHNpemUiKTsKLSAgbWVtc2V0IChpbmZvLmRhdGEsIDAsIDQpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICAvKiBzZXQgc29tZSBtZXRhZGF0YSAqLwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDE7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAyOwotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSA9IDM7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSA9IDQ7Ci0KLSAgc3ViID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCAxLCAyKTsKLSAgZmFpbF9pZiAoc3ViID09IE5VTEwsICJjb3B5IHJlZ2lvbiBvZiBidWZmZXIgcmV0dXJuZWQgTlVMTCIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoc3ViLCAmc2luZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoc2luZm8uc2l6ZSA9PSAyLCAic3ViYnVmZmVyIGhhcyB3cm9uZyBzaXplIik7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKGluZm8uZGF0YSArIDEsIHNpbmZvLmRhdGEsIDIpID09IDAsCi0gICAgICAic3ViYnVmZmVyIGNvbnRhaW5zIHRoZSB3cm9uZyBkYXRhIik7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHN1YiwgInN1YmJ1ZmZlciIsIDEpOwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKHN1YikgPT0gLTEsCi0gICAgICAic3ViYnVmZmVyIGhhcyB3cm9uZyB0aW1lc3RhbXAiKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKHN1YikgPT0gLTEsICJzdWJidWZmZXIgaGFzIHdyb25nIGR1cmF0aW9uIik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX09GRlNFVCAoc3ViKSA9PSAtMSwgInN1YmJ1ZmZlciBoYXMgd3Jvbmcgb2Zmc2V0Iik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX09GRlNFVF9FTkQgKHN1YikgPT0gLTEsCi0gICAgICAic3ViYnVmZmVyIGhhcyB3cm9uZyBvZmZzZXQgZW5kIik7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKHN1YiwgJnNpbmZvKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKLQotICAvKiBjcmVhdGUgYSBzdWJidWZmZXIgb2Ygc2l6ZSAwICovCi0gIHN1YiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMSwgMCk7Ci0gIGZhaWxfaWYgKHN1YiA9PSBOVUxMLCAiY29weV9yZWdpb24gb2YgYnVmZmVyIHJldHVybmVkIE5VTEwiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChzdWIsICZzaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gIGZhaWxfdW5sZXNzIChzaW5mby5zaXplID09IDAsICJzdWJidWZmZXIgaGFzIHdyb25nIHNpemUiKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAoaW5mby5kYXRhICsgMSwgc2luZm8uZGF0YSwgMCkgPT0gMCwKLSAgICAgICJzdWJidWZmZXIgY29udGFpbnMgdGhlIHdyb25nIGRhdGEiKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoc3ViLCAic3ViYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKHN1YiwgJnNpbmZvKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKLQotICAvKiB0ZXN0IGlmIG1ldGFkYXRhIGlzIGNvcHBpZWQsIG5vdCBhIGNvbXBsZXRlIGJ1ZmZlciBjb3B5IHNvIG9ubHkgdGhlCi0gICAqIHRpbWVzdGFtcCBhbmQgb2Zmc2V0IGZpZWxkcyBhcmUgY29waWVkLiAqLwotICBzdWIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIDEpOwotICBmYWlsX2lmIChzdWIgPT0gTlVMTCwgImNvcHlfcmVnaW9uIG9mIGJ1ZmZlciByZXR1cm5lZCBOVUxMIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChzdWIpID09IDEsICJzdWJidWZmZXIgaGFzIHdyb25nIHNpemUiKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChzdWIpID09IDEsCi0gICAgICAic3ViYnVmZmVyIGhhcyB3cm9uZyB0aW1lc3RhbXAiKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfT0ZGU0VUIChzdWIpID09IDMsICJzdWJidWZmZXIgaGFzIHdyb25nIG9mZnNldCIpOwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoc3ViKSA9PSAtMSwgInN1YmJ1ZmZlciBoYXMgd3JvbmcgZHVyYXRpb24iKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoc3ViKSA9PSAtMSwKLSAgICAgICJzdWJidWZmZXIgaGFzIHdyb25nIG9mZnNldCBlbmQiKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKLQotICAvKiB0ZXN0IGlmIG1ldGFkYXRhIGlzIGNvcHBpZWQsIGEgY29tcGxldGUgYnVmZmVyIGlzIGNvcGllZCBzbyBhbGwgdGhlIHRpbWluZwotICAgKiBmaWVsZHMgc2hvdWxkIGJlIGNvcGllZC4gKi8KLSAgc3ViID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCAwLCA0KTsKLSAgZmFpbF9pZiAoc3ViID09IE5VTEwsICJjb3B5X3JlZ2lvbiBvZiBidWZmZXIgcmV0dXJuZWQgTlVMTCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoc3ViKSA9PSA0LCAic3ViYnVmZmVyIGhhcyB3cm9uZyBzaXplIik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoc3ViKSA9PSAxLAotICAgICAgInN1YmJ1ZmZlciBoYXMgd3JvbmcgdGltZXN0YW1wIik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0RVUkFUSU9OIChzdWIpID09IDIsICJzdWJidWZmZXIgaGFzIHdyb25nIGR1cmF0aW9uIik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX09GRlNFVCAoc3ViKSA9PSAzLCAic3ViYnVmZmVyIGhhcyB3cm9uZyBvZmZzZXQiKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoc3ViKSA9PSA0LAotICAgICAgInN1YmJ1ZmZlciBoYXMgd3Jvbmcgb2Zmc2V0IGVuZCIpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKHN1Yik7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3BhbikKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIsICpzdWIxLCAqc3ViMiwgKnNwYW47Ci0gIEdzdE1hcEluZm8gaW5mbzsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICBtZW1jcHkgKGluZm8uZGF0YSwgImRhdGEiLCA0KTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0KLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX2FwcGVuZCAoTlVMTCwgTlVMTCkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfYXBwZW5kIChidWZmZXIsIE5VTEwpKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX2FwcGVuZCAoTlVMTCwgYnVmZmVyKSk7Ci0KLSAgc3ViMSA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMCwgMik7Ci0gIGZhaWxfaWYgKHN1YjEgPT0gTlVMTCwgImNvcHlfcmVnaW9uIG9mIGJ1ZmZlciByZXR1cm5lZCBOVUxMIik7Ci0KLSAgc3ViMiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMiwgMik7Ci0gIGZhaWxfaWYgKHN1YjIgPT0gTlVMTCwgImNvcHlfcmVnaW9uIG9mIGJ1ZmZlciByZXR1cm5lZCBOVUxMIik7Ci0KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAicGFyZW50IiwgMSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHN1YjEsICJzdWIxIiwgMSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKHN1YjIsICJzdWIyIiwgMSk7Ci0KLSAgLyogc3BhbiB3aWxsIGNyZWF0ZSBhIG5ldyBzdWJidWZmZXIgZnJvbSB0aGUgcGFyZW50ICovCi0gIGdzdF9idWZmZXJfcmVmIChzdWIxKTsKLSAgZ3N0X2J1ZmZlcl9yZWYgKHN1YjIpOwotICBzcGFuID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKHN1YjEsIHN1YjIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKHNwYW4sICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLSAgZmFpbF91bmxlc3MgKGluZm8uc2l6ZSA9PSA0LCAic3Bhbm5lZCBidWZmZXIgaXMgd3Jvbmcgc2l6ZSIpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJwYXJlbnQiLCAxKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoc3ViMSwgInN1YjEiLCAxKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoc3ViMiwgInN1YjIiLCAxKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoc3BhbiwgInNwYW4iLCAxKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAoaW5mby5kYXRhLCAiZGF0YSIsIDQpID09IDAsCi0gICAgICAic3Bhbm5lZCBidWZmZXIgY29udGFpbnMgdGhlIHdyb25nIGRhdGEiKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoc3BhbiwgJmluZm8pOwotICBnc3RfYnVmZmVyX3VucmVmIChzcGFuKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAicGFyZW50IiwgMSk7Ci0KLSAgLyogc3BhbiBmcm9tIG5vbi1jb250aWd1b3VzIGJ1ZmZlcnMgd2lsbCBjcmVhdGUgbmV3IGJ1ZmZlcnMgKi8KLSAgZ3N0X2J1ZmZlcl9yZWYgKHN1YjEpOwotICBnc3RfYnVmZmVyX3JlZiAoc3ViMik7Ci0gIHNwYW4gPSBnc3RfYnVmZmVyX2FwcGVuZCAoc3ViMiwgc3ViMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoc3BhbiwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09IDQsICJzcGFubmVkIGJ1ZmZlciBpcyB3cm9uZyBzaXplIik7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgInBhcmVudCIsIDEpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzdWIxLCAic3ViMSIsIDEpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzdWIyLCAic3ViMiIsIDEpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzcGFuLCAic3BhbiIsIDEpOwotICBmYWlsX3VubGVzcyAobWVtY21wIChpbmZvLmRhdGEsICJ0YWRhIiwgNCkgPT0gMCwKLSAgICAgICJzcGFubmVkIGJ1ZmZlciBjb250YWlucyB0aGUgd3JvbmcgZGF0YSIpOwotICBnc3RfYnVmZmVyX3VubWFwIChzcGFuLCAmaW5mbyk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKHNwYW4pOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJwYXJlbnQiLCAxKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfYnVmZmVyX3VucmVmIChzdWIxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViMik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgY29uc3QgY2hhciByb19tZW1vcnlbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotY3JlYXRlX3JlYWRfb25seV9idWZmZXIgKHZvaWQpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gIC8qIGFzc2lnbiBzb21lIHJlYWQtb25seSBkYXRhIHRvIHRoZSBuZXcgYnVmZmVyICovCi0gIGdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSAoYnVmLCAtMSwKLSAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKLSAgICAgICAgICAoZ3BvaW50ZXIpIHJvX21lbW9yeSwgc2l6ZW9mIChyb19tZW1vcnkpLAotICAgICAgICAgIDAsIHNpemVvZiAocm9fbWVtb3J5KSwgTlVMTCwgTlVMTCkpOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21ha2Vfd3JpdGFibGUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmLCAqYnVmMjsKLSAgR3N0TWFwSW5mbyBpbmZvOwotCi0gIC8qIGNyZWF0ZSByZWFkLW9ubHkgYnVmZmVyIGFuZCBtYWtlIGl0IHdyaXRhYmxlICovCi0gIGJ1ZiA9IGNyZWF0ZV9yZWFkX29ubHlfYnVmZmVyICgpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICBpbmZvLmRhdGFbNF0gPSAnYSc7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIC8qIGFsbG9jJ2VkIGJ1ZmZlciB3aXRoIHJlZmNvdW50IDEgc2hvdWxkIGJlIHdyaXRhYmxlICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMzIpOwotICBidWYyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWYpOwotICBmYWlsX3VubGVzcyAoYnVmID09IGJ1ZjIsCi0gICAgICAiX21ha2Vfd3JpdGFibGUoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBzYW1lIGJ1ZmZlciIpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKLQotICAvKiBhbGxvYydlZCBidWZmZXIgd2l0aCByZWZjb3VudCA+MSBzaG91bGQgYmUgY29waWVkICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMzIpOwotICBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKLSAgYnVmMiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBidWYyLCAiX21ha2Vfd3JpdGFibGUoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBhIGNvcHkhIik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N1YmJ1ZmZlcl9tYWtlX3dyaXRhYmxlKQotewotICBHc3RCdWZmZXIgKmJ1ZiwgKnN1Yl9idWY7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLQotICAvKiBjcmVhdGUgc3ViLWJ1ZmZlciBvZiByZWFkLW9ubHkgYnVmZmVyIGFuZCBtYWtlIGl0IHdyaXRhYmxlICovCi0gIGJ1ZiA9IGNyZWF0ZV9yZWFkX29ubHlfYnVmZmVyICgpOwotCi0gIHN1Yl9idWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWYsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIDgpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoc3ViX2J1ZiwgJmluZm8sIEdTVF9NQVBfV1JJVEUpKTsKLSAgZmFpbF9pZiAoaW5mby5kYXRhID09IE5VTEwpOwotICBpbmZvLmRhdGFbNF0gPSAnYSc7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKHN1Yl9idWYsICZpbmZvKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViX2J1Zik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWV0YWRhdGFfd3JpdGFibGUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyLCAqc3ViMTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCk7Ci0KLSAgLyogQnVmZmVyIHdpdGggcmVmY291bnQgMSBzaG91bGQgaGF2ZSB3cml0YWJsZSBtZXRhZGF0YSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAoYnVmZmVyKSA9PSBUUlVFKTsKLQotICAvKiBDaGVjayB0aGF0IGEgYnVmZmVyIHdpdGggcmVmY291bnQgMiBkb2VzIG5vdCBoYXZlIHdyaXRhYmxlIG1ldGFkYXRhICovCi0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGJ1ZmZlcikgPT0gRkFMU0UpOwotCi0gIC8qIENoZWNrIHRoYXQgbWFrZV9tZXRhZGF0YV93cml0YWJsZSBwcm9kdWNlcyBhIG5ldyBzdWItYnVmZmVyIHdpdGggCi0gICAqIHdyaXRhYmxlIG1ldGFkYXRhLiAqLwotICBzdWIxID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOwotICBmYWlsX2lmIChzdWIxID09IGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChzdWIxKSA9PSBUUlVFKTsKLQotICAvKiBDaGVjayB0aGF0IG1ha2VfbWV0YWRhdGFfd3JpdGFibGUoKSBtYWludGFpbnMgdGhlIGJ1ZmZlciBmbGFncyAqLwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoc3ViMSwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKHN1YjEsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSk7Ci0KLSAgLyogVW5zZXQgZmxhZ3Mgb24gd3JpdGFibGUgYnVmZmVyLCB0aGVuIG1ha2Ugc3VyZSB0aGV5J3JlIHN0aWxsCi0gICAqIHNldCBvbiB0aGUgb3JpZ2luYWwgYnVmZmVyICovCi0gIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAoc3ViMSwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKHN1YjEsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpKTsKLQotICAvKiBEcm9wIHRoZSBzdWJidWZmZXIgYW5kIGNoZWNrIHRoYXQgdGhlIG1ldGFkYXRhIGlzIG5vdyB3cml0YWJsZSBhZ2FpbiAqLwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChzdWIxLCAic3ViMSIsIDEpOwotICBnc3RfYnVmZmVyX3VucmVmIChzdWIxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGJ1ZmZlcikgPT0gVFJVRSk7Ci0KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVtY21wKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgY2hhciBidWZbM10gPSB7IDAsIDAsIDAgfTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIpOwotICBnc3RfYnVmZmVyX21lbXNldCAoYnVmZmVyLCAwLCAwLCAyKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGJ1ZmZlciwgMCwgYnVmLCAyKSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChidWZmZXIsIDAsIGJ1ZiwgMSkgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmZmVyLCAxLCBidWYsIDEpID09IDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGJ1ZmZlciwgMCwgYnVmLCAzKSAhPSAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChidWZmZXIsIDIsIGJ1ZiwgMSkgIT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmZmVyLCA0LCBidWYsIDEpICE9IDApOwotCi0gIGdzdF9idWZmZXJfbWVtc2V0IChidWZmZXIsIDAsIDB4MjAsIDIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGJ1ZmZlciwgMCwgYnVmLCAyKSAhPSAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChidWZmZXIsIDAsIGJ1ZiwgMSkgIT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmZmVyLCAxLCBidWYsIDEpICE9IDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGJ1ZmZlciwgMCwgYnVmLCAzKSAhPSAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChidWZmZXIsIDIsIGJ1ZiwgMSkgIT0gMCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb3B5KQotewotICBHc3RCdWZmZXIgKmJ1ZmZlciwgKmNvcHk7Ci0gIEdzdE1hcEluZm8gaW5mbywgc2luZm87Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0KLSAgY29weSA9IGdzdF9idWZmZXJfY29weSAoYnVmZmVyKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGNvcHksICJjb3B5IiwgMSk7Ci0gIC8qIGJ1ZmZlcnMgYXJlIGNvcGllZCBhbmQgbXVzdCBwb2ludCB0byBkaWZmZXJlbnQgbWVtb3J5ICovCi0gIGZhaWxfaWYgKGJ1ZmZlciA9PSBjb3B5KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGNvcHksICZzaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0KLSAgLyogTk9URSB0aGF0IGRhdGEgaXMgcmVmY291bnRlZCAqLwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09IHNpbmZvLnNpemUpOwotICAvKiBHc3RCdWZmZXIgd2FzIGNvcGllZCBidXQgdGhlIHVuZGVybHlpbmcgR3N0TWVtb3J5IHNob3VsZCBiZSB0aGUgc2FtZSAqLwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhID09IHNpbmZvLmRhdGEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGNvcHksICZzaW5mbyk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGNvcHkpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIC8qIGEgMC1zaXplZCBidWZmZXIgaGFzIE5VTEwgZGF0YSBhcyBwZXIgZG9jcyAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhID09IE5VTEwpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLQotICAvKiBjb3B5aW5nIGEgMC1zaXplZCBidWZmZXIgc2hvdWxkIG5vdCBjcmFzaCBhbmQgYWxzbyBzZXQKLSAgICogdGhlIGRhdGEgbWVtYmVyIE5VTEwuICovCi0gIGNvcHkgPSBnc3RfYnVmZmVyX2NvcHkgKGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoY29weSwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhID09IE5VTEwpOwotICBnc3RfYnVmZmVyX3VubWFwIChjb3B5LCAmaW5mbyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoY29weSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgLyogY2hlY2sgaWYgY29weSBpcyBhbiBpbmRlcGVuZGVudCBjb3B5IHdoZW4gd3JpdHRlbiB0byAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBnc3RfYnVmZmVyX21lbXNldCAoYnVmZmVyLCAwLCAwLCA0KTsKLSAgY29weSA9IGdzdF9idWZmZXJfY29weSAoYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGNvcHkpKTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGNvcHksIDAsIDB4ODAsIDQpOwotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKLSAgZmFpbF9pZiAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGNvcHksIDAsIGluZm8uZGF0YSwgaW5mby5zaXplKSA9PSAwKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoY29weSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgLyogY29weSBzaG91bGQgc3RpbGwgYmUgaW5kZXBlbmRlbnQgaWYgY29waWVkIHdoZW4gbWFwcGVkICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIGdzdF9idWZmZXJfbWVtc2V0IChidWZmZXIsIDAsIDAsIDQpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfV1JJVEUpKTsKLSAgY29weSA9IGdzdF9idWZmZXJfY29weSAoYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGNvcHkpKTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGNvcHksIDAsIDB4ODAsIDQpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLSAgZmFpbF9pZiAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGNvcHksIDAsIGluZm8uZGF0YSwgaW5mby5zaXplKSA9PSAwKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoY29weSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgLyogY2hlY2sgaWYgYSB3cml0YWJsZSBjbG9uZSBvZiBhIGJ1ZmZlciBpcyBpbmRlcGVuZGVudCB3aGVuIHdyaXR0ZW4gdG8gKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGJ1ZmZlciwgMCwgMCwgNCk7Ci0gIGNvcHkgPSBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLSAgY29weSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoY29weSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChjb3B5KSk7Ci0gIGdzdF9idWZmZXJfbWVtc2V0IChjb3B5LCAwLCAweDgwLCA0KTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCk7Ci0gIGZhaWxfaWYgKGdzdF9idWZmZXJfbWVtY21wIChjb3B5LCAwLCBpbmZvLmRhdGEsIGluZm8uc2l6ZSkgPT0gMCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGNvcHkpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NvcHlfZGVlcCkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIsICpjb3B5OwotICBHc3RNYXBJbmZvIGluZm8sIHNpbmZvOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOwotCi0gIGNvcHkgPSBnc3RfYnVmZmVyX2NvcHlfZGVlcCAoYnVmZmVyKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGNvcHksICJjb3B5IiwgMSk7Ci0gIC8qIGJ1ZmZlcnMgYXJlIGNvcGllZCBhbmQgbXVzdCBwb2ludCB0byBkaWZmZXJlbnQgbWVtb3J5ICovCi0gIGZhaWxfaWYgKGJ1ZmZlciA9PSBjb3B5KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGNvcHksICZzaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0KLSAgLyogTk9URSB0aGF0IGRhdGEgaXMgcmVmY291bnRlZCAqLwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09IHNpbmZvLnNpemUpOwotICAvKiBjb3B5X2RlZXAoKSBmb3JjZXMgbmV3IEdzdE1lbW9yeSB0byBiZSB1c2VkICovCi0gIGZhaWxfdW5sZXNzIChpbmZvLmRhdGEgIT0gc2luZm8uZGF0YSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoY29weSwgJnNpbmZvKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoY29weSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHJ5X25ld19hbmRfYWxsb2MpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIGluZm87Ci0KLSAgLyogc3BlY2lhbCBjYXNlOiBhbGxvYyBvZiAwIGJ5dGVzIHJlc3VsdHMgaW4gbmV3IGJ1ZmZlciB3aXRoIE5VTEwgZGF0YSAqLwotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDApOwotICBmYWlsX3VubGVzcyAoYnVmICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAoYnVmKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvLmRhdGEgPT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIC8qIG5vcm1hbCBhbGxvYyBzaG91bGQgc3RpbGwgd29yayAqLwotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDY0MCAqIDQ4MCAqIDQpOwotICBmYWlsX3VubGVzcyAoYnVmICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAoYnVmKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09ICg2NDAgKiA0ODAgKiA0KSk7Ci0gIGluZm8uZGF0YVs2NDAgKiA0NzkgKiA0ICsgNDc5XSA9IDB4ZmY7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2l6ZSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdE1lbW9yeSAqbWVtOwotICBnc2l6ZSBtYXhhbGxvYywgbWF4YWxsb2MyLCBtYXhhbGxvYzMsIG1heGFsbG9jNDsKLSAgZ3NpemUgc2l6ZSwgbWF4c2l6ZSwgb2Zmc2V0OwotCi0gIC8qIG9uZSBtZW1vcnkgYmxvY2sgKi8KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEwMCwgTlVMTCk7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhhbGxvYyk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhhbGxvYyA+PSAxMDApOwotCi0gIG1lbSA9IGdzdF9idWZmZXJfZ2V0X21lbW9yeSAoYnVmLCAwKTsKLSAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMTAsIDcwKTsKLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLQotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heHNpemUpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSA3MCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMTApOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgLyogbmV3IG1lbW9yeSAqLwotICBtZW0gPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCAxMDAsIE5VTEwpOwotICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgJm9mZnNldCwgJm1heGFsbG9jMik7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhhbGxvYzIgPj0gMTAwKTsKLQotICBnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCAyMCwgNjApOwotICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgJm9mZnNldCwgJm1heHNpemUpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSA2MCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMjApOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYzIpOwotCi0gIC8qIGFwcGVuZCAqLwotICBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkgKGJ1ZiwgLTEsIG1lbSk7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhhbGxvYyk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDEzMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMTApOwotICAvKiB0aGUgbWF4c2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgYnVmZmVyIHBsdXMgdGhlIHJlbWFpbmluZyBzaXplIGluIHRoZQotICAgKiBzZWNvbmQgYnVmZmVyICovCi0gIGZhaWxfdW5sZXNzIChtYXhhbGxvYyA9PSA4MCArIChtYXhhbGxvYzIgLSAyMCkpOwotCi0gIC8qIGFwcGVuZGluZyBhbiBlbXB0eSBibG9jayAqLwotICBtZW0gPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCAxMDAsIE5VTEwpOwotICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgJm9mZnNldCwgJm1heGFsbG9jMyk7Ci0gIGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIDAsIDApOwotICBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkgKGJ1ZiwgLTEsIG1lbSk7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhhbGxvYyk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDEzMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMTApOwotICAvKiB0aGUgbWF4c2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgYnVmZmVyIHBsdXMgdGhlIHJlbWFpbmluZyBzaXplIGluIHRoZQotICAgKiBzZWNvbmQgYnVmZmVyIGFuZCB0aGUgbGFzdCBlbXB0eSBidWZmZXIqLwotICBmYWlsX3VubGVzcyAobWF4YWxsb2MgPT0gODAgKyAobWF4YWxsb2MyIC0gMjApICsgbWF4YWxsb2MzKTsKLQotICAvKiBwcmVwZW5kaW5nIGFuIGVtcHR5IGJsb2NrICovCi0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDEwMCwgTlVMTCk7Ci0gIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmb2Zmc2V0LCAmbWF4YWxsb2M0KTsKLSAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMCwgMCk7Ci0gIGdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSAoYnVmLCAwLCBtZW0pOwotCi0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4YWxsb2MpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMzApOwotICAvKiBlbXB0eSBidWZmZXIgbWF4c2l6ZSBjYW4gYmUgdXNlZCBhcyBvZmZzZXQgKi8KLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAxMCArIG1heGFsbG9jNCk7Ci0gIC8qIHRoZSBtYXhzaXplIGlzIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBidWZmZXIgcGx1cyB0aGUgcmVtYWluaW5nIHNpemUgaW4gdGhlCi0gICAqIHNlY29uZCBidWZmZXIgYW5kIHRoZSBsYXN0IGVtcHR5IGJ1ZmZlciovCi0gIGZhaWxfdW5sZXNzIChtYXhhbGxvYyA9PSA4MCArIChtYXhhbGxvYzIgLSAyMCkgKyBtYXhhbGxvYzMgKyBtYXhhbGxvYzQpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVzaXplKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3NpemUgbWF4YWxsb2M7Ci0gIGdzaXplIHNpemUsIG1heHNpemUsIG9mZnNldDsKLQotICAvKiBvbmUgbWVtb3J5IGJsb2NrICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMDAsIE5VTEwpOwotCi0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4YWxsb2MpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBmYWlsX3VubGVzcyAobWF4YWxsb2MgPj0gMTAwKTsKLQotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfcmVzaXplIChidWYsIDIwMCwgNTApKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAwLCAxNTApKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAxLCBtYXhhbGxvYykpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfcmVzaXplIChidWYsIG1heGFsbG9jLCAxKSk7Ci0KLSAgLyogdGhpcyBkb2VzIG5vdGhpbmcgKi8KLSAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgMTAwKTsKLQotICAvKiBub3RoaW5nIHNob3VsZCBoYXZlIGNoYW5nZWQgKi8KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDAsIDUwKTsKLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gNTApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgMTAwKTsKLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDEsIDk5KTsKLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gOTkpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDEpOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAxLCBtYXhhbGxvYyAtIDEpKTsKLQotICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAwLCA5OSk7Ci0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDk5KTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9idWZmZXJfcmVzaXplIChidWYsIC0xLCAxMDApOwotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heHNpemUpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAtMSwgMTAwKSk7Ci0KLSAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgNTAsIDQwKTsKLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gNDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9idWZmZXJfcmVzaXplIChidWYsIC01MCwgMTAwKTsKLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDAsIDApOwotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heHNpemUpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9idWZmZXJfcmVzaXplIChidWYsIDAsIDEwMCk7Ci0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKLQotICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAwLCAxMDApOwotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMgKGJ1ZiwgJm9mZnNldCwgJm1heHNpemUpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tYXApCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcCwgbWFwMjsKLSAgZ3NpemUgbWF4YWxsb2M7Ci0gIGdzaXplIHNpemUsIG9mZnNldDsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5IChidWYsIC0xLCBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCA1MCwgTlVMTCkpOwotICBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkgKGJ1ZiwgLTEsIGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDUwLCBOVUxMKSk7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhhbGxvYyk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhhbGxvYyA+PSAxMDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSA9PSAyKTsKLQotICAvKiBtYWtlIHJlYWRvbmx5ICovCi0gIGdzdF9idWZmZXJfcmVmIChidWYpOwotICAvKiBtYXAgc2hvdWxkIG1lcmdlICovCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIC8qIG1lcmdlZCBtZW1vcnkgaXMgbm90IHN0b3JlZCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSA9PSAyKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSA9PSAyKTsKLQotICAvKiBjYW4ndCBtYXAgd3JpdGUgb24gcmVhZG9ubHkgYnVmZmVyICovCi0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSkpOwotICAvKiBtYWtlIHdyaXRhYmxlIGFnYWluICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgLyogc2hvdWxkIG1lcmdlIGFuZCBzdG9yZSAqLwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSA9PSAxKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICAvKiBtYXBwaW5nIHNhbWUga2luZCBzaG91bGQgYmUgb2sgdXNpbmcgc2FtZSBtZW1vcnkgKi8KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwMiwgR1NUX01BUF9XUklURSkpOwotICBmYWlsX3VubGVzcyAobWFwLm1lbW9yeSA9PSBtYXAyLm1lbW9yeSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcDIpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIC8qIC4uLiBidXQgZGlmZmVyZW50IGtpbmQgc2hvdWxkIGdpdmUgdGVtcG9yYXJ5IG1lbW9yeSAqLwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAyLCBHU1RfTUFQX1JFQUQpKTsKLSAgZmFpbF9pZiAobWFwLm1lbW9yeSA9PSBtYXAyLm1lbW9yeSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcDIpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWFwX3JhbmdlKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdzaXplIG1heGFsbG9jOwotICBnc2l6ZSBzaXplLCBvZmZzZXQ7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSAoYnVmLCAtMSwgZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgNTAsIE5VTEwpKTsKLSAgZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5IChidWYsIC0xLCBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCA1MCwgTlVMTCkpOwotICBnc3RfYnVmZmVyX2luc2VydF9tZW1vcnkgKGJ1ZiwgLTEsIGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDUwLCBOVUxMKSk7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemVzIChidWYsICZvZmZzZXQsICZtYXhhbGxvYyk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDE1MCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhhbGxvYyA+PSAxNTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSA9PSAzKTsKLQotICBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKLSAgLyogbWFwIHNob3VsZCBtZXJnZSAqLwotICBnc3RfYnVmZmVyX21hcF9yYW5nZSAoYnVmLCAxLCAyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAvKiBtZXJnZWQgbWVtb3J5IGlzIG5vdCBzdG9yZWQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZikgPT0gMyk7Ci0gIGZhaWxfdW5sZXNzIChtYXAuc2l6ZSA9PSAxMDApOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX25fbWVtb3J5IChidWYpID09IDMpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgLyogbWFwIHNob3VsZCBtZXJnZSAqLwotICBnc3RfYnVmZmVyX21hcF9yYW5nZSAoYnVmLCAxLCAyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAvKiBtZXJnZWQgbWVtb3J5IGlzIHN0b3JlZCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSA9PSAyKTsKLSAgZmFpbF91bmxlc3MgKG1hcC5zaXplID09IDEwMCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZikgPT0gMik7Ci0KLSAgLyogc2hvdWxkIG1lcmdlIGFuZCBzdG9yZSAqLwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSA9PSAxKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpbmQpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBnc2l6ZSBtYXhhbGxvYzsKLSAgZ3NpemUgc2l6ZSwgb2Zmc2V0OwotICBndWludCBpZHgsIGxlbmd0aDsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWYsIGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDAsIE5VTEwpKTsKLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWYsIGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDEwLCBOVUxMKSk7Ci0gIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAoYnVmLCBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCAxNSwgTlVMTCkpOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGJ1ZiwgZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgMCwgTlVMTCkpOwotCi0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplcyAoYnVmLCAmb2Zmc2V0LCAmbWF4YWxsb2MpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAyNSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPj0gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhhbGxvYyA+PSAyNSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX25fbWVtb3J5IChidWYpID09IDQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5IChidWYsIDAsIDUsICZpZHgsICZsZW5ndGgsICZvZmZzZXQpKTsKLSAgZmFpbF91bmxlc3MgKGlkeCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGxlbmd0aCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9maW5kX21lbW9yeSAoYnVmLCAwLCAxMCwgJmlkeCwgJmxlbmd0aCwgJm9mZnNldCkpOwotICBmYWlsX3VubGVzcyAoaWR4ID09IDEpOwotICBmYWlsX3VubGVzcyAobGVuZ3RoID09IDEpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5IChidWYsIDUsIDQsICZpZHgsICZsZW5ndGgsICZvZmZzZXQpKTsKLSAgZmFpbF91bmxlc3MgKGlkeCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGxlbmd0aCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSA1KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9maW5kX21lbW9yeSAoYnVmLCA1LCA1LCAmaWR4LCAmbGVuZ3RoLCAmb2Zmc2V0KSk7Ci0gIGZhaWxfdW5sZXNzIChpZHggPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChsZW5ndGggPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gNSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZmluZF9tZW1vcnkgKGJ1ZiwgNSwgNiwgJmlkeCwgJmxlbmd0aCwgJm9mZnNldCkpOwotICBmYWlsX3VubGVzcyAoaWR4ID09IDEpOwotICBmYWlsX3VubGVzcyAobGVuZ3RoID09IDIpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5IChidWYsIDEwLCA2LCAmaWR4LCAmbGVuZ3RoLCAmb2Zmc2V0KSk7Ci0gIGZhaWxfdW5sZXNzIChpZHggPT0gMik7Ci0gIGZhaWxfdW5sZXNzIChsZW5ndGggPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZmluZF9tZW1vcnkgKGJ1ZiwgMTAsIDE1LCAmaWR4LCAmbGVuZ3RoLCAmb2Zmc2V0KSk7Ci0gIGZhaWxfdW5sZXNzIChpZHggPT0gMik7Ci0gIGZhaWxfdW5sZXNzIChsZW5ndGggPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZmluZF9tZW1vcnkgKGJ1ZiwgMTEsIDE0LCAmaWR4LCAmbGVuZ3RoLCAmb2Zmc2V0KSk7Ci0gIGZhaWxfdW5sZXNzIChpZHggPT0gMik7Ci0gIGZhaWxfdW5sZXNzIChsZW5ndGggPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZmluZF9tZW1vcnkgKGJ1ZiwgMCwgMjUsICZpZHgsICZsZW5ndGgsICZvZmZzZXQpKTsKLSAgZmFpbF91bmxlc3MgKGlkeCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGxlbmd0aCA9PSAyKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9maW5kX21lbW9yeSAoYnVmLCAyNCwgMCwgJmlkeCwgJmxlbmd0aCwgJm9mZnNldCkpOwotICBmYWlsX3VubGVzcyAoaWR4ID09IDIpOwotICBmYWlsX3VubGVzcyAobGVuZ3RoID09IDEpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDE0KTsKLQotICBmYWlsX2lmIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5IChidWYsIDExLCAxNSwgJmlkeCwgJmxlbmd0aCwgJm9mZnNldCkpOwotICBmYWlsX2lmIChnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5IChidWYsIDAsIDI2LCAmaWR4LCAmbGVuZ3RoLCAmb2Zmc2V0KSk7Ci0gIGZhaWxfaWYgKGdzdF9idWZmZXJfZmluZF9tZW1vcnkgKGJ1ZiwgMjUsIDAsICZpZHgsICZsZW5ndGgsICZvZmZzZXQpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9maW5kX21lbW9yeSAoYnVmLCAxLCAtMSwgJmlkeCwgJmxlbmd0aCwgJm9mZnNldCkpOwotICBmYWlsX3VubGVzcyAoaWR4ID09IDEpOwotICBmYWlsX3VubGVzcyAobGVuZ3RoID09IDMpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDEpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmlsbCkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGd1aW50OCBkYXRhWzEwMjRdLCBkYXRhMlsyNV07Ci0gIGdpbnQgaTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWYsIGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDAsIE5VTEwpKTsKLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWYsIGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDEwLCBOVUxMKSk7Ci0gIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAoYnVmLCBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCAxNSwgTlVMTCkpOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGJ1ZiwgZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgMCwgTlVMTCkpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGRhdGEpOyArK2kpCi0gICAgZGF0YVtpXSA9IGkgJiAweGZmOwotCi0gIC8qIGEgTlVMTCBzcmMgcG9pbnRlciBzaG91bGQgYmUgb2sgaWYgdGhlIHNyYyBsZW5ndGggaXMgMCBieXRlcyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgTlVMTCwgMCksIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMjAsIE5VTEwsIDApLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGRhdGEsIDApLCAwKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgZGF0YSwgMSksIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgZGF0YSwgMTEpLCAxMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBkYXRhLCAxNSksIDE1KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGRhdGEsIDI1KSwgMjUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgZGF0YSwgMjYpLCAyNSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZmlsbCAoYnVmLCAxLCBkYXRhLCAyNiksIDI0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9maWxsIChidWYsIDEwLCBkYXRhLCAxMDApLCAxNSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZmlsbCAoYnVmLCAxMSwgZGF0YSwgMTAwKSwgMTQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMjUsIGRhdGEsIDEwMCksIDApOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBkYXRhICsgMTAsIDI1KSwgMjUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZiwgMCwgZGF0YTIsIDI1KSwgMjUpOwotICBmYWlsX3VubGVzcyAobWVtY21wIChkYXRhMiwgZGF0YSArIDEwLCAyNSkgPT0gMCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJlbnRfYnVmZmVyX21ldGEpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmLCAqcGFyZW50OwotICBHc3RQYXJlbnRCdWZmZXJNZXRhICptZXRhOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBwYXJlbnQgPSBnc3RfYnVmZmVyX25ldyAoKTsKLQotICBnc3RfYnVmZmVyX2FkZF9wYXJlbnRfYnVmZmVyX21ldGEgKGJ1ZiwgcGFyZW50KTsKLSAgbWV0YSA9IGdzdF9idWZmZXJfZ2V0X3BhcmVudF9idWZmZXJfbWV0YSAoYnVmKTsKLSAgZmFpbF91bmxlc3MgKG1ldGEpOwotICBmYWlsX3VubGVzcyAocGFyZW50ID09IG1ldGEtPmJ1ZmZlcik7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAocGFyZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfYnVmZmVyX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEJ1ZmZlciIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdWJidWZmZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3ViYnVmZmVyX21ha2Vfd3JpdGFibGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWFrZV93cml0YWJsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zcGFuKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21ldGFkYXRhX3dyaXRhYmxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lbWNtcCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jb3B5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvcHlfZGVlcCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90cnlfbmV3X2FuZF9hbGxvYyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaXplKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Jlc2l6ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWFwX3JhbmdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpbmQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmlsbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJlbnRfYnVmZmVyX21ldGEpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J1ZmZlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcmxpc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyMGQwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVybGlzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgR3N0QnVmZmVyTGlzdAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBeGlzIENvbW11bmljYXRpb25zIDxkZXYtZ3N0cmVhbWVyIGF0IGF4aXMgZG90IGNvbT4KLSAqIEBhdXRob3IgSm9uYXMgSG9sbWJlcmcgPGpvbmFzIGRvdCBob2xtYmVyZyBhdCBheGlzIGRvdCBjb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9nc3RidWZmZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXN0YXRpYyBHc3RCdWZmZXJMaXN0ICpsaXN0OwotCi1zdGF0aWMgdm9pZAotc2V0dXAgKHZvaWQpCi17Ci0gIGxpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cCAodm9pZCkKLXsKLSAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0KTsKLSAgbGlzdCA9IE5VTEw7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FkZF9hbmRfaXRlcmF0ZSkKLXsKLSAgR3N0QnVmZmVyICpidWYxOwotICBHc3RCdWZmZXIgKmJ1ZjI7Ci0KLSAgLyogYnVmZmVyIGxpc3QgaXMgaW5pdGlhbGx5IGVtcHR5ICovCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0KSA9PSAwKTsKLQotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKGxpc3QsIDAsIE5VTEwpKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0IChOVUxMLCAwLCBOVUxMKSk7Ci0KLSAgYnVmMSA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gIC8qIGFkZCBhIGdyb3VwIG9mIDIgYnVmZmVycyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCkgPT0gMCk7Ci0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2J1ZmZlcl9saXN0X2luc2VydCAobGlzdCwgLTEsIE5VTEwpKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAxKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgYnVmMSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjEsICJidWYxIiwgMSk7ICAgICAvKiBsaXN0IHRha2VzIG93bmVyc2hpcCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCkgPT0gMSk7Ci0gIGJ1ZjIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgYnVmMik7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjIsICJidWYyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0KSA9PSAyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZW1vdmUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotCi0gIC8qIGJ1ZmZlciBsaXN0IGlzIGluaXRpYWxseSBlbXB0eSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCkgPT0gMCk7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgLyogYWRkIG91ciBvd24gcmVmIHNvIGl0IHN0YXlzIGFsaXZlIGFmdGVyIHJlbW92YWwgZnJvbSB0aGUgbGlzdCAqLwotICBidWYgPSBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKLQotICAvKiBhZGQgYSBidWZmZXIgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGxpc3QpID09IDApOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKGxpc3QsIC0xLCBOVUxMKSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDIpOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWYpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYsICJidWYiLCAyKTsgICAgICAgLyogbGlzdCB0YWtlcyBvd25lcnNoaXAgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGxpc3QpID09IDEpOwotICBnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlIChsaXN0LCAwLCAxKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0KSA9PSAwKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tYWtlX3dyaXRhYmxlKQotewotICBHc3RCdWZmZXJMaXN0ICp3bGlzdDsKLSAgR3N0QnVmZmVyICpidWYxOwotICBHc3RCdWZmZXIgKmJ1ZjI7Ci0gIEdzdEJ1ZmZlciAqYnVmMzsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgLyogYWRkIGJ1ZmZlcnMgdG8gbGlzdCAqLwotICBidWYxID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEsIE5VTEwpOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWYxKTsKLQotICBidWYyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDIsIE5VTEwpOwotICBidWYzID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDMsIE5VTEwpOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBnc3RfYnVmZmVyX2FwcGVuZCAoYnVmMiwgYnVmMykpOwotCi0gIC8qIG1ha2luZyBpdCB3cml0YWJsZSB3aXRoIHJlZmNvdW50IDEgcmV0dXJucyB0aGUgc2FtZSBsaXN0ICovCi0gIHdsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X21ha2Vfd3JpdGFibGUgKGxpc3QpOwotICBmYWlsX3VubGVzcyAod2xpc3QgPT0gbGlzdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGxpc3QpLCAyKTsKLSAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChidWYgPT0gYnVmMSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjEsICJidWYxIiwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIDEpOwotICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAxKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYyKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMiwgImJ1ZjIiLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSwgMik7Ci0KLSAgLyogbWFraW5nIGl0IHdyaXRhYmxlIHdpdGggcmVmY291bnQgMiByZXR1cm5zIGEgY29weSBvZiB0aGUgbGlzdCB3aXRoCi0gICAqIGluY3JlYXNlZCByZWZjb3VudCBvbiB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdCAqLwotICBnc3RfYnVmZmVyX2xpc3RfcmVmIChsaXN0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChsaXN0KSwgMik7Ci0gIHdsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X21ha2Vfd3JpdGFibGUgKGxpc3QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGxpc3QpLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFICh3bGlzdCksIDEpOwotICBmYWlsX3VubGVzcyAod2xpc3QgIT0gbGlzdCk7Ci0gIC8qIGNoZWNrIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCksIDIpOwotICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCAwKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYxKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSwgMSk7Ci0gIGJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIDEpOwotICBmYWlsX3VubGVzcyAoYnVmID09IGJ1ZjIpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYyLCAiYnVmMiIsIDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX25fbWVtb3J5IChidWYpLCAyKTsKLSAgLyogY2hlY2sgd2xpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAod2xpc3QpLCAyKTsKLSAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAod2xpc3QsIDApOwotICBmYWlsX3VubGVzcyAoYnVmID09IGJ1ZjEpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYxLCAiYnVmMSIsIDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpLCAxKTsKLSAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAod2xpc3QsIDEpOwotICBmYWlsX3VubGVzcyAoYnVmID09IGJ1ZjIpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYyLCAiYnVmMiIsIDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX25fbWVtb3J5IChidWYpLCAyKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmICh3bGlzdCk7Ci0gIC8qIGxpc3Qgd2lsbCBiZSB1bnJlZmVkIGluIGNsZWFudXAgaG9vayAqLwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NvcHkpCi17Ci0gIEdzdEJ1ZmZlckxpc3QgKmxpc3RfY29weTsKLSAgR3N0QnVmZmVyICpidWYxOwotICBHc3RCdWZmZXIgKmJ1ZjI7Ci0gIEdzdEJ1ZmZlciAqYnVmMzsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgLyogYWRkIGJ1ZmZlcnMgdG8gdGhlIGxpc3QgKi8KLSAgYnVmMSA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgYnVmMSk7Ci0KLSAgYnVmMiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAyLCBOVUxMKTsKLSAgYnVmMyA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAzLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgZ3N0X2J1ZmZlcl9hcHBlbmQgKGJ1ZjIsIGJ1ZjMpKTsKLQotICAvKiBtYWtlIGEgY29weSAqLwotICBsaXN0X2NvcHkgPSBnc3RfYnVmZmVyX2xpc3RfY29weSAobGlzdCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGxpc3QpID09IDEpOwotICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChsaXN0X2NvcHkpID09IDEpOwotICBmYWlsX3VubGVzcyAobGlzdF9jb3B5ICE9IGxpc3QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0X2NvcHkpLCAyKTsKLSAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdF9jb3B5LCAwKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBidWYxKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMSwgImJ1ZjEiLCAyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMSksIDEpOwotICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0X2NvcHksIDEpOwotICBmYWlsX3VubGVzcyAoYnVmID09IGJ1ZjIpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYyLCAiYnVmMiIsIDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2dldF9zaXplIChidWYyKSwgNSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZjIpLCAyKTsKLQotICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKGxpc3RfY29weSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY29weV9kZWVwKQotewotICBHc3RCdWZmZXJMaXN0ICpsaXN0X2NvcHk7Ci0gIEdzdE1hcEluZm8gaW5mbywgc2luZm87Ci0gIEdzdEJ1ZmZlciAqYnVmMTsKLSAgR3N0QnVmZmVyICpidWYyOwotICBHc3RCdWZmZXIgKmJ1Zl9jb3B5OwotCi0gIC8qIGFkZCBidWZmZXJzIHRvIHRoZSBsaXN0ICovCi0gIGJ1ZjEgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIGJ1ZjEpOwotCi0gIGJ1ZjIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMiwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIGJ1ZjIpOwotCi0gIC8qIG1ha2UgYSBjb3B5ICovCi0gIGxpc3RfY29weSA9IGdzdF9idWZmZXJfbGlzdF9jb3B5X2RlZXAgKGxpc3QpOwotICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChsaXN0KSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAobGlzdF9jb3B5KSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGxpc3RfY29weSAhPSBsaXN0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdF9jb3B5KSwgMik7Ci0KLSAgYnVmX2NvcHkgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0X2NvcHksIDApOwotICAvKiBlYWNoIGJ1ZmZlciBpbiB0aGUgbGlzdCBpcyBjb3BpZWQgYW5kIG11c3QgcG9pbnQgdG8gZGlmZmVyZW50IG1lbW9yeSAqLwotICBmYWlsX3VubGVzcyAoYnVmX2NvcHkgIT0gYnVmMSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZjEsICJidWYxIiwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZjEpLCAxKTsKLQotICBidWZfY29weSA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3RfY29weSwgMSk7Ci0gIGZhaWxfdW5sZXNzIChidWZfY29weSAhPSBidWYyKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmMiwgImJ1ZjIiLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMiksIDIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmMiwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1Zl9jb3B5LCAmc2luZm8sIEdTVF9NQVBfUkVBRCkpOwotCi0gIC8qIE5PVEUgdGhhdCBkYXRhIGlzIHJlZmNvdW50ZWQgKi8KLSAgZmFpbF91bmxlc3MgKGluZm8uc2l6ZSA9PSBzaW5mby5zaXplKTsKLSAgLyogY29weV9kZWVwKCkgZm9yY2VzIG5ldyBHc3RNZW1vcnkgdG8gYmUgdXNlZCAqLwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhICE9IHNpbmZvLmRhdGEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1Zl9jb3B5LCAmc2luZm8pOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYyLCAmaW5mbyk7Ci0KLSAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0X2NvcHkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEJ1ZmZlciAqYnVmWzJdOwotICBndWludCBpdGVyOwotfSBGb3JlYWNoRGF0YTsKLQotc3RhdGljIGdib29sZWFuCi1mb3JlYWNoX2Z1bmMxIChHc3RCdWZmZXIgKiogYnVmZmVyLCBndWludCBpZHgsIEZvcmVhY2hEYXRhICogZGF0YSkKLXsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19CVUZGRVIgKCpidWZmZXIpKTsKLSAgZmFpbF91bmxlc3MgKCpidWZmZXIgPT0gZGF0YS0+YnVmW2lkeF0pOwotCi0gIGRhdGEtPml0ZXIrKzsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mb3JlYWNoX2Z1bmMzIChHc3RCdWZmZXIgKiogYnVmZmVyLCBndWludCBpZHgsIEZvcmVhY2hEYXRhICogZGF0YSkKLXsKLSAgZmFpbF91bmxlc3MgKGlkeCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19CVUZGRVIgKCpidWZmZXIpKTsKLSAgZmFpbF91bmxlc3MgKCpidWZmZXIgPT0gZGF0YS0+YnVmW2lkeF0pOwotCi0gIGRhdGEtPml0ZXIrKzsKLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yZWFjaF9mdW5jNCAoR3N0QnVmZmVyICoqIGJ1ZmZlciwgZ3VpbnQgaWR4LCBGb3JlYWNoRGF0YSAqIGRhdGEpCi17Ci0gIGZhaWxfdW5sZXNzIChpZHggPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfQlVGRkVSICgqYnVmZmVyKSk7Ci0gIGZhaWxfdW5sZXNzICgqYnVmZmVyID09IGRhdGEtPmJ1ZltkYXRhLT5pdGVyXSk7Ci0KLSAgLyogcmVtb3ZlIGZpcnN0ICovCi0gIGlmICgqYnVmZmVyID09IGRhdGEtPmJ1ZlswXSkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWZmZXIpOwotICAgICpidWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgZGF0YS0+aXRlcisrOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcmVhY2hfZnVuYzUgKEdzdEJ1ZmZlciAqKiBidWZmZXIsIGd1aW50IGlkeCwgRm9yZWFjaERhdGEgKiBkYXRhKQotewotICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAoKmJ1ZmZlcikpOwotCi0gIGRhdGEtPml0ZXIrKzsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZm9yZWFjaCkKLXsKLSAgR3N0QnVmZmVyICpidWYyLCAqYnVmMzsKLSAgRm9yZWFjaERhdGEgZGF0YTsKLQotICAvKiBhZGQgYnVmZmVycyB0byB0aGUgbGlzdCAqLwotICBkYXRhLmJ1ZlswXSA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgZGF0YS5idWZbMF0pOwotCi0gIGJ1ZjIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMiwgTlVMTCk7Ci0gIGJ1ZjMgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMywgTlVMTCk7Ci0gIGRhdGEuYnVmWzFdID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKGJ1ZjIsIGJ1ZjMpOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBkYXRhLmJ1ZlsxXSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIDApID09IGRhdGEuYnVmWzBdKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIDEpID09IGRhdGEuYnVmWzFdKTsKLQotICAvKiBpdGVyYXRlIGV2ZXJ5dGhpbmcgKi8KLSAgZGF0YS5pdGVyID0gMDsKLSAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGxpc3QsIChHc3RCdWZmZXJMaXN0RnVuYykgZm9yZWFjaF9mdW5jMSwgJmRhdGEpOwotICBmYWlsX3VubGVzcyAoZGF0YS5pdGVyID09IDIpOwotCi0gIC8qIGl0ZXJhdGUgb25seSB0aGUgZmlyc3QgYnVmZmVyICovCi0gIGRhdGEuaXRlciA9IDA7Ci0gIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChsaXN0LCAoR3N0QnVmZmVyTGlzdEZ1bmMpIGZvcmVhY2hfZnVuYzMsICZkYXRhKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEuaXRlciA9PSAxKTsKLQotICAvKiByZW1vdmUgdGhlIGZpcnN0IGJ1ZmZlciAqLwotICBkYXRhLml0ZXIgPSAwOwotICBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCAobGlzdCwgKEdzdEJ1ZmZlckxpc3RGdW5jKSBmb3JlYWNoX2Z1bmM0LCAmZGF0YSk7Ci0gIGZhaWxfdW5sZXNzIChkYXRhLml0ZXIgPT0gMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIDApID09IGRhdGEuYnVmWzFdKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCksIDEpOwotCi0gIC8qIGl0ZXJhdGUgZXZlcnl0aGluZywganVzdCBvbmUgbW9yZSBidWZmZXIgbm93ICovCi0gIGRhdGEuaXRlciA9IDA7Ci0gIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChsaXN0LCAoR3N0QnVmZmVyTGlzdEZ1bmMpIGZvcmVhY2hfZnVuYzUsICZkYXRhKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEuaXRlciA9PSAxKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBmaW5lIGlmIHdlIGV4Y2VlZCB0aGUgcHJlLWFsbG9jYXRlZCBzaXplICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9leHBhbmRfYW5kX3JlbW92ZSkKLXsKLSAgR0FycmF5ICphcnI7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludCBpLCBpZHgsIG51bSwgY291bnRlciA9IDA7Ci0KLSAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0KTsKLQotICBhcnIgPSBnX2FycmF5X25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKGd1aW50KSk7Ci0KLSAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQgKDEpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAyNTA7ICsraSkgewotICAgIG51bSA9ICsrY291bnRlcjsKLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbnVtLCBOVUxMKTsKLSAgICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWYpOwotICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyLCBudW0pOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IDI1MDsgKytpKSB7Ci0gICAgbnVtID0gKytjb3VudGVyOwotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBudW0sIE5VTEwpOwotICAgIGlkeCA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCkpOwotICAgIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKGxpc3QsIGlkeCwgYnVmKTsKLSAgICBnX2FycmF5X2luc2VydF92YWwgKGFyciwgaWR4LCBudW0pOwotICB9Ci0KLSAgLyogbWFrZSBzdXJlIHRoZSBsaXN0IGxvb2tzIGxpa2UgaXQgc2hvdWxkICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGFyci0+bGVuLCBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0KSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBhcnItPmxlbjsgKytpKSB7Ci0gICAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgaSk7Ci0gICAgbnVtID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW0sIGdfYXJyYXlfaW5kZXggKGFyciwgZ3VpbnQsIGkpKTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCA0NDsgKytpKSB7Ci0gICAgbnVtID0gZ19yYW5kb21faW50X3JhbmdlICgxLCA1KTsKLSAgICBpZHggPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKDAsIGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGxpc3QpIC0gbnVtKTsKLSAgICBnc3RfYnVmZmVyX2xpc3RfcmVtb3ZlIChsaXN0LCBpZHgsIG51bSk7Ci0gICAgZ19hcnJheV9yZW1vdmVfcmFuZ2UgKGFyciwgaWR4LCBudW0pOwotICB9Ci0KLSAgLyogbWFrZSBzdXJlIHRoZSBsaXN0IHN0aWxsIGxvb2tzIGxpa2UgaXQgc2hvdWxkICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGFyci0+bGVuLCBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0KSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBhcnItPmxlbjsgKytpKSB7Ci0gICAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgaSk7Ci0gICAgbnVtID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW0sIGdfYXJyYXlfaW5kZXggKGFyciwgZ3VpbnQsIGkpKTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCA1MDA7ICsraSkgewotICAgIG51bSA9ICsrY291bnRlcjsKLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbnVtLCBOVUxMKTsKLSAgICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWYpOwotICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyLCBudW0pOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IDUwMDsgKytpKSB7Ci0gICAgbnVtID0gKytjb3VudGVyOwotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBudW0sIE5VTEwpOwotICAgIGlkeCA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCkpOwotICAgIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKGxpc3QsIGlkeCwgYnVmKTsKLSAgICBnX2FycmF5X2luc2VydF92YWwgKGFyciwgaWR4LCBudW0pOwotICB9Ci0KLSAgLyogbWFrZSBzdXJlIHRoZSBsaXN0IHN0aWxsIGxvb2tzIGxpa2UgaXQgc2hvdWxkICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGFyci0+bGVuLCBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0KSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBhcnItPmxlbjsgKytpKSB7Ci0gICAgYnVmID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgaSk7Ci0gICAgbnVtID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW0sIGdfYXJyYXlfaW5kZXggKGFyciwgZ3VpbnQsIGkpKTsKLSAgfQotCi0gIGdfYXJyYXlfdW5yZWYgKGFycik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9idWZmZXJfbGlzdF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RCdWZmZXJMaXN0Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNfY2hhaW4sIHNldHVwLCBjbGVhbnVwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9hbmRfaXRlcmF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZW1vdmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWFrZV93cml0YWJsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jb3B5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvcHlfZGVlcCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mb3JlYWNoKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2V4cGFuZF9hbmRfcmVtb3ZlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9idWZmZXJfbGlzdCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVycG9vbC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGJ1ZmZlcnBvb2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIwNTMyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0YnVmZmVycG9vbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE0IFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0YnVmZmVycG9vbC5jOiBVbml0IHRlc3QgZm9yIEdzdEJ1ZmZlclBvb2wKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0YXRpYyBHc3RCdWZmZXJQb29sICoKLWNyZWF0ZV9wb29sIChndWludCBzaXplLCBndWludCBtaW5fYnVmLCBndWludCBtYXhfYnVmKQotewotICBHc3RCdWZmZXJQb29sICpwb29sID0gZ3N0X2J1ZmZlcl9wb29sX25ldyAoKTsKLSAgR3N0U3RydWN0dXJlICpjb25mID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotICBHc3RDYXBzICpjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInRlc3QvZGF0YSIpOwotCi0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZiwgY2Fwcywgc2l6ZSwgbWluX2J1ZiwgbWF4X2J1Zik7Ci0gIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25mKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiBwb29sOwotfQotCi1zdGF0aWMgdm9pZAotYnVmZmVyX2Rlc3Ryb3lfbm90aWZ5IChncG9pbnRlciBwdHIpCi17Ci0gIGdpbnQgKmNvdW50ZXIgPSBwdHI7Ci0KLSAgR1NUX0RFQlVHICgiYnVmZmVyIGRlc3Ryb3llZCIpOwotCi0gICpjb3VudGVyICs9IDE7Ci19Ci0KLS8qIFRyYWNrIHdoZW4gYSBidWZmZXIgaXMgZGVzdHJveWVkLiBUaGUgY291bnRlciB3aWxsIGJlIGluY3JlYXNlZCBpZiB0aGUKLSAqIGJ1ZmZlciBpcyBmaW5hbGl6ZWQgKGJ1dCBub3QgaWYgaXQgd2FzIHJlLXN1cnJlY3RlZCBpbiBkaXNwb3NlIGFuZCBwdXQKLSAqIGJhY2sgaW50byB0aGUgYnVmZmVyIHBvb2wuICovCi1zdGF0aWMgdm9pZAotYnVmZmVyX3RyYWNrX2Rlc3Ryb3kgKEdzdEJ1ZmZlciAqIGJ1ZiwgZ2ludCAqIGNvdW50ZXIpCi17Ci0gIGdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEgKEdTVF9NSU5JX09CSkVDVCAoYnVmKSwKLSAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiVGVzdFRyYWNrZXIiKSwKLSAgICAgIGNvdW50ZXIsIGJ1ZmZlcl9kZXN0cm95X25vdGlmeSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25ld19idWZmZXJfZnJvbV9lbXB0eV9wb29sKQotewotICBHc3RCdWZmZXJQb29sICpwb29sID0gY3JlYXRlX3Bvb2wgKDEwLCAwLCAwKTsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBUUlVFKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCAmYnVmLCBOVUxMKTsKLSAgZmFpbF9pZiAoYnVmID09IE5VTEwsICJhY3F1aXJpbmcgYnVmZmVyIHJldHVybmVkIE5VTEwiKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgRkFMU0UpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2J1ZmZlcl9pc19yZWN5Y2xlZCkKLXsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IGNyZWF0ZV9wb29sICgxMCwgMCwgMCk7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTCwgKnByZXY7Ci0gIGdpbnQgZGNvdW50ID0gMDsKLQotICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgVFJVRSk7Ci0gIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAocG9vbCwgJmJ1ZiwgTlVMTCk7Ci0gIHByZXYgPSBidWY7Ci0gIGJ1ZmZlcl90cmFja19kZXN0cm95IChidWYsICZkY291bnQpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIC8qIGJ1ZmZlciBzaG91bGQgbm90IGhhdmUgYmVlbiBmcmVlZCwgYnV0IGhhdmUgYmVlbiByZWN5Y2xlZCAqLwotICBmYWlsX3VubGVzcyAoZGNvdW50ID09IDApOwotCi0gIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAocG9vbCwgJmJ1ZiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChidWYgPT0gcHJldiwgImdvdCBhIGZyZXNoIGJ1ZmZlciBpbnN0ZWFkIG9mIHByZXZpb3VzIik7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIEZBTFNFKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocG9vbCk7Ci0KLSAgLyogYnVmZmVyIHNob3VsZCBub3cgYmUgZ29uZSAqLwotICBmYWlsX3VubGVzcyAoZGNvdW50ID09IDEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYnVmZmVyX291dF9vZl9vcmRlcl9yZXVzZSkKLXsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IGNyZWF0ZV9wb29sICgxMCwgMCwgMCk7Ci0gIEdzdEJ1ZmZlciAqYnVmMSA9IE5VTEwsICpidWYyID0gTlVMTCwgKnByZXY7Ci0gIGdpbnQgZGNvdW50MSA9IDAsIGRjb3VudDIgPSAwOwotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBUUlVFKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCAmYnVmMSwgTlVMTCk7Ci0gIGJ1ZmZlcl90cmFja19kZXN0cm95IChidWYxLCAmZGNvdW50MSk7Ci0gIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAocG9vbCwgJmJ1ZjIsIE5VTEwpOwotICBidWZmZXJfdHJhY2tfZGVzdHJveSAoYnVmMiwgJmRjb3VudDIpOwotICBwcmV2ID0gYnVmMjsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMik7Ci0KLSAgLyogYnVmZmVyIHNob3VsZCBub3QgaGF2ZSBiZWVuIGZyZWVkLCBidXQgaGF2ZSBiZWVuIHJlY3ljbGVkICovCi0gIGZhaWxfdW5sZXNzIChkY291bnQyID09IDApOwotCi0gIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAocG9vbCwgJmJ1ZjIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoYnVmMiA9PSBwcmV2LCAiZ290IGEgZnJlc2ggYnVmZmVyIGluc3RlYWQgb2YgcHJldmlvdXMiKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMik7Ci0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBGQUxTRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotCi0gIGZhaWxfdW5sZXNzIChkY291bnQxID09IDEpOwotICBmYWlsX3VubGVzcyAoZGNvdW50MiA9PSAxKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3Bvb2xfY29uZmlnX2J1ZmZlcl9zaXplKQotewotICBHc3RCdWZmZXJQb29sICpwb29sID0gY3JlYXRlX3Bvb2wgKDEwLCAwLCAwKTsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBUUlVFKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCAmYnVmLCBOVUxMKTsKLSAgY2tfYXNzZXJ0X2ludF9lcSAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSwgMTApOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBGQUxTRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5hY3RpdmVfcG9vbF9yZXR1cm5zX2ZsdXNoaW5nKQotewotICBHc3RCdWZmZXJQb29sICpwb29sID0gY3JlYXRlX3Bvb2wgKDEwLCAwLCAwKTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKLQotICByZXQgPSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHBvb2wsICZidWYsIE5VTEwpOwotICBja19hc3NlcnRfaW50X2VxIChyZXQsIEdTVF9GTE9XX0ZMVVNISU5HKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9idWZmZXJfbW9kaWZ5X2Rpc2NhcmQpCi17Ci0KLSAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IGNyZWF0ZV9wb29sICgxMCwgMCwgMCk7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTCwgKnByZXY7Ci0gIEdzdE1lbW9yeSAqbWVtOwotICBnaW50IGRjb3VudCA9IDA7Ci0KLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpOwotICBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHBvb2wsICZidWYsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoYnVmICE9IE5VTEwpOwotICBwcmV2ID0gYnVmOwotICBidWZmZXJfdHJhY2tfZGVzdHJveSAoYnVmLCAmZGNvdW50KTsKLSAgLyogcmVtb3ZlIGFsbCBtZW1vcnksIHBvb2wgc2hvdWxkIG5vdCByZXVzZSB0aGlzIGJ1ZmZlciAqLwotICBnc3RfYnVmZmVyX3JlbW92ZV9hbGxfbWVtb3J5IChidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIC8qIGJ1ZmZlciBzaG91bGQndmUgYmVlbiBkZXN0cm95ZWQgaW5zdGVhZCBvZiBnb2luZyBiYWNrIGludG8gcG9vbCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkY291bnQsIDEpOwotCi0gIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAocG9vbCwgJmJ1ZiwgTlVMTCk7Ci0gIHByZXYgPSBidWY7Ci0gIGJ1ZmZlcl90cmFja19kZXN0cm95IChidWYsICZkY291bnQpOwotICAvKiBkbyByZXNpemUsIHBvb2wgc2hvdWxkIG5vdCByZXVzZSB0aGlzIGJ1ZmZlciAqLwotICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCA1LCAyKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAvKiBidWZmZXIgc2hvdWxkJ3ZlIGJlZW4gZGVzdHJveWVkIGluc3RlYWQgb2YgZ29pbmcgYmFjayBpbnRvIHBvb2wgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGNvdW50LCAyKTsKLQotICBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHBvb2wsICZidWYsIE5VTEwpOwotICBwcmV2ID0gYnVmOwotICBidWZmZXJfdHJhY2tfZGVzdHJveSAoYnVmLCAmZGNvdW50KTsKLSAgLyoga2VlcCByZWYgdG8gbWVtb3J5LCBub3QgZXhjbHVzaXZlIHNvIHBvb2wgc2hvdWxkIHJldXNlIHRoaXMgYnVmZmVyICovCi0gIG1lbSA9IGdzdF9idWZmZXJfZ2V0X21lbW9yeSAoYnVmLCAwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLQotICAvKiBidWZmZXIgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZGVzdHJveWVkIGFuZCBnb25lIGJhY2sgaW50byBwb29sICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRjb3VudCwgMik7Ci0KLSAgZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCAmYnVmLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBwcmV2LCAiZ290IGEgZnJlc2ggYnVmZmVyIGluc3RlYWQgb2YgcHJldmlvdXMiKTsKLSAgLyogd2UncmUgYWxyZWFkeSBkaWQgdHJhY2tfZGVzdHJveSBvbiB0aGlzIGJ1Ziwgc28gbm8gbmVlZCB0byBkbyBpdCBhZ2FpbiAqLwotICBtZW0gPSBnc3RfYnVmZmVyX2dldF9tZW1vcnkgKGJ1ZiwgMCk7Ci0gIC8qIGV4Y2x1c2l2ZSBsb2NrIHNvIHBvb2wgc2hvdWxkIG5vdCByZXVzZSB0aGlzIGJ1ZmZlciAqLwotICBnc3RfbWVtb3J5X2xvY2sgKG1lbSwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBnc3RfbWVtb3J5X3VubG9jayAobWVtLCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSk7Ci0gIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7Ci0KLSAgLyogYnVmZmVyIHNob3VsZCBoYXZlIGJlZW4gZGVzdHJveWVkIGFuZCBub3QgZ29uZSBiYWNrIGludG8gcG9vbCBiZWNhdXNlCi0gICAqIG9mIHRoZSBleGNsdXNpdmUgbG9jayAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkY291bnQsIDMpOwotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBGQUxTRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3Bvb2xfYWN0aXZhdGlvbl9hbmRfY29uZmlnKQotewotICBHc3RCdWZmZXJQb29sICpwb29sID0gZ3N0X2J1ZmZlcl9wb29sX25ldyAoKTsKLSAgR3N0U3RydWN0dXJlICpjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0gIEdzdENhcHMgKmNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidGVzdC9kYXRhIik7Ci0KLSAgLyogdW5jb25maWd1cmVkIHBvb2wgY2Fubm90IGJlIGFjdGl2YXRlZCAqLwotICBmYWlsX2lmIChnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgVFJVRSkpOwotCi0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCBjYXBzLCAxMCwgMTAsIDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpKTsKLQotICAvKiBzZXR0aW5nIHRoZSBzYW1lIGNvbmZpZyBvbiBhbiBhY3RpdmUgcG9vbCBpcyBvayAqLwotICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAocG9vbCwgY29uZmlnKSk7Ci0KLSAgLyogc2V0dGluZyBhIGRpZmZlcmVudCBjb25maWcgb24gYWN0aXZlIHBvb2wgc2hvdWxkIGZhaWwgKi8KLSAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKGNvbmZpZywgY2FwcywgMTIsIDEwLCAwKTsKLSAgZmFpbF9pZiAoZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAocG9vbCkpOwotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBGQUxTRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9vbF9jb25maWdfdmFsaWRhdGUpCi17Ci0gIEdzdEJ1ZmZlclBvb2wgKnBvb2wgPSBjcmVhdGVfcG9vbCAoNSwgNCwgMzApOwotICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKLSAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ0ZXN0L2RhdGEiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ192YWxpZGF0ZV9wYXJhbXMgKGNvbmZpZywgY2FwcywgNSwgNCwgMCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ192YWxpZGF0ZV9wYXJhbXMgKGNvbmZpZywgY2FwcywgNSwgMiwgMCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ192YWxpZGF0ZV9wYXJhbXMgKGNvbmZpZywgY2FwcywgNCwgNCwgMCkpOwotICBmYWlsX2lmIChnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3ZhbGlkYXRlX3BhcmFtcyAoY29uZmlnLCBjYXBzLCA1LCA2LCAwKSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInRlc3QvZGF0YTIiKTsKLSAgZmFpbF9pZiAoZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ192YWxpZGF0ZV9wYXJhbXMgKGNvbmZpZywgY2FwcywgNSwgNCwgMCkpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChjb25maWcpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mbHVzaGluZ19wb29sX3JldHVybnNfZmx1c2hpbmcpCi17Ci0gIEdzdEJ1ZmZlclBvb2wgKnBvb2wgPSBjcmVhdGVfcG9vbCAoMTAsIDAsIDApOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLCBUUlVFKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZyAocG9vbCwgVFJVRSk7Ci0KLSAgcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCAmYnVmLCBOVUxMKTsKLSAgY2tfYXNzZXJ0X2ludF9lcSAocmV0LCBHU1RfRkxPV19GTFVTSElORyk7Ci0KLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZyAocG9vbCwgRkFMU0UpOwotICByZXQgPSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHBvb2wsICZidWYsIE5VTEwpOwotICBja19hc3NlcnRfaW50X2VxIChyZXQsIEdTVF9GTE9XX09LKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2J1ZmZlcl9wb29sX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEJ1ZmZlclBvb2wiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiYnVmZmVyX3Bvb2wgdGVzdHMiKTsKLQotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbmV3X2J1ZmZlcl9mcm9tX2VtcHR5X3Bvb2wpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYnVmZmVyX2lzX3JlY3ljbGVkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2J1ZmZlcl9vdXRfb2Zfb3JkZXJfcmV1c2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9vbF9jb25maWdfYnVmZmVyX3NpemUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5hY3RpdmVfcG9vbF9yZXR1cm5zX2ZsdXNoaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2J1ZmZlcl9tb2RpZnlfZGlzY2FyZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb29sX2FjdGl2YXRpb25fYW5kX2NvbmZpZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb29sX2NvbmZpZ192YWxpZGF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mbHVzaGluZ19wb29sX3JldHVybnNfZmx1c2hpbmcpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J1ZmZlcl9wb29sKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RidXMuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RidXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAzMDhjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0YnVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MzYgKzAsMCBAQAotLyogR1N0cmVhbWVyIG1lc3NhZ2UgYnVzIHVuaXQgdGVzdHMKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0YXRpYyBHc3RCdXMgKnRlc3RfYnVzID0gTlVMTDsKLXN0YXRpYyBHTWFpbkxvb3AgKm1haW5fbG9vcDsKLQotc3RhdGljIEdUeXBlIGZvb19kZXZpY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi0jZGVmaW5lIE5VTV9NRVNTQUdFUyAxMDAwCi0jZGVmaW5lIE5VTV9USFJFQURTIDEwCi0KLXN0YXRpYyBncG9pbnRlcgotcG91bmRfYnVzX3dpdGhfbWVzc2FnZXMgKGdwb2ludGVyIGRhdGEpCi17Ci0gIGdpbnQgdGhyZWFkX2lkID0gR1BPSU5URVJfVE9fSU5UIChkYXRhKTsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fTUVTU0FHRVM7IGkrKykgewotICAgIEdzdE1lc3NhZ2UgKm07Ci0gICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidGVzdF9tZXNzYWdlIiwKLSAgICAgICAgInRocmVhZF9pZCIsIEdfVFlQRV9JTlQsIHRocmVhZF9pZCwgIm1zZ19pZCIsIEdfVFlQRV9JTlQsIGksIE5VTEwpOwotICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKE5VTEwsIHMpOwotICAgIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG0pOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotcHVsbF9tZXNzYWdlcyAodm9pZCkKLXsKLSAgR3N0TWVzc2FnZSAqbTsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICBndWludCBtZXNzYWdlX2lkc1tOVU1fVEhSRUFEU107Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX1RIUkVBRFM7IGkrKykKLSAgICBtZXNzYWdlX2lkc1tpXSA9IDA7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICBnaW50IF90LCBfaTsKLQotICAgIG0gPSBnc3RfYnVzX3BvcCAodGVzdF9idXMpOwotICAgIGlmICghbSkKLSAgICAgIGJyZWFrOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG0pID09IEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKLQotICAgIHMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtKTsKLSAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgInRocmVhZF9pZCIsICZfdCkpCi0gICAgICBnX2NyaXRpY2FsICgiSW52YWxpZCBtZXNzYWdlIik7Ci0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJtc2dfaWQiLCAmX2kpKQotICAgICAgZ19jcml0aWNhbCAoIkludmFsaWQgbWVzc2FnZSIpOwotCi0gICAgZ19yZXR1cm5faWZfZmFpbCAoX3QgPCBOVU1fVEhSRUFEUyk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCAoX2kgPT0gbWVzc2FnZV9pZHNbX3RdKyspOwotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG0pOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9USFJFQURTOyBpKyspCi0gICAgZ19yZXR1cm5faWZfZmFpbCAobWVzc2FnZV9pZHNbaV0gPT0gTlVNX01FU1NBR0VTKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaGFtbWVyX2J1cykKLXsKLSAgR1RocmVhZCAqdGhyZWFkc1tOVU1fVEhSRUFEU107Ci0gIGdpbnQgaTsKLQotICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fVEhSRUFEUzsgaSsrKQotICAgIHRocmVhZHNbaV0gPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgcG91bmRfYnVzX3dpdGhfbWVzc2FnZXMsCi0gICAgICAgIEdJTlRfVE9fUE9JTlRFUiAoaSksIE5VTEwpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fVEhSRUFEUzsgaSsrKQotICAgIGdfdGhyZWFkX2pvaW4gKHRocmVhZHNbaV0pOwotCi0gIHB1bGxfbWVzc2FnZXMgKCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoKEdzdE9iamVjdCAqKSB0ZXN0X2J1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdib29sZWFuCi1tZXNzYWdlX2Z1bmNfZW9zIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBndWludCAqIHBfY291bnRlcikKLXsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICBnaW50IGk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VPUywgRkFMU0UpOwotCi0gIEdTVF9ERUJVRyAoImdvdCBFT1MgbWVzc2FnZSIpOwotCi0gIHMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJtc2dfaWQiLCAmaSkpCi0gICAgZ19jcml0aWNhbCAoIkludmFsaWQgbWVzc2FnZSIpOwotCi0gIGlmIChwX2NvdW50ZXIgIT0gTlVMTCkKLSAgICAqcF9jb3VudGVyICs9IDE7Ci0KLSAgcmV0dXJuIGkgIT0gOTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tZXNzYWdlX2Z1bmNfYXBwIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBndWludCAqIHBfY291bnRlcikKLXsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICBnaW50IGk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OLAotICAgICAgRkFMU0UpOwotCi0gIEdTVF9ERUJVRyAoImdvdCBBUFAgbWVzc2FnZSIpOwotCi0gIHMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJtc2dfaWQiLCAmaSkpCi0gICAgZ19jcml0aWNhbCAoIkludmFsaWQgbWVzc2FnZSIpOwotCi0gIGlmIChwX2NvdW50ZXIgIT0gTlVMTCkKLSAgICAqcF9jb3VudGVyICs9IDE7Ci0KLSAgcmV0dXJuIGkgIT0gOTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zZW5kX21lc3NhZ2VzIChncG9pbnRlciBkYXRhKQotewotICBHc3RNZXNzYWdlICptOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRlc3RfbWVzc2FnZSIsICJtc2dfaWQiLCBHX1RZUEVfSU5ULCBpLCBOVUxMKTsKLSAgICBtID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uIChOVUxMLCBzKTsKLSAgICBnc3RfYnVzX3Bvc3QgKHRlc3RfYnVzLCBtKTsKLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ0ZXN0X21lc3NhZ2UiLCAibXNnX2lkIiwgR19UWVBFX0lOVCwgaSwgTlVMTCk7Ci0gICAgbSA9IGdzdF9tZXNzYWdlX25ld19jdXN0b20gKEdTVF9NRVNTQUdFX0VPUywgTlVMTCwgcyk7Ci0gICAgZ3N0X2J1c19wb3N0ICh0ZXN0X2J1cywgbSk7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIHRlc3QgaWYgYWRkaW5nIGEgc2lnbmFsIHdhdGNoIGZvciBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlcyBjYWxscyB0aGUKLSAqIHJlc3BlY3RpdmUgY2FsbGJhY2tzLiAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfd2F0Y2gpCi17Ci0gIGd1aW50IG51bV9lb3MgPSAwOwotICBndWludCBudW1fYXBwID0gMDsKLSAgZ3VpbnQgaWQ7Ci0KLSAgdGVzdF9idXMgPSBnc3RfYnVzX25ldyAoKTsKLQotICBtYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICBpZCA9IGdzdF9idXNfYWRkX3dhdGNoICh0ZXN0X2J1cywgZ3N0X2J1c19hc3luY19zaWduYWxfZnVuYywgTlVMTCk7Ci0gIGZhaWxfaWYgKGlkID09IDApOwotICBnX3NpZ25hbF9jb25uZWN0ICh0ZXN0X2J1cywgIm1lc3NhZ2U6OmVvcyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfZnVuY19lb3MsCi0gICAgICAmbnVtX2Vvcyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHRlc3RfYnVzLCAibWVzc2FnZTo6YXBwbGljYXRpb24iLAotICAgICAgKEdDYWxsYmFjaykgbWVzc2FnZV9mdW5jX2FwcCwgJm51bV9hcHApOwotCi0gIGdfaWRsZV9hZGQgKChHU291cmNlRnVuYykgc2VuZF9tZXNzYWdlcywgTlVMTCk7Ci0gIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nIChOVUxMKSkKLSAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24gKE5VTEwsIEZBTFNFKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW1fZW9zLCAxMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG51bV9hcHAsIDEwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1c19yZW1vdmVfd2F0Y2ggKHRlc3RfYnVzKSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKChHc3RPYmplY3QgKikgdGVzdF9idXMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgaWYgYWRkaW5nIGEgc2lnbmFsIHdhdGNoIGZvciBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlcyBjYWxscyB0aGUKLSAqIHJlc3BlY3RpdmUgY2FsbGJhY2tzLiAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfd2F0Y2hfd2l0aF9jdXN0b21fY29udGV4dCkKLXsKLSAgR01haW5Db250ZXh0ICpjdHg7Ci0gIEdTb3VyY2UgKnNvdXJjZTsKLSAgZ3VpbnQgbnVtX2VvcyA9IDA7Ci0gIGd1aW50IG51bV9hcHAgPSAwOwotICBndWludCBpZDsKLQotICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOwotCi0gIGN0eCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKLSAgbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3IChjdHgsIEZBTFNFKTsKLQotICBzb3VyY2UgPSBnc3RfYnVzX2NyZWF0ZV93YXRjaCAodGVzdF9idXMpOwotICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sgKHNvdXJjZSwgKEdTb3VyY2VGdW5jKSBnc3RfYnVzX2FzeW5jX3NpZ25hbF9mdW5jLCBOVUxMLAotICAgICAgTlVMTCk7Ci0gIGlkID0gZ19zb3VyY2VfYXR0YWNoIChzb3VyY2UsIGN0eCk7Ci0gIGdfc291cmNlX3VucmVmIChzb3VyY2UpOwotICBmYWlsX2lmIChpZCA9PSAwKTsKLQotICBnX3NpZ25hbF9jb25uZWN0ICh0ZXN0X2J1cywgIm1lc3NhZ2U6OmVvcyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfZnVuY19lb3MsCi0gICAgICAmbnVtX2Vvcyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHRlc3RfYnVzLCAibWVzc2FnZTo6YXBwbGljYXRpb24iLAotICAgICAgKEdDYWxsYmFjaykgbWVzc2FnZV9mdW5jX2FwcCwgJm51bV9hcHApOwotCi0gIHNvdXJjZSA9IGdfaWRsZV9zb3VyY2VfbmV3ICgpOwotICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sgKHNvdXJjZSwgKEdTb3VyY2VGdW5jKSBzZW5kX21lc3NhZ2VzLCBOVUxMLCBOVUxMKTsKLSAgZ19zb3VyY2VfYXR0YWNoIChzb3VyY2UsIGN0eCk7Ci0gIGdfc291cmNlX3VucmVmIChzb3VyY2UpOwotCi0gIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nIChjdHgpKQotICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAoY3R4LCBGQUxTRSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtX2VvcywgMTApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW1fYXBwLCAxMCk7Ci0KLSAgaWYgKChzb3VyY2UgPSBnX21haW5fY29udGV4dF9maW5kX3NvdXJjZV9ieV9pZCAoY3R4LCBpZCkpKQotICAgIGdfc291cmNlX2Rlc3Ryb3kgKHNvdXJjZSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOwotICBnX21haW5fY29udGV4dF91bnJlZiAoY3R4KTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCBpZiBhZGRpbmcgYSBzaWduYWwgd2F0Y2ggZm9yIGRpZmZlcmVudCBtZXNzYWdlIHR5cGVzIGNhbGxzIHRoZQotICogcmVzcGVjdGl2ZSBjYWxsYmFja3MuICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRfd2F0Y2hfd2l0aF9jdXN0b21fY29udGV4dCkKLXsKLSAgR01haW5Db250ZXh0ICpjdHg7Ci0gIEdTb3VyY2UgKnNvdXJjZTsKLSAgZ3VpbnQgbnVtX2VvcyA9IDA7Ci0gIGd1aW50IG51bV9hcHAgPSAwOwotCi0gIHRlc3RfYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgY3R4ID0gZ19tYWluX2NvbnRleHRfbmV3ICgpOwotICBtYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKGN0eCwgRkFMU0UpOwotCi0gIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQgKGN0eCk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAodGVzdF9idXMpOwotICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQgKGN0eCk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAodGVzdF9idXMsICJtZXNzYWdlOjplb3MiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX2Z1bmNfZW9zLAotICAgICAgJm51bV9lb3MpOwotICBnX3NpZ25hbF9jb25uZWN0ICh0ZXN0X2J1cywgIm1lc3NhZ2U6OmFwcGxpY2F0aW9uIiwKLSAgICAgIChHQ2FsbGJhY2spIG1lc3NhZ2VfZnVuY19hcHAsICZudW1fYXBwKTsKLQotICBzb3VyY2UgPSBnX2lkbGVfc291cmNlX25ldyAoKTsKLSAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrIChzb3VyY2UsIChHU291cmNlRnVuYykgc2VuZF9tZXNzYWdlcywgTlVMTCwgTlVMTCk7Ci0gIGdfc291cmNlX2F0dGFjaCAoc291cmNlLCBjdHgpOwotICBnX3NvdXJjZV91bnJlZiAoc291cmNlKTsKLQotICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyAoY3R4KSkKLSAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24gKGN0eCwgRkFMU0UpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG51bV9lb3MsIDEwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtX2FwcCwgMTApOwotCi0gIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOwotICBnX21haW5fY29udGV4dF91bnJlZiAoY3R4KTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdib29sZWFuCi1kdW1teV9idXNfZnVuYyAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZW1vdmVfd2F0Y2gpCi17Ci0gIHRlc3RfYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgLyogcmVtb3ZpbmcgYSBub24tZXhpc3Rpbmcgd2F0Y2ggc2hvdWxkIGZhaWwgKi8KLSAgZmFpbF9pZiAoZ3N0X2J1c19yZW1vdmVfd2F0Y2ggKHRlc3RfYnVzKSk7Ci0KLSAgZ3N0X2J1c19hZGRfd2F0Y2ggKHRlc3RfYnVzLCBkdW1teV9idXNfZnVuYywgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idXNfcmVtb3ZlX3dhdGNoICh0ZXN0X2J1cykpOwotCi0gIC8qIG5vdyBpdCBzaG91bGQgZmFpbCB0byByZW1vdmUgdGhlIHdhdGNoIGFnYWluICovCi0gIGZhaWxfaWYgKGdzdF9idXNfcmVtb3ZlX3dhdGNoICh0ZXN0X2J1cykpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RfYnVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2ludCBtZXNzYWdlc19zZWVuOwotCi1zdGF0aWMgdm9pZAotbWVzc2FnZV9mdW5jIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7Ci0KLSAgbWVzc2FnZXNfc2VlbisrOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF81YXBwXzFlbF8xZXJyXzJhcHBfMWVvc19tZXNzYWdlcyAoZ3VpbnQgaW50ZXJ2YWxfdXNlY3MpCi17Ci0gIEdzdE1lc3NhZ2UgKm07Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ0ZXN0X21lc3NhZ2UiLCAibXNnX2lkIiwgR19UWVBFX0lOVCwgaSwgTlVMTCk7Ci0gICAgbSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbiAoTlVMTCwgcyk7Ci0gICAgR1NUX0xPRyAoInBvc3RpbmcgYXBwbGljYXRpb24gbWVzc2FnZSIpOwotICAgIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG0pOwotICAgIGdfdXNsZWVwIChpbnRlcnZhbF91c2Vjcyk7Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IDE7IGkrKykgewotICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRlc3RfbWVzc2FnZSIsICJtc2dfaWQiLCBHX1RZUEVfSU5ULCBpLCBOVUxMKTsKLSAgICBtID0gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKE5VTEwsIHMpOwotICAgIEdTVF9MT0cgKCJwb3N0aW5nIGVsZW1lbnQgbWVzc2FnZSIpOwotICAgIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG0pOwotICAgIGdfdXNsZWVwIChpbnRlcnZhbF91c2Vjcyk7Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IDE7IGkrKykgewotICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfZXJyb3IgKE5VTEwsIE5VTEwsICJkZWJ1ZyBzdHJpbmciKTsKLSAgICBHU1RfTE9HICgicG9zdGluZyBlcnJvciBtZXNzYWdlIik7Ci0gICAgZ3N0X2J1c19wb3N0ICh0ZXN0X2J1cywgbSk7Ci0gICAgZ191c2xlZXAgKGludGVydmFsX3VzZWNzKTsKLSAgfQotICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidGVzdF9tZXNzYWdlIiwgIm1zZ19pZCIsIEdfVFlQRV9JTlQsIGksIE5VTEwpOwotICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKE5VTEwsIHMpOwotICAgIEdTVF9MT0cgKCJwb3N0aW5nIGFwcGxpY2F0aW9uIG1lc3NhZ2UiKTsKLSAgICBnc3RfYnVzX3Bvc3QgKHRlc3RfYnVzLCBtKTsKLSAgICBnX3VzbGVlcCAoaW50ZXJ2YWxfdXNlY3MpOwotICB9Ci0gIGZvciAoaSA9IDA7IGkgPCAxOyBpKyspIHsKLSAgICBtID0gZ3N0X21lc3NhZ2VfbmV3X2VvcyAoTlVMTCk7Ci0gICAgR1NUX0xPRyAoInBvc3RpbmcgRU9TIG1lc3NhZ2UiKTsKLSAgICBnc3RfYnVzX3Bvc3QgKHRlc3RfYnVzLCBtKTsKLSAgICBnX3VzbGVlcCAoaW50ZXJ2YWxfdXNlY3MpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kX2V4dGVuZGVkX21lc3NhZ2VzIChndWludCBpbnRlcnZhbF91c2VjcykKLXsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHc3REZXZpY2UgKmRldmljZTsKLQotICBkZXZpY2UgPSBnX29iamVjdF9uZXcgKGZvb19kZXZpY2VfZ2V0X3R5cGUgKCksIE5VTEwpOwotCi0gIG1zZyA9IGdzdF9tZXNzYWdlX25ld19kZXZpY2VfYWRkZWQgKE5VTEwsIGRldmljZSk7Ci0gIEdTVF9MT0cgKCJwb3N0aW5nIGRldmljZS1hZGRlZCBtZXNzYWdlIik7Ci0gIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG1zZyk7Ci0gIGdfdXNsZWVwIChpbnRlcnZhbF91c2Vjcyk7Ci0KLSAgbXNnID0gZ3N0X21lc3NhZ2VfbmV3X2RldmljZV9yZW1vdmVkIChOVUxMLCBkZXZpY2UpOwotICBHU1RfTE9HICgicG9zdGluZyBkZXZpY2UtcmVtb3ZlZCBtZXNzYWdlIik7Ci0gIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG1zZyk7Ci0gIGdfdXNsZWVwIChpbnRlcnZhbF91c2Vjcyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZGV2aWNlKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotc2VuZF8xMF9hcHBfbWVzc2FnZXMgKHZvaWQpCi17Ci0gIEdzdE1lc3NhZ2UgKm07Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidGVzdF9tZXNzYWdlIiwgIm1zZ19pZCIsIEdfVFlQRV9JTlQsIGksIE5VTEwpOwotICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKE5VTEwsIHMpOwotICAgIGdzdF9idXNfcG9zdCAodGVzdF9idXMsIG0pOwotICB9Ci19Ci0KLS8qIHRlc3QgdGhhdCB5b3UgZ2V0IHRoZSBzYW1lIG1lc3NhZ2VzIGZyb20gYSBwb2xsIGFzIGZyb20gc2lnbmFsIHdhdGNoZXMuICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93YXRjaF93aXRoX3BvbGwpCi17Ci0gIGd1aW50IGk7Ci0KLSAgdGVzdF9idXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgbWVzc2FnZXNfc2VlbiA9IDA7Ci0KLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoICh0ZXN0X2J1cyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHRlc3RfYnVzLCAibWVzc2FnZSIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfZnVuYywgTlVMTCk7Ci0KLSAgc2VuZF8xMF9hcHBfbWVzc2FnZXMgKCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKGdzdF9idXNfcG9sbCAodGVzdF9idXMsIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OLAotICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSkpOwotCi0gIGZhaWxfaWYgKGdzdF9idXNfaGF2ZV9wZW5kaW5nICh0ZXN0X2J1cyksICJ1bmV4cGVjdGVkIG1lc3NhZ2VzIG9uIGJ1cyIpOwotICBmYWlsX3VubGVzcyAobWVzc2FnZXNfc2VlbiA9PSAxMCwgInNpZ25hbCBoYW5kbGVyIGRpZG4ndCBnZXQgMTAgbWVzc2FnZXMiKTsKLQotICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKHRlc3RfYnVzKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCB0aGF0IHlvdSBnZXQgdGhlIG1lc3NhZ2VzIHdpdGggcG9wLiAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGltZWRfcG9wKQotewotICBndWludCBpOwotCi0gIHRlc3RfYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgc2VuZF8xMF9hcHBfbWVzc2FnZXMgKCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKGdzdF9idXNfdGltZWRfcG9wICh0ZXN0X2J1cywgR1NUX0NMT0NLX1RJTUVfTk9ORSkpOwotCi0gIGZhaWxfaWYgKGdzdF9idXNfaGF2ZV9wZW5kaW5nICh0ZXN0X2J1cyksICJ1bmV4cGVjdGVkIG1lc3NhZ2VzIG9uIGJ1cyIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RfYnVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3REZXZpY2UgZGV2aWNlOwotfSBGb29EZXZpY2U7Ci10eXBlZGVmIHN0cnVjdAotewotICBHc3REZXZpY2VDbGFzcyBkZXZpY2Vfa2xhc3M7Ci19IEZvb0RldmljZUNsYXNzOwotCi1HX0RFRklORV9UWVBFIChGb29EZXZpY2UsIGZvb19kZXZpY2UsIEdTVF9UWVBFX0RFVklDRSk7Ci0KLXN0YXRpYyB2b2lkCi1mb29fZGV2aWNlX2NsYXNzX2luaXQgKEZvb0RldmljZUNsYXNzICoga2xhc3MpCi17Ci0gIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLwotfQotCi1zdGF0aWMgdm9pZAotZm9vX2RldmljZV9pbml0IChGb29EZXZpY2UgKiBkZXZpY2UpCi17Ci0gIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLwotfQotCi0vKiB0ZXN0IHRoYXQgeW91IGdldCB0aGUgbWVzc2FnZXMgd2l0aCBwb3BfZmlsdGVyZWQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RpbWVkX3BvcF9maWx0ZXJlZCkKLXsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBndWludCBpOwotCi0gIHRlc3RfYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgc2VuZF8xMF9hcHBfbWVzc2FnZXMgKCk7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKHRlc3RfYnVzLCBHU1RfQ0xPQ0tfVElNRV9OT05FLAotICAgICAgICBHU1RfTUVTU0FHRV9BTlkpOwotICAgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIH0KLQotICAvKiBzaG91bGQgZmx1c2ggYWxsIG1lc3NhZ2VzIG9uIHRoZSBidXMgd2l0aCB0eXBlcyBub3QgbWF0Y2hpbmcgKi8KLSAgc2VuZF8xMF9hcHBfbWVzc2FnZXMgKCk7Ci0gIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgMCwKLSAgICAgIEdTVF9NRVNTQUdFX0FOWSBeIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKLSAgZmFpbF91bmxlc3MgKG1zZyA9PSBOVUxMKTsKLSAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKHRlc3RfYnVzLCBHU1RfU0VDT05EIC8gMiwKLSAgICAgIEdTVF9NRVNTQUdFX0FOWSBeIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OKTsKLSAgZmFpbF91bmxlc3MgKG1zZyA9PSBOVUxMKTsKLSAgLyogdGhlcmUgc2hvdWxkIGJlIG5vdGhpbmcgb24gdGhlIGJ1cyBub3cgKi8KLSAgZmFpbF9pZiAoZ3N0X2J1c19oYXZlX3BlbmRpbmcgKHRlc3RfYnVzKSwgInVuZXhwZWN0ZWQgbWVzc2FnZXMgb24gYnVzIik7Ci0gIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgMCwgR1NUX01FU1NBR0VfQU5ZKTsKLSAgZmFpbF91bmxlc3MgKG1zZyA9PSBOVUxMKTsKLQotICBzZW5kXzVhcHBfMWVsXzFlcnJfMmFwcF8xZW9zX21lc3NhZ2VzICgwKTsKLSAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKHRlc3RfYnVzLCAwLAotICAgICAgR1NUX01FU1NBR0VfQU5ZIF4gR1NUX01FU1NBR0VfQVBQTElDQVRJT04pOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpLCBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVzX2hhdmVfcGVuZGluZyAodGVzdF9idXMpLCAiZXhwZWN0ZWQgbWVzc2FnZXMgb24gYnVzIik7Ci0gIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgMCwgR1NUX01FU1NBR0VfQVBQTElDQVRJT04pOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpLCBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIDAsIEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgZmFpbF91bmxlc3MgKG1zZyA9PSBOVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Ci0KLSAgLyogVGVzdCBleHRlbmRlZCBtZXNzYWdlcyAqLwotICBHU1RfREVCVUcKLSAgICAgICgiQ2hlY2tpbmcgZXh0ZW5kZWQgbWVzc2FnZXMgcmVjZWl2ZWQgZnJvbSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCIpOwotICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOwotCi0gIHNlbmRfNWFwcF8xZWxfMWVycl8yYXBwXzFlb3NfbWVzc2FnZXMgKDApOwotICBzZW5kX2V4dGVuZGVkX21lc3NhZ2VzICgwKTsKLSAgc2VuZF81YXBwXzFlbF8xZXJyXzJhcHBfMWVvc19tZXNzYWdlcyAoMCk7Ci0gIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgMCwgR1NUX01FU1NBR0VfRVhURU5ERUQpOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpLCBHU1RfTUVTU0FHRV9ERVZJQ0VfQURERUQpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIDAsIEdTVF9NRVNTQUdFX0VYVEVOREVEKTsKLSAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSwgR1NUX01FU1NBR0VfREVWSUNFX1JFTU9WRUQpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGVzdF9idXMpOwotCi0gIC8qIE5vdyBjaGVjayBleHRlbmRlZCBtZXNzYWdlcyBkb24ndCBhcHBlYXIgd2hlbiB3ZSBkb24ndCBhc2sgZm9yIHRoZW0gKi8KLSAgR1NUX0RFQlVHCi0gICAgICAoIkNoZWNraW5nIGV4dGVuZGVkIG1lc3NhZ2VzICpub3QqIHJlY2VpdmVkIGZyb20gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgd2hlbiBub3Qgd2FudGVkIik7Ci0gIHRlc3RfYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgc2VuZF9leHRlbmRlZF9tZXNzYWdlcyAoMCk7Ci0gIHNlbmRfNWFwcF8xZWxfMWVycl8yYXBwXzFlb3NfbWVzc2FnZXMgKDApOwotCi0gIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgMCwgR1NUX01FU1NBR0VfRVJST1IpOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpLCBHU1RfTUVTU0FHRV9FUlJPUik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkICh0ZXN0X2J1cywgMCwgR1NUX01FU1NBR0VfRU9TKTsKLSAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSwgR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGVzdF9idXMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBncG9pbnRlcgotcG9zdF9kZWxheWVkX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgVEhSRUFEX1NUQVJUICgpOwotICBzZW5kXzVhcHBfMWVsXzFlcnJfMmFwcF8xZW9zX21lc3NhZ2VzICgxICogR19VU0VDX1BFUl9TRUMpOwotICByZXR1cm4gTlVMTDsKLX0KLQotLyogdGVzdCB0aGF0IHlvdSBnZXQgdGhlIG1lc3NhZ2VzIHdpdGggcG9wX2ZpbHRlcmVkIGlmIHRoZXJlJ3MgYSB0aW1lb3V0Ki8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RpbWVkX3BvcF9maWx0ZXJlZF93aXRoX3RpbWVvdXQpCi17Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLQotICBNQUlOX0lOSVQgKCk7Ci0KLSAgdGVzdF9idXMgPSBnc3RfYnVzX25ldyAoKTsKLQotICBNQUlOX1NUQVJUX1RIUkVBRF9GVU5DVElPTlMgKDEsIHBvc3RfZGVsYXllZF90aHJlYWQsIE5VTEwpOwotCi0gIE1BSU5fU1lOQ0hST05JWkUgKCk7Ci0KLSAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKHRlc3RfYnVzLCAyICogR1NUX1NFQ09ORCwKLSAgICAgIEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgZmFpbF91bmxlc3MgKG1zZyA9PSBOVUxMLCAiR290IHVuZXhwZWN0ZWQgJXMgbWVzc2FnZSIsCi0gICAgICAobXNnKSA/IEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobXNnKSA6ICIiKTsKLSAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKHRlc3RfYnVzLCAoMyArIDEgKyAxICsgMSkgKiBHU1RfU0VDT05ELAotICAgICAgR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKLSAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMLCAiZXhwZWN0ZWQgZWxlbWVudCBtZXNzYWdlLCBidXQgZ290IG5vdGhpbmciKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSwgR1NUX01FU1NBR0VfRUxFTUVOVCk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIEdTVF9DTE9DS19USU1FX05PTkUsCi0gICAgICBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7Ci0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCwgImV4cGVjdGVkIGFwcGxpY2F0aW9uIG1lc3NhZ2UsIGJ1dCBnb3Qgbm90aGluZyIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpLCBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIEdTVF9DTE9DS19USU1FX05PTkUsCi0gICAgICBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7Ci0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCwgImV4cGVjdGVkIGFwcGxpY2F0aW9uIG1lc3NhZ2UsIGJ1dCBnb3Qgbm90aGluZyIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpLCBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAodGVzdF9idXMsIEdTVF9TRUNPTkQgLyA0LAotICAgICAgR1NUX01FU1NBR0VfVEFHIHwgR1NUX01FU1NBR0VfRVJST1IpOwotICBmYWlsX3VubGVzcyAobXNnID09IE5VTEwsICJHb3QgdW5leHBlY3RlZCAlcyBtZXNzYWdlIiwKLSAgICAgIChtc2cpID8gR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtc2cpIDogIiIpOwotCi0gIE1BSU5fU1RPUF9USFJFQURTICgpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RfYnVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0IHRoYXQgeW91IGdldCB0aGUgbWVzc2FnZXMgd2l0aCBwb3AgZnJvbSBhbm90aGVyIHRocmVhZC4gKi8KLXN0YXRpYyBncG9pbnRlcgotcG9wX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0QnVzICpidXMgPSBHU1RfQlVTX0NBU1QgKGRhdGEpOwotICBndWludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChnc3RfYnVzX3RpbWVkX3BvcCAoYnVzLCBHU1RfQ0xPQ0tfVElNRV9OT05FKSk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RpbWVkX3BvcF90aHJlYWQpCi17Ci0gIEdUaHJlYWQgKnRocmVhZDsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0KLSAgdGVzdF9idXMgPSBnc3RfYnVzX25ldyAoKTsKLQotICB0aHJlYWQgPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWsiLCBwb3BfdGhyZWFkLCB0ZXN0X2J1cywgJmVycm9yKTsKLSAgZmFpbF9pZiAoZXJyb3IgIT0gTlVMTCk7Ci0KLSAgc2VuZF8xMF9hcHBfbWVzc2FnZXMgKCk7Ci0KLSAgZ190aHJlYWRfam9pbiAodGhyZWFkKTsKLQotICBmYWlsX2lmIChnc3RfYnVzX2hhdmVfcGVuZGluZyAodGVzdF9idXMpLCAidW5leHBlY3RlZCBtZXNzYWdlcyBvbiBidXMiKTsKLQotICAvKiB0cnkgdG8gcG9wIGEgbWVzc2FnZSB3aXRob3V0IHRpbWVvdXQuICovCi0gIGZhaWxfaWYgKGdzdF9idXNfdGltZWRfcG9wICh0ZXN0X2J1cywgMCkgIT0gTlVMTCk7Ci0KLSAgLyogd2l0aCBhIHNtYWxsIHRpbWVvdXQgKi8KLSAgZmFpbF9pZiAoZ3N0X2J1c190aW1lZF9wb3AgKHRlc3RfYnVzLCAxMDAwKSAhPSBOVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdib29sZWFuCi1jYl9idXNfY2FsbCAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSBkYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgIHsKLSAgICAgIEdTVF9JTkZPICgiRW5kLW9mLXN0cmVhbSIpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICB7Ci0gICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsIE5VTEwpOwotICAgICAgZ19lcnJvciAoIkVycm9yOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgewotICAgICAgR1NUX0xPRyAoIkJVUyBNRVNTQUdFOiB0eXBlPSVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtc2cpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jdXN0b21fbWFpbl9jb250ZXh0KQotewotICBHTWFpbkNvbnRleHQgKmN0eDsKLSAgR01haW5Mb29wICpsb29wOwotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqc3JjOwotICBHc3RFbGVtZW50ICpzaW5rOwotICBHU291cmNlICpzb3VyY2U7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIGN0eCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoY3R4LCBGQUxTRSk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgMjAwMCwgTlVMTCk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luaykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgc291cmNlID0gZ3N0X2J1c19jcmVhdGVfd2F0Y2ggKGJ1cyk7Ci0gIGdfc291cmNlX2F0dGFjaCAoc291cmNlLCBjdHgpOwotICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sgKHNvdXJjZSwgKEdTb3VyY2VGdW5jKSBjYl9idXNfY2FsbCwgbG9vcCwgTlVMTCk7Ci0gIGdfc291cmNlX3VucmVmIChzb3VyY2UpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIEdTVF9JTkZPICgic3RhcnRpbmcgcGlwZWxpbmUiKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIEdTVF9JTkZPICgicnVubmluZyBldmVudCBsb29wLCBjdHg9JXAiLCBjdHgpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBpZiAoY3R4KQotICAgIGdfbWFpbl9jb250ZXh0X3VucmVmIChjdHgpOwotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0QnVzU3luY1JlcGx5Ci10ZXN0X2FzeW5jX3N5bmNfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdBcnJheSAqdGltZXN0YW1wcyA9IHVzZXJfZGF0YTsKLSAgZ2ludDY0IHRzID0gZ19nZXRfbW9ub3RvbmljX3RpbWUgKCkgKiAxMDAwOyAgIC8qIG1pY3Jvc2VjcyAtPiBuYW5vc2VjcyAqLwotCi0gIGdfYXJyYXlfYXBwZW5kX3ZhbCAodGltZXN0YW1wcywgdHMpOwotICBHU1RfSU5GTyAoIlttc2cgJXBdICUiIEdTVF9QVFJfRk9STUFULCBtc2csIG1zZyk7Ci0KLSAgcmV0dXJuIEdTVF9CVVNfQVNZTkM7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotcG9zdF8xMF9hcHBfbWVzc2FnZXNfdGhyZWFkIChncG9pbnRlciBkYXRhKQotewotICBUSFJFQURfU1RBUlQgKCk7Ci0gIHNlbmRfMTBfYXBwX21lc3NhZ2VzICgpOwotICByZXR1cm4gTlVMTDsKLX0KLQotLyogVGVzdCBHU1RfQlVTX0FTWU5DIGFjdHVhbGx5IGNhdXNlcyB0aGUgdGhyZWFkIHBvc3RpbmcgdGhlIG1lc3NhZ2UgdG8KLSAqIGJsb2NrIHVudGlsIHRoZSBtZXNzYWdlIGhhcyBiZWVuIGZyZWVkLiBXZSBzcGF3biBhIHRocmVhZCB0byBwb3N0IHRlbgotICogbWVzc2FnZXMuIFdlIGluc3RhbGwgYSBidXMgc3luYyBoYW5kbGVyIHRvIGdldCB0aGUgdGltZXN0YW1wIG9mIGVhY2gKLSAqIG1lc3NhZ2UgYXMgaXQgaXMgYmVpbmcgcG9zdGVkLCBhbmQgdG8gcmV0dXJuIEdTVF9CVVNfQVNZTkMuIEluIHRoZSBtYWluCi0gKiB0aHJlYWQgd2Ugc2xlZXAgYSBiaXQgYWZ0ZXIgd2UgcG9wIG9mZiBhIG1lc3NhZ2UgYW5kIGJlZm9yZSB3ZSBmcmVlIGl0LgotICogVGhlIHBvc3RpbmcgdGhyZWFkIHNob3VsZCBiZSBibG9ja2VkIHdoaWxlIHRoZSBtYWluIHRocmVhZCBzbGVlcHMsIHNvCi0gKiB3ZSBleHBlY3QgdGhlIGludGVydmFsIGFzIHRoZSBtZXNzYWdlcyBhcmUgcG9zdGVkIHRvIGJlIHJvdWdobHkgdGhlIHNhbWUKLSAqIGFzIHRoZSBzbGVlcCB0aW1lIGluIHRoZSBtYWluIHRocmVhZC4gZ191c2xlZXAoKSBpcyBub3Qgc3VwZXItcHJlY2lzZSwgc28KLSAqIHdlIGFsbG93IGZvciBzb21lIHNsYWNrIHRoZXJlLCB3ZSBqdXN0IHdhbnQgdG8gY2hlY2sgdGhhdCB0aGUgcG9zdGluZwotICogdGhyZWFkIHdhcyBibG9ja2VkIGF0IGFsbCByZWFsbHkuICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hc3luY19tZXNzYWdlKQotewotICBHQXJyYXkgKnRpbWVzdGFtcHM7Ci0gIGd1aW50IGk7Ci0KLSAgTUFJTl9JTklUICgpOwotCi0gIHRpbWVzdGFtcHMgPSBnX2FycmF5X3NpemVkX25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKGdpbnQ2NCksIDEwKTsKLQotICB0ZXN0X2J1cyA9IGdzdF9idXNfbmV3ICgpOwotCi0gIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAodGVzdF9idXMsIHRlc3RfYXN5bmNfc3luY19oYW5kbGVyLCB0aW1lc3RhbXBzLAotICAgICAgTlVMTCk7Ci0KLSAgTUFJTl9TVEFSVF9USFJFQURfRlVOQ1RJT05TICgxLCBwb3N0XzEwX2FwcF9tZXNzYWdlc190aHJlYWQsIE5VTEwpOwotCi0gIE1BSU5fU1lOQ0hST05JWkUgKCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgICBHU1RfTE9HICgiKCVkKSB3YWl0aW5nIGZvciBtZXNzYWdlLi4iLCBpKTsKLSAgICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcCAodGVzdF9idXMsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgIEdTVF9MT0cgKCIoJWQpIGdvdCBtZXNzYWdlLCBzbGVlcGluZyBhIGJpdCIsIGkpOwotICAgIGdfdXNsZWVwICg2MCAqIEdTVF9NU0VDT05EIC8gKEdTVF9TRUNPTkQgLyBHX1VTRUNfUEVSX1NFQykpOwotICAgIEdTVF9MT0cgKCIoJWQpIGFib3V0IHRvIGZyZWUgbWVzc2FnZSIsIGkpOwotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICB9Ci0KLSAgZm9yIChpID0gMTsgaSA8IDEwOyBpKyspIHsKLSAgICBnaW50NjQgcHJldl90cyA9IGdfYXJyYXlfaW5kZXggKHRpbWVzdGFtcHMsIGdpbnQ2NCwgaSAtIDEpOwotICAgIGdpbnQ2NCB0cyA9IGdfYXJyYXlfaW5kZXggKHRpbWVzdGFtcHMsIGdpbnQ2NCwgaSk7Ci0gICAgZ2ludDY0IGRpZmYgPSB0cyAtIHByZXZfdHM7Ci0KLSAgICBmYWlsX3VubGVzcyAocHJldl90cyA8IHRzKTsKLSAgICBmYWlsX3VubGVzcyAoZGlmZiA+PSAyMCAqIEdTVF9NU0VDT05ELCAiaW50ZXJ2YWwgYmV0d2VlbiBtZXNzYWdlcyBiZWluZyAiCi0gICAgICAgICJwb3N0ZWQgd2FzIGp1c3QgJSIgR19HSU5UNjRfRk9STUFUICJtcyIsIGRpZmYgLyBHU1RfTVNFQ09ORCk7Ci0gIH0KLQotICBmYWlsX2lmIChnc3RfYnVzX2hhdmVfcGVuZGluZyAodGVzdF9idXMpLCAidW5leHBlY3RlZCBtZXNzYWdlcyBvbiBidXMiKTsKLQotICBNQUlOX1NUT1BfVEhSRUFEUyAoKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2J1cyk7Ci0KLSAgZ19hcnJheV91bnJlZiAodGltZXN0YW1wcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9idXNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0QnVzIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInN0cmVzc3Rlc3QiKTsKLQotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDYwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2hhbW1lcl9idXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2F0Y2gpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2F0Y2hfd2l0aF9wb2xsKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3dhdGNoX3dpdGhfY3VzdG9tX2NvbnRleHQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWRkX3dhdGNoX3dpdGhfY3VzdG9tX2NvbnRleHQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVtb3ZlX3dhdGNoKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RpbWVkX3BvcCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90aW1lZF9wb3BfdGhyZWFkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RpbWVkX3BvcF9maWx0ZXJlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90aW1lZF9wb3BfZmlsdGVyZWRfd2l0aF90aW1lb3V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2N1c3RvbV9tYWluX2NvbnRleHQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXN5bmNfbWVzc2FnZSk7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J1cyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhYTA1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0Y2Fwcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQyNiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogZ3N0Y2Fwcy5jOiBVbml0IHRlc3QgZm9yIEdzdENhcHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2Fwcy5oPgotI2luY2x1ZGUgImNhcHNsaXN0LmgiCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zyb21fc3RyaW5nKQotewotICBHc3RDYXBzICpjYXBzOwotICBHc3RDYXBzICpjYXBzMjsKLSAgZ2NoYXIgKnRvX3N0cjsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoY2Fwc19saXN0KTsgaSsrKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzX2xpc3RbaV0pOwotICAgIGZhaWxfaWYgKGNhcHMgPT0gTlVMTCwKLSAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgY2FwcyBmcm9tIHN0cmluZyAlc1xuIiwgY2Fwc19saXN0W2ldKTsKLSAgICB0b19zdHIgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMpOwotICAgIGZhaWxfaWYgKHRvX3N0ciA9PSBOVUxMLAotICAgICAgICAiQ291bGQgbm90IGNvbnZlcnQgY2FwcyBiYWNrIHRvIHN0cmluZyAlc1xuIiwgY2Fwc19saXN0W2ldKTsKLSAgICBjYXBzMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICh0b19zdHIpOwotICAgIGZhaWxfaWYgKGNhcHMyID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGNhcHMgZnJvbSBzdHJpbmcgJXNcbiIsIHRvX3N0cik7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMsIGNhcHMpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMsIGNhcHMyKSk7Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLSAgICBnX2ZyZWUgKHRvX3N0cik7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kb3VibGVfYXBwZW5kKQotewotICBHc3RTdHJ1Y3R1cmUgKnMxOwotICBHc3RDYXBzICpjMTsKLQotICBjMSA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gIHMxID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LHJhdGU9NDQxMDAiLCBOVUxMKTsKLSAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoYzEsIHMxKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjMSwgczEpKTsKLQotICBnc3RfY2Fwc191bnJlZiAoYzEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X211dGFiaWxpdHkpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczE7Ci0gIEdzdENhcHMgKmMxOwotICBnaW50IHJldDsKLQotICBjMSA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gIHMxID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LHJhdGU9NDQxMDAiLCBOVUxMKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMxLCAicmF0ZSIsIEdfVFlQRV9JTlQsIDQ4MDAwLCBOVUxMKTsKLSAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoYzEsIHMxKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMxLCAicmF0ZSIsIEdfVFlQRV9JTlQsIDIyNTAwLCBOVUxMKTsKLSAgZ3N0X2NhcHNfcmVmIChjMSk7Ci0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3N0cnVjdHVyZV9zZXQgKHMxLCAicmF0ZSIsIEdfVFlQRV9JTlQsIDExMjUwLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMxLCAicmF0ZSIsICZyZXQpKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSAyMjUwMCk7Ci0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2NhcHNfc2V0X3NpbXBsZSAoYzEsICJyYXRlIiwgR19UWVBFX0lOVCwgMTEyNTAsIE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoczEsICJyYXRlIiwgJnJldCkpOwotICBmYWlsX3VubGVzcyAocmV0ID09IDIyNTAwKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMxLCAicmF0ZSIsIEdfVFlQRV9JTlQsIDExMjUwLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoczEsICJyYXRlIiwgJnJldCkpOwotICBmYWlsX3VubGVzcyAocmV0ID09IDExMjUwKTsKLSAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoYzEsICJyYXRlIiwgR19UWVBFX0lOVCwgMSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMxLCAicmF0ZSIsICZyZXQpKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSAxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdGF0aWNfY2FwcykKLXsKLSAgc3RhdGljIEdzdFN0YXRpY0NhcHMgc2NhcHMgPSBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdyxyYXRlPTQ0MTAwIik7Ci0gIEdzdENhcHMgKmNhcHMxOwotICBHc3RDYXBzICpjYXBzMjsKLSAgc3RhdGljIEdzdFN0YXRpY0NhcHMgc2FueSA9IEdTVF9TVEFUSUNfQ0FQU19BTlk7Ci0gIHN0YXRpYyBHc3RTdGF0aWNDYXBzIHNub25lID0gR1NUX1NUQVRJQ19DQVBTX05PTkU7Ci0KLSAgLyogY2FwcyBjcmVhdGlvbiAqLwotICBjYXBzMSA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZzY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzMSAhPSBOVUxMKTsKLSAgLyogMSByZWZjb3VudCBjb3JlLCBvbmUgZnJvbSB1cyAqLwotICBmYWlsX3VubGVzcyAoR1NUX0NBUFNfUkVGQ09VTlQgKGNhcHMxKSA9PSAyKTsKLQotICAvKiBjYXBzIHNob3VsZCBiZSB0aGUgc2FtZSAqLwotICBjYXBzMiA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZzY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzMiAhPSBOVUxMKTsKLSAgLyogMSByZWZjb3VudCBjb3JlLCB0d28gZnJvbSB1cyAqLwotICBmYWlsX3VubGVzcyAoR1NUX0NBUFNfUkVGQ09VTlQgKGNhcHMxKSA9PSAzKTsKLSAgLyogY2FwcyBtdXN0IGJlIGVxdWFsICovCi0gIGZhaWxfdW5sZXNzIChjYXBzMSA9PSBjYXBzMik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLQotICBjYXBzMSA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZzYW55KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzMSwgR1NUX0NBUFNfQU5ZKSk7Ci0gIGNhcHMyID0gZ3N0X3N0YXRpY19jYXBzX2dldCAoJnNub25lKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzMiwgR1NUX0NBUFNfTk9ORSkpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19lcXVhbCAoY2FwczEsIGNhcHMyKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGNvbnN0IGdjaGFyIG5vbl9zaW1wbGVfY2Fwc19zdHJpbmdbXSA9Ci0gICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylJNDIwLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMS8xMDAsIDEwMCBdLCAiCi0gICAgIndpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF07IHZpZGVvL3gtcmF3LCAiCi0gICAgImZvcm1hdD0oc3RyaW5nKVlVWTIsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAxLzEwMCwgMTAwIF0sIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCAiCi0gICAgImhlaWdodD0oaW50KVsgMTYsIDQwOTYgXTsgdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVJHQjhfUEFMRVRURUQsICIKLSAgICAiZnJhbWVyYXRlPShmcmFjdGlvbilbIDEvMTAwLCAxMDAgXSwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sICIKLSAgICAiaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdOyB2aWRlby94LXJhdywgIgotICAgICJmb3JtYXQ9KHN0cmluZyl7IEk0MjAsIFlVWTIsIFlWMTIgfSwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sICIKLSAgICAiaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMS8xMDAsIDEwMCBdIjsKLQotc3RhdGljIGdib29sZWFuCi1jaGVja19zdHJpbmdfbGlzdCAoY29uc3QgR1ZhbHVlICogZm9ybWF0X3ZhbHVlKQotewotICBjb25zdCBHVmFsdWUgKnN0cmluZ192YWx1ZTsKLSAgZ2Jvb2xlYW4gZ290X3JnYjggPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gZ290X3l2MTIgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gZ290X2k0MjAgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gZ290X3l1eTIgPSBGQUxTRTsKLSAgY29uc3QgZ2NoYXIgKnN0cmluZzsKLQotICBzdHJpbmdfdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKGZvcm1hdF92YWx1ZSwgMCk7Ci0gIGZhaWxfdW5sZXNzIChzdHJpbmdfdmFsdWUgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX1NUUklORyAoc3RyaW5nX3ZhbHVlKSk7Ci0gIHN0cmluZyA9IGdfdmFsdWVfZ2V0X3N0cmluZyAoc3RyaW5nX3ZhbHVlKTsKLSAgZmFpbF91bmxlc3MgKHN0cmluZyAhPSBOVUxMKTsKLSAgZ290X3JnYjggPSBnb3RfcmdiOCB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIlJHQjhfUEFMRVRURUQiKSk7Ci0gIGdvdF9pNDIwID0gZ290X2k0MjAgfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJJNDIwIikpOwotICBnb3RfeXV5MiA9IGdvdF95dXkyIHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiWVVZMiIpKTsKLSAgZ290X3l2MTIgPSBnb3RfeXYxMiB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIllWMTIiKSk7Ci0KLSAgc3RyaW5nX3ZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChmb3JtYXRfdmFsdWUsIDEpOwotICBmYWlsX3VubGVzcyAoc3RyaW5nX3ZhbHVlICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19TVFJJTkcgKHN0cmluZ192YWx1ZSkpOwotICBzdHJpbmcgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKHN0cmluZ192YWx1ZSk7Ci0gIGZhaWxfdW5sZXNzIChzdHJpbmcgIT0gTlVMTCk7Ci0gIGdvdF9yZ2I4ID0gZ290X3JnYjggfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJSR0I4X1BBTEVUVEVEIikpOwotICBnb3RfaTQyMCA9IGdvdF9pNDIwIHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiSTQyMCIpKTsKLSAgZ290X3l1eTIgPSBnb3RfeXV5MiB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIllVWTIiKSk7Ci0gIGdvdF95djEyID0gZ290X3l2MTIgfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJZVjEyIikpOwotCi0gIHN0cmluZ192YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoZm9ybWF0X3ZhbHVlLCAyKTsKLSAgZmFpbF91bmxlc3MgKHN0cmluZ192YWx1ZSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfU1RSSU5HIChzdHJpbmdfdmFsdWUpKTsKLSAgc3RyaW5nID0gZ192YWx1ZV9nZXRfc3RyaW5nIChzdHJpbmdfdmFsdWUpOwotICBmYWlsX3VubGVzcyAoc3RyaW5nICE9IE5VTEwpOwotICBnb3RfcmdiOCA9IGdvdF9yZ2I4IHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiUkdCOF9QQUxFVFRFRCIpKTsKLSAgZ290X2k0MjAgPSBnb3RfaTQyMCB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIkk0MjAiKSk7Ci0gIGdvdF95dXkyID0gZ290X3l1eTIgfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJZVVkyIikpOwotICBnb3RfeXYxMiA9IGdvdF95djEyIHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiWVYxMiIpKTsKLQotICBzdHJpbmdfdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKGZvcm1hdF92YWx1ZSwgMyk7Ci0gIGZhaWxfdW5sZXNzIChzdHJpbmdfdmFsdWUgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX1NUUklORyAoc3RyaW5nX3ZhbHVlKSk7Ci0gIHN0cmluZyA9IGdfdmFsdWVfZ2V0X3N0cmluZyAoc3RyaW5nX3ZhbHVlKTsKLSAgZmFpbF91bmxlc3MgKHN0cmluZyAhPSBOVUxMKTsKLSAgZ290X3JnYjggPSBnb3RfcmdiOCB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIlJHQjhfUEFMRVRURUQiKSk7Ci0gIGdvdF9pNDIwID0gZ290X2k0MjAgfHwgKGdfc3RyX2VxdWFsIChzdHJpbmcsICJJNDIwIikpOwotICBnb3RfeXV5MiA9IGdvdF95dXkyIHx8IChnX3N0cl9lcXVhbCAoc3RyaW5nLCAiWVVZMiIpKTsKLSAgZ290X3l2MTIgPSBnb3RfeXYxMiB8fCAoZ19zdHJfZXF1YWwgKHN0cmluZywgIllWMTIiKSk7Ci0KLSAgcmV0dXJuIChnb3RfcmdiOCAmJiBnb3RfaTQyMCAmJiBnb3RfeXV5MiAmJiBnb3RfeXYxMik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsaWZ5KQotewotICBHc3RTdHJ1Y3R1cmUgKnMxOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAobm9uX3NpbXBsZV9jYXBzX3N0cmluZyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwsCi0gICAgICAiZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKG5vbl9zaW1wbGVfY2Fwc19zdHJpbmcpIGZhaWxlZCIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19zaW1wbGlmeSAoY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwsICJnc3RfY2Fwc19zaW1wbGlmeSgpIHNob3VsZCBoYXZlIHdvcmtlZCIpOwotCi0gIC8qIGNoZWNrIHNpbXBsaWZpZWQgY2Fwcywgc2hvdWxkIGJlOgotICAgKgotICAgKiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0I4X1BBTEVUVEVELCBZVjEyLCBZVVkyLCBJNDIwIH0sCi0gICAqICAgICB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLAotICAgKiAgICAgZnJhbWVyYXRlPShmcmFjdGlvbilbIDEvMTAwLCAxMDAgXQotICAgKi8KLSAgR1NUX0RFQlVHICgic2ltcGx5ZmllZCAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcykgPT0gMSk7Ci0gIHMxID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGZhaWxfdW5sZXNzIChzMSAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoczEsICJ2aWRlby94LXJhdyIpKTsKLSAgewotICAgIGNvbnN0IEdWYWx1ZSAqZnJhbWVyYXRlX3ZhbHVlOwotICAgIGNvbnN0IEdWYWx1ZSAqZm9ybWF0X3ZhbHVlOwotICAgIGNvbnN0IEdWYWx1ZSAqd2lkdGhfdmFsdWU7Ci0gICAgY29uc3QgR1ZhbHVlICpoZWlnaHRfdmFsdWU7Ci0gICAgY29uc3QgR1ZhbHVlICp2YWxfZnBzOwotICAgIEdWYWx1ZSB0ZXN0X2ZwcyA9IHsgMCwgfTsKLSAgICBnaW50IG1pbl93aWR0aCwgbWF4X3dpZHRoOwotICAgIGdpbnQgbWluX2hlaWdodCwgbWF4X2hlaWdodDsKLQotICAgIGZvcm1hdF92YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzMSwgImZvcm1hdCIpOwotICAgIGZhaWxfdW5sZXNzIChmb3JtYXRfdmFsdWUgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUIChmb3JtYXRfdmFsdWUpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKGZvcm1hdF92YWx1ZSkgPT0gNCk7Ci0gICAgZmFpbF91bmxlc3MgKGNoZWNrX3N0cmluZ19saXN0IChmb3JtYXRfdmFsdWUpID09IFRSVUUpOwotCi0gICAgZ192YWx1ZV9pbml0ICgmdGVzdF9mcHMsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgICBmcmFtZXJhdGVfdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoczEsICJmcmFtZXJhdGUiKTsKLSAgICBmYWlsX3VubGVzcyAoZnJhbWVyYXRlX3ZhbHVlICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT05fUkFOR0UgKGZyYW1lcmF0ZV92YWx1ZSkpOwotCi0gICAgdmFsX2ZwcyA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluIChmcmFtZXJhdGVfdmFsdWUpOwotICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ0ZXN0X2ZwcywgMSwgMTAwKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ0ZXN0X2ZwcywgdmFsX2ZwcykgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLQotICAgIHZhbF9mcHMgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21heCAoZnJhbWVyYXRlX3ZhbHVlKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdGVzdF9mcHMsIDEwMCwgMSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdGVzdF9mcHMsIHZhbF9mcHMpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0KLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdGVzdF9mcHMpOwotCi0gICAgd2lkdGhfdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoczEsICJ3aWR0aCIpOwotICAgIGZhaWxfdW5sZXNzICh3aWR0aF92YWx1ZSAhPSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAod2lkdGhfdmFsdWUpKTsKLSAgICBtaW5fd2lkdGggPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHdpZHRoX3ZhbHVlKTsKLSAgICBtYXhfd2lkdGggPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHdpZHRoX3ZhbHVlKTsKLSAgICBmYWlsX3VubGVzcyAobWluX3dpZHRoID09IDE2ICYmIG1heF93aWR0aCA9PSA0MDk2KTsKLQotICAgIGhlaWdodF92YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzMSwgImhlaWdodCIpOwotICAgIGZhaWxfdW5sZXNzIChoZWlnaHRfdmFsdWUgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKGhlaWdodF92YWx1ZSkpOwotICAgIG1pbl9oZWlnaHQgPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKGhlaWdodF92YWx1ZSk7Ci0gICAgbWF4X2hlaWdodCA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoaGVpZ2h0X3ZhbHVlKTsKLSAgICBmYWlsX3VubGVzcyAobWluX2hlaWdodCA9PSAxNiAmJiBtYXhfaGVpZ2h0ID09IDQwOTYpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RydW5jYXRlKQotewotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAobm9uX3NpbXBsZV9jYXBzX3N0cmluZyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwsCi0gICAgICAiZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKG5vbl9zaW1wbGVfY2Fwc19zdHJpbmcpIGZhaWxlZCIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcyksIDQpOwotICBjYXBzID0gZ3N0X2NhcHNfdHJ1bmNhdGUgKGNhcHMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcyksIDEpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3Vic2V0KQotewotICBHc3RDYXBzICpjMSwgKmMyOwotCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LXJhdzsgdmlkZW8veC1yYXciKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVVkyIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKGMyLCBjMSkpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19zdWJzZXQgKGMxLCBjMikpOwotICBnc3RfY2Fwc191bnJlZiAoYzEpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgiYXVkaW8veC1yYXcsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludCk0NDEwMCIpOwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTQ0MTAwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKGMyLCBjMSkpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19zdWJzZXQgKGMxLCBjMikpOwotICBnc3RfY2Fwc191bnJlZiAoYzEpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdywgY2hhbm5lbHM9KGludCkgezF9Iik7Ci0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdywgY2hhbm5lbHM9KGludCkxIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKGMyLCBjMSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMSwgYzIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjMSwgYzIpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLQotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nCi0gICAgICAoImF1ZGlvL3gtcmF3LCByYXRlPShpbnQpNDQxMDAsIGNoYW5uZWxzPShpbnQpMywgZm9ybWF0PShzdHJpbmcpVTE2X0xFIik7Ci0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgiYXVkaW8veC1yYXcsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZm9ybWF0PShzdHJpbmcpeyBTMTZfTEUsIFUxNl9MRSB9Iik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKGMxLCBjMikpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19zdWJzZXQgKGMyLCBjMSkpOwotICBnc3RfY2Fwc191bnJlZiAoYzEpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LWgyNjQsIHBhcnNlZD0oYm9vbGVhbil0cnVlIik7Ci0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgidmlkZW8veC1oMjY0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpYnl0ZS1zdHJlYW0sIGFsaWdubWVudD0oc3RyaW5nKW5hbCIpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19zdWJzZXQgKGMyLCBjMSkpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19zdWJzZXQgKGMxLCBjMikpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19lcXVhbCAoYzEsIGMyKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3Vic2V0X2R1cGxpY2F0aW9uKQotewotICBHc3RDYXBzICpjMSwgKmMyOwotCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpRjMyTEUiKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylGMzJMRSIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKGMxLCBjMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMiwgYzEpKTsKLQotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUgfSIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKGMxLCBjMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMiwgYzEpKTsKLQotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEYzMkxFIH0iKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMSwgYzIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzIsIGMxKSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjMyTEUsIEYzMkxFIH0iKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMSwgYzIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzIsIGMxKSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tZXJnZV9mdW5kYW1lbnRhbCkKLXsKLSAgR3N0Q2FwcyAqYzEsICpjMjsKLQotICAvKiBBTlkgKyBzcGVjaWZpYyA9IEFOWSAqLwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcscmF0ZT00NDEwMCIpOwotICBjMiA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gIGMyID0gZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAwLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAoYzIpLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLQotICAvKiBzcGVjaWZpYyArIEFOWSA9IEFOWSAqLwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcscmF0ZT00NDEwMCIpOwotICBjMSA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gIGMyID0gZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAwLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAoYzIpLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLQotICAvKiBFTVBUWSArIHNwZWNpZmljID0gc3BlY2lmaWMgKi8KLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LHJhdGU9NDQxMDAiKTsKLSAgYzIgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGMyID0gZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAxLCBOVUxMKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGMyKSwgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0KLSAgLyogc3BlY2lmaWMgKyBFTVBUWSA9IHNwZWNpZmljICovCi0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxyYXRlPTQ0MTAwIik7Ci0gIGMxID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChjMiksIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lcmdlX3NhbWUpCi17Ci0gIEdzdENhcHMgKmMxLCAqYzIsICp0ZXN0OwotCi0gIC8qIHRoaXMgaXMgdGhlIHNhbWUgKi8KLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LHJhdGU9NDQxMDAsY2hhbm5lbHM9MSIpOwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcscmF0ZT00NDEwMCxjaGFubmVscz0xIik7Ci0gIGMyID0gZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAxLCBOVUxMKTsKLSAgdGVzdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcscmF0ZT00NDEwMCxjaGFubmVscz0xIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIC8qIGFuZCBzbyBpcyB0aGlzICovCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxyYXRlPTQ0MTAwLGNoYW5uZWxzPTEiKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPTEscmF0ZT00NDEwMCIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0KLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtZm9vLCBkYXRhPShidWZmZXIpQUEiKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtZm9vLCBkYXRhPShidWZmZXIpQUFCQiIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMiwgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0KLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtZm9vLCBkYXRhPShidWZmZXIpQUFCQiIpOwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1mb28sIGRhdGE9KGJ1ZmZlcilBQSIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMiwgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0KLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtZm9vLCBkYXRhPShidWZmZXIpQUEiKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtZm9vLCBkYXRhPShidWZmZXIpQUEiKTsKLSAgYzIgPSBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKLSAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDEsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LWZvbywgZGF0YT0oYnVmZmVyKUFBIik7Ci0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LWJhciwgZGF0YT0oYnVmZmVyKUFBIik7Ci0gIGMyID0gZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAyLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tZXJnZV9zdWJzZXQpCi17Ci0gIEdzdENhcHMgKmMxLCAqYzIsICp0ZXN0OwotCi0gIC8qIHRoZSAybmQgaXMgYWxyZWFkeSBjb3ZlcmVkICovCi0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSwyXSIpOwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9MSIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7Ci0gIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotCi0gIC8qIGhlcmUgaXQgaXMgbm90ICovCi0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz0xLHJhdGU9NDQxMDAiKTsKLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdLHJhdGU9NDQxMDAiKTsKLSAgYzIgPSBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKLSAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDIsIE5VTEwpOwotICB0ZXN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSwyXSxyYXRlPTQ0MTAwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotCi0gIC8qIHNlY29uZCBvbmUgd2FzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBvbmUgKi8KLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDNdIik7Ci0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSwyXSIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7Ci0gIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDNdIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotCi0gIC8qIHNlY29uZCBvbmUgd2FzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBvbmUgKi8KLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7Ci0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSwyXSIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7Ci0gIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotCi0gIC8qIHNlY29uZCBvbmUgd2FzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBvbmUgKi8KLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7Ci0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMiw0XSIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7Ci0gIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotCi0gIC8qIHNlY29uZCBvbmUgd2FzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBvbmUgKi8KLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7Ci0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMiwzXSIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMSwgTlVMTCk7Ci0gIHRlc3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotCi0gIC8qIHRoZXNlIGNhcHMgY2Fubm90IGJlIG1lcmdlZCAqLwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzIsM10iKTsKLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDRdIik7Ci0gIGMyID0gZ3N0X2NhcHNfbWVyZ2UgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoIm1lcmdlZDogKCVkKSAlIiBHU1RfUFRSX0ZPUk1BVCwgZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSwgYzIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGMyKSA9PSAyLCBOVUxMKTsKLSAgdGVzdCA9Ci0gICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMiwzXTthdWRpby94LXJhdyxjaGFubmVscz1bMSw0XSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMyLCB0ZXN0KSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKLQotICAvKiB0aGVzZSBjYXBzIGNhbm5vdCBiZSBtZXJnZWQgKi8KLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPVsxLDJdIik7Ci0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz1bMSwzXSIpOwotICBjMiA9IGdzdF9jYXBzX21lcmdlIChjMiwgYzEpOwotICBHU1RfREVCVUcgKCJtZXJnZWQ6ICglZCkgJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9jYXBzX2dldF9zaXplIChjMiksIGMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjMikgPT0gMiwgTlVMTCk7Ci0gIHRlc3QgPQotICAgICAgZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9WzEsMl07YXVkaW8veC1yYXcsY2hhbm5lbHM9WzEsM10iKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjMiwgdGVzdCkpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotICBnc3RfY2Fwc191bnJlZiAodGVzdCk7Ci0KLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPXsxLDJ9Iik7Ci0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz17MSwyLDMsNH0iKTsKLSAgYzIgPSBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKLSAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDIsIE5VTEwpOwotICB0ZXN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz17MSwyfTsiCi0gICAgICAiYXVkaW8veC1yYXcsY2hhbm5lbHM9ezEsMiwzLDR9Iik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotCi0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz17MSwyfSIpOwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9ezEsM30iKTsKLSAgYzIgPSBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKLSAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDIsIE5VTEwpOwotICB0ZXN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz17MSwyfTsiCi0gICAgICAiYXVkaW8veC1yYXcsY2hhbm5lbHM9ezEsM30iKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjMiwgdGVzdCkpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotICBnc3RfY2Fwc191bnJlZiAodGVzdCk7Ci0KLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LCBmcmFtZXJhdGU9KGZyYWN0aW9uKXsgMTUvMiwgNS8xIH0iKTsKLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LCBmcmFtZXJhdGU9KGZyYWN0aW9uKXsgMTUvMSwgNS8xIH0iKTsKLSAgdGVzdCA9IGdzdF9jYXBzX2NvcHkgKGMxKTsKLSAgYzIgPSBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKLSAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKHRlc3QsIGMyKSk7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLQotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXciKTsKLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LGNoYW5uZWxzPTEiKTsKLSAgYzIgPSBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKLSAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDEsIE5VTEwpOwotICB0ZXN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMyLCB0ZXN0KSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKLQotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9MSIpOwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXciKTsKLSAgYzIgPSBnc3RfY2Fwc19tZXJnZSAoYzIsIGMxKTsKLSAgR1NUX0RFQlVHICgibWVyZ2VkOiAoJWQpICUiIEdTVF9QVFJfRk9STUFULCBnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpLCBjMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYzIpID09IDIsIE5VTEwpOwotICB0ZXN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyxjaGFubmVscz0xOyBhdWRpby94LXJhdyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMyLCB0ZXN0KSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcnNlY3QpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR3N0Q2FwcyAqYzEsICpjMiwgKmNpMSwgKmNpMjsKLQotICAvKiBmaWVsZCBub3Qgc3BlY2lmaWVkID0gYW55IHZhbHVlIHBvc3NpYmxlLCBzbyB0aGUgaW50ZXJzZWN0aW9uCi0gICAqIHNob3VsZCBrZWVwIGZpZWxkcyB3aGljaCBhcmUgb25seSBwYXJ0IG9mIG9uZSBzZXQgb2YgY2FwcyAqLwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0yMCIpOwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCIpOwotCi0gIGNpMSA9IGdzdF9jYXBzX2ludGVyc2VjdCAoYzIsIGMxKTsKLSAgR1NUX0RFQlVHICgiaW50ZXJzZWN0ZWQ6ICUiIEdTVF9QVFJfRk9STUFULCBjaTEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGNpMSkgPT0gMSwgTlVMTCk7Ci0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjaTEsIDApOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgInZpZGVvL3gtcmF3IikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJmb3JtYXQiKSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAid2lkdGgiKSAhPSBOVUxMKTsKLQotICAvKiB3aXRoIGNoYW5nZWQgb3JkZXIgKi8KLSAgY2kyID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjMSwgYzIpOwotICBHU1RfREVCVUcgKCJpbnRlcnNlY3RlZDogJSIgR1NUX1BUUl9GT1JNQVQsIGNpMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoY2kyKSA9PSAxLCBOVUxMKTsKLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNpMiwgMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAidmlkZW8veC1yYXciKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImZvcm1hdCIpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJ3aWR0aCIpICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoY2kxLCBjaTIpKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2kxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNpMik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLQotICAvKiA9PT09PT09PT09ICovCi0KLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9MjAiKTsKLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9MzAiKTsKLQotICBjaTEgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoImludGVyc2VjdGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2kxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5IChjaTEpLCBOVUxMKTsKLQotICAvKiB3aXRoIGNoYW5nZWQgb3JkZXIgKi8KLSAgY2kyID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjMSwgYzIpOwotICBHU1RfREVCVUcgKCJpbnRlcnNlY3RlZDogJSIgR1NUX1BUUl9GT1JNQVQsIGNpMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lbXB0eSAoY2kyKSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjaTEsIGNpMikpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjaTEpOwotICBnc3RfY2Fwc191bnJlZiAoY2kyKTsKLQotICBnc3RfY2Fwc191bnJlZiAoYzEpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIC8qID09PT09PT09PT0gKi8KLQotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0yMCIpOwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcyLGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9MjAiKTsKLQotICBjaTEgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoImludGVyc2VjdGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2kxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5IChjaTEpLCBOVUxMKTsKLQotICAvKiB3aXRoIGNoYW5nZWQgb3JkZXIgKi8KLSAgY2kyID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjMSwgYzIpOwotICBHU1RfREVCVUcgKCJpbnRlcnNlY3RlZDogJSIgR1NUX1BUUl9GT1JNQVQsIGNpMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lbXB0eSAoY2kyKSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjaTEsIGNpMikpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjaTEpOwotICBnc3RfY2Fwc191bnJlZiAoY2kyKTsKLQotICBnc3RfY2Fwc191bnJlZiAoYzEpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIC8qID09PT09PT09PT0gKi8KLQotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0yMCIpOwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCxoZWlnaHQ9MzAiKTsKLQotICBjaTEgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGMyLCBjMSk7Ci0gIEdTVF9ERUJVRyAoImludGVyc2VjdGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2kxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjaTEpID09IDEsIE5VTEwpOwotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2kxLCAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJ2aWRlby94LXJhdyIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZm9ybWF0IikgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgIndpZHRoIikgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImhlaWdodCIpICE9IE5VTEwpOwotCi0gIC8qIHdpdGggY2hhbmdlZCBvcmRlciAqLwotICBjaTIgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGMxLCBjMik7Ci0gIEdTVF9ERUJVRyAoImludGVyc2VjdGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2kyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjaTIpID09IDEsIE5VTEwpOwotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2kyLCAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJ2aWRlby94LXJhdyIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZm9ybWF0IikgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImhlaWdodCIpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJ3aWR0aCIpICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoY2kxLCBjaTIpKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2kxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNpMik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcnNlY3QyKQotewotICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyLCAqaWNhcHM7Ci0KLSAgLyogdGVzdHMgYXJyYXkgc3VidHJhY3Rpb24gKi8KLSAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAiY2hhbm5lbC1wb3NpdGlvbnM9KGludCk8ICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICJ7IDEsIDIsIDMsIDQsIDUsIDYgfSwgICAgICAgICAgICAgICAgICAgICAgICAgIgotICAgICAgInsgMSwgMiwgMywgNCwgNSwgNiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAiCi0gICAgICAieyAxLCAyLCAzLCA0LCA1LCA2IH0sICAgICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICJ7IDEsIDIsIDMsIDQsIDUsIDYgfSwgICAgICAgICAgICAgICAgICAgICAgICAgIgotICAgICAgInsgMSwgMiwgMywgNCwgNSwgNiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAiICJ7IDEsIDIsIDMsIDQsIDUsIDYgfT4iKTsKLSAgY2FwczIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAiY2hhbm5lbC1wb3NpdGlvbnM9KGludCk8IDEsIDIsIDMsIDQsIDUsIDYgPiIpOwotICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwczEsIGNhcHMyKTsKLSAgR1NUX0xPRyAoImludGVyc2VjdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpY2Fwcyk7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChpY2FwcykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGljYXBzLCBjYXBzMikpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICBnc3RfY2Fwc191bnJlZiAoaWNhcHMpOwotCi0gIC8qID09PT09ICovCi0KLSAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvdHlwZSwgZm9vPShpbnQpPCB7IDEsIDIgfSwgeyAzLCA0fSA+Iik7Ci0gIGNhcHMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL3R5cGUsIGZvbz0oaW50KTwgMSwgMyA+Iik7Ci0gIGljYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjYXBzMSwgY2FwczIpOwotICBHU1RfTE9HICgiaW50ZXJzZWN0ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGljYXBzKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGljYXBzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoaWNhcHMsIGNhcHMyKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0gIGdzdF9jYXBzX3VucmVmIChpY2Fwcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW50ZXJzZWN0X2xpc3RfZHVwbGljYXRlKQotewotICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyLCAqaWNhcHM7Ci0KLSAgLyogbWFrZSBzdXJlIHdlIGRvbid0IHRha2UgdG9vIGxvbmcgdG8gaW50ZXJzZWN0IHRoZXNlLi4gKi8KLSAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVjEyOyAiCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjA7IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVVkyOyAiCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVVZVlk7ICIKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBJNDIwLCBZVjEyLCBZVVkyLCBVWVZZLCBBWVVWLCBSR0J4LCBCR1J4LCIKLSAgICAgICIgeFJHQiwgeEJHUiwgeyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSwgIgotICAgICAgInsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0gfSwgeyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSwgIgotICAgICAgInsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0gfSB9LCB7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9LCAiCi0gICAgICAieyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSB9LCB7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9LCAiCi0gICAgICAieyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSB9IH0gfSwgeyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSwgIgotICAgICAgInsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0gfSwgeyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSwgIgotICAgICAgInsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0gfSB9LCB7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9LCAiCi0gICAgICAieyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSB9LCB7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9LCAiCi0gICAgICAieyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSB9IH0gfSB9IH0sIEJHUkEsIEFSR0IsIHsgQUJHUiwgQUJHUiwgIgotICAgICAgInsgQUJHUiwgQUJHUiB9LCB7IEFCR1IsIEFCR1IsIHsgQUJHUiwgQUJHUiB9IH0sICIKLSAgICAgICJ7IEFCR1IsIEFCR1IsIHsgQUJHUiwgQUJHUiB9LCB7IEFCR1IsIEFCR1IsIHsgQUJHUiwgQUJHUiB9IH0gfSwgIgotICAgICAgInsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0sIHsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0gfSwgIgotICAgICAgInsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0sIHsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0gfSB9IH0sICIKLSAgICAgICJ7IEFCR1IsIEFCR1IsIHsgQUJHUiwgQUJHUiB9LCB7IEFCR1IsIEFCR1IsIHsgQUJHUiwgQUJHUiB9IH0sICIKLSAgICAgICJ7IEFCR1IsIEFCR1IsIHsgQUJHUiwgQUJHUiB9LCB7IEFCR1IsIEFCR1IsIHsgQUJHUiwgQUJHUiB9IH0gfSwgIgotICAgICAgInsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0sIHsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0gfSwgIgotICAgICAgInsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0sIHsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0gfSB9IH0gfSB9LCAiCi0gICAgICAiUkdCLCBCR1IsIFk0MUIsIFk0MkIsIFlWWVUsIFk0NDQgfTsgIgotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEk0MjAsIFlWMTIsIFlVWTIsIFVZVlksIEFZVVYsIFJHQngsIEJHUngsICIKLSAgICAgICJ4UkdCLCB4QkdSLCB7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9LCAiCi0gICAgICAieyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSB9LCB7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9LCAiCi0gICAgICAieyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSB9IH0sIHsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0sICIKLSAgICAgICJ7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9IH0sIHsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0sICIKLSAgICAgICJ7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9IH0gfSB9LCB7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9LCAiCi0gICAgICAieyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSB9LCB7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9LCAiCi0gICAgICAieyBSR0JBLCBSR0JBLCB7IFJHQkEsIFJHQkEgfSB9IH0sIHsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0sICIKLSAgICAgICJ7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9IH0sIHsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0sICIKLSAgICAgICJ7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9IH0gfSB9IH0gfSwgQkdSQSwgQVJHQiwgIgotICAgICAgInsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0sIHsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0gfSwgIgotICAgICAgInsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0sIHsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0gfSB9LCAiCi0gICAgICAieyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSwgeyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSB9LCAiCi0gICAgICAieyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSwgeyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSB9IH0gfSwgIgotICAgICAgInsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0sIHsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0gfSwgIgotICAgICAgInsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0sIHsgQUJHUiwgQUJHUiwgeyBBQkdSLCBBQkdSIH0gfSB9LCAiCi0gICAgICAieyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSwgeyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSB9LCAiCi0gICAgICAieyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSwgeyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSB9IH0gfSB9IH0sICIKLSAgICAgICJSR0IsIEJHUiwgWTQxQiwgWTQyQiwgWVZZVSwgWTQ0NCwgTlYxMiwgTlYyMSB9OyAiCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiwgWVVZMiwgVVlWWSwgQVlVViwgUkdCeCwgIgotICAgICAgIkJHUngsIHhSR0IsIHhCR1IsIHsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0sICIKLSAgICAgICJ7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9IH0sIHsgUkdCQSwgUkdCQSwgeyBSR0JBLCBSR0JBIH0sICIKLSAgICAgICJ7IFJHQkEsIFJHQkEsIHsgUkdCQSwgUkdCQSB9IH0gfSB9LCBCR1JBLCBBUkdCLCAiCi0gICAgICAieyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSwgeyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSB9LCAiCi0gICAgICAieyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSwgeyBBQkdSLCBBQkdSLCB7IEFCR1IsIEFCR1IgfSB9IH0gfSwgIgotICAgICAgIlJHQiwgQkdSLCBZNDFCLCBZNDJCLCBZVllVLCBZNDQ0LCBOVjEyLCBOVjIxIH0iKTsKLQotICBjYXBzMiA9IGdzdF9jYXBzX2NvcHkgKGNhcHMxKTsKLQotICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwczEsIGNhcHMyKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICBnc3RfY2Fwc191bnJlZiAoaWNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ludGVyc2VjdF96aWd6YWcpCi17Ci0gIEdzdENhcHMgKmNhcHMxLCAqY2FwczIsICppY2FwcywgKnJlc3VsdDsKLQotICAvKiB0ZXN0cyBpZiBjYXBzIG9yZGVyIGlzIG1haW50YWluZWQgKi8KLSAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvcm1hdC9BOyBmb3JtYXQvQjsgZm9ybWF0L0M7IGZvcm1hdC9EIik7Ci0gIGNhcHMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb3JtYXQvRDsgZm9ybWF0L0E7IGZvcm1hdC9COyBmb3JtYXQvQyIpOwotCi0gIGljYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGNhcHMxLCBjYXBzMiwgR1NUX0NBUFNfSU5URVJTRUNUX1pJR19aQUcpOwotICByZXN1bHQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvcm1hdC9COyBmb3JtYXQvQTsgZm9ybWF0L0Q7IGZvcm1hdC9DIik7Ci0gIEdTVF9MT0cgKCJpbnRlcnNlY3RlZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgaWNhcHMpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19lbXB0eSAoaWNhcHMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpY2FwcywgcmVzdWx0KSk7Ci0gIGdzdF9jYXBzX3VucmVmIChpY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChyZXN1bHQpOwotCi0gIGljYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGNhcHMyLCBjYXBzMSwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgcmVzdWx0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb3JtYXQvQTsgZm9ybWF0L0I7IGZvcm1hdC9EOyBmb3JtYXQvQyIpOwotICBHU1RfTE9HICgiaW50ZXJzZWN0ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGljYXBzKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGljYXBzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoaWNhcHMsIHJlc3VsdCkpOwotICBnc3RfY2Fwc191bnJlZiAoaWNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAocmVzdWx0KTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW50ZXJzZWN0X2ZpcnN0KQotewotICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyLCAqaWNhcHMsICpyZXN1bHQ7Ci0KLSAgLyogdGVzdHMgaWYgY2FwcyBvcmRlciBpcyBtYWludGFpbmVkICovCi0gIGNhcHMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb3JtYXQvQTsgZm9ybWF0L0I7IGZvcm1hdC9DOyBmb3JtYXQvRCIpOwotICBjYXBzMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9ybWF0L0M7IGZvcm1hdC9EOyBmb3JtYXQvQSIpOwotICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzMSwgY2FwczIsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gIHJlc3VsdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9ybWF0L0E7IGZvcm1hdC9DOyBmb3JtYXQvRCIpOwotICBHU1RfTE9HICgiaW50ZXJzZWN0ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGljYXBzKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGljYXBzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoaWNhcHMsIHJlc3VsdCkpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICBnc3RfY2Fwc191bnJlZiAoaWNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAocmVzdWx0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ludGVyc2VjdF9maXJzdDIpCi17Ci0gIEdzdENhcHMgKmNhcHMxLCAqY2FwczIsICppY2FwcywgKnJlc3VsdDsKLQotICAvKiB0ZXN0cyBpZiBjYXBzIG9yZGVyIGlzIG1haW50YWluZWQgKi8KLSAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvcm1hdC9BOyBmb3JtYXQvQjsgZm9ybWF0L0M7IGZvcm1hdC9EIik7Ci0gIGNhcHMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb3JtYXQvRDsgZm9ybWF0L0E7IGZvcm1hdC9COyBmb3JtYXQvQyIpOwotCi0gIGljYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGNhcHMxLCBjYXBzMiwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgcmVzdWx0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb3JtYXQvQTsgZm9ybWF0L0I7IGZvcm1hdC9DOyBmb3JtYXQvRCIpOwotICBHU1RfTE9HICgiaW50ZXJzZWN0ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGljYXBzKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGljYXBzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoaWNhcHMsIHJlc3VsdCkpOwotICBnc3RfY2Fwc191bnJlZiAoaWNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAocmVzdWx0KTsKLQotICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzMiwgY2FwczEsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gIHJlc3VsdCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9ybWF0L0Q7IGZvcm1hdC9BOyBmb3JtYXQvQjsgZm9ybWF0L0MiKTsKLSAgR1NUX0xPRyAoImludGVyc2VjdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpY2Fwcyk7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChpY2FwcykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGljYXBzLCByZXN1bHQpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGljYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHJlc3VsdCk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcnNlY3RfZHVwbGljYXRpb24pCi17Ci0gIEdzdENhcHMgKmMxLCAqYzIsICp0ZXN0OwotCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgiYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMxNl9MRSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdIik7Ci0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgiYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKSB7IFMxNl9MRSwgUzE2X0JFLCBVMTZfTEUsIFUxNl9CRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF07IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZykgeyBTMTZfTEUsIFMxNl9CRSwgVTE2X0xFLCBVMTZfQkUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMTEgXTsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKSB7IFMxNl9MRSwgUzE2X0JFLCBVMTZfTEUsIFUxNl9CRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAxMSBdIik7Ci0KLSAgdGVzdCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjMSwgYzIsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9jYXBzX2dldF9zaXplICh0ZXN0KSwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzEsIHRlc3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ludGVyc2VjdF9mbGFnc2V0KQotewotICBHc3RDYXBzICpjMSwgKmMyLCAqdGVzdDsKLSAgR1R5cGUgdGVzdF9mbGFnc2V0X3R5cGU7Ci0gIEdzdFNlZWtGbGFncyB0ZXN0X2ZsYWdzLCB0ZXN0X21hc2s7Ci0gIGdjaGFyICp0ZXN0X3N0cmluZzsKLQotICAvKiBUZXN0IHRoYXQgbWF0Y2hpbmcgYml0cyBpbnNpZGUgdGhlIG1hc2sgaW50ZXJzZWN0LAotICAgKiBhbmQgYml0cyBvdXRzaWRlIHRoZSBtYXNrIGRvbid0IG1hdHRlciAqLwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidGVzdC94LWNhcHMsZmllbGQ9ZmZkODFkOmZmZmZmMCIpOwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidGVzdC94LWNhcHMsZmllbGQ9MGZkODFmOjBmZmZmMCIpOwotCi0gIHRlc3QgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoYzEsIGMyLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfY2Fwc19nZXRfc2l6ZSAodGVzdCksIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMxLCB0ZXN0KSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKLQotICAvKiBUZXN0IHRoYXQgbm9uLW1hdGNoaW5nIGJpdHMgaW4gdGhlIG1hc2sgZG9uJ3QgaW50ZXJzZWN0ICovCi0gIGMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L3gtY2FwcyxmaWVsZD1mZjAwMWQ6MGZmZmYwIik7Ci0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L3gtY2FwcyxmaWVsZD0wZmQ4MWY6MGZmZmYwIik7Ci0KLSAgdGVzdCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjMSwgYzIsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lbXB0eSAodGVzdCkpOwotICBnc3RfY2Fwc191bnJlZiAoYzEpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotICBnc3RfY2Fwc191bnJlZiAodGVzdCk7Ci0KLSAgLyogQ2hlY2sgY3VzdG9tIGZsYWdzIHR5cGUgc2VyaWFsaXNhdGlvbiBhbmQgZGUtc2VyaWFsaXNhdGlvbiAqLwotICB0ZXN0X2ZsYWdzZXRfdHlwZSA9IGdzdF9mbGFnc2V0X3JlZ2lzdGVyIChHU1RfVFlQRV9TRUVLX0ZMQUdTKTsKLSAgZmFpbF91bmxlc3MgKGdfdHlwZV9pc19hICh0ZXN0X2ZsYWdzZXRfdHlwZSwgR1NUX1RZUEVfRkxBR19TRVQpKTsKLQotICB0ZXN0X2ZsYWdzID0KLSAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX1RSSUNLTU9ERSB8Ci0gICAgICBHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFM7Ci0gIHRlc3RfbWFzayA9Ci0gICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19UUklDS01PREUgfAotICAgICAgR1NUX1NFRUtfRkxBR19UUklDS01PREVfTk9fQVVESU87Ci0KLSAgYzEgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidGVzdC94LWNhcHMiLCAiZmllbGQiLCB0ZXN0X2ZsYWdzZXRfdHlwZSwKLSAgICAgIHRlc3RfZmxhZ3MsIHRlc3RfbWFzaywgTlVMTCk7Ci0KLSAgdGVzdF9zdHJpbmcgPSBnc3RfY2Fwc190b19zdHJpbmcgKGMxKTsKLSAgZmFpbF9pZiAodGVzdF9zdHJpbmcgPT0gTlVMTCk7Ci0KLSAgR1NUX0RFQlVHICgiU2VyaWFsaXNlZCBjYXBzIHRvICVzIiwgdGVzdF9zdHJpbmcpOwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICh0ZXN0X3N0cmluZyk7Ci0gIGdfZnJlZSAodGVzdF9zdHJpbmcpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzEsIGMyKSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF91bmlvbikKLXsKLSAgR3N0Q2FwcyAqYzEsICpjMiwgKnRlc3QsICpleHBlY3Q7Ci0KLSAgLyogVGVzdCB0aGF0IG1hdGNoaW5nIGJpdHMgaW5zaWRlIHRoZSBtYXNrcyB1bmlvbiBPSywgKi8KLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInRlc3QveC1jYXBzLGZpZWxkPWZmZDgxZDowZmZmZjAiKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInRlc3QveC1jYXBzLGZpZWxkPTBmZDgxZjowZmZmZjAiKTsKLQotICB0ZXN0ID0gZ3N0X2NhcHNfbWVyZ2UgKGMxLCBjMik7Ci0gIHRlc3QgPSBnc3RfY2Fwc19zaW1wbGlmeSAodGVzdCk7Ci0gIC8qIGMxLCBjMiBub3cgaW52YWxpZCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfY2Fwc19nZXRfc2l6ZSAodGVzdCksIDEpOwotICBnc3RfY2Fwc191bnJlZiAodGVzdCk7Ci0KLSAgLyogVGVzdCB0aGF0IG5vbi1pbnRlcnNlY3Rpbmcgc2V0cyBvZiBtYXNrZWQgYml0cyBhcmUgT0sgKi8KLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInRlc3QveC1jYXBzLGZpZWxkPWZmMDAxZDowZmZmZjAiKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInRlc3QveC1jYXBzLGZpZWxkPTRmZDgxZjpmMDAwMDAiKTsKLSAgZXhwZWN0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L3gtY2FwcyxmaWVsZD00ZjAwMWQ6ZmZmZmYwIik7Ci0gIHRlc3QgPSBnc3RfY2Fwc19zaW1wbGlmeSAoZ3N0X2NhcHNfbWVyZ2UgKGMxLCBjMikpOwotICAvKiBjMSwgYzIgbm93IGludmFsaWQgKi8KLSAgR1NUX0xPRyAoIkV4cGVjdGVkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiBnb3QgJSIgR1NUX1BUUl9GT1JNQVQgIlxuIiwKLSAgICAgIGV4cGVjdCwgdGVzdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAodGVzdCwgZXhwZWN0KSk7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZXN0KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGV4cGVjdCk7Ci0KLSAgLyogVGVzdCB0aGF0IHBhcnRpYWxseS1pbnRlcnNlY3Rpbmcgc2V0cyBvZiBtYXNrZWQgYml0cyB0aGF0IG1hdGNoIGFyZSBPSyAqLwotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidGVzdC94LWNhcHMsZmllbGQ9ZmYwMDFkOjBmZmZmMCIpOwotICBjMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidGVzdC94LWNhcHMsZmllbGQ9NGZkODFmOmZmMDAwMCIpOwotICBleHBlY3QgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInRlc3QveC1jYXBzLGZpZWxkPTRmMDAxZDpmZmZmZjAiKTsKLSAgdGVzdCA9IGdzdF9jYXBzX3NpbXBsaWZ5IChnc3RfY2Fwc19tZXJnZSAoYzEsIGMyKSk7Ci0gIC8qIGMxLCBjMiBub3cgaW52YWxpZCAqLwotICBHU1RfTE9HICgiRXhwZWN0ZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiIGdvdCAlIiBHU1RfUFRSX0ZPUk1BVCAiXG4iLAotICAgICAgZXhwZWN0LCB0ZXN0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsICh0ZXN0LCBleHBlY3QpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlc3QpOwotICBnc3RfY2Fwc191bnJlZiAoZXhwZWN0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLV9jYXBzX2lzX2ZpeGVkX2ZvcmVhY2ggKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIGdwb2ludGVyIHVudXNlZCkKLXsKLSAgcmV0dXJuIGdzdF92YWx1ZV9pc19maXhlZCAodmFsdWUpOwotfQotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vcm1hbGl6ZSkKLXsKLSAgR3N0Q2FwcyAqaW4sICpub3JtLCAqb3V0OwotICBndWludCBpOwotCi0gIGluID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL3R5cGUsIGZvbz0oaW50KXsgMSAsIDIgfSIpOwotICBvdXQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvdHlwZSwgZm9vPShpbnQpIDE7IHNvbWUvdHlwZSwgZm9vPShpbnQpIDIiKTsKLSAgbm9ybSA9IGdzdF9jYXBzX25vcm1hbGl6ZSAoaW4pOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19lbXB0eSAobm9ybSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKG5vcm0sIG91dCkpOwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKG5vcm0pOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAobm9ybSwgaSk7Ci0gICAgLyogTWFrZSBzdXJlIGFsbCBmaWVsZHMgb2YgYWxsIHN0cnVjdHVyZXMgYXJlIGZpeGVkICovCi0gICAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoc3QsIF9jYXBzX2lzX2ZpeGVkX2ZvcmVhY2gsIE5VTEwpKTsKLSAgfQotCi0gIGdzdF9jYXBzX3VucmVmIChvdXQpOwotICBnc3RfY2Fwc191bnJlZiAobm9ybSk7Ci0KLSAgaW4gPSBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJzb21lL3R5cGUsIGZvbz0oaW50KXsgMSAsIDIgfSwgYmFyPShpbnQpeyAzLCA0IH0iKTsKLSAgb3V0ID0KLSAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nCi0gICAgICAoInNvbWUvdHlwZSwgZm9vPShpbnQpIDEsIGJhcj0oaW50KSAzOyBzb21lL3R5cGUsIGZvbz0oaW50KSAyLCBiYXI9KGludCkgMzsiCi0gICAgICAic29tZS90eXBlLCBmb289KGludCkgMSwgYmFyPShpbnQpIDQ7IHNvbWUvdHlwZSwgZm9vPShpbnQpIDIsIGJhcj0oaW50KSA0OyIpOwotICBub3JtID0gZ3N0X2NhcHNfbm9ybWFsaXplIChpbik7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChub3JtKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAobm9ybSwgb3V0KSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAobm9ybSk7IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqc3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChub3JtLCBpKTsKLSAgICAvKiBNYWtlIHN1cmUgYWxsIGZpZWxkcyBvZiBhbGwgc3RydWN0dXJlcyBhcmUgZml4ZWQgKi8KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzdCwgX2NhcHNfaXNfZml4ZWRfZm9yZWFjaCwgTlVMTCkpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKG91dCk7Ci0gIGdzdF9jYXBzX3VucmVmIChub3JtKTsKLQotICBpbiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nCi0gICAgICAoInNvbWUvdHlwZSwgZm9vPShzdHJpbmcpeyAxICwgMiB9LCBiYXI9KHN0cmluZykgeyAzIH0iKTsKLSAgb3V0ID0KLSAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nCi0gICAgICAoInNvbWUvdHlwZSwgZm9vPShzdHJpbmcpIDEsIGJhcj0oc3RyaW5nKSAzOyBzb21lL3R5cGUsIGZvbz0oc3RyaW5nKSAyLCBiYXI9KHN0cmluZykgMyIpOwotICBub3JtID0gZ3N0X2NhcHNfbm9ybWFsaXplIChpbik7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChub3JtKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAobm9ybSwgb3V0KSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAobm9ybSk7IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqc3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChub3JtLCBpKTsKLSAgICAvKiBNYWtlIHN1cmUgYWxsIGZpZWxkcyBvZiBhbGwgc3RydWN0dXJlcyBhcmUgZml4ZWQgKi8KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzdCwgX2NhcHNfaXNfZml4ZWRfZm9yZWFjaCwgTlVMTCkpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKG91dCk7Ci0gIGdzdF9jYXBzX3VucmVmIChub3JtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9icm9rZW4pCi17Ci0gIEdzdENhcHMgKmMxOwotCi0gIC8qIE5VTEwgaXMgbm90IHZhbGlkIGZvciBtZWRpYV90eXBlICovCi0gIEFTU0VSVF9DUklUSUNBTCAoYzEgPQotICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoTlVMTCwgImZpZWxkIiwgR19UWVBFX0lOVCwgMSwgTlVMTCkpOwotICBmYWlsX2lmIChjMSk7Ci0KLSNpZm5kZWYgR19ESVNBQkxFX0NIRUNLUwotICAvKiBzdWNoIGEgbmFtZSBpcyBub3QgdmFsaWQsIHNlZSBnc3Rfc3RydWN0dXJlX3ZhbGlkYXRlX25hbWUoKSAqLwotICBBU1NFUlRfQ1JJVElDQUwgKGMxID0KLSAgICAgIGdzdF9jYXBzX25ld19zaW1wbGUgKCIxI0BhYmMiLCAiZmllbGQiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKSk7Ci0gIGZhaWxfaWYgKGMxKTsKLSNlbmRpZgotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZlYXR1cmVzKQotewotICBHc3RDYXBzICpjMSwgKmMyLCAqYzM7Ci0gIEdzdFN0cnVjdHVyZSAqczEsICpzMjsKLSAgR3N0Q2Fwc0ZlYXR1cmVzICpmMSwgKmYyOwotICBnY2hhciAqc3RyMTsKLSAgc3RhdGljIEdzdFN0YXRpY0NhcHMgc2NhcHMgPQotICAgICAgR1NUX1NUQVRJQ19DQVBTCi0gICAgICAoInZpZGVvL3gtcmF3KG1lbW9yeTpFR0xJbWFnZSksIHdpZHRoPTMyMCwgaGVpZ2h0PVsgMjQwLCAyNjAgXSIpOwotCi0gIGMxID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmYWlsX3VubGVzcyAoYzEgIT0gTlVMTCk7Ci0gIHMxID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2aWRlby94LXJhdyIsICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDMyMCwgImhlaWdodCIsCi0gICAgICBHU1RfVFlQRV9JTlRfUkFOR0UsIDI0MCwgMjYwLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHMxICE9IE5VTEwpOwotICBmMSA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ldyAoIm1lbW9yeTpFR0xJbWFnZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZjEgIT0gTlVMTCk7Ci0KLSAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV9mdWxsIChjMSwgczEsIGYxKTsKLSAgczIgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjMSwgMCk7Ci0gIGZhaWxfdW5sZXNzIChzMSA9PSBzMik7Ci0gIGYyID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzIChjMSwgMCk7Ci0gIGZhaWxfdW5sZXNzIChmMSA9PSBmMik7Ci0KLSAgc3RyMSA9IGdzdF9jYXBzX3RvX3N0cmluZyAoYzEpOwotICBmYWlsX3VubGVzcyAoc3RyMSAhPSBOVUxMKTsKLSAgYzIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoc3RyMSk7Ci0gIGZhaWxfdW5sZXNzIChjMiAhPSBOVUxMKTsKLSAgZ19mcmVlIChzdHIxKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMxLCBjMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMSwgYzIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzIsIGMxKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChjMSwgYzIpKTsKLQotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIGMyID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmYWlsX3VubGVzcyAoYzIgIT0gTlVMTCk7Ci0gIHMyID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2aWRlby94LXJhdyIsICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDMyMCwgImhlaWdodCIsCi0gICAgICBHU1RfVFlQRV9JTlRfUkFOR0UsIDI0MCwgMjYwLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHMyICE9IE5VTEwpOwotICBmMiA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ldyAoIm1lbW9yeTpWQVN1cmZhY2UiLCAibWV0YTpWQU1ldGEiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGYyICE9IE5VTEwpOwotICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlX2Z1bGwgKGMyLCBzMiwgZjIpOwotCi0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VxdWFsIChjMSwgYzIpKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMSwgYzIpKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMiwgYzEpKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoYzEsIGMyKSk7Ci0KLSAgc3RyMSA9IGdzdF9jYXBzX3RvX3N0cmluZyAoYzIpOwotICBmYWlsX3VubGVzcyAoc3RyMSAhPSBOVUxMKTsKLSAgYzMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoc3RyMSk7Ci0gIGZhaWxfdW5sZXNzIChjMyAhPSBOVUxMKTsKLSAgZ19mcmVlIChzdHIxKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMyLCBjMykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMiwgYzMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzMsIGMyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChjMiwgYzMpKTsKLQotICBmMSA9IGdzdF9jYXBzX2dldF9mZWF0dXJlcyAoYzMsIDApOwotICBmYWlsX3VubGVzcyAoZjEgIT0gTlVMTCk7Ci0gIGZhaWxfaWYgKGYxID09IGYyKTsKLSAgZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnMgKGYxLCAibWVtb3J5OlZBU3VyZmFjZSIpOwotICBnc3RfY2Fwc19mZWF0dXJlc19yZW1vdmUgKGYxLCAibWVtb3J5OlZBU3VyZmFjZSIpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19lcXVhbCAoYzIsIGMzKSk7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzIsIGMzKSk7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX3N1YnNldCAoYzMsIGMyKSk7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGMyLCBjMykpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjMyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0KLSAgYzIgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmc2NhcHMpOwotICBmYWlsX3VubGVzcyAoYzIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYzEsIGMyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdWJzZXQgKGMxLCBjMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMiwgYzEpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGMxLCBjMikpOwotICBnc3RfY2Fwc191bnJlZiAoYzIpOwotCi0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgidmlkZW8veC1yYXcoQU5ZKSwgd2lkdGg9MzIwLCBoZWlnaHQ9WyAyNDAsIDI2MCBdIik7Ci0gIGZhaWxfdW5sZXNzIChjMiAhPSBOVUxMKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMxLCBjMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMSwgYzIpKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfc3Vic2V0IChjMiwgYzEpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGMxLCBjMikpOwotCi0gIGMzID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjMSwgYzIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGMzLCBjMSkpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjMyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjMik7Ci0gIGdzdF9jYXBzX3VucmVmIChjMSk7Ci0KLSAgYzEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3Iik7Ci0gIGMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LXJhdyIpOwotCi0gIGYxID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzIChjMSwgMCk7Ci0gIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoZjEsICJtZW1vcnk6VkFTdXJmYWNlIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChmMSwgZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzIChjMSwgMCkpKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoYzEsIGMyKSk7Ci0KLSAgZjIgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXMgKGMyLCAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsCi0gICAgICAoR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlksIGYyKSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMxKTsKLQotICBjMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXciKTsKLSAgZjEgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXMgKGMxLCAwKTsKLSAgZjIgPSBnc3RfY2Fwc19mZWF0dXJlc19uZXcgKCJtZW1vcnk6ZG1hYnVmIiwgTlVMTCk7Ci0gIGdzdF9jYXBzX3NldF9mZWF0dXJlcyAoYzEsIDAsIGYyKTsKLQotICBnc3RfY2Fwc191bnJlZiAoYzEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NwZWNpYWxfY2FwcykKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSA9PSBUUlVFKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSA9PSBGQUxTRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19hbnkgKGNhcHMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykgPT0gRkFMU0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSA9PSBUUlVFKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yZWFjaF9hcHBlbmRfZnVuY3Rpb24gKEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzLCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RDYXBzICpjYXBzID0gdXNlcl9kYXRhOwotCi0gIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfZnVsbCAoY2FwcywgZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpLAotICAgICAgZmVhdHVyZXMgPyBnc3RfY2Fwc19mZWF0dXJlc19jb3B5IChmZWF0dXJlcykgOiBOVUxMKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZm9yZWFjaCkKLXsKLSAgR3N0Q2FwcyAqY2FwcywgKmNhcHMyOwotCi0gIGNhcHMgPQotICAgICAgZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwOyB2aWRlby94LXJhdyhmb286YmFyKTsgdmlkZW8veC1oMjY0Iik7Ci0gIGNhcHMyID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZm9yZWFjaCAoY2FwcywgZm9yZWFjaF9hcHBlbmRfZnVuY3Rpb24sIGNhcHMyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdHJpY3RseV9lcXVhbCAoY2FwcywgY2FwczIpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGNhcHMyID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZm9yZWFjaCAoY2FwcywgZm9yZWFjaF9hcHBlbmRfZnVuY3Rpb24sIGNhcHMyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19zdHJpY3RseV9lcXVhbCAoY2FwcywgY2FwczIpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotbWFwX2Z1bmN0aW9uIChHc3RDYXBzRmVhdHVyZXMgKiBmZWF0dXJlcywgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgLyogUmVtb3ZlIGNhcHMgZmVhdHVyZXMgaWYgdGhlcmUgYXJlIGFueSwgb3RoZXJ3aXNlIGFkZCBzb21lIGR1bW15ICovCi0gIGlmIChnc3RfY2Fwc19mZWF0dXJlc19jb250YWlucyAoZmVhdHVyZXMsICJmb286YmFyIikpIHsKLSAgICBnc3RfY2Fwc19mZWF0dXJlc19yZW1vdmUgKGZlYXR1cmVzLCAiZm9vOmJhciIpOwotICB9IGVsc2UgewotICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoZmVhdHVyZXMsICJmb286YmFyIik7Ci0gICAgZ3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlIChmZWF0dXJlcywgR1NUX0NBUFNfRkVBVFVSRV9NRU1PUllfU1lTVEVNX01FTU9SWSk7Ci0gIH0KLQotICAvKiBTZXQgc29tZSBkdW1teSBpbnRlZ2VyIGluIHRoZSBzdHJ1Y3R1cmUgKi8KLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgImZvbyIsIEdfVFlQRV9JTlQsIDEyMywgTlVMTCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21hcF9pbl9wbGFjZSkKLXsKLSAgR3N0Q2FwcyAqY2FwcywgKmNhcHMyOwotCi0gIGNhcHMgPQotICAgICAgZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwOyB2aWRlby94LXJhdyhmb286YmFyKTsgdmlkZW8veC1oMjY0Iik7Ci0gIGNhcHMyID0KLSAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nCi0gICAgICAoInZpZGVvL3gtcmF3KGZvbzpiYXIpLCBmb289KGludCkxMjMsIGZvcm1hdD1JNDIwOyB2aWRlby94LXJhdywgZm9vPShpbnQpMTIzOyB2aWRlby94LWgyNjQoZm9vOmJhciksIGZvbz0oaW50KTEyMyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfbWFwX2luX3BsYWNlIChjYXBzLCBtYXBfZnVuY3Rpb24sIE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX3N0cmljdGx5X2VxdWFsIChjYXBzLCBjYXBzMikpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgY2FwczIgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19tYXBfaW5fcGxhY2UgKGNhcHMsIG1hcF9mdW5jdGlvbiwgTlVMTCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3RyaWN0bHlfZXF1YWwgKGNhcHMsIGNhcHMyKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZpbHRlcl9tYXBfZnVuY3Rpb24gKEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzLCBHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgInZpZGVvL3gtcmF3IikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnMgKGZlYXR1cmVzLCAiZm9vOmJhciIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBTZXQgc29tZSBkdW1teSBpbnRlZ2VyIGluIHRoZSBzdHJ1Y3R1cmUgKi8KLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgImZvbyIsIEdfVFlQRV9JTlQsIDEyMywgTlVMTCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlKQotewotICBHc3RDYXBzICpjYXBzLCAqY2FwczI7Ci0KLSAgY2FwcyA9Ci0gICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjA7IHZpZGVvL3gtcmF3KGZvbzpiYXIpOyB2aWRlby94LWgyNjQiKTsKLSAgY2FwczIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3KGZvbzpiYXIpLCBmb289KGludCkxMjMiKTsKLSAgZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UgKGNhcHMsIGZpbHRlcl9tYXBfZnVuY3Rpb24sIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3RyaWN0bHlfZXF1YWwgKGNhcHMsIGNhcHMyKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjA7IHZpZGVvL3gtaDI2NCIpOwotICBjYXBzMiA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UgKGNhcHMsIGZpbHRlcl9tYXBfZnVuY3Rpb24sIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3RyaWN0bHlfZXF1YWwgKGNhcHMsIGNhcHMyKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBjYXBzMiA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgZ3N0X2NhcHNfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UgKGNhcHMsIGZpbHRlcl9tYXBfZnVuY3Rpb24sIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfc3RyaWN0bHlfZXF1YWwgKGNhcHMsIGNhcHMyKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2NhcHNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0Q2FwcyIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJvcGVyYXRpb25zIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mcm9tX3N0cmluZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kb3VibGVfYXBwZW5kKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X211dGFiaWxpdHkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RhdGljX2NhcHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2ltcGxpZnkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHJ1bmNhdGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3Vic2V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N1YnNldF9kdXBsaWNhdGlvbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tZXJnZV9mdW5kYW1lbnRhbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tZXJnZV9zYW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lcmdlX3N1YnNldCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcnNlY3QpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJzZWN0Mik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcnNlY3RfbGlzdF9kdXBsaWNhdGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJzZWN0X3ppZ3phZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcnNlY3RfZmlyc3QpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJzZWN0X2ZpcnN0Mik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcnNlY3RfZHVwbGljYXRpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJzZWN0X2ZsYWdzZXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdW5pb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm9ybWFsaXplKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Jyb2tlbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mZWF0dXJlcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zcGVjaWFsX2NhcHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZm9yZWFjaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXBfaW5fcGxhY2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2NhcHMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHNmZWF0dXJlcy5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGNhcHNmZWF0dXJlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Zjc2YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RjYXBzZmVhdHVyZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogICBBdXRob3I6IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIGdzdGNhcHNmZWF0dXJlcy5jOiBVbml0IHRlc3QgZm9yIEdzdENhcHNGZWF0dXJlcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Y2Fwc2ZlYXR1cmVzLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Jhc2ljX29wZXJhdGlvbnMpCi17Ci0gIEdzdENhcHNGZWF0dXJlcyAqYSwgKmI7Ci0KLSAgYSA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ldyAoIm06YWJjIiwgIm06ZGVmIiwgIm06Z2hpIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChhICE9IE5VTEwpOwotICBiID0gZ3N0X2NhcHNfZmVhdHVyZXNfY29weSAoYSk7Ci0gIGZhaWxfdW5sZXNzIChiICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGEsIGIpKTsKLSAgZmFpbF9pZiAoZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGEsCi0gICAgICAgICAgR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlkpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3NpemUgKGEpLCAzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aCAoYSwgMSksICJtOmRlZiIpOwotICBnc3RfY2Fwc19mZWF0dXJlc19hZGQgKGIsICJtOmprbCIpOwotICBmYWlsX2lmIChnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbCAoYSwgYikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfY2Fwc19mZWF0dXJlc19nZXRfc2l6ZSAoYiksIDQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoIChiLCAzKSwgIm06amtsIik7Ci0gIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoYiwgIm06amtsIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9jYXBzX2ZlYXR1cmVzX2dldF9zaXplIChiKSwgNCk7Ci0KLSAgZ3N0X2NhcHNfZmVhdHVyZXNfcmVtb3ZlIChiLCAibTpqa2wiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChhLCBiKSk7Ci0gIGdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZSAoYiwgIm06YWJjIik7Ci0gIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoYiwgIm06YWJjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbCAoYSwgYikpOwotICBnc3RfY2Fwc19mZWF0dXJlc19yZW1vdmUgKGIsICJtOmFiYyIpOwotICBnc3RfY2Fwc19mZWF0dXJlc19yZW1vdmUgKGIsICJtOmRlZiIpOwotICBnc3RfY2Fwc19mZWF0dXJlc19yZW1vdmUgKGIsICJtOmdoaSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZmVhdHVyZXNfaXNfZXF1YWwgKGIsCi0gICAgICAgICAgR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlkpKTsKLSAgZ3N0X2NhcHNfZmVhdHVyZXNfYWRkIChiLCBHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9TWVNURU1fTUVNT1JZKTsKLQotICBnc3RfY2Fwc19mZWF0dXJlc19mcmVlIChhKTsKLSAgZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZSAoYik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZnJvbV90b19zdHJpbmcpCi17Ci0gIEdzdENhcHNGZWF0dXJlcyAqYSwgKmI7Ci0gIGdjaGFyICpzdHI7Ci0KLSAgYSA9IGdzdF9jYXBzX2ZlYXR1cmVzX25ldyAoIm06YWJjIiwgIm06ZGVmIiwgIm06Z2hpIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChhICE9IE5VTEwpOwotICBzdHIgPSBnc3RfY2Fwc19mZWF0dXJlc190b19zdHJpbmcgKGEpOwotICBmYWlsX3VubGVzcyAoc3RyICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICJtOmFiYywgbTpkZWYsIG06Z2hpIik7Ci0gIGIgPSBnc3RfY2Fwc19mZWF0dXJlc19mcm9tX3N0cmluZyAoc3RyKTsKLSAgZmFpbF91bmxlc3MgKGIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbCAoYSwgYikpOwotICBnc3RfY2Fwc19mZWF0dXJlc19mcmVlIChhKTsKLSAgZ3N0X2NhcHNfZmVhdHVyZXNfZnJlZSAoYik7Ci0gIGdfZnJlZSAoc3RyKTsKLQotICBhID0gZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X2FueSAoKTsKLSAgZmFpbF91bmxlc3MgKGEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGEpKTsKLSAgc3RyID0gZ3N0X2NhcHNfZmVhdHVyZXNfdG9fc3RyaW5nIChhKTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiQU5ZIik7Ci0gIGIgPSBnc3RfY2Fwc19mZWF0dXJlc19mcm9tX3N0cmluZyAoc3RyKTsKLSAgZmFpbF91bmxlc3MgKGIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbCAoYSwgYikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZmVhdHVyZXNfaXNfYW55IChiKSk7Ci0gIGdzdF9jYXBzX2ZlYXR1cmVzX2ZyZWUgKGEpOwotICBnc3RfY2Fwc19mZWF0dXJlc19mcmVlIChiKTsKLSAgZ19mcmVlIChzdHIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfY2Fwc2ZlYXR1cmVzX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdENhcHNGZWF0dXJlcyIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJvcGVyYXRpb25zIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iYXNpY19vcGVyYXRpb25zKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Zyb21fdG9fc3RyaW5nKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9jYXBzZmVhdHVyZXMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdGNoaWxkcHJveHkuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RjaGlsZHByb3h5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YzlkMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdGNoaWxkcHJveHkuYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBnc3RjaGlsZHByb3h5LmM6IFVuaXQgdGVzdCBmb3IgR3N0Q2hpbGRQcm94eSBpbnRlcmZhY2UKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dldCkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIGdjaGFyICpuYW1lOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoImZvbyIpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKLQotICBnc3RfY2hpbGRfcHJveHlfZ2V0IChHU1RfQ0hJTERfUFJPWFkgKHBpcGVsaW5lKSwgIm5hbWUiLCAmbmFtZSwgTlVMTCk7Ci0gIGZhaWxfaWYgKGdfc3RyY21wMCAoImZvbyIsIG5hbWUpKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY2hpbGRfZ2V0KQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmVsZW07Ci0gIGdjaGFyICpuYW1lOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBmYWlsX2lmIChlbGVtID09IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIGZha2VzcmMiKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBlbGVtKTsKLQotICBnc3RfY2hpbGRfcHJveHlfZ2V0IChHU1RfQ0hJTERfUFJPWFkgKHBpcGVsaW5lKSwgInNyYzo6bmFtZSIsICZuYW1lLCBOVUxMKTsKLSAgZmFpbF9pZiAoZ19zdHJjbXAwICgic3JjIiwgbmFtZSkpOwotICBnX2ZyZWUgKG5hbWUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfY2hpbGRfcHJveHlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0Q2hpbGRQcm94eSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJjaGlsZCBwcm94eSB0ZXN0cyIpOwotCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nZXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY2hpbGRfZ2V0KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9jaGlsZF9wcm94eSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0Y2xvY2suYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RjbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzJiYmM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RjbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogSW5jbHVkZSB0aGUgbm9uLXB1YmxpYyBsaW5lYXIgcmVncmVzc2lvbiBmdW5jdGlvbiAqLwotI2luY2x1ZGUgIi4uLy4uL2dzdC9nc3RjbG9jay1saW5yZWcuYyIKLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0Q2xvY2sgcGFyZW50OwotfSBUZXN0Q2xvY2s7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdENsb2NrQ2xhc3MgcGFyZW50X2NsYXNzOwotfSBUZXN0Q2xvY2tDbGFzczsKLQotI2RlZmluZSBUWVBFX1RFU1RfQ0xPQ0sgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xvY2tfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIFRFU1RfQ0xPQ0sob2JqKSAgICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBUWVBFX1RFU1RfQ0xPQ0ssIFRlc3RDbG9jaykpCi0jZGVmaW5lIFRFU1RfQ0xPQ0tfQ0FTVChvYmopICAgICAgICAgICAgICAoKFRlc3RDbG9jayAqKShvYmopKQotI2RlZmluZSBJU19URVNUX0NMT0NLKG9iaikgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgVFlQRV9URVNUX0NMT0NLKSkKLSNkZWZpbmUgVEVTVF9DTE9DS19DTEFTUyhrbGFzcykgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgVFlQRV9URVNUX0NMT0NLLCBUZXN0Q2xvY2tDbGFzcykpCi0jZGVmaW5lIElTX1RFU1RfQ0xPQ0tfQ0xBU1Moa2xhc3MpICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFRZUEVfVEVTVF9DTE9DSykpCi0jZGVmaW5lIFRFU1RfQ0xPQ0tfR0VUX0NMQVNTKG9iaikgICAgICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFRZUEVfVEVTVF9DTE9DSywgVGVzdENsb2NrQ2xhc3MpKQotCi0KLUdUeXBlIHRlc3RfY2xvY2tfZ2V0X3R5cGUgKHZvaWQpOwotR19ERUZJTkVfVFlQRSAoVGVzdENsb2NrLCB0ZXN0X2Nsb2NrLCBHU1RfVFlQRV9DTE9DSyk7Ci0KLXN0YXRpYyBHc3RDbG9ja1JldHVybgotZmFrZV93YWl0X2FzeW5jIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja0VudHJ5ICogZW50cnkpCi17Ci0gIHJldHVybiBHU1RfQ0xPQ0tfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X2Nsb2NrX2NsYXNzX2luaXQgKFRlc3RDbG9ja0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdENsb2NrQ2xhc3MgKmNsb2NrX2NsYXNzOwotCi0gIGNsb2NrX2NsYXNzID0gR1NUX0NMT0NLX0NMQVNTIChrbGFzcyk7Ci0KLSAgY2xvY2tfY2xhc3MtPndhaXRfYXN5bmMgPSBmYWtlX3dhaXRfYXN5bmM7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X2Nsb2NrX2luaXQgKFRlc3RDbG9jayAqIGNsb2NrKQotewotfQotCi0KLXN0YXRpYyB2b2lkCi13ZWFrX25vdGlmeSAoZ3BvaW50ZXIgZGF0YSwgR09iamVjdCAqIG9iamVjdCkKLXsKLSAgKihnYm9vbGVhbiAqKSBkYXRhID0gRkFMU0U7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NldF9tYXN0ZXJfcmVmY291bnQpCi17Ci0gIEdzdENsb2NrICptYXN0ZXIsICpzbGF2ZTsKLSAgZ2Jvb2xlYW4gbWFzdGVyX2FsaXZlID0gVFJVRTsKLQotICAvKiBjcmVhdGUgbWFzdGVyIGFuZCBzbGF2ZSAqLwotICBtYXN0ZXIgPSBnX29iamVjdF9uZXcgKFRZUEVfVEVTVF9DTE9DSywgIm5hbWUiLCAiVGVzdENsb2NrTWFzdGVyIiwgTlVMTCk7Ci0gIHNsYXZlID0gZ19vYmplY3RfbmV3IChUWVBFX1RFU1RfQ0xPQ0ssICJuYW1lIiwgIlRlc3RDbG9ja1NsYXZlIiwgTlVMTCk7Ci0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHNsYXZlLCBHU1RfQ0xPQ0tfRkxBR19DQU5fU0VUX01BU1RFUik7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX09CSkVDVF9SRUZDT1VOVCAobWFzdGVyKSwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKHNsYXZlKSwgMSk7Ci0KLSAgZ19vYmplY3Rfd2Vha19yZWYgKEdfT0JKRUNUIChtYXN0ZXIpLCB3ZWFrX25vdGlmeSwgJm1hc3Rlcl9hbGl2ZSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKG1hc3RlciksIDEpOwotCi0gIGdzdF9jbG9ja19zZXRfbWFzdGVyIChzbGF2ZSwgbWFzdGVyKTsKLSAgLyogc2xhdmUgc3RvcmVzIG1hc3RlciBpbiBzbGF2ZS0+bWFzdGVyICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKG1hc3RlciksIDIpOwotICAvKiBtYXN0ZXIgc3RvcmVzIGEgcmVmIHRvIHNsYXZlIGluIG1hc3Rlci0+Y2xvY2tpZCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfT0JKRUNUX1JFRkNPVU5UIChzbGF2ZSksIDIpOwotCi0gIC8qIGRpc2NhcmQgb3VyIHJlZiAqLwotICBnc3Rfb2JqZWN0X3VucmVmIChtYXN0ZXIpOwotCi0gIC8qIG1hc3RlciBzaG91bGQgc3RpbGwgYmUgcmVmZmVkIGluc2lkZSBzbGF2ZSAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfT0JKRUNUX1JFRkNPVU5UIChtYXN0ZXIpLCAxKTsKLSAgZmFpbF91bmxlc3MgKG1hc3Rlcl9hbGl2ZSk7Ci0KLSAgLyogZHJvcCB0aGUgbGFzdCByZWYgdG8gbWF0ZXIgKi8KLSAgZ3N0X2Nsb2NrX3NldF9tYXN0ZXIgKHNsYXZlLCBOVUxMKTsKLQotICBmYWlsX2lmIChtYXN0ZXJfYWxpdmUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfT0JKRUNUX1JFRkNPVU5UIChzbGF2ZSksIDEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNsYXZlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1Hc3RDbG9ja1RpbWUgdGltZXMxW10gPSB7Ci0gIDI1NzExNjg5OTA4NzUzOSwgMCwgMTIwNjMyNzU0MjkxOTA0LCAwLAotICAyNTcxMTc5MzU5MTQyNTAsIDAsIDEyMDYzMzgyNTM2NzM0NCwgMCwKLSAgMjU3MTE5NDQ4Mjg5NDM0LCAwLCAxMjA2MzUzMDYxNDEyNzEsIDAsCi0gIDI1NzEyMDQ5MzY3MTUyNCwgMCwgMTIwNjM2Mzg0MzU3ODI1LCAwLAotICAyNTcxMjE1NTA3ODQ4NjEsIDAsIDEyMDYzNzQxNzQzODg3OCwgMCwKLSAgMjU3MTIzMDQyNjY5NDAzLCAwLCAxMjA2Mzg4OTUzNDQxNTAsIDAsCi0gIDI1NzEyNDA4OTE4NDg2NSwgMCwgMTIwNjM5OTcxNzI5NjUxLCAwLAotICAyNTcxMjU1NDU4MzY0NzQsIDAsIDEyMDY0MTQwNjc4ODI0MywgMCwKLSAgMjU3MTI3MDMwNjE4NDkwLCAwLCAxMjA2NDI4ODU5MTQyMjAsIDAsCi0gIDI1NzEyODAzMzcxMjc3MCwgMCwgMTIwNjQzODg4ODQzOTA3LCAwLAotICAyNTcxMjkwODE3NjgwNzQsIDAsIDEyMDY0NDk4MTg5MjAwMiwgMCwKLSAgMjU3MTMwMTQ1MzgzODQ1LCAwLCAxMjA2NDYwMTYzNzY4NjcsIDAsCi0gIDI1NzEzMTUzMjUzMDIwMCwgMCwgMTIwNjQ3Mzg5ODUwOTg3LCAwLAotICAyNTcxMzI1NzgxMzYwMzQsIDAsIDEyMDY0ODQ3Mjc2NzI0NywgMCwKLSAgMjU3MTM0MTAyNDc1NzIyLCAwLCAxMjA2NDk5NTM3ODUzMTUsIDAsCi0gIDI1NzEzNTE0Mjk5NDc4OCwgMCwgMTIwNjUxMDI4ODU4NTU2LCAwLAotICAyNTcxMzY1ODUwNzk4NjgsIDAsIDEyMDY1MjQ0MTMwMzYyNCwgMCwKLSAgMjU3MTM3NjE4MjYwNjU2LCAwLCAxMjA2NTM0OTE2MjcxMTIsIDAsCi0gIDI1NzEzOTEwODY5NDU0NiwgMCwgMTIwNjU0OTYzOTc4MTg0LCAwLAotICAyNTcxNDA2NDQwMjIwNDgsIDAsIDEyMDY1NjUwMDIzMzA2OCwgMCwKLSAgMjU3MTQxNjg1NjcxODI1LCAwLCAxMjA2NTc1Nzg1MTA2NTUsIDAsCi0gIDI1NzE0Mjc0MTIzODI4OCwgMCwgMTIwNjU4NjEwODg5ODA1LCAwLAotICAyNTcxNDQyNDM2MzMwNzQsIDAsIDEyMDY2MDA5MzA5ODA2MCwgMCwKLSAgMjU3MTQ1Mjg3OTYyMjcxLCAwLCAxMjA2NjExNzI5MDE1MjUsIDAsCi0gIDI1NzE0Njc0MDU5NjcxNiwgMCwgMTIwNjYyNTkxNTcyMTc5LCAwLAotICAyNTcxNDc3NTc2MDcxNTAsIDAsIDEyMDY2MzYyMjgyMjE3OSwgMCwKLSAgMjU3MTQ5MjYzOTkyNDAxLCAwLCAxMjA2NjUxMzU1Nzg1MjcsIDAsCi0gIDI1NzE1MDMwMzcxOTI5MCwgMCwgMTIwNjY2MTc2MTY2OTA1LCAwLAotICAyNTcxNTEzNTU1Njk5MDYsIDAsIDEyMDY2NzIxNzMwNDYwMSwgMCwKLSAgMjU3MTUyNDMwNTc4NDA2LCAwLCAxMjA2NjgzMjYwOTk3NjgsIDAsCi0gIDI1NzE1MzQ5MDUwMTA5NSwgMCwgMTIwNjY5MzYwNTU0MTExLCAwLAotICAyNTcxNTQ1MTIzNjA3ODQsIDAsIDEyMDY3MDM2NTQ5Nzk2MCwgMCwKLSAgMjU3MTU1NTMwNjEwNTc3LCAwLCAxMjA2NzEzOTkwMDYyNTksIDAsCi0gIDI1NzE1NjU2MjA5MTY1OSwgMCwgMTIwNjcyNDMyNzI4MTg1LCAwLAotICAyNTcxNTc5NDUzODg3NDIsIDAsIDEyMDY3MzgwMDMxMjQxNCwgMCwKLSAgMjU3MTU5Mjg3NTQ3MDczLCAwLCAxMjA2NzUxNDI0NDQ5ODMsIDAsCi0gIDI1NzE2MDMyNDkxMjg4MCwgMCwgMTIwNjc2MjE1MDc2ODE3LCAwLAotICAyNTczNDU0MDgzMjgwNDIsIDAsIDEyMDg2MTI2MTczODE5NiwgMCwKLSAgMjU3MzQ2NDEyMjcwOTE5LCAwLCAxMjA4NjIyNjU2MTM5MjYsIDAsCi0gIDI1NzM0NzQyMDUzMjI4NCwgMCwgMTIwODYzMjc4NjQ0OTMzLCAwLAotICAyNTczNDg0MzExODc2MzgsIDAsIDEyMDg2NDI4NDQxMjc1NCwgMCwKLSAgMjU3MzQ5NDM5MDE4MDI4LCAwLCAxMjA4NjUyOTMxMTAyNjUsIDAsCi0gIDI1NzM1MTc5NjIxNzkzOCwgMCwgMTIwODY3NjUxMTExOTczLCAwLAotICAyNTczNTI4MDMwMzgwOTIsIDAsIDEyMDg2ODY1OTEwNzU3OCwgMCwKLSAgMjU3MzU0MTUyNjg4ODk5LCAwLCAxMjA4NzAwMDg1OTQ4ODMsIDAsCi0gIDI1NzM1NTE1NzA4ODkwNiwgMCwgMTIwODcxMDExMDk3MzI3LCAwLAotICAyNTczNTYxNjI0MzkxODIsIDAsIDEyMDg3MjAxNjM0NjM0OCwgMCwKLSAgMjU3MzU3MTY3ODcyMDQwLCAwLCAxMjA4NzMwMjE2NTY0MDcsIDAsCi0gIDI1NzM1ODE4MjQ0MDA1OCwgMCwgMTIwODc0MDQ4NjMzOTQ1LCAwLAotICAyNTczNTkxOTg4ODEzNTYsIDAsIDEyMDg3NTA1MjI2NTUzOCwgMCwKLSAgMjU3MTAwNzU2NTI1NDY2LCAwLCAxMjA2MTY2MTkyODIxMzksIDAsCi0gIDI1NzEwMTc4OTMzNzc3MCwgMCwgMTIwNjE3NjU1NDc1OTg4LCAwLAotICAyNTcxMDI4MTYzMjM0NzIsIDAsIDEyMDYxODY3NDAwMDE1NywgMCwKLSAgMjU3MTAzODIyNDg1MjUwLCAwLCAxMjA2MTk2NzkwMDUwMzksIDAsCi0gIDI1NzEwNDg0MDc2MDQyMywgMCwgMTIwNjIwNzEwNzQzMzIxLCAwLAotICAyNTcxMDU4NTk0NTk0OTYsIDAsIDEyMDYyMTcxNTM1MTQ3NiwgMCwKLSAgMjU3MTA2ODg2NjYyNDcwLCAwLCAxMjA2MjI3NjQ5NDI1MzksIDAsCi0gIDI1NzEwODM4NzQ5Nzg2NCwgMCwgMTIwNjI0MjQ0MjIxMTA2LCAwLAotICAyNTcxMDk0Mjg4NTkxOTEsIDAsIDEyMDYyNTMyMTQ2MTA5NiwgMCwKLSAgMjU3MTEwNDg1ODkyNzg1LCAwLCAxMjA2MjYzNTY4OTIwMDMsIDAsCi0gIDI1NzExMTg2OTg3MjE0MSwgMCwgMTIwNjI3NzI2NDU5ODc0LCAwLAotICAyNTcxMTI5MTU5MDM3NzQsIDAsIDEyMDYyODgxMzE5MDgzMCwgMCwKLSAgMjU3MTE0MzI5OTgyMjA4LCAwLCAxMjA2MzAxODcwNjE2ODIsIDAsCi0gIDI1NzExNTM3NjY2NjAyNiwgMCwgMTIwNjMxMjcxOTkyMTAxLCAwCi19OwotCi0KLUdzdENsb2NrVGltZSB0aW1lczJbXSA9IHsKLSAgMjkxNjc4NTc5MDA5NzYyLCAwLCAxNjIxMDczNDUwMjk1MDcsIDAsCi0gIDI5MTY3OTc3MDQ2NDQwNSwgMCwgMTYyMTA4NTk3Njg0NTM4LCAwLAotICAyOTE2ODA5NzI5MjQzNzAsIDAsIDE2MjEwOTc0NTgxNjg2MywgMCwKLSAgMjkxNjgyMjc4OTQ5NjI5LCAwLCAxNjIxMTEwMDA1Nzc2MDUsIDAsCi0gIDI5MTY4MzU5MDcwNjExNywgMCwgMTYyMTEyMzU3NzI0ODIyLCAwLAotICAyOTE2ODQ3OTIzMjI1NDEsIDAsIDE2MjExMzYxMzE1Njk1MCwgMCwKLSAgMjkxNjg1OTMxMzYyNTA2LCAwLCAxNjIxMTQ3NjA1NTY4NTQsIDAsCi0gIDI5MTY4NzEzMjE1NjU4OSwgMCwgMTYyMTE1OTA5MjM4NDkzLCAwLAotICAyOTE2ODgyNjUwMTIwNjAsIDAsIDE2MjExNzEyMDYwMzI0MCwgMCwKLSAgMjkxNjg5MzcyMTgzMDQ3LCAwLCAxNjIxMTgxMjYyNzk1MDgsIDAsCi0gIDI5MTcwNTUwNjAyMjI5NCwgMCwgMTYyMTM0MzI5MzczOTkyLCAwLAotICAyOTE2Njc5MTQzMDEwMDQsIDAsIDE2MjA5Njc5NTU1MzY1OCwgMCwKLSAgMjkxNjY4MTE5NTM3NjY4LCAwLCAxNjIwOTY5NDkwNTE5MDUsIDAsCi0gIDI5MTY2ODI3NDY3MTQ1NSwgMCwgMTYyMDk3MDQ5MjM4MzcxLCAwLAotICAyOTE2Njg0Mjk0MzU2MDAsIDAsIDE2MjA5NzI1NjM1NjcxOSwgMCwKLSAgMjkxNjY4NTg2MTI4NTM1LCAwLCAxNjIwOTczNTU2ODk3NjMsIDAsCi0gIDI5MTY2ODc0MTMwNjIzMywgMCwgMTYyMDk3NTY1Njc4NDYwLCAwLAotICAyOTE2Njg4OTM3ODkyMDMsIDAsIDE2MjA5NzY2MTA0NDkxNiwgMCwKLSAgMjkxNjY5MTAwMjU2NTU1LCAwLCAxNjIwOTc4NjU2OTQxNDUsIDAsCi0gIDI5MTY2OTIxNjQxNzU2MywgMCwgMTYyMDk4MDY5MjE0NjkzLCAwLAotICAyOTE2Njk4MzYzOTQ2MjAsIDAsIDE2MjA5ODY3NzI3NTUzMCwgMCwKLSAgMjkxNjY5OTkwNDQ3ODIxLCAwLCAxNjIwOTg3OTI2MDEyNjMsIDAsCi0gIDI5MTY3MDE0OTQyNjA4NiwgMCwgMTYyMDk4OTE2ODk5MTg0LCAwLAotICAyOTE2NzAzMDAyMzIxNTIsIDAsIDE2MjA5OTExNDIyNTYyMSwgMCwKLSAgMjkxNjcwNDExMjYxOTE3LCAwLCAxNjIwOTkyMzY3ODQxMTIsIDAsCi0gIDI5MTY3MDU5ODQ4MzUwNywgMCwgMTYyMDk5NDAyMTU4NzUxLCAwLAotICAyOTE2NzE3MTY1ODI2ODcsIDAsIDE2MjEwMDU1ODc0NDEyMiwgMCwKLSAgMjkxNjcyNjAwNzU5Nzg4LCAwLCAxNjIxMDE0OTkzMjYzNTksIDAsCi0gIDI5MTY3MzkxOTk4ODMwNywgMCwgMTYyMTAyNzUxOTgxMzg0LCAwLAotICAyOTE2NzUxNzQ0NDE2NDMsIDAsIDE2MjEwNDAwNTU1MTkzOSwgMCwKLSAgMjkxNjc2MjcxNTYyMTk3LCAwLCAxNjIxMDUxMDUyNTI4OTgsIDAsCi0gIDI5MTY3NzM3NjM0NTM3NCwgMCwgMTYyMTA2MTk1NzM3NTE2LCAwCi19OwotCi1Hc3RDbG9ja1RpbWUgdGltZXMzW10gPSB7Ci0gIDI5MTg4MTkyNDI5MTY4OCwgMCwgMTYyMjIzOTk3NTc4MjI4LCAwLAotICAyOTE4ODMzMTgxMjIyNjIsIDAsIDE2MjIyNDE2NzE5ODM2MCwgMCwKLSAgMjkxODg0Nzg2Mzk0ODM4LCAwLCAxNjIyMjQzMzUxNzI1MDEsIDAsCi0gIDI5MTg4NjAwNDM3NDM4NiwgMCwgMTYyMjI0NTAzNjk1NTMxLCAwLAotICAyOTE4ODcyMjQzNTMyODUsIDAsIDE2MjIyNDY3MzU2MDAyMSwgMCwKLSAgMjkxODg4NDcyNDAzMzY3LCAwLCAxNjIyMjQ4NDM3NjAzNjEsIDAsCi0gIDI5MTg4OTcyNzk3NzU2MSwgMCwgMTYyMjI1MDE0NDc5MzYyLCAwLAotICAyOTE4OTA5ODk5ODIzMDYsIDAsIDE2MjIyNTE3NDU1NDU1OCwgMCwKLSAgMjkxODkyMjQ3ODc1NzYzLCAwLCAxNjIyMjUzMzk3NTMwMzksIDAsCi0gIDI5MTg5MzUwMjE2MzU0NywgMCwgMTYyMjI1NjczMjMwOTg3LCAwLAotICAyOTE4OTQ3MTEzODIyMTYsIDAsIDE2MjIyNTgyOTQ5NDEwMSwgMCwKLSAgMjkxODk1OTYxMDIxNTA2LCAwLCAxNjIyMjU5NjQ1MzA4MzIsIDAsCi0gIDI5MTg5NzI1MTY5MDg1NCwgMCwgMTYyMjI2MTI3Mjg3OTgxLCAwLAotICAyOTE4OTg1MDg2MzA3ODUsIDAsIDE2MjIyNjMwMzcxMDQwNiwgMCwKLSAgMjkxODk5NzQwMTcyODY4LCAwLCAxNjIyMjY0NzI0NzgwNDcsIDAsCi0gIDI5MTkwMDk5ODg3ODg3MywgMCwgMTYyMjI2NjM3NDAyMDg1LCAwLAotICAyOTE5MDIzMzQ5MTk4NzUsIDAsIDE2MjIyNjc5Nzg3MzI0NSwgMCwKLSAgMjkxOTAzNTcyMTk2NjEwLCAwLCAxNjIyMjY5NjQzNTI5NjMsIDAsCi0gIDI5MTkwNDcyNzM0MjY5OSwgMCwgMTYyMjI3MTI1MzEyNTI1LCAwLAotICAyOTE5MDYwNzExODkxMDgsIDAsIDE2MjIyODM2MTMzNzE1MywgMCwKLSAgMjkxOTA3MzA4MTQ2MDA1LCAwLCAxNjIyMjk1NjA2MjU2MzgsIDAsCi0gIDI5MTkwODM1MTkyNTEyNiwgMCwgMTYyMjMwNjA0OTg2NjUwLCAwLAotICAyOTE5MDkzOTY0MTE0MjMsIDAsIDE2MjIzMTY1MzY5MDU0MywgMCwKLSAgMjkxOTEwNDUzOTY1MzQ4LCAwLCAxNjIyMzI2OTg1NTA5OTUsIDAsCi0gIDI5MTkxMjA5Njg3MDc0NCwgMCwgMTYyMjMzNDc1MjY0OTQ3LCAwLAotICAyOTE5MTMyMzQxNDgzOTUsIDAsIDE2MjIzMzYwNjUxNjg1NSwgMCwKLSAgMjkxOTE1NDQ4MDk2NTc2LCAwLCAxNjIyMzM5MjExNDU1NTksIDAsCi0gIDI5MTkxNjcwNzc0ODgyNywgMCwgMTYyMjM0MDQ3MTU0Mjk4LCAwLAotICAyOTE5MTg3Mzc0NTEwNzAsIDAsIDE2MjIzNDM3MDgzNzQyNSwgMCwKLSAgMjkxOTE5ODk2MDE2MjA1LCAwLCAxNjIyMzQ3MDU1MDQzMzcsIDAsCi0gIDI5MTkyMTA5ODY2Mzk4MCwgMCwgMTYyMjM0ODcyMzIwMzk3LCAwLAotICAyOTE5MjIzMTU2OTE0MDksIDAsIDE2MjIzNTAzMTAyMzM2NiwgMAotfTsKLQotc3RydWN0IHRlc3RfZW50cnkKLXsKLSAgZ2ludCBuOwotICBHc3RDbG9ja1RpbWUgKnY7Ci0gIEdzdENsb2NrVGltZSBleHBlY3RfaW50ZXJuYWw7Ci0gIEdzdENsb2NrVGltZSBleHBlY3RfZXh0ZXJuYWw7Ci0gIGd1aW50NjQgZXhwZWN0X251bTsKLSAgZ3VpbnQ2NCBleHBlY3RfZGVub207Ci19IHRpbWVzW10gPSB7Ci0gIHsKLSAgMzIsIHRpbWVzMSwgMjU3MTU0NTEyMzYwNzg0LCAxMjA2NzAzODA0Njk3NTMsIDQwNTI2MjI5MTMzNzY2MzQxMDksCi0gICAgICAgIDQwNTI3OTkzMTM5MDQyNjE5NjJ9LCB7Ci0gIDY0LCB0aW1lczEsIDI1NzM1OTE5ODg4MTM1NiwgMTIwODc1MDU0MjI3NDA1LCAyMDExODk1NzU5MDI3NjgyNDIyLAotICAgICAgICAyMDEyMDE0OTMxMzYwMjE1NTAzfSwgewotICAzMiwgdGltZXMyLCAyOTE3MDU1MDYwMjIyOTQsIDE2MjEzNDI5NzE5Mjc5MiwgMjMxOTUzNTcwNzUwNTIwOTg1NywKLSAgICAgICAgMjMyMTAwOTc1MzQ4MzM1NDQ1MX0sIHsKLSAgMzIsIHRpbWVzMywgMjkxOTIyMzE1NjkxNDA5LCAxNjIyMzQ5MzQxNTAyOTYsIDEzNzA5MzA3MjgxODA4ODgyNjEsCi0gICAgICAgIDQzOTI3MTk1MjcwMTE2NzM0NTZ9Ci19OwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZWdyZXNzaW9uKQotewotICBHc3RDbG9ja1RpbWUgbV9udW0sIG1fZGVuLCBpbnRlcm5hbCwgZXh0ZXJuYWw7Ci0gIGdkb3VibGUgcl9zcXVhcmVkLCByYXRlLCBleHBlY3RfcmF0ZTsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRpbWVzKTsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3MgKF9wcml2X2dzdF9kb19saW5lYXJfcmVncmVzc2lvbiAodGltZXNbaV0udiwgdGltZXNbaV0ubiwKLSAgICAgICAgICAgICZtX251bSwgJm1fZGVuLCAmZXh0ZXJuYWwsICZpbnRlcm5hbCwgJnJfc3F1YXJlZCkpOwotCi0gICAgR1NUX0xPRyAoInhiYXNlICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiB5YmFzZSAlIiBHX0dVSU5UNjRfRk9STUFUICIgcmF0ZSA9ICUiCi0gICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiAvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiA9ICUuMTBmIHJfc3F1YXJlZCAlZlxuIiwKLSAgICAgICAgaW50ZXJuYWwsIGV4dGVybmFsLCBtX251bSwgbV9kZW4sIChnZG91YmxlKSAobV9udW0pIC8gKG1fZGVuKSwKLSAgICAgICAgcl9zcXVhcmVkKTsKLQotICAgIC8qIFJlcXVpcmUgaGlnaCBjb3JyZWxhdGlvbiAqLwotICAgIGZhaWxfdW5sZXNzIChyX3NxdWFyZWQgPj0gMC45KTsKLQotICAgIGZhaWxfdW5sZXNzIChpbnRlcm5hbCA9PSB0aW1lc1tpXS5leHBlY3RfaW50ZXJuYWwsCi0gICAgICAgICJSZWdyZXNzaW9uIHBhcmFtcyAlZCBmYWlsLiBpbnRlcm5hbCAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIgIT0gZXhwZWN0ZWQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgaSwgaW50ZXJuYWwsCi0gICAgICAgIHRpbWVzW2ldLmV4cGVjdF9pbnRlcm5hbCk7Ci0gICAgLyogUmF0ZSBtdXN0IGJlIHdpdGhpbiAxJSB0b2xlcmFuY2UgKi8KLSAgICBleHBlY3RfcmF0ZSA9ICgoZ2RvdWJsZSkgKHRpbWVzW2ldLmV4cGVjdF9udW0pIC8gdGltZXNbaV0uZXhwZWN0X2Rlbm9tKTsKLSAgICByYXRlID0gKChnZG91YmxlKSAobV9udW0pIC8gbV9kZW4pOwotICAgIGZhaWxfdW5sZXNzICgoZXhwZWN0X3JhdGUgLSByYXRlKSA+PSAtMC4xICYmIChleHBlY3RfcmF0ZSAtIHJhdGUpIDw9IDAuMSwKLSAgICAgICAgIlJlZ3Jlc3Npb24gcGFyYW1zICVkIGZhaWwuIFJhdGUgb3V0IG9mIHJhbmdlLiBFeHBlY3RlZCAlZiwgZ290ICVmIiwKLSAgICAgICAgaSwgZXhwZWN0X3JhdGUsIHJhdGUpOwotICAgIGZhaWxfdW5sZXNzIChleHRlcm5hbCA+PSB0aW1lc1tpXS5leHBlY3RfZXh0ZXJuYWwgKiAwLjk5ICYmCi0gICAgICAgIGV4dGVybmFsIDw9IHRpbWVzW2ldLmV4cGVjdF9leHRlcm5hbCAqIDEuMDEsCi0gICAgICAgICJSZWdyZXNzaW9uIHBhcmFtcyAlZCBmYWlsLiBleHRlcm5hbCAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIgIT0gZXhwZWN0ZWQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgaSwgZXh0ZXJuYWwsCi0gICAgICAgIHRpbWVzW2ldLmV4cGVjdF9leHRlcm5hbCk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2Nsb2NrX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdENsb2NrIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImNsb2NrIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXRfbWFzdGVyX3JlZmNvdW50KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZ3Jlc3Npb24pOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2Nsb2NrKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3Rjb250ZXh0LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0Y29udGV4dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Q4Yjc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3Rjb250ZXh0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NTIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KLSAqICAgQXV0aG9yOiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogZ3N0Y29udGV4dC5jOiBVbml0IHRlc3QgZm9yIEdzdENvbnRleHQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Jhc2ljKQotewotICBHc3RDb250ZXh0ICpjMSwgKmMyOwotICBHc3RTdHJ1Y3R1cmUgKnMxOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnMyOwotCi0gIGMxID0gZ3N0X2NvbnRleHRfbmV3ICgidGVzdCIsIEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKGMxICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0NPTlRFWFQgKGMxKSk7Ci0gIHMxID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlIChjMSk7Ci0gIGZhaWxfdW5sZXNzIChzMSAhPSBOVUxMKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMxLCAiZm9vYmFyIiwgR19UWVBFX0lOVCwgMSwgTlVMTCk7Ci0KLSAgYzIgPSBnc3RfY29udGV4dF9jb3B5IChjMSk7Ci0gIGZhaWxfdW5sZXNzIChjMiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19DT05URVhUIChjMikpOwotICBmYWlsX3VubGVzcyAoc3RyY21wIChnc3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlIChjMSksCi0gICAgICAgICAgZ3N0X2NvbnRleHRfZ2V0X2NvbnRleHRfdHlwZSAoYzIpKSA9PSAwKTsKLSAgczIgPSBnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlIChjMik7Ci0gIGZhaWxfdW5sZXNzIChzMiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKHMxLCBzMikpOwotCi0gIGdzdF9jb250ZXh0X3VucmVmIChjMSk7Ci0gIGdzdF9jb250ZXh0X3VucmVmIChjMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0RWxlbWVudCBwYXJlbnQ7Ci0gIGdib29sZWFuIHNldF9iZWZvcmVfcmVhZHk7Ci0gIGdib29sZWFuIHNldF9mcm9tX25lZWRfY29udGV4dDsKLSAgZ2Jvb2xlYW4gY3JlYXRlX3NlbGY7Ci0KLSAgZ2Jvb2xlYW4gaGF2ZV9mb29iYXI7Ci19IEdzdENvbnRleHRFbGVtZW50OwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfSBHc3RDb250ZXh0RWxlbWVudENsYXNzOwotCi1HVHlwZSBnc3RfY29udGV4dF9lbGVtZW50X2dldF90eXBlICh2b2lkKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0Q29udGV4dEVsZW1lbnQsIGdzdF9jb250ZXh0X2VsZW1lbnQsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbnRleHRfZWxlbWVudF9zZXRfY29udGV4dCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENvbnRleHQgKiBjb250ZXh0KQotewotICBpZiAoc3RyY21wIChnc3RfY29udGV4dF9nZXRfY29udGV4dF90eXBlIChjb250ZXh0KSwgImZvb2JhciIpID09IDApCi0gICAgKChHc3RDb250ZXh0RWxlbWVudCAqKSBlbGVtZW50KS0+aGF2ZV9mb29iYXIgPSBUUlVFOwotCi0gIEdTVF9FTEVNRU5UX0NMQVNTIChnc3RfY29udGV4dF9lbGVtZW50X3BhcmVudF9jbGFzcyktPnNldF9jb250ZXh0IChlbGVtZW50LAotICAgICAgY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2NvbnRleHRfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdENvbnRleHRFbGVtZW50ICpjZWxlbWVudCA9IChHc3RDb250ZXh0RWxlbWVudCAqKSBlbGVtZW50OwotCi0gIGlmICh0cmFuc2l0aW9uID09IEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWSkgewotICAgIEdzdENvbnRleHQgKmNvbnRleHQ7Ci0gICAgR3N0TWVzc2FnZSAqbXNnOwotICAgIGdib29sZWFuIGhhdmVfZm9vYmFyID0gY2VsZW1lbnQtPmhhdmVfZm9vYmFyOwotCi0gICAgaWYgKGNlbGVtZW50LT5zZXRfYmVmb3JlX3JlYWR5ICYmICFoYXZlX2Zvb2JhcikKLSAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgZWxzZSBpZiAoY2VsZW1lbnQtPnNldF9iZWZvcmVfcmVhZHkpCi0gICAgICBnb3RvIGNoYWluX3VwOwotCi0gICAgaWYgKGNlbGVtZW50LT5zZXRfZnJvbV9uZWVkX2NvbnRleHQgJiYgaGF2ZV9mb29iYXIpCi0gICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotCi0gICAgaWYgKCFoYXZlX2Zvb2JhcikgewotICAgICAgLyogSGVyZSB3ZSB3b3VsZCBmaXJzdCBxdWVyeSBkb3duc3RyZWFtIGZvciBhIGNvbnRleHQgYnV0IHdlIGhhdmUgbm8gcGFkcyAqLwotICAgICAgbXNnID0gZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dCAoR1NUX09CSkVDVCAoZWxlbWVudCksICJmb29iYXIiKTsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoZWxlbWVudCwgbXNnKTsKLQotICAgICAgaGF2ZV9mb29iYXIgPSBjZWxlbWVudC0+aGF2ZV9mb29iYXI7Ci0gICAgfQotCi0gICAgaWYgKGNlbGVtZW50LT5zZXRfZnJvbV9uZWVkX2NvbnRleHQgJiYgIWhhdmVfZm9vYmFyKQotICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICBlbHNlIGlmIChjZWxlbWVudC0+c2V0X2Zyb21fbmVlZF9jb250ZXh0KQotICAgICAgZ290byBjaGFpbl91cDsKLQotICAgIGlmIChjZWxlbWVudC0+Y3JlYXRlX3NlbGYgJiYgaGF2ZV9mb29iYXIpCi0gICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotCi0gICAgaWYgKCFoYXZlX2Zvb2JhcikgewotICAgICAgY29udGV4dCA9IGdzdF9jb250ZXh0X25ldyAoImZvb2JhciIsIEZBTFNFKTsKLSAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0IChlbGVtZW50LCBjb250ZXh0KTsKLSAgICAgIG1zZyA9Ci0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2hhdmVfY29udGV4dCAoR1NUX09CSkVDVCAoZWxlbWVudCksCi0gICAgICAgICAgZ3N0X2NvbnRleHRfcmVmIChjb250ZXh0KSk7Ci0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKGVsZW1lbnQsIG1zZyk7Ci0gICAgICBnc3RfY29udGV4dF91bnJlZiAoY29udGV4dCk7Ci0gICAgfQotICB9Ci0KLWNoYWluX3VwOgotICByZXR1cm4KLSAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChnc3RfY29udGV4dF9lbGVtZW50X3BhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZQotICAgICAgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvbnRleHRfZWxlbWVudF9jbGFzc19pbml0IChHc3RDb250ZXh0RWxlbWVudENsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2V0X2NvbnRleHQgPSBnc3RfY29udGV4dF9lbGVtZW50X3NldF9jb250ZXh0OwotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfY29udGV4dF9lbGVtZW50X2NoYW5nZV9zdGF0ZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jb250ZXh0X2VsZW1lbnRfaW5pdCAoR3N0Q29udGV4dEVsZW1lbnQgKiBzZWxmKQotewotCi19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VsZW1lbnRfc2V0X2JlZm9yZV9yZWFkeSkKLXsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdzdENvbnRleHQgKmNvbnRleHQ7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLQotICBlbGVtZW50ID0gZ19vYmplY3RfbmV3IChnc3RfY29udGV4dF9lbGVtZW50X2dldF90eXBlICgpLCBOVUxMKTsKLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGVsZW1lbnQsIGJ1cyk7Ci0KLSAgKChHc3RDb250ZXh0RWxlbWVudCAqKSBlbGVtZW50KS0+c2V0X2JlZm9yZV9yZWFkeSA9IFRSVUU7Ci0KLSAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAotICAgICAgICAgIEdTVF9TVEFURV9SRUFEWSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgZmFpbF9pZiAoZ3N0X2J1c19wb3AgKGJ1cykgIT0gTlVMTCk7Ci0KLSAgY29udGV4dCA9IGdzdF9jb250ZXh0X25ldyAoImZvb2JhciIsIEZBTFNFKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQgKGVsZW1lbnQsIGNvbnRleHQpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAotICAgICAgICAgIEdTVF9TVEFURV9SRUFEWSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgZmFpbF91bmxlc3MgKChtc2cgPQotICAgICAgICAgIGdzdF9idXNfcG9wX2ZpbHRlcmVkIChidXMsIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQpKSAhPSBOVUxMKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGZhaWxfaWYgKGdzdF9idXNfcG9wIChidXMpICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzICgoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQpLT5oYXZlX2Zvb2Jhcik7Ci0KLSAgZ3N0X2NvbnRleHRfdW5yZWYgKGNvbnRleHQpOwotCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKGVsZW1lbnQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RCdXNTeW5jUmVwbHkKLXN5bmNfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfTkVFRF9DT05URVhUKSB7Ci0gICAgY29uc3QgZ2NoYXIgKnR5cGU7Ci0gICAgR3N0RWxlbWVudCAqZWxlbWVudCA9IEdTVF9FTEVNRU5UIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKLSAgICBHc3RDb250ZXh0ICpjb250ZXh0OwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9tZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZSAobWVzc2FnZSwgJnR5cGUpKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0eXBlLCAiZm9vYmFyIik7Ci0gICAgY29udGV4dCA9IGdzdF9jb250ZXh0X25ldyAoImZvb2JhciIsIEZBTFNFKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dCAoZWxlbWVudCwgY29udGV4dCk7Ci0gICAgZ3N0X2NvbnRleHRfdW5yZWYgKGNvbnRleHQpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZWxlbWVudF9zZXRfZnJvbV9uZWVkX2NvbnRleHQpCi17Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgZWxlbWVudCA9IGdfb2JqZWN0X25ldyAoZ3N0X2NvbnRleHRfZWxlbWVudF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKGJ1cywgc3luY19oYW5kbGVyLCBOVUxMLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZWxlbWVudCwgYnVzKTsKLQotICAoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQpLT5zZXRfZnJvbV9uZWVkX2NvbnRleHQgPSBUUlVFOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsCi0gICAgICAgICAgR1NUX1NUQVRFX1JFQURZKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBmYWlsX3VubGVzcyAoKG1zZyA9Ci0gICAgICAgICAgZ3N0X2J1c19wb3BfZmlsdGVyZWQgKGJ1cywgR1NUX01FU1NBR0VfTkVFRF9DT05URVhUKSkgIT0gTlVMTCk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBmYWlsX3VubGVzcyAoKG1zZyA9Ci0gICAgICAgICAgZ3N0X2J1c19wb3BfZmlsdGVyZWQgKGJ1cywgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCkpICE9IE5VTEwpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgZmFpbF9pZiAoZ3N0X2J1c19wb3AgKGJ1cykgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKCgoR3N0Q29udGV4dEVsZW1lbnQgKikgZWxlbWVudCktPmhhdmVfZm9vYmFyKTsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzIChlbGVtZW50LCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lbGVtZW50X2NyZWF0ZV9zZWxmKQotewotICBHc3RCdXMgKmJ1czsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR3N0Q29udGV4dCAqY29udGV4dDsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIGVsZW1lbnQgPSBnX29iamVjdF9uZXcgKGdzdF9jb250ZXh0X2VsZW1lbnRfZ2V0X3R5cGUgKCksIE5VTEwpOwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZWxlbWVudCwgYnVzKTsKLQotICAoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQpLT5jcmVhdGVfc2VsZiA9IFRSVUU7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwKLSAgICAgICAgICBHU1RfU1RBVEVfUkVBRFkpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGZhaWxfdW5sZXNzICgobXNnID0KLSAgICAgICAgICBnc3RfYnVzX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQpKSAhPSBOVUxMKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGZhaWxfdW5sZXNzICgobXNnID0KLSAgICAgICAgICBnc3RfYnVzX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfTUVTU0FHRV9IQVZFX0NPTlRFWFQpKSAhPSBOVUxMKTsKLSAgZ3N0X21lc3NhZ2VfcGFyc2VfaGF2ZV9jb250ZXh0IChtc2csICZjb250ZXh0KTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19DT05URVhUIChjb250ZXh0KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF9jb250ZXh0X2dldF9jb250ZXh0X3R5cGUgKGNvbnRleHQpLCAiZm9vYmFyIik7Ci0gIGdzdF9jb250ZXh0X3VucmVmIChjb250ZXh0KTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGZhaWxfdW5sZXNzICgobXNnID0KLSAgICAgICAgICBnc3RfYnVzX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEKSkgIT0gTlVMTCk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBmYWlsX2lmIChnc3RfYnVzX3BvcCAoYnVzKSAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoKChHc3RDb250ZXh0RWxlbWVudCAqKSBlbGVtZW50KS0+aGF2ZV9mb29iYXIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKGVsZW1lbnQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VsZW1lbnRfYmluX2NhY2hpbmcpCi17Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RFbGVtZW50ICpiaW47Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQsICplbGVtZW50MjsKLQotICBiaW4gPSBnc3RfYmluX25ldyAoTlVMTCk7Ci0gIGVsZW1lbnQgPSBnX29iamVjdF9uZXcgKGdzdF9jb250ZXh0X2VsZW1lbnRfZ2V0X3R5cGUgKCksIE5VTEwpOwotICBlbGVtZW50MiA9IGdfb2JqZWN0X25ldyAoZ3N0X2NvbnRleHRfZWxlbWVudF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIGVsZW1lbnQsIGVsZW1lbnQyLCBOVUxMKTsKLQotICAvKiBGSVhNRTogVGhpcyBhc3N1bWVzIChhcyBjdXJyZW50bHkgaXMgdHJ1ZSkgdGhlIEdzdEJpbiBhY3RpdmF0ZXMKLSAgICogdGhlIGxhc3QgYWRkZWQgZWxlbWVudCBmaXJzdCBpZiBub25lIG9mIHRoZW0gaXMgYSBzaW5rIG9yIGhhcyBwYWRzCi0gICAqLwotICAoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQyKS0+Y3JlYXRlX3NlbGYgPSBUUlVFOwotICAoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQpLT5zZXRfZnJvbV9uZWVkX2NvbnRleHQgPSBUUlVFOwotCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChiaW4sIGJ1cyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLAotICAgICAgICAgIEdTVF9TVEFURV9SRUFEWSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBmYWlsX3VubGVzcyAoKChHc3RDb250ZXh0RWxlbWVudCAqKSBlbGVtZW50KS0+aGF2ZV9mb29iYXIpOwotICBmYWlsX3VubGVzcyAoKChHc3RDb250ZXh0RWxlbWVudCAqKSBlbGVtZW50MiktPmhhdmVfZm9vYmFyKTsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzIChiaW4sIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRfZWxlbWVudF90b19iaW4pCi17Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RFbGVtZW50ICpiaW47Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdMaXN0ICpjb250ZXh0cywgKmNvbnRleHRzMiwgKmw7Ci0KLSAgLyogU3RhcnQgd2l0aCBhbiBlbGVtZW50IG5vdCBpbnNpZGUgYSBiaW4gcmVxdWVzdGluZyBhIGNvbnRleHQuIEFkZCB0aGUKLSAgICogZWxlbWVudCB0byBhIGJpbiBhbmQgY2hlY2sgdGhlIGNvbnRleHQgcHJvcGFnYXRpb24uICovCi0gIGVsZW1lbnQgPSBnX29iamVjdF9uZXcgKGdzdF9jb250ZXh0X2VsZW1lbnRfZ2V0X3R5cGUgKCksIE5VTEwpOwotCi0gICgoR3N0Q29udGV4dEVsZW1lbnQgKikgZWxlbWVudCktPmNyZWF0ZV9zZWxmID0gVFJVRTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAotICAgICAgICAgIEdTVF9TVEFURV9SRUFEWSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBmYWlsX3VubGVzcyAoKChHc3RDb250ZXh0RWxlbWVudCAqKSBlbGVtZW50KS0+aGF2ZV9mb29iYXIpOwotCi0gIGJpbiA9IGdzdF9iaW5fbmV3IChOVUxMKTsKLQotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoYmluLCBidXMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwKLSAgICAgICAgICBHU1RfU1RBVEVfUkVBRFkpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIGVsZW1lbnQpOwotCi0gIC8qIGNoZWNrIHRoZSBjb250ZXh0cyBhcmUgdGhlIHNhbWUgKi8KLSAgY29udGV4dHMgPSBnc3RfZWxlbWVudF9nZXRfY29udGV4dHMgKGVsZW1lbnQpOwotICBjb250ZXh0czIgPSBnc3RfZWxlbWVudF9nZXRfY29udGV4dHMgKGJpbik7Ci0gIGZvciAobCA9IGNvbnRleHRzOyBsOyBsID0gbC0+bmV4dCkKLSAgICBmYWlsX3VubGVzcyAoZ19saXN0X2ZpbmQgKGNvbnRleHRzMiwgbC0+ZGF0YSkpOwotICBnX2xpc3RfZnJlZV9mdWxsIChjb250ZXh0cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY29udGV4dF91bnJlZik7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGNvbnRleHRzMiwgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY29udGV4dF91bnJlZik7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoYmluLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkX2VsZW1lbnRfdG9fYmluX2NvbGxpc2lvbikKLXsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdEVsZW1lbnQgKmJpbjsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCwgKmVsZW1lbnQyOwotICBHTGlzdCAqY29udGV4dHMsICpjb250ZXh0czIsICpsOwotCi0gIC8qIFN0YXJ0IHdpdGggYSBiaW4gY29udGFpbmluZyBhbiBlbGVtZW50IHRoYXQgcmVxdWVzdHMgYSBjb250ZXh0IGFuZCB0aGVuIGFkZAotICAgKiBhbm90aGVyIGVsZW1lbnQgdG8gdGhlIGJpbiB0aGF0IGhhcyBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgc2FtZSBjb250ZXh0LiAqLwotCi0gIGJpbiA9IGdzdF9iaW5fbmV3IChOVUxMKTsKLSAgZWxlbWVudCA9IGdfb2JqZWN0X25ldyAoZ3N0X2NvbnRleHRfZWxlbWVudF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBlbGVtZW50KTsKLQotICAoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQpLT5jcmVhdGVfc2VsZiA9IFRSVUU7Ci0KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGJpbiwgYnVzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sCi0gICAgICAgICAgR1NUX1NUQVRFX1JFQURZKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGZhaWxfdW5sZXNzICgoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQpLT5oYXZlX2Zvb2Jhcik7Ci0KLSAgLyogcHJvcGFnYXRlIGEgY29udGV4dCB3aXRob3V0IGEgcGFyZW50IGJpbiAqLwotICBlbGVtZW50MiA9IGdfb2JqZWN0X25ldyAoZ3N0X2NvbnRleHRfZWxlbWVudF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gICgoR3N0Q29udGV4dEVsZW1lbnQgKikgZWxlbWVudDIpLT5jcmVhdGVfc2VsZiA9IFRSVUU7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudDIsCi0gICAgICAgICAgR1NUX1NUQVRFX1JFQURZKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGZhaWxfdW5sZXNzICgoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQyKS0+aGF2ZV9mb29iYXIpOwotCi0gICgoR3N0Q29udGV4dEVsZW1lbnQgKikgZWxlbWVudCktPmhhdmVfZm9vYmFyID0gRkFMU0U7Ci0gICgoR3N0Q29udGV4dEVsZW1lbnQgKikgZWxlbWVudDIpLT5oYXZlX2Zvb2JhciA9IEZBTFNFOwotCi0gIC8qIGFkZCBlbGVtZW50IHRvIGJpbiBzaG91bGQgcmVzdWx0IGluIHRoZSBwcm9wYWdhdGlvbiBvZiBjb250ZXh0cyB0byB0aGUKLSAgICogYWRkZWQgZWxlbWVudCAqLwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgZWxlbWVudDIpOwotCi0gIGZhaWxfdW5sZXNzICgoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQpLT5oYXZlX2Zvb2JhciA9PSBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzICgoKEdzdENvbnRleHRFbGVtZW50ICopIGVsZW1lbnQyKS0+aGF2ZV9mb29iYXIpOwotCi0gIC8qIGNoZWNrIHRoZSBjb250ZXh0cyBhcmUgdGhlIHNhbWUgKi8KLSAgY29udGV4dHMgPSBnc3RfZWxlbWVudF9nZXRfY29udGV4dHMgKGVsZW1lbnQpOwotICBjb250ZXh0czIgPSBnc3RfZWxlbWVudF9nZXRfY29udGV4dHMgKGVsZW1lbnQyKTsKLSAgZm9yIChsID0gY29udGV4dHM7IGw7IGwgPSBsLT5uZXh0KQotICAgIGZhaWxfdW5sZXNzIChnX2xpc3RfZmluZCAoY29udGV4dHMyLCBsLT5kYXRhKSk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGNvbnRleHRzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9jb250ZXh0X3VucmVmKTsKLSAgY29udGV4dHMgPSBnc3RfZWxlbWVudF9nZXRfY29udGV4dHMgKGJpbik7Ci0gIGZvciAobCA9IGNvbnRleHRzOyBsOyBsID0gbC0+bmV4dCkKLSAgICBmYWlsX3VubGVzcyAoZ19saXN0X2ZpbmQgKGNvbnRleHRzMiwgbC0+ZGF0YSkpOwotICBnX2xpc3RfZnJlZV9mdWxsIChjb250ZXh0cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY29udGV4dF91bnJlZik7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGNvbnRleHRzMiwgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY29udGV4dF91bnJlZik7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoYmluLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9jb250ZXh0X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdENvbnRleHQiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiY29udGV4dCB0ZXN0cyIpOwotCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iYXNpYyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lbGVtZW50X3NldF9iZWZvcmVfcmVhZHkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZWxlbWVudF9zZXRfZnJvbV9uZWVkX2NvbnRleHQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZWxlbWVudF9jcmVhdGVfc2VsZik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lbGVtZW50X2Jpbl9jYWNoaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9lbGVtZW50X3RvX2Jpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hZGRfZWxlbWVudF90b19iaW5fY29sbGlzaW9uKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9jb250ZXh0KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3Rjb250cm9sbGVyLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0Y29udHJvbGxlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzFlNzI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3Rjb250cm9sbGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciB0aGUgY29udHJvbGxlciBsaWJyYXJ5Ci0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gU3RlZmFuIEtvc3QgPGVuc29uaWMgYXQgdXNlcnMgZG90IHNmIGRvdCBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2LTIwMDc+IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0KLS8qIGxvY2FsIHRlc3QgZWxlbWVudCAqLwotCi1lbnVtCi17Ci0gIFBST1BfSU5UID0gMSwKLSAgUFJPUF9GTE9BVCwKLSAgUFJPUF9ET1VCTEUsCi0gIFBST1BfQk9PTEVBTiwKLSAgUFJPUF9SRUFET05MWSwKLSAgUFJPUF9TVEFUSUMsCi0gIFBST1BfQ09OU1RSVUNUT05MWSwKLSAgUFJPUF9DT1VOVAotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9URVNUX09CSiAgICAgICAgICAgIChnc3RfdGVzdF9vYmpfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9URVNUX09CSihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVEVTVF9PQkosIEdzdFRlc3RPYmopKQotI2RlZmluZSBHU1RfVEVTVF9PQkpfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfVEVTVF9PQkosIEdzdFRlc3RPYmpDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19URVNUX09CSihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfVEVTVF9PQkopKQotI2RlZmluZSBHU1RfSVNfVEVTVF9PQkpfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfVEVTVF9PQkopKQotI2RlZmluZSBHU1RfVEVTVF9PQkpfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfVEVTVF9PQkosIEdzdFRlc3RPYmpDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUZXN0T2JqIEdzdFRlc3RPYmo7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdE9iakNsYXNzIEdzdFRlc3RPYmpDbGFzczsKLQotc3RydWN0IF9Hc3RUZXN0T2JqCi17Ci0gIEdzdEVsZW1lbnQgcGFyZW50OwotICBnaW50IHZhbF9pbnQ7Ci0gIGdmbG9hdCB2YWxfZmxvYXQ7Ci0gIGdkb3VibGUgdmFsX2RvdWJsZTsKLSAgZ2Jvb2xlYW4gdmFsX2Jvb2xlYW47Ci19Owotc3RydWN0IF9Hc3RUZXN0T2JqQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLXN0YXRpYyBHVHlwZSBnc3RfdGVzdF9vYmpfZ2V0X3R5cGUgKHZvaWQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wZXJ0eV9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VGVzdE9iaiAqc2VsZiA9IEdTVF9URVNUX09CSiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BlcnR5X2lkKSB7Ci0gICAgY2FzZSBQUk9QX0lOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNlbGYtPnZhbF9pbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZMT0FUOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBzZWxmLT52YWxfZmxvYXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPVUJMRToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlbGYtPnZhbF9kb3VibGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPT0xFQU46Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2VsZi0+dmFsX2Jvb2xlYW4pOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X29ial9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcGVydHlfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFRlc3RPYmogKnNlbGYgPSBHU1RfVEVTVF9PQkogKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgewotICAgIGNhc2UgUFJPUF9JTlQ6Ci0gICAgICBzZWxmLT52YWxfaW50ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUcgKCJ0ZXN0IHZhbHVlIGludD0lZCIsIHNlbGYtPnZhbF9pbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZMT0FUOgotICAgICAgc2VsZi0+dmFsX2Zsb2F0ID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoInRlc3QgdmFsdWUgZmxvYXQ9JWYiLCBzZWxmLT52YWxfZmxvYXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPVUJMRToKLSAgICAgIHNlbGYtPnZhbF9kb3VibGUgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoInRlc3QgdmFsdWUgZG91YmxlPSVsZiIsIHNlbGYtPnZhbF9kb3VibGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPT0xFQU46Ci0gICAgICBzZWxmLT52YWxfYm9vbGVhbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoInRlc3QgdmFsdWUgYm9vbGVhbj0lZCIsIHNlbGYtPnZhbF9ib29sZWFuKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05TVFJVQ1RPTkxZOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X29ial9jbGFzc19pbml0IChHc3RUZXN0T2JqQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdGVzdF9vYmpfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdGVzdF9vYmpfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSU5ULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImludCIsCi0gICAgICAgICAgImludCBwcm9wIiwKLSAgICAgICAgICAiaW50IG51bWJlciBwYXJhbWV0ZXIiLAotICAgICAgICAgIDAsIDEwMCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GTE9BVCwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoImZsb2F0IiwKLSAgICAgICAgICAiZmxvYXQgcHJvcCIsCi0gICAgICAgICAgImZsb2F0IG51bWJlciBwYXJhbWV0ZXIiLAotICAgICAgICAgIDAuMCwgMTAwLjAsIDAuMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ET1VCTEUsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiZG91YmxlIiwKLSAgICAgICAgICAiZG91YmxlIHByb3AiLAotICAgICAgICAgICJkb3VibGUgbnVtYmVyIHBhcmFtZXRlciIsCi0gICAgICAgICAgMC4wLCAxMDAuMCwgMC4wLCBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JPT0xFQU4sCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImJvb2xlYW4iLAotICAgICAgICAgICJib29sZWFuIHByb3AiLAotICAgICAgICAgICJib29sZWFuIHBhcmFtZXRlciIsCi0gICAgICAgICAgRkFMU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVBRE9OTFksCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicmVhZG9ubHkiLAotICAgICAgICAgICJyZWFkb25seSBwcm9wIiwKLSAgICAgICAgICAicmVhZG9ubHkgcGFyYW1ldGVyIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NUQVRJQywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJzdGF0aWMiLAotICAgICAgICAgICJzdGF0aWMgcHJvcCIsCi0gICAgICAgICAgInN0YXRpYyBwYXJhbWV0ZXIiLCAwLCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NPTlNUUlVDVE9OTFksCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiY29uc3RydWN0LW9ubHkiLAotICAgICAgICAgICJjb25zdHJ1Y3Qtb25seSBwcm9wIiwKLSAgICAgICAgICAiY29uc3RydWN0LW9ubHkgcGFyYW1ldGVyIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgInRlc3Qgb2JqZWN0IGZvciB1bml0IHRlc3RzIiwKLSAgICAgICJUZXN0IiwgIlVzZSBpbiB1bml0IHRlc3RzIiwgIlN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Iik7Ci19Ci0KLXN0YXRpYyBHVHlwZQotZ3N0X3Rlc3Rfb2JqX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgdGVzdF9vYmpfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdGVzdF9vYmpfdHlwZSkpIHsKLSAgICBHVHlwZSB0eXBlOwotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gaW5mbyA9IHsKLSAgICAgIChndWludDE2KSBzaXplb2YgKEdzdFRlc3RPYmpDbGFzcyksCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGJhc2VfaW5pdAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBiYXNlX2ZpbmFsaXplCi0gICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF90ZXN0X29ial9jbGFzc19pbml0LCAvLyBjbGFzc19pbml0Ci0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzX2ZpbmFsaXplCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzX2RhdGEKLSAgICAgIChndWludDE2KSBzaXplb2YgKEdzdFRlc3RPYmopLAotICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAvLyBuX3ByZWFsbG9jcwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZV9pbml0Ci0gICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlX3RhYmxlCi0gICAgfTsKLSAgICB0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwgIkdzdFRlc3RPYmoiLCAmaW5mbywgMCk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZ0ZXN0X29ial90eXBlLCB0eXBlKTsKLSAgfQotICByZXR1cm4gdGVzdF9vYmpfdHlwZTsKLX0KLQotLyogdGVzdCBjb250cm9sIHNvdXJjZSAqLwotCi0jZGVmaW5lIEdTVF9UWVBFX1RFU1RfQ09OVFJPTF9TT1VSQ0UgICAgICAgICAgICAoZ3N0X3Rlc3RfY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9URVNUX0NPTlRST0xfU09VUkNFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9URVNUX0NPTlRST0xfU09VUkNFLCBHc3RUZXN0Q29udHJvbFNvdXJjZSkpCi0jZGVmaW5lIEdTVF9URVNUX0NPTlRST0xfU09VUkNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1RFU1RfQ09OVFJPTF9TT1VSQ0UsIEdzdFRlc3RDb250cm9sU291cmNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVEVTVF9DT05UUk9MX1NPVVJDRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfVEVTVF9DT05UUk9MX1NPVVJDRSkpCi0jZGVmaW5lIEdTVF9JU19URVNUX0NPTlRST0xfU09VUkNFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1RFU1RfQ09OVFJPTF9TT1VSQ0UpKQotI2RlZmluZSBHU1RfVEVTVF9DT05UUk9MX1NPVVJDRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9URVNUX0NPTlRST0xfU09VUkNFLCBHc3RUZXN0Q29udHJvbFNvdXJjZUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RDb250cm9sU291cmNlIEdzdFRlc3RDb250cm9sU291cmNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RDb250cm9sU291cmNlQ2xhc3MgR3N0VGVzdENvbnRyb2xTb3VyY2VDbGFzczsKLQotc3RydWN0IF9Hc3RUZXN0Q29udHJvbFNvdXJjZQotewotICBHc3RDb250cm9sU291cmNlIHBhcmVudDsKLQotICBnZG91YmxlIHZhbHVlOwotfTsKLXN0cnVjdCBfR3N0VGVzdENvbnRyb2xTb3VyY2VDbGFzcwotewotICBHc3RDb250cm9sU291cmNlQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotc3RhdGljIEdUeXBlIGdzdF90ZXN0X2NvbnRyb2xfc291cmNlX2dldF90eXBlICh2b2lkKTsKLQotc3RhdGljIEdzdFRlc3RDb250cm9sU291cmNlICoKLWdzdF90ZXN0X2NvbnRyb2xfc291cmNlX25ldyAodm9pZCkKLXsKLSAgcmV0dXJuIGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX1RFU1RfQ09OVFJPTF9TT1VSQ0UsIDAsIE5VTEwpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90ZXN0X2NvbnRyb2xfc291cmNlX2dldCAoR3N0VGVzdENvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGdkb3VibGUgKiB2YWx1ZSkKLXsKLSAgKnZhbHVlID0gc2VsZi0+dmFsdWU7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90ZXN0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoR3N0VGVzdENvbnRyb2xTb3VyY2UgKiBzZWxmLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgZ3VpbnQgbl92YWx1ZXMsCi0gICAgZ2RvdWJsZSAqIHZhbHVlcykKLXsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbl92YWx1ZXM7IGkrKykgewotICAgICp2YWx1ZXMgPSBzZWxmLT52YWx1ZTsKLSAgICB2YWx1ZXMrKzsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2NvbnRyb2xfc291cmNlX2luaXQgKEdzdFRlc3RDb250cm9sU291cmNlICogc2VsZikKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3MgPSAoR3N0Q29udHJvbFNvdXJjZSAqKSBzZWxmOwotCi0gIGNzLT5nZXRfdmFsdWUgPSAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlKSBnc3RfdGVzdF9jb250cm9sX3NvdXJjZV9nZXQ7Ci0gIGNzLT5nZXRfdmFsdWVfYXJyYXkgPSAoR3N0Q29udHJvbFNvdXJjZUdldFZhbHVlQXJyYXkpCi0gICAgICBnc3RfdGVzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXk7Ci0gIHNlbGYtPnZhbHVlID0gMC4wOwotfQotCi1zdGF0aWMgR1R5cGUKLWdzdF90ZXN0X2NvbnRyb2xfc291cmNlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgdGVzdF9jb3VudHJvbF9zb3VyY2VfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdGVzdF9jb3VudHJvbF9zb3VyY2VfdHlwZSkpIHsKLSAgICBHVHlwZSB0eXBlOwotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gaW5mbyA9IHsKLSAgICAgIChndWludDE2KSBzaXplb2YgKEdzdFRlc3RDb250cm9sU291cmNlQ2xhc3MpLAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBiYXNlX2luaXQKLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLy8gYmFzZV9maW5hbGl6ZQotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBjbGFzc19pbml0Ci0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzX2ZpbmFsaXplCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzX2RhdGEKLSAgICAgIChndWludDE2KSBzaXplb2YgKEdzdFRlc3RDb250cm9sU291cmNlKSwKLSAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgLy8gbl9wcmVhbGxvY3MKLSAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X3Rlc3RfY29udHJvbF9zb3VyY2VfaW5pdCwgLy8gaW5zdGFuY2VfaW5pdAotICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZV90YWJsZQotICAgIH07Ci0gICAgdHlwZSA9Ci0gICAgICAgIGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UWVBFX0NPTlRST0xfU09VUkNFLCAiR3N0VGVzdENvbnRyb2xTb3VyY2UiLAotICAgICAgICAmaW5mbywgMCk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZ0ZXN0X2NvdW50cm9sX3NvdXJjZV90eXBlLCB0eXBlKTsKLSAgfQotICByZXR1cm4gdGVzdF9jb3VudHJvbF9zb3VyY2VfdHlwZTsKLX0KLQotLyogdGVzdCBjb250cm9sIGJpbmRpbmcgKi8KLQotZW51bQotewotICBQUk9QX0NTID0gMSwKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfVEVTVF9DT05UUk9MX0JJTkRJTkcgICAgICAgICAgICAoZ3N0X3Rlc3RfY29udHJvbF9iaW5kaW5nX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfVEVTVF9DT05UUk9MX0JJTkRJTkcob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1RFU1RfQ09OVFJPTF9CSU5ESU5HLCBHc3RUZXN0Q29udHJvbEJpbmRpbmcpKQotI2RlZmluZSBHU1RfVEVTVF9DT05UUk9MX0JJTkRJTkdfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfVEVTVF9DT05UUk9MX0JJTkRJTkcsIEdzdFRlc3RDb250cm9sQmluZGluZ0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1RFU1RfQ09OVFJPTF9CSU5ESU5HKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9URVNUX0NPTlRST0xfQklORElORykpCi0jZGVmaW5lIEdTVF9JU19URVNUX0NPTlRST0xfQklORElOR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9URVNUX0NPTlRST0xfQklORElORykpCi0jZGVmaW5lIEdTVF9URVNUX0NPTlRST0xfQklORElOR19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9URVNUX0NPTlRST0xfQklORElORywgR3N0VGVzdENvbnRyb2xCaW5kaW5nQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdENvbnRyb2xCaW5kaW5nIEdzdFRlc3RDb250cm9sQmluZGluZzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUZXN0Q29udHJvbEJpbmRpbmdDbGFzcyBHc3RUZXN0Q29udHJvbEJpbmRpbmdDbGFzczsKLQotc3RydWN0IF9Hc3RUZXN0Q29udHJvbEJpbmRpbmcKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmcgcGFyZW50OwotCi0gIEdzdENvbnRyb2xTb3VyY2UgKmNzOwotfTsKLXN0cnVjdCBfR3N0VGVzdENvbnRyb2xCaW5kaW5nQ2xhc3MKLXsKLSAgR3N0Q29udHJvbEJpbmRpbmdDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1zdGF0aWMgR1R5cGUgZ3N0X3Rlc3RfY29udHJvbF9iaW5kaW5nX2dldF90eXBlICh2b2lkKTsKLXN0YXRpYyBHc3RDb250cm9sQmluZGluZ0NsYXNzICpnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfcGFyZW50X2NsYXNzID0gTlVMTDsKLQotc3RhdGljIEdzdENvbnRyb2xCaW5kaW5nICoKLWdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdzdE9iamVjdCAqIG9iamVjdCwgY29uc3QgZ2NoYXIgKiBwcm9wZXJ0eV9uYW1lLAotICAgIEdzdENvbnRyb2xTb3VyY2UgKiBjcykKLXsKLSAgR3N0VGVzdENvbnRyb2xCaW5kaW5nICpzZWxmOwotICBzZWxmID0gKEdzdFRlc3RDb250cm9sQmluZGluZyAqKSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1RFU1RfQ09OVFJPTF9CSU5ESU5HLAotICAgICAgIm9iamVjdCIsIG9iamVjdCwgIm5hbWUiLCBwcm9wZXJ0eV9uYW1lLCBOVUxMKTsKLQotICBzZWxmLT5jcyA9IGdzdF9vYmplY3RfcmVmIChjcyk7Ci0KLSAgcmV0dXJuIChHc3RDb250cm9sQmluZGluZyAqKSBzZWxmOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfY29udHJvbF9iaW5kaW5nX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wZXJ0eV9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VGVzdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX1RFU1RfQ09OVFJPTF9CSU5ESU5HIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKLSAgICBjYXNlIFBST1BfQ1M6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBzZWxmLT5jcyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfY29udHJvbF9iaW5kaW5nX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wZXJ0eV9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VGVzdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX1RFU1RfQ09OVFJPTF9CSU5ESU5HIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKLSAgICBjYXNlIFBST1BfQ1M6Ci0gICAgICBzZWxmLT5jcyA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19maW5hbGl6ZSAoR09iamVjdCAqIG9iaikKLXsKLSAgR3N0VGVzdENvbnRyb2xCaW5kaW5nICpzZWxmID0gR1NUX1RFU1RfQ09OVFJPTF9CSU5ESU5HIChvYmopOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNlbGYtPmNzKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3Rlc3RfY29udHJvbF9iaW5kaW5nX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmopOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfY29udHJvbF9iaW5kaW5nX2NsYXNzX2luaXQgKGdwb2ludGVyIGtsYXNzLCBncG9pbnRlciBjbGFzc19kYXRhKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NTLAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoImNvbnRyb2wtc291cmNlIiwgIkNvbnRyb2xTb3VyY2UiLAotICAgICAgICAgICJUaGUgY29udHJvbCBzb3VyY2UiLAotICAgICAgICAgIEdTVF9UWVBFX0NPTlRST0xfU09VUkNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLX0KLQotc3RhdGljIEdUeXBlCi1nc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSB0ZXN0X2NvdW50cm9sX2JpbmRpbmdfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdGVzdF9jb3VudHJvbF9iaW5kaW5nX3R5cGUpKSB7Ci0gICAgR1R5cGUgdHlwZTsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGluZm8gPSB7Ci0gICAgICAoZ3VpbnQxNikgc2l6ZW9mIChHc3RUZXN0Q29udHJvbEJpbmRpbmdDbGFzcyksCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGJhc2VfaW5pdAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBiYXNlX2ZpbmFsaXplCi0gICAgICBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfY2xhc3NfaW5pdCwgICAgICAvLyBjbGFzc19pbml0Ci0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzX2ZpbmFsaXplCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzX2RhdGEKLSAgICAgIChndWludDE2KSBzaXplb2YgKEdzdFRlc3RDb250cm9sQmluZGluZyksCi0gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5fcHJlYWxsb2NzCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlX2luaXQKLSAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVfdGFibGUKLSAgICB9OwotICAgIHR5cGUgPQotICAgICAgICBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9DT05UUk9MX0JJTkRJTkcsCi0gICAgICAgICJHc3RUZXN0Q29udHJvbEJpbmRpbmciLCAmaW5mbywgMCk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZ0ZXN0X2NvdW50cm9sX2JpbmRpbmdfdHlwZSwgdHlwZSk7Ci0gIH0KLSAgcmV0dXJuIHRlc3RfY291bnRyb2xfYmluZGluZ190eXBlOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zZXR1cCAodm9pZCkKLXsKLSAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKE5VTEwsICJ0ZXN0b2JqIiwgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfVEVTVF9PQkopOwotfQotCi1zdGF0aWMgdm9pZAotdGVhcmRvd24gKHZvaWQpCi17Ci19Ci0KLQotLyogVEVTVFMgKi8KLQotLyogdGVzdHMgZm9yIGFuIGVsZW1lbnQgd2l0aCBubyBjb250cm9sbGVkIHBhcmFtcyAqLwotR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfbmV3X2ZhaWwxKQotewotICBHc3RFbGVtZW50ICplbGVtOwotICBHc3RUZXN0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdENvbnRyb2xCaW5kaW5nICpjYjsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotICBjcyA9IGdzdF90ZXN0X2NvbnRyb2xfc291cmNlX25ldyAoKTsKLQotICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBub3QgZXhpc3QgKi8KLSAgY2IgPSBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgIl9zY2hyb21wZl8iLAotICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjcykpOwotICBmYWlsX3VubGVzcyAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoY2IpID09IE5VTEwsIE5VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0cyBmb3IgcmVhZG9ubHkgcGFyYW1zICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9uZXdfZmFpbDIpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0gIEdzdFRlc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0Q29udHJvbEJpbmRpbmcgKmNiOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0gIGNzID0gZ3N0X3Rlc3RfY29udHJvbF9zb3VyY2VfbmV3ICgpOwotCi0gIC8qIHRoYXQgcHJvcGVydHkgc2hvdWxkIGV4aXN0IGFuZCBidXQgaXMgcmVhZG9ubHkgKi8KLSAgY2IgPSBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgInJlYWRvbmx5IiwKLSAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3MpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKGNiKSA9PSBOVUxMLCBOVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjYik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdHMgZm9yIHN0YXRpYyBwYXJhbXMgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX25ld19mYWlsMykKLXsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLSAgR3N0VGVzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RDb250cm9sQmluZGluZyAqY2I7Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLSAgY3MgPSBnc3RfdGVzdF9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0KLSAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIGJ1dCBpcyBub3QgY29udHJvbGFibGUgKi8KLSAgY2IgPSBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgInN0YXRpYyIsCi0gICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDIChjYikgPT0gTlVMTCwgTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY2IpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3RzIGZvciBjb25zdHJ1Y3Qtb25seSBwYXJhbXMgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX25ld19mYWlsNCkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLSAgR3N0VGVzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RDb250cm9sQmluZGluZyAqY2I7Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLSAgY3MgPSBnc3RfdGVzdF9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0KLSAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIGJ1dCBpcyBjb25zdHJ1Y3Qtb25seSAqLwotICBjYiA9IGdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiY29uc3RydWN0LW9ubHkiLAotICAgICAgR1NUX0NPTlRST0xfU09VUkNFIChjcykpOwotICBmYWlsX3VubGVzcyAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoY2IpID09IE5VTEwsIE5VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLS8qIHRlc3RzIGZvciBhbiBlbGVtZW50IHdpdGggY29udHJvbGxlZCBwYXJhbXMgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX25ld19va2F5MSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLSAgR3N0VGVzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RDb250cm9sQmluZGluZyAqY2I7Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLSAgY3MgPSBnc3RfdGVzdF9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0KLSAgLyogdGhhdCBwcm9wZXJ0eSBzaG91bGQgZXhpc3QgYW5kIHNob3VsZCBiZSBjb250cm9sbGFibGUgKi8KLSAgY2IgPSBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsCi0gICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDIChjYikgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY2IpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3RzIGZvciBhbiBlbGVtZW50IHdpdGggc2V2ZXJhbCBjb250cm9sbGVkIHBhcmFtcyAqLwotR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfbmV3X29rYXkyKQotewotICBHc3RFbGVtZW50ICplbGVtOwotICBHc3RUZXN0Q29udHJvbFNvdXJjZSAqY3MxLCAqY3MyOwotICBHc3RDb250cm9sQmluZGluZyAqY2IxLCAqY2IyOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0gIGNzMSA9IGdzdF90ZXN0X2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgY3MyID0gZ3N0X3Rlc3RfY29udHJvbF9zb3VyY2VfbmV3ICgpOwotCi0gIC8qIHRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIGV4aXN0IGFuZCBzaG91bGQgYmUgY29udHJvbGxhYmxlICovCi0gIGNiMSA9IGdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwKLSAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3MxKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQ09OVFJPTF9CSU5ESU5HX1BTUEVDIChjYjEpICE9IE5VTEwsIE5VTEwpOwotCi0gIGNiMiA9IGdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiYm9vbGVhbiIsCi0gICAgICBHU1RfQ09OVFJPTF9TT1VSQ0UgKGNzMikpOwotICBmYWlsX3VubGVzcyAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoY2IyKSAhPSBOVUxMLCBOVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjYjEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjYjIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjczEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjczIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBjb250cm9sbGluZyBhIHBhcmFtIHR3aWNlIHNob3VsZCBiZSBoYW5kbGVkICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9wYXJhbV90d2ljZSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLSAgR3N0VGVzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RDb250cm9sQmluZGluZyAqY2I7Ci0gIGdib29sZWFuIHJlczsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotICBjcyA9IGdzdF90ZXN0X2NvbnRyb2xfc291cmNlX25ldyAoKTsKLQotICAvKiB0aGF0IHByb3BlcnR5IHNob3VsZCBleGlzdCBhbmQgc2hvdWxkIGJlIGNvbnRyb2xsYWJsZSAqLwotICBjYiA9IGdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwKLSAgICAgIEdTVF9DT05UUk9MX1NPVVJDRSAoY3MpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKGNiKSAhPSBOVUxMLCBOVUxMKTsKLSAgY2IgPSBnc3Rfb2JqZWN0X3JlZiAoY2IpOwotCi0gIHJlcyA9IGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksIGNiKTsKLSAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7Ci0KLSAgLyogc2V0dGluZyBpdCBhZ2FpbiB3aWxsIGp1c3QgdW5zZXQgdGhlIG9sZCBhbmQgc2V0IGl0IGFnYWluCi0gICAqIHRoaXMgbWlnaHQgY2F1c2Ugc29tZSB0cm91YmxlIHdpdGggYmluZGluZyB0aGUgY29udHJvbCBzb3VyY2UgYWdhaW4KLSAgICovCi0gIHJlcyA9IGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksIGNiKTsKLSAgZmFpbF91bmxlc3MgKHJlcywgTlVMTCk7Ci0KLSAgLyogaXQgc2hvdWxkIGhhdmUgYmVlbiBhZGRlZCBub3csIGxldCByZW1vdmUgaXQgKi8KLSAgcmVzID0gZ3N0X29iamVjdF9yZW1vdmVfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwgY2IpOwotICBmYWlsX3VubGVzcyAocmVzLCBOVUxMKTsKLQotICAvKiByZW1vdmluZyBpdCBhZ2FpbiBzaG91bGQgbm90IHdvcmsgKi8KLSAgcmVzID0gZ3N0X29iamVjdF9yZW1vdmVfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwgY2IpOwotICBmYWlsX3VubGVzcyAoIXJlcywgTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY2IpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3RzIGlmIHdlIGNhbiBydW4gY29udHJvbGxlciBtZXRob2RzIGFnYWluc3QgYW55IEdPYmplY3QgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2FueV9nb2JqZWN0KQotewotICBHc3RFbGVtZW50ICplbGVtOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsICJ0ZXN0X2VsZW0iKTsKLQotICAvKiB0aGF0IGVsZW1lbnQgaXMgbm90IGNvbnRyb2xsYWJsZSAqLwotICByZXMgPSBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMExMKTsKLSAgLyogU3luY2luZyBzaG91bGQgc3RpbGwgc3VjY2VlZCBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gc3luYyAqLwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3RzIGlmIHdlIGNsZWFudXAgcHJvcGVybHkgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2NvbnRyb2xzb3VyY2VfcmVmY291bnRzKQotewotICBHc3RFbGVtZW50ICplbGVtOwotICBHc3RDb250cm9sQmluZGluZyAqY2IsICp0ZXN0X2NiOwotICBHc3RDb250cm9sU291cmNlICpjcywgKnRlc3RfY3M7Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICBjcyA9IChHc3RDb250cm9sU291cmNlICopIGdzdF90ZXN0X2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgZmFpbF91bmxlc3MgKGNzICE9IE5VTEwsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdfT0JKRUNUIChjcyktPnJlZl9jb3VudCwgMSk7Ci0KLSAgY2IgPSBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKGNiKSAhPSBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR19PQkpFQ1QgKGNzKS0+cmVmX2NvdW50LCAyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksIGNiKSk7Ci0KLSAgdGVzdF9jYiA9IGdzdF9vYmplY3RfZ2V0X2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksICJpbnQiKTsKLSAgZmFpbF91bmxlc3MgKHRlc3RfY2IgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZ19vYmplY3RfZ2V0ICh0ZXN0X2NiLCAiY29udHJvbC1zb3VyY2UiLCAmdGVzdF9jcywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzICh0ZXN0X2NzICE9IE5VTEwsIE5VTEwpOwotICBmYWlsX3VubGVzcyAodGVzdF9jcyA9PSBjcyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdfT0JKRUNUIChjcyktPnJlZl9jb3VudCwgMyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RfY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0X2NiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3RzIGlmIHdlIGNhbiBiaW5kIGEgY29udHJvbCBzb3VyY2UgdHdpY2UgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2JpbmRfdHdpY2UpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RDb250cm9sQmluZGluZyAqY2IxLCAqY2IyOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgY3MgPSAoR3N0Q29udHJvbFNvdXJjZSAqKSBnc3RfdGVzdF9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIGZhaWxfdW5sZXNzIChjcyAhPSBOVUxMLCBOVUxMKTsKLQotICBjYjEgPSBnc3RfdGVzdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9DT05UUk9MX0JJTkRJTkdfUFNQRUMgKGNiMSkgIT0gTlVMTCwgTlVMTCk7Ci0gIGNiMiA9IGdzdF90ZXN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiZG91YmxlIiwgY3MpOwotICBmYWlsX3VubGVzcyAoR1NUX0NPTlRST0xfQklORElOR19QU1BFQyAoY2IyKSAhPSBOVUxMLCBOVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjYjEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjYjIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLWdzdF9jb250cm9sbGVyX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkNvbnRyb2xsZXIiKTsKLSAgVENhc2UgKnRjID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGMpOwotICB0Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlICh0Yywgc2V0dXAsIHRlYXJkb3duKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX25ld19mYWlsMSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9uZXdfZmFpbDIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbmV3X2ZhaWwzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX25ld19mYWlsNCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9uZXdfb2theTEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbmV3X29rYXkyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX3BhcmFtX3R3aWNlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2FueV9nb2JqZWN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2NvbnRyb2xzb3VyY2VfcmVmY291bnRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2JpbmRfdHdpY2UpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2NvbnRyb2xsZXIpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdGNwcC5jYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RjcHAuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NjY2N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdGNwcC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qIEdTdHJlYW1lciBDKysgY29tcGlsZXIgaW5jbHVkZSBjb21wYXRpYmlsaXR5IHRlc3QKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2NoZWNrLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2luaXRfbWFjcm9zKQotewotICBHc3RNYXBJbmZvIG1hcCA9IEdTVF9NQVBfSU5GT19JTklUOwotICBHc3RQb2xsRkQgcG9sbF9mZCA9IEdTVF9QT0xMX0ZEX0lOSVQ7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWFwLnNpemUsIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChwb2xsX2ZkLmZkLCAtMSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9jcHBfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0QysrIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdzdCBDKysgdGVzdHMiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2luaXRfbWFjcm9zKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9jcHApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdGRhdGV0aW1lLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JiYzViZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0ZGF0ZXRpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDc5MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBDaHJpc3RpYW4gSGVyZ2VydCA8Y2hyaXNAZHJvbmVsYWJzLmNvbT4KLSAqCi0gKiBnc3RkYXRldGltZS5jOiBVbml0IHRlc3RzIGZvciBHc3REYXRlVGltZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2RlZmluZSBhc3NlcnRfYWxtb3N0X2VxdWFsc19pbnQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW50IGZpcnN0ID0gYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludCBzZWNvbmQgPSBiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmYWlsX3VubGVzcyhBQlMgKGZpcnN0IC0gc2Vjb25kKSA8PSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiJyIgI2EgIicgKCVkKSBpcyBub3QgYWxtb3N0IGVxdWFsIHRvICciICNiIicgKCVkKSIsIGZpcnN0LCBzZWNvbmQpOyBcCi19IEdfU1RNVF9FTkQ7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X0dzdERhdGVUaW1lX25vdykKLXsKLSAgR3N0RGF0ZVRpbWUgKmR0OwotICB0aW1lX3QgdDsKLSAgc3RydWN0IHRtIHRtOwotCi0gIG1lbXNldCAoJnRtLCAwLCBzaXplb2YgKHRtKSk7Ci0gIHQgPSB0aW1lIChOVUxMKTsKLSNpZmRlZiBIQVZFX0xPQ0FMVElNRV9SCi0gIGxvY2FsdGltZV9yICgmdCwgJnRtKTsKLSNlbHNlCi0gIG1lbWNweSAoJnRtLCBsb2NhbHRpbWUgKCZ0KSwgc2l6ZW9mIChzdHJ1Y3QgdG0pKTsKLSNlbmRpZgotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lICgpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpLCAxOTAwICsgdG0udG1feWVhcik7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpLCAxICsgdG0udG1fbW9uKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpLCB0bS50bV9tZGF5KTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSwgdG0udG1faG91cik7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSwgdG0udG1fbWluKTsKLSAgYXNzZXJ0X2FsbW9zdF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSwgdG0udG1fc2VjKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X0dzdERhdGVUaW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZSkKLXsKLSAgR3N0RGF0ZVRpbWUgKmR0OwotICBzdHJ1Y3QgdG0gdG07Ci0gIHRpbWVfdCB0OwotCi0gIG1lbXNldCAoJnRtLCAwLCBzaXplb2YgKHRtKSk7Ci0gIHQgPSB0aW1lIChOVUxMKTsKLSNpZmRlZiBIQVZFX0xPQ0FMVElNRV9SCi0gIGxvY2FsdGltZV9yICgmdCwgJnRtKTsKLSNlbHNlCi0gIG1lbWNweSAoJnRtLCBsb2NhbHRpbWUgKCZ0KSwgc2l6ZW9mIChzdHJ1Y3QgdG0pKTsKLSNlbmRpZgotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lICh0KTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSwgMTkwMCArIHRtLnRtX3llYXIpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSwgMSArIHRtLnRtX21vbik7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSwgdG0udG1fbWRheSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCksIHRtLnRtX2hvdXIpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCksIHRtLnRtX21pbik7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSwgdG0udG1fc2VjKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIG1lbXNldCAoJnRtLCAwLCBzaXplb2YgKHRtKSk7Ci0gIHRtLnRtX3llYXIgPSA3MDsKLSAgdG0udG1fbWRheSA9IDE7Ci0gIHRtLnRtX21vbiA9IDA7Ci0gIHRtLnRtX2hvdXIgPSAwOwotICB0bS50bV9taW4gPSAwOwotICB0bS50bV9zZWMgPSAwOwotICB0ID0gbWt0aW1lICgmdG0pOwotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lICh0KTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSwgMTk3MCk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpLCAxKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpLCAxKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSwgMCk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSwgMCk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSwgMCk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X0dzdERhdGVUaW1lX25ld19mcm9tX3VuaXhfZXBvY2hfdXRjKQotewotICBHc3REYXRlVGltZSAqZHQ7Ci0gIHN0cnVjdCB0bSB0bTsKLSAgdGltZV90IHQ7Ci0KLSAgbWVtc2V0ICgmdG0sIDAsIHNpemVvZiAodG0pKTsKLSAgdCA9IHRpbWUgKE5VTEwpOwotI2lmZGVmIEhBVkVfR01USU1FX1IKLSAgZ210aW1lX3IgKCZ0LCAmdG0pOwotI2Vsc2UKLSAgbWVtY3B5ICgmdG0sIGdtdGltZSAoJnQpLCBzaXplb2YgKHN0cnVjdCB0bSkpOwotI2VuZGlmCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0YyAodCk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCksIDE5MDAgKyB0bS50bV95ZWFyKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCksIDEgKyB0bS50bV9tb24pOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCksIHRtLnRtX21kYXkpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpLCB0bS50bV9ob3VyKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpLCB0bS50bV9taW4pOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdCksIHRtLnRtX3NlYyk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChkdCksIDApOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfZ2V0X2RteSkKLXsKLSAgR3N0RGF0ZVRpbWUgKmR0OwotICB0aW1lX3QgdDsKLSAgc3RydWN0IHRtIHR0OwotCi0gIHQgPSB0aW1lIChOVUxMKTsKLSNpZmRlZiBIQVZFX0xPQ0FMVElNRV9SCi0gIGxvY2FsdGltZV9yICgmdCwgJnR0KTsKLSNlbHNlCi0gIG1lbWNweSAoJnR0LCBsb2NhbHRpbWUgKCZ0KSwgc2l6ZW9mIChzdHJ1Y3QgdG0pKTsKLSNlbmRpZgotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF9sb2NhbF90aW1lICh0KTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSwgdHQudG1feWVhciArIDE5MDApOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSwgdHQudG1fbW9uICsgMSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSwgdHQudG1fbWRheSk7Ci0KLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X0dzdERhdGVUaW1lX2dldF9ob3VyKQotewotICBHc3REYXRlVGltZSAqZHQ7Ci0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgMjAwOSwgMTAsIDE5LCAxNSwgMTMsIDExKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDE1LCBnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgMTAwLCAxMCwgMTksIDEsIDAsIDApOwotICBhc3NlcnRfZXF1YWxzX2ludCAoMSwgZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAsIDEwMCwgMTAsIDE5LCAwLCAwLCAwKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDAsIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLCAxMDAsIDEwLCAxLCAyMywgNTksIDU5KTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDIzLCBnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfZ2V0X21pY3Jvc2Vjb25kKQotewotICBHVGltZVZhbCB0djsKLSAgR3N0RGF0ZVRpbWUgKmR0OwotCi0gIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnR2KTsKLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgMjAxMCwgNywgMTUsIDExLCAxMiwKLSAgICAgIDEzICsgKHR2LnR2X3VzZWMgLyAxMDAwMDAwLjApKTsKLSAgYXNzZXJ0X2FsbW9zdF9lcXVhbHNfaW50ICh0di50dl91c2VjLCBnc3RfZGF0ZV90aW1lX2dldF9taWNyb3NlY29uZCAoZHQpKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X0dzdERhdGVUaW1lX2dldF9taW51dGUpCi17Ci0gIEdzdERhdGVUaW1lICpkdDsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLCAyMDA5LCAxMiwgMSwgMSwgMzEsIDApOwotICBhc3NlcnRfZXF1YWxzX2ludCAoMzEsIGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X0dzdERhdGVUaW1lX2dldF9zZWNvbmQpCi17Ci0gIEdzdERhdGVUaW1lICpkdDsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLCAyMDA5LCAxMiwgMSwgMSwgMzEsIDQ0KTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDQ0LCBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV9uZXdfZnVsbCkKLXsKLSAgR3N0RGF0ZVRpbWUgKmR0OwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAsIDIwMDksIDEyLCAxMSwgMTIsIDExLCAxMC4wMDEyMzQpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoMjAwOSwgZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDEyLCBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDExLCBnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50ICgxMiwgZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDExLCBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50ICgxMCwgZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdCkpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoMTIzNCwgZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGR0KSk7Ci0gIGFzc2VydF9lcXVhbHNfZmxvYXQgKDAsIGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgyLjUsIDIwMTAsIDMsIDI5LCAxMiwgMTMsIDE2LjUpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoMjAxMCwgZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDMsIGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCkpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoMjksIGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDEyLCBnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoMTMsIGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKDE2LCBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50ICg1MDAwMDAsIGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kIChkdCkpOwotICBhc3NlcnRfZXF1YWxzX2Zsb2F0ICgyLjUsIGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV91dGNfbm93KQotewotICBHc3REYXRlVGltZSAqZHQ7Ci0gIHRpbWVfdCB0OwotICBzdHJ1Y3QgdG0gdG07Ci0KLSAgdCA9IHRpbWUgKE5VTEwpOwotI2lmZGVmIEhBVkVfR01USU1FX1IKLSAgZ210aW1lX3IgKCZ0LCAmdG0pOwotI2Vsc2UKLSAgbWVtY3B5ICgmdG0sIGdtdGltZSAoJnQpLCBzaXplb2YgKHN0cnVjdCB0bSkpOwotI2VuZGlmCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YyAoKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKHRtLnRtX3llYXIgKyAxOTAwLCBnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkpOwotICBhc3NlcnRfZXF1YWxzX2ludCAodG0udG1fbW9uICsgMSwgZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50ICh0bS50bV9tZGF5LCBnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50ICh0bS50bV9ob3VyLCBnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkpOwotICBhc3NlcnRfZXF1YWxzX2ludCAodG0udG1fbWluLCBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSk7Ci0gIGFzc2VydF9hbG1vc3RfZXF1YWxzX2ludCAodG0udG1fc2VjLCBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV9nZXRfdXRjX29mZnNldCkKLXsKLSAgc3RydWN0IHRtIHRtOwotICB0aW1lX3QgdDsKLQotICB0ID0gdGltZSAoTlVMTCk7Ci0gIG1lbXNldCAoJnRtLCAwLCBzaXplb2YgKHRtKSk7Ci0jaWZkZWYgSEFWRV9MT0NBTFRJTUVfUgotICBsb2NhbHRpbWVfciAoJnQsICZ0bSk7Ci0jZWxzZQotICBtZW1jcHkgKCZ0bSwgbG9jYWx0aW1lICgmdCksIHNpemVvZiAoc3RydWN0IHRtKSk7Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfVE1fR01UT0ZGCi0gIHsKLSAgICBHc3REYXRlVGltZSAqZHQ7Ci0gICAgZ2Zsb2F0IHRzOwotCi0gICAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19ub3dfbG9jYWxfdGltZSAoKTsKLSAgICB0cyA9IGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGR0KTsKLSAgICBhc3NlcnRfZXF1YWxzX2ludCAodHMsIHRtLnRtX2dtdG9mZiAvIDM2MDAuMCk7Ci0gICAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotICB9Ci0jZW5kaWYKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9Hc3REYXRlVGltZV9wYXJ0aWFsX2ZpZWxkcykKLXsKLSAgR3N0RGF0ZVRpbWUgKmR0OwotCi0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2RhdGVfdGltZV9uZXcgKDAuMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9kYXRlX3RpbWVfbmV3ICgwLjAsIDIwMTIsIDcsIDE4LCA5LCAtMSwgLTEpKTsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLjAsIDIwMTIsIC0xLCAtMSwgLTEsIC0xLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCksIDIwMTIpOwotICBmYWlsX2lmIChnc3RfZGF0ZV90aW1lX2hhc19tb250aCAoZHQpKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpKTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpKTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZHQpKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpKTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIChkdCkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZHQpKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAuMCwgMjAxMiwgNywgLTEsIC0xLCAtMSwgLTEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfeWVhciAoZHQpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpLCAyMDEyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX21vbnRoIChkdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpLCA3KTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpKTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZHQpKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpKTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIChkdCkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZHQpKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAuMCwgMjAxMiwgNywgMSwgLTEsIC0xLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGR0KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCksIDcpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSwgMSk7Ci0gIGZhaWxfaWYgKGdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGR0KSk7Ci0gIGZhaWxfaWYgKGdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZCAoZHQpKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAuMCwgMjAxMiwgNywgMSwgMTgsIDIwLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCksIDIwMTIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGR0KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCksIDcpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc190aW1lIChkdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCksIDE4KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCksIDIwKTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIChkdCkpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMC4wLCAyMDEyLCA3LCAxLCAxOCwgMjAsIDI1LjA0NDMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfeWVhciAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX21vbnRoIChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZCAoZHQpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdCksIDI1KTsKLSAgLyogZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGR0KSwgNDQzKTsgKi8KLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZGF0ZV90aW1lc19hcmVfZXF1YWwgKEdzdERhdGVUaW1lICogZDEsIEdzdERhdGVUaW1lICogZDIpCi17Ci0gIEdWYWx1ZSB2YWwxID0gR19WQUxVRV9JTklUOwotICBHVmFsdWUgdmFsMiA9IEdfVkFMVUVfSU5JVDsKLSAgaW50IHJldDsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWwxLCBHU1RfVFlQRV9EQVRFX1RJTUUpOwotICBnX3ZhbHVlX3NldF9ib3hlZCAoJnZhbDEsIGQxKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsMiwgR1NUX1RZUEVfREFURV9USU1FKTsKLSAgZ192YWx1ZV9zZXRfYm94ZWQgKCZ2YWwyLCBkMik7Ci0gIHJldCA9IGdzdF92YWx1ZV9jb21wYXJlICgmdmFsMSwgJnZhbDIpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsMik7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwxKTsKLQotICByZXR1cm4gcmV0ID09IEdTVF9WQUxVRV9FUVVBTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfaXNvODYwMSkKLXsKLSAgR3N0RGF0ZVRpbWUgKmR0LCAqZHQyOwotICBnY2hhciAqc3RyLCAqc3RyMjsKLSAgR0RhdGVUaW1lICpnZHQsICpnZHQyOwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YyAoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX3llYXIgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc19tb250aCAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX2RheSAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGR0KSk7Ci0gIHN0ciA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0KTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3RybGVuIChzdHIpLCBzdHJsZW4gKCIyMDEyLTA2LTI2VDIyOjQ2OjQzWiIpKTsKLSAgZmFpbF91bmxlc3MgKGdfc3RyX2hhc19zdWZmaXggKHN0ciwgIloiKSk7Ci0gIGR0MiA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcgKHN0cik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdDIpKTsKLSAgLyogVGhpcyB3aWxsIHN1Y2NlZWQgYmVjYXVzZSB3ZSdyZSBub3QgY29tcGFyaW5nIG1pY3Jvc2Vjb25kcyB3aGVuCi0gICAqIGNoZWNraW5nIGZvciBlcXVhbGl0eSAqLwotICBmYWlsX3VubGVzcyAoZGF0ZV90aW1lc19hcmVfZXF1YWwgKGR0LCBkdDIpKTsKLSAgc3RyMiA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgc3RyMik7Ci0gIGdfZnJlZSAoc3RyMik7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0Mik7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIC8qIC0tLS0geWVhciBvbmx5IC0tLS0gKi8KLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X3kgKDIwMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfeWVhciAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGF0ZV90aW1lX2hhc19tb250aCAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGR0KSk7Ci0gIHN0ciA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0KTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiMjAxMCIpOwotICBkdDIgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nIChzdHIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZGF0ZV90aW1lc19hcmVfZXF1YWwgKGR0LCBkdDIpKTsKLSAgc3RyMiA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgc3RyMik7Ci0gIGdfZnJlZSAoc3RyMik7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0Mik7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIC8qIC0tLS0geWVhciBhbmQgbW9udGggLS0tLSAqLwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfeW0gKDIwMTAsIDEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX3llYXIgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc19tb250aCAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGR0KSk7Ci0gIHN0ciA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0KTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiMjAxMC0xMCIpOwotICBkdDIgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nIChzdHIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChkYXRlX3RpbWVzX2FyZV9lcXVhbCAoZHQsIGR0MikpOwotICBzdHIyID0gZ3N0X2RhdGVfdGltZV90b19pc284NjAxX3N0cmluZyAoZHQyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCBzdHIyKTsKLSAgZ19mcmVlIChzdHIyKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQyKTsKLSAgZ19mcmVlIChzdHIpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci0KLSAgLyogLS0tLSB5ZWFyIGFuZCBtb250aCAtLS0tICovCi0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld195bWQgKDIwMTAsIDEwLCAzMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGR0KSk7Ci0gIHN0ciA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0KTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiMjAxMC0xMC0zMCIpOwotICBkdDIgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nIChzdHIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZGF0ZV90aW1lc19hcmVfZXF1YWwgKGR0LCBkdDIpKTsKLSAgc3RyMiA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgc3RyMik7Ci0gIGdfZnJlZSAoc3RyMik7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0Mik7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIC8qIC0tLS0gZGF0ZSBhbmQgdGltZSwgYnV0IG5vIHNlY29uZHMgLS0tLSAqLwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXcgKC00LjUsIDIwMTAsIDEwLCAzMCwgMTUsIDUwLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc190aW1lIChkdCkpOwotICBmYWlsX3VubGVzcyAoIWdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZCAoZHQpKTsKLSAgc3RyID0gZ3N0X2RhdGVfdGltZV90b19pc284NjAxX3N0cmluZyAoZHQpOwotICBmYWlsX3VubGVzcyAoc3RyICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICIyMDEwLTEwLTMwVDE1OjUwLTA0MzAiKTsKLSAgZHQyID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZyAoc3RyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChkYXRlX3RpbWVzX2FyZV9lcXVhbCAoZHQsIGR0MikpOwotICBzdHIyID0gZ3N0X2RhdGVfdGltZV90b19pc284NjAxX3N0cmluZyAoZHQyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCBzdHIyKTsKLSAgZ19mcmVlIChzdHIyKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQyKTsKLSAgZ19mcmVlIChzdHIpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci0KLSAgLyogLS0tLSBkYXRlIGFuZCB0aW1lLCBidXQgbm8gc2Vjb25kcyAoVVRDKSAtLS0tICovCi0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgMjAxMCwgMTAsIDMwLCAxNSwgNTAsIC0xKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX3llYXIgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc19tb250aCAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX2RheSAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIChkdCkpOwotICBzdHIgPSBnc3RfZGF0ZV90aW1lX3RvX2lzbzg2MDFfc3RyaW5nIChkdCk7Ci0gIGZhaWxfdW5sZXNzIChzdHIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIjIwMTAtMTAtMzBUMTU6NTBaIik7Ci0gIGR0MiA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcgKHN0cik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZGF0ZV90aW1lc19hcmVfZXF1YWwgKGR0LCBkdDIpKTsKLSAgc3RyMiA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgc3RyMik7Ci0gIGdfZnJlZSAoc3RyMik7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0Mik7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIC8qIC0tLS0gZGF0ZSBhbmQgdGltZSwgd2l0aCBzZWNvbmRzIC0tLS0gKi8KLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3ICgtNC41LCAyMDEwLCAxMCwgMzAsIDE1LCA1MCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGR0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2hhc190aW1lIChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIChkdCkpOwotICBzdHIgPSBnc3RfZGF0ZV90aW1lX3RvX2lzbzg2MDFfc3RyaW5nIChkdCk7Ci0gIGZhaWxfdW5sZXNzIChzdHIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIjIwMTAtMTAtMzBUMTU6NTA6MDAtMDQzMCIpOwotICBkdDIgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nIChzdHIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGRhdGVfdGltZXNfYXJlX2VxdWFsIChkdCwgZHQyKSk7Ci0gIHN0cjIgPSBnc3RfZGF0ZV90aW1lX3RvX2lzbzg2MDFfc3RyaW5nIChkdDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsIHN0cjIpOwotICBnX2ZyZWUgKHN0cjIpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdDIpOwotICBnX2ZyZWUgKHN0cik7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICAvKiAtLS0tIGRhdGUgYW5kIHRpbWUsIHdpdGggc2Vjb25kcyAoVVRDKSAtLS0tICovCi0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMCwgMjAxMCwgMTAsIDMwLCAxNSwgNTAsIDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfeWVhciAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX21vbnRoIChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZHQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZCAoZHQpKTsKLSAgc3RyID0gZ3N0X2RhdGVfdGltZV90b19pc284NjAxX3N0cmluZyAoZHQpOwotICBmYWlsX3VubGVzcyAoc3RyICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICIyMDEwLTEwLTMwVDE1OjUwOjAwWiIpOwotICBkdDIgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nIChzdHIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSA9PSBnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpID09IGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCkgPT0gZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGRhdGVfdGltZXNfYXJlX2VxdWFsIChkdCwgZHQyKSk7Ci0gIHN0cjIgPSBnc3RfZGF0ZV90aW1lX3RvX2lzbzg2MDFfc3RyaW5nIChkdDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsIHN0cjIpOwotICBnX2ZyZWUgKHN0cjIpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdDIpOwotICBnX2ZyZWUgKHN0cik7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICAvKiAtLS0tIGRhdGUgYW5kIHRpbWUsIGJ1dCB3aXRob3V0IHRoZSAnVCcgYW5kIHdpdGhvdXQgdGltZXpvbmUgKi8KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nICgiMjAxMC0xMC0zMCAxNTo1MCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpID09IDIwMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSA9PSAzMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkgPT0gMTUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCkgPT0gNTApOwotICBmYWlsX3VubGVzcyAoIWdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZCAoZHQpKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIC8qIC0tLS0gZGF0ZSBhbmQgdGltZStzZWNzLCBidXQgd2l0aG91dCB0aGUgJ1QnIGFuZCB3aXRob3V0IHRpbWV6b25lICovCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZyAoIjIwMTAtMTAtMzAgMTU6NTA6MzMiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSA9PSAyMDEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCkgPT0gMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCkgPT0gMzApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpID09IDE1KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZHQpID09IDMzKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIC8qIC0tLS0gZGF0ZXMgd2l0aCAwMHMgKi8KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nICgiMjAxMC0xMC0wMCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpID09IDIwMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBmYWlsX3VubGVzcyAoIWdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcgKCIyMDEwLTAwLTAwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkgPT0gMjAxMCk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGR0KSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBmYWlsX3VubGVzcyAoIWdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcgKCIyMDEwLTAwLTMwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkgPT0gMjAxMCk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGR0KSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBmYWlsX3VubGVzcyAoIWdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICAvKiBjb21wbGV0ZWx5IGludmFsaWQgKi8KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nICgiMDAwMC0wMC0wMCIpOwotICBmYWlsX3VubGVzcyAoZHQgPT0gTlVMTCk7Ci0KLSAgLyogcGFydGlhbGx5IGludmFsaWQgLSBoZXJlIHdlJ2xsIGp1c3QgZXh0cmFjdCB0aGUgeWVhciAqLwotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcgKCIyMDEwLzA1LzMwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkgPT0gMjAxMCk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGR0KSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X2RhdGVfdGltZV9oYXNfZGF5IChkdCkpOwotICBmYWlsX3VubGVzcyAoIWdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotCi0gIC8qIG9ubHkgdGltZSBwcm92aWRlZCAtIHdlIGFzc3VtZSB0b2RheSdzIGRhdGUgKi8KLSAgZ2R0ID0gZ19kYXRlX3RpbWVfbmV3X25vd191dGMgKCk7Ci0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nICgiMTU6NTA6MzMiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSA9PSBnX2RhdGVfdGltZV9nZXRfeWVhciAoZ2R0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpID09IGdfZGF0ZV90aW1lX2dldF9tb250aCAoZ2R0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSA9PQotICAgICAgZ19kYXRlX3RpbWVfZ2V0X2RheV9vZl9tb250aCAoZ2R0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkgPT0gMTUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCkgPT0gNTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdCkgPT0gMzMpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nICgiMTU6NTA6MzNaIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkgPT0gZ19kYXRlX3RpbWVfZ2V0X3llYXIgKGdkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSA9PSBnX2RhdGVfdGltZV9nZXRfbW9udGggKGdkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCkgPT0KLSAgICAgIGdfZGF0ZV90aW1lX2dldF9kYXlfb2ZfbW9udGggKGdkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpID09IDE1KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZHQpID09IDMzKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZyAoIjE1OjUwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkgPT0gZ19kYXRlX3RpbWVfZ2V0X3llYXIgKGdkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGR0KSA9PSBnX2RhdGVfdGltZV9nZXRfbW9udGggKGdkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCkgPT0KLSAgICAgIGdfZGF0ZV90aW1lX2dldF9kYXlfb2ZfbW9udGggKGdkdCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpID09IDE1KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcgKCIxNTo1MFoiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGR0KSA9PSBnX2RhdGVfdGltZV9nZXRfeWVhciAoZ2R0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpID09IGdfZGF0ZV90aW1lX2dldF9tb250aCAoZ2R0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSA9PQotICAgICAgZ19kYXRlX3RpbWVfZ2V0X2RheV9vZl9tb250aCAoZ2R0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9ob3VyIChkdCkgPT0gMTUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkdCkgPT0gNTApOwotICBmYWlsX3VubGVzcyAoIWdzdF9kYXRlX3RpbWVfaGFzX3NlY29uZCAoZHQpKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotCi0gIGdkdDIgPSBnX2RhdGVfdGltZV9hZGRfbWludXRlcyAoZ2R0LCAtMjcwKTsKLSAgZ19kYXRlX3RpbWVfdW5yZWYgKGdkdCk7Ci0KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nICgiMTU6NTA6MzMtMDQzMCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpID09IGdfZGF0ZV90aW1lX2dldF95ZWFyIChnZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpID09IGdfZGF0ZV90aW1lX2dldF9tb250aCAoZ2R0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCkgPT0KLSAgICAgIGdfZGF0ZV90aW1lX2dldF9kYXlfb2ZfbW9udGggKGdkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSA9PSAxNSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSA9PSAzMyk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICBkdCA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21faXNvODYwMV9zdHJpbmcgKCIxNTo1MC0wNDMwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCkgPT0gZ19kYXRlX3RpbWVfZ2V0X3llYXIgKGdkdDIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCkgPT0gZ19kYXRlX3RpbWVfZ2V0X21vbnRoIChnZHQyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSA9PQotICAgICAgZ19kYXRlX3RpbWVfZ2V0X2RheV9vZl9tb250aCAoZ2R0MikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpID09IDE1KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGR0KSk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLQotICAvKiBzb21lIGJvZ3VzIG9uZXMsIG1ha2UgY29weSB0byBkZXRlY3Qgb3V0IG9mIGJvdW5kIHJlYWQgaW4gdmFsZ3JpbmQvYXNhbiAqLwotICB7Ci0gICAgZ2NoYXIgKnMgPSBnX3N0cmR1cCAoIjAwMDIwMDAwMDBUMDAwMDA6MDArMCIpOwotICAgIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZyAocyk7Ci0gICAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotICAgIGdfZnJlZSAocyk7Ci0gIH0KLQotICBnX2RhdGVfdGltZV91bnJlZiAoZ2R0Mik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfdG9fZ19kYXRlX3RpbWUpCi17Ci0gIEdEYXRlVGltZSAqZ2R0MTsKLSAgR0RhdGVUaW1lICpnZHQyOwotICBHc3REYXRlVGltZSAqZHQ7Ci0KLSAgZ2R0MSA9IGdfZGF0ZV90aW1lX25ld19ub3dfdXRjICgpOwotICBnX2RhdGVfdGltZV9yZWYgKGdkdDEpOyAgICAgICAvKiBrZWVwIGl0IGFsaXZlIGZvciBjb21wYXJlIGJlbG93ICovCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9nX2RhdGVfdGltZSAoZ2R0MSk7Ci0gIGdkdDIgPSBnc3RfZGF0ZV90aW1lX3RvX2dfZGF0ZV90aW1lIChkdCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdfZGF0ZV90aW1lX2NvbXBhcmUgKGdkdDEsIGdkdDIpID09IDApOwotCi0gIGdfZGF0ZV90aW1lX3VucmVmIChnZHQxKTsKLSAgZ19kYXRlX3RpbWVfdW5yZWYgKGdkdDIpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfR3N0RGF0ZVRpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWUpCi17Ci0gIEdEYXRlVGltZSAqZ2R0OwotICBHc3REYXRlVGltZSAqZHQ7Ci0KLSAgZ2R0ID0gZ19kYXRlX3RpbWVfbmV3X25vd191dGMgKCk7Ci0gIGdfZGF0ZV90aW1lX3JlZiAoZ2R0KTsgICAgICAgIC8qIGtlZXAgaXQgYWxpdmUgZm9yIGNvbXBhcmUgYmVsb3cgKi8KLSAgZHQgPSBnc3RfZGF0ZV90aW1lX25ld19mcm9tX2dfZGF0ZV90aW1lIChnZHQpOwotCi0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkdCksIGdfZGF0ZV90aW1lX2dldF95ZWFyIChnZHQpKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChkdCksIGdfZGF0ZV90aW1lX2dldF9tb250aCAoZ2R0KSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9kYXkgKGR0KSwKLSAgICAgIGdfZGF0ZV90aW1lX2dldF9kYXlfb2ZfbW9udGggKGdkdCkpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZHQpLCBnX2RhdGVfdGltZV9nZXRfaG91ciAoZ2R0KSk7Ci0gIGFzc2VydF9lcXVhbHNfaW50IChnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGR0KSwKLSAgICAgIGdfZGF0ZV90aW1lX2dldF9taW51dGUgKGdkdCkpOwotICBhc3NlcnRfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkdCksCi0gICAgICBnX2RhdGVfdGltZV9nZXRfc2Vjb25kIChnZHQpKTsKLSAgYXNzZXJ0X2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kIChkdCksCi0gICAgICBnX2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGdkdCkpOwotCi0gIGdfZGF0ZV90aW1lX3VucmVmIChnZHQpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9kYXRlX3RpbWVfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0RGF0ZVRpbWUiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfZ2V0X2RteSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9nZXRfaG91cik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9nZXRfbWljcm9zZWNvbmQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfZ2V0X21pbnV0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9nZXRfc2Vjb25kKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0dzdERhdGVUaW1lX2dldF91dGNfb2Zmc2V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0dzdERhdGVUaW1lX25ld19mcm9tX3VuaXhfZXBvY2hfbG9jYWxfdGltZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX3V0Yyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9uZXdfZnVsbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9ub3cpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfR3N0RGF0ZVRpbWVfdXRjX25vdyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9wYXJ0aWFsX2ZpZWxkcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9Hc3REYXRlVGltZV9pc284NjAxKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0dzdERhdGVUaW1lX3RvX2dfZGF0ZV90aW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0dzdERhdGVUaW1lX25ld19mcm9tX2dfZGF0ZV90aW1lKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9kYXRlX3RpbWUpCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0ZGV2aWNlLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0ZGV2aWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OWQ0M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdGRldmljZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTYxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYQotICogICBBdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLSAqCi0gKiBnc3RkZXZpY2UuYzogVW5pdCB0ZXN0IGZvciBHc3REZXZpY2UKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdERldmljZQotewotICBHc3REZXZpY2UgcGFyZW50OwotfSBHc3RUZXN0RGV2aWNlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdERldmljZUNsYXNzCi17Ci0gIEdzdERldmljZUNsYXNzIHBhcmVudF9jbGFzczsKLX0gR3N0VGVzdERldmljZUNsYXNzOwotCi1HVHlwZSBnc3RfdGVzdF9kZXZpY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi0KLUdfREVGSU5FX1RZUEUgKEdzdFRlc3REZXZpY2UsIGdzdF90ZXN0X2RldmljZSwgR1NUX1RZUEVfREVWSUNFKQotCi0gICAgIHN0YXRpYyBHc3RFbGVtZW50ICpnc3RfdGVzdF9kZXZpY2VfY3JlYXRlX2VsZW1lbnQgKEdzdERldmljZSAqIGRldmljZSwKLSAgICBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIHJldHVybiBnc3RfYmluX25ldyAobmFtZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Rlc3RfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQgKEdzdERldmljZSAqIGRldmljZSwgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGlmICghc3RyY21wIChHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSwgInJlY29uZmlndXJhYmxlIikpCi0gICAgcmV0dXJuIFRSVUU7Ci0gIGVsc2UKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9kZXZpY2VfY2xhc3NfaW5pdCAoR3N0VGVzdERldmljZUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdERldmljZUNsYXNzICpkY2xhc3MgPSBHU1RfREVWSUNFX0NMQVNTIChrbGFzcyk7Ci0KLSAgZGNsYXNzLT5jcmVhdGVfZWxlbWVudCA9IGdzdF90ZXN0X2RldmljZV9jcmVhdGVfZWxlbWVudDsKLSAgZGNsYXNzLT5yZWNvbmZpZ3VyZV9lbGVtZW50ID0gZ3N0X3Rlc3RfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9kZXZpY2VfaW5pdCAoR3N0VGVzdERldmljZSAqIHNlbGYpCi17Ci19Ci0KLSNkZWZpbmUgREVWSUNFX0NMQVNTICJUZXN0MC9UZXN0MS9UZXN0Mi9UZXN0My9UZXN0NC9UZXN0RGV2IgotI2RlZmluZSBESVNQTEFZX05BTUUgIlRlc3QgZGV2aWNlIgotCi1zdGF0aWMgR3N0RGV2aWNlICoKLXRlc3RfZGV2aWNlX25ldyAodm9pZCkKLXsKLSAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby90ZXN0Iik7Ci0gIEdzdERldmljZSAqZGV2aWNlID0gZ19vYmplY3RfbmV3IChnc3RfdGVzdF9kZXZpY2VfZ2V0X3R5cGUgKCksICJjYXBzIiwgY2FwcywKLSAgICAgICJkaXNwbGF5LW5hbWUiLCBESVNQTEFZX05BTUUsICJkZXZpY2UtY2xhc3MiLCBERVZJQ0VfQ0xBU1MsIE5VTEwpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICByZXR1cm4gZGV2aWNlOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZXZpY2UpCi17Ci0gIEdzdERldmljZSAqZGV2aWNlID0gdGVzdF9kZXZpY2VfbmV3ICgpOwotICBHc3RDYXBzICpjYXBzOwotICBnY2hhciAqZGlzcGxheV9uYW1lOwotICBnY2hhciAqZGV2aWNlX2NsYXNzOwotICBHc3RDYXBzICpjb21wYXJlX2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8vdGVzdCIpOwotICBHc3RFbGVtZW50ICplbGVtZW50OwotCi0gIGNhcHMgPSBnc3RfZGV2aWNlX2dldF9jYXBzIChkZXZpY2UpOwotICBkaXNwbGF5X25hbWUgPSBnc3RfZGV2aWNlX2dldF9kaXNwbGF5X25hbWUgKGRldmljZSk7Ci0gIGRldmljZV9jbGFzcyA9IGdzdF9kZXZpY2VfZ2V0X2RldmljZV9jbGFzcyAoZGV2aWNlKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChESVNQTEFZX05BTUUsIGRpc3BsYXlfbmFtZSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKERFVklDRV9DTEFTUywgZGV2aWNlX2NsYXNzKTsKLSAgZ3N0X2NoZWNrX2NhcHNfZXF1YWwgKGNhcHMsIGNvbXBhcmVfY2Fwcyk7Ci0KLSAgZ19mcmVlIChkaXNwbGF5X25hbWUpOwotICBnX2ZyZWUgKGRldmljZV9jbGFzcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2RldmljZV9oYXNfY2xhc3NlcyAoZGV2aWNlLCAiVGVzdDEiKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGV2aWNlX2hhc19jbGFzc2VzIChkZXZpY2UsICJUZXN0Mi9UZXN0MSIpKTsKLQotICBlbGVtZW50ID0gZ3N0X2RldmljZV9jcmVhdGVfZWxlbWVudCAoZGV2aWNlLCAicmVjb25maWd1cmFibGUiKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19CSU4gKGVsZW1lbnQpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2RldmljZV9yZWNvbmZpZ3VyZV9lbGVtZW50IChkZXZpY2UsIGVsZW1lbnQpKTsKLQotICBnc3RfZWxlbWVudF9zZXRfbmFtZSAoZWxlbWVudCwgIm5vLW5vIik7Ci0KLSAgZmFpbF91bmxlc3MgKCFnc3RfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQgKGRldmljZSwgZWxlbWVudCkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjb21wYXJlX2NhcHMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChkZXZpY2UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3REZXZpY2VQcm92aWRlcgotewotICBHc3REZXZpY2VQcm92aWRlciBwYXJlbnQ7Ci0KLX0gR3N0VGVzdERldmljZVByb3ZpZGVyOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdERldmljZVByb3ZpZGVyQ2xhc3MKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19IEdzdFRlc3REZXZpY2VQcm92aWRlckNsYXNzOwotCi1HVHlwZSBnc3RfdGVzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi0KLUdfREVGSU5FX1RZUEUgKEdzdFRlc3REZXZpY2VQcm92aWRlciwgZ3N0X3Rlc3RfZGV2aWNlX3Byb3ZpZGVyLAotICAgIEdTVF9UWVBFX0RFVklDRV9QUk9WSURFUikKLQotCi0gICAgIHN0YXRpYyBHTGlzdCAqZGV2aWNlcyA9IE5VTEw7Ci0KLSAgICAgc3RhdGljIEdMaXN0ICpnc3RfdGVzdF9kZXZpY2VfcHJvdmlkZXJfcHJvYmUgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpCi17Ci0gIEdMaXN0ICpkZXZzOwotCi0gIGRldnMgPSBnX2xpc3RfY29weSAoZGV2aWNlcyk7Ci0gIGdfbGlzdF9mb3JlYWNoIChkZXZzLCAoR0Z1bmMpIGdzdF9vYmplY3RfcmVmLCBOVUxMKTsKLQotICByZXR1cm4gZGV2czsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2RldmljZV9wcm92aWRlcl9jbGFzc19pbml0IChHc3RUZXN0RGV2aWNlUHJvdmlkZXJDbGFzcyAqIGtsYXNzKQotewotICBHc3REZXZpY2VQcm92aWRlckNsYXNzICpkcGNsYXNzID0gR1NUX0RFVklDRV9QUk9WSURFUl9DTEFTUyAoa2xhc3MpOwotCi0gIGRwY2xhc3MtPnByb2JlID0gZ3N0X3Rlc3RfZGV2aWNlX3Byb3ZpZGVyX3Byb2JlOwotCi0gIGdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZHBjbGFzcywKLSAgICAgICJUZXN0IERldmljZSBQcm92aWRlciIsICJUZXN0MC9UZXN0MS9UZXN0Mi9UZXN0My9UZXN0UHJvdmlkZXIiLAotICAgICAgIkxpc3QgYnV0IGRvZXMgTk9UIG1vbml0b3IgdGVzdCBkZXZpY2VzIiwKLSAgICAgICJPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9kZXZpY2VfcHJvdmlkZXJfaW5pdCAoR3N0VGVzdERldmljZVByb3ZpZGVyICogc2VsZikKLXsKLX0KLQotc3RhdGljIHZvaWQKLXJlZ2lzdGVyX3Rlc3RfZGV2aWNlX3Byb3ZpZGVyICh2b2lkKQotewotICBnc3RfZGV2aWNlX3Byb3ZpZGVyX3JlZ2lzdGVyIChOVUxMLCAidGVzdGRldmljZXByb3ZpZGVyIiwgMSwKLSAgICAgIGdzdF90ZXN0X2RldmljZV9wcm92aWRlcl9nZXRfdHlwZSAoKSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5KQotewotICBHc3REZXZpY2VQcm92aWRlciAqZHAsICpkcDI7Ci0gIEdMaXN0ICpmYWN0b3JpZXM7Ci0gIEdzdERldmljZVByb3ZpZGVyRmFjdG9yeSAqZjsKLQotICByZWdpc3Rlcl90ZXN0X2RldmljZV9wcm92aWRlciAoKTsKLQotICBmYWN0b3JpZXMgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfbGlzdF9nZXRfZGV2aWNlX3Byb3ZpZGVycyAoMSk7Ci0KLSAgZmFpbF91bmxlc3MgKGZhY3RvcmllcyAhPSBOVUxMKTsKLQotICBmID0gZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2ZpbmQgKCJ0ZXN0ZGV2aWNlcHJvdmlkZXIiKTsKLSAgZmFpbF91bmxlc3MgKGYgIT0gTlVMTCk7Ci0KLSAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAoZmFjdG9yaWVzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzIChmLCAiVGVzdDIiKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaGFzX2NsYXNzZXMgKGYsICJUZXN0Mi9UZXN0MCIpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfaGFzX2NsYXNzZXMgKGYsCi0gICAgICAgICAgIlRlc3QyL1Rlc3ROL1Rlc3QwIikpOwotICBmYWlsX3VubGVzcyAoIWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3NlcyAoZiwgIlRlc3ROIikpOwotICBmYWlsX3VubGVzcyAoIWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9oYXNfY2xhc3NlcyAoZiwgIlRlc3QiKSk7Ci0KLSAgZHAgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0IChmKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChmKTsKLQotICBkcDIgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2J5X25hbWUgKCJ0ZXN0ZGV2aWNlcHJvdmlkZXIiKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoZHAsIGRwMik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZHApOwotICBnc3Rfb2JqZWN0X3VucmVmIChkcDIpOwotCi0gIGRwMiA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfYnlfbmFtZSAoInRlc3RkZXZpY2Vwcm92aWRlciIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoZHAsIGRwMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRwMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGV2aWNlX3Byb3ZpZGVyKQotewotICBHc3REZXZpY2VQcm92aWRlciAqZHA7Ci0gIEdMaXN0ICpkZXZzOwotICBHc3RCdXMgKmJ1czsKLQotICByZWdpc3Rlcl90ZXN0X2RldmljZV9wcm92aWRlciAoKTsKLQotICBkcCA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfYnlfbmFtZSAoInRlc3RkZXZpY2Vwcm92aWRlciIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzIChkcCkgPT0gTlVMTCk7Ci0KLSAgZGV2aWNlcyA9IGdfbGlzdF9hcHBlbmQgKE5VTEwsIHRlc3RfZGV2aWNlX25ldyAoKSk7Ci0KLSAgZGV2cyA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2RldmljZXMgKGRwKTsKLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGRldnMpID09IDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoZGV2cy0+ZGF0YSwgZGV2aWNlcy0+ZGF0YSk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGRldnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0KLSAgZmFpbF9pZiAoZ3N0X2RldmljZV9wcm92aWRlcl9jYW5fbW9uaXRvciAoZHApKTsKLSAgZmFpbF9pZiAoZ3N0X2RldmljZV9wcm92aWRlcl9zdGFydCAoZHApKTsKLQotICBidXMgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9idXMgKGRwKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19CVVMgKGJ1cykpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKGRldmljZXMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRwKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdERldmljZVByb3ZpZGVyTW9uaXRvcgotewotICBHc3REZXZpY2VQcm92aWRlciBwYXJlbnQ7Ci0KLX0gR3N0VGVzdERldmljZVByb3ZpZGVyTW9uaXRvcjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3REZXZpY2VQcm92aWRlck1vbml0b3JDbGFzcwotewotICBHc3REZXZpY2VQcm92aWRlckNsYXNzIHBhcmVudF9jbGFzczsKLX0gR3N0VGVzdERldmljZVByb3ZpZGVyTW9uaXRvckNsYXNzOwotCi1HVHlwZSBnc3RfdGVzdF9kZXZpY2VfcHJvdmlkZXJfbW9uaXRvcl9nZXRfdHlwZSAodm9pZCk7Ci0KLQotR19ERUZJTkVfVFlQRSAoR3N0VGVzdERldmljZVByb3ZpZGVyTW9uaXRvciwgZ3N0X3Rlc3RfZGV2aWNlX3Byb3ZpZGVyX21vbml0b3IsCi0gICAgR1NUX1RZUEVfREVWSUNFX1BST1ZJREVSKQotCi0KLSAgICAgc3RhdGljIGdib29sZWFuCi0gICAgICAgICBnc3RfdGVzdF9kZXZpY2VfcHJvdmlkZXJfbW9uaXRvcl9zdGFydCAoR3N0RGV2aWNlUHJvdmlkZXIgKiBtb25pdG9yKQotewotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2RldmljZV9wcm92aWRlcl9tb25pdG9yX2NsYXNzX2luaXQgKEdzdFRlc3REZXZpY2VQcm92aWRlck1vbml0b3JDbGFzcyAqCi0gICAga2xhc3MpCi17Ci0gIEdzdERldmljZVByb3ZpZGVyQ2xhc3MgKmRwY2xhc3MgPSBHU1RfREVWSUNFX1BST1ZJREVSX0NMQVNTIChrbGFzcyk7Ci0KLSAgZHBjbGFzcy0+cHJvYmUgPSBnc3RfdGVzdF9kZXZpY2VfcHJvdmlkZXJfcHJvYmU7Ci0gIGRwY2xhc3MtPnN0YXJ0ID0gZ3N0X3Rlc3RfZGV2aWNlX3Byb3ZpZGVyX21vbml0b3Jfc3RhcnQ7Ci0KLSAgZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChkcGNsYXNzLAotICAgICAgIlRlc3QgRGV2aWNlIFByb3ZpZGVyIE1vbml0b3IiLAotICAgICAgIlRlc3QwL1Rlc3QxL1Rlc3QyL1Rlc3Q0L1Rlc3RQcm92aWRlck1vbml0b3IiLAotICAgICAgIkxpc3QgYW5kIG1vbml0b3JzIFRlc3QgZGV2aWNlcyIsCi0gICAgICAiT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfZGV2aWNlX3Byb3ZpZGVyX21vbml0b3JfaW5pdCAoR3N0VGVzdERldmljZVByb3ZpZGVyTW9uaXRvciAqIHNlbGYpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZWdpc3Rlcl90ZXN0X2RldmljZV9wcm92aWRlcl9tb25pdG9yICh2b2lkKQotewotICBnc3RfZGV2aWNlX3Byb3ZpZGVyX3JlZ2lzdGVyIChOVUxMLCAidGVzdGRldmljZXByb3ZpZGVybW9uaXRvciIsIDIsCi0gICAgICBnc3RfdGVzdF9kZXZpY2VfcHJvdmlkZXJfbW9uaXRvcl9nZXRfdHlwZSAoKSk7Ci19Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGV2aWNlX3Byb3ZpZGVyX21vbml0b3IpCi17Ci0gIEdzdERldmljZVByb3ZpZGVyICpkcDsKLSAgR0xpc3QgKmRldnM7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3REZXZpY2UgKm15ZGV2OwotICBHc3REZXZpY2UgKmRldjsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIHJlZ2lzdGVyX3Rlc3RfZGV2aWNlX3Byb3ZpZGVyX21vbml0b3IgKCk7Ci0KLSAgZGV2aWNlcyA9IGdfbGlzdF9hcHBlbmQgKE5VTEwsIHRlc3RfZGV2aWNlX25ldyAoKSk7Ci0KLSAgZHAgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2J5X25hbWUgKCJ0ZXN0ZGV2aWNlcHJvdmlkZXJtb25pdG9yIik7Ci0KLSAgYnVzID0gZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzIChkcCk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb3AgKGJ1cyk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9kZXZpY2VfcHJvdmlkZXJfY2FuX21vbml0b3IgKGRwKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0IChkcCkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9kZXZpY2VzIChkcCkgPT0gTlVMTCk7Ci0KLSAgZGV2cyA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2RldmljZXMgKGRwKTsKLSAgZmFpbF91bmxlc3MgKGRldnMgPT0gTlVMTCk7Ci0KLSAgbXlkZXYgPSB0ZXN0X2RldmljZV9uZXcgKCk7Ci0gIGZhaWxfdW5sZXNzIChnX29iamVjdF9pc19mbG9hdGluZyAobXlkZXYpKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAobXlkZXYsICJkZXYiLCAxKTsKLQotICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9hZGQgKGRwLCBteWRldik7Ci0gIGZhaWxfdW5sZXNzICghZ19vYmplY3RfaXNfZmxvYXRpbmcgKG15ZGV2KSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKG15ZGV2LCAiZGV2IiwgMik7Ci0KLSAgZGV2cyA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2RldmljZXMgKGRwKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAobXlkZXYsICJkZXYiLCAzKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChkZXZzKSwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19wb2ludGVyIChkZXZzLT5kYXRhLCBteWRldik7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGRldnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAobXlkZXYsICJkZXYiLCAyKTsKLQotICBtc2cgPSBnc3RfYnVzX3BvcCAoYnVzKTsKLSAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9ERVZJQ0VfQURERUQpOwotCi0gIGdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9hZGRlZCAobXNnLCAmZGV2KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIgKGRldiwgbXlkZXYpOwotICBnc3Rfb2JqZWN0X3VucmVmIChkZXYpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChteWRldiwgImRldiIsIDEpOwotCi0gIG1zZyA9IGdzdF9idXNfcG9wIChidXMpOwotICBmYWlsX3VubGVzcyAobXNnID09IE5VTEwpOwotCi0gIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX3JlbW92ZSAoZHAsIG15ZGV2KTsKLSAgZGV2cyA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2RldmljZXMgKGRwKTsKLSAgZmFpbF91bmxlc3MgKGRldnMgPT0gTlVMTCk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb3AgKGJ1cyk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfREVWSUNFX1JFTU9WRUQpOwotCi0gIGdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9yZW1vdmVkIChtc2csICZkZXYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoZGV2LCBteWRldik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKG15ZGV2LCAiZGV2IiwgMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRldik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIG1zZyA9IGdzdF9idXNfcG9wIChidXMpOwotICBmYWlsX3VubGVzcyAobXNnID09IE5VTEwpOwotCi0gIGdzdF9kZXZpY2VfcHJvdmlkZXJfc3RvcCAoZHApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChkcCwgIm1vbml0b3IiLCAyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZHApOwotCi0gIC8qIElzIHNpbmdsZXRvbiwgc28gc3lzdGVtIGtlZXBzIGEgcmVmICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGRwLCAibW9uaXRvciIsIDEpOwotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKGRldmljZXMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZXZpY2VfbW9uaXRvcikKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXIgKmRwLCAqZHAyOwotICBHc3REZXZpY2VNb25pdG9yICptb247Ci0gIEdMaXN0ICpkZXZzOwotICBndWludCBpZCwgaWQyOwotICBHc3REZXZpY2UgKm15ZGV2OwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3REZXZpY2UgKmRldjsKLQotICByZWdpc3Rlcl90ZXN0X2RldmljZV9wcm92aWRlciAoKTsKLSAgcmVnaXN0ZXJfdGVzdF9kZXZpY2VfcHJvdmlkZXJfbW9uaXRvciAoKTsKLQotICBkcCA9IGdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfYnlfbmFtZSAoInRlc3RkZXZpY2Vwcm92aWRlciIpOwotICBkcDIgPSBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X2J5X25hbWUgKCJ0ZXN0ZGV2aWNlcHJvdmlkZXJtb25pdG9yIik7Ci0KLSAgbW9uID0gZ3N0X2RldmljZV9tb25pdG9yX25ldyAoKTsKLQotICBkZXZpY2VzID0gZ19saXN0X2FwcGVuZCAoTlVMTCwgdGVzdF9kZXZpY2VfbmV3ICgpKTsKLQotICBkZXZzID0gZ3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZpY2VzIChtb24pOwotICBmYWlsX3VubGVzcyAoZGV2cyA9PSBOVUxMKTsKLQotICBpZCA9IGdzdF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyIChtb24sICJUZXN0UHJvdmlkZXIiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGlkID4gMCk7Ci0KLSAgZGV2cyA9IGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlcyAobW9uKTsKLSAgZmFpbF91bmxlc3MgKGRldnMgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyIChtb24sICJUZXN0RGV2aWNlIiwgTlVMTCkgPT0gMCk7Ci0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2RldmljZV9tb25pdG9yX3JlbW92ZV9maWx0ZXIgKG1vbiwgMCkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZGV2aWNlX21vbml0b3JfcmVtb3ZlX2ZpbHRlciAobW9uLCBpZCkpOwotCi0gIGlkID0gZ3N0X2RldmljZV9tb25pdG9yX2FkZF9maWx0ZXIgKG1vbiwgIlRlc3QzIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpZCA+IDApOwotICBkZXZzID0gZ3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZpY2VzIChtb24pOwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoZGV2cykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19wb2ludGVyIChkZXZzLT5kYXRhLCBkZXZpY2VzLT5kYXRhKTsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoZGV2cywgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLQotICBpZDIgPSBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlciAobW9uLCAiVGVzdDEiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGlkMiA+IDApOwotICBkZXZzID0gZ3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZpY2VzIChtb24pOwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoZGV2cykgPT0gMik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19wb2ludGVyIChkZXZzLT5kYXRhLCBkZXZpY2VzLT5kYXRhKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIgKGRldnMtPm5leHQtPmRhdGEsIGRldmljZXMtPmRhdGEpOwotICBnX2xpc3RfZnJlZV9mdWxsIChkZXZzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZGV2aWNlX21vbml0b3JfcmVtb3ZlX2ZpbHRlciAobW9uLCBpZCkpOwotCi0gIGRldnMgPSBnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXMgKG1vbik7Ci0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChkZXZzKSA9PSAyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIgKGRldnMtPmRhdGEsIGRldmljZXMtPmRhdGEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoZGV2cy0+bmV4dC0+ZGF0YSwgZGV2aWNlcy0+ZGF0YSk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGRldnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0KLQotICBmYWlsX3VubGVzcyAoZ3N0X2RldmljZV9tb25pdG9yX3N0YXJ0IChtb24pKTsKLQotICBkZXZzID0gZ3N0X2RldmljZV9tb25pdG9yX2dldF9kZXZpY2VzIChtb24pOwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoZGV2cykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19wb2ludGVyIChkZXZzLT5kYXRhLCBkZXZpY2VzLT5kYXRhKTsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoZGV2cywgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLQotICBnc3RfZGV2aWNlX21vbml0b3Jfc3RvcCAobW9uKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2RldmljZV9tb25pdG9yX3JlbW92ZV9maWx0ZXIgKG1vbiwgaWQyKSk7Ci0KLSAgaWQgPSBnc3RfZGV2aWNlX21vbml0b3JfYWRkX2ZpbHRlciAobW9uLCAiVGVzdDQiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGlkID4gMCk7Ci0KLSAgZGV2cyA9IGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlcyAobW9uKTsKLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGRldnMpID09IDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoZGV2cy0+ZGF0YSwgZGV2aWNlcy0+ZGF0YSk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGRldnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9kZXZpY2VfbW9uaXRvcl9zdGFydCAobW9uKSk7Ci0KLSAgZGV2cyA9IGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlcyAobW9uKTsKLSAgZmFpbF91bmxlc3MgKGRldnMgPT0gTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X2RldmljZV9tb25pdG9yX2dldF9idXMgKG1vbik7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb3AgKGJ1cyk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgPT0gTlVMTCk7Ci0KLSAgbXlkZXYgPSB0ZXN0X2RldmljZV9uZXcgKCk7Ci0gIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZCAoZHAyLCBteWRldik7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb3AgKGJ1cyk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfREVWSUNFX0FEREVEKTsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV9kZXZpY2VfYWRkZWQgKG1zZywgJmRldik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19wb2ludGVyIChkZXYsIG15ZGV2KTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZGV2KTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb3AgKGJ1cyk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgPT0gTlVMTCk7Ci0KLSAgZ3N0X2RldmljZV9wcm92aWRlcl9kZXZpY2VfcmVtb3ZlIChkcDIsIG15ZGV2KTsKLSAgZGV2cyA9IGdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfZGV2aWNlcyAobW9uKTsKLSAgZmFpbF91bmxlc3MgKGRldnMgPT0gTlVMTCk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb3AgKGJ1cyk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfREVWSUNFX1JFTU9WRUQpOwotCi0gIGdzdF9tZXNzYWdlX3BhcnNlX2RldmljZV9yZW1vdmVkIChtc2csICZkZXYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoZGV2LCBteWRldik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRldik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIG1zZyA9IGdzdF9idXNfcG9wIChidXMpOwotICBmYWlsX3VubGVzcyAobXNnID09IE5VTEwpOwotCi0KLSAgZ3N0X2RldmljZV9tb25pdG9yX3N0b3AgKG1vbik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAobW9uKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChkcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRwMik7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGRldmljZXMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0KLSAgLyogc2hvdWxkIHdvcmsgZmluZSB3aXRob3V0IGFueSBmaWx0ZXJzICovCi0gIG1vbiA9IGdzdF9kZXZpY2VfbW9uaXRvcl9uZXcgKCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGV2aWNlX21vbml0b3Jfc3RhcnQgKG1vbikpOwotICBnc3RfZGV2aWNlX21vbml0b3Jfc3RvcCAobW9uKTsKLSAgZ3N0X29iamVjdF91bnJlZiAobW9uKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfZGV2aWNlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdERldmljZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJkZXZpY2UgdGVzdHMiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RldmljZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZXZpY2VfcHJvdmlkZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGV2aWNlX3Byb3ZpZGVyX21vbml0b3IpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGV2aWNlX21vbml0b3IpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2RldmljZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI1MDViYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTAzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBnc3RlbGVtZW50LmM6IFVuaXQgdGVzdCBmb3IgR3N0RWxlbWVudAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkX3JlbW92ZV9wYWQpCi17Ci0gIEdzdEVsZW1lbnQgKmU7Ci0gIEdzdFBhZCAqcDsKLQotICAvKiBnZXR0aW5nIGFuIGV4aXN0aW5nIGVsZW1lbnQgY2xhc3MgaXMgY2hlYXRpbmcsIGJ1dCBlYXNpZXIgKi8KLSAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic291cmNlIik7Ci0KLSAgLyogY3JlYXRlIGEgbmV3IGZsb2F0aW5nIHBhZCB3aXRoIHJlZmNvdW50IDEgKi8KLSAgcCA9IGdzdF9wYWRfbmV3ICgic291cmNlIiwgR1NUX1BBRF9TUkMpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwLCAicGFkIiwgMSk7Ci0gIC8qIHJlZiBpdCBmb3Igb3Vyc2VsdmVzICovCi0gIGdzdF9vYmplY3RfcmVmIChwKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocCwgInBhZCIsIDIpOwotICAvKiBhZGRpbmcgaXQgc2lua3MgdGhlIHBhZCAtPiBub3QgZmxvYXRpbmcsIHNhbWUgcmVmY291bnQgKi8KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZSwgcCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHAsICJwYWQiLCAyKTsKLQotICAvKiByZW1vdmluZyBpdCByZWR1Y2VzIHRoZSByZWZjb3VudCAqLwotICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChlLCBwKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocCwgInBhZCIsIDEpOwotCi0gIC8qIGNsZWFuIHVwIG91ciBvd24gcmVmZXJlbmNlICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHApOwotICBnc3Rfb2JqZWN0X3VucmVmIChlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hZGRfcGFkX3VucmVmX2VsZW1lbnQpCi17Ci0gIEdzdEVsZW1lbnQgKmU7Ci0gIEdzdFBhZCAqcDsKLQotICAvKiBnZXR0aW5nIGFuIGV4aXN0aW5nIGVsZW1lbnQgY2xhc3MgaXMgY2hlYXRpbmcsIGJ1dCBlYXNpZXIgKi8KLSAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic291cmNlIik7Ci0KLSAgLyogY3JlYXRlIGEgbmV3IGZsb2F0aW5nIHBhZCB3aXRoIHJlZmNvdW50IDEgKi8KLSAgcCA9IGdzdF9wYWRfbmV3ICgic291cmNlIiwgR1NUX1BBRF9TUkMpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwLCAicGFkIiwgMSk7Ci0gIC8qIHJlZiBpdCBmb3Igb3Vyc2VsdmVzICovCi0gIGdzdF9vYmplY3RfcmVmIChwKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocCwgInBhZCIsIDIpOwotICAvKiBhZGRpbmcgaXQgc2lua3MgdGhlIHBhZCAtPiBub3QgZmxvYXRpbmcsIHNhbWUgcmVmY291bnQgKi8KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZSwgcCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHAsICJwYWQiLCAyKTsKLQotICAvKiB1bnJlZmZpbmcgdGhlIGVsZW1lbnQgc2hvdWxkIGNsZWFuIGl0IHVwICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGUpKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwLCAicGFkIiwgMSk7Ci0KLSAgLyogY2xlYW4gdXAgb3VyIG93biByZWZlcmVuY2UgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAocCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZXJyb3Jfbm9fYnVzKQotewotICBHc3RFbGVtZW50ICplOwotICBHc3RCdXMgKmJ1czsKLQotICBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKLQotICAvKiBnZXQgdGhlIGJ1cywgc2hvdWxkIGJlIE5VTEwgKi8KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoZSk7Ci0gIGZhaWxfaWYgKGJ1cyAhPSBOVUxMKTsKLQotICAvKiBJIGRvbid0IHdhbnQgZXJyb3JzIHNob3duICovCi0gIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdTVF9MRVZFTF9OT05FKTsKLQotICBHU1RfRUxFTUVOVF9FUlJPUiAoZSwgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKCJJIGNvdWxkIG5vdCByZWFkIiksICgiZGVidWciKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogbGluayBhbmQgcnVuIHR3byBlbGVtZW50cyB3aXRob3V0IHB1dHRpbmcgdGhlbSBpbiBhIHBpcGVsaW5lICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9saW5rKQotewotICBHc3RFbGVtZW50ICpzcmMsICpzaW5rOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic291cmNlIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCAic3JjIiwgc2luaywgInNpbmsiKSk7Ci0KLSAgLyogZG8gc2luayB0byBzb3VyY2Ugc3RhdGUgY2hhbmdlICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICAvKiB3YWl0IGZvciBwcmVyb2xsICovCi0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgLyogcGxheSBzb21lIG1vcmUgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDKTsKLQotICAvKiBhbmQgc3RvcCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssIEdTVF9TVEFURV9QQVVTRUQpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLwotICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNpbmssIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc2luaywgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAvIDIpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBnc3RfZWxlbWVudF91bmxpbmtfcGFkcyAoc3JjLCAic3JjIiwgc2luaywgInNpbmsiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogbGlua2luZyB0d28gZWxlbWVudHMgd2l0aG91dCBwYWRzIHNob3VsZCBmYWlsICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9saW5rX25vX3BhZHMpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7Ci0KLSAgc3JjID0gZ3N0X2Jpbl9uZXcgKCJzcmMiKTsKLSAgc2luayA9IGdzdF9iaW5fbmV3ICgic2luayIpOwotCi0gIGZhaWxfaWYgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUZXN0RWxlbWVudAotewotICBHc3RFbGVtZW50IHBhcmVudDsKLQotfSBHc3RUZXN0RWxlbWVudDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RFbGVtZW50Q2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudDsKLQotfSBHc3RUZXN0RWxlbWVudENsYXNzOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfZWxlbWVudF9jbGFzc19pbml0IChHc3RUZXN0RWxlbWVudENsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJUZXN0IGVsZW1lbnQiLAotICAgICAgIkVsZW1lbnQiLCAiRG9lcyBub3RoaW5nIiwgIkZvbyBCYXIgPGZvb0BiYXIuY29tPiIpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdAotICAgICAgICAgIChlbGVtZW50X2NsYXNzKSksIDApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgICAgICJ0ZXN0IikgPT0gTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgIGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgidGVzdCIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywgR1NUX0NBUFNfQU5ZKSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0Ci0gICAgICAgICAgKGVsZW1lbnRfY2xhc3MpKSwgMSk7Ci0KLSAgZmFpbF91bmxlc3MgKCh0ZW1wbCA9Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgInRlc3QiKSkgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19hbnkgKHRlbXBsLT5jYXBzKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgIGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgidGVzdDIiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsCi0gICAgICAgICAgR1NUX0NBUFNfQU5ZKSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0Ci0gICAgICAgICAgKGVsZW1lbnRfY2xhc3MpKSwgMik7Ci0KLSAgZmFpbF91bmxlc3MgKCh0ZW1wbCA9Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgInRlc3QyIikpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfYW55ICh0ZW1wbC0+Y2FwcykpOwotCi0gIC8qIEFkZCAidGVzdCIgYWdhaW4sIHdpdGggTk9ORSBjYXBzIHRoaXMgdGltZSAqLwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJ0ZXN0IiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLAotICAgICAgICAgIEdTVF9DQVBTX05PTkUpKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlX2xpc3QKLSAgICAgICAgICAoZWxlbWVudF9jbGFzcykpLCAyKTsKLQotICBmYWlsX3VubGVzcyAoKHRlbXBsID0KLSAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAidGVzdCIpKSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VtcHR5ICh0ZW1wbC0+Y2FwcykpOwotfQotCi1zdGF0aWMgR1R5cGUKLWdzdF90ZXN0X2VsZW1lbnRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBnc3RfdGVzdF9lbGVtZW50X3R5cGUgPSBHX1RZUEVfTk9ORTsKLQotICBpZiAoZ3N0X3Rlc3RfZWxlbWVudF90eXBlID09IEdfVFlQRV9OT05FKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBnc3RfdGVzdF9lbGVtZW50X2luZm8gPSB7Ci0gICAgICBzaXplb2YgKEdzdFRlc3RFbGVtZW50Q2xhc3MpLAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBiYXNlX2luaXQgKi8KLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogYmFzZV9maW5hbGl6ZSAqLwotICAgICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfdGVzdF9lbGVtZW50X2NsYXNzX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIHNpemVvZiAoR3N0VGVzdEVsZW1lbnQpLAotICAgICAgMCwKLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogaW5zdGFuY2VfaW5pdCAqLwotICAgICAgTlVMTAotICAgIH07Ci0KLSAgICBnc3RfdGVzdF9lbGVtZW50X3R5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9FTEVNRU5ULAotICAgICAgICAiR3N0VGVzdEVsZW1lbnQiLCAmZ3N0X3Rlc3RfZWxlbWVudF9pbmZvLCAwKTsKLSAgfQotICByZXR1cm4gZ3N0X3Rlc3RfZWxlbWVudF90eXBlOwotfQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdEVsZW1lbnQyCi17Ci0gIEdzdFRlc3RFbGVtZW50IHBhcmVudDsKLQotfSBHc3RUZXN0RWxlbWVudDI7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUZXN0RWxlbWVudDJDbGFzcwotewotICBHc3RUZXN0RWxlbWVudENsYXNzIHBhcmVudDsKLQotfSBHc3RUZXN0RWxlbWVudDJDbGFzczsKLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2VsZW1lbnQyX2NsYXNzX2luaXQgKEdzdFRlc3RFbGVtZW50MkNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJUZXN0IGVsZW1lbnQgMiIsCi0gICAgICAiRWxlbWVudCIsICJEb2VzIG5vdGhpbmciLCAiRm9vIEJhciA8Zm9vQGJhci5jb20+Iik7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0Ci0gICAgICAgICAgKGVsZW1lbnRfY2xhc3MpKSwgMik7Ci0KLSAgZmFpbF91bmxlc3MgKCh0ZW1wbCA9Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgInRlc3QiKSkgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lbXB0eSAodGVtcGwtPmNhcHMpKTsKLQotICBmYWlsX3VubGVzcyAoKHRlbXBsID0KLSAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAidGVzdDIiKSkgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19hbnkgKHRlbXBsLT5jYXBzKSk7Ci0KLSAgLyogQWRkICJ0ZXN0IiBwYWQgd2l0aCBBTlkgY2Fwcywgc2hvdWxkIGhhdmUgInRlc3QiIHBhZCB3aXRoIEVNUFRZIGNhcHMgYmVmb3JlICovCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInRlc3QiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsIEdTVF9DQVBTX0FOWSkpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdAotICAgICAgICAgIChlbGVtZW50X2NsYXNzKSksIDIpOwotCi0gIGZhaWxfdW5sZXNzICgodGVtcGwgPQotICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICJ0ZXN0IikpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfYW55ICh0ZW1wbC0+Y2FwcykpOwotCi0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgIGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgidGVzdDQiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsCi0gICAgICAgICAgR1NUX0NBUFNfQU5ZKSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZV9saXN0Ci0gICAgICAgICAgKGVsZW1lbnRfY2xhc3MpKSwgMyk7Ci0KLSAgZmFpbF91bmxlc3MgKCh0ZW1wbCA9Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgInRlc3Q0IikpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfYW55ICh0ZW1wbC0+Y2FwcykpOwotfQotCi1zdGF0aWMgR1R5cGUKLWdzdF90ZXN0X2VsZW1lbnQyX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZ3N0X3Rlc3RfZWxlbWVudDJfdHlwZSA9IEdfVFlQRV9OT05FOwotCi0gIGlmIChnc3RfdGVzdF9lbGVtZW50Ml90eXBlID09IEdfVFlQRV9OT05FKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBnc3RfdGVzdF9lbGVtZW50Ml9pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RUZXN0RWxlbWVudDJDbGFzcyksCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfaW5pdCAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBiYXNlX2ZpbmFsaXplICovCi0gICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF90ZXN0X2VsZW1lbnQyX2NsYXNzX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIHNpemVvZiAoR3N0VGVzdEVsZW1lbnQyKSwKLSAgICAgIDAsCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGluc3RhbmNlX2luaXQgKi8KLSAgICAgIE5VTEwKLSAgICB9OwotCi0gICAgZ3N0X3Rlc3RfZWxlbWVudDJfdHlwZSA9Ci0gICAgICAgIGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKGdzdF90ZXN0X2VsZW1lbnRfZ2V0X3R5cGUgKCksICJHc3RUZXN0RWxlbWVudDIiLAotICAgICAgICAmZ3N0X3Rlc3RfZWxlbWVudDJfaW5mbywgMCk7Ci0gIH0KLSAgcmV0dXJuIGdzdF90ZXN0X2VsZW1lbnQyX3R5cGU7Ci19Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFkX3RlbXBsYXRlcykKLXsKLSAgR3N0VGVzdEVsZW1lbnQgKnRlc3Q7Ci0gIEdzdFRlc3RFbGVtZW50MiAqdGVzdDI7Ci0KLSAgdGVzdCA9IGdfb2JqZWN0X25ldyAoZ3N0X3Rlc3RfZWxlbWVudF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIHRlc3QyID0gZ19vYmplY3RfbmV3IChnc3RfdGVzdF9lbGVtZW50Ml9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHRlc3QpOwotICBnX29iamVjdF91bnJlZiAodGVzdDIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIG5lZWQgdG8gcmV0dXJuIHRoZSBtZXNzYWdlIGhlcmUgYmVjYXVzZSBvYmplY3QsIHByb3BlcnR5IG5hbWUgYW5kIHZhbHVlCi0gKiBhcmUgb25seSB2YWxpZCBhcyBsb25nIGFzIHdlIGtlZXAgdGhlIG1lc3NhZ2UgYWxpdmUgKi8KLXN0YXRpYyBHc3RNZXNzYWdlICoKLWJ1c193YWl0X2Zvcl9ub3RpZnlfbWVzc2FnZSAoR3N0QnVzICogYnVzLCBHc3RFbGVtZW50ICoqIG9iaiwKLSAgICBjb25zdCBnY2hhciAqKiBwcm9wX25hbWUsIGNvbnN0IEdWYWx1ZSAqKiB2YWwpCi17Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLQotICBkbyB7Ci0gICAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKGJ1cywgLTEsIEdTVF9NRVNTQUdFX0FOWSk7Ci0gICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZKQotICAgICAgYnJlYWs7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIH0gd2hpbGUgKFRSVUUpOwotCi0gIGdzdF9tZXNzYWdlX3BhcnNlX3Byb3BlcnR5X25vdGlmeSAobXNnLCAoR3N0T2JqZWN0ICoqKSBvYmosIHByb3BfbmFtZSwgdmFsKTsKLSAgcmV0dXJuIG1zZzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHJvcGVydHlfbm90aWZ5X21lc3NhZ2UpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqaWRlbnRpdHk7Ci0gIGd1bG9uZyB3YXRjaF9pZDAsIHdhdGNoX2lkMSwgd2F0Y2hfaWQyLCBkZWVwX3dhdGNoX2lkMSwgZGVlcF93YXRjaF9pZDI7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGlkZW50aXR5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgaWRlbnRpdHkpOwotCi0gIGJ1cyA9IEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpOwotCi0gIC8qIG5lZWQgdG8gc2V0IHN0YXRlIHRvIFJFQURZLCBvdGhlcndpc2UgYnVzIHdpbGwgYmUgZmx1c2hpbmcgYW5kIGRpc2NhcmQKLSAgICogb3VyIG1lc3NhZ2VzICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7Ci0KLSAgd2F0Y2hfaWQwID0gZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaCAoaWRlbnRpdHksIE5VTEwsIEZBTFNFKTsKLQotICB3YXRjaF9pZDEgPSBnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNoIChpZGVudGl0eSwgInN5bmMiLCBGQUxTRSk7Ci0KLSAgd2F0Y2hfaWQyID0gZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaCAoaWRlbnRpdHksICJzaWxlbnQiLCBUUlVFKTsKLQotICBkZWVwX3dhdGNoX2lkMSA9Ci0gICAgICBnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2ggKHBpcGVsaW5lLCBOVUxMLCBUUlVFKTsKLQotICBkZWVwX3dhdGNoX2lkMiA9Ci0gICAgICBnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2ggKHBpcGVsaW5lLCAic2lsZW50IiwgRkFMU0UpOwotCi0gIC8qIE5vdyB0ZXN0IHByb3BlcnR5IGNoYW5nZXMgYW5kIGlmIHdlIGdldCB0aGUgbWVzc2FnZXMgd2UgZXhwZWN0LiBXZSByZWx5Ci0gICAqIG9uIHRoZSBzaWduYWxzIGJlaW5nIGZpcmVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZSBzZXQgdXAgaGVyZS4gKi8KLSAgewotICAgIGNvbnN0IEdWYWx1ZSAqdmFsOwotICAgIGNvbnN0IGdjaGFyICpuYW1lOwotICAgIEdzdE1lc3NhZ2UgKm1zZzsKLSAgICBHc3RFbGVtZW50ICpvYmo7Ci0KLSAgICAvKiBBIC0gVGhpcyBzaG91bGQgYmUgcGlja2VkIHVwIGJ5Li4uICovCi0gICAgZ19vYmplY3Rfc2V0IChpZGVudGl0eSwgImR1bXAiLCBUUlVFLCBOVUxMKTsKLSAgICAvKiAxKSB0aGUgY2F0Y2gtYWxsIG5vdGlmeSBvbiB0aGUgZWxlbWVudCAobm8gdmFsdWUpICovCi0gICAgbXNnID0gYnVzX3dhaXRfZm9yX25vdGlmeV9tZXNzYWdlIChidXMsICZvYmosICZuYW1lLCAmdmFsKTsKLSAgICBmYWlsX3VubGVzcyAob2JqID09IGlkZW50aXR5KTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChuYW1lLCAiZHVtcCIpOwotICAgIGZhaWxfdW5sZXNzICh2YWwgPT0gTlVMTCk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gICAgLyogMikgdGhlIGNhdGNoLWFsbCBkZWVwLW5vdGlmeSBvbiB0aGUgcGlwZWxpbmUgKHdpdGggdmFsdWUpICovCi0gICAgbXNnID0gYnVzX3dhaXRfZm9yX25vdGlmeV9tZXNzYWdlIChidXMsICZvYmosICZuYW1lLCAmdmFsKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChuYW1lLCAiZHVtcCIpOwotICAgIGZhaWxfdW5sZXNzIChvYmogPT0gaWRlbnRpdHkpOwotICAgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0JPT0xFQU4gKHZhbCkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbCksIFRSVUUpOwotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gICAgLyogQiAtIFRoaXMgc2hvdWxkIGJlIHBpY2tlZCB1cCBieS4uLiAqLwotICAgIGdfb2JqZWN0X3NldCAoaWRlbnRpdHksICJzeW5jIiwgVFJVRSwgTlVMTCk7Ci0gICAgLyogMSkgdGhlIGNhdGNoLWFsbCBub3RpZnkgb24gdGhlIGVsZW1lbnQgKG5vIHZhbHVlKSAqLwotICAgIG1zZyA9IGJ1c193YWl0X2Zvcl9ub3RpZnlfbWVzc2FnZSAoYnVzLCAmb2JqLCAmbmFtZSwgJnZhbCk7Ci0gICAgZmFpbF91bmxlc3MgKG9iaiA9PSBpZGVudGl0eSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobmFtZSwgInN5bmMiKTsKLSAgICBmYWlsX3VubGVzcyAodmFsID09IE5VTEwpOwotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICAgIC8qIDIpIHRoZSAic3luYyIgbm90aWZ5IG9uIHRoZSBlbGVtZW50IChubyB2YWx1ZSkgKi8KLSAgICBtc2cgPSBidXNfd2FpdF9mb3Jfbm90aWZ5X21lc3NhZ2UgKGJ1cywgJm9iaiwgJm5hbWUsICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzIChvYmogPT0gaWRlbnRpdHkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKG5hbWUsICJzeW5jIik7Ci0gICAgZmFpbF91bmxlc3MgKHZhbCA9PSBOVUxMKTsKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgICAvKiAzKSB0aGUgY2F0Y2gtYWxsIGRlZXAtbm90aWZ5IG9uIHRoZSBwaXBlbGluZSAod2l0aCB2YWx1ZSkgKi8KLSAgICBtc2cgPSBidXNfd2FpdF9mb3Jfbm90aWZ5X21lc3NhZ2UgKGJ1cywgJm9iaiwgJm5hbWUsICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKG5hbWUsICJzeW5jIik7Ci0gICAgZmFpbF91bmxlc3MgKG9iaiA9PSBpZGVudGl0eSk7Ci0gICAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfQk9PTEVBTiAodmFsKSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsKSwgVFJVRSk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgICAvKiBDIC0gVGhpcyBzaG91bGQgYmUgcGlja2VkIHVwIGJ5Li4uICovCi0gICAgZ19vYmplY3Rfc2V0IChpZGVudGl0eSwgInNpbGVudCIsIEZBTFNFLCBOVUxMKTsKLSAgICAvKiAxKSB0aGUgY2F0Y2gtYWxsIG5vdGlmeSBvbiB0aGUgZWxlbWVudCAobm8gdmFsdWUpICovCi0gICAgbXNnID0gYnVzX3dhaXRfZm9yX25vdGlmeV9tZXNzYWdlIChidXMsICZvYmosICZuYW1lLCAmdmFsKTsKLSAgICBmYWlsX3VubGVzcyAob2JqID09IGlkZW50aXR5KTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChuYW1lLCAic2lsZW50Iik7Ci0gICAgZmFpbF91bmxlc3MgKHZhbCA9PSBOVUxMKTsKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgICAvKiAyKSB0aGUgInNpbGVudCIgbm90aWZ5IG9uIHRoZSBlbGVtZW50ICh3aXRoIHZhbHVlKSAqLwotICAgIG1zZyA9IGJ1c193YWl0X2Zvcl9ub3RpZnlfbWVzc2FnZSAoYnVzLCAmb2JqLCAmbmFtZSwgJnZhbCk7Ci0gICAgZmFpbF91bmxlc3MgKG9iaiA9PSBpZGVudGl0eSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobmFtZSwgInNpbGVudCIpOwotICAgIGZhaWxfdW5sZXNzICh2YWwgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfQk9PTEVBTiAodmFsKSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsKSwgRkFMU0UpOwotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICAgIC8qIDMpIHRoZSBjYXRjaC1hbGwgZGVlcC1ub3RpZnkgb24gdGhlIHBpcGVsaW5lICh3aXRoIHZhbHVlKSAqLwotICAgIG1zZyA9IGJ1c193YWl0X2Zvcl9ub3RpZnlfbWVzc2FnZSAoYnVzLCAmb2JqLCAmbmFtZSwgJnZhbCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobmFtZSwgInNpbGVudCIpOwotICAgIGZhaWxfdW5sZXNzIChvYmogPT0gaWRlbnRpdHkpOwotICAgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0JPT0xFQU4gKHZhbCkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbCksIEZBTFNFKTsKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgICAvKiA0KSB0aGUgInNpbGVudCIgZGVlcC1ub3RpZnkgb24gdGhlIHBpcGVsaW5lICh3aXRob3V0IHZhbHVlKSAqLwotICAgIG1zZyA9IGJ1c193YWl0X2Zvcl9ub3RpZnlfbWVzc2FnZSAoYnVzLCAmb2JqLCAmbmFtZSwgJnZhbCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobmFtZSwgInNpbGVudCIpOwotICAgIGZhaWxfdW5sZXNzIChvYmogPT0gaWRlbnRpdHkpOwotICAgIGZhaWxfdW5sZXNzICh2YWwgPT0gTlVMTCk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIH0KLQotICBnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoIChpZGVudGl0eSwgd2F0Y2hfaWQwKTsKLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3Byb3BlcnR5X25vdGlmeV93YXRjaCAoaWRlbnRpdHksIHdhdGNoX2lkMSk7Ci0gIGdzdF9lbGVtZW50X3JlbW92ZV9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2ggKGlkZW50aXR5LCB3YXRjaF9pZDIpOwotICBnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoIChwaXBlbGluZSwgZGVlcF93YXRjaF9pZDEpOwotICBnc3RfZWxlbWVudF9yZW1vdmVfcHJvcGVydHlfbm90aWZ5X3dhdGNoIChwaXBlbGluZSwgZGVlcF93YXRjaF9pZDIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2VsZW1lbnRfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0RWxlbWVudCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJlbGVtZW50IHRlc3RzIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hZGRfcmVtb3ZlX3BhZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hZGRfcGFkX3VucmVmX2VsZW1lbnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZXJyb3Jfbm9fYnVzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xpbmspOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGlua19ub19wYWRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhZF90ZW1wbGF0ZXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHJvcGVydHlfbm90aWZ5X21lc3NhZ2UpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2VsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdGVsZW1lbnRmYWN0b3J5LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjMTI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0ZWxlbWVudGZhY3RvcnkuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogZ3N0ZWxlbWVudGZhY3RvcnkuYzogVW5pdCB0ZXN0IGZvciBHc3RFbGVtZW50RmFjdG9yeQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSAiLi4vLi4vZ3N0L2dzdF9wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDYgXSIpCi0gICAgKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIgImNoYW5uZWxzID0gKGludCkgWyAxLCA2IF0iKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9wYWRfdGVtcGxhdGUgKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsKQotewotICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqdGVtcGxhdGU7Ci0KLSAgdGVtcGxhdGUgPSBnX3NsaWNlX2R1cCAoR3N0U3RhdGljUGFkVGVtcGxhdGUsIHRtcGwpOwotICBmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXMgPSBnX2xpc3RfYXBwZW5kIChmYWN0b3J5LT5zdGF0aWNwYWR0ZW1wbGF0ZXMsCi0gICAgICB0ZW1wbGF0ZSk7Ci0gIGZhY3RvcnktPm51bXBhZHRlbXBsYXRlcysrOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudEZhY3RvcnkgKgotc2V0dXBfZmFjdG9yeSAodm9pZCkKLXsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZTsKLSAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7Ci0KLSAgZmVhdHVyZSA9IGdfb2JqZWN0X25ld3YgKEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSwgMCwgTlVMTCk7Ci0gIGdzdF9wbHVnaW5fZmVhdHVyZV9zZXRfbmFtZSAoZmVhdHVyZSwgInRlc3QiKTsKLQotICBmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWV9DQVNUIChmZWF0dXJlKTsKLSNpZiAwCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoZmFjdG9yeSwgInRlc3QiLCAidGVzdCIsICJ0ZXN0IiwgInRlc3QiKTsKLSNlbmRpZgotCi0gIHNldHVwX3BhZF90ZW1wbGF0ZSAoZmFjdG9yeSwgJnNpbmtfdGVtcGxhdGUpOwotICBzZXR1cF9wYWRfdGVtcGxhdGUgKGZhY3RvcnksICZzcmNfdGVtcGxhdGUpOwotCi0gIHJldHVybiBmYWN0b3J5OwotfQotCi0vKiBjcmVhdGUgYSBiYXNpYyBmYWN0b3J5ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jcmVhdGUpCi17Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OwotCi0gIGZhY3RvcnkgPSBzZXR1cF9mYWN0b3J5ICgpOwotICBmYWlsX2lmIChmYWN0b3J5ID09IE5VTEwpOwotCi0gIGdfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0IGlmIHRoZSBmYWN0b3J5IGNhbiBhY2NlcHQgc29tZSBjYXBzICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jYW5fc2lua19hbnlfY2FwcykKLXsKLSAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdib29sZWFuIHJlczsKLQotICBmYWN0b3J5ID0gc2V0dXBfZmFjdG9yeSAoKTsKLSAgZmFpbF9pZiAoZmFjdG9yeSA9PSBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtcmF3Iik7Ci0gIGZhaWxfaWYgKGNhcHMgPT0gTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYW55X2NhcHMgKGZhY3RvcnksIGNhcHMpOwotICBmYWlsX2lmICghcmVzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0IGlmIHRoZSBmYWN0b3J5IGlzIGNvbXBhdGlibGUgd2l0aCBzb21lIGNhcHMgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Nhbl9zaW5rX2FsbF9jYXBzKQotewotICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGZhY3RvcnkgPSBzZXR1cF9mYWN0b3J5ICgpOwotICBmYWlsX2lmIChmYWN0b3J5ID09IE5VTEwpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC1yYXciKTsKLSAgZmFpbF9pZiAoY2FwcyA9PSBOVUxMKTsKLSAgcmVzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc2lua19hbGxfY2FwcyAoZmFjdG9yeSwgY2Fwcyk7Ci0gIGZhaWxfaWYgKHJlcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBnX29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogY2hlY2sgaWYgdGhlIGVsZW1lbnRmYWN0b3J5IG9mIGEgY2xhc3MgaXMgZmlsbGVkIChzZWUgIzEzMTA3OSkgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzOwotICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSwgKnRtcDsKLSAgR1R5cGUgdHlwZTsKLQotICBHU1RfREVCVUcgKCJmaW5kaW5nIGZhY3RvcnkgZm9yIHF1ZXVlIik7Ci0gIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCJxdWV1ZSIpOwotICBmYWlsX2lmIChmYWN0b3J5ID09IE5VTEwpOwotCi0gIC8qIGl0IG1heSBhbHJlYWR5IGJlIGxvYWRlZCBpZiBjaGVjayBpcyBiZWluZyBydW4gd2l0aCBDS19GT1JLPW5vICovCi0gIGlmICghR1NUX1BMVUdJTl9GRUFUVVJFIChmYWN0b3J5KS0+bG9hZGVkKSB7Ci0gICAgR1NUX0RFQlVHICgiZ2V0dGluZyB0aGUgdHlwZSIpOwotICAgIC8qIGZlYXR1cmUgaXMgbm90IGxvYWRlZCwgc2hvdWxkIHJldHVybiAwIGFzIHRoZSB0eXBlICovCi0gICAgdHlwZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZSAoZmFjdG9yeSk7Ci0gICAgZmFpbF9pZiAodHlwZSAhPSAwKTsKLSAgfQotCi0gIEdTVF9ERUJVRyAoIm5vdyBsb2FkaW5nIHRoZSBwbHVnaW4iKTsKLSAgdG1wID0KLSAgICAgIEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkIChHU1RfUExVR0lOX0ZFQVRVUkUKLSAgICAgICAgICAoZmFjdG9yeSkpKTsKLSAgZmFpbF9pZiAodG1wID09IE5VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGZhY3RvcnkpOwotICBmYWN0b3J5ID0gdG1wOwotCi0gIC8qIGZlYXR1cmUgaXMgbm93IGxvYWRlZCAqLwotICB0eXBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVudF90eXBlIChmYWN0b3J5KTsKLSAgZmFpbF9pZiAodHlwZSA9PSAwKTsKLQotICBrbGFzcyA9IGdfdHlwZV9jbGFzc19yZWYgKGZhY3RvcnktPnR5cGUpOwotICBmYWlsX2lmIChrbGFzcyA9PSBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJjaGVja2luZyB0aGUgZWxlbWVudCBmYWN0b3J5IGNsYXNzIGZpZWxkIik7Ci0gIC8qIGFuZCBlbGVtZW50ZmFjdG9yeSBpcyBmaWxsZWQgaW4gKi8KLSAgZmFpbF9pZiAoa2xhc3MtPmVsZW1lbnRmYWN0b3J5ID09IE5VTEwpOwotICBmYWlsX2lmIChrbGFzcy0+ZWxlbWVudGZhY3RvcnkgIT0gZmFjdG9yeSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZmFjdG9yeSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2VsZW1lbnRfZmFjdG9yeV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RFbGVtZW50RmFjdG9yeSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJlbGVtZW50LWZhY3RvcnkgdGVzdHMiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NsYXNzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NyZWF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jYW5fc2lua19hbnlfY2Fwcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jYW5fc2lua19hbGxfY2Fwcyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfZWxlbWVudF9mYWN0b3J5KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RldmVudC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTNiNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdGV2ZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0gKgotICogZ3N0ZXZlbnQuYzogVW5pdCB0ZXN0IGZvciBldmVudCBoYW5kbGluZwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1HU1RfU1RBUlRfVEVTVCAoY3JlYXRlX2V2ZW50cykKLXsKLSAgR3N0RXZlbnQgKmV2ZW50LCAqZXZlbnQyOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICAvKiBGTFVTSF9TVEFSVCAqLwotICB7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpOwotICAgIGZhaWxfaWYgKGV2ZW50ID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9GTFVTSF9TVEFSVCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9JU19VUFNUUkVBTSAoZXZlbnQpKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0gKGV2ZW50KSk7Ci0gICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLSAgLyogRkxVU0hfU1RPUCAqLwotICB7Ci0gICAgZ2Jvb2xlYW4gcmVzZXRfdGltZTsKLQotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKTsKLSAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRkxVU0hfU1RPUCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9JU19VUFNUUkVBTSAoZXZlbnQpKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0gKGV2ZW50KSk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpOwotCi0gICAgZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AgKGV2ZW50LCAmcmVzZXRfdGltZSk7Ci0gICAgZmFpbF91bmxlc3MgKHJlc2V0X3RpbWUgPT0gVFJVRSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLQotICAvKiBTRUxFQ1RfU1RSRUFNUyAqLwotICB7Ci0gICAgR0xpc3QgKnN0cmVhbXMgPSBOVUxMOwotICAgIEdMaXN0ICpyZXMgPSBOVUxMOwotICAgIEdMaXN0ICp0bXA7Ci0gICAgc3RyZWFtcyA9IGdfbGlzdF9hcHBlbmQgKHN0cmVhbXMsIChncG9pbnRlcikgInN0cmVhbTEiKTsKLSAgICBzdHJlYW1zID0gZ19saXN0X2FwcGVuZCAoc3RyZWFtcywgKGdwb2ludGVyKSAic3RyZWFtMiIpOwotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtcyAoc3RyZWFtcyk7Ci0gICAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NFTEVDVF9TVFJFQU1TKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOwotCi0gICAgZ3N0X2V2ZW50X3BhcnNlX3NlbGVjdF9zdHJlYW1zIChldmVudCwgJnJlcyk7Ci0gICAgZmFpbF9pZiAocmVzID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKHJlcyksIDIpOwotICAgIHRtcCA9IHJlczsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXAtPmRhdGEsICJzdHJlYW0xIik7Ci0gICAgdG1wID0gdG1wLT5uZXh0OwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcC0+ZGF0YSwgInN0cmVhbTIiKTsKLQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gICAgZ19saXN0X2ZyZWUgKHN0cmVhbXMpOwotICAgIGdfbGlzdF9mcmVlX2Z1bGwgKHJlcywgZ19mcmVlKTsKLSAgfQotCi0gIC8qIFNUUkVBTV9HUk9VUF9ET05FICovCi0gIHsKLSAgICBndWludCBncm91cF9pZCA9IDA7Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX2dyb3VwX2RvbmUgKDB4NDIpOwotICAgIGZhaWxfaWYgKGV2ZW50ID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TVFJFQU1fR1JPVVBfRE9ORSk7Ci0gICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9ncm91cF9kb25lIChldmVudCwgJmdyb3VwX2lkKTsKLSAgICBmYWlsX3VubGVzcyAoZ3JvdXBfaWQgPT0gMHg0Mik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLQotICAvKiBFT1MgKi8KLSAgewotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gICAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0VPUyk7Ci0gICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLSAgLyogR0FQICovCi0gIHsKLSAgICBHc3RDbG9ja1RpbWUgdHMgPSAwLCBkdXIgPSAwOwotCi0gICAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfZXZlbnRfbmV3X2dhcCAoR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX1NFQ09ORCkpOwotCi0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2dhcCAoOTAgKiBHU1RfU0VDT05ELCBHU1RfU0VDT05EKTsKLSAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfR0FQKTsKLSAgICBmYWlsX2lmIChHU1RfRVZFTlRfSVNfVVBTVFJFQU0gKGV2ZW50KSk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpKTsKLSAgICBnc3RfZXZlbnRfcGFyc2VfZ2FwIChldmVudCwgJnRzLCBOVUxMKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKHRzLCA5MCAqIEdTVF9TRUNPTkQpOwotICAgIGdzdF9ldmVudF9wYXJzZV9nYXAgKGV2ZW50LCAmdHMsICZkdXIpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoZHVyLCBHU1RfU0VDT05EKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgfQotICAvKiBTRUdNRU5UICovCi0gIHsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQsIHBhcnNlZDsKLQotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIHNlZ21lbnQucmF0ZSA9IDAuNTsKLSAgICBzZWdtZW50LmFwcGxpZWRfcmF0ZSA9IDEuMDsKLSAgICBzZWdtZW50LnN0YXJ0ID0gMTsKLSAgICBzZWdtZW50LnN0b3AgPSBHX01BWElOVDY0OwotICAgIHNlZ21lbnQudGltZSA9IDB4ZGVhZGJlZWY7Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotICAgIGZhaWxfaWYgKGV2ZW50ID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKTsKLSAgICBmYWlsX2lmIChHU1RfRVZFTlRfSVNfVVBTVFJFQU0gKGV2ZW50KSk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpKTsKLQotICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmcGFyc2VkKTsKLSAgICBmYWlsX3VubGVzcyAocGFyc2VkLnJhdGUgPT0gMC41KTsKLSAgICBmYWlsX3VubGVzcyAocGFyc2VkLmFwcGxpZWRfcmF0ZSA9PSAxLjApOwotICAgIGZhaWxfdW5sZXNzIChwYXJzZWQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgZmFpbF91bmxlc3MgKHBhcnNlZC5zdGFydCA9PSAxKTsKLSAgICBmYWlsX3VubGVzcyAocGFyc2VkLnN0b3AgPT0gR19NQVhJTlQ2NCk7Ci0gICAgZmFpbF91bmxlc3MgKHBhcnNlZC50aW1lID09IDB4ZGVhZGJlZWYpOwotCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLQotICAvKiBUQUdTICovCi0gIHsKLSAgICBHc3RUYWdMaXN0ICp0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICBHc3RUYWdMaXN0ICp0bDIgPSBOVUxMOwotCi0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3RhZyAodGFnbGlzdCk7Ci0gICAgZmFpbF9pZiAodGFnbGlzdCA9PSBOVUxMKTsKLSAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfVEFHKTsKLSAgICBmYWlsX2lmIChHU1RfRVZFTlRfSVNfVVBTVFJFQU0gKGV2ZW50KSk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpKTsKLQotICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmdGwyKTsKLSAgICBmYWlsX3VubGVzcyAodGFnbGlzdCA9PSB0bDIpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0KLSAgLyogUU9TICovCi0gIHsKLSAgICBHc3RRT1NUeXBlIHQxID0gR1NUX1FPU19UWVBFX1RIUk9UVExFLCB0MjsKLSAgICBnZG91YmxlIHAxID0gMS4wLCBwMjsKLSAgICBHc3RDbG9ja1RpbWVEaWZmIGN0ZDEgPSBHX0dJTlQ2NF9DT05TVEFOVCAoMTApLCBjdGQyOwotICAgIEdzdENsb2NrVGltZSBjdDEgPSBHX0dVSU5UNjRfQ09OU1RBTlQgKDIwKSwgY3QyOwotCi0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3FvcyAodDEsIHAxLCBjdGQxLCBjdDEpOwotICAgIGZhaWxfaWYgKGV2ZW50ID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9RT1MpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfVVBTVFJFQU0gKGV2ZW50KSk7Ci0gICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX0RPV05TVFJFQU0gKGV2ZW50KSk7Ci0gICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7Ci0KLSAgICBnc3RfZXZlbnRfcGFyc2VfcW9zIChldmVudCwgJnQyLCAmcDIsICZjdGQyLCAmY3QyKTsKLSAgICBmYWlsX3VubGVzcyAocDEgPT0gcDIpOwotICAgIGZhaWxfdW5sZXNzIChjdGQxID09IGN0ZDIpOwotICAgIGZhaWxfdW5sZXNzIChjdDEgPT0gY3QyKTsKLSAgICBnc3RfZXZlbnRfcGFyc2VfcW9zIChldmVudCwgJnQyLCAmcDIsICZjdGQyLCAmY3QyKTsKLSAgICBmYWlsX3VubGVzcyAodDIgPT0gR1NUX1FPU19UWVBFX1RIUk9UVExFKTsKLSAgICBmYWlsX3VubGVzcyAocDEgPT0gcDIpOwotICAgIGZhaWxfdW5sZXNzIChjdGQxID09IGN0ZDIpOwotICAgIGZhaWxfdW5sZXNzIChjdDEgPT0gY3QyKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICAgIGN0ZDEgPSBHX0dJTlQ2NF9DT05TVEFOVCAoLTEwKTsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfcW9zICh0MSwgcDEsIGN0ZDEsIGN0MSk7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3FvcyAoZXZlbnQsICZ0MiwgJnAyLCAmY3RkMiwgJmN0Mik7Ci0gICAgZmFpbF91bmxlc3MgKHQyID09IEdTVF9RT1NfVFlQRV9USFJPVFRMRSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfcW9zICh0MSwgcDEsIGN0ZDEsIGN0MSk7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3FvcyAoZXZlbnQsICZ0MiwgJnAyLCAmY3RkMiwgJmN0Mik7Ci0gICAgZmFpbF91bmxlc3MgKHQyID09IEdTVF9RT1NfVFlQRV9USFJPVFRMRSk7Ci0gICAgZmFpbF91bmxlc3MgKHAxID09IHAyKTsKLSAgICBmYWlsX3VubGVzcyAoY3RkMSA9PSBjdGQyKTsKLSAgICBmYWlsX3VubGVzcyAoY3QxID09IGN0Mik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLQotICAvKiBTRUVLICovCi0gIHsKLSAgICBnZG91YmxlIHJhdGU7Ci0gICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gICAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZSwgc3RvcF90eXBlOwotICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKLQotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrICgwLjUsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFLAotICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMSwgR1NUX1NFRUtfVFlQRV9OT05FLCAweGRlYWRiZWVmKTsKLQotICAgIGZhaWxfaWYgKGV2ZW50ID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUVLKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpOwotCi0gICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwgJmZsYWdzLCAmc3RhcnRfdHlwZSwgJnN0YXJ0LAotICAgICAgICAmc3RvcF90eXBlLCAmc3RvcCk7Ci0gICAgZmFpbF91bmxlc3MgKHJhdGUgPT0gMC41KTsKLSAgICBmYWlsX3VubGVzcyAoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpOwotICAgIGZhaWxfdW5sZXNzIChmbGFncyA9PSAoR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpKTsKLSAgICBmYWlsX3VubGVzcyAoc3RhcnRfdHlwZSA9PSBHU1RfU0VFS19UWVBFX1NFVCk7Ci0gICAgZmFpbF91bmxlc3MgKHN0YXJ0ID09IDEpOwotICAgIGZhaWxfdW5sZXNzIChzdG9wX3R5cGUgPT0gR1NUX1NFRUtfVFlQRV9OT05FKTsKLSAgICBmYWlsX3VubGVzcyAoc3RvcCA9PSAweGRlYWRiZWVmKTsKLQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0KLSAgLyogU1RSRUFNX1NUQVJUICovCi0gIHsKLSAgICBHc3RTdHJlYW1GbGFncyBmbGFncyA9IH5HU1RfU1RSRUFNX0ZMQUdfTk9ORTsKLQotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCI3ZjRiMmYwL2F1ZGlvXzAyIik7Ci0gICAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCk7Ci0gICAgZmFpbF9pZiAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9mbGFncyAoZXZlbnQsICZmbGFncyk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZmxhZ3MsIEdTVF9TVFJFQU1fRkxBR19OT05FKTsKLSAgICBnc3RfZXZlbnRfc2V0X3N0cmVhbV9mbGFncyAoZXZlbnQsIEdTVF9TVFJFQU1fRkxBR19TUEFSU0UpOwotICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fZmxhZ3MgKGV2ZW50LCAmZmxhZ3MpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZsYWdzLCBHU1RfU1RSRUFNX0ZMQUdfU1BBUlNFKTsKLSAgICBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0gICAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfZXZlbnRfc2V0X3N0cmVhbV9mbGFncyAoZXZlbnQsIEdTVF9TVFJFQU1fRkxBR19OT05FKSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLQotICAvKiBTVFJFQU1fQ09MTEVDVElPTiAqLwotICB7Ci0gICAgR3N0U3RyZWFtQ29sbGVjdGlvbiAqY29sbGVjdGlvbiwgKnJlcyA9IE5VTEw7Ci0gICAgR3N0U3RyZWFtICpzdHJlYW0xLCAqc3RyZWFtMjsKLSAgICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyOwotCi0gICAgLyogQ3JlYXRlIGEgY29sbGVjdGlvbiBvZiB0d28gc3RyZWFtcyAqLwotICAgIGNhcHMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL2NhcHMiKTsKLSAgICBjYXBzMiA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9vdGhlci1zdHJpbmciKTsKLQotICAgIHN0cmVhbTEgPSBnc3Rfc3RyZWFtX25ldyAoInN0cmVhbS0xIiwgY2FwczEsIEdTVF9TVFJFQU1fVFlQRV9BVURJTywgMCk7Ci0gICAgc3RyZWFtMiA9IGdzdF9zdHJlYW1fbmV3ICgic3RyZWFtLTIiLCBjYXBzMiwgR1NUX1NUUkVBTV9UWVBFX1ZJREVPLCAwKTsKLQotICAgIGNvbGxlY3Rpb24gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3ICgic29tZXRoaW5nIik7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtIChjb2xsZWN0aW9uLCBzdHJlYW0xKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtIChjb2xsZWN0aW9uLCBzdHJlYW0yKSk7Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX2NvbGxlY3Rpb24gKGNvbGxlY3Rpb24pOwotICAgIGZhaWxfdW5sZXNzIChldmVudCAhPSBOVUxMKTsKLQotICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbiAoZXZlbnQsICZyZXMpOwotICAgIGZhaWxfdW5sZXNzIChyZXMgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyA9PSBjb2xsZWN0aW9uKTsKLQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJlcyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoY29sbGVjdGlvbik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICB9Ci0KLSAgLyogTkFWSUdBVElPTiAqLwotICB7Ci0gICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LWdzdC1uYXZpZ2F0aW9uIiwgImV2ZW50IiwKLSAgICAgICAgR19UWVBFX1NUUklORywgImtleS1wcmVzcyIsICJrZXkiLCBHX1RZUEVfU1RSSU5HLCAibW9uIiwgTlVMTCk7Ci0gICAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwpOwotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uIChzdHJ1Y3R1cmUpOwotICAgIGZhaWxfaWYgKGV2ZW50ID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9OQVZJR0FUSU9OKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1VQU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpOwotICAgIGZhaWxfaWYgKEdTVF9FVkVOVF9JU19TRVJJQUxJWkVEIChldmVudCkpOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCkgPT0gc3RydWN0dXJlKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgfQotCi0gIC8qIFByb3RlY3Rpb24gKi8KLSAgewotICAgIEdzdEJ1ZmZlciAqZGF0YTsKLSAgICBHc3RNZW1vcnkgKm1lbTsKLSAgICBjb25zdCBnY2hhciAqcGFyc2VkX29yaWdpbjsKLSAgICBjb25zdCBnY2hhciAqcGFyc2VkX2lkOwotICAgIEdzdEJ1ZmZlciAqcGFyc2VkX2RhdGE7Ci0gICAgY29uc3QgZ2NoYXIgY2xlYXJrZXlfc3lzX2lkW10gPSAiNzhmMzIxNzAtZDg4My0xMWUwLTk1NzItMDgwMDIwMGM5YTY2IjsKLSAgICBnc2l6ZSBvZmZzZXQ7Ci0KLSAgICBkYXRhID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gICAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgNDAsIE5VTEwpOwotICAgIGdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSAoZGF0YSwgLTEsIG1lbSk7Ci0gICAgZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCA0MDsgb2Zmc2V0ICs9IDQpIHsKLSAgICAgIGdzdF9idWZmZXJfZmlsbCAoZGF0YSwgb2Zmc2V0LCAicHNzaSIsIDQpOwotICAgIH0KLSAgICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGRhdGEsICJkYXRhIiwgMSk7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3Byb3RlY3Rpb24gKGNsZWFya2V5X3N5c19pZCwgZGF0YSwgInRlc3QiKTsKLSAgICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKLSAgICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGRhdGEsICJkYXRhIiwgMik7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1BST1RFQ1RJT04pOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSk7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24gKGV2ZW50LCAmcGFyc2VkX2lkLCAmcGFyc2VkX2RhdGEsCi0gICAgICAgICZwYXJzZWRfb3JpZ2luKTsKLSAgICBmYWlsX2lmIChwYXJzZWRfaWQgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGdfc3RyY21wMCAoY2xlYXJrZXlfc3lzX2lkLCBwYXJzZWRfaWQpID09IDApOwotICAgIGZhaWxfaWYgKHBhcnNlZF9kYXRhID09IE5VTEwpOwotICAgIGZhaWxfaWYgKHBhcnNlZF9kYXRhICE9IGRhdGEpOwotICAgIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoZGF0YSwgImRhdGEiLCAyKTsKLSAgICBmYWlsX2lmIChwYXJzZWRfb3JpZ2luID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChnX3N0cmNtcDAgKCJ0ZXN0IiwgcGFyc2VkX29yaWdpbikgPT0gMCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChkYXRhLCAiZGF0YSIsIDEpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGRhdGEpOwotICB9Ci0KLSAgLyogQ3VzdG9tIGV2ZW50IHR5cGVzICovCi0gIHsKLSAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoImFwcGxpY2F0aW9uL3gtY3VzdG9tIik7Ci0gICAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwpOwotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sIHN0cnVjdHVyZSk7Ci0gICAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9JU19VUFNUUkVBTSAoZXZlbnQpKTsKLSAgICBmYWlsX2lmIChHU1RfRVZFTlRfSVNfRE9XTlNUUkVBTSAoZXZlbnQpKTsKLSAgICBmYWlsX2lmIChHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KSA9PSBzdHJ1Y3R1cmUpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfZXZlbnRfaGFzX25hbWUgKGV2ZW50LCAiYXBwbGljYXRpb24veC1jdXN0b20iKSk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgICAvKiBEZWNpZGVkIG5vdCB0byB0ZXN0IHRoZSBvdGhlciBjdXN0b20gZW51bSB0eXBlcywgYXMgdGhleQotICAgICAqIG9ubHkgZGlmZmVyIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgZW51bSBwYXNzZWQgdG8gZ3N0X2V2ZW50X25ld19jdXN0b20KLSAgICAgKi8KLSAgfQotCi0gIC8qIEV2ZW50IGNvcHlpbmcgKi8KLSAgewotICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgiYXBwbGljYXRpb24veC1jdXN0b20iKTsKLSAgICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCk7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9CT1RILCBzdHJ1Y3R1cmUpOwotCi0gICAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7Ci0gICAgZXZlbnQyID0gZ3N0X2V2ZW50X2NvcHkgKGV2ZW50KTsKLSAgICBmYWlsX2lmIChldmVudDIgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1RZUEUgKGV2ZW50MikpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfZXZlbnRfaGFzX25hbWUgKGV2ZW50LCAiYXBwbGljYXRpb24veC1jdXN0b20iKSk7Ci0KLSAgICAvKiBUaGUgc3RydWN0dXJlIHNob3VsZCBoYXZlIGJlZW4gZHVwbGljYXRlZCAqLwotICAgIGZhaWxfaWYgKGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCkgPT0KLSAgICAgICAgZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50MikpOwotCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudDIpOwotICB9Ci0KLSAgLyogTWFrZSBldmVudHMgd3JpdGFibGUgKi8KLSAgewotICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgiYXBwbGljYXRpb24veC1jdXN0b20iKTsKLSAgICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCk7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9CT1RILCBzdHJ1Y3R1cmUpOwotICAgIC8qIHJlZiB0aGUgZXZlbnQgc28gdGhhdCBpdCBiZWNvbWVzIG5vbi13cml0YWJsZSAqLwotICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgICBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0gICAgLyogdGhpcyBzaG91bGQgZmFpbCBpZiB0aGUgc3RydWN0dXJlIGlzbid0IHdyaXRhYmxlICovCi0gICAgQVNTRVJUX0NSSVRJQ0FMIChnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzICgoR3N0U3RydWN0dXJlICopCi0gICAgICAgICAgICBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9ldmVudF9oYXNfbmFtZSAoZXZlbnQsICJhcHBsaWNhdGlvbi94LWN1c3RvbSIpKTsKLQotICAgIC8qIG5vdyBtYWtlIHdyaXRhYmxlICovCi0gICAgZXZlbnQyID0KLSAgICAgICAgR1NUX0VWRU5UIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUIChldmVudCkpKTsKLSAgICBmYWlsX3VubGVzcyAoZXZlbnQgIT0gZXZlbnQyKTsKLSAgICAvKiB0aGlzIGZhaWwgaWYgdGhlIHN0cnVjdHVyZSBpc24ndCB3cml0YWJsZSAqLwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2FsbF9maWVsZHMgKChHc3RTdHJ1Y3R1cmUgKikKLSAgICAgICAgZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50MikpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfZXZlbnRfaGFzX25hbWUgKGV2ZW50MiwgImFwcGxpY2F0aW9uL3gtY3VzdG9tIikpOwotCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudDIpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdUaW1lVmFsIHNlbnRfZXZlbnRfdGltZTsKLXN0YXRpYyBHc3RFdmVudCAqZ290X2V2ZW50X2JlZm9yZV9xLCAqZ290X2V2ZW50X2FmdGVyX3E7Ci1zdGF0aWMgR1RpbWVWYWwgZ290X2V2ZW50X3RpbWU7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZXZlbnRfcHJvYmUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RNaW5pT2JqZWN0ICpkYXRhID0gR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEgKGluZm8pOwotICBnYm9vbGVhbiBiZWZvcmVfcSA9IChnYm9vbGVhbikgR1BPSU5URVJfVE9fSU5UICh1c2VyX2RhdGEpOwotCi0gIEdTVF9ERUJVRyAoImV2ZW50IHByb2JlIGNhbGxlZCAlcCIsIGRhdGEpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfSVNfRVZFTlQgKGRhdGEpKTsKLQotICBpZiAoYmVmb3JlX3EpIHsKLSAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChHU1RfRVZFTlQgKGRhdGEpKSkgewotICAgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNOgotICAgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0JPVEg6Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0I6Ci0gICAgICAgIGlmIChnb3RfZXZlbnRfYmVmb3JlX3EgIT0gTlVMTCkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZ3N0X2V2ZW50X3JlZiAoKEdzdEV2ZW50ICopIGRhdGEpOwotICAgICAgICBnX2dldF9jdXJyZW50X3RpbWUgKCZnb3RfZXZlbnRfdGltZSk7Ci0gICAgICAgIGdvdF9ldmVudF9iZWZvcmVfcSA9IEdTVF9FVkVOVCAoZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKEdTVF9FVkVOVCAoZGF0YSkpKSB7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTToKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQjoKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIOgotICAgICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09COgotICAgICAgICBpZiAoZ290X2V2ZW50X2FmdGVyX3EgIT0gTlVMTCkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZ3N0X2V2ZW50X3JlZiAoKEdzdEV2ZW50ICopIGRhdGEpOwotICAgICAgICBnX2dldF9jdXJyZW50X3RpbWUgKCZnb3RfZXZlbnRfdGltZSk7Ci0gICAgICAgIGdvdF9ldmVudF9hZnRlcl9xID0gR1NUX0VWRU5UIChkYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotCi10eXBlZGVmIHN0cnVjdAotewotICBHTXV0ZXggbG9jazsKLSAgR0NvbmQgY29uZDsKLSAgZ2Jvb2xlYW4gc2lnbmFsZWQ7Ci19IFNpZ25hbERhdGE7Ci0KLXN0YXRpYyB2b2lkCi1zaWduYWxfZGF0YV9pbml0IChTaWduYWxEYXRhICogZGF0YSkKLXsKLSAgR1NUX0RFQlVHICgiaW5pdCAlcCIsIGRhdGEpOwotICBnX211dGV4X2luaXQgKCZkYXRhLT5sb2NrKTsKLSAgZ19jb25kX2luaXQgKCZkYXRhLT5jb25kKTsKLSAgZGF0YS0+c2lnbmFsZWQgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLXNpZ25hbF9kYXRhX2NsZWFudXAgKFNpZ25hbERhdGEgKiBkYXRhKQotewotICBHU1RfREVCVUcgKCJmcmVlICVwIiwgZGF0YSk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZkYXRhLT5sb2NrKTsKLSAgZ19jb25kX2NsZWFyICgmZGF0YS0+Y29uZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zaWduYWxfZGF0YV9zaWduYWwgKFNpZ25hbERhdGEgKiBkYXRhKQotewotICBnX211dGV4X2xvY2sgKCZkYXRhLT5sb2NrKTsKLSAgZGF0YS0+c2lnbmFsZWQgPSBUUlVFOwotICBnX2NvbmRfYnJvYWRjYXN0ICgmZGF0YS0+Y29uZCk7Ci0gIEdTVF9ERUJVRyAoInNpZ25hbGluZyAlcCIsIGRhdGEpOwotICBnX211dGV4X3VubG9jayAoJmRhdGEtPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZAotc2lnbmFsX2RhdGFfd2FpdCAoU2lnbmFsRGF0YSAqIGRhdGEpCi17Ci0gIGdfbXV0ZXhfbG9jayAoJmRhdGEtPmxvY2spOwotICBHU1RfREVCVUcgKCJzaWduYWwgd2FpdCAlcCIsIGRhdGEpOwotICB3aGlsZSAoIWRhdGEtPnNpZ25hbGVkKQotICAgIGdfY29uZF93YWl0ICgmZGF0YS0+Y29uZCwgJmRhdGEtPmxvY2spOwotICBHU1RfREVCVUcgKCJzaWduYWwgd2FpdCBkb25lICVwIiwgZGF0YSk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmZGF0YS0+bG9jayk7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotc2lnbmFsX2Jsb2NrZWQgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBTaWduYWxEYXRhICpkYXRhID0gKFNpZ25hbERhdGEgKikgdXNlcl9kYXRhOwotCi0gIEdTVF9ERUJVRyAoInNpZ25hbCBjYWxsZWQgJXAiLCBkYXRhKTsKLSAgc2lnbmFsX2RhdGFfc2lnbmFsIChkYXRhKTsKLSAgR1NUX0RFQlVHICgic2lnbmFsIGRvbmUgJXAiLCBkYXRhKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9ldmVudAotICAgIChHc3RCaW4gKiBwaXBlbGluZSwgR3N0RXZlbnRUeXBlIHR5cGUsIEdzdFBhZCAqIHBhZCwKLSAgICBnYm9vbGVhbiBleHBlY3RfYmVmb3JlX3EsIEdzdFBhZCAqIGZha2Vfc3JjcGFkKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdFBhZCAqcGVlcjsKLSAgZ2ludCBpOwotICBTaWduYWxEYXRhIGRhdGE7Ci0gIGd1bG9uZyBpZDsKLQotICBnb3RfZXZlbnRfYmVmb3JlX3EgPSBnb3RfZXZlbnRfYWZ0ZXJfcSA9IE5VTEw7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgTlVMTCwgTlVMTCwKLSAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIEdTVF9ERUJVRyAoInRlc3QgZXZlbnQgY2FsbGVkIik7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAodHlwZSwKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgiYXBwbGljYXRpb24veC1jdXN0b20iKSk7Ci0gIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnNlbnRfZXZlbnRfdGltZSk7Ci0gIGdvdF9ldmVudF90aW1lLnR2X3NlYyA9IDA7Ci0gIGdvdF9ldmVudF90aW1lLnR2X3VzZWMgPSAwOwotCi0gIHNpZ25hbF9kYXRhX2luaXQgKCZkYXRhKTsKLQotICAvKiBXZSBibG9jayB0aGUgcGFkIHNvIHRoZSBzdHJlYW0gbG9jayBpcyByZWxlYXNlZCBhbmQgd2UgY2FuIHNlbmQgdGhlIGV2ZW50ICovCi0gIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKGZha2Vfc3JjcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSwKLSAgICAgIHNpZ25hbF9ibG9ja2VkLCAmZGF0YSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpZCAhPSAwKTsKLQotICBzaWduYWxfZGF0YV93YWl0ICgmZGF0YSk7Ci0KLSAgLyogV2Ugc2VuZCBvbiB0aGUgcGVlciBwYWQsIHNpbmNlIHRoZSBwYWQgaXMgYmxvY2tlZCAqLwotICBHU1RfREVCVUcgKCJzZW5kaW5nIGV2ZW50ICVwIiwgZXZlbnQpOwotICBmYWlsX3VubGVzcyAoKHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChwYWQpKSAhPSBOVUxMKTsKLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChwZWVyLCBldmVudCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChmYWtlX3NyY3BhZCwgaWQpOwotCi0gIGlmIChleHBlY3RfYmVmb3JlX3EpIHsKLSAgICAvKiBXYWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgdGhlIGV2ZW50IHRvIGFwcGVhciAqLwotICAgIGZvciAoaSA9IDA7IGkgPCA1MDA7IGkrKykgewotICAgICAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTAwKTsKLSAgICAgIGlmIChnb3RfZXZlbnRfYmVmb3JlX3EgIT0gTlVMTCkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGZhaWxfaWYgKGdvdF9ldmVudF9iZWZvcmVfcSA9PSBOVUxMLAotICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgZmFpbGVkIHRvIGFwcGVhciB1cHN0cmVhbSBvZiB0aGUgcXVldWUgIgotICAgICAgICAid2l0aGluIDUgc2Vjb25kcyIpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZ290X2V2ZW50X2JlZm9yZV9xKSA9PSB0eXBlKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBXYWl0IHVwIHRvIDEwIHNlY29uZHMgZm9yIHRoZSBldmVudCB0byBhcHBlYXIgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMgLyAxMDApOwotICAgICAgaWYgKGdvdF9ldmVudF9hZnRlcl9xICE9IE5VTEwpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBmYWlsX2lmIChnb3RfZXZlbnRfYWZ0ZXJfcSA9PSBOVUxMLAotICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgZmFpbGVkIHRvIGFwcGVhciBhZnRlciB0aGUgcXVldWUgd2l0aGluIDEwIHNlY29uZHMiKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGdvdF9ldmVudF9hZnRlcl9xKSA9PSB0eXBlKTsKLSAgfQotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgTlVMTCwgTlVMTCwKLSAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGlmIChnb3RfZXZlbnRfYmVmb3JlX3EpCi0gICAgZ3N0X2V2ZW50X3VucmVmIChnb3RfZXZlbnRfYmVmb3JlX3EpOwotICBpZiAoZ290X2V2ZW50X2FmdGVyX3EpCi0gICAgZ3N0X2V2ZW50X3VucmVmIChnb3RfZXZlbnRfYWZ0ZXJfcSk7Ci0KLSAgZ290X2V2ZW50X2JlZm9yZV9xID0gZ290X2V2ZW50X2FmdGVyX3EgPSBOVUxMOwotCi0gIHNpZ25hbF9kYXRhX2NsZWFudXAgKCZkYXRhKTsKLX0KLQotc3RhdGljIGdpbnQ2NAotdGltZWRpZmYgKEdUaW1lVmFsICogZW5kLCBHVGltZVZhbCAqIHN0YXJ0KQotewotICByZXR1cm4gKGVuZC0+dHZfc2VjIC0gc3RhcnQtPnR2X3NlYykgKiBHX1VTRUNfUEVSX1NFQyArCi0gICAgICAoZW5kLT50dl91c2VjIC0gc3RhcnQtPnR2X3VzZWMpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAoc2VuZF9jdXN0b21fZXZlbnRzKQotewotICAvKiBSdW4gc29tZSB0ZXN0cyBvbiBjdXN0b20gZXZlbnRzLiBDaGVja2luZyBmb3Igc2VyaWFsaXNhdGlvbiBhbmQgd2hhdG5vdC4KLSAgICogcGlwZWxpbmUgaXMgZmFrZXNyYyAhIHF1ZXVlICEgZmFrZXNpbmsgKi8KLSAgR3N0QmluICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqZmFrZXNyYywgKmZha2VzaW5rLCAqcXVldWU7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICBmYWlsX2lmICgocGlwZWxpbmUgPSAoR3N0QmluICopIGdzdF9waXBlbGluZV9uZXcgKCJ0ZXN0cGlwZSIpKSA9PSBOVUxMKTsKLSAgZmFpbF9pZiAoKGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCkpID09IE5VTEwpOwotICBmYWlsX2lmICgoZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpKSA9PSBOVUxMKTsKLSAgZmFpbF9pZiAoKHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAocGlwZWxpbmUsIGZha2VzcmMsIHF1ZXVlLCBmYWtlc2luaywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX21hbnkgKGZha2VzcmMsIHF1ZXVlLCBmYWtlc2luaywgTlVMTCkpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZha2VzaW5rKSwgInN5bmMiLCBGQUxTRSwgTlVMTCk7Ci0KLSAgLyogU2VuZCAxMDAgYnVmZmVycyBwZXIgc2VjICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZha2VzcmMpLCAic2lsZW50IiwgVFJVRSwgImRhdGFyYXRlIiwgMTAwLAotICAgICAgInNpemVtYXgiLCAxLCAic2l6ZXR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocXVldWUpLCAibWF4LXNpemUtYnVmZmVycyIsIDAsICJtYXgtc2l6ZS10aW1lIiwKLSAgICAgIChndWludDY0KSBHU1RfU0VDT05ELCAibWF4LXNpemUtYnl0ZXMiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmFrZXNpbmspLCAic2lsZW50IiwgVFJVRSwgInN5bmMiLCBUUlVFLCBOVUxMKTsKLQotICAvKiBhZGQgcGFkLXByb2JlcyB0byBmYWtzcmMuc3JjIGFuZCBmYWtlc2luay5zaW5rICovCi0gIGZhaWxfaWYgKChzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmFrZXNyYywgInNyYyIpKSA9PSBOVUxMKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEgsCi0gICAgICBldmVudF9wcm9iZSwgR0lOVF9UT19QT0lOVEVSIChUUlVFKSwgTlVMTCk7Ci0KLSAgZmFpbF9pZiAoKHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmFrZXNpbmssICJzaW5rIikpID09IE5VTEwpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAoc2lua3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEgsCi0gICAgICBldmVudF9wcm9iZSwgR0lOVF9UT19QT0lOVEVSIChGQUxTRSksIE5VTEwpOwotCi0gIC8qIFVwc3RyZWFtIGV2ZW50cyAqLwotICB0ZXN0X2V2ZW50IChwaXBlbGluZSwgR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgc2lua3BhZCwgVFJVRSwgc3JjcGFkKTsKLSAgZmFpbF91bmxlc3MgKHRpbWVkaWZmICgmZ290X2V2ZW50X3RpbWUsCi0gICAgICAgICAgJnNlbnRfZXZlbnRfdGltZSkgPCBHX1VTRUNfUEVSX1NFQyAvIDIsCi0gICAgICAiR1NUX0VWRU5UX0NVU1RPTV9VUCB0b29rIHRvbyBsb25nIHRvIHJlYWNoIHNvdXJjZTogJSIKLSAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiIHVzIiwgdGltZWRpZmYgKCZnb3RfZXZlbnRfdGltZSwgJnNlbnRfZXZlbnRfdGltZSkpOwotCi0gIHRlc3RfZXZlbnQgKHBpcGVsaW5lLCBHU1RfRVZFTlRfQ1VTVE9NX0JPVEgsIHNpbmtwYWQsIFRSVUUsIHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLAotICAgICAgICAgICZzZW50X2V2ZW50X3RpbWUpIDwgR19VU0VDX1BFUl9TRUMgLyAyLAotICAgICAgIkdTVF9FVkVOVF9DVVNUT01fQk9USCB0b29rIHRvbyBsb25nIHRvIHJlYWNoIHNvdXJjZTogJSIKLSAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiIHVzIiwgdGltZWRpZmYgKCZnb3RfZXZlbnRfdGltZSwgJnNlbnRfZXZlbnRfdGltZSkpOwotCi0gIHRlc3RfZXZlbnQgKHBpcGVsaW5lLCBHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09CLCBzaW5rcGFkLCBUUlVFLCBzcmNwYWQpOwotICBmYWlsX3VubGVzcyAodGltZWRpZmYgKCZnb3RfZXZlbnRfdGltZSwKLSAgICAgICAgICAmc2VudF9ldmVudF90aW1lKSA8IEdfVVNFQ19QRVJfU0VDIC8gMiwKLSAgICAgICJHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09CIHRvb2sgdG9vIGxvbmcgdG8gcmVhY2ggc291cmNlOiAlIgotICAgICAgR19HSU5UNjRfRk9STUFUICIgdXMiLCB0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLCAmc2VudF9ldmVudF90aW1lKSk7Ci0KLSAgLyogT3V0IG9mIGJhbmQgZG93bnN0cmVhbSBldmVudHMgKi8KLSAgdGVzdF9ldmVudCAocGlwZWxpbmUsIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9PT0IsIHNyY3BhZCwgRkFMU0UsIHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLAotICAgICAgICAgICZzZW50X2V2ZW50X3RpbWUpIDwgR19VU0VDX1BFUl9TRUMgLyAyLAotICAgICAgIkdTVF9FVkVOVF9DVVNUT01fRFNfT09CIHRvb2sgdG9vIGxvbmcgdG8gcmVhY2ggc291cmNlOiAlIgotICAgICAgR19HSU5UNjRfRk9STUFUICIgdXMiLCB0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLCAmc2VudF9ldmVudF90aW1lKSk7Ci0KLSAgdGVzdF9ldmVudCAocGlwZWxpbmUsIEdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0IsIHNyY3BhZCwgRkFMU0UsIHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLAotICAgICAgICAgICZzZW50X2V2ZW50X3RpbWUpIDwgR19VU0VDX1BFUl9TRUMgLyAyLAotICAgICAgIkdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0IgdG9vayB0b28gbG9uZyB0byByZWFjaCBzb3VyY2U6ICUiCi0gICAgICBHX0dJTlQ2NF9GT1JNQVQgIiB1cyIsIHRpbWVkaWZmICgmZ290X2V2ZW50X3RpbWUsICZzZW50X2V2ZW50X3RpbWUpKTsKLQotICAvKiBJbi1iYW5kIGRvd25zdHJlYW0gZXZlbnRzIGFyZSBleHBlY3RlZCB0byB0YWtlIGF0IGxlYXN0IDEgc2Vjb25kCi0gICAqIHRvIHRyYXZlcnNlIHRoZSBxdWV1ZSAqLwotICB0ZXN0X2V2ZW50IChwaXBlbGluZSwgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNLCBzcmNwYWQsIEZBTFNFLCBzcmNwYWQpOwotICBmYWlsX3VubGVzcyAodGltZWRpZmYgKCZnb3RfZXZlbnRfdGltZSwKLSAgICAgICAgICAmc2VudF9ldmVudF90aW1lKSA+PSBHX1VTRUNfUEVSX1NFQyAvIDIsCi0gICAgICAiR1NUX0VWRU5UX0NVU1RPTV9EUyBhcnJpdmVkIHRvbyBxdWlja2x5IGZvciBhbiBpbi1iYW5kIGV2ZW50OiAlIgotICAgICAgR19HSU5UNjRfRk9STUFUICIgdXMiLCB0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLCAmc2VudF9ldmVudF90aW1lKSk7Ci0KLSAgdGVzdF9ldmVudCAocGlwZWxpbmUsIEdTVF9FVkVOVF9DVVNUT01fQk9USCwgc3JjcGFkLCBGQUxTRSwgc3JjcGFkKTsKLSAgZmFpbF91bmxlc3MgKHRpbWVkaWZmICgmZ290X2V2ZW50X3RpbWUsCi0gICAgICAgICAgJnNlbnRfZXZlbnRfdGltZSkgPj0gR19VU0VDX1BFUl9TRUMgLyAyLAotICAgICAgIkdTVF9FVkVOVF9DVVNUT01fQk9USCBhcnJpdmVkIHRvbyBxdWlja2x5IGZvciBhbiBpbi1iYW5kIGV2ZW50OiAlIgotICAgICAgR19HSU5UNjRfRk9STUFUICIgdXMiLCB0aW1lZGlmZiAoJmdvdF9ldmVudF90aW1lLCAmc2VudF9ldmVudF90aW1lKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgTlVMTCwgTlVMTCwKLSAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9ldmVudF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RFdmVudCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJldmVudHMiKTsKLQotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDIwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBjcmVhdGVfZXZlbnRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBzZW5kX2N1c3RvbV9ldmVudHMpOwotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9ldmVudCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0Z2hvc3RwYWQuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTU2ZWQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RnaG9zdHBhZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM1OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGdob3N0cGFkLmM6IFVuaXQgdGVzdCBmb3IgR3N0R2hvc3RQYWQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLQotLyogdGVzdCBpZiByZW1vdmluZyBhIGJpbiBhbHNvIGNsZWFucyB1cCB0aGUgZ2hvc3RwYWRzCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlbW92ZTEpCi17Ci0gIEdzdEVsZW1lbnQgKmIxLCAqYjIsICpzcmMsICpzaW5rOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0gIEdzdFBhZExpbmtSZXR1cm4gcmV0OwotCi0gIGIxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKLSAgYjIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJiaW4iLCBOVUxMKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYjEsICJwaXBlbGluZSIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMiwgImJpbiIsIDEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjIpLCBzaW5rKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBzcmMpKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYjEsICJwaXBlbGluZSIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMiwgImJpbiIsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgYjIpKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYjEsICJwaXBlbGluZSIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMiwgImJpbiIsIDEpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYjIsIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHNpbmtwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICAvKiBnZXQgdGhlIGdob3N0cGFkICovCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYjIsICJzaW5rIik7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIC8qIG5vdyByZW1vdmUgdGhlIGJpbiB3aXRoIHRoZSBnaG9zdHBhZCwgYjIgaXMgZGlzcG9zZWQgbm93LiAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMSwgInBpcGVsaW5lIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGIyLCAiYmluIiwgMSk7Ci0gIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOIChiMSksIGIyKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIC8qIHBhZCBjYW5ub3QgYmUgbGlua2VkIG5vdyAqLwotICBmYWlsX2lmIChnc3RfcGFkX2lzX2xpbmtlZCAoc3JjcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYjEsICJwaXBlbGluZSIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiMSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCBpZiByZW1vdmluZyBhIGJpbiBhbHNvIGNsZWFucyB1cCB0aGUgZ2hvc3RwYWRzCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlbW92ZTIpCi17Ci0gIEdzdEVsZW1lbnQgKmIxLCAqYjIsICpzcmMsICpzaW5rOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0gIEdzdFBhZExpbmtSZXR1cm4gcmV0OwotCi0gIGIxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKLSAgYjIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJiaW4iLCBOVUxMKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMiksIHNpbmspKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMSksIHNyYykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgYjIpKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiMiwgZ3N0X2dob3N0X3BhZF9uZXcgKCJzaW5rIiwgc2lua3BhZCkpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyY3BhZCwgInNyY3BhZCIsIDIpOyAvKiBzaW5jZSB3ZSBnb3Qgb25lICovCi0gIC8qIGdldCB0aGUgZ2hvc3RwYWQgKi8KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChiMiwgInNpbmsiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAyKTsgICAgICAgLyogc2luY2Ugd2UgZ290IG9uZSAqLwotCi0gIEdTVF9ERUJVRyAoImxpbmtpbmcgc3JjcGFkIGFuZCBzaW5rcGFkIik7Ci0gIHJldCA9IGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgR1NUX0RFQlVHICgibGlua2VkIHNyY3BhZCBhbmQgc2lua3BhZCIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9QQURfTElOS19PSyk7Ci0gIC8qIFJlZmNvdW50IHNob3VsZCBiZSB1bmNoYW5nZWQsIHRhcmdldHMgYXJlIG5vdyBkZWN1Y2VkIHVzaW5nIHBlZXIgcGFkICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyY3BhZCwgInNyY3BhZCIsIDIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAvKiBub3cgcmVtb3ZlIHRoZSBzaW5rIGZyb20gdGhlIGJpbiAqLwotICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoYjIpLCBzaW5rKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIC8qIHBhZCBpcyBzdGlsbCBsaW5rZWQgdG8gZ2hvc3RwYWQgKi8KLSAgZmFpbF9pZiAoIWdzdF9wYWRfaXNfbGlua2VkIChzcmNwYWQpKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyY3BhZCwgInNyY3BhZCIsIDIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDEpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgLyogbm93IHVubGluayB0aGUgcGFkcyAqLwotICBnc3RfcGFkX3VubGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjcGFkLCAic3JjcGFkIiwgMSk7IC8qIHdlIGRyb3BwZWQgb3VyIHJlZiAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDEpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChiMiwgImJpbiIsIDEpOwotICAvKiByZW1vdmUgYjIgZnJvbSBiMSAqLwotICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoYjEpLCBiMik7Ci0KLSAgLyogZmx1c2ggdGhlIG1lc3NhZ2UsIGRyb3BwaW5nIHRoZSBiMSByZWZjb3VudCB0byAxICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYjEsIEdTVF9TVEFURV9SRUFEWSk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYjEsIEdTVF9TVEFURV9OVUxMKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYjEsICJwaXBlbGluZSIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiMSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0KLS8qIHRlc3QgaWYgYSBnaG9zdCBwYWQgd2l0aG91dCBhIHRhcmdldCBjYW4gYmUgbGlua2VkIGFuZAotICogdW5saW5rZWQuIEFuIHVudGFyZ2V0ZWQgZ2hvc3RwYWQgaGFzIGEgZGVmYXVsdCBBTlkgY2FwcyB1bmxlc3MgdGhlcmUgCi0gKiBpcyBhIHBhZHRlbXBsYXRlIHRoYXQgc2F5cyBzb21ldGhpbmcgZWxzZS4KLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19ub3RhcmdldCkKLXsKLSAgR3N0RWxlbWVudCAqYjEsICpiMiwgKnNpbms7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZCwgKnBlZXI7Ci0gIEdzdFBhZExpbmtSZXR1cm4gcmV0OwotICBnYm9vbGVhbiBicmV0OwotICBHc3RCdXMgKmJ1czsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBiMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0KLSAgLyogbWFrZSBzdXJlIGFsbCBtZXNzYWdlcyBhcmUgZGlzY2FyZGVkICovCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKGIxKSk7Ci0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGIyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYmluIiwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBzaW5rKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBiMikpOwotCi0gIHNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLQotICByZXQgPSBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICAvKiBjaGVjayBpZiB0aGUgcGVlcnMgYXJlIG9rICovCi0gIHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChzcmNwYWQpOwotICBmYWlsX3VubGVzcyAocGVlciA9PSBzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0KLSAgcGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKHNpbmtwYWQpOwotICBmYWlsX3VubGVzcyAocGVlciA9PSBzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLQotICAvKiBjaGVjayBjYXBzLCB1bnRhcmdldHRlZCBwYWQgc2hvdWxkIHJldHVybiBBTlkgb3IgdGhlIHBhZHRlbXBsYXRlIGNhcHMgCi0gICAqIHdoZW4gaXQgd2FzIGNyZWF0ZWQgZnJvbSBhIHRlbXBsYXRlICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHNyY3BhZCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19hbnkgKGNhcHMpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIC8qIHVubGluayAqLwotICBicmV0ID0gZ3N0X3BhZF91bmxpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChicmV0ID09IFRSVUUpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGIxKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IHRoYXQgcmVtb3ZpbmcgdGhlIHRhcmdldCBvZiBhIGdob3N0cGFkIHByb3Blcmx5IHNldHMgdGhlIHRhcmdldCBvZiB0aGUKLSAqIGdob3N0cGFkIHRvIE5VTEwgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlbW92ZV90YXJnZXQpCi17Ci0gIEdzdEVsZW1lbnQgKmIxLCAqYjIsICpzcmMsICpzaW5rOwotICBHc3RQYWQgKnNpbmtwYWQsICpnaG9zdCwgKnRhcmdldDsKLQotICBiMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0gIGIyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYmluIiwgTlVMTCk7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjIpLCBzaW5rKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBzcmMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMSksIGIyKSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYjIsIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHNpbmtwYWQpKTsKLQotICBnaG9zdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChiMiwgInNpbmsiKTsKLQotICB0YXJnZXQgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQUQgKGdob3N0KSk7Ci0gIGZhaWxfdW5sZXNzICh0YXJnZXQgPT0gc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOIChiMiksIHNpbmspOwotCi0gIHRhcmdldCA9IGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAoZ2hvc3QpKTsKLSAgZmFpbF91bmxlc3MgKHRhcmdldCA9PSBOVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChiMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGdob3N0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLS8qIHRlc3QgaWYgbGlua2luZyBmYWlscyBvdmVyIGRpZmZlcmVudCBiaW5zIHVzaW5nIGEgcGlwZWxpbmUKLSAqIGxpa2UgdGhpczoKLSAqCi0gKiBmYWtlc3JjIG51bV9idWZmZXJzPTEwICEgKCBmYWtlc2luayApCi0gKgotICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9saW5rKQotewotICBHc3RFbGVtZW50ICpiMSwgKmIyLCAqc3JjLCAqc2luazsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkLCAqZ3BhZCwgKnBwYWQsICp0bXA7Ci0gIEdzdFBhZExpbmtSZXR1cm4gcmV0OwotCi0gIGIxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKLSAgYjIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJiaW4iLCBOVUxMKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIyKSwgc2luaykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgc3JjKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBiMikpOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLQotICAvKiBsaW5raW5nIGluIGRpZmZlcmVudCBoaWVyYXJjaGllcyBzaG91bGQgZmFpbCAqLwotICByZXQgPSBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1BBRF9MSU5LX1dST05HX0hJRVJBUkNIWSk7Ci0KLSAgLyogbm93IHNldHVwIGEgZ2hvc3RwYWQgKi8KLSAgZ3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHNpbmtwYWQpOwotCi0gIC8qIENoZWNrIGlmIHRoZSBpbnRlcm5hbCBwYWRzIGFyZSBzZXQgY29ycmVjdGx5ICovCi0gIHBwYWQgPSBHU1RfUEFEIChnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbCAoR1NUX1BST1hZX1BBRCAoZ3BhZCkpKTsKLSAgZmFpbF91bmxlc3MgKHBwYWQgPT0gR1NUX1BBRF9QRUVSIChzaW5rcGFkKSk7Ci0gIHRtcCA9IEdTVF9QQUQgKGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsIChHU1RfUFJPWFlfUEFEIChwcGFkKSkpOwotICBmYWlsX3VubGVzcyAodG1wID09IGdwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOwotICBnc3Rfb2JqZWN0X3VucmVmIChwcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIC8qIG5lZWQgdG8gcmVmIGFzIF9hZGRfcGFkIHRha2VzIG93bmVyc2hpcCAqLwotICBnc3Rfb2JqZWN0X3JlZiAoZ3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGIyLCBncGFkKTsKLQotICAvKiBvdXIgbmV3IHNpbmtwYWQgKi8KLSAgc2lua3BhZCA9IGdwYWQ7Ci0KLSAgLyogYW5kIGxpbmtpbmcgc2hvdWxkIHdvcmsgbm93ICovCi0gIHJldCA9IGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfUEFEX0xJTktfT0spOwotCi0gIC8qIGZsdXNoIHRoZSBtZXNzYWdlLCBkcm9wcGluZyB0aGUgYjEgcmVmY291bnQgdG8gMSAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGIxLCBHU1RfU1RBVEVfUkVBRFkpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGIxLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGIxLCAicGlwZWxpbmUiLCAxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYjEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgaWYgZ2hvc3RwYWRzIGFyZSBjcmVhdGVkIGF1dG9tYWdpY2FsbHkgd2hlbiB1c2luZwotICogZ3N0X2VsZW1lbnRfbGlua19wYWRzLgotICoKLSAqIGZha2VzcmMgbnVtX2J1ZmZlcnM9MTAgISAoIGlkZW50aXR5ICkgISBmYWtlc2luawotICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9naG9zdF9wYWRzKQotewotICBHc3RFbGVtZW50ICpiMSwgKmIyLCAqc3JjLCAqaTEsICpzaW5rOwotICBHc3RQYWQgKmdzaW5rLCAqZ3NyYywgKmdpc3JjLCAqZ2lzaW5rLCAqaXNpbmssICppc3JjLCAqZnNyYywgKmZzaW5rOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgYjEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOwotICBiMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCAoaW50KSAxMCwgTlVMTCk7Ci0gIGkxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMiksIGkxKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBzcmMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChiMSksIGIyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjEpLCBzaW5rKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNyYywgTlVMTCwgaTEsIE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoaTEsIE5VTEwsIHNpbmssIE5VTEwpKTsKLSAgR1NUX09CSkVDVF9MT0NLIChiMik7Ci0gIGZhaWxfdW5sZXNzIChiMi0+bnVtc2lua3BhZHMgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfR0hPU1RfUEFEIChiMi0+c2lua3BhZHMtPmRhdGEpKTsKLSAgZmFpbF91bmxlc3MgKGIyLT5udW1zcmNwYWRzID09IDEpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0dIT1NUX1BBRCAoYjItPnNyY3BhZHMtPmRhdGEpKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGIyKTsKLQotICBmc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBmYWlsX3VubGVzcyAoZnNyYyAhPSBOVUxMKTsKLSAgZ3NpbmsgPSBHU1RfUEFEIChnc3Rfb2JqZWN0X3JlZiAoYjItPnNpbmtwYWRzLT5kYXRhKSk7Ci0gIGZhaWxfdW5sZXNzIChnc2luayAhPSBOVUxMKTsKLSAgZ3NyYyA9IEdTVF9QQUQgKGdzdF9vYmplY3RfcmVmIChiMi0+c3JjcGFkcy0+ZGF0YSkpOwotICBmYWlsX3VubGVzcyAoZ3NyYyAhPSBOVUxMKTsKLSAgZnNpbmsgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGZzaW5rICE9IE5VTEwpOwotCi0gIGlzaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGkxLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoaXNpbmsgIT0gTlVMTCk7Ci0gIGlzcmMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoaTEsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKGlzcmMgIT0gTlVMTCk7Ci0gIGdpc3JjID0gZ3N0X3BhZF9nZXRfcGVlciAoaXNpbmspOwotICBmYWlsX3VubGVzcyAoZ2lzcmMgIT0gTlVMTCk7Ci0gIGdpc2luayA9IGdzdF9wYWRfZ2V0X3BlZXIgKGlzcmMpOwotICBmYWlsX3VubGVzcyAoZ2lzaW5rICE9IE5VTEwpOwotCi0gIC8qIGFsbCBvYmplY3RzIGFib3ZlIGhhdmUgb25lIHJlZmNvdW50IG93bmVkIGJ5IHVzIGFzIHdlbGwgKi8KLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChmc3JjLCAiZnNyYyIsIDIpOyAgICAgLyogcGFyZW50ICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGdzaW5rLCAiZ3NpbmsiLCAyKTsgICAvKiBwYXJlbnQgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZ3NyYywgImdzcmMiLCAyKTsgICAgIC8qIHBhcmVudCAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChmc2luaywgImZzaW5rIiwgMik7ICAgLyogcGFyZW50ICovCi0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZ2lzcmMsICJnaXNyYyIsIDIpOyAgIC8qIHBhcmVudCAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChpc2luaywgImlzaW5rIiwgMik7ICAgLyogcGFyZW50ICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGdpc2luaywgImdpc2luayIsIDIpOyAvKiBwYXJlbnQgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaXNyYywgImlzcmMiLCAyKTsgICAgIC8qIHBhcmVudCAqLwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYjEsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChiMSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGIxLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoYjEsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYjEpOwotICAvKiB1bnJlZmZpbmcgdGhlIGJpbiB3aWxsIHVucmVmIGFsbCBlbGVtZW50cywgd2hpY2ggd2lsbCB1bmxpbmsgYW5kIHVucGFyZW50Ci0gICAqIGFsbCBwYWRzICovCi0KLSAgLyogd2FpdCBmb3IgdGhyZWFkIHRvIHNldHRsZSBkb3duICovCi0gIHdoaWxlIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChmc3JjKSA+IDEpCi0gICAgVEhSRUFEX1NXSVRDSCAoKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChmc3JjLCAiZnNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChnc2luaywgImdzaW5rIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGdzcmMsICJnc2luayIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChmc2luaywgImZzaW5rIiwgMSk7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZ2lzcmMsICJnaXNyYyIsIDIpOyAgIC8qIGdzaW5rICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGlzaW5rLCAiaXNpbmsiLCAxKTsgICAvKiBnc2luayAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChnaXNpbmssICJnaXNpbmsiLCAyKTsgLyogZ3NyYyAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChpc3JjLCAiaXNyYyIsIDEpOyAgICAgLyogZ3NyYyAqLwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGdzaW5rKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaXNpbmssICJpc2luayIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChnaXNyYywgImdpc3JjIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGZzcmMsICJmc3JjIiwgMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGdpc3JjKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZnNyYywgImZzcmMiLCAxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChnc3JjKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoaXNyYywgImlzcmMiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZ2lzaW5rLCAiZ2lzaW5rIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGZzaW5rLCAiZnNpbmsiLCAxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZ2lzaW5rKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoZnNpbmssICJmc2luayIsIDEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGZzcmMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChpc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaXNpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChmc2luayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19iaW4pCi17Ci0gIEdzdEJpbiAqcGlwZWxpbmU7Ci0gIEdzdEJpbiAqc3JjYmluOwotICBHc3RCaW4gKnNpbmtiaW47Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR3N0RWxlbWVudCAqc2luazsKLSAgR3N0UGFkICpzcmNwYWQsICpzcmNnaG9zdCwgKnRhcmdldDsKLSAgR3N0UGFkICpzaW5rcGFkLCAqc2lua2dob3N0OwotCi0gIHBpcGVsaW5lID0gR1NUX0JJTiAoZ3N0X3BpcGVsaW5lX25ldyAoInBpcGUiKSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKLQotICBzcmNiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoInNyY2JpbiIpKTsKLSAgZ3N0X2Jpbl9hZGQgKHBpcGVsaW5lLCBHU1RfRUxFTUVOVCAoc3JjYmluKSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKLQotICBzaW5rYmluID0gR1NUX0JJTiAoZ3N0X2Jpbl9uZXcgKCJzaW5rYmluIikpOwotICBnc3RfYmluX2FkZCAocGlwZWxpbmUsIEdTVF9FTEVNRU5UIChzaW5rYmluKSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBnc3RfYmluX2FkZCAoc3JjYmluLCBzcmMpOwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIHNyY2dob3N0ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJzcmMiLCBzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc3JjYmluKSwgc3JjZ2hvc3QpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdzdF9iaW5fYWRkIChzaW5rYmluLCBzaW5rKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBzaW5rZ2hvc3QgPSBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzaW5rYmluKSwgc2lua2dob3N0KTsKLQotICBnc3RfZWxlbWVudF9saW5rIChHU1RfRUxFTUVOVCAoc3JjYmluKSwgR1NUX0VMRU1FTlQgKHNpbmtiaW4pKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9QRUVSIChzcmNnaG9zdCkgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX1BFRVIgKHNpbmtnaG9zdCkgIT0gTlVMTCk7Ci0gIHRhcmdldCA9IGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAoc3JjZ2hvc3QpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfUEVFUiAodGFyZ2V0KSAhPSBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKLSAgdGFyZ2V0ID0gZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEIChzaW5rZ2hvc3QpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfUEVFUiAodGFyZ2V0KSAhPSBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdNdXRleCBtdXRleDsKLSAgR0NvbmQgY29uZDsKLX0gQmxvY2tEYXRhOwotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWJsb2NrX2NhbGxiYWNrIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgQmxvY2tEYXRhICpibG9ja19kYXRhID0gKEJsb2NrRGF0YSAqKSB1c2VyX2RhdGE7Ci0KLSAgZ19tdXRleF9sb2NrICgmYmxvY2tfZGF0YS0+bXV0ZXgpOwotICBHU1RfREVCVUcgKCJibG9ja2VkXG4iKTsKLSAgZ19jb25kX3NpZ25hbCAoJmJsb2NrX2RhdGEtPmNvbmQpOwotICBnX211dGV4X3VubG9jayAoJmJsb2NrX2RhdGEtPm11dGV4KTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19ibG9jaykKLXsKLSAgR3N0QmluICpwaXBlbGluZTsKLSAgR3N0QmluICpzcmNiaW47Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdzdFBhZCAqc3JjZ2hvc3Q7Ci0gIEJsb2NrRGF0YSBibG9ja19kYXRhOwotCi0gIHBpcGVsaW5lID0gR1NUX0JJTiAoZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIikpOwotCi0gIHNyY2JpbiA9IEdTVF9CSU4gKGdzdF9iaW5fbmV3ICgic3JjYmluIikpOwotICBnc3RfYmluX2FkZCAocGlwZWxpbmUsIEdTVF9FTEVNRU5UIChzcmNiaW4pKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBnc3RfYmluX2FkZCAoc3JjYmluLCBzcmMpOwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIHNyY2dob3N0ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJzcmMiLCBzcmNwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc3JjYmluKSwgc3JjZ2hvc3QpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIGdfbXV0ZXhfaW5pdCAoJmJsb2NrX2RhdGEubXV0ZXgpOwotICBnX2NvbmRfaW5pdCAoJmJsb2NrX2RhdGEuY29uZCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmYmxvY2tfZGF0YS5tdXRleCk7Ci0gIGdzdF9wYWRfYWRkX3Byb2JlIChzcmNnaG9zdCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLLCBibG9ja19jYWxsYmFjaywKLSAgICAgICZibG9ja19kYXRhLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIC8qIGFuZCB3YWl0IG5vdyAqLwotICBnX2NvbmRfd2FpdCAoJmJsb2NrX2RhdGEuY29uZCwgJmJsb2NrX2RhdGEubXV0ZXgpOwotICBnX211dGV4X3VubG9jayAoJmJsb2NrX2RhdGEubXV0ZXgpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9OVUxMKTsKLQotICBnX211dGV4X2NsZWFyICgmYmxvY2tfZGF0YS5tdXRleCk7Ci0gIGdfY29uZF9jbGVhciAoJmJsb2NrX2RhdGEuY29uZCk7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19wcm9iZXMpCi17Ci0gIEdzdEJpbiAqcGlwZWxpbmU7Ci0gIEdzdEJpbiAqc3JjYmluOwotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RQYWQgKnNyY2dob3N0OwotICBCbG9ja0RhdGEgYmxvY2tfZGF0YTsKLQotICBwaXBlbGluZSA9IEdTVF9CSU4gKGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpKTsKLQotICBzcmNiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoInNyY2JpbiIpKTsKLSAgZ3N0X2Jpbl9hZGQgKHBpcGVsaW5lLCBHU1RfRUxFTUVOVCAoc3JjYmluKSk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKLSAgZ3N0X2Jpbl9hZGQgKHNyY2Jpbiwgc3JjKTsKLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBzcmNnaG9zdCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic3JjIiwgc3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNyY2JpbiksIHNyY2dob3N0KTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICBnX211dGV4X2luaXQgKCZibG9ja19kYXRhLm11dGV4KTsKLSAgZ19jb25kX2luaXQgKCZibG9ja19kYXRhLmNvbmQpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmJsb2NrX2RhdGEubXV0ZXgpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjZ2hvc3QsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSywgYmxvY2tfY2FsbGJhY2ssCi0gICAgICAmYmxvY2tfZGF0YSwgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAvKiBhbmQgd2FpdCBub3cgKi8KLSAgZ19jb25kX3dhaXQgKCZibG9ja19kYXRhLmNvbmQsICZibG9ja19kYXRhLm11dGV4KTsKLSAgZ19tdXRleF91bmxvY2sgKCZibG9ja19kYXRhLm11dGV4KTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJmJsb2NrX2RhdGEubXV0ZXgpOwotICBnX2NvbmRfY2xlYXIgKCZibG9ja19kYXRhLmNvbmQpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUiLCAxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dob3N0X3BhZHNfbmV3X2Zyb21fdGVtcGxhdGUpCi17Ci0gIEdzdFBhZCAqc2lua3BhZCwgKmdob3N0cGFkOwotICBHc3RQYWRUZW1wbGF0ZSAqcGFkdGVtcGwsICpnaG9zdHRlbXBsOwotICBHc3RDYXBzICpwYWRjYXBzLCAqZ2hvc3RjYXBzLCAqbmV3Y2FwczsKLQotICBwYWRjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL2NhcHMiKTsKLSAgZmFpbF91bmxlc3MgKHBhZGNhcHMgIT0gTlVMTCk7Ci0gIGdob3N0Y2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9jYXBzO3NvbWUvb3RoZXItY2FwcyIpOwotICBmYWlsX3VubGVzcyAoZ2hvc3RjYXBzICE9IE5VTEwpOwotCi0gIHBhZHRlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJwYWR0ZW1wbCIsIEdTVF9QQURfU0lOSywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBwYWRjYXBzKTsKLSAgZmFpbF91bmxlc3MgKHBhZHRlbXBsICE9IE5VTEwpOwotICBnaG9zdHRlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJnaG9zdHRlbXBsIiwgR1NUX1BBRF9TSU5LLAotICAgICAgR1NUX1BBRF9BTFdBWVMsIGdob3N0Y2Fwcyk7Ci0KLSAgc2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHBhZHRlbXBsLCAic2lua3BhZCIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLQotICBnaG9zdHBhZCA9IGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKCJnaG9zdHBhZCIsIHNpbmtwYWQsIGdob3N0dGVtcGwpOwotICBmYWlsX3VubGVzcyAoZ2hvc3RwYWQgIT0gTlVMTCk7Ci0KLSAgLyogY2hlY2sgdGVtcGxhdGUgaXMgcHJvcGVybHkgc2V0ICovCi0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX1BBRF9URU1QTEFURSAoZ2hvc3RwYWQpID09IGdob3N0dGVtcGwpOwotCi0gIC8qIGNoZWNrIGdob3N0cGFkIGNhcHMgYXJlIGZyb20gdGhlIHNpbmtwYWQgKi8KLSAgbmV3Y2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAoZ2hvc3RwYWQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobmV3Y2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChuZXdjYXBzLCBwYWRjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChuZXdjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHBhZGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoZ2hvc3RjYXBzKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3RwYWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZHRlbXBsKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3R0ZW1wbCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUpCi17Ci0gIEdzdFBhZCAqc2lua3BhZCwgKmdob3N0cGFkOwotICBHc3RQYWRUZW1wbGF0ZSAqcGFkdGVtcGwsICpnaG9zdHRlbXBsOwotICBHc3RDYXBzICpwYWRjYXBzLCAqZ2hvc3RjYXBzLCAqbmV3Y2FwczsKLQotICBwYWRjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL2NhcHMiKTsKLSAgZmFpbF91bmxlc3MgKHBhZGNhcHMgIT0gTlVMTCk7Ci0gIGdob3N0Y2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9jYXBzO3NvbWUvb3RoZXItY2FwcyIpOwotICBmYWlsX3VubGVzcyAoZ2hvc3RjYXBzICE9IE5VTEwpOwotCi0gIHBhZHRlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJwYWR0ZW1wbCIsIEdTVF9QQURfU0lOSywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBwYWRjYXBzKTsKLSAgZmFpbF91bmxlc3MgKHBhZHRlbXBsICE9IE5VTEwpOwotICBnaG9zdHRlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJnaG9zdHRlbXBsIiwgR1NUX1BBRF9TSU5LLAotICAgICAgR1NUX1BBRF9BTFdBWVMsIGdob3N0Y2Fwcyk7Ci0KLSAgc2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHBhZHRlbXBsLCAic2lua3BhZCIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLQotICBnaG9zdHBhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlICgiZ2hvc3RwYWQiLCBnaG9zdHRlbXBsKTsKLSAgZmFpbF91bmxlc3MgKGdob3N0cGFkICE9IE5VTEwpOwotCi0gIC8qIGNoZWNrIHRlbXBsYXRlIGlzIHByb3Blcmx5IHNldCAqLwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9QQURfVEVNUExBVEUgKGdob3N0cGFkKSA9PSBnaG9zdHRlbXBsKTsKLQotICAvKiBjaGVjayBnaG9zdHBhZCBjYXBzIGFyZSBmcm9tIHRoZSBnaG9zdHBhZCB0ZW1wbGF0ZSAqLwotICBuZXdjYXBzID0gZ3N0X3BhZF9xdWVyeV9jYXBzIChnaG9zdHBhZCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChuZXdjYXBzICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKG5ld2NhcHMsIGdob3N0Y2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAobmV3Y2Fwcyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoKEdzdEdob3N0UGFkICopIGdob3N0cGFkLCBzaW5rcGFkKSk7Ci0KLSAgLyogY2hlY2sgZ2hvc3RwYWQgY2FwcyBhcmUgbm93IGZyb20gdGhlIHRhcmdldCBwYWQgKi8KLSAgbmV3Y2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAoZ2hvc3RwYWQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobmV3Y2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChuZXdjYXBzLCBwYWRjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChuZXdjYXBzKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3RwYWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZHRlbXBsKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3R0ZW1wbCk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHBhZGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoZ2hvc3RjYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotZ2hvc3Rfbm90aWZ5X2NhcHMgKEdPYmplY3QgKiBvYmplY3QsIEdQYXJhbVNwZWMgKiBwc3BlYywgZ3BvaW50ZXIgKiB1c2VyX2RhdGEpCi17Ci0gIEdTVF9ERUJVRyAoImNhcHMgbm90aWZ5IGNhbGxlZCIpOwotICAoKihnaW50ICopIHVzZXJfZGF0YSkrKzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19mb3J3YXJkX3NldGNhcHMpCi17Ci0gIEdzdENhcHMgKnRlbXBsX2NhcHMsICpjYXBzMSwgKmNhcHMyOwotICBHc3RQYWRUZW1wbGF0ZSAqc3JjX3RlbXBsYXRlLCAqc2lua190ZW1wbGF0ZTsKLSAgR3N0UGFkICpzcmMsICpnaG9zdCwgKnNpbms7Ci0gIGdpbnQgbm90aWZ5X2NvdW50ZXIgPSAwOwotCi0gIHRlbXBsX2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoIm1laDsgbXVoIik7Ci0gIHNyY190ZW1wbGF0ZSA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMsCi0gICAgICBHU1RfUEFEX0FMV0FZUywgdGVtcGxfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZW1wbF9jYXBzKTsKLQotICB0ZW1wbF9jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJtdWg7IG1laCIpOwotICBzaW5rX3RlbXBsYXRlID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LLAotICAgICAgR1NUX1BBRF9BTFdBWVMsIHRlbXBsX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAodGVtcGxfY2Fwcyk7Ci0KLSAgc3JjID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoc3JjX3RlbXBsYXRlLCAic3JjIik7Ci0gIHNpbmsgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzaW5rX3RlbXBsYXRlLCAic2luayIpOwotCi0gIC8qIGdob3N0IHNvdXJjZSBwYWQsIHNldHRpbmcgY2FwcyBvbiB0aGUgc291cmNlIGluZmx1ZW5jZXMgdGhlIGNhcHMgb2YgdGhlCi0gICAqIGdob3N0cGFkLiAqLwotICBnaG9zdCA9IGdzdF9naG9zdF9wYWRfbmV3ICgiZ2hvc3RzcmMiLCBzcmMpOwotICBnX3NpZ25hbF9jb25uZWN0IChnaG9zdCwgIm5vdGlmeTo6Y2FwcyIsCi0gICAgICBHX0NBTExCQUNLIChnaG9zdF9ub3RpZnlfY2FwcyksICZub3RpZnlfY291bnRlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKGdob3N0LCBzaW5rKSA9PSBHU1RfUEFEX0xJTktfT0spOwotCi0gIC8qIEFjdGl2YXRlIHBhZHMgZm9yIGNhcHMgZm9yd2FyZGluZy9zZXR0aW5nIHRvIHdvcmsgKi8KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKGdob3N0LCBUUlVFKTsKLQotICBjYXBzMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgibWVoIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMxKSk7Ci0gIGNhcHMyID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChnaG9zdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoY2FwczEsIGNhcHMyKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG5vdGlmeV9jb3VudGVyLCAxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChnaG9zdCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0KLSAgLyogc291cmNlIDIsIHNldHRpbmcgdGhlIGNhcHMgb24gdGhlIGdob3N0cGFkIGRvZXMgbm90IGluZmx1ZW5jZSB0aGUgY2FwcyBvZgotICAgKiB0aGUgdGFyZ2V0ICovCi0gIG5vdGlmeV9jb3VudGVyID0gMDsKLSAgZ2hvc3QgPSBnc3RfZ2hvc3RfcGFkX25ldyAoImdob3N0c3JjIiwgc3JjKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoZ2hvc3QsICJub3RpZnk6OmNhcHMiLAotICAgICAgR19DQUxMQkFDSyAoZ2hvc3Rfbm90aWZ5X2NhcHMpLCAmbm90aWZ5X2NvdW50ZXIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChnaG9zdCwgc2luaykgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKGdob3N0LCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLQotICBjYXBzMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgibWVoIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChnaG9zdCwgY2FwczEpKTsKLSNpZiAwCi0gIGNhcHMyID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChzcmMpOwotICBmYWlsX3VubGVzcyAoY2FwczIgPT0gTlVMTCk7Ci0jZW5kaWYKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobm90aWZ5X2NvdW50ZXIsIDEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGdob3N0KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKLQotCi0gIC8qIGdob3N0IHNpbmsgcGFkLiBTZXR0aW5nIGNhcHMgb24gdGhlIGdob3N0cGFkIHdpbGwgYWxzbyBzZXQgdGhvc2UgY2FwcyBvbgotICAgKiB0aGUgdGFyZ2V0IHBhZC4gKi8KLSAgbm90aWZ5X2NvdW50ZXIgPSAwOwotICBnaG9zdCA9IGdzdF9naG9zdF9wYWRfbmV3ICgiZ2hvc3RzaW5rIiwgc2luayk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGdob3N0LCAibm90aWZ5OjpjYXBzIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGdob3N0X25vdGlmeV9jYXBzKSwgJm5vdGlmeV9jb3VudGVyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjLCBnaG9zdCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZ2hvc3QsIFRSVUUpOwotCi0gIGNhcHMxID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJtdWgiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKGdob3N0LCBjYXBzMSkpOwotICBjYXBzMiA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoc2luayk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoY2FwczEsIGNhcHMyKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG5vdGlmeV9jb3VudGVyLCAxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChnaG9zdCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0KLSAgLyogY2xlYXIgY2FwcyBvbiBwYWRzICovCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7Ci0KLSAgLyogc2luayBwYWQgMiwgc2V0dGluZyBjYXBzIGp1c3Qgb24gdGhlIHRhcmdldCBwYWQgc2hvdWxkIG5vdCBpbmZsdWVuY2UgdGhlIGNhcHMKLSAgICogb24gdGhlIGdob3N0cGFkLiAqLwotICBub3RpZnlfY291bnRlciA9IDA7Ci0gIGdob3N0ID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJnaG9zdHNpbmsiLCBzaW5rKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoZ2hvc3QpID09IE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChnaG9zdCwgIm5vdGlmeTo6Y2FwcyIsCi0gICAgICBHX0NBTExCQUNLIChnaG9zdF9ub3RpZnlfY2FwcyksICZub3RpZnlfY291bnRlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyYywgZ2hvc3QpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChnaG9zdCwgVFJVRSk7Ci0KLSAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoIm11aCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoc2luaywgY2FwczEpKTsKLSAgY2FwczIgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKGdob3N0KTsKLSAgZmFpbF91bmxlc3MgKGNhcHMyID09IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChub3RpZnlfY291bnRlciwgMCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3QpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNfdGVtcGxhdGUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rX3RlbXBsYXRlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2ludCBsaW5rZWRfY291bnQxOwotc3RhdGljIGdpbnQgdW5saW5rZWRfY291bnQxOwotc3RhdGljIGdpbnQgbGlua2VkX2NvdW50MjsKLXN0YXRpYyBnaW50IHVubGlua2VkX2NvdW50MjsKLQotc3RhdGljIEdzdFBhZExpbmtSZXR1cm4KLXBhZF9saW5rZWQxIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkICogcGVlcikKLXsKLSAgbGlua2VkX2NvdW50MSsrOwotCi0gIHJldHVybiBHU1RfUEFEX0xJTktfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYWRfdW5saW5rZWQxIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgdW5saW5rZWRfY291bnQxKys7Ci19Ci0KLXN0YXRpYyBHc3RQYWRMaW5rUmV0dXJuCi1wYWRfbGlua2VkMiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFBhZCAqIHBlZXIpCi17Ci0gIGxpbmtlZF9jb3VudDIrKzsKLQotICByZXR1cm4gR1NUX1BBRF9MSU5LX09LOwotfQotCi1zdGF0aWMgdm9pZAotcGFkX3VubGlua2VkMiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCi17Ci0gIHVubGlua2VkX2NvdW50MisrOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9naG9zdF9wYWRzX3NpbmtfbGlua191bmxpbmspCi17Ci0gIEdzdENhcHMgKnBhZGNhcHM7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZCwgKmdob3N0cGFkOwotICBHc3RQYWRUZW1wbGF0ZSAqc3JjdGVtcGwsICpzaW5rdGVtcGw7Ci0gIEdzdFBhZExpbmtSZXR1cm4gcmV0OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcGFkY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9jYXBzIik7Ci0gIGZhaWxfdW5sZXNzIChwYWRjYXBzICE9IE5VTEwpOwotICBzcmN0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3JjdGVtcGwiLCBHU1RfUEFEX1NSQywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBwYWRjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHBhZGNhcHMpOwotCi0gIHBhZGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvY2FwcyIpOwotICBmYWlsX3VubGVzcyAocGFkY2FwcyAhPSBOVUxMKTsKLSAgc2lua3RlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzaW5rdGVtcGwiLCBHU1RfUEFEX1NJTkssCi0gICAgICBHU1RfUEFEX0FMV0FZUywgcGFkY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChwYWRjYXBzKTsKLQotICBzcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzcmN0ZW1wbCwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotICBzaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoc2lua3RlbXBsLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLQotICAvKiBzZXQgdXAgbGluay91bmxpbmsgZnVuY3Rpb25zIGZvciB0aGUgcGFkICovCi0gIGxpbmtlZF9jb3VudDEgPSB1bmxpbmtlZF9jb3VudDEgPSAwOwotICBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uIChzaW5rcGFkLCBwYWRfbGlua2VkMSk7Ci0gIGdzdF9wYWRfc2V0X3VubGlua19mdW5jdGlvbiAoc2lua3BhZCwgcGFkX3VubGlua2VkMSk7Ci0gIGxpbmtlZF9jb3VudDIgPSB1bmxpbmtlZF9jb3VudDIgPSAwOwotICBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uIChzcmNwYWQsIHBhZF9saW5rZWQyKTsKLSAgZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uIChzcmNwYWQsIHBhZF91bmxpbmtlZDIpOwotCi0gIC8qIHRoaXMgc2hvdWxkIHRyaWdnZXIgYSBsaW5rIGZyb20gdGhlIGludGVybmFsIHBhZCB0byB0aGUgc2lua3BhZCAqLwotICBnaG9zdHBhZCA9IGdzdF9naG9zdF9wYWRfbmV3ICgiZ2hvc3RwYWQiLCBzaW5rcGFkKTsKLSAgZmFpbF91bmxlc3MgKGdob3N0cGFkICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMCk7Ci0KLSAgLyogdGhpcyBzaG91bGQgbm90IHRyaWdnZXIgYW55dGhpbmcgYmVjYXVzZSB3ZSBhcmUgbm90IGRpcmVjdGx5Ci0gICAqIGxpbmtpbmcvdW5saW5raW5nIHRoZSBzaW5rIHBhZC4gKi8KLSAgcmV0ID0gZ3N0X3BhZF9saW5rIChzcmNwYWQsIGdob3N0cGFkKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfUEFEX0xJTktfT0spOwotICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMCk7Ci0KLSAgcmVzID0gZ3N0X3BhZF91bmxpbmsgKHNyY3BhZCwgZ2hvc3RwYWQpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMSk7Ci0KLSAgLyogdGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgdW5saW5rICovCi0gIHJlcyA9IGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRF9DQVNUIChnaG9zdHBhZCksIE5VTEwpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3RwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjdGVtcGwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rdGVtcGwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dob3N0X3BhZHNfc3JjX2xpbmtfdW5saW5rKQotewotICBHc3RDYXBzICpwYWRjYXBzOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQsICpnaG9zdHBhZCwgKmR1bW15OwotICBHc3RQYWRUZW1wbGF0ZSAqc3JjdGVtcGwsICpzaW5rdGVtcGw7Ci0gIEdzdFBhZExpbmtSZXR1cm4gcmV0OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcGFkY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9jYXBzIik7Ci0gIGZhaWxfdW5sZXNzIChwYWRjYXBzICE9IE5VTEwpOwotICBzcmN0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3JjdGVtcGwiLCBHU1RfUEFEX1NSQywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBwYWRjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHBhZGNhcHMpOwotCi0gIHBhZGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvY2FwcyIpOwotICBmYWlsX3VubGVzcyAocGFkY2FwcyAhPSBOVUxMKTsKLSAgc2lua3RlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzaW5rdGVtcGwiLCBHU1RfUEFEX1NJTkssCi0gICAgICBHU1RfUEFEX0FMV0FZUywgcGFkY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChwYWRjYXBzKTsKLQotICBzcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzcmN0ZW1wbCwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotICBzaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoc2lua3RlbXBsLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLQotICAvKiBzZXQgdXAgbGluay91bmxpbmsgZnVuY3Rpb25zIGZvciB0aGUgcGFkICovCi0gIGxpbmtlZF9jb3VudDEgPSB1bmxpbmtlZF9jb3VudDEgPSAwOwotICBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uIChzcmNwYWQsIHBhZF9saW5rZWQxKTsKLSAgZ3N0X3BhZF9zZXRfdW5saW5rX2Z1bmN0aW9uIChzcmNwYWQsIHBhZF91bmxpbmtlZDEpOwotICBsaW5rZWRfY291bnQyID0gdW5saW5rZWRfY291bnQyID0gMDsKLSAgZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbiAoc2lua3BhZCwgcGFkX2xpbmtlZDIpOwotICBnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb24gKHNpbmtwYWQsIHBhZF91bmxpbmtlZDIpOwotCi0gIC8qIHRoaXMgc2hvdWxkIHRyaWdnZXIgYSBsaW5rIGZyb20gdGhlIGludGVybmFsIHBhZCB0byB0aGUgc3JjcGFkICovCi0gIGdob3N0cGFkID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJnaG9zdHBhZCIsIHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChnaG9zdHBhZCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDEgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDEgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQyID09IDApOwotICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQyID09IDApOwotCi0gIC8qIHRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhIGNyaXRpYWwgKi8KLSAgQVNTRVJUX0NSSVRJQ0FMIChkdW1teSA9IGdzdF9naG9zdF9wYWRfbmV3ICgiZ2hvc3RwYWQiLCBzcmNwYWQpKTsKLSAgZmFpbF91bmxlc3MgKGR1bW15ID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMCk7Ci0KLSAgLyogdGhpcyBzaG91bGQgbm90IHRyaWdnZXIgYW55dGhpbmcgYmVjYXVzZSB3ZSBhcmUgbm90IGRpcmVjdGx5Ci0gICAqIGxpbmtpbmcvdW5saW5raW5nIHRoZSBzcmMgcGFkLiAqLwotICByZXQgPSBnc3RfcGFkX2xpbmsgKGdob3N0cGFkLCBzaW5rcGFkKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfUEFEX0xJTktfT0spOwotICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDIgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDIgPT0gMCk7Ci0KLSAgLyogdGhpcyBsaW5rIHNob3VsZCBmYWlsIGJlY2F1c2Ugd2UgYXJlIGFscmVhZHkgbGlua2VkLiBMZXQncyBtYWtlIHN1cmUgdGhlCi0gICAqIGxpbmsgZnVuY3Rpb25zIGFyZSBub3QgY2FsbGVkICovCi0gIHJldCA9IGdzdF9wYWRfbGluayAoZ2hvc3RwYWQsIHNpbmtwYWQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9QQURfTElOS19XQVNfTElOS0VEKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDEgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDEgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQyID09IDEpOwotICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQyID09IDApOwotCi0gIHJlcyA9IGdzdF9wYWRfdW5saW5rIChnaG9zdHBhZCwgc2lua3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQxID09IDEpOwotICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQxID09IDApOwotICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MiA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MiA9PSAxKTsKLQotICByZXMgPSBnc3RfcGFkX3VubGluayAoZ2hvc3RwYWQsIHNpbmtwYWQpOwotICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDEgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDEgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQyID09IDEpOwotICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQyID09IDEpOwotCi0gIC8qIHRoaXMgc2hvdWxkIHRyaWdnZXIgdGhlIHVubGluayBmdW5jdGlvbiAqLwotICByZXMgPSBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKEdTVF9HSE9TVF9QQURfQ0FTVCAoZ2hvc3RwYWQpLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGxpbmtlZF9jb3VudDEgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzICh1bmxpbmtlZF9jb3VudDEgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQyID09IDEpOwotICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQyID09IDEpOwotCi0gIC8qIGFuZCB0aGlzIHRoZSBsaW5rIGZ1bmN0aW9uIGFnYWluICovCi0gIHJlcyA9IGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRF9DQVNUIChnaG9zdHBhZCksIHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChsaW5rZWRfY291bnQxID09IDIpOwotICBmYWlsX3VubGVzcyAodW5saW5rZWRfY291bnQxID09IDEpOwotICBmYWlsX3VubGVzcyAobGlua2VkX2NvdW50MiA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHVubGlua2VkX2NvdW50MiA9PSAxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChnaG9zdHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmN0ZW1wbCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmt0ZW1wbCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2hvc3RfcGFkc19jaGFuZ2Vfd2hlbl9saW5rZWQpCi17Ci0gIEdzdEVsZW1lbnQgKmIxLCAqYjIsICpzcmMsICpmbXQsICpzaW5rMSwgKnNpbmsyOwotICBHc3RQYWQgKnNpbmtwYWQsICpnaG9zdHBhZDsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBiMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0gIGIyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYmluIiwgTlVMTCk7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZm10ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsIE5VTEwpOwotICBzaW5rMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIHNpbmsyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYjIpLCBzaW5rMSk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiMiksIHNpbmsyKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgc3JjKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgZm10KTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIxKSwgYjIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LCBmb3JtYXQ9UzE2TEUsIGNoYW5uZWxzPTEiKTsKLSAgZ19vYmplY3Rfc2V0IChmbXQsICJjYXBzIiwgY2FwcywgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBjcmVhdGUgdGhlIGdob3N0cGFkIGFzIGEgc2luay1wYWQgZm9yIGJpbiAyICovCi0gIGdob3N0cGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGIyLCBnaG9zdHBhZCk7Ci0KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rMSwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldCAoKEdzdEdob3N0UGFkICopIGdob3N0cGFkLCBzaW5rcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX21hbnkgKHNyYywgZm10LCBiMiwgTlVMTCkpOwotCi0gIC8qIHNldCBkaWZmZXJlbnQgdGFyZ2V0IGFmdGVyIGdob3N0cGFkIGlzIGxpbmtlZCAqLwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmsyLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0ICgoR3N0R2hvc3RQYWQgKikgZ2hvc3RwYWQsIHNpbmtwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoYjEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgdGhhdCBzZXR0aW5nIGEgZ2hvc3RwYWQgcHJveHkgcGFkIGFzIGdob3N0cGFkIHRhcmdldCBhdXRvbWF0aWNhbGx5IHNldAotICogYm90aCBnaG9zdHBhZCB0YXJnZXRzLgotICoKLSAqIGZha2VzcmMgISAoICkgISBmYWtlc2luawotICovCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dob3N0X3BhZHNfaW50ZXJuYWxfbGluaykKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpiaW4sICpzaW5rOwotICBHc3RQYWQgKnNpbmtwYWQsICpzcmNwYWQsICp0YXJnZXQ7Ci0gIEdzdFByb3h5UGFkICpwcm94eXBhZDsKLQotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0gIGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImJpbiIsIE5VTEwpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYyk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGJpbik7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspOwotCi0gIC8qIGNyZWF0ZSB0aGUgc2luayBnaG9zdHBhZCAqLwotICBzaW5rcGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIHByb3h5cGFkID0gZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwgKEdTVF9QUk9YWV9QQUQgKHNpbmtwYWQpKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBzaW5rcGFkKTsKLQotICAvKiBjcmVhdGUgdGhlIHNyYyBnaG9zdHBhZCBhbmQgbGluayBpdCB0byBzaW5rIHByb3h5cGFkICovCi0gIHNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRCAocHJveHlwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocHJveHlwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIHNyY3BhZCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBiaW4sIHNpbmssIE5VTEwpKTsKLQotICAvKiBDaGVjayB0aGF0IGJvdGggdGFyZ2V0cyBhcmUgc2V0LCBhbmQgcG9pbnQgdG8gZWFjaCBvdGhlciAqLwotICB0YXJnZXQgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQUQgKHNpbmtwYWQpKTsKLSAgZmFpbF9pZiAodGFyZ2V0ID09IE5VTEwpOwotICBwcm94eXBhZCA9IGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsIChHU1RfUFJPWFlfUEFEIChzcmNwYWQpKTsKLSAgZmFpbF91bmxlc3MgKHRhcmdldCA9PSBHU1RfUEFEIChwcm94eXBhZCkpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwcm94eXBhZCk7Ci0KLSAgdGFyZ2V0ID0gZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEIChzcmNwYWQpKTsKLSAgZmFpbF9pZiAodGFyZ2V0ID09IE5VTEwpOwotICBwcm94eXBhZCA9IGdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsIChHU1RfUFJPWFlfUEFEIChzaW5rcGFkKSk7Ci0gIGZhaWxfdW5sZXNzICh0YXJnZXQgPT0gR1NUX1BBRCAocHJveHlwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKLSAgZ3N0X29iamVjdF91bnJlZiAocHJveHlwYWQpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IHRoYXQgcmVtb3ZlIGEgZ2hvc3RwYWQgdGhhdCBoYXMgc29tZXRoaW5nIGZsb3dpbmcgdGhyb3VnaCBpdCBkb2VzIG5vdAotICogY3Jhc2ggdGhlIHByb2dyYW0KLSAqLwotCi1Hc3RFbGVtZW50ICpiaW47Ci1Hc3RQYWQgKmdob3N0c2luazsKLUdzdFBhZCAqZ2hvc3RzcmM7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcmVtb3ZlX2dob3N0cGFkX3Byb2JlX2NiIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIGRhdGEpCi17Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZ2hvc3RzcmMsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChnaG9zdHNpbmssIEZBTFNFKTsKLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoYmluLCBnaG9zdHNyYyk7Ci0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGJpbiwgZ2hvc3RzaW5rKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9EUk9QOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9naG9zdF9wYWRzX3JlbW92ZV93aGlsZV9wbGF5aW5nKQotewotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGdob3N0c3JjID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgiZ2hvc3RzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIHNpbmtwYWQgPSBHU1RfUEFEIChnc3RfcHJveHlfcGFkX2dldF9pbnRlcm5hbCAoR1NUX1BST1hZX1BBRCAoZ2hvc3RzcmMpKSk7Ci0gIGdob3N0c2luayA9IGdzdF9naG9zdF9wYWRfbmV3ICgiZ2hvc3RzaW5rIiwgc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKGdob3N0c3JjLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChnaG9zdHNpbmssIFRSVUUpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdob3N0c3JjKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnaG9zdHNpbmspOwotCi0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3ICgic3JjcGFkIiwgR1NUX1BBRF9TUkMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfbGluayAoc3JjcGFkLCBnaG9zdHNpbmspOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSA9PSBUUlVFKTsKLQotICBnc3RfcGFkX2FkZF9wcm9iZSAoZ2hvc3RzcmMsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsCi0gICAgICByZW1vdmVfZ2hvc3RwYWRfcHJvYmVfY2IsIE5VTEwsIE5VTEwpOwotCi0gIGdfYXNzZXJ0IChnc3RfcGFkX3B1c2ggKHNyY3BhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgRkFMU0UpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWN0aXZhdGVfc3JjKQotewotICBHc3RIYXJuZXNzICpoOwotICBHc3RFbGVtZW50ICpiOwotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIGIgPSBnc3RfYmluX25ldyAoTlVMTCk7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJzeW5jIiwgVFJVRSwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiKSwgc3JjKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGIsIGdzdF9naG9zdF9wYWRfbmV3ICgic3JjIiwgc3JjcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgaCA9IGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgKGIsIE5VTEwsICJzcmMiKTsKLSAgZ3N0X2hhcm5lc3NfcGxheSAoaCk7Ci0KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYik7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hY3RpdmF0ZV9zaW5rX2FuZF9zcmMpCi17Ci0gIEdzdEhhcm5lc3MgKmg7Ci0gIEdzdEVsZW1lbnQgKmI7Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0KLSAgYiA9IGdzdF9iaW5fbmV3IChOVUxMKTsKLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiKSwgZWxlbWVudCk7Ci0KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCAic2luayIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBzaW5rcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCAic3JjIik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGIsIGdzdF9naG9zdF9wYWRfbmV3ICgic3JjIiwgc3JjcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgaCA9IGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgKGIsICJzaW5rIiwgInNyYyIpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAibXljYXBzIik7Ci0KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ3N0X2J1ZmZlcl9uZXcgKCkpOwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYik7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hY3RpdmF0ZV9zcmNfcHVsbF9tb2RlKQotewotICBHc3RFbGVtZW50ICpiOwotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RQYWQgKmludGVybmFscGFkOwotICBHc3RQYWQgKmdob3N0OwotCi0gIGIgPSBnc3RfYmluX25ldyAoTlVMTCk7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGIpLCBzcmMpOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgZ2hvc3QgPSBnc3RfZ2hvc3RfcGFkX25ldyAoInNyYyIsIHNyY3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGIsIGdob3N0KTsKLQotICBpbnRlcm5hbHBhZCA9IChHc3RQYWQgKikgZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwgKChHc3RQcm94eVBhZCAqKSBnaG9zdCk7Ci0KLSAgZmFpbF9pZiAoR1NUX1BBRF9JU19BQ1RJVkUgKGdob3N0KSk7Ci0gIGZhaWxfaWYgKEdTVF9QQURfSVNfQUNUSVZFIChpbnRlcm5hbHBhZCkpOwotICBmYWlsX2lmIChHU1RfUEFEX0lTX0FDVElWRSAoc3JjcGFkKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2FjdGl2YXRlX21vZGUgKGdob3N0LCBHU1RfUEFEX01PREVfUFVMTCwgVFJVRSkpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19BQ1RJVkUgKGdob3N0KSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX0FDVElWRSAoaW50ZXJuYWxwYWQpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfQUNUSVZFIChzcmNwYWQpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChpbnRlcm5hbHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FjdGl2YXRlX3Npbmtfc3dpdGNoX21vZGUpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICpiLCAqc3JjLCAqaWRlbnRpdHk7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZCwgKmludGVybmFscGFkLCAqZ2hvc3Q7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLSAgYiA9IGdzdF9iaW5fbmV3IChOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKLSAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYiksIGlkZW50aXR5KTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGlkZW50aXR5LCAic2luayIpOwotICBnaG9zdCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHNpbmtwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiLCBnaG9zdCk7Ci0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIGdob3N0KTsKLQotICBpbnRlcm5hbHBhZCA9IChHc3RQYWQgKikgZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwgKChHc3RQcm94eVBhZCAqKSBnaG9zdCk7Ci0KLSAgLyogV2Ugc3RhcnQgd2l0aCBubyBhY3RpdmUgcGFkcyAqLwotICBmYWlsX2lmIChHU1RfUEFEX0lTX0FDVElWRSAoZ2hvc3QpKTsKLSAgZmFpbF9pZiAoR1NUX1BBRF9JU19BQ1RJVkUgKGludGVybmFscGFkKSk7Ci0gIGZhaWxfaWYgKEdTVF9QQURfSVNfQUNUSVZFIChzaW5rcGFkKSk7Ci0gIGZhaWxfaWYgKEdTVF9QQURfSVNfQUNUSVZFIChzcmNwYWQpKTsKLQotICBHU1RfREVCVUcgKCJBY3RpdmF0aW5nIHBhZHMgaW4gcHVzaCBtb2RlIik7Ci0gIC8qIExldCdzIGZpcnN0IHRyeSB0byBhY3RpdmF0ZSBldmVyeXRoaW5nIGluIHB1c2gtbW9kZSwgZm9yIHRoaXMgd2UgbmVlZAotICAgKiB0byBnbyBvbiBldmVyeSBleHBvc2VkIHBhZCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChzaW5rcGFkLCBHU1RfUEFEX01PREVfUFVTSCwgVFJVRSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChnaG9zdCwgR1NUX1BBRF9NT0RFX1BVU0gsIFRSVUUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoc3JjcGFkLCBHU1RfUEFEX01PREVfUFVTSCwgVFJVRSkpOwotCi0gIEdTVF9ERUJVRyAoIkNoZWNraW5nIHBhZHMgYXJlIGFsbCBhY3RpdmF0ZWQgcHJvcGVybHkiKTsKLSAgLyogTGV0J3MgY2hlY2sgYWxsIHBhZHMgYXJlIG5vdyBhY3RpdmUsIGluY2x1ZGluZyBpbnRlcm5hbCBvbmVzICovCi0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX01PREUgKGdob3N0KSA9PSBHU1RfUEFEX01PREVfUFVTSCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX01PREUgKGludGVybmFscGFkKSA9PSBHU1RfUEFEX01PREVfUFVTSCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX01PREUgKHNyY3BhZCkgPT0gR1NUX1BBRF9NT0RFX1BVU0gpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9NT0RFIChzaW5rcGFkKSA9PSBHU1RfUEFEX01PREVfUFVTSCk7Ci0KLSAgLyogTm93IHNpbXVsYXRlIGEgc2NoZWR1bGluZyByZWNvbmZpZ3VyYXRpb24gKFBVU0g9PlBVTEwpICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHNpbmtwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKSk7Ci0KLSAgLyogQWxsIHBhZHMgc2hvdWxkIGhhdmUgc3dpdGNoZWQgbW9kZXMgKi8KLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTU9ERSAoZ2hvc3QpID09IEdTVF9QQURfTU9ERV9QVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTU9ERSAoc3JjcGFkKSA9PSBHU1RfUEFEX01PREVfUFVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX01PREUgKHNpbmtwYWQpID09IEdTVF9QQURfTU9ERV9QVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTU9ERSAoaW50ZXJuYWxwYWQpID09IEdTVF9QQURfTU9ERV9QVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChpbnRlcm5hbHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9naG9zdF9wYWRfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0R2hvc3RQYWQiKTsKLQotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnaG9zdCBwYWQgdGVzdHMiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlbW92ZTEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVtb3ZlMik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZW1vdmVfdGFyZ2V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xpbmspOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2hvc3RfcGFkcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX2Jpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX25vdGFyZ2V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dob3N0X3BhZHNfYmxvY2spOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2hvc3RfcGFkc19wcm9iZXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2hvc3RfcGFkc19uZXdfZnJvbV90ZW1wbGF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX25ld19ub190YXJnZXRfZnJvbV90ZW1wbGF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX2ZvcndhcmRfc2V0Y2Fwcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9naG9zdF9wYWRzX3NpbmtfbGlua191bmxpbmspOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2hvc3RfcGFkc19zcmNfbGlua191bmxpbmspOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2hvc3RfcGFkc19jaGFuZ2Vfd2hlbl9saW5rZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2hvc3RfcGFkc19pbnRlcm5hbF9saW5rKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dob3N0X3BhZHNfcmVtb3ZlX3doaWxlX3BsYXlpbmcpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hY3RpdmF0ZV9zcmMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWN0aXZhdGVfc2lua19hbmRfc3JjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FjdGl2YXRlX3NyY19wdWxsX21vZGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYWN0aXZhdGVfc2lua19zd2l0Y2hfbW9kZSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfZ2hvc3RfcGFkKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0aW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjNhMjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NTAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogVW5pdCB0ZXN0cyBmb3IgR3N0SW5mbwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotCi1zdGF0aWMgR0xpc3QgKm1lc3NhZ2VzOyAgICAgICAgIC8qIE5VTEwgKi8KLXN0YXRpYyBnYm9vbGVhbiBzYXZlX21lc3NhZ2VzOyAgLyogRkFMU0UgKi8KLQotc3RhdGljIHZvaWQKLXByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwKLSAgICBHc3REZWJ1Z0xldmVsIGxldmVsLCBjb25zdCBnY2hhciAqIGZpbGUsIGNvbnN0IGdjaGFyICogZnVuY3Rpb24sCi0gICAgZ2ludCBsaW5lLCBHT2JqZWN0ICogb2JqZWN0LCBHc3REZWJ1Z01lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciB1bnVzZWQpCi17Ci0gIGNvbnN0IGdjaGFyICpkYmdfbXNnOwotCi0gIGRiZ19tc2cgPSBnc3RfZGVidWdfbWVzc2FnZV9nZXQgKG1lc3NhZ2UpOwotICBmYWlsX3VubGVzcyAoZGJnX21zZyAhPSBOVUxMKTsKLQotICBpZiAoc2F2ZV9tZXNzYWdlcyAmJiBnX3N0cl9lcXVhbCAoY2F0ZWdvcnktPm5hbWUsICJjaGVjayIpKQotICAgIG1lc3NhZ2VzID0gZ19saXN0X2FwcGVuZCAobWVzc2FnZXMsIGdfc3RyZHVwIChkYmdfbXNnKSk7Ci0KLSAgLyogZ19wcmludCAoIiVzXG4iLCBkYmdfbXNnKTsgKi8KLQotICAvKiBxdWljayBoYWNrIHRvIHN0aWxsIGdldCBzdHVmZiB0byBzaG93IGlmIEdTVF9ERUJVRyBpcyBzZXQgKi8KLSAgaWYgKGdfZ2V0ZW52ICgiR1NUX0RFQlVHIikpIHsKLSAgICBnc3RfZGVidWdfbG9nX2RlZmF1bHQgKGNhdGVnb3J5LCBsZXZlbCwgZmlsZSwgZnVuY3Rpb24sIGxpbmUsIG9iamVjdCwKLSAgICAgICAgbWVzc2FnZSwgdW51c2VkKTsKLSAgfQotfQotCi0vKiBjaGVjayBvdXIgR1NUX1BUUl9GT1JNQVQgcHJpbnRmIGV4dGVuc2lvbiBzdHVmZiAqLwotR1NUX1NUQVJUX1RFU1QgKGluZm9fcHRyX2Zvcm1hdF9wcmludGZfZXh0ZW5zaW9uKQotewotICAvKiBzZXQgdXAgb3VyIG93biBsb2cgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGluIGdzdGluZm8gaXMgYWN0dWFsbHkKLSAgICogZXhlY3V0ZWQgd2l0aG91dCBHU1RfREVCVUcgYmVpbmcgc2V0IG9yIGl0IGJlaW5nIG91dHB1dCB0byBzdGRvdXQgKi8KLSAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk7Ci0gIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uIChwcmludGZfZXh0ZW5zaW9uX2xvZ19mdW5jLCBOVUxMLCBOVUxMKTsKLQotICBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkIChHU1RfTEVWRUxfTE9HKTsKLQotICAvKiBOVUxMIG9iamVjdCAqLwotICBHU1RfTE9HICgiTlVMTDogJSIgR1NUX1BUUl9GT1JNQVQsIChncG9pbnRlcikgTlVMTCk7Ci0KLSAgLyogc3RydWN0dXJlICovCi0gIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJmb28vYmFyIiwgIm51bWJlciIsIEdfVFlQRV9JTlQsIDEsCi0gICAgICAgICJzdHJpbmciLCBHX1RZUEVfU1RSSU5HLCAicyIsICJmbG9hdC1udW1iZXIiLCBHX1RZUEVfRE9VQkxFLAotICAgICAgICAoZ2RvdWJsZSkgNDI0MjQyLjQyLCBOVUxMKTsKLQotICAgIEdTVF9MT0cgKCJTVFJVQ1RVUkU6ICUiIEdTVF9QVFJfRk9STUFULCBzKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICB9Ci0KLSAgLyogbWVzc2FnZSAqLwotICB7Ci0gICAgR3N0TWVzc2FnZSAqbXNnOwotCi0gICAgbXNnID0gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKE5VTEwsCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgicmVkaXJlY3QiLCAibmV3LWxvY2F0aW9uIiwgR19UWVBFX1NUUklORywKLSAgICAgICAgICAgICJodHRwOi8vZm9vYmFyLmNvbS9yMHgwci5vZ2ciLCAibWluaW11bS1iaXRyYXRlIiwgR19UWVBFX0lOVCwKLSAgICAgICAgICAgIDU2MDAwLCBOVUxMKSk7Ci0KLSAgICBHU1RfTE9HICgiTUVTU0FHRTogJSIgR1NUX1BUUl9GT1JNQVQsIG1zZyk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIH0KLQotICAvKiBidWZmZXIgYW5kIGJ1ZmZlciBsaXN0ICovCi0gIHsKLSAgICBHc3RCdWZmZXJMaXN0ICpsaXN0OwotICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDQyLCBOVUxMKTsKLSAgICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9IDUgKiBHU1RfU0VDT05EOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBHU1RfU0VDT05EOwotICAgIEdTVF9MT0cgKCJCVUZGRVI6ICUiIEdTVF9QVFJfRk9STUFULCBidWYpOwotCi0gICAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0gICAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgYnVmKTsKLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgNTgsIE5VTEwpOwotICAgIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIGJ1Zik7Ci0gICAgR1NUX0xPRyAoIkJVRkZFUkxJU1Q6ICUiIEdTVF9QVFJfRk9STUFULCBsaXN0KTsKLSAgICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKGxpc3QpOwotICB9Ci0KLSNpZiAwCi0gIC8qIFRPRE86IEdPYmplY3QgKi8KLSAgewotICAgIEdTVF9MT0cgKCJHT0JKRUNUOiAlIiBHU1RfUFRSX0ZPUk1BVCwgb2JqKTsKLSAgfQotCi0gIC8qIFRPRE86IEdzdE9iamVjdCAqLwotICB7Ci0gICAgR1NUX0xPRyAoIkdTVE9CSkVDVDogJSIgR1NUX1BUUl9GT1JNQVQsIG9iaik7Ci0gIH0KLQotICAvKiBUT0RPOiBHc3RQYWQgKi8KLSAgewotICAgIEdTVF9MT0cgKCJQQUQ6ICUiIEdTVF9QVFJfRk9STUFULCBwYWQpOwotICB9Ci0KLSAgLyogVE9ETzogR3N0Q2FwcyAqLwotICB7Ci0gICAgR1NUX0xPRyAoIlBBRDogJSIgR1NUX1BUUl9GT1JNQVQsIHBhZCk7Ci0gIH0KLSNlbmRpZgotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdTVF9MRVZFTF9OT05FKTsKLSAgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCwgTlVMTCwgTlVMTCk7Ci0gIGdzdF9kZWJ1Z19yZW1vdmVfbG9nX2Z1bmN0aW9uIChwcmludGZfZXh0ZW5zaW9uX2xvZ19mdW5jKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBjaGVjayBvdXIgR1NUX1NFR01FTlRfRk9STUFUIHByaW50ZiBleHRlbnNpb24gc3R1ZmYgKi8KLUdTVF9TVEFSVF9URVNUIChpbmZvX3NlZ21lbnRfZm9ybWF0X3ByaW50Zl9leHRlbnNpb24pCi17Ci0gIC8qIHNldCB1cCBvdXIgb3duIGxvZyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaW4gZ3N0aW5mbyBpcyBhY3R1YWxseQotICAgKiBleGVjdXRlZCB3aXRob3V0IEdTVF9ERUJVRyBiZWluZyBzZXQgb3IgaXQgYmVpbmcgb3V0cHV0IHRvIHN0ZG91dCAqLwotICBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0KTsKLSAgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKHByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMsIE5VTEwsIE5VTEwpOwotCi0gIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdTVF9MRVZFTF9MT0cpOwotCi0gIC8qIFRJTUUgc2VnbWVudCAqLwotICB7Ci0gICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgICBzZWdtZW50LnJhdGUgPSAxLjA7Ci0gICAgc2VnbWVudC5hcHBsaWVkX3JhdGUgPSAyLjA7Ci0gICAgc2VnbWVudC5zdGFydCA9IDA7Ci0gICAgc2VnbWVudC5zdG9wID0gNSAqIDYwICogR1NUX1NFQ09ORDsKLSAgICBzZWdtZW50LnRpbWUgPSAwOwotCi0gICAgc2VnbWVudC5wb3NpdGlvbiA9IDIgKiBHU1RfU0VDT05EOwotICAgIHNlZ21lbnQuZHVyYXRpb24gPSA5MCAqIDYwICogR1NUX1NFQ09ORDsKLQotICAgIEdTVF9MT0cgKCJUSU1FOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzZWdtZW50KTsKLSAgfQotCi0gIC8qIEJZVEUgc2VnbWVudCAqLwotICB7Ci0gICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotCi0gICAgc2VnbWVudC5yYXRlID0gMS4wOwotICAgIHNlZ21lbnQuYXBwbGllZF9yYXRlID0gMS4wOwotICAgIHNlZ21lbnQuc3RhcnQgPSAwOwotICAgIHNlZ21lbnQuc3RvcCA9IDk5OTk5OTk7Ci0gICAgc2VnbWVudC50aW1lID0gMDsKLQotICAgIEdTVF9MT0cgKCJCWVRFOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzZWdtZW50KTsKLSAgfQotCi0gIC8qIFVOS05PV04gZm9ybWF0IHNlZ21lbnQgKGZvcm1hdCBudW1iZXJzIGFyZSBjb25zZWN1dGl2ZSBmcm9tIDApICovCi0gIHsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgOTg3NjU0MzIpOwotCi0gICAgc2VnbWVudC5yYXRlID0gMS4wOwotICAgIHNlZ21lbnQuYXBwbGllZF9yYXRlID0gMS4wOwotICAgIHNlZ21lbnQuc3RhcnQgPSAwOwotICAgIHNlZ21lbnQuc3RvcCA9IDk4NzY1NDMyMTsKLSAgICBzZWdtZW50LnRpbWUgPSAwOwotCi0gICAgR1NUX0xPRyAoIlVOS05PV046ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgJnNlZ21lbnQpOwotICB9Ci0KLSAgLyogVU5ERUZJTkVEIGZvcm1hdCBzZWdtZW50ICovCi0gIHsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotCi0gICAgR1NUX0xPRyAoIlVOREVGSU5FRDogJSIgR1NUX1NFR01FTlRfRk9STUFULCAmc2VnbWVudCk7Ci0gIH0KLQotICAvKiBOVUxMIHNlZ21lbnQgKi8KLSAgR1NUX0xPRyAoIk5VTEw6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgKEdzdFNlZ21lbnQgKikgTlVMTCk7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR1NUX0xFVkVMX05PTkUpOwotICBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0LCBOVUxMLCBOVUxMKTsKLSAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKHByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChpbmZvX2xvZ19oYW5kbGVyKQotewotICBndWludCByZW1vdmVkOwotCi0gIHJlbW92ZWQgPSBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0KTsKLSAgZmFpbF91bmxlc3MgKHJlbW92ZWQgPT0gMSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKGluZm9fZHVtcF9tZW0pCi17Ci0gIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IE5VTEw7Ci0gIEdzdEVsZW1lbnQgKmU7Ci0KLSAgY29uc3QgZ3VpbnQ4IGRhdGFbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2NiwgMHg3NCwgMHg3OSwgMHg3MCwKLSAgICAweDcxLCAweDc0LCAweDIwLCAweDIwLCAweDIwLCAweDA1LCAweDAzLCAweDAwLCAweDcxLCAweDc0LCAweDIwLCAweDIwLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgwMCwgMHgwMCwgMHhlZiwgMHhlMSwgMHg2ZCwgMHg2ZiwgMHg2ZiwgMHg3NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywKLSAgICAweDZkLCAweDc2LCAweDY4LCAweDY0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJmLCAweGQxLCAweDAwLCAweDFkLAotICAgIDB4YmYsIDB4ZDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MGIsIDB4YjUsIDB4MDAsIDB4MDQsIDB4NTksIDB4YzUsCi0gICAgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAnJScsICdzJywgJyUnLCAncycKLSAgfTsKLQotICBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChjYXQsICJkdW1wY2F0IiwgMCwgImRhdGEgZHVtcCBkZWJ1ZyBjYXRlZ29yeSIpOwotICBHU1RfTUVNRFVNUCAoInF1aWNrdGltZSBoZWFkZXIiLCBkYXRhLCBzaXplb2YgKGRhdGEpKTsKLSAgR1NUX01FTURVTVAgKE5VTEwsIGRhdGEsIHNpemVvZiAoZGF0YSkpOwotICBHU1RfQ0FUX01FTURVTVAgKGNhdCwgInF1aWNrdGltZSBoZWFkZXIiLCBkYXRhLCBzaXplb2YgKGRhdGEpKTsKLSAgR1NUX01FTURVTVBfT0JKRUNUIChlLCAib2JqZWN0IHN0dWZmIiwgZGF0YSwgc2l6ZW9mIChkYXRhKSk7Ci0gIEdTVF9DQVRfTUVNRFVNUF9PQkpFQ1QgKGNhdCwgZSwgIm9iamVjdC9jYXQgc3R1ZmYiLCBkYXRhLCBzaXplb2YgKGRhdGEpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKGluZm9fZml4bWUpCi17Ci0gIEdzdERlYnVnQ2F0ZWdvcnkgKmNhdCA9IE5VTEw7Ci0gIEdzdEVsZW1lbnQgKmU7Ci0KLSAgZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoY2F0LCAiZml4Y2F0IiwgMCwgIkZJWE1FIGRlYnVnIGNhdGVnb3J5Iik7Ci0gIEdTVF9GSVhNRSAoImZpeCAlcyB0aGluZyIsICJ0aGlzIik7Ci0gIEdTVF9GSVhNRV9PQkpFQ1QgKGUsICJmaXggJXMgb2JqZWN0IiwgInRoaXMiKTsKLSAgR1NUX0NBVF9GSVhNRSAoY2F0LCAiZml4IHNvbWUlcyBpbiB0aGlzIGNhdGVnb3J5IiwgInRoaW5nIik7Ci0gIEdTVF9DQVRfRklYTUVfT0JKRUNUIChjYXQsIGUsICJmaXggc29tZSVzIGluIHRoaXMgY2F0IGFuZCBvYmplY3QiLCAidGhpbmciKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogbmVlZCB0aGlzIGluZGlyZWN0aW9uIHNvIHRoZSBjb21waWxlciBkb2Vzbid0IGNoZWNrIHRoZSBwcmludGYgZm9ybWF0Ci0gKiBsaWtlIGl0IHdvdWxkIGlmIHdlIHVzZWQgR1NUX0lORk8gZGlyZWN0bHkgKGl0IHdvdWxkIGNvbXBsYWluKSAqLwotc3RhdGljIHZvaWQKLWNhbGxfR1NUX0lORk8gKGNvbnN0IGdjaGFyICogZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyX2FyZ3M7Ci0KLSAgdmFfc3RhcnQgKHZhcl9hcmdzLCBmb3JtYXQpOwotICBnc3RfZGVidWdfbG9nX3ZhbGlzdCAoR1NUX0NBVF9ERUZBVUxULCBHU1RfTEVWRUxfSU5GTywgX19GSUxFX18sIEdTVF9GVU5DVElPTiwKLSAgICAgIF9fTElORV9fLCBOVUxMLCBmb3JtYXQsIHZhcl9hcmdzKTsKLSAgdmFfZW5kICh2YXJfYXJncyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUIChpbmZvX29sZF9wcmludGZfZXh0ZW5zaW9ucykKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RDYXBzICpjYXBzOwotICBnY2hhciAqc3RyOwotCi0gIC8qIHNldCB1cCBvdXIgb3duIGxvZyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhlIGNvZGUgaW4gZ3N0aW5mbyBpcyBhY3R1YWxseQotICAgKiBleGVjdXRlZCB3aXRob3V0IEdTVF9ERUJVRyBiZWluZyBzZXQgb3IgaXQgYmVpbmcgb3V0cHV0IHRvIHN0ZG91dCAqLwotICBnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0KTsKLSAgZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24gKHByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMsIE5VTEwsIE5VTEwpOwotCi0gIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdTVF9MRVZFTF9MT0cpOwotCi0gIHNhdmVfbWVzc2FnZXMgPSBUUlVFOwotCi0gIGZhaWxfdW5sZXNzIChtZXNzYWdlcyA9PSBOVUxMKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28vYmFyIiwgIndpZHRoIiwgR19UWVBFX0lOVCwgNDA5NiwKLSAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgNTAsIDEsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiQVJHQiIsCi0gICAgICBOVUxMKTsKLSAgY2FsbF9HU1RfSU5GTyAoIlNlZ21lbnQgJVEsIGNhcHMgYXJlICVQIiwgJnNlZ21lbnQsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAobWVzc2FnZXMpLCAxKTsKLSAgc3RyID0gKGdjaGFyICopIG1lc3NhZ2VzLT5kYXRhOwotICBmYWlsX3VubGVzcyAoc3RyICE9IE5VTEwpOwotCi0gIEdTVF9JTkZPICgic3RyID0gJyVzJyIsIHN0cik7Ci0KLSAgZmFpbF91bmxlc3MgKHN0cnN0ciAoc3RyLCAidGltZSIpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3Ryc3RyIChzdHIsICJzdGFydD0wOjAwOjAwLjAwMDAwMDAwMCIpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3Ryc3RyIChzdHIsICJzdG9wPTk5Ojk5Ojk5Ljk5OTk5OTk5OSIpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3Ryc3RyIChzdHIsICJhcHBsaWVkX3JhdGU9MS4wMDAwMDAiKSAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoc3Ryc3RyIChzdHIsICIgY2FwcyBhcmUgIikgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzdHJzdHIgKHN0ciwgImZvby9iYXIiKSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHN0cnN0ciAoc3RyLCAid2lkdGg9KGludCk0MDk2IikgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzdHJzdHIgKHN0ciwgImZyYW1lcmF0ZT0oZnJhY3Rpb24pNTAvMSIpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3Ryc3RyIChzdHIsICJBUkdCIikgIT0gTlVMTCk7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR1NUX0xFVkVMX05PTkUpOwotICBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0LCBOVUxMLCBOVUxMKTsKLSAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKHByaW50Zl9leHRlbnNpb25fbG9nX2Z1bmMpOwotICBzYXZlX21lc3NhZ2VzID0gRkFMU0U7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKG1lc3NhZ2VzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSk7Ci0gIG1lc3NhZ2VzID0gTlVMTDsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAoaW5mb19yZWdpc3Rlcl9zYW1lX2RlYnVnX2NhdGVnb3J5X3R3aWNlKQotewotICBHc3REZWJ1Z0NhdGVnb3J5ICpjYXQxID0gTlVMTCwgKmNhdDIgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChjYXQxLCAiZHVwbGktY2F0IiwgMCwgIkdvaW5nIG9uY2UiKTsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGNhdDIsICJkdXBsaS1jYXQiLCAwLCAiR29pbmcgdHdpY2UiKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoY2F0MSwgY2F0Mik7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9uYW1lIChjYXQxKSwgImR1cGxpLWNhdCIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X2Rlc2NyaXB0aW9uIChjYXQxKSwKLSAgICAgICJHb2luZyBvbmNlIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKGluZm9fc2V0X2FuZF91bnNldF9zaW5nbGUpCi17Ci0gIEdzdERlYnVnTGV2ZWwgb3JpZyA9IGdzdF9kZWJ1Z19nZXRfZGVmYXVsdF90aHJlc2hvbGQgKCk7Ci0gIEdzdERlYnVnTGV2ZWwgY2F0MSwgY2F0MjsKLSAgR3N0RGVidWdDYXRlZ29yeSAqc3RhdGVzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9HRVQgKHN0YXRlcywgIkdTVF9TVEFURVMiKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlcyAhPSBOVUxMKTsKLQotICBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkIChHU1RfTEVWRUxfV0FSTklORyk7Ci0KLSAgZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUgKCJHU1RfU1RBVEVTIiwgR1NUX0xFVkVMX0RFQlVHKTsKLSAgY2F0MSA9IGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkIChzdGF0ZXMpOwotICBnc3RfZGVidWdfdW5zZXRfdGhyZXNob2xkX2Zvcl9uYW1lICgiR1NUX1NUQVRFUyIpOwotICBjYXQyID0gZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKHN0YXRlcyk7Ci0KLSAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAob3JpZyk7Ci0gIGZhaWxfdW5sZXNzIChjYXQxID0gR1NUX0xFVkVMX0RFQlVHKTsKLSAgZmFpbF91bmxlc3MgKGNhdDIgPSBHU1RfTEVWRUxfV0FSTklORyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKGluZm9fc2V0X2FuZF91bnNldF9tdWx0aXBsZSkKLXsKLSAgR3N0RGVidWdMZXZlbCBvcmlnID0gZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZCAoKTsKLSAgR3N0RGVidWdMZXZlbCBjYXQxLCBjYXQyLCBjYXQzOwotICBHc3REZWJ1Z0NhdGVnb3J5ICpzdGF0ZXM7Ci0gIEdzdERlYnVnQ2F0ZWdvcnkgKmNhcHM7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0dFVCAoc3RhdGVzLCAiR1NUX1NUQVRFUyIpOwotICBHU1RfREVCVUdfQ0FURUdPUllfR0VUIChjYXBzLCAiR1NUX0NBUFMiKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7Ci0KLSAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAoR1NUX0xFVkVMX1dBUk5JTkcpOwotCi0gIGdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zvcl9uYW1lICgiR1NUX1NUQVRFUyIsIEdTVF9MRVZFTF9ERUJVRyk7Ci0gIGdzdF9kZWJ1Z19zZXRfdGhyZXNob2xkX2Zvcl9uYW1lICgiR1NUX0NBUFMiLCBHU1RfTEVWRUxfREVCVUcpOwotICBjYXQxID0gZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKHN0YXRlcyk7Ci0gIGdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUgKCJHU1RfU1RBVEVTIik7Ci0gIGdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUgKCJHU1RfQ0FQUyIpOwotICBjYXQyID0gZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKHN0YXRlcyk7Ci0gIGNhdDMgPSBnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoY2Fwcyk7Ci0KLSAgZ3N0X2RlYnVnX3NldF9kZWZhdWx0X3RocmVzaG9sZCAob3JpZyk7Ci0KLSAgZmFpbF91bmxlc3MgKGNhdDEgPSBHU1RfTEVWRUxfREVCVUcpOwotICBmYWlsX3VubGVzcyAoY2F0MiA9IEdTVF9MRVZFTF9XQVJOSU5HKTsKLSAgZmFpbF91bmxlc3MgKGNhdDMgPSBHU1RfTEVWRUxfV0FSTklORyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLSNlbmRpZgotCi1HU1RfU1RBUlRfVEVTVCAoaW5mb19mb3VyY2MpCi17Ci0gIGdjaGFyICpyZXM7Ci0gIGNvbnN0IGdjaGFyICpjbXA7Ci0KLSAgY21wID0gImFiY2QiOwotICByZXMgPSBnX3N0cmR1cF9wcmludGYgKCIlIiBHU1RfRk9VUkNDX0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTICgweDY0NjM2MjYxKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHJlcywgY21wKTsKLSAgZ19mcmVlIChyZXMpOwotCi0gIGNtcCA9ICIuYmNkIjsKLSAgcmVzID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR1NUX0ZPVVJDQ19GT1JNQVQsIEdTVF9GT1VSQ0NfQVJHUyAoMHg2NDYzNjJhOSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChyZXMsIGNtcCk7Ci0gIGdfZnJlZSAocmVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2luZm9fc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0SW5mbyIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJpbmZvIik7Ci0KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAzMCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgaW5mb19mb3VyY2MpOwotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX3NlZ21lbnRfZm9ybWF0X3ByaW50Zl9leHRlbnNpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIGluZm9fcHRyX2Zvcm1hdF9wcmludGZfZXh0ZW5zaW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX2xvZ19oYW5kbGVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX2R1bXBfbWVtKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX2ZpeG1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX29sZF9wcmludGZfZXh0ZW5zaW9ucyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgaW5mb19yZWdpc3Rlcl9zYW1lX2RlYnVnX2NhdGVnb3J5X3R3aWNlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX3NldF9hbmRfdW5zZXRfc2luZ2xlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBpbmZvX3NldF9hbmRfdW5zZXRfbXVsdGlwbGUpOwotI2VuZGlmCi0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfaW5mbyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0aXRlcmF0b3IuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjNhMmQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RpdGVyYXRvci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqCi0gKiBnc3RpdGVyYXRvci5jOiBVbml0IHRlc3QgZm9yIGl0ZXJhdG9ycwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0KLXN0YXRpYyBHTGlzdCAqCi1tYWtlX2xpc3Rfb2ZfaW50cyAoZ2ludCBuKQotewotICBHTGlzdCAqcmV0ID0gTlVMTDsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgcmV0ID0gZ19saXN0X3ByZXBlbmQgKHJldCwgR0lOVF9UT19QT0lOVEVSIChpKSk7Ci0KLSAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlIChyZXQpOwotfQotCi0jZGVmaW5lIE5VTV9FTEVNRU5UUyAxMAotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tYW51YWxfaXRlcmF0aW9uKQotewotICBHTGlzdCAqbDsKLSAgZ3VpbnQzMiBjb29raWUgPSAwOwotICBHTXV0ZXggbTsKLSAgR3N0SXRlcmF0b3IgKml0ZXI7Ci0gIEdzdEl0ZXJhdG9yUmVzdWx0IHJlczsKLSAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07Ci0gIGdpbnQgaSA9IDA7Ci0KLSAgbCA9IG1ha2VfbGlzdF9vZl9pbnRzIChOVU1fRUxFTUVOVFMpOwotICBnX211dGV4X2luaXQgKCZtKTsKLQotICBpdGVyID0gZ3N0X2l0ZXJhdG9yX25ld19saXN0IChHX1RZUEVfUE9JTlRFUiwgJm0sICZjb29raWUsICZsLCBOVUxMLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoaXRlciAhPSBOVUxMKTsKLQotICB3aGlsZSAoMSkgewotICAgIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChpdGVyLCAmaXRlbSk7Ci0gICAgaWYgKGkgPCBOVU1fRUxFTUVOVFMpIHsKLSAgICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX09LKTsKLSAgICAgIGZhaWxfdW5sZXNzIChHUE9JTlRFUl9UT19JTlQgKGdfdmFsdWVfZ2V0X3BvaW50ZXIgKCZpdGVtKSkgPT0gaSk7Ci0gICAgICBnX3ZhbHVlX3Jlc2V0ICgmaXRlbSk7Ci0gICAgICBpKys7Ci0gICAgICBjb250aW51ZTsKLSAgICB9IGVsc2UgewotICAgICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ192YWx1ZV91bnNldCAoJml0ZW0pOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZtKTsKLSAgZ19saXN0X2ZyZWUgKGwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3Jlc3luYykKLXsKLSAgR0xpc3QgKmw7Ci0gIGd1aW50MzIgY29va2llID0gMDsKLSAgR011dGV4IG07Ci0gIEdzdEl0ZXJhdG9yICppdGVyOwotICBHc3RJdGVyYXRvclJlc3VsdCByZXM7Ci0gIEdWYWx1ZSBpdGVtID0geyAwLCB9OwotICBnaW50IGkgPSAwOwotICBnYm9vbGVhbiBoYWNrZWRfbGlzdCA9IEZBTFNFOwotCi0gIGwgPSBtYWtlX2xpc3Rfb2ZfaW50cyAoTlVNX0VMRU1FTlRTKTsKLSAgZ19tdXRleF9pbml0ICgmbSk7Ci0KLSAgaXRlciA9IGdzdF9pdGVyYXRvcl9uZXdfbGlzdCAoR19UWVBFX1BPSU5URVIsICZtLCAmY29va2llLCAmbCwgTlVMTCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGl0ZXIgIT0gTlVMTCk7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoaXRlciwgJml0ZW0pOwotICAgIGlmIChpIDwgTlVNX0VMRU1FTlRTIC8gMikgewotICAgICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOwotICAgICAgZmFpbF91bmxlc3MgKEdQT0lOVEVSX1RPX0lOVCAoZ192YWx1ZV9nZXRfcG9pbnRlciAoJml0ZW0pKSA9PSBpKTsKLSAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgIGkrKzsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0gZWxzZSBpZiAoIWhhY2tlZF9saXN0KSB7Ci0gICAgICAvKiBoZXJlJ3Mgd2hlcmUgd2UgdGVzdCByZXN5bmMgKi8KLSAgICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX09LKTsKLSAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgIGwgPSBnX2xpc3RfcHJlcGVuZCAobCwgR0lOVF9UT19QT0lOVEVSICgtMSkpOwotICAgICAgY29va2llKys7Ci0gICAgICBoYWNrZWRfbGlzdCA9IFRSVUU7Ci0gICAgICBjb250aW51ZTsKLSAgICB9IGVsc2UgewotICAgICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKLSAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOwotICAgICAgcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZpdGVtKTsKLSAgICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0lURVJBVE9SX09LKTsKLSAgICAgIGZhaWxfdW5sZXNzIChHUE9JTlRFUl9UT19JTlQgKGdfdmFsdWVfZ2V0X3BvaW50ZXIgKCZpdGVtKSkgPT0gLTEpOwotICAgICAgZ192YWx1ZV9yZXNldCAoJml0ZW0pOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ192YWx1ZV91bnNldCAoJml0ZW0pOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZtKTsKLSAgZ19saXN0X2ZyZWUgKGwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotYWRkX2ZvbGRfZnVuYyAoY29uc3QgR1ZhbHVlICogaXRlbSwgR1ZhbHVlICogcmV0LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfdmFsdWVfc2V0X2ludCAocmV0LAotICAgICAgZ192YWx1ZV9nZXRfaW50IChyZXQpICsgR1BPSU5URVJfVE9fSU5UIChnX3ZhbHVlX2dldF9wb2ludGVyIChpdGVtKSkpOwotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZm9sZCkKLXsKLSAgR0xpc3QgKmw7Ci0gIGd1aW50MzIgY29va2llID0gMDsKLSAgR011dGV4IG07Ci0gIEdzdEl0ZXJhdG9yICppdGVyOwotICBHc3RJdGVyYXRvclJlc3VsdCByZXM7Ci0gIGdpbnQgaSwgZXhwZWN0ZWQ7Ci0gIEdWYWx1ZSByZXQgPSB7IDAsIH07Ci0KLSAgbCA9IG1ha2VfbGlzdF9vZl9pbnRzIChOVU1fRUxFTUVOVFMpOwotICBnX211dGV4X2luaXQgKCZtKTsKLSAgaXRlciA9IGdzdF9pdGVyYXRvcl9uZXdfbGlzdCAoR19UWVBFX1BPSU5URVIsICZtLCAmY29va2llLCAmbCwgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpdGVyICE9IE5VTEwpOwotCi0gIGV4cGVjdGVkID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IE5VTV9FTEVNRU5UUzsgaSsrKQotICAgIGV4cGVjdGVkICs9IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmcmV0LCBHX1RZUEVfSU5UKTsKLSAgZ192YWx1ZV9zZXRfaW50ICgmcmV0LCAwKTsKLQotICByZXMgPSBnc3RfaXRlcmF0b3JfZm9sZCAoaXRlciwgYWRkX2ZvbGRfZnVuYywgJnJldCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9pbnQgKCZyZXQpID09IGV4cGVjdGVkKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZtKTsKLSAgZ19saXN0X2ZyZWUgKGwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbmdsZSkKLXsKLSAgR3N0SXRlcmF0b3IgKml0OwotICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoInRlc3QiKTsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIEdzdFN0cnVjdHVyZSAqaTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2LCBHU1RfVFlQRV9TVFJVQ1RVUkUpOwotICBnX3ZhbHVlX3NldF9ib3hlZCAoJnYsIHMpOwotICBpdCA9IGdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlIChHU1RfVFlQRV9TVFJVQ1RVUkUsICZ2KTsKLSAgZ192YWx1ZV9yZXNldCAoJnYpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2KSA9PSBHU1RfSVRFUkFUT1JfT0spOwotICBpID0gZ192YWx1ZV9nZXRfYm94ZWQgKCZ2KTsKLSAgZmFpbF91bmxlc3MgKHN0cmNtcCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoaSkpID09IDApOwotICBpID0gTlVMTDsKLSAgZ192YWx1ZV9yZXNldCAoJnYpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZ2KSA9PSBHU1RfSVRFUkFUT1JfRE9ORSk7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9ib3hlZCAoJnYpID09IE5VTEwpOwotCi0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7Ci0KLSAgaXQgPSBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoR1NUX1RZUEVfU1RSVUNUVVJFLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdikgPT0gR1NUX0lURVJBVE9SX0RPTkUpOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfYm94ZWQgKCZ2KSA9PSBOVUxMKTsKLQotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0KLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2ludAotZmlsdGVyMl9jYiAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqdmEgPSBhOwotICBnaW50IGlhOwotCi0gIGlhID0gR1BPSU5URVJfVE9fSU5UIChnX3ZhbHVlX2dldF9wb2ludGVyICh2YSkpOwotCi0gIHJldHVybiBpYSAlIDI7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpbHRlcikKLXsKLSAgR0xpc3QgKmw7Ci0gIGd1aW50MzIgY29va2llID0gMDsKLSAgR011dGV4IG07Ci0gIEdzdEl0ZXJhdG9yICppdGVyLCAqZmlsdGVyOwotICBHc3RJdGVyYXRvclJlc3VsdCByZXM7Ci0gIEdWYWx1ZSBpdGVtID0geyAwLCB9OwotICBnaW50IGV4cGVjdGVkID0gMCwgdmFsdWU7Ci0KLSAgbCA9IG1ha2VfbGlzdF9vZl9pbnRzIChOVU1fRUxFTUVOVFMpOwotICBnX211dGV4X2luaXQgKCZtKTsKLSAgaXRlciA9IGdzdF9pdGVyYXRvcl9uZXdfbGlzdCAoR19UWVBFX1BPSU5URVIsICZtLCAmY29va2llLCAmbCwgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpdGVyICE9IE5VTEwpOwotCi0gIGZpbHRlciA9IGdzdF9pdGVyYXRvcl9maWx0ZXIgKGl0ZXIsIGZpbHRlcjJfY2IsIE5VTEwpOwotCi0gIHdoaWxlICgxKSB7Ci0gICAgcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGZpbHRlciwgJml0ZW0pOwotICAgIGlmIChyZXMgPT0gR1NUX0lURVJBVE9SX0RPTkUpCi0gICAgICBicmVhazsKLSAgICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9PSyk7Ci0gICAgdmFsdWUgPSBHUE9JTlRFUl9UT19JTlQgKGdfdmFsdWVfZ2V0X3BvaW50ZXIgKCZpdGVtKSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodmFsdWUsIGV4cGVjdGVkKTsKLSAgICBleHBlY3RlZCArPSAyOwotICB9Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ192YWx1ZV91bnNldCAoJml0ZW0pOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoZmlsdGVyKTsKLSAgZ19tdXRleF9jbGVhciAoJm0pOwotICBnX2xpc3RfZnJlZSAobCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdpbnQKLWZpbHRlcjJfbG9ja19jYiAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqdmEgPSBhOwotICBjb25zdCBHVmFsdWUgKnZiID0gYjsKLSAgZ2ludCBpYTsKLSAgR011dGV4ICptOwotCi0gIGlhID0gR1BPSU5URVJfVE9fSU5UIChnX3ZhbHVlX2dldF9wb2ludGVyICh2YSkpOwotCi0gIG0gPSBnX3ZhbHVlX2dldF9wb2ludGVyICh2Yik7Ci0gIGdfbXV0ZXhfbG9jayAobSk7Ci0gIGdfbXV0ZXhfdW5sb2NrIChtKTsKLQotICByZXR1cm4gaWEgJSAyOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9maWx0ZXJfbG9ja2luZykKLXsKLSAgR0xpc3QgKmw7Ci0gIGd1aW50MzIgY29va2llID0gMDsKLSAgR011dGV4IG07Ci0gIEdzdEl0ZXJhdG9yICppdGVyLCAqZmlsdGVyOwotICBHc3RJdGVyYXRvclJlc3VsdCByZXM7Ci0gIEdWYWx1ZSBpdGVtID0geyAwLCB9OwotICBHVmFsdWUgdXNlcl9kYXRhID0geyAwLCB9OwotICBnaW50IGV4cGVjdGVkID0gMCwgdmFsdWU7Ci0KLSAgbCA9IG1ha2VfbGlzdF9vZl9pbnRzIChOVU1fRUxFTUVOVFMpOwotICBnX211dGV4X2luaXQgKCZtKTsKLSAgaXRlciA9IGdzdF9pdGVyYXRvcl9uZXdfbGlzdCAoR19UWVBFX1BPSU5URVIsICZtLCAmY29va2llLCAmbCwgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpdGVyICE9IE5VTEwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnVzZXJfZGF0YSwgR19UWVBFX1BPSU5URVIpOwotICBnX3ZhbHVlX3NldF9wb2ludGVyICgmdXNlcl9kYXRhLCAmbSk7Ci0KLSAgZmlsdGVyID0gZ3N0X2l0ZXJhdG9yX2ZpbHRlciAoaXRlciwgZmlsdGVyMl9sb2NrX2NiLCAmdXNlcl9kYXRhKTsKLQotICB3aGlsZSAoMSkgewotICAgIHJlcyA9IGdzdF9pdGVyYXRvcl9uZXh0IChmaWx0ZXIsICZpdGVtKTsKLSAgICBpZiAocmVzID09IEdTVF9JVEVSQVRPUl9ET05FKQotICAgICAgYnJlYWs7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOwotICAgIHZhbHVlID0gR1BPSU5URVJfVE9fSU5UIChnX3ZhbHVlX2dldF9wb2ludGVyICgmaXRlbSkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHZhbHVlLCBleHBlY3RlZCk7Ci0gICAgZXhwZWN0ZWQgKz0gMjsKLSAgfQotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKLSAgZ192YWx1ZV91bnNldCAoJnVzZXJfZGF0YSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChmaWx0ZXIpOwotICBnX211dGV4X2NsZWFyICgmbSk7Ci0gIGdfbGlzdF9mcmVlIChsKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2ludAotZmlsdGVyNF9jYiAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqdmEgPSBhOwotICBnaW50IGlhOwotCi0gIGlhID0gR1BPSU5URVJfVE9fSU5UIChnX3ZhbHVlX2dldF9wb2ludGVyICh2YSkpOwotCi0gIHJldHVybiBpYSAlIDQ7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpbHRlcl9vZl9maWx0ZXIpCi17Ci0gIEdMaXN0ICpsOwotICBndWludDMyIGNvb2tpZSA9IDA7Ci0gIEdNdXRleCBtOwotICBHc3RJdGVyYXRvciAqaXRlciwgKmZpbHRlciwgKmZpbHRlcjI7Ci0gIEdzdEl0ZXJhdG9yUmVzdWx0IHJlczsKLSAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07Ci0gIGdpbnQgZXhwZWN0ZWQgPSAwLCB2YWx1ZTsKLQotICBsID0gbWFrZV9saXN0X29mX2ludHMgKE5VTV9FTEVNRU5UUyk7Ci0gIGdfbXV0ZXhfaW5pdCAoJm0pOwotICBpdGVyID0gZ3N0X2l0ZXJhdG9yX25ld19saXN0IChHX1RZUEVfUE9JTlRFUiwgJm0sICZjb29raWUsICZsLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGl0ZXIgIT0gTlVMTCk7Ci0KLSAgZmlsdGVyID0gZ3N0X2l0ZXJhdG9yX2ZpbHRlciAoaXRlciwgZmlsdGVyMl9jYiwgTlVMTCk7Ci0gIGZpbHRlcjIgPSBnc3RfaXRlcmF0b3JfZmlsdGVyIChmaWx0ZXIsIGZpbHRlcjRfY2IsIE5VTEwpOwotCi0gIHdoaWxlICgxKSB7Ci0gICAgcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGZpbHRlcjIsICZpdGVtKTsKLSAgICBpZiAocmVzID09IEdTVF9JVEVSQVRPUl9ET05FKQotICAgICAgYnJlYWs7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfSVRFUkFUT1JfT0spOwotICAgIHZhbHVlID0gR1BPSU5URVJfVE9fSU5UIChnX3ZhbHVlX2dldF9wb2ludGVyICgmaXRlbSkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHZhbHVlLCBleHBlY3RlZCk7Ci0gICAgZXhwZWN0ZWQgKz0gNDsKLSAgfQotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGZpbHRlcjIpOwotICBnX211dGV4X2NsZWFyICgmbSk7Ci0gIGdfbGlzdF9mcmVlIChsKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2ludAotZmlsdGVyNF9sb2NrX2NiIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLSAgY29uc3QgR1ZhbHVlICp2YSA9IGE7Ci0gIGNvbnN0IEdWYWx1ZSAqdmIgPSBiOwotICBnaW50IGlhOwotICBHTXV0ZXggKm07Ci0KLSAgaWEgPSBHUE9JTlRFUl9UT19JTlQgKGdfdmFsdWVfZ2V0X3BvaW50ZXIgKHZhKSk7Ci0KLSAgbSA9IGdfdmFsdWVfZ2V0X3BvaW50ZXIgKHZiKTsKLSAgZ19tdXRleF9sb2NrIChtKTsKLSAgZ19tdXRleF91bmxvY2sgKG0pOwotCi0gIHJldHVybiBpYSAlIDQ7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpbHRlcl9vZl9maWx0ZXJfbG9ja2luZykKLXsKLSAgR0xpc3QgKmw7Ci0gIGd1aW50MzIgY29va2llID0gMDsKLSAgR011dGV4IG07Ci0gIEdzdEl0ZXJhdG9yICppdGVyLCAqZmlsdGVyLCAqZmlsdGVyMjsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzOwotICBHVmFsdWUgaXRlbSA9IHsgMCwgfTsKLSAgR1ZhbHVlIHVzZXJfZGF0YSA9IHsgMCwgfTsKLSAgZ2ludCBleHBlY3RlZCA9IDAsIHZhbHVlOwotCi0gIGwgPSBtYWtlX2xpc3Rfb2ZfaW50cyAoTlVNX0VMRU1FTlRTKTsKLSAgZ19tdXRleF9pbml0ICgmbSk7Ci0gIGl0ZXIgPSBnc3RfaXRlcmF0b3JfbmV3X2xpc3QgKEdfVFlQRV9QT0lOVEVSLCAmbSwgJmNvb2tpZSwgJmwsIE5VTEwsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoaXRlciAhPSBOVUxMKTsKLQotICBnX3ZhbHVlX2luaXQgKCZ1c2VyX2RhdGEsIEdfVFlQRV9QT0lOVEVSKTsKLSAgZ192YWx1ZV9zZXRfcG9pbnRlciAoJnVzZXJfZGF0YSwgJm0pOwotCi0gIGZpbHRlciA9IGdzdF9pdGVyYXRvcl9maWx0ZXIgKGl0ZXIsIGZpbHRlcjJfbG9ja19jYiwgJnVzZXJfZGF0YSk7Ci0gIGZpbHRlcjIgPSBnc3RfaXRlcmF0b3JfZmlsdGVyIChmaWx0ZXIsIGZpbHRlcjRfbG9ja19jYiwgJnVzZXJfZGF0YSk7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICByZXMgPSBnc3RfaXRlcmF0b3JfbmV4dCAoZmlsdGVyMiwgJml0ZW0pOwotICAgIGlmIChyZXMgPT0gR1NUX0lURVJBVE9SX0RPTkUpCi0gICAgICBicmVhazsKLSAgICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9JVEVSQVRPUl9PSyk7Ci0gICAgdmFsdWUgPSBHUE9JTlRFUl9UT19JTlQgKGdfdmFsdWVfZ2V0X3BvaW50ZXIgKCZpdGVtKSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodmFsdWUsIGV4cGVjdGVkKTsKLSAgICBleHBlY3RlZCArPSA0OwotICB9Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ192YWx1ZV91bnNldCAoJml0ZW0pOwotICBnX3ZhbHVlX3Vuc2V0ICgmdXNlcl9kYXRhKTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGZpbHRlcjIpOwotICBnX211dGV4X2NsZWFyICgmbSk7Ci0gIGdfbGlzdF9mcmVlIChsKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2l0ZXJhdG9yX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEl0ZXJhdG9yIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImNvcnJlY3RuZXNzIik7Ci0KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21hbnVhbF9pdGVyYXRpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVzeW5jKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZvbGQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luZ2xlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpbHRlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9maWx0ZXJfbG9ja2luZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9maWx0ZXJfb2ZfZmlsdGVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpbHRlcl9vZl9maWx0ZXJfbG9ja2luZyk7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2l0ZXJhdG9yKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RtZW1vcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiM2E3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0bWVtb3J5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MDQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBHc3RNZW1vcnkKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEyPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnMgYXQgZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3VibWVtb3J5KQotewotICBHc3RNZW1vcnkgKm1lbW9yeSwgKnN1YjsKLSAgR3N0TWFwSW5mbyBpbmZvLCBzaW5mbzsKLQotICBtZW1vcnkgPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCA0LCBOVUxMKTsKLQotICAvKiBjaGVjayBzaXplcywgbWVtb3J5IHN0YXJ0cyBvdXQgZW1wdHkgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbWFwIChtZW1vcnksICZpbmZvLCBHU1RfTUFQX1dSSVRFKSk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvLnNpemUgPT0gNCwgIm1lbW9yeSBoYXMgd3Jvbmcgc2l6ZSIpOwotICBmYWlsX3VubGVzcyAoaW5mby5tYXhzaXplID49IDQsICJtZW1vcnkgaGFzIHdyb25nIHNpemUiKTsKLSAgbWVtc2V0IChpbmZvLmRhdGEsIDAsIDQpOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW1vcnksICZpbmZvKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbW9yeSwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotCi0gIHN1YiA9IGdzdF9tZW1vcnlfc2hhcmUgKG1lbW9yeSwgMSwgMik7Ci0gIGZhaWxfaWYgKHN1YiA9PSBOVUxMLCAic2hhcmUgb2YgbWVtb3J5IHJldHVybmVkIE5VTEwiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKHN1YiwgJnNpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLSAgZmFpbF91bmxlc3MgKHNpbmZvLnNpemUgPT0gMiwgInN1Ym1lbW9yeSBoYXMgd3Jvbmcgc2l6ZSIpOwotICBmYWlsX3VubGVzcyAobWVtY21wIChpbmZvLmRhdGEgKyAxLCBzaW5mby5kYXRhLCAyKSA9PSAwLAotICAgICAgInN1Ym1lbW9yeSBjb250YWlucyB0aGUgd3JvbmcgZGF0YSIpOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKHN1YiwgInN1Ym1lbW9yeSIsIDEpOwotICBnc3RfbWVtb3J5X3VubWFwIChzdWIsICZzaW5mbyk7Ci0gIGdzdF9tZW1vcnlfdW5yZWYgKHN1Yik7Ci0KLSAgLyogY3JlYXRlIGEgc3VibWVtb3J5IG9mIHNpemUgMCAqLwotICBzdWIgPSBnc3RfbWVtb3J5X3NoYXJlIChtZW1vcnksIDEsIDApOwotICBmYWlsX2lmIChzdWIgPT0gTlVMTCwgInNoYXJlIG1lbW9yeSByZXR1cm5lZCBOVUxMIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAoc3ViLCAmc2luZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoc2luZm8uc2l6ZSA9PSAwLCAic3VibWVtb3J5IGhhcyB3cm9uZyBzaXplIik7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKGluZm8uZGF0YSArIDEsIHNpbmZvLmRhdGEsIDApID09IDAsCi0gICAgICAic3VibWVtb3J5IGNvbnRhaW5zIHRoZSB3cm9uZyBkYXRhIik7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoc3ViLCAic3VibWVtb3J5IiwgMSk7Ci0gIGdzdF9tZW1vcnlfdW5tYXAgKHN1YiwgJnNpbmZvKTsKLSAgZ3N0X21lbW9yeV91bnJlZiAoc3ViKTsKLQotICAvKiB0ZXN0IGlmIG1ldGFkYXRhIGlzIGNvcHBpZWQsIG5vdCBhIGNvbXBsZXRlIG1lbW9yeSBjb3B5IHNvIG9ubHkgdGhlCi0gICAqIHRpbWVzdGFtcCBhbmQgb2Zmc2V0IGZpZWxkcyBhcmUgY29waWVkLiAqLwotICBzdWIgPSBnc3RfbWVtb3J5X3NoYXJlIChtZW1vcnksIDAsIDEpOwotICBmYWlsX2lmIChzdWIgPT0gTlVMTCwgInNoYXJlIG9mIG1lbW9yeSByZXR1cm5lZCBOVUxMIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X2dldF9zaXplcyAoc3ViLCBOVUxMLCBOVUxMKSA9PSAxLAotICAgICAgInN1Ym1lbW9yeSBoYXMgd3Jvbmcgc2l6ZSIpOwotICBnc3RfbWVtb3J5X3VucmVmIChzdWIpOwotCi0gIC8qIHRlc3QgaWYgbWV0YWRhdGEgaXMgY29wcGllZCwgYSBjb21wbGV0ZSBtZW1vcnkgaXMgY29waWVkIHNvIGFsbCB0aGUgdGltaW5nCi0gICAqIGZpZWxkcyBzaG91bGQgYmUgY29waWVkLiAqLwotICBzdWIgPSBnc3RfbWVtb3J5X3NoYXJlIChtZW1vcnksIDAsIDQpOwotICBmYWlsX2lmIChzdWIgPT0gTlVMTCwgInNoYXJlIG9mIG1lbW9yeSByZXR1cm5lZCBOVUxMIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X2dldF9zaXplcyAoc3ViLCBOVUxMLCBOVUxMKSA9PSA0LAotICAgICAgInN1Ym1lbW9yeSBoYXMgd3Jvbmcgc2l6ZSIpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9tZW1vcnlfdW5yZWYgKHN1Yik7Ci0KLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtb3J5LCAmaW5mbyk7Ci0KLSAgLyogdGVzdCB3cml0ZSBtYXAgKyBzaGFyZSBmYWlsdXJlICovCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtb3J5LCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICBzdWIgPSBnc3RfbWVtb3J5X3NoYXJlIChtZW1vcnksIDAsIDQpOwotICBmYWlsX3VubGVzcyAoc3ViID09IE5VTEwsICJzaGFyZSB3aXRoIGEgd3JpdGUgbWFwIHN1Y2NlZWRlZCIpOwotCi0gIGdzdF9tZW1vcnlfdW5tYXAgKG1lbW9yeSwgJmluZm8pOwotICBnc3RfbWVtb3J5X3VucmVmIChtZW1vcnkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2lzX3NwYW4pCi17Ci0gIEdzdE1lbW9yeSAqbWVtb3J5LCAqc3ViMSwgKnN1YjI7Ci0KLSAgbWVtb3J5ID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgNCwgTlVMTCk7Ci0KLSAgc3ViMSA9IGdzdF9tZW1vcnlfc2hhcmUgKG1lbW9yeSwgMCwgMik7Ci0gIGZhaWxfaWYgKHN1YjEgPT0gTlVMTCwgInNoYXJlIG9mIG1lbW9yeSByZXR1cm5lZCBOVUxMIik7Ci0KLSAgc3ViMiA9IGdzdF9tZW1vcnlfc2hhcmUgKG1lbW9yeSwgMiwgMik7Ci0gIGZhaWxfaWYgKHN1YjIgPT0gTlVMTCwgInNoYXJlIG9mIG1lbW9yeSByZXR1cm5lZCBOVUxMIik7Ci0KLSAgZmFpbF9pZiAoZ3N0X21lbW9yeV9pc19zcGFuIChtZW1vcnksIHN1YjIsIE5VTEwpID09IFRSVUUsCi0gICAgICAiYSBwYXJlbnQgbWVtb3J5IGNhbid0IGJlIHNwYW4iKTsKLQotICBmYWlsX2lmIChnc3RfbWVtb3J5X2lzX3NwYW4gKHN1YjEsIG1lbW9yeSwgTlVMTCkgPT0gVFJVRSwKLSAgICAgICJhIHBhcmVudCBtZW1vcnkgY2FuJ3QgYmUgc3BhbiIpOwotCi0gIGZhaWxfaWYgKGdzdF9tZW1vcnlfaXNfc3BhbiAoc3ViMSwgc3ViMiwgTlVMTCkgPT0gRkFMU0UsCi0gICAgICAidHdvIHN1Ym1lbW9yeXMgbmV4dCB0byBlYWNoIG90aGVyIHNob3VsZCBiZSBzcGFuIik7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ3N0X21lbW9yeV91bnJlZiAoc3ViMSk7Ci0gIGdzdF9tZW1vcnlfdW5yZWYgKHN1YjIpOwotICBnc3RfbWVtb3J5X3VucmVmIChtZW1vcnkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHJvX21lbW9yeVtdID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKLQotc3RhdGljIEdzdE1lbW9yeSAqCi1jcmVhdGVfcmVhZF9vbmx5X21lbW9yeSAodm9pZCkKLXsKLSAgR3N0TWVtb3J5ICptZW07Ci0KLSAgLyogYXNzaWduIHNvbWUgcmVhZC1vbmx5IGRhdGEgdG8gdGhlIG5ldyBtZW1vcnkgKi8KLSAgbWVtID0gZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLAotICAgICAgKGdwb2ludGVyKSByb19tZW1vcnksIHNpemVvZiAocm9fbWVtb3J5KSwgMCwgc2l6ZW9mIChyb19tZW1vcnkpLCBOVUxMLAotICAgICAgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVNT1JZX0lTX1JFQURPTkxZIChtZW0pKTsKLQotICByZXR1cm4gbWVtOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93cml0YWJsZSkKLXsKLSAgR3N0TWVtb3J5ICptZW0sICptZW0yOwotICBHc3RNYXBJbmZvIGluZm87Ci0KLSAgLyogY3JlYXRlIHJlYWQtb25seSBtZW1vcnkgYW5kIHRyeSB0byB3cml0ZSAqLwotICBtZW0gPSBjcmVhdGVfcmVhZF9vbmx5X21lbW9yeSAoKTsKLQotICBmYWlsX2lmIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotCi0gIC8qIE1ha2Ugc3VyZSBtYXBwaW5nIGFueGQgdW5tYXBwaW5nIGl0IGRvZXNuJ3QgY2hhbmdlIGl0J3MgbG9ja2luZyBzdGF0ZSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvKTsKLQotICBmYWlsX2lmIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotCi0gIG1lbTIgPSBnc3RfbWVtb3J5X2NvcHkgKG1lbSwgMCwgLTEpOwotICBmYWlsX3VubGVzcyAoR1NUX01FTU9SWV9JU19SRUFET05MWSAobWVtKSk7Ci0gIGZhaWxfaWYgKEdTVF9NRU1PUllfSVNfUkVBRE9OTFkgKG1lbTIpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbTIsICZpbmZvLCBHU1RfTUFQX1dSSVRFKSk7Ci0gIGluZm8uZGF0YVs0XSA9ICdhJzsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtMiwgJmluZm8pOwotCi0gIGdzdF9tZW1vcnlfcmVmIChtZW0yKTsKLSAgZmFpbF9pZiAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8sIEdTVF9NQVBfV1JJVEUpKTsKLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbWFwIChtZW0yLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICBpbmZvLmRhdGFbNF0gPSAnYSc7Ci0gIGdzdF9tZW1vcnlfdW5tYXAgKG1lbTIsICZpbmZvKTsKLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtMik7Ci0KLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdWJtZW1vcnlfd3JpdGFibGUpCi17Ci0gIEdzdE1lbW9yeSAqbWVtLCAqc3ViX21lbTsKLSAgR3N0TWFwSW5mbyBpbmZvOwotCi0gIC8qIGNyZWF0ZSBzdWItbWVtb3J5IG9mIHJlYWQtb25seSBtZW1vcnkgYW5kIHRyeSB0byB3cml0ZSAqLwotICBtZW0gPSBjcmVhdGVfcmVhZF9vbmx5X21lbW9yeSAoKTsKLQotICBzdWJfbWVtID0gZ3N0X21lbW9yeV9zaGFyZSAobWVtLCAwLCA4KTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRU1PUllfSVNfUkVBRE9OTFkgKHN1Yl9tZW0pKTsKLQotICBmYWlsX2lmIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICBmYWlsX2lmIChnc3RfbWVtb3J5X21hcCAoc3ViX21lbSwgJmluZm8sIEdTVF9NQVBfV1JJVEUpKTsKLQotICBnc3RfbWVtb3J5X3VucmVmIChzdWJfbWVtKTsKLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb3B5KQotewotICBHc3RNZW1vcnkgKm1lbW9yeSwgKmNvcHk7Ci0gIEdzdE1hcEluZm8gaW5mbywgc2luZm87Ci0KLSAgbWVtb3J5ID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgNCwgTlVMTCk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAobWVtb3J5LCAibWVtb3J5IiwgMSk7Ci0KLSAgY29weSA9IGdzdF9tZW1vcnlfY29weSAobWVtb3J5LCAwLCAtMSk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAobWVtb3J5LCAibWVtb3J5IiwgMSk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoY29weSwgImNvcHkiLCAxKTsKLSAgLyogbWVtb3J5cyBhcmUgY29waWVkIGFuZCBtdXN0IHBvaW50IHRvIGRpZmZlcmVudCBtZW1vcnkgKi8KLSAgZmFpbF9pZiAobWVtb3J5ID09IGNvcHkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtb3J5LCAmaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAoY29weSwgJnNpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLQotICAvKiBOT1RFIHRoYXQgZGF0YSBpcyByZWZjb3VudGVkICovCi0gIGZhaWxfdW5sZXNzIChpbmZvLnNpemUgPT0gc2luZm8uc2l6ZSk7Ci0KLSAgZ3N0X21lbW9yeV91bm1hcCAoY29weSwgJnNpbmZvKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtb3J5LCAmaW5mbyk7Ci0KLSAgZ3N0X21lbW9yeV91bnJlZiAoY29weSk7Ci0gIGdzdF9tZW1vcnlfdW5yZWYgKG1lbW9yeSk7Ci0KLSAgbWVtb3J5ID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgMCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtb3J5LCAmaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvLnNpemUgPT0gMCk7Ci0gIGdzdF9tZW1vcnlfdW5tYXAgKG1lbW9yeSwgJmluZm8pOwotCi0gIC8qIGNvcHlpbmcgYSAwLXNpemVkIG1lbW9yeSBzaG91bGQgbm90IGNyYXNoICovCi0gIGNvcHkgPSBnc3RfbWVtb3J5X2NvcHkgKG1lbW9yeSwgMCwgLTEpOwotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKGNvcHksICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLSAgZmFpbF91bmxlc3MgKGluZm8uc2l6ZSA9PSAwKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAoY29weSwgJmluZm8pOwotCi0gIGdzdF9tZW1vcnlfdW5yZWYgKGNvcHkpOwotICBnc3RfbWVtb3J5X3VucmVmIChtZW1vcnkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RyeV9uZXdfYW5kX2FsbG9jKQotewotICBHc3RNZW1vcnkgKm1lbTsKLSAgR3N0TWFwSW5mbyBpbmZvOwotICBnc2l6ZSBzaXplOwotCi0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDAsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobWVtICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09IDApOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvKTsKLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLQotICAvKiBub3JtYWwgYWxsb2Mgc2hvdWxkIHN0aWxsIHdvcmsgKi8KLSAgc2l6ZSA9IDY0MCAqIDQ4MCAqIDQ7Ci0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIHNpemUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobWVtICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8sIEdTVF9NQVBfV1JJVEUpKTsKLSAgZmFpbF91bmxlc3MgKGluZm8uZGF0YSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGluZm8uc2l6ZSA9PSAoNjQwICogNDgwICogNCkpOwotICBpbmZvLmRhdGFbNjQwICogNDc5ICogNCArIDQ3OV0gPSAweGZmOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvKTsKLQotICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3Jlc2l6ZSkKLXsKLSAgR3N0TWVtb3J5ICptZW07Ci0gIGdzaXplIG1heGFsbG9jOwotICBnc2l6ZSBzaXplLCBtYXhzaXplLCBvZmZzZXQ7Ci0KLSAgLyogb25lIG1lbW9yeSBibG9jayAqLwotICBtZW0gPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCAxMDAsIE5VTEwpOwotCi0gIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmb2Zmc2V0LCAmbWF4YWxsb2MpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBmYWlsX3VubGVzcyAobWF4YWxsb2MgPj0gMTAwKTsKLQotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIDIwMCwgNTApKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCAwLCAxNTApKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCAxLCBtYXhhbGxvYykpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIG1heGFsbG9jLCAxKSk7Ci0KLSAgLyogdGhpcyBkb2VzIG5vdGhpbmcgKi8KLSAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMCwgMTAwKTsKLQotICAvKiBub3RoaW5nIHNob3VsZCBoYXZlIGNoYW5nZWQgKi8KLSAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIDAsIDUwKTsKLSAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gNTApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMCwgMTAwKTsKLSAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIDEsIDk5KTsKLSAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gOTkpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDEpOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCAxLCBtYXhhbGxvYyAtIDEpKTsKLQotICBnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCAwLCA5OSk7Ci0gIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDk5KTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIC0xLCAxMDApOwotICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgJm9mZnNldCwgJm1heHNpemUpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgLyogY2FuJ3Qgc2V0IG9mZnNldCBiZWxvdyAwICovCi0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgLTEsIDEwMCkpOwotCi0gIGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIDUwLCA0MCk7Ci0gIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDQwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKLQotICBnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCAtNTAsIDEwMCk7Ci0gIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKLQotICBnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCAwLCAwKTsKLSAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXhzaXplID09IG1heGFsbG9jKTsKLQotICBnc3RfbWVtb3J5X3Jlc2l6ZSAobWVtLCAwLCAxMDApOwotICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgJm9mZnNldCwgJm1heHNpemUpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBmYWlsX3VubGVzcyAobWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMCwgMTAwKTsKLSAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhzaXplKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heHNpemUgPT0gbWF4YWxsb2MpOwotCi0gIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWFwKQotewotICBHc3RNZW1vcnkgKm1lbTsKLSAgR3N0TWFwSW5mbyBpbmZvOwotICBnc2l6ZSBtYXhhbGxvYzsKLSAgZ3NpemUgc2l6ZSwgb2Zmc2V0OwotCi0gIC8qIG9uZSBtZW1vcnkgYmxvY2sgKi8KLSAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgMTAwLCBOVUxMKTsKLQotICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgJm9mZnNldCwgJm1heGFsbG9jKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heGFsbG9jID49IDEwMCk7Ci0KLSAgLyogc2VlIGlmIHNpbXBseSBtYXBwaW5nIHdvcmtzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvLmRhdGEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvLnNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKGluZm8ubWF4c2l6ZSA9PSBtYXhhbGxvYyk7Ci0KLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbyk7Ci0gIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWFwX25lc3RlZCkKLXsKLSAgR3N0TWVtb3J5ICptZW07Ci0gIEdzdE1hcEluZm8gaW5mbzEsIGluZm8yOwotCi0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDEwMCwgTlVMTCk7Ci0KLSAgLyogbmVzdGVkIG1hcHBpbmcgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbWFwIChtZW0sICZpbmZvMSwgR1NUX01BUF9SRUFEKSk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvMS5kYXRhICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5mbzEuc2l6ZSA9PSAxMDApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbzIsIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mbzIuZGF0YSA9PSBpbmZvMS5kYXRhKTsKLSAgZmFpbF91bmxlc3MgKGluZm8yLnNpemUgPT0gMTAwKTsKLQotICAvKiB1bm1hcCAqLwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvMik7Ci0gIGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgJmluZm8xKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8xLCBHU1RfTUFQX1JFQUQpKTsKLSAgLyogbm90IGFsbG93ZWQgKi8KLSAgZmFpbF9pZiAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8yLCBHU1RfTUFQX1dSSVRFKSk7Ci0gIGZhaWxfaWYgKGdzdF9tZW1vcnlfbWFwIChtZW0sICZpbmZvMiwgR1NUX01BUF9SRUFEV1JJVEUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbWFwIChtZW0sICZpbmZvMiwgR1NUX01BUF9SRUFEKSk7Ci0gIGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgJmluZm8yKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbzEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbzEsIEdTVF9NQVBfV1JJVEUpKTsKLSAgLyogbm90IGFsbG93ZWQgKi8KLSAgZmFpbF9pZiAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8yLCBHU1RfTUFQX1JFQUQpKTsKLSAgZmFpbF9pZiAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8yLCBHU1RfTUFQX1JFQURXUklURSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8yLCBHU1RfTUFQX1dSSVRFKSk7Ci0gIGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgJmluZm8xKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbzIpOwotICAvKiBub3RoaW5nIHdhcyBtYXBwZWQgKi8KLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvMikpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbzEsIEdTVF9NQVBfUkVBRFdSSVRFKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbzIsIEdTVF9NQVBfUkVBRCkpOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbzIsIEdTVF9NQVBfV1JJVEUpKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbzIpOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvMSk7Ci0gIC8qIG5vdGhpbmcgd2FzIG1hcHBlZCAqLwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9tZW1vcnlfdW5tYXAgKG1lbSwgJmluZm8xKSk7Ci0KLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tYXBfcmVzaXplKQotewotICBHc3RNZW1vcnkgKm1lbTsKLSAgR3N0TWFwSW5mbyBpbmZvOwotICBnc2l6ZSBzaXplLCBtYXhhbGxvYywgb2Zmc2V0OwotCi0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDEwMCwgTlVMTCk7Ci0KLSAgLyogZG8gbWFwcGluZyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09IDEwMCk7Ci0KLSAgLyogcmVzaXplIHRoZSBidWZmZXIgKi8KLSAgZ3N0X21lbW9yeV9yZXNpemUgKG1lbSwgMSwgaW5mby5zaXplIC0gMSk7Ci0gIHNpemUgPSBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCAmb2Zmc2V0LCAmbWF4YWxsb2MpOwotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSA5OSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChtYXhhbGxvYyA+PSAxMDApOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvKTsKLQotICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgJm9mZnNldCwgJm1heGFsbG9jKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gOTkpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDEpOwotICBmYWlsX3VubGVzcyAobWF4YWxsb2MgPj0gMTAwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09IDk5KTsKLSAgZmFpbF91bmxlc3MgKGluZm8ubWF4c2l6ZSA+PSAxMDApOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvKTsKLQotICAvKiBhbmQgbGFyZ2VyICovCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gIGdzdF9tZW1vcnlfcmVzaXplIChtZW0sIC0xLCAxMDApOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZpbmZvKTsKLQotICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgJm9mZnNldCwgJm1heGFsbG9jKTsKLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKG1heGFsbG9jID49IDEwMCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbWFwIChtZW0sICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbyk7Ci0gIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWxsb2NfcGFyYW1zKQotewotICBHc3RNZW1vcnkgKm1lbTsKLSAgR3N0TWFwSW5mbyBpbmZvOwotICBnc2l6ZSBzaXplLCBvZmZzZXQsIG1heGFsbG9jOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtczsKLSAgZ3VpbnQ4IGFyclsxMF07Ci0KLSAgbWVtc2V0IChhcnIsIDAsIDEwKTsKLQotICBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdCAoJnBhcmFtcyk7Ci0gIHBhcmFtcy5wYWRkaW5nID0gMTA7Ci0gIHBhcmFtcy5wcmVmaXggPSAxMDsKLSAgcGFyYW1zLmZsYWdzID0gR1NUX01FTU9SWV9GTEFHX1pFUk9fUFJFRklYRUQgfCBHU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQ7Ci0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIDEwMCwgJnBhcmFtcyk7Ci0KLSAgLypDaGVja2luZyBzaXplIGFuZCBvZmZzZXQgKi8KLSAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sICZvZmZzZXQsICZtYXhhbGxvYyk7Ci0gIGZhaWxfdW5sZXNzIChzaXplID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMTApOwotICBmYWlsX3VubGVzcyAobWF4YWxsb2MgPj0gMTIwKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX01FTU9SWV9GTEFHX0lTX1NFVCAobWVtLCBHU1RfTUVNT1JZX0ZMQUdfWkVST19QUkVGSVhFRCkpOwotICBmYWlsX3VubGVzcyAoR1NUX01FTU9SWV9GTEFHX0lTX1NFVCAobWVtLCBHU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9tYXAgKG1lbSwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09IDEwMCk7Ci0KLSAgLypDaGVja2luZyBwcmVmaXggKi8KLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAoaW5mby5kYXRhIC0gMTAsIGFyciwgMTApID09IDApOwotCi0gIC8qQ2hlY2tpbmcgcGFkZGluZyAqLwotICBmYWlsX3VubGVzcyAobWVtY21wIChpbmZvLmRhdGEgKyAxMDAsIGFyciwgMTApID09IDApOwotCi0KLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbyk7Ci0gIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbG9jaykKLXsKLSAgR3N0TWVtb3J5ICptZW07Ci0KLSAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgMTAsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobWVtICE9IE5VTEwpOwotCi0gIC8qIHRlc3QgZXhjbHVzaXZpdHkgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbG9jayAobWVtLAotICAgICAgICAgIEdTVF9MT0NLX0ZMQUdfV1JJVEUgfCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSkpOwotICBmYWlsX2lmIChnc3RfbWVtb3J5X2xvY2sgKG1lbSwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbG9jayAobWVtLCBHU1RfTE9DS19GTEFHX1dSSVRFKSk7Ci0gIGdzdF9tZW1vcnlfdW5sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfV1JJVEUgfCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSk7Ci0gIGdzdF9tZW1vcnlfdW5sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfV1JJVEUpOwotCi0gIC8qIG5vIGxvY2sgaGVyZSAqLwotCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVtb3J5X2xvY2sgKG1lbSwKLSAgICAgICAgICBHU1RfTE9DS19GTEFHX1JFQUQgfCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9sb2NrIChtZW0sCi0gICAgICAgICAgR1NUX0xPQ0tfRkxBR19SRUFEIHwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpKTsKLSAgZ3N0X21lbW9yeV91bmxvY2sgKG1lbSwgR1NUX0xPQ0tfRkxBR19SRUFEIHwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpOwotICBnc3RfbWVtb3J5X3VubG9jayAobWVtLCBHU1RfTE9DS19GTEFHX1JFQUQgfCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSk7Ci0KLSAgLyogbm8gbG9jayBoZXJlICovCi0KLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbG9jayAobWVtLAotICAgICAgICAgIEdTVF9MT0NLX0ZMQUdfUkVBRFdSSVRFIHwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9tZW1vcnlfbG9jayAobWVtLCBHU1RfTE9DS19GTEFHX1JFQUQpKTsKLSAgZmFpbF9pZiAoZ3N0X21lbW9yeV9sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfUkVBRCB8IEdTVF9MT0NLX0ZMQUdfRVhDTFVTSVZFKSk7Ci0gIGZhaWxfaWYgKGdzdF9tZW1vcnlfbG9jayAobWVtLCBHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X21lbW9yeV9sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfV1JJVEUpKTsKLSAgZ3N0X21lbW9yeV91bmxvY2sgKG1lbSwgR1NUX0xPQ0tfRkxBR19XUklURSk7Ci0gIGdzdF9tZW1vcnlfdW5sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfUkVBRCk7Ci0gIGdzdF9tZW1vcnlfdW5sb2NrIChtZW0sIEdTVF9MT0NLX0ZMQUdfUkVBRFdSSVRFIHwgR1NUX0xPQ0tfRkxBR19FWENMVVNJVkUpOwotCi0gIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9tZW1vcnlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0TWVtb3J5Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N1Ym1lbW9yeSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdWJtZW1vcnlfd3JpdGFibGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd3JpdGFibGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaXNfc3Bhbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jb3B5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RyeV9uZXdfYW5kX2FsbG9jKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Jlc2l6ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWFwX25lc3RlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXBfcmVzaXplKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FsbG9jX3BhcmFtcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sb2NrKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9tZW1vcnkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RtZXNzYWdlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljOGMyN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdG1lc3NhZ2UuYworKysgL2Rldi9udWxsCkBAIC0xLDYyMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIEdzdE1lc3NhZ2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltIGF0IGZsdWVuZG8gZG90IGNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0YXRpYyBHUXVhcmsgZG9tYWluOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzaW5nKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gIGRvbWFpbiA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgidGVzdCIpOwotCi0gIC8qIEdTVF9NRVNTQUdFX0VPUyAqLwotICB7Ci0gICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19lb3MgKE5VTEwpOwotICAgIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gTlVMTCk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICB9Ci0gIC8qIEdTVF9NRVNTQUdFX0VSUk9SICovCi0gIHsKLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBnY2hhciAqZGVidWc7Ci0KLSAgICBlcnJvciA9IGdfZXJyb3JfbmV3IChkb21haW4sIDEwLCAidGVzdCBlcnJvciIpOwotICAgIGZhaWxfaWYgKGVycm9yID09IE5VTEwpOwotICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfZXJyb3IgKE5VTEwsIGVycm9yLCAiZXJyb3Igc3RyaW5nIik7Ci0gICAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRVJST1IpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID09IE5VTEwpOwotCi0gICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gICAgZXJyb3IgPSBOVUxMOwotICAgIGRlYnVnID0gTlVMTDsKLQotICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCBOVUxMLCBOVUxMKTsKLQotICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZXJyb3IsICZkZWJ1Zyk7Ci0gICAgZmFpbF9pZiAoZXJyb3IgPT0gTlVMTCk7Ci0gICAgZmFpbF9pZiAoZGVidWcgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKHN0cmNtcCAoZXJyb3ItPm1lc3NhZ2UsICJ0ZXN0IGVycm9yIikgPT0gMCk7Ci0gICAgZmFpbF91bmxlc3MgKGVycm9yLT5kb21haW4gPT0gZG9tYWluKTsKLSAgICBmYWlsX3VubGVzcyAoZXJyb3ItPmNvZGUgPT0gMTApOwotICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKGRlYnVnLCAiZXJyb3Igc3RyaW5nIikgPT0gMCk7Ci0KLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gICAgZ19mcmVlIChkZWJ1Zyk7Ci0gIH0KLSAgLyogR1NUX01FU1NBR0VfRVJST1Igd2l0aCBkZXRhaWxzICovCi0gIHsKLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBnY2hhciAqZGVidWc7Ci0gICAgR3N0U3RydWN0dXJlICpkOwotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqZGM7Ci0KLSAgICBlcnJvciA9IGdfZXJyb3JfbmV3IChkb21haW4sIDEwLCAidGVzdCBlcnJvciIpOwotICAgIGZhaWxfaWYgKGVycm9yID09IE5VTEwpOwotICAgIGQgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRpdGxlIiwgInRlc3QtZmllbGQiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAidGVzdC1jb250ZW50cyIsIE5VTEwpOwotICAgIG1lc3NhZ2UgPQotICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZXJyb3Jfd2l0aF9kZXRhaWxzIChOVUxMLCBlcnJvciwgImVycm9yIHN0cmluZyIsIGQpOwotICAgIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBOVUxMKTsKLQotICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICAgIGVycm9yID0gTlVMTDsKLSAgICBkZWJ1ZyA9IE5VTEw7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmVycm9yLCAmZGVidWcpOwotICAgIGZhaWxfaWYgKGVycm9yID09IE5VTEwpOwotICAgIGZhaWxfaWYgKGRlYnVnID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKGVycm9yLT5tZXNzYWdlLCAidGVzdCBlcnJvciIpID09IDApOwotICAgIGZhaWxfdW5sZXNzIChlcnJvci0+ZG9tYWluID09IGRvbWFpbik7Ci0gICAgZmFpbF91bmxlc3MgKGVycm9yLT5jb2RlID09IDEwKTsKLSAgICBmYWlsX3VubGVzcyAoc3RyY21wIChkZWJ1ZywgImVycm9yIHN0cmluZyIpID09IDApOwotICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yX2RldGFpbHMgKG1lc3NhZ2UsICZkYyk7Ci0gICAgZmFpbF91bmxlc3MgKGRjICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAoZGMsICJ0ZXN0LWZpZWxkIiwKLSAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChkYywgInRlc3QtZmllbGQiKSwgInRlc3QtY29udGVudHMiKTsKLQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgfQotICAvKiBHU1RfTUVTU0FHRV9XQVJOSU5HICAgKi8KLSAgewotICAgIEdFcnJvciAqd2FybmluZyA9IE5VTEw7Ci0gICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgd2FybmluZyA9IGdfZXJyb3JfbmV3IChkb21haW4sIDEwLCAidGVzdCB3YXJuaW5nIik7Ci0gICAgZmFpbF9pZiAod2FybmluZyA9PSBOVUxMKTsKLSAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmcgKE5VTEwsIHdhcm5pbmcsICJ3YXJuaW5nIHN0cmluZyIpOwotICAgIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1dBUk5JTkcpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID09IE5VTEwpOwotCi0gICAgZ19lcnJvcl9mcmVlICh3YXJuaW5nKTsKLSAgICB3YXJuaW5nID0gTlVMTDsKLSAgICBkZWJ1ZyA9IE5VTEw7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nIChtZXNzYWdlLCBOVUxMLCBOVUxMKTsKLQotICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZ3YXJuaW5nLCAmZGVidWcpOwotICAgIGZhaWxfaWYgKHdhcm5pbmcgPT0gTlVMTCk7Ci0gICAgZmFpbF9pZiAoZGVidWcgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKHN0cmNtcCAod2FybmluZy0+bWVzc2FnZSwgInRlc3Qgd2FybmluZyIpID09IDApOwotICAgIGZhaWxfdW5sZXNzICh3YXJuaW5nLT5kb21haW4gPT0gZG9tYWluKTsKLSAgICBmYWlsX3VubGVzcyAod2FybmluZy0+Y29kZSA9PSAxMCk7Ci0gICAgZmFpbF91bmxlc3MgKHN0cmNtcCAoZGVidWcsICJ3YXJuaW5nIHN0cmluZyIpID09IDApOwotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAod2FybmluZyk7Ci0gICAgZ19mcmVlIChkZWJ1Zyk7Ci0gIH0KLSAgLyogR1NUX01FU1NBR0VfSU5GTyAgICovCi0gIHsKLSAgICBHRXJyb3IgKmluZm8gPSBOVUxMOwotICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgIGluZm8gPSBnX2Vycm9yX25ldyAoZG9tYWluLCAxMCwgInRlc3QgaW5mbyIpOwotICAgIGZhaWxfaWYgKGluZm8gPT0gTlVMTCk7Ci0gICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19pbmZvIChOVUxMLCBpbmZvLCAiaW5mbyBzdHJpbmciKTsKLSAgICBmYWlsX2lmIChtZXNzYWdlID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9JTkZPKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBOVUxMKTsKLQotICAgIGdfZXJyb3JfZnJlZSAoaW5mbyk7Ci0gICAgaW5mbyA9IE5VTEw7Ci0gICAgZGVidWcgPSBOVUxMOwotCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfaW5mbyAobWVzc2FnZSwgTlVMTCwgTlVMTCk7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9pbmZvIChtZXNzYWdlLCAmaW5mbywgJmRlYnVnKTsKLSAgICBmYWlsX2lmIChpbmZvID09IE5VTEwpOwotICAgIGZhaWxfaWYgKGRlYnVnID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKGluZm8tPm1lc3NhZ2UsICJ0ZXN0IGluZm8iKSA9PSAwKTsKLSAgICBmYWlsX3VubGVzcyAoaW5mby0+ZG9tYWluID09IGRvbWFpbik7Ci0gICAgZmFpbF91bmxlc3MgKGluZm8tPmNvZGUgPT0gMTApOwotICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKGRlYnVnLCAiaW5mbyBzdHJpbmciKSA9PSAwKTsKLQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGluZm8pOwotICAgIGdfZnJlZSAoZGVidWcpOwotICB9Ci0gIC8qIEdTVF9NRVNTQUdFX1RBRyAgKi8KLSAgewotICAgIEdzdFRhZ0xpc3QgKnRhZzsKLQotICAgIC8qIEZJWE1FLCBkbyBzb21lIG1vcmUgdGFnIGFkZGluZyAqLwotICAgIHRhZyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gICAgZmFpbF9pZiAodGFnID09IE5VTEwpOwotICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfdGFnIChOVUxMLCB0YWcpOwotICAgIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1RBRyk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gTlVMTCk7Ci0gICAgdGFnID0gTlVMTDsKLSAgICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1lc3NhZ2UsICZ0YWcpOwotICAgIGZhaWxfaWYgKHRhZyA9PSBOVUxMKTsKLSAgICAvKiBGSVhNRSwgY2hlY2sgdGhlIGFjdHVhbCB0YWdzICovCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnKTsKLSAgfQotICAvKiBHU1RfTUVTU0FHRV9CVUZGRVJJTkcgICAqLwotICB7Ci0gIH0KLSAgLyogR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCAgICovCi0gIHsKLSAgICBHc3RTdGF0ZSBvbGRzdGF0ZSwgbmV3c3RhdGUsIHBlbmRpbmc7Ci0KLSAgICBvbGRzdGF0ZSA9IEdTVF9TVEFURV9QQVVTRUQ7Ci0gICAgbmV3c3RhdGUgPSBHU1RfU1RBVEVfUExBWUlORzsKLSAgICBwZW5kaW5nID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLQotICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZCAoTlVMTCwgb2xkc3RhdGUsIG5ld3N0YXRlLCBwZW5kaW5nKTsKLSAgICBmYWlsX2lmIChtZXNzYWdlID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBOVUxMKTsKLQotICAgIC8qIHNldCBzb21lIHdyb25nIHZhbHVlcyB0byBjaGVjayBpZiB0aGUgcGFyc2UgbWV0aG9kIG92ZXJ3cml0ZXMgdGhlbQotICAgICAqIHdpdGggdGhlIGdvb2QgdmFsdWVzICovCi0gICAgb2xkc3RhdGUgPSBHU1RfU1RBVEVfUkVBRFk7Ci0gICAgbmV3c3RhdGUgPSBHU1RfU1RBVEVfUkVBRFk7Ci0gICAgcGVuZGluZyA9IEdTVF9TVEFURV9SRUFEWTsKLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChtZXNzYWdlLCAmb2xkc3RhdGUsICZuZXdzdGF0ZSwgJnBlbmRpbmcpOwotICAgIGZhaWxfdW5sZXNzIChvbGRzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBmYWlsX3VubGVzcyAobmV3c3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgIGZhaWxfdW5sZXNzIChwZW5kaW5nID09IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpOwotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICB9Ci0gIC8qIEdTVF9NRVNTQUdFX1NURVBfRE9ORSAgICovCi0gIHsKLSAgfQotICAvKiBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgICovCi0gIHsKLSAgfQotICAvKiBHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFICAqLwotICB7Ci0gIH0KLSAgLyogR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyAgKi8KLSAgewotICB9Ci0gIC8qIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OICovCi0gIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjOwotICAgIGdpbnQgc29tZV9pbnQ7Ci0gICAgZ2RvdWJsZSBhX2RvdWJsZTsKLQotICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidGVzdF9zdHJ1Y3QiLAotICAgICAgICAic29tZV9pbnQiLCBHX1RZUEVfSU5ULCAxMCwKLSAgICAgICAgImFfZG91YmxlIiwgR19UWVBFX0RPVUJMRSwgKGdkb3VibGUpIDEuOCwgTlVMTCk7Ci0gICAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwpOwotICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKE5VTEwsIHN0cnVjdHVyZSk7Ci0gICAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKLSAgICBzdHJ1YyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotICAgIGZhaWxfaWYgKHN0cnVjID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjLCAic29tZV9pbnQiLCAmc29tZV9pbnQpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlIChzdHJ1YywgImFfZG91YmxlIiwgJmFfZG91YmxlKSk7Ci0gICAgZmFpbF91bmxlc3MgKHNvbWVfaW50ID09IDEwKTsKLSAgICBmYWlsX3VubGVzcyAoYV9kb3VibGUgPT0gMS44KTsKLQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgfQotCi0gIC8qCi0gICAgIHZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgICAgICAgICAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHc3RUYWdMaXN0ICoqdGFnX2xpc3QpOwotICAgICB2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR3N0U3RhdGUgKm9sZF9zdGF0ZSwKLSAgICAgR3N0U3RhdGUgKm5ld19zdGF0ZSk7Ci0gICAgIHZvaWQgICAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAgICAgICAgIChHc3RNZXNzYWdlICptZXNzYWdlLCBHRXJyb3IgKipnZXJyb3IsIGdjaGFyICoqZGVidWcpOwotICAgICB2b2lkICAgICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAgICAgICAoR3N0TWVzc2FnZSAqbWVzc2FnZSwgR0Vycm9yICoqZ2Vycm9yLCBnY2hhciAqKmRlYnVnKTsKLSAgICovCi0KLSAgLyogR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyAgICovCi0gIHsKLSAgICBHc3RTdHJlYW1TdGF0dXNUeXBlIHR5cGU7Ci0gICAgR3N0VGFzayAqdGFzaywgKnRhc2syOwotICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OwotICAgIGNvbnN0IEdWYWx1ZSAqdmFsOwotCi0gICAgbWVzc2FnZSA9Ci0gICAgICAgIGdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzIChOVUxMLCBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSLAotICAgICAgICBOVUxMKTsKLSAgICBmYWlsX2lmIChtZXNzYWdlID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBOVUxMKTsKLQotICAgIC8qIHNldCBzb21lIHdyb25nIHZhbHVlcyB0byBjaGVjayBpZiB0aGUgcGFyc2UgbWV0aG9kIG92ZXJ3cml0ZXMgdGhlbQotICAgICAqIHdpdGggdGhlIGdvb2QgdmFsdWVzICovCi0gICAgdHlwZSA9IEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RBUlQ7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX3N0YXR1cyAobWVzc2FnZSwgJnR5cGUsIE5VTEwpOwotICAgIGZhaWxfdW5sZXNzICh0eXBlID09IEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfRU5URVIpOwotCi0gICAgLyogY3JlYXRlIGEgdGFzayB3aXRoIHNvbWUgZHVtbXkgZnVuY3Rpb24sIHdlJ3JlIG5vdCBhY3R1YWxseSBnb2luZyB0byBydW4KLSAgICAgKiB0aGUgdGFzayBoZXJlICovCi0gICAgdGFzayA9IGdzdF90YXNrX25ldyAoKEdzdFRhc2tGdW5jdGlvbikgZ3N0X29iamVjdF91bnJlZiwgTlVMTCwgTlVMTCk7Ci0KLSAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0YXNrLCAidGFzayIsIDEpOwotCi0gICAgLyogc2V0IHRoZSB0YXNrICovCi0gICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX1RBU0spOwotICAgIGdfdmFsdWVfc2V0X29iamVjdCAoJnZhbHVlLCB0YXNrKTsKLQotICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHRhc2ssICJ0YXNrIiwgMik7Ci0KLSAgICBnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKG1lc3NhZ2UsICZ2YWx1ZSk7Ci0gICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAodGFzaywgInRhc2siLCAzKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHRhc2ssICJ0YXNrIiwgMik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAodGFzayk7Ci0gICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAodGFzaywgInRhc2siLCAxKTsKLQotICAgIC8qIGdldCB0aGUgb2JqZWN0IGJhY2ssIG5vIHJlZmNvdW50IGlzIGNoYW5nZWQgKi8KLSAgICB2YWwgPSBnc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKG1lc3NhZ2UpOwotICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHRhc2ssICJ0YXNrIiwgMSk7Ci0KLSAgICB0YXNrMiA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmFsKTsKLQotICAgIGZhaWxfdW5sZXNzIChHU1RfSVNfVEFTSyAodGFzazIpKTsKLSAgICBmYWlsX3VubGVzcyAodGFzazIgPT0gdGFzayk7Ci0KLSAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UICh0YXNrLCAidGFzayIsIDEpOwotICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHRhc2syLCAidGFzayIsIDEpOwotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICB9Ci0KLSAgLyogR1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURSAgICovCi0gIHsKLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLQotICAgIHN0YXRlID0gR1NUX1NUQVRFX1BBVVNFRDsKLQotICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZSAoTlVMTCwgc3RhdGUpOwotICAgIGZhaWxfaWYgKG1lc3NhZ2UgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID09IE5VTEwpOwotCi0gICAgLyogc2V0IHNvbWUgd3JvbmcgdmFsdWVzIHRvIGNoZWNrIGlmIHRoZSBwYXJzZSBtZXRob2Qgb3ZlcndyaXRlcyB0aGVtCi0gICAgICogd2l0aCB0aGUgZ29vZCB2YWx1ZXMgKi8KLSAgICBzdGF0ZSA9IEdTVF9TVEFURV9SRUFEWTsKLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlIChtZXNzYWdlLCAmc3RhdGUpOwotICAgIGZhaWxfdW5sZXNzIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgfQotICAvKiBHU1RfTUVTU0FHRV9RT1MgICAqLwotICB7Ci0gICAgZ2Jvb2xlYW4gbGl2ZTsKLSAgICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lOwotICAgIEdzdENsb2NrVGltZSBzdHJlYW1fdGltZTsKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLSAgICBnaW50NjQgaml0dGVyOwotICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKLSAgICBnaW50IHF1YWxpdHk7Ci0gICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICBndWludDY0IHByb2Nlc3NlZDsKLSAgICBndWludDY0IGRyb3BwZWQ7Ci0KLSAgICBydW5uaW5nX3RpbWUgPSAxICogR1NUX1NFQ09ORDsKLSAgICBzdHJlYW1fdGltZSA9IDIgKiBHU1RfU0VDT05EOwotICAgIHRpbWVzdGFtcCA9IDMgKiBHU1RfU0VDT05EOwotICAgIGR1cmF0aW9uID0gNCAqIEdTVF9TRUNPTkQ7Ci0KLSAgICBtZXNzYWdlID0KLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3FvcyAoTlVMTCwgVFJVRSwgcnVubmluZ190aW1lLCBzdHJlYW1fdGltZSwgdGltZXN0YW1wLAotICAgICAgICBkdXJhdGlvbik7Ci0gICAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfUU9TKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBOVUxMKTsKLQotICAgIC8qIGNoZWNrIGRlZmF1bHRzICovCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlcyAobWVzc2FnZSwgJmppdHRlciwgJnByb3BvcnRpb24sICZxdWFsaXR5KTsKLSAgICBmYWlsX3VubGVzcyAoaml0dGVyID09IDApOwotICAgIGZhaWxfdW5sZXNzIChwcm9wb3J0aW9uID09IDEuMCk7Ci0gICAgZmFpbF91bmxlc3MgKHF1YWxpdHkgPT0gMTAwMDAwMCk7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9xb3Nfc3RhdHMgKG1lc3NhZ2UsICZmb3JtYXQsICZwcm9jZXNzZWQsICZkcm9wcGVkKTsKLSAgICBmYWlsX3VubGVzcyAoZm9ybWF0ID09IEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICBmYWlsX3VubGVzcyAocHJvY2Vzc2VkID09IC0xKTsKLSAgICBmYWlsX3VubGVzcyAoZHJvcHBlZCA9PSAtMSk7Ci0KLSAgICAvKiBzZXQgc29tZSB3cm9uZyB2YWx1ZXMgdG8gY2hlY2sgaWYgdGhlIHBhcnNlIG1ldGhvZCBvdmVyd3JpdGVzIHRoZW0KLSAgICAgKiB3aXRoIHRoZSBnb29kIHZhbHVlcyAqLwotICAgIHJ1bm5pbmdfdGltZSA9IHN0cmVhbV90aW1lID0gdGltZXN0YW1wID0gZHVyYXRpb24gPSA1ICogR1NUX1NFQ09ORDsKLSAgICBsaXZlID0gRkFMU0U7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfcW9zIChtZXNzYWdlLCAmbGl2ZSwgJnJ1bm5pbmdfdGltZSwgJnN0cmVhbV90aW1lLAotICAgICAgICAmdGltZXN0YW1wLCAmZHVyYXRpb24pOwotICAgIGZhaWxfdW5sZXNzIChsaXZlID09IFRSVUUpOwotICAgIGZhaWxfdW5sZXNzIChydW5uaW5nX3RpbWUgPT0gMSAqIEdTVF9TRUNPTkQpOwotICAgIGZhaWxfdW5sZXNzIChzdHJlYW1fdGltZSA9PSAyICogR1NUX1NFQ09ORCk7Ci0gICAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSAzICogR1NUX1NFQ09ORCk7Ci0gICAgZmFpbF91bmxlc3MgKGR1cmF0aW9uID09IDQgKiBHU1RfU0VDT05EKTsKLQotICAgIC8qIGNoYW5nZSBzb21lIHZhbHVlcyAqLwotICAgIGdzdF9tZXNzYWdlX3NldF9xb3NfdmFsdWVzIChtZXNzYWdlLCAtMTAsIDIuMCwgNTAwMCk7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfcW9zX3ZhbHVlcyAobWVzc2FnZSwgJmppdHRlciwgJnByb3BvcnRpb24sICZxdWFsaXR5KTsKLSAgICBmYWlsX3VubGVzcyAoaml0dGVyID09IC0xMCk7Ci0gICAgZmFpbF91bmxlc3MgKHByb3BvcnRpb24gPT0gMi4wKTsKLSAgICBmYWlsX3VubGVzcyAocXVhbGl0eSA9PSA1MDAwKTsKLQotICAgIGdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHMgKG1lc3NhZ2UsIEdTVF9GT1JNQVRfREVGQVVMVCwgMTAzMCwgNjUpOwotICAgIGdzdF9tZXNzYWdlX3BhcnNlX3Fvc19zdGF0cyAobWVzc2FnZSwgJmZvcm1hdCwgJnByb2Nlc3NlZCwgJmRyb3BwZWQpOwotICAgIGZhaWxfdW5sZXNzIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9ERUZBVUxUKTsKLSAgICBmYWlsX3VubGVzcyAocHJvY2Vzc2VkID09IDEwMzApOwotICAgIGZhaWxfdW5sZXNzIChkcm9wcGVkID09IDY1KTsKLQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgfQotICAvKiBHU1RfTUVTU0FHRV9QUk9HUkVTUyAgICovCi0gIHsKLSAgICBHc3RQcm9ncmVzc1R5cGUgdHlwZTsKLSAgICBnY2hhciAqY2F0ZWdvcnksICp0ZXh0OwotCi0gICAgbWVzc2FnZSA9Ci0gICAgICAgIGdzdF9tZXNzYWdlX25ld19wcm9ncmVzcyAoTlVMTCwgR1NUX1BST0dSRVNTX1RZUEVfU1RBUlQsICJjb25uZWN0aW5nIiwKLSAgICAgICAgIkNvbm5lY3RpbmcgdG8geW91dGJ1ZS5jb20iKTsKLSAgICBmYWlsX2lmIChtZXNzYWdlID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9QUk9HUkVTUyk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gTlVMTCk7Ci0KLSAgICAvKiBzZXQgc29tZSB3cm9uZyB2YWx1ZXMgdG8gY2hlY2sgaWYgdGhlIHBhcnNlIG1ldGhvZCBvdmVyd3JpdGVzIHRoZW0KLSAgICAgKiB3aXRoIHRoZSBnb29kIHZhbHVlcyAqLwotICAgIHR5cGUgPSBHU1RfUFJPR1JFU1NfVFlQRV9FUlJPUjsKLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzcyAobWVzc2FnZSwgJnR5cGUsICZjYXRlZ29yeSwgJnRleHQpOwotICAgIGZhaWxfdW5sZXNzICh0eXBlID09IEdTVF9QUk9HUkVTU19UWVBFX1NUQVJUKTsKLSAgICBmYWlsX3VubGVzcyAoIXN0cmNtcCAoY2F0ZWdvcnksICJjb25uZWN0aW5nIikpOwotICAgIGZhaWxfdW5sZXNzICghc3RyY21wICh0ZXh0LCAiQ29ubmVjdGluZyB0byB5b3V0YnVlLmNvbSIpKTsKLSAgICBnX2ZyZWUgKGNhdGVnb3J5KTsKLSAgICBnX2ZyZWUgKHRleHQpOwotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICB9Ci0gIC8qIEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICovCi0gIHsKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotICAgIEdzdFN0cmVhbUNvbGxlY3Rpb24gKmNvbGxlY3Rpb24sICpyZXMgPSBOVUxMOwotICAgIEdzdFN0cmVhbSAqc3RyZWFtMSwgKnN0cmVhbTI7Ci0gICAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLQotICAgIC8qIENyZWF0ZSBhIGNvbGxlY3Rpb24gb2YgdHdvIHN0cmVhbXMgKi8KLSAgICBjYXBzMSA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9jYXBzIik7Ci0gICAgY2FwczIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvb3RoZXItc3RyaW5nIik7Ci0KLSAgICBzdHJlYW0xID0gZ3N0X3N0cmVhbV9uZXcgKCJzdHJlYW0tMSIsIGNhcHMxLCBHU1RfU1RSRUFNX1RZUEVfQVVESU8sIDApOwotICAgIHN0cmVhbTIgPSBnc3Rfc3RyZWFtX25ldyAoInN0cmVhbS0yIiwgY2FwczIsIEdTVF9TVFJFQU1fVFlQRV9WSURFTywgMCk7Ci0KLSAgICBjb2xsZWN0aW9uID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ldyAoInNvbWV0aGluZyIpOwotICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbSAoY29sbGVjdGlvbiwgc3RyZWFtMSkpOwotICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbSAoY29sbGVjdGlvbiwgc3RyZWFtMikpOwotCi0gICAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19zdHJlYW1fY29sbGVjdGlvbiAoTlVMTCwgY29sbGVjdGlvbik7Ci0gICAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbiAobWVzc2FnZSwgJnJlcyk7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyAhPSBOVUxMKTsKLQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChyZXMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGNvbGxlY3Rpb24pOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLSAgfQotICAvKiBHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEICovCi0gIHsKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotICAgIEdzdFN0cmVhbUNvbGxlY3Rpb24gKmNvbGxlY3Rpb24sICpyZXMgPSBOVUxMOwotICAgIEdzdFN0cmVhbSAqc3RyZWFtMSwgKnN0cmVhbTIsICpzdHJlYW0zOwotICAgIEdzdENhcHMgKmNhcHMxLCAqY2FwczI7Ci0KLSAgICAvKiBDcmVhdGUgYSBjb2xsZWN0aW9uIG9mIHR3byBzdHJlYW1zICovCi0gICAgY2FwczEgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvY2FwcyIpOwotICAgIGNhcHMyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL290aGVyLXN0cmluZyIpOwotCi0gICAgc3RyZWFtMSA9IGdzdF9zdHJlYW1fbmV3ICgic3RyZWFtLTEiLCBjYXBzMSwgR1NUX1NUUkVBTV9UWVBFX0FVRElPLCAwKTsKLSAgICBzdHJlYW0yID0gZ3N0X3N0cmVhbV9uZXcgKCJzdHJlYW0tMiIsIGNhcHMyLCBHU1RfU1RSRUFNX1RZUEVfVklERU8sIDApOwotCi0gICAgY29sbGVjdGlvbiA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9uZXcgKCJzb21ldGhpbmciKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0gKGNvbGxlY3Rpb24sIHN0cmVhbTEpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0gKGNvbGxlY3Rpb24sIHN0cmVhbTIpKTsKLQotICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtc19zZWxlY3RlZCAoTlVMTCwgY29sbGVjdGlvbik7Ci0gICAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1zX3NlbGVjdGVkIChtZXNzYWdlLCAmcmVzKTsKLSAgICBmYWlsX3VubGVzcyAocmVzICE9IE5VTEwpOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemUgKG1lc3NhZ2UpID09IDApOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJlcyk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotCi0gICAgLyogT25jZSBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggYSBzdHJlYW0gaW4gaXQgKi8KLSAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbXNfc2VsZWN0ZWQgKE5VTEwsIGNvbGxlY3Rpb24pOwotICAgIGZhaWxfdW5sZXNzIChtZXNzYWdlICE9IE5VTEwpOwotCi0gICAgZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9hZGQgKG1lc3NhZ2UsIHN0cmVhbTEpOwotCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3RlZCAobWVzc2FnZSwgJnJlcyk7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyAhPSBOVUxMKTsKLQotICAgIC8qIFRoZXJlIGlzIG9ubHkgb25lIHN0cmVhbSAhICovCi0gICAgZmFpbF91bmxlc3MgKGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemUgKG1lc3NhZ2UpID09IDEpOwotCi0gICAgc3RyZWFtMyA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbSAobWVzc2FnZSwgMCk7Ci0gICAgZmFpbF91bmxlc3MgKHN0cmVhbTMgIT0gTlVMTCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc3RyZWFtMyk7Ci0KLSAgICAvKiBTaG91bCBmYWlsICovCi0gICAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zdHJlYW0gKG1lc3NhZ2UsIDEpKTsKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJlcyk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAoY29sbGVjdGlvbik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICB9Ci0gIC8qIEdTVF9NRVNTQUdFX1JFRElSRUNUICovCi0gIHsKLSAgICBjb25zdCBnY2hhciAqcGFyc2VkX2xvY2F0aW9uOwotICAgIEdzdFRhZ0xpc3QgKnBhcnNlZF90YWdfbGlzdDsKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnBhcnNlZF9zdHJ1Y3R1cmU7Ci0gICAgY29uc3QgZ2NoYXIgKnRlc3RfbG9jYXRpb24gPSAic29tZS1sb2NhdGlvbiI7Ci0gICAgY29uc3QgZ2NoYXIgKnRlc3Rfc3RydWN0X25hbWUgPSAidGVzdC1zdHJ1Y3QiOwotICAgIGNvbnN0IGdjaGFyICp0ZXN0X3ZhbHVlX25hbWUgPSAiZm9vIjsKLSAgICBjb25zdCBnaW50IHRlc3RfdmFsdWUgPSAxMjM0NTsKLSAgICBjb25zdCBndWludCB0ZXN0X2JpdHJhdGUgPSAxMjAwMDA7Ci0gICAgZ2ludCB2YWx1ZTsKLSAgICBndWludCBiaXRyYXRlOwotICAgIEdzdFRhZ0xpc3QgKnRlc3RfdGFnX2xpc3Q7Ci0gICAgR3N0U3RydWN0dXJlICp0ZXN0X3N0cnVjdHVyZTsKLQotICAgIHRlc3Rfc3RydWN0dXJlID0KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKHRlc3Rfc3RydWN0X25hbWUsIHRlc3RfdmFsdWVfbmFtZSwgR19UWVBFX0lOVCwKLSAgICAgICAgdGVzdF92YWx1ZSwgTlVMTCk7Ci0KLSAgICAvKiBDcmVhdGUgYSB0ZXN0IHRhZyBsaXN0LiBJdCBpcyByZWYnZCAgYmVmb3JlIGFkZGluZyBhbiBlbnRyeSB0byBiZSBhYmxlCi0gICAgICogdG8gdGVzdCB0aGF0IG5ld19yZWRpcmVjdCB0YWtlcyBvd25lcnNoaXAgKi8KLSAgICB0ZXN0X3RhZ19saXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19CSVRSQVRFLCB0ZXN0X2JpdHJhdGUsIE5VTEwpOwotCi0gICAgLyogQ3JlYXRlIHRoZSBtZXNzYWdlIGFuZCBhZGQgdGhlIGZpcnN0IGVudHJ5LCB3aGljaCBvbmx5IGhhcyBhIGxvY2F0aW9uCi0gICAgICogYW5kIGEgdGFnIGxpc3QgKi8KLSAgICBnc3RfdGFnX2xpc3RfcmVmICh0ZXN0X3RhZ19saXN0KTsKLSAgICBtZXNzYWdlID0KLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3JlZGlyZWN0IChOVUxMLCB0ZXN0X2xvY2F0aW9uLCB0ZXN0X3RhZ19saXN0LCBOVUxMKTsKLSAgICBmYWlsX2lmIChtZXNzYWdlID09IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9SRURJUkVDVCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gTlVMTCk7Ci0KLSAgICAvKiBBZGQgdGhlIHNlY29uZCBlbnRyeSwgd2hpY2ggb25seSBoYXMgYSBsb2NhdGlvbiBhbmQgYSBzdHJ1Y3R1cmUgKi8KLSAgICBnc3RfbWVzc2FnZV9hZGRfcmVkaXJlY3RfZW50cnkgKG1lc3NhZ2UsIHRlc3RfbG9jYXRpb24sIE5VTEwsCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfY29weSAodGVzdF9zdHJ1Y3R1cmUpKTsKLQotICAgIC8qIEFkZCB0aGUgdGhpcmQgZW50cnksIHdoaWNoIGhhcyBhIGxvY2F0aW9uLCBhIHRhZ2xpc3QsIGFuZCBhIHN0cnVjdHVyZSAqLwotICAgIGdzdF90YWdfbGlzdF9yZWYgKHRlc3RfdGFnX2xpc3QpOwotICAgIGdzdF9tZXNzYWdlX2FkZF9yZWRpcmVjdF9lbnRyeSAobWVzc2FnZSwgdGVzdF9sb2NhdGlvbiwgdGVzdF90YWdfbGlzdCwKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9jb3B5ICh0ZXN0X3N0cnVjdHVyZSkpOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9tZXNzYWdlX2dldF9udW1fcmVkaXJlY3RfZW50cmllcyAobWVzc2FnZSkgPT0gMyk7Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgZW50cnkgaXMgY29ycmVjdCBhbmQgdGhhdCB0aGUKLSAgICAgKiBzdHJ1Y3R1cmUgcG9pbnRlciBpcyBzZXQgdG8gTlVMTCAqLwotICAgIHBhcnNlZF9sb2NhdGlvbiA9IE5VTEw7Ci0gICAgcGFyc2VkX3RhZ19saXN0ID0gTlVMTDsKLSAgICBwYXJzZWRfc3RydWN0dXJlID0gKGNvbnN0IEdzdFN0cnVjdHVyZSAqKSAweDE7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfcmVkaXJlY3RfZW50cnkgKG1lc3NhZ2UsIDAsICZwYXJzZWRfbG9jYXRpb24sCi0gICAgICAgICZwYXJzZWRfdGFnX2xpc3QsICZwYXJzZWRfc3RydWN0dXJlKTsKLSAgICBmYWlsX3VubGVzcyAocGFyc2VkX2xvY2F0aW9uICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChwYXJzZWRfdGFnX2xpc3QgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKHBhcnNlZF9zdHJ1Y3R1cmUgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKCFzdHJjbXAgKHBhcnNlZF9sb2NhdGlvbiwgdGVzdF9sb2NhdGlvbikpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKHBhcnNlZF90YWdfbGlzdCwgR1NUX1RBR19CSVRSQVRFLAotICAgICAgICAgICAgJmJpdHJhdGUpICYmIChiaXRyYXRlID09IHRlc3RfYml0cmF0ZSkpOwotCi0gICAgLyogQ2hlY2sgdGhhdCB0aGUgc3RydWN0dXJlIG9mIHRoZSBzZWNvbmQgZW50cnkgaXMgY29ycmVjdCBhbmQgdGhhdCB0aGUKLSAgICAgKiB0YWcgbGlzdCBwb2ludGVyIGlzIHNldCB0byBOVUxMICovCi0gICAgcGFyc2VkX2xvY2F0aW9uID0gTlVMTDsKLSAgICBwYXJzZWRfdGFnX2xpc3QgPSAoR3N0VGFnTGlzdCAqKSAweDE7Ci0gICAgcGFyc2VkX3N0cnVjdHVyZSA9IE5VTEw7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfcmVkaXJlY3RfZW50cnkgKG1lc3NhZ2UsIDEsICZwYXJzZWRfbG9jYXRpb24sCi0gICAgICAgICZwYXJzZWRfdGFnX2xpc3QsICZwYXJzZWRfc3RydWN0dXJlKTsKLSAgICBmYWlsX3VubGVzcyAocGFyc2VkX2xvY2F0aW9uICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChwYXJzZWRfdGFnX2xpc3QgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKHBhcnNlZF9zdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKCFzdHJjbXAgKHBhcnNlZF9sb2NhdGlvbiwgdGVzdF9sb2NhdGlvbikpOwotICAgIGZhaWxfdW5sZXNzICghc3RyY21wIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChwYXJzZWRfc3RydWN0dXJlKSwKLSAgICAgICAgICAgIHRlc3Rfc3RydWN0X25hbWUpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChwYXJzZWRfc3RydWN0dXJlLCB0ZXN0X3ZhbHVlX25hbWUsCi0gICAgICAgICAgICAmdmFsdWUpICYmICh2YWx1ZSA9PSB0ZXN0X3ZhbHVlKSk7Ci0KLSAgICAvKiBDaGVjayB0aGF0IHRoZSBsb2NhdGlvbiwgdGFnIGxpc3QsIGFuZCBzdHJ1Y3R1cmUgcG9pbnRlcnMgb2YgdGhlCi0gICAgICogdGhpcmQgZW50cnkgYXJlIGNvcnJlY3QgKi8KLSAgICBwYXJzZWRfbG9jYXRpb24gPSBOVUxMOwotICAgIHBhcnNlZF90YWdfbGlzdCA9IE5VTEw7Ci0gICAgcGFyc2VkX3N0cnVjdHVyZSA9IE5VTEw7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfcmVkaXJlY3RfZW50cnkgKG1lc3NhZ2UsIDIsICZwYXJzZWRfbG9jYXRpb24sCi0gICAgICAgICZwYXJzZWRfdGFnX2xpc3QsICZwYXJzZWRfc3RydWN0dXJlKTsKLSAgICBmYWlsX3VubGVzcyAocGFyc2VkX2xvY2F0aW9uICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChwYXJzZWRfdGFnX2xpc3QgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKHBhcnNlZF9zdHJ1Y3R1cmUgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKCFzdHJjbXAgKHBhcnNlZF9sb2NhdGlvbiwgdGVzdF9sb2NhdGlvbikpOwotICAgIGZhaWxfdW5sZXNzICghc3RyY21wIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChwYXJzZWRfc3RydWN0dXJlKSwKLSAgICAgICAgICAgIHRlc3Rfc3RydWN0X25hbWUpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF91aW50IChwYXJzZWRfdGFnX2xpc3QsIEdTVF9UQUdfQklUUkFURSwKLSAgICAgICAgICAgICZiaXRyYXRlKSAmJiAoYml0cmF0ZSA9PSB0ZXN0X2JpdHJhdGUpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChwYXJzZWRfc3RydWN0dXJlLCB0ZXN0X3ZhbHVlX25hbWUsCi0gICAgICAgICAgICAmdmFsdWUpICYmICh2YWx1ZSA9PSB0ZXN0X3ZhbHVlKSk7Ci0KLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgICAvKiBTaW5jZSB0aGUgbWVzc2FnZSB0YWtlcyBvd25lcnNoaXAgb3ZlciB0aGUgdGFnIGxpc3QsIGl0cyByZWZjb3VudAotICAgICAqIG11c3QgaGF2ZSBiZWVuIGRlY3JlYXNlZCBhZnRlciBlYWNoIGFkZGVkIGVudHJ5ICovCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFICh0ZXN0X3RhZ19saXN0KSwgMSk7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHRlc3Rfc3RydWN0dXJlKTsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRlc3RfdGFnX2xpc3QpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9tZXNzYWdlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdE1lc3NhZ2UiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2luZyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfbWVzc2FnZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdG1ldGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIwNzNlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0bWV0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgR3N0TWV0YQotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0vKiB0ZXN0IG1ldGFkYXRhIGZvciBQVFMvRFRTIGFuZCBkdXJhdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0TWV0YSBtZXRhOwotCi0gIEdzdENsb2NrVGltZSBwdHM7Ci0gIEdzdENsb2NrVGltZSBkdHM7Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLSAgR3N0Q2xvY2tUaW1lIGNsb2NrX3JhdGU7Ci19IEdzdE1ldGFUZXN0OwotCi1zdGF0aWMgR1R5cGUgZ3N0X21ldGFfdGVzdF9hcGlfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfTUVUQV9URVNUX0FQSV9UWVBFIChnc3RfbWV0YV90ZXN0X2FwaV9nZXRfdHlwZSgpKQotCi1zdGF0aWMgY29uc3QgR3N0TWV0YUluZm8gKmdzdF9tZXRhX3Rlc3RfZ2V0X2luZm8gKHZvaWQpOwotI2RlZmluZSBHU1RfTUVUQV9URVNUX0lORk8gKGdzdF9tZXRhX3Rlc3RfZ2V0X2luZm8oKSkKLQotI2RlZmluZSBHU1RfTUVUQV9URVNUX0dFVChidWYpICgoR3N0TWV0YVRlc3QgKilnc3RfYnVmZmVyX2dldF9tZXRhKGJ1ZixHU1RfTUVUQV9URVNUX0FQSV9UWVBFKSkKLSNkZWZpbmUgR1NUX01FVEFfVEVTVF9BREQoYnVmKSAoKEdzdE1ldGFUZXN0ICopZ3N0X2J1ZmZlcl9hZGRfbWV0YShidWYsR1NUX01FVEFfVEVTVF9JTkZPLE5VTEwpKQotCi0jaWYgMAotLyogdW51c2VkIGN1cnJlbnRseS4gVGhpcyBpcyBhIHVzZXIgZnVuY3Rpb24gdG8gZmlsbCB0aGUgbWV0YWRhdGEgd2l0aCBkZWZhdWx0Ci0gKiB2YWx1ZXMuIFdlIGRvbid0IGNhbGwgdGhpcyBmcm9tIHRoZSBpbml0IGZ1bmN0aW9uIGJlY2F1c2UgdGhlIHVzZXIgaXMgbW9zdGx5Ci0gKiBsaWtlbHkgZ29pbmcgdG8gb3ZlcnJpZGUgdGhlIHZhbHVlcyBpbW1lZGlhdGVseSBhZnRlciAqLwotc3RhdGljIHZvaWQKLWdzdF9tZXRhX3Rlc3RfaW5pdCAoR3N0TWV0YVRlc3QgKiBtZXRhKQotewotICBtZXRhLT5wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBtZXRhLT5kdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBtZXRhLT5kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIG1ldGEtPmNsb2NrX3JhdGUgPSBHU1RfU0VDT05EOwotfQotI2VuZGlmCi0KLXN0YXRpYyBnYm9vbGVhbgotdGVzdF9pbml0X2Z1bmMgKEdzdE1ldGEgKiBtZXRhLCBncG9pbnRlciBwYXJhbXMsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR1NUX0RFQlVHICgiaW5pdCBjYWxsZWQgb24gYnVmZmVyICVwLCBtZXRhICVwIiwgYnVmZmVyLCBtZXRhKTsKLSAgLyogbm90aGluZyB0byBpbml0IHJlYWxseSwgdGhlIGluaXQgZnVuY3Rpb24gaXMgbW9zdGx5IGZvciBhbGxvY2F0aW5nCi0gICAqIGFkZGl0aW9uYWwgbWVtb3J5IG9yIGRvaW5nIHNwZWNpYWwgc2V0dXAgYXMgcGFydCBvZiBhZGRpbmcgdGhlIG1ldGFkYXRhIHRvCi0gICAqIHRoZSBidWZmZXIqLwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfZnJlZV9mdW5jIChHc3RNZXRhICogbWV0YSwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHU1RfREVCVUcgKCJmcmVlIGNhbGxlZCBvbiBidWZmZXIgJXAsIG1ldGEgJXAiLCBidWZmZXIsIG1ldGEpOwotICAvKiBub3RoaW5nIHRvIGZyZWUgcmVhbGx5ICovCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotdGVzdF90cmFuc2Zvcm1fZnVuYyAoR3N0QnVmZmVyICogdHJhbnNidWYsIEdzdE1ldGEgKiBtZXRhLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR1F1YXJrIHR5cGUsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdE1ldGFUZXN0ICp0ZXN0LCAqdG1ldGEgPSAoR3N0TWV0YVRlc3QgKikgbWV0YTsKLQotICBHU1RfREVCVUcgKCJ0cmFuc2Zvcm0gJXMgY2FsbGVkIGZyb20gYnVmZmVyICVwIHRvICVwLCBtZXRhICVwIiwKLSAgICAgIGdfcXVhcmtfdG9fc3RyaW5nICh0eXBlKSwgYnVmZmVyLCB0cmFuc2J1ZiwgbWV0YSk7Ci0KLSAgaWYgKEdTVF9NRVRBX1RSQU5TRk9STV9JU19DT1BZICh0eXBlKSkgewotICAgIEdzdE1ldGFUcmFuc2Zvcm1Db3B5ICpjb3B5X2RhdGEgPSBkYXRhOwotCi0gICAgdGVzdCA9IEdTVF9NRVRBX1RFU1RfQUREICh0cmFuc2J1Zik7Ci0KLSAgICBpZiAoY29weV9kYXRhLT5vZmZzZXQgPT0gMCkgewotICAgICAgLyogc2FtZSBvZmZzZXQsIGNvcHkgdGltZXN0YW1wcyAqLwotICAgICAgdGVzdC0+cHRzID0gdG1ldGEtPnB0czsKLSAgICAgIHRlc3QtPmR0cyA9IHRtZXRhLT5kdHM7Ci0gICAgICBpZiAoIWNvcHlfZGF0YS0+cmVnaW9uKSB7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IGNvcHlfZGF0YS0+c2l6ZSk7Ci0gICAgICAgIC8qIHNhbWUgc2l6ZSwgY29weSBkdXJhdGlvbiAqLwotICAgICAgICB0ZXN0LT5kdXJhdGlvbiA9IHRtZXRhLT5kdXJhdGlvbjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID4gY29weV9kYXRhLT5zaXplKTsKLSAgICAgICAgLyogZWxzZSBjbGVhciAqLwotICAgICAgICB0ZXN0LT5kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZhaWxfdW5sZXNzIChjb3B5X2RhdGEtPnJlZ2lvbiA9PSBUUlVFKTsKLSAgICAgIHRlc3QtPnB0cyA9IC0xOwotICAgICAgdGVzdC0+ZHRzID0gLTE7Ci0gICAgICB0ZXN0LT5kdXJhdGlvbiA9IC0xOwotICAgIH0KLSAgICB0ZXN0LT5jbG9ja19yYXRlID0gdG1ldGEtPmNsb2NrX3JhdGU7Ci0gIH0gZWxzZSB7Ci0gICAgLyogcmV0dXJuIEZBTFNFLCBpZiB0cmFuc2Zvcm0gdHlwZSBpcyBub3Qgc3VwcG9ydGVkICovCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR1R5cGUKLWdzdF9tZXRhX3Rlc3RfYXBpX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgR1R5cGUgdHlwZTsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICp0YWdzW10gPSB7ICJ0aW1pbmciLCBOVUxMIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdHlwZSkpIHsKLSAgICBHVHlwZSBfdHlwZSA9IGdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVyICgiR3N0TWV0YVRlc3RBUEkiLCB0YWdzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnR5cGUsIF90eXBlKTsKLSAgfQotICByZXR1cm4gdHlwZTsKLX0KLQotc3RhdGljIGNvbnN0IEdzdE1ldGFJbmZvICoKLWdzdF9tZXRhX3Rlc3RfZ2V0X2luZm8gKHZvaWQpCi17Ci0gIHN0YXRpYyBjb25zdCBHc3RNZXRhSW5mbyAqbWV0YV90ZXN0X2luZm8gPSBOVUxMOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJm1ldGFfdGVzdF9pbmZvKSkgewotICAgIGNvbnN0IEdzdE1ldGFJbmZvICptaSA9IGdzdF9tZXRhX3JlZ2lzdGVyIChHU1RfTUVUQV9URVNUX0FQSV9UWVBFLAotICAgICAgICAiR3N0TWV0YVRlc3QiLAotICAgICAgICBzaXplb2YgKEdzdE1ldGFUZXN0KSwKLSAgICAgICAgdGVzdF9pbml0X2Z1bmMsIHRlc3RfZnJlZV9mdW5jLCB0ZXN0X3RyYW5zZm9ybV9mdW5jKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJm1ldGFfdGVzdF9pbmZvLCBtaSk7Ci0gIH0KLSAgcmV0dXJuIG1ldGFfdGVzdF9pbmZvOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tZXRhX3Rlc3QpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyLCAqY29weSwgKnN1YmJ1ZjsKLSAgR3N0TWV0YVRlc3QgKm1ldGE7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBmYWlsX2lmIChidWZmZXIgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1dSSVRFKSk7Ci0gIGZhaWxfaWYgKGluZm8uZGF0YSA9PSBOVUxMKTsKLSAgbWVtc2V0IChpbmZvLmRhdGEsIDAsIDQpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLQotICAvKiBhZGQgc29tZSBtZXRhZGF0YSAqLwotICBtZXRhID0gR1NUX01FVEFfVEVTVF9BREQgKGJ1ZmZlcik7Ci0gIGZhaWxfaWYgKG1ldGEgPT0gTlVMTCk7Ci0gIC8qIGZpbGwgc29tZSB2YWx1ZXMgKi8KLSAgbWV0YS0+cHRzID0gMTAwMDsKLSAgbWV0YS0+ZHRzID0gMjAwMDsKLSAgbWV0YS0+ZHVyYXRpb24gPSAxMDAwOwotICBtZXRhLT5jbG9ja19yYXRlID0gMTAwMDsKLQotICAvKiBjb3B5IG9mIHRoZSBidWZmZXIgKi8KLSAgY29weSA9IGdzdF9idWZmZXJfY29weSAoYnVmZmVyKTsKLSAgLyogZ2V0IG1ldGFkYXRhIG9mIHRoZSBidWZmZXIgKi8KLSAgbWV0YSA9IEdTVF9NRVRBX1RFU1RfR0VUIChjb3B5KTsKLSAgZmFpbF9pZiAobWV0YSA9PSBOVUxMKTsKLSAgZmFpbF9pZiAobWV0YS0+cHRzICE9IDEwMDApOwotICBmYWlsX2lmIChtZXRhLT5kdHMgIT0gMjAwMCk7Ci0gIGZhaWxfaWYgKG1ldGEtPmR1cmF0aW9uICE9IDEwMDApOwotICBmYWlsX2lmIChtZXRhLT5jbG9ja19yYXRlICE9IDEwMDApOwotICBnc3RfYnVmZmVyX3VucmVmIChjb3B5KTsKLQotICAvKiBtYWtlIHN1YmJ1ZmZlciAqLwotICBzdWJidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIDEpOwotICAvKiBnZXQgbWV0YWRhdGEgb2YgdGhlIGJ1ZmZlciAqLwotICBtZXRhID0gR1NUX01FVEFfVEVTVF9HRVQgKHN1YmJ1Zik7Ci0gIGZhaWxfaWYgKG1ldGEgPT0gTlVMTCk7Ci0gIGZhaWxfaWYgKG1ldGEtPnB0cyAhPSAxMDAwKTsKLSAgZmFpbF9pZiAobWV0YS0+ZHRzICE9IDIwMDApOwotICBmYWlsX2lmIChtZXRhLT5kdXJhdGlvbiAhPSAtMSk7Ci0gIGZhaWxfaWYgKG1ldGEtPmNsb2NrX3JhdGUgIT0gMTAwMCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKHN1YmJ1Zik7Ci0KLSAgLyogbWFrZSBhbm90aGVyIHN1YmJ1ZmZlciAqLwotICBzdWJidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDEsIDMpOwotICAvKiBnZXQgbWV0YWRhdGEgb2YgdGhlIGJ1ZmZlciAqLwotICBtZXRhID0gR1NUX01FVEFfVEVTVF9HRVQgKHN1YmJ1Zik7Ci0gIGZhaWxfaWYgKG1ldGEgPT0gTlVMTCk7Ci0gIGZhaWxfaWYgKG1ldGEtPnB0cyAhPSAtMSk7Ci0gIGZhaWxfaWYgKG1ldGEtPmR0cyAhPSAtMSk7Ci0gIGZhaWxfaWYgKG1ldGEtPmR1cmF0aW9uICE9IC0xKTsKLSAgZmFpbF9pZiAobWV0YS0+Y2xvY2tfcmF0ZSAhPSAxMDAwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViYnVmKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yZWFjaF9tZXRhIChHc3RCdWZmZXIgKiBidWZmZXIsIEdzdE1ldGEgKiogbWV0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICAvKiB0cnkgdG8gcmVtb3ZlICovCi0gICptZXRhID0gTlVMTDsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21ldGFfbG9ja2VkKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0TWV0YVRlc3QgKm1ldGE7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLSAgZmFpbF9pZiAoYnVmZmVyID09IE5VTEwpOwotCi0gIC8qIGFkZCBzb21lIG1ldGFkYXRhICovCi0gIG1ldGEgPSBHU1RfTUVUQV9URVNUX0FERCAoYnVmZmVyKTsKLSAgZmFpbF9pZiAobWV0YSA9PSBOVUxMKTsKLSAgR1NUX01FVEFfRkxBR19TRVQgKG1ldGEsIEdTVF9NRVRBX0ZMQUdfTE9DS0VEKTsKLQotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfcmVtb3ZlX21ldGEgKGJ1ZmZlciwgKEdzdE1ldGEgKikgbWV0YSkpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9idWZmZXJfZm9yZWFjaF9tZXRhIChidWZmZXIsIGZvcmVhY2hfbWV0YSwgTlVMTCkpOwotCi0gIEdTVF9NRVRBX0ZMQUdfVU5TRVQgKG1ldGEsIEdTVF9NRVRBX0ZMQUdfTE9DS0VEKTsKLQotICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhIChidWZmZXIsIChHc3RNZXRhICopIG1ldGEpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9idWZmZXJtZXRhX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdE1ldGEiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWV0YV90ZXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21ldGFfbG9ja2VkKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9idWZmZXJtZXRhKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0bWluaW9iamVjdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjk0MzhlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RtaW5pb2JqZWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBHc3RNaW5pT2JqZWN0Ci0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NvcHkpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyLCAqY29weTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotCi0gIGNvcHkgPSBHU1RfQlVGRkVSIChnc3RfbWluaV9vYmplY3RfY29weSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlcikpKTsKLQotICBmYWlsX2lmIChjb3B5ID09IE5VTEwsICJDb3B5IG9mIGJ1ZmZlciByZXR1cm5lZCBOVUxMIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChjb3B5KSA9PSA0LAotICAgICAgIkNvcHkgb2YgYnVmZmVyIGhhcyBkaWZmZXJlbnQgc2l6ZSIpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGNvcHkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2lzX3dyaXRhYmxlKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0TWluaU9iamVjdCAqbW9iajsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBtb2JqID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlcik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9taW5pX29iamVjdF9pc193cml0YWJsZSAobW9iaiksCi0gICAgICAiQSBidWZmZXIgd2l0aCBvbmUgcmVmIHNob3VsZCBiZSB3cml0YWJsZSIpOwotCi0gIGZhaWxfaWYgKGdzdF9taW5pX29iamVjdF9yZWYgKG1vYmopID09IE5VTEwsICJDb3VsZCBub3QgcmVmIHRoZSBtb2JqIik7Ci0KLSAgZmFpbF9pZiAoZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlIChtb2JqKSwKLSAgICAgICJBIGJ1ZmZlciB3aXRoIHR3byByZWZzIHNob3VsZCBub3QgYmUgd3JpdGFibGUiKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKG1vYmopOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21ha2Vfd3JpdGFibGUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RNaW5pT2JqZWN0ICptb2JqLCAqbW9iajIsICptb2JqMzsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBtb2JqID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKGJ1ZmZlcik7Ci0KLSAgbW9iajIgPSBnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAobW9iaik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfQlVGRkVSIChtb2JqMiksICJtYWtlX3dyaXRhYmxlIGRpZCBub3QgcmV0dXJuIGEgYnVmZmVyIik7Ci0gIGZhaWxfdW5sZXNzIChtb2JqID09IG1vYmoyLAotICAgICAgIm1ha2Vfd3JpdGFibGUgcmV0dXJuZWQgYSBjb3B5IGZvciBhIGJ1ZmZlciB3aXRoIHJlZmNvdW50IDEiKTsKLQotICBtb2JqMiA9IGdzdF9taW5pX29iamVjdF9yZWYgKG1vYmopOwotICBtb2JqMyA9IGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChtb2JqKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19CVUZGRVIgKG1vYmozKSwgIm1ha2Vfd3JpdGFibGUgZGlkIG5vdCByZXR1cm4gYSBidWZmZXIiKTsKLSAgZmFpbF9pZiAobW9iaiA9PSBtb2JqMywKLSAgICAgICJtYWtlX3dyaXRhYmxlIHJldHVybmVkIHNhbWUgb2JqZWN0IGZvciBhIGJ1ZmZlciB3aXRoIHJlZmNvdW50ID4gMSIpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKG1vYmopID09IDEsCi0gICAgICAicmVmY291bnQgb2Ygb3JpZ2luYWwgbW9iaiBvYmplY3Qgc2hvdWxkIGJlIGJhY2sgdG8gMSIpOwotCi0gIG1vYmoyID0gZ3N0X21pbmlfb2JqZWN0X21ha2Vfd3JpdGFibGUgKG1vYmopOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAobW9iajIpLCAibWFrZV93cml0YWJsZSBkaWQgbm90IHJldHVybiBhIGJ1ZmZlciIpOwotICBmYWlsX3VubGVzcyAobW9iaiA9PSBtb2JqMiwKLSAgICAgICJtYWtlX3dyaXRhYmxlIHJldHVybmVkIGEgY29weSBmb3IgYSBidWZmZXIgd2l0aCByZWZjb3VudCAxIik7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChtb2JqMyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdpbnQgbnVtX3RocmVhZHMgPSAxMDsKLXN0YXRpYyBnaW50IHJlZnNfcGVyX3RocmVhZCA9IDEwMDAwOwotCi0vKiB0ZXN0IHRocmVhZC1zYWZlIHJlZmNvdW50aW5nIG9mIEdzdE1pbmlPYmplY3QgKi8KLXN0YXRpYyB2b2lkCi10aHJlYWRfcmVmIChHc3RNaW5pT2JqZWN0ICogbW9iaikKLXsKLSAgaW50IGo7Ci0KLSAgVEhSRUFEX1NUQVJUICgpOwotCi0gIGZvciAoaiA9IDA7IGogPCByZWZzX3Blcl90aHJlYWQ7ICsraikgewotICAgIGdzdF9taW5pX29iamVjdF9yZWYgKG1vYmopOwotCi0gICAgaWYgKGogJSBudW1fdGhyZWFkcyA9PSAwKQotICAgICAgVEhSRUFEX1NXSVRDSCAoKTsKLSAgfQotICBHU1RfREVCVUcgKCJ0aHJlYWQgc3RvcHBlZCIpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZWZfdGhyZWFkZWQpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RNaW5pT2JqZWN0ICptb2JqOwotICBnaW50IGV4cGVjdGVkOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0KLSAgbW9iaiA9IEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWZmZXIpOwotCi0gIE1BSU5fU1RBUlRfVEhSRUFEUyAobnVtX3RocmVhZHMsIHRocmVhZF9yZWYsIG1vYmopOwotCi0gIE1BSU5fU1RPUF9USFJFQURTICgpOwotCi0gIGV4cGVjdGVkID0gbnVtX3RocmVhZHMgKiByZWZzX3Blcl90aHJlYWQgKyAxOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKG1vYmosICJtaW5pb2JqZWN0IiwgZXhwZWN0ZWQpOwotCi0gIHdoaWxlIChleHBlY3RlZC0tICE9IDApCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotdGhyZWFkX3VucmVmIChHc3RNaW5pT2JqZWN0ICogbW9iaikKLXsKLSAgaW50IGo7Ci0KLSAgVEhSRUFEX1NUQVJUICgpOwotCi0gIGZvciAoaiA9IDA7IGogPCByZWZzX3Blcl90aHJlYWQ7ICsraikgewotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAobW9iaik7Ci0KLSAgICBpZiAoaiAlIG51bV90aHJlYWRzID09IDApCi0gICAgICBUSFJFQURfU1dJVENIICgpOwotICB9Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VucmVmX3RocmVhZGVkKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0TWluaU9iamVjdCAqbW9iajsKLSAgaW50IGk7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0KTsKLQotICBtb2JqID0gR1NUX01JTklfT0JKRUNUIChidWZmZXIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fdGhyZWFkcyAqIHJlZnNfcGVyX3RocmVhZDsgKytpKQotICAgIGdzdF9taW5pX29iamVjdF9yZWYgKG1vYmopOwotCi0gIE1BSU5fU1RBUlRfVEhSRUFEUyAobnVtX3RocmVhZHMsIHRocmVhZF91bnJlZiwgbW9iaik7Ci0KLSAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7Ci0KLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChtb2JqLCAibWluaW9iamVjdCIsIDEpOwotCi0gIC8qIGZpbmFsIHVucmVmICovCi0gIGdzdF9taW5pX29iamVjdF91bnJlZiAobW9iaik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogPT09PT09PT0gd2VhayByZWYgdGVzdCA9PT09PT09PSAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Vha19yZWZfbm90aWZ5X3N1Y2NlZWRlZCA9IEZBTFNFOwotCi1zdGF0aWMgdm9pZAotb25fd2Vha19yZWZfbm90aWZ5IChncG9pbnRlciBkYXRhLCBHc3RNaW5pT2JqZWN0ICogd2hlcmVfb2JqZWN0X3dhcykKLXsKLSAgd2Vha19yZWZfbm90aWZ5X3N1Y2NlZWRlZCA9IFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3dlYWtfcmVmKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotCi0gIGdzdF9taW5pX29iamVjdF93ZWFrX3JlZiAoR1NUX01JTklfT0JKRUNUIChidWZmZXIpLCBvbl93ZWFrX3JlZl9ub3RpZnksCi0gICAgICAmYnVmZmVyKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzICh3ZWFrX3JlZl9ub3RpZnlfc3VjY2VlZGVkLAotICAgICAgIk5vIHdlYWsgcmVmZXJlbmNlIG5vdGlmaWNhdGlvbiB0b29rIHBsYWNlLiIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNpZiAwCi0vKiA9PT09PT09PSByZWN5Y2xlIHRlc3QgPT09PT09PT0gKi8KLQotc3RhdGljIGdpbnQgcmVjeWNsZV9idWZmZXJfY291bnQgPSAxMDsKLQotdHlwZWRlZiBzdHJ1Y3QgX015QnVmZmVyUG9vbCBNeUJ1ZmZlclBvb2w7Ci0KLXN0cnVjdCBfTXlCdWZmZXJQb29sCi17Ci0gIEdTTGlzdCAqYnVmZmVyczsKLQotICB2b2xhdGlsZSBnYm9vbGVhbiBpc19jbG9zZWQ7Ci19OwotCi1zdGF0aWMgdm9pZCBteV9yZWN5Y2xlX2J1ZmZlcl9kZXN0cm95IChNeVJlY3ljbGVCdWZmZXIgKiBidWYpOwotCi1zdGF0aWMgTXlCdWZmZXJQb29sICoKLW15X2J1ZmZlcl9wb29sX25ldyAodm9pZCkKLXsKLSAgcmV0dXJuIGdfbmV3MCAoTXlCdWZmZXJQb29sLCAxKTsKLX0KLQotc3RhdGljIHZvaWQKLW15X2J1ZmZlcl9wb29sX2ZyZWUgKE15QnVmZmVyUG9vbCAqIHNlbGYpCi17Ci0gIHdoaWxlIChzZWxmLT5idWZmZXJzICE9IE5VTEwpIHsKLSAgICBteV9yZWN5Y2xlX2J1ZmZlcl9kZXN0cm95IChzZWxmLT5idWZmZXJzLT5kYXRhKTsKLSAgICBzZWxmLT5idWZmZXJzID0gZ19zbGlzdF9kZWxldGVfbGluayAoc2VsZi0+YnVmZmVycywgc2VsZi0+YnVmZmVycyk7Ci0gIH0KLQotICBnX2ZyZWUgKHNlbGYpOwotfQotCi1zdGF0aWMgdm9pZAotbXlfYnVmZmVyX3Bvb2xfYWRkIChNeUJ1ZmZlclBvb2wgKiBzZWxmLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIGdfbXV0ZXhfbG9jayAobXV0ZXgpOwotICBzZWxmLT5idWZmZXJzID0gZ19zbGlzdF9wcmVwZW5kIChzZWxmLT5idWZmZXJzLCBnc3RfYnVmZmVyX3JlZiAoYnVmKSk7Ci0gIGdfbXV0ZXhfdW5sb2NrIChtdXRleCk7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotbXlfYnVmZmVyX3Bvb2xfZHJhaW5fb25lIChNeUJ1ZmZlclBvb2wgKiBzZWxmKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0KLSAgZ19tdXRleF9sb2NrIChtdXRleCk7Ci0gIGlmIChzZWxmLT5idWZmZXJzICE9IE5VTEwpIHsKLSAgICBidWYgPSBzZWxmLT5idWZmZXJzLT5kYXRhOwotICAgIHNlbGYtPmJ1ZmZlcnMgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChzZWxmLT5idWZmZXJzLCBzZWxmLT5idWZmZXJzKTsKLSAgfQotICBnX211dGV4X3VubG9jayAobXV0ZXgpOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyB2b2lkCi1teV9yZWN5Y2xlX2J1ZmZlcl9maW5hbGl6ZSAoR3N0TWluaU9iamVjdCAqIG1pbmlfb2JqZWN0KQotewotICBHc3RCdWZmZXIgKnNlbGYgPSBHU1RfQlVGRkVSX0NBU1QgKG1pbmlfb2JqZWN0KTsKLQotICBpZiAoc2VsZi0+cG9vbCAhPSBOVUxMKSB7Ci0gICAgbXlfYnVmZmVyX3Bvb2xfYWRkIChzZWxmLT5wb29sLCBHU1RfQlVGRkVSX0NBU1QgKHNlbGYpKTsKLSAgICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMgLyAxMDApOwotICB9IGVsc2UgewotICAgIEdTVF9NSU5JX09CSkVDVF9DTEFTUyAobXlfcmVjeWNsZV9idWZmZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUKLSAgICAgICAgKG1pbmlfb2JqZWN0KTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLW15X3JlY3ljbGVfYnVmZmVyX25ldyAoTXlCdWZmZXJQb29sICogcG9vbCkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgLy9idWYtPnBvb2wgPSBwb29sOwotCi0gIHJldHVybiBHU1RfQlVGRkVSX0NBU1QgKGJ1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1teV9yZWN5Y2xlX2J1ZmZlcl9kZXN0cm95IChNeVJlY3ljbGVCdWZmZXIgKiBidWYpCi17Ci0gIGJ1Zi0+cG9vbCA9IE5VTEw7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVJfQ0FTVCAoYnVmKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10aHJlYWRfYnVmZmVyX3Byb2R1Y2VyIChNeUJ1ZmZlclBvb2wgKiBwb29sKQotewotICBpbnQgajsKLQotICBUSFJFQURfU1RBUlQgKCk7Ci0KLSAgZm9yIChqID0gMDsgaiA8IHJlY3ljbGVfYnVmZmVyX2NvdW50OyArK2opIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZiA9IG15X3JlY3ljbGVfYnVmZmVyX25ldyAocG9vbCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfQotCi0gIHBvb2wtPmlzX2Nsb3NlZCA9IFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi10aHJlYWRfYnVmZmVyX2NvbnN1bWVyIChNeUJ1ZmZlclBvb2wgKiBwb29sKQotewotICBUSFJFQURfU1RBUlQgKCk7Ci0KLSAgZG8gewotICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgYnVmID0gbXlfYnVmZmVyX3Bvb2xfZHJhaW5fb25lIChwb29sKTsKLSAgICBpZiAoYnVmICE9IE5VTEwpCi0gICAgICBteV9yZWN5Y2xlX2J1ZmZlcl9kZXN0cm95IChNWV9SRUNZQ0xFX0JVRkZFUl9DQVNUIChidWYpKTsKLQotICAgIFRIUkVBRF9TV0lUQ0ggKCk7Ci0gIH0KLSAgd2hpbGUgKCFwb29sLT5pc19jbG9zZWQpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZWN5Y2xlX3RocmVhZGVkKQotewotICBNeUJ1ZmZlclBvb2wgKnBvb2w7Ci0KLSAgcG9vbCA9IG15X2J1ZmZlcl9wb29sX25ldyAoKTsKLQotICBNQUlOX1NUQVJUX1RIUkVBRFMgKDEsIHRocmVhZF9idWZmZXJfcHJvZHVjZXIsIHBvb2wpOwotICBNQUlOX1NUQVJUX1RIUkVBRFMgKDEsIHRocmVhZF9idWZmZXJfY29uc3VtZXIsIHBvb2wpOwotCi0gIE1BSU5fU1RPUF9USFJFQURTICgpOwotCi0gIG15X2J1ZmZlcl9wb29sX2ZyZWUgKHBvb2wpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0jZW5kaWYKLQotLyogPT09PT09PT0gdmFsdWUgY29sbGVjdGlvbiB0ZXN0ID09PT09PT09ICovCi10eXBlZGVmIHN0cnVjdCBfTXlGb28KLXsKLSAgR09iamVjdCBvYmplY3Q7Ci19IE15Rm9vOwotCi10eXBlZGVmIHN0cnVjdCBfTXlGb29DbGFzcwotewotICBHT2JqZWN0Q2xhc3MgZ29iamVjdF9jbGFzczsKLX0gTXlGb29DbGFzczsKLQotZW51bQotewotICBQUk9QX0JVRkZFUiA9IDEKLX07Ci0KLUdUeXBlIG15X2Zvb19nZXRfdHlwZSAodm9pZCk7Ci1HX0RFRklORV9UWVBFIChNeUZvbywgbXlfZm9vLCBHX1RZUEVfT0JKRUNUKTsKLQotc3RhdGljIHZvaWQKLW15X2Zvb19pbml0IChNeUZvbyAqIGZvbykKLXsKLX0KLQotc3RhdGljIHZvaWQKLW15X2Zvb19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QnVmZmVyICpuZXdfYnVmOwotCi0gIGdfYXNzZXJ0IChwcm9wX2lkID09IFBST1BfQlVGRkVSKTsKLQotICBuZXdfYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0KTsKLSAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCBHU1RfTUlOSV9PQkpFQ1QgKG5ld19idWYpKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAobmV3X2J1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1teV9mb29fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE1pbmlPYmplY3QgKm1pbmlfb2JqOwotCi0gIGdfYXNzZXJ0IChwcm9wX2lkID09IFBST1BfQlVGRkVSKTsKLQotICBtaW5pX29iaiA9IGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7Ci0gIGdfYXNzZXJ0IChHU1RfSVNfQlVGRkVSIChtaW5pX29iaikpOwotCi0jaWYgMAotICAvKiBnc3RfdmFsdWVfZHVwX21pbmlfb2JqZWN0KCkgZG9lcyBub3QgZXhpc3QgeWV0ICovCi0gIG1pbmlfb2JqID0gZ3N0X3ZhbHVlX2R1cF9taW5pX29iamVjdCAodmFsdWUpOwotICBnX2Fzc2VydCAoR1NUX0lTX01JTklfT0JKRUNUIChtaW5pX29iaikpOwotICBnX2Fzc2VydCAoR1NUX0lTX0JVRkZFUiAobWluaV9vYmopKTsKLSAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChtaW5pX29iaik7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgdm9pZAotbXlfZm9vX2NsYXNzX2luaXQgKE15Rm9vQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2tsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2tsYXNzLT5nZXRfcHJvcGVydHkgPSBteV9mb29fZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2tsYXNzLT5zZXRfcHJvcGVydHkgPSBteV9mb29fc2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3Rfa2xhc3MsIFBST1BfQlVGRkVSLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgiYnVmZmVyIiwgIkJ1ZmZlciIsCi0gICAgICAgICAgImEgbmV3bHkgY3JlYXRlZCBHc3RCdWZmZXIiLCBHU1RfVFlQRV9CVUZGRVIsIEdfUEFSQU1fUkVBRFdSSVRFKSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZhbHVlX2NvbGxlY3Rpb24pCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKLSAgTXlGb28gKmZvbzsKLQotICBmb28gPSAoTXlGb28gKikgZ19vYmplY3RfbmV3IChteV9mb29fZ2V0X3R5cGUgKCksIE5VTEwpOwotCi0gIC8qIHRlc3QgZ19vYmplY3RfZ2V0KCkgcmVmY291bnRpbmcgKi8KLSAgZ19vYmplY3RfZ2V0IChmb28sICJidWZmZXIiLCAmYnVmLCBOVUxMKTsKLSAgZ19hc3NlcnQgKEdTVF9JU19CVUZGRVIgKGJ1ZikpOwotICBnX2Fzc2VydCAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoYnVmKSkgPT0gMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgLyogdGVzdCBnX29iamVjdF9zZXQoKSByZWZjb3VudGluZyAqLwotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQpOwotICBnX29iamVjdF9zZXQgKGZvbywgImJ1ZmZlciIsIGJ1ZiwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKEdTVF9NSU5JX09CSkVDVF9DQVNUIChidWYpKSA9PSAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICBnX29iamVjdF91bnJlZiAoZm9vKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2R1cF9udWxsX21pbmlfb2JqZWN0KQotewotICBHVmFsdWUgdmFsdWUgPSB7IDAsIH07Ci0gIEdzdE1pbmlPYmplY3QgKm1vOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9CVUZGRVIpOwotCi0gIGdfdmFsdWVfc2V0X2JveGVkICgmdmFsdWUsIE5VTEwpOwotCi0gIG1vID0gR1NUX01JTklfT0JKRUNUX0NBU1QgKGdfdmFsdWVfZHVwX2JveGVkICgmdmFsdWUpKTsKLSAgZ19hc3NlcnQgKG1vID09IE5VTEwpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9taW5pX29iamVjdF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RNaW5pT2JqZWN0Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICAvKiB0dXJuIG9mZiB0aW1lb3V0ICovCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgNjApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY29weSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pc193cml0YWJsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYWtlX3dyaXRhYmxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZl90aHJlYWRlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91bnJlZl90aHJlYWRlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF93ZWFrX3JlZik7Ci0gIC8vdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlY3ljbGVfdGhyZWFkZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfY29sbGVjdGlvbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kdXBfbnVsbF9taW5pX29iamVjdCk7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X21pbmlfb2JqZWN0KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RvYmplY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhZDI4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0b2JqZWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NDQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBHc3RPYmplY3QKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA0PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLS8qCi0gIENyZWF0ZSBhIGZha2Ugc3ViY2xhc3MKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEZha2VPYmplY3RDbGFzcyBHc3RGYWtlT2JqZWN0Q2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RmFrZU9iamVjdCBHc3RGYWtlT2JqZWN0OwotCi1zdHJ1Y3QgX0dzdEZha2VPYmplY3QKLXsKLSAgR3N0T2JqZWN0IG9iamVjdDsKLX07Ci0KLXN0cnVjdCBfR3N0RmFrZU9iamVjdENsYXNzCi17Ci0gIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLS8vc3RhdGljIEdzdE9iamVjdENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOwotLy9zdGF0aWMgZ3VpbnQgZ3N0X2Zha2Vfb2JqZWN0X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyBHVHlwZQotZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgZmFrZV9vYmplY3RfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmZmFrZV9vYmplY3RfdHlwZSkpIHsKLSAgICBHVHlwZSB0eXBlOwotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gZmFrZV9vYmplY3RfaW5mbyA9IHsKLSAgICAgIHNpemVvZiAoR3N0RmFrZU9iamVjdENsYXNzKSwKLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLy9nc3RfZmFrZV9vYmplY3RfYmFzZV9jbGFzc19pbml0LAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvL2dzdF9mYWtlX29iamVjdF9iYXNlX2NsYXNzX2ZpbmFsaXplLAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyhHQ2xhc3NJbml0RnVuYykgZ3N0X2Zha2Vfb2JqZWN0X2NsYXNzX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIHNpemVvZiAoR3N0RmFrZU9iamVjdCksCi0gICAgICAwLAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyhHSW5zdGFuY2VJbml0RnVuYykgZ3N0X2Zha2Vfb2JqZWN0X2luaXQsCi0gICAgICBOVUxMCi0gICAgfTsKLQotICAgIHR5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9PQkpFQ1QsCi0gICAgICAgICJHc3RGYWtlT2JqZWN0IiwgJmZha2Vfb2JqZWN0X2luZm8sIDApOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmZmFrZV9vYmplY3RfdHlwZSwgdHlwZSk7Ci0gIH0KLSAgcmV0dXJuIGZha2Vfb2JqZWN0X3R5cGU7Ci19Ci0KLS8qIGdfb2JqZWN0X25ldyBvbiBHc3RGYWtlT2JqZWN0IHNob3VsZCBzdWNjZWVkICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9uZXcpCi17Ci0gIEdzdE9iamVjdCAqb2JqZWN0OwotCi0gIG9iamVjdCA9IGdfb2JqZWN0X25ldyAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICgpLCBOVUxMKTsKLSAgZmFpbF9pZiAob2JqZWN0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGluc3RhbmNlIG9mIEdzdEZha2VPYmplY3QiKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19PQkpFQ1QgKG9iamVjdCksCi0gICAgICAiR3N0RmFrZU9iamVjdCBpbnN0YW5jZSBpcyBub3QgYSBHc3RPYmplY3QiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAob2JqZWN0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotbm90aWZ5X25hbWUgKEdPYmplY3QgKiBvYmplY3QsIEdQYXJhbVNwZWMgKiBwc3BlYywgZ2ludCAqIG91dF9jb3VudCkKLXsKLSAgKm91dF9jb3VudCArPSAxOwotfQotCi0vKiBHc3RGYWtlT2JqZWN0IG5hbWUgdGVzdHMgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zha2Vfb2JqZWN0X2luaXRpYWxfbmFtZSkKLXsKLSAgR3N0T2JqZWN0ICpvYmplY3Q7Ci0gIGdjaGFyICpuYW1lOwotCi0gIG9iamVjdCA9IGdfb2JqZWN0X25ldyAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICgpLCBOVUxMKTsKLQotICBuYW1lID0gZ3N0X29iamVjdF9nZXRfbmFtZSAob2JqZWN0KTsKLSAgZmFpbF9pZiAobmFtZSA9PSBOVUxMLCAiTmV3bHkgY3JlYXRlZCBvYmplY3QgaGFzIG5vIG5hbWUiKTsKLSAgZmFpbF9pZiAoc3RybmNtcCAobmFtZSwgImZha2VvYmplY3QiLCAxMCkgIT0gMCwKLSAgICAgICJSYW5kb20gbmFtZSAlcyBkb2VzIG5vdCBzdGFydCB3aXRoICdmYWtlb2JqZWN0JyIsIG5hbWUpOwotICBnX2ZyZWUgKG5hbWUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9yZXNldF9uYW1lKQotewotICBHc3RPYmplY3QgKm9iamVjdDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIGdpbnQgY291bnQgPSAwOwotCi0gIG9iamVjdCA9IGdfb2JqZWN0X25ldyAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICgpLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAob2JqZWN0LCAibm90aWZ5OjpuYW1lIiwgR19DQUxMQkFDSyAobm90aWZ5X25hbWUpLCAmY291bnQpOwotCi0gIC8qIGdpdmUgYSByYW5kb20gbmFtZSBieSBzZXR0aW5nIHdpdGggTlVMTDsKLSAgICogR3N0RmFrZU9iamVjdCBjbGFzcyAtPiBmYWtlb2JqZWN0JWQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3Rfc2V0X25hbWUgKG9iamVjdCwgTlVMTCksICJDb3VsZCBub3Qgc2V0IG5hbWUiKTsKLSAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKG9iamVjdCk7Ci0gIGZhaWxfaWYgKG5hbWUgPT0gTlVMTCwgIlJhbmRvbSBuYW1lIHdhcyBub3QgYXNzaWduZWQiKTsKLSAgZmFpbF9pZiAoc3RybmNtcCAobmFtZSwgImZha2VvYmplY3QiLCAxMCkgIT0gMCwKLSAgICAgICJSYW5kb20gbmFtZSAlcyBkb2VzIG5vdCBzdGFydCB3aXRoICdmYWtlb2JqZWN0JyIsIG5hbWUpOwotICBnX2ZyZWUgKG5hbWUpOwotICBmYWlsX3VubGVzcyAoY291bnQgPT0gMSwgIk5hbWUgY2hhbmdlIHdhcyBub3Qgbm90aWZpZWQiKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3QpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmFrZV9vYmplY3Rfc2V0X25hbWVfdmlhX3Byb3BlcnR5KQotewotICBHc3RPYmplY3QgKm9iamVjdDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIGdpbnQgY291bnQgPSAwOwotCi0gIG9iamVjdCA9IGdfb2JqZWN0X25ldyAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICgpLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAob2JqZWN0LCAibm90aWZ5OjpuYW1lIiwgR19DQUxMQkFDSyAobm90aWZ5X25hbWUpLCAmY291bnQpOwotCi0gIC8qIGFsc28gdGVzdCB0aGUgcHJvcGVydHkgY29kZSBwYXRoICovCi0gIGdfb2JqZWN0X3NldCAob2JqZWN0LCAibmFtZSIsICJmYWtlIiwgTlVMTCk7Ci0gIG5hbWUgPSBnc3Rfb2JqZWN0X2dldF9uYW1lIChvYmplY3QpOwotICBmYWlsX2lmIChuYW1lID09IE5VTEwsICJGYWlsZWQgdG8gZ2V0IG5hbWUgb2YgR3N0RmFrZU9iamVjdCIpOwotICBmYWlsX2lmIChzdHJjbXAgKG5hbWUsICJmYWtlIikgIT0gMCwgIk5hbWUgb2YgR3N0RmFrZU9iamVjdCBpcyBub3QgJ2Zha2UnIik7Ci0gIGdfZnJlZSAobmFtZSk7Ci0gIGZhaWxfaWYgKGNvdW50ID4gMSwgIk5hbWUgY2hhbmdlIHdhcyBub3RpZmllZCBtdWx0aXBsZSB0aW1lIik7Ci0gIGZhaWxfdW5sZXNzIChjb3VudCA9PSAxLCAiTmFtZSBjaGFuZ2Ugd2FzIG5vdCBub3RpZmllZCIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9nZXRfbmFtZV9yZXR1cm5zX2NvcHkpCi17Ci0gIEdzdE9iamVjdCAqb2JqZWN0OwotICBnY2hhciAqbmFtZTEsICpuYW1lMjsKLQotICBvYmplY3QgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0KLSAgLyogY2hhbmdlIHRoZSBnb3R0ZW4gbmFtZSB0byBzZWUgdGhhdCBpdCdzIGEgY29weSBhbmQgbm90IHRoZSBvcmlnaW5hbCAqLwotICBuYW1lMSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKG9iamVjdCk7Ci0gIG5hbWUxWzBdID0gJ20nOwotICBuYW1lMiA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKG9iamVjdCk7Ci0gIGZhaWxfaWYgKHN0cm5jbXAgKG5hbWUyLCAiZmFrZW9iamVjdCIsIDEwKSAhPSAwLAotICAgICAgIkNvcHkgb2Ygb2JqZWN0IG5hbWUgYWZmZWN0ZWQgYWN0dWFsIG9iamVjdCBuYW1lIik7Ci0gIGdfZnJlZSAobmFtZTEpOwotICBnX2ZyZWUgKG5hbWUyKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3QpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmFrZV9vYmplY3Rfc2V0X25hbWVfd2hlbl9wYXJlbnRlZCkKLXsKLSAgR3N0T2JqZWN0ICpvYmplY3QsICpwYXJlbnQ7Ci0KLSAgb2JqZWN0ID0gZ19vYmplY3RfbmV3IChnc3RfZmFrZV9vYmplY3RfZ2V0X3R5cGUgKCksIE5VTEwpOwotCi0gIC8qIGFkZCBhIHBhcmVudCBhbmQgZW5zdXJlIG5hbWUgY2Fubm90IGJlIGNoYW5nZWQgKi8KLSAgcGFyZW50ID0gZ19vYmplY3RfbmV3IChnc3RfZmFrZV9vYmplY3RfZ2V0X3R5cGUgKCksIE5VTEwpOwotICBnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKG9iamVjdCwgcGFyZW50KTsKLSAgZmFpbF9pZiAoZ3N0X29iamVjdF9zZXRfbmFtZSAob2JqZWN0LCAiYnJva2VuIiksCi0gICAgICAiQ291bGQgc2V0IG5hbWUgb24gcGFyZW50ZWQgb2JqZWN0Iik7Ci0KLSAgZ3N0X29iamVjdF91bnBhcmVudCAob2JqZWN0KTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0aHJlYWQgZnVuY3Rpb24gZm9yIHRocmVhZGVkIG5hbWUgY2hhbmdlIHRlc3QgKi8KLXN0YXRpYyBncG9pbnRlcgotdGhyZWFkX25hbWVfb2JqZWN0IChHc3RPYmplY3QgKiBvYmplY3QpCi17Ci0gIGdjaGFyICp0aHJlYWRfaWQgPSBnX3N0cmR1cF9wcmludGYgKCIlcCIsIGdfdGhyZWFkX3NlbGYgKCkpOwotCi0gIFRIUkVBRF9TVEFSVCAoKTsKLQotICAvKiBnaXZlIG1haW4gdGhyZWFkIGEgaGVhZCBzdGFydCAqLwotICBnX3VzbGVlcCAoMTAwMDAwKTsKLQotICAvKiB3cml0ZSBvdXIgbmFtZSByZXBlYXRlZGx5ICovCi0gIGdfbWVzc2FnZSAoIlRIUkVBRCAlczogc3RhcnRpbmcgbG9vcCIsIHRocmVhZF9pZCk7Ci0gIHdoaWxlIChUSFJFQURfVEVTVF9SVU5OSU5HICgpKSB7Ci0gICAgZ3N0X29iamVjdF9zZXRfbmFtZSAob2JqZWN0LCB0aHJlYWRfaWQpOwotICAgIC8qIGEgbWluaW1hbCBzbGVlcCBpbnZva2VzIGEgdGhyZWFkIHN3aXRjaCAqLwotICAgIFRIUkVBRF9TV0lUQ0ggKCk7Ci0gIH0KLQotICAvKiB0aHJlYWQgaXMgZG9uZSwgc28gbGV0J3MgcmV0dXJuICovCi0gIGdfbWVzc2FnZSAoIlRIUkVBRCAlczogc2V0IG5hbWUiLCB0aHJlYWRfaWQpOwotICBnX2ZyZWUgKHRocmVhZF9pZCk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLSNpZiAwCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9uYW1lX3RocmVhZGVkX3dyb25nKQotewotICBHc3RPYmplY3QgKm9iamVjdDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIGdpbnQgaTsKLSAgZ2Jvb2xlYW4gZXhwZWN0ZWRfZmFpbHVyZSA9IEZBTFNFOwotCi0gIGdfbWVzc2FnZSAoIlxuVEVTVDogc2V0L2dldCB3aXRob3V0IGxvY2siKTsKLQotICBvYmplY3QgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGdzdF9vYmplY3Rfc2V0X25hbWUgKG9iamVjdCwgIm1haW4iKTsKLQotICBNQUlOX1NUQVJUX1RIUkVBRFMgKDUsIHRocmVhZF9uYW1lX29iamVjdCwgb2JqZWN0KTsKLQotICAvKiBzdGFydCBsb29waW5nIGFuZCBzZXQvZ2V0IG5hbWUgcmVwZWF0ZWRseSAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0gICAgZ3N0X29iamVjdF9zZXRfbmFtZSAob2JqZWN0LCAibWFpbiIpOwotICAgIFRIUkVBRF9TV0lUQ0ggKCk7Ci0gICAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKG9iamVjdCk7Ci0gICAgaWYgKHN0cmNtcCAobmFtZSwgIm1haW4iKSAhPSAwKSB7Ci0gICAgICBnX21lc3NhZ2UgKCJNQUlOOiBleHBlY3RlZCBmYWlsdXJlIGR1cmluZyBydW4gJWQiLCBpKTsKLSAgICAgIGV4cGVjdGVkX2ZhaWx1cmUgPSBUUlVFOwotICAgICAgZ19mcmVlIChuYW1lKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBnX2ZyZWUgKG5hbWUpOwotICB9Ci0gIE1BSU5fU1RPUF9USFJFQURTICgpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdCk7Ci0KLSAgZmFpbF91bmxlc3MgKGV4cGVjdGVkX2ZhaWx1cmUsICJuYW1lIGRpZCBub3QgZ2V0IGNoYW5nZWQiKTsKLX0KLQotR1NUX0VORF9URVNUOwotI2VuZGlmCi0KLS8qCi0gKiBtYWluIHRocmVhZCBzZXRzIGFuZCBnZXRzIG5hbWUgZGlyZWN0bHkgb24gc3RydWN0IGluc2lkZSB0aGUgb2JqZWN0IGxvY2sKLSAqIHN1Y2NlZWQgYmVjYXVzZSBsb2NrIGlzIGhlbGQgZHVyaW5nIHNldC9nZXQsIGFuZCB0aHJlYWRzIGFyZSBsb2NrZWQgb3V0Ci0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zha2Vfb2JqZWN0X25hbWVfdGhyZWFkZWRfcmlnaHQpCi17Ci0gIEdzdE9iamVjdCAqb2JqZWN0OwotICBnY2hhciAqbmFtZTsKLSAgZ2ludCBpOwotCi0gIGdfbWVzc2FnZSAoIlxuVEVTVDogc2V0L2dldCBpbnNpZGUgbG9jayIpOwotCi0gIG9iamVjdCA9IGdfb2JqZWN0X25ldyAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICgpLCBOVUxMKTsKLSAgZ3N0X29iamVjdF9zZXRfbmFtZSAob2JqZWN0LCAibWFpbiIpOwotCi0gIE1BSU5fU1RBUlRfVEhSRUFEUyAoNSwgdGhyZWFkX25hbWVfb2JqZWN0LCBvYmplY3QpOwotCi0gIC8qIHN0YXJ0IGxvb3BpbmcgYW5kIHNldC9nZXQgbmFtZSByZXBlYXRlZGx5ICovCi0gIGZvciAoaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKG9iamVjdCk7Ci0gICAgZ19mcmVlIChHU1RfT0JKRUNUX05BTUUgKG9iamVjdCkpOwotICAgIEdTVF9PQkpFQ1RfTkFNRSAob2JqZWN0KSA9IGdfc3RyZHVwICgibWFpbiIpOwotICAgIFRIUkVBRF9TV0lUQ0ggKCk7Ci0gICAgbmFtZSA9IGdfc3RyZHVwIChHU1RfT0JKRUNUX05BTUUgKG9iamVjdCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvYmplY3QpOwotCi0gICAgZmFpbF91bmxlc3MgKHN0cmNtcCAobmFtZSwgIm1haW4iKSA9PSAwLAotICAgICAgICAiTmFtZSBnb3QgY2hhbmdlZCB3aGlsZSBsb2NrIGhlbGQgZHVyaW5nIHJ1biAlZCIsIGkpOwotICAgIGdfZnJlZSAobmFtZSk7Ci0gIH0KLSAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLS8qCi0gKiBtYWluIHRocmVhZCBjcmVhdGVzIGxvdHMgb2Ygb2JqZWN0cwotICogY2hpbGQgdGhyZWFkcyBzZXRzIGRlZmF1bHQgbmFtZXMgb24gb2JqZWN0cwotICogdGhlbiBtYWluIHRocmVhZCBjaGVja3MgdW5pcXVlbmVzcyBvZiBvYmplY3QgbmFtZXMKLSAqLwotCi1zdGF0aWMgR0xpc3QgKm9iamVjdF9saXN0ID0gTlVMTDsKLXN0YXRpYyBnaW50IG51bV9vYmplY3RzID0gMTAwMDsKLXN0YXRpYyBnaW50IG51bV90aHJlYWRzID0gNTsKLQotLyogdGhyZWFkIGZ1bmN0aW9uIGZvciB0aHJlYWRlZCBkZWZhdWx0IG5hbWUgY2hhbmdlIHRlc3QgKi8KLXN0YXRpYyBncG9pbnRlcgotdGhyZWFkX25hbWVfb2JqZWN0X2RlZmF1bHQgKGludCAqaSkKLXsKLSAgaW50IGo7Ci0KLSAgVEhSRUFEX1NUQVJUICgpOwotCi0gIGZvciAoaiA9ICppOyBqIDwgbnVtX29iamVjdHM7IGogKz0gbnVtX3RocmVhZHMpIHsKLSAgICBHc3RPYmplY3QgKm8gPSBHU1RfT0JKRUNUIChnX2xpc3RfbnRoX2RhdGEgKG9iamVjdF9saXN0LCBqKSk7Ci0KLSAgICAvKiBnX21lc3NhZ2UgKCJUSFJFQUQgJXA6IHNldHRpbmcgZGVmYXVsdCBuYW1lIG9uIG9iamVjdCAlZCIsCi0gICAgICAgZ190aHJlYWRfc2VsZiAoKSwgaik7ICovCi0gICAgZ3N0X29iamVjdF9zZXRfbmFtZSAobywgTlVMTCk7Ci0gICAgVEhSRUFEX1NXSVRDSCAoKTsKLSAgfQotCi0gIC8qIHRocmVhZCBpcyBkb25lLCBzbyBsZXQncyByZXR1cm4gKi8KLSAgZ19tZXNzYWdlICgiVEhSRUFEICVwOiBzZXQgbmFtZSIsIGdfdGhyZWFkX3NlbGYgKCkpOwotICBnX2ZyZWUgKGkpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X29iamVjdF9uYW1lX2NvbXBhcmUgKEdzdE9iamVjdCAqIG8sIEdzdE9iamVjdCAqIHApCi17Ci0gIGdpbnQgcmVzdWx0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAobyk7Ci0gIEdTVF9PQkpFQ1RfTE9DSyAocCk7Ci0KLSAgaWYgKG8tPm5hbWUgPT0gTlVMTCAmJiBwLT5uYW1lID09IE5VTEwpIHsKLSAgICByZXN1bHQgPSAwOwotICB9IGVsc2UgaWYgKG8tPm5hbWUgPT0gTlVMTCkgewotICAgIHJlc3VsdCA9IC0xOwotICB9IGVsc2UgaWYgKHAtPm5hbWUgPT0gTlVMTCkgewotICAgIHJlc3VsdCA9IDE7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0ID0gc3RyY21wIChvLT5uYW1lLCBwLT5uYW1lKTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG8pOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zha2Vfb2JqZWN0X25hbWVfdGhyZWFkZWRfdW5pcXVlKQotewotICBHc3RPYmplY3QgKm9iamVjdDsKLSAgZ2ludCBpOwotICBnaW50ICppcDsKLSAgZ2NoYXIgKm5hbWUxLCAqbmFtZTI7Ci0gIEdMaXN0ICpsOwotCi0gIGdfbWVzc2FnZSAoIlxuVEVTVDogdW5pcXVlbmVzcyBvZiBkZWZhdWx0IG5hbWVzIik7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9vYmplY3RzOyArK2kpIHsKLSAgICBvYmplY3QgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gICAgb2JqZWN0X2xpc3QgPSBnX2xpc3RfYXBwZW5kIChvYmplY3RfbGlzdCwgb2JqZWN0KTsKLSAgfQotCi0gIE1BSU5fSU5JVCAoKTsKLQotICBtYXJrX3BvaW50ICgpOwotICBmb3IgKGkgPSAwOyBpIDwgbnVtX3RocmVhZHM7ICsraSkgewotICAgIGlwID0gZ19uZXcgKGdpbnQsIDEpOwotICAgICppcCA9IGk7Ci0gICAgTUFJTl9TVEFSVF9USFJFQURfRlVOQ1RJT04gKGksIHRocmVhZF9uYW1lX29iamVjdF9kZWZhdWx0LCBpcCk7Ci0gIH0KLQotICBtYXJrX3BvaW50ICgpOwotICBNQUlOX1NZTkNIUk9OSVpFICgpOwotICBtYXJrX3BvaW50ICgpOwotICBNQUlOX1NUT1BfVEhSRUFEUyAoKTsKLQotICAvKiBzb3J0IEdMaXN0IGJhc2VkIG9uIG9iamVjdCBuYW1lICovCi0gIC8qIEZJWE1FOiBzb3J0IGFuZCB0ZXN0ICovCi0gIG9iamVjdF9saXN0ID0KLSAgICAgIGdfbGlzdF9zb3J0IChvYmplY3RfbGlzdCwgKEdDb21wYXJlRnVuYykgZ3N0X29iamVjdF9uYW1lX2NvbXBhcmUpOwotCi0gIG5hbWUxID0gZ3N0X29iamVjdF9nZXRfbmFtZSAoR1NUX09CSkVDVCAob2JqZWN0X2xpc3QtPmRhdGEpKTsKLSAgZm9yIChsID0gb2JqZWN0X2xpc3QtPm5leHQ7IGwtPm5leHQ7IGwgPSBsLT5uZXh0KSB7Ci0gICAgZ19tZXNzYWdlICgib2JqZWN0IHdpdGggbmFtZSAlcyIsIG5hbWUxKTsKLSAgICBuYW1lMiA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1QgKGwtPmRhdGEpKTsKLSAgICBmYWlsX2lmIChzdHJjbXAgKG5hbWUxLCBuYW1lMikgPT0gMCwgIlR3byBvYmplY3RzIHdpdGggbmFtZSAlcyIsIG5hbWUyKTsKLSAgICBnX2ZyZWUgKG5hbWUxKTsKLSAgICBuYW1lMSA9IG5hbWUyOwotICB9Ci0gIGdfZnJlZSAobmFtZTEpOwotCi0gIC8qIGZyZWUgc3R1ZmYgKi8KLSAgZ19saXN0X2ZvcmVhY2ggKG9iamVjdF9saXN0LCAoR0Z1bmMpIGdfb2JqZWN0X3VucmVmLCBOVUxMKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBwYXJlbnRhZ2UgdGVzdCBvbiBHc3RGYWtlT2JqZWN0ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9wYXJlbnRhZ2UpCi17Ci0gIEdzdE9iamVjdCAqb2JqZWN0MSwgKm9iamVjdDI7Ci0gIEdzdE9iamVjdCAqcGFyZW50OwotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgLyogY3JlYXRlIG5ldyBvYmplY3QgKi8KLSAgb2JqZWN0MSA9IGdfb2JqZWN0X25ldyAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICgpLCBOVUxMKTsKLSAgZmFpbF9pZiAob2JqZWN0MSA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RGYWtlT2JqZWN0Iik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfT0JKRUNUIChvYmplY3QxKSwKLSAgICAgICJHc3RGYWtlT2JqZWN0IGluc3RhbmNlIGlzIG5vdCBhIEdzdE9iamVjdCIpOwotICBmYWlsX3VubGVzcyAoZ19vYmplY3RfaXNfZmxvYXRpbmcgKG9iamVjdDEpLAotICAgICAgIkdzdEZha2VPYmplY3QgaW5zdGFuY2UgaXMgbm90IGZsb2F0aW5nIik7Ci0KLSAgLyogY2hlY2sgdGhlIHBhcmVudCAqLwotICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKG9iamVjdDEpOwotICBmYWlsX2lmIChwYXJlbnQgIT0gTlVMTCwgIkdzdEZha2VPYmplY3QgaGFzIHBhcmVudCIpOwotICAvKiB0cnkgdG8gc2V0IGEgTlVMTCBwYXJlbnQsIHRoaXMgc2hvdWxkIGdpdmUgYSB3YXJuaW5nICovCi0gIEFTU0VSVF9DUklUSUNBTCAocmVzdWx0ID0gZ3N0X29iamVjdF9zZXRfcGFyZW50IChvYmplY3QxLCBOVUxMKSk7Ci0gIGZhaWxfaWYgKHJlc3VsdCwgIkdzdEZha2VPYmplY3QgYWNjZXB0ZWQgTlVMTCBwYXJlbnQiKTsKLSAgLyogdHJ5IHRvIHNldCBpdHNlbGYgYXMgcGFyZW50LCB3ZSBleHBlY3QgYSB3YXJuaW5nIGhlcmUgKi8KLSAgQVNTRVJUX0NSSVRJQ0FMIChyZXN1bHQgPSBnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKG9iamVjdDEsIG9iamVjdDEpKTsKLSAgZmFpbF9pZiAocmVzdWx0LCAiR3N0RmFrZU9iamVjdCBhY2NlcHRlZCBpdHNlbGYgYXMgcGFyZW50Iik7Ci0KLSAgLyogX2hhc19wYXJlbnQgYWx3YXlzIHJldHVybnMgRkFMU0UgaWYgdGhlcmUgaXMgbm8gcGFyZW50ICovCi0gIGZhaWxfaWYgKGdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAob2JqZWN0MSwgTlVMTCkpOwotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKE5VTEwsIG9iamVjdDEpKTsKLSAgZmFpbF9pZiAoZ3N0X29iamVjdF9oYXNfYXNfcGFyZW50IChvYmplY3QxLCBvYmplY3QxKSk7Ci0KLSAgLyogc2hvdWxkIHN0aWxsIGJlIGZsb2F0aW5nICovCi0gIGZhaWxfdW5sZXNzIChnX29iamVjdF9pc19mbG9hdGluZyAob2JqZWN0MSksCi0gICAgICAiR3N0RmFrZU9iamVjdCBpbnN0YW5jZSBpcyBub3QgZmxvYXRpbmciKTsKLQotICAvKiBjcmVhdGUgYW5vdGhlciBvYmplY3QgKi8KLSAgb2JqZWN0MiA9IGdfb2JqZWN0X25ldyAoZ3N0X2Zha2Vfb2JqZWN0X2dldF90eXBlICgpLCBOVUxMKTsKLSAgZmFpbF9pZiAob2JqZWN0MiA9PSBOVUxMLAotICAgICAgIkZhaWxlZCB0byBjcmVhdGUgYW5vdGhlciBpbnN0YW5jZSBvZiBHc3RGYWtlT2JqZWN0Iik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfT0JKRUNUIChvYmplY3QyKSwKLSAgICAgICJzZWNvbmQgR3N0RmFrZU9iamVjdCBpbnN0YW5jZSBpcyBub3QgYSBHc3RPYmplY3QiKTsKLSAgZmFpbF91bmxlc3MgKGdfb2JqZWN0X2lzX2Zsb2F0aW5nIChvYmplY3QxKSwKLSAgICAgICJHc3RGYWtlT2JqZWN0IGluc3RhbmNlIGlzIG5vdCBmbG9hdGluZyIpOwotCi0gIHJlc3VsdCA9IGdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAob2JqZWN0MSwgb2JqZWN0Mik7Ci0gIGZhaWxfaWYgKHJlc3VsdCwgIkdzdEZha2VPYmplY3QgaGFzIGEgcGFyZW50Iik7Ci0KLSAgLyogdHJ5IHRvIHNldCBvdGhlciBvYmplY3QgYXMgcGFyZW50ICovCi0gIHJlc3VsdCA9IGdzdF9vYmplY3Rfc2V0X3BhcmVudCAob2JqZWN0MSwgb2JqZWN0Mik7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQsICJHc3RGYWtlT2JqZWN0IGNvdWxkIG5vdCBhY2NlcHQgb3RoZXIgb2JqZWN0IGFzIHBhcmVudCIpOwotCi0gIC8qIHNob3VsZCBub3QgYmUgZmxvYXRpbmcgYW55bW9yZSAqLwotICBmYWlsX2lmIChnX29iamVjdF9pc19mbG9hdGluZyAob2JqZWN0MSksCi0gICAgICAiR3N0RmFrZU9iamVjdCBpbnN0YW5jZSBpcyBzdGlsbCBmbG9hdGluZyIpOwotICAvKiBwYXJlbnQgc2hvdWxkIHN0aWxsIGJlIGZsb2F0aW5nICovCi0gIGZhaWxfdW5sZXNzIChnX29iamVjdF9pc19mbG9hdGluZyAob2JqZWN0MiksCi0gICAgICAiR3N0RmFrZU9iamVjdCBpbnN0YW5jZSBpcyBub3QgZmxvYXRpbmciKTsKLQotICAvKiBjaGVjayB0aGUgcGFyZW50ICovCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDEsIG9iamVjdDIpKTsKLQotICAvKiBhbnkgb3RoZXIgY29tYmluYXRpb24gaXMgaW52YWxpZCAqLwotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDIsIG9iamVjdDEpKTsKLSAgZmFpbF9pZiAoZ3N0X29iamVjdF9oYXNfYXNfcGFyZW50IChvYmplY3QxLCBOVUxMKSk7Ci0gIGZhaWxfaWYgKGdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAob2JqZWN0MiwgTlVMTCkpOwotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKE5VTEwsIG9iamVjdDEpKTsKLSAgZmFpbF9pZiAoZ3N0X29iamVjdF9oYXNfYXNfcGFyZW50IChOVUxMLCBvYmplY3QyKSk7Ci0gIGZhaWxfaWYgKGdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAob2JqZWN0MSwgb2JqZWN0MSkpOwotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDIsIG9iamVjdDIpKTsKLQotICAvKiB0cnkgdG8gc2V0IG90aGVyIG9iamVjdCBhcyBwYXJlbnQgYWdhaW4gKi8KLSAgcmVzdWx0ID0gZ3N0X29iamVjdF9zZXRfcGFyZW50IChvYmplY3QxLCBvYmplY3QyKTsKLSAgZmFpbF9pZiAocmVzdWx0LCAiR3N0RmFrZU9iamVjdCBjb3VsZCBzZXQgcGFyZW50IHR3aWNlIik7Ci0KLSAgLyogcmVmIGJlZm9yZSB1bnBhcmVudGluZyAqLwotICBnc3Rfb2JqZWN0X3JlZiAob2JqZWN0MSk7Ci0gIC8qIGNsZWFyIHBhcmVudCBvZiBvYmplY3QgKi8KLSAgZ3N0X29iamVjdF91bnBhcmVudCAob2JqZWN0MSk7Ci0KLSAgLyogY2hlY2sgdGhlIHBhcmVudCAqLwotICBwYXJlbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKG9iamVjdDEpOwotICBmYWlsX2lmIChwYXJlbnQgIT0gTlVMTCwgIkdzdEZha2VPYmplY3QgaGFzIHBhcmVudCIpOwotCi0gIC8qIG9iamVjdCBzaG91bGQgbm90IGJlIGZsb2F0aW5nICovCi0gIGZhaWxfaWYgKGdfb2JqZWN0X2lzX2Zsb2F0aW5nIChvYmplY3QxKSwKLSAgICAgICJHc3RGYWtlT2JqZWN0IGluc3RhbmNlIGlzIGZsb2F0aW5nIGFnYWluIik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAob2JqZWN0MSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKG9iamVjdDIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHBhcmVudGFnZSB0ZXN0IGRpc3Bvc2Ugb24gR3N0RmFrZU9iamVjdCwgc2luY2Ugb3VyIHRlc3RjYXNlCi0gKiBkb2VzIG5vdCBoYW5kbGUgdGhlIHBhcmVudCByZWxhdGlvbiBjb21wbGV0ZWx5LCB0aGUgcGFyZW50IGRvZXMKLSAqIG5vdCBob2xkIGEgcmVmIHRvIHRoZSBjaGlsZCwgd2UgY2Fubm90IGRpc3Bvc2UgdGhlIHBhcmVudCB0bwotICogZGlwb3NlIHRoZSBjaGlsZCBhcyB3ZWxsLiBUaGlzIHRlc3QgbmVlZHMgdG8gYmUgcnVuIHdpdGggREVCVUcKLSAqIGluZm8gdG8gY2hlY2sgaWYgdGhlIGZpbmFsaXplIG1ldGhvZHMgYXJlIGNhbGxlZCBjb3JyZWN0bHkuICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9wYXJlbnRhZ2VfZGlzcG9zZSkKLXsKLSAgR3N0T2JqZWN0ICpvYmplY3QxLCAqb2JqZWN0MjsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIG9iamVjdDEgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGZhaWxfaWYgKG9iamVjdDEgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOwotCi0gIG9iamVjdDIgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGZhaWxfaWYgKG9iamVjdDIgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOwotCi0gIC8qIHRyeSB0byBzZXQgb3RoZXIgb2JqZWN0IGFzIHBhcmVudCAqLwotICByZXN1bHQgPSBnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKG9iamVjdDEsIG9iamVjdDIpOwotICBmYWlsX3VubGVzcyAocmVzdWx0LCAiR3N0RmFrZU9iamVjdCBjb3VsZCBub3QgYWNjZXB0IG90aGVyIG9iamVjdCBhcyBwYXJlbnQiKTsKLQotICAvKiBjbGVhciBwYXJlbnQgb2Ygb2JqZWN0ICovCi0gIGdzdF9vYmplY3RfdW5wYXJlbnQgKG9iamVjdDEpOwotCi0gIC8qIG5vdyBkaXNwb3NlIHBhcmVudCAqLwotICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3QyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mYWtlX29iamVjdF9oYXNfYXNfYW5jZXN0b3IpCi17Ci0gIEdzdE9iamVjdCAqb2JqZWN0MSwgKm9iamVjdDIsICpvYmplY3QzLCAqb2JqZWN0NDsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIG9iamVjdDEgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGZhaWxfaWYgKG9iamVjdDEgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOwotCi0gIG9iamVjdDIgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGZhaWxfaWYgKG9iamVjdDIgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOwotCi0gIG9iamVjdDMgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGZhaWxfaWYgKG9iamVjdDMgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOwotCi0gIG9iamVjdDQgPSBnX29iamVjdF9uZXcgKGdzdF9mYWtlX29iamVjdF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0gIGZhaWxfaWYgKG9iamVjdDQgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0RmFrZU9iamVjdCIpOwotCi0gIC8qIHRyeSB0byBzZXQgb3RoZXIgb2JqZWN0IGFzIHBhcmVudCAqLwotICByZXN1bHQgPSBnc3Rfb2JqZWN0X3NldF9wYXJlbnQgKG9iamVjdDEsIG9iamVjdDMpOwotICBmYWlsX3VubGVzcyAocmVzdWx0LCAiR3N0RmFrZU9iamVjdCBjb3VsZCBub3QgYWNjZXB0IG90aGVyIG9iamVjdCBhcyBwYXJlbnQiKTsKLSAgcmVzdWx0ID0gZ3N0X29iamVjdF9zZXRfcGFyZW50IChvYmplY3QyLCBvYmplY3QzKTsKLSAgZmFpbF91bmxlc3MgKHJlc3VsdCwgIkdzdEZha2VPYmplY3QgY291bGQgbm90IGFjY2VwdCBvdGhlciBvYmplY3QgYXMgcGFyZW50Iik7Ci0gIHJlc3VsdCA9IGdzdF9vYmplY3Rfc2V0X3BhcmVudCAob2JqZWN0Mywgb2JqZWN0NCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQsICJHc3RGYWtlT2JqZWN0IGNvdWxkIG5vdCBhY2NlcHQgb3RoZXIgb2JqZWN0IGFzIHBhcmVudCIpOwotCi0gIC8qIEhpZXJhcmNoeToKLSAgICogIG9iamVjdDQKLSAgICogICBgLSBvYmplY3QzCi0gICAqICAgICAgIHwtIG9iamVjdDIKLSAgICogICAgICAgYC0gb2JqZWN0MQotICAgKi8KLQotICAvKiBBbiBvYmplY3QgaXNuJ3QgaXRzIG93biBwYXJlbnQsIGJ1dCBpdCBpcyBpdHMgb3duIGFuY2VzdG9yICovCi0gIGZhaWxfaWYgKGdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAob2JqZWN0MSwgb2JqZWN0MSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IgKG9iamVjdDEsIG9iamVjdDEpKTsKLQotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDQsIG9iamVjdDQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9yIChvYmplY3Q0LCBvYmplY3Q0KSk7Ci0KLSAgLyogZGlyZWN0IHBhcmVudHMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAob2JqZWN0MSwgb2JqZWN0MykpOwotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IgKG9iamVjdDEsIG9iamVjdDMpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9oYXNfYXNfcGFyZW50IChvYmplY3QyLCBvYmplY3QzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2hhc19hc19hbmNlc3RvciAob2JqZWN0Miwgb2JqZWN0MykpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDMsIG9iamVjdDQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9yIChvYmplY3QzLCBvYmplY3Q0KSk7Ci0KLSAgLyogZ3JhbmRwYXJlbnRzICovCi0gIGZhaWxfaWYgKGdzdF9vYmplY3RfaGFzX2FzX3BhcmVudCAob2JqZWN0MSwgb2JqZWN0NCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IgKG9iamVjdDEsIG9iamVjdDQpKTsKLQotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDIsIG9iamVjdDQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfaGFzX2FzX2FuY2VzdG9yIChvYmplY3QyLCBvYmplY3Q0KSk7Ci0KLSAgLyogbm90IGFuY2VzdG9ycyAqLwotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDEsIG9iamVjdDIpKTsKLSAgZmFpbF9pZiAoZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IgKG9iamVjdDEsIG9iamVjdDIpKTsKLQotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDMsIG9iamVjdDEpKTsKLSAgZmFpbF9pZiAoZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IgKG9iamVjdDMsIG9iamVjdDEpKTsKLQotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDQsIG9iamVjdDEpKTsKLSAgZmFpbF9pZiAoZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IgKG9iamVjdDQsIG9iamVjdDEpKTsKLQotICBmYWlsX2lmIChnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQgKG9iamVjdDQsIG9iamVjdDMpKTsKLSAgZmFpbF9pZiAoZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IgKG9iamVjdDQsIG9iamVjdDMpKTsKLQotICAvKiB1bnBhcmVudCBldmVyeXRoaW5nICovCi0gIGdzdF9vYmplY3RfdW5wYXJlbnQgKG9iamVjdDMpOwotICBnc3Rfb2JqZWN0X3VucGFyZW50IChvYmplY3QyKTsKLSAgZ3N0X29iamVjdF91bnBhcmVudCAob2JqZWN0MSk7Ci0KLSAgLyogbm93IGRpc3Bvc2Ugb2JqZWN0cyAqLwotICBnc3Rfb2JqZWN0X3VucmVmIChvYmplY3Q0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0OiB0cnkgcmVuYW1pbmcgYSBwYXJlbnRlZCBvYmplY3QsIG1ha2Ugc3VyZSBpdCBmYWlscyAqLwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X29iamVjdF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RPYmplY3QiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIC8qIHR1cm4gb2ZmIHRpbWVvdXQgKi8KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCA2MCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX29iamVjdF9uZXcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3RfaW5pdGlhbF9uYW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Zha2Vfb2JqZWN0X3Jlc2V0X25hbWUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3Rfc2V0X25hbWVfdmlhX3Byb3BlcnR5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Zha2Vfb2JqZWN0X2dldF9uYW1lX3JldHVybnNfY29weSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX29iamVjdF9zZXRfbmFtZV93aGVuX3BhcmVudGVkKTsKLSNpZiAwCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX29iamVjdF9uYW1lX3RocmVhZGVkX3dyb25nKTsKLSNlbmRpZgotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3RfbmFtZV90aHJlYWRlZF9yaWdodCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX29iamVjdF9uYW1lX3RocmVhZGVkX3VuaXF1ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX29iamVjdF9wYXJlbnRhZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFrZV9vYmplY3RfcGFyZW50YWdlX2Rpc3Bvc2UpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mYWtlX29iamVjdF9oYXNfYXNfYW5jZXN0b3IpOwotICAvL3RjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKHRjX2NoYWluLCBzZXR1cCwgdGVhcmRvd24pOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X29iamVjdCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cGFkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDk4YzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdHBhZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI3NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBnc3RwYWQuYzogVW5pdCB0ZXN0IGZvciBHc3RQYWQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0YXRpYyBHc3RTZWdtZW50IGR1bW15X3NlZ21lbnQ7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xpbmspCi17Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLSAgR3N0UGFkVGVtcGxhdGUgKnNyY3Q7Ci0KLSAgR3N0UGFkTGlua1JldHVybiByZXQ7Ci0gIGdjaGFyICpuYW1lOwotCi0gIHNyYyA9IGdzdF9wYWRfbmV3ICgic291cmNlIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNvdXJjZSBwYWQiLCAxKTsKLQotICBuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAoc3JjKTsKLSAgZmFpbF91bmxlc3MgKHN0cmNtcCAobmFtZSwgInNvdXJjZSIpID09IDApOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzb3VyY2UgcGFkIiwgMSk7Ci0gIGdfZnJlZSAobmFtZSk7Ci0KLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7Ci0KLSAgLyogbGlua2luZyB3aXRob3V0IHRlbXBsYXRlcyBvciBjYXBzIHNob3VsZCB3b3JrICovCi0gIHJldCA9IGdzdF9wYWRfbGluayAoc3JjLCBzaW5rKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic291cmNlIHBhZCIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayBwYWQiLCAxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfUEFEX0xJTktfT0spOwotCi0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlIChOVUxMKSk7Ci0KLSAgc3JjdCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZSAoc3JjKTsKLSAgZmFpbF91bmxlc3MgKHNyY3QgPT0gTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNvdXJjZSBwYWQiLCAxKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzb3VyY2UgcGFkIiwgMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRocmVhZGVkIGxpbmsvdW5saW5rICovCi0vKiB1c2UgZ2xvYmFscyAqLwotc3RhdGljIEdzdFBhZCAqc3JjLCAqc2luazsKLQotc3RhdGljIHZvaWQKLXRocmVhZF9saW5rX3VubGluayAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgVEhSRUFEX1NUQVJUICgpOwotCi0gIHdoaWxlIChUSFJFQURfVEVTVF9SVU5OSU5HICgpKSB7Ci0gICAgZ3N0X3BhZF9saW5rIChzcmMsIHNpbmspOwotICAgIGdzdF9wYWRfdW5saW5rIChzcmMsIHNpbmspOwotICAgIFRIUkVBRF9TV0lUQ0ggKCk7Ci0gIH0KLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGlua191bmxpbmtfdGhyZWFkZWQpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGludCBpOwotCi0gIHNyYyA9IGdzdF9wYWRfbmV3ICgic291cmNlIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7Ci0gIHNpbmsgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIiKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIFRSVUUpOwotICBnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOwotICBnc3RfcGFkX3NldF9jYXBzIChzaW5rLCBjYXBzKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMyk7Ci0KLSAgTUFJTl9TVEFSVF9USFJFQURTICg1LCB0aHJlYWRfbGlua191bmxpbmssIE5VTEwpOwotICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0gICAgZ3N0X3BhZF9pc19saW5rZWQgKHNyYyk7Ci0gICAgZ3N0X3BhZF9pc19saW5rZWQgKHNpbmspOwotICAgIFRIUkVBRF9TV0lUQ0ggKCk7Ci0gIH0KLSAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7Ci0KLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVmY291bnQpCi17Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0UGFkTGlua1JldHVybiBwbHI7Ci0KLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfaWYgKHNyYyA9PSBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyIik7Ci0gIC8qIG9uZSBmb3IgbWUgKi8KLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMSk7Ci0KLSAgLyogY2FuJ3Qgc2V0IGNhcHMgb24gZmx1c2hpbmcgc2lua3BhZCAqLwotICBmYWlsX2lmIChnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpID09IFRSVUUpOwotICBmYWlsX2lmIChnc3RfcGFkX3NldF9jYXBzIChzaW5rLCBjYXBzKSA9PSBUUlVFKTsKLSAgLyogb25lIGZvciBtZSBhbmQgb25lIGZvciBlYWNoIHNldF9jYXBzICovCi0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDEpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHNyYywgY2FwcykgPT0gVFJVRSk7Ci0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChzaW5rLCBjYXBzKSA9PSBUUlVFKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMyk7Ci0KLSAgcGxyID0gZ3N0X3BhZF9saW5rIChzcmMsIHNpbmspOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwgKHBscikpOwotICAvKiBzcmMgY2FwcyBhZGRlZCB0byBwZW5kaW5nIGNhcHMgb24gc2luayAqLwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAzKTsKLQotICBnc3RfcGFkX3VubGluayAoc3JjLCBzaW5rKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMyk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dldF9hbGxvd2VkX2NhcHMpCi17Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLSAgR3N0Q2FwcyAqY2FwcywgKmdvdGNhcHM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RQYWRMaW5rUmV0dXJuIHBscjsKLQotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoTlVMTCkpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoKEdzdFBhZCAqKSBidWZmZXIpKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBzcmMgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwpOwotICBjYXBzID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChzcmMpOwotICBmYWlsX3VubGVzcyAoY2FwcyA9PSBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyIik7Ci0KLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgLyogc291cmNlIHBhZCBpcyBhY3RpdmUgYW5kIHdpbGwgYWNjZXB0IHRoZSBjYXBzIGV2ZW50ICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpID09IFRSVUUpOwotICAvKiBzaW5rIHBhZCBpcyBub3QgYWN0aXZlIGFuZCB3aWxsIHJlZnVzZSB0aGUgY2FwcyBldmVudCAqLwotICBmYWlsX2lmIChnc3RfcGFkX3NldF9jYXBzIChzaW5rLCBjYXBzKSA9PSBUUlVFKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLSAgLyogc2luayBwYWQgaXMgbm93IGFjdGl2ZSBhbmQgd2lsbCBhY2NlcHQgdGhlIGNhcHMgZXZlbnQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHNpbmssIGNhcHMpID09IFRSVUUpOwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAzKTsKLQotICBwbHIgPSBnc3RfcGFkX2xpbmsgKHNyYywgc2luayk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAocGxyKSk7Ci0KLSAgZ290Y2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoc3JjKTsKLSAgZmFpbF9pZiAoZ290Y2FwcyA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChnb3RjYXBzLCBjYXBzKSk7Ci0KLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGdvdGNhcHMsICJnb3RjYXBzIiwgNCk7Ci0gIGdzdF9jYXBzX3VucmVmIChnb3RjYXBzKTsKLQotICBnc3RfcGFkX3VubGluayAoc3JjLCBzaW5rKTsKLQotICAvKiBjbGVhbnVwICovCi0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDMpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmMsICJzcmMiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2luaywgInNpbmsiLCAxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLQotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RDYXBzICpldmVudF9jYXBzID0gTlVMTDsKLQotc3RhdGljIGdib29sZWFuCi1zdGlja3lfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RDYXBzICpjYXBzOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9DQVBTCi0gICAgICB8fCBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQKLSAgICAgIHx8IEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NFR01FTlQpOwotCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpICE9IEdTVF9FVkVOVF9DQVBTKSB7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBFbnN1cmUgd2UgZ2V0IGhlcmUganVzdCBvbmNlOiAqLwotICBmYWlsX3VubGVzcyAoZXZlbnRfY2FwcyA9PSBOVUxMKTsKLQotICAvKiBUaGUgZXZlbnQgbXVzdCBhcnJpdmUgYmVmb3JlIGFueSBidWZmZXI6ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAwKTsKLQotICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgZXZlbnRfY2FwcyA9IGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIFRlc3RzIHdoZXRoZXIgY2FwcyBnZXQgcHJvcGVybHkgZm9yd2FyZGVkIHdoZW4gcGFkcwotICAgYXJlIGluaXRpYWxseSB1bmxpbmtlZCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RpY2t5X2NhcHNfdW5saW5rZWQpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFBhZFRlbXBsYXRlICpzcmNfdGVtcGxhdGUsICpzaW5rX3RlbXBsYXRlOwotICBHc3RQYWQgKnNyYywgKnNpbms7Ci0gIEdzdEV2ZW50ICpldmVudDsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyLCBkdW1teT0oaW50KXsxLCAyfSIpOwotICBzcmNfdGVtcGxhdGUgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNyYyIsIEdTVF9QQURfU1JDLAotICAgICAgR1NUX1BBRF9BTFdBWVMsIGNhcHMpOwotICBzaW5rX3RlbXBsYXRlID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LLAotICAgICAgR1NUX1BBRF9BTFdBWVMsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgc3JjID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoc3JjX3RlbXBsYXRlLCAic3JjIik7Ci0gIGZhaWxfaWYgKHNyYyA9PSBOVUxMKTsKLSAgc2luayA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHNpbmtfdGVtcGxhdGUsICJzaW5rIik7Ci0gIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rLCBzdGlja3lfZXZlbnQpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2luaywgZ3N0X2NoZWNrX2NoYWluX2Z1bmMpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY190ZW1wbGF0ZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpID09IFRSVUUpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIsIGR1bW15PShpbnQpMSIpOwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAxKTsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfY2FwcyAoY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywgZXZlbnQpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZXZlbnRfY2FwcyA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZHVtbXlfc2VnbWVudCkpID09IFRSVUUpOwotCi0gIC8qIExpbmtpbmcgYW5kIGFjdGl2YXRpbmcgd2lsbCBub3QgZm9yd2FyZCB0aGUgc3RpY2t5IGV2ZW50IHlldC4uLiAqLwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwgKGdzdF9wYWRfbGluayAoc3JjLCBzaW5rKSkpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOwotICBmYWlsX3VubGVzcyAoZXZlbnRfY2FwcyA9PSBOVUxMKTsKLQotICAvKiAuLi5idXQgdGhlIGZpcnN0IGJ1ZmZlciB3aWxsOiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChldmVudF9jYXBzID09IGNhcHMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmY2FwcywgTlVMTCk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZldmVudF9jYXBzLCBOVUxMKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotY2hlY2tfaWZfY2Fwc19pc19hY2NlcHRlZCAoR3N0UGFkICogc2luaywgY29uc3QgZ2NoYXIgKiBzdHIpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdib29sZWFuIHJldDsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKHN0cik7Ci0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDEpOwotICByZXQgPSBnc3RfcGFkX3F1ZXJ5X2FjY2VwdF9jYXBzIChzaW5rLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2lua19xdWVyeV9jYXBzIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIG9iamVjdCwgR3N0UXVlcnkgKiBxKQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGNhcHMgPQotICAgICAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciwgZHVtbXk9KGludCkxLCIKLSAgICAgICAgICAiIHF1ZXJ5LW9ubHktZmllbGQ9KGludCkxIik7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxLCBjYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIG9iamVjdCwgcSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIFRlc3RzIHdoZXRoZXIgYWNjZXB0Y2FwcyBkZWZhdWx0IGhhbmRsZXIgd29ya3MgcHJvcGVybHkKLSAgIHdpdGggYWxsIDQgcG9zc2libGUgZmxhZyBjb21iaW5hdGlvbnMgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RlZmF1bHRfYWNjZXB0X2NhcHMpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFBhZFRlbXBsYXRlICpzaW5rX3RlbXBsYXRlOwotICBHc3RQYWQgKnNpbms7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciwgZHVtbXk9KGludCl7MSwgMn0iKTsKLSAgc2lua190ZW1wbGF0ZSA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHNpbmsgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzaW5rX3RlbXBsYXRlLCAic2luayIpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc2luaywgc2lua19xdWVyeV9jYXBzKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOwotCi0gIC8qIDEuIENoZWNrIHdpdGggY2FwcyBxdWVyeSwgc3Vic2V0IGNoZWNrICovCi0gIEdTVF9QQURfVU5TRVRfQUNDRVBUX0lOVEVSU0VDVCAoc2luayk7Ci0gIEdTVF9QQURfVU5TRVRfQUNDRVBUX1RFTVBMQVRFIChzaW5rKTsKLSAgZmFpbF91bmxlc3MgKGNoZWNrX2lmX2NhcHNfaXNfYWNjZXB0ZWQgKHNpbmssICJmb28vYmFyLCBkdW1teT0oaW50KTEiKSk7Ci0gIGZhaWxfaWYgKGNoZWNrX2lmX2NhcHNfaXNfYWNjZXB0ZWQgKHNpbmssICJmb28vYmFyLCBkdW1teT0oaW50KTMiKSk7Ci0gIGZhaWxfdW5sZXNzIChjaGVja19pZl9jYXBzX2lzX2FjY2VwdGVkIChzaW5rLAotICAgICAgICAgICJmb28vYmFyLCBkdW1teT0oaW50KTEsIHF1ZXJ5LW9ubHktZmllbGQ9KGludCkxIikpOwotICBmYWlsX2lmIChjaGVja19pZl9jYXBzX2lzX2FjY2VwdGVkIChzaW5rLCAiZm9vL2JhciwgZXh0cmEtZmllbGQ9KGludCkxIikpOwotCi0gIC8qIDIuIENoZWNrIHdpdGggY2FwcyBxdWVyeSwgaW50ZXJzZWN0IGNoZWNrICovCi0gIEdTVF9QQURfU0VUX0FDQ0VQVF9JTlRFUlNFQ1QgKHNpbmspOwotICBHU1RfUEFEX1VOU0VUX0FDQ0VQVF9URU1QTEFURSAoc2luayk7Ci0gIGZhaWxfdW5sZXNzIChjaGVja19pZl9jYXBzX2lzX2FjY2VwdGVkIChzaW5rLCAiZm9vL2JhciwgZHVtbXk9KGludCkxIikpOwotICBmYWlsX2lmIChjaGVja19pZl9jYXBzX2lzX2FjY2VwdGVkIChzaW5rLCAiZm9vL2JhciwgZHVtbXk9KGludCkzIikpOwotICBmYWlsX3VubGVzcyAoY2hlY2tfaWZfY2Fwc19pc19hY2NlcHRlZCAoc2luaywKLSAgICAgICAgICAiZm9vL2JhciwgZHVtbXk9KGludCkxLCBxdWVyeS1vbmx5LWZpZWxkPShpbnQpMSIpKTsKLSAgZmFpbF91bmxlc3MgKGNoZWNrX2lmX2NhcHNfaXNfYWNjZXB0ZWQgKHNpbmssICJmb28vYmFyLCBleHRyYS1maWVsZD0oaW50KTEiKSk7Ci0KLSAgLyogMy4gQ2hlY2sgd2l0aCB0ZW1wbGF0ZSBjYXBzLCBzdWJzZXQgY2hlY2sgKi8KLSAgR1NUX1BBRF9VTlNFVF9BQ0NFUFRfSU5URVJTRUNUIChzaW5rKTsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChzaW5rKTsKLSAgZmFpbF91bmxlc3MgKGNoZWNrX2lmX2NhcHNfaXNfYWNjZXB0ZWQgKHNpbmssICJmb28vYmFyLCBkdW1teT0oaW50KTEiKSk7Ci0gIGZhaWxfaWYgKGNoZWNrX2lmX2NhcHNfaXNfYWNjZXB0ZWQgKHNpbmssICJmb28vYmFyLCBkdW1teT0oaW50KTMiKSk7Ci0gIGZhaWxfdW5sZXNzIChjaGVja19pZl9jYXBzX2lzX2FjY2VwdGVkIChzaW5rLAotICAgICAgICAgICJmb28vYmFyLCBkdW1teT0oaW50KTEsIHF1ZXJ5LW9ubHktZmllbGQ9KGludCkxIikpOwotICBmYWlsX2lmIChjaGVja19pZl9jYXBzX2lzX2FjY2VwdGVkIChzaW5rLCAiZm9vL2JhciwgZXh0cmEtZmllbGQ9KGludCkxIikpOwotCi0gIC8qIDMuIENoZWNrIHdpdGggdGVtcGxhdGUgY2FwcywgaW50ZXJzZWN0IGNoZWNrICovCi0gIEdTVF9QQURfU0VUX0FDQ0VQVF9JTlRFUlNFQ1QgKHNpbmspOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUgKHNpbmspOwotICBmYWlsX3VubGVzcyAoY2hlY2tfaWZfY2Fwc19pc19hY2NlcHRlZCAoc2luaywgImZvby9iYXIsIGR1bW15PShpbnQpMSIpKTsKLSAgZmFpbF9pZiAoY2hlY2tfaWZfY2Fwc19pc19hY2NlcHRlZCAoc2luaywgImZvby9iYXIsIGR1bW15PShpbnQpMyIpKTsKLSAgZmFpbF91bmxlc3MgKGNoZWNrX2lmX2NhcHNfaXNfYWNjZXB0ZWQgKHNpbmssCi0gICAgICAgICAgImZvby9iYXIsIGR1bW15PShpbnQpMSwgcXVlcnktb25seS1maWVsZD0oaW50KTEiKSk7Ci0gIGZhaWxfdW5sZXNzIChjaGVja19pZl9jYXBzX2lzX2FjY2VwdGVkIChzaW5rLCAiZm9vL2JhciwgZXh0cmEtZmllbGQ9KGludCkxIikpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFNhbWUgYXMgdGVzdF9zdGlja3lfY2Fwc191bmxpbmtlZCBleGNlcHQgdGhhdCB0aGUgc291cmNlIHBhZAotICogaGFzIGEgdGVtcGxhdGUgb2YgQU5ZIGFuZCB3ZSB3aWxsIGF0dGVtcHQgdG8gcHVzaAotICogaW5jb21wYXRpYmxlIGNhcHMgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0aWNreV9jYXBzX3VubGlua2VkX2luY29tcGF0aWJsZSkKLXsKLSAgR3N0Q2FwcyAqY2FwcywgKmZhaWxjYXBzOwotICBHc3RQYWRUZW1wbGF0ZSAqc3JjX3RlbXBsYXRlLCAqc2lua190ZW1wbGF0ZTsKLSAgR3N0UGFkICpzcmMsICpzaW5rOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgLyogU291cmNlIHBhZCBoYXMgQU5ZIGNhcHMKLSAgICogU2luayBwYWQgaGFzIGZvb2JhciBjYXBzCi0gICAqIFdlIHdpbGwgcHVzaCB0aGUgcG9ueSBleHByZXNzIGNhcHMgKHdoaWNoIHNob3VsZCBmYWlsKQotICAgKi8KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19hbnkgKCk7Ci0gIHNyY190ZW1wbGF0ZSA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMsCi0gICAgICBHU1RfUEFEX0FMV0FZUywgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciwgZHVtbXk9KGludCl7MSwgMn0iKTsKLSAgc2lua190ZW1wbGF0ZSA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHNyYyA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHNyY190ZW1wbGF0ZSwgInNyYyIpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7Ci0gIHNpbmsgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzaW5rX3RlbXBsYXRlLCAic2luayIpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2luaywgc3RpY2t5X2V2ZW50KTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmssIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNfdGVtcGxhdGUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLQotICBmYWlsY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgicG9ueS9leHByZXNzLCBmYWlsdXJlPShib29sZWFuKXRydWUiKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGZhaWxjYXBzLCAiY2FwcyIsIDEpOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jYXBzIChmYWlsY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChmYWlsY2Fwcyk7Ci0gIC8qIFRoZSBwYWQgaXNuJ3QgbGlua2VkIHlldCwgYW5kIGFueXRoaW5nIG1hdGNoZXMgdGhlIHNvdXJjZSBwYWQgdGVtcGxhdGUKLSAgICogKHdoaWNoIGlzIEFOWSkgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLCBldmVudCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChldmVudF9jYXBzID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0KLSAgLyogTGlua2luZyBhbmQgYWN0aXZhdGluZyB3aWxsIG5vdCBmb3J3YXJkIHRoZSBzdGlja3kgZXZlbnQgeWV0Li4uICovCi0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAoZ3N0X3BhZF9saW5rIChzcmMsIHNpbmspKSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChldmVudF9jYXBzID09IE5VTEwpOwotCi0gIC8qIC4uLmJ1dCB0aGUgZmlyc3QgYnVmZmVyIHdpbGwgYW5kIHNob3VsZCBGQUlMIHNpbmNlIHRoZSBjYXBzIAotICAgKiBhcmUgbm90IGNvbXBhdGlibGUgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLAotICAgICAgICAgIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0gIC8qIFdlIHNob3VsZG4ndCBoYXZlIHJlY2VpdmVkIHRoZSBjYXBzIGV2ZW50IHNpbmNlIGl0J3MgaW5jb21wYXRpYmxlICovCi0gIGZhaWxfdW5sZXNzIChldmVudF9jYXBzID09IE5VTEwpOwotICAvKiBXZSBzaG91bGRuJ3QgaGF2ZSByZWNlaXZlZCBhbnkgYnVmZmVycyBzaW5jZSBjYXBzIGFyZSBpbmNvbXBhdGlibGUgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDApOwotCi0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJmV2ZW50X2NhcHMsIE5VTEwpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBMaWtlIHRlc3Rfc3RpY2t5X2NhcHNfdW5saW5rZWQsIGJ1dCBsaW5rIGJlZm9yZSBjYXBzOiAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdGlja3lfY2Fwc19mbHVzaGluZykKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0UGFkVGVtcGxhdGUgKnNyY190ZW1wbGF0ZSwgKnNpbmtfdGVtcGxhdGU7Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLSAgR3N0RXZlbnQgKmV2ZW50OwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIsIGR1bW15PShpbnQpezEsIDJ9Iik7Ci0gIHNyY190ZW1wbGF0ZSA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMsCi0gICAgICBHU1RfUEFEX0FMV0FZUywgY2Fwcyk7Ci0gIHNpbmtfdGVtcGxhdGUgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkssCi0gICAgICBHU1RfUEFEX0FMV0FZUywgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBzcmMgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzcmNfdGVtcGxhdGUsICJzcmMiKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwpOwotICBzaW5rID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNpbmssIHN0aWNreV9ldmVudCk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua190ZW1wbGF0ZSk7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChnc3RfcGFkX2xpbmsgKHNyYywgc2luaykpKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyLCBkdW1teT0oaW50KTEiKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMSk7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgLyogVGhlIGNhcHMgZXZlbnQgZ2V0cyBhY2NlcHRlZCBieSB0aGUgc291cmNlIHBhZCAoYW5kIHN0b3JlZCkgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLCBldmVudCkgPT0gVFJVRSk7Ci0gIC8qIEJ1dCB3YXNuJ3QgZm9yd2FyZGVkIHNpbmNlIHRoZSBzaW5rIHBhZCBpcyBmbHVzaGluZyAobm90IGFjdGl2YXRlZCkgKi8KLSAgZmFpbF91bmxlc3MgKGV2ZW50X2NhcHMgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmR1bW15X3NlZ21lbnQpKSA9PSBUUlVFKTsKLQotICAvKiBBY3RpdmF0aW5nIHdpbGwgbm90IGZvcndhcmQgdGhlIHN0aWNreSBldmVudCB5ZXQuLi4gKi8KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGV2ZW50X2NhcHMgPT0gTlVMTCk7Ci0KLSAgLyogLi4uYnV0IHRoZSBmaXJzdCBidWZmZXIgd2lsbDogKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZXZlbnRfY2FwcyA9PSBjYXBzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotCi0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJmNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc19yZXBsYWNlICgmZXZlbnRfY2FwcywgTlVMTCk7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmssICJzaW5rIiwgMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotbmFtZV9pc192YWxpZCAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RQYWRQcmVzZW5jZSBwcmVzZW5jZSkKLXsKLSAgR3N0UGFkVGVtcGxhdGUgKm5ldzsKLSAgR3N0Q2FwcyAqYW55ID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLQotICBuZXcgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAobmFtZSwgR1NUX1BBRF9TUkMsIHByZXNlbmNlLCBhbnkpOwotICBnc3RfY2Fwc191bnJlZiAoYW55KTsKLSAgaWYgKG5ldykgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKG5ldykpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbmFtZV9pc192YWxpZCkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0KLSAgZmFpbF91bmxlc3MgKG5hbWVfaXNfdmFsaWQgKCJzcmMiLCBHU1RfUEFEX0FMV0FZUykpOwotICBBU1NFUlRfV0FSTklORyAobmFtZV9pc192YWxpZCAoInNyYyUiLCBHU1RfUEFEX0FMV0FZUykpOwotICBBU1NFUlRfV0FSTklORyAocmVzdWx0ID0gbmFtZV9pc192YWxpZCAoInNyYyVkIiwgR1NUX1BBRF9BTFdBWVMpKTsKLSAgZmFpbF9pZiAocmVzdWx0KTsKLQotICBmYWlsX3VubGVzcyAobmFtZV9pc192YWxpZCAoInNyYyIsIEdTVF9QQURfUkVRVUVTVCkpOwotICBBU1NFUlRfV0FSTklORyAobmFtZV9pc192YWxpZCAoInNyYyVzJXMiLCBHU1RfUEFEX1JFUVVFU1QpKTsKLSAgQVNTRVJUX1dBUk5JTkcgKG5hbWVfaXNfdmFsaWQgKCJzcmMlYyIsIEdTVF9QQURfUkVRVUVTVCkpOwotICBBU1NFUlRfV0FSTklORyAobmFtZV9pc192YWxpZCAoInNyYyUiLCBHU1RfUEFEX1JFUVVFU1QpKTsKLSAgQVNTRVJUX1dBUk5JTkcgKG5hbWVfaXNfdmFsaWQgKCJzcmMlZHNyYyIsIEdTVF9QQURfUkVRVUVTVCkpOwotCi0gIGZhaWxfdW5sZXNzIChuYW1lX2lzX3ZhbGlkICgic3JjIiwgR1NUX1BBRF9TT01FVElNRVMpKTsKLSAgZmFpbF91bmxlc3MgKG5hbWVfaXNfdmFsaWQgKCJzcmMlYyIsIEdTVF9QQURfU09NRVRJTUVTKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1fcHJvYmVfaGFuZGxlciAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyZGF0YSkKLXsKLSAgR3N0UGFkUHJvYmVSZXR1cm4gcmV0ID0gKEdzdFBhZFByb2JlUmV0dXJuKSBHUE9JTlRFUl9UT19JTlQgKHVzZXJkYXRhKTsKLQotICAvKiBJZiB3ZSBhcmUgaGFuZGxpbmcgdGhlIGRhdGEsIHdlIHVucmVmIGl0ICovCi0gIGlmIChyZXQgPT0gR1NUX1BBRF9QUk9CRV9IQU5ETEVECi0gICAgICAmJiAhKEdTVF9QQURfUFJPQkVfSU5GT19UWVBFIChpbmZvKSAmIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RIKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlVucmVmZmluZyBkYXRhIik7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChpbmZvLT5kYXRhKTsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLV9oYW5kbGVkX3Byb2JlX2hhbmRsZXIgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcmRhdGEpCi17Ci0gIEdzdEZsb3dSZXR1cm4gY3VzdG9tZmxvdyA9IChHc3RGbG93UmV0dXJuKSBHUE9JTlRFUl9UT19JTlQgKHVzZXJkYXRhKTsKLQotICAvKiBXZSBhcmUgaGFuZGxpbmcgdGhlIGRhdGEsIHdlIHVucmVmIGl0ICovCi0gIGlmICghKEdTVF9QQURfUFJPQkVfSU5GT19UWVBFIChpbmZvKSAmIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RIKSkKLSAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKGluZm8tPmRhdGEpOwotICBHU1RfUEFEX1BST0JFX0lORk9fRkxPV19SRVRVUk4gKGluZm8pID0gY3VzdG9tZmxvdzsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9IQU5ETEVEOwotfQotCi0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZXZlbnRzX3F1ZXJ5X3VubGlua2VkKQotewotICBHc3RQYWQgKnNyYzsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3Vsb25nIGlkOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0KLSAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfaWYgKHNyYyA9PSBOVUxMKTsKLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoc3JjKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgPT0gTlVMTCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjLCBjYXBzKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDIpOwotCi0gIC8qIERvaW5nIGEgcXVlcnkgb24gYW4gdW5saW5rZWQgcGFkIHdpbGwgcmV0dXJuIEZBTFNFICovCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcGVlcl9xdWVyeSAoc3JjLCBxdWVyeSkgPT0gRkFMU0UpOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKHF1ZXJ5LCAicXVlcnkiLCAxKTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgLyogQWRkIGEgcHJvYmUgdGhhdCByZXR1cm5zIF9EUk9QIHdpbGwgbWFrZSB0aGUgZXZlbnQgcHVzaCByZXR1cm4gVFJVRQotICAgKiBldmVuIGlmIG5vdCBsaW5rZWQgKi8KLSAgR1NUX0RFQlVHICgiZXZlbnQvcXVlcnkgRFJPUCIpOwotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmMsCi0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfQk9USCB8IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RILAotICAgICAgX3Byb2JlX2hhbmRsZXIsIEdJTlRfVE9fUE9JTlRFUiAoR1NUX1BBRF9QUk9CRV9EUk9QKSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0gIC8qIFF1ZXJpZXMgc2hvdWxkIHN0aWwgZmFpbCAqLwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3BlZXJfcXVlcnkgKHNyYywgcXVlcnkpID09IEZBTFNFKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChxdWVyeSwgInF1ZXJ5IiwgMSk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjLCBpZCk7Ci0KLSAgLyogQWRkIGEgcHJvYmUgdGhhdCByZXR1cm5zIF9IQU5ETEVEIHdpbGwgbWFrZSB0aGUgZXZlbnQgcHVzaCByZXR1cm4gVFJVRQotICAgKiBldmVuIGlmIG5vdCBsaW5rZWQgKi8KLSAgR1NUX0RFQlVHICgiZXZlbnQvcXVlcnkgSEFORExFRCIpOwotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmMsCi0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfQk9USCB8IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9CT1RILAotICAgICAgX3Byb2JlX2hhbmRsZXIsIEdJTlRfVE9fUE9JTlRFUiAoR1NUX1BBRF9QUk9CRV9IQU5ETEVEKSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0KLSAgLyogUXVlcmllcyB3aWxsIHN1Y2NlZWQgKi8KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2R1cmF0aW9uIChHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzcmMsIHF1ZXJ5KSA9PSBUUlVFKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChxdWVyeSwgInF1ZXJ5IiwgMSk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjLCBpZCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAyKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjLCAic3JjIiwgMSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLQotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3B1c2hfdW5saW5rZWQpCi17Ci0gIEdzdFBhZCAqc3JjOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgZ3Vsb25nIGlkOwotICBHc3RGbG93UmV0dXJuIGZsOwotCi0gIHNyYyA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7Ci0gIGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKHNyYyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzID09IE5VTEwpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIiKTsKLQotICAvKiBwdXNoaW5nIG9uIGFuIGluYWN0aXZlIHBhZCB3aWxsIHJldHVybiB3cm9uZyBzdGF0ZSAqLwotICBHU1RfREVCVUcgKCJwdXNoIGJ1ZmZlciBpbmFjdGl2ZSIpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyYywgYnVmZmVyKSA9PSBHU1RfRkxPV19GTFVTSElORyk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpID09IFRSVUUpOwotICBHU1RfREVCVUcgKCJwdXNoIGNhcHMgZXZlbnQgaW5hY3RpdmUiKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjLCBjYXBzKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0KLSAgLyogcHVzaGluZyBvbiBhbiB1bmxpbmtlZCBwYWQgd2lsbCBkcm9wIHRoZSBidWZmZXIgKi8KLSAgR1NUX0RFQlVHICgicHVzaCBidWZmZXIgdW5saW5rZWQiKTsKLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgLyogYWRkaW5nIGEgcHJvYmUgdGhhdCByZXR1cm5zIF9EUk9QIHdpbGwgZHJvcCB0aGUgYnVmZmVyIHdpdGhvdXQgdHJ5aW5nCi0gICAqIHRvIGNoYWluICovCi0gIEdTVF9ERUJVRyAoInB1c2ggYnVmZmVyIGRyb3AiKTsKLSAgaWQgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLAotICAgICAgX3Byb2JlX2hhbmRsZXIsIEdJTlRfVE9fUE9JTlRFUiAoR1NUX1BBRF9QUk9CRV9EUk9QKSwgTlVMTCk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyYywgaWQpOwotCi0gIC8qIGFkZGluZyBhIHByb2JlIHRoYXQgcmV0dXJucyBfSEFORExFRCB3aWxsIGRyb3AgdGhlIGJ1ZmZlciB3aXRob3V0IHRyeWluZwotICAgKiB0byBjaGFpbiAqLwotICBHU1RfREVCVUcgKCJwdXNoIGJ1ZmZlciBoYW5kbGVkIik7Ci0gIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHNyYywgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwKLSAgICAgIF9wcm9iZV9oYW5kbGVyLCBHSU5UX1RPX1BPSU5URVIgKEdTVF9QQURfUFJPQkVfSEFORExFRCksIE5VTEwpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyYywgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChzcmMsIGlkKTsKLQotICAvKiBhZGRpbmcgYSBwcm9iZSB0aGF0IHJldHVybnMgX09LIHdpbGwgc3RpbGwgY2hhaW4gdGhlIGJ1ZmZlciwKLSAgICogYW5kIGhlbmNlIGRyb3AgYmVjYXVzZSBwYWQgaXMgdW5saW5rZWQgKi8KLSAgR1NUX0RFQlVHICgicHVzaCBidWZmZXIgb2siKTsKLSAgaWQgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLAotICAgICAgX3Byb2JlX2hhbmRsZXIsIEdJTlRfVE9fUE9JTlRFUiAoR1NUX1BBRF9QUk9CRV9PSyksIE5VTEwpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyYywgYnVmZmVyKSA9PSBHU1RfRkxPV19OT1RfTElOS0VEKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyYywgaWQpOwotCi0gIEdTVF9ERUJVRyAoInB1c2ggYnVmZmVyIGhhbmRsZWQgYW5kIGN1c3RvbSByZXR1cm4iKTsKLSAgZm9yIChmbCA9IEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7IGZsIDw9IEdTVF9GTE9XX09LOyBmbCArPSAxKSB7Ci0gICAgR1NUX0RFQlVHICgiVGVzdGluZyB3aXRoICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKGZsKSk7Ci0gICAgaWQgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLAotICAgICAgICBfaGFuZGxlZF9wcm9iZV9oYW5kbGVyLCBHSU5UX1RPX1BPSU5URVIgKGZsKSwgTlVMTCk7Ci0gICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBidWZmZXIpID09IGZsKTsKLSAgICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyYywgaWQpOwotCi0gIH0KLQotCi0gIC8qIGNsZWFudXAgKi8KLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0KLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wdXNoX2xpbmtlZCkKLXsKLSAgR3N0UGFkICpzcmMsICpzaW5rOwotICBHc3RQYWRMaW5rUmV0dXJuIHBscjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGd1bG9uZyBpZDsKLQotICAvKiBzZXR1cCAqLwotICBzaW5rID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmssIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKLQotICBzcmMgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIiKTsKLSAgLyogb25lIGZvciBtZSAqLwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAxKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLQotICBnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLSAgLyogb25lIGZvciBtZSBhbmQgb25lIGZvciBlYWNoIHNldF9jYXBzICovCi0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDIpOwotCi0gIHBsciA9IGdzdF9wYWRfbGluayAoc3JjLCBzaW5rKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChwbHIpKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgLyogdGVzdCAqLwotICAvKiBwdXNoaW5nIG9uIGEgbGlua2VkIHBhZCB3aWxsIGRyb3AgdGhlIHJlZiB0byB0aGUgYnVmZmVyICovCi0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDIpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIC8qIGFkZGluZyBhIHByb2JlIHRoYXQgcmV0dXJucyBfRFJPUCB3aWxsIGRyb3AgdGhlIGJ1ZmZlciB3aXRob3V0IHRyeWluZwotICAgKiB0byBjaGFpbiAqLwotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmMsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsCi0gICAgICBfcHJvYmVfaGFuZGxlciwgR0lOVF9UT19QT0lOVEVSIChHU1RfUEFEX1BST0JFX0RST1ApLCBOVUxMKTsKLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjLCBpZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAwKTsKLQotICAvKiBhZGRpbmcgYSBwcm9iZSB0aGF0IHJldHVybnMgX09LIHdpbGwgc3RpbGwgY2hhaW4gdGhlIGJ1ZmZlciAqLwotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmMsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsCi0gICAgICBfcHJvYmVfaGFuZGxlciwgR0lOVF9UT19QT0lOVEVSIChHU1RfUEFEX1BST0JFX09LKSwgTlVMTCk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyYywgaWQpOwotCi0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgYnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgLyogYWRkaW5nIGEgcHJvYmUgdGhhdCByZXR1cm5zIF9IQU5ETEVEIHdpbGwgbm90IGNoYWluIHRoZSBidWZmZXIgKi8KLSAgaWQgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLAotICAgICAgX3Byb2JlX2hhbmRsZXIsIEdJTlRfVE9fUE9JTlRFUiAoR1NUX1BBRF9QUk9CRV9IQU5ETEVEKSwgTlVMTCk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyYywgaWQpOwotCi0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAwKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICAvKiB0ZWFyZG93biAqLwotICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOwotICBnc3RfcGFkX3VubGluayAoc3JjLCBzaW5rKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAxKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHVzaF9saW5rZWRfZmx1c2hpbmcpCi17Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0UGFkTGlua1JldHVybiBwbHI7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBndWxvbmcgaWQ7Ci0KLSAgLyogc2V0dXAgKi8KLSAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfaWYgKHNyYyA9PSBOVUxMKTsKLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7Ci0KLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoc3JjKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgPT0gTlVMTCk7Ci0gIGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKHNpbmspOwotICBmYWlsX3VubGVzcyAoY2FwcyA9PSBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyIik7Ci0gIC8qIG9uZSBmb3IgbWUgKi8KLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpID09IFRSVUUpOwotICBnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZHVtbXlfc2VnbWVudCkpID09IFRSVUUpOwotICAvKiBuZWVkIHRvIGFjdGl2YXRlIHRvIG1ha2UgaXQgYWNjZXB0IHRoZSBjYXBzICovCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7Ci0gIC8qIG9uZSBmb3IgbWUgYW5kIG9uZSBmb3IgZWFjaCBzZXRfY2FwcyAqLwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAyKTsKLQotICBwbHIgPSBnc3RfcGFkX2xpbmsgKHNyYywgc2luayk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAocGxyKSk7Ci0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDIpOwotCi0gIC8qIG5vdCBhY3RpdmF0aW5nIHRoZSBwYWRzIGhlcmUsIHdoaWNoIGtlZXBzIHRoZW0gZmx1c2hpbmcgKi8KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBGQUxTRSk7Ci0KLSAgLyogcHVzaGluZyBvbiBhIGZsdXNoaW5nIHBhZCB3aWxsIGRyb3AgdGhlIGJ1ZmZlciAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyYywgYnVmZmVyKSA9PSBHU1RfRkxPV19GTFVTSElORyk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYywgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgRkFMU0UpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSkgPT0gVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKHNyYywgY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0gIC8qIGFkZGluZyBhIHByb2JlIHRoYXQgcmV0dXJucyBfRFJPUCB3aWxsIGRyb3AgdGhlIGJ1ZmZlciB3aXRob3V0IHRyeWluZwotICAgKiB0byBjaGFpbiAqLwotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmMsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIF9wcm9iZV9oYW5kbGVyLAotICAgICAgR0lOVF9UT19QT0lOVEVSIChHU1RfUEFEX1BST0JFX0RST1ApLCBOVUxMKTsKLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChzcmMsIGlkKTsKLQotICAvKiBhZGRpbmcgYSBwcm9iZSB0aGF0IHJldHVybnMgX09LIHdpbGwgc3RpbGwgY2hhaW4gdGhlIGJ1ZmZlciwKLSAgICogYW5kIGhlbmNlIGRyb3AgYmVjYXVzZSBwYWQgaXMgZmx1c2hpbmcgKi8KLSAgaWQgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCBfcHJvYmVfaGFuZGxlciwKLSAgICAgIEdJTlRfVE9fUE9JTlRFUiAoR1NUX1BBRF9QUk9CRV9PSyksIE5VTEwpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyYywgYnVmZmVyKSA9PSBHU1RfRkxPV19GTFVTSElORyk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyYywgaWQpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGNhcHMsICJjYXBzIiwgMik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBnc3RfcGFkX2xpbmsgKHNyYywgc2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoY2FwcywgImNhcHMiLCAxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotYnVmZmVyX2Zyb21fc3RyaW5nIChjb25zdCBnY2hhciAqIHN0cikKLXsKLSAgZ3VpbnQgc2l6ZTsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgc2l6ZSA9IHN0cmxlbiAoc3RyKTsKLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChzaXplKTsKLQotICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgc3RyLCBzaXplKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1ZmZlcl9jb21wYXJlIChHc3RCdWZmZXIgKiBidWYsIGNvbnN0IGdjaGFyICogc3RyLCBnc2l6ZSBzaXplKQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICByZXMgPSBtZW1jbXAgKGluZm8uZGF0YSwgc3RyLCBzaXplKSA9PSAwOwotICBHU1RfTUVNRFVNUCAoImJ1ZmZlciAgZGF0YSIsIGluZm8uZGF0YSwgc2l6ZSk7Ci0gIEdTVF9NRU1EVU1QICgiY29tcGFyZSBkYXRhIiwgKGd1aW50OCAqKSBzdHIsIHNpemUpOwotICBHU1RfREVCVUcgKCJidWZmZXJzIG1hdGNoOiAlcyIsIHJlcyA/ICJ5ZXMiIDogIm5vIik7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3B1c2hfYnVmZmVyX2xpc3RfY29tcGF0KQotewotICBHc3RQYWQgKnNyYywgKnNpbms7Ci0gIEdzdFBhZExpbmtSZXR1cm4gcGxyOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RCdWZmZXJMaXN0ICpsaXN0OwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICAvKiBzZXR1cCAqLwotICBzaW5rID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmssIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKLSAgLyogbGVhdmUgY2hhaW5saXN0ZnVuYyB1bnNldCAqLwotCi0gIHNyYyA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpID09IFRSVUUpOwotCi0gIGdzdF9wYWRfc2V0X2NhcHMgKHNyYywgY2Fwcyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmR1bW15X3NlZ21lbnQpKSA9PSBUUlVFKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOwotCi0gIHBsciA9IGdzdF9wYWRfbGluayAoc3JjLCBzaW5rKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChwbHIpKTsKLQotICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ldyAoKTsKLQotICAvKiB0ZXN0ICovCi0gIC8qIGFkZGluZyB0byBhIGJ1ZmZlciBsaXN0IHdpbGwgZHJvcCB0aGUgcmVmIHRvIHRoZSBidWZmZXIgKi8KLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgYnVmZmVyX2Zyb21fc3RyaW5nICgiTGlzdEdyb3VwIikpOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWZmZXJfZnJvbV9zdHJpbmcgKCJBbm90aGVyTGlzdEdyb3VwIikpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfbGlzdCAoc3JjLCBsaXN0KSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAyKTsKLSAgYnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXJfY29tcGFyZSAoYnVmZmVyLCAiTGlzdEdyb3VwIiwgOSkpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICBidWZmZXJzID0gZ19saXN0X2RlbGV0ZV9saW5rIChidWZmZXJzLCBidWZmZXJzKTsKLSAgYnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXJfY29tcGFyZSAoYnVmZmVyLCAiQW5vdGhlckxpc3RHcm91cCIsIDE2KSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIGJ1ZmZlcnMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGJ1ZmZlcnMsIGJ1ZmZlcnMpOwotICBmYWlsX3VubGVzcyAoYnVmZmVycyA9PSBOVUxMKTsKLQotICAvKiB0ZWFyZG93biAqLwotICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOwotICBnc3RfcGFkX3VubGluayAoc3JjLCBzaW5rKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChjYXBzLCAiY2FwcyIsIDEpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmxvd3JldHVybikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdRdWFyayBxdWFyazsKLQotICAvKiB0ZXN0IHNvbWUgb2YgdGhlIG1hY3JvcyAqLwotICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gIGZhaWxfaWYgKHN0cmNtcCAoZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCksICJlb3MiKSk7Ci0gIHF1YXJrID0gZ3N0X2Zsb3dfdG9fcXVhcmsgKHJldCk7Ci0gIGZhaWxfaWYgKHN0cmNtcCAoZ19xdWFya190b19zdHJpbmcgKHF1YXJrKSwgImVvcyIpKTsKLQotICAvKiBjdXN0b20gcmV0dXJucyAqLwotICByZXQgPSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUzsKLSAgZmFpbF9pZiAoc3RyY21wIChnc3RfZmxvd19nZXRfbmFtZSAocmV0KSwgImN1c3RvbS1zdWNjZXNzIikpOwotICBxdWFyayA9IGdzdF9mbG93X3RvX3F1YXJrIChyZXQpOwotICBmYWlsX2lmIChzdHJjbXAgKGdfcXVhcmtfdG9fc3RyaW5nIChxdWFyayksICJjdXN0b20tc3VjY2VzcyIpKTsKLQotICByZXQgPSBHU1RfRkxPV19DVVNUT01fRVJST1I7Ci0gIGZhaWxfaWYgKHN0cmNtcCAoZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCksICJjdXN0b20tZXJyb3IiKSk7Ci0gIHF1YXJrID0gZ3N0X2Zsb3dfdG9fcXVhcmsgKHJldCk7Ci0gIGZhaWxfaWYgKHN0cmNtcCAoZ19xdWFya190b19zdHJpbmcgKHF1YXJrKSwgImN1c3RvbS1lcnJvciIpKTsKLQotICAvKiBjdXN0b20gcmV0dXJucyBjbGFtcGluZyAqLwotICByZXQgPSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTUyArIDI7Ci0gIGZhaWxfaWYgKHN0cmNtcCAoZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCksICJjdXN0b20tc3VjY2VzcyIpKTsKLSAgcXVhcmsgPSBnc3RfZmxvd190b19xdWFyayAocmV0KTsKLSAgZmFpbF9pZiAoc3RyY21wIChnX3F1YXJrX3RvX3N0cmluZyAocXVhcmspLCAiY3VzdG9tLXN1Y2Nlc3MiKSk7Ci0KLSAgcmV0ID0gR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SIC0gMjsKLSAgZmFpbF9pZiAoc3RyY21wIChnc3RfZmxvd19nZXRfbmFtZSAocmV0KSwgImN1c3RvbS1lcnJvciIpKTsKLSAgcXVhcmsgPSBnc3RfZmxvd190b19xdWFyayAocmV0KTsKLSAgZmFpbF9pZiAoc3RyY21wIChnX3F1YXJrX3RvX3N0cmluZyAocXVhcmspLCAiY3VzdG9tLWVycm9yIikpOwotCi0gIC8qIHVua25vd24gdmFsdWVzICovCi0gIHJldCA9IEdTVF9GTE9XX0NVU1RPTV9FUlJPUiArIDI7Ci0gIGZhaWxfaWYgKHN0cmNtcCAoZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCksICJ1bmtub3duIikpOwotICBxdWFyayA9IGdzdF9mbG93X3RvX3F1YXJrIChyZXQpOwotICBmYWlsX3VubGVzcyAocXVhcmsgPT0gMCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHVzaF9uZWdvdGlhdGlvbikKLXsKLSAgR3N0UGFkICpzcmMsICpzaW5rOwotICBHc3RQYWRMaW5rUmV0dXJuIHBscjsKLSAgR3N0Q2FwcyAqc3JjY2FwcyA9Ci0gICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LHdpZHRoPXsxNiwzMn0sZGVwdGg9ezE2LDMyfSIpOwotICBHc3RDYXBzICpzaW5rY2FwcyA9Ci0gICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3LHdpZHRoPTMyLGRlcHRoPXsxNiwzMn0iKTsKLSAgR3N0UGFkVGVtcGxhdGUgKnNyY190ZW1wbGF0ZTsKLSAgR3N0UGFkVGVtcGxhdGUgKnNpbmtfdGVtcGxhdGU7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgLyogc2V0dXAgKi8KLSAgc3JjX3RlbXBsYXRlID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBzcmNjYXBzKTsKLSAgc2lua190ZW1wbGF0ZSA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBzaW5rY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNpbmtjYXBzKTsKLQotICBzaW5rID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZmFpbF9pZiAoc2luayA9PSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmssIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKLQotICBzcmMgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChzcmNfdGVtcGxhdGUsICJzcmMiKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwpOwotCi0gIHBsciA9IGdzdF9wYWRfbGluayAoc3JjLCBzaW5rKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfTElOS19TVUNDRVNTRlVMIChwbHIpKTsKLQotICAvKiBhY3RpdmF0ZSBwYWRzICovCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyx3aWR0aD0xNixkZXB0aD0xNiIpOwotCi0gIC8qIFNob3VsZCBmYWlsIGlmIHNyYyBwYWQgY2FwcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggc2luayBwYWQgY2FwcyAqLwotICBnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoc2luaywgY2FwcykgPT0gRkFMU0UpOwotCi0gIC8qIHRlYXJkb3duICovCi0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0gIGdzdF9wYWRfdW5saW5rIChzcmMsIHNpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjX3RlbXBsYXRlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBzZWUgdGhhdCBhbiB1bnJlZiBhbHNvIHVubGlua3MgdGhlIHBhZHMgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NyY191bnJlZl91bmxpbmspCi17Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0UGFkTGlua1JldHVybiBwbHI7Ci0KLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGZhaWxfaWYgKHNpbmsgPT0gTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfaWYgKHNyYyA9PSBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyIik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIFRSVUUpOwotICBnc3RfcGFkX3NldF9jYXBzIChzcmMsIGNhcHMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOwotICBnc3RfcGFkX3NldF9jYXBzIChzaW5rLCBjYXBzKTsKLQotICBwbHIgPSBnc3RfcGFkX2xpbmsgKHNyYywgc2luayk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0xJTktfU1VDQ0VTU0ZVTCAocGxyKSk7Ci0KLSAgLyogdW5yZWYgdGhlIHNyY3BhZCAqLwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotCi0gIC8qIHNpbmsgc2hvdWxkIGJlIHVubGlua2VkIG5vdyAqLwotICBmYWlsX2lmIChnc3RfcGFkX2lzX2xpbmtlZCAoc2luaykpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBzZWUgdGhhdCBhbiB1bnJlZiBhbHNvIHVubGlua3MgdGhlIHBhZHMgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbmtfdW5yZWZfdW5saW5rKQotewotICBHc3RQYWQgKnNyYywgKnNpbms7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFBhZExpbmtSZXR1cm4gcGxyOwotCi0gIHNpbmsgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotCi0gIHNyYyA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiZm9vL2JhciIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjLCBjYXBzKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAoc2luaywgY2Fwcyk7Ci0KLSAgcGxyID0gZ3N0X3BhZF9saW5rIChzcmMsIHNpbmspOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9MSU5LX1NVQ0NFU1NGVUwgKHBscikpOwotCi0gIC8qIHVucmVmIHRoZSBzaW5rcGFkICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotCi0gIC8qIHNyYyBzaG91bGQgYmUgdW5saW5rZWQgbm93ICovCi0gIGZhaWxfaWYgKGdzdF9wYWRfaXNfbGlua2VkIChzcmMpKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ3Vsb25nIGlkOwotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWJsb2NrX2FzeW5jX2NiIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gKmJvb2xfdXNlcl9kYXRhID0gKGdib29sZWFuICopIHVzZXJfZGF0YTsKLQotICBmYWlsX3VubGVzcyAoKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0spICE9IDApOwotCi0gIC8qIGhlcmUgd2Ugc2hvdWxkIGhhdmUgYmxvY2tlZCA9PSAwIHVuYmxvY2tlZCA9PSAwICovCi0gIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVswXSA9PSBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVsxXSA9PSBGQUxTRSk7Ci0KLSAgYm9vbF91c2VyX2RhdGFbMF0gPSBUUlVFOwotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIGlkKTsKLSAgYm9vbF91c2VyX2RhdGFbMV0gPSBUUlVFOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ibG9ja19hc3luYykKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIC8qIHdlIHNldCBkYXRhWzBdID0gVFJVRSB3aGVuIHRoZSBwYWQgaXMgYmxvY2tlZCwgZGF0YVsxXSA9IFRSVUUgd2hlbiBpdCdzCi0gICAqIHVuYmxvY2tlZCAqLwotICBnYm9vbGVhbiBkYXRhWzJdID0geyBGQUxTRSwgRkFMU0UgfTsKLQotICBwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmR1bW15X3NlZ21lbnQpKSA9PSBUUlVFKTsKLQotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSywgYmxvY2tfYXN5bmNfY2IsICZkYXRhLAotICAgICAgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGRhdGFbMF0gPT0gRkFMU0UpOwotICBmYWlsX3VubGVzcyAoZGF0YVsxXSA9PSBGQUxTRSk7Ci0gIGdzdF9wYWRfcHVzaCAocGFkLCBnc3RfYnVmZmVyX25ldyAoKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWJsb2NrX2FzeW5jX2NiX3JldHVybl9vayAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotcHVzaF9idWZmZXJfYXN5bmMgKEdzdFBhZCAqIHBhZCkKLXsKLSAgcmV0dXJuIEdJTlRfVE9fUE9JTlRFUiAoZ3N0X3BhZF9wdXNoIChwYWQsIGdzdF9idWZmZXJfbmV3ICgpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3BhZF9ibG9ja2luZ193aXRoX3R5cGUgKEdzdFBhZFByb2JlVHlwZSB0eXBlKQotewotICBHc3RQYWQgKnBhZDsKLSAgR1RocmVhZCAqdGhyZWFkOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmR1bW15X3NlZ21lbnQpKSA9PSBUUlVFKTsKLQotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIHR5cGUsIGJsb2NrX2FzeW5jX2NiX3JldHVybl9vaywgTlVMTCwgTlVMTCk7Ci0KLSAgdGhyZWFkID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIChHVGhyZWFkRnVuYykgcHVzaF9idWZmZXJfYXN5bmMsCi0gICAgICBwYWQsIE5VTEwpOwotCi0gIC8qIHdhaXQgZm9yIHRoZSBibG9jayAqLwotICB3aGlsZSAoIWdzdF9wYWRfaXNfYmxvY2tpbmcgKHBhZCkpIHsKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotICB9Ci0KLSAgLyogc3RvcCB3aXRoIGZsdXNoaW5nICovCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLQotICAvKiBnZXQgcmV0dXJuIHZhbHVlIGZyb20gcHVzaCAqLwotICByZXQgPSBHUE9JTlRFUl9UT19JTlQgKGdfdGhyZWFkX2pvaW4gKHRocmVhZCkpOwotICAvKiB1bmZsdXNoIG5vdyAqLwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChGQUxTRSkpOwotICAvKiBtdXN0IGJlIHdyb25nIHN0YXRlICovCi0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhZF9ibG9ja2luZ193aXRoX3Byb2JlX3R5cGVfYmxvY2spCi17Ci0gIHRlc3RfcGFkX2Jsb2NraW5nX3dpdGhfdHlwZSAoR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRfYmxvY2tpbmdfd2l0aF9wcm9iZV90eXBlX2Jsb2NraW5nKQotewotICB0ZXN0X3BhZF9ibG9ja2luZ193aXRoX3R5cGUgKEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS0lORyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdib29sZWFuIGlkbGVfcHJvYmVfcnVubmluZzsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWlkbGV0ZXN0X3NpbmtfcGFkX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQotewotICBpZiAoaWRsZV9wcm9iZV9ydW5uaW5nKQotICAgIGZhaWwgKCJTaG91bGQgbm90IGJlIHJlYWNoZWQiKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWlkbGVfcHJvYmVfd2FpdCAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIC8qIGl0IGlzIG9rIHRvIGhhdmUgYSBwcm9iZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYnV0IGl0IGlzIG5vdAotICAgKiBhY2NlcHRhYmxlIGluIG91ciBzY2VuYXJpbyAqLwotICBmYWlsX2lmIChpZGxlX3Byb2JlX3J1bm5pbmcpOwotCi0gIGlkbGVfcHJvYmVfcnVubmluZyA9IFRSVUU7Ci0gIHdoaWxlIChpZGxlX3Byb2JlX3J1bm5pbmcpIHsKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfUkVNT1ZFOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLWFkZF9pZGxlX3Byb2JlX2FzeW5jIChHc3RQYWQgKiBwYWQpCi17Ci0gIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9JRExFLCBpZGxlX3Byb2JlX3dhaXQsIE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRfYmxvY2tpbmdfd2l0aF9wcm9iZV90eXBlX2lkbGUpCi17Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLSAgR1RocmVhZCAqaWRsZV90aHJlYWQsICp0aHJlYWQ7Ci0KLSAgc3JjcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7Ci0gIHNpbmtwYWQgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLQotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2lua3BhZCwgaWRsZXRlc3Rfc2lua19wYWRfY2hhaW4pOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmR1bW15X3NlZ21lbnQpKSA9PSBUUlVFKTsKLQotICBpZGxlX3Byb2JlX3J1bm5pbmcgPSBGQUxTRTsKLSAgaWRsZV90aHJlYWQgPQotICAgICAgZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIChHVGhyZWFkRnVuYykgYWRkX2lkbGVfcHJvYmVfYXN5bmMsIHNyY3BhZCwKLSAgICAgIE5VTEwpOwotCi0gIC8qIHdhaXQgZm9yIHRoZSBpZGxlIGZ1bmN0aW9uIHRvIHNpZ25hbCBpdCBpcyBiZWluZyBjYWxsZWQgKi8KLSAgd2hpbGUgKCFpZGxlX3Byb2JlX3J1bm5pbmcpIHsKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotICB9Ci0KLSAgdGhyZWFkID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIChHVGhyZWFkRnVuYykgcHVzaF9idWZmZXJfYXN5bmMsCi0gICAgICBzcmNwYWQsIE5VTEwpOwotCi0gIHdoaWxlICghZ3N0X3BhZF9pc19ibG9ja2luZyAoc3JjcGFkKSkgewotICAgIGdfdXNsZWVwICgxMDAwMCk7Ci0gIH0KLQotICBpZGxlX3Byb2JlX3J1bm5pbmcgPSBGQUxTRTsKLQotICBnX3RocmVhZF9qb2luIChpZGxlX3RocmVhZCk7Ci0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbiBwdWxsX3Byb2JlX2NhbGxlZDsKLXN0YXRpYyBnYm9vbGVhbiBwdWxsX3Byb2JlX2NhbGxlZF93aXRoX2JhZF90eXBlOwotc3RhdGljIGdib29sZWFuIHB1bGxfcHJvYmVfY2FsbGVkX3dpdGhfYmFkX2RhdGE7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcHJvYmVfcHVsbF9idWZmZXJfY2JfY2hlY2tfYnVmZmVyX3JldHVybl9vayAoR3N0UGFkICogcGFkLAotICAgIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSKSB7Ci0gICAgaWYgKEdTVF9JU19CVUZGRVIgKGluZm8tPmRhdGEpKQotICAgICAgcHVsbF9wcm9iZV9jYWxsZWQgPSBUUlVFOwotICAgIGVsc2UKLSAgICAgIHB1bGxfcHJvYmVfY2FsbGVkX3dpdGhfYmFkX2RhdGEgPSBUUlVFOwotICB9IGVsc2UgewotICAgIC8qIHNob3VsZG4ndCBiZSBjYWxsZWQgKi8KLSAgICBwdWxsX3Byb2JlX2NhbGxlZF93aXRoX2JhZF90eXBlID0gVFJVRTsKLSAgfQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLXRlc3RfcHJvYmVfcHVsbF9nZXRyYW5nZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIGd1aW50NjQgb2Zmc2V0LAotICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICoqIGJ1ZikKLXsKLSAgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotdGVzdF9wcm9iZV9wdWxsX2FjdGl2YXRlX3B1bGwgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogb2JqZWN0KQotewotICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKTsKLX0KLQotc3RhdGljIGdwb2ludGVyCi1wdWxsX3JhbmdlX2FzeW5jIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXMgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKHBhZCwgMCwgMTAwLCAmYnVmKTsKLSAgaWYgKGJ1ZikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICByZXR1cm4gR0lOVF9UT19QT0lOVEVSIChyZXMpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRfcHJvYmVfcHVsbCkKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotICBzaW5rcGFkID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24gKHNyY3BhZCwgdGVzdF9wcm9iZV9wdWxsX2dldHJhbmdlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKHNpbmtwYWQsIHRlc3RfcHJvYmVfcHVsbF9hY3RpdmF0ZV9wdWxsKTsKLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLQotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzaW5rcGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVTEwsCi0gICAgICBibG9ja19hc3luY19jYl9yZXR1cm5fb2ssIE5VTEwsIE5VTEwpOwotCi0gIHRocmVhZCA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCAoR1RocmVhZEZ1bmMpIHB1bGxfcmFuZ2VfYXN5bmMsCi0gICAgICBzaW5rcGFkLCBOVUxMKTsKLQotICAvKiB3YWl0IGZvciB0aGUgYmxvY2sgKi8KLSAgd2hpbGUgKCFnc3RfcGFkX2lzX2Jsb2NraW5nIChzaW5rcGFkKSkgewotICAgIGdfdXNsZWVwICgxMDAwMCk7Ci0gIH0KLQotICAvKiBzdG9wIHdpdGggZmx1c2hpbmcgKi8KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotCi0gIC8qIGdldCByZXR1cm4gdmFsdWUgZnJvbSBwdXNoICovCi0gIHJldCA9IEdQT0lOVEVSX1RPX0lOVCAoZ190aHJlYWRfam9pbiAodGhyZWFkKSk7Ci0gIC8qIHVuZmx1c2ggbm93ICovCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKEZBTFNFKSk7Ci0gIC8qIG11c3QgYmUgd3Jvbmcgc3RhdGUgKi8KLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19GTFVTSElORyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdib29sZWFuIGlkbGVfcHJvYmVfY2FsbGVkOwotc3RhdGljIGdib29sZWFuIGdldF9yYW5nZV93YWl0Owotc3RhdGljIGdib29sZWFuIGdldHJhbmdlX3dhaXRpbmc7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotaWRsZV9jYl9yZXR1cm5fb2sgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZGxlX3Byb2JlX2NhbGxlZCA9IFRSVUU7Ci0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdGVzdF9wcm9iZV9wdWxsX2dldHJhbmdlX3dhaXQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBndWludDY0IG9mZnNldCwKLSAgICBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWYpCi17Ci0gIGdldHJhbmdlX3dhaXRpbmcgPSBUUlVFOwotCi0gICpidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgd2hpbGUgKGdldF9yYW5nZV93YWl0KSB7Ci0gICAgZ191c2xlZXAgKDEwMDAwKTsKLSAgfQotCi0gIGdldHJhbmdlX3dhaXRpbmcgPSBGQUxTRTsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRfcHJvYmVfcHVsbF9pZGxlKQotewotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0gIEdUaHJlYWQgKnRocmVhZDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgc3JjcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7Ci0gIHNpbmtwYWQgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLQotICBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoc3JjcGFkLCB0ZXN0X3Byb2JlX3B1bGxfZ2V0cmFuZ2Vfd2FpdCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uIChzaW5rcGFkLCB0ZXN0X3Byb2JlX3B1bGxfYWN0aXZhdGVfcHVsbCk7Ci0gIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgVFJVRSk7Ci0KLSAgaWRsZV9wcm9iZV9jYWxsZWQgPSBGQUxTRTsKLSAgZ2V0X3JhbmdlX3dhaXQgPSBUUlVFOwotICB0aHJlYWQgPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgKEdUaHJlYWRGdW5jKSBwdWxsX3JhbmdlX2FzeW5jLAotICAgICAgc2lua3BhZCwgTlVMTCk7Ci0KLSAgLyogd2FpdCBmb3IgdGhlIGJsb2NrICovCi0gIHdoaWxlICghZ2V0cmFuZ2Vfd2FpdGluZykgewotICAgIGdfdXNsZWVwICgxMDAwMCk7Ci0gIH0KLQotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzaW5rcGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0lETEUgfCBHU1RfUEFEX1BST0JFX1RZUEVfUFVMTCwKLSAgICAgIGlkbGVfY2JfcmV0dXJuX29rLCBOVUxMLCBOVUxMKTsKLQotICBmYWlsX2lmIChpZGxlX3Byb2JlX2NhbGxlZCk7Ci0KLSAgZ2V0X3JhbmdlX3dhaXQgPSBGQUxTRTsKLSAgd2hpbGUgKGdldHJhbmdlX3dhaXRpbmcpIHsKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotICB9Ci0gIHdoaWxlICghaWRsZV9wcm9iZV9jYWxsZWQpIHsKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotICB9Ci0KLSAgcmV0ID0gR1BPSU5URVJfVE9fSU5UIChnX3RocmVhZF9qb2luICh0aHJlYWQpKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgRkFMU0UpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhZF9wcm9iZV9wdWxsX2J1ZmZlcikKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotICBzaW5rcGFkID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb24gKHNyY3BhZCwgdGVzdF9wcm9iZV9wdWxsX2dldHJhbmdlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKHNpbmtwYWQsIHRlc3RfcHJvYmVfcHVsbF9hY3RpdmF0ZV9wdWxsKTsKLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLQotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChzaW5rcGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVUxMLAotICAgICAgcHJvYmVfcHVsbF9idWZmZXJfY2JfY2hlY2tfYnVmZmVyX3JldHVybl9vaywgTlVMTCwgTlVMTCk7Ci0KLSAgcHVsbF9wcm9iZV9jYWxsZWQgPSBGQUxTRTsKLSAgcHVsbF9wcm9iZV9jYWxsZWRfd2l0aF9iYWRfdHlwZSA9IEZBTFNFOwotICBwdWxsX3Byb2JlX2NhbGxlZF93aXRoX2JhZF9kYXRhID0gRkFMU0U7Ci0KLSAgdGhyZWFkID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIChHVGhyZWFkRnVuYykgcHVsbF9yYW5nZV9hc3luYywKLSAgICAgIHNpbmtwYWQsIE5VTEwpOwotCi0gIC8qIHdhaXQgZm9yIHRoZSBibG9jayAqLwotICB3aGlsZSAoIXB1bGxfcHJvYmVfY2FsbGVkICYmICFwdWxsX3Byb2JlX2NhbGxlZF93aXRoX2JhZF9kYXRhCi0gICAgICAmJiAhcHVsbF9wcm9iZV9jYWxsZWRfd2l0aF9iYWRfdHlwZSkgewotICAgIGdfdXNsZWVwICgxMDAwMCk7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAocHVsbF9wcm9iZV9jYWxsZWQpOwotICBmYWlsX2lmIChwdWxsX3Byb2JlX2NhbGxlZF93aXRoX2JhZF9kYXRhKTsKLSAgZmFpbF9pZiAocHVsbF9wcm9iZV9jYWxsZWRfd2l0aF9iYWRfdHlwZSk7Ci0KLSAgLyogZ2V0IHJldHVybiB2YWx1ZSBmcm9tIHB1c2ggKi8KLSAgcmV0ID0gR1BPSU5URVJfVE9fSU5UIChnX3RocmVhZF9qb2luICh0aHJlYWQpKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbiBwYWRfcHJvYmVfcmVtb3ZlX25vdGlmaXlfY2FsbGVkID0gRkFMU0U7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcHJvYmVfcmVtb3ZlX3NlbGZfY2IgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCBpbmZvLT5pZCk7Ci0KLSAgZmFpbF91bmxlc3MgKHBhZC0+bnVtX3Byb2JlcyA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHBhZC0+bnVtX2Jsb2NrZWQgPT0gMCk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfUkVNT1ZFOwotfQotCi1zdGF0aWMgdm9pZAotcHJvYmVfcmVtb3ZlX25vdGlmeV9jYiAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZmFpbF91bmxlc3MgKHBhZF9wcm9iZV9yZW1vdmVfbm90aWZpeV9jYWxsZWQgPT0gRkFMU0UpOwotICBwYWRfcHJvYmVfcmVtb3ZlX25vdGlmaXlfY2FsbGVkID0gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFkX3Byb2JlX3JlbW92ZSkKLXsKLSAgR3N0UGFkICpwYWQ7Ci0KLSAgcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOwotICBmYWlsX3VubGVzcyAocGFkLT5udW1fcHJvYmVzID09IDApOwotICBmYWlsX3VubGVzcyAocGFkLT5udW1fYmxvY2tlZCA9PSAwKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwKLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSyB8IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLAotICAgICAgcHJvYmVfcmVtb3ZlX3NlbGZfY2IsIE5VTEwsIHByb2JlX3JlbW92ZV9ub3RpZnlfY2IpOwotICBmYWlsX3VubGVzcyAocGFkLT5udW1fcHJvYmVzID09IDEpOwotICBmYWlsX3VubGVzcyAocGFkLT5udW1fYmxvY2tlZCA9PSAxKTsKLQotICBwYWRfcHJvYmVfcmVtb3ZlX25vdGlmaXlfY2FsbGVkID0gRkFMU0U7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoImFzZGEiKSk7Ci0KLSAgZmFpbF91bmxlc3MgKHBhZC0+bnVtX3Byb2JlcyA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHBhZC0+bnVtX2Jsb2NrZWQgPT0gMCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi10eXBlZGVmIHN0cnVjdAotewotICBndWxvbmcgcHJvYmVfaWQ7Ci0gIEdzdFBhZCAqcHJvYmVfcGFkOwotICBHVGhyZWFkICp0aHJlYWQ7Ci19IEJsb2NrUmVwbGFjZVByb2JlSGVscGVyOwotCi1zdGF0aWMgZ3BvaW50ZXIKLXVuYmxvY2tfcHJvYmVfdGhyZWFkIChncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEJsb2NrUmVwbGFjZVByb2JlSGVscGVyICpoZWxwZXIgPSB1c2VyX2RhdGE7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChoZWxwZXItPnByb2JlX3BhZCwgInJlbW92aW5nIHByb2JlIHRvIHVuYmxvY2sgcGFkIik7Ci0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChoZWxwZXItPnByb2JlX3BhZCwgaGVscGVyLT5wcm9iZV9pZCk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWJsb2NrX2FuZF9yZXBsYWNlX2J1ZmZlcl9wcm9iZV9jYiAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgQmxvY2tSZXBsYWNlUHJvYmVIZWxwZXIgKmhlbHBlciA9IHVzZXJfZGF0YTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHBhZCwgImFib3V0IHRvIGJsb2NrIHBhZCwgcmVwbGFjaW5nIGJ1ZmZlciIpOwotCi0gIC8qIHdlIHdhbnQgdG8gYmxvY2ssIGJ1dCBhbHNvIGRyb3AgdGhpcyBidWZmZXIgKi8KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoR1NUX0JVRkZFUiAoaW5mby0+ZGF0YSkpOwotICBpbmZvLT5kYXRhID0gTlVMTDsKLQotICBoZWxwZXItPnRocmVhZCA9Ci0gICAgICBnX3RocmVhZF9uZXcgKCJnc3QtcGFkLXRlc3QtdGhyZWFkIiwgdW5ibG9ja19wcm9iZV90aHJlYWQsIGhlbHBlcik7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhZF9wcm9iZV9ibG9ja19hbmRfZHJvcF9idWZmZXIpCi17Ci0gIEJsb2NrUmVwbGFjZVByb2JlSGVscGVyIGhlbHBlcjsKLSAgR3N0Rmxvd1JldHVybiBmbG93OwotICBHc3RQYWQgKnNyYywgKnNpbms7Ci0KLSAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmR1bW15X3NlZ21lbnQpKSA9PSBUUlVFKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX2xpbmsgKHNyYywgc2luayksIEdTVF9QQURfTElOS19PSyk7Ci0KLSAgaGVscGVyLnByb2JlX2lkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHNyYywKLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSyB8IEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsCi0gICAgICBibG9ja19hbmRfcmVwbGFjZV9idWZmZXJfcHJvYmVfY2IsICZoZWxwZXIsIE5VTEwpOwotICBoZWxwZXIucHJvYmVfcGFkID0gc3JjOwotCi0gIC8qIHB1c2ggYSBidWZmZXIgc28gdGhlIGV2ZW50cyBhcmUgcHJvcGFnYXRlZCBkb3duc3RyZWFtICovCi0gIGZsb3cgPSBnc3RfcGFkX3B1c2ggKHNyYywgZ3N0X2J1ZmZlcl9uZXcgKCkpOwotCi0gIGdfdGhyZWFkX2pvaW4gKGhlbHBlci50aHJlYWQpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZsb3csIEdTVF9GTE9XX09LKTsKLQotICAvKiBubyBidWZmZXIgc2hvdWxkIGhhdmUgbWFkZSBpdCB0aHJvdWdoIHRvIHRoZSBzaW5rIHBhZCwgYW5kIGVzcGVjaWFsbHkKLSAgICogbm90IGEgTlVMTCBwb2ludGVyIGJ1ZmZlciAqLwotICBmYWlsX2lmIChidWZmZXJzICYmIGJ1ZmZlcnMtPmRhdGEgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXJzID09IE5VTEwpOwotCi0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcHJvYmVfYmxvY2tfYSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLXByb2JlX2Jsb2NrX2IgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnYm9vbGVhbiAqcHJvYmVfYl9jYWxsZWQgPSB1c2VyX2RhdGE7Ci0KLSAgKnByb2JlX2JfY2FsbGVkID0gVFJVRTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1wcm9iZV9ibG9ja19jIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gKnByb2JlX2NfY2FsbGVkID0gdXNlcl9kYXRhOwotCi0gICpwcm9iZV9jX2NhbGxlZCA9IFRSVUU7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfUkVNT1ZFOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRfcHJvYmVfYmxvY2tfYWRkX3JlbW92ZSkKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdUaHJlYWQgKnRocmVhZDsKLSAgZ3Vsb25nIHByb2JlX2EsIHByb2JlX2I7Ci0gIGdib29sZWFuIHByb2JlX2JfY2FsbGVkID0gRkFMU0U7Ci0gIGdib29sZWFuIHByb2JlX2NfY2FsbGVkID0gRkFMU0U7Ci0KLSAgcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOwotICBmYWlsX3VubGVzcyAocGFkLT5udW1fcHJvYmVzID09IDApOwotICBmYWlsX3VubGVzcyAocGFkLT5udW1fYmxvY2tlZCA9PSAwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZHVtbXlfc2VnbWVudCkpID09IFRSVUUpOwotCi0gIHByb2JlX2EgPSBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwKLSAgICAgIHByb2JlX2Jsb2NrX2EsIE5VTEwsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChwYWQtPm51bV9wcm9iZXMgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChwYWQtPm51bV9ibG9ja2VkID09IDEpOwotCi0gIHRocmVhZCA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCAoR1RocmVhZEZ1bmMpIHB1c2hfYnVmZmVyX2FzeW5jLAotICAgICAgcGFkLCBOVUxMKTsKLQotICAvKiB3YWl0IGZvciB0aGUgYmxvY2sgKi8KLSAgd2hpbGUgKCFnc3RfcGFkX2lzX2Jsb2NraW5nIChwYWQpKSB7Ci0gICAgZ191c2xlZXAgKDEwMDAwKTsKLSAgfQotCi0gIHByb2JlX2IgPSBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwKLSAgICAgIHByb2JlX2Jsb2NrX2IsICZwcm9iZV9iX2NhbGxlZCwgTlVMTCk7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHBhZCwgcHJvYmVfYSk7Ci0KLSAgLyogd2FpdCBmb3IgdGhlIGNhbGxiYWNrICovCi0gIHdoaWxlICghcHJvYmVfYl9jYWxsZWQpIHsKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotICB9Ci0KLSAgLyogd2FpdCBmb3IgdGhlIGJsb2NrICovCi0gIHdoaWxlICghZ3N0X3BhZF9pc19ibG9ja2luZyAocGFkKSkgewotICAgIGdfdXNsZWVwICgxMDAwMCk7Ci0gIH0KLQotICBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwKLSAgICAgIHByb2JlX2Jsb2NrX2MsICZwcm9iZV9jX2NhbGxlZCwgTlVMTCk7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHBhZCwgcHJvYmVfYik7Ci0KLSAgLyogd2FpdCBmb3IgdGhlIGNhbGxiYWNrICovCi0gIHdoaWxlICghcHJvYmVfY19jYWxsZWQpIHsKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotICB9Ci0KLSAgLyogd2FpdCBmb3IgdGhlIHVuYmxvY2sgKi8KLSAgd2hpbGUgKGdzdF9wYWRfaXNfYmxvY2tpbmcgKHBhZCkpIHsKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICBnX3RocmVhZF9qb2luICh0aHJlYWQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbiBzcmNfZmx1c2hfc3RhcnRfcHJvYmVfY2FsbGVkID0gRkFMU0U7Ci1zdGF0aWMgZ2Jvb2xlYW4gc3JjX2ZsdXNoX3N0b3BfcHJvYmVfY2FsbGVkID0gRkFMU0U7Ci1zdGF0aWMgZ2Jvb2xlYW4gc2lua19mbHVzaF9zdGFydF9wcm9iZV9jYWxsZWQgPSBGQUxTRTsKLXN0YXRpYyBnYm9vbGVhbiBzaW5rX2ZsdXNoX3N0b3BfcHJvYmVfY2FsbGVkID0gRkFMU0U7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZmx1c2hfcHJvYmVfY2IgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgaWYgKCEoR1NUX1BBRF9QUk9CRV9JTkZPX1RZUEUgKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSkKLSAgICBnb3RvIG91dDsKLQotICBldmVudCA9IGdzdF9wYWRfcHJvYmVfaW5mb19nZXRfZXZlbnQgKGluZm8pOwotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTiAocGFkKSA9PSBHU1RfUEFEX1NSQykKLSAgICAgICAgc3JjX2ZsdXNoX3N0YXJ0X3Byb2JlX2NhbGxlZCA9IFRSVUU7Ci0gICAgICBlbHNlCi0gICAgICAgIHNpbmtfZmx1c2hfc3RhcnRfcHJvYmVfY2FsbGVkID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBpZiAoR1NUX1BBRF9ESVJFQ1RJT04gKHBhZCkgPT0gR1NUX1BBRF9TUkMpCi0gICAgICAgIHNyY19mbHVzaF9zdG9wX3Byb2JlX2NhbGxlZCA9IFRSVUU7Ci0gICAgICBlbHNlCi0gICAgICAgIHNpbmtfZmx1c2hfc3RvcF9wcm9iZV9jYWxsZWQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLW91dDoKLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhZF9wcm9iZV9mbHVzaF9ldmVudHMpCi17Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLQotICBzcmMgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZHVtbXlfc2VnbWVudCkpID09IFRSVUUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyYywgc2luaykgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSB8Ci0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gsIGZsdXNoX3Byb2JlX2NiLCBOVUxMLCBOVUxMKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNpbmssCi0gICAgICBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCB8IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNIHwKLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCwgZmx1c2hfcHJvYmVfY2IsIE5VTEwsIE5VTEwpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0KLSAgLyogcHVzaCBhIGJ1ZmZlciBzbyB0aGUgZXZlbnRzIGFyZSBwcm9wYWdhdGVkIGRvd25zdHJlYW0gKi8KLSAgZ3N0X3BhZF9wdXNoIChzcmMsIGdzdF9idWZmZXJfbmV3ICgpKTsKLQotICBmYWlsX3VubGVzcyAoc3JjX2ZsdXNoX3N0YXJ0X3Byb2JlX2NhbGxlZCk7Ci0gIGZhaWxfdW5sZXNzIChzcmNfZmx1c2hfc3RvcF9wcm9iZV9jYWxsZWQpOwotICBmYWlsX3VubGVzcyAoc2lua19mbHVzaF9zdGFydF9wcm9iZV9jYWxsZWQpOwotICBmYWlsX3VubGVzcyAoc2lua19mbHVzaF9zdG9wX3Byb2JlX2NhbGxlZCk7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdib29sZWFuIHByb2JlX3dhc19jYWxsZWQ7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZmx1c2hfZXZlbnRzX29ubHlfcHJvYmUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIiUiIEdTVF9QVFJfRk9STUFULCBHU1RfUEFEX1BST0JFX0lORk9fREFUQSAoaW5mbykpOwotCi0gIHByb2JlX3dhc19jYWxsZWQgPSBUUlVFOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRfcHJvYmVfZmx1c2hfZXZlbnRzX29ubHkpCi17Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLQotICBzcmMgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmMsIHNpbmspID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLQotICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjLCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gsCi0gICAgICBmbHVzaF9ldmVudHNfb25seV9wcm9iZSwgTlVMTCwgTlVMTCk7Ci0KLSAgcHJvYmVfd2FzX2NhbGxlZCA9IEZBTFNFOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZHVtbXlfc2VnbWVudCkpID09IFRSVUUpOwotICBmYWlsX2lmIChwcm9iZV93YXNfY2FsbGVkKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKHNyYywgZ3N0X2J1ZmZlcl9uZXcgKCkpLCBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfaWYgKHByb2JlX3dhc19jYWxsZWQpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLSAgZmFpbF91bmxlc3MgKHByb2JlX3dhc19jYWxsZWQpOwotCi0gIHByb2JlX3dhc19jYWxsZWQgPSBGQUxTRTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotICBmYWlsX3VubGVzcyAocHJvYmVfd2FzX2NhbGxlZCk7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2RlZmluZSBOVU1fUFJPQkVTIDQKLXN0YXRpYyBndWludCBjb3VudDsKLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1vcmRlcl9vdGhlcnNfcHJvYmVfY2IgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICAqKGd1aW50ICopICh1c2VyX2RhdGEpID0gKytjb3VudDsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9SRU1PVkU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhZF9wcm9iZV9jYWxsX29yZGVyKQotewotICBHc3RGbG93UmV0dXJuIGZsb3c7Ci0gIEdzdFBhZCAqc3JjLCAqc2luazsKLSAgZ3VpbnQgY291bnRlcnNbTlVNX1BST0JFU107Ci0gIGd1aW50IGk7Ci0KLSAgc3JjID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjLCBUUlVFKTsKLSAgc2luayA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChzaW5rLCBnc3RfY2hlY2tfY2hhaW5fZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2luaywgVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmR1bW15X3NlZ21lbnQpKSA9PSBUUlVFKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX2xpbmsgKHNyYywgc2luayksIEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9QUk9CRVM7IGkrKykgewotICAgIGdzdF9wYWRfYWRkX3Byb2JlIChzcmMsCi0gICAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIG9yZGVyX290aGVyc19wcm9iZV9jYiwgJihjb3VudGVyc1tpXSksIE5VTEwpOwotICB9Ci0KLSAgLyogcHVzaCBhIGJ1ZmZlciBzbyB0aGUgZXZlbnRzIGFyZSBwcm9wYWdhdGVkIGRvd25zdHJlYW0gKi8KLSAgZmxvdyA9IGdzdF9wYWRfcHVzaCAoc3JjLCBnc3RfYnVmZmVyX25ldyAoKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZsb3csIEdTVF9GTE9XX09LKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BST0JFUzsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3MgKGNvdW50ZXJzW2ldID09IGkgKyAxKTsKLSAgfQotCi0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnb3Rfbm90aWZ5OwotCi1zdGF0aWMgdm9pZAotY2Fwc19ub3RpZnkgKEdzdFBhZCAqIHBhZCwgR1BhcmFtU3BlYyAqIHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gIGdvdF9ub3RpZnkgPSBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9xdWV1ZV9zcmNfY2Fwc19ub3RpZnkgKGdib29sZWFuIGxpbmtfcXVldWUpCi17Ci0gIEdzdEVsZW1lbnQgKnF1ZXVlOwotICBHc3RQYWQgKnNyYywgKnNpbmssICphbm90aGVyX3BhZDsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChxdWV1ZSAhPSBOVUxMKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHNyYyAhPSBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMKTsKLQotICBpZiAobGlua19xdWV1ZSkgewotICAgIGFub3RoZXJfcGFkID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgICBmYWlsX3VubGVzcyAoYW5vdGhlcl9wYWQgIT0gTlVMTCk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChhbm90aGVyX3BhZCwgVFJVRSk7Ci0KLSAgICBnc3RfcGFkX2xpbmtfZnVsbCAoc3JjLCBhbm90aGVyX3BhZCwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICB9IGVsc2UgewotICAgIGFub3RoZXJfcGFkID0gTlVMTDsKLSAgfQotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBnb3Rfbm90aWZ5ID0gRkFMU0U7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoc3JjLCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSyAoY2Fwc19ub3RpZnkpLCBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJjYXBzIik7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAoc2luaywgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICB3aGlsZSAoZ290X25vdGlmeSA9PSBGQUxTRSkKLSAgICBnX3VzbGVlcCAoMTAwMDApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOwotICBpZiAoYW5vdGhlcl9wYWQpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChhbm90aGVyX3BhZCk7Ci0gIH0KLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcXVldWVfc3JjX2NhcHNfbm90aWZ5X2xpbmtlZCkKLXsKLSAgdGVzdF9xdWV1ZV9zcmNfY2Fwc19ub3RpZnkgKFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1QKLUdTVF9TVEFSVF9URVNUICh0ZXN0X3F1ZXVlX3NyY19jYXBzX25vdGlmeV9ub3RfbGlua2VkKQotewotICAvKiBUaGlzIHRlc3Qgd2lsbCBmYWlsIGJlY2F1c2UgcXVldWUgZG9lc24ndCBzZXQgdGhlIGNhcHMKLSAgICAgb24gc3JjIHBhZCB1bmxlc3MgaXQgaXMgbGlua2VkICovCi0gIHRlc3RfcXVldWVfc3JjX2NhcHNfbm90aWZ5IChGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2lmIDAKLXN0YXRpYyB2b2lkCi1ibG9ja19hc3luY19zZWNvbmQgKEdzdFBhZCAqIHBhZCwgZ2Jvb2xlYW4gYmxvY2tlZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnc3RfcGFkX3NldF9ibG9ja2VkIChwYWQsIEZBTFNFLCB1bmJsb2NrX2FzeW5jX2NiLCBOVUxMLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLWJsb2NrX2FzeW5jX2ZpcnN0IChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGJsb2NrZWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgc3RhdGljIGludCBuX2NhbGxzID0gMDsKLSAgZ2Jvb2xlYW4gKmJvb2xfdXNlcl9kYXRhID0gKGdib29sZWFuICopIHVzZXJfZGF0YTsKLQotICBpZiAoKytuX2NhbGxzID4gMSkKLSAgICAvKiB3ZSBleHBlY3QgdGhpcyBjYWxsYmFjayB0byBiZSBjYWxsZWQgb25seSBvbmNlICovCi0gICAgZ193YXJuX2lmX3JlYWNoZWQgKCk7Ci0KLSAgKmJvb2xfdXNlcl9kYXRhID0gYmxvY2tlZDsKLQotICAvKiByZXBsYWNlIGJsb2NrX2FzeW5jX2ZpcnN0IHdpdGggYmxvY2tfYXN5bmNfc2Vjb25kIHNvIG5leHQgdGltZSB0aGUgcGFkIGlzCi0gICAqIGJsb2NrZWQgdGhlIGxhdHRlciBzaG91bGQgYmUgY2FsbGVkICovCi0gIGdzdF9wYWRfc2V0X2Jsb2NrZWQgKHBhZCwgVFJVRSwgYmxvY2tfYXN5bmNfc2Vjb25kLCBOVUxMLCBOVUxMKTsKLQotICAvKiB1bmJsb2NrIHRlbXBvcmFyaWx5LCBpbiB0aGUgbmV4dCBwdXNoIGJsb2NrX2FzeW5jX3NlY29uZCBzaG91bGQgYmUgY2FsbGVkCi0gICAqLwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Jsb2NrX2FzeW5jX3JlcGxhY2VfY2FsbGJhY2spCi17Ci0gIEdzdFBhZCAqcGFkOwotICBnYm9vbGVhbiBibG9ja2VkOwotCi0gIHBhZCA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX3VubGVzcyAocGFkICE9IE5VTEwpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYmxvY2tlZCAocGFkLCBUUlVFLCBibG9ja19hc3luY19maXJzdCwgJmJsb2NrZWQsIE5VTEwpOwotICBibG9ja2VkID0gRkFMU0U7Ci0KLSAgZ3N0X3BhZF9wdXNoIChwYWQsIGdzdF9idWZmZXJfbmV3ICgpKTsKLSAgZmFpbF91bmxlc3MgKGJsb2NrZWQgPT0gVFJVRSk7Ci0gIC8qIGJsb2NrX2FzeW5jX2ZpcnN0IGZsdXNoZXMgdG8gdW5ibG9jayAqLwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wICgpKTsKLQotICAvKiBwdXNoIGFnYWluLCB0aGlzIHRpbWUgYmxvY2tfYXN5bmNfc2Vjb25kIHNob3VsZCBiZSBjYWxsZWQgKi8KLSAgZ3N0X3BhZF9wdXNoIChwYWQsIGdzdF9idWZmZXJfbmV3ICgpKTsKLSAgZmFpbF91bmxlc3MgKGJsb2NrZWQgPT0gVFJVRSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLX0KLQotR1NUX0VORF9URVNUOwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1ibG9ja19hc3luY19mdWxsX2Rlc3Ryb3kgKGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2ludCAqc3RhdGUgPSAoZ2ludCAqKSB1c2VyX2RhdGE7Ci0KLSAgZmFpbF91bmxlc3MgKCpzdGF0ZSA8IDIpOwotCi0gIEdTVF9ERUJVRyAoInNldHRpbmcgc3RhdGUgdG8gMiIpOwotICAqc3RhdGUgPSAyOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWJsb2NrX2FzeW5jX2Z1bGxfY2IgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICAqKGdpbnQgKikgdXNlcl9kYXRhID0gKGdpbnQpIFRSVUU7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICBHU1RfREVCVUcgKCJzZXR0aW5nIHN0YXRlIHRvIDEiKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmxvY2tfYXN5bmNfZnVsbF9kZXN0cm95KQotewotICBHc3RQYWQgKnBhZDsKLSAgLyogMCA9IHVuYmxvY2tlZCwgMSA9IGJsb2NrZWQsIDIgPSBkZXN0cm95ZWQgKi8KLSAgZ2ludCBzdGF0ZSA9IDA7Ci0gIGd1bG9uZyBpZDsKLQotICBwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0KLSAgaWQgPSBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0ssIGJsb2NrX2FzeW5jX2Z1bGxfY2IsCi0gICAgICAmc3RhdGUsIGJsb2NrX2FzeW5jX2Z1bGxfZGVzdHJveSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZSA9PSAwKTsKLQotICBnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpOwotICAvKiBibG9ja19hc3luY19mdWxsX2NiIHNldHMgc3RhdGUgdG8gMSBhbmQgdGhlbiBmbHVzaGVzIHRvIHVuYmxvY2sgdGVtcG9yYXJpbHkKLSAgICovCi0gIGZhaWxfdW5sZXNzIChzdGF0ZSA9PSAxKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotCi0gIC8qIHVuYmxvY2sgY2FsbGJhY2sgaXMgY2FsbGVkICovCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIGlkKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlID09IDIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmxvY2tfYXN5bmNfZnVsbF9kZXN0cm95X2Rpc3Bvc2UpCi17Ci0gIEdzdFBhZCAqcGFkOwotICAvKiAwID0gdW5ibG9ja2VkLCAxID0gYmxvY2tlZCwgMiA9IGRlc3Ryb3llZCAqLwotICBnaW50IHN0YXRlID0gMDsKLQotICBwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdW1teV9zZWdtZW50KSkgPT0gVFJVRSk7Ci0KLSAgKHZvaWQpIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSywgYmxvY2tfYXN5bmNfZnVsbF9jYiwKLSAgICAgICZzdGF0ZSwgYmxvY2tfYXN5bmNfZnVsbF9kZXN0cm95KTsKLQotICBnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpOwotICAvKiBibG9ja19hc3luY19mdWxsX2NiIHNldHMgc3RhdGUgdG8gMSBhbmQgdGhlbiBmbHVzaGVzIHRvIHVuYmxvY2sgdGVtcG9yYXJpbHkKLSAgICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0YXRlLCAxKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotCi0gIC8qIGdzdF9CTE9DSyBjYWxscyB0aGUgZGVzdHJveV9ub3RpZnkgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5ICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3RhdGUsIDIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotI2lmIDAKLXN0YXRpYyB2b2lkCi11bmJsb2NrX2FzeW5jX25vX2ZsdXNoX2NiIChHc3RQYWQgKiBwYWQsIGdib29sZWFuIGJsb2NrZWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gKmJvb2xfdXNlcl9kYXRhID0gKGdib29sZWFuICopIHVzZXJfZGF0YTsKLQotICAvKiBoZXJlIHdlIHNob3VsZCBoYXZlIGJsb2NrZWQgPT0gMSB1bmJsb2NrZWQgPT0gMCAqLwotCi0gIGZhaWxfdW5sZXNzIChibG9ja2VkID09IEZBTFNFKTsKLQotICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMF0gPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVsxXSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGJvb2xfdXNlcl9kYXRhWzJdID09IEZBTFNFKTsKLQotICBib29sX3VzZXJfZGF0YVsyXSA9IFRSVUU7Ci19Ci0jZW5kaWYKLQotCi0jaWYgMAotc3RhdGljIHZvaWQKLXVuYmxvY2tfYXN5bmNfbm90X2NhbGxlZCAoR3N0UGFkICogcGFkLCBnYm9vbGVhbiBibG9ja2VkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfd2Fybl9pZl9yZWFjaGVkICgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotYmxvY2tfYXN5bmNfc2Vjb25kX25vX2ZsdXNoIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnYm9vbGVhbiAqYm9vbF91c2VyX2RhdGEgPSAoZ2Jvb2xlYW4gKikgdXNlcl9kYXRhOwotCi0gIEdTVF9ERUJVRyAoInNlY29uZCBwcm9iZSBjYWxsZWQiKTsKLQotICBmYWlsX3VubGVzcyAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSyk7Ci0KLSAgZmFpbF91bmxlc3MgKGJvb2xfdXNlcl9kYXRhWzBdID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMV0gPT0gRkFMU0UpOwotICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMl0gPT0gRkFMU0UpOwotCi0gIGJvb2xfdXNlcl9kYXRhWzFdID0gVFJVRTsKLQotICBHU1RfREVCVUcgKCJyZW1vdmluZyBzZWNvbmQgcHJvYmUgd2l0aCBpZCAlbHUiLCBpZCk7Ci0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIGlkKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1ibG9ja19hc3luY19maXJzdF9ub19mbHVzaCAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgc3RhdGljIGludCBuX2NhbGxzID0gMDsKLSAgZ2Jvb2xlYW4gKmJvb2xfdXNlcl9kYXRhID0gKGdib29sZWFuICopIHVzZXJfZGF0YTsKLQotICBmYWlsX3VubGVzcyAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSyk7Ci0KLSAgR1NUX0RFQlVHICgiZmlyc3QgcHJvYmUgY2FsbGVkIik7Ci0KLSAgaWYgKCsrbl9jYWxscyA+IDEpCi0gICAgLyogd2UgZXhwZWN0IHRoaXMgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9ubHkgb25jZSAqLwotICAgIGdfd2Fybl9pZl9yZWFjaGVkICgpOwotCi0gICpib29sX3VzZXJfZGF0YSA9IFRSVUU7Ci0KLSAgZmFpbF91bmxlc3MgKGJvb2xfdXNlcl9kYXRhWzBdID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMV0gPT0gRkFMU0UpOwotICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMl0gPT0gRkFMU0UpOwotCi0gIEdTVF9ERUJVRyAoInJlbW92aW5nIGZpcnN0IHByb2JlIHdpdGggaWQgJWx1IiwgaWQpOwotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCBpZCk7Ci0KLSAgR1NUX0RFQlVHICgiYWRkaW5nIHNlY29uZCBwcm9iZSIpOwotICAvKiByZXBsYWNlIGJsb2NrX2FzeW5jX2ZpcnN0IHdpdGggYmxvY2tfYXN5bmNfc2Vjb25kIHNvIG5leHQgdGltZSB0aGUgcGFkIGlzCi0gICAqIGJsb2NrZWQgdGhlIGxhdHRlciBzaG91bGQgYmUgY2FsbGVkICovCi0gIGlkID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLLAotICAgICAgYmxvY2tfYXN5bmNfc2Vjb25kX25vX2ZsdXNoLCB1c2VyX2RhdGEsIE5VTEwpOwotICBHU1RfREVCVUcgKCJhZGRlZCBwcm9iZSB3aXRoIGlkICVsdSIsIGlkKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmxvY2tfYXN5bmNfcmVwbGFjZV9jYWxsYmFja19ub19mbHVzaCkKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIGdib29sZWFuIGJvb2xfdXNlcl9kYXRhWzNdID0geyBGQUxTRSwgRkFMU0UsIEZBTFNFIH07Ci0KLSAgcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZHVtbXlfc2VnbWVudCkpID09IFRSVUUpOwotCi0gIEdTVF9ERUJVRyAoImFkZGluZyBwcm9iZSIpOwotICBpZCA9IGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSywKLSAgICAgIGJsb2NrX2FzeW5jX2ZpcnN0X25vX2ZsdXNoLCBib29sX3VzZXJfZGF0YSwgTlVMTCk7Ci0gIEdTVF9ERUJVRyAoImFkZGVkIHByb2JlIHdpdGggaWQgJWx1IiwgaWQpOwotICBmYWlsX2lmIChpZCA9PSAwKTsKLQotICBHU1RfREVCVUcgKCJwdXNoaW5nIGJ1ZmZlciIpOwotICBnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpOwotICBmYWlsX3VubGVzcyAoYm9vbF91c2VyX2RhdGFbMF0gPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChib29sX3VzZXJfZGF0YVsxXSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGJvb2xfdXNlcl9kYXRhWzJdID09IEZBTFNFKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnaW50IHN0aWNreV9jb3VudDsKLQotc3RhdGljIGdib29sZWFuCi10ZXN0X3N0aWNreV9ldmVudHNfaGFuZGxlciAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIGV2ZW50ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0KLSAgc3dpdGNoIChzdGlja3lfY291bnQpIHsKLSAgICBjYXNlIDA6Ci0gICAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotICAgICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQ0FQUyk7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjYXBzKSA9PSAxKTsKLSAgICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiZm9vL2JheiIpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIDI6Ci0gICAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZmFpbF91bmxlc3MgKEZBTFNFKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIHN0aWNreV9jb3VudCsrOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdGVzdF9zdGlja3lfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RpY2t5X2V2ZW50cykKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RTZWdtZW50IHNlZzsKLSAgZ2NoYXIgKmlkOwotCi0gIC8qIG1ha2UgdW5saW5rZWQgc3JjcGFkICovCi0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgVFJVRSk7Ci0KLSAgLyogdGVzdCBzdHJlYW0tc3RhcnQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfZ2V0X3N0cmVhbV9pZCAoc3JjcGFkKSA9PSBOVUxMKTsKLQotICAvKiBwdXNoIGFuIGV2ZW50LCBpdCBzaG91bGQgYmUgc3RpY2t5IG9uIHRoZSBzcmNwYWQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLQotICAvKiBsZXQncyBzZWUgaWYgaXQgc3R1Y2sgKi8KLSAgaWQgPSBnc3RfcGFkX2dldF9zdHJlYW1faWQgKHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGlkLCAidGVzdCIpOwotICBnX2ZyZWUgKGlkKTsKLQotICAvKiBtYWtlIGEgY2FwcyBldmVudCAqLwotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImZvby9iYXIiKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogbWFrZSBzZWdtZW50IGV2ZW50ICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWcsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWcpKTsKLQotICAvKiBub3cgbWFrZSBhIHNpbmtwYWQgKi8KLSAgc2lua3BhZCA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOwotICBzdGlja3lfY291bnQgPSAwOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2lua3BhZCwgdGVzdF9zdGlja3lfZXZlbnRzX2hhbmRsZXIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2lua3BhZCwgdGVzdF9zdGlja3lfY2hhaW4pOwotICBmYWlsX3VubGVzcyAoc3RpY2t5X2NvdW50ID09IDApOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOwotCi0gIC8qIGxpbmsgdGhlIHBhZHMgKi8KLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotICAvKiBzaG91bGQgbm90IHRyaWdnZXIgZXZlbnRzICovCi0gIGZhaWxfdW5sZXNzIChzdGlja3lfY291bnQgPT0gMCk7Ci0KLSAgLyogY2FwcyByZXBsYWNlcyBvbGQgY2FwcyBldmVudCBhdCBwb3NpdGlvbiAyLCB0aGUgcHVzaGVzIGFsbAotICAgKiBwZW5kaW5nIGV2ZW50cyAqLwotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImZvby9iYXoiKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogc2hvdWxkIGhhdmUgdHJpZ2dlcmVkIDIgZXZlbnRzLCB0aGUgc2VnbWVudCBldmVudCBpcyBzdGlsbCBwZW5kaW5nICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0aWNreV9jb3VudCwgMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBnc3RfYnVmZmVyX25ldyAoKSkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIHNob3VsZCBoYXZlIHRyaWdnZXJlZCAzIGV2ZW50cyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdGlja3lfY291bnQsIDMpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIG5leHRfcmV0dXJuOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdGVzdF9sYXN0Zmxvd19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgcmV0dXJuIG5leHRfcmV0dXJuOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9sYXN0X2Zsb3dfcmV0dXJuX3B1c2gpCi17Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLSAgR3N0U2VnbWVudCBzZWc7Ci0KLSAgc3JjcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7Ci0gIHNpbmtwYWQgPSBnc3RfcGFkX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkspOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmtwYWQsIHRlc3RfbGFzdGZsb3dfY2hhaW4pOwotICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0KLSAgLyogaW5pdGlhbCB2YWx1ZSBpcyBmbHVzaGluZyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybiAoc3JjcGFkKSA9PSBHU1RfRkxPV19GTFVTSElORyk7Ci0KLSAgLyogd2hlbiBhY3RpdmUgaXQgZ29lcyB0byBvayAqLwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuIChzcmNwYWQpID09IEdTVF9GTE9XX09LKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkLCBUUlVFKTsKLQotICAvKiBzdGFydHVwIGV2ZW50cyAqLwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnKSk7Ci0KLQotICAvKiBwdXNoIE9rICovCi0gIG5leHRfcmV0dXJuID0gR1NUX0ZMT1dfT0s7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY3BhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4gKHNyY3BhZCkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIHB1c2ggbm90LWxpbmtlZCAqLwotICBuZXh0X3JldHVybiA9IEdTVF9GTE9XX05PVF9MSU5LRUQ7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY3BhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX05PVF9MSU5LRUQpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybiAoc3JjcGFkKSA9PSBHU1RfRkxPV19OT1RfTElOS0VEKTsKLQotICAvKiBwdXNoIG5vdC1saW5rZWQgKi8KLSAgbmV4dF9yZXR1cm4gPSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuIChzcmNwYWQpID09Ci0gICAgICBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0KLSAgLyogcHVzaCBlcnJvciAqLwotICBuZXh0X3JldHVybiA9IEdTVF9GTE9XX0VSUk9SOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGdzdF9idWZmZXJfbmV3ICgpKSA9PSBHU1RfRkxPV19FUlJPUik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuIChzcmNwYWQpID09IEdTVF9GTE9XX0VSUk9SKTsKLQotICAvKiBiYWNrIHRvIG9rICovCi0gIG5leHRfcmV0dXJuID0gR1NUX0ZMT1dfT0s7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY3BhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4gKHNyY3BhZCkgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIHVubGlua2VkIHB1c2ggKi8KLSAgZ3N0X3BhZF91bmxpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY3BhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpID09IEdTVF9GTE9XX05PVF9MSU5LRUQpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybiAoc3JjcGFkKSA9PSBHU1RfRkxPV19OT1RfTElOS0VEKTsKLQotICBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4gKHNyY3BhZCkgPT0gR1NUX0ZMT1dfRU9TKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdGVzdF9sYXN0Zmxvd19nZXRyYW5nZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIGd1aW50NjQgb2Zmc2V0LAotICAgIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICoqIGJ1ZikKLXsKLSAgaWYgKG5leHRfcmV0dXJuID09IEdTVF9GTE9XX09LKQotICAgICpidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZWxzZQotICAgICpidWYgPSBOVUxMOwotICByZXR1cm4gbmV4dF9yZXR1cm47Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotdGVzdF9sYXN0Zmxvd19hY3RpdmF0ZV9wdWxsX2Z1bmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogb2JqZWN0KQotewotICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGFzdF9mbG93X3JldHVybl9wdWxsKQotewotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKLQotICBzcmNwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLSAgc2lua3BhZCA9IGdzdF9wYWRfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOwotICBnc3RfcGFkX3NldF9nZXRyYW5nZV9mdW5jdGlvbiAoc3JjcGFkLCB0ZXN0X2xhc3RmbG93X2dldHJhbmdlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKHNpbmtwYWQsIHRlc3RfbGFzdGZsb3dfYWN0aXZhdGVfcHVsbF9mdW5jKTsKLSAgZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotCi0gIC8qIGluaXRpYWwgdmFsdWUgaXMgZmx1c2hpbmcgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4gKHNpbmtwYWQpID09IEdTVF9GTE9XX0ZMVVNISU5HKTsKLQotICAvKiB3aGVuIGFjdGl2ZSBpdCBnb2VzIHRvIG9rICovCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuIChzaW5rcGFkKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLQotICAvKiBwdWxsIE9rICovCi0gIG5leHRfcmV0dXJuID0gR1NUX0ZMT1dfT0s7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1bGxfcmFuZ2UgKHNpbmtwYWQsIDAsIDEsICZidWYpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4gKHNpbmtwYWQpID09IEdTVF9GTE9XX09LKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgYnVmID0gTlVMTDsKLQotICAvKiBwdWxsIG5vdC1saW5rZWQgKi8KLSAgbmV4dF9yZXR1cm4gPSBHU1RfRkxPV19OT1RfTElOS0VEOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdWxsX3JhbmdlIChzaW5rcGFkLCAwLCAxLCAmYnVmKSA9PSBHU1RfRkxPV19OT1RfTElOS0VEKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4gKHNpbmtwYWQpID09IEdTVF9GTE9XX05PVF9MSU5LRUQpOwotCi0gIC8qIHB1bGwgZXJyb3IgKi8KLSAgbmV4dF9yZXR1cm4gPSBHU1RfRkxPV19FUlJPUjsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVsbF9yYW5nZSAoc2lua3BhZCwgMCwgMSwgJmJ1ZikgPT0gR1NUX0ZMT1dfRVJST1IpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybiAoc2lua3BhZCkgPT0gR1NUX0ZMT1dfRVJST1IpOwotCi0gIC8qIHB1bGwgbm90LW5lZ28gKi8KLSAgbmV4dF9yZXR1cm4gPSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVsbF9yYW5nZSAoc2lua3BhZCwgMCwgMSwKLSAgICAgICAgICAmYnVmKSA9PSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuIChzaW5rcGFkKSA9PQotICAgICAgR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotCi0gIC8qIHB1bGwgb2sgYWdhaW4gKi8KLSAgbmV4dF9yZXR1cm4gPSBHU1RfRkxPV19PSzsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVsbF9yYW5nZSAoc2lua3BhZCwgMCwgMSwgJmJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybiAoc2lua3BhZCkgPT0gR1NUX0ZMT1dfT0spOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBidWYgPSBOVUxMOwotCi0gIC8qIHVubGlua2VkIHBhZHMgKi8KLSAgZ3N0X3BhZF91bmxpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1bGxfcmFuZ2UgKHNpbmtwYWQsIDAsIDEsICZidWYpID09IEdTVF9GTE9XX05PVF9MSU5LRUQpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9nZXRfbGFzdF9mbG93X3JldHVybiAoc2lua3BhZCkgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCk7Ci0KLSAgLyogZW9zICovCi0gIGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgbmV4dF9yZXR1cm4gPSBHU1RfRkxPV19FT1M7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1bGxfcmFuZ2UgKHNpbmtwYWQsIDAsIDEsICZidWYpID09IEdTVF9GTE9XX0VPUyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2dldF9sYXN0X2Zsb3dfcmV0dXJuIChzaW5rcGFkKSA9PSBHU1RfRkxPV19FT1MpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZsdXNoX3N0b3BfaW5hY3RpdmUpCi17Ci0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLQotICBzaW5rcGFkID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCk7Ci0KLSAgLyogbmV3IHBhZHMgYXJlIGluYWN0aXZlIGFuZCBmbHVzaGluZyAqLwotICBmYWlsX2lmIChHU1RfUEFEX0lTX0FDVElWRSAoc2lua3BhZCkpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19GTFVTSElORyAoc2lua3BhZCkpOwotCi0gIC8qIHRoaXMgc2hvdWxkIGZhaWwsIHBhZCBpcyBpbmFjdGl2ZSAqLwotICBmYWlsX2lmIChnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoRkFMU0UpKSk7Ci0KLSAgLyogbm90aGluZyBzaG91bGQgaGF2ZSBjaGFuZ2VkICovCi0gIGZhaWxfaWYgKEdTVF9QQURfSVNfQUNUSVZFIChzaW5rcGFkKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX0ZMVVNISU5HIChzaW5rcGFkKSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkLCBUUlVFKTsKLQotICAvKiBwYWQgaXMgbm93IGFjdGl2ZSBhbiBub3QgZmx1c2hpbmcgYW55bW9yZSAqLwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19BQ1RJVkUgKHNpbmtwYWQpKTsKLSAgZmFpbF9pZiAoR1NUX1BBRF9JU19GTFVTSElORyAoc2lua3BhZCkpOwotCi0gIC8qIGRvIGZsdXNoLCBkb2VzIG5vdCBkZWFjdGl2YXRlIHRoZSBwYWQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSkpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19BQ1RJVkUgKHNpbmtwYWQpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHNpbmtwYWQpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKEZBTFNFKSkpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19BQ1RJVkUgKHNpbmtwYWQpKTsKLSAgZmFpbF9pZiAoR1NUX1BBRF9JU19GTFVTSElORyAoc2lua3BhZCkpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgRkFMU0UpOwotICBmYWlsX2lmIChHU1RfUEFEX0lTX0FDVElWRSAoc2lua3BhZCkpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19GTFVTSElORyAoc2lua3BhZCkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIC8qIHdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBwdXNoIG9uIGFuIGluYWN0aXZlIHNyY3BhZCAqLwotICBzcmNwYWQgPSBnc3RfcGFkX25ldyAoInNyYyIsIEdTVF9QQURfU1JDKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLQotICBmYWlsX2lmIChHU1RfUEFEX0lTX0FDVElWRSAoc3JjcGFkKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX0ZMVVNISU5HIChzcmNwYWQpKTsKLQotICBmYWlsX2lmIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChGQUxTRSkpKTsKLQotICAvKiBzaG91bGQgc3RpbGwgYmUgaW5hY3RpdmUgYW5kIGZsdXNoaW5nICovCi0gIGZhaWxfaWYgKEdTVF9QQURfSVNfQUNUSVZFIChzcmNwYWQpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHNyY3BhZCkpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLQotICAvKiBwYWQgaXMgbm93IGFjdGl2ZSBhbiBub3QgZmx1c2hpbmcgYW55bW9yZSAqLwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19BQ1RJVkUgKHNyY3BhZCkpOwotICBmYWlsX2lmIChHU1RfUEFEX0lTX0ZMVVNISU5HIChzcmNwYWQpKTsKLQotICAvKiBkbyBmbHVzaCwgZG9lcyBub3QgZGVhY3RpdmF0ZSB0aGUgcGFkICovCi0gIGZhaWxfaWYgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX0FDVElWRSAoc3JjcGFkKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfUEFEX0lTX0ZMVVNISU5HIChzcmNwYWQpKTsKLQotICBmYWlsX2lmIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChGQUxTRSkpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfQUNUSVZFIChzcmNwYWQpKTsKLSAgZmFpbF9pZiAoR1NUX1BBRF9JU19GTFVTSElORyAoc3JjcGFkKSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNwYWQsIEZBTFNFKTsKLSAgZmFpbF9pZiAoR1NUX1BBRF9JU19BQ1RJVkUgKHNyY3BhZCkpOwotICBmYWlsX3VubGVzcyAoR1NUX1BBRF9JU19GTFVTSElORyAoc3JjcGFkKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBGb3IgcHJveHkgY2FwcyBmbGFnIHRlc3RzICovCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQcm94eVRlc3RFbGVtZW50IEdzdFByb3h5VGVzdEVsZW1lbnQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UHJveHlUZXN0RWxlbWVudENsYXNzIEdzdFByb3h5VGVzdEVsZW1lbnRDbGFzczsKLQotc3RydWN0IF9Hc3RQcm94eVRlc3RFbGVtZW50Ci17Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLX07Ci0KLXN0cnVjdCBfR3N0UHJveHlUZXN0RWxlbWVudENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X3Byb3h5dGVzdGVsZW1lbnRfZ2V0X3R5cGUgKHZvaWQpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcHJveHl0ZXN0ZWxlbWVudF9wZWVyX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInRlc3QvcHJveHksIG9wdGlvbj0oaW50KTEiKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBwcm94eXRlc3RlbGVtZW50X3BlZXJfaW5jb21wYXRpYmxlX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInRlc3QvcHJveHktaW5jb21wYXRpYmxlIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcHJveHl0ZXN0ZWxlbWVudF9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInRlc3QvcHJveHkiKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBwcm94eXRlc3RlbGVtZW50X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFByb3h5VGVzdEVsZW1lbnQsIGdzdF9wcm94eXRlc3RlbGVtZW50LCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9wcm94eXRlc3RlbGVtZW50X2NsYXNzX2luaXQgKEdzdFByb3h5VGVzdEVsZW1lbnRDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUHJveHkgVGVzdCBFbGVtZW50IiwgIlRlc3QiLCAiUHJveHkgdGVzdCBlbGVtZW50IiwKLSAgICAgICJUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmcHJveHl0ZXN0ZWxlbWVudF9zaW5rX3RlbXBsYXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wcm94eXRlc3RlbGVtZW50X2luaXQgKEdzdFByb3h5VGVzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIHNpbmtwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZwcm94eXRlc3RlbGVtZW50X3NpbmtfdGVtcGxhdGUsCi0gICAgICAic2luayIpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChzaW5rcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoZWxlbWVudCksIHNpbmtwYWQpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wcm94eV9hY2NlcHRfY2Fwc19ub19wcm94eSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChOVUxMLCAicHJveHl0ZXN0ZWxlbWVudCIsIEdTVF9SQU5LX05PTkUsCi0gICAgICBnc3RfcHJveHl0ZXN0ZWxlbWVudF9nZXRfdHlwZSAoKSk7Ci0gIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwcm94eXRlc3RlbGVtZW50IiwgTlVMTCk7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgInNpbmsiKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L3Byb3h5Iik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3F1ZXJ5X2FjY2VwdF9jYXBzIChzaW5rcGFkLCBjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L2JhZCIpOwotICBmYWlsX2lmIChnc3RfcGFkX3F1ZXJ5X2FjY2VwdF9jYXBzIChzaW5rcGFkLCBjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHJveHlfYWNjZXB0X2NhcHNfd2l0aF9wcm94eSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR3N0UGFkICpzaW5rcGFkLCAqc3JjcGFkOwotICBHc3RQYWQgKnBlZXJwYWQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKE5VTEwsICJwcm94eXRlc3RlbGVtZW50IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIGdzdF9wcm94eXRlc3RlbGVtZW50X2dldF90eXBlICgpKTsKLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInByb3h5dGVzdGVsZW1lbnQiLCBOVUxMKTsKLQotICBzcmNwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZwcm94eXRlc3RlbGVtZW50X3NyY190ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChlbGVtZW50KSwgc3JjcGFkKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsICJzaW5rIik7Ci0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCAic3JjIik7Ci0KLSAgcGVlcnBhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnByb3h5dGVzdGVsZW1lbnRfcGVlcl90ZW1wbGF0ZSwKLSAgICAgICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgcGVlcnBhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwZWVycGFkLCBUUlVFKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L2JhZCIpOwotICBmYWlsX2lmIChnc3RfcGFkX3F1ZXJ5X2FjY2VwdF9jYXBzIChzaW5rcGFkLCBjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L3Byb3h5LCBvcHRpb249KGludCkxIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3F1ZXJ5X2FjY2VwdF9jYXBzIChzaW5rcGFkLCBjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L3Byb3h5LCBvcHRpb249KGludCkyIik7Ci0gIGZhaWxfaWYgKGdzdF9wYWRfcXVlcnlfYWNjZXB0X2NhcHMgKHNpbmtwYWQsIGNhcHMpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBlZXJwYWQsIEZBTFNFKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcnBhZCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wcm94eV9hY2NlcHRfY2Fwc193aXRoX2luY29tcGF0aWJsZV9wcm94eSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR3N0UGFkICpzaW5rcGFkLCAqc3JjcGFkOwotICBHc3RQYWQgKnBlZXJwYWQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKE5VTEwsICJwcm94eXRlc3RlbGVtZW50IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIGdzdF9wcm94eXRlc3RlbGVtZW50X2dldF90eXBlICgpKTsKLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInByb3h5dGVzdGVsZW1lbnQiLCBOVUxMKTsKLQotICBzcmNwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZwcm94eXRlc3RlbGVtZW50X3NyY190ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChlbGVtZW50KSwgc3JjcGFkKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsICJzaW5rIik7Ci0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCAic3JjIik7Ci0KLSAgcGVlcnBhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZQotICAgICAgKCZwcm94eXRlc3RlbGVtZW50X3BlZXJfaW5jb21wYXRpYmxlX3RlbXBsYXRlLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQsIHBlZXJwYWQpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidGVzdC9iYWQiKTsKLSAgZmFpbF9pZiAoZ3N0X3BhZF9xdWVyeV9hY2NlcHRfY2FwcyAoc2lua3BhZCwgY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidGVzdC9wcm94eSIpOwotICBmYWlsX2lmIChnc3RfcGFkX3F1ZXJ5X2FjY2VwdF9jYXBzIChzaW5rcGFkLCBjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ0ZXN0L3Byb3h5LWluY29tcGF0aWJsZSIpOwotICBmYWlsX2lmIChnc3RfcGFkX3F1ZXJ5X2FjY2VwdF9jYXBzIChzaW5rcGFkLCBjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwZWVycGFkLCBGQUxTRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXJwYWQpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdzdFNlZ21lbnQgc2lua19zZWdtZW50Owotc3RhdGljIGdpbnQgc2lua19zZWdtZW50X2NvdW50ZXI7Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2VnbWVudF9ldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmc2lua19zZWdtZW50KTsKLSAgICAgIHNpbmtfc2VnbWVudF9jb3VudGVyKys7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3BhZF9vZmZzZXQgKGdib29sZWFuIG9uX3NyY3BhZCkKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkLCAqb2Zmc2V0X3BhZDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotCi0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotICBzaW5rcGFkID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLQotICBvZmZzZXRfcGFkID0gb25fc3JjcGFkID8gc3JjcGFkIDogc2lua3BhZDsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2lua19zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIHNpbmtfc2VnbWVudF9jb3VudGVyID0gMDsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmtwYWQsIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNpbmtwYWQsIHNlZ21lbnRfZXZlbnRfZnVuYyk7Ci0KLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSwgR1NUX1BBRF9MSU5LX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNwYWQsIFRSVUUpKTsKLQotICAvKiBTZXQgYW4gb2Zmc2V0IG9mIDVzLCBtZWFuaW5nOgotICAgKiBzZWdtZW50IHBvc2l0aW9uIDAgZ2l2ZXMgcnVubmluZyB0aW1lIDVzLCBzdHJlYW0gdGltZSAwcwotICAgKiBzZWdtZW50IHN0YXJ0IG9mIDAgc2hvdWxkIHN0YXkgMAotICAgKi8KLSAgZ3N0X3BhZF9zZXRfb2Zmc2V0IChvZmZzZXRfcGFkLCA1ICogR1NUX1NFQ09ORCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKSA9PSBUUlVFKTsKLSAgLyogV2Ugc2hvdWxkIGhhdmUgbm8gc2VnbWVudCBldmVudCB5ZXQgKi8KLSAgZmFpbF9pZiAoc2lua19zZWdtZW50LmZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNpbmtfc2VnbWVudF9jb3VudGVyLCAwKTsKLQotICAvKiBTZW5kIHNlZ21lbnQgZXZlbnQsIGV4cGVjdCBpdCB0byBhcnJpdmUgd2l0aCBhIG1vZGlmaWVkIHN0YXJ0IHJ1bm5pbmcgdGltZSAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSA9PSBUUlVFKTsKLSAgZmFpbF9pZiAoc2lua19zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHNpbmtfc2VnbWVudC5zdGFydCksIDUgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzaW5rX3NlZ21lbnQuc3RhcnQpLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKHNpbmtfc2VnbWVudC5zdGFydCwgMCAqIEdTVF9TRUNPTkQpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNpbmtfc2VnbWVudF9jb3VudGVyLCAxKTsKLQotICAvKiBTZW5kIGEgYnVmZmVyIGFuZCBjaGVjayBpZiBhbGwgdGltZXN0YW1wcyBhcmUgYXMgZXhwZWN0ZWQsIGFuZCBlc3BlY2lhbGx5Ci0gICAqIGlmIHRoZSBidWZmZXIgdGltZXN0YW1wIHdhcyBub3QgY2hhbmdlZCAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSAwICogR1NUX1NFQ09ORDsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGJ1ZmZlciksIEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGJ1ZmZlciA9IGJ1ZmZlcnMtPmRhdGE7Ci0gIGJ1ZmZlcnMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGJ1ZmZlcnMsIGJ1ZmZlcnMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSksIDUgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlciksIDAgKiBHU1RfU0VDT05EKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzaW5rX3NlZ21lbnRfY291bnRlciwgMSk7Ci0KLSAgLyogU2V0IGEgbmVnYXRpdmUgb2Zmc2V0IG9mIC01cywgbWVhbmluZzoKLSAgICogc2VnbWVudCBwb3NpdGlvbiA1cyBnaXZlcyBydW5uaW5nIHRpbWUgMHMsIHN0cmVhbSB0aW1lIDVzCi0gICAqIHNlZ21lbnQgc3RhcnQgd291bGQgaGF2ZSBhIG5lZ2F0aXZlIHJ1bm5pbmcgdGltZSEKLSAgICovCi0gIGdzdF9wYWRfc2V0X29mZnNldCAob2Zmc2V0X3BhZCwgLTUgKiBHU1RfU0VDT05EKTsKLQotICAvKiBTZWdtZW50IHNob3VsZCBzdGlsbCBiZSB0aGUgc2FtZSBhcyBiZWZvcmUgKi8KLSAgZmFpbF9pZiAoc2lua19zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHNpbmtfc2VnbWVudC5zdGFydCksIDUgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzaW5rX3NlZ21lbnQuc3RhcnQpLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKHNpbmtfc2VnbWVudC5zdGFydCwgMCAqIEdTVF9TRUNPTkQpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNpbmtfc2VnbWVudF9jb3VudGVyLCAxKTsKLQotICAvKiBTZW5kIHNlZ21lbnQgZXZlbnQsIGV4cGVjdCBpdCB0byBhcnJpdmUgd2l0aCBhIG1vZGlmaWVkIHN0YXJ0IHJ1bm5pbmcgdGltZSAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSA9PSBUUlVFKTsKLSAgZmFpbF9pZiAoc2lua19zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHNpbmtfc2VnbWVudC5zdGFydCArIDUgKiBHU1RfU0VDT05EKSwKLSAgICAgIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzaW5rX3NlZ21lbnQuc3RhcnQgKyA1ICogR1NUX1NFQ09ORCksCi0gICAgICA1ICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKHNpbmtfc2VnbWVudC5zdGFydCwgMCAqIEdTVF9TRUNPTkQpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNpbmtfc2VnbWVudF9jb3VudGVyLCAyKTsKLQotICAvKiBTZW5kIGEgYnVmZmVyIGFuZCBjaGVjayBpZiBhbGwgdGltZXN0YW1wcyBhcmUgYXMgZXhwZWN0ZWQsIGFuZCBlc3BlY2lhbGx5Ci0gICAqIGlmIHRoZSBidWZmZXIgdGltZXN0YW1wIHdhcyBub3QgY2hhbmdlZCAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSA1ICogR1NUX1NFQ09ORDsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGJ1ZmZlciksIEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGJ1ZmZlciA9IGJ1ZmZlcnMtPmRhdGE7Ci0gIGJ1ZmZlcnMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGJ1ZmZlcnMsIGJ1ZmZlcnMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSksIDUgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlciksIDUgKiBHU1RfU0VDT05EKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzaW5rX3NlZ21lbnRfY291bnRlciwgMik7Ci0KLSAgLyogU2V0IG9mZnNldCB0byA1cyBhZ2Fpbiwgc2FtZSBzaXR1YXRpb24gYXMgYWJvdmUgYnV0IGRvbid0IHNlbmQgYSBuZXcKLSAgICogc2VnbWVudCBldmVudC4gVGhlIHNlZ21lbnQgc2hvdWxkIGJlIGFkanVzdGVkICpiZWZvcmUqIHRoZSBidWZmZXIgY29tZXMKLSAgICogb3V0IG9mIHRoZSBzcmNwYWQgKi8KLSAgZ3N0X3BhZF9zZXRfb2Zmc2V0IChvZmZzZXRfcGFkLCA1ICogR1NUX1NFQ09ORCk7Ci0KLSAgLyogU2VnbWVudCBzaG91bGQgc3RpbGwgYmUgdGhlIHNhbWUgYXMgYmVmb3JlICovCi0gIGZhaWxfaWYgKHNpbmtfc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzaW5rX3NlZ21lbnQuc3RhcnQgKyA1ICogR1NUX1NFQ09ORCksCi0gICAgICAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2lua19zZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgc2lua19zZWdtZW50LnN0YXJ0ICsgNSAqIEdTVF9TRUNPTkQpLAotICAgICAgNSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChzaW5rX3NlZ21lbnQuc3RhcnQsIDAgKiBHU1RfU0VDT05EKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzaW5rX3NlZ21lbnRfY291bnRlciwgMik7Ci0KLSAgLyogU2VuZCBhIGJ1ZmZlciBhbmQgY2hlY2sgaWYgYSBuZXcgc2VnbWVudCBldmVudCB3YXMgc2VudCBhbmQgYWxsIGJ1ZmZlcgotICAgKiB0aW1lc3RhbXBzIGFyZSBhcyBleHBlY3RlZCAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSAwICogR1NUX1NFQ09ORDsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGJ1ZmZlciksIEdTVF9GTE9XX09LKTsKLQotICBmYWlsX2lmIChzaW5rX3NlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2lua19zZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgc2lua19zZWdtZW50LnN0YXJ0KSwgNSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHNpbmtfc2VnbWVudC5zdGFydCksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoc2lua19zZWdtZW50LnN0YXJ0LCAwICogR1NUX1NFQ09ORCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc2lua19zZWdtZW50X2NvdW50ZXIsIDMpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgYnVmZmVyID0gYnVmZmVycy0+ZGF0YTsKLSAgYnVmZmVycyA9IGdfbGlzdF9kZWxldGVfbGluayAoYnVmZmVycywgYnVmZmVycyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9CVUZGRVJfUFRTIChidWZmZXIpKSwgNSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9CVUZGRVJfUFRTIChidWZmZXIpKSwgMCAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSwgMCAqIEdTVF9TRUNPTkQpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNpbmtfc2VnbWVudF9jb3VudGVyLCAzKTsKLQotICAvKiBTZXQgb2Zmc2V0IHRvIDEwcyBhbmQgc2VuZCBhbm90aGVyIHN0aWNreSBldmVudC4gSW4gYmV0d2VlbiBhIG5ldwotICAgKiBzZWdtZW50IGV2ZW50IHNob3VsZCd2ZSBiZWVuIHNlbnQgKi8KLSAgZ3N0X3BhZF9zZXRfb2Zmc2V0IChvZmZzZXRfcGFkLCAxMCAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIFNlZ21lbnQgc2hvdWxkIHN0aWxsIGJlIHRoZSBzYW1lIGFzIGJlZm9yZSAqLwotICBmYWlsX2lmIChzaW5rX3NlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2lua19zZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgc2lua19zZWdtZW50LnN0YXJ0KSwgNSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHNpbmtfc2VnbWVudC5zdGFydCksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoc2lua19zZWdtZW50LnN0YXJ0LCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNpbmtfc2VnbWVudF9jb3VudGVyLCAzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCkpKSA9PSBUUlVFKTsKLQotICAvKiBTZWdtZW50IHNob3VsZCBiZSB1cGRhdGVkICovCi0gIGZhaWxfaWYgKHNpbmtfc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzaW5rX3NlZ21lbnQuc3RhcnQpLCAxMCAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHNpbmtfc2VnbWVudC5zdGFydCksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoc2lua19zZWdtZW50LnN0YXJ0LCAwICogR1NUX1NFQ09ORCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc2lua19zZWdtZW50X2NvdW50ZXIsIDQpOwotCi0gIC8qIFNldCBvZmZzZXQgdG8gMTVzIGFuZCBkbyBhIHNlcmlhbGl6ZWQgcXVlcnkuIEluIGJldHdlZW4gYSBuZXcKLSAgICogc2VnbWVudCBldmVudCBzaG91bGQndmUgYmVlbiBzZW50ICovCi0gIGdzdF9wYWRfc2V0X29mZnNldCAob2Zmc2V0X3BhZCwgMTUgKiBHU1RfU0VDT05EKTsKLQotICAvKiBTZWdtZW50IHNob3VsZCBzdGlsbCBiZSB0aGUgc2FtZSBhcyBiZWZvcmUgKi8KLSAgZmFpbF9pZiAoc2lua19zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNpbmtfc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHNpbmtfc2VnbWVudC5zdGFydCksIDEwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc2lua19zZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgc2lua19zZWdtZW50LnN0YXJ0KSwgMCAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChzaW5rX3NlZ21lbnQuc3RhcnQsIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc2lua19zZWdtZW50X2NvdW50ZXIsIDQpOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19kcmFpbiAoKTsKLSAgZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzcmNwYWQsIHF1ZXJ5KTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgLyogU2VnbWVudCBzaG91bGQgYmUgdXBkYXRlZCAqLwotICBmYWlsX2lmIChzaW5rX3NlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmc2lua19zZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgc2lua19zZWdtZW50LnN0YXJ0KSwgMTUgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZzaW5rX3NlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzaW5rX3NlZ21lbnQuc3RhcnQpLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKHNpbmtfc2VnbWVudC5zdGFydCwgMCAqIEdTVF9TRUNPTkQpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNpbmtfc2VnbWVudF9jb3VudGVyLCA1KTsKLQotICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIEZBTFNFKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgRkFMU0UpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhZF9vZmZzZXRfc3JjKQotewotICB0ZXN0X3BhZF9vZmZzZXQgKFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfcGFkX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFBhZCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgLyogdHVybiBvZmYgdGltZW91dCAqLwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDYwKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmZHVtbXlfc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9saW5rKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZmNvdW50KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dldF9hbGxvd2VkX2NhcHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RpY2t5X2NhcHNfdW5saW5rZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RpY2t5X2NhcHNfdW5saW5rZWRfaW5jb21wYXRpYmxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0aWNreV9jYXBzX2ZsdXNoaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlZmF1bHRfYWNjZXB0X2NhcHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGlua191bmxpbmtfdGhyZWFkZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbmFtZV9pc192YWxpZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wdXNoX3VubGlua2VkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3B1c2hfbGlua2VkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3B1c2hfbGlua2VkX2ZsdXNoaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3B1c2hfYnVmZmVyX2xpc3RfY29tcGF0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Zsb3dyZXR1cm4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHVzaF9uZWdvdGlhdGlvbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zcmNfdW5yZWZfdW5saW5rKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbmtfdW5yZWZfdW5saW5rKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Jsb2NrX2FzeW5jKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhZF9ibG9ja2luZ193aXRoX3Byb2JlX3R5cGVfYmxvY2spOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFkX2Jsb2NraW5nX3dpdGhfcHJvYmVfdHlwZV9ibG9ja2luZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYWRfYmxvY2tpbmdfd2l0aF9wcm9iZV90eXBlX2lkbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFkX3Byb2JlX3B1bGwpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFkX3Byb2JlX3B1bGxfaWRsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYWRfcHJvYmVfcHVsbF9idWZmZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFkX3Byb2JlX3JlbW92ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYWRfcHJvYmVfYmxvY2tfYWRkX3JlbW92ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYWRfcHJvYmVfYmxvY2tfYW5kX2Ryb3BfYnVmZmVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhZF9wcm9iZV9mbHVzaF9ldmVudHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFkX3Byb2JlX2ZsdXNoX2V2ZW50c19vbmx5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhZF9wcm9iZV9jYWxsX29yZGVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2V2ZW50c19xdWVyeV91bmxpbmtlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9xdWV1ZV9zcmNfY2Fwc19ub3RpZnlfbGlua2VkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3F1ZXVlX3NyY19jYXBzX25vdGlmeV9ub3RfbGlua2VkKTsKLSNpZiAwCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ibG9ja19hc3luY19yZXBsYWNlX2NhbGxiYWNrKTsKLSNlbmRpZgotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYmxvY2tfYXN5bmNfZnVsbF9kZXN0cm95KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Jsb2NrX2FzeW5jX2Z1bGxfZGVzdHJveV9kaXNwb3NlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Jsb2NrX2FzeW5jX3JlcGxhY2VfY2FsbGJhY2tfbm9fZmx1c2gpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RpY2t5X2V2ZW50cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sYXN0X2Zsb3dfcmV0dXJuX3B1c2gpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbGFzdF9mbG93X3JldHVybl9wdWxsKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZsdXNoX3N0b3BfaW5hY3RpdmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHJveHlfYWNjZXB0X2NhcHNfbm9fcHJveHkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHJveHlfYWNjZXB0X2NhcHNfd2l0aF9wcm94eSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wcm94eV9hY2NlcHRfY2Fwc193aXRoX2luY29tcGF0aWJsZV9wcm94eSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYWRfb2Zmc2V0X3NyYyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfcGFkKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RwYXJhbXNwZWNzLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cGFyYW1zcGVjcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDJlOTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RwYXJhbXNwZWNzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyogR1N0cmVhbWVyIEdzdFBhcmFtU3BlYyB1bml0IHRlc3RzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKiBzb21lIG1pbmltYWwgZHVtbXkgb2JqZWN0ICovCi0jZGVmaW5lIEdTVF9UWVBFX0RVTU1ZX09CSiBnc3RfZHVtbXlfb2JqX2dldF90eXBlKCkKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0RWxlbWVudCBwYXJlbnQ7Ci0gIGd1aW50IG51bSwgZGVub207Ci19IEdzdER1bW15T2JqOwotCi10eXBlZGVmIEdzdEVsZW1lbnRDbGFzcyBHc3REdW1teU9iakNsYXNzOwotCi1HVHlwZSBnc3RfZHVtbXlfb2JqX2dldF90eXBlICh2b2lkKTsKLUdfREVGSU5FX1RZUEUgKEdzdER1bW15T2JqLCBnc3RfZHVtbXlfb2JqLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9kdW1teV9vYmpfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqLCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWwsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkCi1nc3RfZHVtbXlfb2JqX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iaiwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHVtbXlfb2JqX2NsYXNzX2luaXQgKEdzdER1bW15T2JqQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZHVtbXlfb2JqX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2R1bW15X29ial9zZXRfcHJvcGVydHk7Ci0KLSAgQVNTRVJUX0NSSVRJQ0FMICgKLSAgICAgIC8qIGRlZmF1bHQgdmFsdWUgaXMgb3V0IG9mIGJvdW5kcywgc2hvdWxkIHByaW50IGEgd2FybmluZyAqLwotICAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgMSwKLSAgICAgICAgICBnc3RfcGFyYW1fc3BlY19mcmFjdGlvbiAoInJhdGlvIiwgInJhdGlvIiwgInJhdGlvIiwgMCwgMSwgMiwgMSwKLSAgICAgICAgICAgICAgMTYsIDQsIEdfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgICApOwotCi0gIC8qIHNob3VsZCBiZSB3aXRoaW4gYm91bmRzICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIDIsCi0gICAgICBnc3RfcGFyYW1fc3BlY19mcmFjdGlvbiAoIm90aGVyLXJhdGlvIiwgIm90aGVyIHJhdGlvIiwgIm90aGVyIHJhdGlvIiwKLSAgICAgICAgICAwLCAxLCAyLCAxLCAxNiwgOSwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCAzLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJmb28iLCAiZm9vIiwgImZvbyIsIFRSVUUsIEdfUEFSQU1fUkVBRFdSSVRFKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHVtbXlfb2JqX2luaXQgKEdzdER1bW15T2JqICogb2JqKQotewotICAvKiBub3RoaW5nIHRvIGRvIHRoZXJlICovCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHVtbXlfb2JqX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iaiwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RHVtbXlPYmogKmRvYmogPSAoR3N0RHVtbXlPYmogKikgb2JqOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHByb3BfaWQsIDIpOwotICBkb2JqLT5udW0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAodmFsKTsKLSAgZG9iai0+ZGVub20gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICh2YWwpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R1bW15X29ial9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmosIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbCwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdER1bW15T2JqICpkb2JqID0gKEdzdER1bW15T2JqICopIG9iajsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChwcm9wX2lkLCAyKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAodmFsLCBkb2JqLT5udW0sIGRvYmotPmRlbm9tKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyYW1fc3BlY19mcmFjdGlvbikKLXsKLSAgR09iamVjdCAqb2JqOwotICBHVmFsdWUgdmFsID0geyAwLCB9OwotICBnaW50IG4gPSAwLCBkID0gMDsKLQotICBvYmogPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0RVTU1ZX09CSiwgIm90aGVyLXJhdGlvIiwgMTUsIDgsIE5VTEwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUIChvYmopLCAib3RoZXItcmF0aW8iLCAmdmFsKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCZ2YWwpLCAxNSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWwpLCA4KTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgZ19vYmplY3RfZ2V0IChvYmosICJvdGhlci1yYXRpbyIsICZuLCAmZCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG4sIDE1KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZCwgOCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKG9iaik7Ci19Ci0KLUdTVF9FTkRfVEVTVCBzdGF0aWMgU3VpdGUgKgotZ3N0X3BhcmFtX3NwZWNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0UGFyYW1TcGVjIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcmFtX3NwZWNfZnJhY3Rpb24pOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X3BhcmFtX3NwZWMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHBpcGVsaW5lLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE4NmJjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0cGlwZWxpbmUuYworKysgL2Rldi9udWxsCkBAIC0xLDY4MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogZ3N0cGlwZWxpbmUuYzogVW5pdCB0ZXN0IGZvciBHc3RQaXBlbGluZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNkZWZpbmUgV0FJVF9USU1FICgzMDAgKiBHU1RfTVNFQ09ORCkKLQotLyogYW4gZW1wdHkgcGlwZWxpbmUgY2FuIGdvIHRvIFBMQVlJTkcgaW4gb25lIGdvICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hc3luY19zdGF0ZV9jaGFuZ2VfZW1wdHkpCi17Ci0gIEdzdFBpcGVsaW5lICpwaXBlbGluZTsKLQotICBwaXBlbGluZSA9IEdTVF9QSVBFTElORSAoZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCkpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXN5bmNfc3RhdGVfY2hhbmdlX2Zha2VfcmVhZHkpCi17Ci0gIEdzdFBpcGVsaW5lICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2luazsKLQotICBwaXBlbGluZSA9IEdTVF9QSVBFTElORSAoZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCkpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBzaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksCi0gICAgICAgICAgR1NUX1NUQVRFX1JFQURZKSwgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX3N0YXRlX2NoYW5nZV9mYWtlKQotewotICBHc3RQaXBlbGluZSAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBnYm9vbGVhbiBkb25lID0gRkFMU0U7Ci0KLSAgcGlwZWxpbmUgPSBHU1RfUElQRUxJTkUgKGdzdF9waXBlbGluZV9uZXcgKE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJDb3VsZCBub3QgY3JlYXRlIHBpcGVsaW5lIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luayk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKHBpcGVsaW5lKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpLCBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICB3aGlsZSAoIWRvbmUpIHsKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotICAgIEdzdFN0YXRlIG9sZCwgbmV3LCBwZW5kaW5nOwotCi0gICAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VELCAtMSk7Ci0gICAgaWYgKG1lc3NhZ2UpIHsKLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1lc3NhZ2UsICZvbGQsICZuZXcsICZwZW5kaW5nKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1lc3NhZ2UtPnNyYywgInN0YXRlIGNoYW5nZSBmcm9tICVkIHRvICVkIiwgb2xkLCBuZXcpOwotICAgICAgaWYgKG1lc3NhZ2UtPnNyYyA9PSBHU1RfT0JKRUNUIChwaXBlbGluZSkgJiYgbmV3ID09IEdTVF9TVEFURV9QTEFZSU5HKQotICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICB9Ci0gIH0KLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIGhlcmUgd2UgZG9uJ3QgZ2V0IHRoZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMsIGJlY2F1c2Ugb2YgYXV0by1mbHVzaCBpbiAKLSAgICogdGhlIGJ1cyAqLwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9nZXRfYnVzKQotewotICBHc3RQaXBlbGluZSAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIHBpcGVsaW5lID0gR1NUX1BJUEVMSU5FIChnc3RfcGlwZWxpbmVfbmV3IChOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKHBpcGVsaW5lKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSBhZnRlciBnZXRfYnVzIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDIpOwotCi0gIC8qIGJpbmRpbmdzIGRvbid0IGxpa2UgdGhlIGZsb2F0aW5nIGZsYWcgdG8gYmUgc2V0IGhlcmUgKi8KLSAgZmFpbF9pZiAoZ19vYmplY3RfaXNfZmxvYXRpbmcgKGJ1cykpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMgYWZ0ZXIgdW5yZWYgcGlwZWxpbmUiLCAxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR01haW5Mb29wICpsb29wID0gTlVMTDsKLQotc3RhdGljIGdib29sZWFuCi1tZXNzYWdlX3JlY2VpdmVkIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSA9IEdTVF9FTEVNRU5UIChkYXRhKTsKLSAgR3N0TWVzc2FnZVR5cGUgdHlwZSA9IG1lc3NhZ2UtPnR5cGU7Ci0KLSAgR1NUX0RFQlVHICgibWVzc2FnZSByZWNlaXZlZCIpOwotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQ6Ci0gICAgewotICAgICAgR3N0U3RhdGUgb2xkLCBuZXcsIHBlbmRpbmc7Ci0KLSAgICAgIEdTVF9ERUJVRyAoInN0YXRlIGNoYW5nZSBtZXNzYWdlIHJlY2VpdmVkIik7Ci0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChtZXNzYWdlLCAmb2xkLCAmbmV3LCAmcGVuZGluZyk7Ci0gICAgICBHU1RfREVCVUcgKCJuZXcgc3RhdGUgJWQiLCBuZXcpOwotICAgICAgaWYgKG1lc3NhZ2UtPnNyYyA9PSBHU1RfT0JKRUNUIChwaXBlbGluZSkgJiYgbmV3ID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoInF1aXR0aW5nIG1haW4gbG9vcCIpOwotICAgICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgotICAgIHsKLSAgICAgIGdfcHJpbnQgKCJlcnJvclxuIik7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2J1cykKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBndWludCBpZDsKLSAgR3N0U3RhdGUgY3VycmVudDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBwaXBlbGluZSIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIiwgMSk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsgIT0gTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIHNpbmssIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGlwZWxpbmUsICJwaXBlbGluZSBhZnRlciBnZXRfYnVzIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDIpOwotCi0gIGlkID0gZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgbWVzc2FnZV9yZWNlaXZlZCwgcGlwZWxpbmUpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwaXBlbGluZSwgInBpcGVsaW5lIGFmdGVyIGFkZF93YXRjaCIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMgYWZ0ZXIgYWRkX3dhdGNoIiwgMyk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgR1NUX0RFQlVHICgiZ29pbmcgaW50byBtYWluIGxvb3AiKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLSAgR1NUX0RFQlVHICgibGVmdCBtYWluIGxvb3AiKTsKLQotICAvKiBQTEFZSU5HIG5vdyAqLwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlRfQkVUV0VFTiAocGlwZWxpbmUsICJwaXBlbGluZSBhZnRlciBnb25lIHRvIHBsYXlpbmciLCAxLAotICAgICAgMyk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBHU1RfREVCVUcgKCJjbGVhbnVwIik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZjdXJyZW50LCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBmYWlsX3VubGVzcyAoY3VycmVudCA9PSBHU1RfU1RBVEVfTlVMTCwgInN0YXRlIGlzIG5vdCBOVUxMIGJ1dCAlZCIsIGN1cnJlbnQpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBpcGVsaW5lLCAicGlwZWxpbmUgYXQgc3RhcnQgb2YgY2xlYW51cCIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMgYXQgc3RhcnQgb2YgY2xlYW51cCIsIDMpOwotCi0gIGZhaWxfdW5sZXNzIChnX3NvdXJjZV9yZW1vdmUgKGlkKSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyBhZnRlciByZW1vdmluZyBzb3VyY2UiLCAyKTsKLQotICBHU1RfREVCVUcgKCJ1bnJlZmZpbmcgcGlwZWxpbmUiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyBhZnRlciB1bnJlZiBwaXBlbGluZSIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHTXV0ZXggcHJvYmVfbG9jazsKLXN0YXRpYyBHQ29uZCBwcm9iZV9jb25kOwotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLXNpbmtfcGFkX3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0Q2xvY2tUaW1lICpmaXJzdF90aW1lc3RhbXAgPSB1c2VyX2RhdGE7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gIGZhaWxfdW5sZXNzICgoR1NUX1BBRF9QUk9CRV9JTkZPX1RZUEUgKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUikpOwotCi0gIGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGluZm8tPmRhdGEpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJidWZmZXIgd2l0aCB0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikpKTsKLQotICBmYWlsX2lmIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FLAotICAgICAgInRlc3RpbmcgaWYgYnVmZmVyIHRpbWVzdGFtcHMgYXJlIHJpZ2h0LCBidXQgZ290IENMT0NLX1RJTUVfTk9ORSIpOwotCi0gIGlmICgqZmlyc3RfdGltZXN0YW1wID09IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAqZmlyc3RfdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7Ci0gIH0KLQotICBnX211dGV4X2xvY2sgKCZwcm9iZV9sb2NrKTsKLSAgZ19jb25kX3NpZ25hbCAoJnByb2JlX2NvbmQpOwotICBnX211dGV4X3VubG9jayAoJnByb2JlX2xvY2spOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9iYXNlX3RpbWUpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqZmFrZXNyYywgKmZha2VzaW5rOwotICBHc3RQYWQgKnNpbms7Ci0gIEdzdENsb2NrVGltZSBvYnNlcnZlZCwgbG93ZXIsIHVwcGVyLCBiYXNlLCBzdHJlYW07Ci0gIEdzdENsb2NrICpjbG9jazsKLQotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgInBpcGVsaW5lIik7Ci0gIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgImZha2VzcmMiKTsKLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOwotCi0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAmJiBmYWtlc3JjICYmIGZha2VzaW5rLCAiY291bGRuJ3QgbWFrZSBlbGVtZW50cyIpOwotCi0gIGdfb2JqZWN0X3NldCAoZmFrZXNyYywgImlzLWxpdmUiLCAoZ2Jvb2xlYW4pIFRSVUUsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOwotICBnc3RfZWxlbWVudF9saW5rIChmYWtlc3JjLCBmYWtlc2luayk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChmYWtlc2luaywgInNpbmsiKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNpbmssIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHNpbmtfcGFkX3Byb2JlLAotICAgICAgJm9ic2VydmVkLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCwgImV4cGVjdGVkIG5vLXByZXJvbGwgZnJvbSBsaXZlIHBpcGVsaW5lIik7Ci0KLSAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLSAgZmFpbF91bmxlc3MgKGNsb2NrICYmIEdTVF9JU19DTE9DSyAoY2xvY2spLCAiaSB3YW50IGEgY2xvY2sgZGFtbWl0Iik7Ci0gIGdzdF9waXBlbGluZV91c2VfY2xvY2sgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpLCBjbG9jayk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGFydF90aW1lIChwaXBlbGluZSkgPT0gMCwKLSAgICAgICJzdHJlYW0gdGltZSBkb2Vzbid0IHN0YXJ0IG9mZiBhdCAwIik7Ci0KLSAgLyogdGVzdCB0aGUgZmlyc3Q6IHRoYXQgYmFzZSB0aW1lIGlzIGJlaW5nIGRpc3RyaWJ1dGVkIGNvcnJlY3RseSwgdGltZXN0YW1wcwotICAgICBhcmUgY29ycmVjdCByZWxhdGl2ZSB0byB0aGUgcnVubmluZyBjbG9jayBhbmQgYmFzZSB0aW1lICovCi0gIHsKLSAgICBsb3dlciA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotCi0gICAgb2JzZXJ2ZWQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiZmFpbGVkIHN0YXRlIGNoYW5nZSIpOwotCi0gICAgZ19tdXRleF9sb2NrICgmcHJvYmVfbG9jayk7Ci0gICAgd2hpbGUgKG9ic2VydmVkID09IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICBnX2NvbmRfd2FpdCAoJnByb2JlX2NvbmQsICZwcm9iZV9sb2NrKTsKLSAgICBnX211dGV4X3VubG9jayAoJnByb2JlX2xvY2spOwotCi0gICAgLyogbm93IHNvbWV0aGluZyBhIGxpdHRsZSBtb3JlIHRoYW4gbG93ZXIgd2FzIGRpc3RyaWJ1dGVkIGFzIHRoZSBiYXNlIHRpbWUsCi0gICAgICogYW5kIHRoZSBidWZmZXIgd2FzIHRpbWVzdGFtcGVkIGJldHdlZW4gMCBhbmQgdXBwZXItYmFzZQotICAgICAqLwotCi0gICAgYmFzZSA9IGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKHBpcGVsaW5lKTsKLSAgICBmYWlsX2lmIChiYXNlID09IEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gICAgLyogc2V0IHN0cmVhbSB0aW1lICovCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgICAvKiBwdWxsaW5nIHVwcGVyIGhlcmUgbWFrZXMgc3VyZSB0aGF0IHRoZSBwaXBlbGluZSdzIG5ldyBzdHJlYW0gdGltZSBoYXMKLSAgICAgICBhbHJlYWR5IGJlZW4gY29tcHV0ZWQgKi8KLSAgICB1cHBlciA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgICA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJmYWlsZWQgc3RhdGUgY2hhbmdlIik7Ci0KLSAgICBmYWlsX2lmIChvYnNlcnZlZCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FLCAibm8gdGltZXN0YW1wIHJlY29yZGVkIik7Ci0KLSAgICBmYWlsX3VubGVzcyAoYmFzZSA+PSBsb3dlciwgImVhcmx5IGJhc2UgdGltZTogJSIgR1NUX1RJTUVfRk9STUFUICIgPCAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGJhc2UpLCBHU1RfVElNRV9BUkdTIChsb3dlcikpOwotICAgIGZhaWxfdW5sZXNzICh1cHBlciA+PSBiYXNlLCAiYm9ndXMgYmFzZSB0aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiA+ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoYmFzZSksIEdTVF9USU1FX0FSR1MgKHVwcGVyKSk7Ci0KLSAgICBzdHJlYW0gPSBnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAocGlwZWxpbmUpOwotCi0gICAgZmFpbF91bmxlc3MgKHN0cmVhbSA+IDAsICJib2d1cyBuZXcgc3RyZWFtIHRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzdHJlYW0pLCBHU1RfVElNRV9BUkdTICgwKSk7Ci0gICAgZmFpbF91bmxlc3MgKHN0cmVhbSA8PSB1cHBlciwKLSAgICAgICAgImJvZ3VzIG5ldyBzdHJlYW0gdGltZTogJSIgR1NUX1RJTUVfRk9STUFUICIgPiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHN0cmVhbSksIEdTVF9USU1FX0FSR1MgKHVwcGVyKSk7Ci0KLSAgICBmYWlsX3VubGVzcyAob2JzZXJ2ZWQgPD0gc3RyZWFtLCAidGltZXN0YW1wcyBvdXRydW4gc3RyZWFtIHRpbWU6ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChvYnNlcnZlZCksIEdTVF9USU1FX0FSR1MgKHN0cmVhbSkpOwotICAgIGZhaWxfdW5sZXNzIChvYnNlcnZlZCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FLCAiZWFybHkgdGltZXN0YW1wOiAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiA8ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAob2JzZXJ2ZWQpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChsb3dlciAtIGJhc2UpKTsKLSAgICBmYWlsX3VubGVzcyAob2JzZXJ2ZWQgPD0gdXBwZXIgLSBiYXNlLAotICAgICAgICAibGF0ZSB0aW1lc3RhbXA6ICUiIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChvYnNlcnZlZCksIEdTVF9USU1FX0FSR1MgKHVwcGVyIC0gYmFzZSkpOwotICB9Ci0KLSAgLyogdGVzdCB0aGUgc2Vjb25kOiB0aGF0IHRoZSBiYXNlIHRpbWUgaXMgcmVkaXN0cmlidXRlZCB3aGVuIHdlIGdvIHRvIFBMQVlJTkcKLSAgICAgYWdhaW4gKi8KLSAgewotICAgIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gICAgR3N0Q2xvY2tUaW1lIG9sZGJhc2UgPSBiYXNlLCBvbGRzdHJlYW0gPSBzdHJlYW07Ci0KLSAgICAvKiBsZXQgc29tZSB0aW1lIHBhc3MgKi8KLSAgICBjbG9ja19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCB1cHBlciArIFdBSVRfVElNRSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9jbG9ja19pZF93YWl0IChjbG9ja19pZCwgTlVMTCkgPT0gR1NUX0NMT0NLX09LLAotICAgICAgICAidW5leHBlY3RlZCBjbG9ja19pZF93YWl0IHJldHVybiIpOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotCi0gICAgbG93ZXIgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLSAgICBmYWlsX2lmIChsb3dlciA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAgIG9ic2VydmVkID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAgIGZhaWxfdW5sZXNzIChsb3dlciA+PSB1cHBlciArIFdBSVRfVElNRSwgImNsb2NrIGRpZCBub3QgYWR2YW5jZT8iKTsKLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICAgID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImZhaWxlZCBzdGF0ZSBjaGFuZ2UiKTsKLQotICAgIGdfbXV0ZXhfbG9jayAoJnByb2JlX2xvY2spOwotICAgIHdoaWxlIChvYnNlcnZlZCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgZ19jb25kX3dhaXQgKCZwcm9iZV9jb25kLCAmcHJvYmVfbG9jayk7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZwcm9iZV9sb2NrKTsKLQotICAgIC8qIG5vdyB0aGUgYmFzZSB0aW1lIHNob3VsZCBoYXZlIGFkdmFuY2VkIGJ5IG1vcmUgdGhhbiBXQUlUX1RJTUUgY29tcGFyZWQKLSAgICAgKiB0byB3aGF0IGl0IHdhcy4gVGhlIGJ1ZmZlciB3aWxsIGJlIHRpbWVzdGFtcGVkIGJldHdlZW4gdGhlIGxhc3Qgc3RyZWFtCi0gICAgICogdGltZSBhbmQgdXBwZXIgbWludXMgYmFzZS4KLSAgICAgKi8KLQotICAgIGJhc2UgPSBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lIChwaXBlbGluZSk7Ci0gICAgZmFpbF9pZiAoYmFzZSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAgIC8qIHNldCBzdHJlYW0gdGltZSAqLwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gICAgLyogbmV3IHN0cmVhbSB0aW1lIGFscmVhZHkgc2V0ICovCi0gICAgdXBwZXIgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMLCAiZmFpbGVkIHN0YXRlIGNoYW5nZSIpOwotCi0gICAgZmFpbF9pZiAob2JzZXJ2ZWQgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSwgIm5vIHRpbWVzdGFtcCByZWNvcmRlZCIpOwotCi0gICAgc3RyZWFtID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKHBpcGVsaW5lKTsKLQotICAgIGZhaWxfdW5sZXNzIChiYXNlID49IG9sZGJhc2UgKyBXQUlUX1RJTUUsICJiYXNlIHRpbWUgbm90IHJlc2V0Iik7Ci0gICAgZmFpbF91bmxlc3MgKHVwcGVyID49IGJhc2UgKyBzdHJlYW0sICJib2d1cyBiYXNlIHRpbWU6ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChiYXNlKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAodXBwZXIpKTsKLQotICAgIGZhaWxfdW5sZXNzIChsb3dlciA+PSBiYXNlKTsKLSAgICBmYWlsX3VubGVzcyAob2JzZXJ2ZWQgPj0gbG93ZXIgLSBiYXNlLCAiZWFybHkgdGltZXN0YW1wOiAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiA8ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAob2JzZXJ2ZWQpLCBHU1RfVElNRV9BUkdTIChsb3dlciAtIGJhc2UpKTsKLSAgICBmYWlsX3VubGVzcyAob2JzZXJ2ZWQgPD0gdXBwZXIgLSBiYXNlLCAibGF0ZSB0aW1lc3RhbXA6ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChvYnNlcnZlZCksIEdTVF9USU1FX0FSR1MgKHVwcGVyIC0gYmFzZSkpOwotICAgIGZhaWxfdW5sZXNzIChzdHJlYW0gLSBvbGRzdHJlYW0gPD0gdXBwZXIgLSBsb3dlciwKLSAgICAgICAgImluc3VmZmljaWVudCBzdHJlYW0gdGltZTogJSIgR1NUX1RJTUVfRk9STUFUICIgPiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKG9ic2VydmVkKSwgR1NUX1RJTUVfQVJHUyAodXBwZXIpKTsKLSAgfQotCi0gIC8qIHRlc3QgdGhlIHRoaXJkOiB0aGF0IGlmIEkgc2V0IENMT0NLX1RJTUVfTk9ORSBhcyB0aGUgc3RyZWFtIHRpbWUsIHRoYXQgdGhlCi0gICAgIGJhc2UgdGltZSBpcyBub3QgY2hhbmdlZCAqLwotICB7Ci0gICAgR3N0Q2xvY2tJRCBjbG9ja19pZDsKLSAgICBHc3RDbG9ja1RpbWUgb2xkYmFzZSA9IGJhc2UsIG9sZG9ic2VydmVkID0gb2JzZXJ2ZWQ7Ci0gICAgR3N0Q2xvY2tSZXR1cm4gcmV0OwotCi0gICAgLyogbGV0IHNvbWUgdGltZSBwYXNzICovCi0gICAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgdXBwZXIgKyBXQUlUX1RJTUUpOwotICAgIHJldCA9IGdzdF9jbG9ja19pZF93YWl0IChjbG9ja19pZCwgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfQ0xPQ0tfT0ssCi0gICAgICAgICJ1bmV4cGVjdGVkIGNsb2NrX2lkX3dhaXQgcmV0dXJuICVkIiwgcmV0KTsKLSAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrX2lkKTsKLQotICAgIGxvd2VyID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0KLSAgICBvYnNlcnZlZCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgICBmYWlsX3VubGVzcyAobG93ZXIgPj0gdXBwZXIgKyBXQUlUX1RJTUUsICJjbG9jayBkaWQgbm90IGFkdmFuY2U/Iik7Ci0KLSAgICAvKiBibGluZyAqLwotICAgIGdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lIChwaXBlbGluZSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgICA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJmYWlsZWQgc3RhdGUgY2hhbmdlIik7Ci0KLSAgICBnX211dGV4X2xvY2sgKCZwcm9iZV9sb2NrKTsKLSAgICB3aGlsZSAob2JzZXJ2ZWQgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgIGdfY29uZF93YWl0ICgmcHJvYmVfY29uZCwgJnByb2JlX2xvY2spOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmcHJvYmVfbG9jayk7Ci0KLSAgICAvKiBub3cgdGhlIGJhc2UgdGltZSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgaXQgd2FzLCBhbmQgdGhlIHRpbWVzdGFtcCBzaG91bGQKLSAgICAgKiBiZSBtb3JlIHRoYW4gV0FJVF9USU1FIHBhc3Qgd2hhdCBpdCB3YXMuCi0gICAgICovCi0KLSAgICBiYXNlID0gZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAocGlwZWxpbmUpOwotCi0gICAgLyogc2V0IHN0cmVhbSB0aW1lICovCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgICAvKiBuZXcgc3RyZWFtIHRpbWUgYWxyZWFkeSBzZXQgKi8KLSAgICB1cHBlciA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgICA9PSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEwsICJmYWlsZWQgc3RhdGUgY2hhbmdlIik7Ci0KLSAgICBmYWlsX2lmIChvYnNlcnZlZCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FLCAibm8gdGltZXN0YW1wIHJlY29yZGVkIik7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKHBpcGVsaW5lKQotICAgICAgICA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FLCAic3RyZWFtIHRpbWUgd2FzIHJlc2V0Iik7Ci0KLSAgICBmYWlsX3VubGVzcyAoYmFzZSA9PSBvbGRiYXNlLCAiYmFzZSB0aW1lIHdhcyByZXNldCIpOwotCi0gICAgZmFpbF91bmxlc3MgKG9ic2VydmVkID49IGxvd2VyIC0gYmFzZSwgImVhcmx5IHRpbWVzdGFtcDogJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgPCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKG9ic2VydmVkKSwgR1NUX1RJTUVfQVJHUyAobG93ZXIgLSBiYXNlKSk7Ci0gICAgZmFpbF91bmxlc3MgKG9ic2VydmVkIDw9IHVwcGVyIC0gYmFzZSwgImxhdGUgdGltZXN0YW1wOiAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAob2JzZXJ2ZWQpLCBHU1RfVElNRV9BUkdTICh1cHBlciAtIGJhc2UpKTsKLSAgICBmYWlsX3VubGVzcyAob2JzZXJ2ZWQgLSBvbGRvYnNlcnZlZCA+PSBXQUlUX1RJTUUsCi0gICAgICAgICJpbnN1ZmZpY2llbnQgdHN0YW1wIGRlbHRhOiAlIiBHU1RfVElNRV9GT1JNQVQgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAob2JzZXJ2ZWQpLCBHU1RfVElNRV9BUkdTIChvbGRvYnNlcnZlZCkpOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ3BvaW50ZXIKLXBpcGVsaW5lX3RocmVhZCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpzaW5rOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIDIwLCBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc2luaywgInN5bmMiLCBUUlVFLCBOVUxMKTsKLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luayk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTApOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NvbmN1cnJlbnRfY3JlYXRlKQotewotICBHVGhyZWFkICp0aHJlYWRzWzMwXTsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAodGhyZWFkcyk7ICsraSkgewotICAgIHRocmVhZHNbaV0gPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgcGlwZWxpbmVfdGhyZWFkLCBOVUxMLCBOVUxMKTsKLSAgfQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTICh0aHJlYWRzKTsgKytpKSB7Ci0gICAgaWYgKHRocmVhZHNbaV0pCi0gICAgICBnX3RocmVhZF9qb2luICh0aHJlYWRzW2ldKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BpcGVsaW5lX2luX3BpcGVsaW5lKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmJpbiwgKmZha2VzcmMsICpmYWtlc2luazsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCAicGlwZWxpbmUiKTsKLSAgYmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCAicGlwZWxpbmUtYXMtYmluIik7Ci0gIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgImZha2VzcmMiKTsKLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOwotCi0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAmJiBiaW4gJiYgZmFrZXNyYyAmJiBmYWtlc2luayk7Ci0KLSAgZ19vYmplY3Rfc2V0IChmYWtlc3JjLCAibnVtLWJ1ZmZlcnMiLCAxMDAsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGJpbik7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIGZha2VzcmMsIGZha2VzaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGluayAoZmFrZXNyYywgZmFrZXNpbmspOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotCi0gIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkIChHU1RfRUxFTUVOVF9CVVMgKHBpcGVsaW5lKSwgLTEsCi0gICAgICBHU1RfTUVTU0FHRV9FT1MpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BpcGVsaW5lX3Jlc2V0X3N0YXJ0X3RpbWUpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqZmFrZXNyYywgKmZha2VzaW5rOwotICBHc3RTdGF0ZSBzdGF0ZTsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja0lEIGlkOwotICBnaW50NjQgcG9zaXRpb247Ci0KLSAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsICJwaXBlbGluZSIpOwotICBmYWtlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJmYWtlc3JjIik7Ci0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAiZmFrZXNpbmsiKTsKLQotICBnX29iamVjdF9zZXQgKGZha2VzcmMsICJkby10aW1lc3RhbXAiLCBUUlVFLCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgJiYgZmFrZXNyYyAmJiBmYWtlc2luayk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBmYWtlc3JjLCBmYWtlc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKGZha2VzcmMsIGZha2VzaW5rKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKGZha2VzaW5rKSA9PSAwKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJnN0YXRlLCBOVUxMLCAtMSksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdGF0ZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIC8qIFdlIGp1c3Qgc3RhcnRlZCBhbmQgbmV2ZXIgcGF1c2VkLCBzdGFydCB0aW1lIG11c3QgYmUgMCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKGZha2VzaW5rKSA9PSAwKTsKLQotICBjbG9jayA9IGdzdF9waXBlbGluZV9nZXRfY2xvY2sgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgZmFpbF91bmxlc3MgKGNsb2NrICE9IE5VTEwpOwotICBpZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLAotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAocGlwZWxpbmUpICsgNTUgKiBHU1RfTVNFQ09ORCk7Ci0gIGdzdF9jbG9ja19pZF93YWl0IChpZCwgTlVMTCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0KLSAgLyogV2Ugd2FpdGVkIDUwbXMsIHNvIHRoZSBwb3NpdGlvbiBzaG91bGQgYmUgbm93ID49IDUwbXMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChmYWtlc2luaywgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICZwb3NpdGlvbikpOwotICBmYWlsX3VubGVzcyAocG9zaXRpb24gPj0gNTAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJnN0YXRlLCBOVUxMLCAtMSksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdGF0ZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogQW5kIG5vdyBhZnRlciBwYXVzaW5nIHRoZSBzdGFydCB0aW1lIHNob3VsZCBiZSBiaWdnZXIgdGhhbiB0aGUgbGFzdAotICAgKiBwb3NpdGlvbiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUgKGZha2VzaW5rKSA+PSA1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChmYWtlc2luaywgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICZwb3NpdGlvbikpOwotICBmYWlsX3VubGVzcyAocG9zaXRpb24gPj0gNTAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1JFQURZKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogV2hlbiBnb2luZyBiYWNrIHRvIHJlYWR5IHRoZSBzdGFydCB0aW1lIHNob3VsZCBiZSByZXNldCBldmVyeXdoZXJlICovCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAoZmFrZXNpbmspID09IDApOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZzdGF0ZSwgTlVMTCwgLTEpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3RhdGUsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIC8qIEFuZCB0aGUgc3RhcnQgdGltZSBzaG91bGQgc3RpbGwgYmUgc2V0IHRvIDAgd2hlbiB3ZSBnbyB0byBwYXVzZWQgZm9yIHRoZQotICAgKiBmaXJzdCB0aW1lLiBTYW1lIGdvZXMgZm9yIHRoZSBwb3NpdGlvbiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKGZha2VzaW5rLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgJnBvc2l0aW9uKSk7Ci0gIGZhaWxfdW5sZXNzIChwb3NpdGlvbiA8IDUwICogR1NUX01TRUNPTkQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9nZXRfc3RhcnRfdGltZSAoZmFrZXNpbmspID09IDApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9waXBlbGluZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RQaXBlbGluZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJwaXBlbGluZSB0ZXN0cyIpOwotCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19zdGF0ZV9jaGFuZ2VfZW1wdHkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXN5bmNfc3RhdGVfY2hhbmdlX2Zha2VfcmVhZHkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXN5bmNfc3RhdGVfY2hhbmdlX2Zha2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X2J1cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9idXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYmFzZV90aW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvbmN1cnJlbnRfY3JlYXRlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BpcGVsaW5lX2luX3BpcGVsaW5lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BpcGVsaW5lX3Jlc2V0X3N0YXJ0X3RpbWUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X3BpcGVsaW5lKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RwbHVnaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I0ZjE3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0cGx1Z2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBHc3RQbHVnaW4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgMjAwNSBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXJlZ2lzdGVyX2NoZWNrX2VsZW1lbnRzIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZWdpc3Rlcl9zdGF0aWMpCi17Ci0gIEdzdFBsdWdpbiAqcGx1Z2luOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgICAgICAgR1NUX1ZFUlNJT05fTUlOT1IsICJtb3JlLWVsZW1lbnRzIiwgIm1vcmUtZWxlbWVudHMiLAotICAgICAgICAgIHJlZ2lzdGVyX2NoZWNrX2VsZW1lbnRzLCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgUEFDS0FHRSwKLSAgICAgICAgICBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pKTsKLQotICBwbHVnaW4gPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1BMVUdJTiwgTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZWdpc3RyeSkKLXsKLSAgR0xpc3QgKmxpc3QsICpnOwotICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7Ci0KLSAgcmVnaXN0cnkgPSBnc3RfcmVnaXN0cnlfZ2V0ICgpOwotCi0gIGxpc3QgPSBnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChyZWdpc3RyeSk7Ci0gIGZvciAoZyA9IGxpc3Q7IGc7IGcgPSBnLT5uZXh0KSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW4gPSBHU1RfUExVR0lOIChnLT5kYXRhKTsKLQotICAgIC8qIG9uZSBmb3IgdGhlIHJlZ2lzdHJ5LCBvbmUgZm9yIHRoZSBsaXN0ICovCi0gICAgR1NUX0RFQlVHICgiUGx1Z2luIHJlZmNvdW50ICVkICVzIiwgR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGx1Z2luKSwKLSAgICAgICAgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0gICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGx1Z2luLCAicGx1Z2luIGluIHJlZ2lzdHJ5IiwgMik7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOwotICB9Ci0gIGdfbGlzdF9mcmVlIChsaXN0KTsKLQotICBsaXN0ID0gZ3N0X3JlZ2lzdHJ5X2ZlYXR1cmVfZmlsdGVyIChyZWdpc3RyeSwgTlVMTCwgRkFMU0UsIE5VTEwpOwotICBmb3IgKGcgPSBsaXN0OyBnOyBnID0gZy0+bmV4dCkgewotICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKGctPmRhdGEpOwotCi0gICAgLyogb25lIGZvciB0aGUgcmVnaXN0cnksIG9uZSBmb3IgdGhlIGxpc3QgKi8KLSAgICBHU1RfREVCVUcgKCJGZWF0dXJlIHJlZmNvdW50ICVkICVzIiwgR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAoZmVhdHVyZSksCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSkpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGZlYXR1cmUpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChsaXN0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9sb2FkX2NvcmVlbGVtZW50cykKLXsKLSAgR3N0UGx1Z2luICp1bmxvYWRlZF9wbHVnaW47Ci0gIEdzdFBsdWdpbiAqbG9hZGVkX3BsdWdpbjsKLQotICB1bmxvYWRlZF9wbHVnaW4gPSBnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICAiY29yZWVsZW1lbnRzIik7Ci0gIGZhaWxfaWYgKHVubG9hZGVkX3BsdWdpbiA9PSBOVUxMLCAiRmFpbGVkIHRvIGZpbmQgY29yZWVsZW1lbnRzIHBsdWdpbiIpOwotICBmYWlsX2lmIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFICh1bmxvYWRlZF9wbHVnaW4pICE9IDIsCi0gICAgICAiUmVmY291bnQgb2YgdW5sb2FkZWQgcGx1Z2luIGluIHJlZ2lzdHJ5IGluaXRpYWxseSBzaG91bGQgYmUgMiIpOwotICBHU1RfREVCVUcgKCJyZWZjb3VudCAlZCIsIEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHVubG9hZGVkX3BsdWdpbikpOwotCi0gIGxvYWRlZF9wbHVnaW4gPSBnc3RfcGx1Z2luX2xvYWQgKHVubG9hZGVkX3BsdWdpbik7Ci0gIGZhaWxfaWYgKGxvYWRlZF9wbHVnaW4gPT0gTlVMTCwgIkZhaWxlZCB0byBsb2FkIHBsdWdpbiIpOwotCi0gIGlmIChsb2FkZWRfcGx1Z2luICE9IHVubG9hZGVkX3BsdWdpbikgewotICAgIGZhaWxfaWYgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGxvYWRlZF9wbHVnaW4pICE9IDIsCi0gICAgICAgICJSZWZjb3VudCBvZiBsb2FkZWQgcGx1Z2luIGluIHJlZ2lzdHJ5IHNob3VsZCBiZSAyIik7Ci0gICAgR1NUX0RFQlVHICgicmVmY291bnQgJWQiLCBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChsb2FkZWRfcGx1Z2luKSk7Ci0gICAgZmFpbF9pZiAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAodW5sb2FkZWRfcGx1Z2luKSAhPSAxLAotICAgICAgICAiUmVmY291bnQgb2YgcmVwbGFjZWQgcGx1Z2luIHNob3VsZCBiZSAxIik7Ci0gICAgR1NUX0RFQlVHICgicmVmY291bnQgJWQiLCBHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFICh1bmxvYWRlZF9wbHVnaW4pKTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHVubG9hZGVkX3BsdWdpbik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGxvYWRlZF9wbHVnaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCkKLXsKLSAgR0xpc3QgKmxpc3Q7Ci0gIEdzdFBsdWdpbiAqcGx1Z2luOwotCi0gIHBsdWdpbiA9IGdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwgImNvcmVlbGVtZW50cyIpOwotICBmYWlsX2lmIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChwbHVnaW4pICE9IDIsCi0gICAgICAiUmVmY291bnQgb2YgcGx1Z2luIGluIHJlZ2lzdHJ5IHNob3VsZCBiZSAyIik7Ci0KLSAgbGlzdCA9IGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKGdzdF9yZWdpc3RyeV9nZXQgKCkpOwotCi0gIGZhaWxfaWYgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHBsdWdpbikgIT0gMywKLSAgICAgICJSZWZjb3VudCBvZiBwbHVnaW4gaW4gcmVnaXN0cnkrbGlzdCBzaG91bGQgYmUgMyIpOwotCi0gIGdzdF9wbHVnaW5fbGlzdF9mcmVlIChsaXN0KTsKLQotICBmYWlsX2lmIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChwbHVnaW4pICE9IDIsCi0gICAgICAiUmVmY291bnQgb2YgcGx1Z2luIGluIGFmdGVyIGxpc3QgZnJlZSBzaG91bGQgYmUgMiIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBsdWdpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmluZF9wbHVnaW4pCi17Ci0gIEdzdFBsdWdpbiAqcGx1Z2luOwotCi0gIHBsdWdpbiA9IGdzdF9yZWdpc3RyeV9maW5kX3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwgImNvcmVlbGVtZW50cyIpOwotICBmYWlsX2lmIChwbHVnaW4gPT0gTlVMTCwgIkZhaWxlZCB0byBmaW5kIGNvcmVlbGVtZW50cyBwbHVnaW4iKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGx1Z2luLCAicGx1Z2luIiwgMik7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3BsdWdpbl9nZXRfdmVyc2lvbiAocGx1Z2luKSwgVkVSU0lPTik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF9wbHVnaW5fZ2V0X2xpY2Vuc2UgKHBsdWdpbiksICJMR1BMIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF9wbHVnaW5fZ2V0X3NvdXJjZSAocGx1Z2luKSwgImdzdHJlYW1lciIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfcGx1Z2luX2dldF9wYWNrYWdlIChwbHVnaW4pLCBHU1RfUEFDS0FHRV9OQU1FKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3BsdWdpbl9nZXRfb3JpZ2luIChwbHVnaW4pLAotICAgICAgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmluZF9mZWF0dXJlKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotICBHc3RQbHVnaW4gKnBsdWdpbjsKLQotICBmZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZSAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgICJpZGVudGl0eSIsIEdTVF9UWVBFX0VMRU1FTlRfRkFDVE9SWSk7Ci0gIGZhaWxfaWYgKGZlYXR1cmUgPT0gTlVMTCwgIkZhaWxlZCB0byBmaW5kIGlkZW50aXR5IGVsZW1lbnQgZmFjdG9yeSIpOwotCi0gIHBsdWdpbiA9IGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luIChmZWF0dXJlKTsKLSAgZmFpbF91bmxlc3MgKHBsdWdpbiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSwgImNvcmVlbGVtZW50cyIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwbHVnaW4pOwotCi0gIGZhaWxfaWYgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGZlYXR1cmUpICE9IDIsCi0gICAgICAiUmVmY291bnQgb2YgZmVhdHVyZSBzaG91bGQgYmUgMiIpOwotICBHU1RfREVCVUcgKCJyZWZjb3VudCAlZCIsIEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGZlYXR1cmUpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9maW5kX2VsZW1lbnQpCi17Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICplbGVtZW50X2ZhY3Rvcnk7Ci0KLSAgZWxlbWVudF9mYWN0b3J5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kICgiaWRlbnRpdHkiKTsKLSAgZmFpbF9pZiAoZWxlbWVudF9mYWN0b3J5ID09IE5VTEwsICJGYWlsZWQgdG8gZmluZCBpZGVudGl0eSBlbGVtZW50IGZhY3RvcnkiKTsKLQotICBmYWlsX2lmIChHU1RfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChlbGVtZW50X2ZhY3RvcnkpICE9IDIsCi0gICAgICAiUmVmY291bnQgb2YgcGx1Z2luIGluIHJlZ2lzdHJ5K2ZlYXR1cmUgc2hvdWxkIGJlIDIiKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50X2ZhY3RvcnkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNpZiAwCi1ndWludDggKgotcGVlayAoZ3BvaW50ZXIgZGF0YSwgZ2ludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSkKLXsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQKLXN1Z2dlc3QgKGdwb2ludGVyIGRhdGEsIGd1aW50IHByb2JhYmlsaXR5LCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLQotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlZmluZCkKLXsKLSAgR3N0UGx1Z2luICpwbHVnaW47Ci0gIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmU7Ci0gIEdzdFR5cGVGaW5kIHR5cGVmaW5kID0gewotICAgIHBlZWssCi0gICAgc3VnZ2VzdCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgR1NUX1BBRERJTkdfSU5JVAotICB9OwotCi0gIHBsdWdpbiA9IGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luICgidHlwZWZpbmRmdW5jdGlvbnMiKTsKLSAgZmFpbF9pZiAocGx1Z2luID09IE5VTEwsICJGYWlsZWQgdG8gZmluZCB0eXBlZmluZCBmdW5jdGlvbnMiKTsKLSAgZmFpbF9pZiAoR1NUX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAocGx1Z2luKSAhPSAyLAotICAgICAgIlJlZmNvdW50IG9mIHBsdWdpbiBpbiByZWdpc3RyeSBzaG91bGQgYmUgMiIpOwotICBmYWlsX2lmIChnc3RfcGx1Z2luX2lzX2xvYWRlZCAocGx1Z2luKSwgIkV4cGVjdGVkIHBsdWdpbiB0byBiZSB1bmxvYWRlZCIpOwotCi0gIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0ICgpLAotICAgICAgImF1ZGlvL3gtYXUiLCBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSk7Ci0gIGZhaWxfaWYgKGZlYXR1cmUgPT0gTlVMTCwgIkZhaWxlZCB0byBmaW5kIGF1ZGlvL3gtYXcgdHlwZWZpbmQgZmFjdG9yeSIpOwotICBmYWlsX2lmIChmZWF0dXJlLT5wbHVnaW4gIT0gcGx1Z2luLAotICAgICAgIkV4cGVjdGVkIGlkZW50aXR5IHRvIGJlIGZyb20gY29yZWVsZW1lbnRzIHBsdWdpbiIpOwotCi0gIGZhaWxfaWYgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHBsdWdpbikgIT0gMywKLSAgICAgICJSZWZjb3VudCBvZiBwbHVnaW4gaW4gcmVnaXN0cnkrZmVhdHVyZSBzaG91bGQgYmUgMyIpOwotCi0gIGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9jYWxsX2Z1bmN0aW9uIChHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkgKGZlYXR1cmUpLAotICAgICAgJnR5cGVmaW5kKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlLT5wbHVnaW4pOwotCi0gIGZhaWxfaWYgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHBsdWdpbikgIT0gMSwKLSAgICAgICJSZWZjb3VudCBvZiBwbHVnaW4gaW4gYWZ0ZXIgbGlzdCBmcmVlIHNob3VsZCBiZSAxIik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKLX0KLQotR1NUX0VORF9URVNUOwotI2VuZGlmCi0KLSNkZWZpbmUgZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uKG5hbWUsYSxiLGMpIFwKLSAgICBnc3RfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uKGdzdF9yZWdpc3RyeV9nZXQoKSwobmFtZSksKGEpLChiKSwoYykpCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZlcnNpb25fY2hlY2tzKQotewotICBmYWlsX2lmIChnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCJpZGVudGl0eSIsCi0gICAgICAgICAgR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCBHU1RfVkVSU0lPTl9NSUNSTykgPT0gRkFMU0UsCi0gICAgICAiVW5leHBlY3RlZCB2ZXJzaW9uIGNoZWNrIHJlc3VsdCIpOwotCi0gIGZhaWxfaWYgKGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoImlkZW50aXR5IiwKLSAgICAgICAgICBHU1RfVkVSU0lPTl9NQUpPUiArIDEsIEdTVF9WRVJTSU9OX01JTk9SLCBHU1RfVkVSU0lPTl9NSUNSTykgPT0gVFJVRSwKLSAgICAgICJVbmV4cGVjdGVkIHZlcnNpb24gY2hlY2sgcmVzdWx0Iik7Ci0KLSAgZmFpbF9pZiAoZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICgiaWRlbnRpdHkiLAotICAgICAgICAgIEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUiArIDEsIEdTVF9WRVJTSU9OX01JQ1JPKSA9PSBUUlVFLAotICAgICAgIlVuZXhwZWN0ZWQgdmVyc2lvbiBjaGVjayByZXN1bHQiKTsKLQotICAvKiBJZiB0aGUgbmFubyBpcyBzZXQsIHRoZW4gd2UgZXhwZWN0IHRoYXQgWC5ZLlotMS54ID49IFguWS5aLCBzbyB0aGF0IGEKLSAgICogZGV2ZWwgcGx1Z2luIGlzIHZhbGlkIGFnYWluc3QgYW4gdXBjb21pbmcgcmVsZWFzZSAqLwotICBpZiAoR1NUX1ZFUlNJT05fTkFOTyA+IDApIHsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICgiaWRlbnRpdHkiLAotICAgICAgICAgICAgR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCBHU1RfVkVSU0lPTl9NSUNSTyArIDEpID09Ci0gICAgICAgIFRSVUUsICJVbmV4cGVjdGVkIHZlcnNpb24gY2hlY2sgcmVzdWx0Iik7Ci0gIH0gZWxzZSB7Ci0gICAgZmFpbF9pZiAoZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICgiaWRlbnRpdHkiLAotICAgICAgICAgICAgR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCBHU1RfVkVSU0lPTl9NSUNSTyArIDEpID09Ci0gICAgICAgIFRSVUUsICJVbmV4cGVjdGVkIHZlcnNpb24gY2hlY2sgcmVzdWx0Iik7Ci0gIH0KLQotICBpZiAoR1NUX1ZFUlNJT05fTUFKT1IgPiAwKSB7Ci0gICAgZmFpbF9pZiAoZ3N0X2RlZmF1bHRfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uICgiaWRlbnRpdHkiLAotICAgICAgICAgICAgR1NUX1ZFUlNJT05fTUFKT1IgLSAxLCBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICAgICAgICAgIEdTVF9WRVJTSU9OX01JQ1JPKSA9PSBGQUxTRSwgIlVuZXhwZWN0ZWQgdmVyc2lvbiBjaGVjayByZXN1bHQiKTsKLSAgfQotCi0gIGlmIChHU1RfVkVSU0lPTl9NSU5PUiA+IDApIHsKLSAgICBmYWlsX2lmIChnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCJpZGVudGl0eSIsCi0gICAgICAgICAgICBHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IgLSAxLAotICAgICAgICAgICAgR1NUX1ZFUlNJT05fTUlDUk8pID09IEZBTFNFLCAiVW5leHBlY3RlZCB2ZXJzaW9uIGNoZWNrIHJlc3VsdCIpOwotICB9Ci0KLSAgaWYgKEdTVF9WRVJTSU9OX01JQ1JPID4gMCkgewotICAgIGZhaWxfaWYgKGdzdF9kZWZhdWx0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoImlkZW50aXR5IiwKLSAgICAgICAgICAgIEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICAgICAgICAgIEdTVF9WRVJTSU9OX01JQ1JPIC0gMSkgPT0gRkFMU0UsICJVbmV4cGVjdGVkIHZlcnNpb24gY2hlY2sgcmVzdWx0Iik7Ci0gIH0KLQotICBmYWlsX2lmIChnc3RfZGVmYXVsdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKCJlbnRpdHlpZCIsCi0gICAgICAgICAgR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCBHU1RfVkVSU0lPTl9NSUNSTykgPT0gVFJVRSwKLSAgICAgICJVbmV4cGVjdGVkIHZlcnNpb24gY2hlY2sgcmVzdWx0Iik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9wbHVnaW5fc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0UGx1Z2luIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICAvKiB0dXJuIG9mZiB0aW1lb3V0ICovCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgNjApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotI2lmZGVmIEdTVF9HTlVDX0NPTlNUUlVDVE9SX0RFRklORUQKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X29sZF9yZWdpc3Rlcl9zdGF0aWMpOwotI2VuZGlmCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZWdpc3Rlcl9zdGF0aWMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVnaXN0cnkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbG9hZF9jb3JlZWxlbWVudHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpbmRfcGx1Z2luKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpbmRfZmVhdHVyZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9maW5kX2VsZW1lbnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmVyc2lvbl9jaGVja3MpOwotICAvL3RjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlZmluZCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfcGx1Z2luKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3Rwb2xsLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cG9sbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmQ3NTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3Rwb2xsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBHc3RQb2xsCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BvbGxfd2FpdCkKLXsKLSAgR3N0UG9sbCAqc2V0OwotICBHc3RQb2xsRkQgcmZkID0gR1NUX1BPTExfRkRfSU5JVDsKLSAgR3N0UG9sbEZEIHdmZCA9IEdTVF9QT0xMX0ZEX0lOSVQ7Ci0gIGdpbnQgc29ja3NbMl07Ci0gIGd1Y2hhciBjID0gJ0EnOwotCi0gIHNldCA9IGdzdF9wb2xsX25ldyAoRkFMU0UpOwotICBmYWlsX2lmIChzZXQgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgYSBHc3RQb2xsIik7Ci0KLSNpZmRlZiBHX09TX1dJTjMyCi0gIGZhaWxfaWYgKF9waXBlIChzb2NrcywgNDA5NiwgX09fQklOQVJZKSA8IDAsICJDb3VsZCBub3QgY3JlYXRlIGEgcGlwZSIpOwotI2Vsc2UKLSAgZmFpbF9pZiAoc29ja2V0cGFpciAoUEZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHNvY2tzKSA8IDAsCi0gICAgICAiQ291bGQgbm90IGNyZWF0ZSBhIHBpcGUiKTsKLSNlbmRpZgotICByZmQuZmQgPSBzb2Nrc1swXTsKLSAgd2ZkLmZkID0gc29ja3NbMV07Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX2FkZF9mZCAoc2V0LCAmcmZkKSwgIkNvdWxkIG5vdCBhZGQgcmVhZCBkZXNjcmlwdG9yIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9mZF9jdGxfcmVhZCAoc2V0LCAmcmZkLCBUUlVFKSwKLSAgICAgICJDb3VsZCBub3QgbWFyayB0aGUgZGVzY3JpcHRvciBhcyByZWFkYWJsZSIpOwotCi0gIGZhaWxfdW5sZXNzICh3cml0ZSAod2ZkLmZkLCAmYywgMSkgPT0gMSwgIndyaXRlKCkgZmFpbGVkIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX0NMT0NLX1RJTUVfTk9ORSkgPT0gMSwKLSAgICAgICJPbmUgZGVzY3JpcHRvciBzaG91bGQgYmUgYXZhaWxhYmxlIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9mZF9jYW5fcmVhZCAoc2V0LCAmcmZkKSwKLSAgICAgICJSZWFkIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlYWRhYmxlIik7Ci0gIGZhaWxfaWYgKGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoc2V0LCAmcmZkKSwKLSAgICAgICJSZWFkIGRlc2NyaXB0b3Igc2hvdWxkIG5vdCBiZSB3cml0ZWFibGUiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfYWRkX2ZkIChzZXQsICZ3ZmQpLCAiQ291bGQgbm90IGFkZCB3cml0ZSBkZXNjcmlwdG9yIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9mZF9jdGxfd3JpdGUgKHNldCwgJndmZCwgVFJVRSksCi0gICAgICAiQ291bGQgbm90IG1hcmsgdGhlIGRlc2NyaXB0b3IgYXMgd3JpdGVhYmxlIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX0NMT0NLX1RJTUVfTk9ORSkgPT0gMiwKLSAgICAgICJUd28gZGVzY3JpcHRvcnMgc2hvdWxkIGJlIGF2YWlsYWJsZSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKHNldCwgJnJmZCksCi0gICAgICAiUmVhZCBkZXNjcmlwdG9yIHNob3VsZCBiZSByZWFkYWJsZSIpOwotICBmYWlsX2lmIChnc3RfcG9sbF9mZF9jYW5fd3JpdGUgKHNldCwgJnJmZCksCi0gICAgICAiUmVhZCBkZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgd3JpdGVhYmxlIik7Ci0gIGZhaWxfaWYgKGdzdF9wb2xsX2ZkX2Nhbl9yZWFkIChzZXQsICZ3ZmQpLAotICAgICAgIldyaXRlIGRlc2NyaXB0b3Igc2hvdWxkIG5vdCBiZSByZWFkYWJsZSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY2FuX3dyaXRlIChzZXQsICZ3ZmQpLAotICAgICAgIldyaXRlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHdyaXRlYWJsZSIpOwotCi0gIGZhaWxfdW5sZXNzIChyZWFkIChyZmQuZmQsICZjLCAxKSA9PSAxLCAicmVhZCgpIGZhaWxlZCIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9DTE9DS19USU1FX05PTkUpID09IDEsCi0gICAgICAiT25lIGRlc2NyaXB0b3Igc2hvdWxkIGJlIGF2YWlsYWJsZSIpOwotICBmYWlsX2lmIChnc3RfcG9sbF9mZF9jYW5fcmVhZCAoc2V0LCAmcmZkKSwKLSAgICAgICJSZWFkIGRlc2NyaXB0b3Igc2hvdWxkIG5vdCBiZSByZWFkYWJsZSIpOwotICBmYWlsX2lmIChnc3RfcG9sbF9mZF9jYW5fd3JpdGUgKHNldCwgJnJmZCksCi0gICAgICAiUmVhZCBkZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgd3JpdGVhYmxlIik7Ci0gIGZhaWxfaWYgKGdzdF9wb2xsX2ZkX2Nhbl9yZWFkIChzZXQsICZ3ZmQpLAotICAgICAgIldyaXRlIGRlc2NyaXB0b3Igc2hvdWxkIG5vdCBiZSByZWFkYWJsZSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY2FuX3dyaXRlIChzZXQsICZ3ZmQpLAotICAgICAgIldyaXRlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHdyaXRlYWJsZSIpOwotCi0gIGdzdF9wb2xsX2ZyZWUgKHNldCk7Ci0gIGNsb3NlIChzb2Nrc1swXSk7Ci0gIGNsb3NlIChzb2Nrc1sxXSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9sbF9iYXNpYykKLXsKLSAgR3N0UG9sbCAqc2V0OwotICBHc3RQb2xsRkQgZmQgPSBHU1RfUE9MTF9GRF9JTklUOwotCi0gIGZkLmZkID0gMTsKLQotICBzZXQgPSBnc3RfcG9sbF9uZXcgKEZBTFNFKTsKLSAgZmFpbF9pZiAoc2V0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGEgR3N0UG9sbCIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9hZGRfZmQgKHNldCwgJmZkKSwgIkNvdWxkIG5vdCBhZGQgZGVzY3JpcHRvciIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfZmRfY3RsX3dyaXRlIChzZXQsICZmZCwgVFJVRSksCi0gICAgICAiQ291bGQgbm90IG1hcmsgdGhlIGRlc2NyaXB0b3IgYXMgd3JpdGVhYmxlIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9mZF9jdGxfcmVhZCAoc2V0LCAmZmQsIFRSVUUpLAotICAgICAgIkNvdWxkIG5vdCBtYXJrIHRoZSBkZXNjcmlwdG9yIGFzIHJlYWRhYmxlIik7Ci0gIGZhaWxfaWYgKGdzdF9wb2xsX2ZkX2hhc19jbG9zZWQgKHNldCwgJmZkKSwKLSAgICAgICJEZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgY2xvc2VkIik7Ci0gIGZhaWxfaWYgKGdzdF9wb2xsX2ZkX2hhc19lcnJvciAoc2V0LCAmZmQpLAotICAgICAgIkRlc2NyaXB0b3Igc2hvdWxkIG5vdCBoYXZlIGFuIGVycm9yIik7Ci0gIGZhaWxfaWYgKGdzdF9wb2xsX2ZkX2Nhbl93cml0ZSAoc2V0LCAmZmQpLAotICAgICAgIkRlc2NyaXB0b3Igc2hvdWxkIG5vdCBiZSB3cml0ZWFibGUiKTsKLSAgZmFpbF9pZiAoZ3N0X3BvbGxfZmRfY2FuX3JlYWQgKHNldCwgJmZkKSwKLSAgICAgICJEZXNjcmlwdG9yIHNob3VsZCBub3QgYmUgcmVhZGFibGUiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3JlbW92ZV9mZCAoc2V0LCAmZmQpLCAiQ291bGQgbm90IHJlbW92ZSBkZXNjcmlwdG9yIik7Ci0KLSAgZmFpbF9pZiAoZ3N0X3BvbGxfcmVtb3ZlX2ZkIChzZXQsICZmZCksCi0gICAgICAiQ291bGQgcmVtb3ZlIGFscmVhZHkgcmVtb3ZlZCBkZXNjcmlwdG9yIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgNTAgKiBHU1RfTVNFQ09ORCkgPT0gMCwKLSAgICAgICJXYWl0aW5nIGRpZCBub3QgdGltZW91dCIpOwotCi0gIGdzdF9wb2xsX2ZyZWUgKHNldCk7Ci0KLSAgc2V0ID0gZ3N0X3BvbGxfbmV3IChUUlVFKTsKLSAgZmFpbF9pZiAoc2V0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGEgR3N0UG9sbCIpOwotICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNldCwgVFJVRSk7Ci0gIGdzdF9wb2xsX2ZyZWUgKHNldCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdwb2ludGVyCi1kZWxheWVkX3N0b3AgKGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdFBvbGwgKnNldCA9IGRhdGE7Ci0KLSAgVEhSRUFEX1NUQVJUICgpOwotCi0gIGdfdXNsZWVwICg1MDAwMDApOwotCi0gIGdzdF9wb2xsX3NldF9mbHVzaGluZyAoc2V0LCBUUlVFKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9sbF93YWl0X3N0b3ApCi17Ci0gIEdzdFBvbGwgKnNldDsKLQotICBzZXQgPSBnc3RfcG9sbF9uZXcgKFRSVUUpOwotICBmYWlsX2lmIChzZXQgPT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgYSBHc3RQb2xsIik7Ci0KLSAgTUFJTl9TVEFSVF9USFJFQURTICgxLCBkZWxheWVkX3N0b3AsIHNldCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX1NFQ09ORCkgIT0gMCwgIldhaXRpbmcgdGltZWQgb3V0Iik7Ci0KLSAgTUFJTl9TVE9QX1RIUkVBRFMgKCk7Ci0KLSAgZ3N0X3BvbGxfZnJlZSAoc2V0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ3BvaW50ZXIKLWRlbGF5ZWRfcmVzdGFydCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0UG9sbCAqc2V0ID0gZGF0YTsKLSAgR3N0UG9sbEZEIGZkID0gR1NUX1BPTExfRkRfSU5JVDsKLQotICBmZC5mZCA9IDE7Ci0KLSAgVEhSRUFEX1NUQVJUICgpOwotCi0gIGdfdXNsZWVwICg1MDAwMDApOwotCi0gIGdzdF9wb2xsX2FkZF9mZCAoc2V0LCAmZmQpOwotICBnc3RfcG9sbF9mZF9jdGxfd3JpdGUgKHNldCwgJmZkLCBUUlVFKTsKLSAgZ3N0X3BvbGxfcmVzdGFydCAoc2V0KTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9sbF93YWl0X3Jlc3RhcnQpCi17Ci0gIEdzdFBvbGwgKnNldDsKLSAgR3N0UG9sbEZEIGZkID0gR1NUX1BPTExfRkRfSU5JVDsKLQotICBmZC5mZCA9IDE7Ci0KLSAgc2V0ID0gZ3N0X3BvbGxfbmV3IChUUlVFKTsKLSAgZmFpbF9pZiAoc2V0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGEgR3N0UG9sbCIpOwotCi0gIE1BSU5fU1RBUlRfVEhSRUFEUyAoMSwgZGVsYXllZF9yZXN0YXJ0LCBzZXQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9TRUNPTkQpID4gMCwgIldhaXRpbmcgd2FzIGludGVycnVwdGVkIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9mZF9jYW5fd3JpdGUgKHNldCwgJmZkKSwKLSAgICAgICJXcml0ZSBkZXNjcmlwdG9yIHNob3VsZCBiZSB3cml0ZWFibGUiKTsKLQotICBNQUlOX1NUT1BfVEhSRUFEUyAoKTsKLQotICBnc3RfcG9sbF9mcmVlIChzZXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBncG9pbnRlcgotZGVsYXllZF9mbHVzaCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0UG9sbCAqc2V0ID0gZGF0YTsKLQotICBUSFJFQURfU1RBUlQgKCk7Ci0KLSAgZ191c2xlZXAgKDUwMDAwMCk7Ci0gIGdzdF9wb2xsX3NldF9mbHVzaGluZyAoc2V0LCBUUlVFKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9sbF93YWl0X2ZsdXNoKQotewotICBHc3RQb2xsICpzZXQ7Ci0KLSAgc2V0ID0gZ3N0X3BvbGxfbmV3IChUUlVFKTsKLSAgZmFpbF9pZiAoc2V0ID09IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGEgR3N0UG9sbCIpOwotCi0gIGdzdF9wb2xsX3NldF9mbHVzaGluZyAoc2V0LCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX1NFQ09ORCkgPT0gLTEgJiYgZXJybm8gPT0gRUJVU1ksCi0gICAgICAiV2FpdGluZyB3YXMgbm90IGZsdXNoZWQiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX1NFQ09ORCkgPT0gLTEgJiYgZXJybm8gPT0gRUJVU1ksCi0gICAgICAiV2FpdGluZyB3YXMgbm90IGZsdXNoZWQiKTsKLQotICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNldCwgRkFMU0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfd2FpdCAoc2V0LCBHU1RfU0VDT05EKSA9PSAwLCAiV2FpdGluZyBkaWQgbm90IHRpbWVvdXQiKTsKLQotICBNQUlOX1NUQVJUX1RIUkVBRFMgKDEsIGRlbGF5ZWRfZmx1c2gsIHNldCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX1NFQ09ORCkgPT0gLTEgJiYgZXJybm8gPT0gRUJVU1ksCi0gICAgICAiV2FpdGluZyB3YXMgbm90IGZsdXNoZWQiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3dhaXQgKHNldCwgR1NUX1NFQ09ORCkgPT0gLTEgJiYgZXJybm8gPT0gRUJVU1ksCi0gICAgICAiV2FpdGluZyB3YXMgbm90IGZsdXNoZWQiKTsKLQotICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNldCwgRkFMU0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfd2FpdCAoc2V0LCBHU1RfU0VDT05EKSA9PSAwLCAiV2FpdGluZyBkaWQgbm90IHRpbWVvdXQiKTsKLQotICBNQUlOX1NUT1BfVEhSRUFEUyAoKTsKLQotICBnc3RfcG9sbF9mcmVlIChzZXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBncG9pbnRlcgotZGVsYXllZF9jb250cm9sIChncG9pbnRlciBkYXRhKQotewotICBHc3RQb2xsICpzZXQgPSBkYXRhOwotICBHc3RQb2xsRkQgZmQgPSBHU1RfUE9MTF9GRF9JTklUOwotCi0gIGZkLmZkID0gMTsKLQotICBUSFJFQURfU1RBUlQgKCk7Ci0KLSAgZ191c2xlZXAgKDUwMDAwMCk7Ci0KLSAgZ3N0X3BvbGxfYWRkX2ZkIChzZXQsICZmZCk7Ci0gIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAoc2V0LCAmZmQsIFRSVUUpOwotICBnc3RfcG9sbF9yZXN0YXJ0IChzZXQpOwotCi0gIGdfbXV0ZXhfbG9jayAoJm11dGV4KTsKLSAgVEhSRUFEX1NZTkNIUk9OSVpFICgpOwotCi0gIGdfdXNsZWVwICg1MDAwMDApOwotCi0gIGdzdF9wb2xsX2FkZF9mZCAoc2V0LCAmZmQpOwotICBnc3RfcG9sbF9mZF9jdGxfd3JpdGUgKHNldCwgJmZkLCBUUlVFKTsKLSAgZ3N0X3BvbGxfcmVzdGFydCAoc2V0KTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9sbF9jb250cm9sbGFibGUpCi17Ci0gIEdzdFBvbGwgKnNldDsKLSAgR3N0UG9sbEZEIGZkID0gR1NUX1BPTExfRkRfSU5JVDsKLQotICBmZC5mZCA9IDE7Ci0KLSAgc2V0ID0gZ3N0X3BvbGxfbmV3IChGQUxTRSk7Ci0gIGZhaWxfaWYgKHNldCA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBhIEdzdFBvbGwiKTsKLQotICBNQUlOX1NUQVJUX1RIUkVBRFMgKDEsIGRlbGF5ZWRfY29udHJvbCwgc2V0KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfd2FpdCAoc2V0LCBHU1RfU0VDT05EKSA9PSAwLCAiV2FpdGluZyBkaWQgbm90IHRpbWVvdXQiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BvbGxfcmVtb3ZlX2ZkIChzZXQsICZmZCksICJDb3VsZCBub3QgcmVtb3ZlIGRlc2NyaXB0b3IiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wb2xsX3NldF9jb250cm9sbGFibGUgKHNldCwgVFJVRSksCi0gICAgICAiQ291bGQgbm90IG1ha2UgdGhlIHNldCBjb250cm9sbGFibGUiKTsKLQotICBNQUlOX1NZTkNIUk9OSVpFICgpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF93YWl0IChzZXQsIEdTVF9TRUNPTkQpID4gMCwgIldhaXRpbmcgd2FzIGludGVycnVwdGVkIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcG9sbF9mZF9jYW5fd3JpdGUgKHNldCwgJmZkKSwKLSAgICAgICJXcml0ZSBkZXNjcmlwdG9yIHNob3VsZCBiZSB3cml0ZWFibGUiKTsKLQotICBNQUlOX1NUT1BfVEhSRUFEUyAoKTsKLQotICBnc3RfcG9sbF9mcmVlIChzZXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfcG9sbF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RQb2xsIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICAvKiB0dXJuIG9mZiB0aW1lb3V0ICovCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgNjApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0jaWZuZGVmIEdfT1NfV0lOMzIKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BvbGxfYmFzaWMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9sbF93YWl0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BvbGxfd2FpdF9zdG9wKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BvbGxfd2FpdF9yZXN0YXJ0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BvbGxfd2FpdF9mbHVzaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb2xsX2NvbnRyb2xsYWJsZSk7Ci0jZWxzZQotICB0Y2FzZV9za2lwX2Jyb2tlbl90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb2xsX2Jhc2ljKTsKLSAgdGNhc2Vfc2tpcF9icm9rZW5fdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9sbF93YWl0KTsKLSAgdGNhc2Vfc2tpcF9icm9rZW5fdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9sbF93YWl0X3N0b3ApOwotICB0Y2FzZV9za2lwX2Jyb2tlbl90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wb2xsX3dhaXRfcmVzdGFydCk7Ci0gIHRjYXNlX3NraXBfYnJva2VuX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BvbGxfd2FpdF9mbHVzaCk7Ci0gIHRjYXNlX3NraXBfYnJva2VuX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BvbGxfY29udHJvbGxhYmxlKTsKLSNlbmRpZgotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X3BvbGwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHByZXNldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmZjYTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RwcmVzZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDMwMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1YnNpZGFyeSgtaWVzKQotICogICAgICAgICAgICAgICBjb250YWN0OiA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICoKLSAqIGdzdHByZXNldC5jOiBVbml0IHRlc3QgZm9yIEdzdFByZXNldAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotc3RhdGljIEdUeXBlIGdzdF9wcmVzZXRfdGVzdF9nZXRfdHlwZSAodm9pZCk7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUFJFU0VUX1RFU1QgICAgICAgICAgICAoZ3N0X3ByZXNldF90ZXN0X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfUFJFU0VUX1RFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1BSRVNFVF9URVNULCBHc3RQcmVzZXRUZXN0KSkKLSNkZWZpbmUgR1NUX1BSRVNFVF9URVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1BSRVNFVF9URVNULCBHc3RQcmVzZXRUZXN0Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUFJFU0VUX1RFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1BSRVNFVF9URVNUKSkKLSNkZWZpbmUgR1NUX0lTX1BSRVNFVF9URVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1BSRVNFVF9URVNUKSkKLSNkZWZpbmUgR1NUX1BSRVNFVF9URVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX1BSRVNFVF9URVNULCBHc3RQcmVzZXRUZXN0Q2xhc3MpKQotI2RlZmluZSBHU1RfUFJFU0VUX1RFU1RfTkFNRSAgICAgICAgICAgICJwcmVzZXQtdGVzdCIKLQotZW51bQotewotICBQUk9QX1RFU1QgPSAxLAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFByZXNldFRlc3QKLXsKLSAgR3N0RWxlbWVudCBwYXJlbnQ7Ci0KLSAgZ2ludCB0ZXN0OwotfSBHc3RQcmVzZXRUZXN0OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UHJlc2V0VGVzdENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19IEdzdFByZXNldFRlc3RDbGFzczsKLQotc3RhdGljIHZvaWQKLWdzdF9wcmVzZXRfdGVzdF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BlcnR5X2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFByZXNldFRlc3QgKnNlbGYgPSBHU1RfUFJFU0VUX1RFU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgewotICAgIGNhc2UgUFJPUF9URVNUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc2VsZi0+dGVzdCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ByZXNldF90ZXN0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UHJlc2V0VGVzdCAqc2VsZiA9IEdTVF9QUkVTRVRfVEVTVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BlcnR5X2lkKSB7Ci0gICAgY2FzZSBQUk9QX1RFU1Q6Ci0gICAgICBzZWxmLT50ZXN0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ByZXNldF90ZXN0X2NsYXNzX2luaXQgKEdPYmplY3RDbGFzcyAqIGtsYXNzKQotewotICBrbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3ByZXNldF90ZXN0X3NldF9wcm9wZXJ0eTsKLSAga2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9wcmVzZXRfdGVzdF9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoa2xhc3MsIFBST1BfVEVTVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ0ZXN0IiwKLSAgICAgICAgICAidGVzdCBwcm9wIiwKLSAgICAgICAgICAidGVzdCBwYXJhbWV0ZXIgZm9yIHByZXNldCB0ZXN0IiwKLSAgICAgICAgICBHX01JTklOVCwgR19NQVhJTlQsIDAsIEdfUEFSQU1fUkVBRFdSSVRFKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHJlc2V0X3Rlc3RfYmFzZV9pbml0IChHc3RQcmVzZXRUZXN0Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiRWxlbWVudCBmb3IgdW5pdCB0ZXN0cyIsCi0gICAgICAiVGVzdGluZyIsICJVc2UgaW4gdW5pdCB0ZXN0cyIsICJTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPiIpOwotfQotCi1zdGF0aWMgR1R5cGUKLWdzdF9wcmVzZXRfdGVzdF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIHByZXNldF90ZXN0X3R5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnByZXNldF90ZXN0X3R5cGUpKSB7Ci0gICAgR1R5cGUgdHlwZTsKLSAgICBjb25zdCBHVHlwZUluZm8gaW5mbyA9IHsKLSAgICAgIHNpemVvZiAoR3N0UHJlc2V0VGVzdENsYXNzKSwKLSAgICAgIChHQmFzZUluaXRGdW5jKSBnc3RfcHJlc2V0X3Rlc3RfYmFzZV9pbml0LCAgICAgICAgLyogYmFzZV9pbml0ICovCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfZmluYWxpemUgKi8KLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X3ByZXNldF90ZXN0X2NsYXNzX2luaXQsICAgICAgLyogY2xhc3NfaW5pdCAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19maW5hbGl6ZSAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19kYXRhICovCi0gICAgICBzaXplb2YgKEdzdFByZXNldFRlc3QpLAotICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBuX3ByZWFsbG9jcyAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBpbnN0YW5jZV9pbml0ICovCi0gICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8qIHZhbHVlX3RhYmxlICovCi0gICAgfTsKLSAgICBjb25zdCBHSW50ZXJmYWNlSW5mbyBwcmVzZXRfaW50ZXJmYWNlX2luZm8gPSB7Ci0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGludGVyZmFjZV9pbml0ICovCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGludGVyZmFjZV9maW5hbGl6ZSAqLwotICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcmZhY2VfZGF0YSAqLwotICAgIH07Ci0gICAgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UWVBFX0VMRU1FTlQsICJHc3RQcmVzZXRUZXN0IiwgJmluZm8sIDApOwotICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAodHlwZSwgR1NUX1RZUEVfUFJFU0VULCAmcHJlc2V0X2ludGVyZmFjZV9pbmZvKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJnByZXNldF90ZXN0X3R5cGUsIHR5cGUpOwotICB9Ci0gIHJldHVybiBwcmVzZXRfdGVzdF90eXBlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wcmVzZXRfdGVzdF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCBHU1RfUFJFU0VUX1RFU1RfTkFNRSwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX1BSRVNFVF9URVNUKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY2hlY2spCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoR1NUX1BSRVNFVF9URVNUX05BTUUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX1BSRVNFVCAoZWxlbSkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xvYWQpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0gIGdib29sZWFuIHJlczsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChHU1RfUFJFU0VUX1RFU1RfTkFNRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9wcmVzZXRfbG9hZF9wcmVzZXQgKEdTVF9QUkVTRVQgKGVsZW0pLCAiZG9lcy1ub3QtZXhpc3QiKTsKLSAgZmFpbF91bmxlc3MgKCFyZXMpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FkZCkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLSAgZ2Jvb2xlYW4gcmVzOwotICBnaW50IHZhbDsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChHU1RfUFJFU0VUX1RFU1RfTkFNRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoZWxlbSwgInRlc3QiLCA1LCBOVUxMKTsKLQotICByZXMgPSBnc3RfcHJlc2V0X3NhdmVfcHJlc2V0IChHU1RfUFJFU0VUIChlbGVtKSwgInRlc3QiKTsKLSAgZmFpbF91bmxlc3MgKHJlcyk7Ci0KLSAgcmVzID0gZ3N0X3ByZXNldF9sb2FkX3ByZXNldCAoR1NUX1BSRVNFVCAoZWxlbSksICJ0ZXN0Iik7Ci0gIGZhaWxfdW5sZXNzIChyZXMpOwotICBnX29iamVjdF9nZXQgKGVsZW0sICJ0ZXN0IiwgJnZhbCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzICh2YWwgPT0gNSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZWwpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0gIGdib29sZWFuIHJlczsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChHU1RfUFJFU0VUX1RFU1RfTkFNRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQgKEdTVF9QUkVTRVQgKGVsZW0pLCAidGVzdCIpOwotICBmYWlsX3VubGVzcyAocmVzKTsKLQotICByZXMgPSBnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQgKEdTVF9QUkVTRVQgKGVsZW0pLCAidGVzdCIpOwotICBmYWlsX3VubGVzcyAocmVzKTsKLQotICByZXMgPSBnc3RfcHJlc2V0X2xvYWRfcHJlc2V0IChHU1RfUFJFU0VUIChlbGVtKSwgInRlc3QiKTsKLSAgZmFpbF91bmxlc3MgKCFyZXMpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R3b19pbnN0YW5jZXMpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW0xLCAqZWxlbTI7Ci0gIGdib29sZWFuIHJlczsKLSAgZ2ludCB2YWw7Ci0KLSAgZWxlbTEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKEdTVF9QUkVTRVRfVEVTVF9OQU1FLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChlbGVtMSwgInRlc3QiLCA1LCBOVUxMKTsKLQotICByZXMgPSBnc3RfcHJlc2V0X3NhdmVfcHJlc2V0IChHU1RfUFJFU0VUIChlbGVtMSksICJ0ZXN0Iik7Ci0gIGZhaWxfdW5sZXNzIChyZXMpOwotCi0gIGVsZW0yID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChHU1RfUFJFU0VUX1RFU1RfTkFNRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9wcmVzZXRfbG9hZF9wcmVzZXQgKEdTVF9QUkVTRVQgKGVsZW0yKSwgInRlc3QiKTsKLSAgZmFpbF91bmxlc3MgKHJlcyk7Ci0gIGdfb2JqZWN0X2dldCAoZWxlbTIsICJ0ZXN0IiwgJnZhbCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzICh2YWwgPT0gNSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbTEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX3ByZXNldF9maWxlICh2b2lkKQotewotICBnY2hhciAqcHJlc2V0X2ZpbGVfbmFtZTsKLQotICBwcmVzZXRfZmlsZV9uYW1lID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9kYXRhX2RpciAoKSwKLSAgICAgICJnc3RyZWFtZXItIiBHU1RfQVBJX1ZFUlNJT04sICJwcmVzZXRzIiwgIkdzdFByZXNldFRlc3QucHJzIiwgTlVMTCk7Ci0gIGdfdW5saW5rIChwcmVzZXRfZmlsZV9uYW1lKTsKLSAgZ19mcmVlIChwcmVzZXRfZmlsZV9uYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfc2V0dXAgKHZvaWQpCi17Ci0gIHJlbW92ZV9wcmVzZXRfZmlsZSAoKTsKLSAgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgICAiZ3N0LXRlc3QiLAotICAgICAgInByZXNldCB0ZXN0IHBsdWdpbiIsCi0gICAgICBnc3RfcHJlc2V0X3Rlc3RfcGx1Z2luX2luaXQsCi0gICAgICBWRVJTSU9OLCBHU1RfTElDRU5TRSwgUEFDS0FHRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfdGVhcmRvd24gKHZvaWQpCi17Ci0gIHJlbW92ZV9wcmVzZXRfZmlsZSAoKTsKLX0KLQotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X3ByZXNldF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RQcmVzZXQiKTsKLSAgVENhc2UgKnRjID0gdGNhc2VfY3JlYXRlICgicHJlc2V0Iik7Ci0gIGdjaGFyICpnc3RfZGlyOwotICBnYm9vbGVhbiBjYW5fd3JpdGUgPSBGQUxTRTsKLQotICAvKiBjaGVjayBpZiB3ZSBjYW4gY3JlYXRlIHByZXNldHMgKi8KLSAgZ3N0X2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfZGF0YV9kaXIgKCksCi0gICAgICAiZ3N0cmVhbWVyLSIgR1NUX0FQSV9WRVJTSU9OLCBOVUxMKTsKLSAgY2FuX3dyaXRlID0gKGdfYWNjZXNzIChnc3RfZGlyLCBSX09LIHwgV19PSyB8IFhfT0spID09IDApOwotICBnX2ZyZWUgKGdzdF9kaXIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfY2hlY2spOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfbG9hZCk7Ci0gIGlmIChjYW5fd3JpdGUpIHsKLSAgICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfYWRkKTsKLSAgICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfZGVsKTsKLSAgICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfdHdvX2luc3RhbmNlcyk7Ci0gIH0KLSAgdGNhc2VfYWRkX3VuY2hlY2tlZF9maXh0dXJlICh0YywgdGVzdF9zZXR1cCwgdGVzdF90ZWFyZG93bik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfcHJlc2V0KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RwcmludGYuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RwcmludGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjYTY0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0cHJpbnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdHMgZm9yIHRoZSBjdXN0b20gcHJpbnRmCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIGNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotI2Vycm9yICJTb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgYnVpbGQgc3lzdGVtIHNldHVwIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3QvcHJpbnRmL3ByaW50Zi5oIgotLyoKLSNpbmNsdWRlICJnc3QvcHJpbnRmL3ByaW50Zi1leHRlbnNpb24uaCIKLSovCi0KLXN0YXRpYyBjaGFyICoKLXRlc3RfcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotICBjaGFyICpzdHIgPSBOVUxMOwotICBpbnQgbGVuOwotCi0gIHZhX3N0YXJ0ICh2YXJhcmdzLCBmb3JtYXQpOwotICBsZW4gPSBfX2dzdF92YXNwcmludGYgKCZzdHIsIGZvcm1hdCwgdmFyYXJncyk7Ci0gIHZhX2VuZCAodmFyYXJncyk7Ci0KLSAgaWYgKGxlbiA8PSAwKQotICAgIHJldHVybiBOVUxMOwotCi0gIEdTVF9JTkZPICgiWyVzXSIsIHN0cik7Ci0gIHJldHVybiBzdHI7Ci19Ci0KLUdTVF9TVEFSVF9URVNUIChwcmludGZfSTMyX0k2NCkKLXsKLSAgZ3VpbnQ2NCB2NjQgPSAweGYxZTJkM2M0YjVhNjk3OGY7Ci0gIGd1aW50MzIgdjMyID0gMHhmMWUyZDNjZjsKLSAgZ3VpbnQgdnUgPSAweGYxZTJkM2NmOwotICBnY2hhciAqc3RyOwotCi0gIC8qIHN0YW5kYXJkIGludC91aW50ICovCi0gIHN0ciA9IHRlc3RfcHJpbnRmICgieCA9ICV4IiwgdnUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICJ4ID0gZjFlMmQzY2YiKTsKLSAgZ19mcmVlIChzdHIpOwotICBzdHIgPSB0ZXN0X3ByaW50ZiAoInUgPSAldSIsIHZ1KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAidSA9IDQwNTgxNzQ0MTUiKTsKLSAgZ19mcmVlIChzdHIpOwotICBzdHIgPSB0ZXN0X3ByaW50ZiAoImQgPSAlZCIsIHZ1KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiZCA9IC0yMzY3OTI4ODEiKTsKLSAgZ19mcmVlIChzdHIpOwotCi0gIC8qIDMyIGJpdCBHTGliICovCi0gIHN0ciA9IHRlc3RfcHJpbnRmICgiMzItYml0IHggdmFsdWUgPSAlIiBHX0dJTlQzMl9NT0RJRklFUiAieCIsIHYzMik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIjMyLWJpdCB4IHZhbHVlID0gZjFlMmQzY2YiKTsKLSAgZ19mcmVlIChzdHIpOwotICBzdHIgPSB0ZXN0X3ByaW50ZiAoIjMyLWJpdCB1IHZhbHVlID0gJSIgR19HVUlOVDMyX0ZPUk1BVCwgdjMyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiMzItYml0IHUgdmFsdWUgPSA0MDU4MTc0NDE1Iik7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgc3RyID0gdGVzdF9wcmludGYgKCIzMi1iaXQgZCB2YWx1ZSA9ICUiIEdfR0lOVDMyX0ZPUk1BVCwgdjMyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiMzItYml0IGQgdmFsdWUgPSAtMjM2NzkyODgxIik7Ci0gIGdfZnJlZSAoc3RyKTsKLQotICAvKiA2NCBiaXQgR2xpYiAqLwotICBzdHIgPSB0ZXN0X3ByaW50ZiAoIjY0LWJpdCB4IHZhbHVlID0gJSIgR19HSU5UNjRfTU9ESUZJRVIgIngiLCB2NjQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICI2NC1iaXQgeCB2YWx1ZSA9IGYxZTJkM2M0YjVhNjk3OGYiKTsKLSAgZ19mcmVlIChzdHIpOwotICBzdHIgPSB0ZXN0X3ByaW50ZiAoIjY0LWJpdCB1IHZhbHVlID0gJSIgR19HVUlOVDY0X0ZPUk1BVCwgdjY0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiNjQtYml0IHUgdmFsdWUgPSAxNzQyOTcyNjM0OTY5MTg4NTQ1NSIpOwotICBnX2ZyZWUgKHN0cik7Ci0gIHN0ciA9IHRlc3RfcHJpbnRmICgiNjQtYml0IGQgdmFsdWUgPSAlIiBHX0dJTlQ2NF9GT1JNQVQsIHY2NCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIjY0LWJpdCBkIHZhbHVlID0gLTEwMTcwMTc3MjQwMTc2NjYxNjEiKTsKLSAgZ19mcmVlIChzdHIpOwotCi0gIC8qIDMyIGJpdCBXaW5kb3dzICovCi0gIHN0ciA9IHRlc3RfcHJpbnRmICgiSTMyeCB2YWx1ZSA9ICVJMzJ4IiwgdjMyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiSTMyeCB2YWx1ZSA9IGYxZTJkM2NmIik7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgc3RyID0gdGVzdF9wcmludGYgKCJJMzJ1IHZhbHVlID0gJUkzMnUiLCB2MzIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICJJMzJ1IHZhbHVlID0gNDA1ODE3NDQxNSIpOwotICBnX2ZyZWUgKHN0cik7Ci0gIHN0ciA9IHRlc3RfcHJpbnRmICgiSTMyZCB2YWx1ZSA9ICVJMzJkIiwgdjMyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiSTMyZCB2YWx1ZSA9IC0yMzY3OTI4ODEiKTsKLSAgZ19mcmVlIChzdHIpOwotCi0gIC8qIG5lZWRzIHRlc3RpbmcgZmlyc3QgKi8KLSNpZiAwCi0jaWZkZWYgR19PU19XSU4zMgotICAvKiA2NCBiaXQgV2luZG93cyAqLwotICBzdHIgPSB0ZXN0X3ByaW50ZiAoIkk2NHggdmFsdWUgPSAlSTY0eCIsIHY2NCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIkk2NHggdmFsdWUgPSBmMWUyZDNjNGI1YTY5NzhmIik7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgc3RyID0gdGVzdF9wcmludGYgKCJJNjR1IHZhbHVlID0gJUk2NHUiLCB2NjQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICJJNjR1IHZhbHVlID0gMTc0Mjk3MjYzNDk2OTE4ODU0NTUiKTsKLSAgZ19mcmVlIChzdHIpOwotICBzdHIgPSB0ZXN0X3ByaW50ZiAoIkk2NGQgdmFsdWUgPSAlSTY0ZCIsIHY2NCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIkk2NGQgdmFsdWUgPSAtMTAxNzAxNzcyNDAxNzY2NjE2MSIpOwotICBnX2ZyZWUgKHN0cik7Ci0jZW5kaWYKLSNlbmRpZgotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChwcmludGZfcGVyY2VudCkKLXsKLSAgZ2NoYXIgKnN0cjsKLQotICAvKiBzdGFuZGFyZCBpbnQvdWludCAqLwotICBzdHIgPSB0ZXN0X3ByaW50ZiAoIiV1JSUiLCA5OSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIjk5JSIpOwotICBnX2ZyZWUgKHN0cik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9wcmludGZfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0UHJpbnRmIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdzdHByaW50ZiIpOwotCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMzApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHByaW50Zl9JMzJfSTY0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBwcmludGZfcGVyY2VudCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfcHJpbnRmKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3Rwcm90ZWN0aW9uLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cHJvdGVjdGlvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWRhZTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3Rwcm90ZWN0aW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogVW5pdCB0ZXN0cyBmb3IgcHJvdGVjdGlvbiBsaWJyYXJ5LgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMTU+IFlvdVZpZXcgVFYgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvZ3N0cHJvdGVjdGlvbi5oPgotCi0jaWZuZGVmIEdTVF9QQUNLQUdFX05BTUUKLSNkZWZpbmUgR1NUX1BBQ0tBR0VfTkFNRSAiZ3N0cmVhbWVyIgotI2VuZGlmCi0KLSNpZm5kZWYgR1NUX1BBQ0tBR0VfT1JJR0lOCi0jZGVmaW5lIEdTVF9QQUNLQUdFX09SSUdJTiAiaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dzdHJlYW1lci8iCi0jZW5kaWYKLQotc3RhdGljIEdUeXBlIGdzdF9wcm90ZWN0aW9uX3Rlc3RfZ2V0X3R5cGUgKHZvaWQpOwotCi0jZGVmaW5lIEdTVF9UWVBFX1BST1RFQ1RJT05fVEVTVCAgICAgICAgICAgIChnc3RfcHJvdGVjdGlvbl90ZXN0X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfUFJPVEVDVElPTl9URVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9QUk9URUNUSU9OX1RFU1QsIEdzdFByb3RlY3Rpb25UZXN0KSkKLSNkZWZpbmUgR1NUX1BST1RFQ1RJT05fVEVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9QUk9URUNUSU9OX1RFU1QsIEdzdFByb3RlY3Rpb25UZXN0Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUFJPVEVDVElPTl9URVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9QUk9URUNUSU9OX1RFU1QpKQotI2RlZmluZSBHU1RfSVNfUFJPVEVDVElPTl9URVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1BST1RFQ1RJT05fVEVTVCkpCi0jZGVmaW5lIEdTVF9QUk9URUNUSU9OX1RFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUFJPVEVDVElPTl9URVNULCBHc3RQcm90ZWN0aW9uVGVzdENsYXNzKSkKLSNkZWZpbmUgR1NUX1BST1RFQ1RJT05fVEVTVF9OQU1FICAgICAgICAgICAgInByb3RlY3Rpb24tdGVzdCIKLQotI2RlZmluZSBDTEVBUktFWV9TWVNURU1fSUQgIjc4ZjMyMTcwLWQ4ODMtMTFlMC05NTcyLTA4MDAyMDBjOWE2NiIKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFByb3RlY3Rpb25UZXN0Ci17Ci0gIEdzdEVsZW1lbnQgcGFyZW50OwotCi0gIGdpbnQgdGVzdDsKLX0gR3N0UHJvdGVjdGlvblRlc3Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQcm90ZWN0aW9uVGVzdENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19IEdzdFByb3RlY3Rpb25UZXN0Q2xhc3M7Ci0KLXR5cGVkZWYgc3RydWN0IF9QbHVnaW5Jbml0Q29udGV4dAotewotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgZ3VpbnQgcmFuazsKLSAgR1R5cGUgdHlwZTsKLX0gUGx1Z2luSW5pdENvbnRleHQ7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfZGVjcnlwdF9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUwotICAgICgiYXBwbGljYXRpb24veC1jZW5jLCBvcmlnaW5hbC1tZWRpYS10eXBlPShzdHJpbmcpdmlkZW8veC1oMjY0LCAiCi0gICAgICAgIEdTVF9QUk9URUNUSU9OX1NZU1RFTV9JRF9DQVBTX0ZJRUxEICI9KHN0cmluZykiIENMRUFSS0VZX1NZU1RFTV9JRCkKLSAgICApOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Byb3RlY3Rpb25fdGVzdF9jbGFzc19pbml0IChHT2JqZWN0Q2xhc3MgKiBrbGFzcykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wcm90ZWN0aW9uX3Rlc3RfYmFzZV9pbml0IChHc3RQcm90ZWN0aW9uVGVzdENsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2RlY3J5cHRfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIkRlY3J5cHRvciBlbGVtZW50IGZvciB1bml0IHRlc3RzIiwKLSAgICAgIEdTVF9FTEVNRU5UX0ZBQ1RPUllfS0xBU1NfREVDUllQVE9SLAotICAgICAgIlVzZSBpbiB1bml0IHRlc3RzIiwgIkFsZXggQXNobGV5IDxhbGV4LmFzaGxleUB5b3V2aWV3LmNvbT4iKTsKLX0KLQotc3RhdGljIEdUeXBlCi1nc3RfcHJvdGVjdGlvbl90ZXN0X2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgcHJvdGVjdGlvbl90ZXN0X3R5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnByb3RlY3Rpb25fdGVzdF90eXBlKSkgewotICAgIEdUeXBlIHR5cGU7Ci0gICAgY29uc3QgR1R5cGVJbmZvIGluZm8gPSB7Ci0gICAgICBzaXplb2YgKEdzdFByb3RlY3Rpb25UZXN0Q2xhc3MpLAotICAgICAgKEdCYXNlSW5pdEZ1bmMpIGdzdF9wcm90ZWN0aW9uX3Rlc3RfYmFzZV9pbml0LCAgICAvKiBiYXNlX2luaXQgKi8KLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogYmFzZV9maW5hbGl6ZSAqLwotICAgICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfcHJvdGVjdGlvbl90ZXN0X2NsYXNzX2luaXQsICAvKiBjbGFzc19pbml0ICovCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2ZpbmFsaXplICovCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2RhdGEgKi8KLSAgICAgIHNpemVvZiAoR3N0UHJvdGVjdGlvblRlc3QpLAotICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBuX3ByZWFsbG9jcyAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBpbnN0YW5jZV9pbml0ICovCi0gICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8qIHZhbHVlX3RhYmxlICovCi0gICAgfTsKLSAgICB0eXBlID0KLSAgICAgICAgZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwgIkdzdFByb3RlY3Rpb25UZXN0IiwgJmluZm8sCi0gICAgICAgIDApOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmcHJvdGVjdGlvbl90ZXN0X3R5cGUsIHR5cGUpOwotICB9Ci0gIHJldHVybiBwcm90ZWN0aW9uX3Rlc3RfdHlwZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wcm90ZWN0aW9uX3BsdWdpbl9pbml0X2Z1bmMgKEdzdFBsdWdpbiAqIHBsdWdpbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBQbHVnaW5Jbml0Q29udGV4dCAqY29udGV4dCA9IChQbHVnaW5Jbml0Q29udGV4dCAqKSB1c2VyX2RhdGE7Ci0gIGdib29sZWFuIHJldDsKLQotICByZXQgPQotICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgY29udGV4dC0+bmFtZSwgY29udGV4dC0+cmFuaywKLSAgICAgIGNvbnRleHQtPnR5cGUpOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXByb3RlY3Rpb25fY3JlYXRlX3BsdWdpbiAoR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgY29uc3QgZ2NoYXIgKiBuYW1lLAotICAgIEdUeXBlIHR5cGUpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgUGx1Z2luSW5pdENvbnRleHQgY29udGV4dDsKLQotICBjb250ZXh0Lm5hbWUgPSBuYW1lOwotICBjb250ZXh0LnJhbmsgPSBHU1RfUkFOS19NQVJHSU5BTDsKLSAgY29udGV4dC50eXBlID0gdHlwZTsKLSAgcmV0ID0gZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWNfZnVsbCAoR1NUX1ZFUlNJT05fTUFKT1IsICAgICAvKiB2ZXJzaW9uICovCi0gICAgICBHU1RfVkVSU0lPTl9NSU5PUiwgICAgICAgIC8qIHZlcnNpb24gKi8KLSAgICAgIG5hbWUsICAgICAgICAgICAgICAgICAgICAgLyogbmFtZSAqLwotICAgICAgIlByb3RlY3Rpb24gdW5pdCB0ZXN0IiwgICAvKiBkZXNjcmlwdGlvbiAqLwotICAgICAgcHJvdGVjdGlvbl9wbHVnaW5faW5pdF9mdW5jLCAgICAgIC8qIGluaXQgZnVuY3Rpb24gKi8KLSAgICAgICIwLjAuMCIsICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiBzdHJpbmcgKi8KLSAgICAgIEdTVF9MSUNFTlNFX1VOS05PV04sICAgICAgLyogbGljZW5zZSAqLwotICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAvKiBzb3VyY2UgKi8KLSAgICAgIEdTVF9QQUNLQUdFX05BTUUsICAgICAgICAgLyogcGFja2FnZSAqLwotICAgICAgR1NUX1BBQ0tBR0VfT1JJR0lOLCAgICAgICAvKiBvcmlnaW4gKi8KLSAgICAgICZjb250ZXh0ICAgICAgICAgICAgICAgICAgLyogdXNlcl9kYXRhICovCi0gICAgICApOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9zZXR1cCAodm9pZCkKLXsKLSAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5OwotCi0gIHJlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldCAoKTsKLSAgcHJvdGVjdGlvbl9jcmVhdGVfcGx1Z2luIChyZWdpc3RyeSwgR1NUX1BST1RFQ1RJT05fVEVTVF9OQU1FLAotICAgICAgR1NUX1RZUEVfUFJPVEVDVElPTl9URVNUKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfdGVhcmRvd24gKHZvaWQpCi17Ci19Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVjcnlwdG9yX2VsZW1lbnRfY2xhc3MpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0gIGNvbnN0IGdjaGFyICpzZWxlY3RlZF9pZDsKLSAgY29uc3QgZ2NoYXIgKnN5c19pZHNbXSA9IHsKLSAgICBDTEVBUktFWV9TWVNURU1fSUQsCi0gICAgIjY5ZjkwOGFmLTQ4MTYtNDZlYS05MTBjLWNkNWRjY2NiMGEzYSIsCi0gICAgIjVlNjI5YWY1LTM4ZGEtNDA2My04OTc3LTk3ZmZiZDk5MDJkNCIsCi0gICAgTlVMTAotICB9OwotCi0jaWZkZWYgREVCVUdfUExVR0lOUwotICBHTGlzdCAqbGlzdCwgKndhbGs7Ci0KLSAgbGlzdCA9IGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKGdzdF9yZWdpc3RyeV9nZXQgKCkpOwotICBmb3IgKHdhbGsgPSBsaXN0OyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW4gPSAoR3N0UGx1Z2luICopIHdhbGstPmRhdGE7Ci0gICAgZ19wcmludCAoIkVsZW1lbnQgJXNcbiIsIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbikpOwotICB9Ci0jZW5kaWYKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChHU1RfUFJPVEVDVElPTl9URVNUX05BTUUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0VMRU1FTlQgKGVsZW0pKTsKLQotICBzZWxlY3RlZF9pZCA9IGdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW0gKHN5c19pZHMpOwotICBmYWlsX2lmIChzZWxlY3RlZF9pZCA9PSBOVUxMKTsKLQotICBzZWxlY3RlZF9pZCA9IGdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW0gKCZzeXNfaWRzWzFdKTsKLSAgZmFpbF91bmxlc3MgKHNlbGVjdGVkX2lkID09IE5VTEwpOwotCi0gIHNlbGVjdGVkX2lkID0gZ3N0X3Byb3RlY3Rpb25fc2VsZWN0X3N5c3RlbSAoJnN5c19pZHNbM10pOwotICBmYWlsX3VubGVzcyAoc2VsZWN0ZWRfaWQgPT0gTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHJvdGVjdGlvbl9tZXRhZGF0YSkKLXsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotICBHc3RCdWZmZXIgKml2LCAqa2lkOwotICBHc3RCdWZmZXIgKmZldGNoZWRfaXYgPSBOVUxMLCAqZmV0Y2hlZF9rZXlfaWQgPSBOVUxMOwotICBHc3RTdHJ1Y3R1cmUgKm1ldGFfaW5mbzsKLSAgR3N0UHJvdGVjdGlvbk1ldGEgKm1ldGEgPSBOVUxMOwotICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9IE5VTEw7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgLyogQ2hlY2sgY29ycmVjdCB0eXBlIGluZm8gaXMgcmV0dXJuZWQgKi8KLSAgaW5mbyA9IGdzdF9wcm90ZWN0aW9uX21ldGFfZ2V0X2luZm8gKCk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5mby0+YXBpID09IEdTVF9QUk9URUNUSU9OX01FVEFfQVBJX1RZUEUpOwotCi0gIGl2ID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDE2LCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGl2LCAwLCAnaScsIDE2KTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChpdiwgIml2IiwgMSk7Ci0gIGtpZCA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxNiwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWVtc2V0IChraWQsIDAsICdrJywgMTYpOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGtpZCwgImtpZCIsIDEpOwotICBtZXRhX2luZm8gPSBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtY2VuYyIsCi0gICAgICAiZW5jcnlwdGVkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsCi0gICAgICAiaXYiLCBHU1RfVFlQRV9CVUZGRVIsIGl2LAotICAgICAgIml2X3NpemUiLCBHX1RZUEVfVUlOVCwgMTYsICJraWQiLCBHU1RfVFlQRV9CVUZGRVIsIGtpZCwgTlVMTCk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoa2lkLCAia2lkIiwgMik7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoaXYsICJpdiIsIDIpOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMDI0LCBOVUxMKTsKLSAgLyogVGVzdCBhdHRhY2hpbmcgcHJvdGVjdGlvbiBtZXRhZGF0YSB0byBidWZmZXIgKi8KLSAgbWV0YSA9IGdzdF9idWZmZXJfYWRkX3Byb3RlY3Rpb25fbWV0YSAoYnVmLCBtZXRhX2luZm8pOwotICBmYWlsX3VubGVzcyAobWV0YSAhPSBOVUxMKTsKLSAgLyogZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgdGFrZXMgb3duZXJzaGlwIG9mIGluZm8gR3N0U3RydWN0dXJlICovCi0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmLCAiQnVmZmVyIiwgMSk7Ci0KLSAgLyogVGVzdCBkZXRhY2hpbmcgcHJvdGVjdGlvbiBtZXRhZGF0YSBmcm9tIGJ1ZmZlciwgYW5kIGNoZWNrIHRoYXQKLSAgICogY29udGFpbmVkIGRhdGEgaXMgY29ycmVjdCAqLwotICBtZXRhID0gTlVMTDsKLSAgbWV0YSA9IGdzdF9idWZmZXJfZ2V0X3Byb3RlY3Rpb25fbWV0YSAoYnVmKTsKLSAgZmFpbF91bmxlc3MgKG1ldGEgIT0gTlVMTCk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmLCAiQnVmZmVyIiwgMSk7Ci0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKG1ldGEtPmluZm8sICJpdiIpOwotICBmYWlsX3VubGVzcyAodmFsdWUgIT0gTlVMTCk7Ci0gIGZldGNoZWRfaXYgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAodmFsdWUpOwotICBmYWlsX3VubGVzcyAoZmV0Y2hlZF9pdiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGZldGNoZWRfaXYpID09IDE2KTsKLSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAobWV0YS0+aW5mbywgImtpZCIpOwotICBmYWlsX3VubGVzcyAodmFsdWUgIT0gTlVMTCk7Ci0gIGZldGNoZWRfa2V5X2lkID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKHZhbHVlKTsKLSAgZmFpbF91bmxlc3MgKGZldGNoZWRfa2V5X2lkICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZmV0Y2hlZF9rZXlfaWQpID09IDE2KTsKLQotICBnc3RfYnVmZmVyX3JlbW92ZV9tZXRhIChidWYsIChHc3RNZXRhICopIG1ldGEpOwotCi0gIC8qIENoZWNrIHRoYXQgcmVmY291bnRzIGFyZSBkZWNyZW1lbnRlZCBhZnRlciBtZXRhZGF0YSBpcyBmcmVlZCAqLwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZiwgIkJ1ZmZlciIsIDEpOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGl2LCAiSVYiLCAxKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChraWQsICJLSUQiLCAxKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChpdik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGtpZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXByb3RlY3Rpb25fc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgicHJvdGVjdGlvbiBsaWJyYXJ5Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlY3J5cHRvcl9lbGVtZW50X2NsYXNzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Byb3RlY3Rpb25fbWV0YWRhdGEpOwotICB0Y2FzZV9hZGRfdW5jaGVja2VkX2ZpeHR1cmUgKHRjX2NoYWluLCB0ZXN0X3NldHVwLCB0ZXN0X3RlYXJkb3duKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHByb3RlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHF1ZXJ5LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZkOTg5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0cXVlcnkuYworKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLUdTVF9TVEFSVF9URVNUIChjcmVhdGVfcXVlcmllcykKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotCi0gIC8qIFBPU0lUSU9OICovCi0gIHsKLSAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgIGdpbnQ2NCBwb3NpdGlvbjsKLQotICAgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbiAoR1NUX0ZPUk1BVF9USU1FKTsKLSAgICBmYWlsX2lmIChxdWVyeSA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfUE9TSVRJT04pOwotCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0gICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCAweGRlYWRiZWFmKTsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsICZwb3NpdGlvbik7Ci0gICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgZmFpbF9pZiAocG9zaXRpb24gIT0gMHhkZWFkYmVhZik7Ci0KLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgfQotICAvKiBEVVJBVElPTiAqLwotICB7Ci0gICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICBnaW50NjQgZHVyYXRpb247Ci0KLSAgICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgZmFpbF9pZiAocXVlcnkgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0RVUkFUSU9OKTsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotICAgIGZhaWxfaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpOwotCi0gICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwgMHhkZWFkYmVhZik7Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCAmZHVyYXRpb24pOwotICAgIGZhaWxfaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpOwotICAgIGZhaWxfaWYgKGR1cmF0aW9uICE9IDB4ZGVhZGJlYWYpOwotCi0gICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0gIH0KLSAgLyogQlVGRkVSSU5HIFJBTkdFUyAqLwotICB7Ci0gICAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotCi0gICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyAoR1NUX0ZPUk1BVF9QRVJDRU5UKTsKLSAgICBmYWlsX2lmIChxdWVyeSA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfQlVGRkVSSU5HKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfcXVlcnlfYWRkX2J1ZmZlcmluZ19yYW5nZSAocXVlcnksIDAsIDIwKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgMjUsIDMwKSk7Ci0KLSAgICAvKiBjaGVjayBpbmNvaGVyZW50IHJhbmdlIGluc2VydGlvbiAqLwotICAgIGZhaWxfaWYgKGdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgMTAsIDE1KSk7Ci0gICAgZmFpbF9pZiAoZ3N0X3F1ZXJ5X2FkZF9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCA1MCwgNDApKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlcyAocXVlcnkpID09IDIpOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlIChxdWVyeSwgMCwgJnN0YXJ0LCAmc3RvcCkpOwotICAgIGZhaWxfdW5sZXNzIChzdGFydCA9PSAwKTsKLSAgICBmYWlsX3VubGVzcyAoc3RvcCA9PSAyMCk7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCAxLCAmc3RhcnQsICZzdG9wKSk7Ci0gICAgZmFpbF91bmxlc3MgKHN0YXJ0ID09IDI1KTsKLSAgICBmYWlsX3VubGVzcyAoc3RvcCA9PSAzMCk7Ci0KLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgfQotICB7Ci0gICAgLyogRklYTUUgbWFrZSB0ZXN0cyBmb3I6Ci0gICAgICoKLSAgICAgKiBMQVRFTkNZCi0gICAgICogSklUVEVSCi0gICAgICogUkFURQotICAgICAqIFNFRUtJTkcKLSAgICAgKiBTRUdNRU5UCi0gICAgICogQ09OVkVSVAotICAgICAqLwotICB9Ci0gIC8qIFNFR01FTlQgKi8KLSAgewotICAgIGdkb3VibGUgcmF0ZTsKLSAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKLQotICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRfQllURVM7Ci0gICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZ21lbnQgKGZvcm1hdCk7Ci0KLSAgICBmYWlsX2lmIChxdWVyeSA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfU0VHTUVOVCk7Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2Vfc2VnbWVudCAocXVlcnksICZyYXRlLCAmZm9ybWF0LCAmc3RhcnQsICZzdG9wKTsKLQotICAgIC8qIHNlZSBpZiBlbXB0eSBnaXZlcyB1bmRlZmluZWQgZm9ybWF0cyAqLwotICAgIGZhaWxfaWYgKHJhdGUgIT0gMC4wKTsKLSAgICBmYWlsX2lmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgZmFpbF9pZiAoc3RhcnQgIT0gLTEpOwotICAgIGZhaWxfaWYgKHN0b3AgIT0gLTEpOwotCi0gICAgLyogY2hhbmdlIGFsbCB2YWx1ZXMgKi8KLSAgICBnc3RfcXVlcnlfc2V0X3NlZ21lbnQgKHF1ZXJ5LCAyLjAsIEdTVF9GT1JNQVRfVElNRSwgMSAqIEdTVF9TRUNPTkQsCi0gICAgICAgIDMgKiBHU1RfU0VDT05EKTsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9zZWdtZW50IChxdWVyeSwgJnJhdGUsICZmb3JtYXQsICZzdGFydCwgJnN0b3ApOwotCi0gICAgLyogc2VlIGlmIHRoZSB2YWx1ZXMgd2VyZSBjaGFuZ2VkICovCi0gICAgZmFpbF9pZiAocmF0ZSAhPSAyLjApOwotICAgIGZhaWxfaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpOwotICAgIGZhaWxfaWYgKHN0YXJ0ICE9IDEgKiBHU1RfU0VDT05EKTsKLSAgICBmYWlsX2lmIChzdG9wICE9IDMgKiBHU1RfU0VDT05EKTsKLQotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICB9Ci0KLSAgLyogRk9STUFUUyAqLwotICB7Ci0gICAgZ3VpbnQgc2l6ZTsKLSAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2Zvcm1hdHMgKCk7Ci0gICAgZmFpbF9pZiAocXVlcnkgPT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0ZPUk1BVFMpOwotCi0gICAgLyogZW1wdHkgKi8KLSAgICBnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzIChxdWVyeSwgJnNpemUpOwotICAgIGZhaWxfaWYgKHNpemUgIT0gMCk7Ci0KLSAgICAvKiBzZWUgaWYgZW1wdHkgZ2l2ZXMgdW5kZWZpbmVkIGZvcm1hdHMgKi8KLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAocXVlcnksIDAsICZmb3JtYXQpOwotICAgIGZhaWxfaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQgKHF1ZXJ5LCAxLCAmZm9ybWF0KTsKLSAgICBmYWlsX2lmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotCi0gICAgLyogc2V0IDIgZm9ybWF0cyAqLwotICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDIsIEdTVF9GT1JNQVRfVElNRSwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2Vfbl9mb3JtYXRzIChxdWVyeSwgJnNpemUpOwotICAgIGZhaWxfaWYgKHNpemUgIT0gMik7Ci0KLSAgICBmb3JtYXQgPSBHU1RfRk9STUFUX1VOREVGSU5FRDsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0IChxdWVyeSwgMCwgJmZvcm1hdCk7Ci0gICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9mb3JtYXQgKHF1ZXJ5LCAxLCAmZm9ybWF0KTsKLSAgICBmYWlsX2lmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUyk7Ci0KLSAgICAvKiBvdXQgb2YgYm91bmRzLCBzaG91bGQgcmV0dXJuIFVOREVGSU5FRCAqLwotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0IChxdWVyeSwgMiwgJmZvcm1hdCk7Ci0gICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLQotICAgIC8qIG92ZXJ3cml0ZSB3aXRoIDMgZm9ybWF0cyAqLwotICAgIGdzdF9xdWVyeV9zZXRfZm9ybWF0cyAocXVlcnksIDMsIEdTVF9GT1JNQVRfVElNRSwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgICAgR1NUX0ZPUk1BVF9QRVJDRU5UKTsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHMgKHF1ZXJ5LCAmc2l6ZSk7Ci0gICAgZmFpbF9pZiAoc2l6ZSAhPSAzKTsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0IChxdWVyeSwgMiwgJmZvcm1hdCk7Ci0gICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfUEVSQ0VOVCk7Ci0KLSAgICAvKiBjcmVhdGUgb25lIGZyb20gYW4gYXJyYXkgKi8KLSAgICB7Ci0gICAgICBzdGF0aWMgR3N0Rm9ybWF0IGZvcm1hdHNbXSA9IHsKLSAgICAgICAgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgICBHU1RfRk9STUFUX1BFUkNFTlQKLSAgICAgIH07Ci0gICAgICBnc3RfcXVlcnlfc2V0X2Zvcm1hdHN2IChxdWVyeSwgMywgZm9ybWF0cyk7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9uX2Zvcm1hdHMgKHF1ZXJ5LCAmc2l6ZSk7Ci0gICAgICBmYWlsX2lmIChzaXplICE9IDMpOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAocXVlcnksIDAsICZmb3JtYXQpOwotICAgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2Zvcm1hdCAocXVlcnksIDIsICZmb3JtYXQpOwotICAgICAgZmFpbF9pZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfUEVSQ0VOVCk7Ci0gICAgfQotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcXVlcmllcykKLXsKLSAgR3N0QmluICpiaW47Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdzdFF1ZXJ5ICpkdXIsICpwb3M7Ci0KLSAgZmFpbF91bmxlc3MgKChiaW4gPSAoR3N0QmluICopIGdzdF9waXBlbGluZV9uZXcgKE5VTEwpKSAhPSBOVUxMLAotICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgcGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKChzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCkpICE9IE5VTEwsCi0gICAgICAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAiZGF0YXJhdGUiLCAyMDAsICJzaXpldHlwZSIsIDIsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzICgoc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCkpICE9IE5VTEwsCi0gICAgICAiQ291bGQgbm90IGNyZWF0ZSBmYWtlc2luayIpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJzeW5jIiwgVFJVRSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzICgoZHVyID0gZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbiAoR1NUX0ZPUk1BVF9CWVRFUykpICE9IE5VTEwsCi0gICAgICAiQ291bGQgbm90IHByZXBhcmUgZHVyYXRpb24gcXVlcnkiKTsKLSAgZmFpbF91bmxlc3MgKChwb3MgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uIChHU1RfRk9STUFUX0JZVEVTKSkgIT0gTlVMTCwKLSAgICAgICJDb3VsZCBub3QgcHJlcGFyZSBwb3NpdGlvbiBxdWVyeSIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoYmluLCBzcmMpLCAiQ291bGQgbm90IGFkZCBzcmMgdG8gYmluIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoYmluLCBzaW5rKSwgIkNvdWxkIG5vdCBhZGQgc2luayB0byBiaW4iKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luayksICJjb3VsZCBub3QgbGluayBzcmMgYW5kIHNpbmsiKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsICJGYWlsZWQgdG8gc2V0IHBpcGVsaW5lIFBMQVlJTkciKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIC8qIFF1ZXJ5IHRoZSBiaW4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChHU1RfRUxFTUVOVCAoYmluKSwgcG9zKSwKLSAgICAgICJDb3VsZCBub3QgcXVlcnkgcGlwZWxpbmUgcG9zaXRpb24iKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChHU1RfRUxFTUVOVCAoYmluKSwgZHVyKSwKLSAgICAgICJDb3VsZCBub3QgcXVlcnkgcGlwZWxpbmUgZHVyYXRpb24iKTsKLQotICAvKiBRdWVyeSBlbGVtZW50cyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKEdTVF9FTEVNRU5UIChzcmMpLCBwb3MpLAotICAgICAgIkNvdWxkIG5vdCBxdWVyeSBwb3NpdGlvbiBvZiBmYWtlc3JjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9xdWVyeSAoR1NUX0VMRU1FTlQgKHNyYyksIHBvcyksCi0gICAgICAiQ291bGQgbm90IHF1ZXJ5IGR1cmF0aW9uIG9mIGZha2VzcmMiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnkgKEdTVF9FTEVNRU5UIChzaW5rKSwgcG9zKSwKLSAgICAgICJDb3VsZCBub3QgcXVlcnkgcG9zaXRpb24gb2YgZmFrZXNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5IChHU1RfRUxFTUVOVCAoc2luayksIHBvcyksCi0gICAgICAiQ291bGQgbm90IHF1ZXJ5IGR1cmF0aW9uIG9mIGZha2VzaW5rIik7Ci0KLSAgLyogUXVlcnkgcGFkcyAqLwotICBmYWlsX3VubGVzcyAoKHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKSkgIT0gTlVMTCwKLSAgICAgICJDb3VsZCBub3QgZ2V0IHNvdXJjZSBwYWQgb2YgZmFrZXNyYyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9xdWVyeSAocGFkLCBwb3MpLAotICAgICAgIkNvdWxkIG5vdCBxdWVyeSBwb3NpdGlvbiBvZiBmYWtlc3JjIHNyYyBwYWQiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcXVlcnkgKHBhZCwgZHVyKSwKLSAgICAgICJDb3VsZCBub3QgcXVlcnkgZHVyYXRpb24gb2YgZmFrZXNyYyBzcmMgcGFkIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgLyogV2UgZG9uJ3QgcXVlcnkgdGhlIHNpbmsgcGFkIG9mIGZha2VzaW5rLCBpdCBkb2Vzbid0IAotICAgKiBoYW5kbGUgZG93bnN0cmVhbSBxdWVyaWVzIGF0bSwgYnV0IGl0IG1pZ2h0IGxhdGVyLCB3aG8ga25vd3M/ICovCi0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX2lmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCAiRmFpbGVkIHRvIHNldCBwaXBlbGluZSBOVUxMIik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKGR1cik7Ci0gIGdzdF9xdWVyeV91bnJlZiAocG9zKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X3F1ZXJ5X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFF1ZXJ5Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInF1ZXJpZXMiKTsKLQotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDIwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBjcmVhdGVfcXVlcmllcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9xdWVyaWVzKTsKLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfcXVlcnkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHJlZ2lzdHJ5LmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0cmVnaXN0cnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE3ZWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0cmVnaXN0cnkuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgdGhlIHBsdWdpbiByZWdpc3RyeQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RhdGljIGdpbnQKLXBsdWdpbl9uYW1lX2NtcCAoR3N0UGx1Z2luICogYSwgR3N0UGx1Z2luICogYikKLXsKLSAgY29uc3QgZ2NoYXIgKm5hbWVfYSA9IGdzdF9wbHVnaW5fZ2V0X25hbWUgKGEpOwotICBjb25zdCBnY2hhciAqbmFtZV9iID0gZ3N0X3BsdWdpbl9nZXRfbmFtZSAoYik7Ci0KLSAgcmV0dXJuIHN0cmNtcCAobmFtZV9hLCBuYW1lX2IpOwotfQotCi1zdGF0aWMgZ2ludAotcGx1Z2luX3B0cl9jbXAgKEdzdFBsdWdpbiAqIGEsIEdzdFBsdWdpbiAqIGIpCi17Ci0gIHJldHVybiAoYSA9PSBiKSA/IDAgOiAxOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfcGx1Z2luIChjb25zdCBnY2hhciAqIG1hcmtlciwgR3N0UmVnaXN0cnkgKiByZWdpc3RyeSwgR3N0UGx1Z2luICogcGx1Z2luKQotewotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgR0xpc3QgKmZlYXR1cmVzLCAqZjsKLQotICBuYW1lID0gZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKTsKLQotICBHU1RfREVCVUcgKCIlczogcGx1Z2luICVwICVkICVzIGZpbGU6ICVzIiwgbWFya2VyLCBwbHVnaW4sCi0gICAgICBHU1RfT0JKRUNUX1JFRkNPVU5UIChwbHVnaW4pLCBuYW1lLAotICAgICAgR1NUX1NUUl9OVUxMIChnc3RfcGx1Z2luX2dldF9maWxlbmFtZSAocGx1Z2luKSkpOwotCi0gIGZlYXR1cmVzID0gZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3RfYnlfcGx1Z2luIChyZWdpc3RyeSwgbmFtZSk7Ci0gIGZvciAoZiA9IGZlYXR1cmVzOyBmICE9IE5VTEw7IGYgPSBmLT5uZXh0KSB7Ci0gICAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZTsKLQotICAgIGZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKGYtPmRhdGEpOwotCi0gICAgR1NUX0xPRyAoIiVzOiAgICBmZWF0dXJlOiAlcCAlcyIsIG1hcmtlciwgZmVhdHVyZSwKLSAgICAgICAgR1NUX09CSkVDVF9OQU1FIChmZWF0dXJlKSk7Ci0gIH0KLSAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSAoZmVhdHVyZXMpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZWdpc3RyeV91cGRhdGUpCi17Ci0gIEdzdFBsdWdpbkZlYXR1cmUgKm9sZF9pZGVudGl0eSwgKm5ld19pZGVudGl0eTsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqb2xkX3BpcGVsaW5lLCAqbmV3X3BpcGVsaW5lOwotICBHc3RSZWdpc3RyeSAqcmVnaXN0cnk7Ci0gIEdMaXN0ICpwbHVnaW5zX2JlZm9yZSwgKnBsdWdpbnNfYWZ0ZXIsICpsOwotCi0gIHJlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldCAoKTsKLSAgZmFpbF91bmxlc3MgKHJlZ2lzdHJ5ICE9IE5VTEwpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChyZWdpc3RyeSwgImRlZmF1bHQgcmVnaXN0cnkiLCAxKTsKLQotICAvKiByZWZjb3VudCBzaG91bGQgc3RpbGwgYmUgMSB0aGUgc2Vjb25kIHRpbWUgKi8KLSAgcmVnaXN0cnkgPSBnc3RfcmVnaXN0cnlfZ2V0ICgpOwotICBmYWlsX3VubGVzcyAocmVnaXN0cnkgIT0gTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHJlZ2lzdHJ5LCAiZGVmYXVsdCByZWdpc3RyeSIsIDEpOwotCi0gIG9sZF9pZGVudGl0eSA9IGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZSAocmVnaXN0cnksICJpZGVudGl0eSIpOwotICBmYWlsX3VubGVzcyAob2xkX2lkZW50aXR5ICE9IE5VTEwsICJDYW4ndCBmaW5kIHBsdWdpbiBmZWF0dXJlICdpZGVudGl0eSciKTsKLQotICBvbGRfcGlwZWxpbmUgPSBnc3RfcmVnaXN0cnlfbG9va3VwX2ZlYXR1cmUgKHJlZ2lzdHJ5LCAicGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKG9sZF9waXBlbGluZSAhPSBOVUxMLCAiQ2FuJ3QgZmluZCBwbHVnaW4gZmVhdHVyZSAncGlwZWxpbmUnIik7Ci0KLSAgLyogcGx1Z2lucyBzaG91bGQgaGF2ZSBhIHJlZmNvdW50IG9mIDI6IHRoZSByZWdpc3RyeSBob2xkcyBvbmUgcmVmZXJlbmNlLAotICAgKiBhbmQgdGhlIG90aGVyIG9uZSBpcyBvdXJzIGZvciB0aGUgbGlzdCAqLwotICBwbHVnaW5zX2JlZm9yZSA9IGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKHJlZ2lzdHJ5KTsKLSAgZm9yIChsID0gcGx1Z2luc19iZWZvcmU7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW47Ci0KLSAgICBwbHVnaW4gPSBHU1RfUExVR0lOIChsLT5kYXRhKTsKLQotICAgIHByaW50X3BsdWdpbiAoImJlZm9yZTEiLCByZWdpc3RyeSwgcGx1Z2luKTsKLQotICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBsdWdpbiwgInBsdWdpbiIsIDIpOwotICB9Ci0KLSAgR1NUX0xPRyAoIiAtLS0tLSBjYWxsaW5nIGdzdF91cGRhdGVfcmVnaXN0cnkgLS0tLS0iKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3VwZGF0ZV9yZWdpc3RyeSAoKSAhPSBGQUxTRSwgInJlZ2lzdHJ5IHVwZGF0ZSBmYWlsZWQiKTsKLQotICBHU1RfTE9HICgiIC0tLS0tIHJlZ2lzdHJ5IHVwZGF0ZWQgLS0tLS0iKTsKLQotICAvKiBzdGF0aWMgcGx1Z2lucyBzaG91bGQgaGF2ZSB0aGUgc2FtZSByZWZjb3VudCBhcyBiZWZvcmUgKGllLiAyKSwgd2hlcmVhcwotICAgKiBmaWxlLWJhc2VkIHBsdWdpbnMgKm1heSogaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGEgbmV3bHktY3JlYXRlZCBvYmplY3QKLSAgICogaWYgdGhlIG9uLWRpc2sgZmlsZSBjaGFuZ2VkIChhbmQgd2FzIG5vdCB5ZXQgbG9hZGVkKS4gVGhlcmUgc2hvdWxkIGJlCi0gICAqIG9ubHkgb25lIHJlZmVyZW5jZSBsZWZ0IGZvciB0aG9zZSwgYW5kIHRoYXQncyBvdXJzICovCi0gIGZvciAobCA9IHBsdWdpbnNfYmVmb3JlOyBsOyBsID0gbC0+bmV4dCkgewotICAgIEdzdFBsdWdpbiAqcGx1Z2luOwotCi0gICAgcGx1Z2luID0gR1NUX1BMVUdJTiAobC0+ZGF0YSk7Ci0KLSAgICBwcmludF9wbHVnaW4gKCJiZWZvcmUyIiwgcmVnaXN0cnksIHBsdWdpbik7Ci0KLSAgICBpZiAoZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUgKHBsdWdpbikpIHsKLSAgICAgIC8qIGZpbGUtYmFzZWQgcGx1Z2luLiAqLwotICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVF9CRVRXRUVOIChwbHVnaW4sICJwbHVnaW4iLCAxLCAyKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogc3RhdGljIHBsdWdpbiAqLwotICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGx1Z2luLCAicGx1Z2luIiwgMik7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0xPRyAoIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCi0gIHBsdWdpbnNfYWZ0ZXIgPSBnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChyZWdpc3RyeSk7Ci0gIGZvciAobCA9IHBsdWdpbnNfYWZ0ZXI7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW4gPSBHU1RfUExVR0lOIChsLT5kYXRhKTsKLQotICAgIHByaW50X3BsdWdpbiAoImFmdGVyICAiLCByZWdpc3RyeSwgcGx1Z2luKTsKLQotICAgIC8qIGZpbGUtYmFzZWQgcGx1Z2lucyBzaG91bGQgaGF2ZSBhIHJlZmNvdW50IG9mIDIgKG9uZSBmb3IgdGhlIHJlZ2lzdHJ5LAotICAgICAqIG9uZSBmb3IgdXMgZm9yIHRoZSBsaXN0KSBvciAzIChvbmUgZm9yIHRoZSByZWdpc3RyeSwgb25lIGZvciB0aGUgYmVmb3JlCi0gICAgICogbGlzdCwgb25lIGZvciB0aGUgYWZ0ZXIgbGlzdCksIHN0YXRpYyBwbHVnaW5zIHNob3VsZCBoYXZlIG9uZSBvZiAzCi0gICAgICogKG9uZSBmb3IgdGhlIHJlZ2lzdHJ5LCBvbmUgZm9yIHRoZSBuZXcgbGlzdCBhbmQgb25lIGZvciB0aGUgb2xkIGxpc3QpLgotICAgICAqIFRoaXMgaW1wbGljaXRseSBhbHNvIG1ha2VzIHN1cmUgdGhhdCBhbGwgc3RhdGljIHBsdWdpbnMgYXJlIHRoZSBzYW1lCi0gICAgICogb2JqZWN0cyBhcyB0aGV5IHdlcmUgYmVmb3JlLiBOb24tc3RhdGljIG9uZXMgbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuCi0gICAgICogcmVwbGFjZWQgYnkgbmV3IG9iamVjdHMgKi8KLSAgICBpZiAoZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUgKHBsdWdpbikpIHsKLSAgICAgIGlmIChnX2xpc3RfZmluZF9jdXN0b20gKHBsdWdpbnNfYmVmb3JlLCBwbHVnaW4sCi0gICAgICAgICAgICAgIChHQ29tcGFyZUZ1bmMpIHBsdWdpbl9wdHJfY21wKSAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIFNhbWUgcGx1Z2luIGV4aXN0ZWQgaW4gdGhlIGJlZm9yZSBsaXN0LiBSZWZjb3VudCBtdXN0IGJlIDMgKi8KLSAgICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGx1Z2luLCAicGx1Z2luIiwgMyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBUaGlzIHBsdWdpbiBpcyBuZXdseSBjcmVhdGVkLCBzbyBzaG91bGQgb25seSBleGlzdCBpbiB0aGUgYWZ0ZXIgbGlzdAotICAgICAgICAgKiBhbmQgdGhlIHJlZ2lzdHJ5OiBSZWZjb3VudCBtdXN0IGJlIDIgKi8KLSAgICAgICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocGx1Z2luLCAicGx1Z2luIiwgMik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHBsdWdpbiwgInBsdWdpbiIsIDMpOwotICAgIH0KLSAgfQotCi0gIC8qIGNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhbGwgcGx1Z2lucyBpbiB0aGUgbmV3IGxpc3QgdGhhdCB3ZSBoYWQgYmVmb3JlICovCi0gIGZvciAobCA9IHBsdWdpbnNfYWZ0ZXI7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW47Ci0KLSAgICBwbHVnaW4gPSBHU1RfUExVR0lOIChsLT5kYXRhKTsKLQotICAgIGZhaWxfdW5sZXNzIChnX2xpc3RfZmluZF9jdXN0b20gKHBsdWdpbnNfYmVmb3JlLCBwbHVnaW4sCi0gICAgICAgICAgICAoR0NvbXBhcmVGdW5jKSBwbHVnaW5fbmFtZV9jbXApICE9IE5VTEwsCi0gICAgICAgICJQbHVnaW4gJXMgaXMgaW4gbmV3IGxpc3QgYnV0IG5vdCBpbiBvbGQgb25lPyEiLAotICAgICAgICBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKLSAgfQotICBmb3IgKGwgPSBwbHVnaW5zX2JlZm9yZTsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RQbHVnaW4gKnBsdWdpbjsKLQotICAgIHBsdWdpbiA9IEdTVF9QTFVHSU4gKGwtPmRhdGEpOwotICAgIGZhaWxfdW5sZXNzIChnX2xpc3RfZmluZF9jdXN0b20gKHBsdWdpbnNfYWZ0ZXIsIHBsdWdpbiwKLSAgICAgICAgICAgIChHQ29tcGFyZUZ1bmMpIHBsdWdpbl9uYW1lX2NtcCkgIT0gTlVMTCwKLSAgICAgICAgIlBsdWdpbiAlcyBpcyBpbiBvbGQgbGlzdCBidXQgbm90IGluIG5ldyBvbmU/ISIsCi0gICAgICAgIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbikpOwotICB9Ci0KLSAgbmV3X2lkZW50aXR5ID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlIChyZWdpc3RyeSwgImlkZW50aXR5Iik7Ci0gIGZhaWxfdW5sZXNzIChuZXdfaWRlbnRpdHkgIT0gTlVMTCwgIkNhbid0IGZpbmQgcGx1Z2luIGZlYXR1cmUgJ2lkZW50aXR5JyIpOwotICBmYWlsX3VubGVzcyAob2xkX2lkZW50aXR5ID09IG5ld19pZGVudGl0eSwgIk9sZCBhbmQgbmV3ICdpZGVudGl0eScgZmVhdHVyZSAiCi0gICAgICAib2JqZWN0cyBzaG91bGQgYmUgdGhlIHNhbWUsIGJ1dCBhcmUgZGlmZmVyZW50IG9iamVjdHMiKTsKLQotICAvKiBPbmUgcmVmIGVhY2ggZm9yOiB0aGUgcmVnaXN0cnksIG9sZF9pZGVudGl0eSwgbmV3X2lkZW50aXR5ICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKG9sZF9pZGVudGl0eSwgIm9sZCBpZGVudGl0eSBmZWF0dXJlIGFmdGVyIHVwZGF0ZSIsIDMpOwotCi0gIG5ld19waXBlbGluZSA9IGdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZSAocmVnaXN0cnksICJwaXBlbGluZSIpOwotICBmYWlsX3VubGVzcyAobmV3X3BpcGVsaW5lICE9IE5VTEwsICJDYW4ndCBmaW5kIHBsdWdpbiBmZWF0dXJlICdwaXBlbGluZSciKTsKLSAgZmFpbF91bmxlc3MgKG9sZF9waXBlbGluZSA9PSBuZXdfcGlwZWxpbmUsICJPbGQgYW5kIG5ldyAncGlwZWxpbmUnIGZlYXR1cmUgIgotICAgICAgIm9iamVjdHMgc2hvdWxkIGJlIHRoZSBzYW1lLCBidXQgYXJlIGRpZmZlcmVudCBvYmplY3RzIik7Ci0KLSAgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKHBsdWdpbnNfYmVmb3JlKTsKLSAgcGx1Z2luc19iZWZvcmUgPSBOVUxMOwotICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAocGx1Z2luc19hZnRlcik7Ci0gIHBsdWdpbnNfYWZ0ZXIgPSBOVUxMOwotICByZWdpc3RyeSA9IE5VTEw7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAob2xkX2lkZW50aXR5KTsKLSAgZ3N0X29iamVjdF91bnJlZiAobmV3X2lkZW50aXR5KTsKLSAgZ3N0X29iamVjdF91bnJlZiAob2xkX3BpcGVsaW5lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAobmV3X3BpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotcmVnaXN0cnlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgicmVnaXN0cnkiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZWdpc3RyeV91cGRhdGUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocmVnaXN0cnkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3RzZWdtZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNDMzZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdHNlZ21lbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMDcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0gKiAgICAgICAgICAgICAgIDIwMDkgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBnc3RzZWdtZW50LmM6IFVuaXQgdGVzdCBmb3Igc2VnbWVudHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNkZWZpbmUgY2hlY2tfdGltZXMoc2VnbWVudCwgcG9zaXRpb24sIHN0cmVhbV90aW1lLCBydW5uaW5nX3RpbWUpIEdfU1RNVF9TVEFSVCB7IFwKLSAgZ3VpbnQ2NCBzdCwgcnQsIHBvczsgXAotICBcCi0gIHN0ID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKChzZWdtZW50KSwgKHNlZ21lbnQpLT5mb3JtYXQsIChwb3NpdGlvbikpOyBcCi0gIHJ0ID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgoc2VnbWVudCksIChzZWdtZW50KS0+Zm9ybWF0LCAocG9zaXRpb24pKTsgXAotICBHU1RfREVCVUcgKCJwb3NpdGlvbiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIHN0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgcnQgJSIgXAotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgKGd1aW50NjQpIChwb3NpdGlvbiksIChndWludDY0KSAoc3RyZWFtX3RpbWUpLCAoZ3VpbnQ2NCkgKHJ1bm5pbmdfdGltZSkpOyBcCi0gIFwKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChzdCwgKHN0cmVhbV90aW1lKSk7IFwKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChydCwgKHJ1bm5pbmdfdGltZSkpOyBcCi0gIGlmICgoc3RyZWFtX3RpbWUpICE9IC0xKSB7IFwKLSAgICBwb3MgPSBnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lICgoc2VnbWVudCksIChzZWdtZW50KS0+Zm9ybWF0LCBzdCk7IFwKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKHBvcywgKHBvc2l0aW9uKSk7IFwKLSAgfSBcCi0gIFwKLSAgaWYgKChydW5uaW5nX3RpbWUpICE9IC0xKSB7IFwKLSAgICBwb3MgPSBnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZSAoKHNlZ21lbnQpLCAoc2VnbWVudCktPmZvcm1hdCwgcnQpOyBcCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChwb3MsIChwb3NpdGlvbikpOyBcCi0gIH0gXAotfSBHX1NUTVRfRU5EOwotCi0vKiBtZXNzIHdpdGggdGhlIHNlZ21lbnQgc3RydWN0dXJlIGluIHRoZSBieXRlcyBmb3JtYXQgKi8KLUdTVF9TVEFSVF9URVNUIChzZWdtZW50X3NlZWtfbm9zaXplKQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIGdib29sZWFuIHJlczsKLSAgZ3VpbnQ2NCBjc3RhcnQsIGNzdG9wOwotICBnYm9vbGVhbiB1cGRhdGU7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotCi0gIC8qIGNvbmZpZ3VyZSBzZWdtZW50IHRvIHN0YXJ0IDEwMCAqLwotICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMS4wLAotICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAxMDAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsICZ1cGRhdGUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IC0xKTsKLSAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBUUlVFKTsKLSAgLyogYXBwZW5kZWQgYWZ0ZXIgY3VycmVudCBwb3NpdGlvbiAwICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTAwLCAxMDAsIDApOwotCi0gIC8qIGRvIHNvbWUgY2xpcHBpbmcgb24gdGhlIG9wZW4gcmFuZ2UgKi8KLSAgLyogY29tcGxldGVseSBvdXRzaWRlICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAwLCA1MCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7Ci0KLSAgLyogdG91Y2hpbmcgbG93ZXIgYm91bmQsIHN0aWxsIG91dHNpZGUgb2YgdGhlIHNlZ21lbnQgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDUwLCAxMDAsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOwotCi0gIC8qIHBhcnRpYWxseSBpbnNpZGUgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDUwLCAxNTAsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IDE1MCk7Ci0KLSAgLyogaW5zaWRlLCB0b3VjaGluZyBsb3dlciBib3VuZCAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgIDEwMCwgMTUwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxNTApOwotCi0gIC8qIHNwZWNpYWwgY2FzZSwgMCBkdXJhdGlvbiBhbmQgb3V0c2lkZSBzZWdtZW50ICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA5MCwgOTAsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOwotCi0gIC8qIHNwZWNpYWwgY2FzZSwgMCBkdXJhdGlvbiBhbmQgdG91Y2hpbmcgbG93ZXIgYm91bmQsIGkuZS4gaW5zaWRlIHNlZ21lbnQgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAxMDAsIDEwMCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTAwKTsKLQotICAvKiBzcGVjaWFsIGNhc2UsIDAgZHVyYXRpb24gYW5kIGluc2lkZSB0aGUgc2VnbWVudCAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgIDEyMCwgMTIwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEyMCk7Ci0gIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxMjApOwotCi0gIC8qIGNvbXBsZXRlbHkgaW5zaWRlICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgMTUwLCAyMDAsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTUwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IDIwMCk7Ci0KLSAgLyogaW52YWxpZCBzdGFydCAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgLTEsIDEwMCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7Ci0KLSAgLyogc3RhcnQgb3V0c2lkZSwgd2UgZG9uJ3Qga25vdyB0aGUgc3RvcCAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAtMSk7Ci0KLSAgLyogc3RhcnQgb24gbG93ZXIgYm91bmQgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDEwMCwgLTEsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IC0xKTsKLQotICAvKiBzdGFydCBpbnNpZGUgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDE1MCwgLTEsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTUwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IC0xKTsKLQotICAvKiBtb3ZlIHRvIDE1MCwgdGhpcyBpcyBhIHJ1bm5pbmdfdGltZSBvZiA1MCAqLwotICBzZWdtZW50LnBvc2l0aW9uID0gMTUwOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDE1MCwgMTUwLCA1MCk7Ci0KLSAgLyogYWRkIDEwMCB0byBzdGFydCwgc2V0IHN0b3AgdG8gMzAwICovCi0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAxLjAsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgR1NUX1NFRUtfRkxBR19OT05FLAotICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDEwMCArIDEwMCwgR1NUX1NFRUtfVFlQRV9TRVQsIDMwMCwgJnVwZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDIwMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMzAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzICh1cGRhdGUgPT0gVFJVRSk7Ci0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMjAwLCAyMDAsIDUwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyNTAsIDI1MCwgMTAwKTsKLQotICB1cGRhdGUgPSBGQUxTRTsKLSAgLyogYWRkIDEwMCB0byBzdGFydCAodG8gMzAwKSwgc2V0IHN0b3AgdG8gMjAwLCB0aGlzIGlzIG5vdCBhbGxvd2VkLgotICAgKiBub3RoaW5nIHNob3VsZCBiZSB1cGRhdGVkIGluIHRoZSBzZWdtZW50LiBBIGdfd2FybmluZyBpcwotICAgKiBlbWl0dGVkLiAqLwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAxLjAsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDIwMCArIDEwMCwgR1NUX1NFRUtfVFlQRV9TRVQsIDIwMCwgJnVwZGF0ZSkpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDMwMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gNTApOwotICAvKiB1cGRhdGUgZGlkbid0IGNoYW5nZSAqLwotICBmYWlsX3VubGVzcyAodXBkYXRlID09IEZBTFNFKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMDAsIDIwMCwgNTApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDI1MCwgMjUwLCAxMDApOwotCi0gIHVwZGF0ZSA9IFRSVUU7Ci0gIC8qIHNlZWsgcmVsYXRpdmUgdG8gZW5kLCBzaG91bGQgbm90IGRvIGFueXRoaW5nIHNpbmNlIHNpemUgaXMKLSAgICogdW5rbm93bi4gKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKLSAgICAgIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX0VORCwgLTMwMCwgR1NUX1NFRUtfVFlQRV9FTkQsIC0xMDAsICZ1cGRhdGUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDMwMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gNTApOwotICBmYWlsX3VubGVzcyAodXBkYXRlID09IEZBTFNFKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyNTAsIDI1MCwgMTAwKTsKLQotICAvKiBjb21wbGV0ZWx5IG91dHNpZGUgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDAsIDUwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKLQotICAvKiB0b3VjaGluZyBsb3dlciBib3VuZCAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIDIwMCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7Ci0KLSAgLyogcGFydGlhbGx5IGluc2lkZSAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIDI1MCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMjUwKTsKLQotICAvKiBpbnNpZGUsIHRvdWNoaW5nIGxvd2VyIGJvdW5kICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgMjAwLCAyNTAsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMjAwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IDI1MCk7Ci0KLSAgLyogY29tcGxldGVseSBpbnNpZGUgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAyNTAsIDI5MCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAyNTApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMjkwKTsKLQotICAvKiBwYXJ0aWFsbHkgaW5zaWRlICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgMjUwLCAzNTAsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMjUwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IDMwMCk7Ci0KLSAgLyogaW52YWxpZCBzdGFydCAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgLTEsIDEwMCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7Ci0KLSAgLyogc3RhcnQgb3V0c2lkZSAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDIwMCk7Ci0gIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAzMDApOwotCi0gIC8qIHN0YXJ0IG9uIGxvd2VyIGJvdW5kICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAyMDAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDIwMCk7Ci0gIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAzMDApOwotCi0gIC8qIHN0YXJ0IGluc2lkZSAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMjUwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAyNTApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMzAwKTsKLQotICAvKiBzdGFydCBvdXRzaWRlIG9uIGJvdW5kYXJ5ICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAzMDAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKLQotICAvKiBzdGFydCBjb21wbGV0ZWx5IG91dHNpZGUgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDM1MCwgLTEsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIG1lc3Mgd2l0aCB0aGUgc2VnbWVudCBzdHJ1Y3R1cmUgaW4gdGhlIGJ5dGVzIGZvcm1hdCAqLwotR1NUX1NUQVJUX1RFU1QgKHNlZ21lbnRfc2Vla19zaXplKQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIGdib29sZWFuIHJlczsKLSAgZ3VpbnQ2NCBjc3RhcnQsIGNzdG9wOwotICBnYm9vbGVhbiB1cGRhdGU7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBzZWdtZW50LmR1cmF0aW9uID0gMjAwOwotCi0gIC8qIGNvbmZpZ3VyZSBzZWdtZW50IHRvIHN0YXJ0IDEwMCAqLwotICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMS4wLAotICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAxMDAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsICZ1cGRhdGUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IC0xKTsKLSAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBUUlVFKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAxMDAsIDEwMCwgMCk7Ci0KLSAgLyogZG8gc29tZSBjbGlwcGluZyBvbiB0aGUgb3BlbiByYW5nZSAqLwotICAvKiBjb21wbGV0ZWx5IG91dHNpZGUgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDAsIDUwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKLQotICAvKiB0b3VjaGluZyBsb3dlciBib3VuZCAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIDEwMCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7Ci0KLSAgLyogcGFydGlhbGx5IGluc2lkZSAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgNTAsIDE1MCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTUwKTsKLQotICAvKiBpbnNpZGUsIHRvdWNoaW5nIGxvd2VyIGJvdW5kICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgMTAwLCAxNTAsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IDE1MCk7Ci0KLSAgLyogY29tcGxldGVseSBpbnNpZGUgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAxNTAsIDIwMCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxNTApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMjAwKTsKLQotICAvKiBpbnZhbGlkIHN0YXJ0ICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAtMSwgMTAwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKLQotICAvKiBzdGFydCBvdXRzaWRlICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA1MCwgLTEsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IC0xKTsKLQotICAvKiBzdGFydCBvbiBsb3dlciBib3VuZCAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMTAwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gLTEpOwotCi0gIC8qIHN0YXJ0IGluc2lkZSAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMTUwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxNTApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gLTEpOwotCi0gIC8qIGFkZCAxMDAgdG8gc3RhcnQsIHNldCBzdG9wIHRvIDMwMCwgc3RvcCBjbGlwcyB0byAyMDAgKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKLSAgICAgIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMTAwICsgMTAwLCBHU1RfU0VFS19UWVBFX1NFVCwgMzAwLCAmdXBkYXRlKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMjAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMjAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDIwMCwgMjAwLCAwKTsKLQotICAvKiBhZGQgMTAwIHRvIHN0YXJ0ICh0byAzMDApLCBzZXQgc3RvcCB0byAyMDAsIHRoaXMgY2xpcHMgc3RhcnQKLSAgICogdG8gZHVyYXRpb24gKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKLSAgICAgIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMjAwICsgMTAwLCBHU1RfU0VFS19UWVBFX1NFVCwgMjAwLCAmdXBkYXRlKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMjAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gMjAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAodXBkYXRlID09IEZBTFNFKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMDAsIDIwMCwgMCk7Ci0KLSAgLyogc2VlayByZWxhdGl2ZSB0byBlbmQgKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKLSAgICAgIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX0VORCwgLTEwMCwgR1NUX1NFRUtfVFlQRV9FTkQsIC0yMCwgJnVwZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTgwKTsKLSAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBUUlVFKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAxNTAsIDE1MCwgNTApOwotCi0gIC8qIGNvbXBsZXRlbHkgb3V0c2lkZSAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMCwgNTAsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOwotCi0gIC8qIHRvdWNoaW5nIGxvd2VyIGJvdW5kICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA1MCwgMTAwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKLQotICAvKiBwYXJ0aWFsbHkgaW5zaWRlICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA1MCwgMTUwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxNTApOwotCi0gIC8qIGluc2lkZSwgdG91Y2hpbmcgbG93ZXIgYm91bmQgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAxMDAsIDE1MCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTUwKTsKLQotICAvKiBjb21wbGV0ZWx5IGluc2lkZSAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgIDE1MCwgMTcwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDE1MCk7Ci0gIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxNzApOwotCi0gIC8qIHBhcnRpYWxseSBpbnNpZGUgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAxNTAsIDI1MCwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGNzdGFydCA9PSAxNTApOwotICBmYWlsX3VubGVzcyAoY3N0b3AgPT0gMTgwKTsKLQotICAvKiBpbnZhbGlkIHN0YXJ0ICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAtMSwgMTAwLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IEZBTFNFKTsKLQotICAvKiBzdGFydCBvdXRzaWRlICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCA1MCwgLTEsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IDE4MCk7Ci0KLSAgLyogc3RhcnQgb24gbG93ZXIgYm91bmQgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDEwMCwgLTEsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChjc3RhcnQgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKGNzdG9wID09IDE4MCk7Ci0KLSAgLyogc3RhcnQgaW5zaWRlICovCi0gIHJlcyA9IGdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCAxNTAsIC0xLCAmY3N0YXJ0LCAmY3N0b3ApOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoY3N0YXJ0ID09IDE1MCk7Ci0gIGZhaWxfdW5sZXNzIChjc3RvcCA9PSAxODApOwotCi0gIC8qIHN0YXJ0IG91dHNpZGUgb24gYm91bmRhcnkgKi8KLSAgcmVzID0gZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIDE4MCwgLTEsICZjc3RhcnQsICZjc3RvcCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gRkFMU0UpOwotCi0gIC8qIHN0YXJ0IGNvbXBsZXRlbHkgb3V0c2lkZSAqLwotICByZXMgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgMjUwLCAtMSwgJmNzdGFydCwgJmNzdG9wKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHNlZ21lbnRfc2Vla19yZXZlcnNlKQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIGdib29sZWFuIHVwZGF0ZTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIHNlZ21lbnQuZHVyYXRpb24gPSAyMDA7Ci0KLSAgLyogY29uZmlndXJlIHNlZ21lbnQgdG8gc3RvcCAxMDAgKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIC0xLjAsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgR1NUX1NFRUtfRkxBR19OT05FLAotICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfU0VULCAxMDAsICZ1cGRhdGUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAxMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAxMDApOwotICBmYWlsX3VubGVzcyAodXBkYXRlID09IFRSVUUpOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDEwMCwgMTAwLCAwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCA1MCwgNTAsIDUwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAwLCAwLCAxMDApOwotCi0gIC8qIHVwZGF0ZSAqLwotICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgLTEuMCwKLSAgICAgIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMTAsIEdTVF9TRUVLX1RZUEVfU0VULCAxMDAgLSAyMCwgJnVwZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDEwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSA4MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMTApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA4MCk7Ci0gIGZhaWxfdW5sZXNzICh1cGRhdGUgPT0gVFJVRSk7Ci0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgODAsIDgwLCAwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCA0MCwgNDAsIDQwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAxMCwgMTAsIDcwKTsKLQotICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgLTEuMCwKLSAgICAgIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMjAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCwgJnVwZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSA4MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMjApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA4MCk7Ci0gIGZhaWxfdW5sZXNzICh1cGRhdGUgPT0gRkFMU0UpOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDgwLCA4MCwgMCk7Ci0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMjAsIDIwLCA2MCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogbWVzcyB3aXRoIHRoZSBzZWdtZW50IHN0cnVjdHVyZSBpbiB0aGUgYnl0ZXMgZm9ybWF0ICovCi1HU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9zZWVrX3JhdGUpCi17Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgZ2Jvb2xlYW4gdXBkYXRlOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLQotICAvKiBjb25maWd1cmUgc2VnbWVudCB0byByYXRlIDIuMCAqLwotICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMi4wLAotICAgICAgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsICZ1cGRhdGUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAtMSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnJhdGUgPT0gMi4wKTsKLSAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBGQUxTRSk7Ci0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgNTAsIDUwLCAyNSk7Ci0KLSAgLyogc2V0IGEgcmVhbCBzdG9wIHBvc2l0aW9uLCB0aGlzIG11c3QgaGFwcGVuIGluIGJ5dGVzICovCi0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAzLjAsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgR1NUX1NFRUtfRkxBR19OT05FLAotICAgICAgR1NUX1NFRUtfVFlQRV9OT05FLCAtMSwgR1NUX1NFRUtfVFlQRV9TRVQsIDEwMCwgJnVwZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQucmF0ZSA9PSAzLjApOwotICAvKiBubyBzZWVrIHNob3VsZCBoYXBwZW4sIHdlIGp1c3QgdXBkYXRlZCB0aGUgc3RvcCBwb3NpdGlvbiBpbiBmb3J3YXJkCi0gICAqIHBsYXliYWNrIG1vZGUuKi8KLSAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBGQUxTRSk7Ci0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgNjAsIDYwLCAyMCk7Ci0KLSAgLyogc2V0IHNvbWUgZHVyYXRpb24sIHN0b3AgLTEgRU5EIHNlZWtzIHdpbGwgbm93IHdvcmsgd2l0aCB0aGUKLSAgICogZHVyYXRpb24sIGlmIHRoZSBmb3JtYXRzIG1hdGNoICovCi0gIHNlZ21lbnQuZHVyYXRpb24gPSAyMDA7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IDIwMCk7Ci0KLSAgLyogc2VlayB0byBlbmQgd2l0aCAwIHNob3VsZCBzZXQgdGhlIHN0b3AgdG8gdGhlIGR1cmF0aW9uICovCi0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLCBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCBHU1RfU0VFS19UWVBFX0VORCwgMCwgJnVwZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gMjAwKTsKLQotICAvKiBzdWJ0cmFjdCAxMDAgZnJvbSB0aGUgZW5kICovCi0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLCBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX05PTkUsIC0xLCBHU1RfU0VFS19UWVBFX0VORCwgLTEwMCwgJnVwZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuZHVyYXRpb24gPT0gMjAwKTsKLQotICAvKiBhZGQgMTAwIHRvIHRoZSBkdXJhdGlvbiwgdGhpcyBzaG91bGQgYmUgY2xhbXBlZCB0byB0aGUgZHVyYXRpb24gKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDIuMCwKLSAgICAgIEdTVF9GT1JNQVRfQllURVMsIEdTVF9TRUVLX0ZMQUdfTk9ORSwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEsIEdTVF9TRUVLX1RZUEVfRU5ELCAxMDAsICZ1cGRhdGUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmR1cmF0aW9uID09IDIwMCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHNlZ21lbnRfY29weSkKLXsKLSAgR3N0U2VnbWVudCAqY29weTsKLSAgR3N0U2VnbWVudCBzZWdtZW50ID0geyAwLjAsIH07Ci0KLSAgLyogdGhpcyBpcyBhIGJveGVkIHR5cGUgY29weSBmdW5jdGlvbiwgd2Ugc3VwcG9ydCBjb3B5aW5nIE5VTEwgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X2NvcHkgKE5VTEwpID09IE5VTEwpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIHNlZ21lbnQucmF0ZSA9IC0xLjA7Ci0gIHNlZ21lbnQuYXBwbGllZF9yYXRlID0gMS4wOwotICBzZWdtZW50LnN0YXJ0ID0gMDsKLSAgc2VnbWVudC5zdG9wID0gMjAwOwotICBzZWdtZW50LnRpbWUgPSAwOwotCi0gIGNvcHkgPSBnc3Rfc2VnbWVudF9jb3B5ICgmc2VnbWVudCk7Ci0gIGZhaWxfdW5sZXNzIChjb3B5ICE9IE5VTEwpOwotICAvKiB3ZSBpbml0ZWQgdGhlIHN0cnVjdCBvbiB0aGUgc3RhY2sgdG8gemVyb2VzLCBzbyBkaXJlY3QgY29tcGFyaXNvbiBzaG91bGQKLSAgICogYmUgb2sgaGVyZSBkZXNwaXRlIHRoZSBwYWRkaW5nIGZpZWxkIGFuZCByZWdhcmRsZXNzIG9mIGltcGxlbWVudGF0aW9uICovCi0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKGNvcHksICZzZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKSA9PSAwKTsKLSAgZ3N0X3NlZ21lbnRfZnJlZSAoY29weSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogbWVzcyB3aXRoIHRoZSBzZWdtZW50IHN0cnVjdHVyZSBpbiB0aGUgYnl0ZXMgZm9ybWF0ICovCi1HU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9zZWVrX25vdXBkYXRlKQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIGdib29sZWFuIHVwZGF0ZTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBzZWdtZW50LnN0YXJ0ID0gMDsKLSAgc2VnbWVudC5wb3NpdGlvbiA9IDUwOwotICBzZWdtZW50LnN0b3AgPSAyMDA7Ci0gIHNlZ21lbnQudGltZSA9IDA7Ci0KLSAgLyogZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZ21lbnQsIDEuMCwKLSAgICAgIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCwgR1NUX1NFRUtfVFlQRV9OT05FLCAwLCAmdXBkYXRlKTsKLSAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gNTApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5vZmZzZXQgPT0gNTApOwotCi0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWdtZW50LCAyLjAsCi0gICAgICBHU1RfRk9STUFUX1RJTUUsCi0gICAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX05PTkUsIDAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCwgJnVwZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzICh1cGRhdGUgPT0gRkFMU0UpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gNTApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDUwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc2VnbWVudC5vZmZzZXQsIDUwKTsKLQotICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VnbWVudCwgMS4wLAotICAgICAgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCwgR1NUX1NFRUtfVFlQRV9OT05FLCAwLCAmdXBkYXRlKTsKLSAgZmFpbF91bmxlc3MgKHVwZGF0ZSA9PSBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50Lm9mZnNldCA9PSA1MCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHNlZ21lbnRfb2Zmc2V0KQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgc2VnbWVudC5zdGFydCA9IDA7Ci0gIHNlZ21lbnQucG9zaXRpb24gPSA1MDsKLSAgc2VnbWVudC5zdG9wID0gMjAwOwotICBzZWdtZW50LnRpbWUgPSAwOwotCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMjAsIDIwLCAyMCk7Ci0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMjIwLCAtMSwgLTEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9vZmZzZXRfcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIDApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50Lm9mZnNldCA9PSAwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMCwgMjAsIDIwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAxMDApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQub2Zmc2V0ID09IDApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDIwLCAyMCwgMTIwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAtNTApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gNTApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5vZmZzZXQgPT0gMCk7Ci0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMjAsIDIwLCA3MCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X29mZnNldF9ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgLTEwMCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIwMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQub2Zmc2V0ID09IDUwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMCwgMjAsIC0xKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMDAsIDIwMCwgMTUwKTsKLQotICAvKiBjYW4gZ28gbmVnYXRpdmUgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X29mZnNldF9ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgLTE1MSkgPT0gRkFMU0UpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50Lm9mZnNldCA9PSA1MCk7Ci0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTAwLCAxMDAsIDUwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMDAsIDIwMCwgMTUwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAtMTUwKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gNTApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5vZmZzZXQgPT0gMjAwKTsKLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMDAsIDIwMCwgMCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgc2VnbWVudC5zdGFydCA9IDIwOwotICBzZWdtZW50LnBvc2l0aW9uID0gNTA7Ci0gIHNlZ21lbnQuc3RvcCA9IDIyMDsKLSAgc2VnbWVudC50aW1lID0gMDsKLQotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDQwLCAyMCwgMjApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDI0MCwgLTEsIC0xKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAwKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RhcnQgPT0gMjApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdG9wID09IDIyMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnRpbWUgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnBvc2l0aW9uID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuYmFzZSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQub2Zmc2V0ID09IDApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDQwLCAyMCwgMjApOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9vZmZzZXRfcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIDEwMCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0YXJ0ID09IDIwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQuc3RvcCA9PSAyMjApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC50aW1lID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5wb3NpdGlvbiA9PSA1MCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LmJhc2UgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQub2Zmc2V0ID09IDApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDQwLCAyMCwgMTIwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfb2Zmc2V0X3J1bm5pbmdfdGltZSAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAtNTApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAyMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjIwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gNTApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQub2Zmc2V0ID09IDApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDQwLCAyMCwgNzApOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9vZmZzZXRfcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIC0xMDApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5zdGFydCA9PSAyMCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LnN0b3AgPT0gMjIwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQudGltZSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKHNlZ21lbnQucG9zaXRpb24gPT0gNTApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5iYXNlID09IDApOwotICBmYWlsX3VubGVzcyAoc2VnbWVudC5vZmZzZXQgPT0gNTApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDQwLCAyMCwgLTEpOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDIyMCwgMjAwLCAxNTApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChzZWdtZW50X2Z1bGwpCi17Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgZ3VpbnQ2NCBydCwgcG9zOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIHNlZ21lbnQuc3RhcnQgPSA1MDsKLSAgc2VnbWVudC5wb3NpdGlvbiA9IDE1MDsKLSAgc2VnbWVudC5zdG9wID0gMjAwOwotICBzZWdtZW50LnRpbWUgPSAwOwotCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTAwLCA1MCwgNTApOwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDIyMCwgLTEsIC0xKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lX2Z1bGwgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgNTAsICZydCkgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChydCA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lX2Z1bGwgKCZzZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgcnQsICZwb3MpID09IDEpOwotICBmYWlsX3VubGVzcyAocG9zID09IDUwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxsICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIDIwMCwgJnJ0KSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHJ0ID09IDE1MCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZV9mdWxsICgmc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHJ0LCAmcG9zKSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHBvcyA9PSAyMDApOwotICBmYWlsX3VubGVzcyAoIWdzdF9zZWdtZW50X2NsaXAgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDQwLCA0MCwgTlVMTCwKLSAgICAgICAgICBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNDAsCi0gICAgICAgICAgJnJ0KSA9PSAtMSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X3NlZ21lbnRfY2xpcCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgNDksIDQ5LCBOVUxMLAotICAgICAgICAgIE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxsICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCA0OSwKLSAgICAgICAgICAmcnQpID09IC0xKTsKLSAgZmFpbF91bmxlc3MgKCFnc3Rfc2VnbWVudF9jbGlwICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCAyMDEsIDIwMSwgTlVMTCwKLSAgICAgICAgICBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgMjAxLAotICAgICAgICAgICZydCkgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZV9mdWxsICgmc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHJ0LCAmcG9zKSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHBvcyA9PSAyMDEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9vZmZzZXRfcnVubmluZ190aW1lICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIC01MCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50Lm9mZnNldCA9PSA1MCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxsICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIDUwLCAmcnQpID09IC0xKTsKLSAgR1NUX0RFQlVHICgiJSIgR19HVUlOVDY0X0ZPUk1BVCwgcnQpOwotICBmYWlsX3VubGVzcyAocnQgPT0gNTApOwotCi0gIHNlZ21lbnQuc3RhcnQgPSA1MDsKLSAgc2VnbWVudC5zdG9wID0gMzAwOwotICBzZWdtZW50LnBvc2l0aW9uID0gMTUwOwotICBzZWdtZW50LnRpbWUgPSAwOwotICBzZWdtZW50Lm9mZnNldCA9IDA7Ci0gIGdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIDEwMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNlZ21lbnQuYmFzZSwgMTAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lX2Z1bGwgKCZzZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgNzAsICZwb3MpID09IC0xKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lX2Z1bGwgKCZzZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgMTQwLCAmcG9zKSA9PSAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocG9zLCAxOTApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChzZWdtZW50X3N0cmVhbV90aW1lX2Z1bGwpCi17Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgZ3VpbnQ2NCBzdCwgcG9zOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIHNlZ21lbnQuc3RhcnQgPSA1MDsKLSAgc2VnbWVudC5zdG9wID0gMjAwOwotICBzZWdtZW50LnRpbWUgPSAzMDsKLSAgc2VnbWVudC5wb3NpdGlvbiA9IDA7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lX2Z1bGwgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgMCwgJnN0KSA9PSAtMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0LCAyMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxsICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIDIwLCAmc3QpID09IDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lX2Z1bGwgKCZzZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgMCwgJnBvcykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHBvcywgMjApOwotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAxMCwgJnN0KSA9PSAtMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0LCAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxsICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIDQwLCAmc3QpID09IDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdCwgMjApOwotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZV9mdWxsICgmc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHN0LCAmcG9zKSA9PSAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocG9zLCA0MCk7Ci0gIHNlZ21lbnQudGltZSA9IDEwMDsKLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbCAoJnNlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCA0MCwgJnBvcykgPT0gLTEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChwb3MsIDEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbCAoJnNlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCA2MCwgJnBvcykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHBvcywgMTApOwotCi0gIHNlZ21lbnQuc3RhcnQgPSA1MDsKLSAgc2VnbWVudC5wb3NpdGlvbiA9IDE1MDsKLSAgc2VnbWVudC5zdG9wID0gMjAwOwotICBzZWdtZW50LnRpbWUgPSAwOwotICBzZWdtZW50LmFwcGxpZWRfcmF0ZSA9IC0xOwotICBzZWdtZW50LnJhdGUgPSAtMTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAwLCAmc3QpID09IDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdCwgMjAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbCAoJnNlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAyMDAsICZwb3MpID09IDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChwb3MsIDApOwotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAyNTAsICZzdCkgPT0gLTEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdCwgNTApOwotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZV9mdWxsICgmc2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIDIwMCwgJnBvcykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHBvcywgMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lX2Z1bGwgKCZzZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgMjUwLCAmcG9zKSA9PSAtMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHBvcywgNTApOwotCi0gIHNlZ21lbnQudGltZSA9IDcwOwotICBmYWlsX3VubGVzcyAoZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWVfZnVsbCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAyNTAsICZzdCkgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0LCAyMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lX2Z1bGwgKCZzZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgNTAsICZwb3MpID09IDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChwb3MsIDIyMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lX2Z1bGwgKCZzZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgOTAsICZwb3MpID09IDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChwb3MsIDE4MCk7Ci0KLSAgc2VnbWVudC5zdG9wID0gNjA7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3N0cmVhbV90aW1lX2Z1bGwgKCZzZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgNSwgJnBvcykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHBvcywgMTI1KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAoc2VnbWVudF9uZWdhdGl2ZV9yYXRlKQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgc2VnbWVudC5zdGFydCA9IDUwOwotICBzZWdtZW50LnBvc2l0aW9uID0gMTUwOwotICBzZWdtZW50LnN0b3AgPSAyMDA7Ci0gIHNlZ21lbnQudGltZSA9IDA7Ci0gIHNlZ21lbnQuYXBwbGllZF9yYXRlID0gLTE7Ci0gIHNlZ21lbnQucmF0ZSA9IC0xOwotCi0gIC8qIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTAwLCAxMDAsIDEwMCk7Ci0gIC8qIGFmdGVyIHN0b3AgKi8KLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMjAsIC0xLCAtMSk7Ci0gIC8qIGJlZm9yZSBzdGFydCAqLwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDEwLCAtMSwgLTEpOwotICAvKiBhdCBzZWdtZW50IHN0YXJ0ICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgNTAsIDE1MCwgMTUwKTsKLSAgLyogYW5vdGhlciBwbGFjZSBpbiB0aGUgbWlkZGxlICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTUwLCA1MCwgNTApOwotICAvKiBhdCBzZWdtZW50IHN0b3AgKi8KLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCAyMDAsIDAsIDApOwotCi0gIHNlZ21lbnQudGltZSA9IDEwMDsKLSAgc2VnbWVudC5iYXNlID0gMTAwOwotICAvKiBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSAqLwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDEwMCwgMjAwLCAyMDApOwotICAvKiBhdCBzZWdtZW50IHN0YXJ0ICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgNTAsIDI1MCwgMjUwKTsKLSAgLyogYW5vdGhlciBwbGFjZSBpbiB0aGUgbWlkZGxlICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTUwLCAxNTAsIDE1MCk7Ci0gIC8qIGF0IHNlZ21lbnQgc3RvcCAqLwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDIwMCwgMTAwLCAxMDApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChzZWdtZW50X25lZ2F0aXZlX2FwcGxpZWRfcmF0ZSkKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIHNlZ21lbnQuc3RhcnQgPSA1MDsKLSAgc2VnbWVudC5wb3NpdGlvbiA9IDE1MDsKLSAgc2VnbWVudC5zdG9wID0gMjAwOwotICBzZWdtZW50LnRpbWUgPSAwOwotICBzZWdtZW50LmFwcGxpZWRfcmF0ZSA9IC0xOwotICBzZWdtZW50LnJhdGUgPSAxOwotCi0gIC8qIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTAwLCAxMDAsIDUwKTsKLSAgLyogYWZ0ZXIgc3RvcCAqLwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDIyMCwgLTEsIC0xKTsKLSAgLyogYmVmb3JlIHN0YXJ0ICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTAsIC0xLCAtMSk7Ci0gIC8qIGF0IHNlZ21lbnQgc3RhcnQgKi8KLSAgY2hlY2tfdGltZXMgKCZzZWdtZW50LCA1MCwgMTUwLCAwKTsKLSAgLyogYW5vdGhlciBwbGFjZSBpbiB0aGUgbWlkZGxlICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTUwLCA1MCwgMTAwKTsKLSAgLyogYXQgc2VnbWVudCBzdG9wICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMjAwLCAwLCAxNTApOwotCi0gIHNlZ21lbnQudGltZSA9IDEwMDsKLSAgc2VnbWVudC5iYXNlID0gMTAwOwotICAvKiBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSAqLwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDEwMCwgMjAwLCAxNTApOwotICAvKiBhdCBzZWdtZW50IHN0YXJ0ICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgNTAsIDI1MCwgMTAwKTsKLSAgLyogYW5vdGhlciBwbGFjZSBpbiB0aGUgbWlkZGxlICovCi0gIGNoZWNrX3RpbWVzICgmc2VnbWVudCwgMTUwLCAxNTAsIDIwMCk7Ci0gIC8qIGF0IHNlZ21lbnQgc3RvcCAqLwotICBjaGVja190aW1lcyAoJnNlZ21lbnQsIDIwMCwgMTAwLCAyNTApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3Rfc2VnbWVudF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RTZWdtZW50Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInNlZ21lbnRzIik7Ci0KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAyMCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9zZWVrX25vc2l6ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9zZWVrX3NpemUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfc2Vla19yZXZlcnNlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBzZWdtZW50X3NlZWtfcmF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9jb3B5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBzZWdtZW50X3NlZWtfbm91cGRhdGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfb2Zmc2V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBzZWdtZW50X2Z1bGwpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfbmVnYXRpdmVfcmF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VnbWVudF9uZWdhdGl2ZV9hcHBsaWVkX3JhdGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHNlZ21lbnRfc3RyZWFtX3RpbWVfZnVsbCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3Rfc2VnbWVudCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0c3RyZWFtLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0c3RyZWFtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMDliMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdHN0cmVhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAxNT4gRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBnc3RzdHJ1Y3R1cmUuYzogVW5pdCB0ZXN0cyBmb3IgR3N0U3RyZWFtIGFuZCBHc3RTdHJlYW1Db2xsZWN0aW9uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJlYW1fY3JlYXRpb24pCi17Ci0gIEdzdFN0cmVhbSAqc3RyZWFtOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RDYXBzICpjYXBzMjsKLSAgR3N0VGFnTGlzdCAqdGFncywgKnRhZ3MyOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvY2FwcyIpOwotICBzdHJlYW0gPSBnc3Rfc3RyZWFtX25ldyAoInN0cmVhbS1pZCIsIGNhcHMsIEdTVF9TVFJFQU1fVFlQRV9BVURJTywgMCk7Ci0gIGZhaWxfdW5sZXNzIChzdHJlYW0gIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkIChzdHJlYW0pLCAic3RyZWFtLWlkIik7Ci0gIGNhcHMyID0gZ3N0X3N0cmVhbV9nZXRfY2FwcyAoc3RyZWFtKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBjYXBzMikpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZSAoc3RyZWFtKSA9PSBHU1RfU1RSRUFNX1RZUEVfQVVESU8pOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICB0YWdzID0gZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19BTEJVTSwgInRlc3QtYWxidW0iLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzdHJlYW0sICJ0YWdzIiwgdGFncywgTlVMTCk7Ci0gIHRhZ3MyID0gZ3N0X3N0cmVhbV9nZXRfdGFncyAoc3RyZWFtKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9pc19lcXVhbCAodGFncywgdGFnczIpKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzMik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3RyZWFtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJlYW1fZXZlbnQpCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0U3RyZWFtICpzdHJlYW0sICpzdHJlYW0yID0gTlVMTDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0Q2FwcyAqY2FwczI7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoImhlcmUvd2UvZ28iKTsKLSAgLyogQnkgZGVmYXVsdCBhIHN0cmVhbS1zdGFydCBldmVudCBoYXMgbm8gc3RyZWFtICovCi0gIGdzdF9ldmVudF9wYXJzZV9zdHJlYW0gKGV2ZW50LCAmc3RyZWFtMik7Ci0gIGZhaWxfaWYgKHN0cmVhbTIgIT0gTlVMTCk7Ci0KLSAgLyogQ3JlYXRlIGFuZCBzZXQgc3RyZWFtIG9uIGV2ZW50ICovCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvY2FwcyIpOwotICBzdHJlYW0gPSBnc3Rfc3RyZWFtX25ldyAoImhlcmUvd2UvZ28iLCBjYXBzLCBHU1RfU1RSRUFNX1RZUEVfQVVESU8sIDApOwotICBmYWlsX3VubGVzcyAoc3RyZWFtICE9IE5VTEwpOwotICBnc3RfZXZlbnRfc2V0X3N0cmVhbSAoZXZlbnQsIHN0cmVhbSk7Ci0KLSAgLyogUGFyc2UgYW5kIGNoZWNrIGl0J3MgdGhlIHNhbWUgKi8KLSAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbSAoZXZlbnQsICZzdHJlYW0yKTsKLSAgZmFpbF91bmxlc3MgKHN0cmVhbTIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZCAoc3RyZWFtMiksICJoZXJlL3dlL2dvIik7Ci0gIGNhcHMyID0gZ3N0X3N0cmVhbV9nZXRfY2FwcyAoc3RyZWFtKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBjYXBzMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUgKHN0cmVhbSkgPT0gR1NUX1NUUkVBTV9UWVBFX0FVRElPKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0pOwotICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0yKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdHJ1Y3QgTm90aWZ5U3RhdHMKLXsKLSAgZ3VpbnQgY29sbGVjdGlvbl9ub3RpZnk7Ci0gIGd1aW50IGNvbGxlY3Rpb25fbm90aWZ5X2NhcHM7Ci0gIGd1aW50IGNvbGxlY3Rpb25fbm90aWZ5X3RhZ3M7Ci0gIGd1aW50IGNvbGxlY3Rpb25fbm90aWZ5X3R5cGU7Ci0gIGd1aW50IGNvbGxlY3Rpb25fbm90aWZ5X2ZsYWdzOwotCi0gIGd1aW50IHN0cmVhbV9ub3RpZnk7Ci0gIGd1aW50IHN0cmVhbV9ub3RpZnlfY2FwczsKLSAgZ3VpbnQgc3RyZWFtX25vdGlmeV90YWdzOwotICBndWludCBzdHJlYW1fbm90aWZ5X3R5cGU7Ci0gIGd1aW50IHN0cmVhbV9ub3RpZnlfZmxhZ3M7Ci0KLSAgZ3VpbnQgc3RyZWFtMl9ub3RpZnk7Ci0gIGd1aW50IHN0cmVhbTJfbm90aWZ5X2NhcHM7Ci0gIGd1aW50IHN0cmVhbTJfbm90aWZ5X3RhZ3M7Ci0gIGd1aW50IHN0cmVhbTJfbm90aWZ5X3R5cGU7Ci0gIGd1aW50IHN0cmVhbTJfbm90aWZ5X2ZsYWdzOwotfTsKLQotc3RhdGljIHZvaWQKLXN0cmVhbV9ub3RpZnlfY2IgKEdzdFN0cmVhbUNvbGxlY3Rpb24gKiBjb2xsZWN0aW9uLCBHc3RTdHJlYW0gKiBzdHJlYW0sCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjLCBndWludCAqIHZhbCkKLXsKLSAgR1NUX0xPRyAoIkdvdCBzdHJlYW0tbm90aWZ5IGZyb20gJSIgR1NUX1BUUl9GT1JNQVQgIiBmb3IgJXMgZnJvbSAlIgotICAgICAgR1NUX1BUUl9GT1JNQVQsIHN0cmVhbSwgcHNwZWMtPm5hbWUsIGNvbGxlY3Rpb24pOwotICAoKnZhbCkrKzsKLX0KLQotc3RhdGljIHZvaWQKLW5vdGlmeV9jYiAoR3N0U3RyZWFtICogc3RyZWFtLCBHUGFyYW1TcGVjICogcHNwZWMsIGd1aW50ICogdmFsKQotewotICBHU1RfTE9HICgiR290IG5vdGlmeSBmcm9tICUiIEdTVF9QVFJfRk9STUFUICIgZm9yICVzIiwgc3RyZWFtLCBwc3BlYy0+bmFtZSk7Ci0gICgqdmFsKSsrOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ub3RpZmllcykKLXsKLSAgR3N0U3RyZWFtQ29sbGVjdGlvbiAqY29sbGVjdGlvbjsKLSAgR3N0U3RyZWFtICpzdHJlYW0sICpzdHJlYW0yID0gTlVMTDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgc3RydWN0IE5vdGlmeVN0YXRzIHN0YXRzID0geyAwLCB9OwotICBHc3RUYWdMaXN0ICp0YWdzOwotCi0gIGNvbGxlY3Rpb24gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3ICgiY2hlY2stY29sbGVjdGlvbiIpOwotICBnX3NpZ25hbF9jb25uZWN0IChjb2xsZWN0aW9uLCAic3RyZWFtLW5vdGlmeSIsIChHQ2FsbGJhY2spIHN0cmVhbV9ub3RpZnlfY2IsCi0gICAgICAmc3RhdHMuY29sbGVjdGlvbl9ub3RpZnkpOwotICBnX3NpZ25hbF9jb25uZWN0IChjb2xsZWN0aW9uLCAic3RyZWFtLW5vdGlmeTo6c3RyZWFtLXR5cGUiLAotICAgICAgKEdDYWxsYmFjaykgc3RyZWFtX25vdGlmeV9jYiwgJnN0YXRzLmNvbGxlY3Rpb25fbm90aWZ5X3R5cGUpOwotICBnX3NpZ25hbF9jb25uZWN0IChjb2xsZWN0aW9uLCAic3RyZWFtLW5vdGlmeTo6c3RyZWFtLWZsYWdzIiwKLSAgICAgIChHQ2FsbGJhY2spIHN0cmVhbV9ub3RpZnlfY2IsICZzdGF0cy5jb2xsZWN0aW9uX25vdGlmeV9mbGFncyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGNvbGxlY3Rpb24sICJzdHJlYW0tbm90aWZ5OjpjYXBzIiwKLSAgICAgIChHQ2FsbGJhY2spIHN0cmVhbV9ub3RpZnlfY2IsICZzdGF0cy5jb2xsZWN0aW9uX25vdGlmeV9jYXBzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoY29sbGVjdGlvbiwgInN0cmVhbS1ub3RpZnk6OnRhZ3MiLAotICAgICAgKEdDYWxsYmFjaykgc3RyZWFtX25vdGlmeV9jYiwgJnN0YXRzLmNvbGxlY3Rpb25fbm90aWZ5X3RhZ3MpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInNvbWUvYXVkaW8tY2FwcyIpOwotICBzdHJlYW0gPSBnc3Rfc3RyZWFtX25ldyAoImhlcmUvd2UvZ28iLCBjYXBzLCBHU1RfU1RSRUFNX1RZUEVfQVVESU8sIDApOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHN0cmVhbSwgIm5vdGlmeSIsIChHQ2FsbGJhY2spIG5vdGlmeV9jYiwKLSAgICAgICZzdGF0cy5zdHJlYW1fbm90aWZ5KTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc3RyZWFtLCAibm90aWZ5OjpzdHJlYW0tdHlwZSIsIChHQ2FsbGJhY2spIG5vdGlmeV9jYiwKLSAgICAgICZzdGF0cy5zdHJlYW1fbm90aWZ5X3R5cGUpOwotICBnX3NpZ25hbF9jb25uZWN0IChzdHJlYW0sICJub3RpZnk6OnN0cmVhbS1mbGFncyIsIChHQ2FsbGJhY2spIG5vdGlmeV9jYiwKLSAgICAgICZzdGF0cy5zdHJlYW1fbm90aWZ5X2ZsYWdzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc3RyZWFtLCAibm90aWZ5OjpjYXBzIiwgKEdDYWxsYmFjaykgbm90aWZ5X2NiLAotICAgICAgJnN0YXRzLnN0cmVhbV9ub3RpZnlfY2Fwcyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHN0cmVhbSwgIm5vdGlmeTo6dGFncyIsIChHQ2FsbGJhY2spIG5vdGlmeV9jYiwKLSAgICAgICZzdGF0cy5zdHJlYW1fbm90aWZ5X3RhZ3MpOwotICBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbSAoY29sbGVjdGlvbiwgc3RyZWFtKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJzb21lL3ZpZGVvLWNhcHMiKTsKLSAgc3RyZWFtMiA9IGdzdF9zdHJlYW1fbmV3ICgiaGVyZS93ZS9nby9hZ2FpbiIsIGNhcHMsIEdTVF9TVFJFQU1fVFlQRV9WSURFTywgMCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc3RyZWFtMiwgIm5vdGlmeSIsIChHQ2FsbGJhY2spIG5vdGlmeV9jYiwKLSAgICAgICZzdGF0cy5zdHJlYW0yX25vdGlmeSk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHN0cmVhbTIsICJub3RpZnk6OnN0cmVhbS10eXBlIiwgKEdDYWxsYmFjaykgbm90aWZ5X2NiLAotICAgICAgJnN0YXRzLnN0cmVhbTJfbm90aWZ5X3R5cGUpOwotICBnX3NpZ25hbF9jb25uZWN0IChzdHJlYW0yLCAibm90aWZ5OjpzdHJlYW0tZmxhZ3MiLCAoR0NhbGxiYWNrKSBub3RpZnlfY2IsCi0gICAgICAmc3RhdHMuc3RyZWFtMl9ub3RpZnlfZmxhZ3MpOwotICBnX3NpZ25hbF9jb25uZWN0IChzdHJlYW0yLCAibm90aWZ5OjpjYXBzIiwgKEdDYWxsYmFjaykgbm90aWZ5X2NiLAotICAgICAgJnN0YXRzLnN0cmVhbTJfbm90aWZ5X2NhcHMpOwotICBnX3NpZ25hbF9jb25uZWN0IChzdHJlYW0yLCAibm90aWZ5Ojp0YWdzIiwgKEdDYWxsYmFjaykgbm90aWZ5X2NiLAotICAgICAgJnN0YXRzLnN0cmVhbTJfbm90aWZ5X3RhZ3MpOwotICBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fYWRkX3N0cmVhbSAoY29sbGVjdGlvbiwgc3RyZWFtMik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgic29tZS9uZXctdmlkZW8tY2FwcyIpOwotICBnc3Rfc3RyZWFtX3NldF9jYXBzIChzdHJlYW0yLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGZhaWxfdW5sZXNzIChzdGF0cy5jb2xsZWN0aW9uX25vdGlmeSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRzLmNvbGxlY3Rpb25fbm90aWZ5X2NhcHMgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0cy5zdHJlYW1fbm90aWZ5ID09IDApOwotICBmYWlsX3VubGVzcyAoc3RhdHMuc3RyZWFtX25vdGlmeV9jYXBzID09IDApOwotICBmYWlsX3VubGVzcyAoc3RhdHMuc3RyZWFtX25vdGlmeV90YWdzID09IDApOwotICBmYWlsX3VubGVzcyAoc3RhdHMuc3RyZWFtMl9ub3RpZnkgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0cy5zdHJlYW0yX25vdGlmeV9jYXBzID09IDEpOwotICBmYWlsX3VubGVzcyAoc3RhdHMuc3RyZWFtMl9ub3RpZnlfdGFncyA9PSAwKTsKLQotICB0YWdzID0gZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19BTEJVTSwgInRlc3QtYWxidW0iLCBOVUxMKTsKLSAgZ3N0X3N0cmVhbV9zZXRfdGFncyAoc3RyZWFtLCB0YWdzKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLQotICBmYWlsX3VubGVzcyAoc3RhdHMuY29sbGVjdGlvbl9ub3RpZnkgPT0gMik7Ci0gIGZhaWxfdW5sZXNzIChzdGF0cy5jb2xsZWN0aW9uX25vdGlmeV9jYXBzID09IDEpOwotICBmYWlsX3VubGVzcyAoc3RhdHMuY29sbGVjdGlvbl9ub3RpZnlfdGFncyA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRzLnN0cmVhbV9ub3RpZnkgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0cy5zdHJlYW1fbm90aWZ5X2NhcHMgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0cy5zdHJlYW1fbm90aWZ5X3RhZ3MgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0cy5zdHJlYW0yX25vdGlmeSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRzLnN0cmVhbTJfbm90aWZ5X2NhcHMgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0cy5zdHJlYW0yX25vdGlmeV90YWdzID09IDApOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNvbGxlY3Rpb24pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3Rfc3RyZWFtc19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RTdHJlYW0iKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RyZWFtX2NyZWF0aW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cmVhbV9ldmVudCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ub3RpZmllcyk7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X3N0cmVhbXMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHN0cnVjdHVyZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGY0MjNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3RzdHJ1Y3R1cmUuYworKysgL2Rldi9udWxsCkBAIC0xLDgwNiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBnc3RzdHJ1Y3R1cmUuYzogVW5pdCB0ZXN0cyBmb3IgR3N0U3RydWN0dXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdHN0cnVjdHVyZS5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zyb21fc3RyaW5nX2ludCkKLXsKLSAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0gewotICAgICJ2aWRlby94LXJhdywgd2lkdGggPSAoaW50KSAxMjM0NTYiLAotICAgICJ2aWRlby94LXJhdywgc3RyaWRlID0gKGludCkgLTEyMzQ1NiIsCi0gICAgInZpZGVvL3gtcmF3LCByZWRfbWFzayA9IChpbnQpIDB4RkZGRiIsCi0gICAgInZpZGVvL3gtcmF3LCByZWRfbWFzayA9IChpbnQpIDB4MDAwMEZGRkYiLAotICAgICJ2aWRlby94LXJhdywgcmVkX21hc2sgPSAoaW50KSAweDdGRkZGRkZGIiwKLSAgICAidmlkZW8veC1yYXcsIHJlZF9tYXNrID0gKGludCkgMHg4MDAwMDAwMCIsCi0gICAgInZpZGVvL3gtcmF3LCByZWRfbWFzayA9IChpbnQpIDB4RkYwMDAwMDAiLAotICAgIC8qIHJlc3VsdCBmcm9tCi0gICAgICogZ3N0LWxhdW5jaCAuLi4gISAidmlkZW8veC1yYXcsIHJlZF9tYXNrPShpbnQpMHhGRjAwMDAwMCIgISAuLi4gKi8KLSAgICAidmlkZW8veC1yYXcsXFwgcmVkX21hc2s9KGludCkweEZGMDAwMDAwIiwKLSAgfTsKLSAgZ2ludCByZXN1bHRzW10gPSB7Ci0gICAgMTIzNDU2LAotICAgIC0xMjM0NTYsCi0gICAgMHhGRkZGLAotICAgIDB4RkZGRiwKLSAgICAweDdGRkZGRkZGLAotICAgIChnaW50KSAweDgwMDAwMDAwLAotICAgIChnaW50KSAweEZGMDAwMDAwLAotICAgIChnaW50KSAweEZGMDAwMDAwLAotICB9OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgewotICAgIGNvbnN0IGNoYXIgKnM7Ci0gICAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gICAgZ2ludCB2YWx1ZTsKLQotICAgIHMgPSBzdHJpbmdzW2ldOwotCi0gICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCk7Ci0gICAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHN0cnVjdHVyZSBmcm9tIHN0cmluZyAlcyIsIHMpOwotICAgIG5hbWUgPSBnc3Rfc3RydWN0dXJlX250aF9maWVsZF9uYW1lIChzdHJ1Y3R1cmUsIDApOwotICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgbmFtZSwgJnZhbHVlKSk7Ci0gICAgZmFpbF91bmxlc3MgKHZhbHVlID09IHJlc3VsdHNbaV0sCi0gICAgICAgICJWYWx1ZSAlZCBpcyBub3QgdGhlIGV4cGVjdGVkIHJlc3VsdCAlZCBmb3Igc3RyaW5nICVzIiwKLSAgICAgICAgdmFsdWUsIHJlc3VsdHNbaV0sIHMpOwotCi0gICAgLyogY2xlYW51cCAqLwotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zyb21fc3RyaW5nX3VpbnQpCi17Ci0gIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKLSAgICAidGFnbGlzdCwgYmFyID0gKHVpbnQpIDEyMzQ1NiIsCi0gICAgInRhZ2xpc3QsIGJhciA9ICh1aW50KSAweEZGRkYiLAotICAgICJ0YWdsaXN0LCBiYXIgPSAodWludCkgMHgwMDAwRkZGRiIsCi0gICAgInRhZ2xpc3QsIGJhciA9ICh1aW50KSAweDdGRkZGRkZGIiwKLSAgICAidGFnbGlzdCwgYmFyID0gKHVpbnQpIDB4ODAwMDAwMDAiLAotICAgICJ0YWdsaXN0LCBiYXIgPSAodWludCkgMHhGRjAwMDAwMCIKLSAgfTsKLSAgZ3VpbnQgcmVzdWx0c1tdID0gewotICAgIDEyMzQ1NiwKLSAgICAweEZGRkYsCi0gICAgMHhGRkZGLAotICAgIDB4N0ZGRkZGRkYsCi0gICAgMHg4MDAwMDAwMCwKLSAgICAweEZGMDAwMDAwLAotICB9OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgewotICAgIGNvbnN0IGNoYXIgKnM7Ci0gICAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gICAgZ3VpbnQgdmFsdWU7Ci0KLSAgICBzID0gc3RyaW5nc1tpXTsKLQotICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpOwotICAgIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzdHJ1Y3R1cmUgZnJvbSBzdHJpbmcgJXMiLCBzKTsKLSAgICBuYW1lID0gZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSAoc3RydWN0dXJlLCAwKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAoc3RydWN0dXJlLCBuYW1lLCAmdmFsdWUpKTsKLSAgICBmYWlsX3VubGVzcyAodmFsdWUgPT0gcmVzdWx0c1tpXSwKLSAgICAgICAgIlZhbHVlICV1IGlzIG5vdCB0aGUgZXhwZWN0ZWQgcmVzdWx0ICV1IGZvciBzdHJpbmcgJXMiLAotICAgICAgICB2YWx1ZSwgcmVzdWx0c1tpXSwgcyk7Ci0KLSAgICAvKiBjbGVhbnVwICovCi0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCB0eXBlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mcm9tX3N0cmluZykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IGdjaGFyICpzOwotICBjb25zdCBHVmFsdWUgKnZhbDsKLQotICBzID0gInRlc3Qtc3RyaW5nLHZhbHVlPTEiOwotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKLSAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHN0cnVjdHVyZSBmcm9tIHN0cmluZyAlcyIsIHMpOwotICBmYWlsX3VubGVzcyAoKHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJ2YWx1ZSIpKSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UICh2YWwpKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOwotCi0gIHMgPSAidGVzdC1zdHJpbmcsdmFsdWU9MS4wIjsKLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCk7Ci0gIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzdHJ1Y3R1cmUgZnJvbSBzdHJpbmcgJXMiLCBzKTsKLSAgZmFpbF91bmxlc3MgKCh2YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAidmFsdWUiKSkgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0RPVUJMRSAodmFsKSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKLQotICBzID0gInRlc3Qtc3RyaW5nLHZhbHVlPTEvMSI7Ci0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpOwotICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgc3RydWN0dXJlIGZyb20gc3RyaW5nICVzIiwgcyk7Ci0gIGZhaWxfdW5sZXNzICgodmFsID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInZhbHVlIikpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OICh2YWwpKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJ1Y3R1cmUpOwotCi0gIHMgPSAidGVzdC1zdHJpbmcsdmFsdWU9YmFyIjsKLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCk7Ci0gIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzdHJ1Y3R1cmUgZnJvbSBzdHJpbmcgJXMiLCBzKTsKLSAgZmFpbF91bmxlc3MgKCh2YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAidmFsdWUiKSkgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX1NUUklORyAodmFsKSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKLQotICBzID0gInRlc3Qtc3RyaW5nLHZhbHVlPXRydWUiOwotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKLSAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHN0cnVjdHVyZSBmcm9tIHN0cmluZyAlcyIsIHMpOwotICBmYWlsX3VubGVzcyAoKHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJ2YWx1ZSIpKSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfQk9PTEVBTiAodmFsKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbCksIFRSVUUpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7Ci0KLSAgcyA9ICIwLjEwOmRlY29kZXItdmlkZW8vbXBlZywgYWJjPShib29sZWFuKWZhbHNlIjsKLSAgQVNTRVJUX0NSSVRJQ0FMIChzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChzdHJ1Y3R1cmUgPT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgc3RydWN0dXJlIGZyb20gc3RyaW5nICVzIiwgcyk7Ci0KLSAgLyogbWFrZSBzdXJlIHdlIGJhaWwgb3V0IGNvcnJlY3RseSBpbiBjYXNlIG9mIGFuIGVycm9yIG9yIGlmIHBhcnNpbmcgZmFpbHMgKi8KLSAgcyA9ICIqKipmb28qKiosIGFiYz0oYm9vbGVhbilmYWxzZSI7Ci0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3RydWN0dXJlID09IE5VTEwpOwotCi0gIC8qIGFzc2VydCB0aGF0IHdlIGdldCBhIHdhcm5pbmcgaWYgdGhlIHN0cnVjdHVyZSB3YXNuJ3QgZW50aXJlbHkgY29uc3VtZWQsIGJ1dAotICAgKiB3ZSBkaWRuJ3QgcHJvdmlkZSBhbiBlbmQgcG9pbnRlciAqLwotICBzID0gImZvby9iYXI7IG90aGVyIHJhbmRvbSBkYXRhIjsKLSAgQVNTRVJUX1dBUk5JTkcgKHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpKTsKLSAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHN0cnVjdHVyZSBmcm9tIHN0cmluZyAlcyIsIHMpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0cnVjdHVyZSk7Ci0KLSAgLyogbWFrZSBzdXJlIHdlIGhhbmRsZSBcIGFzIGxhc3QgY2hhcmFjdGVyIGluIHZhcmlvdXMgdGhpbmdzLCBydW4gd2l0aCB2YWxncmluZCAqLwotICBzID0gImZvbyx0ZXN0PVwiZm9vYmFyXFwiOwotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHN0cnVjdHVyZSA9PSBOVUxMKTsKLSAgcyA9ICJcXCI7Ci0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3RydWN0dXJlID09IE5VTEwpOwotICBzID0gImZvb2Jhcix0ZXN0XFwiOwotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHN0cnVjdHVyZSA9PSBOVUxMKTsKLSAgcyA9ICJmb29iYXIsdGVzdD0oc3RyaW5nKWZvb1xcIjsKLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAocywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzdHJ1Y3R1cmUgPT0gTlVMTCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90b19zdHJpbmcpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3QxOwotCi0gIEFTU0VSVF9DUklUSUNBTCAoc3QxID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJGb29cbndpdGgtbmV3bGluZSIpKTsKLSAgZmFpbF91bmxlc3MgKHN0MSA9PSBOVUxMKTsKLQotICBBU1NFUlRfQ1JJVElDQUwgKHN0MSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgiRm9vIHdpdGggd2hpdGVzcGFjZSIpKTsKLSAgZmFpbF91bmxlc3MgKHN0MSA9PSBOVUxMKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChzdDEgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoIjFzdCIpKTsKLSAgZmFpbF91bmxlc3MgKHN0MSA9PSBOVUxMKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RvX2Zyb21fc3RyaW5nKQotewotICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyOwotICBHc3RTdHJ1Y3R1cmUgKnN0MSwgKnN0MjsKLSAgZ2NoYXIgKnN0ciwgKnJlczEsICpyZXMyOwotCi0gIC8qIHRlc3QgZXNjYXBpbmcvdW5lc2NhcGluZyAqLwotICBzdDEgPSBnc3Rfc3RydWN0dXJlX25ldyAoIkZvb0Jhci0xMjMvMF8xIiwgIm51bSIsIEdfVFlQRV9JTlQsIDkxNzMsCi0gICAgICAic3RyaW5nIiwgR19UWVBFX1NUUklORywgIlNvbWV0aGluZyBMaWtlIEZhY2UvT2ZmIiwgTlVMTCk7Ci0gIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzdDEpOwotICBzdDIgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsIE5VTEwpOwotICBnX2ZyZWUgKHN0cik7Ci0KLSAgZmFpbF91bmxlc3MgKHN0MiAhPSBOVUxMKTsKLQotICAvKiBuZWVkIHRvIHB1dCBzdHJ1Y3R1cmVzIGludG8gY2FwcyB0byBjb21wYXJlICovCi0gIGNhcHMxID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjYXBzMSwgc3QxKTsKLSAgY2FwczIgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMyLCBzdDIpOwotICByZXMxID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzMSk7Ci0gIHJlczIgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzMSwgY2FwczIpLAotICAgICAgIlN0cnVjdHVyZXMgZGlkIG5vdCBtYXRjaDpcblx0U3RydWN0dXJlIDE6ICVzXG5cdFN0cnVjdHVyZSAyOiAlc1xuIiwKLSAgICAgIHJlczEsIHJlczIpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICBnX2ZyZWUgKHJlczEpOwotICBnX2ZyZWUgKHJlczIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIEFkZGVkIHRvIG1ha2Ugc3VyZSB0YWdsaXN0cyBhcmUgcHJvcGVybHkgc2VyaWFsaXplZC9kZXNlcmlhbGl6ZWQgYWZ0ZXIgYnVnCi0gKiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzMTMxICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90b19mcm9tX3N0cmluZ190YWdfZXZlbnQpCi17Ci0gIEdzdEV2ZW50ICp0YWdldmVudDsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLSAgR3N0U3RydWN0dXJlICpzdDEsICpzdDI7Ci0gIGdjaGFyICpzdHI7Ci0KLSAgLyogZW1wdHkgdGFnbGlzdCAqLwotICB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgdGFnZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3RhZyAodGFnbGlzdCk7Ci0KLSAgc3QxID0gKEdzdFN0cnVjdHVyZSAqKSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAodGFnZXZlbnQpOwotICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3QxKTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLQotICBzdDIgPSBnc3Rfc3RydWN0dXJlX25ld19mcm9tX3N0cmluZyAoc3RyKTsKLSAgZmFpbF91bmxlc3MgKHN0MiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKHN0MSwgc3QyKSk7Ci0gIGdzdF9ldmVudF91bnJlZiAodGFnZXZlbnQpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0Mik7Ci0gIGdfZnJlZSAoc3RyKTsKLQotICAvKiB0YWdsaXN0IHdpdGggZGF0YSAqLwotICB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ldyAoInRpdGxlIiwgIlRFU1QgVElUTEUiLCBOVUxMKTsKLSAgdGFnZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3RhZyAodGFnbGlzdCk7Ci0KLSAgc3QxID0gKEdzdFN0cnVjdHVyZSAqKSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAodGFnZXZlbnQpOwotICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3QxKTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLQotICBzdDIgPSBnc3Rfc3RydWN0dXJlX25ld19mcm9tX3N0cmluZyAoc3RyKTsKLSAgZmFpbF91bmxlc3MgKHN0MiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKHN0MSwgc3QyKSk7Ci0gIGdzdF9ldmVudF91bnJlZiAodGFnZXZlbnQpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0Mik7Ci0gIGdfZnJlZSAoc3RyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb21wbGV0ZV9zdHJ1Y3R1cmUpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBnY2hhciAqczsKLQotICBzID0gIkdzdEV2ZW50U2VlaywgcmF0ZT0oZG91YmxlKTEsIGZvcm1hdD0oR3N0Rm9ybWF0KUdTVF9GT1JNQVRfVElNRSwgZmxhZ3M9KEdzdFNlZWtGbGFncylHU1RfU0VFS19GTEFHX05PTkUsIHN0YXJ0X3R5cGU9KEdzdFNlZWtUeXBlKUdTVF9TRUVLX1RZUEVfU0VULCBzdGFydD0oZ2ludDY0KTEwMDAwMDAwMDAsIHN0b3BfdHlwZT0oR3N0U2Vla1R5cGUpR1NUX1NFRUtfVFlQRV9OT05FLCBzdG9wPShnaW50NjQpMCI7Ci0gIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHMsIE5VTEwpOwotICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgc3RydWN0dXJlIGZyb20gc3RyaW5nICVzIiwgcyk7Ci0gIC8qIEZJWE1FOiBUT0RPOiBhZGQgY2hlY2tzIGZvciBjb3JyZWN0IHNlcmlhbGl6YXRpb24gb2YgbWVtYmVycyA/ICovCi0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJpbmdfcHJvcGVydGllcykKLXsKLSAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLSAgR3N0U3RydWN0dXJlICpzdDEsICpzdDI7Ci0gIGdjaGFyICpzdHIsICpyZXMxLCAqcmVzMjsKLQotICAvKiB0ZXN0IGVzY2FwaW5nL3VuZXNjYXBpbmcgKi8KLSAgc3QxID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJSYW5kb21TdHJ1Y3R1cmUiLCAicHJvcDEiLCBHX1RZUEVfU1RSSU5HLCAiZm9vIiwKLSAgICAgICJwcm9wMiIsIEdfVFlQRV9TVFJJTkcsICIiLCAicHJvcDMiLCBHX1RZUEVfU1RSSU5HLCBOVUxMLAotICAgICAgInByb3A0IiwgR19UWVBFX1NUUklORywgIk5VTEwiLCBOVUxMKTsKLSAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHN0MSk7Ci0gIHN0MiA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgTlVMTCk7Ci0gIGdfZnJlZSAoc3RyKTsKLQotICBmYWlsX3VubGVzcyAoc3QyICE9IE5VTEwpOwotCi0gIC8qIG5lZWQgdG8gcHV0IHN0cnVjdHVyZXMgaW50byBjYXBzIHRvIGNvbXBhcmUgKi8KLSAgY2FwczEgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMxLCBzdDEpOwotICBjYXBzMiA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoY2FwczIsIHN0Mik7Ci0gIHJlczEgPSBnc3RfY2Fwc190b19zdHJpbmcgKGNhcHMxKTsKLSAgcmVzMiA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2FwczIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMxLCBjYXBzMiksCi0gICAgICAiU3RydWN0dXJlcyBkaWQgbm90IG1hdGNoOlxuXHRTdHJ1Y3R1cmUgMTogJXNcblx0U3RydWN0dXJlIDI6ICVzXG4iLAotICAgICAgcmVzMSwgcmVzMik7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0gIGdfZnJlZSAocmVzMSk7Ci0gIGdfZnJlZSAocmVzMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RydWN0dXJlX25ldykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHRXJyb3IgKmU7Ci0gIEdRdWFyayBkb21haW47Ci0gIGdib29sZWFuIGJvb2w7Ci0gIGdpbnQgbnVtLCBkZW47Ci0gIEdzdENsb2NrVGltZSBjbG9ja3RpbWU7Ci0gIGd1aW50NjQgdWludDY0OwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIm5hbWUiLAotICAgICAgImtleSIsIEdfVFlQRV9TVFJJTkcsICJ2YWx1ZSIsCi0gICAgICAiYm9vbCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLAotICAgICAgImZyYWN0aW9uIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDEsIDUsCi0gICAgICAiY2xvY2t0aW1lIiwgR1NUX1RZUEVfQ0xPQ0tfVElNRSwgR1NUX0NMT0NLX1RJTUVfTk9ORSwKLSAgICAgICJ1aW50NjQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMTIzNCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZpZWxkX3R5cGUgKHMsICJ1bmtub3duIikgPT0gR19UWVBFX0lOVkFMSUQpOwotICAvKiB0ZXN0IHNldHRpbmcgYSBkaWZmZXJlbnQgbmFtZSAqLwotICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzLCAibmV3bmFtZSIpOwotICBmYWlsX3VubGVzcyAoc3RyY21wIChnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJrZXkiKSwgInZhbHVlIikgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgImtleSIpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAocyksIDUpOwotICAvKiB0ZXN0IHJlbW92aW5nIGEgZmllbGQgKi8KLSAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJrZXkiKTsKLSAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAia2V5IikpOwotICBmYWlsX2lmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgImtleSIpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAocyksIDQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuIChzLCAiYm9vbCIsICZib29sKSk7Ci0gIGZhaWxfdW5sZXNzIChib29sKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKHMsICJmcmFjdGlvbiIsICZudW0sICZkZW4pKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGVuLCA1KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAocywgImNsb2NrdGltZSIsICZjbG9ja3RpbWUpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoY2xvY2t0aW1lLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0IChzLCAidWludDY0IiwgJnVpbnQ2NCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0ICh1aW50NjQsIDEyMzQpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7Ci0KLSAgZG9tYWluID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJ0ZXN0Iik7Ci0gIGUgPSBnX2Vycm9yX25ldyAoZG9tYWluLCAwLCAiYSB0ZXN0IGVycm9yIik7Ci0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIm5hbWUiLCAia2V5IiwgR19UWVBFX0VSUk9SLCBlLCBOVUxMKTsKLSAgZ19lcnJvcl9mcmVlIChlKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLQotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9zdHJ1Y3R1cmVfZnJlZSAoZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkKLSAgICAgICAgICAoIjAuMTA6ZGVjb2Rlci12aWRlby9tcGVnIikpKTsKLQotICAvKiBtYWtlIHN1cmUgd2UgYmFpbCBvdXQgY29ycmVjdGx5IGluIGNhc2Ugb2YgYW4gZXJyb3Igb3IgaWYgcGFyc2luZyBmYWlscyAqLwotICBBU1NFUlRfQ1JJVElDQUwgKHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIl5qb29cbmJhXG5kb29eIiwKLSAgICAgICAgICAiYWJjIiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChzID09IE5VTEwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpeGF0ZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIm5hbWUiLAotICAgICAgImludCIsIEdfVFlQRV9JTlQsIDUsCi0gICAgICAiaW50cmFuZ2UiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDUsIDEwLAotICAgICAgImludHJhbmdlMiIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgNSwgMTAsIE5VTEwpOwotCi0gIGZhaWxfaWYgKGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50IChzLCAiaW50IiwgNSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHMsICJpbnRyYW5nZSIsIDUpKTsKLSAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHMsICJpbnRyYW5nZSIsIDUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50IChzLCAiaW50cmFuZ2UyIiwgMTUpKTsKLSAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHMsICJpbnRyYW5nZTIiLCAxNSkpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpeGF0ZV9mcmFjX2xpc3QpCi17Ci0gIEdzdFN0cnVjdHVyZSAqcywgKnMyOwotICBHVmFsdWUgbGlzdCA9IHsgMCB9OwotICBHVmFsdWUgZnJhYyA9IHsgMCB9OwotICBnY2hhciAqc3RyOwotICBnaW50IG51bSwgZGVub207Ci0KLSAgZ192YWx1ZV9pbml0ICgmbGlzdCwgR1NUX1RZUEVfTElTVCk7Ci0gIGdfdmFsdWVfaW5pdCAoJmZyYWMsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLQotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZnJhYywgMzAsIDEpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmZnJhYyk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZmcmFjLCAxNSwgMSk7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZmcmFjKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmZyYWMsIDEwLCAxKTsKLSAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJmZyYWMpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoIm5hbWUiKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHMsICJmcmFjIiwgJmxpc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZnJhYyk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZsaXN0KTsKLQotICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7Ci0gIEdTVF9ERUJVRyAoImxpc3QgJXMiLCBzdHIpOwotICBnX2ZyZWUgKHN0cik7Ci0KLSAgLyogdGFrZSBjb3B5ICovCi0gIHMyID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzKTsKLQotICAvKiBmaXhhdGUgdG8gdGhlIG5lYXJlc3QgZnJhY3Rpb24sIHRoaXMgc2hvdWxkIGdpdmUgMTUvMSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAocywgImZyYWMiLCAxNCwgMSkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAocywgImZyYWMiLCAmbnVtLCAmZGVub20pKTsKLSAgZmFpbF91bmxlc3MgKG51bSA9PSAxNSk7Ci0gIGZhaWxfdW5sZXNzIChkZW5vbSA9PSAxKTsKLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBzID0gczI7Ci0KLSAgLyogZml4YXRlIHRvIHRoZSBuZWFyZXN0IGZyYWN0aW9uLCB0aGlzIHNob3VsZCBnaXZlIDMwLzEgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb24gKHMsICJmcmFjIiwgR19NQVhJTlQsCi0gICAgICAgICAgMSkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAocywgImZyYWMiLCAmbnVtLCAmZGVub20pKTsKLSAgZmFpbF91bmxlc3MgKG51bSA9PSAzMCk7Ci0gIGZhaWxfdW5sZXNzIChkZW5vbSA9PSAxKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pc19zdWJzZXQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczEsICpzMjsKLQotICBzMSA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKCJ0ZXN0L3Rlc3QsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0iLCBOVUxMKTsKLSAgZmFpbF9pZiAoczEgPT0gTlVMTCk7Ci0gIHMyID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoInRlc3QvdGVzdCwgY2hhbm5lbHM9KGludClbIDEsIDIgXSIsIE5VTEwpOwotICBmYWlsX2lmIChzMiA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9pc19zdWJzZXQgKHMxLCBzMikpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoczEpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0cnVjdHVyZV9uZXN0ZWQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3AsICpzYzEsICpzYzI7Ci0gIGdjaGFyICpzdHI7Ci0KLSAgc2MxID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJDYW1lcmEiLAotICAgICAgIlhSZXNvbHV0aW9uIiwgR19UWVBFX0lOVCwgNzIsICJZUmVzb2x1dGlvbiIsIEdfVFlQRV9JTlQsIDczLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNjMSAhPSBOVUxMKTsKLQotICBzYzIgPSBnc3Rfc3RydWN0dXJlX25ldyAoIkltYWdlLURhdGEiLAotICAgICAgIk9yaWVudGF0aW9uIiwgR19UWVBFX1NUUklORywgInRvcC1sZWZ0IiwKLSAgICAgICJDb21tZW50IiwgR19UWVBFX1NUUklORywgInN1cGVyIHBob3RvIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzYzIgIT0gTlVMTCk7Ci0KLSAgc3AgPSBnc3Rfc3RydWN0dXJlX25ldyAoIkV4aWYiLCAiQ2FtZXJhIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBzYzEsCi0gICAgICAiSW1hZ2UgRGF0YSIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgc2MyLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNwICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX25fZmllbGRzIChzcCkgPT0gMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzcCwgIkNhbWVyYSIsCi0gICAgICAgICAgR1NUX1RZUEVfU1RSVUNUVVJFKSk7Ci0KLSAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHNwKTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJzZXJpYWxpemVkIHRvICclcyciLCBzdHIpOwotCi0gIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoc3RyLAotICAgICAgICAgICJFeGlmIgotICAgICAgICAgICIsIENhbWVyYT0oc3RydWN0dXJlKVwiQ2FtZXJhXFwsXFwgWFJlc29sdXRpb25cXD1cXChpbnRcXCk3MlxcLFxcIFlSZXNvbHV0aW9uXFw9XFwoaW50XFwpNzNcXDtcIiIKLSAgICAgICAgICAiLCBJbWFnZSBEYXRhPShzdHJ1Y3R1cmUpXCJJbWFnZS1EYXRhXFwsXFwgT3JpZW50YXRpb25cXD1cXChzdHJpbmdcXCl0b3AtbGVmdFxcLFxcIENvbW1lbnRcXD1cXChzdHJpbmdcXClcXFwic3VwZXJcXFxcXFwgcGhvdG9cXFwiXFw7XCI7IikpOwotCi0gIGdfZnJlZSAoc3RyKTsKLSAgc3RyID0gTlVMTDsKLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHNjMSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc2MyKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzcCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RydWN0dXJlX25lc3RlZF9mcm9tX2FuZF90b19zdHJpbmcpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgY29uc3QgZ2NoYXIgKnN0cjE7Ci0gIGdjaGFyICpzdHIyLCAqZW5kID0gTlVMTDsKLQotICBzdHIxID0gIm1haW4iCi0gICAgICAiLCBtYWluLXN1YjE9KHN0cnVjdHVyZSlcInR5cGUtYlxcLFxcIG1hY2hpbmUtdHlwZVxcPVxcKGludFxcKTBcXDtcIiIKLSAgICAgICIsIG1haW4tc3ViMj0oc3RydWN0dXJlKVwidHlwZS1hXFwsXFwgcGx1Z2luLWZpbGVuYW1lXFw9XFwoc3RyaW5nXFwpXFxcIi9ob21lL3VzZXIvbGliL2xpYlxcXFxcXCB3aXRoXFxcXFxcIHNwYWNlcy5kbGxcXFwiXFwsXFwgbWFjaGluZS10eXBlXFw9XFwoaW50XFwpMVxcO1wiIgotICAgICAgIiwgbWFpbi1zdWIzPShzdHJ1Y3R1cmUpXCJ0eXBlLWJcXCxcXCBwbHVnaW4tZmlsZW5hbWVcXD1cXChzdHJpbmdcXCkvaG9tZS91c2VyL2xpYi9saWJfbm9fc3BhY2VzLnNvXFwsXFwgbWFjaGluZS10eXBlXFw9XFwoaW50XFwpMVxcO1wiIgotICAgICAgIjsiOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIxLCAmZW5kKTsKLSAgZmFpbF91bmxlc3MgKHMgIT0gTlVMTCk7Ci0KLSAgR1NUX0RFQlVHICgibm90IHBhcnNlZCBwYXJ0IDogJXMiLCBlbmQpOwotICBmYWlsX3VubGVzcyAoKmVuZCA9PSAnXDAnKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAocykgPT0gMyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzLCAibWFpbi1zdWIxIiwKLSAgICAgICAgICBHU1RfVFlQRV9TVFJVQ1RVUkUpKTsKLQotICBzdHIyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOwotICBmYWlsX3VubGVzcyAoc3RyMiAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKHN0cjEsIHN0cjIpKTsKLQotICBnX2ZyZWUgKHN0cjIpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFyYXJnX2dldHRlcnMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR3N0QnVmZmVyICpidWYsICpidWYyOwotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdENhcHMgKmNhcHMsICpjYXBzMjsKLSAgR3N0TWFwSW5mbyBpbmZvOwotICBnZG91YmxlIGQ7Ci0gIGdpbnQ2NCBpNjQ7Ci0gIGdjaGFyICpjOwotICBnaW50IGksIG51bSwgZGVub207Ci0gIGd1aW50OCAqZGF0YTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICBkYXRhID0gaW5mby5kYXRhOwotICBkYXRhWzBdID0gMHhmMDsKLSAgZGF0YVsxXSA9IDB4NjY7Ci0gIGRhdGFbMl0gPSAweDBkOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtZm9vIik7Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidGVzdCIsICJpbnQiLCBHX1RZUEVfSU5ULCAxMjM0NTY3OCwgInN0cmluZyIsCi0gICAgICBHX1RZUEVfU1RSSU5HLCAiSGVsbG8gV29ybGQhIiwgImJ1ZiIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCAiY2FwcyIsCi0gICAgICBHU1RfVFlQRV9DQVBTLCBjYXBzLCAiaW50NjQiLCBHX1RZUEVfSU5UNjQsIEdfR0lOVDY0X0NPTlNUQU5UICgtOTkpLAotICAgICAgImRvdWJsZSIsIEdfVFlQRV9ET1VCTEUsIEdfTUFYRE9VQkxFLCAiZnJhZyIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAzOSwgMTQsCi0gICAgICBOVUxMKTsKLQotICAvKiBmaXJzdCB0aGUgcGxhaW4gb25lICovCi0gIHJldCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAiZG91YmxlIiwgR19UWVBFX0RPVUJMRSwgJmQsICJzdHJpbmciLAotICAgICAgR19UWVBFX1NUUklORywgJmMsICJjYXBzIiwgR1NUX1RZUEVfQ0FQUywgJmNhcHMyLCAiYnVmIiwKLSAgICAgIEdTVF9UWVBFX0JVRkZFUiwgJmJ1ZjIsICJmcmFnIiwgR1NUX1RZUEVfRlJBQ1RJT04sICZudW0sICZkZW5vbSwgImludCIsCi0gICAgICBHX1RZUEVfSU5ULCAmaSwgImludDY0IiwgR19UWVBFX0lOVDY0LCAmaTY0LCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAocmV0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoYywgIkhlbGxvIFdvcmxkISIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChpLCAxMjM0NTY3OCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoZCwgR19NQVhET1VCTEUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW0sIDM5KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGVub20sIDE0KTsKLSAgZmFpbF91bmxlc3MgKGk2NCA9PSAtOTkpOwotICBmYWlsX3VubGVzcyAoY2FwcyA9PSBjYXBzMik7Ci0gIGZhaWxfdW5sZXNzIChidWYgPT0gYnVmMik7Ci0KLSAgLyogZXhwZWN0ZWQgZmFpbHVyZXMgKi8KLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3Rfc3RydWN0dXJlX2dldCAocywgTlVMTCwgR19UWVBFX0lOVCwgJmksIE5VTEwpKTsKLSAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9nZXQgKHMsICJpbnQiLCBHX1RZUEVfSU5ULCAmaSwgImRvdWJsZSIsCi0gICAgICAgICAgR19UWVBFX0ZMT0FULCAmZCwgTlVMTCkpOwotICBmYWlsX2lmIChnc3Rfc3RydWN0dXJlX2dldCAocywgImludCIsIEdfVFlQRV9JTlQsICZpLCAiZG9vYmxlIiwKLSAgICAgICAgICBHX1RZUEVfRE9VQkxFLCAmZCwgTlVMTCkpOwotCi0gIGdfZnJlZSAoYyk7Ci0gIGMgPSBOVUxMOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICBjYXBzMiA9IE5VTEw7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOwotICBidWYyID0gTlVMTDsKLQotICAvKiBhbmQgbm93IHRoZSBfaWQgdmFyaWFudCAqLwotICByZXQgPSBnc3Rfc3RydWN0dXJlX2lkX2dldCAocywgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJkb3VibGUiKSwKLSAgICAgIEdfVFlQRV9ET1VCTEUsICZkLCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoInN0cmluZyIpLCBHX1RZUEVfU1RSSU5HLAotICAgICAgJmMsIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiY2FwcyIpLCBHU1RfVFlQRV9DQVBTLCAmY2FwczIsCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImJ1ZiIpLCBHU1RfVFlQRV9CVUZGRVIsICZidWYyLAotICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJpbnQiKSwgR19UWVBFX0lOVCwgJmksCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoImludDY0IiksIEdfVFlQRV9JTlQ2NCwgJmk2NCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKHJldCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGMsICJIZWxsbyBXb3JsZCEiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoaSwgMTIzNDU2NzgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKGQsIEdfTUFYRE9VQkxFKTsKLSAgZmFpbF91bmxlc3MgKGk2NCA9PSAtOTkpOwotICBmYWlsX3VubGVzcyAoY2FwcyA9PSBjYXBzMik7Ci0gIGZhaWxfdW5sZXNzIChidWYgPT0gYnVmMik7Ci0KLSAgLyogZXhwZWN0ZWQgZmFpbHVyZXMgKi8KLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3Rfc3RydWN0dXJlX2dldCAocywgMCwgR19UWVBFX0lOVCwgJmksIE5VTEwpKTsKLSAgZmFpbF9pZiAoZ3N0X3N0cnVjdHVyZV9pZF9nZXQgKHMsIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiaW50IiksCi0gICAgICAgICAgR19UWVBFX0lOVCwgJmksIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgiZG91YmxlIiksIEdfVFlQRV9GTE9BVCwKLSAgICAgICAgICAmZCwgTlVMTCkpOwotICBmYWlsX2lmIChnc3Rfc3RydWN0dXJlX2lkX2dldCAocywgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJpbnQiKSwKLSAgICAgICAgICBHX1RZUEVfSU5ULCAmaSwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJkb29ibGUiKSwgR19UWVBFX0RPVUJMRSwKLSAgICAgICAgICAmZCwgTlVMTCkpOwotCi0gIGdfZnJlZSAoYyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOwotCi0gIC8qIGZpbmFsbHkgbWFrZSBzdXJlIE5VTEwgYXMgcmV0dXJuIGxvY2F0aW9uIGlzIGhhbmRsZWQgZ3JhY2VmdWxseSAqLwotICByZXQgPSBnc3Rfc3RydWN0dXJlX2dldCAocywgImRvdWJsZSIsIEdfVFlQRV9ET1VCTEUsIE5VTEwsICJzdHJpbmciLAotICAgICAgR19UWVBFX1NUUklORywgTlVMTCwgImNhcHMiLCBHU1RfVFlQRV9DQVBTLCBOVUxMLCAiYnVmIiwKLSAgICAgIEdTVF9UWVBFX0JVRkZFUiwgTlVMTCwgImludCIsIEdfVFlQRV9JTlQsICZpLCAiZnJhZyIsIEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgTlVMTCwgTlVMTCwgImludDY0IiwgR19UWVBFX0lOVDY0LCAmaTY0LCBOVUxMKTsKLQotICBBU1NFUlRfV0FSTklORyAoZ3N0X3N0cnVjdHVyZV9nZXQgKHMsICJmcmFnIiwgR1NUX1RZUEVfRlJBQ1RJT04sIE5VTEwsCi0gICAgICAgICAgJmRlbm9tLCBOVUxMKSk7Ci0gIEFTU0VSVF9XQVJOSU5HIChnc3Rfc3RydWN0dXJlX2dldCAocywgImZyYWciLCBHU1RfVFlQRV9GUkFDVElPTiwgJm51bSwKLSAgICAgICAgICBOVUxMLCBOVUxMKSk7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yZWFjaF9mdW5jIChHUXVhcmsgZmllbGRfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdpbnQgKnN1bSA9IHVzZXJfZGF0YTsKLSAgZ2ludCB2ID0gMDsKLQotICBpZiAoR19WQUxVRV9IT0xEU19JTlQgKHZhbHVlKSkKLSAgICB2ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICpzdW0gKz0gdjsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZm9yZWFjaCkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBnaW50IHN1bSA9IDA7Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiZm9vL2JhciIsICJiYXoiLCBHX1RZUEVfSU5ULCAxLCAiYmxhIiwgR19UWVBFX0lOVCwgMywKLSAgICAgIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzLCBmb3JlYWNoX2Z1bmMsICZzdW0pKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3VtLCA0KTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotbWFwX2Z1bmMgKEdRdWFyayBmaWVsZF9pZCwgR1ZhbHVlICogdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgaWYgKEdfVkFMVUVfSE9MRFNfSU5UICh2YWx1ZSkpCi0gICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgMTIzKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWFwX2luX3BsYWNlKQotewotICBHc3RTdHJ1Y3R1cmUgKnMsICpzMjsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJmb28vYmFyIiwgImJheiIsIEdfVFlQRV9JTlQsIDEsICJibGEiLCBHX1RZUEVfSU5ULCAzLAotICAgICAgTlVMTCk7Ci0gIHMyID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJmb28vYmFyIiwgImJheiIsIEdfVFlQRV9JTlQsIDEyMywgImJsYSIsIEdfVFlQRV9JTlQsCi0gICAgICAxMjMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2UgKHMsIG1hcF9mdW5jLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2lzX2VxdWFsIChzLCBzMikpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMyKTsKLQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZmlsdGVyX21hcF9mdW5jIChHUXVhcmsgZmllbGRfaWQsIEdWYWx1ZSAqIHZhbHVlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmIChzdHJjbXAgKGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZF9pZCksICJibGEiKSA9PSAwKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoR19WQUxVRV9IT0xEU19JTlQgKHZhbHVlKSkKLSAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCAyKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UpCi17Ci0gIEdzdFN0cnVjdHVyZSAqcywgKnMyOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImZvby9iYXIiLCAiYmF6IiwgR19UWVBFX0lOVCwgMSwgImJsYSIsIEdfVFlQRV9JTlQsIDMsCi0gICAgICBOVUxMKTsKLSAgczIgPSBnc3Rfc3RydWN0dXJlX25ldyAoImZvby9iYXIiLCAiYmF6IiwgR19UWVBFX0lOVCwgMiwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZmlsdGVyX2FuZF9tYXBfaW5fcGxhY2UgKHMsIGZpbHRlcl9tYXBfZnVuYywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2lzX2VxdWFsIChzLCBzMikpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mbGFnc2V0KQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdUeXBlIHRlc3RfZmxhZ3NldF90eXBlOwotICBndWludCB0ZXN0X2ZsYWdzID0KLSAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX1NLSVAgfCBHU1RfU0VFS19GTEFHX1NOQVBfQUZURVI7Ci0gIGd1aW50IHRlc3RfbWFzayA9IEdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUOwotICBndWludCBvdXRfZmxhZ3MsIG91dF9tYXNrOwotCi0gIHRlc3RfZmxhZ3NldF90eXBlID0gZ3N0X2ZsYWdzZXRfcmVnaXN0ZXIgKEdTVF9UWVBFX1NFRUtfRkxBR1MpOwotICBmYWlsX3VubGVzcyAoZ190eXBlX2lzX2EgKHRlc3RfZmxhZ3NldF90eXBlLCBHU1RfVFlQRV9GTEFHX1NFVCkpOwotCi0gIC8qIENoZWNrIHRoYXQgd2UgY2FuIHJldHJpZXZlIGEgbm9uLXN0YW5kYXJkIGZsYWdzZXQgZnJvbSB0aGUgc3RydWN0dXJlICovCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoInRlc3Qtc3RydWN0IiwgInRlc3QtZmxhZ3NldCIsIHRlc3RfZmxhZ3NldF90eXBlLAotICAgICAgdGVzdF9mbGFncywgdGVzdF9tYXNrLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZsYWdzZXQgKHMsICJ0ZXN0LWZsYWdzZXQiLCAmb3V0X2ZsYWdzLAotICAgICAgICAgICZvdXRfbWFzaykpOwotCi0gIGZhaWxfdW5sZXNzIChvdXRfZmxhZ3MgPT0gdGVzdF9mbGFncyk7Ci0gIGZhaWxfdW5sZXNzIChvdXRfbWFzayA9PSB0ZXN0X21hc2spOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3Rfc3RydWN0dXJlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFN0cnVjdHVyZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mcm9tX3N0cmluZ19pbnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZnJvbV9zdHJpbmdfdWludCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mcm9tX3N0cmluZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90b19zdHJpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdG9fZnJvbV9zdHJpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdG9fZnJvbV9zdHJpbmdfdGFnX2V2ZW50KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cmluZ19wcm9wZXJ0aWVzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvbXBsZXRlX3N0cnVjdHVyZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJ1Y3R1cmVfbmV3KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpeGF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9maXhhdGVfZnJhY19saXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2lzX3N1YnNldCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJ1Y3R1cmVfbmVzdGVkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cnVjdHVyZV9uZXN0ZWRfZnJvbV9hbmRfdG9fc3RyaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZhcmFyZ19nZXR0ZXJzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZvcmVhY2gpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWFwX2luX3BsYWNlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZsYWdzZXQpOwotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9zdHJ1Y3R1cmUpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHN5c3RlbWNsb2NrLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNjYTJhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0c3lzdGVtY2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDkyOCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdHN5c3RlbWNsb2NrLmM6IFVuaXQgdGVzdCBmb3IgR3N0U3lzdGVtQ2xvY2sKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0YXRpYyBHTXV0ZXggYWZfbG9jazsKLXN0YXRpYyBHQ29uZCBhZl9jb25kOwotCi0vKiBzZWUgaWYgdGhlIGRlZmluZXMgbWFrZSBzZW5zZSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmFuZ2UpCi17Ci0gIEdzdENsb2NrVGltZSB0aW1lLCB0aW1lMjsKLQotICB0aW1lID0gR1NUX1NFQ09ORDsKLSAgZmFpbF91bmxlc3MgKHRpbWUgPT0gR19HVUlOVDY0X0NPTlNUQU5UICgxMDAwMDAwMDAwKSk7Ci0KLSAgdGltZTIgPSB0aW1lIC8gMTAwMDsKLSAgZmFpbF91bmxlc3MgKHRpbWUyID09IDEwMDAwMDApOwotICBmYWlsX3VubGVzcyAodGltZTIgPT0gR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzcyAodGltZTIgPT0gR1NUX1RJTUVfQVNfVVNFQ09ORFMgKHRpbWUpKTsKLQotICB0aW1lMiA9IHRpbWUgLyAxMDAwMDAwOwotICBmYWlsX3VubGVzcyAodGltZTIgPT0gMTAwMCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lMiA9PSBHU1RfVVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lMiA9PSBHU1RfVElNRV9BU19NU0VDT05EUyAodGltZSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpZ25lZG5lc3MpCi17Ci0gIEdzdENsb2NrVGltZSB0aW1lW10gPSB7IDAsIDEsIEdfTUFYVUlOVDY0IC8gR1NUX1NFQ09ORCB9OwotICBHc3RDbG9ja1RpbWVEaWZmIGRpZmZbXSA9Ci0gICAgICB7IDAsIDEsIC0xLCBHX01BWElOVDY0IC8gR1NUX1NFQ09ORCwgR19NSU5JTlQ2NCAvIEdTVF9TRUNPTkQgfTsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTICh0aW1lKTsgaSsrKSB7Ci0gICAgZmFpbF9pZiAodGltZVtpXSAhPSAodGltZVtpXSAqIEdTVF9TRUNPTkQgLyBHU1RfU0VDT05EKSk7Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZGlmZik7IGkrKykgewotICAgIGZhaWxfaWYgKGRpZmZbaV0gIT0gKGRpZmZbaV0gKiBHU1RfU0VDT05EIC8gR1NUX1NFQ09ORCkpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2RlZmluZSBUSU1FX1VOSVQgKEdTVF9TRUNPTkQgLyA1KQotc3RhdGljIHZvaWQKLWdzdF9jbG9ja19kZWJ1ZyAoR3N0Q2xvY2sgKiBjbG9jaykKLXsKLSAgR3N0Q2xvY2tUaW1lIHRpbWU7Ci0KLSAgdGltZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICBHU1RfREVCVUcgKCJDbG9jayBpbmZvOiB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodGltZSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW9rX2NhbGxiYWNrIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSwKLSAgICBHc3RDbG9ja0lEIGlkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdTVF9MT0cgKCJ1bmxvY2tlZCBhc3luYyBpZCAlcCIsIGlkKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWVycm9yX2NhbGxiYWNrIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSwKLSAgICBHc3RDbG9ja0lEIGlkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdTVF9XQVJOSU5HICgidW5sb2NrZWQgdW5zY2hlZHVsZWQgYXN5bmMgaWQgJXAsIHRoaXMgaXMgd3JvbmciLCBpZCk7Ci0gIGZhaWxfaWYgKFRSVUUpOwotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotR011dGV4IHN0b3JlX2xvY2s7Ci0KLXN0YXRpYyBnYm9vbGVhbgotc3RvcmVfY2FsbGJhY2sgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSB0aW1lLAotICAgIEdzdENsb2NrSUQgaWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR0xpc3QgKipsaXN0ID0gdXNlcl9kYXRhOwotCi0gIEdTVF9ERUJVRyAoInVubG9ja2VkIGFzeW5jIGlkICVwIiwgaWQpOwotICBnX211dGV4X2xvY2sgKCZzdG9yZV9sb2NrKTsKLSAgKmxpc3QgPSBnX2xpc3RfYXBwZW5kICgqbGlzdCwgaWQpOwotICBnX211dGV4X3VubG9jayAoJnN0b3JlX2xvY2spOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotbm90aWZ5X2NhbGxiYWNrIChHc3RDbG9jayAqIGNsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSwKLSAgICBHc3RDbG9ja0lEIGlkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdib29sZWFuICpyZXQgPSAoZ2Jvb2xlYW4gKikgdXNlcl9kYXRhOwotCi0gIGlmIChyZXQgIT0gTlVMTCkKLSAgICAqcmV0ID0gVFJVRTsKLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NldF9kZWZhdWx0KQotewotICBHc3RDbG9jayAqY2xvY2ssICpzdGF0aWNfY2xvY2s7Ci0KLSAgLyogb2J0YWluIHRoZSBkZWZhdWx0IHN5c3RlbSBjbG9jaywgd2hpY2gga2VlcHMgYSBzdGF0aWMgcmVmIGFuZCBidW1wcyB0aGUKLSAgICogcmVmY291bnQgYmVmb3JlIHJldHVybmluZyAqLwotICBzdGF0aWNfY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRpY19jbG9jayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBkZWZhdWx0IHN5c3RlbSBjbG9jayIpOwotICBnX2Fzc2VydF9jbXBpbnQgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKHN0YXRpY19jbG9jayksID09LCAyKTsKLQotICAvKiBzZXQgYSBuZXcgZGVmYXVsdCBjbG9jayB0byBhIGRpZmZlcmVudCBpbnN0YW5jZSB3aGljaCBzaG91bGQgcmVwbGFjZSB0aGUKLSAgICogc3RhdGljIGNsb2NrIHdpdGggdGhpcyBvbmUsIGFuZCB1bnJlZiB0aGUgc3RhdGljIGNsb2NrICovCi0gIGNsb2NrID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9TWVNURU1fQ0xPQ0ssICJuYW1lIiwgIlRlc3RDbG9jayIsIE5VTEwpOwotICBnc3Rfc3lzdGVtX2Nsb2NrX3NldF9kZWZhdWx0IChjbG9jayk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoR1NUX09CSkVDVF9SRUZDT1VOVCAoc3RhdGljX2Nsb2NrKSwgPT0sIDEpOwotICBnX29iamVjdF91bnJlZiAoc3RhdGljX2Nsb2NrKTsKLSAgc3RhdGljX2Nsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0aWNfY2xvY2sgPT0gY2xvY2spOwotICBnX2Fzc2VydF9jbXBpbnQgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKGNsb2NrKSwgPT0sIDMpOwotICBnX29iamVjdF91bnJlZiAoc3RhdGljX2Nsb2NrKTsKLQotICAvKiBSZXNldCB0aGUgZGVmYXVsdCBjbG9jayB0byB0aGUgc3RhdGljIG9uZSAqLwotICBnc3Rfc3lzdGVtX2Nsb2NrX3NldF9kZWZhdWx0IChOVUxMKTsKLSAgc3RhdGljX2Nsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0aWNfY2xvY2sgIT0gY2xvY2spOwotICBnX2Fzc2VydF9jbXBpbnQgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKGNsb2NrKSwgPT0sIDEpOwotICBnX2Fzc2VydF9jbXBpbnQgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKHN0YXRpY19jbG9jayksID09LCAyKTsKLSAgZ19vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgZ19vYmplY3RfdW5yZWYgKHN0YXRpY19jbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2luZ2xlX3Nob3QpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tJRCBpZCwgaWQyOwotICBHc3RDbG9ja1RpbWUgYmFzZTsKLSAgR3N0Q2xvY2tSZXR1cm4gcmVzdWx0OwotCi0gIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGZhaWxfdW5sZXNzIChjbG9jayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RTeXN0ZW1DbG9jayIpOwotCi0gIGdzdF9jbG9ja19kZWJ1ZyAoY2xvY2spOwotICBiYXNlID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0KLSAgaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgYmFzZSArIFRJTUVfVU5JVCk7Ci0gIGZhaWxfdW5sZXNzIChpZCAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBzaW5nbGUgc2hvdCBpZCIpOwotCi0gIEdTVF9ERUJVRyAoIndhaXRpbmcgb25lIHRpbWUgdW5pdCIpOwotICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdCAoaWQsIE5VTEwpOwotICBnc3RfY2xvY2tfZGVidWcgKGNsb2NrKTsKLSAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIChyZXN1bHQ9JWQpIiwKLSAgICAgIHJlc3VsdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSA+IChiYXNlICsgVElNRV9VTklUKSwKLSAgICAgICJ0YXJnZXQgdGltZSBoYXMgbm90IGJlZW4gcmVhY2hlZCIpOwotCi0gIEdTVF9ERUJVRyAoIndhaXRpbmcgaW4gdGhlIHBhc3QiKTsKLSAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCBOVUxMKTsKLSAgZ3N0X2Nsb2NrX2RlYnVnIChjbG9jayk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX0VBUkxZLAotICAgICAgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gRUFSTFkocmVzdWx0PSVkKSIsIHJlc3VsdCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotCi0gIGlkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyAyICogVElNRV9VTklUKTsKLSAgR1NUX0RFQlVHICgid2FpdGluZyBvbmUgc2Vjb25kIGFzeW5jIGlkICVwIiwgaWQpOwotICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoaWQsIG9rX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7Ci0gIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAoMiAqIDEwMDApKTsKLSAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGlkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0KLSAgaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgYmFzZSArIDUgKiBUSU1FX1VOSVQpOwotICBHU1RfREVCVUcgKCJ3YWl0aW5nIG9uZSBzZWNvbmQgYXN5bmMsIHdpdGggY2FuY2VsIG9uIGlkICVwIiwgaWQpOwotICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoaWQsIGVycm9yX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7Ci0gIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAoMiAqIDEwMDApKTsKLSAgR1NUX0RFQlVHICgiY2FuY2VsIGlkICVwIGFmdGVyIGhhbGYgYSB0aW1lIHVuaXQiLCBpZCk7Ci0gIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChpZCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICBHU1RfREVCVUcgKCJjYW5jZWxlZCBpZCAlcCIsIGlkKTsKLQotICBHU1RfREVCVUcgKCJ3YWl0aW5nIG11bHRpcGxlIG9uZSBzZWNvbmQgYXN5bmMsIHdpdGggY2FuY2VsIik7Ci0gIGlkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyA1ICogVElNRV9VTklUKTsKLSAgaWQyID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyA2ICogVElNRV9VTklUKTsKLSAgR1NUX0RFQlVHICgid2FpdGluZyBpZCAlcCIsIGlkKTsKLSAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkLCBva19jYWxsYmFjaywgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotCi0gIEdTVF9ERUJVRyAoIndhaXRpbmcgaWQgJXAiLCBpZDIpOwotICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoaWQyLCBlcnJvcl9jYWxsYmFjaywgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDIgKiAxMDAwKSk7Ci0gIEdTVF9ERUJVRyAoImNhbmNlbCBpZCAlcCBhZnRlciBoYWxmIGEgdGltZSB1bml0IiwgaWQyKTsKLSAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGlkMik7Ci0gIEdTVF9ERUJVRyAoImNhbmNlbGVkIGlkICVwIiwgaWQyKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZDIpOwotCi0gIC8qIHdhaXQgZm9yIHRoZSBlbnRyeSB0byB0aW1lIG91dCAqLwotICBnX3VzbGVlcCAoVElNRV9VTklUIC8gMTAwMCAqIDUpOwotICBmYWlsX3VubGVzcyAoKChHc3RDbG9ja0VudHJ5ICopIGlkKS0+c3RhdHVzID09IEdTVF9DTE9DS19PSywKLSAgICAgICJXYWl0aW5nIGRpZCBub3QgZmluaXNoIik7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wZXJpb2RpY19zaG90KQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrSUQgaWQsIGlkMjsKLSAgR3N0Q2xvY2tUaW1lIGJhc2U7Ci0gIEdzdENsb2NrUmV0dXJuIHJlc3VsdDsKLQotICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBmYWlsX3VubGVzcyAoY2xvY2sgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0U3lzdGVtQ2xvY2siKTsKLQotICBnc3RfY2xvY2tfZGVidWcgKGNsb2NrKTsKLSAgYmFzZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotCi0gIC8qIHNpZ25hbCBldmVyeSBoYWxmIGEgdGltZSB1bml0ICovCi0gIGlkID0gZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAoY2xvY2ssIGJhc2UgKyBUSU1FX1VOSVQsIFRJTUVfVU5JVCAvIDIpOwotICBmYWlsX3VubGVzcyAoaWQgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgcGVyaW9kaWMgaWQiKTsKLQotICBHU1RfREVCVUcgKCJ3YWl0aW5nIG9uZSB0aW1lIHVuaXQiKTsKLSAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCBOVUxMKTsKLSAgZ3N0X2Nsb2NrX2RlYnVnIChjbG9jayk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotCi0gIEdTVF9ERUJVRyAoIndhaXRpbmcgZm9yIHRoZSBuZXh0Iik7Ci0gIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0IChpZCwgTlVMTCk7Ci0gIGdzdF9jbG9ja19kZWJ1ZyAoY2xvY2spOwotICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKLQotICBHU1RfREVCVUcgKCJ3YWl0aW5nIGZvciB0aGUgbmV4dCBhc3luYyAlcCIsIGlkKTsKLSAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGlkLCBva19jYWxsYmFjaywgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDIgKiAxMDAwKSk7Ci0KLSAgR1NUX0RFQlVHICgid2FpdGluZyBzb21lIG1vcmUgZm9yIHRoZSBuZXh0IGFzeW5jICVwIiwgaWQpOwotICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoaWQsIG9rX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7Ci0gIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAoMiAqIDEwMDApKTsKLQotICBpZDIgPSBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkIChjbG9jaywgYmFzZSArIFRJTUVfVU5JVCwgVElNRV9VTklUIC8gMik7Ci0gIGZhaWxfdW5sZXNzIChpZDIgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgc2Vjb25kIHBlcmlvZGljIGlkIik7Ci0KLSAgR1NUX0RFQlVHICgid2FpdGluZyBzb21lIG1vcmUgZm9yIGFub3RoZXIgYXN5bmMgJXAiLCBpZDIpOwotICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoaWQyLCBva19jYWxsYmFjaywgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDIgKiAxMDAwKSk7Ci0KLSAgR1NUX0RFQlVHICgidW5zY2hlZHVsZSAlcCIsIGlkKTsKLSAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGlkKTsKLQotICAvKiBlbnRyeSBjYW5ub3QgYmUgdXNlZCBhZ2FpbiAqLwotICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoaWQsIGVycm9yX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQsCi0gICAgICAiV2FpdGluZyBkaWQgbm90IHJldHVybiBVTlNDSEVEVUxFRCIpOwotICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdCAoaWQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCwKLSAgICAgICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIFVOU0NIRURVTEVEIik7Ci0gIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAoMiAqIDEwMDApKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkKTsKLSAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGlkMik7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoaWQyKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXN5bmNfb3JkZXIpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tJRCBpZDEsIGlkMjsKLSAgR0xpc3QgKmNiX2xpc3QgPSBOVUxMLCAqbmV4dDsKLSAgR3N0Q2xvY2tUaW1lIGJhc2U7Ci0gIEdzdENsb2NrUmV0dXJuIHJlc3VsdDsKLQotICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBmYWlsX3VubGVzcyAoY2xvY2sgIT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0U3lzdGVtQ2xvY2siKTsKLQotICBnc3RfY2xvY2tfZGVidWcgKGNsb2NrKTsKLSAgYmFzZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotCi0gIGlkMSA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgMiAqIFRJTUVfVU5JVCk7Ci0gIGlkMiA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgMSAqIFRJTUVfVU5JVCk7Ci0gIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChpZDEsIHN0b3JlX2NhbGxiYWNrLCAmY2JfbGlzdCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDIgKiAxMDAwKSk7Ci0gIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChpZDIsIHN0b3JlX2NhbGxiYWNrLCAmY2JfbGlzdCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotICBnX3VzbGVlcCAoVElNRV9VTklUIC8gMTAwMCk7Ci0gIC8qIGF0IHRoaXMgcG9pbnQgYXQgbGVhc3Qgb25lIG9mIHRoZSB0aW1lcnMgc2hvdWxkIGhhdmUgdGltZWQgb3V0ICovCi0gIGdfbXV0ZXhfbG9jayAoJnN0b3JlX2xvY2spOwotICBmYWlsX3VubGVzcyAoY2JfbGlzdCAhPSBOVUxMLCAiZXhwZWN0ZWQgbm90aWZpY2F0aW9uIik7Ci0gIGZhaWxfdW5sZXNzIChjYl9saXN0LT5kYXRhID09IGlkMiwKLSAgICAgICJFeHBlY3RlZCBub3RpZmljYXRpb24gZm9yIGlkMiB0byBjb21lIGZpcnN0Iik7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc3RvcmVfbG9jayk7Ci0gIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAxMDAwKTsKLSAgZ19tdXRleF9sb2NrICgmc3RvcmVfbG9jayk7Ci0gIC8qIG5vdyBib3RoIHNob3VsZCBoYXZlIHRpbWVkIG91dCAqLwotICBuZXh0ID0gZ19saXN0X25leHQgKGNiX2xpc3QpOwotICBmYWlsX3VubGVzcyAobmV4dCAhPSBOVUxMLCAiZXhwZWN0ZWQgc2Vjb25kIG5vdGlmaWNhdGlvbiIpOwotICBmYWlsX3VubGVzcyAobmV4dC0+ZGF0YSA9PSBpZDEsICJNaXNzaW5nIG5vdGlmaWNhdGlvbiBmb3IgaWQxIik7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc3RvcmVfbG9jayk7Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZDEpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkMik7Ci0gIGdfbGlzdF9mcmVlIChjYl9saXN0KTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXN5bmNfb3JkZXJfc3RyZXNzX3Rlc3QpCi17Ci0jZGVmaW5lIEFMQVJNX0NPVU5UIDIwCi0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tJRCBpZFtBTEFSTV9DT1VOVF07Ci0gIEdMaXN0ICpjYl9saXN0ID0gTlVMTCwgKmNiX2xpc3RfaXQ7Ci0gIEdzdENsb2NrVGltZSBiYXNlOwotICBHc3RDbG9ja1JldHVybiByZXN1bHQ7Ci0gIHVuc2lnbmVkIGludCBpOwotCi0gIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGZhaWxfdW5sZXNzIChjbG9jayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RTeXN0ZW1DbG9jayIpOwotCi0gIGdzdF9jbG9ja19kZWJ1ZyAoY2xvY2spOwotICBiYXNlID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0KLSAgLyoga2VlcCBpbnNlcnRpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC4KLSAgICogV2UgZXhwZWN0IHRoZSBhbGFybSB0aHJlYWQgdG8ga2VlcCBkZXRlY3RpbmcgdGhlIG5ldyBlbnRyaWVzIGFuZCB0bwotICAgKiBzd2l0Y2ggdG8gd2FpdCBvbiB0aGUgZmlyc3QgZW50cnkgb24gdGhlIGxpc3QKLSAgICovCi0gIGZvciAoaSA9IEFMQVJNX0NPVU5UOyBpID4gMDsgLS1pKSB7Ci0gICAgaWRbaSAtIDFdID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyBpICogVElNRV9VTklUKTsKLSAgICByZXN1bHQgPQotICAgICAgICBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoaWRbaSAtIDFdLCBzdG9yZV9jYWxsYmFjaywgJmNiX2xpc3QsIE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotICB9Ci0KLSAgZ191c2xlZXAgKFRJTUVfVU5JVCAqIChBTEFSTV9DT1VOVCArIDEpIC8gMTAwMCk7Ci0gIC8qIGF0IHRoaXMgcG9pbnQgYWxsIHRoZSB0aW1lcnMgc2hvdWxkIGhhdmUgdGltZWQgb3V0ICovCi0gIGdfbXV0ZXhfbG9jayAoJnN0b3JlX2xvY2spOwotICBmYWlsX3VubGVzcyAoY2JfbGlzdCAhPSBOVUxMLCAiZXhwZWN0ZWQgbm90aWZpY2F0aW9uIik7Ci0gIGNiX2xpc3RfaXQgPSBjYl9saXN0OwotICAvKiBhbGFybXMgbXVzdCB0cmlnZ2VyIGluIG9yZGVyLgotICAgKiBXaWxsIGZhaWwgaWYgYWxhcm0gdGhyZWFkIGRpZCBub3QgcHJvcGVybHkgc3dpdGNoIHRvIHdhaXQgb24gZmlyc3QgZW50cnkKLSAgICogZnJvbSB0aGUgbGlzdAotICAgKi8KLSAgZm9yIChpID0gMDsgaSA8IEFMQVJNX0NPVU5UOyArK2kpIHsKLSAgICBmYWlsX3VubGVzcyAoY2JfbGlzdF9pdCAhPSBOVUxMLCAiTm8gbm90aWZpY2F0aW9uIHJlY2VpdmVkIGZvciBpZFslZF0iLCBpKTsKLSAgICBmYWlsX3VubGVzcyAoY2JfbGlzdF9pdC0+ZGF0YSA9PSBpZFtpXSwKLSAgICAgICAgIkV4cGVjdGVkIG5vdGlmaWNhdGlvbiBmb3IgaWRbJWRdIiwgaSk7Ci0gICAgY2JfbGlzdF9pdCA9IGdfbGlzdF9uZXh0IChjYl9saXN0X2l0KTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJnN0b3JlX2xvY2spOwotCi0gIGZvciAoaSA9IDA7IGkgPCBBTEFSTV9DT1VOVDsgKytpKQotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoaWRbaV0pOwotICBnX2xpc3RfZnJlZSAoY2JfbGlzdCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0cnVjdCB0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fZGF0YQotewotICBHTXV0ZXggbG9jazsKLQotICBHc3RDbG9ja0lEIHN5bmNfaWQ7Ci0gIEdzdENsb2NrSUQgc3luY19pZDI7Ci0KLSAgR3N0Q2xvY2tJRCBhc3luY19pZDsKLSAgR3N0Q2xvY2tJRCBhc3luY19pZDI7Ci0gIEdzdENsb2NrSUQgYXN5bmNfaWQzOwotfTsKLQotc3RhdGljIGdib29sZWFuCi10ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fY2IgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSB0aW1lLAotICAgIEdzdENsb2NrSUQgaWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgc3RydWN0IHRlc3RfYXN5bmNfc3luY19pbnRlcmFjdGlvbl9kYXRhICp0ZCA9Ci0gICAgICAoc3RydWN0IHRlc3RfYXN5bmNfc3luY19pbnRlcmFjdGlvbl9kYXRhICopICh1c2VyX2RhdGEpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnRkLT5sb2NrKTsKLSAgLyogVGhlIGZpcnN0IGFzeW5jIGNhbGxiYWNrIGlzIGlnbm9yZWQgKi8KLSAgaWYgKGlkID09IHRkLT5hc3luY19pZCkKLSAgICBnb3RvIG91dDsKLQotICBpZiAoaWQgIT0gdGQtPmFzeW5jX2lkMiAmJiBpZCAhPSB0ZC0+YXN5bmNfaWQzKQotICAgIGdvdG8gb3V0OwotCi0gIC8qIFVuc2NoZWR1bGUgdGhlIHN5bmMgY2FsbGJhY2sgKi8KLSAgaWYgKGlkID09IHRkLT5hc3luY19pZDMpIHsKLSAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAodGQtPnN5bmNfaWQpOwotICAgIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlICh0ZC0+YXN5bmNfaWQyKTsKLSAgfQotb3V0OgotICBnX211dGV4X3VubG9jayAoJnRkLT5sb2NrKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hc3luY19zeW5jX2ludGVyYWN0aW9uKQotewotICAvKiBUaGlzIHRlc3Qgc2NoZWR1bGVzIGFuIGFzeW5jIGNhbGxiYWNrLCB0aGVuIGJlZm9yZSBpdCBjb21wbGV0ZXMsIHNjaGVkdWxlcwotICAgKiBhbiBlYXJsaWVyIGFzeW5jIGNhbGxiYWNrLCBhbmQgcXVpY2tseSB1bnNjaGVkdWxlcyB0aGUgZmlyc3QsIGFuZCBpbnNlcnRzCi0gICAqIGEgVEhJUkQgZXZlbiBlYXJsaWVyIGFzeW5jIGNhbGxiYWNrLiBJdCB0aGVuIGF0dGVtcHRzIHRvIHdhaXQgb24gYQotICAgKiBzeW5jIGNsb2NrIElELiBXaGlsZSB0aGF0J3Mgc2xlZXBpbmcsIHRoZSAzcmQgYXN5bmMgY2FsbGJhY2sgc2hvdWxkIGZpcmUKLSAgICogYW5kIHVuc2NoZWR1bGUgaXQuIFRoaXMgdGVzdHMgZm9yIHByb2JsZW1zIHdpdGggdW5zY2hlZHVsaW5nIGFzeW5jIGFuZAotICAgKiBzeW5jIGNhbGxiYWNrcyBvbiB0aGUgc3lzdGVtIGNsb2NrLiAqLwotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrUmV0dXJuIHJlc3VsdDsKLSAgR3N0Q2xvY2tUaW1lIGJhc2U7Ci0gIEdzdENsb2NrVGltZURpZmYgaml0dGVyOwotICBzdHJ1Y3QgdGVzdF9hc3luY19zeW5jX2ludGVyYWN0aW9uX2RhdGEgdGQ7Ci0gIGludCBpOwotCi0gIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGZhaWxfdW5sZXNzIChjbG9jayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RTeXN0ZW1DbG9jayIpOwotCi0gIGdfbXV0ZXhfaW5pdCAoJnRkLmxvY2spOwotCi0gIGZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7Ci0gICAgZ3N0X2Nsb2NrX2RlYnVnIChjbG9jayk7Ci0gICAgYmFzZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgIGdfbXV0ZXhfbG9jayAoJnRkLmxvY2spOwotICAgIHRkLmFzeW5jX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIGJhc2UgKyA0MCAqIEdTVF9NU0VDT05EKTsKLSAgICB0ZC5hc3luY19pZDIgPQotICAgICAgICBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgYmFzZSArIDMwICogR1NUX01TRUNPTkQpOwotICAgIHRkLmFzeW5jX2lkMyA9Ci0gICAgICAgIGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBiYXNlICsgMjAgKiBHU1RfTVNFQ09ORCk7Ci0gICAgdGQuc3luY19pZDIgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgYmFzZSArIDEwICogR1NUX01TRUNPTkQpOwotICAgIHRkLnN5bmNfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgYmFzZSArIDUwICogR1NUX01TRUNPTkQpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmdGQubG9jayk7Ci0KLSAgICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAodGQuYXN5bmNfaWQsCi0gICAgICAgIHRlc3RfYXN5bmNfc3luY19pbnRlcmFjdGlvbl9jYiwgJnRkLCBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKLQotICAgIC8qIFdhaXQgMTBtcywgdGhlbiB1bnNjaGVkdWxlIGFzeW5jX2lkIGFuZCBzY2hlZHVsZSBhc3luY19pZDIgKi8KLSAgICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdCAodGQuc3luY19pZDIsICZqaXR0ZXIpOwotICAgIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LIHx8IHJlc3VsdCA9PSBHU1RfQ0xPQ0tfRUFSTFksCi0gICAgICAgICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIG9yIEVBUkxZIik7Ci0gICAgLyogYXN5bmNfaWQyIGlzIGVhcmxpZXIgdGhhbiBhc3luY19pZCAtIHNob3VsZCBiZWNvbWUgaGVhZCBvZiB0aGUgcXVldWUgKi8KLSAgICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAodGQuYXN5bmNfaWQyLAotICAgICAgICB0ZXN0X2FzeW5jX3N5bmNfaW50ZXJhY3Rpb25fY2IsICZ0ZCwgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7Ci0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKHRkLmFzeW5jX2lkKTsKLQotICAgIC8qIGFzeW5jX2lkMyBpcyBlYXJsaWVyIHRoYW4gYXN5bmNfaWQyIC0gc2hvdWxkIGJlY29tZSBoZWFkIG9mIHRoZSBxdWV1ZSAqLwotICAgIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0X2FzeW5jICh0ZC5hc3luY19pZDMsCi0gICAgICAgIHRlc3RfYXN5bmNfc3luY19pbnRlcmFjdGlvbl9jYiwgJnRkLCBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAocmVzdWx0ID09IEdTVF9DTE9DS19PSywgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gT0siKTsKLQotICAgIC8qIFdoaWxlIHRoaXMgaXMgc2xlZXBpbmcsIHRoZSBhc3luYzMgaWQgc2hvdWxkIGZpcmUgYW5kIHVuc2NoZWR1bGUgaXQgKi8KLSAgICByZXN1bHQgPSBnc3RfY2xvY2tfaWRfd2FpdCAodGQuc3luY19pZCwgJmppdHRlcik7Ci0gICAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQgfHwgcmVzdWx0ID09IEdTVF9DTE9DS19FQVJMWSwKLSAgICAgICAgIldhaXRpbmcgZGlkIG5vdCByZXR1cm4gVU5TQ0hFRFVMRUQgKHdhcyAlZCkiLCByZXN1bHQpOwotCi0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKHRkLmFzeW5jX2lkMyk7Ci0gICAgZ19tdXRleF9sb2NrICgmdGQubG9jayk7Ci0KLSAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHRkLnN5bmNfaWQpOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAodGQuc3luY19pZDIpOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAodGQuYXN5bmNfaWQpOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAodGQuYXN5bmNfaWQyKTsKLSAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHRkLmFzeW5jX2lkMyk7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZ0ZC5sb2NrKTsKLSAgfQotCi0gIGdfbXV0ZXhfY2xlYXIgKCZ0ZC5sb2NrKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BlcmlvZGljX211bHRpKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWRfYXN5bmM7Ci0gIEdzdENsb2NrVGltZSBiYXNlOwotICBHc3RDbG9ja1JldHVybiByZXN1bHQ7Ci0gIGdib29sZWFuIGdvdF9jYWxsYmFjayA9IEZBTFNFOwotCi0gIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGZhaWxfdW5sZXNzIChjbG9jayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBpbnN0YW5jZSBvZiBHc3RTeXN0ZW1DbG9jayIpOwotCi0gIGdzdF9jbG9ja19kZWJ1ZyAoY2xvY2spOwotICBiYXNlID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0KLSAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkIChjbG9jaywgYmFzZSArIFRJTUVfVU5JVCwgVElNRV9VTklUKTsKLSAgZ3N0X2Nsb2NrX2lkX3dhaXQgKGNsb2NrX2lkLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spID49IGJhc2UgKyBUSU1FX1VOSVQpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykgPCBiYXNlICsgMiAqIFRJTUVfVU5JVCk7Ci0KLSAgLyogbm93IHBlcmZvcm0gYSBjb25jdXJyZW50IHdhaXQgYW5kIHdhaXRfYXN5bmMgKi8KLQotICBjbG9ja19pZF9hc3luYyA9Ci0gICAgICBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkIChjbG9jaywgYmFzZSArIFRJTUVfVU5JVCwgVElNRV9VTklUKTsKLSAgcmVzdWx0ID0KLSAgICAgIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChjbG9ja19pZF9hc3luYywgbm90aWZ5X2NhbGxiYWNrLCAmZ290X2NhbGxiYWNrLAotICAgICAgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiQXN5bmMgd2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotCi0gIHJlc3VsdCA9IGdzdF9jbG9ja19pZF93YWl0IChjbG9ja19pZCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXN1bHQgPT0gR1NUX0NMT0NLX09LLCAiV2FpdGluZyBkaWQgbm90IHJldHVybiBPSyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykgPj0gYmFzZSArIDIgKiBUSU1FX1VOSVQpOwotICAvKiBnaXZlIHRoZSBhc3luYyB0aHJlYWQgc29tZSB0aW1lIHRvIGNhbGwgb3VyIGNhbGxiYWNrOiAqLwotICBnX3VzbGVlcCAoVElNRV9VTklUIC8gKDEwICogMTAwMCkpOwotICBmYWlsX3VubGVzcyAoZ290X2NhbGxiYWNrID09IFRSVUUsICJnb3Qgbm8gYXN5bmMgY2FsbGJhY2sgKDEpIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSA8IGJhc2UgKyAzICogVElNRV9VTklUKTsKLSAgZ290X2NhbGxiYWNrID0gRkFMU0U7Ci0KLSAgcmVzdWx0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGNsb2NrX2lkLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlc3VsdCA9PSBHU1RfQ0xPQ0tfT0ssICJXYWl0aW5nIGRpZCBub3QgcmV0dXJuIE9LIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSA+PSBiYXNlICsgMyAqIFRJTUVfVU5JVCk7Ci0gIC8qIGdpdmUgdGhlIGFzeW5jIHRocmVhZCBzb21lIHRpbWUgdG8gY2FsbCBvdXIgY2FsbGJhY2s6ICovCi0gIGdfdXNsZWVwIChUSU1FX1VOSVQgLyAoMTAgKiAxMDAwKSk7Ci0gIGZhaWxfdW5sZXNzIChnb3RfY2FsbGJhY2sgPT0gVFJVRSwgImdvdCBubyBhc3luYyBjYWxsYmFjayAoMikiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spIDwgYmFzZSArIDQgKiBUSU1FX1VOSVQpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoY2xvY2tfaWRfYXN5bmMpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrX2lkX2FzeW5jKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RpZmYpCi17Ci0gIEdzdENsb2NrVGltZSB0aW1lMVtdID0geyAwLCAoR3N0Q2xvY2tUaW1lKSAtIDEsIDAsIDEsIDIgKiBHU1RfU0VDT05ELAotICAgIChHc3RDbG9ja1RpbWUpIC0gR1NUX1NFQ09ORCwgKEdzdENsb2NrVGltZSkgLSBHU1RfU0VDT05ECi0gIH07Ci0gIEdzdENsb2NrVGltZSB0aW1lMltdID0KLSAgICAgIHsgMCwgMSwgMSwgMCwgMSAqIEdTVF9TRUNPTkQsIChHc3RDbG9ja1RpbWUpIC0gR1NUX1NFQ09ORCwgR1NUX1NFQ09ORCB9OwotICBHc3RDbG9ja1RpbWVEaWZmIGRbXSA9IHsgMCwgMiwgMSwgLTEsIC1HU1RfU0VDT05ELCAwLCAyICogR1NUX1NFQ09ORCB9OwotICBndWludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGQpOyBpKyspIHsKLSAgICBmYWlsX2lmIChkW2ldICE9IEdTVF9DTE9DS19ESUZGICh0aW1lMVtpXSwgdGltZTJbaV0pKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgaWYgYSBibG9ja2luZyB3YWl0LCB1bmJsb2NrZWQgYnkgYW4gYXN5bmMgZW50cnkgY29udGludWVzIHRvIGJlCi0gKiBzY2hlZHVsZWQgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tJRCBpZDsKLSAgR3N0Q2xvY2tUaW1lRGlmZiBqaXR0ZXI7Ci0gIEdzdENsb2NrUmV0dXJuIHJldDsKLX0gTWl4ZWRJbmZvOwotCi1zdGF0aWMgZ3BvaW50ZXIKLW1peGVkX3RocmVhZCAoTWl4ZWRJbmZvICogaW5mbykKLXsKLSAgaW5mby0+cmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGluZm8tPmlkLCAmaW5mby0+aml0dGVyKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotbWl4ZWRfYXN5bmNfY2IgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSB0aW1lLAotICAgIEdzdENsb2NrSUQgaWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21peGVkKQotewotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICBNaXhlZEluZm8gaW5mbzsKLSAgR3N0Q2xvY2tUaW1lIGJhc2U7Ci0gIEdzdENsb2NrSUQgaWQ7Ci0KLSAgaW5mby5jbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBmYWlsX3VubGVzcyAoaW5mby5jbG9jayAhPSBOVUxMLAotICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgaW5zdGFuY2Ugb2YgR3N0U3lzdGVtQ2xvY2siKTsKLQotICAvKiBnZXQgY3VycmVudCB0aW1lIG9mIHRoZSBjbG9jayBhcyBiYXNlIHRpbWUgKi8KLSAgYmFzZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoaW5mby5jbG9jayk7Ci0KLSAgLyogY3JlYXRlIGVudHJ5IHRvIHdhaXQgZm9yIDEgc2Vjb25kICovCi0gIGluZm8uaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChpbmZvLmNsb2NrLCBiYXNlICsgR1NUX1NFQ09ORCk7Ci0KLSAgLyogbWFrZSBhbmQgc3RhcnQgYW4gZW50cnkgdGhhdCBpcyBzY2hlZHVsZWQgZXZlcnkgMTBtcyAqLwotICBpZCA9IGdzdF9jbG9ja19uZXdfcGVyaW9kaWNfaWQgKGluZm8uY2xvY2ssIGJhc2UsIDEwICogR1NUX01TRUNPTkQpOwotCi0gIC8qIHN0YXJ0IHdhaXRpbmcgZm9yIHRoZSBlbnRyeSAqLwotICB0aHJlYWQgPQotICAgICAgZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIChHVGhyZWFkRnVuYykgbWl4ZWRfdGhyZWFkLCAmaW5mbywgJmVycm9yKTsKLSAgZmFpbF91bmxlc3MgKGVycm9yID09IE5VTEwsICJlcnJvciBjcmVhdGluZyB0aHJlYWQiKTsKLSAgZmFpbF91bmxlc3MgKHRocmVhZCAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQiKTsKLQotICAvKiB3YWl0IGhhbGYgYSBzZWNvbmQgc28gd2UgYXJlIHN1cmUgdG8gYmUgaW4gdGhlIHRocmVhZCAqLwotICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMgLyAyKTsKLQotICAvKiBzdGFydCBzY2hlZHVsaW5nIHRoZSBlbnRyeSAqLwotICBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoaWQsIG1peGVkX2FzeW5jX2NiLCBOVUxMLCBOVUxMKTsKLQotICAvKiB3YWl0IGZvciB0aHJlYWQgdG8gZmluaXNoICovCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZCk7Ci0gIC8qIGVudHJ5IG11c3QgaGF2ZSB0aW1lZCBvdXQgY29ycmVjdGx5ICovCi0gIGZhaWxfdW5sZXNzIChpbmZvLnJldCA9PSBHU1RfQ0xPQ0tfT0ssICJjbG9jayByZXR1cm4gd2FzICVkIiwgaW5mby5yZXQpOwotCi0gIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChpZCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGluZm8uaWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChpbmZvLmNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXRlc3RfYXN5bmNfZnVsbF9zbGF2ZV9jYWxsYmFjayAoR3N0Q2xvY2sgKiBtYXN0ZXIsIEdzdENsb2NrVGltZSB0aW1lLAotICAgIEdzdENsb2NrSUQgaWQsIEdzdENsb2NrICogY2xvY2spCi17Ci0gIEdzdENsb2NrVGltZSBzdGltZSwgbXRpbWU7Ci0gIGdkb3VibGUgcl9zcXVhcmVkOwotCi0gIC8qIG5vdGlmeSB0aGUgdGVzdCBjYXNlIHRoYXQgd2Ugc3RhcnRlZCAqLwotICBHU1RfSU5GTyAoImNhbGxiYWNrIHN0YXJ0ZWQiKTsKLSAgZ19tdXRleF9sb2NrICgmYWZfbG9jayk7Ci0gIGdfY29uZF9zaWduYWwgKCZhZl9jb25kKTsKLQotICAvKiB3YWl0IGZvciB0aGUgdGVzdCBjYXNlIHRvIHVucmVmICJjbG9jayIgYW5kIHNpZ25hbCAqLwotICBHU1RfSU5GTyAoIndhaXRpbmcgZm9yIHRlc3QgY2FzZSB0byBzaWduYWwiKTsKLSAgZ19jb25kX3dhaXQgKCZhZl9jb25kLCAmYWZfbG9jayk7Ci0KLSAgc3RpbWUgPSBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKGNsb2NrKTsKLSAgbXRpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKG1hc3Rlcik7Ci0KLSAgZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbiAoY2xvY2ssIHN0aW1lLCBtdGltZSwgJnJfc3F1YXJlZCk7Ci0KLSAgZ19jb25kX3NpZ25hbCAoJmFmX2NvbmQpOwotICBnX211dGV4X3VubG9jayAoJmFmX2xvY2spOwotICBHU1RfSU5GTyAoImNhbGxiYWNrIGZpbmlzaGVkIik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FzeW5jX2Z1bGwpCi17Ci0gIEdzdENsb2NrICptYXN0ZXIsICpzbGF2ZTsKLSAgR3N0Q2xvY2tJRCAqY2xvY2tpZDsKLQotICAvKiBjcmVhdGUgbWFzdGVyIGFuZCBzbGF2ZSAqLwotICBtYXN0ZXIgPQotICAgICAgZ19vYmplY3RfbmV3IChHU1RfVFlQRV9TWVNURU1fQ0xPQ0ssICJuYW1lIiwgIlRlc3RDbG9ja01hc3RlciIsIE5VTEwpOwotICBzbGF2ZSA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCAibmFtZSIsICJUZXN0Q2xvY2tNYXN0ZXIiLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2xhdmUsIEdTVF9DTE9DS19GTEFHX0NBTl9TRVRfTUFTVEVSKTsKLSAgZ19vYmplY3Rfc2V0IChzbGF2ZSwgInRpbWVvdXQiLCA1MCAqIEdTVF9NU0VDT05ELCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX09CSkVDVF9SRUZDT1VOVCAobWFzdGVyKSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9PQkpFQ1RfUkVGQ09VTlQgKHNsYXZlKSA9PSAxKTsKLQotICAvKiByZWdpc3RlciBhIHBlcmlvZGljIHNob3Qgb24gdGhlIG1hc3RlciB0byBjYWxpYnJhdGUgdGhlIHNsYXZlICovCi0gIGdfbXV0ZXhfbG9jayAoJmFmX2xvY2spOwotICBjbG9ja2lkID0gZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAobWFzdGVyLAotICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lIChtYXN0ZXIpLCBnc3RfY2xvY2tfZ2V0X3RpbWVvdXQgKHNsYXZlKSk7Ci0gIGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChjbG9ja2lkLAotICAgICAgKEdzdENsb2NrQ2FsbGJhY2spIHRlc3RfYXN5bmNfZnVsbF9zbGF2ZV9jYWxsYmFjaywKLSAgICAgIGdzdF9vYmplY3RfcmVmIChzbGF2ZSksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0KLSAgLyogd2FpdCBmb3IgdGhlIHNob3QgdG8gYmUgZmlyZWQgYW5kIHRlc3RfYXN5bmNfZnVsbF9zbGF2ZV9jYWxsYmFjayB0byBiZQotICAgKiBjYWxsZWQgKi8KLSAgR1NUX0lORk8gKCJ3YWl0aW5nIGZvciB0aGUgc2xhdmUgY2FsbGJhY2sgdG8gc3RhcnQiKTsKLSAgZ19jb25kX3dhaXQgKCZhZl9jb25kLCAmYWZfbG9jayk7Ci0gIEdTVF9JTkZPICgic2xhdmUgY2FsbGJhY2sgcnVubmluZywgdW5yZWZmaW5nIHNsYXZlIik7Ci0KLSAgLyogdW5yZWYgdGhlIHNsYXZlIGNsb2NrIHdoaWxlIHRoZSBzbGF2ZV9jYWxsYmFjayBpcyBydW5uaW5nLiBUaGlzIHNob3VsZCBiZQotICAgKiBzYWZlIHNpbmNlIHRoZSBtYXN0ZXIgY2xvY2sgbm93IHN0b3JlcyBhIHJlZiB0byB0aGUgc2xhdmUgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoc2xhdmUpOwotCi0gIC8qIHVucmVmIHRoZSBjbG9jayBlbnRyeS4gVGhpcyBzaG91bGQgYmUgc2FmZSBhcyB3ZWxsIHNpbmNlIHRoZSBjbG9jayB0aHJlYWQKLSAgICogcmVmcyB0aGUgZW50cnkgYmVmb3JlIGV4ZWN1dGluZyBpdCAqLwotICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoY2xvY2tpZCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tpZCk7Ci0KLSAgLyogc2lnbmFsIGFuZCB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gY29tcGxldGUgKi8KLSAgZ19jb25kX3NpZ25hbCAoJmFmX2NvbmQpOwotCi0gIEdTVF9JTkZPICgid2FpdGluZyBmb3IgY2FsbGJhY2sgdG8gZmluaXNoIik7Ci0gIGdfY29uZF93YWl0ICgmYWZfY29uZCwgJmFmX2xvY2spOwotICBHU1RfSU5GTyAoImNhbGxiYWNrIGZpbmlzaGVkIik7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmYWZfbG9jayk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobWFzdGVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZXNvbHV0aW9uKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrVGltZSBub3dfdCwgcHJldl90LCByZXNvbHV0aW9uOwotICBpbnQgaTsKLQotICBub3dfdCA9IHByZXZfdCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGNsb2NrID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGZhaWxfdW5sZXNzIChjbG9jayAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBkZWZhdWx0IHN5c3RlbSBjbG9jayIpOwotICByZXNvbHV0aW9uID0gZ3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uIChjbG9jayk7Ci0gIGZhaWxfdW5sZXNzIChyZXNvbHV0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewotICAgIG5vd190ID0gZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChjbG9jayk7Ci0gICAgZmFpbF91bmxlc3MgKG5vd190ICE9IEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgIGlmIChwcmV2X3QgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgR3N0Q2xvY2tUaW1lIGRpZmY7Ci0gICAgICBmYWlsX3VubGVzcyAobm93X3QgPj0gcHJldl90KTsKLSAgICAgIGRpZmYgPSBub3dfdCAtIHByZXZfdDsKLSAgICAgIGZhaWxfdW5sZXNzIChkaWZmID09IDAgfHwgZGlmZiA+PSByZXNvbHV0aW9uKTsKLSAgICB9Ci0gICAgcHJldl90ID0gbm93X3Q7Ci0gICAgZ190aHJlYWRfeWllbGQgKCk7Ci0gIH0KLSAgZ19vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgY2xvY2sgPSBOVUxMOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdUaHJlYWQgKnRocmVhZF93YWl0OwotICBHVGhyZWFkICp0aHJlYWRfdW5zY2hlZHVsZTsKLSAgR011dGV4IGxvY2s7Ci0gIGdib29sZWFuIHJ1bm5pbmc7Ci0gIEdzdENsb2NrSUQgaWQ7Ci0gIGdib29sZWFuIHVuc2NoZWR1bGU7Ci0gIGdpbnQzMiB0aW1lX29mZnNldF9taW47Ci0gIGdpbnQzMiB0aW1lX29mZnNldF9tYXg7Ci0gIGdib29sZWFuIGRvbnRfdW5zY2hlZHVsZV9wb3NpdGl2ZV9vZmZzZXQ7Ci19IFdhaXRVbnNjaGVkdWxlRGF0YTsKLQotc3RhdGljIGdwb2ludGVyCi1zaW5nbGVfc2hvdF93YWl0X3RocmVhZF9mdW5jIChncG9pbnRlciBkYXRhKQotewotICBXYWl0VW5zY2hlZHVsZURhdGEgKmQgPSBkYXRhOwotICBHc3RDbG9jayAqY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLQotICB3aGlsZSAoZC0+cnVubmluZykgewotICAgIEdzdENsb2NrVGltZSBub3c7Ci0gICAgZ2ludCBvZmZzZXQ7Ci0gICAgR3N0Q2xvY2tJRCBpZDsKLQotICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgIG9mZnNldCA9IGdfcmFuZG9tX2ludF9yYW5nZSAoZC0+dGltZV9vZmZzZXRfbWluLCBkLT50aW1lX29mZnNldF9tYXgpOwotCi0gICAgZ19tdXRleF9sb2NrICgmZC0+bG9jayk7Ci0gICAgZC0+dW5zY2hlZHVsZSA9IGQtPmRvbnRfdW5zY2hlZHVsZV9wb3NpdGl2ZV9vZmZzZXQgPyBvZmZzZXQgPCAwIDogVFJVRTsKLSAgICBpZCA9IGQtPmlkID0KLSAgICAgICAgZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIG5vdyArIChHc3RDbG9ja1RpbWUpIG9mZnNldCk7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZkLT5sb2NrKTsKLQotICAgIGZhaWxfdW5sZXNzIChpZCAhPSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBzaW5nbGUgc2hvdCBpZCIpOwotCi0gICAgZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCBOVUxMKTsKLQotICAgIGdfbXV0ZXhfbG9jayAoJmQtPmxvY2spOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICAgIGQtPmlkID0gTlVMTDsKLSAgICBnX211dGV4X3VubG9jayAoJmQtPmxvY2spOwotICB9Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdwb2ludGVyCi11bnNjaGVkdWxlX3RocmVhZF9mdW5jIChncG9pbnRlciBkYXRhKQotewotICBXYWl0VW5zY2hlZHVsZURhdGEgKmQgPSBkYXRhOwotCi0gIHdoaWxlIChkLT5ydW5uaW5nKSB7Ci0gICAgZ19tdXRleF9sb2NrICgmZC0+bG9jayk7Ci0gICAgaWYgKGQtPmlkICYmIGQtPnVuc2NoZWR1bGUpIHsKLSAgICAgIGdfdGhyZWFkX3lpZWxkICgpOwotICAgICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGQtPmlkKTsKLSAgICB9Ci0gICAgZ19tdXRleF91bmxvY2sgKCZkLT5sb2NrKTsKLSAgICBnX3RocmVhZF95aWVsZCAoKTsKLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJlc3NfY2xlYW51cF91bnNjaGVkdWxlKQotewotICBXYWl0VW5zY2hlZHVsZURhdGEgZGF0YVs1MF07Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChkYXRhKTsgaSsrKSB7Ci0gICAgV2FpdFVuc2NoZWR1bGVEYXRhICpkID0gJmRhdGFbaV07Ci0KLSAgICAvKiBEb24ndCB1bnNjaGVkdWxlIHdhaXRzIHdpdGggcG9zaXRpdmUgb2Zmc2V0cyBpbiBvcmRlciB0byB0cmlnZ2VyCi0gICAgICogZ3N0X3N5c3RlbV9jbG9ja193YWl0X3dha2V1cCgpICovCi0gICAgZC0+ZG9udF91bnNjaGVkdWxlX3Bvc2l0aXZlX29mZnNldCA9IFRSVUU7Ci0gICAgLyogT3ZlcndlaWdodCBvZiBuZWdhdGl2ZSBvZmZzZXRzIGluIG9yZGVyIHRvIHRyaWdnZXIgR1NUX0NMT0NLX0VBUkxZIG1vcmUKLSAgICAgKiBmcmVxdWVudGx5ICovCi0gICAgZC0+dGltZV9vZmZzZXRfbWluID0gLUdTVF9NU0VDT05EOwotICAgIGQtPnRpbWVfb2Zmc2V0X21heCA9IEdTVF9NU0VDT05EIC8gMTA7Ci0KLSAgICAvKiBJbml0aWFsaXplIHRlc3QgKi8KLSAgICBkLT5pZCA9IE5VTEw7Ci0gICAgZC0+cnVubmluZyA9IFRSVUU7Ci0gICAgZ19tdXRleF9pbml0ICgmZC0+bG9jayk7Ci0gICAgZC0+dGhyZWFkX3dhaXQgPSBnX3RocmVhZF9uZXcgKCJ3YWl0Iiwgc2luZ2xlX3Nob3Rfd2FpdF90aHJlYWRfZnVuYywgZCk7Ci0gICAgZC0+dGhyZWFkX3Vuc2NoZWR1bGUgPSBnX3RocmVhZF9uZXcgKCJ1bnNjaGVkdWxlIiwgdW5zY2hlZHVsZV90aHJlYWRfZnVuYywKLSAgICAgICAgZCk7Ci0gIH0KLQotICAvKiBUZXN0IGR1cmF0aW9uICovCi0gIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyk7Ci0KLSAgLyogU3RvcCBhbmQgZnJlZSB0ZXN0IGRhdGEgKi8KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZGF0YSk7IGkrKykgewotICAgIFdhaXRVbnNjaGVkdWxlRGF0YSAqZCA9ICZkYXRhW2ldOwotICAgIGQtPnJ1bm5pbmcgPSBGQUxTRTsKLSAgICBnX3RocmVhZF9qb2luIChkLT50aHJlYWRfd2FpdCk7Ci0gICAgZ190aHJlYWRfam9pbiAoZC0+dGhyZWFkX3Vuc2NoZWR1bGUpOwotICAgIGdfbXV0ZXhfY2xlYXIgKCZkLT5sb2NrKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RyZXNzX3Jlc2NoZWR1bGUpCi17Ci0gIFdhaXRVbnNjaGVkdWxlRGF0YSBkYXRhWzUwXTsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGRhdGEpOyBpKyspIHsKLSAgICBXYWl0VW5zY2hlZHVsZURhdGEgKmQgPSAmZGF0YVtpXTsKLQotICAgIC8qIFRyeSB0byB1bnNjaGVkdWxlIGFsbCB3YWl0cyAqLwotICAgIGQtPmRvbnRfdW5zY2hlZHVsZV9wb3NpdGl2ZV9vZmZzZXQgPSBGQUxTRTsKLSAgICAvKiBTbWFsbCBwb3NpdGl2ZSBvZmZzZXRzIGluIG9yZGVyIHRvIGhhdmUgYm90aCBuZWdhdGl2ZSBhbmQgcG9zaXRpdmUKLSAgICAgKiBkaWZmcyB3aGVuIGEgcmVzY2hlZHVsZSBpcyBuZWVkZWQuICovCi0gICAgZC0+dGltZV9vZmZzZXRfbWluID0gMDsKLSAgICBkLT50aW1lX29mZnNldF9tYXggPSBHU1RfTVNFQ09ORDsKLQotICAgIGQtPmlkID0gTlVMTDsKLSAgICBkLT5ydW5uaW5nID0gVFJVRTsKLSAgICBnX211dGV4X2luaXQgKCZkLT5sb2NrKTsKLSAgICBkLT50aHJlYWRfd2FpdCA9IGdfdGhyZWFkX25ldyAoIndhaXQiLCBzaW5nbGVfc2hvdF93YWl0X3RocmVhZF9mdW5jLCBkKTsKLSAgICBkLT50aHJlYWRfdW5zY2hlZHVsZSA9IGdfdGhyZWFkX25ldyAoInVuc2NoZWR1bGUiLCB1bnNjaGVkdWxlX3RocmVhZF9mdW5jLAotICAgICAgICBkKTsKLSAgfQotCi0gIC8qIFRlc3QgZHVyYXRpb24gKi8KLSAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDKTsKLQotICAvKiBTdG9wIGFuZCBmcmVlIHRlc3QgZGF0YSAqLwotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChkYXRhKTsgaSsrKSB7Ci0gICAgV2FpdFVuc2NoZWR1bGVEYXRhICpkID0gJmRhdGFbaV07Ci0gICAgZC0+cnVubmluZyA9IEZBTFNFOwotICAgIGdfdGhyZWFkX2pvaW4gKGQtPnRocmVhZF93YWl0KTsKLSAgICBnX3RocmVhZF9qb2luIChkLT50aHJlYWRfdW5zY2hlZHVsZSk7Ci0gICAgZ19tdXRleF9jbGVhciAoJmQtPmxvY2spOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X3N5c3RlbWNsb2NrX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFN5c3RlbUNsb2NrIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoIndhaXRpbmciKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JhbmdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpZ25lZG5lc3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luZ2xlX3Nob3QpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGVyaW9kaWNfc2hvdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wZXJpb2RpY19tdWx0aSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19vcmRlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19vcmRlcl9zdHJlc3NfdGVzdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hc3luY19zeW5jX2ludGVyYWN0aW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RpZmYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWl4ZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXN5bmNfZnVsbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXRfZGVmYXVsdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZXNvbHV0aW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cmVzc19jbGVhbnVwX3Vuc2NoZWR1bGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RyZXNzX3Jlc2NoZWR1bGUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X3N5c3RlbWNsb2NrKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3R0YWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E1ZTVjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0dGFnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBPdHRlIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLyogbXVsdGlwbGUgYXJ0aXN0cyBhcmUgcG9zc2libGUgKHVuZml4ZWQpICovCi0jZGVmaW5lIFVUQUcgR1NUX1RBR19BUlRJU1QKLSNkZWZpbmUgVU5GSVhFRDEgIkJyaXRuZXkgU3BlYXJzIgotI2RlZmluZSBVTkZJWEVEMiAiRXZhbmVzY2VuY2UiCi0jZGVmaW5lIFVORklYRUQzICJBQy9EQyIKLSNkZWZpbmUgVU5GSVhFRDQgIlRoZSBQcm9kaWd5IgotCi0vKiBsaWNlbnNlIGlzIGZpeGVkICovCi0jZGVmaW5lIEZUQUcgR1NUX1RBR19MSUNFTlNFCi0jZGVmaW5lIEZJWEVEMSAiTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCi0jZGVmaW5lIEZJWEVEMiAiTWljcm9zb2Z0IEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50IgotI2RlZmluZSBGSVhFRDMgIk1vemlsbGEgUHVibGljIExpY2Vuc2UiCi0jZGVmaW5lIEZJWEVENCAiUHVibGljIERvbWFpbiIKLQotLyogY2hlY2tzIHRoYXQgYSB0YWcgY29udGFpbnMgdGhlIGdpdmVuIHZhbHVlcyBhbmQgbm90IG1vcmUgdmFsdWVzICovCi1zdGF0aWMgdm9pZAotY2hlY2tfdGFncyAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLCBjb25zdCBnY2hhciAqIHZhbHVlLAotICAgIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICBnY2hhciAqc3RyOwotICBndWludCBpID0gMDsKLQotICB2YV9zdGFydCAoYXJncywgdmFsdWUpOwotICB3aGlsZSAodmFsdWUgIT0gTlVMTCkgewotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleCAobGlzdCwgdGFnLCBpLCAmc3RyKSk7Ci0gICAgZmFpbF91bmxlc3MgKHN0cmNtcCAodmFsdWUsIHN0cikgPT0gMCk7Ci0gICAgZ19mcmVlIChzdHIpOwotCi0gICAgdmFsdWUgPSB2YV9hcmcgKGFyZ3MsIGdjaGFyICopOwotICAgIGkrKzsKLSAgfQotICBmYWlsX3VubGVzcyAoaSA9PSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChsaXN0LCB0YWcpKTsKLSAgdmFfZW5kIChhcmdzKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX3RhZ3NfZW1wdHkgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0KQotewotICBHU1RfREVCVUcgKCJ0YWdsaXN0OiAlIiBHU1RfUFRSX0ZPUk1BVCwgbGlzdCk7Ci0gIGZhaWxfdW5sZXNzICgobGlzdCA9PSBOVUxMKSB8fCAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5IChsaXN0KSkpOwotfQotCi0jZGVmaW5lIE5FV19MSVNUX0ZJWEVEKG1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGxpc3QpIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0LCBtb2RlLCBGVEFHLCBGSVhFRDEsIEZUQUcsIEZJWEVEMiwgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgRlRBRywgRklYRUQzLCBGVEFHLCBGSVhFRDQsIE5VTEwpOyAgICAgICAgICBcCi0gIG1hcmtfcG9pbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5EOwotCi0jZGVmaW5lIE5FV19MSVNUX1VORklYRUQobW9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGxpc3QpIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0LCBtb2RlLCBVVEFHLCBVTkZJWEVEMSwgVVRBRywgVU5GSVhFRDIsIFwKLSAgICAgICAgICAgICAgICAgICAgVVRBRywgVU5GSVhFRDMsIFVUQUcsIFVORklYRUQ0LCBOVUxMKTsgICAgICBcCi0gIG1hcmtfcG9pbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5EOwotCi0jZGVmaW5lIE5FV19MSVNUU19GSVhFRChtb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGxpc3QpIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgRlRBRywgRklYRUQxLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgRlRBRywgRklYRUQyLCBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChsaXN0MikgZ3N0X3RhZ19saXN0X3VucmVmIChsaXN0Mik7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXN0MiA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdDIsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBGVEFHLCBGSVhFRDMsICBcCi0gICAgICAgICAgICAgICAgICAgIEZUQUcsIEZJWEVENCwgTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAobWVyZ2UpIGdzdF90YWdfbGlzdF91bnJlZiAobWVyZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbWVyZ2UgPSBnc3RfdGFnX2xpc3RfbWVyZ2UgKGxpc3QsIGxpc3QyLCBtb2RlKTsgICAgICAgICAgICAgICBcCi0gIG1hcmtfcG9pbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5EOwotCi0jZGVmaW5lIE5FV19MSVNUU19VTkZJWEVEKG1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGxpc3QpIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgVVRBRywgVU5GSVhFRDEsIFwKLSAgICAgICAgICAgICAgICAgICAgVVRBRywgVU5GSVhFRDIsIE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChsaXN0MikgZ3N0X3RhZ19saXN0X3VucmVmIChsaXN0Mik7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXN0MiA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdDIsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBVVEFHLCBVTkZJWEVEMyxcCi0gICAgICAgICAgICAgICAgICAgIFVUQUcsIFVORklYRUQ0LCBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAobWVyZ2UpIGdzdF90YWdfbGlzdF91bnJlZiAobWVyZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbWVyZ2UgPSBnc3RfdGFnX2xpc3RfbWVyZ2UgKGxpc3QsIGxpc3QyLCBtb2RlKTsgICAgICAgICAgICAgICBcCi0gIG1hcmtfcG9pbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5EOwotCi0jZGVmaW5lIE5FV19MSVNUU19FTVBUWTEobW9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGxpc3QpIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGxpc3QgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAobGlzdDIpIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdDIpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbGlzdDIgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF90YWdfbGlzdF9hZGQgKGxpc3QyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgRlRBRywgRklYRUQzLCAgXAotICAgICAgICAgICAgICAgICAgICBGVEFHLCBGSVhFRDQsIE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKG1lcmdlKSBnc3RfdGFnX2xpc3RfdW5yZWYgKG1lcmdlKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG1lcmdlID0gZ3N0X3RhZ19saXN0X21lcmdlIChsaXN0LCBsaXN0MiwgbW9kZSk7ICAgICAgICAgICAgICAgXAotICBtYXJrX3BvaW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORDsKLQotI2RlZmluZSBORVdfTElTVFNfRU1QVFkyKG1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChsaXN0KSBnc3RfdGFnX2xpc3RfdW5yZWYgKGxpc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEZUQUcsIEZJWEVEMSwgICBcCi0gICAgICAgICAgICAgICAgICAgIEZUQUcsIEZJWEVEMiwgTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAobGlzdDIpIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdDIpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgbGlzdDIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChtZXJnZSkgZ3N0X3RhZ19saXN0X3VucmVmIChtZXJnZSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBtZXJnZSA9IGdzdF90YWdfbGlzdF9tZXJnZSAobGlzdCwgbGlzdDIsIG1vZGUpOyAgICAgICAgICAgICAgIFwKLSAgbWFya19wb2ludCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQ7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmFzaWNzKQotewotICAvKiBtYWtlIHN1cmUgdGhlIGFzc3VtcHRpb25zIHdvcmsgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfaXNfZml4ZWQgKEZUQUcpKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdGFnX2lzX2ZpeGVkIChVVEFHKSk7Ci0gIC8qIHdlIGNoZWNrIHN0cmluZyBoZXJlIG9ubHkgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfZ2V0X3R5cGUgKEZUQUcpID09IEdfVFlQRV9TVFJJTkcpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19nZXRfdHlwZSAoVVRBRykgPT0gR19UWVBFX1NUUklORyk7Ci19Ci0KLUdTVF9FTkRfVEVTVAotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkKQotewotICBHc3RUYWdMaXN0ICpsaXN0ID0gTlVMTDsKLQotICAvKiBjaGVjayBhZGRpdGlvbnMgKi8KLSAgLyogdW5maXhlZCAqLwotICBORVdfTElTVF9VTkZJWEVEIChHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKTsKLSAgY2hlY2tfdGFncyAobGlzdCwgVVRBRywgVU5GSVhFRDQsIE5VTEwpOwotICBORVdfTElTVF9VTkZJWEVEIChHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICBjaGVja190YWdzIChsaXN0LCBVVEFHLCBVTkZJWEVENCwgTlVMTCk7Ci0gIE5FV19MSVNUX1VORklYRUQgKEdTVF9UQUdfTUVSR0VfUFJFUEVORCk7Ci0gIGNoZWNrX3RhZ3MgKGxpc3QsIFVUQUcsIFVORklYRUQ0LCBVTkZJWEVEMywgVU5GSVhFRDIsIFVORklYRUQxLCBOVUxMKTsKLSAgTkVXX0xJU1RfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICBjaGVja190YWdzIChsaXN0LCBVVEFHLCBVTkZJWEVEMSwgVU5GSVhFRDIsIFVORklYRUQzLCBVTkZJWEVENCwgTlVMTCk7Ci0gIE5FV19MSVNUX1VORklYRUQgKEdTVF9UQUdfTUVSR0VfS0VFUCk7Ci0gIGNoZWNrX3RhZ3MgKGxpc3QsIFVUQUcsIFVORklYRUQxLCBOVUxMKTsKLSAgTkVXX0xJU1RfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9LRUVQX0FMTCk7Ci0gIGNoZWNrX3RhZ3MgKGxpc3QsIFVUQUcsIE5VTEwpOwotCi0gIC8qIGZpeGVkICovCi0gIE5FV19MSVNUX0ZJWEVEIChHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKTsKLSAgY2hlY2tfdGFncyAobGlzdCwgRlRBRywgRklYRUQ0LCBOVUxMKTsKLSAgTkVXX0xJU1RfRklYRUQgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0gIGNoZWNrX3RhZ3MgKGxpc3QsIEZUQUcsIEZJWEVENCwgTlVMTCk7Ci0gIE5FV19MSVNUX0ZJWEVEIChHU1RfVEFHX01FUkdFX1BSRVBFTkQpOwotICBjaGVja190YWdzIChsaXN0LCBGVEFHLCBGSVhFRDQsIE5VTEwpOwotICBORVdfTElTVF9GSVhFRCAoR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICBjaGVja190YWdzIChsaXN0LCBGVEFHLCBGSVhFRDEsIE5VTEwpOwotICBORVdfTElTVF9GSVhFRCAoR1NUX1RBR19NRVJHRV9LRUVQKTsKLSAgY2hlY2tfdGFncyAobGlzdCwgRlRBRywgRklYRUQxLCBOVUxMKTsKLSAgTkVXX0xJU1RfRklYRUQgKEdTVF9UQUdfTUVSR0VfS0VFUF9BTEwpOwotICBjaGVja190YWdzIChsaXN0LCBGVEFHLCBOVUxMKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBpZiAobGlzdCkKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGxpc3QpOwotfQotCi1HU1RfRU5EX1RFU1QKLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lcmdlKQotewotICBHc3RUYWdMaXN0ICpsaXN0ID0gTlVMTCwgKmxpc3QyID0gTlVMTCwgKm1lcmdlID0gTlVMTDsKLQotICAvKiBjaGVjayBtZXJnaW5nICovCi0gIC8qIHVuZml4ZWQgKi8KLSAgR1NUX0RFQlVHICgidW5maXhlZCIpOwotICBORVdfTElTVFNfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCk7Ci0gIGNoZWNrX3RhZ3MgKG1lcmdlLCBVVEFHLCBVTkZJWEVEMywgVU5GSVhFRDQsIE5VTEwpOwotICBORVdfTElTVFNfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIFVUQUcsIFVORklYRUQzLCBVTkZJWEVENCwgTlVMTCk7Ci0gIE5FV19MSVNUU19VTkZJWEVEIChHU1RfVEFHX01FUkdFX1BSRVBFTkQpOwotICBjaGVja190YWdzIChtZXJnZSwgVVRBRywgVU5GSVhFRDMsIFVORklYRUQ0LCBVTkZJWEVEMSwgVU5GSVhFRDIsIE5VTEwpOwotICBORVdfTElTVFNfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICBjaGVja190YWdzIChtZXJnZSwgVVRBRywgVU5GSVhFRDEsIFVORklYRUQyLCBVTkZJWEVEMywgVU5GSVhFRDQsIE5VTEwpOwotICBORVdfTElTVFNfVU5GSVhFRCAoR1NUX1RBR19NRVJHRV9LRUVQKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIFVUQUcsIFVORklYRUQxLCBVTkZJWEVEMiwgTlVMTCk7Ci0gIE5FV19MSVNUU19VTkZJWEVEIChHU1RfVEFHX01FUkdFX0tFRVBfQUxMKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIFVUQUcsIFVORklYRUQxLCBVTkZJWEVEMiwgTlVMTCk7Ci0KLSAgLyogZml4ZWQgKi8KLSAgR1NUX0RFQlVHICgiZml4ZWQiKTsKLSAgTkVXX0xJU1RTX0ZJWEVEIChHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMywgTlVMTCk7Ci0gIE5FV19MSVNUU19GSVhFRCAoR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMywgTlVMTCk7Ci0gIE5FV19MSVNUU19GSVhFRCAoR1NUX1RBR19NRVJHRV9QUkVQRU5EKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMywgTlVMTCk7Ci0gIE5FV19MSVNUU19GSVhFRCAoR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQxLCBOVUxMKTsKLSAgTkVXX0xJU1RTX0ZJWEVEIChHU1RfVEFHX01FUkdFX0tFRVApOwotICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQxLCBOVUxMKTsKLSAgTkVXX0xJU1RTX0ZJWEVEIChHU1RfVEFHX01FUkdFX0tFRVBfQUxMKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMSwgTlVMTCk7Ci0KLSAgLyogZmlyc3QgbGlzdCBlbXB0eSAqLwotICBHU1RfREVCVUcgKCJmaXJzdCBlbXB0eSIpOwotICBORVdfTElTVFNfRU1QVFkxIChHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMywgTlVMTCk7Ci0gIE5FV19MSVNUU19FTVBUWTEgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0gIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDMsIE5VTEwpOwotICBORVdfTElTVFNfRU1QVFkxIChHU1RfVEFHX01FUkdFX1BSRVBFTkQpOwotICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQzLCBOVUxMKTsKLSAgTkVXX0xJU1RTX0VNUFRZMSAoR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQzLCBOVUxMKTsKLSAgTkVXX0xJU1RTX0VNUFRZMSAoR1NUX1RBR19NRVJHRV9LRUVQKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMywgTlVMTCk7Ci0gIE5FV19MSVNUU19FTVBUWTEgKEdTVF9UQUdfTUVSR0VfS0VFUF9BTEwpOwotICBjaGVja190YWdzX2VtcHR5IChtZXJnZSk7Ci0KLSAgLyogc2Vjb25kIGxpc3QgZW1wdHkgKi8KLSAgR1NUX0RFQlVHICgic2Vjb25kIGVtcHR5Iik7Ci0gIE5FV19MSVNUU19FTVBUWTIgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwpOwotICBjaGVja190YWdzX2VtcHR5IChtZXJnZSk7Ci0gIE5FV19MSVNUU19FTVBUWTIgKEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0gIGNoZWNrX3RhZ3MgKG1lcmdlLCBGVEFHLCBGSVhFRDEsIE5VTEwpOwotICBORVdfTElTVFNfRU1QVFkyIChHU1RfVEFHX01FUkdFX1BSRVBFTkQpOwotICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQxLCBOVUxMKTsKLSAgTkVXX0xJU1RTX0VNUFRZMiAoR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQxLCBOVUxMKTsKLSAgTkVXX0xJU1RTX0VNUFRZMiAoR1NUX1RBR19NRVJHRV9LRUVQKTsKLSAgY2hlY2tfdGFncyAobWVyZ2UsIEZUQUcsIEZJWEVEMSwgTlVMTCk7Ci0gIE5FV19MSVNUU19FTVBUWTIgKEdTVF9UQUdfTUVSR0VfS0VFUF9BTEwpOwotICBjaGVja190YWdzIChtZXJnZSwgRlRBRywgRklYRUQxLCBOVUxMKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBpZiAobGlzdCkKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGxpc3QpOwotICBpZiAobGlzdDIpCi0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChsaXN0Mik7Ci0gIGlmIChtZXJnZSkKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKG1lcmdlKTsKLX0KLQotR1NUX0VORF9URVNUCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kYXRlX3RhZ3MpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0LCAqdGFnX2xpc3QyOwotICBHRGF0ZSAqZGF0ZSwgKmRhdGUyOwotICBnY2hhciAqc3RyOwotCi0gIGRhdGUgPSBnX2RhdGVfbmV3X2RteSAoMTQsIDEwLCAyMDA1KTsKLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfREFURSwgZGF0ZSwgTlVMTCk7Ci0KLSAgc3RyID0gZ3N0X3RhZ19saXN0X3RvX3N0cmluZyAodGFnX2xpc3QpOwotICBmYWlsX2lmIChzdHIgPT0gTlVMTCk7Ci0gIGZhaWxfaWYgKHN0cnN0ciAoc3RyLCAiMjAwNS0xMC0xNCIpID09IE5VTEwpOwotCi0gIHRhZ19saXN0MiA9IGdzdF90YWdfbGlzdF9uZXdfZnJvbV9zdHJpbmcgKHN0cik7Ci0gIGZhaWxfaWYgKHRhZ19saXN0MiA9PSBOVUxMKTsKLSAgZmFpbF9pZiAoIWdzdF90YWdfbGlzdF9nZXRfZGF0ZSAodGFnX2xpc3QyLCBHU1RfVEFHX0RBVEUsICZkYXRlMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2lzX2VxdWFsICh0YWdfbGlzdDIsIHRhZ19saXN0KSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QyKTsKLSAgZ19mcmVlIChzdHIpOwotCi0gIGZhaWxfaWYgKGdfZGF0ZV9jb21wYXJlIChkYXRlLCBkYXRlMikgIT0gMCk7Ci0gIGZhaWxfaWYgKGdfZGF0ZV9nZXRfZGF5IChkYXRlKSAhPSAxNCk7Ci0gIGZhaWxfaWYgKGdfZGF0ZV9nZXRfbW9udGggKGRhdGUpICE9IDEwKTsKLSAgZmFpbF9pZiAoZ19kYXRlX2dldF95ZWFyIChkYXRlKSAhPSAyMDA1KTsKLSAgZmFpbF9pZiAoZ19kYXRlX2dldF9kYXkgKGRhdGUyKSAhPSAxNCk7Ci0gIGZhaWxfaWYgKGdfZGF0ZV9nZXRfbW9udGggKGRhdGUyKSAhPSAxMCk7Ci0gIGZhaWxfaWYgKGdfZGF0ZV9nZXRfeWVhciAoZGF0ZTIpICE9IDIwMDUpOwotICBnX2RhdGVfZnJlZSAoZGF0ZTIpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotICBnX2RhdGVfZnJlZSAoZGF0ZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZSkKLXsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLQotICB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19UQUdfTElTVCAodGFnbGlzdCkpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotCi0gIC8qIHRoaXMgc2hvdWxkIGJlIGZpbmUgKi8KLSAgZmFpbF9pZiAoR1NUX0lTX1RBR19MSVNUIChOVUxMKSk7Ci0KLSAgLyogY2hlY2sgZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICovCi0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5IChOVUxMKSk7Ci0gIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICh0YWdsaXN0KSk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwgIkpEIiwgTlVMTCk7Ci0gIGZhaWxfaWYgKGdzdF90YWdfbGlzdF9pc19lbXB0eSAodGFnbGlzdCkpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NldF9ub25fdXRmOF9zdHJpbmcpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7Ci0gIGd1aW50OCBmb29iYXJbMl0gPSB7IDB4ZmYsIDB4MDAgfTsgICAgLyogbm90IFVURi04ICovCi0KLSAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGZhaWxfdW5sZXNzICh0YWdsaXN0ICE9IE5VTEwpOwotCi0gIEFTU0VSVF9XQVJOSU5HIChnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICBHU1RfVEFHX0FSVElTVCwgKGdjaGFyICopIGZvb2JhciwgTlVMTCkpOwotCi0gIC8qIFRoYXQgc3RyaW5nIGZpZWxkIHdpdGggYSBub24tVVRGOCBzdHJpbmcgc2hvdWxkIG5vdCBoYXZlIGJlZW4gYWRkZWQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9pc19lbXB0eSAodGFnbGlzdCkpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYnVmZmVyX3RhZ3MpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0gIEdzdEJ1ZmZlciAqYnVmMSwgKmJ1ZjI7Ci0gIEdzdFNhbXBsZSAqczEsICpzMjsKLQotICB0YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICBidWYxID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMjIpOwotICBzMSA9IGdzdF9zYW1wbGVfbmV3IChidWYxLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7Ci0KLSAgYnVmMiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKLSAgczIgPSBnc3Rfc2FtcGxlX25ldyAoYnVmMiwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOwotCi0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0lNQUdFLCBzMSwKLSAgICAgIEdTVF9UQUdfUFJFVklFV19JTUFHRSwgczIsIE5VTEwpOwotCi0gIGdzdF9zYW1wbGVfdW5yZWYgKHMxKTsKLSAgZ3N0X3NhbXBsZV91bnJlZiAoczIpOwotICBzMSA9IHMyID0gTlVMTDsKLQotICBmYWlsX2lmICghZ3N0X3RhZ19saXN0X2dldF9zYW1wbGUgKHRhZ3MsIEdTVF9UQUdfSU1BR0UsICZzMSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChzMSkgPT0gYnVmMSk7Ci0gIGdzdF9zYW1wbGVfdW5yZWYgKHMxKTsKLQotICBmYWlsX2lmICghZ3N0X3RhZ19saXN0X2dldF9zYW1wbGUgKHRhZ3MsIEdTVF9UQUdfUFJFVklFV19JTUFHRSwgJnMyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2FtcGxlX2dldF9idWZmZXIgKHMyKSA9PSBidWYyKTsKLSAgZ3N0X3NhbXBsZV91bnJlZiAoczIpOwotCi0gIGZhaWxfaWYgKGdzdF90YWdfbGlzdF9nZXRfc2FtcGxlX2luZGV4ICh0YWdzLCBHU1RfVEFHX0lNQUdFLCAxLCAmczEpKTsKLSAgZmFpbF9pZiAoZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXggKHRhZ3MsIEdTVF9UQUdfSU1BR0UsIDIsICZzMSkpOwotICBmYWlsX2lmIChnc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZV9pbmRleCAodGFncywgR1NUX1RBR19QUkVWSUVXX0lNQUdFLCAxLCAmczEpKTsKLSAgZmFpbF9pZiAoZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXggKHRhZ3MsIEdTVF9UQUdfUFJFVklFV19JTUFHRSwgMiwgJnMxKSk7Ci0KLSAgZmFpbF9pZiAoIWdzdF90YWdfbGlzdF9nZXRfc2FtcGxlX2luZGV4ICh0YWdzLCBHU1RfVEFHX0lNQUdFLCAwLCAmczEpKTsKLSAgZmFpbF9pZiAoIWdzdF90YWdfbGlzdF9nZXRfc2FtcGxlX2luZGV4ICh0YWdzLCBHU1RfVEFHX1BSRVZJRVdfSU1BR0UsIDAsCi0gICAgICAgICAgJnMyKSk7Ci0gIGJ1ZjEgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIgKHMxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMSksIDIyMik7Ci0gIGJ1ZjIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIgKHMyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMiksIDEwMCk7Ci0KLSAgZ3N0X3NhbXBsZV91bnJlZiAoczEpOwotICBnc3Rfc2FtcGxlX3VucmVmIChzMik7Ci0KLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lbXB0eV90YWdzKQotewotICBHc3RUYWdMaXN0ICp0YWdzOwotCi0gIC8qIG9ubHkgZ2V0IGdfd2FybmluZ3MoKSB3aXRoIGdpdCAqLwotICBpZiAoR1NUX1ZFUlNJT05fTkFOTyAhPSAxKQotICAgIHJldHVybjsKLQotICB0YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgQVNTRVJUX1dBUk5JTkcgKGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgICAgIEdTVF9UQUdfQVJUSVNULCBOVUxMLCBOVUxMKSk7Ci0gIEFTU0VSVF9XQVJOSU5HIChnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICBHU1RfVEFHX0FSVElTVCwgIiIsIE5VTEwpKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAieHl6IiwgTlVMTCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbmV3X2Z1bGwpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0gIGdjaGFyICphcnRpc3QsICp0aXRsZTsKLSAgZ2RvdWJsZSB0cmFja19nYWluOwotICBndWludCB0cmFja19udW07Ci0KLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXcgKEdTVF9UQUdfQVJUSVNULCAiQXJ0eSBJc3QiLAotICAgICAgR1NUX1RBR19UUkFDS19OVU1CRVIsIDksIEdTVF9UQUdfVFJBQ0tfR0FJTiwgNC4yNDIsIEdTVF9UQUdfVElUTEUsCi0gICAgICAiVGl0bGUhIiwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX0FSVElTVCwgJmFydGlzdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhcnRpc3QsICJBcnR5IElzdCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZ0aXRsZSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0aXRsZSwgIlRpdGxlISIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdzLCBHU1RfVEFHX1RSQUNLX05VTUJFUiwgJnRyYWNrX251bSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh0cmFja19udW0sIDkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ3MsIEdTVF9UQUdfVFJBQ0tfR0FJTiwgJnRyYWNrX2dhaW4pKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0ICh0cmFja19nYWluLCA0LjI0Mik7Ci0gIGZhaWxfdW5sZXNzICh0YWdzICE9IE5VTEwpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gIGdfZnJlZSAoYXJ0aXN0KTsKLSAgZ19mcmVlICh0aXRsZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKQotewotICBHc3RUYWdMaXN0ICp0YWdzOwotICBnY2hhciAqYXJ0aXN0cyA9IE5VTEw7Ci0KLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwgIkZvbyIsIE5VTEwpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BUlRJU1QsICJCYXIiLCBOVUxMKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAiWWF5IiwgTlVMTCk7Ci0gIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX0FSVElTVCwgJmFydGlzdHMpOwotICBmYWlsX3VubGVzcyAoYXJ0aXN0cyAhPSBOVUxMKTsKLSAgLyogY2FuJ3QgY2hlY2sgZm9yIGV4YWN0IHN0cmluZyBzaW5jZSB0aGUgY29tbWEgc2VwYXJhdG9yIGlzIGkxOG4tZWQgKi8KLSAgZmFpbF91bmxlc3MgKHN0cnN0ciAoYXJ0aXN0cywgIkZvbyIpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3Ryc3RyIChhcnRpc3RzLCAiQmFyIikgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzdHJzdHIgKGFydGlzdHMsICJZYXkiKSAhPSBOVUxMKTsKLSAgZ19mcmVlIChhcnRpc3RzKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lcXVhbCkKLXsKLSAgR3N0VGFnTGlzdCAqdGFncywgKnRhZ3MyOwotICBHc3RTYW1wbGUgKnNhbXBsZTEsICpzYW1wbGUyLCAqc2FtcGxlMTE7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotCi0gIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BUlRJU1QsICJGb28iLCBOVUxMKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAiQmFyIiwgTlVMTCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwgIllheSIsIE5VTEwpOwotCi0gIHRhZ3MyID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKHRhZ3MyLCB0YWdzKSk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BUlRJU1QsICJZYXkiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKHRhZ3MyLCB0YWdzKSk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BUlRJU1QsICJCYXIiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKHRhZ3MyLCB0YWdzKSk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BUlRJU1QsICJGb28iLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9pc19lcXVhbCAodGFnczIsIHRhZ3MpKTsKLQotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19SRUZFUkVOQ0VfTEVWRUwsCi0gICAgICA5Ljg3NjU0MzIxLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKHRhZ3MyLCB0YWdzKSk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19SRUZFUkVOQ0VfTEVWRUwsCi0gICAgICA5Ljg3NjU0MzIwLCBOVUxMKTsKLSAgLyogd2FudCB0aGVzZSB0d28gZG91YmxlIHZhbHVlcyB0byBiZSBlcXVhbCBkZXNwaXRlIG1pbm9yIGRpZmZlcmVuY2VzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKHRhZ3MyLCB0YWdzKSk7Ci0KLSAgLyogd2FudCB0aGlzIHRvIGJlIHVuZXF1YWwgdGhvdWdoLCBkaWZmZXJlbmNlIHRvbyBsYXJnZSAqLwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzMiwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCwKLSAgICAgIDkuODc2NTQzMTAsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoIWdzdF90YWdfbGlzdF9pc19lcXVhbCAodGFnczIsIHRhZ3MpKTsKLQotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MyKTsKLQotICAvKiBzYW1wbGVzICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfc3RyZHVwICgidGVzdCAxLTItMyIpLCAxMCk7Ci0gIHNhbXBsZTEgPSBnc3Rfc2FtcGxlX25ldyAoYnVmLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX3N0cmR1cCAoInRlc3QgMS0yLTMiKSwgMTApOwotICBzYW1wbGUxMSA9IGdzdF9zYW1wbGVfbmV3IChidWYsIE5VTEwsIE5VTEwsIE5VTEwpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfc3RyZHVwICgidGVzdCAyLTMtNC01IiksIDEyKTsKLSAgc2FtcGxlMiA9IGdzdF9zYW1wbGVfbmV3IChidWYsIE5VTEwsIE5VTEwsIE5VTEwpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19JTUFHRSwgc2FtcGxlMSwgTlVMTCk7Ci0KLSAgdGFnczIgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBmYWlsX3VubGVzcyAoIWdzdF90YWdfbGlzdF9pc19lcXVhbCAodGFnczIsIHRhZ3MpKTsKLQotICAvKiBzYW1wbGUgc2FtcGxlLCBzaG91bGQgYmUgdmVyeSBlcXVhbCBub3cgKi8KLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFnczIsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0lNQUdFLCBzYW1wbGUxLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9pc19lcXVhbCAodGFnczIsIHRhZ3MpKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzMik7Ci0KLSAgLyogc2FtZSBidWZmZXIgY29udGVudCwgYnV0IGRpZmZlcmVudCBidWZmZXIgaW5zdGFuY2VzLCBzdGlsbCByYXRoZXIgZXF1YWwgKi8KLSAgdGFnczIgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzMiwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfSU1BR0UsIHNhbXBsZTExLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9pc19lcXVhbCAodGFnczIsIHRhZ3MpKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzMik7Ci0KLSAgLyogZGlmZmVyZW50IGJ1ZmZlciBjb250ZW50LCBzaG91bGQgbm90IGJlIGVxdWFsICovCi0gIHRhZ3MyID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFnczIsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0lNQUdFLCBzYW1wbGUyLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKHRhZ3MyLCB0YWdzKSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnczIpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0KLSAgZ3N0X3NhbXBsZV91bnJlZiAoc2FtcGxlMSk7Ci0gIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZTExKTsKLSAgZ3N0X3NhbXBsZV91bnJlZiAoc2FtcGxlMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfd3JpdGFiaWxpdHkpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ3MsICp3dGFnczsKLQotICB0YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAiRm9vIiwgTlVMTCk7Ci0KLSAgLyogdGFrZSByZWYsIHNob3VsZCBubyBsb25nZXIgYmUgd3JpdGFibGUgKi8KLSAgZ3N0X3RhZ19saXN0X3JlZiAodGFncyk7Ci0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgR1NUX1RBR19BUlRJU1QsICJCYXIiLCBOVUxMKSk7Ci0KLSAgd3RhZ3MgPSBnc3RfdGFnX2xpc3RfbWFrZV93cml0YWJsZSAodGFncyk7Ci0gIC8qIHNob3VsZCBiZSBvayBub3cgKi8KLSAgZ3N0X3RhZ19saXN0X2FkZCAod3RhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwgIkJhciIsIE5VTEwpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHd0YWdzKTsKLQotICAvKiB0aGlzIHRvbywgc2luY2Ugd2UgZHJvcHBlZCB0aGUgc2Vjb25kIHJlZiBpbiBtYWtlX3dyaXRhYmxlICovCi0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwgIkJhciIsIE5VTEwpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRoaXMgdGVzdHMgR3N0U2FtcGxlIHNlcmlhbGlzYXRpb24vZGVzZXJpYWxpc2F0aW9uLCBlc3AuIHdpdGggbXVsdGlwbGUKLSAqIHNhbXBsZXMgaW4gYSB0YWcgbGlzdCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2VyaWFsaXphdGlvbikKLXsKLSAgR3N0VGFnTGlzdCAqdGFncywgKnRhZ3MyOwotICBHc3RCdWZmZXIgKmIxLCAqYjI7Ci0gIEdzdFNhbXBsZSAqczEsICpzMjsKLSAgR3N0Q2FwcyAqYzI7Ci0gIGdjaGFyICpzOwotCi0gIGIxID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEsIE5VTEwpOwotICBnc3RfYnVmZmVyX21lbXNldCAoYjEsIDAsIDB4YjMsIC0xKTsKLSAgczEgPSBnc3Rfc2FtcGxlX25ldyAoYjEsIE5VTEwsIE5VTEwsIE5VTEwpOwotICBnc3RfYnVmZmVyX3VucmVmIChiMSk7Ci0KLSAgYjIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgOCwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWVtc2V0IChiMiwgMCwgMHgyZiwgLTEpOwotICBjMiA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJmb28vYmFyIik7Ci0gIHMyID0gZ3N0X3NhbXBsZV9uZXcgKGIyLCBjMiwgTlVMTCwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGIyKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGMyKTsKLSAgYzIgPSBOVUxMOwotCi0gIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3IChHU1RfVEFHX0FUVEFDSE1FTlQsIHMxLCBOVUxMKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVRUQUNITUVOVCwgczIsIE5VTEwpOwotICBHU1RfSU5GTyAoInRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCB0YWdzKTsKLQotICBzID0gZ3N0X3RhZ19saXN0X3RvX3N0cmluZyAodGFncyk7Ci0gIEdTVF9JTkZPICgidGFnbGlzdCAtPiBzdHJpbmc6ICVzIiwgcyk7Ci0gIHRhZ3MyID0gZ3N0X3RhZ19saXN0X25ld19mcm9tX3N0cmluZyAocyk7Ci0gIEdTVF9JTkZPICgic3RyaW5nIC0+IHRhZ2xpc3Q6ICUiIEdTVF9QVFJfRk9STUFULCB0YWdzMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKHRhZ3MsIHRhZ3MyKSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnczIpOwotICBnX2ZyZWUgKHMpOwotCi0gIGdzdF9zYW1wbGVfdW5yZWYgKHMxKTsKLSAgZ3N0X3NhbXBsZV91bnJlZiAoczIpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VtcHR5X3RhZ2xpc3Rfc2VyaWFsaXphdGlvbikKLXsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdCwgKnRhZ2xpc3QyOwotICBnY2hhciAqc3RyOwotCi0gIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBzdHIgPSBnc3RfdGFnX2xpc3RfdG9fc3RyaW5nICh0YWdsaXN0KTsKLSAgdGFnbGlzdDIgPSBnc3RfdGFnX2xpc3RfbmV3X2Zyb21fc3RyaW5nIChzdHIpOwotICBmYWlsX2lmICh0YWdsaXN0MiA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9pc19lcXVhbCAodGFnbGlzdCwgdGFnbGlzdDIpKTsKLQotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QyKTsKLSAgZ19mcmVlIChzdHIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLWdzdF90YWdfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0VGFnIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Jhc2ljcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hZGQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVyZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVyZ2Vfc3RyaW5nc193aXRoX2NvbW1hKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RhdGVfdGFncyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NldF9ub25fdXRmOF9zdHJpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYnVmZmVyX3RhZ3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZW1wdHlfdGFncyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9uZXdfZnVsbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lcXVhbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF93cml0YWJpbGl0eSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXJpYWxpemF0aW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VtcHR5X3RhZ2xpc3Rfc2VyaWFsaXphdGlvbik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfdGFnKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R0YWdzZXR0ZXIuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3R0YWdzZXR0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFjMTZiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0dGFnc2V0dGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotLyogR1N0cmVhbWVyIEdzdFRhZ1NldHRlciBpbnRlcmZhY2UgdW5pdCB0ZXN0cwotICogQ29weXJpZ2h0IChDKSAyMDA3IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLyogc29tZSBtaW5pbWFsIEdzdFRhZ1NldHRlciBvYmplY3QgKi8KLSNkZWZpbmUgR1NUX1RZUEVfRFVNTVlfRU5DIGdzdF9kdW1teV9lbmNfZ2V0X3R5cGUoKQotCi10eXBlZGVmIEdzdEVsZW1lbnQgR3N0RHVtbXlFbmM7Ci10eXBlZGVmIEdzdEVsZW1lbnRDbGFzcyBHc3REdW1teUVuY0NsYXNzOwotCi1HVHlwZSBnc3RfZHVtbXlfZW5jX2dldF90eXBlICh2b2lkKTsKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3REdW1teUVuYywgZ3N0X2R1bW15X2VuYywKLSAgICBHU1RfVFlQRV9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1RBR19TRVRURVIsIE5VTEwpKTsKLQotc3RhdGljIHZvaWQKLWdzdF9kdW1teV9lbmNfY2xhc3NfaW5pdCAoR3N0RHVtbXlFbmNDbGFzcyAqIGtsYXNzKQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R1bW15X2VuY19pbml0IChHc3REdW1teUVuYyAqIGVuYykKLXsKLX0KLQotc3RhdGljIHZvaWQKLXRhZ19saXN0X2ZvcmVhY2ggKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdsaXN0LCBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgKiBwX251bSkKLXsKLSAgZ3VpbnQgdGFnX3NpemU7Ci0KLSAgdGFnX3NpemUgPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplICh0YWdsaXN0LCB0YWcpOwotICBHU1RfTE9HICgiJXUrJXUgdGFnID0gJXMiLCAqcF9udW0sIHRhZ19zaXplLCB0YWcpOwotICAqcF9udW0gKz0gdGFnX3NpemU7Ci19Ci0KLXN0YXRpYyBndWludAotdGFnX3NldHRlcl9saXN0X2xlbmd0aCAoR3N0VGFnU2V0dGVyICogc2V0dGVyKQotewotICBndWludCBsZW4gPSAwOwotCi0gIGlmIChnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKHNldHRlcikgPT0gTlVMTCkKLSAgICByZXR1cm4gMDsKLQotICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAoZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0IChzZXR0ZXIpLAotICAgICAgKEdzdFRhZ0ZvcmVhY2hGdW5jKSB0YWdfbGlzdF9mb3JlYWNoLCAmbGVuKTsKLSAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGd1aW50Ci10YWdfbGlzdF9sZW5ndGggKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdfbGlzdCkKLXsKLSAgZ3VpbnQgbGVuID0gMDsKLQotICBpZiAodGFnX2xpc3QgPT0gTlVMTCkKLSAgICByZXR1cm4gMDsKLQotICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAodGFnX2xpc3QsIChHc3RUYWdGb3JlYWNoRnVuYykgdGFnX2xpc3RfZm9yZWFjaCwgJmxlbik7Ci0gIHJldHVybiBsZW47Ci19Ci0KLSNkZWZpbmUgYXNzZXJ0X3RhZ19zZXR0ZXJfbGlzdF9sZW5ndGgoc2V0dGVyLGxlbikgXAotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHRhZ19zZXR0ZXJfbGlzdF9sZW5ndGgoc2V0dGVyKSwgbGVuKTsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVyZ2UpCi17Ci0gIEdzdFRhZ1NldHRlciAqc2V0dGVyOwotICBHc3RUYWdMaXN0ICpsaXN0MSwgKmxpc3QyOwotICBHc3RFbGVtZW50ICplbmM7Ci0KLSAgZW5jID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9EVU1NWV9FTkMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZW5jICE9IE5VTEwpOwotCi0gIHNldHRlciA9IEdTVF9UQUdfU0VUVEVSIChlbmMpOwotCi0gIGxpc3QxID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdDEsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0FSVElTVCwgImFydGlzdDEiLAotICAgICAgTlVMTCk7Ci0gIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDEsIEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKLSAgYXNzZXJ0X3RhZ19zZXR0ZXJfbGlzdF9sZW5ndGggKHNldHRlciwgMSk7Ci0KLSAgbGlzdDIgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0MiwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULCAiYXJ0aXN0MiIsCi0gICAgICBHU1RfVEFHX1RJVExFLCAidGl0bGUxIiwgTlVMTCk7Ci0gIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDIsIEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKLSAgYXNzZXJ0X3RhZ19zZXR0ZXJfbGlzdF9sZW5ndGggKHNldHRlciwgMyk7Ci0KLSAgZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoc2V0dGVyLCBsaXN0MiwgR1NUX1RBR19NRVJHRV9SRVBMQUNFX0FMTCk7Ci0gIGFzc2VydF90YWdfc2V0dGVyX2xpc3RfbGVuZ3RoIChzZXR0ZXIsIDIpOwotCi0gIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdDEsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwpOwotICBhc3NlcnRfdGFnX3NldHRlcl9saXN0X2xlbmd0aCAoc2V0dGVyLCAxKTsKLQotICBnc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoc2V0dGVyLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BTEJVTSwgInh5eiIsCi0gICAgICBOVUxMKTsKLSAgYXNzZXJ0X3RhZ19zZXR0ZXJfbGlzdF9sZW5ndGggKHNldHRlciwgMik7Ci0KLSAgZ3N0X3RhZ19saXN0X3VucmVmIChsaXN0Mik7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdDEpOwotCi0gIGdfb2JqZWN0X3VucmVmIChlbmMpOwotfQotCi1HU1RfRU5EX1RFU1QKLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lcmdlX21vZGVzKQotewotICBHc3RUYWdNZXJnZU1vZGUgbW9kZTsKLQotICBmb3IgKG1vZGUgPSBHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMOyBtb2RlIDwgR1NUX1RBR19NRVJHRV9DT1VOVDsgbW9kZSsrKSB7Ci0gICAgZ2ludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgR3N0RWxlbWVudCAqZW5jOwotICAgICAgR3N0VGFnU2V0dGVyICpzZXR0ZXI7Ci0gICAgICBHc3RUYWdMaXN0ICpsaXN0MSwgKmxpc3QyLCAqbWVyZ2VkOwotCi0gICAgICBlbmMgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0RVTU1ZX0VOQywgTlVMTCk7Ci0gICAgICBmYWlsX3VubGVzcyAoZW5jICE9IE5VTEwpOwotCi0gICAgICBzZXR0ZXIgPSBHU1RfVEFHX1NFVFRFUiAoZW5jKTsKLSAgICAgIGxpc3QxID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICAgIGxpc3QyID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICAgICAgLyogaSA9IDA6IC0gICAgIC0KLSAgICAgICAqIGkgPSAxOiBsaXN0MSAtCi0gICAgICAgKiBpID0gMjogLSAgICAgbGlzdDIKLSAgICAgICAqIGkgPSAzOiBsaXN0MSBsaXN0MiAqLwotCi0gICAgICBpZiAoaSAlIDIgPT0gMSkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0MSwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULAotICAgICAgICAgICAgImFydGlzdDEiLCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIGlmIChpID4gMSkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0MiwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULAotICAgICAgICAgICAgImFydGlzdDIiLCBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoc2V0dGVyLCBsaXN0MSwgR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICAgICAgZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoc2V0dGVyLCBsaXN0MiwgbW9kZSk7Ci0KLSAgICAgIG1lcmdlZCA9IGdzdF90YWdfbGlzdF9tZXJnZSAobGlzdDEsIGxpc3QyLCBtb2RlKTsKLQotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodGFnX2xpc3RfbGVuZ3RoIChnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QKLSAgICAgICAgICAgICAgKHNldHRlcikpLCB0YWdfbGlzdF9sZW5ndGggKG1lcmdlZCkpOwotCi0gICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGxpc3QxKTsKLSAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdDIpOwotICAgICAgZ3N0X3RhZ19saXN0X3VucmVmIChtZXJnZWQpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZW5jKTsKLSAgICB9Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tZXJnZV9tb2Rlc19za2lwX2VtcHR5KQotewotICBHc3RUYWdNZXJnZU1vZGUgbW9kZTsKLQotICBmb3IgKG1vZGUgPSBHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMOyBtb2RlIDwgR1NUX1RBR19NRVJHRV9DT1VOVDsgbW9kZSsrKSB7Ci0gICAgZ2ludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotICAgICAgR3N0RWxlbWVudCAqZW5jOwotICAgICAgR3N0VGFnU2V0dGVyICpzZXR0ZXI7Ci0gICAgICBHc3RUYWdMaXN0ICpsaXN0MSwgKmxpc3QyLCAqbWVyZ2VkOwotCi0gICAgICBlbmMgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0RVTU1ZX0VOQywgTlVMTCk7Ci0gICAgICBmYWlsX3VubGVzcyAoZW5jICE9IE5VTEwpOwotCi0gICAgICBzZXR0ZXIgPSBHU1RfVEFHX1NFVFRFUiAoZW5jKTsKLSAgICAgIGxpc3QxID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICAgIGxpc3QyID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICAgICAgaWYgKGkgPT0gMSkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0MiwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULAotICAgICAgICAgICAgImFydGlzdDIiLCBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoc2V0dGVyLCBsaXN0MiwgbW9kZSk7Ci0KLSAgICAgIG1lcmdlZCA9IGdzdF90YWdfbGlzdF9tZXJnZSAobGlzdDEsIGxpc3QyLCBtb2RlKTsKLQotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodGFnX2xpc3RfbGVuZ3RoIChnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QKLSAgICAgICAgICAgICAgKHNldHRlcikpLCB0YWdfbGlzdF9sZW5ndGggKG1lcmdlZCkpOwotCi0gICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGxpc3QxKTsKLSAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdDIpOwotICAgICAgZ3N0X3RhZ19saXN0X3VucmVmIChtZXJnZWQpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZW5jKTsKLSAgICB9Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUIHN0YXRpYyBpbnQgc3Bpbl9hbmRfd2FpdCA9IDE7Ci1zdGF0aWMgaW50IHRocmVhZHNfcnVubmluZyA9IDA7Ci0KLSNkZWZpbmUgVEhSRUFEU19URVNUX1NFQ09ORFMgMS41Ci0KLXN0YXRpYyBncG9pbnRlcgotdGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMSAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0VGFnU2V0dGVyICpzZXR0ZXIgPSBHU1RfVEFHX1NFVFRFUiAoZGF0YSk7Ci0gIEdUaW1lciAqdGltZXI7Ci0KLSAgdGltZXIgPSBnX3RpbWVyX25ldyAoKTsKLQotICBnX2F0b21pY19pbnRfaW5jICgmdGhyZWFkc19ydW5uaW5nKTsKLSAgd2hpbGUgKGdfYXRvbWljX2ludF9nZXQgKCZzcGluX2FuZF93YWl0KSkKLSAgICBnX3VzbGVlcCAoMCk7Ci0KLSAgR1NUX0lORk8gKCJHbyEiKTsKLSAgZ190aW1lcl9zdGFydCAodGltZXIpOwotCi0gIHdoaWxlIChnX3RpbWVyX2VsYXBzZWQgKHRpbWVyLCBOVUxMKSA8IFRIUkVBRFNfVEVTVF9TRUNPTkRTKSB7Ci0gICAgZ3N0X3RhZ19zZXR0ZXJfYWRkX3RhZ3MgKHNldHRlciwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfQVJUSVNULAotICAgICAgICAic29tZSBhcnRpc3QiLCBHU1RfVEFHX1RJVExFLCAic29tZSB0aXRsZSIsIEdTVF9UQUdfVFJBQ0tfTlVNQkVSLCA2LAotICAgICAgICBOVUxMKTsKLSAgfQotCi0gIGdfdGltZXJfZGVzdHJveSAodGltZXIpOwotICBHU1RfSU5GTyAoIkRvbmUiKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdwb2ludGVyCi10ZXN0X3RocmVhZHNfdGhyZWFkX2Z1bmMyIChncG9pbnRlciBkYXRhKQotewotICBHc3RUYWdTZXR0ZXIgKnNldHRlciA9IEdTVF9UQUdfU0VUVEVSIChkYXRhKTsKLSAgR1RpbWVyICp0aW1lcjsKLQotICB0aW1lciA9IGdfdGltZXJfbmV3ICgpOwotCi0gIGdfYXRvbWljX2ludF9pbmMgKCZ0aHJlYWRzX3J1bm5pbmcpOwotICB3aGlsZSAoZ19hdG9taWNfaW50X2dldCAoJnNwaW5fYW5kX3dhaXQpKQotICAgIGdfdXNsZWVwICgwKTsKLQotICBHU1RfSU5GTyAoIkdvISIpOwotICBnX3RpbWVyX3N0YXJ0ICh0aW1lcik7Ci0KLSAgd2hpbGUgKGdfdGltZXJfZWxhcHNlZCAodGltZXIsIE5VTEwpIDwgVEhSRUFEU19URVNUX1NFQ09ORFMpIHsKLSAgICBnc3RfdGFnX3NldHRlcl9hZGRfdGFncyAoc2V0dGVyLCBHU1RfVEFHX01FUkdFX1BSRVBFTkQsIEdTVF9UQUdfQ09ERUMsCi0gICAgICAgICJNUDQyIiwgR1NUX1RBR19DT01NRU5ULCAiZGVlcCBpbnNpZ2h0cyBnbyBoZXJlIiwgR1NUX1RBR19UUkFDS19DT1VOVCwKLSAgICAgICAgMTAsIE5VTEwpOwotICB9Ci0KLSAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7Ci0gIEdTVF9JTkZPICgiRG9uZSIpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXRlc3RfdGhyZWFkc190aHJlYWRfZnVuYzMgKGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdFRhZ1NldHRlciAqc2V0dGVyID0gR1NUX1RBR19TRVRURVIgKGRhdGEpOwotICBHVGltZXIgKnRpbWVyOwotCi0gIHRpbWVyID0gZ190aW1lcl9uZXcgKCk7Ci0KLSAgZ19hdG9taWNfaW50X2luYyAoJnRocmVhZHNfcnVubmluZyk7Ci0gIHdoaWxlIChnX2F0b21pY19pbnRfZ2V0ICgmc3Bpbl9hbmRfd2FpdCkpCi0gICAgZ191c2xlZXAgKDApOwotCi0gIEdTVF9JTkZPICgiR28hIik7Ci0gIGdfdGltZXJfc3RhcnQgKHRpbWVyKTsKLQotICB3aGlsZSAoZ190aW1lcl9lbGFwc2VkICh0aW1lciwgTlVMTCkgPCBUSFJFQURTX1RFU1RfU0VDT05EUykgewotICAgIGdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3MgKHNldHRlcik7Ci0gIH0KLQotICBnX3RpbWVyX2Rlc3Ryb3kgKHRpbWVyKTsKLSAgR1NUX0lORk8gKCJEb25lIik7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RocmVhZHMpCi17Ci0gIEdzdFRhZ1NldHRlciAqc2V0dGVyOwotICBHVGhyZWFkICp0aHJlYWRzWzNdOwotCi0gIHNldHRlciA9IEdTVF9UQUdfU0VUVEVSIChnX29iamVjdF9uZXcgKEdTVF9UWVBFX0RVTU1ZX0VOQywgTlVMTCkpOwotCi0gIHNwaW5fYW5kX3dhaXQgPSBUUlVFOwotICB0aHJlYWRzWzBdID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHRlc3RfdGhyZWFkc190aHJlYWRfZnVuYzEsCi0gICAgICBzZXR0ZXIsIE5VTEwpOwotICB0aHJlYWRzWzFdID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHRlc3RfdGhyZWFkc190aHJlYWRfZnVuYzIsCi0gICAgICBzZXR0ZXIsIE5VTEwpOwotICB0aHJlYWRzWzJdID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHRlc3RfdGhyZWFkc190aHJlYWRfZnVuYzMsCi0gICAgICBzZXR0ZXIsIE5VTEwpOwotCi0gIHdoaWxlIChnX2F0b21pY19pbnRfZ2V0ICgmdGhyZWFkc19ydW5uaW5nKSA8IDMpCi0gICAgZ191c2xlZXAgKDEwKTsKLQotICBnX2F0b21pY19pbnRfc2V0ICgmc3Bpbl9hbmRfd2FpdCwgRkFMU0UpOwotCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZHNbMF0pOwotICBnX3RocmVhZF9qb2luICh0aHJlYWRzWzFdKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkc1syXSk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChzZXR0ZXIpKTsKLX0KLQotR1NUX0VORF9URVNUIHN0YXRpYyBTdWl0ZSAqCi1nc3RfdGFnX3NldHRlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RUYWdTZXR0ZXIiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVyZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVyZ2VfbW9kZXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVyZ2VfbW9kZXNfc2tpcF9lbXB0eSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90aHJlYWRzKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF90YWdfc2V0dGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0dGFzay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjc5NTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R0YXNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICoKLSAqIGdzdHRhc2suYzogVW5pdCB0ZXN0IGZvciBHc3RUYXNrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgR011dGV4IHRhc2tfbG9jazsKLXN0YXRpYyBHQ29uZCB0YXNrX2NvbmQ7Ci0KLXN0YXRpYyBHUmVjTXV0ZXggdGFza19tdXRleDsKLQotI2RlZmluZSBURVNUX1JBQ0VfSVRFUkFUSU9OUyAxMDAwCi0KLXN0YXRpYyB2b2lkCi10YXNrX3NpZ25hbF9wYXVzZV9mdW5jICh2b2lkICpkYXRhKQotewotICBHc3RUYXNrICoqdCA9IGRhdGE7Ci0KLSAgZ19tdXRleF9sb2NrICgmdGFza19sb2NrKTsKLSAgR1NUX0RFQlVHICgic2lnbmFsIik7Ci0gIGdfY29uZF9zaWduYWwgKCZ0YXNrX2NvbmQpOwotCi0gIGdzdF90YXNrX3BhdXNlICgqdCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmdGFza19sb2NrKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGF1c2Vfc3RvcF9yYWNlKQotewotICBndWludCBpdCA9IFRFU1RfUkFDRV9JVEVSQVRJT05TOwotICBHc3RUYXNrICp0OwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgdCA9IGdzdF90YXNrX25ldyAodGFza19zaWduYWxfcGF1c2VfZnVuYywgJnQsIE5VTEwpOwotICBmYWlsX2lmICh0ID09IE5VTEwpOwotCi0gIGdfcmVjX211dGV4X2luaXQgKCZ0YXNrX211dGV4KTsKLSAgZ3N0X3Rhc2tfc2V0X2xvY2sgKHQsICZ0YXNrX211dGV4KTsKLQotICBnX2NvbmRfaW5pdCAoJnRhc2tfY29uZCk7Ci0gIGdfbXV0ZXhfaW5pdCAoJnRhc2tfbG9jayk7Ci0KLSAgd2hpbGUgKGl0LS0gPiAwKSB7Ci0gICAgZ19tdXRleF9sb2NrICgmdGFza19sb2NrKTsKLSAgICBHU1RfREVCVUcgKCJzdGFydGluZyIpOwotICAgIHJldCA9IGdzdF90YXNrX3N0YXJ0ICh0KTsKLSAgICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICAgIC8qIHdhaXQgZm9yIGl0IHRvIHNwaW4gdXAgKi8KLSAgICBHU1RfREVCVUcgKCJ3YWl0aW5nIik7Ci0gICAgZ19jb25kX3dhaXQgKCZ0YXNrX2NvbmQsICZ0YXNrX2xvY2spOwotICAgIEdTVF9ERUJVRyAoImRvbmUgd2FpdGluZyIpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmdGFza19sb2NrKTsKLQotICAgIEdTVF9ERUJVRyAoInN0YXJ0aW5nIik7Ci0gICAgcmV0ID0gZ3N0X3Rhc2tfc3RvcCAodCk7Ci0gICAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLQotICAgIEdTVF9ERUJVRyAoImpvaW5pbmciKTsKLSAgICByZXQgPSBnc3RfdGFza19qb2luICh0KTsKLSAgICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICB9Ci0KLSAgZ19jb25kX2NsZWFyICgmdGFza19jb25kKTsKLSAgZ19tdXRleF9jbGVhciAoJnRhc2tfbG9jayk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLXRhc2tfZnVuYzIgKHZvaWQgKmRhdGEpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0VGFzayAqdCA9ICooKEdzdFRhc2sgKiopIGRhdGEpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnRhc2tfbG9jayk7Ci0gIEdTVF9ERUJVRyAoInNpZ25hbCIpOwotICBnX2NvbmRfc2lnbmFsICgmdGFza19jb25kKTsKLSAgZ19tdXRleF91bmxvY2sgKCZ0YXNrX2xvY2spOwotCi0gIEFTU0VSVF9XQVJOSU5HIChyZXQgPSBnc3RfdGFza19qb2luICh0KSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9qb2luKQotewotICBHc3RUYXNrICp0OwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgdCA9IGdzdF90YXNrX25ldyAodGFza19mdW5jMiwgJnQsIE5VTEwpOwotICBmYWlsX2lmICh0ID09IE5VTEwpOwotCi0gIGdfcmVjX211dGV4X2luaXQgKCZ0YXNrX211dGV4KTsKLSAgZ3N0X3Rhc2tfc2V0X2xvY2sgKHQsICZ0YXNrX211dGV4KTsKLQotICBnX2NvbmRfaW5pdCAoJnRhc2tfY29uZCk7Ci0gIGdfbXV0ZXhfaW5pdCAoJnRhc2tfbG9jayk7Ci0KLSAgZ19tdXRleF9sb2NrICgmdGFza19sb2NrKTsKLSAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKLSAgcmV0ID0gZ3N0X3Rhc2tfc3RhcnQgKHQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICAvKiB3YWl0IGZvciBpdCB0byBzcGluIHVwICovCi0gIEdTVF9ERUJVRyAoIndhaXRpbmciKTsKLSAgZ19jb25kX3dhaXQgKCZ0YXNrX2NvbmQsICZ0YXNrX2xvY2spOwotICBHU1RfREVCVUcgKCJkb25lIHdhaXRpbmciKTsKLSAgZ19tdXRleF91bmxvY2sgKCZ0YXNrX2xvY2spOwotCi0gIEdTVF9ERUJVRyAoImpvaW5pbmciKTsKLSAgcmV0ID0gZ3N0X3Rhc2tfam9pbiAodCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0KLSAgZ3N0X3Rhc2tfY2xlYW51cF9hbGwgKCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLXRhc2tfZnVuYyAodm9pZCAqZGF0YSkKLXsKLSAgZ19tdXRleF9sb2NrICgmdGFza19sb2NrKTsKLSAgR1NUX0RFQlVHICgic2lnbmFsIik7Ci0gIGdfY29uZF9zaWduYWwgKCZ0YXNrX2NvbmQpOwotICBnX211dGV4X3VubG9jayAoJnRhc2tfbG9jayk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xvY2tfc3RhcnQpCi17Ci0gIEdzdFRhc2sgKnQ7Ci0gIGdib29sZWFuIHJldDsKLQotICB0ID0gZ3N0X3Rhc2tfbmV3ICh0YXNrX2Z1bmMsIE5VTEwsIE5VTEwpOwotICBmYWlsX2lmICh0ID09IE5VTEwpOwotCi0gIGdfcmVjX211dGV4X2luaXQgKCZ0YXNrX211dGV4KTsKLSAgZ3N0X3Rhc2tfc2V0X2xvY2sgKHQsICZ0YXNrX211dGV4KTsKLQotICBnX2NvbmRfaW5pdCAoJnRhc2tfY29uZCk7Ci0gIGdfbXV0ZXhfaW5pdCAoJnRhc2tfbG9jayk7Ci0KLSAgZ19tdXRleF9sb2NrICgmdGFza19sb2NrKTsKLSAgR1NUX0RFQlVHICgic3RhcnRpbmciKTsKLSAgcmV0ID0gZ3N0X3Rhc2tfc3RhcnQgKHQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICAvKiB3YWl0IGZvciBpdCB0byBzcGluIHVwICovCi0gIEdTVF9ERUJVRyAoIndhaXRpbmciKTsKLSAgZ19jb25kX3dhaXQgKCZ0YXNrX2NvbmQsICZ0YXNrX2xvY2spOwotICBHU1RfREVCVUcgKCJkb25lIHdhaXRpbmciKTsKLSAgZ19tdXRleF91bmxvY2sgKCZ0YXNrX2xvY2spOwotCi0gIC8qIGNhbm5vdCBzZXQgbXV0ZXggbm93ICovCi0gIEFTU0VSVF9XQVJOSU5HIChnc3RfdGFza19zZXRfbG9jayAodCwgJnRhc2tfbXV0ZXgpKTsKLQotICBHU1RfREVCVUcgKCJqb2luaW5nIik7Ci0gIHJldCA9IGdzdF90YXNrX2pvaW4gKHQpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotCi0gIGdzdF90YXNrX2NsZWFudXBfYWxsICgpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xvY2spCi17Ci0gIEdzdFRhc2sgKnQ7Ci0gIGdib29sZWFuIHJldDsKLQotICB0ID0gZ3N0X3Rhc2tfbmV3ICh0YXNrX2Z1bmMsIE5VTEwsIE5VTEwpOwotICBmYWlsX2lmICh0ID09IE5VTEwpOwotCi0gIGdfcmVjX211dGV4X2luaXQgKCZ0YXNrX211dGV4KTsKLSAgZ3N0X3Rhc2tfc2V0X2xvY2sgKHQsICZ0YXNrX211dGV4KTsKLQotICBHU1RfREVCVUcgKCJwYXVzZSIpOwotICByZXQgPSBnc3RfdGFza19wYXVzZSAodCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0KLSAgZ191c2xlZXAgKDEgKiBHX1VTRUNfUEVSX1NFQyAvIDIpOwotCi0gIEdTVF9ERUJVRyAoImpvaW5pbmciKTsKLSAgcmV0ID0gZ3N0X3Rhc2tfam9pbiAodCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0KLSAgZ191c2xlZXAgKDEgKiBHX1VTRUNfUEVSX1NFQyAvIDIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vX2xvY2spCi17Ci0gIEdzdFRhc2sgKnQ7Ci0gIGdib29sZWFuIHJldDsKLQotICB0ID0gZ3N0X3Rhc2tfbmV3ICh0YXNrX2Z1bmMsIE5VTEwsIE5VTEwpOwotICBmYWlsX2lmICh0ID09IE5VTEwpOwotCi0gIC8qIHN0b3Agc2hvdWxkIGJlIHBvc3NpYmxlIHdpdGhvdXQgbG9jayAqLwotICBnc3RfdGFza19zdG9wICh0KTsKLQotICAvKiBwYXVzZSBzaG91bGQgZ2l2ZSBhIHdhcm5pbmcgKi8KLSAgQVNTRVJUX1dBUk5JTkcgKHJldCA9IGdzdF90YXNrX3BhdXNlICh0KSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotCi0gIC8qIHN0YXJ0IHNob3VsZCBnaXZlIGEgd2FybmluZyAqLwotICBBU1NFUlRfV0FSTklORyAocmV0ID0gZ3N0X3Rhc2tfc3RhcnQgKHQpKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0KLSAgLyogc3RvcCBzaG91bGQgYmUgcG9zc2libGUgd2l0aG91dCBsb2NrICovCi0gIGdzdF90YXNrX3N0b3AgKHQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NyZWF0ZSkKLXsKLSAgR3N0VGFzayAqdDsKLQotICB0ID0gZ3N0X3Rhc2tfbmV3ICh0YXNrX2Z1bmMsIE5VTEwsIE5VTEwpOwotICBmYWlsX2lmICh0ID09IE5VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLWdzdF90YXNrX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFRhc2siKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgidGFzayB0ZXN0cyIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY3JlYXRlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25vX2xvY2spOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbG9jayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sb2NrX3N0YXJ0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2pvaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGF1c2Vfc3RvcF9yYWNlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF90YXNrKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3R0b2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1ZDA3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3QvZ3N0dG9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBHc3RUb2MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiAgLS0tLS0tLSAgVE9DICAtLS0tLS0tCi0gKiAgICAgICAgICAgLyAgXAotICogICBlZGl0aW9uMSAgICBlZGl0aW9uMgotICogICB8ICAgICAgICAgICB8Ci0gKiAgIC1jaGFwdGVyMSAgIC1jaGFwdGVyMwotICogICAtY2hhcHRlcjIgICAgfAotICogICAgICAgICAgICAgICAgLXN1YmNoYXB0ZXIxCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jZGVmaW5lIEVOVFJZX0VEMSAgICAgICAiL2VkaXRpb24xIgotI2RlZmluZSBFTlRSWV9FRDIgICAgICAgIi9lZGl0aW9uMiIKLSNkZWZpbmUgRU5UUllfRUQzICAgICAgICJ0ZXN0LWVkaXRpb24iCi0KLSNkZWZpbmUgRU5UUllfQ0gxICAgICAgICIvZWRpdGlvbjEvY2hhcHRlcjEiCi0jZGVmaW5lIEVOVFJZX0NIMiAgICAgICAiL2VkaXRpb24xL2NoYXB0ZXIyIgotI2RlZmluZSBFTlRSWV9DSDMgICAgICAgIi9lZGl0aW9uMi9jaGFwdGVyMyIKLSNkZWZpbmUgRU5UUllfQ0g0ICAgICAgICIvdGVzdC1jaGFwdGVyIgotCi0jZGVmaW5lIEVOVFJZX1NVQjEgICAgICAiL2VkaXRpb24yL2NoYXB0ZXIzL3N1YmNoYXB0ZXIxIgotCi0jZGVmaW5lIEVOVFJZX1RBRyAgICAgICAiRW50cnlUYWciCi0jZGVmaW5lIFRPQ19UQUcgICAgICAgICAiVG9jVGFnIgotCi0jZGVmaW5lIFRFU1RfVUlEICAgICAgICAiMTI5NTM3NTQyIgotCi1zdGF0aWMgdm9pZAotQ0hFQ0tfVE9DX0VOVFJZIChHc3RUb2NFbnRyeSAqIGVudHJ5X2MsIEdzdFRvY0VudHJ5VHlwZSB0eXBlX2MsCi0gICAgY29uc3QgZ2NoYXIgKiB1aWRfYykKLXsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgZ2NoYXIgKnRhZ19jOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF90b2NfZW50cnlfZ2V0X3VpZCAoZW50cnlfYyksIHVpZF9jKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90b2NfZW50cnlfZ2V0X2VudHJ5X3R5cGUgKGVudHJ5X2MpID09IHR5cGVfYyk7Ci0KLSAgdGFncyA9IGdzdF90b2NfZW50cnlfZ2V0X3RhZ3MgKGVudHJ5X2MpOwotICBmYWlsX3VubGVzcyAodGFncyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX1RJVExFLCAmdGFnX2MpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodGFnX2MsIEVOVFJZX1RBRyk7Ci0gIGdfZnJlZSAodGFnX2MpOwotfQotCi1zdGF0aWMgdm9pZAotQ0hFQ0tfVE9DIChHc3RUb2MgKiB0b2NfdCkKLXsKLSAgR3N0VG9jRW50cnkgKmVudHJ5X3QsICpzdWJlbnRyeV90OwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBHTGlzdCAqZW50cmllcywgKnN1YmVudHJpZXMsICpzdWJzdWJlbnRyaWVzOwotICBnY2hhciAqdGFnX3Q7Ci0KLSAgLyogZHVtcCBUT0MgKi8KLSAgZ3N0X3RvY19kdW1wICh0b2NfdCk7Ci0KLSAgLyogY2hlY2sgVE9DICovCi0gIHRhZ3MgPSBnc3RfdG9jX2dldF90YWdzICh0b2NfdCk7Ci0gIGZhaWxfdW5sZXNzICh0YWdzICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZ0YWdfdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0YWdfdCwgVE9DX1RBRyk7Ci0gIGdfZnJlZSAodGFnX3QpOwotCi0gIGVudHJpZXMgPSBnc3RfdG9jX2dldF9lbnRyaWVzICh0b2NfdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGVudHJpZXMpLCAyKTsKLQotICAvKiBjaGVjayBlZGl0aW9uMSAqLwotICBlbnRyeV90ID0gZ19saXN0X250aF9kYXRhIChlbnRyaWVzLCAwKTsKLSAgZmFpbF9pZiAoZW50cnlfdCA9PSBOVUxMKTsKLSAgc3ViZW50cmllcyA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVzIChlbnRyeV90KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoc3ViZW50cmllcyksIDIpOwotICBDSEVDS19UT0NfRU5UUlkgKGVudHJ5X3QsIEdTVF9UT0NfRU5UUllfVFlQRV9FRElUSU9OLCBFTlRSWV9FRDEpOwotICAvKiBjaGVjayBjaGFwdGVyMSAqLwotICBzdWJlbnRyeV90ID0gZ19saXN0X250aF9kYXRhIChzdWJlbnRyaWVzLCAwKTsKLSAgZmFpbF9pZiAoc3ViZW50cnlfdCA9PSBOVUxMKTsKLSAgc3Vic3ViZW50cmllcyA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVzIChzdWJlbnRyeV90KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoc3Vic3ViZW50cmllcyksIDApOwotICBDSEVDS19UT0NfRU5UUlkgKHN1YmVudHJ5X3QsIEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSLCBFTlRSWV9DSDEpOwotICAvKiBjaGVjayBjaGFwdGVyMiAqLwotICBzdWJlbnRyeV90ID0gZ19saXN0X250aF9kYXRhIChzdWJlbnRyaWVzLCAxKTsKLSAgZmFpbF9pZiAoc3ViZW50cnlfdCA9PSBOVUxMKTsKLSAgc3Vic3ViZW50cmllcyA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVzIChzdWJlbnRyeV90KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoc3Vic3ViZW50cmllcyksIDApOwotICBDSEVDS19UT0NfRU5UUlkgKHN1YmVudHJ5X3QsIEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSLCBFTlRSWV9DSDIpOwotCi0gIC8qIGNoZWNrIGVkaXRpb24yICovCi0gIGVudHJ5X3QgPSBnX2xpc3RfbnRoX2RhdGEgKGVudHJpZXMsIDEpOwotICBmYWlsX2lmIChlbnRyeV90ID09IE5VTEwpOwotICBDSEVDS19UT0NfRU5UUlkgKGVudHJ5X3QsIEdTVF9UT0NfRU5UUllfVFlQRV9FRElUSU9OLCBFTlRSWV9FRDIpOwotICBzdWJlbnRyaWVzID0gZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGVudHJ5X3QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChzdWJlbnRyaWVzKSwgMSk7Ci0gIC8qIGNoZWNrIGNoYXB0ZXIzICovCi0gIHN1YmVudHJ5X3QgPSBnX2xpc3RfbnRoX2RhdGEgKHN1YmVudHJpZXMsIDApOwotICBmYWlsX2lmIChzdWJlbnRyeV90ID09IE5VTEwpOwotICBDSEVDS19UT0NfRU5UUlkgKHN1YmVudHJ5X3QsIEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSLCBFTlRSWV9DSDMpOwotICBzdWJzdWJlbnRyaWVzID0gZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKHN1YmVudHJ5X3QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChzdWJzdWJlbnRyaWVzKSwgMSk7Ci0gIC8qIGNoZWNrIHN1YmNoYXB0ZXIxICovCi0gIHN1YmVudHJ5X3QgPSBnX2xpc3RfbnRoX2RhdGEgKHN1YnN1YmVudHJpZXMsIDApOwotICBmYWlsX2lmIChzdWJlbnRyeV90ID09IE5VTEwpOwotICBDSEVDS19UT0NfRU5UUlkgKHN1YmVudHJ5X3QsIEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSLCBFTlRSWV9TVUIxKTsKLSAgc3Vic3ViZW50cmllcyA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVzIChzdWJlbnRyeV90KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoc3Vic3ViZW50cmllcyksIDApOwotfQotCi0vKiBUaGlzIHdob2xlIHRlc3QgaXMgYSBiaXQgcG9pbnRsZXNzIG5vdyB0aGF0IHdlIGp1c3Qgc3R1ZmYgYSByZWYgb2YKLSAqIHRoZSBvcmlnaW5hbCBUT0MgaW50byB0aGUgbWVzc2FnZS9xdWVyeS9ldmVudCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2VyaWFsaXppbmcpCi17Ci0gIEdzdFRvYyAqdG9jLCAqdGVzdF90b2MgPSBOVUxMOwotICBHc3RUb2NFbnRyeSAqZWQsICpjaCwgKnN1YmNoOwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIGdib29sZWFuIHVwZGF0ZWQ7Ci0gIGdjaGFyICp1aWQ7Ci0gIGdpbnQ2NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7Ci0KLSAgdG9jID0gZ3N0X3RvY19uZXcgKEdTVF9UT0NfU0NPUEVfR0xPQkFMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3RvY19nZXRfc2NvcGUgKHRvYyksIEdTVF9UT0NfU0NPUEVfR0xPQkFMKTsKLSAgZmFpbF9pZiAodG9jID09IE5VTEwpOwotICB0YWdzID0gZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19USVRMRSwgVE9DX1RBRywgTlVMTCk7Ci0gIGdzdF90b2Nfc2V0X3RhZ3MgKHRvYywgdGFncyk7Ci0KLSAgLyogY3JlYXRlIGVkaXRpb24xICovCi0gIGVkID0gZ3N0X3RvY19lbnRyeV9uZXcgKEdTVF9UT0NfRU5UUllfVFlQRV9FRElUSU9OLCBFTlRSWV9FRDEpOwotICBmYWlsX2lmIChlZCA9PSBOVUxMKTsKLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXcgKEdTVF9UQUdfVElUTEUsIEVOVFJZX1RBRywgTlVMTCk7Ci0gIGdzdF90b2NfZW50cnlfc2V0X3RhZ3MgKGVkLCB0YWdzKTsKLQotICBDSEVDS19UT0NfRU5UUlkgKGVkLCBHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTiwgRU5UUllfRUQxKTsKLQotICAvKiBhcHBlbmQgY2hhcHRlcjEgdG8gZWRpdGlvbjEgKi8KLSAgY2ggPSBnc3RfdG9jX2VudHJ5X25ldyAoR1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVIsIEVOVFJZX0NIMSk7Ci0gIGZhaWxfaWYgKGNoID09IE5VTEwpOwotICB0YWdzID0gZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19USVRMRSwgRU5UUllfVEFHLCBOVUxMKTsKLSAgZ3N0X3RvY19lbnRyeV9zZXRfdGFncyAoY2gsIHRhZ3MpOwotCi0gIENIRUNLX1RPQ19FTlRSWSAoY2gsIEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSLCBFTlRSWV9DSDEpOwotCi0gIGdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyeSAoZWQsIGNoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGVkKSksCi0gICAgICAxKTsKLQotICAvKiBhcHBlbmQgY2hhcHRlcjIgdG8gZWRpdGlvbjEgKi8KLSAgY2ggPSBnc3RfdG9jX2VudHJ5X25ldyAoR1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVIsIEVOVFJZX0NIMik7Ci0gIGZhaWxfaWYgKGNoID09IE5VTEwpOwotICB0YWdzID0gZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19USVRMRSwgRU5UUllfVEFHLCBOVUxMKTsKLSAgZ3N0X3RvY19lbnRyeV9zZXRfdGFncyAoY2gsIHRhZ3MpOwotCi0gIENIRUNLX1RPQ19FTlRSWSAoY2gsIEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSLCBFTlRSWV9DSDIpOwotCi0gIGdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyeSAoZWQsIGNoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGVkKSksCi0gICAgICAyKTsKLQotICAvKiBhcHBlbmQgZWRpdGlvbjEgdG8gdGhlIFRPQyAqLwotICBnc3RfdG9jX2FwcGVuZF9lbnRyeSAodG9jLCBlZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGdzdF90b2NfZ2V0X2VudHJpZXMgKHRvYykpLCAxKTsKLQotICAvKiB0ZXN0IGdzdF90b2NfZW50cnlfZmluZCgpICovCi0gIGVkID0gTlVMTDsKLSAgZWQgPSBnc3RfdG9jX2ZpbmRfZW50cnkgKHRvYywgRU5UUllfRUQxKTsKLQotICBmYWlsX2lmIChlZCA9PSBOVUxMKTsKLQotICBDSEVDS19UT0NfRU5UUlkgKGVkLCBHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTiwgRU5UUllfRUQxKTsKLQotICAvKiB0ZXN0IGluZm8gR3N0U3RydWN0dXJlICovCi0gIGdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXMgKGNoLCAxMDAsIDEwMDApOwotICBmYWlsX2lmICghZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyAoY2gsICZzdGFydCwgJnN0b3ApKTsKLSAgZmFpbF91bmxlc3MgKHN0YXJ0ID09IDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChzdG9wID09IDEwMDApOwotCi0gIC8qIGNyZWF0ZSBlZGl0aW9uMiAqLwotICBlZCA9IGdzdF90b2NfZW50cnlfbmV3IChHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTiwgRU5UUllfRUQyKTsKLSAgZmFpbF9pZiAoZWQgPT0gTlVMTCk7Ci0gIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3IChHU1RfVEFHX1RJVExFLCBFTlRSWV9UQUcsIE5VTEwpOwotICBnc3RfdG9jX2VudHJ5X3NldF90YWdzIChlZCwgdGFncyk7Ci0KLSAgQ0hFQ0tfVE9DX0VOVFJZIChlZCwgR1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT04sIEVOVFJZX0VEMik7Ci0KLSAgLyogY3JlYXRlIGNoYXB0ZXIzICovCi0gIGNoID0gZ3N0X3RvY19lbnRyeV9uZXcgKEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSLCBFTlRSWV9DSDMpOwotICBmYWlsX2lmIChjaCA9PSBOVUxMKTsKLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXcgKEdTVF9UQUdfVElUTEUsIEVOVFJZX1RBRywgTlVMTCk7Ci0gIGdzdF90b2NfZW50cnlfc2V0X3RhZ3MgKGNoLCB0YWdzKTsKLQotICBDSEVDS19UT0NfRU5UUlkgKGNoLCBHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfQ0gzKTsKLQotICAvKiBjcmVhdGUgc3ViY2hhcHRlcjEgKi8KLSAgc3ViY2ggPSBnc3RfdG9jX2VudHJ5X25ldyAoR1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVIsIEVOVFJZX1NVQjEpOwotICBmYWlsX2lmIChzdWJjaCA9PSBOVUxMKTsKLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXcgKEdTVF9UQUdfVElUTEUsIEVOVFJZX1RBRywgTlVMTCk7Ci0gIGdzdF90b2NfZW50cnlfc2V0X3RhZ3MgKHN1YmNoLCB0YWdzKTsKLQotICBDSEVDS19UT0NfRU5UUlkgKHN1YmNoLCBHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfU1VCMSk7Ci0KLSAgLyogYXBwZW5kIHN1YmNoYXB0ZXIxIHRvIGNoYXB0ZXIzICovCi0gIGdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyeSAoY2gsIHN1YmNoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGNoKSksCi0gICAgICAxKTsKLQotICAvKiBhcHBlbmQgY2hhcHRlcjMgdG8gZWRpdGlvbjIgKi8KLSAgZ3N0X3RvY19lbnRyeV9hcHBlbmRfc3ViX2VudHJ5IChlZCwgY2gpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoZWQpKSwKLSAgICAgIDEpOwotCi0gIC8qIGZpbmFsbHkgYXBwZW5kIGVkaXRpb24yIHRvIHRoZSBUT0MgKi8KLSAgZ3N0X3RvY19hcHBlbmRfZW50cnkgKHRvYywgZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChnc3RfdG9jX2dldF9lbnRyaWVzICh0b2MpKSwgMik7Ci0KLSAgR1NUX0lORk8gKCJjaGVjayBvcmlnaW5hbCBUT0MiKTsKLSAgQ0hFQ0tfVE9DICh0b2MpOwotCi0gIC8qIHRlc3QgZ3N0X3RvY19jb3B5KCkgKi8KLSAgdGVzdF90b2MgPSBnc3RfdG9jX2NvcHkgKHRvYyk7Ci0gIGZhaWxfaWYgKHRlc3RfdG9jID09IE5VTEwpOwotICBHU1RfSU5GTyAoImNoZWNrIFRPQyBjb3B5Iik7Ci0gIENIRUNLX1RPQyAodGVzdF90b2MpOwotICBnc3RfdG9jX3VucmVmICh0ZXN0X3RvYyk7Ci0gIHRlc3RfdG9jID0gTlVMTDsKLQotICAvKiBjaGVjayBUT0MgZXZlbnQgaGFuZGxpbmcgKi8KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3RvYyAodG9jLCBUUlVFKTsKLSAgZmFpbF9pZiAoZXZlbnQgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChldmVudC0+dHlwZSA9PSBHU1RfRVZFTlRfVE9DKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChHU1RfTUlOSV9PQkpFQ1QgKGV2ZW50KSwgIkdzdEV2ZW50IiwgMSk7Ci0KLSAgZ3N0X2V2ZW50X3BhcnNlX3RvYyAoZXZlbnQsICZ0ZXN0X3RvYywgJnVwZGF0ZWQpOwotICBmYWlsX3VubGVzcyAodXBkYXRlZCA9PSBUUlVFKTsKLSAgZmFpbF9pZiAodGVzdF90b2MgPT0gTlVMTCk7Ci0gIEdTVF9JTkZPICgiY2hlY2sgVE9DIHBhcnNlZCBmcm9tIGV2ZW50Iik7Ci0gIENIRUNLX1RPQyAodGVzdF90b2MpOwotICBnc3RfdG9jX3VucmVmICh0ZXN0X3RvYyk7Ci0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB1cGRhdGVkID0gRkFMU0U7Ci0gIHRlc3RfdG9jID0gTlVMTDsKLQotICAvKiBjaGVjayBUT0MgbWVzc2FnZSBoYW5kbGluZyAqLwotICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3RvYyAoTlVMTCwgdG9jLCBUUlVFKTsKLSAgZmFpbF9pZiAobWVzc2FnZSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UtPnR5cGUgPT0gR1NUX01FU1NBR0VfVE9DKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChHU1RfTUlOSV9PQkpFQ1QgKG1lc3NhZ2UpLCAiR3N0TWVzc2FnZSIsIDEpOwotCi0gIGdzdF9tZXNzYWdlX3BhcnNlX3RvYyAobWVzc2FnZSwgJnRlc3RfdG9jLCAmdXBkYXRlZCk7Ci0gIGZhaWxfdW5sZXNzICh1cGRhdGVkID09IFRSVUUpOwotICBmYWlsX2lmICh0ZXN0X3RvYyA9PSBOVUxMKTsKLSAgQ0hFQ0tfVE9DICh0ZXN0X3RvYyk7Ci0gIGdzdF90b2NfdW5yZWYgKHRlc3RfdG9jKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICB0ZXN0X3RvYyA9IE5VTEw7Ci0KLSAgLyogY2hlY2sgVE9DIHNlbGVjdCBldmVudCBoYW5kbGluZyAqLwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfdG9jX3NlbGVjdCAoVEVTVF9VSUQpOwotICBmYWlsX2lmIChldmVudCA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGV2ZW50LT50eXBlID09IEdTVF9FVkVOVF9UT0NfU0VMRUNUKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChHU1RfTUlOSV9PQkpFQ1QgKGV2ZW50KSwgIkdzdEV2ZW50IiwgMSk7Ci0KLSAgZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3QgKGV2ZW50LCAmdWlkKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodWlkLCBURVNUX1VJRCk7Ci0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICBnX2ZyZWUgKHVpZCk7Ci0KLSAgLyogRklYTUU6IHRvYyB2YWxpZGF0aW9uIC8gdmVyaWZpY2F0aW9uIHNob3VsZCBwcm9iYWJseSBiZSBkb25lIG9uIHRoZSBmbHkKLSAgICogd2hpbGUgY3JlYXRpbmcgaXQsIGFuZCBub3Qgd2hlbiBwdXR0aW5nIHRoZSB0b2MgaW4gZXZlbnRzIG9yIG1lc3NhZ2VzID8gKi8KLSNpZiAwCi0gIC8qIHRoYXQncyB3cm9uZyBjb2RlLCB3ZSBzaG91bGQgZmFpbCAqLwotICBjaCA9IGdzdF90b2NfZW50cnlfbmV3IChHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfQ0g0KTsKLSAgdG9jLT5lbnRyaWVzID0gZ19saXN0X3ByZXBlbmQgKHRvYy0+ZW50cmllcywgY2gpOwotICBBU1NFUlRfQ1JJVElDQUwgKG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfdG9jIChOVUxMLCB0b2MsIFRSVUUpKTsKLQotICAvKiBhbmQgeWV0IGFub3RoZXIgb25lICovCi0gIHRvYy0+ZW50cmllcyA9IGdfbGlzdF9yZW1vdmUgKHRvYy0+ZW50cmllcywgY2gpOwotICBnc3RfdG9jX2VudHJ5X3VucmVmIChjaCk7Ci0gIGVkID0gZ3N0X3RvY19lbnRyeV9uZXcgKEdTVF9UT0NfRU5UUllfVFlQRV9FRElUSU9OLCBFTlRSWV9FRDMpOwotICBjaCA9IChHc3RUb2NFbnRyeSAqKSAodG9jLT5lbnRyaWVzLT5kYXRhKTsKLSAgY2gtPnN1YmVudHJpZXMgPSBnX2xpc3RfcHJlcGVuZCAoY2gtPnN1YmVudHJpZXMsIGVkKTsKLSAgQVNTRVJUX1dBUk5JTkcgKG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfdG9jIChOVUxMLCB0b2MsIFRSVUUpKTsKLSNlbmRpZgotCi0gIGdzdF90b2NfdW5yZWYgKHRvYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF90b2Nfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0VG9jIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NlcmlhbGl6aW5nKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF90b2MpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L2dzdHRvY3NldHRlci5jIGIvdGVzdHMvY2hlY2svZ3N0L2dzdHRvY3NldHRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDdjMWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R0b2NzZXR0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDM4NSArMCwwIEBACi0vKiBHU3RyZWFtZXIgR3N0VG9jU2V0dGVyIGludGVyZmFjZSB1bml0IHRlc3RzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIEVOVFJZX0VEMSAgICAgICAiL2VkaXRpb24xIgotI2RlZmluZSBFTlRSWV9FRDIgICAgICAgIi9lZGl0aW9uMiIKLSNkZWZpbmUgRU5UUllfRUQzICAgICAgICJ0ZXN0LWVkaXRpb24iCi0KLSNkZWZpbmUgRU5UUllfQ0gxICAgICAgICIvZWRpdGlvbjEvY2hhcHRlcjEiCi0jZGVmaW5lIEVOVFJZX0NIMiAgICAgICAiL2VkaXRpb24xL2NoYXB0ZXIyIgotI2RlZmluZSBFTlRSWV9DSDMgICAgICAgIi9lZGl0aW9uMi9jaGFwdGVyMyIKLSNkZWZpbmUgRU5UUllfQ0g0ICAgICAgICIvdGVzdC1jaGFwdGVyIgotCi0jZGVmaW5lIEVOVFJZX1NVQjEgICAgICAiL2VkaXRpb24yL2NoYXB0ZXIzL3N1YmNoYXB0ZXIxIgotCi0jZGVmaW5lIEVOVFJZX1RBRyAgICAgICAiRW50cnlUYWciCi0jZGVmaW5lIFRPQ19UQUcgICAgICAgICAiVG9jVGFnIgotCi1zdGF0aWMgdm9pZAotQ0hFQ0tfVE9DX0VOVFJZIChHc3RUb2NFbnRyeSAqIGVudHJ5X2MsIEdzdFRvY0VudHJ5VHlwZSB0eXBlX2MsCi0gICAgY29uc3QgZ2NoYXIgKiB1aWRfYykKLXsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgZ2NoYXIgKnRhZ19jOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF90b2NfZW50cnlfZ2V0X3VpZCAoZW50cnlfYyksIHVpZF9jKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90b2NfZW50cnlfZ2V0X2VudHJ5X3R5cGUgKGVudHJ5X2MpID09IHR5cGVfYyk7Ci0KLSAgdGFncyA9IGdzdF90b2NfZW50cnlfZ2V0X3RhZ3MgKGVudHJ5X2MpOwotICBmYWlsX3VubGVzcyAodGFncyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX1RJVExFLCAmdGFnX2MpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodGFnX2MsIEVOVFJZX1RBRyk7Ci0gIGdfZnJlZSAodGFnX2MpOwotfQotCi1zdGF0aWMgdm9pZAotQ0hFQ0tfVE9DIChHc3RUb2MgKiB0b2NfdCkKLXsKLSAgR3N0VG9jRW50cnkgKmVudHJ5X3QsICpzdWJlbnRyeV90OwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBHTGlzdCAqZW50cmllcywgKnN1YmVudHJpZXMsICpzdWJzdWJlbnRyaWVzOwotICBnY2hhciAqdGFnX3Q7Ci0KLSAgLyogZHVtcCBUT0MgKi8KLSAgZ3N0X3RvY19kdW1wICh0b2NfdCk7Ci0KLSAgLyogY2hlY2sgVE9DICovCi0gIHRhZ3MgPSBnc3RfdG9jX2dldF90YWdzICh0b2NfdCk7Ci0gIGZhaWxfdW5sZXNzICh0YWdzICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZ0YWdfdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0YWdfdCwgVE9DX1RBRyk7Ci0gIGdfZnJlZSAodGFnX3QpOwotCi0gIGVudHJpZXMgPSBnc3RfdG9jX2dldF9lbnRyaWVzICh0b2NfdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGVudHJpZXMpLCAyKTsKLSAgLyogY2hlY2sgZWRpdGlvbjEgKi8KLSAgZW50cnlfdCA9IGdfbGlzdF9udGhfZGF0YSAoZW50cmllcywgMCk7Ci0gIGZhaWxfaWYgKGVudHJ5X3QgPT0gTlVMTCk7Ci0gIHN1YmVudHJpZXMgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoZW50cnlfdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKHN1YmVudHJpZXMpLCAyKTsKLSAgQ0hFQ0tfVE9DX0VOVFJZIChlbnRyeV90LCBHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTiwgRU5UUllfRUQxKTsKLSAgLyogY2hlY2sgY2hhcHRlcjEgKi8KLSAgc3ViZW50cnlfdCA9IGdfbGlzdF9udGhfZGF0YSAoc3ViZW50cmllcywgMCk7Ci0gIGZhaWxfaWYgKHN1YmVudHJ5X3QgPT0gTlVMTCk7Ci0gIHN1YnN1YmVudHJpZXMgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoc3ViZW50cnlfdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKHN1YnN1YmVudHJpZXMpLCAwKTsKLSAgQ0hFQ0tfVE9DX0VOVFJZIChzdWJlbnRyeV90LCBHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfQ0gxKTsKLSAgLyogY2hlY2sgY2hhcHRlcjIgKi8KLSAgc3ViZW50cnlfdCA9IGdfbGlzdF9udGhfZGF0YSAoc3ViZW50cmllcywgMSk7Ci0gIGZhaWxfaWYgKHN1YmVudHJ5X3QgPT0gTlVMTCk7Ci0gIHN1YnN1YmVudHJpZXMgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoc3ViZW50cnlfdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKHN1YnN1YmVudHJpZXMpLCAwKTsKLSAgQ0hFQ0tfVE9DX0VOVFJZIChzdWJlbnRyeV90LCBHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfQ0gyKTsKLSAgLyogY2hlY2sgZWRpdGlvbjIgKi8KLSAgZW50cnlfdCA9IGdfbGlzdF9udGhfZGF0YSAoZW50cmllcywgMSk7Ci0gIGZhaWxfaWYgKGVudHJ5X3QgPT0gTlVMTCk7Ci0gIHN1YmVudHJpZXMgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoZW50cnlfdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKHN1YmVudHJpZXMpLCAxKTsKLSAgQ0hFQ0tfVE9DX0VOVFJZIChlbnRyeV90LCBHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTiwgRU5UUllfRUQyKTsKLSAgLyogY2hlY2sgY2hhcHRlcjMgKi8KLSAgc3ViZW50cnlfdCA9IGdfbGlzdF9udGhfZGF0YSAoc3ViZW50cmllcywgMCk7Ci0gIGZhaWxfaWYgKHN1YmVudHJ5X3QgPT0gTlVMTCk7Ci0gIHN1YnN1YmVudHJpZXMgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoc3ViZW50cnlfdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKHN1YnN1YmVudHJpZXMpLCAxKTsKLSAgQ0hFQ0tfVE9DX0VOVFJZIChzdWJlbnRyeV90LCBHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfQ0gzKTsKLSAgLyogY2hlY2sgc3ViY2hhcHRlcjEgKi8KLSAgc3ViZW50cnlfdCA9IGdfbGlzdF9udGhfZGF0YSAoc3Vic3ViZW50cmllcywgMCk7Ci0gIGZhaWxfaWYgKHN1YmVudHJ5X3QgPT0gTlVMTCk7Ci0gIHN1YnN1YmVudHJpZXMgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoc3ViZW50cnlfdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKHN1YnN1YmVudHJpZXMpLCAwKTsKLSAgQ0hFQ0tfVE9DX0VOVFJZIChzdWJlbnRyeV90LCBHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfU1VCMSk7Ci19Ci0KLS8qIHNvbWUgbWluaW1hbCBHc3RUb2NTZXR0ZXIgb2JqZWN0ICovCi0jZGVmaW5lIEdTVF9UWVBFX0RVTU1ZX0VOQyBnc3RfZHVtbXlfZW5jX2dldF90eXBlKCkKLQotdHlwZWRlZiBHc3RFbGVtZW50IEdzdER1bW15RW5jOwotdHlwZWRlZiBHc3RFbGVtZW50Q2xhc3MgR3N0RHVtbXlFbmNDbGFzczsKLQotR1R5cGUgZ3N0X2R1bW15X2VuY19nZXRfdHlwZSAodm9pZCk7Ci1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RHVtbXlFbmMsIGdzdF9kdW1teV9lbmMsCi0gICAgR1NUX1RZUEVfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9UT0NfU0VUVEVSLCBOVUxMKSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHVtbXlfZW5jX2NsYXNzX2luaXQgKEdzdER1bW15RW5jQ2xhc3MgKiBrbGFzcykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdW1teV9lbmNfaW5pdCAoR3N0RHVtbXlFbmMgKiBlbmMpCi17Ci19Ci0KLXN0YXRpYyBHc3RUb2MgKgotY3JlYXRlX3RvYyAodm9pZCkKLXsKLSAgR3N0VG9jICp0b2M7Ci0gIEdzdFRvY0VudHJ5ICplZCwgKmNoLCAqc3ViY2g7Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0KLSAgdG9jID0gZ3N0X3RvY19uZXcgKEdTVF9UT0NfU0NPUEVfR0xPQkFMKTsKLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX1RJVExFLCBUT0NfVEFHLCBOVUxMKTsKLSAgZ3N0X3RvY19zZXRfdGFncyAodG9jLCB0YWdzKTsKLQotICAvKiBjcmVhdGUgZWRpdGlvbjEgKi8KLSAgZWQgPSBnc3RfdG9jX2VudHJ5X25ldyAoR1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT04sIEVOVFJZX0VEMSk7Ci0gIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19USVRMRSwgRU5UUllfVEFHLCBOVUxMKTsKLSAgZ3N0X3RvY19lbnRyeV9zZXRfdGFncyAoZWQsIHRhZ3MpOwotCi0gIC8qIGFwcGVuZCBjaGFwdGVyMSB0byBlZGl0aW9uMSAqLwotICBjaCA9IGdzdF90b2NfZW50cnlfbmV3IChHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfQ0gxKTsKLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX1RJVExFLCBFTlRSWV9UQUcsIE5VTEwpOwotICBnc3RfdG9jX2VudHJ5X3NldF90YWdzIChjaCwgdGFncyk7Ci0KLSAgZ3N0X3RvY19lbnRyeV9hcHBlbmRfc3ViX2VudHJ5IChlZCwgY2gpOwotCi0gIC8qIGFwcGVuZCBjaGFwdGVyMiB0byBlZGl0aW9uMSAqLwotICBjaCA9IGdzdF90b2NfZW50cnlfbmV3IChHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfQ0gyKTsKLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX1RJVExFLCBFTlRSWV9UQUcsIE5VTEwpOwotICBnc3RfdG9jX2VudHJ5X3NldF90YWdzIChjaCwgdGFncyk7Ci0KLSAgZ3N0X3RvY19lbnRyeV9hcHBlbmRfc3ViX2VudHJ5IChlZCwgY2gpOwotCi0gIC8qIGFwcGVuZCBlZGl0aW9uMSB0byB0aGUgVE9DICovCi0gIGdzdF90b2NfYXBwZW5kX2VudHJ5ICh0b2MsIGVkKTsKLQotICAvKiBjcmVhdGUgZWRpdGlvbjIgKi8KLSAgZWQgPSBnc3RfdG9jX2VudHJ5X25ldyAoR1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT04sIEVOVFJZX0VEMik7Ci0gIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19USVRMRSwgRU5UUllfVEFHLCBOVUxMKTsKLSAgZ3N0X3RvY19lbnRyeV9zZXRfdGFncyAoZWQsIHRhZ3MpOwotCi0gIC8qIGNyZWF0ZSBjaGFwdGVyMyAqLwotICBjaCA9IGdzdF90b2NfZW50cnlfbmV3IChHU1RfVE9DX0VOVFJZX1RZUEVfQ0hBUFRFUiwgRU5UUllfQ0gzKTsKLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX1RJVExFLCBFTlRSWV9UQUcsIE5VTEwpOwotICBnc3RfdG9jX2VudHJ5X3NldF90YWdzIChjaCwgdGFncyk7Ci0KLSAgLyogY3JlYXRlIHN1YmNoYXB0ZXIxICovCi0gIHN1YmNoID0gZ3N0X3RvY19lbnRyeV9uZXcgKEdTVF9UT0NfRU5UUllfVFlQRV9DSEFQVEVSLCBFTlRSWV9TVUIxKTsKLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX1RJVExFLCBFTlRSWV9UQUcsIE5VTEwpOwotICBnc3RfdG9jX2VudHJ5X3NldF90YWdzIChzdWJjaCwgdGFncyk7Ci0KLSAgLyogYXBwZW5kIHN1YmNoYXB0ZXIxIHRvIGNoYXB0ZXIzICovCi0gIGdzdF90b2NfZW50cnlfYXBwZW5kX3N1Yl9lbnRyeSAoY2gsIHN1YmNoKTsKLQotICAvKiBhcHBlbmQgY2hhcHRlcjMgdG8gZWRpdGlvbjIgKi8KLSAgZ3N0X3RvY19lbnRyeV9hcHBlbmRfc3ViX2VudHJ5IChlZCwgY2gpOwotCi0gIC8qIGZpbmFsbHkgYXBwZW5kIGVkaXRpb24yIHRvIHRoZSBUT0MgKi8KLSAgZ3N0X3RvY19hcHBlbmRfZW50cnkgKHRvYywgZWQpOwotCi0gIHJldHVybiB0b2M7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NldCkKLXsKLSAgR3N0VG9jICp0b2M7Ci0jaWYgMAotICBHc3RUb2NFbnRyeSAqZW50cnksICplZDsKLSNlbmRpZgotICBHc3RUb2NTZXR0ZXIgKnNldHRlcjsKLSAgR3N0RWxlbWVudCAqZW5jOwotCi0gIGVuYyA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfRFVNTVlfRU5DLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGVuYyAhPSBOVUxMKTsKLQotICBzZXR0ZXIgPSBHU1RfVE9DX1NFVFRFUiAoZW5jKTsKLQotICB0b2MgPSBjcmVhdGVfdG9jICgpOwotICBmYWlsX3VubGVzcyAodG9jICE9IE5VTEwpOwotCi0gIGdzdF90b2Nfc2V0dGVyX3NldF90b2MgKHNldHRlciwgdG9jKTsKLQotICBnc3RfdG9jX3VucmVmICh0b2MpOwotICB0b2MgPSBnc3RfdG9jX3NldHRlcl9nZXRfdG9jIChzZXR0ZXIpOwotCi0gIENIRUNLX1RPQyAodG9jKTsKLQotI2lmIDAKLSAgLyogdGVzdCBlbnRyeSBhZGRpbmcgaW50byB0aGUgcm9vdCBUT0MgKi8KLSAgZW50cnkgPSBnX2xpc3RfbGFzdCAodG9jLT5lbnRyaWVzKS0+ZGF0YTsKLSAgdG9jLT5lbnRyaWVzID0gZ19saXN0X3JlbW92ZSAodG9jLT5lbnRyaWVzLCBlbnRyeSk7Ci0KLSAgZ3N0X3RvY19zZXR0ZXJfc2V0X3RvYyAoc2V0dGVyLCB0b2MpOwotICBnc3RfdG9jX3NldHRlcl9hZGRfdG9jX2VudHJ5IChzZXR0ZXIsICIwIiwgZW50cnkpOwotCi0gIGdzdF90b2NfdW5yZWYgKHRvYyk7Ci0gIGdzdF90b2NfZW50cnlfdW5yZWYgKGVudHJ5KTsKLSAgdG9jID0gZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvYyAoc2V0dGVyKTsKLQotICBDSEVDS19UT0MgKHRvYyk7Ci0jZW5kaWYKLQotI2lmIDAKLSAgLyogdGVzdCBlbnRyeSBhZGRpbmcgaW50byB0aGUgYXJiaXRyYXJ5IGVudHJ5ICovCi0gIGVudHJ5ID0gZ3N0X3RvY19maW5kX2VudHJ5ICh0b2MsIEVOVFJZX0NIMik7Ci0gIGZhaWxfaWYgKGVudHJ5ID09IE5VTEwpOwotCi0gIGVkID0gdG9jLT5lbnRyaWVzLT5kYXRhOwotICBlZC0+c3ViZW50cmllcyA9IGdfbGlzdF9yZW1vdmUgKGVkLT5zdWJlbnRyaWVzLCBlbnRyeSk7Ci0KLSAgZ3N0X3RvY19zZXR0ZXJfYWRkX3RvY19lbnRyeSAoc2V0dGVyLCBlZC0+dWlkLCBlbnRyeSk7Ci0KLSAgQ0hFQ0tfVE9DICh0b2MpOwotI2VuZGlmCi0KLSAgZ3N0X3RvY191bnJlZiAodG9jKTsKLSAgZ3N0X3RvY19zZXR0ZXJfcmVzZXQgKHNldHRlcik7Ci0gIHRvYyA9IGdzdF90b2Nfc2V0dGVyX2dldF90b2MgKHNldHRlcik7Ci0KLSAgZmFpbF91bmxlc3MgKHRvYyA9PSBOVUxMKTsKLQotICBnX29iamVjdF91bnJlZiAoZW5jKTsKLX0KLQotR1NUX0VORF9URVNUIHN0YXRpYyBpbnQgc3Bpbl9hbmRfd2FpdCA9IDE7Ci1zdGF0aWMgaW50IHRocmVhZHNfcnVubmluZyA9IDA7Ci0KLSNkZWZpbmUgVEhSRUFEU19URVNUX1NFQ09ORFMgMS41Ci0KLXN0YXRpYyBncG9pbnRlcgotdGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMSAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0VG9jICp0b2M7Ci0gIEdzdFRvY1NldHRlciAqc2V0dGVyID0gR1NUX1RPQ19TRVRURVIgKGRhdGEpOwotICBHVGltZXIgKnRpbWVyOwotCi0gIHRvYyA9IGNyZWF0ZV90b2MgKCk7Ci0gIHRpbWVyID0gZ190aW1lcl9uZXcgKCk7Ci0KLSAgZ19hdG9taWNfaW50X2luYyAoJnRocmVhZHNfcnVubmluZyk7Ci0gIHdoaWxlIChnX2F0b21pY19pbnRfZ2V0ICgmc3Bpbl9hbmRfd2FpdCkpCi0gICAgZ191c2xlZXAgKDApOwotCi0gIEdTVF9JTkZPICgiR28hIik7Ci0gIGdfdGltZXJfc3RhcnQgKHRpbWVyKTsKLQotICB3aGlsZSAoZ190aW1lcl9lbGFwc2VkICh0aW1lciwgTlVMTCkgPCBUSFJFQURTX1RFU1RfU0VDT05EUykKLSAgICBnc3RfdG9jX3NldHRlcl9zZXRfdG9jIChzZXR0ZXIsIHRvYyk7Ci0KLSAgZ3N0X3RvY191bnJlZiAodG9jKTsKLSAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7Ci0gIEdTVF9JTkZPICgiRG9uZSIpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXRlc3RfdGhyZWFkc190aHJlYWRfZnVuYzIgKGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdFRvYyAqdG9jOwotICBHc3RUb2NTZXR0ZXIgKnNldHRlciA9IEdTVF9UT0NfU0VUVEVSIChkYXRhKTsKLSAgR1RpbWVyICp0aW1lcjsKLQotICB0b2MgPSBjcmVhdGVfdG9jICgpOwotICB0aW1lciA9IGdfdGltZXJfbmV3ICgpOwotCi0gIGdfYXRvbWljX2ludF9pbmMgKCZ0aHJlYWRzX3J1bm5pbmcpOwotICB3aGlsZSAoZ19hdG9taWNfaW50X2dldCAoJnNwaW5fYW5kX3dhaXQpKQotICAgIGdfdXNsZWVwICgwKTsKLQotICBHU1RfSU5GTyAoIkdvISIpOwotICBnX3RpbWVyX3N0YXJ0ICh0aW1lcik7Ci0KLSAgd2hpbGUgKGdfdGltZXJfZWxhcHNlZCAodGltZXIsIE5VTEwpIDwgVEhSRUFEU19URVNUX1NFQ09ORFMpCi0gICAgZ3N0X3RvY19zZXR0ZXJfc2V0X3RvYyAoc2V0dGVyLCB0b2MpOwotCi0gIGdzdF90b2NfdW5yZWYgKHRvYyk7Ci0gIGdfdGltZXJfZGVzdHJveSAodGltZXIpOwotICBHU1RfSU5GTyAoIkRvbmUiKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdwb2ludGVyCi10ZXN0X3RocmVhZHNfdGhyZWFkX2Z1bmMzIChncG9pbnRlciBkYXRhKQotewotICBHc3RUb2NTZXR0ZXIgKnNldHRlciA9IEdTVF9UT0NfU0VUVEVSIChkYXRhKTsKLSAgR1RpbWVyICp0aW1lcjsKLQotICB0aW1lciA9IGdfdGltZXJfbmV3ICgpOwotCi0gIGdfYXRvbWljX2ludF9pbmMgKCZ0aHJlYWRzX3J1bm5pbmcpOwotICB3aGlsZSAoZ19hdG9taWNfaW50X2dldCAoJnNwaW5fYW5kX3dhaXQpKQotICAgIGdfdXNsZWVwICgwKTsKLQotICBHU1RfSU5GTyAoIkdvISIpOwotICBnX3RpbWVyX3N0YXJ0ICh0aW1lcik7Ci0KLSAgd2hpbGUgKGdfdGltZXJfZWxhcHNlZCAodGltZXIsIE5VTEwpIDwgVEhSRUFEU19URVNUX1NFQ09ORFMpIHsKLSAgICBnc3RfdG9jX3NldHRlcl9yZXNldCAoc2V0dGVyKTsKLSAgfQotCi0gIGdfdGltZXJfZGVzdHJveSAodGltZXIpOwotICBHU1RfSU5GTyAoIkRvbmUiKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGhyZWFkcykKLXsKLSAgR3N0VG9jU2V0dGVyICpzZXR0ZXI7Ci0gIEdUaHJlYWQgKnRocmVhZHNbM107Ci0KLSAgc2V0dGVyID0gR1NUX1RPQ19TRVRURVIgKGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfRFVNTVlfRU5DLCBOVUxMKSk7Ci0KLSAgc3Bpbl9hbmRfd2FpdCA9IFRSVUU7Ci0gIHRocmVhZHNbMF0gPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgdGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMSwKLSAgICAgIHNldHRlciwgTlVMTCk7Ci0gIHRocmVhZHNbMV0gPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgdGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMiwKLSAgICAgIHNldHRlciwgTlVMTCk7Ci0gIHRocmVhZHNbMl0gPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgdGVzdF90aHJlYWRzX3RocmVhZF9mdW5jMywKLSAgICAgIHNldHRlciwgTlVMTCk7Ci0KLSAgd2hpbGUgKGdfYXRvbWljX2ludF9nZXQgKCZ0aHJlYWRzX3J1bm5pbmcpIDwgMykKLSAgICBnX3VzbGVlcCAoMTApOwotCi0gIGdfYXRvbWljX2ludF9zZXQgKCZzcGluX2FuZF93YWl0LCBGQUxTRSk7Ci0KLSAgZ190aHJlYWRfam9pbiAodGhyZWFkc1swXSk7Ci0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZHNbMV0pOwotICBnX3RocmVhZF9qb2luICh0aHJlYWRzWzJdKTsKLQotICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKHNldHRlcikpOwotfQotCi1HU1RfRU5EX1RFU1Qgc3RhdGljIFN1aXRlICoKLWdzdF90b2Nfc2V0dGVyX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdFRvY1NldHRlciIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGhyZWFkcyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfdG9jX3NldHRlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0dHJhY2VycmVjb3JkLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0dHJhY2VycmVjb3JkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMmQ2ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdHRyYWNlcnJlY29yZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIFVuaXQgdGVzdHMgZm9yIEdzdFRyYWNlclJlY29yZAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dHJhY2VycmVjb3JkLmg+Ci0KLXN0YXRpYyBHTGlzdCAqbWVzc2FnZXM7ICAgICAgICAgLyogTlVMTCAqLwotc3RhdGljIGdib29sZWFuIHNhdmVfbWVzc2FnZXM7ICAvKiBGQUxTRSAqLwotCi1zdGF0aWMgdm9pZAotdHJhY2VyX2xvZ19mdW5jIChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksCi0gICAgR3N0RGVidWdMZXZlbCBsZXZlbCwgY29uc3QgZ2NoYXIgKiBmaWxlLCBjb25zdCBnY2hhciAqIGZ1bmN0aW9uLAotICAgIGdpbnQgbGluZSwgR09iamVjdCAqIG9iamVjdCwgR3N0RGVidWdNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgdW51c2VkKQotewotICBjb25zdCBnY2hhciAqZGJnX21zZzsKLQotICBpZiAoIXNhdmVfbWVzc2FnZXMgfHwgbGV2ZWwgIT0gR1NUX0xFVkVMX1RSQUNFIHx8Ci0gICAgICAhZ19zdHJfZXF1YWwgKGNhdGVnb3J5LT5uYW1lLCAiR1NUX1RSQUNFUiIpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgZGJnX21zZyA9IGdzdF9kZWJ1Z19tZXNzYWdlX2dldCAobWVzc2FnZSk7Ci0gIGZhaWxfdW5sZXNzIChkYmdfbXNnICE9IE5VTEwpOwotCi0gIG1lc3NhZ2VzID0gZ19saXN0X2FwcGVuZCAobWVzc2FnZXMsIGdfc3RyZHVwIChkYmdfbXNnKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cCAodm9pZCkKLXsKLSAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKGdzdF9kZWJ1Z19sb2dfZGVmYXVsdCk7Ci0gIGdzdF9kZWJ1Z19hZGRfbG9nX2Z1bmN0aW9uICh0cmFjZXJfbG9nX2Z1bmMsIE5VTEwsIE5VTEwpOwotICBnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mb3JfbmFtZSAoIkdTVF9UUkFDRVIiLCBHU1RfTEVWRUxfVFJBQ0UpOwotICBtZXNzYWdlcyA9IE5VTEw7Ci0gIHNhdmVfbWVzc2FnZXMgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXAgKHZvaWQpCi17Ci0gIHNhdmVfbWVzc2FnZXMgPSBGQUxTRTsKLSAgZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUgKCJHU1RfVFJBQ0VSIiwgR1NUX0xFVkVMX05PTkUpOwotICBnc3RfZGVidWdfYWRkX2xvZ19mdW5jdGlvbiAoZ3N0X2RlYnVnX2xvZ19kZWZhdWx0LCBOVUxMLCBOVUxMKTsKLSAgZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24gKHRyYWNlcl9sb2dfZnVuYyk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKG1lc3NhZ2VzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSk7Ci0gIG1lc3NhZ2VzID0gTlVMTDsKLX0KLQotCi1HU1RfU1RBUlRfVEVTVCAoc2VyaWFsaXplX21lc3NhZ2VfbG9nZ2luZykKLXsKLSAgR3N0VHJhY2VyUmVjb3JkICp0cjsKLSAgZ2NoYXIgKnN0cjsKLQotICAvKiAqSU5ERU5ULU9GRiogKi8KLSAgdHIgPSBnc3RfdHJhY2VyX3JlY29yZF9uZXcgKCJ0ZXN0LmNsYXNzIiwKLSAgICAgICJzdHJpbmciLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmFsdWUiLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0dUWVBFLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgIE5VTEwpLAotICAgICAgTlVMTCk7Ci0gIC8qICpJTkRFTlQtT04qICovCi0KLSAgc2F2ZV9tZXNzYWdlcyA9IFRSVUU7Ci0gIGdzdF90cmFjZXJfcmVjb3JkX2xvZyAodHIsICJ0ZXN0Iik7Ci0gIHNhdmVfbWVzc2FnZXMgPSBGQUxTRTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChtZXNzYWdlcyksIDEpOwotICBzdHIgPSAoZ2NoYXIgKikgbWVzc2FnZXMtPmRhdGE7Ci0gIGZhaWxfdW5sZXNzIChzdHIgIT0gTlVMTCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHRyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUIChzZXJpYWxpemVfc3RhdGljX3JlY29yZCkKLXsKLSAgR3N0VHJhY2VyUmVjb3JkICp0cjsKLSAgR3N0U3RydWN0dXJlICpzOwotICBnY2hhciAqc3RyOwotICBnY2hhciAqc3RyX3ZhbDsKLSAgZ2ludCBpbnRfdmFsOwotICBnYm9vbGVhbiBib29sX3ZhbDsKLSAgR3N0UGFkRGlyZWN0aW9uIGVudW1fdmFsOwotCi0gIC8qICpJTkRFTlQtT0ZGKiAqLwotICB0ciA9IGdzdF90cmFjZXJfcmVjb3JkX25ldyAoInRlc3QuY2xhc3MiLAotICAgICAgInN0cmluZyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgTlVMTCksCi0gICAgICAiaW50IiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX0lOVCwKLSAgICAgICAgICBOVUxMKSwKLSAgICAgICJib29sIiwgR1NUX1RZUEVfU1RSVUNUVVJFLCBnc3Rfc3RydWN0dXJlX25ldyAoInZhbHVlIiwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9HVFlQRSwgR19UWVBFX0JPT0xFQU4sCi0gICAgICAgICAgTlVMTCksCi0gICAgICAiZW51bSIsIEdTVF9UWVBFX1NUUlVDVFVSRSwgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2YWx1ZSIsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfR1RZUEUsIEdTVF9UWVBFX1BBRF9ESVJFQ1RJT04sCi0gICAgICAgICAgTlVMTCksCi0gICAgICBOVUxMKTsKLSAgLyogKklOREVOVC1PTiogKi8KLQotICBzYXZlX21lc3NhZ2VzID0gVFJVRTsKLSAgZ3N0X3RyYWNlcl9yZWNvcmRfbG9nICh0ciwgInRlc3QiLCAxLCBUUlVFLCBHU1RfUEFEX1NSQyk7Ci0gIHNhdmVfbWVzc2FnZXMgPSBGQUxTRTsKLQotICBzdHIgPSAoZ2NoYXIgKikgbWVzc2FnZXMtPmRhdGE7Ci0gIEdTVF9JTkZPICgic2VyaWFsaXplZCB0byAnJXMnIiwgc3RyKTsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHMgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksICJ0ZXN0Iik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLAotICAgICAgICAgICJzdHJpbmciLCBHX1RZUEVfU1RSSU5HLCAmc3RyX3ZhbCwKLSAgICAgICAgICAiaW50IiwgR19UWVBFX0lOVCwgJmludF92YWwsCi0gICAgICAgICAgImJvb2wiLCBHX1RZUEVfQk9PTEVBTiwgJmJvb2xfdmFsLAotICAgICAgICAgICJlbnVtIiwgR1NUX1RZUEVfUEFEX0RJUkVDVElPTiwgJmVudW1fdmFsLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGludF92YWwsIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHJfdmFsLCAidGVzdCIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChib29sX3ZhbCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGVudW1fdmFsLCBHU1RfUEFEX1NSQyk7Ci0gIGdfZnJlZSAoc3RyX3ZhbCk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgZ19vYmplY3RfdW5yZWYgKHRyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfdHJhY2VyX3JlY29yZF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RUcmFjZXJSZWNvcmQiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgicmVjb3JkIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKHRjX2NoYWluLCBzZXR1cCwgY2xlYW51cCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VyaWFsaXplX21lc3NhZ2VfbG9nZ2luZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgc2VyaWFsaXplX3N0YXRpY19yZWNvcmQpOwotCi0gIC8qIEZJWE1FOiBhZGQgbW9yZSB0ZXN0cywgZS5nLiBlbnVtcywgcG9pbnRlciB0eXBlcyBhbmQgb3B0aW9uYWwgZmllbGRzICovCi0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfdHJhY2VyX3JlY29yZCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmMgYi90ZXN0cy9jaGVjay9nc3QvZ3N0dXJpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3Y2U2ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L2dzdHVyaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxMCArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgR3N0VVJJCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wcm90b2NvbF9jYXNlKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKEdTVF9VUklfU1JDLCAiZmlsZTovLy9mb28vYmFyIiwgTlVMTCwKLSAgICAgICZlcnIpOwotCi0gIC8qIG5vIGVsZW1lbnQ/IHByb2JhYmx5IG5vIHJlZ2lzdHJ5LCBiYWlsIG91dCAqLwotICBpZiAoZWxlbWVudCA9PSBOVUxMICYmIGVyci0+Y29kZSA9PSBHU1RfVVJJX0VSUk9SX1VOU1VQUE9SVEVEX1BST1RPQ09MKSB7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoR1NUX1VSSV9TUkMsICJGSUxFOi8vL2Zvby9iYXIiLCBOVUxMLAotICAgICAgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50ICE9IE5VTEwsCi0gICAgICAiR290IHNvdXJjZSBmb3IgJ2ZpbGU6Ly8nIFVSSSBidXQgbm90IGZvciAnRklMRTovLycgVVJJIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VyaV9nZXRfbG9jYXRpb24pCi17Ci0gIGdjaGFyICpsOwotCi0gIC8qIFVSSSB3aXRoIG5vIGxvY2F0aW9uIHNob3VsZCByZXR1cm4gZW1wdHkgc3RyaW5nICovCi0gIGwgPSBnc3RfdXJpX2dldF9sb2NhdGlvbiAoImR2ZDovLyIpOwotICBmYWlsX3VubGVzcyAobCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobCwgIiIpOwotICBnX2ZyZWUgKGwpOwotCi0gIC8qIFVSSSB3aXRoIGhvc3RuYW1lICovCi0gIGwgPSBnc3RfdXJpX2dldF9sb2NhdGlvbiAoInNtYjovL3N1cGVyY29tcHV0ZXIvcGF0aC90by9maWxlIik7Ci0gIGZhaWxfdW5sZXNzIChsICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLCAic3VwZXJjb21wdXRlci9wYXRoL3RvL2ZpbGUiKTsKLSAgZ19mcmVlIChsKTsKLQotICAvKiBVUkkgKi8KLSAgbCA9IGdzdF91cmlfZ2V0X2xvY2F0aW9uICgiZmlsZTovLy9wYXRoL3RvL2ZpbGUiKTsKLSAgZmFpbF91bmxlc3MgKGwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGwsICIvcGF0aC90by9maWxlIik7Ci0gIGdfZnJlZSAobCk7Ci0KLSAgLyogdW5lc2NhcGluZyAqLwotICBsID0gZ3N0X3VyaV9nZXRfbG9jYXRpb24gKCJmaWxlOi8vL3BhdGgvdG8vc29tZSUyMGZpbGUiKTsKLSAgZmFpbF91bmxlc3MgKGwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGwsICIvcGF0aC90by9zb21lIGZpbGUiKTsKLSAgZ19mcmVlIChsKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0jaWZkZWYgR19PU19XSU4zMgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93aW4zMl91cmkpCi17Ci0gIGdjaGFyICp1cmksICpsOwotCi0gIHVyaSA9IGdfc3RyZHVwICgiZmlsZTovLy9jOi9teSUyMG11c2ljL2Zvby5vZ2ciKTsKLSAgbCA9IGdzdF91cmlfZ2V0X2xvY2F0aW9uICh1cmkpOwotICBmYWlsX3VubGVzcyAobCAhPSBOVUxMKTsKLSAgLyogZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyB3aWxsIHNjcmV3IHVwIGhlcmUgaW4gdGhlIGZhaWx1cmUgY2FzZQotICAgKiBiZWNhdXNlIHRoZSBzdHJpbmcgY29uc3RhbnQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcHJpbnRmIGZvcm1hdAotICAgKiBtZXNzYWdlIHN0cmluZyBhbmQgY29udGFpbnMgYSAnJScsIHRoYXQncyB3aHkgd2UgdXNlIGZhaWxfdW5sZXNzIGhlcmUgKi8KLSAgZmFpbF91bmxlc3MgKGdfc3RyX2VxdWFsIChsLCAiYzovbXkgbXVzaWMvZm9vLm9nZyIpLAotICAgICAgIndyb25nIGxvY2F0aW9uICclcycgcmV0dXJuZWQgZm9yIFVSSSAnJXMnIiwgbCwgdXJpKTsKLSAgZ19mcmVlIChsKTsKLSAgZ19mcmVlICh1cmkpOwotCi0gIC8qIG1ha2Ugc3VyZSB0aGUgb3RoZXIgdmFyaWFudCB3aXRoIHR3byBzbGFzaGVzIGJlZm9yZSB0aGUgQzogKHdoaWNoIHdhcwotICAgKiBuZWVkZWQgYmVmb3JlIGJlY2F1c2Ugb2YgYSBidWcgaW4gX2dldF9sb2NhdGlvbigpKSBzdGlsbCB3b3JrcyAqLwotICB1cmkgPSBnX3N0cmR1cCAoImZpbGU6Ly9jOi9teSUyMG11c2ljL2Zvby5vZ2ciKTsKLSAgbCA9IGdzdF91cmlfZ2V0X2xvY2F0aW9uICh1cmkpOwotICBmYWlsX3VubGVzcyAobCAhPSBOVUxMKTsKLSAgLyogZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyB3aWxsIHNjcmV3IHVwIGhlcmUgaW4gdGhlIGZhaWx1cmUgY2FzZQotICAgKiBiZWNhdXNlIHRoZSBzdHJpbmcgY29uc3RhbnQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcHJpbnRmIGZvcm1hdAotICAgKiBtZXNzYWdlIHN0cmluZyBhbmQgY29udGFpbnMgYSAnJScsIHRoYXQncyB3aHkgd2UgdXNlIGZhaWxfdW5sZXNzIGhlcmUgKi8KLSAgZmFpbF91bmxlc3MgKGdfc3RyX2VxdWFsIChsLCAiYzovbXkgbXVzaWMvZm9vLm9nZyIpLAotICAgICAgIndyb25nIGxvY2F0aW9uICclcycgcmV0dXJuZWQgZm9yIFVSSSAnJXMnIiwgbCwgdXJpKTsKLSAgZ19mcmVlIChsKTsKLSAgZ19mcmVlICh1cmkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNlbmRpZiAvKiBHX09TX1dJTjMyICovCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VyaV9taXNjKQotewotICAvKiByZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGZvciB0aGUgcHJvdG9jb2wgKi8KLSAgZmFpbF9pZiAoZ3N0X3VyaV9pc192YWxpZCAoIkI6XFxmb28udHh0IikpOwotICBmYWlsX2lmIChnc3RfdXJpX2lzX3ZhbGlkICgiQjovZm9vLnR4dCIpKTsKLSAgZmFpbF9pZiAoZ3N0X3VyaV9pc192YWxpZCAoIkI6Ly9mb28udHh0IikpOwotICBmYWlsX2lmIChnc3RfdXJpX2lzX3ZhbGlkICgiQjpmb28udHh0IikpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2lzX3ZhbGlkICgiZmQ6Ly8wIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9pc192YWxpZCAoIkFCOlxcZm9vLnR4dCIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfaXNfdmFsaWQgKCJBQjovZm9vLnR4dCIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfaXNfdmFsaWQgKCJBQjovL2Zvby50eHQiKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2lzX3ZhbGlkICgiQUI6Zm9vLnR4dCIpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9pc192YWxpZCAoIkFCQzovZm9vLnR4dCIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfaXNfdmFsaWQgKCJBQkM6Ly9mb28udHh0IikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9pc192YWxpZCAoIkFCQzpmb28udHh0IikpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2lzX3ZhbGlkICgiQUJDRDovZm9vLnR4dCIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfaXNfdmFsaWQgKCJBQkNEOi8vZm9vLnR4dCIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfaXNfdmFsaWQgKCJBQkNEOmZvby50eHQiKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKEdTVF9VUklfU1JDLCAiZm9vOi8vIiwgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50ID09IE5VTEwpOwotCi0gIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpIChHU1RfVVJJX1NSQywgImZvbzovLyIsIE5VTEwsICZlcnIpOwotICBmYWlsX3VubGVzcyAoZWxlbWVudCA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGVyciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGVyci0+Y29kZSA9PSBHU1RfVVJJX0VSUk9SX1VOU1VQUE9SVEVEX1BST1RPQ09MKTsKLSAgZ19lcnJvcl9mcmVlIChlcnIpOwotICBlcnIgPSBOVUxMOwotCi0gIGlmIChnc3RfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCAiZmlsZXNyYyIsCi0gICAgICAgICAgR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCBHU1RfVkVSU0lPTl9NSUNSTykpIHsKLSAgICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoR1NUX1VSSV9TUkMsICJmaWxlOi8vaG9zdC9mb28iLCBOVUxMLAotICAgICAgICAmZXJyKTsKLSAgICBmYWlsX3VubGVzcyAoZWxlbWVudCA9PSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoZXJyICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChlcnItPmNvZGUgPT0gR1NUX1VSSV9FUlJPUl9CQURfVVJJKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgZXJyID0gTlVMTDsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRha2VuIGZyb20gdGhlIEdOZXQgdW5pdCB0ZXN0IGFuZCBleHRlbmRlZCB3aXRoIG90aGVyIFVSSXM6Ci0gKiBodHRwczovL2dpdC5nbm9tZS5vcmcvYnJvd3NlL2FyY2hpdmUvZ25ldC9wbGFpbi90ZXN0cy9jaGVjay9nbmV0L2duZXR1cmkuYwotICovCi1zdHJ1Y3QgUXVlcnlWYWx1ZQotewotICBjb25zdCBnY2hhciAqa2V5OwotICBjb25zdCBnY2hhciAqdmFsdWU7Ci19OwotCi1zdHJ1Y3QgVVJJVGVzdAotewotICBjb25zdCBnY2hhciAqc3RyOwotICBzdHJ1Y3QKLSAgewotICAgIGNvbnN0IGdjaGFyICpzY2hlbWU7Ci0gICAgY29uc3QgZ2NoYXIgKnVzZXJpbmZvOwotICAgIGNvbnN0IGdjaGFyICpob3N0OwotICAgIGdpbnQgcG9ydDsKLSAgICBjb25zdCBnY2hhciAqcGF0aDsKLSAgICAvKiBuZWVkcyB0byBiZSB1cGRhdGVkIGlmIG1vcmUgdGhhbiAxMCAqLwotICAgIHN0cnVjdCBRdWVyeVZhbHVlIHF1ZXJ5WzEwXTsKLSAgICBjb25zdCBnY2hhciAqZnJhZ21lbnQ7Ci0gIH0gdXJpOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBVUklUZXN0IHRlc3RzW10gPSB7Ci0gIC8qIFZBTElEIFVSSVMuICBQQVJTSU5HIEFORCBQUklOVElORyBPRiBUSEVTRSBTSE9VTEQgTk9UIENIQU5HRSAqLwotCi0gIC8qIHNjaGVtZS9wYXRoICovCi0gIHsic2NoZW1lOiIsCi0gICAgICB7InNjaGVtZSIsIE5VTEwsIE5VTEwsIEdTVF9VUklfTk9fUE9SVCwgTlVMTCwge3tOVUxMLCBOVUxMfX0sIE5VTEx9fSwKLQotICB7InNjaGVtZTpwYXRoIiwKLSAgICAgIHsic2NoZW1lIiwgTlVMTCwgTlVMTCwgR1NUX1VSSV9OT19QT1JULCAicGF0aCIsIHt7TlVMTCwgTlVMTH19LCBOVUxMfX0sCi0KLSAgeyJwYXRoIiwKLSAgICAgIHtOVUxMLCBOVUxMLCBOVUxMLCBHU1RfVVJJX05PX1BPUlQsICJwYXRoIiwge3tOVUxMLCBOVUxMfX0sIE5VTEx9fSwKLQotICB7Ii9wYXRoIiwKLSAgICAgIHtOVUxMLCBOVUxMLCBOVUxMLCBHU1RfVVJJX05PX1BPUlQsICIvcGF0aCIsIHt7TlVMTCwgTlVMTH19LCBOVUxMfX0sCi0KLSAgLyogaG9zdG5hbWUvcG9ydCAqLwotICB7InNjaGVtZTovL2hvc3RuYW1lL3BhdGgiLAotICAgICAgICB7InNjaGVtZSIsIE5VTEwsICJob3N0bmFtZSIsIEdTVF9VUklfTk9fUE9SVCwgIi9wYXRoIiwge3tOVUxMLCBOVUxMfX0sCi0gICAgICAgICAgTlVMTH19LAotCi0gIHsic2NoZW1lOi8vaG9zdG5hbWU6MTIzL3BhdGgiLAotICAgICAgeyJzY2hlbWUiLCBOVUxMLCAiaG9zdG5hbWUiLCAxMjMsICIvcGF0aCIsIHt7TlVMTCwgTlVMTH19LCBOVUxMfX0sCi0KLSAgLyogaXB2NiBob3N0bmFtZS9wb3J0ICovCi0gIHsic2NoZW1lOi8vWzAxOjIzOjQ1OjY3Ojg5OmFiOmNkOmVmXS9wYXRoIiwKLSAgICAgICAgeyJzY2hlbWUiLCBOVUxMLCAiMDE6MjM6NDU6Njc6ODk6YWI6Y2Q6ZWYiLCBHU1RfVVJJX05PX1BPUlQsICIvcGF0aCIsCi0gICAgICAgICAge3tOVUxMLCBOVUxMfX0sIE5VTEx9fSwKLQotICB7InNjaGVtZTovL1swMToyMzo0NTo2Nzo4OTphYjpjZDplZl06MTIzL3BhdGgiLAotICAgICAgICB7InNjaGVtZSIsIE5VTEwsICIwMToyMzo0NTo2Nzo4OTphYjpjZDplZiIsIDEyMywgIi9wYXRoIiwge3tOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTH19LCBOVUxMfX0sCi0KLSAgLyogcXVlcnkvZnJhZ21lbnQgKi8KLSAgeyJwYXRoP3F1ZXJ5IiwKLSAgICAgICAge05VTEwsIE5VTEwsIE5VTEwsIEdTVF9VUklfTk9fUE9SVCwgInBhdGgiLCB7eyJxdWVyeSIsIE5VTEx9LCB7TlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEx9fSwgTlVMTH19LAotICB7InBhdGg/cXVlcnk9dmFsdWUiLAotICAgICAgICB7TlVMTCwgTlVMTCwgTlVMTCwgR1NUX1VSSV9OT19QT1JULCAicGF0aCIsIHt7InF1ZXJ5IiwgInZhbHVlIn0sIHtOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTH19LCBOVUxMfX0sCi0KLSAgeyJwYXRoP3F1ZXJ5I2ZyYWdtZW50IiwKLSAgICAgICAge05VTEwsIE5VTEwsIE5VTEwsIEdTVF9VUklfTk9fUE9SVCwgInBhdGgiLCB7eyJxdWVyeSIsIE5VTEx9LCB7TlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEx9fSwgImZyYWdtZW50In19LAotCi0gIHsicGF0aD9xdWVyeT12YWx1ZSNmcmFnbWVudCIsCi0gICAgICAgIHtOVUxMLCBOVUxMLCBOVUxMLCBHU1RfVVJJX05PX1BPUlQsICJwYXRoIiwge3sicXVlcnkiLCAidmFsdWUifSwge05VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMfX0sICJmcmFnbWVudCJ9fSwKLQotICB7InNjaGVtZTpwYXRoP3F1ZXJ5I2ZyYWdtZW50IiwKLSAgICAgICAgeyJzY2hlbWUiLCBOVUxMLCBOVUxMLCBHU1RfVVJJX05PX1BPUlQsICJwYXRoIiwge3sicXVlcnkiLCBOVUxMfSwge05VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMfX0sICJmcmFnbWVudCJ9fSwKLQotICAvKiBmdWxsICovCi0gIHsic2NoZW1lOi8vaG9zdG5hbWU6MTIzL3BhdGg/cXVlcnkjZnJhZ21lbnQiLAotICAgICAgICB7InNjaGVtZSIsIE5VTEwsICJob3N0bmFtZSIsIDEyMywgIi9wYXRoIiwge3sicXVlcnkiLCBOVUxMfSwge05VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMfX0sICJmcmFnbWVudCJ9fSwKLQotICB7InNjaGVtZTovL2hvc3RuYW1lOjEyMy9wYXRoP3F1ZXJ5PXZhbHVlI2ZyYWdtZW50IiwKLSAgICAgICAgeyJzY2hlbWUiLCBOVUxMLCAiaG9zdG5hbWUiLCAxMjMsICIvcGF0aCIsIHt7InF1ZXJ5IiwgInZhbHVlIn0sIHtOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTH19LCAiZnJhZ21lbnQifX0sCi0KLSAgeyJzY2hlbWU6Ly9ob3N0bmFtZToxMjM/cXVlcnkiLAotICAgICAgICB7InNjaGVtZSIsIE5VTEwsICJob3N0bmFtZSIsIDEyMywgTlVMTCwge3sicXVlcnkiLCBOVUxMfSwge05VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMfX0sIE5VTEx9fSwKLQotICB7InNjaGVtZTovL2hvc3RuYW1lOjEyMz9xdWVyeT12YWx1ZSIsCi0gICAgICAgIHsic2NoZW1lIiwgTlVMTCwgImhvc3RuYW1lIiwgMTIzLCBOVUxMLCB7eyJxdWVyeSIsICJ2YWx1ZSJ9LCB7TlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEx9fSwgTlVMTH19LAotCi0gIHsic2NoZW1lOi8vaG9zdG5hbWU6MTIzP3F1ZXJ5I2ZyYWdtZW50IiwKLSAgICAgICAgeyJzY2hlbWUiLCBOVUxMLCAiaG9zdG5hbWUiLCAxMjMsIE5VTEwsIHt7InF1ZXJ5IiwgTlVMTH0sIHtOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTH19LCAiZnJhZ21lbnQifX0sCi0KLSAgeyJzY2hlbWU6Ly9ob3N0bmFtZToxMjM/cXVlcnk9dmFsdWUjZnJhZ21lbnQiLAotICAgICAgICB7InNjaGVtZSIsIE5VTEwsICJob3N0bmFtZSIsIDEyMywgTlVMTCwge3sicXVlcnkiLCAidmFsdWUifSwge05VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMfX0sICJmcmFnbWVudCJ9fSwKLQotICAvKiB1c2VyL3Bhc3MgKi8KLSAgeyJzY2hlbWU6Ly91c2VyaW5mb0Bob3N0bmFtZSIsCi0gICAgICAgIHsic2NoZW1lIiwgInVzZXJpbmZvIiwgImhvc3RuYW1lIiwgR1NUX1VSSV9OT19QT1JULCBOVUxMLCB7e05VTEwsCi0gICAgICAgICAgICAgICAgICBOVUxMfX0sIE5VTEx9fSwKLQotICB7InNjaGVtZTovL3VzZXJpbmZvQGhvc3RuYW1lOjEyMy9wYXRoP3F1ZXJ5I2ZyYWdtZW50IiwKLSAgICAgICAgeyJzY2hlbWUiLCAidXNlcmluZm8iLCAiaG9zdG5hbWUiLCAxMjMsICIvcGF0aCIsIHt7InF1ZXJ5IiwgTlVMTH0sCi0gICAgICAgICAgICAgIHtOVUxMLCBOVUxMfX0sICJmcmFnbWVudCJ9fSwKLQotICB7InNjaGVtZTovL3VzZXI6cGFzc0Bob3N0bmFtZSIsCi0gICAgICAgIHsic2NoZW1lIiwgInVzZXI6cGFzcyIsICJob3N0bmFtZSIsIEdTVF9VUklfTk9fUE9SVCwgTlVMTCwge3tOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTH19LCBOVUxMfX0sCi0KLSAgeyJzY2hlbWU6Ly91c2VyOnBhc3NAaG9zdG5hbWU6MTIzL3BhdGg/cXVlcnkjZnJhZ21lbnQiLAotICAgICAgICB7InNjaGVtZSIsICJ1c2VyOnBhc3MiLCAiaG9zdG5hbWUiLCAxMjMsICIvcGF0aCIsIHt7InF1ZXJ5IiwgTlVMTH0sCi0gICAgICAgICAgICAgIHtOVUxMLCBOVUxMfX0sICJmcmFnbWVudCJ9fSwKLQotICAvKiBGVU5OWSBVUklTLiAgUEFSU0lORyBBTkQgUFJJTlRJTkcgT0YgVEhFU0UgTUFZIENIQU5HRSAqLwotCi0gIHsic2NoZW1lOmhvc3RuYW1lOjEyMy9wYXRoP3F1ZXJ5I2ZyYWdtZW50IiwKLSAgICAgICAgeyJzY2hlbWUiLCBOVUxMLCBOVUxMLCBHU1RfVVJJX05PX1BPUlQsICJob3N0bmFtZToxMjMvcGF0aCIsIHt7InF1ZXJ5IiwKLSAgICAgICAgICAgICAgICAgIE5VTEx9LCB7TlVMTCwgTlVMTH19LCAiZnJhZ21lbnQifX0sCi0KLSAgeyJzY2hlbWU6Ly86cGFzc0Bob3N0bmFtZToxMjMvcGF0aD9xdWVyeSNmcmFnbWVudCIsCi0gICAgICAgIHsic2NoZW1lIiwgIjpwYXNzIiwgImhvc3RuYW1lIiwgMTIzLCAiL3BhdGgiLCB7eyJxdWVyeSIsIE5VTEx9LCB7TlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEx9fSwgImZyYWdtZW50In19LAotCi0gIC8qIFNraXAgaW5pdGlhbCB3aGl0ZSBzcGFjZSAqLwotICB7IiBcZlxuXHJcdFx2c2NoZW1lOiIsCi0gICAgICB7InNjaGVtZSIsIE5VTEwsIE5VTEwsIEdTVF9VUklfTk9fUE9SVCwgTlVMTCwge3tOVUxMLCBOVUxMfX0sIE5VTEx9fSwKLQotICB7IiBcZlxuXHJcdFx2cGF0aCIsCi0gICAgICB7TlVMTCwgTlVMTCwgTlVMTCwgR1NUX1VSSV9OT19QT1JULCAicGF0aCIsIHt7TlVMTCwgTlVMTH19LCBOVUxMfX0sCi0KLSAgLyogZmlsZSBVUkkgKi8KLSAgeyJmaWxlOi8vaG9zdC9ob21lL2pvZS9mb28udHh0IiwKLSAgICAgICAgeyJmaWxlIiwgTlVMTCwgImhvc3QiLCBHU1RfVVJJX05PX1BPUlQsICIvaG9tZS9qb2UvZm9vLnR4dCIsIHt7TlVMTCwKLSAgICAgICAgICAgICAgICAgIE5VTEx9fSwgTlVMTH19LAotICB7ImZpbGU6Ly8vaG9tZS9qb2UvZm9vLnR4dCIsCi0gICAgICAgIHsiZmlsZSIsIE5VTEwsIE5VTEwsIEdTVF9VUklfTk9fUE9SVCwgIi9ob21lL2pvZS9mb28udHh0Iiwge3tOVUxMLAotICAgICAgICAgICAgICAgICAgTlVMTH19LCBOVUxMfX0sCi19OwotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKnVucGFyc2FibGVfdXJpX3Rlc3RzW10gPSB7Ci0gIC8qIFBhdGggbm90IHN0YXJ0ZWQgY29ycmVjdGx5ICovCi0gICJzY2hlbWU6Ly9ob3N0bmFtZToxMjNwYXRoP3F1ZXJ5I2ZyYWdtZW50IiwKLQotICAvKiBCcmFja2V0cyB0aGF0IGRvbid0IGNsb3NlICovCi0gICJzY2hlbWU6Ly9bMDE6MjM6NDU6Njc6ODk6YWI6Y2Q6ZWY6MTIzL3BhdGgiLAotCi0gIC8qIElQdjYgaG9zdG5hbWUgd2l0aG91dCBicmFja2V0cyAqLwotICAic2NoZW1lOi8vMDE6MjM6NDU6Njc6ODk6YWI6Y2Q6ZWY6MTIzL3BhdGgiLAotfTsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdXJsX3BhcnNpbmcpCi17Ci0gIEdzdFVyaSAqdXJpOwotICBHTGlzdCAqbGlzdDsKLSAgZ2NoYXIgKnRtcF9zdHI7Ci0gIGd1aW50IGksIGo7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAodGVzdHMpOyBpKyspIHsKLSAgICBHU1RfREVCVUcgKCJUZXN0aW5nIFVSSSAnJXMnIiwgdGVzdHNbaV0uc3RyKTsKLQotICAgIHVyaSA9IGdzdF91cmlfZnJvbV9zdHJpbmcgKHRlc3RzW2ldLnN0cik7Ci0gICAgZmFpbF91bmxlc3MgKHVyaSAhPSBOVUxMKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF9zY2hlbWUgKHVyaSksIHRlc3RzW2ldLnVyaS5zY2hlbWUpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X3VzZXJpbmZvICh1cmkpLAotICAgICAgICB0ZXN0c1tpXS51cmkudXNlcmluZm8pOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X2hvc3QgKHVyaSksIHRlc3RzW2ldLnVyaS5ob3N0KTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfdXJpX2dldF9wb3J0ICh1cmkpLCB0ZXN0c1tpXS51cmkucG9ydCk7Ci0gICAgdG1wX3N0ciA9IGdzdF91cmlfZ2V0X3BhdGggKHVyaSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwgdGVzdHNbaV0udXJpLnBhdGgpOwotICAgIGdfZnJlZSAodG1wX3N0cik7Ci0KLSAgICBmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgewotICAgICAgaWYgKCF0ZXN0c1tpXS51cmkucXVlcnlbal0ua2V5KQotICAgICAgICBicmVhazsKLQotICAgICAgaWYgKHRlc3RzW2ldLnVyaS5xdWVyeVtqXS52YWx1ZSkgewotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF9xdWVyeV92YWx1ZSAodXJpLAotICAgICAgICAgICAgICAgIHRlc3RzW2ldLnVyaS5xdWVyeVtqXS5rZXkpLCB0ZXN0c1tpXS51cmkucXVlcnlbal0udmFsdWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmFpbF91bmxlc3MgKGdzdF91cmlfcXVlcnlfaGFzX2tleSAodXJpLCB0ZXN0c1tpXS51cmkucXVlcnlbal0ua2V5KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGxpc3QgPSBnc3RfdXJpX2dldF9xdWVyeV9rZXlzICh1cmkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGosIGdfbGlzdF9sZW5ndGggKGxpc3QpKTsKLSAgICBnX2xpc3RfZnJlZSAobGlzdCk7Ci0gICAgZ3N0X3VyaV91bnJlZiAodXJpKTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHVucGFyc2FibGVfdXJpX3Rlc3RzKTsgaSsrKSB7Ci0gICAgR1NUX0RFQlVHICgiVGVzdGluZyB1bnBhcnNhYmxlIFVSSSAnJXMnIiwgdW5wYXJzYWJsZV91cmlfdGVzdHNbaV0pOwotCi0gICAgdXJpID0gZ3N0X3VyaV9mcm9tX3N0cmluZyAodW5wYXJzYWJsZV91cmlfdGVzdHNbaV0pOwotICAgIGZhaWxfdW5sZXNzICh1cmkgPT0gTlVMTCk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IFVSSVRlc3QgdXJsX3ByZXNlbnRpbmdfdGVzdHNbXSA9IHsKLSAgLyogY2hlY2sgYWxsIFVSSSBlbGVtZW50cyBwcmVzZW50ICovCi0gIHsudXJpID0geyJzY2hlbWUiLCAidXNlcjpwYXNzIiwgImhvc3QiLCAxMjM0LCAiL3BhdGgvdG8vZGlyIiwKLSAgICAgICAgICB7eyJxdWVyeSIsIE5VTEx9LCB7ImtleSIsICJ2YWx1ZSJ9fSwgImZyYWdtZW50In0sCi0gICAgICAuc3RyID0KLSAgICAgICJzY2hlbWU6Ly91c2VyOnBhc3NAaG9zdDoxMjM0L3BhdGgvdG8vZGlyP3F1ZXJ5JmtleT12YWx1ZSNmcmFnbWVudCJ9LAotCi0gIC8qIElQdjYgbGl0ZXJhbCBzaG91bGQgcmVuZGVyIGluIHNxdWFyZSBicmFja2V0cyAqLwotICB7LnVyaSA9IHsic2NoZW1lIiwgInVzZXI6cGFzcyIsICIxMjozNDo1Njo3ODo5YTpiYzpkZTpmMCIsIDEyMzQsCi0gICAgICAgICAgIi9wYXRoL3RvL2RpciIsIHt7InF1ZXJ5IiwgInZhbHVlIn19LCAiZnJhZ21lbnQifSwKLSAgICAgIC5zdHIgPQotICAgICAgInNjaGVtZTovL3VzZXI6cGFzc0BbMTI6MzQ6NTY6Nzg6OWE6YmM6ZGU6ZjBdOjEyMzQvcGF0aC90by9kaXI/cXVlcnk9dmFsdWUjZnJhZ21lbnQifSwKLX07Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VybF9wcmVzZW50aW5nKQotewotICBHc3RVcmkgKnVyaTsKLSAgZ2NoYXIgKnJlc3VsdDsKLSAgZ3VpbnQgaSwgajsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTICh1cmxfcHJlc2VudGluZ190ZXN0cyk7IGkrKykgewotICAgIHVyaSA9IGdzdF91cmlfbmV3ICh1cmxfcHJlc2VudGluZ190ZXN0c1tpXS51cmkuc2NoZW1lLAotICAgICAgICB1cmxfcHJlc2VudGluZ190ZXN0c1tpXS51cmkudXNlcmluZm8sCi0gICAgICAgIHVybF9wcmVzZW50aW5nX3Rlc3RzW2ldLnVyaS5ob3N0LAotICAgICAgICB1cmxfcHJlc2VudGluZ190ZXN0c1tpXS51cmkucG9ydCwKLSAgICAgICAgdXJsX3ByZXNlbnRpbmdfdGVzdHNbaV0udXJpLnBhdGgsCi0gICAgICAgIE5VTEwsIHVybF9wcmVzZW50aW5nX3Rlc3RzW2ldLnVyaS5mcmFnbWVudCk7Ci0gICAgZmFpbF91bmxlc3MgKHVyaSAhPSBOVUxMKTsKLSAgICBmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgewotICAgICAgaWYgKCF1cmxfcHJlc2VudGluZ190ZXN0c1tpXS51cmkucXVlcnlbal0ua2V5KQotICAgICAgICBicmVhazsKLQotICAgICAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X3F1ZXJ5X3ZhbHVlICh1cmksCi0gICAgICAgICAgICAgIHVybF9wcmVzZW50aW5nX3Rlc3RzW2ldLnVyaS5xdWVyeVtqXS5rZXksCi0gICAgICAgICAgICAgIHVybF9wcmVzZW50aW5nX3Rlc3RzW2ldLnVyaS5xdWVyeVtqXS52YWx1ZSkpOwotICAgIH0KLQotICAgIHJlc3VsdCA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHJlc3VsdCwgdXJsX3ByZXNlbnRpbmdfdGVzdHNbaV0uc3RyKTsKLSAgICBnX2ZyZWUgKHJlc3VsdCk7Ci0gICAgZ3N0X3VyaV91bnJlZiAodXJpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VybF9ub3JtYWxpemF0aW9uKQotewotICBHc3RVcmkgKnVybDsKLSAgZ2NoYXIgKnRtcF9zdHI7Ci0KLSAgdXJsID0KLSAgICAgIGdzdF91cmlfZnJvbV9zdHJpbmcKLSAgICAgICgiU2NIZU1lOi8vVXNlcjpQJTYxc3NASE9TVC4lNjNvbToxMjM0L3BhdGgvLi9mcm9tLy4uL3RvJTdkL2l0ZW0lMmRvYmo/cXUlNjVyeT1zb21ldGhpbmcjZnIlNjFnbWVudCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9ub3JtYWxpemUgKHVybCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF9zY2hlbWUgKHVybCksICJzY2hlbWUiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3VyaV9nZXRfdXNlcmluZm8gKHVybCksICJVc2VyOlBhc3MiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3VyaV9nZXRfaG9zdCAodXJsKSwgImhvc3QuY29tIik7Ci0gIHRtcF9zdHIgPSBnc3RfdXJpX2dldF9wYXRoICh1cmwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXBfc3RyLCAiL3BhdGgvdG99L2l0ZW0tb2JqIik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX3F1ZXJ5X2hhc19rZXkgKHVybCwgInF1ZXJ5IikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF9xdWVyeV92YWx1ZSAodXJsLCAicXVlcnkiKSwKLSAgICAgICJzb21ldGhpbmciKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3VyaV9nZXRfZnJhZ21lbnQgKHVybCksICJmcmFnbWVudCIpOwotICBnc3RfdXJpX3VucmVmICh1cmwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VybF9qb2luaW5nKQotewotICBHc3RVcmkgKmJhc2UsICpyZWwsICpqb2luZWQ7Ci0gIGdjaGFyICpsOwotCi0gIGJhc2UgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9kaXIvZmlsZW5hbWUuaHRtbCNmcmFnbWVudCIpOwotCi0gIC8qIHRlc3QgY2hhbmdlIG9mIGZyYWdtZW50IG9ubHkgKi8KLSAgcmVsID0gZ3N0X3VyaV9mcm9tX3N0cmluZyAoIiNuZXdfZnJhZyIpOwotICBqb2luZWQgPSBnc3RfdXJpX2pvaW4gKGJhc2UsIHJlbCk7Ci0gIGwgPSBnc3RfdXJpX3RvX3N0cmluZyAoam9pbmVkKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobCwKLSAgICAgICJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9kaXIvZmlsZW5hbWUuaHRtbCNuZXdfZnJhZyIpOwotICBnX2ZyZWUgKGwpOwotICBnc3RfdXJpX3VucmVmIChqb2luZWQpOwotICBnc3RfdXJpX3VucmVmIChyZWwpOwotCi0gIC8qIHRlc3QgYWRkaXRpb24gb2YgbmV3IHF1ZXJ5IHN0cmluZyAqLwotICByZWwgPSBnc3RfdXJpX2Zyb21fc3RyaW5nICgiP2tleT12YWwiKTsKLSAgam9pbmVkID0gZ3N0X3VyaV9qb2luIChiYXNlLCByZWwpOwotICBsID0gZ3N0X3VyaV90b19zdHJpbmcgKGpvaW5lZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGwsCi0gICAgICAiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZGlyL2ZpbGVuYW1lLmh0bWw/a2V5PXZhbCIpOwotICBnX2ZyZWUgKGwpOwotICBnc3RfdXJpX3VucmVmIChqb2luZWQpOwotICBnc3RfdXJpX3VucmVmIChyZWwpOwotCi0gIC8qIHRlc3QgbmV3IGJhc2UgZmlsZW5hbWUgKi8KLSAgcmVsID0gZ3N0X3VyaV9mcm9tX3N0cmluZyAoIm5ld19maWxlbmFtZS54bWwiKTsKLSAgam9pbmVkID0gZ3N0X3VyaV9qb2luIChiYXNlLCByZWwpOwotICBsID0gZ3N0X3VyaV90b19zdHJpbmcgKGpvaW5lZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGwsCi0gICAgICAiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZGlyL25ld19maWxlbmFtZS54bWwiKTsKLSAgZ19mcmVlIChsKTsKLSAgZ3N0X3VyaV91bnJlZiAoam9pbmVkKTsKLSAgZ3N0X3VyaV91bnJlZiAocmVsKTsKLQotICAvKiB0ZXN0IHJlbGF0aXZlIGZpbGUgc2FtZSBkaXJlY3RvcnkgKi8KLSAgcmVsID0gZ3N0X3VyaV9mcm9tX3N0cmluZyAoIi4vbmV3X2ZpbGVuYW1lLnhtbCIpOwotICBqb2luZWQgPSBnc3RfdXJpX2pvaW4gKGJhc2UsIHJlbCk7Ci0gIGwgPSBnc3RfdXJpX3RvX3N0cmluZyAoam9pbmVkKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobCwKLSAgICAgICJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC90by9kaXIvbmV3X2ZpbGVuYW1lLnhtbCIpOwotICBnX2ZyZWUgKGwpOwotICBnc3RfdXJpX3VucmVmIChqb2luZWQpOwotICBnc3RfdXJpX3VucmVmIChyZWwpOwotCi0gIC8qIHRlc3QgcmVsYXRpdmUgZmlsZSBwYXJlbnQgZGlyZWN0b3J5ICovCi0gIHJlbCA9IGdzdF91cmlfZnJvbV9zdHJpbmcgKCIuLi9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGpvaW5lZCA9IGdzdF91cmlfam9pbiAoYmFzZSwgcmVsKTsKLSAgbCA9IGdzdF91cmlfdG9fc3RyaW5nIChqb2luZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLCAiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vbmV3X2ZpbGVuYW1lLnhtbCIpOwotICBnX2ZyZWUgKGwpOwotICBnc3RfdXJpX3VucmVmIChqb2luZWQpOwotICBnc3RfdXJpX3VucmVmIChyZWwpOwotCi0gIC8qIHRlc3QgcmVsYXRpdmUgZmlsZSBncmFuZHBhcmVudCBkaXJlY3RvcnkgKi8KLSAgcmVsID0gZ3N0X3VyaV9mcm9tX3N0cmluZyAoIi4uLy4uL25ld19maWxlbmFtZS54bWwiKTsKLSAgam9pbmVkID0gZ3N0X3VyaV9qb2luIChiYXNlLCByZWwpOwotICBsID0gZ3N0X3VyaV90b19zdHJpbmcgKGpvaW5lZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGwsICJodHRwOi8vZXhhbXBsZS5jb20vcGF0aC9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGdfZnJlZSAobCk7Ci0gIGdzdF91cmlfdW5yZWYgKGpvaW5lZCk7Ci0gIGdzdF91cmlfdW5yZWYgKHJlbCk7Ci0KLSAgLyogdGVzdCByZWxhdGl2ZSBmaWxlIHJvb3QgZGlyZWN0b3J5ICovCi0gIHJlbCA9IGdzdF91cmlfZnJvbV9zdHJpbmcgKCIuLi8uLi8uLi9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGpvaW5lZCA9IGdzdF91cmlfam9pbiAoYmFzZSwgcmVsKTsKLSAgbCA9IGdzdF91cmlfdG9fc3RyaW5nIChqb2luZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLCAiaHR0cDovL2V4YW1wbGUuY29tL25ld19maWxlbmFtZS54bWwiKTsKLSAgZ19mcmVlIChsKTsKLSAgZ3N0X3VyaV91bnJlZiAoam9pbmVkKTsKLSAgZ3N0X3VyaV91bnJlZiAocmVsKTsKLQotICAvKiB0ZXN0IHJlbGF0aXZlIGZpbGUgYmV5b25kIHJvb3QgZGlyZWN0b3J5ICovCi0gIHJlbCA9IGdzdF91cmlfZnJvbV9zdHJpbmcgKCIuLi8uLi8uLi8uLi9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGpvaW5lZCA9IGdzdF91cmlfam9pbiAoYmFzZSwgcmVsKTsKLSAgbCA9IGdzdF91cmlfdG9fc3RyaW5nIChqb2luZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLCAiaHR0cDovL2V4YW1wbGUuY29tL25ld19maWxlbmFtZS54bWwiKTsKLSAgZ19mcmVlIChsKTsKLSAgZ3N0X3VyaV91bnJlZiAoam9pbmVkKTsKLSAgZ3N0X3VyaV91bnJlZiAocmVsKTsKLQotICAvKiB0ZXN0IGFkZCBzdWJkaXJlY3RvcnkgKi8KLSAgcmVsID0gZ3N0X3VyaV9mcm9tX3N0cmluZyAoInN1YmRpci9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGpvaW5lZCA9IGdzdF91cmlfam9pbiAoYmFzZSwgcmVsKTsKLSAgbCA9IGdzdF91cmlfdG9fc3RyaW5nIChqb2luZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLAotICAgICAgImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2Rpci9zdWJkaXIvbmV3X2ZpbGVuYW1lLnhtbCIpOwotICBnX2ZyZWUgKGwpOwotICBnc3RfdXJpX3VucmVmIChqb2luZWQpOwotICBnc3RfdXJpX3VucmVmIChyZWwpOwotCi0gIC8qIHRlc3QgY2hhbmdlIGRpcmVjdG9yeSAqLwotICByZWwgPSBnc3RfdXJpX2Zyb21fc3RyaW5nICgiLi4vc3ViZGlyL25ld19maWxlbmFtZS54bWwiKTsKLSAgam9pbmVkID0gZ3N0X3VyaV9qb2luIChiYXNlLCByZWwpOwotICBsID0gZ3N0X3VyaV90b19zdHJpbmcgKGpvaW5lZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGwsCi0gICAgICAiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vc3ViZGlyL25ld19maWxlbmFtZS54bWwiKTsKLSAgZ19mcmVlIChsKTsKLSAgZ3N0X3VyaV91bnJlZiAoam9pbmVkKTsKLSAgZ3N0X3VyaV91bnJlZiAocmVsKTsKLQotICBnc3RfdXJpX3VucmVmIChiYXNlKTsKLQotICAvKiBjaGFuZ2UgYmFzZSBmb3IgcGF0aCBlbmRpbmcgaW4gZGlyZWN0b3J5ICovCi0gIGJhc2UgPSBnc3RfdXJpX2Zyb21fc3RyaW5nICgiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZGlyLyIpOwotCi0gIC8qIHRlc3QgYWRkaW5nIGZpbGUgdG8gZGlyZWN0b3J5ICovCi0gIHJlbCA9IGdzdF91cmlfZnJvbV9zdHJpbmcgKCJuZXdfZmlsZW5hbWUueG1sIik7Ci0gIGpvaW5lZCA9IGdzdF91cmlfam9pbiAoYmFzZSwgcmVsKTsKLSAgbCA9IGdzdF91cmlfdG9fc3RyaW5nIChqb2luZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLAotICAgICAgImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2Rpci9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGdfZnJlZSAobCk7Ci0gIGdzdF91cmlfdW5yZWYgKGpvaW5lZCk7Ci0gIGdzdF91cmlfdW5yZWYgKHJlbCk7Ci0KLSAgLyogdGVzdCBhZGRpbmcgZmlsZSB0byBkaXJlY3RvcnkgdXNpbmcgcmVsYXRpdmUgcGF0aCAqLwotICByZWwgPSBnc3RfdXJpX2Zyb21fc3RyaW5nICgiLi9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGpvaW5lZCA9IGdzdF91cmlfam9pbiAoYmFzZSwgcmVsKTsKLSAgbCA9IGdzdF91cmlfdG9fc3RyaW5nIChqb2luZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLAotICAgICAgImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2Rpci9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGdfZnJlZSAobCk7Ci0gIGdzdF91cmlfdW5yZWYgKGpvaW5lZCk7Ci0gIGdzdF91cmlfdW5yZWYgKHJlbCk7Ci0KLSAgLyogdGVzdCBmaWxlbmFtZSBpbiBwYXJlbnQgZGlyZWN0b3J5ICovCi0gIHJlbCA9IGdzdF91cmlfZnJvbV9zdHJpbmcgKCIuLi9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGpvaW5lZCA9IGdzdF91cmlfam9pbiAoYmFzZSwgcmVsKTsKLSAgbCA9IGdzdF91cmlfdG9fc3RyaW5nIChqb2luZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLCAiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vbmV3X2ZpbGVuYW1lLnhtbCIpOwotICBnX2ZyZWUgKGwpOwotICBnc3RfdXJpX3VucmVmIChqb2luZWQpOwotICBnc3RfdXJpX3VucmVmIChyZWwpOwotCi0gIC8qIHRlc3QgcGF0aCBlbmRpbmcgaW4gJy4uLycgKi8KLSAgcmVsID0gZ3N0X3VyaV9mcm9tX3N0cmluZyAoIm9uZS90d28vLi4vIik7Ci0gIGpvaW5lZCA9IGdzdF91cmlfam9pbiAoYmFzZSwgcmVsKTsKLSAgbCA9IGdzdF91cmlfdG9fc3RyaW5nIChqb2luZWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChsLCAiaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvdG8vZGlyL29uZS8iKTsKLSAgZ19mcmVlIChsKTsKLSAgZ3N0X3VyaV91bnJlZiAoam9pbmVkKTsKLSAgZ3N0X3VyaV91bnJlZiAocmVsKTsKLQotICAvKiB0ZXN0IHBhdGggZW5kaW5nIGluICcuLicgUmVzdWx0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3aGVuIGVuZGluZyBpbiAnLi4vJyAqLwotICByZWwgPSBnc3RfdXJpX2Zyb21fc3RyaW5nICgib25lL3R3by8uLiIpOwotICBqb2luZWQgPSBnc3RfdXJpX2pvaW4gKGJhc2UsIHJlbCk7Ci0gIGwgPSBnc3RfdXJpX3RvX3N0cmluZyAoam9pbmVkKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAobCwgImh0dHA6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL2Rpci9vbmUvIik7Ci0gIGdfZnJlZSAobCk7Ci0gIGdzdF91cmlfdW5yZWYgKGpvaW5lZCk7Ci0gIGdzdF91cmlfdW5yZWYgKHJlbCk7Ci0KLSAgLyogdGVzdCByZXBsYWNlIHdpdGggYWJzb2x1dGUgKi8KLSAgcmVsID0gZ3N0X3VyaV9mcm9tX3N0cmluZyAoImh0dHBzOi8vc3NsLmV4YW1wbGUuY29tL25ld19maWxlbmFtZS54bWwiKTsKLSAgam9pbmVkID0gZ3N0X3VyaV9qb2luIChiYXNlLCByZWwpOwotICBsID0gZ3N0X3VyaV90b19zdHJpbmcgKGpvaW5lZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGwsICJodHRwczovL3NzbC5leGFtcGxlLmNvbS9uZXdfZmlsZW5hbWUueG1sIik7Ci0gIGdfZnJlZSAobCk7Ci0gIGdzdF91cmlfdW5yZWYgKGpvaW5lZCk7Ci0gIGdzdF91cmlfdW5yZWYgKHJlbCk7Ci0KLSAgZ3N0X3VyaV91bnJlZiAoYmFzZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdXJsX2VxdWFsaXR5KQotewotICBHc3RVcmkgKnVybDEsICp1cmwyOwotCi0gIHVybDEgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJTY0hlTWU6Ly9Vc2VyOlBhc3NASE9TVC5jb206MTIzNC9wYXRoLy4vZnJvbS8uLi90byU3ZC9pdGVtJTJkb2JqP3F1ZXJ5PXNvbWV0aGluZyNmcmFnbWVudCIpOwotCi0gIC8qIGVxdWFsICovCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJzY2hlbWU6Ly9Vc2VyOlBhc3NAaG9zdC5jb206MTIzNC9wYXRoL3RvJTdEL2l0ZW0tb2JqP3F1ZXJ5PXNvbWV0aGluZyNmcmFnbWVudCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9lcXVhbCAodXJsMSwgdXJsMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9lcXVhbCAodXJsMiwgdXJsMSkpOwotICBnc3RfdXJpX3VucmVmICh1cmwyKTsKLQotICAvKiBkaWZmZXJlbnQgZnJhZ21lbnQgKi8KLSAgdXJsMiA9Ci0gICAgICBnc3RfdXJpX2Zyb21fc3RyaW5nCi0gICAgICAoInNjaGVtZTovL1VzZXI6UGFzc0Bob3N0LmNvbToxMjM0L3BhdGgvdG8lN0QvaXRlbS1vYmo/cXVlcnk9c29tZXRoaW5nI2RpZmZlcmVudC1mcmFnbWVudCIpOwotICBmYWlsX3VubGVzcyAoIWdzdF91cmlfZXF1YWwgKHVybDEsIHVybDIpKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgLyogZGlmZmVyZW50IHF1ZXJ5ICovCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJzY2hlbWU6Ly9Vc2VyOlBhc3NAaG9zdC5jb206MTIzNC9wYXRoL3RvJTdEL2l0ZW0tb2JqP3F1ZXJ5PWRpZmZlcmVudC1zb21ldGhpbmcjZnJhZ21lbnQiKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX2VxdWFsICh1cmwxLCB1cmwyKSk7Ci0gIGdzdF91cmlfdW5yZWYgKHVybDIpOwotCi0gIC8qIGRpZmZlcmVudCBwYXRoICovCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJzY2hlbWU6Ly9Vc2VyOlBhc3NAaG9zdC5jb206MTIzNC9wYXRoL3RvJTdEL2RpZmZlcmVudC1pdGVtLW9iaj9xdWVyeT1zb21ldGhpbmcjZnJhZ21lbnQiKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX2VxdWFsICh1cmwxLCB1cmwyKSk7Ci0gIGdzdF91cmlfdW5yZWYgKHVybDIpOwotCi0gIC8qIGRpZmZlcmVudCBwb3J0ICovCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJzY2hlbWU6Ly9Vc2VyOlBhc3NAaG9zdC5jb206NDMyMS9wYXRoL3RvJTdEL2l0ZW0tb2JqP3F1ZXJ5PXNvbWV0aGluZyNmcmFnbWVudCIpOwotICBmYWlsX3VubGVzcyAoIWdzdF91cmlfZXF1YWwgKHVybDEsIHVybDIpKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgLyogZGlmZmVyZW50IGhvc3QgKi8KLSAgdXJsMiA9Ci0gICAgICBnc3RfdXJpX2Zyb21fc3RyaW5nCi0gICAgICAoInNjaGVtZTovL1VzZXI6UGFzc0BkaWZmZXJlbnQtaG9zdC5jb206MTIzNC9wYXRoL3RvJTdEL2l0ZW0tb2JqP3F1ZXJ5PXNvbWV0aGluZyNmcmFnbWVudCIpOwotICBmYWlsX3VubGVzcyAoIWdzdF91cmlfZXF1YWwgKHVybDEsIHVybDIpKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgLyogZGlmZmVyZW50IHVzZXJpbmZvICovCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJzY2hlbWU6Ly9EaWZmZXJlbnQtVXNlcjpQYXNzQGhvc3QuY29tOjEyMzQvcGF0aC90byU3RC9pdGVtLW9iaj9xdWVyeT1zb21ldGhpbmcjZnJhZ21lbnQiKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX2VxdWFsICh1cmwxLCB1cmwyKSk7Ci0gIGdzdF91cmlfdW5yZWYgKHVybDIpOwotCi0gIC8qIGRpZmZlcmVudCBzY2hlbWUgKi8KLSAgdXJsMiA9Ci0gICAgICBnc3RfdXJpX2Zyb21fc3RyaW5nCi0gICAgICAoImRpZmZlcmVudCtzY2hlbWU6Ly9Vc2VyOlBhc3NAaG9zdC5jb206MTIzNC9wYXRoL3RvJTdEL2l0ZW0tb2JqP3F1ZXJ5PXNvbWV0aGluZyNmcmFnbWVudCIpOwotICBmYWlsX3VubGVzcyAoIWdzdF91cmlfZXF1YWwgKHVybDEsIHVybDIpKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgLyogZGlmZmVyZW50IChubyBzY2hlbWUpICovCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCIvL1VzZXI6UGFzc0Bob3N0LmNvbToxMjM0L3BhdGgvdG8lN0QvaXRlbS1vYmo/cXVlcnk9c29tZXRoaW5nI2ZyYWdtZW50Iik7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9lcXVhbCAodXJsMSwgdXJsMikpOwotICBnc3RfdXJpX3VucmVmICh1cmwyKTsKLQotICAvKiBkaWZmZXJlbnQgKG5vIHVzZXJpbmZvKSAqLwotICB1cmwyID0KLSAgICAgIGdzdF91cmlfZnJvbV9zdHJpbmcKLSAgICAgICgic2NoZW1lOi8vaG9zdC5jb206MTIzNC9wYXRoL3RvJTdEL2l0ZW0tb2JqP3F1ZXJ5PXNvbWV0aGluZyNmcmFnbWVudCIpOwotICBmYWlsX3VubGVzcyAoIWdzdF91cmlfZXF1YWwgKHVybDEsIHVybDIpKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgLyogZGlmZmVyZW50IChubyBob3N0KSAqLwotICB1cmwyID0KLSAgICAgIGdzdF91cmlfZnJvbV9zdHJpbmcKLSAgICAgICgic2NoZW1lOi8vVXNlcjpQYXNzQDoxMjM0L3BhdGgvdG8lN0QvaXRlbS1vYmo/cXVlcnk9c29tZXRoaW5nI2ZyYWdtZW50Iik7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9lcXVhbCAodXJsMSwgdXJsMikpOwotICBnc3RfdXJpX3VucmVmICh1cmwyKTsKLQotICAvKiBkaWZmZXJlbnQgKG5vIHBvcnQpICovCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJzY2hlbWU6Ly9Vc2VyOlBhc3NAaG9zdC5jb20vcGF0aC90byU3RC9pdGVtLW9iaj9xdWVyeT1zb21ldGhpbmcjZnJhZ21lbnQiKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX2VxdWFsICh1cmwxLCB1cmwyKSk7Ci0gIGdzdF91cmlfdW5yZWYgKHVybDIpOwotCi0gIC8qIGRpZmZlcmVudCAobm8gcGF0aCkgKi8KLSAgdXJsMiA9Ci0gICAgICBnc3RfdXJpX2Zyb21fc3RyaW5nCi0gICAgICAoInNjaGVtZTovL1VzZXI6UGFzc0Bob3N0LmNvbToxMjM0P3F1ZXJ5PXNvbWV0aGluZyNmcmFnbWVudCIpOwotICBmYWlsX3VubGVzcyAoIWdzdF91cmlfZXF1YWwgKHVybDEsIHVybDIpKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgLyogZGlmZmVyZW50IChubyBxdWVyeSkgKi8KLSAgdXJsMiA9Ci0gICAgICBnc3RfdXJpX2Zyb21fc3RyaW5nCi0gICAgICAoInNjaGVtZTovL1VzZXI6UGFzc0Bob3N0LmNvbToxMjM0L3BhdGgvdG8lN0QvaXRlbS1vYmojZnJhZ21lbnQiKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX2VxdWFsICh1cmwxLCB1cmwyKSk7Ci0gIGdzdF91cmlfdW5yZWYgKHVybDIpOwotCi0gIC8qIGRpZmZlcmVudCAobm8gZnJhZ21lbnQpICovCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9mcm9tX3N0cmluZwotICAgICAgKCJzY2hlbWU6Ly9Vc2VyOlBhc3NAaG9zdC5jb206MTIzNC9wYXRoL3RvJTdEL2l0ZW0tb2JqP3F1ZXJ5PXNvbWV0aGluZyIpOwotICBmYWlsX3VubGVzcyAoIWdzdF91cmlfZXF1YWwgKHVybDEsIHVybDIpKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgLyogY29tcGFyZSB0d28gTlVMTCB1cmlzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2VxdWFsIChOVUxMLCBOVUxMKSk7Ci0KLSAgLyogY29tcGFyZSBzYW1lIG9iamVjdCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9lcXVhbCAodXJsMSwgdXJsMSkpOwotCi0gIC8qIGNvbXBhcmUgb25lIE5VTEwgYW5kIG9uZSBub24tTlVMTCB1cmkgKi8KLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX2VxdWFsICh1cmwxLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9lcXVhbCAoTlVMTCwgdXJsMSkpOwotCi0gIGdzdF91cmlfdW5yZWYgKHVybDEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VybF9jb25zdHJ1Y3RvcnMpCi17Ci0gIEdzdFVyaSAqdXJsMSwgKnVybDI7Ci0gIGdjaGFyICp0bXBfc3RyOwotICBHSGFzaFRhYmxlICp0bXBfdGFibGU7Ci0KLSAgdXJsMSA9Ci0gICAgICBnc3RfdXJpX25ldyAoInNjaGVtZSIsICJ1c2VyaW5mbyIsICJob3N0bmFtZSIsIDEyMzQsICIvcGF0aC90by9maWxlIiwKLSAgICAgICJxdWVyeSIsICJmcmFnbWVudCIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF9zY2hlbWUgKHVybDEpLCAic2NoZW1lIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X3VzZXJpbmZvICh1cmwxKSwgInVzZXJpbmZvIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X2hvc3QgKHVybDEpLCAiaG9zdG5hbWUiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfZ2V0X3BvcnQgKHVybDEpID09IDEyMzQpOwotICB0bXBfc3RyID0gZ3N0X3VyaV9nZXRfcGF0aCAodXJsMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsICIvcGF0aC90by9maWxlIik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0gIHRtcF90YWJsZSA9IGdzdF91cmlfZ2V0X3F1ZXJ5X3RhYmxlICh1cmwxKTsKLSAgZmFpbF91bmxlc3MgKGdfaGFzaF90YWJsZV9zaXplICh0bXBfdGFibGUpID09IDEpOwotICBmYWlsX3VubGVzcyAoZ19oYXNoX3RhYmxlX2NvbnRhaW5zICh0bXBfdGFibGUsICJxdWVyeSIpKTsKLSAgZmFpbF91bmxlc3MgKGdfaGFzaF90YWJsZV9sb29rdXAgKHRtcF90YWJsZSwgInF1ZXJ5IikgPT0gTlVMTCk7Ci0gIGdfaGFzaF90YWJsZV91bnJlZiAodG1wX3RhYmxlKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3VyaV9nZXRfZnJhZ21lbnQgKHVybDEpLCAiZnJhZ21lbnQiKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwKLSAgICAgICJzY2hlbWU6Ly91c2VyaW5mb0Bob3N0bmFtZToxMjM0L3BhdGgvdG8vZmlsZT9xdWVyeSNmcmFnbWVudCIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotCi0gIHVybDIgPQotICAgICAgZ3N0X3VyaV9uZXdfd2l0aF9iYXNlICh1cmwxLCBOVUxMLCBOVUxMLCBOVUxMLCBHU1RfVVJJX05PX1BPUlQsCi0gICAgICAibmV3X2ZpbGUiLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3VyaV9nZXRfc2NoZW1lICh1cmwyKSwgInNjaGVtZSIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF91c2VyaW5mbyAodXJsMiksICJ1c2VyaW5mbyIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF9ob3N0ICh1cmwyKSwgImhvc3RuYW1lIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2dldF9wb3J0ICh1cmwyKSA9PSAxMjM0KTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfZ2V0X3BhdGggKHVybDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXBfc3RyLCAiL3BhdGgvdG8vbmV3X2ZpbGUiKTsKLSAgZ19mcmVlICh0bXBfc3RyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfZ2V0X3F1ZXJ5X3RhYmxlICh1cmwyKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfZ2V0X2ZyYWdtZW50ICh1cmwyKSA9PSBOVUxMKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwKLSAgICAgICJzY2hlbWU6Ly91c2VyaW5mb0Bob3N0bmFtZToxMjM0L3BhdGgvdG8vbmV3X2ZpbGUiKTsKLSAgZ19mcmVlICh0bXBfc3RyKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgdXJsMiA9IGdzdF91cmlfZnJvbV9zdHJpbmdfd2l0aF9iYXNlICh1cmwxLCAiL2EvbmV3L3BhdGgvdG8vZmlsZSIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF9zY2hlbWUgKHVybDIpLCAic2NoZW1lIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X3VzZXJpbmZvICh1cmwyKSwgInVzZXJpbmZvIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X2hvc3QgKHVybDIpLCAiaG9zdG5hbWUiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfZ2V0X3BvcnQgKHVybDIpID09IDEyMzQpOwotICB0bXBfc3RyID0gZ3N0X3VyaV9nZXRfcGF0aCAodXJsMik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsICIvYS9uZXcvcGF0aC90by9maWxlIik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2dldF9xdWVyeV90YWJsZSAodXJsMikgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2dldF9mcmFnbWVudCAodXJsMikgPT0gTlVMTCk7Ci0gIHRtcF9zdHIgPSBnc3RfdXJpX3RvX3N0cmluZyAodXJsMik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsCi0gICAgICAic2NoZW1lOi8vdXNlcmluZm9AaG9zdG5hbWU6MTIzNC9hL25ldy9wYXRoL3RvL2ZpbGUiKTsKLSAgZ19mcmVlICh0bXBfc3RyKTsKLSAgZ3N0X3VyaV91bnJlZiAodXJsMik7Ci0KLSAgdXJsMiA9IGdzdF91cmlfZnJvbV9zdHJpbmdfd2l0aF9iYXNlICh1cmwxLCAiaHR0cDovL2Zvb2Jhci5jb20vYmxhIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X3NjaGVtZSAodXJsMiksICJodHRwIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X2hvc3QgKHVybDIpLCAiZm9vYmFyLmNvbSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9nZXRfcG9ydCAodXJsMikgPT0gMCk7Ci0gIHRtcF9zdHIgPSBnc3RfdXJpX2dldF9wYXRoICh1cmwyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwgIi9ibGEiKTsKLSAgZ19mcmVlICh0bXBfc3RyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfZ2V0X3F1ZXJ5X3RhYmxlICh1cmwyKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfZ2V0X2ZyYWdtZW50ICh1cmwyKSA9PSBOVUxMKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwgImh0dHA6Ly9mb29iYXIuY29tL2JsYSIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotICBnc3RfdXJpX3VucmVmICh1cmwyKTsKLQotICB1cmwyID0gZ3N0X3VyaV9jb3B5ICh1cmwxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfZXF1YWwgKHVybDEsIHVybDIpKTsKLSAgZ3N0X3VyaV9zZXRfcXVlcnlfdmFsdWUgKHVybDIsICJrZXkiLCAidmFsdWUiKTsKLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX2VxdWFsICh1cmwxLCB1cmwyKSk7Ci0gIGdzdF91cmlfdW5yZWYgKHVybDIpOwotCi0gIGdzdF91cmlfdW5yZWYgKHVybDEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VybF9nZXRfc2V0KQotewotICBHc3RVcmkgKnVybDsKLSAgZ2NoYXIgKnRtcF9zdHI7Ci0gIEdMaXN0ICp0bXBfbGlzdDsKLQotICB1cmwgPSBnc3RfdXJpX2Zyb21fc3RyaW5nICgic2NoZW1lOi8vaG9zdG5hbWUvcGF0aC90by9maWxlP3F1ZXJ5I2ZyYWdtZW50Iik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X3NjaGVtZSAodXJsLCAibmV3K3NjaGVtZSIpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3VyaV9nZXRfc2NoZW1lICh1cmwpLCAibmV3K3NjaGVtZSIpOwotICB0bXBfc3RyID0gZ3N0X3VyaV90b19zdHJpbmcgKHVybCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsCi0gICAgICAibmV3K3NjaGVtZTovL2hvc3RuYW1lL3BhdGgvdG8vZmlsZT9xdWVyeSNmcmFnbWVudCIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX3NldF9zY2hlbWUgKHVybCwgTlVMTCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9nZXRfc2NoZW1lICh1cmwpID09IE5VTEwpOwotICB0bXBfc3RyID0gZ3N0X3VyaV90b19zdHJpbmcgKHVybCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsICIvL2hvc3RuYW1lL3BhdGgvdG8vZmlsZT9xdWVyeSNmcmFnbWVudCIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotCi0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9zZXRfc2NoZW1lIChOVUxMLCAiZmFpbCIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X3NjaGVtZSAoTlVMTCwgTlVMTCkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX3NldF91c2VyaW5mbyAodXJsLCAidXNlcm5hbWU6cGFzc3dvcmQiKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF91cmlfZ2V0X3VzZXJpbmZvICh1cmwpLCAidXNlcm5hbWU6cGFzc3dvcmQiKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXBfc3RyLAotICAgICAgIi8vdXNlcm5hbWU6cGFzc3dvcmRAaG9zdG5hbWUvcGF0aC90by9maWxlP3F1ZXJ5I2ZyYWdtZW50Iik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X3VzZXJpbmZvICh1cmwsIE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfZ2V0X3VzZXJpbmZvICh1cmwpID09IE5VTEwpOwotICB0bXBfc3RyID0gZ3N0X3VyaV90b19zdHJpbmcgKHVybCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsICIvL2hvc3RuYW1lL3BhdGgvdG8vZmlsZT9xdWVyeSNmcmFnbWVudCIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotCi0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9zZXRfdXNlcmluZm8gKE5VTEwsICJmYWlsIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9zZXRfdXNlcmluZm8gKE5VTEwsIE5VTEwpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9zZXRfaG9zdCAodXJsLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2dldF9ob3N0ICh1cmwpID09IE5VTEwpOwotICB0bXBfc3RyID0gZ3N0X3VyaV90b19zdHJpbmcgKHVybCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsICIvcGF0aC90by9maWxlP3F1ZXJ5I2ZyYWdtZW50Iik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X2hvc3QgKHVybCwgImV4YW1wbGUuY29tIikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3RfdXJpX2dldF9ob3N0ICh1cmwpLCAiZXhhbXBsZS5jb20iKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXBfc3RyLAotICAgICAgIi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlP3F1ZXJ5I2ZyYWdtZW50Iik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0KLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX3NldF9ob3N0IChOVUxMLCAiZmFpbCIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X2hvc3QgKE5VTEwsIE5VTEwpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9zZXRfcG9ydCAodXJsLCAxMjM0NSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9nZXRfcG9ydCAodXJsKSA9PSAxMjM0NSk7Ci0gIHRtcF9zdHIgPSBnc3RfdXJpX3RvX3N0cmluZyAodXJsKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwKLSAgICAgICIvL2V4YW1wbGUuY29tOjEyMzQ1L3BhdGgvdG8vZmlsZT9xdWVyeSNmcmFnbWVudCIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX3NldF9wb3J0ICh1cmwsIEdTVF9VUklfTk9fUE9SVCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9nZXRfcG9ydCAodXJsKSA9PSBHU1RfVVJJX05PX1BPUlQpOwotICB0bXBfc3RyID0gZ3N0X3VyaV90b19zdHJpbmcgKHVybCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsCi0gICAgICAiLy9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGU/cXVlcnkjZnJhZ21lbnQiKTsKLSAgZ19mcmVlICh0bXBfc3RyKTsKLQotICBmYWlsX3VubGVzcyAoIWdzdF91cmlfc2V0X3BvcnQgKE5VTEwsIDEyMzQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X3BvcnQgKE5VTEwsIEdTVF9VUklfTk9fUE9SVCkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2FwcGVuZF9wYXRoX3NlZ21lbnQgKHVybCwgImhlcmUiKSk7Ci0gIHRtcF9zdHIgPSBnc3RfdXJpX3RvX3N0cmluZyAodXJsKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwKLSAgICAgICIvL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS9oZXJlP3F1ZXJ5I2ZyYWdtZW50Iik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0KLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX2FwcGVuZF9wYXRoX3NlZ21lbnQgKE5VTEwsICJmYWlsIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9hcHBlbmRfcGF0aF9zZWdtZW50IChOVUxMLCBOVUxMKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfYXBwZW5kX3BhdGggKHVybCwgIi4uL3RoZXJlIikpOwotICB0bXBfc3RyID0gZ3N0X3VyaV90b19zdHJpbmcgKHVybCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsCi0gICAgICAiLy9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUvaGVyZS8uLi90aGVyZT9xdWVyeSNmcmFnbWVudCIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotCi0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9hcHBlbmRfcGF0aCAoTlVMTCwgImZhaWwiKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2FwcGVuZF9wYXRoIChOVUxMLCBOVUxMKSk7Ci0KLSAgZ3N0X3VyaV9ub3JtYWxpemUgKHVybCk7Ci0KLSAgdG1wX2xpc3QgPSBnc3RfdXJpX2dldF9wYXRoX3NlZ21lbnRzICh1cmwpOwotICBmYWlsX3VubGVzcyAodG1wX2xpc3QgIT0gTlVMTCk7Ci0gIHRtcF9saXN0ID0gZ19saXN0X2FwcGVuZCAodG1wX2xpc3QsIGdfc3RyZHVwICgic2VnbWVudCIpKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXBfc3RyLAotICAgICAgIi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlL3RoZXJlP3F1ZXJ5I2ZyYWdtZW50Iik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX3NldF9wYXRoX3NlZ21lbnRzICh1cmwsIHRtcF9saXN0KSk7Ci0gIHRtcF9zdHIgPSBnc3RfdXJpX3RvX3N0cmluZyAodXJsKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwKLSAgICAgICIvL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS90aGVyZS9zZWdtZW50P3F1ZXJ5I2ZyYWdtZW50Iik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0KLSAgdG1wX2xpc3QgPSBnX2xpc3RfYXBwZW5kIChOVUxMLCBnX3N0cmR1cCAoInRlc3QiKSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9zZXRfcGF0aF9zZWdtZW50cyAoTlVMTCwgdG1wX2xpc3QpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X3BhdGhfc2VnbWVudHMgKE5VTEwsIE5VTEwpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9zZXRfcXVlcnlfdmFsdWUgKHVybCwgImtleSIsICJ2YWx1ZSIpKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXBfc3RyLAotICAgICAgIi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlL3RoZXJlL3NlZ21lbnQ/cXVlcnkma2V5PXZhbHVlI2ZyYWdtZW50Iik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfc2V0X3F1ZXJ5X3ZhbHVlICh1cmwsICJrZXkiLCBOVUxMKSk7Ci0gIHRtcF9zdHIgPSBnc3RfdXJpX3RvX3N0cmluZyAodXJsKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodG1wX3N0ciwKLSAgICAgICIvL2V4YW1wbGUuY29tL3BhdGgvdG8vZmlsZS90aGVyZS9zZWdtZW50P3F1ZXJ5JmtleSNmcmFnbWVudCIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotCi0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9zZXRfcXVlcnlfdmFsdWUgKE5VTEwsICJrZXkiLCAidmFsdWUiKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF91cmlfcmVtb3ZlX3F1ZXJ5X2tleSAodXJsLCAia2V5IikpOwotICB0bXBfc3RyID0gZ3N0X3VyaV90b19zdHJpbmcgKHVybCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHRtcF9zdHIsCi0gICAgICAiLy9leGFtcGxlLmNvbS9wYXRoL3RvL2ZpbGUvdGhlcmUvc2VnbWVudD9xdWVyeSNmcmFnbWVudCIpOwotICBnX2ZyZWUgKHRtcF9zdHIpOwotCi0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9yZW1vdmVfcXVlcnlfa2V5ICh1cmwsICJrZXkiKSk7Ci0gIGZhaWxfdW5sZXNzICghZ3N0X3VyaV9yZW1vdmVfcXVlcnlfa2V5IChOVUxMLCAia2V5IikpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX3NldF9mcmFnbWVudCAodXJsLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX2dldF9mcmFnbWVudCAodXJsKSA9PSBOVUxMKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXBfc3RyLAotICAgICAgIi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlL3RoZXJlL3NlZ21lbnQ/cXVlcnkiKTsKLSAgZ19mcmVlICh0bXBfc3RyKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3VyaV9zZXRfZnJhZ21lbnQgKHVybCwgInRhZyIpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3VyaV9nZXRfZnJhZ21lbnQgKHVybCksICJ0YWciKTsKLSAgdG1wX3N0ciA9IGdzdF91cmlfdG9fc3RyaW5nICh1cmwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICh0bXBfc3RyLAotICAgICAgIi8vZXhhbXBsZS5jb20vcGF0aC90by9maWxlL3RoZXJlL3NlZ21lbnQ/cXVlcnkjdGFnIik7Ci0gIGdfZnJlZSAodG1wX3N0cik7Ci0KLSAgZmFpbF91bmxlc3MgKCFnc3RfdXJpX3NldF9mcmFnbWVudCAoTlVMTCwgImNhbid0IHNldCBpZiBubyBVUkkiKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdXJpX3NldF9mcmFnbWVudCAoTlVMTCwgTlVMTCkpOwotCi0gIGdzdF91cmlfdW5yZWYgKHVybCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF91cmlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0VVJJIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInVyaSIpOwotCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMjApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHJvdG9jb2xfY2FzZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91cmlfZ2V0X2xvY2F0aW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3VyaV9taXNjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSk7Ci0jaWZkZWYgR19PU19XSU4zMgotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2luMzJfdXJpKTsKLSNlbmRpZgotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdXJsX3BhcnNpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdXJsX3ByZXNlbnRpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdXJsX25vcm1hbGl6YXRpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdXJsX2pvaW5pbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdXJsX2VxdWFsaXR5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3VybF9jb25zdHJ1Y3RvcnMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdXJsX2dldF9zZXQpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X3VyaSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0dXRpbHMuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTVkZTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R1dGlscy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc5MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogZ3N0dXRpbHMuYzogVW5pdCB0ZXN0IGZvciBmdW5jdGlvbnMgaW4gZ3N0dXRpbHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2RlZmluZSBTUEVDSUFMX1BPSU5URVIoeCkgKCh2b2lkKikoMTkyODM4NDcrKHgpKSkKLQotc3RhdGljIGludCBuX2RhdGFfcHJvYmVzID0gMDsKLXN0YXRpYyBpbnQgbl9idWZmZXJfcHJvYmVzID0gMDsKLXN0YXRpYyBpbnQgbl9ldmVudF9wcm9iZXMgPSAwOwotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLXByb2JlX2RvX25vdGhpbmcgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0TWluaU9iamVjdCAqb2JqID0gR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEgKGluZm8pOwotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJpcyBidWZmZXI6JWQiLCBHU1RfSVNfQlVGRkVSIChvYmopKTsKLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZGF0YV9wcm9iZSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciBkYXRhKQotewotICBHc3RNaW5pT2JqZWN0ICpvYmogPSBHU1RfUEFEX1BST0JFX0lORk9fREFUQSAoaW5mbyk7Ci0gIG5fZGF0YV9wcm9iZXMrKzsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZGF0YSBwcm9iZSAlZCIsIG5fZGF0YV9wcm9iZXMpOwotICBnX2Fzc2VydCAoR1NUX0lTX0JVRkZFUiAob2JqKSB8fCBHU1RfSVNfRVZFTlQgKG9iaikpOwotICBnX2Fzc2VydCAoZGF0YSA9PSBTUEVDSUFMX1BPSU5URVIgKDApKTsKLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotYnVmZmVyX3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdEJ1ZmZlciAqb2JqID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUiAoaW5mbyk7Ci0gIG5fYnVmZmVyX3Byb2JlcysrOwotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJidWZmZXIgcHJvYmUgJWQiLCBuX2J1ZmZlcl9wcm9iZXMpOwotICBnX2Fzc2VydCAoR1NUX0lTX0JVRkZFUiAob2JqKSk7Ci0gIGdfYXNzZXJ0IChkYXRhID09IFNQRUNJQUxfUE9JTlRFUiAoMSkpOwotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1ldmVudF9wcm9iZSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciBkYXRhKQotewotICBHc3RFdmVudCAqb2JqID0gR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UIChpbmZvKTsKLSAgbl9ldmVudF9wcm9iZXMrKzsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZXZlbnQgcHJvYmUgJWQgWyVzXSIsCi0gICAgICBuX2V2ZW50X3Byb2JlcywgR1NUX0VWRU5UX1RZUEVfTkFNRSAob2JqKSk7Ci0gIGdfYXNzZXJ0IChHU1RfSVNfRVZFTlQgKG9iaikpOwotICBnX2Fzc2VydCAoZGF0YSA9PSBTUEVDSUFMX1BPSU5URVIgKDIpKTsKLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2J1ZmZlcl9wcm9iZV9uX3RpbWVzKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmZha2VzcmMsICpmYWtlc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFBhZCAqcGFkOwotCi0gIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKLSAgZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotCi0gIGdfb2JqZWN0X3NldCAoZmFrZXNyYywgIm51bS1idWZmZXJzIiwgKGludCkgMTAsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOwotICBnc3RfZWxlbWVudF9saW5rIChmYWtlc3JjLCBmYWtlc2luayk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGZha2VzaW5rLCAic2luayIpOwotCi0gIC8qIGFkZCB0aGUgcHJvYmVzIHdlIG5lZWQgZm9yIHRoZSB0ZXN0ICovCi0gIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0JPVEgsIGRhdGFfcHJvYmUsCi0gICAgICBTUEVDSUFMX1BPSU5URVIgKDApLCBOVUxMKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwgYnVmZmVyX3Byb2JlLAotICAgICAgU1BFQ0lBTF9QT0lOVEVSICgxKSwgTlVMTCk7Ci0gIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9CT1RILCBldmVudF9wcm9iZSwKLSAgICAgIFNQRUNJQUxfUE9JTlRFUiAoMiksIE5VTEwpOwotCi0gIC8qIGFkZCBzb21lIHN0cmluZyBwcm9iZXMganVzdCB0byB0ZXN0IHRoYXQgdGhlIGRhdGEgaXMgZnJlZSdkCi0gICAqIHByb3Blcmx5IGFzIGl0IHNob3VsZCBiZSAqLwotICBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9CT1RILCBwcm9iZV9kb19ub3RoaW5nLAotICAgICAgZ19zdHJkdXAgKCJkYXRhIHByb2JlIHN0cmluZyIpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSk7Ci0gIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHByb2JlX2RvX25vdGhpbmcsCi0gICAgICBnX3N0cmR1cCAoImJ1ZmZlciBwcm9iZSBzdHJpbmciKSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfQk9USCwgcHJvYmVfZG9fbm90aGluZywKLSAgICAgIGdfc3RyZHVwICgiZXZlbnQgcHJvYmUgc3RyaW5nIiksIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TLCAtMSk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBnX2Fzc2VydCAobl9idWZmZXJfcHJvYmVzID09IDEwKTsgICAgIC8qIG9uZSBmb3IgZXZlcnkgYnVmZmVyICovCi0gIGdfYXNzZXJ0IChuX2V2ZW50X3Byb2JlcyA9PSA0KTsgICAgICAgLyogc3RyZWFtLXN0YXJ0LCBuZXcgc2VnbWVudCwgbGF0ZW5jeSBhbmQgZW9zICovCi0gIGdfYXNzZXJ0IChuX2RhdGFfcHJvYmVzID09IDE0KTsgICAgICAgLyogZHVoICovCi0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgLyogbWFrZSBzdXJlIG5vdGhpbmcgd2FzIHNlbnQgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHdoZW4gc2h1dHRpbmcgZG93biAqLwotICBnX2Fzc2VydCAobl9idWZmZXJfcHJvYmVzID09IDEwKTsgICAgIC8qIG9uZSBmb3IgZXZlcnkgYnVmZmVyICovCi0gIGdfYXNzZXJ0IChuX2V2ZW50X3Byb2JlcyA9PSA0KTsgICAgICAgLyogc3RyZWFtLXN0YXJ0LCBuZXcgc2VnbWVudCwgbGF0ZW5jeSBhbmQgZW9zICovCi0gIGdfYXNzZXJ0IChuX2RhdGFfcHJvYmVzID09IDE0KTsgICAgICAgLyogZHVoICovCi19IEdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGludCBuX2RhdGFfcHJvYmVzX29uY2UgPSAwOwotc3RhdGljIGludCBuX2J1ZmZlcl9wcm9iZXNfb25jZSA9IDA7Ci1zdGF0aWMgaW50IG5fZXZlbnRfcHJvYmVzX29uY2UgPSAwOwotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWRhdGFfcHJvYmVfb25jZSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBndWludCAqIGRhdGEpCi17Ci0gIEdzdE1pbmlPYmplY3QgKm9iaiA9IEdTVF9QQURfUFJPQkVfSU5GT19EQVRBIChpbmZvKTsKLQotICBuX2RhdGFfcHJvYmVzX29uY2UrKzsKLSAgZ19hc3NlcnQgKEdTVF9JU19CVUZGRVIgKG9iaikgfHwgR1NUX0lTX0VWRU5UIChvYmopKTsKLQotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCAqZGF0YSk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotYnVmZmVyX3Byb2JlX29uY2UgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3VpbnQgKiBkYXRhKQotewotICBHc3RCdWZmZXIgKm9iaiA9IEdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIgKGluZm8pOwotCi0gIG5fYnVmZmVyX3Byb2Jlc19vbmNlKys7Ci0gIGdfYXNzZXJ0IChHU1RfSVNfQlVGRkVSIChvYmopKTsKLQotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCAqZGF0YSk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZXZlbnRfcHJvYmVfb25jZSAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBndWludCAqIGRhdGEpCi17Ci0gIEdzdEV2ZW50ICpvYmogPSBHU1RfUEFEX1BST0JFX0lORk9fRVZFTlQgKGluZm8pOwotCi0gIG5fZXZlbnRfcHJvYmVzX29uY2UrKzsKLSAgZ19hc3NlcnQgKEdTVF9JU19FVkVOVCAob2JqKSk7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHBhZCwgKmRhdGEpOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9idWZmZXJfcHJvYmVfb25jZSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmYWtlc3JjLCAqZmFrZXNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHc3RQYWQgKnBhZDsKLSAgZ3VpbnQgaWQxLCBpZDIsIGlkMzsKLQotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0gIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKGZha2VzcmMsICJudW0tYnVmZmVycyIsIChpbnQpIDEwLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGZha2VzcmMsIGZha2VzaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGluayAoZmFrZXNyYywgZmFrZXNpbmspOwotCi0gIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChmYWtlc2luaywgInNpbmsiKTsKLSAgaWQxID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0JPVEgsCi0gICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgZGF0YV9wcm9iZV9vbmNlLCAmaWQxLCBOVUxMKTsKLSAgaWQyID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsCi0gICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgYnVmZmVyX3Byb2JlX29uY2UsICZpZDIsIE5VTEwpOwotICBpZDMgPQotICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEgsCi0gICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgZXZlbnRfcHJvYmVfb25jZSwgJmlkMywgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MsIC0xKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotCi0gIGdfYXNzZXJ0IChuX2J1ZmZlcl9wcm9iZXNfb25jZSA9PSAxKTsgLyogY2FuIHdlIGhpdCBpdCBhbmQgcXVpdD8gKi8KLSAgZ19hc3NlcnQgKG5fZXZlbnRfcHJvYmVzX29uY2UgPT0gMSk7ICAvKiBpIHNhaWQsIGNhbiB3ZSBoaXQgaXQgYW5kIHF1aXQ/ICovCi0gIGdfYXNzZXJ0IChuX2RhdGFfcHJvYmVzX29uY2UgPT0gMSk7ICAgLyogbGV0J3MgaGl0IGl0IGFuZCBxdWl0ISEhICovCi19IEdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWF0aF9zY2FsZSkKLXsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoMSwgMSwgMSkgIT0gMSk7Ci0KLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoMTAsIDEwLCAxKSAhPSAxMDApOwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgxMCwgMTAsIDIpICE9IDUwKTsKLQotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgwLCAxMCwgMikgIT0gMCk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKDAsIDAsIDIpICE9IDApOwotCi0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdfTUFYVUlOVDMyLCA1LCAxKSAhPSBHX01BWFVJTlQzMiAqIDVMTCk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdfTUFYVUlOVDMyLCAxMCwgMikgIT0gR19NQVhVSU5UMzIgKiA1TEwpOwotCi0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdfTUFYVUlOVDMyLCAxLCA1KSAhPSBHX01BWFVJTlQzMiAvIDVMTCk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdfTUFYVUlOVDMyLCAyLCAxMCkgIT0gR19NQVhVSU5UMzIgLyA1TEwpOwotCi0gIC8qIG5vdCBxdWl0ZSBvdmVyZmxvdyAqLwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHX01BWFVJTlQ2NCAtIDEsIDEwLAotICAgICAgICAgIDEwKSAhPSBHX01BWFVJTlQ2NCAtIDEpOwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHX01BWFVJTlQ2NCAtIDEsIEdfTUFYSU5UMzIsCi0gICAgICAgICAgR19NQVhJTlQzMikgIT0gR19NQVhVSU5UNjQgLSAxKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR19NQVhVSU5UNjQgLSAxMDAsIEdfTUFYSU5UMzIsCi0gICAgICAgICAgR19NQVhJTlQzMikgIT0gR19NQVhVSU5UNjQgLSAxMDApOwotCi0gIC8qIG92ZXJmbG93ICovCi0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdfTUFYVUlOVDY0IC0gMSwgMTAsIDEpICE9IEdfTUFYVUlOVDY0KTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR19NQVhVSU5UNjQgLSAxLCBHX01BWElOVDMyLAotICAgICAgICAgIDEpICE9IEdfTUFYVUlOVDY0KTsKLQotfSBHU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21hdGhfc2NhbGVfcm91bmQpCi17Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKDIsIDEsIDIpICE9IDEpOwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kICgzLCAxLCAyKSAhPSAyKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoNCwgMSwgMikgIT0gMik7Ci0KLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoMjAwLCAxMDAsIDIwMDAwKSAhPSAxKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoMjk5LCAxMDAsIDIwMDAwKSAhPSAxKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoMzAwLCAxMDAsIDIwMDAwKSAhPSAyKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoMzAxLCAxMDAsIDIwMDAwKSAhPSAyKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoNDAwLCAxMDAsIDIwMDAwKSAhPSAyKTsKLX0gR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tYXRoX3NjYWxlX2NlaWwpCi17Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoMiwgMSwgMikgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoMywgMSwgMikgIT0gMik7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoNCwgMSwgMikgIT0gMik7Ci0KLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICgyMDAsIDEwMCwgMjAwMDApICE9IDEpOwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKDI5OSwgMTAwLCAyMDAwMCkgIT0gMik7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoMzAwLCAxMDAsIDIwMDAwKSAhPSAyKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICgzMDEsIDEwMCwgMjAwMDApICE9IDIpOwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKDQwMCwgMTAwLCAyMDAwMCkgIT0gMik7Ci19IEdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWF0aF9zY2FsZV91aW50NjQpCi17Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoMSwgMSwgMSkgIT0gMSk7Ci0KLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlICgxMCwgMTAsIDEpICE9IDEwMCk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoMTAsIDEwLCAyKSAhPSA1MCk7Ci0KLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlICgwLCAxMCwgMikgIT0gMCk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoMCwgMCwgMikgIT0gMCk7Ci0KLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQzMiwgNSwgMSkgIT0gR19NQVhVSU5UMzIgKiA1TEwpOwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdfTUFYVUlOVDMyLCAxMCwgMikgIT0gR19NQVhVSU5UMzIgKiA1TEwpOwotCi0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UMzIsIDEsIDUpICE9IEdfTUFYVUlOVDMyIC8gNUxMKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQzMiwgMiwgMTApICE9IEdfTUFYVUlOVDMyIC8gNUxMKTsKLQotICAvKiBub3QgcXVpdGUgb3ZlcmZsb3cgKi8KLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQ2NCAtIDEsIDEwLCAxMCkgIT0gR19NQVhVSU5UNjQgLSAxKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQ2NCAtIDEsIEdfTUFYVUlOVDMyLAotICAgICAgICAgIEdfTUFYVUlOVDMyKSAhPSBHX01BWFVJTlQ2NCAtIDEpOwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdfTUFYVUlOVDY0IC0gMTAwLCBHX01BWFVJTlQzMiwKLSAgICAgICAgICBHX01BWFVJTlQzMikgIT0gR19NQVhVSU5UNjQgLSAxMDApOwotCi0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UNjQgLSAxLCAxMCwgMTApICE9IEdfTUFYVUlOVDY0IC0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoR19NQVhVSU5UNjQgLSAxLCBHX01BWFVJTlQ2NCwKLSAgICAgICAgICBHX01BWFVJTlQ2NCkgIT0gR19NQVhVSU5UNjQgLSAxKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQ2NCAtIDEwMCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgR19NQVhVSU5UNjQpICE9IEdfTUFYVUlOVDY0IC0gMTAwKTsKLQotICAvKiBvdmVyZmxvdyAqLwotICBmYWlsX2lmIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdfTUFYVUlOVDY0IC0gMSwgMTAsIDEpICE9IEdfTUFYVUlOVDY0KTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHX01BWFVJTlQ2NCAtIDEsIEdfTUFYVUlOVDY0LAotICAgICAgICAgIDEpICE9IEdfTUFYVUlOVDY0KTsKLQotfSBHU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21hdGhfc2NhbGVfcmFuZG9tKQotewotICBndWludDY0IHZhbCwgbnVtLCBkZW5vbSwgcmVzOwotICBHUmFuZCAqcmFuZDsKLSAgZ2ludCBpOwotCi0gIHJhbmQgPSBnX3JhbmRfbmV3ICgpOwotCi0gIGkgPSAxMDAwMDA7Ci0gIHdoaWxlIChpLS0pIHsKLSAgICBndWludDY0IGNoZWNrLCBkaWZmOwotCi0gICAgdmFsID0gKChndWludDY0KSBnX3JhbmRfaW50IChyYW5kKSkgPDwgMzIgfCBnX3JhbmRfaW50IChyYW5kKTsKLSAgICBudW0gPSAoKGd1aW50NjQpIGdfcmFuZF9pbnQgKHJhbmQpKSA8PCAzMiB8IGdfcmFuZF9pbnQgKHJhbmQpOwotICAgIGRlbm9tID0gKChndWludDY0KSBnX3JhbmRfaW50IChyYW5kKSkgPDwgMzIgfCBnX3JhbmRfaW50IChyYW5kKTsKLQotICAgIHJlcyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAodmFsLCBudW0sIGRlbm9tKTsKLSAgICBjaGVjayA9IGdzdF9nZG91YmxlX3RvX2d1aW50NjQgKGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHZhbCkgKgotICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChudW0pIC8gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAoZGVub20pKTsKLQotICAgIGlmIChyZXMgPCBHX01BWFVJTlQ2NCAmJiBjaGVjayA8IEdfTUFYVUlOVDY0KSB7Ci0gICAgICBpZiAocmVzID4gY2hlY2spCi0gICAgICAgIGRpZmYgPSByZXMgLSBjaGVjazsKLSAgICAgIGVsc2UKLSAgICAgICAgZGlmZiA9IGNoZWNrIC0gcmVzOwotCi0gICAgICAvKiBzb21lIGFyYml0cmFyeSB2YWx1ZSwgcmVhbGx5Li4gc29tZW9uZSBkbyB0aGUgcHJvcGVyIG1hdGggdG8gZ2V0Ci0gICAgICAgKiB0aGUgdXBwZXIgYm91bmQgKi8KLSAgICAgIGlmIChkaWZmID4gMjAwMDApCi0gICAgICAgIGZhaWxfaWYgKGRpZmYgPiAyMDAwMCk7Ci0gICAgfQotICB9Ci0gIGdfcmFuZF9mcmVlIChyYW5kKTsKLQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2d1aW50NjRfdG9fZ2RvdWJsZSkKLXsKLSAgZ3VpbnQ2NCBmcm9tW10gPSB7IDAsIDEsIDEwMCwgMTAwMDAsIChndWludDY0KSAoMSkgPDwgNjMsCi0gICAgKChndWludDY0KSAoMSkgPDwgNjMpICsgMSwKLSAgICAoKGd1aW50NjQpICgxKSA8PCA2MykgKyAoR19HSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDYyKQotICB9OwotICBnZG91YmxlIHRvW10gPSB7IDAuLCAxLiwgMTAwLiwgMTAwMDAuLCA5MjIzMzcyMDM2ODU0Nzc1ODA4LiwKLSAgICA5MjIzMzcyMDM2ODU0Nzc1ODA5LiwgMTM4MzUwNTgwNTUyODIxNjM3MTIuCi0gIH07Ci0gIGdkb3VibGUgdG9sZXJhbmNlW10gPSB7IDAuLCAwLiwgMC4sIDAuLCAwLiwgMS4sIDEuIH07Ci0gIGdpbnQgaTsKLSAgZ2RvdWJsZSByZXN1bHQ7Ci0gIGdkb3VibGUgZGVsdGE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZnJvbSk7ICsraSkgewotICAgIHJlc3VsdCA9IGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSAoZnJvbVtpXSk7Ci0gICAgZGVsdGEgPSBBQlMgKHRvW2ldIC0gcmVzdWx0KTsKLSAgICBmYWlsX3VubGVzcyAoZGVsdGEgPD0gdG9sZXJhbmNlW2ldLAotICAgICAgICAiQ291bGQgbm90IGNvbnZlcnQgJWQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgIiAtPiAlZiwgZ290ICVmIGluc3RlYWQsIGRlbHRhIG9mICVlIHdpdGggdG9sZXJhbmNlIG9mICVlIiwKLSAgICAgICAgaSwgZnJvbVtpXSwgdG9baV0sIHJlc3VsdCwgZGVsdGEsIHRvbGVyYW5jZVtpXSk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9nZG91YmxlX3RvX2d1aW50NjQpCi17Ci0gIGdkb3VibGUgZnJvbVtdID0geyAwLiwgMS4sIDEwMC4sIDEwMDAwLiwgOTIyMzM3MjAzNjg1NDc3NTgwOC4sCi0gICAgOTIyMzM3MjAzNjg1NDc3NTgwOS4sIDEzODM1MDU4MDU1MjgyMTYzNzEyLgotICB9OwotICBndWludDY0IHRvW10gPSB7IDAsIDEsIDEwMCwgMTAwMDAsIChndWludDY0KSAoMSkgPDwgNjMsCi0gICAgKChndWludDY0KSAoMSkgPDwgNjMpICsgMSwKLSAgICAoKGd1aW50NjQpICgxKSA8PCA2MykgKyAoR19HSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDYyKQotICB9OwotICBndWludDY0IHRvbGVyYW5jZVtdID0geyAwLCAwLCAwLCAwLCAwLCAxLCAxIH07Ci0gIGdpbnQgaTsKLSAgZ2RvdWJsZSByZXN1bHQ7Ci0gIGd1aW50NjQgZGVsdGE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZnJvbSk7ICsraSkgewotICAgIHJlc3VsdCA9IGdzdF91dGlsX2dkb3VibGVfdG9fZ3VpbnQ2NCAoZnJvbVtpXSk7Ci0gICAgZGVsdGEgPSBBQlMgKHRvW2ldIC0gcmVzdWx0KTsKLSAgICBmYWlsX3VubGVzcyAoZGVsdGEgPD0gdG9sZXJhbmNlW2ldLAotICAgICAgICAiQ291bGQgbm90IGNvbnZlcnQgJWY6ICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgIiAtPiAlZCwgZ290ICVkIGluc3RlYWQsIGRlbHRhIG9mICVlIHdpdGggdG9sZXJhbmNlIG9mICVlIiwKLSAgICAgICAgaSwgZnJvbVtpXSwgdG9baV0sIHJlc3VsdCwgZGVsdGEsIHRvbGVyYW5jZVtpXSk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbikKLXsKLSAgc3RydWN0Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqYmluX2Rlc2M7Ci0gICAgY29uc3QgZ2NoYXIgKnBhZF9uYW1lczsKLSAgfSBiaW5fdGVzdHNbXSA9IHsKLSAgICB7Ci0gICAgImlkZW50aXR5IiwgImlkZW50aXR5MC9zaW5rLGlkZW50aXR5MC9zcmMifSwgewotICAgICJpZGVudGl0eSAhIGlkZW50aXR5ICEgaWRlbnRpdHkiLCAiaWRlbnRpdHkxL3NpbmssaWRlbnRpdHkzL3NyYyJ9LCB7Ci0gICAgImlkZW50aXR5ICEgZmFrZXNpbmsiLCAiaWRlbnRpdHk0L3NpbmsifSwgewotICAgICJmYWtlc3JjICEgaWRlbnRpdHkiLCAiaWRlbnRpdHk1L3NyYyJ9LCB7Ci0gICAgImZha2VzcmMgISBmYWtlc2luayIsICIifQotICB9OwotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoYmluX3Rlc3RzKTsgKytpKSB7Ci0gICAgR3N0RWxlbWVudCAqYmluLCAqcGFyZW50OwotICAgIEdTdHJpbmcgKnM7Ci0gICAgR3N0UGFkICpnaG9zdF9wYWQsICp0YXJnZXRfcGFkOwotICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICAgIGJpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbiAoYmluX3Rlc3RzW2ldLmJpbl9kZXNjLCBUUlVFLCAmZXJyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICBnX2Vycm9yICgiRVJST1IgaW4gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uICglcyk6ICVzIiwKLSAgICAgICAgICBiaW5fdGVzdHNbaV0uYmluX2Rlc2MsIGVyci0+bWVzc2FnZSk7Ci0gICAgfQotICAgIGdfYXNzZXJ0IChiaW4gIT0gTlVMTCk7Ci0KLSAgICBzID0gZ19zdHJpbmdfbmV3ICgiIik7Ci0gICAgaWYgKChnaG9zdF9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYmluLCAic2luayIpKSkgewotICAgICAgZ19hc3NlcnQgKEdTVF9JU19HSE9TVF9QQUQgKGdob3N0X3BhZCkpOwotCi0gICAgICB0YXJnZXRfcGFkID0gZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0IChHU1RfR0hPU1RfUEFEIChnaG9zdF9wYWQpKTsKLSAgICAgIGdfYXNzZXJ0ICh0YXJnZXRfcGFkICE9IE5VTEwpOwotICAgICAgZ19hc3NlcnQgKEdTVF9JU19QQUQgKHRhcmdldF9wYWQpKTsKLQotICAgICAgcGFyZW50ID0gZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQgKHRhcmdldF9wYWQpOwotICAgICAgZ19hc3NlcnQgKHBhcmVudCAhPSBOVUxMKTsKLQotICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAocywgIiVzL3NpbmsiLCBHU1RfRUxFTUVOVF9OQU1FIChwYXJlbnQpKTsKLQotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFyZW50KTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldF9wYWQpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZ2hvc3RfcGFkKTsKLSAgICB9Ci0KLSAgICBpZiAoKGdob3N0X3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChiaW4sICJzcmMiKSkpIHsKLSAgICAgIGdfYXNzZXJ0IChHU1RfSVNfR0hPU1RfUEFEIChnaG9zdF9wYWQpKTsKLQotICAgICAgdGFyZ2V0X3BhZCA9IGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRCAoZ2hvc3RfcGFkKSk7Ci0gICAgICBnX2Fzc2VydCAodGFyZ2V0X3BhZCAhPSBOVUxMKTsKLSAgICAgIGdfYXNzZXJ0IChHU1RfSVNfUEFEICh0YXJnZXRfcGFkKSk7Ci0KLSAgICAgIHBhcmVudCA9IGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50ICh0YXJnZXRfcGFkKTsKLSAgICAgIGdfYXNzZXJ0IChwYXJlbnQgIT0gTlVMTCk7Ci0KLSAgICAgIGlmIChzLT5sZW4gPiAwKSB7Ci0gICAgICAgIGdfc3RyaW5nX2FwcGVuZCAocywgIiwiKTsKLSAgICAgIH0KLQotICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAocywgIiVzL3NyYyIsIEdTVF9FTEVNRU5UX05BTUUgKHBhcmVudCkpOwotCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0X3BhZCk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChnaG9zdF9wYWQpOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAgKHMtPnN0ciwgYmluX3Rlc3RzW2ldLnBhZF9uYW1lcykgIT0gMCkgewotICAgICAgZ19lcnJvciAoIkZBSUxFRDogZXhwZWN0ZWQgJyVzJywgZ290ICclcycgZm9yIGJpbiAnJXMnIiwKLSAgICAgICAgICBiaW5fdGVzdHNbaV0ucGFkX25hbWVzLCBzLT5zdHIsIGJpbl90ZXN0c1tpXS5iaW5fZGVzYyk7Ci0gICAgfQotICAgIGdfc3RyaW5nX2ZyZWUgKHMsIFRSVUUpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0jZW5kaWYKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZWxlbWVudF9mb3VuZF90YWdzKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmZha2VzcmMsICpmYWtlc2luazsKLSAgR3N0VGFnTGlzdCAqbGlzdDsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKLSAgZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICBnX29iamVjdF9zZXQgKGZha2VzcmMsICJudW0tYnVmZmVycyIsIChpbnQpIDEwLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGZha2VzcmMsIGZha2VzaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGluayAoZmFrZXNyYywgZmFrZXNpbmspOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZmFrZXNyYywgInNyYyIpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld190YWcgKGxpc3QpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TLCAtMSk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICAvKiBGSVhNRTogbWF5YmUgYWxzbyBjaGVjayBpZiB0aGUgZmFrZXNpbmsgcmVjZWl2ZXMgdGhlIG1lc3NhZ2UgKi8KLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lbGVtZW50X3VubGluaykKLXsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2luazsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSAhPSBGQUxTRSk7Ci0gIGdzdF9lbGVtZW50X3VubGluayAoc3JjLCBzaW5rKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nKQotewotICBHVmFsdWUgdmFsID0geyAwLCB9OwotCi0gIC8qIGdfcmV0dXJuX2lmX2ZhaWwgKi8KLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKE5VTEwsICJ4eXoiKSk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfU1RSSU5HKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsIE5VTEwpKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgLyogc3RyaW5nID0+IHN0cmluZyAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9TVFJJTkcpOwotICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICJZMDAiKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X3N0cmluZyAoJnZhbCkgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdfdmFsdWVfZ2V0X3N0cmluZyAoJnZhbCksICJZMDAiKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgLyogc3RyaW5nID0+IGludCAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9JTlQpOwotICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICI5ODc2NTQzMjEiKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludCAoJnZhbCkgPT0gOTg3NjU0MzIxKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfSU5UKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICJ4eXoiKSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIC8qIHN0cmluZyA9PiB1aW50ICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX1VJTlQpOwotICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICI5ODc2NTQzMjEiKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X3VpbnQgKCZ2YWwpID09IDk4NzY1NDMyMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIC8qIENIRUNLTUU6IGlzIHRoaXMgcmVhbGx5IGRlc2lyZWQgYmVoYXZpb3VyPyAodHBtKSAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9VSU5UKTsKLSAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAiLTk5OSIpOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfdWludCAoJnZhbCkgPT0gKChndWludCkgMCAtIChndWludCkgOTk5KSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX1VJTlQpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgInh5eiIpKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgLyogc3RyaW5nID0+IGxvbmcgKi8KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfTE9ORyk7Ci0gIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIjk4NzY1NDMyMSIpOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfbG9uZyAoJnZhbCkgPT0gOTg3NjU0MzIxKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfTE9ORyk7Ci0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAieHl6IikpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLQotICAvKiBzdHJpbmcgPT4gdWxvbmcgKi8KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfVUxPTkcpOwotICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICI5ODc2NTQzMjEiKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X3Vsb25nICgmdmFsKSA9PSA5ODc2NTQzMjEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLQotICAvKiBDSEVDS01FOiBpcyB0aGlzIHJlYWxseSBkZXNpcmVkIGJlaGF2aW91cj8gKHRwbSkgKi8KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfVUxPTkcpOwotICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICItOTk5Iik7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF91bG9uZyAoJnZhbCkgPT0gKChndWxvbmcpIDAgLSAoZ3Vsb25nKSA5OTkpKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfVUxPTkcpOwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgInh5eiIpKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgLyogc3RyaW5nID0+IGJvb2xlYW4gKi8KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfQk9PTEVBTik7Ci0gIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgInRydWUiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ192YWx1ZV9nZXRfYm9vbGVhbiAoJnZhbCksIFRSVUUpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9CT09MRUFOKTsKLSAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAiVFJVRSIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX3ZhbHVlX2dldF9ib29sZWFuICgmdmFsKSwgVFJVRSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX0JPT0xFQU4pOwotICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICJmYWxzZSIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX3ZhbHVlX2dldF9ib29sZWFuICgmdmFsKSwgRkFMU0UpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9CT09MRUFOKTsKLSAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAiRkFMU0UiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ192YWx1ZV9nZXRfYm9vbGVhbiAoJnZhbCksIEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfQk9PTEVBTik7Ci0gIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgImJsZWgiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ192YWx1ZV9nZXRfYm9vbGVhbiAoJnZhbCksIEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSNpZiAwCi0gIC8qIHN0cmluZyA9PiBmbG9hdCAoeWF5LCBsb2NhbGlzYXRpb24gaXNzdWVzIGludm9sdmVkKSAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9GTE9BVCk7Ci0gIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIjk4Ny42NTQiKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2Zsb2F0ICgmdmFsKSA+PSA5ODcuNjUzICYmCi0gICAgICBnX3ZhbHVlX2dldF9mbG9hdCAoJnZhbCkgPD0gOTg3LjY1NSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX0ZMT0FUKTsKLSAgZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nICgmdmFsLCAiOTg3LDY1NCIpOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfZmxvYXQgKCZ2YWwpID49IDk4Ny42NTMgJiYKLSAgICAgIGdfdmFsdWVfZ2V0X2Zsb2F0ICgmdmFsKSA8PSA5ODcuNjU1KTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgLyogc3RyaW5nID0+IGRvdWJsZSAoeWF5LCBsb2NhbGlzYXRpb24gaXNzdWVzIGludm9sdmVkKSAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9ET1VCTEUpOwotICBnc3RfdXRpbF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcgKCZ2YWwsICI5ODcuNjU0Iik7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9kb3VibGUgKCZ2YWwpID49IDk4Ny42NTMgJiYKLSAgICAgIGdfdmFsdWVfZ2V0X2RvdWJsZSAoJnZhbCkgPD0gOTg3LjY1NSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX0RPVUJMRSk7Ci0gIGdzdF91dGlsX3NldF92YWx1ZV9mcm9tX3N0cmluZyAoJnZhbCwgIjk4Nyw2NTQiKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2RvdWJsZSAoJnZhbCkgPj0gOTg3LjY1MyAmJgotICAgICAgZ192YWx1ZV9nZXRfZG91YmxlICgmdmFsKSA8PSA5ODcuNjU1KTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0jZW5kaWYKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2ludAotX2JpbmFyeV9zZWFyY2hfY29tcGFyZSAoZ3VpbnQzMiAqIGEsIGd1aW50MzIgKiBiKQotewotICByZXR1cm4gKmEgLSAqYjsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmluYXJ5X3NlYXJjaCkKLXsKLSAgZ3VpbnQzMiBkYXRhWzI1N107Ci0gIGd1aW50MzIgKm1hdGNoOwotICBndWludDMyIHNlYXJjaF9lbGVtZW50ID0gMTIxICogMjsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMjU3OyBpKyspCi0gICAgZGF0YVtpXSA9IChpICsgMSkgKiAyOwotCi0gIG1hdGNoID0KLSAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKLSAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfRVhBQ1QsCi0gICAgICAmc2VhcmNoX2VsZW1lbnQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobWF0Y2ggIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hdGNoIC0gZGF0YSwgMTIwKTsKLQotICBtYXRjaCA9Ci0gICAgICAoZ3VpbnQzMiAqKSBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChkYXRhLCAyNTcsIHNpemVvZiAoZ3VpbnQzMiksCi0gICAgICAoR0NvbXBhcmVEYXRhRnVuYykgX2JpbmFyeV9zZWFyY2hfY29tcGFyZSwgR1NUX1NFQVJDSF9NT0RFX0JFRk9SRSwKLSAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtYXRjaCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWF0Y2ggLSBkYXRhLCAxMjApOwotCi0gIG1hdGNoID0KLSAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKLSAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfQUZURVIsCi0gICAgICAmc2VhcmNoX2VsZW1lbnQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobWF0Y2ggIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hdGNoIC0gZGF0YSwgMTIwKTsKLQotICBzZWFyY2hfZWxlbWVudCA9IDA7Ci0gIG1hdGNoID0KLSAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKLSAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfRVhBQ1QsCi0gICAgICAmc2VhcmNoX2VsZW1lbnQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobWF0Y2ggPT0gTlVMTCk7Ci0KLSAgbWF0Y2ggPQotICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAotICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9BRlRFUiwKLSAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtYXRjaCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWF0Y2ggLSBkYXRhLCAwKTsKLQotICBtYXRjaCA9Ci0gICAgICAoZ3VpbnQzMiAqKSBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChkYXRhLCAyNTcsIHNpemVvZiAoZ3VpbnQzMiksCi0gICAgICAoR0NvbXBhcmVEYXRhRnVuYykgX2JpbmFyeV9zZWFyY2hfY29tcGFyZSwgR1NUX1NFQVJDSF9NT0RFX0JFRk9SRSwKLSAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtYXRjaCA9PSBOVUxMKTsKLQotICBzZWFyY2hfZWxlbWVudCA9IDEwMDA7Ci0gIG1hdGNoID0KLSAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKLSAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfRVhBQ1QsCi0gICAgICAmc2VhcmNoX2VsZW1lbnQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobWF0Y2ggPT0gTlVMTCk7Ci0KLSAgbWF0Y2ggPQotICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAotICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9BRlRFUiwKLSAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtYXRjaCA9PSBOVUxMKTsKLQotICBtYXRjaCA9Ci0gICAgICAoZ3VpbnQzMiAqKSBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChkYXRhLCAyNTcsIHNpemVvZiAoZ3VpbnQzMiksCi0gICAgICAoR0NvbXBhcmVEYXRhRnVuYykgX2JpbmFyeV9zZWFyY2hfY29tcGFyZSwgR1NUX1NFQVJDSF9NT0RFX0JFRk9SRSwKLSAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtYXRjaCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWF0Y2ggLSBkYXRhLCAyNTYpOwotCi0gIHNlYXJjaF9lbGVtZW50ID0gMTIxICogMiAtIDE7Ci0gIG1hdGNoID0KLSAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKLSAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfRVhBQ1QsCi0gICAgICAmc2VhcmNoX2VsZW1lbnQsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobWF0Y2ggPT0gTlVMTCk7Ci0KLSAgbWF0Y2ggPQotICAgICAgKGd1aW50MzIgKikgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoZGF0YSwgMjU3LCBzaXplb2YgKGd1aW50MzIpLAotICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIF9iaW5hcnlfc2VhcmNoX2NvbXBhcmUsIEdTVF9TRUFSQ0hfTU9ERV9BRlRFUiwKLSAgICAgICZzZWFyY2hfZWxlbWVudCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtYXRjaCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWF0Y2ggLSBkYXRhLCAxMjApOwotCi0gIG1hdGNoID0KLSAgICAgIChndWludDMyICopIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKGRhdGEsIDI1Nywgc2l6ZW9mIChndWludDMyKSwKLSAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBfYmluYXJ5X3NlYXJjaF9jb21wYXJlLCBHU1RfU0VBUkNIX01PREVfQkVGT1JFLAotICAgICAgJnNlYXJjaF9lbGVtZW50LCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG1hdGNoICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXRjaCAtIGRhdGEsIDExOSk7Ci0KLX0KLQotR1NUX0VORF9URVNUOwotCi0jaWZkZWYgSEFWRV9HU0wKLSNpZmRlZiBIQVZFX0dNUAotCi0jaW5jbHVkZSA8Z3NsL2dzbF9ybmcuaD4KLSNpbmNsdWRlIDxnbXAuaD4KLQotc3RhdGljIGd1aW50NjQKLXJhbmRndWludDY0IChnc2xfcm5nICogcm5nLCBndWludDY0IG4pCi17Ci0gIHVuaW9uCi0gIHsKLSAgICBndWludDY0IHg7Ci0gICAgc3RydWN0Ci0gICAgewotICAgICAgZ3VpbnQxNiBhLCBiLCBjLCBkOwotICAgIH0gcGFydHM7Ci0gIH0geDsKLSAgeC5wYXJ0cy5hID0gZ3NsX3JuZ191bmlmb3JtX2ludCAocm5nLCAxIDw8IDE2KTsKLSAgeC5wYXJ0cy5iID0gZ3NsX3JuZ191bmlmb3JtX2ludCAocm5nLCAxIDw8IDE2KTsKLSAgeC5wYXJ0cy5jID0gZ3NsX3JuZ191bmlmb3JtX2ludCAocm5nLCAxIDw8IDE2KTsKLSAgeC5wYXJ0cy5kID0gZ3NsX3JuZ191bmlmb3JtX2ludCAocm5nLCAxIDw8IDE2KTsKLSAgcmV0dXJuIHgueCAlIG47Ci19Ci0KLQotZW51bSByb3VuZF90Ci17Ci0gIFJPVU5EX1RPTkVBUkVTVCA9IDAsCi0gIFJPVU5EX1VQLAotICBST1VORF9ET1dOCi19OwotCi1zdGF0aWMgdm9pZAotZ21wX3NldF91aW50NjQgKG1wel90IG1wLCBndWludDY0IHgpCi17Ci0gIG1wel90IHR3b18zMiwgdG1wOwotCi0gIG1wel9pbml0ICh0d29fMzIpOwotICBtcHpfaW5pdCAodG1wKTsKLQotICBtcHpfdWlfcG93X3VpICh0d29fMzIsIDIsIDMyKTsKLSAgbXB6X3NldF91aSAobXAsICh1bnNpZ25lZCBsb25nKSAoKHggPj4gMzIpICYgR19NQVhVSU5UMzIpKTsKLSAgbXB6X211bCAodG1wLCBtcCwgdHdvXzMyKTsKLSAgbXB6X2FkZF91aSAobXAsIHRtcCwgKHVuc2lnbmVkIGxvbmcpICh4ICYgR19NQVhVSU5UMzIpKTsKLSAgbXB6X2NsZWFyICh0d29fMzIpOwotICBtcHpfY2xlYXIgKHRtcCk7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1nbXBfZ2V0X3VpbnQ2NCAobXB6X3QgbXApCi17Ci0gIG1wel90IHR3b182NCwgdHdvXzMyLCB0bXA7Ci0gIGd1aW50NjQgcmV0OwotCi0gIG1wel9pbml0ICh0d29fNjQpOwotICBtcHpfaW5pdCAodHdvXzMyKTsKLSAgbXB6X2luaXQgKHRtcCk7Ci0KLSAgbXB6X3VpX3Bvd191aSAodHdvXzY0LCAyLCA2NCk7Ci0gIG1wel91aV9wb3dfdWkgKHR3b18zMiwgMiwgMzIpOwotICBpZiAobXB6X2NtcCAodG1wLCB0d29fNjQpID49IDApCi0gICAgcmV0dXJuIEdfTUFYVUlOVDY0OwotICBtcHpfY2xlYXIgKHR3b182NCk7Ci0KLSAgbXB6X3RkaXZfcSAodG1wLCBtcCwgdHdvXzMyKTsKLSAgcmV0ID0gbXB6X2dldF91aSAodG1wKTsKLSAgcmV0IDw8PSAzMjsKLSAgcmV0IHw9IG1wel9nZXRfdWkgKG1wKTsKLSAgbXB6X2NsZWFyICh0d29fMzIpOwotICBtcHpfY2xlYXIgKHRtcCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWdtcF9zY2FsZSAoZ3VpbnQ2NCB4LCBndWludDY0IGEsIGd1aW50NjQgYiwgZW51bSByb3VuZF90IG1vZGUpCi17Ci0gIG1wel90IG1wMSwgbXAyLCBtcDM7Ci0gIGlmICghYikKLSAgICAvKiBvdmVyZmxvdyAqLwotICAgIHJldHVybiBHX01BWFVJTlQ2NDsKLSAgbXB6X2luaXQgKG1wMSk7Ci0gIG1wel9pbml0IChtcDIpOwotICBtcHpfaW5pdCAobXAzKTsKLQotICBnbXBfc2V0X3VpbnQ2NCAobXAxLCB4KTsKLSAgZ21wX3NldF91aW50NjQgKG1wMywgYSk7Ci0gIG1wel9tdWwgKG1wMiwgbXAxLCBtcDMpOwotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFJPVU5EX1RPTkVBUkVTVDoKLSAgICAgIGdtcF9zZXRfdWludDY0IChtcDEsIGIpOwotICAgICAgbXB6X3RkaXZfcV91aSAobXAzLCBtcDEsIDIpOwotICAgICAgbXB6X2FkZCAobXAxLCBtcDIsIG1wMyk7Ci0gICAgICBtcHpfc2V0IChtcDIsIG1wMSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFJPVU5EX1VQOgotICAgICAgZ21wX3NldF91aW50NjQgKG1wMSwgYik7Ci0gICAgICBtcHpfc3ViX3VpIChtcDMsIG1wMSwgMSk7Ci0gICAgICBtcHpfYWRkIChtcDEsIG1wMiwgbXAzKTsKLSAgICAgIG1wel9zZXQgKG1wMiwgbXAxKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUk9VTkRfRE9XTjoKLSAgICAgIGJyZWFrOwotICB9Ci0gIGdtcF9zZXRfdWludDY0IChtcDMsIGIpOwotICBtcHpfdGRpdl9xIChtcDEsIG1wMiwgbXAzKTsKLSAgeCA9IGdtcF9nZXRfdWludDY0IChtcDEpOwotICBtcHpfY2xlYXIgKG1wMSk7Ci0gIG1wel9jbGVhciAobXAyKTsKLSAgbXB6X2NsZWFyIChtcDMpOwotICByZXR1cm4geDsKLX0KLQotc3RhdGljIHZvaWQKLV9nbXBfdGVzdF9zY2FsZSAoZ3NsX3JuZyAqIHJuZykKLXsKLSAgZ3VpbnQ2NCBieWdzdCwgYnlnbXA7Ci0gIGd1aW50NjQgYSA9IHJhbmRndWludDY0IChybmcsIGdzbF9ybmdfdW5pZm9ybV9pbnQgKHJuZywKLSAgICAgICAgICAyKSA/IEdfTUFYVUlOVDY0IDogR19NQVhVSU5UMzIpOwotICBndWludDY0IGIgPSByYW5kZ3VpbnQ2NCAocm5nLCBnc2xfcm5nX3VuaWZvcm1faW50IChybmcsIDIpID8gR19NQVhVSU5UNjQgLSAxIDogR19NQVhVSU5UMzIgLSAxKSArIDE7ICAvKiAwIG5vdCBhbGxvd2VkICovCi0gIGd1aW50NjQgdmFsID0gcmFuZGd1aW50NjQgKHJuZywgZ21wX3NjYWxlIChHX01BWFVJTlQ2NCwgYiwgYSwgUk9VTkRfRE9XTikpOwotICBlbnVtIHJvdW5kX3QgbW9kZSA9IGdzbF9ybmdfdW5pZm9ybV9pbnQgKHJuZywgMyk7Ci0gIGNvbnN0IGNoYXIgKmZ1bmM7Ci0KLSAgYnlnbXAgPSBnbXBfc2NhbGUgKHZhbCwgYSwgYiwgbW9kZSk7Ci0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgUk9VTkRfVE9ORUFSRVNUOgotICAgICAgYnlnc3QgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKHZhbCwgYSwgYik7Ci0gICAgICBmdW5jID0gImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFJPVU5EX1VQOgotICAgICAgYnlnc3QgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCAodmFsLCBhLCBiKTsKLSAgICAgIGZ1bmMgPSAiZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBST1VORF9ET1dOOgotICAgICAgYnlnc3QgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHZhbCwgYSwgYik7Ci0gICAgICBmdW5jID0gImdzdF91dGlsX3VpbnQ2NF9zY2FsZSI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotICBmYWlsX3VubGVzcyAoYnlnc3QgPT0gYnlnbXAsCi0gICAgICAiZXJyb3I6ICVzKCk6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAqICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAvICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFUICIgPSAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGNvcnJlY3QgPSAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiXG4iLCBmdW5jLCB2YWwsIGEsIGIsIGJ5Z3N0LCBieWdtcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZ21wX3Rlc3Rfc2NhbGVfaW50IChnc2xfcm5nICogcm5nKQotewotICBndWludDY0IGJ5Z3N0LCBieWdtcDsKLSAgZ2ludDMyIGEgPSByYW5kZ3VpbnQ2NCAocm5nLCBHX01BWElOVDMyKTsKLSAgZ2ludDMyIGIgPSByYW5kZ3VpbnQ2NCAocm5nLCBHX01BWElOVDMyIC0gMSkgKyAxOyAgICAgLyogMCBub3QgYWxsb3dlZCAqLwotICBndWludDY0IHZhbCA9IHJhbmRndWludDY0IChybmcsIGdtcF9zY2FsZSAoR19NQVhVSU5UNjQsIGIsIGEsIFJPVU5EX0RPV04pKTsKLSAgZW51bSByb3VuZF90IG1vZGUgPSBnc2xfcm5nX3VuaWZvcm1faW50IChybmcsIDMpOwotICBjb25zdCBjaGFyICpmdW5jOwotCi0gIGJ5Z21wID0gZ21wX3NjYWxlICh2YWwsIGEsIGIsIG1vZGUpOwotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFJPVU5EX1RPTkVBUkVTVDoKLSAgICAgIGJ5Z3N0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAodmFsLCBhLCBiKTsKLSAgICAgIGZ1bmMgPSAiZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFJPVU5EX1VQOgotICAgICAgYnlnc3QgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X2NlaWwgKHZhbCwgYSwgYik7Ci0gICAgICBmdW5jID0gImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFJPVU5EX0RPV046Ci0gICAgICBieWdzdCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHZhbCwgYSwgYik7Ci0gICAgICBmdW5jID0gImdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQiOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgZmFpbF91bmxlc3MgKGJ5Z3N0ID09IGJ5Z21wLAotICAgICAgImVycm9yOiAlcygpOiAlIiBHX0dVSU5UNjRfRk9STUFUICIgKiAlZCAvICVkID0gJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgIiwgY29ycmVjdCA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIlxuIiwgZnVuYywgdmFsLCBhLCBiLCBieWdzdCwgYnlnbXApOwotfQotCi0jZGVmaW5lIEdNUF9URVNUX1JVTlMgMTAwMDAwCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21hdGhfc2NhbGVfZ21wKQotewotICBnc2xfcm5nICpybmcgPSBnc2xfcm5nX2FsbG9jIChnc2xfcm5nX210MTk5MzcpOwotICBnaW50IG47Ci0KLSAgZm9yIChuID0gMDsgbiA8IEdNUF9URVNUX1JVTlM7IG4rKykKLSAgICBfZ21wX3Rlc3Rfc2NhbGUgKHJuZyk7Ci0KLSAgZ3NsX3JuZ19mcmVlIChybmcpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21hdGhfc2NhbGVfZ21wX2ludCkKLXsKLSAgZ3NsX3JuZyAqcm5nID0gZ3NsX3JuZ19hbGxvYyAoZ3NsX3JuZ19tdDE5OTM3KTsKLSAgZ2ludCBuOwotCi0gIGZvciAobiA9IDA7IG4gPCBHTVBfVEVTVF9SVU5TOyBuKyspCi0gICAgX2dtcF90ZXN0X3NjYWxlX2ludCAocm5nKTsKLQotICBnc2xfcm5nX2ZyZWUgKHJuZyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2VuZGlmCi0jZW5kaWYKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFkX3Byb3h5X3F1ZXJ5X2NhcHNfYWdncmVnYXRpb24pCi17Ci0gIEdzdEVsZW1lbnQgKnRlZSwgKnNpbmsxLCAqc2luazI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFBhZCAqdGVlX3NyYzEsICp0ZWVfc3JjMiwgKnRlZV9zaW5rLCAqc2luazFfc2luaywgKnNpbmsyX3Npbms7Ci0KLSAgdGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVlIiwgInRlZSIpOwotCi0gIHNpbmsxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luazEiKTsKLSAgdGVlX3NyYzEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHRlZSwgInNyY18ldSIpOwotICBzaW5rMV9zaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmsxLCAic2luayIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX2xpbmsgKHRlZV9zcmMxLCBzaW5rMV9zaW5rKSwgR1NUX1BBRF9MSU5LX09LKTsKLQotICBzaW5rMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsyIik7Ci0gIHRlZV9zcmMyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh0ZWUsICJzcmNfJXUiKTsKLSAgc2luazJfc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rMiwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9saW5rICh0ZWVfc3JjMiwgc2luazJfc2luayksIEdTVF9QQURfTElOS19PSyk7Ci0KLSAgdGVlX3NpbmsgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodGVlLCAic2luayIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luazEsIEdTVF9TVEFURV9QQVVTRUQpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmsyLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0ZWUsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIC8qIGJ5IGRlZmF1bHQsIEFOWSBjYXBzIHNob3VsZCBpbnRlcnNlY3QgdG8gQU5ZICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHRlZV9zaW5rLCBOVUxMKTsKLSAgR1NUX0lORk8gKCJnb3QgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogdGhlc2UgZG9uJ3QgaW50ZXJzZWN0IHdlIHNob3VsZCBnZXQgZW1wdHkgY2FwcyAqLwotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImZvby9iYXIiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHNpbmsxX3NpbmssIGNhcHMpKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoc2luazFfc2luayk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImJhci90ZXIiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHNpbmsyX3NpbmssIGNhcHMpKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoc2luazJfc2luayk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X3BhZF9xdWVyeV9jYXBzICh0ZWVfc2luaywgTlVMTCk7Ci0gIEdTVF9JTkZPICgiZ290IGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogdGVzdCBpbnRlcnNlY3Rpb24gKi8KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJmb28vYmFyIiwgImJhcnZlcnNpb24iLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgR1NUX09CSkVDVF9GTEFHX1VOU0VUIChzaW5rMl9zaW5rLCBHU1RfUEFEX0ZMQUdfRklYRURfQ0FQUyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChzaW5rMl9zaW5rLCBjYXBzKSk7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHNpbmsyX3NpbmspOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgY2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAodGVlX3NpbmssIE5VTEwpOwotICBHU1RfSU5GTyAoImdvdCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpOwotICB7Ci0gICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKSwgImZvby9iYXIiKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJiYXJ2ZXJzaW9uIiwgR19UWVBFX0lOVCkpOwotICB9Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmsxLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luazIsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh0ZWUsIEdTVF9TVEFURV9OVUxMKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZWUsIHRlZV9zcmMxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGVlX3NyYzEpOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkICh0ZWUsIHRlZV9zcmMyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGVlX3NyYzIpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZWVfc2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmsxX3NpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmsyX3NpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IpCi17Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgxLCAxKSAhPSAxKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKDIsIDMpICE9IDEpOwotICBmYWlsX2lmIChnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoMywgNSkgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgtMSwgMSkgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgtMiwgMykgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgtMywgNSkgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgtMSwgLTEpICE9IDEpOwotICBmYWlsX2lmIChnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoLTIsIC0zKSAhPSAxKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKC0zLCAtNSkgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgxLCAtMSkgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgyLCAtMykgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgzLCAtNSkgIT0gMSk7Ci0gIGZhaWxfaWYgKGdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yICgyLCAyKSAhPSAyKTsKLSAgZmFpbF9pZiAoZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKDIsIDQpICE9IDIpOwotICBmYWlsX2lmIChnc3RfdXRpbF9ncmVhdGVzdF9jb21tb25fZGl2aXNvciAoMTAwMSwgMTEpICE9IDExKTsKLQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlYWRfbWFjcm9zKQotewotICBndWludDggY2FycmF5W10gPSAiQUJDREVGR0giOyAvKiAweDQxIC4uLiAweDQ4ICovCi0gIGd1aW50MzIgdWFycmF5WzJdOwotICBndWludDggKmNwb2ludGVyOwotCi0gIG1lbWNweSAodWFycmF5LCBjYXJyYXksIDgpOwotICBjcG9pbnRlciA9IGNhcnJheTsKLQotICAvKiAxNiBiaXQgKi8KLSAgLyogRmlyc3QgdHJ5IHRoZSBzdGFuZGFyZCBwb2ludGVyIHZhcmlhbnRzICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfQkUgKGNwb2ludGVyKSwgMHg0MTQyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9CRSAoY3BvaW50ZXIgKyAxKSwgMHg0MjQzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9CRSAoY3BvaW50ZXIgKyAyKSwgMHg0MzQ0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9CRSAoY3BvaW50ZXIgKyAzKSwgMHg0NDQ1KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9CRSAoY3BvaW50ZXIgKyA0KSwgMHg0NTQ2KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9CRSAoY3BvaW50ZXIgKyA1KSwgMHg0NjQ3KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9CRSAoY3BvaW50ZXIgKyA2KSwgMHg0NzQ4KTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDE2X0xFIChjcG9pbnRlciksIDB4NDI0MSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKGNwb2ludGVyICsgMSksIDB4NDM0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKGNwb2ludGVyICsgMiksIDB4NDQ0Myk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKGNwb2ludGVyICsgMyksIDB4NDU0NCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKGNwb2ludGVyICsgNCksIDB4NDY0NSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKGNwb2ludGVyICsgNSksIDB4NDc0Nik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKGNwb2ludGVyICsgNiksIDB4NDg0Nyk7Ci0KLSAgLyogT24gYW4gYXJyYXkgb2YgZ3VpbnQ4ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfQkUgKGNhcnJheSksIDB4NDE0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfQkUgKGNhcnJheSArIDEpLCAweDQyNDMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDE2X0JFIChjYXJyYXkgKyAyKSwgMHg0MzQ0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9CRSAoY2FycmF5ICsgMyksIDB4NDQ0NSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfQkUgKGNhcnJheSArIDQpLCAweDQ1NDYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDE2X0JFIChjYXJyYXkgKyA1KSwgMHg0NjQ3KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9CRSAoY2FycmF5ICsgNiksIDB4NDc0OCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9MRSAoY2FycmF5KSwgMHg0MjQxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9MRSAoY2FycmF5ICsgMSksIDB4NDM0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKGNhcnJheSArIDIpLCAweDQ0NDMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDE2X0xFIChjYXJyYXkgKyAzKSwgMHg0NTQ0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQxNl9MRSAoY2FycmF5ICsgNCksIDB4NDY0NSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKGNhcnJheSArIDUpLCAweDQ3NDYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDE2X0xFIChjYXJyYXkgKyA2KSwgMHg0ODQ3KTsKLQotICAvKiBPbiBhbiBhcnJheSBvZiBndWludDMyICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfQkUgKHVhcnJheSksIDB4NDE0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfQkUgKHVhcnJheSArIDEpLCAweDQ1NDYpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKHVhcnJheSksIDB4NDI0MSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfTEUgKHVhcnJheSArIDEpLCAweDQ2NDUpOwotCi0KLSAgLyogMjRiaXQgKi8KLSAgLyogRmlyc3QgdHJ5IHRoZSBzdGFuZGFyZCBwb2ludGVyIHZhcmlhbnRzICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfQkUgKGNwb2ludGVyKSwgMHg0MTQyNDMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDI0X0JFIChjcG9pbnRlciArIDEpLCAweDQyNDM0NCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfQkUgKGNwb2ludGVyICsgMiksIDB4NDM0NDQ1KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9CRSAoY3BvaW50ZXIgKyAzKSwgMHg0NDQ1NDYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDI0X0JFIChjcG9pbnRlciArIDQpLCAweDQ1NDY0Nyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfQkUgKGNwb2ludGVyICsgNSksIDB4NDY0NzQ4KTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDI0X0xFIChjcG9pbnRlciksIDB4NDM0MjQxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9MRSAoY3BvaW50ZXIgKyAxKSwgMHg0NDQzNDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDI0X0xFIChjcG9pbnRlciArIDIpLCAweDQ1NDQ0Myk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfTEUgKGNwb2ludGVyICsgMyksIDB4NDY0NTQ0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9MRSAoY3BvaW50ZXIgKyA0KSwgMHg0NzQ2NDUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDI0X0xFIChjcG9pbnRlciArIDUpLCAweDQ4NDc0Nik7Ci0KLSAgLyogT24gYW4gYXJyYXkgb2YgZ3VpbnQ4ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfQkUgKGNhcnJheSksIDB4NDE0MjQzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9CRSAoY2FycmF5ICsgMSksIDB4NDI0MzQ0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9CRSAoY2FycmF5ICsgMiksIDB4NDM0NDQ1KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9CRSAoY2FycmF5ICsgMyksIDB4NDQ0NTQ2KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9CRSAoY2FycmF5ICsgNCksIDB4NDU0NjQ3KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9CRSAoY2FycmF5ICsgNSksIDB4NDY0NzQ4KTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDI0X0xFIChjYXJyYXkpLCAweDQzNDI0MSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfTEUgKGNhcnJheSArIDEpLCAweDQ0NDM0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfTEUgKGNhcnJheSArIDIpLCAweDQ1NDQ0Myk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfTEUgKGNhcnJheSArIDMpLCAweDQ2NDU0NCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfTEUgKGNhcnJheSArIDQpLCAweDQ3NDY0NSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfTEUgKGNhcnJheSArIDUpLCAweDQ4NDc0Nik7Ci0KLSAgLyogT24gYW4gYXJyYXkgb2YgZ3VpbnQzMiAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDI0X0JFICh1YXJyYXkpLCAweDQxNDI0Myk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMjRfQkUgKHVhcnJheSArIDEpLCAweDQ1NDY0Nyk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQyNF9MRSAodWFycmF5KSwgMHg0MzQyNDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDI0X0xFICh1YXJyYXkgKyAxKSwgMHg0NzQ2NDUpOwotCi0KLSAgLyogMzJiaXQgKi8KLSAgLyogRmlyc3QgdHJ5IHRoZSBzdGFuZGFyZCBwb2ludGVyIHZhcmlhbnRzICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfQkUgKGNwb2ludGVyKSwgMHg0MTQyNDM0NCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfQkUgKGNwb2ludGVyICsgMSksIDB4NDI0MzQ0NDUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDMyX0JFIChjcG9pbnRlciArIDIpLCAweDQzNDQ0NTQ2KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQzMl9CRSAoY3BvaW50ZXIgKyAzKSwgMHg0NDQ1NDY0Nyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfQkUgKGNwb2ludGVyICsgNCksIDB4NDU0NjQ3NDgpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfTEUgKGNwb2ludGVyKSwgMHg0NDQzNDI0MSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfTEUgKGNwb2ludGVyICsgMSksIDB4NDU0NDQzNDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDMyX0xFIChjcG9pbnRlciArIDIpLCAweDQ2NDU0NDQzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQzMl9MRSAoY3BvaW50ZXIgKyAzKSwgMHg0NzQ2NDU0NCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfTEUgKGNwb2ludGVyICsgNCksIDB4NDg0NzQ2NDUpOwotCi0gIC8qIE9uIGFuIGFycmF5IG9mIGd1aW50OCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDMyX0JFIChjYXJyYXkpLCAweDQxNDI0MzQ0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQzMl9CRSAoY2FycmF5ICsgMSksIDB4NDI0MzQ0NDUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDMyX0JFIChjYXJyYXkgKyAyKSwgMHg0MzQ0NDU0Nik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfQkUgKGNhcnJheSArIDMpLCAweDQ0NDU0NjQ3KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQzMl9CRSAoY2FycmF5ICsgNCksIDB4NDU0NjQ3NDgpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfTEUgKGNhcnJheSksIDB4NDQ0MzQyNDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDMyX0xFIChjYXJyYXkgKyAxKSwgMHg0NTQ0NDM0Mik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfTEUgKGNhcnJheSArIDIpLCAweDQ2NDU0NDQzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQzMl9MRSAoY2FycmF5ICsgMyksIDB4NDc0NjQ1NDQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDMyX0xFIChjYXJyYXkgKyA0KSwgMHg0ODQ3NDY0NSk7Ci0KLSAgLyogT24gYW4gYXJyYXkgb2YgZ3VpbnQzMiAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDMyX0JFICh1YXJyYXkpLCAweDQxNDI0MzQ0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludF9oZXggKEdTVF9SRUFEX1VJTlQzMl9CRSAodWFycmF5ICsgMSksIDB4NDU0NjQ3NDgpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfTEUgKHVhcnJheSksIDB4NDQ0MzQyNDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50X2hleCAoR1NUX1JFQURfVUlOVDMyX0xFICh1YXJyYXkgKyAxKSwgMHg0ODQ3NDY0NSk7Ci0KLQotICAvKiA2NGJpdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4IChHU1RfUkVBRF9VSU5UNjRfQkUgKGNwb2ludGVyKSwKLSAgICAgIDB4NDE0MjQzNDQ0NTQ2NDc0OCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXggKEdTVF9SRUFEX1VJTlQ2NF9MRSAoY3BvaW50ZXIpLAotICAgICAgMHg0ODQ3NDY0NTQ0NDM0MjQxKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4IChHU1RfUkVBRF9VSU5UNjRfQkUgKGNhcnJheSksCi0gICAgICAweDQxNDI0MzQ0NDU0NjQ3NDgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4IChHU1RfUkVBRF9VSU5UNjRfTEUgKGNhcnJheSksCi0gICAgICAweDQ4NDc0NjQ1NDQ0MzQyNDEpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXggKEdTVF9SRUFEX1VJTlQ2NF9CRSAodWFycmF5KSwKLSAgICAgIDB4NDE0MjQzNDQ0NTQ2NDc0OCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NF9oZXggKEdTVF9SRUFEX1VJTlQ2NF9MRSAodWFycmF5KSwKLSAgICAgIDB4NDg0NzQ2NDU0NDQzNDI0MSk7Ci0KLSAgLyogbWFrZSBzdXJlIHRoZSBkYXRhIGFyZ3VtZW50IGlzIG5vdCBkdXBsaWNhdGVkIGluc2lkZSB0aGUgbWFjcm8KLSAgICogd2l0aCBwb3NzaWJseSB1bmV4cGVjdGVkIHNpZGUtZWZmZWN0cyAqLwotICBjcG9pbnRlciA9IGNhcnJheTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1JFQURfVUlOVDggKGNwb2ludGVyKyspLCAnQScpOwotICBmYWlsX3VubGVzcyAoY3BvaW50ZXIgPT0gY2FycmF5ICsgMSk7Ci0KLSAgY3BvaW50ZXIgPSBjYXJyYXk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMTZfQkUgKGNwb2ludGVyKyspLCAweDQxNDIpOwotICBmYWlsX3VubGVzcyAoY3BvaW50ZXIgPT0gY2FycmF5ICsgMSk7Ci0KLSAgY3BvaW50ZXIgPSBjYXJyYXk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnRfaGV4IChHU1RfUkVBRF9VSU5UMzJfQkUgKGNwb2ludGVyKyspLCAweDQxNDI0MzQ0KTsKLSAgZmFpbF91bmxlc3MgKGNwb2ludGVyID09IGNhcnJheSArIDEpOwotCi0gIGNwb2ludGVyID0gY2FycmF5OwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjRfaGV4IChHU1RfUkVBRF9VSU5UNjRfQkUgKGNwb2ludGVyKyspLAotICAgICAgMHg0MTQyNDM0NDQ1NDY0NzQ4KTsKLSAgZmFpbF91bmxlc3MgKGNwb2ludGVyID09IGNhcnJheSArIDEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3dyaXRlX21hY3JvcykKLXsKLSAgZ3VpbnQ4IGNhcnJheVs4XTsKLSAgZ3VpbnQ4ICpjcG9pbnRlcjsKLQotICAvKiBtYWtlIHN1cmUgdGhlIGRhdGEgYXJndW1lbnQgaXMgbm90IGR1cGxpY2F0ZWQgaW5zaWRlIHRoZSBtYWNybwotICAgKiB3aXRoIHBvc3NpYmx5IHVuZXhwZWN0ZWQgc2lkZS1lZmZlY3RzICovCi0gIG1lbXNldCAoY2FycmF5LCAwLCBzaXplb2YgKGNhcnJheSkpOwotICBjcG9pbnRlciA9IGNhcnJheTsKLSAgR1NUX1dSSVRFX1VJTlQ4IChjcG9pbnRlcisrLCAnQScpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoY3BvaW50ZXIsIGNhcnJheSArIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjYXJyYXlbMF0sICdBJyk7Ci0KLSAgbWVtc2V0IChjYXJyYXksIDAsIHNpemVvZiAoY2FycmF5KSk7Ci0gIGNwb2ludGVyID0gY2FycmF5OwotICBHU1RfV1JJVEVfVUlOVDE2X0JFIChjcG9pbnRlcisrLCAweDQxNDIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoY3BvaW50ZXIsIGNhcnJheSArIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjYXJyYXlbMF0sICdBJyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGNhcnJheVsxXSwgJ0InKTsKLQotICBtZW1zZXQgKGNhcnJheSwgMCwgc2l6ZW9mIChjYXJyYXkpKTsKLSAgY3BvaW50ZXIgPSBjYXJyYXk7Ci0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGNwb2ludGVyKyssIDB4NDE0MjQzNDQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoY3BvaW50ZXIsIGNhcnJheSArIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjYXJyYXlbMF0sICdBJyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGNhcnJheVszXSwgJ0QnKTsKLQotICBtZW1zZXQgKGNhcnJheSwgMCwgc2l6ZW9mIChjYXJyYXkpKTsKLSAgY3BvaW50ZXIgPSBjYXJyYXk7Ci0gIEdTVF9XUklURV9VSU5UNjRfQkUgKGNwb2ludGVyKyssIDB4NDE0MjQzNDQ0NTQ2NDc0OCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19wb2ludGVyIChjcG9pbnRlciwgY2FycmF5ICsgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGNhcnJheVswXSwgJ0EnKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoY2FycmF5WzddLCAnSCcpOwotCi0gIG1lbXNldCAoY2FycmF5LCAwLCBzaXplb2YgKGNhcnJheSkpOwotICBjcG9pbnRlciA9IGNhcnJheTsKLSAgR1NUX1dSSVRFX1VJTlQxNl9MRSAoY3BvaW50ZXIrKywgMHg0MTQyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIgKGNwb2ludGVyLCBjYXJyYXkgKyAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoY2FycmF5WzBdLCAnQicpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjYXJyYXlbMV0sICdBJyk7Ci0KLSAgbWVtc2V0IChjYXJyYXksIDAsIHNpemVvZiAoY2FycmF5KSk7Ci0gIGNwb2ludGVyID0gY2FycmF5OwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChjcG9pbnRlcisrLCAweDQxNDI0MzQ0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIgKGNwb2ludGVyLCBjYXJyYXkgKyAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoY2FycmF5WzBdLCAnRCcpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjYXJyYXlbM10sICdBJyk7Ci0KLSAgbWVtc2V0IChjYXJyYXksIDAsIHNpemVvZiAoY2FycmF5KSk7Ci0gIGNwb2ludGVyID0gY2FycmF5OwotICBHU1RfV1JJVEVfVUlOVDY0X0xFIChjcG9pbnRlcisrLCAweDQxNDI0MzQ0NDU0NjQ3NDgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAoY3BvaW50ZXIsIGNhcnJheSArIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjYXJyYXlbMF0sICdIJyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGNhcnJheVs3XSwgJ0EnKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotY291bnRfcmVxdWVzdF9wYWQgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpwYWQgPSBHU1RfUEFEIChnX3ZhbHVlX2dldF9vYmplY3QgKGl0ZW0pKTsKLSAgZ3VpbnQgKmNvdW50ID0gKGd1aW50ICopIHVzZXJfZGF0YTsKLQotICBpZiAoR1NUX1BBRF9URU1QTEFURV9QUkVTRU5DRSAoR1NUX1BBRF9QQURfVEVNUExBVEUgKHBhZCkpID09IEdTVF9QQURfUkVRVUVTVCkKLSAgICAoKmNvdW50KSsrOwotfQotCi1zdGF0aWMgZ3VpbnQKLXJlcXVlc3RfcGFkcyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEl0ZXJhdG9yICppdGVyOwotICBndWludCBwYWRzID0gMDsKLQotICBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9pdGVyYXRvcl9mb3JlYWNoIChpdGVyLCBjb3VudF9yZXF1ZXN0X3BhZCwgJnBhZHMpID09Ci0gICAgICBHU1RfSVRFUkFUT1JfRE9ORSk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLQotICByZXR1cm4gcGFkczsKLX0KLQotc3RhdGljIEdzdFBhZExpbmtSZXR1cm4KLXJlZnVzZV90b19saW5rIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkICogcGVlcikKLXsKLSAgcmV0dXJuIEdTVF9QQURfTElOS19SRUZVU0VEOwotfQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RmFrZVJlcVNpbmsgR3N0RmFrZVJlcVNpbms7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RmFrZVJlcVNpbmtDbGFzcyBHc3RGYWtlUmVxU2lua0NsYXNzOwotCi1zdHJ1Y3QgX0dzdEZha2VSZXFTaW5rCi17Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLX07Ci0KLXN0cnVjdCBfR3N0RmFrZVJlcVNpbmtDbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR19HTlVDX0lOVEVSTkFMIEdUeXBlIGdzdF9mYWtlcmVxc2lua19nZXRfdHlwZSAodm9pZCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBmYWtlcmVxc2lua19zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2lua18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0RmFrZVJlcVNpbmssIGdzdF9mYWtlcmVxc2luaywgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X2Zha2VyZXFzaW5rX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIHBhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmZmFrZXJlcXNpbmtfc2lua190ZW1wbGF0ZSwgbmFtZSk7Ci0gIGdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb24gKHBhZCwgcmVmdXNlX3RvX2xpbmspOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChlbGVtZW50KSwgcGFkKTsKLSAgcmV0dXJuIHBhZDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlcmVxc2lua19yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKLXsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIEZBTFNFKTsKLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoZWxlbWVudCwgcGFkKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlcmVxc2lua19jbGFzc19pbml0IChHc3RGYWtlUmVxU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJGYWtlIFJlcXVlc3QgU2luayIsICJTaW5rIiwgIkZha2Ugc2luayB3aXRoIHJlcXVlc3QgcGFkcyIsCi0gICAgICAiU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmZha2VyZXFzaW5rX3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9IGdzdF9mYWtlcmVxc2lua19yZXF1ZXN0X25ld19wYWQ7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlbGVhc2VfcGFkID0gZ3N0X2Zha2VyZXFzaW5rX3JlbGVhc2VfcGFkOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zha2VyZXFzaW5rX2luaXQgKEdzdEZha2VSZXFTaW5rICogZmFrZXJlcXNpbmspCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X2xpbmsgKGNvbnN0IGdjaGFyICogZXhwZWN0YXRpb24sIGNvbnN0IGdjaGFyICogc3JjbmFtZSwKLSAgICBjb25zdCBnY2hhciAqIHNyY3BhZCwgY29uc3QgZ2NoYXIgKiBzcmNzdGF0ZSwgY29uc3QgZ2NoYXIgKiBzaW5rbmFtZSwKLSAgICBjb25zdCBnY2hhciAqIHNpbmtwYWQsIGNvbnN0IGdjaGFyICogc2lua3N0YXRlKQotewotICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqb3RoZXJzcmMsICpvdGhlcnNpbms7Ci0gIGd1aW50IHNyY19wYWRzLCBzaW5rX3BhZHM7Ci0KLSAgaWYgKGdfc3RyY21wMCAoc3JjbmFtZSwgInJlcXVlc3RzcmMiKSA9PSAwKQotICAgIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlZSIsIE5VTEwpOwotICBlbHNlIGlmIChnX3N0cmNtcDAgKHNyY25hbWUsICJyZXF1ZXN0c2luayIpID09IDApCi0gICAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZnVubmVsIiwgTlVMTCk7Ci0gIGVsc2UgaWYgKGdfc3RyY21wMCAoc3JjbmFtZSwgInN0YXRpY3NyYyIpID09IDApCi0gICAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBlbHNlIGlmIChnX3N0cmNtcDAgKHNyY25hbWUsICJzdGF0aWNzaW5rIikgPT0gMCkKLSAgICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBlbHNlCi0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0KLSAgaWYgKGdfc3RyY21wMCAoc2lua25hbWUsICJyZXF1ZXN0c2luayIpID09IDApCi0gICAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZ1bm5lbCIsIE5VTEwpOwotICBlbHNlIGlmIChnX3N0cmNtcDAgKHNpbmtuYW1lLCAicmVxdWVzdHNyYyIpID09IDApCi0gICAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlZSIsIE5VTEwpOwotICBlbHNlIGlmIChnX3N0cmNtcDAgKHNpbmtuYW1lLCAic3RhdGljc2luayIpID09IDApCi0gICAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGVsc2UgaWYgKGdfc3RyY21wMCAoc2lua25hbWUsICJzdGF0aWNzcmMiKSA9PSAwKQotICAgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIGVsc2UgaWYgKGdfc3RyY21wMCAoc2lua25hbWUsICJmYWtlcmVxdWVzdHNpbmsiKSA9PSAwKQotICAgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlcmVxc2luayIsIE5VTEwpOwotICBlbHNlCi0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0KLSAgb3RoZXJzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIG90aGVyc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0KLSAgaWYgKGdfc3RyY21wMCAoc3Jjc3RhdGUsICJsaW5rZWQiKSA9PSAwKQotICAgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNyYywgc3JjcGFkLCBvdGhlcnNpbmssIE5VTEwpKTsKLSAgaWYgKGdfc3RyY21wMCAoc2lua3N0YXRlLCAibGlua2VkIikgPT0gMCkKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19wYWRzIChvdGhlcnNyYywgTlVMTCwgc2luaywgc2lua3BhZCkpOwotICBpZiAoZ19zdHJjbXAwIChzcmNzdGF0ZSwgInVubGlua2FibGUiKSA9PSAwKSB7Ci0gICAgR3N0UGFkICpwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCBzcmNwYWQgPyBzcmNwYWQgOiAic3JjIik7Ci0gICAgZ3N0X3BhZF9zZXRfbGlua19mdW5jdGlvbiAocGFkLCByZWZ1c2VfdG9fbGluayk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgfQotICBpZiAoZ19zdHJjbXAwIChzaW5rc3RhdGUsICJ1bmxpbmthYmxlIikgPT0gMCkgewotICAgIEdzdFBhZCAqcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssIHNpbmtwYWQgPyBzaW5rcGFkIDogInNpbmsiKTsKLSAgICBnc3RfcGFkX3NldF9saW5rX2Z1bmN0aW9uIChwYWQsIHJlZnVzZV90b19saW5rKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9Ci0KLSAgc3JjX3BhZHMgPSByZXF1ZXN0X3BhZHMgKHNyYyk7Ci0gIHNpbmtfcGFkcyA9IHJlcXVlc3RfcGFkcyAoc2luayk7Ci0gIGlmIChnX3N0cmNtcDAgKGV4cGVjdGF0aW9uLCAiT0siKSA9PSAwKSB7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc3JjLCBzcmNwYWQsIHNpbmssIHNpbmtwYWQpKTsKLSAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAoc3JjbmFtZSwgInJlcXVlc3QiKSkgewotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocmVxdWVzdF9wYWRzIChzcmMpLCBzcmNfcGFkcyArIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChyZXF1ZXN0X3BhZHMgKHNyYyksIHNyY19wYWRzKTsKLSAgICB9Ci0gICAgaWYgKGdfc3RyX2hhc19wcmVmaXggKHNpbmtuYW1lLCAicmVxdWVzdCIpKSB7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChyZXF1ZXN0X3BhZHMgKHNpbmspLCBzaW5rX3BhZHMgKyAxKTsKLSAgICB9IGVsc2UgewotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocmVxdWVzdF9wYWRzIChzaW5rKSwgc2lua19wYWRzKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfbGlua19wYWRzIChzcmMsIHNyY3BhZCwgc2luaywgc2lua3BhZCkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJlcXVlc3RfcGFkcyAoc3JjKSwgc3JjX3BhZHMpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJlcXVlc3RfcGFkcyAoc2luayksIHNpbmtfcGFkcyk7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChvdGhlcnNyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKG90aGVyc2luayk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VsZW1lbnRfbGluaykKLXsKLSAgLyogU3VjY2Vzc2Z1bCBjYXNlcyAqLwotCi0gIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChOVUxMLCAiZmFrZXJlcXNpbmsiLCBHU1RfUkFOS19OT05FLAotICAgICAgZ3N0X2Zha2VyZXFzaW5rX2dldF90eXBlICgpKTsKLQotICB0ZXN0X2xpbmsgKCJPSyIsICJzdGF0aWNzcmMiLCAic3JjIiwgIiIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAiIik7Ci0gIHRlc3RfbGluayAoIk9LIiwgInN0YXRpY3NyYyIsICJzcmMiLCAiIiwgInJlcXVlc3RzaW5rIiwgInNpbmtfMCIsICIiKTsKLSAgdGVzdF9saW5rICgiT0siLCAic3RhdGljc3JjIiwgInNyYyIsICIiLCAic3RhdGljc2luayIsIE5VTEwsICIiKTsKLSAgdGVzdF9saW5rICgiT0siLCAic3RhdGljc3JjIiwgInNyYyIsICIiLCAicmVxdWVzdHNpbmsiLCBOVUxMLCAiIik7Ci0gIHRlc3RfbGluayAoIk9LIiwgInJlcXVlc3RzcmMiLCAic3JjXzAiLCAiIiwgInN0YXRpY3NpbmsiLCAic2luayIsICIiKTsKLSAgdGVzdF9saW5rICgiT0siLCAicmVxdWVzdHNyYyIsICJzcmNfMCIsICIiLCAicmVxdWVzdHNpbmsiLCAic2lua18wIiwgIiIpOwotICB0ZXN0X2xpbmsgKCJPSyIsICJyZXF1ZXN0c3JjIiwgInNyY18wIiwgIiIsICJzdGF0aWNzaW5rIiwgTlVMTCwgIiIpOwotICB0ZXN0X2xpbmsgKCJPSyIsICJyZXF1ZXN0c3JjIiwgInNyY18wIiwgIiIsICJyZXF1ZXN0c2luayIsIE5VTEwsICIiKTsKLSAgdGVzdF9saW5rICgiT0siLCAic3RhdGljc3JjIiwgTlVMTCwgIiIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAiIik7Ci0gIHRlc3RfbGluayAoIk9LIiwgInN0YXRpY3NyYyIsIE5VTEwsICIiLCAicmVxdWVzdHNpbmsiLCAic2lua18wIiwgIiIpOwotICB0ZXN0X2xpbmsgKCJPSyIsICJzdGF0aWNzcmMiLCBOVUxMLCAiIiwgInN0YXRpY3NpbmsiLCBOVUxMLCAiIik7Ci0gIHRlc3RfbGluayAoIk9LIiwgInN0YXRpY3NyYyIsIE5VTEwsICIiLCAicmVxdWVzdHNpbmsiLCBOVUxMLCAiIik7Ci0gIHRlc3RfbGluayAoIk9LIiwgInJlcXVlc3RzcmMiLCBOVUxMLCAiIiwgInN0YXRpY3NpbmsiLCAic2luayIsICIiKTsKLSAgdGVzdF9saW5rICgiT0siLCAicmVxdWVzdHNyYyIsIE5VTEwsICIiLCAicmVxdWVzdHNpbmsiLCAic2lua18wIiwgIiIpOwotICB0ZXN0X2xpbmsgKCJPSyIsICJyZXF1ZXN0c3JjIiwgTlVMTCwgIiIsICJzdGF0aWNzaW5rIiwgTlVMTCwgIiIpOwotICB0ZXN0X2xpbmsgKCJPSyIsICJyZXF1ZXN0c3JjIiwgTlVMTCwgIiIsICJyZXF1ZXN0c2luayIsIE5VTEwsICIiKTsKLQotICAvKiBGYWlsdXJlIGNhc2VzICovCi0KLSAgdGVzdF9saW5rICgiTk9LIiwgInN0YXRpY3NyYyIsICJtaXNzaW5nIiwgIiIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAiIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAiIiwgInN0YXRpY3NpbmsiLCAic2luayIsICIiKTsKLSAgdGVzdF9saW5rICgiTk9LIiwgInN0YXRpY3NyYyIsICJzcmMiLCAibGlua2VkIiwgInN0YXRpY3NpbmsiLCAic2luayIsICIiKTsKLSAgdGVzdF9saW5rICgiTk9LIiwgInN0YXRpY3NyYyIsICJzcmMiLCAiIiwgInN0YXRpY3NpbmsiLCAibWlzc2luZyIsICIiKTsKLSAgdGVzdF9saW5rICgiTk9LIiwgInN0YXRpY3NyYyIsICJzcmMiLCAiIiwgInN0YXRpY3NyYyIsICJzcmMiLCAiIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJzdGF0aWNzcmMiLCAic3JjIiwgIiIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAibGlua2VkIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJzdGF0aWNzcmMiLCAic3JjIiwgIiIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAidW5saW5rYWJsZSIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAic3RhdGljc3JjIiwgTlVMTCwgIiIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAidW5saW5rYWJsZSIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAic3RhdGljc3JjIiwgTlVMTCwgIiIsICJzdGF0aWNzaW5rIiwgTlVMTCwgInVubGlua2FibGUiKTsKLSAgdGVzdF9saW5rICgiTk9LIiwgInJlcXVlc3RzcmMiLCAibWlzc2luZyIsICIiLCAic3RhdGljc2luayIsICJzaW5rIiwgIiIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAicmVxdWVzdHNpbmsiLCAic2lua18wIiwgIiIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAiIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJyZXF1ZXN0c3JjIiwgInNyY18wIiwgImxpbmtlZCIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAiIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJyZXF1ZXN0c3JjIiwgInNyY18wIiwgIiIsICJzdGF0aWNzaW5rIiwgIm1pc3NpbmciLCAiIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJyZXF1ZXN0c3JjIiwgInNyY18wIiwgIiIsICJzdGF0aWNzcmMiLCAic3JjIiwgIiIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAicmVxdWVzdHNyYyIsICJzcmNfMCIsICIiLCAic3RhdGljc2luayIsICJzaW5rIiwgImxpbmtlZCIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAicmVxdWVzdHNyYyIsICJzcmNfMCIsICIiLCAic3RhdGljc2luayIsICJzaW5rIiwKLSAgICAgICJ1bmxpbmthYmxlIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJyZXF1ZXN0c3JjIiwgTlVMTCwgIiIsICJzdGF0aWNzaW5rIiwgInNpbmsiLCAidW5saW5rYWJsZSIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAicmVxdWVzdHNyYyIsIE5VTEwsICIiLCAic3RhdGljc2luayIsIE5VTEwsICJ1bmxpbmthYmxlIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJzdGF0aWNzcmMiLCAibWlzc2luZyIsICIiLCAicmVxdWVzdHNpbmsiLCAic2lua18wIiwgIiIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAic3RhdGljc2luayIsICJzaW5rIiwgIiIsICJyZXF1ZXN0c2luayIsICJzaW5rXzAiLCAiIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJzdGF0aWNzcmMiLCAic3JjIiwgImxpbmtlZCIsICJyZXF1ZXN0c2luayIsICJzaW5rXzAiLCAiIik7Ci0gIHRlc3RfbGluayAoIk5PSyIsICJzdGF0aWNzcmMiLCAic3JjIiwgIiIsICJyZXF1ZXN0c2luayIsICJtaXNzaW5nIiwgIiIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAic3RhdGljc3JjIiwgInNyYyIsICIiLCAicmVxdWVzdHNyYyIsICJzcmNfMCIsICIiKTsKLSAgdGVzdF9saW5rICgiTk9LIiwgInN0YXRpY3NyYyIsICJzcmMiLCAiIiwgInJlcXVlc3RzaW5rIiwgInNpbmtfMCIsICJsaW5rZWQiKTsKLSAgdGVzdF9saW5rICgiTk9LIiwgInN0YXRpY3NyYyIsICJzcmMiLCAidW5saW5rYWJsZSIsICJyZXF1ZXN0c2luayIsCi0gICAgICAic2lua18wIiwgIiIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAic3RhdGljc3JjIiwgTlVMTCwgInVubGlua2FibGUiLCAicmVxdWVzdHNpbmsiLAotICAgICAgInNpbmtfMCIsICIiKTsKLSAgdGVzdF9saW5rICgiTk9LIiwgInN0YXRpY3NyYyIsIE5VTEwsICJ1bmxpbmthYmxlIiwgInJlcXVlc3RzaW5rIiwgTlVMTCwgIiIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAicmVxdWVzdHNyYyIsICJzcmNfMCIsICIiLCAic3RhdGljc2luayIsIE5VTEwsCi0gICAgICAidW5saW5rYWJsZSIpOwotICB0ZXN0X2xpbmsgKCJOT0siLCAicmVxdWVzdHNyYyIsIE5VTEwsICIiLCAiZmFrZXJlcXVlc3RzaW5rIiwgTlVMTCwgIiIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUZXN0UGFkUmVxU2luayBHc3RUZXN0UGFkUmVxU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUZXN0UGFkUmVxU2lua0NsYXNzIEdzdFRlc3RQYWRSZXFTaW5rQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0VGVzdFBhZFJlcVNpbmsKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotfTsKLQotc3RydWN0IF9Hc3RUZXN0UGFkUmVxU2lua0NsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0dOVUNfSU5URVJOQUwgR1R5cGUgZ3N0X3Rlc3RwYWRyZXFzaW5rX2dldF90eXBlICh2b2lkKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHRlc3RwYWRyZXFzaW5rX3ZpZGVvX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgidmlkZW9fJXUiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXciKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB0ZXN0cGFkcmVxc2lua19hdWRpb190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoImF1ZGlvXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3IikpOwotCi1HX0RFRklORV9UWVBFIChHc3RUZXN0UGFkUmVxU2luaywgZ3N0X3Rlc3RwYWRyZXFzaW5rLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIEdzdFBhZCAqCi1nc3RfdGVzdHBhZHJlcXNpbmtfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RQYWQgKnBhZDsKLSAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGwsIG5hbWUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGVsZW1lbnQpLCBwYWQpOwotICByZXR1cm4gcGFkOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RwYWRyZXFzaW5rX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgRkFMU0UpOwotICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChlbGVtZW50LCBwYWQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RwYWRyZXFzaW5rX2NsYXNzX2luaXQgKEdzdFRlc3RQYWRSZXFTaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlRlc3QgUGFkIFJlcXVlc3QgU2luayIsICJTaW5rIiwgIlNpbmsgZm9yIHVuaXQgdGVzdHMgd2l0aCByZXF1ZXN0IHBhZHMiLAotICAgICAgIlRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZ0ZXN0cGFkcmVxc2lua192aWRlb190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnRlc3RwYWRyZXFzaW5rX2F1ZGlvX3RlbXBsYXRlKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPSBnc3RfdGVzdHBhZHJlcXNpbmtfcmVxdWVzdF9uZXdfcGFkOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9IGdzdF90ZXN0cGFkcmVxc2lua19yZWxlYXNlX3BhZDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0cGFkcmVxc2lua19pbml0IChHc3RUZXN0UGFkUmVxU2luayAqIHRlc3RwYWRlcXNpbmspCi17Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICpwYWRyZXFzaW5rX3F1ZXJ5X2NhcHMgPSBOVUxMOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXRlc3RwYWRyZXFzaW5rX3BlZXJfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICAgIGlmIChwYWRyZXFzaW5rX3F1ZXJ5X2NhcHMpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIHBhZHJlcXNpbmtfcXVlcnlfY2Fwcyk7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja19nZXRfY29tcGF0aWJsZV9wYWRfcmVxdWVzdCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdENhcHMgKiBwZWVyX2NhcHMsCi0gICAgR3N0Q2FwcyAqIGZpbHRlciwgZ2Jvb2xlYW4gc2hvdWxkX2dldF9wYWQsIGNvbnN0IGdjaGFyICogcGFkX3RtcGxfbmFtZSkKLXsKLSAgR3N0UGFkICpwZWVyLCAqcmVxdWVzdGVkOwotICBHc3RQYWRUZW1wbGF0ZSAqdG1wbDsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmcGFkcmVxc2lua19xdWVyeV9jYXBzLCBwZWVyX2NhcHMpOwotICBwZWVyID0gZ3N0X3BhZF9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQyk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChwZWVyLCB0ZXN0cGFkcmVxc2lua19wZWVyX3F1ZXJ5KTsKLSAgcmVxdWVzdGVkID0gZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkIChlbGVtZW50LCBwZWVyLCBmaWx0ZXIpOwotCi0gIGlmIChzaG91bGRfZ2V0X3BhZCkgewotICAgIGZhaWxfdW5sZXNzIChyZXF1ZXN0ZWQgIT0gTlVMTCk7Ci0gICAgaWYgKHBhZF90bXBsX25hbWUpIHsKLSAgICAgIHRtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUgKHJlcXVlc3RlZCk7Ci0gICAgICBmYWlsX3VubGVzcyAoc3RyY21wIChHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUgKHRtcGwpLAotICAgICAgICAgICAgICBwYWRfdG1wbF9uYW1lKSA9PSAwKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHRtcGwpOwotICAgIH0KLSAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChlbGVtZW50LCByZXF1ZXN0ZWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJlcXVlc3RlZCk7Ci0gIH0gZWxzZSB7Ci0gICAgZmFpbF91bmxlc3MgKHJlcXVlc3RlZCA9PSBOVUxMKTsKLSAgfQotCi0gIGlmIChwZWVyX2NhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJfY2Fwcyk7Ci0gIGlmIChmaWx0ZXIpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lbGVtZW50X2dldF9jb21wYXRpYmxlX3BhZF9yZXF1ZXN0KQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotCi0gIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChOVUxMLCAidGVzdHBhZHJlcXNpbmsiLCBHU1RfUkFOS19OT05FLAotICAgICAgZ3N0X3Rlc3RwYWRyZXFzaW5rX2dldF90eXBlICgpKTsKLQotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdHBhZHJlcXNpbmsiLCBOVUxMKTsKLQotICAvKiBUcnkgd2l0aCBhIHBlZXIgcGFkIHdpdGggYW55IGNhcHMgYW5kIG5vIGZpbHRlciwKLSAgICogcmV0dXJuaW5nIGFueSBwYWQgaXMgb2sgKi8KLSAgY2hlY2tfZ2V0X2NvbXBhdGlibGVfcGFkX3JlcXVlc3QgKGVsZW1lbnQsIE5VTEwsIE5VTEwsIFRSVUUsIE5VTEwpOwotICAvKiBUcnkgd2l0aCBhIHBlZXIgcGFkIHdpdGggYW55IGNhcHMgYW5kIHZpZGVvIGFzIGZpbHRlciAqLwotICBjaGVja19nZXRfY29tcGF0aWJsZV9wYWRfcmVxdWVzdCAoZWxlbWVudCwgTlVMTCwKLSAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXciKSwgVFJVRSwgInZpZGVvXyV1Iik7Ci0gIC8qIFRyeSB3aXRoIGEgcGVlciBwYWQgd2l0aCBhbnkgY2FwcyBhbmQgYXVkaW8gYXMgZmlsdGVyICovCi0gIGNoZWNrX2dldF9jb21wYXRpYmxlX3BhZF9yZXF1ZXN0IChlbGVtZW50LCBOVUxMLAotICAgICAgZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby94LXJhdyIpLCBUUlVFLCAiYXVkaW9fJXUiKTsKLSAgLyogVHJ5IHdpdGggYSBwZWVyIHBhZCB3aXRoIGFueSBjYXBzIGFuZCBmYWtlIGNhcHMgYXMgZmlsdGVyICovCi0gIGNoZWNrX2dldF9jb21wYXRpYmxlX3BhZF9yZXF1ZXN0IChlbGVtZW50LCBOVUxMLAotICAgICAgZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJmb28vYmFyIiksIEZBTFNFLCBOVUxMKTsKLQotICAvKiBUcnkgd2l0aCBhIHBlZXIgcGFkIHdpdGggdmlkZW8gY2FwcyBhbmQgbm8gY2FwcyBhcyBmaWx0ZXIgKi8KLSAgY2hlY2tfZ2V0X2NvbXBhdGlibGVfcGFkX3JlcXVlc3QgKGVsZW1lbnQsCi0gICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtcmF3IiksIE5VTEwsIFRSVUUsICJ2aWRlb18ldSIpOwotICAvKiBUcnkgd2l0aCBhIHBlZXIgcGFkIHdpdGggYXVkaW8gY2FwcyBhbmQgbm8gY2FwcyBhcyBmaWx0ZXIgKi8KLSAgY2hlY2tfZ2V0X2NvbXBhdGlibGVfcGFkX3JlcXVlc3QgKGVsZW1lbnQsCi0gICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3gtcmF3IiksIE5VTEwsIFRSVUUsICJhdWRpb18ldSIpOwotICAvKiBUcnkgd2l0aCBhIHBlZXIgcGFkIHdpdGggdmlkZW8gY2FwcyBhbmQgZm9vIGNhcHMgYXMgZmlsdGVyICovCi0gIGNoZWNrX2dldF9jb21wYXRpYmxlX3BhZF9yZXF1ZXN0IChlbGVtZW50LAotICAgICAgZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LXJhdyIpLCBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImZvby9iYXIiKSwKLSAgICAgIEZBTFNFLCBOVUxMKTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmcGFkcmVxc2lua19xdWVyeV9jYXBzLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZWxlbWVudF9saW5rX3dpdGhfZ2hvc3RfcGFkcykKLXsKLSAgR3N0RWxlbWVudCAqc2lua19iaW4sICpzaW5rMl9iaW4sICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqc3JjLCAqdGVlLCAqcXVldWUsICpxdWV1ZTIsICpzaW5rLCAqc2luazI7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtfYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsyX2JpbiA9IGdzdF9iaW5fbmV3IChOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCkpOwotICBmYWlsX3VubGVzcyAodGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVlIiwgTlVMTCkpOwotICBmYWlsX3VubGVzcyAocXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpKTsKLSAgZmFpbF91bmxlc3MgKHF1ZXVlMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCkpOwotICBmYWlsX3VubGVzcyAoc2luazIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgdGVlLCBxdWV1ZSwgc2luaywgc2luazJfYmluLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCB0ZWUsIHF1ZXVlLCBzaW5rLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICAvKiB3YWl0IGZvciBhIGJ1ZmZlciB0byBhcnJpdmUgYXQgdGhlIHNpbmsgKi8KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUsIC0xKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHNpbmtfYmluKSwgcXVldWUyLCBzaW5rMiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChxdWV1ZTIsIHNpbmsyKSk7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHNpbmsyX2JpbiksIHNpbmtfYmluKTsKLSAgLyogVGhlIHR3byBsZXZlbHMgb2YgYmlucyB3aXRoIHRoZSBvdXRlciBiaW4gaW4gdGhlIHJ1bm5pbmcgc3RhdGUgaXMKLSAgICogaW1wb3J0YW50LCB3aGVuIHRoZSBzZWNvbmQgZ2hvc3QgcGFkIGlzIGNyZWF0ZWQgKGZyb20gdGhpcwotICAgKiBnc3RfZWxlbWVudF9saW5rKCkpIGluIHRoZSBydW5uaW5nIGJpbiwgd2UgbmVlZCB0byBhY3RpdmF0ZSB0aGUKLSAgICogY3JlYXRlZCBnaG9zdCBwYWQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHRlZSwgcXVldWUyKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfdXRpbHNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0VXRpbHMiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYnVmZmVyX3Byb2JlX25fdGltZXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYnVmZmVyX3Byb2JlX29uY2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWF0aF9zY2FsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXRoX3NjYWxlX3JvdW5kKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21hdGhfc2NhbGVfY2VpbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXRoX3NjYWxlX3VpbnQ2NCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXRoX3NjYWxlX3JhbmRvbSk7Ci0jaWZkZWYgSEFWRV9HU0wKLSNpZmRlZiBIQVZFX0dNUAotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWF0aF9zY2FsZV9nbXApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWF0aF9zY2FsZV9nbXBfaW50KTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2d1aW50NjRfdG9fZ2RvdWJsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nZG91YmxlX3RvX2d1aW50NjQpOwotI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24pOwotI2VuZGlmCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lbGVtZW50X2ZvdW5kX3RhZ3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZWxlbWVudF9saW5rKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VsZW1lbnRfbGlua193aXRoX2dob3N0X3BhZHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZWxlbWVudF91bmxpbmspOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZWxlbWVudF9nZXRfY29tcGF0aWJsZV9wYWRfcmVxdWVzdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXRfdmFsdWVfZnJvbV9zdHJpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYmluYXJ5X3NlYXJjaCk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhZF9wcm94eV9xdWVyeV9jYXBzX2FnZ3JlZ2F0aW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVhZF9tYWNyb3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd3JpdGVfbWFjcm9zKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF91dGlscyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QvZ3N0dmFsdWUuYyBiL3Rlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDA4MmM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9nc3R2YWx1ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEyMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDQ+IERhdmlkIFNjaGxlZWYgPGRhdmlkIGF0IHNjaGxlZWYgZG90IG9yZz4KLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBnc3R2YWx1ZS5jOiBVbml0IHRlc3RzIGZvciBHc3RWYWx1ZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2J1ZmZlcikKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwIH07Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludDggZGF0YVs4XTsKLSAgZ3VpbnQ2NCB2YWw7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX0JVRkZFUik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgIjEyMzQ1Njc4OTBhYmNkZWYiKSk7Ci0gIC8qIGRvZXMgbm90IGluY3JlYXNlIHRoZSByZWZjb3VudCAqLwotICBidWYgPSBHU1RfQlVGRkVSIChnX3ZhbHVlX2dldF9ib3hlZCAoJnZhbHVlKSk7Ci0gIEFTU0VSVF9NSU5JX09CSkVDVF9SRUZDT1VOVCAoYnVmLCAiYnVmZmVyIiwgMSk7Ci0KLSAgLyogZG9lcyBub3QgaW5jcmVhc2UgdGhlIHJlZmNvdW50ICovCi0gIGJ1ZiA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICgmdmFsdWUpOwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZiwgImJ1ZmZlciIsIDEpOwotCi0gIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCBkYXRhLCA4KTsKLSAgdmFsID0gR1NUX1JFQURfVUlOVDY0X0JFIChkYXRhKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAodmFsLCBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4MTIzNDU2Nzg5MGFiY2RlZikpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBjcmVhdGUgYW5kIHNlcmlhbGl6ZSBhIGJ1ZmZlciAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2VyaWFsaXplX2J1ZmZlcikKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwIH07Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBnY2hhciAqc2VyaWFsaXplZDsKLSAgY29uc3QgZ3VpbnQ4IGJ1Zl9kYXRhWzhdID0geyAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDkwLCAweGFiLCAweGNkLCAweGVmIH07Ci0gIGdpbnQgbGVuOwotCi0gIGxlbiA9IHNpemVvZiAoYnVmX2RhdGEpOwotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGxlbik7Ci0KLSAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIChnY2hhciAqKSBidWZfZGF0YSwgbGVuKTsKLQotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZiwgImJ1ZmZlciIsIDEpOwotCi0gIC8qIGFuZCBhc3NpZ24gYnVmZmVyIHRvIG1pbmkgb2JqZWN0ICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9CVUZGRVIpOwotICBnc3RfdmFsdWVfdGFrZV9idWZmZXIgKCZ2YWx1ZSwgYnVmKTsKLSAgQVNTRVJUX01JTklfT0JKRUNUX1JFRkNPVU5UIChidWYsICJidWZmZXIiLCAxKTsKLQotICAvKiBub3cgc2VyaWFsaXplIGl0ICovCi0gIHNlcmlhbGl6ZWQgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOwotICBHU1RfREVCVUcgKCJzZXJpYWxpemVkIGJ1ZmZlciB0byAlcyIsIHNlcmlhbGl6ZWQpOwotICBmYWlsX3VubGVzcyAoc2VyaWFsaXplZCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc2VyaWFsaXplZCwgIjEyMzQ1Njc4OTBhYmNkZWYiKTsKLQotICAvKiByZWZjb3VudCBzaG91bGQgbm90IGNoYW5nZSAqLwotICBBU1NFUlRfTUlOSV9PQkpFQ1RfUkVGQ09VTlQgKGJ1ZiwgImJ1ZmZlciIsIDEpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ19mcmVlIChzZXJpYWxpemVkKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLQotICAvKiB0YWtlIE5VTEwgYnVmZmVyICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9CVUZGRVIpOwotICBHU1RfREVCVUcgKCJzZXR0aW5nIE5VTEwgYnVmZmVyIik7Ci0gIGdzdF92YWx1ZV90YWtlX2J1ZmZlciAoJnZhbHVlLCBOVUxMKTsKLQotICAvKiBub3cgc2VyaWFsaXplIGl0ICovCi0gIEdTVF9ERUJVRyAoInNlcmlhbGl6aW5nIE5VTEwgYnVmZmVyIik7Ci0gIHNlcmlhbGl6ZWQgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOwotICAvKiBzaG91bGQgcmV0dXJuIE5VTEwgKi8KLSAgZmFpbF91bmxlc3MgKHNlcmlhbGl6ZWQgPT0gTlVMTCk7Ci0KLSAgZ19mcmVlIChzZXJpYWxpemVkKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9naW50NjQpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OwotICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7Ci0gICAgIjEyMzQ1Njc4OTAxIiwKLSAgICAiLTEyMzQ1Njc4OTAxIiwKLSAgICAiMTE1MjkyMTUwNDYwNjg0Njk3NiIsCi0gICAgIi0xMTUyOTIxNTA0NjA2ODQ2OTc2IiwKLSAgfTsKLSAgZ2ludDY0IHJlc3VsdHNbXSA9IHsKLSAgICAxMjM0NTY3ODkwMUxMLAotICAgIC0xMjM0NTY3ODkwMUxMLAotICAgIDExNTI5MjE1MDQ2MDY4NDY5NzZMTCwKLSAgICAtMTE1MjkyMTUwNDYwNjg0Njk3NkxMLAotICB9OwotICBpbnQgaTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR19UWVBFX0lOVDY0KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChzdHJpbmdzKTsgKytpKSB7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlLCBzdHJpbmdzW2ldKSwKLSAgICAgICAgImNvdWxkIG5vdCBkZXNlcmlhbGl6ZSAlcyAoJWQpIiwgc3RyaW5nc1tpXSwgaSk7Ci0gICAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludDY0ICgmdmFsdWUpID09IHJlc3VsdHNbaV0sCi0gICAgICAgICJyZXN1bHRpbmcgdmFsdWUgaXMgJSIgR19HSU5UNjRfRk9STUFUICIsIG5vdCAlIiBHX0dJTlQ2NF9GT1JNQVQKLSAgICAgICAgIiwgZm9yIHN0cmluZyAlcyAoJWQpIiwgZ192YWx1ZV9nZXRfaW50NjQgKCZ2YWx1ZSksCi0gICAgICAgIHJlc3VsdHNbaV0sIHN0cmluZ3NbaV0sIGkpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVzZXJpYWxpemVfZ3VpbnQ2NCkKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwIH07Ci0gIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKLSAgICAiMHhmZmZmZmZmZmZmZmZmZmZmIiwKLSAgICAiOTIyMzM3MjAzNjg1NDc3NTgxMCIsCi0gICAgIi05MjIzMzcyMDM2ODU0Nzc1ODEwIiwKLSAgICAiLTEiLAotICAgICIxIiwKLSAgICAiLTAiLAotICB9OwotICBndWludDY0IHJlc3VsdHNbXSA9IHsKLSAgICAweGZmZmZmZmZmZmZmZmZmZmZVTEwsCi0gICAgOTIyMzM3MjAzNjg1NDc3NTgxMFVMTCwKLSAgICA5MjIzMzcyMDM2ODU0Nzc1ODA2VUxMLAotICAgIChndWludDY0KSAtIDEsCi0gICAgMSwKLSAgICAwLAotICB9OwotICBpbnQgaTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR19UWVBFX1VJTlQ2NCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgewotICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgc3RyaW5nc1tpXSksCi0gICAgICAgICJjb3VsZCBub3QgZGVzZXJpYWxpemUgJXMgKCVkKSIsIHN0cmluZ3NbaV0sIGkpOwotICAgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF91aW50NjQgKCZ2YWx1ZSkgPT0gcmVzdWx0c1tpXSwKLSAgICAgICAgInJlc3VsdGluZyB2YWx1ZSBpcyAlIiBHX0dVSU5UNjRfRk9STUFUICIsIG5vdCAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIsIGZvciBzdHJpbmcgJXMgKCVkKSIsIGdfdmFsdWVfZ2V0X3VpbnQ2NCAoJnZhbHVlKSwKLSAgICAgICAgcmVzdWx0c1tpXSwgc3RyaW5nc1tpXSwgaSk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9ndWNoYXIpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OwotICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7Ci0gICAgIjB4ZmYiLAotICAgICIyNTUiLAotICAgICItMSIsCi0gICAgIjEiLAotICAgICItMCIsCi0gIH07Ci0gIGd1Y2hhciByZXN1bHRzW10gPSB7Ci0gICAgMHhmZiwKLSAgICAyNTUsCi0gICAgKGd1Y2hhcikgLSAxLAotICAgIDEsCi0gICAgMCwKLSAgfTsKLSAgaW50IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfVFlQRV9VQ0hBUik7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgewotICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgc3RyaW5nc1tpXSksCi0gICAgICAgICJjb3VsZCBub3QgZGVzZXJpYWxpemUgJXMgKCVkKSIsIHN0cmluZ3NbaV0sIGkpOwotICAgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF91Y2hhciAoJnZhbHVlKSA9PSByZXN1bHRzW2ldLAotICAgICAgICAicmVzdWx0aW5nIHZhbHVlIGlzICV1IG5vdCAldSwgZm9yIHN0cmluZyAlcyAoJWQpIiwKLSAgICAgICAgZ192YWx1ZV9nZXRfdWNoYXIgKCZ2YWx1ZSksIHJlc3VsdHNbaV0sIHN0cmluZ3NbaV0sIGkpOwotICB9Ci0KLSAgLyogdGVzdCBzZXJpYWxpc2F0aW9uIGFzIHdlbGwgd2hpbGUgd2UncmUgYXQgaXQgKi8KLSAgewotICAgIGdjaGFyICpzdHI7Ci0gICAgR1ZhbHVlIHZhbHVlID0geyAwIH07Ci0gICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfVFlQRV9VQ0hBUik7Ci0KLSAgICBnX3ZhbHVlX3NldF91Y2hhciAoJnZhbHVlLCAyNTUpOwotICAgIHN0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZ2YWx1ZSk7Ci0KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICIyNTUiKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9nc3RmcmFjdGlvbikKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwIH07Ci0gIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKLSAgICAiNC81IiwKLSAgICAiLTgvOSIKLSAgfTsKLSAgZ2ludDY0IHJlc3VsdF9udW1lcnNbXSA9IHsKLSAgICA0LAotICAgIC04Ci0gIH07Ci0gIGdpbnQ2NCByZXN1bHRfZGVub21zW10gPSB7Ci0gICAgNSwKLSAgICA5Ci0gIH07Ci0KLSAgaW50IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgewotICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgc3RyaW5nc1tpXSksCi0gICAgICAgICJjb3VsZCBub3QgZGVzZXJpYWxpemUgJXMgKCVkKSIsIHN0cmluZ3NbaV0sIGkpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnZhbHVlKSA9PSByZXN1bHRfbnVtZXJzW2ldLAotICAgICAgICAicmVzdWx0aW5nIG51bWVyYXRvciB2YWx1ZSBpcyAlZCwgbm90ICVkIgotICAgICAgICAiLCBmb3Igc3RyaW5nICVzICglZCkiLCBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJnZhbHVlKSwKLSAgICAgICAgcmVzdWx0X251bWVyc1tpXSwgc3RyaW5nc1tpXSwgaSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWx1ZSkgPT0KLSAgICAgICAgcmVzdWx0X2Rlbm9tc1tpXSwgInJlc3VsdGluZyBkZW5vbWluYXRvciB2YWx1ZSBpcyAlZCwgbm90ICVkIgotICAgICAgICAiLCBmb3Igc3RyaW5nICVzICglZCkiLCBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICgmdmFsdWUpLAotICAgICAgICByZXN1bHRfZGVub21zW2ldLCBzdHJpbmdzW2ldLCBpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2dpbnQpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OwotICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7Ci0gICAgIjEyMzQ1NiIsCi0gICAgIi0xMjM0NTYiLAotICAgICIweEZGRkYiLAotICAgICIweDAwMDBGRkZGIiwKLSAgICAvKiBhIHBvc2l0aXZlIGxvbmcgbG9uZywgc2VyaWFsaXppbmcgdG8gaGlnaGVzdCBwb3NzaWJsZSBwb3NpdGl2ZSBzaW50ICovCi0gICAgIjB4N0ZGRkZGRkYiLAotICAgIC8qIGEgcG9zaXRpdmUgbG9uZyBsb25nLCBzZXJpYWxpemluZyB0byBsb3dlc3QgcG9zc2libGUgbmVnYXRpdmUgc2ludCAqLwotICAgICIweDgwMDAwMDAwIiwKLSAgICAvKiBhIG5lZ2F0aXZlIGxvbmcgbG9uZywgc2VyaWFsaXppbmcgdG8gbG93ZXN0IHBvc3NpYmxlIG5lZ2F0aXZlIHNpbnQgKi8KLSAgICAiMHhGRkZGRkZGRjgwMDAwMDAwIiwKLSAgICAiMHhGRjAwMDAwMCIsCi0gICAgLyogYSBwb3NpdGl2ZSBsb25nIGxvbmcgc2VyaWFsaXppbmcgdG8gLTEgKi8KLSAgICAiMHhGRkZGRkZGRiIsCi0gICAgIjB4RkZGRkZGRkYiLAotICAgIC8qIGEgbmVnYXRpdmUgbG9uZyBsb25nIHNlcmlhbGl6aW5nIHRvIC0xICovCi0gICAgIjB4RkZGRkZGRkZGRkZGRkZGRiIsCi0gICAgIjB4RkZGRkZGRkZGRkZGRkZGRiIsCi0gICAgIjB4RUZGRkZGRkYiLAotICB9OwotICAvKiBzb21lIGNhc3RzIG5lZWQgdG8gYmUgZXhwbGljaXQgYmVjYXVzZSBvZiB1bnNpZ25lZCAtPiBzaWduZWQgKi8KLSAgZ2ludCByZXN1bHRzW10gPSB7Ci0gICAgMTIzNDU2LAotICAgIC0xMjM0NTYsCi0gICAgMHhGRkZGLAotICAgIDB4RkZGRiwKLSAgICAweDdGRkZGRkZGLAotICAgIChnaW50KSAweDgwMDAwMDAwLAotICAgIChnaW50KSAweDgwMDAwMDAwLAotICAgIChnaW50KSAweEZGMDAwMDAwLAotICAgIC0xLAotICAgIChnaW50KSAweEZGRkZGRkZGLAotICAgIC0xLAotICAgIChnaW50KSAweEZGRkZGRkZGRkZGRkZGRkZMTCwKLSAgICAoZ2ludCkgMHhFRkZGRkZGRiwKLSAgfTsKLSAgaW50IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfVFlQRV9JTlQpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHN0cmluZ3MpOyArK2kpIHsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsdWUsIHN0cmluZ3NbaV0pLAotICAgICAgICAiY291bGQgbm90IGRlc2VyaWFsaXplICVzICglZCkiLCBzdHJpbmdzW2ldLCBpKTsKLSAgICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfaW50ICgmdmFsdWUpID09IHJlc3VsdHNbaV0sCi0gICAgICAgICJyZXN1bHRpbmcgdmFsdWUgaXMgJWQsIG5vdCAlZCwgZm9yIHN0cmluZyAlcyAoJWQpIiwKLSAgICAgICAgZ192YWx1ZV9nZXRfaW50ICgmdmFsdWUpLCByZXN1bHRzW2ldLCBzdHJpbmdzW2ldLCBpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2dpbnRfZmFpbHVyZXMpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OwotICBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7Ci0gICAgIi0iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCBhIGNvbXBsZXRlIG51bWJlciAqLwotICAgICItIFRFU1QiLCAgICAgICAgICAgICAgICAgICAvKiBub3QgYSBjb21wbGV0ZSBudW1iZXIgKi8KLSAgICAiMHgwMDAwMDAwMTAwMDAwMDAwIiwgICAgICAgLyogbG93ZXN0IGxvbmcgbG9uZyB0aGF0IGNhbm5vdCBmaXQgaW4gMzIgYml0cyAqLwotICAgICIweEYwMDAwMDAwMDAwMDAwMDAiLAotICAgICIweEZGRkZGRkYwMDAwMDAwMDAiLAotICAgICIweEZGRkZGRkZGMDAwMDAwMDAiLAotICAgICIweDEwMDAwMDAwMDAwMDAwMDAwIiwgICAgICAvKiBmaXJzdCBudW1iZXIgdG9vIGxvbmcgdG8gZml0IGludG8gYSBsb25nIGxvbmcgKi8KLSAgICAvKiBpbnZlbnQgYSBuZXcgcHJvY2Vzc29yIGZpcnN0IGJlZm9yZSB0cnlpbmcgdG8gbWFrZSB0aGlzIG9uZSBwYXNzICovCi0gICAgIjB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAotICB9OwotICBpbnQgaTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR19UWVBFX0lOVCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgewotICAgIGZhaWxfaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlLCBzdHJpbmdzW2ldKSwKLSAgICAgICAgImRlc2VyaWFsaXplZCAlcyAoJWQpLCB3aGlsZSBpdCBzaG91bGQgaGF2ZSBmYWlsZWQiLCBzdHJpbmdzW2ldLCBpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2d1aW50KQotewotICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKLSAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0gewotICAgICIxMjM0NTYiLAotICAgICItMTIzNDU2IiwKLSAgICAiMHhGRkZGIiwKLSAgICAiMHgwMDAwRkZGRiIsCi0gICAgLyogYSBwb3NpdGl2ZSBsb25nIGxvbmcsIHNlcmlhbGl6aW5nIHRvIGhpZ2hlc3QgcG9zc2libGUgcG9zaXRpdmUgc2ludCAqLwotICAgICIweDdGRkZGRkZGIiwKLSAgICAvKiBhIHBvc2l0aXZlIGxvbmcgbG9uZywgc2VyaWFsaXppbmcgdG8gbG93ZXN0IHBvc3NpYmxlIG5lZ2F0aXZlIHNpbnQgKi8KLSAgICAiMHg4MDAwMDAwMCIsCi0gICAgIjIxNDc0ODM2NDgiLAotICAgIC8qIGEgbmVnYXRpdmUgbG9uZyBsb25nLCBzZXJpYWxpemluZyB0byBsb3dlc3QgcG9zc2libGUgbmVnYXRpdmUgc2ludCAqLwotICAgICIweEZGRkZGRkZGODAwMDAwMDAiLAotICAgIC8qIGEgdmFsdWUgdHlwaWNhbGx5IHVzZWQgZm9yIHJnYiBtYXNrcyAqLwotICAgICIweEZGMDAwMDAwIiwKLSAgICAvKiBhIHBvc2l0aXZlIGxvbmcgbG9uZyBzZXJpYWxpemluZyB0byBoaWdoZXN0IHBvc3NpYmxlIHBvc2l0aXZlIHVpbnQgKi8KLSAgICAiMHhGRkZGRkZGRiIsCi0gICAgIjB4RkZGRkZGRkYiLAotICAgIC8qIGEgbmVnYXRpdmUgbG9uZyBsb25nIHNlcmlhbGl6aW5nIHRvIGhpZ2hlc3QgcG9zc2libGUgcG9zaXRpdmUgdWludCAqLwotICAgICIweEZGRkZGRkZGRkZGRkZGRkYiLAotICAgICIweEVGRkZGRkZGIiwKLSAgfTsKLSAgZ3VpbnQgcmVzdWx0c1tdID0gewotICAgIDEyMzQ1NiwKLSAgICAoZ3VpbnQpIC0gMTIzNDU2LAotICAgIDB4RkZGRiwKLSAgICAweEZGRkYsCi0gICAgMHg3RkZGRkZGRiwKLSAgICAweDgwMDAwMDAwLAotICAgIChndWludCkgMjE0NzQ4MzY0OExMLAotICAgIDB4ODAwMDAwMDAsCi0gICAgMHhGRjAwMDAwMCwKLSAgICAweEZGRkZGRkZGLAotICAgIEdfTUFYVUlOVCwKLSAgICAoZ3VpbnQpIDB4RkZGRkZGRkZGRkZGRkZGRkxMLAotICAgIDB4RUZGRkZGRkYsCi0gIH07Ci0gIGludCBpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHX1RZUEVfVUlOVCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgewotICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgc3RyaW5nc1tpXSksCi0gICAgICAgICJjb3VsZCBub3QgZGVzZXJpYWxpemUgJXMgKCVkKSIsIHN0cmluZ3NbaV0sIGkpOwotICAgIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF91aW50ICgmdmFsdWUpID09IHJlc3VsdHNbaV0sCi0gICAgICAgICJyZXN1bHRpbmcgdmFsdWUgaXMgJWQsIG5vdCAlZCwgZm9yIHN0cmluZyAlcyAoJWQpIiwKLSAgICAgICAgZ192YWx1ZV9nZXRfdWludCAoJnZhbHVlKSwgcmVzdWx0c1tpXSwgc3RyaW5nc1tpXSwgaSk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZXNlcmlhbGl6ZV9ndWludF9mYWlsdXJlcykKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwIH07Ci0gIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKLSAgICAiLSIsICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGEgY29tcGxldGUgbnVtYmVyICovCi0gICAgIi0gVEVTVCIsICAgICAgICAgICAgICAgICAgIC8qIG5vdCBhIGNvbXBsZXRlIG51bWJlciAqLwotI2lmIDAKLS8qIEZJWE1FOiB0aGVzZSB2YWx1ZXMgc2hvdWxkIG5vdCBiZSBkZXNlcmlhbGl6YWJsZSwgc2luY2UgdGhleSBvdmVyZmxvdwotICogdGhlIHRhcmdldCBmb3JtYXQgKi8KLSAgICAiMHgwMDAwMDAwMTAwMDAwMDAwIiwgICAgICAgLyogbG93ZXN0IGxvbmcgbG9uZyB0aGF0IGNhbm5vdCBmaXQgaW4gMzIgYml0cyAqLwotICAgICIweEYwMDAwMDAwMDAwMDAwMDAiLAotICAgICIweEZGRkZGRkYwMDAwMDAwMDAiLAotICAgICIweEZGRkZGRkZGMDAwMDAwMDAiLAotICAgICIweDEwMDAwMDAwMDAwMDAwMDAwIiwgICAgICAvKiBmaXJzdCBudW1iZXIgdG9vIGxvbmcgdG8gZml0IGludG8gYSBsb25nIGxvbmcgKi8KLSAgICAvKiBpbnZlbnQgYSBuZXcgcHJvY2Vzc29yIGZpcnN0IGJlZm9yZSB0cnlpbmcgdG8gbWFrZSB0aGlzIG9uZSBwYXNzICovCi0gICAgIjB4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAotI2VuZGlmCi0gIH07Ci0gIGludCBpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHX1RZUEVfVUlOVCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc3RyaW5ncyk7ICsraSkgewotICAgIGZhaWxfaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlLCBzdHJpbmdzW2ldKSwKLSAgICAgICAgImRlc2VyaWFsaXplZCAlcyAoJWQpLCB3aGlsZSBpdCBzaG91bGQgaGF2ZSBmYWlsZWQiLCBzdHJpbmdzW2ldLCBpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NlcmlhbGl6ZV9mbGFncykKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwIH07Ci0gIGdjaGFyICpzdHJpbmc7Ci0gIEdzdFNlZWtGbGFncyBmbGFnc1tdID0gewotICAgIDAsCi0gICAgR1NUX1NFRUtfRkxBR19OT05FLAotICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0gsCi0gICAgR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUsCi0gIH07Ci0gIGNvbnN0IGNoYXIgKnJlc3VsdHNbXSA9IHsKLSAgICAiR1NUX1NFRUtfRkxBR19OT05FIiwKLSAgICAiR1NUX1NFRUtfRkxBR19OT05FIiwKLSAgICAiR1NUX1NFRUtfRkxBR19GTFVTSCIsCi0gICAgIkdTVF9TRUVLX0ZMQUdfRkxVU0grR1NUX1NFRUtfRkxBR19BQ0NVUkFURSIsCi0gIH07Ci0gIGludCBpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9TRUVLX0ZMQUdTKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChmbGFncyk7ICsraSkgewotICAgIGdfdmFsdWVfc2V0X2ZsYWdzICgmdmFsdWUsIGZsYWdzW2ldKTsKLSAgICBzdHJpbmcgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOwotICAgIGZhaWxfaWYgKHN0cmluZyA9PSBOVUxMLCAiY291bGQgbm90IHNlcmlhbGl6ZSBmbGFncyAlZCIsIGkpOwotICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKHN0cmluZywgcmVzdWx0c1tpXSkgPT0gMCwKLSAgICAgICAgInJlc3VsdGluZyB2YWx1ZSBpcyAlcywgbm90ICVzLCBmb3IgZmxhZ3MgIyVkIiwgc3RyaW5nLCByZXN1bHRzW2ldLCBpKTsKLSAgICBnX2ZyZWUgKHN0cmluZyk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Rlc2VyaWFsaXplX2ZsYWdzKQotewotICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKLSAgY29uc3QgY2hhciAqc3RyaW5nc1tdID0gewotICAgICIiLAotICAgICIwIiwKLSAgICAiR1NUX1NFRUtfRkxBR19OT05FIiwKLSAgICAiR1NUX1NFRUtfRkxBR19GTFVTSCIsCi0gICAgIjB4ZiIsCi0gICAgIjE1IiwKLSAgICAiR1NUX1NFRUtfRkxBR19GTFVTSCtHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIiwKLSAgfTsKLSAgR3N0U2Vla0ZsYWdzIHJlc3VsdHNbXSA9IHsKLSAgICBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgR1NUX1NFRUtfRkxBR19OT05FLAotICAgIEdTVF9TRUVLX0ZMQUdfTk9ORSwKLSAgICBHU1RfU0VFS19GTEFHX0ZMVVNILAotICAgIDB4ZiwKLSAgICAxNSwKLSAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwKLSAgfTsKLSAgaW50IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX1NFRUtfRkxBR1MpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHN0cmluZ3MpOyArK2kpIHsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsdWUsIHN0cmluZ3NbaV0pLAotICAgICAgICAiY291bGQgbm90IGRlc2VyaWFsaXplICVzICglZCkiLCBzdHJpbmdzW2ldLCBpKTsKLSAgICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfZmxhZ3MgKCZ2YWx1ZSkgPT0gcmVzdWx0c1tpXSwKLSAgICAgICAgInJlc3VsdGluZyB2YWx1ZSBpcyAlZCwgbm90ICVkLCBmb3Igc3RyaW5nICVzICglZCkiLAotICAgICAgICBnX3ZhbHVlX2dldF9mbGFncyAoJnZhbHVlKSwgcmVzdWx0c1tpXSwgc3RyaW5nc1tpXSwgaSk7Ci0gIH0KLQotICBmYWlsX2lmIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgImZvbyIpLAotICAgICAgImZsYWcgZGVzZXJpYWxpemluZyBmb3IgYm9ndXMgdmFsdWUgc2hvdWxkIGhhdmUgZmFpbGVkISIpOwotICBmYWlsX2lmIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWx1ZSwgIkdTVF9TRUVLX0ZMQUdfRkxVU0grZm9vIiksCi0gICAgICAiZmxhZyBkZXNlcmlhbGl6aW5nIGZvciBib2d1cyB2YWx1ZSBzaG91bGQgaGF2ZSBmYWlsZWQhIik7Ci0gIGZhaWxfaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlLAotICAgICAgICAgICJHU1RfU0VFS19GTEFHX0ZMVVNIK2ZvbytHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIiksCi0gICAgICAiZmxhZyBkZXNlcmlhbGl6aW5nIGZvciBib2d1cyB2YWx1ZSBzaG91bGQgaGF2ZSBmYWlsZWQhIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVzZXJpYWxpemVfYml0bWFzaykKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwIH07Ci0gIGNvbnN0IGNoYXIgKnN0cmluZ3NbXSA9IHsKLSAgICAiMHhmZmZmZmZmZmZmZmZmZmZmIiwKLSAgICAiMHgxMjM0NTY3ODkwQUJDREVGIiwKLSAgfTsKLSAgZ3VpbnQ2NCByZXN1bHRzW10gPSB7Ci0gICAgMHhmZmZmZmZmZmZmZmZmZmZmVUxMLAotICAgIDB4MTIzNDU2Nzg5MEFCQ0RFRlVMTCwKLSAgfTsKLSAgaW50IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX0JJVE1BU0spOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHN0cmluZ3MpOyArK2kpIHsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsdWUsIHN0cmluZ3NbaV0pLAotICAgICAgICAiY291bGQgbm90IGRlc2VyaWFsaXplICVzICglZCkiLCBzdHJpbmdzW2ldLCBpKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9iaXRtYXNrICgmdmFsdWUpID09IHJlc3VsdHNbaV0sCi0gICAgICAgICJyZXN1bHRpbmcgdmFsdWUgaXMgMHglMDE2IiBHX0dJTlQ2NF9NT0RJRklFUiAieCwgbm90IDB4JTAxNiIKLSAgICAgICAgR19HSU5UNjRfTU9ESUZJRVIgIngsIGZvciBzdHJpbmcgJXMgKCVkKSIsCi0gICAgICAgIGdzdF92YWx1ZV9nZXRfYml0bWFzayAoJnZhbHVlKSwgcmVzdWx0c1tpXSwgc3RyaW5nc1tpXSwgaSk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotY2hlY2tfZmxhZ3NldF9tYXNrX3NlcmlhbGlzYXRpb24gKEdWYWx1ZSAqIHZhbHVlLCBndWludCB0ZXN0X2ZsYWdzLAotICAgIGd1aW50IHRlc3RfbWFzaykKLXsKLSAgZ2NoYXIgKnN0cmluZzsKLSAgZ3N0X3ZhbHVlX3NldF9mbGFnc2V0ICh2YWx1ZSwgdGVzdF9mbGFncywgdGVzdF9tYXNrKTsKLQotICAvKiBOb3JtYWxpc2Ugb3VyIHRlc3QgZmxhZ3MgYWdhaW5zdCB0aGUgbWFzayBub3cgZm9yIGVhc2llciB0ZXN0aW5nLAotICAgKiBhcyB0aGF0J3Mgd2hhdCB3ZSBleHBlY3QgdG8gZ2V0IGJhY2sgZnJvbSB0aGUgZmxhZ3NldCBhZnRlciBpdAotICAgKiBub3JtYWxpc2VzIGludGVybmFsbHkgKi8KLSAgdGVzdF9mbGFncyAmPSB0ZXN0X21hc2s7Ci0KLSAgLyogQ2hlY2sgdGhlIHZhbHVlcyBnb3Qgc3RvcmVkIGNvcnJlY3RseSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X2ZsYWdzICh2YWx1ZSkgPT0gdGVzdF9mbGFncywKLSAgICAgICJyZXN1bHRpbmcgZmxhZ3MgdmFsdWUgaXMgMHgldSwgbm90IDB4JXgiLAotICAgICAgZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X2ZsYWdzICh2YWx1ZSksIHRlc3RfZmxhZ3MpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sgKHZhbHVlKSA9PSB0ZXN0X21hc2ssCi0gICAgICAicmVzdWx0aW5nIG1hc2sgaXMgMHgldSwgbm90IDB4JXgiLAotICAgICAgZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sgKHZhbHVlKSwgdGVzdF9tYXNrKTsKLQotICBzdHJpbmcgPSBnc3RfdmFsdWVfc2VyaWFsaXplICh2YWx1ZSk7Ci0gIGZhaWxfaWYgKHN0cmluZyA9PSBOVUxMLCAiY291bGQgbm90IHNlcmlhbGl6ZSBmbGFnc2V0Iik7Ci0KLSAgR1NUX0RFQlVHICgiU2VyaWFsaXplZCBmbGFnc2V0IHRvOiAlcyIsIHN0cmluZyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAodmFsdWUsIHN0cmluZyksCi0gICAgICAiY291bGQgbm90IGRlc2VyaWFsaXplICVzIiwgc3RyaW5nKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X2ZsYWdzICh2YWx1ZSkgPT0gdGVzdF9mbGFncywKLSAgICAgICJyZXN1bHRpbmcgZmxhZ3MgdmFsdWUgaXMgMHgldSwgbm90IDB4JXgsIGZvciBzdHJpbmcgJXMiLAotICAgICAgZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X2ZsYWdzICh2YWx1ZSksIHRlc3RfZmxhZ3MsIHN0cmluZyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrICh2YWx1ZSkgPT0gdGVzdF9tYXNrLAotICAgICAgInJlc3VsdGluZyBtYXNrIGlzIDB4JXUsIG5vdCAweCV4LCBmb3Igc3RyaW5nICVzIiwKLSAgICAgIGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrICh2YWx1ZSksIHRlc3RfbWFzaywgc3RyaW5nKTsKLQotICBnX2ZyZWUgKHN0cmluZyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZsYWdzZXQpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAgR1ZhbHVlIHZhbHVlMiA9IEdfVkFMVUVfSU5JVDsKLSAgR1ZhbHVlIGRlc3QgPSBHX1ZBTFVFX0lOSVQ7Ci0gIGdjaGFyICpzdHJpbmc7Ci0gIEdUeXBlIHRlc3RfZmxhZ3NldF90eXBlOwotICBndWludCB0ZXN0X2ZsYWdzLCB0ZXN0X21hc2s7Ci0KLSAgLyogVGVzdCBzZXJpYWxpc2F0aW9uIG9mIGFic3RyYWN0IHR5cGUgKi8KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX0ZMQUdfU0VUKTsKLQotICB0ZXN0X2ZsYWdzID0gMHhmMWYxOwotICB0ZXN0X21hc2sgPSAweGZmZmY7Ci0KLSAgZ3N0X3ZhbHVlX3NldF9mbGFnc2V0ICgmdmFsdWUsIHRlc3RfZmxhZ3MsIHRlc3RfbWFzayk7Ci0gIHN0cmluZyA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZ2YWx1ZSk7Ci0gIGZhaWxfaWYgKHN0cmluZyA9PSBOVUxMLCAiY291bGQgbm90IHNlcmlhbGl6ZSBmbGFnc2V0Iik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlLCBzdHJpbmcpLAotICAgICAgImNvdWxkIG5vdCBkZXNlcmlhbGl6ZSAlcyIsIHN0cmluZyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFncyAoJnZhbHVlKSA9PSB0ZXN0X2ZsYWdzLAotICAgICAgInJlc3VsdGluZyB2YWx1ZSBpcyAweCV1LCBub3QgMHgleCwgZm9yIHN0cmluZyAlcyIsCi0gICAgICBnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3MgKCZ2YWx1ZSksIHRlc3RfZmxhZ3MsIHN0cmluZyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrICgmdmFsdWUpID09IHRlc3RfbWFzaywKLSAgICAgICJyZXN1bHRpbmcgdmFsdWUgaXMgMHgldSwgbm90IDB4JXgsIGZvciBzdHJpbmcgJXMiLAotICAgICAgZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sgKCZ2YWx1ZSksIHRlc3RfbWFzaywgc3RyaW5nKTsKLQotICBnX2ZyZWUgKHN0cmluZyk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci0KLSAgLyogQ2hlY2sgd2UgY2FuJ3Qgd3JhcCBhIHJhbmRvbSBub24tZmxhZ3MgdHlwZSAqLwotICBBU1NFUlRfQ1JJVElDQUwgKGdzdF9mbGFnc2V0X3JlZ2lzdGVyIChHU1RfVFlQRV9PQkpFQ1QpKTsKLQotICB0ZXN0X2ZsYWdzZXRfdHlwZSA9IGdzdF9mbGFnc2V0X3JlZ2lzdGVyIChHU1RfVFlQRV9TRUVLX0ZMQUdTKTsKLQotICBmYWlsX3VubGVzcyAoZ190eXBlX2lzX2EgKHRlc3RfZmxhZ3NldF90eXBlLCBHU1RfVFlQRV9GTEFHX1NFVCkpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCB0ZXN0X2ZsYWdzZXRfdHlwZSk7Ci0KLSAgdGVzdF9mbGFncyA9Ci0gICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19UUklDS01PREUgfAotICAgICAgR1NUX1NFRUtfRkxBR19UUklDS01PREVfS0VZX1VOSVRTOwotICB0ZXN0X21hc2sgPQotICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFIHwKLSAgICAgIEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFX05PX0FVRElPOwotCi0gIGNoZWNrX2ZsYWdzZXRfbWFza19zZXJpYWxpc2F0aW9uICgmdmFsdWUsIHRlc3RfZmxhZ3MsIHRlc3RfbWFzayk7Ci0gIC8qIENoZWNrIHNlcmlhbGlzYXRpb24gd29ya3Mgd2l0aCB0aGUgZ2VuZXJpYyAnZXhhY3QnIGZsYWcgKi8KLSAgY2hlY2tfZmxhZ3NldF9tYXNrX3NlcmlhbGlzYXRpb24gKCZ2YWx1ZSwgdGVzdF9mbGFncywKLSAgICAgIEdTVF9GTEFHX1NFVF9NQVNLX0VYQUNUKTsKLQotICAvKiBDaGVjayBkZXNlcmlhbGlzYXRpb24gb2YgZmxhZ3NldCBpbiAnZmxhZ3MnIGZvcm0sIHdpdGhvdXQKLSAgICogdGhlIGhleCBzdHJpbmdzIGF0IHRoZSBzdGFydCAqLwotICB0ZXN0X2ZsYWdzID0gR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFOwotICB0ZXN0X21hc2sgPSBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19UUklDS01PREUgfAotICAgICAgR1NUX1NFRUtfRkxBR19UUklDS01PREVfTk9fQVVESU87Ci0gIHN0cmluZyA9IGdfc3RyZHVwICgiK2ZsdXNoK3RyaWNrbW9kZS90cmlja21vZGUtbm8tYXVkaW8iKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsdWUsIHN0cmluZyksCi0gICAgICAiY291bGQgbm90IGRlc2VyaWFsaXplICVzIiwgc3RyaW5nKTsKLQotICBHU1RfREVCVUcgKCJEZXNlcmlhbGl6ZWQgJXMgdG8gMHgleDoweCV4Iiwgc3RyaW5nLAotICAgICAgZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X2ZsYWdzICgmdmFsdWUpLAotICAgICAgZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sgKCZ2YWx1ZSkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3MgKCZ2YWx1ZSkgPT0gdGVzdF9mbGFncywKLSAgICAgICJyZXN1bHRpbmcgZmxhZ3MgdmFsdWUgaXMgMHgldSwgbm90IDB4JXgsIGZvciBzdHJpbmcgJXMiLAotICAgICAgZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X2ZsYWdzICgmdmFsdWUpLCAodGVzdF9mbGFncyAmIHRlc3RfbWFzayksIHN0cmluZyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrICgmdmFsdWUpID09IHRlc3RfbWFzaywKLSAgICAgICJyZXN1bHRpbmcgbWFzayBpcyAweCV1LCBub3QgMHgleCwgZm9yIHN0cmluZyAlcyIsCi0gICAgICBnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfbWFzayAoJnZhbHVlKSwgdGVzdF9tYXNrLCBzdHJpbmcpOwotCi0gIGdfZnJlZSAoc3RyaW5nKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLQotICAvKiBUZXN0IHRoYXQgZml4YXRpbmcgZG9uJ3QtY2FyZSBmaWVsZHMgd29ya3MsIHVzaW5nIG91cgotICAgKiBzdWItdHlwZSBmbGFnc2V0IGZvciBnb29kIG1lYXN1cmUgICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCB0ZXN0X2ZsYWdzZXRfdHlwZSk7Ci0gIGdzdF92YWx1ZV9zZXRfZmxhZ3NldCAoJnZhbHVlLCB0ZXN0X2ZsYWdzLCB0ZXN0X21hc2spOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZml4YXRlICgmZGVzdCwgJnZhbHVlKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ZsYWdzZXRfZmxhZ3MgKCZkZXN0KSA9PSB0ZXN0X2ZsYWdzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrICgmZGVzdCkgPT0gR1NUX0ZMQUdfU0VUX01BU0tfRVhBQ1QpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci0KLSAgLyogSW50ZXJzZWN0aW9uIHRlc3RzICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9GTEFHX1NFVCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgdGVzdF9mbGFnc2V0X3R5cGUpOwotCi0gIC8qIFdlIHdhbnQgQWNjdXJhdGUsIGJ1dCBub3QgU25hcC1CZWZvcmUgKi8KLSAgZ3N0X3ZhbHVlX3NldF9mbGFnc2V0ICgmdmFsdWUsIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUsCi0gICAgICBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIHwgR1NUX1NFRUtfRkxBR19TTkFQX0JFRk9SRSk7Ci0KLSAgLyogVGhpcyBvbmx5IGNhcmVzIHRoYXQgdGhpbmdzIGFyZSBmbHVzaGluZyAqLwotICBnc3RfdmFsdWVfc2V0X2ZsYWdzZXQgKCZ2YWx1ZTIsIEdTVF9TRUVLX0ZMQUdfRkxVU0gsIEdTVF9TRUVLX0ZMQUdfRkxVU0gpOwotCi0gIHRlc3RfZmxhZ3MgPSBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIHwgR1NUX1NFRUtfRkxBR19GTFVTSDsKLSAgdGVzdF9tYXNrID0KLSAgICAgIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUgfCBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19TTkFQX0JFRk9SRTsKLQotICAvKiBHc3RGbGFnU2V0IHNob3VsZCBhbHdheXMgaW50ZXJzZWN0IHdpdGggaXRzZWxmICovCi0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jYW5faW50ZXJzZWN0ICgmdmFsdWUsICZ2YWx1ZSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZ2YWx1ZSwgJnZhbHVlKSk7Ci0KLSAgLyogR3N0RmxhZ1NldCBzdWJ0eXBlIHNob3VsZCBpbnRlcnNlY3Qgd2l0aCBpdHNlbGYgKi8KLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3QgKCZ2YWx1ZTIsICZ2YWx1ZTIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmdmFsdWUyLCAmdmFsdWUyKSk7Ci0KLSAgLyogQ2hlY2sgd2UgY2FuIGludGVyc2VjdCBjdXN0b20gZmxhZ3NldCBzdWJ0eXBlIHdpdGggZmxhZ3NldCAqLwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY2FuX2ludGVyc2VjdCAoJnZhbHVlMiwgJnZhbHVlKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgJnZhbHVlMiwgJnZhbHVlKSk7Ci0KLSAgLyogYW5kIGluIHRoZSBvdGhlciBvcmRlciAqLwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY2FuX2ludGVyc2VjdCAoJnZhbHVlLCAmdmFsdWUyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgJnZhbHVlLCAmdmFsdWUyKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFncyAoJmRlc3QpID09IHRlc3RfZmxhZ3MsCi0gICAgICAicmVzdWx0aW5nIGZsYWdzIHZhbHVlIGlzIDB4JXUsIG5vdCAweCV4IiwKLSAgICAgIGdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFncyAoJmRlc3QpLCB0ZXN0X2ZsYWdzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sgKCZkZXN0KSA9PSB0ZXN0X21hc2ssCi0gICAgICAicmVzdWx0aW5nIG1hc2sgaXMgMHgldSwgbm90IDB4JXgiLAotICAgICAgZ3N0X3ZhbHVlX2dldF9mbGFnc2V0X21hc2sgKCZkZXN0KSwgdGVzdF9tYXNrKTsKLQotICBnc3RfdmFsdWVfc2V0X2ZsYWdzZXQgKCZ2YWx1ZSwKLSAgICAgIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUsIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpOwotICBnc3RfdmFsdWVfc2V0X2ZsYWdzZXQgKCZ2YWx1ZTIsIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUgfCBHU1RfU0VFS19GTEFHX0ZMVVNILAotICAgICAgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSB8IEdTVF9TRUVLX0ZMQUdfU05BUF9CRUZPUkUgfCBHU1RfU0VFS19GTEFHX0ZMVVNIKTsKLSAgLyogQ2hlY2sgdGhhdCBhY2N1cmF0ZSBhbG9uZSBpcyBhIHN1YnNldCBvZiBhY2N1cmF0ZSshc25hcF9iZWZvcmUrZmx1c2gsCi0gICAqIGJ1dCBub3QgdmljZS12ZXJzYSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2lzX3N1YnNldCAoJnZhbHVlLCAmdmFsdWUyKSk7Ci0gIGZhaWxfaWYgKGdzdF92YWx1ZV9pc19zdWJzZXQgKCZ2YWx1ZTIsICZ2YWx1ZSkpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJpbmcpCi17Ci0gIGNvbnN0IGdjaGFyICp0cnlbXSA9IHsKLSAgICAiRHVkZSIsCi0gICAgIkhpLCBJJ20gYSBzdHJpbmciLAotICAgICJ0w7zDvMO8dCEiLAotICAgICJcIlwiIiAgICAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBzdHJpbmcgKi8KLSAgfTsKLSAgZ2NoYXIgKnRtcDsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIGd1aW50IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1NUUklORyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRyeSk7IGkrKykgewotICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnYsIHRyeVtpXSk7Ci0gICAgdG1wID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnYpOwotICAgIGZhaWxfaWYgKHRtcCA9PSBOVUxMLCAiY291bGRuJ3Qgc2VyaWFsaXplOiAlc1xuIiwgdHJ5W2ldKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdiwgdG1wKSwKLSAgICAgICAgImNvdWxkbid0IGRlc2VyaWFsaXplOiAlc1xuIiwgdG1wKTsKLSAgICBnX2ZyZWUgKHRtcCk7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKGdfdmFsdWVfZ2V0X3N0cmluZyAoJnYpLCB0cnlbaV0pLAotICAgICAgICAiXG5zZXJpYWxpemVkICA6ICVzXG5kZXNlcmlhbGl6ZWQ6ICVzIiwgdHJ5W2ldLAotICAgICAgICBnX3ZhbHVlX2dldF9zdHJpbmcgKCZ2KSk7Ci0gIH0KLSAgLyogTlVMTCBzdHJpbmdzIHNob3VsZCBub3QgYmUgc2VyaWFsaXphYmxlICovCi0gIGdfdmFsdWVfc2V0X3N0cmluZyAoJnYsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnYpID09IE5VTEwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVzZXJpYWxpemVfc3RyaW5nKQotewotICBzdHJ1Y3QKLSAgewotICAgIGNvbnN0IGdjaGFyICpmcm9tOwotICAgIGNvbnN0IGdjaGFyICp0bzsKLSAgfSB0ZXN0c1tdID0gewotICAgIHsKLSAgICAiXCJmb29cIiIsICJmb28ifSwgewotICAgICJcImZvb1xcJVwiIiwgImZvbyUifSwgewotICAgICJcIjAxMjM0NTY3ODlfLSsvOi5cIiIsICIwMTIzNDU2Nzg5Xy0rLzouIn0sIHsKLSAgICAiXCJIZWxsb1xcIFdvcmxkXCIiLCAiSGVsbG8gV29ybGQifSwgewotICAgICJcIkhlbGxvXFwgV29ybGQiLCAiXCJIZWxsb1xcIFdvcmxkIn0sIHsKLSAgICAiXCJcXCIsICJcIlxcIn0sIHsKLSAgICAiXCJcXDAiLCAiXCJcXDAifSwgewotICAgICIiLCAiIn0sICAgICAgICAgICAgICAgICAgICAvKiBlbXB0eSBzdHJpbmdzICovCi0gICAgewotICAgICJcIlwiIiwgIiJ9LCAgICAgICAgICAgICAgICAvKiBxdW90ZWQgZW1wdHkgc3RyaW5nIC0+IGVtcHR5IHN0cmluZyAqLwotICAgICAgICAvKiBFeHBlY3RlZCBGQUlMVVJFUzogKi8KLSAgICB7Ci0gICAgIlwiXFwwXCIiLCBOVUxMfSwgICAgICAgICAgIC8qIHVuZmluaXNoZWQgZXNjYXBlZCBjaGFyYWN0ZXIgKi8KLSAgICB7Ci0gICAgIlwiIiwgTlVMTH0sICAgICAgICAgICAgICAgIC8qIHNvbGl0YXJ5IHF1b3RlICovCi0gICAgewotICAgICJcIiBcIiIsIE5VTEx9LCAgICAgICAgICAgICAvKiBzcGFjZXMgbXVzdCBiZSBlc2NhcGVkICovCi0jaWYgMAotICAgICAgICAvKiBGSVhNRSAwLjk6IHRoaXMgdGVzdCBzaG91bGQgZmFpbCwgYnV0IGl0IGRvZXNuJ3QgKi8KLSAgICB7Ci0gICAgInTDvMO8dCIsIE5VTEx9ICAgICAgICAgICAgIC8qIHN0cmluZyB3aXRoIHNwZWNpYWwgY2hhcnMgbXVzdCBiZSBlc2NhcGVkICovCi0jZW5kaWYKLSAgfTsKLSAgZ3VpbnQgaTsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1NUUklORyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRlc3RzKTsgaSsrKSB7Ci0gICAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnYsIHRlc3RzW2ldLmZyb20pKSB7Ci0gICAgICBmYWlsX2lmICh0ZXN0c1tpXS50byA9PSBOVUxMLAotICAgICAgICAgICJJIGdvdCAlcyBpbnN0ZWFkIG9mIGEgZmFpbHVyZSIsIGdfdmFsdWVfZ2V0X3N0cmluZyAoJnYpKTsKLSAgICAgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoZ192YWx1ZV9nZXRfc3RyaW5nICgmdiksIHRlc3RzW2ldLnRvKSwKLSAgICAgICAgICAiXG53YW50ZWQ6ICVzXG5nb3QgICAgOiAlcyIsIHRlc3RzW2ldLnRvLCBnX3ZhbHVlX2dldF9zdHJpbmcgKCZ2KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZhaWxfaWYgKHRlc3RzW2ldLnRvICE9IE5VTEwsICJmYWlsZWQsIGJ1dCB3YW50ZWQ6ICVzIiwgdGVzdHNbaV0udG8pOwotICAgIH0KLSAgfQotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfY29tcGFyZSkKLXsKLSAgR1ZhbHVlIHZhbHVlMSA9IHsgMCB9OwotICBHVmFsdWUgdmFsdWUyID0geyAwIH07Ci0gIEdWYWx1ZSB0bXAgPSB7IDAgfTsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBhbGxvY19wYXJhbXMgPSB7IDAgfTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTEsIEdfVFlQRV9JTlQpOwotICBnX3ZhbHVlX3NldF9pbnQgKCZ2YWx1ZTEsIDEwKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUyLCBHX1RZUEVfSU5UKTsKLSAgZ192YWx1ZV9zZXRfaW50ICgmdmFsdWUyLCAyMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTIpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMSwgR19UWVBFX0RPVUJMRSk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnZhbHVlMSwgMTApOwotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTIsIEdfVFlQRV9ET1VCTEUpOwotICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2YWx1ZTIsIDIwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUyLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUxLCBHX1RZUEVfU1RSSU5HKTsKLSAgZ192YWx1ZV9zZXRfc3RyaW5nICgmdmFsdWUxLCAiYSIpOwotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTIsIEdfVFlQRV9TVFJJTkcpOwotICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZ2YWx1ZTIsICJiIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgLyogVGVzdCBzb21lIE5VTEwgc3RyaW5nIGNvbXBhcmlzb25zICovCi0gIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZhbHVlMiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX1VOT1JERVJFRCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX1VOT1JERVJFRCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7Ci0KLSAgLyogY29tcGFyaW5nIDIvMyB3aXRoIDMvNCAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnZhbHVlMSwgMiwgMyk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsdWUyLCAzLCA0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUyLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7Ci0KLSAgLyogY29tcGFyaW5nIC00LzUgd2l0aCAyLy0zICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMSwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsdWUxLCAtNCwgNSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsdWUyLCAyLCAtMyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0xFU1NfVEhBTik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0dSRUFURVJfVEhBTik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTIpOwotCi0gIC8qIGNvbXBhcmluZyAxMC8xMDAgd2l0aCAyMDAvMjAwMCAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnZhbHVlMSwgMTAsIDEwMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsdWUyLCAyMDAsIDIwMDApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTEsICZ2YWx1ZTIpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUyKTsKLQotICAvKiBjb21wYXJpbmcgLTQvNSB3aXRoIDIvLTMgKi8KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUxLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ2YWx1ZTEsIC00LCA1KTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUyLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ2YWx1ZTIsIDIsIC0zKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfTEVTU19USEFOKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUyLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfR1JFQVRFUl9USEFOKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7Ci0KLSAgLyogQ2hlY2sgdGhhdCBsaXN0cyBhcmUgZXF1YWwgcmVnYXJkbGVzcyBvZiBvcmRlciAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTEsIEdTVF9UWVBFX0xJU1QpOwotICBnX3ZhbHVlX2luaXQgKCZ0bXAsIEdfVFlQRV9JTlQpOwotICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDEpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOwotICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDIpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOwotICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDMpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOwotICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDQpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfTElTVCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgNCk7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMyk7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMik7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMSk7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfRVFVQUwsCi0gICAgICAidmFsdWUgbGlzdHMgd2l0aCBkaWZmZXJlbnQgb3JkZXIgd2VyZSBub3QgZXF1YWwgd2hlbiB0aGV5IHNob3VsZCBiZSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTEsICZ2YWx1ZTEpID09IEdTVF9WQUxVRV9FUVVBTCwKLSAgICAgICJ2YWx1ZSBsaXN0cyB3aXRoIHNhbWUgb3JkZXIgd2VyZSBub3QgZXF1YWwgd2hlbiB0aGV5IHNob3VsZCBiZSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTIsICZ2YWx1ZTIpID09IEdTVF9WQUxVRV9FUVVBTCwKLSAgICAgICJ2YWx1ZSBsaXN0cyB3aXRoIHNhbWUgb3JkZXIgd2VyZSBub3QgZXF1YWwgd2hlbiB0aGV5IHNob3VsZCBiZSIpOwotCi0gIC8qIENhcnJ5IG92ZXIgdGhlIGxpc3RzIHRvIHRoaXMgbmV4dCBjaGVjazogKi8KLSAgLyogTGlzdHMgd2l0aCBkaWZmZXJlbnQgc2l6ZXMgYXJlIHVuZXF1YWwgKi8KLSAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCAxKTsKLSAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmdmFsdWUyLCAmdG1wKTsKLQotICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMLAotICAgICAgIlZhbHVlIGxpc3RzIHdpdGggZGlmZmVyZW50IHNpemUgd2VyZSBlcXVhbCB3aGVuIHRoZXkgc2hvdWxkbid0IGJlIik7Ci0KLSAgLyogQ2Fycnkgb3ZlciB0aGUgbGlzdHMgdG8gdGhpcyBuZXh0IGNoZWNrOiAqLwotICAvKiBMaXN0cyB3aXRoIHNhbWUgc2l6ZSBidXQgbGlzdDEgY29udGFpbnMgb25lIG1vcmUgZWxlbWVudCBub3QgaW4gbGlzdDIgKi8KLSAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCA1KTsKLSAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmdmFsdWUxLCAmdG1wKTsKLQotICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMLAotICAgICAgIlZhbHVlIGxpc3RzIHdpdGggZGlmZmVyZW50IGVsZW1lbnRzIHdlcmUgZXF1YWwgd2hlbiB0aGV5IHNob3VsZG4ndCBiZSIpOwotICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMLAotICAgICAgIlZhbHVlIGxpc3RzIHdpdGggZGlmZmVyZW50IGVsZW1lbnRzIHdlcmUgZXF1YWwgd2hlbiB0aGV5IHNob3VsZG4ndCBiZSIpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUyKTsKLSAgZ192YWx1ZV91bnNldCAoJnRtcCk7Ci0KLSAgLyogQXJyYXlzIGFyZSBvbmx5IGVxdWFsIHdoZW4gaW4gdGhlIHNhbWUgb3JkZXIgKi8KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUxLCBHU1RfVFlQRV9BUlJBWSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnRtcCwgR19UWVBFX0lOVCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMSk7Ci0gIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOwotICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDIpOwotICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmdmFsdWUxLCAmdG1wKTsKLSAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCAzKTsKLSAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJnZhbHVlMSwgJnRtcCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgNCk7Ci0gIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTEsICZ0bXApOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfQVJSQVkpOwotICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDQpOwotICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmdmFsdWUyLCAmdG1wKTsKLSAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCAzKTsKLSAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnRtcCwgMik7Ci0gIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZ2YWx1ZTIsICZ0bXApOwotICBnX3ZhbHVlX3NldF9pbnQgKCZ0bXAsIDEpOwotICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmdmFsdWUyLCAmdG1wKTsKLQotICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMLAotICAgICAgIlZhbHVlIGFycmF5cyB3aXRoIGRpZmZlcmVudCBvcmRlciB3ZXJlIGVxdWFsIHdoZW4gdGhleSBzaG91bGRuJ3QgYmUiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwsCi0gICAgICAiSWRlbnRpY2FsIHZhbHVlIGFycmF5cyB3ZXJlIG5vdCBlcXVhbCB3aGVuIHRoZXkgc2hvdWxkIGJlIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMiwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX0VRVUFMLAotICAgICAgIklkZW50aWNhbCB2YWx1ZSBhcnJheXMgd2VyZSBub3QgZXF1YWwgd2hlbiB0aGV5IHNob3VsZCBiZSIpOwotCi0gIC8qIENhcnJ5IG92ZXIgdGhlIGFycmF5cyB0byB0aGlzIG5leHQgY2hlY2s6ICovCi0gIC8qIEFycmF5cyB3aXRoIGRpZmZlcmVudCBzaXplcyBhcmUgdW5lcXVhbCAqLwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUyKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUyLCBHU1RfVFlQRV9BUlJBWSk7Ci0gIGdfdmFsdWVfY29weSAoJnZhbHVlMSwgJnZhbHVlMik7Ci0KLSAgZ192YWx1ZV9zZXRfaW50ICgmdG1wLCAxKTsKLSAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJnZhbHVlMiwgJnRtcCk7Ci0KLSAgZmFpbF9pZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTEsICZ2YWx1ZTIpID09IEdTVF9WQUxVRV9FUVVBTCwKLSAgICAgICJWYWx1ZSBhcnJheXMgd2l0aCBkaWZmZXJlbnQgc2l6ZSB3ZXJlIGVxdWFsIHdoZW4gdGhleSBzaG91bGRuJ3QgYmUiKTsKLSAgLyogb3JkZXIgc2hvdWxkIG5vdCBtYXR0ZXIgKi8KLSAgZmFpbF9pZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTIsICZ2YWx1ZTEpID09IEdTVF9WQUxVRV9FUVVBTCwKLSAgICAgICJWYWx1ZSBhcnJheXMgd2l0aCBkaWZmZXJlbnQgc2l6ZSB3ZXJlIGVxdWFsIHdoZW4gdGhleSBzaG91bGRuJ3QgYmUiKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ0bXApOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMSwgR1NUX1RZUEVfQklUTUFTSyk7Ci0gIGdzdF92YWx1ZV9zZXRfYml0bWFzayAoJnZhbHVlMSwgMHgxMjMpOwotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZTIsIEdTVF9UWVBFX0JJVE1BU0spOwotICBnc3RfdmFsdWVfc2V0X2JpdG1hc2sgKCZ2YWx1ZTIsIDB4MzIxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUyKSA9PSBHU1RfVkFMVUVfVU5PUkRFUkVEKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUyLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfVU5PUkRFUkVEKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmdmFsdWUxLCAmdmFsdWUxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUxKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7Ci0KLSAgLyogQ2hlY2sgdGhhdCB3ZSBjYW4gY29tcGFyZSBvYmplY3RzICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMSwgR1NUX1RZUEVfQklOKTsKLSAgZ192YWx1ZV90YWtlX29iamVjdCAoJnZhbHVlMSwgZ3N0X2Jpbl9uZXcgKE5VTEwpKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUyLCBHU1RfVFlQRV9CSU4pOwotICBnX3ZhbHVlX3Rha2Vfb2JqZWN0ICgmdmFsdWUyLCBnc3RfYmluX25ldyAoTlVMTCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTEsICZ2YWx1ZTIpID09IEdTVF9WQUxVRV9VTk9SREVSRUQpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZ2YWx1ZTEsICZ2YWx1ZTEpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUyKTsKLQotICAvKiBDaGVjayB0aGF0IHdlIGNhbiBjb21wYXJlIGFsbG9jYXRpb24gcGFyYW1zICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMSwgR1NUX1RZUEVfQUxMT0NBVElPTl9QQVJBTVMpOwotICBnX3ZhbHVlX3NldF9ib3hlZCAoJnZhbHVlMSwgJmFsbG9jX3BhcmFtcyk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfQUxMT0NBVElPTl9QQVJBTVMpOwotICBhbGxvY19wYXJhbXMuYWxpZ24gPSAxOwotICBnX3ZhbHVlX3NldF9ib3hlZCAoJnZhbHVlMiwgJmFsbG9jX3BhcmFtcyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMikgPT0gR1NUX1ZBTFVFX1VOT1JERVJFRCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnZhbHVlMSwgJnZhbHVlMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZTIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZhbHVlX2ludGVyc2VjdCkKLXsKLSAgR1ZhbHVlIGRlc3QgPSB7IDAgfTsKLSAgR1ZhbHVlIHNyYzEgPSB7IDAgfTsKLSAgR1ZhbHVlIHNyYzIgPSB7IDAgfTsKLSAgR1ZhbHVlIGl0ZW0gPSB7IDAgfTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9JTlQpOwotICBnX3ZhbHVlX3NldF9pbnQgKCZzcmMxLCAxMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdfVFlQRV9JTlQpOwotICBnX3ZhbHVlX3NldF9pbnQgKCZzcmMyLCAyMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX1NUUklORyk7Ci0gIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZzcmMxLCAiWVVZMiIpOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9MSVNUKTsKLSAgZ192YWx1ZV9pbml0ICgmaXRlbSwgR19UWVBFX1NUUklORyk7Ci0gIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZpdGVtLCAiWVVZMiIpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZzcmMyLCAmaXRlbSk7Ci0gIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZpdGVtLCAiSTQyMCIpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZzcmMyLCAmaXRlbSk7Ci0gIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZpdGVtLCAiQUJDRCIpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZzcmMyLCAmaXRlbSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9pbnRlcnNlY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfU1RSSU5HICgmZGVzdCkpOwotICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKGdfdmFsdWVfZ2V0X3N0cmluZyAoJmRlc3QpLCAiWVVZMiIpKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfc3VidHJhY3RfaW50KQotewotICBHVmFsdWUgZGVzdCA9IHsgMCB9OwotICBHVmFsdWUgc3JjMSA9IHsgMCB9OwotICBHVmFsdWUgc3JjMiA9IHsgMCB9OwotICBjb25zdCBHVmFsdWUgKnRtcDsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIC8qICBpbnQgPC0+IGludAotICAgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0lOVCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnNyYzEsIDEwKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR19UWVBFX0lOVCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnNyYzIsIDIwKTsKLSAgLyogc3VidHJhY3QgYXMgaW4gc2V0cywgcmVzdWx0IGlzIDEwICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0KLSAgLyogc2FtZSB2YWx1ZXMsIHlpZWxkcyBlbXB0eSBzZXQgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qICBpbnQgPC0+IGludF9yYW5nZQotICAgKi8KLQotICAvKiB3b3VsZCB5aWVsZCBhbiBlbXB0eSBzZXQgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0lOVCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnNyYzEsIDEwKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMyLCAwLCAyMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotCi0gIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGNyZWF0ZSBhIGxpc3Qgb2YgdHdvIHJhbmdlcy4gKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0xJU1QpOwotICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAwKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHRtcCkgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHRtcCkgPT0gOSk7Ci0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAodG1wKSA9PSAxMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHRtcCkgPT0gMjApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIGJvcmRlciBjYXNlIDEsIGVtcHR5IHNldCAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UKTsKLSAgZ192YWx1ZV9zZXRfaW50ICgmc3JjMSwgMTApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzIsIDEwLCAyMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotCi0gIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGNyZWF0ZSBhIG5ldyByYW5nZS4gKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKCZkZXN0KSA9PSAyMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogYm9yZGVyIGNhc2UgMiwgZW1wdHkgc2V0ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9JTlQpOwotICBnX3ZhbHVlX3NldF9pbnQgKCZzcmMxLCAyMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0KLSAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQgY3JlYXRlIGEgbmV3IHJhbmdlLiAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoJmRlc3QpID09IDEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoJmRlc3QpID09IDE5KTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjYXNlIDMsIHZhbGlkIHNldCAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UKTsKLSAgZ192YWx1ZV9zZXRfaW50ICgmc3JjMSwgMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UICgmZGVzdCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0KLSAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQga2VlcCB0aGUgcmFuZ2UuICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qICBpbnRfcmFuZ2UgPC0+IGludF9yYW5nZQotICAgKi8KLQotICAvKiBzYW1lIHJhbmdlLCBlbXB0eSBzZXQgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMxLCAxMCwgMjApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzIsIDEwLCAyMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogbm9uIG92ZXJsYXBwaW5nIHJhbmdlcyAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAyMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMzAsIDQwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKCZkZXN0KSA9PSAyMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoJmRlc3QpID09IDMwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoJmRlc3QpID09IDQwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjb21wbGV0ZWx5IG92ZXJsYXBwaW5nIHJhbmdlcyAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAyMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTAsIDMwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIC8qIHRoZSBvdGhlciB3YXkgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKCZkZXN0KSA9PSAyMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKCZkZXN0KSA9PSAzMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogcGFydGlhbGx5IG92ZXJsYXBwaW5nIHJhbmdlcyAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAyMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTUsIDMwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKCZkZXN0KSA9PSAxNCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoJmRlc3QpID09IDIxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoJmRlc3QpID09IDMwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjcmVhdGUgYSBob2xlIHsgaW50X3JhbmdlLCBpbnRfcmFuZ2UgfSAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTUsIDIwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0xJU1QpOwotICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAwKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHRtcCkgPT0gMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICh0bXApID09IDE0KTsKLSAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICh0bXApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICh0bXApID09IDIxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAodG1wKSA9PSAzMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogY3JlYXRlIGEgaG9sZSwgeyBpbnQsIGludCB9ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMSwgMTAsIDMwKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMyLCAxMSwgMjkpOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfTElTVCk7Ci0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19JTlQgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9pbnQgKHRtcCkgPT0gMTApOwotICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAxKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UICh0bXApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfaW50ICh0bXApID09IDMwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICAvKiB0aGUgb3RoZXIgd2F5ICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjcmVhdGUgYSBob2xlLCB7IGludCwgaW50X3JhbmdlIH0gKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZzcmMxLCAxMCwgMzApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzIsIDExLCAyOCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9MSVNUKTsKLSAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0lOVCAodG1wKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludCAodG1wKSA9PSAxMCk7Ci0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAodG1wKSA9PSAyOSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHRtcCkgPT0gMzApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIC8qIHRoZSBvdGhlciB3YXkgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIGNyZWF0ZSBhIGhvbGUsIHsgaW50X3JhbmdlLCBpbnQgfSAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmc3JjMiwgMTIsIDI5KTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0xJU1QpOwotICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAwKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHRtcCkgPT0gMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICh0bXApID09IDExKTsKLSAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0lOVCAodG1wKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludCAodG1wKSA9PSAzMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfc3VidHJhY3RfaW50NjQpCi17Ci0gIEdWYWx1ZSBkZXN0ID0geyAwIH07Ci0gIEdWYWx1ZSBzcmMxID0geyAwIH07Ci0gIEdWYWx1ZSBzcmMyID0geyAwIH07Ci0gIGNvbnN0IEdWYWx1ZSAqdG1wOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgLyogIGludDY0IDwtPiBpbnQ2NAotICAgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0lOVDY0KTsKLSAgZ192YWx1ZV9zZXRfaW50NjQgKCZzcmMxLCAxMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdfVFlQRV9JTlQ2NCk7Ci0gIGdfdmFsdWVfc2V0X2ludDY0ICgmc3JjMiwgMjApOwotICAvKiBzdWJ0cmFjdCBhcyBpbiBzZXRzLCByZXN1bHQgaXMgMTAgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmZGVzdCwgJnNyYzEpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLQotICAvKiBzYW1lIHZhbHVlcywgeWllbGRzIGVtcHR5IHNldCAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogIGludDY0IDwtPiBpbnQ2NF9yYW5nZQotICAgKi8KLQotICAvKiB3b3VsZCB5aWVsZCBhbiBlbXB0eSBzZXQgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0lOVDY0KTsKLSAgZ192YWx1ZV9zZXRfaW50NjQgKCZzcmMxLCAxMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDAsIDIwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0KLSAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQgY3JlYXRlIGEgbGlzdCBvZiB0d28gcmFuZ2VzLiAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfTElTVCk7Ci0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh0bXApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHRtcCkgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAodG1wKSA9PSA5KTsKLSAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAodG1wKSA9PSAxMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAodG1wKSA9PSAyMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogYm9yZGVyIGNhc2UgMSwgZW1wdHkgc2V0ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdfVFlQRV9JTlQ2NCk7Ci0gIGdfdmFsdWVfc2V0X2ludDY0ICgmc3JjMSwgMTApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCZzcmMyLCAxMCwgMjApOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLQotICAvKiBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQsIHNob3VsZCBjcmVhdGUgYSBuZXcgcmFuZ2UuICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoJmRlc3QpID09IDExKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIGJvcmRlciBjYXNlIDIsIGVtcHR5IHNldCAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UNjQpOwotICBnX3ZhbHVlX3NldF9pbnQ2NCAoJnNyYzEsIDIwKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMTAsIDIwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0KLSAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQgY3JlYXRlIGEgbmV3IHJhbmdlLiAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAoJmRlc3QpID09IDE5KTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjYXNlIDMsIHZhbGlkIHNldCAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfSU5UNjQpOwotICBnX3ZhbHVlX3NldF9pbnQ2NCAoJnNyYzEsIDApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCZzcmMyLCAxMCwgMjApOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19JTlQ2NCAoJmRlc3QpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZkZXN0LCAmc3JjMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotCi0gIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGtlZXAgdGhlIHJhbmdlLiAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAoJmRlc3QpID09IDIwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiAgaW50NjRfcmFuZ2UgPC0+IGludDY0X3JhbmdlCi0gICAqLwotCi0gIC8qIHNhbWUgcmFuZ2UsIGVtcHR5IHNldCAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCZzcmMxLCAxMCwgMjApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCZzcmMyLCAxMCwgMjApOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIG5vbiBvdmVybGFwcGluZyByYW5nZXMgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMSwgMTAsIDIwKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMzAsIDQwKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKCZkZXN0KSA9PSAyMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKCZkZXN0KSA9PSAzMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAoJmRlc3QpID09IDQwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjb21wbGV0ZWx5IG92ZXJsYXBwaW5nIHJhbmdlcyAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCZzcmMxLCAxMCwgMjApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2UgKCZzcmMyLCAxMCwgMzApOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKCZkZXN0KSA9PSAyMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAoJmRlc3QpID09IDMwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgcmFuZ2VzICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzEsIDEwLCAyMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDE1LCAzMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoJmRlc3QpID09IDEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMTQpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIC8qIHRoZSBvdGhlciB3YXkgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICgmZGVzdCkgPT0gMjEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKCZkZXN0KSA9PSAzMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogY3JlYXRlIGEgaG9sZSB7IGludDY0X3JhbmdlLCBpbnQ2NF9yYW5nZSB9ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDE1LCAyMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9MSVNUKTsKLSAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAodG1wKSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAodG1wKSA9PSAxNCk7Ci0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVDY0X1JBTkdFICh0bXApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4gKHRtcCkgPT0gMjEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9tYXggKHRtcCkgPT0gMzApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIC8qIHRoZSBvdGhlciB3YXkgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIGNyZWF0ZSBhIGhvbGUsIHsgaW50NjQsIGludDY0IH0gKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMSwgMTAsIDMwKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmc3JjMiwgMTEsIDI5KTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0xJU1QpOwotICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAwKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UNjQgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnX3ZhbHVlX2dldF9pbnQ2NCAodG1wKSA9PSAxMCk7Ci0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19JTlQ2NCAodG1wKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludDY0ICh0bXApID09IDMwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICAvKiB0aGUgb3RoZXIgd2F5ICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjcmVhdGUgYSBob2xlLCB7IGludDY0LCBpbnQ2NF9yYW5nZSB9ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDExLCAyOCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9MSVNUKTsKLSAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0lOVDY0ICh0bXApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfaW50NjQgKHRtcCkgPT0gMTApOwotICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAxKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlQ2NF9SQU5HRSAodG1wKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICh0bXApID09IDI5KTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICh0bXApID09IDMwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICAvKiB0aGUgb3RoZXIgd2F5ICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjcmVhdGUgYSBob2xlLCB7IGludDY0X3JhbmdlLCBpbnQ2NCB9ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzEsIDEwLCAzMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZSAoJnNyYzIsIDEyLCAyOSk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9MSVNUKTsKLSAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAodG1wKSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAodG1wKSA9PSAxMSk7Ci0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19JTlQ2NCAodG1wKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdfdmFsdWVfZ2V0X2ludDY0ICh0bXApID09IDMwKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICAvKiB0aGUgb3RoZXIgd2F5ICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGUpCi17Ci0gIEdWYWx1ZSBkZXN0ID0geyAwIH07Ci0gIEdWYWx1ZSBzcmMxID0geyAwIH07Ci0gIEdWYWx1ZSBzcmMyID0geyAwIH07Ci0gIGNvbnN0IEdWYWx1ZSAqdG1wOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgLyogIGRvdWJsZSA8LT4gZG91YmxlCi0gICAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfRE9VQkxFKTsKLSAgZ192YWx1ZV9zZXRfZG91YmxlICgmc3JjMSwgMTAuMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdfVFlQRV9ET1VCTEUpOwotICBnX3ZhbHVlX3NldF9kb3VibGUgKCZzcmMyLCAyMC4wKTsKLSAgLyogc3VidHJhY3QgYXMgaW4gc2V0cywgcmVzdWx0IGlzIDEwICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0KLSAgLyogc2FtZSB2YWx1ZXMsIHlpZWxkcyBlbXB0eSBzZXQgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qICBkb3VibGUgPC0+IGRvdWJsZV9yYW5nZQotICAgKi8KLQotICAvKiB3b3VsZCB5aWVsZCBhbiBlbXB0eSBzZXQgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0RPVUJMRSk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnNyYzEsIDEwLjApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzIsIDAuMCwgMjAuMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotCi0gIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgd2UgY2Fubm90IGNyZWF0ZSBvcGVuIHJhbmdlcwotICAgKiBzbyB0aGUgcmVzdWx0IGlzIHRoZSByYW5nZSBhZ2FpbiAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDAuMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXggKCZkZXN0KSA9PSAyMC4wKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBib3JkZXIgY2FzZSAxLCBlbXB0eSBzZXQgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0RPVUJMRSk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnNyYzEsIDEwLjApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzIsIDEwLjAsIDIwLjApOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLQotICAvKiBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQsIHNob3VsZCBrZWVwIHNhbWUgcmFuZ2UgYXMKLSAgICogd2UgZG9uJ3QgaGF2ZSBvcGVuIHJhbmdlcy4gKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMC4wKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoJmRlc3QpID09IDIwLjApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIGJvcmRlciBjYXNlIDIsIGVtcHR5IHNldCAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHX1RZUEVfRE9VQkxFKTsKLSAgZ192YWx1ZV9zZXRfZG91YmxlICgmc3JjMSwgMjAuMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMiwgMTAuMCwgMjAuMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotCi0gIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGtlZXAgc2FtZSByYW5nZSBhcwotICAgKiB3ZSBkb24ndCBoYXZlIG9wZW4gcmFuZ2VzLiAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDEwLjApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjAuMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogY2FzZSAzLCB2YWxpZCBzZXQgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR19UWVBFX0RPVUJMRSk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnNyYzEsIDAuMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMiwgMTAuMCwgMjAuMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0RPVUJMRSAoJmRlc3QpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZkZXN0LCAmc3JjMSkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotCi0gIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGtlZXAgdGhlIHJhbmdlLiAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDEwLjApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjAuMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogIGRvdWJsZV9yYW5nZSA8LT4gZG91YmxlX3JhbmdlCi0gICAqLwotCi0gIC8qIENoZWNrIGVxdWFsaXR5ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMSwgMTAuMCwgMjAuMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMiwgMTAuMCwgMTUuMCk7Ci0gIC8qIFRoZXkgYXJlIG5vdCBlcXVhbCAoaGlnaGVyIGJvdW5kIGlzIGRpZmZlcmVudCAqLwotICBmYWlsX2lmIChnc3RfdmFsdWVfY29tcGFyZSAoJnNyYzEsICZzcmMyKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIC8qIFRoZXkgYXJlIG5vdCBlcXVhbCAobG93ZXIgYm91bmQgaXMgZGlmZmVyZW50ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMSwgNS4wLCAxNS4wKTsKLSAgZmFpbF9pZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZzcmMxLCAmc3JjMikgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICAvKiBBbmQgZmluYWxseSBjaGVjayBlcXVhbGl0eSAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzEsIDEwLjAsIDE1LjApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZzcmMxLCAmc3JjMikgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogc2FtZSByYW5nZSwgZW1wdHkgc2V0ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMSwgMTAuMCwgMjAuMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMiwgMTAuMCwgMjAuMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogbm9uIG92ZXJsYXBwaW5nIHJhbmdlcyAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzEsIDEwLjAsIDIwLjApOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9ET1VCTEVfUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZSAoJnNyYzIsIDMwLjAsIDQwLjApOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDEwLjApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gMjAuMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbiAoJmRlc3QpID09IDMwLjApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICgmZGVzdCkgPT0gNDAuMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogY29tcGxldGVseSBvdmVybGFwcGluZyByYW5nZXMgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMxLCAxMC4wLCAyMC4wKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMyLCAxMC4wLCAzMC4wKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIC8qIHRoZSBvdGhlciB3YXkgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKCZkZXN0KSA9PSAyMC4wKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoJmRlc3QpID09IDMwLjApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIHBhcnRpYWxseSBvdmVybGFwcGluZyByYW5nZXMgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMxLCAxMC4wLCAyMC4wKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRE9VQkxFX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9kb3VibGVfcmFuZ2UgKCZzcmMyLCAxNS4wLCAzMC4wKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKCZkZXN0KSA9PSAxMC4wKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoJmRlc3QpID09IDE1LjApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIC8qIHRoZSBvdGhlciB3YXkgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKCZkZXN0KSA9PSAyMC4wKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heCAoJmRlc3QpID09IDMwLjApOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIGNyZWF0ZSBhIGhvbGUgeyBkb3VibGVfcmFuZ2UsIGRvdWJsZV9yYW5nZSB9ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMSwgMTAuMCwgMzAuMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0RPVUJMRV9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZG91YmxlX3JhbmdlICgmc3JjMiwgMTUuMCwgMjAuMCk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9MSVNUKTsKLSAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICgmZGVzdCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfRE9VQkxFX1JBTkdFICh0bXApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWluICh0bXApID09IDEwLjApOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9kb3VibGVfcmFuZ2VfbWF4ICh0bXApID09IDE1LjApOwotICB0bXAgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKCZkZXN0LCAxKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19ET1VCTEVfUkFOR0UgKHRtcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9taW4gKHRtcCkgPT0gMjAuMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2RvdWJsZV9yYW5nZV9tYXggKHRtcCkgPT0gMzAuMCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBhcml0aG1ldGljIHN1YnRyYWN0aW9uIG9mIGZyYWN0aW9ucyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb24pCi17Ci0gIEdWYWx1ZSByZXN1bHQgPSB7IDAgfTsKLSAgR1ZhbHVlIHNyYzEgPSB7IDAgfTsKLSAgR1ZhbHVlIHNyYzIgPSB7IDAgfTsKLQotICAvKiBTdWJ0cmFjdCAxLzQgZnJvbSAxLzIgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGdfdmFsdWVfaW5pdCAoJnJlc3VsdCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMSwgMSwgMik7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzcmMyLCAxLCA0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCAoJnJlc3VsdCwgJnNyYzEsICZzcmMyKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yICgmcmVzdWx0KSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZyZXN1bHQpID09IDQpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotICBnX3ZhbHVlX3Vuc2V0ICgmcmVzdWx0KTsKLQotICAvKiBTdWJ0cmFjdCAxLzEyIGZyb20gNy84ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnX3ZhbHVlX2luaXQgKCZyZXN1bHQsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnNyYzEsIDcsIDgpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMiwgMSwgMTIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0ICgmcmVzdWx0LCAmc3JjMSwgJnNyYzIpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCZyZXN1bHQpID09IDE5KTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZyZXN1bHQpID09IDI0KTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLSAgZ192YWx1ZV91bnNldCAoJnJlc3VsdCk7Ci0KLSAgLyogU3VidHJhY3QgMTIvMTMgZnJvbSA0LzMgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGdfdmFsdWVfaW5pdCAoJnJlc3VsdCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMSwgNCwgMyk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzcmMyLCAxMiwgMTMpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0ICgmcmVzdWx0LCAmc3JjMSwgJnNyYzIpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCZyZXN1bHQpID09IDE2KTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZyZXN1bHQpID09IDM5KTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLSAgZ192YWx1ZV91bnNldCAoJnJlc3VsdCk7Ci0KLSAgLyogU3VidHJhY3QgMS8xMiBmcm9tIDcvOCAqLwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3Qgc2V0IHN1YnRyYWN0aW9uIG9wZXJhdGlvbnMgb24gZnJhY3Rpb24gcmFuZ2VzICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92YWx1ZV9zdWJ0cmFjdF9mcmFjdGlvbl9yYW5nZSkKLXsKLSAgR1ZhbHVlIGRlc3QgPSB7IDAgfTsKLSAgR1ZhbHVlIHNyYzEgPSB7IDAgfTsKLSAgR1ZhbHVlIHNyYzIgPSB7IDAgfTsKLSAgR1ZhbHVlIGNtcCA9IHsgMCB9OwotICBjb25zdCBHVmFsdWUgKnRtcDsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIC8qIFZhbHVlIGZvciB0ZXN0cyAqLwotICBnX3ZhbHVlX2luaXQgKCZjbXAsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLQotICAvKiAgZnJhY3Rpb24gPC0+IGZyYWN0aW9uCi0gICAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzcmMxLCAxMCwgMSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnNyYzIsIDIwLCAxKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnNyYzEsIDEwLCAxKTsKLQotICAvKiBzdWJ0cmFjdCBhcyBpbiBzZXRzLCByZXN1bHQgaXMgMTAgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmZGVzdCwgJnNyYzEpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLQotICAvKiBzYW1lIHZhbHVlcywgeWllbGRzIGVtcHR5IHNldCAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgLyogIGZyYWN0aW9uIDwtPiBmcmFjdGlvbl9yYW5nZQotICAgKi8KLQotICAvKiB3b3VsZCB5aWVsZCBhbiBlbXB0eSBzZXQgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMSwgMTAsIDEpOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzIsIDAsIDEsIDIwLCAxKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0KLSAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCB3ZSBjYW5ub3QgY3JlYXRlIG9wZW4gcmFuZ2VzCi0gICAqIHNvIHRoZSByZXN1bHQgaXMgdGhlIHJhbmdlIGFnYWluICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDAsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICgmZGVzdCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMjAsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICgmZGVzdCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBib3JkZXIgY2FzZSAxLCBlbXB0eSBzZXQgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjMSwgMTAsIDEpOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzIsIDEwLCAxLCAyMCwgMSk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gRkFMU0UpOwotCi0gIC8qIGFuZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgc2hvdWxkIGtlZXAgc2FtZSByYW5nZSBhcwotICAgKiB3ZSBkb24ndCBoYXZlIG9wZW4gcmFuZ2VzLiAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAxMCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKCZkZXN0KSwKLSAgICAgICAgICAmY21wKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAyMCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKCZkZXN0KSwKLSAgICAgICAgICAmY21wKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIGNhc2UgMiwgdmFsaWQgc2V0ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnNyYzEsIDAsIDEpOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzIsIDEwLCAxLCAyMCwgMSk7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMxKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0KLSAgLyogYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBzaG91bGQga2VlcCB0aGUgcmFuZ2UuICovCi0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMyLCAmc3JjMSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMyKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qICBmcmFjdGlvbl9yYW5nZSA8LT4gZnJhY3Rpb25fcmFuZ2UKLSAgICovCi0KLSAgLyogc2FtZSByYW5nZSwgZW1wdHkgc2V0ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmc3JjMSwgMTAsIDIsIDIwLCAyKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMyLCAxMCwgMiwgMjAsIDIpOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIG5vbiBvdmVybGFwcGluZyByYW5nZXMgKi8KLSAgZ192YWx1ZV9pbml0ICgmc3JjMSwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMxLCAxMCwgMiwgMTAsIDEpOwotICBnX3ZhbHVlX2luaXQgKCZzcmMyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzIsIDMwLCAyLCA0MCwgMik7Ci0gIHJldCA9IGdzdF92YWx1ZV9zdWJ0cmFjdCAoJmRlc3QsICZzcmMxLCAmc3JjMik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZjbXAsIDUsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICgmZGVzdCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMTAsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICgmZGVzdCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIC8qIHRoZSBvdGhlciB3YXkgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMTUsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICgmZGVzdCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMjAsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICgmZGVzdCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBjb21wbGV0ZWx5IG92ZXJsYXBwaW5nIHJhbmdlcyAqLwotICBnX3ZhbHVlX2luaXQgKCZzcmMxLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2VfZnVsbCAoJnNyYzEsIDEwLCAxLCAyMCwgMSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnNyYzIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmc3JjMiwgMTAsIDEsIDMwLCAxKTsKLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzEsICZzcmMyKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBGQUxTRSk7Ci0gIC8qIHRoZSBvdGhlciB3YXkgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmZGVzdCwgJnNyYzIsICZzcmMxKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMjAsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWluICgmZGVzdCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMzAsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICgmZGVzdCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMyKTsKLQotICAvKiBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgcmFuZ2VzICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmc3JjMSwgMTAsIDEsIDIwLCAxKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMyLCAxNSwgMSwgMzAsIDEpOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAxMCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKCZkZXN0KSwKLSAgICAgICAgICAmY21wKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAxNSwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKCZkZXN0KSwKLSAgICAgICAgICAmY21wKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0KLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAyMCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKCZkZXN0KSwKLSAgICAgICAgICAmY21wKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAzMCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXggKCZkZXN0KSwKLSAgICAgICAgICAmY21wKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzcmMxKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzIpOwotCi0gIC8qIGNyZWF0ZSBhIGhvbGUgeyBkb3VibGVfcmFuZ2UsIGRvdWJsZV9yYW5nZSB9ICovCi0gIGdfdmFsdWVfaW5pdCAoJnNyYzEsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmc3JjMSwgMTAsIDEsIDMwLCAxKTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjMiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlX2Z1bGwgKCZzcmMyLCAxNSwgMSwgMjAsIDEpOwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMSwgJnNyYzIpOwotICBmYWlsX3VubGVzcyAocmV0ID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFICgmZGVzdCkgPT0gR1NUX1RZUEVfTElTVCk7Ci0gIC8qIDFzdCBsaXN0IGVudHJ5ICovCi0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDApOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICh0bXApID09IFRSVUUpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAxMCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKHRtcCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMTUsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICh0bXApLAotICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0gIC8qIDJuZCBsaXN0IGVudHJ5ICovCi0gIHRtcCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoJmRlc3QsIDEpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OX1JBTkdFICh0bXApID09IFRSVUUpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmY21wLCAyMCwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9taW4gKHRtcCksCi0gICAgICAgICAgJmNtcCkgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJmNtcCwgMzAsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICh0bXApLAotICAgICAgICAgICZjbXApID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZkZXN0KTsKLSAgLyogdGhlIG90aGVyIHdheSAqLwotICByZXQgPSBnc3RfdmFsdWVfc3VidHJhY3QgKCZkZXN0LCAmc3JjMiwgJnNyYzEpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEZBTFNFKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYzEpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjMik7Ci0KLSAgZ192YWx1ZV91bnNldCAoJmNtcCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBzZXQgc3VidHJhY3Rpb24gb3BlcmF0aW9ucyBvbiBmcmFjdGlvbiBsaXN0cyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fbGlzdCkKLXsKLSAgR1ZhbHVlIGxpc3QxID0geyAwIH07Ci0gIEdWYWx1ZSBsaXN0MiA9IHsgMCB9OwotICBHVmFsdWUgdmFsMSA9IHsgMCB9OwotICBHVmFsdWUgdmFsMiA9IHsgMCB9OwotICBHVmFsdWUgdG1wID0geyAwIH07Ci0gIGdib29sZWFuIHJldDsKLQotICBnX3ZhbHVlX2luaXQgKCZsaXN0MSwgR1NUX1RZUEVfTElTVCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbDEsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnZhbDEsIDE1LCAyKTsKLSAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdDEsICZ2YWwxKTsKLSAgZ192YWx1ZV9pbml0ICgmdG1wLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZ0bXAsIDUsIDEpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0MSwgJnRtcCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ0bXApOwotCi0gIGdfdmFsdWVfaW5pdCAoJmxpc3QyLCBHU1RfVFlQRV9MSVNUKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsMiwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsMiwgMTUsIDEpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0MiwgJnZhbDIpOwotICBnX3ZhbHVlX2luaXQgKCZ0bXAsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnRtcCwgNSwgMSk7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QyLCAmdG1wKTsKLSAgZ192YWx1ZV91bnNldCAoJnRtcCk7Ci0KLSAgLyogc2hvdWxkIHN1YnRyYWN0IGFsbCBjb21tb24gZWxlbWVudHMgKi8KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmdG1wLCAmbGlzdDEsICZsaXN0Mik7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnRtcCwgJnZhbDEpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwxKTsKLSAgZ192YWx1ZV91bnNldCAoJnRtcCk7Ci0KLSAgcmV0ID0gZ3N0X3ZhbHVlX3N1YnRyYWN0ICgmdG1wLCAmbGlzdDIsICZsaXN0MSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJnRtcCwgJnZhbDIpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwyKTsKLSAgZ192YWx1ZV91bnNldCAoJnRtcCk7Ci0KLSAgZ192YWx1ZV91bnNldCAoJmxpc3QxKTsKLSAgZ192YWx1ZV91bnNldCAoJmxpc3QyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kYXRlKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdEYXRlICpkYXRlLCAqZGF0ZTI7Ci0gIGdjaGFyICpzdHI7Ci0KLSAgZGF0ZSA9IGdfZGF0ZV9uZXdfZG15ICgyMiwgOSwgMjAwNSk7Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgibWVkaWEveC10eXBlIiwgIlNPTUVfREFURV9UQUciLCBHX1RZUEVfREFURSwKLSAgICAgIGRhdGUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgIlNPTUVfREFURV9UQUciLCBHX1RZUEVfREFURSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZSAocywgIlNPTUVfREFURV9UQUciLCAmZGF0ZTIpKTsKLSAgZmFpbF91bmxlc3MgKGRhdGUyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ19kYXRlX3ZhbGlkIChkYXRlMikpOwotICBmYWlsX3VubGVzcyAoZ19kYXRlX2NvbXBhcmUgKGRhdGUsIGRhdGUyKSA9PSAwKTsKLQotICBnX2RhdGVfZnJlZSAoZGF0ZSk7Ci0gIGdfZGF0ZV9mcmVlIChkYXRlMik7Ci0gIGRhdGUgPSBOVUxMOwotICBkYXRlMiA9IE5VTEw7Ci0KLSAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBzID0gTlVMTDsKLQotICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKHN0ciwKLSAgICAgICAgICAibWVkaWEveC10eXBlLCBTT01FX0RBVEVfVEFHPShkYXRlKTIwMDUtMDktMjI7IikpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsIE5VTEwpOwotICBnX2ZyZWUgKHN0cik7Ci0gIHN0ciA9IE5VTEw7Ci0KLSAgZmFpbF91bmxlc3MgKHMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAibWVkaWEveC10eXBlIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJTT01FX0RBVEVfVEFHIiwgR19UWVBFX0RBVEUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGUgKHMsICJTT01FX0RBVEVfVEFHIiwgJmRhdGUpKTsKLSAgZmFpbF91bmxlc3MgKGRhdGUgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnX2RhdGVfdmFsaWQgKGRhdGUpKTsKLSAgZmFpbF91bmxlc3MgKGdfZGF0ZV9nZXRfZGF5IChkYXRlKSA9PSAyMik7Ci0gIGZhaWxfdW5sZXNzIChnX2RhdGVfZ2V0X21vbnRoIChkYXRlKSA9PSA5KTsKLSAgZmFpbF91bmxlc3MgKGdfZGF0ZV9nZXRfeWVhciAoZGF0ZSkgPT0gMjAwNSk7Ci0gIGdfZGF0ZV9mcmVlIChkYXRlKTsKLSAgZGF0ZSA9IE5VTEw7Ci0KLSAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBzID0gTlVMTDsKLQotICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKHN0ciwKLSAgICAgICAgICAibWVkaWEveC10eXBlLCBTT01FX0RBVEVfVEFHPShkYXRlKTIwMDUtMDktMjI7IikpOwotICBnX2ZyZWUgKHN0cik7Ci0gIHN0ciA9IE5VTEw7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdib29sZWFuCi1kYXRlX3RpbWVfZXF1YWwgKEdzdERhdGVUaW1lICogYSwgR3N0RGF0ZVRpbWUgKiBiKQotewotICBpZiAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoYSkgIT0gZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoYikgfHwKLSAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X21vbnRoIChhKSAhPSBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoYikgfHwKLSAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoYSkgIT0gZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChiKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGEpICE9IGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGIpIHx8Ci0gICAgICBnc3RfZGF0ZV90aW1lX2dldF9taW51dGUgKGEpICE9IGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoYikgfHwKLSAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoYSkgIT0gZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChiKSB8fAotICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGEpICE9IGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kIChiKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGEpICE9Ci0gICAgICBnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChiKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RhdGVfdGltZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3REYXRlVGltZSAqZGF0ZXRpbWUsICpkYXRldGltZTI7Ci0gIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0gIGdjaGFyICpzdHI7Ci0KLSAgLyogdXRjIHRpbWV6b25lICovCi0gIGRhdGV0aW1lID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAsIDIwMTAsIDYsIDIzLCA3LCA0MCwgMTApOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIm1lZGlhL3gtdHlwZSIsICJTT01FX0RBVEVfVElNRV9UQUciLAotICAgICAgR1NUX1RZUEVfREFURV9USU1FLCBkYXRldGltZSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKLSAgICAgICAgICBHU1RfVFlQRV9EQVRFX1RJTUUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSAocywgIlNPTUVfREFURV9USU1FX1RBRyIsCi0gICAgICAgICAgJmRhdGV0aW1lMikpOwotICBmYWlsX3VubGVzcyAoZGF0ZXRpbWUyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZGF0ZV90aW1lX2VxdWFsIChkYXRldGltZSwgZGF0ZXRpbWUyKSk7Ci0KLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZGF0ZXRpbWUpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkYXRldGltZTIpOwotICBkYXRldGltZSA9IE5VTEw7Ci0gIGRhdGV0aW1lMiA9IE5VTEw7Ci0KLSAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBzID0gTlVMTDsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsCi0gICAgICAibWVkaWEveC10eXBlLCBTT01FX0RBVEVfVElNRV9UQUc9KGRhdGV0aW1lKTIwMTAtMDYtMjNUMDc6NDA6MTBaOyIpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsIE5VTEwpOwotICBnX2ZyZWUgKHN0cik7Ci0gIHN0ciA9IE5VTEw7Ci0KLSAgZmFpbF91bmxlc3MgKHMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAibWVkaWEveC10eXBlIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJTT01FX0RBVEVfVElNRV9UQUciLAotICAgICAgICAgIEdTVF9UWVBFX0RBVEVfVElNRSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lIChzLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKLSAgICAgICAgICAmZGF0ZXRpbWUpKTsKLSAgZmFpbF91bmxlc3MgKGRhdGV0aW1lICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZGF0ZXRpbWUpID09IDIwMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGRhdGV0aW1lKSA9PSA2KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZGF0ZXRpbWUpID09IDIzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGRhdGV0aW1lKSA9PSA3KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZGF0ZXRpbWUpID09IDQwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZGF0ZXRpbWUpID09IDEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kIChkYXRldGltZSkgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChkYXRldGltZSkgPT0gMCk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGRhdGV0aW1lKTsKLSAgZGF0ZXRpbWUgPSBOVUxMOwotCi0gIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgcyA9IE5VTEw7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLAotICAgICAgIm1lZGlhL3gtdHlwZSwgU09NRV9EQVRFX1RJTUVfVEFHPShkYXRldGltZSkyMDEwLTA2LTIzVDA3OjQwOjEwWjsiKTsKLSAgZ19mcmVlIChzdHIpOwotICBzdHIgPSBOVUxMOwotCi0gIC8qIHdpdGggdGltZXpvbmUgKi8KLSAgZGF0ZXRpbWUgPSBnc3RfZGF0ZV90aW1lX25ldyAoLTMuMCwgMjAxMCwgNiwgMjMsIDcsIDQwLCAxMC4wMDAwMDEpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIm1lZGlhL3gtdHlwZSIsICJTT01FX0RBVEVfVElNRV9UQUciLAotICAgICAgR1NUX1RZUEVfREFURV9USU1FLCBkYXRldGltZSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKLSAgICAgICAgICBHU1RfVFlQRV9EQVRFX1RJTUUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZSAocywgIlNPTUVfREFURV9USU1FX1RBRyIsCi0gICAgICAgICAgJmRhdGV0aW1lMikpOwotICBmYWlsX3VubGVzcyAoZGF0ZXRpbWUyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZGF0ZV90aW1lX2VxdWFsIChkYXRldGltZSwgZGF0ZXRpbWUyKSk7Ci0KLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZGF0ZXRpbWUpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkYXRldGltZTIpOwotICBkYXRldGltZSA9IE5VTEw7Ci0gIGRhdGV0aW1lMiA9IE5VTEw7Ci0KLSAgc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBzID0gTlVMTDsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsCi0gICAgICAibWVkaWEveC10eXBlLCBTT01FX0RBVEVfVElNRV9UQUc9KGRhdGV0aW1lKTIwMTAtMDYtMjNUMDc6NDA6MTAuMDAwMDAxLTAzMDA7Iik7Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgTlVMTCk7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgc3RyID0gTlVMTDsKLQotICBmYWlsX3VubGVzcyAocyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJtZWRpYS94LXR5cGUiKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgIlNPTUVfREFURV9USU1FX1RBRyIsCi0gICAgICAgICAgR1NUX1RZUEVfREFURV9USU1FKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUgKHMsICJTT01FX0RBVEVfVElNRV9UQUciLAotICAgICAgICAgICZkYXRldGltZSkpOwotICBmYWlsX3VubGVzcyAoZGF0ZXRpbWUgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF95ZWFyIChkYXRldGltZSkgPT0gMjAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZGF0ZXRpbWUpID09IDYpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkYXRldGltZSkgPT0gMjMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfaG91ciAoZGF0ZXRpbWUpID09IDcpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWludXRlIChkYXRldGltZSkgPT0gNDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfc2Vjb25kIChkYXRldGltZSkgPT0gMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQgKGRhdGV0aW1lKSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGRhdGV0aW1lKSA9PSAtMyk7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGRhdGV0aW1lKTsKLSAgZGF0ZXRpbWUgPSBOVUxMOwotCi0gIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgcyA9IE5VTEw7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwKLSAgICAgICJtZWRpYS94LXR5cGUsIFNPTUVfREFURV9USU1FX1RBRz0oZGF0ZXRpbWUpMjAxMC0wNi0yM1QwNzo0MDoxMC4wMDAwMDEtMDMwMDsiKTsKLQotICBnX2ZyZWUgKHN0cik7Ci0gIHN0ciA9IE5VTEw7Ci0KLSAgLyogd2l0aCBwb3NpdGl2ZSB0aW1lem9uZSAqLwotICBkYXRldGltZSA9IGdzdF9kYXRlX3RpbWVfbmV3ICgyLjAsIDIwMTAsIDYsIDIzLCA3LCA0MCwgMTAuMDAwMDAxKTsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJtZWRpYS94LXR5cGUiLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKLSAgICAgIEdTVF9UWVBFX0RBVEVfVElNRSwgZGF0ZXRpbWUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgIlNPTUVfREFURV9USU1FX1RBRyIsCi0gICAgICAgICAgR1NUX1RZUEVfREFURV9USU1FKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9kYXRlX3RpbWUgKHMsICJTT01FX0RBVEVfVElNRV9UQUciLAotICAgICAgICAgICZkYXRldGltZTIpKTsKLSAgZmFpbF91bmxlc3MgKGRhdGV0aW1lMiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGRhdGVfdGltZV9lcXVhbCAoZGF0ZXRpbWUsIGRhdGV0aW1lMikpOwotCi0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGRhdGV0aW1lKTsKLSAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZGF0ZXRpbWUyKTsKLSAgZGF0ZXRpbWUgPSBOVUxMOwotICBkYXRldGltZTIgPSBOVUxMOwotCi0gIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgcyA9IE5VTEw7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLAotICAgICAgIm1lZGlhL3gtdHlwZSwgU09NRV9EQVRFX1RJTUVfVEFHPShkYXRldGltZSkyMDEwLTA2LTIzVDA3OjQwOjEwLjAwMDAwMSswMjAwOyIpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsIE5VTEwpOwotICBnX2ZyZWUgKHN0cik7Ci0gIHN0ciA9IE5VTEw7Ci0KLSAgZmFpbF91bmxlc3MgKHMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAibWVkaWEveC10eXBlIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJTT01FX0RBVEVfVElNRV9UQUciLAotICAgICAgICAgIEdTVF9UWVBFX0RBVEVfVElNRSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZV90aW1lIChzLCAiU09NRV9EQVRFX1RJTUVfVEFHIiwKLSAgICAgICAgICAmZGF0ZXRpbWUpKTsKLSAgZmFpbF91bmxlc3MgKGRhdGV0aW1lICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZGF0ZXRpbWUpID09IDIwMTApOwotICBmYWlsX3VubGVzcyAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGRhdGV0aW1lKSA9PSA2KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2RheSAoZGF0ZXRpbWUpID09IDIzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGRhdGV0aW1lKSA9PSA3KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZGF0ZXRpbWUpID09IDQwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZCAoZGF0ZXRpbWUpID09IDEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9kYXRlX3RpbWVfZ2V0X21pY3Jvc2Vjb25kIChkYXRldGltZSkgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZGF0ZV90aW1lX2dldF90aW1lX3pvbmVfb2Zmc2V0IChkYXRldGltZSkgPT0gMik7Ci0gIGdzdF9kYXRlX3RpbWVfdW5yZWYgKGRhdGV0aW1lKTsKLSAgZGF0ZXRpbWUgPSBOVUxMOwotCi0gIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgcyA9IE5VTEw7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwKLSAgICAgICJtZWRpYS94LXR5cGUsIFNPTUVfREFURV9USU1FX1RBRz0oZGF0ZXRpbWUpMjAxMC0wNi0yM1QwNzo0MDoxMC4wMDAwMDErMDIwMDsiKTsKLQotICBnX2ZyZWUgKHN0cik7Ci0gIHN0ciA9IE5VTEw7Ci0KLSAgLyogdGVzdCBwYXJ0aWFsIGRhdGVzICovCi0gIGRhdGV0aW1lID0gZ3N0X2RhdGVfdGltZV9uZXcgKDAuMCwgMjAxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLjApOwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX0RBVEVfVElNRSk7Ci0gIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnZhbCwgZGF0ZXRpbWUpOwotICBzdHIgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIjIwMTAiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbCwgc3RyKSk7Ci0gIGRhdGV0aW1lID0gZ192YWx1ZV9nZXRfYm94ZWQgKCZ2YWwpOwotICBmYWlsX2lmICghZ3N0X2RhdGVfdGltZV9oYXNfeWVhciAoZGF0ZXRpbWUpKTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKGdzdF9kYXRlX3RpbWVfaGFzX2RheSAoZGF0ZXRpbWUpKTsKLSAgZmFpbF9pZiAoZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZGF0ZXRpbWUpKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0gIGdfZnJlZSAoc3RyKTsKLQotICBkYXRldGltZSA9IGdzdF9kYXRlX3RpbWVfbmV3ICgwLjAsIDIwMTAsIDksIC0xLCAtMSwgLTEsIC0xLjApOwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX0RBVEVfVElNRSk7Ci0gIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnZhbCwgZGF0ZXRpbWUpOwotICBzdHIgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIjIwMTAtMDkiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbCwgc3RyKSk7Ci0gIGRhdGV0aW1lID0gZ192YWx1ZV9nZXRfYm94ZWQgKCZ2YWwpOwotICBmYWlsX2lmICghZ3N0X2RhdGVfdGltZV9oYXNfeWVhciAoZGF0ZXRpbWUpKTsKLSAgZmFpbF9pZiAoIWdzdF9kYXRlX3RpbWVfaGFzX21vbnRoIChkYXRldGltZSkpOwotICBmYWlsX2lmIChnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKGdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGRhdGV0aW1lKSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotICBnX2ZyZWUgKHN0cik7Ci0KLSAgZGF0ZXRpbWUgPSBnc3RfZGF0ZV90aW1lX25ldyAoMC4wLCAxOTgzLCAxMSwgMzAsIC0xLCAtMSwgLTEuMCk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfREFURV9USU1FKTsKLSAgZ192YWx1ZV90YWtlX2JveGVkICgmdmFsLCBkYXRldGltZSk7Ci0gIHN0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZ2YWwpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdmFsKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiMTk4My0xMS0zMCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsLCBzdHIpKTsKLSAgZGF0ZXRpbWUgPSBnX3ZhbHVlX2dldF9ib3hlZCAoJnZhbCk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkYXRldGltZSkpOwotICBmYWlsX2lmICghZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKGdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGRhdGV0aW1lKSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotICBnX2ZyZWUgKHN0cik7Ci0KLSAgZGF0ZXRpbWUgPSBnc3RfZGF0ZV90aW1lX25ldyAoMC4wLCAxOTgzLCAxMSwgMzAsIDMsIDUyLCAtMS4wKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9EQVRFX1RJTUUpOwotICBnX3ZhbHVlX3Rha2VfYm94ZWQgKCZ2YWwsIGRhdGV0aW1lKTsKLSAgc3RyID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnZhbCk7Ci0gIGdfdmFsdWVfcmVzZXQgKCZ2YWwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzdHIsICIxOTgzLTExLTMwVDAzOjUyWiIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsLCBzdHIpKTsKLSAgZGF0ZXRpbWUgPSBnX3ZhbHVlX2dldF9ib3hlZCAoJnZhbCk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkYXRldGltZSkpOwotICBmYWlsX2lmICghZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc190aW1lIChkYXRldGltZSkpOwotICBmYWlsX2lmIChnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldCAoZGF0ZXRpbWUpLCAwLjApOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLSAgZ19mcmVlIChzdHIpOwotCi0gIGRhdGV0aW1lID0gZ3N0X2RhdGVfdGltZV9uZXcgKC00LjUsIDE5ODMsIDExLCAzMCwgMywgNTIsIC0xLjApOwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX0RBVEVfVElNRSk7Ci0gIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnZhbCwgZGF0ZXRpbWUpOwotICBzdHIgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHN0ciwgIjE5ODMtMTEtMzBUMDM6NTItMDQzMCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsLCBzdHIpKTsKLSAgZGF0ZXRpbWUgPSBnX3ZhbHVlX2dldF9ib3hlZCAoJnZhbCk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkYXRldGltZSkpOwotICBmYWlsX2lmICghZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc190aW1lIChkYXRldGltZSkpOwotICBmYWlsX2lmIChnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldCAoZGF0ZXRpbWUpLAotICAgICAgLTQuNSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotICBnX2ZyZWUgKHN0cik7Ci0KLSAgZGF0ZXRpbWUgPSBnc3RfZGF0ZV90aW1lX25ldyAoNC41LCAxOTgzLCAxMSwgMzAsIDE0LCA1MiwgOSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfREFURV9USU1FKTsKLSAgZ192YWx1ZV90YWtlX2JveGVkICgmdmFsLCBkYXRldGltZSk7Ci0gIHN0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZ2YWwpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdmFsKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiMTk4My0xMS0zMFQxNDo1MjowOSswNDMwIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2YWwsIHN0cikpOwotICBkYXRldGltZSA9IGdfdmFsdWVfZ2V0X2JveGVkICgmdmFsKTsKLSAgZmFpbF9pZiAoIWdzdF9kYXRlX3RpbWVfaGFzX3llYXIgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc19tb250aCAoZGF0ZXRpbWUpKTsKLSAgZmFpbF9pZiAoIWdzdF9kYXRlX3RpbWVfaGFzX2RheSAoZGF0ZXRpbWUpKTsKLSAgZmFpbF9pZiAoIWdzdF9kYXRlX3RpbWVfaGFzX3RpbWUgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc19zZWNvbmQgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldCAoZGF0ZXRpbWUpLCA0LjUpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLSAgZ19mcmVlIChzdHIpOwotCi0gIGRhdGV0aW1lID0gZ3N0X2RhdGVfdGltZV9uZXcgKC00LjUsIDE5ODMsIDExLCAzMCwgMTQsIDUyLCA5LjcwMik7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfREFURV9USU1FKTsKLSAgZ192YWx1ZV90YWtlX2JveGVkICgmdmFsLCBkYXRldGltZSk7Ci0gIHN0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZ2YWwpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdmFsKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoc3RyLCAiMTk4My0xMS0zMFQxNDo1MjowOS43MDItMDQzMCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdmFsLCBzdHIpKTsKLSAgZGF0ZXRpbWUgPSBnX3ZhbHVlX2dldF9ib3hlZCAoJnZhbCk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc195ZWFyIChkYXRldGltZSkpOwotICBmYWlsX2lmICghZ3N0X2RhdGVfdGltZV9oYXNfbW9udGggKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc19kYXkgKGRhdGV0aW1lKSk7Ci0gIGZhaWxfaWYgKCFnc3RfZGF0ZV90aW1lX2hhc190aW1lIChkYXRldGltZSkpOwotICBmYWlsX2lmICghZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kIChkYXRldGltZSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKGdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQgKGRhdGV0aW1lKSwKLSAgICAgIC00LjUpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLSAgZ19mcmVlIChzdHIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZyYWN0aW9uX3JhbmdlKQotewotICBHVmFsdWUgcmFuZ2UgPSB7IDAsIH07Ci0gIEdWYWx1ZSBzdGFydCA9IHsgMCwgfTsKLSAgR1ZhbHVlIGVuZCA9IHsgMCwgfTsKLSAgR1ZhbHVlIHNyYyA9IHsgMCwgfTsKLSAgR1ZhbHVlIGRlc3QgPSB7IDAsIH07Ci0gIEdWYWx1ZSByYW5nZTIgPSB7IDAsIH07Ci0KLSAgZ192YWx1ZV9pbml0ICgmcmFuZ2UsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLSAgZ192YWx1ZV9pbml0ICgmcmFuZ2UyLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnN0YXJ0LCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gIGdfdmFsdWVfaW5pdCAoJmVuZCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICBnX3ZhbHVlX2luaXQgKCZzcmMsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLQotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3JjLCAxLCAyKTsKLQotICAvKiBDaGVjayB0aGF0IGEgaW50ZXJzZWN0aW9uIG9mIGZyYWN0aW9uICYgcmFuZ2UgPSBmcmFjdGlvbiAqLwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmc3RhcnQsIDEsIDQpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZW5kLCAyLCAzKTsKLSAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZSAoJnJhbmdlLCAmc3RhcnQsICZlbmQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgJnNyYywgJnJhbmdlKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmZGVzdCwgJnNyYykgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLQotICAvKiBDaGVjayB0aGF0IGEgaW50ZXJzZWN0aW9uIHNlbGVjdHMgdGhlIG92ZXJsYXBwaW5nIHJhbmdlICovCi0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzdGFydCwgMSwgMyk7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZlbmQsIDIsIDMpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlICgmcmFuZ2UyLCAmc3RhcnQsICZlbmQpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgJnJhbmdlLCAmcmFuZ2UyKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKTsKLQotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlICgmcmFuZ2UyLCAmc3RhcnQsICZlbmQpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZkZXN0LCAmcmFuZ2UyKSA9PSBHU1RfVkFMVUVfRVFVQUwpOwotCi0gIC8qIENoZWNrIHRoYXQgbm9uIGludGVyc2VjdGlvbiByYW5nZXMgZG9uJ3QgaW50ZXJzZWN0ICovCi0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzdGFydCwgNCwgMik7Ci0gIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZlbmQsIDUsIDIpOwotICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlICgmcmFuZ2UyLCAmc3RhcnQsICZlbmQpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgJnJhbmdlLCAmcmFuZ2UyKSA9PSBGQUxTRSk7Ci0KLSAgZ192YWx1ZV91bnNldCAoJnN0YXJ0KTsKLSAgZ192YWx1ZV91bnNldCAoJmVuZCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZyYW5nZSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZyYW5nZTIpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3JjKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zZXJpYWxpemVfZGVzZXJpYWxpemVfZm9ybWF0X2VudW0pCi17Ci0gIEdzdFN0cnVjdHVyZSAqcywgKnMyOwotICBHc3RGb3JtYXQgZm9vYmFyX2ZtdDsKLSAgZ2NoYXIgKnN0ciwgKnN0cjIsICplbmQgPSBOVUxMOwotCi0gIC8qIG1ha2Ugc3VyZSBjdXN0b20gZm9ybWF0cyBhcmUgc2VyaWFsaXNlZCBwcm9wZXJseSBhcyB3ZWxsICovCi0gIGZvb2Jhcl9mbXQgPSBnc3RfZm9ybWF0X3JlZ2lzdGVyICgiZm9vYmFyIiwgIkdTVF9GT1JNQVRfRk9PQkFSIik7Ci0gIGZhaWxfdW5sZXNzIChmb29iYXJfZm10ICE9IEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJmb28vYmFyIiwgImZvcm1hdDEiLCBHU1RfVFlQRV9GT1JNQVQsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLCAiZm9ybWF0MiIsIEdTVF9UWVBFX0ZPUk1BVCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgImZvcm1hdDMiLCBHU1RfVFlQRV9GT1JNQVQsIEdTVF9GT1JNQVRfREVGQVVMVCwgImZvcm1hdDQiLAotICAgICAgR1NUX1RZUEVfRk9STUFULCBmb29iYXJfZm10LCBOVUxMKTsKLQotICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7Ci0gIEdTVF9MT0cgKCJHb3Qgc3RydWN0dXJlIHN0cmluZyAnJXMnIiwgR1NUX1NUUl9OVUxMIChzdHIpKTsKLSAgZmFpbF91bmxlc3MgKHN0ciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHN0cnN0ciAoc3RyLCAiVElNRSIpICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3Ryc3RyIChzdHIsICJCWVRFIikgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzdHJzdHIgKHN0ciwgIkRFRkFVTFQiKSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHN0cnN0ciAoc3RyLCAiRk9PQkFSIikgIT0gTlVMTCk7Ci0KLSAgczIgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsICZlbmQpOwotICBmYWlsX3VubGVzcyAoczIgIT0gTlVMTCk7Ci0KLSAgc3RyMiA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzMik7Ci0gIGZhaWxfdW5sZXNzIChzdHIyICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoc3RyLCBzdHIyKSk7Ci0KLSAgZ19mcmVlIChzdHIpOwotICBnX2ZyZWUgKHN0cjIpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zZXJpYWxpemVfZGVzZXJpYWxpemVfY2FwcykKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwIH0KLSAgLCB2YWx1ZTIgPSB7Ci0gIDB9OwotICBHc3RDYXBzICpjYXBzLCAqY2FwczI7Ci0gIEdzdENhcHMgKmluY2FwczsKLSAgZ2NoYXIgKnNlcmlhbGl6ZWQ7Ci0KLSAgaW5jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImNhcHMvaW50ZXJuYWwiLAotICAgICAgImluLWZpZWxkIiwgR19UWVBFX0lOVCwgMjAsICJpbi1maWVsZDIiLAotICAgICAgR19UWVBFX1NUUklORywgInNvbWUgaW4gdGVybmFsIGZpZWxkIiwgTlVMTCk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidGVzdC9jYXBzIiwKLSAgICAgICJmb28iLCBHX1RZUEVfSU5ULCAxMCwgImJhciIsIEdfVFlQRV9TVFJJTkcsICJ0ZXN0IiwKLSAgICAgICJpbnQtY2FwcyIsIEdTVF9UWVBFX0NBUFMsIGluY2FwcywgTlVMTCk7Ci0gIGZhaWxfaWYgKEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFIChjYXBzKSAhPSAxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7Ci0KLSAgLyogYW5kIGFzc2lnbiBjYXBzIHRvIGd2YWx1ZSAqLwotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfQ0FQUyk7Ci0gIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnZhbHVlLCBjYXBzKTsKLSAgZmFpbF9pZiAoR1NUX0NBUFNfUkVGQ09VTlRfVkFMVUUgKGNhcHMpICE9IDEpOwotCi0gIC8qIG5vdyBzZXJpYWxpemUgaXQgKi8KLSAgc2VyaWFsaXplZCA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZ2YWx1ZSk7Ci0gIEdTVF9ERUJVRyAoInNlcmlhbGl6ZWQgY2FwcyB0byAlcyIsIHNlcmlhbGl6ZWQpOwotICBmYWlsX3VubGVzcyAoc2VyaWFsaXplZCAhPSBOVUxMKTsKLQotICAvKiByZWZjb3VudCBzaG91bGQgbm90IGNoYW5nZSAqLwotICBmYWlsX2lmIChHU1RfQ0FQU19SRUZDT1VOVF9WQUxVRSAoY2FwcykgIT0gMSk7Ci0KLSAgLyogbm93IGRlc2VyaWFsaXplIGFnYWluICovCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlMiwgR1NUX1RZUEVfQ0FQUyk7Ci0gIGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnZhbHVlMiwgc2VyaWFsaXplZCk7Ci0KLSAgY2FwczIgPSBnX3ZhbHVlX2dldF9ib3hlZCAoJnZhbHVlMik7Ci0gIGZhaWxfaWYgKEdTVF9DQVBTX1JFRkNPVU5UX1ZBTFVFIChjYXBzMikgIT0gMSk7Ci0KLSAgLyogdGhleSBzaG91bGQgYmUgZXF1YWwgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBjYXBzMikpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlMik7Ci0gIGdfZnJlZSAoc2VyaWFsaXplZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW50X3JhbmdlKQotewotICBHVmFsdWUgcmFuZ2UgPSB7IDAsIH07Ci0gIEdWYWx1ZSBzdGFydCA9IHsgMCwgfTsKLSAgR1ZhbHVlIGVuZCA9IHsgMCwgfTsKLSAgR1ZhbHVlIHNyYyA9IHsgMCwgfTsKLSAgR1ZhbHVlIGRlc3QgPSB7IDAsIH07Ci0gIEdWYWx1ZSByYW5nZTIgPSB7IDAsIH07Ci0KLSAgZ192YWx1ZV9pbml0ICgmcmFuZ2UsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnJhbmdlMiwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgZ192YWx1ZV9pbml0ICgmc3RhcnQsIEdfVFlQRV9JTlQpOwotICBnX3ZhbHVlX2luaXQgKCZlbmQsIEdfVFlQRV9JTlQpOwotICBnX3ZhbHVlX2luaXQgKCZzcmMsIEdfVFlQRV9JTlQpOwotCi0gIGdfdmFsdWVfc2V0X2ludCAoJnNyYywgMik7Ci0KLSAgLyogQ2hlY2sgdGhhdCBhIGludGVyc2VjdGlvbiBvZiBpbnQgJiByYW5nZSA9IGludCAqLwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnJhbmdlLCAxLCA1KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZzcmMsICZyYW5nZSkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHX1RZUEVfSU5UKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmZGVzdCwgJnNyYykgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLQotICAvKiBDaGVjayB0aGF0IGEgaW50ZXJzZWN0aW9uIHNlbGVjdHMgdGhlIG92ZXJsYXBwaW5nIHJhbmdlICovCi0gIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlICgmcmFuZ2UyLCAyLCAzKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZyYW5nZSwgJnJhbmdlMikgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9JTlRfUkFOR0UpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZyYW5nZTIpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0KLSAgLyogQ2hlY2sgdGhhdCBub24gaW50ZXJzZWN0aW9uIHJhbmdlcyBkb24ndCBpbnRlcnNlY3QgKi8KLSAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZyYW5nZTIsIDYsIDcpOwotICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgJnJhbmdlLCAmcmFuZ2UyKSA9PSBGQUxTRSk7Ci0KLSAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZyYW5nZSwgLTcsIC02KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICgmcmFuZ2UpLCAtNyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoJnJhbmdlKSwgLTYpOwotICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZSAoJnJhbmdlLCAtNywgNyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoJnJhbmdlKSwgLTcpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKCZyYW5nZSksIDcpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZzdGFydCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZlbmQpOwotICBnX3ZhbHVlX3Vuc2V0ICgmcmFuZ2UpOwotICBnX3ZhbHVlX3Vuc2V0ICgmcmFuZ2UyKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW50NjRfcmFuZ2UpCi17Ci0gIEdWYWx1ZSByYW5nZSA9IHsgMCwgfTsKLSAgR1ZhbHVlIHN0YXJ0ID0geyAwLCB9OwotICBHVmFsdWUgZW5kID0geyAwLCB9OwotICBHVmFsdWUgc3JjID0geyAwLCB9OwotICBHVmFsdWUgZGVzdCA9IHsgMCwgfTsKLSAgR1ZhbHVlIHJhbmdlMiA9IHsgMCwgfTsKLQotICBnX3ZhbHVlX2luaXQgKCZyYW5nZSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotICBnX3ZhbHVlX2luaXQgKCZyYW5nZTIsIEdTVF9UWVBFX0lOVDY0X1JBTkdFKTsKLSAgZ192YWx1ZV9pbml0ICgmc3RhcnQsIEdfVFlQRV9JTlQ2NCk7Ci0gIGdfdmFsdWVfaW5pdCAoJmVuZCwgR19UWVBFX0lOVDY0KTsKLSAgZ192YWx1ZV9pbml0ICgmc3JjLCBHX1RZUEVfSU5UNjQpOwotCi0gIGdfdmFsdWVfc2V0X2ludDY0ICgmc3JjLCAyKTsKLQotICAvKiBDaGVjayB0aGF0IGEgaW50ZXJzZWN0aW9uIG9mIGludDY0ICYgcmFuZ2UgPSBpbnQ2NCAqLwotICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmcmFuZ2UsIDEsIDUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgJnNyYywgJnJhbmdlKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfVFlQRSAoJmRlc3QpID09IEdfVFlQRV9JTlQ2NCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfY29tcGFyZSAoJmRlc3QsICZzcmMpID09IEdTVF9WQUxVRV9FUVVBTCk7Ci0KLSAgLyogQ2hlY2sgdGhhdCBhIGludGVyc2VjdGlvbiBzZWxlY3RzIHRoZSBvdmVybGFwcGluZyByYW5nZSAqLwotICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmcmFuZ2UyLCAyLCAzKTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZyYW5nZSwgJnJhbmdlMikgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX1RZUEUgKCZkZXN0KSA9PSBHU1RfVFlQRV9JTlQ2NF9SQU5HRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9jb21wYXJlICgmZGVzdCwgJnJhbmdlMikgPT0gR1NUX1ZBTFVFX0VRVUFMKTsKLQotICAvKiBDaGVjayB0aGF0IG5vbiBpbnRlcnNlY3Rpb24gcmFuZ2VzIGRvbid0IGludGVyc2VjdCAqLwotICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmcmFuZ2UyLCA2LCA3KTsKLSAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2ludGVyc2VjdCAoJmRlc3QsICZyYW5nZSwgJnJhbmdlMikgPT0gRkFMU0UpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZzdGFydCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZlbmQpOwotICBnX3ZhbHVlX3Vuc2V0ICgmcmFuZ2UpOwotICBnX3ZhbHVlX3Vuc2V0ICgmcmFuZ2UyKTsKLSAgZ192YWx1ZV91bnNldCAoJnNyYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2VyaWFsaXplX2ludDY0X3JhbmdlKQotewotICBpbnQgaSA9IDA7Ci0KLSAgZ2ludDY0IGludDY0X3Jhbmdlc1tdID0gewotICAgIDAsIDUsCi0gICAgMCwgR19NQVhJTlQsCi0gICAgNSwgR19NQVhJTlQzMiwKLSAgICA1LCBHX01BWElOVDY0LAotICB9OwotICBnaW50IGludDY0X3Jhbmdlc19zaXplID0gc2l6ZW9mIChpbnQ2NF9yYW5nZXMpIC8gc2l6ZW9mIChpbnQ2NF9yYW5nZXNbMF0pIC8gMjsKLQotICBnY2hhciAqaW50NjRfcmFuZ2Vfc3RyaW5nc1tdID0gewotICAgIGdfc3RyZHVwICgiWyAwLCA1IF0iKSwKLSAgICBnX3N0cmR1cF9wcmludGYgKCJbIDAsICUiIEdfR0lOVDY0X0ZPUk1BVCAiIF0iLCAoZ2ludDY0KSBHX01BWElOVCksCi0gICAgZ19zdHJkdXBfcHJpbnRmICgiWyA1LCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBdIiwgKGdpbnQ2NCkgR19NQVhJTlQzMiksCi0gICAgZ19zdHJkdXBfcHJpbnRmICgiWyA1LCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBdIiwgR19NQVhJTlQ2NCksCi0gIH07Ci0gIGdpbnQgaW50NjRfcmFuZ2Vfc3RyaW5nc19zaXplID0KLSAgICAgIHNpemVvZiAoaW50NjRfcmFuZ2Vfc3RyaW5ncykgLyBzaXplb2YgKGludDY0X3JhbmdlX3N0cmluZ3NbMF0pOwotCi0gIGZhaWxfdW5sZXNzIChpbnQ2NF9yYW5nZXNfc2l6ZSA9PSBpbnQ2NF9yYW5nZV9zdHJpbmdzX3NpemUpOwotCi0gIHdoaWxlIChpICsgMSA8IChpbnQ2NF9yYW5nZXNfc2l6ZSAqIDIpKSB7Ci0gICAgaWYgKChpICsgMSkgJSAyKSB7Ci0gICAgICBnY2hhciAqc3RyOwotICAgICAgZ2NoYXIgKnN0cjI7Ci0gICAgICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqZGVzZXJpYWxpemVkX3ZhbHVlOwotICAgICAgaW50IGlkeCA9IGkgLyAyOwotICAgICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfSU5UNjRfUkFOR0UpOwotCi0gICAgICAvKiBjaGVjayBzZXJpYWxpemF0aW9uICovCi0gICAgICBnc3RfdmFsdWVfc2V0X2ludDY0X3JhbmdlICgmdmFsdWUsIGludDY0X3Jhbmdlc1tpXSwgaW50NjRfcmFuZ2VzW2kgKyAxXSk7Ci0gICAgICBzdHIgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdmFsdWUpOwotICAgICAgZmFpbF91bmxlc3MgKHN0cmNtcCAoc3RyLCBpbnQ2NF9yYW5nZV9zdHJpbmdzW2lkeF0pID09IDApOwotICAgICAgZ19mcmVlIChpbnQ2NF9yYW5nZV9zdHJpbmdzW2lkeF0pOwotICAgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLQotICAgICAgLyogbm93IGRlc2VyaWFsaXplIGFnYWluIHRvIGFuIGludDY0IHJhbmdlICovCi0gICAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJmb28vYmFyIiwgInJhbmdlIiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UsCi0gICAgICAgICAgaW50NjRfcmFuZ2VzW2ldLCBpbnQ2NF9yYW5nZXNbaSArIDFdLCBOVUxMKTsKLSAgICAgIGRlc2VyaWFsaXplZF92YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAicmFuZ2UiKTsKLSAgICAgIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKGRlc2VyaWFsaXplZF92YWx1ZSkgPT0gVFJVRSk7Ci0gICAgICBzdHIyID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoZGVzZXJpYWxpemVkX3ZhbHVlKTsKLQotICAgICAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluIChkZXNlcmlhbGl6ZWRfdmFsdWUpID09Ci0gICAgICAgICAgaW50NjRfcmFuZ2VzW2ldKTsKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21heCAoZGVzZXJpYWxpemVkX3ZhbHVlKSA9PQotICAgICAgICAgIGludDY0X3Jhbmdlc1tpICsgMV0pOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICAgICAgZ19mcmVlIChzdHIpOwotICAgICAgZ19mcmVlIChzdHIyKTsKLSAgICB9Ci0gICAgaSsrOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVzZXJpYWxpemVfaW50X3JhbmdlKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGdjaGFyICpzdHIsICpzdHIyOwotICBnY2hhciAqZW5kID0gTlVMTDsKLSAgY29uc3QgR1ZhbHVlICpkZXNlcmlhbGl6ZWRfdmFsdWU7Ci0KLSAgLyogY2hlY2sgYSB2YWxpZCBpbnRfcmFuZ2UgZGVzZXJpYWxpemF0aW9uICovCi0gIHN0ciA9IGdfc3RyZHVwX3ByaW50ZiAoImZvby9iYXIsIHJhbmdlPVsgMSwgJWQgXTsiLCBHX01BWElOVCk7Ci0gIHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsICZlbmQpOwotICBmYWlsX3VubGVzcyAoKmVuZCA9PSAnXDAnKTsKLSAgZGVzZXJpYWxpemVkX3ZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJyYW5nZSIpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAoZGVzZXJpYWxpemVkX3ZhbHVlKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoZGVzZXJpYWxpemVkX3ZhbHVlKSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoZGVzZXJpYWxpemVkX3ZhbHVlKSA9PSBHX01BWElOVCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7Ci0gIGVuZCA9IE5VTEw7Ci0gIGdfZnJlZSAoc3RyKTsKLQotICAvKiBjaGVjayBpbnZhbGlkIGludF9yYW5nZSBkZXNlcmlhbGl6YXRpb24gKi8KLSAgc3RyID0KLSAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImZvby9iYXIsIHJhbmdlPVsgMSwgJSIgR19HSU5UNjRfRk9STUFUICIgXTsiLAotICAgICAgKGdpbnQ2NCkgR19NQVhJTlQgKyAxKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCAmZW5kKSk7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgc3RyID0KLSAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImZvby9iYXIsIHJhbmdlPVsgJSIgR19HSU5UNjRfRk9STUFUICIsICUiCi0gICAgICBHX0dJTlQ2NF9GT1JNQVQgIiBdOyIsIChnaW50NjQpIEdfTUFYSU5ULCAoZ2ludDY0KSBHX01BWElOVCArIDEpOwotICBBU1NFUlRfQ1JJVElDQUwgKHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsIE5VTEwpKTsKLSAgZW5kID0gTlVMTDsKLSAgZ19mcmVlIChzdHIpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotCi0gIC8qIGNoZWNrIGEgdmFsaWQgaW50NjRfcmFuZ2UgZGVzZXJpYWxpemF0aW9uLiBUaG9zZSByYW5nZXMgbmVlZCB0bwotICAgKiBiZSBleHBsaWNpdCBhYm91dCB0aGVpciBzdG9yYWdlIHR5cGUuICovCi0gIHN0ciA9IGdfc3RyZHVwX3ByaW50ZiAoImZvby9iYXIsIHJhbmdlPShnaW50NjQpWyAxLCAlZCBdOyIsIEdfTUFYSU5UKTsKLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgJmVuZCk7Ci0gIGZhaWxfdW5sZXNzICgqZW5kID09ICdcMCcpOwotICBkZXNlcmlhbGl6ZWRfdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInJhbmdlIik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UNjRfUkFOR0UgKGRlc2VyaWFsaXplZF92YWx1ZSkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX21pbiAoZGVzZXJpYWxpemVkX3ZhbHVlKSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4IChkZXNlcmlhbGl6ZWRfdmFsdWUpID09IEdfTUFYSU5UKTsKLSAgc3RyMiA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgZmFpbF91bmxlc3MgKHN0cmNtcCAoc3RyLCBzdHIyKSA9PSAwKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgZW5kID0gTlVMTDsKLSAgZ19mcmVlIChzdHIpOwotICBnX2ZyZWUgKHN0cjIpOwotCi0gIC8qIGNoZWNrIGludmFsaWQgaW50NjRfcmFuZ2UgKHN0YXJ0aW5nIHdpdGggYSBnaW50KSBkZXNlcmlhbGl6YXRpb24gKi8KLSAgc3RyID0KLSAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImZvby9iYXIsIHJhbmdlPShnaW50NjQpWyAxLCAlIiBHX0dVSU5UNjRfRk9STUFUICIgXTsiLAotICAgICAgKGd1aW50NjQpIEdfTUFYSU5UNjQgKyAxKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCAmZW5kKSk7Ci0gIGZhaWxfdW5sZXNzICgqZW5kID09ICdcMCcpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICBlbmQgPSBOVUxMOwotICBnX2ZyZWUgKHN0cik7Ci0KLSAgLyogY2hlY2sgaW52YWxpZCBpbnQ2NF9yYW5nZSBkZXNlcmlhbGl6YXRpb24gaW50byBhIGludDY0X3JhbmdlICovCi0gIHN0ciA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYgKCJmb28vYmFyLCByYW5nZT0oZ2ludDY0KVsgJSIgR19HSU5UNjRfRk9STUFUICIsICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFUICIgXTsiLCAoZ2ludDY0KSBHX01BWElOVCwgKGd1aW50NjQpIEdfTUFYSU5UNjQgKyAxKTsKLSAgQVNTRVJUX0NSSVRJQ0FMIChzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCBOVUxMKSk7Ci0gIGdfZnJlZSAoc3RyKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLQotICAvKiBjaGVjayBpbnZhbGlkIGludDY0X3JhbmdlIGRlc2VyaWFsaXphdGlvbiBpbnRvIGEgaW50X3JhbmdlICovCi0gIHN0ciA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYgKCJmb28vYmFyLCByYW5nZT1bICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiIF07IiwgKGdpbnQ2NCkgR19NQVhJTlQsIChndWludDY0KSBHX01BWElOVDY0ICsgMSk7Ci0gIHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIsICZlbmQpOwotICBmYWlsX3VubGVzcyAocyA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGVuZCA9PSBOVUxMKTsKLSAgZ19mcmVlIChzdHIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0ZXBwZWRfcmFuZ2VfY29sbGVjdGlvbikKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBjb25zdCBHVmFsdWUgKnY7Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiZm9vL2JhciIsICJyYW5nZSIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgOCwgMTIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAocyAhPSBOVUxMKTsKLSAgdiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAicmFuZ2UiKTsKLSAgZmFpbF91bmxlc3MgKHYgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHYpID09IDgpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4ICh2KSA9PSAxMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9zdGVwICh2KSA9PSAxKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJmb28vYmFyIiwgInJhbmdlIiwgR1NUX1RZUEVfSU5UNjRfUkFOR0UsIChnaW50NjQpIDgsCi0gICAgICAoZ2ludDY0KSAxMiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzICE9IE5VTEwpOwotICB2ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJyYW5nZSIpOwotICBmYWlsX3VubGVzcyAodiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWluICh2KSA9PSA4KTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4ICh2KSA9PSAxMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXAgKHYpID09IDEpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0ZXBwZWRfaW50X3JhbmdlX3BhcnNpbmcpCi17Ci0gIGdjaGFyICpzdHI7Ci0gIGd1aW50IG47Ci0gIGdjaGFyICplbmQgPSBOVUxMOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgc3RhdGljIGNvbnN0IGdjaGFyICpnb29kX3Jhbmdlc1tdID0gewotICAgICJbMCwgMSwgMV0iLAotICAgICJbLTIsIDIsIDJdIiwKLSAgICAiWzE2LCA0MDk2LCAxNl0iLAotICB9OwotCi0gIHN0YXRpYyBjb25zdCBnY2hhciAqYmFkX3Jhbmdlc1tdID0gewotICAgICJbMCwgMSwgLTFdIiwKLSAgICAiWzEsIDIsIDJdIiwKLSAgICAiWzIsIDMsIDJdIiwKLSAgICAiWzAsIDAsIDBdIiwKLSAgfTsKLQotICAvKiBjaGVjayB3ZSBjYW4gcGFyc2UgZ29vZCByYW5nZXMgKi8KLSAgZm9yIChuID0gMDsgbiA8IEdfTl9FTEVNRU5UUyAoZ29vZF9yYW5nZXMpOyArK24pIHsKLSAgICBzdHIgPSBnX3N0cmR1cF9wcmludGYgKCJmb28vYmFyLCByYW5nZT0lcyIsIGdvb2RfcmFuZ2VzW25dKTsKLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyLCAmZW5kKTsKLSAgICBmYWlsX3VubGVzcyAocyAhPSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoKmVuZCA9PSAnXDAnKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICAgIGdfZnJlZSAoc3RyKTsKLSAgfQotCi0gIC8qIGNoZWNrIHdlIGNhbm5vdCBwYXJzZSBiYWQgcmFuZ2VzICovCi0gIGZvciAobiA9IDA7IG4gPCBHX05fRUxFTUVOVFMgKGJhZF9yYW5nZXMpOyArK24pIHsKLSAgICBzdHIgPSBnX3N0cmR1cF9wcmludGYgKCJmb28vYmFyLCByYW5nZT0lcyIsIGJhZF9yYW5nZXNbbl0pOwotICAgIEFTU0VSVF9DUklUSUNBTCAocyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKHN0ciwgJmVuZCkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7Ci0gICAgZ19mcmVlIChzdHIpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RlcHBlZF9pbnRfcmFuZ2Vfb3BzKQotewotICBnY2hhciAqc3RyMSwgKnN0cjIsICpzdHIzOwotICBndWludCBuOwotICBHc3RTdHJ1Y3R1cmUgKnMxLCAqczIsICpzMzsKLSAgY29uc3QgR1ZhbHVlICp2MSwgKnYyLCAqdjM7Ci0KLSAgc3RhdGljIGNvbnN0IHN0cnVjdAotICB7Ci0gICAgY29uc3QgZ2NoYXIgKnNldDE7Ci0gICAgY29uc3QgZ2NoYXIgKm9wOwotICAgIGNvbnN0IGdjaGFyICpzZXQyOwotICAgIGNvbnN0IGdjaGFyICpyZXN1bHQ7Ci0gIH0gcmFuZ2VzW10gPSB7Ci0gICAgewotICAgICJbMTYsIDQwOTYsIDE2XSIsICJpbnRlciIsICJbMTAwLCAyMDAsIDEwXSIsICIxNjAifSwgewotICAgICJbMTYsIDQwOTYsIDE2XSIsICJpbnRlciIsICJbMTAwLCAyMDAsIDEwMF0iLCBOVUxMfSwgewotICAgICJbMTYsIDQwOTYsIDE2XSIsICJpbnRlciIsICJbMCwgNTEyLCAyNTZdIiwgIlsyNTYsIDUxMiwgMjU2XSJ9LCB7Ci0gICAgIlsxNiwgMzIsIDE2XSIsICJ1bmlvbiIsICJbMzIsIDk2LCAxNl0iLCAiWzE2LCA5NiwgMTZdIn0sIHsKLSAgICAiWzE2LCAzMiwgMTZdIiwgInVuaW9uIiwgIls0OCwgOTYsIDE2XSIsICJbMTYsIDk2LCAxNl0ifSwgewotICAgICJbMTEyLCAxOTIsIDE2XSIsICJ1bmlvbiIsICJbNDgsIDk2LCAxNl0iLCAiWzQ4LCAxOTIsIDE2XSJ9LCB7Ci0gICAgIlsxNiwgMzIsIDE2XSIsICJ1bmlvbiIsICJbNjQsIDk2LCAxNl0iLCBOVUxMfSwgewotICAiWzExMiwgMTkyLCAxNl0iLCAidW5pb24iLCAiWzQ4LCA5NiwgOF0iLCBOVUxMfSx9OwotCi0gIGZvciAobiA9IDA7IG4gPCBHX05fRUxFTUVOVFMgKHJhbmdlcyk7ICsrbikgewotICAgIGdjaGFyICplbmQgPSBOVUxMOwotICAgIEdWYWx1ZSBkZXN0ID0geyAwIH07Ci0gICAgZ2Jvb2xlYW4gcmV0OwotCi0gICAgc3RyMSA9IGdfc3RyZHVwX3ByaW50ZiAoImZvby9iYXIsIHJhbmdlPSVzIiwgcmFuZ2VzW25dLnNldDEpOwotICAgIHMxID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyMSwgJmVuZCk7Ci0gICAgZmFpbF91bmxlc3MgKHMxICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzICgqZW5kID09ICdcMCcpOwotICAgIHYxID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMxLCAicmFuZ2UiKTsKLSAgICBmYWlsX3VubGVzcyAodjEgIT0gTlVMTCk7Ci0KLSAgICBzdHIyID0gZ19zdHJkdXBfcHJpbnRmICgiZm9vL2JhciwgcmFuZ2U9JXMiLCByYW5nZXNbbl0uc2V0Mik7Ci0gICAgczIgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nIChzdHIyLCAmZW5kKTsKLSAgICBmYWlsX3VubGVzcyAoczIgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKCplbmQgPT0gJ1wwJyk7Ci0gICAgdjIgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoczIsICJyYW5nZSIpOwotICAgIGZhaWxfdW5sZXNzICh2MiAhPSBOVUxMKTsKLQotICAgIGlmICghc3RyY21wIChyYW5nZXNbbl0ub3AsICJpbnRlciIpKSB7Ci0gICAgICByZXQgPSBnc3RfdmFsdWVfaW50ZXJzZWN0ICgmZGVzdCwgdjEsIHYyKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKHJhbmdlc1tuXS5vcCwgInVuaW9uIikpIHsKLSAgICAgIHJldCA9IGdzdF92YWx1ZV91bmlvbiAoJmRlc3QsIHYxLCB2Mik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZhaWxfdW5sZXNzIChGQUxTRSk7Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAocmFuZ2VzW25dLnJlc3VsdCkgewotICAgICAgZmFpbF91bmxlc3MgKHJldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZhaWxfdW5sZXNzICghcmV0KTsKLSAgICB9Ci0KLSAgICBpZiAocmV0KSB7Ci0gICAgICBzdHIzID0gZ19zdHJkdXBfcHJpbnRmICgiZm9vL2JhciwgcmFuZ2U9JXMiLCByYW5nZXNbbl0ucmVzdWx0KTsKLSAgICAgIHMzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoc3RyMywgJmVuZCk7Ci0gICAgICBmYWlsX3VubGVzcyAoczMgIT0gTlVMTCk7Ci0gICAgICBmYWlsX3VubGVzcyAoKmVuZCA9PSAnXDAnKTsKLSAgICAgIHYzID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMzLCAicmFuZ2UiKTsKLSAgICAgIGZhaWxfdW5sZXNzICh2MyAhPSBOVUxMKTsKLQotICAgICAgaWYgKGdzdF92YWx1ZV9jb21wYXJlICgmZGVzdCwgdjMpICE9IEdTVF9WQUxVRV9FUVVBTCkgewotICAgICAgICBHU1RfRVJST1IgKCIlcyAlcyAlcyB5aWVsZGVkICVzLCBleHBlY3RlZCAlcyIsIHN0cjEsIHJhbmdlc1tuXS5vcCwgc3RyMiwKLSAgICAgICAgICAgIGdzdF92YWx1ZV9zZXJpYWxpemUgKCZkZXN0KSwgZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAodjMpKTsKLSAgICAgICAgZmFpbF91bmxlc3MgKEZBTFNFKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzMyk7Ci0gICAgICBnX2ZyZWUgKHN0cjMpOwotCi0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gICAgfQotCi0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzMik7Ci0gICAgZ19mcmVlIChzdHIyKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMxKTsKLSAgICBnX2ZyZWUgKHN0cjEpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF92YWx1ZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RWYWx1ZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZXNlcmlhbGl6ZV9idWZmZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2VyaWFsaXplX2J1ZmZlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZXNlcmlhbGl6ZV9naW50KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2dpbnRfZmFpbHVyZXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfZ3VpbnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfZ3VpbnRfZmFpbHVyZXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfZ2ludDY0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2d1aW50NjQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfZ3VjaGFyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2dzdGZyYWN0aW9uKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2JpdG1hc2spOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2VyaWFsaXplX2ZsYWdzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2ZsYWdzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NlcmlhbGl6ZV9kZXNlcmlhbGl6ZV9mb3JtYXRfZW51bSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVzZXJpYWxpemVfc3RyaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZhbHVlX2NvbXBhcmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfaW50ZXJzZWN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZhbHVlX3N1YnRyYWN0X2ludCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92YWx1ZV9zdWJ0cmFjdF9pbnQ2NCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92YWx1ZV9zdWJ0cmFjdF9kb3VibGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fcmFuZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmFsdWVfc3VidHJhY3RfZnJhY3Rpb25fbGlzdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kYXRlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RhdGVfdGltZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mcmFjdGlvbl9yYW5nZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZXJpYWxpemVfZGVzZXJpYWxpemVfY2Fwcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRfcmFuZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50NjRfcmFuZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2VyaWFsaXplX2ludDY0X3JhbmdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Rlc2VyaWFsaXplX2ludF9yYW5nZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGVwcGVkX3JhbmdlX2NvbGxlY3Rpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3RlcHBlZF9pbnRfcmFuZ2VfcGFyc2luZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGVwcGVkX2ludF9yYW5nZV9vcHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmxhZ3NldCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfdmFsdWUpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9hcm0uaCBiL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfYXJtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NjAyNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9hcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLQotR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdID0gewotICB7IkdzdEFsbG9jYXRpb25QYXJhbXMiLCBzaXplb2YgKEdzdEFsbG9jYXRpb25QYXJhbXMpLCAzMn0sCi0gIHsiR3N0QWxsb2NhdG9yIiwgc2l6ZW9mIChHc3RBbGxvY2F0b3IpLCAxMTJ9LAotICB7IkdzdEFsbG9jYXRvckNsYXNzIiwgc2l6ZW9mIChHc3RBbGxvY2F0b3JDbGFzcyksIDExNn0sCi0gIHsiR3N0QmluQ2xhc3MiLCBzaXplb2YgKEdzdEJpbkNsYXNzKSwgMjkyfSwKLSAgeyJHc3RCaW4iLCBzaXplb2YgKEdzdEJpbiksIDI0OH0sCi0gIHsiR3N0QnVmZmVyIiwgc2l6ZW9mIChHc3RCdWZmZXIpLCA4MH0sCi0gIHsiR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMiLCBzaXplb2YgKEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zKSwgNDh9LAotICB7IkdzdEJ1ZmZlclBvb2wiLCBzaXplb2YgKEdzdEJ1ZmZlclBvb2wpLCA4OH0sCi0gIHsiR3N0QnVmZmVyUG9vbENsYXNzIiwgc2l6ZW9mIChHc3RCdWZmZXJQb29sQ2xhc3MpLCAxNDR9LAotICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDExNn0sCi0gIHsiR3N0QnVzIiwgc2l6ZW9mIChHc3RCdXMpLCA4OH0sCi0gIHsiR3N0Q2FwcyIsIHNpemVvZiAoR3N0Q2FwcyksIDM2fSwKLSAgeyJHc3RDbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3RDbG9ja0NsYXNzKSwgMTMyfSwKLSAgeyJHc3RDbG9ja0VudHJ5Iiwgc2l6ZW9mIChHc3RDbG9ja0VudHJ5KSwgNzJ9LAotICB7IkdzdENsb2NrIiwgc2l6ZW9mIChHc3RDbG9jayksIDg4fSwKLSAgeyJHc3RDb250cm9sQmluZGluZyIsIHNpemVvZiAoR3N0Q29udHJvbEJpbmRpbmcpLCA5Nn0sCi0gIHsiR3N0Q29udHJvbEJpbmRpbmdDbGFzcyIsIHNpemVvZiAoR3N0Q29udHJvbEJpbmRpbmdDbGFzcyksIDEyNH0sCi0gIHsiR3N0Q29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0Q29udHJvbFNvdXJjZSksIDg4fSwKLSAgeyJHc3RDb250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdENvbnRyb2xTb3VyY2VDbGFzcyksIDEwOH0sCi0gIHsiR3N0RGVidWdDYXRlZ29yeSIsIHNpemVvZiAoR3N0RGVidWdDYXRlZ29yeSksIDE2fSwKLSAgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksIDI0OH0sCi0gIHsiR3N0RWxlbWVudCIsIHNpemVvZiAoR3N0RWxlbWVudCksIDE4NH0sCi0gIHsiR3N0RXZlbnQiLCBzaXplb2YgKEdzdEV2ZW50KSwgNTZ9LAotICB7IkdzdEZvcm1hdERlZmluaXRpb24iLCBzaXplb2YgKEdzdEZvcm1hdERlZmluaXRpb24pLCAxNn0sCi0gIHsiR3N0R2hvc3RQYWRDbGFzcyIsIHNpemVvZiAoR3N0R2hvc3RQYWRDbGFzcyksIDEzNn0sCi0gIHsiR3N0R2hvc3RQYWQiLCBzaXplb2YgKEdzdEdob3N0UGFkKSwgMzIwfSwKLSAgeyJHc3RJdGVyYXRvciIsIHNpemVvZiAoR3N0SXRlcmF0b3IpLCA2MH0sCi0gIHsiR3N0TWVtb3J5Iiwgc2l6ZW9mIChHc3RNZW1vcnkpLCA2MH0sCi0gIHsiR3N0TWFwSW5mbyIsIHNpemVvZiAoR3N0TWFwSW5mbyksIDUyfSwKLSAgeyJHc3RNZXNzYWdlIiwgc2l6ZW9mIChHc3RNZXNzYWdlKSwgODB9LAotICB7IkdzdE1ldGEiLCBzaXplb2YgKEdzdE1ldGEpLCA4fSwKLSAgeyJHc3RNZXRhVHJhbnNmb3JtQ29weSIsIHNpemVvZiAoR3N0TWV0YVRyYW5zZm9ybUNvcHkpLCAxMn0sCi0gIHsiR3N0TWV0YUluZm8iLCBzaXplb2YgKEdzdE1ldGFJbmZvKSwgNDB9LAotICB7IkdzdE1pbmlPYmplY3QiLCBzaXplb2YgKEdzdE1pbmlPYmplY3QpLCAzNn0sCi0gIHsiR3N0T2JqZWN0Q2xhc3MiLCBzaXplb2YgKEdzdE9iamVjdENsYXNzKSwgOTJ9LAotICB7IkdzdE9iamVjdCIsIHNpemVvZiAoR3N0T2JqZWN0KSwgNjR9LAotICB7IkdzdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RQYWRDbGFzcyksIDExNn0sCi0gIHsiR3N0UGFkIiwgc2l6ZW9mIChHc3RQYWQpLCAzMDR9LAotICB7IkdzdFBhZFByb2JlSW5mbyIsIHNpemVvZiAoR3N0UGFkUHJvYmVJbmZvKSwgNDh9LAotICB7IkdzdFBhZFRlbXBsYXRlQ2xhc3MiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlQ2xhc3MpLCAxMTJ9LAotICB7IkdzdFBhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RQYWRUZW1wbGF0ZSksIDk2fSwKLSAgeyJHc3RQYXJhbVNwZWNGcmFjdGlvbiIsIHNpemVvZiAoR3N0UGFyYW1TcGVjRnJhY3Rpb24pLCA2NH0sCi0gIHsiR3N0UGlwZWxpbmVDbGFzcyIsIHNpemVvZiAoR3N0UGlwZWxpbmVDbGFzcyksIDMwOH0sCi0gIHsiR3N0UGlwZWxpbmUiLCBzaXplb2YgKEdzdFBpcGVsaW5lKSwgMjk2fSwKLSAgeyJHc3RQbHVnaW5EZXNjIiwgc2l6ZW9mIChHc3RQbHVnaW5EZXNjKSwgNjB9LAotICB7IkdzdFByb3h5UGFkQ2xhc3MiLCBzaXplb2YgKEdzdFByb3h5UGFkQ2xhc3MpLCAxMjB9LAotICB7IkdzdFByb3h5UGFkIiwgc2l6ZW9mIChHc3RQcm94eVBhZCksIDMxMn0sCi0gIHsiR3N0UXVlcnkiLCBzaXplb2YgKEdzdFF1ZXJ5KSwgNDB9LAotICB7IkdzdFJlZ2lzdHJ5Q2xhc3MiLCBzaXplb2YgKEdzdFJlZ2lzdHJ5Q2xhc3MpLCA5Mn0sCi0gIHsiR3N0UmVnaXN0cnkiLCBzaXplb2YgKEdzdFJlZ2lzdHJ5KSwgNzJ9LAotICB7IkdzdFNlZ21lbnQiLCBzaXplb2YgKEdzdFNlZ21lbnQpLCAxMDR9LAotICB7IkdzdFN0YXRpY0NhcHMiLCBzaXplb2YgKEdzdFN0YXRpY0NhcHMpLCAyNH0sCi0gIHsiR3N0U3RhdGljUGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFN0YXRpY1BhZFRlbXBsYXRlKSwgMzZ9LAotICB7IkdzdFN0cnVjdHVyZSIsIHNpemVvZiAoR3N0U3RydWN0dXJlKSwgOH0sCi0gIHsiR3N0U3lzdGVtQ2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2tDbGFzcyksIDE0OH0sCi0gIHsiR3N0U3lzdGVtQ2xvY2siLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrKSwgMTEyfSwKLSAgeyJHc3RUYWdMaXN0Iiwgc2l6ZW9mIChHc3RUYWdMaXN0KSwgMzZ9LAotICB7IkdzdFRhc2tDbGFzcyIsIHNpemVvZiAoR3N0VGFza0NsYXNzKSwgMTEyfSwKLSAgeyJHc3RUYXNrIiwgc2l6ZW9mIChHc3RUYXNrKSwgMTI4fSwKLSAgeyJHc3RUYXNrUG9vbENsYXNzIiwgc2l6ZW9mIChHc3RUYXNrUG9vbENsYXNzKSwgMTI0fSwKLSAgeyJHc3RUYXNrUG9vbCIsIHNpemVvZiAoR3N0VGFza1Bvb2wpLCA4OH0sCi0gIHsiR3N0VGltZWRWYWx1ZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZSksIDE2fSwKLSAgeyJHc3RUeXBlRmluZCIsIHNpemVvZiAoR3N0VHlwZUZpbmQpLCAzMn0sCi0gIHsiR3N0VmFsdWVUYWJsZSIsIHNpemVvZiAoR3N0VmFsdWVUYWJsZSksIDMyfSwKLSAge05VTEwsIDAsIDB9Ci19OwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9ocHBhLmggYi90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2hwcGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc5NDU4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2hwcGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLXN0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7Ci0gIHsiR3N0QWxsb2NhdGlvblBhcmFtcyIsIHNpemVvZiAoR3N0QWxsb2NhdGlvblBhcmFtcyksIDY0fSwKLSAgeyJHc3RBbGxvY2F0b3IiLCBzaXplb2YgKEdzdEFsbG9jYXRvciksIDE3Nn0sCi0gIHsiR3N0QWxsb2NhdG9yQ2xhc3MiLCBzaXplb2YgKEdzdEFsbG9jYXRvckNsYXNzKSwgMjMyfSwKLSAgeyJHc3RCaW5DbGFzcyIsIHNpemVvZiAoR3N0QmluQ2xhc3MpLCA1NzZ9LAotICB7IkdzdEJpbiIsIHNpemVvZiAoR3N0QmluKSwgMzc2fSwKLSAgeyJHc3RCdWZmZXIiLCBzaXplb2YgKEdzdEJ1ZmZlciksIDExMn0sCi0gIHsiR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMiLCBzaXplb2YgKEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zKSwgNjR9LAotICB7IkdzdEJ1ZmZlclBvb2wiLCBzaXplb2YgKEdzdEJ1ZmZlclBvb2wpLCAxMzZ9LAotICB7IkdzdEJ1ZmZlclBvb2xDbGFzcyIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbENsYXNzKSwgMjg4fSwKLSAgeyJHc3RCdXNDbGFzcyIsIHNpemVvZiAoR3N0QnVzQ2xhc3MpLCAyMzJ9LAotICB7IkdzdEJ1cyIsIHNpemVvZiAoR3N0QnVzKSwgMTI4fSwKLSAgeyJHc3RDYXBzIiwgc2l6ZW9mIChHc3RDYXBzKSwgNjR9LAotICB7IkdzdENsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdENsb2NrQ2xhc3MpLCAyNjR9LAotICB7IkdzdENsb2NrRW50cnkiLCBzaXplb2YgKEdzdENsb2NrRW50cnkpLCAxMTJ9LAotICB7IkdzdENsb2NrIiwgc2l6ZW9mIChHc3RDbG9jayksIDEyOH0sCi0gIHsiR3N0Q29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdENvbnRyb2xCaW5kaW5nKSwgMTUyfSwKLSAgeyJHc3RDb250cm9sQmluZGluZ0NsYXNzIiwgc2l6ZW9mIChHc3RDb250cm9sQmluZGluZ0NsYXNzKSwgMjQ4fSwKLSAgeyJHc3RDb250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RDb250cm9sU291cmNlKSwgMTM2fSwKLSAgeyJHc3RDb250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdENvbnRyb2xTb3VyY2VDbGFzcyksIDIxNn0sCi0gIHsiR3N0RGVidWdDYXRlZ29yeSIsIHNpemVvZiAoR3N0RGVidWdDYXRlZ29yeSksIDI0fSwKLSAgeyJHc3RFbGVtZW50Q2xhc3MiLCBzaXplb2YgKEdzdEVsZW1lbnRDbGFzcyksIDQ4OH0sCi0gIHsiR3N0RWxlbWVudCIsIHNpemVvZiAoR3N0RWxlbWVudCksIDI2NH0sCi0gIHsiR3N0RXZlbnQiLCBzaXplb2YgKEdzdEV2ZW50KSwgODh9LAotICB7IkdzdEZvcm1hdERlZmluaXRpb24iLCBzaXplb2YgKEdzdEZvcm1hdERlZmluaXRpb24pLCAzMn0sCi0gIHsiR3N0R2hvc3RQYWRDbGFzcyIsIHNpemVvZiAoR3N0R2hvc3RQYWRDbGFzcyksIDI3Mn0sCi0gIHsiR3N0R2hvc3RQYWQiLCBzaXplb2YgKEdzdEdob3N0UGFkKSwgNTM2fSwKLSAgeyJHc3RJdGVyYXRvciIsIHNpemVvZiAoR3N0SXRlcmF0b3IpLCAxMjB9LAotICB7IkdzdE1lbW9yeSIsIHNpemVvZiAoR3N0TWVtb3J5KSwgMTEyfSwKLSAgeyJHc3RNYXBJbmZvIiwgc2l6ZW9mIChHc3RNYXBJbmZvKSwgMTA0fSwKLSAgeyJHc3RNZXNzYWdlIiwgc2l6ZW9mIChHc3RNZXNzYWdlKSwgMTIwfSwKLSAgeyJHc3RNZXRhIiwgc2l6ZW9mIChHc3RNZXRhKSwgMTZ9LAotICB7IkdzdE1ldGFUcmFuc2Zvcm1Db3B5Iiwgc2l6ZW9mIChHc3RNZXRhVHJhbnNmb3JtQ29weSksIDI0fSwKLSAgeyJHc3RNZXRhSW5mbyIsIHNpemVvZiAoR3N0TWV0YUluZm8pLCA4MH0sCi0gIHsiR3N0TWluaU9iamVjdCIsIHNpemVvZiAoR3N0TWluaU9iamVjdCksIDY0fSwKLSAgeyJHc3RPYmplY3RDbGFzcyIsIHNpemVvZiAoR3N0T2JqZWN0Q2xhc3MpLCAxODR9LAotICB7IkdzdE9iamVjdCIsIHNpemVvZiAoR3N0T2JqZWN0KSwgODh9LAotICB7IkdzdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RQYWRDbGFzcyksIDIzMn0sCi0gIHsiR3N0UGFkIiwgc2l6ZW9mIChHc3RQYWQpLCA1MjB9LAotICB7IkdzdFBhZFByb2JlSW5mbyIsIHNpemVvZiAoR3N0UGFkUHJvYmVJbmZvKSwgNzJ9LAotICB7IkdzdFBhZFRlbXBsYXRlQ2xhc3MiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlQ2xhc3MpLCAyMjR9LAotICB7IkdzdFBhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RQYWRUZW1wbGF0ZSksIDE0NH0sCi0gIHsiR3N0UGFyYW1TcGVjRnJhY3Rpb24iLCBzaXplb2YgKEdzdFBhcmFtU3BlY0ZyYWN0aW9uKSwgOTZ9LAotICB7IkdzdFBpcGVsaW5lQ2xhc3MiLCBzaXplb2YgKEdzdFBpcGVsaW5lQ2xhc3MpLCA2MDh9LAotICB7IkdzdFBpcGVsaW5lIiwgc2l6ZW9mIChHc3RQaXBlbGluZSksIDQ0MH0sCi0gIHsiR3N0UGx1Z2luRGVzYyIsIHNpemVvZiAoR3N0UGx1Z2luRGVzYyksIDExMn0sCi0gIHsiR3N0UHJveHlQYWRDbGFzcyIsIHNpemVvZiAoR3N0UHJveHlQYWRDbGFzcyksIDI0MH0sCi0gIHsiR3N0UHJveHlQYWQiLCBzaXplb2YgKEdzdFByb3h5UGFkKSwgNTI4fSwKLSAgeyJHc3RRdWVyeSIsIHNpemVvZiAoR3N0UXVlcnkpLCA3Mn0sCi0gIHsiR3N0UmVnaXN0cnlDbGFzcyIsIHNpemVvZiAoR3N0UmVnaXN0cnlDbGFzcyksIDE4NH0sCi0gIHsiR3N0UmVnaXN0cnkiLCBzaXplb2YgKEdzdFJlZ2lzdHJ5KSwgOTZ9LAotICB7IkdzdFNlZ21lbnQiLCBzaXplb2YgKEdzdFNlZ21lbnQpLCAxMjB9LAotICB7IkdzdFN0YXRpY0NhcHMiLCBzaXplb2YgKEdzdFN0YXRpY0NhcHMpLCA0OH0sCi0gIHsiR3N0U3RhdGljUGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFN0YXRpY1BhZFRlbXBsYXRlKSwgNjR9LAotICB7IkdzdFN0cnVjdHVyZSIsIHNpemVvZiAoR3N0U3RydWN0dXJlKSwgMTZ9LAotICB7IkdzdFN5c3RlbUNsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrQ2xhc3MpLCAyOTZ9LAotICB7IkdzdFN5c3RlbUNsb2NrIiwgc2l6ZW9mIChHc3RTeXN0ZW1DbG9jayksIDE2OH0sCi0gIHsiR3N0VGFnTGlzdCIsIHNpemVvZiAoR3N0VGFnTGlzdCksIDY0LH0sCi0gIHsiR3N0VGFza0NsYXNzIiwgc2l6ZW9mIChHc3RUYXNrQ2xhc3MpLCAyMjR9LAotICB7IkdzdFRhc2siLCBzaXplb2YgKEdzdFRhc2spLCAyMDB9LAotICB7IkdzdFRhc2tQb29sQ2xhc3MiLCBzaXplb2YgKEdzdFRhc2tQb29sQ2xhc3MpLCAyNDh9LAotICB7IkdzdFRhc2tQb29sIiwgc2l6ZW9mIChHc3RUYXNrUG9vbCksIDEyOH0sCi0gIHsiR3N0VGltZWRWYWx1ZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZSksIDE2fSwKLSAgeyJHc3RUeXBlRmluZCIsIHNpemVvZiAoR3N0VHlwZUZpbmQpLCA2NH0sCi0gIHsiR3N0VmFsdWVUYWJsZSIsIHNpemVvZiAoR3N0VmFsdWVUYWJsZSksIDY0fSwKLSAge05VTEwsIDAsIDB9Ci19OwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9pMzg2LmggYi90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzNjNlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X2kzODYuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLXN0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7Ci0gIHsiR3N0QWxsb2NhdGlvblBhcmFtcyIsIHNpemVvZiAoR3N0QWxsb2NhdGlvblBhcmFtcyksIDMyfSwKLSAgeyJHc3RBbGxvY2F0b3IiLCBzaXplb2YgKEdzdEFsbG9jYXRvciksIDEwMH0sCi0gIHsiR3N0QWxsb2NhdG9yQ2xhc3MiLCBzaXplb2YgKEdzdEFsbG9jYXRvckNsYXNzKSwgMTE2fSwKLSAgeyJHc3RCaW5DbGFzcyIsIHNpemVvZiAoR3N0QmluQ2xhc3MpLCAyOTJ9LAotICB7IkdzdEJpbiIsIHNpemVvZiAoR3N0QmluKSwgMjMyfSwKLSAgeyJHc3RCdWZmZXIiLCBzaXplb2YgKEdzdEJ1ZmZlciksIDgwfSwKLSAgeyJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMpLCA0MH0sCi0gIHsiR3N0QnVmZmVyUG9vbCIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbCksIDgwfSwKLSAgeyJHc3RCdWZmZXJQb29sQ2xhc3MiLCBzaXplb2YgKEdzdEJ1ZmZlclBvb2xDbGFzcyksIDE0NH0sCi0gIHsiR3N0QnVzQ2xhc3MiLCBzaXplb2YgKEdzdEJ1c0NsYXNzKSwgMTE2fSwKLSAgeyJHc3RCdXMiLCBzaXplb2YgKEdzdEJ1cyksIDc2fSwKLSAgeyJHc3RDYXBzIiwgc2l6ZW9mIChHc3RDYXBzKSwgMzZ9LAotICB7IkdzdENsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdENsb2NrQ2xhc3MpLCAxMzJ9LAotICB7IkdzdENsb2NrRW50cnkiLCBzaXplb2YgKEdzdENsb2NrRW50cnkpLCA2OH0sCi0gIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgNzZ9LAotICB7IkdzdENvbnRyb2xCaW5kaW5nIiwgc2l6ZW9mIChHc3RDb250cm9sQmluZGluZyksIDg4fSwKLSAgeyJHc3RDb250cm9sQmluZGluZ0NsYXNzIiwgc2l6ZW9mIChHc3RDb250cm9sQmluZGluZ0NsYXNzKSwgMTI0fSwKLSAgeyJHc3RDb250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RDb250cm9sU291cmNlKSwgODB9LAotICB7IkdzdENvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0Q29udHJvbFNvdXJjZUNsYXNzKSwgMTA4fSwKLSAgeyJHc3REZWJ1Z0NhdGVnb3J5Iiwgc2l6ZW9mIChHc3REZWJ1Z0NhdGVnb3J5KSwgMTZ9LAotICB7IkdzdEVsZW1lbnRDbGFzcyIsIHNpemVvZiAoR3N0RWxlbWVudENsYXNzKSwgMjQ4fSwKLSAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMTcyfSwKLSAgeyJHc3RFdmVudCIsIHNpemVvZiAoR3N0RXZlbnQpLCA1Mn0sCi0gIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDE2fSwKLSAgeyJHc3RHaG9zdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RHaG9zdFBhZENsYXNzKSwgMTM2fSwKLSAgeyJHc3RHaG9zdFBhZCIsIHNpemVvZiAoR3N0R2hvc3RQYWQpLCAyOTZ9LAotICB7IkdzdEl0ZXJhdG9yIiwgc2l6ZW9mIChHc3RJdGVyYXRvciksIDYwfSwKLSAgeyJHc3RNZW1vcnkiLCBzaXplb2YgKEdzdE1lbW9yeSksIDYwfSwKLSAgeyJHc3RNYXBJbmZvIiwgc2l6ZW9mIChHc3RNYXBJbmZvKSwgNTJ9LAotICB7IkdzdE1lc3NhZ2UiLCBzaXplb2YgKEdzdE1lc3NhZ2UpLCA3Nn0sCi0gIHsiR3N0TWV0YSIsIHNpemVvZiAoR3N0TWV0YSksIDh9LAotICB7IkdzdE1ldGFUcmFuc2Zvcm1Db3B5Iiwgc2l6ZW9mIChHc3RNZXRhVHJhbnNmb3JtQ29weSksIDEyfSwKLSAgeyJHc3RNZXRhSW5mbyIsIHNpemVvZiAoR3N0TWV0YUluZm8pLCA0MH0sCi0gIHsiR3N0TWluaU9iamVjdCIsIHNpemVvZiAoR3N0TWluaU9iamVjdCksIDM2fSwKLSAgeyJHc3RPYmplY3RDbGFzcyIsIHNpemVvZiAoR3N0T2JqZWN0Q2xhc3MpLCA5Mn0sCi0gIHsiR3N0T2JqZWN0Iiwgc2l6ZW9mIChHc3RPYmplY3QpLCA1Nn0sCi0gIHsiR3N0UGFkQ2xhc3MiLCBzaXplb2YgKEdzdFBhZENsYXNzKSwgMTE2fSwKLSAgeyJHc3RQYWQiLCBzaXplb2YgKEdzdFBhZCksIDI4OH0sCi0gIHsiR3N0UGFkUHJvYmVJbmZvIiwgc2l6ZW9mIChHc3RQYWRQcm9iZUluZm8pLCA0MH0sCi0gIHsiR3N0UGFkVGVtcGxhdGVDbGFzcyIsIHNpemVvZiAoR3N0UGFkVGVtcGxhdGVDbGFzcyksIDExMn0sCi0gIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgODh9LAotICB7IkdzdFBhcmFtU3BlY0ZyYWN0aW9uIiwgc2l6ZW9mIChHc3RQYXJhbVNwZWNGcmFjdGlvbiksIDY0fSwKLSAgeyJHc3RQaXBlbGluZUNsYXNzIiwgc2l6ZW9mIChHc3RQaXBlbGluZUNsYXNzKSwgMzA4fSwKLSAgeyJHc3RQaXBlbGluZSIsIHNpemVvZiAoR3N0UGlwZWxpbmUpLCAyNzJ9LAotICB7IkdzdFBsdWdpbkRlc2MiLCBzaXplb2YgKEdzdFBsdWdpbkRlc2MpLCA2MH0sCi0gIHsiR3N0UHJveHlQYWRDbGFzcyIsIHNpemVvZiAoR3N0UHJveHlQYWRDbGFzcyksIDEyMH0sCi0gIHsiR3N0UHJveHlQYWQiLCBzaXplb2YgKEdzdFByb3h5UGFkKSwgMjkyfSwKLSAgeyJHc3RRdWVyeSIsIHNpemVvZiAoR3N0UXVlcnkpLCA0MH0sCi0gIHsiR3N0UmVnaXN0cnlDbGFzcyIsIHNpemVvZiAoR3N0UmVnaXN0cnlDbGFzcyksIDkyfSwKLSAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA2MH0sCi0gIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDk2fSwKLSAgeyJHc3RTdGF0aWNDYXBzIiwgc2l6ZW9mIChHc3RTdGF0aWNDYXBzKSwgMjR9LAotICB7IkdzdFN0YXRpY1BhZFRlbXBsYXRlIiwgc2l6ZW9mIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSksIDM2fSwKLSAgeyJHc3RTdHJ1Y3R1cmUiLCBzaXplb2YgKEdzdFN0cnVjdHVyZSksIDh9LAotICB7IkdzdFN5c3RlbUNsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrQ2xhc3MpLCAxNDh9LAotICB7IkdzdFN5c3RlbUNsb2NrIiwgc2l6ZW9mIChHc3RTeXN0ZW1DbG9jayksIDk2fSwKLSAgeyJHc3RUYWdMaXN0Iiwgc2l6ZW9mIChHc3RUYWdMaXN0KSwgMzZ9LAotICB7IkdzdFRhc2tDbGFzcyIsIHNpemVvZiAoR3N0VGFza0NsYXNzKSwgMTEyfSwKLSAgeyJHc3RUYXNrIiwgc2l6ZW9mIChHc3RUYXNrKSwgMTE2fSwKLSAgeyJHc3RUYXNrUG9vbENsYXNzIiwgc2l6ZW9mIChHc3RUYXNrUG9vbENsYXNzKSwgMTI0fSwKLSAgeyJHc3RUYXNrUG9vbCIsIHNpemVvZiAoR3N0VGFza1Bvb2wpLCA3Nn0sCi0gIHsiR3N0VGltZWRWYWx1ZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZSksIDE2fSwKLSAgeyJHc3RUeXBlRmluZCIsIHNpemVvZiAoR3N0VHlwZUZpbmQpLCAzMn0sCi0gIHsiR3N0VmFsdWVUYWJsZSIsIHNpemVvZiAoR3N0VmFsdWVUYWJsZSksIDMyfSwKLSAge05VTEwsIDAsIDB9Ci19OwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oIGIvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGMzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWMwMzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2dzdC9zdHJ1Y3RfcHBjMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLXN0YXRpYyBHc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7Ci0gIHsiR3N0QWxsb2NhdGlvblBhcmFtcyIsIHNpemVvZiAoR3N0QWxsb2NhdGlvblBhcmFtcyksIDMyfSwKLSAgeyJHc3RBbGxvY2F0b3IiLCBzaXplb2YgKEdzdEFsbG9jYXRvciksIDExMn0sCi0gIHsiR3N0QWxsb2NhdG9yQ2xhc3MiLCBzaXplb2YgKEdzdEFsbG9jYXRvckNsYXNzKSwgMTE2fSwKLSAgeyJHc3RCaW5DbGFzcyIsIHNpemVvZiAoR3N0QmluQ2xhc3MpLCAyOTJ9LAotICB7IkdzdEJpbiIsIHNpemVvZiAoR3N0QmluKSwgMjQ4fSwKLSAgeyJHc3RCdWZmZXIiLCBzaXplb2YgKEdzdEJ1ZmZlciksIDgwfSwKLSAgeyJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMpLCA0OH0sCi0gIHsiR3N0QnVmZmVyUG9vbCIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbCksIDg4fSwKLSAgeyJHc3RCdWZmZXJQb29sQ2xhc3MiLCBzaXplb2YgKEdzdEJ1ZmZlclBvb2xDbGFzcyksIDE0NH0sCi0gIHsiR3N0QnVzQ2xhc3MiLCBzaXplb2YgKEdzdEJ1c0NsYXNzKSwgMTE2fSwKLSAgeyJHc3RCdXMiLCBzaXplb2YgKEdzdEJ1cyksIDg4fSwKLSAgeyJHc3RDYXBzIiwgc2l6ZW9mIChHc3RDYXBzKSwgMzZ9LAotICB7IkdzdENsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdENsb2NrQ2xhc3MpLCAxMzJ9LAotICB7IkdzdENsb2NrRW50cnkiLCBzaXplb2YgKEdzdENsb2NrRW50cnkpLCA3Mn0sCi0gIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgODh9LAotICB7IkdzdENvbnRyb2xCaW5kaW5nIiwgc2l6ZW9mIChHc3RDb250cm9sQmluZGluZyksIDk2fSwKLSAgeyJHc3RDb250cm9sQmluZGluZ0NsYXNzIiwgc2l6ZW9mIChHc3RDb250cm9sQmluZGluZ0NsYXNzKSwgMTI0fSwKLSAgeyJHc3RDb250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RDb250cm9sU291cmNlKSwgODh9LAotICB7IkdzdENvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0Q29udHJvbFNvdXJjZUNsYXNzKSwgMTA4fSwKLSAgeyJHc3REZWJ1Z0NhdGVnb3J5Iiwgc2l6ZW9mIChHc3REZWJ1Z0NhdGVnb3J5KSwgMTZ9LAotICB7IkdzdEVsZW1lbnRDbGFzcyIsIHNpemVvZiAoR3N0RWxlbWVudENsYXNzKSwgMjQ4fSwKLSAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMTg0fSwKLSAgeyJHc3RFdmVudCIsIHNpemVvZiAoR3N0RXZlbnQpLCA1Nn0sCi0gIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDE2fSwKLSAgeyJHc3RHaG9zdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RHaG9zdFBhZENsYXNzKSwgMTM2fSwKLSAgeyJHc3RHaG9zdFBhZCIsIHNpemVvZiAoR3N0R2hvc3RQYWQpLCAzMjB9LAotICB7IkdzdEl0ZXJhdG9yIiwgc2l6ZW9mIChHc3RJdGVyYXRvciksIDYwfSwKLSAgeyJHc3RNZW1vcnkiLCBzaXplb2YgKEdzdE1lbW9yeSksIDYwfSwKLSAgeyJHc3RNYXBJbmZvIiwgc2l6ZW9mIChHc3RNYXBJbmZvKSwgNTJ9LAotICB7IkdzdE1lc3NhZ2UiLCBzaXplb2YgKEdzdE1lc3NhZ2UpLCA4MH0sCi0gIHsiR3N0TWV0YSIsIHNpemVvZiAoR3N0TWV0YSksIDh9LAotICB7IkdzdE1ldGFUcmFuc2Zvcm1Db3B5Iiwgc2l6ZW9mIChHc3RNZXRhVHJhbnNmb3JtQ29weSksIDEyfSwKLSAgeyJHc3RNZXRhSW5mbyIsIHNpemVvZiAoR3N0TWV0YUluZm8pLCA0MH0sCi0gIHsiR3N0TWluaU9iamVjdCIsIHNpemVvZiAoR3N0TWluaU9iamVjdCksIDM2fSwKLSAgeyJHc3RPYmplY3RDbGFzcyIsIHNpemVvZiAoR3N0T2JqZWN0Q2xhc3MpLCA5Mn0sCi0gIHsiR3N0T2JqZWN0Iiwgc2l6ZW9mIChHc3RPYmplY3QpLCA2NH0sCi0gIHsiR3N0UGFkQ2xhc3MiLCBzaXplb2YgKEdzdFBhZENsYXNzKSwgMTE2fSwKLSAgeyJHc3RQYWQiLCBzaXplb2YgKEdzdFBhZCksIDMwNH0sCi0gIHsiR3N0UGFkUHJvYmVJbmZvIiwgc2l6ZW9mIChHc3RQYWRQcm9iZUluZm8pLCA0OH0sCi0gIHsiR3N0UGFkVGVtcGxhdGVDbGFzcyIsIHNpemVvZiAoR3N0UGFkVGVtcGxhdGVDbGFzcyksIDExMn0sCi0gIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgOTZ9LAotICB7IkdzdFBhcmFtU3BlY0ZyYWN0aW9uIiwgc2l6ZW9mIChHc3RQYXJhbVNwZWNGcmFjdGlvbiksIDY0fSwKLSAgeyJHc3RQaXBlbGluZUNsYXNzIiwgc2l6ZW9mIChHc3RQaXBlbGluZUNsYXNzKSwgMzA4fSwKLSAgeyJHc3RQaXBlbGluZSIsIHNpemVvZiAoR3N0UGlwZWxpbmUpLCAyOTZ9LAotICB7IkdzdFBsdWdpbkRlc2MiLCBzaXplb2YgKEdzdFBsdWdpbkRlc2MpLCA2MH0sCi0gIHsiR3N0UHJveHlQYWRDbGFzcyIsIHNpemVvZiAoR3N0UHJveHlQYWRDbGFzcyksIDEyMH0sCi0gIHsiR3N0UHJveHlQYWQiLCBzaXplb2YgKEdzdFByb3h5UGFkKSwgMzEyfSwKLSAgeyJHc3RRdWVyeSIsIHNpemVvZiAoR3N0UXVlcnkpLCA0MH0sCi0gIHsiR3N0UmVnaXN0cnlDbGFzcyIsIHNpemVvZiAoR3N0UmVnaXN0cnlDbGFzcyksIDkyfSwKLSAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA3Mn0sCi0gIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDEwNH0sCi0gIHsiR3N0U3RhdGljQ2FwcyIsIHNpemVvZiAoR3N0U3RhdGljQ2FwcyksIDI0fSwKLSAgeyJHc3RTdGF0aWNQYWRUZW1wbGF0ZSIsIHNpemVvZiAoR3N0U3RhdGljUGFkVGVtcGxhdGUpLCAzNn0sCi0gIHsiR3N0U3RydWN0dXJlIiwgc2l6ZW9mIChHc3RTdHJ1Y3R1cmUpLCA4fSwKLSAgeyJHc3RTeXN0ZW1DbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3RTeXN0ZW1DbG9ja0NsYXNzKSwgMTQ4fSwKLSAgeyJHc3RTeXN0ZW1DbG9jayIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2spLCAxMTJ9LAotICB7IkdzdFRhZ0xpc3QiLCBzaXplb2YgKEdzdFRhZ0xpc3QpLCAzNn0sCi0gIHsiR3N0VGFza0NsYXNzIiwgc2l6ZW9mIChHc3RUYXNrQ2xhc3MpLCAxMTJ9LAotICB7IkdzdFRhc2siLCBzaXplb2YgKEdzdFRhc2spLCAxMjh9LAotICB7IkdzdFRhc2tQb29sQ2xhc3MiLCBzaXplb2YgKEdzdFRhc2tQb29sQ2xhc3MpLCAxMjR9LAotICB7IkdzdFRhc2tQb29sIiwgc2l6ZW9mIChHc3RUYXNrUG9vbCksIDg4fSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDMyfSwKLSAgeyJHc3RWYWx1ZVRhYmxlIiwgc2l6ZW9mIChHc3RWYWx1ZVRhYmxlKSwgMzJ9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0LmggYi90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3BwYzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3OTQ1ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9wcGM2NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotc3RhdGljIEdzdENoZWNrQUJJU3RydWN0IGxpc3RbXSA9IHsKLSAgeyJHc3RBbGxvY2F0aW9uUGFyYW1zIiwgc2l6ZW9mIChHc3RBbGxvY2F0aW9uUGFyYW1zKSwgNjR9LAotICB7IkdzdEFsbG9jYXRvciIsIHNpemVvZiAoR3N0QWxsb2NhdG9yKSwgMTc2fSwKLSAgeyJHc3RBbGxvY2F0b3JDbGFzcyIsIHNpemVvZiAoR3N0QWxsb2NhdG9yQ2xhc3MpLCAyMzJ9LAotICB7IkdzdEJpbkNsYXNzIiwgc2l6ZW9mIChHc3RCaW5DbGFzcyksIDU3Nn0sCi0gIHsiR3N0QmluIiwgc2l6ZW9mIChHc3RCaW4pLCAzNzZ9LAotICB7IkdzdEJ1ZmZlciIsIHNpemVvZiAoR3N0QnVmZmVyKSwgMTEyfSwKLSAgeyJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMpLCA2NH0sCi0gIHsiR3N0QnVmZmVyUG9vbCIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbCksIDEzNn0sCi0gIHsiR3N0QnVmZmVyUG9vbENsYXNzIiwgc2l6ZW9mIChHc3RCdWZmZXJQb29sQ2xhc3MpLCAyODh9LAotICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDIzMn0sCi0gIHsiR3N0QnVzIiwgc2l6ZW9mIChHc3RCdXMpLCAxMjh9LAotICB7IkdzdENhcHMiLCBzaXplb2YgKEdzdENhcHMpLCA2NH0sCi0gIHsiR3N0Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0Q2xvY2tDbGFzcyksIDI2NH0sCi0gIHsiR3N0Q2xvY2tFbnRyeSIsIHNpemVvZiAoR3N0Q2xvY2tFbnRyeSksIDExMn0sCi0gIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgMTI4fSwKLSAgeyJHc3RDb250cm9sQmluZGluZyIsIHNpemVvZiAoR3N0Q29udHJvbEJpbmRpbmcpLCAxNTJ9LAotICB7IkdzdENvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdENvbnRyb2xCaW5kaW5nQ2xhc3MpLCAyNDh9LAotICB7IkdzdENvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdENvbnRyb2xTb3VyY2UpLCAxMzZ9LAotICB7IkdzdENvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0Q29udHJvbFNvdXJjZUNsYXNzKSwgMjE2fSwKLSAgeyJHc3REZWJ1Z0NhdGVnb3J5Iiwgc2l6ZW9mIChHc3REZWJ1Z0NhdGVnb3J5KSwgMjR9LAotICB7IkdzdEVsZW1lbnRDbGFzcyIsIHNpemVvZiAoR3N0RWxlbWVudENsYXNzKSwgNDg4fSwKLSAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMjY0fSwKLSAgeyJHc3RFdmVudCIsIHNpemVvZiAoR3N0RXZlbnQpLCA4OH0sCi0gIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDMyfSwKLSAgeyJHc3RHaG9zdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RHaG9zdFBhZENsYXNzKSwgMjcyfSwKLSAgeyJHc3RHaG9zdFBhZCIsIHNpemVvZiAoR3N0R2hvc3RQYWQpLCA1MzZ9LAotICB7IkdzdEl0ZXJhdG9yIiwgc2l6ZW9mIChHc3RJdGVyYXRvciksIDEyMH0sCi0gIHsiR3N0TWVtb3J5Iiwgc2l6ZW9mIChHc3RNZW1vcnkpLCAxMTJ9LAotICB7IkdzdE1hcEluZm8iLCBzaXplb2YgKEdzdE1hcEluZm8pLCAxMDR9LAotICB7IkdzdE1lc3NhZ2UiLCBzaXplb2YgKEdzdE1lc3NhZ2UpLCAxMjB9LAotICB7IkdzdE1ldGEiLCBzaXplb2YgKEdzdE1ldGEpLCAxNn0sCi0gIHsiR3N0TWV0YVRyYW5zZm9ybUNvcHkiLCBzaXplb2YgKEdzdE1ldGFUcmFuc2Zvcm1Db3B5KSwgMjR9LAotICB7IkdzdE1ldGFJbmZvIiwgc2l6ZW9mIChHc3RNZXRhSW5mbyksIDgwfSwKLSAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgNjR9LAotICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDE4NH0sCi0gIHsiR3N0T2JqZWN0Iiwgc2l6ZW9mIChHc3RPYmplY3QpLCA4OH0sCi0gIHsiR3N0UGFkQ2xhc3MiLCBzaXplb2YgKEdzdFBhZENsYXNzKSwgMjMyfSwKLSAgeyJHc3RQYWQiLCBzaXplb2YgKEdzdFBhZCksIDUyMH0sCi0gIHsiR3N0UGFkUHJvYmVJbmZvIiwgc2l6ZW9mIChHc3RQYWRQcm9iZUluZm8pLCA3Mn0sCi0gIHsiR3N0UGFkVGVtcGxhdGVDbGFzcyIsIHNpemVvZiAoR3N0UGFkVGVtcGxhdGVDbGFzcyksIDIyNH0sCi0gIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgMTQ0fSwKLSAgeyJHc3RQYXJhbVNwZWNGcmFjdGlvbiIsIHNpemVvZiAoR3N0UGFyYW1TcGVjRnJhY3Rpb24pLCA5Nn0sCi0gIHsiR3N0UGlwZWxpbmVDbGFzcyIsIHNpemVvZiAoR3N0UGlwZWxpbmVDbGFzcyksIDYwOH0sCi0gIHsiR3N0UGlwZWxpbmUiLCBzaXplb2YgKEdzdFBpcGVsaW5lKSwgNDQwfSwKLSAgeyJHc3RQbHVnaW5EZXNjIiwgc2l6ZW9mIChHc3RQbHVnaW5EZXNjKSwgMTEyfSwKLSAgeyJHc3RQcm94eVBhZENsYXNzIiwgc2l6ZW9mIChHc3RQcm94eVBhZENsYXNzKSwgMjQwfSwKLSAgeyJHc3RQcm94eVBhZCIsIHNpemVvZiAoR3N0UHJveHlQYWQpLCA1Mjh9LAotICB7IkdzdFF1ZXJ5Iiwgc2l6ZW9mIChHc3RRdWVyeSksIDcyfSwKLSAgeyJHc3RSZWdpc3RyeUNsYXNzIiwgc2l6ZW9mIChHc3RSZWdpc3RyeUNsYXNzKSwgMTg0fSwKLSAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA5Nn0sCi0gIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDEyMH0sCi0gIHsiR3N0U3RhdGljQ2FwcyIsIHNpemVvZiAoR3N0U3RhdGljQ2FwcyksIDQ4fSwKLSAgeyJHc3RTdGF0aWNQYWRUZW1wbGF0ZSIsIHNpemVvZiAoR3N0U3RhdGljUGFkVGVtcGxhdGUpLCA2NH0sCi0gIHsiR3N0U3RydWN0dXJlIiwgc2l6ZW9mIChHc3RTdHJ1Y3R1cmUpLCAxNn0sCi0gIHsiR3N0U3lzdGVtQ2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2tDbGFzcyksIDI5Nn0sCi0gIHsiR3N0U3lzdGVtQ2xvY2siLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrKSwgMTY4fSwKLSAgeyJHc3RUYWdMaXN0Iiwgc2l6ZW9mIChHc3RUYWdMaXN0KSwgNjQsfSwKLSAgeyJHc3RUYXNrQ2xhc3MiLCBzaXplb2YgKEdzdFRhc2tDbGFzcyksIDIyNH0sCi0gIHsiR3N0VGFzayIsIHNpemVvZiAoR3N0VGFzayksIDIwMH0sCi0gIHsiR3N0VGFza1Bvb2xDbGFzcyIsIHNpemVvZiAoR3N0VGFza1Bvb2xDbGFzcyksIDI0OH0sCi0gIHsiR3N0VGFza1Bvb2wiLCBzaXplb2YgKEdzdFRhc2tQb29sKSwgMTI4fSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDY0fSwKLSAgeyJHc3RWYWx1ZVRhYmxlIiwgc2l6ZW9mIChHc3RWYWx1ZVRhYmxlKSwgNjR9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3NwYXJjLmggYi90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3NwYXJjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3OTQ1ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF9zcGFyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotc3RhdGljIEdzdENoZWNrQUJJU3RydWN0IGxpc3RbXSA9IHsKLSAgeyJHc3RBbGxvY2F0aW9uUGFyYW1zIiwgc2l6ZW9mIChHc3RBbGxvY2F0aW9uUGFyYW1zKSwgNjR9LAotICB7IkdzdEFsbG9jYXRvciIsIHNpemVvZiAoR3N0QWxsb2NhdG9yKSwgMTc2fSwKLSAgeyJHc3RBbGxvY2F0b3JDbGFzcyIsIHNpemVvZiAoR3N0QWxsb2NhdG9yQ2xhc3MpLCAyMzJ9LAotICB7IkdzdEJpbkNsYXNzIiwgc2l6ZW9mIChHc3RCaW5DbGFzcyksIDU3Nn0sCi0gIHsiR3N0QmluIiwgc2l6ZW9mIChHc3RCaW4pLCAzNzZ9LAotICB7IkdzdEJ1ZmZlciIsIHNpemVvZiAoR3N0QnVmZmVyKSwgMTEyfSwKLSAgeyJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMpLCA2NH0sCi0gIHsiR3N0QnVmZmVyUG9vbCIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbCksIDEzNn0sCi0gIHsiR3N0QnVmZmVyUG9vbENsYXNzIiwgc2l6ZW9mIChHc3RCdWZmZXJQb29sQ2xhc3MpLCAyODh9LAotICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDIzMn0sCi0gIHsiR3N0QnVzIiwgc2l6ZW9mIChHc3RCdXMpLCAxMjh9LAotICB7IkdzdENhcHMiLCBzaXplb2YgKEdzdENhcHMpLCA2NH0sCi0gIHsiR3N0Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0Q2xvY2tDbGFzcyksIDI2NH0sCi0gIHsiR3N0Q2xvY2tFbnRyeSIsIHNpemVvZiAoR3N0Q2xvY2tFbnRyeSksIDExMn0sCi0gIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgMTI4fSwKLSAgeyJHc3RDb250cm9sQmluZGluZyIsIHNpemVvZiAoR3N0Q29udHJvbEJpbmRpbmcpLCAxNTJ9LAotICB7IkdzdENvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdENvbnRyb2xCaW5kaW5nQ2xhc3MpLCAyNDh9LAotICB7IkdzdENvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdENvbnRyb2xTb3VyY2UpLCAxMzZ9LAotICB7IkdzdENvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0Q29udHJvbFNvdXJjZUNsYXNzKSwgMjE2fSwKLSAgeyJHc3REZWJ1Z0NhdGVnb3J5Iiwgc2l6ZW9mIChHc3REZWJ1Z0NhdGVnb3J5KSwgMjR9LAotICB7IkdzdEVsZW1lbnRDbGFzcyIsIHNpemVvZiAoR3N0RWxlbWVudENsYXNzKSwgNDg4fSwKLSAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMjY0fSwKLSAgeyJHc3RFdmVudCIsIHNpemVvZiAoR3N0RXZlbnQpLCA4OH0sCi0gIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDMyfSwKLSAgeyJHc3RHaG9zdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RHaG9zdFBhZENsYXNzKSwgMjcyfSwKLSAgeyJHc3RHaG9zdFBhZCIsIHNpemVvZiAoR3N0R2hvc3RQYWQpLCA1MzZ9LAotICB7IkdzdEl0ZXJhdG9yIiwgc2l6ZW9mIChHc3RJdGVyYXRvciksIDEyMH0sCi0gIHsiR3N0TWVtb3J5Iiwgc2l6ZW9mIChHc3RNZW1vcnkpLCAxMTJ9LAotICB7IkdzdE1hcEluZm8iLCBzaXplb2YgKEdzdE1hcEluZm8pLCAxMDR9LAotICB7IkdzdE1lc3NhZ2UiLCBzaXplb2YgKEdzdE1lc3NhZ2UpLCAxMjB9LAotICB7IkdzdE1ldGEiLCBzaXplb2YgKEdzdE1ldGEpLCAxNn0sCi0gIHsiR3N0TWV0YVRyYW5zZm9ybUNvcHkiLCBzaXplb2YgKEdzdE1ldGFUcmFuc2Zvcm1Db3B5KSwgMjR9LAotICB7IkdzdE1ldGFJbmZvIiwgc2l6ZW9mIChHc3RNZXRhSW5mbyksIDgwfSwKLSAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgNjR9LAotICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDE4NH0sCi0gIHsiR3N0T2JqZWN0Iiwgc2l6ZW9mIChHc3RPYmplY3QpLCA4OH0sCi0gIHsiR3N0UGFkQ2xhc3MiLCBzaXplb2YgKEdzdFBhZENsYXNzKSwgMjMyfSwKLSAgeyJHc3RQYWQiLCBzaXplb2YgKEdzdFBhZCksIDUyMH0sCi0gIHsiR3N0UGFkUHJvYmVJbmZvIiwgc2l6ZW9mIChHc3RQYWRQcm9iZUluZm8pLCA3Mn0sCi0gIHsiR3N0UGFkVGVtcGxhdGVDbGFzcyIsIHNpemVvZiAoR3N0UGFkVGVtcGxhdGVDbGFzcyksIDIyNH0sCi0gIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgMTQ0fSwKLSAgeyJHc3RQYXJhbVNwZWNGcmFjdGlvbiIsIHNpemVvZiAoR3N0UGFyYW1TcGVjRnJhY3Rpb24pLCA5Nn0sCi0gIHsiR3N0UGlwZWxpbmVDbGFzcyIsIHNpemVvZiAoR3N0UGlwZWxpbmVDbGFzcyksIDYwOH0sCi0gIHsiR3N0UGlwZWxpbmUiLCBzaXplb2YgKEdzdFBpcGVsaW5lKSwgNDQwfSwKLSAgeyJHc3RQbHVnaW5EZXNjIiwgc2l6ZW9mIChHc3RQbHVnaW5EZXNjKSwgMTEyfSwKLSAgeyJHc3RQcm94eVBhZENsYXNzIiwgc2l6ZW9mIChHc3RQcm94eVBhZENsYXNzKSwgMjQwfSwKLSAgeyJHc3RQcm94eVBhZCIsIHNpemVvZiAoR3N0UHJveHlQYWQpLCA1Mjh9LAotICB7IkdzdFF1ZXJ5Iiwgc2l6ZW9mIChHc3RRdWVyeSksIDcyfSwKLSAgeyJHc3RSZWdpc3RyeUNsYXNzIiwgc2l6ZW9mIChHc3RSZWdpc3RyeUNsYXNzKSwgMTg0fSwKLSAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA5Nn0sCi0gIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDEyMH0sCi0gIHsiR3N0U3RhdGljQ2FwcyIsIHNpemVvZiAoR3N0U3RhdGljQ2FwcyksIDQ4fSwKLSAgeyJHc3RTdGF0aWNQYWRUZW1wbGF0ZSIsIHNpemVvZiAoR3N0U3RhdGljUGFkVGVtcGxhdGUpLCA2NH0sCi0gIHsiR3N0U3RydWN0dXJlIiwgc2l6ZW9mIChHc3RTdHJ1Y3R1cmUpLCAxNn0sCi0gIHsiR3N0U3lzdGVtQ2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2tDbGFzcyksIDI5Nn0sCi0gIHsiR3N0U3lzdGVtQ2xvY2siLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrKSwgMTY4fSwKLSAgeyJHc3RUYWdMaXN0Iiwgc2l6ZW9mIChHc3RUYWdMaXN0KSwgNjQsfSwKLSAgeyJHc3RUYXNrQ2xhc3MiLCBzaXplb2YgKEdzdFRhc2tDbGFzcyksIDIyNH0sCi0gIHsiR3N0VGFzayIsIHNpemVvZiAoR3N0VGFzayksIDIwMH0sCi0gIHsiR3N0VGFza1Bvb2xDbGFzcyIsIHNpemVvZiAoR3N0VGFza1Bvb2xDbGFzcyksIDI0OH0sCi0gIHsiR3N0VGFza1Bvb2wiLCBzaXplb2YgKEdzdFRhc2tQb29sKSwgMTI4fSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDY0fSwKLSAgeyJHc3RWYWx1ZVRhYmxlIiwgc2l6ZW9mIChHc3RWYWx1ZVRhYmxlKSwgNjR9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oIGIvdGVzdHMvY2hlY2svZ3N0L3N0cnVjdF94ODZfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc5NDU4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9nc3Qvc3RydWN0X3g4Nl82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotc3RhdGljIEdzdENoZWNrQUJJU3RydWN0IGxpc3RbXSA9IHsKLSAgeyJHc3RBbGxvY2F0aW9uUGFyYW1zIiwgc2l6ZW9mIChHc3RBbGxvY2F0aW9uUGFyYW1zKSwgNjR9LAotICB7IkdzdEFsbG9jYXRvciIsIHNpemVvZiAoR3N0QWxsb2NhdG9yKSwgMTc2fSwKLSAgeyJHc3RBbGxvY2F0b3JDbGFzcyIsIHNpemVvZiAoR3N0QWxsb2NhdG9yQ2xhc3MpLCAyMzJ9LAotICB7IkdzdEJpbkNsYXNzIiwgc2l6ZW9mIChHc3RCaW5DbGFzcyksIDU3Nn0sCi0gIHsiR3N0QmluIiwgc2l6ZW9mIChHc3RCaW4pLCAzNzZ9LAotICB7IkdzdEJ1ZmZlciIsIHNpemVvZiAoR3N0QnVmZmVyKSwgMTEyfSwKLSAgeyJHc3RCdWZmZXJQb29sQWNxdWlyZVBhcmFtcyIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMpLCA2NH0sCi0gIHsiR3N0QnVmZmVyUG9vbCIsIHNpemVvZiAoR3N0QnVmZmVyUG9vbCksIDEzNn0sCi0gIHsiR3N0QnVmZmVyUG9vbENsYXNzIiwgc2l6ZW9mIChHc3RCdWZmZXJQb29sQ2xhc3MpLCAyODh9LAotICB7IkdzdEJ1c0NsYXNzIiwgc2l6ZW9mIChHc3RCdXNDbGFzcyksIDIzMn0sCi0gIHsiR3N0QnVzIiwgc2l6ZW9mIChHc3RCdXMpLCAxMjh9LAotICB7IkdzdENhcHMiLCBzaXplb2YgKEdzdENhcHMpLCA2NH0sCi0gIHsiR3N0Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0Q2xvY2tDbGFzcyksIDI2NH0sCi0gIHsiR3N0Q2xvY2tFbnRyeSIsIHNpemVvZiAoR3N0Q2xvY2tFbnRyeSksIDExMn0sCi0gIHsiR3N0Q2xvY2siLCBzaXplb2YgKEdzdENsb2NrKSwgMTI4fSwKLSAgeyJHc3RDb250cm9sQmluZGluZyIsIHNpemVvZiAoR3N0Q29udHJvbEJpbmRpbmcpLCAxNTJ9LAotICB7IkdzdENvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdENvbnRyb2xCaW5kaW5nQ2xhc3MpLCAyNDh9LAotICB7IkdzdENvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdENvbnRyb2xTb3VyY2UpLCAxMzZ9LAotICB7IkdzdENvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0Q29udHJvbFNvdXJjZUNsYXNzKSwgMjE2fSwKLSAgeyJHc3REZWJ1Z0NhdGVnb3J5Iiwgc2l6ZW9mIChHc3REZWJ1Z0NhdGVnb3J5KSwgMjR9LAotICB7IkdzdEVsZW1lbnRDbGFzcyIsIHNpemVvZiAoR3N0RWxlbWVudENsYXNzKSwgNDg4fSwKLSAgeyJHc3RFbGVtZW50Iiwgc2l6ZW9mIChHc3RFbGVtZW50KSwgMjY0fSwKLSAgeyJHc3RFdmVudCIsIHNpemVvZiAoR3N0RXZlbnQpLCA4OH0sCi0gIHsiR3N0Rm9ybWF0RGVmaW5pdGlvbiIsIHNpemVvZiAoR3N0Rm9ybWF0RGVmaW5pdGlvbiksIDMyfSwKLSAgeyJHc3RHaG9zdFBhZENsYXNzIiwgc2l6ZW9mIChHc3RHaG9zdFBhZENsYXNzKSwgMjcyfSwKLSAgeyJHc3RHaG9zdFBhZCIsIHNpemVvZiAoR3N0R2hvc3RQYWQpLCA1MzZ9LAotICB7IkdzdEl0ZXJhdG9yIiwgc2l6ZW9mIChHc3RJdGVyYXRvciksIDEyMH0sCi0gIHsiR3N0TWVtb3J5Iiwgc2l6ZW9mIChHc3RNZW1vcnkpLCAxMTJ9LAotICB7IkdzdE1hcEluZm8iLCBzaXplb2YgKEdzdE1hcEluZm8pLCAxMDR9LAotICB7IkdzdE1lc3NhZ2UiLCBzaXplb2YgKEdzdE1lc3NhZ2UpLCAxMjB9LAotICB7IkdzdE1ldGEiLCBzaXplb2YgKEdzdE1ldGEpLCAxNn0sCi0gIHsiR3N0TWV0YVRyYW5zZm9ybUNvcHkiLCBzaXplb2YgKEdzdE1ldGFUcmFuc2Zvcm1Db3B5KSwgMjR9LAotICB7IkdzdE1ldGFJbmZvIiwgc2l6ZW9mIChHc3RNZXRhSW5mbyksIDgwfSwKLSAgeyJHc3RNaW5pT2JqZWN0Iiwgc2l6ZW9mIChHc3RNaW5pT2JqZWN0KSwgNjR9LAotICB7IkdzdE9iamVjdENsYXNzIiwgc2l6ZW9mIChHc3RPYmplY3RDbGFzcyksIDE4NH0sCi0gIHsiR3N0T2JqZWN0Iiwgc2l6ZW9mIChHc3RPYmplY3QpLCA4OH0sCi0gIHsiR3N0UGFkQ2xhc3MiLCBzaXplb2YgKEdzdFBhZENsYXNzKSwgMjMyfSwKLSAgeyJHc3RQYWQiLCBzaXplb2YgKEdzdFBhZCksIDUyMH0sCi0gIHsiR3N0UGFkUHJvYmVJbmZvIiwgc2l6ZW9mIChHc3RQYWRQcm9iZUluZm8pLCA3Mn0sCi0gIHsiR3N0UGFkVGVtcGxhdGVDbGFzcyIsIHNpemVvZiAoR3N0UGFkVGVtcGxhdGVDbGFzcyksIDIyNH0sCi0gIHsiR3N0UGFkVGVtcGxhdGUiLCBzaXplb2YgKEdzdFBhZFRlbXBsYXRlKSwgMTQ0fSwKLSAgeyJHc3RQYXJhbVNwZWNGcmFjdGlvbiIsIHNpemVvZiAoR3N0UGFyYW1TcGVjRnJhY3Rpb24pLCA5Nn0sCi0gIHsiR3N0UGlwZWxpbmVDbGFzcyIsIHNpemVvZiAoR3N0UGlwZWxpbmVDbGFzcyksIDYwOH0sCi0gIHsiR3N0UGlwZWxpbmUiLCBzaXplb2YgKEdzdFBpcGVsaW5lKSwgNDQwfSwKLSAgeyJHc3RQbHVnaW5EZXNjIiwgc2l6ZW9mIChHc3RQbHVnaW5EZXNjKSwgMTEyfSwKLSAgeyJHc3RQcm94eVBhZENsYXNzIiwgc2l6ZW9mIChHc3RQcm94eVBhZENsYXNzKSwgMjQwfSwKLSAgeyJHc3RQcm94eVBhZCIsIHNpemVvZiAoR3N0UHJveHlQYWQpLCA1Mjh9LAotICB7IkdzdFF1ZXJ5Iiwgc2l6ZW9mIChHc3RRdWVyeSksIDcyfSwKLSAgeyJHc3RSZWdpc3RyeUNsYXNzIiwgc2l6ZW9mIChHc3RSZWdpc3RyeUNsYXNzKSwgMTg0fSwKLSAgeyJHc3RSZWdpc3RyeSIsIHNpemVvZiAoR3N0UmVnaXN0cnkpLCA5Nn0sCi0gIHsiR3N0U2VnbWVudCIsIHNpemVvZiAoR3N0U2VnbWVudCksIDEyMH0sCi0gIHsiR3N0U3RhdGljQ2FwcyIsIHNpemVvZiAoR3N0U3RhdGljQ2FwcyksIDQ4fSwKLSAgeyJHc3RTdGF0aWNQYWRUZW1wbGF0ZSIsIHNpemVvZiAoR3N0U3RhdGljUGFkVGVtcGxhdGUpLCA2NH0sCi0gIHsiR3N0U3RydWN0dXJlIiwgc2l6ZW9mIChHc3RTdHJ1Y3R1cmUpLCAxNn0sCi0gIHsiR3N0U3lzdGVtQ2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0U3lzdGVtQ2xvY2tDbGFzcyksIDI5Nn0sCi0gIHsiR3N0U3lzdGVtQ2xvY2siLCBzaXplb2YgKEdzdFN5c3RlbUNsb2NrKSwgMTY4fSwKLSAgeyJHc3RUYWdMaXN0Iiwgc2l6ZW9mIChHc3RUYWdMaXN0KSwgNjQsfSwKLSAgeyJHc3RUYXNrQ2xhc3MiLCBzaXplb2YgKEdzdFRhc2tDbGFzcyksIDIyNH0sCi0gIHsiR3N0VGFzayIsIHNpemVvZiAoR3N0VGFzayksIDIwMH0sCi0gIHsiR3N0VGFza1Bvb2xDbGFzcyIsIHNpemVvZiAoR3N0VGFza1Bvb2xDbGFzcyksIDI0OH0sCi0gIHsiR3N0VGFza1Bvb2wiLCBzaXplb2YgKEdzdFRhc2tQb29sKSwgMTI4fSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7IkdzdFR5cGVGaW5kIiwgc2l6ZW9mIChHc3RUeXBlRmluZCksIDY0fSwKLSAgeyJHc3RWYWx1ZVRhYmxlIiwgc2l6ZW9mIChHc3RWYWx1ZVRhYmxlKSwgNjR9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2FkYXB0ZXIuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTAzMjQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvYWRhcHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM0NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGFkYXB0ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltIGF0IGZsdWVuZG8gZG90IGNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLS8qIGRvZXMgc29tZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgY2hlY2tpbmcgdGhhdCBzaG91bGQgCi0gKiBhbHNvIGJlIG9wdGltYWwgCi0gKi8KLQotLyoKLSAqIFN0YXJ0IHBlZWtpbmcgb24gYW4gYWRhcHRlciB3aXRoIDEgYnVmZmVyIHB1c2hlZC4gCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BlZWsxKQotewotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgZ3VpbnQgYXZhaWw7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhMSwgKmRhdGEyLCAqaWRhdGE7Ci0KLSAgYWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgZmFpbF9pZiAoYWRhcHRlciA9PSBOVUxMKTsKLQotICAvKiBwdXNoIHNpbmdsZSBidWZmZXIgaW4gYWRhcHRlciAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDUxMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLSAgaWRhdGEgPSBpbmZvLmRhdGE7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotCi0gIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLQotICAvKiBhdmFpbGFibGUgYW5kIGF2YWlsYWJsZV9mYXN0IHNob3VsZCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIAotICAgKiBidWZmZXIgKi8KLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX2lmIChhdmFpbCAhPSA1MTIpOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0IChhZGFwdGVyKTsKLSAgZmFpbF9pZiAoYXZhaWwgIT0gNTEyKTsKLQotICAvKiBzaG91bGQgZ19jcml0aWNhbCB3aXRoIE5VTEwgYXMgcmVzdWx0ICovCi0gIEFTU0VSVF9DUklUSUNBTCAoZGF0YTEgPSBnc3RfYWRhcHRlcl9tYXAgKGFkYXB0ZXIsIDApKTsKLSAgZmFpbF9pZiAoZGF0YTEgIT0gTlVMTCk7Ci0KLSAgLyogc2hvdWxkIHJldHVybiBOVUxMIGFzIHJlc3VsdCAqLwotICBkYXRhMSA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTEzKTsKLSAgZmFpbF9pZiAoZGF0YTEgIT0gTlVMTCk7Ci0KLSAgLyogdGhpcyBzaG91bGQgd29yayAqLwotICBkYXRhMSA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTEyKTsKLSAgZmFpbF9pZiAoZGF0YTEgPT0gTlVMTCk7Ci0gIC8qIGl0IHNob3VsZCBwb2ludCB0byB0aGUgYnVmZmVyIGRhdGEgYXMgd2VsbCAqLwotICBmYWlsX2lmIChkYXRhMSAhPSBpZGF0YSk7Ci0gIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyKTsKLQotICBkYXRhMiA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTEyKTsKLSAgZmFpbF9pZiAoZGF0YTIgPT0gTlVMTCk7Ci0gIC8qIHNlY29uZCBwZWVrIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgcG9pbnRlciAqLwotICBmYWlsX2lmIChkYXRhMiAhPSBkYXRhMSk7Ci0gIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyKTsKLQotICAvKiB0aGlzIHNob3VsZCBmYWlsIHNpbmNlIHdlIGRvbid0IGhhdmUgdGhhdCBtYW55IGJ5dGVzICovCi0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDUxMykpOwotCi0gIC8qIHRoaXMgc2hvdWxkIHdvcmsgZmluZSAqLwotICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgMTApOwotCi0gIC8qIHNlZSBpZiB3ZSBoYXZlIDEwIGJ5dGVzIGxlc3MgYXZhaWxhYmxlICovCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF9pZiAoYXZhaWwgIT0gNTAyKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdCAoYWRhcHRlcik7Ci0gIGZhaWxfaWYgKGF2YWlsICE9IDUwMik7Ci0KLSAgLyogc2hvdWxkIHJldHVybiBOVUxMIGFzIHJlc3VsdCAqLwotICBkYXRhMiA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTAzKTsKLSAgZmFpbF9pZiAoZGF0YTIgIT0gTlVMTCk7Ci0KLSAgLyogc2hvdWxkIHdvcmsgZmluZSAqLwotICBkYXRhMiA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTAyKTsKLSAgZmFpbF9pZiAoZGF0YTIgPT0gTlVMTCk7Ci0gIC8qIHBlZWsgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvbGQgcG9pbnRlciArIDEwICovCi0gIGZhaWxfaWYgKGRhdGEyICE9IGRhdGExICsgMTApOwotICBmYWlsX2lmIChkYXRhMiAhPSAoZ3VpbnQ4ICopIGlkYXRhICsgMTApOwotICBnc3RfYWRhcHRlcl91bm1hcCAoYWRhcHRlcik7Ci0KLSAgLyogZmx1c2ggc29tZSBtb3JlICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCA1MDApOwotCi0gIC8qIHNlZSBpZiB3ZSBoYXZlIDIgYnl0ZXMgYXZhaWxhYmxlICovCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF9pZiAoYXZhaWwgIT0gMik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlX2Zhc3QgKGFkYXB0ZXIpOwotICBmYWlsX2lmIChhdmFpbCAhPSAyKTsKLQotICBkYXRhMiA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgMik7Ci0gIGZhaWxfaWYgKGRhdGEyID09IE5VTEwpOwotICBmYWlsX2lmIChkYXRhMiAhPSBkYXRhMSArIDUxMCk7Ci0gIGZhaWxfaWYgKGRhdGEyICE9IChndWludDggKikgaWRhdGEgKyA1MTApOwotICBnc3RfYWRhcHRlcl91bm1hcCAoYWRhcHRlcik7Ci0KLSAgLyogZmx1c2ggc29tZSBtb3JlICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCAyKTsKLQotICAvKiBzZWUgaWYgd2UgaGF2ZSAwIGJ5dGVzIGF2YWlsYWJsZSAqLwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfaWYgKGF2YWlsICE9IDApOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZV9mYXN0IChhZGFwdGVyKTsKLSAgZmFpbF9pZiAoYXZhaWwgIT0gMCk7Ci0KLSAgLyogc2lsbHkgY2xlYXIganVzdCBmb3IgZnVuICovCi0gIGdzdF9hZGFwdGVyX2NsZWFyIChhZGFwdGVyKTsKLQotICBnX29iamVjdF91bnJlZiAoYWRhcHRlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogU3RhcnQgcGVla2luZyBvbiBhbiBhZGFwdGVyIHdpdGggMiBub24tbWVyZ2VhYmxlIGJ1ZmZlcnMgCi0gKiBwdXNoZWQuIAotICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wZWVrMikKLXsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBTdGFydCBwZWVraW5nIG9uIGFuIGFkYXB0ZXIgd2l0aCAyIG1lcmdlYWJsZSBidWZmZXJzIAotICogcHVzaGVkLiAKLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGVlazMpCi17Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGFrZSBkYXRhIGZyb20gYW4gYWRhcHRlciB3aXRoIDEgYnVmZmVyIHB1c2hlZC4KLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGFrZTEpCi17Ci0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyLCAqYnVmZmVyMjsKLSAgZ3VpbnQgYXZhaWw7Ci0gIEdzdE1hcEluZm8gaW5mbywgaW5mbzI7Ci0KLSAgYWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgZmFpbF91bmxlc3MgKGFkYXB0ZXIgIT0gTlVMTCk7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDApOwotICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5mby5zaXplID09IDEwMCk7Ci0KLSAgLyogcHVzaCBpbiB0aGUgYWRhcHRlciAqLwotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOwotCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDEwMCk7Ci0KLSAgLyogdGFrZSBvdXQgYnVmZmVyICovCi0gIGJ1ZmZlcjIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoYWRhcHRlciwgMTAwKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcjIgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWZmZXIyLCAmaW5mbzIsIEdTVF9NQVBfUkVBRCkpOwotICBmYWlsX3VubGVzcyAoaW5mbzIuZGF0YSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGluZm8yLnNpemUgPT0gMTAwKTsKLQotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAwKTsKLQotICAvKiB0aGUgYnVmZmVyIHNob3VsZCBiZSB0aGUgc2FtZSAqLwotICBmYWlsX3VubGVzcyAoYnVmZmVyID09IGJ1ZmZlcjIpOwotICBmYWlsX3VubGVzcyAoaW5mby5kYXRhID09IGluZm8yLmRhdGEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIyLCAmaW5mbzIpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjIpOwotCi0gIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0YWtlIGRhdGEgZnJvbSBhbiBhZGFwdGVyIHdpdGggMiBub24tbWVyZ2VhYmxlIGJ1ZmZlcnMgCi0gKiBwdXNoZWQuCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3Rha2UyKQotewotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRha2UgZGF0YSBmcm9tIGFuIGFkYXB0ZXIgd2l0aCAyIG1lcmdlYWJsZSBidWZmZXJzIAotICogcHVzaGVkLgotICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90YWtlMykKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgR3N0QnVmZmVyICpidWZmZXIsICpidWZmZXIyOwotICBndWludCBhdmFpbDsKLSAgR3N0TWFwSW5mbyBpbmZvLCBpbmZvMjsKLQotICBhZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBmYWlsX3VubGVzcyAoYWRhcHRlciAhPSBOVUxMKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvLmRhdGEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvLnNpemUgPT0gMTAwKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmaW5mbyk7Ci0KLSAgLyogc2V0IHVwIGFuZCBwdXNoIHN1YmJ1ZmZlcnMgKi8KLSAgYnVmZmVyMiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMCwgMjUpOwotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIyKTsKLSAgYnVmZmVyMiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMjUsIDI1KTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyMik7Ci0gIGJ1ZmZlcjIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDUwLCAyNSk7Ci0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcjIpOwotICBidWZmZXIyID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCA3NSwgMjUpOwotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIyKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDEwMCk7Ci0KLSAgLyogdGFrZSBvdXQgYnVmZmVyICovCi0gIGJ1ZmZlcjIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoYWRhcHRlciwgMTAwKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcjIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmZmVyMiwgJmluZm8yLCBHU1RfTUFQX1JFQUQpKTsKLSAgZmFpbF91bmxlc3MgKGluZm8yLmRhdGEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbmZvMi5zaXplID09IDEwMCk7Ci0KLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7Ci0KLSNpZiAwCi0gIC8qIHRoZSBkYXRhIHNob3VsZCBiZSB0aGUgc2FtZSBGSVhNRSwgaW1wbGVtZW50IHNwYW4gaW4gYWRhcHRlciBhZ2Fpbi4gKi8KLSAgZmFpbF91bmxlc3MgKGluZm8uZGF0YSA9PSBpbmZvMi5kYXRhKTsKLSNlbmRpZgotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlcjIsICZpbmZvMik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcjIpOwotCi0gIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0QWRhcHRlciAqCi1jcmVhdGVfYW5kX2ZpbGxfYWRhcHRlciAodm9pZCkKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ2ludCBpLCBqOwotCi0gIGFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0gIGZhaWxfdW5sZXNzIChhZGFwdGVyICE9IE5VTEwpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSArPSA0KSB7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgR3N0TWFwSW5mbyBpbmZvOwotICAgIGd1aW50OCAqcHRyOwotCi0gICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChzaXplb2YgKGd1aW50MzIpICogNCk7Ci0gICAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBOVUxMKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9XUklURSkpOwotICAgIHB0ciA9IGluZm8uZGF0YTsKLQotICAgIGZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLSAgICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKHB0ciwgaSArIGopOwotICAgICAgcHRyICs9IHNpemVvZiAoZ3VpbnQzMik7Ci0gICAgfQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotCi0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmKTsKLSAgfQotCi0gIHJldHVybiBhZGFwdGVyOwotfQotCi0vKiBGaWxsIGEgYnVmZmVyIHdpdGggYSBzZXF1ZW5jZSBvZiAzMiBiaXQgaW50cyBhbmQgcmVhZCB0aGVtIGJhY2sgb3V0LAotICogY2hlY2tpbmcgdGhhdCB0aGV5J3JlIHN0aWxsIGluIHRoZSByaWdodCBvcmRlciAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGFrZV9vcmRlcikKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgaW50IGkgPSAwOwotCi0gIGFkYXB0ZXIgPSBjcmVhdGVfYW5kX2ZpbGxfYWRhcHRlciAoKTsKLSAgd2hpbGUgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPj0gc2l6ZW9mIChndWludDMyKSkgewotICAgIGd1aW50OCAqZGF0YSA9IGdzdF9hZGFwdGVyX3Rha2UgKGFkYXB0ZXIsIHNpemVvZiAoZ3VpbnQzMikpOwotICAgIGd1aW50MzIgdmFsID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLQotICAgIEdTVF9ERUJVRyAoInZhbCAlOHUiLCB2YWwpOwotICAgIGZhaWxfdW5sZXNzICh2YWwgPT0gaSk7Ci0gICAgaSsrOwotICAgIGdfZnJlZSAoZGF0YSk7Ci0gIH0KLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMCwKLSAgICAgICJEYXRhIHdhcyBsZWZ0IGluIHRoZSBhZGFwdGVyIik7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIEZpbGwgYSBidWZmZXIgd2l0aCBhIHNlcXVlbmNlIG9mIDMyIGJpdCBpbnRzIGFuZCByZWFkIHRoZW0gYmFjayBvdXQKLSAqIHVzaW5nIHRha2VfYnVmZmVyLCBjaGVja2luZyB0aGF0IHRoZXkncmUgc3RpbGwgaW4gdGhlIHJpZ2h0IG9yZGVyICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90YWtlX2J1Zl9vcmRlcikKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgaW50IGkgPSAwOwotCi0gIGFkYXB0ZXIgPSBjcmVhdGVfYW5kX2ZpbGxfYWRhcHRlciAoKTsKLSAgd2hpbGUgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPj0gc2l6ZW9mIChndWludDMyKSkgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKGFkYXB0ZXIsIHNpemVvZiAoZ3VpbnQzMikpOwotICAgIEdzdE1hcEluZm8gaW5mbzsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21hcCAoYnVmLCAmaW5mbywgR1NUX01BUF9SRUFEKSk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9SRUFEX1VJTlQzMl9MRSAoaW5mby5kYXRhKSA9PSBpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLQotICAgIGkrKzsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIH0KLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMCwKLSAgICAgICJEYXRhIHdhcyBsZWZ0IGluIHRoZSBhZGFwdGVyIik7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RpbWVzdGFtcCkKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGd1aW50IGF2YWlsOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBndWludDY0IGRpc3Q7Ci0gIGd1aW50OCAqZGF0YTsKLSAgY29uc3QgZ3VpbnQ4ICpjZGF0YTsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0KLSAgYWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgZmFpbF91bmxlc3MgKGFkYXB0ZXIgIT0gTlVMTCk7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDApOwotCi0gIC8qIHB1c2ggaW4gdGhlIGFkYXB0ZXIgKi8KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTAwKTsKLQotICAvKiB0aW1lc3RhbXAgaXMgbm93IHVuZGVmaW5lZCAqLwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3B0cyAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKLQotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgLyogT2Zmc2V0IHNob3VsZCBiZSB1bmRlZmluZWQgKi8KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSBHU1RfQlVGRkVSX09GRlNFVF9OT05FKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMCk7Ci0KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIC8qIDAgYnl0ZXMgc2luY2UgZGlzY29udCAqLwotICBkaXN0ID0gZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMCk7Ci0KLSAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDUwKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gNTApOwotCi0gIC8qIHN0aWxsIHVuZGVmaW5lZCwgZGlzdCBjaGFuZ2VkLCB0aG91Z2ggKi8KLSAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHMgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gNTApOwotCi0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAvKiBPZmZzZXQgc3RpbGwgdW5kZWZpbmVkICovCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0IChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChkaXN0ID09IDUwKTsKLQotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9vZmZzZXRfYXRfZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgLyogNTAgYnl0ZXMgc2luY2UgZGlzY29udCAqLwotICBkaXN0ID0gZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gNTApOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAxICogR1NUX1NFQ09ORDsKLQotICAvKiBwdXNoIGluIHRoZSBhZGFwdGVyICovCi0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDE1MCk7Ci0KLSAgLyogdGltZXN0YW1wIGlzIHN0aWxsIHVuZGVmaW5lZCAqLwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3B0cyAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSA1MCk7Ci0KLSAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIC8qIE9mZnNldCBzdGlsbCB1bmRlZmluZWQgKi8KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSBHU1RfQlVGRkVSX09GRlNFVF9OT05FKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gNTApOwotCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAvKiA1MCBieXRlcyBzaW5jZSBkaXNjb250ICovCi0gIGRpc3QgPSBnc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSA1MCk7Ci0KLSAgLyogZmx1c2ggb3V0IGZpcnN0IGJ1ZmZlciB3ZSBhcmUgbm93IGF0IHRoZSBzZWNvbmQgYnVmZmVyIHRpbWVzdGFtcCAqLwotICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgNTApOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxMDApOwotCi0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKLQotICAvKiB0aW1lc3RhbXAgd2FzIHVuZGVmaW5lZCBhdCBkaXNjb250ICovCi0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAvKiAxMDAgYnl0ZXMgc2luY2UgZGlzY29udCAqLwotICBkaXN0ID0gZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMTAwKTsKLQotICAvKiBtb3ZlIHNvbWUgbW9yZSwgc3RpbGwgdGhlIHNhbWUgdGltZXN0YW1wIGJ1dCBmdXJ0aGVyIGF3YXkgKi8KLSAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDUwKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gNTApOwotCi0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSA1MCk7Ci0KLSAgLyogdGltZXN0YW1wIHdhcyB1bmRlZmluZWQgYXQgZGlzY29udCAqLwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgLyogcHVzaCBhIGJ1ZmZlciB3aXRob3V0IHRpbWVzdGFtcCBpbiB0aGUgYWRhcHRlciAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMCk7Ci0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDE1MCk7Ci0gIC8qIHB1c2ggYSBidWZmZXIgd2l0aCB0aW1lc3RhbXAgaW4gdGhlIGFkYXB0ZXIgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDApOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDIgKiBHU1RfU0VDT05EOwotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAyNTApOwotCi0gIC8qIHRpbWVzdGFtcCBzdGlsbCBhcyBpdCB3YXMgYmVmb3JlIHRoZSBwdXNoICovCi0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSA1MCk7Ci0KLSAgLyogdGltZXN0YW1wIHdhcyB1bmRlZmluZWQgYXQgZGlzY29udCAqLwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgLyogZmx1c2ggYXdheSBidWZmZXIgd2l0aCB0aGUgdGltZXN0YW1wICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCA1MCk7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDIwMCk7Ci0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSAxMDApOwotCi0gIC8qIHRpbWVzdGFtcCB3YXMgdW5kZWZpbmVkIGF0IGRpc2NvbnQgKi8KLSAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIC8qIG1vdmUgaW50byB0aGUgc2Vjb25kIGJ1ZmZlciAqLwotICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgNTApOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxNTApOwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3B0cyAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDEgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMTUwKTsKLQotICAvKiB0aW1lc3RhbXAgd2FzIHVuZGVmaW5lZCBhdCBkaXNjb250ICovCi0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAvKiBtb3ZlIHRvIHRoaXJkIGJ1ZmZlciB3ZSBtb3ZlIHRvIHRoZSBuZXcgdGltZXN0YW1wICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCA1MCk7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDEwMCk7Ci0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKLQotICAvKiB0aW1lc3RhbXAgd2FzIHVuZGVmaW5lZCBhdCBkaXNjb250ICovCi0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAvKiBtb3ZlIGV2ZXJ5dGhpbmcgb3V0ICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCAxMDApOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAwKTsKLSAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHMgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSAyICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzIChkaXN0ID09IDEwMCk7Ci0KLSAgLyogY2xlYXIgZXZlcnl0aGluZyAqLwotICBnc3RfYWRhcHRlcl9jbGVhciAoYWRhcHRlcik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDApOwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3B0cyAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKLQotICAvKiB0aW1lc3RhbXAgd2FzIHVuZGVmaW5lZCBhdCBkaXNjb250ICovCi0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3B0c19hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAvKiBwdXNoIGFuIGVtcHR5IGJ1ZmZlciB3aXRoIHRpbWVzdGFtcCBpbiB0aGUgYWRhcHRlciAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAyICogR1NUX1NFQ09ORDsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7Ci0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKLQotICAvKiB0aW1lc3RhbXAgd2FzIHVuZGVmaW5lZCBhdCBkaXNjb250IChjbGVhcmluZyB0aGUgYWRhcHRlciBpcyBub3QKLSAgICogbmVjZXNzYXJpbHkgYSBkaXNjb250KSAqLwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wdHNfYXRfZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgLyogcHVzaCBhbm90aGVyIGVtcHR5IGJ1ZmZlciAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSAzICogR1NUX1NFQ09ORDsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7Ci0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKLQotICAvKiBwdXNoIGEgYnVmZmVyIHdpdGggdGltZXN0YW1wIGluIHRoZSBhZGFwdGVyICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA0ICogR1NUX1NFQ09ORDsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTAwKTsKLSAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHMgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSAyICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzIChkaXN0ID09IDApOwotCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCAxKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gOTkpOwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3B0cyAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDQgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gMSk7Ci0KLSAgLyogcHVzaCBhbiBlbXB0eSBidWZmZXIgd2l0aCB0aW1lc3RhbXAgaW4gdGhlIGFkYXB0ZXIgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gNSAqIEdTVF9TRUNPTkQ7Ci0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDk5KTsKLSAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHMgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSA0ICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzIChkaXN0ID09IDEpOwotCi0gIC8qIHB1c2ggYnVmZmVyIHdpdGhvdXQgdGltZXN0YW1wICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTk5KTsKLSAgdGltZXN0YW1wID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHMgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3MgKHRpbWVzdGFtcCA9PSA0ICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzIChkaXN0ID09IDEpOwotCi0gIC8qIHJlbW92ZSBmaXJzdCBidWZmZXIsIHRpbWVzdGFtcCBvZiBlbXB0eSBidWZmZXIgaXMgdmlzaWJsZSAqLwotICBidWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoYWRhcHRlciwgOTkpOwotICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSA5OSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDEwMCk7Ci0gIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gNSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZGlzdCA9PSAwKTsKLQotICAvKiByZW1vdmUgZW1wdHkgYnVmZmVyLCB0aW1lc3RhbXAgc3RpbGwgdmlzaWJsZSAqLwotICBjZGF0YSA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgNTApOwotICBmYWlsX3VubGVzcyAoY2RhdGEgIT0gTlVMTCk7Ci0gIGdzdF9hZGFwdGVyX3VubWFwIChhZGFwdGVyKTsKLQotICBkYXRhID0gZ3N0X2FkYXB0ZXJfdGFrZSAoYWRhcHRlciwgNTApOwotICBmYWlsX3VubGVzcyAoZGF0YSAhPSBOVUxMKTsKLSAgZ19mcmVlIChkYXRhKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gNTApOwotICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3B0cyAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzcyAodGltZXN0YW1wID09IDUgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3MgKGRpc3QgPT0gNTApOwotCi0gIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9vZmZzZXQpCi17Ci0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBndWludCBhdmFpbDsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0gIGd1aW50NjQgZGlzdDsKLQotICBhZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBmYWlsX3VubGVzcyAoYWRhcHRlciAhPSBOVUxMKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMCk7Ci0KLSAgLyogcHVzaCBpbiB0aGUgYWRhcHRlciAqLwotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxMDApOwotCi0gIC8qIE9mZnNldCBzaG91bGQgYmUgdW5kZWZpbmVkICovCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMCk7Ci0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0IChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRpc3QsIDApOwotCi0gIC8qIE9mZnNldCBpcyB1bmRlZmluZWQgKi8KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpOwotCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCA1MCk7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDUwKTsKLQotICAvKiBPZmZzZXQgc3RpbGwgdW5kZWZpbmVkLCBkaXN0IGNoYW5nZWQgdGhvdWdoICovCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgNTApOwotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9wcmV2X29mZnNldCAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkaXN0LCA1MCk7Ci0KLSAgLyogT2Zmc2V0IGlzIHVuZGVmaW5lZCAqLwotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9vZmZzZXRfYXRfZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSk7Ci0KLSAgLyogTGV0J3MgcHVzaCBpbiBhIGRpc2NvbnQgYnVmZmVyIHdpdGggYSB2YWxpZCBvZmZzZXQgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDApOwotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSA9IDEwMDAwOwotICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLQotICAvKiBwdXNoIGluIHRoZSBhZGFwdGVyICovCi0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDE1MCk7Ci0KLSAgLyogb2Zmc2V0IGlzIHN0aWxsIHVuZGVmaW5lZCAqLwotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIDUwKTsKLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAob2Zmc2V0LCBHU1RfQlVGRkVSX09GRlNFVF9OT05FKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGlzdCwgNTApOwotCi0gIC8qIE9mZnNldCBpcyB1bmRlZmluZWQgKi8KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpOwotCi0gIC8qIGZsdXNoIG91dCBmaXJzdCBidWZmZXIgd2UgYXJlIG5vdyBhdCB0aGUgc2Vjb25kIGJ1ZmZlciBvZmZzZXQgKi8KLSAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDUwKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMTAwKTsKLQotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIDApOwotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9wcmV2X29mZnNldCAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIDEwMDAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGlzdCwgMCk7Ci0KLSAgLyogT2Zmc2V0IHNob3VsZCBiZSBkZWZpbmVkIG5vdyAqLwotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9vZmZzZXRfYXRfZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMTAwMDApOwotCi0gIC8qIG1vdmUgc29tZSBtb3JlLCB3ZSBzaG91bGQgaGF2ZSBhbiB1cGRhdGVkIG9mZnNldCAqLwotICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgNTApOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSA1MCk7Ci0KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAob2Zmc2V0LCA1MCk7Ci0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0IChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMTAwMDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkaXN0LCA1MCk7Ci0KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIDEwMDAwKTsKLQotICAvKiBwdXNoIGEgYnVmZmVyIHdpdGhvdXQgb2Zmc2V0IGluIHRoZSBhZGFwdGVyIChjb250aWd1b3VzIHdpdGggdGhlCi0gICAgIG90aGVyKSAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMCk7Ci0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDE1MCk7Ci0KLSAgLyogcHVzaCBhIGJ1ZmZlciB3aXRoIG9mZnNldCBpbiB0aGUgYWRhcHRlciAoYnV0IGNvbnRpZ3VvdXMgd2l0aCB0aGUKLSAgICAgb3RoZXIpLCB0aGUgb2Zmc2V0IHNob3VsZG4ndCBiZSB0YWtlbiBpbnRvIGFjY291bnQgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDApOwotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSA9IDUwMDAwOwotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAyNTApOwotCi0gIC8qIG9mZnNldCBzdGlsbCBhcyBpdCB3YXMgYmVmb3JlIHRoZSBwdXNoICovCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgNTApOwotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9wcmV2X29mZnNldCAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIDEwMDAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGlzdCwgNTApOwotCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAob2Zmc2V0LCAxMDAwMCk7Ci0KLSAgLyogZmx1c2ggYXdheSBidWZmZXIgd2l0aCB0aGUgb2Zmc2V0ICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCA1MCk7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDIwMCk7Ci0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMTAwKTsKLSAgLyogVGhlIHByZXZpb3VzIHZhbGlkIG9mZnNldCBzZWVuIGlzIG5vdyAxMDAgYnl0ZXMgYXdheSAqLwotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9wcmV2X29mZnNldCAoYWRhcHRlciwgJmRpc3QpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIDEwMDAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGlzdCwgMTAwKTsKLQotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9vZmZzZXRfYXRfZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMTAwMDApOwotCi0gIC8qIG1vdmUgaW50byB0aGUgc2Vjb25kIGJ1ZmZlciAqLwotICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgNTApOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbCA9PSAxNTApOwotICBvZmZzZXQgPSBnc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIDE1MCk7Ci0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0IChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMTAwMDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkaXN0LCAxNTApOwotCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAob2Zmc2V0LCAxMDAwMCk7Ci0KLSAgLyogbW92ZSB0byB0aGlyZCBidWZmZXIsIHdlIHNob3VsZCBzdGlsbCBzZWUgYSBjb250aW51b3VzbHkgaW5jcmVhc2luZwotICAgKiBvZmZzZXQgYW5kIGlnbm9yZSB0aGUgbm9uLWRpc2NvbnQgb2Zmc2V0ICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCA1MCk7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGF2YWlsID09IDEwMCk7Ci0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMjAwKTsKLSAgLyogQnV0IHRoZSBwcmV2X29mZnNldCAqZG9lcyogZ2l2ZSB1cyB0aGUgYWN0dWFsIGJ1ZmZlciBvZmZzZXQgdmFsdWUgKi8KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAob2Zmc2V0LCA1MDAwMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRpc3QsIDApOwotCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAob2Zmc2V0LCAxMDAwMCk7Ci0KLSAgLyogbW92ZSBldmVyeXRoaW5nIG91dCwgd2UgZW5kIHVwIGF0IHRoZSBsYXN0IG9mZnNldCAqLwotICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgMTAwKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7Ci0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMzAwKTsKLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfcHJldl9vZmZzZXQgKGFkYXB0ZXIsICZkaXN0KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAob2Zmc2V0LCA1MDAwMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRpc3QsIDEwMCk7Ci0KLSAgb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChvZmZzZXQsIDEwMDAwKTsKLQotICAvKiBjbGVhciBldmVyeXRoaW5nICovCi0gIGdzdF9hZGFwdGVyX2NsZWFyIChhZGFwdGVyKTsKLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotICBmYWlsX3VubGVzcyAoYXZhaWwgPT0gMCk7Ci0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX2Rpc3RhbmNlX2Zyb21fZGlzY29udCAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgMCk7Ci0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX3ByZXZfb2Zmc2V0IChhZGFwdGVyLCAmZGlzdCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKG9mZnNldCwgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRpc3QsIDApOwotCi0gIG9mZnNldCA9IGdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250IChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAob2Zmc2V0LCBHU1RfQlVGRkVSX09GRlNFVF9OT05FKTsKLQotICBnX29iamVjdF91bnJlZiAoYWRhcHRlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2NhbikKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLSAgZ3VpbnQgb2Zmc2V0OwotICBndWludCBpOwotCi0gIGFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0gIGZhaWxfdW5sZXNzIChhZGFwdGVyICE9IE5VTEwpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfV1JJVEUpKTsKLSAgLyogZmlsbCB3aXRoIHBhdHRlcm4gKi8KLSAgZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQotICAgICgoZ3VpbnQ4ICopIGluZm8uZGF0YSlbaV0gPSBpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLQotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOwotCi0gIC8qIGZpbmQgZmlyc3QgYnl0ZXMgKi8KLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMDAxMDIwMywgMCwgMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMTAyMDMwNCwgMCwgMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAxKTsKLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMTAyMDMwNCwgMSwgOTkpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDEpOwotICAvKiBvZmZzZXQgaXMgcGFzdCB0aGUgcGF0dGVybiBzdGFydCAqLwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDAxMDIwMzA0LCAyLCA5OCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOwotICAvKiBub3QgZW5vdWdoIGJ5dGVzIHRvIGZpbmQgdGhlIHBhdHRlcm4gKi8KLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHgwMjAzMDQwNSwgMiwgMyk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDAyMDMwNDA1LCAyLCA0KTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAyKTsKLSAgLyogc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBsYXN0IHNjYW5uZWQgYnl0ZSAqLwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDQwNDE0MjQzLCAwLCAweDQxKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAtMSk7Ci0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NDA0MTQyNDMsIDAsIDB4NDMpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg0MDQxNDI0MywgMCwgMHg0NCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHg0MCk7Ci0gIC8qIHBhc3QgdGhlIHN0YXJ0ICovCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NDA0MTQyNDMsIDY1LCAxMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDQwNDE0MjQzLCA2NCwgNSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gNjQpOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDYwNjE2MjYzLCA2NSwgMzUpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4NjApOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDYwNjE2MjYzLCAweDYwLCA0KTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDYwKTsKLSAgLyogcGFzdCB0aGUgc3RhcnQgKi8KLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MDYxNjI2MywgMHg2MSwgMyk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOwotCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDk5LCAxKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAtMSk7Ci0KLSAgLyogYWRkIGFub3RoZXIgYnVmZmVyICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfV1JJVEUpKTsKLSAgLyogZmlsbCB3aXRoIHBhdHRlcm4gKi8KLSAgZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQotICAgICgoZ3VpbnQ4ICopIGluZm8uZGF0YSlbaV0gPSBpICsgMTAwOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLQotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOwotCi0gIC8qIHBhc3QgdGhlIHN0YXJ0ICovCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDB4NjEsIDYpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKLSAgLyogdGhpcyBzaG91bGQgd29yayAqLwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDYxNjI2MzY0LCAweDYxLCA0KTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDYxKTsKLSAgLyogbm90IGVub3VnaCBkYXRhICovCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjI2MzY0NjUsIDB4NjEsIDQpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MjYzNjQ2NSwgMHg2MSwgNSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHg2Mik7Ci0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjI2MzY0NjUsIDAsIDEyMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHg2Mik7Ci0KLSAgLyogYm9yZGVyIGNvbmRpdGlvbnMgKi8KLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MjYzNjQ2NSwgMCwgMjAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDYyKTsKLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2MzY0NjU2NiwgMCwgMjAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDYzKTsKLSAgLyogd2UgY29tcGxldGVseSBzZWFyY2hlZCB0aGUgZmlyc3QgbGlzdCAqLwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAwLCAyMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4NjQpOwotICAvKiBza2lwIGZpcnN0IGJ1ZmZlciAqLwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAweDY0LAotICAgICAgMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweDY0KTsKLSAgLyogcGFzdCB0aGUgc3RhcnQgKi8KLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2NDY1NjY2NywgMHg2NSwKLSAgICAgIDEwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAtMSk7Ci0gIC8qIG5vdCBlbm91Z2ggZGF0YSB0byBzY2FuICovCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4NjQ2NTY2NjcsIDB4NjMsIDQpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHhmZmZmZmZmZiwgMHg2NDY1NjY2NywgMHg2MywgNSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHg2NCk7Ci0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDAsIDE5OSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAweDYyLAotICAgICAgMTAyKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAweGM0KTsKLSAgLyogZGlmZmVyZW50IG1hc2tzICovCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4MDBmZmZmZmYsIDB4MDA2NTY2NjcsIDB4NjQsCi0gICAgICAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4NjQpOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweDAwMDAwMGZmLCAweDAwMDAwMDAwLCAwLCAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IC0xKTsKLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHgwMDAwMDBmZiwgMHgwMDAwMDAwMywgMCwgMTAwKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAwKTsKLSAgb2Zmc2V0ID0KLSAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoYWRhcHRlciwgMHgwMDAwMDBmZiwgMHgwMDAwMDA2MSwgMHg2MSwKLSAgICAgIDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmMDAwMDAwLCAweDYxMDAwMDAwLCAwLCAweDYyKTsKLSAgZmFpbF91bmxlc3MgKG9mZnNldCA9PSAtMSk7Ci0gIC8qIGRvZXMgbm90IGV2ZW4gZXhpc3QgKi8KLSAgQVNTRVJUX0NSSVRJQ0FMIChvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweDAwZmZmZmZmLCAweGZmZmZmZmZmLCAweDY1LAotICAgICAgICAgIDk5KSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOwotCi0gIC8qIGZsdXNoIHNvbWUgYnl0ZXMgKi8KLSAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIDB4MjApOwotCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MjAyMTIyMjMsIDAsIDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMCk7Ci0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4MjAyMTIyMjMsIDAsIDQpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDApOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAweDYyLAotICAgICAgNzApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4YTQpOwotICBvZmZzZXQgPQotICAgICAgZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAwLCAxNjgpOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4YTQpOwotCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDE2NCwgNCk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gMHhhNCk7Ci0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDB4NDQsCi0gICAgICAxMDApOwotICBmYWlsX3VubGVzcyAob2Zmc2V0ID09IDB4YTQpOwotICAvKiBub3QgZW5vdWdoIGJ5dGVzICovCi0gIG9mZnNldCA9Ci0gICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDB4NDQsCi0gICAgICA5OSk7Ci0gIGZhaWxfdW5sZXNzIChvZmZzZXQgPT0gLTEpOwotCi0gIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBGaWxsIGEgYnVmZmVyIHdpdGggYSBzZXF1ZW5jZSBvZiAzMiBiaXQgaW50cyBhbmQgcmVhZCB0aGVtIGJhY2sgb3V0Ci0gKiB1c2luZyB0YWtlX2J1ZmZlciwgY2hlY2tpbmcgdGhhdCB0aGV5J3JlIHN0aWxsIGluIHRoZSByaWdodCBvcmRlciAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGFrZV9saXN0KQotewotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBpbnQgaSA9IDA7Ci0KLSAgYWRhcHRlciA9IGNyZWF0ZV9hbmRfZmlsbF9hZGFwdGVyICgpOwotICB3aGlsZSAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKSA+PSBzaXplb2YgKGd1aW50MzIpKSB7Ci0gICAgR0xpc3QgKmxpc3QsICp3YWxrOwotICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgIGdzaXplIGxlZnQ7Ci0gICAgR3N0TWFwSW5mbyBpbmZvOwotICAgIGd1aW50OCAqcHRyOwotCi0gICAgbGlzdCA9IGdzdF9hZGFwdGVyX3Rha2VfbGlzdCAoYWRhcHRlciwgc2l6ZW9mIChndWludDMyKSAqIDUpOwotICAgIGZhaWxfdW5sZXNzIChsaXN0ICE9IE5VTEwpOwotCi0gICAgZm9yICh3YWxrID0gbGlzdDsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgICAgYnVmID0gd2Fsay0+ZGF0YTsKLQotICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWYsICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLQotICAgICAgcHRyID0gaW5mby5kYXRhOwotICAgICAgbGVmdCA9IGluZm8uc2l6ZTsKLQotICAgICAgd2hpbGUgKGxlZnQgPiAwKSB7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChHU1RfUkVBRF9VSU5UMzJfTEUgKHB0cikgPT0gaSk7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgcHRyICs9IHNpemVvZiAoZ3VpbnQzMik7Ci0gICAgICAgIGxlZnQgLT0gc2l6ZW9mIChndWludDMyKTsKLSAgICAgIH0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIH0KLSAgICBnX2xpc3RfZnJlZSAobGlzdCk7Ci0gIH0KLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMCwKLSAgICAgICJEYXRhIHdhcyBsZWZ0IGluIHRoZSBhZGFwdGVyIik7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIEZpbGwgYSBidWZmZXIgd2l0aCBhIHNlcXVlbmNlIG9mIDMyIGJpdCBpbnRzIGFuZCByZWFkIGEgY291cGxlIG9mIGZyb250Ci0gKiBidWZmZXJzIHVzaW5nIGdldF9idWZmZXIsIGNoZWNraW5nIHRoYXQgdGhleSdyZSBzdGlsbCBpbiB0aGUgcmlnaHQgb3JkZXIgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dldF9saXN0KQotewotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBpbnQgaSA9IDA7Ci0gIGdzaXplIHNpemUgPSAwOwotICBHTGlzdCAqbGlzdCwgKndhbGs7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBnc2l6ZSBsZWZ0OwotICBHc3RNYXBJbmZvIGluZm87Ci0gIGd1aW50OCAqcHRyOwotCi0gIGFkYXB0ZXIgPSBjcmVhdGVfYW5kX2ZpbGxfYWRhcHRlciAoKTsKLSAgc2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0KLSAgbGlzdCA9IGdzdF9hZGFwdGVyX2dldF9saXN0IChhZGFwdGVyLCBzaXplb2YgKGd1aW50MzIpICogNSk7Ci0gIGZhaWxfdW5sZXNzIChsaXN0ICE9IE5VTEwpOwotCi0gIGZvciAod2FsayA9IGxpc3Q7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBidWYgPSB3YWxrLT5kYXRhOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWYsICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLQotICAgIHB0ciA9IGluZm8uZGF0YTsKLSAgICBsZWZ0ID0gaW5mby5zaXplOwotCi0gICAgd2hpbGUgKGxlZnQgPiAwKSB7Ci0gICAgICBmYWlsX3VubGVzcyAoR1NUX1JFQURfVUlOVDMyX0xFIChwdHIpID09IGkpOwotICAgICAgaSsrOwotICAgICAgcHRyICs9IHNpemVvZiAoZ3VpbnQzMik7Ci0gICAgICBsZWZ0IC09IHNpemVvZiAoZ3VpbnQzMik7Ci0gICAgfQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfQotICBnX2xpc3RfZnJlZSAobGlzdCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gc2l6ZSwKLSAgICAgICJBbGwgZGF0YSBzaG91bGQgcmVtYWluIGluIHRoZSBhZGFwdGVyIik7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIEZpbGwgYSBidWZmZXIgd2l0aCBhIHNlcXVlbmNlIG9mIDMyIGJpdCBpbnRzIGFuZCByZWFkIHRoZW0gYmFjayBvdXQKLSAqIHVzaW5nIHRha2VfYnVmZmVyLCBjaGVja2luZyB0aGF0IHRoZXkncmUgc3RpbGwgaW4gdGhlIHJpZ2h0IG9yZGVyICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90YWtlX2J1ZmZlcl9saXN0KQotewotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBpbnQgaSA9IDA7Ci0KLSAgYWRhcHRlciA9IGNyZWF0ZV9hbmRfZmlsbF9hZGFwdGVyICgpOwotICB3aGlsZSAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKSA+PSBzaXplb2YgKGd1aW50MzIpKSB7Ci0gICAgR3N0QnVmZmVyTGlzdCAqYnVmZmVyX2xpc3Q7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgZ3NpemUgbGVmdDsKLSAgICBHc3RNYXBJbmZvIGluZm87Ci0gICAgZ3VpbnQ4ICpwdHI7Ci0gICAgZ3VpbnQgbiwgbnVtOwotCi0gICAgYnVmZmVyX2xpc3QgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9saXN0IChhZGFwdGVyLCBzaXplb2YgKGd1aW50MzIpICogNSk7Ci0gICAgZmFpbF91bmxlc3MgKGJ1ZmZlcl9saXN0ICE9IE5VTEwpOwotICAgIG51bSA9IGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGJ1ZmZlcl9saXN0KTsKLSAgICBmYWlsX3VubGVzcyAobnVtID4gMCk7Ci0KLSAgICBmb3IgKG4gPSAwOyBuIDwgbnVtOyArK24pIHsKLSAgICAgIGJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKGJ1ZmZlcl9saXN0LCBuKTsKLQotICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWYsICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLQotICAgICAgcHRyID0gaW5mby5kYXRhOwotICAgICAgbGVmdCA9IGluZm8uc2l6ZTsKLQotICAgICAgd2hpbGUgKGxlZnQgPiAwKSB7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChHU1RfUkVBRF9VSU5UMzJfTEUgKHB0cikgPT0gaSk7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgcHRyICs9IHNpemVvZiAoZ3VpbnQzMik7Ci0gICAgICAgIGxlZnQgLT0gc2l6ZW9mIChndWludDMyKTsKLSAgICAgIH0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotICAgIH0KLSAgICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKGJ1ZmZlcl9saXN0KTsKLSAgfQotICBmYWlsX3VubGVzcyAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKSA9PSAwLAotICAgICAgIkRhdGEgd2FzIGxlZnQgaW4gdGhlIGFkYXB0ZXIiKTsKLQotICBnX29iamVjdF91bnJlZiAoYWRhcHRlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogRmlsbCBhIGJ1ZmZlciB3aXRoIGEgc2VxdWVuY2Ugb2YgMzIgYml0IGludHMgYW5kIHJlYWQgYSBjb3VwbGUgb2YgZnJvbnQKLSAqIGJ1ZmZlcnMgdXNpbmcgZ2V0X2J1ZmZlciwgY2hlY2tpbmcgdGhhdCB0aGV5J3JlIHN0aWxsIGluIHRoZSByaWdodCBvcmRlciAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2V0X2J1ZmZlcl9saXN0KQotewotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBpbnQgaSA9IDA7Ci0gIGdzaXplIHNpemUgPSAwOwotICBHc3RCdWZmZXJMaXN0ICpidWZmZXJfbGlzdDsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGdzaXplIGxlZnQ7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLSAgZ3VpbnQ4ICpwdHI7Ci0gIGd1aW50IG4sIG51bTsKLQotICBhZGFwdGVyID0gY3JlYXRlX2FuZF9maWxsX2FkYXB0ZXIgKCk7Ci0gIHNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGFkYXB0ZXIpOwotCi0gIGJ1ZmZlcl9saXN0ID0gZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcl9saXN0IChhZGFwdGVyLCBzaXplb2YgKGd1aW50MzIpICogNSk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXJfbGlzdCAhPSBOVUxMKTsKLQotICBudW0gPSBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChidWZmZXJfbGlzdCk7Ci0gIGZhaWxfdW5sZXNzIChudW0gPiAwKTsKLQotICBmb3IgKG4gPSAwOyBuIDwgbnVtOyArK24pIHsKLSAgICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChidWZmZXJfbGlzdCwgbik7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotCi0gICAgcHRyID0gaW5mby5kYXRhOwotICAgIGxlZnQgPSBpbmZvLnNpemU7Ci0KLSAgICB3aGlsZSAobGVmdCA+IDApIHsKLSAgICAgIGZhaWxfdW5sZXNzIChHU1RfUkVBRF9VSU5UMzJfTEUgKHB0cikgPT0gaSk7Ci0gICAgICBpKys7Ci0gICAgICBwdHIgKz0gc2l6ZW9mIChndWludDMyKTsKLSAgICAgIGxlZnQgLT0gc2l6ZW9mIChndWludDMyKTsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mbyk7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChidWZmZXJfbGlzdCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gc2l6ZSwKLSAgICAgICJBbGwgZGF0YSBzaG91bGQgcmVtYWluIGluIHRoZSBhZGFwdGVyIik7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lcmdlKQotewotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgZ2ludCBpOwotCi0gIGFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0gIGZhaWxfaWYgKGFkYXB0ZXIgPT0gTlVMTCk7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMCk7Ci0gIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMCk7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfYWRhcHRlcl9tYXAgKGFkYXB0ZXIsIDIwKSAhPSBOVUxMKTsKLSAgICBnc3RfYWRhcHRlcl91bm1hcCAoYWRhcHRlcik7Ci0KLSAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgMTApOwotICB9Ci0gIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90YWtlX2J1ZmZlcl9mYXN0KQotewotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBhZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBmYWlsX2lmIChhZGFwdGVyID09IE5VTEwpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNSk7Ci0gIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwKTsKLSAgZmFpbF9pZiAoYnVmZmVyID09IE5VTEwpOwotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTUpOwotICBmYWlsX2lmIChidWZmZXIgPT0gTlVMTCk7Ci0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1ZmZlcik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMzApOwotCi0gIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3QgKGFkYXB0ZXIsIDMwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX25fbWVtb3J5IChidWZmZXIpID09IDMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZXNfcmFuZ2UgKGJ1ZmZlciwgMCwgMSwgTlVMTCwgTlVMTCkgPT0gNSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplc19yYW5nZSAoYnVmZmVyLCAxLCAxLCBOVUxMLCBOVUxMKSA9PSAxMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplc19yYW5nZSAoYnVmZmVyLCAyLCAxLCBOVUxMLCBOVUxMKSA9PSAxNSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMCk7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMCk7Ci0gIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmZmVyKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLSAgZmFpbF9pZiAoYnVmZmVyID09IE5VTEwpOwotICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWZmZXIpOwotCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCAyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMjgpOwotCi0gIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3QgKGFkYXB0ZXIsIDEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZmZlcikgPT0gMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplc19yYW5nZSAoYnVmZmVyLCAwLCAxLCBOVUxMLCBOVUxMKSA9PSA4KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemVzX3JhbmdlIChidWZmZXIsIDEsIDEsIE5VTEwsIE5VTEwpID09IDIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKSA9PSAxOCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgYnVmZmVyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdCAoYWRhcHRlciwgOCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX25fbWVtb3J5IChidWZmZXIpID09IDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSA4KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMTApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGdzdF9hZGFwdGVyX2NsZWFyIChhZGFwdGVyKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPT0gMCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfYWRhcHRlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJhZGFwdGVyIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BlZWsxKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BlZWsyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BlZWszKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2UxKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2UyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2UzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2Vfb3JkZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGFrZV9idWZfb3JkZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGltZXN0YW1wKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NjYW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGFrZV9saXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dldF9saXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2VfYnVmZmVyX2xpc3QpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X2J1ZmZlcl9saXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21lcmdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Rha2VfYnVmZmVyX2Zhc3QpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfb2Zmc2V0KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9hZGFwdGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYmFzZXBhcnNlLmMgYi90ZXN0cy9jaGVjay9saWJzL2Jhc2VwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmQzYjY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvYmFzZXBhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIEF1dGhvcjogVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlcGFyc2UuaD4KLQotc3RhdGljIEdzdFBhZCAqbXlzcmNwYWQsICpteXNpbmtwYWQ7Ci1zdGF0aWMgR3N0RWxlbWVudCAqcGFyc2V0ZXN0Owotc3RhdGljIEdzdEJ1cyAqYnVzOwotc3RhdGljIEdNYWluTG9vcCAqbG9vcCA9IE5VTEw7Ci1zdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLXN0YXRpYyBnYm9vbGVhbiBoYXZlX2RhdGEgPSBGQUxTRTsKLXN0YXRpYyBnaW50IGJ1ZmZlcl9jb3VudCA9IDA7Ci1zdGF0aWMgZ2Jvb2xlYW4gY2Fwc19zZXQgPSBGQUxTRTsKLQotI2RlZmluZSBURVNUX1ZJREVPX1dJRFRIIDY0MAotI2RlZmluZSBURVNUX1ZJREVPX0hFSUdIVCA0ODAKLSNkZWZpbmUgVEVTVF9WSURFT19GUFNfTiAzMAotI2RlZmluZSBURVNUX1ZJREVPX0ZQU19EIDEKLQotI2RlZmluZSBHU1RfUEFSU0VSX1RFU1RFUl9UWVBFIGdzdF9wYXJzZXJfdGVzdGVyX2dldF90eXBlKCkKLXN0YXRpYyBHVHlwZSBnc3RfcGFyc2VyX3Rlc3Rlcl9nZXRfdHlwZSAodm9pZCk7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQYXJzZXJUZXN0ZXIgR3N0UGFyc2VyVGVzdGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBhcnNlclRlc3RlckNsYXNzIEdzdFBhcnNlclRlc3RlckNsYXNzOwotCi1zdHJ1Y3QgX0dzdFBhcnNlclRlc3RlcgotewotICBHc3RCYXNlUGFyc2UgcGFyZW50OwotfTsKLQotc3RydWN0IF9Hc3RQYXJzZXJUZXN0ZXJDbGFzcwotewotICBHc3RCYXNlUGFyc2VDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0RFRklORV9UWVBFIChHc3RQYXJzZXJUZXN0ZXIsIGdzdF9wYXJzZXJfdGVzdGVyLCBHU1RfVFlQRV9CQVNFX1BBUlNFKTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfcGFyc2VyX3Rlc3Rlcl9zdGFydCAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wYXJzZXJfdGVzdGVyX3N0b3AgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcGFyc2VyX3Rlc3Rlcl9zZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSwgY2Fwcyk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3BhcnNlcl90ZXN0ZXJfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgaWYgKGNhcHNfc2V0ID09IEZBTFNFKSB7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLSAgICAvKiBwdXNoIGNhcHMgKi8KLSAgICBjYXBzID0KLSAgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtdGVzdC1jdXN0b20iLCAid2lkdGgiLCBHX1RZUEVfSU5ULAotICAgICAgICBURVNUX1ZJREVPX1dJRFRILCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgVEVTVF9WSURFT19IRUlHSFQsICJmcmFtZXJhdGUiLAotICAgICAgICBHU1RfVFlQRV9GUkFDVElPTiwgVEVTVF9WSURFT19GUFNfTiwgVEVTVF9WSURFT19GUFNfRCwgTlVMTCk7Ci0gICAgZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgY2Fwc19zZXQgPSBUUlVFOwotICB9Ci0KLSAgd2hpbGUgKGZyYW1lLT5idWZmZXIgJiYgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZnJhbWUtPmJ1ZmZlcikgPj0gOCkgewotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGZyYW1lLT5idWZmZXIpID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChHU1RfU0VDT05ELCBURVNUX1ZJREVPX0ZQU19ELAotICAgICAgICBURVNUX1ZJREVPX0ZQU19OKTsKLSAgICByZXQgPSBnc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhbWUgKHBhcnNlLCBmcmFtZSwgOCk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wYXJzZXJfdGVzdGVyX2NsYXNzX2luaXQgKEdzdFBhcnNlclRlc3RlckNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEJhc2VQYXJzZUNsYXNzICpiYXNlcGFyc2VfY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9DTEFTUyAoa2xhc3MpOwotCi0gIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICAgIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsCi0gICAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXRlc3QtY3VzdG9tIikpOwotCi0gIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGwgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgICBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsCi0gICAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXRlc3QtY3VzdG9tIikpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbCk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUGFyc2VyVGVzdGVyIiwgIlBhcnNlci9WaWRlbyIsICJ5ZXAiLCAibWUiKTsKLQotICBiYXNlcGFyc2VfY2xhc3MtPnN0YXJ0ID0gZ3N0X3BhcnNlcl90ZXN0ZXJfc3RhcnQ7Ci0gIGJhc2VwYXJzZV9jbGFzcy0+c3RvcCA9IGdzdF9wYXJzZXJfdGVzdGVyX3N0b3A7Ci0gIGJhc2VwYXJzZV9jbGFzcy0+aGFuZGxlX2ZyYW1lID0gZ3N0X3BhcnNlcl90ZXN0ZXJfaGFuZGxlX2ZyYW1lOwotICBiYXNlcGFyc2VfY2xhc3MtPnNldF9zaW5rX2NhcHMgPSBnc3RfcGFyc2VyX3Rlc3Rlcl9zZXRfc2lua19jYXBzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BhcnNlcl90ZXN0ZXJfaW5pdCAoR3N0UGFyc2VyVGVzdGVyICogdGVzdGVyKQotewotfQotCi1zdGF0aWMgdm9pZAotc2V0dXBfcGFyc2VydGVzdGVyICh2b2lkKQotewotICBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICAgIEdTVF9QQURfU0lOSywKLSAgICAgIEdTVF9QQURfQUxXQVlTLAotICAgICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC10ZXN0LWN1c3RvbSIpCi0gICAgICApOwotICBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgICBHU1RfUEFEX1NSQywKLSAgICAgIEdTVF9QQURfQUxXQVlTLAotICAgICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC10ZXN0LWN1c3RvbSIpCi0gICAgICApOwotCi0gIHBhcnNldGVzdCA9IGdfb2JqZWN0X25ldyAoR1NUX1BBUlNFUl9URVNURVJfVFlQRSwgTlVMTCk7Ci0gIG15c3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKHBhcnNldGVzdCwgJnNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChwYXJzZXRlc3QsICZzaW5rdGVtcGxhdGUpOwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAocGFyc2V0ZXN0LCBidXMpOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9wYXJzZXJ0ZXN0ICh2b2lkKQotewotICAvKiByZWxlYXNlIHRoZSBidXMgZmlyc3QgdG8gZ2V0IHJpZCBvZiBhbGwgcmVmY291bnRzICovCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKHBhcnNldGVzdCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAocGFyc2V0ZXN0KTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChwYXJzZXRlc3QpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAocGFyc2V0ZXN0KTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1jcmVhdGVfdGVzdF9idWZmZXIgKGd1aW50NjQgbnVtKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgZ3VpbnQ2NCAqZGF0YSA9IGdfbWFsbG9jIChzaXplb2YgKGd1aW50NjQpKTsKLQotICAqZGF0YSA9IG51bTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChkYXRhLCBzaXplb2YgKGd1aW50NjQpKTsKLQotICBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKG51bSwgR1NUX1NFQ09ORCAqIFRFU1RfVklERU9fRlBTX0QsCi0gICAgICBURVNUX1ZJREVPX0ZQU19OKTsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKEdTVF9TRUNPTkQsIFRFU1RfVklERU9fRlBTX0QsCi0gICAgICBURVNUX1ZJREVPX0ZQU19OKTsKLQotICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9zdGFydHVwX2V2ZW50cyAodm9pZCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInJhbmRvbXZhbHVlIikpKTsKLQotICAvKiBwdXNoIGNhcHMgKi8KLSAgY2FwcyA9Ci0gICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC10ZXN0LWN1c3RvbSIsICJ3aWR0aCIsIEdfVFlQRV9JTlQsCi0gICAgICBURVNUX1ZJREVPX1dJRFRILCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgVEVTVF9WSURFT19IRUlHSFQsICJmcmFtZXJhdGUiLAotICAgICAgR1NUX1RZUEVfRlJBQ1RJT04sIFRFU1RfVklERU9fRlBTX04sIFRFU1RfVklERU9fRlBTX0QsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSkpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja19ub19lcnJvcl9yZWNlaXZlZCAodm9pZCkKLXsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIG1zZyA9IGdzdF9idXNfcG9wX2ZpbHRlcmVkIChidXMsIEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgZmFpbF91bmxlc3MgKG1zZyA9PSBOVUxMKTsKLSAgaWYgKG1zZykKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLX0KLQotc3RhdGljIHZvaWQKLXJ1bl9wYXJzZXJfcGxheWJhY2tfdGVzdCAoR0xpc3QgKiBpbnB1dCwgZ2ludCBleHBlY3RlZF9vdXRwdXQsIGdkb3VibGUgcmF0ZSkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGd1aW50NjQgaTsKLSAgR0xpc3QgKml0ZXI7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwYXJzZXRlc3QsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHNlbmRfc3RhcnR1cF9ldmVudHMgKCk7Ci0KLSAgLyogcHVzaCBhIG5ldyBzZWdtZW50ICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBzZWdtZW50LnJhdGUgPSByYXRlOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoIGJ1ZmZlcnMsIHRoZSBkYXRhIGlzIGFjdHVhbGx5IGEgbnVtYmVyIHNvIHdlIGNhbiB0cmFjayB0aGVtICovCi0gIGZvciAoaXRlciA9IGlucHV0OyBpdGVyOyBpdGVyID0gZ19saXN0X25leHQgKGl0ZXIpKSB7Ci0gICAgYnVmZmVyID0gaXRlci0+ZGF0YTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgfQotICBnX2xpc3RfZnJlZSAoaW5wdXQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotCi0gIC8qIGNoZWNrIHRoYXQgYWxsIGJ1ZmZlcnMgd2VyZSByZWNlaXZlZCBieSBvdXIgc291cmNlIHBhZCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gZXhwZWN0ZWRfb3V0cHV0KTsKLSAgaSA9IDA7Ci0gIGZvciAoaXRlciA9IGJ1ZmZlcnM7IGl0ZXI7IGl0ZXIgPSBnX2xpc3RfbmV4dCAoaXRlcikpIHsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBndWludDY0IG51bTsKLQotICAgIGJ1ZmZlciA9IGl0ZXItPmRhdGE7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gICAgbnVtID0gKihndWludDY0ICopIG1hcC5kYXRhOwotICAgIGZhaWxfdW5sZXNzIChpID09IG51bSk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfUFRTIChidWZmZXIpID09IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoaSwKLSAgICAgICAgICAgIEdTVF9TRUNPTkQgKiBURVNUX1ZJREVPX0ZQU19ELCBURVNUX1ZJREVPX0ZQU19OKSk7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPT0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChHU1RfU0VDT05ELCBURVNUX1ZJREVPX0ZQU19ELAotICAgICAgICAgICAgVEVTVF9WSURFT19GUFNfTikpOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBpKys7Ci0gIH0KLQotICBnX2xpc3RfZnJlZV9mdWxsIChidWZmZXJzLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBjaGVja19ub19lcnJvcl9yZWNlaXZlZCAoKTsKLQotICBjbGVhbnVwX3BhcnNlcnRlc3QgKCk7Ci19Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHBhcnNlcl9wbGF5YmFjaykKLXsKLSAgR0xpc3QgKmlucHV0ID0gTlVMTDsKLSAgZ2ludCBpOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBzZXR1cF9wYXJzZXJ0ZXN0ZXIgKCk7Ci0KLSAgLyogcHVzaCBidWZmZXJzLCB0aGUgZGF0YSBpcyBhY3R1YWxseSBhIG51bWJlciBzbyB3ZSBjYW4gdHJhY2sgdGhlbSAqLwotICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgYnVmZmVyID0gY3JlYXRlX3Rlc3RfYnVmZmVyIChpKTsKLSAgICBpbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0LCBidWZmZXIpOwotICB9Ci0KLSAgcnVuX3BhcnNlcl9wbGF5YmFja190ZXN0IChpbnB1dCwgMywgMS4wKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLS8qIENoZWNrIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjE5NDEgKi8KLUdTVF9TVEFSVF9URVNUIChwYXJzZXJfcmV2ZXJzZV9wbGF5YmFja19vbl9wYXNzdGhyb3VnaCkKLXsKLSAgR0xpc3QgKmlucHV0ID0gTlVMTDsKLSAgZ2ludCBpOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBzZXR1cF9wYXJzZXJ0ZXN0ZXIgKCk7Ci0KLSAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoIChHU1RfQkFTRV9QQVJTRSAocGFyc2V0ZXN0KSwgVFJVRSk7Ci0KLSAgLyogcHVzaCBidWZmZXJzLCB0aGUgZGF0YSBpcyBhY3R1YWxseSBhIG51bWJlciBzbyB3ZSBjYW4gdHJhY2sgdGhlbSAqLwotICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgYnVmZmVyID0gY3JlYXRlX3Rlc3RfYnVmZmVyIChpKTsKLSAgICBpZiAoaSA+IDApCi0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICBpbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0LCBidWZmZXIpOwotICB9Ci0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKGdfbGlzdF9udGggKGlucHV0LCAzKS0+ZGF0YSwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotCi0gIHJ1bl9wYXJzZXJfcGxheWJhY2tfdGVzdCAoaW5wdXQsIDYsIC0xLjApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChwYXJzZXJfZW1wdHlfc3RyZWFtKQotewotICBzZXR1cF9wYXJzZXJ0ZXN0ZXIgKCk7Ci0KLSAgcnVuX3BhcnNlcl9wbGF5YmFja190ZXN0IChOVUxMLCAwLCAxLjApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1fc2lua19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50NjQgbnVtOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgbnVtID0gKihndWludDY0ICopIG1hcC5kYXRhOwotCi0gIGZhaWxfdW5sZXNzIChidWZmZXJfY291bnQgPT0gbnVtKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfUFRTIChidWZmZXIpID09Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKGJ1ZmZlcl9jb3VudCwgR1NUX1NFQ09ORCAqIFRFU1RfVklERU9fRlBTX0QsCi0gICAgICAgICAgVEVTVF9WSURFT19GUFNfTikpOwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9PQotICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChHU1RfU0VDT05ELCBURVNUX1ZJREVPX0ZQU19ELAotICAgICAgICAgIFRFU1RfVklERU9fRlBTX04pKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgYnVmZmVyX2NvdW50Kys7Ci0KLSAgaGF2ZV9kYXRhID0gVFJVRTsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR1NUX0lORk9fT0JKRUNUIChwYWQsICJnb3QgJXMgZXZlbnQgJXA6ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBldmVudCwgZXZlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIGlmIChsb29wKSB7Ci0gICAgICAgIHdoaWxlICghZ19tYWluX2xvb3BfaXNfcnVubmluZyAobG9vcCkpIHsKLSAgICAgICAgICAvKiBub3RoaW5nICovCi0gICAgICAgIH07Ci0gICAgICB9Ci0gICAgICBoYXZlX2VvcyA9IFRSVUU7Ci0gICAgICBpZiAobG9vcCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1fc3JjX2dldHJhbmdlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IGxlbmd0aCwKLSAgICBHc3RCdWZmZXIgKiogYnVmZmVyKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgaWYgKG9mZnNldCA+PSA4MCAmJiBoYXZlX2VvcyA9PSBGQUxTRSkgewotICAgIHJldCA9IGdzdF9lbGVtZW50X3NlZWsgKHBhcnNldGVzdCwgLTEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIHwgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfU0VULCBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKDUsCi0gICAgICAgICAgICBHU1RfU0VDT05EICogVEVTVF9WSURFT19GUFNfRCwgVEVTVF9WSURFT19GUFNfTikpOwotICAgIGZhaWxfdW5sZXNzIChyZXQgPT0gVFJVRSk7Ci0gICAgYnVmZmVyX2NvdW50ID0gMDsKLSAgfQotCi0gICpidWZmZXIgPSBjcmVhdGVfdGVzdF9idWZmZXIgKG9mZnNldCAvIDgpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzp7Ci0gICAgICBnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKHF1ZXJ5LCBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFLCAxLCAtMSwgMCk7Ci0gICAgICBnc3RfcXVlcnlfYWRkX3NjaGVkdWxpbmdfbW9kZSAocXVlcnksIEdTVF9QQURfTU9ERV9QVUxMKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInVuaGFuZGxlZCAlcyBxdWVyeSIsIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLUdTVF9TVEFSVF9URVNUIChwYXJzZXJfcmV2ZXJzZV9wbGF5YmFjaykKLXsKLSAgaGF2ZV9lb3MgPSBGQUxTRTsKLSAgaGF2ZV9kYXRhID0gRkFMU0U7Ci0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICBzZXR1cF9wYXJzZXJ0ZXN0ZXIgKCk7Ci0gIGdzdF9wYWRfc2V0X2dldHJhbmdlX2Z1bmN0aW9uIChteXNyY3BhZCwgX3NyY19nZXRyYW5nZSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChteXNyY3BhZCwgX3NyY19xdWVyeSk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChteXNpbmtwYWQsIF9zaW5rX2NoYWluKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKG15c2lua3BhZCwgX3NpbmtfZXZlbnQpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBhcnNldGVzdCwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLSAgZmFpbF91bmxlc3MgKGhhdmVfZW9zID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoaGF2ZV9kYXRhID09IFRSVUUpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGFyc2V0ZXN0LCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgY2hlY2tfbm9fZXJyb3JfcmVjZWl2ZWQgKCk7Ci0gIGNsZWFudXBfcGFyc2VydGVzdCAoKTsKLQotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGxvb3AgPSBOVUxMOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1iYXNlcGFyc2Vfc2V0dXAgKHZvaWQpCi17Ci0gIC8qIGluaXQvcmVzZXQgZ2xvYmFsIHN0YXRlICovCi0gIG15c3JjcGFkID0gbXlzaW5rcGFkID0gTlVMTDsKLSAgcGFyc2V0ZXN0ID0gTlVMTDsKLSAgYnVzID0gTlVMTDsKLSAgbG9vcCA9IE5VTEw7Ci0gIGhhdmVfZW9zID0gaGF2ZV9kYXRhID0gY2Fwc19zZXQgPSBGQUxTRTsKLSAgYnVmZmVyX2NvdW50ID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWJhc2VwYXJzZV90ZWFyZG93biAodm9pZCkKLXsKLX0KLQotc3RhdGljIFN1aXRlICoKLWdzdF9iYXNlcGFyc2Vfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0QmFzZVBhcnNlIik7Ci0gIFRDYXNlICp0YyA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjKTsKLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGMsIGJhc2VwYXJzZV9zZXR1cCwgYmFzZXBhcnNlX3RlYXJkb3duKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBwYXJzZXJfcGxheWJhY2spOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIHBhcnNlcl9lbXB0eV9zdHJlYW0pOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIHBhcnNlcl9yZXZlcnNlX3BsYXliYWNrX29uX3Bhc3N0aHJvdWdoKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBwYXJzZXJfcmV2ZXJzZV9wbGF5YmFjayk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfYmFzZXBhcnNlKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYmFzZXNpbmsuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvYmFzZXNpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU5NzE1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9saWJzL2Jhc2VzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgotCi1HU1RfU1RBUlRfVEVTVCAoYmFzZXNpbmtfbGFzdF9zYW1wbGVfZW5hYmxlZCkKLXsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2luaywgKnBpcGVsaW5lOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHc3RTYW1wbGUgKmxhc3Rfc2FtcGxlOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYykgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykgPT0gVFJVRSk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotCi0gIC8qIHRyeSB3aXRoIGVuYWJsZS1sYXN0LXNhbXBsZSBzZXQgdG8gVFJVRSAqLwotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgMSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIC8qIGxhc3Qtc2FtcGxlIHNob3VsZCBiZSAhPSBOVUxMICovCi0gIGZhaWxfdW5sZXNzIChnc3RfYmFzZV9zaW5rX2lzX2xhc3Rfc2FtcGxlX2VuYWJsZWQgKEdTVF9CQVNFX1NJTksgKHNpbmspKQotICAgICAgPT0gVFJVRSk7Ci0gIGdfb2JqZWN0X2dldCAoc2luaywgImxhc3Qtc2FtcGxlIiwgJmxhc3Rfc2FtcGxlLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGxhc3Rfc2FtcGxlICE9IE5VTEwpOwotICBnc3Rfc2FtcGxlX3VucmVmIChsYXN0X3NhbXBsZSk7Ci0KLSAgLyogc2V0IGVuYWJsZS1sYXN0LXNhbXBsZSB0byBGQUxTRSBub3csIHRoaXMgc2hvdWxkIHNldCBsYXN0LXNhbXBsZSB0byBOVUxMICovCi0gIGdfb2JqZWN0X3NldCAoc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iYXNlX3NpbmtfaXNfbGFzdF9zYW1wbGVfZW5hYmxlZCAoR1NUX0JBU0VfU0lOSyAoc2luaykpCi0gICAgICA9PSBGQUxTRSk7Ci0gIGdfb2JqZWN0X2dldCAoc2luaywgImxhc3Qtc2FtcGxlIiwgJmxhc3Rfc2FtcGxlLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGxhc3Rfc2FtcGxlID09IE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBHU1RfSU5GTyAoInN0b3BwZWQiKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKGJhc2VzaW5rX2xhc3Rfc2FtcGxlX2Rpc2FibGVkKQotewotICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdFNhbXBsZSAqbGFzdF9zYW1wbGU7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0KLSAgLyogc2V0IGVuYWJsZS1sYXN0LXNhbXBsZSB0byBGQUxTRSAqLwotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgMSwgTlVMTCk7Ci0gIGdzdF9iYXNlX3Npbmtfc2V0X2xhc3Rfc2FtcGxlX2VuYWJsZWQgKEdTVF9CQVNFX1NJTksgKHNpbmspLCBGQUxTRSk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgLyogbGFzdC1zYW1wbGUgc2hvdWxkIGJlIE5VTEwgKi8KLSAgZ19vYmplY3RfZ2V0IChzaW5rLCAibGFzdC1zYW1wbGUiLCAmbGFzdF9zYW1wbGUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAobGFzdF9zYW1wbGUgPT0gTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIEdTVF9JTkZPICgic3RvcHBlZCIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAoYmFzZXNpbmtfdGVzdF9nYXApCi17Ci0gIEdzdEVsZW1lbnQgKnNpbmssICpwaXBlbGluZTsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEV2ZW50ICpldjsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdfb2JqZWN0X3NldCAoc2luaywgInN5bmMiLCBUUlVFLCBOVUxMKTsKLQotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luaykgPT0gVFJVRSk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgc2VnbWVudC5zdG9wID0gMTIwICogR1NUX1NFQ09ORDsKLSAgZXYgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZW5kX2V2ZW50IChwYWQsIGV2KSk7Ci0KLSAgZXYgPSBnc3RfZXZlbnRfbmV3X2dhcCAoMjAwICogR1NUX01TRUNPTkQsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZW5kX2V2ZW50IChwYWQsIGV2KSk7Ci0KLSAgZXYgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2VuZF9ldmVudCAocGFkLCBldikpOwotCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotCi0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIEdTVF9JTkZPICgic3RvcHBlZCIpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ3BvaW50ZXIKLXNlbmRfZW9zX2V2ZW50IChncG9pbnRlciBkYXRhKQotewotICBHc3RQYWQgKnBhZCA9IGRhdGE7Ci0gIEdzdEV2ZW50ICpldjsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGV2ID0gZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0Iik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NlbmRfZXZlbnQgKHBhZCwgZXYpKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZXYgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2VuZF9ldmVudCAocGFkLCBldikpOwotCi0gIGV2ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAocGFkLCBldik7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLUdTVF9TVEFSVF9URVNUIChiYXNlc2lua190ZXN0X2Vvc19hZnRlcl9wbGF5aW5nKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNpbms7Ci0gIEdzdFBhZCAqcGFkOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIGdib29sZWFuIHJlYWNoZWRfcGxheWluZyA9IEZBTFNFOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdfb2JqZWN0X3NldCAoc2luaywgInN5bmMiLCBUUlVFLCBOVUxMKTsKLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLQotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgdGhyZWFkID0gZ190aHJlYWRfbmV3ICgicHVzaC10aHJlYWQiLCBzZW5kX2Vvc19ldmVudCwgcGFkKTsKLQotICB3aGlsZSAoKG1zZyA9IGdzdF9idXNfdGltZWRfcG9wIChidXMsIC0xKSkpIHsKLSAgICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VECi0gICAgICAgICYmIEdTVF9NRVNTQUdFX1NSQyAobXNnKSA9PSBHU1RfT0JKRUNUIChwaXBlbGluZSkpIHsKLSAgICAgIEdzdFN0YXRlIG5ld19zdGF0ZTsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobXNnLCBOVUxMLCAmbmV3X3N0YXRlLCBOVUxMKTsKLSAgICAgIGlmIChuZXdfc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAgIHJlYWNoZWRfcGxheWluZyA9IFRSVUU7Ci0gICAgfSBlbHNlIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUpIHsKLSAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICB9IGVsc2UgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKSB7Ci0gICAgICBmYWlsX3VubGVzcyAocmVhY2hlZF9wbGF5aW5nKTsKLSAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIH0KLQotICBnX3RocmVhZF9qb2luICh0aHJlYWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICBHU1RfSU5GTyAoInN0b3BwZWQiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2Jhc2VzcmNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0QmFzZVNpbmsiKTsKLSAgVENhc2UgKnRjID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2VzaW5rX2xhc3Rfc2FtcGxlX2VuYWJsZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2VzaW5rX2xhc3Rfc2FtcGxlX2Rpc2FibGVkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNlc2lua190ZXN0X2dhcCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNpbmtfdGVzdF9lb3NfYWZ0ZXJfcGxheWluZyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfYmFzZXNyYyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2Jhc2VzcmMuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmM2NTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvYmFzZXNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzkwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHNvbWUgdW5pdCB0ZXN0cyBmb3IgR3N0QmFzZVNyYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzcmMuaD4KLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1lb3NfZXZlbnRfY291bnRlciAoR3N0T2JqZWN0ICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBndWludCAqIHBfbnVtX2VvcykKLXsKLSAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UIChpbmZvKTsKLQotICBmYWlsX3VubGVzcyAoZXZlbnQgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfRVZFTlQgKGV2ZW50KSk7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0VPUykKLSAgICAqcF9udW1fZW9zICs9IDE7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLS8qIGJhc2VzcmNfZW9zX2V2ZW50c19wdXNoX2xpdmVfb3A6Ci0gKiAgLSBtYWtlIHN1cmUgc291cmNlIGRvZXMgc2VuZCBhbiBFT1MgZXZlbnQgd2hlbiBvcGVyYXRpbmcgaW4gcHVzaAotICogICAgbW9kZSBhbmQgYmVpbmcgc2V0IHRvIFJFQURZIGV4cGxpY2l0bHkgKGxpa2Ugb25lIG1pZ2h0IHdpdGgKLSAqICAgIGxpdmUgc291cmNlcykKLSAqLwotR1NUX1NUQVJUX1RFU1QgKGJhc2VzcmNfZW9zX2V2ZW50c19wdXNoX2xpdmVfb3ApCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2luaywgKnBpcGU7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBndWludCBwcm9iZSwgbnVtX2VvcyA9IDA7Ci0gIEdzdFN0cmVhbUNvbnNpc3RlbmN5ICpjb25zaXN0ZW5jeTsKLSAgR3N0RXZlbnQgKmVvc19ldmVudDsKLSAgZ3VpbnQzMiBlb3NfZXZlbnRfc2VxbnVtOwotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKLQotICBnX2Fzc2VydCAocGlwZSAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKHNpbmsgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzcmMgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc3JjKSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc2luaykgPT0gVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykgPT0gVFJVRSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1c2giLCBUUlVFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBGQUxTRSwgTlVMTCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChzcmMsICJjYW4tYWN0aXZhdGUtcHVzaCIsIFRSVUUsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgRkFMU0UsIE5VTEwpOwotCi0gIC8qIHNldCB1cCBldmVudCBwcm9iZSB0byBjb3VudCBFT1MgZXZlbnRzICovCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLQotICBjb25zaXN0ZW5jeSA9IGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX25ldyAoc3JjcGFkKTsKLQotICBwcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmNwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9CT1RILAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGVvc19ldmVudF9jb3VudGVyLCAmbnVtX2VvcywgTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogd2FpdCBhIHNlY29uZCwgdGhlbiBkbyBjb250cm9sbGVkIHNodXRkb3duICovCi0gIGdfdXNsZWVwIChHU1RfVVNFQ09ORCAqIDEpOwotCi0gIC8qIHNodXQgZG93biBwaXBlbGluZSAoc2hvdWxkIHNlbmQgRU9TIG1lc3NhZ2UpIC4uLiAqLwotICBlb3NfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgZW9zX2V2ZW50X3NlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChlb3NfZXZlbnQpOwotICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChwaXBlLCBlb3NfZXZlbnQpOwotCi0gIC8qIC4uLiBhbmQgd2FpdCBmb3IgdGhlIEVPUyBtZXNzYWdlIGZyb20gdGhlIHNpbmsgKi8KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKLQotICAvKiBzaG91bGQgYmUgZXhhY3RseSBvbmUgRU9TIGV2ZW50ICovCi0gIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X21lc3NhZ2VfZ2V0X3NlcW51bSAobXNnKSA9PSBlb3NfZXZlbnRfc2VxbnVtKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogbWFrZSBzdXJlIHNvdXJjZSBoYXNuJ3Qgc2VudCBhIHNlY29uZCBvbmUgd2hlbiBnb2luZyBQQVVTRUQgPT4gUkVBRFkgKi8KLSAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMSk7Ci0KLSAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAoY29uc2lzdGVuY3kpOwotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChzcmNwYWQsIHByb2JlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotCi0vKiBiYXNlc3JjX2Vvc19ldmVudHNfcHVzaDoKLSAqICAtIG1ha2Ugc3VyZSBzb3VyY2Ugb25seSBzZW5kcyBvbmUgRU9TIHdoZW4gb3BlcmF0aW5nIGluIHB1c2gtbW9kZSwKLSAqICAgIHJlYWNoaW5nIHRoZSBtYXggbnVtYmVyIG9mIGJ1ZmZlcnMsIGFuZCBpcyB0aGVuIHNodXQgZG93bi4KLSAqLwotR1NUX1NUQVJUX1RFU1QgKGJhc2VzcmNfZW9zX2V2ZW50c19wdXNoKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXQ7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RQYWQgKnNyY3BhZDsKLSAgZ3VpbnQgcHJvYmUsIG51bV9lb3MgPSAwOwotICBHc3RTdHJlYW1Db25zaXN0ZW5jeSAqY29uc2lzdGVuY3k7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotCi0gIGdfYXNzZXJ0IChwaXBlICE9IE5VTEwpOwotICBnX2Fzc2VydCAoc2luayAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKHNyYyAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzcmMpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzaW5rKSA9PSBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKLQotICBnX29iamVjdF9zZXQgKHNpbmssICJjYW4tYWN0aXZhdGUtcHVzaCIsIFRSVUUsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJjYW4tYWN0aXZhdGUtcHVsbCIsIEZBTFNFLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdXNoIiwgVFJVRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBGQUxTRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCA4LCBOVUxMKTsKLQotICAvKiBzZXQgdXAgZXZlbnQgcHJvYmUgdG8gY291bnQgRU9TIGV2ZW50cyAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7Ci0KLSAgY29uc2lzdGVuY3kgPSBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXcgKHNyY3BhZCk7Ci0KLSAgcHJvYmUgPSBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfQk9USCwKLSAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBlb3NfZXZlbnRfY291bnRlciwgJm51bV9lb3MsIE5VTEwpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGUpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIC0xKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0KLSAgLyogc2hvdWxkIGJlIGV4YWN0bHkgb25lIEVPUyBldmVudCAqLwotICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAxKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogbWFrZSBzdXJlIHNvdXJjZSBoYXNuJ3Qgc2VudCBhIHNlY29uZCBvbmUgd2hlbiBnb2luZyBQQVVTRUQgPT4gUkVBRFkgKi8KLSAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMSk7Ci0KLSAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAoY29uc2lzdGVuY3kpOwotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChzcmNwYWQsIHByb2JlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIGJhc2VzcmNfZW9zX2V2ZW50c19wdWxsX2xpdmVfb3A6Ci0gKiAgLSBtYWtlIHN1cmUgc291cmNlIGRvZXNuJ3Qgc2VuZCBhbiBFT1MgZXZlbnQgd2hlbiBvcGVyYXRpbmcgaW4KLSAqICAgIHB1bGwgbW9kZSBhbmQgYmVpbmcgc2V0IHRvIFJFQURZIGV4cGxpY2l0bHkgKGxpa2Ugb25lIG1pZ2h0IHdpdGgKLSAqICAgIGxpdmUgc291cmNlcykKLSAqLwotR1NUX1NUQVJUX1RFU1QgKGJhc2VzcmNfZW9zX2V2ZW50c19wdWxsX2xpdmVfb3ApCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2luaywgKnBpcGU7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBndWludCBwcm9iZSwgbnVtX2VvcyA9IDA7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotCi0gIGdfYXNzZXJ0IChwaXBlICE9IE5VTEwpOwotICBnX2Fzc2VydCAoc2luayAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKHNyYyAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzcmMpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzaW5rKSA9PSBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKLQotICBnX29iamVjdF9zZXQgKHNpbmssICJjYW4tYWN0aXZhdGUtcHVzaCIsIEZBTFNFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBUUlVFLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdXNoIiwgRkFMU0UsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgVFJVRSwgTlVMTCk7Ci0KLSAgLyogc2V0IHVwIGV2ZW50IHByb2JlIHRvIGNvdW50IEVPUyBldmVudHMgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotCi0gIHByb2JlID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEgsCi0gICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgZW9zX2V2ZW50X2NvdW50ZXIsICZudW1fZW9zLCBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiB3YWl0IGEgc2Vjb25kLCB0aGVuIGRvIGNvbnRyb2xsZWQgc2h1dGRvd24gKi8KLSAgZ191c2xlZXAgKEdTVF9VU0VDT05EICogMSk7Ci0KLSAgLyogc2h1dCBkb3duIHNvdXJjZSBvbmx5IC4uLiAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX05VTEwpOwotICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHNyYywgTlVMTCwgTlVMTCwgLTEpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHNyYywgVFJVRSkgPT0gVFJVRSk7Ci0KLSAgLyogc291cmNlIHNob3VsZG4ndCBoYXZlIHNlbnQgYW55IEVPUyBldmVudCBpbiBwdWxsIG1vZGUgKi8KLSAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOwotCi0gIC8qIG1ha2Ugc3VyZSBzb3VyY2UgaGFzbid0IHNlbnQgYW4gRU9TIHdoZW4gZ29pbmcgUEFVU0VEID0+IFJFQURZIGVpdGhlciAqLwotICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAwKTsKLQotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoc3JjcGFkLCBwcm9iZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIGJhc2VzcmNfZW9zX2V2ZW50c19wdWxsOgotICogIC0gbWFrZXMgc3VyZSBzb3VyY2UgZG9lc24ndCBzZW5kIEVPUyBldmVudCB3aGVuIHJlYWNoaW5nIHRoZSBtYXguCi0gKiAgICBudW1iZXIgb2YgYnVmZmVycyBjb25maWd1cmVkIGluIHB1bGwtbW9kZQotICogIC0gbWFrZSBzdXJlIHNvdXJjZSBkb2Vzbid0IHNlbmQgRU9TIGV2ZW50IGVpdGhlciB3aGVuIGJlaW5nIHNodXQgZG93bgotICogICAgKFBBVVNFRCA9PiBSRUFEWSBzdGF0ZSBjaGFuZ2UpIGFmdGVyIEVPU2luZyBpbiBwdWxsIG1vZGUgCi0gKi8KLUdTVF9TVEFSVF9URVNUIChiYXNlc3JjX2Vvc19ldmVudHNfcHVsbCkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OwotICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqcGlwZTsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIGd1aW50IHByb2JlLCBudW1fZW9zID0gMDsKLQotICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7Ci0KLSAgZ19hc3NlcnQgKHBpcGUgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzaW5rICE9IE5VTEwpOwotICBnX2Fzc2VydCAoc3JjICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNyYykgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNpbmspID09IFRSVUUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspID09IFRSVUUpOwotCi0gIGdfb2JqZWN0X3NldCAoc2luaywgImNhbi1hY3RpdmF0ZS1wdXNoIiwgRkFMU0UsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJjYW4tYWN0aXZhdGUtcHVsbCIsIFRSVUUsIE5VTEwpOwotCi0gIGdfb2JqZWN0X3NldCAoc3JjLCAiY2FuLWFjdGl2YXRlLXB1c2giLCBGQUxTRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBUUlVFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIDgsIE5VTEwpOwotCi0gIC8qIHNldCB1cCBldmVudCBwcm9iZSB0byBjb3VudCBFT1MgZXZlbnRzICovCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLQotICBwcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlIChzcmNwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9CT1RILAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGVvc19ldmVudF9jb3VudGVyLCAmbnVtX2VvcywgTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKLQotICAvKiBzb3VyY2Ugc2hvdWxkbid0IGhhdmUgc2VudCBhbnkgRU9TIGV2ZW50IGluIHB1bGwgbW9kZSAqLwotICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAwKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogbWFrZSBzdXJlIHNvdXJjZSBoYXNuJ3Qgc2VudCBhbiBFT1Mgd2hlbiBnb2luZyBQQVVTRUQgPT4gUkVBRFkgZWl0aGVyICovCi0gIGZhaWxfdW5sZXNzIChudW1fZW9zID09IDApOwotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChzcmNwYWQsIHByb2JlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotLyogYmFzZXNyY19lb3NfZXZlbnRzX3B1c2hfbGl2ZV9lb3M6Ci0gKiAgLSBtYWtlIHN1cmUgdGhlIHNvdXJjZSBzdG9wcyBhbmQgZW1pdHMgRU9TIHdoZW4gd2Ugc2VuZCBhbiBFT1MgZXZlbnQgdG8gdGhlCi0gKiAgICBwaXBlbGluZS4KLSAqLwotR1NUX1NUQVJUX1RFU1QgKGJhc2VzcmNfZW9zX2V2ZW50c19wdXNoX2xpdmVfZW9zKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXQ7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RQYWQgKnNyY3BhZDsKLSAgZ3VpbnQgcHJvYmUsIG51bV9lb3MgPSAwOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotCi0gIGdfYXNzZXJ0IChwaXBlICE9IE5VTEwpOwotICBnX2Fzc2VydCAoc2luayAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKHNyYyAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzcmMpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzaW5rKSA9PSBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKLQotICBnX29iamVjdF9zZXQgKHNpbmssICJjYW4tYWN0aXZhdGUtcHVzaCIsIFRSVUUsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJjYW4tYWN0aXZhdGUtcHVsbCIsIEZBTFNFLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdXNoIiwgVFJVRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBGQUxTRSwgTlVMTCk7Ci0KLSAgLyogc2V0IHVwIGV2ZW50IHByb2JlIHRvIGNvdW50IEVPUyBldmVudHMgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotCi0gIHByb2JlID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEgsCi0gICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgZW9zX2V2ZW50X2NvdW50ZXIsICZudW1fZW9zLCBOVUxMKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiB3YWl0IGEgc2Vjb25kLCB0aGVuIGVtaXQgdGhlIEVPUyAqLwotICBnX3VzbGVlcCAoR1NUX1VTRUNPTkQgKiAxKTsKLQotICAvKiBzaHV0IGRvd24gc291cmNlIG9ubHkgKHNob3VsZCBzZW5kIEVPUyBldmVudCkgLi4uICovCi0gIHJlcyA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGUsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLQotICAvKiAuLi4gYW5kIHdhaXQgZm9yIHRoZSBFT1MgbWVzc2FnZSBmcm9tIHRoZSBzaW5rICovCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0KLSAgLyogc2hvdWxkIGJlIGV4YWN0bHkgb25lIEVPUyBldmVudCAqLwotICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAxKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogbWFrZSBzdXJlIHNvdXJjZSBoYXNuJ3Qgc2VudCBhIHNlY29uZCBvbmUgd2hlbiBnb2luZyBQQVVTRUQgPT4gUkVBRFkgKi8KLSAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMSk7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyY3BhZCwgcHJvYmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogYmFzZXNyY19lb3NfZXZlbnRzX3B1bGxfbGl2ZV9lb3M6Ci0gKiAgLSBtYWtlIHN1cmUgdGhlIHNvdXJjZSBzdG9wcyBhbmQgZW1pdHMgRU9TIHdoZW4gd2Ugc2VuZCBhbiBFT1MgZXZlbnQgdG8gdGhlCi0gKiAgICBwaXBlbGluZS4KLSAqLwotR1NUX1NUQVJUX1RFU1QgKGJhc2VzcmNfZW9zX2V2ZW50c19wdWxsX2xpdmVfZW9zKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXQ7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RQYWQgKnNyY3BhZDsKLSAgZ3VpbnQgcHJvYmUsIG51bV9lb3MgPSAwOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotCi0gIGdfYXNzZXJ0IChwaXBlICE9IE5VTEwpOwotICBnX2Fzc2VydCAoc2luayAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKHNyYyAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzcmMpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzaW5rKSA9PSBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKLQotICBnX29iamVjdF9zZXQgKHNpbmssICJjYW4tYWN0aXZhdGUtcHVzaCIsIEZBTFNFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBUUlVFLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdXNoIiwgRkFMU0UsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYywgImNhbi1hY3RpdmF0ZS1wdWxsIiwgVFJVRSwgTlVMTCk7Ci0KLSAgLyogc2V0IHVwIGV2ZW50IHByb2JlIHRvIGNvdW50IEVPUyBldmVudHMgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotCi0gIHByb2JlID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEgsCi0gICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgZW9zX2V2ZW50X2NvdW50ZXIsICZudW1fZW9zLCBOVUxMKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiB3YWl0IGEgc2Vjb25kLCB0aGVuIGVtaXQgdGhlIEVPUyAqLwotICBnX3VzbGVlcCAoR1NUX1VTRUNPTkQgKiAxKTsKLQotICAvKiBzaHV0IGRvd24gc291cmNlIG9ubHkgKHNob3VsZCBzZW5kIEVPUyBldmVudCkgLi4uICovCi0gIHJlcyA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGUsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFKTsKLQotICAvKiAuLi4gYW5kIHdhaXQgZm9yIHRoZSBFT1MgbWVzc2FnZSBmcm9tIHRoZSBzaW5rICovCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0KLSAgLyogbm8gRU9TIGluIHB1bGwgbW9kZSAqLwotICBmYWlsX3VubGVzcyAobnVtX2VvcyA9PSAwKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogbWFrZSBzdXJlIHNvdXJjZSBoYXNuJ3Qgc2VudCBhIHNlY29uZCBvbmUgd2hlbiBnb2luZyBQQVVTRUQgPT4gUkVBRFkgKi8KLSAgZmFpbF91bmxlc3MgKG51bV9lb3MgPT0gMCk7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHNyY3BhZCwgcHJvYmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLXNlZ21lbnRfZXZlbnRfY2F0Y2hlciAoR3N0T2JqZWN0ICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLAotICAgIGdwb2ludGVyICogdXNlcl9kYXRhKQotewotICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfUEFEX1BST0JFX0lORk9fRVZFTlQgKGluZm8pOwotICBHc3RFdmVudCAqKmxhc3RfZXZlbnQgPSAoR3N0RXZlbnQgKiopIHVzZXJfZGF0YTsKLSAgZmFpbF91bmxlc3MgKGV2ZW50ICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0VWRU5UIChldmVudCkpOwotICBmYWlsX3VubGVzcyAodXNlcl9kYXRhICE9IE5VTEwpOwotCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKSB7Ci0gICAgZ19tdXRleF9sb2NrICgmY2hlY2tfbXV0ZXgpOwotICAgIGZhaWxfdW5sZXNzICgqbGFzdF9ldmVudCA9PSBOVUxMKTsKLSAgICAqbGFzdF9ldmVudCA9IGdzdF9ldmVudF9jb3B5IChldmVudCk7Ci0gICAgZ19jb25kX3NpZ25hbCAoJmNoZWNrX2NvbmQpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmY2hlY2tfbXV0ZXgpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLS8qIGJhc2VzcmNfc2Vla19ldmVudHNfcmF0ZV91cGRhdGU6Ci0gKiAgLSBtYWtlIHN1cmUgd2UgZ2V0IGV4cGVjdGVkIHNlZ21lbnQgYWZ0ZXIgc2VuZGluZyBhIHNlZWsgZXZlbnQKLSAqLwotR1NUX1NUQVJUX1RFU1QgKGJhc2VzcmNfc2Vla19ldmVudHNfcmF0ZV91cGRhdGUpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2luaywgKnBpcGU7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFBhZCAqcHJvYmVfcGFkOwotICBndWludCBwcm9iZTsKLSAgR3N0RXZlbnQgKnNlZ19ldmVudCA9IE5VTEw7Ci0gIEdzdEV2ZW50ICpyYXRlX3NlZWs7Ci0gIGdib29sZWFuIGV2ZW50X3JldDsKLSAgY29uc3QgR3N0U2VnbWVudCAqc2VnbWVudDsKLQotICBwaXBlID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic3JjIik7Ci0KLSAgZ19hc3NlcnQgKHBpcGUgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzaW5rICE9IE5VTEwpOwotICBnX2Fzc2VydCAoc3JjICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNyYykgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNpbmspID09IFRSVUUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNpbmspID09IFRSVUUpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGUpOwotCi0gIC8qIHNldCB1cCBldmVudCBwcm9iZSB0byBjYXRjaCBuZXcgc2VnbWVudCBldmVudCAqLwotICBwcm9iZV9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHByb2JlX3BhZCAhPSBOVUxMKTsKLQotICBwcm9iZSA9IGdzdF9wYWRfYWRkX3Byb2JlIChwcm9iZV9wYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9CT1RILAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIHNlZ21lbnRfZXZlbnRfY2F0Y2hlciwgJnNlZ19ldmVudCwgTlVMTCk7Ci0KLSAgLyogcHJlcGFyZSB0aGUgc2VlayAqLwotICByYXRlX3NlZWsgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDAuNSwgR1NUX0ZPUk1BVF9USU1FLCBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX05PTkUsIEdTVF9DTE9DS19USU1FX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX05PTkUsIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIEdTVF9JTkZPICgiZ29pbmcgdG8gcGxheWluZyIpOwotCi0gIC8qIHBsYXkgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogd2FpdCBmb3IgdGhlIGZpcnN0IHNlZ21lbnQgdG8gYmUgcG9zdGVkLCBhbmQgZmx1c2ggaXQgLi4uICovCi0gIGdfbXV0ZXhfbG9jayAoJmNoZWNrX211dGV4KTsKLSAgd2hpbGUgKHNlZ19ldmVudCA9PSBOVUxMKQotICAgIGdfY29uZF93YWl0ICgmY2hlY2tfY29uZCwgJmNoZWNrX211dGV4KTsKLSAgZ3N0X2V2ZW50X3VucmVmIChzZWdfZXZlbnQpOwotICBzZWdfZXZlbnQgPSBOVUxMOwotICBnX211dGV4X3VubG9jayAoJmNoZWNrX211dGV4KTsKLQotICBHU1RfSU5GTyAoInNlZWtpbmciKTsKLQotICAvKiBzZWVrICovCi0gIGV2ZW50X3JldCA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGUsIHJhdGVfc2Vlayk7Ci0gIGZhaWxfdW5sZXNzIChldmVudF9yZXQgPT0gVFJVRSk7Ci0KLSAgLyogd2FpdCBmb3IgdGhlIHVwZGF0ZWQgc2VnbWVudCB0byBiZSBwb3N0ZWQsIHBvc3RpbmcgRU9TIG1ha2UgdGhlIGxvb3AKLSAgICogdGhyZWFkIGV4aXQgYmVmb3JlIHRoZSB1cGRhdGVkIHNlZ21lbnQgaXMgcG9zdGVkIC4uLiAqLwotICBnX211dGV4X2xvY2sgKCZjaGVja19tdXRleCk7Ci0gIHdoaWxlIChzZWdfZXZlbnQgPT0gTlVMTCkKLSAgICBnX2NvbmRfd2FpdCAoJmNoZWNrX2NvbmQsICZjaGVja19tdXRleCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmY2hlY2tfbXV0ZXgpOwotCi0gIC8qIHNodXQgZG93biBwaXBlbGluZSBvbmx5IChzaG91bGQgc2VuZCBFT1MgbWVzc2FnZSkgLi4uICovCi0gIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGUsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLQotICAvKiAuLi4gYW5kIHdhaXQgZm9yIHRoZSBFT1MgbWVzc2FnZSBmcm9tIHRoZSBzaW5rICovCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOwotCi0gIEdTVF9JTkZPICgic3RvcHBlZCIpOwotCi0gIC8qIGNoZWNrIHRoYXQgd2UgaGF2ZSBnbyB0aGUgZXZlbnQgKi8KLSAgZmFpbF91bmxlc3MgKHNlZ19ldmVudCAhPSBOVUxMKTsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoc2VnX2V2ZW50LCAmc2VnbWVudCk7Ci0gIGZhaWxfdW5sZXNzIChzZWdtZW50LT5yYXRlID09IDAuNSk7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHByb2JlX3BhZCwgcHJvYmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwcm9iZV9wYWQpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgZ3N0X2V2ZW50X3VucmVmIChzZWdfZXZlbnQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdib29sZWFuIHNlZWtlZDsKLSAgZ2ludCBidWZmZXJfY291bnQ7Ci0gIEdMaXN0ICpldmVudHM7Ci19IExhc3RCdWZmZXJTZWVrRGF0YTsKLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1zZWVrX29uX2J1ZmZlciAoR3N0T2JqZWN0ICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciAqIHVzZXJfZGF0YSkKLXsKLSAgTGFzdEJ1ZmZlclNlZWtEYXRhICpkYXRhID0gKExhc3RCdWZmZXJTZWVrRGF0YSAqKSB1c2VyX2RhdGE7Ci0KLSAgZmFpbF91bmxlc3MgKHVzZXJfZGF0YSAhPSBOVUxMKTsKLQotICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIpIHsKLSAgICBkYXRhLT5idWZmZXJfY291bnQrKzsKLQotICAgIGlmICghZGF0YS0+c2Vla2VkKSB7Ci0gICAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfUEFEIChwYWQpLAotICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgR1NUX0ZPUk1BVF9CWVRFUywgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgICAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAwLCBHU1RfU0VFS19UWVBFX1NFVCwgMSkpKTsKLSAgICAgIGRhdGEtPnNlZWtlZCA9IFRSVUU7Ci0gICAgfQotICB9IGVsc2UgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSkgewotICAgIGRhdGEtPmV2ZW50cyA9IGdfbGlzdF9hcHBlbmQgKGRhdGEtPmV2ZW50cywgZ3N0X2V2ZW50X3JlZiAoaW5mby0+ZGF0YSkpOwotICB9IGVsc2UgewotICAgIGZhaWwgKCJTaG91bGQgbm90IGJlIHJlYWNoZWQiKTsKLSAgfQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotLyogYmFzZXNyY19zZWVrX29uX2xhc3RfYnVmZmVyOgotICogIC0gbWFrZSBzdXJlIGJhc2VzcmMgZG9lc24ndCBnbyBlb3MgaWYgYSBzZWVrIGlzIHNlbnQKLSAqIGFmdGVyIHRoZSBsYXN0IGJ1ZmZlciBwdXNoCi0gKgotICogVGhpcyBpcyBqdXN0IGEgdGVzdCBhbmQgaXMgYSBjb250cm9sbGVkIGVudmlyb25tZW50LgotICogRm9yIHRlc3RpbmcgcHVycG9zZXMgc2VuZGluZyB0aGUgc2VlayBmcm9tIHRoZSBzdHJlYW1pbmcKLSAqIHRocmVhZCBpcyBvayBidXQgZG9pbmcgdGhpcyBpbiBhbiBhcHBsaWNhdGlvbiBtaWdodCBub3QKLSAqIGJlIGEgZ29vZCBpZGVhLgotICovCi1HU1RfU1RBUlRfVEVTVCAoYmFzZXNyY19zZWVrX29uX2xhc3RfYnVmZmVyKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXQ7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbmssICpwaXBlOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RQYWQgKnByb2JlX3BhZDsKLSAgZ3VpbnQgcHJvYmU7Ci0gIEdzdEV2ZW50ICpzZWVrOwotICBMYXN0QnVmZmVyU2Vla0RhdGEgc2Vla19kYXRhOwotCi0gIHBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMiKTsKLQotICBnX2Fzc2VydCAocGlwZSAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKHNpbmsgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzcmMgIT0gTlVMTCk7Ci0KLSAgLyogdXNlICdzaXplbWF4JyBidWZmZXJzIHRvIGF2b2lkIHJlY2VpdmluZyBlbXB0eSBidWZmZXJzICovCi0gIGdfb2JqZWN0X3NldCAoc3JjLCAic2l6ZXR5cGUiLCAyLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzcmMpID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzaW5rKSA9PSBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSA9PSBUUlVFKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlKTsKLQotICAvKiBzZXQgdXAgcHJvYmUgdG8gY2F0Y2ggdGhlIGxhc3QgYnVmZmVyIGFuZCBzZW5kIGEgc2VlayBldmVudCAqLwotICBwcm9iZV9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHByb2JlX3BhZCAhPSBOVUxMKTsKLQotICBzZWVrX2RhdGEuYnVmZmVyX2NvdW50ID0gMDsKLSAgc2Vla19kYXRhLnNlZWtlZCA9IEZBTFNFOwotICBzZWVrX2RhdGEuZXZlbnRzID0gTlVMTDsKLQotICBwcm9iZSA9Ci0gICAgICBnc3RfcGFkX2FkZF9wcm9iZSAocHJvYmVfcGFkLAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiB8IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIHNlZWtfb25fYnVmZmVyLCAmc2Vla19kYXRhLCBOVUxMKTsKLQotICAvKiBwcmVwYXJlIHRoZSBzZWdtZW50IHNvIHRoYXQgaXQgaGFzIG9ubHkgb25lIGJ1ZmZlciAqLwotICBzZWVrID0gZ3N0X2V2ZW50X25ld19zZWVrICgxLCBHU1RfRk9STUFUX0JZVEVTLCBHU1RfU0VFS19GTEFHX05PTkUsCi0gICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMCwgR1NUX1NFRUtfVFlQRV9TRVQsIDEpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHNyYywgc2VlaykpOwotCi0gIEdTVF9JTkZPICgiZ29pbmcgdG8gcGxheWluZyIpOwotCi0gIC8qIHBsYXkgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgLTEpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogLi4uIGFuZCB3YWl0IGZvciB0aGUgRU9TIG1lc3NhZ2UgZnJvbSB0aGUgc2luayAqLwotICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLSAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRVJST1IpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FT1MpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIC0xKTsKLQotICBHU1RfSU5GTyAoInN0b3BwZWQiKTsKLQotICAvKiBjaGVjayB0aGF0IHdlIGhhdmUgZ28gdGhlIGV2ZW50ICovCi0gIGZhaWxfdW5sZXNzIChzZWVrX2RhdGEuYnVmZmVyX2NvdW50ID09IDIpOwotICBmYWlsX3VubGVzcyAoc2Vla19kYXRhLnNlZWtlZCk7Ci0KLSAgLyogZXZlbnRzOiBzdHJlYW0tc3RhcnQgLT4gc2VnbWVudCAtPiBzZWdtZW50IC0+IGVvcyAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoc2Vla19kYXRhLmV2ZW50cykgPT0gNCk7Ci0gIHsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBldmVudCA9IHNlZWtfZGF0YS5ldmVudHMtPmRhdGE7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCk7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgc2Vla19kYXRhLmV2ZW50cyA9IGdfbGlzdF9kZWxldGVfbGluayAoc2Vla19kYXRhLmV2ZW50cywgc2Vla19kYXRhLmV2ZW50cyk7Ci0KLSAgICBldmVudCA9IHNlZWtfZGF0YS5ldmVudHMtPmRhdGE7Ci0gICAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1NFR01FTlQpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHNlZWtfZGF0YS5ldmVudHMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKHNlZWtfZGF0YS5ldmVudHMsIHNlZWtfZGF0YS5ldmVudHMpOwotCi0gICAgZXZlbnQgPSBzZWVrX2RhdGEuZXZlbnRzLT5kYXRhOwotICAgIGZhaWxfdW5sZXNzIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5UKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICBzZWVrX2RhdGEuZXZlbnRzID0gZ19saXN0X2RlbGV0ZV9saW5rIChzZWVrX2RhdGEuZXZlbnRzLCBzZWVrX2RhdGEuZXZlbnRzKTsKLQotICAgIGV2ZW50ID0gc2Vla19kYXRhLmV2ZW50cy0+ZGF0YTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRU9TKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICBzZWVrX2RhdGEuZXZlbnRzID0gZ19saXN0X2RlbGV0ZV9saW5rIChzZWVrX2RhdGEuZXZlbnRzLCBzZWVrX2RhdGEuZXZlbnRzKTsKLSAgfQotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwcm9iZV9wYWQsIHByb2JlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocHJvYmVfcGFkKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfYmFzZXNyY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RCYXNlU3JjIik7Ci0gIFRDYXNlICp0YyA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNlc3JjX2Vvc19ldmVudHNfcHVsbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNyY19lb3NfZXZlbnRzX3B1c2gpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2VzcmNfZW9zX2V2ZW50c19wdXNoX2xpdmVfb3ApOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2VzcmNfZW9zX2V2ZW50c19wdWxsX2xpdmVfb3ApOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2VzcmNfZW9zX2V2ZW50c19wdXNoX2xpdmVfZW9zKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNlc3JjX2Vvc19ldmVudHNfcHVsbF9saXZlX2Vvcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNyY19zZWVrX2V2ZW50c19yYXRlX3VwZGF0ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXNyY19zZWVrX29uX2xhc3RfYnVmZmVyKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9iYXNlc3JjKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLW5vaW5saW5lLmMgYi90ZXN0cy9jaGVjay9saWJzL2JpdHJlYWRlci1ub2lubGluZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDdhOWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLW5vaW5saW5lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0IGZvciBHc3RCaXRSZWFkZXIgd2l0aG91dCB1c2luZyBpbmxpbmluZwotICogQ29weXJpZ2h0IChDKSAyMDEzIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2RlZmluZSBHU1RfQklUX1JFQURFUl9ESVNBQkxFX0lOTElORVMKLSNpbmNsdWRlICJiaXRyZWFkZXIuYyIKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmMgYi90ZXN0cy9jaGVjay9saWJzL2JpdHJlYWRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTEwYzM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvYml0cmVhZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBHc3RCaXRSZWFkZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA4PiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Yml0cmVhZGVyLmg+Ci0KLSNpZm5kZWYgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0Ci0jZGVmaW5lIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NChhLCBiKQkJCQkJXAotR19TVE1UX1NUQVJUIHsJCQkJCQkJCVwKLSAgZ2ludDY0IGZpcnN0ID0gYTsJCQkJCQkJXAotICBnaW50NjQgc2Vjb25kID0gYjsJCQkJCQkJXAotICBmYWlsX3VubGVzcyhmaXJzdCA9PSBzZWNvbmQsCQkJCQkJXAotICAgICInIiAjYSAiJyAoJSIgR19HSU5UNjRfRk9STUFUICIpIGlzIG5vdCBlcXVhbCB0byAnIiAjYiInICglIglcCi0gICAgR19HSU5UNjRfRk9STUFUICIpIiwgZmlyc3QsIHNlY29uZCk7CQkJCVwKLX0gR19TVE1UX0VORDsKLSNlbmRpZgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbml0aWFsaXphdGlvbikKLXsKLSAgZ3VpbnQ4IGRhdGFbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OwotICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBHc3RCaXRSZWFkZXIgcmVhZGVyID0gR1NUX0JJVF9SRUFERVJfSU5JVCAoZGF0YSwgNCk7Ci0gIEdzdEJpdFJlYWRlciAqcmVhZGVyMjsKLSAgZ3VpbnQ4IHggPSAwOwotICBHc3RNYXBJbmZvIGluZm87Ci0KLSAgZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5IChidWZmZXIsIC0xLAotICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBkYXRhLCA0LCAwLCA0LCBOVUxMLAotICAgICAgICAgIE5VTEwpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZ4LCA4KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZ4LCA4KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDIpOwotCi0gIG1lbXNldCAoJnJlYWRlciwgMCwgc2l6ZW9mIChHc3RCaXRSZWFkZXIpKTsKLQotICBnc3RfYml0X3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCA0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmcmVhZGVyLCAmeCwgOCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmcmVhZGVyLCAmeCwgOCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAyKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICBnc3RfYml0X3JlYWRlcl9pbml0ICgmcmVhZGVyLCBpbmZvLmRhdGEsIGluZm8uc2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJnJlYWRlciwgJngsIDgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJnJlYWRlciwgJngsIDgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMik7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotCi0gIHJlYWRlcjIgPSBnc3RfYml0X3JlYWRlcl9uZXcgKGRhdGEsIDQpOwotICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKHJlYWRlcjIsICZ4LCA4KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKHJlYWRlcjIsICZ4LCA4KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDIpOwotICBnc3RfYml0X3JlYWRlcl9mcmVlIChyZWFkZXIyKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICByZWFkZXIyID0gZ3N0X2JpdF9yZWFkZXJfbmV3IChpbmZvLmRhdGEsIGluZm8uc2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAocmVhZGVyMiwgJngsIDgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAocmVhZGVyMiwgJngsIDgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMik7Ci0gIGdzdF9iaXRfcmVhZGVyX2ZyZWUgKHJlYWRlcjIpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNkZWZpbmUgR0VUX0NIRUNLKHJlYWRlciwgZGVzdCwgYml0cywgbmJpdHMsIHZhbCkgeyBcCi0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50IyNiaXRzIChyZWFkZXIsICZkZXN0LCBuYml0cykpOyBcCi0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGRlc3QsIHZhbCk7IFwKLX0KLQotI2RlZmluZSBQRUVLX0NIRUNLKHJlYWRlciwgZGVzdCwgYml0cywgbmJpdHMsIHZhbCkgeyBcCi0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludCMjYml0cyAocmVhZGVyLCAmZGVzdCwgbmJpdHMpKTsgXAotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChkZXN0LCB2YWwpOyBcCi19Ci0KLSNkZWZpbmUgR0VUX0NIRUNLX0ZBSUwocmVhZGVyLCBkZXN0LCBiaXRzLCBuYml0cykgeyBcCi0gIGZhaWxfaWYgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQjI2JpdHMgKHJlYWRlciwgJmRlc3QsIG5iaXRzKSk7IFwKLX0KLQotI2RlZmluZSBQRUVLX0NIRUNLX0ZBSUwocmVhZGVyLCBkZXN0LCBiaXRzLCBuYml0cykgeyBcCi0gIGZhaWxfaWYgKGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50IyNiaXRzIChyZWFkZXIsICZkZXN0LCBuYml0cykpOyBcCi19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dldF9iaXRzKQotewotICBndWludDggZGF0YVtdID0geyAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDkwLCAweGFiLCAweGNkLCAweGVmLAotICAgIDB4ZmUsIDB4ZGMsIDB4YmEsIDB4MDksIDB4ODcsIDB4NjUsIDB4NDMsIDB4MjEKLSAgfTsKLSAgR3N0Qml0UmVhZGVyIHJlYWRlciA9IEdTVF9CSVRfUkVBREVSX0lOSVQgKGRhdGEsIDE2KTsKLSAgZ3VpbnQ4IGEgPSAwOwotICBndWludDE2IGIgPSAwOwotICBndWludDMyIGMgPSAwOwotICBndWludDY0IGQgPSAwOwotCi0gIC8qIDggYml0ICovCi0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgOCwgMHgxMik7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgNCwgMHgwMyk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgNCwgMHgwNCk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgMywgMHgwMik7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgMSwgMHgwMSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgMiwgMHgwMSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgOCwgMiwgMHgwMik7Ci0KLSAgUEVFS19DSEVDSyAoJnJlYWRlciwgYSwgOCwgOCwgMHg3OCk7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDgsIDB4NzgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgOCkpOwotCi0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDgsIDB4OTApOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDEsIDB4MDEpOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDEsIDB4MDApOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDEsIDB4MDApOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDgsIDEsIDB4MDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgNCkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAxMCAqIDgpKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBhLCA4LCA4LCAweDIxKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGEsIDgsIDEpOwotICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGEsIDgsIDEpOwotCi0gIC8qIDE2IGJpdCAqLwotICBnc3RfYml0X3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCAxNik7Ci0KLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgMTYsIDB4MTIzNCk7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCAxMywgMHgwYWNmKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgOCwgMHg1Nik7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYiwgMTYsIDQsIDB4MDcpOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCAyLCAweDAyKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgMiwgMHgwMCk7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCA4LCAweDkwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDExICogOCkpOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCA4LCAweDIxKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCAxNik7Ci0gIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYiwgMTYsIDE2KTsKLQotICAvKiAzMiBiaXQgKi8KLSAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgMTYpOwotCi0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIDMyLCAweDEyMzQ1Njc4KTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgMjQsIDB4OTBhYmNkKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgMTYsIDB4ZWZmZSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIDgsIDB4ZGMpOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGMsIDMyLCA0LCAweDBiKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgMiwgMHgwMik7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIDIsIDB4MDIpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgOCwgMHgwOSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAzICogOCkpOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGMsIDMyLCAxNSwgMHgyMTkwKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgMSwgMHgxKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDMyLCAxKTsKLQotICAvKiA2NCBiaXQgKi8KLSAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgMTYpOwotCi0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIDY0LCBHX0dJTlQ2NF9DT05TVEFOVCAoMHgxMjM0NTY3ODkwYWJjZGVmKSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIDcsIDB4ZmUgPj4gMSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIDEsIDB4MDApOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGQsIDY0LCAyNCwgMHhkY2JhMDkpOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGQsIDY0LCAzMiwgMHg4NzY1NDMyMSk7Ci0gIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBkLCA2NCwgMzIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSN1bmRlZiBHRVRfQ0hFQ0sKLSN1bmRlZiBQRUVLX0NIRUNLCi0jdW5kZWYgR0VUX0NIRUNLX0ZBSUwKLSN1bmRlZiBQRUVLX0NIRUNLX0ZBSUwKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcG9zaXRpb25fdHJhY2tpbmcpCi17Ci0gIGd1aW50OCBkYXRhW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0gICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgotICB9OwotICBHc3RCaXRSZWFkZXIgcmVhZGVyID0gR1NUX0JJVF9SRUFERVJfSU5JVCAoZGF0YSwgMTYpOwotICBndWludDggYSA9IDA7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoJnJlYWRlciksIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSwgMTYgKiA4KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZhLCAzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCAzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDE2ICogOCAtIDMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCA5KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCA5KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDE2ICogOCAtIDkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCAxMik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAxNiAqIDggLSAxMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9iaXRfcmVhZGVyX3NraXBfdG9fYnl0ZSAoJnJlYWRlcikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYml0X3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSwgMTYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYml0X3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSwgMTYgKiA4IC0gMTYpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAxNiAqIDgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2JpdF9yZWFkZXJfZ2V0X3BvcyAoJnJlYWRlciksIDE2ICogOCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9iaXRfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMCkpOwotICBmYWlsX2lmIChnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAxKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYml0X3JlYWRlcl9za2lwX3RvX2J5dGUgKCZyZWFkZXIpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2JpdF9yZWFkZXJfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0Qml0UmVhZGVyIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5pdGlhbGl6YXRpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X2JpdHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9zaXRpb25fdHJhY2tpbmcpOwotCi0gIHJldHVybiBzOwotfQotCi0KLUdTVF9DSEVDS19NQUlOIChnc3RfYml0X3JlYWRlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXItbm9pbmxpbmUuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci1ub2lubGluZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjAwMTI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci1ub2lubGluZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgR3N0Qnl0ZVJlYWRlciB3aXRob3V0IHVzaW5nIGlubGluaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jZGVmaW5lIEdTVF9CWVRFX1JFQURFUl9ESVNBQkxFX0lOTElORVMKLSNpbmNsdWRlICJieXRlcmVhZGVyLmMiCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2J5dGVyZWFkZXIuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGEyOTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXJlYWRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsODQ2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgR3N0Qnl0ZVJlYWRlcgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDg+IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg+Ci0KLSNpZm5kZWYgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0Ci0jZGVmaW5lIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NChhLCBiKQkJCQkJXAotR19TVE1UX1NUQVJUIHsJCQkJCQkJCVwKLSAgZ2ludDY0IGZpcnN0ID0gYTsJCQkJCQkJXAotICBnaW50NjQgc2Vjb25kID0gYjsJCQkJCQkJXAotICBmYWlsX3VubGVzcyhmaXJzdCA9PSBzZWNvbmQsCQkJCQkJXAotICAgICInIiAjYSAiJyAoJSIgR19HSU5UNjRfRk9STUFUICIpIGlzIG5vdCBlcXVhbCB0byAnIiAjYiInICglIglcCi0gICAgR19HSU5UNjRfRk9STUFUICIpIiwgZmlyc3QsIHNlY29uZCk7CQkJCVwKLX0gR19TVE1UX0VORDsKLSNlbmRpZgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbml0aWFsaXphdGlvbikKLXsKLSAgZ3VpbnQ4IGRhdGFbXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OwotICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBHc3RCeXRlUmVhZGVyIHJlYWRlciA9IEdTVF9CWVRFX1JFQURFUl9JTklUIChkYXRhLCA0KTsKLSAgR3N0Qnl0ZVJlYWRlciAqcmVhZGVyMjsKLSAgZ3VpbnQ4IHggPSAwOwotICBHc3RNYXBJbmZvIGluZm87Ci0KLSAgZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5IChidWZmZXIsIC0xLAotICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBkYXRhLCA0LCAwLCA0LCBOVUxMLAotICAgICAgICAgIE5VTEwpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJngpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmcmVhZGVyLCAmeCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAyKTsKLQotICBtZW1zZXQgKCZyZWFkZXIsIDAsIHNpemVvZiAoR3N0Qnl0ZVJlYWRlcikpOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCA0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZyZWFkZXIsICZ4KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJngpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIGluZm8uZGF0YSwgaW5mby5zaXplKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZyZWFkZXIsICZ4KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJngpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMik7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotCi0gIHJlYWRlcjIgPSBnc3RfYnl0ZV9yZWFkZXJfbmV3IChkYXRhLCA0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlcjIsICZ4KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHgsIDB4MDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAocmVhZGVyMiwgJngpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMik7Ci0gIGdzdF9ieXRlX3JlYWRlcl9mcmVlIChyZWFkZXIyKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCkpOwotICByZWFkZXIyID0gZ3N0X2J5dGVfcmVhZGVyX25ldyAoaW5mby5kYXRhLCBpbmZvLnNpemUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAocmVhZGVyMiwgJngpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHgwMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIyLCAmeCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh4LCAweDAyKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX2ZyZWUgKHJlYWRlcjIpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbmZvKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNkZWZpbmUgR0VUX0NIRUNLOChyZWFkZXIsIGRlc3QsIHZhbCkgeyBcCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIsICZkZXN0KSk7IFwKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZGVzdCwgdmFsKTsgXAotfQotCi0jZGVmaW5lIEdFVF9DSEVDSyhyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MsIHZhbCkgeyBcCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChkZXN0LCB2YWwpOyBcCi19Ci0KLSNkZWZpbmUgR0VUX0NIRUNLX0ZBSUw4KHJlYWRlciwgZGVzdCkgeyBcCi0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlciwgJmRlc3QpKTsgXAotfQotCi0jZGVmaW5lIEdFVF9DSEVDS19GQUlMKHJlYWRlciwgZGVzdCwgYml0cywgZW5kaWFubmVzcykgeyBcCi0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludCMjYml0cyMjXyMjZW5kaWFubmVzcyAocmVhZGVyLCAmZGVzdCkpOyBcCi19Ci0KLSNkZWZpbmUgUEVFS19DSEVDSzgocmVhZGVyLCBkZXN0LCB2YWwpIHsgXAotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDggKHJlYWRlciwgJmRlc3QpKTsgXAotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChkZXN0LCB2YWwpOyBcCi19Ci0KLSNkZWZpbmUgUEVFS19DSEVDSyhyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MsIHZhbCkgeyBcCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50IyNiaXRzIyNfIyNlbmRpYW5uZXNzIChyZWFkZXIsICZkZXN0KSk7IFwKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZGVzdCwgdmFsKTsgXAotfQotCi0jZGVmaW5lIFBFRUtfQ0hFQ0tfRkFJTDgocmVhZGVyLCBkZXN0KSB7IFwKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDggKHJlYWRlciwgJmRlc3QpKTsgXAotfQotCi0jZGVmaW5lIFBFRUtfQ0hFQ0tfRkFJTChyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MpIHsgXAotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfcGVla191aW50IyNiaXRzIyNfIyNlbmRpYW5uZXNzIChyZWFkZXIsICZkZXN0KSk7IFwKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2V0X3VpbnRfbGUpCi17Ci0gIGd1aW50OCBkYXRhW10gPSB7IDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OTAsIDB4YWIsIDB4Y2QsIDB4ZWYsCi0gICAgMHhmZSwgMHhkYywgMHhiYSwgMHgwOSwgMHg4NywgMHg2NSwgMHg0MywgMHgyMQotICB9OwotICBHc3RCeXRlUmVhZGVyIHJlYWRlciA9IEdTVF9CWVRFX1JFQURFUl9JTklUIChkYXRhLCAxNik7Ci0gIGd1aW50OCBhID0gMDsKLSAgZ3VpbnQxNiBiID0gMDsKLSAgZ3VpbnQzMiBjID0gMDsKLSAgZ3VpbnQ2NCBkID0gMDsKLQotICBHRVRfQ0hFQ0s4ICgmcmVhZGVyLCBhLCAweDEyKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgbGUsIDB4NTYzNCk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMjQsIGxlLCAweGFiOTA3OCk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIGxlLCAweGRjZmVlZmNkKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGxlLCBHX0dJTlQ2NF9DT05TVEFOVCAoMHhlZmNkYWI5MDc4NTYzNDEyKSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGxlLCBHX0dJTlQ2NF9DT05TVEFOVCAoMHgyMTQzNjU4NzA5YmFkY2ZlKSk7Ci0KLSAgR0VUX0NIRUNLX0ZBSUw4ICgmcmVhZGVyLCBhKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCBsZSk7Ci0gIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAyNCwgbGUpOwotICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMzIsIGxlKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGQsIDY0LCBsZSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7Ci0KLSAgUEVFS19DSEVDSzggKCZyZWFkZXIsIGEsIDB4MTIpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgbGUsIDB4MzQxMik7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGMsIDI0LCBsZSwgMHg1NjM0MTIpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgbGUsIDB4Nzg1NjM0MTIpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBkLCA2NCwgbGUsIEdfR0lOVDY0X0NPTlNUQU5UICgweGVmY2RhYjkwNzg1NjM0MTIpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDE2KSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTDggKCZyZWFkZXIsIGEpOwotICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCBsZSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMjQsIGxlKTsKLSAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAzMiwgbGUpOwotICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGQsIDY0LCBsZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2V0X3VpbnRfYmUpCi17Ci0gIGd1aW50OCBkYXRhW10gPSB7IDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OTAsIDB4YWIsIDB4Y2QsIDB4ZWYsCi0gICAgMHhmZSwgMHhkYywgMHhiYSwgMHgwOSwgMHg4NywgMHg2NSwgMHg0MywgMHgyMQotICB9OwotICBHc3RCeXRlUmVhZGVyIHJlYWRlciA9IEdTVF9CWVRFX1JFQURFUl9JTklUIChkYXRhLCAxNik7Ci0gIGd1aW50OCBhID0gMDsKLSAgZ3VpbnQxNiBiID0gMDsKLSAgZ3VpbnQzMiBjID0gMDsKLSAgZ3VpbnQ2NCBkID0gMDsKLQotICBHRVRfQ0hFQ0s4ICgmcmVhZGVyLCBhLCAweDEyKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgYmUsIDB4MzQ1Nik7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMjQsIGJlLCAweDc4OTBhYik7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIGJlLCAweGNkZWZmZWRjKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGJlLCBHX0dJTlQ2NF9DT05TVEFOVCAoMHgxMjM0NTY3ODkwYWJjZGVmKSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGJlLCBHX0dJTlQ2NF9DT05TVEFOVCAoMHhmZWRjYmEwOTg3NjU0MzIxKSk7Ci0KLSAgR0VUX0NIRUNLX0ZBSUw4ICgmcmVhZGVyLCBhKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCBiZSk7Ci0gIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAyNCwgYmUpOwotICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMzIsIGJlKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGQsIDY0LCBiZSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7Ci0KLSAgUEVFS19DSEVDSzggKCZyZWFkZXIsIGEsIDB4MTIpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgYmUsIDB4MTIzNCk7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGMsIDI0LCBiZSwgMHgxMjM0NTYpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgYmUsIDB4MTIzNDU2NzgpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBkLCA2NCwgYmUsIEdfR0lOVDY0X0NPTlNUQU5UICgweDEyMzQ1Njc4OTBhYmNkZWYpKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDE2KSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTDggKCZyZWFkZXIsIGEpOwotICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDE2LCBiZSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMjQsIGJlKTsKLSAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAzMiwgYmUpOwotICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGQsIDY0LCBiZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI3VuZGVmIEdFVF9DSEVDSzgKLSN1bmRlZiBHRVRfQ0hFQ0sKLSN1bmRlZiBQRUVLX0NIRUNLOAotI3VuZGVmIFBFRUtfQ0hFQ0sKLSN1bmRlZiBHRVRfQ0hFQ0tfRkFJTDgKLSN1bmRlZiBHRVRfQ0hFQ0tfRkFJTAotI3VuZGVmIFBFRUtfQ0hFQ0tfRkFJTDgKLSN1bmRlZiBQRUVLX0NIRUNLX0ZBSUwKLQotI2RlZmluZSBHRVRfQ0hFQ0s4KHJlYWRlciwgZGVzdCwgdmFsKSB7IFwKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50OCAocmVhZGVyLCAmZGVzdCkpOyBcCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoZGVzdCwgdmFsKTsgXAotfQotCi0jZGVmaW5lIEdFVF9DSEVDSyhyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MsIHZhbCkgeyBcCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludCMjYml0cyMjXyMjZW5kaWFubmVzcyAocmVhZGVyLCAmZGVzdCkpOyBcCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoZGVzdCwgdmFsKTsgXAotfQotCi0jZGVmaW5lIEdFVF9DSEVDS19GQUlMOChyZWFkZXIsIGRlc3QpIHsgXAotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDggKHJlYWRlciwgJmRlc3QpKTsgXAotfQotCi0jZGVmaW5lIEdFVF9DSEVDS19GQUlMKHJlYWRlciwgZGVzdCwgYml0cywgZW5kaWFubmVzcykgeyBcCi0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50IyNiaXRzIyNfIyNlbmRpYW5uZXNzIChyZWFkZXIsICZkZXN0KSk7IFwKLX0KLQotI2RlZmluZSBQRUVLX0NIRUNLOChyZWFkZXIsIGRlc3QsIHZhbCkgeyBcCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4IChyZWFkZXIsICZkZXN0KSk7IFwKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChkZXN0LCB2YWwpOyBcCi19Ci0KLSNkZWZpbmUgUEVFS19DSEVDSyhyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MsIHZhbCkgeyBcCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKGRlc3QsIHZhbCk7IFwKLX0KLQotI2RlZmluZSBQRUVLX0NIRUNLX0ZBSUw4KHJlYWRlciwgZGVzdCkgeyBcCi0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDggKHJlYWRlciwgJmRlc3QpKTsgXAotfQotCi0jZGVmaW5lIFBFRUtfQ0hFQ0tfRkFJTChyZWFkZXIsIGRlc3QsIGJpdHMsIGVuZGlhbm5lc3MpIHsgXAotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9nZXRfaW50X2xlKQotewotICBndWludDggZGF0YVtdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKLSAgfTsKLSAgR3N0Qnl0ZVJlYWRlciByZWFkZXIgPSBHU1RfQllURV9SRUFERVJfSU5JVCAoZGF0YSwgMTYpOwotICBnaW50OCBhID0gMDsKLSAgZ2ludDE2IGIgPSAwOwotICBnaW50MzIgYyA9IDA7Ci0gIGdpbnQ2NCBkID0gMDsKLQotICBHRVRfQ0hFQ0s4ICgmcmVhZGVyLCBhLCAtMSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYiwgMTYsIGxlLCAtMSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMjQsIGxlLCAtMSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYywgMzIsIGxlLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoJnJlYWRlciwgMCkpOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGQsIDY0LCBsZSwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGxlLCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpKTsKLQotICBHRVRfQ0hFQ0tfRkFJTDggKCZyZWFkZXIsIGEpOwotICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYiwgMTYsIGxlKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDI0LCBsZSk7Ci0gIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAzMiwgbGUpOwotICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgZCwgNjQsIGxlKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDApKTsKLQotICBQRUVLX0NIRUNLOCAoJnJlYWRlciwgYSwgLTEpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgbGUsIC0xKTsKLSAgUEVFS19DSEVDSyAoJnJlYWRlciwgYywgMjQsIGxlLCAtMSk7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGMsIDMyLCBsZSwgLTEpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBkLCA2NCwgbGUsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoJnJlYWRlciwgMTYpKTsKLSAgUEVFS19DSEVDS19GQUlMOCAoJnJlYWRlciwgYSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYiwgMTYsIGxlKTsKLSAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBjLCAyNCwgbGUpOwotICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDMyLCBsZSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgZCwgNjQsIGxlKTsKLQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dldF9pbnRfYmUpCi17Ci0gIGd1aW50OCBkYXRhW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0gICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgotICB9OwotICBHc3RCeXRlUmVhZGVyIHJlYWRlciA9IEdTVF9CWVRFX1JFQURFUl9JTklUIChkYXRhLCAxNik7Ci0gIGdpbnQ4IGEgPSAwOwotICBnaW50MTYgYiA9IDA7Ci0gIGdpbnQzMiBjID0gMDsKLSAgZ2ludDY0IGQgPSAwOwotCi0gIEdFVF9DSEVDSzggKCZyZWFkZXIsIGEsIC0xKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCAxNiwgYmUsIC0xKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAyNCwgYmUsIC0xKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBjLCAzMiwgYmUsIC0xKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKSk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgZCwgNjQsIGJlLCBHX0dJTlQ2NF9DT05TVEFOVCAoLTEpKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBkLCA2NCwgYmUsIEdfR0lOVDY0X0NPTlNUQU5UICgtMSkpOwotCi0gIEdFVF9DSEVDS19GQUlMOCAoJnJlYWRlciwgYSk7Ci0gIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBiLCAxNiwgYmUpOwotICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMjQsIGJlKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDMyLCBiZSk7Ci0gIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBkLCA2NCwgYmUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoJnJlYWRlciwgMCkpOwotCi0gIFBFRUtfQ0hFQ0s4ICgmcmVhZGVyLCBhLCAtMSk7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGIsIDE2LCBiZSwgLTEpOwotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBjLCAyNCwgYmUsIC0xKTsKLSAgUEVFS19DSEVDSyAoJnJlYWRlciwgYywgMzIsIGJlLCAtMSk7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGQsIDY0LCBiZSwgR19HSU5UNjRfQ09OU1RBTlQgKC0xKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAxNikpOwotICBQRUVLX0NIRUNLX0ZBSUw4ICgmcmVhZGVyLCBhKTsKLSAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBiLCAxNiwgYmUpOwotICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGMsIDI0LCBiZSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYywgMzIsIGJlKTsKLSAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBkLCA2NCwgYmUpOwotCi19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI3VuZGVmIEdFVF9DSEVDSzgKLSN1bmRlZiBHRVRfQ0hFQ0sKLSN1bmRlZiBQRUVLX0NIRUNLOAotI3VuZGVmIFBFRUtfQ0hFQ0sKLSN1bmRlZiBHRVRfQ0hFQ0tfRkFJTDgKLSN1bmRlZiBHRVRfQ0hFQ0tfRkFJTAotI3VuZGVmIFBFRUtfQ0hFQ0tfRkFJTDgKLSN1bmRlZiBQRUVLX0NIRUNLX0ZBSUwKLQotI2RlZmluZSBHRVRfQ0hFQ0socmVhZGVyLCBkZXN0LCBiaXRzLCBlbmRpYW5uZXNzLCB2YWwpIHsgXAotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF9mbG9hdCMjYml0cyMjXyMjZW5kaWFubmVzcyAocmVhZGVyLCAmZGVzdCkpOyBcCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoZGVzdCwgdmFsKTsgXAotfQotCi0jZGVmaW5lIEdFVF9DSEVDS19GQUlMKHJlYWRlciwgZGVzdCwgYml0cywgZW5kaWFubmVzcykgeyBcCi0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAotfQotCi0jZGVmaW5lIFBFRUtfQ0hFQ0socmVhZGVyLCBkZXN0LCBiaXRzLCBlbmRpYW5uZXNzLCB2YWwpIHsgXAotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKGRlc3QsIHZhbCk7IFwKLX0KLQotI2RlZmluZSBQRUVLX0NIRUNLX0ZBSUwocmVhZGVyLCBkZXN0LCBiaXRzLCBlbmRpYW5uZXNzKSB7IFwKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQjI2JpdHMjI18jI2VuZGlhbm5lc3MgKHJlYWRlciwgJmRlc3QpKTsgXAotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9nZXRfZmxvYXRfbGUpCi17Ci0gIGd1aW50OCBkYXRhW10gPSB7Ci0gICAgMHgwMCwgMHgwMCwgMHg4MCwgMHgzZiwKLSAgICAweDAwLCAweDAwLCAweDgwLCAweGJmLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4M2YsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiZiwKLSAgfTsKLSAgR3N0Qnl0ZVJlYWRlciByZWFkZXIgPSBHU1RfQllURV9SRUFERVJfSU5JVCAoZGF0YSwgMjQpOwotICBnZmxvYXQgYSA9IDAuMDsKLSAgZ2RvdWJsZSBiID0gMC4wOwotCi0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGEsIDMyLCBsZSwgMS4wKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBhLCAzMiwgbGUsIDEuMCk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgMzIsIGxlLCAtMS4wKTsKLSAgUEVFS19DSEVDSyAoJnJlYWRlciwgYiwgNjQsIGxlLCAxLjApOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGIsIDY0LCBsZSwgMS4wKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCA2NCwgbGUsIC0xLjApOwotICBHRVRfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYSwgMzIsIGxlKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGIsIDY0LCBsZSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYSwgMzIsIGxlKTsKLSAgUEVFS19DSEVDS19GQUlMICgmcmVhZGVyLCBiLCA2NCwgbGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dldF9mbG9hdF9iZSkKLXsKLSAgZ3VpbnQ4IGRhdGFbXSA9IHsKLSAgICAweDNmLCAweDgwLCAweDAwLCAweDAwLAotICAgIDB4YmYsIDB4ODAsIDB4MDAsIDB4MDAsCi0gICAgMHgzZiwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweGJmLCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi0gIH07Ci0gIEdzdEJ5dGVSZWFkZXIgcmVhZGVyID0gR1NUX0JZVEVfUkVBREVSX0lOSVQgKGRhdGEsIDI0KTsKLSAgZ2Zsb2F0IGEgPSAwLjA7Ci0gIGdkb3VibGUgYiA9IDAuMDsKLQotICBQRUVLX0NIRUNLICgmcmVhZGVyLCBhLCAzMiwgYmUsIDEuMCk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYSwgMzIsIGJlLCAxLjApOwotICBHRVRfQ0hFQ0sgKCZyZWFkZXIsIGEsIDMyLCBiZSwgLTEuMCk7Ci0gIFBFRUtfQ0hFQ0sgKCZyZWFkZXIsIGIsIDY0LCBiZSwgMS4wKTsKLSAgR0VUX0NIRUNLICgmcmVhZGVyLCBiLCA2NCwgYmUsIDEuMCk7Ci0gIEdFVF9DSEVDSyAoJnJlYWRlciwgYiwgNjQsIGJlLCAtMS4wKTsKLSAgR0VUX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGEsIDMyLCBiZSk7Ci0gIEdFVF9DSEVDS19GQUlMICgmcmVhZGVyLCBiLCA2NCwgYmUpOwotICBQRUVLX0NIRUNLX0ZBSUwgKCZyZWFkZXIsIGEsIDMyLCBiZSk7Ci0gIFBFRUtfQ0hFQ0tfRkFJTCAoJnJlYWRlciwgYiwgNjQsIGJlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0jdW5kZWYgR0VUX0NIRUNLCi0jdW5kZWYgUEVFS19DSEVDSwotI3VuZGVmIEdFVF9DSEVDS19GQUlMCi0jdW5kZWYgUEVFS19DSEVDS19GQUlMCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3Bvc2l0aW9uX3RyYWNraW5nKQotewotICBndWludDggZGF0YVtdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKLSAgfTsKLSAgR3N0Qnl0ZVJlYWRlciByZWFkZXIgPSBHU1RfQllURV9SRUFERVJfSU5JVCAoZGF0YSwgMTYpOwotICBndWludDggYSA9IDA7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAxNik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZyZWFkZXIsICZhKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSwgMTYgLSAxKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCA4KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAxNiAtIDgpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgNCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvcyAoJnJlYWRlciksIDEyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpLCAxNiAtIDEyKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDE2KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSwgMTYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMCkpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNkZWZpbmUgZG9fc2NhbihyLG0scCxvLHMseCkgXAotR19TVE1UX1NUQVJUIHsJCQkJCQkJCVwKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyLG0scCxvLHMpLCB4KTsgXAotICAgIGlmICh4ICE9IC0xKSB7IFwKLSAgICAgIGd1aW50MzIgdiwgcmVzX3Y7IFwKLSAgICAgIGNvbnN0IGd1aW50OCAqcmRhdGEgPSBOVUxMOyBcCi0gICAgICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSAociwgeCArIDQsICZyZGF0YSkpOyBcCi0gICAgICByZXNfdiA9IEdTVF9SRUFEX1VJTlQzMl9CRSAocmRhdGEgKyB4KTsgXAotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChyLG0scCxvLHMsJnYpLCB4KTsgXAotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodiwgcmVzX3YpOyBcCi0gICAgfSBcCi19IEdfU1RNVF9FTkQ7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NjYW4pCi17Ci0gIEdzdEJ5dGVSZWFkZXIgcmVhZGVyOwotICBndWludDggZGF0YVsyMDBdOwotICBndWludCBpOwotCi0gIC8qIGZpbGwgaGFsZiB0aGUgYnVmZmVyIHdpdGggYSBwYXR0ZXJuICovCi0gIGZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykKLSAgICBkYXRhW2ldID0gaTsKLQotICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgMTAwKTsKLQotICAvKiBmaW5kIGZpcnN0IGJ5dGVzICovCi0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDAwMTAyMDMsIDAsIDEwMCwgMCk7Ci0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDEwMjAzMDQsIDAsIDEwMCwgMSk7Ci0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDEwMjAzMDQsIDEsIDk5LCAxKTsKLSAgLyogb2Zmc2V0IGlzIHBhc3QgdGhlIHBhdHRlcm4gc3RhcnQgKi8KLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHgwMTAyMDMwNCwgMiwgOTgsIC0xKTsKLSAgLyogbm90IGVub3VnaCBieXRlcyB0byBmaW5kIHRoZSBwYXR0ZXJuICovCi0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MDIwMzA0MDUsIDIsIDMsIC0xKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHgwMjAzMDQwNSwgMiwgNCwgMik7Ci0gIC8qIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0aGUgbGFzdCBzY2FubmVkIGJ5dGUgKi8KLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg0MDQxNDI0MywgMCwgMHg0MSwgLTEpOwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDQwNDE0MjQzLCAwLCAweDQzLCAtMSk7Ci0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NDA0MTQyNDMsIDAsIDB4NDQsIDB4NDApOwotICAvKiBwYXN0IHRoZSBzdGFydCAqLwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDQwNDE0MjQzLCA2NSwgMTAsIC0xKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg0MDQxNDI0MywgNjQsIDUsIDY0KTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2MDYxNjI2MywgNjUsIDM1LCAweDYwKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2MDYxNjI2MywgMHg2MCwgNCwgMHg2MCk7Ci0gIC8qIHBhc3QgdGhlIHN0YXJ0ICovCi0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDB4NjEsIDMsIC0xKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2MDYxNjI2MywgOTksIDEsIC0xKTsKLQotICAvKiBhZGQgbW9yZSBkYXRhIHRvIHRoZSBidWZmZXIgKi8KLSAgZm9yIChpID0gMTAwOyBpIDwgMjAwOyBpKyspCi0gICAgZGF0YVtpXSA9IGk7Ci0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCAyMDApOwotCi0gIC8qIHBhc3QgdGhlIHN0YXJ0ICovCi0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjA2MTYyNjMsIDB4NjEsIDYsIC0xKTsKLSAgLyogdGhpcyBzaG91bGQgd29yayAqLwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDYxNjI2MzY0LCAweDYxLCA0LCAweDYxKTsKLSAgLyogbm90IGVub3VnaCBkYXRhICovCi0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjI2MzY0NjUsIDB4NjEsIDQsIC0xKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2MjYzNjQ2NSwgMHg2MSwgNSwgMHg2Mik7Ci0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjI2MzY0NjUsIDAsIDEyMCwgMHg2Mik7Ci0KLSAgLyogYm9yZGVyIGNvbmRpdGlvbnMgKi8KLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2MjYzNjQ2NSwgMCwgMjAwLCAweDYyKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg2MzY0NjU2NiwgMCwgMjAwLCAweDYzKTsKLSAgLyogd2UgY29tcGxldGVseSBzZWFyY2hlZCB0aGUgZmlyc3QgbGlzdCAqLwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAwLCAyMDAsIDB4NjQpOwotICAvKiBza2lwIGZpcnN0IGJ1ZmZlciAqLwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAweDY0LCAxMDAsIDB4NjQpOwotICAvKiBwYXN0IHRoZSBzdGFydCAqLwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAweDY1LCAxMCwgLTEpOwotICAvKiBub3QgZW5vdWdoIGRhdGEgdG8gc2NhbiAqLwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDY0NjU2NjY3LCAweDYzLCA0LCAtMSk7Ci0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4NjQ2NTY2NjcsIDB4NjMsIDUsIDB4NjQpOwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAwLCAxOTksIC0xKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHhjNGM1YzZjNywgMHg2MiwgMTAyLCAweGM0KTsKLSAgLyogZGlmZmVyZW50IG1hc2tzICovCi0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4MDBmZmZmZmYsIDB4MDA2NTY2NjcsIDB4NjQsIDEwMCwgMHg2NCk7Ci0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4MDAwMDAwZmYsIDB4MDAwMDAwMDAsIDAsIDEwMCwgLTEpOwotICBkb19zY2FuICgmcmVhZGVyLCAweDAwMDAwMGZmLCAweDAwMDAwMDAzLCAwLCAxMDAsIDApOwotICBkb19zY2FuICgmcmVhZGVyLCAweDAwMDAwMGZmLCAweDAwMDAwMDYxLCAweDYxLCAxMDAsIC0xKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZjAwMDAwMCwgMHg2MTAwMDAwMCwgMCwgMHg2MiwgLTEpOwotICAvKiBkb2VzIG5vdCBldmVuIGV4aXN0ICovCi0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4MDBmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NjUsIDk5LCAtMSk7Ci0KLSAgLyogZmx1c2ggc29tZSBieXRlcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDB4MjApKTsKLQotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDIwMjEyMjIzLCAwLCAxMDAsIDApOwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweDIwMjEyMjIzLCAwLCA0LCAwKTsKLSAgZG9fc2NhbiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHhjNGM1YzZjNywgMHg2MiwgNzAsIDB4YTQpOwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAwLCAxNjgsIDB4YTQpOwotCi0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDE2NCwgNCwgMHhhNCk7Ci0gIGRvX3NjYW4gKCZyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4YzRjNWM2YzcsIDB4NDQsIDEwMCwgMHhhNCk7Ci0KLSAgLyogbm90IGVub3VnaCBieXRlcyAqLwotICBkb19zY2FuICgmcmVhZGVyLCAweGZmZmZmZmZmLCAweGM0YzVjNmM3LCAweDQ0LCA5OSwgLTEpOwotCi0gIC8qIGNoZWNrIHNwZWNpYWwgY29kZSBwYXRoIHRoYXQgZXhpc3RzIGZvciAwMCAwMCAwMSBzeW5jIG1hcmtlciAqLwotICB7Ci0gICAgY29uc3QgZ3VpbnQ4IHN5bmNfZGF0YVtdID0geyAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEE1LCAweEE2LAotICAgICAgMHhBNywgMHhBOCwgMHhBOSwgMHhBQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBRiwgMHhCMCwgMHhCMQotICAgIH07Ci0gICAgZ3VpbnQzMiB2YWwgPSAwOwotICAgIGd1aW50OCAqbTsKLSAgICBnaW50IGZvdW5kOwotCi0gICAgLyogZHVwIHNvIHZhbGdyaW5kIGNhbiBkZXRlY3Qgb3V0IG9mIGJvdW5kcyBhY2Nlc3MgbW9yZSBlYXNpbHkgKi8KLSAgICBtID0gZ19tZW1kdXAgKHN5bmNfZGF0YSwgc2l6ZW9mIChzeW5jX2RhdGEpKTsKLSAgICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgbSwgc2l6ZW9mIChzeW5jX2RhdGEpKTsKLQotICAgIGZvdW5kID0gZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrICgmcmVhZGVyLCAweGZmZmZmZjAwLAotICAgICAgICAweDAwMDAwMTAwLCAwLCBzaXplb2YgKHN5bmNfZGF0YSksICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZvdW5kLCAyKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2YWwsIDB4MDAwMDAxQTUpOwotCi0gICAgZm91bmQgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWsgKCZyZWFkZXIsIDB4ZmZmZmZmMDAsCi0gICAgICAgIDB4MDAwMDAxMDAsIDIsIHNpemVvZiAoc3luY19kYXRhKSAtIDIsICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZvdW5kLCAyKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2YWwsIDB4MDAwMDAxQTUpOwotCi0gICAgZm91bmQgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyX3BlZWsgKCZyZWFkZXIsIDB4ZmZmZmZmMDAsCi0gICAgICAgIDB4MDAwMDAxMDAsIDMsIHNpemVvZiAoc3luY19kYXRhKSAtIDMsICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZvdW5kLCAxMik7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodmFsLCAweDAwMDAwMUFGKTsKLQotICAgIGZvdW5kID0gZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrICgmcmVhZGVyLCAweGZmZmZmZjAwLAotICAgICAgICAweDAwMDAwMTAwLCAxMiwgc2l6ZW9mIChzeW5jX2RhdGEpIC0gMTIsICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZvdW5kLCAxMik7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodmFsLCAweDAwMDAwMUFGKTsKLQotICAgIGZvdW5kID0gZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrICgmcmVhZGVyLCAweGZmZmZmZjAwLAotICAgICAgICAweDAwMDAwMTAwLCAxMywgc2l6ZW9mIChzeW5jX2RhdGEpIC0gMTMsICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZvdW5kLCAtMSk7Ci0KLSAgICBnX2ZyZWUgKG0pOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RyaW5nX2Z1bmNzKQotewotICBHc3RCeXRlUmVhZGVyIHJlYWRlciwgYmFja3VwOwotICBjb25zdCBnY2hhciAqczg7Ci0gIGd1aW50MzIgKmMzMjsKLSAgZ3VpbnQxNiAqYzE2OwotICBnY2hhciAqYzg7Ci0gIGd1aW50OCBkYXRhWzIwMF0sICpkID0gMDsKLSAgZ3VpbnQgaTsKLQotICAvKiBmaWxsIGhhbGYgdGhlIGJ1ZmZlciB3aXRoIGEgcGF0dGVybiAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspCi0gICAgZGF0YVtpXSA9IGkgKyAxOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCAxMDApOwotCi0gIC8qIG5vIE5VTCB0ZXJtaW5hdG9yLCBzbyB0aGVzZSBzaG91bGQgYWxsIGZhaWwgKi8KLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF9zdHJpbmcgKCZyZWFkZXIsICZzOCkpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N0cmluZ191dGY4ICgmcmVhZGVyLCAmczgpKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmcgKCZyZWFkZXIsICZjOCkpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGY4ICgmcmVhZGVyLCAmYzgpKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nICgmcmVhZGVyKSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICgmcmVhZGVyKSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNiAoJnJlYWRlcikpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIgKCZyZWFkZXIpKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nICgmcmVhZGVyLCAmczgpKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjggKCZyZWFkZXIsICZzOCkpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNiAoJnJlYWRlciwgJmMxNikpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMiAoJnJlYWRlciwgJmMzMikpOwotCi0gIC8qIGxldCdzIGFkZCBhIHNpbmdsZSBOVUwgdGVybWluYXRvciAqLwotICBkYXRhWzgwXSA9ICdcMCc7Ci0gIGJhY2t1cCA9IHJlYWRlcjsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyKSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYxNiAoJnJlYWRlcikpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYxNiAoJnJlYWRlciwgJmMxNikpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMiAoJnJlYWRlciwgJmMzMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nICgmcmVhZGVyKSk7Ci0gIHJlYWRlciA9IGJhY2t1cDsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICgmcmVhZGVyKSk7Ci0gIHJlYWRlciA9IGJhY2t1cDsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZyAoJnJlYWRlciwgJnM4KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOCAoJnJlYWRlciwgJnM4KSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyLCAmYzE2KSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyLCAmYzMyKSk7Ci0KLSAgLyogbGV0J3MgYWRkIGFub3RoZXIgTlVMIHRlcm1pbmF0b3IgKi8KLSAgZGF0YVs4MV0gPSAnXDAnOwotICByZWFkZXIgPSBiYWNrdXA7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGYzMiAoJnJlYWRlcikpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMiAoJnJlYWRlciwgJmMzMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyKSk7Ci0gIHJlYWRlciA9IGJhY2t1cDsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyLCAmYzE2KSk7Ci0gIGdfZnJlZSAoYzE2KTsKLSAgcmVhZGVyID0gYmFja3VwOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nICgmcmVhZGVyKSk7Ci0gIHJlYWRlciA9IGJhY2t1cDsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZ191dGY4ICgmcmVhZGVyKSk7Ci0gIHJlYWRlciA9IGJhY2t1cDsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N0cmluZyAoJnJlYWRlciwgJnM4KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmdfdXRmOCAoJnJlYWRlciwgJnM4KSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyLCAmYzMyKSk7Ci0KLSAgLyogdHdvIG1vcmUgTlVMIHRlcm1pbmF0b3JzICovCi0gIGRhdGFbNzldID0gJ1wwJzsKLSAgZGF0YVs4Ml0gPSAnXDAnOwotICByZWFkZXIgPSBiYWNrdXA7Ci0gIC8qIHdlJ3JlIGF0IHBvcy4gODAgbm93LCBzbyBoYXZlIG9ubHkgMyBOVUwgdGVybWluYXRvcnMgaW4gZnJvbnQgb2YgdXMgKi8KLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyICgmcmVhZGVyKSk7Ci0gIC8qIGxldCdzIHJld2luZCAqLwotICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgMTAwKTsKLSAgYmFja3VwID0gcmVhZGVyOwotICAvKiBvb3BzLCA3OSBpcyBub3QgZGl2aWRhYmxlIGJ5IDQsIHNvIG5vdCBhbGlnbmVkLCBzbyBzaG91bGQgZmFpbCBhcyB3ZWxsISAqLwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmMzIgKCZyZWFkZXIpKTsKLSAgLyogbGV0J3MgdHJ5IHRoYXQgYWdhaW4gKi8KLSAgZGF0YVs4M10gPSAnXDAnOwotICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgMTAwKTsKLSAgYmFja3VwID0gcmVhZGVyOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyKSk7Ci0gIHJlYWRlciA9IGJhY2t1cDsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9za2lwX3N0cmluZyAoJnJlYWRlcikpOwotICByZWFkZXIgPSBiYWNrdXA7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfc2tpcF9zdHJpbmdfdXRmOCAoJnJlYWRlcikpOwotICByZWFkZXIgPSBiYWNrdXA7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmcgKCZyZWFkZXIsICZzOCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjggKCZyZWFkZXIsICZzOCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYgKCZyZWFkZXIsICZjMTYpKTsKLSAgZ19mcmVlIChjMTYpOwotICByZWFkZXIgPSBiYWNrdXA7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMiAoJnJlYWRlciwgJmMzMikpOwotICBnX2ZyZWUgKGMzMik7Ci0KLSAgLyogYW5kIGFnYWluIGZyb20gdGhlIHN0YXJ0ICovCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCAxMDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2ICgmcmVhZGVyKSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YSAoJnJlYWRlciwgMjAwLCAmZCkpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgKCZyZWFkZXIsIDEwMCwgJmQpKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhICgmcmVhZGVyLCAyMCwgJmQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YSAoJnJlYWRlciwgMTAsICZkKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRbMF0sIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkWzFdLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZFsyXSwgODUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkWzNdLCA4Nik7Ci0gIGdfZnJlZSAoZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZHVwX3N0cmluZykKLXsKLSAgY29uc3QgZ2NoYXIgbW9yZWRhdGFbXSA9IHsgMHg5OSwgMHgxMCwgJ2YnLCAnMCcsICcwJywgJyEnLCAnXDAnLCAweGZmIH07Ci0gIEdzdEJ5dGVSZWFkZXIgcmVhZGVyOwotICBndWludDE2IG51bSA9IDA7Ci0gIGd1aW50OCB4ID0gMDsKLSAgZ2NoYXIgKnM7Ci0KLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIChndWludDggKikgbW9yZWRhdGEsIHNpemVvZiAobW9yZWRhdGEpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgmcmVhZGVyLCAmbnVtKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG51bSwgMHg5OTEwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nICgmcmVhZGVyLCAmcykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChzLCAiZjAwISIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJngpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoeCwgMHhmZik7Ci0gIGdfZnJlZSAocyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3ViX3JlYWRlcikKLXsKLSAgY29uc3QgZ3VpbnQ4IG1lbWRhdGFbXSA9IHsKLSAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYKLSAgfTsKLSAgR3N0Qnl0ZVJlYWRlciByZWFkZXIgPSBHU1RfQllURV9SRUFERVJfSU5JVCAobWVtZGF0YSwgc2l6ZW9mIChtZW1kYXRhKSk7Ci0gIEdzdEJ5dGVSZWFkZXIgc3ViOwotICBjb25zdCBndWludDggKmRhdGEgPSBOVUxMLCAqc3ViX2RhdGEgPSBOVUxMOwotICBndWludDE2IHYgPSAwOwotCi0gIC8qIGluaXQgc3ViIHJlYWRlciAqLwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdWJfcmVhZGVyICgmcmVhZGVyLCAmc3ViLCAxNykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3ViX3JlYWRlciAoJnJlYWRlciwgJnN1YiwgMTYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZzdWIpLCAxNik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhICgmcmVhZGVyLCAxNiwgJmRhdGEpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGEgKCZzdWIsIDE2LCAmc3ViX2RhdGEpKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSwgc3ViX2RhdGEsIDE2KSA9PSAwKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDE2KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCAzKSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXIgKCZyZWFkZXIsICZzdWIsIDE0KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdWJfcmVhZGVyICgmcmVhZGVyLCAmc3ViLCAxMykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnN1YiksIDEzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGEgKCZyZWFkZXIsIDEzLCAmZGF0YSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSAoJnN1YiwgMTMsICZzdWJfZGF0YSkpOwotICBmYWlsX3VubGVzcyAobWVtY21wIChkYXRhLCBzdWJfZGF0YSwgMTMpID09IDApOwotICBmYWlsX3VubGVzcyAobWVtY21wIChtZW1kYXRhICsgMywgc3ViX2RhdGEsIDEzKSA9PSAwKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDEzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3N1Yl9yZWFkZXIgKCZyZWFkZXIsICZzdWIsIDMpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZzdWIpLCAzKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSAoJnN1YiwgMTAsICZzdWJfZGF0YSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKCZzdWIsICZ2KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHYsIDB4MDMwNCk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgmc3ViLCAmdikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnN1YiksIDEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoJnJlYWRlciwgJnYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodiwgMHgwMzA0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgmcmVhZGVyLCAmdikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2LCAweDA1MDYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDkpOwotCi0gIC8qIGdldCBzdWIgcmVhZGVyICovCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBtZW1kYXRhLCBzaXplb2YgKG1lbWRhdGEpKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVyICgmcmVhZGVyLCAmc3ViLCAxNykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVyICgmcmVhZGVyLCAmc3ViLCAxNikpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXIgKCZyZWFkZXIsICZzdWIsIDEpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlciAoJnJlYWRlciwgJnN1YiwgMCkpOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBtZW1kYXRhLCBzaXplb2YgKG1lbWRhdGEpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfc3ViX3JlYWRlciAoJnJlYWRlciwgJnN1YiwgMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKCZzdWIsICZ2KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHYsIDB4MDAwMSk7Ci0gIGZhaWxfaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgmc3ViLCAmdikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVyICgmcmVhZGVyLCAmc3ViLCAzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoJnN1YiwgJnYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodiwgMHgwMjAzKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKCZzdWIsICZ2KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkICgmc3ViKSwgMHgwNCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXIgKCZyZWFkZXIsICZzdWIsIDkpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgmc3ViLCAmdikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2LCAweDA1MDYpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKCZzdWIsICZ2KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHYsIDB4MDcwOCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoJnN1YiwgJnYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodiwgMHgwOTBhKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgmc3ViLCAmdikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2LCAweDBiMGMpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoJnN1YiwgJnYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OF91bmNoZWNrZWQgKCZzdWIpLCAweDBkKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVyICgmcmVhZGVyLCAmc3ViLCAzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXIgKCZyZWFkZXIsICZzdWIsIDIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlICgmc3ViLCAmdikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2LCAweDBlMGYpOwotICBmYWlsX2lmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoJnN1YiwgJnYpKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKCZyZWFkZXIsICZ2KSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF9ieXRlX3JlYWRlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RCeXRlUmVhZGVyIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5pdGlhbGl6YXRpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X3VpbnRfbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X3VpbnRfYmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2V0X2ludF9sZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nZXRfaW50X2JlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dldF9mbG9hdF9sZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nZXRfZmxvYXRfYmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcG9zaXRpb25fdHJhY2tpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2Nhbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJpbmdfZnVuY3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZHVwX3N0cmluZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdWJfcmVhZGVyKTsKLQotICByZXR1cm4gczsKLX0KLQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X2J5dGVfcmVhZGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXdyaXRlci1ub2lubGluZS5jIGIvdGVzdHMvY2hlY2svbGlicy9ieXRld3JpdGVyLW5vaW5saW5lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MWQ0YTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9ieXRld3JpdGVyLW5vaW5saW5lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0IGZvciBHc3RCeXRlV3JpdGVyIHdpdGhvdXQgdXNpbmcgaW5saW5pbmcKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNkZWZpbmUgR1NUX0JZVEVfV1JJVEVSX0RJU0FCTEVfSU5MSU5FUwotI2luY2x1ZGUgImJ5dGV3cml0ZXIuYyIKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvYnl0ZXdyaXRlci5jIGIvdGVzdHMvY2hlY2svbGlicy9ieXRld3JpdGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5OTk5YWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9ieXRld3JpdGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBHc3RCeXRlV3JpdGVyCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaD4KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5pdGlhbGl6YXRpb24pCi17Ci0gIEdzdEJ5dGVXcml0ZXIgd3JpdGVyLCAqd3JpdGVyMjsKLSAgc3RhdGljIGd1aW50OCBzZGF0YVtdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH07Ci0gIGd1aW50OCAqZGF0YSwgKnRtcDsKLQotICBnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX3NpemUgKCZ3cml0ZXIsIDI0LCBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmd3JpdGVyKSwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoJndyaXRlciksIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksIC0xKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKEdTVF9CWVRFX1JFQURFUgotICAgICAgICAgICgmd3JpdGVyKSksIDApOwotICBnc3RfYnl0ZV93cml0ZXJfcmVzZXQgKCZ3cml0ZXIpOwotCi0gIGRhdGEgPSBnX21lbWR1cCAoc2RhdGEsIHNpemVvZiAoc2RhdGEpKTsKLSAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhICgmd3JpdGVyLCBkYXRhLCBzaXplb2YgKHNkYXRhKSwgRkFMU0UpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoJndyaXRlciksIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemUgKCZ3cml0ZXIpLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKCZ3cml0ZXIpLAotICAgICAgc2l6ZW9mIChzZGF0YSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoR1NUX0JZVEVfUkVBREVSCi0gICAgICAgICAgKCZ3cml0ZXIpKSwgMCkKLSAgICAgIHRtcCA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKCZ3cml0ZXIpOwotICBmYWlsX2lmICh0bXAgPT0gZGF0YSk7Ci0gIGdfZnJlZSAodG1wKTsKLSAgZ19mcmVlIChkYXRhKTsKLSAgZGF0YSA9IHRtcCA9IE5VTEw7Ci0KLSAgZGF0YSA9IGdfbWVtZHVwIChzZGF0YSwgc2l6ZW9mIChzZGF0YSkpOwotICBnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX2RhdGEgKCZ3cml0ZXIsIGRhdGEsIHNpemVvZiAoc2RhdGEpLCBUUlVFKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKCZ3cml0ZXIpLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9zaXplICgmd3JpdGVyKSwgc2l6ZW9mIChzZGF0YSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksCi0gICAgICBzaXplb2YgKHNkYXRhKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChHU1RfQllURV9SRUFERVIKLSAgICAgICAgICAoJndyaXRlcikpLCBzaXplb2YgKHNkYXRhKSk7Ci0gIHRtcCA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKCZ3cml0ZXIpOwotICBmYWlsX3VubGVzcyAodG1wICE9IGRhdGEpOwotICBnX2ZyZWUgKHRtcCk7Ci0gIGdfZnJlZSAoZGF0YSk7Ci0gIGRhdGEgPSB0bXAgPSBOVUxMOwotCi0gIHdyaXRlcjIgPSBnc3RfYnl0ZV93cml0ZXJfbmV3X3dpdGhfc2l6ZSAoMjQsIEZBTFNFKTsKLSAgZGF0YSA9IGdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfZGF0YSAod3JpdGVyMik7Ci0gIGZhaWxfdW5sZXNzIChkYXRhICE9IE5VTEwpOwotICBnX2ZyZWUgKGRhdGEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3dyaXRlX2ZpeGVkKQotewotICBHc3RCeXRlV3JpdGVyIHdyaXRlcjsKLSAgZ3VpbnQ2NCBlbmRfZGF0YSA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMHhmZjM0NTY3ODkwYWJjZGVmKTsKLSAgZ3VpbnQ4ICpkYXRhOwotICBndWludDggYiA9IDA7Ci0gIGd1aW50NjQgbCA9IDA7Ci0KLSAgZW5kX2RhdGEgPSBHVUlOVDY0X1RPX0JFIChlbmRfZGF0YSk7Ci0KLSAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplICgmd3JpdGVyLCA4LCBUUlVFKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKCZ3cml0ZXIpLCA4KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OCAoJndyaXRlciwgMHgxMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmUgKCZ3cml0ZXIsIDB4MzQ1NikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGUgKCZ3cml0ZXIsIDB4OTA3OCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoJndyaXRlciksIDUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemUgKCZ3cml0ZXIpLCA1KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKCZ3cml0ZXIpLCA4IC0gNSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChHU1RfQllURV9SRUFERVIKLSAgICAgICAgICAoJndyaXRlcikpLCAwKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoR1NUX0JZVEVfUkVBREVSICgmd3JpdGVyKSwgJmIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlICgmd3JpdGVyLCAweGFiY2RlZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoJndyaXRlciksIDgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3NpemUgKCZ3cml0ZXIpLCA4KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKCZ3cml0ZXIpLCA4IC0gOCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChHU1RfQllURV9SRUFERVIKLSAgICAgICAgICAoJndyaXRlcikpLCAwKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OCAoJndyaXRlciwgMHgxMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKCZ3cml0ZXIsIDApKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZSAoR1NUX0JZVEVfUkVBREVSICgmd3JpdGVyKSwgJmwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAobCwgR19HVUlOVDY0X0NPTlNUQU5UICgweDEyMzQ1Njc4OTBhYmNkZWYpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKCZ3cml0ZXIsIDB4ZmYpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zICgmd3JpdGVyLCAwKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZSAoR1NUX0JZVEVfUkVBREVSICgmd3JpdGVyKSwgJmwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAobCwgR19HVUlOVDY0X0NPTlNUQU5UICgweGZmMzQ1Njc4OTBhYmNkZWYpKTsKLSAgZmFpbF9pZiAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmUgKCZ3cml0ZXIsCi0gICAgICAgICAgR19HVUlOVDY0X0NPTlNUQU5UICgweDEyMzQ1Njc4OTBhYmNkZWYpKSk7Ci0KLSAgZGF0YSA9IGdzdF9ieXRlX3dyaXRlcl9yZXNldF9hbmRfZ2V0X2RhdGEgKCZ3cml0ZXIpOwotICBmYWlsX3VubGVzcyAoZGF0YSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAoJmVuZF9kYXRhLCBkYXRhLCA4KSA9PSAwKTsKLSAgZ19mcmVlIChkYXRhKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93cml0ZV9ub25fZml4ZWQpCi17Ci0gIEdzdEJ5dGVXcml0ZXIgd3JpdGVyOwotICBndWludDY0IGVuZF9kYXRhID0gR19HVUlOVDY0X0NPTlNUQU5UICgweGZmMzQ1Njc4OTBhYmNkZWYpOwotICBndWludDggKmRhdGE7Ci0gIGd1aW50NjQgbCA9IDA7Ci0KLSAgZW5kX2RhdGEgPSBHVUlOVDY0X1RPX0JFIChlbmRfZGF0YSk7Ci0KLSAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplICgmd3JpdGVyLCA2LCBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgmd3JpdGVyKSwgLTEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgmd3JpdGVyLCAweDEyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZSAoJndyaXRlciwgMHgzNDU2KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoJndyaXRlciwgMHg5MDc4KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmd3JpdGVyKSwgNSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoJndyaXRlciksIDUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksIC0xKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKEdTVF9CWVRFX1JFQURFUgotICAgICAgICAgICgmd3JpdGVyKSksIDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfYmUgKCZ3cml0ZXIsIDB4YWJjZGVmKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmd3JpdGVyKSwgOCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfc2l6ZSAoJndyaXRlciksIDgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksIC0xKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKEdTVF9CWVRFX1JFQURFUgotICAgICAgICAgICgmd3JpdGVyKSksIDApOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKCZ3cml0ZXIsIDApKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZSAoR1NUX0JZVEVfUkVBREVSICgmd3JpdGVyKSwgJmwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAobCwgR19HVUlOVDY0X0NPTlNUQU5UICgweDEyMzQ1Njc4OTBhYmNkZWYpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKCZ3cml0ZXIsIDB4ZmYpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zICgmd3JpdGVyLCAwKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZSAoR1NUX0JZVEVfUkVBREVSICgmd3JpdGVyKSwgJmwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAobCwgR19HVUlOVDY0X0NPTlNUQU5UICgweGZmMzQ1Njc4OTBhYmNkZWYpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zICgmd3JpdGVyLCA4KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZSAoJndyaXRlciwKLSAgICAgICAgICBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4MTIzNDU2Nzg5MGFiY2RlZikpKTsKLQotICBkYXRhID0gZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YSAoJndyaXRlcik7Ci0gIGZhaWxfdW5sZXNzIChkYXRhICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAobWVtY21wICgmZW5kX2RhdGEsIGRhdGEsIDgpID09IDApOwotICBlbmRfZGF0YSA9IEdVSU5UNjRfVE9fQkUgKEdfR1VJTlQ2NF9DT05TVEFOVCAoMHgxMjM0NTY3ODkwYWJjZGVmKSk7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKCZlbmRfZGF0YSwgZGF0YSArIDgsIDgpID09IDApOwotICBnX2ZyZWUgKGRhdGEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zyb21fZGF0YSkKLXsKLSAgR3N0Qnl0ZVdyaXRlciB3cml0ZXI7Ci0gIGd1aW50OCBkYXRhW10gPSB7IDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsCi0gICAgMHg5MCwgMHhhYiwgMHhjZCwgMHhlZgotICB9OwotICBndWludDggKmRhdGEyOwotCi0gIGdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfZGF0YSAoJndyaXRlciwgZGF0YSwgc2l6ZW9mIChkYXRhKSwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ieXRlX3dyaXRlcl9nZXRfcmVtYWluaW5nICgmd3JpdGVyKSwgOCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgmd3JpdGVyLCAweGZmKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbMF0sIDB4ZmYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAoJndyaXRlciksIDcpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoJndyaXRlciksIDEpOwotICBmYWlsX2lmIChnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9iZSAoJndyaXRlciwKLSAgICAgICAgICBHX0dVSU5UNjRfQ09OU1RBTlQgKDB4MTIzNDU2Nzg5MGFiY2RlZikpKTsKLSAgZGF0YTIgPSBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICgmd3JpdGVyKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEyICE9IE5VTEwpOwotICBmYWlsX2lmIChkYXRhMiA9PSBkYXRhKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSwgZGF0YTIsIDgpID09IDApOwotICBnX2ZyZWUgKGRhdGEyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wdXRfZGF0YV9zdHJpbmdzKQotewotICBHc3RCeXRlV3JpdGVyIHdyaXRlcjsKLSAgZ3VpbnQ4IGRhdGFbXSA9IHsgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwKLSAgICAweDkwLCAweGFiLCAweGNkLCAweGVmCi0gIH07Ci0gIGd1aW50OCAqZGF0YTI7Ci0KLSAgZ3N0X2J5dGVfd3JpdGVyX2luaXQgKCZ3cml0ZXIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICgmd3JpdGVyLCBkYXRhLCA4KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZyAoJndyaXRlciwgInNvbWVyYW5kb210ZXN0c3RyaW5nIikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoJndyaXRlciksCi0gICAgICA4ICsgc2l6ZW9mICgic29tZXJhbmRvbXRlc3RzdHJpbmciKSk7Ci0KLSAgZGF0YTIgPSBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICgmd3JpdGVyKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAobWVtY21wIChkYXRhMiwgZGF0YSwgOCkgPT0gMCk7Ci0gIGdfZnJlZSAoZGF0YTIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpbGwpCi17Ci0gIEdzdEJ5dGVXcml0ZXIgd3JpdGVyOwotICBndWludDggZGF0YVtdID0geyAweDAsIDB4MCwgMHgwLCAweDAsIDB4NSwgMHg1IH07Ci0gIGd1aW50OCAqZGF0YTI7Ci0KLSAgZ3N0X2J5dGVfd3JpdGVyX2luaXQgKCZ3cml0ZXIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J5dGVfd3JpdGVyX2ZpbGwgKCZ3cml0ZXIsIDAsIDQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ieXRlX3dyaXRlcl9maWxsICgmd3JpdGVyLCA1LCAyKSk7Ci0KLSAgZGF0YTIgPSBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhICgmd3JpdGVyKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAobWVtY21wIChkYXRhMiwgZGF0YSwgNikgPT0gMCk7Ci0gIGdfZnJlZSAoZGF0YTIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgU3VpdGUgKgotZ3N0X2J5dGVfd3JpdGVyX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEJ5dGVXcml0ZXIiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbml0aWFsaXphdGlvbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF93cml0ZV9maXhlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF93cml0ZV9ub25fZml4ZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZnJvbV9kYXRhKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3B1dF9kYXRhX3N0cmluZ3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmlsbCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9ieXRlX3dyaXRlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2NvbGxlY3RwYWRzLmMgYi90ZXN0cy9jaGVjay9saWJzL2NvbGxlY3RwYWRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYTlkNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9jb2xsZWN0cGFkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTExMSArMCwwIEBACi0vKgotICogY29sbGVjdHBhZHMuYyAtIEdzdENvbGxlY3RQYWRzIHRlc3RzdWl0ZQotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaD4KLQotLyogZHVtbXkgY29sbGVjdHBhZHMgYmFzZWQgZWxlbWVudCAqLwotCi0jZGVmaW5lIEdTVF9UWVBFX0FHR1JFR0FUT1IgICAgICAgICAgICAoZ3N0X2FnZ3JlZ2F0b3JfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9BR0dSRUdBVE9SKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9BR0dSRUdBVE9SLCBHc3RBZ2dyZWdhdG9yKSkKLSNkZWZpbmUgR1NUX0FHR1JFR0FUT1JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfQUdHUkVHQVRPUiwgR3N0QWdncmVnYXRvckNsYXNzKSkKLSNkZWZpbmUgR1NUX0FHR1JFR0FUT1JfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfQUdHUkVHQVRPUiwgR3N0QWdncmVnYXRvckNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFnZ3JlZ2F0b3IgR3N0QWdncmVnYXRvcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RBZ2dyZWdhdG9yQ2xhc3MgR3N0QWdncmVnYXRvckNsYXNzOwotCi1zdHJ1Y3QgX0dzdEFnZ3JlZ2F0b3IKLXsKLSAgR3N0RWxlbWVudCBwYXJlbnQ7Ci0gIEdzdENvbGxlY3RQYWRzICpjb2xsZWN0OwotICBHc3RQYWQgKnNyY3BhZDsKLSAgR3N0UGFkICpzaW5rcGFkWzJdOwotICBnaW50IHBhZGNvdW50OwotICBnYm9vbGVhbiBmaXJzdDsKLX07Ci1zdHJ1Y3QgX0dzdEFnZ3JlZ2F0b3JDbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotc3RhdGljIEdUeXBlIGdzdF9hZ2dyZWdhdG9yX2dldF90eXBlICh2b2lkKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0QWdncmVnYXRvciwgZ3N0X2FnZ3JlZ2F0b3IsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2FnZ3JlZ2F0b3Jfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2FnZ3JlZ2F0b3Jfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmtfJXUiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hZ3JlZ2F0b3JfY29sbGVjdGVkIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0QWdncmVnYXRvciAqYWdncmVnYXRvciA9IEdTVF9BR0dSRUdBVE9SICh1c2VyX2RhdGEpOwotICBHc3RCdWZmZXIgKmluYnVmOwotICBHc3RDb2xsZWN0RGF0YSAqY29sbGVjdF9kYXRhID0gTlVMTDsKLSAgZ3VpbnQgb3V0c2l6ZSA9IDA7Ci0gIEdTTGlzdCAqd2FsazsKLQotICB3YWxrID0gcGFkcy0+ZGF0YTsKLSAgZm9yICh3YWxrID0gcGFkcy0+ZGF0YTsgd2Fsazsgd2FsayA9IHdhbGstPm5leHQpIHsKLSAgICBHc3RDb2xsZWN0RGF0YSAqdG1wID0gKEdzdENvbGxlY3REYXRhICopIHdhbGstPmRhdGE7Ci0gICAgaWYgKHRtcC0+YnVmZmVyKSB7Ci0gICAgICBjb2xsZWN0X2RhdGEgPSB0bXA7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvKiBjYW4gb25seSBoYXBwZW4gd2hlbiBubyBwYWRzIHRvIGNvbGxlY3Qgb3IgYWxsIEVPUyAqLwotICBpZiAoY29sbGVjdF9kYXRhID09IE5VTEwpCi0gICAgZ290byBlb3M7Ci0KLSAgb3V0c2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGNvbGxlY3RfZGF0YS0+YnVmZmVyKTsKLSAgaW5idWYgPSBnc3RfY29sbGVjdF9wYWRzX3Rha2VfYnVmZmVyIChwYWRzLCBjb2xsZWN0X2RhdGEsIG91dHNpemUpOwotICBpZiAoIWluYnVmKQotICAgIGdvdG8gZW9zOwotCi0gIGlmIChhZ2dyZWdhdG9yLT5maXJzdCkgewotICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGFnZ3JlZ2F0b3ItPnNyY3BhZCwKLSAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoYWdncmVnYXRvci0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0gICAgYWdncmVnYXRvci0+Zmlyc3QgPSBGQUxTRTsKLSAgfQotCi0gIC8qIGp1c3QgZm9yd2FyZCB0aGUgZmlyc3QgYnVmZmVyICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGFnZ3JlZ2F0b3IsICJmb3J3YXJkIGJ1ZmZlciAlcCIsIGluYnVmKTsKLSAgcmV0dXJuIGdzdF9wYWRfcHVzaCAoYWdncmVnYXRvci0+c3JjcGFkLCBpbmJ1Zik7Ci0gIC8qIEVSUk9SUyAqLwotZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYWdncmVnYXRvciwgIm5vIGRhdGEgYXZhaWxhYmxlLCBtdXN0IGJlIEVPUyIpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoYWdncmVnYXRvci0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotfQotCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9hZ2dyZWdhdG9yX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsCi0gICAgY29uc3QgZ2NoYXIgKiB1bnVzZWQsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RBZ2dyZWdhdG9yICphZ2dyZWdhdG9yID0gR1NUX0FHR1JFR0FUT1IgKGVsZW1lbnQpOwotICBnY2hhciAqbmFtZTsKLSAgR3N0UGFkICpuZXdwYWQ7Ci0gIGdpbnQgcGFkY291bnQ7Ci0KLSAgaWYgKHRlbXBsLT5kaXJlY3Rpb24gIT0gR1NUX1BBRF9TSU5LKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIGNyZWF0ZSBuZXcgcGFkICovCi0gIHBhZGNvdW50ID0gZ19hdG9taWNfaW50X2FkZCAoJmFnZ3JlZ2F0b3ItPnBhZGNvdW50LCAxKTsKLSAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNpbmtfJXUiLCBwYWRjb3VudCk7Ci0gIG5ld3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBuYW1lKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKGFnZ3JlZ2F0b3ItPmNvbGxlY3QsIG5ld3BhZCwKLSAgICAgIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCBOVUxMLCBUUlVFKTsKLQotICAvKiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHBhZCAqLwotICBpZiAoIWdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChhZ2dyZWdhdG9yKSwgbmV3cGFkKSkKLSAgICBnb3RvIGNvdWxkX25vdF9hZGQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYWdncmVnYXRvciwgImFkZGVkIG5ldyBwYWQgJXMiLCBHU1RfT0JKRUNUX05BTUUgKG5ld3BhZCkpOwotICByZXR1cm4gbmV3cGFkOwotCi0gIC8qIGVycm9ycyAqLwotY291bGRfbm90X2FkZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFnZ3JlZ2F0b3IsICJjb3VsZCBub3QgYWRkIHBhZCIpOwotICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoYWdncmVnYXRvci0+Y29sbGVjdCwgbmV3cGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChuZXdwYWQpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWdncmVnYXRvcl9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0QWdncmVnYXRvciAqYWdncmVnYXRvciA9IEdTVF9BR0dSRUdBVE9SIChlbGVtZW50KTsKLQotICBpZiAoYWdncmVnYXRvci0+Y29sbGVjdCkKLSAgICBnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKGFnZ3JlZ2F0b3ItPmNvbGxlY3QsIHBhZCk7Ci0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGVsZW1lbnQsIHBhZCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2FnZ3JlZ2F0b3JfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0QWdncmVnYXRvciAqYWdncmVnYXRvciA9IEdTVF9BR0dSRUdBVE9SIChlbGVtZW50KTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKGFnZ3JlZ2F0b3ItPmNvbGxlY3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIC8qIG5lZWQgdG8gdW5ibG9jayB0aGUgY29sbGVjdHBhZHMgYmVmb3JlIGNhbGxpbmcgdGhlCi0gICAgICAgKiBwYXJlbnQgY2hhbmdlX3N0YXRlIHNvIHRoYXQgc3RyZWFtaW5nIGNhbiBmaW5pc2ggKi8KLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RvcCAoYWdncmVnYXRvci0+Y29sbGVjdCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPQotICAgICAgR1NUX0VMRU1FTlRfQ0xBU1MgKGdzdF9hZ2dyZWdhdG9yX3BhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwKLSAgICAgIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWdncmVnYXRvcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RBZ2dyZWdhdG9yICphZ2dyZWdhdG9yID0gR1NUX0FHR1JFR0FUT1IgKG9iamVjdCk7Ci0KLSAgaWYgKGFnZ3JlZ2F0b3ItPmNvbGxlY3QpIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChhZ2dyZWdhdG9yLT5jb2xsZWN0KTsKLSAgICBhZ2dyZWdhdG9yLT5jb2xsZWN0ID0gTlVMTDsKLSAgfQotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfYWdncmVnYXRvcl9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FnZ3JlZ2F0b3JfY2xhc3NfaW5pdCAoR3N0QWdncmVnYXRvckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9hZ2dyZWdhdG9yX2Rpc3Bvc2U7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2FnZ3JlZ2F0b3Jfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2FnZ3JlZ2F0b3Jfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJBZ2dyZWdhdG9yIiwKLSAgICAgICJUZXN0aW5nIiwgIkNvbWJpbmUgTiBidWZmZXJzIiwgIlN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Iik7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWdncmVnYXRvcl9yZXF1ZXN0X25ld19wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FnZ3JlZ2F0b3JfcmVsZWFzZV9wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hZ2dyZWdhdG9yX2NoYW5nZV9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWdncmVnYXRvcl9pbml0IChHc3RBZ2dyZWdhdG9yICogYWdyZWdhdG9yKQotewotICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGxhdGU7Ci0KLSAgdGVtcGxhdGUgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZnc3RfYWdncmVnYXRvcl9zcmNfdGVtcGxhdGUpOwotICBhZ3JlZ2F0b3ItPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsYXRlLCAic3JjIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlbXBsYXRlKTsKLQotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChhZ3JlZ2F0b3ItPnNyY3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChhZ3JlZ2F0b3IpLCBhZ3JlZ2F0b3ItPnNyY3BhZCk7Ci0KLSAgLyoga2VlcCB0cmFjayBvZiB0aGUgc2lua3BhZHMgcmVxdWVzdGVkICovCi0gIGFncmVnYXRvci0+Y29sbGVjdCA9IGdzdF9jb2xsZWN0X3BhZHNfbmV3ICgpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbiAoYWdyZWdhdG9yLT5jb2xsZWN0LAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hZ3JlZ2F0b3JfY29sbGVjdGVkKSwgYWdyZWdhdG9yKTsKLQotICBhZ3JlZ2F0b3ItPmZpcnN0ID0gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYWdyZWdhdG9yX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYWdncmVnYXRvciIsIEdTVF9SQU5LX05PTkUsCi0gICAgICBHU1RfVFlQRV9BR0dSRUdBVE9SKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYWdyZWdhdG9yX3BsdWdpbl9yZWdpc3RlciAodm9pZCkKLXsKLSAgcmV0dXJuIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgICAgImFnZ3JlZ2F0b3IiLAotICAgICAgIkNvbWJpbmUgYnVmZmVycyIsCi0gICAgICBnc3RfYWdyZWdhdG9yX3BsdWdpbl9pbml0LAotICAgICAgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIFBBQ0tBR0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7Ci19Ci0KLQotI2RlZmluZSBmYWlsX3VubGVzc19jb2xsZWN0ZWQoZXhwZWN0ZWQpICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19tdXRleF9sb2NrICgmbG9jayk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAoZXhwZWN0ZWQgPT0gVFJVRSAmJiBjb2xsZWN0ZWQgPT0gRkFMU0UpICBcCi0gICAgZ19jb25kX3dhaXQgKCZjb25kLCAmbG9jayk7ICAgICAgICAgICAgICAgICAgIFwKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoY29sbGVjdGVkLCBleHBlY3RlZCk7ICAgXAotICBnX211dGV4X3VubG9jayAoJmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQ7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNoYXIgZm9vOwotfSBCYWRDb2xsZWN0RGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0Q29sbGVjdERhdGEgZGF0YTsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdEZsb3dSZXR1cm4gZXhwZWN0ZWRfcmVzdWx0OwotfSBUZXN0RGF0YTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RDb2xsZWN0UGFkcyAqY29sbGVjdDsKLXN0YXRpYyBnYm9vbGVhbiBjb2xsZWN0ZWQ7Ci1zdGF0aWMgR3N0UGFkICphZ2dfc3JjcGFkLCAqc3JjcGFkMSwgKnNyY3BhZDI7Ci1zdGF0aWMgR3N0UGFkICpzaW5rcGFkMSwgKnNpbmtwYWQyOwotc3RhdGljIFRlc3REYXRhICpkYXRhMSwgKmRhdGEyOwotc3RhdGljIEdzdEJ1ZmZlciAqb3V0YnVmMSwgKm91dGJ1ZjI7Ci1zdGF0aWMgR3N0RWxlbWVudCAqYWdnOwotZ2Jvb2xlYW4gZmFpbF9zZWVrOwotZ2ludCBmbHVzaF9zdGFydF9ldmVudHMsIGZsdXNoX3N0b3BfZXZlbnRzOwotCi1zdGF0aWMgR011dGV4IGxvY2s7Ci1zdGF0aWMgR0NvbmQgY29uZDsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWNvbGxlY3RlZF9jYiAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIG91dGJ1ZjEgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAocGFkcywgKEdzdENvbGxlY3REYXRhICopIGRhdGExKTsKLSAgb3V0YnVmMiA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChwYWRzLCAoR3N0Q29sbGVjdERhdGEgKikgZGF0YTIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmxvY2spOwotICBjb2xsZWN0ZWQgPSBUUlVFOwotICBnX2NvbmRfc2lnbmFsICgmY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbG9jayk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotaGFuZGxlX2J1ZmZlcl9jYiAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGRhdGEsCi0gICAgR3N0QnVmZmVyICogYnVmLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdTVF9ERUJVRyAoImNvbGxlY3RlZCBidWZmZXJzIHZpYSBjYWxsYmFjayIpOwotCi0gIG91dGJ1ZjEgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAocGFkcywgKEdzdENvbGxlY3REYXRhICopIGRhdGExKTsKLSAgb3V0YnVmMiA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChwYWRzLCAoR3N0Q29sbGVjdERhdGEgKikgZGF0YTIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmxvY2spOwotICBjb2xsZWN0ZWQgPSBUUlVFOwotICBnX2NvbmRfc2lnbmFsICgmY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmbG9jayk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXB1c2hfYnVmZmVyIChncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEZsb3dSZXR1cm4gZmxvdzsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgVGVzdERhdGEgKnRlc3RfZGF0YSA9IChUZXN0RGF0YSAqKSB1c2VyX2RhdGE7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRlc3RfZGF0YS0+cGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJmb28veC1iYXIiKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZXN0X2RhdGEtPnBhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0ZXN0X2RhdGEtPnBhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGZsb3cgPSBnc3RfcGFkX3B1c2ggKHRlc3RfZGF0YS0+cGFkLCB0ZXN0X2RhdGEtPmJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChmbG93ID09IHRlc3RfZGF0YS0+ZXhwZWN0ZWRfcmVzdWx0LCAiZ290IGZsb3cgJXMgaW5zdGVhZCBvZiBPSyIsCi0gICAgICBnc3RfZmxvd19nZXRfbmFtZSAoZmxvdykpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXB1c2hfZXZlbnQgKGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgVGVzdERhdGEgKnRlc3RfZGF0YSA9IChUZXN0RGF0YSAqKSB1c2VyX2RhdGE7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAodGVzdF9kYXRhLT5wYWQsIHRlc3RfZGF0YS0+ZXZlbnQpID09IFRSVUUpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotc2V0dXBfZGVmYXVsdCAodm9pZCkKLXsKLSAgY29sbGVjdCA9IGdzdF9jb2xsZWN0X3BhZHNfbmV3ICgpOwotCi0gIHNyY3BhZDEgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjMSIpOwotICBzcmNwYWQyID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmN0ZW1wbGF0ZSwgInNyYzIiKTsKLSAgc2lua3BhZDEgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmt0ZW1wbGF0ZSwgInNpbmsxIik7Ci0gIHNpbmtwYWQyID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsICJzaW5rMiIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQxLCBzaW5rcGFkMSkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkMiwgc2lua3BhZDIpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkMSwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZDIsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZDEsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZDIsIFRSVUUpOwotCi0gIGRhdGExID0gTlVMTDsKLSAgZGF0YTIgPSBOVUxMOwotICBvdXRidWYxID0gTlVMTDsKLSAgb3V0YnVmMiA9IE5VTEw7Ci0gIGNvbGxlY3RlZCA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotc2V0dXAgKHZvaWQpCi17Ci0gIHNldHVwX2RlZmF1bHQgKCk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uIChjb2xsZWN0LCBjb2xsZWN0ZWRfY2IsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0dXBfYnVmZmVyX2NiICh2b2lkKQotewotICBzZXR1cF9kZWZhdWx0ICgpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9idWZmZXJfZnVuY3Rpb24gKGNvbGxlY3QsIGhhbmRsZV9idWZmZXJfY2IsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotdGVhcmRvd24gKHZvaWQpCi17Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNvbGxlY3QpOwotICBzcmNwYWQxID0gc3JjcGFkMiA9IE5VTEw7Ci0gIHNpbmtwYWQxID0gc2lua3BhZDIgPSBOVUxMOwotICBjb2xsZWN0ID0gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFkX2FkZF9yZW1vdmUpCi17Ci0gIEFTU0VSVF9DUklUSUNBTCAoZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChjb2xsZWN0LCBzaW5rcGFkMSwKLSAgICAgICAgICBzaXplb2YgKEJhZENvbGxlY3REYXRhKSwgTlVMTCwgVFJVRSkpOwotCi0gIGRhdGExID0gKFRlc3REYXRhICopIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAoY29sbGVjdCwKLSAgICAgIHNpbmtwYWQxLCBzaXplb2YgKFRlc3REYXRhKSwgTlVMTCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChkYXRhMSAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkIChjb2xsZWN0LCBzaW5rcGFkMikgPT0gRkFMU0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NvbGxlY3RfcGFkc19yZW1vdmVfcGFkIChjb2xsZWN0LCBzaW5rcGFkMSkgPT0gVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY29sbGVjdCkKLXsKLSAgR3N0QnVmZmVyICpidWYxLCAqYnVmMjsKLSAgR1RocmVhZCAqdGhyZWFkMSwgKnRocmVhZDI7Ci0KLSAgZGF0YTEgPSAoVGVzdERhdGEgKikgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChjb2xsZWN0LAotICAgICAgc2lua3BhZDEsIHNpemVvZiAoVGVzdERhdGEpLCBOVUxMLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGRhdGExICE9IE5VTEwpOwotCi0gIGRhdGEyID0gKFRlc3REYXRhICopIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAoY29sbGVjdCwKLSAgICAgIHNpbmtwYWQyLCBzaXplb2YgKFRlc3REYXRhKSwgTlVMTCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChkYXRhMiAhPSBOVUxMKTsKLQotICBidWYxID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGJ1ZjIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLQotICAvKiBzdGFydCBjb2xsZWN0IHBhZHMgKi8KLSAgZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAoY29sbGVjdCk7Ci0KLSAgLyogcHVzaCBidWZmZXJzIG9uIHRoZSBwYWRzICovCi0gIGRhdGExLT5wYWQgPSBzcmNwYWQxOwotICBkYXRhMS0+YnVmZmVyID0gYnVmMTsKLSAgdGhyZWFkMSA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCBwdXNoX2J1ZmZlciwgZGF0YTEsIE5VTEwpOwotICAvKiBoZXJlIHRocmVhZDEgaXMgYmxvY2tlZCBhbmQgc3JjcGFkMSBoYXMgYSBxdWV1ZWQgYnVmZmVyICovCi0gIGZhaWxfdW5sZXNzX2NvbGxlY3RlZCAoRkFMU0UpOwotCi0gIGRhdGEyLT5wYWQgPSBzcmNwYWQyOwotICBkYXRhMi0+YnVmZmVyID0gYnVmMjsKLSAgdGhyZWFkMiA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCBwdXNoX2J1ZmZlciwgZGF0YTIsIE5VTEwpOwotCi0gIC8qIG5vdyBib3RoIHBhZHMgaGF2ZSBhIGJ1ZmZlciAqLwotICBmYWlsX3VubGVzc19jb2xsZWN0ZWQgKFRSVUUpOwotCi0gIGZhaWxfdW5sZXNzIChvdXRidWYxID09IGJ1ZjEpOwotICBmYWlsX3VubGVzcyAob3V0YnVmMiA9PSBidWYyKTsKLQotICAvKiB0aGVzZSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBhcyBhdCB0aGlzIHBvaW50IHRoZSB0aHJlYWRzIGhhdmUgYmVlbgotICAgKiB1bmxvY2tlZCBhbmQgYXJlIGZpbmlzaGVkICovCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDEpOwotICBnX3RocmVhZF9qb2luICh0aHJlYWQyKTsKLQotICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKGNvbGxlY3QpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjEpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NvbGxlY3RfZW9zKQotewotICBHc3RCdWZmZXIgKmJ1ZjE7Ci0gIEdUaHJlYWQgKnRocmVhZDEsICp0aHJlYWQyOwotCi0gIGRhdGExID0gKFRlc3REYXRhICopIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAoY29sbGVjdCwKLSAgICAgIHNpbmtwYWQxLCBzaXplb2YgKFRlc3REYXRhKSwgTlVMTCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChkYXRhMSAhPSBOVUxMKTsKLQotICBkYXRhMiA9IChUZXN0RGF0YSAqKSBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKGNvbGxlY3QsCi0gICAgICBzaW5rcGFkMiwgc2l6ZW9mIChUZXN0RGF0YSksIE5VTEwsIFRSVUUpOwotICBmYWlsX3VubGVzcyAoZGF0YTIgIT0gTlVMTCk7Ci0KLSAgYnVmMSA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gIC8qIHN0YXJ0IGNvbGxlY3QgcGFkcyAqLwotICBnc3RfY29sbGVjdF9wYWRzX3N0YXJ0IChjb2xsZWN0KTsKLQotICAvKiBwdXNoIGEgYnVmZmVyIG9uIHNyY3BhZDEgYW5kIEVPUyBvbiBzcmNwYWQyICovCi0gIGRhdGExLT5wYWQgPSBzcmNwYWQxOwotICBkYXRhMS0+YnVmZmVyID0gYnVmMTsKLSAgdGhyZWFkMSA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCBwdXNoX2J1ZmZlciwgZGF0YTEsIE5VTEwpOwotICAvKiBoZXJlIHRocmVhZDEgaXMgYmxvY2tlZCBhbmQgc3JjcGFkMSBoYXMgYSBxdWV1ZWQgYnVmZmVyICovCi0gIGZhaWxfdW5sZXNzX2NvbGxlY3RlZCAoRkFMU0UpOwotCi0gIGRhdGEyLT5wYWQgPSBzcmNwYWQyOwotICBkYXRhMi0+ZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgdGhyZWFkMiA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCBwdXNoX2V2ZW50LCBkYXRhMiwgTlVMTCk7Ci0gIC8qIG5vdyBzaW5rcGFkMSBoYXMgYSBidWZmZXIgYW5kIHNpbmtwYWQyIGhhcyBFT1MgKi8KLSAgZmFpbF91bmxlc3NfY29sbGVjdGVkIChUUlVFKTsKLQotICBmYWlsX3VubGVzcyAob3V0YnVmMSA9PSBidWYxKTsKLSAgLyogc2lua3BhZDIgaGFzIEVPUyBzbyBhIE5VTEwgYnVmZmVyIGlzIHJldHVybmVkICovCi0gIGZhaWxfdW5sZXNzIChvdXRidWYyID09IE5VTEwpOwotCi0gIC8qIHRoZXNlIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IGFzIHdoZW4gdGhlIGRhdGEgaXMgcG9wcGVkIHRoZSB0aHJlYWRzIGFyZQotICAgKiB1bmxvY2tlZCBhbmQgd2lsbCB0ZXJtaW5hdGUgKi8KLSAgZ190aHJlYWRfam9pbiAodGhyZWFkMSk7Ci0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDIpOwotCi0gIGdzdF9jb2xsZWN0X3BhZHNfc3RvcCAoY29sbGVjdCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY29sbGVjdF90d2ljZSkKLXsKLSAgR3N0QnVmZmVyICpidWYxLCAqYnVmMjsKLSAgR1RocmVhZCAqdGhyZWFkMSwgKnRocmVhZDI7Ci0KLSAgZGF0YTEgPSAoVGVzdERhdGEgKikgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChjb2xsZWN0LAotICAgICAgc2lua3BhZDEsIHNpemVvZiAoVGVzdERhdGEpLCBOVUxMLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGRhdGExICE9IE5VTEwpOwotCi0gIGRhdGEyID0gKFRlc3REYXRhICopIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAoY29sbGVjdCwKLSAgICAgIHNpbmtwYWQyLCBzaXplb2YgKFRlc3REYXRhKSwgTlVMTCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChkYXRhMiAhPSBOVUxMKTsKLQotICBHU1RfSU5GTyAoInJvdW5kIDEiKTsKLQotICBidWYxID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgLyogc3RhcnQgY29sbGVjdCBwYWRzICovCi0gIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKGNvbGxlY3QpOwotCi0gIC8qIHF1ZXVlIGEgYnVmZmVyICovCi0gIGRhdGExLT5wYWQgPSBzcmNwYWQxOwotICBkYXRhMS0+YnVmZmVyID0gYnVmMTsKLSAgdGhyZWFkMSA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCBwdXNoX2J1ZmZlciwgZGF0YTEsIE5VTEwpOwotICAvKiBoZXJlIHRocmVhZDEgaXMgYmxvY2tlZCBhbmQgc3JjcGFkMSBoYXMgYSBxdWV1ZWQgYnVmZmVyICovCi0gIGZhaWxfdW5sZXNzX2NvbGxlY3RlZCAoRkFMU0UpOwotCi0gIC8qIHB1c2ggRU9TIG9uIHRoZSBvdGhlciBwYWQgKi8KLSAgZGF0YTItPnBhZCA9IHNyY3BhZDI7Ci0gIGRhdGEyLT5ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOwotICB0aHJlYWQyID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHB1c2hfZXZlbnQsIGRhdGEyLCBOVUxMKTsKLQotICAvKiBvbmUgb2YgdGhlIHBhZHMgaGFzIGEgYnVmZmVyLCB0aGUgb3RoZXIgaGFzIEVPUyAqLwotICBmYWlsX3VubGVzc19jb2xsZWN0ZWQgKFRSVUUpOwotCi0gIGZhaWxfdW5sZXNzIChvdXRidWYxID09IGJ1ZjEpOwotICAvKiB0aGVyZSdzIG5vdGhpbmcgdG8gcG9wIGZyb20gdGhlIG9uZSB3aGljaCByZWNlaXZlZCBFT1MgKi8KLSAgZmFpbF91bmxlc3MgKG91dGJ1ZjIgPT0gTlVMTCk7Ci0KLSAgLyogdGhlc2Ugd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgYXMgYXQgdGhpcyBwb2ludCB0aGUgdGhyZWFkcyBoYXZlIGJlZW4KLSAgICogdW5sb2NrZWQgYW5kIGFyZSBmaW5pc2hlZCAqLwotICBnX3RocmVhZF9qb2luICh0aHJlYWQxKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkMik7Ci0KLSAgZ3N0X2NvbGxlY3RfcGFkc19zdG9wIChjb2xsZWN0KTsKLSAgY29sbGVjdGVkID0gRkFMU0U7Ci0KLSAgR1NUX0lORk8gKCJyb3VuZCAyIik7Ci0KLSAgYnVmMiA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gIC8qIGNsZWFyIEVPUyBmcm9tIHBhZHMgKi8KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQxLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQyLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKLQotICAvKiBzdGFydCBjb2xsZWN0IHBhZHMgKi8KLSAgZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAoY29sbGVjdCk7Ci0KLSAgLyogcHVzaCBidWZmZXJzIG9uIHRoZSBwYWRzICovCi0gIGRhdGExLT5wYWQgPSBzcmNwYWQxOwotICBkYXRhMS0+YnVmZmVyID0gYnVmMTsKLSAgdGhyZWFkMSA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCBwdXNoX2J1ZmZlciwgZGF0YTEsIE5VTEwpOwotICAvKiBoZXJlIHRocmVhZDEgaXMgYmxvY2tlZCBhbmQgc3JjcGFkMSBoYXMgYSBxdWV1ZWQgYnVmZmVyICovCi0gIGZhaWxfdW5sZXNzX2NvbGxlY3RlZCAoRkFMU0UpOwotCi0gIGRhdGEyLT5wYWQgPSBzcmNwYWQyOwotICBkYXRhMi0+YnVmZmVyID0gYnVmMjsKLSAgdGhyZWFkMiA9IGdfdGhyZWFkX3RyeV9uZXcgKCJnc3QtY2hlY2siLCBwdXNoX2J1ZmZlciwgZGF0YTIsIE5VTEwpOwotCi0gIC8qIG5vdyBib3RoIHBhZHMgaGF2ZSBhIGJ1ZmZlciAqLwotICBmYWlsX3VubGVzc19jb2xsZWN0ZWQgKFRSVUUpOwotCi0gIC8qIHRoZXNlIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IGFzIGF0IHRoaXMgcG9pbnQgdGhlIHRocmVhZHMgaGF2ZSBiZWVuCi0gICAqIHVubG9ja2VkIGFuZCBhcmUgZmluaXNoZWQgKi8KLSAgZ190aHJlYWRfam9pbiAodGhyZWFkMSk7Ci0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDIpOwotCi0gIGdzdF9jb2xsZWN0X3BhZHNfc3RvcCAoY29sbGVjdCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjIpOwotCi19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0vKiBUZXN0IHRoZSBkZWZhdWx0IGNvbGxlY3RlZCBidWZmZXIgZnVuYyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY29sbGVjdF9kZWZhdWx0KQotewotICBHc3RCdWZmZXIgKmJ1ZjEsICpidWYyOwotICBHVGhyZWFkICp0aHJlYWQxLCAqdGhyZWFkMjsKLQotICBkYXRhMSA9IChUZXN0RGF0YSAqKSBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKGNvbGxlY3QsCi0gICAgICBzaW5rcGFkMSwgc2l6ZW9mIChUZXN0RGF0YSksIE5VTEwsIFRSVUUpOwotICBmYWlsX3VubGVzcyAoZGF0YTEgIT0gTlVMTCk7Ci0KLSAgZGF0YTIgPSAoVGVzdERhdGEgKikgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChjb2xsZWN0LAotICAgICAgc2lua3BhZDIsIHNpemVvZiAoVGVzdERhdGEpLCBOVUxMLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEyICE9IE5VTEwpOwotCi0gIGJ1ZjEgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZjEpID0gMDsKLSAgYnVmMiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmMikgPSBHU1RfU0VDT05EOwotCi0gIC8qIHN0YXJ0IGNvbGxlY3QgcGFkcyAqLwotICBnc3RfY29sbGVjdF9wYWRzX3N0YXJ0IChjb2xsZWN0KTsKLQotICAvKiBwdXNoIGJ1ZmZlcnMgb24gdGhlIHBhZHMgKi8KLSAgZGF0YTEtPnBhZCA9IHNyY3BhZDE7Ci0gIGRhdGExLT5idWZmZXIgPSBidWYxOwotICB0aHJlYWQxID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHB1c2hfYnVmZmVyLCBkYXRhMSwgTlVMTCk7Ci0gIC8qIGhlcmUgdGhyZWFkMSBpcyBibG9ja2VkIGFuZCBzcmNwYWQxIGhhcyBhIHF1ZXVlZCBidWZmZXIgKi8KLSAgZmFpbF91bmxlc3NfY29sbGVjdGVkIChGQUxTRSk7Ci0KLSAgZGF0YTItPnBhZCA9IHNyY3BhZDI7Ci0gIGRhdGEyLT5idWZmZXIgPSBidWYyOwotICB0aHJlYWQyID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHB1c2hfYnVmZmVyLCBkYXRhMiwgTlVMTCk7Ci0KLSAgLyogbm93IGJvdGggcGFkcyBoYXZlIGEgYnVmZmVyICovCi0gIGZhaWxfdW5sZXNzX2NvbGxlY3RlZCAoVFJVRSk7Ci0KLSAgLyogVGhlIGRlZmF1bHQgY2FsbGJhY2sgc2hvdWxkIGhhdmUgcG9wcGVkIHRoZSBidWZmZXIgd2l0aCBsb3dlciB0aW1lc3RhbXAsCi0gICAqIGFuZCB0aGlzIHNob3VsZCB0aGVyZWZvcmUgYmUgTlVMTDogKi8KLSAgZmFpbF91bmxlc3MgKG91dGJ1ZjEgPT0gTlVMTCk7Ci0gIC8qIFdoaWxlIHRoaXMgb25lIHNob3VsZCBzdGlsbCBiZSBwZW5kaW5nOiAqLwotICBmYWlsX3VubGVzcyAob3V0YnVmMiA9PSBidWYyKTsKLQotICAvKiB0aGVzZSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBhcyBhdCB0aGlzIHBvaW50IHRoZSB0aHJlYWRzIGhhdmUgYmVlbgotICAgKiB1bmxvY2tlZCBhbmQgYXJlIGZpbmlzaGVkICovCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDEpOwotICBnX3RocmVhZF9qb2luICh0aHJlYWQyKTsKLQotICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKGNvbGxlY3QpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjEpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLSNkZWZpbmUgTlVNX0JVRkZFUlMgMwotc3RhdGljIHZvaWQKLWhhbmRvZmYgKEdzdEVsZW1lbnQgKiBmYWtlc2luaywgR3N0QnVmZmVyICogYnVmLCBHc3RQYWQgKiBwYWQsIGd1aW50ICogY291bnQpCi17Ci0gICpjb3VudCA9ICpjb3VudCArIDE7Ci19Ci0KLS8qIFRlc3QgYSBsaW5lYXIgcGlwZWxpbmUgdXNpbmcgYWdncmVnYXRvciAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGluZWFyX3BpcGVsaW5lKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKmFnZywgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIGdpbnQgY291bnQgPSAwOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiZmFrZXNyYyIpOwotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgTlVNX0JVRkZFUlMsICJzaXpldHlwZSIsIDIsICJzaXplbWF4IiwgNCwKLSAgICAgIE5VTEwpOwotICBhZ2cgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImFnZ3JlZ2F0b3IiKTsKLSAgc2luayA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiZmFrZXNpbmsiKTsKLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAic2lnbmFsLWhhbmRvZmZzIiwgVFJVRSwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHNpbmssICJoYW5kb2ZmIiwgKEdDYWxsYmFjaykgaGFuZG9mZiwgJmNvdW50KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBhZ2cpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNpbmspKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgYWdnKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChhZ2csIHNpbmspKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIGZhaWxfaWYgKGJ1cyA9PSBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBmYWlsX2lmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VPUyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGNvdW50LCBOVU1fQlVGRkVSUyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBhIGxpbmVhciBwaXBlbGluZSB1c2luZyBhZ2dyZWdhdG9yICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9icmFuY2hlZF9waXBlbGluZSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICp0ZWUsICpxdWV1ZVsyXSwgKmFnZywgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIGdpbnQgY291bnQgPSAwOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiZmFrZXNyYyIpOwotICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgTlVNX0JVRkZFUlMsICJzaXpldHlwZSIsIDIsICJzaXplbWF4IiwgNCwKLSAgICAgIE5VTEwpOwotICB0ZWUgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInRlZSIpOwotICBxdWV1ZVswXSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgicXVldWUiKTsKLSAgZ3N0X29iamVjdF9zZXRfbmFtZSAoR1NUX09CSkVDVCAocXVldWVbMF0pLCAicXVldWUwIik7Ci0gIHF1ZXVlWzFdID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJxdWV1ZSIpOwotICBnc3Rfb2JqZWN0X3NldF9uYW1lIChHU1RfT0JKRUNUIChxdWV1ZVsxXSksICJxdWV1ZTEiKTsKLSAgYWdnID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJhZ2dyZWdhdG9yIik7Ci0gIHNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImZha2VzaW5rIik7Ci0gIGdfb2JqZWN0X3NldCAoc2luaywgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzaW5rLCAiaGFuZG9mZiIsIChHQ2FsbGJhY2spIGhhbmRvZmYsICZjb3VudCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgdGVlKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBxdWV1ZVswXSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgcXVldWVbMV0pKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGFnZykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luaykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCB0ZWUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHRlZSwgcXVldWVbMF0pKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHRlZSwgcXVldWVbMV0pKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHF1ZXVlWzBdLCBhZ2cpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHF1ZXVlWzFdLCBhZ2cpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKGFnZywgc2luaykpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF9pZiAoYnVzID09IE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLCAtMSk7Ci0gIGZhaWxfaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgLyogd2UgaGF2ZSB0d28gYnJhbmNoZXMsIGJ1dCB3ZSBzdGlsbCBvbmx5IGZvcndhcmQgYnVmZmVycyBmcm9tIG9uZSBicmFuY2ggKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoY291bnQsIE5VTV9CVUZGRVJTICogMik7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1kb3duc3RyZWFtX3Byb2JlX2NiIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gpIHsKLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVCAoaW5mbykpID09Ci0gICAgICAgIEdTVF9FVkVOVF9GTFVTSF9TVEFSVCkKLSAgICAgIGdfYXRvbWljX2ludF9pbmMgKCZmbHVzaF9zdGFydF9ldmVudHMpOwotICAgIGVsc2UgaWYgKEdTVF9FVkVOVF9UWVBFIChHU1RfUEFEX1BST0JFX0lORk9fRVZFTlQgKGluZm8pKSA9PQotICAgICAgICBHU1RfRVZFTlRfRkxVU0hfU1RPUCkKLSAgICAgIGdfYXRvbWljX2ludF9pbmMgKCZmbHVzaF9zdG9wX2V2ZW50cyk7Ci0gIH0gZWxzZSBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0RPV05TVFJFQU0pIHsKLSAgICBnX211dGV4X2xvY2sgKCZsb2NrKTsKLSAgICBjb2xsZWN0ZWQgPSBUUlVFOwotICAgIGdfY29uZF9zaWduYWwgKCZjb25kKTsKLSAgICBnX211dGV4X3VubG9jayAoJmxvY2spOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfRFJPUDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VFSykgewotICAgIGlmIChnX2F0b21pY19pbnRfY29tcGFyZV9hbmRfZXhjaGFuZ2UgKCZmYWlsX3NlZWssIFRSVUUsIEZBTFNFKSA9PSBUUlVFKSB7Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1hZ2dfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgcmV0dXJuIGdzdF9jb2xsZWN0X3BhZHNfc3JjX2V2ZW50X2RlZmF1bHQgKEdTVF9BR0dSRUdBVE9SIChwYXJlbnQpLT5jb2xsZWN0LAotICAgICAgcGFkLCBldmVudCk7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotc2V0dXBfc3JjX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0bXBsLCBjb25zdCBjaGFyICpuYW1lKQotewotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgc3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKHRtcGwsICJzcmMiKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoZWxlbWVudCwgbmFtZSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LLAotICAgICAgIkNvdWxkIG5vdCBsaW5rIHNvdXJjZSBhbmQgJXMgc2luayBwYWRzIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc3JjcGFkLCBzcmNfZXZlbnQpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIHJldHVybiBzcmNwYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mbHVzaF9zZXR1cCAodm9pZCkKLXsKLSAgYWdnID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJhZ2dyZWdhdG9yIik7Ci0gIGFnZ19zcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYWdnLCAic3JjIik7Ci0gIHNyY3BhZDEgPSBzZXR1cF9zcmNfcGFkIChhZ2csICZzcmN0ZW1wbGF0ZSwgInNpbmtfMCIpOwotICBzcmNwYWQyID0gc2V0dXBfc3JjX3BhZCAoYWdnLCAmc3JjdGVtcGxhdGUsICJzaW5rXzEiKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKGFnZ19zcmNwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNIHwKLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0RPV05TVFJFQU0gfAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNILCBkb3duc3RyZWFtX3Byb2JlX2NiLCBOVUxMLCBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGFnZ19zcmNwYWQsIGFnZ19zcmNfZXZlbnQpOwotICBkYXRhMSA9IGdfbmV3MCAoVGVzdERhdGEsIDEpOwotICBkYXRhMiA9IGdfbmV3MCAoVGVzdERhdGEsIDEpOwotICBnX2F0b21pY19pbnRfc2V0ICgmZmx1c2hfc3RhcnRfZXZlbnRzLCAwKTsKLSAgZ19hdG9taWNfaW50X3NldCAoJmZsdXNoX3N0b3BfZXZlbnRzLCAwKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhZ2csIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgb3V0YnVmMSA9IE5VTEw7Ci0gIG91dGJ1ZjIgPSBOVUxMOwotICBjb2xsZWN0ZWQgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWZsdXNoX3RlYXJkb3duICh2b2lkKQotewotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGFnZywgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChhZ2cpOwotICBnc3Rfb2JqZWN0X3VucmVmIChhZ2dfc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZDIpOwotICBnX2ZyZWUgKGRhdGExKTsKLSAgZ19mcmVlIChkYXRhMik7Ci0gIGFnZyA9IE5VTEw7Ci0gIGFnZ19zcmNwYWQgPSBOVUxMOwotICBzcmNwYWQxID0gc3JjcGFkMiA9IE5VTEw7Ci0gIGRhdGExID0gZGF0YTIgPSBOVUxMOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mbHVzaGluZ19zZWVrX2ZhaWx1cmUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmMSwgKmJ1ZjI7Ci0gIEdUaHJlYWQgKnRocmVhZDEsICp0aHJlYWQyOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgLyogUXVldWUgYSBidWZmZXIgaW4gYWdnOnNpbmtfMS4gRG8gYSBmbHVzaGluZyBzZWVrIGFuZCBzaW11bGF0ZSBvbmUgdXBzdHJlYW0KLSAgICogZWxlbWVudCBmYWlsaW5nIHRvIGhhbmRsZSB0aGUgc2VlayAoc2VlIHNyY19ldmVudCgpKS4gQ2hlY2sgdGhhdCB0aGUKLSAgICogZmx1c2hpbmcgc2VlayBsb2dpYyBkb2Vzbid0IGdldCB0cmlnZ2VyZWQgYnkgY2hlY2tpbmcgdGhhdCB0aGUgYnVmZmVyCi0gICAqIHF1ZXVlZCBvbiBhZ2c6c2lua18xIGRvZXNuJ3QgZ2V0IGZsdXNoZWQuCi0gICAqLwotCi0gIC8qIHF1ZXVlIGEgYnVmZmVyIGluIGFnZzpzaW5rXzEgKi8KLSAgYnVmMiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxLCBOVUxMKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZjIpID0gR1NUX1NFQ09ORDsKLSAgZGF0YTItPnBhZCA9IHNyY3BhZDI7Ci0gIGRhdGEyLT5idWZmZXIgPSBidWYyOwotICB0aHJlYWQyID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHB1c2hfYnVmZmVyLCBkYXRhMiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2NvbGxlY3RlZCAoRkFMU0UpOwotCi0gIC8qIGRvIHRoZSBzZWVrICovCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrICgxLCBHU1RfRk9STUFUX1RJTUUsIEdTVF9TRUVLX0ZMQUdfRkxVU0gsCi0gICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMCwgR1NUX1NFRUtfVFlQRV9TRVQsIDEwICogR1NUX1NFQ09ORCk7Ci0gIGdfYXRvbWljX2ludF9zZXQgKCZmYWlsX3NlZWssIFRSVUUpOwotICBmYWlsX2lmIChnc3RfcGFkX3NlbmRfZXZlbnQgKGFnZ19zcmNwYWQsIGV2ZW50KSk7Ci0KLSAgLyogZmx1c2ggc3JjcGFkMSAocHJldGVuZGluZyBpdCdzIHRoZSB1cHN0cmVhbSB0aGF0IGRpZG4ndCBmYWlsIHRvIHNlZWspICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZDEsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkMSwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKSkpOwotCi0gIC8qIGNoZWNrIHRoYXQgdGhlIGZsdXNoIGV2ZW50cyByZWFjaGVkIGFnZzpzcmMgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZmx1c2hfc3RhcnRfZXZlbnRzLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZmx1c2hfc3RvcF9ldmVudHMsIDEpOwotCi0gIC8qIHB1c2ggYSBidWZmZXIgb24gYWdnOnNpbmtfMC4gVGhpcyBzaG91bGQgdHJpZ2dlciBhIGNvbGxlY3Qgc2luY2UgYWdnOnNpbmtfMQotICAgKiBzaG91bGQgbm90IGhhdmUgYmVlbiBmbHVzaGVkIGF0IHRoaXMgcG9pbnQgKi8KLSAgYnVmMSA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxLCBOVUxMKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZjEpID0gMDsKLSAgZGF0YTEtPnBhZCA9IHNyY3BhZDE7Ci0gIGRhdGExLT5idWZmZXIgPSBidWYxOwotICB0aHJlYWQxID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHB1c2hfYnVmZmVyLCBkYXRhMSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2NvbGxlY3RlZCAoVFJVRSk7Ci0gIGNvbGxlY3RlZCA9IEZBTFNFOwotCi0gIC8qIGF0IHRoaXMgcG9pbnQgdGhyZWFkMSBtdXN0IGhhdmUgcmV0dXJuZWQgKi8KLSAgZ190aHJlYWRfam9pbiAodGhyZWFkMSk7Ci0KLSAgLyogcHVzaCBlb3Mgb24gYWdnOnNpbmtfMCBzbyB0aGUgYnVmZmVyIHF1ZXVlZCBpbiBhZ2c6c2lua18xIGlzIGNvbGxlY3RlZCBhbmQKLSAgICogdGhlIHB1c2hpbmcgdGhyZWFkIHJldHVybnMgKi8KLSAgZGF0YTEtPnBhZCA9IHNyY3BhZDE7Ci0gIGRhdGExLT5ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOwotICB0aHJlYWQxID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHB1c2hfZXZlbnQsIGRhdGExLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfY29sbGVjdGVkIChUUlVFKTsKLQotICBnX3RocmVhZF9qb2luICh0aHJlYWQxKTsKLSAgZ190aHJlYWRfam9pbiAodGhyZWFkMik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmx1c2hpbmdfc2VlaykKLXsKLSAgR3N0QnVmZmVyICpidWYxLCAqYnVmMjsKLSAgR1RocmVhZCAqdGhyZWFkMSwgKnRocmVhZDI7Ci0gIEdzdEV2ZW50ICpldmVudDsKLQotICAvKiBRdWV1ZSBhIGJ1ZmZlciBpbiBhZ2c6c2lua18xLiBUaGVuIGRvIGEgZmx1c2hpbmcgc2VlayBhbmQgY2hlY2sgdGhhdCB0aGUKLSAgICogbmV3IGZsdXNoaW5nIHNlZWsgbG9naWMgaXMgdHJpZ2dlcmVkLiBPbiB0aGUgZmlyc3QgRkxVU0hfU1RBUlQgY2FsbCB0aGUKLSAgICogYnVmZmVycyBxdWV1ZWQgaW4gY29sbGVjdHBhZHMgc2hvdWxkIGdldCBmbHVzaGVkLiBPbmx5IG9uZSBGTFVTSF9TVEFSVCBhbmQKLSAgICogb25lIEZMVVNIX1NUT1Agc2hvdWxkIGJlIGZvcndhcmRlZCBkb3duc3RyZWFtLgotICAgKi8KLSAgYnVmMiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxLCBOVUxMKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZjIpID0gMDsKLSAgZGF0YTItPnBhZCA9IHNyY3BhZDI7Ci0gIGRhdGEyLT5idWZmZXIgPSBidWYyOwotICAvKiBleHBlY3QgdGhpcyBidWZmZXIgdG8gYmUgZmx1c2hlZCAqLwotICBkYXRhMi0+ZXhwZWN0ZWRfcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIHRocmVhZDIgPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgcHVzaF9idWZmZXIsIGRhdGEyLCBOVUxMKTsKLQotICAvKiBub3cgZG8gYSBzdWNjZXNzZnVsIGZsdXNoaW5nIHNlZWsgKi8KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDEsIEdTVF9GT1JNQVRfVElNRSwgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAwLCBHU1RfU0VFS19UWVBFX1NFVCwgMTAgKiBHU1RfU0VDT05EKTsKLSAgZ19hdG9taWNfaW50X3NldCAoJmZhaWxfc2VlaywgRkFMU0UpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZW5kX2V2ZW50IChhZ2dfc3JjcGFkLCBldmVudCkpOwotCi0gIC8qIGZsdXNoaW5nIHN0YXJ0cyBvbmNlIG9uZSBvZiB0aGUgdXBzdHJlYW0gZWxlbWVudHMgc2VuZHMgdGhlIGZpcnN0Ci0gICAqIEZMVVNIX1NUQVJUICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZsdXNoX3N0YXJ0X2V2ZW50cywgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZsdXNoX3N0b3BfZXZlbnRzLCAwKTsKLQotICAvKiBmbHVzaCBvZ2c6c2lua18wLiBUaGlzIGZsdXNocyBjb2xsZWN0cGFkcywgY2FsbHMgOjpmbHVzaCgpIGFuZCBzZW5kcwotICAgKiBGTFVTSF9TVEFSVCBkb3duc3RyZWFtICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZDEsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZmx1c2hfc3RhcnRfZXZlbnRzLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZmx1c2hfc3RvcF9ldmVudHMsIDApOwotICAvKiB0aGUgZmlyc3QgRkxVU0hfU1RPUCBpcyBmb3J3YXJkZWQgZG93bnN0cmVhbSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQxLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZsdXNoX3N0YXJ0X2V2ZW50cywgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZsdXNoX3N0b3BfZXZlbnRzLCAxKTsKLSAgLyogYXQgdGhpcyBwb2ludCBldmVuIHRoZSBvdGhlciBwYWQgYWdnOnNpbmtfMSBzaG91bGQgYmUgZmx1c2hpbmcgc28gdGhyZWFkMgotICAgKiBzaG91bGQgaGF2ZSBzdG9wcGVkICovCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDIpOwotCi0gIC8qIHB1c2ggYSBidWZmZXIgb24gYWdnOnNpbmtfMCB0byB0cmlnZ2VyIG9uZSBjb2xsZWN0IGFmdGVyIGZsdXNoaW5nIHRvIHZlcmlmeQotICAgKiB0aGF0IGZsdXNoaW5nIGNvbXBsZXRlcyBvbmNlIGFsbCB0aGUgcGFkcyBoYXZlIGJlZW4gZmx1c2hlZCAqLwotICBidWYxID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEsIE5VTEwpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmMSkgPSBHU1RfU0VDT05EOwotICBkYXRhMS0+cGFkID0gc3JjcGFkMTsKLSAgZGF0YTEtPmJ1ZmZlciA9IGJ1ZjE7Ci0gIHRocmVhZDEgPSBnX3RocmVhZF90cnlfbmV3ICgiZ3N0LWNoZWNrIiwgcHVzaF9idWZmZXIsIGRhdGExLCBOVUxMKTsKLQotICAvKiBmbHVzaCBhZ2c6c2lua18xIGFzIHdlbGwuIFRoaXMgY29tcGxldGVzIHRoZSBmbHVzaGluZyBzZWVrIHNvIGEgRkxVU0hfU1RPUCBpcwotICAgKiBzZW50IGRvd25zdHJlYW0gKi8KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQyLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQyLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKLQotICAvKiBzdGlsbCwgb25seSBvbmUgRkxVU0hfU1RBUlQgYW5kIG9uZSBGTFVTSF9TVE9QIGFyZSBmb3J3YXJkZWQgZG93bnN0cmVhbSAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChmbHVzaF9zdGFydF9ldmVudHMsIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChmbHVzaF9zdG9wX2V2ZW50cywgMSk7Ci0KLSAgLyogRU9TIGFnZzpzaW5rXzEgc28gdGhlIGJ1ZmZlciBxdWV1ZWQgaW4gYWdnOnNpbmtfMCBpcyBjb2xsZWN0ZWQgKi8KLSAgZGF0YTItPnBhZCA9IHNyY3BhZDI7Ci0gIGRhdGEyLT5ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOwotICB0aHJlYWQyID0gZ190aHJlYWRfdHJ5X25ldyAoImdzdC1jaGVjayIsIHB1c2hfZXZlbnQsIGRhdGEyLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfY29sbGVjdGVkIChUUlVFKTsKLQotICAvKiB0aGVzZSB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBhcyBhdCB0aGlzIHBvaW50IHRoZSB0aHJlYWRzIGhhdmUgYmVlbgotICAgKiB1bmxvY2tlZCBhbmQgYXJlIGZpbmlzaGVkICovCi0gIGdfdGhyZWFkX2pvaW4gKHRocmVhZDEpOwotICBnX3RocmVhZF9qb2luICh0aHJlYWQyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jbGlwX3J1bm5pbmdfdGltZSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdENvbGxlY3REYXRhIGRhdGEgPSB7IDAgfTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZGF0YS5wYWQgPSBnc3RfcGFkX25ldyAoImNsaXBfdGVzdCIsIEdTVF9QQURfU1JDKTsKLQotICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9IDA7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gMDsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJmRhdGEuc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBnc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lIChOVUxMLCAmZGF0YSwgYnVmLCAmYnVmLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoYnVmICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX1BUUyAoYnVmKSwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfRFRTIChidWYpLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChHU1RfQ09MTEVDVF9QQURTX0RUUyAoJmRhdGEpLCAwKTsKLQotICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9IDEwMDA7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gMDsKLSAgZGF0YS5zZWdtZW50LnN0YXJ0ID0gMTAwMDsKLQotICBnc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lIChOVUxMLCAmZGF0YSwgYnVmLCAmYnVmLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoYnVmICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX1BUUyAoYnVmKSwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfRFRTIChidWYpLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChHU1RfQ09MTEVDVF9QQURTX0RUUyAoJmRhdGEpLCAtMTAwMCk7Ci0KLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSAxMDAwOwotICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3J1bm5pbmdfdGltZSAoTlVMTCwgJmRhdGEsIGJ1ZiwgJmJ1ZiwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9QVFMgKGJ1ZiksIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX0RUUyAoYnVmKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfaWYgKEdTVF9DT0xMRUNUX1BBRFNfRFRTX0lTX1ZBTElEICgmZGF0YSkpOwotCi0gIEdTVF9CVUZGRVJfUFRTIChidWYpID0gMDsKLSAgR1NUX0JVRkZFUl9EVFMgKGJ1ZikgPSAwOwotCi0gIGdzdF9jb2xsZWN0X3BhZHNfY2xpcF9ydW5uaW5nX3RpbWUgKE5VTEwsICZkYXRhLCBidWYsICZidWYsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChidWYgPT0gTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRhdGEucGFkKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfY29sbGVjdF9wYWRzX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqc3VpdGU7Ci0gIFRDYXNlICpnZW5lcmFsLCAqYnVmZmVycywgKnBpcGVsaW5lLCAqZmx1c2g7Ci0KLSAgZ3N0X2FncmVnYXRvcl9wbHVnaW5fcmVnaXN0ZXIgKCk7Ci0KLSAgc3VpdGUgPSBzdWl0ZV9jcmVhdGUgKCJHc3RDb2xsZWN0UGFkcyIpOwotCi0gIGdlbmVyYWwgPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0gIHN1aXRlX2FkZF90Y2FzZSAoc3VpdGUsIGdlbmVyYWwpOwotICB0Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlIChnZW5lcmFsLCBzZXR1cCwgdGVhcmRvd24pOwotICB0Y2FzZV9hZGRfdGVzdCAoZ2VuZXJhbCwgdGVzdF9wYWRfYWRkX3JlbW92ZSk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKGdlbmVyYWwsIHRlc3RfY29sbGVjdCk7Ci0gIHRjYXNlX2FkZF90ZXN0IChnZW5lcmFsLCB0ZXN0X2NvbGxlY3RfZW9zKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKGdlbmVyYWwsIHRlc3RfY29sbGVjdF90d2ljZSk7Ci0gIHRjYXNlX2FkZF90ZXN0IChnZW5lcmFsLCB0ZXN0X2NsaXBfcnVubmluZ190aW1lKTsKLQotICBidWZmZXJzID0gdGNhc2VfY3JlYXRlICgiYnVmZmVycyIpOwotICBzdWl0ZV9hZGRfdGNhc2UgKHN1aXRlLCBidWZmZXJzKTsKLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAoYnVmZmVycywgc2V0dXBfYnVmZmVyX2NiLCB0ZWFyZG93bik7Ci0gIHRjYXNlX2FkZF90ZXN0IChidWZmZXJzLCB0ZXN0X2NvbGxlY3RfZGVmYXVsdCk7Ci0KLSAgcGlwZWxpbmUgPSB0Y2FzZV9jcmVhdGUgKCJwaXBlbGluZSIpOwotICBzdWl0ZV9hZGRfdGNhc2UgKHN1aXRlLCBwaXBlbGluZSk7Ci0gIHRjYXNlX2FkZF90ZXN0IChwaXBlbGluZSwgdGVzdF9saW5lYXJfcGlwZWxpbmUpOwotICB0Y2FzZV9hZGRfdGVzdCAocGlwZWxpbmUsIHRlc3RfYnJhbmNoZWRfcGlwZWxpbmUpOwotCi0gIGZsdXNoID0gdGNhc2VfY3JlYXRlICgiZmx1c2giKTsKLSAgc3VpdGVfYWRkX3RjYXNlIChzdWl0ZSwgZmx1c2gpOwotICB0Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlIChmbHVzaCwgZmx1c2hfc2V0dXAsIGZsdXNoX3RlYXJkb3duKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKGZsdXNoLCB0ZXN0X2ZsdXNoaW5nX3NlZWtfZmFpbHVyZSk7Ci0gIHRjYXNlX2FkZF90ZXN0IChmbHVzaCwgdGVzdF9mbHVzaGluZ19zZWVrKTsKLQotICByZXR1cm4gc3VpdGU7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfY29sbGVjdF9wYWRzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvY29udHJvbGxlci5jIGIvdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNzM2Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9jb250cm9sbGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTY3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgdGhlIGNvbnRyb2xsZXIgbGlicmFyeQotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFN0ZWZhbiBLb3N0IDxlbnNvbmljIGF0IHVzZXJzIGRvdCBzZiBkb3QgbmV0PgotICogQ29weXJpZ2h0IChDKSA8MjAwNi0yMDA3PiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmg+Ci0KLS8qIGVudW0gZm9yIHRleHQgZWxlbWVudCAqLwotCi0jZGVmaW5lIEdTVF9UWVBFX1RFU1RfRU5VTSAoZ3N0X3Rlc3RfZW51bV9nZXRfdHlwZSAoKSkKLQotdHlwZWRlZiBlbnVtCi17Ci0gIEVOVU1fVjAgPSAwLAotICBFTlVNX1YxMCA9IDEwLAotICBFTlVNX1YxMSwKLSAgRU5VTV9WMTIsCi0gIEVOVU1fVjI1NSA9IDI1NQotfSBHc3RUZXN0RW51bTsKLQotc3RhdGljIEdUeXBlCi1nc3RfdGVzdF9lbnVtX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgZ3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7RU5VTV9WMCwgIkVOVU1fVjAiLCAiMCJ9LAotICAgIHtFTlVNX1YxMCwgIkVOVU1fVjEwIiwgIjEwIn0sCi0gICAge0VOVU1fVjExLCAiRU5VTV9WMTEiLCAiMTEifSwKLSAgICB7RU5VTV9WMTIsICJFTlVNX1YxMiIsICIxMiJ9LAotICAgIHtFTlVNX1YyNTUsICJFTlVNX1YyNTUiLCAiMjU1In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmZ3R5cGUpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFRlc3RFbnVtIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmd0eXBlLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgZ3R5cGU7Ci19Ci0KLS8qIGxvY2FsIHRlc3QgZWxlbWVudCAqLwotCi1lbnVtCi17Ci0gIFBST1BfSU5UID0gMSwKLSAgUFJPUF9GTE9BVCwKLSAgUFJPUF9ET1VCTEUsCi0gIFBST1BfQk9PTEVBTiwKLSAgUFJPUF9FTlVNLAotICBQUk9QX1JFQURPTkxZLAotICBQUk9QX1NUQVRJQywKLSAgUFJPUF9DT05TVFJVQ1RPTkxZLAotICBQUk9QX0NPVU5UCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX1RFU1RfT0JKICAgICAgICAgICAgKGdzdF90ZXN0X29ial9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RFU1RfT0JKKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9URVNUX09CSiwgR3N0VGVzdE9iaikpCi0jZGVmaW5lIEdTVF9URVNUX09CSl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9URVNUX09CSiwgR3N0VGVzdE9iakNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1RFU1RfT0JKKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9URVNUX09CSikpCi0jZGVmaW5lIEdTVF9JU19URVNUX09CSl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9URVNUX09CSikpCi0jZGVmaW5lIEdTVF9URVNUX09CSl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9URVNUX09CSiwgR3N0VGVzdE9iakNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RPYmogR3N0VGVzdE9iajsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUZXN0T2JqQ2xhc3MgR3N0VGVzdE9iakNsYXNzOwotCi1zdHJ1Y3QgX0dzdFRlc3RPYmoKLXsKLSAgR3N0RWxlbWVudCBwYXJlbnQ7Ci0gIGdpbnQgdmFsX2ludDsKLSAgZ2Zsb2F0IHZhbF9mbG9hdDsKLSAgZ2RvdWJsZSB2YWxfZG91YmxlOwotICBnYm9vbGVhbiB2YWxfYm9vbGVhbjsKLSAgR3N0VGVzdEVudW0gdmFsX2VudW07Ci19Owotc3RydWN0IF9Hc3RUZXN0T2JqQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLXN0YXRpYyBHVHlwZSBnc3RfdGVzdF9vYmpfZ2V0X3R5cGUgKHZvaWQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wZXJ0eV9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VGVzdE9iaiAqc2VsZiA9IEdTVF9URVNUX09CSiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BlcnR5X2lkKSB7Ci0gICAgY2FzZSBQUk9QX0lOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNlbGYtPnZhbF9pbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZMT0FUOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBzZWxmLT52YWxfZmxvYXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPVUJMRToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlbGYtPnZhbF9kb3VibGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPT0xFQU46Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2VsZi0+dmFsX2Jvb2xlYW4pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VOVU06Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc2VsZi0+dmFsX2VudW0pOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X29ial9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcGVydHlfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFRlc3RPYmogKnNlbGYgPSBHU1RfVEVTVF9PQkogKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgewotICAgIGNhc2UgUFJPUF9JTlQ6Ci0gICAgICBzZWxmLT52YWxfaW50ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUcgKCJ0ZXN0IHZhbHVlIGludD0lZCIsIHNlbGYtPnZhbF9pbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZMT0FUOgotICAgICAgc2VsZi0+dmFsX2Zsb2F0ID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoInRlc3QgdmFsdWUgZmxvYXQ9JWYiLCBzZWxmLT52YWxfZmxvYXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPVUJMRToKLSAgICAgIHNlbGYtPnZhbF9kb3VibGUgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoInRlc3QgdmFsdWUgZG91YmxlPSVsZiIsIHNlbGYtPnZhbF9kb3VibGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPT0xFQU46Ci0gICAgICBzZWxmLT52YWxfYm9vbGVhbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoInRlc3QgdmFsdWUgYm9vbGVhbj0lZCIsIHNlbGYtPnZhbF9ib29sZWFuKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FTlVNOgotICAgICAgc2VsZi0+dmFsX2VudW0gPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUcgKCJ0ZXN0IHZhbHVlIGVudW09JWQiLCBzZWxmLT52YWxfZW51bSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ09OU1RSVUNUT05MWToKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9vYmpfY2xhc3NfaW5pdCAoR3N0VGVzdE9iakNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJpbnQiLAotICAgICAgICAgICJpbnQgcHJvcCIsCi0gICAgICAgICAgImludCBudW1iZXIgcGFyYW1ldGVyIiwKLSAgICAgICAgICAwLCAxMDAsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkxPQVQsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJmbG9hdCIsCi0gICAgICAgICAgImZsb2F0IHByb3AiLAotICAgICAgICAgICJmbG9hdCBudW1iZXIgcGFyYW1ldGVyIiwKLSAgICAgICAgICAwLjAsIDEwMC4wLCAwLjAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRE9VQkxFLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImRvdWJsZSIsCi0gICAgICAgICAgImRvdWJsZSBwcm9wIiwKLSAgICAgICAgICAiZG91YmxlIG51bWJlciBwYXJhbWV0ZXIiLAotICAgICAgICAgIDAuMCwgMTAwLjAsIDAuMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CT09MRUFOLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJib29sZWFuIiwKLSAgICAgICAgICAiYm9vbGVhbiBwcm9wIiwKLSAgICAgICAgICAiYm9vbGVhbiBwYXJhbWV0ZXIiLAotICAgICAgICAgIEZBTFNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0VOVU0sCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImVudW0iLAotICAgICAgICAgICJlbnVtIHByb3AiLAotICAgICAgICAgICJlbnVtIHBhcmFtZXRlciIsCi0gICAgICAgICAgR1NUX1RZUEVfVEVTVF9FTlVNLCBFTlVNX1YwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVBRE9OTFksCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicmVhZG9ubHkiLAotICAgICAgICAgICJyZWFkb25seSBwcm9wIiwKLSAgICAgICAgICAicmVhZG9ubHkgcGFyYW1ldGVyIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NUQVRJQywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJzdGF0aWMiLAotICAgICAgICAgICJzdGF0aWMgcHJvcCIsCi0gICAgICAgICAgInN0YXRpYyBwYXJhbWV0ZXIiLCAwLCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NPTlNUUlVDVE9OTFksCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiY29uc3RydWN0LW9ubHkiLAotICAgICAgICAgICJjb25zdHJ1Y3Qtb25seSBwcm9wIiwKLSAgICAgICAgICAiY29uc3RydWN0LW9ubHkgcGFyYW1ldGVyIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9vYmpfYmFzZV9pbml0IChHc3RUZXN0T2JqQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAidGVzdCBvYmplY3QgZm9yIHVuaXQgdGVzdHMiLAotICAgICAgIlRlc3QiLCAiVXNlIGluIHVuaXQgdGVzdHMiLCAiU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4iKTsKLX0KLQotc3RhdGljIEdUeXBlCi1nc3RfdGVzdF9vYmpfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSB0ZXN0X29ial90eXBlID0gMDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZ0ZXN0X29ial90eXBlKSkgewotICAgIEdUeXBlIHR5cGU7Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBpbmZvID0gewotICAgICAgKGd1aW50MTYpIHNpemVvZiAoR3N0VGVzdE9iakNsYXNzKSwKLSAgICAgIChHQmFzZUluaXRGdW5jKSBnc3RfdGVzdF9vYmpfYmFzZV9pbml0LCAgIC8vIGJhc2VfaW5pdAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBiYXNlX2ZpbmFsaXplCi0gICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF90ZXN0X29ial9jbGFzc19pbml0LCAvLyBjbGFzc19pbml0Ci0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzX2ZpbmFsaXplCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGNsYXNzX2RhdGEKLSAgICAgIChndWludDE2KSBzaXplb2YgKEdzdFRlc3RPYmopLAotICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAvLyBuX3ByZWFsbG9jcwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZV9pbml0Ci0gICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlX3RhYmxlCi0gICAgfTsKLSAgICB0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwgIkdzdFRlc3RPYmoiLCAmaW5mbywgMCk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZ0ZXN0X29ial90eXBlLCB0eXBlKTsKLSAgfQotICByZXR1cm4gdGVzdF9vYmpfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLXNldHVwICh2b2lkKQotewotICBnc3RfZWxlbWVudF9yZWdpc3RlciAoTlVMTCwgInRlc3RvYmoiLCBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9URVNUX09CSik7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZWFyZG93biAodm9pZCkKLXsKLX0KLQotCi0vKiBURVNUUyAqLwotCi0vKiB0ZXN0cyBpZiB3ZSBkb24ndCBmYWlsIG9uIGVtcHR5IGludGVycG9sYXRpb24gY29udHJvbHNvdXJjZXMgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2NvbnRyb2xzb3VyY2VfZW1wdHkxKQotewotICBHc3RFbGVtZW50ICplbGVtOwotICBHc3RDb250cm9sU291cmNlICpjczsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIGNzID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKEdTVF9PQkpFQ1QgKGVsZW0pLAotICAgICAgICAgIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoR1NUX09CSkVDVCAoZWxlbSksICJpbnQiLCBjcykpKTsKLQotICAvKiBkb24ndCBmYWlsIG9uIGVtcHR5IGNvbnRyb2wgcG9pbnQgbGlzdHMgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EKTsKLQotICAvKiB1bnJlZiBvYmplY3RzICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdHMgaWYgd2UgZG9uJ3QgZmFpbCBvbiBpbnRlcnBvbGF0aW9uIGNvbnRyb2xzb3VyY2VzIHRoYXQgYXJlIGVtcHR5IGFnYWluICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9jb250cm9sc291cmNlX2VtcHR5MikKLXsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgY3MgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKSkpOwotCi0gIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLwotICB0dmNzID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzOwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCwgMCk7Ci0KLSAgLyogLi4uIGFuZCB1bnNldCB0aGUgdmFsdWUgKi8KLSAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCk7Ci0KLSAgLyogZG9uJ3QgZmFpbCBvbiBlbXB0eSBjb250cm9sIHBvaW50IGxpc3RzICovCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAwICogR1NUX1NFQ09ORCk7Ci0KLSAgLyogdW5yZWYgb2JqZWN0cyAqLwotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgdGltZWQgdmFsdWUgaGFuZGxpbmcgd2l0aG91dCBpbnRlcnBvbGF0aW9uICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX25vbmUpCi17Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqdHZjczsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLSAgZ2RvdWJsZSB2OwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgLyogbmV3IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KLSAgY3MgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIHR2Y3MgPSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKikgY3M7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKSkpOwotCi0gIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KLSAgZ19vYmplY3Rfc2V0IChjcywgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX05PTkUsIE5VTEwpOwotCi0gIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMCAqIEdTVF9TRUNPTkQsIDAuMCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMiAqIEdTVF9TRUNPTkQsIDEuMCkpOwotCi0gIC8qIGNoZWNrIHZhbHVlcyBvbiBjb250cm9sIHNvdXJjZSBkaXJlY3RseSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoY3MsIDAgKiBHU1RfU0VDT05ELCAmdikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKHYsIDAuMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChjcywgMSAqIEdTVF9TRUNPTkQsICZ2KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAodiwgMC4wKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKGNzLCAyICogR1NUX1NFQ09ORCwgJnYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0ICh2LCAxLjApOwotICBmYWlsX3VubGVzcyAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoY3MsIDMgKiBHU1RfU0VDT05ELCAmdikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKHYsIDEuMCk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMyAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCB0aW1lZCB2YWx1ZSBoYW5kbGluZyB3aXRoIGxpbmVhciBpbnRlcnBvbGF0aW9uICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcikKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RFbGVtZW50ICplbGVtOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgLyogbmV3IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KLSAgY3MgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIHR2Y3MgPSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKikgY3M7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKSkpOwotCi0gIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KLSAgZ19vYmplY3Rfc2V0IChjcywgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgTlVMTCk7Ci0KLSAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCwgMC4wKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCwgMS4wKSk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgdGltZWQgdmFsdWUgaGFuZGxpbmcgd2l0aCBjdWJpYyBpbnRlcnBvbGF0aW9uICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2N1YmljKQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKnR2Y3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLwotICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgdHZjcyA9IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKSBjczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiZG91YmxlIiwgY3MpKSk7Ci0KLSAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLwotICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUMsIE5VTEwpOwotCi0gIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMCAqIEdTVF9TRUNPTkQsIDAuMCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMSAqIEdTVF9TRUNPTkQsIDAuNSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMiAqIEdTVF9TRUNPTkQsIDAuMikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgNCAqIEdTVF9TRUNPTkQsIDAuOCkpOwotCi0gIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgMC4wKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCA1MC4wKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAyMC4wKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDMgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9kb3VibGUgPiAyMC4wICYmCi0gICAgICBHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlIDwgODAuMCwgTlVMTCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCA0ICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgODAuMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCA1ICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgODAuMCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0IHRpbWVkIHZhbHVlIGhhbmRsaW5nIHdpdGggY3ViaWMgaW50ZXJwb2xhdGlvbiAqLwotR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW50ZXJwb2xhdGlvbl9jdWJpY190b29fZmV3X2NwKQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKnR2Y3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLwotICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgdHZjcyA9IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKSBjczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiZG91YmxlIiwgY3MpKSk7Ci0KLSAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLwotICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUMsIE5VTEwpOwotCi0gIC8qIHNldCAyIGNvbnRyb2wgdmFsdWVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCwgMC4wKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCwgMC40KSk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgYW5kIHZlcmlmeSB0aGF0IGl0IHVzZWQgbGluZWFyCi0gICAqIGludGVycG9sYXRpb24gYXMgd2UgZG9uJ3QgZ2F2ZSBlbm91Z2ggY29udHJvbCBwb2ludHMKLSAgICovCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgMC4wKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAyMC4wKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCA0MC4wKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgX3Vuc2V0KCkgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2ludGVycG9sYXRpb25fdW5zZXQpCi17Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqdHZjczsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIC8qIG5ldyBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICB0dmNzID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKEdTVF9PQkpFQ1QgKGVsZW0pLAotICAgICAgICAgIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoR1NUX09CSkVDVCAoZWxlbSksICJpbnQiLCBjcykpKTsKLQotICAvKiBzZXQgaW50ZXJwb2xhdGlvbiBtb2RlICovCi0gIGdfb2JqZWN0X3NldCAoY3MsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9OT05FLCBOVUxMKTsKLQotICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIDAgKiBHU1RfU0VDT05ELCAwLjApKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIDEgKiBHU1RfU0VDT05ELCAxLjApKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIDIgKiBHU1RfU0VDT05ELCAwLjUpKTsKLQotICAvKiB2ZXJpZnkgdmFsdWVzICovCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0KLSAgLyogdW5zZXQgc2Vjb25kICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXQgKHR2Y3MsIDEgKiBHU1RfU0VDT05EKSk7Ci0KLSAgLyogdmVyaWZ5IHZhbHVlIGFnYWluICovCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0KLSAgLyogdW5zZXQgYWxsIHZhbHVlcywgcmVzZXQgYW5kIHRyeSB0byB1bnNldCBhZ2FpbiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCkpOwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXRfYWxsICh0dmNzKTsKLSAgZmFpbF9pZiAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCBfdW5zZXRfYWxsKCkgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2ludGVycG9sYXRpb25fdW5zZXRfYWxsKQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKnR2Y3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLwotICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgdHZjcyA9IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKSBjczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwgY3MpKSk7Ci0KLSAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLwotICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORSwgTlVMTCk7Ci0KLSAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCwgMC4wKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAxICogR1NUX1NFQ09ORCwgMS4wKSk7Ci0KLSAgLyogdmVyaWZ5IHZhbHVlcyAqLwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMCAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLQotICAvKiB1bnNldCBhbGwgKi8KLSAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbCAodHZjcyk7Ci0gIEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQgPSAwOwotCi0gIC8qIHZlcmlmeSB2YWx1ZSBhZ2FpbiAqLwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgcmV0cmlldmFsIG9mIGFuIGFycmF5IG9mIHZhbHVlcyB3aXRoIGdldF92YWx1ZV9hcnJheSgpICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9hYnNvbHV0ZV92YWx1ZV9hcnJheSkKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RFbGVtZW50ICplbGVtOwotICBnZG91YmxlICpyYXdfdmFsdWVzOwotICBHVmFsdWUgKmdfdmFsdWVzOwotICBnaW50ICp2YWx1ZXM7Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLwotICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgdHZjcyA9IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKSBjczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXdfYWJzb2x1dGUgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwKLSAgICAgICAgICAgICAgY3MpKSk7Ci0KLSAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLwotICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSLCBOVUxMKTsKLQotICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIDAgKiBHU1RfU0VDT05ELCAwKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAxICogR1NUX1NFQ09ORCwgMTAwKSk7Ci0KLSAgLyogbm93IHB1bGwgaW4gcmF3LXZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCi0gIHJhd192YWx1ZXMgPSBnX25ldyAoZ2RvdWJsZSwgMyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWVfYXJyYXkgKGNzLAotICAgICAgICAgIDAsIEdTVF9TRUNPTkQgLyAyLCAzLCByYXdfdmFsdWVzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoKHJhd192YWx1ZXMpWzBdLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0ICgocmF3X3ZhbHVlcylbMV0sIDUwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0ICgocmF3X3ZhbHVlcylbMl0sIDEwMCk7Ci0KLSAgZ19mcmVlIChyYXdfdmFsdWVzKTsKLQotICAvKiBub3cgcHVsbCBpbiBtYXBwZWQgR1ZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCi0gIGdfdmFsdWVzID0gZ19uZXcwIChHVmFsdWUsIDMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2dldF9nX3ZhbHVlX2FycmF5IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsCi0gICAgICAgICAgMCwgR1NUX1NFQ09ORCAvIDIsIDMsIGdfdmFsdWVzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2ludCAoJmdfdmFsdWVzWzBdKSwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2ludCAoJmdfdmFsdWVzWzFdKSwgNTApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX3ZhbHVlX2dldF9pbnQgKCZnX3ZhbHVlc1syXSksIDEwMCk7Ci0KLSAgZ19mcmVlIChnX3ZhbHVlcyk7Ci0KLSAgLyogbm93IHB1bGwgaW4gbWFwcGVkIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCi0gIHZhbHVlcyA9IGdfbmV3MCAoZ2ludCwgMyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfZ2V0X3ZhbHVlX2FycmF5IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsCi0gICAgICAgICAgMCwgR1NUX1NFQ09ORCAvIDIsIDMsIHZhbHVlcykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2YWx1ZXNbMF0sIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2YWx1ZXNbMV0sIDUwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodmFsdWVzWzJdLCAxMDApOwotCi0gIGdfZnJlZSAodmFsdWVzKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgcmV0cmlldmFsIG9mIGFuIGFycmF5IG9mIHZhbHVlcyB3aXRoIGdldF92YWx1ZV9hcnJheSgpICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl92YWx1ZV9hcnJheSkKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RFbGVtZW50ICplbGVtOwotICBnZG91YmxlICpyYXdfdmFsdWVzOwotICBHVmFsdWUgKmdfdmFsdWVzOwotICBnaW50ICp2YWx1ZXM7Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLwotICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgdHZjcyA9IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKSBjczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwgY3MpKSk7Ci0KLSAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLwotICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSLCBOVUxMKTsKLQotICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIDAgKiBHU1RfU0VDT05ELCAwLjApKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIDEgKiBHU1RfU0VDT05ELCAxLjApKTsKLQotICAvKiBub3cgcHVsbCBpbiByYXctdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgcmF3X3ZhbHVlcyA9IGdfbmV3IChnZG91YmxlLCAzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheSAoY3MsCi0gICAgICAgICAgMCwgR1NUX1NFQ09ORCAvIDIsIDMsIHJhd192YWx1ZXMpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0ICgocmF3X3ZhbHVlcylbMF0sIDAuMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoKHJhd192YWx1ZXMpWzFdLCAwLjUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKChyYXdfdmFsdWVzKVsyXSwgMS4wKTsKLQotICBnX2ZyZWUgKHJhd192YWx1ZXMpOwotCi0gIC8qIG5vdyBwdWxsIGluIG1hcHBlZCBHVmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgZ192YWx1ZXMgPSBnX25ldzAgKEdWYWx1ZSwgMyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwKLSAgICAgICAgICAwLCBHU1RfU0VDT05EIC8gMiwgMywgZ192YWx1ZXMpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ192YWx1ZV9nZXRfaW50ICgmZ192YWx1ZXNbMF0pLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ192YWx1ZV9nZXRfaW50ICgmZ192YWx1ZXNbMV0pLCA1MCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2ludCAoJmdfdmFsdWVzWzJdKSwgMTAwKTsKLQotICBnX2ZyZWUgKGdfdmFsdWVzKTsKLQotICAvKiBub3cgcHVsbCBpbiBtYXBwZWQgdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgdmFsdWVzID0gZ19uZXcwIChnaW50LCAzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwKLSAgICAgICAgICAwLCBHU1RfU0VDT05EIC8gMiwgMywgdmFsdWVzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHZhbHVlc1swXSwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHZhbHVlc1sxXSwgNTApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICh2YWx1ZXNbMl0sIDEwMCk7Ci0KLSAgZ19mcmVlICh2YWx1ZXMpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCBpZiB2YWx1ZXMgYmVsb3cgbWluaW11bSBhbmQgYWJvdmUgbWF4aW11bSBhcmUgY2xpcHBlZCAqLwotR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW50ZXJwb2xhdGlvbl9saW5lYXJfaW52YWxpZF92YWx1ZXMpCi17Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqdHZjczsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIC8qIG5ldyBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICB0dmNzID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKEdTVF9PQkpFQ1QgKGVsZW0pLAotICAgICAgICAgIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoR1NUX09CSkVDVCAoZWxlbSksICJmbG9hdCIsIGNzKSkpOwotCi0gIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KLSAgZ19vYmplY3Rfc2V0IChjcywgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgTlVMTCk7Ci0KLSAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCwgMi4wKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCA0ICogR1NUX1NFQ09ORCwgLTIuMCkpOwotCi0gIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzIGFuZCBzZWUgaWYgY2xpcHBpbmcgd29ya3MgKi8KLSAgLyogMjAwLjAgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZmxvYXQsIDEwMC4wKTsKLSAgLyogMTAwLjAgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZmxvYXQsIDEwMC4wKTsKLSAgLyogNTAuMCAqLwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgIDEgKiBHU1RfU0VDT05EICsgNTAwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9mbG9hdCwgNTAuMCk7Ci0gIC8qIDAuMCAqLwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9mbG9hdCwgMC4wKTsKLSAgLyogLTEwMC4wICovCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAzICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2Zsb2F0LCAwLjApOwotICAvKiAtMjAwLjAgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDQgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZmxvYXQsIDAuMCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9kZWZhdWx0X3ZhbHVlcykKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RFbGVtZW50ICplbGVtOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgLyogbmV3IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KLSAgY3MgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIHR2Y3MgPSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKikgY3M7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKSkpOwotCi0gIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KLSAgZ19vYmplY3Rfc2V0IChjcywgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgTlVMTCk7Ci0KLSAgLyogU2hvdWxkIGZhaWwgaWYgbm8gdmFsdWUgd2FzIHNldCB5ZXQKLSAgICogRklYTUU6IHdpbGwgbm90IGZhaWwsIGFzIGludGVycG9sYXRpb24gYXNzdW1lcyB2YWxbMF09ZGVmYXVsdF92YWx1ZSBpZgotICAgKiBub3RoaW5nIGVsc2UgaXMgc2V0LgotICAgZmFpbF9pZiAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMSAqIEdTVF9TRUNPTkQsICZ2YWxfaW50KSk7Ci0gICAqLwotCi0gIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMSAqIEdTVF9TRUNPTkQsIDAuMCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMyAqIEdTVF9TRUNPTkQsIDEuMCkpOwotCi0gIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCi0gIC8qIHNob3VsZCBnaXZlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgY29udHJvbCBwb2ludCBmb3IgdGltZXN0YW1wcyBiZWZvcmUgaXQgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAzICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDEwMCk7Ci0KLSAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCwgMC4wKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCwgMS4wKSk7Ci0KLSAgLyogdW5zZXQgdGhlIG9sZCBvbmVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXQgKHR2Y3MsIDEgKiBHU1RfU0VDT05EKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXQgKHR2Y3MsIDMgKiBHU1RfU0VDT05EKSk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgLyogc2hvdWxkIG5vdyBnaXZlIG91ciB2YWx1ZSBmb3IgdGltZXN0YW1wIDAgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgZ3N0X2NvbnRyb2xsZXJfc2V0X2Rpc2FibGVkKCkgd2l0aCBsaW5lYXIgaW50ZXJwb2xhdGlvbiAqLwotR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW50ZXJwb2xhdGlvbl9saW5lYXJfZGlzYWJsZWQpCi17Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzMSwgKmNzMjsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKnR2Y3MxLCAqdHZjczI7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLwotICBjczEgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIHR2Y3MxID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzMTsKLQotICBjczIgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIHR2Y3MyID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzMjsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwgY3MxKSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiZG91YmxlIiwgY3MyKSkpOwotCi0gIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KLSAgZ19vYmplY3Rfc2V0IChjczEsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGNzMiwgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgTlVMTCk7Ci0KLSAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzMSwgMCAqIEdTVF9TRUNPTkQsIDAuMCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjczEsIDIgKiBHU1RfU0VDT05ELCAxLjApKTsKLQotICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MyLCAwICogR1NUX1NFQ09ORCwgMC4yKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzMiwgMiAqIEdTVF9TRUNPTkQsIDAuNCkpOwotCi0gIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9kb3VibGUsIDIwLjApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgMzAuMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAyICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDEwMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgNDAuMCk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMsIHByb3AgZG91YmxlIGRpc2FibGVkICovCi0gIEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQgPSAwOwotICBHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlID0gMC4wOwotICBnc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdfZGlzYWJsZWQgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiZG91YmxlIiwgVFJVRSk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9kb3VibGUsIDAuMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAwLjApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9kb3VibGUsIDAuMCk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMsIGFmdGVyIGVuYWJsaW5nIGRvdWJsZSBhZ2FpbiAqLwotICBHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50ID0gMDsKLSAgR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSA9IDAuMDsKLSAgZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nX2Rpc2FibGVkIChHU1RfT0JKRUNUIChlbGVtKSwgImRvdWJsZSIsIEZBTFNFKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgMjAuMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAzMC4wKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCA0MC4wKTsKLQotICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcywgYWZ0ZXIgZGlzYWJsaW5nIGFsbCBwcm9wcyAqLwotICBHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50ID0gMDsKLSAgR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSA9IDAuMDsKLSAgZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nc19kaXNhYmxlZCAoR1NUX09CSkVDVCAoZWxlbSksIFRSVUUpOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMCAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAwLjApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAwLjApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAwLjApOwotCi0gIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzLCBlbmFibGluZyBkb3VibGUgYWdhaW4gKi8KLSAgR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCA9IDA7Ci0gIEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9kb3VibGUgPSAwLjA7Ci0gIGdzdF9vYmplY3Rfc2V0X2NvbnRyb2xfYmluZGluZ19kaXNhYmxlZCAoR1NUX09CSkVDVCAoZWxlbSksICJkb3VibGUiLCBGQUxTRSk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9kb3VibGUsIDIwLjApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAzMC4wKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgNDAuMCk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMsIGVuYWJsaW5nIGFsbCAqLwotICBHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50ID0gMDsKLSAgR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSA9IDAuMDsKLSAgZ3N0X29iamVjdF9zZXRfY29udHJvbF9iaW5kaW5nc19kaXNhYmxlZCAoR1NUX09CSkVDVCAoZWxlbSksIEZBTFNFKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2RvdWJsZSwgMjAuMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCAzMC4wKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZG91YmxlLCA0MC4wKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjczEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjczIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2ludGVycG9sYXRpb25fc2V0X2Zyb21fbGlzdCkKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RUaW1lZFZhbHVlICp0dmFsOwotICBHc3RFbGVtZW50ICplbGVtOwotICBHU0xpc3QgKmxpc3QgPSBOVUxMOwotCi0gIC8qIHRlc3QgdGhhdCBhbiBpbnZhbGlkIHRpbWVzdGFtcCB0aHJvd3MgYSB3YXJuaW5nIG9mIHNvbWUgc29ydCAqLwotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIC8qIG5ldyBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICB0dmNzID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKEdTVF9PQkpFQ1QgKGVsZW0pLAotICAgICAgICAgIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoR1NUX09CSkVDVCAoZWxlbSksICJpbnQiLCBjcykpKTsKLQotICAvKiBzZXQgaW50ZXJwb2xhdGlvbiBtb2RlICovCi0gIGdfb2JqZWN0X3NldCAoY3MsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIE5VTEwpOwotCi0gIC8qIHNldCBjb250cm9sIHZhbHVlICovCi0gIHR2YWwgPSBnX25ldzAgKEdzdFRpbWVkVmFsdWUsIDEpOwotICB0dmFsLT50aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB0dmFsLT52YWx1ZSA9IDAuMDsKLQotICBsaXN0ID0gZ19zbGlzdF9hcHBlbmQgKGxpc3QsIHR2YWwpOwotCi0gIGZhaWxfaWYgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0ICh0dmNzLCBsaXN0KSk7Ci0KLSAgLyogdHJ5IGFnYWluIHdpdGggYSB2YWxpZCBzdGFtcCwgc2hvdWxkIHdvcmsgbm93ICovCi0gIHR2YWwtPnRpbWVzdGFtcCA9IDA7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0X2Zyb21fbGlzdCAodHZjcywgbGlzdCkpOwotCi0gIC8qIGFsbG9jYXRlZCBHc3RUaW1lZFZhbHVlIG5vdyBiZWxvbmdzIHRvIHRoZSBjb250cm9sbGVyLCBidXQgbGlzdCBub3QgKi8KLSAgZ19mcmVlICh0dmFsKTsKLSAgZ19zbGlzdF9mcmVlIChsaXN0KTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLS8qIHRlc3QgbGluZWFyIGludGVycG9sYXRpb24gZm9yIHRzIDwgZmlyc3QgY29udHJvbCBwb2ludCAqLwotR1NUX1NUQVJUX1RFU1QgKGNvbnRyb2xsZXJfaW50ZXJwb2xhdGlvbl9saW5lYXJfYmVmb3JlX3RzMCkKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RFbGVtZW50ICplbGVtOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgLyogbmV3IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KLSAgY3MgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIHR2Y3MgPSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKikgY3M7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKSkpOwotCi0gIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KLSAgZ19vYmplY3Rfc2V0IChjcywgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgTlVMTCk7Ci0KLSAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCwgMS4wKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCA0ICogR1NUX1NFQ09ORCwgMC4wKSk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgYWZ0ZXIgZmlyc3QgY29udHJvbCBwb2ludCAqLwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMiAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMyAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCA0ICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotCi0gIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzIGJlZm9yZSBmaXJzdCBjb250cm9sIHBvaW50ICovCi0gIEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQgPSAyNTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMjUpOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMCAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAyNSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiB0ZXN0IGxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIGVudW1zICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9lbnVtcykKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RFbGVtZW50ICplbGVtOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgLyogbmV3IGludGVycG9sYXRpb24gY29udHJvbCBzb3VyY2UgKi8KLSAgY3MgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIHR2Y3MgPSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKikgY3M7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImVudW0iLCBjcykpKTsKLQotICAvKiBzZXQgaW50ZXJwb2xhdGlvbiBtb2RlICovCi0gIGdfb2JqZWN0X3NldCAoY3MsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIE5VTEwpOwotCi0gIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMCAqIEdTVF9TRUNPTkQsIDAuMCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgNCAqIEdTVF9TRUNPTkQsIDEuMCkpOwotCi0gIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBnb2luZyBvdmVyIHRoZSBlbnVtIHZhbHVlcyAqLwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMCAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfZW51bSwgRU5VTV9WMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9lbnVtLCBFTlVNX1YxMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAyICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9lbnVtLCBFTlVNX1YxMSk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAzICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9lbnVtLCBFTlVNX1YxMik7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCA0ICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9lbnVtLCBFTlVNX1YyNTUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCB0aW1lZCB2YWx1ZSBjb3VudHMgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX3RpbWVkX3ZhbHVlX2NvdW50KQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKnR2Y3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgaW50ZXJwb2xhdGlvbiBjb250cm9sIHNvdXJjZSAqLwotICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgdHZjcyA9IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKSBjczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwgY3MpKSk7Ci0KLSAgLyogc2V0IGludGVycG9sYXRpb24gbW9kZSAqLwotICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9nZXRfY291bnQgKHR2Y3MpID09IDApOwotCi0gIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMCAqIEdTVF9TRUNPTkQsIDAuMCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAodHZjcykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCwgMS4wKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50ICh0dmNzKSA9PSAyKTsKLQotICAvKiB1bnNldCBjb250cm9sIHZhbHVlcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9jb3VudCAodHZjcykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfdW5zZXQgKHR2Y3MsIDAgKiBHU1RfU0VDT05EKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50ICh0dmNzKSA9PSAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotLyogdGVzdCBsZm8gY29udHJvbCBzb3VyY2Ugd2l0aCBzaW5lIHdhdmVmb3JtICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9sZm9fc2luZSkKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgbGZvIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKSkpOwotCi0gIC8qIGNvbmZpZ3VyZSBsZm8gKi8KLSAgZ19vYmplY3Rfc2V0IChjcywgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TSU5FLAotICAgICAgImZyZXF1ZW5jeSIsIDEuMCwgInRpbWVzaGlmdCIsIChHc3RDbG9ja1RpbWUpIDAsCi0gICAgICAiYW1wbGl0dWRlIiwgMC41LCAib2Zmc2V0IiwgMC41LCBOVUxMKTsKLQotICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcyAqLwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMjUwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgNTAwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCA3NTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTAwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE1MDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE3NTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMjAwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE1MDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE3NTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCBsZm8gY29udHJvbCBzb3VyY2Ugd2l0aCBzaW5lIHdhdmVmb3JtIGFuZCB0aW1lc2hpZnQgKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2xmb19zaW5lX3RpbWVzaGlmdCkKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgbGZvIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKSkpOwotCi0gIC8qIGNvbmZpZ3VyZSBsZm8gKi8KLSAgZ19vYmplY3Rfc2V0IChjcywgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TSU5FLAotICAgICAgImZyZXF1ZW5jeSIsIDEuMCwgInRpbWVzaGlmdCIsIDI1MCAqIEdTVF9NU0VDT05ELAotICAgICAgImFtcGxpdHVkZSIsIDAuNSwgIm9mZnNldCIsIDAuNSwgTlVMTCk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMjUwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCA1MDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDEwMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCA3NTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTUwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE3NTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTUwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE3NTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgbGZvIGNvbnRyb2wgc291cmNlIHdpdGggc3F1YXJlIHdhdmVmb3JtICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9sZm9fc3F1YXJlKQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIC8qIG5ldyBsZm8gY29udHJvbCBzb3VyY2UgKi8KLSAgY3MgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwgY3MpKSk7Ci0KLSAgLyogY29uZmlndXJlIGxmbyAqLwotICBnX29iamVjdF9zZXQgKGNzLCAid2F2ZWZvcm0iLCBHU1RfTEZPX1dBVkVGT1JNX1NRVUFSRSwKLSAgICAgICJmcmVxdWVuY3kiLCAxLjAsICJ0aW1lc2hpZnQiLCAoR3N0Q2xvY2tUaW1lKSAwLAotICAgICAgImFtcGxpdHVkZSIsIDAuNSwgIm9mZnNldCIsIDAuNSwgTlVMTCk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMjUwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDUwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDc1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxNTAwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTc1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxNTAwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTc1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgbGZvIGNvbnRyb2wgc291cmNlIHdpdGggc2F3IHdhdmVmb3JtICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl9sZm9fc2F3KQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIC8qIG5ldyBsZm8gY29udHJvbCBzb3VyY2UgKi8KLSAgY3MgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwgY3MpKSk7Ci0KLSAgLyogY29uZmlndXJlIGxmbyAqLwotICBnX29iamVjdF9zZXQgKGNzLCAid2F2ZWZvcm0iLCBHU1RfTEZPX1dBVkVGT1JNX1NBVywKLSAgICAgICJmcmVxdWVuY3kiLCAxLjAsICJ0aW1lc2hpZnQiLCAoR3N0Q2xvY2tUaW1lKSAwLAotICAgICAgImFtcGxpdHVkZSIsIDAuNSwgIm9mZnNldCIsIDAuNSwgTlVMTCk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDEwMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAyNTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDc1KTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDUwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgNzUwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAyNSk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxMDAwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAxMDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNzUpOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTUwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTc1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMjUpOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMjAwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEyNTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDc1KTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE1MDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE3NTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDI1KTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgbGZvIGNvbnRyb2wgc291cmNlIHdpdGggcmV2ZXJzZSBzYXcgd2F2ZWZvcm0gKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2xmb19yc2F3KQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIC8qIG5ldyBsZm8gY29udHJvbCBzb3VyY2UgKi8KLSAgY3MgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUIChlbGVtKSwKLSAgICAgICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1QgKGVsZW0pLCAiaW50IiwgY3MpKSk7Ci0KLSAgLyogY29uZmlndXJlIGxmbyAqLwotICBnX29iamVjdF9zZXQgKGNzLCAid2F2ZWZvcm0iLCBHU1RfTEZPX1dBVkVGT1JNX1JFVkVSU0VfU0FXLAotICAgICAgImZyZXF1ZW5jeSIsIDEuMCwgInRpbWVzaGlmdCIsIChHc3RDbG9ja1RpbWUpIDAsCi0gICAgICAiYW1wbGl0dWRlIiwgMC41LCAib2Zmc2V0IiwgMC41LCBOVUxMKTsKLQotICAvKiBub3cgcHVsbCBpbiB2YWx1ZXMgZm9yIHNvbWUgdGltZXN0YW1wcyAqLwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAyNTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDI1KTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDUwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgNzUwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA3NSk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxMDAwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEyNTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDI1KTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE1MDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDE3NTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDc1KTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMjUpOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTUwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMTc1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNzUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogdGVzdCBsZm8gY29udHJvbCBzb3VyY2Ugd2l0aCBzYXcgd2F2ZWZvcm0gKi8KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX2xmb190cmlhbmdsZSkKLXsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0KLSAgZWxlbSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICAvKiBuZXcgbGZvIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVCAoZWxlbSksCi0gICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUIChlbGVtKSwgImludCIsIGNzKSkpOwotCi0gIC8qIGNvbmZpZ3VyZSBsZm8gKi8KLSAgZ19vYmplY3Rfc2V0IChjcywgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRSwKLSAgICAgICJmcmVxdWVuY3kiLCAxLjAsICJ0aW1lc2hpZnQiLCAoR3N0Q2xvY2tUaW1lKSAwLAotICAgICAgImFtcGxpdHVkZSIsIDAuNSwgIm9mZnNldCIsIDAuNSwgTlVMTCk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDI1MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDUwMCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgNTApOwotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgNzUwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEyNTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDEwMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxNTAwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxNzUwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIwMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEyNTAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDEwMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxNTAwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAxNzUwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRlc3QgdGltZWQgdmFsdWUgaGFuZGxpbmcgaW4gdHJpZ2dlciBtb2RlICovCi1HU1RfU1RBUlRfVEVTVCAoY29udHJvbGxlcl90cmlnZ2VyX2V4YWN0KQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKnR2Y3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0gIGdkb3VibGUgcmF3X3ZhbDsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIC8qIG5ldyBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICB0dmNzID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKEdTVF9PQkpFQ1QgKGVsZW0pLAotICAgICAgICAgIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoR1NUX09CSkVDVCAoZWxlbSksICJpbnQiLCBjcykpKTsKLQotICBmYWlsX2lmIChnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlIChjcywgMCAqIEdTVF9TRUNPTkQsICZyYXdfdmFsKSk7Ci0KLSAgLyogc2V0IGNvbnRyb2wgdmFsdWVzICovCi0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCwgMC41KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAyICogR1NUX1NFQ09ORCwgMS4wKSk7Ci0KLSAgLyogbm93IHB1bGwgaW4gdmFsdWVzIGZvciBzb21lIHRpbWVzdGFtcHMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKGNzLCAwICogR1NUX1NFQ09ORCwgJnJhd192YWwpKTsKLQotICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChlbGVtKSwgMCAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50LCA1MCk7Ci0KLSAgR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCA9IDA7Ci0gIGZhaWxfaWYgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKGNzLCAxICogR1NUX1NFQ09ORCwgJnJhd192YWwpKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jb250cm9sX3NvdXJjZV9nZXRfdmFsdWUgKGNzLCAyICogR1NUX1NFQ09ORCwgJnJhd192YWwpKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMTAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChjb250cm9sbGVyX3RyaWdnZXJfdG9sZXJhbmNlKQotewotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKnR2Y3M7Ci0gIEdzdEVsZW1lbnQgKmVsZW07Ci0gIGdkb3VibGUgcmF3X3ZhbDsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidGVzdG9iaiIsIE5VTEwpOwotCi0gIC8qIG5ldyBpbnRlcnBvbGF0aW9uIGNvbnRyb2wgc291cmNlICovCi0gIGNzID0gZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICB0dmNzID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzOwotCi0gIGZhaWxfdW5sZXNzIChnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKEdTVF9PQkpFQ1QgKGVsZW0pLAotICAgICAgICAgIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoR1NUX09CSkVDVCAoZWxlbSksICJpbnQiLCBjcykpKTsKLQotICBnX29iamVjdF9zZXQgKGNzLCAidG9sZXJhbmNlIiwgR19HSU5UNjRfQ09OU1RBTlQgKDEwKSwgTlVMTCk7Ci0KLSAgZmFpbF9pZiAoZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZSAoY3MsIDAgKiBHU1RfU0VDT05ELCAmcmF3X3ZhbCkpOwotCi0gIC8qIHNldCBjb250cm9sIHZhbHVlcyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMCAqIEdTVF9TRUNPTkQsIDAuNSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMiAqIEdTVF9TRUNPTkQsIDEuMCkpOwotCi0gIC8qIG5vdyBwdWxsIGluIHZhbHVlcyBmb3Igc29tZSB0aW1lc3RhbXBzICovCi0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAwICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDAgKiBHU1RfU0VDT05EICsgNSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDUwKTsKLQotICBHU1RfVEVTVF9PQkogKGVsZW0pLT52YWxfaW50ID0gMDsKLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDEgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX1RFU1RfT0JKIChlbGVtKS0+dmFsX2ludCwgMCk7Ci0KLSAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZWxlbSksIDIgKiBHU1RfU0VDT05EIC0gNSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDEwMCk7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGVsZW0pLCAyICogR1NUX1NFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9URVNUX09CSiAoZWxlbSktPnZhbF9pbnQsIDEwMCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfY29udHJvbGxlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJDb250cm9sbGVyIik7Ci0gIFRDYXNlICp0YyA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjKTsKLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGMsIHNldHVwLCB0ZWFyZG93bik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9jb250cm9sc291cmNlX2VtcHR5MSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9jb250cm9sc291cmNlX2VtcHR5Mik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX25vbmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfaW50ZXJwb2xhdGlvbl9saW5lYXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfaW50ZXJwb2xhdGlvbl9jdWJpYyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2N1YmljX3Rvb19mZXdfY3ApOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfaW50ZXJwb2xhdGlvbl91bnNldCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX3Vuc2V0X2FsbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9hYnNvbHV0ZV92YWx1ZV9hcnJheSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl92YWx1ZV9hcnJheSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9pbnZhbGlkX3ZhbHVlcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9kZWZhdWx0X3ZhbHVlcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9kaXNhYmxlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX3NldF9mcm9tX2xpc3QpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfaW50ZXJwb2xhdGlvbl9saW5lYXJfYmVmb3JlX3RzMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9pbnRlcnBvbGF0aW9uX2xpbmVhcl9lbnVtcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl90aW1lZF92YWx1ZV9jb3VudCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9sZm9fc2luZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9sZm9fc2luZV90aW1lc2hpZnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGNvbnRyb2xsZXJfbGZvX3NxdWFyZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl9sZm9fc2F3KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2xmb19yc2F3KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX2xmb190cmlhbmdsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgY29udHJvbGxlcl90cmlnZ2VyX2V4YWN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBjb250cm9sbGVyX3RyaWdnZXJfdG9sZXJhbmNlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9jb250cm9sbGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvZmxvd2NvbWJpbmVyLmMgYi90ZXN0cy9jaGVjay9saWJzL2Zsb3djb21iaW5lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzYzNGMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvZmxvd2NvbWJpbmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIEF1dGhvcjogVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0gKgotICogZmxvd2NvbWJpbmVyLmM6IFVuaXQgdGVzdCBmb3IgR3N0Rmxvd0NvbWJpbmVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmg+Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIHNpbmtfZmxvd3JldCA9IEdTVF9GTE9XX09LOwotCi0jZGVmaW5lIENIRUNLX0NPTUJJTkVEX0ZMT1dTKGYxLCBmMiwgZjMsIGV4cGVjdGVkKSBcCi1HX1NUTVRfU1RBUlQgeyBcCi0gIGNvbWJpbmVyID0gZ3N0X2Zsb3dfY29tYmluZXJfbmV3ICgpOyBcCi0gIGdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWQgKGNvbWJpbmVyLCBwYWQxKTsgXAotICBnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkIChjb21iaW5lciwgcGFkMik7IFwKLSAgZ3N0X2Zsb3dfY29tYmluZXJfYWRkX3BhZCAoY29tYmluZXIsIHBhZDMpOyBcCi0gIHNpbmtfZmxvd3JldCA9IGYxOyBcCi0gIGdzdF9wYWRfcHVzaCAocGFkMSwgZ3N0X2J1ZmZlcl9uZXcgKCkpOyBcCi0gIGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93IChjb21iaW5lciwgZjEpOyBcCi0gIHNpbmtfZmxvd3JldCA9IGYyOyBcCi0gIGdzdF9wYWRfcHVzaCAocGFkMiwgZ3N0X2J1ZmZlcl9uZXcgKCkpOyBcCi0gIGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93IChjb21iaW5lciwgZjIpOyBcCi0gIHNpbmtfZmxvd3JldCA9IGYzOyBcCi0gIGdzdF9wYWRfcHVzaCAocGFkMywgZ3N0X2J1ZmZlcl9uZXcgKCkpOyBcCi0gIHJldCA9IGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93IChjb21iaW5lciwgZjMpOyBcCi0gIGdzdF9mbG93X2NvbWJpbmVyX2ZyZWUgKGNvbWJpbmVyKTsgXAotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChyZXQsIGV4cGVjdGVkKTsgXAotfSBHX1NUTVRfRU5ECi0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1fc2lua19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgcmV0dXJuIHNpbmtfZmxvd3JldDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY29tYmluZWRfZmxvd3MpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RGbG93Q29tYmluZXIgKmNvbWJpbmVyOwotICBHc3RQYWQgKnBhZDEsICpwYWQyLCAqcGFkMzsKLSAgR3N0UGFkICpwZWVyMSwgKnBlZXIyLCAqcGVlcjM7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBwYWQxID0gZ3N0X3BhZF9uZXcgKCJzcmMxIiwgR1NUX1BBRF9TUkMpOwotICBwYWQyID0gZ3N0X3BhZF9uZXcgKCJzcmMyIiwgR1NUX1BBRF9TUkMpOwotICBwYWQzID0gZ3N0X3BhZF9uZXcgKCJzcmMzIiwgR1NUX1BBRF9TUkMpOwotCi0gIHBlZXIxID0gZ3N0X3BhZF9uZXcgKCJzaW5rMSIsIEdTVF9QQURfU0lOSyk7Ci0gIHBlZXIyID0gZ3N0X3BhZF9uZXcgKCJzaW5rMiIsIEdTVF9QQURfU0lOSyk7Ci0gIHBlZXIzID0gZ3N0X3BhZF9uZXcgKCJzaW5rMyIsIEdTVF9QQURfU0lOSyk7Ci0KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHBlZXIxLCBfc2lua19jaGFpbik7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChwZWVyMiwgX3NpbmtfY2hhaW4pOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocGVlcjMsIF9zaW5rX2NoYWluKTsKLQotICBnc3RfcGFkX2xpbmsgKHBhZDEsIHBlZXIxKTsKLSAgZ3N0X3BhZF9saW5rIChwYWQyLCBwZWVyMik7Ci0gIGdzdF9wYWRfbGluayAocGFkMywgcGVlcjMpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGVlcjEsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBlZXIyLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwZWVyMywgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkMSwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkMiwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkMywgVFJVRSk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZDEsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgicDEiKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkMiwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJwMiIpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQzLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInAzIikpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZDEsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQyLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkMywgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIC8qIG9rICovCi0gIENIRUNLX0NPTUJJTkVEX0ZMT1dTIChHU1RfRkxPV19PSywgR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX09LLCBHU1RfRkxPV19PSyk7Ci0KLSAgLyogbm90IGxpbmtlZCAqLwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX05PVF9MSU5LRUQsIEdTVF9GTE9XX09LLAotICAgICAgR1NUX0ZMT1dfT0spOwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX0VPUywgR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX09LKTsKLSAgQ0hFQ0tfQ09NQklORURfRkxPV1MgKEdTVF9GTE9XX09LLCBHU1RfRkxPV19OT1RfTElOS0VELCBHU1RfRkxPV19OT1RfTElOS0VELAotICAgICAgR1NUX0ZMT1dfT0spOwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfTk9UX0xJTktFRCwgR1NUX0ZMT1dfTk9UX0xJTktFRCwKLSAgICAgIEdTVF9GTE9XX05PVF9MSU5LRUQsIEdTVF9GTE9XX05PVF9MSU5LRUQpOwotCi0gIC8qIGVycm9ycyAqLwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX0VSUk9SLCBHU1RfRkxPV19PSywKLSAgICAgIEdTVF9GTE9XX0VSUk9SKTsKLSAgQ0hFQ0tfQ09NQklORURfRkxPV1MgKEdTVF9GTE9XX09LLCBHU1RfRkxPV19DVVNUT01fRVJST1IsIEdTVF9GTE9XX09LLAotICAgICAgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SKTsKLSAgQ0hFQ0tfQ09NQklORURfRkxPV1MgKEdTVF9GTE9XX09LLCBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCwgR1NUX0ZMT1dfT0ssCi0gICAgICBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0gIENIRUNLX0NPTUJJTkVEX0ZMT1dTIChHU1RfRkxPV19PSywgR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX05PVF9ORUdPVElBVEVELAotICAgICAgR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfTk9UX0xJTktFRCwgR1NUX0ZMT1dfRVJST1IsIEdTVF9GTE9XX09LLAotICAgICAgR1NUX0ZMT1dfRVJST1IpOwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX09LLCBHU1RfRkxPV19FUlJPUiwKLSAgICAgIEdTVF9GTE9XX0VSUk9SKTsKLSAgQ0hFQ0tfQ09NQklORURfRkxPV1MgKEdTVF9GTE9XX09LLCBHU1RfRkxPV19PSywgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SLAotICAgICAgR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SKTsKLQotICAvKiBmbHVzaGluZyAqLwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX09LLCBHU1RfRkxPV19GTFVTSElORywKLSAgICAgIEdTVF9GTE9XX0ZMVVNISU5HKTsKLSAgQ0hFQ0tfQ09NQklORURfRkxPV1MgKEdTVF9GTE9XX09LLCBHU1RfRkxPV19GTFVTSElORywgR1NUX0ZMT1dfT0ssCi0gICAgICBHU1RfRkxPV19GTFVTSElORyk7Ci0gIENIRUNLX0NPTUJJTkVEX0ZMT1dTIChHU1RfRkxPV19GTFVTSElORywgR1NUX0ZMT1dfRkxVU0hJTkcsIEdTVF9GTE9XX0ZMVVNISU5HLAotICAgICAgR1NUX0ZMT1dfRkxVU0hJTkcpOwotCi0gIC8qIGVvcyAqLwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX05PVF9MSU5LRUQsIEdTVF9GTE9XX0VPUywKLSAgICAgIEdTVF9GTE9XX09LKTsKLSAgQ0hFQ0tfQ09NQklORURfRkxPV1MgKEdTVF9GTE9XX0VPUywgR1NUX0ZMT1dfT0ssIEdTVF9GTE9XX0VPUywgR1NUX0ZMT1dfT0spOwotICBDSEVDS19DT01CSU5FRF9GTE9XUyAoR1NUX0ZMT1dfRU9TLCBHU1RfRkxPV19FT1MsIEdTVF9GTE9XX0VPUywgR1NUX0ZMT1dfRU9TKTsKLQotICAvKiBlb3MgKyBub3QtbGlua2VkICovCi0gIENIRUNLX0NPTUJJTkVEX0ZMT1dTIChHU1RfRkxPV19OT1RfTElOS0VELCBHU1RfRkxPV19FT1MsIEdTVF9GTE9XX0VPUywKLSAgICAgIEdTVF9GTE9XX0VPUyk7Ci0gIENIRUNLX0NPTUJJTkVEX0ZMT1dTIChHU1RfRkxPV19OT1RfTElOS0VELCBHU1RfRkxPV19OT1RfTElOS0VELCBHU1RfRkxPV19FT1MsCi0gICAgICBHU1RfRkxPV19FT1MpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkMyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcjIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyMyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY2xlYXIpCi17Ci0gIEdzdEZsb3dDb21iaW5lciAqY29tYmluZXI7Ci0gIEdzdFBhZCAqcGFkOwotICBHc3RQYWQgKnBlZXI7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgY29tYmluZXIgPSBnc3RfZmxvd19jb21iaW5lcl9uZXcgKCk7Ci0KLSAgLyogYWRkIGEgcGFkIGFuZCBtYWtlIGl0IHJldHVybiBfRkxVU0hJTkcgKi8KLSAgcGFkID0gZ3N0X3BhZF9uZXcgKCJzcmMxIiwgR1NUX1BBRF9TUkMpOwotICBwZWVyID0gZ3N0X3BhZF9uZXcgKCJzaW5rMSIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChwZWVyLCBfc2lua19jaGFpbik7Ci0gIGdzdF9wYWRfbGluayAocGFkLCBwZWVyKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwZWVyLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QxIikpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotICBnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkIChjb21iaW5lciwgcGFkKTsKLSAgc2lua19mbG93cmV0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAocGFkLCBnc3RfYnVmZmVyX25ldyAoKSksCi0gICAgICBHU1RfRkxPV19GTFVTSElORyk7Ci0KLSAgLyogdGhlIGNvbWJpbmVkIGZsb3cgaXMgX0ZMVVNISU5HICovCi0gIHJldCA9IGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93IChjb21iaW5lciwgR1NUX0ZMT1dfRkxVU0hJTkcpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChyZXQsIEdTVF9GTE9XX0ZMVVNISU5HKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0KLSAgLyogYWRkIG9uZSBtb3JlIHBhZCBhbmQgbWFrZSBpdCByZXR1cm4gX09LICovCi0gIHBhZCA9IGdzdF9wYWRfbmV3ICgic3JjMiIsIEdTVF9QQURfU1JDKTsKLSAgcGVlciA9IGdzdF9wYWRfbmV3ICgic2luazIiLCBHU1RfUEFEX1NJTkspOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocGVlciwgX3NpbmtfY2hhaW4pOwotICBnc3RfcGFkX2xpbmsgKHBhZCwgcGVlcik7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGVlciwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0MiIpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgZ3N0X2Zsb3dfY29tYmluZXJfYWRkX3BhZCAoY29tYmluZXIsIHBhZCk7Ci0gIHNpbmtfZmxvd3JldCA9IEdTVF9GTE9XX09LOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpLCBHU1RfRkxPV19PSyk7Ci0KLSAgLyogdGhlIGNvbWJpbmVkIGZsb3cgaXMgX0ZMVVNISU5HIGJlY2F1c2Ugb2YgdGhlIGZpcnN0IHBhZCAqLwotICByZXQgPSBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfZmxvdyAoY29tYmluZXIsIEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocmV0LCBHU1RfRkxPV19GTFVTSElORyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotCi0gIC8qIGNsZWFyIHRoZSBjb21iaW5lciAqLwotICBnc3RfZmxvd19jb21iaW5lcl9jbGVhciAoY29tYmluZXIpOwotCi0gIC8qIGFkZCBhIHBhZCBhbmQgbWFrZSBpdCByZXR1cm4gX09LICovCi0gIHBhZCA9IGdzdF9wYWRfbmV3ICgic3JjMyIsIEdTVF9QQURfU1JDKTsKLSAgcGVlciA9IGdzdF9wYWRfbmV3ICgic2luazMiLCBHU1RfUEFEX1NJTkspOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocGVlciwgX3NpbmtfY2hhaW4pOwotICBnc3RfcGFkX2xpbmsgKHBhZCwgcGVlcik7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGVlciwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0MyIpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgZ3N0X2Zsb3dfY29tYmluZXJfYWRkX3BhZCAoY29tYmluZXIsIHBhZCk7Ci0gIHNpbmtfZmxvd3JldCA9IEdTVF9GTE9XX09LOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKHBhZCwgZ3N0X2J1ZmZlcl9uZXcgKCkpLCBHU1RfRkxPV19PSyk7Ci0KLSAgLyogdGhlIGNvbWJpbmVkIGZsb3cgaXMgX09LIHNpbmNlIHRoZSBvdGhlciBwYWRzIGhhdmUgYmVlbiByZW1vdmVkICovCi0gIHJldCA9IGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93IChjb21iaW5lciwgR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChyZXQsIEdTVF9GTE9XX09LKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0KLSAgZ3N0X2Zsb3dfY29tYmluZXJfZnJlZSAoY29tYmluZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1mbG93X2NvbWJpbmVyX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkdzdEZsb3dDb21iaW5lciIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jb21iaW5lZF9mbG93cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jbGVhcik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChmbG93X2NvbWJpbmVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0aGFybmVzcy5jIGIvdGVzdHMvY2hlY2svbGlicy9nc3RoYXJuZXNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZDAwM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9nc3RoYXJuZXNzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqIFRlc3RzIGFuZCBleGFtcGxlcyBvZiBHc3RIYXJuZXNzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEhhdmFyZCBHcmFmZiA8aGF2YXJkQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLQotc3RhdGljIHZvaWQKLWNyZWF0ZV9kZXN0cm95X2VsZW1lbnRfaGFybmVzcyAoZ3BvaW50ZXIgZGF0YSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gdXNlcl9kYXRhOwotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3X3dpdGhfZWxlbWVudCAoZWxlbWVudCwgTlVMTCwgTlVMTCk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaGFybmVzc19lbGVtZW50X3JlZikKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoImlkZW50aXR5Iik7Ci0gIEdzdEhhcm5lc3NUaHJlYWQgKnRocmVhZHNbMTAwXTsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRocmVhZHMpOyBpKyspCi0gICAgdGhyZWFkc1tpXSA9IGdzdF9oYXJuZXNzX3N0cmVzc19jdXN0b21fc3RhcnQgKGgsIE5VTEwsCi0gICAgICAgIGNyZWF0ZV9kZXN0cm95X2VsZW1lbnRfaGFybmVzcywgaC0+ZWxlbWVudCwgMCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRocmVhZHMpOyBpKyspCi0gICAgZ3N0X2hhcm5lc3Nfc3RyZXNzX3RocmVhZF9zdG9wICh0aHJlYWRzW2ldKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHX09CSkVDVCAoaC0+ZWxlbWVudCktPnJlZl9jb3VudCwgMSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3JjX2hhcm5lc3MpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJpZGVudGl0eSIpOwotCi0gIC8qIGFkZCBhIGZha2VzcmMgdGhhdCBzeW5jcyB0byB0aGUgY2xvY2sgYW5kIGEKLSAgICAgY2Fwc2ZpbHRlciB0aGF0IGFkZHMgc29tZSBjYXBzIHRvIGl0ICovCi0gIGdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2UgKGgsCi0gICAgICAiZmFrZXNyYyBzeW5jPTEgISBjYXBzZmlsdGVyIGNhcHM9XCJteWNhcHNcIiIsIFRSVUUpOwotCi0gIC8qIHRoaXMgY3JhbmtzIHRoZSBjbG9jayBhbmQgdHJhbnNmZXJzIHRoZSByZXN1bHRpbmcgYnVmZmVyCi0gICAgIGZyb20gdGhlIHNyYy1oYXJuZXNzIGludG8gdGhlIGlkZW50aXR5IGVsZW1lbnQgKi8KLSAgZ3N0X2hhcm5lc3NfcHVzaF9mcm9tX3NyYyAoaCk7Ci0KLSAgLyogdmVyaWZ5IHRoYXQgaWRlbnRpdHkgb3V0cHV0cyBhIGJ1ZmZlciBieSBwdWxsaW5nIGFuZCB1bnJlZmZpbmcgKi8KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbCAoaCkpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zcmNfaGFybmVzc19ub19mb3J3YXJkaW5nKQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgiaWRlbnRpdHkiKTsKLQotICAvKiB0dXJuIG9mIGZvcndhcmRpbmcgb2YgbmVjZXNzYXJ5IGV2ZW50cyAqLwotICBnc3RfaGFybmVzc19zZXRfZm9yd2FyZGluZyAoaCwgRkFMU0UpOwotCi0gIC8qIGFkZCBhIGZha2VzcmMgdGhhdCBzeW5jcyB0byB0aGUgY2xvY2sgYW5kIGEKLSAgICAgY2Fwc2ZpbHRlciB0aGF0IGFkZHMgc29tZSBjYXBzIHRvIGl0ICovCi0gIGdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2UgKGgsCi0gICAgICAiZmFrZXNyYyBzeW5jPTEgISBjYXBzZmlsdGVyIGNhcHM9XCJteWNhcHNcIiIsIFRSVUUpOwotCi0gIC8qIHN0YXJ0IHRoZSBmYWtlc3JjIHRvIHByb2R1Y2UgdGhlIGZpcnN0IGV2ZW50cyAqLwotICBnc3RfaGFybmVzc19wbGF5IChoLT5zcmNfaGFybmVzcyk7Ci0KLSAgLyogdHJhbnNmZXIgU1RSRUFNX1NUQVJUIGV2ZW50ICovCi0gIGdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50IChoKTsKLQotICAvKiBjcmFuayB0aGUgY2xvY2sgdG8gcHJvZHVjZSB0aGUgQ0FQUyBhbmQgU0VHTUVOVCBldmVudHMgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgtPnNyY19oYXJuZXNzKTsKLQotICAvKiB0cmFuc2ZlciBDQVBTIGV2ZW50ICovCi0gIGdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50IChoKTsKLQotICAvKiB0cmFuc2ZlciBTRUdNRU5UIGV2ZW50ICovCi0gIGdzdF9oYXJuZXNzX3NyY19wdXNoX2V2ZW50IChoKTsKLQotICAvKiBub3cgdHJhbnNmZXIgdGhlIGJ1ZmZlciBwcm9kdWNlZCBieSBleHBsb2l0aW5nCi0gICAgIHRoZSBhYmlsaXR5IHRvIHNheSAwIGNyYW5rcyBidXQgMSBwdXNoICovCi0gIGdzdF9oYXJuZXNzX3NyY19jcmFua19hbmRfcHVzaF9tYW55IChoLCAwLCAxKTsKLQotICAvKiBhbmQgdmVyaWZ5IHRoYXQgdGhlIGlkZW50aXR5IGVsZW1lbnQgb3V0cHV0cyBpdCAqLwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FkZF9zaW5rX2hhcm5lc3Nfd2l0aG91dF9zaW5rcGFkKQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgiZmFrZXNpbmsiKTsKLQotICBnc3RfaGFybmVzc19hZGRfc2luayAoaCwgImZha2VzaW5rIik7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RFdmVudCAqCi1jcmVhdGVfbmV3X3N0cmVhbV9zdGFydF9ldmVudCAoR3N0SGFybmVzcyAqIGgsIGdwb2ludGVyIGRhdGEpCi17Ci0gIGd1aW50ICpjb3VudGVyID0gZGF0YTsKLSAgZ2NoYXIgKnN0cmVhbV9pZCA9IGdfc3RyZHVwX3ByaW50ZiAoInN0cmVhbWlkLyVkIiwgKmNvdW50ZXIpOwotICBHc3RFdmVudCAqZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc3RyZWFtX2lkKTsKLSAgZ19mcmVlIChzdHJlYW1faWQpOwotICAoKmNvdW50ZXIpKys7Ci0gIHJldHVybiBldmVudDsKLX0KLQotc3RhdGljIHZvaWQKLXB1c2hfcXVlcnkgKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IHVzZXJfZGF0YTsKLSAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJteWNhcHMiKTsKLSAgR3N0UXVlcnkgKnF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uIChjYXBzLCBGQUxTRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X3BhZF9wZWVyX3F1ZXJ5IChoLT5zcmNwYWQsIHF1ZXJ5KTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZvcndhcmRfZXZlbnRfYW5kX3F1ZXJ5X3RvX3NpbmtfaGFybmVzc193aGlsZV90ZWFyZG93bikKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoImlkZW50aXR5Iik7Ci0gIGd1aW50IGNvdW50ZXIgPSAwOwotICBHc3RIYXJuZXNzVGhyZWFkICplX3RocmVhZCA9IGdzdF9oYXJuZXNzX3N0cmVzc19wdXNoX2V2ZW50X3dpdGhfY2Jfc3RhcnQgKGgsCi0gICAgICBjcmVhdGVfbmV3X3N0cmVhbV9zdGFydF9ldmVudCwgJmNvdW50ZXIsIE5VTEwpOwotICBHc3RIYXJuZXNzVGhyZWFkICpxX3RocmVhZCA9IGdzdF9oYXJuZXNzX3N0cmVzc19jdXN0b21fc3RhcnQgKGgsIE5VTEwsCi0gICAgICBwdXNoX3F1ZXJ5LCBoLCAwKTsKLSAgZ2RvdWJsZSBkdXJhdGlvbiA9IDEuMDsKLSAgR1RpbWVyICp0aW1lciA9IGdfdGltZXJfbmV3ICgpOwotCi0gIHdoaWxlIChnX3RpbWVyX2VsYXBzZWQgKHRpbWVyLCBOVUxMKSA8IGR1cmF0aW9uKSB7Ci0gICAgZ3N0X2hhcm5lc3NfYWRkX3NpbmsgKGgsICJmYWtlc2luayIpOwotICAgIGdfdGhyZWFkX3lpZWxkICgpOwotICB9Ci0KLSAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7Ci0gIGdzdF9oYXJuZXNzX3N0cmVzc190aHJlYWRfc3RvcCAocV90aHJlYWQpOwotICBnc3RfaGFybmVzc19zdHJlc3NfdGhyZWFkX3N0b3AgKGVfdGhyZWFkKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfaGFybmVzc19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RIYXJuZXNzIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImhhcm5lc3MiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaGFybmVzc19lbGVtZW50X3JlZik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zcmNfaGFybmVzcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zcmNfaGFybmVzc19ub19mb3J3YXJkaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9zaW5rX2hhcm5lc3Nfd2l0aG91dF9zaW5rcGFkKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sCi0gICAgICB0ZXN0X2ZvcndhcmRfZXZlbnRfYW5kX3F1ZXJ5X3RvX3NpbmtfaGFybmVzc193aGlsZV90ZWFyZG93bik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfaGFybmVzcyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL2dzdGxpYnNjcHAuY2MgYi90ZXN0cy9jaGVjay9saWJzL2dzdGxpYnNjcHAuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZTI1ODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9nc3RsaWJzY3BwLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2NoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvYmFzZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2NvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxnc3QvbmV0L25ldC5oPgotCi0vKiB3ZSBtb3N0bHkganVzdCB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBsaWJyYXJ5IGhlYWRlcnMgZG9uJ3QKLSAqIGNvbnRhaW4gYW55dGhpbmcgYSBDKysgY29tcGlsZXIgbWlnaHQgbm90IGxpa2UgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vdGhpbmcpCi17Ci0gIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbml0X21hY3JvcykKLXsKLSAgR3N0Qml0UmVhZGVyIGJpdF9yZWFkZXIgPSBHU1RfQklUX1JFQURFUl9JTklUIChOVUxMLCAwKTsKLSAgR3N0Qnl0ZVJlYWRlciBieXRlX3JlYWRlciA9IEdTVF9CWVRFX1JFQURFUl9JTklUIChOVUxMLCAwKTsKLQotICBmYWlsX3VubGVzcyAoYml0X3JlYWRlci5kYXRhID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoYnl0ZV9yZWFkZXIuZGF0YSA9PSBOVUxMKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotbGlic2NwcF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RMaWJzQ3BwIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoIkMrKyBsaWJzIGhlYWRlciB0ZXN0cyIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm90aGluZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbml0X21hY3Jvcyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChsaWJzY3BwKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYyBiL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0Y2xpZW50Y2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzNGRjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9saWJzL2dzdG5ldGNsaWVudGNsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICoKLSAqIGdzdG5ldGNsaWVudGNsb2NrLmM6IFVuaXQgdGVzdCBmb3IgdGhlIG5ldHdvcmsgY2xpZW50IGNsb2NrCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0Lmg+Ci0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW5zdGFudGlhdGlvbikKLXsKLSAgR3N0Q2xvY2sgKmNsaWVudCwgKmxvY2FsOwotCi0gIGxvY2FsID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGNsaWVudCA9IGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyAoTlVMTCwgIjEyNy4wLjAuMSIsIDEyMzQsIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAobG9jYWwgIT0gTlVMTCwgImZhaWxlZCB0byBnZXQgc3lzdGVtIGNsb2NrIik7Ci0gIGZhaWxfdW5sZXNzIChjbGllbnQgIT0gTlVMTCwgImZhaWxlZCB0byBnZXQgbmV0d29yayBjbGllbnQgY2xvY2siKTsKLQotICAvKiBvbmUgZm9yIGdzdHJlYW1lciwgb25lIGZvciB1cyAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChsb2NhbCwgInN5c3RlbSBjbG9jayIsIDIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChjbGllbnQsICJuZXR3b3JrIGNsaWVudCBjbG9jayIsIDEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNsaWVudCk7Ci0KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAobG9jYWwsICJzeXN0ZW0gY2xvY2siLCAyKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChsb2NhbCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZnVuY3Rpb25pbmcpCi17Ci0gIEdzdE5ldFRpbWVQcm92aWRlciAqbnRwOwotICBHc3RDbG9jayAqY2xpZW50LCAqc2VydmVyOwotICBHc3RDbG9ja1RpbWUgYmFzZXgsIGJhc2V5LCByYXRlX251bSwgcmF0ZV9kZW5vbTsKLSAgR3N0Q2xvY2tUaW1lIHNlcnZ0aW1lLCBjbGllbnR0aW1lLCBkaWZmOwotICBnaW50IHBvcnQ7Ci0gIGdjaGFyIHNpZ247Ci0KLSAgc2VydmVyID0gZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCk7Ci0gIGZhaWxfdW5sZXNzIChzZXJ2ZXIgIT0gTlVMTCwgImZhaWxlZCB0byBnZXQgc3lzdGVtIGNsb2NrIik7Ci0KLSAgLyogbW92ZSB0aGUgY2xvY2sgYWhlYWQgMTAwIHNlY29uZHMgKi8KLSAgZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbiAoc2VydmVyLCAmYmFzZXgsICZiYXNleSwgJnJhdGVfbnVtLCAmcmF0ZV9kZW5vbSk7Ci0gIGJhc2V5ICs9IDEwMCAqIEdTVF9TRUNPTkQ7Ci0gIGdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24gKHNlcnZlciwgYmFzZXgsIGJhc2V5LCByYXRlX251bSwgcmF0ZV9kZW5vbSk7Ci0KLSAgbnRwID0gZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyAoc2VydmVyLCAiMTI3LjAuMC4xIiwgMCk7Ci0gIGZhaWxfdW5sZXNzIChudHAgIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgbmV0d29yayB0aW1lIHByb3ZpZGVyIik7Ci0KLSAgZ19vYmplY3RfZ2V0IChudHAsICJwb3J0IiwgJnBvcnQsIE5VTEwpOwotCi0gIGNsaWVudCA9IGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyAoTlVMTCwgIjEyNy4wLjAuMSIsIHBvcnQsIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoY2xpZW50ICE9IE5VTEwsICJmYWlsZWQgdG8gZ2V0IG5ldHdvcmsgY2xpZW50IGNsb2NrIik7Ci0KLSAgZ19vYmplY3RfZ2V0IChjbGllbnQsICJwb3J0IiwgJnBvcnQsIE5VTEwpOwotCi0gIC8qIGxldCB0aGUgY2xvY2tzIHN5bmNocm9uaXplICovCi0gIGdzdF9jbG9ja193YWl0X2Zvcl9zeW5jIChHU1RfQ0xPQ0sgKGNsaWVudCksIEdTVF9TRUNPTkQpOwotCi0gIHNlcnZ0aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChzZXJ2ZXIpOwotICBjbGllbnR0aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbGllbnQpOwotCi0gIGlmIChzZXJ2dGltZSA+IGNsaWVudHRpbWUpIHsKLSAgICBzaWduID0gJy0nOwotICAgIGRpZmYgPSBzZXJ2dGltZSAtIGNsaWVudHRpbWU7Ci0gIH0gZWxzZSB7Ci0gICAgc2lnbiA9ICcrJzsKLSAgICBkaWZmID0gY2xpZW50dGltZSAtIHNlcnZ0aW1lOwotICB9Ci0KLSAgR1NUX0xPRyAoInNlcnZlciB0aW1lOiAgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzZXJ2dGltZSkpOwotICBHU1RfTE9HICgiY2xpZW50IHRpbWU6ICAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGNsaWVudHRpbWUpKTsKLSAgR1NUX0xPRyAoImRpZmYgICAgICAgOiAlYyUiIEdTVF9USU1FX0ZPUk1BVCwgc2lnbiwgR1NUX1RJTUVfQVJHUyAoZGlmZikpOwotCi0gIC8qIGNhbid0IGluIGdlbmVyYWwgbWFrZSBhIHByZWNpc2UgYXNzZXJ0aW9uIGhlcmUsIGJlY2F1c2UgdGhpcyBkZXBlbmRzIG9uCi0gICAqIHN5c3RlbSBsb2FkIGFuZCBhIGxvdCBvZiB0aGluZ3MuIGhvd2V2ZXIgd2l0aGluIGhhbGYgYSBzZWNvbmQgdGhleSBzaG91bGQKLSAgICogYXQgbGVhc3QgYmUgd2l0aGluIDEvMTAgb2YgYSBzZWNvbmQgb2YgZWFjaCBvdGhlci4uLiAqLwotICBpZiAoZGlmZiA+IDEwMCAqIEdTVF9NU0VDT05EKQotICAgIGZhaWwgKCJjbG9ja3Mgbm90IGluIHN5bmMgKCUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsIGRpZmYpOwotCi0gIC8qCi0gICAgIGdfcHJpbnQgKCJkaWZmOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgIEdTVF9USU1FX0FSR1MgKHNlcnZ0aW1lID4gY2xpZW50dGltZSA/IHNlcnZ0aW1lIC0gY2xpZW50dGltZQotICAgICA6IGNsaWVudHRpbWUgLSBzZXJ2dGltZSkpOwotICAgKi8KLQotICAvKiBvbmUgZm9yIGdzdHJlYW1lciwgb25lIGZvciBudHAsIG9uZSBmb3IgdXMgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2VydmVyLCAic3lzdGVtIGNsb2NrIiwgMyk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGNsaWVudCwgIm5ldHdvcmsgY2xpZW50IGNsb2NrIiwgMSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobnRwKTsKLQotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzZXJ2ZXIsICJzeXN0ZW0gY2xvY2siLCAyKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjbGllbnQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzZXJ2ZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfbmV0X2NsaWVudF9jbG9ja19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3ROZXRDbGllbnRDbG9jayIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmljIHRlc3RzIik7Ci0KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2luc3RhbnRpYXRpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZnVuY3Rpb25pbmcpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X25ldF9jbGllbnRfY2xvY2spOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0bmV0dGltZXByb3ZpZGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYTJiZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9nc3RuZXR0aW1lcHJvdmlkZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0gKgotICogZ3N0bmV0dGltZXByb3ZpZGVyLmM6IFVuaXQgdGVzdCBmb3IgdGhlIG5ldHdvcmsgdGltZSBwcm92aWRlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldC5oPgotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlZmNvdW50cykKLXsKLSAgR3N0TmV0VGltZVByb3ZpZGVyICpudHA7Ci0gIEdzdENsb2NrICpjbG9jazsKLQotICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBmYWlsX3VubGVzcyAoY2xvY2sgIT0gTlVMTCwgImZhaWxlZCB0byBnZXQgc3lzdGVtIGNsb2NrIik7Ci0KLSAgLyogb25lIGZvciBnc3RyZWFtZXIsIG9uZSBmb3IgdXMgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoY2xvY2ssICJzeXN0ZW0gY2xvY2siLCAyKTsKLQotICBudHAgPSBnc3RfbmV0X3RpbWVfcHJvdmlkZXJfbmV3IChjbG9jaywgTlVMTCwgMCk7Ci0gIGZhaWxfdW5sZXNzIChudHAgIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgbmV0IHRpbWUgcHJvdmlkZXIiKTsKLQotICAvKiBvbmUgZm9yIG50cCwgb25lIGZvciBnc3RyZWFtZXIsIG9uZSBmb3IgdXMgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoY2xvY2ssICJzeXN0ZW0gY2xvY2siLCAzKTsKLSAgLyogb25lIGZvciB1cyAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChudHAsICJuZXQgdGltZSBwcm92aWRlciIsIDEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG50cCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGNsb2NrLCAibmV0IHRpbWUgcHJvdmlkZXIiLCAyKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZnVuY3Rpb25pbmcpCi17Ci0gIEdzdE5ldFRpbWVQcm92aWRlciAqbnRwOwotICBHc3ROZXRUaW1lUGFja2V0ICpwYWNrZXQ7Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tUaW1lIGxvY2FsOwotICBHU29ja2V0QWRkcmVzcyAqc2VydmVyX2FkZHI7Ci0gIEdJbmV0QWRkcmVzcyAqYWRkcjsKLSAgR1NvY2tldCAqc29ja2V0OwotICBnaW50IHBvcnQgPSAtMTsKLQotICBjbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBmYWlsX3VubGVzcyAoY2xvY2sgIT0gTlVMTCwgImZhaWxlZCB0byBnZXQgc3lzdGVtIGNsb2NrIik7Ci0gIG50cCA9IGdzdF9uZXRfdGltZV9wcm92aWRlcl9uZXcgKGNsb2NrLCAiMTI3LjAuMC4xIiwgMCk7Ci0gIGZhaWxfdW5sZXNzIChudHAgIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgbmV0IHRpbWUgcHJvdmlkZXIiKTsKLQotICBnX29iamVjdF9nZXQgKG50cCwgInBvcnQiLCAmcG9ydCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwb3J0ID4gMCk7Ci0KLSAgc29ja2V0ID0gZ19zb2NrZXRfbmV3IChHX1NPQ0tFVF9GQU1JTFlfSVBWNCwgR19TT0NLRVRfVFlQRV9EQVRBR1JBTSwKLSAgICAgIEdfU09DS0VUX1BST1RPQ09MX1VEUCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzb2NrZXQgIT0gTlVMTCwgImNvdWxkIG5vdCBjcmVhdGUgc29ja2V0Iik7Ci0KLSAgYWRkciA9IGdfaW5ldF9hZGRyZXNzX25ld19mcm9tX3N0cmluZyAoIjEyNy4wLjAuMSIpOwotICBzZXJ2ZXJfYWRkciA9IGdfaW5ldF9zb2NrZXRfYWRkcmVzc19uZXcgKGFkZHIsIHBvcnQpOwotICBnX29iamVjdF91bnJlZiAoYWRkcik7Ci0KLSAgcGFja2V0ID0gZ3N0X25ldF90aW1lX3BhY2tldF9uZXcgKE5VTEwpOwotICBmYWlsX3VubGVzcyAocGFja2V0ICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlIHBhY2tldCIpOwotCi0gIHBhY2tldC0+bG9jYWxfdGltZSA9IGxvY2FsID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZCAocGFja2V0LCBzb2NrZXQsIHNlcnZlcl9hZGRyLCBOVUxMKSk7Ci0KLSAgZ19mcmVlIChwYWNrZXQpOwotCi0gIHBhY2tldCA9IGdzdF9uZXRfdGltZV9wYWNrZXRfcmVjZWl2ZSAoc29ja2V0LCBOVUxMLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAocGFja2V0ICE9IE5VTEwsICJmYWlsZWQgdG8gcmVjZWl2ZSBwYWNrZXQiKTsKLSAgZmFpbF91bmxlc3MgKHBhY2tldC0+bG9jYWxfdGltZSA9PSBsb2NhbCwgImxvY2FsIHRpbWUgaXMgbm90IHRoZSBzYW1lIik7Ci0gIGZhaWxfdW5sZXNzIChwYWNrZXQtPnJlbW90ZV90aW1lID4gbG9jYWwsICJyZW1vdGUgdGltZSBub3QgYWZ0ZXIgbG9jYWwgdGltZSIpOwotICBmYWlsX3VubGVzcyAocGFja2V0LT5yZW1vdGVfdGltZSA8IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spLAotICAgICAgInJlbW90ZSB0aW1lIGluIHRoZSBmdXR1cmUiKTsKLQotICBnX2ZyZWUgKHBhY2tldCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHNvY2tldCk7Ci0gIGdfb2JqZWN0X3VucmVmIChzZXJ2ZXJfYWRkcik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobnRwKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfbmV0X3RpbWVfcHJvdmlkZXJfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0TmV0VGltZVByb3ZpZGVyIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyaWMgdGVzdHMiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZmNvdW50cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mdW5jdGlvbmluZyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnc3RfbmV0X3RpbWVfcHJvdmlkZXIpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9nc3R0ZXN0Y2xvY2suYyBiL3Rlc3RzL2NoZWNrL2xpYnMvZ3N0dGVzdGNsb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjExNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9nc3R0ZXN0Y2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDEwNzkgKzAsMCBAQAotLyoKLSAqIFVuaXQgdGVzdCBmb3IgYSBkZXRlcm1pbmlzdGljIGNsb2NrIGZvciBHc3RyZWFtZXIgdW5pdCB0ZXN0cwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYmFzdGlhbi5yYXNtdXNzZW5AYXhpcy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3R0ZXN0Y2xvY2suaD4KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrOwotICBHc3RDbG9ja0lEIGlkOwotICBHc3RDbG9ja1RpbWUgcmVmZXJlbmNlOwotfSBHdHVDbG9ja1dhaXRDb250ZXh0OwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja1RpbWVEaWZmIGppdHRlcjsKLX0gU3luY0Nsb2NrV2FpdENvbnRleHQ7Ci0KLSNkZWZpbmUgYXNzZXJ0X3BlbmRpbmdfaWQocGVuZGluZ19pZCwgaWQsIHR5cGUsIHRpbWUpIFwKLUdfU1RNVF9TVEFSVCB7IFwKLSAgR3N0Q2xvY2tFbnRyeSAqZW50cnkgPSBHU1RfQ0xPQ0tfRU5UUlkgKHBlbmRpbmdfaWQpOyBcCi0gIGdfYXNzZXJ0IChlbnRyeSA9PSAoaWQpKTsgXAotICBnX2Fzc2VydCAoR1NUX0NMT0NLX0VOVFJZX1RZUEUgKGVudHJ5KSA9PSAodHlwZSkpOyBcCi0gIGdfYXNzZXJ0X2NtcHVpbnQgKEdTVF9DTE9DS19FTlRSWV9USU1FIChlbnRyeSksID09LCAodGltZSkpOyBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBhc3NlcnRfcHJvY2Vzc2VkX2lkKHByb2Nlc3NlZF9pZCwgaWQsIHR5cGUsIHRpbWUpIFwKLUdfU1RNVF9TVEFSVCB7IFwKLSAgR3N0Q2xvY2tFbnRyeSAqZW50cnkgPSBHU1RfQ0xPQ0tfRU5UUlkgKHByb2Nlc3NlZF9pZCk7IFwKLSAgZ19hc3NlcnQgKGVudHJ5ID09IChpZCkpOyBcCi0gIGdfYXNzZXJ0IChHU1RfQ0xPQ0tfRU5UUllfVFlQRSAoZW50cnkpID09ICh0eXBlKSk7IFwKLSAgZ19hc3NlcnRfY21wdWludCAoR1NUX0NMT0NLX0VOVFJZX1NUQVRVUyAoZW50cnkpLCA9PSwgKHRpbWUpKTsgXAotfSBHX1NUTVRfRU5ECi0KLXN0YXRpYyBncG9pbnRlciB0ZXN0X3dhaXRfcGVuZGluZ19zaW5nbGVfc2hvdF9pZF9zeW5jX3dvcmtlciAoZ3BvaW50ZXIgZGF0YSk7Ci1zdGF0aWMgZ3BvaW50ZXIgdGVzdF93YWl0X3BlbmRpbmdfc2luZ2xlX3Nob3RfaWRfYXN5bmNfd29ya2VyIChncG9pbnRlciBkYXRhKTsKLXN0YXRpYyBncG9pbnRlciB0ZXN0X3dhaXRfcGVuZGluZ19wZXJpb2RpY19pZF93YWl0ZXJfdGhyZWFkIChncG9pbnRlciBkYXRhKTsKLXN0YXRpYyBnYm9vbGVhbiB0ZXN0X2FzeW5jX3dhaXRfY2IgKEdzdENsb2NrICogY2xvY2ssIEdzdENsb2NrVGltZSB0aW1lLAotICAgIEdzdENsb2NrSUQgaWQsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLXN0YXRpYyBHdHVDbG9ja1dhaXRDb250ZXh0ICpnc3RfdGVzdF91dGlsX3dhaXRfZm9yX2Nsb2NrX2lkX2JlZ2luIChHc3RUZXN0Q2xvY2sKLSAgICAqIGNsb2NrLCBHc3RDbG9ja0lEIGlkLCBHc3RDbG9ja1RpbWVEaWZmICogaml0dGVyKTsKLXN0YXRpYyBHc3RDbG9ja1JldHVybiBnc3RfdGVzdF91dGlsX3dhaXRfZm9yX2Nsb2NrX2lkX2VuZCAoR3R1Q2xvY2tXYWl0Q29udGV4dCAqCi0gICAgd2FpdF9jdHgpOwotc3RhdGljIGdib29sZWFuCi1nc3RfdGVzdF91dGlsX2Nsb2NrX3dhaXRfY29udGV4dF9oYXNfY29tcGxldGVkIChHdHVDbG9ja1dhaXRDb250ZXh0ICogd2FpdF9jdHgpOwotCi1zdGF0aWMgZ3BvaW50ZXIKLXRlc3Rfd2FpdF9wZW5kaW5nX3NpbmdsZV9zaG90X2lkX3N5bmNfd29ya2VyIChncG9pbnRlciBkYXRhKQotewotICBTeW5jQ2xvY2tXYWl0Q29udGV4dCAqY3R4ID0gZGF0YTsKLQotICBnc3RfY2xvY2tfaWRfd2FpdCAoY3R4LT5jbG9ja19pZCwgJmN0eC0+aml0dGVyKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdwb2ludGVyCi10ZXN0X3dhaXRfcGVuZGluZ19zaW5nbGVfc2hvdF9pZF9hc3luY193b3JrZXIgKGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWQgPSBkYXRhOwotCi0gIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAvIDEwKTsKLSAgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGNsb2NrX2lkLCB0ZXN0X2FzeW5jX3dhaXRfY2IsIE5VTEwsIE5VTEwpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXRlc3Rfd2FpdF9wZW5kaW5nX3BlcmlvZGljX2lkX3dhaXRlcl90aHJlYWQgKGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWQgPSBkYXRhOwotICBnc3RfY2xvY2tfaWRfd2FpdCAoY2xvY2tfaWQsIE5VTEwpOwotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdib29sZWFuCi10ZXN0X2FzeW5jX3dhaXRfY2IgKEdzdENsb2NrICogY2xvY2ssCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWUsIEdzdENsb2NrSUQgaWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQotICBnYm9vbGVhbiAqd2FpdF9jb21wbGV0ZSA9IHVzZXJfZGF0YTsKLQotICBpZiAod2FpdF9jb21wbGV0ZSAhPSBOVUxMKQotICAgICp3YWl0X2NvbXBsZXRlID0gVFJVRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEd0dUNsb2NrV2FpdENvbnRleHQgKgotZ3N0X3Rlc3RfdXRpbF93YWl0X2Zvcl9jbG9ja19pZF9iZWdpbiAoR3N0VGVzdENsb2NrICogdGVzdF9jbG9jaywgR3N0Q2xvY2tJRCBpZCwKLSAgICBHc3RDbG9ja1RpbWVEaWZmICogaml0dGVyKQotewotICBHdHVDbG9ja1dhaXRDb250ZXh0ICp3YWl0X2N0eDsKLQotICB3YWl0X2N0eCA9IGdfc2xpY2VfbmV3IChHdHVDbG9ja1dhaXRDb250ZXh0KTsKLSAgd2FpdF9jdHgtPnRlc3RfY2xvY2sgPSBnc3Rfb2JqZWN0X3JlZiAodGVzdF9jbG9jayk7Ci0gIHdhaXRfY3R4LT5yZWZlcmVuY2UgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAod2FpdF9jdHgtPnRlc3RfY2xvY2spKTsKLSAgd2FpdF9jdHgtPmlkID0gZ3N0X2Nsb2NrX2lkX3JlZiAoaWQpOwotCi0gIGlmIChqaXR0ZXIpIHsKLSAgICBHc3RDbG9ja0VudHJ5ICplbnRyeSA9IEdTVF9DTE9DS19FTlRSWSAod2FpdF9jdHgtPmlkKTsKLSAgICBHc3RDbG9ja1RpbWUgcmVxdWVzdGVkID0gR1NUX0NMT0NLX0VOVFJZX1RJTUUgKGVudHJ5KTsKLSAgICBHc3RDbG9ja1RpbWUgcmVmZXJlbmNlID0gd2FpdF9jdHgtPnJlZmVyZW5jZTsKLQotICAgICpqaXR0ZXIgPSBHU1RfQ0xPQ0tfRElGRiAocmVxdWVzdGVkLCByZWZlcmVuY2UpOwotICB9Ci0KLSAgaWYgKCFnc3RfdGVzdF9jbG9ja19oYXNfaWQgKHdhaXRfY3R4LT50ZXN0X2Nsb2NrLCB3YWl0X2N0eC0+aWQpKSB7Ci0gICAgR3N0Q2xvY2tDbGFzcyAqa2xhc3MgPSBHU1RfQ0xPQ0tfR0VUX0NMQVNTICh3YWl0X2N0eC0+dGVzdF9jbG9jayk7Ci0gICAgR3N0Q2xvY2sgKmNsb2NrID0gR1NUX0NMT0NLICh3YWl0X2N0eC0+dGVzdF9jbG9jayk7Ci0gICAgZ19hc3NlcnQgKGtsYXNzLT53YWl0X2FzeW5jIChjbG9jaywgd2FpdF9jdHgtPmlkKSA9PSBHU1RfQ0xPQ0tfT0spOwotICB9Ci0KLSAgZ19hc3NlcnQgKGdzdF90ZXN0X2Nsb2NrX2hhc19pZCAod2FpdF9jdHgtPnRlc3RfY2xvY2ssIHdhaXRfY3R4LT5pZCkpOwotICBnX2Fzc2VydF9jbXBpbnQgKGdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnQgKHdhaXRfY3R4LT50ZXN0X2Nsb2NrKSwgPiwgMCk7Ci0KLSAgcmV0dXJuIHdhaXRfY3R4OwotfQotCi1zdGF0aWMgR3N0Q2xvY2tSZXR1cm4KLWdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfZW5kIChHdHVDbG9ja1dhaXRDb250ZXh0ICogd2FpdF9jdHgpCi17Ci0gIEdzdENsb2NrUmV0dXJuIHN0YXR1cyA9IEdTVF9DTE9DS19FUlJPUjsKLSAgR3N0Q2xvY2tFbnRyeSAqZW50cnkgPSBHU1RfQ0xPQ0tfRU5UUlkgKHdhaXRfY3R4LT5pZCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9DTE9DS19FTlRSWV9TVEFUVVMgKGVudHJ5KSA9PSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpKSB7Ci0gICAgc3RhdHVzID0gR1NUX0NMT0NLX1VOU0NIRURVTEVEOwotICB9IGVsc2UgewotICAgIEdzdENsb2NrVGltZSByZXF1ZXN0ZWQgPSBHU1RfQ0xPQ0tfRU5UUllfVElNRSAoZW50cnkpOwotICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLQotICAgIGdfYXNzZXJ0IChnc3RfdGVzdF9jbG9ja19oYXNfaWQgKHdhaXRfY3R4LT50ZXN0X2Nsb2NrLCB3YWl0X2N0eC0+aWQpKTsKLQotICAgIGRpZmYgPSBHU1RfQ0xPQ0tfRElGRiAocmVxdWVzdGVkLCB3YWl0X2N0eC0+cmVmZXJlbmNlKTsKLQotICAgIGlmIChkaWZmID4gMCkgewotICAgICAgc3RhdHVzID0gR1NUX0NMT0NLX0VBUkxZOwotICAgIH0gZWxzZSB7Ci0gICAgICBzdGF0dXMgPSBHU1RfQ0xPQ0tfT0s7Ci0gICAgfQotCi0gICAgZ19hdG9taWNfaW50X3NldCAoJkdTVF9DTE9DS19FTlRSWV9TVEFUVVMgKGVudHJ5KSwgc3RhdHVzKTsKLSAgfQotCi0gIGlmIChHU1RfQ0xPQ0tfRU5UUllfVFlQRSAoZW50cnkpID09IEdTVF9DTE9DS19FTlRSWV9TSU5HTEUpIHsKLSAgICBHc3RDbG9ja0NsYXNzICprbGFzcyA9IEdTVF9DTE9DS19HRVRfQ0xBU1MgKHdhaXRfY3R4LT50ZXN0X2Nsb2NrKTsKLSAgICBHc3RDbG9jayAqY2xvY2sgPSBHU1RfQ0xPQ0sgKHdhaXRfY3R4LT50ZXN0X2Nsb2NrKTsKLQotICAgIGtsYXNzLT51bnNjaGVkdWxlIChjbG9jaywgd2FpdF9jdHgtPmlkKTsKLSAgICBnX2Fzc2VydCAoIWdzdF90ZXN0X2Nsb2NrX2hhc19pZCAod2FpdF9jdHgtPnRlc3RfY2xvY2ssIHdhaXRfY3R4LT5pZCkpOwotICB9IGVsc2UgewotICAgIEdTVF9DTE9DS19FTlRSWV9USU1FIChlbnRyeSkgKz0gR1NUX0NMT0NLX0VOVFJZX0lOVEVSVkFMIChlbnRyeSk7Ci0gICAgZ19hc3NlcnQgKGdzdF90ZXN0X2Nsb2NrX2hhc19pZCAod2FpdF9jdHgtPnRlc3RfY2xvY2ssIHdhaXRfY3R4LT5pZCkpOwotICB9Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmICh3YWl0X2N0eC0+aWQpOwotICBnc3Rfb2JqZWN0X3VucmVmICh3YWl0X2N0eC0+dGVzdF9jbG9jayk7Ci0gIGdfc2xpY2VfZnJlZSAoR3R1Q2xvY2tXYWl0Q29udGV4dCwgd2FpdF9jdHgpOwotCi0gIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Rlc3RfdXRpbF9jbG9ja193YWl0X2NvbnRleHRfaGFzX2NvbXBsZXRlZCAoR3R1Q2xvY2tXYWl0Q29udGV4dCAqIHdhaXRfY3R4KQotewotICBHc3RDbG9jayAqY2xvY2sgPSBHU1RfQ0xPQ0sgKHdhaXRfY3R4LT50ZXN0X2Nsb2NrKTsKLSAgR3N0Q2xvY2tFbnRyeSAqZW50cnkgPSBHU1RfQ0xPQ0tfRU5UUlkgKHdhaXRfY3R4LT5pZCk7Ci0gIEdzdENsb2NrVGltZSByZXF1ZXN0ZWQgPSBHU1RfQ0xPQ0tfRU5UUllfVElNRSAoZW50cnkpOwotICBHc3RDbG9ja1RpbWUgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0KLSAgcmV0dXJuIHJlcXVlc3RlZCA8IG5vdzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb2JqZWN0X2ZsYWdzKQotewotICBHc3RDbG9jayAqY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXcgKCk7Ci0gIGdfYXNzZXJ0IChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChjbG9jaywgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9TWU5DKSk7Ci0gIGdfYXNzZXJ0IChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChjbG9jaywgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9BU1lOQykpOwotICBnX2Fzc2VydCAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoY2xvY2ssCi0gICAgICAgICAgR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkMpKTsKLSAgZ19hc3NlcnQgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKGNsb2NrLAotICAgICAgICAgIEdTVF9DTE9DS19GTEFHX0NBTl9ET19QRVJJT0RJQ19BU1lOQykpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVzb2x1dGlvbl9xdWVyeSkKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrID0gZ3N0X3Rlc3RfY2xvY2tfbmV3ICgpOwotICBnX2Fzc2VydF9jbXB1aW50IChnc3RfY2xvY2tfZ2V0X3Jlc29sdXRpb24gKGNsb2NrKSwgPT0sIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RhcnRfdGltZSkKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBndWludDY0IHN0YXJ0X3RpbWU7Ci0KLSAgY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXcgKCk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spLCA9PSwgMCk7Ci0gIGdfb2JqZWN0X2dldCAoY2xvY2ssICJzdGFydC10aW1lIiwgJnN0YXJ0X3RpbWUsIE5VTEwpOwotICBnX2Fzc2VydF9jbXB1aW50IChzdGFydF90aW1lLCA9PSwgMCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotICBnX2Fzc2VydF9jbXB1aW50IChnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSwgPT0sIEdTVF9TRUNPTkQpOwotICBnX29iamVjdF9nZXQgKGNsb2NrLCAic3RhcnQtdGltZSIsICZzdGFydF90aW1lLCBOVUxMKTsKLSAgZ19hc3NlcnRfY21wdWludCAoc3RhcnRfdGltZSwgPT0sIEdTVF9TRUNPTkQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2V0X3RpbWUpCi17Ci0gIEdzdENsb2NrICpjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAoR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKSwgR1NUX1NFQ09ORCk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spLCA9PSwgR1NUX1NFQ09ORCk7Ci0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spLCBHU1RfU0VDT05EICsgMSk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spLCA9PSwgR1NUX1NFQ09ORCArIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWR2YW5jZV90aW1lKQotewotICBHc3RDbG9jayAqY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lIChHU1RfU0VDT05EKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spLCAwKTsKLSAgZ19hc3NlcnRfY21wdWludCAoZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayksID09LCBHU1RfU0VDT05EKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spLCA0MiAqIEdTVF9NU0VDT05EKTsKLSAgZ19hc3NlcnRfY21wdWludCAoZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayksID09LAotICAgICAgR1NUX1NFQ09ORCArICg0MiAqIEdTVF9NU0VDT05EKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93YWl0X3N5bmNocm9ub3VzX25vX3RpbWVvdXQpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHVGhyZWFkICp3b3JrZXJfdGhyZWFkOwotICBHc3RDbG9ja0lEIHBlbmRpbmdfaWQ7Ci0gIEdzdENsb2NrSUQgcHJvY2Vzc2VkX2lkOwotICBTeW5jQ2xvY2tXYWl0Q29udGV4dCBjb250ZXh0OwotCi0gIGNsb2NrID0gZ3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZSAoR1NUX1NFQ09ORCk7Ci0gIHRlc3RfY2xvY2sgPSBHU1RfVEVTVF9DTE9DSyAoY2xvY2spOwotCi0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIEdTVF9TRUNPTkQgLSAxKTsKLSAgY29udGV4dC5jbG9ja19pZCA9IGdzdF9jbG9ja19pZF9yZWYgKGNsb2NrX2lkKTsKLSAgY29udGV4dC5qaXR0ZXIgPSAwOwotICB3b3JrZXJfdGhyZWFkID0KLSAgICAgIGdfdGhyZWFkX25ldyAoIndvcmtlcl90aHJlYWQiLAotICAgICAgdGVzdF93YWl0X3BlbmRpbmdfc2luZ2xlX3Nob3RfaWRfc3luY193b3JrZXIsICZjb250ZXh0KTsKLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkICh0ZXN0X2Nsb2NrLCAmcGVuZGluZ19pZCk7Ci0gIGFzc2VydF9wZW5kaW5nX2lkIChwZW5kaW5nX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgICAgIEdTVF9TRUNPTkQgLSAxKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwZW5kaW5nX2lkKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkICh0ZXN0X2Nsb2NrKTsKLSAgYXNzZXJ0X3Byb2Nlc3NlZF9pZCAocHJvY2Vzc2VkX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgICAgIEdTVF9DTE9DS19FQVJMWSk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocHJvY2Vzc2VkX2lkKTsKLSAgZ190aHJlYWRfam9pbiAod29ya2VyX3RocmVhZCk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGNvbnRleHQuaml0dGVyLCA9PSwgMSk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY29udGV4dC5jbG9ja19pZCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotCi0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIEdTVF9TRUNPTkQpOwotICBjb250ZXh0LmNsb2NrX2lkID0gZ3N0X2Nsb2NrX2lkX3JlZiAoY2xvY2tfaWQpOwotICBjb250ZXh0LmppdHRlciA9IDA7Ci0gIHdvcmtlcl90aHJlYWQgPQotICAgICAgZ190aHJlYWRfbmV3ICgid29ya2VyX3RocmVhZCIsCi0gICAgICB0ZXN0X3dhaXRfcGVuZGluZ19zaW5nbGVfc2hvdF9pZF9zeW5jX3dvcmtlciwgJmNvbnRleHQpOwotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RfY2xvY2ssICZwZW5kaW5nX2lkKTsKLSAgYXNzZXJ0X3BlbmRpbmdfaWQgKHBlbmRpbmdfaWQsIGNsb2NrX2lkLCBHU1RfQ0xPQ0tfRU5UUllfU0lOR0xFLCBHU1RfU0VDT05EKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwZW5kaW5nX2lkKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkICh0ZXN0X2Nsb2NrKTsKLSAgYXNzZXJ0X3Byb2Nlc3NlZF9pZCAocHJvY2Vzc2VkX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgICAgIEdTVF9DTE9DS19PSyk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocHJvY2Vzc2VkX2lkKTsKLSAgZ190aHJlYWRfam9pbiAod29ya2VyX3RocmVhZCk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGNvbnRleHQuaml0dGVyLCA9PSwgMCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY29udGV4dC5jbG9ja19pZCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotCi0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIEdTVF9TRUNPTkQgKyAxKTsKLSAgY29udGV4dC5jbG9ja19pZCA9IGdzdF9jbG9ja19pZF9yZWYgKGNsb2NrX2lkKTsKLSAgY29udGV4dC5qaXR0ZXIgPSAwOwotICB3b3JrZXJfdGhyZWFkID0KLSAgICAgIGdfdGhyZWFkX25ldyAoIndvcmtlcl90aHJlYWQiLAotICAgICAgdGVzdF93YWl0X3BlbmRpbmdfc2luZ2xlX3Nob3RfaWRfc3luY193b3JrZXIsICZjb250ZXh0KTsKLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkICh0ZXN0X2Nsb2NrLCAmcGVuZGluZ19pZCk7Ci0gIGFzc2VydF9wZW5kaW5nX2lkIChwZW5kaW5nX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgICAgIEdTVF9TRUNPTkQgKyAxKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwZW5kaW5nX2lkKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkICh0ZXN0X2Nsb2NrKTsKLSAgZ19hc3NlcnQgKHByb2Nlc3NlZF9pZCA9PSBOVUxMKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lICh0ZXN0X2Nsb2NrLCAxKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkICh0ZXN0X2Nsb2NrKTsKLSAgYXNzZXJ0X3Byb2Nlc3NlZF9pZCAocHJvY2Vzc2VkX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgICAgIEdTVF9DTE9DS19PSyk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocHJvY2Vzc2VkX2lkKTsKLSAgZ190aHJlYWRfam9pbiAod29ya2VyX3RocmVhZCk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGNvbnRleHQuaml0dGVyLCA9PSwgLTEpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNvbnRleHQuY2xvY2tfaWQpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrX2lkKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfd2FpdF9wZW5kaW5nX3NpbmdsZV9zaG90X2lkKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jazsKLSAgR3N0Q2xvY2tJRCBjbG9ja19pZDsKLSAgR3N0Q2xvY2tJRCBwcm9jZXNzZWRfaWQ7Ci0gIEdUaHJlYWQgKndvcmtlcl90aHJlYWQ7Ci0gIEdzdENsb2NrSUQgcGVuZGluZ19pZDsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotICB0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLQotICBjbG9ja19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBHU1RfU0VDT05EKTsKLSAgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGNsb2NrX2lkLCB0ZXN0X2FzeW5jX3dhaXRfY2IsIE5VTEwsIE5VTEwpOwotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RfY2xvY2ssICZwZW5kaW5nX2lkKTsKLSAgYXNzZXJ0X3BlbmRpbmdfaWQgKHBlbmRpbmdfaWQsIGNsb2NrX2lkLCBHU1RfQ0xPQ0tfRU5UUllfU0lOR0xFLCBHU1RfU0VDT05EKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwZW5kaW5nX2lkKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkICh0ZXN0X2Nsb2NrKTsKLSAgYXNzZXJ0X3Byb2Nlc3NlZF9pZCAocHJvY2Vzc2VkX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgICAgIEdTVF9DTE9DS19PSyk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocHJvY2Vzc2VkX2lkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0KLSAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgMiAqIEdTVF9TRUNPTkQpOwotICB3b3JrZXJfdGhyZWFkID0KLSAgICAgIGdfdGhyZWFkX25ldyAoIndvcmtlcl90aHJlYWQiLAotICAgICAgdGVzdF93YWl0X3BlbmRpbmdfc2luZ2xlX3Nob3RfaWRfYXN5bmNfd29ya2VyLCBjbG9ja19pZCk7Ci0gIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAodGVzdF9jbG9jaywgJnBlbmRpbmdfaWQpOwotICBhc3NlcnRfcGVuZGluZ19pZCAocGVuZGluZ19pZCwgY2xvY2tfaWQsIEdTVF9DTE9DS19FTlRSWV9TSU5HTEUsCi0gICAgICAyICogR1NUX1NFQ09ORCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocGVuZGluZ19pZCk7Ci0gIGdfdGhyZWFkX2pvaW4gKHdvcmtlcl90aHJlYWQpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrX2lkKTsKLQotICBjbG9ja19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCAzICogR1NUX1NFQ09ORCk7Ci0gIHdvcmtlcl90aHJlYWQgPQotICAgICAgZ190aHJlYWRfbmV3ICgid29ya2VyX3RocmVhZCIsCi0gICAgICB0ZXN0X3dhaXRfcGVuZGluZ19zaW5nbGVfc2hvdF9pZF9hc3luY193b3JrZXIsIGNsb2NrX2lkKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkICh0ZXN0X2Nsb2NrLCBOVUxMKTsKLSAgZ190aHJlYWRfam9pbiAod29ya2VyX3RocmVhZCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93YWl0X3BlbmRpbmdfcGVyaW9kaWNfaWQpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja0lEIHByb2Nlc3NlZF9pZDsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotICB0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLSAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkIChjbG9jaywgR1NUX1NFQ09ORCwgR1NUX01TRUNPTkQpOwotCi0gIHsKLSAgICBHVGhyZWFkICp3YWl0ZXJfdGhyZWFkOwotCi0gICAgd2FpdGVyX3RocmVhZCA9Ci0gICAgICAgIGdfdGhyZWFkX25ldyAoIndhaXRlcl90aHJlYWQiLAotICAgICAgICB0ZXN0X3dhaXRfcGVuZGluZ19wZXJpb2RpY19pZF93YWl0ZXJfdGhyZWFkLCBjbG9ja19pZCk7Ci0KLSAgICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RfY2xvY2ssIE5VTEwpOwotICAgIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0X2Nsb2NrLCBHU1RfU0VDT05EKTsKLSAgICBwcm9jZXNzZWRfaWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKHRlc3RfY2xvY2spOwotICAgIGFzc2VydF9wcm9jZXNzZWRfaWQgKHByb2Nlc3NlZF9pZCwgY2xvY2tfaWQsIEdTVF9DTE9DS19FTlRSWV9QRVJJT0RJQywKLSAgICAgICAgR1NUX0NMT0NLX09LKTsKLSAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHByb2Nlc3NlZF9pZCk7Ci0KLSAgICBnX3RocmVhZF9qb2luICh3YWl0ZXJfdGhyZWFkKTsKLSAgfQotCi0gIHsKLSAgICBndWludCBpOwotICAgIEdUaHJlYWQgKndhaXRlcl90aHJlYWQ7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICBnX2Fzc2VydCAoIWdzdF90ZXN0X2Nsb2NrX3BlZWtfbmV4dF9wZW5kaW5nX2lkICh0ZXN0X2Nsb2NrLCBOVUxMKSk7Ci0gICAgICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMgLyAxMCAvIDEwKTsKLSAgICB9Ci0KLSAgICB3YWl0ZXJfdGhyZWFkID0KLSAgICAgICAgZ190aHJlYWRfbmV3ICgid2FpdGVyX3RocmVhZCIsCi0gICAgICAgIHRlc3Rfd2FpdF9wZW5kaW5nX3BlcmlvZGljX2lkX3dhaXRlcl90aHJlYWQsIGNsb2NrX2lkKTsKLQotICAgIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAodGVzdF9jbG9jaywgTlVMTCk7Ci0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGNsb2NrX2lkKTsKLQotICAgIGdfdGhyZWFkX2pvaW4gKHdhaXRlcl90aHJlYWQpOwotICB9Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW5nbGVfc2hvdF9zeW5jX3Bhc3QpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja1RpbWVEaWZmIGppdHRlcjsKLSAgR3R1Q2xvY2tXYWl0Q29udGV4dCAqd2FpdF9jdHg7Ci0KLSAgY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lIChHU1RfU0VDT05EKTsKLSAgdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChjbG9jayk7Ci0KLSAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgR1NUX1NFQ09ORCAtIDEpOwotICB3YWl0X2N0eCA9Ci0gICAgICBnc3RfdGVzdF91dGlsX3dhaXRfZm9yX2Nsb2NrX2lkX2JlZ2luICh0ZXN0X2Nsb2NrLCBjbG9ja19pZCwgJmppdHRlcik7Ci0gIGdfYXNzZXJ0IChnc3RfdGVzdF91dGlsX3dhaXRfZm9yX2Nsb2NrX2lkX2VuZCAod2FpdF9jdHgpID09IEdTVF9DTE9DS19FQVJMWSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoaml0dGVyLCA9PSwgMSk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW5nbGVfc2hvdF9zeW5jX3ByZXNlbnQpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja1RpbWVEaWZmIGppdHRlcjsKLSAgR3R1Q2xvY2tXYWl0Q29udGV4dCAqd2FpdF9jdHg7Ci0KLSAgY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lIChHU1RfU0VDT05EKTsKLSAgdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChjbG9jayk7Ci0KLSAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgR1NUX1NFQ09ORCk7Ci0gIHdhaXRfY3R4ID0KLSAgICAgIGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfYmVnaW4gKHRlc3RfY2xvY2ssIGNsb2NrX2lkLCAmaml0dGVyKTsKLSAgZ19hc3NlcnQgKGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfZW5kICh3YWl0X2N0eCkgPT0gR1NUX0NMT0NLX09LKTsKLSAgZ19hc3NlcnRfY21waW50IChqaXR0ZXIsID09LCAwKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbmdsZV9zaG90X3N5bmNfZnV0dXJlKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jazsKLSAgR3N0Q2xvY2tJRCBjbG9ja19pZDsKLSAgR3N0Q2xvY2tUaW1lRGlmZiBqaXR0ZXI7Ci0gIEd0dUNsb2NrV2FpdENvbnRleHQgKndhaXRfY3R4OwotCi0gIGNsb2NrID0gZ3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZSAoR1NUX1NFQ09ORCk7Ci0gIHRlc3RfY2xvY2sgPSBHU1RfVEVTVF9DTE9DSyAoY2xvY2spOwotCi0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIDIgKiBHU1RfU0VDT05EKTsKLSAgd2FpdF9jdHggPQotICAgICAgZ3N0X3Rlc3RfdXRpbF93YWl0X2Zvcl9jbG9ja19pZF9iZWdpbiAodGVzdF9jbG9jaywgY2xvY2tfaWQsICZqaXR0ZXIpOwotICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKHRlc3RfY2xvY2ssIEdTVF9TRUNPTkQpOwotICBnX2Fzc2VydCAoZ3N0X3Rlc3RfdXRpbF93YWl0X2Zvcl9jbG9ja19pZF9lbmQgKHdhaXRfY3R4KSA9PSBHU1RfQ0xPQ0tfT0spOwotICBnX2Fzc2VydF9jbXBpbnQgKGppdHRlciwgPT0sIC1HU1RfU0VDT05EKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbmdsZV9zaG90X3N5bmNfdW5zY2hlZHVsZSkKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RfY2xvY2s7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gIEd0dUNsb2NrV2FpdENvbnRleHQgKndhaXRfY3R4OwotICBnYm9vbGVhbiB3YWl0X2NvbXBsZXRlID0gRkFMU0U7Ci0KLSAgY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lIChHU1RfU0VDT05EKTsKLSAgdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChjbG9jayk7Ci0KLSAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgR1NUX1NFQ09ORCk7Ci0gIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChjbG9ja19pZCk7Ci0gIC8qIGFueSB3YWl0IHNob3VsZCB0aW1lb3V0IGltbWVkaWF0ZWx5ICovCi0gIGdfYXNzZXJ0IChnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoY2xvY2tfaWQsIHRlc3RfYXN5bmNfd2FpdF9jYiwKLSAgICAgICAgICAmd2FpdF9jb21wbGV0ZSwgTlVMTCkgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKTsKLSAgZ19hc3NlcnQgKGdzdF9jbG9ja19pZF93YWl0IChjbG9ja19pZCwgTlVMTCkgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0KLSAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgMiAqIEdTVF9TRUNPTkQpOwotICB3YWl0X2N0eCA9IGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfYmVnaW4gKHRlc3RfY2xvY2ssIGNsb2NrX2lkLCBOVUxMKTsKLSAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGNsb2NrX2lkKTsKLSAgZ19hc3NlcnQgKGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfZW5kICh3YWl0X2N0eCkKLSAgICAgID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW5nbGVfc2hvdF9zeW5jX29yZGVyaW5nKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jazsKLSAgR3N0Q2xvY2tJRCBjbG9ja19pZF9hLCBjbG9ja19pZF9iOwotICBHdHVDbG9ja1dhaXRDb250ZXh0ICp3YWl0X2N0eF9hLCAqd2FpdF9jdHhfYjsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotICB0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLQotICBjbG9ja19pZF9hID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIDMgKiBHU1RfU0VDT05EKTsKLSAgd2FpdF9jdHhfYSA9Ci0gICAgICBnc3RfdGVzdF91dGlsX3dhaXRfZm9yX2Nsb2NrX2lkX2JlZ2luICh0ZXN0X2Nsb2NrLCBjbG9ja19pZF9hLCBOVUxMKTsKLQotICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKHRlc3RfY2xvY2ssIEdTVF9TRUNPTkQpOwotCi0gIGNsb2NrX2lkX2IgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgMiAqIEdTVF9TRUNPTkQpOwotICB3YWl0X2N0eF9iID0KLSAgICAgIGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfYmVnaW4gKHRlc3RfY2xvY2ssIGNsb2NrX2lkX2IsIE5VTEwpOwotCi0gIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAodGVzdF9jbG9jaywgR1NUX1NFQ09ORCk7Ci0KLSAgZ19hc3NlcnQgKGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfZW5kICh3YWl0X2N0eF9iKSA9PSBHU1RfQ0xPQ0tfT0spOwotICBnX2Fzc2VydCAoZ3N0X3Rlc3RfdXRpbF93YWl0X2Zvcl9jbG9ja19pZF9lbmQgKHdhaXRfY3R4X2EpID09IEdTVF9DTE9DS19PSyk7Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZF9iKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZF9hKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2luZ2xlX3Nob3Rfc3luY19vcmRlcmluZ19wYXJhbGxlbCkKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RfY2xvY2s7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWRfYSwgY2xvY2tfaWRfYjsKLSAgR3R1Q2xvY2tXYWl0Q29udGV4dCAqd2FpdF9jdHhfYSwgKndhaXRfY3R4X2I7Ci0KLSAgY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXdfd2l0aF9zdGFydF90aW1lIChHU1RfU0VDT05EKTsKLSAgdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChjbG9jayk7Ci0KLSAgY2xvY2tfaWRfYSA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCAzICogR1NUX1NFQ09ORCk7Ci0gIGNsb2NrX2lkX2IgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgMiAqIEdTVF9TRUNPTkQpOwotICB3YWl0X2N0eF9hID0gZ3N0X3Rlc3RfdXRpbF93YWl0X2Zvcl9jbG9ja19pZF9iZWdpbiAodGVzdF9jbG9jaywgY2xvY2tfaWRfYSwKLSAgICAgIE5VTEwpOwotICB3YWl0X2N0eF9iID0gZ3N0X3Rlc3RfdXRpbF93YWl0X2Zvcl9jbG9ja19pZF9iZWdpbiAodGVzdF9jbG9jaywgY2xvY2tfaWRfYiwKLSAgICAgIE5VTEwpOwotCi0gIGdfYXNzZXJ0X2NtcHVpbnQgKGdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWUgKHRlc3RfY2xvY2spLCA9PSwKLSAgICAgIDIgKiBHU1RfU0VDT05EKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lICh0ZXN0X2Nsb2NrLCBHU1RfU0VDT05EKTsKLSAgZ19hc3NlcnQgKGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfZW5kICh3YWl0X2N0eF9iKSA9PSBHU1RfQ0xPQ0tfT0spOwotCi0gIGdfYXNzZXJ0X2NtcHVpbnQgKGdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWUgKHRlc3RfY2xvY2spLCA9PSwKLSAgICAgIDMgKiBHU1RfU0VDT05EKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lICh0ZXN0X2Nsb2NrLCBHU1RfU0VDT05EKTsKLSAgZ19hc3NlcnQgKGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfZW5kICh3YWl0X2N0eF9hKSA9PSBHU1RfQ0xPQ0tfT0spOwotCi0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWRfYik7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWRfYSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbmdsZV9zaG90X3N5bmNfc2ltdWx0YW5lb3VzX25vX3RpbWVvdXQpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkX2E7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWRfYjsKLSAgU3luY0Nsb2NrV2FpdENvbnRleHQgY29udGV4dF9hOwotICBTeW5jQ2xvY2tXYWl0Q29udGV4dCBjb250ZXh0X2I7Ci0gIEdUaHJlYWQgKndvcmtlcl90aHJlYWRfYTsKLSAgR1RocmVhZCAqd29ya2VyX3RocmVhZF9iOwotICBHc3RDbG9ja0lEIHByb2Nlc3NlZF9pZDsKLSAgR3N0Q2xvY2tJRCBwZW5kaW5nX2lkOwotCi0gIGNsb2NrID0gZ3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZSAoR1NUX1NFQ09ORCk7Ci0gIHRlc3RfY2xvY2sgPSBHU1RfVEVTVF9DTE9DSyAoY2xvY2spOwotCi0gIGNsb2NrX2lkX2EgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgNSAqIEdTVF9TRUNPTkQpOwotICBjbG9ja19pZF9iID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIDYgKiBHU1RfU0VDT05EKTsKLQotICBjb250ZXh0X2EuY2xvY2tfaWQgPSBnc3RfY2xvY2tfaWRfcmVmIChjbG9ja19pZF9hKTsKLSAgY29udGV4dF9hLmppdHRlciA9IDA7Ci0gIGNvbnRleHRfYi5jbG9ja19pZCA9IGdzdF9jbG9ja19pZF9yZWYgKGNsb2NrX2lkX2IpOwotICBjb250ZXh0X2Iuaml0dGVyID0gMDsKLQotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkcyAodGVzdF9jbG9jaywgMCwgTlVMTCk7Ci0KLSAgd29ya2VyX3RocmVhZF9iID0KLSAgICAgIGdfdGhyZWFkX25ldyAoIndvcmtlcl90aHJlYWRfYiIsCi0gICAgICB0ZXN0X3dhaXRfcGVuZGluZ19zaW5nbGVfc2hvdF9pZF9zeW5jX3dvcmtlciwgJmNvbnRleHRfYik7Ci0KLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHMgKHRlc3RfY2xvY2ssIDEsIE5VTEwpOwotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RfY2xvY2ssICZwZW5kaW5nX2lkKTsKLSAgYXNzZXJ0X3BlbmRpbmdfaWQgKHBlbmRpbmdfaWQsIGNsb2NrX2lkX2IsIEdTVF9DTE9DS19FTlRSWV9TSU5HTEUsCi0gICAgICA2ICogR1NUX1NFQ09ORCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocGVuZGluZ19pZCk7Ci0KLSAgd29ya2VyX3RocmVhZF9hID0KLSAgICAgIGdfdGhyZWFkX25ldyAoIndvcmtlcl90aHJlYWRfYSIsCi0gICAgICB0ZXN0X3dhaXRfcGVuZGluZ19zaW5nbGVfc2hvdF9pZF9zeW5jX3dvcmtlciwgJmNvbnRleHRfYSk7Ci0KLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHMgKHRlc3RfY2xvY2ssIDIsIE5VTEwpOwotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RfY2xvY2ssICZwZW5kaW5nX2lkKTsKLSAgYXNzZXJ0X3BlbmRpbmdfaWQgKHBlbmRpbmdfaWQsIGNsb2NrX2lkX2EsIEdTVF9DTE9DS19FTlRSWV9TSU5HTEUsCi0gICAgICA1ICogR1NUX1NFQ09ORCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocGVuZGluZ19pZCk7Ci0KLSAgZ19hc3NlcnRfY21wdWludCAoZ3N0X3Rlc3RfY2xvY2tfZ2V0X25leHRfZW50cnlfdGltZSAodGVzdF9jbG9jayksID09LAotICAgICAgNSAqIEdTVF9TRUNPTkQpOwotICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKHRlc3RfY2xvY2ssIDUgKiBHU1RfU0VDT05EKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkICh0ZXN0X2Nsb2NrKTsKLSAgYXNzZXJ0X3Byb2Nlc3NlZF9pZCAocHJvY2Vzc2VkX2lkLCBjbG9ja19pZF9hLCBHU1RfQ0xPQ0tfRU5UUllfU0lOR0xFLAotICAgICAgR1NUX0NMT0NLX09LKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwcm9jZXNzZWRfaWQpOwotCi0gIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX211bHRpcGxlX3BlbmRpbmdfaWRzICh0ZXN0X2Nsb2NrLCAxLCBOVUxMKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkICh0ZXN0X2Nsb2NrLCAmcGVuZGluZ19pZCk7Ci0gIGFzc2VydF9wZW5kaW5nX2lkIChwZW5kaW5nX2lkLCBjbG9ja19pZF9iLCBHU1RfQ0xPQ0tfRU5UUllfU0lOR0xFLAotICAgICAgNiAqIEdTVF9TRUNPTkQpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKHBlbmRpbmdfaWQpOwotCi0gIGdfYXNzZXJ0X2NtcHVpbnQgKGdzdF90ZXN0X2Nsb2NrX2dldF9uZXh0X2VudHJ5X3RpbWUgKHRlc3RfY2xvY2spLCA9PSwKLSAgICAgIDYgKiBHU1RfU0VDT05EKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lICh0ZXN0X2Nsb2NrLCA2ICogR1NUX1NFQ09ORCk7Ci0gIHByb2Nlc3NlZF9pZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAodGVzdF9jbG9jayk7Ci0gIGFzc2VydF9wcm9jZXNzZWRfaWQgKHByb2Nlc3NlZF9pZCwgY2xvY2tfaWRfYiwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgICAgIEdTVF9DTE9DS19PSyk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocHJvY2Vzc2VkX2lkKTsKLQotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9tdWx0aXBsZV9wZW5kaW5nX2lkcyAodGVzdF9jbG9jaywgMCwgTlVMTCk7Ci0KLSAgZ190aHJlYWRfam9pbiAod29ya2VyX3RocmVhZF9hKTsKLSAgZ190aHJlYWRfam9pbiAod29ya2VyX3RocmVhZF9iKTsKLQotICBnX2Fzc2VydF9jbXB1aW50IChjb250ZXh0X2Euaml0dGVyLCA9PSwgLTQgKiBHU1RfU0VDT05EKTsKLSAgZ19hc3NlcnRfY21wdWludCAoY29udGV4dF9iLmppdHRlciwgPT0sIC01ICogR1NUX1NFQ09ORCk7Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjb250ZXh0X2EuY2xvY2tfaWQpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNvbnRleHRfYi5jbG9ja19pZCk7Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZF9hKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZF9iKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcHJvY2Vzc2luZ19tdWx0aXBsZV9pZHMpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkX2E7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWRfYjsKLSAgU3luY0Nsb2NrV2FpdENvbnRleHQgY29udGV4dF9hOwotICBTeW5jQ2xvY2tXYWl0Q29udGV4dCBjb250ZXh0X2I7Ci0gIEdUaHJlYWQgKndvcmtlcl90aHJlYWRfYTsKLSAgR1RocmVhZCAqd29ya2VyX3RocmVhZF9iOwotICBHTGlzdCAqcGVuZGluZ19saXN0ID0gTlVMTDsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotICB0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLQotICAvKiByZWdpc3RlciBhIHdhaXQgZm9yIDUgc2Vjb25kcyAqLwotICBjbG9ja19pZF9hID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIDUgKiBHU1RfU0VDT05EKTsKLSAgY29udGV4dF9hLmNsb2NrX2lkID0gZ3N0X2Nsb2NrX2lkX3JlZiAoY2xvY2tfaWRfYSk7Ci0gIGNvbnRleHRfYS5qaXR0ZXIgPSAwOwotICB3b3JrZXJfdGhyZWFkX2EgPQotICAgICAgZ190aHJlYWRfbmV3ICgid29ya2VyX3RocmVhZF9hIiwKLSAgICAgIHRlc3Rfd2FpdF9wZW5kaW5nX3NpbmdsZV9zaG90X2lkX3N5bmNfd29ya2VyLCAmY29udGV4dF9hKTsKLQotICAvKiByZWdpc3RlciBhbm90aGVyIHdhaXQgZm9yIDYgc2Vjb25kcyAqLwotICBjbG9ja19pZF9iID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIDYgKiBHU1RfU0VDT05EKTsKLSAgY29udGV4dF9iLmNsb2NrX2lkID0gZ3N0X2Nsb2NrX2lkX3JlZiAoY2xvY2tfaWRfYik7Ci0gIGNvbnRleHRfYi5qaXR0ZXIgPSAwOwotICB3b3JrZXJfdGhyZWFkX2IgPQotICAgICAgZ190aHJlYWRfbmV3ICgid29ya2VyX3RocmVhZF9iIiwKLSAgICAgIHRlc3Rfd2FpdF9wZW5kaW5nX3NpbmdsZV9zaG90X2lkX3N5bmNfd29ya2VyLCAmY29udGV4dF9iKTsKLQotICAvKiB3YWl0IGZvciB0d28gd2FpdHMgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbXVsdGlwbGVfcGVuZGluZ19pZHMgKHRlc3RfY2xvY2ssIDIsICZwZW5kaW5nX2xpc3QpOwotCi0gIC8qIGFzc2VydCB0aGV5IGFyZSBjb3JyZWN0ICovCi0gIGFzc2VydF9wZW5kaW5nX2lkIChwZW5kaW5nX2xpc3QtPmRhdGEsIGNsb2NrX2lkX2EsIEdTVF9DTE9DS19FTlRSWV9TSU5HTEUsCi0gICAgICA1ICogR1NUX1NFQ09ORCk7Ci0gIGFzc2VydF9wZW5kaW5nX2lkIChwZW5kaW5nX2xpc3QtPm5leHQtPmRhdGEsIGNsb2NrX2lkX2IsCi0gICAgICBHU1RfQ0xPQ0tfRU5UUllfU0lOR0xFLCA2ICogR1NUX1NFQ09ORCk7Ci0KLSAgLyogdmVyaWZ5IHdlIGFyZSB3YWl0aW5nIGZvciA2IHNlY29uZHMgYXMgdGhlIGxhdGVzdCB0aW1lICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoNiAqIEdTVF9TRUNPTkQsCi0gICAgICBnc3RfdGVzdF9jbG9ja19pZF9saXN0X2dldF9sYXRlc3RfdGltZSAocGVuZGluZ19saXN0KSk7Ci0KLSAgLyogcHJvY2VzcyBib3RoIElEJ3MgYXQgdGhlIHNhbWUgdGltZSAqLwotICBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX2lkX2xpc3QgKHRlc3RfY2xvY2ssIHBlbmRpbmdfbGlzdCk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKHBlbmRpbmdfbGlzdCwgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY2xvY2tfaWRfdW5yZWYpOwotCi0gIGdfdGhyZWFkX2pvaW4gKHdvcmtlcl90aHJlYWRfYSk7Ci0gIGdfdGhyZWFkX2pvaW4gKHdvcmtlcl90aHJlYWRfYik7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0ICgtNCAqIEdTVF9TRUNPTkQsIGNvbnRleHRfYS5qaXR0ZXIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKC01ICogR1NUX1NFQ09ORCwgY29udGV4dF9iLmppdHRlcik7Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjb250ZXh0X2EuY2xvY2tfaWQpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNvbnRleHRfYi5jbG9ja19pZCk7Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZF9hKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZF9iKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2luZ2xlX3Nob3RfYXN5bmNfcGFzdCkKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja0lEIHByb2Nlc3NlZF9pZDsKLSAgZ2Jvb2xlYW4gd2FpdF9jb21wbGV0ZSA9IEZBTFNFOwotCi0gIGNsb2NrID0gZ3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZSAoR1NUX1NFQ09ORCk7Ci0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIEdTVF9TRUNPTkQgLSAxKTsKLSAgZ19hc3NlcnQgKGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChjbG9ja19pZCwgdGVzdF9hc3luY193YWl0X2NiLAotICAgICAgICAgICZ3YWl0X2NvbXBsZXRlLCBOVUxMKSA9PSBHU1RfQ0xPQ0tfT0spOwotICBnX2Fzc2VydCAoIXdhaXRfY29tcGxldGUpOwotICBwcm9jZXNzZWRfaWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKEdTVF9URVNUX0NMT0NLIChjbG9jaykpOwotICBnX2Fzc2VydCAod2FpdF9jb21wbGV0ZSk7Ci0gIGFzc2VydF9wcm9jZXNzZWRfaWQgKHByb2Nlc3NlZF9pZCwgY2xvY2tfaWQsIEdTVF9DTE9DS19FTlRSWV9TSU5HTEUsCi0gICAgICBHU1RfQ0xPQ0tfRUFSTFkpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKHByb2Nlc3NlZF9pZCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc2luZ2xlX3Nob3RfYXN5bmNfcHJlc2VudCkKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja0lEIHByb2Nlc3NlZF9pZDsKLSAgZ2Jvb2xlYW4gd2FpdF9jb21wbGV0ZSA9IEZBTFNFOwotCi0gIGNsb2NrID0gZ3N0X3Rlc3RfY2xvY2tfbmV3X3dpdGhfc3RhcnRfdGltZSAoR1NUX1NFQ09ORCk7Ci0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIEdTVF9TRUNPTkQpOwotICBnX2Fzc2VydCAoZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGNsb2NrX2lkLCB0ZXN0X2FzeW5jX3dhaXRfY2IsCi0gICAgICAgICAgJndhaXRfY29tcGxldGUsIE5VTEwpID09IEdTVF9DTE9DS19PSyk7Ci0gIGdfYXNzZXJ0ICghd2FpdF9jb21wbGV0ZSk7Ci0gIHByb2Nlc3NlZF9pZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAoR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKSk7Ci0gIGdfYXNzZXJ0ICh3YWl0X2NvbXBsZXRlKTsKLSAgYXNzZXJ0X3Byb2Nlc3NlZF9pZCAocHJvY2Vzc2VkX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSwKLSAgICAgIEdTVF9DTE9DS19PSyk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocHJvY2Vzc2VkX2lkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW5nbGVfc2hvdF9hc3luY19mdXR1cmUpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tJRCBjbG9ja19pZDsKLSAgR3N0Q2xvY2tJRCBwcm9jZXNzZWRfaWQ7Ci0gIGdib29sZWFuIHdhaXRfY29tcGxldGUgPSBGQUxTRTsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotICBjbG9ja19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCAyICogR1NUX1NFQ09ORCk7Ci0gIGdfYXNzZXJ0IChnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoY2xvY2tfaWQsIHRlc3RfYXN5bmNfd2FpdF9jYiwKLSAgICAgICAgICAmd2FpdF9jb21wbGV0ZSwgTlVMTCkgPT0gR1NUX0NMT0NLX09LKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spKTsKLSAgZ19hc3NlcnQgKHByb2Nlc3NlZF9pZCA9PSBOVUxMKTsKLSAgZ19hc3NlcnQgKCF3YWl0X2NvbXBsZXRlKTsKLSAgZ19hc3NlcnQgKEdTVF9DTE9DS19FTlRSWV9TVEFUVVMgKEdTVF9DTE9DS19FTlRSWSAoY2xvY2tfaWQpKQotICAgICAgPT0gR1NUX0NMT0NLX09LKTsKLQotICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKEdTVF9URVNUX0NMT0NLIChjbG9jayksIEdTVF9TRUNPTkQgLSAxKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spKTsKLSAgZ19hc3NlcnQgKHByb2Nlc3NlZF9pZCA9PSBOVUxMKTsKLSAgZ19hc3NlcnQgKCF3YWl0X2NvbXBsZXRlKTsKLSAgZ19hc3NlcnQgKEdTVF9DTE9DS19FTlRSWV9TVEFUVVMgKEdTVF9DTE9DS19FTlRSWSAoY2xvY2tfaWQpKQotICAgICAgPT0gR1NUX0NMT0NLX09LKTsKLQotICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKEdTVF9URVNUX0NMT0NLIChjbG9jayksIDEpOwotICBwcm9jZXNzZWRfaWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKEdTVF9URVNUX0NMT0NLIChjbG9jaykpOwotICBnX2Fzc2VydCAod2FpdF9jb21wbGV0ZSk7Ci0gIGFzc2VydF9wcm9jZXNzZWRfaWQgKHByb2Nlc3NlZF9pZCwgY2xvY2tfaWQsIEdTVF9DTE9DS19FTlRSWV9TSU5HTEUsCi0gICAgICBHU1RfQ0xPQ0tfT0spOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKHByb2Nlc3NlZF9pZCk7Ci0gIGdfYXNzZXJ0IChHU1RfQ0xPQ0tfRU5UUllfU1RBVFVTIChHU1RfQ0xPQ0tfRU5UUlkgKGNsb2NrX2lkKSkKLSAgICAgID09IEdTVF9DTE9DS19PSyk7Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW5nbGVfc2hvdF9hc3luY191bnNjaGVkdWxlKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gIGdib29sZWFuIHdhaXRfY29tcGxldGUgPSBGQUxTRTsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotCi0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssIDMgKiBHU1RfU0VDT05EKTsKLSAgZ19hc3NlcnQgKGdzdF9jbG9ja19pZF93YWl0X2FzeW5jIChjbG9ja19pZCwgdGVzdF9hc3luY193YWl0X2NiLAotICAgICAgICAgICZ3YWl0X2NvbXBsZXRlLCBOVUxMKSA9PSBHU1RfQ0xPQ0tfT0spOwotCi0gIGdzdF9jbG9ja19pZF91bnNjaGVkdWxlIChjbG9ja19pZCk7Ci0KLSAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spLCAyICogR1NUX1NFQ09ORCk7Ci0gIGdfYXNzZXJ0IChnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKEdTVF9URVNUX0NMT0NLIChjbG9jaykpCi0gICAgICA9PSBOVUxMKTsKLSAgZ19hc3NlcnQgKCF3YWl0X2NvbXBsZXRlKTsKLQotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrX2lkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BlcmlvZGljX3N5bmMpCi17Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0VGVzdENsb2NrICp0ZXN0X2Nsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBndWludCBpOwotICBjb25zdCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwgPSA0ICogR1NUX01TRUNPTkQ7Ci0KLSAgY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXcgKCk7Ci0gIHRlc3RfY2xvY2sgPSBHU1RfVEVTVF9DTE9DSyAoY2xvY2spOwotCi0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAoY2xvY2ssIEdTVF9TRUNPTkQsIGludGVydmFsKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgR3R1Q2xvY2tXYWl0Q29udGV4dCAqd2FpdF9jdHg7Ci0gICAgR3N0Q2xvY2tJRCBwZW5kaW5nX2lkOwotICAgIGd1aW50IGo7Ci0KLSAgICB3YWl0X2N0eCA9Ci0gICAgICAgIGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfYmVnaW4gKHRlc3RfY2xvY2ssIGNsb2NrX2lkLCBOVUxMKTsKLQotICAgIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAodGVzdF9jbG9jaywgJnBlbmRpbmdfaWQpOwotICAgIGFzc2VydF9wZW5kaW5nX2lkIChwZW5kaW5nX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDLAotICAgICAgICBHU1RfU0VDT05EICsgKGkgKiBpbnRlcnZhbCkpOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAocGVuZGluZ19pZCk7Ci0KLSAgICBmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgewotICAgICAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTAgLyAxMCk7Ci0gICAgICBnX2Fzc2VydCAoIWdzdF90ZXN0X3V0aWxfY2xvY2tfd2FpdF9jb250ZXh0X2hhc19jb21wbGV0ZWQgKHdhaXRfY3R4KSk7Ci0gICAgfQotCi0gICAgaWYgKGkgPT0gMCkKLSAgICAgIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAodGVzdF9jbG9jaywgR1NUX1NFQ09ORCk7Ci0gICAgZWxzZQotICAgICAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lICh0ZXN0X2Nsb2NrLCBpbnRlcnZhbCk7Ci0KLSAgICBnc3RfdGVzdF91dGlsX3dhaXRfZm9yX2Nsb2NrX2lkX2VuZCAod2FpdF9jdHgpOwotICB9Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wZXJpb2RpY19hc3luYykKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja0lEIHByb2Nlc3NlZF9pZDsKLSAgZ2Jvb2xlYW4gd2FpdF9jb21wbGV0ZSA9IEZBTFNFOwotICBjb25zdCBHc3RDbG9ja1RpbWUgaW50ZXJ2YWwgPSA0ICogR1NUX01TRUNPTkQ7Ci0KLSAgY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXcgKCk7Ci0gIGNsb2NrX2lkID0gZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZCAoY2xvY2ssIGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spLAotICAgICAgaW50ZXJ2YWwpOwotICBnX2Fzc2VydCAoZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGNsb2NrX2lkLCB0ZXN0X2FzeW5jX3dhaXRfY2IsCi0gICAgICAgICAgJndhaXRfY29tcGxldGUsIE5VTEwpID09IEdTVF9DTE9DS19PSyk7Ci0KLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spKTsKLSAgYXNzZXJ0X3Byb2Nlc3NlZF9pZCAocHJvY2Vzc2VkX2lkLCBjbG9ja19pZCwgR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDLAotICAgICAgR1NUX0NMT0NLX09LKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwcm9jZXNzZWRfaWQpOwotCi0gIGdfYXNzZXJ0ICh3YWl0X2NvbXBsZXRlKTsKLSAgd2FpdF9jb21wbGV0ZSA9IEZBTFNFOwotCi0gIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAoR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKSwgaW50ZXJ2YWwgLSAxKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spKTsKLSAgZ19hc3NlcnQgKHByb2Nlc3NlZF9pZCA9PSBOVUxMKTsKLSAgZ19hc3NlcnQgKCF3YWl0X2NvbXBsZXRlKTsKLQotICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKEdTVF9URVNUX0NMT0NLIChjbG9jayksIDEpOwotICBwcm9jZXNzZWRfaWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKEdTVF9URVNUX0NMT0NLIChjbG9jaykpOwotICBhc3NlcnRfcHJvY2Vzc2VkX2lkIChwcm9jZXNzZWRfaWQsIGNsb2NrX2lkLCBHU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUMsCi0gICAgICBHU1RfQ0xPQ0tfT0spOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKHByb2Nlc3NlZF9pZCk7Ci0gIGdfYXNzZXJ0ICh3YWl0X2NvbXBsZXRlKTsKLSAgd2FpdF9jb21wbGV0ZSA9IEZBTFNFOwotCi0gIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAoR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKSwgaW50ZXJ2YWwgLSAxKTsKLSAgcHJvY2Vzc2VkX2lkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkIChHU1RfVEVTVF9DTE9DSyAoY2xvY2spKTsKLSAgZ19hc3NlcnQgKHByb2Nlc3NlZF9pZCA9PSBOVUxMKTsKLSAgZ19hc3NlcnQgKCF3YWl0X2NvbXBsZXRlKTsKLQotICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKEdTVF9URVNUX0NMT0NLIChjbG9jayksIDEpOwotICBwcm9jZXNzZWRfaWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKEdTVF9URVNUX0NMT0NLIChjbG9jaykpOwotICBhc3NlcnRfcHJvY2Vzc2VkX2lkIChwcm9jZXNzZWRfaWQsIGNsb2NrX2lkLCBHU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUMsCi0gICAgICBHU1RfQ0xPQ0tfT0spOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKHByb2Nlc3NlZF9pZCk7Ci0gIGdfYXNzZXJ0ICh3YWl0X2NvbXBsZXRlKTsKLSAgd2FpdF9jb21wbGV0ZSA9IEZBTFNFOwotCi0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGVyaW9kaWNfdW5pcXVlbmVzcykKLXsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RfY2xvY2s7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gIGd1aW50IGk7Ci0gIGNvbnN0IEdzdENsb2NrVGltZSBpbnRlcnZhbCA9IDQgKiBHU1RfTVNFQ09ORDsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ldyAoKTsKLSAgdGVzdF9jbG9jayA9IEdTVF9URVNUX0NMT0NLIChjbG9jayk7Ci0KLSAgY2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3BlcmlvZGljX2lkIChjbG9jaywgMCwgaW50ZXJ2YWwpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICBHdHVDbG9ja1dhaXRDb250ZXh0ICp3YWl0X2N0eDsKLSAgICBndWludCBqOwotCi0gICAgd2FpdF9jdHggPQotICAgICAgICBnc3RfdGVzdF91dGlsX3dhaXRfZm9yX2Nsb2NrX2lkX2JlZ2luICh0ZXN0X2Nsb2NrLCBjbG9ja19pZCwgTlVMTCk7Ci0KLSAgICBmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgewotICAgICAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMTAgLyAxMCk7Ci0gICAgICBnX2Fzc2VydF9jbXB1aW50IChnc3RfdGVzdF9jbG9ja19wZWVrX2lkX2NvdW50ICh0ZXN0X2Nsb2NrKSwgPT0sIDEpOwotICAgIH0KLQotICAgIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAodGVzdF9jbG9jaywgaW50ZXJ2YWwpOwotICAgIGdzdF90ZXN0X3V0aWxfd2FpdF9mb3JfY2xvY2tfaWRfZW5kICh3YWl0X2N0eCk7Ci0gIH0KLQotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrX2lkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NyYW5rKQotewotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdF9jbG9jazsKLSAgR3N0Q2xvY2tJRCBjbG9ja19pZDsKLSAgU3luY0Nsb2NrV2FpdENvbnRleHQgY29udGV4dDsKLSAgR1RocmVhZCAqd29ya2VyX3RocmVhZDsKLQotICBjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ld193aXRoX3N0YXJ0X3RpbWUgKEdTVF9TRUNPTkQpOwotICB0ZXN0X2Nsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLQotICAvKiByZWdpc3RlciBhIHdhaXQgZm9yIDUgc2Vjb25kcyAqLwotICBjbG9ja19pZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCA1ICogR1NUX1NFQ09ORCk7Ci0gIGNvbnRleHQuY2xvY2tfaWQgPSBnc3RfY2xvY2tfaWRfcmVmIChjbG9ja19pZCk7Ci0gIGNvbnRleHQuaml0dGVyID0gMDsKLSAgd29ya2VyX3RocmVhZCA9Ci0gICAgICBnX3RocmVhZF9uZXcgKCJ3b3JrZXJfdGhyZWFkX2EiLAotICAgICAgdGVzdF93YWl0X3BlbmRpbmdfc2luZ2xlX3Nob3RfaWRfc3luY193b3JrZXIsICZjb250ZXh0KTsKLQotICAvKiBjcmFuayAqLwotICBnc3RfdGVzdF9jbG9ja19jcmFuayAodGVzdF9jbG9jayk7Ci0KLSAgLyogdGhlIGNsb2NrIHNob3VsZCBoYXZlIGFkdmFuY2VkIGFuZCB0aGUgd2FpdCByZWxlYXNlZCAqLwotICBnX3RocmVhZF9qb2luICh3b3JrZXJfdGhyZWFkKTsKLQotICAvKiA0IHNlY29uZHMgd2FzIHNwZW50IHdhaXRpbmcgZm9yIHRoZSBjbG9jayAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKC00ICogR1NUX1NFQ09ORCwgY29udGV4dC5qaXR0ZXIpOwotCi0gIC8qIGFuZCB0aGUgY2xvY2sgaXMgbm93IGF0IDUgc2Vjb25kcyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKDUgKiBHU1RfU0VDT05ELCBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSk7Ci0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjb250ZXh0LmNsb2NrX2lkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X3Rlc3RfY2xvY2tfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0VGVzdENsb2NrIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInRlc3RjbG9jayIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vYmplY3RfZmxhZ3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVzb2x1dGlvbl9xdWVyeSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGFydF90aW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NldF90aW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkdmFuY2VfdGltZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF93YWl0X3N5bmNocm9ub3VzX25vX3RpbWVvdXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2FpdF9wZW5kaW5nX3NpbmdsZV9zaG90X2lkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3dhaXRfcGVuZGluZ19wZXJpb2RpY19pZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW5nbGVfc2hvdF9zeW5jX3NpbXVsdGFuZW91c19ub190aW1lb3V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Byb2Nlc3NpbmdfbXVsdGlwbGVfaWRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbmdsZV9zaG90X3N5bmNfcGFzdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW5nbGVfc2hvdF9zeW5jX3ByZXNlbnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luZ2xlX3Nob3Rfc3luY19mdXR1cmUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luZ2xlX3Nob3Rfc3luY191bnNjaGVkdWxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbmdsZV9zaG90X3N5bmNfb3JkZXJpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luZ2xlX3Nob3Rfc3luY19vcmRlcmluZ19wYXJhbGxlbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW5nbGVfc2hvdF9hc3luY19wYXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbmdsZV9zaG90X2FzeW5jX3ByZXNlbnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2luZ2xlX3Nob3RfYXN5bmNfZnV0dXJlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbmdsZV9zaG90X2FzeW5jX3Vuc2NoZWR1bGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGVyaW9kaWNfc3luYyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wZXJpb2RpY19hc3luYyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wZXJpb2RpY191bmlxdWVuZXNzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NyYW5rKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF90ZXN0X2Nsb2NrKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvbGlic2FiaS5jIGIvdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyY2E0MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9saWJzYWJpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBsaWJzYWJpLmM6IFVuaXQgdGVzdCBmb3IgQUJJIGNvbXBhdGliaWxpdHkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc3JjLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRld3JpdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RwdXNoc3JjLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3R0cmlnZ2VyY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0dGltZWR2YWx1ZWNvbnRyb2xzb3VyY2UuaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldC5oPgotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0Y2xpZW50Y2xvY2suaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldHRpbWVwYWNrZXQuaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oPgotCi0jaWZkZWYgSEFWRV9DUFVfSTM4NgotI2luY2x1ZGUgInN0cnVjdF9pMzg2LmgiCi0jZGVmaW5lIEhBVkVfQUJJX1NJWkVTIFRSVUUKLSNlbHNlCi0jaWZkZWYgX19wb3dlcnBjNjRfXwotI2luY2x1ZGUgInN0cnVjdF9wcGM2NC5oIgotI2RlZmluZSBIQVZFX0FCSV9TSVpFUyBGQUxTRQotI2Vsc2UKLSNpZmRlZiBfX3Bvd2VycGNfXwotI2luY2x1ZGUgInN0cnVjdF9wcGMzMi5oIgotI2RlZmluZSBIQVZFX0FCSV9TSVpFUyBUUlVFCi0jZWxzZQotI2lmZGVmIEhBVkVfQ1BVX1g4Nl82NAotI2luY2x1ZGUgInN0cnVjdF94ODZfNjQuaCIKLSNkZWZpbmUgSEFWRV9BQklfU0laRVMgVFJVRQotI2Vsc2UKLSNpZmRlZiBIQVZFX0NQVV9IUFBBCi0jaW5jbHVkZSAic3RydWN0X2hwcGEuaCIKLSNkZWZpbmUgSEFWRV9BQklfU0laRVMgRkFMU0UKLSNlbHNlCi0jaWZkZWYgSEFWRV9DUFVfU1BBUkMKLSNpbmNsdWRlICJzdHJ1Y3Rfc3BhcmMuaCIKLSNkZWZpbmUgSEFWRV9BQklfU0laRVMgRkFMU0UKLSNlbHNlCi0jaWZkZWYgSEFWRV9DUFVfQVJNCi0jaW5jbHVkZSAic3RydWN0X2FybS5oIgotI2RlZmluZSBIQVZFX0FCSV9TSVpFUyBUUlVFCi0jZWxzZQotLyogaW4gY2FzZSBzb21lb25lIHdhbnRzIHRvIGdlbmVyYXRlIGEgbmV3IGFyY2ggKi8KLSNpbmNsdWRlICJzdHJ1Y3RfaTM4Ni5oIgotI2RlZmluZSBIQVZFX0FCSV9TSVpFUyBGQUxTRQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X0FCSSkKLXsKLSAgZ3N0X2NoZWNrX2FiaV9saXN0IChsaXN0LCBIQVZFX0FCSV9TSVpFUyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWxpYnNhYmlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiTGlic0FCSSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJzaXplIGNoZWNrIik7Ci0KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X0FCSSk7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAobGlic2FiaSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3F1ZXVlYXJyYXkuYyBiL3Rlc3RzL2NoZWNrL2xpYnMvcXVldWVhcnJheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTAwMTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvcXVldWVhcnJheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgR3N0UXVldWVBcnJheQotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHF1ZXVlYXJyYXkuaD4KLQotLyogU2ltcGxlc3QgdGVzdAotICogSW5pdGlhbCBzaXplIDogMTAKLSAqIEFkZCAxMCwgUmVtb3ZlIDEwCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FycmF5XzEpCi17Ci0gIEdzdFF1ZXVlQXJyYXkgKmFycmF5OwotICBndWludCBpOwotCi0gIC8qIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsIHNpemUgMTAgKi8KLSAgYXJyYXkgPSBnc3RfcXVldWVfYXJyYXlfbmV3ICgxMCk7Ci0KLSAgLyogcHVzaCA1IHZhbHVlcyBpbiAqLwotICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQotICAgIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKGFycmF5LCBHSU5UX1RPX1BPSU5URVIgKGkpKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoYXJyYXkpLCA1KTsKLQotICAvKiBwdWxsIDUgdmFsdWVzIG91dCAqLwotICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1BPSU5URVJfVE9fSU5UIChnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWQgKGFycmF5KSksCi0gICAgICAgIGkpOwotICB9Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGggKGFycmF5KSwgMCk7Ci0KLSAgZ3N0X3F1ZXVlX2FycmF5X2ZyZWUgKGFycmF5KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hcnJheV9ncm93KQotewotICBHc3RRdWV1ZUFycmF5ICphcnJheTsKLSAgZ3VpbnQgaTsKLQotICAvKiBDcmVhdGUgYW4gYXJyYXkgb2YgaW5pdGlhbCBzaXplIDEwICovCi0gIGFycmF5ID0gZ3N0X3F1ZXVlX2FycmF5X25ldyAoMTApOwotCi0gIC8qIHB1c2ggMTAgdmFsdWVzIGluICovCi0gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotICAgIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKGFycmF5LCBHSU5UX1RPX1BPSU5URVIgKGkpKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoYXJyYXkpLCAxMCk7Ci0KLQotICAvKiBJZiB3ZSBhZGQgb25lIHZhbHVlLCBpdCB3aWxsIGdyb3cgKi8KLSAgZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbCAoYXJyYXksIEdJTlRfVE9fUE9JTlRFUiAoMTApKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoYXJyYXkpLCAxMSk7Ci0KLSAgLyogcHVsbCB0aGUgMTEgdmFsdWVzIG91dCAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdQT0lOVEVSX1RPX0lOVCAoZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkIChhcnJheSkpLAotICAgICAgICBpKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoIChhcnJheSksIDApOwotICBnc3RfcXVldWVfYXJyYXlfZnJlZSAoYXJyYXkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FycmF5X2dyb3dfbXVsdGlwbGUpCi17Ci0gIEdzdFF1ZXVlQXJyYXkgKmFycmF5OwotICBndWludCBpOwotCi0gIC8qIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsIHNpemUgMTAgKi8KLSAgYXJyYXkgPSBnc3RfcXVldWVfYXJyYXlfbmV3ICgxMCk7Ci0KLSAgLyogcHVzaCAxMSB2YWx1ZXMgaW4gKi8KLSAgZm9yIChpID0gMDsgaSA8IDExOyBpKyspCi0gICAgZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbCAoYXJyYXksIEdJTlRfVE9fUE9JTlRFUiAoaSkpOwotCi0gIC8qIFdpdGggMTEgdmFsdWVzLCBpdCBzaG91bGQgaGF2ZSBncm93biBvbmNlICgxNSkgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGggKGFycmF5KSwgMTEpOwotCi0gIGZvciAoaSA9IDExOyBpIDwgMjA7IGkrKykKLSAgICBnc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsIChhcnJheSwgR0lOVF9UT19QT0lOVEVSIChpKSk7Ci0KLSAgLyogV2l0aCAyMCB0b3RhbCB2YWx1ZXMsIGl0IHNob3VsZCBoYXZlIGdyb3duIGFub3RoZXIgdGltZSAoMyAqIDE1KSAvIDIgPSAyMikgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGggKGFycmF5KSwgMjApOwotICAvKiBJdCBkaWQgZ3JvdyBiZXlvbmQgaW5pdGlhbCBzaXplICovCi0KLSAgLyogcHVsbCB0aGUgMjAgdmFsdWVzIG91dCAqLwotICBmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdQT0lOVEVSX1RPX0lOVCAoZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkIChhcnJheSkpLAotICAgICAgICBpKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoIChhcnJheSksIDApOwotICBnc3RfcXVldWVfYXJyYXlfZnJlZSAoYXJyYXkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FycmF5X2dyb3dfbWlkZGxlKQotewotICBHc3RRdWV1ZUFycmF5ICphcnJheTsKLSAgZ3VpbnQgaTsKLQotICAvKiBDcmVhdGUgYW4gYXJyYXkgb2YgaW5pdGlhbCBzaXplIDEwICovCi0gIGFycmF5ID0gZ3N0X3F1ZXVlX2FycmF5X25ldyAoMTApOwotCi0gIC8qIHB1c2gvcHVsbCA1IHZhbHVlcyB0byBlbmQgdXAgaW4gdGhlIG1pZGRsZSAqLwotICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0gICAgZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbCAoYXJyYXksIEdJTlRfVE9fUE9JTlRFUiAoaSkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdQT0lOVEVSX1RPX0lOVCAoZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkIChhcnJheSkpLAotICAgICAgICBpKTsKLSAgfQotCi0gIC8qIHB1c2ggMTAgdmFsdWVzIGluICovCi0gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotICAgIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKGFycmF5LCBHSU5UX1RPX1BPSU5URVIgKGkpKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoYXJyYXkpLCAxMCk7Ci0KLSAgLyogSWYgd2UgYWRkIG9uZSB2YWx1ZSwgaXQgd2lsbCBncm93ICovCi0gIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKGFycmF5LCBHSU5UX1RPX1BPSU5URVIgKDEwKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoIChhcnJheSksIDExKTsKLQotICAvKiBwdWxsIHRoZSAxMSB2YWx1ZXMgb3V0ICovCi0gIGZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1BPSU5URVJfVE9fSU5UIChnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWQgKGFycmF5KSksCi0gICAgICAgIGkpOwotICB9Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGggKGFycmF5KSwgMCk7Ci0gIGdzdF9xdWV1ZV9hcnJheV9mcmVlIChhcnJheSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXJyYXlfZ3Jvd19lbmQpCi17Ci0gIEdzdFF1ZXVlQXJyYXkgKmFycmF5OwotICBndWludCBpOwotCi0gIC8qIENyZWF0ZSBhbiBhcnJheSBvZiBpbml0aWFsIHNpemUgMTAgKi8KLSAgYXJyYXkgPSBnc3RfcXVldWVfYXJyYXlfbmV3ICgxMCk7Ci0KLSAgLyogcHVzaC9wdWxsIDkgdmFsdWVzIHRvIGVuZCB1cCBhdCB0aGUgbGFzdCBwb3NpdGlvbiAqLwotICBmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7Ci0gICAgZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbCAoYXJyYXksIEdJTlRfVE9fUE9JTlRFUiAoaSkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdQT0lOVEVSX1RPX0lOVCAoZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkIChhcnJheSkpLAotICAgICAgICBpKTsKLSAgfQotCi0gIC8qIHB1c2ggMTAgdmFsdWVzIGluICovCi0gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotICAgIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKGFycmF5LCBHSU5UX1RPX1BPSU5URVIgKGkpKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoYXJyYXkpLCAxMCk7Ci0KLSAgLyogSWYgd2UgYWRkIG9uZSB2YWx1ZSwgaXQgd2lsbCBncm93ICovCi0gIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKGFycmF5LCBHSU5UX1RPX1BPSU5URVIgKDEwKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoIChhcnJheSksIDExKTsKLQotICAvKiBwdWxsIHRoZSAxMSB2YWx1ZXMgb3V0ICovCi0gIGZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1BPSU5URVJfVE9fSU5UIChnc3RfcXVldWVfYXJyYXlfcG9wX2hlYWQgKGFycmF5KSksCi0gICAgICAgIGkpOwotICB9Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGggKGFycmF5KSwgMCk7Ci0gIGdzdF9xdWV1ZV9hcnJheV9mcmVlIChhcnJheSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGludAotY29tcGFyZV9wb2ludGVyX3ZhbHVlIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLSAgcmV0dXJuIChpbnQpICgoZ3VpbnRwdHIpIGEgLSAoZ3VpbnRwdHIpIGIpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hcnJheV9kcm9wMikKLXsKLSNkZWZpbmUgTlVNX1FBX0VMRU1FTlRTIDY3NAotICBnYm9vbGVhbiBpbl9hcnJheVtOVU1fUUFfRUxFTUVOVFNdID0geyBGQUxTRSwgfTsKLSAgR3N0UXVldWVBcnJheSAqYXJyYXk7Ci0gIGd1aW50IGksIGosIGNvdW50LCBpZHg7Ci0KLSAgYXJyYXkgPSBnc3RfcXVldWVfYXJyYXlfbmV3ICgxMCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9RQV9FTEVNRU5UUzsgaSsrKSB7Ci0gICAgZ3BvaW50ZXIgZWxlbWVudCA9IEdVSU5UX1RPX1BPSU5URVIgKGkpOwotCi0gICAgaWYgKGdfcmFuZG9tX2Jvb2xlYW4gKCkpIHsKLSAgICAgIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKGFycmF5LCBlbGVtZW50KTsKLSAgICAgIGluX2FycmF5W2ldID0gVFJVRTsKLSAgICB9Ci0gIH0KLQotICBmb3IgKGogPSAwLCBjb3VudCA9IDA7IGogPCBOVU1fUUFfRUxFTUVOVFM7IGorKykKLSAgICBjb3VudCArPSBpbl9hcnJheVtqXSA/IDEgOiAwOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoYXJyYXkpLCBjb3VudCk7Ci0KLSAgd2hpbGUgKGdzdF9xdWV1ZV9hcnJheV9nZXRfbGVuZ3RoIChhcnJheSkgPiAwKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IE5VTV9RQV9FTEVNRU5UUzsgaSsrKSB7Ci0gICAgICBncG9pbnRlciBkcm9wcGVkOwotCi0gICAgICBpZiAoZ19yYW5kb21fYm9vbGVhbiAoKSAmJiBnX3JhbmRvbV9ib29sZWFuICgpICYmIGluX2FycmF5W2ldKSB7Ci0gICAgICAgIGlkeCA9IGdzdF9xdWV1ZV9hcnJheV9maW5kIChhcnJheSwgY29tcGFyZV9wb2ludGVyX3ZhbHVlLAotICAgICAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoaSkpOwotICAgICAgICBkcm9wcGVkID0gZ3N0X3F1ZXVlX2FycmF5X2Ryb3BfZWxlbWVudCAoYXJyYXksIGlkeCk7Ci0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGksIEdQT0lOVEVSX1RPX0lOVCAoZHJvcHBlZCkpOwotICAgICAgICBpbl9hcnJheVtpXSA9IEZBTFNFOwotICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaiA9IDAsIGNvdW50ID0gMDsgaiA8IE5VTV9RQV9FTEVNRU5UUzsgaisrKQotICAgICAgY291bnQgKz0gaW5fYXJyYXlbal0gPyAxIDogMDsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcXVldWVfYXJyYXlfZ2V0X2xlbmd0aCAoYXJyYXkpLCBjb3VudCk7Ci0gIH0KLQotICBnc3RfcXVldWVfYXJyYXlfZnJlZSAoYXJyYXkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FycmF5X2dyb3dfZnJvbV9wcmVhbGxvYzEpCi17Ci0gIEdzdFF1ZXVlQXJyYXkgKmFycmF5OwotCi0gIGFycmF5ID0gZ3N0X3F1ZXVlX2FycmF5X25ldyAoMSk7Ci0gIGdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwgKGFycmF5LCBOVUxMKTsKLSAgZ3N0X3F1ZXVlX2FycmF5X3B1c2hfdGFpbCAoYXJyYXksIE5VTEwpOwotICBnc3RfcXVldWVfYXJyYXlfZnJlZSAoYXJyYXkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfcXVldWVfYXJyYXlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiR3N0UXVldWVBcnJheSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FycmF5XzEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXJyYXlfZ3Jvdyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hcnJheV9ncm93X211bHRpcGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FycmF5X2dyb3dfbWlkZGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FycmF5X2dyb3dfZW5kKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FycmF5X2Ryb3AyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FycmF5X2dyb3dfZnJvbV9wcmVhbGxvYzEpOwotCi0gIHJldHVybiBzOwotfQotCi0KLUdTVF9DSEVDS19NQUlOIChnc3RfcXVldWVfYXJyYXkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9zcGFyc2VmaWxlLmMgYi90ZXN0cy9jaGVjay9saWJzL3NwYXJzZWZpbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1YzgxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9saWJzL3NwYXJzZWZpbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGNhY2hlZmlsZSBoZWxwZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgV2ltIFRheW1hbnMgIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotLyogbm90IHB1YmxpYyBBUEkgZm9yIG5vdyAqLwotI2luY2x1ZGUgIi4uLy4uLy4uL3BsdWdpbnMvZWxlbWVudHMvZ3N0c3BhcnNlZmlsZS5jIgotCi1zdGF0aWMgdm9pZAotZXhwZWN0X3JhbmdlX2JlZm9yZSAoR3N0U3BhcnNlRmlsZSAqIGZpbGUsIGdzaXplIG9mZnNldCwgZ3NpemUgc3RhcnQsCi0gICAgZ3NpemUgc3RvcCkKLXsKLSAgZ3NpemUgdHN0YXJ0LCB0c3RvcDsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NwYXJzZV9maWxlX2dldF9yYW5nZV9iZWZvcmUgKGZpbGUsIG9mZnNldCwgJnRzdGFydCwKLSAgICAgICAgICAmdHN0b3ApID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAodHN0YXJ0ID09IHN0YXJ0KTsKLSAgZmFpbF91bmxlc3MgKHRzdG9wID09IHN0b3ApOwotfQotCi1zdGF0aWMgdm9pZAotZXhwZWN0X3JhbmdlX2FmdGVyIChHc3RTcGFyc2VGaWxlICogZmlsZSwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBzdGFydCwgZ3NpemUgc3RvcCkKLXsKLSAgZ3NpemUgdHN0YXJ0LCB0c3RvcDsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3NwYXJzZV9maWxlX2dldF9yYW5nZV9hZnRlciAoZmlsZSwgb2Zmc2V0LCAmdHN0YXJ0LAotICAgICAgICAgICZ0c3RvcCkgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzICh0c3RhcnQgPT0gc3RhcnQpOwotICBmYWlsX3VubGVzcyAodHN0b3AgPT0gc3RvcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZXhwZWN0X3dyaXRlIChHc3RTcGFyc2VGaWxlICogZmlsZSwgZ3NpemUgb2Zmc2V0LCBnc2l6ZSBjb3VudCwgZ3NpemUgcmVzdWx0LAotICAgIGdzaXplIGF2YWlsKQotewotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgZ2NoYXIgYnVmZmVyWzIwMF0gPSB7IDAsIH07Ci0gIGdzaXplIHJlcywgYTsKLQotICByZXMgPSBnc3Rfc3BhcnNlX2ZpbGVfd3JpdGUgKGZpbGUsIG9mZnNldCwgYnVmZmVyLCBjb3VudCwgJmEsICZlcnJvcik7Ci0gIGlmIChyZXMgIT0gcmVzdWx0KQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgaWYgKGVycm9yID09IE5VTEwpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycm9yKTsKLSAgfSBlbHNlIGlmIChhICE9IGF2YWlsKQotICAgIHJldHVybiBGQUxTRTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZXhwZWN0X3JlYWQgKEdzdFNwYXJzZUZpbGUgKiBmaWxlLCBnc2l6ZSBvZmZzZXQsIGdzaXplIGNvdW50LCBnc2l6ZSByZXN1bHQsCi0gICAgZ3NpemUgYXZhaWwpCi17Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICBnY2hhciBidWZmZXJbMjAwXTsKLSAgZ3NpemUgcmVzLCBhOwotCi0gIHJlcyA9IGdzdF9zcGFyc2VfZmlsZV9yZWFkIChmaWxlLCBvZmZzZXQsIGJ1ZmZlciwgY291bnQsICZhLCAmZXJyb3IpOwotICBpZiAocmVzICE9IHJlc3VsdCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChyZXMgPT0gMCkgewotICAgIGlmIChlcnJvciA9PSBOVUxMKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnJvcik7Ci0gIH0gZWxzZSBpZiAoYSAhPSBhdmFpbCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93cml0ZV9yZWFkKQotewotICBHc3RTcGFyc2VGaWxlICpmaWxlOwotICBnaW50IGZkOwotICBnY2hhciAqbmFtZTsKLSAgZ3NpemUgc3RhcnQsIHN0b3A7Ci0KLSAgbmFtZSA9IGdfc3RyZHVwICgiY2FjaGVmaWxlLXRlc3RYWFhYWFgiKTsKLSAgZmQgPSBnX21rc3RlbXAgKG5hbWUpOwotICBmYWlsX2lmIChmZCA9PSAtMSk7Ci0KLSAgZmlsZSA9IGdzdF9zcGFyc2VfZmlsZV9uZXcgKCk7Ci0gIGZhaWxfdW5sZXNzIChmaWxlICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3NwYXJzZV9maWxlX3NldF9mZCAoZmlsZSwgZmQpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zcGFyc2VfZmlsZV9uX3JhbmdlcyAoZmlsZSkgPT0gMCk7Ci0KLSAgLyogc2hvdWxkIGZhaWwsIHdlIGRpZG4ndCB3cml0ZSBhbnl0aGluZyB5ZXQgKi8KLSAgZmFpbF91bmxlc3MgKGV4cGVjdF9yZWFkIChmaWxlLCAwLCAxMDAsIDAsIDApKTsKLQotICAvKiBubyByYW5nZXMsIHNlYXJjaGluZyBmb3IgYSByYW5nZSBzaG91bGQgZmFpbCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3NwYXJzZV9maWxlX25fcmFuZ2VzIChmaWxlKSA9PSAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYmVmb3JlIChmaWxlLCAwLCAmc3RhcnQsCi0gICAgICAgICAgJnN0b3ApID09IEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYmVmb3JlIChmaWxlLCAxMCwgJnN0YXJ0LAotICAgICAgICAgICZzdG9wKSA9PSBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3BhcnNlX2ZpbGVfZ2V0X3JhbmdlX2FmdGVyIChmaWxlLCAwLCAmc3RhcnQsCi0gICAgICAgICAgJnN0b3ApID09IEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYWZ0ZXIgKGZpbGUsIDEwLCAmc3RhcnQsCi0gICAgICAgICAgJnN0b3ApID09IEZBTFNFKTsKLQotICAvKiBub3cgd3JpdGUgc29tZSBkYXRhICovCi0gIGZhaWxfdW5sZXNzIChleHBlY3Rfd3JpdGUgKGZpbGUsIDAsIDEwMCwgMTAwLCAwKSk7Ci0KLSAgLyogd2UgaGF2ZSAxIHJhbmdlIG5vdyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3NwYXJzZV9maWxlX25fcmFuZ2VzIChmaWxlKSA9PSAxKTsKLSAgZXhwZWN0X3JhbmdlX2JlZm9yZSAoZmlsZSwgMCwgMCwgMTAwKTsKLSAgZXhwZWN0X3JhbmdlX2FmdGVyIChmaWxlLCAwLCAwLCAxMDApOwotICBleHBlY3RfcmFuZ2VfYmVmb3JlIChmaWxlLCAxMDAsIDAsIDEwMCk7Ci0gIGV4cGVjdF9yYW5nZV9iZWZvcmUgKGZpbGUsIDUwLCAwLCAxMDApOwotICBleHBlY3RfcmFuZ2VfYmVmb3JlIChmaWxlLCAyMDAsIDAsIDEwMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3BhcnNlX2ZpbGVfZ2V0X3JhbmdlX2FmdGVyIChmaWxlLCAxMDAsICZzdGFydCwKLSAgICAgICAgICAmc3RvcCkgPT0gRkFMU0UpOwotICBleHBlY3RfcmFuZ2VfYWZ0ZXIgKGZpbGUsIDUwLCAwLCAxMDApOwotCi0gIC8qIHdlIGNhbiByZWFkIGFsbCBkYXRhIG5vdyAqLwotICBmYWlsX3VubGVzcyAoZXhwZWN0X3JlYWQgKGZpbGUsIDAsIDEwMCwgMTAwLCAwKSk7Ci0gIC8qIHdlIGNhbiByZWFkIGxlc3MgKi8KLSAgZmFpbF91bmxlc3MgKGV4cGVjdF9yZWFkIChmaWxlLCAwLCA1MCwgNTAsIDUwKSk7Ci0gIC8qIGJ1dCB3ZSBjYW4ndCByZWFkIG1vcmUgdGhhbiB3aGF0IGlzIHdyaXR0ZW4gKi8KLSAgZmFpbF91bmxlc3MgKGV4cGVjdF9yZWFkIChmaWxlLCAwLCAxMDEsIDAsIDApKTsKLQotICBnX3VubGluayAobmFtZSk7Ci0gIGdzdF9zcGFyc2VfZmlsZV9mcmVlIChmaWxlKTsKLSAgZ19mcmVlIChuYW1lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93cml0ZV9tZXJnZSkKLXsKLSAgR3N0U3BhcnNlRmlsZSAqZmlsZTsKLSAgZ2ludCBmZDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIGdzaXplIHN0YXJ0LCBzdG9wOwotCi0gIG5hbWUgPSBnX3N0cmR1cCAoImNhY2hlZmlsZS10ZXN0WFhYWFhYIik7Ci0gIGZkID0gZ19ta3N0ZW1wIChuYW1lKTsKLSAgZmFpbF9pZiAoZmQgPT0gLTEpOwotCi0gIGZpbGUgPSBnc3Rfc3BhcnNlX2ZpbGVfbmV3ICgpOwotICBnc3Rfc3BhcnNlX2ZpbGVfc2V0X2ZkIChmaWxlLCBmZCk7Ci0KLSAgLyogd3JpdGUgc29tZXRoaW5nIGF0IG9mZnNldCAwICovCi0gIGZhaWxfdW5sZXNzIChleHBlY3Rfd3JpdGUgKGZpbGUsIDAsIDEwMCwgMTAwLCAwKSk7Ci0gIC8qIHdlIGhhdmUgMSByYW5nZSBub3cgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9zcGFyc2VfZmlsZV9uX3JhbmdlcyAoZmlsZSkgPT0gMSk7Ci0gIGV4cGVjdF9yYW5nZV9iZWZvcmUgKGZpbGUsIDExMCwgMCwgMTAwKTsKLSAgZXhwZWN0X3JhbmdlX2FmdGVyIChmaWxlLCA1MCwgMCwgMTAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYWZ0ZXIgKGZpbGUsIDEwMCwgJnN0YXJ0LAotICAgICAgICAgICZzdG9wKSA9PSBGQUxTRSk7Ci0KLSAgLyogcmVhZCBzaG91bGQgZmFpbCAqLwotICBmYWlsX3VubGVzcyAoZXhwZWN0X3JlYWQgKGZpbGUsIDUwLCAxNTAsIDAsIDApKTsKLQotICAvKiB3cml0ZSBzb21ldGhpbmcgYXQgb2Zmc2V0IDE1MCAqLwotICBmYWlsX3VubGVzcyAoZXhwZWN0X3dyaXRlIChmaWxlLCAxNTAsIDEwMCwgMTAwLCAwKSk7Ci0gIC8qIHdlIGhhdmUgMiByYW5nZXMgbm93ICovCi0gIGZhaWxfdW5sZXNzIChnc3Rfc3BhcnNlX2ZpbGVfbl9yYW5nZXMgKGZpbGUpID09IDIpOwotICBleHBlY3RfcmFuZ2VfYmVmb3JlIChmaWxlLCAxMTAsIDAsIDEwMCk7Ci0gIGV4cGVjdF9yYW5nZV9hZnRlciAoZmlsZSwgNTAsIDAsIDEwMCk7Ci0gIGV4cGVjdF9yYW5nZV9hZnRlciAoZmlsZSwgMTAwLCAxNTAsIDI1MCk7Ci0gIGV4cGVjdF9yYW5nZV9iZWZvcmUgKGZpbGUsIDE1MCwgMTUwLCAyNTApOwotCi0gIC8qIHJlYWQgc2hvdWxkIHN0aWxsIGZhaWwgKi8KLSAgZmFpbF91bmxlc3MgKGV4cGVjdF9yZWFkIChmaWxlLCA1MCwgMTUwLCAwLCAwKSk7Ci0KLSAgLyogZmlsbCB0aGUgaG9sZSAqLwotICBmYWlsX3VubGVzcyAoZXhwZWN0X3dyaXRlIChmaWxlLCAxMDAsIDUwLCA1MCwgMTAwKSk7Ci0gIC8qIHdlIGhhdmUgMSByYW5nZSBub3cgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9zcGFyc2VfZmlsZV9uX3JhbmdlcyAoZmlsZSkgPT0gMSk7Ci0gIGV4cGVjdF9yYW5nZV9iZWZvcmUgKGZpbGUsIDExMCwgMCwgMjUwKTsKLSAgZXhwZWN0X3JhbmdlX2FmdGVyIChmaWxlLCA1MCwgMCwgMjUwKTsKLSAgZXhwZWN0X3JhbmdlX2FmdGVyIChmaWxlLCAxMDAsIDAsIDI1MCk7Ci0gIGV4cGVjdF9yYW5nZV9iZWZvcmUgKGZpbGUsIDE1MCwgMCwgMjUwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zcGFyc2VfZmlsZV9nZXRfcmFuZ2VfYWZ0ZXIgKGZpbGUsIDI1MCwgJnN0YXJ0LAotICAgICAgICAgICZzdG9wKSA9PSBGQUxTRSk7Ci0KLSAgLyogcmVhZCB3b3JrICovCi0gIGZhaWxfdW5sZXNzIChleHBlY3RfcmVhZCAoZmlsZSwgNTAsIDE1MCwgMTUwLCA1MCkpOwotCi0gIGdfdW5saW5rIChuYW1lKTsKLSAgZ3N0X3NwYXJzZV9maWxlX2ZyZWUgKGZpbGUpOwotICBnX2ZyZWUgKG5hbWUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfY2FjaGVmaWxlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImNhY2hlZmlsZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF93cml0ZV9yZWFkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3dyaXRlX21lcmdlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9jYWNoZWZpbGUpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfYXJtLmggYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9hcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEzMTBkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9hcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLQotR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdID0gewotICB7IkdzdEJhc2VQYXJzZUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlUGFyc2VDbGFzcyksIDM2OH0sCi0gIHsiR3N0QmFzZVBhcnNlIiwgc2l6ZW9mIChHc3RCYXNlUGFyc2UpLCAzOTJ9LAotICB7IkdzdEJhc2VTaW5rQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTaW5rQ2xhc3MpLCA0MDB9LAotICB7IkdzdEJhc2VTaW5rIiwgc2l6ZW9mIChHc3RCYXNlU2luayksIDQ2NH0sCi0gIHsiR3N0QmFzZVNyY0NsYXNzIiwgc2l6ZW9mIChHc3RCYXNlU3JjQ2xhc3MpLCA0MDR9LAotICB7IkdzdEJhc2VTcmMiLCBzaXplb2YgKEdzdEJhc2VTcmMpLCA0NDh9LAotICB7IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcyIsIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzKSwgNDE2fSwKLSAgeyJHc3RCYXNlVHJhbnNmb3JtIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtKSwgMzkyfSwKLSAgeyJHc3RCaXRSZWFkZXIiLCBzaXplb2YgKEdzdEJpdFJlYWRlciksIDMyfSwKLSAgeyJHc3RCeXRlUmVhZGVyIiwgc2l6ZW9mIChHc3RCeXRlUmVhZGVyKSwgMjh9LAotICB7IkdzdEJ5dGVXcml0ZXIiLCBzaXplb2YgKEdzdEJ5dGVXcml0ZXIpLCA1Nn0sCi0gIHsiR3N0Q29sbGVjdERhdGEiLCBzaXplb2YgKEdzdENvbGxlY3REYXRhKSwgMTQ0fSwKLSAgeyJHc3RDb2xsZWN0UGFkc0NsYXNzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkc0NsYXNzKSwgMTA4fSwKLSAgeyJHc3RDb2xsZWN0UGFkcyIsIHNpemVvZiAoR3N0Q29sbGVjdFBhZHMpLCAxMDR9LAotICB7IkdzdEFSR0JDb250cm9sQmluZGluZ0NsYXNzIiwgc2l6ZW9mIChHc3RBUkdCQ29udHJvbEJpbmRpbmdDbGFzcyksIDE0MH0sCi0gIHsiR3N0QVJHQkNvbnRyb2xCaW5kaW5nIiwgc2l6ZW9mIChHc3RBUkdCQ29udHJvbEJpbmRpbmcpLCAxNjB9LAotICB7IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ2xhc3MpLCAxNDB9LAotICB7IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nIiwgc2l6ZW9mIChHc3REaXJlY3RDb250cm9sQmluZGluZyksIDE2OH0sCi0gIHsiR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzcyksIDE0MH0sCi0gIHsiR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlKSwgMTUyfSwKLSAgeyJHc3RMRk9Db250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdExGT0NvbnRyb2xTb3VyY2VDbGFzcyksIDEyNH0sCi0gIHsiR3N0TEZPQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0TEZPQ29udHJvbFNvdXJjZSksIDEyMH0sCi0gIHsiR3N0Q29udHJvbFBvaW50Iiwgc2l6ZW9mIChHc3RDb250cm9sUG9pbnQpLCA4MH0sCi0gIHsiR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2VDbGFzcyksIDEyNH0sCi0gIHsiR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlKSwgMTI4fSwKLSAgeyJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZUNsYXNzKSwgMTQwfSwKLSAgeyJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UpLCAxNTJ9LAotICB7IkdzdE5ldENsaWVudENsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrQ2xhc3MpLCAxNjR9LAotICB7IkdzdE5ldENsaWVudENsb2NrIiwgc2l6ZW9mIChHc3ROZXRDbGllbnRDbG9jayksIDEzNn0sCi0gIHsiR3N0TmV0VGltZVBhY2tldCIsIHNpemVvZiAoR3N0TmV0VGltZVBhY2tldCksIDE2fSwKLSAgeyJHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MpLCAxMDh9LAotICB7IkdzdE5ldFRpbWVQcm92aWRlciIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyKSwgODh9LAotICB7IkdzdFB1c2hTcmNDbGFzcyIsIHNpemVvZiAoR3N0UHVzaFNyY0NsYXNzKSwgNDMyfSwKLSAgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mIChHc3RQdXNoU3JjKSwgNDY0fSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9ocHBhLmggYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9ocHBhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZGI5MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaHBwYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotCi1Hc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7Ci0gIHsiR3N0QmFzZVBhcnNlQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VQYXJzZUNsYXNzKSwgNzI4fSwKLSAgeyJHc3RCYXNlUGFyc2UiLCBzaXplb2YgKEdzdEJhc2VQYXJzZSksIDU3Nn0sCi0gIHsiR3N0QmFzZVNpbmtDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksIDc5Mn0sCi0gIHsiR3N0QmFzZVNpbmsiLCBzaXplb2YgKEdzdEJhc2VTaW5rKSwgNjY0fSwKLSAgeyJHc3RCYXNlU3JjQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksIDgwMH0sCi0gIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDY0OH0sCi0gIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLCA4MTZ9LAotICB7IkdzdEJhc2VUcmFuc2Zvcm0iLCBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLCA1NzZ9LAotICB7IkdzdEJpdFJlYWRlciIsIHNpemVvZiAoR3N0Qml0UmVhZGVyKSwgNTZ9LAotICB7IkdzdEJ5dGVSZWFkZXIiLCBzaXplb2YgKEdzdEJ5dGVSZWFkZXIpLCA0OH0sCi0gIHsiR3N0Qnl0ZVdyaXRlciIsIHNpemVvZiAoR3N0Qnl0ZVdyaXRlciksIDk2fSwKLSAgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCAyMDB9LAotICB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzQ2xhc3MpLCAyMTZ9LAotICB7IkdzdENvbGxlY3RQYWRzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkcyksIDE1Mn0sCi0gIHsiR3N0QVJHQkNvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdEFSR0JDb250cm9sQmluZGluZ0NsYXNzKSwgMjgwfSwKLSAgeyJHc3RBUkdCQ29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdEFSR0JDb250cm9sQmluZGluZyksIDI0OH0sCi0gIHsiR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyIsIHNpemVvZiAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyksIDI4MH0sCi0gIHsiR3N0RGlyZWN0Q29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nKSwgMjQ4fSwKLSAgeyJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzKSwgMjgwfSwKLSAgeyJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UpLCAyNDB9LAotICB7IkdzdExGT0NvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzKSwgMjQ4fSwKLSAgeyJHc3RMRk9Db250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RMRk9Db250cm9sU291cmNlKSwgMTg0fSwKLSAgeyJHc3RDb250cm9sUG9pbnQiLCBzaXplb2YgKEdzdENvbnRyb2xQb2ludCksIDgwfSwKLSAgeyJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzKSwgMjQ4fSwKLSAgeyJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UpLCAyMDB9LAotICB7IkdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MpLCAyODB9LAotICB7IkdzdFRyaWdnZXJDb250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSksIDI0MH0sCi0gIHsiR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyksIDMyOH0sCi0gIHsiR3N0TmV0Q2xpZW50Q2xvY2siLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrKSwgMjA4fSwKLSAgeyJHc3ROZXRUaW1lUGFja2V0Iiwgc2l6ZW9mIChHc3ROZXRUaW1lUGFja2V0KSwgMTZ9LAotICB7IkdzdE5ldFRpbWVQcm92aWRlckNsYXNzIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyksIDIxNn0sCi0gIHsiR3N0TmV0VGltZVByb3ZpZGVyIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXIpLCAxMjh9LAotICB7IkdzdFB1c2hTcmNDbGFzcyIsIHNpemVvZiAoR3N0UHVzaFNyY0NsYXNzKSwgODU2fSwKLSAgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mIChHc3RQdXNoU3JjKSwgNjgwfSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2LmggYi90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9pMzg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMTMwNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfaTM4Ni5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotCi1Hc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7Ci0gIHsiR3N0QmFzZVBhcnNlQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VQYXJzZUNsYXNzKSwgMzY4fSwKLSAgeyJHc3RCYXNlUGFyc2UiLCBzaXplb2YgKEdzdEJhc2VQYXJzZSksIDM2NH0sCi0gIHsiR3N0QmFzZVNpbmtDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksIDQwMH0sCi0gIHsiR3N0QmFzZVNpbmsiLCBzaXplb2YgKEdzdEJhc2VTaW5rKSwgNDQwfSwKLSAgeyJHc3RCYXNlU3JjQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksIDQwNH0sCi0gIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDQyNH0sCi0gIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLCA0MTZ9LAotICB7IkdzdEJhc2VUcmFuc2Zvcm0iLCBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLCAzNjR9LAotICB7IkdzdEJpdFJlYWRlciIsIHNpemVvZiAoR3N0Qml0UmVhZGVyKSwgMzJ9LAotICB7IkdzdEJ5dGVSZWFkZXIiLCBzaXplb2YgKEdzdEJ5dGVSZWFkZXIpLCAyOH0sCi0gIHsiR3N0Qnl0ZVdyaXRlciIsIHNpemVvZiAoR3N0Qnl0ZVdyaXRlciksIDU2fSwKLSAgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCAxMzZ9LAotICB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzQ2xhc3MpLCAxMDh9LAotICB7IkdzdENvbGxlY3RQYWRzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkcyksIDkyfSwKLSAgeyJHc3RBUkdCQ29udHJvbEJpbmRpbmdDbGFzcyIsIHNpemVvZiAoR3N0QVJHQkNvbnRyb2xCaW5kaW5nQ2xhc3MpLCAxNDB9LAotICB7IkdzdEFSR0JDb250cm9sQmluZGluZyIsIHNpemVvZiAoR3N0QVJHQkNvbnRyb2xCaW5kaW5nKSwgMTQ0fSwKLSAgeyJHc3REaXJlY3RDb250cm9sQmluZGluZ0NsYXNzIiwgc2l6ZW9mIChHc3REaXJlY3RDb250cm9sQmluZGluZ0NsYXNzKSwgMTQwfSwKLSAgeyJHc3REaXJlY3RDb250cm9sQmluZGluZyIsIHNpemVvZiAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmcpLCAxNDh9LAotICB7IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlQ2xhc3MpLCAxNDB9LAotICB7IkdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSksIDE0MH0sCi0gIHsiR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RMRk9Db250cm9sU291cmNlQ2xhc3MpLCAxMjR9LAotICB7IkdzdExGT0NvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdExGT0NvbnRyb2xTb3VyY2UpLCAxMDh9LAotICB7IkdzdENvbnRyb2xQb2ludCIsIHNpemVvZiAoR3N0Q29udHJvbFBvaW50KSwgODB9LAotICB7IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlQ2xhc3MpLCAxMjR9LAotICB7IkdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSksIDEyMH0sCi0gIHsiR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2VDbGFzcyksIDE0MH0sCi0gIHsiR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdFRyaWdnZXJDb250cm9sU291cmNlKSwgMTQwfSwKLSAgeyJHc3ROZXRDbGllbnRDbG9ja0NsYXNzIiwgc2l6ZW9mIChHc3ROZXRDbGllbnRDbG9ja0NsYXNzKSwgMTY0fSwKLSAgeyJHc3ROZXRDbGllbnRDbG9jayIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2spLCAxMTZ9LAotICB7IkdzdE5ldFRpbWVQYWNrZXQiLCBzaXplb2YgKEdzdE5ldFRpbWVQYWNrZXQpLCAxNn0sCi0gIHsiR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MiLCBzaXplb2YgKEdzdE5ldFRpbWVQcm92aWRlckNsYXNzKSwgMTA4fSwKLSAgeyJHc3ROZXRUaW1lUHJvdmlkZXIiLCBzaXplb2YgKEdzdE5ldFRpbWVQcm92aWRlciksIDc2fSwKLSAgeyJHc3RQdXNoU3JjQ2xhc3MiLCBzaXplb2YgKEdzdFB1c2hTcmNDbGFzcyksIDQzMn0sCi0gIHsiR3N0UHVzaFNyYyIsIHNpemVvZiAoR3N0UHVzaFNyYyksIDQ0MH0sCi0gIHsiR3N0VGltZWRWYWx1ZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZSksIDE2fSwKLSAge05VTEwsIDAsIDB9Ci19OwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjMzIuaCBiL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3BwYzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzEwZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLQotR3N0Q2hlY2tBQklTdHJ1Y3QgbGlzdFtdID0gewotICB7IkdzdEJhc2VQYXJzZUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlUGFyc2VDbGFzcyksIDM2OH0sCi0gIHsiR3N0QmFzZVBhcnNlIiwgc2l6ZW9mIChHc3RCYXNlUGFyc2UpLCAzOTJ9LAotICB7IkdzdEJhc2VTaW5rQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTaW5rQ2xhc3MpLCA0MDB9LAotICB7IkdzdEJhc2VTaW5rIiwgc2l6ZW9mIChHc3RCYXNlU2luayksIDQ2NH0sCi0gIHsiR3N0QmFzZVNyY0NsYXNzIiwgc2l6ZW9mIChHc3RCYXNlU3JjQ2xhc3MpLCA0MDR9LAotICB7IkdzdEJhc2VTcmMiLCBzaXplb2YgKEdzdEJhc2VTcmMpLCA0NDh9LAotICB7IkdzdEJhc2VUcmFuc2Zvcm1DbGFzcyIsIHNpemVvZiAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzKSwgNDE2fSwKLSAgeyJHc3RCYXNlVHJhbnNmb3JtIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtKSwgMzkyfSwKLSAgeyJHc3RCaXRSZWFkZXIiLCBzaXplb2YgKEdzdEJpdFJlYWRlciksIDMyfSwKLSAgeyJHc3RCeXRlUmVhZGVyIiwgc2l6ZW9mIChHc3RCeXRlUmVhZGVyKSwgMjh9LAotICB7IkdzdEJ5dGVXcml0ZXIiLCBzaXplb2YgKEdzdEJ5dGVXcml0ZXIpLCA1Nn0sCi0gIHsiR3N0Q29sbGVjdERhdGEiLCBzaXplb2YgKEdzdENvbGxlY3REYXRhKSwgMTQ0fSwKLSAgeyJHc3RDb2xsZWN0UGFkc0NsYXNzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkc0NsYXNzKSwgMTA4fSwKLSAgeyJHc3RDb2xsZWN0UGFkcyIsIHNpemVvZiAoR3N0Q29sbGVjdFBhZHMpLCAxMDR9LAotICB7IkdzdEFSR0JDb250cm9sQmluZGluZ0NsYXNzIiwgc2l6ZW9mIChHc3RBUkdCQ29udHJvbEJpbmRpbmdDbGFzcyksIDE0MH0sCi0gIHsiR3N0QVJHQkNvbnRyb2xCaW5kaW5nIiwgc2l6ZW9mIChHc3RBUkdCQ29udHJvbEJpbmRpbmcpLCAxNjB9LAotICB7IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nQ2xhc3MpLCAxNDB9LAotICB7IkdzdERpcmVjdENvbnRyb2xCaW5kaW5nIiwgc2l6ZW9mIChHc3REaXJlY3RDb250cm9sQmluZGluZyksIDE2OH0sCi0gIHsiR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2VDbGFzcyksIDE0MH0sCi0gIHsiR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdEludGVycG9sYXRpb25Db250cm9sU291cmNlKSwgMTUyfSwKLSAgeyJHc3RMRk9Db250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdExGT0NvbnRyb2xTb3VyY2VDbGFzcyksIDEyNH0sCi0gIHsiR3N0TEZPQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0TEZPQ29udHJvbFNvdXJjZSksIDEyMH0sCi0gIHsiR3N0Q29udHJvbFBvaW50Iiwgc2l6ZW9mIChHc3RDb250cm9sUG9pbnQpLCA4MH0sCi0gIHsiR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2VDbGFzcyksIDEyNH0sCi0gIHsiR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UiLCBzaXplb2YgKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlKSwgMTI4fSwKLSAgeyJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZUNsYXNzKSwgMTQwfSwKLSAgeyJHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0VHJpZ2dlckNvbnRyb2xTb3VyY2UpLCAxNTJ9LAotICB7IkdzdE5ldENsaWVudENsb2NrQ2xhc3MiLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrQ2xhc3MpLCAxNjR9LAotICB7IkdzdE5ldENsaWVudENsb2NrIiwgc2l6ZW9mIChHc3ROZXRDbGllbnRDbG9jayksIDEzNn0sCi0gIHsiR3N0TmV0VGltZVBhY2tldCIsIHNpemVvZiAoR3N0TmV0VGltZVBhY2tldCksIDE2fSwKLSAgeyJHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyQ2xhc3MpLCAxMDh9LAotICB7IkdzdE5ldFRpbWVQcm92aWRlciIsIHNpemVvZiAoR3N0TmV0VGltZVByb3ZpZGVyKSwgODh9LAotICB7IkdzdFB1c2hTcmNDbGFzcyIsIHNpemVvZiAoR3N0UHVzaFNyY0NsYXNzKSwgNDMyfSwKLSAgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mIChHc3RQdXNoU3JjKSwgNDY0fSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGM2NC5oIGIvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3RfcHBjNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkYjkyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9wcGM2NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotCi1Hc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7Ci0gIHsiR3N0QmFzZVBhcnNlQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VQYXJzZUNsYXNzKSwgNzI4fSwKLSAgeyJHc3RCYXNlUGFyc2UiLCBzaXplb2YgKEdzdEJhc2VQYXJzZSksIDU3Nn0sCi0gIHsiR3N0QmFzZVNpbmtDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksIDc5Mn0sCi0gIHsiR3N0QmFzZVNpbmsiLCBzaXplb2YgKEdzdEJhc2VTaW5rKSwgNjY0fSwKLSAgeyJHc3RCYXNlU3JjQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksIDgwMH0sCi0gIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDY0OH0sCi0gIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLCA4MTZ9LAotICB7IkdzdEJhc2VUcmFuc2Zvcm0iLCBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLCA1NzZ9LAotICB7IkdzdEJpdFJlYWRlciIsIHNpemVvZiAoR3N0Qml0UmVhZGVyKSwgNTZ9LAotICB7IkdzdEJ5dGVSZWFkZXIiLCBzaXplb2YgKEdzdEJ5dGVSZWFkZXIpLCA0OH0sCi0gIHsiR3N0Qnl0ZVdyaXRlciIsIHNpemVvZiAoR3N0Qnl0ZVdyaXRlciksIDk2fSwKLSAgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCAyMDB9LAotICB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzQ2xhc3MpLCAyMTZ9LAotICB7IkdzdENvbGxlY3RQYWRzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkcyksIDE1Mn0sCi0gIHsiR3N0QVJHQkNvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdEFSR0JDb250cm9sQmluZGluZ0NsYXNzKSwgMjgwfSwKLSAgeyJHc3RBUkdCQ29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdEFSR0JDb250cm9sQmluZGluZyksIDI0OH0sCi0gIHsiR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyIsIHNpemVvZiAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyksIDI4MH0sCi0gIHsiR3N0RGlyZWN0Q29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nKSwgMjQ4fSwKLSAgeyJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzKSwgMjgwfSwKLSAgeyJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UpLCAyNDB9LAotICB7IkdzdExGT0NvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzKSwgMjQ4fSwKLSAgeyJHc3RMRk9Db250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RMRk9Db250cm9sU291cmNlKSwgMTg0fSwKLSAgeyJHc3RDb250cm9sUG9pbnQiLCBzaXplb2YgKEdzdENvbnRyb2xQb2ludCksIDgwfSwKLSAgeyJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzKSwgMjQ4fSwKLSAgeyJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UpLCAyMDB9LAotICB7IkdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MpLCAyODB9LAotICB7IkdzdFRyaWdnZXJDb250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSksIDI0MH0sCi0gIHsiR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyksIDMyOH0sCi0gIHsiR3N0TmV0Q2xpZW50Q2xvY2siLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrKSwgMjA4fSwKLSAgeyJHc3ROZXRUaW1lUGFja2V0Iiwgc2l6ZW9mIChHc3ROZXRUaW1lUGFja2V0KSwgMTZ9LAotICB7IkdzdE5ldFRpbWVQcm92aWRlckNsYXNzIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyksIDIxNn0sCi0gIHsiR3N0TmV0VGltZVByb3ZpZGVyIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXIpLCAxMjh9LAotICB7IkdzdFB1c2hTcmNDbGFzcyIsIHNpemVvZiAoR3N0UHVzaFNyY0NsYXNzKSwgODU2fSwKLSAgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mIChHc3RQdXNoU3JjKSwgNjgwfSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9zcGFyYy5oIGIvdGVzdHMvY2hlY2svbGlicy9zdHJ1Y3Rfc3BhcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkYjkyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF9zcGFyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotCi1Hc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7Ci0gIHsiR3N0QmFzZVBhcnNlQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VQYXJzZUNsYXNzKSwgNzI4fSwKLSAgeyJHc3RCYXNlUGFyc2UiLCBzaXplb2YgKEdzdEJhc2VQYXJzZSksIDU3Nn0sCi0gIHsiR3N0QmFzZVNpbmtDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksIDc5Mn0sCi0gIHsiR3N0QmFzZVNpbmsiLCBzaXplb2YgKEdzdEJhc2VTaW5rKSwgNjY0fSwKLSAgeyJHc3RCYXNlU3JjQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksIDgwMH0sCi0gIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDY0OH0sCi0gIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLCA4MTZ9LAotICB7IkdzdEJhc2VUcmFuc2Zvcm0iLCBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLCA1NzZ9LAotICB7IkdzdEJpdFJlYWRlciIsIHNpemVvZiAoR3N0Qml0UmVhZGVyKSwgNTZ9LAotICB7IkdzdEJ5dGVSZWFkZXIiLCBzaXplb2YgKEdzdEJ5dGVSZWFkZXIpLCA0OH0sCi0gIHsiR3N0Qnl0ZVdyaXRlciIsIHNpemVvZiAoR3N0Qnl0ZVdyaXRlciksIDk2fSwKLSAgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCAyMDB9LAotICB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzQ2xhc3MpLCAyMTZ9LAotICB7IkdzdENvbGxlY3RQYWRzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkcyksIDE1Mn0sCi0gIHsiR3N0QVJHQkNvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdEFSR0JDb250cm9sQmluZGluZ0NsYXNzKSwgMjgwfSwKLSAgeyJHc3RBUkdCQ29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdEFSR0JDb250cm9sQmluZGluZyksIDI0OH0sCi0gIHsiR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyIsIHNpemVvZiAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyksIDI4MH0sCi0gIHsiR3N0RGlyZWN0Q29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nKSwgMjQ4fSwKLSAgeyJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzKSwgMjgwfSwKLSAgeyJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UpLCAyNDB9LAotICB7IkdzdExGT0NvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzKSwgMjQ4fSwKLSAgeyJHc3RMRk9Db250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RMRk9Db250cm9sU291cmNlKSwgMTg0fSwKLSAgeyJHc3RDb250cm9sUG9pbnQiLCBzaXplb2YgKEdzdENvbnRyb2xQb2ludCksIDgwfSwKLSAgeyJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzKSwgMjQ4fSwKLSAgeyJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UpLCAyMDB9LAotICB7IkdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MpLCAyODB9LAotICB7IkdzdFRyaWdnZXJDb250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSksIDI0MH0sCi0gIHsiR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyksIDMyOH0sCi0gIHsiR3N0TmV0Q2xpZW50Q2xvY2siLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrKSwgMjA4fSwKLSAgeyJHc3ROZXRUaW1lUGFja2V0Iiwgc2l6ZW9mIChHc3ROZXRUaW1lUGFja2V0KSwgMTZ9LAotICB7IkdzdE5ldFRpbWVQcm92aWRlckNsYXNzIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyksIDIxNn0sCi0gIHsiR3N0TmV0VGltZVByb3ZpZGVyIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXIpLCAxMjh9LAotICB7IkdzdFB1c2hTcmNDbGFzcyIsIHNpemVvZiAoR3N0UHVzaFNyY0NsYXNzKSwgODU2fSwKLSAgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mIChHc3RQdXNoU3JjKSwgNjgwfSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3N0cnVjdF94ODZfNjQuaCBiL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3g4Nl82NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2RiOTIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvc3RydWN0X3g4Nl82NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotCi1Hc3RDaGVja0FCSVN0cnVjdCBsaXN0W10gPSB7Ci0gIHsiR3N0QmFzZVBhcnNlQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VQYXJzZUNsYXNzKSwgNzI4fSwKLSAgeyJHc3RCYXNlUGFyc2UiLCBzaXplb2YgKEdzdEJhc2VQYXJzZSksIDU3Nn0sCi0gIHsiR3N0QmFzZVNpbmtDbGFzcyIsIHNpemVvZiAoR3N0QmFzZVNpbmtDbGFzcyksIDc5Mn0sCi0gIHsiR3N0QmFzZVNpbmsiLCBzaXplb2YgKEdzdEJhc2VTaW5rKSwgNjY0fSwKLSAgeyJHc3RCYXNlU3JjQ2xhc3MiLCBzaXplb2YgKEdzdEJhc2VTcmNDbGFzcyksIDgwMH0sCi0gIHsiR3N0QmFzZVNyYyIsIHNpemVvZiAoR3N0QmFzZVNyYyksIDY0OH0sCi0gIHsiR3N0QmFzZVRyYW5zZm9ybUNsYXNzIiwgc2l6ZW9mIChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MpLCA4MTZ9LAotICB7IkdzdEJhc2VUcmFuc2Zvcm0iLCBzaXplb2YgKEdzdEJhc2VUcmFuc2Zvcm0pLCA1NzZ9LAotICB7IkdzdEJpdFJlYWRlciIsIHNpemVvZiAoR3N0Qml0UmVhZGVyKSwgNTZ9LAotICB7IkdzdEJ5dGVSZWFkZXIiLCBzaXplb2YgKEdzdEJ5dGVSZWFkZXIpLCA0OH0sCi0gIHsiR3N0Qnl0ZVdyaXRlciIsIHNpemVvZiAoR3N0Qnl0ZVdyaXRlciksIDk2fSwKLSAgeyJHc3RDb2xsZWN0RGF0YSIsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCAyMDB9LAotICB7IkdzdENvbGxlY3RQYWRzQ2xhc3MiLCBzaXplb2YgKEdzdENvbGxlY3RQYWRzQ2xhc3MpLCAyMTZ9LAotICB7IkdzdENvbGxlY3RQYWRzIiwgc2l6ZW9mIChHc3RDb2xsZWN0UGFkcyksIDE1Mn0sCi0gIHsiR3N0QVJHQkNvbnRyb2xCaW5kaW5nQ2xhc3MiLCBzaXplb2YgKEdzdEFSR0JDb250cm9sQmluZGluZ0NsYXNzKSwgMjgwfSwKLSAgeyJHc3RBUkdCQ29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdEFSR0JDb250cm9sQmluZGluZyksIDI0OH0sCi0gIHsiR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyIsIHNpemVvZiAoR3N0RGlyZWN0Q29udHJvbEJpbmRpbmdDbGFzcyksIDI4MH0sCi0gIHsiR3N0RGlyZWN0Q29udHJvbEJpbmRpbmciLCBzaXplb2YgKEdzdERpcmVjdENvbnRyb2xCaW5kaW5nKSwgMjQ4fSwKLSAgeyJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZUNsYXNzKSwgMjgwfSwKLSAgeyJHc3RJbnRlcnBvbGF0aW9uQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UpLCAyNDB9LAotICB7IkdzdExGT0NvbnRyb2xTb3VyY2VDbGFzcyIsIHNpemVvZiAoR3N0TEZPQ29udHJvbFNvdXJjZUNsYXNzKSwgMjQ4fSwKLSAgeyJHc3RMRk9Db250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RMRk9Db250cm9sU291cmNlKSwgMTg0fSwKLSAgeyJHc3RDb250cm9sUG9pbnQiLCBzaXplb2YgKEdzdENvbnRyb2xQb2ludCksIDgwfSwKLSAgeyJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZUNsYXNzKSwgMjQ4fSwKLSAgeyJHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSIsIHNpemVvZiAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UpLCAyMDB9LAotICB7IkdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MiLCBzaXplb2YgKEdzdFRyaWdnZXJDb250cm9sU291cmNlQ2xhc3MpLCAyODB9LAotICB7IkdzdFRyaWdnZXJDb250cm9sU291cmNlIiwgc2l6ZW9mIChHc3RUcmlnZ2VyQ29udHJvbFNvdXJjZSksIDI0MH0sCi0gIHsiR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyIsIHNpemVvZiAoR3N0TmV0Q2xpZW50Q2xvY2tDbGFzcyksIDMyOH0sCi0gIHsiR3N0TmV0Q2xpZW50Q2xvY2siLCBzaXplb2YgKEdzdE5ldENsaWVudENsb2NrKSwgMjA4fSwKLSAgeyJHc3ROZXRUaW1lUGFja2V0Iiwgc2l6ZW9mIChHc3ROZXRUaW1lUGFja2V0KSwgMTZ9LAotICB7IkdzdE5ldFRpbWVQcm92aWRlckNsYXNzIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXJDbGFzcyksIDIxNn0sCi0gIHsiR3N0TmV0VGltZVByb3ZpZGVyIiwgc2l6ZW9mIChHc3ROZXRUaW1lUHJvdmlkZXIpLCAxMjh9LAotICB7IkdzdFB1c2hTcmNDbGFzcyIsIHNpemVvZiAoR3N0UHVzaFNyY0NsYXNzKSwgODU2fSwKLSAgeyJHc3RQdXNoU3JjIiwgc2l6ZW9mIChHc3RQdXNoU3JjKSwgNjgwfSwKLSAgeyJHc3RUaW1lZFZhbHVlIiwgc2l6ZW9mIChHc3RUaW1lZFZhbHVlKSwgMTZ9LAotICB7TlVMTCwgMCwgMH0KLX07CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmMgYi90ZXN0cy9jaGVjay9saWJzL3Rlc3RfdHJhbnNmb3JtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDZmODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy90ZXN0X3RyYW5zZm9ybS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR0xpc3QgKmV2ZW50czsKLSAgR0xpc3QgKmJ1ZmZlcnM7Ci0gIEdzdEVsZW1lbnQgKnRyYW5zOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmtsYXNzOwotfSBUZXN0VHJhbnNEYXRhOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3Rlc3RfdHJhbnNfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJmb28veC1iYXIiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfdGVzdF90cmFuc19zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImZvby94LWJhciIpCi0gICAgKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RUcmFucyBHc3RUZXN0VHJhbnM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdFRyYW5zQ2xhc3MgR3N0VGVzdFRyYW5zQ2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RFU1RfVFJBTlMob2JqKSAoKEdzdFRlc3RUcmFucyAqKShvYmopKQotCi1zdHJ1Y3QgX0dzdFRlc3RUcmFucwotewotICBHc3RCYXNlVHJhbnNmb3JtIGVsZW1lbnQ7Ci0KLSAgVGVzdFRyYW5zRGF0YSAqZGF0YTsKLX07Ci0KLXN0cnVjdCBfR3N0VGVzdFRyYW5zQ2xhc3MKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuICgqa2xhc3NfdHJhbnNmb3JtKSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RCdWZmZXIgKiBvdXRidWYpID0gTlVMTDsKLXN0YXRpYyBHc3RGbG93UmV0dXJuICgqa2xhc3NfdHJhbnNmb3JtX2lwKSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZikgPSBOVUxMOwotc3RhdGljIGdib29sZWFuICgqa2xhc3Nfc2V0X2NhcHMpIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdENhcHMgKiBpbmNhcHMsCi0gICAgR3N0Q2FwcyAqIG91dGNhcHMpID0gTlVMTDsKLXN0YXRpYyBHc3RDYXBzICooKmtsYXNzX3RyYW5zZm9ybV9jYXBzKSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyKSA9IE5VTEw7Ci1zdGF0aWMgZ2Jvb2xlYW4gKCprbGFzc190cmFuc2Zvcm1fc2l6ZSkgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgZ3NpemUgc2l6ZSwgR3N0Q2FwcyAqIG90aGVyY2FwcywKLSAgICBnc2l6ZSAqIG90aGVyc2l6ZSkgPSBOVUxMOwotc3RhdGljIGdib29sZWFuIGtsYXNzX3Bhc3N0aHJvdWdoX29uX3NhbWVfY2FwcyA9IEZBTFNFOwotR3N0Rmxvd1JldHVybiAoKmtsYXNzX3N1Ym1pdF9pbnB1dF9idWZmZXIpIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgZ2Jvb2xlYW4gaXNfZGlzY29udCwgR3N0QnVmZmVyICogaW5wdXQpID0gTlVMTDsKLUdzdEZsb3dSZXR1cm4gKCprbGFzc19nZW5lcmF0ZV9vdXRwdXQpIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICoqIG91dGJ1ZikgPSBOVUxMOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnNpbmtfdGVtcGxhdGUgPSAmZ3N0X3Rlc3RfdHJhbnNfc2lua190ZW1wbGF0ZTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqc3JjX3RlbXBsYXRlID0gJmdzdF90ZXN0X3RyYW5zX3NyY190ZW1wbGF0ZTsKLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X3RyYW5zX2NsYXNzX2luaXQgKEdzdFRlc3RUcmFuc0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICp0cmFuc19jbGFzczsKLQotICBlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgdHJhbnNfY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIlRlc3RUcmFucyIsCi0gICAgICAiRmlsdGVyL1Rlc3QiLCAiVGVzdCB0cmFuc2Zvcm0iLCAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCBzcmNfdGVtcGxhdGUpOwotCi0gIEdTVF9JTkZPICgic2V0dGluZyB1cCAlcyIsIGdfdHlwZV9uYW1lICgoKEdUeXBlQ2xhc3MgKikga2xhc3MpLT5nX3R5cGUpKTsKLQotICB0cmFuc19jbGFzcy0+cGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzID0ga2xhc3NfcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzOwotICBpZiAoa2xhc3NfdHJhbnNmb3JtX2lwICE9IE5VTEwpCi0gICAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9pcCA9IGtsYXNzX3RyYW5zZm9ybV9pcDsKLSAgaWYgKGtsYXNzX3RyYW5zZm9ybSAhPSBOVUxMKQotICAgIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm0gPSBrbGFzc190cmFuc2Zvcm07Ci0gIGlmIChrbGFzc190cmFuc2Zvcm1fY2FwcyAhPSBOVUxMKQotICAgIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1fY2FwcyA9IGtsYXNzX3RyYW5zZm9ybV9jYXBzOwotICBpZiAoa2xhc3NfdHJhbnNmb3JtX3NpemUgIT0gTlVMTCkKLSAgICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX3NpemUgPSBrbGFzc190cmFuc2Zvcm1fc2l6ZTsKLSAgaWYgKGtsYXNzX3NldF9jYXBzICE9IE5VTEwpCi0gICAgdHJhbnNfY2xhc3MtPnNldF9jYXBzID0ga2xhc3Nfc2V0X2NhcHM7Ci0gIGlmIChrbGFzc19zdWJtaXRfaW5wdXRfYnVmZmVyICE9IE5VTEwpCi0gICAgdHJhbnNfY2xhc3MtPnN1Ym1pdF9pbnB1dF9idWZmZXIgPSBrbGFzc19zdWJtaXRfaW5wdXRfYnVmZmVyOwotICBpZiAoa2xhc3NfZ2VuZXJhdGVfb3V0cHV0KQotICAgIHRyYW5zX2NsYXNzLT5nZW5lcmF0ZV9vdXRwdXQgPSBrbGFzc19nZW5lcmF0ZV9vdXRwdXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF90cmFuc19pbml0IChHc3RUZXN0VHJhbnMgKiB0aGlzKQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfdHJhbnNfc2V0X2RhdGEgKEdzdFRlc3RUcmFucyAqIHRoaXMsIFRlc3RUcmFuc0RhdGEgKiBkYXRhKQotewotICB0aGlzLT5kYXRhID0gZGF0YTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLXJlc3VsdF9zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBUZXN0VHJhbnNEYXRhICpkYXRhOwotCi0gIGRhdGEgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0KLSAgZGF0YS0+YnVmZmVycyA9IGdfbGlzdF9hcHBlbmQgKGRhdGEtPmJ1ZmZlcnMsIGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi0jaWYgMAotc3RhdGljIEdzdEZsb3dSZXR1cm4KLXJlc3VsdF9idWZmZXJfYWxsb2MgKEdzdFBhZCAqIHBhZCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsIEdzdENhcHMgKiBjYXBzLAotICAgIEdzdEJ1ZmZlciAqKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBUZXN0VHJhbnNEYXRhICpkYXRhOwotCi0gIGRhdGEgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0KLSAgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7Ci0gIGdzdF9idWZmZXJfc2V0X2NhcHMgKCpidWYsIGNhcHMpOwotICByZXMgPSBHU1RfRkxPV19PSzsKLQotICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLXN0YXRpYyBUZXN0VHJhbnNEYXRhICoKLWdzdF90ZXN0X3RyYW5zX25ldyAodm9pZCkKLXsKLSAgVGVzdFRyYW5zRGF0YSAqcmVzOwotICBHc3RQYWQgKnRtcDsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotICBHVHlwZSB0eXBlOwotCi0gIC8qIHdlIHJlZ2lzdGVyIGEgbmV3IHN1Yi1jbGFzcyBmb3IgZXZlcnkgdGVzdC1ydW4sIHNvIHRoZSBjbGFzcyBpbml0Ci0gICAqIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZXZlcnkgdGVzdCBydW4gYW5kIGNhbiBiZSBzZXQgdXAgcHJvcGVybHkKLSAgICogZXZlbiB3aXRoIENLX0ZPUks9bm8gKi8KLSAgewotICAgIHN0YXRpYyBnaW50IGNvdW50ZXIgPSAwOwotICAgIGdjaGFyIG5hbWVbMTAwXTsKLQotICAgIGdfc25wcmludGYgKG5hbWUsIHNpemVvZiAobmFtZSksICJHc3RUZXN0VHJhbnMlZCIsICsrY291bnRlcik7Ci0KLSAgICB0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpY19zaW1wbGUgKEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNLCBuYW1lLAotICAgICAgICBzaXplb2YgKEdzdFRlc3RUcmFuc0NsYXNzKSwgKEdDbGFzc0luaXRGdW5jKSBnc3RfdGVzdF90cmFuc19jbGFzc19pbml0LAotICAgICAgICBzaXplb2YgKEdzdFRlc3RUcmFucyksIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X3Rlc3RfdHJhbnNfaW5pdCwgMCk7Ci0gIH0KLQotICByZXMgPSBnX25ldzAgKFRlc3RUcmFuc0RhdGEsIDEpOwotICByZXMtPnRyYW5zID0gZ19vYmplY3RfbmV3ICh0eXBlLCBOVUxMKTsKLQotICB0ZW1wbCA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoc2lua190ZW1wbGF0ZSk7Ci0gIHRlbXBsLT5kaXJlY3Rpb24gPSBHU1RfUEFEX1NSQzsKLSAgcmVzLT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbCwgInNyYyIpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZW1wbCk7Ci0KLSAgdGVtcGwgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKHNyY190ZW1wbGF0ZSk7Ci0gIHRlbXBsLT5kaXJlY3Rpb24gPSBHU1RfUEFEX1NJTks7Ci0gIHJlcy0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCAic2luayIpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0ZW1wbCk7Ci0KLSAgcmVzLT5rbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9HRVRfQ0xBU1MgKHJlcy0+dHJhbnMpOwotCi0gIGdzdF90ZXN0X3RyYW5zX3NldF9kYXRhIChHU1RfVEVTVF9UUkFOUyAocmVzLT50cmFucyksIHJlcyk7Ci0gIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAocmVzLT5zaW5rcGFkLCByZXMpOwotCi0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChyZXMtPnNpbmtwYWQsIHJlc3VsdF9zaW5rX2NoYWluKTsKLQotICB0bXAgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocmVzLT50cmFucywgInNpbmsiKTsKLSAgZ3N0X3BhZF9saW5rIChyZXMtPnNyY3BhZCwgdG1wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodG1wKTsKLQotICB0bXAgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocmVzLT50cmFucywgInNyYyIpOwotICBnc3RfcGFkX2xpbmsgKHRtcCwgcmVzLT5zaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodG1wKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHJlcy0+c2lua3BhZCwgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocmVzLT50cmFucywgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocmVzLT5zcmNwYWQsIFRSVUUpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAocmVzLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfdHJhbnNfZnJlZSAoVGVzdFRyYW5zRGF0YSAqIGRhdGEpCi17Ci0gIEdzdFBhZCAqdG1wOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZGF0YS0+c2lua3BhZCwgRkFMU0UpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRhdGEtPnRyYW5zLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZGF0YS0+c3JjcGFkLCBGQUxTRSk7Ci0KLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRhdGEtPnRyYW5zLCAic3JjIik7Ci0gIGdzdF9wYWRfdW5saW5rICh0bXAsIGRhdGEtPnNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOwotCi0gIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkYXRhLT50cmFucywgInNpbmsiKTsKLSAgZ3N0X3BhZF9saW5rIChkYXRhLT5zcmNwYWQsIHRtcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZGF0YS0+c3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZGF0YS0+c2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRhdGEtPnRyYW5zKTsKLQotICBnX2ZyZWUgKGRhdGEpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Rlc3RfdHJhbnNfcHVzaCAoVGVzdFRyYW5zRGF0YSAqIGRhdGEsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChkYXRhLT5zcmNwYWQsIGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfdGVzdF90cmFuc19wb3AgKFRlc3RUcmFuc0RhdGEgKiBkYXRhKQotewotICBHc3RCdWZmZXIgKnJldDsKLQotICBpZiAoZGF0YS0+YnVmZmVycykgewotICAgIHJldCA9IGRhdGEtPmJ1ZmZlcnMtPmRhdGE7Ci0gICAgZGF0YS0+YnVmZmVycyA9IGdfbGlzdF9kZWxldGVfbGluayAoZGF0YS0+YnVmZmVycywgZGF0YS0+YnVmZmVycyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0ID0gTlVMTDsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90ZXN0X3RyYW5zX3NldGNhcHMgKFRlc3RUcmFuc0RhdGEgKiBkYXRhLCBHc3RDYXBzICogY2FwcykKLXsKLSAgcmV0dXJuIGdzdF9wYWRfc2V0X2NhcHMgKGRhdGEtPnNyY3BhZCwgY2Fwcyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Rlc3RfdHJhbnNfcHVzaF9zZWdtZW50IChUZXN0VHJhbnNEYXRhICogZGF0YSkKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIHJldHVybiBnc3RfcGFkX3B1c2hfZXZlbnQgKGRhdGEtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0xLmMgYi90ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVlNjQ3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9saWJzL3RyYW5zZm9ybTEuYworKysgL2Rldi9udWxsCkBAIC0xLDkzMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBzb21lIHVuaXQgdGVzdHMgZm9yIEdzdEJhc2VUcmFuc2Zvcm0KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLQotI2luY2x1ZGUgInRlc3RfdHJhbnNmb3JtLmMiCi0KLXN0YXRpYyBnYm9vbGVhbiBzZXRfY2Fwc19wdDFfY2FsbGVkOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNldF9jYXBzX3B0MSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RDYXBzICogaW5jYXBzLCBHc3RDYXBzICogb3V0Y2FwcykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJzZXRfY2FwcyBjYWxsZWQiKTsKLQotICBzZXRfY2Fwc19wdDFfY2FsbGVkID0gVFJVRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogYmFzaWMgcGFzc3Rocm91Z2gsIHdlIGRvbid0IGhhdmUgYW55IHRyYW5zZm9ybSBmdW5jdGlvbnMgc28gd2UgY2FuIG9ubHkKLSAqIHBlcmZvcm0gcGFzc3Rocm91Z2guIFdlIGFsc28gZG9uJ3QgaGF2ZSBjYXBzLCB3aGljaCBpcyBmaW5lICovCi1HU1RfU1RBUlRfVEVTVCAoYmFzZXRyYW5zZm9ybV9jaGFpbl9wdDEpCi17Ci0gIFRlc3RUcmFuc0RhdGEgKnRyYW5zOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAga2xhc3Nfc2V0X2NhcHMgPSBzZXRfY2Fwc19wdDE7Ci0gIHRyYW5zID0gZ3N0X3Rlc3RfdHJhbnNfbmV3ICgpOwotCi0gIGdzdF90ZXN0X3RyYW5zX3B1c2hfc2VnbWVudCAodHJhbnMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGhvdXQgY2Fwcywgc2l6ZSAyMCIpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjApOwotCi0gIHNldF9jYXBzX3B0MV9jYWxsZWQgPSBGQUxTRTsKLSAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQxX2NhbGxlZCA9PSBGQUxTRSk7Ci0KLSAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGhvdXQgY2Fwcywgc2l6ZSAxMCIpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTApOwotICBzZXRfY2Fwc19wdDFfY2FsbGVkID0gRkFMU0U7Ci0gIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKHNldF9jYXBzX3B0MV9jYWxsZWQgPT0gRkFMU0UpOwotCi0gIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOwotICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSAxMCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiZm9vL3gtYmFyIik7Ci0gIHNldF9jYXBzX3B0MV9jYWxsZWQgPSBGQUxTRTsKLSAgZ3N0X3Rlc3RfdHJhbnNfc2V0Y2FwcyAodHJhbnMsIGNhcHMpOwotICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQxX2NhbGxlZCA9PSBUUlVFKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdzdF90ZXN0X3RyYW5zX3B1c2hfc2VnbWVudCAodHJhbnMpOwotCi0gIGdzdF90ZXN0X3RyYW5zX2ZyZWUgKHRyYW5zKTsKLQotICBrbGFzc190cmFuc2Zvcm1faXAgPSBOVUxMOwotICBrbGFzc190cmFuc2Zvcm0gPSBOVUxMOwotICBrbGFzc190cmFuc2Zvcm1fY2FwcyA9IE5VTEw7Ci0gIGtsYXNzX3RyYW5zZm9ybV9zaXplID0gTlVMTDsKLSAga2xhc3Nfc2V0X2NhcHMgPSBOVUxMOwotICBrbGFzc19zdWJtaXRfaW5wdXRfYnVmZmVyID0gTlVMTDsKLSAga2xhc3NfZ2VuZXJhdGVfb3V0cHV0ID0gTlVMTDsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2Jvb2xlYW4gc2V0X2NhcHNfcHQyX2NhbGxlZDsKLQotc3RhdGljIGdib29sZWFuCi1zZXRfY2Fwc19wdDIgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGluY2FwcywgR3N0Q2FwcyAqIG91dGNhcHMpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic2V0X2NhcHMgY2FsbGVkIik7Ci0KLSAgc2V0X2NhcHNfcHQyX2NhbGxlZCA9IFRSVUU7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpbmNhcHMsIG91dGNhcHMpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogYmFzaWMgcGFzc3Rocm91Z2gsIHdlIGRvbid0IGhhdmUgYW55IHRyYW5zZm9ybSBmdW5jdGlvbnMgc28gd2UgY2FuIG9ubHkKLSAqIHBlcmZvcm0gcGFzc3Rocm91Z2ggd2l0aCBzYW1lIGNhcHMgKi8KLUdTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX3B0MikKLXsKLSAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RGbG93UmV0dXJuIHJlczsKLQotICBrbGFzc19zZXRfY2FwcyA9IHNldF9jYXBzX3B0MjsKLSAgdHJhbnMgPSBnc3RfdGVzdF90cmFuc19uZXcgKCk7Ci0KLSAgLyogZmlyc3QgYnVmZmVyICovCi0gIHNldF9jYXBzX3B0Ml9jYWxsZWQgPSBGQUxTRTsKLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJmb28veC1iYXIiKTsKLSAgZ3N0X3Rlc3RfdHJhbnNfc2V0Y2FwcyAodHJhbnMsIGNhcHMpOwotICBnc3RfdGVzdF90cmFuc19wdXNoX3NlZ21lbnQgKHRyYW5zKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRoIGNhcHMsIHNpemUgMjAiKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLQotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChzZXRfY2Fwc19wdDJfY2FsbGVkID09IFRSVUUpOwotCi0gIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOwotICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSAyMCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogc2Vjb25kIGJ1ZmZlciwgcmVuZWdvdGlhdGVzLCBrZWVwcyBleHRyYSB0eXBlIGFyZyBpbiBjYXBzICovCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiZm9vL3gtYmFyIiwgInR5cGUiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgc2V0X2NhcHNfcHQyX2NhbGxlZCA9IEZBTFNFOwotICBnc3RfdGVzdF90cmFuc19zZXRjYXBzICh0cmFucywgY2Fwcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzLCBzaXplIDEwIik7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMCk7Ci0KLSAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQyX2NhbGxlZCA9PSBUUlVFKTsKLQotICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMTApOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIC8qIHdpdGggY2FwcyB0aGF0IGlzIGEgc3VwZXJzZXQgKi8KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJmb28veC1iYXIiKTsKLSAgc2V0X2NhcHNfcHQyX2NhbGxlZCA9IEZBTFNFOwotICBnc3RfdGVzdF90cmFuc19zZXRjYXBzICh0cmFucywgY2Fwcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzLCBzaXplIDEwIik7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMCk7Ci0KLSAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfcHQyX2NhbGxlZCA9PSBUUlVFKTsKLQotICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMTApOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdzdF90ZXN0X3RyYW5zX2ZyZWUgKHRyYW5zKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2Jvb2xlYW4gdHJhbnNmb3JtX2lwXzFfY2FsbGVkOwotc3RhdGljIGdib29sZWFuIHRyYW5zZm9ybV9pcF8xX3dyaXRhYmxlOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdHJhbnNmb3JtX2lwXzEgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogYnVmKQotewotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInRyYW5zZm9ybSBjYWxsZWQiKTsKLQotICB0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPSBUUlVFOwotICB0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9IGdzdF9idWZmZXJfaXNfd3JpdGFibGUgKGJ1Zik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ3cml0YWJsZTogJWQiLCB0cmFuc2Zvcm1faXBfMV93cml0YWJsZSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi0vKiBiYXNpYyBpbi1wbGFjZSwgY2hlY2sgaWYgdGhlIF9pcCBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1ZmZlciBzaG91bGQKLSAqIGJlIHdyaXRhYmxlLiBubyBzZXRjYXBzIGlzIHNldCAqLwotR1NUX1NUQVJUX1RFU1QgKGJhc2V0cmFuc2Zvcm1fY2hhaW5faXAxKQotewotICBUZXN0VHJhbnNEYXRhICp0cmFuczsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotCi0gIGtsYXNzX3RyYW5zZm9ybV9pcCA9IHRyYW5zZm9ybV9pcF8xOwotICB0cmFucyA9IGdzdF90ZXN0X3RyYW5zX25ldyAoKTsKLQotICBnc3RfdGVzdF90cmFuc19wdXNoX3NlZ21lbnQgKHRyYW5zKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMsIHNpemUgMjAiKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLQotICB0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPSBGQUxTRTsKLSAgdHJhbnNmb3JtX2lwXzFfd3JpdGFibGUgPSBUUlVFOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9PSBUUlVFKTsKLQotICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGhvdXQgY2FwcyBleHRyYSByZWYsIHNpemUgMjAiKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLSAgLyogdGFrZSBhZGRpdGlvbmFsIHJlZiB0byBtYWtlIGl0IG5vbi13cml0YWJsZSAqLwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDIpOwotCi0gIHRyYW5zZm9ybV9pcF8xX2NhbGxlZCA9IEZBTFNFOwotICB0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9IEZBTFNFOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPT0gVFJVRSk7Ci0gIC8qIGNvcHkgc2hvdWxkIGhhdmUgYmVlbiB0YWtlbiB3aXRoIHBhZC1hbGxvYyAqLwotICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2lwXzFfd3JpdGFibGUgPT0gVFJVRSk7Ci0gIC8qIGFmdGVyIHB1c2gsIGdldCByaWQgb2YgdGhlIGZpbmFsIHJlZiB3ZSBoYWQgKi8KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOwotCi0gIC8qIG91dHB1dCBidWZmZXIgaGFzIHJlZmNvdW50IDEgKi8KLSAgZmFpbF91bmxlc3MgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAoYnVmZmVyKSA9PSAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICAvKiB3aXRoIGNhcHMgYnVmZmVyICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYWxsb2Mgd2l0aG91dCBjYXBzLCBzaXplIDIwIik7Ci0KLSAgZ3N0X3Rlc3RfdHJhbnNfZnJlZSAodHJhbnMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnYm9vbGVhbiBzZXRfY2Fwc18xX2NhbGxlZDsKLQotc3RhdGljIGdib29sZWFuCi1zZXRfY2Fwc18xIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdENhcHMgKiBpbmNhcHMsIEdzdENhcHMgKiBvdXRjYXBzKQotewotICBHc3RDYXBzICpjYXBzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic2V0X2NhcHMgY2FsbGVkIik7Ci0KLSAgc2V0X2NhcHNfMV9jYWxsZWQgPSBUUlVFOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiZm9vL3gtYmFyIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpbmNhcHMsIGNhcHMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChvdXRjYXBzLCBjYXBzKSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBiYXNpYyBpbi1wbGFjZSwgY2hlY2sgaWYgdGhlIF9pcCBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1ZmZlciBzaG91bGQgYmUKLSAqIHdyaXRhYmxlLiB3ZSBhbHNvIHNldCBhIHNldGNhcHMgZnVuY3Rpb24gYW5kIHNlZSBpZiBpdCdzIGNhbGxlZC4gKi8KLUdTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX2lwMikKLXsKLSAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBrbGFzc190cmFuc2Zvcm1faXAgPSB0cmFuc2Zvcm1faXBfMTsKLSAga2xhc3Nfc2V0X2NhcHMgPSBzZXRfY2Fwc18xOwotCi0gIHRyYW5zID0gZ3N0X3Rlc3RfdHJhbnNfbmV3ICgpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiZm9vL3gtYmFyIik7Ci0gIGdzdF90ZXN0X3RyYW5zX3B1c2hfc2VnbWVudCAodHJhbnMpOwotCi0gIC8qIGZpcnN0IHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGhvdXQgY2FwcywgdGhpcyBzaG91bGQgZmFpbCAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMsIHNpemUgMjAiKTsKLQotICB0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPSBGQUxTRTsKLSAgdHJhbnNmb3JtX2lwXzFfd3JpdGFibGUgPSBGQUxTRTsKLSAgc2V0X2NhcHNfMV9jYWxsZWQgPSBGQUxTRTsKLSAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2lwXzFfY2FsbGVkID09IEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9pcF8xX3dyaXRhYmxlID09IEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKHNldF9jYXBzXzFfY2FsbGVkID09IEZBTFNFKTsKLQotICAvKiB0cnkgdG8gcHVzaCBhIGJ1ZmZlciB3aXRoIGNhcHMgKi8KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0cmFucy0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0cmFucy0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKLQotICBzZXRfY2Fwc18xX2NhbGxlZCA9IEZBTFNFOwotICBnc3RfdGVzdF90cmFuc19zZXRjYXBzICh0cmFucywgY2Fwcyk7Ci0gIGdzdF90ZXN0X3RyYW5zX3B1c2hfc2VnbWVudCAodHJhbnMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGggY2Fwcywgc2l6ZSAyMCIpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjApOwotCi0gIHRyYW5zZm9ybV9pcF8xX2NhbGxlZCA9IEZBTFNFOwotICB0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9IEZBTFNFOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV9jYWxsZWQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1faXBfMV93cml0YWJsZSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHNldF9jYXBzXzFfY2FsbGVkID09IFRSVUUpOwotCi0gIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOwotICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSAyMCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzIGV4dHJhIHJlZiwgc2l6ZSAyMCIpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjApOwotICAvKiB0YWtlIGFkZGl0aW9uYWwgcmVmIHRvIG1ha2UgaXQgbm9uLXdyaXRhYmxlICovCi0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMik7Ci0KLSAgdHJhbnNmb3JtX2lwXzFfY2FsbGVkID0gRkFMU0U7Ci0gIHRyYW5zZm9ybV9pcF8xX3dyaXRhYmxlID0gRkFMU0U7Ci0gIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9pcF8xX2NhbGxlZCA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9pcF8xX3dyaXRhYmxlID09IFRSVUUpOwotICAvKiBhZnRlciBwdXNoLCBnZXQgcmlkIG9mIHRoZSBmaW5hbCByZWYgd2UgaGFkICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKLQotICAvKiBvdXRwdXQgYnVmZmVyIGhhcyByZWZjb3VudCAxICovCi0gIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdzdF90ZXN0X3RyYW5zX2ZyZWUgKHRyYW5zKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZV9jdDEgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJiYXoveC1mb28iKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBzZXRfY2Fwc19jdDFfY2FsbGVkOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNldF9jYXBzX2N0MSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RDYXBzICogaW5jYXBzLCBHc3RDYXBzICogb3V0Y2FwcykKLXsKLSAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInNldF9jYXBzIGNhbGxlZCIpOwotCi0gIGNhcHMxID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImJhei94LWZvbyIpOwotICBjYXBzMiA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJmb28veC1iYXIiKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGluY2FwcywgY2FwczEpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChvdXRjYXBzLCBjYXBzMikpOwotCi0gIHNldF9jYXBzX2N0MV9jYWxsZWQgPSBUUlVFOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB0cmFuc2Zvcm1fY3QxX2NhbGxlZDsKLXN0YXRpYyBnYm9vbGVhbiB0cmFuc2Zvcm1fY3QxX3dyaXRhYmxlOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdHJhbnNmb3JtX2N0MSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBpbiwgR3N0QnVmZmVyICogb3V0KQotewotICB0cmFuc2Zvcm1fY3QxX2NhbGxlZCA9IFRSVUU7Ci0gIHRyYW5zZm9ybV9jdDFfd3JpdGFibGUgPSBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChvdXQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAid3JpdGFibGU6ICVkIiwgdHJhbnNmb3JtX2N0MV93cml0YWJsZSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi10cmFuc2Zvcm1fY2Fwc19jdDEgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0UGFkRGlyZWN0aW9uIGRpciwKLSAgICBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmVzOwotCi0gIGlmIChkaXIgPT0gR1NUX1BBRF9TSU5LKSB7Ci0gICAgcmVzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImZvby94LWJhciIpOwotICB9IGVsc2UgewotICAgIHJlcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJiYXoveC1mb28iKTsKLSAgfQotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0ZW1wID0KLSAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmVzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChyZXMpOwotICAgIHJlcyA9IHRlbXA7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXRyYW5zZm9ybV9zaXplX2N0MSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAotICAgIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplLCBHc3RDYXBzICogb3RoZXJjYXBzLCBnc2l6ZSAqIG90aGVyc2l6ZSkKLXsKLSAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkspIHsKLSAgICAqb3RoZXJzaXplID0gc2l6ZSAqIDI7Ci0gIH0gZWxzZSB7Ci0gICAgKm90aGVyc2l6ZSA9IHNpemUgLyAyOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIGJhc2ljIGNvcHktdHJhbnNmb3JtLCBjaGVjayBpZiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIGlzIGNhbGxlZCwKLSAqIGJ1ZmZlciBzaG91bGQgYmUgd3JpdGFibGUuIHdlIGFsc28gc2V0IGEgc2V0Y2FwcyBmdW5jdGlvbiBhbmQKLSAqIHNlZSBpZiBpdCdzIGNhbGxlZC4gKi8KLUdTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX2N0MSkKLXsKLSAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0Q2FwcyAqaW5jYXBzLCAqb3V0Y2FwczsKLQotICBzaW5rX3RlbXBsYXRlID0gJnNpbmtfdGVtcGxhdGVfY3QxOwotICBrbGFzc190cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fY3QxOwotICBrbGFzc19zZXRfY2FwcyA9IHNldF9jYXBzX2N0MTsKLSAga2xhc3NfdHJhbnNmb3JtX2NhcHMgPSB0cmFuc2Zvcm1fY2Fwc19jdDE7Ci0gIGtsYXNzX3RyYW5zZm9ybV9zaXplID0gdHJhbnNmb3JtX3NpemVfY3QxOwotCi0gIHRyYW5zID0gZ3N0X3Rlc3RfdHJhbnNfbmV3ICgpOwotCi0gIGluY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJiYXoveC1mb28iKTsKLSAgb3V0Y2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJmb28veC1iYXIiKTsKLSAgZ3N0X3Rlc3RfdHJhbnNfcHVzaF9zZWdtZW50ICh0cmFucyk7Ci0KLSAgLyogZmlyc3QgdHJ5IHRvIHB1c2ggYSBidWZmZXIgd2l0aG91dCBjYXBzLCB0aGlzIHNob3VsZCBmYWlsICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGhvdXQgY2FwcyIpOwotCi0gIHRyYW5zZm9ybV9jdDFfY2FsbGVkID0gRkFMU0U7Ci0gIHRyYW5zZm9ybV9jdDFfd3JpdGFibGUgPSBGQUxTRTsKLSAgc2V0X2NhcHNfY3QxX2NhbGxlZCA9IEZBTFNFOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QxX2NhbGxlZCA9PSBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QxX3dyaXRhYmxlID09IEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKHNldF9jYXBzX2N0MV9jYWxsZWQgPT0gRkFMU0UpOwotCi0gIC8qIHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGggY2FwcyAqLwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotCi0gIHNldF9jYXBzX2N0MV9jYWxsZWQgPSBGQUxTRTsKLSAgZ3N0X3Rlc3RfdHJhbnNfc2V0Y2FwcyAodHJhbnMsIGluY2Fwcyk7Ci0gIGdzdF90ZXN0X3RyYW5zX3B1c2hfc2VnbWVudCAodHJhbnMpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGggY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzKTsKLQotICB0cmFuc2Zvcm1fY3QxX2NhbGxlZCA9IEZBTFNFOwotICB0cmFuc2Zvcm1fY3QxX3dyaXRhYmxlID0gRkFMU0U7Ci0gIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9jdDFfY2FsbGVkID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0MV93cml0YWJsZSA9PSBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKHNldF9jYXBzX2N0MV9jYWxsZWQgPT0gVFJVRSk7Ci0KLSAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDQwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLSAgLyogdGFrZSBhZGRpdGlvbmFsIHJlZiB0byBtYWtlIGl0IG5vbi13cml0YWJsZSAqLwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGggY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzKTsKLQotICB0cmFuc2Zvcm1fY3QxX2NhbGxlZCA9IEZBTFNFOwotICB0cmFuc2Zvcm1fY3QxX3dyaXRhYmxlID0gRkFMU0U7Ci0gIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9jdDFfY2FsbGVkID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0MV93cml0YWJsZSA9PSBUUlVFKTsKLSAgLyogYWZ0ZXIgcHVzaCwgZ2V0IHJpZCBvZiB0aGUgZmluYWwgcmVmIHdlIGhhZCAqLwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOwotICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSA0MCk7Ci0KLSAgLyogb3V0cHV0IGJ1ZmZlciBoYXMgcmVmY291bnQgMSAqLwotICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDEpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGdzdF9jYXBzX3VucmVmIChpbmNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAob3V0Y2Fwcyk7Ci0KLSAgZ3N0X3Rlc3RfdHJhbnNfZnJlZSAodHJhbnMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGVfY3QyID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImJhei94LWZvbzsgZm9vL3gtYmFyIikKLSAgICApOwotCi1zdGF0aWMgZ2ludCBzZXRfY2Fwc19jdDJfY2FzZTsKLXN0YXRpYyBnYm9vbGVhbiBzZXRfY2Fwc19jdDJfY2FsbGVkOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNldF9jYXBzX2N0MiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RDYXBzICogaW5jYXBzLCBHc3RDYXBzICogb3V0Y2FwcykKLXsKLSAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInNldF9jYXBzIGNhbGxlZCIpOwotCi0gIGNhcHMxID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImZvby94LWJhciIpOwotCi0gIGlmIChzZXRfY2Fwc19jdDJfY2FzZSA9PSAxKQotICAgIGNhcHMyID0gZ3N0X2NhcHNfY29weSAoY2FwczEpOwotICBlbHNlCi0gICAgY2FwczIgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYmF6L3gtZm9vIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpbmNhcHMsIGNhcHMxKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAob3V0Y2FwcywgY2FwczIpKTsKLQotICBzZXRfY2Fwc19jdDJfY2FsbGVkID0gVFJVRTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gdHJhbnNmb3JtX2N0Ml9jYWxsZWQ7Ci1zdGF0aWMgZ2Jvb2xlYW4gdHJhbnNmb3JtX2N0Ml93cml0YWJsZTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLXRyYW5zZm9ybV9jdDIgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogaW4sIEdzdEJ1ZmZlciAqIG91dCkKLXsKLSAgdHJhbnNmb3JtX2N0Ml9jYWxsZWQgPSBUUlVFOwotICB0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID0gZ3N0X2J1ZmZlcl9pc193cml0YWJsZSAob3V0KTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIndyaXRhYmxlOiAlZCIsIHRyYW5zZm9ybV9jdDJfd3JpdGFibGUpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotdHJhbnNmb3JtX2NhcHNfY3QyIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXIsCi0gICAgR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdENhcHMgKnJlczsKLQotICBpZiAoZGlyID09IEdTVF9QQURfU0lOSykgewotICAgIC8qIGV2ZXJ5dGhpbmcgb24gdGhlIHNpbmtwYWQgY2FuIGJlIHRyYW5zZm9ybWVkIHRvIHRoZSBvdXRwdXQgZm9ybWF0cyAqLwotICAgIGlmIChzZXRfY2Fwc19jdDJfY2FzZSA9PSAxKQotICAgICAgcmVzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImZvby94LWJhciIpOwotICAgIGVsc2UKLSAgICAgIHJlcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJiYXoveC1mb28iKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBhbGwgb24gdGhlIHNyY3BhZCBjYW4gYmUgdHJhbnNmb3JtZWQgdG8gdGhlIGZvcm1hdCBvZiB0aGUgc2lua3BhZCAqLwotICAgIHJlcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJmb28veC1iYXIiKTsKLSAgfQotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0ZW1wID0KLSAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmVzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChyZXMpOwotICAgIHJlcyA9IHRlbXA7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXRyYW5zZm9ybV9zaXplX2N0MiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAotICAgIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplLCBHc3RDYXBzICogb3RoZXJjYXBzLCBnc2l6ZSAqIG90aGVyc2l6ZSkKLXsKLSAgaWYgKGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBvdGhlcmNhcHMpKSB7Ci0gICAgKm90aGVyc2l6ZSA9IHNpemU7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkspIHsKLSAgICAgICpvdGhlcnNpemUgPSBzaXplICogMjsKLSAgICB9IGVsc2UgewotICAgICAgKm90aGVyc2l6ZSA9IHNpemUgLyAyOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBiYXNpYyBjb3B5LXRyYW5zZm9ybSwgY2hlY2sgaWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiBpcyBjYWxsZWQsCi0gKiBidWZmZXIgc2hvdWxkIGJlIHdyaXRhYmxlLiB3ZSBhbHNvIHNldCBhIHNldGNhcHMgZnVuY3Rpb24gYW5kCi0gKiBzZWUgaWYgaXQncyBjYWxsZWQuICovCi1HU1RfU1RBUlRfVEVTVCAoYmFzZXRyYW5zZm9ybV9jaGFpbl9jdDIpCi17Ci0gIFRlc3RUcmFuc0RhdGEgKnRyYW5zOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdENhcHMgKmluY2FwcywgKm91dGNhcHM7Ci0KLSAgc3JjX3RlbXBsYXRlID0gJnNyY190ZW1wbGF0ZV9jdDI7Ci0gIGtsYXNzX3RyYW5zZm9ybSA9IHRyYW5zZm9ybV9jdDI7Ci0gIGtsYXNzX3NldF9jYXBzID0gc2V0X2NhcHNfY3QyOwotICBrbGFzc190cmFuc2Zvcm1fY2FwcyA9IHRyYW5zZm9ybV9jYXBzX2N0MjsKLSAga2xhc3NfdHJhbnNmb3JtX3NpemUgPSB0cmFuc2Zvcm1fc2l6ZV9jdDI7Ci0KLSAgdHJhbnMgPSBnc3RfdGVzdF90cmFuc19uZXcgKCk7Ci0KLSAgaW5jYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImZvby94LWJhciIpOwotICBvdXRjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImJhei94LWZvbyIpOwotCi0gIGdzdF90ZXN0X3RyYW5zX3B1c2hfc2VnbWVudCAodHJhbnMpOwotCi0gIC8qIGZpcnN0IHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGhvdXQgY2FwcywgdGhpcyBzaG91bGQgZmFpbCAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRob3V0IGNhcHMiKTsKLQotICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOwotICB0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID0gRkFMU0U7Ci0gIHNldF9jYXBzX2N0Ml9jYWxsZWQgPSBGQUxTRTsKLSAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml9jYWxsZWQgPT0gRkFMU0UpOwotICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml93cml0YWJsZSA9PSBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzIChzZXRfY2Fwc19jdDJfY2FsbGVkID09IEZBTFNFKTsKLQotCi0gIC8qIHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGggY2FwcyAqLwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRyYW5zLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotCi0gIHNldF9jYXBzX2N0Ml9jYXNlID0gMTsKLSAgc2V0X2NhcHNfY3QyX2NhbGxlZCA9IEZBTFNFOwotICBnc3RfdGVzdF90cmFuc19zZXRjYXBzICh0cmFucywgaW5jYXBzKTsKLSAgZ3N0X3Rlc3RfdHJhbnNfcHVzaF9zZWdtZW50ICh0cmFucyk7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOwotCi0gIHRyYW5zZm9ybV9jdDJfY2FsbGVkID0gRkFMU0U7Ci0gIHRyYW5zZm9ybV9jdDJfd3JpdGFibGUgPSBGQUxTRTsKLSAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml9jYWxsZWQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID09IFRSVUUpOwotICBmYWlsX3VubGVzcyAoc2V0X2NhcHNfY3QyX2NhbGxlZCA9PSBUUlVFKTsKLQotICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjApOwotICAvKiB0YWtlIGFkZGl0aW9uYWwgcmVmIHRvIG1ha2UgaXQgbm9uLXdyaXRhYmxlICovCi0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJidWZmZXIgd2l0aCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOwotCi0gIHRyYW5zZm9ybV9jdDJfY2FsbGVkID0gRkFMU0U7Ci0gIHRyYW5zZm9ybV9jdDJfd3JpdGFibGUgPSBGQUxTRTsKLSAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAodHJhbnNmb3JtX2N0Ml9jYWxsZWQgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID09IFRSVUUpOwotICAvKiBhZnRlciBwdXNoLCBnZXQgcmlkIG9mIHRoZSBmaW5hbCByZWYgd2UgaGFkICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKLQotICAvKiBvdXRwdXQgYnVmZmVyIGhhcyByZWZjb3VudCAxICovCi0gIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzKTsKLQotICBnc3RfdGVzdF90cmFuc19mcmVlICh0cmFucyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogYmFzaWMgY29weS10cmFuc2Zvcm0sIHdlIHdvcmsgaW4gcGFzc3Rocm91Z2ggaGVyZS4gKi8KLUdTVF9TVEFSVF9URVNUIChiYXNldHJhbnNmb3JtX2NoYWluX2N0MykKLXsKLSAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0Q2FwcyAqaW5jYXBzLCAqb3V0Y2FwczsKLQotICBzcmNfdGVtcGxhdGUgPSAmc3JjX3RlbXBsYXRlX2N0MjsKLSAga2xhc3NfcGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzID0gVFJVRTsKLSAga2xhc3NfdHJhbnNmb3JtID0gdHJhbnNmb3JtX2N0MjsKLSAga2xhc3Nfc2V0X2NhcHMgPSBzZXRfY2Fwc19jdDI7Ci0gIGtsYXNzX3RyYW5zZm9ybV9jYXBzID0gdHJhbnNmb3JtX2NhcHNfY3QyOwotICBrbGFzc190cmFuc2Zvcm1fc2l6ZSA9IHRyYW5zZm9ybV9zaXplX2N0MjsKLQotICB0cmFucyA9IGdzdF90ZXN0X3RyYW5zX25ldyAoKTsKLQotICBpbmNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiZm9vL3gtYmFyIik7Ci0gIG91dGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYmF6L3gtZm9vIik7Ci0KLSAgLyogd2l0aCBwYXNzdGhyb3VnaCBjYXBzICovCi0gIGdzdF90ZXN0X3RyYW5zX3B1c2hfc2VnbWVudCAodHJhbnMpOwotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImFsbG9jIHNpemUgMjAsIHdpdGggcGFzc3Rocm91Z2ggY2FwcyAlIgotICAgICAgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7Ci0KLSAgLyogZmlyc3QgdHJ5IHRvIHB1c2ggYSBidWZmZXIgd2l0aG91dCBjYXBzLCB0aGlzIHNob3VsZCBmYWlsICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGhvdXQgY2FwcyIpOwotCi0gIHRyYW5zZm9ybV9jdDJfY2FsbGVkID0gRkFMU0U7Ci0gIHRyYW5zZm9ybV9jdDJfd3JpdGFibGUgPSBGQUxTRTsKLSAgc2V0X2NhcHNfY3QyX2NhbGxlZCA9IEZBTFNFOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9PSBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX3dyaXRhYmxlID09IEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKHNldF9jYXBzX2N0Ml9jYWxsZWQgPT0gRkFMU0UpOwotCi0gIC8qIHRyeSB0byBwdXNoIGEgYnVmZmVyIHdpdGggY2FwcyAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0cmFucy0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0cmFucy0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKLQotICBzZXRfY2Fwc19jdDJfY2FzZSA9IDE7Ci0gIHNldF9jYXBzX2N0Ml9jYWxsZWQgPSBGQUxTRTsKLSAgZ3N0X3Rlc3RfdHJhbnNfc2V0Y2FwcyAodHJhbnMsIGluY2Fwcyk7Ci0gIGdzdF90ZXN0X3RyYW5zX3B1c2hfc2VnbWVudCAodHJhbnMpOwotCi0gIHRyYW5zZm9ybV9jdDJfY2FsbGVkID0gRkFMU0U7Ci0gIHJlcyA9IGdzdF90ZXN0X3RyYW5zX3B1c2ggKHRyYW5zLCBidWZmZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKHRyYW5zZm9ybV9jdDJfY2FsbGVkID09IEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKHNldF9jYXBzX2N0Ml9jYWxsZWQgPT0gVFJVRSk7Ci0KLSAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDIwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLSAgLyogdGFrZSBhZGRpdGlvbmFsIHJlZiB0byBtYWtlIGl0IG5vbi13cml0YWJsZSAqLwotICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiYnVmZmVyIHdpdGggY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzKTsKLQotICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9PSBGQUxTRSk7Ci0gIC8qIGFmdGVyIHB1c2gsIGdldCByaWQgb2YgdGhlIGZpbmFsIHJlZiB3ZSBoYWQgKi8KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOwotCi0gIC8qIG91dHB1dCBidWZmZXIgaGFzIHJlZmNvdW50IDEgKi8KLSAgZmFpbF91bmxlc3MgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAoYnVmZmVyKSA9PSAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICAvKiBjaGFuZ2UgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYnVmZmVyLWFsbG9jIGZ1bmN0aW9uICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAic3dpdGNoaW5nIHRyYW5zZm9ybSBvdXRwdXQiKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywKLSAgICAgICJidWZmZXIgd2l0aCBpbiBwYXNzdGhyb3VnaCB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTApOwotCi0gIC8qIGRvbid0IHN1Z2dlc3QgYW55dGhpbmcgZWxzZSAqLwotICBzZXRfY2Fwc19jdDJfY2FzZSA9IDI7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAodHJhbnMtPnNpbmtwYWQsIGdzdF9ldmVudF9uZXdfcmVjb25maWd1cmUgKCkpOwotICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9PSBUUlVFKTsKLQotICBidWZmZXIgPSBnc3RfdGVzdF90cmFuc19wb3AgKHRyYW5zKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlciAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gMjApOwotCi0gIC8qIG91dHB1dCBidWZmZXIgaGFzIHJlZmNvdW50IDEgKi8KLSAgZmFpbF91bmxlc3MgKEdTVF9NSU5JX09CSkVDVF9SRUZDT1VOVF9WQUxVRSAoYnVmZmVyKSA9PSAxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTApOwotCi0gIC8qIGRvbid0IHN1Z2dlc3QgYW55dGhpbmcgZWxzZSAqLwotICB0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9IEZBTFNFOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzICh0cmFuc2Zvcm1fY3QyX2NhbGxlZCA9PSBUUlVFKTsKLSAgLyogYWZ0ZXIgcHVzaCwgZ2V0IHJpZCBvZiB0aGUgZmluYWwgcmVmIHdlIGhhZCAqLwotCi0gIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOwotICBmYWlsX3VubGVzcyAoYnVmZmVyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSAyMCk7Ci0KLSAgLyogb3V0cHV0IGJ1ZmZlciBoYXMgcmVmY291bnQgMSAqLwotICBmYWlsX3VubGVzcyAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChidWZmZXIpID09IDEpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGdzdF9jYXBzX3VucmVmIChpbmNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAob3V0Y2Fwcyk7Ci0KLSAgZ3N0X3Rlc3RfdHJhbnNfZnJlZSAodHJhbnMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi10cmFuc2Zvcm0xX3NldHVwICh2b2lkKQotewotICBzaW5rX3RlbXBsYXRlID0gJmdzdF90ZXN0X3RyYW5zX3NpbmtfdGVtcGxhdGU7Ci0gIHNyY190ZW1wbGF0ZSA9ICZnc3RfdGVzdF90cmFuc19zcmNfdGVtcGxhdGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi10cmFuc2Zvcm0xX3RlYXJkb3duICh2b2lkKQotewotICAvKiByZXNldCBnbG9iYWwgc3RhdGUgKi8KLSAga2xhc3NfdHJhbnNmb3JtX2lwID0gTlVMTDsKLSAga2xhc3NfdHJhbnNmb3JtID0gTlVMTDsKLSAga2xhc3NfdHJhbnNmb3JtX2NhcHMgPSBOVUxMOwotICBrbGFzc190cmFuc2Zvcm1fc2l6ZSA9IE5VTEw7Ci0gIGtsYXNzX3NldF9jYXBzID0gTlVMTDsKLSAga2xhc3Nfc3VibWl0X2lucHV0X2J1ZmZlciA9IE5VTEw7Ci0gIGtsYXNzX2dlbmVyYXRlX291dHB1dCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nc3RfYmFzZXRyYW5zZm9ybV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RCYXNlVHJhbnNmb3JtIik7Ci0gIFRDYXNlICp0YyA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjKTsKLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGMsIHRyYW5zZm9ybTFfc2V0dXAsIHRyYW5zZm9ybTFfdGVhcmRvd24pOwotCi0gIC8qIHBhc3MgdGhyb3VnaCAqLwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2V0cmFuc2Zvcm1fY2hhaW5fcHQxKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNldHJhbnNmb3JtX2NoYWluX3B0Mik7Ci0gIC8qIGluIHBsYWNlICovCi0gIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXRyYW5zZm9ybV9jaGFpbl9pcDEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2V0cmFuc2Zvcm1fY2hhaW5faXAyKTsKLSAgLyogY29weSB0cmFuc2Zvcm0gKi8KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCBiYXNldHJhbnNmb3JtX2NoYWluX2N0MSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXRyYW5zZm9ybV9jaGFpbl9jdDIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIGJhc2V0cmFuc2Zvcm1fY2hhaW5fY3QzKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9iYXNldHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2xpYnMvdHJhbnNmb3JtMi5jIGIvdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWY0ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svbGlicy90cmFuc2Zvcm0yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogVW5pdCB0ZXN0cyBmb3IgYmFzZXRyYW5zZm9ybSBjb2xsYXRpb24vc2VwYXJhdGlvbgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotCi0jaW5jbHVkZSAidGVzdF90cmFuc2Zvcm0uYyIKLQotR3N0QnVmZmVyICpidWYxLCAqYnVmMjsKLQotLyogT3V0cHV0IGJ1ZmZlcnMgYXJlIHR3aWNlIHRoZSBzaXplIGFzIGlucHV0ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXRyYW5zZm9ybV9zaXplX2NvbGxhdGUgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwKLSAgICBHc3RDYXBzICogY2FwcywgZ3NpemUgc2l6ZSwgR3N0Q2FwcyAqIG90aGVyY2FwcywgZ3NpemUgKiBvdGhlcnNpemUpCi17Ci0gIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LKSB7Ci0gICAgKm90aGVyc2l6ZSA9IHNpemUgKiAyOwotICB9IGVsc2UgewotICAgICpvdGhlcnNpemUgPSBzaXplIC8gMjsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotY29sbGF0ZV9zdWJtaXRfaW5wdXRfYnVmZmVyIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgZ2Jvb2xlYW4gaXNfZGlzY29udCwgR3N0QnVmZmVyICogaW5wdXQpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHRfcGFyZW50X2NsYXNzOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICB0dF9wYXJlbnRfY2xhc3MgPQotICAgICAgZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTICh0cmFucykpOwotCi0gIHJldCA9IHR0X3BhcmVudF9jbGFzcy0+c3VibWl0X2lucHV0X2J1ZmZlciAodHJhbnMsIGlzX2Rpc2NvbnQsIGlucHV0KTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXQ7Ci0KLSAgZmFpbF91bmxlc3MgKGJ1ZjEgPT0gTlVMTCB8fCBidWYyID09IE5VTEwpOwotCi0gIGlmIChidWYxID09IE5VTEwpIHsKLSAgICBidWYxID0gdHJhbnMtPnF1ZXVlZF9idWY7Ci0gICAgdHJhbnMtPnF1ZXVlZF9idWYgPSBOVUxMOwotICB9IGVsc2UgaWYgKGJ1ZjIgPT0gTlVMTCkgewotICAgIGJ1ZjIgPSB0cmFucy0+cXVldWVkX2J1ZjsKLSAgICB0cmFucy0+cXVldWVkX2J1ZiA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotY29sbGF0ZV9nZW5lcmF0ZV9vdXRwdXQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICoqIG91dGJ1ZikKLXsKLSAgLyogTm90IHJlYWR5IHRvIGdlbmVyYXRlIG91dHB1dCB1bmxlc3Mgd2UndmUgY29sbGVjdGVkIDIgYnVmZmVycyAqLwotICBpZiAoYnVmMSA9PSBOVUxMIHx8IGJ1ZjIgPT0gTlVMTCkKLSAgICByZXR1cm4gR1NUX0JBU0VfVFJBTlNGT1JNX0ZMT1dfRFJPUFBFRDsKLQotICBmYWlsX3VubGVzcyAoYnVmMSAhPSBOVUxMICYmIGJ1ZjIgIT0gTlVMTCk7Ci0gICpvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQwKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYxKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMik7Ci0gIGJ1ZjEgPSBOVUxMOwotICBidWYyID0gTlVMTDsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLS8qIFRha2UgMiBpbnB1dCBidWZmZXJzLCBnZW5lcmF0ZSAxIG91dHB1dAotICogYnVmZmVyIHdpdGggdHdpY2UgdGhlIHNpemUKLSAqLwotR1NUX1NUQVJUX1RFU1QgKGJhc2V0cmFuc2Zvcm1fY2hhaW5fY29sbGF0ZSkKLXsKLSAgVGVzdFRyYW5zRGF0YSAqdHJhbnM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0Q2FwcyAqaW5jYXBzLCAqb3V0Y2FwczsKLQotICBzcmNfdGVtcGxhdGUgPSAmZ3N0X3Rlc3RfdHJhbnNfc3JjX3RlbXBsYXRlOwotICBrbGFzc19wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMgPSBGQUxTRTsKLSAga2xhc3NfdHJhbnNmb3JtX3NpemUgPSB0cmFuc2Zvcm1fc2l6ZV9jb2xsYXRlOwotICBrbGFzc19zdWJtaXRfaW5wdXRfYnVmZmVyID0gY29sbGF0ZV9zdWJtaXRfaW5wdXRfYnVmZmVyOwotICBrbGFzc19nZW5lcmF0ZV9vdXRwdXQgPSBjb2xsYXRlX2dlbmVyYXRlX291dHB1dDsKLQotICB0cmFucyA9IGdzdF90ZXN0X3RyYW5zX25ldyAoKTsKLQotICBpbmNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiZm9vL3gtYmFyIik7Ci0gIG91dGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiZm9vL3gtYmFyIik7Ci0KLSAgZ3N0X3Rlc3RfdHJhbnNfcHVzaF9zZWdtZW50ICh0cmFucyk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0cmFucy0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh0cmFucy0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImJ1ZmZlciB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGluY2Fwcyk7Ci0gIGdzdF90ZXN0X3RyYW5zX3NldGNhcHMgKHRyYW5zLCBpbmNhcHMpOwotICBnc3RfdGVzdF90cmFuc19wdXNoX3NlZ21lbnQgKHRyYW5zKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIwKTsKLSAgcmVzID0gZ3N0X3Rlc3RfdHJhbnNfcHVzaCAodHJhbnMsIGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIFdlIGRvIG5vdCBleHBlY3QgYW4gb3V0cHV0IGJ1ZmZlciBhZnRlciBvbmx5IHB1c2hpbmcgb25lIGlucHV0ICovCi0gIGJ1ZmZlciA9IGdzdF90ZXN0X3RyYW5zX3BvcCAodHJhbnMpOwotICBmYWlsX3VubGVzcyAoYnVmZmVyID09IE5VTEwpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjApOwotICByZXMgPSBnc3RfdGVzdF90cmFuc19wdXNoICh0cmFucywgYnVmZmVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgYnVmZmVyID0gZ3N0X3Rlc3RfdHJhbnNfcG9wICh0cmFucyk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXIgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IDQwKTsKLQotICAvKiBvdXRwdXQgYnVmZmVyIGhhcyByZWZjb3VudCAxICovCi0gIGZhaWxfdW5sZXNzIChHU1RfTUlOSV9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKGJ1ZmZlcikgPT0gMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzKTsKLQotICBnc3RfdGVzdF90cmFuc19mcmVlICh0cmFucyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotZ3N0X2Jhc2V0cmFuc2Zvcm1fY29sbGF0ZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJHc3RCYXNlVHJhbnNmb3JtQ29sbGF0ZSIpOwotICBUQ2FzZSAqdGMgPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Yyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgYmFzZXRyYW5zZm9ybV9jaGFpbl9jb2xsYXRlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGdzdF9iYXNldHJhbnNmb3JtX2NvbGxhdGUpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jIGIvdGVzdHMvY2hlY2svbGlicy90eXBlZmluZGhlbHBlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTBmYzE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2xpYnMvdHlwZWZpbmRoZWxwZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHR5cGVmaW5kIGhlbHBlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg+Ci0KLXN0YXRpYyBjb25zdCBndWludDggdm9yYmlzaWRbMzBdID0geyAweDAxLCAweDc2LCAweDZmLCAweDcyLCAweDYyLCAweDY5LCAweDczLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDQ0LCAweGFjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAzLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxCi19OwotCi1zdGF0aWMgdm9pZCBmb29iYXJfdHlwZWZpbmQgKEdzdFR5cGVGaW5kICogdGYsIGdwb2ludGVyIHVudXNlZCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNDYXBzIGZvb2Jhcl9jYXBzID0gR1NUX1NUQVRJQ19DQVBTICgiZm9vL3gtYmFyIik7Ci0KLSNkZWZpbmUgRk9PQkFSX0NBUFMgKGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZmb29iYXJfY2FwcykpCi0KLS8qIG1ha2Ugc3VyZSB0aGUgZW50aXJlIGRhdGEgaW4gdGhlIGJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHBlZWtpbmcgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2J1ZmZlcl9yYW5nZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3R5cGVfZmluZF9yZWdpc3RlciAoTlVMTCwgImZvby94LWJhciIsCi0gICAgICAgICAgR1NUX1JBTktfUFJJTUFSWSArIDUwLCBmb29iYXJfdHlwZWZpbmQsICJmb29iYXIiLAotICAgICAgICAgIEZPT0JBUl9DQVBTLCBOVUxMLCBOVUxMKSk7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGZhaWxfdW5sZXNzIChidWYgIT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9pbnNlcnRfbWVtb3J5IChidWYsIC0xLAotICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLAotICAgICAgICAgIChncG9pbnRlcikgdm9yYmlzaWQsIDMwLCAwLCAzMCwgTlVMTCwgTlVMTCkpOwotCi0gIGNhcHMgPSBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyIChOVUxMLCBidWYsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9DQVBTX0lTX1NJTVBMRSAoY2FwcykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKTsKLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGZhaWxfdW5sZXNzIChzICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgImZvby94LWJhciIpKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdzdF90eXBlZmluZGhlbHBlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ0eXBlZmluZGhlbHBlciIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9idWZmZXJfcmFuZ2UpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0X3R5cGVmaW5kaGVscGVyKTsKLQotc3RhdGljIHZvaWQKLWZvb2Jhcl90eXBlZmluZCAoR3N0VHlwZUZpbmQgKiB0ZiwgZ3BvaW50ZXIgdW51c2VkKQotewotICBjb25zdCBndWludDggKmRhdGE7Ci0KLSAgZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDEwKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIHZvcmJpc2lkLCAxMCkgPT0gMCk7Ci0KLSAgZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDIwKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIHZvcmJpc2lkLCAyMCkgPT0gMCk7Ci0KLSAgZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDMwKTsKLSAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIHZvcmJpc2lkLCAzMCkgPT0gMCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDAsIDMxKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDEsIDMwKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDI1LCA2KSA9PSBOVUxMKTsKLQotICBkYXRhID0gZ3N0X3R5cGVfZmluZF9wZWVrICh0ZiwgMSwgMjkpOwotICBmYWlsX3VubGVzcyAoZGF0YSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSwgdm9yYmlzaWQgKyAxLCAyOSkgPT0gMCk7Ci0KLSAgZGF0YSA9IGdzdF90eXBlX2ZpbmRfcGVlayAodGYsIDI1LCA0KTsKLSAgZmFpbF91bmxlc3MgKGRhdGEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIHZvcmJpc2lkICsgMjUsIDQpID09IDApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdHlwZV9maW5kX3BlZWsgKHRmLCAtMSwgMjkpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3R5cGVfZmluZF9wZWVrICh0ZiwgLTEsIDEpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3R5cGVfZmluZF9wZWVrICh0ZiwgLTEsIDApID09IE5VTEwpOwotCi0gIGdzdF90eXBlX2ZpbmRfc3VnZ2VzdCAodGYsIEdTVF9UWVBFX0ZJTkRfTUFYSU1VTSwgRk9PQkFSX0NBUFMpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9jbGVhbnVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjY2I1MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL2NsZWFudXAuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBjbGVhbnVwLmM6IFVuaXQgdGVzdCBmb3IgY2xlYW51cCBvZiBwaXBlbGluZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9waXBlbGluZSAoY29uc3QgZ2NoYXIgKiBwaXBlX2Rlc2NyKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLQotICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKHBpcGVfZGVzY3IsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSksIE5VTEwpOwotICByZXR1cm4gcGlwZWxpbmU7Ci19Ci0KLS8qIGV2ZW50cyBpcyBhIG1hc2sgb2YgZXhwZWN0ZWQgZXZlbnRzLiB0ZXZlbnQgaXMgdGhlIGV4cGVjdGVkIHRlcm1pbmFsIGV2ZW50LgotICAgdGhlIHBvbGwgY2FsbCB3aWxsIHRpbWUgb3V0IGFmdGVyIGhhbGYgYSBzZWNvbmQuCi0gKi8KLXN0YXRpYyB2b2lkCi1ydW5fcGlwZWxpbmUgKEdzdEVsZW1lbnQgKiBwaXBlbGluZSwgY29uc3QgZ2NoYXIgKiBkZXNjciwKLSAgICBHc3RNZXNzYWdlVHlwZSBldmVudHMsIEdzdE1lc3NhZ2VUeXBlIHRldmVudCkKLXsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2VUeXBlIHJldmVudDsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIGdfYXNzZXJ0IChidXMpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0FOWSwgR1NUX1NFQ09ORCAvIDIpOwotCi0gICAgaWYgKG1lc3NhZ2UpIHsKLSAgICAgIHJldmVudCA9IEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpOwotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXZlbnQgPSBHU1RfTUVTU0FHRV9VTktOT1dOOwotICAgIH0KLQotICAgIGlmIChyZXZlbnQgPT0gdGV2ZW50KSB7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgaWYgKHJldmVudCA9PSBHU1RfTUVTU0FHRV9VTktOT1dOKSB7Ci0gICAgICBnX2NyaXRpY2FsICgiVW5leHBlY3RlZCB0aW1lb3V0IGluIGdzdF9idXNfcG9sbCwgbG9va2luZyBmb3IgJWQ6ICVzIiwKLSAgICAgICAgICB0ZXZlbnQsIGRlc2NyKTsKLSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAocmV2ZW50ICYgZXZlbnRzKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgZ19jcml0aWNhbAotICAgICAgICAoIlVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZCBvZiB0eXBlICVkLCAnJXMnLCBsb29raW5nIGZvciAlZDogJXMiLAotICAgICAgICByZXZlbnQsIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKHJldmVudCksIHRldmVudCwgZGVzY3IpOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BpcGVsaW5lX3VucmVmKQotewotICBjb25zdCBnY2hhciAqczsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpzaW5rOwotCi0gIHMgPSAiZmFrZXNyYyBuYW1lPXNyYyBudW0tYnVmZmVycz0yMCAhIGZha2VzaW5rIG5hbWU9c2luayI7Ci0gIHBpcGVsaW5lID0gc2V0dXBfcGlwZWxpbmUgKHMpOwotICAvKiBnZXRfYnlfbmFtZSB0YWtlcyBhIHJlZiAqLwotICBzcmMgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJzcmMiKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwpOwotICBzaW5rID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAic2luayIpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotCi0gIHJ1bl9waXBlbGluZSAocGlwZWxpbmUsIHMsCi0gICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKLSAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgfCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FIHwKLSAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCwgR1NUX01FU1NBR0VfRU9TKTsKLSAgd2hpbGUgKEdTVF9PQkpFQ1RfUkVGQ09VTlRfVkFMVUUgKHNyYykgPiAxKQotICAgIFRIUkVBRF9TV0lUQ0ggKCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyYywgInNyYyIsIDEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rLCAic2luayIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotY2xlYW51cF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJQaXBlbGluZSBjbGVhbnVwIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImxpbmVhciIpOwotCi0gIC8qIHRpbWUgb3V0IGFmdGVyIDIwcywgbm90IHRoZSBkZWZhdWx0IDMgKi8KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAyMCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9waXBlbGluZV91bnJlZik7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9waXBlbGluZXMvcGFyc2UtZGlzYWJsZWQuYyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGRiMGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1kaXNhYmxlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgZGlzYWJsZWQgZ3N0LXBhcnNlCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Y29uZmlnLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2xhdW5jaF9lcnJvcnMpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGU7Ci0gIEdFcnJvciAqZXJyOwotICBjb25zdCBnY2hhciAqYXJyW10gPSB7ICJmYWtlc3JjIiwgImZha2VzaW5rIiwgTlVMTCB9OwotCi0gIGVyciA9IE5VTEw7Ci0gIHBpcGUgPSBnc3RfcGFyc2VfbGF1bmNoICgiZmFrZXNyYyAhIGZha2VzaW5rIiwgJmVycik7Ci0gIGZhaWxfdW5sZXNzIChlcnIgIT0gTlVMTCwgImV4cGVjdGVkIGFuIGVycm9yLCBidXQgZGlkIG5vdCBnZXQgb25lIik7Ci0gIGZhaWxfdW5sZXNzIChwaXBlID09IE5VTEwsICJnb3QgcGlwZWxpbmUsIGJ1dCBleHBlY3RlZCBOVUxMIik7Ci0gIGZhaWxfdW5sZXNzIChlcnItPmRvbWFpbiA9PSBHU1RfQ09SRV9FUlJPUik7Ci0gIGZhaWxfdW5sZXNzIChlcnItPmNvZGUgPT0gR1NUX0NPUkVfRVJST1JfRElTQUJMRUQpOwotICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0KLSAgZXJyID0gTlVMTDsKLSAgcGlwZSA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbiAoImZha2VzcmMgISBmYWtlc2luayIsIFRSVUUsICZlcnIpOwotICBmYWlsX3VubGVzcyAoZXJyICE9IE5VTEwsICJleHBlY3RlZCBhbiBlcnJvciwgYnV0IGRpZCBub3QgZ2V0IG9uZSIpOwotICBmYWlsX3VubGVzcyAocGlwZSA9PSBOVUxMLCAiZ290IHBpcGVsaW5lLCBidXQgZXhwZWN0ZWQgTlVMTCIpOwotICBmYWlsX3VubGVzcyAoZXJyLT5kb21haW4gPT0gR1NUX0NPUkVfRVJST1IpOwotICBmYWlsX3VubGVzcyAoZXJyLT5jb2RlID09IEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEKTsKLSAgZ19lcnJvcl9mcmVlIChlcnIpOwotCi0gIGVyciA9IE5VTEw7Ci0gIHBpcGUgPSBnc3RfcGFyc2VfbGF1bmNodiAoYXJyLCAmZXJyKTsKLSAgZmFpbF91bmxlc3MgKGVyciAhPSBOVUxMLCAiZXhwZWN0ZWQgYW4gZXJyb3IsIGJ1dCBkaWQgbm90IGdldCBvbmUiKTsKLSAgZmFpbF91bmxlc3MgKHBpcGUgPT0gTlVMTCwgImdvdCBwaXBlbGluZSwgYnV0IGV4cGVjdGVkIE5VTEwiKTsKLSAgZmFpbF91bmxlc3MgKGVyci0+ZG9tYWluID09IEdTVF9DT1JFX0VSUk9SKTsKLSAgZmFpbF91bmxlc3MgKGVyci0+Y29kZSA9PSBHU1RfQ09SRV9FUlJPUl9ESVNBQkxFRCk7Ci0gIGdfZXJyb3JfZnJlZSAoZXJyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotcGFyc2VkaXNhYmxlZF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJQYXJzZSBMYXVuY2ggKERpc2FibGVkIE1vZGUpIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInBhcnNlbGF1bmNoZGlzYWJsZWQiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX2xhdW5jaF9lcnJvcnMpOwotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHBhcnNlZGlzYWJsZWQpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jIGIvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3BhcnNlLWxhdW5jaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDcyMDcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9wYXJzZS1sYXVuY2guYworKysgL2Rldi9udWxsCkBAIC0xLDcyNCArMCwwIEBACi0vKiBHU3RyZWFtZXIgZ3N0X3BhcnNlX2xhdW5jaCB1bml0IHRlc3RzCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA4PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUEFSU0VfVEVTVF9FTEVNRU5UIChnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUgZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudF9nZXRfdHlwZSAodm9pZCk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX3BpcGVsaW5lIChjb25zdCBnY2hhciAqIHBpcGVfZGVzY3IpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotICBHU1RfREVCVUcgKCJjcmVhdGluZyBbJXNdIHNldHVwX3BpcGVsaW5lIiwgcGlwZV9kZXNjcik7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChwaXBlX2Rlc2NyLCAmZXJyb3IpOwotCi0gIEdTVF9ERUJVRyAoImNyZWF0ZWQgWyVzXSBzZXR1cF9waXBlbGluZSIsIHBpcGVfZGVzY3IpOwotCi0gIGlmIChlcnJvciAhPSBOVUxMKSB7Ci0gICAgZmFpbF9pZiAoZXJyb3IgIT0gTlVMTCwgIkVycm9yIHBhcnNpbmcgcGlwZWxpbmUgJXM6ICVzIiwgcGlwZV9kZXNjciwKLSAgICAgICAgZXJyb3ItPm1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICB9Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBwaXBlbGluZSAlcyIsIHBpcGVfZGVzY3IpOwotICAvKiBOZXdseSByZXR1cm5lZCBvYmplY3Qgc2hvdWxkIGJlIGZsb2F0aW5nIHJlZmZlZCAqLwotICBmYWlsX3VubGVzcyAoZ19vYmplY3RfaXNfZmxvYXRpbmcgKHBpcGVsaW5lKSk7Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKEdfT0JKRUNUIChwaXBlbGluZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICByZXR1cm4gcGlwZWxpbmU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1leHBlY3RlZF9mYWlsX3BpcGUgKGNvbnN0IGdjaGFyICogcGlwZV9kZXNjcikKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkIChHU1RfTEVWRUxfTk9ORSk7Ci0jZW5kaWYKLQotICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKHBpcGVfZGVzY3IsICZlcnJvcik7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSA9PSBOVUxMIHx8IGVycm9yICE9IE5VTEwsCi0gICAgICAiRXhwZWN0ZWQgZmFpbHVyZSBwaXBlbGluZSAlczogc3VjY2VlZGVkISIsIHBpcGVfZGVzY3IpOwotICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLQotICAvKiBXZSBnZXQgYSBwaXBlbGluZSBiYWNrIGV2ZW4gd2hlbiBwYXJzaW5nIGhhcyBmYWlsZWQsIHNvbWV0aW1lcyEgKi8KLSAgaWYgKHBpcGVsaW5lKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX3BpcGVsaW5lX3J1bnMgKEdzdEVsZW1lbnQgKiBwKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgLyogQ2hlY2sgdGhhdCB0aGUgcGlwZWxpbmUgY2hhbmdlcyBzdGF0ZSB0byBQQVVTRUQgYW5kIGJhY2sgdG8gTlVMTCAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHAsIEdTVF9TVEFURV9QQVVTRUQpOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpCi0gICAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZmFpbF91bmxlc3MgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsCi0gICAgICAiQ291bGQgbm90IHNldCBwaXBlbGluZSB0byBwYXVzZWQiKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHAsIEdTVF9TVEFURV9OVUxMKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKQotICAgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocCwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLAotICAgICAgIkNvdWxkIG5vdCBzZXQgcGlwZWxpbmUgdG8gbnVsbCIpOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKnRlc3RfbGluZXNbXSA9IHsKLSAgImZpbGVzcmMgbG9jYXRpb249bXVzaWMubXAzICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCi0gICJmaWxlc3JjIGxvY2F0aW9uPW11c2ljLm9nZyAhIHRlZSAhIGlkZW50aXR5IHNpbGVudD10cnVlICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCi0gICJmaWxlc3JjIGxvY2F0aW9uPWh0dHA6Ly9kb21haW4uY29tL211c2ljLm1wMyAhIGlkZW50aXR5IHNpbGVudD10cnVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUiLAotICAiZmlsZXNyYyBsb2NhdGlvbj1tb3ZpZS5hdmkgISB0ZWUgbmFtZT1kZW11eGVyICEgKCBxdWV1ZSAhIGlkZW50aXR5IHNpbGVudD10cnVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUgKSAoIGRlbXV4ZXIuICEgcXVldWUgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhIGZha2VzaW5rIHNpbGVudD10cnVlICkiLAotICAiZmFrZXNyYyAhIHZpZGVvL3gtcmF3ICEgZmFrZXNpbmsgc2lsZW50PXRydWUiLAotICAiZmFrZXNyYyAhICAgdmlkZW8vcmF3LCAgZm9ybWF0PShzdHJpbmcpWVVZMjsgdmlkZW8vcmF3LCBmb3JtYXQ9KHN0cmluZylZVjEyICEgZmFrZXNpbmsgc2lsZW50PXRydWUiLAotICAiZmFrZXNyYyAhIGF1ZGlvL3gtcmF3LCB3aWR0aD1bMTYsICAzMl0sIGRlcHRoPXsxNiwgMjQsIDMyfSwgc2lnbmVkPVRSVUUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCi0gICJmYWtlc3JjICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhIGlkZW50aXR5IHNpbGVudD10cnVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUiLAotICAiZmFrZXNyYyBuYW1lPTEwMCBmYWtlc2luayBuYW1lPTEwMSBzaWxlbnQ9dHJ1ZSAxMDAuICEgMTAxLiIsIC8qIGxpbmtpbmcgd2l0aCBuYW1lZCByZWZlcmVuY2Ugb24gYm90aCBzaWRlcyAqLwotICAiZmFrZXNyYyAhIDFfX2RlbnRpdHkgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsICAgICAgICAvKiB1c2luZyBhIGZyZXNobHkgcmVnaXN0ZXJlZCBlbGVtZW50IHR5cGUgKi8KLSAgImZha2VzcmMgISB0ZWUgbmFtZT10ICB0LnNyY18xMiAhIHF1ZXVlICEgZmFrZXNpbmsgIHQuc3JjXzMgISBxdWV1ZSAhIGZha2VzaW5rIiwKLSAgImZha2VzcmMgbmFtZT1mb28gbmFtZT1maW4gIGZpbi4gISBmYWtlc2luayIsIC8qIHRlc3RpbmcgYXNzaWdubWVudHMgYXJlIGV4ZWN1dGVkIGluIGNvcnJlY3Qgb3JkZXIgKGxlZnQtdG8tcmlnaHQpICovCi0gICIoIGZha2VzcmMgKSAhIGZha2VzaW5rIiwgICAgIC8qIGdob3N0UGFkIGNyZWF0aW9uIG9uLXRoZS1mbHksIGluZml4IG5vdGF0aW9uIGxpbmsgKi8KLSAgIiggZmFrZXNyYyBuYW1lPWRhc3JjICkgZGFzcmMuICEgZmFrZXNpbmsiLCAgIC8qIGdob3N0UGFkIGNyZWF0aW9uIG9uLXRoZS1mbHksIG5hbWVkIGxpbmsgKi8KLS8qICAiKG5hbWU9bWFiaW4gZmFrZXNyYykgbWFiaW4uICEgZmFrZXNpbmsiLCBGSVhNRTogbGlua2luZyB0byBuYW1lZCBiaW4gZG9lcyBub3Qgd29yayB5ZXQgKi8KLS8qICAiKG5hbWU9bWFiaW4gbmFtZT15b3lvIGZha2VzcmMpIHlveW8uICEgZmFrZXNpbmsiLCBGSVhNRTogbGlua2luZyB0byBuYW1lZCBiaW4gZG9lcyBub3Qgd29yayB5ZXQgICovCi0gICJkZWVwc3JjLiAhIGZha2VzaW5rIGZha2VzcmMgICEgKCBpZGVudGl0eSAhICggaWRlbnRpdHkgISAoICBpZGVudGl0eSBuYW1lPWRlZXBzcmMgKSApICkiLCAgICAvKiBkZWVwIG5hbWUgcmVzb2x1dGlvbiwgbXVsdGlsZXZlbCBnaG9zdHBhZCBjcmVhdGlvbiAqLwotICBOVUxMCi19OwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9sYXVuY2hfbGluZXMpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBjb25zdCBnY2hhciAqKnM7Ci0gIEdUeXBlIHR5cGU7Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICplZmFjOwotCi0gIGVmYWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCJpZGVudGl0eSIpOwotICBmYWlsX3VubGVzcyAoZWZhYyAhPSBOVUxMKTsKLSAgZWZhYyA9Ci0gICAgICBHU1RfRUxFTUVOVF9GQUNUT1JZIChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoR1NUX1BMVUdJTl9GRUFUVVJFIChlZmFjKSkpOwotICBmYWlsX3VubGVzcyAoZWZhYyAhPSBOVUxMKTsKLSAgdHlwZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZSAoZWZhYyk7Ci0gIGZhaWxfdW5sZXNzICh0eXBlICE9IDApOwotICBnX29iamVjdF91bnJlZiAoZWZhYyk7Ci0gIGdfb2JqZWN0X3VucmVmIChlZmFjKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3JlZ2lzdGVyIChOVUxMLCAiMV9fZGVudGl0eSIsIEdTVF9SQU5LX05PTkUsIHR5cGUpKTsKLQotICBmb3IgKHMgPSB0ZXN0X2xpbmVzOyAqcyAhPSBOVUxMOyBzKyspIHsKLSAgICBwaXBlbGluZSA9IHNldHVwX3BpcGVsaW5lICgqcyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2RlZmluZSBQSVBFTElORTEgICJmYWtlc3JjIgotI2RlZmluZSBQSVBFTElORTIgICJmYWtlc3JjIG5hbWU9ZG9uYWxkIG51bS1idWZmZXJzPSAyNyBzaWxlbnQgPVRydUUgc2l6ZXR5cGUgPSAzIGRhdGE9ICAgU3ViYnVmZmVyXFwgZGF0YSIKLSNkZWZpbmUgUElQRUxJTkUzICAiZmFrZXNyYyBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIKLSNkZWZpbmUgUElQRUxJTkU0ICAiZmFrZXNyYyBudW0tYnVmZmVycz00IC5zcmMgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhLnNpbmsgaWRlbnRpdHkgc2lsZW50PXRydWUgLnNyYyAhIC5zaW5rIGZha2VzaW5rIHNpbGVudD10cnVlIgotI2RlZmluZSBQSVBFTElORTUgICJmYWtlc3JjIG51bS1idWZmZXJzPTQgbmFtZT1zcmMgaWRlbnRpdHkgc2lsZW50PXRydWUgbmFtZT1pZDEgaWRlbnRpdHkgc2lsZW50PXRydWUgbmFtZSA9IGlkMiBmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lID1zaW5rIHNyYy4gISBpZDEuIGlkMS4hIGlkMi5zaW5rIGlkMi5zcmMhc2luay5zaW5rIgotI2RlZmluZSBQSVBFTElORTYgICJwaXBlbGluZS4obmFtZT1cImpvaG5cIiBmYWtlc3JjIG51bS1idWZmZXJzPTQgISAoIGJpbi4gKCAgcXVldWUgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhKCBxdWV1ZSAhIGZha2VzaW5rIHNpbGVudD10cnVlICkpICkpIgotI2RlZmluZSBQSVBFTElORTcgICJmYWtlc3JjIG51bS1idWZmZXJzPTQgISB0ZWUgbmFtZT10ZWUgLnNyY18ldSAhIHF1ZXVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUgdGVlLnNyY18ldSAhIHF1ZXVlICEgZmFrZXNpbmsgc2lsZW50PXRydWUgcXVldWUgbmFtZSA9XCJmb29cIiAhIGZha2VzaW5rIHNpbGVudD10cnVlIHRlZS5zcmNfJXUgISBmb28uIgotLyogYWdncmVnYXRvciBpcyBib3JrZWQKLSAqICNkZWZpbmUgUElQRUxJTkU4ICAiZmFrZXNyYyBudW0tYnVmZmVycz00ICEgdGVlIG5hbWU9dGVlMSAuc3JjMCxzcmMxICEgLnNpbmswLCBzaW5rMSBhZ2dyZWdhdG9yICEgZmFrZXNpbmsgc2lsZW50PXRydWUiCi0gKiAqLwotI2RlZmluZSBQSVBFTElORTggICJmYWtlc3JjIG51bS1idWZmZXJzPTQgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIKLSNkZWZpbmUgUElQRUxJTkU5ICAiZmFrZXNyYyBudW0tYnVmZmVycz00ICEgdGVzdC4gZmFrZXNpbmsgc2lsZW50PXRydWUgbmFtZT10ZXN0IgotI2RlZmluZSBQSVBFTElORTEwICIoIGZha2VzcmMgbnVtLWJ1ZmZlcnM9XCI0XCIgICkgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhIGZha2VzaW5rIHNpbGVudD10cnVlIgotI2RlZmluZSBQSVBFTElORTExICJmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lID0gc2luayBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSBuYW1lPWlkICggZmFrZXNyYyBudW0tYnVmZmVycz1cIjRcIiAhIGlkLiApIGlkLiAhIHNpbmsuIgotI2RlZmluZSBQSVBFTElORTEyICJmaWxlOi8vL3RtcC90ZXN0LmZpbGUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIKLSNkZWZpbmUgUElQRUxJTkUxMyAiZmFrZXNyYyAhIGZpbGU6Ly8vdG1wL3Rlc3QuZmlsZSIKLSNkZWZpbmUgUElQRUxJTkUxNCAiY2Fwc2ZpbHRlciBjYXBzPWFwcGxpY2F0aW9uL3gtcnRwLHNwcm9wLXBhcmFtZXRlci1zZXRzPShzdHJpbmcpXCJ4XFwseFwiIgotI2RlZmluZSBQSVBFTElORTE1ICJjYXBzZmlsdGVyIGNhcHM9YXBwbGljYXRpb24veC1ydHAsc3Byb3AtcGFyYW1ldGVyLXNldHM9KHN0cmluZylcInhcXFwieFxcLHhcIiIKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGF1bmNoX2xpbmVzMikKLXsKLSAgR3N0RWxlbWVudCAqY3VyOwotICBnaW50IGk7Ci0gIGdib29sZWFuIGI7Ci0gIGdjaGFyICpzID0gTlVMTDsKLQotICAvKioKLSAgICogY2hlY2tzOgotICAgKiAtIHNwZWNpZnlpbmcgYW4gZWxlbWVudCB3b3JrcyA6KQotICAgKiAtIGlmIG9ubHkgMSBlbGVtZW50IGlzIHJlcXVlc3RlZCwgbm8gYmluIGlzIHJldHVybmVkLCBidXQgdGhlIGVsZW1lbnQKLSAgICovCi0gIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTEpOwotICBmYWlsX3VubGVzcyAoR19PQkpFQ1RfVFlQRSAoY3VyKSA9PSBnX3R5cGVfZnJvbV9uYW1lICgiR3N0RmFrZVNyYyIpLAotICAgICAgInBhcnNlX2xhdW5jaCBkaWQgbm90IHByb2R1Y2UgYSBmYWtlc3JjIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Ci0KLSAgLyoqCi0gICAqIGNoZWNrczoKLSAgICogLSBwcm9wZXJ0aWVzIHdvcmtzCi0gICAqIC0gc3RyaW5nLCBpbnQsIGJvb2xlYW4gYW5kIGVudW1zIGNhbiBiZSBwcm9wZXJseSBzZXQKLSAgICogLSBmaXJzdCB0ZXN0IG9mIGVzY2FwaW5nIHN0cmluZ3MKLSAgICovCi0gIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTIpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChjdXIpLCAibmFtZSIsICZzLCAibnVtLWJ1ZmZlcnMiLCAmaSwKLSAgICAgICJzaWxlbnQiLCAmYiwgTlVMTCk7Ci0gIGZhaWxfaWYgKHMgPT0gTlVMTCwgIm5hbWUgd2FzIE5VTEwiKTsKLSAgZmFpbF91bmxlc3MgKHN0cmNtcCAocywgImRvbmFsZCIpID09IDAsICJmYWtlc3JjIG5hbWUgd2FzIG5vdCAnZG9uYWxkJyIpOwotICBmYWlsX3VubGVzcyAoaSA9PSAyNywgIm51bS1idWZmZXJzIHdhcyBub3QgMjciKTsKLSAgZmFpbF91bmxlc3MgKGIgPT0gVFJVRSwgInNpbGVudCB3YXMgbm90IFRSVUUiKTsKLSAgZ19mcmVlIChzKTsKLQotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChjdXIpLCAic2l6ZXR5cGUiLCAmaSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpID09IDMsICJzaXpldHlwZSAhPSAzIik7Ci0KLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoY3VyKSwgImRhdGEiLCAmaSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpID09IDIsICJkYXRhICE9IDIiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKLQotICAvKioKLSAgICogY2hlY2tzOgotICAgKiAtIHNwZWNpZnlpbmcgbXVsdGlwbGUgZWxlbWVudHMgd2l0aG91dCBsaW5rcyB3b3JrcwotICAgKiAtIGlmIG11bHRpcGxlIHRvcGxldmVsIGVsZW1lbnRzIGV4aXN0LCBhIHBpcGVsaW5lIGlzIHJldHVybmVkCi0gICAqLwotICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkUzKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CSU5fTlVNQ0hJTERSRU4gKGN1cikgPT0gMywKLSAgICAgICJQaXBlbGluZSBkb2VzIG5vdCBjb250YWluIDMgY2hpbGRyZW4iKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKLQotICAvKioKLSAgICogY2hlY2tzOgotICAgKiAtIHRlc3QgZGVmYXVsdCBsaW5rICIhIgotICAgKiAtIHRlc3QgaWYgc3BlY2lmeWluZyBwYWRzIG9uIGxpbmtzIHdvcmtzCi0gICAqLwotICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkU0KTsKLSAgY2hlY2tfcGlwZWxpbmVfcnVucyAoY3VyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKLQotICAvKioKLSAgICogY2hlY2tzOgotICAgKiAtIHRlc3QgaWYgYXBwZW5kaW5nIHRoZSBsaW5rcyB3b3JrcywgdG9vCi0gICAqIC0gY2hlY2sgaWYgdGhlIHBpcGVsaW5lIGNvbnN0cnVjdGVkIHdvcmtzIHRoZSBzYW1lIGFzIHRoZSBvbmUgYmVmb3JlIChob3c/KQotICAgKi8KLSAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FNSk7Ci0gIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Ci0KLSAgLyoqCi0gICAqIGNoZWNrczoKLSAgICogLSB0ZXN0IHZhcmlvdXMgdHlwZXMgb2YgYmlucwotICAgKiAtIHRlc3QgaWYgbGlua2luZyBhY3Jvc3MgYmlucyB3b3JrcwotICAgKiAtIHRlc3QgaWYgZXNjYXBpbmcgc3RyaW5ncyB3b3JrcwotICAgKi8KLSAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FNik7Ci0gIC8qIEZJWE1FOiB2YWxncmluZCBmaW5kcyBlbGVtZW50IGxhdGVyICovCi0gIGZhaWxfdW5sZXNzIChHU1RfSVNfUElQRUxJTkUgKGN1ciksICJQYXJzZSBkaWQgbm90IHByb2R1Y2UgYSBwaXBlbGluZSIpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChjdXIpLCAibmFtZSIsICZzLCBOVUxMKTsKLSAgZmFpbF9pZiAocyA9PSBOVUxMLCAibmFtZSB3YXMgTlVMTCIpOwotICBmYWlsX3VubGVzcyAoc3RyY21wIChzLCAiam9obiIpID09IDAsICJOYW1lIHdhcyBub3QgJ2pvaG4nIik7Ci0gIGdfZnJlZSAocyk7Ci0gIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Ci0KLSAgLyoqCi0gICAqIGNoZWNrczoKLSAgICogLSB0ZXN0IHJlcXVlc3QgcGFkcwotICAgKi8KLSAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FNyk7Ci0gIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Ci0KLSAgLyoqCi0gICAqIGNoZWNrczoKLSAgICogLSBtdWx0aXBsZSBwYWRzIG9uIDEgbGluawotICAgKi8KLSAgY3VyID0gc2V0dXBfcGlwZWxpbmUgKFBJUEVMSU5FOCk7Ci0gIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Ci0KLSAgLyoqCi0gICAqIGNoZWNrczoKLSAgICogLSBmYWlsZWQgaW4gZ3JhbW1hci55IGN2cyB2ZXJzaW9uIDEuMTcKLSAgICovCi0gIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTkpOwotICBjaGVja19waXBlbGluZV9ydW5zIChjdXIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjdXIpOwotCi0gIC8qKgotICAgKiBjaGVja3M6Ci0gICAqIC0gZmFpbGVkIGluIGdyYW1tYXIueSBjdnMgdmVyc2lvbiAxLjE3Ci0gICAqLwotICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkUxMCk7Ci0gIGNoZWNrX3BpcGVsaW5lX3J1bnMgKGN1cik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Ci0KLSAgLyoqCi0gICAqIGNoZWNrczoKLSAgICogLSBmYWlsZWQgaW4gZ3JhbW1hci55IGN2cyB2ZXJzaW9uIDEuMTgKLSAgICovCi0gIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTExKTsKLSAgY2hlY2tfcGlwZWxpbmVfcnVucyAoY3VyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKLQotICAvKioKLSAgICogY2hlY2tzOgotICAgKiAtIFVSSSBkZXRlY3Rpb24gd29ya3MKLSAgICovCi0gIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTEyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKLQotICAvKiogKiBjaGVja3M6Ci0gICAqIC0gVVJJIHNpbmsgZGV0ZWN0aW9uIHdvcmtzCi0gICAqLwotICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkUxMyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBpZiBjaGFyYWN0ZXJzIGluc2lkZSBxdW90ZXMgYXJlIG5vdCBlc2NhcGVkLgotICAqLwotICBjdXIgPSBzZXR1cF9waXBlbGluZSAoUElQRUxJTkUxNCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGN1cik7Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBpZiBlc2NhcGVkIHF1b3RlcyBpbnNpZGUgcXVvdGVzIGFyZSBub3QgdHJlYXRlZCBhcyBlbmQgc3RyaW5nIHF1b3Rlcy4KLSAgICogVGhpcyB3b3VsZCBtYWtlIHRoZSByZXN0IG9mIGNoYXJhY3RlcnMgdG8gYmUgZXNjYXBlZCBpbmNvcnJlY3RseS4KLSAgICovCi0gIGN1ciA9IHNldHVwX3BpcGVsaW5lIChQSVBFTElORTE1KTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3VyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmV4cGVjdGVkX2ZhaWx1cmVzW10gPSB7Ci0gIC8qIGNoZWNrczogZmFpbHMgYmVjYXVzZSBhPWIuIGlzIG5vdCBhIHZhbGlkIGVsZW1lbnQgcmVmZXJlbmNlIGluIHBhcnNlLmwgKi8KLSAgImZha2VzcmMgbnVtLWJ1ZmZlcnM9NCBuYW1lPVwiYT1iXCIgIGE9Yi4gISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCi0gIC8qIGNoZWNrczogRXJyb3IgYnJhbmNoIGZvciBhIG5vbi1kZXNlcmlhbGlzYWJsZSBwcm9wZXJ0eSB2YWx1ZSAqLwotICAiZmlsZXNyYyBibG9ja3NpemU9YWJzZGZmIiwKLSAgLyogY2hlY2tzOiBUaGF0IGJyb2tlbiBjYXBzIHdoaWNoIGRvbid0IHBhcnNlIGNhbid0IGNyZWF0ZSBhIHBpcGVsaW5lICovCi0gICJmYWtlc3JjICEgdmlkZW8vcmF3LGZvcm1hdD0oYW50d2VycCltb25rZXlzICEgZmFrZXNpbmsgc2lsZW50PXRydWUiLAotICAvKiBjaGVja3M6IEVtcHR5IHBpcGVsaW5lIGlzIGludmFsaWQgKi8KLSAgIiIsCi0gIC8qIGNoZWNrczogTGluayB3aXRob3V0IHNpbmsgZWxlbWVudCBmYWlsZXMgKi8KLSAgImZha2VzcmMgISAiLAotICAvKiBjaGVja3M6IExpbmsgd2l0aG91dCBzcmMgZWxlbWVudCBmYWlsZXMgKi8KLSAgIiAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKLSAgLyogY2hlY2tzOiBTb3VyY2UgVVJJIGZvciB3aGljaCBubyBlbGVtZW50IGV4aXN0cyBpcyBhIGZhaWx1cmUgKi8KLSAgImJvcmt5Oi8vZmRhZmZkICEgZmFrZXNpbmsgc2lsZW50PXRydWUiLAotICAvKiBjaGVja3M6IFNpbmsgVVJJIGZvciB3aGljaCBubyBlbGVtZW50IGV4aXN0cyBpcyBhIGZhaWx1cmUgKi8KLSAgImZha2VzcmMgISBib3JreTovL2ZkYWZmZCIsCi0gIC8qIGNoZWNrczogUmVmZXJlbmNpbmcgbm9uLWV4aXN0ZW50IHNvdXJjZSBlbGVtZW50IGJ5IG5hbWUgY2FuJ3QgbGluayAqLwotICAiZmFrZXNyYyBuYW1lPXNyYyBmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lPXNpbmsgbm9leGlzdGUuICEgc2luay4iLAotICAvKiBjaGVja3M6IFJlZmVyZW5jaW5nIG5vbi1leGlzdGVudCBzaW5rIGVsZW1lbnQgYnkgbmFtZSBjYW4ndCBsaW5rICovCi0gICJmYWtlc3JjIG5hbWU9c3JjIGZha2VzaW5rIHNpbGVudD10cnVlIG5hbWU9c2luayBzcmMuICEgbm9leGlzdGUuIiwKLSAgLyogY2hlY2tzOiBDYW4ndCBsaW5rIDIgZWxlbWVudHMgdGhhdCBvbmx5IGhhdmUgc2luayBwYWRzICovCi0gICJmYWtlc2luayBzaWxlbnQ9dHJ1ZSAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKLSAgLyogY2hlY2tzIG11bHRpLWNoYWluIGxpbmsgd2l0aG91dCBzcmMgZWxlbWVudCBmYWlscy4gKi8KLSAgIiEgaWRlbnRpdHkgc2lsZW50PXRydWUgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhIGZha2VzaW5rIHNpbGVudD10cnVlIiwKLSAgLyogRW1wdHkgYmluIG5vdCBhbGxvd2VkICovCi0gICJiaW4uKCApIiwKLSAgLyogYmluIHdpdGggbm9uLWV4aXN0ZW50IGVsZW1lbnQgY291bnRzIGFzIGVtcHR5LCBhbmQgbm90IGFsbG93ZWQgKi8KLSAgImJpbi4oIG5vbl9leGlzdGVudF9lbGVtZW50ICkiLAotICAvKiBiaW4gd2l0aCBhbiBlbGVtZW50LCBhc3NpZ25tZW50cyBhbmQgdGhlbiBhIHN5bnRheCBlcnJvciAqLwotICAiKCBmaWxlc3JjIGJsb2Nrc2l6ZT00IGxvY2F0aW9uPS9kZXYvbnVsbCBAICkiLAotICAvKiBiaW4gbGlua2luZyB3aXRoIHRoZSAhIGluc2lkZSB0aGUgYmluIGFuZCBubyAhIG91dHNpZGUgKi8KLSAgIiggZmFrZXNyYyBudW0tYnVmZmVycz1cIjRcIiAhICkgaWRlbnRpdHkgc2lsZW50PXRydWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSIsCi0gIC8qIGJpbnMgd2l0aCBsaW5raW5nIHdpdGhvdXQgISAqLwotICAvKiBGSVhNRTogb25lIGVsZW1lbnQgbGVha3MgYXMgcmVwb3J0ZWQgYnkgdmFsZ3JpbmQgKi8KLSAgInBpcGVsaW5lLihuYW1lPVwiam9oblwiIGZha2VzcmMgbnVtLWJ1ZmZlcnM9NCAoIGJpbi4gKCAhIHF1ZXVlICEgaWRlbnRpdHkgc2lsZW50PXRydWUgISggcXVldWUgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSApKSApKSIsCi0gIC8qIG5vbi1leGlzdGVudCBiaW4tdHlwZSBjb250YWluaW5nIGFscmVhZHkgY3JlYXRlZCBlbGVtZW50cyAqLwotICAiY29mZmVlYmluLiggZmFrZXNyYyAhIGlkZW50aXR5ICEgZmFrZXNpbmsgKSIsCi0gIC8qIG5vbi1leGlzdGVudCBiaW4tdHlwZSBpbiBwaXBlbGluZSAqLwotICAiZmFrZXNyYyAhIGNvZmZlZWJpbi4oIGlkZW50aXR5ICkgISBmYWtlc2luayIsCi0gIC8qIHVuZXhwZWN0ZWQgcGFkIHJlZmVyZW5jZXMgUGFydCBJICovCi0gICJmYWtlc3JjICEgLmNoMCAuY2gxIGZha2VzaW5rIiwKLSAgLyogdW5leHBlY3RlZCBwYWQgcmVmZXJlbmNlcyBQYXJ0IElJICovCi0gICJmYWtlc3JjIC5jaDAgLmNoMSAhICBmYWtlc2luayIsCi0gIC8qIHVuZXhwZWN0ZWQgcGFkIHJlZmVyZW5jZXMgUGFydCBJSUkgKi8KLSAgIihmYWtlc3JjIC5jaDEpICEgIGZha2VzaW5rIiwKLSAgLyogdW5leHBlY3RlZCBmdWxsIHJlZmVyZW5jZSwgSSAqLwotICAiKGZha2VzcmMgbmFtZT1zICBzLmNoMSkgISAgZmFrZXNpbmsiLAotICAvKiB1bmV4cGVjdGVkIGZ1bGwgcmVmZXJlbmNlLCBJSSAqLwotICAicy5jaDEgZmFrZXNyYyAhIGZha2VzaW5rIiwKLSAgLyogdW5leHBlY3RlZCBmdWxsIHJlZmVyZW5jZSwgSUlJICovCi0gICJmYWtlc3JjICEgZmFrZXNpbmsgcy5jaDEiLAotICAvKiB1bmxpbmtlZCBzcmMvc2luayBVUkkgKi8KLSAgImh0dHA6Ly9lZmYub3JnIGZha2VzcmMgISBmYWtlc2luayIsCi0gIC8qIGNhdGNoIGFzc2lnbm1lbnRzIGV2YWx1YXRlZCBpbiB3cm9uZyBvcmRlciAqLwotICAiZmFrZXNyYyBuYW1lPXNzIG5hbWU9c3QgIHNzLiAhIGZha2VzaW5rIiwKLSAgLyogdW5iYWxhbmNlZCBicmFja2V0cyAqLwotICAiKCIsICIpIiwgIikgICgiLAotICAvKiBFTkQ6ICovCi0gIE5VTEwKLX07Ci0KLUdTVF9TVEFSVF9URVNUIChleHBlY3RlZF90b19mYWlsX3BpcGVzKQotewotICBjb25zdCBnY2hhciAqKnM7Ci0KLSAgZm9yIChzID0gZXhwZWN0ZWRfZmFpbHVyZXM7ICpzICE9IE5VTEw7IHMrKykgewotICAgIGV4cGVjdGVkX2ZhaWxfcGlwZSAoKnMpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGNvbnN0IGdjaGFyICpsZWFraW5nX2ZhaWx1cmVzW10gPSB7Ci0gIC8qIGNoZWNrczogSW52YWxpZCBwaXBlbGluZSBzeW50YXggZmFpbHMgKi8KLSAgImZha2VzcmMgISBpZGVudGl0eSBzaWxlbnQ9dHJ1ZSAhIHNnc2RmYWdmZCBAIGdmZGdmZHNnZnNnU0YiLAotICAvKiBjaGVja3M6IEF0dGVtcHRpbmcgdG8gbGluayB0byBhIG5vbi1leGlzdGVudCBwYWQgb24gYW4gZWxlbWVudCAKLSAgICogY3JlYXRlZCB2aWEgVVJJIGhhbmRsZXIgc2hvdWxkIGZhaWwgKi8KLSAgImZha2VzcmMgISAuZm9vIGZpbGU6Ly8vZGV2L251bGwiLAotICAvKiBjaGVja3M6IFRoYXQgcmVxdWVzdGluZyBhbiBlbGVtZW50IHdoaWNoIGRvZXNuJ3QgZXhpc3QgZG9lc24ndCB3b3JrICovCi0gICJlcnJvci1kb2VzLW5vdC1leGlzdC1zcmMiLAotICBOVUxMCi19OwotCi0vKiBUaGVzZSBkb24ndCBzZWVtIHRvIGxlYWsgYW55IGxvbmdlcj8gKi8KLUdTVF9TVEFSVF9URVNUIChsZWFraW5nX2ZhaWxfcGlwZXMpCi17Ci0gIGNvbnN0IGdjaGFyICoqczsKLQotICBmb3IgKHMgPSBsZWFraW5nX2ZhaWx1cmVzOyAqcyAhPSBOVUxMOyBzKyspIHsKLSAgICBHU1RfSU5GTyAoIlRyeWluZyBwaXBlOiAlcyIsICpzKTsKLSAgICBleHBlY3RlZF9mYWlsX3BpcGUgKCpzKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIEhlbHBlciBmdW5jdGlvbiB0byB0ZXN0IGRlbGF5ZWQgbGlua2luZyBzdXBwb3J0IGluIHBhcnNlX2xhdW5jaCBieSBjcmVhdGluZwotICogYSB0ZXN0IGVsZW1lbnQgYmFzZWQgb24gYmluLCB3aGljaCBjb250YWlucyBhIGZha2VzcmMgYW5kIGEgc29tZXRpbWVzIAotICogcGFkLXRlbXBsYXRlLCBhbmQgdHJ5aW5nIHRvIGxpbmsgdG8gYSBmYWtlc2luay4gV2hlbiB0aGUgYmluIHRyYW5zaXRpb25zCi0gKiB0byBwYXVzZWQgaXQgYWRkcyBhIHBhZCwgd2hpY2ggc2hvdWxkIGdldCBsaW5rZWQgdG8gdGhlIGZha2VzaW5rICovCi1zdGF0aWMgdm9pZAotcnVuX2RlbGF5ZWRfdGVzdCAoY29uc3QgZ2NoYXIgKiBwaXBlX3N0ciwgY29uc3QgZ2NoYXIgKiBwZWVyLAotICAgIGdib29sZWFuIGV4cGVjdF9saW5rKQotewotICBHc3RFbGVtZW50ICpwaXBlLCAqc3JjLCAqc2luazsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkLCAqcGVlcnBhZCA9IE5VTEw7Ci0KLSAgcGlwZSA9IHNldHVwX3BpcGVsaW5lIChwaXBlX3N0cik7Ci0KLSAgc3JjID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZSksICJzcmMiKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwsICJUZXN0IHNvdXJjZSBlbGVtZW50IHdhcyBub3QgY3JlYXRlZCIpOwotCi0gIHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlKSwgInNpbmsiKTsKLSAgZmFpbF9pZiAoc2luayA9PSBOVUxMLCAiVGVzdCBzaW5rIGVsZW1lbnQgd2FzIG5vdCBjcmVhdGVkIik7Ci0KLSAgLyogVGhlIHNyYyBzaG91bGQgbm90IHlldCBoYXZlIGEgc3JjIHBhZCAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgPT0gTlVMTCwgIlNvdXJjZSBlbGVtZW50IGFscmVhZHkgaGFzIGEgc291cmNlIHBhZCIpOwotCi0gIC8qIFNldCB0aGUgc3RhdGUgdG8gUEFVU0VEIGFuZCB3YWl0IHVudGlsIHRoZSBzcmMgYXQgbGVhc3QgcmVhY2hlcyB0aGF0Ci0gICAqIHN0YXRlICovCi0gIGZhaWxfaWYgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BBVVNFRCkgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChzcmMsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpID09Ci0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIC8qIE5vdywgdGhlIHNvdXJjZSBlbGVtZW50IHNob3VsZCBoYXZlIGEgc3JjIHBhZCwgYW5kIGlmICJwZWVyIiB3YXMgcGFzc2VkLCAKLSAgICogdGhlbiB0aGUgc3JjIHBhZCBzaG91bGQgaGF2ZSBnb3R0ZW4gbGlua2VkIHRvIHRoZSAnc2luaycgcGFkIG9mIHRoYXQgCi0gICAqIHBlZXIgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCwgIlNvdXJjZSBlbGVtZW50IGRpZCBub3QgY3JlYXRlIHNvdXJjZSBwYWQiKTsKLQotICBwZWVycGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoc3JjcGFkKTsKLQotICBpZiAoZXhwZWN0X2xpbmsgPT0gVFJVRSkgewotICAgIGZhaWxfaWYgKHBlZXJwYWQgPT0gTlVMTCwgIlNvdXJjZSBlbGVtZW50IHBhZCBkaWQgbm90IGdldCBsaW5rZWQiKTsKLSAgfSBlbHNlIHsKLSAgICBmYWlsX2lmIChwZWVycGFkICE9IE5VTEwsCi0gICAgICAgICJTb3VyY2UgZWxlbWVudCBwYWQgZ290IGxpbmtlZCBidXQgc2hvdWxkIG5vdCBoYXZlIik7Ci0gIH0KLSAgaWYgKHBlZXJwYWQgIT0gTlVMTCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVycGFkKTsKLQotICBpZiAocGVlciAhPSBOVUxMKSB7Ci0gICAgR3N0RWxlbWVudCAqcGVlcl9lbGVtID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZSksIHBlZXIpOwotCi0gICAgZmFpbF9pZiAocGVlcl9lbGVtID09IE5VTEwsICJDb3VsZCBub3QgcmV0cmlldmUgcGVlciAlcyIsIHBlZXIpOwotCi0gICAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChwZWVyX2VsZW0sICJzaW5rIik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGVlcl9lbGVtKTsKLSAgICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwsICJQZWVyIGVsZW1lbnQgZGlkIG5vdCBoYXZlIGEgJ3NpbmsnIHBhZCIpOwotCi0gICAgZmFpbF91bmxlc3MgKHBlZXJwYWQgPT0gc2lua3BhZCwKLSAgICAgICAgIlNvdXJjZSBzcmMgcGFkIGdvdCBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIHBlZXIiKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAoZGVsYXllZF9saW5rKQotewotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKE5VTEwsICJwYXJzZXRlc3RlbGVtZW50IiwKLSAgICAgICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9QQVJTRV9URVNUX0VMRU1FTlQpKTsKLQotICAvKiBUaGlzIHRlc3RzIHRoZSBkZWxheWVkIGxpbmtpbmcgc3VwcG9ydCBpbiBwYXJzZV9sYXVuY2ggYnkgY3JlYXRpbmcKLSAgICogYSB0ZXN0IGVsZW1lbnQgYmFzZWQgb24gYmluLCB3aGljaCBjb250YWlucyBhIGZha2VzcmMgYW5kIGEgc29tZXRpbWVzIAotICAgKiBwYWQtdGVtcGxhdGUsIGFuZCB0cnlpbmcgdG8gbGluayB0byBhIGZha2VzaW5rLiBXaGVuIHRoZSBiaW4gdHJhbnNpdGlvbnMKLSAgICogdG8gcGF1c2VkIGl0IGFkZHMgYSBwYWQsIHdoaWNoIHNob3VsZCBnZXQgbGlua2VkIHRvIHRoZSBmYWtlc2luayAqLwotICBydW5fZGVsYXllZF90ZXN0Ci0gICAgICAoInBhcnNldGVzdGVsZW1lbnQgbmFtZT1zcmMgISBmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lPXNpbmsiLCAic2luayIsCi0gICAgICBUUlVFKTsKLSAgLyogRklYTUU6IHZhbGdyaW5kIGZpbmRzIG9uZSBlbGVtZW50ICovCi0KLSAgLyogVGVzdCwgYnV0IHRoaXMgdGltZSBzcGVjaWZ5aW5nIGJvdGggcGFkIG5hbWVzICovCi0gIHJ1bl9kZWxheWVkX3Rlc3QgKCJwYXJzZXRlc3RlbGVtZW50IG5hbWU9c3JjIC5zcmMgISAiCi0gICAgICAiLnNpbmsgZmFrZXNpbmsgc2lsZW50PXRydWUgbmFtZT1zaW5rIiwgInNpbmsiLCBUUlVFKTsKLSAgLyogRklYTUU6IHZhbGdyaW5kIGZpbmRzIG9uZSBlbGVtZW50ICovCi0KLSAgLyogTm93IHRyeSB3aXRoIGEgY2FwcyBmaWx0ZXIsIGJ1dCBub3QgdGVzdGluZyB0aGF0Ci0gICAqIHRoZSBwZWVycGFkID09IHNpbmtwYWQsIGJlY2F1c2UgdGhlIHBlZXIgd2lsbCBhY3R1YWxseQotICAgKiBiZSBhIGNhcHNmaWx0ZXIgKi8KLSAgcnVuX2RlbGF5ZWRfdGVzdCAoInBhcnNldGVzdGVsZW1lbnQgbmFtZT1zcmMgISBhcHBsaWNhdGlvbi94LXRlc3QtY2FwcyAhICIKLSAgICAgICJmYWtlc2luayBzaWxlbnQ9dHJ1ZSBuYW1lPXNpbmsiLCBOVUxMLCBUUlVFKTsKLQotICAvKiBOb3cgdHJ5IHdpdGggbXV0dWFsbHkgZXhjbHVzaXZlIGNhcHMgZmlsdGVycyB0aGF0IAotICAgKiB3aWxsIHByZXZlbnQgbGlua2luZywgYnV0IG9ubHkgb25jZSBnZXRzIGFyb3VuZCB0byBoYXBwZW5pbmcgLQotICAgKiBpZSwgdGhlIHBpcGVsaW5lIHNob3VsZCBjcmVhdGUgb2sgYnV0IGZhaWwgdG8gY2hhbmdlIHN0YXRlICovCi0gIHJ1bl9kZWxheWVkX3Rlc3QgKCJwYXJzZXRlc3RlbGVtZW50IG5hbWU9c3JjICEgYXBwbGljYXRpb24veC10ZXN0LWNhcHMgISAiCi0gICAgICAiaWRlbnRpdHkgc2lsZW50PXRydWUgISBhcHBsaWNhdGlvbi94LW90aGVyLWNhcHMgISAiCi0gICAgICAiZmFrZXNpbmsgc2lsZW50PXRydWUgbmFtZT1zaW5rIHNpbGVudD10cnVlIiwgTlVMTCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQYXJzZVRlc3RFbGVtZW50Ci17Ci0gIEdzdEJpbiBwYXJlbnQ7Ci0KLSAgR3N0RWxlbWVudCAqZmFrZXNyYzsKLX0gR3N0UGFyc2VUZXN0RWxlbWVudDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBhcnNlVGVzdEVsZW1lbnRDbGFzcwotewotICBHc3RCaW5DbGFzcyBwYXJlbnQ7Ci19IEdzdFBhcnNlVGVzdEVsZW1lbnRDbGFzczsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHRlc3RfZWxlbWVudF9wYWRfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLCBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC10ZXN0LWNhcHMiKSk7Ci0jZGVmaW5lIGdzdF9wYXJzZV90ZXN0X2VsZW1lbnRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UGFyc2VUZXN0RWxlbWVudCwgZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudCwgR1NUX1RZUEVfQklOKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcGFyc2VfdGVzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcGFyc2VfdGVzdF9lbGVtZW50X2NsYXNzX2luaXQgKEdzdFBhcnNlVGVzdEVsZW1lbnRDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnRlc3RfZWxlbWVudF9wYWRfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJUZXN0IGVsZW1lbnQgZm9yIHBhcnNlIGxhdW5jaCB0ZXN0cyIsICJTb3VyY2UiLAotICAgICAgIlRlc3QgZWxlbWVudCBmb3IgcGFyc2UgbGF1bmNoIHRlc3RzIGluIGNvcmUiLAotICAgICAgIkdTdHJlYW1lciBEZXZlbCA8Z3N0cmVhbWVyLWRldmVsQGxpc3RzLnNmLm5ldD4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcGFyc2VfdGVzdF9lbGVtZW50X2NoYW5nZV9zdGF0ZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wYXJzZV90ZXN0X2VsZW1lbnRfaW5pdCAoR3N0UGFyc2VUZXN0RWxlbWVudCAqIHNyYykKLXsKLSAgLyogQ3JlYXRlIGEgZmFrZXNyYyBhbmQgYWRkIGl0IHRvIG91cnNlbHZlcyAqLwotICBzcmMtPmZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIGlmIChzcmMtPmZha2VzcmMpCi0gICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHNyYyksIHNyYy0+ZmFrZXNyYyk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3BhcnNlX3Rlc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFBhcnNlVGVzdEVsZW1lbnQgKnNyYyA9IChHc3RQYXJzZVRlc3RFbGVtZW50ICopIGVsZW1lbnQ7Ci0KLSAgaWYgKHRyYW5zaXRpb24gPT0gR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQpIHsKLSAgICAvKiBBZGQgb3VyIHBhZCAqLwotICAgIEdzdFBhZCAqcGFkOwotICAgIEdzdFBhZCAqZ2hvc3Q7Ci0KLSAgICBpZiAoc3JjLT5mYWtlc3JjID09IE5VTEwpCi0gICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotCi0gICAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYy0+ZmFrZXNyYywgInNyYyIpOwotICAgIGlmIChwYWQgPT0gTlVMTCkKLSAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0KLSAgICBnaG9zdCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic3JjIiwgcGFkKTsKLSAgICBmYWlsX2lmIChnaG9zdCA9PSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBnaG9zdCBwYWQiKTsKLSAgICAvKiBhY3RpdmF0ZSBhbmQgYWRkICovCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChnaG9zdCwgVFJVRSk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNyYyksIGdob3N0KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9taXNzaW5nX2VsZW1lbnRzKQotewotICBHc3RQYXJzZUNvbnRleHQgKmN0eDsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotICBnY2hhciAqKmFycjsKLQotICAvKiBhdm9pZCBtaXNsZWFkaW5nICdubyBzdWNoIGVsZW1lbnQnIGVycm9yIGRlYnVnIG1lc3NhZ2VzIHdoZW4gdXNpbmcgY3ZzICovCi0gIGlmICghZ19nZXRlbnYgKCJHU1RfREVCVUciKSkKLSAgICBnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkIChHU1RfTEVWRUxfTk9ORSk7Ci0KLSAgLyogb25lIG1pc3NpbmcgZWxlbWVudCAqLwotICBjdHggPSBnc3RfcGFyc2VfY29udGV4dF9uZXcgKCk7Ci0gIGVsZW1lbnQgPSBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKCJmYWtlc3JjICEgY29mZmVlc2luayIsIGN0eCwKLSAgICAgIEdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUywgJmVycik7Ci0gIGZhaWxfdW5sZXNzIChlcnIgIT0gTlVMTCwgImV4cGVjdGVkIGVycm9yIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGVyci0+Y29kZSwgR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50ID09IE5VTEwsICJleHBlY3RlZCBOVUxMIHJldHVybiB3aXRoIEZBVEFMX0VSUk9SUyIpOwotICBhcnIgPSBnc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cyAoY3R4KTsKLSAgZmFpbF91bmxlc3MgKGFyciAhPSBOVUxMLCAiZXhwZWN0ZWQgbWlzc2luZyBlbGVtZW50cyIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhcnJbMF0sICJjb2ZmZWVzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChhcnJbMV0gPT0gTlVMTCk7Ci0gIGdfc3RyZnJlZXYgKGFycik7Ci0gIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0gIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgZXJyID0gTlVMTDsKLQotICAvKiBtdWx0aXBsZSBtaXNzaW5nIGVsZW1lbnRzICovCi0gIGN0eCA9IGdzdF9wYXJzZV9jb250ZXh0X25ldyAoKTsKLSAgZWxlbWVudCA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoImZha2VzcmMgISBib2d1c2VuYyAhIGlkZW50aXR5ICEgZ29vbXV4ICEgIgotICAgICAgImZha2VzaW5rIiwgY3R4LCBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMsICZlcnIpOwotICBmYWlsX3VubGVzcyAoZXJyICE9IE5VTEwsICJleHBlY3RlZCBlcnJvciIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChlcnItPmNvZGUsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQpOwotICBmYWlsX3VubGVzcyAoZWxlbWVudCA9PSBOVUxMLCAiZXhwZWN0ZWQgTlVMTCByZXR1cm4gd2l0aCBGQVRBTF9FUlJPUlMiKTsKLSAgYXJyID0gZ3N0X3BhcnNlX2NvbnRleHRfZ2V0X21pc3NpbmdfZWxlbWVudHMgKGN0eCk7Ci0gIGZhaWxfdW5sZXNzIChhcnIgIT0gTlVMTCwgImV4cGVjdGVkIG1pc3NpbmcgZWxlbWVudHMiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoYXJyWzBdLCAiYm9ndXNlbmMiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoYXJyWzFdLCAiZ29vbXV4Iik7Ci0gIGZhaWxfdW5sZXNzIChhcnJbMl0gPT0gTlVMTCk7Ci0gIGdfc3RyZnJlZXYgKGFycik7Ci0gIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0gIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgZXJyID0gTlVMTDsKLQotICAvKiBtdWx0aXBsZSBtaXNzaW5nIGVsZW1lbnRzLCBkaWZmZXJlbnQgbGluayBwYXR0ZXJuICovCi0gIGN0eCA9IGdzdF9wYXJzZV9jb250ZXh0X25ldyAoKTsKLSAgZWxlbWVudCA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAoImZha2VzcmMgISBib2d1c2VuYyAhIG11eC5zaW5rICIKLSAgICAgICJibGFoc3JjICEgZ29vbXV4IG5hbWU9bXV4ICEgZmFrZXNpbmsgICBmYWtlc3JjICEgZ29vc2luayIsIGN0eCwKLSAgICAgIEdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUywgJmVycik7Ci0gIGZhaWxfdW5sZXNzIChlcnIgIT0gTlVMTCwgImV4cGVjdGVkIGVycm9yIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGVyci0+Y29kZSwgR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCk7Ci0gIGZhaWxfdW5sZXNzIChlbGVtZW50ID09IE5VTEwsICJleHBlY3RlZCBOVUxMIHJldHVybiB3aXRoIEZBVEFMX0VSUk9SUyIpOwotICBhcnIgPSBnc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cyAoY3R4KTsKLSAgZmFpbF91bmxlc3MgKGFyciAhPSBOVUxMLCAiZXhwZWN0ZWQgbWlzc2luZyBlbGVtZW50cyIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhcnJbMF0sICJib2d1c2VuYyIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhcnJbMV0sICJibGFoc3JjIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGFyclsyXSwgImdvb211eCIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhcnJbM10sICJnb29zaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChhcnJbNF0gPT0gTlVMTCk7Ci0gIGdfc3RyZnJlZXYgKGFycik7Ci0gIGdzdF9wYXJzZV9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0gIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgZXJyID0gTlVMTDsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mbGFncykKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIC8qIGF2b2lkIG1pc2xlYWRpbmcgJ25vIHN1Y2ggZWxlbWVudCcgZXJyb3IgZGVidWcgbWVzc2FnZXMgd2hlbiB1c2luZyBjdnMgKi8KLSAgaWYgKCFnX2dldGVudiAoIkdTVF9ERUJVRyIpKQotICAgIGdzdF9kZWJ1Z19zZXRfZGVmYXVsdF90aHJlc2hvbGQgKEdTVF9MRVZFTF9OT05FKTsKLQotICAvKiBkZWZhdWx0IGJlaGF2aW91ciBpcyB0byByZXR1cm4gYW55IGFscmVhZHkgY29uc3RydWN0ZWQgYmlucy9lbGVtZW50cyAqLwotICBlbGVtZW50ID0gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgiZmFrZXNyYyAhIGNvZmZlZXNpbmsiLCBOVUxMLCAwLCAmZXJyKTsKLSAgZmFpbF91bmxlc3MgKGVyciAhPSBOVUxMLCAiZXhwZWN0ZWQgZXJyb3IiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZXJyLT5jb2RlLCBHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5UKTsKLSAgZmFpbF91bmxlc3MgKGVsZW1lbnQgIT0gTlVMTCwgImV4cGVjdGVkIHBhcnRpYWwgcGlwZWxpbmUvZWxlbWVudCIpOwotICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gIGVyciA9IE5VTEw7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotCi0gIC8qIHRlc3QgR1NUX1BBUlNFX0ZMQUdfRkFUQUxfRVJST1JTICovCi0gIGVsZW1lbnQgPSBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKCJmYWtlc3JjICEgY29mZmVlc2luayIsIE5VTEwsCi0gICAgICBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMsICZlcnIpOwotICBmYWlsX3VubGVzcyAoZXJyICE9IE5VTEwsICJleHBlY3RlZCBlcnJvciIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChlcnItPmNvZGUsIEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX0VMRU1FTlQpOwotICBmYWlsX3VubGVzcyAoZWxlbWVudCA9PSBOVUxMLCAiZXhwZWN0ZWQgTlVMTCByZXR1cm4gd2l0aCBGQVRBTF9FUlJPUlMiKTsKLSAgZ19lcnJvcl9mcmVlIChlcnIpOwotICBlcnIgPSBOVUxMOwotCi0gIC8qIHRlc3QgR1NUX1BBUlNFX0ZMQUdfRkFUQUxfRVJST1JTIHdpdGhvdXQgR0Vycm9yICovCi0gIGVsZW1lbnQgPSBnc3RfcGFyc2VfbGF1bmNoX2Z1bGwgKCJmYWtlc3JjICEgY29mZmVlc2luayIsIE5VTEwsCi0gICAgICBHU1RfUEFSU0VfRkxBR19GQVRBTF9FUlJPUlMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZWxlbWVudCA9PSBOVUxMLCAiZXhwZWN0ZWQgTlVMTCByZXR1cm4gd2l0aCBGQVRBTF9FUlJPUlMiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzaW5nKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLQotICAvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCi0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgiZmlsZXNyYyBsb2NhdGlvbj14XFwiLCBOVUxMLCAwLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1wYXJzZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJQYXJzZSBMYXVuY2ggc3ludGF4Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInBhcnNlbGF1bmNoIik7Ci0KLSAgLyogdGltZSBvdXQgYWZ0ZXIgMjBzLCBub3QgdGhlIGRlZmF1bHQgMyAqLwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDIwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xhdW5jaF9saW5lcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sYXVuY2hfbGluZXMyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBleHBlY3RlZF90b19mYWlsX3BpcGVzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBsZWFraW5nX2ZhaWxfcGlwZXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIGRlbGF5ZWRfbGluayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mbGFncyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9taXNzaW5nX2VsZW1lbnRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNpbmcpOwotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHBhcnNlKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9xdWV1ZS1lcnJvci5jIGIvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3F1ZXVlLWVycm9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NDA4YmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3F1ZXVlLWVycm9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgcXVldWUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyayBOYXV3ZWxhZXJ0cyAgPG1uYXV3IHVzZXJzIHNvdXJjZWZvcmdlIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotbW9kaWZ5X2NhcHMgKEdzdE9iamVjdCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0RXZlbnQgKmV2ZW50ID0gR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UIChpbmZvKTsKLSAgR3N0RWxlbWVudCAqZmlsdGVyID0gR1NUX0VMRU1FTlQgKGRhdGEpOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGZhaWxfdW5sZXNzIChldmVudCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19FVkVOVCAoZXZlbnQpKTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSAhPSBHU1RfRVZFTlRfRU9TKQotICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotCi0gIC8qIHRyaWdnZXIgY2FwcyBuZWdvdGlhdGlvbiBlcnJvciAqLwotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtcmF3Iik7Ci0gIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3F1ZXVlKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXQ7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpmaWx0ZXIsICpxdWV1ZTsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFBhZCAqcGFkOwotICBndWludCBwcm9iZTsKLSAgZ2NoYXIgKnBpcGVfZGVzYyA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYgKCJmYWtlc3JjIG51bS1idWZmZXJzPTEgISB2aWRlby94LXJhdyAhICIKLSAgICAgICJxdWV1ZSBtaW4tdGhyZXNob2xkLWJ1ZmZlcnM9MiBuYW1lPXF1ZXVlICEgIgotICAgICAgImNhcHNmaWx0ZXIgbmFtZT1uYXN0eSAhIGZha2VzaW5rIik7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChwaXBlX2Rlc2MsIE5VTEwpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCk7Ci0gIGdfZnJlZSAocGlwZV9kZXNjKTsKLQotICBmaWx0ZXIgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJuYXN0eSIpOwotICBmYWlsX3VubGVzcyAoZmlsdGVyICE9IE5VTEwpOwotCi0gIC8qIHF1ZXVlIHdhaXRzIGZvciBhbGwgZGF0YSBhbmQgRU9TIHRvIGFycml2ZSAqLwotICAvKiB0aGVuIHByb2JlIGZvcmNlcyBkb3duc3RyZWFtIGVsZW1lbnQgdG8gcmV0dXJuIG5lZ290aWF0aW9uIGVycm9yICovCi0gIHF1ZXVlID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAicXVldWUiKTsKLSAgZmFpbF91bmxlc3MgKHF1ZXVlICE9IE5VTEwpOwotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7Ci0gIHByb2JlID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIG1vZGlmeV9jYXBzLCBmaWx0ZXIsIE5VTEwpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLQotICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9FT1MsIDUgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMLCAidGltZW91dCB3YWl0aW5nIGZvciBlcnJvciBvciBlb3MgbWVzc2FnZSIpOwotCi0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHBhZCwgcHJvYmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChxdWV1ZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGZpbHRlcik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotcXVldWVfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgicXVldWUiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcXVldWUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocXVldWUpCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9waXBlbGluZXMvc2Vlay5jIGIvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NlZWsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwMzBjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9waXBlbGluZXMvc2Vlay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qIEdTdHJlYW1lciBzaW1wbGUgc2VlayB1bml0IHRlc3QKLSAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLgotICogICBBdXRob3I6IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNvbnNpc3RlbmN5Y2hlY2tlci5oPgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICBEdW1teSBzb3VyY2UsIGxpa2UgYSBzdHJpcHBlZCBkb3duIGF1ZGlvIHRlc3Qgc291cmNlCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotI2RlZmluZSBTQU1QTEVSQVRFIDQ0MTAwCi0jZGVmaW5lIENIVU5LU19QRVJfU0VDIDEwCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEJhc2VTcmMgcGFyZW50OwotICBHc3RDbG9ja1RpbWUgbmV4dF90aW1lOwotfSBUaW1lZFRlc3RTcmM7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEJhc2VTcmNDbGFzcyBwYXJlbnRfY2xhc3M7Ci19IFRpbWVkVGVzdFNyY0NsYXNzOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdGltZWRfdGVzdF9zcmNfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ0aW1lZC9hdWRpbyIpKTsKLQotc3RhdGljIEdUeXBlIHRpbWVkX3Rlc3Rfc3JjX2dldF90eXBlICh2b2lkKTsKLQotR19ERUZJTkVfVFlQRSAoVGltZWRUZXN0U3JjLCB0aW1lZF90ZXN0X3NyYywgR1NUX1RZUEVfQkFTRV9TUkMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gdGltZWRfdGVzdF9zcmNfaXNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiB0aW1lZF90ZXN0X3NyY19kb19zZWVrIChHc3RCYXNlU3JjICogYmFzZXNyYywKLSAgICBHc3RTZWdtZW50ICogc2VnbWVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gdGltZWRfdGVzdF9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiB0aW1lZF90ZXN0X3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiB0aW1lZF90ZXN0X3NyY19jcmVhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLAotICAgIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWZmZXIpOwotCi1zdGF0aWMgdm9pZAotdGltZWRfdGVzdF9zcmNfY2xhc3NfaW5pdCAoVGltZWRUZXN0U3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlc3JjX2NsYXNzID0gKEdzdEJhc2VTcmNDbGFzcyAqKSBrbGFzczsKLQotICBnc3RiYXNlc3JjX2NsYXNzLT5pc19zZWVrYWJsZSA9IHRpbWVkX3Rlc3Rfc3JjX2lzX3NlZWthYmxlOwotICBnc3RiYXNlc3JjX2NsYXNzLT5kb19zZWVrID0gdGltZWRfdGVzdF9zcmNfZG9fc2VlazsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+c3RhcnQgPSB0aW1lZF90ZXN0X3NyY19zdGFydDsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+c3RvcCA9IHRpbWVkX3Rlc3Rfc3JjX3N0b3A7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPmNyZWF0ZSA9IHRpbWVkX3Rlc3Rfc3JjX2NyZWF0ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKSwKLSAgICAgICZ0aW1lZF90ZXN0X3NyY19zcmNfdGVtcGxhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotdGltZWRfdGVzdF9zcmNfaW5pdCAoVGltZWRUZXN0U3JjICogc3JjKQotewotICBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoR1NUX0JBU0VfU1JDIChzcmMpLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfYmFzZV9zcmNfc2V0X2xpdmUgKEdTVF9CQVNFX1NSQyAoc3JjKSwgRkFMU0UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXRpbWVkX3Rlc3Rfc3JjX3N0YXJ0IChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgVGltZWRUZXN0U3JjICpzcmMgPSAoVGltZWRUZXN0U3JjICopIGJhc2VzcmM7Ci0KLSAgc3JjLT5uZXh0X3RpbWUgPSAwOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi10aW1lZF90ZXN0X3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotdGltZWRfdGVzdF9zcmNfZG9fc2VlayAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIEdzdFNlZ21lbnQgKiBzZWdtZW50KQotewotICBUaW1lZFRlc3RTcmMgKnNyYyA9IChUaW1lZFRlc3RTcmMgKikgYmFzZXNyYzsKLQotICBzcmMtPm5leHRfdGltZSA9IHNlZ21lbnQtPnBvc2l0aW9uOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi10aW1lZF90ZXN0X3NyY19pc19zZWVrYWJsZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdGltZWRfdGVzdF9zcmNfY3JlYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IGxlbmd0aCwKLSAgICBHc3RCdWZmZXIgKiogYnVmKQotewotICBUaW1lZFRlc3RTcmMgKnNyYyA9IChUaW1lZFRlc3RTcmMgKikgYmFzZXNyYzsKLQotICAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChTQU1QTEVSQVRFIC8gQ0hVTktTX1BFUl9TRUMpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoKmJ1ZikgPSBzcmMtPm5leHRfdGltZTsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoKmJ1ZikgPSBHU1RfU0VDT05EIC8gQ0hVTktTX1BFUl9TRUM7Ci0gIHNyYy0+bmV4dF90aW1lICs9IEdTVF9CVUZGRVJfRFVSQVRJT04gKCpidWYpOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zZWVrKQotewotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEVsZW1lbnQgKmJpbiwgKnNyYzEsICpzaW5rOwotICBnYm9vbGVhbiByZXM7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RCdXMgKmJ1czsKLQotICBHU1RfSU5GTyAoInByZXBhcmluZyB0ZXN0Iik7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsIChidXMsIEdfUFJJT1JJVFlfSElHSCk7Ci0KLSAgc3JjMSA9IGdfb2JqZWN0X25ldyAodGltZWRfdGVzdF9zcmNfZ2V0X3R5cGUgKCksICJuYW1lIiwgInRlc3RzcmMiLCBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBzcmMxLCBzaW5rLCBOVUxMKTsKLQotICByZXMgPSBnc3RfZWxlbWVudF9saW5rIChzcmMxLCBzaW5rKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjMSwgInNyYyIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIEdTVF9JTkZPICgic3RhcnRpbmcgdGVzdCIpOwotCi0gIC8qIHByZXBhcmUgcGxheWluZyAqLwotICByZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCBOVUxMKTsKLQotICAvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCi0gIHJlcyA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCBOVUxMKTsKLQotICByZXMgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChiaW4sCi0gICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgR1NUX0ZPUk1BVF9USU1FLCBHU1RfU0VFS19GTEFHX0ZMVVNILAotICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAoR3N0Q2xvY2tUaW1lKSAwLAotICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAoR3N0Q2xvY2tUaW1lKSAyICogR1NUX1NFQ09ORCkpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIEdTVF9JTkZPICgic2Vla2VkIik7Ci0KLSAgLyogcnVuIHBpcGVsaW5lICovCi0gIHJlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCBOVUxMKTsKLQotICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfQ0xPQ0tfVElNRV9OT05FLAotICAgICAgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChHU1RfTUVTU0FHRV9UWVBFX05BTUUgKG1zZyksICJlb3MiKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgZmFpbF91bmxlc3MgKHJlcyAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsIE5VTEwpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1waXBlbGluZXNfc2Vla19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJwaXBlbGluZXMtc2VlayIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zZWVrKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHBpcGVsaW5lc19zZWVrKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMgYi90ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjM4NWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICoKLSAqIHNpbXBsZV9sYXVuY2hfbGluZXMuYzogVW5pdCB0ZXN0IGZvciBzaW1wbGUgcGlwZWxpbmVzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfcGlwZWxpbmUgKGNvbnN0IGdjaGFyICogcGlwZV9kZXNjcikKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChwaXBlX2Rlc2NyLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgcmV0dXJuIHBpcGVsaW5lOwotfQotCi0vKgotICogcnVuX3BpcGVsaW5lOgotICogQHBpcGU6IHRoZSBwaXBlbGluZSB0byBydW4KLSAqIEBkZXNjOiB0aGUgZGVzY3JpcHRpb24gZm9yIHVzZSBpbiBtZXNzYWdlcwotICogQG1lc3NhZ2VfdHlwZXM6IGlzIGEgbWFzayBvZiBleHBlY3RlZCBtZXNzYWdlX3R5cGVzCi0gKiBAdG1lc3NhZ2U6IGlzIHRoZSBleHBlY3RlZCB0ZXJtaW5hbCBtZXNzYWdlCi0gKgotICogdGhlIHBvbGwgY2FsbCB3aWxsIHRpbWUgb3V0IGFmdGVyIGhhbGYgYSBzZWNvbmQuCi0gKi8KLXN0YXRpYyB2b2lkCi1ydW5fcGlwZWxpbmUgKEdzdEVsZW1lbnQgKiBwaXBlbGluZSwgY29uc3QgZ2NoYXIgKiBkZXNjciwKLSAgICBHc3RNZXNzYWdlVHlwZSBtZXNzYWdlX3R5cGVzLCBHc3RNZXNzYWdlVHlwZSB0bWVzc2FnZSkKLXsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2VUeXBlIHJtZXNzYWdlOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgZmFpbF9pZiAocGlwZWxpbmUgPT0gTlVMTCk7Ci0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF9pZiAoYnVzID09IE5VTEwpOwotCi0gIEdTVF9ERUJVRyAoInJ1bm5pbmcgcGlwZWxpbmUgJXMiLCBkZXNjcik7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBpZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykgewotICAgIEdTVF9XQVJOSU5HICgiaGF2ZSBmYWlsZWQgc3RhdGUgY2hhbmdlICVkIiwgcmV0KTsKLSAgICBnX2NyaXRpY2FsICgiQ291bGRuJ3Qgc2V0IHBpcGVsaW5lIHRvIFBMQVlJTkciKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICB3aGlsZSAoMSkgewotICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQU5ZLCBHU1RfU0VDT05EIC8gMik7Ci0KLSAgICBpZiAobWVzc2FnZSkgewotICAgICAgcm1lc3NhZ2UgPSBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKTsKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICB9IGVsc2UgewotICAgICAgcm1lc3NhZ2UgPSBHU1RfTUVTU0FHRV9VTktOT1dOOwotICAgIH0KLQotICAgIGlmIChybWVzc2FnZSA9PSB0bWVzc2FnZSkgewotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIGlmIChybWVzc2FnZSA9PSBHU1RfTUVTU0FHRV9VTktOT1dOKSB7Ci0gICAgICBnX2NyaXRpY2FsICgiVW5leHBlY3RlZCB0aW1lb3V0IGluIGdzdF9idXNfcG9sbCwgbG9va2luZyBmb3IgJWQ6ICVzIiwKLSAgICAgICAgICB0bWVzc2FnZSwgZGVzY3IpOwotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIGlmIChybWVzc2FnZSAmIG1lc3NhZ2VfdHlwZXMpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBnX2NyaXRpY2FsCi0gICAgICAgICgiVW5leHBlY3RlZCBtZXNzYWdlIHJlY2VpdmVkIG9mIHR5cGUgJWQsICclcycsIGxvb2tpbmcgZm9yICVkOiAlcyIsCi0gICAgICAgIHJtZXNzYWdlLCBnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lIChybWVzc2FnZSksIHRtZXNzYWdlLCBkZXNjcik7Ci0gIH0KLQotZG9uZToKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0XzJfZWxlbWVudHMpCi17Ci0gIGNvbnN0IGdjaGFyICpzOwotCi0gIHMgPSAiZmFrZXNyYyBjYW4tYWN0aXZhdGUtcHVzaD1mYWxzZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUiOwotICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgfAotICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyB8IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUgfAotICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJULCBHU1RfTUVTU0FHRV9VTktOT1dOKTsKLQotICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9dHJ1ZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdWxsPWZhbHNlIjsKLSAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKLSAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgfCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FIHwKLSAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCwgR1NUX01FU1NBR0VfVU5LTk9XTik7Ci0KLSAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlIG51bS1idWZmZXJzPTEwICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSI7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfTkVXX0NMT0NLIHwgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCB8Ci0gICAgICBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTIHwgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSB8Ci0gICAgICBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBUlQsIEdTVF9NRVNTQUdFX0VPUyk7Ci0KLSAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPXRydWUgbnVtLWJ1ZmZlcnM9MTAgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD1mYWxzZSI7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfTkVXX0NMT0NLIHwgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCB8Ci0gICAgICBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTIHwgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSB8Ci0gICAgICBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBUlQsIEdTVF9NRVNTQUdFX0VPUyk7Ci0KLSAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9ZmFsc2UiOwotICBBU1NFUlRfQ1JJVElDQUwgKHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgfAotICAgICAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMgfCBHU1RfTUVTU0FHRV9BU1lOQ19ET05FIHwKLSAgICAgICAgICBHU1RfTUVTU0FHRV9TVFJFQU1fU1RBUlQsIEdTVF9NRVNTQUdFX1VOS05PV04pKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAoR3N0RWxlbWVudCAqIHBpcGVsaW5lLCBHc3RTdGF0ZSBzdGF0ZSwKLSAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBpbW1lZGlhdGUsIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGZpbmFsKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgc3RhdGUpOwotICBpZiAocmV0ICE9IGltbWVkaWF0ZSkKLSAgICBnX2NyaXRpY2FsICgiVW5leHBlY3RlZCBzZXRfc3RhdGUgcmV0dXJuIC0+JXM6ICVkICE9ICVkIiwKLSAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHN0YXRlKSwgcmV0LCBpbW1lZGlhdGUpOwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgaWYgKHJldCAhPSBmaW5hbCkKLSAgICBnX2NyaXRpY2FsICgiVW5leHBlY3RlZCBnZXRfc3RhdGUgcmV0dXJuIC0+JXM6ICVkICE9ICVkIiwKLSAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKHN0YXRlKSwgcmV0LCBmaW5hbCk7Ci19Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3RhdGVfY2hhbmdlX3JldHVybnMpCi17Ci0gIGNvbnN0IGdjaGFyICpzOwotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLQotICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1bGw9ZmFsc2UgISBmYWtlc2luayI7Ci0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAocywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGNoZWNrX3N0YXRlX2NoYW5nZV9yZXR1cm4gKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGNoZWNrX3N0YXRlX2NoYW5nZV9yZXR1cm4gKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VELCBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICAvKiBjYW4ndCBjaGVjayBQQVVTRUQsIGl0J3Mgbm90IGRldGVybWluaXN0aWMgKi8KLSAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSI7Ci0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAocywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGNoZWNrX3N0YXRlX2NoYW5nZV9yZXR1cm4gKHBpcGVsaW5lLCBHU1RfU1RBVEVfUkVBRFksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGNoZWNrX3N0YXRlX2NoYW5nZV9yZXR1cm4gKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VELAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQywgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICAvKiBjYW4ndCBjaGVjayBQQVVTRUQsIGl0J3Mgbm90IGRldGVybWluaXN0aWMgKi8KLSAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgY2hlY2tfc3RhdGVfY2hhbmdlX3JldHVybiAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR19HTlVDX1VOVVNFRAotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGVlKQotewotICBjb25zdCBnY2hhciAqczsKLQotICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9dHJ1ZSAhIHRlZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdXNoPXRydWUiOwotICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgfAotICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJULCBHU1RfTUVTU0FHRV9VTktOT1dOKTsKLQotICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9dHJ1ZSBudW0tYnVmZmVycz0xMCAhIHRlZSAhIGZha2VzaW5rIGNhbi1hY3RpdmF0ZS1wdXNoPXRydWUiOwotICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgIEdTVF9NRVNTQUdFX05FV19DTE9DSyB8IEdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQgfAotICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJULCBHU1RfTUVTU0FHRV9FT1MpOwotCi0gIHMgPSAiZmFrZXNyYyBjYW4tYWN0aXZhdGUtcHVzaD1mYWxzZSBjYW4tYWN0aXZhdGUtcHVsbD10cnVlICEgdGVlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSI7Ci0gIEFTU0VSVF9DUklUSUNBTCAocnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICAgICAgR1NUX01FU1NBR0VfTkVXX0NMT0NLIHwgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCB8Ci0gICAgICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJULCBHU1RfTUVTU0FHRV9VTktOT1dOKSk7Ci0KLSAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUgIgotICAgICAgIiEgdGVlIHB1bGwtbW9kZT1zaW5nbGUgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD10cnVlIjsKLSAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKLSAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCwgR1NUX01FU1NBR0VfVU5LTk9XTik7Ci0KLSAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUgbnVtLWJ1ZmZlcnM9MTAgIgotICAgICAgIiEgdGVlIHB1bGwtbW9kZT1zaW5nbGUgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD10cnVlIjsKLSAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKLSAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCwgR1NUX01FU1NBR0VfRU9TKTsKLQotICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9ZmFsc2UgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSAiCi0gICAgICAiISB0ZWUgbmFtZT10IHB1bGwtbW9kZT1zaW5nbGUgISBmYWtlc2luayBjYW4tYWN0aXZhdGUtcHVsbD10cnVlICIKLSAgICAgICJ0LiAhIHF1ZXVlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSBjYW4tYWN0aXZhdGUtcHVzaD1mYWxzZSI7Ci0gIEFTU0VSVF9DUklUSUNBTCAocnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICAgICAgR1NUX01FU1NBR0VfTkVXX0NMT0NLIHwgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCB8Ci0gICAgICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJULCBHU1RfTUVTU0FHRV9VTktOT1dOKSk7Ci0KLSAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUgIgotICAgICAgIiEgdGVlIG5hbWU9dCBwdWxsLW1vZGU9c2luZ2xlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSAiCi0gICAgICAidC4gISBxdWV1ZSAhIGZha2VzaW5rIjsKLSAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKLSAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCwgR1NUX01FU1NBR0VfVU5LTk9XTik7Ci0KLSAgcyA9ICJmYWtlc3JjIGNhbi1hY3RpdmF0ZS1wdXNoPWZhbHNlIGNhbi1hY3RpdmF0ZS1wdWxsPXRydWUgbnVtLWJ1ZmZlcnM9MTAgIgotICAgICAgIiEgdGVlIG5hbWU9dCBwdWxsLW1vZGU9c2luZ2xlICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1bGw9dHJ1ZSAiCi0gICAgICAidC4gISBxdWV1ZSAhIGZha2VzaW5rIjsKLSAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICBHU1RfTUVTU0FHRV9ORVdfQ0xPQ0sgfCBHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEIHwKLSAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCwgR1NUX01FU1NBR0VfRU9TKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotZ290X2hhbmRvZmYgKEdzdEVsZW1lbnQgKiBzaW5rLCBHc3RCdWZmZXIgKiBidWYsIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgdW51c2VkKQotewotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UKLSAgICAgIChzaW5rLCBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKE5VTEwsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJmb28iKSkpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdG9wX2Zyb21fYXBwKQotewotICBHc3RFbGVtZW50ICpmYWtlc3JjLCAqZmFrZXNpbmssICpwaXBlbGluZTsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0TWVzc2FnZVR5cGUgcm1lc3NhZ2U7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGZha2VzcmMgJiYgZmFrZXNpbmsgJiYgcGlwZWxpbmUpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoZmFrZXNyYywgZmFrZXNpbmspICE9IEZBTFNFKTsKLQotICBnX29iamVjdF9zZXQgKGZha2VzaW5rLCAic2lnbmFsLWhhbmRvZmZzIiwgKGdib29sZWFuKSBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoZmFrZXNpbmssICJoYW5kb2ZmIiwgR19DQUxMQkFDSyAoZ290X2hhbmRvZmYpLCBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgNSAqIEdTVF9TRUNPTkQpOwotICBzd2l0Y2ggKHJldCkgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgotICAgICAgZ19lcnJvciAoIkZhaWxlZCB0byBjaGFuZ2Ugc3RhdGUgdG8gUEFVU0VEIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6Ci0gICAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGNoYW5nZSBzdGF0ZSB0byBQQVVTRUQgd2l0aGluIDUgc2Vjb25kcyIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF9pZiAoYnVzID09IE5VTEwpOwotCi0gIC8qIHdpbGwgdGltZSBvdXQgYWZ0ZXIgaGFsZiBhIHNlY29uZCAqLwotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OLCBHU1RfU0VDT05EIC8gMik7Ci0gIGlmIChtZXNzYWdlKSB7Ci0gICAgcm1lc3NhZ2UgPSBHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKTsKLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcm1lc3NhZ2UgPSBHU1RfTUVTU0FHRV9VTktOT1dOOwotICB9Ci0gIGZhaWxfdW5sZXNzIChybWVzc2FnZSA9PSBHU1RfTUVTU0FHRV9BUFBMSUNBVElPTiwKLSAgICAgICJwb2xsZWQgbWVzc2FnZSBpcyBub3QgQVBQTElDQVRJT04gYnV0ICVzIiwKLSAgICAgIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKHJtZXNzYWdlKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZWZpbmRfZm9yY2Vfc2lua19jYXBzKQotewotICBjb25zdCBnY2hhciAqczsKLQotICBzID0gImZha2VzcmMgY2FuLWFjdGl2YXRlLXB1c2g9dHJ1ZSBudW0tYnVmZmVycz01ICEgIgotICAgICAgInR5cGVmaW5kIGZvcmNlLWNhcHM9Zm9vL3gtYmFyICEgZmFrZXNpbmsgY2FuLWFjdGl2YXRlLXB1c2g9dHJ1ZSI7Ci0gIEFTU0VSVF9DUklUSUNBTCAocnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICAgICAgR1NUX01FU1NBR0VfTkVXX0NMT0NLIHwgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRCB8Ci0gICAgICAgICAgR1NUX01FU1NBR0VfU1RSRUFNX1NUQVRVUyB8IEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUgfAotICAgICAgICAgIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFSVCwgR1NUX01FU1NBR0VfVU5LTk9XTikpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1zaW1wbGVfbGF1bmNoX2xpbmVzX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIlBpcGVsaW5lcyIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJsaW5lYXIiKTsKLQotICAvKiB0aW1lIG91dCBhZnRlciAyMHMsIG5vdCB0aGUgZGVmYXVsdCAzICovCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF8yX2VsZW1lbnRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0YXRlX2NoYW5nZV9yZXR1cm5zKTsKLSAgLyogdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RlZSk7IEZJWE1FICovCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdG9wX2Zyb21fYXBwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGVmaW5kX2ZvcmNlX3NpbmtfY2Fwcyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChzaW1wbGVfbGF1bmNoX2xpbmVzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9zdHJlc3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyZDA2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9waXBlbGluZXMvc3RyZXNzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgaW50IHBsYXlpbmcgPSAxOwotc3RhdGljIGludCBxdWl0ID0gMDsKLQotc3RhdGljIGdib29sZWFuCi1jaGFuZ2Vfc3RhdGVfdGltZW91dCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUgPSAoR3N0RWxlbWVudCAqKSBkYXRhOwotCi0gIGlmIChxdWl0KQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAocGxheWluZykgewotICAgIHBsYXlpbmcgPSAwOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgfSBlbHNlIHsKLSAgICBwbGF5aW5nID0gMTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1xdWl0X3RpbWVvdXQgKGdwb2ludGVyIGRhdGEpCi17Ci0gIHF1aXQgPSAxOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0cmVzc19wcmVyb2xsKQotewotICBHc3RFbGVtZW50ICpmYWtlc3JjLCAqZmFrZXNpbms7Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotCi0gIGZha2VzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZha2VzcmMgJiYgZmFrZXNpbmsgJiYgcGlwZWxpbmUpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOwotICBnc3RfZWxlbWVudF9saW5rIChmYWtlc3JjLCBmYWtlc2luayk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGdfdGltZW91dF9hZGQgKDUwMCwgJmNoYW5nZV9zdGF0ZV90aW1lb3V0LCBwaXBlbGluZSk7Ci0gIGdfdGltZW91dF9hZGRfc2Vjb25kcyAoMTAsICZxdWl0X3RpbWVvdXQsIE5VTEwpOwotCi0gIHdoaWxlICghcXVpdCkgewotICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAoTlVMTCwgVFJVRSk7Ci0gIH0KLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdHJlc3MpCi17Ci0gIEdzdEVsZW1lbnQgKmZha2VzcmMsICpmYWtlc2luaywgKnBpcGVsaW5lOwotICBnaW50IGk7Ci0KLSAgZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZmFrZXNyYyAmJiBmYWtlc2luayAmJiBwaXBlbGluZSk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBmYWtlc3JjLCBmYWtlc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKGZha2VzcmMsIGZha2VzaW5rKTsKLQotICBpID0gMTAwOwotICB3aGlsZSAoaS0tKSB7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1zdHJlc3Nfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgic3RyZXNzIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImxpbmVhciIpOwotCi0gIC8qIENvbXBsZXRlbHkgZGlzYWJsZSB0aW1lb3V0IGZvciB0aGlzIHRlc3QgKi8KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N0cmVzcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJlc3NfcHJlcm9sbCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChzdHJlc3MpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svdG9vbHMvZ3N0aW5zcGVjdC5jIGIvdGVzdHMvY2hlY2svdG9vbHMvZ3N0aW5zcGVjdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmUyM2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL3Rvb2xzL2dzdGluc3BlY3QuYworKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKiBHU3RyZWFtZXIgZ3N0LWluc3BlY3QgdW5pdCB0ZXN0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBGSVhNRSAyLjA6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpbmNsdWRlIDxjb25maWcuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotc3RhdGljIGludCBnc3RfaW5zcGVjdF9tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwotCi0jZGVmaW5lIG1haW4gZ3N0X2luc3BlY3RfbWFpbgotI2luY2x1ZGUgIi4uLy4uL3Rvb2xzL2dzdC1pbnNwZWN0LmMiCi0jdW5kZWYgbWFpbgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9leGlzdHMpCi17Ci0jZGVmaW5lIEFSR1ZfTEVOIChHX05fRUxFTUVOVFMgKGFyZ3YpIC0gMSkKLQotICB7Ci0gICAgY29uc3QgZ2NoYXIgKmFyZ3ZbXSA9IHsgImdzdC1pbnNwZWN0LTEuMCIsICItLWV4aXN0cyIsICJmb28iLCBOVUxMIH07Ci0KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaW5zcGVjdF9tYWluIChBUkdWX0xFTiwgKGdjaGFyICoqKSBhcmd2KSwgMSk7Ci0gIH0KLSAgewotICAgIGNvbnN0IGdjaGFyICphcmd2W10gPSB7ICJnc3QtaW5zcGVjdC0xLjAiLCAiLS1leGlzdHMiLCAiYmluIiwgTlVMTCB9OwotCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2luc3BlY3RfbWFpbiAoQVJHVl9MRU4sIChnY2hhciAqKikgYXJndiksIDApOwotICB9Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqYXJndltdID0geyAiZ3N0LWluc3BlY3QtMS4wIiwgIi0tZXhpc3RzIiwKLSAgICAgICItLWF0bGVhc3QtdmVyc2lvbj0iIFZFUlNJT04sICJiaW4iLCBOVUxMCi0gICAgfTsKLQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9pbnNwZWN0X21haW4gKEFSR1ZfTEVOLCAoZ2NoYXIgKiopIGFyZ3YpLCAwKTsKLSAgfQotICB7Ci0gICAgY29uc3QgZ2NoYXIgKmFyZ3ZbXSA9IHsgImdzdC1pbnNwZWN0LTEuMCIsICItLWV4aXN0cyIsCi0gICAgICAiLS1hdGxlYXN0LXZlcnNpb249MS4wIiwgImJpbiIsIE5VTEwKLSAgICB9OwotCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2luc3BlY3RfbWFpbiAoQVJHVl9MRU4sIChnY2hhciAqKikgYXJndiksIDApOwotICB9Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqYXJndltdID0geyAiZ3N0LWluc3BlY3QtMS4wIiwgIi0tZXhpc3RzIiwKLSAgICAgICItLWF0bGVhc3QtdmVyc2lvbj0xLjAuMCIsICJiaW4iLCBOVUxMCi0gICAgfTsKLQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9pbnNwZWN0X21haW4gKEFSR1ZfTEVOLCAoZ2NoYXIgKiopIGFyZ3YpLCAwKTsKLSAgfQotICB7Ci0gICAgY29uc3QgZ2NoYXIgKmFyZ3ZbXSA9IHsgImdzdC1pbnNwZWN0LTEuMCIsICItLWV4aXN0cyIsCi0gICAgICAiLS1hdGxlYXN0LXZlcnNpb249MS4yLjAiLCAiYmluIiwgTlVMTAotICAgIH07Ci0KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaW5zcGVjdF9tYWluIChBUkdWX0xFTiwgKGdjaGFyICoqKSBhcmd2KSwgMCk7Ci0gIH0KLSAgewotICAgIGNvbnN0IGdjaGFyICphcmd2W10gPSB7ICJnc3QtaW5zcGVjdC0xLjAiLCAiLS1leGlzdHMiLAotICAgICAgIi0tYXRsZWFzdC12ZXJzaW9uPTIuMCIsICJiaW4iLCBOVUxMCi0gICAgfTsKLQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9pbnNwZWN0X21haW4gKEFSR1ZfTEVOLCAoZ2NoYXIgKiopIGFyZ3YpLCAxKTsKLSAgfQotICB7Ci0gICAgY29uc3QgZ2NoYXIgKmFyZ3ZbXSA9IHsgImdzdC1pbnNwZWN0LTEuMCIsICItLWV4aXN0cyIsCi0gICAgICAiLS1hdGxlYXN0LXZlcnNpb249Mi4wLjAiLCAiYmluIiwgTlVMTAotICAgIH07Ci0KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaW5zcGVjdF9tYWluIChBUkdWX0xFTiwgKGdjaGFyICoqKSBhcmd2KSwgMSk7Ci0gIH0KLSAgewotICAgIGNvbnN0IGdjaGFyICphcmd2W10gPSB7ICJnc3QtaW5zcGVjdC0xLjAiLCAiLS1leGlzdHMiLAotICAgICAgIi0tYXRsZWFzdC12ZXJzaW9uPTEuNDQiLCAiYmluIiwgTlVMTAotICAgIH07Ci0KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaW5zcGVjdF9tYWluIChBUkdWX0xFTiwgKGdjaGFyICoqKSBhcmd2KSwgMSk7Ci0gIH0KLSAgewotICAgIGNvbnN0IGdjaGFyICphcmd2W10gPSB7ICJnc3QtaW5zcGVjdC0xLjAiLCAiLS1leGlzdHMiLAotICAgICAgIi0tYXRsZWFzdC12ZXJzaW9uPTEuNjAuNCIsICJiaW4iLCBOVUxMCi0gICAgfTsKLQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9pbnNwZWN0X21haW4gKEFSR1ZfTEVOLCAoZ2NoYXIgKiopIGFyZ3YpLCAxKTsKLSAgfQotICB7Ci0gICAgLyogY2hlY2sgZm9yIHBsdWdpbiBzaG91bGQgZmFpbCBsaWtlIHRoaXMgKi8KLSAgICBjb25zdCBnY2hhciAqYXJndltdID0geyAiZ3N0LWluc3BlY3QtMS4wIiwgIi0tZXhpc3RzIiwKLSAgICAgICItLWF0bGVhc3QtdmVyc2lvbj0xLjAiLCAiY29yZWVsZW1lbnRzIiwgTlVMTAotICAgIH07Ci0KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaW5zcGVjdF9tYWluIChBUkdWX0xFTiwgKGdjaGFyICoqKSBhcmd2KSwgMSk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZ3N0YWJpX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImdzdC1pbnNwZWN0Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdzdC1pbnNwZWN0Iik7Ci0KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2V4aXN0cyk7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ3N0YWJpKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MThmOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIGFkYXB0ZXIgdGVzdCBuZWVkcyBzeXMvdGltZXMuaCBhbmQgdW5pc3RkLmgKLWlmIEhBVkVfU1lTX1RJTUVTX0hfQU5EX1VOSVNURF9ICi0gIEFEQVBURVJfVEVTVF9ESVIgPSBhZGFwdGVyCi1lbHNlCi0gIEFEQVBURVJfVEVTVF9ESVIgPQotZW5kaWYKLQotYWx3YXlzX2RpcnMgPSBcCi0JY29udHJvbGxlciBcCi0JaGVsbG93b3JsZCBcCi0JbWFudWFsICAgICBcCi0JbWVtb3J5ICAgXAotCW5ldGNsb2NrIFwKLQlwdHAgXAotCXN0ZXBwaW5nIFwKLQlzdHJlYW1pZGRlbXV4IFwKLQlzdHJlYW1zCi0KLVNVQkRJUlMgPSAJCQkJXAotCSQoYWx3YXlzX2RpcnMpCQkJXAotCSQoQURBUFRFUl9URVNUX0RJUikKLQotRElTVF9TVUJESVJTID0gJChhbHdheXNfZGlycykgYWRhcHRlcgotCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzJlNjdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODU5ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIGluY2x1ZGUgdGhpcyBhdCB0aGUgZW5kIG9mICRNT0RVTEUvZXh0L01ha2VmaWxlLmFtIHRvIGZvcmNlIG1ha2UgdG8KLSMgYnVpbGQgc3ViZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWwgd2hlbiBtYWtlIC1qTiBpcyB1c2VkLiBXZSB3aWxsIGVuZCB1cAotIyBkZXNjZW5kaW5nIGludG8gYWxsIHN1YmRpcmVjdG9yaWVzIGEgc2Vjb25kIHRpbWUsIGJ1dCBvbmx5IGFmdGVyIHRoZSBmaXJzdAotIyAocGFyYWxsZWwpIHJ1biBoYXMgZmluaXNoZWQsIHNvIGl0IHNob3VsZCBnbyByaWdodCB0aHJvdWdoIHRoZSBzZWNvbmQgdGltZS4KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IHRlc3RzL2V4YW1wbGVzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAotCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKLSAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAotICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCi0gICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKLSAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKLQlkaXN0ZGlyCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1hbV9fcmVsYXRpdml6ZSA9IFwKLSAgZGlyMD1gcHdkYDsgXAotICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKLSAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKLSAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKLSAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCi0gIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKLSAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCi0gICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAotICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKLSAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCi0gICAgICBlbHNlIFwKLSAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCi0gICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gICAgICAgIGVsc2UgXAotICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKLSAgICAgICAgZmk7IFwKLSAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKLSAgICAgIGZpOyBcCi0gICAgZmk7IFwKLSAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgZG9uZTsgXAotICByZWxkaXI9IiQkZGlyMiIKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ASEFWRV9TWVNfVElNRVNfSF9BTkRfVU5JU1REX0hfRkFMU0VAQURBUFRFUl9URVNUX0RJUiA9IAotCi0jIGFkYXB0ZXIgdGVzdCBuZWVkcyBzeXMvdGltZXMuaCBhbmQgdW5pc3RkLmgKLUBIQVZFX1NZU19USU1FU19IX0FORF9VTklTVERfSF9UUlVFQEFEQVBURVJfVEVTVF9ESVIgPSBhZGFwdGVyCi1hbHdheXNfZGlycyA9IFwKLQljb250cm9sbGVyIFwKLQloZWxsb3dvcmxkIFwKLQltYW51YWwgICAgIFwKLQltZW1vcnkgICBcCi0JbmV0Y2xvY2sgXAotCXB0cCBcCi0Jc3RlcHBpbmcgXAotCXN0cmVhbWlkZGVtdXggXAotCXN0cmVhbXMKLQotU1VCRElSUyA9IFwKLQkkKGFsd2F5c19kaXJzKQkJCVwKLQkkKEFEQVBURVJfVEVTVF9ESVIpCi0KLURJU1RfU1VCRElSUyA9ICQoYWx3YXlzX2RpcnMpIGFkYXB0ZXIKLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLSQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrICQoYW1fX2VtcHR5KToKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi0jIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAotIyBpbnRvIHRoZW0gYW5kIHJ1biAnbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCi0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mICdtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCi0jICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluICdjb25maWcuc3RhdHVzJywgZWRpdCAnY29uZmlnLnN0YXR1cycKLSMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuICdtYWtlJyk7Ci0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSAnbWFrZScgY29tbWFuZCBsaW5lLgotJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpOgotCUBmYWlsPTsgXAotCWlmICQoYW1fX21ha2Vfa2VlcGdvaW5nKTsgdGhlbiBcCi0JICBmYWlsY29tPSdmYWlsPXllcyc7IFwKLQllbHNlIFwKLQkgIGZhaWxjb209J2V4aXQgMSc7IFwKLQlmaTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWNhc2UgIiRAIiBpbiBcCi0JICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCi0JICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCi0JZXNhYzsgXAotCWZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBkb3Rfc2Vlbj15ZXM7IFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZTsgXAotCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAotCWZpOyB0ZXN0IC16ICIkJGZhaWwiCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLXJlY3Vyc2l2ZQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD0uOyBcCi0JZWxzZSBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD07IFwKLQlmaTsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAotCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLXJlY3Vyc2l2ZQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtcmVjdXJzaXZlCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi0JQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICAkKGFtX19tYWtlX2RyeXJ1bikgXAotCSAgICAgIHx8IHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgZXhpdCAxOyBcCi0JICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAotCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCi0JICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAotCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAotCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAotCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCi0JCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKLQkJYW1fX3NraXBfbW9kZV9maXg9OiBcCi0JICAgICAgICBkaXN0ZGlyKSBcCi0JICAgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1yZWN1cnNpdmUKLWFsbC1hbTogTWFrZWZpbGUKLWluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKLWluc3RhbGxkaXJzLWFtOgotaW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCi11bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1yZWN1cnNpdmUKLQotZHZpLWFtOgotCi1odG1sOiBodG1sLXJlY3Vyc2l2ZQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLXJlY3Vyc2l2ZQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLXJlY3Vyc2l2ZQotCi1wZGYtYW06Ci0KLXBzOiBwcy1yZWN1cnNpdmUKLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIFwKLQljaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCWluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBcCi0JcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLS5QSE9OWTogaW5kZXBlbmRlbnQtc3ViZGlycyAkKFNVQkRJUlMpCi0KLWluZGVwZW5kZW50LXN1YmRpcnM6ICQoU1VCRElSUykKLQotJChTVUJESVJTKToKLQkkKE1BS0UpIC1DICRACi0KLWFsbC1yZWN1cnNpdmU6IGluZGVwZW5kZW50LXN1YmRpcnMKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9NYWtlZmlsZS5hbSBiL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZDI5ODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotbm9pbnN0X1BST0dSQU1TID0gYWRhcHRlcl90ZXN0Ci0KLWFkYXB0ZXJfdGVzdF9MREFERCA9ICQoR1NUX09CSl9MSUJTKSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi1hZGFwdGVyX3Rlc3RfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTAwNDZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4MTQgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IGFkYXB0ZXJfdGVzdCQoRVhFRVhUKQotc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvYWRhcHRlcgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKLWFkYXB0ZXJfdGVzdF9TT1VSQ0VTID0gYWRhcHRlcl90ZXN0LmMKLWFkYXB0ZXJfdGVzdF9PQkpFQ1RTID0gYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC4kKE9CSkVYVCkKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1hZGFwdGVyX3Rlc3RfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1hZGFwdGVyX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoYWRhcHRlcl90ZXN0X0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSBhZGFwdGVyX3Rlc3QuYwotRElTVF9TT1VSQ0VTID0gYWRhcHRlcl90ZXN0LmMKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotYWRhcHRlcl90ZXN0X0xEQUREID0gJChHU1RfT0JKX0xJQlMpICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEKLWFkYXB0ZXJfdGVzdF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvYWRhcHRlci9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9hZGFwdGVyL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLWFkYXB0ZXJfdGVzdCQoRVhFRVhUKTogJChhZGFwdGVyX3Rlc3RfT0JKRUNUUykgJChhZGFwdGVyX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2FkYXB0ZXJfdGVzdF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBhZGFwdGVyX3Rlc3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGFkYXB0ZXJfdGVzdF9MSU5LKSAkKGFkYXB0ZXJfdGVzdF9PQkpFQ1RTKSAkKGFkYXB0ZXJfdGVzdF9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1hZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0Lm86IGFkYXB0ZXJfdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRhcHRlcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2FkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QuVHBvIC1jIC1vIGFkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QubyBgdGVzdCAtZiAnYWRhcHRlcl90ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFkYXB0ZXJfdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0LlRwbyAkKERFUERJUikvYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FkYXB0ZXJfdGVzdC5jJyBvYmplY3Q9J2FkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRhcHRlcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QubyBgdGVzdCAtZiAnYWRhcHRlcl90ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFkYXB0ZXJfdGVzdC5jCi0KLWFkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3Qub2JqOiBhZGFwdGVyX3Rlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkYXB0ZXJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QuVHBvIC1jIC1vIGFkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3Qub2JqIGBpZiB0ZXN0IC1mICdhZGFwdGVyX3Rlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhZGFwdGVyX3Rlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWRhcHRlcl90ZXN0LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkYXB0ZXJfdGVzdC1hZGFwdGVyX3Rlc3QuVHBvICQoREVQRElSKS9hZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWRhcHRlcl90ZXN0LmMnIG9iamVjdD0nYWRhcHRlcl90ZXN0LWFkYXB0ZXJfdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkYXB0ZXJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGFwdGVyX3Rlc3QtYWRhcHRlcl90ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnYWRhcHRlcl90ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWRhcHRlcl90ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FkYXB0ZXJfdGVzdC5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvYWRhcHRlcl90ZXN0LmMgYi90ZXN0cy9leGFtcGxlcy9hZGFwdGVyL2FkYXB0ZXJfdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODlhMDZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL2FkYXB0ZXIvYWRhcHRlcl90ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90aW1lcy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotc3RydWN0IFRlc3RQYXJhbXMKLXsKLSAgZ2ludCB0b3Rfc2l6ZTsKLSAgZ2ludCByZWFkX3NpemU7Ci0gIGdpbnQgd3JpdGVfc2l6ZTsKLX07Ci0KLS8qIFRoaXMgdGVzdCBwdXNoZXMgJ24nIGJ1ZmZlcnMgb2YgJ3dyaXRlIHNpemUnIGludG8gYW4gYWRhcHRlciwgdGhlbiByZWFkcwotICogdGhlbSBvdXQgaW4gJ3JlYWQgc2l6ZScgc2l6ZWQgcGllY2VzLCB1c2luZyB0YWtlIGFuZCB0aGVuIHRha2VfYnVmZmVyLCAKLSAqIGFuZCBwcmludHMgdGhlIHRpbWluZ3MgKi8KLQotc3RhdGljIHN0cnVjdCBUZXN0UGFyYW1zIHBhcmFtX3NldHNbXSA9IHsKLS8qIFRoZXNlIHZhbHVlcyBwdXQgfjI1Nk1CIGluIDFNQiBjaHVua3MgaW4gYW4gYWRhcHRlciwgdGhlbiByZWFkcyB0aGVtIG91dAotICogaW4gMjUwa2IgYmxvY2tzICovCi0gIHsyNTYwMDAwMDAsIDI1MDAwMCwgMTAwMDAwMH0sCi0vKiBUaGVzZSB2YWx1ZXMgcHV0IH4yNTZNQiBpbiAxMDAwIGJ5dGUgY2h1bmtzIGluIGFuIGFkYXB0ZXIsIHRoZW4gcmVhZHMgdGhlbSAKLSAqIG91dCBpbiAyMDAgYnl0ZSBibG9ja3MgKi8KLSAgezI1NjAwMDAwLCAyMDAsIDEwMDB9LAotLyogVGhlc2UgdmFsdWVzIHB1dCB+MjU2TUIgaW4gMjAwIGNodW5rcyBpbiBhbiBhZGFwdGVyLCB0aGVuIHJlYWRzIHRoZW0gb3V0Ci0gKiBpbiAxMDAwIGJ5dGUgYmxvY2tzICovCi0gIHsyNTYwMDAwMCwgMTAwMCwgMjAwfQotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgbl90ZXN0cyA9IHNpemVvZiAocGFyYW1fc2V0cykgLyBzaXplb2YgKHN0cnVjdCBUZXN0UGFyYW1zKTsKLQotc3RhdGljIGdpbnQgdGlja3NfcGVyX3NlYzsKLQotc3RhdGljIHZvaWQKLXJ1bl90ZXN0X3Rha2UgKHN0cnVjdCBUZXN0UGFyYW1zICpwYXJhbXMpCi17Ci0gIC8qIENyZWF0ZSBhbiBhZGFwdGVyIGFuZCBmZWVkIGl0IGRhdGEgb2YgZml4ZWQgc2l6ZSwgdGhlbiByZXRyaWV2ZSBpdCBpbiAKLSAgICogYSBkaWZmZXJlbnQgc2l6ZSAqLwotICBHc3RBZGFwdGVyICphZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBndWludDggKmRhdGE7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBpbnQgaTsKLSAgZ2ludCBudGltZXMgPSBwYXJhbXMtPnRvdF9zaXplIC8gcGFyYW1zLT53cml0ZV9zaXplOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudGltZXM7IGkrKykgewotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAocGFyYW1zLT53cml0ZV9zaXplKTsKLQotICAgIGdzdF9idWZmZXJfbWVtc2V0IChidWYsIDAsIDAsIHBhcmFtcy0+d3JpdGVfc2l6ZSk7Ci0KLSAgICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWYpOwotICB9Ci0KLSAgZG8gewotICAgIGRhdGEgPSBnc3RfYWRhcHRlcl90YWtlIChhZGFwdGVyLCBwYXJhbXMtPnJlYWRfc2l6ZSk7Ci0gICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgIGJyZWFrOwotICAgIGdfZnJlZSAoZGF0YSk7Ci0gIH0gd2hpbGUgKFRSVUUpOwotCi0gIGdfb2JqZWN0X3VucmVmIChhZGFwdGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLXJ1bl90ZXN0X3Rha2VfYnVmZmVyIChzdHJ1Y3QgVGVzdFBhcmFtcyAqcGFyYW1zKQotewotICAvKiBDcmVhdGUgYW4gYWRhcHRlciBhbmQgZmVlZCBpdCBkYXRhIG9mIGZpeGVkIHNpemUsIHRoZW4gcmV0cmlldmUgaXQgaW4gCi0gICAqIGEgZGlmZmVyZW50IHNpemUKLSAgICovCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBpbnQgaTsKLSAgZ2ludCBudGltZXMgPSBwYXJhbXMtPnRvdF9zaXplIC8gcGFyYW1zLT53cml0ZV9zaXplOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudGltZXM7IGkrKykgewotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAocGFyYW1zLT53cml0ZV9zaXplKTsKLQotICAgIGdzdF9idWZmZXJfbWVtc2V0IChidWYsIDAsIDAsIHBhcmFtcy0+d3JpdGVfc2l6ZSk7Ci0KLSAgICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBidWYpOwotICB9Ci0KLSAgZG8gewotICAgIGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhZGFwdGVyLCBwYXJhbXMtPnJlYWRfc2l6ZSk7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKQotICAgICAgYnJlYWs7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfSB3aGlsZSAoVFJVRSk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotcnVuX3Rlc3RzIChzdHJ1Y3QgVGVzdFBhcmFtcyAqcGFyYW1zKQotewotICBzdHJ1Y3QgdG1zIHRpbWVfZGF0YTsKLSAgZ2RvdWJsZSBzdGFydDsKLSAgZ2RvdWJsZSBkdXI7Ci0KLSAgZ19wcmludCAoIlJ1bm5pbmcgb24gJWQgYnl0ZXMsIHdyaXRpbmcgJWQgYnl0ZXMvYnVmLCByZWFkaW5nICVkIGJ5dGVzL2J1ZlxuIiwKLSAgICAgIHBhcmFtcy0+dG90X3NpemUsIHBhcmFtcy0+d3JpdGVfc2l6ZSwgcGFyYW1zLT5yZWFkX3NpemUpOwotCi0gIHN0YXJ0ID0gMC4wOwotICBydW5fdGVzdF90YWtlIChwYXJhbXMpOwotCi0gIHRpbWVzICgmdGltZV9kYXRhKTsKLSAgZHVyID0gKGdkb3VibGUpICh0aW1lX2RhdGEudG1zX3V0aW1lICsgdGltZV9kYXRhLnRtc19zdGltZSkgLyB0aWNrc19wZXJfc2VjOwotICBnX3ByaW50ICgiVGltZSBmb3IgdGFrZSB0ZXN0OiAlZyBzZWNzXG4iLCBkdXIgLSBzdGFydCk7Ci0KLSAgc3RhcnQgPSBkdXI7Ci0gIHJ1bl90ZXN0X3Rha2VfYnVmZmVyIChwYXJhbXMpOwotCi0gIHRpbWVzICgmdGltZV9kYXRhKTsKLSAgZHVyID0gKGdkb3VibGUpICh0aW1lX2RhdGEudG1zX3V0aW1lICsgdGltZV9kYXRhLnRtc19zdGltZSkgLyB0aWNrc19wZXJfc2VjOwotICBnX3ByaW50ICgiVGltZSBmb3IgVGFrZUJ1ZmZlciB0ZXN0OiAlZyBzZWNzXG4iLCBkdXIgLSBzdGFydCk7Ci0KLSAgZ19wcmludCAoIlxuIik7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBnaW50IGk7Ci0KLSAgdGlja3NfcGVyX3NlYyA9IHN5c2NvbmYgKF9TQ19DTEtfVENLKTsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbl90ZXN0czsgaSsrKQotICAgIHJ1bl90ZXN0cyAocGFyYW1fc2V0cyArIGkpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZS5hbSBiL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NjQxNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLW5vaW5zdF9QUk9HUkFNUyA9IGF1ZGlvLWV4YW1wbGUgY29udHJvbC1zb3VyY2VzIHRleHQtY29sb3ItZXhhbXBsZSBhYnNvbHV0ZS1leGFtcGxlCi0KLUFNX0NGTEFHUyAgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAtSSQodG9wX2J1aWxkZGlyKS9saWJzCi0KLUxEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR1NUX09CSl9MSUJTKQotCi1pZiBIQVZFX0dUSwotbm9pbnN0X1BST0dSQU1TICs9IGNvbnRyb2xsZXItZ3JhcGgKLQotY29udHJvbGxlcl9ncmFwaF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAkKEdUS19DRkxBR1MpCi1jb250cm9sbGVyX2dyYXBoX0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR1NUX09CSl9MSUJTKSAkKEdUS19MSUJTKQotCi1lbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWU1ZjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IGF1ZGlvLWV4YW1wbGUkKEVYRUVYVCkgY29udHJvbC1zb3VyY2VzJChFWEVFWFQpIFwKLQl0ZXh0LWNvbG9yLWV4YW1wbGUkKEVYRUVYVCkgYWJzb2x1dGUtZXhhbXBsZSQoRVhFRVhUKSBcCi0JJChhbV9fRVhFRVhUXzEpCi1ASEFWRV9HVEtfVFJVRUBhbV9fYXBwZW5kXzEgPSBjb250cm9sbGVyLWdyYXBoCi1zdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1ASEFWRV9HVEtfVFJVRUBhbV9fRVhFRVhUXzEgPSBjb250cm9sbGVyLWdyYXBoJChFWEVFWFQpCi1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYWJzb2x1dGVfZXhhbXBsZV9TT1VSQ0VTID0gYWJzb2x1dGUtZXhhbXBsZS5jCi1hYnNvbHV0ZV9leGFtcGxlX09CSkVDVFMgPSBhYnNvbHV0ZS1leGFtcGxlLiQoT0JKRVhUKQotYWJzb2x1dGVfZXhhbXBsZV9MREFERCA9ICQoTERBREQpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotYWJzb2x1dGVfZXhhbXBsZV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWF1ZGlvX2V4YW1wbGVfU09VUkNFUyA9IGF1ZGlvLWV4YW1wbGUuYwotYXVkaW9fZXhhbXBsZV9PQkpFQ1RTID0gYXVkaW8tZXhhbXBsZS4kKE9CSkVYVCkKLWF1ZGlvX2V4YW1wbGVfTERBREQgPSAkKExEQUREKQotYXVkaW9fZXhhbXBsZV9ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWNvbnRyb2xfc291cmNlc19TT1VSQ0VTID0gY29udHJvbC1zb3VyY2VzLmMKLWNvbnRyb2xfc291cmNlc19PQkpFQ1RTID0gY29udHJvbC1zb3VyY2VzLiQoT0JKRVhUKQotY29udHJvbF9zb3VyY2VzX0xEQUREID0gJChMREFERCkKLWNvbnRyb2xfc291cmNlc19ERVBFTkRFTkNJRVMgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvY29udHJvbGxlci9saWJnc3Rjb250cm9sbGVyLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWNvbnRyb2xsZXJfZ3JhcGhfU09VUkNFUyA9IGNvbnRyb2xsZXItZ3JhcGguYwotY29udHJvbGxlcl9ncmFwaF9PQkpFQ1RTID0gIFwKLQljb250cm9sbGVyX2dyYXBoLWNvbnRyb2xsZXItZ3JhcGguJChPQkpFWFQpCi1ASEFWRV9HVEtfVFJVRUBjb250cm9sbGVyX2dyYXBoX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotQEhBVkVfR1RLX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWNvbnRyb2xsZXJfZ3JhcGhfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGNvbnRyb2xsZXJfZ3JhcGhfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotdGV4dF9jb2xvcl9leGFtcGxlX1NPVVJDRVMgPSB0ZXh0LWNvbG9yLWV4YW1wbGUuYwotdGV4dF9jb2xvcl9leGFtcGxlX09CSkVDVFMgPSB0ZXh0LWNvbG9yLWV4YW1wbGUuJChPQkpFWFQpCi10ZXh0X2NvbG9yX2V4YW1wbGVfTERBREQgPSAkKExEQUREKQotdGV4dF9jb2xvcl9leGFtcGxlX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9IGFic29sdXRlLWV4YW1wbGUuYyBhdWRpby1leGFtcGxlLmMgY29udHJvbC1zb3VyY2VzLmMgXAotCWNvbnRyb2xsZXItZ3JhcGguYyB0ZXh0LWNvbG9yLWV4YW1wbGUuYwotRElTVF9TT1VSQ0VTID0gYWJzb2x1dGUtZXhhbXBsZS5jIGF1ZGlvLWV4YW1wbGUuYyBjb250cm9sLXNvdXJjZXMuYyBcCi0JY29udHJvbGxlci1ncmFwaC5jIHRleHQtY29sb3ItZXhhbXBsZS5jCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLUFNX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpIC1JJCh0b3BfYnVpbGRkaXIpL2xpYnMKLUxEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9jb250cm9sbGVyL2xpYmdzdGNvbnRyb2xsZXItQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR1NUX09CSl9MSUJTKQotCi1ASEFWRV9HVEtfVFJVRUBjb250cm9sbGVyX2dyYXBoX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoR1RLX0NGTEFHUykKLUBIQVZFX0dUS19UUlVFQGNvbnRyb2xsZXJfZ3JhcGhfTERBREQgPSBcCi1ASEFWRV9HVEtfVFJVRUAJJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2NvbnRyb2xsZXIvbGliZ3N0Y29udHJvbGxlci1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi1ASEFWRV9HVEtfVFJVRUAJJChHU1RfT0JKX0xJQlMpICQoR1RLX0xJQlMpCi0KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1hYnNvbHV0ZS1leGFtcGxlJChFWEVFWFQpOiAkKGFic29sdXRlX2V4YW1wbGVfT0JKRUNUUykgJChhYnNvbHV0ZV9leGFtcGxlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hYnNvbHV0ZV9leGFtcGxlX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGFic29sdXRlLWV4YW1wbGUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoYWJzb2x1dGVfZXhhbXBsZV9PQkpFQ1RTKSAkKGFic29sdXRlX2V4YW1wbGVfTERBREQpICQoTElCUykKLQotYXVkaW8tZXhhbXBsZSQoRVhFRVhUKTogJChhdWRpb19leGFtcGxlX09CSkVDVFMpICQoYXVkaW9fZXhhbXBsZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfYXVkaW9fZXhhbXBsZV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBhdWRpby1leGFtcGxlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGF1ZGlvX2V4YW1wbGVfT0JKRUNUUykgJChhdWRpb19leGFtcGxlX0xEQUREKSAkKExJQlMpCi0KLWNvbnRyb2wtc291cmNlcyQoRVhFRVhUKTogJChjb250cm9sX3NvdXJjZXNfT0JKRUNUUykgJChjb250cm9sX3NvdXJjZXNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NvbnRyb2xfc291cmNlc19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBjb250cm9sLXNvdXJjZXMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoY29udHJvbF9zb3VyY2VzX09CSkVDVFMpICQoY29udHJvbF9zb3VyY2VzX0xEQUREKSAkKExJQlMpCi0KLWNvbnRyb2xsZXItZ3JhcGgkKEVYRUVYVCk6ICQoY29udHJvbGxlcl9ncmFwaF9PQkpFQ1RTKSAkKGNvbnRyb2xsZXJfZ3JhcGhfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NvbnRyb2xsZXJfZ3JhcGhfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgY29udHJvbGxlci1ncmFwaCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoY29udHJvbGxlcl9ncmFwaF9MSU5LKSAkKGNvbnRyb2xsZXJfZ3JhcGhfT0JKRUNUUykgJChjb250cm9sbGVyX2dyYXBoX0xEQUREKSAkKExJQlMpCi0KLXRleHQtY29sb3ItZXhhbXBsZSQoRVhFRVhUKTogJCh0ZXh0X2NvbG9yX2V4YW1wbGVfT0JKRUNUUykgJCh0ZXh0X2NvbG9yX2V4YW1wbGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3RleHRfY29sb3JfZXhhbXBsZV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiB0ZXh0LWNvbG9yLWV4YW1wbGUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQodGV4dF9jb2xvcl9leGFtcGxlX09CSkVDVFMpICQodGV4dF9jb2xvcl9leGFtcGxlX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hYnNvbHV0ZS1leGFtcGxlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdWRpby1leGFtcGxlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jb250cm9sLXNvdXJjZXMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvbnRyb2xsZXJfZ3JhcGgtY29udHJvbGxlci1ncmFwaC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGV4dC1jb2xvci1leGFtcGxlLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWNvbnRyb2xsZXJfZ3JhcGgtY29udHJvbGxlci1ncmFwaC5vOiBjb250cm9sbGVyLWdyYXBoLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb250cm9sbGVyX2dyYXBoX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjb250cm9sbGVyX2dyYXBoLWNvbnRyb2xsZXItZ3JhcGgubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY29udHJvbGxlcl9ncmFwaC1jb250cm9sbGVyLWdyYXBoLlRwbyAtYyAtbyBjb250cm9sbGVyX2dyYXBoLWNvbnRyb2xsZXItZ3JhcGgubyBgdGVzdCAtZiAnY29udHJvbGxlci1ncmFwaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb250cm9sbGVyLWdyYXBoLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NvbnRyb2xsZXJfZ3JhcGgtY29udHJvbGxlci1ncmFwaC5UcG8gJChERVBESVIpL2NvbnRyb2xsZXJfZ3JhcGgtY29udHJvbGxlci1ncmFwaC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvbnRyb2xsZXItZ3JhcGguYycgb2JqZWN0PSdjb250cm9sbGVyX2dyYXBoLWNvbnRyb2xsZXItZ3JhcGgubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY29udHJvbGxlcl9ncmFwaF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjb250cm9sbGVyX2dyYXBoLWNvbnRyb2xsZXItZ3JhcGgubyBgdGVzdCAtZiAnY29udHJvbGxlci1ncmFwaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb250cm9sbGVyLWdyYXBoLmMKLQotY29udHJvbGxlcl9ncmFwaC1jb250cm9sbGVyLWdyYXBoLm9iajogY29udHJvbGxlci1ncmFwaC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY29udHJvbGxlcl9ncmFwaF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY29udHJvbGxlcl9ncmFwaC1jb250cm9sbGVyLWdyYXBoLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY29udHJvbGxlcl9ncmFwaC1jb250cm9sbGVyLWdyYXBoLlRwbyAtYyAtbyBjb250cm9sbGVyX2dyYXBoLWNvbnRyb2xsZXItZ3JhcGgub2JqIGBpZiB0ZXN0IC1mICdjb250cm9sbGVyLWdyYXBoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY29udHJvbGxlci1ncmFwaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jb250cm9sbGVyLWdyYXBoLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NvbnRyb2xsZXJfZ3JhcGgtY29udHJvbGxlci1ncmFwaC5UcG8gJChERVBESVIpL2NvbnRyb2xsZXJfZ3JhcGgtY29udHJvbGxlci1ncmFwaC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvbnRyb2xsZXItZ3JhcGguYycgb2JqZWN0PSdjb250cm9sbGVyX2dyYXBoLWNvbnRyb2xsZXItZ3JhcGgub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb250cm9sbGVyX2dyYXBoX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNvbnRyb2xsZXJfZ3JhcGgtY29udHJvbGxlci1ncmFwaC5vYmogYGlmIHRlc3QgLWYgJ2NvbnRyb2xsZXItZ3JhcGguYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjb250cm9sbGVyLWdyYXBoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NvbnRyb2xsZXItZ3JhcGguYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2Fic29sdXRlLWV4YW1wbGUuYyBiL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYWJzb2x1dGUtZXhhbXBsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmNlN2U3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvYWJzb2x1dGUtZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIHRleHQtY29sb3ItZXhhbXBsZS5jCi0gKgotICogQnVpbGRzIGEgcGlwZWxpbmUgd2l0aCBbdmlkZW90ZXN0c3JjICEgdGV4dG92ZXJsYXkgISB4aW1hZ2VzaW5rXSBhbmQKLSAqIG1vdmVzIHRleHQKLSAqCi0gKiBOZWVkcyBnc3QtcGx1Z2lucy1iYXNlIGluc3RhbGxlZC4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmg+Ci0KLWdpbnQKLW1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKLXsKLSAgZ2ludCByZXMgPSAxOwotICBHc3RFbGVtZW50ICpzcmMsICp0ZXh0LCAqc2luazsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja1JldHVybiB3YWl0X3JldDsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBidWlsZCBwaXBlbGluZSAqLwotICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgY2xvY2sgPSBnc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrIChHU1RfUElQRUxJTkUgKGJpbikpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCBOVUxMKTsKLSAgaWYgKCFzcmMpIHsKLSAgICBHU1RfV0FSTklORyAoIm5lZWQgdmlkZW90ZXN0c3JjIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSIpOwotICAgIGdvdG8gRXJyb3I7Ci0gIH0KLSAgZ19vYmplY3Rfc2V0IChzcmMsICJwYXR0ZXJuIiwgLyogcmVkICovIDQsCi0gICAgICBOVUxMKTsKLSAgdGV4dCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRleHRvdmVybGF5IiwgTlVMTCk7Ci0gIGlmICghdGV4dCkgewotICAgIEdTVF9XQVJOSU5HICgibmVlZCB0ZXh0b3ZlcmxheSBmcm9tIGdzdC1wbHVnaW5zLWJhc2UiKTsKLSAgICBnb3RvIEVycm9yOwotICB9Ci0gIGdfb2JqZWN0X3NldCAodGV4dCwKLSAgICAgICJ0ZXh0IiwgIkdTdHJlYW1lciByb2NrcyEiLAotICAgICAgImZvbnQtZGVzYyIsICJTYW5zLCAzMCIsCi0gICAgICAieHBvcyIsIDAuMCwgIndyYXAtbW9kZSIsIC0xLCAiaGFsaWdubWVudCIsIC8qIHBvc2l0aW9uICovIDQsCi0gICAgICAidmFsaWdubWVudCIsIC8qIHBvc2l0aW9uICovIDMsCi0gICAgICBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInhpbWFnZXNpbmsiLCBOVUxMKTsKLSAgaWYgKCFzaW5rKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJuZWVkIHhpbWFnZXNpbmsgZnJvbSBnc3QtcGx1Z2lucy1iYXNlIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYywgdGV4dCwgc2luaywgTlVMTCk7Ci0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIHRleHQsIHNpbmssIE5VTEwpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJjYW4ndCBsaW5rIGVsZW1lbnRzIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotCi0gIC8qIHNldHVwIGNvbnRyb2wgc291cmNlcyAqLwotICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUX0NBU1QgKHRleHQpLAotICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3X2Fic29sdXRlIChHU1RfT0JKRUNUX0NBU1QgKHRleHQpLCAiZGVsdGF4IiwKLSAgICAgICAgICBjcykpOwotCi0gIGdfb2JqZWN0X3NldCAoY3MsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIE5VTEwpOwotCi0gIC8vIEF0IHNlY29uZCAwIHRoZSB0ZXh0IHdpbGwgYmUgYXQgMHB4IG9uIHRoZSB4LWF4aXMKLSAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAoKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzLCAwLCAwKTsKLSAgLy8gQXQgc2Vjb25kIDUgdGhlIHRleHQgd2lsbCBiZSBhdCAxMDAwcHggb24gdGhlIHgtYXhpcwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICgoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKikgY3MsCi0gICAgICBHU1RfU0VDT05EICogNSwgMTAwMCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotCi0gIC8qIHJ1biBmb3IgMTAgc2Vjb25kcyAqLwotICBjbG9ja19pZCA9Ci0gICAgICBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywKLSAgICAgIGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spICsgKDEwICogR1NUX1NFQ09ORCkpOwotCi0gIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpKSB7Ci0gICAgaWYgKCh3YWl0X3JldCA9IGdzdF9jbG9ja19pZF93YWl0IChjbG9ja19pZCwgTlVMTCkpICE9IEdTVF9DTE9DS19PSykgewotICAgICAgR1NUX1dBUk5JTkcgKCJjbG9ja19pZF93YWl0IHJldHVybmVkOiAlZCIsIHdhaXRfcmV0KTsKLSAgICB9Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja19pZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChjbG9jaykpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoYmluKSk7Ci0gIHJlcyA9IDA7Ci1FcnJvcjoKLSAgcmV0dXJuIChyZXMpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9hdWRpby1leGFtcGxlLmMgYi90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3NzMxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2F1ZGlvLWV4YW1wbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBhdWRpby1leGFtcGxlLmMKLSAqCi0gKiBCdWlsZHMgYSBwaXBlbGluZSB3aXRoIFsgYXVkaW90ZXN0c291cmNlICEgYXV0b2F1ZGlvc2luayBdIGFuZCBzd2VlcHMKLSAqIGZyZXF1ZW5jeSBhbmQgdm9sdW1lLgotICoKLSAqIE5lZWRzIGdzdC1wbHVnaW5zLWJhc2UgKyBnc3QtcGx1Z2lucy1nb29kIGluc3RhbGxlZC4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0ZGlyZWN0Y29udHJvbGJpbmRpbmcuaD4KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQotewotICBnaW50IHJlcyA9IDE7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNpbms7Ci0gIEdzdEVsZW1lbnQgKmJpbjsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3MxLCAqY3MyOwotICBHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqdHZjczsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja0lEIGNsb2NrX2lkOwotICBHc3RDbG9ja1JldHVybiB3YWl0X3JldDsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBidWlsZCBwaXBlbGluZSAqLwotICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgY2xvY2sgPSBnc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrIChHU1RfUElQRUxJTkUgKGJpbikpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb3Rlc3RzcmMiLCBOVUxMKTsKLSAgaWYgKCFzcmMpIHsKLSAgICBHU1RfV0FSTklORyAoIm5lZWQgYXVkaW90ZXN0c3JjIGZyb20gZ3N0LXBsdWdpbnMtYmFzZSIpOwotICAgIGdvdG8gRXJyb3I7Ci0gIH0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG9hdWRpb3NpbmsiLCBOVUxMKTsKLSAgaWYgKCFzaW5rKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJuZWVkIGF1dG9hdWRpb3NpbmsgZnJvbSBnc3QtcGx1Z2lucy1nb29kIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYywgc2luaywgTlVMTCk7Ci0gIGlmICghZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSkgewotICAgIEdTVF9XQVJOSU5HICgiY2FuJ3QgbGluayBlbGVtZW50cyIpOwotICAgIGdvdG8gRXJyb3I7Ci0gIH0KLQotICAvKiBzZXR1cCBjb250cm9sIHNvdXJjZXMgKi8KLSAgY3MxID0gZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICBjczIgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0KLSAgZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUX0NBU1QgKHNyYyksCi0gICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKEdTVF9PQkpFQ1RfQ0FTVCAoc3JjKSwgInZvbHVtZSIsIGNzMSkpOwotICBnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKEdTVF9PQkpFQ1RfQ0FTVCAoc3JjKSwKLSAgICAgIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoR1NUX09CSkVDVF9DQVNUIChzcmMpLCAiZnJlcSIsIGNzMikpOwotCi0gIC8qIHNldCBpbnRlcnBvbGF0aW9uIG1vZGUgKi8KLQotICBnX29iamVjdF9zZXQgKGNzMSwgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoY3MyLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSLCBOVUxMKTsKLQotICAvKiBzZXQgY29udHJvbCB2YWx1ZXMgKi8KLSAgdHZjcyA9IChHc3RUaW1lZFZhbHVlQ29udHJvbFNvdXJjZSAqKSBjczE7Ci0gIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIDAgKiBHU1RfU0VDT05ELCAwLjApOwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCA1ICogR1NUX1NFQ09ORCwgMS4wKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjczEpOwotCi0gIHR2Y3MgPSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKikgY3MyOwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAwICogR1NUX1NFQ09ORCwgMjIwLjAgLyAyMDAwMC4wKTsKLSAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMyAqIEdTVF9TRUNPTkQsIDM1MjAuMCAvIDIwMDAwLjApOwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCA2ICogR1NUX1NFQ09ORCwgNDQwLjAgLyAyMDAwMC4wKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjczIpOwotCi0gIC8qIHJ1biBmb3IgNyBzZWNvbmRzICovCi0gIGNsb2NrX2lkID0KLSAgICAgIGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLAotICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykgKyAoNyAqIEdTVF9TRUNPTkQpKTsKLQotICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKSkgewotICAgIGlmICgod2FpdF9yZXQgPSBnc3RfY2xvY2tfaWRfd2FpdCAoY2xvY2tfaWQsIE5VTEwpKSAhPSBHU1RfQ0xPQ0tfT0spIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiY2xvY2tfaWRfd2FpdCByZXR1cm5lZDogJWQiLCB3YWl0X3JldCk7Ci0gICAgfQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIH0KLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci0gIHJlcyA9IDA7Ci1FcnJvcjoKLSAgcmV0dXJuIChyZXMpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9jb250cm9sLXNvdXJjZXMuYyBiL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvY29udHJvbC1zb3VyY2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMjI5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9jb250cm9sLXNvdXJjZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDQ1MCArMCwwIEBACi0vKiAKLSAqIGNvbnRyb2wtc291cmNlcy5jCi0gKgotICogR2VuZXJhdGVzIGEgZGF0YWZpbGUgZm9yIHZhcmlvdXMgY29udHJvbCBzb3VyY2VzLgotICoKLSAqIE5lZWRzIGdudXBsb3QgZm9yIHBsb3R0aW5nLgotICogcGxvdCAiY3RybF9pMS5kYXQiIHVzaW5nIDE6MiB3aXRoIHBvaW50cyB0aXRsZSAnbm9uZScsICIiIHVzaW5nIDE6MyB3aXRoIHBvaW50cyB0aXRsZSAnbGluZWFyJywgIiIgdXNpbmcgMTo0IHdpdGggcG9pbnRzIHRpdGxlICdjdWJpYycsICJjdHJsX2kyLmRhdCIgdXNpbmcgMToyIHdpdGggbGluZXMgdGl0bGUgJ25vbmUnLCAiIiB1c2luZyAxOjMgd2l0aCBsaW5lcyB0aXRsZSAnbGluZWFyJywgIiIgdXNpbmcgMTo0IHdpdGggbGluZXMgdGl0bGUgJ2N1YmljJwotICogcGxvdCAiY3RybF9sMS5kYXQiIHVzaW5nIDE6MiB3aXRoIHBvaW50cyB0aXRsZSAnc2luZScsICIiIHVzaW5nIDE6MyB3aXRoIHBvaW50cyB0aXRsZSAnc3F1YXJlJywgIiIgdXNpbmcgMTo0IHdpdGggcG9pbnRzIHRpdGxlICdzYXcnLCAiIiB1c2luZyAxOjUgd2l0aCBwb2ludHMgdGl0bGUgJ3JldnNhdycsICIiIHVzaW5nIDE6NiB3aXRoIHBvaW50cyB0aXRsZSAndHJpYW5nbGUnLCAiY3RybF9sMi5kYXQiIHVzaW5nIDE6MiB3aXRoIGxpbmVzIHRpdGxlICdzaW5lJywgIiIgdXNpbmcgMTozIHdpdGggbGluZXMgdGl0bGUgJ3NxdWFyZScsICIiIHVzaW5nIDE6NCB3aXRoIGxpbmVzIHRpdGxlICdzYXcnLCAiIiB1c2luZyAxOjUgd2l0aCBsaW5lcyB0aXRsZSAncmV2c2F3JywgIiIgdXNpbmcgMTo2IHdpdGggbGluZXMgdGl0bGUgJ3RyaWFuZ2xlJwotICogcGxvdCAiY3RybF9jbDEuZGF0IiB1c2luZyAxOjIgd2l0aCBwb2ludHMgdGl0bGUgJ3NpbmUnLCAiY3RybF9jbDIuZGF0IiB1c2luZyAxOjIgd2l0aCBsaW5lcyB0aXRsZSAnc2luZScKLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oPgotCi0vKiBsb2NhbCB0ZXN0IGVsZW1lbnQgKi8KLQotZW51bQotewotICBQUk9QX0lOVCA9IDEsCi0gIFBST1BfRkxPQVQsCi0gIFBST1BfRE9VQkxFLAotICBQUk9QX0JPT0xFQU4sCi0gIFBST1BfQ09VTlQKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfVEVTVF9PQkogICAgICAgICAgICAoZ3N0X3Rlc3Rfb2JqX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfVEVTVF9PQkoob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1RFU1RfT0JKLCBHc3RUZXN0T2JqKSkKLSNkZWZpbmUgR1NUX1RFU1RfT0JKX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1RFU1RfT0JKLCBHc3RUZXN0T2JqQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVEVTVF9PQkoob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1RFU1RfT0JKKSkKLSNkZWZpbmUgR1NUX0lTX1RFU1RfT0JKX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1RFU1RfT0JKKSkKLSNkZWZpbmUgR1NUX1RFU1RfT0JKX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX1RFU1RfT0JKLCBHc3RUZXN0T2JqQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VGVzdE9iaiBHc3RUZXN0T2JqOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RPYmpDbGFzcyBHc3RUZXN0T2JqQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0VGVzdE9iagotewotICBHc3RFbGVtZW50IHBhcmVudDsKLSAgZ2ludCB2YWxfaW50OwotICBnZmxvYXQgdmFsX2Zsb2F0OwotICBnZG91YmxlIHZhbF9kb3VibGU7Ci0gIGdib29sZWFuIHZhbF9ib29sZWFuOwotfTsKLXN0cnVjdCBfR3N0VGVzdE9iakNsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1zdGF0aWMgR1R5cGUgZ3N0X3Rlc3Rfb2JqX2dldF90eXBlICh2b2lkKTsKLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X29ial9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcGVydHlfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFRlc3RPYmogKnNlbGYgPSBHU1RfVEVTVF9PQkogKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgewotICAgIGNhc2UgUFJPUF9JTlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzZWxmLT52YWxfaW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GTE9BVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgc2VsZi0+dmFsX2Zsb2F0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ET1VCTEU6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBzZWxmLT52YWxfZG91YmxlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CT09MRUFOOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNlbGYtPnZhbF9ib29sZWFuKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9vYmpfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BlcnR5X2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RUZXN0T2JqICpzZWxmID0gR1NUX1RFU1RfT0JKIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKLSAgICBjYXNlIFBST1BfSU5UOgotICAgICAgc2VsZi0+dmFsX2ludCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHICgidGVzdCB2YWx1ZSBpbnQ9JWQiLCBzZWxmLT52YWxfaW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GTE9BVDoKLSAgICAgIHNlbGYtPnZhbF9mbG9hdCA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUcgKCJ0ZXN0IHZhbHVlIGZsb2F0PSVmIiwgc2VsZi0+dmFsX2Zsb2F0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ET1VCTEU6Ci0gICAgICBzZWxmLT52YWxfZG91YmxlID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUcgKCJ0ZXN0IHZhbHVlIGRvdWJsZT0lZiIsIHNlbGYtPnZhbF9kb3VibGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPT0xFQU46Ci0gICAgICBzZWxmLT52YWxfYm9vbGVhbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoInRlc3QgdmFsdWUgYm9vbGVhbj0lZCIsIHNlbGYtPnZhbF9ib29sZWFuKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGVzdF9vYmpfY2xhc3NfaW5pdCAoR3N0VGVzdE9iakNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJpbnQiLAotICAgICAgICAgICJpbnQgcHJvcCIsCi0gICAgICAgICAgImludCBudW1iZXIgcGFyYW1ldGVyIiwKLSAgICAgICAgICAwLCAxMDAsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkxPQVQsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJmbG9hdCIsCi0gICAgICAgICAgImZsb2F0IHByb3AiLAotICAgICAgICAgICJmbG9hdCBudW1iZXIgcGFyYW1ldGVyIiwKLSAgICAgICAgICAwLjAsIDEwMC4wLCAwLjAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRE9VQkxFLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImRvdWJsZSIsCi0gICAgICAgICAgImRvdWJsZSBwcm9wIiwKLSAgICAgICAgICAiZG91YmxlIG51bWJlciBwYXJhbWV0ZXIiLAotICAgICAgICAgIDAuMCwgMTAwLjAsIDAuMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CT09MRUFOLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJib29sZWFuIiwKLSAgICAgICAgICAiYm9vbGVhbiBwcm9wIiwKLSAgICAgICAgICAiYm9vbGVhbiBwYXJhbWV0ZXIiLAotICAgICAgICAgIEZBTFNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X29ial9iYXNlX2luaXQgKEdzdFRlc3RPYmpDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJ0ZXN0IG9iamVjdCBmb3IgdW5pdCB0ZXN0cyIsCi0gICAgICAiVGVzdCIsICJVc2UgaW4gdW5pdCB0ZXN0cyIsICJTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PiIpOwotfQotCi1zdGF0aWMgR1R5cGUKLWdzdF90ZXN0X29ial9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIFRFU1RfT0JKX3R5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJlRFU1RfT0JKX3R5cGUpKSB7Ci0gICAgR1R5cGUgdHlwZTsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGluZm8gPSB7Ci0gICAgICAoZ3VpbnQxNikgc2l6ZW9mIChHc3RUZXN0T2JqQ2xhc3MpLAotICAgICAgKEdCYXNlSW5pdEZ1bmMpIGdzdF90ZXN0X29ial9iYXNlX2luaXQsICAgLy8gYmFzZV9pbml0Ci0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGJhc2VfZmluYWxpemUKLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X3Rlc3Rfb2JqX2NsYXNzX2luaXQsIC8vIGNsYXNzX2luaXQKLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLy8gY2xhc3NfZmluYWxpemUKLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLy8gY2xhc3NfZGF0YQotICAgICAgKGd1aW50MTYpIHNpemVvZiAoR3N0VGVzdE9iaiksCi0gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5fcHJlYWxsb2NzCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlX2luaXQKLSAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVfdGFibGUKLSAgICB9OwotICAgIHR5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9FTEVNRU5ULCAiR3N0VGVzdE9iaiIsICZpbmZvLCAwKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJlRFU1RfT0JKX3R5cGUsIHR5cGUpOwotICB9Ci0gIHJldHVybiBURVNUX09CSl90eXBlOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9pbnRlcnBvbGF0aW9uICh2b2lkKQotewotICBHc3RPYmplY3QgKmU7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzOwotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgZ2ludCB0LCBpMSwgaTIsIGkzOwotICBHVmFsdWUgKnYxLCAqdjIsICp2MzsKLSAgZ2ludCBuX3ZhbHVlczsKLSAgRklMRSAqZjsKLQotICBlID0gKEdzdE9iamVjdCAqKSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgY3MgPSBnc3RfaW50ZXJwb2xhdGlvbl9jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIHR2Y3MgPSAoR3N0VGltZWRWYWx1ZUNvbnRyb2xTb3VyY2UgKikgY3M7Ci0KLSAgZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChlLCBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKGUsICJpbnQiLAotICAgICAgICAgIGNzKSk7Ci0KLSAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMCAqIEdTVF9TRUNPTkQsIDAuMCk7Ci0gIGdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXQgKHR2Y3MsIDEwICogR1NUX1NFQ09ORCwgMS4wKTsKLSAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAodHZjcywgMjAgKiBHU1RfU0VDT05ELCAwLjUpOwotICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCAzMCAqIEdTVF9TRUNPTkQsIDAuMik7Ci0KLSAgLyogdGVzdCBzaW5nbGUgdmFsdWVzICovCi0gIGlmICghKGYgPSBmb3BlbiAoImN0cmxfaTEuZGF0IiwgInciKSkpCi0gICAgZXhpdCAoLTEpOwotICBmcHJpbnRmIChmLCAiIyBUaW1lIE5vbmUgTGluZWFyIEN1YmljXG4iKTsKLQotICBmb3IgKHQgPSAwOyB0IDwgNDA7IHQrKykgewotICAgIGdfb2JqZWN0X3NldCAoY3MsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9OT05FLCBOVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChlLCB0ICogR1NUX1NFQ09ORCk7Ci0gICAgaTEgPSBHU1RfVEVTVF9PQkogKGUpLT52YWxfaW50OwotCi0gICAgZ19vYmplY3Rfc2V0IChjcywgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgTlVMTCk7Ci0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoZSwgdCAqIEdTVF9TRUNPTkQpOwotICAgIGkyID0gR1NUX1RFU1RfT0JKIChlKS0+dmFsX2ludDsKLQotICAgIGdfb2JqZWN0X3NldCAoY3MsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQywgTlVMTCk7Ci0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoZSwgdCAqIEdTVF9TRUNPTkQpOwotICAgIGkzID0gR1NUX1RFU1RfT0JKIChlKS0+dmFsX2ludDsKLQotICAgIGZwcmludGYgKGYsICIlNC4xZiAlZCAlZCAlZFxuIiwgKGdmbG9hdCkgdCwgaTEsIGkyLCBpMyk7Ci0gIH0KLQotICBmY2xvc2UgKGYpOwotCi0gIC8qIHRlc3QgdmFsdWUgYXJyYXlzICovCi0gIGlmICghKGYgPSBmb3BlbiAoImN0cmxfaTIuZGF0IiwgInciKSkpCi0gICAgZXhpdCAoLTEpOwotICBmcHJpbnRmIChmLCAiIyBUaW1lIE5vbmUgTGluZWFyIEN1YmljXG4iKTsKLSAgbl92YWx1ZXMgPSA0MCAqIDEwOwotCi0gIGdfb2JqZWN0X3NldCAoY3MsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9OT05FLCBOVUxMKTsKLSAgdjEgPSBnX25ldzAgKEdWYWx1ZSwgbl92YWx1ZXMpOwotICBnc3Rfb2JqZWN0X2dldF9nX3ZhbHVlX2FycmF5IChlLCAiaW50IiwgMCwgR1NUX1NFQ09ORCAvIDEwLCBuX3ZhbHVlcywgdjEpOwotCi0gIGdfb2JqZWN0X3NldCAoY3MsICJtb2RlIiwgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIE5VTEwpOwotICB2MiA9IGdfbmV3MCAoR1ZhbHVlLCBuX3ZhbHVlcyk7Ci0gIGdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkgKGUsICJpbnQiLCAwLCBHU1RfU0VDT05EIC8gMTAsIG5fdmFsdWVzLCB2Mik7Ci0KLSAgZ19vYmplY3Rfc2V0IChjcywgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0NVQklDLCBOVUxMKTsKLSAgdjMgPSBnX25ldzAgKEdWYWx1ZSwgbl92YWx1ZXMpOwotICBnc3Rfb2JqZWN0X2dldF9nX3ZhbHVlX2FycmF5IChlLCAiaW50IiwgMCwgR1NUX1NFQ09ORCAvIDEwLCBuX3ZhbHVlcywgdjMpOwotCi0gIGZvciAodCA9IDA7IHQgPCBuX3ZhbHVlczsgdCsrKSB7Ci0gICAgaTEgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2MVt0XSk7Ci0gICAgaTIgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2Mlt0XSk7Ci0gICAgaTMgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2M1t0XSk7Ci0gICAgZnByaW50ZiAoZiwgIiU0LjFmICVkICVkICVkXG4iLCAoZ2Zsb2F0KSB0IC8gMTAuMCwgaTEsIGkyLCBpMyk7Ci0gICAgZ192YWx1ZV91bnNldCAoJnYxW3RdKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdjJbdF0pOwotICAgIGdfdmFsdWVfdW5zZXQgKCZ2M1t0XSk7Ci0gIH0KLSAgZ19mcmVlICh2MSk7Ci0gIGdfZnJlZSAodjIpOwotICBnX2ZyZWUgKHYzKTsKLQotICBmY2xvc2UgKGYpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X2xmbyAodm9pZCkKLXsKLSAgR3N0T2JqZWN0ICplOwotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgZ2ludCB0LCBpMSwgaTIsIGkzLCBpNCwgaTU7Ci0gIEdWYWx1ZSAqdjEsICp2MiwgKnYzLCAqdjQsICp2NTsKLSAgZ2ludCBuX3ZhbHVlczsKLSAgRklMRSAqZjsKLQotICBlID0gKEdzdE9iamVjdCAqKSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXN0b2JqIiwgTlVMTCk7Ci0KLSAgY3MgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLQotICBnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKGUsIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoZSwgImludCIsCi0gICAgICAgICAgY3MpKTsKLQotICBnX29iamVjdF9zZXQgKGNzLAotICAgICAgImZyZXF1ZW5jeSIsIChnZG91YmxlKSAwLjA1LAotICAgICAgInRpbWVzaGlmdCIsIChHc3RDbG9ja1RpbWUpIDAsCi0gICAgICAiYW1wbGl0dWRlIiwgKGdkb3VibGUpIDAuNSwgIm9mZnNldCIsIChnZG91YmxlKSAwLjUsIE5VTEwpOwotCi0gIC8qIHRlc3Qgc2luZ2xlIHZhbHVlcyAqLwotICBpZiAoIShmID0gZm9wZW4gKCJjdHJsX2wxLmRhdCIsICJ3IikpKQotICAgIGV4aXQgKC0xKTsKLSAgZnByaW50ZiAoZiwgIiMgVGltZSBTaW5lIFNxdWFyZSBTYXcgUmV2U2F3IFRyaWFuZ2xlXG4iKTsKLQotICBmb3IgKHQgPSAwOyB0IDwgNDA7IHQrKykgewotICAgIGdfb2JqZWN0X3NldCAoY3MsICJ3YXZlZm9ybSIsIEdTVF9MRk9fV0FWRUZPUk1fU0lORSwgTlVMTCk7Ci0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoZSwgdCAqIEdTVF9TRUNPTkQpOwotICAgIGkxID0gR1NUX1RFU1RfT0JKIChlKS0+dmFsX2ludDsKLQotICAgIGdfb2JqZWN0X3NldCAoY3MsICJ3YXZlZm9ybSIsIEdTVF9MRk9fV0FWRUZPUk1fU1FVQVJFLCBOVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChlLCB0ICogR1NUX1NFQ09ORCk7Ci0gICAgaTIgPSBHU1RfVEVTVF9PQkogKGUpLT52YWxfaW50OwotCi0gICAgZ19vYmplY3Rfc2V0IChjcywgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TQVcsIE5VTEwpOwotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKGUsIHQgKiBHU1RfU0VDT05EKTsKLSAgICBpMyA9IEdTVF9URVNUX09CSiAoZSktPnZhbF9pbnQ7Ci0KLSAgICBnX29iamVjdF9zZXQgKGNzLCAid2F2ZWZvcm0iLCBHU1RfTEZPX1dBVkVGT1JNX1JFVkVSU0VfU0FXLCBOVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChlLCB0ICogR1NUX1NFQ09ORCk7Ci0gICAgaTQgPSBHU1RfVEVTVF9PQkogKGUpLT52YWxfaW50OwotCi0gICAgZ19vYmplY3Rfc2V0IChjcywgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9UUklBTkdMRSwgTlVMTCk7Ci0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoZSwgdCAqIEdTVF9TRUNPTkQpOwotICAgIGk1ID0gR1NUX1RFU1RfT0JKIChlKS0+dmFsX2ludDsKLQotICAgIGZwcmludGYgKGYsICIlNC4xZiAlZCAlZCAlZCAlZCAlZFxuIiwgKGdmbG9hdCkgdCwgaTEsIGkyLCBpMywgaTQsIGk1KTsKLSAgfQotCi0gIGZjbG9zZSAoZik7Ci0KLSAgLyogdGVzdCB2YWx1ZSBhcnJheXMgKi8KLSAgaWYgKCEoZiA9IGZvcGVuICgiY3RybF9sMi5kYXQiLCAidyIpKSkKLSAgICBleGl0ICgtMSk7Ci0gIGZwcmludGYgKGYsICIjIFRpbWUgU2luZSBTcXVhcmUgU2F3IFJldlNhdyBUcmlhbmdsZVxuIik7Ci0gIG5fdmFsdWVzID0gNDAgKiAxMDsKLQotICBnX29iamVjdF9zZXQgKGNzLCAid2F2ZWZvcm0iLCBHU1RfTEZPX1dBVkVGT1JNX1NJTkUsIE5VTEwpOwotICB2MSA9IGdfbmV3MCAoR1ZhbHVlLCBuX3ZhbHVlcyk7Ci0gIGdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkgKGUsICJpbnQiLCAwLCBHU1RfU0VDT05EIC8gMTAsIG5fdmFsdWVzLCB2MSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChjcywgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TUVVBUkUsIE5VTEwpOwotICB2MiA9IGdfbmV3MCAoR1ZhbHVlLCBuX3ZhbHVlcyk7Ci0gIGdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkgKGUsICJpbnQiLCAwLCBHU1RfU0VDT05EIC8gMTAsIG5fdmFsdWVzLCB2Mik7Ci0KLSAgZ19vYmplY3Rfc2V0IChjcywgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9TQVcsIE5VTEwpOwotICB2MyA9IGdfbmV3MCAoR1ZhbHVlLCBuX3ZhbHVlcyk7Ci0gIGdzdF9vYmplY3RfZ2V0X2dfdmFsdWVfYXJyYXkgKGUsICJpbnQiLCAwLCBHU1RfU0VDT05EIC8gMTAsIG5fdmFsdWVzLCB2Myk7Ci0KLSAgZ19vYmplY3Rfc2V0IChjcywgIndhdmVmb3JtIiwgR1NUX0xGT19XQVZFRk9STV9SRVZFUlNFX1NBVywgTlVMTCk7Ci0gIHY0ID0gZ19uZXcwIChHVmFsdWUsIG5fdmFsdWVzKTsKLSAgZ3N0X29iamVjdF9nZXRfZ192YWx1ZV9hcnJheSAoZSwgImludCIsIDAsIEdTVF9TRUNPTkQgLyAxMCwgbl92YWx1ZXMsIHY0KTsKLQotICBnX29iamVjdF9zZXQgKGNzLCAid2F2ZWZvcm0iLCBHU1RfTEZPX1dBVkVGT1JNX1RSSUFOR0xFLCBOVUxMKTsKLSAgdjUgPSBnX25ldzAgKEdWYWx1ZSwgbl92YWx1ZXMpOwotICBnc3Rfb2JqZWN0X2dldF9nX3ZhbHVlX2FycmF5IChlLCAiaW50IiwgMCwgR1NUX1NFQ09ORCAvIDEwLCBuX3ZhbHVlcywgdjUpOwotCi0gIGZvciAodCA9IDA7IHQgPCBuX3ZhbHVlczsgdCsrKSB7Ci0gICAgaTEgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2MVt0XSk7Ci0gICAgaTIgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2Mlt0XSk7Ci0gICAgaTMgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2M1t0XSk7Ci0gICAgaTQgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2NFt0XSk7Ci0gICAgaTUgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2NVt0XSk7Ci0gICAgZnByaW50ZiAoZiwgIiU0LjFmICVkICVkICVkICVkICVkXG4iLCAoZ2Zsb2F0KSB0IC8gMTAuMCwgaTEsIGkyLCBpMywgaTQsCi0gICAgICAgIGk1KTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdjFbdF0pOwotICAgIGdfdmFsdWVfdW5zZXQgKCZ2Mlt0XSk7Ci0gICAgZ192YWx1ZV91bnNldCAoJnYzW3RdKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdjRbdF0pOwotICAgIGdfdmFsdWVfdW5zZXQgKCZ2NVt0XSk7Ci0gIH0KLSAgZ19mcmVlICh2MSk7Ci0gIGdfZnJlZSAodjIpOwotICBnX2ZyZWUgKHYzKTsKLSAgZ19mcmVlICh2NCk7Ci0gIGdfZnJlZSAodjUpOwotCi0gIGZjbG9zZSAoZik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoY3MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfY2hhaW5lZF9sZm8gKHZvaWQpCi17Ci0gIEdzdE9iamVjdCAqZTsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3MxLCAqY3MyOwotICBnaW50IHQsIGkxOwotICBHVmFsdWUgKnYxOwotICBnaW50IG5fdmFsdWVzOwotICBGSUxFICpmOwotCi0gIGUgPSAoR3N0T2JqZWN0ICopIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInRlc3RvYmoiLCBOVUxMKTsKLQotICBjczEgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLQotICBnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKGUsIGdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldyAoZSwgImludCIsCi0gICAgICAgICAgY3MxKSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChjczEsCi0gICAgICAid2F2ZWZvcm0iLCBHU1RfTEZPX1dBVkVGT1JNX1NJTkUsCi0gICAgICAiZnJlcXVlbmN5IiwgKGdkb3VibGUpIDAuMDUsCi0gICAgICAidGltZXNoaWZ0IiwgKEdzdENsb2NrVGltZSkgMCwgIm9mZnNldCIsIChnZG91YmxlKSAwLjUsIE5VTEwpOwotCi0gIGNzMiA9IGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotCi0gIGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoKEdzdE9iamVjdCAqKSBjczEsCi0gICAgICBnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19uZXcgKChHc3RPYmplY3QgKikgY3MxLCAiYW1wbGl0dWRlIiwgY3MyKSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChjczIsCi0gICAgICAid2F2ZWZvcm0iLCBHU1RfTEZPX1dBVkVGT1JNX1NJTkUsCi0gICAgICAiZnJlcXVlbmN5IiwgKGdkb3VibGUpIDAuMDUsCi0gICAgICAidGltZXNoaWZ0IiwgKEdzdENsb2NrVGltZSkgMCwKLSAgICAgICJhbXBsaXR1ZGUiLCAoZ2RvdWJsZSkgMC41LCAib2Zmc2V0IiwgKGdkb3VibGUpIDAuNSwgTlVMTCk7Ci0KLSAgLyogdGVzdCBzaW5nbGUgdmFsdWVzICovCi0gIGlmICghKGYgPSBmb3BlbiAoImN0cmxfY2wxLmRhdCIsICJ3IikpKQotICAgIGV4aXQgKC0xKTsKLSAgZnByaW50ZiAoZiwgIiMgVGltZSBTaW5lXG4iKTsKLQotICBmb3IgKHQgPSAwOyB0IDwgNDA7IHQrKykgewotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKGUsIHQgKiBHU1RfU0VDT05EKTsKLSAgICBpMSA9IEdTVF9URVNUX09CSiAoZSktPnZhbF9pbnQ7Ci0KLSAgICBmcHJpbnRmIChmLCAiJTQuMWYgJWRcbiIsIChnZmxvYXQpIHQsIGkxKTsKLSAgfQotCi0gIGZjbG9zZSAoZik7Ci0KLSAgLyogdGVzdCB2YWx1ZSBhcnJheXMgKi8KLSAgaWYgKCEoZiA9IGZvcGVuICgiY3RybF9jbDIuZGF0IiwgInciKSkpCi0gICAgZXhpdCAoLTEpOwotICBmcHJpbnRmIChmLCAiIyBUaW1lIFNpbmVcbiIpOwotICBuX3ZhbHVlcyA9IDQwICogMTA7Ci0KLSAgdjEgPSBnX25ldzAgKEdWYWx1ZSwgbl92YWx1ZXMpOwotICBnc3Rfb2JqZWN0X2dldF9nX3ZhbHVlX2FycmF5IChlLCAiaW50IiwgMCwgR1NUX1NFQ09ORCAvIDEwLCBuX3ZhbHVlcywgdjEpOwotCi0gIGZvciAodCA9IDA7IHQgPCBuX3ZhbHVlczsgdCsrKSB7Ci0gICAgaTEgPSBnX3ZhbHVlX2dldF9pbnQgKCZ2MVt0XSk7Ci0gICAgZnByaW50ZiAoZiwgIiU0LjFmICVkXG4iLCAoZ2Zsb2F0KSB0IC8gMTAuMCwgaTEpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZ2MVt0XSk7Ci0gIH0KLSAgZ19mcmVlICh2MSk7Ci0KLSAgZmNsb3NlIChmKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjczEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjczIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlKTsKLX0KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQotewotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBnc3RfZWxlbWVudF9yZWdpc3RlciAoTlVMTCwgInRlc3RvYmoiLCBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9URVNUX09CSik7Ci0KLSAgdGVzdF9pbnRlcnBvbGF0aW9uICgpOwotICB0ZXN0X2xmbyAoKTsKLQotICB0ZXN0X2NoYWluZWRfbGZvICgpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci9jb250cm9sbGVyLWdyYXBoLmMgYi90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2NvbnRyb2xsZXItZ3JhcGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY5MGEyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9jb250cm9sbGVyL2NvbnRyb2xsZXItZ3JhcGguYworKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMTU+IFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogY29udHJvbGxlci1ncmFwaDogZXhwbG9yZSBpbnRlcnBvbGF0aW9uIHR5cGVzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oPgotCi1HdGtXaWRnZXQgKmdyYXBoOwotR3N0Q29udHJvbFNvdXJjZSAqY3MgPSBOVUxMOwotZ2RvdWJsZSB5dmFsW10gPSB7IDAuMCwgMC4yLCAwLjgsIDAuMSwgMC4xLCAxLjAgfTsKLQotc3RhdGljIGdib29sZWFuCi1vbl9ncmFwaF9kcmF3IChHdGtXaWRnZXQgKiB3aWRnZXQsIGNhaXJvX3QgKiBjciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHdGtTdHlsZUNvbnRleHQgKnN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGVfY29udGV4dCAod2lkZ2V0KTsKLSAgR3RrQWxsb2NhdGlvbiBhbGxvYzsKLSAgZ2ludCB4LCB5LCB3LCBoOwotICBnZG91YmxlICpkYXRhOwotICBndWludDY0IHRzLCB0c19zdGVwOwotICBnaW50IGk7Ci0gIEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICp0dmNzID0gKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzOwotCi0gIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24gKHdpZGdldCwgJmFsbG9jKTsKLSAgdyA9IGFsbG9jLndpZHRoOwotICBoID0gYWxsb2MuaGVpZ2h0OwotICBndGtfcmVuZGVyX2JhY2tncm91bmQgKHN0eWxlLCBjciwgMCwgMCwgdywgaCk7Ci0gIC8vIGFkZCBzb21lIGJvcmRlcjoKLSAgeCA9IDU7Ci0gIHkgPSA1OwotICB3IC09ICh4ICsgeCk7Ci0gIGggLT0gKHkgKyB5KTsKLQotICAvLyBidWlsZCBncmFwaAotICB0cyA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMCk7Ci0gIHRzX3N0ZXAgPSB3IC8gKEdfTl9FTEVNRU5UUyAoeXZhbCkgLSAxKTsKLSAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbCAodHZjcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHl2YWwpOyBpKyspIHsKLSAgICBnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2Vfc2V0ICh0dmNzLCB0cywgeXZhbFtpXSk7Ci0gICAgdHMgKz0gdHNfc3RlcDsKLSAgfQotICBkYXRhID0gZ19uZXcgKGdkb3VibGUsIHcpOwotICBnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlX2FycmF5IChjcywgMCwgMSwgdywgZGF0YSk7Ci0KLSAgLy8gZHJhdyBiYWNrZ3JvdW5kCi0gIGNhaXJvX3NldF9zb3VyY2VfcmdiIChjciwgMC41LCAwLjUsIDAuNSk7Ci0gIGNhaXJvX3JlY3RhbmdsZSAoY3IsIHgsIHksIHcsIGgpOwotICBjYWlyb19zdHJva2VfcHJlc2VydmUgKGNyKTsKLSAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IgKGNyLCAxLjAsIDEuMCwgMS4wKTsKLSAgY2Fpcm9fZmlsbCAoY3IpOwotCi0KLSAgLy8gcGxvdCBncmFwaAotICBjYWlyb19zZXRfc291cmNlX3JnYiAoY3IsIDAuMCwgMC4wLCAwLjApOwotICBjYWlyb19zZXRfbGluZV93aWR0aCAoY3IsIDEuMCk7Ci0gIGNhaXJvX21vdmVfdG8gKGNyLCB4LCB5ICsgZGF0YVswXSAqIGgpOwotICBmb3IgKGkgPSAxOyBpIDwgdzsgaSsrKSB7Ci0gICAgY2Fpcm9fbGluZV90byAoY3IsIHggKyBpLCB5ICsgQ0xBTVAgKGRhdGFbaV0sIDAuMCwgMS4wKSAqIGgpOwotICB9Ci0gIGNhaXJvX3N0cm9rZSAoY3IpOwotCi0gIC8vIHBsb3QgY29udHJvbCBwb2ludHMKLSAgdHMgPSBHX0dVSU5UNjRfQ09OU1RBTlQgKDApOwotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTICh5dmFsKTsgaSsrKSB7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IgKGNyLCAwLjAsIDAuMCwgMC4wKTsKLSAgICBjYWlyb19hcmMgKGNyLCB4ICsgdHMsIHkgKyB5dmFsW2ldICogaCwgMy4wLCAwLjAsIDIgKiBNX1BJKTsKLSAgICBjYWlyb19zdHJva2VfcHJlc2VydmUgKGNyKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYiAoY3IsIDEuMCwgMS4wLCAxLjApOwotICAgIGNhaXJvX2ZpbGwgKGNyKTsKLSAgICB0cyArPSB0c19zdGVwOwotICB9Ci0KLSAgZ19mcmVlIChkYXRhKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX21vZGVfY2hhbmdlZCAoR3RrQ29tYm9Cb3ggKiBjb21ibywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIGd0a19jb21ib19ib3hfZ2V0X2FjdGl2ZSAoY29tYm8pLCBOVUxMKTsKLSAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3IChncmFwaCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl95dmFsX2NoYW5nZWQgKEd0a1NwaW5CdXR0b24gKiBzcGluLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGd1aW50IGl4ID0gR1BPSU5URVJfVE9fVUlOVCAodXNlcl9kYXRhKTsKLSAgeXZhbFtpeF0gPSBndGtfc3Bpbl9idXR0b25fZ2V0X3ZhbHVlIChzcGluKTsKLSAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3IChncmFwaCk7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHdGtXaWRnZXQgKndpbmRvdzsKLSAgR3RrV2lkZ2V0ICpsYXlvdXQsICpsYWJlbCwgKmNvbWJvLCAqYm94LCAqc3BpbjsKLSAgR0VudW1DbGFzcyAqZW51bV9jbGFzczsKLSAgR0VudW1WYWx1ZSAqZW51bV92YWx1ZTsKLSAgZ2ludCBpOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotICBndGtfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgZ19vYmplY3Rfc2V0IChjcywgIm1vZGUiLCBHU1RfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUiwgTlVMTCk7Ci0KLSAgd2luZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2luZG93KSwgImRlbGV0ZS1ldmVudCIsIGd0a19tYWluX3F1aXQsIE5VTEwpOwotICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUgKEdUS19XSU5ET1cgKHdpbmRvdyksIDMyMCwgMjQwKTsKLSAgZ3RrX3dpbmRvd19zZXRfdGl0bGUgKEdUS19XSU5ET1cgKHdpbmRvdyksCi0gICAgICAiR3N0SW50ZXJwb2xhdGlvbkNvbnRyb2xTb3VyY2UgZGVtbyIpOwotCi0gIGxheW91dCA9IGd0a19ncmlkX25ldyAoKTsKLQotICBncmFwaCA9IGd0a19kcmF3aW5nX2FyZWFfbmV3ICgpOwotICBndGtfd2lkZ2V0X2FkZF9ldmVudHMgKGdyYXBoLCBHREtfUE9JTlRFUl9NT1RJT05fTUFTSyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGdyYXBoLCAiZHJhdyIsIEdfQ0FMTEJBQ0sgKG9uX2dyYXBoX2RyYXcpLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChncmFwaCwgImhleHBhbmQiLCBUUlVFLCAidmV4cGFuZCIsIFRSVUUsICJtYXJnaW4tYm90dG9tIiwgMywKLSAgICAgIE5VTEwpOwotICBndGtfZ3JpZF9hdHRhY2ggKEdUS19HUklEIChsYXlvdXQpLCBncmFwaCwgMCwgMCwgMiwgMSk7Ci0KLSAgLy8gYWRkIGNvbnRyb2xzIHRvIG1vdmUgdGhlIHl2YWxzCi0gIGJveCA9IGd0a19ib3hfbmV3IChHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgMyk7Ci0gIGdfb2JqZWN0X3NldCAoYm94LCAiaG9tb2dlbmVvdXMiLCBUUlVFLCAibWFyZ2luLWJvdHRvbSIsIDMsIE5VTEwpOwotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTICh5dmFsKTsgaSsrKSB7Ci0gICAgc3BpbiA9IGd0a19zcGluX2J1dHRvbl9uZXdfd2l0aF9yYW5nZSAoMC4wLCAxLjAsIDAuMDUpOwotICAgIGd0a19zcGluX2J1dHRvbl9zZXRfdmFsdWUgKEdUS19TUElOX0JVVFRPTiAoc3BpbiksIHl2YWxbaV0pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHNwaW4sICJjaGFuZ2VkIiwgR19DQUxMQkFDSyAob25feXZhbF9jaGFuZ2VkKSwKLSAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoaSkpOwotICAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChib3gpLCBzcGluKTsKLSAgfQotICBndGtfZ3JpZF9hdHRhY2ggKEdUS19HUklEIChsYXlvdXQpLCBib3gsIDAsIDEsIDIsIDEpOwotCi0gIC8vIGNvbWJvIGZvciBpbnRlcnBvbGF0aW9uIG1vZGVzCi0gIGxhYmVsID0gZ3RrX2xhYmVsX25ldyAoImludGVycG9sYXRpb24gbW9kZSIpOwotICBndGtfZ3JpZF9hdHRhY2ggKEdUS19HUklEIChsYXlvdXQpLCBsYWJlbCwgMCwgMiwgMSwgMSk7Ci0KLSAgY29tYm8gPSBndGtfY29tYm9fYm94X3RleHRfbmV3ICgpOwotICBlbnVtX2NsYXNzID0gZ190eXBlX2NsYXNzX3JlZiAoR1NUX1RZUEVfSU5URVJQT0xBVElPTl9NT0RFKTsKLSAgZm9yIChpID0gZW51bV9jbGFzcy0+bWluaW11bTsgaSA8PSBlbnVtX2NsYXNzLT5tYXhpbXVtOyBpKyspIHsKLSAgICBpZiAoKGVudW1fdmFsdWUgPSBnX2VudW1fZ2V0X3ZhbHVlIChlbnVtX2NsYXNzLCBpKSkpIHsKLSAgICAgIGd0a19jb21ib19ib3hfdGV4dF9hcHBlbmRfdGV4dCAoR1RLX0NPTUJPX0JPWF9URVhUIChjb21ibyksCi0gICAgICAgICAgZW51bV92YWx1ZS0+dmFsdWVfbmljayk7Ci0gICAgfQotICB9Ci0gIGd0a19jb21ib19ib3hfc2V0X2FjdGl2ZSAoR1RLX0NPTUJPX0JPWCAoY29tYm8pLAotICAgICAgR1NUX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVIpOwotICBnX3NpZ25hbF9jb25uZWN0IChjb21ibywgImNoYW5nZWQiLCBHX0NBTExCQUNLIChvbl9tb2RlX2NoYW5nZWQpLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChjb21ibywgImhleHBhbmQiLCBUUlVFLCAibWFyZ2luLWxlZnQiLCAzLCBOVUxMKTsKLSAgZ3RrX2dyaWRfYXR0YWNoIChHVEtfR1JJRCAobGF5b3V0KSwgY29tYm8sIDEsIDIsIDEsIDEpOwotCi0gIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aCAoR1RLX0NPTlRBSU5FUiAod2luZG93KSwgNik7Ci0gIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSICh3aW5kb3cpLCBsYXlvdXQpOwotICBndGtfd2lkZ2V0X3Nob3dfYWxsICh3aW5kb3cpOwotCi0gIGd0a19tYWluICgpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci90ZXh0LWNvbG9yLWV4YW1wbGUuYyBiL3Rlc3RzL2V4YW1wbGVzL2NvbnRyb2xsZXIvdGV4dC1jb2xvci1leGFtcGxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZTExMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvY29udHJvbGxlci90ZXh0LWNvbG9yLWV4YW1wbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogdGV4dC1jb2xvci1leGFtcGxlLmMKLSAqCi0gKiBCdWlsZHMgYSBwaXBlbGluZSB3aXRoIFt2aWRlb3Rlc3RzcmMgISB0ZXh0b3ZlcmxheSAhIHhpbWFnZXNpbmtdIGFuZAotICogbW9kdWxhdGVzIGNvbG9yLCB0ZXh0IGFuZCB0ZXh0IHBvcy4KLSAqCi0gKiBOZWVkcyBnc3QtcGx1Z2lucy1iYXNlIGluc3RhbGxlZC4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGludGVycG9sYXRpb25jb250cm9sc291cmNlLmg+Ci0jaW5jbHVkZSA8Z3N0L2NvbnRyb2xsZXIvZ3N0bGZvY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGFyZ2Jjb250cm9sYmluZGluZy5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmg+Ci0KLWdpbnQKLW1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKLXsKLSAgZ2ludCByZXMgPSAxOwotICBHc3RFbGVtZW50ICpzcmMsICp0ZXh0LCAqc2luazsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RDb250cm9sU291cmNlICpjczsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3NfciwgKmNzX2csICpjc19iOwotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gIEdzdENsb2NrUmV0dXJuIHdhaXRfcmV0OwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGJ1aWxkIHBpcGVsaW5lICovCi0gIGJpbiA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBjbG9jayA9IGdzdF9waXBlbGluZV9nZXRfY2xvY2sgKEdTVF9QSVBFTElORSAoYmluKSk7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsIE5VTEwpOwotICBpZiAoIXNyYykgewotICAgIEdTVF9XQVJOSU5HICgibmVlZCB2aWRlb3Rlc3RzcmMgZnJvbSBnc3QtcGx1Z2lucy1iYXNlIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotICBnX29iamVjdF9zZXQgKHNyYywgInBhdHRlcm4iLCAvKiBjaGVja2Vycy04ICovIDEwLAotICAgICAgTlVMTCk7Ci0gIHRleHQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0ZXh0b3ZlcmxheSIsIE5VTEwpOwotICBpZiAoIXRleHQpIHsKLSAgICBHU1RfV0FSTklORyAoIm5lZWQgdGV4dG92ZXJsYXkgZnJvbSBnc3QtcGx1Z2lucy1iYXNlIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotICBnX29iamVjdF9zZXQgKHRleHQsCi0gICAgICAidGV4dCIsICJHU3RyZWFtZXIgcm9ja3MhIiwKLSAgICAgICJmb250LWRlc2MiLCAiU2FucywgMzAiLCAiaGFsaWdubWVudCIsIC8qIHBvc2l0aW9uICovIDQsCi0gICAgICAidmFsaWdubWVudCIsIC8qIHBvc2l0aW9uICovIDMsCi0gICAgICBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInhpbWFnZXNpbmsiLCBOVUxMKTsKLSAgaWYgKCFzaW5rKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJuZWVkIHhpbWFnZXNpbmsgZnJvbSBnc3QtcGx1Z2lucy1iYXNlIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYywgdGV4dCwgc2luaywgTlVMTCk7Ci0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIHRleHQsIHNpbmssIE5VTEwpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJjYW4ndCBsaW5rIGVsZW1lbnRzIik7Ci0gICAgZ290byBFcnJvcjsKLSAgfQotCi0gIC8qIHNldHVwIGNvbnRyb2wgc291cmNlcyAqLwotICBjcyA9IGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICBnX29iamVjdF9zZXQgKGNzLAotICAgICAgImZyZXF1ZW5jeSIsIChnZG91YmxlKSAwLjExLAotICAgICAgImFtcGxpdHVkZSIsIChnZG91YmxlKSAwLjIsICJvZmZzZXQiLCAoZ2RvdWJsZSkgMC41LCBOVUxMKTsKLSAgZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUX0NBU1QgKHRleHQpLAotICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUX0NBU1QgKHRleHQpLCAieHBvcyIsIGNzKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLQotICBjcyA9IGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICBnX29iamVjdF9zZXQgKGNzLAotICAgICAgImZyZXF1ZW5jeSIsIChnZG91YmxlKSAwLjA0LAotICAgICAgImFtcGxpdHVkZSIsIChnZG91YmxlKSAwLjQsICJvZmZzZXQiLCAoZ2RvdWJsZSkgMC41LCBOVUxMKTsKLSAgZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChHU1RfT0JKRUNUX0NBU1QgKHRleHQpLAotICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUX0NBU1QgKHRleHQpLCAieXBvcyIsIGNzKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLQotICBjc19yID0gZ3N0X2xmb19jb250cm9sX3NvdXJjZV9uZXcgKCk7Ci0gIGdfb2JqZWN0X3NldCAoY3NfciwKLSAgICAgICJmcmVxdWVuY3kiLCAoZ2RvdWJsZSkgMC4xOSwKLSAgICAgICJhbXBsaXR1ZGUiLCAoZ2RvdWJsZSkgMC41LCAib2Zmc2V0IiwgKGdkb3VibGUpIDAuNSwgTlVMTCk7Ci0gIGNzX2cgPSBnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgZ19vYmplY3Rfc2V0IChjc19nLAotICAgICAgImZyZXF1ZW5jeSIsIChnZG91YmxlKSAwLjI3LAotICAgICAgImFtcGxpdHVkZSIsIChnZG91YmxlKSAwLjUsICJvZmZzZXQiLCAoZ2RvdWJsZSkgMC41LCBOVUxMKTsKLSAgY3NfYiA9IGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotICBnX29iamVjdF9zZXQgKGNzX2IsCi0gICAgICAiZnJlcXVlbmN5IiwgKGdkb3VibGUpIDAuMTMsCi0gICAgICAiYW1wbGl0dWRlIiwgKGdkb3VibGUpIDAuNSwgIm9mZnNldCIsIChnZG91YmxlKSAwLjUsIE5VTEwpOwotICBnc3Rfb2JqZWN0X2FkZF9jb250cm9sX2JpbmRpbmcgKEdTVF9PQkpFQ1RfQ0FTVCAodGV4dCksCi0gICAgICBnc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUX0NBU1QgKHRleHQpLCAiY29sb3IiLCBOVUxMLAotICAgICAgICAgIGNzX3IsIGNzX2csIGNzX2IpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY3Nfcik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNzX2cpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjc19iKTsKLQotICAvKiBydW4gZm9yIDEwIHNlY29uZHMgKi8KLSAgY2xvY2tfaWQgPQotICAgICAgZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoY2xvY2ssCi0gICAgICBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKSArICgzMCAqIEdTVF9TRUNPTkQpKTsKLQotICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKSkgewotICAgIGlmICgod2FpdF9yZXQgPSBnc3RfY2xvY2tfaWRfd2FpdCAoY2xvY2tfaWQsIE5VTEwpKSAhPSBHU1RfQ0xPQ0tfT0spIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiY2xvY2tfaWRfd2FpdCByZXR1cm5lZDogJWQiLCB3YWl0X3JldCk7Ci0gICAgfQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIH0KLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoY2xvY2spKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGJpbikpOwotICByZXMgPSAwOwotRXJyb3I6Ci0gIHJldHVybiAocmVzKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2QxYmQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW5vaW5zdF9QUk9HUkFNUyA9IGhlbGxvd29ybGQKLQotaGVsbG93b3JsZF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotaGVsbG93b3JsZF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MGE1MzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDgxMyArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gaGVsbG93b3JsZCQoRVhFRVhUKQotc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKLWhlbGxvd29ybGRfU09VUkNFUyA9IGhlbGxvd29ybGQuYwotaGVsbG93b3JsZF9PQkpFQ1RTID0gaGVsbG93b3JsZC1oZWxsb3dvcmxkLiQoT0JKRVhUKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWhlbGxvd29ybGRfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1oZWxsb3dvcmxkX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGhlbGxvd29ybGRfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9IGhlbGxvd29ybGQuYwotRElTVF9TT1VSQ0VTID0gaGVsbG93b3JsZC5jCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLWhlbGxvd29ybGRfTERBREQgPSAkKEdTVF9PQkpfTElCUykKLWhlbGxvd29ybGRfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvaGVsbG93b3JsZC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1oZWxsb3dvcmxkJChFWEVFWFQpOiAkKGhlbGxvd29ybGRfT0JKRUNUUykgJChoZWxsb3dvcmxkX0RFUEVOREVOQ0lFUykgJChFWFRSQV9oZWxsb3dvcmxkX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGhlbGxvd29ybGQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGhlbGxvd29ybGRfTElOSykgJChoZWxsb3dvcmxkX09CSkVDVFMpICQoaGVsbG93b3JsZF9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaGVsbG93b3JsZC1oZWxsb3dvcmxkLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWhlbGxvd29ybGQtaGVsbG93b3JsZC5vOiBoZWxsb3dvcmxkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChoZWxsb3dvcmxkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBoZWxsb3dvcmxkLWhlbGxvd29ybGQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvaGVsbG93b3JsZC1oZWxsb3dvcmxkLlRwbyAtYyAtbyBoZWxsb3dvcmxkLWhlbGxvd29ybGQubyBgdGVzdCAtZiAnaGVsbG93b3JsZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BoZWxsb3dvcmxkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2hlbGxvd29ybGQtaGVsbG93b3JsZC5UcG8gJChERVBESVIpL2hlbGxvd29ybGQtaGVsbG93b3JsZC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2hlbGxvd29ybGQuYycgb2JqZWN0PSdoZWxsb3dvcmxkLWhlbGxvd29ybGQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGVsbG93b3JsZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBoZWxsb3dvcmxkLWhlbGxvd29ybGQubyBgdGVzdCAtZiAnaGVsbG93b3JsZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BoZWxsb3dvcmxkLmMKLQotaGVsbG93b3JsZC1oZWxsb3dvcmxkLm9iajogaGVsbG93b3JsZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGVsbG93b3JsZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgaGVsbG93b3JsZC1oZWxsb3dvcmxkLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvaGVsbG93b3JsZC1oZWxsb3dvcmxkLlRwbyAtYyAtbyBoZWxsb3dvcmxkLWhlbGxvd29ybGQub2JqIGBpZiB0ZXN0IC1mICdoZWxsb3dvcmxkLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaGVsbG93b3JsZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9oZWxsb3dvcmxkLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2hlbGxvd29ybGQtaGVsbG93b3JsZC5UcG8gJChERVBESVIpL2hlbGxvd29ybGQtaGVsbG93b3JsZC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2hlbGxvd29ybGQuYycgb2JqZWN0PSdoZWxsb3dvcmxkLWhlbGxvd29ybGQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChoZWxsb3dvcmxkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGhlbGxvd29ybGQtaGVsbG93b3JsZC5vYmogYGlmIHRlc3QgLWYgJ2hlbGxvd29ybGQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdoZWxsb3dvcmxkLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2hlbGxvd29ybGQuYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYyBiL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDhhZTNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotc3RhdGljIGdib29sZWFuCi1idXNfY2FsbCAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIGRhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6ewotICAgICAgZ19wcmludCAoIkVuZC1vZi1zdHJlYW1cbiIpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0gICAgICBHRXJyb3IgKmVycjsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRlYnVnKTsKLSAgICAgIGdfcHJpbnRlcnIgKCJEZWJ1Z2dpbmcgaW5mbzogJXNcbiIsIChkZWJ1ZykgPyBkZWJ1ZyA6ICJub25lIik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLQotICAgICAgZ19wcmludCAoIkVycm9yOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLQotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKnBsYXliaW47Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0QnVzICpidXM7Ci0gIGd1aW50IGJ1c193YXRjaF9pZDsKLSAgZ2NoYXIgKnVyaTsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBpZiAoYXJnYyA8IDIpIHsKLSAgICBnX3ByaW50ICgidXNhZ2U6ICVzIDxtZWRpYSBmaWxlIG9yIHVyaT5cbiIsIGFyZ3ZbMF0pOwotICAgIHJldHVybiAxOwotICB9Ci0KLSAgcGxheWJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBsYXliaW4iLCBOVUxMKTsKLSAgaWYgKCFwbGF5YmluKSB7Ci0gICAgZ19wcmludCAoIidwbGF5YmluJyBnc3RyZWFtZXIgcGx1Z2luIG1pc3NpbmdcbiIpOwotICAgIHJldHVybiAxOwotICB9Ci0KLSAgLyogdGFrZSB0aGUgY29tbWFuZGxpbmUgYXJndW1lbnQgYW5kIGVuc3VyZSB0aGF0IGl0IGlzIGEgdXJpICovCi0gIGlmIChnc3RfdXJpX2lzX3ZhbGlkIChhcmd2WzFdKSkKLSAgICB1cmkgPSBnX3N0cmR1cCAoYXJndlsxXSk7Ci0gIGVsc2UKLSAgICB1cmkgPSBnc3RfZmlsZW5hbWVfdG9fdXJpIChhcmd2WzFdLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChwbGF5YmluLCAidXJpIiwgdXJpLCBOVUxMKTsKLSAgZ19mcmVlICh1cmkpOwotCi0gIC8qIGNyZWF0ZSBhbmQgZXZlbnQgbG9vcCBhbmQgZmVlZCBnc3RyZWFtZXIgYnVzIG1lc2FnZXMgdG8gaXQgKi8KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBsYXliaW4pOwotICBidXNfd2F0Y2hfaWQgPSBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfY2FsbCwgbG9vcCk7Ci0gIGdfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIC8qIHN0YXJ0IHBsYXkgYmFjayBhbmQgbGlzdGVkIHRvIGV2ZW50cyAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBsYXliaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheWJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBnX29iamVjdF91bnJlZiAocGxheWJpbik7Ci0gIGdfc291cmNlX3JlbW92ZSAoYnVzX3dhdGNoX2lkKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmFlOWU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0jIGlmIEhBVkVfTElCR05PTUVVSQotIyBHTk9NRSA9IGdub21lCi0jIGVsc2UKLUdOT01FID0KLSMgZW5kaWYKLQotIyBnbm9tZV9MREFERCA9ICQoR1NUX09CSl9MSUJTKSAkKExJQkdOT01FVUlfTElCUykKLSMgZ25vbWVfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChMSUJHTk9NRVVJX0NGTEFHUykKLQotQ0hFQ0tfUkVHSVNUUlkgPSAkKHRvcF9idWlsZGRpcikvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3Rlc3QtcmVnaXN0cnkucmVnCi0KLVJFR0lTVFJZX0VOVklST05NRU5UID0gXAotICAgICAgICBHU1RfUkVHSVNUUlk9JChDSEVDS19SRUdJU1RSWSkKLQotQU1fVEVTVFNfRU5WSVJPTk1FTlQgPSBcCi0gICAgICAgICQoUkVHSVNUUllfRU5WSVJPTk1FTlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBHU1RfUExVR0lOX1NDQU5ORVJfMV8wPSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9oZWxwZXJzL2dzdC1wbHVnaW4tc2Nhbm5lciBcCi0gICAgICAgIEdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgR1NUX1BMVUdJTl9QQVRIXzFfMD0kKHRvcF9idWlsZGRpcikvcGx1Z2lucwotCi1FWFRSQV9ESVNUID0gZXh0cmFjdC5wbAotCi1FWEFNUExFUyA9IFwKLQkkKEdOT01FKSBcCi0JZWxlbWVudGNyZWF0ZSBcCi0JZWxlbWVudG1ha2UgXAotCWVsZW1lbnRmYWN0b3J5IFwKLQllbGVtZW50Z2V0IFwKLQllbGVtZW50bGluayBcCi0JYmluIFwKLQlwYWQgXAotCWdob3N0cGFkIFwKLQloZWxsb3dvcmxkIFwKLQlpbml0IFwKLQlxdWVyeSBcCi0JdHlwZWZpbmQgXAotCWJsb2NrcHJvYmUgXAotCXByb2JlIFwKLQlhcHBzcmMgXAotCWFwcHNpbmsgXAotCWR5bmZvcm1hdCBcCi0JZWZmZWN0c3dpdGNoIFwKLQlub3JlYnVmZmVyIFwKLQlwbGF5YmluIFwKLQlkZWNvZGViaW4gXAotCXBsYXlzaW5rIAotCi1CVUlMVF9TT1VSQ0VTID0gXAotCWVsZW1lbnRtYWtlLmMgZWxlbWVudGNyZWF0ZS5jIGVsZW1lbnRnZXQuYyBlbGVtZW50bGluay5jIGVsZW1lbnRmYWN0b3J5LmMgXAotCWJpbi5jIFwKLQlwYWQuYyBnaG9zdHBhZC5jIFwKLQlnbm9tZS5jIFwKLQloZWxsb3dvcmxkLmMgXAotCWluaXQuYyBcCi0JcXVlcnkuYyBcCi0JdHlwZWZpbmQuYyBcCi0JYmxvY2twcm9iZS5jIFwKLQlwcm9iZS5jIFwKLQlhcHBzcmMuYyBcCi0JYXBwc2luay5jIFwKLQlkeW5mb3JtYXQuYyBcCi0JZWZmZWN0c3dpdGNoLmMgXAotCW5vcmVidWZmZXIuYyBcCi0JcGxheWJpbi5jIGRlY29kZWJpbi5jIFwKLQlwbGF5c2luay5jCi0KLWlmIEhBVkVfUFRIUkVBRAotQlVJTFRfU09VUkNFUyArPSB0ZXN0cnRwb29sLmMKLUVYQU1QTEVTICs9IHRlc3RydHBvb2wKLWVuZGlmCi0KLUNMRUFORklMRVMgPSBjb3JlIGNvcmUuKiB0ZXN0LXJlZ2lzdHJ5LiogKi5nY25vICouZ2NkYSAkKEJVSUxUX1NPVVJDRVMpCi0KLUFNX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1MREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR1NUX09CSl9MSUJTKQotCi1lbGVtZW50bWFrZS5jIGVsZW1lbnRjcmVhdGUuYyBlbGVtZW50Z2V0LmMgZWxlbWVudGxpbmsuYyBlbGVtZW50ZmFjdG9yeS5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotYmluLmMgOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1wYWQuYyBnaG9zdHBhZC5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1nbm9tZS5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2FwcGVuZGl4LWludGVncmF0aW9uLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1oZWxsb3dvcmxkLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYmFzaWNzLWhlbGxvd29ybGQueG1sCi0JJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8Ci0KLWluaXQuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9iYXNpY3MtaW5pdC54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotcXVlcnkuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotdHlwZWZpbmQuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1hdXRvcGx1Z2dpbmcueG1sCi0JJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8Ci0KLWJsb2NrcHJvYmUuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1wcm9iZS5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sCi0JJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8Ci0KLWFwcHNyYy5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sCi0JJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8Ci0KLWFwcHNpbmsuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1keW5mb3JtYXQuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1lZmZlY3Rzd2l0Y2guYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1ub3JlYnVmZmVyLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtYnVmZmVyaW5nLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1wbGF5YmluLmMgZGVjb2RlYmluLmMgcGxheXNpbmsuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9oaWdobGV2ZWwtcGxheWJhY2sueG1sCi0JJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8Ci0KLXRlc3RydHBvb2wuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC10aHJlYWRzLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1URVNUUyA9IGJpbiBcCi0JZWxlbWVudGNyZWF0ZSBlbGVtZW50ZmFjdG9yeSBlbGVtZW50Z2V0IGVsZW1lbnRsaW5rIGVsZW1lbnRtYWtlIFwKLQlnaG9zdHBhZCBpbml0Ci0KLW5vaW5zdF9QUk9HUkFNUyA9ICQoRVhBTVBMRVMpCi0KLXRlc3RydHBvb2xfTERBREQgPSAkKEdTVF9PQkpfTElCUykgJChQVEhSRUFEX0xJQlMpCi10ZXN0cnRwb29sX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZDBhNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTU5MSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotQEhBVkVfUFRIUkVBRF9UUlVFQGFtX19hcHBlbmRfMSA9IHRlc3RydHBvb2wuYwotQEhBVkVfUFRIUkVBRF9UUlVFQGFtX19hcHBlbmRfMiA9IHRlc3RydHBvb2wKLVRFU1RTID0gYmluJChFWEVFWFQpIGVsZW1lbnRjcmVhdGUkKEVYRUVYVCkgZWxlbWVudGZhY3RvcnkkKEVYRUVYVCkgXAotCWVsZW1lbnRnZXQkKEVYRUVYVCkgZWxlbWVudGxpbmskKEVYRUVYVCkgZWxlbWVudG1ha2UkKEVYRUVYVCkgXAotCWdob3N0cGFkJChFWEVFWFQpIGluaXQkKEVYRUVYVCkKLW5vaW5zdF9QUk9HUkFNUyA9ICQoYW1fX0VYRUVYVF8zKQotc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvbWFudWFsCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fRVhFRVhUXzEgPQotQEhBVkVfUFRIUkVBRF9UUlVFQGFtX19FWEVFWFRfMiA9IHRlc3RydHBvb2wkKEVYRUVYVCkKLWFtX19FWEVFWFRfMyA9ICQoYW1fX0VYRUVYVF8xKSBlbGVtZW50Y3JlYXRlJChFWEVFWFQpIFwKLQllbGVtZW50bWFrZSQoRVhFRVhUKSBlbGVtZW50ZmFjdG9yeSQoRVhFRVhUKSBcCi0JZWxlbWVudGdldCQoRVhFRVhUKSBlbGVtZW50bGluayQoRVhFRVhUKSBiaW4kKEVYRUVYVCkgXAotCXBhZCQoRVhFRVhUKSBnaG9zdHBhZCQoRVhFRVhUKSBoZWxsb3dvcmxkJChFWEVFWFQpIFwKLQlpbml0JChFWEVFWFQpIHF1ZXJ5JChFWEVFWFQpIHR5cGVmaW5kJChFWEVFWFQpIFwKLQlibG9ja3Byb2JlJChFWEVFWFQpIHByb2JlJChFWEVFWFQpIGFwcHNyYyQoRVhFRVhUKSBcCi0JYXBwc2luayQoRVhFRVhUKSBkeW5mb3JtYXQkKEVYRUVYVCkgZWZmZWN0c3dpdGNoJChFWEVFWFQpIFwKLQlub3JlYnVmZmVyJChFWEVFWFQpIHBsYXliaW4kKEVYRUVYVCkgZGVjb2RlYmluJChFWEVFWFQpIFwKLQlwbGF5c2luayQoRVhFRVhUKSAkKGFtX19FWEVFWFRfMikKLVBST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCi1hcHBzaW5rX1NPVVJDRVMgPSBhcHBzaW5rLmMKLWFwcHNpbmtfT0JKRUNUUyA9IGFwcHNpbmsuJChPQkpFWFQpCi1hcHBzaW5rX0xEQUREID0gJChMREFERCkKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1hcHBzaW5rX0RFUEVOREVOQ0lFUyA9ICBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1hcHBzcmNfU09VUkNFUyA9IGFwcHNyYy5jCi1hcHBzcmNfT0JKRUNUUyA9IGFwcHNyYy4kKE9CSkVYVCkKLWFwcHNyY19MREFERCA9ICQoTERBREQpCi1hcHBzcmNfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWJpbl9TT1VSQ0VTID0gYmluLmMKLWJpbl9PQkpFQ1RTID0gYmluLiQoT0JKRVhUKQotYmluX0xEQUREID0gJChMREFERCkKLWJpbl9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYmxvY2twcm9iZV9TT1VSQ0VTID0gYmxvY2twcm9iZS5jCi1ibG9ja3Byb2JlX09CSkVDVFMgPSBibG9ja3Byb2JlLiQoT0JKRVhUKQotYmxvY2twcm9iZV9MREFERCA9ICQoTERBREQpCi1ibG9ja3Byb2JlX0RFUEVOREVOQ0lFUyA9ICBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1kZWNvZGViaW5fU09VUkNFUyA9IGRlY29kZWJpbi5jCi1kZWNvZGViaW5fT0JKRUNUUyA9IGRlY29kZWJpbi4kKE9CSkVYVCkKLWRlY29kZWJpbl9MREFERCA9ICQoTERBREQpCi1kZWNvZGViaW5fREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWR5bmZvcm1hdF9TT1VSQ0VTID0gZHluZm9ybWF0LmMKLWR5bmZvcm1hdF9PQkpFQ1RTID0gZHluZm9ybWF0LiQoT0JKRVhUKQotZHluZm9ybWF0X0xEQUREID0gJChMREFERCkKLWR5bmZvcm1hdF9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWZmZWN0c3dpdGNoX1NPVVJDRVMgPSBlZmZlY3Rzd2l0Y2guYwotZWZmZWN0c3dpdGNoX09CSkVDVFMgPSBlZmZlY3Rzd2l0Y2guJChPQkpFWFQpCi1lZmZlY3Rzd2l0Y2hfTERBREQgPSAkKExEQUREKQotZWZmZWN0c3dpdGNoX0RFUEVOREVOQ0lFUyA9ICBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50Y3JlYXRlX1NPVVJDRVMgPSBlbGVtZW50Y3JlYXRlLmMKLWVsZW1lbnRjcmVhdGVfT0JKRUNUUyA9IGVsZW1lbnRjcmVhdGUuJChPQkpFWFQpCi1lbGVtZW50Y3JlYXRlX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRjcmVhdGVfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRmYWN0b3J5X1NPVVJDRVMgPSBlbGVtZW50ZmFjdG9yeS5jCi1lbGVtZW50ZmFjdG9yeV9PQkpFQ1RTID0gZWxlbWVudGZhY3RvcnkuJChPQkpFWFQpCi1lbGVtZW50ZmFjdG9yeV9MREFERCA9ICQoTERBREQpCi1lbGVtZW50ZmFjdG9yeV9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudGdldF9TT1VSQ0VTID0gZWxlbWVudGdldC5jCi1lbGVtZW50Z2V0X09CSkVDVFMgPSBlbGVtZW50Z2V0LiQoT0JKRVhUKQotZWxlbWVudGdldF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50Z2V0X0RFUEVOREVOQ0lFUyA9ICBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50bGlua19TT1VSQ0VTID0gZWxlbWVudGxpbmsuYwotZWxlbWVudGxpbmtfT0JKRUNUUyA9IGVsZW1lbnRsaW5rLiQoT0JKRVhUKQotZWxlbWVudGxpbmtfTERBREQgPSAkKExEQUREKQotZWxlbWVudGxpbmtfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRtYWtlX1NPVVJDRVMgPSBlbGVtZW50bWFrZS5jCi1lbGVtZW50bWFrZV9PQkpFQ1RTID0gZWxlbWVudG1ha2UuJChPQkpFWFQpCi1lbGVtZW50bWFrZV9MREFERCA9ICQoTERBREQpCi1lbGVtZW50bWFrZV9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ2hvc3RwYWRfU09VUkNFUyA9IGdob3N0cGFkLmMKLWdob3N0cGFkX09CSkVDVFMgPSBnaG9zdHBhZC4kKE9CSkVYVCkKLWdob3N0cGFkX0xEQUREID0gJChMREFERCkKLWdob3N0cGFkX0RFUEVOREVOQ0lFUyA9ICBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1oZWxsb3dvcmxkX1NPVVJDRVMgPSBoZWxsb3dvcmxkLmMKLWhlbGxvd29ybGRfT0JKRUNUUyA9IGhlbGxvd29ybGQuJChPQkpFWFQpCi1oZWxsb3dvcmxkX0xEQUREID0gJChMREFERCkKLWhlbGxvd29ybGRfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWluaXRfU09VUkNFUyA9IGluaXQuYwotaW5pdF9PQkpFQ1RTID0gaW5pdC4kKE9CSkVYVCkKLWluaXRfTERBREQgPSAkKExEQUREKQotaW5pdF9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotbm9yZWJ1ZmZlcl9TT1VSQ0VTID0gbm9yZWJ1ZmZlci5jCi1ub3JlYnVmZmVyX09CSkVDVFMgPSBub3JlYnVmZmVyLiQoT0JKRVhUKQotbm9yZWJ1ZmZlcl9MREFERCA9ICQoTERBREQpCi1ub3JlYnVmZmVyX0RFUEVOREVOQ0lFUyA9ICBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1wYWRfU09VUkNFUyA9IHBhZC5jCi1wYWRfT0JKRUNUUyA9IHBhZC4kKE9CSkVYVCkKLXBhZF9MREFERCA9ICQoTERBREQpCi1wYWRfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXBsYXliaW5fU09VUkNFUyA9IHBsYXliaW4uYwotcGxheWJpbl9PQkpFQ1RTID0gcGxheWJpbi4kKE9CSkVYVCkKLXBsYXliaW5fTERBREQgPSAkKExEQUREKQotcGxheWJpbl9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotcGxheXNpbmtfU09VUkNFUyA9IHBsYXlzaW5rLmMKLXBsYXlzaW5rX09CSkVDVFMgPSBwbGF5c2luay4kKE9CSkVYVCkKLXBsYXlzaW5rX0xEQUREID0gJChMREFERCkKLXBsYXlzaW5rX0RFUEVOREVOQ0lFUyA9ICBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L2Jhc2UvbGliZ3N0YmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1wcm9iZV9TT1VSQ0VTID0gcHJvYmUuYwotcHJvYmVfT0JKRUNUUyA9IHByb2JlLiQoT0JKRVhUKQotcHJvYmVfTERBREQgPSAkKExEQUREKQotcHJvYmVfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXF1ZXJ5X1NPVVJDRVMgPSBxdWVyeS5jCi1xdWVyeV9PQkpFQ1RTID0gcXVlcnkuJChPQkpFWFQpCi1xdWVyeV9MREFERCA9ICQoTERBREQpCi1xdWVyeV9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9iYXNlL2xpYmdzdGJhc2UtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotdGVzdHJ0cG9vbF9TT1VSQ0VTID0gdGVzdHJ0cG9vbC5jCi10ZXN0cnRwb29sX09CSkVDVFMgPSB0ZXN0cnRwb29sLXRlc3RydHBvb2wuJChPQkpFWFQpCi10ZXN0cnRwb29sX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXRlc3RydHBvb2xfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQodGVzdHJ0cG9vbF9DRkxBR1MpIFwKLQkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi10eXBlZmluZF9TT1VSQ0VTID0gdHlwZWZpbmQuYwotdHlwZWZpbmRfT0JKRUNUUyA9IHR5cGVmaW5kLiQoT0JKRVhUKQotdHlwZWZpbmRfTERBREQgPSAkKExEQUREKQotdHlwZWZpbmRfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSBhcHBzaW5rLmMgYXBwc3JjLmMgYmluLmMgYmxvY2twcm9iZS5jIGRlY29kZWJpbi5jIFwKLQlkeW5mb3JtYXQuYyBlZmZlY3Rzd2l0Y2guYyBlbGVtZW50Y3JlYXRlLmMgZWxlbWVudGZhY3RvcnkuYyBcCi0JZWxlbWVudGdldC5jIGVsZW1lbnRsaW5rLmMgZWxlbWVudG1ha2UuYyBnaG9zdHBhZC5jIFwKLQloZWxsb3dvcmxkLmMgaW5pdC5jIG5vcmVidWZmZXIuYyBwYWQuYyBwbGF5YmluLmMgcGxheXNpbmsuYyBcCi0JcHJvYmUuYyBxdWVyeS5jIHRlc3RydHBvb2wuYyB0eXBlZmluZC5jCi1ESVNUX1NPVVJDRVMgPSBhcHBzaW5rLmMgYXBwc3JjLmMgYmluLmMgYmxvY2twcm9iZS5jIGRlY29kZWJpbi5jIFwKLQlkeW5mb3JtYXQuYyBlZmZlY3Rzd2l0Y2guYyBlbGVtZW50Y3JlYXRlLmMgZWxlbWVudGZhY3RvcnkuYyBcCi0JZWxlbWVudGdldC5jIGVsZW1lbnRsaW5rLmMgZWxlbWVudG1ha2UuYyBnaG9zdHBhZC5jIFwKLQloZWxsb3dvcmxkLmMgaW5pdC5jIG5vcmVidWZmZXIuYyBwYWQuYyBwbGF5YmluLmMgcGxheXNpbmsuYyBcCi0JcHJvYmUuYyBxdWVyeS5jIHRlc3RydHBvb2wuYyB0eXBlZmluZC5jCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fdHR5X2NvbG9yc19kdW1teSA9IFwKLSAgbWduPSByZWQ9IGdybj0gbGduPSBibHU9IGJyZz0gc3RkPTsgXAotICBhbV9fY29sb3JfdGVzdHM9bm8KLWFtX190dHlfY29sb3JzID0geyBcCi0gICQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpOyBcCi0gIGlmIHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYbm87IHRoZW4gXAotICAgIGFtX19jb2xvcl90ZXN0cz1ubzsgXAotICBlbGlmIHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYYWx3YXlzOyB0aGVuIFwKLSAgICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCi0gIGVsaWYgdGVzdCAiWCQkVEVSTSIgIT0gWGR1bWIgJiYgeyB0ZXN0IC10IDE7IH0gMj4vZGV2L251bGw7IHRoZW4gXAotICAgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKLSAgZmk7IFwKLSAgaWYgdGVzdCAkJGFtX19jb2xvcl90ZXN0cyA9IHllczsgdGhlbiBcCi0gICAgcmVkPScbWzA7MzFtJzsgXAotICAgIGdybj0nG1swOzMybSc7IFwKLSAgICBsZ249JxtbMTszMm0nOyBcCi0gICAgYmx1PScbWzE7MzRtJzsgXAotICAgIG1nbj0nG1swOzM1bSc7IFwKLSAgICBicmc9JxtbMW0nOyBcCi0gICAgc3RkPScbW20nOyBcCi0gIGZpOyBcCi19Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19yZWNoZWNrX3J4ID0gXlsgCV0qOnJlY2hlY2s6WyAJXSoKLWFtX19nbG9iYWxfdGVzdF9yZXN1bHRfcnggPSBeWyAJXSo6Z2xvYmFsLXRlc3QtcmVzdWx0OlsgCV0qCi1hbV9fY29weV9pbl9nbG9iYWxfbG9nX3J4ID0gXlsgCV0qOmNvcHktaW4tZ2xvYmFsLWxvZzpbIAldKgotIyBBIGNvbW1hbmQgdGhhdCwgZ2l2ZW4gYSBuZXdsaW5lLXNlcGFyYXRlZCBsaXN0IG9mIHRlc3QgbmFtZXMgb24gdGhlCi0jIHN0YW5kYXJkIGlucHV0LCBwcmludCB0aGUgbmFtZSBvZiB0aGUgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcmUtcnVuCi0jIHVwb24gIm1ha2UgcmVjaGVjayIuCi1hbV9fbGlzdF9yZWNoZWNrX3Rlc3RzID0gJChBV0spICd7IFwKLSAgcmVjaGVjayA9IDE7IFwKLSAgd2hpbGUgKChyYyA9IChnZXRsaW5lIGxpbmUgPCAoJCQwICIudHJzIikpKSAhPSAwKSBcCi0gICAgeyBcCi0gICAgICBpZiAocmMgPCAwKSBcCi0gICAgICAgIHsgXAotICAgICAgICAgIGlmICgoZ2V0bGluZSBsaW5lMiA8ICgkJDAgIi5sb2ciKSkgPCAwKSBcCi0JICAgIHJlY2hlY2sgPSAwOyBcCi0gICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgfSBcCi0gICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX3JlY2hlY2tfcngpW25OXVtPb10vKSBcCi0gICAgICAgIHsgXAotICAgICAgICAgIHJlY2hlY2sgPSAwOyBcCi0gICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgfSBcCi0gICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX3JlY2hlY2tfcngpW3lZXVtlRV1bc1NdLykgXAotICAgICAgICB7IFwKLSAgICAgICAgICBicmVhazsgXAotICAgICAgICB9IFwKLSAgICB9OyBcCi0gIGlmIChyZWNoZWNrKSBcCi0gICAgcHJpbnQgJCQwOyBcCi0gIGNsb3NlICgkJDAgIi50cnMiKTsgXAotICBjbG9zZSAoJCQwICIubG9nIik7IFwKLX0nCi0jIEEgY29tbWFuZCB0aGF0LCBnaXZlbiBhIG5ld2xpbmUtc2VwYXJhdGVkIGxpc3Qgb2YgdGVzdCBuYW1lcyBvbiB0aGUKLSMgc3RhbmRhcmQgaW5wdXQsIGNyZWF0ZSB0aGUgZ2xvYmFsIGxvZyBmcm9tIHRoZWlyIC50cnMgYW5kIC5sb2cgZmlsZXMuCi1hbV9fY3JlYXRlX2dsb2JhbF9sb2cgPSAkKEFXSykgJyBcCi1mdW5jdGlvbiBmYXRhbChtc2cpIFwKLXsgXAotICBwcmludCAiZmF0YWw6IG1ha2luZyAkQDogIiBtc2cgfCAiY2F0ID4mMiI7IFwKLSAgZXhpdCAxOyBcCi19IFwKLWZ1bmN0aW9uIHJzdF9zZWN0aW9uKGhlYWRlcikgXAoteyBcCi0gIHByaW50IGhlYWRlcjsgXAotICBsZW4gPSBsZW5ndGgoaGVhZGVyKTsgXAotICBmb3IgKGkgPSAxOyBpIDw9IGxlbjsgaSA9IGkgKyAxKSBcCi0gICAgcHJpbnRmICI9IjsgXAotICBwcmludGYgIlxuXG4iOyBcCi19IFwKLXsgXAotICBjb3B5X2luX2dsb2JhbF9sb2cgPSAxOyBcCi0gIGdsb2JhbF90ZXN0X3Jlc3VsdCA9ICJSVU4iOyBcCi0gIHdoaWxlICgocmMgPSAoZ2V0bGluZSBsaW5lIDwgKCQkMCAiLnRycyIpKSkgIT0gMCkgXAotICAgIHsgXAotICAgICAgaWYgKHJjIDwgMCkgXAotICAgICAgICAgZmF0YWwoImZhaWxlZCB0byByZWFkIGZyb20gIiAkJDAgIi50cnMiKTsgXAotICAgICAgaWYgKGxpbmUgfiAvJChhbV9fZ2xvYmFsX3Rlc3RfcmVzdWx0X3J4KS8pIFwKLSAgICAgICAgeyBcCi0gICAgICAgICAgc3ViKCIkKGFtX19nbG9iYWxfdGVzdF9yZXN1bHRfcngpIiwgIiIsIGxpbmUpOyBcCi0gICAgICAgICAgc3ViKCJbIAldKiQkIiwgIiIsIGxpbmUpOyBcCi0gICAgICAgICAgZ2xvYmFsX3Rlc3RfcmVzdWx0ID0gbGluZTsgXAotICAgICAgICB9IFwKLSAgICAgIGVsc2UgaWYgKGxpbmUgfiAvJChhbV9fY29weV9pbl9nbG9iYWxfbG9nX3J4KVtuTl1bb09dLykgXAotICAgICAgICBjb3B5X2luX2dsb2JhbF9sb2cgPSAwOyBcCi0gICAgfTsgXAotICBpZiAoY29weV9pbl9nbG9iYWxfbG9nKSBcCi0gICAgeyBcCi0gICAgICByc3Rfc2VjdGlvbihnbG9iYWxfdGVzdF9yZXN1bHQgIjogIiAkJDApOyBcCi0gICAgICB3aGlsZSAoKHJjID0gKGdldGxpbmUgbGluZSA8ICgkJDAgIi5sb2ciKSkpICE9IDApIFwKLSAgICAgIHsgXAotICAgICAgICBpZiAocmMgPCAwKSBcCi0gICAgICAgICAgZmF0YWwoImZhaWxlZCB0byByZWFkIGZyb20gIiAkJDAgIi5sb2ciKTsgXAotICAgICAgICBwcmludCBsaW5lOyBcCi0gICAgICB9OyBcCi0gICAgICBwcmludGYgIlxuIjsgXAotICAgIH07IFwKLSAgY2xvc2UgKCQkMCAiLnRycyIpOyBcCi0gIGNsb3NlICgkJDAgIi5sb2ciKTsgXAotfScKLSMgUmVzdHJ1Y3R1cmVkIFRleHQgdGl0bGUuCi1hbV9fcnN0X3RpdGxlID0geyBzZWQgJ3MvLiovICAgJiAgIC87aDtzLy4vPS9nO3A7eDtzLyAqJCQvLztwO2cnICYmIGVjaG87IH0KLSMgU29sYXJpcyAxMCAnbWFrZScsIGFuZCBzZXZlcmFsIG90aGVyIHRyYWRpdGlvbmFsICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMsCi0jIHBhc3MgIi1lIiB0byAkKFNIRUxMKSwgYW5kIFBPU0lYIDIwMDggZXZlbiByZXF1aXJlcyB0aGlzLiAgV29yayBhcm91bmQgaXQKLSMgYnkgZGlzYWJsaW5nIC1lICh1c2luZyB0aGUgWFNJIGV4dGVuc2lvbiAic2V0ICtlIikgaWYgaXQncyBzZXQuCi1hbV9fc2hfZV9zZXR1cCA9IGNhc2UgJCQtIGluICplKikgc2V0ICtlOzsgZXNhYwotIyBEZWZhdWx0IGZsYWdzIHBhc3NlZCB0byB0ZXN0IGRyaXZlcnMuCi1hbV9fY29tbW9uX2RyaXZlcl9mbGFncyA9IFwKLSAgLS1jb2xvci10ZXN0cyAiJCRhbV9fY29sb3JfdGVzdHMiIFwKLSAgLS1lbmFibGUtaGFyZC1lcnJvcnMgIiQkYW1fX2VuYWJsZV9oYXJkX2Vycm9ycyIgXAotICAtLWV4cGVjdC1mYWlsdXJlICIkJGFtX19leHBlY3RfZmFpbHVyZSIKLSMgVG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBjb21tYW5kIHJ1bm5pbmcgdGhlIHRlc3QuICBDcmVhdGVzIHRoZQotIyBkaXJlY3RvcnkgZm9yIHRoZSBsb2cgaWYgbmVlZGVkLiAgU3RvcmVzIGluICRkaXIgdGhlIGRpcmVjdG9yeQotIyBjb250YWluaW5nICRmLCBpbiAkdHN0IHRoZSB0ZXN0LCBpbiAkbG9nIHRoZSBsb2cuICBFeGVjdXRlcyB0aGUKLSMgZGV2ZWxvcGVyLSBkZWZpbmVkIHRlc3Qgc2V0dXAgQU1fVEVTVFNfRU5WSVJPTk1FTlQgKGlmIGFueSksIGFuZAotIyBwYXNzZXMgVEVTVFNfRU5WSVJPTk1FTlQuICBTZXQgdXAgb3B0aW9ucyBmb3IgdGhlIHdyYXBwZXIgdGhhdAotIyB3aWxsIHJ1biB0aGUgdGVzdCBzY3JpcHRzIChvciB0aGVpciBhc3NvY2lhdGVkIExPR19DT01QSUxFUiwgaWYKLSMgdGh5IGhhdmUgb25lKS4KLWFtX19jaGVja19wcmUgPSBcCi0kKGFtX19zaF9lX3NldHVwKTsJCQkJCVwKLSQoYW1fX3ZwYXRoX2Fkal9zZXR1cCkgJChhbV9fdnBhdGhfYWRqKQkJCVwKLSQoYW1fX3R0eV9jb2xvcnMpOwkJCQkJXAotc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsJCQlcCi1jYXNlICIkQCIgaW4JCQkJCQlcCi0gICovKikgYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDs7CVwKLSAgICAqKSBhbV9fb2Rpcj0uOzsgCQkJCQlcCi1lc2FjOwkJCQkJCQlcCi10ZXN0ICJ4JCRhbV9fb2RpciIgPSB4Ii4iIHx8IHRlc3QgLWQgIiQkYW1fX29kaXIiIAlcCi0gIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OwkJXAotaWYgdGVzdCAtZiAiLi8kJGYiOyB0aGVuIGRpcj0uLzsJCQlcCi1lbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsJCQkJXAotZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsJCQkJXAotdHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgCQkJCVwKLWlmIHRlc3QgLW4gJyQoRElTQUJMRV9IQVJEX0VSUk9SUyknOyB0aGVuCQlcCi0gIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IAkJCQlcCi1lbHNlCQkJCQkJCVwKLSAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IAkJCQlcCi1maTsgCQkJCQkJCVwKLWNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluCQkJCVwKLSAgKltcIFwJXSQkZltcIFwJXSogfCAqW1wgXAldJCRkaXIkJGZbXCBcCV0qKSBcCi0gICAgYW1fX2V4cGVjdF9mYWlsdXJlPXllczs7CQkJCVwKLSAgKikJCQkJCQkJXAotICAgIGFtX19leHBlY3RfZmFpbHVyZT1ubzs7CQkJCVwKLWVzYWM7IAkJCQkJCQlcCi0kKEFNX1RFU1RTX0VOVklST05NRU5UKSAkKFRFU1RTX0VOVklST05NRU5UKQotIyBBIHNoZWxsIGNvbW1hbmQgdG8gZ2V0IHRoZSBuYW1lcyBvZiB0aGUgdGVzdHMgc2NyaXB0cyB3aXRoIGFueSByZWdpc3RlcmVkCi0jIGV4dGVuc2lvbiByZW1vdmVkIChpLmUuLCBlcXVpdmFsZW50bHksIHRoZSBuYW1lcyBvZiB0aGUgdGVzdCBsb2dzLCB3aXRoCi0jIHRoZSAnLmxvZycgZXh0ZW5zaW9uIHJlbW92ZWQpLiAgVGhlIHJlc3VsdCBpcyBzYXZlZCBpbiB0aGUgc2hlbGwgdmFyaWFibGUKLSMgJyRiYXNlcycuICBUaGlzIGhvbm9ycyBydW50aW1lIG92ZXJyaWRpbmcgb2YgVEVTVFMgYW5kIFRFU1RfTE9HUy4gIFNhZGx5LAotIyB3ZSBjYW5ub3QgdXNlIHNvbWV0aGluZyBzaW1wbGVyLCBpbnZvbHZpbmcgZS5nLiwgIiQoVEVTVF9MT0dTOi5sb2c9KSIsCi0jIHNpbmNlIHRoYXQgbWlnaHQgY2F1c2UgcHJvYmxlbSB3aXRoIFZQQVRIIHJld3JpdGVzIGZvciBzdWZmaXgtbGVzcyB0ZXN0cy4KLSMgU2VlIGFsc28gJ3Rlc3QtaGFybmVzcy12cGF0aC1yZXdyaXRlLnNoJyBhbmQgJ3Rlc3QtdHJzLWJhc2ljLnNoJy4KLWFtX19zZXRfVEVTVFNfYmFzZXMgPSBcCi0gIGJhc2VzPSckKFRFU1RfTE9HUyknOyBcCi0gIGJhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaTsgZG9uZSB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAotICBiYXNlcz1gZWNobyAkJGJhc2VzYAotUkVDSEVDS19MT0dTID0gJChURVNUX0xPR1MpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9IGNoZWNrIHJlY2hlY2sKLVRFU1RfU1VJVEVfTE9HID0gdGVzdC1zdWl0ZS5sb2cKLVRFU1RfRVhURU5TSU9OUyA9IEBFWEVFWFRAIC50ZXN0Ci1MT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS90ZXN0LWRyaXZlcgotTE9HX0NPTVBJTEUgPSAkKExPR19DT01QSUxFUikgJChBTV9MT0dfRkxBR1MpICQoTE9HX0ZMQUdTKQotYW1fX3NldF9iID0gXAotICBjYXNlICckQCcgaW4gXAotICAgICovKikgXAotICAgICAgY2FzZSAnJConIGluIFwKLSAgICAgICAgKi8qKSBiPSckKic7OyBcCi0gICAgICAgICAgKikgYj1gZWNobyAnJEAnIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCi0gICAgICAgZXNhYzs7IFwKLSAgICAqKSBcCi0gICAgICBiPSckKic7OyBcCi0gIGVzYWMKLWFtX190ZXN0X2xvZ3MxID0gJChURVNUUzo9LmxvZykKLWFtX190ZXN0X2xvZ3MyID0gJChhbV9fdGVzdF9sb2dzMTpARVhFRVhUQC5sb2c9LmxvZykKLVRFU1RfTE9HUyA9ICQoYW1fX3Rlc3RfbG9nczI6LnRlc3QubG9nPS5sb2cpCi1URVNUX0xPR19EUklWRVIgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL3Rlc3QtZHJpdmVyCi1URVNUX0xPR19DT01QSUxFID0gJChURVNUX0xPR19DT01QSUxFUikgJChBTV9URVNUX0xPR19GTEFHUykgXAotCSQoVEVTVF9MT0dfRkxBR1MpCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wIFwKLQkkKHRvcF9zcmNkaXIpL3Rlc3QtZHJpdmVyCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLQotIyBpZiBIQVZFX0xJQkdOT01FVUkKLSMgR05PTUUgPSBnbm9tZQotIyBlbHNlCi1HTk9NRSA9IAotIyBlbmRpZgotCi0jIGdub21lX0xEQUREID0gJChHU1RfT0JKX0xJQlMpICQoTElCR05PTUVVSV9MSUJTKQotIyBnbm9tZV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAkKExJQkdOT01FVUlfQ0ZMQUdTKQotQ0hFQ0tfUkVHSVNUUlkgPSAkKHRvcF9idWlsZGRpcikvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3Rlc3QtcmVnaXN0cnkucmVnCi1SRUdJU1RSWV9FTlZJUk9OTUVOVCA9IFwKLSAgICAgICAgR1NUX1JFR0lTVFJZPSQoQ0hFQ0tfUkVHSVNUUlkpCi0KLUFNX1RFU1RTX0VOVklST05NRU5UID0gXAotICAgICAgICAkKFJFR0lTVFJZX0VOVklST05NRU5UKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgR1NUX1BMVUdJTl9TQ0FOTkVSXzFfMD0kKHRvcF9idWlsZGRpcikvbGlicy9nc3QvaGVscGVycy9nc3QtcGx1Z2luLXNjYW5uZXIgXAotICAgICAgICBHU1RfUExVR0lOX1NZU1RFTV9QQVRIXzFfMD0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEdTVF9QTFVHSU5fUEFUSF8xXzA9JCh0b3BfYnVpbGRkaXIpL3BsdWdpbnMKLQotRVhUUkFfRElTVCA9IGV4dHJhY3QucGwKLUVYQU1QTEVTID0gJChHTk9NRSkgZWxlbWVudGNyZWF0ZSBlbGVtZW50bWFrZSBlbGVtZW50ZmFjdG9yeSBcCi0JZWxlbWVudGdldCBlbGVtZW50bGluayBiaW4gcGFkIGdob3N0cGFkIGhlbGxvd29ybGQgaW5pdCBxdWVyeSBcCi0JdHlwZWZpbmQgYmxvY2twcm9iZSBwcm9iZSBhcHBzcmMgYXBwc2luayBkeW5mb3JtYXQgXAotCWVmZmVjdHN3aXRjaCBub3JlYnVmZmVyIHBsYXliaW4gZGVjb2RlYmluIHBsYXlzaW5rIFwKLQkkKGFtX19hcHBlbmRfMikKLUJVSUxUX1NPVVJDRVMgPSBlbGVtZW50bWFrZS5jIGVsZW1lbnRjcmVhdGUuYyBlbGVtZW50Z2V0LmMgXAotCWVsZW1lbnRsaW5rLmMgZWxlbWVudGZhY3RvcnkuYyBiaW4uYyBwYWQuYyBnaG9zdHBhZC5jIGdub21lLmMgXAotCWhlbGxvd29ybGQuYyBpbml0LmMgcXVlcnkuYyB0eXBlZmluZC5jIGJsb2NrcHJvYmUuYyBwcm9iZS5jIFwKLQlhcHBzcmMuYyBhcHBzaW5rLmMgZHluZm9ybWF0LmMgZWZmZWN0c3dpdGNoLmMgbm9yZWJ1ZmZlci5jIFwKLQlwbGF5YmluLmMgZGVjb2RlYmluLmMgcGxheXNpbmsuYyAkKGFtX19hcHBlbmRfMSkKLUNMRUFORklMRVMgPSBjb3JlIGNvcmUuKiB0ZXN0LXJlZ2lzdHJ5LiogKi5nY25vICouZ2NkYSAkKEJVSUxUX1NPVVJDRVMpCi1BTV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvYmFzZS9saWJnc3RiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKEdTVF9PQkpfTElCUykKLQotdGVzdHJ0cG9vbF9MREFERCA9ICQoR1NUX09CSl9MSUJTKSAkKFBUSFJFQURfTElCUykKLXRlc3RydHBvb2xfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykKLWFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubG9nIC5vIC5vYmogLnRlc3QgLnRlc3QkKEVYRUVYVCkgLnRycwotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvbWFudWFsL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL21hbnVhbC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1hcHBzaW5rJChFWEVFWFQpOiAkKGFwcHNpbmtfT0JKRUNUUykgJChhcHBzaW5rX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hcHBzaW5rX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGFwcHNpbmskKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoYXBwc2lua19PQkpFQ1RTKSAkKGFwcHNpbmtfTERBREQpICQoTElCUykKLQotYXBwc3JjJChFWEVFWFQpOiAkKGFwcHNyY19PQkpFQ1RTKSAkKGFwcHNyY19ERVBFTkRFTkNJRVMpICQoRVhUUkFfYXBwc3JjX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGFwcHNyYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChhcHBzcmNfT0JKRUNUUykgJChhcHBzcmNfTERBREQpICQoTElCUykKLQotYmluJChFWEVFWFQpOiAkKGJpbl9PQkpFQ1RTKSAkKGJpbl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfYmluX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGJpbiQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChiaW5fT0JKRUNUUykgJChiaW5fTERBREQpICQoTElCUykKLQotYmxvY2twcm9iZSQoRVhFRVhUKTogJChibG9ja3Byb2JlX09CSkVDVFMpICQoYmxvY2twcm9iZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfYmxvY2twcm9iZV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBibG9ja3Byb2JlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGJsb2NrcHJvYmVfT0JKRUNUUykgJChibG9ja3Byb2JlX0xEQUREKSAkKExJQlMpCi0KLWRlY29kZWJpbiQoRVhFRVhUKTogJChkZWNvZGViaW5fT0JKRUNUUykgJChkZWNvZGViaW5fREVQRU5ERU5DSUVTKSAkKEVYVFJBX2RlY29kZWJpbl9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBkZWNvZGViaW4kKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZGVjb2RlYmluX09CSkVDVFMpICQoZGVjb2RlYmluX0xEQUREKSAkKExJQlMpCi0KLWR5bmZvcm1hdCQoRVhFRVhUKTogJChkeW5mb3JtYXRfT0JKRUNUUykgJChkeW5mb3JtYXRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2R5bmZvcm1hdF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBkeW5mb3JtYXQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZHluZm9ybWF0X09CSkVDVFMpICQoZHluZm9ybWF0X0xEQUREKSAkKExJQlMpCi0KLWVmZmVjdHN3aXRjaCQoRVhFRVhUKTogJChlZmZlY3Rzd2l0Y2hfT0JKRUNUUykgJChlZmZlY3Rzd2l0Y2hfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VmZmVjdHN3aXRjaF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBlZmZlY3Rzd2l0Y2gkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWZmZWN0c3dpdGNoX09CSkVDVFMpICQoZWZmZWN0c3dpdGNoX0xEQUREKSAkKExJQlMpCi0KLWVsZW1lbnRjcmVhdGUkKEVYRUVYVCk6ICQoZWxlbWVudGNyZWF0ZV9PQkpFQ1RTKSAkKGVsZW1lbnRjcmVhdGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRjcmVhdGVfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZWxlbWVudGNyZWF0ZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50Y3JlYXRlX09CSkVDVFMpICQoZWxlbWVudGNyZWF0ZV9MREFERCkgJChMSUJTKQotCi1lbGVtZW50ZmFjdG9yeSQoRVhFRVhUKTogJChlbGVtZW50ZmFjdG9yeV9PQkpFQ1RTKSAkKGVsZW1lbnRmYWN0b3J5X0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50ZmFjdG9yeV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBlbGVtZW50ZmFjdG9yeSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50ZmFjdG9yeV9PQkpFQ1RTKSAkKGVsZW1lbnRmYWN0b3J5X0xEQUREKSAkKExJQlMpCi0KLWVsZW1lbnRnZXQkKEVYRUVYVCk6ICQoZWxlbWVudGdldF9PQkpFQ1RTKSAkKGVsZW1lbnRnZXRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRnZXRfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZWxlbWVudGdldCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50Z2V0X09CSkVDVFMpICQoZWxlbWVudGdldF9MREFERCkgJChMSUJTKQotCi1lbGVtZW50bGluayQoRVhFRVhUKTogJChlbGVtZW50bGlua19PQkpFQ1RTKSAkKGVsZW1lbnRsaW5rX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50bGlua19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBlbGVtZW50bGluayQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50bGlua19PQkpFQ1RTKSAkKGVsZW1lbnRsaW5rX0xEQUREKSAkKExJQlMpCi0KLWVsZW1lbnRtYWtlJChFWEVFWFQpOiAkKGVsZW1lbnRtYWtlX09CSkVDVFMpICQoZWxlbWVudG1ha2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRtYWtlX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGVsZW1lbnRtYWtlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRtYWtlX09CSkVDVFMpICQoZWxlbWVudG1ha2VfTERBREQpICQoTElCUykKLQotZ2hvc3RwYWQkKEVYRUVYVCk6ICQoZ2hvc3RwYWRfT0JKRUNUUykgJChnaG9zdHBhZF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ2hvc3RwYWRfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZ2hvc3RwYWQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZ2hvc3RwYWRfT0JKRUNUUykgJChnaG9zdHBhZF9MREFERCkgJChMSUJTKQotCi1oZWxsb3dvcmxkJChFWEVFWFQpOiAkKGhlbGxvd29ybGRfT0JKRUNUUykgJChoZWxsb3dvcmxkX0RFUEVOREVOQ0lFUykgJChFWFRSQV9oZWxsb3dvcmxkX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGhlbGxvd29ybGQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoaGVsbG93b3JsZF9PQkpFQ1RTKSAkKGhlbGxvd29ybGRfTERBREQpICQoTElCUykKLQotaW5pdCQoRVhFRVhUKTogJChpbml0X09CSkVDVFMpICQoaW5pdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfaW5pdF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBpbml0JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGluaXRfT0JKRUNUUykgJChpbml0X0xEQUREKSAkKExJQlMpCi0KLW5vcmVidWZmZXIkKEVYRUVYVCk6ICQobm9yZWJ1ZmZlcl9PQkpFQ1RTKSAkKG5vcmVidWZmZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX25vcmVidWZmZXJfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgbm9yZWJ1ZmZlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChub3JlYnVmZmVyX09CSkVDVFMpICQobm9yZWJ1ZmZlcl9MREFERCkgJChMSUJTKQotCi1wYWQkKEVYRUVYVCk6ICQocGFkX09CSkVDVFMpICQocGFkX0RFUEVOREVOQ0lFUykgJChFWFRSQV9wYWRfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgcGFkJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKHBhZF9PQkpFQ1RTKSAkKHBhZF9MREFERCkgJChMSUJTKQotCi1wbGF5YmluJChFWEVFWFQpOiAkKHBsYXliaW5fT0JKRUNUUykgJChwbGF5YmluX0RFUEVOREVOQ0lFUykgJChFWFRSQV9wbGF5YmluX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHBsYXliaW4kKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQocGxheWJpbl9PQkpFQ1RTKSAkKHBsYXliaW5fTERBREQpICQoTElCUykKLQotcGxheXNpbmskKEVYRUVYVCk6ICQocGxheXNpbmtfT0JKRUNUUykgJChwbGF5c2lua19ERVBFTkRFTkNJRVMpICQoRVhUUkFfcGxheXNpbmtfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgcGxheXNpbmskKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQocGxheXNpbmtfT0JKRUNUUykgJChwbGF5c2lua19MREFERCkgJChMSUJTKQotCi1wcm9iZSQoRVhFRVhUKTogJChwcm9iZV9PQkpFQ1RTKSAkKHByb2JlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9wcm9iZV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBwcm9iZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChwcm9iZV9PQkpFQ1RTKSAkKHByb2JlX0xEQUREKSAkKExJQlMpCi0KLXF1ZXJ5JChFWEVFWFQpOiAkKHF1ZXJ5X09CSkVDVFMpICQocXVlcnlfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3F1ZXJ5X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHF1ZXJ5JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKHF1ZXJ5X09CSkVDVFMpICQocXVlcnlfTERBREQpICQoTElCUykKLQotdGVzdHJ0cG9vbCQoRVhFRVhUKTogJCh0ZXN0cnRwb29sX09CSkVDVFMpICQodGVzdHJ0cG9vbF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdGVzdHJ0cG9vbF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiB0ZXN0cnRwb29sJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJCh0ZXN0cnRwb29sX0xJTkspICQodGVzdHJ0cG9vbF9PQkpFQ1RTKSAkKHRlc3RydHBvb2xfTERBREQpICQoTElCUykKLQotdHlwZWZpbmQkKEVYRUVYVCk6ICQodHlwZWZpbmRfT0JKRUNUUykgJCh0eXBlZmluZF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdHlwZWZpbmRfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgdHlwZWZpbmQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQodHlwZWZpbmRfT0JKRUNUUykgJCh0eXBlZmluZF9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXBwc2luay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXBwc3JjLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9iaW4uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Jsb2NrcHJvYmUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RlY29kZWJpbi5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZHluZm9ybWF0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lZmZlY3Rzd2l0Y2guUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VsZW1lbnRjcmVhdGUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VsZW1lbnRmYWN0b3J5LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lbGVtZW50Z2V0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9lbGVtZW50bGluay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZWxlbWVudG1ha2UuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dob3N0cGFkLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9oZWxsb3dvcmxkLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbml0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ub3JlYnVmZmVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wYWQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BsYXliaW4uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BsYXlzaW5rLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wcm9iZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcXVlcnkuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rlc3RydHBvb2wtdGVzdHJ0cG9vbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdHlwZWZpbmQuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotdGVzdHJ0cG9vbC10ZXN0cnRwb29sLm86IHRlc3RydHBvb2wuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3RydHBvb2xfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRlc3RydHBvb2wtdGVzdHJ0cG9vbC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZXN0cnRwb29sLXRlc3RydHBvb2wuVHBvIC1jIC1vIHRlc3RydHBvb2wtdGVzdHJ0cG9vbC5vIGB0ZXN0IC1mICd0ZXN0cnRwb29sLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3RydHBvb2wuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGVzdHJ0cG9vbC10ZXN0cnRwb29sLlRwbyAkKERFUERJUikvdGVzdHJ0cG9vbC10ZXN0cnRwb29sLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGVzdHJ0cG9vbC5jJyBvYmplY3Q9J3Rlc3RydHBvb2wtdGVzdHJ0cG9vbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0cnRwb29sX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRlc3RydHBvb2wtdGVzdHJ0cG9vbC5vIGB0ZXN0IC1mICd0ZXN0cnRwb29sLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3RydHBvb2wuYwotCi10ZXN0cnRwb29sLXRlc3RydHBvb2wub2JqOiB0ZXN0cnRwb29sLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0cnRwb29sX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXN0cnRwb29sLXRlc3RydHBvb2wub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZXN0cnRwb29sLXRlc3RydHBvb2wuVHBvIC1jIC1vIHRlc3RydHBvb2wtdGVzdHJ0cG9vbC5vYmogYGlmIHRlc3QgLWYgJ3Rlc3RydHBvb2wuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0cnRwb29sLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3RydHBvb2wuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGVzdHJ0cG9vbC10ZXN0cnRwb29sLlRwbyAkKERFUERJUikvdGVzdHJ0cG9vbC10ZXN0cnRwb29sLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGVzdHJ0cG9vbC5jJyBvYmplY3Q9J3Rlc3RydHBvb2wtdGVzdHJ0cG9vbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3RydHBvb2xfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGVzdHJ0cG9vbC10ZXN0cnRwb29sLm9iaiBgaWYgdGVzdCAtZiAndGVzdHJ0cG9vbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3RydHBvb2wuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdHJ0cG9vbC5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi0jIFJlY292ZXIgZnJvbSBkZWxldGVkICcudHJzJyBmaWxlOyB0aGlzIHNob3VsZCBlbnN1cmUgdGhhdAotIyAicm0gLWYgZm9vLmxvZzsgbWFrZSBmb28udHJzIiByZS1ydW4gJ2Zvby50ZXN0JywgYW5kIHJlLWNyZWF0ZQotIyBib3RoICdmb28ubG9nJyBhbmQgJ2Zvby50cnMnLiAgQnJlYWsgdGhlIHJlY2lwZSBpbiB0d28gc3Vic2hlbGxzCi0jIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggIm1ha2UgLW4iLgotLmxvZy50cnM6Ci0Jcm0gLWYgJDwgJEAKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkPAotCi0jIExlYWRpbmcgJ2FtLS1mbm9yZCcgaXMgdGhlcmUgdG8gZW5zdXJlIHRoZSBsaXN0IG9mIHRhcmdldHMgZG9lcyBub3QKLSMgZXhwYW5kIHRvIGVtcHR5LCBhcyBjb3VsZCBoYXBwZW4gZS5nLiB3aXRoIG1ha2UgY2hlY2sgVEVTVFM9JycuCi1hbS0tZm5vcmQgJChURVNUX0xPR1MpICQoVEVTVF9MT0dTOi5sb2c9LnRycyk6ICQoYW1fX2ZvcmNlX3JlY2hlY2spCi1hbS0tZm9yY2UtcmVjaGVjazoKLQlAOgotCi0kKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCi0JQCQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKLQlhbV9fZl9vayAoKSB7IHRlc3QgLWYgIiQkMSIgJiYgdGVzdCAtciAiJCQxIjsgfTsgXAotCXJlZG9fYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIFwKLQkgICAgICAgICAgICAgIGFtX19mX29rICQkaS50cnMgJiYgYW1fX2Zfb2sgJCRpLmxvZyB8fCBlY2hvICQkaTsgXAotCSAgICAgICAgICAgIGRvbmVgOyBcCi0JaWYgdGVzdCAtbiAiJCRyZWRvX2Jhc2VzIjsgdGhlbiBcCi0JICByZWRvX2xvZ3M9YGZvciBpIGluICQkcmVkb19iYXNlczsgZG8gZWNobyAkJGkubG9nOyBkb25lYDsgXAotCSAgcmVkb19yZXN1bHRzPWBmb3IgaSBpbiAkJHJlZG9fYmFzZXM7IGRvIGVjaG8gJCRpLnRyczsgZG9uZWA7IFwKLQkgIGlmICQoYW1fX21ha2VfZHJ5cnVuKTsgdGhlbiA6OyBlbHNlIFwKLQkgICAgcm0gLWYgJCRyZWRvX2xvZ3MgJiYgcm0gLWYgJCRyZWRvX3Jlc3VsdHMgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWZpOyBcCi0JaWYgdGVzdCAtbiAiJCRhbV9fcmVtYWtpbmdfbG9ncyI7IHRoZW4gXAotCSAgZWNobyAiZmF0YWw6IG1ha2luZyAkKFRFU1RfU1VJVEVfTE9HKTogcG9zc2libGUgaW5maW5pdGUiIFwKLQkgICAgICAgInJlY3Vyc2lvbiBkZXRlY3RlZCIgPiYyOyBcCi0JZWxpZiB0ZXN0IC1uICIkJHJlZG9fbG9ncyI7IHRoZW4gXAotCSAgYW1fX3JlbWFraW5nX2xvZ3M9eWVzICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkcmVkb19sb2dzOyBcCi0JZmk7IFwKLQlpZiAkKGFtX19tYWtlX2RyeXJ1bik7IHRoZW4gOjsgZWxzZSBcCi0JICBzdD0wOyAgXAotCSAgZXJybXNnPSJmYXRhbDogbWFraW5nICQoVEVTVF9TVUlURV9MT0cpOiBmYWlsZWQgdG8gY3JlYXRlIjsgXAotCSAgZm9yIGkgaW4gJCRyZWRvX2Jhc2VzOyBkbyBcCi0JICAgIHRlc3QgLWYgJCRpLnRycyAmJiB0ZXN0IC1yICQkaS50cnMgXAotCSAgICAgIHx8IHsgZWNobyAiJCRlcnJtc2cgJCRpLnRycyIgPiYyOyBzdD0xOyB9OyBcCi0JICAgIHRlc3QgLWYgJCRpLmxvZyAmJiB0ZXN0IC1yICQkaS5sb2cgXAotCSAgICAgIHx8IHsgZWNobyAiJCRlcnJtc2cgJCRpLmxvZyIgPiYyOyBzdD0xOyB9OyBcCi0JICBkb25lOyBcCi0JICB0ZXN0ICQkc3QgLWVxIDAgfHwgZXhpdCAxOyBcCi0JZmkKLQlAJChhbV9fc2hfZV9zZXR1cCk7ICQoYW1fX3R0eV9jb2xvcnMpOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCi0Jd3M9J1sgCV0nOyBcCi0JcmVzdWx0cz1gZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGIudHJzOyBkb25lYDsgXAotCXRlc3QgLW4gIiQkcmVzdWx0cyIgfHwgcmVzdWx0cz0vZGV2L251bGw7IFwKLQlhbGw9YCAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiIgICAgICAgICAgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAotCXBhc3M9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypQQVNTIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCi0JZmFpbD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkZBSUwiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKLQlza2lwPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqU0tJUCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAotCXhmYWlsPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYRkFJTCIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCi0JeHBhc3M9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhQQVNTIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKLQllcnJvcj1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRVJST1IiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAotCWlmIHRlc3QgYGV4cHIgJCRmYWlsICsgJCR4cGFzcyArICQkZXJyb3JgIC1lcSAwOyB0aGVuIFwKLQkgIHN1Y2Nlc3M9dHJ1ZTsgXAotCWVsc2UgXAotCSAgc3VjY2Vzcz1mYWxzZTsgXAotCWZpOyBcCi0JYnI9Jz09PT09PT09PT09PT09PT09PT0nOyBicj0kJGJyJCRiciQkYnIkJGJyOyBcCi0JcmVzdWx0X2NvdW50ICgpIFwKLQl7IFwKLQkgICAgaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbWF5YmUtY29sb3IiOyB0aGVuIFwKLQkgICAgICBtYXliZV9jb2xvcml6ZT15ZXM7IFwKLQkgICAgZWxpZiB0ZXN0IHgiJCQxIiA9IHgiLS1uby1jb2xvciI7IHRoZW4gXAotCSAgICAgIG1heWJlX2NvbG9yaXplPW5vOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIGVjaG8gIiRAOiBpbnZhbGlkICdyZXN1bHRfY291bnQnIHVzYWdlIiA+JjI7IGV4aXQgNDsgXAotCSAgICBmaTsgXAotCSAgICBzaGlmdDsgXAotCSAgICBkZXNjPSQkMSBjb3VudD0kJDI7IFwKLQkgICAgaWYgdGVzdCAkJG1heWJlX2NvbG9yaXplID0geWVzICYmIHRlc3QgJCRjb3VudCAtZ3QgMDsgdGhlbiBcCi0JICAgICAgY29sb3Jfc3RhcnQ9JCQzIGNvbG9yX2VuZD0kJHN0ZDsgXAotCSAgICBlbHNlIFwKLQkgICAgICBjb2xvcl9zdGFydD0gY29sb3JfZW5kPTsgXAotCSAgICBmaTsgXAotCSAgICBlY2hvICIkJHtjb2xvcl9zdGFydH0jICQkZGVzYyAkJGNvdW50JCR7Y29sb3JfZW5kfSI7IFwKLQl9OyBcCi0JY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgKCkgXAotCXsgXAotCSAgcmVzdWx0X2NvdW50ICQkMSAiVE9UQUw6IiAkJGFsbCAgICIkJGJyZyI7IFwKLQkgIHJlc3VsdF9jb3VudCAkJDEgIlBBU1M6ICIgJCRwYXNzICAiJCRncm4iOyBcCi0JICByZXN1bHRfY291bnQgJCQxICJTS0lQOiAiICQkc2tpcCAgIiQkYmx1IjsgXAotCSAgcmVzdWx0X2NvdW50ICQkMSAiWEZBSUw6IiAkJHhmYWlsICIkJGxnbiI7IFwKLQkgIHJlc3VsdF9jb3VudCAkJDEgIkZBSUw6ICIgJCRmYWlsICAiJCRyZWQiOyBcCi0JICByZXN1bHRfY291bnQgJCQxICJYUEFTUzoiICQkeHBhc3MgIiQkcmVkIjsgXAotCSAgcmVzdWx0X2NvdW50ICQkMSAiRVJST1I6IiAkJGVycm9yICIkJG1nbiI7IFwKLQl9OyBcCi0JewkJCQkJCQkJXAotCSAgZWNobyAiJChQQUNLQUdFX1NUUklORyk6ICQoc3ViZGlyKS8kKFRFU1RfU1VJVEVfTE9HKSIgfAlcCi0JICAgICQoYW1fX3JzdF90aXRsZSk7CQkJCQkJXAotCSAgY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1uby1jb2xvcjsJCQkJXAotCSAgZWNobzsJCQkJCQkJCVwKLQkgIGVjaG8gIi4uIGNvbnRlbnRzOjogOmRlcHRoOiAyIjsJCQkJXAotCSAgZWNobzsJCQkJCQkJCVwKLQkgIGZvciBiIGluICQkYmFzZXM7IGRvIGVjaG8gJCRiOyBkb25lCQkJCVwKLQkgICAgfCAkKGFtX19jcmVhdGVfZ2xvYmFsX2xvZyk7CQkJCQlcCi0JfSA+JChURVNUX1NVSVRFX0xPRykudG1wIHx8IGV4aXQgMTsJCQkJXAotCW12ICQoVEVTVF9TVUlURV9MT0cpLnRtcCAkKFRFU1RfU1VJVEVfTE9HKTsJCQlcCi0JaWYgJCRzdWNjZXNzOyB0aGVuCQkJCQkJXAotCSAgY29sPSIkJGdybiI7CQkJCQkJCVwKLQkgZWxzZQkJCQkJCQkJXAotCSAgY29sPSIkJHJlZCI7CQkJCQkJCVwKLQkgIHRlc3QgeCIkJFZFUkJPU0UiID0geCB8fCBjYXQgJChURVNUX1NVSVRFX0xPRyk7CQlcCi0JZmk7CQkJCQkJCQlcCi0JZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCi0JZWNobyAiJCR7Y29sfVRlc3RzdWl0ZSBzdW1tYXJ5IGZvciAkKFBBQ0tBR0VfU1RSSU5HKSQke3N0ZH0iOwlcCi0JZWNobyAiJCR7Y29sfSQkYnIkJHtzdGR9IjsgCQkJCQlcCi0JY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1tYXliZS1jb2xvcjsJCQkJXAotCWVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCQlcCi0JaWYgJCRzdWNjZXNzOyB0aGVuIDo7IGVsc2UJCQkJCVwKLQkgIGVjaG8gIiQke2NvbH1TZWUgJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpJCR7c3RkfSI7CQlcCi0JICBpZiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4JCQlcCi0JICAgIGVjaG8gIiQke2NvbH1QbGVhc2UgcmVwb3J0IHRvICQoUEFDS0FHRV9CVUdSRVBPUlQpJCR7c3RkfSI7CVwKLQkgIGZpOwkJCQkJCQkJXAotCSAgZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJXAotCWZpOwkJCQkJCQkJXAotCSQkc3VjY2VzcyB8fCBleGl0IDEKLQotY2hlY2stVEVTVFM6Ci0JQGxpc3Q9JyQoUkVDSEVDS19MT0dTKSc7ICAgICAgICAgICB0ZXN0IC16ICIkJGxpc3QiIHx8IHJtIC1mICQkbGlzdAotCUBsaXN0PSckKFJFQ0hFQ0tfTE9HUzoubG9nPS50cnMpJzsgdGVzdCAteiAiJCRsaXN0IiB8fCBybSAtZiAkJGxpc3QKLQlAdGVzdCAteiAiJChURVNUX1NVSVRFX0xPRykiIHx8IHJtIC1mICQoVEVTVF9TVUlURV9MT0cpCi0JQHNldCArZTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAotCWxvZ19saXN0PWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCi0JdHJzX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLnRyczsgZG9uZWA7IFwKLQlsb2dfbGlzdD1gZWNobyAkJGxvZ19saXN0YDsgdHJzX2xpc3Q9YGVjaG8gJCR0cnNfbGlzdGA7IFwKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBURVNUX0xPR1M9IiQkbG9nX2xpc3QiOyBcCi0JZXhpdCAkJD87Ci1yZWNoZWNrOiBhbGwgCi0JQHRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQotCUBzZXQgK2U7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKLQliYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGk7IGRvbmUgXAotCSAgICAgICAgIHwgJChhbV9fbGlzdF9yZWNoZWNrX3Rlc3RzKWAgfHwgZXhpdCAxOyBcCi0JbG9nX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLmxvZzsgZG9uZWA7IFwKLQlsb2dfbGlzdD1gZWNobyAkJGxvZ19saXN0YDsgXAotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFwKLQkgICAgICAgIGFtX19mb3JjZV9yZWNoZWNrPWFtLS1mb3JjZS1yZWNoZWNrIFwKLQkgICAgICAgIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCI7IFwKLQlleGl0ICQkPwotYmluLmxvZzogYmluJChFWEVFWFQpCi0JQHA9J2JpbiQoRVhFRVhUKSc7IFwKLQliPSdiaW4nOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRjcmVhdGUubG9nOiBlbGVtZW50Y3JlYXRlJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRjcmVhdGUkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudGNyZWF0ZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudGZhY3RvcnkubG9nOiBlbGVtZW50ZmFjdG9yeSQoRVhFRVhUKQotCUBwPSdlbGVtZW50ZmFjdG9yeSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50ZmFjdG9yeSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudGdldC5sb2c6IGVsZW1lbnRnZXQkKEVYRUVYVCkKLQlAcD0nZWxlbWVudGdldCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50Z2V0JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50bGluay5sb2c6IGVsZW1lbnRsaW5rJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRsaW5rJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRsaW5rJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50bWFrZS5sb2c6IGVsZW1lbnRtYWtlJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRtYWtlJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRtYWtlJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1naG9zdHBhZC5sb2c6IGdob3N0cGFkJChFWEVFWFQpCi0JQHA9J2dob3N0cGFkJChFWEVFWFQpJzsgXAotCWI9J2dob3N0cGFkJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1pbml0LmxvZzogaW5pdCQoRVhFRVhUKQotCUBwPSdpbml0JChFWEVFWFQpJzsgXAotCWI9J2luaXQnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLS50ZXN0LmxvZzoKLQlAcD0nJDwnOyBcCi0JJChhbV9fc2V0X2IpOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKFRFU1RfTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fVEVTVF9MT0dfRFJJVkVSX0ZMQUdTKSAkKFRFU1RfTE9HX0RSSVZFUl9GTEFHUykgLS0gJChURVNUX0xPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotQGFtX19FWEVFWFRfVFJVRUAudGVzdCQoRVhFRVhUKS5sb2c6Ci1AYW1fX0VYRUVYVF9UUlVFQAlAcD0nJDwnOyBcCi1AYW1fX0VYRUVYVF9UUlVFQAkkKGFtX19zZXRfYik7IFwKLUBhbV9fRVhFRVhUX1RSVUVACSQoYW1fX2NoZWNrX3ByZSkgJChURVNUX0xPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLUBhbV9fRVhFRVhUX1RSVUVACS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotQGFtX19FWEVFWFRfVFJVRUAJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9URVNUX0xPR19EUklWRVJfRkxBR1MpICQoVEVTVF9MT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKFRFU1RfTE9HX0NPTVBJTEUpIFwKLUBhbV9fRVhFRVhUX1RSVUVACSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKLWNoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKFRFU1RfTE9HUykiIHx8IHJtIC1mICQoVEVTVF9MT0dTKQotCS10ZXN0IC16ICIkKFRFU1RfTE9HUzoubG9nPS50cnMpIiB8fCBybSAtZiAkKFRFU1RfTE9HUzoubG9nPS50cnMpCi0JLXRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLQktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogYWxsIGNoZWNrIGNoZWNrLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKLQljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBcCi0JY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JcmVjaGVjayB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotZWxlbWVudG1ha2UuYyBlbGVtZW50Y3JlYXRlLmMgZWxlbWVudGdldC5jIGVsZW1lbnRsaW5rLmMgZWxlbWVudGZhY3RvcnkuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sCi0JJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8Ci0KLWJpbi5jIDogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotcGFkLmMgZ2hvc3RwYWQuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotZ25vbWUuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hcHBlbmRpeC1pbnRlZ3JhdGlvbi54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotaGVsbG93b3JsZC5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2Jhc2ljcy1oZWxsb3dvcmxkLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1pbml0LmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sCi0JJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8Ci0KLXF1ZXJ5LmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sCi0JJChQRVJMX1BBVEgpICQoc3JjZGlyKS9leHRyYWN0LnBsICRAICQ8Ci0KLXR5cGVmaW5kLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1ibG9ja3Byb2JlLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotcHJvYmUuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1hcHBzcmMuYzogJCh0b3Bfc3JjZGlyKS9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi1hcHBzaW5rLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotZHluZm9ybWF0LmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotZWZmZWN0c3dpdGNoLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotbm9yZWJ1ZmZlci5jOiAkKHRvcF9zcmNkaXIpL2RvY3MvbWFudWFsL2FkdmFuY2VkLWJ1ZmZlcmluZy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotcGxheWJpbi5jIGRlY29kZWJpbi5jIHBsYXlzaW5rLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvaGlnaGxldmVsLXBsYXliYWNrLnhtbAotCSQoUEVSTF9QQVRIKSAkKHNyY2RpcikvZXh0cmFjdC5wbCAkQCAkPAotCi10ZXN0cnRwb29sLmM6ICQodG9wX3NyY2RpcikvZG9jcy9tYW51YWwvYWR2YW5jZWQtdGhyZWFkcy54bWwKLQkkKFBFUkxfUEFUSCkgJChzcmNkaXIpL2V4dHJhY3QucGwgJEAgJDwKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2FwcHNpbmsuYyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9hcHBzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDgxZWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2FwcHNpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0KLS8qKiogYmxvY2sgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWwgKioqLwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpZmRlZiBIQVZFX0dUSwotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNkZWZpbmUgQ0FQUyAidmlkZW8veC1yYXcsZm9ybWF0PVJHQix3aWR0aD0xNjAscGl4ZWwtYXNwZWN0LXJhdGlvPTEvMSIKLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNpbms7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgR3N0U2FtcGxlICpzYW1wbGU7Ci0gIGdjaGFyICpkZXNjcjsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gIGdpbnQ2NCBkdXJhdGlvbiwgcG9zaXRpb247Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoInVzYWdlOiAlcyA8dXJpPlxuIFdyaXRlcyBzbmFwc2hvdC5wbmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4iLAotICAgICAgICBhcmd2WzBdKTsKLSAgICBleGl0ICgtMSk7Ci0gIH0KLQotICAvKiBjcmVhdGUgYSBuZXcgcGlwZWxpbmUgKi8KLSAgZGVzY3IgPQotICAgICAgZ19zdHJkdXBfcHJpbnRmICgidXJpZGVjb2RlYmluIHVyaT0lcyAhIHZpZGVvY29udmVydCAhIHZpZGVvc2NhbGUgISAiCi0gICAgICAiIGFwcHNpbmsgbmFtZT1zaW5rIGNhcHM9XCIiIENBUFMgIlwiIiwgYXJndlsxXSk7Ci0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAoZGVzY3IsICZlcnJvcik7Ci0KLSAgaWYgKGVycm9yICE9IE5VTEwpIHsKLSAgICBnX3ByaW50ICgiY291bGQgbm90IGNvbnN0cnVjdCBwaXBlbGluZTogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyb3IpOwotICAgIGV4aXQgKC0xKTsKLSAgfQotCi0gIC8qIGdldCBzaW5rICovCi0gIHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJzaW5rIik7Ci0KLSAgLyogc2V0IHRvIFBBVVNFRCB0byBtYWtlIHRoZSBmaXJzdCBmcmFtZSBhcnJpdmUgaW4gdGhlIHNpbmsgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIHN3aXRjaCAocmV0KSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6Ci0gICAgICBnX3ByaW50ICgiZmFpbGVkIHRvIHBsYXkgdGhlIGZpbGVcbiIpOwotICAgICAgZXhpdCAoLTEpOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOgotICAgICAgLyogZm9yIGxpdmUgc291cmNlcywgd2UgbmVlZCB0byBzZXQgdGhlIHBpcGVsaW5lIHRvIFBMQVlJTkcgYmVmb3JlIHdlIGNhbgotICAgICAgICogcmVjZWl2ZSBhIGJ1ZmZlci4gV2UgZG9uJ3QgZG8gdGhhdCB5ZXQgKi8KLSAgICAgIGdfcHJpbnQgKCJsaXZlIHNvdXJjZXMgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwotICAgICAgZXhpdCAoLTEpOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICAvKiBUaGlzIGNhbiBibG9jayBmb3IgdXAgdG8gNSBzZWNvbmRzLiBJZiB5b3VyIG1hY2hpbmUgaXMgcmVhbGx5IG92ZXJsb2FkZWQsCi0gICAqIGl0IG1pZ2h0IHRpbWUgb3V0IGJlZm9yZSB0aGUgcGlwZWxpbmUgcHJlcm9sbGVkIGFuZCB3ZSBnZW5lcmF0ZSBhbiBlcnJvci4gQQotICAgKiBiZXR0ZXIgd2F5IGlzIHRvIHJ1biBhIG1haW5sb29wIGFuZCBjYXRjaCBlcnJvcnMgdGhlcmUuICovCi0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIDUgKiBHU1RfU0VDT05EKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICBnX3ByaW50ICgiZmFpbGVkIHRvIHBsYXkgdGhlIGZpbGVcbiIpOwotICAgIGV4aXQgKC0xKTsKLSAgfQotCi0gIC8qIGdldCB0aGUgZHVyYXRpb24gKi8KLSAgZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKHBpcGVsaW5lLCBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbik7Ci0KLSAgaWYgKGR1cmF0aW9uICE9IC0xKQotICAgIC8qIHdlIGhhdmUgYSBkdXJhdGlvbiwgc2VlayB0byA1JSAqLwotICAgIHBvc2l0aW9uID0gZHVyYXRpb24gKiA1IC8gMTAwOwotICBlbHNlCi0gICAgLyogbm8gZHVyYXRpb24sIHNlZWsgdG8gMSBzZWNvbmQsIHRoaXMgY291bGQgRU9TICovCi0gICAgcG9zaXRpb24gPSAxICogR1NUX1NFQ09ORDsKLQotICAvKiBzZWVrIHRvIHRoZSBhIHBvc2l0aW9uIGluIHRoZSBmaWxlLiBNb3N0IGZpbGVzIGhhdmUgYSBibGFjayBmaXJzdCBmcmFtZSBzbwotICAgKiBieSBzZWVraW5nIHRvIHNvbWV3aGVyZSBlbHNlIHdlIGhhdmUgYSBiaWdnZXIgY2hhbmNlIG9mIGdldHRpbmcgc29tZXRoaW5nCi0gICAqIG1vcmUgaW50ZXJlc3RpbmcuIEFuIG9wdGltaXNhdGlvbiB3b3VsZCBiZSB0byBkZXRlY3QgYmxhY2sgaW1hZ2VzIGFuZCB0aGVuCi0gICAqIHNlZWsgYSBsaXR0bGUgbW9yZSAqLwotICBnc3RfZWxlbWVudF9zZWVrX3NpbXBsZSAocGlwZWxpbmUsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgIEdTVF9TRUVLX0ZMQUdfS0VZX1VOSVQgfCBHU1RfU0VFS19GTEFHX0ZMVVNILCBwb3NpdGlvbik7Ci0KLSAgLyogZ2V0IHRoZSBwcmVyb2xsIGJ1ZmZlciBmcm9tIGFwcHNpbmssIHRoaXMgYmxvY2sgdW50aWxzIGFwcHNpbmsgcmVhbGx5Ci0gICAqIHByZXJvbGxzICovCi0gIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAoc2luaywgInB1bGwtcHJlcm9sbCIsICZzYW1wbGUsIE5VTEwpOwotCi0gIC8qIGlmIHdlIGhhdmUgYSBidWZmZXIgbm93LCBjb252ZXJ0IGl0IHRvIGEgcGl4YnVmLiBJdCdzIHBvc3NpYmxlIHRoYXQgd2UKLSAgICogZG9uJ3QgaGF2ZSBhIGJ1ZmZlciBiZWNhdXNlIHdlIHdlbnQgRU9TIHJpZ2h0IGF3YXkgb3IgaGFkIGFuIGVycm9yLiAqLwotICBpZiAoc2FtcGxlKSB7Ci0gICAgR3N0QnVmZmVyICpidWZmZXI7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgICAvKiBnZXQgdGhlIHNuYXBzaG90IGJ1ZmZlciBmb3JtYXQgbm93LiBXZSBzZXQgdGhlIGNhcHMgb24gdGhlIGFwcHNpbmsgc28KLSAgICAgKiB0aGF0IGl0IGNhbiBvbmx5IGJlIGFuIHJnYiBidWZmZXIuIFRoZSBvbmx5IHRoaW5nIHdlIGhhdmUgbm90IHNwZWNpZmllZAotICAgICAqIG9uIHRoZSBjYXBzIGlzIHRoZSBoZWlnaHQsIHdoaWNoIGlzIGRlcGVuZGFudCBvbiB0aGUgcGl4ZWwtYXNwZWN0LXJhdGlvCi0gICAgICogb2YgdGhlIHNvdXJjZSBtYXRlcmlhbCAqLwotICAgIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzIChzYW1wbGUpOwotICAgIGlmICghY2FwcykgewotICAgICAgZ19wcmludCAoImNvdWxkIG5vdCBnZXQgc25hcHNob3QgZm9ybWF0XG4iKTsKLSAgICAgIGV4aXQgKC0xKTsKLSAgICB9Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gICAgLyogd2UgbmVlZCB0byBnZXQgdGhlIGZpbmFsIGNhcHMgb24gdGhlIGJ1ZmZlciB0byBnZXQgdGhlIHNpemUgKi8KLSAgICByZXMgPSBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJ3aWR0aCIsICZ3aWR0aCk7Ci0gICAgcmVzIHw9IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgImhlaWdodCIsICZoZWlnaHQpOwotICAgIGlmICghcmVzKSB7Ci0gICAgICBnX3ByaW50ICgiY291bGQgbm90IGdldCBzbmFwc2hvdCBkaW1lbnNpb25cbiIpOwotICAgICAgZXhpdCAoLTEpOwotICAgIH0KLQotICAgIC8qIGNyZWF0ZSBwaXhtYXAgZnJvbSBidWZmZXIgYW5kIHNhdmUsIGdzdHJlYW1lciB2aWRlbyBidWZmZXJzIGhhdmUgYSBzdHJpZGUKLSAgICAgKiB0aGF0IGlzIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgNCAqLwotICAgIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciAoc2FtcGxlKTsKLSAgICAvKiBNYXBwaW5nIGEgYnVmZmVyIGNhbiBmYWlsIChub24tcmVhZGFibGUpICovCi0gICAgaWYgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCkpIHsKLSNpZmRlZiBIQVZFX0dUSwotICAgICAgcGl4YnVmID0gZ2RrX3BpeGJ1Zl9uZXdfZnJvbV9kYXRhIChtYXAuZGF0YSwKLSAgICAgICAgICBHREtfQ09MT1JTUEFDRV9SR0IsIEZBTFNFLCA4LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgIEdTVF9ST1VORF9VUF80ICh3aWR0aCAqIDMpLCBOVUxMLCBOVUxMKTsKLQotICAgICAgLyogc2F2ZSB0aGUgcGl4YnVmICovCi0gICAgICBnZGtfcGl4YnVmX3NhdmUgKHBpeGJ1ZiwgInNuYXBzaG90LnBuZyIsICJwbmciLCAmZXJyb3IsIE5VTEwpOwotI2VuZGlmCi0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIH0KLSAgICBnc3Rfc2FtcGxlX3VucmVmIChzYW1wbGUpOwotICB9IGVsc2UgewotICAgIGdfcHJpbnQgKCJjb3VsZCBub3QgbWFrZSBzbmFwc2hvdFxuIik7Ci0gIH0KLQotICAvKiBjbGVhbnVwIGFuZCBleGl0ICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotCi0gIGV4aXQgKDApOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2FwcHNyYy5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2FwcHNyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTI5N2QxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9hcHBzcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLQotLyoqKiBibG9jayAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbCAqKiovCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1zdGF0aWMgR01haW5Mb29wICpsb29wOwotCi1zdGF0aWMgdm9pZAotY2JfbmVlZF9kYXRhIChHc3RFbGVtZW50ICphcHBzcmMsCi0JICAgICAgZ3VpbnQgICAgICAgdW51c2VkX3NpemUsCi0JICAgICAgZ3BvaW50ZXIgICAgdXNlcl9kYXRhKQotewotICBzdGF0aWMgZ2Jvb2xlYW4gd2hpdGUgPSBGQUxTRTsKLSAgc3RhdGljIEdzdENsb2NrVGltZSB0aW1lc3RhbXAgPSAwOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgZ3VpbnQgc2l6ZTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgc2l6ZSA9IDM4NSAqIDI4OCAqIDI7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemUsIE5VTEwpOwotCi0gIC8qIHRoaXMgbWFrZXMgdGhlIGltYWdlIGJsYWNrL3doaXRlICovCi0gIGdzdF9idWZmZXJfbWVtc2V0IChidWZmZXIsIDAsIHdoaXRlID8gMHhmZiA6IDB4MCwgc2l6ZSk7Ci0KLSAgd2hpdGUgPSAhd2hpdGU7Ci0KLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSB0aW1lc3RhbXA7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICgxLCBHU1RfU0VDT05ELCAyKTsKLQotICB0aW1lc3RhbXAgKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLQotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKGFwcHNyYywgInB1c2gtYnVmZmVyIiwgYnVmZmVyLCAmcmV0KTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgLyogc29tZXRoaW5nIHdyb25nLCBzdG9wIHB1c2hpbmcgKi8KLSAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgfQotfQotCi1naW50Ci1tYWluIChnaW50ICAgYXJnYywKLSAgICAgIGdjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqYXBwc3JjLCAqY29udiwgKnZpZGVvc2luazsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIC8qIHNldHVwIHBpcGVsaW5lICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGFwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImFwcHNyYyIsICJzb3VyY2UiKTsKLSAgY29udiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvY29udmVydCIsICJjb252Iik7Ci0gIHZpZGVvc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInh2aW1hZ2VzaW5rIiwgInZpZGVvc2luayIpOwotCi0gIC8qIHNldHVwICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGFwcHNyYyksICJjYXBzIiwKLSAgCQlnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1yYXciLAotCQkJCSAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJSR0IxNiIsCi0JCQkJICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAzODQsCi0JCQkJICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjg4LAotCQkJCSAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAwLCAxLAotCQkJCSAgICAgTlVMTCksIE5VTEwpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGFwcHNyYywgY29udiwgdmlkZW9zaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChhcHBzcmMsIGNvbnYsIHZpZGVvc2luaywgTlVMTCk7Ci0KLSAgLyogc2V0dXAgYXBwc3JjICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGFwcHNyYyksCi0JCSJzdHJlYW0tdHlwZSIsIDAsCi0JCSJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChhcHBzcmMsICJuZWVkLWRhdGEiLCBHX0NBTExCQUNLIChjYl9uZWVkX2RhdGEpLCBOVUxMKTsKLQotICAvKiBwbGF5ICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICByZXR1cm4gMDsKLSAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2Jpbi5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2Jpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGNkYmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9iaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLQotLyoqKiBibG9jayBhICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1iaW5zLnhtbCAqKiovCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1pbnQKLW1haW4gKGludCAgIGFyZ2MsCi0gICAgICBjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKmJpbiwgKnBpcGVsaW5lLCAqc291cmNlLCAqc2luazsKLQotICAvKiBpbml0ICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJteV9waXBlbGluZSIpOwotICBiaW4gPSBnc3RfYmluX25ldyAoIm15X2JpbiIpOwotICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNvdXJjZSIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotCi0gIC8qIEZpcnN0IGFkZCB0aGUgZWxlbWVudHMgdG8gdGhlIGJpbiAqLwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBzb3VyY2UsIHNpbmssIE5VTEwpOwotICAvKiBhZGQgdGhlIGJpbiB0byB0aGUgcGlwZWxpbmUgKi8KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYmluKTsKLQotICAvKiBsaW5rIHRoZSBlbGVtZW50cyAqLwotICBnc3RfZWxlbWVudF9saW5rIChzb3VyY2UsIHNpbmspOwotCi0vKioqIGJsb2NrIGIgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWJpbnMueG1sICoqKi8KLSAgcmV0dXJuIDA7Ci0KLS8qKiogYmxvY2sgYyAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9iYXNpY3MtYmlucy54bWwgKioqLwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2Jsb2NrcHJvYmUuYyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9ibG9ja3Byb2JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmODEwZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2Jsb2NrcHJvYmUuYworKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0KLS8qKiogYmxvY2sgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtZGF0YWFjY2Vzcy54bWwgKioqLwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotc3RhdGljIEdNYWluTG9vcCAqbG9vcDsKLXN0YXRpYyB2b2xhdGlsZSBnaW50IGNvdW50ZXI7Ci1zdGF0aWMgR3N0QnVzICpidXM7Ci1zdGF0aWMgZ2Jvb2xlYW4gcHJlcm9sbGVkID0gRkFMU0U7Ci1zdGF0aWMgR3N0UGFkICpzaW5rcGFkOwotCi1zdGF0aWMgdm9pZAotZGVjX2NvdW50ZXIgKEdzdEVsZW1lbnQgKiBwaXBlbGluZSkKLXsKLSAgaWYgKHByZXJvbGxlZCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZjb3VudGVyKSkgewotICAgIC8qIGFsbCBwcm9iZXMgYmxvY2tlZCBhbmQgbm8tbW9yZS1wYWRzIHNpZ25hbGVkLCBwb3N0Ci0gICAgICogbWVzc2FnZSBvbiB0aGUgYnVzLiAqLwotICAgIHByZXJvbGxlZCA9IFRSVUU7Ci0KLSAgICBnc3RfYnVzX3Bvc3QgKGJ1cywgZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uICgKLSAgICAgICAgICBHU1RfT0JKRUNUX0NBU1QgKHBpcGVsaW5lKSwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoIkV4UHJlcm9sbGVkIikpKTsKLSAgfQotfQotCi0vKiBjYWxsZWQgd2hlbiBhIHNvdXJjZSBwYWQgb2YgdXJpZGVjb2RlYmluIGlzIGJsb2NrZWQgKi8KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotY2JfYmxvY2tlZCAoR3N0UGFkICAgICAgICAgICpwYWQsCi0gICAgICAgICAgICBHc3RQYWRQcm9iZUluZm8gKmluZm8sCi0gICAgICAgICAgICBncG9pbnRlciAgICAgICAgIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUgPSBHU1RfRUxFTUVOVCAodXNlcl9kYXRhKTsKLQotICBpZiAocHJlcm9sbGVkKQotICAgIHJldHVybiBHU1RfUEFEX1BST0JFX1JFTU9WRTsKLQotICBkZWNfY291bnRlciAocGlwZWxpbmUpOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi0vKiBjYWxsZWQgd2hlbiB1cmlkZWNvZGViaW4gaGFzIGEgbmV3IHBhZCAqLwotc3RhdGljIHZvaWQKLWNiX3BhZF9hZGRlZCAoR3N0RWxlbWVudCAqZWxlbWVudCwKLSAgICAgICAgICAgICAgR3N0UGFkICAgICAqcGFkLAotICAgICAgICAgICAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gR1NUX0VMRU1FTlQgKHVzZXJfZGF0YSk7Ci0KLSAgaWYgKHByZXJvbGxlZCkKLSAgICByZXR1cm47Ci0KLSAgZ19hdG9taWNfaW50X2luYyAoJmNvdW50ZXIpOwotCi0gIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS19ET1dOU1RSRUFNLAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGNiX2Jsb2NrZWQsIHBpcGVsaW5lLCBOVUxMKTsKLQotICAvKiB0cnkgdG8gbGluayB0byB0aGUgdmlkZW8gcGFkICovCi0gIGdzdF9wYWRfbGluayAocGFkLCBzaW5rcGFkKTsKLX0KLQotLyogY2FsbGVkIHdoZW4gdXJpZGVjb2RlYmluIGhhcyBjcmVhdGVkIGFsbCBwYWRzICovCi1zdGF0aWMgdm9pZAotY2Jfbm9fbW9yZV9wYWRzIChHc3RFbGVtZW50ICplbGVtZW50LAotICAgICAgICAgICAgICAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gR1NUX0VMRU1FTlQgKHVzZXJfZGF0YSk7Ci0KLSAgaWYgKHByZXJvbGxlZCkKLSAgICByZXR1cm47Ci0KLSAgZGVjX2NvdW50ZXIgKHBpcGVsaW5lKTsKLX0KLQotLyogY2FsbGVkIHdoZW4gYSBuZXcgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlIGJ1cyAqLwotc3RhdGljIHZvaWQKLWNiX21lc3NhZ2UgKEdzdEJ1cyAgICAgKmJ1cywKLSAgICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCi0gICAgICAgICAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gR1NUX0VMRU1FTlQgKHVzZXJfZGF0YSk7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgICBnX3ByaW50ICgid2UgcmVjZWl2ZWQgYW4gZXJyb3IhXG4iKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICBnX3ByaW50ICgid2UgcmVhY2hlZCBFT1NcbiIpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OOgotICAgIHsKLSAgICAgIGlmIChnc3RfbWVzc2FnZV9oYXNfbmFtZSAobWVzc2FnZSwgIkV4UHJlcm9sbGVkIikpIHsKLSAgICAgICAgLyogaXQncyBvdXIgbWVzc2FnZSAqLwotICAgICAgICBnX3ByaW50ICgid2UgYXJlIGFsbCBwcmVyb2xsZWQsIGRvIHNlZWtcbiIpOwotICAgICAgICBnc3RfZWxlbWVudF9zZWVrIChwaXBlbGluZSwKLSAgICAgICAgICAgIDEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUsCi0gICAgICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMiAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgNSAqIEdTVF9TRUNPTkQpOwotCi0gICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotZ2ludAotbWFpbiAoZ2ludCAgIGFyZ2MsCi0gICAgICBnY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKmNzcCwgKnZzLCAqc2luazsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIGlmIChhcmdjIDwgMikgewotICAgIGdfcHJpbnQgKCJ1c2FnZTogJXMgPHVyaT4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBidWlsZCAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJteS1waXBlbGluZSIpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZSIsIChHQ2FsbGJhY2spIGNiX21lc3NhZ2UsCi0gICAgICBwaXBlbGluZSk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidXJpZGVjb2RlYmluIiwgInNyYyIpOwotICBpZiAoc3JjID09IE5VTEwpCi0gICAgZ19lcnJvciAoIkNvdWxkIG5vdCBjcmVhdGUgJ3VyaWRlY29kZWJpbicgZWxlbWVudCIpOwotCi0gIGdfb2JqZWN0X3NldCAoc3JjLCAidXJpIiwgYXJndlsxXSwgTlVMTCk7Ci0KLSAgY3NwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jb252ZXJ0IiwgImNzcCIpOwotICBpZiAoY3NwID09IE5VTEwpCi0gICAgZ19lcnJvciAoIkNvdWxkIG5vdCBjcmVhdGUgJ3ZpZGVvY29udmVydCcgZWxlbWVudCIpOwotCi0gIHZzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9zY2FsZSIsICJ2cyIpOwotICBpZiAoY3NwID09IE5VTEwpCi0gICAgZ19lcnJvciAoIkNvdWxkIG5vdCBjcmVhdGUgJ3ZpZGVvc2NhbGUnIGVsZW1lbnQiKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXV0b3ZpZGVvc2luayIsICJzaW5rIik7Ci0gIGlmIChzaW5rID09IE5VTEwpCi0gICAgZ19lcnJvciAoIkNvdWxkIG5vdCBjcmVhdGUgJ2F1dG92aWRlb3NpbmsnIGVsZW1lbnQiKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgY3NwLCB2cywgc2luaywgTlVMTCk7Ci0KLSAgLyogY2FuJ3QgbGluayBzcmMgeWV0LCBpdCBoYXMgbm8gcGFkcyAqLwotICBnc3RfZWxlbWVudF9saW5rX21hbnkgKGNzcCwgdnMsIHNpbmssIE5VTEwpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoY3NwLCAic2luayIpOwotCi0gIC8qIGZvciBlYWNoIHBhZCBibG9jayB0aGF0IGlzIGluc3RhbGxlZCwgd2Ugd2lsbCBpbmNyZW1lbnQKLSAgICogdGhlIGNvdW50ZXIuIGZvciBlYWNoIHBhZCBibG9jayB0aGF0IGlzIHNpZ25hbGVkLCB3ZQotICAgKiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIuIFdoZW4gdGhlIGNvdW50ZXIgaXMgMCB3ZSBwb3N0Ci0gICAqIGFuIGFwcCBtZXNzYWdlIHRvIHRlbGwgdGhlIGFwcCB0aGF0IGFsbCBwYWRzIGFyZQotICAgKiBibG9ja2VkLiBTdGFydCB3aXRoIDEgdGhhdCBpcyBkZWNyZW1lbnRlZCB3aGVuIG5vLW1vcmUtcGFkcwotICAgKiBpcyBzaWduYWxlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBvbmx5IHBvc3QgdGhlIG1lc3NhZ2UKLSAgICogYWZ0ZXIgbm8tbW9yZS1wYWRzICovCi0gIGdfYXRvbWljX2ludF9zZXQgKCZjb3VudGVyLCAxKTsKLQotICBnX3NpZ25hbF9jb25uZWN0IChzcmMsICJwYWQtYWRkZWQiLAotICAgICAgKEdDYWxsYmFjaykgY2JfcGFkX2FkZGVkLCBwaXBlbGluZSk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHNyYywgIm5vLW1vcmUtcGFkcyIsCi0gICAgICAoR0NhbGxiYWNrKSBjYl9ub19tb3JlX3BhZHMsIHBpcGVsaW5lKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvZGVjb2RlYmluLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZGVjb2RlYmluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxOGYyYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2RlY29kZWJpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLQotLyoqKiBibG9jayBhICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1wbGF5YmFjay54bWwgKioqLwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotLyoqKiBibG9jayBiICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1wbGF5YmFjay54bWwgKioqLwotc3RhdGljIGdib29sZWFuCi1teV9idXNfY2FsbGJhY2sgKEdzdEJ1cyAgICAgKmJ1cywKLQkJIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCi0JCSBncG9pbnRlciAgICBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSBkYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7Ci0gICAgICBHRXJyb3IgKmVycjsKLSAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZlcnIsICZkZWJ1Zyk7Ci0gICAgICBnX3ByaW50ICgiRXJyb3I6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgLyogZW5kLW9mLXN0cmVhbSAqLwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyogdW5oYW5kbGVkIG1lc3NhZ2UgKi8KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogcmVtb3ZlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUgKi8KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKiogYmxvY2sgYyAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9oaWdobGV2ZWwtcGxheWJhY2sueG1sICoqKi8KLUdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqYXVkaW87Ci0KLXN0YXRpYyB2b2lkCi1jYl9uZXdwYWQgKEdzdEVsZW1lbnQgKmRlY29kZWJpbiwKLQkgICBHc3RQYWQgICAgICpwYWQsCi0JICAgZ3BvaW50ZXIgICAgZGF0YSkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHI7Ci0gIEdzdFBhZCAqYXVkaW9wYWQ7Ci0KLSAgLyogb25seSBsaW5rIG9uY2UgKi8KLSAgYXVkaW9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYXVkaW8sICJzaW5rIik7Ci0gIGlmIChHU1RfUEFEX0lTX0xJTktFRCAoYXVkaW9wYWQpKSB7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGF1ZGlvcGFkKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBjaGVjayBtZWRpYSB0eXBlICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHBhZCwgTlVMTCk7Ci0gIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBpZiAoIWdfc3RycnN0ciAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RyKSwgImF1ZGlvIikpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoYXVkaW9wYWQpOwotICAgIHJldHVybjsKLSAgfQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogbGluayduJ3BsYXkgKi8KLSAgZ3N0X3BhZF9saW5rIChwYWQsIGF1ZGlvcGFkKTsKLQotICBnX29iamVjdF91bnJlZiAoYXVkaW9wYWQpOwotfQotCi1naW50Ci1tYWluIChnaW50ICAgYXJnYywKLSAgICAgIGdjaGFyICphcmd2W10pCi17Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0RWxlbWVudCAqc3JjLCAqZGVjLCAqY29udiwgKnNpbms7Ci0gIEdzdFBhZCAqYXVkaW9wYWQ7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogbWFrZSBzdXJlIHdlIGhhdmUgaW5wdXQgKi8KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgPGZpbGVuYW1lPlxuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogc2V0dXAgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAic291cmNlIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJsb2NhdGlvbiIsIGFyZ3ZbMV0sIE5VTEwpOwotICBkZWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWNvZGViaW4iLCAiZGVjb2RlciIpOwotICBnX3NpZ25hbF9jb25uZWN0IChkZWMsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChjYl9uZXdwYWQpLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGRlYywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyYywgZGVjKTsKLQotICAvKiBjcmVhdGUgYXVkaW8gb3V0cHV0ICovCi0gIGF1ZGlvID0gZ3N0X2Jpbl9uZXcgKCJhdWRpb2JpbiIpOwotICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImFjb252Iik7Ci0gIGF1ZGlvcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGNvbnYsICJzaW5rIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhbHNhc2luayIsICJzaW5rIik7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGF1ZGlvKSwgY29udiwgc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKGNvbnYsIHNpbmspOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChhdWRpbywKLSAgICAgIGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIGF1ZGlvcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGF1ZGlvcGFkKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgYXVkaW8pOwotCi0gIC8qIHJ1biAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvZHluZm9ybWF0LmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZHluZm9ybWF0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OWEzNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2R5bmZvcm1hdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotCi0vKioqIGJsb2NrICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sICoqKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2RlZmluZSBNQVhfUk9VTkQgMTAwCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHc3RFbGVtZW50ICpwaXBlLCAqZmlsdGVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgeGRpciwgeWRpcjsKLSAgZ2ludCByb3VuZDsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBwaXBlID0gZ3N0X3BhcnNlX2xhdW5jaF9mdWxsICgidmlkZW90ZXN0c3JjICEgY2Fwc2ZpbHRlciBuYW1lPWZpbHRlciAhICIKLSAgICAgICAgICAgICAieGltYWdlc2luayIsIE5VTEwsIEdTVF9QQVJTRV9GTEFHX05PTkUsIE5VTEwpOwotICBnX2Fzc2VydCAocGlwZSAhPSBOVUxMKTsKLQotICBmaWx0ZXIgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlKSwgImZpbHRlciIpOwotICBnX2Fzc2VydCAoZmlsdGVyKTsKLQotICB3aWR0aCA9IDMyMDsKLSAgaGVpZ2h0ID0gMjQwOwotICB4ZGlyID0geWRpciA9IC0xMDsKLQotICBmb3IgKHJvdW5kID0gMDsgcm91bmQgPCBNQVhfUk9VTkQ7IHJvdW5kKyspIHsKLSAgICBnY2hhciAqY2Fwc3N0cjsKLSAgICBnX3ByaW50ICgicmVzaXplIHRvICVkeCVkICglZC8lZCkgICBcciIsIHdpZHRoLCBoZWlnaHQsIHJvdW5kLCBNQVhfUk9VTkQpOwotCi0gICAgLyogd2UgcHJlZmVyIG91ciBmaXhlZCB3aWR0aCBhbmQgaGVpZ2h0IGJ1dCBhbGxvdyBvdGhlciBkaW1lbnNpb25zIHRvIHBhc3MKLSAgICAgKiBhcyB3ZWxsICovCi0gICAgY2Fwc3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoInZpZGVvL3gtcmF3LCB3aWR0aD0oaW50KSVkLCBoZWlnaHQ9KGludCklZCIsCi0gICAgICAgIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzc3RyKTsKLSAgICBnX2ZyZWUgKGNhcHNzdHIpOwotICAgIGdfb2JqZWN0X3NldCAoZmlsdGVyLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGlmIChyb3VuZCA9PSAwKQotICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgICB3aWR0aCArPSB4ZGlyOwotICAgIGlmICh3aWR0aCA+PSAzMjApCi0gICAgICB4ZGlyID0gLTEwOwotICAgIGVsc2UgaWYgKHdpZHRoIDwgMjAwKQotICAgICAgeGRpciA9IDEwOwotCi0gICAgaGVpZ2h0ICs9IHlkaXI7Ci0gICAgaWYgKGhlaWdodCA+PSAyNDApCi0gICAgICB5ZGlyID0gLTEwOwotICAgIGVsc2UgaWYgKGhlaWdodCA8IDE1MCkKLSAgICAgIHlkaXIgPSAxMDsKLQotICAgIG1lc3NhZ2UgPQotICAgICAgICBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZSksIEdTVF9NRVNTQUdFX0VSUk9SLAotICAgICAgICA1MCAqIEdTVF9NU0VDT05EKTsKLSAgICBpZiAobWVzc2FnZSkgewotICAgICAgZ19wcmludCAoImdvdCBlcnJvciAgICAgICAgICAgXG4iKTsKLQotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgIH0KLSAgfQotICBnX3ByaW50ICgiZG9uZSAgICAgICAgICAgICAgICAgICAgXG4iKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChmaWx0ZXIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvZWZmZWN0c3dpdGNoLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZWZmZWN0c3dpdGNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMGU1NmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VmZmVjdHN3aXRjaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLQotLyoqKiBibG9jayAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1kYXRhYWNjZXNzLnhtbCAqKiovCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1zdGF0aWMgZ2NoYXIgKm9wdF9lZmZlY3RzID0gTlVMTDsKLQotI2RlZmluZSBERUZBVUxUX0VGRkVDVFMgImlkZW50aXR5LGV4Y2x1c2lvbixuYXZpZ2F0aW9udGVzdCwiIFwKLSAgICAiYWdpbmd0dix2aWRlb2ZsaXAsdmVydGlnb3R2LGdhdXNzaWFuYmx1cixzaGFnYWRlbGljdHYsZWRnZXR2IgotCi1zdGF0aWMgR3N0UGFkICpibG9ja3BhZDsKLXN0YXRpYyBHc3RFbGVtZW50ICpjb252X2JlZm9yZTsKLXN0YXRpYyBHc3RFbGVtZW50ICpjb252X2FmdGVyOwotc3RhdGljIEdzdEVsZW1lbnQgKmN1cl9lZmZlY3Q7Ci1zdGF0aWMgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0KLXN0YXRpYyBHUXVldWUgZWZmZWN0cyA9IEdfUVVFVUVfSU5JVDsKLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1ldmVudF9wcm9iZV9jYiAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IHVzZXJfZGF0YTsKLSAgR3N0RWxlbWVudCAqbmV4dDsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKEdTVF9QQURfUFJPQkVfSU5GT19EQVRBIChpbmZvKSkgIT0gR1NUX0VWRU5UX0VPUykKLSAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9QQVNTOwotCi0gIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfSU5GT19JRCAoaW5mbykpOwotCi0gIC8qIHB1c2ggY3VycmVudCBlZmZlY3QgYmFjayBpbnRvIHRoZSBxdWV1ZSAqLwotICBnX3F1ZXVlX3B1c2hfdGFpbCAoJmVmZmVjdHMsIGdzdF9vYmplY3RfcmVmIChjdXJfZWZmZWN0KSk7Ci0gIC8qIHRha2UgbmV4dCBlZmZlY3QgZnJvbSB0aGUgcXVldWUgKi8KLSAgbmV4dCA9IGdfcXVldWVfcG9wX2hlYWQgKCZlZmZlY3RzKTsKLSAgaWYgKG5leHQgPT0gTlVMTCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5vIG1vcmUgZWZmZWN0cyIpOwotICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgIHJldHVybiBHU1RfUEFEX1BST0JFX0RST1A7Ci0gIH0KLQotICBnX3ByaW50ICgiU3dpdGNoaW5nIGZyb20gJyVzJyB0byAnJXMnLi5cbiIsIEdTVF9PQkpFQ1RfTkFNRSAoY3VyX2VmZmVjdCksCi0gICAgICBHU1RfT0JKRUNUX05BTUUgKG5leHQpKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGN1cl9lZmZlY3QsIEdTVF9TVEFURV9OVUxMKTsKLQotICAvKiByZW1vdmUgdW5saW5rcyBhdXRvbWF0aWNhbGx5ICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAicmVtb3ZpbmcgJSIgR1NUX1BUUl9GT1JNQVQsIGN1cl9lZmZlY3QpOwotICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAocGlwZWxpbmUpLCBjdXJfZWZmZWN0KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwaXBlbGluZSwgImFkZGluZyAgICUiIEdTVF9QVFJfRk9STUFULCBuZXh0KTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgbmV4dCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGlwZWxpbmUsICJsaW5raW5nLi4iKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChjb252X2JlZm9yZSwgbmV4dCwgY29udl9hZnRlciwgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChuZXh0LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgY3VyX2VmZmVjdCA9IG5leHQ7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBpcGVsaW5lLCAiZG9uZSIpOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX0RST1A7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcGFkX3Byb2JlX2NiIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBhZCBpcyBibG9ja2VkIG5vdyIpOwotCi0gIC8qIHJlbW92ZSB0aGUgcHJvYmUgZmlyc3QgKi8KLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHBhZCwgR1NUX1BBRF9QUk9CRV9JTkZPX0lEIChpbmZvKSk7Ci0KLSAgLyogaW5zdGFsbCBuZXcgcHJvYmUgZm9yIEVPUyAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoY3VyX2VmZmVjdCwgInNyYyIpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0sgfAotICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sIGV2ZW50X3Byb2JlX2NiLCB1c2VyX2RhdGEsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIC8qIHB1c2ggRU9TIGludG8gdGhlIGVsZW1lbnQsIHRoZSBwcm9iZSB3aWxsIGJlIGZpcmVkIHdoZW4gdGhlCi0gICAqIEVPUyBsZWF2ZXMgdGhlIGVmZmVjdCBhbmQgaXQgaGFzIHRodXMgZHJhaW5lZCBhbGwgb2YgaXRzIGRhdGEgKi8KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChjdXJfZWZmZWN0LCAic2luayIpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotdGltZW91dF9jYiAoZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnc3RfcGFkX2FkZF9wcm9iZSAoYmxvY2twYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS19ET1dOU1RSRUFNLAotICAgICAgcGFkX3Byb2JlX2NiLCB1c2VyX2RhdGEsIE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1c19jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IHVzZXJfZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICAgIGdjaGFyICpkYmc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsICZkYmcpOwotICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChtc2ctPnNyYywgZXJyLCBkYmcpOwotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICBnX2ZyZWUgKGRiZyk7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHT3B0aW9uRW50cnkgb3B0aW9uc1tdID0gewotICAgIHsiZWZmZWN0cyIsICdlJywgMCwgR19PUFRJT05fQVJHX1NUUklORywgJm9wdF9lZmZlY3RzLAotICAgICAgICAiRWZmZWN0cyB0byB1c2UgKGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGVsZW1lbnQgbmFtZXMpIiwgTlVMTH0sCi0gICAge05VTEx9Ci0gIH07Ci0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgR01haW5Mb29wICpsb29wOwotICBHc3RFbGVtZW50ICpzcmMsICpxMSwgKnEyLCAqZWZmZWN0LCAqZmlsdGVyMSwgKmZpbHRlcjIsICpzaW5rOwotICBnY2hhciAqKmVmZmVjdF9uYW1lcywgKiplOwotCi0gIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBOVUxMKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0gIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYXJnYywgJmFyZ3YsICZlcnIpKSB7Ci0gICAgZ19wcmludCAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotICAgIHJldHVybiAxOwotICB9Ci0gIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLQotICBpZiAob3B0X2VmZmVjdHMgIT0gTlVMTCkKLSAgICBlZmZlY3RfbmFtZXMgPSBnX3N0cnNwbGl0IChvcHRfZWZmZWN0cywgIiwiLCAtMSk7Ci0gIGVsc2UKLSAgICBlZmZlY3RfbmFtZXMgPSBnX3N0cnNwbGl0IChERUZBVUxUX0VGRkVDVFMsICIsIiwgLTEpOwotCi0gIGZvciAoZSA9IGVmZmVjdF9uYW1lczsgZSAhPSBOVUxMICYmICplICE9IE5VTEw7ICsrZSkgewotICAgIEdzdEVsZW1lbnQgKmVsOwotCi0gICAgZWwgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCplLCBOVUxMKTsKLSAgICBpZiAoZWwpIHsKLSAgICAgIGdfcHJpbnQgKCJBZGRpbmcgZWZmZWN0ICclcydcbiIsICplKTsKLSAgICAgIGdfcXVldWVfcHVzaF90YWlsICgmZWZmZWN0cywgZWwpOwotICAgIH0KLSAgfQotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAiaXMtbGl2ZSIsIFRSVUUsIE5VTEwpOwotCi0gIGZpbHRlcjEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgTlVMTCk7Ci0gIGdzdF91dGlsX3NldF9vYmplY3RfYXJnIChHX09CSkVDVCAoZmlsdGVyMSksICJjYXBzIiwKLSAgICAgICJ2aWRlby94LXJhdywgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiZm9ybWF0PXsgSTQyMCwgWVYxMiwgWVVZMiwgVVlWWSwgQVlVViwgWTQxQiwgWTQyQiwgIgotICAgICAgIllWWVUsIFk0NDQsIHYyMTAsIHYyMTYsIE5WMTIsIE5WMjEsIFVZVlAsIEE0MjAsIFlVVjksIFlWVTksIElZVTEgfSIpOwotCi0gIHExID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKLQotICBibG9ja3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChxMSwgInNyYyIpOwotCi0gIGNvbnZfYmVmb3JlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jb252ZXJ0IiwgTlVMTCk7Ci0KLSAgZWZmZWN0ID0gZ19xdWV1ZV9wb3BfaGVhZCAoJmVmZmVjdHMpOwotICBjdXJfZWZmZWN0ID0gZWZmZWN0OwotCi0gIGNvbnZfYWZ0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb2NvbnZlcnQiLCBOVUxMKTsKLQotICBxMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCk7Ci0KLSAgZmlsdGVyMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNhcHNmaWx0ZXIiLCBOVUxMKTsKLSAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcgKEdfT0JKRUNUIChmaWx0ZXIyKSwgImNhcHMiLAotICAgICAgInZpZGVvL3gtcmF3LCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJmb3JtYXQ9eyBSR0J4LCBCR1J4LCB4UkdCLCB4QkdSLCBSR0JBLCBCR1JBLCBBUkdCLCBBQkdSLCBSR0IsIEJHUiB9Iik7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInhpbWFnZXNpbmsiLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgZmlsdGVyMSwgcTEsIGNvbnZfYmVmb3JlLCBlZmZlY3QsCi0gICAgICBjb252X2FmdGVyLCBxMiwgc2luaywgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIGZpbHRlcjEsIHExLCBjb252X2JlZm9yZSwgZWZmZWN0LCBjb252X2FmdGVyLAotICAgICAgcTIsIHNpbmssIE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgZ3N0X2J1c19hZGRfd2F0Y2ggKEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpLCBidXNfY2IsIGxvb3ApOwotCi0gIGdfdGltZW91dF9hZGRfc2Vjb25kcyAoMSwgdGltZW91dF9jYiwgbG9vcCk7Ci0KLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50Y3JlYXRlLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvZWxlbWVudGNyZWF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGQ5MDQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50Y3JlYXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0KLS8qKiogYmxvY2sgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbCAqKiovCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1pbnQKLW1haW4gKGludCAgIGFyZ2MsCi0gICAgICBjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OwotICBHc3RFbGVtZW50ICogZWxlbWVudDsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBjcmVhdGUgZWxlbWVudCwgbWV0aG9kICMyICovCi0gIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCJmYWtlc3JjIik7Ci0gIGlmICghZmFjdG9yeSkgewotICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gZmluZCBmYWN0b3J5IG9mIHR5cGUgJ2Zha2VzcmMnXG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCAic291cmNlIik7Ci0gIGlmICghZWxlbWVudCkgewotICAgIGdfcHJpbnQgKCJGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQsIGV2ZW4gdGhvdWdoIGl0cyBmYWN0b3J5IGV4aXN0cyFcbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50ZmFjdG9yeS5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRmYWN0b3J5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNDI4NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRmYWN0b3J5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0KLS8qKiogYmxvY2sgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbCAqKiovCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1pbnQKLW1haW4gKGludCAgIGFyZ2MsCi0gICAgICBjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGdldCBmYWN0b3J5ICovCi0gIGZhY3RvcnkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQgKCJmYWtlc3JjIik7Ci0gIGlmICghZmFjdG9yeSkgewotICAgIGdfcHJpbnQgKCJZb3UgZG9uJ3QgaGF2ZSB0aGUgJ2Zha2VzcmMnIGVsZW1lbnQgaW5zdGFsbGVkIVxuIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogZGlzcGxheSBpbmZvcm1hdGlvbiAqLwotICBnX3ByaW50ICgiVGhlICclcycgZWxlbWVudCBpcyBhIG1lbWJlciBvZiB0aGUgY2F0ZWdvcnkgJXMuXG4iCi0gICAgICAgICAgICJEZXNjcmlwdGlvbjogJXNcbiIsCi0gICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoR1NUX1BMVUdJTl9GRUFUVVJFIChmYWN0b3J5KSksCi0gICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhIChmYWN0b3J5LCBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyksCi0gICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhIChmYWN0b3J5LCBHU1RfRUxFTUVOVF9NRVRBREFUQV9ERVNDUklQVElPTikpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRnZXQuYyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50Z2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMGU2ZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRnZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLQotLyoqKiBibG9jayAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sICoqKi8KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLWludAotbWFpbiAoaW50ICAgYXJnYywKLSAgICAgIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgZ2NoYXIgKm5hbWU7Ci0KLSAgLyogaW5pdCBHU3RyZWFtZXIgKi8KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgLyogY3JlYXRlIGVsZW1lbnQgKi8KLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAic291cmNlIik7Ci0KLSAgLyogZ2V0IG5hbWUgKi8KLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoZWxlbWVudCksICJuYW1lIiwgJm5hbWUsIE5VTEwpOwotICBnX3ByaW50ICgiVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgaXMgJyVzJy5cbiIsIG5hbWUpOwotICBnX2ZyZWUgKG5hbWUpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50bGluay5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRsaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNWM2YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2VsZW1lbnRsaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0KLS8qKiogYmxvY2sgYSAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9iYXNpY3MtZWxlbWVudHMueG1sICoqKi8KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLWludAotbWFpbiAoaW50ICAgYXJnYywKLSAgICAgIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKnNvdXJjZSwgKmZpbHRlciwgKnNpbms7Ci0KLSAgLyogaW5pdCAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBjcmVhdGUgcGlwZWxpbmUgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgibXktcGlwZWxpbmUiKTsKLQotICAvKiBjcmVhdGUgZWxlbWVudHMgKi8KLSAgc291cmNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzb3VyY2UiKTsKLSAgZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCAiZmlsdGVyIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0KLSAgLyogbXVzdCBhZGQgZWxlbWVudHMgdG8gcGlwZWxpbmUgYmVmb3JlIGxpbmtpbmcgdGhlbSAqLwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNvdXJjZSwgZmlsdGVyLCBzaW5rLCBOVUxMKTsKLQotICAvKiBsaW5rICovCi0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19tYW55IChzb3VyY2UsIGZpbHRlciwgc2luaywgTlVMTCkpIHsKLSAgICBnX3dhcm5pbmcgKCJGYWlsZWQgdG8gbGluayBlbGVtZW50cyEiKTsKLSAgfQotCi0vKioqIGJsb2NrIGIgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbCAqKiovCi0gIHJldHVybiAwOwotCi0vKioqIGJsb2NrIGMgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWVsZW1lbnRzLnhtbCAqKiovCi19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvZWxlbWVudG1ha2UuYyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50bWFrZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWUyZTA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9lbGVtZW50bWFrZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotCi0vKioqIGJsb2NrICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1lbGVtZW50cy54bWwgKioqLwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBlbGVtZW50ICovCi0gIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNvdXJjZSIpOwotICBpZiAoIWVsZW1lbnQpIHsKLSAgICBnX3ByaW50ICgiRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50IG9mIHR5cGUgJ2Zha2VzcmMnXG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChlbGVtZW50KSk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvZXh0cmFjdC5wbCBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9leHRyYWN0LnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhNGI3YzFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9leHRyYWN0LnBsCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0KLSMgZXh0cmFjdCBjb2RlIGZyYWdtZW50cyBmcm9tIHhtbCBwcm9ncmFtIGxpc3RpbmdzCi0jIGZpcnN0IGFyZ3VtZW50OiBzb3VyY2UgY29kZSBmaWxlIHRvIGZpbmQKLSMgc2Vjb25kIGFyZ3VtZW50OiB4bWwgZmlsZXMgdG8gZXh0cmFjdCBjb2RlIGZyb20KLQotIyBtYWluCi0KLSMgZGVjb2RlcyB4bWwgYnkgdHJhbnNsYXRpbmcgJmFtcDsgJmx0OyAmZ3Q7IGJhY2sgdG8gd2hhdCB0aGV5IHNob3VsZCBiZQotIyBhbmQgYWxzbyBpZ25vcmUKLSMgPCFbQ0RBVEFbIGFuZCBdXT4gYW5kIDwhLS0gYW5kIC0tPgotc3ViCi14bWxfZGVjb2RlICgkKQotewotICBteSAkaW5wdXQgPSBzaGlmdDsKLQotICAkaW5wdXQgPX4gcy9cJmFtcDsvJi9nOwotICAkaW5wdXQgPX4gcy8mbHQ7LzwvZzsKLSAgJGlucHV0ID1+IHMvJmd0Oy8+L2c7Ci0KLSAgaWYgKCRpbnB1dCA9fiAvPCFcW0NEQVRBXFsvKSB7ICRpbnB1dCA9ICIiOyB9Ci0gIGlmICgkaW5wdXQgPX4gL11dPi8pIHsgJGlucHV0ID0gIiI7IH0KLSAgaWYgKCRpbnB1dCA9fiAvPCEtLS8pIHsgJGlucHV0ID0gIiI7IH0KLSAgaWYgKCRpbnB1dCA9fiAvLS0+LykgeyAkaW5wdXQgPSAiIjsgfQotCi0gICNwcmludCAiUmV0dXJuaW5nIGxpbmUgJGlucHV0IjsKLSAgcmV0dXJuICRpbnB1dDsKLX0KLQotIyBtYWluCi1teSAkb3V0cHV0ID0gc2hpZnQgQEFSR1Y7Ci1teSAkb3V0cHV0bmFtZTsKLQotIyBzdHJpcCBwYXRoIHBhcnRzCi1pZiAoJG91dHB1dCA9fiBtLy4qXC8oLiopJC8pCi17Ci0gICRvdXRwdXRuYW1lID0gJDE7Ci19Ci1lbHNlCi17Ci0gICRvdXRwdXRuYW1lID0gJG91dHB1dDsKLX0KLQotJGZvdW5kID0gMDsKLSVibG9ja3MgPSAoKTsKLQotZm9yZWFjaCAkZmlsZSAoQEFSR1YpCi17Ci0gIG9wZW4gRklMRSwgJGZpbGUgb3IgZGllICJDYW5ub3Qgb3BlbiBmaWxlICRmaWxlIjsKLQotICB3aGlsZSAoJGxpbmUgPSA8RklMRT4pCi0gIHsKLSAgICBpZiAoJGxpbmUgPX4gLzwhLS0gZXhhbXBsZS1iZWdpbiAkb3V0cHV0bmFtZSAoLio/KS0tPi8pCi0gICAgewotICAgICAgJGZvdW5kID0gMTsKLSAgICAgICRibG9ja19pZCA9ICQxOwotICAgICAgJGJsb2NrID0gIlxuLyoqKiBibG9jayAkYmxvY2tfaWQgZnJvbSAkZmlsZSAqKiovXG4iOwotCi0gICAgICBwcmludCAiRXh0cmFjdGluZyAkb3V0cHV0bmFtZSBibG9jayAkYmxvY2tfaWQgZnJvbSAkZmlsZVxuIjsKLQotICAgICAgd2hpbGUgKCRsaW5lID0gPEZJTEU+KQotICAgICAgewotICAgICAgICBpZiAoJGxpbmUgPX4gLzwhLS0gZXhhbXBsZS1lbmQgJG91dHB1dG5hbWUgKC4qPyktLT4vKQotICAgICAgICB7Ci0gICAgICAgICAgbGFzdDsKLSAgICAgICAgfQotICAgICAgICAkYmxvY2sgLj0geG1sX2RlY29kZSAoJGxpbmUpOwotICAgICAgfQotICAgICAgJGJsb2Nrc3skYmxvY2tfaWR9ID0gJGJsb2NrOwotICAgIH0KLSAgfQotfQotCi0KLWlmICghJGZvdW5kKQotewotICBwcmludCAiQ291bGQgbm90IGZpbmQgJG91dHB1dG5hbWUgZXhhbXBsZSAhXG4iOwotICBleGl0KDEpOwotfQotCi0jIG5vdyBvdXRwdXQgYWxsIHRoZSBibG9ja3MgaW4gdGhlIHJpZ2h0IG9yZGVyCi1vcGVuIE9VVFBVVCwgIj4kb3V0cHV0IjsKLUBibG9ja19pZHMgPSBrZXlzICVibG9ja3M7Ci1mb3JlYWNoICRibG9ja19pZCAoc29ydCBAYmxvY2tfaWRzKQotewotICBwcmludCAiV3JpdGluZyAkb3V0cHV0IGJsb2NrICRibG9ja19pZFxuIjsKLSAgcHJpbnQgT1VUUFVUICRibG9ja3N7JGJsb2NrX2lkfTsKLX0KLWNsb3NlIE9VVFBVVDsKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9naG9zdHBhZC5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2dob3N0cGFkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkY2M0YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2dob3N0cGFkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0KLS8qKiogYmxvY2sgYSAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWwgKioqLwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpiaW4sICpzaW5rOwotICBHc3RQYWQgKnBhZDsKLQotICAvKiBpbml0ICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBlbGVtZW50LCBhZGQgdG8gYmluICovCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGJpbiA9IGdzdF9iaW5fbmV3ICgibXliaW4iKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIHNpbmspOwotCi0gIC8qIGFkZCBnaG9zdHBhZCAqLwotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGFkKSk7Ci0KLS8qKiogYmxvY2sgYiAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9iYXNpY3MtcGFkcy54bWwgKioqLwotICByZXR1cm4gMDsKLQotLyoqKiBibG9jayBjICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbCAqKiovCi19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvaGVsbG93b3JsZC5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL2hlbGxvd29ybGQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhOWFiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvaGVsbG93b3JsZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLQotLyoqKiBibG9jayAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9iYXNpY3MtaGVsbG93b3JsZC54bWwgKioqLwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLQotc3RhdGljIGdib29sZWFuCi1idXNfY2FsbCAoR3N0QnVzICAgICAqYnVzLAotICAgICAgICAgIEdzdE1lc3NhZ2UgKm1zZywKLSAgICAgICAgICBncG9pbnRlciAgICBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIGRhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7Ci0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIGdfcHJpbnQgKCJFbmQgb2Ygc3RyZWFtXG4iKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7Ci0gICAgICBnY2hhciAgKmRlYnVnOwotICAgICAgR0Vycm9yICplcnJvcjsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVycm9yLCAmZGVidWcpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0KLSAgICAgIGdfcHJpbnRlcnIgKCJFcnJvcjogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotCi0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgdm9pZAotb25fcGFkX2FkZGVkIChHc3RFbGVtZW50ICplbGVtZW50LAotICAgICAgICAgICAgICBHc3RQYWQgICAgICpwYWQsCi0gICAgICAgICAgICAgIGdwb2ludGVyICAgIGRhdGEpCi17Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0RWxlbWVudCAqZGVjb2RlciA9IChHc3RFbGVtZW50ICopIGRhdGE7Ci0KLSAgLyogV2UgY2FuIG5vdyBsaW5rIHRoaXMgcGFkIHdpdGggdGhlIHZvcmJpcy1kZWNvZGVyIHNpbmsgcGFkICovCi0gIGdfcHJpbnQgKCJEeW5hbWljIHBhZCBjcmVhdGVkLCBsaW5raW5nIGRlbXV4ZXIvZGVjb2RlclxuIik7Ci0KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkZWNvZGVyLCAic2luayIpOwotCi0gIGdzdF9wYWRfbGluayAocGFkLCBzaW5rcGFkKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLX0KLQotCi0KLWludAotbWFpbiAoaW50ICAgYXJnYywKLSAgICAgIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR01haW5Mb29wICpsb29wOwotCi0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc291cmNlLCAqZGVtdXhlciwgKmRlY29kZXIsICpjb252LCAqc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIGd1aW50IGJ1c193YXRjaF9pZDsKLQotICAvKiBJbml0aWFsaXNhdGlvbiAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLQotICAvKiBDaGVjayBpbnB1dCBhcmd1bWVudHMgKi8KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnRlcnIgKCJVc2FnZTogJXMgPE9nZy9Wb3JiaXMgZmlsZW5hbWU+XG4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotCi0gIC8qIENyZWF0ZSBnc3RyZWFtZXIgZWxlbWVudHMgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgiYXVkaW8tcGxheWVyIik7Ci0gIHNvdXJjZSAgID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNyYyIsICAgICAgICJmaWxlLXNvdXJjZSIpOwotICBkZW11eGVyICA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm9nZ2RlbXV4IiwgICAgICAib2dnLWRlbXV4ZXIiKTsKLSAgZGVjb2RlciAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2b3JiaXNkZWMiLCAgICAgInZvcmJpcy1kZWNvZGVyIik7Ci0gIGNvbnYgICAgID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgICJjb252ZXJ0ZXIiKTsKLSAgc2luayAgICAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdXRvYXVkaW9zaW5rIiwgImF1ZGlvLW91dHB1dCIpOwotCi0gIGlmICghcGlwZWxpbmUgfHwgIXNvdXJjZSB8fCAhZGVtdXhlciB8fCAhZGVjb2RlciB8fCAhY29udiB8fCAhc2luaykgewotICAgIGdfcHJpbnRlcnIgKCJPbmUgZWxlbWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZC4gRXhpdGluZy5cbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIFNldCB1cCB0aGUgcGlwZWxpbmUgKi8KLQotICAvKiB3ZSBzZXQgdGhlIGlucHV0IGZpbGVuYW1lIHRvIHRoZSBzb3VyY2UgZWxlbWVudCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzb3VyY2UpLCAibG9jYXRpb24iLCBhcmd2WzFdLCBOVUxMKTsKLQotICAvKiB3ZSBhZGQgYSBtZXNzYWdlIGhhbmRsZXIgKi8KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgYnVzX3dhdGNoX2lkID0gZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgYnVzX2NhbGwsIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIC8qIHdlIGFkZCBhbGwgZWxlbWVudHMgaW50byB0aGUgcGlwZWxpbmUgKi8KLSAgLyogZmlsZS1zb3VyY2UgfCBvZ2ctZGVtdXhlciB8IHZvcmJpcy1kZWNvZGVyIHwgY29udmVydGVyIHwgYWxzYS1vdXRwdXQgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLAotICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGRlbXV4ZXIsIGRlY29kZXIsIGNvbnYsIHNpbmssIE5VTEwpOwotCi0gIC8qIHdlIGxpbmsgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyICovCi0gIC8qIGZpbGUtc291cmNlIC0+IG9nZy1kZW11eGVyIH4+IHZvcmJpcy1kZWNvZGVyIC0+IGNvbnZlcnRlciAtPiBhbHNhLW91dHB1dCAqLwotICBnc3RfZWxlbWVudF9saW5rIChzb3VyY2UsIGRlbXV4ZXIpOwotICBnc3RfZWxlbWVudF9saW5rX21hbnkgKGRlY29kZXIsIGNvbnYsIHNpbmssIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChkZW11eGVyLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAob25fcGFkX2FkZGVkKSwgZGVjb2Rlcik7Ci0KLSAgLyogbm90ZSB0aGF0IHRoZSBkZW11eGVyIHdpbGwgYmUgbGlua2VkIHRvIHRoZSBkZWNvZGVyIGR5bmFtaWNhbGx5LgotICAgICBUaGUgcmVhc29uIGlzIHRoYXQgT2dnIG1heSBjb250YWluIHZhcmlvdXMgc3RyZWFtcyAoZm9yIGV4YW1wbGUKLSAgICAgYXVkaW8gYW5kIHZpZGVvKS4gVGhlIHNvdXJjZSBwYWQocykgd2lsbCBiZSBjcmVhdGVkIGF0IHJ1biB0aW1lLAotICAgICBieSB0aGUgZGVtdXhlciB3aGVuIGl0IGRldGVjdHMgdGhlIGFtb3VudCBhbmQgbmF0dXJlIG9mIHN0cmVhbXMuCi0gICAgIFRoZXJlZm9yZSB3ZSBjb25uZWN0IGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBleGVjdXRlZAotICAgICB3aGVuIHRoZSAicGFkLWFkZGVkIiBpcyBlbWl0dGVkLiovCi0KLQotICAvKiBTZXQgdGhlIHBpcGVsaW5lIHRvICJwbGF5aW5nIiBzdGF0ZSovCi0gIGdfcHJpbnQgKCJOb3cgcGxheWluZzogJXNcbiIsIGFyZ3ZbMV0pOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLQotICAvKiBJdGVyYXRlICovCi0gIGdfcHJpbnQgKCJSdW5uaW5nLi4uXG4iKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotCi0gIC8qIE91dCBvZiB0aGUgbWFpbiBsb29wLCBjbGVhbiB1cCBuaWNlbHkgKi8KLSAgZ19wcmludCAoIlJldHVybmVkLCBzdG9wcGluZyBwbGF5YmFja1xuIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnX3ByaW50ICgiRGVsZXRpbmcgcGlwZWxpbmVcbiIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOwotICBnX3NvdXJjZV9yZW1vdmUgKGJ1c193YXRjaF9pZCk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9pbml0LmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvaW5pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDUzMDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0KLS8qKiogYmxvY2sgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLWluaXQueG1sICoqKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotaW50Ci1tYWluIChpbnQgICBhcmdjLAotICAgICAgY2hhciAqYXJndltdKQotewotICBjb25zdCBnY2hhciAqbmFub19zdHI7Ci0gIGd1aW50IG1ham9yLCBtaW5vciwgbWljcm8sIG5hbm87Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgZ3N0X3ZlcnNpb24gKCZtYWpvciwgJm1pbm9yLCAmbWljcm8sICZuYW5vKTsKLQotICBpZiAobmFubyA9PSAxKQotICAgIG5hbm9fc3RyID0gIihDVlMpIjsKLSAgZWxzZSBpZiAobmFubyA9PSAyKQotICAgIG5hbm9fc3RyID0gIihQcmVyZWxlYXNlKSI7Ci0gIGVsc2UKLSAgICBuYW5vX3N0ciA9ICIiOwotCi0gIHByaW50ZiAoIlRoaXMgcHJvZ3JhbSBpcyBsaW5rZWQgYWdhaW5zdCBHU3RyZWFtZXIgJWQuJWQuJWQgJXNcbiIsCi0gICAgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybywgbmFub19zdHIpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL25vcmVidWZmZXIuYyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9ub3JlYnVmZmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDQ0MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL25vcmVidWZmZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0KLS8qKiogYmxvY2sgYSAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1idWZmZXJpbmcueG1sICoqKi8KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdzdFN0YXRlIHRhcmdldF9zdGF0ZTsKLXN0YXRpYyBnYm9vbGVhbiBpc19saXZlOwotc3RhdGljIGdib29sZWFuIGlzX2J1ZmZlcmluZzsKLQotc3RhdGljIGdib29sZWFuCi1idWZmZXJfdGltZW91dCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUgPSBkYXRhOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIGJ1c3k7Ci0gIGdpbnQgcGVyY2VudDsKLSAgZ2ludDY0IGVzdGltYXRlZF90b3RhbDsKLSAgZ2ludDY0IHBvc2l0aW9uLCBkdXJhdGlvbjsKLSAgZ3VpbnQ2NCBwbGF5X2xlZnQ7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyAoR1NUX0ZPUk1BVF9USU1FKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5IChwaXBlbGluZSwgcXVlcnkpKQotICAgIHJldHVybiBUUlVFOwotCi0gIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudCAocXVlcnksICZidXN5LCAmcGVyY2VudCk7Ci0gIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UgKHF1ZXJ5LCBOVUxMLCBOVUxMLCBOVUxMLCAmZXN0aW1hdGVkX3RvdGFsKTsKLQotICBpZiAoZXN0aW1hdGVkX3RvdGFsID09IC0xKQotICAgIGVzdGltYXRlZF90b3RhbCA9IDA7Ci0KLSAgLyogY2FsY3VsYXRlIHRoZSByZW1haW5pbmcgcGxheWJhY2sgdGltZSAqLwotICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChwaXBlbGluZSwgR1NUX0ZPUk1BVF9USU1FLCAmcG9zaXRpb24pKQotICAgIHBvc2l0aW9uID0gLTE7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKHBpcGVsaW5lLCBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbikpCi0gICAgZHVyYXRpb24gPSAtMTsKLQotICBpZiAoZHVyYXRpb24gIT0gLTEgJiYgcG9zaXRpb24gIT0gLTEpCi0gICAgcGxheV9sZWZ0ID0gR1NUX1RJTUVfQVNfTVNFQ09ORFMgKGR1cmF0aW9uIC0gcG9zaXRpb24pOwotICBlbHNlCi0gICAgcGxheV9sZWZ0ID0gMDsKLQotICBnX21lc3NhZ2UgKCJwbGF5X2xlZnQgJSIgR19HVUlOVDY0X0ZPUk1BVCIsIGVzdGltYXRlZF90b3RhbCAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCBwZXJjZW50ICVkIiwgcGxheV9sZWZ0LCBlc3RpbWF0ZWRfdG90YWwsIHBlcmNlbnQpOwotCi0gIC8qIHdlIGFyZSBidWZmZXJpbmcgb3IgdGhlIGVzdGltYXRlZCBkb3dubG9hZCB0aW1lIGlzIGJpZ2dlciB0aGFuIHRoZQotICAgKiByZW1haW5pbmcgcGxheWJhY2sgdGltZS4gV2Uga2VlcCBidWZmZXJpbmcuICovCi0gIGlzX2J1ZmZlcmluZyA9IChidXN5IHx8IGVzdGltYXRlZF90b3RhbCAqIDEuMSA+IHBsYXlfbGVmdCk7Ci0KLSAgaWYgKCFpc19idWZmZXJpbmcpCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgdGFyZ2V0X3N0YXRlKTsKLQotICByZXR1cm4gaXNfYnVmZmVyaW5nOwotfQotCi1zdGF0aWMgdm9pZAotb25fbWVzc2FnZV9idWZmZXJpbmcgKEdzdEJ1cyAqYnVzLCBHc3RNZXNzYWdlICptZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gdXNlcl9kYXRhOwotICBnaW50IHBlcmNlbnQ7Ci0KLSAgLyogbm8gc3RhdGUgbWFuYWdlbWVudCBuZWVkZWQgZm9yIGxpdmUgcGlwZWxpbmVzICovCi0gIGlmIChpc19saXZlKQotICAgIHJldHVybjsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcgKG1lc3NhZ2UsICZwZXJjZW50KTsKLQotICBpZiAocGVyY2VudCA8IDEwMCkgewotICAgIC8qIGJ1ZmZlcmluZyBidXN5ICovCi0gICAgaWYgKCFpc19idWZmZXJpbmcpIHsKLSAgICAgIGlzX2J1ZmZlcmluZyA9IFRSVUU7Ci0gICAgICBpZiAodGFyZ2V0X3N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0gICAgICAgIC8qIHdlIHdlcmUgbm90IGJ1ZmZlcmluZyBidXQgUExBWUlORywgUEFVU0UgIHRoZSBwaXBlbGluZS4gKi8KLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9tZXNzYWdlX2FzeW5jX2RvbmUgKEdzdEJ1cyAqYnVzLCBHc3RNZXNzYWdlICptZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lID0gdXNlcl9kYXRhOwotCi0gIGlmICghaXNfYnVmZmVyaW5nKQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIHRhcmdldF9zdGF0ZSk7Ci0gIGVsc2UKLSAgICBnX3RpbWVvdXRfYWRkICg1MDAsIGJ1ZmZlcl90aW1lb3V0LCBwaXBlbGluZSk7Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgICBhcmdjLAotICAgICAgZ2NoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgVVJJICovCi0gIGlmIChhcmdjICE9IDIpIHsKLSAgICBnX3ByaW50ICgiVXNhZ2U6ICVzIDxVUkk+XG4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBzZXQgdXAgKi8KLSAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwbGF5YmluIiwgInBpcGVsaW5lIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHBpcGVsaW5lKSwgInVyaSIsIGFyZ3ZbMV0sIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChwaXBlbGluZSksICJmbGFncyIsIDB4Njk3ICwgTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmJ1ZmZlcmluZyIsCi0gICAgKEdDYWxsYmFjaykgb25fbWVzc2FnZV9idWZmZXJpbmcsIHBpcGVsaW5lKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6YXN5bmMtZG9uZSIsCi0gICAgKEdDYWxsYmFjaykgb25fbWVzc2FnZV9hc3luY19kb25lLCBwaXBlbGluZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgaXNfYnVmZmVyaW5nID0gRkFMU0U7Ci0gIHRhcmdldF9zdGF0ZSA9IEdTVF9TVEFURV9QTEFZSU5HOwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICBzd2l0Y2ggKHJldCkgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOgotICAgICAgaXNfbGl2ZSA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRToKLSAgICAgIGdfd2FybmluZyAoImZhaWxlZCB0byBQQVVTRSIpOwotICAgICAgcmV0dXJuIC0xOwotCi0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Ci0gICAgICBpc19saXZlID0gVFJVRTsKLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogbm93IHJ1biAqLwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIC8qIGFsc28gY2xlYW4gdXAgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwaXBlbGluZSkpOwotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvcGFkLmMgYi90ZXN0cy9leGFtcGxlcy9tYW51YWwvcGFkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YzVjYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3BhZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotCi0vKioqIGJsb2NrIGEgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sICoqKi8KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyB2b2lkCi1jYl9uZXdfcGFkIChHc3RFbGVtZW50ICplbGVtZW50LAotCSAgICBHc3RQYWQgICAgICpwYWQsCi0JICAgIGdwb2ludGVyICAgIGRhdGEpCi17Ci0gIGdjaGFyICpuYW1lOwotCi0gIG5hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChwYWQpOwotICBnX3ByaW50ICgiQSBuZXcgcGFkICVzIHdhcyBjcmVhdGVkXG4iLCBuYW1lKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICAvKiBoZXJlLCB5b3Ugd291bGQgc2V0dXAgYSBuZXcgcGFkIGxpbmsgZm9yIHRoZSBuZXdseSBjcmVhdGVkIHBhZCAqLwotCi0vKioqIGJsb2NrIGIgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYmFzaWNzLXBhZHMueG1sICoqKi8KLX0KLQotaW50IAotbWFpbiAoaW50ICAgYXJnYywKLSAgICAgIGNoYXIgKmFyZ3ZbXSkgCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc291cmNlLCAqZGVtdXg7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLQotICAvKiBpbml0ICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBlbGVtZW50cyAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJteV9waXBlbGluZSIpOwotICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgInNvdXJjZSIpOwotICBnX29iamVjdF9zZXQgKHNvdXJjZSwgImxvY2F0aW9uIiwgYXJndlsxXSwgTlVMTCk7Ci0gIGRlbXV4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgib2dnZGVtdXgiLCAiZGVtdXhlciIpOwotCi0gIC8qIHlvdSB3b3VsZCBub3JtYWxseSBjaGVjayB0aGF0IHRoZSBlbGVtZW50cyB3ZXJlIGNyZWF0ZWQgcHJvcGVybHkgKi8KLQotICAvKiBwdXQgdG9nZXRoZXIgYSBwaXBlbGluZSAqLwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNvdXJjZSwgZGVtdXgsIE5VTEwpOwotICBnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNvdXJjZSwgInNyYyIsIGRlbXV4LCAic2luayIpOwotCi0gIC8qIGxpc3RlbiBmb3IgbmV3bHkgY3JlYXRlZCBwYWRzICovCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGRlbXV4LCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAoY2JfbmV3X3BhZCksIE5VTEwpOwotCi0gIC8qIHN0YXJ0IHRoZSBwaXBlbGluZSAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotICByZXR1cm4gMDsKLQotLyoqKiBibG9jayBkICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2Jhc2ljcy1wYWRzLnhtbCAqKiovCi19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvcGxheWJpbi5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3BsYXliaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUzNGFmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvcGxheWJpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotCi0vKioqIGJsb2NrIGEgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvaGlnaGxldmVsLXBsYXliYWNrLnhtbCAqKiovCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0vKioqIGJsb2NrIGIgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvaGlnaGxldmVsLXBsYXliYWNrLnhtbCAqKiovCi1zdGF0aWMgZ2Jvb2xlYW4KLW15X2J1c19jYWxsYmFjayAoR3N0QnVzICAgICAqYnVzLAotCQkgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLQkJIGdwb2ludGVyICAgIGRhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IGRhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKLSAgICAgIEdFcnJvciAqZXJyOwotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmVyciwgJmRlYnVnKTsKLSAgICAgIGdfcHJpbnQgKCJFcnJvcjogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLQotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICAvKiBlbmQtb2Ytc3RyZWFtICovCi0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiB1bmhhbmRsZWQgbWVzc2FnZSAqLwotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiByZW1vdmUgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZSAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqKiBibG9jayBjICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1wbGF5YmFjay54bWwgKioqLwotZ2ludAotbWFpbiAoZ2ludCAgIGFyZ2MsCi0gICAgICBnY2hhciAqYXJndltdKQotewotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdzdEVsZW1lbnQgKnBsYXk7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYSBVUkkgKi8KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgPFVSST5cbiIsIGFyZ3ZbMF0pOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIHNldCB1cCAqLwotICBwbGF5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGxheWJpbiIsICJwbGF5Iik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHBsYXkpLCAidXJpIiwgYXJndlsxXSwgTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGxheSkpOwotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIC8qIG5vdyBydW4gKi8KLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICAvKiBhbHNvIGNsZWFuIHVwICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChwbGF5KSk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvcGxheXNpbmsuYyBiL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9wbGF5c2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDY5ZWMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9wbGF5c2luay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLQotLyoqKiBibG9jayBhICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1wbGF5YmFjay54bWwgKioqLwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotLyoqKiBibG9jayBiICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2hpZ2hsZXZlbC1wbGF5YmFjay54bWwgKioqLwotc3RhdGljIGdib29sZWFuCi1teV9idXNfY2FsbGJhY2sgKEdzdEJ1cyAgICAgKmJ1cywKLQkJIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCi0JCSBncG9pbnRlciAgICBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSBkYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7Ci0gICAgICBHRXJyb3IgKmVycjsKLSAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZlcnIsICZkZWJ1Zyk7Ci0gICAgICBnX3ByaW50ICgiRXJyb3I6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgLyogZW5kLW9mLXN0cmVhbSAqLwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyogdW5oYW5kbGVkIG1lc3NhZ2UgKi8KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogcmVtb3ZlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUgKi8KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKiogYmxvY2sgYyAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9oaWdobGV2ZWwtcGxheWJhY2sueG1sICoqKi8KLUdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc2luazsKLQotc3RhdGljIHZvaWQKLWNiX3BhZF9hZGRlZCAoR3N0RWxlbWVudCAqZGVjLAotCSAgICAgIEdzdFBhZCAgICAgKnBhZCwKLQkgICAgICBncG9pbnRlciAgICBkYXRhKQotewotICBHc3RDYXBzICpjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cjsKLSAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLQotICAvKiBjaGVjayBtZWRpYSB0eXBlICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHBhZCwgTlVMTCk7Ci0gIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RyKTsKLQotICBrbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoc2luayk7Ci0KLSAgaWYgKGdfc3RyX2hhc19wcmVmaXggKG5hbWUsICJhdWRpbyIpKSB7Ci0gICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgImF1ZGlvX3NpbmsiKTsKLSAgfSBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4IChuYW1lLCAidmlkZW8iKSkgewotICAgIHRlbXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJ2aWRlb19zaW5rIik7Ci0gIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeCAobmFtZSwgInRleHQiKSkgewotICAgIHRlbXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJ0ZXh0X3NpbmsiKTsKLSAgfSBlbHNlIHsKLSAgICB0ZW1wbCA9IE5VTEw7Ci0gIH0KLQotICBpZiAodGVtcGwpIHsKLSAgICBHc3RQYWQgKnNpbmtwYWQ7Ci0KLSAgICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKHNpbmssIHRlbXBsLCBOVUxMLCBOVUxMKTsKLQotICAgIGlmICghZ3N0X3BhZF9pc19saW5rZWQgKHNpbmtwYWQpKQotICAgICAgZ3N0X3BhZF9saW5rIChwYWQsIHNpbmtwYWQpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIH0KLX0KLQotZ2ludAotbWFpbiAoZ2ludCAgIGFyZ2MsCi0gICAgICBnY2hhciAqYXJndltdKQotewotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdzdEVsZW1lbnQgKmRlYzsKLSAgR3N0QnVzICpidXM7Ci0KLSAgLyogaW5pdCBHU3RyZWFtZXIgKi8KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBpbnB1dCAqLwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoIlVzYWdlOiAlcyA8dXJpPlxuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogc2V0dXAgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBteV9idXNfY2FsbGJhY2ssIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGRlYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVyaWRlY29kZWJpbiIsICJzb3VyY2UiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZGVjKSwgInVyaSIsIGFyZ3ZbMV0sIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChkZWMsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChjYl9wYWRfYWRkZWQpLCBOVUxMKTsKLQotICAvKiBjcmVhdGUgYXVkaW8gb3V0cHV0ICovCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwbGF5c2luayIsICJzaW5rIik7Ci0gIGdzdF91dGlsX3NldF9vYmplY3RfYXJnIChHX09CSkVDVCAoc2luayksICJmbGFncyIsICAKLSAgICAgICJzb2Z0LWNvbG9yYmFsYW5jZStzb2Z0LXZvbHVtZSt2aXMrdGV4dCthdWRpbyt2aWRlbyIpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGRlYywgc2luaywgTlVMTCk7Ci0KLSAgLyogcnVuICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9wcm9iZS5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3Byb2JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YTY2NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3Byb2JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotCi0vKioqIGJsb2NrICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLWRhdGFhY2Nlc3MueG1sICoqKi8KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotY2JfaGF2ZV9kYXRhIChHc3RQYWQgICAgICAgICAgKnBhZCwKLSAgICAgICAgICAgICAgR3N0UGFkUHJvYmVJbmZvICppbmZvLAotICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgIHVzZXJfZGF0YSkKLXsKLSAgZ2ludCB4LCB5OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQxNiAqcHRyLCB0OwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBidWZmZXIgPSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSIChpbmZvKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1ZmZlcik7Ci0KLSAgLyogTWFraW5nIGEgYnVmZmVyIHdyaXRhYmxlIGNhbiBmYWlsIChmb3IgZXhhbXBsZSBpZiBpdAotICAgKiBjYW5ub3QgYmUgY29waWVkIGFuZCBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlKQotICAgKi8KLSAgaWYgKGJ1ZmZlciA9PSBOVUxMKQotICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotCi0gIC8qIE1hcHBpbmcgYSBidWZmZXIgY2FuIGZhaWwgKG5vbi13cml0YWJsZSkgKi8KLSAgaWYgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpKSB7Ci0gICAgcHRyID0gKGd1aW50MTYgKikgbWFwLmRhdGE7Ci0gICAgLyogaW52ZXJ0IGRhdGEgKi8KLSAgICBmb3IgKHkgPSAwOyB5IDwgMjg4OyB5KyspIHsKLSAgICAgIGZvciAoeCA9IDA7IHggPCAzODQgLyAyOyB4KyspIHsKLSAgICAgICAgdCA9IHB0clszODQgLSAxIC0geF07Ci0gICAgICAgIHB0clszODQgLSAxIC0geF0gPSBwdHJbeF07Ci0gICAgICAgIHB0clt4XSA9IHQ7Ci0gICAgICB9Ci0gICAgICBwdHIgKz0gMzg0OwotICAgIH0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICB9Ci0KLSAgR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEgKGluZm8pID0gYnVmZmVyOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1naW50Ci1tYWluIChnaW50ICAgYXJnYywKLSAgICAgIGdjaGFyICphcmd2W10pCi17Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpzaW5rLCAqZmlsdGVyLCAqY3NwOwotICBHc3RDYXBzICpmaWx0ZXJjYXBzOwotICBHc3RQYWQgKnBhZDsKLQotICAvKiBpbml0IEdTdHJlYW1lciAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIC8qIGJ1aWxkICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoIm15LXBpcGVsaW5lIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsICJzcmMiKTsKLSAgaWYgKHNyYyA9PSBOVUxMKQotICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlICd2aWRlb3Rlc3RzcmMnIGVsZW1lbnQiKTsKLQotICBmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgImZpbHRlciIpOwotICBnX2Fzc2VydCAoZmlsdGVyICE9IE5VTEwpOyAvKiBzaG91bGQgYWx3YXlzIGV4aXN0ICovCi0KLSAgY3NwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jb252ZXJ0IiwgImNzcCIpOwotICBpZiAoY3NwID09IE5VTEwpCi0gICAgZ19lcnJvciAoIkNvdWxkIG5vdCBjcmVhdGUgJ3ZpZGVvY29udmVydCcgZWxlbWVudCIpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ4dmltYWdlc2luayIsICJzaW5rIik7Ci0gIGlmIChzaW5rID09IE5VTEwpIHsKLSAgICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgieGltYWdlc2luayIsICJzaW5rIik7Ci0gICAgaWYgKHNpbmsgPT0gTlVMTCkKLSAgICAgIGdfZXJyb3IgKCJDb3VsZCBub3QgY3JlYXRlIG5laXRoZXIgJ3h2aW1hZ2VzaW5rJyBub3IgJ3hpbWFnZXNpbmsnIGVsZW1lbnQiKTsKLSAgfQotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBmaWx0ZXIsIGNzcCwgc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBmaWx0ZXIsIGNzcCwgc2luaywgTlVMTCk7Ci0gIGZpbHRlcmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1yYXciLAotCQkJICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJSR0IxNiIsCi0JCQkgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAzODQsCi0JCQkgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjg4LAotCQkJICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAyNSwgMSwKLQkJCSAgIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChmaWx0ZXIpLCAiY2FwcyIsIGZpbHRlcmNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyY2Fwcyk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYywgInNyYyIpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAocGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGNiX2hhdmVfZGF0YSwgTlVMTCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgLyogcnVuICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAvKiB3YWl0IHVudGlsIGl0J3MgdXAgYW5kIHJ1bm5pbmcgb3IgZmFpbGVkICovCi0gIGlmIChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBnbyBpbnRvIFBMQVlJTkcgc3RhdGUiKTsKLSAgfQotCi0gIGdfcHJpbnQgKCJSdW5uaW5nIC4uLlxuIik7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogZXhpdCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC9xdWVyeS5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3F1ZXJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZWY1NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3F1ZXJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotCi0vKioqIGJsb2NrIGEgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sICoqKi8KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLS8qKiogYmxvY2sgYiAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC1wb3NpdGlvbi54bWwgKioqLwotc3RhdGljIHZvaWQKLW15X2J1c19tZXNzYWdlX2NiIChHc3RCdXMgICAgICpidXMsCi0gICAgICAgICAgICAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIGRhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6IHsKLSAgICAgIEdFcnJvciAqZXJyOwotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmVyciwgJmRlYnVnKTsKLSAgICAgIGdfcHJpbnQgKCJFcnJvcjogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLQotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICAvKiBlbmQtb2Ytc3RyZWFtICovCi0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKioqIGJsb2NrIGMgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sICoqKi8KLXN0YXRpYyBnYm9vbGVhbgotY2JfcHJpbnRfcG9zaXRpb24gKEdzdEVsZW1lbnQgKnBpcGVsaW5lKQotewotICBnaW50NjQgcG9zLCBsZW47Ci0KLSAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChwaXBlbGluZSwgR1NUX0ZPUk1BVF9USU1FLCAmcG9zKQotICAgICYmIGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uIChwaXBlbGluZSwgR1NUX0ZPUk1BVF9USU1FLCAmbGVuKSkgewotICAgIGdfcHJpbnQgKCJUaW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiAvICUiIEdTVF9USU1FX0ZPUk1BVCAiXHIiLAotCSAgICAgR1NUX1RJTUVfQVJHUyAocG9zKSwgR1NUX1RJTUVfQVJHUyAobGVuKSk7Ci0gIH0KLQotICAvKiBjYWxsIG1lIGFnYWluICovCi0gIHJldHVybiBUUlVFOwotfQotCi1naW50Ci1tYWluIChnaW50ICAgYXJnYywKLSAgICAgIGdjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotCi0vKioqIGJsb2NrIGQgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtcG9zaXRpb24ueG1sICoqKi8KLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgR3N0QnVzICpidXM7Ci0gIGdjaGFyICpsOwotCi0gIC8qIGluaXQgKi8KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgLyogYXJncyAqLwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoIlVzYWdlOiAlcyA8ZmlsZW5hbWU+XG4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUsIHRoZSBlYXN5IHdheSAqLwotICBsID0gZ19zdHJkdXBfcHJpbnRmICgiZmlsZXNyYyBsb2NhdGlvbj1cIiVzXCIgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhICIKLQkJICAgICAgICJhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYWxzYXNpbmsiLAotCQkgICAgICAgYXJndlsxXSk7Ci0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAobCwgJmVycik7Ci0gIGlmIChwaXBlbGluZSA9PSBOVUxMIHx8IGVyciAhPSBOVUxMKSB7Ci0gICAgZ19wcmludGVyciAoIkNhbm5vdCBidWlsZCBwaXBlbGluZTogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgIGdfZnJlZSAobCk7Ci0gICAgaWYgKHBpcGVsaW5lKQotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBnX2ZyZWUgKGwpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0sgKG15X2J1c19tZXNzYWdlX2NiKSwgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgLyogcGxheSAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gc2V0IHBpcGVsaW5lIHRvIFBMQVlJTkcuXG4iKTsKLQotLyoqKiBibG9jayBlICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbCAqKiovCi0gIC8qIHJ1biBwaXBlbGluZSAqLwotICBnX3RpbWVvdXRfYWRkICgyMDAsIChHU291cmNlRnVuYykgY2JfcHJpbnRfcG9zaXRpb24sIHBpcGVsaW5lKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotLyoqKiBibG9jayBmICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbCAqKiovCi0gIC8qIGNsZWFuIHVwICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocGlwZWxpbmUpKTsKLQotICByZXR1cm4gMDsKLQotLyoqKiBibG9jayBnICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLXBvc2l0aW9uLnhtbCAqKiovCi19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvdGVzdHJ0cG9vbC5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3Rlc3RydHBvb2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkzOTY5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9tYW51YWwvdGVzdHJ0cG9vbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLQotLyoqKiBibG9jayBhICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sICoqKi8KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNkZWZpbmUgVEVTVF9UWVBFX1JUX1BPT0wgICAgICAgICAgICAgKHRlc3RfcnRfcG9vbF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgVEVTVF9SVF9QT09MKHBvb2wpICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgocG9vbCksIFRFU1RfVFlQRV9SVF9QT09MLCBUZXN0UlRQb29sKSkKLSNkZWZpbmUgVEVTVF9JU19SVF9QT09MKHBvb2wpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgocG9vbCksIFRFU1RfVFlQRV9SVF9QT09MKSkKLSNkZWZpbmUgVEVTVF9SVF9QT09MX0NMQVNTKHBjbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgocGNsYXNzKSwgVEVTVF9UWVBFX1JUX1BPT0wsIFRlc3RSVFBvb2xDbGFzcykpCi0jZGVmaW5lIFRFU1RfSVNfUlRfUE9PTF9DTEFTUyhwY2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKHBjbGFzcyksIFRFU1RfVFlQRV9SVF9QT09MKSkKLSNkZWZpbmUgVEVTVF9SVF9QT09MX0dFVF9DTEFTUyhwb29sKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChwb29sKSwgVEVTVF9UWVBFX1JUX1BPT0wsIFRlc3RSVFBvb2xDbGFzcykpCi0jZGVmaW5lIFRFU1RfUlRfUE9PTF9DQVNUKHBvb2wpICAgICAgICgoVGVzdFJUUG9vbCopKHBvb2wpKQotCi10eXBlZGVmIHN0cnVjdCBfVGVzdFJUUG9vbCBUZXN0UlRQb29sOwotdHlwZWRlZiBzdHJ1Y3QgX1Rlc3RSVFBvb2xDbGFzcyBUZXN0UlRQb29sQ2xhc3M7Ci0KLXN0cnVjdCBfVGVzdFJUUG9vbCB7Ci0gIEdzdFRhc2tQb29sICAgIG9iamVjdDsKLX07Ci0KLXN0cnVjdCBfVGVzdFJUUG9vbENsYXNzIHsKLSAgR3N0VGFza1Bvb2xDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSAgICAgICAgICAgdGVzdF9ydF9wb29sX2dldF90eXBlICAgICh2b2lkKTsKLQotR3N0VGFza1Bvb2wgKiAgIHRlc3RfcnRfcG9vbF9uZXcgICAgICAgICAodm9pZCk7Ci0KLQotLyoqKiBibG9jayBiICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLXRocmVhZHMueG1sICoqKi8KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIHB0aHJlYWRfdCB0aHJlYWQ7Ci19IFRlc3RSVElkOwotCi1HX0RFRklORV9UWVBFIChUZXN0UlRQb29sLCB0ZXN0X3J0X3Bvb2wsIEdTVF9UWVBFX1RBU0tfUE9PTCk7Ci0KLXN0YXRpYyB2b2lkCi1kZWZhdWx0X3ByZXBhcmUgKEdzdFRhc2tQb29sICogcG9vbCwgR0Vycm9yICoqIGVycm9yKQotewotICAvKiB3ZSBkb24ndCBkbyBhbnl0aGluZyBoZXJlLiBXZSBjb3VsZCBjb25zdHJ1Y3QgYSBwb29sIG9mIHRocmVhZHMgaGVyZSB0aGF0Ci0gICAqIHdlIGNvdWxkIHJldXNlIGxhdGVyIGJ1dCB3ZSBkb24ndCAqLwotfQotCi1zdGF0aWMgdm9pZAotZGVmYXVsdF9jbGVhbnVwIChHc3RUYXNrUG9vbCAqIHBvb2wpCi17Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotZGVmYXVsdF9wdXNoIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgZGF0YSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIFRlc3RSVElkICp0aWQ7Ci0gIGdpbnQgcmVzOwotICBwdGhyZWFkX2F0dHJfdCBhdHRyOwotICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07Ci0KLSAgdGlkID0gZ19zbGljZV9uZXcwIChUZXN0UlRJZCk7Ci0KLSAgcHRocmVhZF9hdHRyX2luaXQgKCZhdHRyKTsKLSAgaWYgKChyZXMgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKCZhdHRyLCBTQ0hFRF9SUikpICE9IDApCi0gICAgZ193YXJuaW5nICgic2V0c2NoZWRwb2xpY3k6IGZhaWx1cmU6ICVwIiwgZ19zdHJlcnJvciAocmVzKSk7Ci0KLSAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSA1MDsKLSAgaWYgKChyZXMgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAoJmF0dHIsICZwYXJhbSkpICE9IDApCi0gICAgZ193YXJuaW5nICgic2V0c2NoZWRwYXJhbTogZmFpbHVyZTogJXAiLCBnX3N0cmVycm9yIChyZXMpKTsKLQotICBpZiAoKHJlcyA9IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKCZhdHRyLCBQVEhSRUFEX0VYUExJQ0lUX1NDSEVEKSkgIT0gMCkKLSAgICBnX3dhcm5pbmcgKCJzZXRpbmhlcml0c2NoZWQ6IGZhaWx1cmU6ICVwIiwgZ19zdHJlcnJvciAocmVzKSk7Ci0KLSAgcmVzID0gcHRocmVhZF9jcmVhdGUgKCZ0aWQtPnRocmVhZCwgJmF0dHIsICh2b2lkICooKikodm9pZCAqKSkgZnVuYywgZGF0YSk7Ci0KLSAgaWYgKHJlcyAhPSAwKSB7Ci0gICAgZ19zZXRfZXJyb3IgKGVycm9yLCBHX1RIUkVBRF9FUlJPUiwgR19USFJFQURfRVJST1JfQUdBSU4sCi0gICAgICAgICJFcnJvciBjcmVhdGluZyB0aHJlYWQ6ICVzIiwgZ19zdHJlcnJvciAocmVzKSk7Ci0gICAgZ19zbGljZV9mcmVlIChUZXN0UlRJZCwgdGlkKTsKLSAgICB0aWQgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIHRpZDsKLX0KLQotc3RhdGljIHZvaWQKLWRlZmF1bHRfam9pbiAoR3N0VGFza1Bvb2wgKiBwb29sLCBncG9pbnRlciBpZCkKLXsKLSAgVGVzdFJUSWQgKnRpZCA9IChUZXN0UlRJZCAqKSBpZDsKLQotICBwdGhyZWFkX2pvaW4gKHRpZC0+dGhyZWFkLCBOVUxMKTsKLQotICBnX3NsaWNlX2ZyZWUgKFRlc3RSVElkLCB0aWQpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9ydF9wb29sX2NsYXNzX2luaXQgKFRlc3RSVFBvb2xDbGFzcyAqIGtsYXNzKQotewotICBHc3RUYXNrUG9vbENsYXNzICpnc3R0YXNrcG9vbF9jbGFzczsKLQotICBnc3R0YXNrcG9vbF9jbGFzcyA9IChHc3RUYXNrUG9vbENsYXNzICopIGtsYXNzOwotCi0gIGdzdHRhc2twb29sX2NsYXNzLT5wcmVwYXJlID0gZGVmYXVsdF9wcmVwYXJlOwotICBnc3R0YXNrcG9vbF9jbGFzcy0+Y2xlYW51cCA9IGRlZmF1bHRfY2xlYW51cDsKLSAgZ3N0dGFza3Bvb2xfY2xhc3MtPnB1c2ggPSBkZWZhdWx0X3B1c2g7Ci0gIGdzdHRhc2twb29sX2NsYXNzLT5qb2luID0gZGVmYXVsdF9qb2luOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9ydF9wb29sX2luaXQgKFRlc3RSVFBvb2wgKiBwb29sKQotewotfQotCi1Hc3RUYXNrUG9vbCAqCi10ZXN0X3J0X3Bvb2xfbmV3ICh2b2lkKQotewotICBHc3RUYXNrUG9vbCAqcG9vbDsKLQotICBwb29sID0gZ19vYmplY3RfbmV3IChURVNUX1RZUEVfUlRfUE9PTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHBvb2w7Ci19Ci0KLS8qKiogYmxvY2sgYyAgZnJvbSAuLi8uLi8uLi9kb2NzL21hbnVhbC9hZHZhbmNlZC10aHJlYWRzLnhtbCAqKiovCi1zdGF0aWMgR01haW5Mb29wKiBsb29wOwotCi1zdGF0aWMgdm9pZAotb25fc3RyZWFtX3N0YXR1cyAoR3N0QnVzICAgICAqYnVzLAotICAgICAgICAgICAgICAgICAgR3N0TWVzc2FnZSAqbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIHVzZXJfZGF0YSkKLXsKLSAgR3N0U3RyZWFtU3RhdHVzVHlwZSB0eXBlOwotICBHc3RFbGVtZW50ICpvd25lcjsKLSAgY29uc3QgR1ZhbHVlICp2YWw7Ci0gIEdzdFRhc2sgKnRhc2sgPSBOVUxMOwotCi0gIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKG1lc3NhZ2UsICZ0eXBlLCAmb3duZXIpOwotCi0gIHZhbCA9IGdzdF9tZXNzYWdlX2dldF9zdHJlYW1fc3RhdHVzX29iamVjdCAobWVzc2FnZSk7Ci0KLSAgLyogc2VlIGlmIHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aCB0aGlzIG9iamVjdCAqLwotICBpZiAoR19WQUxVRV9UWVBFICh2YWwpID09IEdTVF9UWVBFX1RBU0spIHsKLSAgICB0YXNrID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWwpOwotICB9Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURToKLSAgICAgIGlmICh0YXNrKSB7Ci0gICAgICAgIEdzdFRhc2tQb29sICpwb29sOwotCi0gICAgICAgIHBvb2wgPSB0ZXN0X3J0X3Bvb2xfbmV3KCk7Ci0KLSAgICAgICAgZ3N0X3Rhc2tfc2V0X3Bvb2wgKHRhc2ssIHBvb2wpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9lcnJvciAoR3N0QnVzICAgICAqYnVzLAotICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2UsCi0gICAgICAgICAgZ3BvaW50ZXIgICAgdXNlcl9kYXRhKQotewotICBnX21lc3NhZ2UgKCJyZWNlaXZlZCBFUlJPUiIpOwotICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2VvcyAoR3N0QnVzICAgICAqYnVzLAotICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlLAotICAgICAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCi17Ci0gIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKmJpbiwgKmZha2VzcmMsICpmYWtlc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBhIG5ldyBiaW4gdG8gaG9sZCB0aGUgZWxlbWVudHMgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGdfYXNzZXJ0IChiaW4pOwotCi0gIC8qIGNyZWF0ZSBhIHNvdXJjZSAqLwotICBmYWtlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJmYWtlc3JjIik7Ci0gIGdfYXNzZXJ0IChmYWtlc3JjKTsKLSAgZ19vYmplY3Rfc2V0IChmYWtlc3JjLCAibnVtLWJ1ZmZlcnMiLCA1MCwgTlVMTCk7Ci0KLSAgLyogYW5kIGEgc2luayAqLwotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2VzaW5rIik7Ci0gIGdfYXNzZXJ0IChmYWtlc2luayk7Ci0KLSAgLyogYWRkIG9iamVjdHMgdG8gdGhlIG1haW4gcGlwZWxpbmUgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOwotCi0gIC8qIGxpbmsgdGhlIGVsZW1lbnRzICovCi0gIGdzdF9lbGVtZW50X2xpbmsgKGZha2VzcmMsIGZha2VzaW5rKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogZ2V0IHRoZSBidXMsIHdlIG5lZWQgdG8gaW5zdGFsbCBhIHN5bmMgaGFuZGxlciAqLwotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChiaW4pKTsKLSAgZ3N0X2J1c19lbmFibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uIChidXMpOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAic3luYy1tZXNzYWdlOjpzdHJlYW0tc3RhdHVzIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3N0cmVhbV9zdGF0dXMsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjplcnJvciIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl9lcnJvciwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVvcyIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl9lb3MsIE5VTEwpOwotCi0gIC8qIHN0YXJ0IHBsYXlpbmcgKi8KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpIHsKLSAgICBnX21lc3NhZ2UgKCJmYWlsZWQgdG8gY2hhbmdlIHN0YXRlIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogUnVuIGV2ZW50IGxvb3AgbGlzdGVuaW5nIGZvciBidXMgbWVzc2FnZXMgdW50aWwgRU9TIG9yIEVSUk9SICovCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogc3RvcCB0aGUgYmluICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21hbnVhbC90eXBlZmluZC5jIGIvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3R5cGVmaW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjI2NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWFudWFsL3R5cGVmaW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotCi0vKioqIGJsb2NrIGEgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbCAqKiovCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0vKioqIGJsb2NrIGIgIGZyb20gLi4vLi4vLi4vZG9jcy9tYW51YWwvYWR2YW5jZWQtYXV0b3BsdWdnaW5nLnhtbCAqKiovCi1zdGF0aWMgZ2Jvb2xlYW4KLW15X2J1c19jYWxsYmFjayAoR3N0QnVzICAgICAqYnVzLAotICAgICAgICAgICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlLAotICAgICAgICAgICAgICAgICBncG9pbnRlciAgICBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSBkYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOiB7Ci0gICAgICBHRXJyb3IgKmVycjsKLSAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZlcnIsICZkZWJ1Zyk7Ci0gICAgICBnX3ByaW50ICgiRXJyb3I6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0KLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgLyogZW5kLW9mLXN0cmVhbSAqLwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiByZW1vdmUgZnJvbSBxdWV1ZSAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqKiBibG9jayBjICBmcm9tIC4uLy4uLy4uL2RvY3MvbWFudWFsL2FkdmFuY2VkLWF1dG9wbHVnZ2luZy54bWwgKioqLwotc3RhdGljIGdib29sZWFuCi1pZGxlX2V4aXRfbG9vcCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ19tYWluX2xvb3BfcXVpdCAoKEdNYWluTG9vcCAqKSBkYXRhKTsKLQotICAvKiBvbmNlICovCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWNiX3R5cGVmb3VuZCAoR3N0RWxlbWVudCAqdHlwZWZpbmQsCi0JICAgICAgZ3VpbnQgICAgICAgcHJvYmFiaWxpdHksCi0JICAgICAgR3N0Q2FwcyAgICAqY2FwcywKLQkgICAgICBncG9pbnRlciAgICBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSBkYXRhOwotICBnY2hhciAqdHlwZTsKLQotICB0eXBlID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzKTsKLSAgZ19wcmludCAoIk1lZGlhIHR5cGUgJXMgZm91bmQsIHByb2JhYmlsaXR5ICVkJSVcbiIsIHR5cGUsIHByb2JhYmlsaXR5KTsKLSAgZ19mcmVlICh0eXBlKTsKLQotICAvKiBzaW5jZSB3ZSBjb25uZWN0IHRvIGEgc2lnbmFsIGluIHRoZSBwaXBlbGluZSB0aHJlYWQgY29udGV4dCwgd2UgbmVlZAotICAgKiB0byBzZXQgYW4gaWRsZSBoYW5kbGVyIHRvIGV4aXQgdGhlIG1haW4gbG9vcCBpbiB0aGUgbWFpbmxvb3AgY29udGV4dC4KLSAgICogTm9ybWFsbHksIHlvdXIgYXBwIHNob3VsZCBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBzdWNoIHRoaW5ncy4gKi8KLSAgZ19pZGxlX2FkZCAoaWRsZV9leGl0X2xvb3AsIGxvb3ApOwotfQotCi1naW50IAotbWFpbiAoZ2ludCAgIGFyZ2MsCi0gICAgICBnY2hhciAqYXJndltdKQotewotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqZmlsZXNyYywgKnR5cGVmaW5kLCAqZmFrZXNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIC8qIGluaXQgR1N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgLyogY2hlY2sgYXJncyAqLwotICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgZ19wcmludCAoIlVzYWdlOiAlcyA8ZmlsZW5hbWU+XG4iLCBhcmd2WzBdKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBjcmVhdGUgYSBuZXcgcGlwZWxpbmUgdG8gaG9sZCB0aGUgZWxlbWVudHMgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZSIpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG15X2J1c19jYWxsYmFjaywgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgLyogY3JlYXRlIGZpbGUgc291cmNlIGFuZCB0eXBlZmluZCBlbGVtZW50ICovCi0gIGZpbGVzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgInNvdXJjZSIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChmaWxlc3JjKSwgImxvY2F0aW9uIiwgYXJndlsxXSwgTlVMTCk7Ci0gIHR5cGVmaW5kID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidHlwZWZpbmQiLCAidHlwZWZpbmRlciIpOwotICBnX3NpZ25hbF9jb25uZWN0ICh0eXBlZmluZCwgImhhdmUtdHlwZSIsIEdfQ0FMTEJBQ0sgKGNiX3R5cGVmb3VuZCksIGxvb3ApOwotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLQotICAvKiBzZXR1cCAqLwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGZpbGVzcmMsIHR5cGVmaW5kLCBmYWtlc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoZmlsZXNyYywgdHlwZWZpbmQsIGZha2VzaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogdW5zZXQgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tZW1vcnkvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9tZW1vcnkvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMzk5YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1ub2luc3RfUFJPR1JBTVMgPSBtZW1vcnlfdGVzdAotCi1tZW1vcnlfdGVzdF9TT1VSQ0VTID0gbWVtb3J5X3Rlc3QuYyBteS1tZW1vcnkuYyBteS1tZW1vcnkuaCBteS12aWRtZW0uYyBteS12aWRtZW0uaAotbWVtb3J5X3Rlc3RfTERBREQgPSAkKEdTVF9PQkpfTElCUykKLW1lbW9yeV90ZXN0X0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tZW1vcnkvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9tZW1vcnkvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzM5MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODQ2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1ub2luc3RfUFJPR1JBTVMgPSBtZW1vcnlfdGVzdCQoRVhFRVhUKQotc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvbWVtb3J5Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYW1fbWVtb3J5X3Rlc3RfT0JKRUNUUyA9IG1lbW9yeV90ZXN0LW1lbW9yeV90ZXN0LiQoT0JKRVhUKSBcCi0JbWVtb3J5X3Rlc3QtbXktbWVtb3J5LiQoT0JKRVhUKSBcCi0JbWVtb3J5X3Rlc3QtbXktdmlkbWVtLiQoT0JKRVhUKQotbWVtb3J5X3Rlc3RfT0JKRUNUUyA9ICQoYW1fbWVtb3J5X3Rlc3RfT0JKRUNUUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1tZW1vcnlfdGVzdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLW1lbW9yeV90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKG1lbW9yeV90ZXN0X0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKG1lbW9yeV90ZXN0X1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKG1lbW9yeV90ZXN0X1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLW1lbW9yeV90ZXN0X1NPVVJDRVMgPSBtZW1vcnlfdGVzdC5jIG15LW1lbW9yeS5jIG15LW1lbW9yeS5oIG15LXZpZG1lbS5jIG15LXZpZG1lbS5oCi1tZW1vcnlfdGVzdF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotbWVtb3J5X3Rlc3RfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL21lbW9yeS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9tZW1vcnkvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLW5vaW5zdFBST0dSQU1TOgotCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLQotbWVtb3J5X3Rlc3QkKEVYRUVYVCk6ICQobWVtb3J5X3Rlc3RfT0JKRUNUUykgJChtZW1vcnlfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbWVtb3J5X3Rlc3RfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgbWVtb3J5X3Rlc3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKG1lbW9yeV90ZXN0X0xJTkspICQobWVtb3J5X3Rlc3RfT0JKRUNUUykgJChtZW1vcnlfdGVzdF9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWVtb3J5X3Rlc3QtbWVtb3J5X3Rlc3QuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21lbW9yeV90ZXN0LW15LW1lbW9yeS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbWVtb3J5X3Rlc3QtbXktdmlkbWVtLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLW1lbW9yeV90ZXN0LW1lbW9yeV90ZXN0Lm86IG1lbW9yeV90ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChtZW1vcnlfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbWVtb3J5X3Rlc3QtbWVtb3J5X3Rlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbWVtb3J5X3Rlc3QtbWVtb3J5X3Rlc3QuVHBvIC1jIC1vIG1lbW9yeV90ZXN0LW1lbW9yeV90ZXN0Lm8gYHRlc3QgLWYgJ21lbW9yeV90ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1lbW9yeV90ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL21lbW9yeV90ZXN0LW1lbW9yeV90ZXN0LlRwbyAkKERFUERJUikvbWVtb3J5X3Rlc3QtbWVtb3J5X3Rlc3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtZW1vcnlfdGVzdC5jJyBvYmplY3Q9J21lbW9yeV90ZXN0LW1lbW9yeV90ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG1lbW9yeV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG1lbW9yeV90ZXN0LW1lbW9yeV90ZXN0Lm8gYHRlc3QgLWYgJ21lbW9yeV90ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1lbW9yeV90ZXN0LmMKLQotbWVtb3J5X3Rlc3QtbWVtb3J5X3Rlc3Qub2JqOiBtZW1vcnlfdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobWVtb3J5X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG1lbW9yeV90ZXN0LW1lbW9yeV90ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvbWVtb3J5X3Rlc3QtbWVtb3J5X3Rlc3QuVHBvIC1jIC1vIG1lbW9yeV90ZXN0LW1lbW9yeV90ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnbWVtb3J5X3Rlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtZW1vcnlfdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9tZW1vcnlfdGVzdC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9tZW1vcnlfdGVzdC1tZW1vcnlfdGVzdC5UcG8gJChERVBESVIpL21lbW9yeV90ZXN0LW1lbW9yeV90ZXN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWVtb3J5X3Rlc3QuYycgb2JqZWN0PSdtZW1vcnlfdGVzdC1tZW1vcnlfdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG1lbW9yeV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG1lbW9yeV90ZXN0LW1lbW9yeV90ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnbWVtb3J5X3Rlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtZW1vcnlfdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9tZW1vcnlfdGVzdC5jJzsgZmlgCi0KLW1lbW9yeV90ZXN0LW15LW1lbW9yeS5vOiBteS1tZW1vcnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG1lbW9yeV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBtZW1vcnlfdGVzdC1teS1tZW1vcnkubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbWVtb3J5X3Rlc3QtbXktbWVtb3J5LlRwbyAtYyAtbyBtZW1vcnlfdGVzdC1teS1tZW1vcnkubyBgdGVzdCAtZiAnbXktbWVtb3J5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG15LW1lbW9yeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9tZW1vcnlfdGVzdC1teS1tZW1vcnkuVHBvICQoREVQRElSKS9tZW1vcnlfdGVzdC1teS1tZW1vcnkuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdteS1tZW1vcnkuYycgb2JqZWN0PSdtZW1vcnlfdGVzdC1teS1tZW1vcnkubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobWVtb3J5X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbWVtb3J5X3Rlc3QtbXktbWVtb3J5Lm8gYHRlc3QgLWYgJ215LW1lbW9yeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BteS1tZW1vcnkuYwotCi1tZW1vcnlfdGVzdC1teS1tZW1vcnkub2JqOiBteS1tZW1vcnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG1lbW9yeV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBtZW1vcnlfdGVzdC1teS1tZW1vcnkub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9tZW1vcnlfdGVzdC1teS1tZW1vcnkuVHBvIC1jIC1vIG1lbW9yeV90ZXN0LW15LW1lbW9yeS5vYmogYGlmIHRlc3QgLWYgJ215LW1lbW9yeS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ215LW1lbW9yeS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9teS1tZW1vcnkuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbWVtb3J5X3Rlc3QtbXktbWVtb3J5LlRwbyAkKERFUERJUikvbWVtb3J5X3Rlc3QtbXktbWVtb3J5LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbXktbWVtb3J5LmMnIG9iamVjdD0nbWVtb3J5X3Rlc3QtbXktbWVtb3J5Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobWVtb3J5X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbWVtb3J5X3Rlc3QtbXktbWVtb3J5Lm9iaiBgaWYgdGVzdCAtZiAnbXktbWVtb3J5LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbXktbWVtb3J5LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL215LW1lbW9yeS5jJzsgZmlgCi0KLW1lbW9yeV90ZXN0LW15LXZpZG1lbS5vOiBteS12aWRtZW0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG1lbW9yeV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBtZW1vcnlfdGVzdC1teS12aWRtZW0ubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbWVtb3J5X3Rlc3QtbXktdmlkbWVtLlRwbyAtYyAtbyBtZW1vcnlfdGVzdC1teS12aWRtZW0ubyBgdGVzdCAtZiAnbXktdmlkbWVtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG15LXZpZG1lbS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9tZW1vcnlfdGVzdC1teS12aWRtZW0uVHBvICQoREVQRElSKS9tZW1vcnlfdGVzdC1teS12aWRtZW0uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdteS12aWRtZW0uYycgb2JqZWN0PSdtZW1vcnlfdGVzdC1teS12aWRtZW0ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobWVtb3J5X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbWVtb3J5X3Rlc3QtbXktdmlkbWVtLm8gYHRlc3QgLWYgJ215LXZpZG1lbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BteS12aWRtZW0uYwotCi1tZW1vcnlfdGVzdC1teS12aWRtZW0ub2JqOiBteS12aWRtZW0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG1lbW9yeV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBtZW1vcnlfdGVzdC1teS12aWRtZW0ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9tZW1vcnlfdGVzdC1teS12aWRtZW0uVHBvIC1jIC1vIG1lbW9yeV90ZXN0LW15LXZpZG1lbS5vYmogYGlmIHRlc3QgLWYgJ215LXZpZG1lbS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ215LXZpZG1lbS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9teS12aWRtZW0uYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbWVtb3J5X3Rlc3QtbXktdmlkbWVtLlRwbyAkKERFUERJUikvbWVtb3J5X3Rlc3QtbXktdmlkbWVtLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbXktdmlkbWVtLmMnIG9iamVjdD0nbWVtb3J5X3Rlc3QtbXktdmlkbWVtLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobWVtb3J5X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbWVtb3J5X3Rlc3QtbXktdmlkbWVtLm9iaiBgaWYgdGVzdCAtZiAnbXktdmlkbWVtLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbXktdmlkbWVtLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL215LXZpZG1lbS5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL21lbW9yeS9tZW1vcnlfdGVzdC5jIGIvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L21lbW9yeV90ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZDlhZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L21lbW9yeV90ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAibXktbWVtb3J5LmgiCi0jaW5jbHVkZSAibXktdmlkbWVtLmgiCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHc3RBbGxvY2F0b3IgKmFsbG9jOwotICBHc3RNZW1vcnkgKm1lbTsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci0gIEdzdE1hcEluZm8gaW5mbzsKLSAgZ3VpbnQgZiwgdywgaDsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBtZW1vcnkgdXNpbmcgdGhlIGRlZmF1bHQgQVBJICovCi0gIG15X21lbW9yeV9pbml0ICgpOwotCi0gIGFsbG9jID0gZ3N0X2FsbG9jYXRvcl9maW5kICgiTXlNZW1vcnkiKTsKLQotICBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdCAoJnBhcmFtcyk7Ci0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKGFsbG9jLCAxMDI0LCAmcGFyYW1zKTsKLQotICBnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbyk7Ci0KLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYWxsb2MpOwotCi0gIC8qIGFsbG9jYXRvciB3aXRoIGN1c3RvbSBhbGxvYyBBUEkgKi8KLSAgbXlfdmlkbWVtX2luaXQgKCk7Ci0KLSAgLyogd2UgY2FuIGdldCB0aGUgYWxsb2NhdG9yIGJ1dCB3ZSBjYW4gb25seSBtYWtlIG9iamVjdHMgZnJvbSBpdCB3aGVuIHdlIGtub3cKLSAgICogdGhlIEFQSSAqLwotICBhbGxvYyA9IGdzdF9hbGxvY2F0b3JfZmluZCAoIk15VmlkbWVtIik7Ci0KLSAgLyogdXNlIGN1c3RvbSBhcGkgdG8gYWxsb2MgKi8KLSAgbWVtID0gbXlfdmlkbWVtX2FsbG9jICgwLCA2NDAsIDQ4MCk7Ci0gIGdfYXNzZXJ0IChteV9pc192aWRtZW0gKG1lbSkpOwotCi0gIG15X3ZpZG1lbV9nZXRfZm9ybWF0IChtZW0sICZmLCAmdywgJmgpOwotICBnX2Fzc2VydCAoZiA9PSAwKTsKLSAgZ19hc3NlcnQgKHcgPT0gNjQwKTsKLSAgZ19hc3NlcnQgKGggPT0gNDgwKTsKLQotICBnc3RfbWVtb3J5X21hcCAobWVtLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmaW5mbyk7Ci0KLSAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYWxsb2MpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LW1lbW9yeS5jIGIvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LW1lbW9yeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzFiN2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21lbW9yeS9teS1tZW1vcnkuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuYmU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgIm15LW1lbW9yeS5oIgotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RNZW1vcnkgbWVtOwotCi0gIGdwb2ludGVyIGRhdGE7Ci0KLX0gTXlNZW1vcnk7Ci0KLQotc3RhdGljIEdzdE1lbW9yeSAqCi1fbXlfYWxsb2MgKEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwgZ3NpemUgc2l6ZSwgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcykKLXsKLSAgTXlNZW1vcnkgKm1lbTsKLSAgZ3NpemUgbWF4c2l6ZSA9IHNpemUgKyBwYXJhbXMtPnByZWZpeCArIHBhcmFtcy0+cGFkZGluZzsKLQotICBHU1RfREVCVUcgKCJhbGxvYyBmcm9tIGFsbG9jYXRvciAlcCIsIGFsbG9jYXRvcik7Ci0KLSAgbWVtID0gZ19zbGljZV9uZXcgKE15TWVtb3J5KTsKLQotICBnc3RfbWVtb3J5X2luaXQgKEdTVF9NRU1PUllfQ0FTVCAobWVtKSwgcGFyYW1zLT5mbGFncywgYWxsb2NhdG9yLCBOVUxMLAotICAgICAgbWF4c2l6ZSwgcGFyYW1zLT5hbGlnbiwgcGFyYW1zLT5wcmVmaXgsIHNpemUpOwotCi0gIG1lbS0+ZGF0YSA9IE5VTEw7Ci0KLSAgcmV0dXJuIChHc3RNZW1vcnkgKikgbWVtOwotfQotCi1zdGF0aWMgdm9pZAotX215X2ZyZWUgKEdzdEFsbG9jYXRvciAqIGFsbG9jYXRvciwgR3N0TWVtb3J5ICogbWVtKQotewotICBNeU1lbW9yeSAqbW1lbSA9IChNeU1lbW9yeSAqKSBtZW07Ci0KLSAgZ19mcmVlIChtbWVtLT5kYXRhKTsKLSAgZ19zbGljZV9mcmVlIChNeU1lbW9yeSwgbW1lbSk7Ci0gIEdTVF9ERUJVRyAoIiVwOiBmcmVlZCIsIG1tZW0pOwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLV9teV9tZW1fbWFwIChNeU1lbW9yeSAqIG1lbSwgZ3NpemUgbWF4c2l6ZSwgR3N0TWFwRmxhZ3MgZmxhZ3MpCi17Ci0gIGdwb2ludGVyIHJlczsKLQotICB3aGlsZSAoVFJVRSkgewotICAgIGlmICgocmVzID0gZ19hdG9taWNfcG9pbnRlcl9nZXQgKCZtZW0tPmRhdGEpKSAhPSBOVUxMKQotICAgICAgYnJlYWs7Ci0KLSAgICByZXMgPSBnX21hbGxvYyAobWF4c2l6ZSk7Ci0KLSAgICBpZiAoZ19hdG9taWNfcG9pbnRlcl9jb21wYXJlX2FuZF9leGNoYW5nZSAoJm1lbS0+ZGF0YSwgTlVMTCwgcmVzKSkKLSAgICAgIGJyZWFrOwotCi0gICAgZ19mcmVlIChyZXMpOwotICB9Ci0KLSAgR1NUX0RFQlVHICgiJXA6IG1hcHBlZCAlcCIsIG1lbSwgcmVzKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV9teV9tZW1fdW5tYXAgKE15TWVtb3J5ICogbWVtKQotewotICBHU1RfREVCVUcgKCIlcDogdW5tYXBwZWQiLCBtZW0pOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIE15TWVtb3J5ICoKLV9teV9tZW1fc2hhcmUgKE15TWVtb3J5ICogbWVtLCBnc3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXplKQotewotICBNeU1lbW9yeSAqc3ViOwotICBHc3RNZW1vcnkgKnBhcmVudDsKLQotICBHU1RfREVCVUcgKCIlcDogc2hhcmUgJSIgR19HU1NJWkVfRk9STUFUICIgJSIgR19HU0laRV9GT1JNQVQsIG1lbSwgb2Zmc2V0LAotICAgICAgc2l6ZSk7Ci0KLSAgLyogZmluZCB0aGUgcmVhbCBwYXJlbnQgKi8KLSAgaWYgKChwYXJlbnQgPSBtZW0tPm1lbS5wYXJlbnQpID09IE5VTEwpCi0gICAgcGFyZW50ID0gKEdzdE1lbW9yeSAqKSBtZW07Ci0KLSAgaWYgKHNpemUgPT0gLTEpCi0gICAgc2l6ZSA9IG1lbS0+bWVtLnNpemUgLSBvZmZzZXQ7Ci0KLSAgc3ViID0gZ19zbGljZV9uZXcgKE15TWVtb3J5KTsKLSAgLyogdGhlIHNoYXJlZCBtZW1vcnkgaXMgYWx3YXlzIHJlYWRvbmx5ICovCi0gIGdzdF9tZW1vcnlfaW5pdCAoR1NUX01FTU9SWV9DQVNUIChzdWIpLCBHU1RfTUlOSV9PQkpFQ1RfRkxBR1MgKHBhcmVudCkgfAotICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfTE9DS19SRUFET05MWSwgbWVtLT5tZW0uYWxsb2NhdG9yLCBwYXJlbnQsCi0gICAgICBtZW0tPm1lbS5tYXhzaXplLCBtZW0tPm1lbS5hbGlnbiwgbWVtLT5tZW0ub2Zmc2V0ICsgb2Zmc2V0LCBzaXplKTsKLQotICAvKiBpbnN0YWxsIHBvaW50ZXIgKi8KLSAgc3ViLT5kYXRhID0gX215X21lbV9tYXAgKG1lbSwgbWVtLT5tZW0ubWF4c2l6ZSwgR1NUX01BUF9SRUFEKTsKLQotICByZXR1cm4gc3ViOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RBbGxvY2F0b3IgcGFyZW50OwotfSBNeU1lbW9yeUFsbG9jYXRvcjsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0QWxsb2NhdG9yQ2xhc3MgcGFyZW50X2NsYXNzOwotfSBNeU1lbW9yeUFsbG9jYXRvckNsYXNzOwotCi1HVHlwZSBteV9tZW1vcnlfYWxsb2NhdG9yX2dldF90eXBlICh2b2lkKTsKLUdfREVGSU5FX1RZUEUgKE15TWVtb3J5QWxsb2NhdG9yLCBteV9tZW1vcnlfYWxsb2NhdG9yLCBHU1RfVFlQRV9BTExPQ0FUT1IpOwotCi1zdGF0aWMgdm9pZAotbXlfbWVtb3J5X2FsbG9jYXRvcl9jbGFzc19pbml0IChNeU1lbW9yeUFsbG9jYXRvckNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEFsbG9jYXRvckNsYXNzICphbGxvY2F0b3JfY2xhc3M7Ci0KLSAgYWxsb2NhdG9yX2NsYXNzID0gKEdzdEFsbG9jYXRvckNsYXNzICopIGtsYXNzOwotCi0gIGFsbG9jYXRvcl9jbGFzcy0+YWxsb2MgPSBfbXlfYWxsb2M7Ci0gIGFsbG9jYXRvcl9jbGFzcy0+ZnJlZSA9IF9teV9mcmVlOwotfQotCi1zdGF0aWMgdm9pZAotbXlfbWVtb3J5X2FsbG9jYXRvcl9pbml0IChNeU1lbW9yeUFsbG9jYXRvciAqIGFsbG9jYXRvcikKLXsKLSAgR3N0QWxsb2NhdG9yICphbGxvYyA9IEdTVF9BTExPQ0FUT1JfQ0FTVCAoYWxsb2NhdG9yKTsKLQotICBhbGxvYy0+bWVtX3R5cGUgPSAiTXlNZW1vcnkiOwotICBhbGxvYy0+bWVtX21hcCA9IChHc3RNZW1vcnlNYXBGdW5jdGlvbikgX215X21lbV9tYXA7Ci0gIGFsbG9jLT5tZW1fdW5tYXAgPSAoR3N0TWVtb3J5VW5tYXBGdW5jdGlvbikgX215X21lbV91bm1hcDsKLSAgYWxsb2MtPm1lbV9zaGFyZSA9IChHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uKSBfbXlfbWVtX3NoYXJlOwotfQotCi12b2lkCi1teV9tZW1vcnlfaW5pdCAodm9pZCkKLXsKLSAgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7Ci0KLSAgYWxsb2NhdG9yID0gZ19vYmplY3RfbmV3IChteV9tZW1vcnlfYWxsb2NhdG9yX2dldF90eXBlICgpLCBOVUxMKTsKLQotICBnc3RfYWxsb2NhdG9yX3JlZ2lzdGVyICgiTXlNZW1vcnkiLCBhbGxvY2F0b3IpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LW1lbW9yeS5oIGIvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LW1lbW9yeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQzZTFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21lbW9yeS9teS1tZW1vcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5iZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0KLS8qIGV4YW1wbGUgb2YgYW4gYWxsb2NhdG9yIHRoYXQgZGVsYXlzIGFsbG9jYXRpb24gb2YgdGhlIG1lbW9yeQotICogdW50aWwgdGhlIG1lbW9yeSBpcyBtYXBwZWQgKi8KLXZvaWQgbXlfbWVtb3J5X2luaXQgKHZvaWQpOwotCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktdmlkbWVtLmMgYi90ZXN0cy9leGFtcGxlcy9tZW1vcnkvbXktdmlkbWVtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMDNhNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LXZpZG1lbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5iZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibXktdmlkbWVtLmgiCi0KLXN0YXRpYyBHc3RBbGxvY2F0b3IgKl9teV9hbGxvY2F0b3I7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdE1lbW9yeSBtZW07Ci0KLSAgZ3VpbnQgZm9ybWF0OwotICBndWludCB3aWR0aDsKLSAgZ3VpbnQgaGVpZ2h0OwotICBncG9pbnRlciBkYXRhOwotCi19IE15VmlkbWVtOwotCi0KLXN0YXRpYyBHc3RNZW1vcnkgKgotX215X2FsbG9jIChHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGdzaXplIHNpemUsIEdzdEFsbG9jYXRpb25QYXJhbXMgKiBwYXJhbXMpCi17Ci0gIGdfd2FybmluZyAoIlVzZSBteV92aWRtZW1fYWxsb2MoKSB0byBhbGxvY2F0ZSBmcm9tIHRoaXMgYWxsb2NhdG9yIik7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fbXlfZnJlZSAoR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLCBHc3RNZW1vcnkgKiBtZW0pCi17Ci0gIE15VmlkbWVtICp2bWVtID0gKE15VmlkbWVtICopIG1lbTsKLQotICBnX2ZyZWUgKHZtZW0tPmRhdGEpOwotICBnX3NsaWNlX2ZyZWUgKE15VmlkbWVtLCB2bWVtKTsKLSAgR1NUX0RFQlVHICgiJXA6IGZyZWVkIiwgdm1lbSk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotX215X3ZpZG1lbV9tYXAgKE15VmlkbWVtICogbWVtLCBnc2l6ZSBtYXhzaXplLCBHc3RNYXBGbGFncyBmbGFncykKLXsKLSAgZ3BvaW50ZXIgcmVzOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgaWYgKChyZXMgPSBnX2F0b21pY19wb2ludGVyX2dldCAoJm1lbS0+ZGF0YSkpICE9IE5VTEwpCi0gICAgICBicmVhazsKLQotICAgIHJlcyA9IGdfbWFsbG9jIChtYXhzaXplKTsKLQotICAgIGlmIChnX2F0b21pY19wb2ludGVyX2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmbWVtLT5kYXRhLCBOVUxMLCByZXMpKQotICAgICAgYnJlYWs7Ci0KLSAgICBnX2ZyZWUgKHJlcyk7Ci0gIH0KLQotICBHU1RfREVCVUcgKCIlcDogbWFwcGVkICVwIiwgbWVtLCByZXMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX215X3ZpZG1lbV91bm1hcCAoTXlWaWRtZW0gKiBtZW0pCi17Ci0gIEdTVF9ERUJVRyAoIiVwOiB1bm1hcHBlZCIsIG1lbSk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgTXlWaWRtZW0gKgotX215X3ZpZG1lbV9zaGFyZSAoTXlWaWRtZW0gKiBtZW0sIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCi17Ci0gIE15VmlkbWVtICpzdWI7Ci0gIEdzdE1lbW9yeSAqcGFyZW50OwotCi0gIEdTVF9ERUJVRyAoIiVwOiBzaGFyZSAlIiBHX0dTU0laRV9GT1JNQVQgIiAlIiBHX0dTSVpFX0ZPUk1BVCwgbWVtLCBvZmZzZXQsCi0gICAgICBzaXplKTsKLQotICAvKiBmaW5kIHRoZSByZWFsIHBhcmVudCAqLwotICBpZiAoKHBhcmVudCA9IG1lbS0+bWVtLnBhcmVudCkgPT0gTlVMTCkKLSAgICBwYXJlbnQgPSAoR3N0TWVtb3J5ICopIG1lbTsKLQotICBpZiAoc2l6ZSA9PSAtMSkKLSAgICBzaXplID0gbWVtLT5tZW0uc2l6ZSAtIG9mZnNldDsKLQotICBzdWIgPSBnX3NsaWNlX25ldyAoTXlWaWRtZW0pOwotICAvKiB0aGUgc2hhcmVkIG1lbW9yeSBpcyBhbHdheXMgcmVhZG9ubHkgKi8KLSAgZ3N0X21lbW9yeV9pbml0IChHU1RfTUVNT1JZX0NBU1QgKHN1YiksIEdTVF9NSU5JX09CSkVDVF9GTEFHUyAocGFyZW50KSB8Ci0gICAgICBHU1RfTUlOSV9PQkpFQ1RfRkxBR19MT0NLX1JFQURPTkxZLCBtZW0tPm1lbS5hbGxvY2F0b3IsIHBhcmVudCwKLSAgICAgIG1lbS0+bWVtLm1heHNpemUsIG1lbS0+bWVtLmFsaWduLCBtZW0tPm1lbS5vZmZzZXQgKyBvZmZzZXQsIHNpemUpOwotCi0gIC8qIGluc3RhbGwgcG9pbnRlciAqLwotICBzdWItPmRhdGEgPSBfbXlfdmlkbWVtX21hcCAobWVtLCBtZW0tPm1lbS5tYXhzaXplLCBHU1RfTUFQX1JFQUQpOwotCi0gIHJldHVybiBzdWI7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEFsbG9jYXRvciBwYXJlbnQ7Ci19IE15VmlkbWVtQWxsb2NhdG9yOwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RBbGxvY2F0b3JDbGFzcyBwYXJlbnRfY2xhc3M7Ci19IE15VmlkbWVtQWxsb2NhdG9yQ2xhc3M7Ci0KLUdUeXBlIG15X3ZpZG1lbV9hbGxvY2F0b3JfZ2V0X3R5cGUgKHZvaWQpOwotR19ERUZJTkVfVFlQRSAoTXlWaWRtZW1BbGxvY2F0b3IsIG15X3ZpZG1lbV9hbGxvY2F0b3IsIEdTVF9UWVBFX0FMTE9DQVRPUik7Ci0KLXN0YXRpYyB2b2lkCi1teV92aWRtZW1fYWxsb2NhdG9yX2NsYXNzX2luaXQgKE15VmlkbWVtQWxsb2NhdG9yQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QWxsb2NhdG9yQ2xhc3MgKmFsbG9jYXRvcl9jbGFzczsKLQotICBhbGxvY2F0b3JfY2xhc3MgPSAoR3N0QWxsb2NhdG9yQ2xhc3MgKikga2xhc3M7Ci0KLSAgYWxsb2NhdG9yX2NsYXNzLT5hbGxvYyA9IF9teV9hbGxvYzsKLSAgYWxsb2NhdG9yX2NsYXNzLT5mcmVlID0gX215X2ZyZWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1teV92aWRtZW1fYWxsb2NhdG9yX2luaXQgKE15VmlkbWVtQWxsb2NhdG9yICogYWxsb2NhdG9yKQotewotICBHc3RBbGxvY2F0b3IgKmFsbG9jID0gR1NUX0FMTE9DQVRPUl9DQVNUIChhbGxvY2F0b3IpOwotCi0gIGFsbG9jLT5tZW1fdHlwZSA9ICJNeVZpZG1lbSI7Ci0gIGFsbG9jLT5tZW1fbWFwID0gKEdzdE1lbW9yeU1hcEZ1bmN0aW9uKSBfbXlfdmlkbWVtX21hcDsKLSAgYWxsb2MtPm1lbV91bm1hcCA9IChHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uKSBfbXlfdmlkbWVtX3VubWFwOwotICBhbGxvYy0+bWVtX3NoYXJlID0gKEdzdE1lbW9yeVNoYXJlRnVuY3Rpb24pIF9teV92aWRtZW1fc2hhcmU7Ci19Ci0KLXZvaWQKLW15X3ZpZG1lbV9pbml0ICh2b2lkKQotewotICBfbXlfYWxsb2NhdG9yID0gZ19vYmplY3RfbmV3IChteV92aWRtZW1fYWxsb2NhdG9yX2dldF90eXBlICgpLCBOVUxMKTsKLQotICBnc3RfYWxsb2NhdG9yX3JlZ2lzdGVyICgiTXlWaWRtZW0iLCBnc3Rfb2JqZWN0X3JlZiAoX215X2FsbG9jYXRvcikpOwotfQotCi1Hc3RNZW1vcnkgKgotbXlfdmlkbWVtX2FsbG9jIChndWludCBmb3JtYXQsIGd1aW50IHdpZHRoLCBndWludCBoZWlnaHQpCi17Ci0gIE15VmlkbWVtICptZW07Ci0gIGdzaXplIG1heHNpemU7Ci0KLSAgR1NUX0RFQlVHICgiYWxsb2MgZnJhbWUgZm9ybWF0ICV1ICV1eCV1IiwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICBtYXhzaXplID0gKEdTVF9ST1VORF9VUF80ICh3aWR0aCkgKiBoZWlnaHQpOwotCi0gIG1lbSA9IGdfc2xpY2VfbmV3IChNeVZpZG1lbSk7Ci0KLSAgZ3N0X21lbW9yeV9pbml0IChHU1RfTUVNT1JZX0NBU1QgKG1lbSksIDAsIF9teV9hbGxvY2F0b3IsIE5VTEwsCi0gICAgICBtYXhzaXplLCAzMSwgMCwgbWF4c2l6ZSk7Ci0KLSAgbWVtLT5mb3JtYXQgPSBmb3JtYXQ7Ci0gIG1lbS0+d2lkdGggPSB3aWR0aDsKLSAgbWVtLT5oZWlnaHQgPSBoZWlnaHQ7Ci0gIG1lbS0+ZGF0YSA9IE5VTEw7Ci0KLSAgcmV0dXJuIChHc3RNZW1vcnkgKikgbWVtOwotfQotCi1nYm9vbGVhbgotbXlfaXNfdmlkbWVtIChHc3RNZW1vcnkgKiBtZW0pCi17Ci0gIHJldHVybiBtZW0tPmFsbG9jYXRvciA9PSBfbXlfYWxsb2NhdG9yOwotfQotCi12b2lkCi1teV92aWRtZW1fZ2V0X2Zvcm1hdCAoR3N0TWVtb3J5ICogbWVtLCBndWludCAqIGZvcm1hdCwgZ3VpbnQgKiB3aWR0aCwKLSAgICBndWludCAqIGhlaWdodCkKLXsKLSAgTXlWaWRtZW0gKnZtZW0gPSAoTXlWaWRtZW0gKikgbWVtOwotCi0gICpmb3JtYXQgPSB2bWVtLT5mb3JtYXQ7Ci0gICp3aWR0aCA9IHZtZW0tPndpZHRoOwotICAqaGVpZ2h0ID0gdm1lbS0+aGVpZ2h0OwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LXZpZG1lbS5oIGIvdGVzdHMvZXhhbXBsZXMvbWVtb3J5L215LXZpZG1lbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTFmYTVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL21lbW9yeS9teS12aWRtZW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5iZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0vKiBleGFtcGxlIG9mIGFuIGFsbG9jYXRvciB0aGF0IG5lZWRzIGEgY3VzdG9tIGFsbG9jIGZ1bmN0aW9uICovCi12b2lkIG15X3ZpZG1lbV9pbml0ICh2b2lkKTsKLQotR3N0TWVtb3J5ICogbXlfdmlkbWVtX2FsbG9jICAgICAgICAgICAgIChndWludCBmb3JtYXQsIGd1aW50IHdpZHRoLCBndWludCBoZWlnaHQpOwotCi1nYm9vbGVhbiAgICBteV9pc192aWRtZW0gICAgICAgICAgICAgICAgKEdzdE1lbW9yeSAqbWVtKTsKLQotdm9pZCAgICAgICAgbXlfdmlkbWVtX2dldF9mb3JtYXQgICAgICAgIChHc3RNZW1vcnkgKm1lbSwgZ3VpbnQgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgKndpZHRoLCBndWludCAqaGVpZ2h0KTsKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbmV0Y2xvY2svTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUwNjk5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLW5vaW5zdF9QUk9HUkFNUyA9IG5ldGNsb2NrLXNlcnZlciBuZXRjbG9jay1jbGllbnQKLQotbmV0Y2xvY2tfc2VydmVyX0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKEdTVF9PQkpfTElCUykKLW5ldGNsb2NrX3NlcnZlcl9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotCi1uZXRjbG9ja19jbGllbnRfTERBREQgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L25ldC9saWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR1NUX09CSl9MSUJTKQotbmV0Y2xvY2tfY2xpZW50X0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL25ldGNsb2NrL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjYyMWRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL25ldGNsb2NrL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODUyICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1ub2luc3RfUFJPR1JBTVMgPSBuZXRjbG9jay1zZXJ2ZXIkKEVYRUVYVCkgbmV0Y2xvY2stY2xpZW50JChFWEVFWFQpCi1zdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9uZXRjbG9jawotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKLW5ldGNsb2NrX2NsaWVudF9TT1VSQ0VTID0gbmV0Y2xvY2stY2xpZW50LmMKLW5ldGNsb2NrX2NsaWVudF9PQkpFQ1RTID0gbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC4kKE9CSkVYVCkKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1uZXRjbG9ja19jbGllbnRfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1uZXRjbG9ja19jbGllbnRfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKG5ldGNsb2NrX2NsaWVudF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1uZXRjbG9ja19zZXJ2ZXJfU09VUkNFUyA9IG5ldGNsb2NrLXNlcnZlci5jCi1uZXRjbG9ja19zZXJ2ZXJfT0JKRUNUUyA9IG5ldGNsb2NrX3NlcnZlci1uZXRjbG9jay1zZXJ2ZXIuJChPQkpFWFQpCi1uZXRjbG9ja19zZXJ2ZXJfREVQRU5ERU5DSUVTID0gIFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1uZXRjbG9ja19zZXJ2ZXJfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKG5ldGNsb2NrX3NlcnZlcl9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gbmV0Y2xvY2stY2xpZW50LmMgbmV0Y2xvY2stc2VydmVyLmMKLURJU1RfU09VUkNFUyA9IG5ldGNsb2NrLWNsaWVudC5jIG5ldGNsb2NrLXNlcnZlci5jCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLW5ldGNsb2NrX3NlcnZlcl9MREFERCA9IFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChHU1RfT0JKX0xJQlMpCi0KLW5ldGNsb2NrX3NlcnZlcl9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotbmV0Y2xvY2tfY2xpZW50X0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKEdTVF9PQkpfTElCUykKLQotbmV0Y2xvY2tfY2xpZW50X0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1uZXRjbG9jay1jbGllbnQkKEVYRUVYVCk6ICQobmV0Y2xvY2tfY2xpZW50X09CSkVDVFMpICQobmV0Y2xvY2tfY2xpZW50X0RFUEVOREVOQ0lFUykgJChFWFRSQV9uZXRjbG9ja19jbGllbnRfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgbmV0Y2xvY2stY2xpZW50JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChuZXRjbG9ja19jbGllbnRfTElOSykgJChuZXRjbG9ja19jbGllbnRfT0JKRUNUUykgJChuZXRjbG9ja19jbGllbnRfTERBREQpICQoTElCUykKLQotbmV0Y2xvY2stc2VydmVyJChFWEVFWFQpOiAkKG5ldGNsb2NrX3NlcnZlcl9PQkpFQ1RTKSAkKG5ldGNsb2NrX3NlcnZlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbmV0Y2xvY2tfc2VydmVyX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIG5ldGNsb2NrLXNlcnZlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQobmV0Y2xvY2tfc2VydmVyX0xJTkspICQobmV0Y2xvY2tfc2VydmVyX09CSkVDVFMpICQobmV0Y2xvY2tfc2VydmVyX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXRjbG9ja19jbGllbnQtbmV0Y2xvY2stY2xpZW50LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLW5ldGNsb2NrX2NsaWVudC1uZXRjbG9jay1jbGllbnQubzogbmV0Y2xvY2stY2xpZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChuZXRjbG9ja19jbGllbnRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG5ldGNsb2NrX2NsaWVudC1uZXRjbG9jay1jbGllbnQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC5UcG8gLWMgLW8gbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC5vIGB0ZXN0IC1mICduZXRjbG9jay1jbGllbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbmV0Y2xvY2stY2xpZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL25ldGNsb2NrX2NsaWVudC1uZXRjbG9jay1jbGllbnQuVHBvICQoREVQRElSKS9uZXRjbG9ja19jbGllbnQtbmV0Y2xvY2stY2xpZW50LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbmV0Y2xvY2stY2xpZW50LmMnIG9iamVjdD0nbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChuZXRjbG9ja19jbGllbnRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC5vIGB0ZXN0IC1mICduZXRjbG9jay1jbGllbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbmV0Y2xvY2stY2xpZW50LmMKLQotbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC5vYmo6IG5ldGNsb2NrLWNsaWVudC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobmV0Y2xvY2tfY2xpZW50X0NGTEFHUykgJChDRkxBR1MpIC1NVCBuZXRjbG9ja19jbGllbnQtbmV0Y2xvY2stY2xpZW50Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC5UcG8gLWMgLW8gbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC5vYmogYGlmIHRlc3QgLWYgJ25ldGNsb2NrLWNsaWVudC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ25ldGNsb2NrLWNsaWVudC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9uZXRjbG9jay1jbGllbnQuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbmV0Y2xvY2tfY2xpZW50LW5ldGNsb2NrLWNsaWVudC5UcG8gJChERVBESVIpL25ldGNsb2NrX2NsaWVudC1uZXRjbG9jay1jbGllbnQuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSduZXRjbG9jay1jbGllbnQuYycgb2JqZWN0PSduZXRjbG9ja19jbGllbnQtbmV0Y2xvY2stY2xpZW50Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobmV0Y2xvY2tfY2xpZW50X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG5ldGNsb2NrX2NsaWVudC1uZXRjbG9jay1jbGllbnQub2JqIGBpZiB0ZXN0IC1mICduZXRjbG9jay1jbGllbnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICduZXRjbG9jay1jbGllbnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbmV0Y2xvY2stY2xpZW50LmMnOyBmaWAKLQotbmV0Y2xvY2tfc2VydmVyLW5ldGNsb2NrLXNlcnZlci5vOiBuZXRjbG9jay1zZXJ2ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG5ldGNsb2NrX3NlcnZlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbmV0Y2xvY2tfc2VydmVyLW5ldGNsb2NrLXNlcnZlci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9uZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLlRwbyAtYyAtbyBuZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLm8gYHRlc3QgLWYgJ25ldGNsb2NrLXNlcnZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BuZXRjbG9jay1zZXJ2ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbmV0Y2xvY2tfc2VydmVyLW5ldGNsb2NrLXNlcnZlci5UcG8gJChERVBESVIpL25ldGNsb2NrX3NlcnZlci1uZXRjbG9jay1zZXJ2ZXIuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSduZXRjbG9jay1zZXJ2ZXIuYycgb2JqZWN0PSduZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG5ldGNsb2NrX3NlcnZlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBuZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLm8gYHRlc3QgLWYgJ25ldGNsb2NrLXNlcnZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BuZXRjbG9jay1zZXJ2ZXIuYwotCi1uZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLm9iajogbmV0Y2xvY2stc2VydmVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChuZXRjbG9ja19zZXJ2ZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG5ldGNsb2NrX3NlcnZlci1uZXRjbG9jay1zZXJ2ZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9uZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLlRwbyAtYyAtbyBuZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLm9iaiBgaWYgdGVzdCAtZiAnbmV0Y2xvY2stc2VydmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbmV0Y2xvY2stc2VydmVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL25ldGNsb2NrLXNlcnZlci5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9uZXRjbG9ja19zZXJ2ZXItbmV0Y2xvY2stc2VydmVyLlRwbyAkKERFUERJUikvbmV0Y2xvY2tfc2VydmVyLW5ldGNsb2NrLXNlcnZlci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J25ldGNsb2NrLXNlcnZlci5jJyBvYmplY3Q9J25ldGNsb2NrX3NlcnZlci1uZXRjbG9jay1zZXJ2ZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChuZXRjbG9ja19zZXJ2ZXJfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbmV0Y2xvY2tfc2VydmVyLW5ldGNsb2NrLXNlcnZlci5vYmogYGlmIHRlc3QgLWYgJ25ldGNsb2NrLXNlcnZlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ25ldGNsb2NrLXNlcnZlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9uZXRjbG9jay1zZXJ2ZXIuYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9uZXRjbG9jay1jbGllbnQuYyBiL3Rlc3RzL2V4YW1wbGVzL25ldGNsb2NrL25ldGNsb2NrLWNsaWVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDgyMjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL25ldGNsb2NrL25ldGNsb2NrLWNsaWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmg+Ci0KLXN0YXRpYyBnYm9vbGVhbgotaGFuZGxlX2J1c19tZXNzYWdlIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RDbG9jayAqIGNsaWVudF9jbG9jaykKLXsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VMRU1FTlQpIHsKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKLSAgICBnY2hhciAqc3RyOwotCi0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgIHJldHVybiBUUlVFOwotICAgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgICBnX3ByaW50ICgiJXNcbiIsIHN0cik7Ci0gICAgZ19mcmVlIChzdHIpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIGdjaGFyICpob3N0OwotICBndWludDE2IHBvcnQ7Ci0gIEdzdENsb2NrICpjbGllbnRfY2xvY2s7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIGlmIChhcmdjIDwgMykgewotICAgIGdfcHJpbnQgKCJVc2FnZTogbmV0Y2xvY2stY2xpZW50IDxob3N0PiA8cG9ydD5cbiIpOwotICAgIHJldHVybiAxOwotICB9Ci0KLSAgaG9zdCA9IGFyZ3ZbMV07Ci0gIHBvcnQgPSBhdG9pIChhcmd2WzJdKTsKLQotICBjbGllbnRfY2xvY2sgPSBnc3RfbmV0X2NsaWVudF9jbG9ja19uZXcgKE5VTEwsIGhvc3QsIHBvcnQsIDApOwotICBpZiAoY2xpZW50X2Nsb2NrID09IE5VTEwpIHsKLSAgICBnX3ByaW50ZXJyICgiRmFpbGVkIHRvIGNyZWF0ZSBuZXR3b3JrIGNsb2NrIGNsaWVudFxuIik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgKEdzdEJ1c0Z1bmMpIGhhbmRsZV9idXNfbWVzc2FnZSwgY2xpZW50X2Nsb2NrKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoY2xpZW50X2Nsb2NrKSwgImJ1cyIsIGJ1cywgTlVMTCk7Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGdfb2JqZWN0X3VucmVmIChjbGllbnRfY2xvY2spOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbmV0Y2xvY2svbmV0Y2xvY2stc2VydmVyLmMgYi90ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9uZXRjbG9jay1zZXJ2ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY1MTNlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9uZXRjbG9jay9uZXRjbG9jay1zZXJ2ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE0IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIG5ldGNsb2NrLXNlcnZlci5jOiBQdWJsaXNoIGEgbmV0d29yayBjbG9jayBwcm92aWRlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldHRpbWVwcm92aWRlci5oPgotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0TmV0VGltZVByb3ZpZGVyICpuZXRfY2xvY2s7Ci0gIGludCBjbG9ja19wb3J0ID0gMDsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBpZiAoYXJnYyA+IDEpIHsKLSAgICBjbG9ja19wb3J0ID0gYXRvaSAoYXJndlsxXSk7Ci0gIH0KLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLSAgbmV0X2Nsb2NrID0gZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldyAoY2xvY2ssIE5VTEwsIGNsb2NrX3BvcnQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0KLSAgZ19vYmplY3RfZ2V0IChuZXRfY2xvY2ssICJwb3J0IiwgJmNsb2NrX3BvcnQsIE5VTEwpOwotCi0gIGdfcHJpbnQgKCJQdWJsaXNoZWQgbmV0d29yayBjbG9jayBvbiBwb3J0ICV1XG4iLCBjbG9ja19wb3J0KTsKLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcHRwL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvcHRwL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzZiNGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3B0cC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotbm9pbnN0X1BST0dSQU1TID0gcHRwLXByaW50LXRpbWVzCi0KLXB0cF9wcmludF90aW1lc19MREFERCA9IFwKLQkkKHRvcF9idWlsZGRpcikvbGlicy9nc3QvbmV0L2xpYmdzdG5ldC1AR1NUX0FQSV9WRVJTSU9OQC5sYSBcCi0JJChHU1RfT0JKX0xJQlMpCi1wdHBfcHJpbnRfdGltZXNfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcHRwL01ha2VmaWxlLmluIGIvdGVzdHMvZXhhbXBsZXMvcHRwL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTVkMzMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3B0cC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDgxOSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gcHRwLXByaW50LXRpbWVzJChFWEVFWFQpCi1zdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9wdHAKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLVBST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCi1wdHBfcHJpbnRfdGltZXNfU09VUkNFUyA9IHB0cC1wcmludC10aW1lcy5jCi1wdHBfcHJpbnRfdGltZXNfT0JKRUNUUyA9IHB0cF9wcmludF90aW1lcy1wdHAtcHJpbnQtdGltZXMuJChPQkpFWFQpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotcHRwX3ByaW50X3RpbWVzX0RFUEVOREVOQ0lFUyA9ICBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L25ldC9saWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotcHRwX3ByaW50X3RpbWVzX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChwdHBfcHJpbnRfdGltZXNfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9IHB0cC1wcmludC10aW1lcy5jCi1ESVNUX1NPVVJDRVMgPSBwdHAtcHJpbnQtdGltZXMuYwotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wdHBfcHJpbnRfdGltZXNfTERBREQgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2xpYnMvZ3N0L25ldC9saWJnc3RuZXQtQEdTVF9BUElfVkVSU0lPTkAubGEgXAotCSQoR1NUX09CSl9MSUJTKQotCi1wdHBfcHJpbnRfdGltZXNfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL3B0cC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9wdHAvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLW5vaW5zdFBST0dSQU1TOgotCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLQotcHRwLXByaW50LXRpbWVzJChFWEVFWFQpOiAkKHB0cF9wcmludF90aW1lc19PQkpFQ1RTKSAkKHB0cF9wcmludF90aW1lc19ERVBFTkRFTkNJRVMpICQoRVhUUkFfcHRwX3ByaW50X3RpbWVzX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHB0cC1wcmludC10aW1lcyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQocHRwX3ByaW50X3RpbWVzX0xJTkspICQocHRwX3ByaW50X3RpbWVzX09CSkVDVFMpICQocHRwX3ByaW50X3RpbWVzX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wdHBfcHJpbnRfdGltZXMtcHRwLXByaW50LXRpbWVzLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLXB0cF9wcmludF90aW1lcy1wdHAtcHJpbnQtdGltZXMubzogcHRwLXByaW50LXRpbWVzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwdHBfcHJpbnRfdGltZXNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHB0cF9wcmludF90aW1lcy1wdHAtcHJpbnQtdGltZXMubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcHRwX3ByaW50X3RpbWVzLXB0cC1wcmludC10aW1lcy5UcG8gLWMgLW8gcHRwX3ByaW50X3RpbWVzLXB0cC1wcmludC10aW1lcy5vIGB0ZXN0IC1mICdwdHAtcHJpbnQtdGltZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHRwLXByaW50LXRpbWVzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3B0cF9wcmludF90aW1lcy1wdHAtcHJpbnQtdGltZXMuVHBvICQoREVQRElSKS9wdHBfcHJpbnRfdGltZXMtcHRwLXByaW50LXRpbWVzLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHRwLXByaW50LXRpbWVzLmMnIG9iamVjdD0ncHRwX3ByaW50X3RpbWVzLXB0cC1wcmludC10aW1lcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwdHBfcHJpbnRfdGltZXNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcHRwX3ByaW50X3RpbWVzLXB0cC1wcmludC10aW1lcy5vIGB0ZXN0IC1mICdwdHAtcHJpbnQtdGltZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHRwLXByaW50LXRpbWVzLmMKLQotcHRwX3ByaW50X3RpbWVzLXB0cC1wcmludC10aW1lcy5vYmo6IHB0cC1wcmludC10aW1lcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocHRwX3ByaW50X3RpbWVzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwdHBfcHJpbnRfdGltZXMtcHRwLXByaW50LXRpbWVzLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcHRwX3ByaW50X3RpbWVzLXB0cC1wcmludC10aW1lcy5UcG8gLWMgLW8gcHRwX3ByaW50X3RpbWVzLXB0cC1wcmludC10aW1lcy5vYmogYGlmIHRlc3QgLWYgJ3B0cC1wcmludC10aW1lcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3B0cC1wcmludC10aW1lcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9wdHAtcHJpbnQtdGltZXMuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcHRwX3ByaW50X3RpbWVzLXB0cC1wcmludC10aW1lcy5UcG8gJChERVBESVIpL3B0cF9wcmludF90aW1lcy1wdHAtcHJpbnQtdGltZXMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwdHAtcHJpbnQtdGltZXMuYycgb2JqZWN0PSdwdHBfcHJpbnRfdGltZXMtcHRwLXByaW50LXRpbWVzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocHRwX3ByaW50X3RpbWVzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHB0cF9wcmludF90aW1lcy1wdHAtcHJpbnQtdGltZXMub2JqIGBpZiB0ZXN0IC1mICdwdHAtcHJpbnQtdGltZXMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdwdHAtcHJpbnQtdGltZXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcHRwLXByaW50LXRpbWVzLmMnOyBmaWAKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcHRwL3B0cC1wcmludC10aW1lcy5jIGIvdGVzdHMvZXhhbXBsZXMvcHRwL3B0cC1wcmludC10aW1lcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2RlODJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3B0cC9wdHAtcHJpbnQtdGltZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBDcmVhdGUgYSBQVFAgY2xpZW50IGNsb2NrIGFuZCBwcmludCB0aW1lcyBhbmQgc3RhdGlzdGljcy4KLSAqCi0gKiBXaGVuIHJ1bm5pbmcgdGhpcyBmcm9tIGEgR1N0cmVhbWVyIGJ1aWxkIHRyZWUsIHlvdSB3aWxsIGhhdmUgdG8gc2V0Ci0gKiBHU1RfUFRQX0hFTFBFUiB0byBsaWJzL2dzdC9oZWxwZXJzLy5saWJzL2dzdC1wdHAtaGVscGVyIGFuZCBhbHNvCi0gKiBtYWtlIHN1cmUgdGhhdCBpdCBoYXMgdGhlIHJpZ2h0IHBlcm1pc3Npb25zIChzZXR1aWQgcm9vdCBvciBhcHByb3ByaWF0ZQotICogY2FwYWJpbGl0aWVzCi0gKgotICogWW91IGNhbiB0ZXN0IHRoaXMgd2l0aCBhbnkgUFRQIGNvbXBhdGlibGUgY2xvY2ssIGUuZy4gcHRwZCBmcm9tIGhlcmU6IGh0dHA6Ly9wdHBkLnNvdXJjZWZvcmdlLm5ldC8KLSAqCi0gKiBGb3IgdGVzdGluZyB0aGUgYWNjdXJhY3ksIHlvdSBjYW4gdXNlIHRoZSBQVFAgcmVmbGVjdG9yIGF2YWlsYWJsZSBmcm9tCi0gKiBodHRwOi8vY29kZS5jZW50cmljdWxhci5jb20vcHRwLWNsb2NrLXJlZmxlY3Rvci8gb3IgaGVyZQotICogaHR0cHM6Ly9naXRodWIuY29tL3Nkcm9lZ2UvcHRwLWNsb2NrLXJlZmxlY3RvcgotICovCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L25ldC9uZXQuaD4KLQotc3RhdGljIGdpbnQgZG9tYWluID0gMDsKLXN0YXRpYyBnYm9vbGVhbiBzdGF0cyA9IEZBTFNFOwotCi1zdGF0aWMgR09wdGlvbkVudHJ5IG9wdF9lbnRyaWVzW10gPSB7Ci0gIHsiZG9tYWluIiwgJ2QnLCAwLCBHX09QVElPTl9BUkdfSU5ULCAmZG9tYWluLAotICAgICAgIlBUUCBkb21haW4iLCBOVUxMfSwKLSAgeyJzdGF0cyIsICdzJywgMCwgR19PUFRJT05fQVJHX05PTkUsICZzdGF0cywKLSAgICAgICJQcmludCBQVFAgc3RhdGlzdGljcyIsIE5VTEx9LAotICB7TlVMTH0KLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotc3RhdHNfY2IgKGd1aW50OCBkLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzdGF0cywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZiAoZCA9PSBkb21haW4pIHsKLSAgICBnY2hhciAqc3RhdHNfc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHN0YXRzKTsKLSAgICBnX3ByaW50ICgiR290IHN0YXRzOiAlc1xuIiwgc3RhdHNfc3RyKTsKLSAgICBnX2ZyZWUgKHN0YXRzX3N0cik7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQotewotICBHT3B0aW9uQ29udGV4dCAqb3B0X2N0eDsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgb3B0X2N0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiLSBHU3RyZWFtZXIgUFRQIGNsb2NrIHRlc3QgYXBwIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAob3B0X2N0eCwgb3B0X2VudHJpZXMsIE5VTEwpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAob3B0X2N0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0gIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAob3B0X2N0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkKLSAgICBnX2Vycm9yICgiRXJyb3IgcGFyc2luZyBvcHRpb25zOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKG9wdF9jdHgpOwotCi0gIGlmICghZ3N0X3B0cF9pbml0IChHU1RfUFRQX0NMT0NLX0lEX05PTkUsIE5VTEwpKQotICAgIGdfZXJyb3IgKCJmYWlsZWQgdG8gaW5pdCBwdHAiKTsKLQotICBpZiAoc3RhdHMpCi0gICAgZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX2FkZCAoc3RhdHNfY2IsIE5VTEwsIE5VTEwpOwotCi0gIGNsb2NrID0gZ3N0X3B0cF9jbG9ja19uZXcgKCJ0ZXN0LWNsb2NrIiwgZG9tYWluKTsKLQotICBnc3RfY2xvY2tfd2FpdF9mb3Jfc3luYyAoR1NUX0NMT0NLIChjbG9jayksIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIGxvY2FsLCByZW1vdGU7Ci0gICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmOwotCi0gICAgbG9jYWwgPSBnX2dldF9yZWFsX3RpbWUgKCkgKiAxMDAwOwotICAgIHJlbW90ZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgIGRpZmYgPSBHU1RfQ0xPQ0tfRElGRiAobG9jYWwsIHJlbW90ZSk7Ci0KLSAgICBnX3ByaW50ICgibG9jYWw6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIHB0cDogJSIgR1NUX1RJTUVfRk9STUFUICIgZGlmZjogJXMlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIlxuIiwgR1NUX1RJTUVfQVJHUyAobG9jYWwpLCBHU1RfVElNRV9BUkdTIChyZW1vdGUpLAotICAgICAgICAoZGlmZiA8IDAgPyAiLSIgOiAiICIpLCBHU1RfVElNRV9BUkdTIChBQlMgKGRpZmYpKSk7Ci0gICAgZ191c2xlZXAgKDEwMDAwMCk7Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3N0ZXBwaW5nL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNmZiYzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW5vaW5zdF9QUk9HUkFNUyA9IGZyYW1lc3RlcDEKLQotZnJhbWVzdGVwMV9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotZnJhbWVzdGVwMV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVhNTA2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDgxMyArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gZnJhbWVzdGVwMSQoRVhFRVhUKQotc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1kb2Nib29rLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYXJzZXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9jaGVjay1jaGVja3MubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ljb252Lm00ICQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnR0eXBlc19oLm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbG9uZ2xvbmcubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCAkKHRvcF9zcmNkaXIpL200L3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLVBST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCi1mcmFtZXN0ZXAxX1NPVVJDRVMgPSBmcmFtZXN0ZXAxLmMKLWZyYW1lc3RlcDFfT0JKRUNUUyA9IGZyYW1lc3RlcDEtZnJhbWVzdGVwMS4kKE9CSkVYVCkKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1mcmFtZXN0ZXAxX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotZnJhbWVzdGVwMV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChmcmFtZXN0ZXAxX0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSBmcmFtZXN0ZXAxLmMKLURJU1RfU09VUkNFUyA9IGZyYW1lc3RlcDEuYwotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQkFTSF9DT01QTEVUSU9OX0NGTEFHUyA9IEBCQVNIX0NPTVBMRVRJT05fQ0ZMQUdTQAotQkFTSF9DT01QTEVUSU9OX0RJUiA9IEBCQVNIX0NPTVBMRVRJT05fRElSQAotQkFTSF9DT01QTEVUSU9OX0xJQlMgPSBAQkFTSF9DT01QTEVUSU9OX0xJQlNACi1CQVNIX0hFTFBFUlNfRElSID0gQEJBU0hfSEVMUEVSU19ESVJACi1CSVNPTl9QQVRIID0gQEJJU09OX1BBVEhACi1DQVBfTElCUyA9IEBDQVBfTElCU0AKLUNBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKLUNBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ0hFQ0tfTUFKT1JfVkVSU0lPTiA9IEBDSEVDS19NQUpPUl9WRVJTSU9OQAotQ0hFQ0tfTUlDUk9fVkVSU0lPTiA9IEBDSEVDS19NSUNST19WRVJTSU9OQAotQ0hFQ0tfTUlOT1JfVkVSU0lPTiA9IEBDSEVDS19NSU5PUl9WRVJTSU9OQAotQ0hFQ0tfVkVSU0lPTiA9IEBDSEVDS19WRVJTSU9OQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1EQVRBRElSID0gQERBVEFESVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ETExUT09MID0gQERMTFRPT0xACi1ET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVOQUJMRV9TVUJVTklUID0gQEVOQUJMRV9TVUJVTklUQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEVYX1BBVEggPSBARkxFWF9QQVRIQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVBfTElCUyA9IEBHTVBfTElCU0AKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NMX0xJQlMgPSBAR1NMX0xJQlNACi1HU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDID0gQEdTVENPTkZJR19CVUlMVF9XSVRIX01TVkNACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0NGTEFHUyA9IEBHU1RfQUxMX0NGTEFHU0AKLUdTVF9BTExfQ1hYRkxBR1MgPSBAR1NUX0FMTF9DWFhGTEFHU0AKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQUxMX0xJQlMgPSBAR1NUX0FMTF9MSUJTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FQAotR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX1RSQUNFUl9IT09LU19ERUZJTkVACi1HU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FQAotR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FID0gQEdTVF9ESVNBQkxFX1BBUlNFX0RFRklORUAKLUdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORUAKLUdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORSA9IEBHU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkVACi1HU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FID0gQEdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkVACi1HU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FID0gQEdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkVACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQl9MREZMQUdTID0gQEdTVF9MSUJfTERGTEFHU0AKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfT0JKX0NGTEFHUyA9IEBHU1RfT0JKX0NGTEFHU0AKLUdTVF9PQkpfQ1hYRkxBR1MgPSBAR1NUX09CSl9DWFhGTEFHU0AKLUdTVF9PQkpfTElCUyA9IEBHU1RfT0JKX0xJQlNACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEID0gQEdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRURACi1HU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQgPSBAR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEQAotR1NUX1JFR0lTVFJZX0RPQ19UWVBFUyA9IEBHU1RfUkVHSVNUUllfRE9DX1RZUEVTQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9WRVJTSU9OX01BSk9SID0gQEdTVF9WRVJTSU9OX01BSk9SQAotR1NUX1ZFUlNJT05fTUlDUk8gPSBAR1NUX1ZFUlNJT05fTUlDUk9ACi1HU1RfVkVSU0lPTl9NSU5PUiA9IEBHU1RfVkVSU0lPTl9NSU5PUkAKLUdTVF9WRVJTSU9OX05BTk8gPSBAR1NUX1ZFUlNJT05fTkFOT0AKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotSEFWRV9DQVAgPSBASEFWRV9DQVBACi1IQVZFX0RPQ0JPT0syUFMgPSBASEFWRV9ET0NCT09LMlBTQAotSEFWRV9EVklQUyA9IEBIQVZFX0RWSVBTQAotSEFWRV9FUFNUT1BERiA9IEBIQVZFX0VQU1RPUERGQAotSEFWRV9GT1JLID0gQEhBVkVfRk9SS0AKLUhBVkVfR01QID0gQEhBVkVfR01QQAotSEFWRV9HU0wgPSBASEFWRV9HU0xACi1IQVZFX0pBREVURVggPSBASEFWRV9KQURFVEVYQAotSEFWRV9QTkdUT1BOTSA9IEBIQVZFX1BOR1RPUE5NQAotSEFWRV9QTk1UT1BTID0gQEhBVkVfUE5NVE9QU0AKLUhBVkVfUFMyUERGID0gQEhBVkVfUFMyUERGQAotSEFWRV9YTUxMSU5UID0gQEhBVkVfWE1MTElOVEAKLUhBVkVfWFNMVFBST0MgPSBASEFWRV9YU0xUUFJPQ0AKLUhPU1RfQ1BVID0gQEhPU1RfQ1BVQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACi1JTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACi1JTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACi1JTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKLUlOVFJPU1BFQ1RJT05fSU5JVCA9IEBJTlRST1NQRUNUSU9OX0lOSVRACi1JTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAotSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAotSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKLUlOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkRJUiA9IEBMSUJESVJACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QRVJMX1BBVEggPSBAUEVSTF9QQVRIQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJJTlRGX0NGTEFHUyA9IEBQUklOVEZfQ0ZMQUdTQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1TRUQgPSBAU0VEQAotU0VUQ0FQID0gQFNFVENBUEAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TT0NLRVRfTElCUyA9IEBTT0NLRVRfTElCU0AKLVNUUklQID0gQFNUUklQQAotVU5XSU5EX0NGTEFHUyA9IEBVTldJTkRfQ0ZMQUdTQAotVU5XSU5EX0xJQlMgPSBAVU5XSU5EX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XSU4zMl9MSUJTID0gQFdJTjMyX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKLVhTTFRQUk9DID0gQFhTTFRQUk9DQAotWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1mcmFtZXN0ZXAxX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCi1mcmFtZXN0ZXAxX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1mcmFtZXN0ZXAxJChFWEVFWFQpOiAkKGZyYW1lc3RlcDFfT0JKRUNUUykgJChmcmFtZXN0ZXAxX0RFUEVOREVOQ0lFUykgJChFWFRSQV9mcmFtZXN0ZXAxX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGZyYW1lc3RlcDEkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGZyYW1lc3RlcDFfTElOSykgJChmcmFtZXN0ZXAxX09CSkVDVFMpICQoZnJhbWVzdGVwMV9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWZyYW1lc3RlcDEtZnJhbWVzdGVwMS5vOiBmcmFtZXN0ZXAxLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmcmFtZXN0ZXAxX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmcmFtZXN0ZXAxLWZyYW1lc3RlcDEubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLlRwbyAtYyAtbyBmcmFtZXN0ZXAxLWZyYW1lc3RlcDEubyBgdGVzdCAtZiAnZnJhbWVzdGVwMS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmcmFtZXN0ZXAxLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2ZyYW1lc3RlcDEtZnJhbWVzdGVwMS5UcG8gJChERVBESVIpL2ZyYW1lc3RlcDEtZnJhbWVzdGVwMS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2ZyYW1lc3RlcDEuYycgb2JqZWN0PSdmcmFtZXN0ZXAxLWZyYW1lc3RlcDEubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZnJhbWVzdGVwMV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmcmFtZXN0ZXAxLWZyYW1lc3RlcDEubyBgdGVzdCAtZiAnZnJhbWVzdGVwMS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmcmFtZXN0ZXAxLmMKLQotZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLm9iajogZnJhbWVzdGVwMS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZnJhbWVzdGVwMV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZnJhbWVzdGVwMS1mcmFtZXN0ZXAxLlRwbyAtYyAtbyBmcmFtZXN0ZXAxLWZyYW1lc3RlcDEub2JqIGBpZiB0ZXN0IC1mICdmcmFtZXN0ZXAxLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZnJhbWVzdGVwMS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9mcmFtZXN0ZXAxLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2ZyYW1lc3RlcDEtZnJhbWVzdGVwMS5UcG8gJChERVBESVIpL2ZyYW1lc3RlcDEtZnJhbWVzdGVwMS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2ZyYW1lc3RlcDEuYycgb2JqZWN0PSdmcmFtZXN0ZXAxLWZyYW1lc3RlcDEub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmcmFtZXN0ZXAxX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGZyYW1lc3RlcDEtZnJhbWVzdGVwMS5vYmogYGlmIHRlc3QgLWYgJ2ZyYW1lc3RlcDEuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdmcmFtZXN0ZXAxLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2ZyYW1lc3RlcDEuYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmMgYi90ZXN0cy9leGFtcGxlcy9zdGVwcGluZy9mcmFtZXN0ZXAxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZDQyYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvc3RlcHBpbmcvZnJhbWVzdGVwMS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyB2b2lkCi1ldmVudF9sb29wIChHc3RFbGVtZW50ICogcGlwZSkKLXsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMOwotICBnYm9vbGVhbiBydW5uaW5nID0gVFJVRTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChHU1RfRUxFTUVOVCAocGlwZSkpOwotCi0gIHdoaWxlIChydW5uaW5nKSB7Ci0gICAgbWVzc2FnZSA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkIChidXMsIC0xLCBHU1RfTUVTU0FHRV9BTlkpOwotCi0gICAgZ19hc3NlcnQgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0KLSAgICBzd2l0Y2ggKG1lc3NhZ2UtPnR5cGUpIHsKLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgICBnX21lc3NhZ2UgKCJnb3QgRU9TIik7Ci0gICAgICAgIHJ1bm5pbmcgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6ewotICAgICAgICBHRXJyb3IgKmdlcnJvcjsKLSAgICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7Ci0gICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKLSAgICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICAgIHsKLSAgICAgICAgR0Vycm9yICpnZXJyb3I7Ci0gICAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgICAgcnVubmluZyA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfU1RFUF9ET05FOgotICAgICAgewotICAgICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgICBndWludDY0IGFtb3VudDsKLSAgICAgICAgZ2RvdWJsZSByYXRlOwotICAgICAgICBnYm9vbGVhbiBmbHVzaCwgaW50ZXJtZWRpYXRlOwotICAgICAgICBndWludDY0IGR1cmF0aW9uOwotICAgICAgICBnYm9vbGVhbiBlb3M7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RlcF9kb25lIChtZXNzYWdlLCAmZm9ybWF0LCAmYW1vdW50LCAmcmF0ZSwKLSAgICAgICAgICAgICZmbHVzaCwgJmludGVybWVkaWF0ZSwgJmR1cmF0aW9uLCAmZW9zKTsKLQotICAgICAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfREVGQVVMVCkgewotICAgICAgICAgIGdfbWVzc2FnZSAoInN0ZXAgZG9uZTogJSIgR1NUX1RJTUVfRk9STUFUICIgc2tpcHBlZCBpbiAlIgotICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgZnJhbWVzIiwgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pLCBhbW91bnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdfbWVzc2FnZSAoInN0ZXAgZG9uZTogJSIgR1NUX1RJTUVfRk9STUFUICIgc2tpcHBlZCIsCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICB9Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLS8qIHNpZ25hbGxlZCB3aGVuIGEgbmV3IHByZXJvbGwgYnVmZmVyIGlzIGF2YWlsYWJsZSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLW5ld19wcmVyb2xsIChHc3RFbGVtZW50ICogYXBwc2luaywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKGFwcHNpbmssICJwdWxsLXByZXJvbGwiLCAmYnVmZmVyKTsKLQotICBnX21lc3NhZ2UgKCJoYXZlIG5ldy1wcmVyb2xsIGJ1ZmZlciAlcCwgdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwgYnVmZmVyLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikpKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpiaW4sICp2aWRlb3Rlc3RzcmMsICphcHBzaW5rOwotICBnaW50NjQgcG9zOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBhIG5ldyBiaW4gdG8gaG9sZCB0aGUgZWxlbWVudHMgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGdfYXNzZXJ0IChiaW4pOwotCi0gIC8qIGNyZWF0ZSBhIGZha2Ugc291cmNlICovCi0gIHZpZGVvdGVzdHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsICJ2aWRlb3Rlc3RzcmMiKTsKLSAgZ19hc3NlcnQgKHZpZGVvdGVzdHNyYyk7Ci0gIGdfb2JqZWN0X3NldCAodmlkZW90ZXN0c3JjLCAibnVtLWJ1ZmZlcnMiLCAxMCwgTlVMTCk7Ci0KLSAgLyogYW5kIGEgZmFrZSBzaW5rICovCi0gIGFwcHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhcHBzaW5rIiwgImFwcHNpbmsiKTsKLSAgZ19hc3NlcnQgKGFwcHNpbmspOwotICBnX29iamVjdF9zZXQgKGFwcHNpbmssICJlbWl0LXNpZ25hbHMiLCBUUlVFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChhcHBzaW5rLCAic3luYyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChhcHBzaW5rLCAibmV3LXByZXJvbGwiLCAoR0NhbGxiYWNrKSBuZXdfcHJlcm9sbCwgTlVMTCk7Ci0KLSAgLyogYWRkIG9iamVjdHMgdG8gdGhlIG1haW4gcGlwZWxpbmUgKi8KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIHZpZGVvdGVzdHNyYyk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBhcHBzaW5rKTsKLQotICAvKiBsaW5rIHRoZSBlbGVtZW50cyAqLwotICBnc3RfZWxlbWVudF9saW5rX21hbnkgKHZpZGVvdGVzdHNyYywgYXBwc2luaywgTlVMTCk7Ci0KLSAgLyogZ28gdG8gdGhlIFBBVVNFRCBzdGF0ZSBhbmQgd2FpdCBmb3IgcHJlcm9sbCAqLwotICBnX21lc3NhZ2UgKCJwcmVyb2xsaW5nIGZpcnN0IGZyYW1lIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChiaW4sIE5VTEwsIE5VTEwsIC0xKTsKLQotICAvKiBzdGVwIHR3byBmcmFtZXMsIGZsdXNoIHNvIHRoYXQgbmV3IHByZXJvbGwgaXMgcXVldWVkICovCi0gIGdfbWVzc2FnZSAoInN0ZXBwaW5nIHRocmVlIGZyYW1lcyIpOwotICBpZiAoIWdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGJpbiwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0ZXAgKEdTVF9GT1JNQVRfQlVGRkVSUywgMiwgMS4wLCBUUlVFLCBGQUxTRSkpKQotICAgIGdfd2FybmluZyAoIkZpbGVkIHRvIHNlbmQgU1RFUCBldmVudCEiKTsKLQotICAvKiBibG9ja3MgYW5kIHJldHVybnMgd2hlbiB3ZSByZWNlaXZlZCB0aGUgc3RlcCBkb25lIG1lc3NhZ2UgKi8KLSAgZXZlbnRfbG9vcCAoYmluKTsKLQotICAvKiB3YWl0IGZvciBzdGVwIHRvIHJlYWxseSBjb21wbGV0ZSAqLwotICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKGJpbiwgTlVMTCwgTlVMTCwgLTEpOwotCi0gIGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChiaW4sIEdTVF9GT1JNQVRfVElNRSwgJnBvcyk7Ci0gIGdfbWVzc2FnZSAoInN0ZXBwZWQgdHdvIGZyYW1lcywgbm93IGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHBvcykpOwotCi0gIC8qIHN0ZXAgMyBmcmFtZXMsIGZsdXNoIHNvIHRoYXQgbmV3IHByZXJvbGwgaXMgcXVldWVkICovCi0gIGdfbWVzc2FnZSAoInN0ZXBwaW5nIDEyMCBtaWxsaXNlY29uZHMgIik7Ci0gIGlmICghZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoYmluLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RlcCAoR1NUX0ZPUk1BVF9USU1FLCAxMjAgKiBHU1RfTVNFQ09ORCwgMS4wLCBUUlVFLAotICAgICAgICAgICAgICBGQUxTRSkpKQotICAgIGdfd2FybmluZyAoIkZpbGVkIHRvIHNlbmQgU1RFUCBldmVudCEiKTsKLQotICAvKiBibG9ja3MgYW5kIHJldHVybnMgd2hlbiB3ZSByZWNlaXZlZCB0aGUgc3RlcCBkb25lIG1lc3NhZ2UgKi8KLSAgZXZlbnRfbG9vcCAoYmluKTsKLQotICAvKiB3YWl0IGZvciBzdGVwIHRvIHJlYWxseSBjb21wbGV0ZSAqLwotICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKGJpbiwgTlVMTCwgTlVMTCwgLTEpOwotCi0gIGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChiaW4sIEdTVF9GT1JNQVRfVElNRSwgJnBvcyk7Ci0gIGdfbWVzc2FnZSAoInN0ZXBwZWQgMTIwbXMgZnJhbWVzLCBub3cgYXQgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAocG9zKSk7Ci0KLSAgZ19tZXNzYWdlICgicGxheWluZyB1bnRpbCBFT1MiKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgLyogUnVuIGV2ZW50IGxvb3AgbGlzdGVuaW5nIGZvciBidXMgbWVzc2FnZXMgdW50aWwgRU9TIG9yIEVSUk9SICovCi0gIGV2ZW50X2xvb3AgKGJpbik7Ci0gIGdfbWVzc2FnZSAoImZpbmlzaGVkIik7Ci0KLSAgLyogc3RvcCB0aGUgYmluICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZXhpdCAoMCk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zdHJlYW1pZGRlbXV4L01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvc3RyZWFtaWRkZW11eC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE4MmQyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9zdHJlYW1pZGRlbXV4L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1ub2luc3RfUFJPR1JBTVMgPSBzdHJlYW1pZGRlbXV4LXN0cmVhbQotCi1zdHJlYW1pZGRlbXV4X3N0cmVhbV9TT1VSQ0VTID0gc3RyZWFtaWRkZW11eC1zdHJlYW0uYwotc3RyZWFtaWRkZW11eF9zdHJlYW1fTERBREQgPSAkKEdTVF9PQkpfTElCUykKLXN0cmVhbWlkZGVtdXhfc3RyZWFtX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbWlkZGVtdXgvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1pZGRlbXV4L01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGQzMWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbWlkZGVtdXgvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4MTYgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IHN0cmVhbWlkZGVtdXgtc3RyZWFtJChFWEVFWFQpCi1zdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9zdHJlYW1pZGRlbXV4Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYW1fc3RyZWFtaWRkZW11eF9zdHJlYW1fT0JKRUNUUyA9ICBcCi0Jc3RyZWFtaWRkZW11eF9zdHJlYW0tc3RyZWFtaWRkZW11eC1zdHJlYW0uJChPQkpFWFQpCi1zdHJlYW1pZGRlbXV4X3N0cmVhbV9PQkpFQ1RTID0gJChhbV9zdHJlYW1pZGRlbXV4X3N0cmVhbV9PQkpFQ1RTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLXN0cmVhbWlkZGVtdXhfc3RyZWFtX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotc3RyZWFtaWRkZW11eF9zdHJlYW1fTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKHN0cmVhbWlkZGVtdXhfc3RyZWFtX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKHN0cmVhbWlkZGVtdXhfc3RyZWFtX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKHN0cmVhbWlkZGVtdXhfc3RyZWFtX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXN0cmVhbWlkZGVtdXhfc3RyZWFtX1NPVVJDRVMgPSBzdHJlYW1pZGRlbXV4LXN0cmVhbS5jCi1zdHJlYW1pZGRlbXV4X3N0cmVhbV9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotc3RyZWFtaWRkZW11eF9zdHJlYW1fQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL3N0cmVhbWlkZGVtdXgvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvc3RyZWFtaWRkZW11eC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1zdHJlYW1pZGRlbXV4LXN0cmVhbSQoRVhFRVhUKTogJChzdHJlYW1pZGRlbXV4X3N0cmVhbV9PQkpFQ1RTKSAkKHN0cmVhbWlkZGVtdXhfc3RyZWFtX0RFUEVOREVOQ0lFUykgJChFWFRSQV9zdHJlYW1pZGRlbXV4X3N0cmVhbV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBzdHJlYW1pZGRlbXV4LXN0cmVhbSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoc3RyZWFtaWRkZW11eF9zdHJlYW1fTElOSykgJChzdHJlYW1pZGRlbXV4X3N0cmVhbV9PQkpFQ1RTKSAkKHN0cmVhbWlkZGVtdXhfc3RyZWFtX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1zdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5vOiBzdHJlYW1pZGRlbXV4LXN0cmVhbS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3RyZWFtaWRkZW11eF9zdHJlYW1fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN0cmVhbWlkZGVtdXhfc3RyZWFtLXN0cmVhbWlkZGVtdXgtc3RyZWFtLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmVhbWlkZGVtdXhfc3RyZWFtLXN0cmVhbWlkZGVtdXgtc3RyZWFtLlRwbyAtYyAtbyBzdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5vIGB0ZXN0IC1mICdzdHJlYW1pZGRlbXV4LXN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdHJlYW1pZGRlbXV4LXN0cmVhbS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5UcG8gJChERVBESVIpL3N0cmVhbWlkZGVtdXhfc3RyZWFtLXN0cmVhbWlkZGVtdXgtc3RyZWFtLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3RyZWFtaWRkZW11eC1zdHJlYW0uYycgb2JqZWN0PSdzdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJlYW1pZGRlbXV4X3N0cmVhbV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5vIGB0ZXN0IC1mICdzdHJlYW1pZGRlbXV4LXN0cmVhbS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdHJlYW1pZGRlbXV4LXN0cmVhbS5jCi0KLXN0cmVhbWlkZGVtdXhfc3RyZWFtLXN0cmVhbWlkZGVtdXgtc3RyZWFtLm9iajogc3RyZWFtaWRkZW11eC1zdHJlYW0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmVhbWlkZGVtdXhfc3RyZWFtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmVhbWlkZGVtdXhfc3RyZWFtLXN0cmVhbWlkZGVtdXgtc3RyZWFtLlRwbyAtYyAtbyBzdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5vYmogYGlmIHRlc3QgLWYgJ3N0cmVhbWlkZGVtdXgtc3RyZWFtLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3RyZWFtaWRkZW11eC1zdHJlYW0uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RyZWFtaWRkZW11eC1zdHJlYW0uYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3RyZWFtaWRkZW11eF9zdHJlYW0tc3RyZWFtaWRkZW11eC1zdHJlYW0uVHBvICQoREVQRElSKS9zdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3N0cmVhbWlkZGVtdXgtc3RyZWFtLmMnIG9iamVjdD0nc3RyZWFtaWRkZW11eF9zdHJlYW0tc3RyZWFtaWRkZW11eC1zdHJlYW0ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJlYW1pZGRlbXV4X3N0cmVhbV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzdHJlYW1pZGRlbXV4X3N0cmVhbS1zdHJlYW1pZGRlbXV4LXN0cmVhbS5vYmogYGlmIHRlc3QgLWYgJ3N0cmVhbWlkZGVtdXgtc3RyZWFtLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3RyZWFtaWRkZW11eC1zdHJlYW0uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RyZWFtaWRkZW11eC1zdHJlYW0uYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zdHJlYW1pZGRlbXV4L3N0cmVhbWlkZGVtdXgtc3RyZWFtLmMgYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1pZGRlbXV4L3N0cmVhbWlkZGVtdXgtc3RyZWFtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZjEyOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtaWRkZW11eC9zdHJlYW1pZGRlbXV4LXN0cmVhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNkZWZpbmUgTlVNX1NUUkVBTSAxMwotCi10eXBlZGVmIHN0cnVjdCBfQXBwIEFwcDsKLQotc3RydWN0IF9BcHAKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvdGVzdHNyY1tOVU1fU1RSRUFNXTsKLSAgR3N0RWxlbWVudCAqYXVkaW9jb252ZXJ0W05VTV9TVFJFQU1dOwotICBHc3RFbGVtZW50ICpjYXBzZmlsdGVyW05VTV9TVFJFQU1dOwotICBHc3RFbGVtZW50ICp2b3JiaXNlbmNbTlVNX1NUUkVBTV07Ci0gIEdzdEVsZW1lbnQgKm9nZ211eFtOVU1fU1RSRUFNXTsKLSAgR3N0RWxlbWVudCAqZnVubmVsOwotICBHc3RFbGVtZW50ICpkZW11eDsKLSAgR3N0RWxlbWVudCAqc3RyZWFtX3N5bmNocm9uaXplcjsKLSAgR3N0RWxlbWVudCAqcXVldWVbTlVNX1NUUkVBTV07Ci0gIEdzdEVsZW1lbnQgKmZpbGVzaW5rW05VTV9TVFJFQU1dOwotCi0gIGdib29sZWFuIHBhZF9ibG9ja2VkW05VTV9TVFJFQU1dOwotICBHc3RQYWQgKnF1ZXVlX3NyY3BhZFtOVU1fU1RSRUFNXTsKLSAgZ3Vsb25nIGJsb2NrZWRfaWRbTlVNX1NUUkVBTV07Ci19OwotCi1BcHAgc19hcHA7Ci0KLWdpbnQgcGFkX2FkZGVkX2NudCA9IDA7Ci0KLXN0YXRpYyBnYm9vbGVhbgotYnVzX2NhbGwgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gKEdNYWluTG9vcCAqKSBkYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOnsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X2Jsb2NrZWQgKEFwcCAqIGFwcCwgZ2Jvb2xlYW4gYmxvY2tlZCkKLXsKLSAgZ2ludCBpID0gMDsKLQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX1NUUkVBTTsgaSsrKSB7Ci0gICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKGFwcC0+cXVldWVfc3JjcGFkW2ldLCBhcHAtPmJsb2NrZWRfaWRbaV0pOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zaW5rX2RvX3JlY29uZmlndXJlIChBcHAgKiBhcHApCi17Ci0gIGdpbnQgaSA9IDA7Ci0gIEdzdFBhZCAqZmlsZXNpbmtfc2lua3BhZFtOVU1fU1RSRUFNXTsKLSAgR3N0UGFkICpzeW5jX3NpbmtwYWRbTlVNX1NUUkVBTV07Ci0gIEdzdFBhZCAqc3luY19zcmNwYWRbTlVNX1NUUkVBTV07Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgR1ZhbHVlIGl0ZW0gPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9TVFJFQU07IGkrKykgewotICAgIHN5bmNfc2lua3BhZFtpXSA9Ci0gICAgICAgIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoYXBwLT5zdHJlYW1fc3luY2hyb25pemVyLCAic2lua18ldSIpOwotICAgIGl0ID0gZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzIChzeW5jX3NpbmtwYWRbaV0pOwotICAgIGdfYXNzZXJ0IChpdCk7Ci0gICAgZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSk7Ci0gICAgc3luY19zcmNwYWRbaV0gPSBnX3ZhbHVlX2R1cF9vYmplY3QgKCZpdGVtKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmaXRlbSk7Ci0KLSAgICBmaWxlc2lua19zaW5rcGFkW2ldID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGFwcC0+ZmlsZXNpbmtbaV0sICJzaW5rIik7Ci0KLSAgICBnc3RfcGFkX2xpbmtfZnVsbCAoYXBwLT5xdWV1ZV9zcmNwYWRbaV0sIHN5bmNfc2lua3BhZFtpXSwKLSAgICAgICAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICAgIGdzdF9wYWRfbGlua19mdWxsIChzeW5jX3NyY3BhZFtpXSwgZmlsZXNpbmtfc2lua3BhZFtpXSwKLSAgICAgICAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICB9Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci0KLX0KLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1ibG9ja2VkX2NiIChHc3RQYWQgKiBibG9ja2VkcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEFwcCAqYXBwID0gdXNlcl9kYXRhOwotICBnaW50IGkgPSAwOwotICBnYm9vbGVhbiBhbGxfcGFkc19ibG9ja2VkID0gVFJVRTsKLQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX1NUUkVBTTsgaSsrKSB7Ci0gICAgaWYgKGJsb2NrZWRwYWQgPT0gYXBwLT5xdWV1ZV9zcmNwYWRbaV0pCi0gICAgICBhcHAtPnBhZF9ibG9ja2VkW2ldID0gVFJVRTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fU1RSRUFNOyBpKyspIHsKLSAgICBpZiAoYXBwLT5xdWV1ZV9zcmNwYWRbaV0gPT0gRkFMU0UpIHsKLSAgICAgIGFsbF9wYWRzX2Jsb2NrZWQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmIChhbGxfcGFkc19ibG9ja2VkID09IFRSVUUpIHsKLSAgICBzaW5rX2RvX3JlY29uZmlndXJlIChhcHApOwotICAgIHNldF9ibG9ja2VkIChhcHAsIEZBTFNFKTsKLSAgfQotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1zdGF0aWMgdm9pZAotc3JjX3BhZF9hZGRlZF9jYiAoR3N0RWxlbWVudCAqIGRlbXV4LCBHc3RQYWQgKiBwYWQsIEFwcCAqIGFwcCkKLXsKLSAgR3N0UGFkICpxdWV1ZV9zaW5rcGFkW05VTV9TVFJFQU1dOwotCi0gIHF1ZXVlX3NpbmtwYWRbcGFkX2FkZGVkX2NudF0gPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGFwcC0+cXVldWVbcGFkX2FkZGVkX2NudF0sICJzaW5rIik7Ci0gIGdzdF9wYWRfbGlua19mdWxsIChwYWQsIHF1ZXVlX3NpbmtwYWRbcGFkX2FkZGVkX2NudF0sCi0gICAgICBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0KLSAgYXBwLT5xdWV1ZV9zcmNwYWRbcGFkX2FkZGVkX2NudF0gPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGFwcC0+cXVldWVbcGFkX2FkZGVkX2NudF0sICJzcmMiKTsKLSAgYXBwLT5ibG9ja2VkX2lkW3BhZF9hZGRlZF9jbnRdID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChhcHAtPnF1ZXVlX3NyY3BhZFtwYWRfYWRkZWRfY250XSwKLSAgICAgIEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS19ET1dOU1RSRUFNLCBibG9ja2VkX2NiLCBhcHAsIE5VTEwpOwotCi0gIHBhZF9hZGRlZF9jbnQrKzsKLX0KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKLXsKLSAgQXBwICphcHAgPSAmc19hcHA7Ci0KLSAgR01haW5Mb29wICpsb29wID0gTlVMTDsKLSAgR3N0QnVzICpidXM7Ci0gIGd1aW50IGJ1c193YXRjaF9pZDsKLQotICBHc3RQYWQgKmZ1bm5lbF9zaW5rcGFkW05VTV9TVFJFQU1dOwotICBHc3RQYWQgKmZ1bm5lbF9zcmNwYWQ7Ci0gIEdzdFBhZCAqZGVtdXhfc2lua3BhZDsKLSAgR3N0UGFkICpvZ2dtdXhfc3JjcGFkW05VTV9TVFJFQU1dOwotCi0gIGd1aW50IHN0cmVhbV9jbnQgPSAwOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIGFwcC0+cGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBmb3IgKHN0cmVhbV9jbnQgPSAwOyBzdHJlYW1fY250IDwgTlVNX1NUUkVBTTsgc3RyZWFtX2NudCsrKSB7Ci0gICAgYXBwLT5hdWRpb3Rlc3RzcmNbc3RyZWFtX2NudF0gPQotICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb3Rlc3RzcmMiLCBOVUxMKTsKLSAgICBhcHAtPmF1ZGlvY29udmVydFtzdHJlYW1fY250XSA9Ci0gICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvY29udmVydCIsIE5VTEwpOwotICAgIGFwcC0+Y2Fwc2ZpbHRlcltzdHJlYW1fY250XSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNhcHNmaWx0ZXIiLCBOVUxMKTsKLSAgICBhcHAtPnZvcmJpc2VuY1tzdHJlYW1fY250XSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZvcmJpc2VuYyIsIE5VTEwpOwotICAgIGFwcC0+b2dnbXV4W3N0cmVhbV9jbnRdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgib2dnbXV4IiwgTlVMTCk7Ci0gIH0KLQotICBhcHAtPmZ1bm5lbCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZ1bm5lbCIsIE5VTEwpOwotICBhcHAtPmRlbXV4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgic3RyZWFtaWRkZW11eCIsIE5VTEwpOwotICBhcHAtPnN0cmVhbV9zeW5jaHJvbml6ZXIgPQotICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgic3RyZWFtc3luY2hyb25pemVyIiwgTlVMTCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9MTsiKTsKLQotICBzdHJlYW1fY250ID0gMDsKLQotICBmb3IgKHN0cmVhbV9jbnQgPSAwOyBzdHJlYW1fY250IDwgTlVNX1NUUkVBTTsgc3RyZWFtX2NudCsrKSB7Ci0gICAgYXBwLT5xdWV1ZVtzdHJlYW1fY250XSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCk7Ci0gICAgYXBwLT5maWxlc2lua1tzdHJlYW1fY250XSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzaW5rIiwgTlVMTCk7Ci0KLSAgICBnX29iamVjdF9zZXQgKGFwcC0+YXVkaW90ZXN0c3JjW3N0cmVhbV9jbnRdLCAid2F2ZSIsIHN0cmVhbV9jbnQsCi0gICAgICAgICJudW0tYnVmZmVycyIsIDIwMDAsIE5VTEwpOwotICAgIGdfb2JqZWN0X3NldCAoYXBwLT5jYXBzZmlsdGVyW3N0cmVhbV9jbnRdLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotICAgIGdfb2JqZWN0X3NldCAoYXBwLT5maWxlc2lua1tzdHJlYW1fY250XSwgImxvY2F0aW9uIiwKLSAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiZmlsZXNpbmtfJWQub2dnIiwgc3RyZWFtX2NudCksIE5VTEwpOwotICB9Ci0KLSAgc3RyZWFtX2NudCA9IDA7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoYXBwLT5kZW11eCwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sgKHNyY19wYWRfYWRkZWRfY2IpLAotICAgICAgYXBwKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoYXBwLT5waXBlbGluZSk7Ci0gIGJ1c193YXRjaF9pZCA9IGdzdF9idXNfYWRkX3dhdGNoIChidXMsIGJ1c19jYWxsLCBsb29wKTsKLSAgZ19vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZm9yIChzdHJlYW1fY250ID0gMDsgc3RyZWFtX2NudCA8IE5VTV9TVFJFQU07IHN0cmVhbV9jbnQrKykgewotICAgIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGFwcC0+cGlwZWxpbmUpLCBhcHAtPmF1ZGlvdGVzdHNyY1tzdHJlYW1fY250XSwKLSAgICAgICAgYXBwLT5hdWRpb2NvbnZlcnRbc3RyZWFtX2NudF0sIGFwcC0+Y2Fwc2ZpbHRlcltzdHJlYW1fY250XSwKLSAgICAgICAgYXBwLT52b3JiaXNlbmNbc3RyZWFtX2NudF0sIGFwcC0+b2dnbXV4W3N0cmVhbV9jbnRdLAotICAgICAgICBhcHAtPnF1ZXVlW3N0cmVhbV9jbnRdLCBhcHAtPmZpbGVzaW5rW3N0cmVhbV9jbnRdLCBOVUxMKTsKLSAgICBpZiAoc3RyZWFtX2NudCA9PSAwKSB7Ci0gICAgICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChhcHAtPnBpcGVsaW5lKSwgYXBwLT5mdW5uZWwsIGFwcC0+ZGVtdXgsCi0gICAgICAgICAgYXBwLT5zdHJlYW1fc3luY2hyb25pemVyLCBOVUxMKTsKLSAgICB9Ci0gIH0KLQotICBzdHJlYW1fY250ID0gMDsKLQotICBmb3IgKHN0cmVhbV9jbnQgPSAwOyBzdHJlYW1fY250IDwgTlVNX1NUUkVBTTsgc3RyZWFtX2NudCsrKSB7Ci0gICAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChhcHAtPmF1ZGlvdGVzdHNyY1tzdHJlYW1fY250XSwKLSAgICAgICAgYXBwLT5hdWRpb2NvbnZlcnRbc3RyZWFtX2NudF0sIGFwcC0+Y2Fwc2ZpbHRlcltzdHJlYW1fY250XSwKLSAgICAgICAgYXBwLT52b3JiaXNlbmNbc3RyZWFtX2NudF0sIGFwcC0+b2dnbXV4W3N0cmVhbV9jbnRdLCBOVUxMKTsKLSAgfQotCi0gIHN0cmVhbV9jbnQgPSAwOwotCi0gIGZvciAoc3RyZWFtX2NudCA9IDA7IHN0cmVhbV9jbnQgPCBOVU1fU1RSRUFNOyBzdHJlYW1fY250KyspIHsKLSAgICBmdW5uZWxfc2lua3BhZFtzdHJlYW1fY250XSA9Ci0gICAgICAgIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoYXBwLT5mdW5uZWwsICJzaW5rXyV1Iik7Ci0gICAgb2dnbXV4X3NyY3BhZFtzdHJlYW1fY250XSA9Ci0gICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChhcHAtPm9nZ211eFtzdHJlYW1fY250XSwgInNyYyIpOwotICAgIGdzdF9wYWRfbGluayAob2dnbXV4X3NyY3BhZFtzdHJlYW1fY250XSwgZnVubmVsX3NpbmtwYWRbc3RyZWFtX2NudF0pOwotICB9Ci0KLSAgZnVubmVsX3NyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChhcHAtPmZ1bm5lbCwgInNyYyIpOwotCi0gIGRlbXV4X3NpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYXBwLT5kZW11eCwgInNpbmsiKTsKLSAgZ3N0X3BhZF9saW5rIChmdW5uZWxfc3JjcGFkLCBkZW11eF9zaW5rcGFkKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGFwcC0+cGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGFwcC0+cGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ19vYmplY3RfdW5yZWYgKGFwcC0+cGlwZWxpbmUpOwotICBnX3NvdXJjZV9yZW1vdmUgKGJ1c193YXRjaF9pZCk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWY4N2FjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1ub2luc3RfUFJPR1JBTVMgPSBzdHJlYW0tc3RhdHVzCi1pZiBIQVZFX1BUSFJFQUQKLW5vaW5zdF9QUk9HUkFNUyArPSBydHBvb2wtdGVzdAotZW5kaWYKLQotc3RyZWFtX3N0YXR1c19TT1VSQ0VTID0gc3RyZWFtLXN0YXR1cy5jCi1zdHJlYW1fc3RhdHVzX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCi1zdHJlYW1fc3RhdHVzX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi0KLXJ0cG9vbF90ZXN0X1NPVVJDRVMgPSBydHBvb2wtdGVzdC5jIHRlc3RydHBvb2wuaCB0ZXN0cnRwb29sLmMKLXJ0cG9vbF90ZXN0X0xEQUREID0gJChHU1RfT0JKX0xJQlMpICQoUFRIUkVBRF9MSUJTKQotcnRwb29sX3Rlc3RfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykKLQotRVhUUkFfRElTVCA9IHJ0cG9vbC10ZXN0LmMgdGVzdHJ0cG9vbC5oIHRlc3RydHBvb2wuYwpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MjhkMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDg2MSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gc3RyZWFtLXN0YXR1cyQoRVhFRVhUKSAkKGFtX19FWEVFWFRfMSkKLUBIQVZFX1BUSFJFQURfVFJVRUBhbV9fYXBwZW5kXzEgPSBydHBvb2wtdGVzdAotc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvc3RyZWFtcwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQEhBVkVfUFRIUkVBRF9UUlVFQGFtX19FWEVFWFRfMSA9IHJ0cG9vbC10ZXN0JChFWEVFWFQpCi1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYW1fcnRwb29sX3Rlc3RfT0JKRUNUUyA9IHJ0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0LiQoT0JKRVhUKSBcCi0JcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC4kKE9CSkVYVCkKLXJ0cG9vbF90ZXN0X09CSkVDVFMgPSAkKGFtX3J0cG9vbF90ZXN0X09CSkVDVFMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotcnRwb29sX3Rlc3RfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotcnRwb29sX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQocnRwb29sX3Rlc3RfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotYW1fc3RyZWFtX3N0YXR1c19PQkpFQ1RTID0gc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLiQoT0JKRVhUKQotc3RyZWFtX3N0YXR1c19PQkpFQ1RTID0gJChhbV9zdHJlYW1fc3RhdHVzX09CSkVDVFMpCi1zdHJlYW1fc3RhdHVzX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotc3RyZWFtX3N0YXR1c19MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChzdHJlYW1fc3RhdHVzX0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKHJ0cG9vbF90ZXN0X1NPVVJDRVMpICQoc3RyZWFtX3N0YXR1c19TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChydHBvb2xfdGVzdF9TT1VSQ0VTKSAkKHN0cmVhbV9zdGF0dXNfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJBU0hfQ09NUExFVElPTl9DRkxBR1MgPSBAQkFTSF9DT01QTEVUSU9OX0NGTEFHU0AKLUJBU0hfQ09NUExFVElPTl9ESVIgPSBAQkFTSF9DT01QTEVUSU9OX0RJUkAKLUJBU0hfQ09NUExFVElPTl9MSUJTID0gQEJBU0hfQ09NUExFVElPTl9MSUJTQAotQkFTSF9IRUxQRVJTX0RJUiA9IEBCQVNIX0hFTFBFUlNfRElSQAotQklTT05fUEFUSCA9IEBCSVNPTl9QQVRIQAotQ0FQX0xJQlMgPSBAQ0FQX0xJQlNACi1DQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACi1DQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNIRUNLX01BSk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUFKT1JfVkVSU0lPTkAKLUNIRUNLX01JQ1JPX1ZFUlNJT04gPSBAQ0hFQ0tfTUlDUk9fVkVSU0lPTkAKLUNIRUNLX01JTk9SX1ZFUlNJT04gPSBAQ0hFQ0tfTUlOT1JfVkVSU0lPTkAKLUNIRUNLX1ZFUlNJT04gPSBAQ0hFQ0tfVkVSU0lPTkAKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREFUQURJUiA9IEBEQVRBRElSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRExMVE9PTCA9IEBETExUT09MQAotRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FTkFCTEVfU1VCVU5JVCA9IEBFTkFCTEVfU1VCVU5JVEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxFWF9QQVRIID0gQEZMRVhfUEFUSEAKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01QX0xJQlMgPSBAR01QX0xJQlNACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTTF9MSUJTID0gQEdTTF9MSUJTQAotR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQyA9IEBHU1RDT05GSUdfQlVJTFRfV0lUSF9NU1ZDQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9DRkxBR1MgPSBAR1NUX0FMTF9DRkxBR1NACi1HU1RfQUxMX0NYWEZMQUdTID0gQEdTVF9BTExfQ1hYRkxBR1NACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FMTF9MSUJTID0gQEdTVF9BTExfTElCU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkUgPSBAR1NUX0RJU0FCTEVfR1NUX0RFQlVHX0RFRklORUAKLUdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9UUkFDRVJfSE9PS1NfREVGSU5FQAotR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkdfREVGSU5FID0gQEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORUAKLUdTVF9ESVNBQkxFX1BBUlNFX0RFRklORSA9IEBHU1RfRElTQUJMRV9QQVJTRV9ERUZJTkVACi1HU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FID0gQEdTVF9ESVNBQkxFX1BMVUdJTl9ERUZJTkVACi1HU1RfRElTQUJMRV9SRUdJU1RSWV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FQAotR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORSA9IEBHU1RfSEFWRV9NT05PVE9OSUNfQ0xPQ0tfREVGSU5FQAotR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORSA9IEBHU1RfSEFWRV9QT1NJWF9USU1FUlNfREVGSU5FQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUJfTERGTEFHUyA9IEBHU1RfTElCX0xERkxBR1NACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX09CSl9DRkxBR1MgPSBAR1NUX09CSl9DRkxBR1NACi1HU1RfT0JKX0NYWEZMQUdTID0gQEdTVF9PQkpfQ1hYRkxBR1NACi1HU1RfT0JKX0xJQlMgPSBAR1NUX09CSl9MSUJTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFRCA9IEBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEQAotR1NUX1BUUF9IRUxQRVJfSU5TVEFMTEVEID0gQEdTVF9QVFBfSEVMUEVSX0lOU1RBTExFREAKLUdTVF9SRUdJU1RSWV9ET0NfVFlQRVMgPSBAR1NUX1JFR0lTVFJZX0RPQ19UWVBFU0AKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVkVSU0lPTl9NQUpPUiA9IEBHU1RfVkVSU0lPTl9NQUpPUkAKLUdTVF9WRVJTSU9OX01JQ1JPID0gQEdTVF9WRVJTSU9OX01JQ1JPQAotR1NUX1ZFUlNJT05fTUlOT1IgPSBAR1NUX1ZFUlNJT05fTUlOT1JACi1HU1RfVkVSU0lPTl9OQU5PID0gQEdTVF9WRVJTSU9OX05BTk9ACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUhBVkVfQ0FQID0gQEhBVkVfQ0FQQAotSEFWRV9ET0NCT09LMlBTID0gQEhBVkVfRE9DQk9PSzJQU0AKLUhBVkVfRFZJUFMgPSBASEFWRV9EVklQU0AKLUhBVkVfRVBTVE9QREYgPSBASEFWRV9FUFNUT1BERkAKLUhBVkVfRk9SSyA9IEBIQVZFX0ZPUktACi1IQVZFX0dNUCA9IEBIQVZFX0dNUEAKLUhBVkVfR1NMID0gQEhBVkVfR1NMQAotSEFWRV9KQURFVEVYID0gQEhBVkVfSkFERVRFWEAKLUhBVkVfUE5HVE9QTk0gPSBASEFWRV9QTkdUT1BOTUAKLUhBVkVfUE5NVE9QUyA9IEBIQVZFX1BOTVRPUFNACi1IQVZFX1BTMlBERiA9IEBIQVZFX1BTMlBERkAKLUhBVkVfWE1MTElOVCA9IEBIQVZFX1hNTExJTlRACi1IQVZFX1hTTFRQUk9DID0gQEhBVkVfWFNMVFBST0NACi1IT1NUX0NQVSA9IEBIT1NUX0NQVUAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUlOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAotSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAotSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAotSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACi1JTlRST1NQRUNUSU9OX0lOSVQgPSBASU5UUk9TUEVDVElPTl9JTklUQAotSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKLUlOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKLUlOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACi1JTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJESVIgPSBATElCRElSQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEVSTF9QQVRIID0gQFBFUkxfUEFUSEAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBSSU5URl9DRkxBR1MgPSBAUFJJTlRGX0NGTEFHU0AKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVENBUCA9IEBTRVRDQVBACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU09DS0VUX0xJQlMgPSBAU09DS0VUX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVVOV0lORF9DRkxBR1MgPSBAVU5XSU5EX0NGTEFHU0AKLVVOV0lORF9MSUJTID0gQFVOV0lORF9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0lOMzJfTElCUyA9IEBXSU4zMl9MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACi1YU0xUUFJPQyA9IEBYU0xUUFJPQ0AKLVhTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotc3RyZWFtX3N0YXR1c19TT1VSQ0VTID0gc3RyZWFtLXN0YXR1cy5jCi1zdHJlYW1fc3RhdHVzX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCi1zdHJlYW1fc3RhdHVzX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1ydHBvb2xfdGVzdF9TT1VSQ0VTID0gcnRwb29sLXRlc3QuYyB0ZXN0cnRwb29sLmggdGVzdHJ0cG9vbC5jCi1ydHBvb2xfdGVzdF9MREFERCA9ICQoR1NUX09CSl9MSUJTKSAkKFBUSFJFQURfTElCUykKLXJ0cG9vbF90ZXN0X0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpCi1FWFRSQV9ESVNUID0gcnRwb29sLXRlc3QuYyB0ZXN0cnRwb29sLmggdGVzdHJ0cG9vbC5jCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9zdHJlYW1zL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL3N0cmVhbXMvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLW5vaW5zdFBST0dSQU1TOgotCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLQotcnRwb29sLXRlc3QkKEVYRUVYVCk6ICQocnRwb29sX3Rlc3RfT0JKRUNUUykgJChydHBvb2xfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcnRwb29sX3Rlc3RfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgcnRwb29sLXRlc3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKHJ0cG9vbF90ZXN0X0xJTkspICQocnRwb29sX3Rlc3RfT0JKRUNUUykgJChydHBvb2xfdGVzdF9MREFERCkgJChMSUJTKQotCi1zdHJlYW0tc3RhdHVzJChFWEVFWFQpOiAkKHN0cmVhbV9zdGF0dXNfT0JKRUNUUykgJChzdHJlYW1fc3RhdHVzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9zdHJlYW1fc3RhdHVzX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHN0cmVhbS1zdGF0dXMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKHN0cmVhbV9zdGF0dXNfTElOSykgJChzdHJlYW1fc3RhdHVzX09CSkVDVFMpICQoc3RyZWFtX3N0YXR1c19MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcnRwb29sX3Rlc3QtcnRwb29sLXRlc3QuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3J0cG9vbF90ZXN0LXRlc3RydHBvb2wuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1ydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vOiBydHBvb2wtdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRwb29sX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3J0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0LlRwbyAtYyAtbyBydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vIGB0ZXN0IC1mICdydHBvb2wtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BydHBvb2wtdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9ydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5UcG8gJChERVBESVIpL3J0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncnRwb29sLXRlc3QuYycgb2JqZWN0PSdydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHBvb2xfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vIGB0ZXN0IC1mICdydHBvb2wtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BydHBvb2wtdGVzdC5jCi0KLXJ0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0Lm9iajogcnRwb29sLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0cG9vbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3J0cG9vbF90ZXN0LXJ0cG9vbC10ZXN0LlRwbyAtYyAtbyBydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3J0cG9vbC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncnRwb29sLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcnRwb29sLXRlc3QuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcnRwb29sX3Rlc3QtcnRwb29sLXRlc3QuVHBvICQoREVQRElSKS9ydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3J0cG9vbC10ZXN0LmMnIG9iamVjdD0ncnRwb29sX3Rlc3QtcnRwb29sLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChydHBvb2xfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBydHBvb2xfdGVzdC1ydHBvb2wtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3J0cG9vbC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncnRwb29sLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcnRwb29sLXRlc3QuYyc7IGZpYAotCi1ydHBvb2xfdGVzdC10ZXN0cnRwb29sLm86IHRlc3RydHBvb2wuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJ0cG9vbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBydHBvb2xfdGVzdC10ZXN0cnRwb29sLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3J0cG9vbF90ZXN0LXRlc3RydHBvb2wuVHBvIC1jIC1vIHJ0cG9vbF90ZXN0LXRlc3RydHBvb2wubyBgdGVzdCAtZiAndGVzdHJ0cG9vbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0cnRwb29sLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3J0cG9vbF90ZXN0LXRlc3RydHBvb2wuVHBvICQoREVQRElSKS9ydHBvb2xfdGVzdC10ZXN0cnRwb29sLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGVzdHJ0cG9vbC5jJyBvYmplY3Q9J3J0cG9vbF90ZXN0LXRlc3RydHBvb2wubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRwb29sX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5vIGB0ZXN0IC1mICd0ZXN0cnRwb29sLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3RydHBvb2wuYwotCi1ydHBvb2xfdGVzdC10ZXN0cnRwb29sLm9iajogdGVzdHJ0cG9vbC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRwb29sX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJ0cG9vbF90ZXN0LXRlc3RydHBvb2wub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9ydHBvb2xfdGVzdC10ZXN0cnRwb29sLlRwbyAtYyAtbyBydHBvb2xfdGVzdC10ZXN0cnRwb29sLm9iaiBgaWYgdGVzdCAtZiAndGVzdHJ0cG9vbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3RydHBvb2wuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdHJ0cG9vbC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9ydHBvb2xfdGVzdC10ZXN0cnRwb29sLlRwbyAkKERFUERJUikvcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Rlc3RydHBvb2wuYycgb2JqZWN0PSdydHBvb2xfdGVzdC10ZXN0cnRwb29sLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocnRwb29sX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnRwb29sX3Rlc3QtdGVzdHJ0cG9vbC5vYmogYGlmIHRlc3QgLWYgJ3Rlc3RydHBvb2wuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0cnRwb29sLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3RydHBvb2wuYyc7IGZpYAotCi1zdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMubzogc3RyZWFtLXN0YXR1cy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3RyZWFtX3N0YXR1c19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5UcG8gLWMgLW8gc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLm8gYHRlc3QgLWYgJ3N0cmVhbS1zdGF0dXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RyZWFtLXN0YXR1cy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMuVHBvICQoREVQRElSKS9zdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzdHJlYW0tc3RhdHVzLmMnIG9iamVjdD0nc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmVhbV9zdGF0dXNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLm8gYHRlc3QgLWYgJ3N0cmVhbS1zdGF0dXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RyZWFtLXN0YXR1cy5jCi0KLXN0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5vYmo6IHN0cmVhbS1zdGF0dXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmVhbV9zdGF0dXNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmVhbV9zdGF0dXMtc3RyZWFtLXN0YXR1cy5UcG8gLWMgLW8gc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLm9iaiBgaWYgdGVzdCAtZiAnc3RyZWFtLXN0YXR1cy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3N0cmVhbS1zdGF0dXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RyZWFtLXN0YXR1cy5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMuVHBvICQoREVQRElSKS9zdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzdHJlYW0tc3RhdHVzLmMnIG9iamVjdD0nc3RyZWFtX3N0YXR1cy1zdHJlYW0tc3RhdHVzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3RyZWFtX3N0YXR1c19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzdHJlYW1fc3RhdHVzLXN0cmVhbS1zdGF0dXMub2JqIGBpZiB0ZXN0IC1mICdzdHJlYW0tc3RhdHVzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3RyZWFtLXN0YXR1cy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zdHJlYW0tc3RhdHVzLmMnOyBmaWAKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9ydHBvb2wtdGVzdC5jIGIvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy9ydHBvb2wtdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTEyOWQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvcnRwb29sLXRlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAidGVzdHJ0cG9vbC5oIgotCi1zdGF0aWMgR3N0VGFza1Bvb2wgKnBvb2w7Ci0KLXN0YXRpYyB2b2lkCi1ldmVudF9sb29wIChHc3RCdXMgKiBidXMsIEdzdEVsZW1lbnQgKiBwaXBlKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKLQotICB3aGlsZSAoVFJVRSkgewotICAgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQU5ZLCAtMSk7Ci0KLSAgICBnX2Fzc2VydCAobWVzc2FnZSAhPSBOVUxMKTsKLQotICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgewotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICAgIGdfbWVzc2FnZSAoInJlY2VpdmVkIEVPUyIpOwotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzoKLSAgICAgIHsKLSAgICAgICAgR0Vycm9yICpnZXJyb3I7Ci0gICAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOwotICAgICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOwotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKLSAgICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgICBHRXJyb3IgKmdlcnJvcjsKLSAgICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOwotICAgICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOwotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKLSAgICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdXNTeW5jUmVwbHkKLXN5bmNfYnVzX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEVsZW1lbnQgKiBiaW4pCi17Ci0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVM6Ci0gICAgewotICAgICAgR3N0U3RyZWFtU3RhdHVzVHlwZSB0eXBlOwotICAgICAgR3N0RWxlbWVudCAqb3duZXI7Ci0gICAgICBjb25zdCBHVmFsdWUgKnZhbDsKLSAgICAgIGdjaGFyICpwYXRoOwotICAgICAgR3N0VGFzayAqdGFzayA9IE5VTEw7Ci0KLSAgICAgIGdfbWVzc2FnZSAoInJlY2VpdmVkIFNUUkVBTV9TVEFUVVMiKTsKLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKG1lc3NhZ2UsICZ0eXBlLCAmb3duZXIpOwotCi0gICAgICB2YWwgPSBnc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKG1lc3NhZ2UpOwotCi0gICAgICBnX21lc3NhZ2UgKCJ0eXBlOiAgICVkIiwgdHlwZSk7Ci0gICAgICBwYXRoID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpOwotICAgICAgZ19tZXNzYWdlICgic291cmNlOiAlcyIsIHBhdGgpOwotICAgICAgZ19mcmVlIChwYXRoKTsKLSAgICAgIHBhdGggPSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoR1NUX09CSkVDVCAob3duZXIpKTsKLSAgICAgIGdfbWVzc2FnZSAoIm93bmVyOiAgJXMiLCBwYXRoKTsKLSAgICAgIGdfZnJlZSAocGF0aCk7Ci0KLSAgICAgIGlmIChHX1ZBTFVFX0hPTERTX09CSkVDVCAodmFsKSkgewotICAgICAgICBnX21lc3NhZ2UgKCJvYmplY3Q6IHR5cGUgJXMsIHZhbHVlICVwIiwgR19WQUxVRV9UWVBFX05BTUUgKHZhbCksCi0gICAgICAgICAgICBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbCkpOwotICAgICAgfSBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX1BPSU5URVIgKHZhbCkpIHsKLSAgICAgICAgZ19tZXNzYWdlICgib2JqZWN0OiB0eXBlICVzLCB2YWx1ZSAlcCIsIEdfVkFMVUVfVFlQRV9OQU1FICh2YWwpLAotICAgICAgICAgICAgZ192YWx1ZV9nZXRfcG9pbnRlciAodmFsKSk7Ci0gICAgICB9IGVsc2UgaWYgKEdfSVNfVkFMVUUgKHZhbCkpIHsKLSAgICAgICAgZ19tZXNzYWdlICgib2JqZWN0OiB0eXBlICVzIiwgR19WQUxVRV9UWVBFX05BTUUgKHZhbCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ19tZXNzYWdlICgib2JqZWN0OiAobnVsbCkiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHNlZSBpZiB3ZSBrbm93IGhvdyB0byBkZWFsIHdpdGggdGhpcyBvYmplY3QgKi8KLSAgICAgIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfVEFTSykgewotICAgICAgICB0YXNrID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWwpOwotICAgICAgfQotCi0gICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0NSRUFURToKLSAgICAgICAgICBpZiAodGFzaykgewotICAgICAgICAgICAgZ19tZXNzYWdlICgiY3JlYXRlZCB0YXNrICVwLCBzZXR0aW5nIHBvb2wiLCB0YXNrKTsKLSAgICAgICAgICAgIGdzdF90YXNrX3NldF9wb29sICh0YXNrLCBwb29sKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUjoKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0xFQVZFOgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICAvKiBwYXNzIGFsbCBtZXNzYWdlcyBvbiB0aGUgYXN5bmMgcXVldWUgKi8KLSAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpiaW4sICphbHNhc3JjLCAqYWxzYXNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgLyogY3JlYXRlIGEgY3VzdG9tIHRocmVhZCBwb29sICovCi0gIHBvb2wgPSB0ZXN0X3J0X3Bvb2xfbmV3ICgpOwotCi0gIC8qIGNyZWF0ZSBhIG5ldyBiaW4gdG8gaG9sZCB0aGUgZWxlbWVudHMgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGdfYXNzZXJ0IChiaW4pOwotCi0gIC8qIGNyZWF0ZSBhIHNvdXJjZSAqLwotICBhbHNhc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYWxzYXNyYyIsICJhbHNhc3JjIik7Ci0gIGdfYXNzZXJ0IChhbHNhc3JjKTsKLSAgZ19vYmplY3Rfc2V0IChhbHNhc3JjLCAiZGV2aWNlIiwgImh3OjAiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChhbHNhc3JjLCAibGF0ZW5jeS10aW1lIiwgKGdpbnQ2NCkgMjAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoYWxzYXNyYywgInNsYXZlLW1ldGhvZCIsIDIsIE5VTEwpOwotCi0gIC8qIGFuZCBhIHNpbmsgKi8KLSAgYWxzYXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhbHNhc2luayIsICJhbHNhc2luayIpOwotICBnX2Fzc2VydCAoYWxzYXNpbmspOwotICBnX29iamVjdF9zZXQgKGFsc2FzaW5rLCAiZGV2aWNlIiwgImh3OjAiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChhbHNhc2luaywgImxhdGVuY3ktdGltZSIsIChnaW50NjQpIDIwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGFsc2FzaW5rLCAiYnVmZmVyLXRpbWUiLCAoZ2ludDY0KSAxMDAwMCwgTlVMTCk7Ci0KLSAgLyogYWRkIG9iamVjdHMgdG8gdGhlIG1haW4gcGlwZWxpbmUgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgYWxzYXNyYywgYWxzYXNpbmssIE5VTEwpOwotCi0gIC8qIGxpbmsgdGhlIGVsZW1lbnRzICovCi0gIGdzdF9lbGVtZW50X2xpbmsgKGFsc2FzcmMsIGFsc2FzaW5rKTsKLQotICAvKiBnZXQgdGhlIGJ1cywgd2UgbmVlZCB0byBpbnN0YWxsIGEgc3luYyBoYW5kbGVyICovCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKGJpbikpOwotICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKGJ1cywgKEdzdEJ1c1N5bmNIYW5kbGVyKSBzeW5jX2J1c19oYW5kbGVyLCBiaW4sCi0gICAgICBOVUxMKTsKLQotICAvKiBzdGFydCBwbGF5aW5nICovCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIHJldHVybiAwOwotCi0gIC8qIFJ1biBldmVudCBsb29wIGxpc3RlbmluZyBmb3IgYnVzIG1lc3NhZ2VzIHVudGlsIEVPUyBvciBFUlJPUiAqLwotICBldmVudF9sb29wIChidXMsIGJpbik7Ci0KLSAgLyogc3RvcCB0aGUgYmluICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZXhpdCAoMCk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3N0cmVhbS1zdGF0dXMuYyBiL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvc3RyZWFtLXN0YXR1cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTQ4MjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvc3RyZWFtLXN0YXR1cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyB2b2lkCi1ldmVudF9sb29wIChHc3RCdXMgKiBidXMsIEdzdEVsZW1lbnQgKiBwaXBlKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKLQotICB3aGlsZSAoVFJVRSkgewotICAgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQU5ZLCAtMSk7Ci0KLSAgICBnX2Fzc2VydCAobWVzc2FnZSAhPSBOVUxMKTsKLQotICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgewotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICAgIGdfbWVzc2FnZSAoInJlY2VpdmVkIEVPUyIpOwotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzp7Ci0gICAgICAgIEdFcnJvciAqZ2Vycm9yOwotICAgICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKLSAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7Ci0gICAgICAgIGdfZnJlZSAoZGVidWcpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgICBHRXJyb3IgKmdlcnJvcjsKLSAgICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOwotICAgICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOwotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKLSAgICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdXNTeW5jUmVwbHkKLXN5bmNfYnVzX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEVsZW1lbnQgKiBiaW4pCi17Ci0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVM6Ci0gICAgewotICAgICAgR3N0U3RyZWFtU3RhdHVzVHlwZSB0eXBlOwotICAgICAgR3N0RWxlbWVudCAqb3duZXI7Ci0gICAgICBjb25zdCBHVmFsdWUgKnZhbDsKLSAgICAgIGdjaGFyICpwYXRoOwotICAgICAgR3N0VGFzayAqdGFzayA9IE5VTEw7Ci0KLSAgICAgIGdfbWVzc2FnZSAoInJlY2VpdmVkIFNUUkVBTV9TVEFUVVMiKTsKLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9zdGF0dXMgKG1lc3NhZ2UsICZ0eXBlLCAmb3duZXIpOwotCi0gICAgICB2YWwgPSBnc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKG1lc3NhZ2UpOwotCi0gICAgICBnX21lc3NhZ2UgKCJ0eXBlOiAgICVkIiwgdHlwZSk7Ci0gICAgICBwYXRoID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpOwotICAgICAgZ19tZXNzYWdlICgic291cmNlOiAlcyIsIHBhdGgpOwotICAgICAgZ19mcmVlIChwYXRoKTsKLSAgICAgIHBhdGggPSBnc3Rfb2JqZWN0X2dldF9wYXRoX3N0cmluZyAoR1NUX09CSkVDVCAob3duZXIpKTsKLSAgICAgIGdfbWVzc2FnZSAoIm93bmVyOiAgJXMiLCBwYXRoKTsKLSAgICAgIGdfZnJlZSAocGF0aCk7Ci0gICAgICBnX21lc3NhZ2UgKCJvYmplY3Q6IHR5cGUgJXMsIHZhbHVlICVwIiwgR19WQUxVRV9UWVBFX05BTUUgKHZhbCksCi0gICAgICAgICAgZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWwpKTsKLQotICAgICAgLyogc2VlIGlmIHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aCB0aGlzIG9iamVjdCAqLwotICAgICAgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSA9PSBHU1RfVFlQRV9UQVNLKSB7Ci0gICAgICAgIHRhc2sgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbCk7Ci0gICAgICB9Ci0KLSAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfQ1JFQVRFOgotICAgICAgICAgIGdfbWVzc2FnZSAoImNyZWF0ZWQgdGFzayAlcCIsIHRhc2spOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfRU5URVI6Ci0gICAgICAgICAgLyogZ19tZXNzYWdlICgicmFpc2luZyB0YXNrIHByaW9yaXR5Iik7ICovCi0gICAgICAgICAgLyogc2V0cHJpb3JpdHkgKFBSSU9fUFJPQ0VTUywgMCwgLTEwKTsgKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0xFQVZFOgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICAvKiBwYXNzIGFsbCBtZXNzYWdlcyBvbiB0aGUgYXN5bmMgcXVldWUgKi8KLSAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpiaW4sICpmYWtlc3JjLCAqZmFrZXNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBhIG5ldyBiaW4gdG8gaG9sZCB0aGUgZWxlbWVudHMgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGdfYXNzZXJ0IChiaW4pOwotCi0gIC8qIGNyZWF0ZSBhIHNvdXJjZSAqLwotICBmYWtlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJmYWtlc3JjIik7Ci0gIGdfYXNzZXJ0IChmYWtlc3JjKTsKLSAgZ19vYmplY3Rfc2V0IChmYWtlc3JjLCAibnVtLWJ1ZmZlcnMiLCA1MCwgTlVMTCk7Ci0KLSAgLyogYW5kIGEgc2luayAqLwotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2VzaW5rIik7Ci0gIGdfYXNzZXJ0IChmYWtlc2luayk7Ci0KLSAgLyogYWRkIG9iamVjdHMgdG8gdGhlIG1haW4gcGlwZWxpbmUgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgZmFrZXNyYywgZmFrZXNpbmssIE5VTEwpOwotCi0gIC8qIGxpbmsgdGhlIGVsZW1lbnRzICovCi0gIGdzdF9lbGVtZW50X2xpbmsgKGZha2VzcmMsIGZha2VzaW5rKTsKLQotICAvKiBnZXQgdGhlIGJ1cywgd2UgbmVlZCB0byBpbnN0YWxsIGEgc3luYyBoYW5kbGVyICovCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKGJpbikpOwotICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKGJ1cywgKEdzdEJ1c1N5bmNIYW5kbGVyKSBzeW5jX2J1c19oYW5kbGVyLCBiaW4sCi0gICAgICBOVUxMKTsKLQotICAvKiBzdGFydCBwbGF5aW5nICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgLyogUnVuIGV2ZW50IGxvb3AgbGlzdGVuaW5nIGZvciBidXMgbWVzc2FnZXMgdW50aWwgRU9TIG9yIEVSUk9SICovCi0gIGV2ZW50X2xvb3AgKGJ1cywgYmluKTsKLQotICAvKiBzdG9wIHRoZSBiaW4gKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBleGl0ICgwKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3N0cmVhbXMvdGVzdHJ0cG9vbC5jIGIvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMjlmZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaW5jbHVkZSAidGVzdHJ0cG9vbC5oIgotCi1zdGF0aWMgdm9pZCB0ZXN0X3J0X3Bvb2xfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi10eXBlZGVmIHN0cnVjdAotewotICBwdGhyZWFkX3QgdGhyZWFkOwotfSBUZXN0UlRJZDsKLQotR19ERUZJTkVfVFlQRSAoVGVzdFJUUG9vbCwgdGVzdF9ydF9wb29sLCBHU1RfVFlQRV9UQVNLX1BPT0wpOwotCi1zdGF0aWMgdm9pZAotZGVmYXVsdF9wcmVwYXJlIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgLyogd2UgZG9uJ3QgZG8gYW55dGhpbmcgaGVyZS4gV2UgY291bGQgY29uc3RydWN0IGEgcG9vbCBvZiB0aHJlYWRzIGhlcmUgdGhhdAotICAgKiB3ZSBjb3VsZCByZXVzZSBsYXRlciBidXQgd2UgZG9uJ3QgKi8KLSAgZ19tZXNzYWdlICgicHJlcGFyZSBSZWFsdGltZSBwb29sICVwIiwgcG9vbCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWZhdWx0X2NsZWFudXAgKEdzdFRhc2tQb29sICogcG9vbCkKLXsKLSAgZ19tZXNzYWdlICgiY2xlYW51cCBSZWFsdGltZSBwb29sICVwIiwgcG9vbCk7Ci19Ci0KLXN0YXRpYyBncG9pbnRlcgotZGVmYXVsdF9wdXNoIChHc3RUYXNrUG9vbCAqIHBvb2wsIEdzdFRhc2tQb29sRnVuY3Rpb24gZnVuYywgZ3BvaW50ZXIgZGF0YSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIFRlc3RSVElkICp0aWQ7Ci0gIGdpbnQgcmVzOwotICBwdGhyZWFkX2F0dHJfdCBhdHRyOwotICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07Ci0KLSAgZ19tZXNzYWdlICgicHVzaGluZyBSZWFsdGltZSBwb29sICVwLCAlcCIsIHBvb2wsIGZ1bmMpOwotCi0gIHRpZCA9IGdfc2xpY2VfbmV3MCAoVGVzdFJUSWQpOwotCi0gIGdfbWVzc2FnZSAoInNldCBwb2xpY3kiKTsKLSAgcHRocmVhZF9hdHRyX2luaXQgKCZhdHRyKTsKLSAgaWYgKChyZXMgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKCZhdHRyLCBTQ0hFRF9SUikpICE9IDApCi0gICAgZ193YXJuaW5nICgic2V0c2NoZWRwb2xpY3k6IGZhaWx1cmU6ICVwIiwgZ19zdHJlcnJvciAocmVzKSk7Ci0KLSAgZ19tZXNzYWdlICgic2V0IHByaW8iKTsKLSAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSA1MDsKLSAgaWYgKChyZXMgPSBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAoJmF0dHIsICZwYXJhbSkpICE9IDApCi0gICAgZ193YXJuaW5nICgic2V0c2NoZWRwYXJhbTogZmFpbHVyZTogJXAiLCBnX3N0cmVycm9yIChyZXMpKTsKLQotICBnX21lc3NhZ2UgKCJzZXQgaW5oZXJpdCIpOwotICBpZiAoKHJlcyA9IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKCZhdHRyLCBQVEhSRUFEX0VYUExJQ0lUX1NDSEVEKSkgIT0gMCkKLSAgICBnX3dhcm5pbmcgKCJzZXRpbmhlcml0c2NoZWQ6IGZhaWx1cmU6ICVwIiwgZ19zdHJlcnJvciAocmVzKSk7Ci0KLSAgZ19tZXNzYWdlICgiY3JlYXRlIHRocmVhZCIpOwotICByZXMgPSBwdGhyZWFkX2NyZWF0ZSAoJnRpZC0+dGhyZWFkLCAmYXR0ciwgKHZvaWQgKigqKSh2b2lkICopKSBmdW5jLCBkYXRhKTsKLQotICBpZiAocmVzICE9IDApIHsKLSAgICBnX3NldF9lcnJvciAoZXJyb3IsIEdfVEhSRUFEX0VSUk9SLCBHX1RIUkVBRF9FUlJPUl9BR0FJTiwKLSAgICAgICAgIkVycm9yIGNyZWF0aW5nIHRocmVhZDogJXMiLCBnX3N0cmVycm9yIChyZXMpKTsKLSAgICBnX3NsaWNlX2ZyZWUgKFRlc3RSVElkLCB0aWQpOwotICAgIHRpZCA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gdGlkOwotfQotCi1zdGF0aWMgdm9pZAotZGVmYXVsdF9qb2luIChHc3RUYXNrUG9vbCAqIHBvb2wsIGdwb2ludGVyIGlkKQotewotICBUZXN0UlRJZCAqdGlkID0gKFRlc3RSVElkICopIGlkOwotCi0gIGdfbWVzc2FnZSAoImpvaW5pbmcgUmVhbHRpbWUgcG9vbCAlcCIsIHBvb2wpOwotCi0gIHB0aHJlYWRfam9pbiAodGlkLT50aHJlYWQsIE5VTEwpOwotCi0gIGdfc2xpY2VfZnJlZSAoVGVzdFJUSWQsIHRpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3J0X3Bvb2xfY2xhc3NfaW5pdCAoVGVzdFJUUG9vbENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0VGFza1Bvb2xDbGFzcyAqZ3N0dGFza3Bvb2xfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHRhc2twb29sX2NsYXNzID0gKEdzdFRhc2tQb29sQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBHU1RfREVCVUdfRlVOQ1BUUiAodGVzdF9ydF9wb29sX2ZpbmFsaXplKTsKLQotICBnc3R0YXNrcG9vbF9jbGFzcy0+cHJlcGFyZSA9IGRlZmF1bHRfcHJlcGFyZTsKLSAgZ3N0dGFza3Bvb2xfY2xhc3MtPmNsZWFudXAgPSBkZWZhdWx0X2NsZWFudXA7Ci0gIGdzdHRhc2twb29sX2NsYXNzLT5wdXNoID0gZGVmYXVsdF9wdXNoOwotICBnc3R0YXNrcG9vbF9jbGFzcy0+am9pbiA9IGRlZmF1bHRfam9pbjsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfcnRfcG9vbF9pbml0IChUZXN0UlRQb29sICogcG9vbCkKLXsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfcnRfcG9vbF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR19PQkpFQ1RfQ0xBU1MgKHRlc3RfcnRfcG9vbF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotR3N0VGFza1Bvb2wgKgotdGVzdF9ydF9wb29sX25ldyAodm9pZCkKLXsKLSAgR3N0VGFza1Bvb2wgKnBvb2w7Ci0KLSAgcG9vbCA9IGdfb2JqZWN0X25ldyAoVEVTVF9UWVBFX1JUX1BPT0wsIE5VTEwpOwotCi0gIHJldHVybiBwb29sOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc3RyZWFtcy90ZXN0cnRwb29sLmggYi90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3Rlc3RydHBvb2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlNjJlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9zdHJlYW1zL3Rlc3RydHBvb2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fVEVTVF9SVF9QT09MX0hfXwotI2RlZmluZSBfX1RFU1RfUlRfUE9PTF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKiAtLS0gc3RhbmRhcmQgdHlwZSBtYWNyb3MgLS0tICovCi0jZGVmaW5lIFRFU1RfVFlQRV9SVF9QT09MICAgICAgICAgICAgICh0ZXN0X3J0X3Bvb2xfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIFRFU1RfUlRfUE9PTChwb29sKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKHBvb2wpLCBURVNUX1RZUEVfUlRfUE9PTCwgVGVzdFJUUG9vbCkpCi0jZGVmaW5lIFRFU1RfSVNfUlRfUE9PTChwb29sKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKHBvb2wpLCBURVNUX1RZUEVfUlRfUE9PTCkpCi0jZGVmaW5lIFRFU1RfUlRfUE9PTF9DTEFTUyhwY2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKHBjbGFzcyksIFRFU1RfVFlQRV9SVF9QT09MLCBUZXN0UlRQb29sQ2xhc3MpKQotI2RlZmluZSBURVNUX0lTX1JUX1BPT0xfQ0xBU1MocGNsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChwY2xhc3MpLCBURVNUX1RZUEVfUlRfUE9PTCkpCi0jZGVmaW5lIFRFU1RfUlRfUE9PTF9HRVRfQ0xBU1MocG9vbCkgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgocG9vbCksIFRFU1RfVFlQRV9SVF9QT09MLCBUZXN0UlRQb29sQ2xhc3MpKQotI2RlZmluZSBURVNUX1JUX1BPT0xfQ0FTVChwb29sKSAgICAgICAoKFRlc3RSVFBvb2wqKShwb29sKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1Rlc3RSVFBvb2wgVGVzdFJUUG9vbDsKLXR5cGVkZWYgc3RydWN0IF9UZXN0UlRQb29sQ2xhc3MgVGVzdFJUUG9vbENsYXNzOwotCi1zdHJ1Y3QgX1Rlc3RSVFBvb2wgewotICBHc3RUYXNrUG9vbCAgICBvYmplY3Q7Ci19OwotCi1zdHJ1Y3QgX1Rlc3RSVFBvb2xDbGFzcyB7Ci0gIEdzdFRhc2tQb29sQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgICAgICAgICAgIHRlc3RfcnRfcG9vbF9nZXRfdHlwZSAgICAodm9pZCk7Ci0KLUdzdFRhc2tQb29sICogICB0ZXN0X3J0X3Bvb2xfbmV3ICAgICAgICAgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19URVNUX1JUX1BPT0xfSF9fICovCmRpZmYgLS1naXQgYS90ZXN0cy9taXNjL01ha2VmaWxlLmFtIGIvdGVzdHMvbWlzYy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFhZWRlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9taXNjL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotRVhUUkFfRElTVCA9IFwKLQluZXR3b3JrLWNsb2NrLnNjbSBcCi0JbmV0d29yay1jbG9jay11dGlscy5zY20gXAotCXBsb3QtZGF0YQotCi1ub2luc3RfUFJPR1JBTVMgPSBuZXRjbG9jay1yZXBsYXkKLQotbmV0Y2xvY2tfcmVwbGF5X0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKEdTVF9PQkpfTElCUykgXAotCSQoR0lPX0xJQlMpCi1uZXRjbG9ja19yZXBsYXlfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChHSU9fQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWlzYy9NYWtlZmlsZS5pbiBiL3Rlc3RzL21pc2MvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNWEwNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvbWlzYy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDgyNSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gbmV0Y2xvY2stcmVwbGF5JChFWEVFWFQpCi1zdWJkaXIgPSB0ZXN0cy9taXNjCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZG9jYm9vay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZ1bmN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9pbnRyb3NwZWN0aW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvY2hlY2stY2hlY2tzLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCAkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50dHlwZXNfaC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2xvbmdsb25nLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbmxzLm00ICQodG9wX3NyY2RpcikvbTQvcG8ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgJCh0b3Bfc3JjZGlyKS9tNC9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotbmV0Y2xvY2tfcmVwbGF5X1NPVVJDRVMgPSBuZXRjbG9jay1yZXBsYXkuYwotbmV0Y2xvY2tfcmVwbGF5X09CSkVDVFMgPSBuZXRjbG9ja19yZXBsYXktbmV0Y2xvY2stcmVwbGF5LiQoT0JKRVhUKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLW5ldGNsb2NrX3JlcGxheV9ERVBFTkRFTkNJRVMgPSAgXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1uZXRjbG9ja19yZXBsYXlfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKG5ldGNsb2NrX3JlcGxheV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gbmV0Y2xvY2stcmVwbGF5LmMKLURJU1RfU09VUkNFUyA9IG5ldGNsb2NrLXJlcGxheS5jCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLUVYVFJBX0RJU1QgPSBcCi0JbmV0d29yay1jbG9jay5zY20gXAotCW5ldHdvcmstY2xvY2stdXRpbHMuc2NtIFwKLQlwbG90LWRhdGEKLQotbmV0Y2xvY2tfcmVwbGF5X0xEQUREID0gXAotCSQodG9wX2J1aWxkZGlyKS9saWJzL2dzdC9uZXQvbGliZ3N0bmV0LUBHU1RfQVBJX1ZFUlNJT05ALmxhIFwKLQkkKEdTVF9PQkpfTElCUykgXAotCSQoR0lPX0xJQlMpCi0KLW5ldGNsb2NrX3JlcGxheV9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9taXNjL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL21pc2MvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLW5vaW5zdFBST0dSQU1TOgotCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLQotbmV0Y2xvY2stcmVwbGF5JChFWEVFWFQpOiAkKG5ldGNsb2NrX3JlcGxheV9PQkpFQ1RTKSAkKG5ldGNsb2NrX3JlcGxheV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbmV0Y2xvY2tfcmVwbGF5X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIG5ldGNsb2NrLXJlcGxheSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQobmV0Y2xvY2tfcmVwbGF5X0xJTkspICQobmV0Y2xvY2tfcmVwbGF5X09CSkVDVFMpICQobmV0Y2xvY2tfcmVwbGF5X0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXRjbG9ja19yZXBsYXktbmV0Y2xvY2stcmVwbGF5LlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLW5ldGNsb2NrX3JlcGxheS1uZXRjbG9jay1yZXBsYXkubzogbmV0Y2xvY2stcmVwbGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChuZXRjbG9ja19yZXBsYXlfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG5ldGNsb2NrX3JlcGxheS1uZXRjbG9jay1yZXBsYXkubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbmV0Y2xvY2tfcmVwbGF5LW5ldGNsb2NrLXJlcGxheS5UcG8gLWMgLW8gbmV0Y2xvY2tfcmVwbGF5LW5ldGNsb2NrLXJlcGxheS5vIGB0ZXN0IC1mICduZXRjbG9jay1yZXBsYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbmV0Y2xvY2stcmVwbGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL25ldGNsb2NrX3JlcGxheS1uZXRjbG9jay1yZXBsYXkuVHBvICQoREVQRElSKS9uZXRjbG9ja19yZXBsYXktbmV0Y2xvY2stcmVwbGF5LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbmV0Y2xvY2stcmVwbGF5LmMnIG9iamVjdD0nbmV0Y2xvY2tfcmVwbGF5LW5ldGNsb2NrLXJlcGxheS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChuZXRjbG9ja19yZXBsYXlfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbmV0Y2xvY2tfcmVwbGF5LW5ldGNsb2NrLXJlcGxheS5vIGB0ZXN0IC1mICduZXRjbG9jay1yZXBsYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbmV0Y2xvY2stcmVwbGF5LmMKLQotbmV0Y2xvY2tfcmVwbGF5LW5ldGNsb2NrLXJlcGxheS5vYmo6IG5ldGNsb2NrLXJlcGxheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobmV0Y2xvY2tfcmVwbGF5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBuZXRjbG9ja19yZXBsYXktbmV0Y2xvY2stcmVwbGF5Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvbmV0Y2xvY2tfcmVwbGF5LW5ldGNsb2NrLXJlcGxheS5UcG8gLWMgLW8gbmV0Y2xvY2tfcmVwbGF5LW5ldGNsb2NrLXJlcGxheS5vYmogYGlmIHRlc3QgLWYgJ25ldGNsb2NrLXJlcGxheS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ25ldGNsb2NrLXJlcGxheS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9uZXRjbG9jay1yZXBsYXkuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbmV0Y2xvY2tfcmVwbGF5LW5ldGNsb2NrLXJlcGxheS5UcG8gJChERVBESVIpL25ldGNsb2NrX3JlcGxheS1uZXRjbG9jay1yZXBsYXkuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSduZXRjbG9jay1yZXBsYXkuYycgb2JqZWN0PSduZXRjbG9ja19yZXBsYXktbmV0Y2xvY2stcmVwbGF5Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobmV0Y2xvY2tfcmVwbGF5X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG5ldGNsb2NrX3JlcGxheS1uZXRjbG9jay1yZXBsYXkub2JqIGBpZiB0ZXN0IC1mICduZXRjbG9jay1yZXBsYXkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICduZXRjbG9jay1yZXBsYXkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbmV0Y2xvY2stcmVwbGF5LmMnOyBmaWAKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvbWlzYy9uZXRjbG9jay1yZXBsYXkuYyBiL3Rlc3RzL21pc2MvbmV0Y2xvY2stcmVwbGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZWViMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvbWlzYy9uZXRjbG9jay1yZXBsYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNiBDZW50cmljdWxhciBMdGQuCi0gKiBBdXRob3I6IEFydW4gUmFnaGF2YW4gPGFydW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qIFdlIG5lZWQgdGhlIGludGVybmFsIG5ldGNsb2NrIGVzdGltYXRpb24gZnVuY3Rpb24gdG8gKHJlKXJ1biB0aGUgY29kZSBvbgotICogY2FwdHVyZWQgc2FtcGxlcywgcGx1cyBpdHMgZGVwZW5kZW5jaWVzIGZvciB0aGUgYnVpbGQgdG8gc3VjY2VlZC4gKi8KLSNpbmNsdWRlICIuLi8uLi9saWJzL2dzdC9uZXQvZ3N0bnRwcGFja2V0LmMiCi0jaW5jbHVkZSAiLi4vLi4vbGlicy9nc3QvbmV0L2dzdG5ldGNsaWVudGNsb2NrLmMiCi0KLXN0YXRpYyBnY2hhciAqaW5wdXQgPSBOVUxMOwotc3RhdGljIGdib29sZWFuIGRlYnVnID0gRkFMU0U7Ci1zdGF0aWMgZ2ludCBydHRfbGltaXQgPSAwOwotCi1zdGF0aWMgR09wdGlvbkVudHJ5IGVudHJpZXNbXSA9IHsKLSAgeyJpbnB1dCIsICdpJywgMCwgR19PUFRJT05fQVJHX0ZJTEVOQU1FLCAmaW5wdXQsCi0gICAgICAgICJDbG9jayByZWFkaW5nIGZpbGUgY29udGFpbmluZyBvbmUgbG9jYWwgYW5kIHJlbW90ZSB0aW1lIHJlYWRpbmdzLCBvbmUgIgotICAgICAgICAicGVyIGxpbmUiLAotICAgICAgIkZJTEUifSwKLSAgeyJydHQtbGltaXQiLCAncicsIDAsIEdfT1BUSU9OX0FSR19JTlQ2NCwgJnJ0dF9saW1pdCwKLSAgICAgICJSb3VuZCB0cmlwIHRpbWUgbGltaXQgb24gcGFja2V0cyAoaW4gbXMpIiwgIk1TRUMifSwKLSAgeyJkZWJ1ZyIsICdkJywgMCwgR19PUFRJT05fQVJHX05PTkUsICZkZWJ1ZywgIlZlcmJvc2UgZGVidWcgb3V0cHV0IiwgTlVMTH0sCi0gIHtOVUxMLH0KLX07Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0TmV0Q2xpZW50SW50ZXJuYWxDbG9jayAqY2xvY2s7Ci0gIEdzdEJ1cyAqYnVzOwotICBHSU9DaGFubmVsICpjaGFubmVsOwotICBHSU9TdGF0dXMgc3RhdHVzOwotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgR09wdGlvbkNvbnRleHQgKmNvbnRleHQ7Ci0gIGdjaGFyICpsaW5lOwotICBpbnQgcmV0ID0gMTsKLQotICBjb250ZXh0ID0gZ19vcHRpb25fY29udGV4dF9uZXcgKE5VTEwpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGNvbnRleHQsIGVudHJpZXMsIE5VTEwpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY29udGV4dCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0KLSAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjb250ZXh0LCAmYXJnYywgJmFyZ3YsICZlcnJvcikpIHsKLSAgICBnX3ByaW50ICgiRmFpbGVkIHRvIHBhcnNlIG9wdGlvbnM6ICVzXG5cbiIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIGlmIChpbnB1dCkgewotICAgIGlmICghKGNoYW5uZWwgPSBnX2lvX2NoYW5uZWxfbmV3X2ZpbGUgKGlucHV0LCAiciIsIE5VTEwpKSkgewotICAgICAgZ19wcmludCAoIkNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGU6ICVzXG4iLCBpbnB1dCk7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKCEoY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAoMCkpKSB7Ci0gICAgICBnX3ByaW50ICgiQ291bGQgbm90IHJlYWQgc3RkaW4iKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgfQotCi0gIGNsb2NrID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9ORVRfQ0xJRU5UX0lOVEVSTkFMX0NMT0NLLCBOVUxMKTsKLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgLyogRklYTUU6IEZpbmQgYSB3YXkgdG8gZG8gdGhpcyB3aXRob3V0IHRvdWNoaW5nIHRoZSBzdHJ1Y3R1cmUgaW50ZXJuYWxzICovCi0gIGlmIChydHRfbGltaXQpCi0gICAgY2xvY2stPnJvdW5kdHJpcF9saW1pdCA9IHJ0dF9saW1pdCAqIEdTVF9NU0VDT05EOwotICBjbG9jay0+YnVzc2VzID0gZ19saXN0X3ByZXBlbmQgKGNsb2NrLT5idXNzZXMsIGJ1cyk7Ci0KLSAgd2hpbGUgKChzdGF0dXMgPSBnX2lvX2NoYW5uZWxfcmVhZF9saW5lIChjaGFubmVsLCAmbGluZSwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgJmVycm9yKSkgPT0gR19JT19TVEFUVVNfTk9STUFMKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIGxvY2FsXzEsIGxvY2FsXzIsIHJlbW90ZV8xLCByZW1vdGVfMjsKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gICAgaWYgKHNzY2FuZiAobGluZSwgIiUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAlIiBHX0dVSU5UNjRfRk9STUFUICIgJSIKLSAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiAlIiBHX0dVSU5UNjRfRk9STUFULCAmbG9jYWxfMSwgJnJlbW90ZV8xLAotICAgICAgICAgICAgJnJlbW90ZV8yLCAmbG9jYWxfMikgIT0gNCkgewotICAgICAgZ19wcmludCAoIkZhaWxlZCB0byBnZXQgbG9jYWwvcmVtb3RlIHRpbWUgdmFsdWVzIGZyb206ICVzXG4iLCBsaW5lKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBpZiAoZGVidWcpCi0gICAgICBnX3ByaW50ICgiJXMiLCBsaW5lKTsKLQotICAgIGdzdF9uZXRfY2xpZW50X2ludGVybmFsX2Nsb2NrX29ic2VydmVfdGltZXMgKGNsb2NrLCBsb2NhbF8xLCByZW1vdGVfMSwKLSAgICAgICAgcmVtb3RlXzIsIGxvY2FsXzIpOwotCi0gICAgZ19mcmVlIChsaW5lKTsKLQotICAgIGlmICgobWVzc2FnZSA9IGdzdF9idXNfcG9wX2ZpbHRlcmVkIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQpKSkgewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzdDsKLSAgICAgIGdjaGFyICpzdHI7Ci0KLSAgICAgIHN0ID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gICAgICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3QpOwotCi0gICAgICBnX3ByaW50ICgiJXNcbiIsIHN0cik7Ci0KLSAgICAgIGdfZnJlZSAoc3RyKTsKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoc3RhdHVzID09IEdfSU9fQ0hBTk5FTF9FUlJPUikgewotICAgIGdfcHJpbnQgKCJFcnJvciByZWFkaW5nIGZpbGU6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgZ19pb19jaGFubmVsX3VucmVmIChjaGFubmVsKTsKLSAgZ19mcmVlIChpbnB1dCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgcmV0ID0gMDsKLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL21pc2MvbmV0d29yay1jbG9jay11dGlscy5zY20gYi90ZXN0cy9taXNjL25ldHdvcmstY2xvY2stdXRpbHMuc2NtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTcxZTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL21pc2MvbmV0d29yay1jbG9jay11dGlscy5zY20KKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotOzsgR1N0cmVhbWVyCi07OyBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ28gYXQgcG9ib3guY29tPgotCi07OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgIAotOzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgICAKLTs7IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mICAgCi07OyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgIAotOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLTs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgCi07OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgIAotOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAKLTs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgCi07OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIGNvbnRhY3Q6Ci07OwotOzsgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uICAgICAgICAgICBWb2ljZTogICsxLTYxNy01NDItNTk0MgotOzsgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yICAgICAgICBGYXg6ICAgICsxLTYxNy01NDItMjY1MgotOzsgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgIFVTQSAgICAgICBnbnVAZ251Lm9yZwotCi0KLTs7OyBDb21tZW50YXJ5OgotOzsKLTs7IFV0aWxpdGllcyBmb3IgdGhlIG5ldHdvcmsgY2xvY2sgc2ltdWxhdG9yLgotOzsKLTs7OyBDb2RlOgotCi0KLTs7IEluaXQgdGhlIHJuZy4KLQotKHVzZS1tb2R1bGVzICgoc3JmaSBzcmZpLTEpIChmb2xkIHVuZm9sZCkpKQotCi0oZGVmaW5lIChyZWFkLWJ5dGVzLWZyb20tZmlsZS1hcy1pbnRlZ2VyIGYgbikKLSAgKHdpdGgtaW5wdXQtZnJvbS1maWxlIGYKLSAgICAobGFtYmRhICgpCi0gICAgICAoZm9sZCAobGFtYmRhICh4IHNlZWQpICgrIHggKGFzaCBzZWVkIDgpKSkKLSAgICAgICAgICAgIDAKLSAgICAgICAgICAgICh1bmZvbGQgemVybz8gKGxhbWJkYSAobikgKGNoYXItPmludGVnZXIgKHJlYWQtY2hhcikpKSAxLSBuKSkpKSkKLQotKHNldCEgKnJhbmRvbS1zdGF0ZSogKHNlZWQtPnJhbmRvbS1zdGF0ZQotICAgICAgICAgICAgICAgICAgICAgIChyZWFkLWJ5dGVzLWZyb20tZmlsZS1hcy1pbnRlZ2VyICIvZGV2L3JhbmRvbSIgNCkpKQotCi07OyBHZW5lcmFsIHV0aWxpdGllcy4KLQotKGRlZmluZSAoaXJvdW5kIHgpCi0gIChpZiAoaW5leGFjdD8geCkKLSAgICAgIChpbmV4YWN0LT5leGFjdCAocm91bmQgeCkpCi0gICAgICB4KSkKLQotKGRlZmluZSAoZmlsdGVyIHByb2MgbCkKLSAgKGNvbmQKLSAgICgobnVsbD8gbCkgJygpKQotICAgKChwcm9jIChjYXIgbCkpIChjb25zIChjYXIgbCkgKGZpbHRlciBwcm9jIChjZHIgbCkpKSkKLSAgIChlbHNlIChmaWx0ZXIgcHJvYyAoY2RyIGwpKSkpKQotCi0oZGVmaW5lIChzdW0gbCkKLSAgKGFwcGx5ICsgbCkpCi0KLShkZWZpbmUgKGF2ZyAuIG51bXMpCi0gICgvIChzdW0gbnVtcykgKGxlbmd0aCBudW1zKSkpCi0KLShkZWZpbmUgKHNxIHgpCi0gICgqIHggeCkpCi0KLShkZWZpbmUgKGRlYnVnIHN0ciAuIGFyZ3MpCi0gIChpZiAqZGVidWcqCi0gICAgICAoYXBwbHkgZm9ybWF0IChjdXJyZW50LWVycm9yLXBvcnQpIHN0ciBhcmdzKSkpCi0KLShkZWZpbmUgKHByaW50LWV2ZW50IGtpbmQgeCB5KQotICAoZm9ybWF0ICN0ICJ+YSB+YSB+YVxuIiBraW5kIHggeSkpCi0KLTs7IExpbmVhciBsZWFzdCBzcXVhcmVzLgotOzsKLTs7IFNlZSBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL0xlYXN0U3F1YXJlc0ZpdHRpbmcuaHRtbAotOzsgcmV0dXJucyAodmFsdWVzIHNsb3BlIGludGVyY2VwdCByLXNxdWFyZWQpCi0KLShkZWZpbmUgKGxlYXN0LXNxdWFyZXMgeCB5KQotICAobGV0ICgobiAobGVuZ3RoIHgpKSkKLSAgICAobGV0ICgoeGJhciAoYXBwbHkgYXZnIHgpKQotICAgICAgICAgICh5YmFyIChhcHBseSBhdmcgeSkpKQotICAgICAgKGxldCAoKHN4eCAoLSAoc3VtIChtYXAgc3EgeCkpICgqIG4gKHNxIHhiYXIpKSkpCi0gICAgICAgICAgICAoc3l5ICgtIChzdW0gKG1hcCBzcSB5KSkgKCogbiAoc3EgeWJhcikpKSkKLSAgICAgICAgICAgIChzeHkgKC0gKHN1bSAobWFwICogeCB5KSkgKCogbiB4YmFyIHliYXIpKSkpCi0gICAgICAgIChsZXQgKChzbG9wZSAoLyBzeHkgc3h4KSkpCi0gICAgICAgICAgKHZhbHVlcwotICAgICAgICAgICBzbG9wZQotICAgICAgICAgICAoLSB5YmFyICgqIHNsb3BlIHhiYXIpKQotICAgICAgICAgICAoLyAoc3Egc3h5KSAoKiBzeHggc3l5KSkpKSkpKSkKLQotOzsgU3RyZWFtczogbGlzdHMgd2l0aCBsYXp5IGNkcnMuCi0KLShkZWZpbmUtbWFjcm8gKHN0cmVhbS1jb25zIGthciBrZHIpCi0gIGAoY29ucyAsa2FyIChkZWxheSAsa2RyKSkpCi0KLShkZWZpbmUgKHN0cmVhbS1jZHIgc3RyZWFtKQotICAoZm9yY2UgKGNkciBzdHJlYW0pKSkKLQotKGRlZmluZSAoc3RyZWFtLWNhciBzdHJlYW0pCi0gIChjYXIgc3RyZWFtKSkKLQotKGRlZmluZSAoc3RyZWFtLW51bGw/IHN0cmVhbSkKLSAgKG51bGw/IHN0cmVhbSkpCi0KLShkZWZpbmUgKHN0cmVhbS1yZWYgc3RyZWFtIG4pCi0gIChpZiAoemVybz8gbikKLSAgICAgIChzdHJlYW0tY2FyIHN0cmVhbSkKLSAgICAgIChzdHJlYW0tcmVmIChzdHJlYW0tY2RyIHN0cmVhbSkgKDEtIG4pKSkpCi0KLShkZWZpbmUgKHN0cmVhbS0+bGlzdCBzdHJlYW0gbikKLSAgKGxldCBscCAoKGluIHN0cmVhbSkgKG91dCAnKCkpIChuIG4pKQotICAgIChpZiAoemVybz8gbikKLSAgICAgICAgKHJldmVyc2UhIG91dCkKLSAgICAgICAgKGxwIChzdHJlYW0tY2RyIGluKSAoY29ucyAoc3RyZWFtLWNhciBpbikgb3V0KSAoMS0gbikpKSkpCi0KLShkZWZpbmUgKHN0cmVhbS1za2lwIHN0cmVhbSBuKQotICAoaWYgKHplcm8/IG4pCi0gICAgICBzdHJlYW0KLSAgICAgIChzdHJlYW0tc2tpcCAoc3RyZWFtLWNkciBzdHJlYW0pICgxLSBuKSkpKQotCi0oZGVmaW5lIChzdHJlYW0tc2FtcGxlIHN0cmVhbSBuKQotICAoc3RyZWFtLWNvbnMgKHN0cmVhbS1jYXIgc3RyZWFtKQotICAgICAgICAgICAgICAgKHN0cmVhbS1zYW1wbGUgKHN0cmVhbS1za2lwIHN0cmVhbSBuKSBuKSkpCi0KLShkZWZpbmUgKHN0cmVhbS1tYXAgcHJvYyAuIHN0cmVhbXMpCi0gIChzdHJlYW0tY29ucyAoYXBwbHkgcHJvYyAobWFwIHN0cmVhbS1jYXIgc3RyZWFtcykpCi0gICAgICAgICAgICAgICAoYXBwbHkgc3RyZWFtLW1hcCBwcm9jIChtYXAgc3RyZWFtLWNkciBzdHJlYW1zKSkpKQotCi0oZGVmaW5lIChhcml0aG1ldGljLXNlcmllcyBzdGFydCBzdGVwKQotICAoc3RyZWFtLWNvbnMgc3RhcnQgKGFyaXRobWV0aWMtc2VyaWVzICgrIHN0YXJ0IHN0ZXApIHN0ZXApKSkKLQotKGRlZmluZSAoc2NhbGUtc3RyZWFtIHN0cmVhbSBmYWN0b3IpCi0gIChzdHJlYW0tbWFwIChsYW1iZGEgKHQpICgqIHQgZmFjdG9yKSkgc3RyZWFtKSkKLQotKGRlZmluZSAoc3RyZWFtLXdoaWxlIHByZWQgcHJvYyAuIHN0cmVhbXMpCi0gIChpZiAoYXBwbHkgcHJlZCAobWFwIHN0cmVhbS1jYXIgc3RyZWFtcykpCi0gICAgICAoYmVnaW4KLSAgICAgICAgKGFwcGx5IHByb2MgKG1hcCBzdHJlYW0tY2FyIHN0cmVhbXMpKQotICAgICAgICAoYXBwbHkgc3RyZWFtLXdoaWxlIHByZWQgcHJvYyAobWFwIHN0cmVhbS1jZHIgc3RyZWFtcykpKSkpCi0KLShkZWZpbmUgKHN0cmVhbS1vZiB2YWwpCi0gIChzdHJlYW0tY29ucyB2YWwgKHN0cmVhbS1vZiB2YWwpKSkKLQotKGRlZmluZSAocGVyaW9kaWMtc3RyZWFtIHZhbCBwZXJpb2QpCi0gIChsZXQgKChwZXJpb2QgKGlyb3VuZCAobWF4IDEgKCogKnNhbXBsZS1mcmVxdWVuY3kqIHBlcmlvZCkpKSkpCi0gICAgKGxldCBscCAoKG4gMCkpCi0gICAgICAoaWYgKHplcm8/IG4pCi0gICAgICAgICAgKHN0cmVhbS1jb25zIHZhbCAobHAgcGVyaW9kKSkKLSAgICAgICAgICAoc3RyZWFtLWNvbnMgI2YgKGxwICgxLSBuKSkpKSkpKQotCi0KLTs7IFF1ZXVlcyB3aXRoIGEgbWF4aW11bSBsZW5ndGguCi0KLShkZWZpbmUgKG1ha2UtcSBsKQotICAoY29ucyBsIChsYXN0LXBhaXIgbCkpKQotCi0oZGVmaW5lIChxLWhlYWQgcSkKLSAgKGNhciBxKSkKLQotKGRlZmluZSAocS10YWlsIHEpCi0gIChjYXIgcSkpCi0KLShkZWZpbmUgKHEtcHVzaCBxIHZhbCkKLSAgKGxldCAoKHRhaWwgKGNvbnMgdmFsICcoKSkpKQotICAgIChpZiAobnVsbD8gKHEtdGFpbCBxKSkKLSAgICAgICAgKG1ha2UtcSB0YWlsKQotICAgICAgICAobGV0ICgobCAoYXBwZW5kISAocS1oZWFkIHEpIHRhaWwpKSkKLSAgICAgICAgICAoaWYgKD4gKGxlbmd0aCAocS1oZWFkIHEpKSAqd2luZG93LXNpemUqKQotICAgICAgICAgICAgICAobWFrZS1xIChjZHIgKHEtaGVhZCBxKSkpCi0gICAgICAgICAgICAgIHEpKSkpKQotCi0KLTs7IFBhcmFtZXRlcnMsIHNldHRhYmxlIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotCi0oZGVmaW5lICVwYXJhbWV0ZXJzICcoKSkKLShkZWZpbmUtbWFjcm8gKGRlZmluZS1wYXJhbWV0ZXIgbmFtZSB2YWwpCi0gIChsZXQgKChzdHIgKHN5bWJvbC0+c3RyaW5nIG5hbWUpKSkKLSAgICAob3IgKGFuZCAoZXF2PyAoc3RyaW5nLXJlZiBzdHIgMCkgI1wqKQotICAgICAgICAgICAgIChlcXY/IChzdHJpbmctcmVmIHN0ciAoMS0gKHN0cmluZy1sZW5ndGggc3RyKSkpICNcKikpCi0gICAgICAgIChlcnJvciAiSW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIgbmFtZSkpCi0gICAgKGxldCAoKHBhcmFtIChzdHJpbmctPnN5bWJvbAotICAgICAgICAgICAgICAgICAgKHN1YnN0cmluZyBzdHIgMSAoMS0gKHN0cmluZy1sZW5ndGggc3RyKSkpKSkKLSAgICAgICAgICAodmFsLXN5bSAoZ2Vuc3ltKSkpCi0gICAgICBgKGJlZ2luCi0gICAgICAgICAoZGVmaW5lICxuYW1lICNmKQotICAgICAgICAgKGxldCAoKCx2YWwtc3ltICx2YWwpKQotICAgICAgICAgICAoc2V0ISAsbmFtZSAsdmFsLXN5bSkKLSAgICAgICAgICAgKHNldCEgJXBhcmFtZXRlcnMgKGNvbnMgKGNvbnMgJyxwYXJhbSAsdmFsLXN5bSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXBhcmFtZXRlcnMpKSkpKSkpCi0oZGVmaW5lIChzZXQtcGFyYW1ldGVyISBuYW1lIHZhbCkKLSAgKGRlZmluZSAoc3ltYm9sLWFwcGVuZCAuIGFyZ3MpCi0gICAgKHN0cmluZy0+c3ltYm9sIChhcHBseSBzdHJpbmctYXBwZW5kIChtYXAgc3ltYm9sLT5zdHJpbmcgYXJncykpKSkKLSAgKG9yIChhc3NxIG5hbWUgJXBhcmFtZXRlcnMpCi0gICAgICAoZXJyb3IgIlVua25vd24gcGFyYW1ldGVyIiBuYW1lKSkKLSAgKG1vZHVsZS1zZXQhIChjdXJyZW50LW1vZHVsZSkgKHN5bWJvbC1hcHBlbmQgJyogbmFtZSAnKikgdmFsKSkKLQotKGRlZmluZSAocGFyc2UtcGFyYW1ldGVyLWFyZ3VtZW50cyBhcmdzKQotICAoZGVmaW5lICh1c2FnZSkKLSAgICAoZm9ybWF0ICN0ICJVc2FnZTogfmEgQVJHMS4uLlxuXG4iICJuZXR3b3JrLWNsb2NrLnNjbSIpCi0gICAgKGZvci1lYWNoCi0gICAgIChsYW1iZGEgKHBhaXIpCi0gICAgICAgKGZvcm1hdCAjdCAiXHQtLX5hPVZBTCBcdChkZWZhdWx0OiB+YSlcbiIgKGNhciBwYWlyKSAoY2RyIHBhaXIpKSkKLSAgICAgJXBhcmFtZXRlcnMpKQotICAoZGVmaW5lICh1bmtub3duLWFyZyBhcmcpCi0gICAgKHdpdGgtb3V0cHV0LXRvLXBvcnQgKGN1cnJlbnQtZXJyb3ItcG9ydCkKLSAgICAgIChsYW1iZGEgKCkKLSAgICAgICAgKGZvcm1hdCAjdCAiXG5Vbmtub3duIGFyZ3VtZW50OiB+YVxuXG4iIGFyZykKLSAgICAgICAgKHVzYWdlKQotICAgICAgICAocXVpdCkpKSkKLSAgKGRlZmluZSAocGFyc2UtYXJndW1lbnRzIGFyZ3MpCi0gICAgKGxldCBscCAoKGluIGFyZ3MpIChvdXQgJygpKSkKLSAgICAgIChjb25kCi0gICAgICAgKChudWxsPyBpbikKLSAgICAgICAgKHJldmVyc2UhIG91dCkpCi0gICAgICAgKChub3QgKHN0cmluZz0/IChzdWJzdHJpbmcgKGNhciBpbikgMCAyKSAiLS0iKSkKLSAgICAgICAgKHVua25vd24tYXJnIChjYXIgaW4pKSkKLSAgICAgICAoZWxzZQotICAgICAgICAobGV0ICgoZGl2aWRlciAob3IgKHN0cmluZy1pbmRleCAoY2FyIGluKSAjXD0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodW5rbm93bi1hcmcgKGNhciBpbikpKSkpCi0gICAgICAgICAgKG9yICg+IGRpdmlkZXIgMikgKHVua25vd24tYXJnIChjYXIgaW4pKSkKLSAgICAgICAgICAobGV0ICgocGFyYW0gKHN0cmluZy0+c3ltYm9sIChzdWJzdHJpbmcgKGNhciBpbikgMiBkaXZpZGVyKSkpCi0gICAgICAgICAgICAgICAgKHZhbCAod2l0aC1pbnB1dC1mcm9tLXN0cmluZyAoc3Vic3RyaW5nIChjYXIgaW4pICgxKyBkaXZpZGVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgcmVhZCkpKQotICAgICAgICAgICAgKGxwIChjZHIgaW4pIChhY29ucyBwYXJhbSB2YWwgb3V0KSkpKSkpKSkKLSAgKGZvci1lYWNoCi0gICAobGFtYmRhIChwYWlyKQotICAgICAob3IgKGZhbHNlLWlmLWV4Y2VwdGlvbgotICAgICAgICAgIChzZXQtcGFyYW1ldGVyISAoY2FyIHBhaXIpIChjZHIgcGFpcikpKQotICAgICAgICAgKHVua25vd24tYXJnIChmb3JtYXQgI2YgIi0tfmE9fmEiIChjYXIgcGFpcikgKGNkciBwYWlyKSkpKSkKLSAgIChwYXJzZS1hcmd1bWVudHMgYXJncykpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWlzYy9uZXR3b3JrLWNsb2NrLnNjbSBiL3Rlc3RzL21pc2MvbmV0d29yay1jbG9jay5zY20KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGNkMjFiZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvbWlzYy9uZXR3b3JrLWNsb2NrLnNjbQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0jIS9iaW4vYmFzaAotIyAtKi0gc2NoZW1lIC0qLQotZXhlYyBndWlsZSAtLWRlYnVnIC1sICQwIC1lIG1haW4gLS0gIiRAIgotISMKLQotOzsgR1N0cmVhbWVyCi07OyBDb3B5cmlnaHQgKEMpIDIwMDUgQW5keSBXaW5nbyA8d2luZ28gYXQgcG9ib3guY29tPgotCi07OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgIAotOzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgICAKLTs7IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mICAgCi07OyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgIAotOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLTs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgCi07OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgIAotOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAKLTs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgCi07OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIGNvbnRhY3Q6Ci07OwotOzsgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uICAgICAgICAgICBWb2ljZTogICsxLTYxNy01NDItNTk0MgotOzsgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yICAgICAgICBGYXg6ICAgICsxLTYxNy01NDItMjY1MgotOzsgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgIFVTQSAgICAgICBnbnVAZ251Lm9yZwotCi0KLTs7OyBDb21tZW50YXJ5OgotOzsKLTs7IE5ldHdvcmsgY2xvY2sgc2ltdWxhdG9yLgotOzsKLTs7IFNpbXVsYXRlcyB0aGUgYXR0ZW1wdHMgb2Ygb25lIGNsb2NrIHRvIHN5bmNocm9uaXplIHdpdGggYW5vdGhlciBvdmVyCi07OyB0aGUgbmV0d29yay4gUGFja2V0cyBhcmUgc2VudCBvdXQgd2l0aCBhIGxvY2FsIHRpbWVzdGFtcCwgYW5kIGNvbWUKLTs7IGJhY2sgd2l0aCB0aGUgcmVtb3RlIHRpbWUgYWRkZWQgb24gdG8gdGhlIHBhY2tldC4gVGhlIHJlbW90ZSB0aW1lIGlzCi07OyBhc3N1bWVkIHRvIGhhdmUgYmVlbiBvYnNlcnZlZCBhdCB0aGUgbG9jYWwgdGltZSBpbiBiZXR3ZWVuIHNlbmRpbmcKLTs7IHRoZSBxdWVyeSBhbmQgcmVjZWl2aW5nIHRoZSByZXBseS4KLTs7Ci07OyBUaGUgbG9jYWwgY2xvY2sgd2lsbCBhdHRlbXB0IHRvIGFkanVzdCBpdHMgcmF0ZSBhbmQgb2Zmc2V0IGJ5IGZpdHRpbmcKLTs7IGEgbGluZSB0byB0aGUgbGFzdCBOIGRhdGFwb2ludHMgb24gaGFuZCwgYnkgZGVmYXVsdCAzMi4gQSBiZXR0ZXIgZml0LAotOzsgYXMgbWVhc3VyZWQgYnkgdGhlIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50LCB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlcgotOzsgdGltZSBiZWZvcmUgdGhlIG5leHQgcXVlcnkuIEJhZCBmaXRzIG9yIGEgbm90LXlldC1mdWxsIHNldCBvZiBkYXRhCi07OyB3aWxsIHJlc3VsdCBpbiBtYW55IHF1ZXJpZXMgaW4gcXVpY2sgc3VjY2Vzc2lvbi4KLTs7Ci07OyBUaGUgcmF0ZSBhbmQgb2Zmc2V0IGFyZSBzZXQgZGlyZWN0bHkgdG8gdGhlIHNsb3BlIGFuZCBpbnRlcmNlcHQgZnJvbQotOzsgdGhlIGxpbmVhciByZWdyZXNzaW9uLiBUaGlzIHJlc3VsdHMgaW4gZGlzY29udGludWl0aWVzIGluIHRoZSBsb2NhbAotOzsgdGltZS4gQXMgY2xvY2sgdGltZXMgbXVzdCBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcsIGEganVtcCBkb3duIGluCi07OyB0aW1lIHdpbGwgcmVzdWx0IGluc3RlYWQgaW4gdGltZSBzdGFuZGluZyBzdGlsbCBmb3IgYSB3aGlsZS4gU21vb3RobHkKLTs7IHZhcnlpbmcgdGhlIHJhdGUgc3VjaCB0aGF0IG5vIGRpc2NvbnRpbnVpdGllcyBhcmUgcHJlc2VudCBoYXMgbm90Ci07OyBiZWVuIGludmVzdGlnYXRlZC4KLTs7Ci07OyBJbXBsZW1lbnRhdGlvbi13aXNlLCB0aGlzIHNpbXVsYXRvciBwcm9jZXNzZXMgZXZlbnRzIGFuZCBjYWxjdWxhdGVzCi07OyB0aW1lcyBkaXNjcmV0ZWx5LiBUaW1lcyBhcmUgcmVwcmVzZW50ZWQgYXMgc3RyZWFtcywgYWxzbyBrbm93biBhcwotOzsgbGF6eSBsaXN0cy4gVGhpcyBpcyBhbiBhbG1vc3QtcHVyZSBmdW5jdGlvbmFsIHNpbXVsYXRvci4gVGhlIHRoaW5nIHRvCi07OyByZW1lbWJlciB3aGlsZSByZWFkaW5nIGlzIHRoYXQgc3RyZWFtLWNvbnMgZG9lcyBub3QgZXZhbHVhdGUgaXRzCi07OyBzZWNvbmQgYXJndW1lbnQsIHJhdGhlciBkZWZlcnJpbmcgdGhhdCBjYWxjdWxhdGlvbiB1bnRpbCBzdHJlYW0tY2RyCi07OyBpcyBjYWxsZWQuIEluIHRoYXQgd2F5IGFsbCB0aW1lcyBhcmUgYWN0dWFsbHkgaW5maW5pdGUgc2VyaWVzLgotOzsKLTs7IFVzYWdlOiBTZWUgbmV0d29yay1jbG9jay5zY20gLS1oZWxwLgotOzsKLTs7OyBDb2RlOgotCi0KLSh1c2UtbW9kdWxlcyAoaWNlLTkgcG9wZW4pKQotCi0KLShsb2FkICJuZXR3b3JrLWNsb2NrLXV0aWxzLnNjbSIpCi0KLQotKGRlZmluZSAodGltZS0+c2FtcGxlcyB0KQotICAoaXJvdW5kICgqIHQgKnNhbXBsZS1mcmVxdWVuY3kqKSkpCi0KLQotKGRlZmluZSAoc2NoZWR1bGUtZXZlbnQgZXZlbnRzIGUgdGltZSkKLSAgKGxldCBscCAoKHJlc3BvbnNlLXRpbWUgKHRpbWUtPnNhbXBsZXMgdGltZSkpCi0gICAgICAgICAgIChzdHJlYW0gZXZlbnRzKSkKLSAgICAoaWYgKHplcm8/IHJlc3BvbnNlLXRpbWUpCi0gICAgICAgIChpZiAobm90IChzdHJlYW0tY2FyIHN0cmVhbSkpCi0gICAgICAgICAgICAoc3RyZWFtLWNvbnMgZSAoc3RyZWFtLWNkciBzdHJlYW0pKQotICAgICAgICAgICAgKHN0cmVhbS1jb25zIChzdHJlYW0tY2FyIHN0cmVhbSkgKGxwIDAgKHN0cmVhbS1jZHIgc3RyZWFtKSkpKQotICAgICAgICAoc3RyZWFtLWNvbnMgKHN0cmVhbS1jYXIgc3RyZWFtKSAobHAgKDEtIHJlc3BvbnNlLXRpbWUpIChzdHJlYW0tY2RyIHN0cmVhbSkpKSkpKQotCi0oZGVmaW5lIChzY2hlZHVsZS1zZW5kLXRpbWUtcXVlcnkgZXZlbnRzIHRpbWUpCi0gIChzY2hlZHVsZS1ldmVudCBldmVudHMgKGxpc3QgJ3NlbmQtdGltZS1xdWVyeSkgdGltZSkpCi0KLShkZWZpbmUgKHNjaGVkdWxlLXRpbWUtcXVlcnkgZXZlbnRzIGwpCi0gIChzY2hlZHVsZS1ldmVudCBldmVudHMgKGxpc3QgJ3RpbWUtcXVlcnkgbCkKLSAgICAgICAgICAgICAgICAgICgrICpzZW5kLWRlbGF5KiAocmFuZG9tICpzZW5kLWppdHRlciopKSkpCi0KLShkZWZpbmUgKHNjaGVkdWxlLXRpbWUtcmVzcG9uc2UgZXZlbnRzIGwgcikKLSAgKHNjaGVkdWxlLWV2ZW50IGV2ZW50cyAobGlzdCAndGltZS1yZXNwb25zZSBsIHIpCi0gICAgICAgICAgICAgICAgICAoKyAqcmVjdi1kZWxheSogKHJhbmRvbSAqcmVjdi1qaXR0ZXIqKSkpKQotCi0oZGVmaW5lIChuZXR3b3JrLXRpbWUgcmVtb3RlLXRpbWUgbG9jYWwtdGltZSBldmVudHMgbSBiIHggeSB0KQotICAobGV0ICgociAoc3RyZWFtLWNhciByZW1vdGUtdGltZSkpCi0gICAgICAgIChsIChzdHJlYW0tY2FyIGxvY2FsLXRpbWUpKQotICAgICAgICAoZXZlbnQgKHN0cmVhbS1jYXIgZXZlbnRzKSkKLSAgICAgICAgKGV2ZW50cyAoc3RyZWFtLWNkciBldmVudHMpKSkKLQotICAgIChkZWZpbmUgKG5leHQgZXZlbnRzIG0gYiB4IHkgdCkKLSAgICAgIChzdHJlYW0tY29ucwotICAgICAgICgrICgqIG0gbCkgYikKLSAgICAgICAobmV0d29yay10aW1lCi0gICAgICAgIChzdHJlYW0tY2RyIHJlbW90ZS10aW1lKSAoc3RyZWFtLWNkciBsb2NhbC10aW1lKSBldmVudHMgbSBiIHggeSB0KSkpCi0KLSAgICAoY2FzZSAoYW5kPT4gZXZlbnQgY2FyKQotICAgICAgKChzZW5kLXRpbWUtcXVlcnkpCi0gICAgICAgKGNvbmQKLSAgICAgICAgKCg8IChyYW5kb20gMS4wKSAqcGFja2V0LWxvc3MqKQotICAgICAgICAgKGRlYnVnICI7IGRyb3BwZWQgdGltZSBxdWVyeTogfmFcbiIgbCkKLSAgICAgICAgIChwcmludC1ldmVudCAncGFja2V0LWxvc3QgbCAoKyAoKiBtIGwpIGIpKQotICAgICAgICAgKG5leHQgZXZlbnRzIG0gYiB4IHkgKHRpbWUtPnNhbXBsZXMgKnRpbWVvdXQqKSkpCi0gICAgICAgIChlbHNlCi0gICAgICAgICAoZGVidWcgIjsgc2VuZGluZyB0aW1lIHF1ZXJ5OiB+YVxuIiBsKQotICAgICAgICAgKHByaW50LWV2ZW50ICdwYWNrZXQtc2VudCBsICgrICgqIG0gbCkgYikpCi0gICAgICAgICAobmV4dCAoc2NoZWR1bGUtdGltZS1xdWVyeSBldmVudHMgbCkgbSBiIHggeSAodGltZS0+c2FtcGxlcyAqdGltZW91dCopKSkpKQotCi0gICAgICAoKHRpbWUtcXVlcnkpCi0gICAgICAgKGRlYnVnICI7IHRpbWUgcXVlcnkgcmVjZWl2ZWQsIHJlcGx5aW5nIHdpdGggfmFcbiIgcikKLSAgICAgICAobmV4dCAoc2NoZWR1bGUtdGltZS1yZXNwb25zZSBldmVudHMgKGNhZHIgZXZlbnQpIHIpIG0gYiB4IHkgKGFuZCB0ICgxLSB0KSkpKQotCi0gICAgICAoKHRpbWUtcmVzcG9uc2UpCi0gICAgICAgKGxldCAoKHggKHEtcHVzaCB4IChhdmcgKGNhZHIgZXZlbnQpIGwpKSkKLSAgICAgICAgICAgICAoeSAocS1wdXNoIHkgKGNhZGRyIGV2ZW50KSkpKQotICAgICAgICAgKGNhbGwtd2l0aC12YWx1ZXMKLSAgICAgICAgICAgICAobGFtYmRhICgpIChsZWFzdC1zcXVhcmVzIChxLWhlYWQgeCkgKHEtaGVhZCB5KSkpCi0gICAgICAgICAgIChsYW1iZGEgKG0gYiByLXNxdWFyZWQpCi0gICAgICAgICAgICAgKGRlZmluZSAobmV4dC10aW1lKSAKLSAgICAgICAgICAgICAgIChtYXgKLSAgICAgICAgICAgICAgICAoaWYgKDwgKGxlbmd0aCAocS1oZWFkIHgpKSAqd2luZG93LXNpemUqKQotICAgICAgICAgICAgICAgICAgICAwCi0gICAgICAgICAgICAgICAgICAgICgvIDEgKC0gMSAobWluIHItc3F1YXJlZCAwLjk5OTk5KSkgMTAwMCkpCi0gICAgICAgICAgICAgICAgMC4xMCkpCi0gICAgICAgICAgICAgKGRlYnVnICI7IG5ldyBzbG9wZSBhbmQgb2Zmc2V0OiB+YSB+YSAofmEpXG4iIG0gYiByLXNxdWFyZWQpCi0gICAgICAgICAgICAgKHByaW50LWV2ZW50ICdwYWNrZXQtb2JzZXJ2ZWQgKGF2ZyAoY2FkciBldmVudCkgbCkgKGNhZGRyIGV2ZW50KSkKLSAgICAgICAgICAgICAocHJpbnQtZXZlbnQgJ3BhY2tldC1yZWNlaXZlZCBsICgrICgqIG0gbCkgYikpCi0gICAgICAgICAgICAgKG5leHQgKHNjaGVkdWxlLXNlbmQtdGltZS1xdWVyeSBldmVudHMgKG5leHQtdGltZSkpIG0gYiB4IHkgI2YpKSkpKQotCi0gICAgICAoZWxzZQotICAgICAgIChjb25kCi0gICAgICAgICgobm90IHQpCi0gICAgICAgICA7OyBub3Qgd2FpdGluZyBmb3IgYSByZXNwb25zZQotICAgICAgICAgKG5leHQgZXZlbnRzIG0gYiB4IHkgdCkpCi0gICAgICAgICgoPD0gdCAwKQotICAgICAgICAgOzsgd2UgdGltZWQgb3V0Ci0gICAgICAgICAobmV4dCAoc2NoZWR1bGUtc2VuZC10aW1lLXF1ZXJ5IGV2ZW50cyAwLjApIG0gYiB4IHkgMCkpCi0gICAgICAgIChlbHNlCi0gICAgICAgICAobmV4dCBldmVudHMgbSBiIHggeSAoMS0gdCkpKSkpKSkpCi0KLShkZWZpbmUgKHJ1bi1zaW11bGF0aW9uIHJlbW90ZS1zcGVlZCBsb2NhbC1zcGVlZCkKLSAgKGxldCAoKGFic29sdXRlLXRpbWUgKGFyaXRobWV0aWMtc2VyaWVzIDAuMCAoLyAxLjAgKnNhbXBsZS1mcmVxdWVuY3kqKSkpCi0gICAgICAgIChldmVudC1zdHJlYW0gKHN0cmVhbS1vZiAjZikpKQotICAgIChsZXQgKChyZW1vdGUtdGltZSAoc2NhbGUtc3RyZWFtIGFic29sdXRlLXRpbWUgcmVtb3RlLXNwZWVkKSkKLSAgICAgICAgICAobG9jYWwtdGltZSAoc2NhbGUtc3RyZWFtIGFic29sdXRlLXRpbWUgbG9jYWwtc3BlZWQpKSkKLSAgICAgICh2YWx1ZXMKLSAgICAgICBhYnNvbHV0ZS10aW1lCi0gICAgICAgcmVtb3RlLXRpbWUKLSAgICAgICBsb2NhbC10aW1lCi0gICAgICAgKG5ldHdvcmstdGltZQotICAgICAgICByZW1vdGUtdGltZQotICAgICAgICBsb2NhbC10aW1lCi0gICAgICAgIChzY2hlZHVsZS1zZW5kLXRpbWUtcXVlcnkgZXZlbnQtc3RyZWFtIDAuMCkKLSAgICAgICAgMS4wCi0gICAgICAgIChzdHJlYW0tY2FyIGxvY2FsLXRpbWUpCi0gICAgICAgIChtYWtlLXEgKGxpc3QgKHN0cmVhbS1jYXIgbG9jYWwtdGltZSkpKQotICAgICAgICAobWFrZS1xIChsaXN0IChzdHJlYW0tY2FyIHJlbW90ZS10aW1lKSkpCi0gICAgICAgICNmKSkpKSkKLQotKGRlZmluZSAocHJpbnQtc2ltdWxhdGlvbikKLSAgKGRpc3BsYXkgIkFic29sdXRlIHRpbWU7IFJlbW90ZSB0aW1lOyBMb2NhbCB0aW1lOyBOZXR3b3JrIHRpbWVcbiIpCi0gIChjYWxsLXdpdGgtdmFsdWVzCi0gICAgICAobGFtYmRhICgpIChydW4tc2ltdWxhdGlvbiAqcmVtb3RlLXJhdGUqICpsb2NhbC1yYXRlKikpCi0gICAgKGxhbWJkYSBzdHJlYW1zCi0gICAgICAoYXBwbHkKLSAgICAgICBzdHJlYW0td2hpbGUKLSAgICAgICAobGFtYmRhIChhIHIgbCBuKSAoPD0gYSAqdG90YWwtdGltZSopKQotICAgICAgIChsYW1iZGEgKGEgciBsIG4pIChmb3JtYXQgI3QgIn5hIH5hIH5hIH5hXG4iIGEgciBsIG4pKQotICAgICAgIHN0cmVhbXMpKSkpCi0KLShkZWZpbmUgKHBsb3Qtc2ltdWxhdGlvbikKLSAgKGxldCAoKHBvcnQgKG9wZW4tb3V0cHV0LXBpcGUgIi4vcGxvdC1kYXRhIE5ldHdvcmsgQ2xvY2sgU2ltdWxhdGlvbiIpKSkKLSAgICAod2l0aC1vdXRwdXQtdG8tcG9ydCBwb3J0Ci0gICAgICBwcmludC1zaW11bGF0aW9uKQotICAgIChjbG9zZS1waXBlIHBvcnQpKSkKLQotICAgICAKLShkZWZpbmUtcGFyYW1ldGVyICpzYW1wbGUtZnJlcXVlbmN5KiA0MCkKLShkZWZpbmUtcGFyYW1ldGVyICpzZW5kLWRlbGF5KiAwLjEpCi0oZGVmaW5lLXBhcmFtZXRlciAqcmVjdi1kZWxheSogMC4xKQotKGRlZmluZS1wYXJhbWV0ZXIgKnBhY2tldC1sb3NzKiAwLjAxKQotKGRlZmluZS1wYXJhbWV0ZXIgKnNlbmQtaml0dGVyKiAwLjEpCi0oZGVmaW5lLXBhcmFtZXRlciAqcmVjdi1qaXR0ZXIqIDAuMSkKLShkZWZpbmUtcGFyYW1ldGVyICp3aW5kb3ctc2l6ZSogMzIpCi0oZGVmaW5lLXBhcmFtZXRlciAqbG9jYWwtcmF0ZSogMS4wKQotKGRlZmluZS1wYXJhbWV0ZXIgKnJlbW90ZS1yYXRlKiAxLjEpCi0oZGVmaW5lLXBhcmFtZXRlciAqdG90YWwtdGltZSogNS4wKQotKGRlZmluZS1wYXJhbWV0ZXIgKnRpbWVvdXQqIDEuMCkKLShkZWZpbmUtcGFyYW1ldGVyICpkZWJ1ZyogI2YpCi0oZGVmaW5lLXBhcmFtZXRlciAqd2l0aC1ncmFwaCogI3QpCi0KLQotKGRlZmluZSAobWFpbiBhcmdzKQotICAocGFyc2UtcGFyYW1ldGVyLWFyZ3VtZW50cyAoY2RyIGFyZ3MpKQotICAoaWYgKndpdGgtZ3JhcGgqCi0gICAgICAocGxvdC1zaW11bGF0aW9uKQotICAgICAgKHByaW50LXNpbXVsYXRpb24pKQotICAocXVpdCkpCmRpZmYgLS1naXQgYS90ZXN0cy9taXNjL3Bsb3QtZGF0YSBiL3Rlc3RzL21pc2MvcGxvdC1kYXRhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2NjI3YTY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL21pc2MvcGxvdC1kYXRhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KLQotaW1wb3J0IHB5bGFiCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBzeXMKLQotZGVmIHBhcnNlX2RhdGEobCwgc3RhdGUpOgotICAgIHN0YXRlWydkYXRhJ10uYXBwZW5kKFtmbG9hdCh4KSBmb3IgeCBpbiBmaWx0ZXIoTm9uZSwgbC5zcGxpdCgnICcpKV0pCi0gICAgcmV0dXJuIHN0YXRlCi0KLWRlZiBwYXJzZV9ldmVudChsLCBzdGF0ZSk6Ci0gICAgY29tcG9uZW50cyA9IGZpbHRlcihOb25lLCBsLnNwbGl0KCcgJykpCi0gICAgdmFscyA9IFtmbG9hdCh4KSBmb3IgeCBpbiBjb21wb25lbnRzWzE6XV0KLSAgICBpZiBub3QgY29tcG9uZW50c1swXSBpbiBzdGF0ZToKLSAgICAgICAgc3RhdGVbY29tcG9uZW50c1swXV0gPSBbdmFsc10KLSAgICBlbHNlOgotICAgICAgICBzdGF0ZVtjb21wb25lbnRzWzBdXS5hcHBlbmQodmFscykKLSAgICByZXR1cm4gc3RhdGUKLQotZGVmIHJlYWRfbGluZShmZCwgc3RhdGUpOgotICAgIGwgPSBmZC5yZWFkbGluZSgpCi0gICAgaWYgbm90IGw6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgbCA9IGwuc3RyaXAoKQotICAgIGlmIGxbMF0uaXNkaWdpdCgpOgotICAgICAgICByZXR1cm4gcGFyc2VfZGF0YShsLCBzdGF0ZSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gcGFyc2VfZXZlbnQobCwgc3RhdGUpCi0KLWRlZiByZWFkX2RhdGEoZmQpOgotICAgIHN0YXRlID0geydkYXRhJzpbXSwKLSAgICAgICAgICAgICAncGFja2V0LXNlbnQnOltdLAotICAgICAgICAgICAgICdwYWNrZXQtbG9zdCc6W10sCi0gICAgICAgICAgICAgJ3BhY2tldC1yZWNlaXZlZCc6W10sCi0gICAgICAgICAgICAgJ3BhY2tldC1vYnNlcnZlZCc6W119Ci0gICAgbmV3c3RhdGUgPSBzdGF0ZQotICAgIHdoaWxlIG5ld3N0YXRlOgotICAgICAgICBzdGF0ZSA9IG5ld3N0YXRlCi0gICAgICAgIG5ld3N0YXRlID0gcmVhZF9saW5lKGZkLCBzdGF0ZSkKLSAgICByZXR1cm4gc3RhdGUKLQotZGVmIG1ha2VfeHRpY2tzKHN0YXJ0LCBlbmQsIG51bXRpY2tzKToKLSAgICByZXR1cm4gcmFuZ2UoaW50KHN0YXJ0KSwgaW50KGVuZCksIGludCgoc3RhcnQtZW5kKS9udW10aWNrcykpCi0KLWRlZiBtYWtlX3Bsb3QodGl0bGUpOgotICAgIGwgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQotICAgIGxhYmVscyA9IGwuc3RyaXAoKS5zcGxpdCgnOycpCi0gICAgc3RhdGUgPSByZWFkX2RhdGEoc3lzLnN0ZGluKQotICAgIGRhdGEgPSBzdGF0ZVsnZGF0YSddCi0gICAgbG9zdF9wYWNrZXRzID0gc3RhdGVbJ3BhY2tldC1sb3N0J10KLSAgICBvYnN2X3BhY2tldHMgPSBzdGF0ZVsncGFja2V0LW9ic2VydmVkJ10KLSAgICBzZW50X3BhY2tldHMgPSBzdGF0ZVsncGFja2V0LXNlbnQnXQotICAgIHJlY2RfcGFja2V0cyA9IHN0YXRlWydwYWNrZXQtcmVjZWl2ZWQnXQotCi0gICAgZG9tYWluID0gW3hbMF0gZm9yIHggaW4gZGF0YV0KLSAgICBmb3IgaSBpbiByYW5nZSgxLGxlbihsYWJlbHMpKToKLSAgICAgICAgcHlsYWIucGxvdChkb21haW4sIFt4W2ldIGZvciB4IGluIGRhdGFdLCBsYWJlbD1sYWJlbHNbaV0pCi0gICAgcHlsYWIucGxvdChbeFswXSBmb3IgeCBpbiBsb3N0X3BhY2tldHNdLCBbeFsxXSBmb3IgeCBpbiBsb3N0X3BhY2tldHNdLAotICAgICAgICAgICAgICAgbGFiZWw9J0NsaWVudCBzZW50IHBhY2tldCwgYnV0IGRyb3BwZWQnLCBtYXJrZXI9J3gnLCBsaW5lc3R5bGU9Tm9uZSwgbXM9OCkKLSAgICBweWxhYi5wbG90KFt4WzBdIGZvciB4IGluIHNlbnRfcGFja2V0c10sIFt4WzFdIGZvciB4IGluIHNlbnRfcGFja2V0c10sCi0gICAgICAgICAgICAgICBsYWJlbD0nQ2xpZW50IHNlbnQgcGFja2V0JywgbWFya2VyPSdeJywgbGluZXN0eWxlPU5vbmUsIG1zPTgpCi0gICAgcHlsYWIucGxvdChbeFswXSBmb3IgeCBpbiBvYnN2X3BhY2tldHNdLCBbeFsxXSBmb3IgeCBpbiBvYnN2X3BhY2tldHNdLAotICAgICAgICAgICAgICAgbGFiZWw9J1JlbW90ZSB0aW1lIG9ic2VydmF0aW9uJywgbWFya2VyPSdEJywgbGluZXN0eWxlPU5vbmUsIG1zPTgpCi0gICAgcHlsYWIucGxvdChbeFswXSBmb3IgeCBpbiByZWNkX3BhY2tldHNdLCBbeFsxXSBmb3IgeCBpbiByZWNkX3BhY2tldHNdLAotICAgICAgICAgICAgICAgbGFiZWw9J0NsaWVudCByZWNlaXZlZCBwYWNrZXQnLCBtYXJrZXI9J3YnLCBsaW5lc3R5bGU9Tm9uZSwgbXM9OCkKLSAgICBweWxhYi5sZWdlbmQoKQotICAgIHB5bGFiLnlsYWJlbChyJ0Nsb2NrIHRpbWUgKHMpJykKLSAgICBweWxhYi54bGFiZWwocidSZWFsIHRpbWUgKHMpJykKLSAgICBweWxhYi50aXRsZSh0aXRsZSkKLSAgICBweWxhYi5ncmlkKFRydWUpCi0gICAgcHlsYWIuc2hvdygpCi0gICAgCi1kZWYgbWFpbihhcmdzKToKLSAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQotCi0gICAgdGl0bGUgPSAnICcuam9pbihhcmdzWzE6XSkKLSAgICBtYWtlX3Bsb3QodGl0bGUpCi0KLW1haW4oc3lzLmFyZ3YpCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5hbSBiL3Rvb2xzL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmVhMTdkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotCi1iaW5fUFJPR1JBTVMgPSBcCi0JZ3N0LWluc3BlY3QtQEdTVF9BUElfVkVSU0lPTkAgXAotCWdzdC1zdGF0cy1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JZ3N0LXR5cGVmaW5kLUBHU1RfQVBJX1ZFUlNJT05ACi0KLWdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVMgPSBnc3QtaW5zcGVjdC5jIHRvb2xzLmgKLWdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1nc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotCi1nc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfU09VUkNFUyA9IGdzdC1zdGF0cy5jIHRvb2xzLmgKLWdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX0xEQUREID0gJChHU1RfT0JKX0xJQlMpCi0KLWdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQF9TT1VSQ0VTID0gZ3N0LXR5cGVmaW5kLmMgdG9vbHMuaAotZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1nc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkBfTERBREQgPSAkKEdTVF9PQkpfTElCUykKLQotaWYgIUdTVF9ESVNBQkxFX1BBUlNFCi1iaW5fUFJPR1JBTVMgKz0gZ3N0LWxhdW5jaC1AR1NUX0FQSV9WRVJTSU9OQAotCi1nc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVMgPSBnc3QtbGF1bmNoLmMgdG9vbHMuaAotZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotZW5kaWYKLQotbWFucGFnZXMgPSBcCi0JZ3N0LWluc3BlY3QtQEdTVF9BUElfVkVSU0lPTkAuMSBcCi0JZ3N0LXR5cGVmaW5kLUBHU1RfQVBJX1ZFUlNJT05ALjEKLQotaWYgIUdTVF9ESVNBQkxFX1BBUlNFCi1tYW5wYWdlcyArPSBnc3QtbGF1bmNoLUBHU1RfQVBJX1ZFUlNJT05ALjEKLWVuZGlmCi0KLUNMRUFORklMRVMgPSAkKG1hbnBhZ2VzKSAqLmdjbm8gKi5nY2RhCi1tYW5fTUFOUyA9ICQobWFucGFnZXMpCi0KLSMgZGV2ZWxvcGVyIGhlbHBlciB0b29scywgbm90IG1lYW50IGZvciBpbnN0YWxsYXRpb24KLW5vaW5zdF9TQ1JJUFRTID0gZ3N0LWluZGVudAotCi1ub2luc3RfSEVBREVSUyA9IHRvb2xzLmgKLQotRVhUUkFfRElTVCA9IFwKLQkkKG5vaW5zdF9TQ1JJUFRTKSBcCi0JZ3N0LWluc3BlY3QuMS5pbiBcCi0JZ3N0LWxhdW5jaC4xLmluIFwKLQlnc3QtdHlwZWZpbmQuMS5pbgotCi0lLUBHU1RfQVBJX1ZFUlNJT05ALjE6ICUuMS5pbgotCSQoQU1fVl9HRU4pc2VkIFwKLQkJLWUgcyxnc3QtaW5zcGVjdCxnc3QtaW5zcGVjdC1AR1NUX0FQSV9WRVJTSU9OQCxnIFwKLQkJLWUgcyxnc3QtbGF1bmNoLGdzdC1sYXVuY2gtQEdTVF9BUElfVkVSU0lPTkAsZyBcCi0JCS1lIHMsZ3N0LXR5cGVmaW5kLGdzdC10eXBlZmluZC1AR1NUX0FQSV9WRVJTSU9OQCxnIFwKLQkJLWUgcyxHU1RfQVBJX1ZFUlNJT04sQEdTVF9BUElfVkVSU0lPTkAsZyBcCi0JCSQ8ID4kQAotCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5pbiBiL3Rvb2xzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTYwMTM4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTA2OSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLWJpbl9QUk9HUkFNUyA9IGdzdC1pbnNwZWN0LUBHU1RfQVBJX1ZFUlNJT05AJChFWEVFWFQpIFwKLQlnc3Qtc3RhdHMtQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCkgXAotCWdzdC10eXBlZmluZC1AR1NUX0FQSV9WRVJTSU9OQCQoRVhFRVhUKSAkKGFtX19FWEVFWFRfMSkKLUBHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBhbV9fYXBwZW5kXzEgPSBnc3QtbGF1bmNoLUBHU1RfQVBJX1ZFUlNJT05ACi1AR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VAYW1fX2FwcGVuZF8yID0gZ3N0LWxhdW5jaC1AR1NUX0FQSV9WRVJTSU9OQC4xCi1zdWJkaXIgPSB0b29scwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWRvY2Jvb2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2NoZWNrLWNoZWNrcy5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludHR5cGVzX2gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sb25nbG9uZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L25scy5tNCAkKHRvcF9zcmNkaXIpL200L3BvLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00ICQodG9wX3NyY2RpcikvbTQvc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUBHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBhbV9fRVhFRVhUXzEgPSBnc3QtbGF1bmNoLUBHU1RfQVBJX1ZFUlNJT05AJChFWEVFWFQpCi1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKG1hbjFkaXIpIgotUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKLWFtX2dzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX09CSkVDVFMgPSAgXAotCWdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0LiQoT0JKRVhUKQotZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUyA9ICBcCi0JJChhbV9nc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQF9PQkpFQ1RTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkBfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLWFtX19nc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVNfRElTVCA9IGdzdC1sYXVuY2guYyB0b29scy5oCi1AR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VAYW1fZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9PQkpFQ1RTID0gZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtbGF1bmNoLiQoT0JKRVhUKQotZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9PQkpFQ1RTID0gIFwKLQkkKGFtX2dzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUykKLUBHU1RfRElTQUJMRV9QQVJTRV9GQUxTRUBnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX0RFUEVOREVOQ0lFUyA9ICBcCi1AR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VACSQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1hbV9nc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUyA9ICBcCi0JZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1zdGF0cy4kKE9CSkVYVCkKLWdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQF9PQkpFQ1RTID0gIFwKLQkkKGFtX2dzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQF9PQkpFQ1RTKQotZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChnc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotYW1fZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX09CSkVDVFMgPSAgXAotCWdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtdHlwZWZpbmQuJChPQkpFWFQpCi1nc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUyA9ICBcCi0JJChhbV9nc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUykKLWdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLVNDUklQVFMgPSAkKG5vaW5zdF9TQ1JJUFRTKQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQoZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkBfU09VUkNFUykgXAotCSQoZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9TT1VSQ0VTKSBcCi0JJChnc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfU09VUkNFUykgXAotCSQoZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVMpIFwKLQkkKGFtX19nc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVNfRElTVCkgXAotCSQoZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVMpIFwKLQkkKGdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQF9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCi1OUk9GRiA9IG5yb2ZmCi1NQU5TID0gJChtYW5fTUFOUykKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CQVNIX0NPTVBMRVRJT05fQ0ZMQUdTID0gQEJBU0hfQ09NUExFVElPTl9DRkxBR1NACi1CQVNIX0NPTVBMRVRJT05fRElSID0gQEJBU0hfQ09NUExFVElPTl9ESVJACi1CQVNIX0NPTVBMRVRJT05fTElCUyA9IEBCQVNIX0NPTVBMRVRJT05fTElCU0AKLUJBU0hfSEVMUEVSU19ESVIgPSBAQkFTSF9IRUxQRVJTX0RJUkAKLUJJU09OX1BBVEggPSBAQklTT05fUEFUSEAKLUNBUF9MSUJTID0gQENBUF9MSUJTQAotQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAotQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DSEVDS19NQUpPUl9WRVJTSU9OID0gQENIRUNLX01BSk9SX1ZFUlNJT05ACi1DSEVDS19NSUNST19WRVJTSU9OID0gQENIRUNLX01JQ1JPX1ZFUlNJT05ACi1DSEVDS19NSU5PUl9WRVJTSU9OID0gQENIRUNLX01JTk9SX1ZFUlNJT05ACi1DSEVDS19WRVJTSU9OID0gQENIRUNLX1ZFUlNJT05ACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURBVEFESVIgPSBAREFUQURJUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRU5BQkxFX1NVQlVOSVQgPSBARU5BQkxFX1NVQlVOSVRACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMRVhfUEFUSCA9IEBGTEVYX1BBVEhACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNUF9MSUJTID0gQEdNUF9MSUJTQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU0xfTElCUyA9IEBHU0xfTElCU0AKLUdTVENPTkZJR19CVUlMVF9XSVRIX01TVkMgPSBAR1NUQ09ORklHX0JVSUxUX1dJVEhfTVNWQ0AKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfQ0ZMQUdTID0gQEdTVF9BTExfQ0ZMQUdTQAotR1NUX0FMTF9DWFhGTEFHUyA9IEBHU1RfQUxMX0NYWEZMQUdTQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BTExfTElCUyA9IEBHU1RfQUxMX0xJQlNACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfRElTQUJMRV9HU1RfREVCVUdfREVGSU5FID0gQEdTVF9ESVNBQkxFX0dTVF9ERUJVR19ERUZJTkVACi1HU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORSA9IEBHU1RfRElTQUJMRV9HU1RfVFJBQ0VSX0hPT0tTX0RFRklORUAKLUdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HX0RFRklORSA9IEBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lOR19ERUZJTkVACi1HU1RfRElTQUJMRV9QQVJTRV9ERUZJTkUgPSBAR1NUX0RJU0FCTEVfUEFSU0VfREVGSU5FQAotR1NUX0RJU0FCTEVfUExVR0lOX0RFRklORSA9IEBHU1RfRElTQUJMRV9QTFVHSU5fREVGSU5FQAotR1NUX0RJU0FCTEVfUkVHSVNUUllfREVGSU5FID0gQEdTVF9ESVNBQkxFX1JFR0lTVFJZX0RFRklORUAKLUdTVF9IQVZFX01PTk9UT05JQ19DTE9DS19ERUZJTkUgPSBAR1NUX0hBVkVfTU9OT1RPTklDX0NMT0NLX0RFRklORUAKLUdTVF9IQVZFX1BPU0lYX1RJTUVSU19ERUZJTkUgPSBAR1NUX0hBVkVfUE9TSVhfVElNRVJTX0RFRklORUAKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElCX0xERkxBR1MgPSBAR1NUX0xJQl9MREZMQUdTQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9PQkpfQ0ZMQUdTID0gQEdTVF9PQkpfQ0ZMQUdTQAotR1NUX09CSl9DWFhGTEFHUyA9IEBHU1RfT0JKX0NYWEZMQUdTQAotR1NUX09CSl9MSUJTID0gQEdTVF9PQkpfTElCU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QTFVHSU5fU0NBTk5FUl9JTlNUQUxMRUQgPSBAR1NUX1BMVUdJTl9TQ0FOTkVSX0lOU1RBTExFREAKLUdTVF9QVFBfSEVMUEVSX0lOU1RBTExFRCA9IEBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRURACi1HU1RfUkVHSVNUUllfRE9DX1RZUEVTID0gQEdTVF9SRUdJU1RSWV9ET0NfVFlQRVNACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1ZFUlNJT05fTUFKT1IgPSBAR1NUX1ZFUlNJT05fTUFKT1JACi1HU1RfVkVSU0lPTl9NSUNSTyA9IEBHU1RfVkVSU0lPTl9NSUNST0AKLUdTVF9WRVJTSU9OX01JTk9SID0gQEdTVF9WRVJTSU9OX01JTk9SQAotR1NUX1ZFUlNJT05fTkFOTyA9IEBHU1RfVkVSU0lPTl9OQU5PQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1IQVZFX0NBUCA9IEBIQVZFX0NBUEAKLUhBVkVfRE9DQk9PSzJQUyA9IEBIQVZFX0RPQ0JPT0syUFNACi1IQVZFX0RWSVBTID0gQEhBVkVfRFZJUFNACi1IQVZFX0VQU1RPUERGID0gQEhBVkVfRVBTVE9QREZACi1IQVZFX0ZPUksgPSBASEFWRV9GT1JLQAotSEFWRV9HTVAgPSBASEFWRV9HTVBACi1IQVZFX0dTTCA9IEBIQVZFX0dTTEAKLUhBVkVfSkFERVRFWCA9IEBIQVZFX0pBREVURVhACi1IQVZFX1BOR1RPUE5NID0gQEhBVkVfUE5HVE9QTk1ACi1IQVZFX1BOTVRPUFMgPSBASEFWRV9QTk1UT1BTQAotSEFWRV9QUzJQREYgPSBASEFWRV9QUzJQREZACi1IQVZFX1hNTExJTlQgPSBASEFWRV9YTUxMSU5UQAotSEFWRV9YU0xUUFJPQyA9IEBIQVZFX1hTTFRQUk9DQAotSE9TVF9DUFUgPSBASE9TVF9DUFVACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1JTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKLUlOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKLUlOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKLUlOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAotSU5UUk9TUEVDVElPTl9JTklUID0gQElOVFJPU1BFQ1RJT05fSU5JVEAKLUlOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACi1JTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACi1JTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAotSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCRElSID0gQExJQkRJUkAKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBFUkxfUEFUSCA9IEBQRVJMX1BBVEhACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUklOVEZfQ0ZMQUdTID0gQFBSSU5URl9DRkxBR1NACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVNFRCA9IEBTRURACi1TRVRDQVAgPSBAU0VUQ0FQQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNPQ0tFVF9MSUJTID0gQFNPQ0tFVF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1VTldJTkRfQ0ZMQUdTID0gQFVOV0lORF9DRkxBR1NACi1VTldJTkRfTElCUyA9IEBVTldJTkRfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdJTjMyX0xJQlMgPSBAV0lOMzJfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAotWFNMVFBST0MgPSBAWFNMVFBST0NACi1YU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLWdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVMgPSBnc3QtaW5zcGVjdC5jIHRvb2xzLmgKLWdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpCi1nc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVMgPSBnc3Qtc3RhdHMuYyB0b29scy5oCi1nc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX1NPVVJDRVMgPSBnc3QtdHlwZWZpbmQuYyB0b29scy5oCi1nc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykKLWdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCA9ICQoR1NUX09CSl9MSUJTKQotQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQGdzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkBfU09VUkNFUyA9IGdzdC1sYXVuY2guYyB0b29scy5oCi1AR1NUX0RJU0FCTEVfUEFSU0VfRkFMU0VAZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MgPSAkKEdTVF9PQkpfQ0ZMQUdTKQotQEdTVF9ESVNBQkxFX1BBUlNFX0ZBTFNFQGdzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkBfTERBREQgPSAkKEdTVF9PQkpfTElCUykKLW1hbnBhZ2VzID0gZ3N0LWluc3BlY3QtQEdTVF9BUElfVkVSU0lPTkAuMSBcCi0JZ3N0LXR5cGVmaW5kLUBHU1RfQVBJX1ZFUlNJT05ALjEgJChhbV9fYXBwZW5kXzIpCi1DTEVBTkZJTEVTID0gJChtYW5wYWdlcykgKi5nY25vICouZ2NkYQotbWFuX01BTlMgPSAkKG1hbnBhZ2VzKQotCi0jIGRldmVsb3BlciBoZWxwZXIgdG9vbHMsIG5vdCBtZWFudCBmb3IgaW5zdGFsbGF0aW9uCi1ub2luc3RfU0NSSVBUUyA9IGdzdC1pbmRlbnQKLW5vaW5zdF9IRUFERVJTID0gdG9vbHMuaAotRVhUUkFfRElTVCA9IFwKLQkkKG5vaW5zdF9TQ1JJUFRTKSBcCi0JZ3N0LWluc3BlY3QuMS5pbiBcCi0JZ3N0LWxhdW5jaC4xLmluIFwKLQlnc3QtdHlwZWZpbmQuMS5pbgotCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0b29scy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0b29scy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLWluc3RhbGwtYmluUFJPR1JBTVM6ICQoYmluX1BST0dSQU1TKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoYmluZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChiaW5kaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0Jc2VkICdzLyQoRVhFRVhUKSQkLy8nIHwgXAotCXdoaWxlIHJlYWQgcCBwMTsgZG8gaWYgdGVzdCAtZiAkJHAgXAotCSB8fCB0ZXN0IC1mICQkcDEgXAotCSAgOyB0aGVuIGVjaG8gIiQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKLQlkb25lIHwgXAotCXNlZCAtZSAncDtzLC4qLywsO247aCcgXAotCSAgICAtZSAnc3wuKnwufCcgXAotCSAgICAtZSAncDt4O3MsLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nIHwgXAotCXNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAotCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDEgfSBcCi0JICB7IGQ9JCQzOyBpZiAoZGlyc1tkXSAhPSAxKSB7IHByaW50ICJkIiwgZDsgZGlyc1tkXSA9IDEgfSBcCi0JICAgIGlmICgkJDIgPT0gJCQ0KSBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKLQkgICAgZWxzZSB7IHByaW50ICJmIiwgJCQzICIvIiAkJDQsICQkMTsgfSB9IFwKLQkgIEVORCB7IGZvciAoZCBpbiBmaWxlcykgcHJpbnQgImYiLCBkLCBmaWxlc1tkXSB9JyB8IFwKLQl3aGlsZSByZWFkIHR5cGUgZGlyIGZpbGVzOyBkbyBcCi0JICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAotCSAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKLQkgICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICckKERFU1RESVIpJChiaW5kaXIpJCRkaXInIjsgXAotCSAgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAiJChERVNURElSKSQoYmluZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAotCSAgICB9IFwKLQk7IGRvbmUKLQotdW5pbnN0YWxsLWJpblBST0dSQU1TOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAotCSAgc2VkIC1lICdoO3MsXi4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSknIFwKLQkgICAgICAtZSAncy8kJC8kKEVYRUVYVCkvJyBcCi0JYDsgXAotCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiICggY2QgJyQoREVTVERJUikkKGJpbmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotCWNkICIkKERFU1RESVIpJChiaW5kaXIpIiAmJiBybSAtZiAkJGZpbGVzCi0KLWNsZWFuLWJpblBST0dSQU1TOgotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLQotZ3N0LWluc3BlY3QtQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCk6ICQoZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUykgJChnc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkBfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZ3N0LWluc3BlY3QtQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX0xJTkspICQoZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUykgJChnc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCkgJChMSUJTKQotCi1nc3QtbGF1bmNoLUBHU1RfQVBJX1ZFUlNJT05AJChFWEVFWFQpOiAkKGdzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUykgJChnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGdzdC1sYXVuY2gtQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGdzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkBfTElOSykgJChnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX09CSkVDVFMpICQoZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9MREFERCkgJChMSUJTKQotCi1nc3Qtc3RhdHMtQEdTVF9BUElfVkVSU0lPTkAkKEVYRUVYVCk6ICQoZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX09CSkVDVFMpICQoZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZ3N0LXN0YXRzLUBHU1RfQVBJX1ZFUlNJT05AJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChnc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfTElOSykgJChnc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfT0JKRUNUUykgJChnc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkBfTERBREQpICQoTElCUykKLQotZ3N0LXR5cGVmaW5kLUBHU1RfQVBJX1ZFUlNJT05AJChFWEVFWFQpOiAkKGdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQF9PQkpFQ1RTKSAkKGdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGdzdC10eXBlZmluZC1AR1NUX0FQSV9WRVJTSU9OQCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX0xJTkspICQoZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX09CSkVDVFMpICQoZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtaW5zcGVjdC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtbGF1bmNoLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXN0YXRzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXR5cGVmaW5kLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0Lm86IGdzdC1pbnNwZWN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWluc3BlY3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWluc3BlY3QuVHBvIC1jIC1vIGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0Lm8gYHRlc3QgLWYgJ2dzdC1pbnNwZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1pbnNwZWN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0LlRwbyAkKERFUERJUikvZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWluc3BlY3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3QtaW5zcGVjdC5jJyBvYmplY3Q9J2dzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0Lm8gYHRlc3QgLWYgJ2dzdC1pbnNwZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1pbnNwZWN0LmMKLQotZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWluc3BlY3Qub2JqOiBnc3QtaW5zcGVjdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X2luc3BlY3RfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWluc3BlY3QuVHBvIC1jIC1vIGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0LWluc3BlY3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtaW5zcGVjdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QtaW5zcGVjdC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtaW5zcGVjdC5UcG8gJChERVBESVIpL2dzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0LWluc3BlY3QuYycgb2JqZWN0PSdnc3RfaW5zcGVjdF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtaW5zcGVjdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9pbnNwZWN0X0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1pbnNwZWN0Lm9iaiBgaWYgdGVzdCAtZiAnZ3N0LWluc3BlY3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtaW5zcGVjdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QtaW5zcGVjdC5jJzsgZmlgCi0KLWdzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWxhdW5jaC5vOiBnc3QtbGF1bmNoLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1sYXVuY2gubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtbGF1bmNoLlRwbyAtYyAtbyBnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1sYXVuY2gubyBgdGVzdCAtZiAnZ3N0LWxhdW5jaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QtbGF1bmNoLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWxhdW5jaC5UcG8gJChERVBESVIpL2dzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWxhdW5jaC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdC1sYXVuY2guYycgb2JqZWN0PSdnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1sYXVuY2gubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1sYXVuY2gubyBgdGVzdCAtZiAnZ3N0LWxhdW5jaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QtbGF1bmNoLmMKLQotZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtbGF1bmNoLm9iajogZ3N0LWxhdW5jaC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtbGF1bmNoLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X2xhdW5jaF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtbGF1bmNoLlRwbyAtYyAtbyBnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1sYXVuY2gub2JqIGBpZiB0ZXN0IC1mICdnc3QtbGF1bmNoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0LWxhdW5jaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QtbGF1bmNoLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWxhdW5jaC5UcG8gJChERVBESVIpL2dzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWxhdW5jaC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdC1sYXVuY2guYycgb2JqZWN0PSdnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1sYXVuY2gub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfbGF1bmNoX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9sYXVuY2hfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LWxhdW5jaC5vYmogYGlmIHRlc3QgLWYgJ2dzdC1sYXVuY2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtbGF1bmNoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC1sYXVuY2guYyc7IGZpYAotCi1nc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXN0YXRzLm86IGdzdC1zdGF0cy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXN0YXRzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQC1nc3Qtc3RhdHMuVHBvIC1jIC1vIGdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQC1nc3Qtc3RhdHMubyBgdGVzdCAtZiAnZ3N0LXN0YXRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1zdGF0cy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXN0YXRzLlRwbyAkKERFUERJUikvZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1zdGF0cy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdC1zdGF0cy5jJyBvYmplY3Q9J2dzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQC1nc3Qtc3RhdHMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQC1nc3Qtc3RhdHMubyBgdGVzdCAtZiAnZ3N0LXN0YXRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdC1zdGF0cy5jCi0KLWdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQC1nc3Qtc3RhdHMub2JqOiBnc3Qtc3RhdHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1zdGF0cy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQC1nc3Qtc3RhdHMuVHBvIC1jIC1vIGdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQC1nc3Qtc3RhdHMub2JqIGBpZiB0ZXN0IC1mICdnc3Qtc3RhdHMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3Qtc3RhdHMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0LXN0YXRzLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQC1nc3Qtc3RhdHMuVHBvICQoREVQRElSKS9nc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXN0YXRzLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0LXN0YXRzLmMnIG9iamVjdD0nZ3N0X3N0YXRzX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC1zdGF0cy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdzdF9zdGF0c19AR1NUX0FQSV9WRVJTSU9OQF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnc3Rfc3RhdHNfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXN0YXRzLm9iaiBgaWYgdGVzdCAtZiAnZ3N0LXN0YXRzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0LXN0YXRzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdC1zdGF0cy5jJzsgZmlgCi0KLWdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtdHlwZWZpbmQubzogZ3N0LXR5cGVmaW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtdHlwZWZpbmQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC10eXBlZmluZC5UcG8gLWMgLW8gZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC10eXBlZmluZC5vIGB0ZXN0IC1mICdnc3QtdHlwZWZpbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0LXR5cGVmaW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtdHlwZWZpbmQuVHBvICQoREVQRElSKS9nc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXR5cGVmaW5kLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0LXR5cGVmaW5kLmMnIG9iamVjdD0nZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC10eXBlZmluZC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkBfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC10eXBlZmluZC5vIGB0ZXN0IC1mICdnc3QtdHlwZWZpbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0LXR5cGVmaW5kLmMKLQotZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC10eXBlZmluZC5vYmo6IGdzdC10eXBlZmluZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIC1NVCBnc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXR5cGVmaW5kLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC10eXBlZmluZC5UcG8gLWMgLW8gZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC10eXBlZmluZC5vYmogYGlmIHRlc3QgLWYgJ2dzdC10eXBlZmluZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdC10eXBlZmluZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3QtdHlwZWZpbmQuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05ALWdzdC10eXBlZmluZC5UcG8gJChERVBESVIpL2dzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtdHlwZWZpbmQuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3QtdHlwZWZpbmQuYycgb2JqZWN0PSdnc3RfdHlwZWZpbmRfQEdTVF9BUElfVkVSU0lPTkAtZ3N0LXR5cGVmaW5kLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ3N0X3R5cGVmaW5kX0BHU1RfQVBJX1ZFUlNJT05AX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdzdF90eXBlZmluZF9AR1NUX0FQSV9WRVJTSU9OQC1nc3QtdHlwZWZpbmQub2JqIGBpZiB0ZXN0IC1mICdnc3QtdHlwZWZpbmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3QtdHlwZWZpbmQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0LXR5cGVmaW5kLmMnOyBmaWAKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLWluc3RhbGwtbWFuMTogJChtYW5fTUFOUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdDE9Jyc7IFwKLQlsaXN0Mj0nJChtYW5fTUFOUyknOyBcCi0JdGVzdCAtbiAiJChtYW4xZGlyKSIgXAotCSAgJiYgdGVzdCAtbiAiYGVjaG8gJCRsaXN0MSQkbGlzdDJgIiBcCi0JICB8fCBleGl0IDA7IFwKLQllY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQobWFuMWRpciknIjsgXAotCSQoTUtESVJfUCkgIiQoREVTVERJUikkKG1hbjFkaXIpIiB8fCBleGl0IDE7IFwKLQl7IGZvciBpIGluICQkbGlzdDE7IGRvIGVjaG8gIiQkaSI7IGRvbmU7ICBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0MiI7IHRoZW4gXAotCSAgZm9yIGkgaW4gJCRsaXN0MjsgZG8gZWNobyAiJCRpIjsgZG9uZSBcCi0JICAgIHwgc2VkIC1uICcvXC4xW2Etel0qJCQvcCc7IFwKLQlmaTsgXAotCX0gfCB3aGlsZSByZWFkIHA7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgXAotCWRvbmUgfCBcCi0Jc2VkIC1lICduO3MsLiovLCw7cDtoO3MsLipcLiwsO3MsXlteMV1bMC05YS16XSokJCwxLDt4JyBcCi0JICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnIHwgXAotCXNlZCAnTjtOO3MsXG4sICxnJyB8IHsgXAotCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAotCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QnIjsgXAotCSAgICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCIgfHwgZXhpdCAkJD87IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCi0Jd2hpbGUgcmVhZCBmaWxlczsgZG8gXAotCSAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCi0JICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobWFuMWRpciknIjsgXAotCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuMWRpcikiIHx8IGV4aXQgJCQ/OyB9OyBcCi0JZG9uZTsgfQotCi11bmluc3RhbGwtbWFuMToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjFkaXIpIiB8fCBleGl0IDA7IFwKLQlmaWxlcz1geyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmU7IFwKLQlsMj0nJChtYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAotCSAgc2VkIC1uICcvXC4xW2Etel0qJCQvcCc7IFwKLQl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW14xXVswLTlhLXpdKiQkLDEsO3gnIFwKLQkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCi0JZGlyPSckKERFU1RESVIpJChtYW4xZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpICQoU0NSSVBUUykgJChNQU5TKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQobWFuMWRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbWFuCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWJpblBST0dSQU1TCi0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xCi0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtbWFuCi0KLXVuaW5zdGFsbC1tYW46IHVuaW5zdGFsbC1tYW4xCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAotCWNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIFwKLQljdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1iaW5QUk9HUkFNUyBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCi0JaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtbWFuMSBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLW1hbjEKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSUtQEdTVF9BUElfVkVSU0lPTkAuMTogJS4xLmluCi0JJChBTV9WX0dFTilzZWQgXAotCQktZSBzLGdzdC1pbnNwZWN0LGdzdC1pbnNwZWN0LUBHU1RfQVBJX1ZFUlNJT05ALGcgXAotCQktZSBzLGdzdC1sYXVuY2gsZ3N0LWxhdW5jaC1AR1NUX0FQSV9WRVJTSU9OQCxnIFwKLQkJLWUgcyxnc3QtdHlwZWZpbmQsZ3N0LXR5cGVmaW5kLUBHU1RfQVBJX1ZFUlNJT05ALGcgXAotCQktZSBzLEdTVF9BUElfVkVSU0lPTixAR1NUX0FQSV9WRVJTSU9OQCxnIFwKLQkJJDwgPiRACi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC1pbmRlbnQgYi90b29scy9nc3QtaW5kZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhOWI4YmZlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2dzdC1pbmRlbnQKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIS9iaW4vc2gKLQotZm9yIGV4ZWNuYW1lIGluIGdudWluZGVudCBnaW5kZW50IGluZGVudDsgZG8KLSAgdmVyc2lvbj1gJGV4ZWNuYW1lIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKLSAgaWYgdGVzdCAieCR2ZXJzaW9uIiAhPSAieCI7IHRoZW4KLSAgICBJTkRFTlQ9JGV4ZWNuYW1lCi0gICAgYnJlYWsKLSAgZmkKLWRvbmUKLQotaWYgdGVzdCAteiAkSU5ERU5UOyB0aGVuCi0gIGVjaG8gIkdTdHJlYW1lciBnaXQgcHJlLWNvbW1pdCBob29rOiIKLSAgZWNobyAiRGlkIG5vdCBmaW5kIEdOVSBpbmRlbnQsIHBsZWFzZSBpbnN0YWxsIGl0IGJlZm9yZSBjb250aW51aW5nLiIKLSAgZXhpdCAxCi1maQotCi1jYXNlIGAkSU5ERU5UIC0tdmVyc2lvbmAgaW4KLSAgR05VKikKLSAgICAgIDs7Ci0gIGRlZmF1bHQpCi0gICAgICBlY2hvICJEaWQgbm90IGZpbmQgR05VIGluZGVudCwgcGxlYXNlIGluc3RhbGwgaXQgYmVmb3JlIGNvbnRpbnVpbmcuIgotICAgICAgZWNobyAiKEZvdW5kICRJTkRFTlQsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgR05VIGluZGVudCkiCi0gICAgICBleGl0IDEKLSAgICAgIDs7Ci1lc2FjCi0KLSMgUnVuIHR3aWNlLiBHTlUgaW5kZW50IGlzbid0IGlkZW1wb3RlbnQKLSMgd2hlbiBydW4gb25jZQotZm9yIGkgaW4gMSAyOyBkbwotJElOREVOVCBcCi0gIC0tYnJhY2VzLW9uLWlmLWxpbmUgXAotICAtLWNhc2UtYnJhY2UtaW5kZW50YXRpb24wIFwKLSAgLS1jYXNlLWluZGVudGF0aW9uMiBcCi0gIC0tYnJhY2VzLWFmdGVyLXN0cnVjdC1kZWNsLWxpbmUgXAotICAtLWxpbmUtbGVuZ3RoODAgXAotICAtLW5vLXRhYnMgXAotICAtLWN1ZGRsZS1lbHNlIFwKLSAgLS1kb250LWxpbmUtdXAtcGFyZW50aGVzZXMgXAotICAtLWNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbjQgXAotICAtLWhvbm91ci1uZXdsaW5lcyBcCi0gIC0tdGFiLXNpemU4IFwKLSAgLS1pbmRlbnQtbGV2ZWwyIFwKLSAgLS1sZWF2ZS1wcmVwcm9jZXNzb3Itc3BhY2UgXAotICAkKiB8fCBleGl0ICQ/Ci1kb25lCmRpZmYgLS1naXQgYS90b29scy9nc3QtaW5zcGVjdC4xLmluIGIvdG9vbHMvZ3N0LWluc3BlY3QuMS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhOTc2Ni4uMDAwMDAwMAotLS0gYS90b29scy9nc3QtaW5zcGVjdC4xLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLlRIIEdTdHJlYW1lciAxICJEZWNlbWJlciAyMDA1IgotLlNIICJOQU1FIgotZ3N0XC1pbnNwZWN0IC0gcHJpbnQgaW5mbyBhYm91dCBhIEdTdHJlYW1lciBwbHVnaW4gb3IgZWxlbWVudAotLlNIICJTWU5PUFNJUyIKLS5CICBnc3RcLWluc3BlY3QgW09QVElPTi4uLl0gW1BMVUdJTnxFTEVNRU5UXQotLlNIICJERVNDUklQVElPTiIKLS5QUAotXGZJZ3N0XC1pbnNwZWN0XGZQIGlzIGEgdG9vbCB0aGF0IHByaW50cyBvdXQgaW5mb3JtYXRpb24gb24KLWF2YWlsYWJsZSBcZklHU3RyZWFtZXJcZlAgcGx1Z2lucywgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyCi1wbHVnaW4sIG9yIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBlbGVtZW50LiAgV2hlbiBleGVjdXRlZAotd2l0aCBubyBQTFVHSU4gb3IgRUxFTUVOVCBhcmd1bWVudCwgXGZJZ3N0XC1pbnNwZWN0XGZQIHdpbGwgcHJpbnQKLWEgbGlzdCBvZiBhbGwgcGx1Z2lucyBhbmQgZWxlbWVudHMgdG9nZXRoZXIgd2l0aCBhIHN1bW1hcnkuCi1XaGVuIGV4ZWN1dGVkIHdpdGggYSBQTFVHSU4gb3IgRUxFTUVOVCBhcmd1bWVudCwKLVxmSWdzdFwtaW5zcGVjdFxmUCB3aWxsIHByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoYXQgcGx1Zy1pbiBvcgotZWxlbWVudC4KLS4KLS5TSCAiT1BUSU9OUyIKLS5sCi1cZklnc3RcLWluc3BlY3RcZlAgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBhbmQgb3B0aW9uczoKLS5UUCA4Ci0uQiAgUExVR0lOCi1OYW1lIG9mIGEgcGx1Z2luCi0uVFAgOAotLkIgIEVMRU1FTlQKLU5hbWUgb2YgYW4gZWxlbWVudAotLlRQIDgKLS5CICBcLVwtaGVscAotUHJpbnQgaGVscCBzeW5vcHNpcyBhbmQgYXZhaWxhYmxlIEZMQUdTCi0uVFAgOAotLkIgIFwtXC1nc3RcLWluZm9cLW1hc2s9RkxBR1MKLVxmSUdTdHJlYW1lclxmUCBpbmZvIGZsYWdzIHRvIHNldCAobGlzdCB3aXRoIFwtXC1oZWxwKQotLlRQIDgKLS5CICBcLWEsIFwtXC1wcmludFwtYWxsCi1QcmludCBhbGwgcGx1Z2lucyBhbmQgZWxlbWVudHMKLS5UUCA4Ci0uQiAgXC1cLXByaW50XC1wbHVnaW5cLWF1dG9cLWluc3RhbGxcLWluZm8KLVByaW50IGEgbWFjaGluZS1wYXJzYWJsZSBsaXN0IG9mIGZlYXR1cmVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIHByb3ZpZGVzLgotVXNlZnVsIGluIGNvbm5lY3Rpb24gd2l0aCBleHRlcm5hbCBhdXRvbWF0aWMgcGx1Z2luIGluc3RhbGxhdGlvbiBtZWNoYW5pc21zLgotLlRQIDgKLS5CICBcLVwtZ3N0XC1kZWJ1Z1wtbWFzaz1GTEFHUwotXGZJR1N0cmVhbWVyXGZQIGRlYnVnZ2luZyBmbGFncyB0byBzZXQgKGxpc3Qgd2l0aCBcLVwtaGVscCkKLS5UUCA4Ci0uQiAgXC1cLWdzdFwtbWFzaz1GTEFHUwotXGZJR1N0cmVhbWVyXGZQIGluZm8gYW5kIGRlYnVnZ2luZyBmbGFncyB0byBzZXQgKGxpc3Qgd2l0aCBcLVwtaGVscCkKLS5UUCA4Ci0uQiAgXC1cLWdzdFwtcGx1Z2luXC1zcGV3Ci1cZklHU3RyZWFtZXJcZlAgaW5mbyBmbGFncyB0byBzZXQKLUVuYWJsZSBwcmludG91dCBvZiBlcnJvcnMgd2hpbGUgbG9hZGluZyBcZklHU3RyZWFtZXJcZlAgcGx1Z2lucwotLlRQIDgKLS5CICBcLVwtZ3N0XC1wbHVnaW5cLXBhdGg9UEFUSAotQWRkIGRpcmVjdG9yaWVzIHNlcGFyYXRlZCB3aXRoICc6JyB0byB0aGUgcGx1Z2luIHNlYXJjaCBwYXRoCi0uCi0uU0ggIlNFRSBBTFNPIgotLkJSIGdzdFwtZmVlZGJhY2sgKDEpLAotLkJSIGdzdFwtbGF1bmNoICgxKSwKLS5CUiBnc3RcLXR5cGVmaW5kICgxKQotLlNIICJBVVRIT1IiCi1UaGUgR1N0cmVhbWVyIHRlYW0gYXQgaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCmRpZmYgLS1naXQgYS90b29scy9nc3QtaW5zcGVjdC5jIGIvdG9vbHMvZ3N0LWluc3BlY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E1OWVmMy4uMDAwMDAwMAotLS0gYS90b29scy9nc3QtaW5zcGVjdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAyMDA0IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotICoKLSAqIGdzdC1pbnNwZWN0LmM6IHRvb2wgdG8gaW5zcGVjdCB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLS8qIEZJWE1FIDIuMDogc3VwcHJlc3Mgd2FybmluZ3MgZm9yIGRlcHJlY2F0ZWQgQVBJIHN1Y2ggYXMgR1ZhbHVlQXJyYXkKLSAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoPj0gMi4zMS4wKSAqLwotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgInRvb2xzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxsb2NhbGUuaD4KLSNpbmNsdWRlIDxnbGliL2dwcmludGYuaD4KLQotc3RhdGljIGNoYXIgKl9uYW1lID0gTlVMTDsKLQotc3RhdGljIGludCBwcmludF9lbGVtZW50X2luZm8gKEdzdEVsZW1lbnRGYWN0b3J5ICogZmFjdG9yeSwKLSAgICBnYm9vbGVhbiBwcmludF9uYW1lcyk7Ci0KLS8qICpJTkRFTlQtT0ZGKiAqLwotR19HTlVDX1BSSU5URiAoMSwgMikKLS8qICpJTkRFTlQtT04qICovCi1zdGF0aWMgdm9pZAotbl9wcmludCAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLQotICBpZiAoX25hbWUpCi0gICAgZ19wcmludCAoIiVzIiwgX25hbWUpOwotCi0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOwotICBnX3ZwcmludGYgKGZvcm1hdCwgYXJncyk7Ci0gIHZhX2VuZCAoYXJncyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcHJpbnRfZmllbGQgKEdRdWFyayBmaWVsZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIGdwb2ludGVyIHBmeCkKLXsKLSAgZ2NoYXIgKnN0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKHZhbHVlKTsKLQotICBuX3ByaW50ICgiJXMgICUxNXM6ICVzXG4iLCAoZ2NoYXIgKikgcGZ4LCBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGQpLCBzdHIpOwotICBnX2ZyZWUgKHN0cik7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfY2FwcyAoY29uc3QgR3N0Q2FwcyAqIGNhcHMsIGNvbnN0IGdjaGFyICogcGZ4KQotewotICBndWludCBpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGNhcHMgIT0gTlVMTCk7Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykpIHsKLSAgICBuX3ByaW50ICgiJXNBTllcbiIsIHBmeCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGlmIChnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICBuX3ByaW50ICgiJXNFTVBUWVxuIiwgcGZ4KTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotICAgIEdzdENhcHNGZWF0dXJlcyAqZmVhdHVyZXMgPSBnc3RfY2Fwc19nZXRfZmVhdHVyZXMgKGNhcHMsIGkpOwotCi0gICAgaWYgKGZlYXR1cmVzICYmIChnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGZlYXR1cmVzKSB8fAotICAgICAgICAgICAgIWdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChmZWF0dXJlcywKLSAgICAgICAgICAgICAgICBHU1RfQ0FQU19GRUFUVVJFU19NRU1PUllfU1lTVEVNX01FTU9SWSkpKSB7Ci0gICAgICBnY2hhciAqZmVhdHVyZXNfc3RyaW5nID0gZ3N0X2NhcHNfZmVhdHVyZXNfdG9fc3RyaW5nIChmZWF0dXJlcyk7Ci0KLSAgICAgIG5fcHJpbnQgKCIlcyVzKCVzKVxuIiwgcGZ4LCBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpLAotICAgICAgICAgIGZlYXR1cmVzX3N0cmluZyk7Ci0gICAgICBnX2ZyZWUgKGZlYXR1cmVzX3N0cmluZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG5fcHJpbnQgKCIlcyVzXG4iLCBwZngsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSkpOwotICAgIH0KLSAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKHN0cnVjdHVyZSwgcHJpbnRfZmllbGQsIChncG9pbnRlcikgcGZ4KTsKLSAgfQotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1nZXRfcmFua19uYW1lIChjaGFyICpzLCBnaW50IHJhbmspCi17Ci0gIHN0YXRpYyBjb25zdCBpbnQgcmFua3NbNF0gPSB7Ci0gICAgR1NUX1JBTktfTk9ORSwgR1NUX1JBTktfTUFSR0lOQUwsIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1JBTktfUFJJTUFSWQotICB9OwotICBzdGF0aWMgY29uc3QgY2hhciAqcmFua19uYW1lc1s0XSA9IHsgIm5vbmUiLCAibWFyZ2luYWwiLCAic2Vjb25kYXJ5IiwKLSAgICAicHJpbWFyeSIKLSAgfTsKLSAgaW50IGk7Ci0gIGludCBiZXN0X2k7Ci0KLSAgYmVzdF9pID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotICAgIGlmIChyYW5rID09IHJhbmtzW2ldKQotICAgICAgcmV0dXJuIHJhbmtfbmFtZXNbaV07Ci0gICAgaWYgKGFicyAocmFuayAtIHJhbmtzW2ldKSA8IGFicyAocmFuayAtIHJhbmtzW2Jlc3RfaV0pKSB7Ci0gICAgICBiZXN0X2kgPSBpOwotICAgIH0KLSAgfQotCi0gIHNwcmludGYgKHMsICIlcyAlYyAlZCIsIHJhbmtfbmFtZXNbYmVzdF9pXSwKLSAgICAgIChyYW5rIC0gcmFua3NbYmVzdF9pXSA+IDApID8gJysnIDogJy0nLCBhYnMgKHJhbmtzW2Jlc3RfaV0gLSByYW5rKSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9mYWN0b3J5X2RldGFpbHNfaW5mbyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBnY2hhciAqKmtleXMsICoqazsKLSAgR3N0UmFuayByYW5rOwotICBjaGFyIHNbMjBdOwotCi0gIHJhbmsgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSkpOwotICBuX3ByaW50ICgiRmFjdG9yeSBEZXRhaWxzOlxuIik7Ci0gIG5fcHJpbnQgKCIgICUtMjVzJXMgKCVkKVxuIiwgIlJhbmsiLCBnZXRfcmFua19uYW1lIChzLCByYW5rKSwgcmFuayk7Ci0KLSAga2V5cyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhX2tleXMgKGZhY3RvcnkpOwotICBpZiAoa2V5cyAhPSBOVUxMKSB7Ci0gICAgZm9yIChrID0ga2V5czsgKmsgIT0gTlVMTDsgKytrKSB7Ci0gICAgICBjb25zdCBnY2hhciAqdmFsOwotICAgICAgZ2NoYXIgKmtleSA9ICprOwotCi0gICAgICB2YWwgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwga2V5KTsKLSAgICAgIGtleVswXSA9IGdfYXNjaWlfdG91cHBlciAoa2V5WzBdKTsKLSAgICAgIG5fcHJpbnQgKCIgICUtMjVzJXNcbiIsIGtleSwgdmFsKTsKLSAgICB9Ci0gICAgZ19zdHJmcmVldiAoa2V5cyk7Ci0gIH0KLSAgbl9wcmludCAoIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9oaWVyYXJjaHkgKEdUeXBlIHR5cGUsIGdpbnQgbGV2ZWwsIGdpbnQgKiBtYXhsZXZlbCkKLXsKLSAgR1R5cGUgcGFyZW50OwotICBnaW50IGk7Ci0KLSAgcGFyZW50ID0gZ190eXBlX3BhcmVudCAodHlwZSk7Ci0KLSAgKm1heGxldmVsID0gKm1heGxldmVsICsgMTsKLSAgbGV2ZWwrKzsKLQotICBpZiAocGFyZW50KQotICAgIHByaW50X2hpZXJhcmNoeSAocGFyZW50LCBsZXZlbCwgbWF4bGV2ZWwpOwotCi0gIGlmIChfbmFtZSkKLSAgICBnX3ByaW50ICgiJXMiLCBfbmFtZSk7Ci0KLSAgZm9yIChpID0gMTsgaSA8ICptYXhsZXZlbCAtIGxldmVsOyBpKyspCi0gICAgZ19wcmludCAoIiAgICAgICIpOwotICBpZiAoKm1heGxldmVsIC0gbGV2ZWwpCi0gICAgZ19wcmludCAoIiArLS0tLSIpOwotCi0gIGdfcHJpbnQgKCIlc1xuIiwgZ190eXBlX25hbWUgKHR5cGUpKTsKLQotICBpZiAobGV2ZWwgPT0gMSkKLSAgICBuX3ByaW50ICgiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X2ludGVyZmFjZXMgKEdUeXBlIHR5cGUpCi17Ci0gIGd1aW50IG5faWZhY2VzOwotICBHVHlwZSAqaWZhY2UsICppZmFjZXMgPSBnX3R5cGVfaW50ZXJmYWNlcyAodHlwZSwgJm5faWZhY2VzKTsKLQotICBpZiAoaWZhY2VzKSB7Ci0gICAgaWYgKG5faWZhY2VzKSB7Ci0gICAgICBpZiAoX25hbWUpCi0gICAgICAgIGdfcHJpbnQgKCIlcyIsIF9uYW1lKTsKLSAgICAgIGdfcHJpbnQgKF8oIkltcGxlbWVudGVkIEludGVyZmFjZXM6XG4iKSk7Ci0gICAgICBpZmFjZSA9IGlmYWNlczsKLSAgICAgIHdoaWxlICgqaWZhY2UpIHsKLSAgICAgICAgaWYgKF9uYW1lKQotICAgICAgICAgIGdfcHJpbnQgKCIlcyIsIF9uYW1lKTsKLSAgICAgICAgZ19wcmludCAoIiAgJXNcbiIsIGdfdHlwZV9uYW1lICgqaWZhY2UpKTsKLSAgICAgICAgaWZhY2UrKzsKLSAgICAgIH0KLSAgICAgIGlmIChfbmFtZSkKLSAgICAgICAgZ19wcmludCAoIiVzIiwgX25hbWUpOwotICAgICAgZ19wcmludCAoIlxuIik7Ci0gICAgfQotICAgIGdfZnJlZSAoaWZhY2VzKTsKLSAgfQotfQotCi1zdGF0aWMgZ2NoYXIgKgotZmxhZ3NfdG9fc3RyaW5nIChHRmxhZ3NWYWx1ZSAqIHZhbHMsIGd1aW50IGZsYWdzKQotewotICBHU3RyaW5nICpzID0gTlVMTDsKLSAgZ3VpbnQgZmxhZ3NfbGVmdCwgaTsKLQotICAvKiBmaXJzdCBsb29rIGZvciBhbiBleGFjdCBtYXRjaCBhbmQgY291bnQgdGhlIG51bWJlciBvZiB2YWx1ZXMgKi8KLSAgZm9yIChpID0gMDsgdmFsc1tpXS52YWx1ZV9uYW1lICE9IE5VTEw7ICsraSkgewotICAgIGlmICh2YWxzW2ldLnZhbHVlID09IGZsYWdzKQotICAgICAgcmV0dXJuIGdfc3RyZHVwICh2YWxzW2ldLnZhbHVlX25pY2spOwotICB9Ci0KLSAgcyA9IGdfc3RyaW5nX25ldyAoTlVMTCk7Ci0KLSAgLyogd2UgYXNzdW1lIHRoZSB2YWx1ZXMgYXJlIHNvcnRlZCBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IHZhbHVlICovCi0gIGZsYWdzX2xlZnQgPSBmbGFnczsKLSAgd2hpbGUgKGkgPiAwKSB7Ci0gICAgLS1pOwotICAgIGlmICh2YWxzW2ldLnZhbHVlICE9IDAgJiYgKGZsYWdzX2xlZnQgJiB2YWxzW2ldLnZhbHVlKSA9PSB2YWxzW2ldLnZhbHVlKSB7Ci0gICAgICBpZiAocy0+bGVuID4gMCkKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MgKHMsICcrJyk7Ci0gICAgICBnX3N0cmluZ19hcHBlbmQgKHMsIHZhbHNbaV0udmFsdWVfbmljayk7Ci0gICAgICBmbGFnc19sZWZ0IC09IHZhbHNbaV0udmFsdWU7Ci0gICAgICBpZiAoZmxhZ3NfbGVmdCA9PSAwKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAocy0+bGVuID09IDApCi0gICAgZ19zdHJpbmdfYXNzaWduIChzLCAiKG5vbmUpIik7Ci0KLSAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUgKHMsIEZBTFNFKTsKLX0KLQotI2RlZmluZSBLTk9XTl9QQVJBTV9GTEFHUyBcCi0gIChHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBcCi0gIEdfUEFSQU1fTEFYX1ZBTElEQVRJT04gfCAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IFwKLSAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fV1JJVEFCTEUgfCBHX1BBUkFNX0RFUFJFQ0FURUQgfCBcCi0gIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwgXAotICBHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQgfCBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSkKLQotc3RhdGljIHZvaWQKLXByaW50X2VsZW1lbnRfcHJvcGVydGllc19pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR1BhcmFtU3BlYyAqKnByb3BlcnR5X3NwZWNzOwotICBndWludCBudW1fcHJvcGVydGllcywgaTsKLSAgZ2Jvb2xlYW4gcmVhZGFibGU7Ci0gIGdib29sZWFuIGZpcnN0X2ZsYWc7Ci0KLSAgcHJvcGVydHlfc3BlY3MgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMKLSAgICAgIChHX09CSkVDVF9HRVRfQ0xBU1MgKGVsZW1lbnQpLCAmbnVtX3Byb3BlcnRpZXMpOwotICBuX3ByaW50ICgiXG4iKTsKLSAgbl9wcmludCAoIkVsZW1lbnQgUHJvcGVydGllczpcbiIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fcHJvcGVydGllczsgaSsrKSB7Ci0gICAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OwotICAgIEdQYXJhbVNwZWMgKnBhcmFtID0gcHJvcGVydHlfc3BlY3NbaV07Ci0KLSAgICByZWFkYWJsZSA9IEZBTFNFOwotCi0gICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIHBhcmFtLT52YWx1ZV90eXBlKTsKLQotICAgIG5fcHJpbnQgKCIgICUtMjBzOiAlc1xuIiwgZ19wYXJhbV9zcGVjX2dldF9uYW1lIChwYXJhbSksCi0gICAgICAgIGdfcGFyYW1fc3BlY19nZXRfYmx1cmIgKHBhcmFtKSk7Ci0KLSAgICBmaXJzdF9mbGFnID0gVFJVRTsKLSAgICBuX3ByaW50ICgiJS0yMy4yM3MgZmxhZ3M6ICIsICIiKTsKLSAgICBpZiAocGFyYW0tPmZsYWdzICYgR19QQVJBTV9SRUFEQUJMRSkgewotICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAoZWxlbWVudCksIHBhcmFtLT5uYW1lLCAmdmFsdWUpOwotICAgICAgcmVhZGFibGUgPSBUUlVFOwotICAgICAgZ19wcmludCAoIiVzJXMiLCAoZmlyc3RfZmxhZykgPyAiIiA6ICIsICIsIF8oInJlYWRhYmxlIikpOwotICAgICAgZmlyc3RfZmxhZyA9IEZBTFNFOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBpZiB3ZSBjYW4ndCByZWFkIHRoZSBwcm9wZXJ0eSB2YWx1ZSwgYXNzdW1lIGl0J3Mgc2V0IHRvIHRoZSBkZWZhdWx0Ci0gICAgICAgKiAod2hpY2ggbWlnaHQgbm90IGJlIGVudGlyZWx5IHRydWUgZm9yIHN1Yi1jbGFzc2VzLCBidXQgdGhhdCdzIGFuCi0gICAgICAgKiB1bmxpa2VseSBjb3JuZXItY2FzZSBhbnl3YXkpICovCi0gICAgICBnX3BhcmFtX3ZhbHVlX3NldF9kZWZhdWx0IChwYXJhbSwgJnZhbHVlKTsKLSAgICB9Ci0gICAgaWYgKHBhcmFtLT5mbGFncyAmIEdfUEFSQU1fV1JJVEFCTEUpIHsKLSAgICAgIGdfcHJpbnQgKCIlcyVzIiwgKGZpcnN0X2ZsYWcpID8gIiIgOiAiLCAiLCBfKCJ3cml0YWJsZSIpKTsKLSAgICAgIGZpcnN0X2ZsYWcgPSBGQUxTRTsKLSAgICB9Ci0gICAgaWYgKHBhcmFtLT5mbGFncyAmIEdfUEFSQU1fREVQUkVDQVRFRCkgewotICAgICAgZ19wcmludCAoIiVzJXMiLCAoZmlyc3RfZmxhZykgPyAiIiA6ICIsICIsIF8oImRlcHJlY2F0ZWQiKSk7Ci0gICAgICBmaXJzdF9mbGFnID0gRkFMU0U7Ci0gICAgfQotICAgIGlmIChwYXJhbS0+ZmxhZ3MgJiBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSB7Ci0gICAgICBnX3ByaW50ICgiLCAlcyIsIF8oImNvbnRyb2xsYWJsZSIpKTsKLSAgICAgIGZpcnN0X2ZsYWcgPSBGQUxTRTsKLSAgICB9Ci0gICAgaWYgKHBhcmFtLT5mbGFncyAmIEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcpIHsKLSAgICAgIGdfcHJpbnQgKCIsICVzIiwgXygiY2hhbmdlYWJsZSBpbiBOVUxMLCBSRUFEWSwgUEFVU0VEIG9yIFBMQVlJTkcgc3RhdGUiKSk7Ci0gICAgfSBlbHNlIGlmIChwYXJhbS0+ZmxhZ3MgJiBHU1RfUEFSQU1fTVVUQUJMRV9QQVVTRUQpIHsKLSAgICAgIGdfcHJpbnQgKCIsICVzIiwgXygiY2hhbmdlYWJsZSBvbmx5IGluIE5VTEwsIFJFQURZIG9yIFBBVVNFRCBzdGF0ZSIpKTsKLSAgICB9IGVsc2UgaWYgKHBhcmFtLT5mbGFncyAmIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZKSB7Ci0gICAgICBnX3ByaW50ICgiLCAlcyIsIF8oImNoYW5nZWFibGUgb25seSBpbiBOVUxMIG9yIFJFQURZIHN0YXRlIikpOwotICAgIH0KLSAgICBpZiAocGFyYW0tPmZsYWdzICYgfktOT1dOX1BBUkFNX0ZMQUdTKSB7Ci0gICAgICBnX3ByaW50ICgiJXMweCUweCIsIChmaXJzdF9mbGFnKSA/ICIiIDogIiwgIiwKLSAgICAgICAgICBwYXJhbS0+ZmxhZ3MgJiB+S05PV05fUEFSQU1fRkxBR1MpOwotICAgIH0KLSAgICBuX3ByaW50ICgiXG4iKTsKLQotICAgIHN3aXRjaCAoR19WQUxVRV9UWVBFICgmdmFsdWUpKSB7Ci0gICAgICBjYXNlIEdfVFlQRV9TVFJJTkc6Ci0gICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZ192YWwgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKCZ2YWx1ZSk7Ci0KLSAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIFN0cmluZy4gIiwgIiIpOwotCi0gICAgICAgIGlmIChzdHJpbmdfdmFsID09IE5VTEwpCi0gICAgICAgICAgZ19wcmludCAoIkRlZmF1bHQ6IG51bGwiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGdfcHJpbnQgKCJEZWZhdWx0OiBcIiVzXCIiLCBzdHJpbmdfdmFsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdfVFlQRV9CT09MRUFOOgotICAgICAgewotICAgICAgICBnYm9vbGVhbiBib29sX3ZhbCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKCZ2YWx1ZSk7Ci0KLSAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIEJvb2xlYW4uICIsICIiKTsKLQotICAgICAgICBnX3ByaW50ICgiRGVmYXVsdDogJXMiLCBib29sX3ZhbCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR19UWVBFX1VMT05HOgotICAgICAgewotICAgICAgICBHUGFyYW1TcGVjVUxvbmcgKnB1bG9uZyA9IEdfUEFSQU1fU1BFQ19VTE9ORyAocGFyYW0pOwotCi0gICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBVbnNpZ25lZCBMb25nLiAiLCAiIik7Ci0gICAgICAgIGdfcHJpbnQgKCJSYW5nZTogJWx1IC0gJWx1IERlZmF1bHQ6ICVsdSAiLAotICAgICAgICAgICAgcHVsb25nLT5taW5pbXVtLCBwdWxvbmctPm1heGltdW0sIGdfdmFsdWVfZ2V0X3Vsb25nICgmdmFsdWUpKTsKLQotICAgICAgICBHU1RfRVJST1IgKCIlczogcHJvcGVydHkgJyVzJyBvZiB0eXBlIHVsb25nOiBjb25zaWRlciBjaGFuZ2luZyB0byAiCi0gICAgICAgICAgICAidWludC91aW50NjQiLCBHU1RfT0JKRUNUX05BTUUgKGVsZW1lbnQpLAotICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2dldF9uYW1lIChwYXJhbSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR19UWVBFX0xPTkc6Ci0gICAgICB7Ci0gICAgICAgIEdQYXJhbVNwZWNMb25nICpwbG9uZyA9IEdfUEFSQU1fU1BFQ19MT05HIChwYXJhbSk7Ci0KLSAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIExvbmcuICIsICIiKTsKLSAgICAgICAgZ19wcmludCAoIlJhbmdlOiAlbGQgLSAlbGQgRGVmYXVsdDogJWxkICIsCi0gICAgICAgICAgICBwbG9uZy0+bWluaW11bSwgcGxvbmctPm1heGltdW0sIGdfdmFsdWVfZ2V0X2xvbmcgKCZ2YWx1ZSkpOwotCi0gICAgICAgIEdTVF9FUlJPUiAoIiVzOiBwcm9wZXJ0eSAnJXMnIG9mIHR5cGUgbG9uZzogY29uc2lkZXIgY2hhbmdpbmcgdG8gIgotICAgICAgICAgICAgImludC9pbnQ2NCIsIEdTVF9PQkpFQ1RfTkFNRSAoZWxlbWVudCksCi0gICAgICAgICAgICBnX3BhcmFtX3NwZWNfZ2V0X25hbWUgKHBhcmFtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHX1RZUEVfVUlOVDoKLSAgICAgIHsKLSAgICAgICAgR1BhcmFtU3BlY1VJbnQgKnB1aW50ID0gR19QQVJBTV9TUEVDX1VJTlQgKHBhcmFtKTsKLQotICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgVW5zaWduZWQgSW50ZWdlci4gIiwgIiIpOwotICAgICAgICBnX3ByaW50ICgiUmFuZ2U6ICV1IC0gJXUgRGVmYXVsdDogJXUgIiwKLSAgICAgICAgICAgIHB1aW50LT5taW5pbXVtLCBwdWludC0+bWF4aW11bSwgZ192YWx1ZV9nZXRfdWludCAoJnZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHX1RZUEVfSU5UOgotICAgICAgewotICAgICAgICBHUGFyYW1TcGVjSW50ICpwaW50ID0gR19QQVJBTV9TUEVDX0lOVCAocGFyYW0pOwotCi0gICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBJbnRlZ2VyLiAiLCAiIik7Ci0gICAgICAgIGdfcHJpbnQgKCJSYW5nZTogJWQgLSAlZCBEZWZhdWx0OiAlZCAiLAotICAgICAgICAgICAgcGludC0+bWluaW11bSwgcGludC0+bWF4aW11bSwgZ192YWx1ZV9nZXRfaW50ICgmdmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdfVFlQRV9VSU5UNjQ6Ci0gICAgICB7Ci0gICAgICAgIEdQYXJhbVNwZWNVSW50NjQgKnB1aW50NjQgPSBHX1BBUkFNX1NQRUNfVUlOVDY0IChwYXJhbSk7Ci0KLSAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIFVuc2lnbmVkIEludGVnZXI2NC4gIiwgIiIpOwotICAgICAgICBnX3ByaW50ICgiUmFuZ2U6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAtICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAgICIgRGVmYXVsdDogJSIgR19HVUlOVDY0X0ZPUk1BVCAiICIsCi0gICAgICAgICAgICBwdWludDY0LT5taW5pbXVtLCBwdWludDY0LT5tYXhpbXVtLCBnX3ZhbHVlX2dldF91aW50NjQgKCZ2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR19UWVBFX0lOVDY0OgotICAgICAgewotICAgICAgICBHUGFyYW1TcGVjSW50NjQgKnBpbnQ2NCA9IEdfUEFSQU1fU1BFQ19JTlQ2NCAocGFyYW0pOwotCi0gICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBJbnRlZ2VyNjQuICIsICIiKTsKLSAgICAgICAgZ19wcmludCAoIlJhbmdlOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAtICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICAgIiBEZWZhdWx0OiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAiLAotICAgICAgICAgICAgcGludDY0LT5taW5pbXVtLCBwaW50NjQtPm1heGltdW0sIGdfdmFsdWVfZ2V0X2ludDY0ICgmdmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdfVFlQRV9GTE9BVDoKLSAgICAgIHsKLSAgICAgICAgR1BhcmFtU3BlY0Zsb2F0ICpwZmxvYXQgPSBHX1BBUkFNX1NQRUNfRkxPQVQgKHBhcmFtKTsKLQotICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgRmxvYXQuICIsICIiKTsKLSAgICAgICAgZ19wcmludCAoIlJhbmdlOiAlMTUuN2cgLSAlMTUuN2cgRGVmYXVsdDogJTE1LjdnICIsCi0gICAgICAgICAgICBwZmxvYXQtPm1pbmltdW0sIHBmbG9hdC0+bWF4aW11bSwgZ192YWx1ZV9nZXRfZmxvYXQgKCZ2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR19UWVBFX0RPVUJMRToKLSAgICAgIHsKLSAgICAgICAgR1BhcmFtU3BlY0RvdWJsZSAqcGRvdWJsZSA9IEdfUEFSQU1fU1BFQ19ET1VCTEUgKHBhcmFtKTsKLQotICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgRG91YmxlLiAiLCAiIik7Ci0gICAgICAgIGdfcHJpbnQgKCJSYW5nZTogJTE1LjdnIC0gJTE1LjdnIERlZmF1bHQ6ICUxNS43ZyAiLAotICAgICAgICAgICAgcGRvdWJsZS0+bWluaW11bSwgcGRvdWJsZS0+bWF4aW11bSwgZ192YWx1ZV9nZXRfZG91YmxlICgmdmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdfVFlQRV9DSEFSOgotICAgICAgY2FzZSBHX1RZUEVfVUNIQVI6Ci0gICAgICAgIEdTVF9FUlJPUiAoIiVzOiBwcm9wZXJ0eSAnJXMnIG9mIHR5cGUgY2hhcjogY29uc2lkZXIgY2hhbmdpbmcgdG8gIgotICAgICAgICAgICAgImludC9zdHJpbmciLCBHU1RfT0JKRUNUX05BTUUgKGVsZW1lbnQpLAotICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2dldF9uYW1lIChwYXJhbSkpOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChwYXJhbS0+dmFsdWVfdHlwZSA9PSBHU1RfVFlQRV9DQVBTKSB7Ci0gICAgICAgICAgY29uc3QgR3N0Q2FwcyAqY2FwcyA9IGdzdF92YWx1ZV9nZXRfY2FwcyAoJnZhbHVlKTsKLQotICAgICAgICAgIGlmICghY2FwcykKLSAgICAgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBDYXBzIChOVUxMKSIsICIiKTsKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHByaW50X2NhcHMgKGNhcHMsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0VOVU0gKHBhcmFtKSkgewotICAgICAgICAgIEdFbnVtVmFsdWUgKnZhbHVlczsKLSAgICAgICAgICBndWludCBqID0gMDsKLSAgICAgICAgICBnaW50IGVudW1fdmFsdWU7Ci0gICAgICAgICAgY29uc3QgZ2NoYXIgKnZhbHVlX25pY2sgPSAiIjsKLQotICAgICAgICAgIHZhbHVlcyA9IEdfRU5VTV9DTEFTUyAoZ190eXBlX2NsYXNzX3JlZiAocGFyYW0tPnZhbHVlX3R5cGUpKS0+dmFsdWVzOwotICAgICAgICAgIGVudW1fdmFsdWUgPSBnX3ZhbHVlX2dldF9lbnVtICgmdmFsdWUpOwotCi0gICAgICAgICAgd2hpbGUgKHZhbHVlc1tqXS52YWx1ZV9uYW1lKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVzW2pdLnZhbHVlID09IGVudW1fdmFsdWUpCi0gICAgICAgICAgICAgIHZhbHVlX25pY2sgPSB2YWx1ZXNbal0udmFsdWVfbmljazsKLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgRW51bSBcIiVzXCIgRGVmYXVsdDogJWQsIFwiJXNcIiIsICIiLAotICAgICAgICAgICAgICBnX3R5cGVfbmFtZSAoR19WQUxVRV9UWVBFICgmdmFsdWUpKSwgZW51bV92YWx1ZSwgdmFsdWVfbmljayk7Ci0KLSAgICAgICAgICBqID0gMDsKLSAgICAgICAgICB3aGlsZSAodmFsdWVzW2pdLnZhbHVlX25hbWUpIHsKLSAgICAgICAgICAgIGdfcHJpbnQgKCJcbiIpOwotICAgICAgICAgICAgaWYgKF9uYW1lKQotICAgICAgICAgICAgICBnX3ByaW50ICgiJXMiLCBfbmFtZSk7Ci0gICAgICAgICAgICBnX3ByaW50ICgiJS0yMy4yM3MgICAgKCVkKTogJS0xNnMgLSAlcyIsICIiLAotICAgICAgICAgICAgICAgIHZhbHVlc1tqXS52YWx1ZSwgdmFsdWVzW2pdLnZhbHVlX25pY2ssIHZhbHVlc1tqXS52YWx1ZV9uYW1lKTsKLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogZ190eXBlX2NsYXNzX3VucmVmIChlYyk7ICovCi0gICAgICAgIH0gZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0ZMQUdTIChwYXJhbSkpIHsKLSAgICAgICAgICBHUGFyYW1TcGVjRmxhZ3MgKnBmbGFncyA9IEdfUEFSQU1fU1BFQ19GTEFHUyAocGFyYW0pOwotICAgICAgICAgIEdGbGFnc1ZhbHVlICp2YWxzOwotICAgICAgICAgIGdjaGFyICpjdXI7Ci0KLSAgICAgICAgICB2YWxzID0gcGZsYWdzLT5mbGFnc19jbGFzcy0+dmFsdWVzOwotCi0gICAgICAgICAgY3VyID0gZmxhZ3NfdG9fc3RyaW5nICh2YWxzLCBnX3ZhbHVlX2dldF9mbGFncyAoJnZhbHVlKSk7Ci0KLSAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgRmxhZ3MgXCIlc1wiIERlZmF1bHQ6IDB4JTA4eCwgXCIlc1wiIiwgIiIsCi0gICAgICAgICAgICAgIGdfdHlwZV9uYW1lIChHX1ZBTFVFX1RZUEUgKCZ2YWx1ZSkpLAotICAgICAgICAgICAgICBnX3ZhbHVlX2dldF9mbGFncyAoJnZhbHVlKSwgY3VyKTsKLQotICAgICAgICAgIHdoaWxlICh2YWxzWzBdLnZhbHVlX25hbWUpIHsKLSAgICAgICAgICAgIGdfcHJpbnQgKCJcbiIpOwotICAgICAgICAgICAgaWYgKF9uYW1lKQotICAgICAgICAgICAgICBnX3ByaW50ICgiJXMiLCBfbmFtZSk7Ci0gICAgICAgICAgICBnX3ByaW50ICgiJS0yMy4yM3MgICAgKDB4JTA4eCk6ICUtMTZzIC0gJXMiLCAiIiwKLSAgICAgICAgICAgICAgICB2YWxzWzBdLnZhbHVlLCB2YWxzWzBdLnZhbHVlX25pY2ssIHZhbHNbMF0udmFsdWVfbmFtZSk7Ci0gICAgICAgICAgICArK3ZhbHM7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgZ19mcmVlIChjdXIpOwotICAgICAgICB9IGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19PQkpFQ1QgKHBhcmFtKSkgewotICAgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBPYmplY3Qgb2YgdHlwZSBcIiVzXCIiLCAiIiwKLSAgICAgICAgICAgICAgZ190eXBlX25hbWUgKHBhcmFtLT52YWx1ZV90eXBlKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0JPWEVEIChwYXJhbSkpIHsKLSAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgQm94ZWQgcG9pbnRlciBvZiB0eXBlIFwiJXNcIiIsICIiLAotICAgICAgICAgICAgICBnX3R5cGVfbmFtZSAocGFyYW0tPnZhbHVlX3R5cGUpKTsKLSAgICAgICAgICBpZiAocGFyYW0tPnZhbHVlX3R5cGUgPT0gR1NUX1RZUEVfU1RSVUNUVVJFKSB7Ci0gICAgICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSAoJnZhbHVlKTsKLSAgICAgICAgICAgIGlmIChzKQotICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKHMsIHByaW50X2ZpZWxkLAotICAgICAgICAgICAgICAgICAgKGdwb2ludGVyKSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19QT0lOVEVSIChwYXJhbSkpIHsKLSAgICAgICAgICBpZiAocGFyYW0tPnZhbHVlX3R5cGUgIT0gR19UWVBFX1BPSU5URVIpIHsKLSAgICAgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBQb2ludGVyIG9mIHR5cGUgXCIlc1wiLiIsICIiLAotICAgICAgICAgICAgICAgIGdfdHlwZV9uYW1lIChwYXJhbS0+dmFsdWVfdHlwZSkpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgUG9pbnRlci4iLCAiIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLT52YWx1ZV90eXBlID09IEdfVFlQRV9WQUxVRV9BUlJBWSkgewotICAgICAgICAgIEdQYXJhbVNwZWNWYWx1ZUFycmF5ICpwdmFycmF5ID0gR19QQVJBTV9TUEVDX1ZBTFVFX0FSUkFZIChwYXJhbSk7Ci0KLSAgICAgICAgICBpZiAocHZhcnJheS0+ZWxlbWVudF9zcGVjKSB7Ci0gICAgICAgICAgICBuX3ByaW50ICgiJS0yMy4yM3MgQXJyYXkgb2YgR1ZhbHVlcyBvZiB0eXBlIFwiJXNcIiIsICIiLAotICAgICAgICAgICAgICAgIGdfdHlwZV9uYW1lIChwdmFycmF5LT5lbGVtZW50X3NwZWMtPnZhbHVlX3R5cGUpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbl9wcmludCAoIiUtMjMuMjNzIEFycmF5IG9mIEdWYWx1ZXMiLCAiIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKEdTVF9JU19QQVJBTV9TUEVDX0ZSQUNUSU9OIChwYXJhbSkpIHsKLSAgICAgICAgICBHc3RQYXJhbVNwZWNGcmFjdGlvbiAqcGZyYWN0aW9uID0gR1NUX1BBUkFNX1NQRUNfRlJBQ1RJT04gKHBhcmFtKTsKLQotICAgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBGcmFjdGlvbi4gIiwgIiIpOwotCi0gICAgICAgICAgZ19wcmludCAoIlJhbmdlOiAlZC8lZCAtICVkLyVkIERlZmF1bHQ6ICVkLyVkICIsCi0gICAgICAgICAgICAgIHBmcmFjdGlvbi0+bWluX251bSwgcGZyYWN0aW9uLT5taW5fZGVuLAotICAgICAgICAgICAgICBwZnJhY3Rpb24tPm1heF9udW0sIHBmcmFjdGlvbi0+bWF4X2RlbiwKLSAgICAgICAgICAgICAgZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCZ2YWx1ZSksCi0gICAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ2YWx1ZSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG5fcHJpbnQgKCIlLTIzLjIzcyBVbmtub3duIHR5cGUgJWxkIFwiJXNcIiIsICIiLAotICAgICAgICAgICAgICAoZ2xvbmcpIHBhcmFtLT52YWx1ZV90eXBlLCBnX3R5cGVfbmFtZSAocGFyYW0tPnZhbHVlX3R5cGUpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCFyZWFkYWJsZSkKLSAgICAgIGdfcHJpbnQgKCIgV3JpdGUgb25seVxuIik7Ci0gICAgZWxzZQotICAgICAgZ19wcmludCAoIlxuIik7Ci0KLSAgICBnX3ZhbHVlX3Jlc2V0ICgmdmFsdWUpOwotICB9Ci0gIGlmIChudW1fcHJvcGVydGllcyA9PSAwKQotICAgIG5fcHJpbnQgKCIgIG5vbmVcbiIpOwotCi0gIGdfZnJlZSAocHJvcGVydHlfc3BlY3MpOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfcGFkX3RlbXBsYXRlc19pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBjb25zdCBHTGlzdCAqcGFkczsKLSAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnBhZHRlbXBsYXRlOwotCi0gIG5fcHJpbnQgKCJQYWQgVGVtcGxhdGVzOlxuIik7Ci0gIGlmIChnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9udW1fcGFkX3RlbXBsYXRlcyAoZmFjdG9yeSkgPT0gMCkgewotICAgIG5fcHJpbnQgKCIgIG5vbmVcbiIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHBhZHMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoZmFjdG9yeSk7Ci0gIHdoaWxlIChwYWRzKSB7Ci0gICAgcGFkdGVtcGxhdGUgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgKHBhZHMtPmRhdGEpOwotICAgIHBhZHMgPSBnX2xpc3RfbmV4dCAocGFkcyk7Ci0KLSAgICBpZiAocGFkdGVtcGxhdGUtPmRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykKLSAgICAgIG5fcHJpbnQgKCIgIFNSQyB0ZW1wbGF0ZTogJyVzJ1xuIiwgcGFkdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUpOwotICAgIGVsc2UgaWYgKHBhZHRlbXBsYXRlLT5kaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LKQotICAgICAgbl9wcmludCAoIiAgU0lOSyB0ZW1wbGF0ZTogJyVzJ1xuIiwgcGFkdGVtcGxhdGUtPm5hbWVfdGVtcGxhdGUpOwotICAgIGVsc2UKLSAgICAgIG5fcHJpbnQgKCIgIFVOS05PV04hISEgdGVtcGxhdGU6ICclcydcbiIsIHBhZHRlbXBsYXRlLT5uYW1lX3RlbXBsYXRlKTsKLQotICAgIGlmIChwYWR0ZW1wbGF0ZS0+cHJlc2VuY2UgPT0gR1NUX1BBRF9BTFdBWVMpCi0gICAgICBuX3ByaW50ICgiICAgIEF2YWlsYWJpbGl0eTogQWx3YXlzXG4iKTsKLSAgICBlbHNlIGlmIChwYWR0ZW1wbGF0ZS0+cHJlc2VuY2UgPT0gR1NUX1BBRF9TT01FVElNRVMpCi0gICAgICBuX3ByaW50ICgiICAgIEF2YWlsYWJpbGl0eTogU29tZXRpbWVzXG4iKTsKLSAgICBlbHNlIGlmIChwYWR0ZW1wbGF0ZS0+cHJlc2VuY2UgPT0gR1NUX1BBRF9SRVFVRVNUKSB7Ci0gICAgICBuX3ByaW50ICgiICAgIEF2YWlsYWJpbGl0eTogT24gcmVxdWVzdFxuIik7Ci0gICAgfSBlbHNlCi0gICAgICBuX3ByaW50ICgiICAgIEF2YWlsYWJpbGl0eTogVU5LTk9XTiEhIVxuIik7Ci0KLSAgICBpZiAocGFkdGVtcGxhdGUtPnN0YXRpY19jYXBzLnN0cmluZykgewotICAgICAgbl9wcmludCAoIiAgICBDYXBhYmlsaXRpZXM6XG4iKTsKLSAgICAgIHByaW50X2NhcHMgKGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZwYWR0ZW1wbGF0ZS0+c3RhdGljX2NhcHMpLCAiICAgICAgIik7Ci0gICAgfQotCi0gICAgbl9wcmludCAoIlxuIik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXByaW50X2VsZW1lbnRfZmxhZ19pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgZ2Jvb2xlYW4gaGF2ZV9mbGFncyA9IEZBTFNFOwotCi0gIG5fcHJpbnQgKCJcbiIpOwotICBuX3ByaW50ICgiRWxlbWVudCBGbGFnczpcbiIpOwotCi0gIGlmICghaGF2ZV9mbGFncykKLSAgICBuX3ByaW50ICgiICBubyBmbGFncyBzZXRcbiIpOwotCi0gIGlmIChHU1RfSVNfQklOIChlbGVtZW50KSkgewotICAgIG5fcHJpbnQgKCJcbiIpOwotICAgIG5fcHJpbnQgKCJCaW4gRmxhZ3M6XG4iKTsKLSAgICBpZiAoIWhhdmVfZmxhZ3MpCi0gICAgICBuX3ByaW50ICgiICBubyBmbGFncyBzZXRcbiIpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9pbXBsZW1lbnRhdGlvbl9pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoR19PQkpFQ1RfR0VUX0NMQVNTIChlbGVtZW50KSk7Ci0KLSAgbl9wcmludCAoIlxuIik7Ci0gIG5fcHJpbnQgKCJFbGVtZW50IEltcGxlbWVudGF0aW9uOlxuIik7Ci0KLSAgbl9wcmludCAoIiAgSGFzIGNoYW5nZV9zdGF0ZSgpIGZ1bmN0aW9uOiAlc1xuIiwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSX05BTUUgKGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSkpOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfY2xvY2tpbmdfaW5mbyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGdib29sZWFuIHJlcXVpcmVzX2Nsb2NrLCBwcm92aWRlc19jbG9jazsKLQotICByZXF1aXJlc19jbG9jayA9Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0spOwotICBwcm92aWRlc19jbG9jayA9Ci0gICAgICBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChlbGVtZW50LCBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0spOwotCi0gIGlmICghcmVxdWlyZXNfY2xvY2sgJiYgIXByb3ZpZGVzX2Nsb2NrKSB7Ci0gICAgbl9wcmludCAoIlxuIik7Ci0gICAgbl9wcmludCAoIkVsZW1lbnQgaGFzIG5vIGNsb2NraW5nIGNhcGFiaWxpdGllcy5cbiIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIG5fcHJpbnQgKCJcbiIpOwotICBuX3ByaW50ICgiQ2xvY2tpbmcgSW50ZXJhY3Rpb246XG4iKTsKLSAgaWYgKHJlcXVpcmVzX2Nsb2NrKSB7Ci0gICAgbl9wcmludCAoIiAgZWxlbWVudCByZXF1aXJlcyBhIGNsb2NrXG4iKTsKLSAgfQotCi0gIGlmIChwcm92aWRlc19jbG9jaykgewotICAgIEdzdENsb2NrICpjbG9jazsKLQotICAgIGNsb2NrID0gZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChlbGVtZW50KTsKLSAgICBpZiAoY2xvY2spIHsKLSAgICAgIG5fcHJpbnQgKCIgIGVsZW1lbnQgcHJvdmlkZXMgYSBjbG9jazogJXNcbiIsIEdTVF9PQkpFQ1RfTkFNRSAoY2xvY2spKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgICB9IGVsc2UKLSAgICAgIG5fcHJpbnQgKCIgIGVsZW1lbnQgaXMgc3VwcG9zZWQgdG8gcHJvdmlkZSBhIGNsb2NrIGJ1dCByZXR1cm5lZCBOVUxMXG4iKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfdXJpX2hhbmRsZXJfaW5mbyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGlmIChHU1RfSVNfVVJJX0hBTkRMRVIgKGVsZW1lbnQpKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmNvbnN0ICp1cmlfcHJvdG9jb2xzOwotICAgIGNvbnN0IGdjaGFyICp1cmlfdHlwZTsKLQotICAgIGlmIChnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaV90eXBlIChHU1RfVVJJX0hBTkRMRVIgKGVsZW1lbnQpKSA9PSBHU1RfVVJJX1NSQykKLSAgICAgIHVyaV90eXBlID0gInNvdXJjZSI7Ci0gICAgZWxzZSBpZiAoZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZSAoR1NUX1VSSV9IQU5ETEVSIChlbGVtZW50KSkgPT0KLSAgICAgICAgR1NUX1VSSV9TSU5LKQotICAgICAgdXJpX3R5cGUgPSAic2luayI7Ci0gICAgZWxzZQotICAgICAgdXJpX3R5cGUgPSAidW5rbm93biI7Ci0KLSAgICB1cmlfcHJvdG9jb2xzID0gZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMgKEdTVF9VUklfSEFORExFUiAoZWxlbWVudCkpOwotCi0gICAgbl9wcmludCAoIlxuIik7Ci0gICAgbl9wcmludCAoIlVSSSBoYW5kbGluZyBjYXBhYmlsaXRpZXM6XG4iKTsKLSAgICBuX3ByaW50ICgiICBFbGVtZW50IGNhbiBhY3QgYXMgJXMuXG4iLCB1cmlfdHlwZSk7Ci0KLSAgICBpZiAodXJpX3Byb3RvY29scyAmJiAqdXJpX3Byb3RvY29scykgewotICAgICAgbl9wcmludCAoIiAgU3VwcG9ydGVkIFVSSSBwcm90b2NvbHM6XG4iKTsKLSAgICAgIGZvciAoOyAqdXJpX3Byb3RvY29scyAhPSBOVUxMOyB1cmlfcHJvdG9jb2xzKyspCi0gICAgICAgIG5fcHJpbnQgKCIgICAgJXNcbiIsICp1cmlfcHJvdG9jb2xzKTsKLSAgICB9IGVsc2UgewotICAgICAgbl9wcmludCAoIiAgTm8gc3VwcG9ydGVkIFVSSSBwcm90b2NvbHNcbiIpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBuX3ByaW50ICgiRWxlbWVudCBoYXMgbm8gVVJJIGhhbmRsaW5nIGNhcGFiaWxpdGllcy5cbiIpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9wYWRfaW5mbyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGNvbnN0IEdMaXN0ICpwYWRzOwotICBHc3RQYWQgKnBhZDsKLQotICBuX3ByaW50ICgiXG4iKTsKLSAgbl9wcmludCAoIlBhZHM6XG4iKTsKLQotICBpZiAoIWVsZW1lbnQtPm51bXBhZHMpIHsKLSAgICBuX3ByaW50ICgiICBub25lXG4iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBwYWRzID0gZWxlbWVudC0+cGFkczsKLSAgd2hpbGUgKHBhZHMpIHsKLSAgICBnY2hhciAqbmFtZTsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgcGFkID0gR1NUX1BBRCAocGFkcy0+ZGF0YSk7Ci0gICAgcGFkcyA9IGdfbGlzdF9uZXh0IChwYWRzKTsKLQotICAgIG5hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChwYWQpOwotICAgIGlmIChnc3RfcGFkX2dldF9kaXJlY3Rpb24gKHBhZCkgPT0gR1NUX1BBRF9TUkMpCi0gICAgICBuX3ByaW50ICgiICBTUkM6ICclcydcbiIsIG5hbWUpOwotICAgIGVsc2UgaWYgKGdzdF9wYWRfZ2V0X2RpcmVjdGlvbiAocGFkKSA9PSBHU1RfUEFEX1NJTkspCi0gICAgICBuX3ByaW50ICgiICBTSU5LOiAnJXMnXG4iLCBuYW1lKTsKLSAgICBlbHNlCi0gICAgICBuX3ByaW50ICgiICBVTktOT1dOISEhOiAnJXMnXG4iLCBuYW1lKTsKLQotICAgIGdfZnJlZSAobmFtZSk7Ci0KLSAgICBpZiAocGFkLT5wYWR0ZW1wbGF0ZSkKLSAgICAgIG5fcHJpbnQgKCIgICAgUGFkIFRlbXBsYXRlOiAnJXMnXG4iLCBwYWQtPnBhZHRlbXBsYXRlLT5uYW1lX3RlbXBsYXRlKTsKLQotICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7Ci0gICAgaWYgKGNhcHMpIHsKLSAgICAgIG5fcHJpbnQgKCIgICAgQ2FwYWJpbGl0aWVzOlxuIik7Ci0gICAgICBwcmludF9jYXBzIChjYXBzLCAiICAgICAgIik7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaGFzX3NvbWV0aW1lc190ZW1wbGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotICBHTGlzdCAqbDsKLQotICBmb3IgKGwgPSBrbGFzcy0+cGFkdGVtcGxhdGVzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgaWYgKEdTVF9QQURfVEVNUExBVEUgKGwtPmRhdGEpLT5wcmVzZW5jZSA9PSBHU1RfUEFEX1NPTUVUSU1FUykKLSAgICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWd0eXBlX25lZWRzX3B0cl9tYXJrZXIgKEdUeXBlIHR5cGUpCi17Ci0gIGlmICh0eXBlID09IEdfVFlQRV9QT0lOVEVSKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoR19UWVBFX0ZVTkRBTUVOVEFMICh0eXBlKSA9PSBHX1RZUEVfUE9JTlRFUiB8fCBHX1RZUEVfSVNfQk9YRUQgKHR5cGUpCi0gICAgICB8fCBHX1RZUEVfSVNfT0JKRUNUICh0eXBlKSkKLSAgICByZXR1cm4gVFJVRTsKLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9zaWduYWxfaW5mbyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIC8qIFNpZ25hbHMvQWN0aW9ucyBCbG9jayAqLwotICBndWludCAqc2lnbmFsczsKLSAgZ3VpbnQgbnNpZ25hbHM7Ci0gIGdpbnQgaSA9IDAsIGosIGs7Ci0gIEdTaWduYWxRdWVyeSAqcXVlcnkgPSBOVUxMOwotICBHVHlwZSB0eXBlOwotICBHU0xpc3QgKmZvdW5kX3NpZ25hbHMsICpsOwotCi0gIGZvciAoayA9IDA7IGsgPCAyOyBrKyspIHsKLSAgICBmb3VuZF9zaWduYWxzID0gTlVMTDsKLQotICAgIC8qIEZvciBlbGVtZW50cyB0aGF0IGhhdmUgc29tZXRpbWVzIHBhZHMsIGFsc28gbGlzdCBhIGZldyB1c2VmdWwgR3N0RWxlbWVudAotICAgICAqIHNpZ25hbHMuIFB1dCB0aGVzZSBmaXJzdCwgc28gZWxlbWVudC1zcGVjaWZpYyBvbmVzIGNvbWUgbGF0ZXIuICovCi0gICAgaWYgKGsgPT0gMCAmJiBoYXNfc29tZXRpbWVzX3RlbXBsYXRlIChlbGVtZW50KSkgewotICAgICAgcXVlcnkgPSBnX25ldzAgKEdTaWduYWxRdWVyeSwgMSk7Ci0gICAgICBnX3NpZ25hbF9xdWVyeSAoZ19zaWduYWxfbG9va3VwICgicGFkLWFkZGVkIiwgR1NUX1RZUEVfRUxFTUVOVCksIHF1ZXJ5KTsKLSAgICAgIGZvdW5kX3NpZ25hbHMgPSBnX3NsaXN0X2FwcGVuZCAoZm91bmRfc2lnbmFscywgcXVlcnkpOwotICAgICAgcXVlcnkgPSBnX25ldzAgKEdTaWduYWxRdWVyeSwgMSk7Ci0gICAgICBnX3NpZ25hbF9xdWVyeSAoZ19zaWduYWxfbG9va3VwICgicGFkLXJlbW92ZWQiLCBHU1RfVFlQRV9FTEVNRU5UKSwgcXVlcnkpOwotICAgICAgZm91bmRfc2lnbmFscyA9IGdfc2xpc3RfYXBwZW5kIChmb3VuZF9zaWduYWxzLCBxdWVyeSk7Ci0gICAgICBxdWVyeSA9IGdfbmV3MCAoR1NpZ25hbFF1ZXJ5LCAxKTsKLSAgICAgIGdfc2lnbmFsX3F1ZXJ5IChnX3NpZ25hbF9sb29rdXAgKCJuby1tb3JlLXBhZHMiLCBHU1RfVFlQRV9FTEVNRU5UKSwKLSAgICAgICAgICBxdWVyeSk7Ci0gICAgICBmb3VuZF9zaWduYWxzID0gZ19zbGlzdF9hcHBlbmQgKGZvdW5kX3NpZ25hbHMsIHF1ZXJ5KTsKLSAgICB9Ci0KLSAgICBmb3IgKHR5cGUgPSBHX09CSkVDVF9UWVBFIChlbGVtZW50KTsgdHlwZTsgdHlwZSA9IGdfdHlwZV9wYXJlbnQgKHR5cGUpKSB7Ci0gICAgICBpZiAodHlwZSA9PSBHU1RfVFlQRV9FTEVNRU5UIHx8IHR5cGUgPT0gR1NUX1RZUEVfT0JKRUNUKQotICAgICAgICBicmVhazsKLQotICAgICAgaWYgKHR5cGUgPT0gR1NUX1RZUEVfQklOICYmIEdfT0JKRUNUX1RZUEUgKGVsZW1lbnQpICE9IEdTVF9UWVBFX0JJTikKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIHNpZ25hbHMgPSBnX3NpZ25hbF9saXN0X2lkcyAodHlwZSwgJm5zaWduYWxzKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2lnbmFsczsgaSsrKSB7Ci0gICAgICAgIHF1ZXJ5ID0gZ19uZXcwIChHU2lnbmFsUXVlcnksIDEpOwotICAgICAgICBnX3NpZ25hbF9xdWVyeSAoc2lnbmFsc1tpXSwgcXVlcnkpOwotCi0gICAgICAgIGlmICgoayA9PSAwICYmICEocXVlcnktPnNpZ25hbF9mbGFncyAmIEdfU0lHTkFMX0FDVElPTikpIHx8Ci0gICAgICAgICAgICAoayA9PSAxICYmIChxdWVyeS0+c2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfQUNUSU9OKSkpCi0gICAgICAgICAgZm91bmRfc2lnbmFscyA9IGdfc2xpc3RfYXBwZW5kIChmb3VuZF9zaWduYWxzLCBxdWVyeSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnX2ZyZWUgKHF1ZXJ5KTsKLSAgICAgIH0KLSAgICAgIGdfZnJlZSAoc2lnbmFscyk7Ci0gICAgICBzaWduYWxzID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoZm91bmRfc2lnbmFscykgewotICAgICAgbl9wcmludCAoIlxuIik7Ci0gICAgICBpZiAoayA9PSAwKQotICAgICAgICBuX3ByaW50ICgiRWxlbWVudCBTaWduYWxzOlxuIik7Ci0gICAgICBlbHNlCi0gICAgICAgIG5fcHJpbnQgKCJFbGVtZW50IEFjdGlvbnM6XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgZm9yIChsID0gZm91bmRfc2lnbmFsczsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICAgIGdjaGFyICppbmRlbnQ7Ci0gICAgICBjb25zdCBnY2hhciAqcG1hcms7Ci0gICAgICBpbnQgaW5kZW50X2xlbjsKLQotICAgICAgcXVlcnkgPSAoR1NpZ25hbFF1ZXJ5ICopIGwtPmRhdGE7Ci0gICAgICBpbmRlbnRfbGVuID0gc3RybGVuIChxdWVyeS0+c2lnbmFsX25hbWUpICsKLSAgICAgICAgICBzdHJsZW4gKGdfdHlwZV9uYW1lIChxdWVyeS0+cmV0dXJuX3R5cGUpKSArIDI0OwotCi0gICAgICBpZiAoZ3R5cGVfbmVlZHNfcHRyX21hcmtlciAocXVlcnktPnJldHVybl90eXBlKSkgewotICAgICAgICBwbWFyayA9ICIqICI7Ci0gICAgICAgIGluZGVudF9sZW4gKz0gMjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBtYXJrID0gIiI7Ci0gICAgICB9Ci0KLSAgICAgIGluZGVudCA9IGdfbmV3MCAoZ2NoYXIsIGluZGVudF9sZW4gKyAxKTsKLSAgICAgIG1lbXNldCAoaW5kZW50LCAnICcsIGluZGVudF9sZW4pOwotCi0gICAgICBuX3ByaW50ICgiICBcIiVzXCIgOiAgJXMgJXN1c2VyX2Z1bmN0aW9uICglcyogb2JqZWN0IiwKLSAgICAgICAgICBxdWVyeS0+c2lnbmFsX25hbWUsIGdfdHlwZV9uYW1lIChxdWVyeS0+cmV0dXJuX3R5cGUpLCBwbWFyaywKLSAgICAgICAgICBnX3R5cGVfbmFtZSAodHlwZSkpOwotCi0gICAgICBmb3IgKGogPSAwOyBqIDwgcXVlcnktPm5fcGFyYW1zOyBqKyspIHsKLSAgICAgICAgY29uc3QgZ2NoYXIgKnR5cGVfbmFtZSwgKmFzdGVyaXNrOwotCi0gICAgICAgIHR5cGVfbmFtZSA9IGdfdHlwZV9uYW1lIChxdWVyeS0+cGFyYW1fdHlwZXNbal0pOwotICAgICAgICBhc3RlcmlzayA9IGd0eXBlX25lZWRzX3B0cl9tYXJrZXIgKHF1ZXJ5LT5wYXJhbV90eXBlc1tqXSkgPyAiKiIgOiAiIjsKLQotICAgICAgICBnX3ByaW50ICgiLFxuIik7Ci0gICAgICAgIG5fcHJpbnQgKCIlcyVzJXMgYXJnJWQiLCBpbmRlbnQsIHR5cGVfbmFtZSwgYXN0ZXJpc2ssIGopOwotICAgICAgfQotCi0gICAgICBpZiAoayA9PSAwKSB7Ci0gICAgICAgIGdfcHJpbnQgKCIsXG4iKTsKLSAgICAgICAgbl9wcmludCAoIiVzZ3BvaW50ZXIgdXNlcl9kYXRhKTtcbiIsIGluZGVudCk7Ci0gICAgICB9IGVsc2UKLSAgICAgICAgZ19wcmludCAoIik7XG4iKTsKLQotICAgICAgZ19mcmVlIChpbmRlbnQpOwotICAgIH0KLQotICAgIGlmIChmb3VuZF9zaWduYWxzKSB7Ci0gICAgICBnX3NsaXN0X2ZvcmVhY2ggKGZvdW5kX3NpZ25hbHMsIChHRnVuYykgZ19mcmVlLCBOVUxMKTsKLSAgICAgIGdfc2xpc3RfZnJlZSAoZm91bmRfc2lnbmFscyk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9jaGlsZHJlbl9pbmZvIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR0xpc3QgKmNoaWxkcmVuOwotCi0gIGlmICghR1NUX0lTX0JJTiAoZWxlbWVudCkpCi0gICAgcmV0dXJuOwotCi0gIGNoaWxkcmVuID0gKEdMaXN0ICopIEdTVF9CSU4gKGVsZW1lbnQpLT5jaGlsZHJlbjsKLSAgaWYgKGNoaWxkcmVuKSB7Ci0gICAgbl9wcmludCAoIlxuIik7Ci0gICAgbl9wcmludCAoIkNoaWxkcmVuOlxuIik7Ci0gIH0KLQotICB3aGlsZSAoY2hpbGRyZW4pIHsKLSAgICBuX3ByaW50ICgiICAlc1xuIiwgR1NUX0VMRU1FTlRfTkFNRSAoR1NUX0VMRU1FTlQgKGNoaWxkcmVuLT5kYXRhKSkpOwotICAgIGNoaWxkcmVuID0gZ19saXN0X25leHQgKGNoaWxkcmVuKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfcHJlc2V0X2xpc3QgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnY2hhciAqKnByZXNldHMsICoqcHJlc2V0OwotCi0gIGlmICghR1NUX0lTX1BSRVNFVCAoZWxlbWVudCkpCi0gICAgcmV0dXJuOwotCi0gIHByZXNldHMgPSBnc3RfcHJlc2V0X2dldF9wcmVzZXRfbmFtZXMgKEdTVF9QUkVTRVQgKGVsZW1lbnQpKTsKLSAgaWYgKHByZXNldHMgJiYgKnByZXNldHMpIHsKLSAgICBuX3ByaW50ICgiXG4iKTsKLSAgICBuX3ByaW50ICgiUHJlc2V0czpcbiIpOwotICAgIGZvciAocHJlc2V0ID0gcHJlc2V0czsgKnByZXNldDsgcHJlc2V0KyspIHsKLSAgICAgIG5fcHJpbnQgKCIgIFwiJXNcIlxuIiwgKnByZXNldCk7Ci0gICAgfQotICAgIGdfc3RyZnJlZXYgKHByZXNldHMpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9ibGFja2xpc3QgKHZvaWQpCi17Ci0gIEdMaXN0ICpwbHVnaW5zLCAqY3VyOwotICBnaW50IGNvdW50ID0gMDsKLQotICBnX3ByaW50ICgiJXNcbiIsIF8oIkJsYWNrbGlzdGVkIGZpbGVzOiIpKTsKLQotICBwbHVnaW5zID0gZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSk7Ci0gIGZvciAoY3VyID0gcGx1Z2luczsgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW4gPSAoR3N0UGx1Z2luICopIChjdXItPmRhdGEpOwotICAgIGlmIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChwbHVnaW4sIEdTVF9QTFVHSU5fRkxBR19CTEFDS0xJU1RFRCkpIHsKLSAgICAgIGdfcHJpbnQgKCIgICVzXG4iLCBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKLSAgICAgIGNvdW50Kys7Ci0gICAgfQotICB9Ci0KLSAgZ19wcmludCAoIlxuIik7Ci0gIGdfcHJpbnQgKF8oIlRvdGFsIGNvdW50OiAiKSk7Ci0gIGdfcHJpbnQgKG5nZXR0ZXh0ICgiJWQgYmxhY2tsaXN0ZWQgZmlsZSIsICIlZCBibGFja2xpc3RlZCBmaWxlcyIsIGNvdW50KSwKLSAgICAgIGNvdW50KTsKLSAgZ19wcmludCAoIlxuIik7Ci0gIGdzdF9wbHVnaW5fbGlzdF9mcmVlIChwbHVnaW5zKTsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X2VsZW1lbnRfbGlzdCAoZ2Jvb2xlYW4gcHJpbnRfYWxsKQotewotICBpbnQgcGx1Z2luY291bnQgPSAwLCBmZWF0dXJlY291bnQgPSAwLCBibGFja2xpc3Rjb3VudCA9IDA7Ci0gIEdMaXN0ICpwbHVnaW5zLCAqb3JpZ19wbHVnaW5zOwotCi0gIG9yaWdfcGx1Z2lucyA9IHBsdWdpbnMgPSBnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0IChnc3RfcmVnaXN0cnlfZ2V0ICgpKTsKLSAgd2hpbGUgKHBsdWdpbnMpIHsKLSAgICBHTGlzdCAqZmVhdHVyZXMsICpvcmlnX2ZlYXR1cmVzOwotICAgIEdzdFBsdWdpbiAqcGx1Z2luOwotCi0gICAgcGx1Z2luID0gKEdzdFBsdWdpbiAqKSAocGx1Z2lucy0+ZGF0YSk7Ci0gICAgcGx1Z2lucyA9IGdfbGlzdF9uZXh0IChwbHVnaW5zKTsKLSAgICBwbHVnaW5jb3VudCsrOwotCi0gICAgaWYgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKHBsdWdpbiwgR1NUX1BMVUdJTl9GTEFHX0JMQUNLTElTVEVEKSkgewotICAgICAgYmxhY2tsaXN0Y291bnQrKzsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIG9yaWdfZmVhdHVyZXMgPSBmZWF0dXJlcyA9Ci0gICAgICAgIGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0X2J5X3BsdWdpbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgICAgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0gICAgd2hpbGUgKGZlYXR1cmVzKSB7Ci0gICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoZmVhdHVyZXMtPmRhdGEgPT0gTlVMTCkpCi0gICAgICAgIGdvdG8gbmV4dDsKLSAgICAgIGZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKGZlYXR1cmVzLT5kYXRhKTsKLSAgICAgIGZlYXR1cmVjb3VudCsrOwotCi0gICAgICBpZiAoR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpIHsKLSAgICAgICAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7Ci0KLSAgICAgICAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpOwotICAgICAgICBpZiAocHJpbnRfYWxsKQotICAgICAgICAgIHByaW50X2VsZW1lbnRfaW5mbyAoZmFjdG9yeSwgVFJVRSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnX3ByaW50ICgiJXM6ICAlczogJXNcbiIsIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbiksCi0gICAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmFjdG9yeSksCi0gICAgICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhIChmYWN0b3J5LAotICAgICAgICAgICAgICAgICAgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpKTsKLSAgICAgIH0gZWxzZSBpZiAoR1NUX0lTX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgICAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3Rvcnk7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpjb25zdCAqZXh0ZW5zaW9uczsKLQotICAgICAgICBmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZIChmZWF0dXJlKTsKLSAgICAgICAgaWYgKCFwcmludF9hbGwpCi0gICAgICAgICAgZ19wcmludCAoIiVzOiAlczogIiwgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSwKLSAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSk7Ci0KLSAgICAgICAgZXh0ZW5zaW9ucyA9IGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9ucyAoZmFjdG9yeSk7Ci0gICAgICAgIGlmIChleHRlbnNpb25zICE9IE5VTEwpIHsKLSAgICAgICAgICBndWludCBpID0gMDsKLQotICAgICAgICAgIHdoaWxlIChleHRlbnNpb25zW2ldKSB7Ci0gICAgICAgICAgICBpZiAoIXByaW50X2FsbCkKLSAgICAgICAgICAgICAgZ19wcmludCAoIiVzJXMiLCBpID4gMCA/ICIsICIgOiAiIiwgZXh0ZW5zaW9uc1tpXSk7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghcHJpbnRfYWxsKQotICAgICAgICAgICAgZ19wcmludCAoIlxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKCFwcmludF9hbGwpCi0gICAgICAgICAgICBnX3ByaW50ICgibm8gZXh0ZW5zaW9uc1xuIik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghcHJpbnRfYWxsKQotICAgICAgICAgIG5fcHJpbnQgKCIlczogICVzICglcylcbiIsIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbiksCi0gICAgICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmVhdHVyZSksIGdfdHlwZV9uYW1lIChHX09CSkVDVF9UWVBFIChmZWF0dXJlKSkpOwotICAgICAgfQotCi0gICAgbmV4dDoKLSAgICAgIGZlYXR1cmVzID0gZ19saXN0X25leHQgKGZlYXR1cmVzKTsKLSAgICB9Ci0KLSAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChvcmlnX2ZlYXR1cmVzKTsKLSAgfQotCi0gIGdzdF9wbHVnaW5fbGlzdF9mcmVlIChvcmlnX3BsdWdpbnMpOwotCi0gIGdfcHJpbnQgKCJcbiIpOwotICBnX3ByaW50IChfKCJUb3RhbCBjb3VudDogIikpOwotICBnX3ByaW50IChuZ2V0dGV4dCAoIiVkIHBsdWdpbiIsICIlZCBwbHVnaW5zIiwgcGx1Z2luY291bnQpLCBwbHVnaW5jb3VudCk7Ci0gIGlmIChibGFja2xpc3Rjb3VudCkgewotICAgIGdfcHJpbnQgKCIgKCIpOwotICAgIGdfcHJpbnQgKG5nZXR0ZXh0ICgiJWQgYmxhY2tsaXN0IGVudHJ5IiwgIiVkIGJsYWNrbGlzdCBlbnRyaWVzIiwKLSAgICAgICAgICAgIGJsYWNrbGlzdGNvdW50KSwgYmxhY2tsaXN0Y291bnQpOwotICAgIGdfcHJpbnQgKCIgbm90IHNob3duKSIpOwotICB9Ci0gIGdfcHJpbnQgKCIsICIpOwotICBnX3ByaW50IChuZ2V0dGV4dCAoIiVkIGZlYXR1cmUiLCAiJWQgZmVhdHVyZXMiLCBmZWF0dXJlY291bnQpLCBmZWF0dXJlY291bnQpOwotICBnX3ByaW50ICgiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X2FsbF91cmlfaGFuZGxlcnMgKHZvaWQpCi17Ci0gIEdMaXN0ICpwbHVnaW5zLCAqcCwgKmZlYXR1cmVzLCAqZjsKLQotICBwbHVnaW5zID0gZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSk7Ci0KLSAgZm9yIChwID0gcGx1Z2luczsgcDsgcCA9IHAtPm5leHQpIHsKLSAgICBHc3RQbHVnaW4gKnBsdWdpbiA9IChHc3RQbHVnaW4gKikgKHAtPmRhdGEpOwotCi0gICAgZmVhdHVyZXMgPQotICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICAgIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbikpOwotCi0gICAgZm9yIChmID0gZmVhdHVyZXM7IGY7IGYgPSBmLT5uZXh0KSB7Ci0gICAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlID0gR1NUX1BMVUdJTl9GRUFUVVJFIChmLT5kYXRhKTsKLQotICAgICAgaWYgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7Ci0gICAgICAgIEdzdEVsZW1lbnRGYWN0b3J5ICpmYWN0b3J5OwotICAgICAgICBHc3RFbGVtZW50ICplbGVtZW50OwotCi0gICAgICAgIGZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZIChnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZCAoZmVhdHVyZSkpOwotICAgICAgICBpZiAoIWZhY3RvcnkpIHsKLSAgICAgICAgICBnX3ByaW50ICgiZWxlbWVudCBwbHVnaW4gJXMgY291bGRuJ3QgYmUgbG9hZGVkXG4iLAotICAgICAgICAgICAgICBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSAoZmFjdG9yeSwgTlVMTCk7Ci0gICAgICAgIGlmICghZWxlbWVudCkgewotICAgICAgICAgIGdfcHJpbnQgKCJjb3VsZG4ndCBjb25zdHJ1Y3QgZWxlbWVudCBmb3IgJXMgZm9yIHNvbWUgcmVhc29uXG4iLAotICAgICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpKTsKLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChHU1RfSVNfVVJJX0hBTkRMRVIgKGVsZW1lbnQpKSB7Ci0gICAgICAgICAgY29uc3QgZ2NoYXIgKmNvbnN0ICp1cmlfcHJvdG9jb2xzOwotICAgICAgICAgIGNvbnN0IGdjaGFyICpkaXI7Ci0gICAgICAgICAgZ2NoYXIgKmpvaW5lZDsKLQotICAgICAgICAgIHN3aXRjaCAoZ3N0X3VyaV9oYW5kbGVyX2dldF91cmlfdHlwZSAoR1NUX1VSSV9IQU5ETEVSIChlbGVtZW50KSkpIHsKLSAgICAgICAgICAgIGNhc2UgR1NUX1VSSV9TUkM6Ci0gICAgICAgICAgICAgIGRpciA9ICJyZWFkIjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdTVF9VUklfU0lOSzoKLSAgICAgICAgICAgICAgZGlyID0gIndyaXRlIjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBkaXIgPSAidW5rbm93biI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHVyaV9wcm90b2NvbHMgPQotICAgICAgICAgICAgICBnc3RfdXJpX2hhbmRsZXJfZ2V0X3Byb3RvY29scyAoR1NUX1VSSV9IQU5ETEVSIChlbGVtZW50KSk7Ci0gICAgICAgICAgam9pbmVkID0gZ19zdHJqb2ludiAoIiwgIiwgKGdjaGFyICoqKSB1cmlfcHJvdG9jb2xzKTsKLQotICAgICAgICAgIGdfcHJpbnQgKCIlcyAoJXMsIHJhbmsgJXUpOiAlc1xuIiwKLSAgICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChHU1RfUExVR0lOX0ZFQVRVUkUgKGZhY3RvcnkpKSwgZGlyLAotICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSkpLAotICAgICAgICAgICAgICBqb2luZWQpOwotCi0gICAgICAgICAgZ19mcmVlIChqb2luZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGZhY3RvcnkpOwotICAgICAgfQotICAgIH0KLQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKGZlYXR1cmVzKTsKLSAgfQotCi0gIGdzdF9wbHVnaW5fbGlzdF9mcmVlIChwbHVnaW5zKTsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X3BsdWdpbl9pbmZvIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGNvbnN0IGdjaGFyICpyZWxlYXNlX2RhdGUgPSBnc3RfcGx1Z2luX2dldF9yZWxlYXNlX2RhdGVfc3RyaW5nIChwbHVnaW4pOwotICBjb25zdCBnY2hhciAqZmlsZW5hbWUgPSBnc3RfcGx1Z2luX2dldF9maWxlbmFtZSAocGx1Z2luKTsKLQotICBuX3ByaW50ICgiUGx1Z2luIERldGFpbHM6XG4iKTsKLSAgbl9wcmludCAoIiAgJS0yNXMlc1xuIiwgIk5hbWUiLCBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKLSAgbl9wcmludCAoIiAgJS0yNXMlc1xuIiwgIkRlc2NyaXB0aW9uIiwgZ3N0X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24gKHBsdWdpbikpOwotICBuX3ByaW50ICgiICAlLTI1cyVzXG4iLCAiRmlsZW5hbWUiLCAoZmlsZW5hbWUgIT0gTlVMTCkgPyBmaWxlbmFtZSA6ICIobnVsbCkiKTsKLSAgbl9wcmludCAoIiAgJS0yNXMlc1xuIiwgIlZlcnNpb24iLCBnc3RfcGx1Z2luX2dldF92ZXJzaW9uIChwbHVnaW4pKTsKLSAgbl9wcmludCAoIiAgJS0yNXMlc1xuIiwgIkxpY2Vuc2UiLCBnc3RfcGx1Z2luX2dldF9saWNlbnNlIChwbHVnaW4pKTsKLSAgbl9wcmludCAoIiAgJS0yNXMlc1xuIiwgIlNvdXJjZSBtb2R1bGUiLCBnc3RfcGx1Z2luX2dldF9zb3VyY2UgKHBsdWdpbikpOwotCi0gIGlmIChyZWxlYXNlX2RhdGUgIT0gTlVMTCkgewotICAgIGNvbnN0IGdjaGFyICp0eiA9ICIoVVRDKSI7Ci0gICAgZ2NoYXIgKnN0ciwgKnNlcDsKLQotICAgIC8qIG1heSBiZTogWVlZWS1NTS1ERCBvciBZWVlZLU1NLUREVEhIOk1NWiAqLwotICAgIC8qIFlZWVktTU0tRERUSEg6TU1aID0+IFlZWVktTU0tREQgSEg6TU0gKFVUQykgKi8KLSAgICBzdHIgPSBnX3N0cmR1cCAocmVsZWFzZV9kYXRlKTsKLSAgICBzZXAgPSBzdHJzdHIgKHN0ciwgIlQiKTsKLSAgICBpZiAoc2VwICE9IE5VTEwpIHsKLSAgICAgICpzZXAgPSAnICc7Ci0gICAgICBzZXAgPSBzdHJzdHIgKHNlcCArIDEsICJaIik7Ci0gICAgICBpZiAoc2VwICE9IE5VTEwpCi0gICAgICAgICpzZXAgPSAnICc7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHR6ID0gIiI7Ci0gICAgfQotICAgIG5fcHJpbnQgKCIgICUtMjVzJXMlc1xuIiwgIlNvdXJjZSByZWxlYXNlIGRhdGUiLCBzdHIsIHR6KTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gIH0KLSAgbl9wcmludCAoIiAgJS0yNXMlc1xuIiwgIkJpbmFyeSBwYWNrYWdlIiwgZ3N0X3BsdWdpbl9nZXRfcGFja2FnZSAocGx1Z2luKSk7Ci0gIG5fcHJpbnQgKCIgICUtMjVzJXNcbiIsICJPcmlnaW4gVVJMIiwgZ3N0X3BsdWdpbl9nZXRfb3JpZ2luIChwbHVnaW4pKTsKLSAgbl9wcmludCAoIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9wbHVnaW5fZmVhdHVyZXMgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR0xpc3QgKmZlYXR1cmVzLCAqb3JpZ2xpc3Q7Ci0gIGdpbnQgbnVtX2ZlYXR1cmVzID0gMDsKLSAgZ2ludCBudW1fZWxlbWVudHMgPSAwOwotICBnaW50IG51bV90cmFjZXJzID0gMDsKLSAgZ2ludCBudW1fdHlwZWZpbmRlcnMgPSAwOwotICBnaW50IG51bV9kZXZwcm92aWRlcnMgPSAwOwotICBnaW50IG51bV9vdGhlciA9IDA7Ci0KLSAgb3JpZ2xpc3QgPSBmZWF0dXJlcyA9Ci0gICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKLQotICB3aGlsZSAoZmVhdHVyZXMpIHsKLSAgICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotCi0gICAgZmVhdHVyZSA9IEdTVF9QTFVHSU5fRkVBVFVSRSAoZmVhdHVyZXMtPmRhdGEpOwotCi0gICAgaWYgKEdTVF9JU19FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7Ci0gICAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKLQotICAgICAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpOwotICAgICAgbl9wcmludCAoIiAgJXM6ICVzXG4iLCBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpLAotICAgICAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhIChmYWN0b3J5LAotICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9NRVRBREFUQV9MT05HTkFNRSkpOwotICAgICAgbnVtX2VsZW1lbnRzKys7Ci0gICAgfSBlbHNlIGlmIChHU1RfSVNfVFlQRV9GSU5EX0ZBQ1RPUlkgKGZlYXR1cmUpKSB7Ci0gICAgICBHc3RUeXBlRmluZEZhY3RvcnkgKmZhY3Rvcnk7Ci0gICAgICBjb25zdCBnY2hhciAqY29uc3QgKmV4dGVuc2lvbnM7Ci0KLSAgICAgIGZhY3RvcnkgPSBHU1RfVFlQRV9GSU5EX0ZBQ1RPUlkgKGZlYXR1cmUpOwotICAgICAgZXh0ZW5zaW9ucyA9IGdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9ucyAoZmFjdG9yeSk7Ci0gICAgICBpZiAoZXh0ZW5zaW9ucykgewotICAgICAgICBndWludCBpID0gMDsKLQotICAgICAgICBnX3ByaW50ICgiICAlczogJXM6ICIsIGdzdF9wbHVnaW5fZ2V0X25hbWUgKHBsdWdpbiksCi0gICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKTsKLSAgICAgICAgd2hpbGUgKGV4dGVuc2lvbnNbaV0pIHsKLSAgICAgICAgICBnX3ByaW50ICgiJXMlcyIsIGkgPiAwID8gIiwgIiA6ICIiLCBleHRlbnNpb25zW2ldKTsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgZ19wcmludCAoIlxuIik7Ci0gICAgICB9IGVsc2UKLSAgICAgICAgZ19wcmludCAoIiAgJXM6ICVzOiBubyBleHRlbnNpb25zXG4iLCBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pLAotICAgICAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9uYW1lIChmZWF0dXJlKSk7Ci0KLSAgICAgIG51bV90eXBlZmluZGVycysrOwotICAgIH0gZWxzZSBpZiAoR1NUX0lTX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgICAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5ICpmYWN0b3J5OwotCi0gICAgICBmYWN0b3J5ID0gR1NUX0RFVklDRV9QUk9WSURFUl9GQUNUT1JZIChmZWF0dXJlKTsKLSAgICAgIG5fcHJpbnQgKCIgICVzOiAlc1xuIiwgR1NUX09CSkVDVF9OQU1FIChmYWN0b3J5KSwKLSAgICAgICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X21ldGFkYXRhIChmYWN0b3J5LAotICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9NRVRBREFUQV9MT05HTkFNRSkpOwotICAgICAgbnVtX2RldnByb3ZpZGVycysrOwotICAgIH0gZWxzZSBpZiAoR1NUX0lTX1RSQUNFUl9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgICAgbl9wcmludCAoIiAgJXMgKCVzKVxuIiwgZ3N0X29iamVjdF9nZXRfbmFtZSAoR1NUX09CSkVDVCAoZmVhdHVyZSkpLAotICAgICAgICAgIGdfdHlwZV9uYW1lIChHX09CSkVDVF9UWVBFIChmZWF0dXJlKSkpOwotICAgICAgbnVtX3RyYWNlcnMrKzsKLSAgICB9IGVsc2UgaWYgKGZlYXR1cmUpIHsKLSAgICAgIG5fcHJpbnQgKCIgICVzICglcylcbiIsIGdzdF9vYmplY3RfZ2V0X25hbWUgKEdTVF9PQkpFQ1QgKGZlYXR1cmUpKSwKLSAgICAgICAgICBnX3R5cGVfbmFtZSAoR19PQkpFQ1RfVFlQRSAoZmVhdHVyZSkpKTsKLSAgICAgIG51bV9vdGhlcisrOwotICAgIH0KLSAgICBudW1fZmVhdHVyZXMrKzsKLSAgICBmZWF0dXJlcyA9IGdfbGlzdF9uZXh0IChmZWF0dXJlcyk7Ci0gIH0KLQotICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChvcmlnbGlzdCk7Ci0KLSAgbl9wcmludCAoIlxuIik7Ci0gIG5fcHJpbnQgKCIgICVkIGZlYXR1cmVzOlxuIiwgbnVtX2ZlYXR1cmVzKTsKLSAgaWYgKG51bV9lbGVtZW50cyA+IDApCi0gICAgbl9wcmludCAoIiAgKy0tICVkIGVsZW1lbnRzXG4iLCBudW1fZWxlbWVudHMpOwotICBpZiAobnVtX3R5cGVmaW5kZXJzID4gMCkKLSAgICBuX3ByaW50ICgiICArLS0gJWQgdHlwZWZpbmRlcnNcbiIsIG51bV90eXBlZmluZGVycyk7Ci0gIGlmIChudW1fZGV2cHJvdmlkZXJzID4gMCkKLSAgICBuX3ByaW50ICgiICArLS0gJWQgZGV2aWNlIHByb3ZpZGVyc1xuIiwgbnVtX2RldnByb3ZpZGVycyk7Ci0gIGlmIChudW1fdHJhY2VycyA+IDApCi0gICAgbl9wcmludCAoIiAgKy0tICVkIHRyYWNlcnNcbiIsIG51bV90cmFjZXJzKTsKLSAgaWYgKG51bV9vdGhlciA+IDApCi0gICAgbl9wcmludCAoIiAgKy0tICVkIG90aGVyIG9iamVjdHNcbiIsIG51bV9vdGhlcik7Ci0KLSAgbl9wcmludCAoIlxuIik7Ci19Ci0KLXN0YXRpYyBpbnQKLXByaW50X2VsZW1lbnRfZmVhdHVyZXMgKGNvbnN0IGdjaGFyICogZWxlbWVudF9uYW1lKQotewotICBHc3RQbHVnaW5GZWF0dXJlICpmZWF0dXJlOwotCi0gIC8qIEZJWE1FIGltcGxlbWVudCBvdGhlciBwcmV0dHkgcHJpbnQgZnVuY3Rpb24gZm9yIHRoZXNlICovCi0gIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCBlbGVtZW50X25hbWUsCi0gICAgICBHU1RfVFlQRV9UWVBFX0ZJTkRfRkFDVE9SWSk7Ci0gIGlmIChmZWF0dXJlKSB7Ci0gICAgbl9wcmludCAoIiVzOiBhIHR5cGVmaW5kIGZ1bmN0aW9uXG4iLCBlbGVtZW50X25hbWUpOwotICAgIHJldHVybiAwOwotICB9Ci0gIGZlYXR1cmUgPSBnc3RfcmVnaXN0cnlfZmluZF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCBlbGVtZW50X25hbWUsCi0gICAgICBHU1RfVFlQRV9UUkFDRVJfRkFDVE9SWSk7Ci0gIGlmIChmZWF0dXJlKSB7Ci0gICAgbl9wcmludCAoIiVzOiBhIHRyYWNlciBtb2R1bGVcbiIsIGVsZW1lbnRfbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQKLXByaW50X2VsZW1lbnRfaW5mbyAoR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5LCBnYm9vbGVhbiBwcmludF9uYW1lcykKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR3N0UGx1Z2luICpwbHVnaW47Ci0gIGdpbnQgbWF4bGV2ZWwgPSAwOwotCi0gIGZhY3RvcnkgPQotICAgICAgR1NUX0VMRU1FTlRfRkFDVE9SWSAoZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKEdTVF9QTFVHSU5fRkVBVFVSRQotICAgICAgICAgIChmYWN0b3J5KSkpOwotCi0gIGlmICghZmFjdG9yeSkgewotICAgIGdfcHJpbnQgKCJlbGVtZW50IHBsdWdpbiBjb3VsZG4ndCBiZSBsb2FkZWRcbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2NyZWF0ZSAoZmFjdG9yeSwgTlVMTCk7Ci0gIGlmICghZWxlbWVudCkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKGZhY3RvcnkpOwotICAgIGdfcHJpbnQgKCJjb3VsZG4ndCBjb25zdHJ1Y3QgZWxlbWVudCBmb3Igc29tZSByZWFzb25cbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGlmIChwcmludF9uYW1lcykKLSAgICBfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOiAiLCBHU1RfT0JKRUNUX05BTUUgKGZhY3RvcnkpKTsKLSAgZWxzZQotICAgIF9uYW1lID0gTlVMTDsKLQotICBwcmludF9mYWN0b3J5X2RldGFpbHNfaW5mbyAoZmFjdG9yeSk7Ci0KLSAgcGx1Z2luID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW4gKEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSkpOwotICBpZiAocGx1Z2luKSB7Ci0gICAgcHJpbnRfcGx1Z2luX2luZm8gKHBsdWdpbik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGx1Z2luKTsKLSAgfQotCi0gIHByaW50X2hpZXJhcmNoeSAoR19PQkpFQ1RfVFlQRSAoZWxlbWVudCksIDAsICZtYXhsZXZlbCk7Ci0gIHByaW50X2ludGVyZmFjZXMgKEdfT0JKRUNUX1RZUEUgKGVsZW1lbnQpKTsKLQotICBwcmludF9wYWRfdGVtcGxhdGVzX2luZm8gKGVsZW1lbnQsIGZhY3RvcnkpOwotICBwcmludF9lbGVtZW50X2ZsYWdfaW5mbyAoZWxlbWVudCk7Ci0gIHByaW50X2ltcGxlbWVudGF0aW9uX2luZm8gKGVsZW1lbnQpOwotICBwcmludF9jbG9ja2luZ19pbmZvIChlbGVtZW50KTsKLSAgcHJpbnRfdXJpX2hhbmRsZXJfaW5mbyAoZWxlbWVudCk7Ci0gIHByaW50X3BhZF9pbmZvIChlbGVtZW50KTsKLSAgcHJpbnRfZWxlbWVudF9wcm9wZXJ0aWVzX2luZm8gKGVsZW1lbnQpOwotICBwcmludF9zaWduYWxfaW5mbyAoZWxlbWVudCk7Ci0gIHByaW50X2NoaWxkcmVuX2luZm8gKGVsZW1lbnQpOwotICBwcmludF9wcmVzZXRfbGlzdCAoZWxlbWVudCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGZhY3RvcnkpOwotICBnX2ZyZWUgKF9uYW1lKTsKLQotICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZAotcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm9fY29kZWNzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCi17Ci0gIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gIGNvbnN0IGdjaGFyICp0eXBlX25hbWU7Ci0gIGNvbnN0IGdjaGFyICprbGFzczsKLSAgY29uc3QgR0xpc3QgKnN0YXRpY190ZW1wbGF0ZXMsICpsOwotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgZ3VpbnQgaSwgbnVtOwotCi0gIGtsYXNzID0KLSAgICAgIGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhIChmYWN0b3J5LCBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGtsYXNzICE9IE5VTEwpOwotCi0gIGlmIChzdHJzdHIgKGtsYXNzLCAiRGVtdXhlciIpIHx8Ci0gICAgICBzdHJzdHIgKGtsYXNzLCAiRGVjb2RlciIpIHx8Ci0gICAgICBzdHJzdHIgKGtsYXNzLCAiRGVwYXkiKSB8fCBzdHJzdHIgKGtsYXNzLCAiUGFyc2VyIikpIHsKLSAgICB0eXBlX25hbWUgPSAiZGVjb2RlciI7Ci0gICAgZGlyZWN0aW9uID0gR1NUX1BBRF9TSU5LOwotICB9IGVsc2UgaWYgKHN0cnN0ciAoa2xhc3MsICJNdXhlciIpIHx8Ci0gICAgICBzdHJzdHIgKGtsYXNzLCAiRW5jb2RlciIpIHx8IHN0cnN0ciAoa2xhc3MsICJQYXkiKSkgewotICAgIHR5cGVfbmFtZSA9ICJlbmNvZGVyIjsKLSAgICBkaXJlY3Rpb24gPSBHU1RfUEFEX1NSQzsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBkZWNvZGVyL2RlbXV4ZXIgc2luayBwYWRzIHNob3VsZCBhbHdheXMgYmUgc3RhdGljIGFuZCB0aGVyZSBzaG91bGQgb25seQotICAgKiBiZSBvbmUsIHRoZSBzYW1lIGFwcGxpZXMgdG8gZW5jb2RlcnMvbXV4ZXJzIGFuZCBzb3VyY2UgcGFkcyAqLwotICBzdGF0aWNfdGVtcGxhdGVzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfc3RhdGljX3BhZF90ZW1wbGF0ZXMgKGZhY3RvcnkpOwotICBmb3IgKGwgPSBzdGF0aWNfdGVtcGxhdGVzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnRtcGwgPSBOVUxMOwotCi0gICAgdG1wbCA9IChHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqKSBsLT5kYXRhOwotICAgIGlmICh0bXBsLT5kaXJlY3Rpb24gPT0gZGlyZWN0aW9uKSB7Ci0gICAgICBjYXBzID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKHRtcGwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGNhcHMgPT0gTlVMTCkgewotICAgIGdfcHJpbnRlcnIgKCJDb3VsZG4ndCBmaW5kIHN0YXRpYyBwYWQgdGVtcGxhdGUgZm9yICVzICclcydcbiIsCi0gICAgICAgIHR5cGVfbmFtZSwgR1NUX09CSkVDVF9OQU1FIChmYWN0b3J5KSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotICBudW0gPSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewotICAgIEdzdFN0cnVjdHVyZSAqczsKLSAgICBnY2hhciAqc19zdHI7Ci0KLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSk7Ci0gICAgLyogcmVtb3ZlIGZpZWxkcyB0aGF0IGFyZSBhbG1vc3QgYWx3YXlzIGp1c3QgTUlOLU1BWCBvZiBzb21lIHNvcnQKLSAgICAgKiBpbiBvcmRlciB0byBtYWtlIHRoZSBjYXBzIGxvb2sgbGVzcyBtZXNzeSAqLwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJmcmFtZXJhdGUiKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNoYW5uZWxzIik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJ3aWR0aCIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiaGVpZ2h0Iik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJyYXRlIik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJkZXB0aCIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiY2xvY2stcmF0ZSIpOwotICAgIHNfc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKHMpOwotICAgIGdfcHJpbnQgKCIlcy0lc1xuIiwgdHlwZV9uYW1lLCBzX3N0cik7Ci0gICAgZ19mcmVlIChzX3N0cik7Ci0gIH0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm9fcHJvdG9jb2xzIChHc3RFbGVtZW50RmFjdG9yeSAqIGZhY3RvcnkpCi17Ci0gIGNvbnN0IGdjaGFyICpjb25zdCAqcHJvdG9jb2xzOwotCi0gIHByb3RvY29scyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHMgKGZhY3RvcnkpOwotICBpZiAocHJvdG9jb2xzICE9IE5VTEwgJiYgKnByb3RvY29scyAhPSBOVUxMKSB7Ci0gICAgc3dpdGNoIChnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfdHlwZSAoZmFjdG9yeSkpIHsKLSAgICAgIGNhc2UgR1NUX1VSSV9TSU5LOgotICAgICAgICB3aGlsZSAoKnByb3RvY29scyAhPSBOVUxMKSB7Ci0gICAgICAgICAgZ19wcmludCAoInVyaXNpbmstJXNcbiIsICpwcm90b2NvbHMpOwotICAgICAgICAgICsrcHJvdG9jb2xzOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVVJJX1NSQzoKLSAgICAgICAgd2hpbGUgKCpwcm90b2NvbHMgIT0gTlVMTCkgewotICAgICAgICAgIGdfcHJpbnQgKCJ1cmlzb3VyY2UtJXNcbiIsICpwcm90b2NvbHMpOwotICAgICAgICAgICsrcHJvdG9jb2xzOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9wbHVnaW5fYXV0b21hdGljX2luc3RhbGxfaW5mbyAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHTGlzdCAqZmVhdHVyZXMsICpsOwotCi0gIC8qIG5vdCBpbnRlcmVzdGVkIGluIHR5cGVmaW5kIGZhY3Rvcmllcywgb25seSBlbGVtZW50IGZhY3RvcmllcyAqLwotICBmZWF0dXJlcyA9IGdzdF9yZWdpc3RyeV9nZXRfZmVhdHVyZV9saXN0IChnc3RfcmVnaXN0cnlfZ2V0ICgpLAotICAgICAgR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZKTsKLQotICBmb3IgKGwgPSBmZWF0dXJlczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmU7Ci0gICAgR3N0UGx1Z2luICpmZWF0dXJlX3BsdWdpbjsKLQotICAgIGZlYXR1cmUgPSBHU1RfUExVR0lOX0ZFQVRVUkUgKGwtPmRhdGEpOwotCi0gICAgLyogb25seSBpbnRlcmVzdGVkIGluIHRoZSBvbmVzIHRoYXQgYXJlIGluIHRoZSBwbHVnaW4gd2UganVzdCBsb2FkZWQgKi8KLSAgICBmZWF0dXJlX3BsdWdpbiA9IGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfcGx1Z2luIChmZWF0dXJlKTsKLSAgICBpZiAoZmVhdHVyZV9wbHVnaW4gPT0gcGx1Z2luKSB7Ci0gICAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKLQotICAgICAgZ19wcmludCAoImVsZW1lbnQtJXNcbiIsIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoZmVhdHVyZSkpOwotCi0gICAgICBmYWN0b3J5ID0gR1NUX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSk7Ci0gICAgICBwcmludF9wbHVnaW5fYXV0b21hdGljX2luc3RhbGxfaW5mb19wcm90b2NvbHMgKGZhY3RvcnkpOwotICAgICAgcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm9fY29kZWNzIChmYWN0b3J5KTsKLSAgICB9Ci0gICAgaWYgKGZlYXR1cmVfcGx1Z2luKQotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZmVhdHVyZV9wbHVnaW4pOwotICB9Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGZlYXR1cmVzLCAoR0Z1bmMpIGdzdF9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoZmVhdHVyZXMpOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfYWxsX3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvICh2b2lkKQotewotICBHTGlzdCAqcGx1Z2lucywgKm9yaWdfcGx1Z2luczsKLQotICBvcmlnX3BsdWdpbnMgPSBwbHVnaW5zID0gZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSk7Ci0gIHdoaWxlIChwbHVnaW5zKSB7Ci0gICAgR3N0UGx1Z2luICpwbHVnaW47Ci0KLSAgICBwbHVnaW4gPSAoR3N0UGx1Z2luICopIChwbHVnaW5zLT5kYXRhKTsKLSAgICBwbHVnaW5zID0gZ19saXN0X25leHQgKHBsdWdpbnMpOwotCi0gICAgcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm8gKHBsdWdpbik7Ci0gIH0KLSAgZ3N0X3BsdWdpbl9saXN0X2ZyZWUgKG9yaWdfcGx1Z2lucyk7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgZ2Jvb2xlYW4gcHJpbnRfYWxsID0gRkFMU0U7Ci0gIGdib29sZWFuIGRvX3ByaW50X2JsYWNrbGlzdCA9IEZBTFNFOwotICBnYm9vbGVhbiBwbHVnaW5fbmFtZSA9IEZBTFNFOwotICBnYm9vbGVhbiBwcmludF9haWkgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gdXJpX2hhbmRsZXJzID0gRkFMU0U7Ci0gIGdib29sZWFuIGNoZWNrX2V4aXN0cyA9IEZBTFNFOwotICBnY2hhciAqbWluX3ZlcnNpb24gPSBOVUxMOwotICBndWludCBtaW52ZXJfbWFqID0gR1NUX1ZFUlNJT05fTUFKT1I7Ci0gIGd1aW50IG1pbnZlcl9taW4gPSBHU1RfVkVSU0lPTl9NSU5PUjsKLSAgZ3VpbnQgbWludmVyX21pY3JvID0gMDsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKLSAgR09wdGlvbkVudHJ5IG9wdGlvbnNbXSA9IHsKLSAgICB7InByaW50LWFsbCIsICdhJywgMCwgR19PUFRJT05fQVJHX05PTkUsICZwcmludF9hbGwsCi0gICAgICAgIE5fKCJQcmludCBhbGwgZWxlbWVudHMiKSwgTlVMTH0sCi0gICAgeyJwcmludC1ibGFja2xpc3QiLCAnYicsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmZG9fcHJpbnRfYmxhY2tsaXN0LAotICAgICAgICBOXygiUHJpbnQgbGlzdCBvZiBibGFja2xpc3RlZCBmaWxlcyIpLCBOVUxMfSwKLSAgICB7InByaW50LXBsdWdpbi1hdXRvLWluc3RhbGwtaW5mbyIsICdcMCcsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmcHJpbnRfYWlpLAotICAgICAgICBOXygiUHJpbnQgYSBtYWNoaW5lLXBhcnNhYmxlIGxpc3Qgb2YgZmVhdHVyZXMgdGhlIHNwZWNpZmllZCBwbHVnaW4gIgotICAgICAgICAgICAgICAib3IgYWxsIHBsdWdpbnMgcHJvdmlkZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICAgICAgICAgIlVzZWZ1bCBpbiBjb25uZWN0aW9uIHdpdGggZXh0ZXJuYWwgYXV0b21hdGljIHBsdWdpbiAiCi0gICAgICAgICAgICAgICJpbnN0YWxsYXRpb24gbWVjaGFuaXNtcyIpLCBOVUxMfSwKLSAgICB7InBsdWdpbiIsICdcMCcsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmcGx1Z2luX25hbWUsCi0gICAgICAgIE5fKCJMaXN0IHRoZSBwbHVnaW4gY29udGVudHMiKSwgTlVMTH0sCi0gICAgeyJleGlzdHMiLCAnXDAnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJmNoZWNrX2V4aXN0cywKLSAgICAgICAgTl8oIkNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgZWxlbWVudCBvciBwbHVnaW4gZXhpc3RzIiksIE5VTEx9LAotICAgIHsiYXRsZWFzdC12ZXJzaW9uIiwgJ1wwJywgMCwgR19PUFRJT05fQVJHX1NUUklORywgJm1pbl92ZXJzaW9uLAotICAgICAgICBOXwotICAgICAgICAgICgiV2hlbiBjaGVja2luZyBpZiBhbiBlbGVtZW50IG9yIHBsdWdpbiBleGlzdHMsIGFsc28gY2hlY2sgdGhhdCBpdHMgIgotICAgICAgICAgICAgICAidmVyc2lvbiBpcyBhdCBsZWFzdCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQiKSwgTlVMTH0sCi0gICAgeyJ1cmktaGFuZGxlcnMiLCAndScsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmdXJpX2hhbmRsZXJzLAotICAgICAgICAgIE5fCi0gICAgICAgICAgKCJQcmludCBzdXBwb3J0ZWQgVVJJIHNjaGVtZXMsIHdpdGggdGhlIGVsZW1lbnRzIHRoYXQgaW1wbGVtZW50IHRoZW0iKSwKLSAgICAgICAgTlVMTH0sCi0gICAgR1NUX1RPT0xTX0dPUFRJT05fVkVSU0lPTiwKLSAgICB7TlVMTH0KLSAgfTsKLSAgR09wdGlvbkNvbnRleHQgKmN0eDsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotI2VuZGlmCi0KLSAgc2V0bG9jYWxlIChMQ19BTEwsICIiKTsKLQotI2lmZGVmIEVOQUJMRV9OTFMKLSAgYmluZHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSwgTE9DQUxFRElSKTsKLSAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKEdFVFRFWFRfUEFDS0FHRSwgIlVURi04Iik7Ci0gIHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSk7Ci0jZW5kaWYKLQotICAvKiBhdm9pZCBnbGliIHdhcm5pbmdzIHdoZW4gaW5zcGVjdGluZyBkZXByZWNhdGVkIHByb3BlcnRpZXMgKi8KLSAgZ19zZXRlbnYgKCJHX0VOQUJMRV9ESUFHTk9TVElDIiwgIjAiLCBGQUxTRSk7Ci0KLSAgZ19zZXRfcHJnbmFtZSAoImdzdC1pbnNwZWN0LSIgR1NUX0FQSV9WRVJTSU9OKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORwotICBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIltFTEVNRU5ULU5BTUUgfCBQTFVHSU4tTkFNRV0iKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzIChjdHgsIG9wdGlvbnMsIEdFVFRFWFRfUEFDS0FHRSk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOwotICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkgewotICAgIGdfcHJpbnRlcnIgKCJFcnJvciBpbml0aWFsaXppbmc6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotI2Vsc2UKLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0jZW5kaWYKLQotICBnc3RfdG9vbHNfcHJpbnRfdmVyc2lvbiAoKTsKLQotICBpZiAocHJpbnRfYWxsICYmIGFyZ2MgPiAxKSB7Ci0gICAgZ19wcmludGVyciAoIi1hIHJlcXVpcmVzIG5vIGV4dHJhIGFyZ3VtZW50c1xuIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaWYgKHVyaV9oYW5kbGVycyAmJiBhcmdjID4gMSkgewotICAgIGdfcHJpbnRlcnIgKCItdSByZXF1aXJlcyBubyBleHRyYSBhcmd1bWVudHNcbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIC0tYXRsZWFzdC12ZXJzaW9uIGltcGxpZXMgLS1leGlzdHMgKi8KLSAgaWYgKG1pbl92ZXJzaW9uICE9IE5VTEwpIHsKLSAgICBpZiAoc3NjYW5mIChtaW5fdmVyc2lvbiwgIiV1LiV1LiV1IiwgJm1pbnZlcl9tYWosICZtaW52ZXJfbWluLAotICAgICAgICAgICAgJm1pbnZlcl9taWNybykgPCAyKSB7Ci0gICAgICBnX3ByaW50ZXJyICgiQ2FuJ3QgcGFyc2UgdmVyc2lvbiAnJXMnIHBhc3NlZCB0byAtLWF0bGVhc3QtdmVyc2lvblxuIiwKLSAgICAgICAgICBtaW5fdmVyc2lvbik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNoZWNrX2V4aXN0cyA9IFRSVUU7Ci0gIH0KLQotICBpZiAoY2hlY2tfZXhpc3RzKSB7Ci0gICAgaW50IGV4aXRfY29kZTsKLQotICAgIGlmIChhcmdjID09IDEpIHsKLSAgICAgIGdfcHJpbnRlcnIgKCItLWV4aXN0cyByZXF1aXJlcyBhbiBleHRyYSBjb21tYW5kIGxpbmUgYXJndW1lbnRcbiIpOwotICAgICAgZXhpdF9jb2RlID0gLTE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICghcGx1Z2luX25hbWUpIHsKLSAgICAgICAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZTsKLQotICAgICAgICBmZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2xvb2t1cF9mZWF0dXJlIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCBhcmd2WzFdKTsKLSAgICAgICAgaWYgKGZlYXR1cmUgIT0gTlVMTCAmJiBnc3RfcGx1Z2luX2ZlYXR1cmVfY2hlY2tfdmVyc2lvbiAoZmVhdHVyZSwKLSAgICAgICAgICAgICAgICBtaW52ZXJfbWFqLCBtaW52ZXJfbWluLCBtaW52ZXJfbWljcm8pKSB7Ci0gICAgICAgICAgZXhpdF9jb2RlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBleGl0X2NvZGUgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZlYXR1cmUpCi0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZmVhdHVyZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBGSVhNRTogc3VwcG9ydCBjaGVja2luZyBmb3IgcGx1Z2lucyB0b28gKi8KLSAgICAgICAgZ19wcmludGVyciAoIkNoZWNraW5nIGZvciBwbHVnaW5zIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKLSAgICAgICAgZXhpdF9jb2RlID0gLTE7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBleGl0X2NvZGU7Ci0gIH0KLQotICAvKiBpZiBubyBhcmd1bWVudHMsIHByaW50IG91dCBsaXN0IG9mIGVsZW1lbnRzICovCi0gIGlmICh1cmlfaGFuZGxlcnMpIHsKLSAgICBwcmludF9hbGxfdXJpX2hhbmRsZXJzICgpOwotICB9IGVsc2UgaWYgKGFyZ2MgPT0gMSB8fCBwcmludF9hbGwpIHsKLSAgICBpZiAoZG9fcHJpbnRfYmxhY2tsaXN0KQotICAgICAgcHJpbnRfYmxhY2tsaXN0ICgpOwotICAgIGVsc2UgewotICAgICAgaWYgKHByaW50X2FpaSkKLSAgICAgICAgcHJpbnRfYWxsX3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvICgpOwotICAgICAgZWxzZQotICAgICAgICBwcmludF9lbGVtZW50X2xpc3QgKHByaW50X2FsbCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIGVsc2Ugd2UgdHJ5IHRvIGdldCBhIGZhY3RvcnkgKi8KLSAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeTsKLSAgICBHc3RQbHVnaW4gKnBsdWdpbjsKLSAgICBjb25zdCBjaGFyICphcmcgPSBhcmd2W2FyZ2MgLSAxXTsKLSAgICBpbnQgcmV0dmFsOwotCi0gICAgaWYgKCFwbHVnaW5fbmFtZSkgewotICAgICAgZmFjdG9yeSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCAoYXJnKTsKLQotICAgICAgLyogaWYgdGhlcmUncyBhIGZhY3RvcnksIHByaW50IG91dCB0aGUgaW5mbyAqLwotICAgICAgaWYgKGZhY3RvcnkpIHsKLSAgICAgICAgcmV0dmFsID0gcHJpbnRfZWxlbWVudF9pbmZvIChmYWN0b3J5LCBwcmludF9hbGwpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWN0b3J5KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHZhbCA9IHByaW50X2VsZW1lbnRfZmVhdHVyZXMgKGFyZyk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHZhbCA9IC0xOwotICAgIH0KLQotICAgIC8qIG90aGVyd2lzZSBjaGVjayBpZiBpdCdzIGEgcGx1Z2luICovCi0gICAgaWYgKHJldHZhbCkgewotICAgICAgcGx1Z2luID0gZ3N0X3JlZ2lzdHJ5X2ZpbmRfcGx1Z2luIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCBhcmcpOwotCi0gICAgICAvKiBpZiB0aGVyZSBpcyBzdWNoIGEgcGx1Z2luLCBwcmludCBvdXQgaW5mbyAqLwotICAgICAgaWYgKHBsdWdpbikgewotICAgICAgICBpZiAocHJpbnRfYWlpKSB7Ci0gICAgICAgICAgcHJpbnRfcGx1Z2luX2F1dG9tYXRpY19pbnN0YWxsX2luZm8gKHBsdWdpbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcHJpbnRfcGx1Z2luX2luZm8gKHBsdWdpbik7Ci0gICAgICAgICAgcHJpbnRfcGx1Z2luX2ZlYXR1cmVzIChwbHVnaW4pOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotICAgICAgICBpZiAoZ19maWxlX3Rlc3QgKGFyZywgR19GSUxFX1RFU1RfRVhJU1RTKSkgewotICAgICAgICAgIHBsdWdpbiA9IGdzdF9wbHVnaW5fbG9hZF9maWxlIChhcmcsICZlcnJvcik7Ci0KLSAgICAgICAgICBpZiAocGx1Z2luKSB7Ci0gICAgICAgICAgICBpZiAocHJpbnRfYWlpKSB7Ci0gICAgICAgICAgICAgIHByaW50X3BsdWdpbl9hdXRvbWF0aWNfaW5zdGFsbF9pbmZvIChwbHVnaW4pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcHJpbnRfcGx1Z2luX2luZm8gKHBsdWdpbik7Ci0gICAgICAgICAgICAgIHByaW50X3BsdWdpbl9mZWF0dXJlcyAocGx1Z2luKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ19wcmludGVyciAoXygiQ291bGQgbm90IGxvYWQgcGx1Z2luIGZpbGU6ICVzXG4iKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ19wcmludGVyciAoXygiTm8gc3VjaCBlbGVtZW50IG9yIHBsdWdpbiAnJXMnXG4iKSwgYXJnKTsKLSAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC1sYXVuY2guMS5pbiBiL3Rvb2xzL2dzdC1sYXVuY2guMS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzNGYyOS4uMDAwMDAwMAotLS0gYS90b29scy9nc3QtbGF1bmNoLjEuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0ODggKzAsMCBAQAotLlRIICJHU3RyZWFtZXIiICIxIiAiTWF5IDIwMDciCi0uU0ggIk5BTUUiCi1nc3RcLWxhdW5jaCBcLSBidWlsZCBhbmQgcnVuIGEgR1N0cmVhbWVyIHBpcGVsaW5lCi0uU0ggIlNZTk9QU0lTIgotXGZCZ3N0XC1sYXVuY2hcZlIgXGZJW09QVElPTi4uLl1cZlIgUElQRUxJTkVcLURFU0NSSVBUSU9OCi0uU0ggIkRFU0NSSVBUSU9OIgotLkxQCi1cZklnc3RcLWxhdW5jaFxmUCBpcyBhIHRvb2wgdGhhdCBidWlsZHMgYW5kIHJ1bnMgYmFzaWMKLVxmSUdTdHJlYW1lclxmUCBwaXBlbGluZXMuCi0KLUluIHNpbXBsZSBmb3JtLCBhIFBJUEVMSU5FXC1ERVNDUklQVElPTiBpcyBhIGxpc3Qgb2YKLWVsZW1lbnRzIHNlcGFyYXRlZCBieSBleGNsYW1hdGlvbiBtYXJrcyAoISkuIFByb3BlcnRpZXMgbWF5IGJlIGFwcGVuZGVkIHRvCi1lbGVtZW50cywgaW4gdGhlIGZvcm0gXGZJcHJvcGVydHk9dmFsdWVcZlIuCi0KLUZvciBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHBvc3NpYmxlIFBJUEVMSU5FLURFU0NSSVBUSU9OUyBzZWUgdGhlIHNlY3Rpb24KLVxmSXBpcGVsaW5lIGRlc2NyaXB0aW9uXGZSIGJlbG93IG9yIGNvbnN1bHQgdGhlIEdTdHJlYW1lciBkb2N1bWVudGF0aW9uLgotCi1QbGVhc2Ugbm90ZSB0aGF0IFxmSWdzdFwtbGF1bmNoXGZQIGlzIHByaW1hcmlseSBhIGRlYnVnZ2luZyB0b29sIGZvcgotZGV2ZWxvcGVycyBhbmQgdXNlcnMuIFlvdSBzaG91bGQgbm90IGJ1aWxkIGFwcGxpY2F0aW9ucyBvbiB0b3Agb2YgaXQuIEZvcgotYXBwbGljYXRpb25zLCB1c2UgdGhlIGdzdF9wYXJzZV9sYXVuY2goKSBmdW5jdGlvbiBvZiB0aGUgR1N0cmVhbWVyIEFQSSBhcyBhbgotZWFzeSB3YXkgdG8gY29uc3RydWN0IHBpcGVsaW5lcyBmcm9tIHBpcGVsaW5lIGRlc2NyaXB0aW9ucy4KLS4KLS5TSCAiT1BUSU9OUyIKLS5sCi1cZklnc3RcLWxhdW5jaFxmUCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKLS5UUCA4Ci0uQiAgXC1cLWhlbHAKLVByaW50IGhlbHAgc3lub3BzaXMgYW5kIGF2YWlsYWJsZSBGTEFHUwotLlRQIDgKLS5CICBcLXYsIFwtXC12ZXJib3NlCi1PdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBwcm9wZXJ0eSBub3RpZmljYXRpb25zCi0uVFAgOAotLkIgIFwtcSwgXC1cLXF1aWV0Ci1EbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uCi0uVFAgOAotLkIgIFwtbSwgXC1cLW1lc3NhZ2VzCi1PdXRwdXQgbWVzc2FnZXMgcG9zdGVkIG9uIHRoZSBwaXBlbGluZSdzIGJ1cwotLlRQIDgKLS5CICBcLXQsIFwtXC10YWdzCi1PdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkKLS5UUCA4Ci0uQiAgXC1lLCBcLVwtZW9zXC1vblwtc2h1dGRvd24KLUZvcmNlIGFuIEVPUyBldmVudCBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93bi4gVGhpcyBpcwotdXNlZnVsIHRvIG1ha2Ugc3VyZSBtdXhlcnMgY3JlYXRlIHJlYWRhYmxlIGZpbGVzIHdoZW4gYSBtdXhpbmcgcGlwZWxpbmUgaXMKLXNodXQgZG93biBmb3JjZWZ1bGx5IHZpYSBDb250cm9sLUMuCi0uVFAgOAotLkIgIFwtaSwgXC1cLWluZGV4Ci1HYXRoZXIgYW5kIHByaW50IGluZGV4IHN0YXRpc3RpY3MuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgcGxheWJhY2sgb3IKLXJlY29yZGluZyBwaXBlbGluZXMuCi0uVFAgOAotLkIgIFwtZiwgXC1cLW5vXC1mYXVsdAotRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyCi0uVFAgOAotLkIgIFwtVCwgXC1cLXRyYWNlCi1QcmludCBtZW1vcnkgYWxsb2NhdGlvbiB0cmFjZXMuIFRoZSBmZWF0dXJlIG11c3QgYmUgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUgdG8KLXdvcmsuCi0uVFAgOAotCi0uCi0uU0ggIkdTVFJFQU1FUiBPUFRJT05TIgotLmwKLVxmSWdzdFwtbGF1bmNoXGZQIGFsc28gYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdGhhdCBhcmUgY29tbW9uCi10byBhbGwgR1N0cmVhbWVyIGFwcGxpY2F0aW9uczoKLS5UUCA4Ci0uQiAgXC1cLWdzdFwtdmVyc2lvbgotUHJpbnRzIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgXGZJR1N0cmVhbWVyXGZQIGNvcmUgbGlicmFyeS4KLS5UUCA4Ci0uQiAgXC1cLWdzdFwtZmF0YWxcLXdhcm5pbmdzCi1DYXVzZXMgXGZJR1N0cmVhbWVyXGZQIHRvIGFib3J0IGlmIGEgd2FybmluZyBtZXNzYWdlIG9jY3Vycy4gVGhpcyBpcyBlcXVpdmFsZW50Ci10byBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHX0RFQlVHIHRvICdmYXRhbF93YXJuaW5ncycgKHNlZSB0aGUKLXNlY3Rpb24gXGZJZW52aXJvbm1lbnQgdmFyaWFibGVzXGZSIGJlbG93IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uKS4KLS5UUCA4Ci0uQiAgXC1cLWdzdFwtZGVidWc9U1RSSU5HCi1BIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5X25hbWU6bGV2ZWwgcGFpcnMgdG8gc3BlY2lmeSBkZWJ1Z2dpbmcgbGV2ZWxzCi1mb3IgZWFjaCBjYXRlZ29yeS4gTGV2ZWwgaXMgaW4gdGhlIHJhbmdlIDAtOSB3aGVyZSAwIHdpbGwgc2hvdyBubyBtZXNzYWdlcywgYW5kCi05IHdpbGwgc2hvdyBhbGwgbWVzc2FnZXMuIFRoZSB3aWxkY2FyZCAqIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGNhdGVnb3J5IG5hbWVzLgotTm90ZSB0aGF0IHRoZSBvcmRlciBvZiBjYXRlZ29yaWVzIGFuZCBsZXZlbHMgaXMgaW1wb3J0YW50LCB3aWxkY2FyZHMgYXQgdGhlCi1lbmQgbWF5IG92ZXJyaWRlIGxldmVscyBzZXQgZWFybGllci4gVGhlIGxvZyBsZXZlbHMgYXJlOiAxPUVSUk9SLCAyPVdBUk5JTkcsCi0zPUZJWE1FLCA0PUlORk8sIDU9REVCVUcsIDY9TE9HLCA3PVRSQUNFLCA5PU1FTURVTVAuIFNpbmNlIEdTdHJlYW1lciAxLjIgb25lCi1jYW4gYWxzbyB1c2UgdGhlIGRlYnVnIGxldmVsIG5hbWVzLCBlLmcuIFwtXC1nc3RcLWRlYnVnPSpzaW5rOkxPRy4gQSBmdWxsCi1kZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91cyBkZWJ1ZyBsZXZlbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBHU3RyZWFtZXIgY29yZQotbGlicmFyeSBBUEkgZG9jdW1lbnRhdGlvbiwgaW4gdGhlICJSdW5uaW5nIEdTdHJlYW1lciBBcHBsaWNhdGlvbnMiIHNlY3Rpb24uCi0KLVVzZSBcLVwtZ3N0XC1kZWJ1Z1wtaGVscCB0byBzaG93IGNhdGVnb3J5IG5hbWVzCi0KLUV4YW1wbGU6Ci1HU1RfQ0FUOjUsR1NUX0VMRU1FTlRfKjozLG9nZ2RlbXV4OjUKLQotLlRQIDgKLS5CICBcLVwtZ3N0XC1kZWJ1Z1wtbGV2ZWw9TEVWRUwKLVNldHMgdGhlIHRocmVzaG9sZCBmb3IgcHJpbnRpbmcgZGVidWdnaW5nIG1lc3NhZ2VzLiAgQSBoaWdoZXIgbGV2ZWwKLXdpbGwgcHJpbnQgbW9yZSBtZXNzYWdlcy4gIFRoZSB1c2VmdWwgcmFuZ2UgaXMgMC05LCB3aXRoIHRoZSBkZWZhdWx0Ci1iZWluZyAwLiBMZXZlbCA2IChMT0cgbGV2ZWwpIHdpbGwgc2hvdyBhbGwgaW5mb3JtYXRpb24gdGhhdCBpcyB1c3VhbGx5Ci1yZXF1aXJlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBIaWdoZXIgbGV2ZWxzIGFyZSBvbmx5IHVzZWZ1bCBpbiB2ZXJ5Ci1zcGVjaWZpYyBjYXNlcy4gU2VlIGFib3ZlIGZvciB0aGUgZnVsbCBsaXN0IG9mIGxldmVscy4KLS5UUCA4Ci0uQiAgXC1cLWdzdFwtZGVidWdcLW5vXC1jb2xvcgotXGZJR1N0cmVhbWVyXGZQIG5vcm1hbGx5IHByaW50cyBkZWJ1Z2dpbmcgbWVzc2FnZXMgc28gdGhhdCB0aGUKLW1lc3NhZ2VzIGFyZSBjb2xvci1jb2RlZCB3aGVuIHByaW50ZWQgdG8gYSB0ZXJtaW5hbCB0aGF0IGhhbmRsZXMKLUFOU0kgZXNjYXBlIHNlcXVlbmNlcy4gIFVzaW5nIHRoaXMgb3B0aW9uIGNhdXNlcyBcZklHU3RyZWFtZXJcZlAKLXRvIHByaW50IG1lc3NhZ2VzIHdpdGhvdXQgY29sb3IuIFNldHRpbmcgdGhlIFxmQkdTVF9ERUJVR19OT19DT0xPUlxmUgotZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBhY2hpZXZlIHRoZSBzYW1lIHRoaW5nLgotLlRQIDgKLS5CICBcLVwtZ3N0XC1kZWJ1Z1wtY29sb3JcLW1vZGUKLVxmSUdTdHJlYW1lclxmUCBub3JtYWxseSBwcmludHMgZGVidWdnaW5nIG1lc3NhZ2VzIHNvIHRoYXQgdGhlCi1tZXNzYWdlcyBhcmUgY29sb3ItY29kZWQgd2hlbiBwcmludGVkIHRvIGEgdGVybWluYWwgdGhhdCBoYW5kbGVzCi1BTlNJIGVzY2FwZSBzZXF1ZW5jZXMgKG9uICpuaXgpLCBvciB1c2VzIFczMiBjb25zb2xlIEFQSSB0byBjb2xvciB0aGUKLW1lc3NhZ2VzIHByaW50ZWQgaW50byBhIGNvbnNvbGUgKG9uIFczMikuIFVzaW5nIHRoaXMgb3B0aW9uIGNhdXNlcwotXGZJR1N0cmVhbWVyXGZQIHRvIHByaW50IG1lc3NhZ2VzIHdpdGhvdXQgY29sb3IgKCdvZmYnIG9yICdkaXNhYmxlJyksCi1wcmludCBtZXNzYWdlcyB3aXRoIGRlZmF1bHQgY29sb3JzICgnb24nIG9yICdhdXRvJyksIG9yIHByaW50IG1lc3NhZ2VzCi11c2luZyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgZm9yIGNvbG9yaW5nICgndW5peCcpLiBTZXR0aW5nIHRoZQotXGZCR1NUX0RFQlVHX0NPTE9SX01PREVcZlIgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBhY2hpZXZlIHRoZSBzYW1lIHRoaW5nLgotLlRQIDgKLS5CICBcLVwtZ3N0XC1kZWJ1Z1wtZGlzYWJsZQotRGlzYWJsZXMgZGVidWdnaW5nLgotLlRQIDgKLS5CICBcLVwtZ3N0XC1kZWJ1Z1wtaGVscAotUHJpbnRzIGEgbGlzdCBvZiBhdmFpbGFibGUgZGVidWcgY2F0ZWdvcmllcyBhbmQgdGhlaXIgZGVmYXVsdCBkZWJ1Z2dpbmcgbGV2ZWwuCi0uVFAgOAotLkIgIFwtXC1nc3RcLXBsdWdpblwtc3BldwotXGZJR1N0cmVhbWVyXGZQIGluZm8gZmxhZ3MgdG8gc2V0Ci1FbmFibGUgcHJpbnRvdXQgb2YgZXJyb3JzIHdoaWxlIGxvYWRpbmcgXGZJR1N0cmVhbWVyXGZQIHBsdWdpbnMKLS5UUCA4Ci0uQiAgXC1cLWdzdFwtcGx1Z2luXC1wYXRoPVBBVEgKLUFkZCBkaXJlY3RvcmllcyBzZXBhcmF0ZWQgd2l0aCAnOicgdG8gdGhlIHBsdWdpbiBzZWFyY2ggcGF0aAotLlRQIDgKLS5CICBcLVwtZ3N0XC1wbHVnaW5cLWxvYWQ9UExVR0lOUwotUHJlbG9hZCBwbHVnaW5zIHNwZWNpZmllZCBpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LiBBbm90aGVyIHdheSB0byBzcGVjaWZ5Ci1wbHVnaW5zIHRvIHByZWxvYWQgaXMgdG8gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHU1RfUExVR0lOX1BBVEgKLQotLlNIICJQSVBFTElORSBERVNDUklQVElPTiIKLQotQSBwaXBlbGluZSBjb25zaXN0cyBcZkllbGVtZW50c1xmUiBhbmQgXGZJbGlua3NcZlIuIFxmSUVsZW1lbnRzXGZSIGNhbiBiZSBwdXQKLWludG8gXGZJYmluc1xmUiBvZiBkaWZmZXJlbnQgc29ydHMuIFxmSUVsZW1lbnRzXGZSLCBcZklsaW5rc1xmUiBhbmQgXGZJYmluc1xmUgotY2FuIGJlIHNwZWNpZmllZCBpbiBhIHBpcGVsaW5lIGRlc2NyaXB0aW9uIGluIGFueSBvcmRlci4KLQotLkIgRWxlbWVudHMKLQotRUxFTUVOVFRZUEUgXGZJW1BST1BFUlRZMSAuLi5dXGZSCi0KLUNyZWF0ZXMgYW4gZWxlbWVudCBvZiB0eXBlIEVMRU1FTlRUWVBFIGFuZCBzZXRzIHRoZSBQUk9QRVJUSUVTLgotCi0uQiBQcm9wZXJ0aWVzCi0KLVBST1BFUlRZPVZBTFVFIC4uLgotCi1TZXRzIHRoZSBwcm9wZXJ0eSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiBZb3UgY2FuIHVzZSBcZkJnc3RcLWluc3BlY3RcZlIoMSkgdG8KLWZpbmQgb3V0IGFib3V0IHByb3BlcnRpZXMgYW5kIGFsbG93ZWQgdmFsdWVzIG9mIGRpZmZlcmVudCBlbGVtZW50cy4KLS5icgotRW51bWVyYXRpb24gcHJvcGVydGllcyBjYW4gYmUgc2V0IGJ5IG5hbWUsIG5pY2sgb3IgdmFsdWUuCi0KLS5CIEJpbnMKLQotXGZJW0JJTlRZUEUuXVxmUiAoIFxmSVtQUk9QRVJUWTEgLi4uXVxmUiBQSVBFTElORS1ERVNDUklQVElPTiApCi0uYnIKLQotU3BlY2lmaWVzIHRoYXQgYSBiaW4gb2YgdHlwZSBCSU5UWVBFIGlzIGNyZWF0ZWQgYW5kIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIGFyZQotc2V0LiBFdmVyeSBlbGVtZW50IGJldHdlZW4gdGhlIGJyYWNlcyBpcyBwdXQgaW50byB0aGUgYmluLiBQbGVhc2Ugbm90ZSB0aGUgZG90Ci10aGF0IGhhcyB0byBiZSB1c2VkIGFmdGVyIHRoZSBCSU5UWVBFLiBZb3Ugd2lsbCBhbG1vc3QgbmV2ZXIgbmVlZCB0aGlzCi1mdW5jdGlvbmFsaXR5LCBpdCBpcyBvbmx5IHJlYWxseSB1c2VmdWwgZm9yIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUKLWdzdF9sYXVuY2hfcGFyc2UoKSBBUEkgd2l0aCAnYmluJyBhcyBiaW50eXBlLiBUaGF0IHdheSBpdCBpcyBwb3NzaWJsZSB0byBidWlsZAotcGFydGlhbCBwaXBlbGluZXMgaW5zdGVhZCBvZiBhIGZ1bGwtZmxlZGdlZCB0b3AtbGV2ZWwgcGlwZWxpbmUuCi0KLS5CIExpbmtzCi0KLVxmSVtbU1JDRUxFTUVOVF0uW1BBRDEsLi4uXV1cZlIgISBcZklbW1NJTktFTEVNRU5UXS5bUEFEMSwuLi5dXVxmUgotXGZJW1tTUkNFTEVNRU5UXS5bUEFEMSwuLi5dXVxmUiAhIENBUFMgISBcZklbW1NJTktFTEVNRU5UXS5bUEFEMSwuLi5dXVxmUgotCi1MaW5rcyB0aGUgZWxlbWVudCB3aXRoIG5hbWUgU1JDRUxFTUVOVCB0byB0aGUgZWxlbWVudCB3aXRoIG5hbWUgU0lOS0VMRU1FTlQsCi11c2luZyB0aGUgY2FwcyBzcGVjaWZpZWQgaW4gQ0FQUyBhcyBhIGZpbHRlci4KLU5hbWVzIGNhbiBiZSBzZXQgb24gZWxlbWVudHMgd2l0aCB0aGUgbmFtZSBwcm9wZXJ0eS4gSWYgdGhlIG5hbWUgaXMgb21pdHRlZCwgdGhlCi1lbGVtZW50IHRoYXQgd2FzIHNwZWNpZmllZCBkaXJlY3RseSBpbiBmcm9udCBvZiBvciBhZnRlciB0aGUgbGluayBpcyB1c2VkLiBUaGlzCi13b3JrcyBhY3Jvc3MgYmlucy4gSWYgYSBwYWRuYW1lIGlzIGdpdmVuLCB0aGUgbGluayBpcyBkb25lIHdpdGggdGhlc2UgcGFkcy4gSWYKLW5vIHBhZCBuYW1lcyBhcmUgZ2l2ZW4gYWxsIHBvc3NpYmlsaXRpZXMgYXJlIHRyaWVkIGFuZCBhIG1hdGNoaW5nIHBhZCBpcyB1c2VkLgotSWYgbXVsdGlwbGUgcGFkbmFtZXMgYXJlIGdpdmVuLCBib3RoIHNpZGVzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgcGFkcwotc3BlY2lmaWVkIGFuZCBtdWx0aXBsZSBsaW5rcyBhcmUgZG9uZSBpbiB0aGUgZ2l2ZW4gb3JkZXIuCi0uYnIKLVNvIHRoZSBzaW1wbGVzdCBsaW5rIGlzIGEgc2ltcGxlIGV4Y2xhbWF0aW9uIG1hcmssIHRoYXQgbGlua3MgdGhlIGVsZW1lbnQgdG8KLXRoZSBsZWZ0IG9mIGl0IHRvIHRoZSBlbGVtZW50IHJpZ2h0IG9mIGl0LgotLmJyCi0KLS5CIENhcHMKLQotTUVESUFUWVBFIFxmSVssIFBST1BFUlRZWywgUFJPUEVSVFkgLi4uXV1dXGZSIFxmSVs7IENBUFNbOyBDQVBTIC4uLl1dXGZSCi0KLUNyZWF0ZXMgYSBjYXBhYmlsaXR5IHdpdGggdGhlIGdpdmVuIG1lZGlhIHR5cGUgYW5kIG9wdGlvbmFsbHkgd2l0aCBnaXZlbgotcHJvcGVydGllcy4gVGhlIG1lZGlhIHR5cGUgY2FuIGJlIGVzY2FwZWQgdXNpbmcgIiBvciAnLgotSWYgeW91IHdhbnQgdG8gY2hhaW4gY2FwcywgeW91IGNhbiBhZGQgbW9yZSBjYXBzIGluIHRoZSBzYW1lIGZvcm1hdCBhZnRlcndhcmRzLgotCi0uQiBQcm9wZXJ0aWVzCi0KLU5BTUU9XGZJWyhUWVBFKV1cZlJWQUxVRQotLmJyCi1pbiBsaXN0cyBhbmQgcmFuZ2VzOiBcZklbKFRZUEUpXVxmUlZBTFVFCi0KLVNldHMgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSBpbiBjYXBhYmlsaXRpZXMuIFRoZSBuYW1lIGlzIGFuIGFscGhhbnVtZXJpYyB2YWx1ZQotYW5kIHRoZSB0eXBlIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgY2FzZS1pbnNlbnNpdGl2ZSB2YWx1ZXM6Ci0uYnIKLS0gXGZCaVxmUiBvciBcZkJpbnRcZlIgZm9yIGludGVnZXIgdmFsdWVzIG9yIHJhbmdlcwotLmJyCi0tIFxmQmZcZlIgb3IgXGZCZmxvYXRcZlIgZm9yIGZsb2F0IHZhbHVlcyBvciByYW5nZXMKLS5icgotLSBcZkJiXGZSLCBcZkJib29sXGZSIG9yIFxmQmJvb2xlYW5cZlIgZm9yIGJvb2xlYW4gdmFsdWVzCi0uYnIKLS0gXGZCc1xmUiwgXGZCc3RyXGZSIG9yIFxmQnN0cmluZ1xmUiBmb3Igc3RyaW5ncwotLmJyCi0tIFxmQmZyYWN0aW9uXGZSIGZvciBmcmFjdGlvbnMgKGZyYW1lcmF0ZSwgcGl4ZWwtYXNwZWN0LXJhdGlvKQotLmJyCi0tIFxmQmxcZlIgb3IgXGZCbGlzdFxmUiBmb3IgbGlzdHMKLS5icgotSWYgbm8gdHlwZSB3YXMgZ2l2ZW4sIHRoZSBmb2xsb3dpbmcgb3JkZXIgaXMgdHJpZWQ6IGludGVnZXIsIGZsb2F0LCBib29sZWFuLAotc3RyaW5nLgotLmJyCi1JbnRlZ2VyIHZhbHVlcyBtdXN0IGJlIHBhcnNhYmxlIGJ5IFxmQnN0cnRvbCgpXGZQLCBmbG9hdHMgYnkgXGZCc3RydG9kKClcZlAuIEZPVVJDQyB2YWx1ZXMgbWF5Ci1laXRoZXIgYmUgaW50ZWdlcnMgb3Igc3RyaW5ncy4gQm9vbGVhbiB2YWx1ZXMgYXJlIChjYXNlIGluc2Vuc2l0aXZlKSBcZkl5ZXNcZlIsCi1cZklub1xmUiwgXGZJdHJ1ZVxmUiBvciBcZklmYWxzZVxmUiBhbmQgbWF5IGxpa2Ugc3RyaW5ncyBiZSBlc2NhcGVkIHdpdGggIiBvciAnLgotLmJyCi1SYW5nZXMgYXJlIGluIHRoaXMgZm9ybWF0OiAgWyBWQUxVRSwgVkFMVUUgXQotLmJyCi1MaXN0cyB1c2UgdGhpcyBmb3JtYXQ6ICAgICAgeyBWQUxVRSBcZklbLCBWQUxVRSAuLi5dXGZSIH0KLQotLlNIICJQSVBFTElORSBFWEFNUExFUyIKLQotVGhlIGV4YW1wbGVzIGJlbG93IGFzc3VtZSB0aGF0IHlvdSBoYXZlIHRoZSBjb3JyZWN0IHBsdWctaW5zIGF2YWlsYWJsZS4KLUluIGdlbmVyYWwsICJwdWxzZXNpbmsiIGNhbiBiZSBzdWJzdGl0dXRlZCB3aXRoIGFub3RoZXIgYXVkaW8gb3V0cHV0Ci1wbHVnLWluIHN1Y2ggYXMgImFsc2FzaW5rIiBvciAib3N4YXVkaW9zaW5rIgotTGlrZXdpc2UsICJ4dmltYWdlc2luayIgY2FuIGJlIHN1YnN0aXR1dGVkIHdpdGggInhpbWFnZXNpbmsiLCAiZ2xpbWFnZXNpbmsiLAotb3IgIm9zeHZpZGVvc2luayIuIEtlZXAgaW4gbWluZCB0aG91Z2ggdGhhdCBkaWZmZXJlbnQgc2lua3MgbWlnaHQKLWFjY2VwdCBkaWZmZXJlbnQgZm9ybWF0cyBhbmQgZXZlbiB0aGUgc2FtZSBzaW5rIG1pZ2h0IGFjY2VwdCBkaWZmZXJlbnQgZm9ybWF0cwotb24gZGlmZmVyZW50IG1hY2hpbmVzLCBzbyB5b3UgbWlnaHQgbmVlZCB0byBhZGQgY29udmVydGVyIGVsZW1lbnRzIGxpa2UKLWF1ZGlvY29udmVydCBhbmQgYXVkaW9yZXNhbXBsZSAoZm9yIGF1ZGlvKSBvciB2aWRlb2NvbnZlcnQgKGZvciB2aWRlbykKLWluIGZyb250IG9mIHRoZSBzaW5rIHRvIG1ha2UgdGhpbmdzIHdvcmsuCi0KLS5CIEF1ZGlvIHBsYXliYWNrCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249bXVzaWMubXAzICEgbWFkICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIHB1bHNlc2luawotLmJyCi1QbGF5IHRoZSBtcDMgbXVzaWMgZmlsZSAibXVzaWMubXAzIiB1c2luZyBhIGxpYm1hZC1iYXNlZCBwbHVnLWluIGFuZAotb3V0cHV0IHRvIGFuIFB1bHNlYXVkaW8gZGV2aWNlCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249bXVzaWMub2dnICEgb2dnZGVtdXggISB2b3JiaXNkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgcHVsc2VzaW5rCi0uYnIKLVBsYXkgYW4gT2dnIFZvcmJpcyBmb3JtYXQgZmlsZQotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBnaW9zcmMgbG9jYXRpb249bXVzaWMubXAzICEgbXBlZ2F1ZGlvcGFyc2UgISBtYWQgISBwdWxzZXNpbmsKLS5icgotLkIKLSAgICAgICAgZ3N0XC1sYXVuY2ggZ2lvc3JjIGxvY2F0aW9uPWh0dHA6Ly9kb21haW4uY29tL211c2ljLm1wMyAhIG1wZWdhdWRpb3BhcnNlICEgbWFkICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIHB1bHNlc2luawotLmJyCi1QbGF5IGFuIG1wMyBmaWxlIG9yIGFuIGh0dHAgc3RyZWFtIHVzaW5nIEdJTwotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBnaW9zcmMgbG9jYXRpb249c21iOi8vY29tcHV0ZXIvbXVzaWMubXAzICEgbXBlZ2F1ZGlvcGFyc2UgISBtYWQgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgcHVsc2VzaW5rCi0uYnIKLVVzZSBHSU8gdG8gcGxheSBhbiBtcDMgZmlsZSBsb2NhdGVkIG9uIGFuIFNNQiBzZXJ2ZXIKLQotLkIgRm9ybWF0IGNvbnZlcnNpb24KLQotLkIKLSAgICAgICAgZ3N0XC1sYXVuY2ggZmlsZXNyYyBsb2NhdGlvbj1tdXNpYy5tcDMgISBtcGVnYXVkaW9wYXJzZSAhIG1hZCAhIGF1ZGlvY29udmVydCAhIHZvcmJpc2VuYyAhIG9nZ211eCAhIGZpbGVzaW5rIGxvY2F0aW9uPW11c2ljLm9nZwotLmJyCi1Db252ZXJ0IGFuIG1wMyBtdXNpYyBmaWxlIHRvIGFuIE9nZyBWb3JiaXMgZmlsZQotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPW11c2ljLm1wMyAhIG1wZWdhdWRpb3BhcnNlICEgbWFkICEgYXVkaW9jb252ZXJ0ICEgZmxhY2VuYyAhIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3QuZmxhYwotLmJyCi1Db252ZXJ0IHRvIHRoZSBGTEFDIGZvcm1hdAotCi0uQiBPdGhlcgotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPW11c2ljLndhdiAhIHdhdnBhcnNlICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIHB1bHNlc2luawotLmJyCi1QbGF5cyBhIC5XQVYgZmlsZSB0aGF0IGNvbnRhaW5zIHJhdyBhdWRpbyBkYXRhIChQQ00pLgotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPW11c2ljLndhdiAhIHdhdnBhcnNlICEgYXVkaW9jb252ZXJ0ICEgdm9yYmlzZW5jICEgb2dnbXV4ICEgZmlsZXNpbmsgbG9jYXRpb249bXVzaWMub2dnCi0uYnIKLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249bXVzaWMud2F2ICEgd2F2cGFyc2UgISBhdWRpb2NvbnZlcnQgISBsYW1lICEgZmlsZXNpbmsgbG9jYXRpb249bXVzaWMubXAzCi0uYnIKLUNvbnZlcnQgYSAuV0FWIGZpbGUgY29udGFpbmluZyByYXcgYXVkaW8gZGF0YSBpbnRvIGFuIE9nZyBWb3JiaXMgb3IgbXAzIGZpbGUKLQotLkIKLSAgICAgICAgZ3N0XC1sYXVuY2ggY2RwYXJhbm9pYXNyYyBtb2RlPWNvbnRpbnVvdXMgISBhdWRpb2NvbnZlcnQgISBsYW1lICEgbXBlZ2F1ZGlvcGFyc2UgISBpZDN2Mm11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPWNkLm1wMwotLmJyCi1yaXBzIGFsbCB0cmFja3MgZnJvbSBjb21wYWN0IGRpc2MgYW5kIGNvbnZlcnQgdGhlbSBpbnRvIGEgc2luZ2xlIG1wMyBmaWxlCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIGNkcGFyYW5vaWFzcmMgdHJhY2s9NSAhIGF1ZGlvY29udmVydCAhIGxhbWUgISBtcGVnYXVkaW9wYXJzZSAhIGlkM3YybXV4ICEgZmlsZXNpbmsgbG9jYXRpb249dHJhY2s1Lm1wMwotLmJyCi1yaXBzIHRyYWNrIDUgZnJvbSB0aGUgQ0QgYW5kIGNvbnZlcnRzIGl0IGludG8gYSBzaW5nbGUgbXAzIGZpbGUKLQotVXNpbmcgXGZCZ3N0XC1pbnNwZWN0XGZSKDEpLCBpdCBpcyBwb3NzaWJsZSB0byBkaXNjb3ZlciBzZXR0aW5ncyBsaWtlIHRoZSBhYm92ZQotZm9yIGNkcGFyYW5vaWFzcmMgdGhhdCB3aWxsIHRlbGwgaXQgdG8gcmlwIHRoZSBlbnRpcmUgY2Qgb3Igb25seSB0cmFja3Mgb2YgaXQuCi1BbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBhbiBVUkkgYW5kIGdzdC1sYXVuY2ggd2lsbCBmaW5kIGFuIGVsZW1lbnQgKHN1Y2ggYXMKLWNkcGFyYW5vaWEpIHRoYXQgc3VwcG9ydHMgdGhhdCBwcm90b2NvbCBmb3IgeW91LCBlLmcuOgotLkIKLSAgICAgICBnc3RcLWxhdW5jaCBjZGRhOi8vNSAhIGxhbWUgdmJyPW5ldyB2YnItcXVhbGl0eT02ICEgZmlsZXNpbmsgbG9jYXRpb249dHJhY2s1Lm1wMwotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBwdWxzZXNyYyAhIGF1ZGlvY29udmVydCAhIHZvcmJpc2VuYyAhIG9nZ211eCAhIGZpbGVzaW5rIGxvY2F0aW9uPWlucHV0Lm9nZwotLmJyCi1yZWNvcmRzIHNvdW5kIGZyb20geW91ciBhdWRpbyBpbnB1dCBhbmQgZW5jb2RlcyBpdCBpbnRvIGFuIG9nZyBmaWxlCi0KLS5CIFZpZGVvCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249SkJfRkY5X1RoZUdyYXZpdHlPZkxvdmUubXBnICEgZHZkZGVtdXggISBtcGVndmlkZW9wYXJzZSAhIG1wZWcyZGVjICEgeHZpbWFnZXNpbmsKLS5icgotRGlzcGxheSBvbmx5IHRoZSB2aWRlbyBwb3J0aW9uIG9mIGFuIE1QRUctMSB2aWRlbyBmaWxlLCBvdXRwdXR0aW5nIHRvCi1hbiBYIGRpc3BsYXkgd2luZG93Ci0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249L2ZsZmxmai52b2IgISBkdmRkZW11eCAhIG1wZWd2aWRlb3BhcnNlICEgbXBlZzJkZWMgISBzZGx2aWRlb3NpbmsKLS5icgotRGlzcGxheSB0aGUgdmlkZW8gcG9ydGlvbiBvZiBhIC52b2IgZmlsZSAodXNlZCBvbiBEVkRzKSwgb3V0cHV0dGluZyB0bwotYW4gU0RMIHdpbmRvdwotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPW1vdmllLm1wZyAhIGR2ZGRlbXV4IG5hbWU9ZGVtdXhlciAgZGVtdXhlci4gISBxdWV1ZSAhIG1wZWd2aWRlb3BhcnNlICEgbXBlZzJkZWMgISBzZGx2aWRlb3NpbmsgIGRlbXV4ZXIuICEgcXVldWUgISBtcGVnYXVkaW9wYXJzZSAhIG1hZCAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBwdWxzZXNpbmsKLS5icgotUGxheSBib3RoIHZpZGVvIGFuZCBhdWRpbyBwb3J0aW9ucyBvZiBhbiBNUEVHIG1vdmllCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIGZpbGVzcmMgbG9jYXRpb249bW92aWUubXBnICEgbXBlZ2RlbXV4IG5hbWU9ZGVtdXhlciBkZW11eGVyLiAhIHF1ZXVlICEgbXBlZ3ZpZGVvcGFyc2UgISBtcGVnMmRlYyAhIHZpZGVvY29udmVydCAhIHNkbHZpZGVvc2luayAgIGRlbXV4ZXIuICEgcXVldWUgISBtcGVnYXVkaW9wYXJzZSAhIG1hZCAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBwdWxzZXNpbmsKLS5icgotUGxheSBhbiBBVkkgbW92aWUgd2l0aCBhbiBleHRlcm5hbCB0ZXh0IHN1YnRpdGxlIHN0cmVhbQotCi1UaGlzIGV4YW1wbGUgYWxzbyBzaG93cyBob3cgdG8gcmVmZXIgdG8gc3BlY2lmaWMgcGFkcyBieSBuYW1lIGlmIGFuIGVsZW1lbnQKLShoZXJlOiB0ZXh0b3ZlcmxheSkgaGFzIG11bHRpcGxlIHNpbmsgb3Igc291cmNlIHBhZHMuCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIHRleHRvdmVybGF5IG5hbWU9b3ZlcmxheSAhIHZpZGVvY29udmVydCAhIHZpZGVvc2NhbGUgISAgYXV0b3ZpZGVvc2luayAgIGZpbGVzcmMgbG9jYXRpb249bW92aWUuYXZpICEgZGVjb2RlYmluICEgdmlkZW9jb252ZXJ0ICEgb3ZlcmxheS52aWRlb19zaW5rICAgZmlsZXNyYyBsb2NhdGlvbj1tb3ZpZS5zcnQgISBzdWJwYXJzZSAhIG92ZXJsYXkudGV4dF9zaW5rCi0KLS5icgotUGxheSBhbiBBVkkgbW92aWUgd2l0aCBhbiBleHRlcm5hbCB0ZXh0IHN1YnRpdGxlIHN0cmVhbSB1c2luZyBwbGF5YmluCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIHBsYXliaW4gdXJpPWZpbGU6Ly8vcGF0aC90by9tb3ZpZS5hdmkgc3VidXJpPWZpbGU6Ly8vcGF0aC90by9tb3ZpZS5zcnQKLQotLkIgTmV0d29yayBzdHJlYW1pbmcKLQotU3RyZWFtIHZpZGVvIHVzaW5nIFJUUCBhbmQgbmV0d29yayBlbGVtZW50cy4KLQotLkIKLSAgICAgICAgZ3N0XC1sYXVuY2ggdjRsMnNyYyAhIHZpZGVvL3gtcmF3LHdpZHRoPTEyOCxoZWlnaHQ9OTYsZm9ybWF0PVVZVlkgISB2aWRlb2NvbnZlcnQgISBmZmVuY19oMjYzICEgdmlkZW8veC1oMjYzICEgcnRwaDI2M3BwYXkgcHQ9OTYgISB1ZHBzaW5rIGhvc3Q9MTkyLjE2OC4xLjEgcG9ydD01MDAwCi0uYnIKLVRoaXMgY29tbWFuZCB3b3VsZCBiZSBydW4gb24gdGhlIHRyYW5zbWl0dGVyCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIHVkcHNyYyBwb3J0PTUwMDAgISBhcHBsaWNhdGlvbi94LXJ0cCwgY2xvY2stcmF0ZT05MDAwMCxwYXlsb2FkPTk2ICEgcnRwaDI2M3BkZXBheSBxdWV1ZS1kZWxheT0wICEgZmZkZWNfaDI2MyAhIHh2aW1hZ2VzaW5rCi0uYnIKLVVzZSB0aGlzIGNvbW1hbmQgb24gdGhlIHJlY2VpdmVyCi0KLS5CIERpYWdub3N0aWMKLQotLkIKLSAgICAgICAgZ3N0XC1sYXVuY2ggLXYgZmFrZXNyYyBudW0tYnVmZmVycz0xNiAhIGZha2VzaW5rCi0uYnIKLUdlbmVyYXRlIGEgbnVsbCBzdHJlYW0gYW5kIGlnbm9yZSBpdCAoYW5kIHByaW50IG91dCBkZXRhaWxzKS4KLQotLkIKLSAgICAgICAgZ3N0XC1sYXVuY2ggYXVkaW90ZXN0c3JjICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIHB1bHNlc2luawotLmJyCi1HZW5lcmF0ZSBhIHB1cmUgc2luZSB0b25lIHRvIHRlc3QgdGhlIGF1ZGlvIG91dHB1dAotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCB2aWRlb3Rlc3RzcmMgISB4dmltYWdlc2luawotLmJyCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCB2aWRlb3Rlc3RzcmMgISB4aW1hZ2VzaW5rCi0uYnIKLUdlbmVyYXRlIGEgZmFtaWxpYXIgdGVzdCBwYXR0ZXJuIHRvIHRlc3QgdGhlIHZpZGVvIG91dHB1dAotCi0uQiBBdXRvbWF0aWMgbGlua2luZwotCi1Zb3UgY2FuIHVzZSB0aGUgZGVjb2RlYmluIGVsZW1lbnQgdG8gYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIHJpZ2h0IGVsZW1lbnRzCi10byBnZXQgYSB3b3JraW5nIHBpcGVsaW5lLgotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPW11c2ljZmlsZSAhIGRlY29kZWJpbiAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBwdWxzZXNpbmsKLS5icgotUGxheSBhbnkgc3VwcG9ydGVkIGF1ZGlvIGZvcm1hdAotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBmaWxlc3JjIGxvY2F0aW9uPXZpZGVvZmlsZSAhIGRlY29kZWJpbiBuYW1lPWRlY29kZXIgZGVjb2Rlci4gISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBwdWxzZXNpbmsgICBkZWNvZGVyLiAhICB2aWRlb2NvbnZlcnQgISB4dmltYWdlc2luawotLmJyCi1QbGF5IGFueSBzdXBwb3J0ZWQgdmlkZW8gZm9ybWF0IHdpdGggdmlkZW8gYW5kIGF1ZGlvIG91dHB1dC4gVGhyZWFkcyBhcmUgdXNlZAotYXV0b21hdGljYWxseS4gVG8gbWFrZSB0aGlzIGV2ZW4gZWFzaWVyLCB5b3UgY2FuIHVzZSB0aGUgcGxheWJpbiBlbGVtZW50OgotCi0uQgotICAgICAgICBnc3RcLWxhdW5jaCBwbGF5YmluIHVyaT1maWxlOi8vL2hvbWUvam9lL2Zvby5hdmkKLS5icgotCi0KLS5CIEZpbHRlcmVkIGNvbm5lY3Rpb25zCi0KLVRoZXNlIGV4YW1wbGVzIHNob3cgeW91IGhvdyB0byB1c2UgZmlsdGVyZWQgY2Fwcy4KLQotLkIKLSAgICAgICAgZ3N0XC1sYXVuY2ggdmlkZW90ZXN0c3JjICEgJ3ZpZGVvL3gtcmF3LGZvcm1hdD1ZVVkyO3ZpZGVvL3gtcmF3LGZvcm1hdD1ZVjEyJyAhIHh2aW1hZ2VzaW5rCi0uYnIKLVNob3cgYSB0ZXN0IGltYWdlIGFuZCB1c2UgdGhlIFlVWTIgb3IgWVYxMiB2aWRlbyBmb3JtYXQgZm9yIHRoaXMuCi0KLS5CCi0gICAgICAgIGdzdFwtbGF1bmNoIHB1bHNlc3JjICEgICdhdWRpby94LXJhdyxyYXRlPVszMjAwMCw2NDAwMF0sZm9ybWF0PXtTMTZMRSxTMjRMRSxTMzJMRX0nICEgd2F2ZW5jICEgZmlsZXNpbmsgbG9jYXRpb249cmVjb3JkaW5nLndhdgotLmJyCi1yZWNvcmQgYXVkaW8gYW5kIHdyaXRlIGl0IHRvIGEgLndhdiBmaWxlLiBGb3JjZSB1c2FnZSBvZiBzaWduZWQgMTYgdG8gMzIgYml0Ci1zYW1wbGVzIGFuZCBhIHNhbXBsZSByYXRlIGJldHdlZW4gMzJrSHogYW5kIDY0S0h6LgotCi0KLS5TSCAiRU5WSVJPTk1FTlQgVkFSSUFCTEVTIgotLlRQCi1cZkJHU1RfREVCVUdcZlIKLUNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlYnVnIGNhdGVnb3JpZXMgYW5kIGxldmVscyAoZS5nLgotR1NUX0RFQlVHPXRvdGVtOjQsdHlwZWZpbmQ6NSkuICcqJyBpcyBhbGxvd2VkIGFzIGEgd2lsZGNhcmQgYXMgcGFydCBvZgotZGVidWcgY2F0ZWdvcnkgbmFtZXMgKGUuZy4gR1NUX0RFQlVHPSpzaW5rOjYsKmF1ZGlvKjo2KS4gU2luY2UgMS4yLjAgaXQgaXMKLWFsc28gcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgbG9nIGxldmVsIGJ5IG5hbWUgKDE9RVJST1IsIDI9V0FSTiwgMz1GSVhNRSwKLTQ9SU5GTywgNT1ERUJVRywgNj1MT0csIDc9VFJBQ0UsIDk9TUVNRFVNUCkgKGUuZy4gR1NUX0RFQlVHPSphdWRpbyo6TE9HKQotLlRQCi1cZkJHU1RfREVCVUdfTk9fQ09MT1JcZlIKLVdoZW4gdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGNvbG91cmVkIGRlYnVnIG91dHB1dCBpcyBkaXNhYmxlZC4KLS5UUAotXGZCR1NUX0RFQlVHX0RVTVBfRE9UX0RJUlxmUgotV2hlbiBzZXQgdG8gYSBmaWxlc3lzdGVtIHBhdGgsIHN0b3JlICdkb3QnIGZpbGVzIG9mIHBpcGVsaW5lIGdyYXBocyB0aGVyZS4KLVRoZXNlIGNhbiB0aGVuIGxhdGVyIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGltYWdlIHVzaW5nIHRoZSAnZG90JyB1dGlsaXR5IGZyb20KLXRoZSBncmFwaHZpeiBzZXQgb2YgdG9vbHMsIGxpa2UgdGhpczogZG90IGZvby5kb3QgLVRzdmcgLW8gZm9vLnN2ZyAocG5nIG9yIGpwZwotYXJlIGFsc28gcG9zc2libGUgYXMgb3V0cHV0IGZvcm1hdCkuIFRoZXJlIGlzIGFsc28gYSB1dGlsaXR5IGNhbGxlZCAneGRvdCcKLXdoaWNoIGFsbG93cyB5b3UgdG8gdmlldyB0aGUgLmRvdCBmaWxlIGRpcmVjdGx5IHdpdGhvdXQgY29udmVydGluZyBpdCBmaXJzdC4KLS5UUAotXGZCR1NUX1JFR0lTVFJZXGZSCi1QYXRoIG9mIHRoZSBwbHVnaW4gcmVnaXN0cnkgZmlsZS4gRGVmYXVsdCBpcwotfi8uY2FjaGUvZ3N0cmVhbWVyLUdTVF9BUElfVkVSU0lPTi9yZWdpc3RyeS1DUFUuYmluIHdoZXJlIENQVSBpcyB0aGUKLW1hY2hpbmUvY3B1IHR5cGUgR1N0cmVhbWVyIHdhcyBjb21waWxlZCBmb3IsIGUuZy4gJ2k0ODYnLCAnaTY4NicsICd4ODYtNjQnLAotJ3BwYycsIGV0Yy4gKGNoZWNrIHRoZSBvdXRwdXQgb2YgInVuYW1lIC1pIiBhbmQgInVuYW1lIC1tIiBmb3IgZGV0YWlscykuCi0uVFAKLVxmQkdTVF9SRUdJU1RSWV9VUERBVEVcZlIKLVNldCB0byAibm8iIHRvIGZvcmNlIEdTdHJlYW1lciB0byBhc3N1bWUgdGhhdCBubyBwbHVnaW5zIGhhdmUgY2hhbmdlZCwKLWJlZW4gYWRkZWQgb3IgYmVlbiByZW1vdmVkLiBUaGlzIHdpbGwgbWFrZSBHU3RyZWFtZXIgc2tpcCB0aGUgaW5pdGlhbCBjaGVjawotd2hldGhlciBhIHJlYnVpbGQgb2YgdGhlIHJlZ2lzdHJ5IGNhY2hlIGlzIHJlcXVpcmVkIG9yIG5vdC4gVGhpcyBtYXkgYmUgdXNlZnVsCi1pbiBlbWJlZGRlZCBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGluc3RhbGxlZCBwbHVnaW5zIG5ldmVyIGNoYW5nZS4gRG8gbm90Ci11c2UgdGhpcyBvcHRpb24gaW4gYW55IG90aGVyIHNldHVwLgotLlRQCi1cZkJHU1RfUExVR0lOX1BBVEhcZlIKLVNwZWNpZmllcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2NhbiBmb3IgYWRkaXRpb25hbCBwbHVnaW5zLgotVGhlc2UgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHN5c3RlbSBwbHVnaW5zLgotLlRQCi1cZkJHU1RfUExVR0lOX1NZU1RFTV9QQVRIXGZSCi1TcGVjaWZpZXMgYSBsaXN0IG9mIHBsdWdpbnMgdGhhdCBhcmUgYWx3YXlzIGxvYWRlZCBieSBkZWZhdWx0LiAgSWYgbm90IHNldCwKLXRoaXMgZGVmYXVsdHMgdG8gdGhlIHN5c3RlbS1pbnN0YWxsZWQgcGF0aCwgYW5kIHRoZSBwbHVnaW5zIGluc3RhbGxlZCBpbiB0aGUKLXVzZXIncyBob21lIGRpcmVjdG9yeQotLlRQCi1cZkJHU1RfREVCVUdfRklMRVxmUgotU2V0IHRoaXMgdmFyaWFibGUgdG8gYSBmaWxlIHBhdGggdG8gcmVkaXJlY3QgYWxsIEdTdHJlYW1lciBkZWJ1ZwotbWVzc2FnZXMgdG8gdGhpcyBmaWxlLiBJZiBsZWZ0IHVuc2V0LCBkZWJ1ZyBtZXNzYWdlcyB3aXRoIGJlIG91dHB1dAotdW50byB0aGUgc3RhbmRhcmQgZXJyb3IuCi0uVFAKLVxmQk9SQ19DT0RFXGZSCi1Vc2VmdWwgT3JjIGVudmlyb25tZW50IHZhcmlhYmxlLiBTZXQgT1JDX0NPREU9ZGVidWcgdG8gZW5hYmxlIGRlYnVnZ2Vycwotc3VjaCBhcyBnZGIgdG8gY3JlYXRlIHVzZWZ1bCBiYWNrdHJhY2VzIGZyb20gT3JjLWdlbmVyYXRlZCBjb2RlLiAgU2V0Ci1PUkNfQ09ERT1iYWNrdXAgb3IgT1JDX0NPREU9ZW11bGF0ZSBpZiB5b3Ugc3VzcGVjdCBPcmMncyBTSU1EIGNvZGUKLWdlbmVyYXRvciBpcyBwcm9kdWNpbmcgaW5jb3JyZWN0IGNvZGUuICAoUXVpdGUgYSBmZXcgaW1wb3J0YW50Ci1HU3RyZWFtZXIgcGx1Z2lucyBsaWtlIHZpZGVvdGVzdHNyYywgYXVkaW9jb252ZXJ0IG9yIGF1ZGlvcmVzYW1wbGUgdXNlIE9yYykuCi0uVFAKLVxmQkdfREVCVUdcZlIKLVVzZWZ1bCBHTGliIGVudmlyb25tZW50IHZhcmlhYmxlLiBTZXQgR19ERUJVRz1mYXRhbF93YXJuaW5ncyB0byBtYWtlCi1HU3RyZWFtZXIgcHJvZ3JhbXMgYWJvcnQgd2hlbiBhIGNyaXRpY2FsIHdhcm5pbmcgc3VjaCBhcyBhbiBhc3NlcnRpb24gZmFpbHVyZQotb2NjdXJzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaW5kIG91dCB3aGljaCBwYXJ0IG9mIHRoZSBjb2RlIGNhdXNlZAotdGhhdCB3YXJuaW5nIHRvIGJlIHRyaWdnZXJlZCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLiBTaW1wbHkgc2V0IEdfREVCVUcKLWFzIG1lbnRpb25lZCBhYm92ZSBhbmQgcnVuIHRoZSBwcm9ncmFtIGluIGdkYiAob3IgbGV0IGl0IGNvcmUgZHVtcCkuIFRoZW4gZ2V0Ci1hIHN0YWNrIHRyYWNlIGluIHRoZSB1c3VhbCB3YXkuCi0uCi0uU0ggRklMRVMKLS5UUCA4Ci1+Ly5jYWNoZS9nc3RyZWFtZXItR1NUX0FQSV9WRVJTSU9OL3JlZ2lzdHJ5LSouYmluCi1UaGUgcGx1Z2luIGNhY2hlOyBjYW4gYmUgZGVsZXRlZCBhdCBhbnkgdGltZSwgd2lsbCBiZSByZS1jcmVhdGVkCi1hdXRvbWF0aWNhbGx5IHdoZW4gaXQgZG9lcyBub3QgZXhpc3QgeWV0IG9yIHBsdWdpbnMgY2hhbmdlLiBCYXNlZCBvbgotWERHX0NBQ0hFX0RJUiwgc28gbWF5IGJlIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uIHRoYW4gdGhlIG9uZSBzdWdnZXN0ZWQuCi0uCi0uU0ggIlNFRSBBTFNPIgotLkJSIGdzdFwtaW5zcGVjdFwtR1NUX0FQSV9WRVJTSU9OICgxKSwKLS5CUiBnc3RcLWxhdW5jaFwtR1NUX0FQSV9WRVJTSU9OICgxKSwKLS5TSCAiQVVUSE9SIgotVGhlIEdTdHJlYW1lciB0ZWFtIGF0IGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLwpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3N0LWxhdW5jaC5jIGIvdG9vbHMvZ3N0LWxhdW5jaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWY5ZWY3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2dzdC1sYXVuY2guYworKysgL2Rldi9udWxsCkBAIC0xLDEyMzcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgMjAwNCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLSAqCi0gKiBnc3QtbGF1bmNoLmM6IHRvb2wgdG8gbGF1bmNoIEdTdHJlYW1lciBwaXBlbGluZXMgZnJvbSB0aGUgY29tbWFuZCBsaW5lCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZmRlZiBHX09TX1VOSVgKLSNpbmNsdWRlIDxnbGliLXVuaXguaD4KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2VsaWYgZGVmaW5lZCAoR19PU19XSU4zMikKLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGxvY2FsZS5oPiAgICAgICAgICAgICAvKiBmb3IgTENfQUxMICovCi0jaW5jbHVkZSAidG9vbHMuaCIKLQotZXh0ZXJuIHZvbGF0aWxlIGdib29sZWFuIGdsaWJfb25fZXJyb3JfaGFsdDsKLQotI2lmZGVmIEdfT1NfVU5JWAotc3RhdGljIHZvaWQgZmF1bHRfcmVzdG9yZSAodm9pZCk7Ci1zdGF0aWMgdm9pZCBmYXVsdF9zcGluICh2b2lkKTsKLSNlbmRpZgotCi0vKiBldmVudF9sb29wIHJldHVybiBjb2RlcyAqLwotdHlwZWRlZiBlbnVtIF9FdmVudExvb3BSZXN1bHQKLXsKLSAgRUxSX05PX0VSUk9SID0gMCwKLSAgRUxSX0VSUk9SLAotICBFTFJfSU5URVJSVVBUCi19IEV2ZW50TG9vcFJlc3VsdDsKLQotc3RhdGljIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotc3RhdGljIEV2ZW50TG9vcFJlc3VsdCBjYXVnaHRfZXJyb3IgPSBFTFJfTk9fRVJST1I7Ci1zdGF0aWMgZ2Jvb2xlYW4gcXVpZXQgPSBGQUxTRTsKLXN0YXRpYyBnYm9vbGVhbiB0YWdzID0gRkFMU0U7Ci1zdGF0aWMgZ2Jvb2xlYW4gdG9jID0gRkFMU0U7Ci1zdGF0aWMgZ2Jvb2xlYW4gbWVzc2FnZXMgPSBGQUxTRTsKLXN0YXRpYyBnYm9vbGVhbiBpc19saXZlID0gRkFMU0U7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2FpdGluZ19lb3MgPSBGQUxTRTsKLXN0YXRpYyBnY2hhciAqKmV4Y2x1ZGVfYXJncyA9IE5VTEw7Ci0KLS8qIGNvbnZlbmllbmNlIG1hY3JvIHNvIHdlIGRvbid0IGhhdmUgdG8gbGl0dGVyIHRoZSBjb2RlIHdpdGggaWYoIXF1aWV0KSAqLwotI2RlZmluZSBQUklOVCBpZighcXVpZXQpZ19wcmludAotCi0jaWZkZWYgR19PU19VTklYCi1zdGF0aWMgdm9pZAotZmF1bHRfaGFuZGxlcl9zaWdoYW5kbGVyIChpbnQgc2lnbnVtKQotewotICBmYXVsdF9yZXN0b3JlICgpOwotCi0gIC8qIHByaW50ZiBpcyB1c2VkIGluc3RlYWQgb2YgZ19wcmludCgpLCBzaW5jZSBpdCdzIGxlc3MgbGlrZWx5IHRvCi0gICAqIGRlYWRsb2NrICovCi0gIHN3aXRjaCAoc2lnbnVtKSB7Ci0gICAgY2FzZSBTSUdTRUdWOgotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQ2F1Z2h0IFNJR1NFR1ZcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSUdRVUlUOgotICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgcHJpbnRmICgiQ2F1Z2h0IFNJR1FVSVRcbiIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgInNpZ25vOiAgJWRcbiIsIHNpZ251bSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGZhdWx0X3NwaW4gKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mYXVsdF9zcGluICh2b2lkKQotewotICBpbnQgc3Bpbm5pbmcgPSBUUlVFOwotCi0gIGdsaWJfb25fZXJyb3JfaGFsdCA9IEZBTFNFOwotICBnX29uX2Vycm9yX3N0YWNrX3RyYWNlICgiZ3N0LWxhdW5jaC0iIEdTVF9BUElfVkVSU0lPTik7Ci0KLSAgd2FpdCAoTlVMTCk7Ci0KLSAgLyogRklYTUUgaG93IGRvIHdlIGtub3cgaWYgd2Ugd2VyZSBydW4gYnkgbGlidG9vbD8gKi8KLSAgZnByaW50ZiAoc3RkZXJyLAotICAgICAgIlNwaW5uaW5nLiAgUGxlYXNlIHJ1biAnZ2RiIGdzdC1sYXVuY2gtIiBHU1RfQVBJX1ZFUlNJT04gIiAlZCcgdG8gIgotICAgICAgImNvbnRpbnVlIGRlYnVnZ2luZywgQ3RybC1DIHRvIHF1aXQsIG9yIEN0cmwtXFwgdG8gZHVtcCBjb3JlLlxuIiwKLSAgICAgIChnaW50KSBnZXRwaWQgKCkpOwotICB3aGlsZSAoc3Bpbm5pbmcpCi0gICAgZ191c2xlZXAgKDEwMDAwMDApOwotfQotCi1zdGF0aWMgdm9pZAotZmF1bHRfcmVzdG9yZSAodm9pZCkKLXsKLSAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0KLSAgbWVtc2V0ICgmYWN0aW9uLCAwLCBzaXplb2YgKGFjdGlvbikpOwotICBhY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7Ci0KLSAgc2lnYWN0aW9uIChTSUdTRUdWLCAmYWN0aW9uLCBOVUxMKTsKLSAgc2lnYWN0aW9uIChTSUdRVUlULCAmYWN0aW9uLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLWZhdWx0X3NldHVwICh2b2lkKQotewotICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLQotICBtZW1zZXQgKCZhY3Rpb24sIDAsIHNpemVvZiAoYWN0aW9uKSk7Ci0gIGFjdGlvbi5zYV9oYW5kbGVyID0gZmF1bHRfaGFuZGxlcl9zaWdoYW5kbGVyOwotCi0gIHNpZ2FjdGlvbiAoU0lHU0VHViwgJmFjdGlvbiwgTlVMTCk7Ci0gIHNpZ2FjdGlvbiAoU0lHUVVJVCwgJmFjdGlvbiwgTlVMTCk7Ci19Ci0jZW5kaWYgLyogR19PU19VTklYICovCi0KLSNpZiAwCi10eXBlZGVmIHN0cnVjdCBfR3N0SW5kZXhTdGF0cwotewotICBnaW50IGlkOwotICBnY2hhciAqZGVzYzsKLQotICBndWludCBudW1fZnJhbWVzOwotICBndWludCBudW1fa2V5ZnJhbWVzOwotICBndWludCBudW1fZGx0ZnJhbWVzOwotICBHc3RDbG9ja1RpbWUgbGFzdF9rZXlmcmFtZTsKLSAgR3N0Q2xvY2tUaW1lIGxhc3RfZGx0ZnJhbWU7Ci0gIEdzdENsb2NrVGltZSBtaW5fa2V5ZnJhbWVfZ2FwOwotICBHc3RDbG9ja1RpbWUgbWF4X2tleWZyYW1lX2dhcDsKLSAgR3N0Q2xvY2tUaW1lIGF2Z19rZXlmcmFtZV9nYXA7Ci19IEdzdEluZGV4U3RhdHM7Ci0KLXN0YXRpYyB2b2lkCi1lbnRyeV9hZGRlZCAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdQdHJBcnJheSAqaW5kZXhfc3RhdHMgPSAoR1B0ckFycmF5ICopIHVzZXJfZGF0YTsKLSAgR3N0SW5kZXhTdGF0cyAqczsKLQotICBzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0gICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfSUQ6Ci0gICAgICAvKiB3ZSBoYXZlIGEgbmV3IHdyaXRlciAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaW5kZXgsICJpZCAlZDogZGVzY3JpYmVzIHdyaXRlciAlcyIsIGVudHJ5LT5pZCwKLSAgICAgICAgICBHU1RfSU5ERVhfSURfREVTQ1JJUFRJT04gKGVudHJ5KSk7Ci0gICAgICBpZiAoZW50cnktPmlkID49IGluZGV4X3N0YXRzLT5sZW4pIHsKLSAgICAgICAgZ19wdHJfYXJyYXlfc2V0X3NpemUgKGluZGV4X3N0YXRzLCBlbnRyeS0+aWQgKyAxKTsKLSAgICAgIH0KLSAgICAgIHMgPSBnX25ldyAoR3N0SW5kZXhTdGF0cywgMSk7Ci0gICAgICBzLT5pZCA9IGVudHJ5LT5pZDsKLSAgICAgIHMtPmRlc2MgPSBnX3N0cmR1cCAoR1NUX0lOREVYX0lEX0RFU0NSSVBUSU9OIChlbnRyeSkpOwotICAgICAgcy0+bnVtX2ZyYW1lcyA9IHMtPm51bV9rZXlmcmFtZXMgPSBzLT5udW1fZGx0ZnJhbWVzID0gMDsKLSAgICAgIHMtPmxhc3Rfa2V5ZnJhbWUgPSBzLT5sYXN0X2RsdGZyYW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIHMtPm1pbl9rZXlmcmFtZV9nYXAgPSBzLT5tYXhfa2V5ZnJhbWVfZ2FwID0gcy0+YXZnX2tleWZyYW1lX2dhcCA9Ci0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIGdfcHRyX2FycmF5X2luZGV4IChpbmRleF9zdGF0cywgZW50cnktPmlkKSA9IHM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9GT1JNQVQ6Ci0gICAgICAvKiBoYXZlIG5vdCBmb3VuZCBhbnkgY29kZSBjYWxsaW5nIHRoaXMgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGluZGV4LCAiaWQgJWQ6IHJlZ2lzdGVyZWQgZm9ybWF0ICVkIGZvciAlc1xuIiwKLSAgICAgICAgICBlbnRyeS0+aWQsIEdTVF9JTkRFWF9GT1JNQVRfRk9STUFUIChlbnRyeSksCi0gICAgICAgICAgR1NUX0lOREVYX0ZPUk1BVF9LRVkgKGVudHJ5KSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9BU1NPQ0lBVElPTjoKLSAgICB7Ci0gICAgICBnaW50NjQgdHM7Ci0gICAgICBHc3RBc3NvY0ZsYWdzIGZsYWdzID0gR1NUX0lOREVYX0FTU09DX0ZMQUdTIChlbnRyeSk7Ci0KLSAgICAgIHMgPSBnX3B0cl9hcnJheV9pbmRleCAoaW5kZXhfc3RhdHMsIGVudHJ5LT5pZCk7Ci0gICAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChlbnRyeSwgR1NUX0ZPUk1BVF9USU1FLCAmdHMpOwotCi0gICAgICBpZiAoZmxhZ3MgJiBHU1RfQVNTT0NJQVRJT05fRkxBR19LRVlfVU5JVCkgewotICAgICAgICBzLT5udW1fa2V5ZnJhbWVzKys7Ci0KLSAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0cykpIHsKLSAgICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHMtPmxhc3Rfa2V5ZnJhbWUpKSB7Ci0gICAgICAgICAgICBHc3RDbG9ja1RpbWVEaWZmIGQgPSBHU1RfQ0xPQ0tfRElGRiAocy0+bGFzdF9rZXlmcmFtZSwgdHMpOwotCi0gICAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoZCA8IDApKSB7Ci0gICAgICAgICAgICAgIEdTVF9XQVJOSU5HICgicmVjZWl2ZWQgb3V0LW9mLW9yZGVyIGtleWZyYW1lIGF0ICUiCi0gICAgICAgICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRzKSk7Ci0gICAgICAgICAgICAgIC8qIEZJWE1FOiBkb2VzIGl0IHN0aWxsIG1ha2Ugc2Vuc2UgdG8gdXNlIHRoYXQgZm9yIHRoZSBzdGF0aXN0aWNzICovCi0gICAgICAgICAgICAgIGQgPSBHU1RfQ0xPQ0tfRElGRiAodHMsIHMtPmxhc3Rfa2V5ZnJhbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHMtPm1pbl9rZXlmcmFtZV9nYXApKSB7Ci0gICAgICAgICAgICAgIGlmIChkIDwgcy0+bWluX2tleWZyYW1lX2dhcCkKLSAgICAgICAgICAgICAgICBzLT5taW5fa2V5ZnJhbWVfZ2FwID0gZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHMtPm1pbl9rZXlmcmFtZV9nYXAgPSBkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzLT5tYXhfa2V5ZnJhbWVfZ2FwKSkgewotICAgICAgICAgICAgICBpZiAoZCA+IHMtPm1heF9rZXlmcmFtZV9nYXApCi0gICAgICAgICAgICAgICAgcy0+bWF4X2tleWZyYW1lX2dhcCA9IGQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBzLT5tYXhfa2V5ZnJhbWVfZ2FwID0gZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocy0+YXZnX2tleWZyYW1lX2dhcCkpIHsKLSAgICAgICAgICAgICAgcy0+YXZnX2tleWZyYW1lX2dhcCA9IChkICsgcy0+bnVtX2ZyYW1lcyAqIHMtPmF2Z19rZXlmcmFtZV9nYXApIC8KLSAgICAgICAgICAgICAgICAgIChzLT5udW1fZnJhbWVzICsgMSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBzLT5hdmdfa2V5ZnJhbWVfZ2FwID0gZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcy0+bGFzdF9rZXlmcmFtZSA9IHRzOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoZmxhZ3MgJiBHU1RfQVNTT0NJQVRJT05fRkxBR19ERUxUQV9VTklUKSB7Ci0gICAgICAgIHMtPm51bV9kbHRmcmFtZXMrKzsKLSAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0cykpIHsKLSAgICAgICAgICBzLT5sYXN0X2RsdGZyYW1lID0gdHM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHMtPm51bV9mcmFtZXMrKzsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKiBwcmludCBzdGF0aXN0aWNzIGZyb20gdGhlIGVudHJ5X2FkZGVkIGNhbGxiYWNrLCBmcmVlIHRoZSBlbnRyaWVzICovCi1zdGF0aWMgdm9pZAotcHJpbnRfaW5kZXhfc3RhdHMgKEdQdHJBcnJheSAqIGluZGV4X3N0YXRzKQotewotICBnaW50IGk7Ci0KLSAgaWYgKGluZGV4X3N0YXRzLT5sZW4pIHsKLSAgICBnX3ByaW50ICgiJXM6XG4iLCBfKCJJbmRleCBzdGF0aXN0aWNzIikpOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IGluZGV4X3N0YXRzLT5sZW47IGkrKykgewotICAgIEdzdEluZGV4U3RhdHMgKnMgPSBnX3B0cl9hcnJheV9pbmRleCAoaW5kZXhfc3RhdHMsIGkpOwotICAgIGlmIChzKSB7Ci0gICAgICBnX3ByaW50ICgiaWQgJWQsICVzXG4iLCBzLT5pZCwgcy0+ZGVzYyk7Ci0gICAgICBpZiAocy0+bnVtX2ZyYW1lcykgewotICAgICAgICBHc3RDbG9ja1RpbWUgbGFzdF9mcmFtZSA9IHMtPmxhc3Rfa2V5ZnJhbWU7Ci0KLSAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzLT5sYXN0X2RsdGZyYW1lKSkgewotICAgICAgICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGxhc3RfZnJhbWUpIHx8Ci0gICAgICAgICAgICAgIChzLT5sYXN0X2RsdGZyYW1lID4gbGFzdF9mcmFtZSkpCi0gICAgICAgICAgICBsYXN0X2ZyYW1lID0gcy0+bGFzdF9kbHRmcmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFzdF9mcmFtZSkpIHsKLSAgICAgICAgICBnX3ByaW50ICgiICB0b3RhbCB0aW1lICAgICAgICAgICAgICAgPSAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGFzdF9mcmFtZSkpOwotICAgICAgICB9Ci0gICAgICAgIGdfcHJpbnQgKCIgIGZyYW1lL2tleWZyYW1lIHJhdGUgICAgICA9ICV1IC8gJXUgPSAiLCBzLT5udW1fZnJhbWVzLAotICAgICAgICAgICAgcy0+bnVtX2tleWZyYW1lcyk7Ci0gICAgICAgIGlmIChzLT5udW1fa2V5ZnJhbWVzKQotICAgICAgICAgIGdfcHJpbnQgKCIlbGZcbiIsIHMtPm51bV9mcmFtZXMgLyAoZ2RvdWJsZSkgcy0+bnVtX2tleWZyYW1lcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnX3ByaW50ICgiLVxuIik7Ci0gICAgICAgIGlmIChzLT5udW1fa2V5ZnJhbWVzKSB7Ci0gICAgICAgICAgZ19wcmludCAoIiAgbWluL2F2Zy9tYXgga2V5ZnJhbWUgZ2FwID0gJSIgR1NUX1RJTUVfRk9STUFUICIsICUiCi0gICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocy0+bWluX2tleWZyYW1lX2dhcCksCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHMtPmF2Z19rZXlmcmFtZV9nYXApLAotICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChzLT5tYXhfa2V5ZnJhbWVfZ2FwKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfcHJpbnQgKCIgIG5vIHN0YXRzXG4iKTsKLSAgICAgIH0KLQotICAgICAgZ19mcmVlIChzLT5kZXNjKTsKLSAgICAgIGdfZnJlZSAocyk7Ci0gICAgfQotICB9Ci19Ci0jZW5kaWYKLQotLyogS2lkcywgdXNlIHRoZSBmdW5jdGlvbnMgZnJvbSBsaWJnc3RwYnV0aWxzIGluIGdzdC1wbHVnaW5zLWJhc2UgaW4geW91cgotICogb3duIGNvZGUgKHdlIGNhbid0IGRvIHRoYXQgaGVyZSBiZWNhdXNlIGl0IHdvdWxkIGludHJvZHVjZSBhIGNpcmN1bGFyCi0gKiBkZXBlbmRlbmN5KSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfaXNfbWlzc2luZ19wbHVnaW5fbWVzc2FnZSAoR3N0TWVzc2FnZSAqIG1zZykKLXsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRUxFTUVOVAotICAgICAgfHwgZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobXNnKSA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobXNnKSwKLSAgICAgICJtaXNzaW5nLXBsdWdpbiIpOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKgotZ3N0X21pc3NpbmdfcGx1Z2luX21lc3NhZ2VfZ2V0X2Rlc2NyaXB0aW9uIChHc3RNZXNzYWdlICogbXNnKQotewotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtc2cpLCAibmFtZSIpOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfZXJyb3JfbWVzc2FnZSAoR3N0TWVzc2FnZSAqIG1zZykKLXsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotICBnY2hhciAqbmFtZSwgKmRlYnVnID0gTlVMTDsKLQotICBuYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKG1zZy0+c3JjKTsKLSAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRlYnVnKTsKLQotICBnX3ByaW50ZXJyIChfKCJFUlJPUjogZnJvbSBlbGVtZW50ICVzOiAlc1xuIiksIG5hbWUsIGVyci0+bWVzc2FnZSk7Ci0gIGlmIChkZWJ1ZyAhPSBOVUxMKQotICAgIGdfcHJpbnRlcnIgKF8oIkFkZGl0aW9uYWwgZGVidWcgaW5mbzpcbiVzXG4iKSwgZGVidWcpOwotCi0gIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICBnX2ZyZWUgKGRlYnVnKTsKLSAgZ19mcmVlIChuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X3RhZyAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLCBncG9pbnRlciB1bnVzZWQpCi17Ci0gIGdpbnQgaSwgY291bnQ7Ci0KLSAgY291bnQgPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChsaXN0LCB0YWcpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgZ2NoYXIgKnN0ciA9IE5VTEw7Ci0KLSAgICBpZiAoZ3N0X3RhZ19nZXRfdHlwZSAodGFnKSA9PSBHX1RZUEVfU1RSSU5HKSB7Ci0gICAgICBpZiAoIWdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4IChsaXN0LCB0YWcsIGksICZzdHIpKSB7Ci0gICAgICAgIGdfd2FybmluZyAoIkNvdWxkbid0IGZldGNoIHN0cmluZyBmb3IgJXMgdGFnIiwgdGFnKTsKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChnc3RfdGFnX2dldF90eXBlICh0YWcpID09IEdTVF9UWVBFX1NBTVBMRSkgewotICAgICAgR3N0U2FtcGxlICpzYW1wbGUgPSBOVUxMOwotCi0gICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXggKGxpc3QsIHRhZywgaSwgJnNhbXBsZSkpIHsKLSAgICAgICAgR3N0QnVmZmVyICppbWcgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIgKHNhbXBsZSk7Ci0gICAgICAgIEdzdENhcHMgKmNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzIChzYW1wbGUpOwotCi0gICAgICAgIGlmIChpbWcpIHsKLSAgICAgICAgICBpZiAoY2FwcykgewotICAgICAgICAgICAgZ2NoYXIgKmNhcHNfc3RyOwotCi0gICAgICAgICAgICBjYXBzX3N0ciA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7Ci0gICAgICAgICAgICBzdHIgPSBnX3N0cmR1cF9wcmludGYgKCJidWZmZXIgb2YgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcywgIgotICAgICAgICAgICAgICAgICJ0eXBlOiAlcyIsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGltZyksIGNhcHNfc3RyKTsKLSAgICAgICAgICAgIGdfZnJlZSAoY2Fwc19zdHIpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHIgPSBnX3N0cmR1cF9wcmludGYgKCJidWZmZXIgb2YgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW1nKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHN0ciA9IGdfc3RyZHVwICgiTlVMTCBidWZmZXIiKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ193YXJuaW5nICgiQ291bGRuJ3QgZmV0Y2ggc2FtcGxlIGZvciAlcyB0YWciLCB0YWcpOwotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIH0KLSAgICAgIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZSk7Ci0gICAgfSBlbHNlIGlmIChnc3RfdGFnX2dldF90eXBlICh0YWcpID09IEdTVF9UWVBFX0RBVEVfVElNRSkgewotICAgICAgR3N0RGF0ZVRpbWUgKmR0ID0gTlVMTDsKLQotICAgICAgZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWVfaW5kZXggKGxpc3QsIHRhZywgaSwgJmR0KTsKLSAgICAgIGlmICghZ3N0X2RhdGVfdGltZV9oYXNfdGltZSAoZHQpKSB7Ci0gICAgICAgIHN0ciA9IGdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcgKGR0KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdkb3VibGUgdHpfb2Zmc2V0ID0gZ3N0X2RhdGVfdGltZV9nZXRfdGltZV96b25lX29mZnNldCAoZHQpOwotICAgICAgICBnY2hhciB0el9zdHJbMzJdOwotCi0gICAgICAgIGlmICh0el9vZmZzZXQgIT0gMC4wKSB7Ci0gICAgICAgICAgZ19zbnByaW50ZiAodHpfc3RyLCBzaXplb2YgKHR6X3N0ciksICIoVVRDICVzJWdoKSIsCi0gICAgICAgICAgICAgICh0el9vZmZzZXQgPiAwLjApID8gIisiIDogIiIsIHR6X29mZnNldCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ19zbnByaW50ZiAodHpfc3RyLCBzaXplb2YgKHR6X3N0ciksICIoVVRDKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJTA0dS0lMDJ1LSUwMnUgJTAydTolMDJ1OiUwMnUgJXMiLAotICAgICAgICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfeWVhciAoZHQpLCBnc3RfZGF0ZV90aW1lX2dldF9tb250aCAoZHQpLAotICAgICAgICAgICAgZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkdCksIGdzdF9kYXRlX3RpbWVfZ2V0X2hvdXIgKGR0KSwKLSAgICAgICAgICAgIGdzdF9kYXRlX3RpbWVfZ2V0X21pbnV0ZSAoZHQpLCBnc3RfZGF0ZV90aW1lX2dldF9zZWNvbmQgKGR0KSwKLSAgICAgICAgICAgIHR6X3N0cik7Ci0gICAgICB9Ci0gICAgICBnc3RfZGF0ZV90aW1lX3VucmVmIChkdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0ciA9Ci0gICAgICAgICAgZ19zdHJkdXBfdmFsdWVfY29udGVudHMgKGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKGxpc3QsIHRhZywgaSkpOwotICAgIH0KLQotICAgIGlmIChzdHIpIHsKLSAgICAgIFBSSU5UICgiJTE2czogJXNcbiIsIGkgPT0gMCA/IGdzdF90YWdfZ2V0X25pY2sgKHRhZykgOiAiIiwgc3RyKTsKLSAgICAgIGdfZnJlZSAoc3RyKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXByaW50X3RhZ19mb3JlYWNoIChjb25zdCBHc3RUYWdMaXN0ICogdGFncywgY29uc3QgZ2NoYXIgKiB0YWcsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHVmFsdWUgdmFsID0geyAwLCB9OwotICBnY2hhciAqc3RyOwotICBnaW50IGRlcHRoID0gR1BPSU5URVJfVE9fSU5UICh1c2VyX2RhdGEpOwotCi0gIGlmICghZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUgKCZ2YWwsIHRhZ3MsIHRhZykpCi0gICAgcmV0dXJuOwotCi0gIGlmIChHX1ZBTFVFX0hPTERTX1NUUklORyAoJnZhbCkpCi0gICAgc3RyID0gZ192YWx1ZV9kdXBfc3RyaW5nICgmdmFsKTsKLSAgZWxzZQotICAgIHN0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZ2YWwpOwotCi0gIGdfcHJpbnQgKCIlKnMlczogJXNcbiIsIDIgKiBkZXB0aCwgIiAiLCBnc3RfdGFnX2dldF9uaWNrICh0YWcpLCBzdHIpOwotICBnX2ZyZWUgKHN0cik7Ci0KLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci19Ci0KLSNkZWZpbmUgTUFYX0lOREVOVCA0MAotCi1zdGF0aWMgdm9pZAotcHJpbnRfdG9jX2VudHJ5IChncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFRvY0VudHJ5ICplbnRyeSA9IChHc3RUb2NFbnRyeSAqKSBkYXRhOwotICBjb25zdCBnY2hhciBzcGNbTUFYX0lOREVOVCArIDFdID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwotICBndWludCBpbmRlbnQgPSBNSU4gKEdQT0lOVEVSX1RPX1VJTlQgKHVzZXJfZGF0YSksIE1BWF9JTkRFTlQpOwotICBjb25zdCBHc3RUYWdMaXN0ICp0YWdzOwotICBHTGlzdCAqc3ViZW50cmllczsKLSAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotCi0gIGdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXMgKGVudHJ5LCAmc3RhcnQsICZzdG9wKTsKLQotICBQUklOVCAoIiVzJXM6IiwgJnNwY1tNQVhfSU5ERU5UIC0gaW5kZW50XSwKLSAgICAgIGdzdF90b2NfZW50cnlfdHlwZV9nZXRfbmljayAoZ3N0X3RvY19lbnRyeV9nZXRfZW50cnlfdHlwZSAoZW50cnkpKSk7Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RhcnQpKSB7Ci0gICAgUFJJTlQgKCIgc3RhcnQ6ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpKTsKLSAgfQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0b3ApKSB7Ci0gICAgUFJJTlQgKCIgc3RvcDogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzdG9wKSk7Ci0gIH0KLSAgUFJJTlQgKCJcbiIpOwotICBpbmRlbnQgKz0gMjsKLQotICAvKiBwcmludCB0YWdzICovCi0gIHRhZ3MgPSBnc3RfdG9jX2VudHJ5X2dldF90YWdzIChlbnRyeSk7Ci0gIGlmICh0YWdzKQotICAgIGdzdF90YWdfbGlzdF9mb3JlYWNoICh0YWdzLCBwcmludF90YWdfZm9yZWFjaCwgR1VJTlRfVE9fUE9JTlRFUiAoaW5kZW50KSk7Ci0KLSAgLyogbG9vcCBvdmVyIHN1Yi10b2MgZW50cmllcyAqLwotICBzdWJlbnRyaWVzID0gZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGVudHJ5KTsKLSAgZ19saXN0X2ZvcmVhY2ggKHN1YmVudHJpZXMsIHByaW50X3RvY19lbnRyeSwgR1VJTlRfVE9fUE9JTlRFUiAoaW5kZW50KSk7Ci19Ci0KLSNpZiBkZWZpbmVkKEdfT1NfVU5JWCkgfHwgZGVmaW5lZChHX09TX1dJTjMyKQotc3RhdGljIGd1aW50IHNpZ25hbF93YXRjaF9pZDsKLSNpZiBkZWZpbmVkKEdfT1NfV0lOMzIpCi1zdGF0aWMgR3N0RWxlbWVudCAqaW50cl9waXBlbGluZTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEdfT1NfVU5JWCkgfHwgZGVmaW5lZChHX09TX1dJTjMyKQotLyogQXMgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIGRpc3BhdGNoZWQgZnJvbSBHTWFpbkNvbnRleHQgYXMgYSBHU291cmNlRnVuYwotICogaGFuZGxlciwgd2UgY2FuIHJlYWN0IHRvIHRoaXMgYnkgcG9zdGluZyBhIG1lc3NhZ2UuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWludHJfaGFuZGxlciAoZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSA9IChHc3RFbGVtZW50ICopIHVzZXJfZGF0YTsKLQotICBQUklOVCAoImhhbmRsaW5nIGludGVycnVwdC5cbiIpOwotCi0gIC8qIHBvc3QgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgbWVzc2FnZSAqLwotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksCi0gICAgICBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24gKEdTVF9PQkpFQ1QgKHBpcGVsaW5lKSwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoIkdzdExhdW5jaEludGVycnVwdCIsCi0gICAgICAgICAgICAgICJtZXNzYWdlIiwgR19UWVBFX1NUUklORywgIlBpcGVsaW5lIGludGVycnVwdGVkIiwgTlVMTCkpKTsKLQotICAvKiByZW1vdmUgc2lnbmFsIGhhbmRsZXIgKi8KLSAgc2lnbmFsX3dhdGNoX2lkID0gMDsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi0jaWYgZGVmaW5lZChHX09TX1dJTjMyKSAgICAgICAgIC8qIEdfT1NfVU5JWCAqLwotc3RhdGljIEJPT0wgV0lOQVBJCi13MzJfaW50cl9oYW5kbGVyIChEV09SRCBkd0N0cmxUeXBlKQotewotICBpbnRyX2hhbmRsZXIgKChncG9pbnRlcikgaW50cl9waXBlbGluZSk7Ci0gIGludHJfcGlwZWxpbmUgPSBOVUxMOwotICByZXR1cm4gVFJVRTsKLX0KLSNlbmRpZiAvKiBHX09TX1dJTjMyICovCi0jZW5kaWYgLyogR19PU19VTklYICovCi0KLS8qIHJldHVybnMgRUxSX0VSUk9SIGlmIHRoZXJlIHdhcyBhbiBlcnJvcgotICogb3IgRUxSX0lOVEVSUlVQVCBpZiB3ZSBjYXVnaHQgYSBrZXlib2FyZCBpbnRlcnJ1cHQKLSAqIG9yIEVMUl9OT19FUlJPUiBvdGhlcndpc2UuICovCi1zdGF0aWMgRXZlbnRMb29wUmVzdWx0Ci1ldmVudF9sb29wIChHc3RFbGVtZW50ICogcGlwZWxpbmUsIGdib29sZWFuIGJsb2NraW5nLCBnYm9vbGVhbiBkb19wcm9ncmVzcywKLSAgICBHc3RTdGF0ZSB0YXJnZXRfc3RhdGUpCi17Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlID0gTlVMTDsKLSAgRXZlbnRMb29wUmVzdWx0IHJlcyA9IEVMUl9OT19FUlJPUjsKLSAgZ2Jvb2xlYW4gYnVmZmVyaW5nID0gRkFMU0UsIGluX3Byb2dyZXNzID0gRkFMU0U7Ci0gIGdib29sZWFuIHByZXJvbGxlZCA9IHRhcmdldF9zdGF0ZSAhPSBHU1RfU1RBVEVfUEFVU0VEOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKEdTVF9FTEVNRU5UIChwaXBlbGluZSkpOwotCi0jaWZkZWYgR19PU19VTklYCi0gIHNpZ25hbF93YXRjaF9pZCA9Ci0gICAgICBnX3VuaXhfc2lnbmFsX2FkZCAoU0lHSU5ULCAoR1NvdXJjZUZ1bmMpIGludHJfaGFuZGxlciwgcGlwZWxpbmUpOwotI2VsaWYgZGVmaW5lZChHX09TX1dJTjMyKQotICBpbnRyX3BpcGVsaW5lID0gTlVMTDsKLSAgaWYgKFNldENvbnNvbGVDdHJsSGFuZGxlciAodzMyX2ludHJfaGFuZGxlciwgVFJVRSkpCi0gICAgaW50cl9waXBlbGluZSA9IHBpcGVsaW5lOwotI2VuZGlmCi0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0FOWSwgYmxvY2tpbmcgPyAtMSA6IDApOwotCi0gICAgLyogaWYgdGhlIHBvbGwgdGltZWQgb3V0LCBvbmx5IHdoZW4gIWJsb2NraW5nICovCi0gICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKLSAgICAgIGdvdG8gZXhpdDsKLQotICAgIC8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gZHVtcCBtZXNzYWdlcyB0byB0aGUgY29uc29sZSAqLwotICAgIGlmIChtZXNzYWdlcykgewotICAgICAgR3N0T2JqZWN0ICpzcmNfb2JqOwotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICAgICAgZ3VpbnQzMiBzZXFudW07Ci0KLSAgICAgIHNlcW51bSA9IGdzdF9tZXNzYWdlX2dldF9zZXFudW0gKG1lc3NhZ2UpOwotCi0gICAgICBzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0KLSAgICAgIHNyY19vYmogPSBHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpOwotCi0gICAgICBpZiAoR1NUX0lTX0VMRU1FTlQgKHNyY19vYmopKSB7Ci0gICAgICAgIFBSSU5UIChfKCJHb3QgbWVzc2FnZSAjJXUgZnJvbSBlbGVtZW50IFwiJXNcIiAoJXMpOiAiKSwKLSAgICAgICAgICAgIChndWludCkgc2VxbnVtLCBHU1RfRUxFTUVOVF9OQU1FIChzcmNfb2JqKSwKLSAgICAgICAgICAgIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSAobWVzc2FnZSkpOwotICAgICAgfSBlbHNlIGlmIChHU1RfSVNfUEFEIChzcmNfb2JqKSkgewotICAgICAgICBQUklOVCAoXygiR290IG1lc3NhZ2UgIyV1IGZyb20gcGFkIFwiJXM6JXNcIiAoJXMpOiAiKSwKLSAgICAgICAgICAgIChndWludCkgc2VxbnVtLCBHU1RfREVCVUdfUEFEX05BTUUgKHNyY19vYmopLAotICAgICAgICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSk7Ci0gICAgICB9IGVsc2UgaWYgKEdTVF9JU19PQkpFQ1QgKHNyY19vYmopKSB7Ci0gICAgICAgIFBSSU5UIChfKCJHb3QgbWVzc2FnZSAjJXUgZnJvbSBvYmplY3QgXCIlc1wiICglcyk6ICIpLAotICAgICAgICAgICAgKGd1aW50KSBzZXFudW0sIEdTVF9PQkpFQ1RfTkFNRSAoc3JjX29iaiksCi0gICAgICAgICAgICBHU1RfTUVTU0FHRV9UWVBFX05BTUUgKG1lc3NhZ2UpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIFBSSU5UIChfKCJHb3QgbWVzc2FnZSAjJXUgKCVzKTogIiksIChndWludCkgc2VxbnVtLAotICAgICAgICAgICAgR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtZXNzYWdlKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzKSB7Ci0gICAgICAgIGdjaGFyICpzc3RyOwotCi0gICAgICAgIHNzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAocyk7Ci0gICAgICAgIFBSSU5UICgiJXNcbiIsIHNzdHIpOwotICAgICAgICBnX2ZyZWUgKHNzdHIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgUFJJTlQgKCJubyBtZXNzYWdlIGRldGFpbHNcbiIpOwotICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfTkVXX0NMT0NLOgotICAgICAgewotICAgICAgICBHc3RDbG9jayAqY2xvY2s7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfbmV3X2Nsb2NrIChtZXNzYWdlLCAmY2xvY2spOwotCi0gICAgICAgIFBSSU5UICgiTmV3IGNsb2NrOiAlc1xuIiwgKGNsb2NrID8gR1NUX09CSkVDVF9OQU1FIChjbG9jaykgOiAiTlVMTCIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX0NMT0NLX0xPU1Q6Ci0gICAgICAgIFBSSU5UICgiQ2xvY2sgbG9zdCwgc2VsZWN0aW5nIGEgbmV3IG9uZVxuIik7Ci0gICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6ewotICAgICAgICB3YWl0aW5nX2VvcyA9IEZBTFNFOwotICAgICAgICBQUklOVCAoXygiR290IEVPUyBmcm9tIGVsZW1lbnQgXCIlc1wiLlxuIiksCi0gICAgICAgICAgICBHU1RfTUVTU0FHRV9TUkNfTkFNRSAobWVzc2FnZSkpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX1RBRzoKLSAgICAgICAgaWYgKHRhZ3MpIHsKLSAgICAgICAgICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLQotICAgICAgICAgIGlmIChHU1RfSVNfRUxFTUVOVCAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSkpIHsKLSAgICAgICAgICAgIFBSSU5UIChfKCJGT1VORCBUQUcgICAgICA6IGZvdW5kIGJ5IGVsZW1lbnQgXCIlc1wiLlxuIiksCi0gICAgICAgICAgICAgICAgR1NUX01FU1NBR0VfU1JDX05BTUUgKG1lc3NhZ2UpKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKEdTVF9JU19QQUQgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpKSB7Ci0gICAgICAgICAgICBQUklOVCAoXygiRk9VTkQgVEFHICAgICAgOiBmb3VuZCBieSBwYWQgXCIlczolc1wiLlxuIiksCi0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKSk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChHU1RfSVNfT0JKRUNUIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKSkgewotICAgICAgICAgICAgUFJJTlQgKF8oIkZPVU5EIFRBRyAgICAgIDogZm91bmQgYnkgb2JqZWN0IFwiJXNcIi5cbiIpLAotICAgICAgICAgICAgICAgIEdTVF9NRVNTQUdFX1NSQ19OQU1FIChtZXNzYWdlKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFBSSU5UIChfKCJGT1VORCBUQUdcbiIpKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1lc3NhZ2UsICZ0YWdfbGlzdCk7Ci0gICAgICAgICAgZ3N0X3RhZ19saXN0X2ZvcmVhY2ggKHRhZ19saXN0LCBwcmludF90YWcsIE5VTEwpOwotICAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9UT0M6Ci0gICAgICAgIGlmICh0b2MpIHsKLSAgICAgICAgICBHc3RUb2MgKnRvYzsKLSAgICAgICAgICBHTGlzdCAqZW50cmllczsKLSAgICAgICAgICBnYm9vbGVhbiB1cGRhdGVkOwotCi0gICAgICAgICAgaWYgKEdTVF9JU19FTEVNRU5UIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKSkgewotICAgICAgICAgICAgUFJJTlQgKF8oIkZPVU5EIFRPQyAgICAgIDogZm91bmQgYnkgZWxlbWVudCBcIiVzXCIuXG4iKSwKLSAgICAgICAgICAgICAgICBHU1RfTUVTU0FHRV9TUkNfTkFNRSAobWVzc2FnZSkpOwotICAgICAgICAgIH0gZWxzZSBpZiAoR1NUX0lTX09CSkVDVCAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSkpIHsKLSAgICAgICAgICAgIFBSSU5UIChfKCJGT1VORCBUT0MgICAgICA6IGZvdW5kIGJ5IG9iamVjdCBcIiVzXCIuXG4iKSwKLSAgICAgICAgICAgICAgICBHU1RfTUVTU0FHRV9TUkNfTkFNRSAobWVzc2FnZSkpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQUklOVCAoXygiRk9VTkQgVE9DXG4iKSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfdG9jIChtZXNzYWdlLCAmdG9jLCAmdXBkYXRlZCk7Ci0gICAgICAgICAgLyogcmVjdXJzaXZlbHkgbG9vcCBvdmVyIHRvYyBlbnRyaWVzICovCi0gICAgICAgICAgZW50cmllcyA9IGdzdF90b2NfZ2V0X2VudHJpZXMgKHRvYyk7Ci0gICAgICAgICAgZ19saXN0X2ZvcmVhY2ggKGVudHJpZXMsIHByaW50X3RvY19lbnRyeSwgR1VJTlRfVE9fUE9JTlRFUiAoMCkpOwotICAgICAgICAgIGdzdF90b2NfdW5yZWYgKHRvYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX0lORk86ewotICAgICAgICBHRXJyb3IgKmdlcnJvcjsKLSAgICAgICAgZ2NoYXIgKmRlYnVnOwotICAgICAgICBnY2hhciAqbmFtZSA9IGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKLQotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9pbmZvIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOwotICAgICAgICBpZiAoZGVidWcpIHsKLSAgICAgICAgICBQUklOVCAoXygiSU5GTzpcbiVzXG4iKSwgZGVidWcpOwotICAgICAgICB9Ci0gICAgICAgIGdfY2xlYXJfZXJyb3IgKCZnZXJyb3IpOwotICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgICAgZ19mcmVlIChuYW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6ewotICAgICAgICBHRXJyb3IgKmdlcnJvcjsKLSAgICAgICAgZ2NoYXIgKmRlYnVnOwotICAgICAgICBnY2hhciAqbmFtZSA9IGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKLQotICAgICAgICAvKiBkdW1wIGdyYXBoIG9uIHdhcm5pbmcgKi8KLSAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTIChHU1RfQklOIChwaXBlbGluZSksCi0gICAgICAgICAgICBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJnc3QtbGF1bmNoLndhcm5pbmciKTsKLQotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOwotICAgICAgICBQUklOVCAoXygiV0FSTklORzogZnJvbSBlbGVtZW50ICVzOiAlc1xuIiksIG5hbWUsIGdlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGlmIChkZWJ1ZykgewotICAgICAgICAgIFBSSU5UIChfKCJBZGRpdGlvbmFsIGRlYnVnIGluZm86XG4lc1xuIiksIGRlYnVnKTsKLSAgICAgICAgfQotICAgICAgICBnX2NsZWFyX2Vycm9yICgmZ2Vycm9yKTsKLSAgICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICAgIGdfZnJlZSAobmFtZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7Ci0gICAgICAgIC8qIGR1bXAgZ3JhcGggb24gZXJyb3IgKi8KLSAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTIChHU1RfQklOIChwaXBlbGluZSksCi0gICAgICAgICAgICBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJnc3QtbGF1bmNoLmVycm9yIik7Ci0KLSAgICAgICAgcHJpbnRfZXJyb3JfbWVzc2FnZSAobWVzc2FnZSk7Ci0KLSAgICAgICAgLyogd2UgaGF2ZSBhbiBlcnJvciAqLwotICAgICAgICByZXMgPSBFTFJfRVJST1I7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDp7Ci0gICAgICAgIEdzdFN0YXRlIG9sZCwgbmV3LCBwZW5kaW5nOwotCi0gICAgICAgIC8qIHdlIG9ubHkgY2FyZSBhYm91dCBwaXBlbGluZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMgKi8KLSAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgIT0gR1NUX09CSkVDVF9DQVNUIChwaXBlbGluZSkpCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobWVzc2FnZSwgJm9sZCwgJm5ldywgJnBlbmRpbmcpOwotCi0gICAgICAgIC8qIGlmIHdlIHJlYWNoZWQgdGhlIGZpbmFsIHRhcmdldCBzdGF0ZSwgZXhpdCAqLwotICAgICAgICBpZiAodGFyZ2V0X3N0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbmV3ID09IHRhcmdldF9zdGF0ZSkgewotICAgICAgICAgIHByZXJvbGxlZCA9IFRSVUU7Ci0gICAgICAgICAgLyogaWdub3JlIHdoZW4gd2UgYXJlIGJ1ZmZlcmluZyBzaW5jZSB0aGVuIHdlIG1lc3Mgd2l0aCB0aGUgc3RhdGVzCi0gICAgICAgICAgICogb3Vyc2VsdmVzLiAqLwotICAgICAgICAgIGlmIChidWZmZXJpbmcpIHsKLSAgICAgICAgICAgIFBSSU5UIChfKCJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIGJ1ZmZlcmluZyB0byBmaW5pc2guLi5cbiIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaW5fcHJvZ3Jlc3MpIHsKLSAgICAgICAgICAgIFBSSU5UIChfKCJQcmVyb2xsZWQsIHdhaXRpbmcgZm9yIHByb2dyZXNzIHRvIGZpbmlzaC4uLlxuIikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfQotICAgICAgICAvKiBlbHNlIG5vdCBhbiBpbnRlcmVzdGluZyBtZXNzYWdlICovCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9CVUZGRVJJTkc6ewotICAgICAgICBnaW50IHBlcmNlbnQ7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nIChtZXNzYWdlLCAmcGVyY2VudCk7Ci0gICAgICAgIFBSSU5UICgiJXMgJWQlJSAgXHIiLCBfKCJidWZmZXJpbmcuLi4iKSwgcGVyY2VudCk7Ci0KLSAgICAgICAgLyogbm8gc3RhdGUgbWFuYWdlbWVudCBuZWVkZWQgZm9yIGxpdmUgcGlwZWxpbmVzICovCi0gICAgICAgIGlmIChpc19saXZlKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChwZXJjZW50ID09IDEwMCkgewotICAgICAgICAgIC8qIGEgMTAwJSBtZXNzYWdlIG1lYW5zIGJ1ZmZlcmluZyBpcyBkb25lICovCi0gICAgICAgICAgYnVmZmVyaW5nID0gRkFMU0U7Ci0gICAgICAgICAgLyogaWYgdGhlIGRlc2lyZWQgc3RhdGUgaXMgcGxheWluZywgZ28gYmFjayAqLwotICAgICAgICAgIGlmICh0YXJnZXRfc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKLSAgICAgICAgICAgIFBSSU5UIChfKCJEb25lIGJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQTEFZSU5HIC4uLlxuIikpOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgICAgICAgIH0gZWxzZSBpZiAocHJlcm9sbGVkICYmICFpbl9wcm9ncmVzcykKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBidWZmZXJpbmcgYnVzeSAqLwotICAgICAgICAgIGlmICghYnVmZmVyaW5nICYmIHRhcmdldF9zdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgewotICAgICAgICAgICAgLyogd2Ugd2VyZSBub3QgYnVmZmVyaW5nIGJ1dCBQTEFZSU5HLCBQQVVTRSAgdGhlIHBpcGVsaW5lLiAqLwotICAgICAgICAgICAgUFJJTlQgKF8oIkJ1ZmZlcmluZywgc2V0dGluZyBwaXBlbGluZSB0byBQQVVTRUQgLi4uXG4iKSk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnVmZmVyaW5nID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfTEFURU5DWToKLSAgICAgIHsKLSAgICAgICAgUFJJTlQgKF8oIlJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uXG4iKSk7Ci0gICAgICAgIGdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeSAoR1NUX0JJTiAocGlwZWxpbmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEU6Ci0gICAgICB7Ci0gICAgICAgIEdzdFN0YXRlIHN0YXRlOwotICAgICAgICBnY2hhciAqbmFtZSA9IGdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKLQotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9yZXF1ZXN0X3N0YXRlIChtZXNzYWdlLCAmc3RhdGUpOwotCi0gICAgICAgIFBSSU5UIChfKCJTZXR0aW5nIHN0YXRlIHRvICVzIGFzIHJlcXVlc3RlZCBieSAlcy4uLlxuIiksCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoc3RhdGUpLCBuYW1lKTsKLQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBzdGF0ZSk7Ci0KLSAgICAgICAgZ19mcmVlIChuYW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX0FQUExJQ0FUSU9OOnsKLSAgICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotCi0gICAgICAgIHMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKLQotICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgIkdzdExhdW5jaEludGVycnVwdCIpKSB7Ci0gICAgICAgICAgLyogdGhpcyBhcHBsaWNhdGlvbiBtZXNzYWdlIGlzIHBvc3RlZCB3aGVuIHdlIGNhdWdodCBhbiBpbnRlcnJ1cHQgYW5kCi0gICAgICAgICAgICogd2UgbmVlZCB0byBzdG9wIHRoZSBwaXBlbGluZS4gKi8KLSAgICAgICAgICBQUklOVCAoXygiSW50ZXJydXB0OiBTdG9wcGluZyBwaXBlbGluZSAuLi5cbiIpKTsKLSAgICAgICAgICByZXMgPSBFTFJfSU5URVJSVVBUOwotICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfUFJPR1JFU1M6Ci0gICAgICB7Ci0gICAgICAgIEdzdFByb2dyZXNzVHlwZSB0eXBlOwotICAgICAgICBnY2hhciAqY29kZSwgKnRleHQ7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfcHJvZ3Jlc3MgKG1lc3NhZ2UsICZ0eXBlLCAmY29kZSwgJnRleHQpOwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgIGNhc2UgR1NUX1BST0dSRVNTX1RZUEVfU1RBUlQ6Ci0gICAgICAgICAgY2FzZSBHU1RfUFJPR1JFU1NfVFlQRV9DT05USU5VRToKLSAgICAgICAgICAgIGlmIChkb19wcm9ncmVzcykgewotICAgICAgICAgICAgICBpbl9wcm9ncmVzcyA9IFRSVUU7Ci0gICAgICAgICAgICAgIGJsb2NraW5nID0gVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1BST0dSRVNTX1RZUEVfQ09NUExFVEU6Ci0gICAgICAgICAgY2FzZSBHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRDoKLSAgICAgICAgICBjYXNlIEdTVF9QUk9HUkVTU19UWVBFX0VSUk9SOgotICAgICAgICAgICAgaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBQUklOVCAoXygiUHJvZ3Jlc3M6ICglcykgJXNcbiIpLCBjb2RlLCB0ZXh0KTsKLSAgICAgICAgZ19mcmVlIChjb2RlKTsKLSAgICAgICAgZ19mcmVlICh0ZXh0KTsKLQotICAgICAgICBpZiAoZG9fcHJvZ3Jlc3MgJiYgIWluX3Byb2dyZXNzICYmICFidWZmZXJpbmcgJiYgcHJlcm9sbGVkKQotICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NRVNTQUdFX0VMRU1FTlQ6ewotICAgICAgICBpZiAoZ3N0X2lzX21pc3NpbmdfcGx1Z2luX21lc3NhZ2UgKG1lc3NhZ2UpKSB7Ci0gICAgICAgICAgY29uc3QgZ2NoYXIgKmRlc2M7Ci0KLSAgICAgICAgICBkZXNjID0gZ3N0X21pc3NpbmdfcGx1Z2luX21lc3NhZ2VfZ2V0X2Rlc2NyaXB0aW9uIChtZXNzYWdlKTsKLSAgICAgICAgICBQUklOVCAoXygiTWlzc2luZyBlbGVtZW50OiAlc1xuIiksIGRlc2MgPyBkZXNjIDogIihubyBkZXNjcmlwdGlvbikiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX01FU1NBR0VfSEFWRV9DT05URVhUOnsKLSAgICAgICAgR3N0Q29udGV4dCAqY29udGV4dDsKLSAgICAgICAgY29uc3QgZ2NoYXIgKmNvbnRleHRfdHlwZTsKLSAgICAgICAgZ2NoYXIgKmNvbnRleHRfc3RyOwotCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dCAobWVzc2FnZSwgJmNvbnRleHQpOwotCi0gICAgICAgIGNvbnRleHRfdHlwZSA9IGdzdF9jb250ZXh0X2dldF9jb250ZXh0X3R5cGUgKGNvbnRleHQpOwotICAgICAgICBjb250ZXh0X3N0ciA9Ci0gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoZ3N0X2NvbnRleHRfZ2V0X3N0cnVjdHVyZSAoY29udGV4dCkpOwotICAgICAgICBQUklOVCAoXygiR290IGNvbnRleHQgZnJvbSBlbGVtZW50ICclcyc6ICVzPSVzXG4iKSwKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpLCBjb250ZXh0X3R5cGUsCi0gICAgICAgICAgICBjb250ZXh0X3N0cik7Ci0gICAgICAgIGdfZnJlZSAoY29udGV4dF9zdHIpOwotICAgICAgICBnc3RfY29udGV4dF91bnJlZiAoY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9QUk9QRVJUWV9OT1RJRlk6ewotICAgICAgICBjb25zdCBHVmFsdWUgKnZhbDsKLSAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gICAgICAgIEdzdE9iamVjdCAqb2JqOwotICAgICAgICBnY2hhciAqdmFsX3N0ciA9IE5VTEw7Ci0gICAgICAgIGdjaGFyICoqZXhfcHJvcCwgKm9ial9uYW1lOwotCi0gICAgICAgIGlmIChxdWlldCkKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9wcm9wZXJ0eV9ub3RpZnkgKG1lc3NhZ2UsICZvYmosICZuYW1lLCAmdmFsKTsKLQotICAgICAgICAvKiBMZXQncyBub3QgcHJpbnQgYW55dGhpbmcgZm9yIGV4Y2x1ZGVkIHByb3BlcnRpZXMuLi4gKi8KLSAgICAgICAgZXhfcHJvcCA9IGV4Y2x1ZGVfYXJnczsKLSAgICAgICAgd2hpbGUgKGV4X3Byb3AgIT0gTlVMTCAmJiAqZXhfcHJvcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgaWYgKHN0cmNtcCAobmFtZSwgKmV4X3Byb3ApID09IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBleF9wcm9wKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4X3Byb3AgIT0gTlVMTCAmJiAqZXhfcHJvcCAhPSBOVUxMKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIG9ial9uYW1lID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKEdTVF9PQkpFQ1QgKG9iaikpOwotICAgICAgICBpZiAodmFsICE9IE5VTEwpIHsKLSAgICAgICAgICBpZiAoR19WQUxVRV9IT0xEU19TVFJJTkcgKHZhbCkpCi0gICAgICAgICAgICB2YWxfc3RyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWwpOwotICAgICAgICAgIGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSA9PSBHU1RfVFlQRV9DQVBTKQotICAgICAgICAgICAgdmFsX3N0ciA9IGdzdF9jYXBzX3RvX3N0cmluZyAoZ192YWx1ZV9nZXRfYm94ZWQgKHZhbCkpOwotICAgICAgICAgIGVsc2UgaWYgKEdfVkFMVUVfVFlQRSAodmFsKSA9PSBHU1RfVFlQRV9UQUdfTElTVCkKLSAgICAgICAgICAgIHZhbF9zdHIgPSBnc3RfdGFnX2xpc3RfdG9fc3RyaW5nIChnX3ZhbHVlX2dldF9ib3hlZCAodmFsKSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsX3N0ciA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmFsX3N0ciA9IGdfc3RyZHVwICgiKG5vIHZhbHVlKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ19wcmludCAoIiVzOiAlcyA9ICVzXG4iLCBvYmpfbmFtZSwgbmFtZSwgdmFsX3N0cik7Ci0gICAgICAgIGdfZnJlZSAob2JqX25hbWUpOwotICAgICAgICBnX2ZyZWUgKHZhbF9zdHIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIGp1c3QgYmUgcXVpZXQgYnkgZGVmYXVsdCAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIH0KLSAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0KLWV4aXQ6Ci0gIHsKLSAgICBpZiAobWVzc2FnZSkKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotI2lmZGVmIEdfT1NfVU5JWAotICAgIGlmIChzaWduYWxfd2F0Y2hfaWQgPiAwKQotICAgICAgZ19zb3VyY2VfcmVtb3ZlIChzaWduYWxfd2F0Y2hfaWQpOwotI2VsaWYgZGVmaW5lZChHX09TX1dJTjMyKQotICAgIGludHJfcGlwZWxpbmUgPSBOVUxMOwotICAgIFNldENvbnNvbGVDdHJsSGFuZGxlciAodzMyX2ludHJfaGFuZGxlciwgRkFMU0UpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlczsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVzU3luY1JlcGx5Ci1idXNfc3luY19oYW5kbGVyIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSA9IChHc3RFbGVtZW50ICopIGRhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfU1RBVEVfQ0hBTkdFRDoKLSAgICAgIC8qIHdlIG9ubHkgY2FyZSBhYm91dCBwaXBlbGluZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMgKi8KLSAgICAgIGlmIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID09IEdTVF9PQkpFQ1RfQ0FTVCAocGlwZWxpbmUpKSB7Ci0gICAgICAgIEdzdFN0YXRlIG9sZCwgbmV3LCBwZW5kaW5nOwotICAgICAgICBnY2hhciAqc3RhdGVfdHJhbnNpdGlvbl9uYW1lOwotCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQgKG1lc3NhZ2UsICZvbGQsICZuZXcsICZwZW5kaW5nKTsKLQotICAgICAgICBzdGF0ZV90cmFuc2l0aW9uX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCIlc18lcyIsCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAob2xkKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG5ldykpOwotCi0gICAgICAgIC8qIGR1bXAgZ3JhcGggZm9yIChzb21lKSBwaXBlbGluZSBzdGF0ZSBjaGFuZ2VzICovCi0gICAgICAgIHsKLSAgICAgICAgICBnY2hhciAqZHVtcF9uYW1lID0gZ19zdHJjb25jYXQgKCJnc3QtbGF1bmNoLiIsIHN0YXRlX3RyYW5zaXRpb25fbmFtZSwKLSAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTIChHU1RfQklOIChwaXBlbGluZSksCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZHVtcF9uYW1lKTsKLSAgICAgICAgICBnX2ZyZWUgKGR1bXBfbmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBwbGFjZSBhIG1hcmtlciBpbnRvIGUuZy4gc3RyYWNlIGxvZ3MgKi8KLSAgICAgICAgewotICAgICAgICAgIGdjaGFyICphY2Nlc3NfbmFtZSA9IGdfc3RyY29uY2F0IChnX2dldF90bXBfZGlyICgpLCBHX0RJUl9TRVBBUkFUT1JfUywKLSAgICAgICAgICAgICAgImdzdC1sYXVuY2giLCBHX0RJUl9TRVBBUkFUT1JfUywgc3RhdGVfdHJhbnNpdGlvbl9uYW1lLCBOVUxMKTsKLSAgICAgICAgICBnX2ZpbGVfdGVzdCAoYWNjZXNzX25hbWUsIEdfRklMRV9URVNUX0VYSVNUUyk7Ci0gICAgICAgICAgZ19mcmVlIChhY2Nlc3NfbmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBnX2ZyZWUgKHN0YXRlX3RyYW5zaXRpb25fbmFtZSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICAvKiBvcHRpb25zICovCi0gIGdib29sZWFuIHZlcmJvc2UgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gbm9fZmF1bHQgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gZW9zX29uX3NodXRkb3duID0gRkFMU0U7Ci0jaWYgMAotICBnYm9vbGVhbiBjaGVja19pbmRleCA9IEZBTFNFOwotI2VuZGlmCi0gIGdjaGFyICpzYXZlZmlsZSA9IE5VTEw7Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX09QVElPTl9QQVJTSU5HCi0gIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7Ci0gICAgeyJ0YWdzIiwgJ3QnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJnRhZ3MsCi0gICAgICAgIE5fKCJPdXRwdXQgdGFncyAoYWxzbyBrbm93biBhcyBtZXRhZGF0YSkiKSwgTlVMTH0sCi0gICAgeyJ0b2MiLCAnYycsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmdG9jLAotICAgICAgICBOXygiT3V0cHV0IFRPQyAoY2hhcHRlcnMgYW5kIGVkaXRpb25zKSIpLCBOVUxMfSwKLSAgICB7InZlcmJvc2UiLCAndicsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmdmVyYm9zZSwKLSAgICAgICAgTl8oIk91dHB1dCBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIHByb3BlcnR5IG5vdGlmaWNhdGlvbnMiKSwgTlVMTH0sCi0gICAgeyJxdWlldCIsICdxJywgMCwgR19PUFRJT05fQVJHX05PTkUsICZxdWlldCwKLSAgICAgICAgTl8oIkRvIG5vdCBwcmludCBhbnkgcHJvZ3Jlc3MgaW5mb3JtYXRpb24iKSwgTlVMTH0sCi0gICAgeyJtZXNzYWdlcyIsICdtJywgMCwgR19PUFRJT05fQVJHX05PTkUsICZtZXNzYWdlcywKLSAgICAgICAgTl8oIk91dHB1dCBtZXNzYWdlcyIpLCBOVUxMfSwKLSAgICB7ImV4Y2x1ZGUiLCAnWCcsIDAsIEdfT1BUSU9OX0FSR19TVFJJTkdfQVJSQVksICZleGNsdWRlX2FyZ3MsCi0gICAgICAgICAgTl8oIkRvIG5vdCBvdXRwdXQgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5ICIKLSAgICAgICAgICAgICAgImlmIHZlcmJvc2Ugb3V0cHV0IGlzIGVuYWJsZWQgKGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzKSIpLAotICAgICAgICBOXygiUFJPUEVSVFktTkFNRSIpfSwKLSAgICB7Im5vLWZhdWx0IiwgJ2YnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJm5vX2ZhdWx0LAotICAgICAgICBOXygiRG8gbm90IGluc3RhbGwgYSBmYXVsdCBoYW5kbGVyIiksIE5VTEx9LAotICAgIHsiZW9zLW9uLXNodXRkb3duIiwgJ2UnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJmVvc19vbl9zaHV0ZG93biwKLSAgICAgICAgTl8oIkZvcmNlIEVPUyBvbiBzb3VyY2VzIGJlZm9yZSBzaHV0dGluZyB0aGUgcGlwZWxpbmUgZG93biIpLCBOVUxMfSwKLSNpZiAwCi0gICAgeyJpbmRleCIsICdpJywgMCwgR19PUFRJT05fQVJHX05PTkUsICZjaGVja19pbmRleCwKLSAgICAgICAgTl8oIkdhdGhlciBhbmQgcHJpbnQgaW5kZXggc3RhdGlzdGljcyIpLCBOVUxMfSwKLSNlbmRpZgotICAgIEdTVF9UT09MU19HT1BUSU9OX1ZFUlNJT04sCi0gICAge05VTEx9Ci0gIH07Ci0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSNlbmRpZgotI2lmIDAKLSAgR3N0SW5kZXggKmluZGV4OwotICBHUHRyQXJyYXkgKmluZGV4X3N0YXRzID0gTlVMTDsKLSNlbmRpZgotICBnY2hhciAqKmFyZ3ZuOwotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgZ3Vsb25nIGRlZXBfbm90aWZ5X2lkID0gMDsKLSAgZ2ludCByZXMgPSAwOwotCi0gIGZyZWUgKG1hbGxvYyAoOCkpOyAgICAgICAgICAgIC8qIC1sZWZlbmNlICovCi0KLSAgc2V0bG9jYWxlIChMQ19BTEwsICIiKTsKLQotI2lmZGVmIEVOQUJMRV9OTFMKLSAgYmluZHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSwgTE9DQUxFRElSKTsKLSAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKEdFVFRFWFRfUEFDS0FHRSwgIlVURi04Iik7Ci0gIHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSk7Ci0jZW5kaWYKLQotICBnX3NldF9wcmduYW1lICgiZ3N0LWxhdW5jaC0iIEdTVF9BUElfVkVSU0lPTik7Ci0gIC8qIEVuc3VyZSBYSW5pdFRocmVhZHMoKSBpcyBjYWxsZWQgaWYvd2hlbiBuZWVkZWQgKi8KLSAgZ19zZXRlbnYgKCJHU1RfR0xfWElOSVRUSFJFQURTIiwgIjEiLCBUUlVFKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9PUFRJT05fUEFSU0lORwotICBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIlBJUEVMSU5FLURFU0NSSVBUSU9OIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKLSAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsICZhcmdjLCAmYXJndiwgJmVycikpIHsKLSAgICBpZiAoZXJyKQotICAgICAgZ19wcmludGVyciAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIEdTVF9TVFJfTlVMTCAoZXJyLT5tZXNzYWdlKSk7Ci0gICAgZWxzZQotICAgICAgZ19wcmludGVyciAoIkVycm9yIGluaXRpYWxpemluZzogVW5rbm93biBlcnJvciFcbiIpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnJvcik7Ci0gICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotICAgIGV4aXQgKDEpOwotICB9Ci0gIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLSNlbHNlCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotI2VuZGlmCi0KLSAgZ3N0X3Rvb2xzX3ByaW50X3ZlcnNpb24gKCk7Ci0KLSNpZmRlZiBHX09TX1VOSVgKLSAgaWYgKCFub19mYXVsdCkKLSAgICBmYXVsdF9zZXR1cCAoKTsKLSNlbmRpZgotCi0gIC8qIG1ha2UgYSBudWxsLXRlcm1pbmF0ZWQgdmVyc2lvbiBvZiBhcmd2ICovCi0gIGFyZ3ZuID0gZ19uZXcwIChjaGFyICosIGFyZ2MpOwotICBtZW1jcHkgKGFyZ3ZuLCBhcmd2ICsgMSwgc2l6ZW9mIChjaGFyICopICogKGFyZ2MgLSAxKSk7Ci0gIHsKLSAgICBwaXBlbGluZSA9Ci0gICAgICAgIChHc3RFbGVtZW50ICopIGdzdF9wYXJzZV9sYXVuY2h2ICgoY29uc3QgZ2NoYXIgKiopIGFyZ3ZuLCAmZXJyb3IpOwotICB9Ci0gIGdfZnJlZSAoYXJndm4pOwotCi0gIGlmICghcGlwZWxpbmUpIHsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgIGdfcHJpbnRlcnIgKF8oIkVSUk9SOiBwaXBlbGluZSBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQ6ICVzLlxuIiksCi0gICAgICAgICAgR1NUX1NUUl9OVUxMIChlcnJvci0+bWVzc2FnZSkpOwotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHBpcGVsaW5lIGNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cbiIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci0gIH0gZWxzZSBpZiAoZXJyb3IpIHsKLSAgICBnX3ByaW50ZXJyIChfKCJXQVJOSU5HOiBlcnJvbmVvdXMgcGlwZWxpbmU6ICVzXG4iKSwKLSAgICAgICAgR1NUX1NUUl9OVUxMIChlcnJvci0+bWVzc2FnZSkpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnJvcik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICBpZiAoIXNhdmVmaWxlKSB7Ci0gICAgR3N0U3RhdGUgc3RhdGUsIHBlbmRpbmc7Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICAgIEdzdEJ1cyAqYnVzOwotCi0gICAgLyogSWYgdGhlIHRvcC1sZXZlbCBvYmplY3QgaXMgbm90IGEgcGlwZWxpbmUsIHBsYWNlIGl0IGluIGEgcGlwZWxpbmUuICovCi0gICAgaWYgKCFHU1RfSVNfUElQRUxJTkUgKHBpcGVsaW5lKSkgewotICAgICAgR3N0RWxlbWVudCAqcmVhbF9waXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0KLSAgICAgIGlmIChyZWFsX3BpcGVsaW5lID09IE5VTEwpIHsKLSAgICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHRoZSAncGlwZWxpbmUnIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuIikpOwotICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChyZWFsX3BpcGVsaW5lKSwgcGlwZWxpbmUpOwotICAgICAgcGlwZWxpbmUgPSByZWFsX3BpcGVsaW5lOwotICAgIH0KLSAgICBpZiAodmVyYm9zZSkgewotICAgICAgZGVlcF9ub3RpZnlfaWQgPQotICAgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wcm9wZXJ0eV9kZWVwX25vdGlmeV93YXRjaCAocGlwZWxpbmUsIE5VTEwsIFRSVUUpOwotICAgIH0KLSNpZiAwCi0gICAgaWYgKGNoZWNrX2luZGV4KSB7Ci0gICAgICAvKiBnc3RfaW5kZXhfbmV3KCkgY3JlYXRlcyBhIG51bGwtaW5kZXgsIGl0IGRvZXMgbm90IHN0b3JlIGFueXRoaW5nLCBidXQKLSAgICAgICAqIHRoZSBlbnRyeS1hZGRlZCBzaWduYWwgd29ya3MgYW5kIHRoaXMgaXMgd2hhdCB3ZSB1c2UgdG8gYnVpbGQgdGhlCi0gICAgICAgKiBzdGF0aXN0aWNzICovCi0gICAgICBpbmRleCA9IGdzdF9pbmRleF9uZXcgKCk7Ci0gICAgICBpZiAoaW5kZXgpIHsKLSAgICAgICAgaW5kZXhfc3RhdHMgPSBnX3B0cl9hcnJheV9uZXcgKCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChpbmRleCksICJlbnRyeS1hZGRlZCIsCi0gICAgICAgICAgICBHX0NBTExCQUNLIChlbnRyeV9hZGRlZCksIGluZGV4X3N0YXRzKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoaW5kZXgpLCAicmVzb2x2ZXIiLCBHU1RfSU5ERVhfUkVTT0xWRVJfR1RZUEUsCi0gICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2luZGV4IChwaXBlbGluZSwgaW5kZXgpOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlciAoYnVzLCBidXNfc3luY19oYW5kbGVyLCAoZ3BvaW50ZXIpIHBpcGVsaW5lLCBOVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gICAgUFJJTlQgKF8oIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIikpOwotICAgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gICAgc3dpdGNoIChyZXQpIHsKLSAgICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgotICAgICAgICBnX3ByaW50ZXJyIChfKCJFUlJPUjogUGlwZWxpbmUgZG9lc24ndCB3YW50IHRvIHBhdXNlLlxuIikpOwotICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgZXZlbnRfbG9vcCAocGlwZWxpbmUsIEZBTFNFLCBGQUxTRSwgR1NUX1NUQVRFX1ZPSURfUEVORElORyk7Ci0gICAgICAgIGdvdG8gZW5kOwotICAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Ci0gICAgICAgIFBSSU5UIChfKCJQaXBlbGluZSBpcyBsaXZlIGFuZCBkb2VzIG5vdCBuZWVkIFBSRVJPTEwgLi4uXG4iKSk7Ci0gICAgICAgIGlzX2xpdmUgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKLSAgICAgICAgUFJJTlQgKF8oIlBpcGVsaW5lIGlzIFBSRVJPTExJTkcgLi4uXG4iKSk7Ci0gICAgICAgIGNhdWdodF9lcnJvciA9IGV2ZW50X2xvb3AgKHBpcGVsaW5lLCBUUlVFLCBUUlVFLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICAgICAgaWYgKGNhdWdodF9lcnJvcikgewotICAgICAgICAgIGdfcHJpbnRlcnIgKF8oIkVSUk9SOiBwaXBlbGluZSBkb2Vzbid0IHdhbnQgdG8gcHJlcm9sbC5cbiIpKTsKLSAgICAgICAgICByZXMgPSBjYXVnaHRfZXJyb3I7Ci0gICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUgPSBHU1RfU1RBVEVfUEFVU0VEOwotICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwotICAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6Ci0gICAgICAgIFBSSU5UIChfKCJQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uXG4iKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhdWdodF9lcnJvciA9IGV2ZW50X2xvb3AgKHBpcGVsaW5lLCBGQUxTRSwgVFJVRSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gICAgaWYgKGNhdWdodF9lcnJvcikgewotICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwcmVyb2xsLlxuIikpOwotICAgICAgcmVzID0gY2F1Z2h0X2Vycm9yOwotICAgIH0gZWxzZSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgdGZ0aGVuLCB0Zm5vdzsKLSAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLQotICAgICAgUFJJTlQgKF8oIlNldHRpbmcgcGlwZWxpbmUgdG8gUExBWUlORyAuLi5cbiIpKTsKLQotICAgICAgaWYgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsCi0gICAgICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICAgICAgR3N0TWVzc2FnZSAqZXJyX21zZzsKLSAgICAgICAgR3N0QnVzICpidXM7Ci0KLSAgICAgICAgZ19wcmludGVyciAoXygiRVJST1I6IHBpcGVsaW5lIGRvZXNuJ3Qgd2FudCB0byBwbGF5LlxuIikpOwotICAgICAgICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gICAgICAgIGlmICgoZXJyX21zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FUlJPUiwgMCkpKSB7Ci0gICAgICAgICAgcHJpbnRfZXJyb3JfbWVzc2FnZSAoZXJyX21zZyk7Ci0gICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKGVycl9tc2cpOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gICAgICAgIHJlcyA9IC0xOwotICAgICAgICBnb3RvIGVuZDsKLSAgICAgIH0KLQotICAgICAgdGZ0aGVuID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLSAgICAgIGNhdWdodF9lcnJvciA9IGV2ZW50X2xvb3AgKHBpcGVsaW5lLCBUUlVFLCBGQUxTRSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgICAgcmVzID0gY2F1Z2h0X2Vycm9yOwotICAgICAgaWYgKGVvc19vbl9zaHV0ZG93biAmJiBjYXVnaHRfZXJyb3IgIT0gRUxSX05PX0VSUk9SKSB7Ci0gICAgICAgIGdib29sZWFuIGlnbm9yZV9lcnJvcnM7Ci0KLSAgICAgICAgd2FpdGluZ19lb3MgPSBUUlVFOwotICAgICAgICBpZiAoY2F1Z2h0X2Vycm9yID09IEVMUl9JTlRFUlJVUFQpIHsKLSAgICAgICAgICBQUklOVCAoXygiRU9TIG9uIHNodXRkb3duIGVuYWJsZWQgLS0gRm9yY2luZyBFT1Mgb24gdGhlIHBpcGVsaW5lXG4iKSk7Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAocGlwZWxpbmUsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICAgICAgICBpZ25vcmVfZXJyb3JzID0gRkFMU0U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgUFJJTlQgKF8oIkVPUyBvbiBzaHV0ZG93biBlbmFibGVkIC0tIHdhaXRpbmcgZm9yIEVPUyBhZnRlciBFcnJvclxuIikpOwotICAgICAgICAgIGlnbm9yZV9lcnJvcnMgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIFBSSU5UIChfKCJXYWl0aW5nIGZvciBFT1MuLi5cbiIpKTsKLQotICAgICAgICB3aGlsZSAoVFJVRSkgewotICAgICAgICAgIGNhdWdodF9lcnJvciA9IGV2ZW50X2xvb3AgKHBpcGVsaW5lLCBUUlVFLCBGQUxTRSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gICAgICAgICAgaWYgKGNhdWdodF9lcnJvciA9PSBFTFJfTk9fRVJST1IpIHsKLSAgICAgICAgICAgIC8qIHdlIGdvdCBFT1MgKi8KLSAgICAgICAgICAgIFBSSU5UIChfKCJFT1MgcmVjZWl2ZWQgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjYXVnaHRfZXJyb3IgPT0gRUxSX0lOVEVSUlVQVCkgewotICAgICAgICAgICAgUFJJTlQgKF8KLSAgICAgICAgICAgICAgICAoIkludGVycnVwdCB3aGlsZSB3YWl0aW5nIGZvciBFT1MgLSBzdG9wcGluZyBwaXBlbGluZS4uLlxuIikpOwotICAgICAgICAgICAgcmVzID0gY2F1Z2h0X2Vycm9yOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjYXVnaHRfZXJyb3IgPT0gRUxSX0VSUk9SKSB7Ci0gICAgICAgICAgICBpZiAoIWlnbm9yZV9lcnJvcnMpIHsKLSAgICAgICAgICAgICAgUFJJTlQgKF8oIkFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHdhaXRpbmcgZm9yIEVPU1xuIikpOwotICAgICAgICAgICAgICByZXMgPSBjYXVnaHRfZXJyb3I7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgdGZub3cgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotCi0gICAgICBkaWZmID0gR1NUX0NMT0NLX0RJRkYgKHRmdGhlbiwgdGZub3cpOwotCi0gICAgICBQUklOVCAoXygiRXhlY3V0aW9uIGVuZGVkIGFmdGVyICUiIEdTVF9USU1FX0ZPUk1BVCAiXG4iKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChkaWZmKSk7Ci0gICAgfQotCi0gICAgUFJJTlQgKF8oIlNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLlxuIikpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGlmIChjYXVnaHRfZXJyb3IgPT0gRUxSX05PX0VSUk9SKQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJnN0YXRlLCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgICAvKiBpdGVyYXRlIG1haW5sb29wIHRvIHByb2Nlc3MgcGVuZGluZyBzdHVmZiAqLwotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9pdGVyYXRpb24gKE5VTEwsIEZBTFNFKSk7Ci0KLSAgICAvKiBObyBuZWVkIHRvIHNlZSBhbGwgdGhvc2UgcGFkIGNhcHMgZ29pbmcgdG8gTlVMTCBldGMuLCBpdCdzIGp1c3Qgbm9pc2UgKi8KLSAgICBpZiAoZGVlcF9ub3RpZnlfaWQgIT0gMCkKLSAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAocGlwZWxpbmUsIGRlZXBfbm90aWZ5X2lkKTsKLQotICAgIFBSSU5UIChfKCJTZXR0aW5nIHBpcGVsaW5lIHRvIFJFQURZIC4uLlxuIikpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJnN0YXRlLCAmcGVuZGluZywgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSNpZiAwCi0gICAgaWYgKGNoZWNrX2luZGV4KSB7Ci0gICAgICBwcmludF9pbmRleF9zdGF0cyAoaW5kZXhfc3RhdHMpOwotICAgICAgZ19wdHJfYXJyYXlfZnJlZSAoaW5kZXhfc3RhdHMsIFRSVUUpOwotICAgIH0KLSNlbmRpZgotCi0gIGVuZDoKLSAgICBQUklOVCAoXygiU2V0dGluZyBwaXBlbGluZSB0byBOVUxMIC4uLlxuIikpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgfQotCi0gIFBSSU5UIChfKCJGcmVlaW5nIHBpcGVsaW5lIC4uLlxuIikpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgZ3N0X2RlaW5pdCAoKTsKLQotICByZXR1cm4gcmVzOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3N0LXN0YXRzLmMgYi90b29scy9nc3Qtc3RhdHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTliMTkxOC4uMDAwMDAwMAotLS0gYS90b29scy9nc3Qtc3RhdHMuYworKysgL2Rldi9udWxsCkBAIC0xLDkwMiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdC1zdGF0cy5jOiBzdGF0aXN0aWNzIHRyYWNpbmcgZnJvbnQgZW5kCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAidG9vbHMuaCIKLQotLyogbG9nIHBhcnNlciAqLwotc3RhdGljIEdSZWdleCAqcmF3X2xvZyA9IE5VTEw7Ci1zdGF0aWMgR1JlZ2V4ICphbnNpX2xvZyA9IE5VTEw7Ci0KLS8qIGdsb2JhbCBzdGF0aXN0aWNzICovCi1zdGF0aWMgR0hhc2hUYWJsZSAqdGhyZWFkcyA9IE5VTEw7Ci1zdGF0aWMgR1B0ckFycmF5ICplbGVtZW50cyA9IE5VTEw7Ci1zdGF0aWMgR1B0ckFycmF5ICpwYWRzID0gTlVMTDsKLXN0YXRpYyBndWludDY0IG51bV9idWZmZXJzID0gMCwgbnVtX2V2ZW50cyA9IDAsIG51bV9tZXNzYWdlcyA9IDAsIG51bV9xdWVyaWVzID0KLSAgICAwOwotc3RhdGljIGd1aW50IG51bV9lbGVtZW50cyA9IDAsIG51bV9iaW5zID0gMCwgbnVtX3BhZHMgPSAwLCBudW1fZ2hvc3RwYWRzID0gMDsKLXN0YXRpYyBHc3RDbG9ja1RpbWUgbGFzdF90cyA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMCk7Ci1zdGF0aWMgZ3VpbnQgdG90YWxfY3B1bG9hZCA9IDA7Ci1zdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9jcHVsb2FkID0gRkFMU0U7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIC8qIGh1bWFuIHJlYWRhYmxlIHBhZCBuYW1lIGFuZCBkZXRhaWxzICovCi0gIGdjaGFyICpuYW1lLCAqdHlwZV9uYW1lOwotICBndWludCBpbmRleDsKLSAgZ2Jvb2xlYW4gaXNfZ2hvc3RfcGFkOwotICBHc3RQYWREaXJlY3Rpb24gZGlyOwotICAvKiBidWZmZXIgc3RhdGlzdGljcyAqLwotICBndWludCBudW1fYnVmZmVyczsKLSAgZ3VpbnQgbnVtX2xpdmUsIG51bV9kZWNvZGVfb25seSwgbnVtX2Rpc2NvbnQsIG51bV9yZXN5bmMsIG51bV9jb3JydXB0ZWQsCi0gICAgICBudW1fbWFya2VyLCBudW1faGVhZGVyLCBudW1fZ2FwLCBudW1fZHJvcHBhYmxlLCBudW1fZGVsdGE7Ci0gIGd1aW50IG1pbl9zaXplLCBtYXhfc2l6ZSwgYXZnX3NpemU7Ci0gIC8qIGZpcnN0IGFuZCBsYXN0IGFjdGl2aXR5IG9uIHRoZSBwYWQsIGV4cGVjdGVkIG5leHRfdHMgKi8KLSAgR3N0Q2xvY2tUaW1lIGZpcnN0X3RzLCBsYXN0X3RzLCBuZXh0X3RzOwotICAvKiBpbiB3aGljaCB0aHJlYWQgZG9lcyBpdCBvcGVyYXRlICovCi0gIGdwb2ludGVyIHRocmVhZF9pZDsKLSAgLyogaGllcmFyY2h5ICovCi0gIGd1aW50IHBhcmVudF9peDsKLX0gR3N0UGFkU3RhdHM7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIC8qIGh1bWFuIHJlYWRhYmxlIGVsZW1lbnQgbmFtZSAqLwotICBnY2hhciAqbmFtZSwgKnR5cGVfbmFtZTsKLSAgZ3VpbnQgaW5kZXg7Ci0gIGdib29sZWFuIGlzX2JpbjsKLSAgLyogYnVmZmVyIHN0YXRpc3RpY3MgKi8KLSAgZ3VpbnQgcmVjdl9idWZmZXJzLCBzZW50X2J1ZmZlcnM7Ci0gIGd1aW50NjQgcmVjdl9ieXRlcywgc2VudF9ieXRlczsKLSAgLyogZXZlbnQsIG1lc3NhZ2Ugc3RhdGlzdGljcyAqLwotICBndWludCBudW1fZXZlbnRzLCBudW1fbWVzc2FnZXMsIG51bV9xdWVyaWVzOwotICAvKiBmaXJzdCBhY3Rpdml0eSBvbiB0aGUgZWxlbWVudCAqLwotICBHc3RDbG9ja1RpbWUgZmlyc3RfdHMsIGxhc3RfdHM7Ci0gIC8qIGhpZXJhcmNoeSAqLwotICBndWludCBwYXJlbnRfaXg7Ci19IEdzdEVsZW1lbnRTdGF0czsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgLyogdGltZSBzcGVuZCBpbiB0aGlzIHRocmVhZCAqLwotICBHc3RDbG9ja1RpbWUgdHRocmVhZDsKLSAgZ3VpbnQgY3B1bG9hZDsKLX0gR3N0VGhyZWFkU3RhdHM7Ci0KLS8qIHN0YXRzIGhlbHBlciAqLwotCi1zdGF0aWMgdm9pZAotZnJlZV9lbGVtZW50X3N0YXRzIChncG9pbnRlciBkYXRhKQotewotICBnX3NsaWNlX2ZyZWUgKEdzdEVsZW1lbnRTdGF0cywgZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR3N0RWxlbWVudFN0YXRzICoKLWdldF9lbGVtZW50X3N0YXRzIChndWludCBpeCkKLXsKLSAgcmV0dXJuIChpeCAhPSBHX01BWFVJTlQgJiYgaXggPCBlbGVtZW50cy0+bGVuKSA/Ci0gICAgICBnX3B0cl9hcnJheV9pbmRleCAoZWxlbWVudHMsIGl4KSA6IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR3N0UGFkU3RhdHMgKgotZ2V0X3BhZF9zdGF0cyAoZ3VpbnQgaXgpCi17Ci0gIHJldHVybiAoaXggIT0gR19NQVhVSU5UICYmIGl4IDwgcGFkcy0+bGVuKSA/Ci0gICAgICBnX3B0cl9hcnJheV9pbmRleCAocGFkcywgaXgpIDogTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWZyZWVfcGFkX3N0YXRzIChncG9pbnRlciBkYXRhKQotewotICBnX3NsaWNlX2ZyZWUgKEdzdFBhZFN0YXRzLCBkYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSBHc3RUaHJlYWRTdGF0cyAqCi1nZXRfdGhyZWFkX3N0YXRzIChncG9pbnRlciBpZCkKLXsKLSAgR3N0VGhyZWFkU3RhdHMgKnN0YXRzID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAodGhyZWFkcywgaWQpOwotCi0gIGlmIChHX1VOTElLRUxZICghc3RhdHMpKSB7Ci0gICAgc3RhdHMgPSBnX3NsaWNlX25ldzAgKEdzdFRocmVhZFN0YXRzKTsKLSAgICBzdGF0cy0+dHRocmVhZCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgZ19oYXNoX3RhYmxlX2luc2VydCAodGhyZWFkcywgaWQsIHN0YXRzKTsKLSAgfQotICByZXR1cm4gc3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uZXdfcGFkX3N0YXRzIChHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBHc3RQYWRTdGF0cyAqc3RhdHM7Ci0gIGd1aW50IGl4LCBwYXJlbnRfaXg7Ci0gIGdjaGFyICp0eXBlLCAqbmFtZTsKLSAgZ2Jvb2xlYW4gaXNfZ2hvc3RfcGFkOwotICBHc3RQYWREaXJlY3Rpb24gZGlyOwotICBndWludDY0IHRocmVhZF9pZDsKLQotICBnc3Rfc3RydWN0dXJlX2dldCAocywKLSAgICAgICJpeCIsIEdfVFlQRV9VSU5ULCAmaXgsCi0gICAgICAicGFyZW50LWl4IiwgR19UWVBFX1VJTlQsICZwYXJlbnRfaXgsCi0gICAgICAibmFtZSIsIEdfVFlQRV9TVFJJTkcsICZuYW1lLAotICAgICAgInR5cGUiLCBHX1RZUEVfU1RSSU5HLCAmdHlwZSwKLSAgICAgICJpcy1naG9zdHBhZCIsIEdfVFlQRV9CT09MRUFOLCAmaXNfZ2hvc3RfcGFkLAotICAgICAgInBhZC1kaXJlY3Rpb24iLCBHU1RfVFlQRV9QQURfRElSRUNUSU9OLCAmZGlyLAotICAgICAgInRocmVhZC1pZCIsIEdfVFlQRV9VSU5UNjQsICZ0aHJlYWRfaWQsIE5VTEwpOwotCi0gIHN0YXRzID0gZ19zbGljZV9uZXcwIChHc3RQYWRTdGF0cyk7Ci0gIGlmIChpc19naG9zdF9wYWQpCi0gICAgbnVtX2dob3N0cGFkcysrOwotICBudW1fcGFkcysrOwotICBzdGF0cy0+bmFtZSA9IG5hbWU7Ci0gIHN0YXRzLT50eXBlX25hbWUgPSB0eXBlOwotICBzdGF0cy0+aW5kZXggPSBpeDsKLSAgc3RhdHMtPmlzX2dob3N0X3BhZCA9IGlzX2dob3N0X3BhZDsKLSAgc3RhdHMtPmRpciA9IGRpcjsKLSAgc3RhdHMtPm1pbl9zaXplID0gR19NQVhVSU5UOwotICBzdGF0cy0+Zmlyc3RfdHMgPSBzdGF0cy0+bGFzdF90cyA9IHN0YXRzLT5uZXh0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc3RhdHMtPnRocmVhZF9pZCA9IChncG9pbnRlcikgKGd1aW50cHRyKSB0aHJlYWRfaWQ7Ci0gIHN0YXRzLT5wYXJlbnRfaXggPSBwYXJlbnRfaXg7Ci0KLSAgaWYgKHBhZHMtPmxlbiA8PSBpeCkKLSAgICBnX3B0cl9hcnJheV9zZXRfc2l6ZSAocGFkcywgaXggKyAxKTsKLSAgZ19wdHJfYXJyYXlfaW5kZXggKHBhZHMsIGl4KSA9IHN0YXRzOwotfQotCi1zdGF0aWMgdm9pZAotbmV3X2VsZW1lbnRfc3RhdHMgKEdzdFN0cnVjdHVyZSAqIHMpCi17Ci0gIEdzdEVsZW1lbnRTdGF0cyAqc3RhdHM7Ci0gIGd1aW50IGl4LCBwYXJlbnRfaXg7Ci0gIGdjaGFyICp0eXBlLCAqbmFtZTsKLSAgZ2Jvb2xlYW4gaXNfYmluOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLAotICAgICAgIml4IiwgR19UWVBFX1VJTlQsICZpeCwKLSAgICAgICJwYXJlbnQtaXgiLCBHX1RZUEVfVUlOVCwgJnBhcmVudF9peCwKLSAgICAgICJuYW1lIiwgR19UWVBFX1NUUklORywgJm5hbWUsCi0gICAgICAidHlwZSIsIEdfVFlQRV9TVFJJTkcsICZ0eXBlLCAiaXMtYmluIiwgR19UWVBFX0JPT0xFQU4sICZpc19iaW4sIE5VTEwpOwotCi0gIHN0YXRzID0gZ19zbGljZV9uZXcwIChHc3RFbGVtZW50U3RhdHMpOwotICBpZiAoaXNfYmluKQotICAgIG51bV9iaW5zKys7Ci0gIG51bV9lbGVtZW50cysrOwotICBzdGF0cy0+aW5kZXggPSBpeDsKLSAgc3RhdHMtPm5hbWUgPSBuYW1lOwotICBzdGF0cy0+dHlwZV9uYW1lID0gdHlwZTsKLSAgc3RhdHMtPmlzX2JpbiA9IGlzX2JpbjsKLSAgc3RhdHMtPmZpcnN0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc3RhdHMtPnBhcmVudF9peCA9IHBhcmVudF9peDsKLQotICBpZiAoZWxlbWVudHMtPmxlbiA8PSBpeCkKLSAgICBnX3B0cl9hcnJheV9zZXRfc2l6ZSAoZWxlbWVudHMsIGl4ICsgMSk7Ci0gIGdfcHRyX2FycmF5X2luZGV4IChlbGVtZW50cywgaXgpID0gc3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mcmVlX3RocmVhZF9zdGF0cyAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ19zbGljZV9mcmVlIChHc3RUaHJlYWRTdGF0cywgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wYWRfc3RhdHMgKEdzdFBhZFN0YXRzICogc3RhdHMsIGd1aW50IGVsZW1faXgsIGd1aW50IHNpemUsIGd1aW50NjQgdHMsCi0gICAgZ3VpbnQ2NCBidWZmZXJfdHMsIGd1aW50NjQgYnVmZmVyX2R1ciwgR3N0QnVmZmVyRmxhZ3MgYnVmZmVyX2ZsYWdzKQotewotICBndWxvbmcgYXZnX3NpemU7Ci0KLSAgLyogcGFyZW50YWdlICovCi0gIGlmIChzdGF0cy0+cGFyZW50X2l4ID09IEdfTUFYVUlOVCkgewotICAgIHN0YXRzLT5wYXJlbnRfaXggPSBlbGVtX2l4OwotICB9Ci0KLSAgaWYgKHN0YXRzLT50aHJlYWRfaWQpIHsKLSAgICBnZXRfdGhyZWFkX3N0YXRzIChzdGF0cy0+dGhyZWFkX2lkKTsKLSAgfQotCi0gIC8qIHNpemUgc3RhdHMgKi8KLSAgYXZnX3NpemUgPSAoKChndWxvbmcpIHN0YXRzLT5hdmdfc2l6ZSAqIChndWxvbmcpIHN0YXRzLT5udW1fYnVmZmVycykgKyBzaXplKTsKLSAgc3RhdHMtPm51bV9idWZmZXJzKys7Ci0gIHN0YXRzLT5hdmdfc2l6ZSA9IChndWludCkgKGF2Z19zaXplIC8gc3RhdHMtPm51bV9idWZmZXJzKTsKLSAgaWYgKHNpemUgPCBzdGF0cy0+bWluX3NpemUpCi0gICAgc3RhdHMtPm1pbl9zaXplID0gc2l6ZTsKLSAgZWxzZSBpZiAoc2l6ZSA+IHN0YXRzLT5tYXhfc2l6ZSkKLSAgICBzdGF0cy0+bWF4X3NpemUgPSBzaXplOwotICAvKiB0aW1lIHN0YXRzICovCi0gIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXRzLT5sYXN0X3RzKSkKLSAgICBzdGF0cy0+Zmlyc3RfdHMgPSB0czsKLSAgc3RhdHMtPmxhc3RfdHMgPSB0czsKLSAgLyogZmxhZyBzdGF0cyAqLwotICBpZiAoYnVmZmVyX2ZsYWdzICYgR1NUX0JVRkZFUl9GTEFHX0xJVkUpCi0gICAgc3RhdHMtPm51bV9saXZlKys7Ci0gIGlmIChidWZmZXJfZmxhZ3MgJiBHU1RfQlVGRkVSX0ZMQUdfREVDT0RFX09OTFkpCi0gICAgc3RhdHMtPm51bV9kZWNvZGVfb25seSsrOwotICBpZiAoYnVmZmVyX2ZsYWdzICYgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpCi0gICAgc3RhdHMtPm51bV9kaXNjb250Kys7Ci0gIGlmIChidWZmZXJfZmxhZ3MgJiBHU1RfQlVGRkVSX0ZMQUdfUkVTWU5DKQotICAgIHN0YXRzLT5udW1fcmVzeW5jKys7Ci0gIGlmIChidWZmZXJfZmxhZ3MgJiBHU1RfQlVGRkVSX0ZMQUdfQ09SUlVQVEVEKQotICAgIHN0YXRzLT5udW1fY29ycnVwdGVkKys7Ci0gIGlmIChidWZmZXJfZmxhZ3MgJiBHU1RfQlVGRkVSX0ZMQUdfTUFSS0VSKQotICAgIHN0YXRzLT5udW1fbWFya2VyKys7Ci0gIGlmIChidWZmZXJfZmxhZ3MgJiBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSKQotICAgIHN0YXRzLT5udW1faGVhZGVyKys7Ci0gIGlmIChidWZmZXJfZmxhZ3MgJiBHU1RfQlVGRkVSX0ZMQUdfR0FQKQotICAgIHN0YXRzLT5udW1fZ2FwKys7Ci0gIGlmIChidWZmZXJfZmxhZ3MgJiBHU1RfQlVGRkVSX0ZMQUdfRFJPUFBBQkxFKQotICAgIHN0YXRzLT5udW1fZHJvcHBhYmxlKys7Ci0gIGlmIChidWZmZXJfZmxhZ3MgJiBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkKLSAgICBzdGF0cy0+bnVtX2RlbHRhKys7Ci0gIC8qIHVwZGF0ZSB0aW1lc3RhbXBzICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoYnVmZmVyX3RzKSAmJgotICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGJ1ZmZlcl9kdXIpKSB7Ci0gICAgc3RhdHMtPm5leHRfdHMgPSBidWZmZXJfdHMgKyBidWZmZXJfZHVyOwotICB9IGVsc2UgewotICAgIHN0YXRzLT5uZXh0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZG9fZWxlbWVudF9zdGF0cyAoR3N0RWxlbWVudFN0YXRzICogc3RhdHMsIEdzdEVsZW1lbnRTdGF0cyAqIHBlZXJfc3RhdHMsCi0gICAgZ3VpbnQgc2l6ZSwgZ3VpbnQ2NCB0cykKLXsKLSAgc3RhdHMtPnNlbnRfYnVmZmVycysrOwotICBwZWVyX3N0YXRzLT5yZWN2X2J1ZmZlcnMrKzsKLSAgc3RhdHMtPnNlbnRfYnl0ZXMgKz0gc2l6ZTsKLSAgcGVlcl9zdGF0cy0+cmVjdl9ieXRlcyArPSBzaXplOwotICAvKiB0aW1lIHN0YXRzICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXRzLT5maXJzdF90cykpKSB7Ci0gICAgc3RhdHMtPmZpcnN0X3RzID0gdHM7Ci0gIH0KLSAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGVlcl9zdGF0cy0+Zmlyc3RfdHMpKSkgewotICAgIHBlZXJfc3RhdHMtPmZpcnN0X3RzID0gdHMgKyAxOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19idWZmZXJfc3RhdHMgKEdzdFN0cnVjdHVyZSAqIHMpCi17Ci0gIGd1aW50NjQgdHMsIGJ1ZmZlcl9wdHMsIGJ1ZmZlcl9kdXI7Ci0gIGd1aW50IHBhZF9peCwgZWxlbV9peCwgcGVlcl9lbGVtX2l4OwotICBndWludCBzaXplOwotICBHc3RCdWZmZXJGbGFncyBidWZmZXJfZmxhZ3M7Ci0gIEdzdFBhZFN0YXRzICpwYWRfc3RhdHM7Ci0gIEdzdEVsZW1lbnRTdGF0cyAqZWxlbV9zdGF0cywgKnBlZXJfZWxlbV9zdGF0czsKLQotICBudW1fYnVmZmVycysrOwotICBnc3Rfc3RydWN0dXJlX2dldCAocywgInRzIiwgR19UWVBFX1VJTlQ2NCwgJnRzLAotICAgICAgInBhZC1peCIsIEdfVFlQRV9VSU5ULCAmcGFkX2l4LAotICAgICAgImVsZW1lbnQtaXgiLCBHX1RZUEVfVUlOVCwgJmVsZW1faXgsCi0gICAgICAicGVlci1lbGVtZW50LWl4IiwgR19UWVBFX1VJTlQsICZwZWVyX2VsZW1faXgsCi0gICAgICAiYnVmZmVyLXNpemUiLCBHX1RZUEVfVUlOVCwgJnNpemUsCi0gICAgICAiYnVmZmVyLXB0cyIsIEdfVFlQRV9VSU5UNjQsICZidWZmZXJfcHRzLAotICAgICAgImJ1ZmZlci1kdXJhdGlvbiIsIEdfVFlQRV9VSU5UNjQsICZidWZmZXJfZHVyLAotICAgICAgImJ1ZmZlci1mbGFncyIsIEdTVF9UWVBFX0JVRkZFUl9GTEFHUywgJmJ1ZmZlcl9mbGFncywgTlVMTCk7Ci0gIGxhc3RfdHMgPSBNQVggKGxhc3RfdHMsIHRzKTsKLSAgaWYgKCEocGFkX3N0YXRzID0gZ2V0X3BhZF9zdGF0cyAocGFkX2l4KSkpIHsKLSAgICBHU1RfV0FSTklORyAoIm5vIHBhZCBzdGF0cyBmb3VuZCBmb3IgaXg9JXUiLCBwYWRfaXgpOwotICAgIHJldHVybjsKLSAgfQotICBpZiAoIShlbGVtX3N0YXRzID0gZ2V0X2VsZW1lbnRfc3RhdHMgKGVsZW1faXgpKSkgewotICAgIEdTVF9XQVJOSU5HICgibm8gZWxlbWVudCBzdGF0cyBmb3VuZCBmb3IgaXg9JXUiLCBlbGVtX2l4KTsKLSAgICByZXR1cm47Ci0gIH0KLSAgaWYgKCEocGVlcl9lbGVtX3N0YXRzID0gZ2V0X2VsZW1lbnRfc3RhdHMgKHBlZXJfZWxlbV9peCkpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJubyBlbGVtZW50IHN0YXRzIGZvdW5kIGZvciBpeD0ldSIsIHBlZXJfZWxlbV9peCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGRvX3BhZF9zdGF0cyAocGFkX3N0YXRzLCBlbGVtX2l4LCBzaXplLCB0cywgYnVmZmVyX3B0cywgYnVmZmVyX2R1ciwKLSAgICAgIGJ1ZmZlcl9mbGFncyk7Ci0gIGlmIChwYWRfc3RhdHMtPmRpciA9PSBHU1RfUEFEX1NSQykgewotICAgIC8qIHB1c2ggKi8KLSAgICBkb19lbGVtZW50X3N0YXRzIChlbGVtX3N0YXRzLCBwZWVyX2VsZW1fc3RhdHMsIHNpemUsIHRzKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBwdWxsICovCi0gICAgZG9fZWxlbWVudF9zdGF0cyAocGVlcl9lbGVtX3N0YXRzLCBlbGVtX3N0YXRzLCBzaXplLCB0cyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWRvX2V2ZW50X3N0YXRzIChHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBndWludDY0IHRzOwotICBndWludCBwYWRfaXgsIGVsZW1faXg7Ci0gIEdzdFBhZFN0YXRzICpwYWRfc3RhdHM7Ci0gIEdzdEVsZW1lbnRTdGF0cyAqZWxlbV9zdGF0czsKLQotICBudW1fZXZlbnRzKys7Ci0gIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAidHMiLCBHX1RZUEVfVUlOVDY0LCAmdHMsCi0gICAgICAicGFkLWl4IiwgR19UWVBFX1VJTlQsICZwYWRfaXgsICJlbGVtZW50LWl4IiwgR19UWVBFX1VJTlQsICZlbGVtX2l4LAotICAgICAgTlVMTCk7Ci0gIGxhc3RfdHMgPSBNQVggKGxhc3RfdHMsIHRzKTsKLSAgaWYgKCEocGFkX3N0YXRzID0gZ2V0X3BhZF9zdGF0cyAocGFkX2l4KSkpIHsKLSAgICBHU1RfV0FSTklORyAoIm5vIHBhZCBzdGF0cyBmb3VuZCBmb3IgaXg9JXUiLCBwYWRfaXgpOwotICAgIHJldHVybjsKLSAgfQotICBpZiAoIShlbGVtX3N0YXRzID0gZ2V0X2VsZW1lbnRfc3RhdHMgKGVsZW1faXgpKSkgewotICAgIC8vIGUuZy4gcmVjb25maWd1cmUgZXZlbnRzIGFyZSBzZW5kIG92ZXIgdW5wYXJlbnRlZCBwYWRzCi0gICAgR1NUX0lORk8gKCJubyBlbGVtZW50IHN0YXRzIGZvdW5kIGZvciBpeD0ldSIsIGVsZW1faXgpOwotICAgIHJldHVybjsKLSAgfQotICBlbGVtX3N0YXRzLT5udW1fZXZlbnRzKys7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19tZXNzYWdlX3N0YXRzIChHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBndWludDY0IHRzOwotICBndWludCBlbGVtX2l4OwotICBHc3RFbGVtZW50U3RhdHMgKmVsZW1fc3RhdHM7Ci0KLSAgbnVtX21lc3NhZ2VzKys7Ci0gIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAidHMiLCBHX1RZUEVfVUlOVDY0LCAmdHMsCi0gICAgICAiZWxlbWVudC1peCIsIEdfVFlQRV9VSU5ULCAmZWxlbV9peCwgTlVMTCk7Ci0gIGxhc3RfdHMgPSBNQVggKGxhc3RfdHMsIHRzKTsKLSAgaWYgKCEoZWxlbV9zdGF0cyA9IGdldF9lbGVtZW50X3N0YXRzIChlbGVtX2l4KSkpIHsKLSAgICBHU1RfV0FSTklORyAoIm5vIGVsZW1lbnQgc3RhdHMgZm91bmQgZm9yIGl4PSV1IiwgZWxlbV9peCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGVsZW1fc3RhdHMtPm51bV9tZXNzYWdlcysrOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcXVlcnlfc3RhdHMgKEdzdFN0cnVjdHVyZSAqIHMpCi17Ci0gIGd1aW50NjQgdHM7Ci0gIGd1aW50IGVsZW1faXg7Ci0gIEdzdEVsZW1lbnRTdGF0cyAqZWxlbV9zdGF0czsKLQotICBudW1fcXVlcmllcysrOwotICBnc3Rfc3RydWN0dXJlX2dldCAocywgInRzIiwgR19UWVBFX1VJTlQ2NCwgJnRzLAotICAgICAgImVsZW1lbnQtaXgiLCBHX1RZUEVfVUlOVCwgJmVsZW1faXgsIE5VTEwpOwotICBsYXN0X3RzID0gTUFYIChsYXN0X3RzLCB0cyk7Ci0gIGlmICghKGVsZW1fc3RhdHMgPSBnZXRfZWxlbWVudF9zdGF0cyAoZWxlbV9peCkpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJubyBlbGVtZW50IHN0YXRzIGZvdW5kIGZvciBpeD0ldSIsIGVsZW1faXgpOwotICAgIHJldHVybjsKLSAgfQotICBlbGVtX3N0YXRzLT5udW1fcXVlcmllcysrOwotfQotCi1zdGF0aWMgdm9pZAotZG9fdGhyZWFkX3J1c2FnZV9zdGF0cyAoR3N0U3RydWN0dXJlICogcykKLXsKLSAgZ3VpbnQ2NCB0cywgdHRocmVhZCwgdGhyZWFkX2lkOwotICBndWludCBjcHVsb2FkOwotICBHc3RUaHJlYWRTdGF0cyAqdGhyZWFkX3N0YXRzOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAidHMiLCBHX1RZUEVfVUlOVDY0LCAmdHMsCi0gICAgICAidGhyZWFkLWlkIiwgR19UWVBFX1VJTlQ2NCwgJnRocmVhZF9pZCwKLSAgICAgICJhdmVyYWdlLWNwdWxvYWQiLCBHX1RZUEVfVUlOVCwgJmNwdWxvYWQsICJ0aW1lIiwgR19UWVBFX1VJTlQ2NCwgJnR0aHJlYWQsCi0gICAgICBOVUxMKTsKLSAgdGhyZWFkX3N0YXRzID0gZ2V0X3RocmVhZF9zdGF0cyAoKGdwb2ludGVyKSAoZ3VpbnRwdHIpIHRocmVhZF9pZCk7Ci0gIHRocmVhZF9zdGF0cy0+Y3B1bG9hZCA9IGNwdWxvYWQ7Ci0gIHRocmVhZF9zdGF0cy0+dHRocmVhZCA9IHR0aHJlYWQ7Ci0gIGxhc3RfdHMgPSBNQVggKGxhc3RfdHMsIHRzKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3Byb2NfcnVzYWdlX3N0YXRzIChHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBndWludDY0IHRzOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAidHMiLCBHX1RZUEVfVUlOVDY0LCAmdHMsCi0gICAgICAiYXZlcmFnZS1jcHVsb2FkIiwgR19UWVBFX1VJTlQsICZ0b3RhbF9jcHVsb2FkLCBOVUxMKTsKLSAgbGFzdF90cyA9IE1BWCAobGFzdF90cywgdHMpOwotICBoYXZlX2NwdWxvYWQgPSBUUlVFOwotfQotCi0vKiByZXBvcnRpbmcgKi8KLQotc3RhdGljIGdpbnQKLWZpbmRfcGFkX3N0YXRzX2Zvcl90aHJlYWQgKGdjb25zdHBvaW50ZXIgdmFsdWUsIGdjb25zdHBvaW50ZXIgdXNlcl9kYXRhKQotewotICBjb25zdCBHc3RQYWRTdGF0cyAqc3RhdHMgPSAoY29uc3QgR3N0UGFkU3RhdHMgKikgdmFsdWU7Ci0KLSAgaWYgKChzdGF0cy0+dGhyZWFkX2lkID09IHVzZXJfZGF0YSkgJiYgKHN0YXRzLT5udW1fYnVmZmVycykpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X3BhZF9zdGF0cyAoZ3BvaW50ZXIgdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkU3RhdHMgKnN0YXRzID0gKEdzdFBhZFN0YXRzICopIHZhbHVlOwotCi0gIGlmIChzdGF0cy0+dGhyZWFkX2lkID09IHVzZXJfZGF0YSkgewotICAgIC8qIHRoZXJlIHNlZW0gdG8gYmUgc29tZSB0ZW1wb3JhcnkgcGFkcyAqLwotICAgIGlmIChzdGF0cy0+bnVtX2J1ZmZlcnMpIHsKLSAgICAgIEdzdENsb2NrVGltZURpZmYgcnVubmluZyA9Ci0gICAgICAgICAgR1NUX0NMT0NLX0RJRkYgKHN0YXRzLT5maXJzdF90cywgc3RhdHMtPmxhc3RfdHMpOwotICAgICAgR3N0RWxlbWVudFN0YXRzICplbGVtX3N0YXRzID0gZ2V0X2VsZW1lbnRfc3RhdHMgKHN0YXRzLT5wYXJlbnRfaXgpOwotICAgICAgZ2NoYXIgZnVsbG5hbWVbMzAgKyAxXTsKLQotICAgICAgZ19zbnByaW50ZiAoZnVsbG5hbWUsIDMwLCAiJXMuJXMiLCBlbGVtX3N0YXRzLT5uYW1lLCBzdGF0cy0+bmFtZSk7Ci0KLSAgICAgIHByaW50ZgotICAgICAgICAgICgiICAgICVjICUtMzAuMzBzOiBidWZmZXJzICU3dSAobGl2ZSAlNXUsZGVjICU1dSxkaXMgJTV1LHJlcyAlNXUsIgotICAgICAgICAgICJjb3IgJTV1LG1hciAlNXUsaGRyICU1dSxnYXAgJTV1LGRyb3AgJTV1LGRsdCAlNXUpLCIsCi0gICAgICAgICAgKHN0YXRzLT5kaXIgPT0gR1NUX1BBRF9TUkMpID8gJz4nIDogJzwnLCBmdWxsbmFtZSwgc3RhdHMtPm51bV9idWZmZXJzLAotICAgICAgICAgIHN0YXRzLT5udW1fbGl2ZSwgc3RhdHMtPm51bV9kZWNvZGVfb25seSwgc3RhdHMtPm51bV9kaXNjb250LAotICAgICAgICAgIHN0YXRzLT5udW1fcmVzeW5jLCBzdGF0cy0+bnVtX2NvcnJ1cHRlZCwgc3RhdHMtPm51bV9tYXJrZXIsCi0gICAgICAgICAgc3RhdHMtPm51bV9oZWFkZXIsIHN0YXRzLT5udW1fZ2FwLCBzdGF0cy0+bnVtX2Ryb3BwYWJsZSwKLSAgICAgICAgICBzdGF0cy0+bnVtX2RlbHRhKTsKLSAgICAgIGlmIChzdGF0cy0+bWluX3NpemUgPT0gc3RhdHMtPm1heF9zaXplKSB7Ci0gICAgICAgIHByaW50ZiAoIiBzaXplIChtaW4vYXZnL21heCkgLi4uLi4uLi8lN3UvLi4uLi4uLiwiLCBzdGF0cy0+YXZnX3NpemUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmICgiIHNpemUgKG1pbi9hdmcvbWF4KSAlN3UvJTd1LyU3dSwiLAotICAgICAgICAgICAgc3RhdHMtPm1pbl9zaXplLCBzdGF0cy0+YXZnX3NpemUsIHN0YXRzLT5tYXhfc2l6ZSk7Ci0gICAgICB9Ci0gICAgICBwcmludGYgKCIgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiwiCi0gICAgICAgICAgIiBieXRlcy9zZWMgJWxmXG4iLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHJ1bm5pbmcpLAotICAgICAgICAgICgoZ2RvdWJsZSkgKHN0YXRzLT5udW1fYnVmZmVycyAqIHN0YXRzLT5hdmdfc2l6ZSkgKiBHU1RfU0VDT05EKSAvCi0gICAgICAgICAgKChnZG91YmxlKSBydW5uaW5nKSk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF90aHJlYWRfc3RhdHMgKGdwb2ludGVyIGtleSwgZ3BvaW50ZXIgdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR1NMaXN0ICpsaXN0ID0gdXNlcl9kYXRhOwotICBHU0xpc3QgKm5vZGUgPSBnX3NsaXN0X2ZpbmRfY3VzdG9tIChsaXN0LCBrZXksIGZpbmRfcGFkX3N0YXRzX2Zvcl90aHJlYWQpOwotICBHc3RUaHJlYWRTdGF0cyAqc3RhdHMgPSAoR3N0VGhyZWFkU3RhdHMgKikgdmFsdWU7Ci0KLSAgLyogc2tpcCBzdGF0cyBpZiB0aGVyZSBhcmUgbm8gcGFkcyBmb3IgdGhhdCB0aHJlYWQgKGUuZy4gYSBwaXBlbGluZSkgKi8KLSAgaWYgKCFub2RlKQotICAgIHJldHVybjsKLQotICBwcmludGYgKCJUaHJlYWQgJXAgU3RhdGlzdGljczpcbiIsIGtleSk7Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RhdHMtPnR0aHJlYWQpKSB7Ci0gICAgcHJpbnRmICgiICBUaW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwgR1NUX1RJTUVfQVJHUyAoc3RhdHMtPnR0aHJlYWQpKTsKLSAgICBwcmludGYgKCIgIEF2ZyBDUFUgbG9hZDogJTQuMWYgJSVcbiIsIChnZmxvYXQpIHN0YXRzLT5jcHVsb2FkIC8gMTAuMCk7Ci0gIH0KLQotICBwdXRzICgiICBQYWQgU3RhdGlzdGljczoiKTsKLSAgZ19zbGlzdF9mb3JlYWNoIChub2RlLCBwcmludF9wYWRfc3RhdHMsIGtleSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9lbGVtZW50X3N0YXRzIChncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RFbGVtZW50U3RhdHMgKnN0YXRzID0gKEdzdEVsZW1lbnRTdGF0cyAqKSB2YWx1ZTsKLQotICAvKiBza2lwIHRlbXBvcmFyeSBlbGVtZW50cyAqLwotICBpZiAoc3RhdHMtPmZpcnN0X3RzICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBnY2hhciBmdWxsbmFtZVs0NSArIDFdOwotCi0gICAgZ19zbnByaW50ZiAoZnVsbG5hbWUsIDQ1LCAiJXM6JXMiLCBzdGF0cy0+dHlwZV9uYW1lLCBzdGF0cy0+bmFtZSk7Ci0KLSAgICBwcmludGYgKCIgICUtNDVzOiIsIGZ1bGxuYW1lKTsKLSAgICBpZiAoc3RhdHMtPnJlY3ZfYnVmZmVycykKLSAgICAgIHByaW50ZiAoIiBidWZmZXJzIGluL291dCAlN3UiLCBzdGF0cy0+cmVjdl9idWZmZXJzKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYgKCIgYnVmZmVycyBpbi9vdXQgJTdzIiwgIi0iKTsKLSAgICBpZiAoc3RhdHMtPnNlbnRfYnVmZmVycykKLSAgICAgIHByaW50ZiAoIi8lN3UiLCBzdGF0cy0+c2VudF9idWZmZXJzKTsKLSAgICBlbHNlCi0gICAgICBwcmludGYgKCIvJTdzIiwgIi0iKTsKLSAgICBpZiAoc3RhdHMtPnJlY3ZfYnl0ZXMpCi0gICAgICBwcmludGYgKCIgYnl0ZXMgaW4vb3V0ICUxMiIgR19HVUlOVDY0X0ZPUk1BVCwgc3RhdHMtPnJlY3ZfYnl0ZXMpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZiAoIiBieXRlcyBpbi9vdXQgJTEycyIsICItIik7Ci0gICAgaWYgKHN0YXRzLT5zZW50X2J5dGVzKQotICAgICAgcHJpbnRmICgiLyUxMiIgR19HVUlOVDY0X0ZPUk1BVCwgc3RhdHMtPnNlbnRfYnl0ZXMpOwotICAgIGVsc2UKLSAgICAgIHByaW50ZiAoIi8lMTJzIiwgIi0iKTsKLSAgICBwcmludGYgKCIgZmlyc3QgYWN0aXZpdHkgJSIgR1NUX1RJTUVfRk9STUFUICIsICIKLSAgICAgICAgIiBldi9tc2cvcXJ5IHNlbnQgJTV1LyU1dS8lNXVcbiIsIEdTVF9USU1FX0FSR1MgKHN0YXRzLT5maXJzdF90cyksCi0gICAgICAgIHN0YXRzLT5udW1fZXZlbnRzLCBzdGF0cy0+bnVtX21lc3NhZ2VzLCBzdGF0cy0+bnVtX3F1ZXJpZXMpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hY2N1bV9lbGVtZW50X3N0YXRzIChncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RFbGVtZW50U3RhdHMgKnN0YXRzID0gKEdzdEVsZW1lbnRTdGF0cyAqKSB2YWx1ZTsKLQotICBpZiAoc3RhdHMtPnBhcmVudF9peCAhPSBHX01BWFVJTlQpIHsKLSAgICBHc3RFbGVtZW50U3RhdHMgKnBhcmVudF9zdGF0cyA9IGdldF9lbGVtZW50X3N0YXRzIChzdGF0cy0+cGFyZW50X2l4KTsKLQotICAgIHBhcmVudF9zdGF0cy0+bnVtX2V2ZW50cyArPSBzdGF0cy0+bnVtX2V2ZW50czsKLSAgICBwYXJlbnRfc3RhdHMtPm51bV9tZXNzYWdlcyArPSBzdGF0cy0+bnVtX21lc3NhZ2VzOwotICAgIHBhcmVudF9zdGF0cy0+bnVtX3F1ZXJpZXMgKz0gc3RhdHMtPm51bV9xdWVyaWVzOwotICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcmVudF9zdGF0cy0+Zmlyc3RfdHMpKSB7Ci0gICAgICBwYXJlbnRfc3RhdHMtPmZpcnN0X3RzID0gc3RhdHMtPmZpcnN0X3RzOwotICAgIH0gZWxzZSBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXRzLT5maXJzdF90cykpIHsKLSAgICAgIHBhcmVudF9zdGF0cy0+Zmlyc3RfdHMgPSBNSU4gKHBhcmVudF9zdGF0cy0+Zmlyc3RfdHMsIHN0YXRzLT5maXJzdF90cyk7Ci0gICAgfQotICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcmVudF9zdGF0cy0+bGFzdF90cykpIHsKLSAgICAgIHBhcmVudF9zdGF0cy0+bGFzdF90cyA9IHN0YXRzLT5sYXN0X3RzOwotICAgIH0gZWxzZSBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0YXRzLT5sYXN0X3RzKSkgewotICAgICAgcGFyZW50X3N0YXRzLT5sYXN0X3RzID0gTUFYIChwYXJlbnRfc3RhdHMtPmxhc3RfdHMsIHN0YXRzLT5sYXN0X3RzKTsKLSAgICB9Ci0gIH0KLX0KLQotLyogc29ydGluZyAqLwotCi1zdGF0aWMgZ2ludAotc29ydF9wYWRfc3RhdHNfYnlfZmlyc3RfYWN0aXZpdHkgKGdjb25zdHBvaW50ZXIgcHMxLCBnY29uc3Rwb2ludGVyIHBzMikKLXsKLSAgR3N0UGFkU3RhdHMgKnMxID0gKEdzdFBhZFN0YXRzICopIHBzMTsKLSAgR3N0UGFkU3RhdHMgKnMyID0gKEdzdFBhZFN0YXRzICopIHBzMjsKLQotICBnaW50IG9yZGVyID0gR1NUX0NMT0NLX0RJRkYgKHMyLT5maXJzdF90cywgczEtPmZpcnN0X3RzKTsKLQotICBpZiAoIW9yZGVyKSB7Ci0gICAgb3JkZXIgPSBzMS0+ZGlyIC0gczItPmRpcjsKLSAgfQotICByZXR1cm4gKG9yZGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLXNvcnRfcGFkX3N0YXRzIChncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHU0xpc3QgKipsaXN0ID0gdXNlcl9kYXRhOwotCi0gICpsaXN0ID0KLSAgICAgIGdfc2xpc3RfaW5zZXJ0X3NvcnRlZCAoKmxpc3QsIHZhbHVlLCBzb3J0X3BhZF9zdGF0c19ieV9maXJzdF9hY3Rpdml0eSk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1zb3J0X2VsZW1lbnRfc3RhdHNfYnlfZmlyc3RfYWN0aXZpdHkgKGdjb25zdHBvaW50ZXIgZXMxLCBnY29uc3Rwb2ludGVyIGVzMikKLXsKLSAgcmV0dXJuIChHU1RfQ0xPQ0tfRElGRiAoKChHc3RFbGVtZW50U3RhdHMgKikgZXMyKS0+Zmlyc3RfdHMsCi0gICAgICAgICAgKChHc3RFbGVtZW50U3RhdHMgKikgZXMxKS0+Zmlyc3RfdHMpKTsKLX0KLQotc3RhdGljIHZvaWQKLXNvcnRfYmluX3N0YXRzIChncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZiAoKChHc3RFbGVtZW50U3RhdHMgKikgdmFsdWUpLT5pc19iaW4pIHsKLSAgICBHU0xpc3QgKipsaXN0ID0gdXNlcl9kYXRhOwotCi0gICAgKmxpc3QgPQotICAgICAgICBnX3NsaXN0X2luc2VydF9zb3J0ZWQgKCpsaXN0LCB2YWx1ZSwKLSAgICAgICAgc29ydF9lbGVtZW50X3N0YXRzX2J5X2ZpcnN0X2FjdGl2aXR5KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotc29ydF9lbGVtZW50X3N0YXRzIChncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZiAoISgoKEdzdEVsZW1lbnRTdGF0cyAqKSB2YWx1ZSktPmlzX2JpbikpIHsKLSAgICBHU0xpc3QgKipsaXN0ID0gdXNlcl9kYXRhOwotCi0gICAgKmxpc3QgPQotICAgICAgICBnX3NsaXN0X2luc2VydF9zb3J0ZWQgKCpsaXN0LCB2YWx1ZSwKLSAgICAgICAgc29ydF9lbGVtZW50X3N0YXRzX2J5X2ZpcnN0X2FjdGl2aXR5KTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNoZWNrX2Jpbl9wYXJlbnQgKGdwb2ludGVyIGtleSwgZ3BvaW50ZXIgdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudFN0YXRzICpzdGF0cyA9IChHc3RFbGVtZW50U3RhdHMgKikgdmFsdWU7Ci0KLSAgcmV0dXJuIChzdGF0cy0+cGFyZW50X2l4ID09IEdQT0lOVEVSX1RPX1VJTlQgKHVzZXJfZGF0YSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXByb2Nlc3NfbGVhZl9iaW5zIChncG9pbnRlciBrZXksIGdwb2ludGVyIHZhbHVlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdIYXNoVGFibGUgKmFjY3VtX2JpbnMgPSB1c2VyX2RhdGE7Ci0KLSAgLyogaWYgd2UgZmluZCBubyBiaW4gdGhhdCBoYXMgdGhpcyBiaW4gYXMgYSBwYXJlbnQgLi4uICovCi0gIGlmICghZ19oYXNoX3RhYmxlX2ZpbmQgKGFjY3VtX2JpbnMsIGNoZWNrX2Jpbl9wYXJlbnQsIGtleSkpIHsKLSAgICAvKiBhY2N1bXVsYXRlIHN0YXRzIHRvIHRoZSBwYXJlbnQgYW5kIHJlbW92ZSAqLwotICAgIGFjY3VtX2VsZW1lbnRfc3RhdHMgKHZhbHVlLCBOVUxMKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIG1haW4gKi8KLQotc3RhdGljIGdib29sZWFuCi1pbml0ICh2b2lkKQotewotICAvKiBjb21waWxlIHRoZSBwYXJzZXIgcmVnZXhwcyAqLwotICAvKiAwOjAwOjAwLjAwNDkyNTAyNyAzMTU4NiAgICAgIDB4MWM1YzYwMCBERUJVRyAgICAgICAgICAgR1NUX1JFR0lTVFJZIGdzdHJlZ2lzdHJ5LmM6NDYzOmdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luOjxyZWdpc3RyeTA+IGFkZGluZyBwbHVnaW4gMHgxYzc5MTYwIGZvciBmaWxlbmFtZSAiL3Vzci9saWIvZ3N0cmVhbWVyLTEuMC9saWJnc3R4eHguc28iICovCi0gIHJhd19sb2cgPSBnX3JlZ2V4X25ldyAoCi0gICAgICAvKiAxOiB0cyAqLwotICAgICAgIl4oWzAtOTouXSspICsiCi0gICAgICAvKiAyOiBwaWQgKi8KLSAgICAgICIoWzAtOV0rKSArIgotICAgICAgLyogMzogdGhyZWFkICovCi0gICAgICAiKDB4WzAtOWEtZkEtRl0rKSArIgotICAgICAgLyogNDogbGV2ZWwgKi8KLSAgICAgICIoW0EtWl0rKSArIgotICAgICAgLyogNTogY2F0ZWdvcnkgKi8KLSAgICAgICIoW2EtekEtWl8tXSspICsiCi0gICAgICAvKiA2OiBmaWxlOmxpbmU6ZnVuYzogKi8KLSAgICAgICIoW146XSo6WzAtOV0rOlteOl0qOikgKyIKLSAgICAgIC8qIDc6IChvYmopPyBsb2ctdGV4dCAqLwotICAgICAgIiguKikkIiwgMCwgMCwgTlVMTCk7Ci0gIGlmICghcmF3X2xvZykgewotICAgIEdTVF9XQVJOSU5HICgiZmFpbGVkIHRvIGNvbXBpbGUgdGhlICdyYXcnIHBhcnNlciIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGFuc2lfbG9nID0gZ19yZWdleF9uZXcgKAotICAgICAgLyogMTogdHMgKi8KLSAgICAgICJeKFswLTk6Ll0rKSArIgotICAgICAgLyogMjogcGlkICovCi0gICAgICAiXFxcZVxcXFtbMC05O10rbSAqKFswLTldKylcXFxlXFxcWzAwbSArIgotICAgICAgLyogMzogdGhyZWFkICovCi0gICAgICAiKDB4WzAtOWEtZkEtRl0rKSArIgotICAgICAgLyogNDogbGV2ZWwgKi8KLSAgICAgICIoPzpcXFxlXFxcW1swLTk7XSttKT8oW0EtWl0rKSArXFxcZVxcXFswMG0gKyIKLSAgICAgIC8qIDU6IGNhdGVnb3J5ICovCi0gICAgICAiXFxcZVxcXFtbMC05O10rbSArKFthLXpBLVpfLV0rKSArIgotICAgICAgLyogNjogZmlsZTpsaW5lOmZ1bmM6ICovCi0gICAgICAiKFteOl0qOlswLTldKzpbXjpdKjopKD86XFxcZVxcXFswMG0pPyArIgotICAgICAgLyogNzogKG9iaik/IGxvZy10ZXh0ICovCi0gICAgICAiKC4qKSQiLCAwLCAwLCBOVUxMKTsKLSAgaWYgKCFyYXdfbG9nKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJmYWlsZWQgdG8gY29tcGlsZSB0aGUgJ2Fuc2knIHBhcnNlciIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGVsZW1lbnRzID0gZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jIChmcmVlX2VsZW1lbnRfc3RhdHMpOwotICBwYWRzID0gZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jIChmcmVlX3BhZF9zdGF0cyk7Ci0gIHRocmVhZHMgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKE5VTEwsIE5VTEwsIE5VTEwsIGZyZWVfdGhyZWFkX3N0YXRzKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWRvbmUgKHZvaWQpCi17Ci0gIGlmIChwYWRzKQotICAgIGdfcHRyX2FycmF5X2ZyZWUgKHBhZHMsIFRSVUUpOwotICBpZiAoZWxlbWVudHMpCi0gICAgZ19wdHJfYXJyYXlfZnJlZSAoZWxlbWVudHMsIFRSVUUpOwotICBpZiAodGhyZWFkcykKLSAgICBnX2hhc2hfdGFibGVfZGVzdHJveSAodGhyZWFkcyk7Ci0KLSAgaWYgKHJhd19sb2cpCi0gICAgZ19yZWdleF91bnJlZiAocmF3X2xvZyk7Ci0gIGlmIChhbnNpX2xvZykKLSAgICBnX3JlZ2V4X3VucmVmIChhbnNpX2xvZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcmludF9zdGF0cyAodm9pZCkKLXsKLSAgZ3VpbnQgbnVtX3RocmVhZHMgPSBnX2hhc2hfdGFibGVfc2l6ZSAodGhyZWFkcyk7Ci0KLSAgLyogcHJpbnQgb3ZlcmFsbCBzdGF0cyAqLwotICBwdXRzICgiXG5PdmVyYWxsIFN0YXRpc3RpY3M6Iik7Ci0gIHByaW50ZiAoIk51bWJlciBvZiBUaHJlYWRzOiAldVxuIiwgbnVtX3RocmVhZHMpOwotICBwcmludGYgKCJOdW1iZXIgb2YgRWxlbWVudHM6ICV1XG4iLCBudW1fZWxlbWVudHMgLSBudW1fYmlucyk7Ci0gIHByaW50ZiAoIk51bWJlciBvZiBCaW5zOiAldVxuIiwgbnVtX2JpbnMpOwotICBwcmludGYgKCJOdW1iZXIgb2YgUGFkczogJXVcbiIsIG51bV9wYWRzIC0gbnVtX2dob3N0cGFkcyk7Ci0gIHByaW50ZiAoIk51bWJlciBvZiBHaG9zdFBhZHM6ICV1XG4iLCBudW1fZ2hvc3RwYWRzKTsKLSAgcHJpbnRmICgiTnVtYmVyIG9mIEJ1ZmZlcnMgcGFzc2VkOiAlIiBHX0dVSU5UNjRfRk9STUFUICJcbiIsIG51bV9idWZmZXJzKTsKLSAgcHJpbnRmICgiTnVtYmVyIG9mIEV2ZW50cyBzZW50OiAlIiBHX0dVSU5UNjRfRk9STUFUICJcbiIsIG51bV9ldmVudHMpOwotICBwcmludGYgKCJOdW1iZXIgb2YgTWVzc2FnZSBzZW50OiAlIiBHX0dVSU5UNjRfRk9STUFUICJcbiIsIG51bV9tZXNzYWdlcyk7Ci0gIHByaW50ZiAoIk51bWJlciBvZiBRdWVyaWVzIHNlbnQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIlxuIiwgbnVtX3F1ZXJpZXMpOwotICBwcmludGYgKCJUaW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwgR1NUX1RJTUVfQVJHUyAobGFzdF90cykpOwotICBpZiAoaGF2ZV9jcHVsb2FkKSB7Ci0gICAgcHJpbnRmICgiQXZnIENQVSBsb2FkOiAlNC4xZiAlJVxuIiwgKGdmbG9hdCkgdG90YWxfY3B1bG9hZCAvIDEwLjApOwotICB9Ci0gIHB1dHMgKCIiKTsKLQotICAvKiB0aHJlYWQgc3RhdHMgKi8KLSAgaWYgKG51bV90aHJlYWRzKSB7Ci0gICAgR1NMaXN0ICpsaXN0ID0gTlVMTDsKLQotICAgIGdfcHRyX2FycmF5X2ZvcmVhY2ggKHBhZHMsIHNvcnRfcGFkX3N0YXRzLCAmbGlzdCk7Ci0gICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKHRocmVhZHMsIHByaW50X3RocmVhZF9zdGF0cywgbGlzdCk7Ci0gICAgcHV0cyAoIiIpOwotICAgIGdfc2xpc3RfZnJlZSAobGlzdCk7Ci0gIH0KLQotICAvKiBlbGVtZW50IHN0YXRzICovCi0gIGlmIChudW1fZWxlbWVudHMpIHsKLSAgICBHU0xpc3QgKmxpc3QgPSBOVUxMOwotCi0gICAgcHV0cyAoIkVsZW1lbnQgU3RhdGlzdGljczoiKTsKLSAgICAvKiBzb3J0IGJ5IGZpcnN0X2FjdGl2aXR5ICovCi0gICAgZ19wdHJfYXJyYXlfZm9yZWFjaCAoZWxlbWVudHMsIHNvcnRfZWxlbWVudF9zdGF0cywgJmxpc3QpOwotICAgIC8qIGF0dHJpYnV0ZSBlbGVtZW50IHN0YXRzIHRvIGJpbnMgKi8KLSAgICBnX3NsaXN0X2ZvcmVhY2ggKGxpc3QsIGFjY3VtX2VsZW1lbnRfc3RhdHMsIE5VTEwpOwotICAgIGdfc2xpc3RfZm9yZWFjaCAobGlzdCwgcHJpbnRfZWxlbWVudF9zdGF0cywgTlVMTCk7Ci0gICAgcHV0cyAoIiIpOwotICAgIGdfc2xpc3RfZnJlZSAobGlzdCk7Ci0gIH0KLQotICAvKiBiaW4gc3RhdHMgKi8KLSAgaWYgKG51bV9iaW5zKSB7Ci0gICAgR1NMaXN0ICpsaXN0ID0gTlVMTDsKLSAgICBndWludCBpOwotICAgIEdIYXNoVGFibGUgKmFjY3VtX2JpbnMgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgcHV0cyAoIkJpbiBTdGF0aXN0aWNzOiIpOwotICAgIC8qIGF0dHJpYnV0ZSBiaW4gc3RhdHMgdG8gcGFyZW50LWJpbnMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRzOyBpKyspIHsKLSAgICAgIEdzdEVsZW1lbnRTdGF0cyAqc3RhdHMgPSBnX3B0cl9hcnJheV9pbmRleCAoZWxlbWVudHMsIGkpOwotICAgICAgaWYgKHN0YXRzLT5pc19iaW4pIHsKLSAgICAgICAgZ19oYXNoX3RhYmxlX2luc2VydCAoYWNjdW1fYmlucywgR1VJTlRfVE9fUE9JTlRFUiAoaSksIHN0YXRzKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgd2hpbGUgKGdfaGFzaF90YWJsZV9zaXplIChhY2N1bV9iaW5zKSkgewotICAgICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlIChhY2N1bV9iaW5zLCBwcm9jZXNzX2xlYWZfYmlucywgYWNjdW1fYmlucyk7Ci0gICAgfQotICAgIGdfaGFzaF90YWJsZV9kZXN0cm95IChhY2N1bV9iaW5zKTsKLSAgICAvKiBzb3J0IGJ5IGZpcnN0X2FjdGl2aXR5ICovCi0gICAgZ19wdHJfYXJyYXlfZm9yZWFjaCAoZWxlbWVudHMsIHNvcnRfYmluX3N0YXRzLCAmbGlzdCk7Ci0gICAgZ19zbGlzdF9mb3JlYWNoIChsaXN0LCBwcmludF9lbGVtZW50X3N0YXRzLCBOVUxMKTsKLSAgICBwdXRzICgiIik7Ci0gICAgZ19zbGlzdF9mcmVlIChsaXN0KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY29sbGVjdF9zdGF0cyAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSkKLXsKLSAgRklMRSAqbG9nOwotCi0gIGlmICgobG9nID0gZm9wZW4gKGZpbGVuYW1lLCAicnQiKSkpIHsKLSAgICBnY2hhciBsaW5lWzUwMDFdOwotCi0gICAgLyogcHJvYmUgZm9ybWF0ICovCi0gICAgaWYgKGZnZXRzIChsaW5lLCA1MDAwLCBsb2cpKSB7Ci0gICAgICBHTWF0Y2hJbmZvICptYXRjaF9pbmZvOwotICAgICAgR1JlZ2V4ICpwYXJzZXI7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgICBndWludCBsbnIgPSAwOwotICAgICAgZ2NoYXIgKmxldmVsLCAqZGF0YTsKLQotICAgICAgaWYgKHN0cmNociAobGluZSwgMjcpKSB7Ci0gICAgICAgIHBhcnNlciA9IGFuc2lfbG9nOwotICAgICAgICBHU1RfSU5GTyAoImZvcm1hdCBpcyAnYW5zaSciKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhcnNlciA9IHJhd19sb2c7Ci0gICAgICAgIEdTVF9JTkZPICgiZm9ybWF0IGlzICdyYXcnIik7Ci0gICAgICB9Ci0gICAgICByZXdpbmQgKGxvZyk7Ci0KLSAgICAgIC8qIHBhcnNlIHRoZSBsb2cgKi8KLSAgICAgIHdoaWxlICghZmVvZiAobG9nKSkgewotICAgICAgICBpZiAoZmdldHMgKGxpbmUsIDUwMDAsIGxvZykpIHsKLSAgICAgICAgICBpZiAoZ19yZWdleF9tYXRjaCAocGFyc2VyLCBsaW5lLCAwLCAmbWF0Y2hfaW5mbykpIHsKLSAgICAgICAgICAgIC8qIGZpbHRlciBieSBsZXZlbCAqLwotICAgICAgICAgICAgbGV2ZWwgPSBnX21hdGNoX2luZm9fZmV0Y2ggKG1hdGNoX2luZm8sIDQpOwotICAgICAgICAgICAgaWYgKCFzdHJjbXAgKGxldmVsLCAiVFJBQ0UiKSkgewotICAgICAgICAgICAgICBkYXRhID0gZ19tYXRjaF9pbmZvX2ZldGNoIChtYXRjaF9pbmZvLCA3KTsKLSAgICAgICAgICAgICAgaWYgKChzID0gZ3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZyAoZGF0YSwgTlVMTCkpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKTsKLQotICAgICAgICAgICAgICAgIGlmICghc3RyY21wIChuYW1lLCAibmV3LXBhZCIpKSB7Ci0gICAgICAgICAgICAgICAgICBuZXdfcGFkX3N0YXRzIChzKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG5hbWUsICJuZXctZWxlbWVudCIpKSB7Ci0gICAgICAgICAgICAgICAgICBuZXdfZWxlbWVudF9zdGF0cyAocyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wIChuYW1lLCAiYnVmZmVyIikpIHsKLSAgICAgICAgICAgICAgICAgIGRvX2J1ZmZlcl9zdGF0cyAocyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wIChuYW1lLCAiZXZlbnQiKSkgewotICAgICAgICAgICAgICAgICAgZG9fZXZlbnRfc3RhdHMgKHMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobmFtZSwgIm1lc3NhZ2UiKSkgewotICAgICAgICAgICAgICAgICAgZG9fbWVzc2FnZV9zdGF0cyAocyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wIChuYW1lLCAicXVlcnkiKSkgewotICAgICAgICAgICAgICAgICAgZG9fcXVlcnlfc3RhdHMgKHMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobmFtZSwgInRocmVhZC1ydXNhZ2UiKSkgewotICAgICAgICAgICAgICAgICAgZG9fdGhyZWFkX3J1c2FnZV9zdGF0cyAocyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wIChuYW1lLCAicHJvYy1ydXNhZ2UiKSkgewotICAgICAgICAgICAgICAgICAgZG9fcHJvY19ydXNhZ2Vfc3RhdHMgKHMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAvLyBUT0RPKGVuc29uaWMpOiBwYXJzZSB0aGUgeHh4LmNsYXNzIGxvZyBsaW5lcwotICAgICAgICAgICAgICAgICAgaWYgKCFnX3N0cl9oYXNfc3VmZml4IChkYXRhLCAiLmNsYXNzIikpIHsKLSAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcgKCJ1bmtub3duIGxvZyBlbnRyeTogJyVzJyIsIGRhdGEpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HICgidW5rbm93biBsb2cgZW50cnk6ICclcyciLCBkYXRhKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKmxpbmUpIHsKLSAgICAgICAgICAgICAgR1NUX1dBUk5JTkcgKCJmb3JlaWduIGxvZyBlbnRyeTogJXM6JWQ6JyVzJyIsIGZpbGVuYW1lLCBsbnIsCi0gICAgICAgICAgICAgICAgICBnX3N0cmNob21wIChsaW5lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGdfbWF0Y2hfaW5mb19mcmVlIChtYXRjaF9pbmZvKTsKLSAgICAgICAgICBtYXRjaF9pbmZvID0gTlVMTDsKLSAgICAgICAgICBsbnIrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoIWZlb2YgKGxvZykpIHsKLSAgICAgICAgICAgIC8vIFRPRE8oZW5zb25pYyk6IHJ1biB3YyAtTCBvbiB0aGUgbG9nIGZpbGUKLSAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgImxpbmUgdG9vIGxvbmciKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcgKCJlbXB0eSBsb2ciKTsKLSAgICB9Ci0gICAgZmNsb3NlIChsb2cpOwotICB9Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCi17Ci0gIGdjaGFyICoqZmlsZW5hbWVzID0gTlVMTDsKLSAgZ3VpbnQgbnVtOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7Ci0gICAgR1NUX1RPT0xTX0dPUFRJT05fVkVSU0lPTiwKLSAgICAvLyBUT0RPKGVuc29uaWMpOiBhZGQgYSBzdW1tYXJ5IGZsYWcsIGlmIHNldCByZWFkIHRoZSB3aG9sZSB0aGluZywgcHJpbnQKLSAgICAvLyBzdGF0cyBvbmNlLCBhbmQgZXhpdAotICAgIHtHX09QVElPTl9SRU1BSU5JTkcsIDAsIDAsIEdfT1BUSU9OX0FSR19GSUxFTkFNRV9BUlJBWSwgJmZpbGVuYW1lcywgTlVMTH0KLSAgICAsCi0gICAge05VTEx9Ci0gIH07Ci0KLSNpZmRlZiBFTkFCTEVfTkxTCi0gIGJpbmR0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UsIExPQ0FMRURJUik7Ci0gIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChHRVRURVhUX1BBQ0tBR0UsICJVVEYtOCIpOwotICB0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UpOwotI2VuZGlmCi0KLSAgZ19zZXRfcHJnbmFtZSAoImdzdC1zdGF0cy0iIEdTVF9BUElfVkVSU0lPTik7Ci0KLSAgY3R4ID0gZ19vcHRpb25fY29udGV4dF9uZXcgKCJGSUxFIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKLSAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsICZhcmdjLCAmYXJndiwgJmVycikpIHsKLSAgICBnX3ByaW50ICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgR1NUX1NUUl9OVUxMIChlcnItPm1lc3NhZ2UpKTsKLSAgICBleGl0ICgxKTsKLSAgfQotICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0KLSAgZ3N0X3Rvb2xzX3ByaW50X3ZlcnNpb24gKCk7Ci0KLSAgaWYgKGZpbGVuYW1lcyA9PSBOVUxMIHx8ICpmaWxlbmFtZXMgPT0gTlVMTCkgewotICAgIGdfcHJpbnQgKCJQbGVhc2UgZ2l2ZSBvbmUgZmlsZW5hbWUgdG8gJXNcblxuIiwgZ19nZXRfcHJnbmFtZSAoKSk7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgbnVtID0gZ19zdHJ2X2xlbmd0aCAoZmlsZW5hbWVzKTsKLSAgaWYgKG51bSA9PSAwIHx8IG51bSA+IDEpIHsKLSAgICBnX3ByaW50ICgiUGxlYXNlIGdpdmUgZXhhY3RseSBvbmUgZmlsZW5hbWUgdG8gJXMgKCVkIGdpdmVuKS5cblxuIiwKLSAgICAgICAgZ19nZXRfcHJnbmFtZSAoKSwgbnVtKTsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIGlmIChpbml0ICgpKSB7Ci0gICAgY29sbGVjdF9zdGF0cyAoZmlsZW5hbWVzWzBdKTsKLSAgICBwcmludF9zdGF0cyAoKTsKLSAgfQotICBkb25lICgpOwotCi0gIGdfc3RyZnJlZXYgKGZpbGVuYW1lcyk7Ci0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3N0LXR5cGVmaW5kLjEuaW4gYi90b29scy9nc3QtdHlwZWZpbmQuMS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwYzY4Zi4uMDAwMDAwMAotLS0gYS90b29scy9nc3QtdHlwZWZpbmQuMS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS5USCBHU3RyZWFtZXIgMSAiTWF5IDIwMDMiCi0uU0ggIk5BTUUiCi1nc3RcLXR5cGVmaW5kIC0gcHJpbnQgTWVkaWEgdHlwZSBvZiBmaWxlCi0uU0ggIlNZTk9QU0lTIgotLkIgIGdzdFwtdHlwZWZpbmQgPGZpbGU+Ci0uU0ggIkRFU0NSSVBUSU9OIgotLlBQCi1cZklnc3RcLXR5cGVmaW5kXGZQIHVzZXMgdGhlIEdTdHJlYW1lciB0eXBlIGZpbmRpbmcgc3lzdGVtIHRvCi1kZXRlcm1pbmUgdGhlIHJlbGV2YW50IEdTdHJlYW1lciBwbHVnaW4gdG8gcGFyc2Ugb3IgZGVjb2RlIFxmQmZpbGVcZlAsCi1hbmQgdGhlIGNvcnJlc3BvbmRpbmcgbWVkaWEgdHlwZS4KLS4KLS5TSCAiT1BUSU9OUyIKLS5sCi1cZklnc3RcLXR5cGVmaW5kXGZQIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgotLlRQIDgKLS5CICBcLVwtaGVscAotUHJpbnQgaGVscCBzeW5vcHNpcyBhbmQgYXZhaWxhYmxlIEZMQUdTCi0uVFAgOAotLkIgIFwtXC1nc3RcLWluZm9cLW1hc2s9RkxBR1MKLVxmSUdTdHJlYW1lclxmUCBpbmZvIGZsYWdzIHRvIHNldCAobGlzdCB3aXRoIFwtXC1oZWxwKQotLlRQIDgKLS5CICBcLVwtZ3N0XC1kZWJ1Z1wtbWFzaz1GTEFHUwotXGZJR1N0cmVhbWVyXGZQIGRlYnVnZ2luZyBmbGFncyB0byBzZXQgKGxpc3Qgd2l0aCBcLVwtaGVscCkKLS5UUCA4Ci0uQiAgXC1cLWdzdFwtbWFzaz1GTEFHUwotXGZJR1N0cmVhbWVyXGZQIGluZm8gYW5kIGRlYnVnZ2luZyBmbGFncyB0byBzZXQgKGxpc3Qgd2l0aCBcLVwtaGVscCkKLS5UUCA4Ci0uQiAgXC1cLWdzdFwtcGx1Z2luXC1zcGV3Ci1cZklHU3RyZWFtZXJcZlAgaW5mbyBmbGFncyB0byBzZXQKLUVuYWJsZSBwcmludG91dCBvZiBlcnJvcnMgd2hpbGUgbG9hZGluZyBcZklHU3RyZWFtZXJcZlAgcGx1Z2lucwotLlRQIDgKLS5CICBcLVwtZ3N0XC1wbHVnaW5cLXBhdGg9UEFUSAotQWRkIGRpcmVjdG9yaWVzIHNlcGFyYXRlZCB3aXRoICc6JyB0byB0aGUgcGx1Z2luIHNlYXJjaCBwYXRoCi0uCi0uU0ggIlNFRSBBTFNPIgotLkJSIGdzdFwtZmVlZGJhY2sgKDEpLAotLkJSIGdzdFwtaW5zcGVjdCAoMSksCi0uQlIgZ3N0XC1sYXVuY2ggKDEpCi0uU0ggIkFVVEhPUiIKLVRoZSBHU3RyZWFtZXIgdGVhbSBhdCBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8KZGlmZiAtLWdpdCBhL3Rvb2xzL2dzdC10eXBlZmluZC5jIGIvdG9vbHMvZ3N0LXR5cGVmaW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MGFjYTguLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3N0LXR5cGVmaW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDMgQmVuamFtaW4gT3R0ZSA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0gKiAgICAgICAgICAgICAgIDIwMDUgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotICoKLSAqIGdzdC10eXBlZmluZC5jOiBVc2UgR1N0cmVhbWVyIHRvIGZpbmQgdGhlIHR5cGUgb2YgYSBmaWxlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGxvY2FsZS5oPgotCi0jaW5jbHVkZSAidG9vbHMuaCIKLQotc3RhdGljIHZvaWQKLWhhdmVfdHlwZV9oYW5kbGVyIChHc3RFbGVtZW50ICogdHlwZWZpbmQsIGd1aW50IHByb2JhYmlsaXR5LAotICAgIGNvbnN0IEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICoqIHBfY2FwcykKLXsKLSAgaWYgKHBfY2FwcykgewotICAgICpwX2NhcHMgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotdHlwZWZpbmRfZmlsZSAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3JldDsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKnNvdXJjZTsKLSAgR3N0RWxlbWVudCAqdHlwZWZpbmQ7Ci0gIEdzdEVsZW1lbnQgKmZha2VzaW5rOwotICBHc3RTdGF0ZSBzdGF0ZTsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIEdEaXIgKmRpcjsKLQotICBpZiAoKGRpciA9IGdfZGlyX29wZW4gKGZpbGVuYW1lLCAwLCBOVUxMKSkpIHsKLSAgICBjb25zdCBnY2hhciAqZW50cnk7Ci0KLSAgICB3aGlsZSAoKGVudHJ5ID0gZ19kaXJfcmVhZF9uYW1lIChkaXIpKSkgewotICAgICAgZ2NoYXIgKnBhdGg7Ci0KLSAgICAgIHBhdGggPSBnX3N0cmNvbmNhdCAoZmlsZW5hbWUsIEdfRElSX1NFUEFSQVRPUl9TLCBlbnRyeSwgTlVMTCk7Ci0gICAgICB0eXBlZmluZF9maWxlIChwYXRoKTsKLSAgICAgIGdfZnJlZSAocGF0aCk7Ci0gICAgfQotCi0gICAgZ19kaXJfY2xvc2UgKGRpcik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLQotICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgInNvdXJjZSIpOwotICBnX2Fzc2VydCAoR1NUX0lTX0VMRU1FTlQgKHNvdXJjZSkpOwotICB0eXBlZmluZCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInR5cGVmaW5kIiwgInR5cGVmaW5kIik7Ci0gIGdfYXNzZXJ0IChHU1RfSVNfRUxFTUVOVCAodHlwZWZpbmQpKTsKLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOwotICBnX2Fzc2VydCAoR1NUX0lTX0VMRU1FTlQgKHR5cGVmaW5kKSk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzb3VyY2UsIHR5cGVmaW5kLCBmYWtlc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc291cmNlLCB0eXBlZmluZCwgZmFrZXNpbmssIE5VTEwpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh0eXBlZmluZCksICJoYXZlLXR5cGUiLAotICAgICAgR19DQUxMQkFDSyAoaGF2ZV90eXBlX2hhbmRsZXIpLCAmY2Fwcyk7Ci0KLSAgZ19vYmplY3Rfc2V0IChzb3VyY2UsICJsb2NhdGlvbiIsIGZpbGVuYW1lLCBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJTdGFydGluZyB0eXBlZmluZGluZyBmb3IgJXMiLCBmaWxlbmFtZSk7Ci0KLSAgLyogdHlwZWZpbmQgd2lsbCBvbmx5IGNvbW1pdCB0byBQQVVTRUQgaWYgaXQgYWN0dWFsbHkgZmluZHMgYSB0eXBlOwotICAgKiBvdGhlcndpc2UgdGhlIHN0YXRlIGNoYW5nZSBmYWlscyAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlbGluZSksIEdTVF9TVEFURV9QQVVTRUQpOwotCi0gIC8qIHdhaXQgdW50aWwgc3RhdGUgY2hhbmdlIGVpdGhlciBjb21wbGV0ZXMgb3IgZmFpbHMgKi8KLSAgc3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgJnN0YXRlLCBOVUxMLCAtMSk7Ci0KLSAgc3dpdGNoIChzcmV0KSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU6ewotICAgICAgR3N0TWVzc2FnZSAqbXNnOwotICAgICAgR3N0QnVzICpidXM7Ci0gICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgICAgIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gICAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRVJST1IsIDApOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICAgICAgaWYgKG1zZykgewotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmZXJyLCBOVUxMKTsKLSAgICAgICAgZ19wcmludGVyciAoIiVzIC0gRkFJTEVEOiAlc1xuIiwgZmlsZW5hbWUsIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfcHJpbnRlcnIgKCIlcyAtIEZBSUxFRDogdW5rbm93biBlcnJvclxuIiwgZmlsZW5hbWUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOnsKLSAgICAgIGlmIChjYXBzKSB7Ci0gICAgICAgIGdjaGFyICpjYXBzX3N0cjsKLQotICAgICAgICBjYXBzX3N0ciA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7Ci0gICAgICAgIGdfcHJpbnQgKCIlcyAtICVzXG4iLCBmaWxlbmFtZSwgY2Fwc19zdHIpOwotICAgICAgICBnX2ZyZWUgKGNhcHNfc3RyKTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ19wcmludCAoIiVzIC0gJXNcbiIsIGZpbGVuYW1lLCAiTm8gdHlwZSBmb3VuZCIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgfQotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIGdjaGFyICoqZmlsZW5hbWVzID0gTlVMTDsKLSAgZ3VpbnQgbnVtLCBpOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7Ci0gICAgR1NUX1RPT0xTX0dPUFRJT05fVkVSU0lPTiwKLSAgICB7R19PUFRJT05fUkVNQUlOSU5HLCAwLCAwLCBHX09QVElPTl9BUkdfRklMRU5BTUVfQVJSQVksICZmaWxlbmFtZXMsIE5VTEx9LAotICAgIHtOVUxMfQotICB9OwotCi0gIHNldGxvY2FsZSAoTENfQUxMLCAiIik7Ci0KLSNpZmRlZiBFTkFCTEVfTkxTCi0gIGJpbmR0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UsIExPQ0FMRURJUik7Ci0gIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChHRVRURVhUX1BBQ0tBR0UsICJVVEYtOCIpOwotICB0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UpOwotI2VuZGlmCi0KLSAgZ19zZXRfcHJnbmFtZSAoImdzdC10eXBlZmluZC0iIEdTVF9BUElfVkVSU0lPTik7Ci0KLSAgY3R4ID0gZ19vcHRpb25fY29udGV4dF9uZXcgKCJGSUxFUyIpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgb3B0aW9ucywgR0VUVEVYVF9QQUNLQUdFKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0gIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYXJnYywgJmFyZ3YsICZlcnIpKSB7Ci0gICAgZ19wcmludCAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIEdTVF9TVFJfTlVMTCAoZXJyLT5tZXNzYWdlKSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotICAgIGV4aXQgKDEpOwotICB9Ci0gIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLQotICBnc3RfdG9vbHNfcHJpbnRfdmVyc2lvbiAoKTsKLQotICBpZiAoZmlsZW5hbWVzID09IE5VTEwgfHwgKmZpbGVuYW1lcyA9PSBOVUxMKSB7Ci0gICAgZ19wcmludCAoIlBsZWFzZSBnaXZlIG9uZSBvciBtb3JlIGZpbGVuYW1lcyB0byAlc1xuXG4iLCBnX2dldF9wcmduYW1lICgpKTsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIG51bSA9IGdfc3Rydl9sZW5ndGggKGZpbGVuYW1lcyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgdHlwZWZpbmRfZmlsZSAoZmlsZW5hbWVzW2ldKTsKLSAgfQotCi0gIGdfc3RyZnJlZXYgKGZpbGVuYW1lcyk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90b29scy90b29scy5oIGIvdG9vbHMvdG9vbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJlZDVhYy4uMDAwMDAwMAotLS0gYS90b29scy90b29scy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKgotICogdG9vbHMuaDogaGVhZGVyIGZvciBjb21tb24gc3R1ZmYgb2YgYWxsIEdTdHJlYW1lciB0b29scwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9UT09MU19IX18KLSNkZWZpbmUgX19HU1RfVE9PTFNfSF9fCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3QvZ3N0LWkxOG4tYXBwLmgiCi0KLS8qCi0gKiBUaGlzIGlzIGEga2luZCBvZiBoYWNreSB3YXkgdG8gbWFrZSBhbGwgdGhlIHRvb2xzIHVzZSB0aGUgc2FtZSB2ZXJzaW9uIGNvZGUuCi0gKiBJZiBhbnlvbmUga25vd3MgYSBsZXNzIGhhY2t5IHdheSB0byBnZXQgdGhpcyBkb25lLCBmZWVsIGZyZWUgdG8gaW1wbGVtZW50IGl0LgotICogCi0gKiBJdCBhbHNvIGluY2x1ZGVzIGFsbCB0aGUgZmlsZXMgdGhhdCBhbGwgdGhlIHRvb2xzIHJlcXVpcmUuCi0gKi8KLQotc3RhdGljIGdib29sZWFuIF9fZ3N0X3Rvb2xzX3ZlcnNpb24gPSBGQUxTRTsKLQotI2RlZmluZSBHU1RfVE9PTFNfR09QVElPTl9WRVJTSU9OIFwKLSAgICB7ICJ2ZXJzaW9uIiwgMCwgMCwgR19PUFRJT05fQVJHX05PTkUsICZfX2dzdF90b29sc192ZXJzaW9uLCBcCi0gICAgICBOXygiUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIpLCBOVUxMIH0KLQotc3RhdGljIHZvaWQKLWdzdF90b29sc19wcmludF92ZXJzaW9uICh2b2lkKQotewotICBpZiAoX19nc3RfdG9vbHNfdmVyc2lvbikgewotICAgIGdjaGFyICp2ZXJzaW9uX3N0cjsKLQotICAgIHZlcnNpb25fc3RyID0gZ3N0X3ZlcnNpb25fc3RyaW5nICgpOwotICAgIGdfcHJpbnQgKCIlcyB2ZXJzaW9uICVkLiVkLiVkXG4iLCBnX2dldF9wcmduYW1lICgpLAotICAgICAgICBHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsIEdTVF9WRVJTSU9OX01JQ1JPKTsKLSAgICBnX3ByaW50ICgiJXNcbiIsIHZlcnNpb25fc3RyKTsKLSAgICBnX3ByaW50ICgiJXNcbiIsIEdTVF9QQUNLQUdFX09SSUdJTik7Ci0gICAgZ19mcmVlICh2ZXJzaW9uX3N0cik7Ci0gICAgZXhpdCAoMCk7Ci0gIH0KLX0KLQotI2VuZGlmIC8qIF9fR1NUX1RPT0xTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvd2luMzIvTUFOSUZFU1QgYi93aW4zMi9NQU5JRkVTVApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQwMjQ2Ni4uMDAwMDAwMAotLS0gYS93aW4zMi9NQU5JRkVTVAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXdpbjMyL01BTklGRVNUCi13aW4zMi9SRUFETUUudHh0Ci13aW4zMi9jb21tb24vY29uZmlnLmgKLXdpbjMyL2NvbW1vbi9nc3Rjb25maWcuaAotd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jCi13aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmgKLXdpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmgKLXdpbjMyL2NvbW1vbi9saWJnc3RiYXNlLmRlZgotd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmCi13aW4zMi9jb21tb24vbGliZ3N0bmV0LmRlZgotd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWYKZGlmZiAtLWdpdCBhL3dpbjMyL1JFQURNRS50eHQgYi93aW4zMi9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDkyMzNmLi4wMDAwMDAwCi0tLSBhL3dpbjMyL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1CdWlsZGluZyBHU3RyZWFtZXIgb24gV2luZG93cw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotUnVubmluZyBHU3RyZWFtZXIgb24gV2luZG93cyBpcyBzdXBwb3J0ZWQuCi0KLU9mZmljaWFsIFdpbmRvd3MgYmluYXJpZXMgZm9yIGVhY2ggcmVsZWFzZSBjYW4gYmUgZm91bmQgYXQ6Ci0KLSAgaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvcGtnL3dpbmRvd3MvCi0KLQotQnVpbGRpbmcgd2l0aCBNaW5HVy9NU3lzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQ0KLVNob3VsZCB3b3JrIG91dCBvZiB0aGUgYm94IGZyb20gdGhlIHRvcGxldmVsIGRpcmVjdG9yeSB1c2luZyB0aGUgc3RhbmRhcmQNCi1Vbml4IGJ1aWxkIHN5c3RlbSBwcm92aWRlZC4NCi0NCi1UaGlzIGJ1aWxkIHR5cGUgaXMgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuCi0NCi1Zb3UgY2FuIGJ1aWxkIFdpbmRvd3MgYmluYXJpZXMgaW5jbHVkaW5nIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXMKLXVzaW5nIHRoZSAnY2VyYmVybycgYnVpbGQgdG9vbDoKLQ0KLSAgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9jZXJiZXJvLwotCi1UaGlzIHdvcmtzIGJvdGggbmF0aXZlbHkgb24gV2luZG93cyBvciBhcyBjcm9zcy1jb21waWxlIGZyb20gTGludXguCi0NCi0NCi1CdWlsZGluZyB3aXRoIFZpc3VhbCBTdHVkaW8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotDQotQnVpbGRpbmcgd2l0aCBWaXN1YWwgU3R1ZGlvIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvd2luMzIvY29tbW9uL2NvbmZpZy5oIGIvd2luMzIvY29tbW9uL2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTJmNDhhLi4wMDAwMDAwCi0tLSBhL3dpbjMyL2NvbW1vbi9jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2NiArMCwwIEBACi0vKiBBdXRvZ2VuZXJhdGVkIGNvbmZpZy5oIGNyZWF0ZWQgZm9yIHdpbjMyIFZpc3VhbCBTdHVkaW8gYnVpbGRzICovCi0KLS8qIFBSRUZJWCAtLSBzcGVjaWZpY2FsbHkgYWRkZWQgZm9yIFdpbmRvd3MgZm9yIGVhc2llciBtb3ZpbmcgKi8KLSNkZWZpbmUgUFJFRklYICJDOlxcZ3N0cmVhbWVyIgotCi0vKiBEZWZpbmUgaWYgYnVpbGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCi0jdW5kZWYgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECi0KLS8qIHBvbGwgZG9lc24ndCB3b3JrIG9uIGRldmljZXMgKi8KLSN1bmRlZiBCUk9LRU5fUE9MTAotCi0vKiBEZWZpbmUgdG8gMSBpZiB0cmFuc2xhdGlvbiBvZiBwcm9ncmFtIG1lc3NhZ2VzIHRvIHRoZSB1c2VyJ3MgbmF0aXZlCi0gICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCi0jdW5kZWYgRU5BQkxFX05MUwotCi0vKiBTdWJ1bml0IHByb3RvY29sIHJlc3VsdCBvdXRwdXQgKi8KLSN1bmRlZiBFTkFCTEVfU1VCVU5JVAotCi0vKiBnZXR0ZXh0IHBhY2thZ2UgbmFtZSAqLwotI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgImdzdHJlYW1lci0xLjAiCi0KLS8qIFRoZSBHSU8gbGlicmFyeSBkaXJlY3RvcnkuICovCi0jdW5kZWYgR0lPX0xJQkRJUgotCi0vKiBUaGUgR0lPIG1vZHVsZXMgZGlyZWN0b3J5LiAqLwotI3VuZGVmIEdJT19NT0RVTEVfRElSCi0KLS8qIFRoZSBHSU8gaW5zdGFsbCBwcmVmaXguICovCi0jdW5kZWYgR0lPX1BSRUZJWAotCi0vKiBHU3RyZWFtZXIgQVBJIFZlcnNpb24gKi8KLSNkZWZpbmUgR1NUX0FQSV9WRVJTSU9OICIxLjAiCi0KLS8qIGRhdGEgZGlyICovCi0jZGVmaW5lIEdTVF9EQVRBRElSIFBSRUZJWCAiXFxzaGFyZSIKLQotLyogRGVmaW5lIGlmIG9wdGlvbiBwYXJzaW5nIGlzIGRpc2FibGVkICovCi0jdW5kZWYgR1NUX0RJU0FCTEVfT1BUSU9OX1BBUlNJTkcKLQotLyogRGVmaW5lIGlmIHBpcGVsaW5lIHBhcnNpbmcgY29kZSBpcyBkaXNhYmxlZCAqLwotI3VuZGVmIEdTVF9ESVNBQkxFX1BBUlNFCi0KLS8qIERlZmluZSBpZiBleHRyYSBydW50aW1lIGNoZWNrcyBzaG91bGQgYmUgZW5hYmxlZCAqLwotI3VuZGVmIEdTVF9FTkFCTEVfRVhUUkFfQ0hFQ0tTCi0KLS8qIEV4dHJhIHBsYXRmb3JtIHNwZWNpZmljIHBsdWdpbiBzdWZmaXggKi8KLSN1bmRlZiBHU1RfRVhUUkFfTU9EVUxFX1NVRkZJWAotCi0vKiBtYWNybyB0byB1c2UgdG8gc2hvdyBmdW5jdGlvbiBuYW1lICovCi0jdW5kZWYgR1NUX0ZVTkNUSU9OCi0KLS8qIERlZmluZWQgaWYgZ2NvdiBpcyBlbmFibGVkIHRvIGZvcmNlIGEgcmVidWlsZCBkdWUgdG8gY29uZmlnLmggY2hhbmdpbmcgKi8KLSN1bmRlZiBHU1RfR0NPVl9FTkFCTEVECi0KLS8qIERlZmluZWQgd2hlbiByZWdpc3RyeSBzY2FubmluZyB0aHJvdWdoIGZvcmsgaXMgdW5zYWZlICovCi0jdW5kZWYgR1NUX0hBVkVfVU5TQUZFX0ZPUksKLQotLyogRGVmYXVsdCBlcnJvcmxldmVsIHRvIHVzZSAqLwotI2RlZmluZSBHU1RfTEVWRUxfREVGQVVMVCBHU1RfTEVWRUxfRVJST1IKLQotLyogR1N0cmVhbWVyIGxpY2Vuc2UgKi8KLSNkZWZpbmUgR1NUX0xJQ0VOU0UgIkxHUEwiCi0KLS8qIHBhY2thZ2UgbmFtZSBpbiBwbHVnaW5zICovCi0jZGVmaW5lIEdTVF9QQUNLQUdFX05BTUUgIkdTdHJlYW1lciBzb3VyY2UgcmVsZWFzZSIKLQotLyogcGFja2FnZSBvcmlnaW4gKi8KLSNkZWZpbmUgR1NUX1BBQ0tBR0VfT1JJR0lOICJVbmtub3duIHBhY2thZ2Ugb3JpZ2luIgotCi0vKiBHU3RyZWFtZXIgcGFja2FnZSByZWxlYXNlIGRhdGUvdGltZSBmb3IgcGx1Z2lucyBhcyBZWVlZLU1NLUREICovCi0jZGVmaW5lIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgIjIwMTctMDItMjMiCi0KLS8qIERlZmluZSBpZiBzdGF0aWMgcGx1Z2lucyBzaG91bGQgYmUgYnVpbHQgKi8KLSN1bmRlZiBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQwotCi0vKiBsb2NhdGlvbiBvZiB0aGUgaW5zdGFsbGVkIGdzdC1wbHVnaW4tc2Nhbm5lciAqLwotI2RlZmluZSBHU1RfUExVR0lOX1NDQU5ORVJfSU5TVEFMTEVEIExJQkRJUiAiXFxnc3QtcGx1Z2luLXNjYW5uZXIiCi0KLS8qIGxvY2F0aW9uIG9mIHRoZSBpbnN0YWxsZWQgZ3N0LXB0cC1oZWxwZXIgKi8KLSN1bmRlZiBHU1RfUFRQX0hFTFBFUl9JTlNUQUxMRUQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9BTEFSTQotCi0vKiBIYXZlIGJhY2t0cmFjZSAqLwotI3VuZGVmIEhBVkVfQkFDS1RSQUNFCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGTG9jYWxlQ29weUN1cnJlbnQgaW4gdGhlCi0gICBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCi0jdW5kZWYgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4KLSAgIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCi0jdW5kZWYgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFCi0KLS8qIEhhdmUgY2xvY2tfZ2V0dGltZSAqLwotI3VuZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgQUFSQ0g2NCAqLwotI3VuZGVmIEhBVkVfQ1BVX0FBUkNINjQKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIEFscGhhICovCi0jdW5kZWYgSEFWRV9DUFVfQUxQSEEKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIEFSQyAqLwotI3VuZGVmIEhBVkVfQ1BVX0FSQwotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4gQVJNICovCi0jdW5kZWYgSEFWRV9DUFVfQVJNCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIENSSVMgKi8KLSN1bmRlZiBIQVZFX0NQVV9DUklTCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIENSSVN2MzIgKi8KLSN1bmRlZiBIQVZFX0NQVV9DUklTVjMyCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIEhQUEEgKi8KLSN1bmRlZiBIQVZFX0NQVV9IUFBBCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhbiB4ODYgKi8KLSNkZWZpbmUgSEFWRV9DUFVfSTM4NiAxCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIElBNjQgKi8KLSN1bmRlZiBIQVZFX0NQVV9JQTY0Ci0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIE02OEsgKi8KLSN1bmRlZiBIQVZFX0NQVV9NNjhLCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIE1JUFMgKi8KLSN1bmRlZiBIQVZFX0NQVV9NSVBTCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIFBvd2VyUEMgKi8KLSN1bmRlZiBIQVZFX0NQVV9QUEMKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgNjQgYml0IFBvd2VyUEMgKi8KLSN1bmRlZiBIQVZFX0NQVV9QUEM2NAotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBTMzkwICovCi0jdW5kZWYgSEFWRV9DUFVfUzM5MAotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBTUEFSQyAqLwotI3VuZGVmIEhBVkVfQ1BVX1NQQVJDCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIHg4Nl82NCAqLwotI3VuZGVmIEhBVkVfQ1BVX1g4Nl82NAotCi0vKiBEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLgotICAgKi8KLSN1bmRlZiBIQVZFX0RDR0VUVEVYVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGFsYXJtJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgotICAgKi8KLSN1bmRlZiBIQVZFX0RFQ0xfQUxBUk0KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBsb2NhbHRpbWVfcicsIGFuZCB0byAwIGlmIHlvdQotICAgZG9uJ3QuICovCi0jdW5kZWYgSEFWRV9ERUNMX0xPQ0FMVElNRV9SCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3RyZHVwJywgYW5kIHRvIDAgaWYgeW91IGRvbid0LgotICAgKi8KLSN1bmRlZiBIQVZFX0RFQ0xfU1RSRFVQCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3Ryc2lnbmFsJywgYW5kIHRvIDAgaWYgeW91Ci0gICBkb24ndC4gKi8KLSN1bmRlZiBIQVZFX0RFQ0xfU1RSU0lHTkFMCi0KLS8qIERlZmluZWQgaWYgd2UgaGF2ZSBkbGFkZHIgKCkgKi8KLSN1bmRlZiBIQVZFX0RMQUREUgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRExGQ05fSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGV4ZWNpbmZvLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRVhFQ0lORk9fSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZnZXRwb3MnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZHRVRQT1MgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfRk9SSwotCi0vKiBEZWZpbmUgdG8gMSBpZiBmc2Vla28gKGFuZCBwcmVzdW1hYmx5IGZ0ZWxsbykgZXhpc3RzIGFuZCBpcyBkZWNsYXJlZC4gKi8KLSN1bmRlZiBIQVZFX0ZTRUVLTwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZzZXRwb3MnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZTRVRQT1MgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ0ZWxsbycgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9GVEVMTE8KLQotLyogZGVmaW5lZCBpZiB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBfX2Z1bmNfXyAqLwotI3VuZGVmIEhBVkVfRlVOQwotCi0vKiBkZWZpbmVkIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIF9fRlVOQ1RJT05fXyAqLwotI3VuZGVmIEhBVkVfRlVOQ1RJT04KLQotLyogZ2V0aWZhZGRycygpIGFuZCBBRl9MSU5LIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfR0VUSUZBRERSU19BRl9MSU5LCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFnZXNpemUnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfR0VUUEFHRVNJWkUKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwaWQnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfR0VUUElECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cnVzYWdlJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVFJVU0FHRQotCi0vKiBEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4gKi8KLSN1bmRlZiBIQVZFX0dFVFRFWFQKLQotLyogSGF2ZSBHTVAgbGlicmFyeSAqLwotI3VuZGVmIEhBVkVfR01QCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ210aW1lX3InIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfR01USU1FX1IKLQotLyogSGF2ZSBHU0wgbGlicmFyeSAqLwotI3VuZGVmIEhBVkVfR1NMCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbiBhbmQgaXQgd29ya3MuICovCi0jdW5kZWYgSEFWRV9JQ09OVgotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50bWF4X3QnLiAqLwotI3VuZGVmIEhBVkVfSU5UTUFYX1QKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKLQotLyogRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQKLSAgIGRlY2xhcmVzIHVpbnRtYXhfdC4gKi8KLSN1bmRlZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcnQnIGxpYnJhcnkgKC1scnQpLiAqLwotI3VuZGVmIEhBVkVfTElCUlQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2NhbHRpbWVfcicgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9MT0NBTFRJTUVfUgotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBsb25nIGxvbmcgKi8KLSN1bmRlZiBIQVZFX0xPTkdfTE9ORwotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgbG9uZyBsb25nIGludCcuICovCi0jdW5kZWYgSEFWRV9MT05HX0xPTkdfSU5UCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfTUVNT1JZX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta3N0ZW1wJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX01LU1RFTVAKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGBtbWFwJyBzeXN0ZW0gY2FsbC4gKi8KLSN1bmRlZiBIQVZFX01NQVAKLQotLyogSGF2ZSBhIG1vbm90b25pYyBjbG9jayAqLwotI3VuZGVmIEhBVkVfTU9OT1RPTklDX0NMT0NLCi0KLS8qIERlZmluZWQgaWYgY29tcGlsaW5nIGZvciBPU1ggKi8KLSN1bmRlZiBIQVZFX09TWAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBvbGwnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfUE9MTAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvbGwuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9QT0xMX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9tZW1hbGlnbicgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9QT1NJWF9NRU1BTElHTgotCi0vKiBIYXZlIHBvc2l4IHRpbWVycyAqLwotI3VuZGVmIEhBVkVfUE9TSVhfVElNRVJTCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHBvbGwnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfUFBPTEwKLQotLyogZGVmaW5lZCBpZiB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBfX1BSRVRUWV9GVU5DVElPTl9fICovCi0jdW5kZWYgSEFWRV9QUkVUVFlfRlVOQ1RJT04KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHNlbGVjdCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9QU0VMRUNUCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSBQT1NJWCB0aHJlYWRzIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzLiAqLwotI3VuZGVmIEhBVkVfUFRIUkVBRAotCi0vKiBIYXZlIFBUSFJFQURfUFJJT19JTkhFUklULiAqLwotI3VuZGVmIEhBVkVfUFRIUkVBRF9QUklPX0lOSEVSSVQKLQotLyogSGF2ZSBmdW5jdGlvbiBwdGhyZWFkX3NldG5hbWVfbnAoY29uc3QgY2hhciopICovCi0jdW5kZWYgSEFWRV9QVEhSRUFEX1NFVE5BTUVfTlBfV0lUSE9VVF9USUQKLQotLyogUFRQIHN1cHBvcnQgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9QVFAKLQotLyogVXNlIGNhcGFiaWxpdGllcyBmb3IgcGVybWlzc2lvbnMgaW4gUFRQIGhlbHBlciAqLwotI3VuZGVmIEhBVkVfUFRQX0hFTFBFUl9DQVBBQklMSVRJRVMKLQotLyogVXNlIHNldHVpZC1yb290IGZvciBwZXJtaXNzaW9ucyBpbiBQVFAgaGVscGVyICovCi0jdW5kZWYgSEFWRV9QVFBfSEVMUEVSX1NFVFVJRAotCi0vKiBQVFAgaGVscGVyIHNldHVpZCBncm91cCAqLwotI3VuZGVmIEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfR1JPVVAKLQotLyogUFRQIGhlbHBlciBzZXR1aWQgdXNlciAqLwotI3VuZGVmIEhBVkVfUFRQX0hFTFBFUl9TRVRVSURfVVNFUgotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgcHRyZGlmZl90Jy4gKi8KLSN1bmRlZiBIQVZFX1BUUkRJRkZfVAotCi0vKiBEZWZpbmUgaWYgUkRUU0MgaXMgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9SRFRTQwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGl0aW1lcicgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9TRVRJVElNRVIKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdhY3Rpb24nIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU0lHQUNUSU9OCi0KLS8qIFNJT0NHSUZDT05GLCBTSU9DR0lGRkxBR1MgYW5kIFNJT0NHSUZIV0FERFIgaXMgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9TSU9DR0lGQ09ORl9TSU9DR0lGRkxBR1NfU0lPQ0dJRkhXQUREUgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NURElOVF9ICi0KLS8qIERlZmluZSBpZiA8c3RkaW50Lmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcwotICAgdWludG1heF90LiAqLwotI3VuZGVmIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW9fZXh0Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RESU9fRVhUX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1RETElCX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VzdHInIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU1RSQ0FTRVNUUgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVFJJTkdTX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnNpZ25hbCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9TVFJTSUdOQUwKLQotLyogRGVmaW5lIHRvIDEgaWYgYGl0X2ludGVydmFsJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGl0aW1lcnNwZWMnLiAqLwotI3VuZGVmIEhBVkVfU1RSVUNUX0lUSU1FUlNQRUNfSVRfSU5URVJWQUwKLQotLyogRGVmaW5lIHRvIDEgaWYgYGl0X3ZhbHVlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGl0aW1lcnNwZWMnLiAqLwotI3VuZGVmIEhBVkVfU1RSVUNUX0lUSU1FUlNQRUNfSVRfVkFMVUUKLQotLyogRGVmaW5lIHRvIDEgaWYgYHR2X25zZWMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdGltZXNwZWMnLiAqLwotI3VuZGVmIEhBVkVfU1RSVUNUX1RJTUVTUEVDX1RWX05TRUMKLQotLyogRGVmaW5lIHRvIDEgaWYgYHR2X3NlYycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB0aW1lc3BlYycuICovCi0jdW5kZWYgSEFWRV9TVFJVQ1RfVElNRVNQRUNfVFZfU0VDCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1BBUkFNX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19QT0xMX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcHJjdGwuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfUFJDVExfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yZXNvdXJjZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19TT0NLRVRfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19USU1FU19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfVElNRV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdWlvLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1VJT19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfVVRTTkFNRV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfV0FJVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1RJTUVfSAotCi0vKiBIYXZlIHRtX2dtdG9mZiBmaWVsZCBpbiBzdHJ1Y3QgdG0gKi8KLSN1bmRlZiBIQVZFX1RNX0dNVE9GRgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVjb250ZXh0Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfVUNPTlRFWFRfSAotCi0vKiBIYXZlIF9fdWludDEyOF90IHR5cGUgKi8KLSN1bmRlZiBIQVZFX1VJTlQxMjhfVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1VOSVNURF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1bnNpZ25lZCBsb25nIGxvbmcgaW50Jy4gKi8KLSN1bmRlZiBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQKLQotLyogbGlidW53aW5kIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfVU5XSU5ECi0KLS8qIERlZmluZSBpZiB2YWxncmluZCBzaG91bGQgYmUgdXNlZCAqLwotI3VuZGVmIEhBVkVfVkFMR1JJTkQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2YWxncmluZC92YWxncmluZC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1ZBTEdSSU5EX1ZBTEdSSU5EX0gKLQotLyogRGVmaW5lZCBpZiBjb21waWxpbmcgZm9yIFdpbmRvd3MgKi8KLSNkZWZpbmUgSEFWRV9XSU4zMiAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2dldHBpZCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9fR0VUUElECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3N0cmR1cCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9fU1RSRFVQCi0KLS8qIHRoZSBob3N0IENQVSAqLwotI2RlZmluZSBIT1NUX0NQVSAiaTY4NiIKLQotLyogbGlicmFyeSBkaXIgKi8KLSNpZmRlZiBfREVCVUcKLSMgIGRlZmluZSBMSUJESVIgUFJFRklYICJcXGRlYnVnXFxsaWIiCi0jZWxzZQotIyAgZGVmaW5lIExJQkRJUiBQUkVGSVggIlxcbGliIgotI2VuZGlmCi0KLS8qIGdldHRleHQgbG9jYWxlIGRpciAqLwotI2RlZmluZSBMT0NBTEVESVIgUFJFRklYICJcXHNoYXJlXFxsb2NhbGUiCi0KLS8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSB3aGVyZSBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuICovCi0jdW5kZWYgTFRfT0JKRElSCi0KLS8qIE1lbW9yeSBhbGlnbm1lbnQgdG8gdXNlICovCi0jdW5kZWYgTUVNT1JZX0FMSUdOTUVOVAotCi0vKiBNZW1vcnkgYWxpZ25tZW50IGJ5IG1hbGxvYyBkZWZhdWx0ICovCi0jZGVmaW5lIE1FTU9SWV9BTElHTk1FTlRfTUFMTE9DIDEKLQotLyogTWVtb3J5IGFsaWdubWVudCBieSBwYWdlc2l6ZSAqLwotI3VuZGVmIE1FTU9SWV9BTElHTk1FTlRfUEFHRVNJWkUKLQotLyogTmFtZSBvZiBwYWNrYWdlICovCi0jZGVmaW5lIFBBQ0tBR0UgImdzdHJlYW1lciIKLQotLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCi0jZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXIiCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9OQU1FICJHU3RyZWFtZXIiCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIkdTdHJlYW1lciAxLjEwLjQiCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJnc3RyZWFtZXIiCi0KLS8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCi0jdW5kZWYgUEFDS0FHRV9VUkwKLQotLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIxLjEwLjQiCi0KLS8qIGRpcmVjdG9yeSB3aGVyZSBwbHVnaW5zIGFyZSBsb2NhdGVkICovCi0jaWZkZWYgX0RFQlVHCi0jICBkZWZpbmUgUExVR0lORElSIFBSRUZJWCAiXFxkZWJ1Z1xcbGliXFxnc3RyZWFtZXItMS4wIgotI2Vsc2UKLSMgIGRlZmluZSBQTFVHSU5ESVIgUFJFRklYICJcXGxpYlxcZ3N0cmVhbWVyLTEuMCIKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50IHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbgotICAgeW91ciBzeXN0ZW0uICovCi0jdW5kZWYgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUKLQotLyogVGhlIHNpemUgb2YgYGNoYXInLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi0jdW5kZWYgU0laRU9GX0NIQVIKLQotLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSN1bmRlZiBTSVpFT0ZfSU5UCi0KLS8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI3VuZGVmIFNJWkVPRl9MT05HCi0KLS8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSN1bmRlZiBTSVpFT0ZfU0hPUlQKLQotLyogVGhlIHNpemUgb2YgYHZvaWQqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI3VuZGVmIFNJWkVPRl9WT0lEUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSN1bmRlZiBTVERDX0hFQURFUlMKLQotLyogTmVlZCB0byBkZWZpbmUgdGhlIGl0aW1lcnNwZWMgc3RydWN0dXJlICovCi0jdW5kZWYgU1RSVUNUX0lUSU1FUlNQRUNfREVGSU5JVElPTl9NSVNTSU5HCi0KLS8qIE5lZWQgdG8gZGVmaW5lIHRoZSB0aW1lc3BlYyBzdHJ1Y3R1cmUgKi8KLSN1bmRlZiBTVFJVQ1RfVElNRVNQRUNfREVGSU5JVElPTl9NSVNTSU5HCi0KLS8qIHRoZSB0YXJnZXQgQ1BVICovCi0jdW5kZWYgVEFSR0VUX0NQVQotCi0vKiBEZWZpbmUgaWYgd2Ugc2hvdWxkIHBvaXNvbiBkZWFsbG9jYXRlZCBtZW1vcnkgKi8KLSN1bmRlZiBVU0VfUE9JU09OSU5HCi0KLS8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KLSNkZWZpbmUgVkVSU0lPTiAiMS4xMC40IgotCi0vKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKLSAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLwotI2lmIGRlZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECi0jIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KLSMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQotIyBlbmRpZgotI2Vsc2UKLSMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgotIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogRW5hYmxlIGxhcmdlIGlub2RlIG51bWJlcnMgb24gTWFjIE9TIFggMTAuNS4gICovCi0jaWZuZGVmIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERQotIyBkZWZpbmUgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFIDEKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLwotI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCi0KLS8qIERlZmluZSB0byAxIHRvIG1ha2UgZnNlZWtvIHZpc2libGUgb24gc29tZSBob3N0cyAoZS5nLiBnbGliYyAyLjIpLiAqLwotI3VuZGVmIF9MQVJHRUZJTEVfU09VUkNFCi0KLS8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KLSN1bmRlZiBfTEFSR0VfRklMRVMKLQotLyogV2UgbmVlZCBhdCBsZWFzdCBXaW5YUCBTUDIgZm9yIF9fc3RhdDY0ICovCi0jdW5kZWYgX19NU1ZDUlRfVkVSU0lPTl9fCi0KLS8qIGNsb2NraWRfdCAqLwotI3VuZGVmIGNsb2NraWRfdAotCi0vKiBEZWZpbmUgdG8gdGhlIHdpZGVzdCBzaWduZWQgaW50ZWdlciB0eXBlIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPiBkbwotICAgbm90IGRlZmluZS4gKi8KLSN1bmRlZiBpbnRtYXhfdAotCi0vKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCi0jdW5kZWYgc2l6ZV90Ci0KLS8qIHRpbWVyX3QgKi8KLSN1bmRlZiB0aW1lcl90CmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vZ3N0Y29uZmlnLmggYi93aW4zMi9jb21tb24vZ3N0Y29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NGEyZTAuLjAwMDAwMDAKLS0tIGEvd2luMzIvY29tbW9uL2dzdGNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwNCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0Y29uZmlnLmg6IEdTVF9ESVNBQkxFXyogbWFjcm9zIGZvciBidWlsZCBjb25maWd1cmF0aW9uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjpnc3Rjb25maWcKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQnVpbGQgY29uZmlndXJhdGlvbiBvcHRpb25zCi0gKgotICogVGhpcyBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgR1N0cmVhbWVyLiBXaGVuIGJ1aWxkaW5nCi0gKiBHU3RyZWFtZXIgdGhlcmUgYXJlIGEgbG90IG9mIHBhcnRzIChrbm93biBpbnRlcm5hbGx5IGFzICJzdWJzeXN0ZW1zIiApIHRoYXQKLSAqIGNhbiBiZSBkaXNhYmxlZCBmb3IgdmFyaW91cyByZWFzb25zLiBUaGUgbW9zdCBjb21tb24gcmVhc29ucyBhcmUgc3BlZWQgYW5kCi0gKiBzaXplLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBHU3RyZWFtZXIgaXMgZGVzaWduZWQgdG8gcnVuIG9uIGVtYmVkZGVkCi0gKiBzeXN0ZW1zLgotICoKLSAqIElmIGEgc3Vic3lzdGVtIGlzIGRpc2FibGVkLCBtb3N0IG9mIHRoaXMgY2hhbmdlcyBhcmUgZG9uZSBpbiBhbiBBUEkKLSAqIGNvbXBhdGlibGUgd2F5LCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBhZGFwdCB5b3VyIGNvZGUgaW4gbW9zdCBjYXNlcy4gSXQgaXMKLSAqIG5ldmVyIGRvbmUgaW4gYW4gQUJJIGNvbXBhdGlibGUgd2F5IHRob3VnaC4gU28gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBhCi0gKiBzdWJzeXN0ZW0sIHlvdSBoYXZlIHRvIHJlYnVpbGQgYWxsIHByb2dyYW1zIGRlcGVuZGluZyBvbiBHU3RyZWFtZXIsIHRvby4KLSAqCi0gKiBJZiBhIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCBpbiBHU3RyZWFtZXIsIGEgdmFsdWUgaXMgZGVmaW5lZCBpbgotICogJmx0O2dzdC9nc3QuaCZndDsuIFlvdSBjYW4gY2hlY2sgdGhpcyBpZiB5b3UgZG8gc3Vic3lzdGVtLXNwZWNpZmljIHN0dWZmLgotICogPGV4YW1wbGU+Ci0gKiA8dGl0bGU+RG9pbmcgc3Vic3lzdGVtIHNwZWNpZmljIHRoaW5nczwvdGl0bGU+Ci0gKiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gKiAmaGFzaDtpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gKiAvLyBkbyBzdHVmZiBzcGVjaWZpYyB0byB0aGUgZGVidWdnaW5nIHN1YnN5c3RlbQotICogJmhhc2g7ZW5kaWYgLy8gR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gKiA8L3Byb2dyYW1saXN0aW5nPgotICogPC9leGFtcGxlPgotICovCi0KLSNpZm5kZWYgX19HU1RfQ09ORklHX0hfXwotI2RlZmluZSBfX0dTVF9DT05GSUdfSF9fCi0KLS8qKiogdHJpY2sgZ3RrLWRvYyBpbnRvIGJlbGlldmluZyB0aGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkICh5ZXMsIGl0J3MgdWdseSkgKi8KLQotI2lmIDAKLSNkZWZpbmUgR1NUX0RJU0FCTEVfTE9BRFNBVkVfUkVHSVNUUlkgMQotI2RlZmluZSBHU1RfRElTQUJMRV9HU1RfREVCVUcgMQotI2RlZmluZSBHU1RfRElTQUJMRV9MT0FEU0FWRSAxCi0jZGVmaW5lIEdTVF9ESVNBQkxFX1BBUlNFIDEKLSNkZWZpbmUgR1NUX0RJU0FCTEVfUkVHSVNUUlkgMQotI2RlZmluZSBHU1RfRElTQUJMRV9QTFVHSU4gMQotI2RlZmluZSBHU1RfSEFWRV9HTElCXzJfOCAxCi0jZW5kaWYKLQotLyoqKioqIGRlZmF1bHQgcGFkZGluZyBvZiBzdHJ1Y3R1cmVzICoqKioqLwotI2RlZmluZSBHU1RfUEFERElORwkJNAotI2RlZmluZSBHU1RfUEFERElOR19JTklUCXswfQotCi0vKioqKiogcGFkZGluZyBmb3IgdmVyeSBleHRlbnNpYmxlIGJhc2UgY2xhc3NlcyAqKioqKi8KLSNkZWZpbmUgR1NUX1BBRERJTkdfTEFSR0UgICAgICAgMjAKLQotCi0vKioqKiogZGlzYWJsaW5nIG9mIHN1YnN5c3RlbXMgKioqKiovCi0KLS8qIHdldGhlciBvciBub3QgdGhlIGRlYnVnZ2luZyBzdWJzeXN0ZW0gaXMgZW5hYmxlZCAqLwotLyogI3VuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRyAqLwotCi0vKiBET0VTIE5PVCBXT1JLICovCi0vKiAjdW5kZWYgR1NUX0RJU0FCTEVfUEFSU0UgKi8KLQotLyogRE9FUyBOT1QgV09SSyAqLwotLyogI3VuZGVmIEdTVF9ESVNBQkxFX1JFR0lTVFJZICovCi0KLS8qIERPRVMgTk9UIFdPUksgKi8KLS8qICN1bmRlZiBHU1RfRElTQUJMRV9QTFVHSU4gKi8KLQotLyogcHJpbnRmIGV4dGVuc2lvbiBmb3JtYXQgKi8KLS8qKgotICogR1NUX1BUUl9GT1JNQVQ6Ci0gKgotICogcHJpbnRmIGZvcm1hdCB0eXBlIHVzZWQgdG8gZGVidWcgR1N0cmVhbWVyIHR5cGVzLgotICogVGhpcyBjYW4gb25seSBiZSB1c2VkIG9uIHR5cGVzIHdob3NlIHNpemUgaXMgPj0gc2l6ZW9mKGdwb2ludGVyKS4KLSAqLwotI2RlZmluZSBHU1RfUFRSX0ZPUk1BVCAicCIKLQotLyoqCi0gKiBHU1RfU0VHTUVOVF9GT1JNQVQ6Ci0gKgotICogcHJpbnRmIGZvcm1hdCB0eXBlIHVzZWQgdG8gZGVidWcgR1N0cmVhbWVyIHNlZ21lbnRzLgotICogVGhpcyBjYW4gb25seSBiZSB1c2VkIG9uIHBvaW50ZXJzIHRvIEdzdFNlZ21lbnQgc3RydWN0dXJlcy4KLSAqCi0gKiBTaW5jZTogMC4xMC4xMAotICovCi0jZGVmaW5lIEdTVF9TRUdNRU5UX0ZPUk1BVCAicCIKLQotLyogd2hldGhlciBvciBub3QgR1NUX1BUUl9GT1JNQVQgb3IgR1NUX1NFR01FTlRfRk9STUFUIGFyZSB1c2luZwotICogdGhlIHByaW50ZiBleHRlbnNpb24gbWVjaGFuaXNtLiBUaGlzIGlzIGZvciBpbnRlcm5hbCB1c2UgaW4gb3VyCi0gKiBoZWFkZXIgZmlsZXMgc28gd2Uga25vdyB3aGV0aGVyIHdlIGNhbiB1c2UgR19HTlVDX1BSSU5URiBvciBub3QgKi8KLSN1bmRlZiBHU1RfVVNJTkdfUFJJTlRGX0VYVEVOU0lPTgotCi0vKiB3aGV0aGVyIG9yIG5vdCB0aGUgQ1BVIHN1cHBvcnRzIHVuYWxpZ25lZCBhY2Nlc3MgKi8KLSNkZWZpbmUgR1NUX0hBVkVfVU5BTElHTkVEX0FDQ0VTUyAxCi0KLS8qIHdoZXRoZXIgb3Igbm90IHdlIGFyZSB1c2luZyBnbGliIDIuOCBhcGksIGUuZy4gYXRvbWljIGdvYmplY3QKLSAgIHJlZmNvdW50aW5nICovCi0jZGVmaW5lIEdTVF9IQVZFX0dMSUJfMl84IDEKLQotLyoqCi0gKiBHU1RfRVhQT1JUOgotICoKLSAqIEV4cG9ydCB0aGUgZ2l2ZW4gdmFyaWFibGUgZnJvbSB0aGUgYnVpbHQgc2hhcmVkIG9iamVjdC4KLSAqCi0gKiBPbiBXaW5kb3dzLCB0aGlzIGV4cG9ydHMgdGhlIHZhcmlhYmxlIGZyb20gdGhlIERMTC4KLSAqIE9uIG90aGVyIHBsYXRmb3JtcywgdGhpcyBnZXRzIGRlZmluZWQgdG8gImV4dGVybiIuCi0gKi8KLS8qKgotICogR1NUX1BMVUdJTl9FWFBPUlQ6Ci0gKgotICogRXhwb3J0IHRoZSBwbHVnaW4ncyBkZWZpbml0aW9uLgotICoKLSAqIE9uIFdpbmRvd3MsIHRoaXMgZXhwb3J0cyB0aGUgcGx1Z2luIGRlZmluaXRpb24gZnJvbSB0aGUgRExMLgotICogT24gb3RoZXIgcGxhdGZvcm1zLCB0aGlzIGdldHMgZGVmaW5lZCBhcyBhIG5vLW9wLgotICovCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZpbmVkKF9fTUlOR1czMl9fKSkKLSNkZWZpbmUgR1NUX1BMVUdJTl9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpIGV4dGVybgotI2lmZGVmIEdTVF9FWFBPUlRTCi0jZGVmaW5lIEdTVF9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpIGV4dGVybgotI2Vsc2UKLSNkZWZpbmUgR1NUX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkgZXh0ZXJuCi0jZW5kaWYKLSNlbHNlIC8qIG5vdCBXSU4zMiAqLwotI2RlZmluZSBHU1RfUExVR0lOX0VYUE9SVAotI2RlZmluZSBHU1RfRVhQT1JUIGV4dGVybgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0dTVF9DT05GSUdfSF9fICovCmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMgYi93aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMThkZjAuLjAwMDAwMDAKLS0tIGEvd2luMzIvY29tbW9uL2dzdGVudW10eXBlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA1MCArMCwwIEBACi0KLQotCi0jaW5jbHVkZSAiZ3N0X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jZGVmaW5lIENfRU5VTSh2KSAoKGdpbnQpIHYpCi0jZGVmaW5lIENfRkxBR1ModikgKChndWludCkgdikKLQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0b2JqZWN0LmgiICovCi1HVHlwZQotZ3N0X29iamVjdF9mbGFnc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0ZMQUdTIChHU1RfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCksICJHU1RfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCIsCi0gICAgICAgICJtYXktYmUtbGVha2VkIn0sCi0gICAge0NfRkxBR1MgKEdTVF9PQkpFQ1RfRkxBR19MQVNUKSwgIkdTVF9PQkpFQ1RfRkxBR19MQVNUIiwgImxhc3QifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdE9iamVjdEZsYWdzIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RhbGxvY2F0b3IuaCIgKi8KLUdUeXBlCi1nc3RfYWxsb2NhdG9yX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9BTExPQ0FUT1JfRkxBR19DVVNUT01fQUxMT0MpLAotICAgICAgICAiR1NUX0FMTE9DQVRPUl9GTEFHX0NVU1RPTV9BTExPQyIsICJjdXN0b20tYWxsb2MifSwKLSAgICB7Q19GTEFHUyAoR1NUX0FMTE9DQVRPUl9GTEFHX0xBU1QpLCAiR1NUX0FMTE9DQVRPUl9GTEFHX0xBU1QiLCAibGFzdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0QWxsb2NhdG9yRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGJpbi5oIiAqLwotR1R5cGUKLWdzdF9iaW5fZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX0JJTl9GTEFHX05PX1JFU1lOQyksICJHU1RfQklOX0ZMQUdfTk9fUkVTWU5DIiwgIm5vLXJlc3luYyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfQklOX0ZMQUdfU1RSRUFNU19BV0FSRSksICJHU1RfQklOX0ZMQUdfU1RSRUFNU19BV0FSRSIsCi0gICAgICAgICJzdHJlYW1zLWF3YXJlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9CSU5fRkxBR19MQVNUKSwgIkdTVF9CSU5fRkxBR19MQVNUIiwgImxhc3QifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEJpbkZsYWdzIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RidWZmZXIuaCIgKi8KLUdUeXBlCi1nc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19MSVZFKSwgIkdTVF9CVUZGRVJfRkxBR19MSVZFIiwgImxpdmUifSwKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZKSwgIkdTVF9CVUZGRVJfRkxBR19ERUNPREVfT05MWSIsCi0gICAgICAgICJkZWNvZGUtb25seSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCksICJHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCIsICJkaXNjb250In0sCi0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpLCAiR1NUX0JVRkZFUl9GTEFHX1JFU1lOQyIsICJyZXN5bmMifSwKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9GTEFHX0NPUlJVUFRFRCksICJHU1RfQlVGRkVSX0ZMQUdfQ09SUlVQVEVEIiwKLSAgICAgICAgImNvcnJ1cHRlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0ZMQUdfTUFSS0VSKSwgIkdTVF9CVUZGRVJfRkxBR19NQVJLRVIiLCAibWFya2VyIn0sCi0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19IRUFERVIpLCAiR1NUX0JVRkZFUl9GTEFHX0hFQURFUiIsICJoZWFkZXIifSwKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9GTEFHX0dBUCksICJHU1RfQlVGRkVSX0ZMQUdfR0FQIiwgImdhcCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0ZMQUdfRFJPUFBBQkxFKSwgIkdTVF9CVUZGRVJfRkxBR19EUk9QUEFCTEUiLAotICAgICAgICAiZHJvcHBhYmxlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSwgIkdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUIiwKLSAgICAgICAgImRlbHRhLXVuaXQifSwKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpLCAiR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkiLAotICAgICAgICAidGFnLW1lbW9yeSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0ZMQUdfU1lOQ19BRlRFUiksICJHU1RfQlVGRkVSX0ZMQUdfU1lOQ19BRlRFUiIsCi0gICAgICAgICJzeW5jLWFmdGVyIn0sCi0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfRkxBR19MQVNUKSwgIkdTVF9CVUZGRVJfRkxBR19MQVNUIiwgImxhc3QifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEJ1ZmZlckZsYWdzIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfYnVmZmVyX2NvcHlfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9DT1BZX05PTkUpLCAiR1NUX0JVRkZFUl9DT1BZX05PTkUiLCAibm9uZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0NPUFlfRkxBR1MpLCAiR1NUX0JVRkZFUl9DT1BZX0ZMQUdTIiwgImZsYWdzIn0sCi0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTKSwgIkdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTIiwKLSAgICAgICAgInRpbWVzdGFtcHMifSwKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9DT1BZX01FVEEpLCAiR1NUX0JVRkZFUl9DT1BZX01FVEEiLCAibWV0YSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX0NPUFlfTUVNT1JZKSwgIkdTVF9CVUZGRVJfQ09QWV9NRU1PUlkiLCAibWVtb3J5In0sCi0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfQ09QWV9NRVJHRSksICJHU1RfQlVGRkVSX0NPUFlfTUVSR0UiLCAibWVyZ2UifSwKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9DT1BZX0RFRVApLCAiR1NUX0JVRkZFUl9DT1BZX0RFRVAiLCAiZGVlcCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0QnVmZmVyQ29weUZsYWdzIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RidWZmZXJwb29sLmgiICovCi1HVHlwZQotZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19OT05FKSwKLSAgICAgICAgIkdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfTk9ORSIsICJub25lIn0sCi0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfS0VZX1VOSVQpLAotICAgICAgICAiR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19LRVlfVU5JVCIsICJrZXktdW5pdCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0RPTlRXQUlUKSwKLSAgICAgICAgIkdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfRE9OVFdBSVQiLCAiZG9udHdhaXQifSwKLSAgICB7Q19GTEFHUyAoR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19ESVNDT05UKSwKLSAgICAgICAgIkdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfRElTQ09OVCIsICJkaXNjb250In0sCi0gICAge0NfRkxBR1MgKEdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfTEFTVCksCi0gICAgICAgICJHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0xBU1QiLCAibGFzdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0QnVmZmVyUG9vbEFjcXVpcmVGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0YnVzLmgiICovCi1HVHlwZQotZ3N0X2J1c19mbGFnc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0ZMQUdTIChHU1RfQlVTX0ZMVVNISU5HKSwgIkdTVF9CVVNfRkxVU0hJTkciLCAiZmx1c2hpbmcifSwKLSAgICB7Q19GTEFHUyAoR1NUX0JVU19GTEFHX0xBU1QpLCAiR1NUX0JVU19GTEFHX0xBU1QiLCAiZmxhZy1sYXN0In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RCdXNGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X2J1c19zeW5jX3JlcGx5X2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfQlVTX0RST1ApLCAiR1NUX0JVU19EUk9QIiwgImRyb3AifSwKLSAgICB7Q19FTlVNIChHU1RfQlVTX1BBU1MpLCAiR1NUX0JVU19QQVNTIiwgInBhc3MifSwKLSAgICB7Q19FTlVNIChHU1RfQlVTX0FTWU5DKSwgIkdTVF9CVVNfQVNZTkMiLCAiYXN5bmMifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0QnVzU3luY1JlcGx5IiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RjYXBzLmgiICovCi1HVHlwZQotZ3N0X2NhcHNfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX0NBUFNfRkxBR19BTlkpLCAiR1NUX0NBUFNfRkxBR19BTlkiLCAiYW55In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RDYXBzRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9jYXBzX2ludGVyc2VjdF9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRyksICJHU1RfQ0FQU19JTlRFUlNFQ1RfWklHX1pBRyIsCi0gICAgICAgICJ6aWctemFnIn0sCi0gICAge0NfRU5VTSAoR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKSwgIkdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCIsICJmaXJzdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RDYXBzSW50ZXJzZWN0TW9kZSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0Y2xvY2suaCIgKi8KLUdUeXBlCi1nc3RfY2xvY2tfcmV0dXJuX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfT0spLCAiR1NUX0NMT0NLX09LIiwgIm9rIn0sCi0gICAge0NfRU5VTSAoR1NUX0NMT0NLX0VBUkxZKSwgIkdTVF9DTE9DS19FQVJMWSIsICJlYXJseSJ9LAotICAgIHtDX0VOVU0gKEdTVF9DTE9DS19VTlNDSEVEVUxFRCksICJHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQiLCAidW5zY2hlZHVsZWQifSwKLSAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfQlVTWSksICJHU1RfQ0xPQ0tfQlVTWSIsICJidXN5In0sCi0gICAge0NfRU5VTSAoR1NUX0NMT0NLX0JBRFRJTUUpLCAiR1NUX0NMT0NLX0JBRFRJTUUiLCAiYmFkdGltZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9DTE9DS19FUlJPUiksICJHU1RfQ0xPQ0tfRVJST1IiLCAiZXJyb3IifSwKLSAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfVU5TVVBQT1JURUQpLCAiR1NUX0NMT0NLX1VOU1VQUE9SVEVEIiwgInVuc3VwcG9ydGVkIn0sCi0gICAge0NfRU5VTSAoR1NUX0NMT0NLX0RPTkUpLCAiR1NUX0NMT0NLX0RPTkUiLCAiZG9uZSJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RDbG9ja1JldHVybiIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X2Nsb2NrX2VudHJ5X3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9DTE9DS19FTlRSWV9TSU5HTEUpLCAiR1NUX0NMT0NLX0VOVFJZX1NJTkdMRSIsICJzaW5nbGUifSwKLSAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfRU5UUllfUEVSSU9ESUMpLCAiR1NUX0NMT0NLX0VOVFJZX1BFUklPRElDIiwgInBlcmlvZGljIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdENsb2NrRW50cnlUeXBlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfY2xvY2tfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9TWU5DKSwKLSAgICAgICAgIkdTVF9DTE9DS19GTEFHX0NBTl9ET19TSU5HTEVfU1lOQyIsICJjYW4tZG8tc2luZ2xlLXN5bmMifSwKLSAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1NJTkdMRV9BU1lOQyksCi0gICAgICAgICJHU1RfQ0xPQ0tfRkxBR19DQU5fRE9fU0lOR0xFX0FTWU5DIiwgImNhbi1kby1zaW5nbGUtYXN5bmMifSwKLSAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkMpLAotICAgICAgICAiR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX1NZTkMiLCAiY2FuLWRvLXBlcmlvZGljLXN5bmMifSwKLSAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX0RPX1BFUklPRElDX0FTWU5DKSwKLSAgICAgICAgIkdTVF9DTE9DS19GTEFHX0NBTl9ET19QRVJJT0RJQ19BU1lOQyIsICJjYW4tZG8tcGVyaW9kaWMtYXN5bmMifSwKLSAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9SRVNPTFVUSU9OKSwKLSAgICAgICAgIkdTVF9DTE9DS19GTEFHX0NBTl9TRVRfUkVTT0xVVElPTiIsICJjYW4tc2V0LXJlc29sdXRpb24ifSwKLSAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIpLCAiR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIiLAotICAgICAgICAiY2FuLXNldC1tYXN0ZXIifSwKLSAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfTkVFRFNfU1RBUlRVUF9TWU5DKSwKLSAgICAgICAgIkdTVF9DTE9DS19GTEFHX05FRURTX1NUQVJUVVBfU1lOQyIsICJuZWVkcy1zdGFydHVwLXN5bmMifSwKLSAgICB7Q19GTEFHUyAoR1NUX0NMT0NLX0ZMQUdfTEFTVCksICJHU1RfQ0xPQ0tfRkxBR19MQVNUIiwgImxhc3QifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdENsb2NrRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGRlYnVndXRpbHMuaCIgKi8KLUdUeXBlCi1nc3RfZGVidWdfZ3JhcGhfZGV0YWlsc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19NRURJQV9UWVBFKSwKLSAgICAgICAgIkdTVF9ERUJVR19HUkFQSF9TSE9XX01FRElBX1RZUEUiLCAibWVkaWEtdHlwZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19DQVBTX0RFVEFJTFMpLAotICAgICAgICAiR1NUX0RFQlVHX0dSQVBIX1NIT1dfQ0FQU19ERVRBSUxTIiwgImNhcHMtZGV0YWlscyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19OT05fREVGQVVMVF9QQVJBTVMpLAotICAgICAgICAiR1NUX0RFQlVHX0dSQVBIX1NIT1dfTk9OX0RFRkFVTFRfUEFSQU1TIiwgIm5vbi1kZWZhdWx0LXBhcmFtcyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19TVEFURVMpLCAiR1NUX0RFQlVHX0dSQVBIX1NIT1dfU1RBVEVTIiwKLSAgICAgICAgInN0YXRlcyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19GVUxMX1BBUkFNUyksCi0gICAgICAgICJHU1RfREVCVUdfR1JBUEhfU0hPV19GVUxMX1BBUkFNUyIsICJmdWxsLXBhcmFtcyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwpLCAiR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMIiwgImFsbCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfREVCVUdfR1JBUEhfU0hPV19WRVJCT1NFKSwgIkdTVF9ERUJVR19HUkFQSF9TSE9XX1ZFUkJPU0UiLAotICAgICAgICAidmVyYm9zZSJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0RGVidWdHcmFwaERldGFpbHMiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGVsZW1lbnQuaCIgKi8KLUdUeXBlCi1nc3Rfc3RhdGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpLCAiR1NUX1NUQVRFX1ZPSURfUEVORElORyIsICJ2b2lkLXBlbmRpbmcifSwKLSAgICB7Q19FTlVNIChHU1RfU1RBVEVfTlVMTCksICJHU1RfU1RBVEVfTlVMTCIsICJudWxsIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUQVRFX1JFQURZKSwgIkdTVF9TVEFURV9SRUFEWSIsICJyZWFkeSJ9LAotICAgIHtDX0VOVU0gKEdTVF9TVEFURV9QQVVTRUQpLCAiR1NUX1NUQVRFX1BBVVNFRCIsICJwYXVzZWQifSwKLSAgICB7Q19FTlVNIChHU1RfU1RBVEVfUExBWUlORyksICJHU1RfU1RBVEVfUExBWUlORyIsICJwbGF5aW5nIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0YXRlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3Rfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSwgIkdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSIsICJmYWlsdXJlIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKSwgIkdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyIsICJzdWNjZXNzIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyksICJHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DIiwgImFzeW5jIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMKSwgIkdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCIsCi0gICAgICAgICJuby1wcmVyb2xsIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0YXRlQ2hhbmdlUmV0dXJuIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3Rfc3RhdGVfY2hhbmdlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFkpLCAiR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZIiwKLSAgICAgICAgIm51bGwtdG8tcmVhZHkifSwKLSAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRCksCi0gICAgICAgICJHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRCIsICJyZWFkeS10by1wYXVzZWQifSwKLSAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HKSwKLSAgICAgICAgIkdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkciLCAicGF1c2VkLXRvLXBsYXlpbmcifSwKLSAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEKSwKLSAgICAgICAgIkdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQiLCAicGxheWluZy10by1wYXVzZWQifSwKLSAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSksCi0gICAgICAgICJHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWSIsICJwYXVzZWQtdG8tcmVhZHkifSwKLSAgICB7Q19FTlVNIChHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEwpLCAiR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMIiwKLSAgICAgICAgInJlYWR5LXRvLW51bGwifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0U3RhdGVDaGFuZ2UiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9FTEVNRU5UX0ZMQUdfTE9DS0VEX1NUQVRFKSwgIkdTVF9FTEVNRU5UX0ZMQUdfTE9DS0VEX1NUQVRFIiwKLSAgICAgICAgImxvY2tlZC1zdGF0ZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1NJTkspLCAiR1NUX0VMRU1FTlRfRkxBR19TSU5LIiwgInNpbmsifSwKLSAgICB7Q19GTEFHUyAoR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UpLCAiR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UiLCAic291cmNlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9FTEVNRU5UX0ZMQUdfUFJPVklERV9DTE9DSyksICJHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0siLAotICAgICAgICAicHJvdmlkZS1jbG9jayJ9LAotICAgIHtDX0ZMQUdTIChHU1RfRUxFTUVOVF9GTEFHX1JFUVVJUkVfQ0xPQ0spLCAiR1NUX0VMRU1FTlRfRkxBR19SRVFVSVJFX0NMT0NLIiwKLSAgICAgICAgInJlcXVpcmUtY2xvY2sifSwKLSAgICB7Q19GTEFHUyAoR1NUX0VMRU1FTlRfRkxBR19JTkRFWEFCTEUpLCAiR1NUX0VMRU1FTlRfRkxBR19JTkRFWEFCTEUiLAotICAgICAgICAiaW5kZXhhYmxlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9FTEVNRU5UX0ZMQUdfTEFTVCksICJHU1RfRUxFTUVOVF9GTEFHX0xBU1QiLCAibGFzdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0RWxlbWVudEZsYWdzIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RlcnJvci5oIiAqLwotR1R5cGUKLWdzdF9jb3JlX2Vycm9yX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9GQUlMRUQpLCAiR1NUX0NPUkVfRVJST1JfRkFJTEVEIiwgImZhaWxlZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX1RPT19MQVpZKSwgIkdTVF9DT1JFX0VSUk9SX1RPT19MQVpZIiwgInRvby1sYXp5In0sCi0gICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfTk9UX0lNUExFTUVOVEVEKSwgIkdTVF9DT1JFX0VSUk9SX05PVF9JTVBMRU1FTlRFRCIsCi0gICAgICAgICJub3QtaW1wbGVtZW50ZWQifSwKLSAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9TVEFURV9DSEFOR0UpLCAiR1NUX0NPUkVfRVJST1JfU1RBVEVfQ0hBTkdFIiwKLSAgICAgICAgInN0YXRlLWNoYW5nZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX1BBRCksICJHU1RfQ09SRV9FUlJPUl9QQUQiLCAicGFkIn0sCi0gICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfVEhSRUFEKSwgIkdTVF9DT1JFX0VSUk9SX1RIUkVBRCIsICJ0aHJlYWQifSwKLSAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9ORUdPVElBVElPTiksICJHU1RfQ09SRV9FUlJPUl9ORUdPVElBVElPTiIsCi0gICAgICAgICJuZWdvdGlhdGlvbiJ9LAotICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX0VWRU5UKSwgIkdTVF9DT1JFX0VSUk9SX0VWRU5UIiwgImV2ZW50In0sCi0gICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfU0VFSyksICJHU1RfQ09SRV9FUlJPUl9TRUVLIiwgInNlZWsifSwKLSAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9DQVBTKSwgIkdTVF9DT1JFX0VSUk9SX0NBUFMiLCAiY2FwcyJ9LAotICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX1RBRyksICJHU1RfQ09SRV9FUlJPUl9UQUciLCAidGFnIn0sCi0gICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfTUlTU0lOR19QTFVHSU4pLCAiR1NUX0NPUkVfRVJST1JfTUlTU0lOR19QTFVHSU4iLAotICAgICAgICAibWlzc2luZy1wbHVnaW4ifSwKLSAgICB7Q19FTlVNIChHU1RfQ09SRV9FUlJPUl9DTE9DSyksICJHU1RfQ09SRV9FUlJPUl9DTE9DSyIsICJjbG9jayJ9LAotICAgIHtDX0VOVU0gKEdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEKSwgIkdTVF9DT1JFX0VSUk9SX0RJU0FCTEVEIiwgImRpc2FibGVkIn0sCi0gICAge0NfRU5VTSAoR1NUX0NPUkVfRVJST1JfTlVNX0VSUk9SUyksICJHU1RfQ09SRV9FUlJPUl9OVU1fRVJST1JTIiwKLSAgICAgICAgIm51bS1lcnJvcnMifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0Q29yZUVycm9yIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfbGlicmFyeV9lcnJvcl9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX0xJQlJBUllfRVJST1JfRkFJTEVEKSwgIkdTVF9MSUJSQVJZX0VSUk9SX0ZBSUxFRCIsICJmYWlsZWQifSwKLSAgICB7Q19FTlVNIChHU1RfTElCUkFSWV9FUlJPUl9UT09fTEFaWSksICJHU1RfTElCUkFSWV9FUlJPUl9UT09fTEFaWSIsCi0gICAgICAgICJ0b28tbGF6eSJ9LAotICAgIHtDX0VOVU0gKEdTVF9MSUJSQVJZX0VSUk9SX0lOSVQpLCAiR1NUX0xJQlJBUllfRVJST1JfSU5JVCIsICJpbml0In0sCi0gICAge0NfRU5VTSAoR1NUX0xJQlJBUllfRVJST1JfU0hVVERPV04pLCAiR1NUX0xJQlJBUllfRVJST1JfU0hVVERPV04iLAotICAgICAgICAic2h1dGRvd24ifSwKLSAgICB7Q19FTlVNIChHU1RfTElCUkFSWV9FUlJPUl9TRVRUSU5HUyksICJHU1RfTElCUkFSWV9FUlJPUl9TRVRUSU5HUyIsCi0gICAgICAgICJzZXR0aW5ncyJ9LAotICAgIHtDX0VOVU0gKEdTVF9MSUJSQVJZX0VSUk9SX0VOQ09ERSksICJHU1RfTElCUkFSWV9FUlJPUl9FTkNPREUiLCAiZW5jb2RlIn0sCi0gICAge0NfRU5VTSAoR1NUX0xJQlJBUllfRVJST1JfTlVNX0VSUk9SUyksICJHU1RfTElCUkFSWV9FUlJPUl9OVU1fRVJST1JTIiwKLSAgICAgICAgIm51bS1lcnJvcnMifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0TGlicmFyeUVycm9yIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfcmVzb3VyY2VfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9GQUlMRUQpLCAiR1NUX1JFU09VUkNFX0VSUk9SX0ZBSUxFRCIsICJmYWlsZWQifSwKLSAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfVE9PX0xBWlkpLCAiR1NUX1JFU09VUkNFX0VSUk9SX1RPT19MQVpZIiwKLSAgICAgICAgInRvby1sYXp5In0sCi0gICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCksICJHU1RfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5EIiwKLSAgICAgICAgIm5vdC1mb3VuZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9CVVNZKSwgIkdTVF9SRVNPVVJDRV9FUlJPUl9CVVNZIiwgImJ1c3kifSwKLSAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfT1BFTl9SRUFEKSwgIkdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQUQiLAotICAgICAgICAib3Blbi1yZWFkIn0sCi0gICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fV1JJVEUpLCAiR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fV1JJVEUiLAotICAgICAgICAib3Blbi13cml0ZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9PUEVOX1JFQURfV1JJVEUpLAotICAgICAgICAiR1NUX1JFU09VUkNFX0VSUk9SX09QRU5fUkVBRF9XUklURSIsICJvcGVuLXJlYWQtd3JpdGUifSwKLSAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfQ0xPU0UpLCAiR1NUX1JFU09VUkNFX0VSUk9SX0NMT1NFIiwgImNsb3NlIn0sCi0gICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX1JFQUQpLCAiR1NUX1JFU09VUkNFX0VSUk9SX1JFQUQiLCAicmVhZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9XUklURSksICJHU1RfUkVTT1VSQ0VfRVJST1JfV1JJVEUiLCAid3JpdGUifSwKLSAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfU0VFSyksICJHU1RfUkVTT1VSQ0VfRVJST1JfU0VFSyIsICJzZWVrIn0sCi0gICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX1NZTkMpLCAiR1NUX1JFU09VUkNFX0VSUk9SX1NZTkMiLCAic3luYyJ9LAotICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9TRVRUSU5HUyksICJHU1RfUkVTT1VSQ0VfRVJST1JfU0VUVElOR1MiLAotICAgICAgICAic2V0dGluZ3MifSwKLSAgICB7Q19FTlVNIChHU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVCksCi0gICAgICAgICJHU1RfUkVTT1VSQ0VfRVJST1JfTk9fU1BBQ0VfTEVGVCIsICJuby1zcGFjZS1sZWZ0In0sCi0gICAge0NfRU5VTSAoR1NUX1JFU09VUkNFX0VSUk9SX05PVF9BVVRIT1JJWkVEKSwKLSAgICAgICAgIkdTVF9SRVNPVVJDRV9FUlJPUl9OT1RfQVVUSE9SSVpFRCIsICJub3QtYXV0aG9yaXplZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9SRVNPVVJDRV9FUlJPUl9OVU1fRVJST1JTKSwgIkdTVF9SRVNPVVJDRV9FUlJPUl9OVU1fRVJST1JTIiwKLSAgICAgICAgIm51bS1lcnJvcnMifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UmVzb3VyY2VFcnJvciIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X3N0cmVhbV9lcnJvcl9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9GQUlMRUQpLCAiR1NUX1NUUkVBTV9FUlJPUl9GQUlMRUQiLCAiZmFpbGVkIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9UT09fTEFaWSksICJHU1RfU1RSRUFNX0VSUk9SX1RPT19MQVpZIiwKLSAgICAgICAgInRvby1sYXp5In0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9OT1RfSU1QTEVNRU5URUQpLAotICAgICAgICAiR1NUX1NUUkVBTV9FUlJPUl9OT1RfSU1QTEVNRU5URUQiLCAibm90LWltcGxlbWVudGVkIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCksCi0gICAgICAgICJHU1RfU1RSRUFNX0VSUk9SX1RZUEVfTk9UX0ZPVU5EIiwgInR5cGUtbm90LWZvdW5kIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9XUk9OR19UWVBFKSwgIkdTVF9TVFJFQU1fRVJST1JfV1JPTkdfVFlQRSIsCi0gICAgICAgICJ3cm9uZy10eXBlIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQpLAotICAgICAgICAiR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQiLCAiY29kZWMtbm90LWZvdW5kIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9ERUNPREUpLCAiR1NUX1NUUkVBTV9FUlJPUl9ERUNPREUiLCAiZGVjb2RlIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9FTkNPREUpLCAiR1NUX1NUUkVBTV9FUlJPUl9FTkNPREUiLCAiZW5jb2RlIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9ERU1VWCksICJHU1RfU1RSRUFNX0VSUk9SX0RFTVVYIiwgImRlbXV4In0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9NVVgpLCAiR1NUX1NUUkVBTV9FUlJPUl9NVVgiLCAibXV4In0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9GT1JNQVQpLCAiR1NUX1NUUkVBTV9FUlJPUl9GT1JNQVQiLCAiZm9ybWF0In0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9ERUNSWVBUKSwgIkdTVF9TVFJFQU1fRVJST1JfREVDUllQVCIsICJkZWNyeXB0In0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9ERUNSWVBUX05PS0VZKSwgIkdTVF9TVFJFQU1fRVJST1JfREVDUllQVF9OT0tFWSIsCi0gICAgICAgICJkZWNyeXB0LW5va2V5In0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9FUlJPUl9OVU1fRVJST1JTKSwgIkdTVF9TVFJFQU1fRVJST1JfTlVNX0VSUk9SUyIsCi0gICAgICAgICJudW0tZXJyb3JzIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0cmVhbUVycm9yIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RldmVudC5oIiAqLwotR1R5cGUKLWdzdF9ldmVudF90eXBlX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9FVkVOVF9UWVBFX1VQU1RSRUFNKSwgIkdTVF9FVkVOVF9UWVBFX1VQU1RSRUFNIiwgInVwc3RyZWFtIn0sCi0gICAge0NfRkxBR1MgKEdTVF9FVkVOVF9UWVBFX0RPV05TVFJFQU0pLCAiR1NUX0VWRU5UX1RZUEVfRE9XTlNUUkVBTSIsCi0gICAgICAgICJkb3duc3RyZWFtIn0sCi0gICAge0NfRkxBR1MgKEdTVF9FVkVOVF9UWVBFX1NFUklBTElaRUQpLCAiR1NUX0VWRU5UX1RZUEVfU0VSSUFMSVpFRCIsCi0gICAgICAgICJzZXJpYWxpemVkIn0sCi0gICAge0NfRkxBR1MgKEdTVF9FVkVOVF9UWVBFX1NUSUNLWSksICJHU1RfRVZFTlRfVFlQRV9TVElDS1kiLCAic3RpY2t5In0sCi0gICAge0NfRkxBR1MgKEdTVF9FVkVOVF9UWVBFX1NUSUNLWV9NVUxUSSksICJHU1RfRVZFTlRfVFlQRV9TVElDS1lfTVVMVEkiLAotICAgICAgICAic3RpY2t5LW11bHRpIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RFdmVudFR5cGVGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X2V2ZW50X3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9VTktOT1dOKSwgIkdTVF9FVkVOVF9VTktOT1dOIiwgInVua25vd24ifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfRkxVU0hfU1RBUlQpLCAiR1NUX0VWRU5UX0ZMVVNIX1NUQVJUIiwgImZsdXNoLXN0YXJ0In0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX0ZMVVNIX1NUT1ApLCAiR1NUX0VWRU5UX0ZMVVNIX1NUT1AiLCAiZmx1c2gtc3RvcCJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQpLCAiR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCIsICJzdHJlYW0tc3RhcnQifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfQ0FQUyksICJHU1RfRVZFTlRfQ0FQUyIsICJjYXBzIn0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX1NFR01FTlQpLCAiR1NUX0VWRU5UX1NFR01FTlQiLCAic2VnbWVudCJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9TVFJFQU1fQ09MTEVDVElPTiksICJHU1RfRVZFTlRfU1RSRUFNX0NPTExFQ1RJT04iLAotICAgICAgICAic3RyZWFtLWNvbGxlY3Rpb24ifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfVEFHKSwgIkdTVF9FVkVOVF9UQUciLCAidGFnIn0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX0JVRkZFUlNJWkUpLCAiR1NUX0VWRU5UX0JVRkZFUlNJWkUiLCAiYnVmZmVyc2l6ZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9TSU5LX01FU1NBR0UpLCAiR1NUX0VWRU5UX1NJTktfTUVTU0FHRSIsICJzaW5rLW1lc3NhZ2UifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfU1RSRUFNX0dST1VQX0RPTkUpLCAiR1NUX0VWRU5UX1NUUkVBTV9HUk9VUF9ET05FIiwKLSAgICAgICAgInN0cmVhbS1ncm91cC1kb25lIn0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX0VPUyksICJHU1RfRVZFTlRfRU9TIiwgImVvcyJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9UT0MpLCAiR1NUX0VWRU5UX1RPQyIsICJ0b2MifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfUFJPVEVDVElPTiksICJHU1RfRVZFTlRfUFJPVEVDVElPTiIsICJwcm90ZWN0aW9uIn0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX1NFR01FTlRfRE9ORSksICJHU1RfRVZFTlRfU0VHTUVOVF9ET05FIiwgInNlZ21lbnQtZG9uZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9HQVApLCAiR1NUX0VWRU5UX0dBUCIsICJnYXAifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfUU9TKSwgIkdTVF9FVkVOVF9RT1MiLCAicW9zIn0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX1NFRUspLCAiR1NUX0VWRU5UX1NFRUsiLCAic2VlayJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9OQVZJR0FUSU9OKSwgIkdTVF9FVkVOVF9OQVZJR0FUSU9OIiwgIm5hdmlnYXRpb24ifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfTEFURU5DWSksICJHU1RfRVZFTlRfTEFURU5DWSIsICJsYXRlbmN5In0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX1NURVApLCAiR1NUX0VWRU5UX1NURVAiLCAic3RlcCJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9SRUNPTkZJR1VSRSksICJHU1RfRVZFTlRfUkVDT05GSUdVUkUiLCAicmVjb25maWd1cmUifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfVE9DX1NFTEVDVCksICJHU1RfRVZFTlRfVE9DX1NFTEVDVCIsICJ0b2Mtc2VsZWN0In0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX1NFTEVDVF9TVFJFQU1TKSwgIkdTVF9FVkVOVF9TRUxFQ1RfU1RSRUFNUyIsCi0gICAgICAgICJzZWxlY3Qtc3RyZWFtcyJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0pLCAiR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSIsCi0gICAgICAgICJjdXN0b20tdXBzdHJlYW0ifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU0pLCAiR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNIiwKLSAgICAgICAgImN1c3RvbS1kb3duc3RyZWFtIn0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiksCi0gICAgICAgICJHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09CIiwgImN1c3RvbS1kb3duc3RyZWFtLW9vYiJ9LAotICAgIHtDX0VOVU0gKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9TVElDS1kpLAotICAgICAgICAiR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX1NUSUNLWSIsICJjdXN0b20tZG93bnN0cmVhbS1zdGlja3kifSwKLSAgICB7Q19FTlVNIChHU1RfRVZFTlRfQ1VTVE9NX0JPVEgpLCAiR1NUX0VWRU5UX0NVU1RPTV9CT1RIIiwgImN1c3RvbS1ib3RoIn0sCi0gICAge0NfRU5VTSAoR1NUX0VWRU5UX0NVU1RPTV9CT1RIX09PQiksICJHU1RfRVZFTlRfQ1VTVE9NX0JPVEhfT09CIiwKLSAgICAgICAgImN1c3RvbS1ib3RoLW9vYiJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RFdmVudFR5cGUiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9zdHJlYW1fZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX1NUUkVBTV9GTEFHX05PTkUpLCAiR1NUX1NUUkVBTV9GTEFHX05PTkUiLCAibm9uZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU1RSRUFNX0ZMQUdfU1BBUlNFKSwgIkdTVF9TVFJFQU1fRkxBR19TUEFSU0UiLCAic3BhcnNlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QpLCAiR1NUX1NUUkVBTV9GTEFHX1NFTEVDVCIsICJzZWxlY3QifSwKLSAgICB7Q19GTEFHUyAoR1NUX1NUUkVBTV9GTEFHX1VOU0VMRUNUKSwgIkdTVF9TVFJFQU1fRkxBR19VTlNFTEVDVCIsCi0gICAgICAgICJ1bnNlbGVjdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0U3RyZWFtRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9xb3NfdHlwZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1FPU19UWVBFX09WRVJGTE9XKSwgIkdTVF9RT1NfVFlQRV9PVkVSRkxPVyIsICJvdmVyZmxvdyJ9LAotICAgIHtDX0VOVU0gKEdTVF9RT1NfVFlQRV9VTkRFUkZMT1cpLCAiR1NUX1FPU19UWVBFX1VOREVSRkxPVyIsICJ1bmRlcmZsb3cifSwKLSAgICB7Q19FTlVNIChHU1RfUU9TX1RZUEVfVEhST1RUTEUpLCAiR1NUX1FPU19UWVBFX1RIUk9UVExFIiwgInRocm90dGxlIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFFPU1R5cGUiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGZvcm1hdC5oIiAqLwotR1R5cGUKLWdzdF9mb3JtYXRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfVU5ERUZJTkVEKSwgIkdTVF9GT1JNQVRfVU5ERUZJTkVEIiwgInVuZGVmaW5lZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfREVGQVVMVCksICJHU1RfRk9STUFUX0RFRkFVTFQiLCAiZGVmYXVsdCJ9LAotICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfQllURVMpLCAiR1NUX0ZPUk1BVF9CWVRFUyIsICJieXRlcyJ9LAotICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfVElNRSksICJHU1RfRk9STUFUX1RJTUUiLCAidGltZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfQlVGRkVSUyksICJHU1RfRk9STUFUX0JVRkZFUlMiLCAiYnVmZmVycyJ9LAotICAgIHtDX0VOVU0gKEdTVF9GT1JNQVRfUEVSQ0VOVCksICJHU1RfRk9STUFUX1BFUkNFTlQiLCAicGVyY2VudCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RGb3JtYXQiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGluZm8uaCIgKi8KLUdUeXBlCi1nc3RfZGVidWdfbGV2ZWxfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9MRVZFTF9OT05FKSwgIkdTVF9MRVZFTF9OT05FIiwgIm5vbmUifSwKLSAgICB7Q19FTlVNIChHU1RfTEVWRUxfRVJST1IpLCAiR1NUX0xFVkVMX0VSUk9SIiwgImVycm9yIn0sCi0gICAge0NfRU5VTSAoR1NUX0xFVkVMX1dBUk5JTkcpLCAiR1NUX0xFVkVMX1dBUk5JTkciLCAid2FybmluZyJ9LAotICAgIHtDX0VOVU0gKEdTVF9MRVZFTF9GSVhNRSksICJHU1RfTEVWRUxfRklYTUUiLCAiZml4bWUifSwKLSAgICB7Q19FTlVNIChHU1RfTEVWRUxfSU5GTyksICJHU1RfTEVWRUxfSU5GTyIsICJpbmZvIn0sCi0gICAge0NfRU5VTSAoR1NUX0xFVkVMX0RFQlVHKSwgIkdTVF9MRVZFTF9ERUJVRyIsICJkZWJ1ZyJ9LAotICAgIHtDX0VOVU0gKEdTVF9MRVZFTF9MT0cpLCAiR1NUX0xFVkVMX0xPRyIsICJsb2cifSwKLSAgICB7Q19FTlVNIChHU1RfTEVWRUxfVFJBQ0UpLCAiR1NUX0xFVkVMX1RSQUNFIiwgInRyYWNlIn0sCi0gICAge0NfRU5VTSAoR1NUX0xFVkVMX01FTURVTVApLCAiR1NUX0xFVkVMX01FTURVTVAiLCAibWVtZHVtcCJ9LAotICAgIHtDX0VOVU0gKEdTVF9MRVZFTF9DT1VOVCksICJHU1RfTEVWRUxfQ09VTlQiLCAiY291bnQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RGVidWdMZXZlbCIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X2RlYnVnX2NvbG9yX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfREVCVUdfRkdfQkxBQ0spLCAiR1NUX0RFQlVHX0ZHX0JMQUNLIiwgImZnLWJsYWNrIn0sCi0gICAge0NfRU5VTSAoR1NUX0RFQlVHX0ZHX1JFRCksICJHU1RfREVCVUdfRkdfUkVEIiwgImZnLXJlZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9ERUJVR19GR19HUkVFTiksICJHU1RfREVCVUdfRkdfR1JFRU4iLCAiZmctZ3JlZW4ifSwKLSAgICB7Q19FTlVNIChHU1RfREVCVUdfRkdfWUVMTE9XKSwgIkdTVF9ERUJVR19GR19ZRUxMT1ciLCAiZmcteWVsbG93In0sCi0gICAge0NfRU5VTSAoR1NUX0RFQlVHX0ZHX0JMVUUpLCAiR1NUX0RFQlVHX0ZHX0JMVUUiLCAiZmctYmx1ZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9ERUJVR19GR19NQUdFTlRBKSwgIkdTVF9ERUJVR19GR19NQUdFTlRBIiwgImZnLW1hZ2VudGEifSwKLSAgICB7Q19FTlVNIChHU1RfREVCVUdfRkdfQ1lBTiksICJHU1RfREVCVUdfRkdfQ1lBTiIsICJmZy1jeWFuIn0sCi0gICAge0NfRU5VTSAoR1NUX0RFQlVHX0ZHX1dISVRFKSwgIkdTVF9ERUJVR19GR19XSElURSIsICJmZy13aGl0ZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9ERUJVR19CR19CTEFDSyksICJHU1RfREVCVUdfQkdfQkxBQ0siLCAiYmctYmxhY2sifSwKLSAgICB7Q19FTlVNIChHU1RfREVCVUdfQkdfUkVEKSwgIkdTVF9ERUJVR19CR19SRUQiLCAiYmctcmVkIn0sCi0gICAge0NfRU5VTSAoR1NUX0RFQlVHX0JHX0dSRUVOKSwgIkdTVF9ERUJVR19CR19HUkVFTiIsICJiZy1ncmVlbiJ9LAotICAgIHtDX0VOVU0gKEdTVF9ERUJVR19CR19ZRUxMT1cpLCAiR1NUX0RFQlVHX0JHX1lFTExPVyIsICJiZy15ZWxsb3cifSwKLSAgICB7Q19FTlVNIChHU1RfREVCVUdfQkdfQkxVRSksICJHU1RfREVCVUdfQkdfQkxVRSIsICJiZy1ibHVlIn0sCi0gICAge0NfRU5VTSAoR1NUX0RFQlVHX0JHX01BR0VOVEEpLCAiR1NUX0RFQlVHX0JHX01BR0VOVEEiLCAiYmctbWFnZW50YSJ9LAotICAgIHtDX0VOVU0gKEdTVF9ERUJVR19CR19DWUFOKSwgIkdTVF9ERUJVR19CR19DWUFOIiwgImJnLWN5YW4ifSwKLSAgICB7Q19FTlVNIChHU1RfREVCVUdfQkdfV0hJVEUpLCAiR1NUX0RFQlVHX0JHX1dISVRFIiwgImJnLXdoaXRlIn0sCi0gICAge0NfRU5VTSAoR1NUX0RFQlVHX0JPTEQpLCAiR1NUX0RFQlVHX0JPTEQiLCAiYm9sZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9ERUJVR19VTkRFUkxJTkUpLCAiR1NUX0RFQlVHX1VOREVSTElORSIsICJ1bmRlcmxpbmUifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RGVidWdDb2xvckZsYWdzIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfZGVidWdfY29sb3JfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX0RFQlVHX0NPTE9SX01PREVfT0ZGKSwgIkdTVF9ERUJVR19DT0xPUl9NT0RFX09GRiIsICJvZmYifSwKLSAgICB7Q19FTlVNIChHU1RfREVCVUdfQ09MT1JfTU9ERV9PTiksICJHU1RfREVCVUdfQ09MT1JfTU9ERV9PTiIsICJvbiJ9LAotICAgIHtDX0VOVU0gKEdTVF9ERUJVR19DT0xPUl9NT0RFX1VOSVgpLCAiR1NUX0RFQlVHX0NPTE9SX01PREVfVU5JWCIsICJ1bml4In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdERlYnVnQ29sb3JNb2RlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RpdGVyYXRvci5oIiAqLwotR1R5cGUKLWdzdF9pdGVyYXRvcl9yZXN1bHRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9JVEVSQVRPUl9ET05FKSwgIkdTVF9JVEVSQVRPUl9ET05FIiwgImRvbmUifSwKLSAgICB7Q19FTlVNIChHU1RfSVRFUkFUT1JfT0spLCAiR1NUX0lURVJBVE9SX09LIiwgIm9rIn0sCi0gICAge0NfRU5VTSAoR1NUX0lURVJBVE9SX1JFU1lOQyksICJHU1RfSVRFUkFUT1JfUkVTWU5DIiwgInJlc3luYyJ9LAotICAgIHtDX0VOVU0gKEdTVF9JVEVSQVRPUl9FUlJPUiksICJHU1RfSVRFUkFUT1JfRVJST1IiLCAiZXJyb3IifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0SXRlcmF0b3JSZXN1bHQiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9pdGVyYXRvcl9pdGVtX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfSVRFUkFUT1JfSVRFTV9TS0lQKSwgIkdTVF9JVEVSQVRPUl9JVEVNX1NLSVAiLCAic2tpcCJ9LAotICAgIHtDX0VOVU0gKEdTVF9JVEVSQVRPUl9JVEVNX1BBU1MpLCAiR1NUX0lURVJBVE9SX0lURU1fUEFTUyIsICJwYXNzIn0sCi0gICAge0NfRU5VTSAoR1NUX0lURVJBVE9SX0lURU1fRU5EKSwgIkdTVF9JVEVSQVRPUl9JVEVNX0VORCIsICJlbmQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0SXRlcmF0b3JJdGVtIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RtZXNzYWdlLmgiICovCi1HVHlwZQotZ3N0X21lc3NhZ2VfdHlwZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9VTktOT1dOKSwgIkdTVF9NRVNTQUdFX1VOS05PV04iLCAidW5rbm93biJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9FT1MpLCAiR1NUX01FU1NBR0VfRU9TIiwgImVvcyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9FUlJPUiksICJHU1RfTUVTU0FHRV9FUlJPUiIsICJlcnJvciJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9XQVJOSU5HKSwgIkdTVF9NRVNTQUdFX1dBUk5JTkciLCAid2FybmluZyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9JTkZPKSwgIkdTVF9NRVNTQUdFX0lORk8iLCAiaW5mbyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9UQUcpLCAiR1NUX01FU1NBR0VfVEFHIiwgInRhZyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9CVUZGRVJJTkcpLCAiR1NUX01FU1NBR0VfQlVGRkVSSU5HIiwgImJ1ZmZlcmluZyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVEFURV9DSEFOR0VEKSwgIkdTVF9NRVNTQUdFX1NUQVRFX0NIQU5HRUQiLAotICAgICAgICAic3RhdGUtY2hhbmdlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVEFURV9ESVJUWSksICJHU1RfTUVTU0FHRV9TVEFURV9ESVJUWSIsCi0gICAgICAgICJzdGF0ZS1kaXJ0eSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVEVQX0RPTkUpLCAiR1NUX01FU1NBR0VfU1RFUF9ET05FIiwgInN0ZXAtZG9uZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9DTE9DS19QUk9WSURFKSwgIkdTVF9NRVNTQUdFX0NMT0NLX1BST1ZJREUiLAotICAgICAgICAiY2xvY2stcHJvdmlkZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9DTE9DS19MT1NUKSwgIkdTVF9NRVNTQUdFX0NMT0NLX0xPU1QiLCAiY2xvY2stbG9zdCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9ORVdfQ0xPQ0spLCAiR1NUX01FU1NBR0VfTkVXX0NMT0NLIiwgIm5ldy1jbG9jayJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVFJVQ1RVUkVfQ0hBTkdFKSwgIkdTVF9NRVNTQUdFX1NUUlVDVFVSRV9DSEFOR0UiLAotICAgICAgICAic3RydWN0dXJlLWNoYW5nZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVFJFQU1fU1RBVFVTKSwgIkdTVF9NRVNTQUdFX1NUUkVBTV9TVEFUVVMiLAotICAgICAgICAic3RyZWFtLXN0YXR1cyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9BUFBMSUNBVElPTiksICJHU1RfTUVTU0FHRV9BUFBMSUNBVElPTiIsCi0gICAgICAgICJhcHBsaWNhdGlvbiJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9FTEVNRU5UKSwgIkdTVF9NRVNTQUdFX0VMRU1FTlQiLCAiZWxlbWVudCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TRUdNRU5UX1NUQVJUKSwgIkdTVF9NRVNTQUdFX1NFR01FTlRfU1RBUlQiLAotICAgICAgICAic2VnbWVudC1zdGFydCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TRUdNRU5UX0RPTkUpLCAiR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FIiwKLSAgICAgICAgInNlZ21lbnQtZG9uZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9EVVJBVElPTl9DSEFOR0VEKSwgIkdTVF9NRVNTQUdFX0RVUkFUSU9OX0NIQU5HRUQiLAotICAgICAgICAiZHVyYXRpb24tY2hhbmdlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9MQVRFTkNZKSwgIkdTVF9NRVNTQUdFX0xBVEVOQ1kiLCAibGF0ZW5jeSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVCksICJHU1RfTUVTU0FHRV9BU1lOQ19TVEFSVCIsCi0gICAgICAgICJhc3luYy1zdGFydCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9BU1lOQ19ET05FKSwgIkdTVF9NRVNTQUdFX0FTWU5DX0RPTkUiLCAiYXN5bmMtZG9uZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFKSwgIkdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEUiLAotICAgICAgICAicmVxdWVzdC1zdGF0ZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVEVQX1NUQVJUKSwgIkdTVF9NRVNTQUdFX1NURVBfU1RBUlQiLCAic3RlcC1zdGFydCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9RT1MpLCAiR1NUX01FU1NBR0VfUU9TIiwgInFvcyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9QUk9HUkVTUyksICJHU1RfTUVTU0FHRV9QUk9HUkVTUyIsICJwcm9ncmVzcyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9UT0MpLCAiR1NUX01FU1NBR0VfVE9DIiwgInRvYyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9SRVNFVF9USU1FKSwgIkdTVF9NRVNTQUdFX1JFU0VUX1RJTUUiLCAicmVzZXQtdGltZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVFJFQU1fU1RBUlQpLCAiR1NUX01FU1NBR0VfU1RSRUFNX1NUQVJUIiwKLSAgICAgICAgInN0cmVhbS1zdGFydCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQpLCAiR1NUX01FU1NBR0VfTkVFRF9DT05URVhUIiwKLSAgICAgICAgIm5lZWQtY29udGV4dCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9IQVZFX0NPTlRFWFQpLCAiR1NUX01FU1NBR0VfSEFWRV9DT05URVhUIiwKLSAgICAgICAgImhhdmUtY29udGV4dCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9FWFRFTkRFRCksICJHU1RfTUVTU0FHRV9FWFRFTkRFRCIsICJleHRlbmRlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9ERVZJQ0VfQURERUQpLCAiR1NUX01FU1NBR0VfREVWSUNFX0FEREVEIiwKLSAgICAgICAgImRldmljZS1hZGRlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRCksICJHU1RfTUVTU0FHRV9ERVZJQ0VfUkVNT1ZFRCIsCi0gICAgICAgICJkZXZpY2UtcmVtb3ZlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9QUk9QRVJUWV9OT1RJRlkpLCAiR1NUX01FU1NBR0VfUFJPUEVSVFlfTk9USUZZIiwKLSAgICAgICAgInByb3BlcnR5LW5vdGlmeSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiksICJHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiIsCi0gICAgICAgICJzdHJlYW0tY29sbGVjdGlvbiJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9TVFJFQU1TX1NFTEVDVEVEKSwgIkdTVF9NRVNTQUdFX1NUUkVBTVNfU0VMRUNURUQiLAotICAgICAgICAic3RyZWFtcy1zZWxlY3RlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9SRURJUkVDVCksICJHU1RfTUVTU0FHRV9SRURJUkVDVCIsICJyZWRpcmVjdCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVTU0FHRV9BTlkpLCAiR1NUX01FU1NBR0VfQU5ZIiwgImFueSJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0TWVzc2FnZVR5cGUiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9zdHJ1Y3R1cmVfY2hhbmdlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX0xJTkspLAotICAgICAgICAiR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfTElOSyIsICJsaW5rIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUlVDVFVSRV9DSEFOR0VfVFlQRV9QQURfVU5MSU5LKSwKLSAgICAgICAgIkdTVF9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEVfUEFEX1VOTElOSyIsICJ1bmxpbmsifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0U3RydWN0dXJlQ2hhbmdlVHlwZSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X3N0cmVhbV9zdGF0dXNfdHlwZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9DUkVBVEUpLCAiR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9DUkVBVEUiLAotICAgICAgICAiY3JlYXRlIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9FTlRFUiksICJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSIiwKLSAgICAgICAgImVudGVyIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9MRUFWRSksICJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0xFQVZFIiwKLSAgICAgICAgImxlYXZlIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9ERVNUUk9ZKSwgIkdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfREVTVFJPWSIsCi0gICAgICAgICJkZXN0cm95In0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9TVEFSVCksICJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1NUQVJUIiwKLSAgICAgICAgInN0YXJ0In0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9QQVVTRSksICJHU1RfU1RSRUFNX1NUQVRVU19UWVBFX1BBVVNFIiwKLSAgICAgICAgInBhdXNlIn0sCi0gICAge0NfRU5VTSAoR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9TVE9QKSwgIkdTVF9TVFJFQU1fU1RBVFVTX1RZUEVfU1RPUCIsCi0gICAgICAgICJzdG9wIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFN0cmVhbVN0YXR1c1R5cGUiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9wcm9ncmVzc190eXBlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCksICJHU1RfUFJPR1JFU1NfVFlQRV9TVEFSVCIsICJzdGFydCJ9LAotICAgIHtDX0VOVU0gKEdTVF9QUk9HUkVTU19UWVBFX0NPTlRJTlVFKSwgIkdTVF9QUk9HUkVTU19UWVBFX0NPTlRJTlVFIiwKLSAgICAgICAgImNvbnRpbnVlIn0sCi0gICAge0NfRU5VTSAoR1NUX1BST0dSRVNTX1RZUEVfQ09NUExFVEUpLCAiR1NUX1BST0dSRVNTX1RZUEVfQ09NUExFVEUiLAotICAgICAgICAiY29tcGxldGUifSwKLSAgICB7Q19FTlVNIChHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRCksICJHU1RfUFJPR1JFU1NfVFlQRV9DQU5DRUxFRCIsCi0gICAgICAgICJjYW5jZWxlZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9QUk9HUkVTU19UWVBFX0VSUk9SKSwgIkdTVF9QUk9HUkVTU19UWVBFX0VSUk9SIiwgImVycm9yIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFByb2dyZXNzVHlwZSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0bWV0YS5oIiAqLwotR1R5cGUKLWdzdF9tZXRhX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9NRVRBX0ZMQUdfTk9ORSksICJHU1RfTUVUQV9GTEFHX05PTkUiLCAibm9uZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVUQV9GTEFHX1JFQURPTkxZKSwgIkdTVF9NRVRBX0ZMQUdfUkVBRE9OTFkiLCAicmVhZG9ubHkifSwKLSAgICB7Q19GTEFHUyAoR1NUX01FVEFfRkxBR19QT09MRUQpLCAiR1NUX01FVEFfRkxBR19QT09MRUQiLCAicG9vbGVkIn0sCi0gICAge0NfRkxBR1MgKEdTVF9NRVRBX0ZMQUdfTE9DS0VEKSwgIkdTVF9NRVRBX0ZMQUdfTE9DS0VEIiwgImxvY2tlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVUQV9GTEFHX0xBU1QpLCAiR1NUX01FVEFfRkxBR19MQVNUIiwgImxhc3QifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdE1ldGFGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0bWVtb3J5LmgiICovCi1HVHlwZQotZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0ZMQUdTIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpLCAiR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZIiwKLSAgICAgICAgInJlYWRvbmx5In0sCi0gICAge0NfRkxBR1MgKEdTVF9NRU1PUllfRkxBR19OT19TSEFSRSksICJHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUiLAotICAgICAgICAibm8tc2hhcmUifSwKLSAgICB7Q19GTEFHUyAoR1NUX01FTU9SWV9GTEFHX1pFUk9fUFJFRklYRUQpLCAiR1NUX01FTU9SWV9GTEFHX1pFUk9fUFJFRklYRUQiLAotICAgICAgICAiemVyby1wcmVmaXhlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVNT1JZX0ZMQUdfWkVST19QQURERUQpLCAiR1NUX01FTU9SWV9GTEFHX1pFUk9fUEFEREVEIiwKLSAgICAgICAgInplcm8tcGFkZGVkIn0sCi0gICAge0NfRkxBR1MgKEdTVF9NRU1PUllfRkxBR19QSFlTSUNBTExZX0NPTlRJR1VPVVMpLAotICAgICAgICAiR1NUX01FTU9SWV9GTEFHX1BIWVNJQ0FMTFlfQ09OVElHVU9VUyIsICJwaHlzaWNhbGx5LWNvbnRpZ3VvdXMifSwKLSAgICB7Q19GTEFHUyAoR1NUX01FTU9SWV9GTEFHX05PVF9NQVBQQUJMRSksICJHU1RfTUVNT1JZX0ZMQUdfTk9UX01BUFBBQkxFIiwKLSAgICAgICAgIm5vdC1tYXBwYWJsZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTUVNT1JZX0ZMQUdfTEFTVCksICJHU1RfTUVNT1JZX0ZMQUdfTEFTVCIsICJsYXN0In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RNZW1vcnlGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X21hcF9mbGFnc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0ZMQUdTIChHU1RfTUFQX1JFQUQpLCAiR1NUX01BUF9SRUFEIiwgInJlYWQifSwKLSAgICB7Q19GTEFHUyAoR1NUX01BUF9XUklURSksICJHU1RfTUFQX1dSSVRFIiwgIndyaXRlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9NQVBfRkxBR19MQVNUKSwgIkdTVF9NQVBfRkxBR19MQVNUIiwgImZsYWctbGFzdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0TWFwRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdG1pbmlvYmplY3QuaCIgKi8KLUdUeXBlCi1nc3RfbWluaV9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTE9DS0FCTEUpLCAiR1NUX01JTklfT0JKRUNUX0ZMQUdfTE9DS0FCTEUiLAotICAgICAgICAibG9ja2FibGUifSwKLSAgICB7Q19GTEFHUyAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTE9DS19SRUFET05MWSksCi0gICAgICAgICJHU1RfTUlOSV9PQkpFQ1RfRkxBR19MT0NLX1JFQURPTkxZIiwgImxvY2stcmVhZG9ubHkifSwKLSAgICB7Q19GTEFHUyAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCksCi0gICAgICAgICJHU1RfTUlOSV9PQkpFQ1RfRkxBR19NQVlfQkVfTEVBS0VEIiwgIm1heS1iZS1sZWFrZWQifSwKLSAgICB7Q19GTEFHUyAoR1NUX01JTklfT0JKRUNUX0ZMQUdfTEFTVCksICJHU1RfTUlOSV9PQkpFQ1RfRkxBR19MQVNUIiwgImxhc3QifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdE1pbmlPYmplY3RGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X2xvY2tfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX0xPQ0tfRkxBR19SRUFEKSwgIkdTVF9MT0NLX0ZMQUdfUkVBRCIsICJyZWFkIn0sCi0gICAge0NfRkxBR1MgKEdTVF9MT0NLX0ZMQUdfV1JJVEUpLCAiR1NUX0xPQ0tfRkxBR19XUklURSIsICJ3cml0ZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSksICJHU1RfTE9DS19GTEFHX0VYQ0xVU0lWRSIsICJleGNsdXNpdmUifSwKLSAgICB7Q19GTEFHUyAoR1NUX0xPQ0tfRkxBR19MQVNUKSwgIkdTVF9MT0NLX0ZMQUdfTEFTVCIsICJsYXN0In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RMb2NrRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBhZC5oIiAqLwotR1R5cGUKLWdzdF9wYWRfZGlyZWN0aW9uX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfUEFEX1VOS05PV04pLCAiR1NUX1BBRF9VTktOT1dOIiwgInVua25vd24ifSwKLSAgICB7Q19FTlVNIChHU1RfUEFEX1NSQyksICJHU1RfUEFEX1NSQyIsICJzcmMifSwKLSAgICB7Q19FTlVNIChHU1RfUEFEX1NJTkspLCAiR1NUX1BBRF9TSU5LIiwgInNpbmsifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFkRGlyZWN0aW9uIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfcGFkX21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9QQURfTU9ERV9OT05FKSwgIkdTVF9QQURfTU9ERV9OT05FIiwgIm5vbmUifSwKLSAgICB7Q19FTlVNIChHU1RfUEFEX01PREVfUFVTSCksICJHU1RfUEFEX01PREVfUFVTSCIsICJwdXNoIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9NT0RFX1BVTEwpLCAiR1NUX1BBRF9NT0RFX1BVTEwiLCAicHVsbCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQYWRNb2RlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfcGFkX2xpbmtfcmV0dXJuX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfUEFEX0xJTktfT0spLCAiR1NUX1BBRF9MSU5LX09LIiwgIm9rIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9MSU5LX1dST05HX0hJRVJBUkNIWSksICJHU1RfUEFEX0xJTktfV1JPTkdfSElFUkFSQ0hZIiwKLSAgICAgICAgIndyb25nLWhpZXJhcmNoeSJ9LAotICAgIHtDX0VOVU0gKEdTVF9QQURfTElOS19XQVNfTElOS0VEKSwgIkdTVF9QQURfTElOS19XQVNfTElOS0VEIiwgIndhcy1saW5rZWQifSwKLSAgICB7Q19FTlVNIChHU1RfUEFEX0xJTktfV1JPTkdfRElSRUNUSU9OKSwgIkdTVF9QQURfTElOS19XUk9OR19ESVJFQ1RJT04iLAotICAgICAgICAid3JvbmctZGlyZWN0aW9uIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9MSU5LX05PRk9STUFUKSwgIkdTVF9QQURfTElOS19OT0ZPUk1BVCIsICJub2Zvcm1hdCJ9LAotICAgIHtDX0VOVU0gKEdTVF9QQURfTElOS19OT1NDSEVEKSwgIkdTVF9QQURfTElOS19OT1NDSEVEIiwgIm5vc2NoZWQifSwKLSAgICB7Q19FTlVNIChHU1RfUEFEX0xJTktfUkVGVVNFRCksICJHU1RfUEFEX0xJTktfUkVGVVNFRCIsICJyZWZ1c2VkIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhZExpbmtSZXR1cm4iLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9mbG93X3JldHVybl9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX0ZMT1dfQ1VTVE9NX1NVQ0NFU1NfMiksICJHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18yIiwKLSAgICAgICAgImN1c3RvbS1zdWNjZXNzLTIifSwKLSAgICB7Q19FTlVNIChHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xKSwgIkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEiLAotICAgICAgICAiY3VzdG9tLXN1Y2Nlc3MtMSJ9LAotICAgIHtDX0VOVU0gKEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTKSwgIkdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTIiwKLSAgICAgICAgImN1c3RvbS1zdWNjZXNzIn0sCi0gICAge0NfRU5VTSAoR1NUX0ZMT1dfT0spLCAiR1NUX0ZMT1dfT0siLCAib2sifSwKLSAgICB7Q19FTlVNIChHU1RfRkxPV19OT1RfTElOS0VEKSwgIkdTVF9GTE9XX05PVF9MSU5LRUQiLCAibm90LWxpbmtlZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9GTE9XX0ZMVVNISU5HKSwgIkdTVF9GTE9XX0ZMVVNISU5HIiwgImZsdXNoaW5nIn0sCi0gICAge0NfRU5VTSAoR1NUX0ZMT1dfRU9TKSwgIkdTVF9GTE9XX0VPUyIsICJlb3MifSwKLSAgICB7Q19FTlVNIChHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCksICJHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCIsCi0gICAgICAgICJub3QtbmVnb3RpYXRlZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9GTE9XX0VSUk9SKSwgIkdTVF9GTE9XX0VSUk9SIiwgImVycm9yIn0sCi0gICAge0NfRU5VTSAoR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRCksICJHU1RfRkxPV19OT1RfU1VQUE9SVEVEIiwKLSAgICAgICAgIm5vdC1zdXBwb3J0ZWQifSwKLSAgICB7Q19FTlVNIChHU1RfRkxPV19DVVNUT01fRVJST1IpLCAiR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SIiwgImN1c3RvbS1lcnJvciJ9LAotICAgIHtDX0VOVU0gKEdTVF9GTE9XX0NVU1RPTV9FUlJPUl8xKSwgIkdTVF9GTE9XX0NVU1RPTV9FUlJPUl8xIiwKLSAgICAgICAgImN1c3RvbS1lcnJvci0xIn0sCi0gICAge0NfRU5VTSAoR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzIpLCAiR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SXzIiLAotICAgICAgICAiY3VzdG9tLWVycm9yLTIifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0Rmxvd1JldHVybiIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X3BhZF9saW5rX2NoZWNrX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKSwgIkdTVF9QQURfTElOS19DSEVDS19OT1RISU5HIiwKLSAgICAgICAgIm5vdGhpbmcifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9MSU5LX0NIRUNLX0hJRVJBUkNIWSksICJHU1RfUEFEX0xJTktfQ0hFQ0tfSElFUkFSQ0hZIiwKLSAgICAgICAgImhpZXJhcmNoeSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX0xJTktfQ0hFQ0tfVEVNUExBVEVfQ0FQUyksCi0gICAgICAgICJHU1RfUEFEX0xJTktfQ0hFQ0tfVEVNUExBVEVfQ0FQUyIsICJ0ZW1wbGF0ZS1jYXBzIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfTElOS19DSEVDS19DQVBTKSwgIkdTVF9QQURfTElOS19DSEVDS19DQVBTIiwgImNhcHMifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQpLCAiR1NUX1BBRF9MSU5LX0NIRUNLX0RFRkFVTFQiLAotICAgICAgICAiZGVmYXVsdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFkTGlua0NoZWNrIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfcGFkX3Byb2JlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9QUk9CRV9UWVBFX0lOVkFMSUQpLCAiR1NUX1BBRF9QUk9CRV9UWVBFX0lOVkFMSUQiLAotICAgICAgICAiaW52YWxpZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX1BST0JFX1RZUEVfSURMRSksICJHU1RfUEFEX1BST0JFX1RZUEVfSURMRSIsICJpZGxlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DSyksICJHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0siLCAiYmxvY2sifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiksICJHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSIiwKLSAgICAgICAgImJ1ZmZlciJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSX0xJU1QpLCAiR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNUIiwKLSAgICAgICAgImJ1ZmZlci1saXN0In0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNKSwKLSAgICAgICAgIkdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNIiwgImV2ZW50LWRvd25zdHJlYW0ifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX1VQU1RSRUFNKSwKLSAgICAgICAgIkdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9VUFNUUkVBTSIsICJldmVudC11cHN0cmVhbSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gpLCAiR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIIiwKLSAgICAgICAgImV2ZW50LWZsdXNoIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNKSwKLSAgICAgICAgIkdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNIiwgInF1ZXJ5LWRvd25zdHJlYW0ifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX1VQU1RSRUFNKSwKLSAgICAgICAgIkdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9VUFNUUkVBTSIsICJxdWVyeS11cHN0cmVhbSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCksICJHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCIsICJwdXNoIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfUFJPQkVfVFlQRV9QVUxMKSwgIkdTVF9QQURfUFJPQkVfVFlQRV9QVUxMIiwgInB1bGwifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9QUk9CRV9UWVBFX0JMT0NLSU5HKSwgIkdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS0lORyIsCi0gICAgICAgICJibG9ja2luZyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9ET1dOU1RSRUFNKSwKLSAgICAgICAgIkdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0RPV05TVFJFQU0iLCAiZGF0YS1kb3duc3RyZWFtIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX1VQU1RSRUFNKSwKLSAgICAgICAgIkdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX1VQU1RSRUFNIiwgImRhdGEtdXBzdHJlYW0ifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9QUk9CRV9UWVBFX0RBVEFfQk9USCksICJHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9CT1RIIiwKLSAgICAgICAgImRhdGEtYm90aCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSksCi0gICAgICAgICJHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSIsICJibG9jay1kb3duc3RyZWFtIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfUFJPQkVfVFlQRV9CTE9DS19VUFNUUkVBTSksCi0gICAgICAgICJHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfVVBTVFJFQU0iLCAiYmxvY2stdXBzdHJlYW0ifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEgpLCAiR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0JPVEgiLAotICAgICAgICAiZXZlbnQtYm90aCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfQk9USCksICJHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfQk9USCIsCi0gICAgICAgICJxdWVyeS1ib3RoIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfUFJPQkVfVFlQRV9BTExfQk9USCksICJHU1RfUEFEX1BST0JFX1RZUEVfQUxMX0JPVEgiLAotICAgICAgICAiYWxsLWJvdGgifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9QUk9CRV9UWVBFX1NDSEVEVUxJTkcpLCAiR1NUX1BBRF9QUk9CRV9UWVBFX1NDSEVEVUxJTkciLAotICAgICAgICAic2NoZWR1bGluZyJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFkUHJvYmVUeXBlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfcGFkX3Byb2JlX3JldHVybl9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1BBRF9QUk9CRV9EUk9QKSwgIkdTVF9QQURfUFJPQkVfRFJPUCIsICJkcm9wIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9QUk9CRV9PSyksICJHU1RfUEFEX1BST0JFX09LIiwgIm9rIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9QUk9CRV9SRU1PVkUpLCAiR1NUX1BBRF9QUk9CRV9SRU1PVkUiLCAicmVtb3ZlIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9QUk9CRV9QQVNTKSwgIkdTVF9QQURfUFJPQkVfUEFTUyIsICJwYXNzIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9QUk9CRV9IQU5ETEVEKSwgIkdTVF9QQURfUFJPQkVfSEFORExFRCIsICJoYW5kbGVkIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhZFByb2JlUmV0dXJuIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfcGFkX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9QQURfRkxBR19CTE9DS0VEKSwgIkdTVF9QQURfRkxBR19CTE9DS0VEIiwgImJsb2NrZWQifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9GTEFHX0ZMVVNISU5HKSwgIkdTVF9QQURfRkxBR19GTFVTSElORyIsICJmbHVzaGluZyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX0ZMQUdfRU9TKSwgIkdTVF9QQURfRkxBR19FT1MiLCAiZW9zIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfRkxBR19CTE9DS0lORyksICJHU1RfUEFEX0ZMQUdfQkxPQ0tJTkciLCAiYmxvY2tpbmcifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9GTEFHX05FRURfUEFSRU5UKSwgIkdTVF9QQURfRkxBR19ORUVEX1BBUkVOVCIsCi0gICAgICAgICJuZWVkLXBhcmVudCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX0ZMQUdfTkVFRF9SRUNPTkZJR1VSRSksICJHU1RfUEFEX0ZMQUdfTkVFRF9SRUNPTkZJR1VSRSIsCi0gICAgICAgICJuZWVkLXJlY29uZmlndXJlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfRkxBR19QRU5ESU5HX0VWRU5UUyksICJHU1RfUEFEX0ZMQUdfUEVORElOR19FVkVOVFMiLAotICAgICAgICAicGVuZGluZy1ldmVudHMifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9GTEFHX0ZJWEVEX0NBUFMpLCAiR1NUX1BBRF9GTEFHX0ZJWEVEX0NBUFMiLAotICAgICAgICAiZml4ZWQtY2FwcyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX0ZMQUdfUFJPWFlfQ0FQUyksICJHU1RfUEFEX0ZMQUdfUFJPWFlfQ0FQUyIsCi0gICAgICAgICJwcm94eS1jYXBzIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfRkxBR19QUk9YWV9BTExPQ0FUSU9OKSwgIkdTVF9QQURfRkxBR19QUk9YWV9BTExPQ0FUSU9OIiwKLSAgICAgICAgInByb3h5LWFsbG9jYXRpb24ifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9GTEFHX1BST1hZX1NDSEVEVUxJTkcpLCAiR1NUX1BBRF9GTEFHX1BST1hZX1NDSEVEVUxJTkciLAotICAgICAgICAicHJveHktc2NoZWR1bGluZyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUEFEX0ZMQUdfQUNDRVBUX0lOVEVSU0VDVCksICJHU1RfUEFEX0ZMQUdfQUNDRVBUX0lOVEVSU0VDVCIsCi0gICAgICAgICJhY2NlcHQtaW50ZXJzZWN0In0sCi0gICAge0NfRkxBR1MgKEdTVF9QQURfRkxBR19BQ0NFUFRfVEVNUExBVEUpLCAiR1NUX1BBRF9GTEFHX0FDQ0VQVF9URU1QTEFURSIsCi0gICAgICAgICJhY2NlcHQtdGVtcGxhdGUifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBRF9GTEFHX0xBU1QpLCAiR1NUX1BBRF9GTEFHX0xBU1QiLCAibGFzdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0UGFkRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBhZHRlbXBsYXRlLmgiICovCi1HVHlwZQotZ3N0X3BhZF9wcmVzZW5jZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1BBRF9BTFdBWVMpLCAiR1NUX1BBRF9BTFdBWVMiLCAiYWx3YXlzIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9TT01FVElNRVMpLCAiR1NUX1BBRF9TT01FVElNRVMiLCAic29tZXRpbWVzIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBRF9SRVFVRVNUKSwgIkdTVF9QQURfUkVRVUVTVCIsICJyZXF1ZXN0In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhZFByZXNlbmNlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfcGFkX3RlbXBsYXRlX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9QQURfVEVNUExBVEVfRkxBR19MQVNUKSwgIkdTVF9QQURfVEVNUExBVEVfRkxBR19MQVNUIiwKLSAgICAgICAgImxhc3QifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhZFRlbXBsYXRlRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBpcGVsaW5lLmgiICovCi1HVHlwZQotZ3N0X3BpcGVsaW5lX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLKSwgIkdTVF9QSVBFTElORV9GTEFHX0ZJWEVEX0NMT0NLIiwKLSAgICAgICAgImZpeGVkLWNsb2NrIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QSVBFTElORV9GTEFHX0xBU1QpLCAiR1NUX1BJUEVMSU5FX0ZMQUdfTEFTVCIsICJsYXN0In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQaXBlbGluZUZsYWdzIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RwbHVnaW4uaCIgKi8KLUdUeXBlCi1nc3RfcGx1Z2luX2Vycm9yX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfUExVR0lOX0VSUk9SX01PRFVMRSksICJHU1RfUExVR0lOX0VSUk9SX01PRFVMRSIsICJtb2R1bGUifSwKLSAgICB7Q19FTlVNIChHU1RfUExVR0lOX0VSUk9SX0RFUEVOREVOQ0lFUyksICJHU1RfUExVR0lOX0VSUk9SX0RFUEVOREVOQ0lFUyIsCi0gICAgICAgICJkZXBlbmRlbmNpZXMifSwKLSAgICB7Q19FTlVNIChHU1RfUExVR0lOX0VSUk9SX05BTUVfTUlTTUFUQ0gpLCAiR1NUX1BMVUdJTl9FUlJPUl9OQU1FX01JU01BVENIIiwKLSAgICAgICAgIm5hbWUtbWlzbWF0Y2gifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UGx1Z2luRXJyb3IiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9wbHVnaW5fZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX1BMVUdJTl9GTEFHX0NBQ0hFRCksICJHU1RfUExVR0lOX0ZMQUdfQ0FDSEVEIiwgImNhY2hlZCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUExVR0lOX0ZMQUdfQkxBQ0tMSVNURUQpLCAiR1NUX1BMVUdJTl9GTEFHX0JMQUNLTElTVEVEIiwKLSAgICAgICAgImJsYWNrbGlzdGVkIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQbHVnaW5GbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X3BsdWdpbl9kZXBlbmRlbmN5X2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX05PTkUpLAotICAgICAgICAiR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfTk9ORSIsICJub25lIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1JFQ1VSU0UpLAotICAgICAgICAiR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfUkVDVVJTRSIsICJyZWN1cnNlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX1BBVEhTX0FSRV9ERUZBVUxUX09OTFkpLAotICAgICAgICAgICJHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19QQVRIU19BUkVfREVGQVVMVF9PTkxZIiwKLSAgICAgICAgInBhdGhzLWFyZS1kZWZhdWx0LW9ubHkifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1NVRkZJWCksCi0gICAgICAgICAgIkdTVF9QTFVHSU5fREVQRU5ERU5DWV9GTEFHX0ZJTEVfTkFNRV9JU19TVUZGSVgiLAotICAgICAgICAiZmlsZS1uYW1lLWlzLXN1ZmZpeCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19GSUxFX05BTUVfSVNfUFJFRklYKSwKLSAgICAgICAgICAiR1NUX1BMVUdJTl9ERVBFTkRFTkNZX0ZMQUdfRklMRV9OQU1FX0lTX1BSRUZJWCIsCi0gICAgICAgICJmaWxlLW5hbWUtaXMtcHJlZml4In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQbHVnaW5EZXBlbmRlbmN5RmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBsdWdpbmZlYXR1cmUuaCIgKi8KLUdUeXBlCi1nc3RfcmFua19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1JBTktfTk9ORSksICJHU1RfUkFOS19OT05FIiwgIm5vbmUifSwKLSAgICB7Q19FTlVNIChHU1RfUkFOS19NQVJHSU5BTCksICJHU1RfUkFOS19NQVJHSU5BTCIsICJtYXJnaW5hbCJ9LAotICAgIHtDX0VOVU0gKEdTVF9SQU5LX1NFQ09OREFSWSksICJHU1RfUkFOS19TRUNPTkRBUlkiLCAic2Vjb25kYXJ5In0sCi0gICAge0NfRU5VTSAoR1NUX1JBTktfUFJJTUFSWSksICJHU1RfUkFOS19QUklNQVJZIiwgInByaW1hcnkifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UmFuayIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cXVlcnkuaCIgKi8KLUdUeXBlCi1nc3RfcXVlcnlfdHlwZV9mbGFnc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0ZMQUdTIChHU1RfUVVFUllfVFlQRV9VUFNUUkVBTSksICJHU1RfUVVFUllfVFlQRV9VUFNUUkVBTSIsICJ1cHN0cmVhbSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUVVFUllfVFlQRV9ET1dOU1RSRUFNKSwgIkdTVF9RVUVSWV9UWVBFX0RPV05TVFJFQU0iLAotICAgICAgICAiZG93bnN0cmVhbSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfUVVFUllfVFlQRV9TRVJJQUxJWkVEKSwgIkdTVF9RVUVSWV9UWVBFX1NFUklBTElaRUQiLAotICAgICAgICAic2VyaWFsaXplZCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0UXVlcnlUeXBlRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF9xdWVyeV90eXBlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfUVVFUllfVU5LTk9XTiksICJHU1RfUVVFUllfVU5LTk9XTiIsICJ1bmtub3duIn0sCi0gICAge0NfRU5VTSAoR1NUX1FVRVJZX1BPU0lUSU9OKSwgIkdTVF9RVUVSWV9QT1NJVElPTiIsICJwb3NpdGlvbiJ9LAotICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9EVVJBVElPTiksICJHU1RfUVVFUllfRFVSQVRJT04iLCAiZHVyYXRpb24ifSwKLSAgICB7Q19FTlVNIChHU1RfUVVFUllfTEFURU5DWSksICJHU1RfUVVFUllfTEFURU5DWSIsICJsYXRlbmN5In0sCi0gICAge0NfRU5VTSAoR1NUX1FVRVJZX0pJVFRFUiksICJHU1RfUVVFUllfSklUVEVSIiwgImppdHRlciJ9LAotICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9SQVRFKSwgIkdTVF9RVUVSWV9SQVRFIiwgInJhdGUifSwKLSAgICB7Q19FTlVNIChHU1RfUVVFUllfU0VFS0lORyksICJHU1RfUVVFUllfU0VFS0lORyIsICJzZWVraW5nIn0sCi0gICAge0NfRU5VTSAoR1NUX1FVRVJZX1NFR01FTlQpLCAiR1NUX1FVRVJZX1NFR01FTlQiLCAic2VnbWVudCJ9LAotICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9DT05WRVJUKSwgIkdTVF9RVUVSWV9DT05WRVJUIiwgImNvbnZlcnQifSwKLSAgICB7Q19FTlVNIChHU1RfUVVFUllfRk9STUFUUyksICJHU1RfUVVFUllfRk9STUFUUyIsICJmb3JtYXRzIn0sCi0gICAge0NfRU5VTSAoR1NUX1FVRVJZX0JVRkZFUklORyksICJHU1RfUVVFUllfQlVGRkVSSU5HIiwgImJ1ZmZlcmluZyJ9LAotICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9DVVNUT00pLCAiR1NUX1FVRVJZX0NVU1RPTSIsICJjdXN0b20ifSwKLSAgICB7Q19FTlVNIChHU1RfUVVFUllfVVJJKSwgIkdTVF9RVUVSWV9VUkkiLCAidXJpIn0sCi0gICAge0NfRU5VTSAoR1NUX1FVRVJZX0FMTE9DQVRJT04pLCAiR1NUX1FVRVJZX0FMTE9DQVRJT04iLCAiYWxsb2NhdGlvbiJ9LAotICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9TQ0hFRFVMSU5HKSwgIkdTVF9RVUVSWV9TQ0hFRFVMSU5HIiwgInNjaGVkdWxpbmcifSwKLSAgICB7Q19FTlVNIChHU1RfUVVFUllfQUNDRVBUX0NBUFMpLCAiR1NUX1FVRVJZX0FDQ0VQVF9DQVBTIiwgImFjY2VwdC1jYXBzIn0sCi0gICAge0NfRU5VTSAoR1NUX1FVRVJZX0NBUFMpLCAiR1NUX1FVRVJZX0NBUFMiLCAiY2FwcyJ9LAotICAgIHtDX0VOVU0gKEdTVF9RVUVSWV9EUkFJTiksICJHU1RfUVVFUllfRFJBSU4iLCAiZHJhaW4ifSwKLSAgICB7Q19FTlVNIChHU1RfUVVFUllfQ09OVEVYVCksICJHU1RfUVVFUllfQ09OVEVYVCIsICJjb250ZXh0In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFF1ZXJ5VHlwZSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X2J1ZmZlcmluZ19tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfQlVGRkVSSU5HX1NUUkVBTSksICJHU1RfQlVGRkVSSU5HX1NUUkVBTSIsICJzdHJlYW0ifSwKLSAgICB7Q19FTlVNIChHU1RfQlVGRkVSSU5HX0RPV05MT0FEKSwgIkdTVF9CVUZGRVJJTkdfRE9XTkxPQUQiLCAiZG93bmxvYWQifSwKLSAgICB7Q19FTlVNIChHU1RfQlVGRkVSSU5HX1RJTUVTSElGVCksICJHU1RfQlVGRkVSSU5HX1RJTUVTSElGVCIsICJ0aW1lc2hpZnQifSwKLSAgICB7Q19FTlVNIChHU1RfQlVGRkVSSU5HX0xJVkUpLCAiR1NUX0JVRkZFUklOR19MSVZFIiwgImxpdmUifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0QnVmZmVyaW5nTW9kZSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X3NjaGVkdWxpbmdfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX1NDSEVEVUxJTkdfRkxBR19TRUVLQUJMRSksICJHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFIiwKLSAgICAgICAgInNlZWthYmxlIn0sCi0gICAge0NfRkxBR1MgKEdTVF9TQ0hFRFVMSU5HX0ZMQUdfU0VRVUVOVElBTCksICJHU1RfU0NIRURVTElOR19GTEFHX1NFUVVFTlRJQUwiLAotICAgICAgICAic2VxdWVudGlhbCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU0NIRURVTElOR19GTEFHX0JBTkRXSURUSF9MSU1JVEVEKSwKLSAgICAgICAgIkdTVF9TQ0hFRFVMSU5HX0ZMQUdfQkFORFdJRFRIX0xJTUlURUQiLCAiYmFuZHdpZHRoLWxpbWl0ZWQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFNjaGVkdWxpbmdGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0c2VnbWVudC5oIiAqLwotR1R5cGUKLWdzdF9zZWVrX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9TRUVLX1RZUEVfTk9ORSksICJHU1RfU0VFS19UWVBFX05PTkUiLCAibm9uZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9TRUVLX1RZUEVfU0VUKSwgIkdTVF9TRUVLX1RZUEVfU0VUIiwgInNldCJ9LAotICAgIHtDX0VOVU0gKEdTVF9TRUVLX1RZUEVfRU5EKSwgIkdTVF9TRUVLX1RZUEVfRU5EIiwgImVuZCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTZWVrVHlwZSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X3NlZWtfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX1NFRUtfRkxBR19OT05FKSwgIkdTVF9TRUVLX0ZMQUdfTk9ORSIsICJub25lIn0sCi0gICAge0NfRkxBR1MgKEdTVF9TRUVLX0ZMQUdfRkxVU0gpLCAiR1NUX1NFRUtfRkxBR19GTFVTSCIsICJmbHVzaCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSwgIkdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUiLCAiYWNjdXJhdGUifSwKLSAgICB7Q19GTEFHUyAoR1NUX1NFRUtfRkxBR19LRVlfVU5JVCksICJHU1RfU0VFS19GTEFHX0tFWV9VTklUIiwgImtleS11bml0In0sCi0gICAge0NfRkxBR1MgKEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCksICJHU1RfU0VFS19GTEFHX1NFR01FTlQiLCAic2VnbWVudCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU0VFS19GTEFHX1RSSUNLTU9ERSksICJHU1RfU0VFS19GTEFHX1RSSUNLTU9ERSIsICJ0cmlja21vZGUifSwKLSAgICB7Q19GTEFHUyAoR1NUX1NFRUtfRkxBR19TS0lQKSwgIkdTVF9TRUVLX0ZMQUdfU0tJUCIsICJza2lwIn0sCi0gICAge0NfRkxBR1MgKEdTVF9TRUVLX0ZMQUdfU05BUF9CRUZPUkUpLCAiR1NUX1NFRUtfRkxBR19TTkFQX0JFRk9SRSIsCi0gICAgICAgICJzbmFwLWJlZm9yZSJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU0VFS19GTEFHX1NOQVBfQUZURVIpLCAiR1NUX1NFRUtfRkxBR19TTkFQX0FGVEVSIiwKLSAgICAgICAgInNuYXAtYWZ0ZXIifSwKLSAgICB7Q19GTEFHUyAoR1NUX1NFRUtfRkxBR19TTkFQX05FQVJFU1QpLCAiR1NUX1NFRUtfRkxBR19TTkFQX05FQVJFU1QiLAotICAgICAgICAic25hcC1uZWFyZXN0In0sCi0gICAge0NfRkxBR1MgKEdTVF9TRUVLX0ZMQUdfVFJJQ0tNT0RFX0tFWV9VTklUUyksCi0gICAgICAgICJHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFMiLCAidHJpY2ttb2RlLWtleS11bml0cyJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9OT19BVURJTyksCi0gICAgICAgICJHU1RfU0VFS19GTEFHX1RSSUNLTU9ERV9OT19BVURJTyIsICJ0cmlja21vZGUtbm8tYXVkaW8ifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFNlZWtGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X3NlZ21lbnRfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX1NFR01FTlRfRkxBR19OT05FKSwgIkdTVF9TRUdNRU5UX0ZMQUdfTk9ORSIsICJub25lIn0sCi0gICAge0NfRkxBR1MgKEdTVF9TRUdNRU5UX0ZMQUdfUkVTRVQpLCAiR1NUX1NFR01FTlRfRkxBR19SRVNFVCIsICJyZXNldCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERSksICJHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERSIsCi0gICAgICAgICJ0cmlja21vZGUifSwKLSAgICB7Q19GTEFHUyAoR1NUX1NFR01FTlRfRkxBR19TS0lQKSwgIkdTVF9TRUdNRU5UX0ZMQUdfU0tJUCIsICJza2lwIn0sCi0gICAge0NfRkxBR1MgKEdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVCksICJHU1RfU0VHTUVOVF9GTEFHX1NFR01FTlQiLCAic2VnbWVudCJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU0VHTUVOVF9GTEFHX1RSSUNLTU9ERV9LRVlfVU5JVFMpLAotICAgICAgICAiR1NUX1NFR01FTlRfRkxBR19UUklDS01PREVfS0VZX1VOSVRTIiwgInRyaWNrbW9kZS1rZXktdW5pdHMifSwKLSAgICB7Q19GTEFHUyAoR1NUX1NFR01FTlRfRkxBR19UUklDS01PREVfTk9fQVVESU8pLAotICAgICAgICAiR1NUX1NFR01FTlRfRkxBR19UUklDS01PREVfTk9fQVVESU8iLCAidHJpY2ttb2RlLW5vLWF1ZGlvIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTZWdtZW50RmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHN0cmVhbXMuaCIgKi8KLUdUeXBlCi1nc3Rfc3RyZWFtX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX1NUUkVBTV9UWVBFX1VOS05PV04pLCAiR1NUX1NUUkVBTV9UWVBFX1VOS05PV04iLCAidW5rbm93biJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU1RSRUFNX1RZUEVfQVVESU8pLCAiR1NUX1NUUkVBTV9UWVBFX0FVRElPIiwgImF1ZGlvIn0sCi0gICAge0NfRkxBR1MgKEdTVF9TVFJFQU1fVFlQRV9WSURFTyksICJHU1RfU1RSRUFNX1RZUEVfVklERU8iLCAidmlkZW8ifSwKLSAgICB7Q19GTEFHUyAoR1NUX1NUUkVBTV9UWVBFX0NPTlRBSU5FUiksICJHU1RfU1RSRUFNX1RZUEVfQ09OVEFJTkVSIiwKLSAgICAgICAgImNvbnRhaW5lciJ9LAotICAgIHtDX0ZMQUdTIChHU1RfU1RSRUFNX1RZUEVfVEVYVCksICJHU1RfU1RSRUFNX1RZUEVfVEVYVCIsICJ0ZXh0In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTdHJlYW1UeXBlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RzeXN0ZW1jbG9jay5oIiAqLwotR1R5cGUKLWdzdF9jbG9ja190eXBlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfQ0xPQ0tfVFlQRV9SRUFMVElNRSksICJHU1RfQ0xPQ0tfVFlQRV9SRUFMVElNRSIsICJyZWFsdGltZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9DTE9DS19UWVBFX01PTk9UT05JQyksICJHU1RfQ0xPQ0tfVFlQRV9NT05PVE9OSUMiLAotICAgICAgICAibW9ub3RvbmljIn0sCi0gICAge0NfRU5VTSAoR1NUX0NMT0NLX1RZUEVfT1RIRVIpLCAiR1NUX0NMT0NLX1RZUEVfT1RIRVIiLCAib3RoZXIifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0Q2xvY2tUeXBlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R0YWdsaXN0LmgiICovCi1HVHlwZQotZ3N0X3RhZ19tZXJnZV9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX1VOREVGSU5FRCksICJHU1RfVEFHX01FUkdFX1VOREVGSU5FRCIsICJ1bmRlZmluZWQifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKSwgIkdTVF9UQUdfTUVSR0VfUkVQTEFDRV9BTEwiLAotICAgICAgICAicmVwbGFjZS1hbGwifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX1JFUExBQ0UpLCAiR1NUX1RBR19NRVJHRV9SRVBMQUNFIiwgInJlcGxhY2UifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX0FQUEVORCksICJHU1RfVEFHX01FUkdFX0FQUEVORCIsICJhcHBlbmQifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX1BSRVBFTkQpLCAiR1NUX1RBR19NRVJHRV9QUkVQRU5EIiwgInByZXBlbmQifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX0tFRVApLCAiR1NUX1RBR19NRVJHRV9LRUVQIiwgImtlZXAifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX0tFRVBfQUxMKSwgIkdTVF9UQUdfTUVSR0VfS0VFUF9BTEwiLCAia2VlcC1hbGwifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX01FUkdFX0NPVU5UKSwgIkdTVF9UQUdfTUVSR0VfQ09VTlQiLCAiY291bnQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VGFnTWVyZ2VNb2RlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfdGFnX2ZsYWdfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9UQUdfRkxBR19VTkRFRklORUQpLCAiR1NUX1RBR19GTEFHX1VOREVGSU5FRCIsICJ1bmRlZmluZWQifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX0ZMQUdfTUVUQSksICJHU1RfVEFHX0ZMQUdfTUVUQSIsICJtZXRhIn0sCi0gICAge0NfRU5VTSAoR1NUX1RBR19GTEFHX0VOQ09ERUQpLCAiR1NUX1RBR19GTEFHX0VOQ09ERUQiLCAiZW5jb2RlZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9UQUdfRkxBR19ERUNPREVEKSwgIkdTVF9UQUdfRkxBR19ERUNPREVEIiwgImRlY29kZWQifSwKLSAgICB7Q19FTlVNIChHU1RfVEFHX0ZMQUdfQ09VTlQpLCAiR1NUX1RBR19GTEFHX0NPVU5UIiwgImNvdW50In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFRhZ0ZsYWciLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF90YWdfc2NvcGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9UQUdfU0NPUEVfU1RSRUFNKSwgIkdTVF9UQUdfU0NPUEVfU1RSRUFNIiwgInN0cmVhbSJ9LAotICAgIHtDX0VOVU0gKEdTVF9UQUdfU0NPUEVfR0xPQkFMKSwgIkdTVF9UQUdfU0NPUEVfR0xPQkFMIiwgImdsb2JhbCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RUYWdTY29wZSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dGFzay5oIiAqLwotR1R5cGUKLWdzdF90YXNrX3N0YXRlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfVEFTS19TVEFSVEVEKSwgIkdTVF9UQVNLX1NUQVJURUQiLCAic3RhcnRlZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9UQVNLX1NUT1BQRUQpLCAiR1NUX1RBU0tfU1RPUFBFRCIsICJzdG9wcGVkIn0sCi0gICAge0NfRU5VTSAoR1NUX1RBU0tfUEFVU0VEKSwgIkdTVF9UQVNLX1BBVVNFRCIsICJwYXVzZWQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VGFza1N0YXRlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R0b2MuaCIgKi8KLUdUeXBlCi1nc3RfdG9jX3Njb3BlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfVE9DX1NDT1BFX0dMT0JBTCksICJHU1RfVE9DX1NDT1BFX0dMT0JBTCIsICJnbG9iYWwifSwKLSAgICB7Q19FTlVNIChHU1RfVE9DX1NDT1BFX0NVUlJFTlQpLCAiR1NUX1RPQ19TQ09QRV9DVVJSRU5UIiwgImN1cnJlbnQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VG9jU2NvcGUiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF90b2NfZW50cnlfdHlwZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1RPQ19FTlRSWV9UWVBFX0FOR0xFKSwgIkdTVF9UT0NfRU5UUllfVFlQRV9BTkdMRSIsICJhbmdsZSJ9LAotICAgIHtDX0VOVU0gKEdTVF9UT0NfRU5UUllfVFlQRV9WRVJTSU9OKSwgIkdTVF9UT0NfRU5UUllfVFlQRV9WRVJTSU9OIiwKLSAgICAgICAgInZlcnNpb24ifSwKLSAgICB7Q19FTlVNIChHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTiksICJHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTiIsCi0gICAgICAgICJlZGl0aW9uIn0sCi0gICAge0NfRU5VTSAoR1NUX1RPQ19FTlRSWV9UWVBFX0lOVkFMSUQpLCAiR1NUX1RPQ19FTlRSWV9UWVBFX0lOVkFMSUQiLAotICAgICAgICAiaW52YWxpZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9UT0NfRU5UUllfVFlQRV9USVRMRSksICJHU1RfVE9DX0VOVFJZX1RZUEVfVElUTEUiLCAidGl0bGUifSwKLSAgICB7Q19FTlVNIChHU1RfVE9DX0VOVFJZX1RZUEVfVFJBQ0spLCAiR1NUX1RPQ19FTlRSWV9UWVBFX1RSQUNLIiwgInRyYWNrIn0sCi0gICAge0NfRU5VTSAoR1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVIpLCAiR1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVIiLAotICAgICAgICAiY2hhcHRlciJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RUb2NFbnRyeVR5cGUiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotR1R5cGUKLWdzdF90b2NfbG9vcF90eXBlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfVE9DX0xPT1BfTk9ORSksICJHU1RfVE9DX0xPT1BfTk9ORSIsICJub25lIn0sCi0gICAge0NfRU5VTSAoR1NUX1RPQ19MT09QX0ZPUldBUkQpLCAiR1NUX1RPQ19MT09QX0ZPUldBUkQiLCAiZm9yd2FyZCJ9LAotICAgIHtDX0VOVU0gKEdTVF9UT0NfTE9PUF9SRVZFUlNFKSwgIkdTVF9UT0NfTE9PUF9SRVZFUlNFIiwgInJldmVyc2UifSwKLSAgICB7Q19FTlVNIChHU1RfVE9DX0xPT1BfUElOR19QT05HKSwgIkdTVF9UT0NfTE9PUF9QSU5HX1BPTkciLCAicGluZy1wb25nIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFRvY0xvb3BUeXBlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R0cmFjZXJyZWNvcmQuaCIgKi8KLUdUeXBlCi1nc3RfdHJhY2VyX3ZhbHVlX3Njb3BlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BST0NFU1MpLCAiR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9QUk9DRVNTIiwKLSAgICAgICAgInByb2Nlc3MifSwKLSAgICB7Q19FTlVNIChHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRCksICJHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1RIUkVBRCIsCi0gICAgICAgICJ0aHJlYWQifSwKLSAgICB7Q19FTlVNIChHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX0VMRU1FTlQpLCAiR1NUX1RSQUNFUl9WQUxVRV9TQ09QRV9FTEVNRU5UIiwKLSAgICAgICAgImVsZW1lbnQifSwKLSAgICB7Q19FTlVNIChHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCksICJHU1RfVFJBQ0VSX1ZBTFVFX1NDT1BFX1BBRCIsICJwYWQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VHJhY2VyVmFsdWVTY29wZSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi1HVHlwZQotZ3N0X3RyYWNlcl92YWx1ZV9mbGFnc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0ZMQUdTIChHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX05PTkUpLCAiR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19OT05FIiwKLSAgICAgICAgIm5vbmUifSwKLSAgICB7Q19GTEFHUyAoR1NUX1RSQUNFUl9WQUxVRV9GTEFHU19PUFRJT05BTCksCi0gICAgICAgICJHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX09QVElPTkFMIiwgIm9wdGlvbmFsIn0sCi0gICAge0NfRkxBR1MgKEdTVF9UUkFDRVJfVkFMVUVfRkxBR1NfQUdHUkVHQVRFRCksCi0gICAgICAgICJHU1RfVFJBQ0VSX1ZBTFVFX0ZMQUdTX0FHR1JFR0FURUQiLCAiYWdncmVnYXRlZCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0VHJhY2VyVmFsdWVGbGFncyIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dHlwZWZpbmQuaCIgKi8KLUdUeXBlCi1nc3RfdHlwZV9maW5kX3Byb2JhYmlsaXR5X2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX05PTkUpLCAiR1NUX1RZUEVfRklORF9OT05FIiwgIm5vbmUifSwKLSAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX01JTklNVU0pLCAiR1NUX1RZUEVfRklORF9NSU5JTVVNIiwgIm1pbmltdW0ifSwKLSAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX1BPU1NJQkxFKSwgIkdTVF9UWVBFX0ZJTkRfUE9TU0lCTEUiLCAicG9zc2libGUifSwKLSAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX0xJS0VMWSksICJHU1RfVFlQRV9GSU5EX0xJS0VMWSIsICJsaWtlbHkifSwKLSAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX05FQVJMWV9DRVJUQUlOKSwgIkdTVF9UWVBFX0ZJTkRfTkVBUkxZX0NFUlRBSU4iLAotICAgICAgICAibmVhcmx5LWNlcnRhaW4ifSwKLSAgICB7Q19FTlVNIChHU1RfVFlQRV9GSU5EX01BWElNVU0pLCAiR1NUX1RZUEVfRklORF9NQVhJTVVNIiwgIm1heGltdW0ifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSIsIHZhbHVlcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZpZCwgdG1wKTsKLSAgfQotCi0gIHJldHVybiAoR1R5cGUpIGlkOwotfQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dXJpLmgiICovCi1HVHlwZQotZ3N0X3VyaV9lcnJvcl9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1VSSV9FUlJPUl9VTlNVUFBPUlRFRF9QUk9UT0NPTCksCi0gICAgICAgICJHU1RfVVJJX0VSUk9SX1VOU1VQUE9SVEVEX1BST1RPQ09MIiwgInVuc3VwcG9ydGVkLXByb3RvY29sIn0sCi0gICAge0NfRU5VTSAoR1NUX1VSSV9FUlJPUl9CQURfVVJJKSwgIkdTVF9VUklfRVJST1JfQkFEX1VSSSIsICJiYWQtdXJpIn0sCi0gICAge0NfRU5VTSAoR1NUX1VSSV9FUlJPUl9CQURfU1RBVEUpLCAiR1NUX1VSSV9FUlJPUl9CQURfU1RBVEUiLCAiYmFkLXN0YXRlIn0sCi0gICAge0NfRU5VTSAoR1NUX1VSSV9FUlJPUl9CQURfUkVGRVJFTkNFKSwgIkdTVF9VUklfRVJST1JfQkFEX1JFRkVSRU5DRSIsCi0gICAgICAgICJiYWQtcmVmZXJlbmNlIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFVSSUVycm9yIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfdXJpX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtDX0VOVU0gKEdTVF9VUklfVU5LTk9XTiksICJHU1RfVVJJX1VOS05PV04iLCAidW5rbm93biJ9LAotICAgIHtDX0VOVU0gKEdTVF9VUklfU0lOSyksICJHU1RfVVJJX1NJTksiLCAic2luayJ9LAotICAgIHtDX0VOVU0gKEdTVF9VUklfU1JDKSwgIkdTVF9VUklfU1JDIiwgInNyYyJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RVUklUeXBlIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R1dGlscy5oIiAqLwotR1R5cGUKLWdzdF9zZWFyY2hfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGdzaXplIGlkID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRU5VTSAoR1NUX1NFQVJDSF9NT0RFX0VYQUNUKSwgIkdTVF9TRUFSQ0hfTU9ERV9FWEFDVCIsICJleGFjdCJ9LAotICAgIHtDX0VOVU0gKEdTVF9TRUFSQ0hfTU9ERV9CRUZPUkUpLCAiR1NUX1NFQVJDSF9NT0RFX0JFRk9SRSIsICJiZWZvcmUifSwKLSAgICB7Q19FTlVNIChHU1RfU0VBUkNIX01PREVfQUZURVIpLCAiR1NUX1NFQVJDSF9NT0RFX0FGVEVSIiwgImFmdGVyIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmaWQpKSB7Ci0gICAgR1R5cGUgdG1wID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFNlYXJjaE1vZGUiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBhcnNlLmgiICovCi1HVHlwZQotZ3N0X3BhcnNlX2Vycm9yX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgZ3NpemUgaWQgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19FTlVNIChHU1RfUEFSU0VfRVJST1JfU1lOVEFYKSwgIkdTVF9QQVJTRV9FUlJPUl9TWU5UQVgiLCAic3ludGF4In0sCi0gICAge0NfRU5VTSAoR1NUX1BBUlNFX0VSUk9SX05PX1NVQ0hfRUxFTUVOVCksCi0gICAgICAgICJHU1RfUEFSU0VfRVJST1JfTk9fU1VDSF9FTEVNRU5UIiwgIm5vLXN1Y2gtZWxlbWVudCJ9LAotICAgIHtDX0VOVU0gKEdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX1BST1BFUlRZKSwKLSAgICAgICAgIkdTVF9QQVJTRV9FUlJPUl9OT19TVUNIX1BST1BFUlRZIiwgIm5vLXN1Y2gtcHJvcGVydHkifSwKLSAgICB7Q19FTlVNIChHU1RfUEFSU0VfRVJST1JfTElOSyksICJHU1RfUEFSU0VfRVJST1JfTElOSyIsICJsaW5rIn0sCi0gICAge0NfRU5VTSAoR1NUX1BBUlNFX0VSUk9SX0NPVUxEX05PVF9TRVRfUFJPUEVSVFkpLAotICAgICAgICAiR1NUX1BBUlNFX0VSUk9SX0NPVUxEX05PVF9TRVRfUFJPUEVSVFkiLCAiY291bGQtbm90LXNldC1wcm9wZXJ0eSJ9LAotICAgIHtDX0VOVU0gKEdTVF9QQVJTRV9FUlJPUl9FTVBUWV9CSU4pLCAiR1NUX1BBUlNFX0VSUk9SX0VNUFRZX0JJTiIsCi0gICAgICAgICJlbXB0eS1iaW4ifSwKLSAgICB7Q19FTlVNIChHU1RfUEFSU0VfRVJST1JfRU1QVFkpLCAiR1NUX1BBUlNFX0VSUk9SX0VNUFRZIiwgImVtcHR5In0sCi0gICAge0NfRU5VTSAoR1NUX1BBUlNFX0VSUk9SX0RFTEFZRURfTElOSyksICJHU1RfUEFSU0VfRVJST1JfREVMQVlFRF9MSU5LIiwKLSAgICAgICAgImRlbGF5ZWQtbGluayJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmlkKSkgewotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RQYXJzZUVycm9yIiwgdmFsdWVzKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmlkLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgaWQ7Ci19Ci0KLUdUeXBlCi1nc3RfcGFyc2VfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBnc2l6ZSBpZCA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7Q19GTEFHUyAoR1NUX1BBUlNFX0ZMQUdfTk9ORSksICJHU1RfUEFSU0VfRkxBR19OT05FIiwgIm5vbmUifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBUlNFX0ZMQUdfRkFUQUxfRVJST1JTKSwgIkdTVF9QQVJTRV9GTEFHX0ZBVEFMX0VSUk9SUyIsCi0gICAgICAgICJmYXRhbC1lcnJvcnMifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBUlNFX0ZMQUdfTk9fU0lOR0xFX0VMRU1FTlRfQklOUyksCi0gICAgICAgICJHU1RfUEFSU0VfRkxBR19OT19TSU5HTEVfRUxFTUVOVF9CSU5TIiwgIm5vLXNpbmdsZS1lbGVtZW50LWJpbnMifSwKLSAgICB7Q19GTEFHUyAoR1NUX1BBUlNFX0ZMQUdfUExBQ0VfSU5fQklOKSwgIkdTVF9QQVJTRV9GTEFHX1BMQUNFX0lOX0JJTiIsCi0gICAgICAgICJwbGFjZS1pbi1iaW4ifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZpZCkpIHsKLSAgICBHVHlwZSB0bXAgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFBhcnNlRmxhZ3MiLCB2YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmaWQsIHRtcCk7Ci0gIH0KLQotICByZXR1cm4gKEdUeXBlKSBpZDsKLX0KZGlmZiAtLWdpdCBhL3dpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaCBiL3dpbjMyL2NvbW1vbi9nc3RlbnVtdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhkMTZjNS4uMDAwMDAwMAotLS0gYS93aW4zMi9jb21tb24vZ3N0ZW51bXR5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotCi0KLQotI2lmbmRlZiBfX0dTVF9FTlVNX1RZUEVTX0hfXwotI2RlZmluZSBfX0dTVF9FTlVNX1RZUEVTX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0b2JqZWN0LmgiICovCi1HVHlwZSBnc3Rfb2JqZWN0X2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfT0JKRUNUX0ZMQUdTIChnc3Rfb2JqZWN0X2ZsYWdzX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RhbGxvY2F0b3IuaCIgKi8KLUdUeXBlIGdzdF9hbGxvY2F0b3JfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9BTExPQ0FUT1JfRkxBR1MgKGdzdF9hbGxvY2F0b3JfZmxhZ3NfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGJpbi5oIiAqLwotR1R5cGUgZ3N0X2Jpbl9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0JJTl9GTEFHUyAoZ3N0X2Jpbl9mbGFnc19nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0YnVmZmVyLmgiICovCi1HVHlwZSBnc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfQlVGRkVSX0ZMQUdTIChnc3RfYnVmZmVyX2ZsYWdzX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfYnVmZmVyX2NvcHlfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9CVUZGRVJfQ09QWV9GTEFHUyAoZ3N0X2J1ZmZlcl9jb3B5X2ZsYWdzX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RidWZmZXJwb29sLmgiICovCi1HVHlwZSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR1MgKGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2ZsYWdzX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RidXMuaCIgKi8KLUdUeXBlIGdzdF9idXNfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9CVVNfRkxBR1MgKGdzdF9idXNfZmxhZ3NfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9idXNfc3luY19yZXBseV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0JVU19TWU5DX1JFUExZIChnc3RfYnVzX3N5bmNfcmVwbHlfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGNhcHMuaCIgKi8KLUdUeXBlIGdzdF9jYXBzX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfQ0FQU19GTEFHUyAoZ3N0X2NhcHNfZmxhZ3NfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9jYXBzX2ludGVyc2VjdF9tb2RlX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfQ0FQU19JTlRFUlNFQ1RfTU9ERSAoZ3N0X2NhcHNfaW50ZXJzZWN0X21vZGVfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGNsb2NrLmgiICovCi1HVHlwZSBnc3RfY2xvY2tfcmV0dXJuX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfQ0xPQ0tfUkVUVVJOIChnc3RfY2xvY2tfcmV0dXJuX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfY2xvY2tfZW50cnlfdHlwZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0NMT0NLX0VOVFJZX1RZUEUgKGdzdF9jbG9ja19lbnRyeV90eXBlX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfY2xvY2tfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9DTE9DS19GTEFHUyAoZ3N0X2Nsb2NrX2ZsYWdzX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RkZWJ1Z3V0aWxzLmgiICovCi1HVHlwZSBnc3RfZGVidWdfZ3JhcGhfZGV0YWlsc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0RFQlVHX0dSQVBIX0RFVEFJTFMgKGdzdF9kZWJ1Z19ncmFwaF9kZXRhaWxzX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RlbGVtZW50LmgiICovCi1HVHlwZSBnc3Rfc3RhdGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9TVEFURSAoZ3N0X3N0YXRlX2dldF90eXBlKCkpCi1HVHlwZSBnc3Rfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1NUQVRFX0NIQU5HRV9SRVRVUk4gKGdzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF90eXBlKCkpCi1HVHlwZSBnc3Rfc3RhdGVfY2hhbmdlX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfU1RBVEVfQ0hBTkdFIChnc3Rfc3RhdGVfY2hhbmdlX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfZWxlbWVudF9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0VMRU1FTlRfRkxBR1MgKGdzdF9lbGVtZW50X2ZsYWdzX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RlcnJvci5oIiAqLwotR1R5cGUgZ3N0X2NvcmVfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9DT1JFX0VSUk9SIChnc3RfY29yZV9lcnJvcl9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X2xpYnJhcnlfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9MSUJSQVJZX0VSUk9SIChnc3RfbGlicmFyeV9lcnJvcl9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X3Jlc291cmNlX2Vycm9yX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfUkVTT1VSQ0VfRVJST1IgKGdzdF9yZXNvdXJjZV9lcnJvcl9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X3N0cmVhbV9lcnJvcl9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1NUUkVBTV9FUlJPUiAoZ3N0X3N0cmVhbV9lcnJvcl9nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0ZXZlbnQuaCIgKi8KLUdUeXBlIGdzdF9ldmVudF90eXBlX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfRVZFTlRfVFlQRV9GTEFHUyAoZ3N0X2V2ZW50X3R5cGVfZmxhZ3NfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9ldmVudF90eXBlX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfRVZFTlRfVFlQRSAoZ3N0X2V2ZW50X3R5cGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9zdHJlYW1fZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9TVFJFQU1fRkxBR1MgKGdzdF9zdHJlYW1fZmxhZ3NfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9xb3NfdHlwZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1FPU19UWVBFIChnc3RfcW9zX3R5cGVfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdGZvcm1hdC5oIiAqLwotR1R5cGUgZ3N0X2Zvcm1hdF9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0ZPUk1BVCAoZ3N0X2Zvcm1hdF9nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0aW5mby5oIiAqLwotR1R5cGUgZ3N0X2RlYnVnX2xldmVsX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfREVCVUdfTEVWRUwgKGdzdF9kZWJ1Z19sZXZlbF9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X2RlYnVnX2NvbG9yX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfREVCVUdfQ09MT1JfRkxBR1MgKGdzdF9kZWJ1Z19jb2xvcl9mbGFnc19nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X2RlYnVnX2NvbG9yX21vZGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9ERUJVR19DT0xPUl9NT0RFIChnc3RfZGVidWdfY29sb3JfbW9kZV9nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0aXRlcmF0b3IuaCIgKi8KLUdUeXBlIGdzdF9pdGVyYXRvcl9yZXN1bHRfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9JVEVSQVRPUl9SRVNVTFQgKGdzdF9pdGVyYXRvcl9yZXN1bHRfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9pdGVyYXRvcl9pdGVtX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfSVRFUkFUT1JfSVRFTSAoZ3N0X2l0ZXJhdG9yX2l0ZW1fZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdG1lc3NhZ2UuaCIgKi8KLUdUeXBlIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9NRVNTQUdFX1RZUEUgKGdzdF9tZXNzYWdlX3R5cGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9zdHJ1Y3R1cmVfY2hhbmdlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9TVFJVQ1RVUkVfQ0hBTkdFX1RZUEUgKGdzdF9zdHJ1Y3R1cmVfY2hhbmdlX3R5cGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9zdHJlYW1fc3RhdHVzX3R5cGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9TVFJFQU1fU1RBVFVTX1RZUEUgKGdzdF9zdHJlYW1fc3RhdHVzX3R5cGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9wcm9ncmVzc190eXBlX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfUFJPR1JFU1NfVFlQRSAoZ3N0X3Byb2dyZXNzX3R5cGVfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdG1ldGEuaCIgKi8KLUdUeXBlIGdzdF9tZXRhX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfTUVUQV9GTEFHUyAoZ3N0X21ldGFfZmxhZ3NfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdG1lbW9yeS5oIiAqLwotR1R5cGUgZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX01FTU9SWV9GTEFHUyAoZ3N0X21lbW9yeV9mbGFnc19nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X21hcF9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX01BUF9GTEFHUyAoZ3N0X21hcF9mbGFnc19nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0bWluaW9iamVjdC5oIiAqLwotR1R5cGUgZ3N0X21pbmlfb2JqZWN0X2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfTUlOSV9PQkpFQ1RfRkxBR1MgKGdzdF9taW5pX29iamVjdF9mbGFnc19nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X2xvY2tfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9MT0NLX0ZMQUdTIChnc3RfbG9ja19mbGFnc19nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cGFkLmgiICovCi1HVHlwZSBnc3RfcGFkX2RpcmVjdGlvbl9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1BBRF9ESVJFQ1RJT04gKGdzdF9wYWRfZGlyZWN0aW9uX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfcGFkX21vZGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9QQURfTU9ERSAoZ3N0X3BhZF9tb2RlX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfcGFkX2xpbmtfcmV0dXJuX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfUEFEX0xJTktfUkVUVVJOIChnc3RfcGFkX2xpbmtfcmV0dXJuX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfZmxvd19yZXR1cm5fZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9GTE9XX1JFVFVSTiAoZ3N0X2Zsb3dfcmV0dXJuX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfcGFkX2xpbmtfY2hlY2tfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9QQURfTElOS19DSEVDSyAoZ3N0X3BhZF9saW5rX2NoZWNrX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfcGFkX3Byb2JlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9QQURfUFJPQkVfVFlQRSAoZ3N0X3BhZF9wcm9iZV90eXBlX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfcGFkX3Byb2JlX3JldHVybl9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1BBRF9QUk9CRV9SRVRVUk4gKGdzdF9wYWRfcHJvYmVfcmV0dXJuX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfcGFkX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfUEFEX0ZMQUdTIChnc3RfcGFkX2ZsYWdzX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3RwYWR0ZW1wbGF0ZS5oIiAqLwotR1R5cGUgZ3N0X3BhZF9wcmVzZW5jZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1BBRF9QUkVTRU5DRSAoZ3N0X3BhZF9wcmVzZW5jZV9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X3BhZF90ZW1wbGF0ZV9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1BBRF9URU1QTEFURV9GTEFHUyAoZ3N0X3BhZF90ZW1wbGF0ZV9mbGFnc19nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cGlwZWxpbmUuaCIgKi8KLUdUeXBlIGdzdF9waXBlbGluZV9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1BJUEVMSU5FX0ZMQUdTIChnc3RfcGlwZWxpbmVfZmxhZ3NfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBsdWdpbi5oIiAqLwotR1R5cGUgZ3N0X3BsdWdpbl9lcnJvcl9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1BMVUdJTl9FUlJPUiAoZ3N0X3BsdWdpbl9lcnJvcl9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X3BsdWdpbl9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1BMVUdJTl9GTEFHUyAoZ3N0X3BsdWdpbl9mbGFnc19nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X3BsdWdpbl9kZXBlbmRlbmN5X2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfUExVR0lOX0RFUEVOREVOQ1lfRkxBR1MgKGdzdF9wbHVnaW5fZGVwZW5kZW5jeV9mbGFnc19nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cGx1Z2luZmVhdHVyZS5oIiAqLwotR1R5cGUgZ3N0X3JhbmtfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9SQU5LIChnc3RfcmFua19nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0cXVlcnkuaCIgKi8KLUdUeXBlIGdzdF9xdWVyeV90eXBlX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfUVVFUllfVFlQRV9GTEFHUyAoZ3N0X3F1ZXJ5X3R5cGVfZmxhZ3NfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9xdWVyeV90eXBlX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfUVVFUllfVFlQRSAoZ3N0X3F1ZXJ5X3R5cGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9idWZmZXJpbmdfbW9kZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0JVRkZFUklOR19NT0RFIChnc3RfYnVmZmVyaW5nX21vZGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9zY2hlZHVsaW5nX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfU0NIRURVTElOR19GTEFHUyAoZ3N0X3NjaGVkdWxpbmdfZmxhZ3NfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHNlZ21lbnQuaCIgKi8KLUdUeXBlIGdzdF9zZWVrX3R5cGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9TRUVLX1RZUEUgKGdzdF9zZWVrX3R5cGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9zZWVrX2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfU0VFS19GTEFHUyAoZ3N0X3NlZWtfZmxhZ3NfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF9zZWdtZW50X2ZsYWdzX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfU0VHTUVOVF9GTEFHUyAoZ3N0X3NlZ21lbnRfZmxhZ3NfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHN0cmVhbXMuaCIgKi8KLUdUeXBlIGdzdF9zdHJlYW1fdHlwZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1NUUkVBTV9UWVBFIChnc3Rfc3RyZWFtX3R5cGVfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHN5c3RlbWNsb2NrLmgiICovCi1HVHlwZSBnc3RfY2xvY2tfdHlwZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX0NMT0NLX1RZUEUgKGdzdF9jbG9ja190eXBlX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R0YWdsaXN0LmgiICovCi1HVHlwZSBnc3RfdGFnX21lcmdlX21vZGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9UQUdfTUVSR0VfTU9ERSAoZ3N0X3RhZ19tZXJnZV9tb2RlX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfdGFnX2ZsYWdfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9UQUdfRkxBRyAoZ3N0X3RhZ19mbGFnX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfdGFnX3Njb3BlX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfVEFHX1NDT1BFIChnc3RfdGFnX3Njb3BlX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R0YXNrLmgiICovCi1HVHlwZSBnc3RfdGFza19zdGF0ZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1RBU0tfU1RBVEUgKGdzdF90YXNrX3N0YXRlX2dldF90eXBlKCkpCi0KLS8qIGVudW1lcmF0aW9ucyBmcm9tICJnc3R0b2MuaCIgKi8KLUdUeXBlIGdzdF90b2Nfc2NvcGVfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9UT0NfU0NPUEUgKGdzdF90b2Nfc2NvcGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF90b2NfZW50cnlfdHlwZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1RPQ19FTlRSWV9UWVBFIChnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X3R5cGUoKSkKLUdUeXBlIGdzdF90b2NfbG9vcF90eXBlX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfVE9DX0xPT1BfVFlQRSAoZ3N0X3RvY19sb29wX3R5cGVfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHRyYWNlcnJlY29yZC5oIiAqLwotR1R5cGUgZ3N0X3RyYWNlcl92YWx1ZV9zY29wZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9TQ09QRSAoZ3N0X3RyYWNlcl92YWx1ZV9zY29wZV9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X3RyYWNlcl92YWx1ZV9mbGFnc19nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1RSQUNFUl9WQUxVRV9GTEFHUyAoZ3N0X3RyYWNlcl92YWx1ZV9mbGFnc19nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dHlwZWZpbmQuaCIgKi8KLUdUeXBlIGdzdF90eXBlX2ZpbmRfcHJvYmFiaWxpdHlfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9UWVBFX0ZJTkRfUFJPQkFCSUxJVFkgKGdzdF90eXBlX2ZpbmRfcHJvYmFiaWxpdHlfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHVyaS5oIiAqLwotR1R5cGUgZ3N0X3VyaV9lcnJvcl9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1VSSV9FUlJPUiAoZ3N0X3VyaV9lcnJvcl9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X3VyaV90eXBlX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgR1NUX1RZUEVfVVJJX1RZUEUgKGdzdF91cmlfdHlwZV9nZXRfdHlwZSgpKQotCi0vKiBlbnVtZXJhdGlvbnMgZnJvbSAiZ3N0dXRpbHMuaCIgKi8KLUdUeXBlIGdzdF9zZWFyY2hfbW9kZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIEdTVF9UWVBFX1NFQVJDSF9NT0RFIChnc3Rfc2VhcmNoX21vZGVfZ2V0X3R5cGUoKSkKLQotLyogZW51bWVyYXRpb25zIGZyb20gImdzdHBhcnNlLmgiICovCi1HVHlwZSBnc3RfcGFyc2VfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9QQVJTRV9FUlJPUiAoZ3N0X3BhcnNlX2Vycm9yX2dldF90eXBlKCkpCi1HVHlwZSBnc3RfcGFyc2VfZmxhZ3NfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBHU1RfVFlQRV9QQVJTRV9GTEFHUyAoZ3N0X3BhcnNlX2ZsYWdzX2dldF90eXBlKCkpCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRU5VTV9UWVBFU19IX18gKi8KLQotCi0KZGlmZiAtLWdpdCBhL3dpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmggYi93aW4zMi9jb21tb24vZ3N0dmVyc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2MxZDIyLi4wMDAwMDAwCi0tLSBhL3dpbjMyL2NvbW1vbi9nc3R2ZXJzaW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKgotICogZ3N0dmVyc2lvbi5oOiBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBHU3RyZWFtZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1ZFUlNJT05fSF9fCi0jZGVmaW5lIF9fR1NUX1ZFUlNJT05fSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLS8qKgotICogU0VDVElPTjpnc3R2ZXJzaW9uCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEdTdHJlYW1lciB2ZXJzaW9uIG1hY3Jvcy4KLSAqCi0gKiBVc2UgdGhlIEdTVF9WRVJTSU9OXyogbWFjcm9zIGUuZy4gd2hlbiBkZWZpbmluZyBvd24gcGx1Z2lucy4gVGhlIEdTdHJlYW1lcgotICogcnVudGltZSBjaGVja3MgaWYgdGhlc2UgcGx1Z2luIGFuZCBjb3JlIHZlcnNpb24gbWF0Y2ggYW5kIHJlZnVzZXMgdG8gdXNlIGEKLSAqIHBsdWdpbiBjb21waWxlZCBhZ2FpbnN0IGEgZGlmZmVyZW50IHZlcnNpb24gb2YgR1N0cmVhbWVyLgotICogWW91IGNhbiBhbHNvIHVzZSB0aGUgbWFjcm9zIHRvIGtlZXAgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIGluZm9ybWF0aW9uIGluCi0gKiB5b3VyIGFwcGxpY2F0aW9uLgotICoKLSAqIFVzZSB0aGUgZ3N0X3ZlcnNpb24oKSBmdW5jdGlvbiBpZiB5b3Ugd2FudCB0byBrbm93IHdoaWNoIHZlcnNpb24gb2YKLSAqIEdTdHJlYW1lciB5b3UgYXJlIGN1cnJlbnRseSBsaW5rZWQgYWdhaW5zdC4KLSAqCi0gKiBUaGUgdmVyc2lvbiBtYWNyb3MgZ2V0IGRlZmluZWQgYnkgaW5jbHVkaW5nICJnc3QvZ3N0LmgiLgotICovCi0KLUdfQkVHSU5fREVDTFMKLQotLyoqCi0gKiBHU1RfVkVSU0lPTl9NQUpPUjoKLSAqCi0gKiBUaGUgbWFqb3IgdmVyc2lvbiBvZiBHU3RyZWFtZXIgYXQgY29tcGlsZSB0aW1lOgotICovCi0jZGVmaW5lIEdTVF9WRVJTSU9OX01BSk9SICgxKQotLyoqCi0gKiBHU1RfVkVSU0lPTl9NSU5PUjoKLSAqCi0gKiBUaGUgbWlub3IgdmVyc2lvbiBvZiBHU3RyZWFtZXIgYXQgY29tcGlsZSB0aW1lOgotICovCi0jZGVmaW5lIEdTVF9WRVJTSU9OX01JTk9SICgxMCkKLS8qKgotICogR1NUX1ZFUlNJT05fTUlDUk86Ci0gKgotICogVGhlIG1pY3JvIHZlcnNpb24gb2YgR1N0cmVhbWVyIGF0IGNvbXBpbGUgdGltZToKLSAqLwotI2RlZmluZSBHU1RfVkVSU0lPTl9NSUNSTyAoNCkKLS8qKgotICogR1NUX1ZFUlNJT05fTkFOTzoKLSAqCi0gKiBUaGUgbmFubyB2ZXJzaW9uIG9mIEdTdHJlYW1lciBhdCBjb21waWxlIHRpbWU6Ci0gKiBBY3R1YWwgcmVsZWFzZXMgaGF2ZSAwLCBHSVQgdmVyc2lvbnMgaGF2ZSAxLCBwcmVyZWxlYXNlIHZlcnNpb25zIGhhdmUgMi0uLi4KLSAqLwotI2RlZmluZSBHU1RfVkVSU0lPTl9OQU5PICgwKQotCi0vKioKLSAqIEdTVF9DSEVDS19WRVJTSU9OOgotICogQG1ham9yOiBhIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYWpvciB2ZXJzaW9uCi0gKiBAbWlub3I6IGEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1pbm9yIHZlcnNpb24KLSAqIEBtaWNybzogYSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbWljcm8gdmVyc2lvbgotICoKLSAqIENoZWNrIHdoZXRoZXIgYSBHU3RyZWFtZXIgdmVyc2lvbiBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4KLSAqIG1ham9yLm1pbm9yLm1pY3JvIGlzIHByZXNlbnQuCi0gKi8KLSNkZWZpbmUJR1NUX0NIRUNLX1ZFUlNJT04obWFqb3IsbWlub3IsbWljcm8pCVwKLSAgICAoR1NUX1ZFUlNJT05fTUFKT1IgPiAobWFqb3IpIHx8IFwKLSAgICAgKEdTVF9WRVJTSU9OX01BSk9SID09IChtYWpvcikgJiYgR1NUX1ZFUlNJT05fTUlOT1IgPiAobWlub3IpKSB8fCBcCi0gICAgIChHU1RfVkVSU0lPTl9NQUpPUiA9PSAobWFqb3IpICYmIEdTVF9WRVJTSU9OX01JTk9SID09IChtaW5vcikgJiYgXAotICAgICAgR1NUX1ZFUlNJT05fTUlDUk8gPj0gKG1pY3JvKSkgfHwgXAotICAgICAoR1NUX1ZFUlNJT05fTUFKT1IgPT0gKG1ham9yKSAmJiBHU1RfVkVSU0lPTl9NSU5PUiA9PSAobWlub3IpICYmIFwKLSAgICAgIEdTVF9WRVJTSU9OX01JQ1JPICsgMSA9PSAobWljcm8pICYmIEdTVF9WRVJTSU9OX05BTk8gPiAwKSkKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1ZFUlNJT05fSF9fICovCmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWYgYi93aW4zMi9jb21tb24vbGliZ3N0YmFzZS5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4M2YxYWYuLjAwMDAwMDAKLS0tIGEvd2luMzIvY29tbW9uL2xpYmdzdGJhc2UuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMzA4ICswLDAgQEAKLUVYUE9SVFMKLQlnc3RfYWRhcHRlcl9hdmFpbGFibGUKLQlnc3RfYWRhcHRlcl9hdmFpbGFibGVfZmFzdAotCWdzdF9hZGFwdGVyX2NsZWFyCi0JZ3N0X2FkYXB0ZXJfY29weQotCWdzdF9hZGFwdGVyX2NvcHlfYnl0ZXMKLQlnc3RfYWRhcHRlcl9kaXN0YW5jZV9mcm9tX2Rpc2NvbnQKLQlnc3RfYWRhcHRlcl9kdHNfYXRfZGlzY29udAotCWdzdF9hZGFwdGVyX2ZsdXNoCi0JZ3N0X2FkYXB0ZXJfZ2V0X2J1ZmZlcgotCWdzdF9hZGFwdGVyX2dldF9idWZmZXJfZmFzdAotCWdzdF9hZGFwdGVyX2dldF9idWZmZXJfbGlzdAotCWdzdF9hZGFwdGVyX2dldF9saXN0Ci0JZ3N0X2FkYXB0ZXJfZ2V0X3R5cGUKLQlnc3RfYWRhcHRlcl9tYXAKLQlnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIKLQlnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlawotCWdzdF9hZGFwdGVyX25ldwotCWdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250Ci0JZ3N0X2FkYXB0ZXJfcHJldl9kdHMKLQlnc3RfYWRhcHRlcl9wcmV2X2R0c19hdF9vZmZzZXQKLQlnc3RfYWRhcHRlcl9wcmV2X29mZnNldAotCWdzdF9hZGFwdGVyX3ByZXZfcHRzCi0JZ3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0Ci0JZ3N0X2FkYXB0ZXJfcHRzX2F0X2Rpc2NvbnQKLQlnc3RfYWRhcHRlcl9wdXNoCi0JZ3N0X2FkYXB0ZXJfdGFrZQotCWdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyCi0JZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdAotCWdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2xpc3QKLQlnc3RfYWRhcHRlcl90YWtlX2xpc3QKLQlnc3RfYWRhcHRlcl91bm1hcAotCWdzdF9iYXNlX3BhcnNlX2FkZF9pbmRleF9lbnRyeQotCWdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdAotCWdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZQotCWdzdF9iYXNlX3BhcnNlX2ZyYW1lX2ZyZWUKLQlnc3RfYmFzZV9wYXJzZV9mcmFtZV9nZXRfdHlwZQotCWdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQKLQlnc3RfYmFzZV9wYXJzZV9mcmFtZV9uZXcKLQlnc3RfYmFzZV9wYXJzZV9nZXRfdHlwZQotCWdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MKLQlnc3RfYmFzZV9wYXJzZV9wdXNoX2ZyYW1lCi0JZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZQotCWdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbgotCWdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlCi0JZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbwotCWdzdF9iYXNlX3BhcnNlX3NldF9pbmZlcl90cwotCWdzdF9iYXNlX3BhcnNlX3NldF9sYXRlbmN5Ci0JZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplCi0JZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoCi0JZ3N0X2Jhc2VfcGFyc2Vfc2V0X3B0c19pbnRlcnBvbGF0aW9uCi0JZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlCi0JZ3N0X2Jhc2VfcGFyc2Vfc2V0X3RzX2F0X29mZnNldAotCWdzdF9iYXNlX3NpbmtfZG9fcHJlcm9sbAotCWdzdF9iYXNlX3NpbmtfZ2V0X2Jsb2Nrc2l6ZQotCWdzdF9iYXNlX3NpbmtfZ2V0X2xhc3Rfc2FtcGxlCi0JZ3N0X2Jhc2Vfc2lua19nZXRfbGF0ZW5jeQotCWdzdF9iYXNlX3NpbmtfZ2V0X21heF9iaXRyYXRlCi0JZ3N0X2Jhc2Vfc2lua19nZXRfbWF4X2xhdGVuZXNzCi0JZ3N0X2Jhc2Vfc2lua19nZXRfcmVuZGVyX2RlbGF5Ci0JZ3N0X2Jhc2Vfc2lua19nZXRfc3luYwotCWdzdF9iYXNlX3NpbmtfZ2V0X3Rocm90dGxlX3RpbWUKLQlnc3RfYmFzZV9zaW5rX2dldF90c19vZmZzZXQKLQlnc3RfYmFzZV9zaW5rX2dldF90eXBlCi0JZ3N0X2Jhc2Vfc2lua19pc19hc3luY19lbmFibGVkCi0JZ3N0X2Jhc2Vfc2lua19pc19sYXN0X3NhbXBsZV9lbmFibGVkCi0JZ3N0X2Jhc2Vfc2lua19pc19xb3NfZW5hYmxlZAotCWdzdF9iYXNlX3NpbmtfcXVlcnlfbGF0ZW5jeQotCWdzdF9iYXNlX3Npbmtfc2V0X2FzeW5jX2VuYWJsZWQKLQlnc3RfYmFzZV9zaW5rX3NldF9ibG9ja3NpemUKLQlnc3RfYmFzZV9zaW5rX3NldF9sYXN0X3NhbXBsZV9lbmFibGVkCi0JZ3N0X2Jhc2Vfc2lua19zZXRfbWF4X2JpdHJhdGUKLQlnc3RfYmFzZV9zaW5rX3NldF9tYXhfbGF0ZW5lc3MKLQlnc3RfYmFzZV9zaW5rX3NldF9xb3NfZW5hYmxlZAotCWdzdF9iYXNlX3Npbmtfc2V0X3JlbmRlcl9kZWxheQotCWdzdF9iYXNlX3Npbmtfc2V0X3N5bmMKLQlnc3RfYmFzZV9zaW5rX3NldF90aHJvdHRsZV90aW1lCi0JZ3N0X2Jhc2Vfc2lua19zZXRfdHNfb2Zmc2V0Ci0JZ3N0X2Jhc2Vfc2lua193YWl0Ci0JZ3N0X2Jhc2Vfc2lua193YWl0X2Nsb2NrCi0JZ3N0X2Jhc2Vfc2lua193YWl0X3ByZXJvbGwKLQlnc3RfYmFzZV9zcmNfZ2V0X2FsbG9jYXRvcgotCWdzdF9iYXNlX3NyY19nZXRfYmxvY2tzaXplCi0JZ3N0X2Jhc2Vfc3JjX2dldF9idWZmZXJfcG9vbAotCWdzdF9iYXNlX3NyY19nZXRfZG9fdGltZXN0YW1wCi0JZ3N0X2Jhc2Vfc3JjX2dldF90eXBlCi0JZ3N0X2Jhc2Vfc3JjX2lzX2FzeW5jCi0JZ3N0X2Jhc2Vfc3JjX2lzX2xpdmUKLQlnc3RfYmFzZV9zcmNfbmV3X3NlYW1sZXNzX3NlZ21lbnQKLQlnc3RfYmFzZV9zcmNfcXVlcnlfbGF0ZW5jeQotCWdzdF9iYXNlX3NyY19zZXRfYXN5bmMKLQlnc3RfYmFzZV9zcmNfc2V0X2F1dG9tYXRpY19lb3MKLQlnc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZQotCWdzdF9iYXNlX3NyY19zZXRfY2FwcwotCWdzdF9iYXNlX3NyY19zZXRfZG9fdGltZXN0YW1wCi0JZ3N0X2Jhc2Vfc3JjX3NldF9keW5hbWljX3NpemUKLQlnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdAotCWdzdF9iYXNlX3NyY19zZXRfbGl2ZQotCWdzdF9iYXNlX3NyY19zdGFydF9jb21wbGV0ZQotCWdzdF9iYXNlX3NyY19zdGFydF93YWl0Ci0JZ3N0X2Jhc2Vfc3JjX3dhaXRfcGxheWluZwotCWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYWxsb2NhdG9yCi0JZ3N0X2Jhc2VfdHJhbnNmb3JtX2dldF9idWZmZXJfcG9vbAotCWdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfdHlwZQotCWdzdF9iYXNlX3RyYW5zZm9ybV9pc19pbl9wbGFjZQotCWdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaAotCWdzdF9iYXNlX3RyYW5zZm9ybV9pc19xb3NfZW5hYmxlZAotCWdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zaW5rCi0JZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3NyYwotCWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlCi0JZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZQotCWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2gKLQlnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3ByZWZlcl9wYXNzdGhyb3VnaAotCWdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQKLQlnc3RfYmFzZV90cmFuc2Zvcm1fdXBkYXRlX3FvcwotCWdzdF9iYXNlX3RyYW5zZm9ybV91cGRhdGVfc3JjX2NhcHMKLQlnc3RfYml0X3JlYWRlcl9mcmVlCi0JZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2Ci0JZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyCi0JZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0Ci0JZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDgKLQlnc3RfYml0X3JlYWRlcl9nZXRfcG9zCi0JZ3N0X2JpdF9yZWFkZXJfZ2V0X3JlbWFpbmluZwotCWdzdF9iaXRfcmVhZGVyX2dldF9zaXplCi0JZ3N0X2JpdF9yZWFkZXJfaW5pdAotCWdzdF9iaXRfcmVhZGVyX25ldwotCWdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTYKLQlnc3RfYml0X3JlYWRlcl9wZWVrX2JpdHNfdWludDMyCi0JZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQ2NAotCWdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OAotCWdzdF9iaXRfcmVhZGVyX3NldF9wb3MKLQlnc3RfYml0X3JlYWRlcl9za2lwCi0JZ3N0X2JpdF9yZWFkZXJfc2tpcF90b19ieXRlCi0JZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhCi0JZ3N0X2J5dGVfcmVhZGVyX2R1cF9zdHJpbmdfdXRmMTYKLQlnc3RfYnl0ZV9yZWFkZXJfZHVwX3N0cmluZ191dGYzMgotCWdzdF9ieXRlX3JlYWRlcl9kdXBfc3RyaW5nX3V0ZjgKLQlnc3RfYnl0ZV9yZWFkZXJfZnJlZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9iZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQzMl9sZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9iZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfZmxvYXQ2NF9sZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmUKLQlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDE2X2xlCi0JZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQyNF9iZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MjRfbGUKLQlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlCi0JZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9sZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmUKLQlnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDY0X2xlCi0JZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4Ci0JZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MKLQlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZwotCWdzdF9ieXRlX3JlYWRlcl9nZXRfc2l6ZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfc3RyaW5nX3V0ZjgKLQlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXIKLQlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlCi0JZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmUKLQlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlCi0JZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGUKLQlnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZQotCWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2xlCi0JZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OAotCWdzdF9ieXRlX3JlYWRlcl9pbml0Ci0JZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMgotCWdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlawotCWdzdF9ieXRlX3JlYWRlcl9uZXcKLQlnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQzMl9iZQotCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2Zsb2F0MzJfbGUKLQlnc3RfYnl0ZV9yZWFkZXJfcGVla19mbG9hdDY0X2JlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZmxvYXQ2NF9sZQotCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDE2X2JlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MTZfbGUKLQlnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQyNF9iZQotCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDI0X2xlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50MzJfYmUKLQlnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQzMl9sZQotCWdzdF9ieXRlX3JlYWRlcl9wZWVrX2ludDY0X2JlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfaW50NjRfbGUKLQlnc3RfYnl0ZV9yZWFkZXJfcGVla19pbnQ4Ci0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfc3RyaW5nX3V0ZjgKLQlnc3RfYnl0ZV9yZWFkZXJfcGVla19zdWJfcmVhZGVyCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2JlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDE2X2xlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2JlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDI0X2xlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2xlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2xlCi0JZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDgKLQlnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcwotCWdzdF9ieXRlX3JlYWRlcl9za2lwCi0JZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjE2Ci0JZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjMyCi0JZ3N0X2J5dGVfcmVhZGVyX3NraXBfc3RyaW5nX3V0ZjgKLQlnc3RfYnl0ZV93cml0ZXJfZW5zdXJlX2ZyZWVfc3BhY2UKLQlnc3RfYnl0ZV93cml0ZXJfZmlsbAotCWdzdF9ieXRlX3dyaXRlcl9mcmVlCi0JZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXIKLQlnc3RfYnl0ZV93cml0ZXJfZnJlZV9hbmRfZ2V0X2RhdGEKLQlnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZwotCWdzdF9ieXRlX3dyaXRlcl9pbml0Ci0JZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhCi0JZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplCi0JZ3N0X2J5dGVfd3JpdGVyX25ldwotCWdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9kYXRhCi0JZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfYmUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0MzJfbGUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfYmUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X2Zsb2F0NjRfbGUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDE2X2JlCi0JZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQxNl9sZQotCWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MjRfYmUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDI0X2xlCi0JZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQzMl9iZQotCWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50MzJfbGUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X2ludDY0X2JlCi0JZ3N0X2J5dGVfd3JpdGVyX3B1dF9pbnQ2NF9sZQotCWdzdF9ieXRlX3dyaXRlcl9wdXRfaW50OAotCWdzdF9ieXRlX3dyaXRlcl9wdXRfc3RyaW5nX3V0ZjE2Ci0JZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmdfdXRmMzIKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZ191dGY4Ci0JZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZQotCWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDI0X2JlCi0JZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MjRfbGUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZQotCWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlCi0JZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50NjRfYmUKLQlnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ2NF9sZQotCWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDgKLQlnc3RfYnl0ZV93cml0ZXJfcmVzZXQKLQlnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIKLQlnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9kYXRhCi0JZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkCi0JZ3N0X2NvbGxlY3RfcGFkc19hdmFpbGFibGUKLQlnc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lCi0JZ3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0Ci0JZ3N0X2NvbGxlY3RfcGFkc19mbHVzaAotCWdzdF9jb2xsZWN0X3BhZHNfZ2V0X3R5cGUKLQlnc3RfY29sbGVjdF9wYWRzX25ldwotCWdzdF9jb2xsZWN0X3BhZHNfcGVlawotCWdzdF9jb2xsZWN0X3BhZHNfcG9wCi0JZ3N0X2NvbGxlY3RfcGFkc19xdWVyeV9kZWZhdWx0Ci0JZ3N0X2NvbGxlY3RfcGFkc19yZWFkX2J1ZmZlcgotCWdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZAotCWdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbgotCWdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24KLQlnc3RfY29sbGVjdF9wYWRzX3NldF9jb21wYXJlX2Z1bmN0aW9uCi0JZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24KLQlnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaF9mdW5jdGlvbgotCWdzdF9jb2xsZWN0X3BhZHNfc2V0X2ZsdXNoaW5nCi0JZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24KLQlnc3RfY29sbGVjdF9wYWRzX3NldF9xdWVyeV9mdW5jdGlvbgotCWdzdF9jb2xsZWN0X3BhZHNfc2V0X3dhaXRpbmcKLQlnc3RfY29sbGVjdF9wYWRzX3NyY19ldmVudF9kZWZhdWx0Ci0JZ3N0X2NvbGxlY3RfcGFkc19zdGFydAotCWdzdF9jb2xsZWN0X3BhZHNfc3RvcAotCWdzdF9jb2xsZWN0X3BhZHNfdGFrZV9idWZmZXIKLQlnc3RfZGF0YV9xdWV1ZV9kcm9wX2hlYWQKLQlnc3RfZGF0YV9xdWV1ZV9mbHVzaAotCWdzdF9kYXRhX3F1ZXVlX2dldF9sZXZlbAotCWdzdF9kYXRhX3F1ZXVlX2dldF90eXBlCi0JZ3N0X2RhdGFfcXVldWVfaXNfZW1wdHkKLQlnc3RfZGF0YV9xdWV1ZV9pc19mdWxsCi0JZ3N0X2RhdGFfcXVldWVfbGltaXRzX2NoYW5nZWQKLQlnc3RfZGF0YV9xdWV1ZV9uZXcKLQlnc3RfZGF0YV9xdWV1ZV9wZWVrCi0JZ3N0X2RhdGFfcXVldWVfcG9wCi0JZ3N0X2RhdGFfcXVldWVfcHVzaAotCWdzdF9kYXRhX3F1ZXVlX3B1c2hfZm9yY2UKLQlnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcKLQlnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkCi0JZ3N0X2Zsb3dfY29tYmluZXJfY2xlYXIKLQlnc3RfZmxvd19jb21iaW5lcl9mcmVlCi0JZ3N0X2Zsb3dfY29tYmluZXJfZ2V0X3R5cGUKLQlnc3RfZmxvd19jb21iaW5lcl9uZXcKLQlnc3RfZmxvd19jb21iaW5lcl9yZW1vdmVfcGFkCi0JZ3N0X2Zsb3dfY29tYmluZXJfcmVzZXQKLQlnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfZmxvdwotCWdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdwotCWdzdF9wdXNoX3NyY19nZXRfdHlwZQotCWdzdF9xdWV1ZV9hcnJheV9kcm9wX2VsZW1lbnQKLQlnc3RfcXVldWVfYXJyYXlfZHJvcF9zdHJ1Y3QKLQlnc3RfcXVldWVfYXJyYXlfZmluZAotCWdzdF9xdWV1ZV9hcnJheV9mcmVlCi0JZ3N0X3F1ZXVlX2FycmF5X2dldF9sZW5ndGgKLQlnc3RfcXVldWVfYXJyYXlfaXNfZW1wdHkKLQlnc3RfcXVldWVfYXJyYXlfbmV3Ci0JZ3N0X3F1ZXVlX2FycmF5X25ld19mb3Jfc3RydWN0Ci0JZ3N0X3F1ZXVlX2FycmF5X3BlZWtfaGVhZAotCWdzdF9xdWV1ZV9hcnJheV9wZWVrX2hlYWRfc3RydWN0Ci0JZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkCi0JZ3N0X3F1ZXVlX2FycmF5X3BvcF9oZWFkX3N0cnVjdAotCWdzdF9xdWV1ZV9hcnJheV9wdXNoX3RhaWwKLQlnc3RfcXVldWVfYXJyYXlfcHVzaF90YWlsX3N0cnVjdAotCWdzdF90eXBlX2ZpbmRfaGVscGVyCi0JZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2J1ZmZlcgotCWdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9kYXRhCi0JZ3N0X3R5cGVfZmluZF9oZWxwZXJfZm9yX2V4dGVuc2lvbgotCWdzdF90eXBlX2ZpbmRfaGVscGVyX2dldF9yYW5nZQpkaWZmIC0tZ2l0IGEvd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmIGIvd2luMzIvY29tbW9uL2xpYmdzdGNvbnRyb2xsZXIuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTM5Nzc3Li4wMDAwMDAwCi0tLSBhL3dpbjMyL2NvbW1vbi9saWJnc3Rjb250cm9sbGVyLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLUVYUE9SVFMKLQlnc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfZ2V0X3R5cGUKLQlnc3RfYXJnYl9jb250cm9sX2JpbmRpbmdfbmV3Ci0JZ3N0X2NvbnRyb2xfcG9pbnRfZ2V0X3R5cGUKLQlnc3RfZGlyZWN0X2NvbnRyb2xfYmluZGluZ19nZXRfdHlwZQotCWdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ldwotCWdzdF9kaXJlY3RfY29udHJvbF9iaW5kaW5nX25ld19hYnNvbHV0ZQotCWdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX2dldF90eXBlCi0JZ3N0X2ludGVycG9sYXRpb25fY29udHJvbF9zb3VyY2VfbmV3Ci0JZ3N0X2ludGVycG9sYXRpb25fbW9kZV9nZXRfdHlwZQotCWdzdF9sZm9fY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKLQlnc3RfbGZvX2NvbnRyb2xfc291cmNlX25ldwotCWdzdF9sZm9fd2F2ZWZvcm1fZ2V0X3R5cGUKLQlnc3RfdGltZWRfdmFsdWVfY29udHJvbF9pbnZhbGlkYXRlX2NhY2hlCi0JZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2ZpbmRfY29udHJvbF9wb2ludF9pdGVyCi0JZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF9hbGwKLQlnc3RfdGltZWRfdmFsdWVfY29udHJvbF9zb3VyY2VfZ2V0X2NvdW50Ci0JZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX2dldF90eXBlCi0JZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldAotCWdzdF90aW1lZF92YWx1ZV9jb250cm9sX3NvdXJjZV9zZXRfZnJvbV9saXN0Ci0JZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0Ci0JZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3Vuc2V0X2FsbAotCWdzdF90cmlnZ2VyX2NvbnRyb2xfc291cmNlX2dldF90eXBlCi0JZ3N0X3RyaWdnZXJfY29udHJvbF9zb3VyY2VfbmV3CmRpZmYgLS1naXQgYS93aW4zMi9jb21tb24vbGliZ3N0bmV0LmRlZiBiL3dpbjMyL2NvbW1vbi9saWJnc3RuZXQuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmRhYjFlLi4wMDAwMDAwCi0tLSBhL3dpbjMyL2NvbW1vbi9saWJnc3RuZXQuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotRVhQT1JUUwotCWdzdF9idWZmZXJfYWRkX25ldF9hZGRyZXNzX21ldGEKLQlnc3RfYnVmZmVyX2FkZF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGEKLQlnc3RfYnVmZmVyX2dldF9uZXRfYWRkcmVzc19tZXRhCi0JZ3N0X25ldF9hZGRyZXNzX21ldGFfYXBpX2dldF90eXBlCi0JZ3N0X25ldF9hZGRyZXNzX21ldGFfZ2V0X2luZm8KLQlnc3RfbmV0X2NsaWVudF9jbG9ja19nZXRfdHlwZQotCWdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldwotCWdzdF9uZXRfY29udHJvbF9tZXNzYWdlX21ldGFfYXBpX2dldF90eXBlCi0JZ3N0X25ldF9jb250cm9sX21lc3NhZ2VfbWV0YV9nZXRfaW5mbwotCWdzdF9uZXRfdGltZV9wYWNrZXRfY29weQotCWdzdF9uZXRfdGltZV9wYWNrZXRfZnJlZQotCWdzdF9uZXRfdGltZV9wYWNrZXRfZ2V0X3R5cGUKLQlnc3RfbmV0X3RpbWVfcGFja2V0X25ldwotCWdzdF9uZXRfdGltZV9wYWNrZXRfcmVjZWl2ZQotCWdzdF9uZXRfdGltZV9wYWNrZXRfc2VuZAotCWdzdF9uZXRfdGltZV9wYWNrZXRfc2VyaWFsaXplCi0JZ3N0X25ldF90aW1lX3Byb3ZpZGVyX2dldF90eXBlCi0JZ3N0X25ldF90aW1lX3Byb3ZpZGVyX25ldwotCWdzdF9udHBfY2xvY2tfZ2V0X3R5cGUKLQlnc3RfbnRwX2Nsb2NrX25ldwotCWdzdF9wdHBfY2xvY2tfZ2V0X3R5cGUKLQlnc3RfcHRwX2Nsb2NrX25ldwotCWdzdF9wdHBfZGVpbml0Ci0JZ3N0X3B0cF9pbml0Ci0JZ3N0X3B0cF9pc19pbml0aWFsaXplZAotCWdzdF9wdHBfaXNfc3VwcG9ydGVkCi0JZ3N0X3B0cF9zdGF0aXN0aWNzX2NhbGxiYWNrX2FkZAotCWdzdF9wdHBfc3RhdGlzdGljc19jYWxsYmFja19yZW1vdmUKZGlmZiAtLWdpdCBhL3dpbjMyL2NvbW1vbi9saWJnc3RyZWFtZXIuZGVmIGIvd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZmU5MDQuLjAwMDAwMDAKLS0tIGEvd2luMzIvY29tbW9uL2xpYmdzdHJlYW1lci5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxNjE3ICswLDAgQEAKLUVYUE9SVFMKLQlHU1RfQ0FUX0JVRkZFUiBEQVRBCi0JR1NUX0NBVF9CVUZGRVJfTElTVCBEQVRBCi0JR1NUX0NBVF9CVVMgREFUQQotCUdTVF9DQVRfQ0FMTF9UUkFDRSBEQVRBCi0JR1NUX0NBVF9DQVBTIERBVEEKLQlHU1RfQ0FUX0NMT0NLIERBVEEKLQlHU1RfQ0FUX0NPTlRFWFQgREFUQQotCUdTVF9DQVRfREVGQVVMVCBEQVRBCi0JR1NUX0NBVF9FTEVNRU5UX1BBRFMgREFUQQotCUdTVF9DQVRfRVJST1JfU1lTVEVNIERBVEEKLQlHU1RfQ0FUX0VWRU5UIERBVEEKLQlHU1RfQ0FUX0dTVF9JTklUIERBVEEKLQlHU1RfQ0FUX0xPQ0tJTkcgREFUQQotCUdTVF9DQVRfTUVNT1JZIERBVEEKLQlHU1RfQ0FUX01FU1NBR0UgREFUQQotCUdTVF9DQVRfTUVUQSBEQVRBCi0JR1NUX0NBVF9ORUdPVElBVElPTiBEQVRBCi0JR1NUX0NBVF9QQURTIERBVEEKLQlHU1RfQ0FUX1BBUkFNUyBEQVRBCi0JR1NUX0NBVF9QQVJFTlRBR0UgREFUQQotCUdTVF9DQVRfUEVSRk9STUFOQ0UgREFUQQotCUdTVF9DQVRfUElQRUxJTkUgREFUQQotCUdTVF9DQVRfUExVR0lOX0lORk8gREFUQQotCUdTVF9DQVRfUExVR0lOX0xPQURJTkcgREFUQQotCUdTVF9DQVRfUFJPQkUgREFUQQotCUdTVF9DQVRfUFJPUEVSVElFUyBEQVRBCi0JR1NUX0NBVF9RT1MgREFUQQotCUdTVF9DQVRfUkVGQ09VTlRJTkcgREFUQQotCUdTVF9DQVRfUkVHSVNUUlkgREFUQQotCUdTVF9DQVRfU0NIRURVTElORyBEQVRBCi0JR1NUX0NBVF9TSUdOQUwgREFUQQotCUdTVF9DQVRfU1RBVEVTIERBVEEKLQlfZ3N0X2JpdG1hc2tfdHlwZSBEQVRBCi0JX2dzdF9idWZmZXJfbGlzdF90eXBlIERBVEEKLQlfZ3N0X2J1ZmZlcl90eXBlIERBVEEKLQlfZ3N0X2NhcHNfYW55IERBVEEKLQlfZ3N0X2NhcHNfZmVhdHVyZXNfYW55IERBVEEKLQlfZ3N0X2NhcHNfZmVhdHVyZXNfbWVtb3J5X3N5c3RlbV9tZW1vcnkgREFUQQotCV9nc3RfY2Fwc19mZWF0dXJlc190eXBlIERBVEEKLQlfZ3N0X2NhcHNfbm9uZSBEQVRBCi0JX2dzdF9jYXBzX3R5cGUgREFUQQotCV9nc3RfY29udGV4dF90eXBlIERBVEEKLQlfZ3N0X2RhdGVfdGltZV90eXBlIERBVEEKLQlfZ3N0X2RlYnVnX2NhdGVnb3J5X25ldwotCV9nc3RfZGVidWdfZHVtcF9tZW0KLQlfZ3N0X2RlYnVnX2VuYWJsZWQgREFUQQotCV9nc3RfZGVidWdfZ2V0X2NhdGVnb3J5Ci0JX2dzdF9kZWJ1Z19taW4gREFUQQotCV9nc3RfZGVidWdfbmFtZW9mX2Z1bmNwdHIKLQlfZ3N0X2RlYnVnX3JlZ2lzdGVyX2Z1bmNwdHIKLQlfZ3N0X2Rpc2FibGVfcmVnaXN0cnlfY2FjaGUgREFUQQotCV9nc3RfZG91YmxlX3JhbmdlX3R5cGUgREFUQQotCV9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYKLQlfZ3N0X2V2ZW50X3R5cGUgREFUQQotCV9nc3RfZmxhZ3NldF90eXBlIERBVEEKLQlfZ3N0X2ZyYWN0aW9uX3JhbmdlX3R5cGUgREFUQQotCV9nc3RfZnJhY3Rpb25fdHlwZSBEQVRBCi0JX2dzdF9pbnQ2NF9yYW5nZV90eXBlIERBVEEKLQlfZ3N0X2ludF9yYW5nZV90eXBlIERBVEEKLQlfZ3N0X21lbW9yeV90eXBlIERBVEEKLQlfZ3N0X21lc3NhZ2VfdHlwZSBEQVRBCi0JX2dzdF9tZXRhX3RhZ19tZW1vcnkgREFUQQotCV9nc3RfbWV0YV90cmFuc2Zvcm1fY29weSBEQVRBCi0JX2dzdF9wbHVnaW5fbG9hZGVyX2NsaWVudF9ydW4KLQlfZ3N0X3F1ZXJ5X3R5cGUgREFUQQotCV9nc3Rfc2FtcGxlX3R5cGUgREFUQQotCV9nc3Rfc3RydWN0dXJlX3R5cGUgREFUQQotCV9nc3RfdGFnX2xpc3RfdHlwZSBEQVRBCi0JX2dzdF90b2NfZW50cnlfdHlwZSBEQVRBCi0JX2dzdF90b2NfdHlwZSBEQVRBCi0JX2dzdF92YWx1ZV9hcnJheV90eXBlIERBVEEKLQlfZ3N0X3ZhbHVlX2xpc3RfdHlwZSBEQVRBCi0JZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2NvcHkKLQlnc3RfYWxsb2NhdGlvbl9wYXJhbXNfZnJlZQotCWdzdF9hbGxvY2F0aW9uX3BhcmFtc19nZXRfdHlwZQotCWdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0Ci0JZ3N0X2FsbG9jYXRvcl9hbGxvYwotCWdzdF9hbGxvY2F0b3JfZmluZAotCWdzdF9hbGxvY2F0b3JfZmxhZ3NfZ2V0X3R5cGUKLQlnc3RfYWxsb2NhdG9yX2ZyZWUKLQlnc3RfYWxsb2NhdG9yX2dldF90eXBlCi0JZ3N0X2FsbG9jYXRvcl9yZWdpc3RlcgotCWdzdF9hbGxvY2F0b3Jfc2V0X2RlZmF1bHQKLQlnc3RfYWxsb2NhdG9yX3N5c21lbV9nZXRfdHlwZQotCWdzdF9hdG9taWNfcXVldWVfZ2V0X3R5cGUKLQlnc3RfYXRvbWljX3F1ZXVlX2xlbmd0aAotCWdzdF9hdG9taWNfcXVldWVfbmV3Ci0JZ3N0X2F0b21pY19xdWV1ZV9wZWVrCi0JZ3N0X2F0b21pY19xdWV1ZV9wb3AKLQlnc3RfYXRvbWljX3F1ZXVlX3B1c2gKLQlnc3RfYXRvbWljX3F1ZXVlX3JlZgotCWdzdF9hdG9taWNfcXVldWVfdW5yZWYKLQlnc3RfYmluX2FkZAotCWdzdF9iaW5fYWRkX21hbnkKLQlnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkCi0JZ3N0X2Jpbl9mbGFnc19nZXRfdHlwZQotCWdzdF9iaW5fZ2V0X2J5X2ludGVyZmFjZQotCWdzdF9iaW5fZ2V0X2J5X25hbWUKLQlnc3RfYmluX2dldF9ieV9uYW1lX3JlY3Vyc2VfdXAKLQlnc3RfYmluX2dldF9zdXBwcmVzc2VkX2ZsYWdzCi0JZ3N0X2Jpbl9nZXRfdHlwZQotCWdzdF9iaW5faXRlcmF0ZV9hbGxfYnlfaW50ZXJmYWNlCi0JZ3N0X2Jpbl9pdGVyYXRlX2VsZW1lbnRzCi0JZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UKLQlnc3RfYmluX2l0ZXJhdGVfc2lua3MKLQlnc3RfYmluX2l0ZXJhdGVfc29ydGVkCi0JZ3N0X2Jpbl9pdGVyYXRlX3NvdXJjZXMKLQlnc3RfYmluX25ldwotCWdzdF9iaW5fcmVjYWxjdWxhdGVfbGF0ZW5jeQotCWdzdF9iaW5fcmVtb3ZlCi0JZ3N0X2Jpbl9yZW1vdmVfbWFueQotCWdzdF9iaW5fc2V0X3N1cHByZXNzZWRfZmxhZ3MKLQlnc3RfYmluX3N5bmNfY2hpbGRyZW5fc3RhdGVzCi0JZ3N0X2JpdG1hc2tfZ2V0X3R5cGUKLQlnc3RfYnVmZmVyX2FkZF9tZXRhCi0JZ3N0X2J1ZmZlcl9hZGRfcGFyZW50X2J1ZmZlcl9tZXRhCi0JZ3N0X2J1ZmZlcl9hZGRfcHJvdGVjdGlvbl9tZXRhCi0JZ3N0X2J1ZmZlcl9hcHBlbmQKLQlnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkKLQlnc3RfYnVmZmVyX2FwcGVuZF9yZWdpb24KLQlnc3RfYnVmZmVyX2NvcHlfZGVlcAotCWdzdF9idWZmZXJfY29weV9mbGFnc19nZXRfdHlwZQotCWdzdF9idWZmZXJfY29weV9pbnRvCi0JZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbgotCWdzdF9idWZmZXJfZXh0cmFjdAotCWdzdF9idWZmZXJfZXh0cmFjdF9kdXAKLQlnc3RfYnVmZmVyX2ZpbGwKLQlnc3RfYnVmZmVyX2ZpbmRfbWVtb3J5Ci0JZ3N0X2J1ZmZlcl9mbGFnc19nZXRfdHlwZQotCWdzdF9idWZmZXJfZm9yZWFjaF9tZXRhCi0JZ3N0X2J1ZmZlcl9nZXRfYWxsX21lbW9yeQotCWdzdF9idWZmZXJfZ2V0X2ZsYWdzCi0JZ3N0X2J1ZmZlcl9nZXRfbWF4X21lbW9yeQotCWdzdF9idWZmZXJfZ2V0X21lbW9yeQotCWdzdF9idWZmZXJfZ2V0X21lbW9yeV9yYW5nZQotCWdzdF9idWZmZXJfZ2V0X21ldGEKLQlnc3RfYnVmZmVyX2dldF9zaXplCi0JZ3N0X2J1ZmZlcl9nZXRfc2l6ZXMKLQlnc3RfYnVmZmVyX2dldF9zaXplc19yYW5nZQotCWdzdF9idWZmZXJfZ2V0X3R5cGUKLQlnc3RfYnVmZmVyX2hhc19mbGFncwotCWdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeQotCWdzdF9idWZmZXJfaXNfYWxsX21lbW9yeV93cml0YWJsZQotCWdzdF9idWZmZXJfaXNfbWVtb3J5X3JhbmdlX3dyaXRhYmxlCi0JZ3N0X2J1ZmZlcl9pdGVyYXRlX21ldGEKLQlnc3RfYnVmZmVyX2xpc3RfY29weV9kZWVwCi0JZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2gKLQlnc3RfYnVmZmVyX2xpc3RfZ2V0Ci0JZ3N0X2J1ZmZlcl9saXN0X2dldF90eXBlCi0JZ3N0X2J1ZmZlcl9saXN0X2luc2VydAotCWdzdF9idWZmZXJfbGlzdF9sZW5ndGgKLQlnc3RfYnVmZmVyX2xpc3RfbmV3Ci0JZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZAotCWdzdF9idWZmZXJfbGlzdF9yZW1vdmUKLQlnc3RfYnVmZmVyX21hcAotCWdzdF9idWZmZXJfbWFwX3JhbmdlCi0JZ3N0X2J1ZmZlcl9tZW1jbXAKLQlnc3RfYnVmZmVyX21lbXNldAotCWdzdF9idWZmZXJfbl9tZW1vcnkKLQlnc3RfYnVmZmVyX25ldwotCWdzdF9idWZmZXJfbmV3X2FsbG9jYXRlCi0JZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZAotCWdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbAotCWdzdF9idWZmZXJfcGVla19tZW1vcnkKLQlnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIKLQlnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9mbGFnc19nZXRfdHlwZQotCWdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbgotCWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X2FsbG9jYXRvcgotCWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X29wdGlvbgotCWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X3BhcmFtcwotCWdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbgotCWdzdF9idWZmZXJfcG9vbF9jb25maWdfbl9vcHRpb25zCi0JZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yCi0JZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zCi0JZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ192YWxpZGF0ZV9wYXJhbXMKLQlnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZwotCWdzdF9idWZmZXJfcG9vbF9nZXRfb3B0aW9ucwotCWdzdF9idWZmZXJfcG9vbF9nZXRfdHlwZQotCWdzdF9idWZmZXJfcG9vbF9oYXNfb3B0aW9uCi0JZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZQotCWdzdF9idWZmZXJfcG9vbF9uZXcKLQlnc3RfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIKLQlnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZQotCWdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnCi0JZ3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZwotCWdzdF9idWZmZXJfcHJlcGVuZF9tZW1vcnkKLQlnc3RfYnVmZmVyX3JlbW92ZV9hbGxfbWVtb3J5Ci0JZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5Ci0JZ3N0X2J1ZmZlcl9yZW1vdmVfbWVtb3J5X3JhbmdlCi0JZ3N0X2J1ZmZlcl9yZW1vdmVfbWV0YQotCWdzdF9idWZmZXJfcmVwbGFjZV9hbGxfbWVtb3J5Ci0JZ3N0X2J1ZmZlcl9yZXBsYWNlX21lbW9yeQotCWdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnlfcmFuZ2UKLQlnc3RfYnVmZmVyX3Jlc2l6ZQotCWdzdF9idWZmZXJfcmVzaXplX3JhbmdlCi0JZ3N0X2J1ZmZlcl9zZXRfZmxhZ3MKLQlnc3RfYnVmZmVyX3NldF9zaXplCi0JZ3N0X2J1ZmZlcl91bm1hcAotCWdzdF9idWZmZXJfdW5zZXRfZmxhZ3MKLQlnc3RfYnVmZmVyaW5nX21vZGVfZ2V0X3R5cGUKLQlnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2gKLQlnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbAotCWdzdF9idXNfYWRkX3dhdGNoCi0JZ3N0X2J1c19hZGRfd2F0Y2hfZnVsbAotCWdzdF9idXNfYXN5bmNfc2lnbmFsX2Z1bmMKLQlnc3RfYnVzX2NyZWF0ZV93YXRjaAotCWdzdF9idXNfZGlzYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24KLQlnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24KLQlnc3RfYnVzX2ZsYWdzX2dldF90eXBlCi0JZ3N0X2J1c19nZXRfdHlwZQotCWdzdF9idXNfaGF2ZV9wZW5kaW5nCi0JZ3N0X2J1c19uZXcKLQlnc3RfYnVzX3BlZWsKLQlnc3RfYnVzX3BvbGwKLQlnc3RfYnVzX3BvcAotCWdzdF9idXNfcG9wX2ZpbHRlcmVkCi0JZ3N0X2J1c19wb3N0Ci0JZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoCi0JZ3N0X2J1c19yZW1vdmVfd2F0Y2gKLQlnc3RfYnVzX3NldF9mbHVzaGluZwotCWdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcgotCWdzdF9idXNfc3luY19yZXBseV9nZXRfdHlwZQotCWdzdF9idXNfc3luY19zaWduYWxfaGFuZGxlcgotCWdzdF9idXNfdGltZWRfcG9wCi0JZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQKLQlnc3RfY2Fwc19hcHBlbmQKLQlnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlCi0JZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZV9mdWxsCi0JZ3N0X2NhcHNfY2FuX2ludGVyc2VjdAotCWdzdF9jYXBzX2NvcHlfbnRoCi0JZ3N0X2NhcHNfZmVhdHVyZXNfYWRkCi0JZ3N0X2NhcHNfZmVhdHVyZXNfYWRkX2lkCi0JZ3N0X2NhcHNfZmVhdHVyZXNfY29udGFpbnMKLQlnc3RfY2Fwc19mZWF0dXJlc19jb250YWluc19pZAotCWdzdF9jYXBzX2ZlYXR1cmVzX2NvcHkKLQlnc3RfY2Fwc19mZWF0dXJlc19mcmVlCi0JZ3N0X2NhcHNfZmVhdHVyZXNfZnJvbV9zdHJpbmcKLQlnc3RfY2Fwc19mZWF0dXJlc19nZXRfbnRoCi0JZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X250aF9pZAotCWdzdF9jYXBzX2ZlYXR1cmVzX2dldF9zaXplCi0JZ3N0X2NhcHNfZmVhdHVyZXNfZ2V0X3R5cGUKLQlnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkKLQlnc3RfY2Fwc19mZWF0dXJlc19pc19lcXVhbAotCWdzdF9jYXBzX2ZlYXR1cmVzX25ldwotCWdzdF9jYXBzX2ZlYXR1cmVzX25ld19hbnkKLQlnc3RfY2Fwc19mZWF0dXJlc19uZXdfZW1wdHkKLQlnc3RfY2Fwc19mZWF0dXJlc19uZXdfaWQKLQlnc3RfY2Fwc19mZWF0dXJlc19uZXdfaWRfdmFsaXN0Ci0JZ3N0X2NhcHNfZmVhdHVyZXNfbmV3X3ZhbGlzdAotCWdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZQotCWdzdF9jYXBzX2ZlYXR1cmVzX3JlbW92ZV9pZAotCWdzdF9jYXBzX2ZlYXR1cmVzX3NldF9wYXJlbnRfcmVmY291bnQKLQlnc3RfY2Fwc19mZWF0dXJlc190b19zdHJpbmcKLQlnc3RfY2Fwc19maWx0ZXJfYW5kX21hcF9pbl9wbGFjZQotCWdzdF9jYXBzX2ZpeGF0ZQotCWdzdF9jYXBzX2ZsYWdzX2dldF90eXBlCi0JZ3N0X2NhcHNfZm9yZWFjaAotCWdzdF9jYXBzX2Zyb21fc3RyaW5nCi0JZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzCi0JZ3N0X2NhcHNfZ2V0X3NpemUKLQlnc3RfY2Fwc19nZXRfc3RydWN0dXJlCi0JZ3N0X2NhcHNfZ2V0X3R5cGUKLQlnc3RfY2Fwc19pbnRlcnNlY3QKLQlnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbAotCWdzdF9jYXBzX2ludGVyc2VjdF9tb2RlX2dldF90eXBlCi0JZ3N0X2NhcHNfaXNfYWx3YXlzX2NvbXBhdGlibGUKLQlnc3RfY2Fwc19pc19hbnkKLQlnc3RfY2Fwc19pc19lbXB0eQotCWdzdF9jYXBzX2lzX2VxdWFsCi0JZ3N0X2NhcHNfaXNfZXF1YWxfZml4ZWQKLQlnc3RfY2Fwc19pc19maXhlZAotCWdzdF9jYXBzX2lzX3N0cmljdGx5X2VxdWFsCi0JZ3N0X2NhcHNfaXNfc3Vic2V0Ci0JZ3N0X2NhcHNfaXNfc3Vic2V0X3N0cnVjdHVyZQotCWdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmVfZnVsbAotCWdzdF9jYXBzX21hcF9pbl9wbGFjZQotCWdzdF9jYXBzX21lcmdlCi0JZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlCi0JZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlX2Z1bGwKLQlnc3RfY2Fwc19uZXdfYW55Ci0JZ3N0X2NhcHNfbmV3X2VtcHR5Ci0JZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZQotCWdzdF9jYXBzX25ld19mdWxsCi0JZ3N0X2NhcHNfbmV3X2Z1bGxfdmFsaXN0Ci0JZ3N0X2NhcHNfbmV3X3NpbXBsZQotCWdzdF9jYXBzX25vcm1hbGl6ZQotCWdzdF9jYXBzX3JlbW92ZV9zdHJ1Y3R1cmUKLQlnc3RfY2Fwc19zZXRfZmVhdHVyZXMKLQlnc3RfY2Fwc19zZXRfc2ltcGxlCi0JZ3N0X2NhcHNfc2V0X3NpbXBsZV92YWxpc3QKLQlnc3RfY2Fwc19zZXRfdmFsdWUKLQlnc3RfY2Fwc19zaW1wbGlmeQotCWdzdF9jYXBzX3N0ZWFsX3N0cnVjdHVyZQotCWdzdF9jYXBzX3N1YnRyYWN0Ci0JZ3N0X2NhcHNfdG9fc3RyaW5nCi0JZ3N0X2NhcHNfdHJ1bmNhdGUKLQlnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQKLQlnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZAotCWdzdF9jaGlsZF9wcm94eV9nZXQKLQlnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4Ci0JZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9uYW1lCi0JZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudAotCWdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkKLQlnc3RfY2hpbGRfcHJveHlfZ2V0X3R5cGUKLQlnc3RfY2hpbGRfcHJveHlfZ2V0X3ZhbGlzdAotCWdzdF9jaGlsZF9wcm94eV9sb29rdXAKLQlnc3RfY2hpbGRfcHJveHlfc2V0Ci0JZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eQotCWdzdF9jaGlsZF9wcm94eV9zZXRfdmFsaXN0Ci0JZ3N0X2Nsb2NrX2FkZF9vYnNlcnZhdGlvbgotCWdzdF9jbG9ja19hZGRfb2JzZXJ2YXRpb25fdW5hcHBsaWVkCi0JZ3N0X2Nsb2NrX2FkanVzdF91bmxvY2tlZAotCWdzdF9jbG9ja19hZGp1c3Rfd2l0aF9jYWxpYnJhdGlvbgotCWdzdF9jbG9ja19lbnRyeV90eXBlX2dldF90eXBlCi0JZ3N0X2Nsb2NrX2ZsYWdzX2dldF90eXBlCi0JZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbgotCWdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZQotCWdzdF9jbG9ja19nZXRfbWFzdGVyCi0JZ3N0X2Nsb2NrX2dldF9yZXNvbHV0aW9uCi0JZ3N0X2Nsb2NrX2dldF90aW1lCi0JZ3N0X2Nsb2NrX2dldF90aW1lb3V0Ci0JZ3N0X2Nsb2NrX2dldF90eXBlCi0JZ3N0X2Nsb2NrX2lkX2NvbXBhcmVfZnVuYwotCWdzdF9jbG9ja19pZF9nZXRfdGltZQotCWdzdF9jbG9ja19pZF9yZWYKLQlnc3RfY2xvY2tfaWRfdW5yZWYKLQlnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZQotCWdzdF9jbG9ja19pZF93YWl0Ci0JZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMKLQlnc3RfY2xvY2tfaXNfc3luY2VkCi0JZ3N0X2Nsb2NrX25ld19wZXJpb2RpY19pZAotCWdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQKLQlnc3RfY2xvY2tfcGVyaW9kaWNfaWRfcmVpbml0Ci0JZ3N0X2Nsb2NrX3JldHVybl9nZXRfdHlwZQotCWdzdF9jbG9ja19zZXRfY2FsaWJyYXRpb24KLQlnc3RfY2xvY2tfc2V0X21hc3RlcgotCWdzdF9jbG9ja19zZXRfcmVzb2x1dGlvbgotCWdzdF9jbG9ja19zZXRfc3luY2VkCi0JZ3N0X2Nsb2NrX3NldF90aW1lb3V0Ci0JZ3N0X2Nsb2NrX3NpbmdsZV9zaG90X2lkX3JlaW5pdAotCWdzdF9jbG9ja190eXBlX2dldF90eXBlCi0JZ3N0X2Nsb2NrX3VuYWRqdXN0X3VubG9ja2VkCi0JZ3N0X2Nsb2NrX3VuYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24KLQlnc3RfY2xvY2tfd2FpdF9mb3Jfc3luYwotCWdzdF9jb250ZXh0X2dldF9jb250ZXh0X3R5cGUKLQlnc3RfY29udGV4dF9nZXRfc3RydWN0dXJlCi0JZ3N0X2NvbnRleHRfZ2V0X3R5cGUKLQlnc3RfY29udGV4dF9oYXNfY29udGV4dF90eXBlCi0JZ3N0X2NvbnRleHRfaXNfcGVyc2lzdGVudAotCWdzdF9jb250ZXh0X25ldwotCWdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZQotCWdzdF9jb250cm9sX2JpbmRpbmdfZ2V0X2dfdmFsdWVfYXJyYXkKLQlnc3RfY29udHJvbF9iaW5kaW5nX2dldF90eXBlCi0JZ3N0X2NvbnRyb2xfYmluZGluZ19nZXRfdmFsdWUKLQlnc3RfY29udHJvbF9iaW5kaW5nX2dldF92YWx1ZV9hcnJheQotCWdzdF9jb250cm9sX2JpbmRpbmdfaXNfZGlzYWJsZWQKLQlnc3RfY29udHJvbF9iaW5kaW5nX3NldF9kaXNhYmxlZAotCWdzdF9jb250cm9sX2JpbmRpbmdfc3luY192YWx1ZXMKLQlnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3R5cGUKLQlnc3RfY29udHJvbF9zb3VyY2VfZ2V0X3ZhbHVlCi0JZ3N0X2NvbnRyb2xfc291cmNlX2dldF92YWx1ZV9hcnJheQotCWdzdF9jb3JlX2Vycm9yX2dldF90eXBlCi0JZ3N0X2NvcmVfZXJyb3JfcXVhcmsKLQlnc3RfZGF0ZV90aW1lX2dldF9kYXkKLQlnc3RfZGF0ZV90aW1lX2dldF9ob3VyCi0JZ3N0X2RhdGVfdGltZV9nZXRfbWljcm9zZWNvbmQKLQlnc3RfZGF0ZV90aW1lX2dldF9taW51dGUKLQlnc3RfZGF0ZV90aW1lX2dldF9tb250aAotCWdzdF9kYXRlX3RpbWVfZ2V0X3NlY29uZAotCWdzdF9kYXRlX3RpbWVfZ2V0X3RpbWVfem9uZV9vZmZzZXQKLQlnc3RfZGF0ZV90aW1lX2dldF90eXBlCi0JZ3N0X2RhdGVfdGltZV9nZXRfeWVhcgotCWdzdF9kYXRlX3RpbWVfaGFzX2RheQotCWdzdF9kYXRlX3RpbWVfaGFzX21vbnRoCi0JZ3N0X2RhdGVfdGltZV9oYXNfc2Vjb25kCi0JZ3N0X2RhdGVfdGltZV9oYXNfdGltZQotCWdzdF9kYXRlX3RpbWVfaGFzX3llYXIKLQlnc3RfZGF0ZV90aW1lX25ldwotCWdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWUKLQlnc3RfZGF0ZV90aW1lX25ld19mcm9tX2lzbzg2MDFfc3RyaW5nCi0JZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV91bml4X2Vwb2NoX2xvY2FsX3RpbWUKLQlnc3RfZGF0ZV90aW1lX25ld19mcm9tX3VuaXhfZXBvY2hfdXRjCi0JZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZQotCWdzdF9kYXRlX3RpbWVfbmV3X25vd19sb2NhbF90aW1lCi0JZ3N0X2RhdGVfdGltZV9uZXdfbm93X3V0YwotCWdzdF9kYXRlX3RpbWVfbmV3X3kKLQlnc3RfZGF0ZV90aW1lX25ld195bQotCWdzdF9kYXRlX3RpbWVfbmV3X3ltZAotCWdzdF9kYXRlX3RpbWVfcmVmCi0JZ3N0X2RhdGVfdGltZV90b19nX2RhdGVfdGltZQotCWdzdF9kYXRlX3RpbWVfdG9faXNvODYwMV9zdHJpbmcKLQlnc3RfZGF0ZV90aW1lX3VucmVmCi0JZ3N0X2RlYnVnX2FkZF9sb2dfZnVuY3Rpb24KLQlnc3RfZGVidWdfYmluX3RvX2RvdF9kYXRhCi0JZ3N0X2RlYnVnX2Jpbl90b19kb3RfZmlsZQotCWdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGVfd2l0aF90cwotCWdzdF9kZWJ1Z19jYXRlZ29yeV9mcmVlCi0JZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF9jb2xvcgotCWdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfZGVzY3JpcHRpb24KLQlnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X25hbWUKLQlnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZAotCWdzdF9kZWJ1Z19jYXRlZ29yeV9yZXNldF90aHJlc2hvbGQKLQlnc3RfZGVidWdfY2F0ZWdvcnlfc2V0X3RocmVzaG9sZAotCWdzdF9kZWJ1Z19jb2xvcl9mbGFnc19nZXRfdHlwZQotCWdzdF9kZWJ1Z19jb2xvcl9tb2RlX2dldF90eXBlCi0JZ3N0X2RlYnVnX2NvbnN0cnVjdF90ZXJtX2NvbG9yCi0JZ3N0X2RlYnVnX2NvbnN0cnVjdF93aW5fY29sb3IKLQlnc3RfZGVidWdfZ2V0X2FsbF9jYXRlZ29yaWVzCi0JZ3N0X2RlYnVnX2dldF9jb2xvcl9tb2RlCi0JZ3N0X2RlYnVnX2dldF9kZWZhdWx0X3RocmVzaG9sZAotCWdzdF9kZWJ1Z19ncmFwaF9kZXRhaWxzX2dldF90eXBlCi0JZ3N0X2RlYnVnX2lzX2FjdGl2ZQotCWdzdF9kZWJ1Z19pc19jb2xvcmVkCi0JZ3N0X2RlYnVnX2xldmVsX2dldF9uYW1lCi0JZ3N0X2RlYnVnX2xldmVsX2dldF90eXBlCi0JZ3N0X2RlYnVnX2xvZwotCWdzdF9kZWJ1Z19sb2dfZGVmYXVsdAotCWdzdF9kZWJ1Z19sb2dfdmFsaXN0Ci0JZ3N0X2RlYnVnX21lc3NhZ2VfZ2V0Ci0JZ3N0X2RlYnVnX3ByaW50X3N0YWNrX3RyYWNlCi0JZ3N0X2RlYnVnX3JlbW92ZV9sb2dfZnVuY3Rpb24KLQlnc3RfZGVidWdfcmVtb3ZlX2xvZ19mdW5jdGlvbl9ieV9kYXRhCi0JZ3N0X2RlYnVnX3NldF9hY3RpdmUKLQlnc3RfZGVidWdfc2V0X2NvbG9yX21vZGUKLQlnc3RfZGVidWdfc2V0X2NvbG9yX21vZGVfZnJvbV9zdHJpbmcKLQlnc3RfZGVidWdfc2V0X2NvbG9yZWQKLQlnc3RfZGVidWdfc2V0X2RlZmF1bHRfdGhyZXNob2xkCi0JZ3N0X2RlYnVnX3NldF90aHJlc2hvbGRfZm9yX25hbWUKLQlnc3RfZGVidWdfc2V0X3RocmVzaG9sZF9mcm9tX3N0cmluZwotCWdzdF9kZWJ1Z191bnNldF90aHJlc2hvbGRfZm9yX25hbWUKLQlnc3RfZGVpbml0Ci0JZ3N0X2RldmljZV9jcmVhdGVfZWxlbWVudAotCWdzdF9kZXZpY2VfZ2V0X2NhcHMKLQlnc3RfZGV2aWNlX2dldF9kZXZpY2VfY2xhc3MKLQlnc3RfZGV2aWNlX2dldF9kaXNwbGF5X25hbWUKLQlnc3RfZGV2aWNlX2dldF9wcm9wZXJ0aWVzCi0JZ3N0X2RldmljZV9nZXRfdHlwZQotCWdzdF9kZXZpY2VfaGFzX2NsYXNzZXMKLQlnc3RfZGV2aWNlX2hhc19jbGFzc2VzdgotCWdzdF9kZXZpY2VfbW9uaXRvcl9hZGRfZmlsdGVyCi0JZ3N0X2RldmljZV9tb25pdG9yX2dldF9idXMKLQlnc3RfZGV2aWNlX21vbml0b3JfZ2V0X2RldmljZXMKLQlnc3RfZGV2aWNlX21vbml0b3JfZ2V0X3Byb3ZpZGVycwotCWdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfc2hvd19hbGxfZGV2aWNlcwotCWdzdF9kZXZpY2VfbW9uaXRvcl9nZXRfdHlwZQotCWdzdF9kZXZpY2VfbW9uaXRvcl9uZXcKLQlnc3RfZGV2aWNlX21vbml0b3JfcmVtb3ZlX2ZpbHRlcgotCWdzdF9kZXZpY2VfbW9uaXRvcl9zZXRfc2hvd19hbGxfZGV2aWNlcwotCWdzdF9kZXZpY2VfbW9uaXRvcl9zdGFydAotCWdzdF9kZXZpY2VfbW9uaXRvcl9zdG9wCi0JZ3N0X2RldmljZV9wcm92aWRlcl9jYW5fbW9uaXRvcgotCWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3NfYWRkX21ldGFkYXRhCi0JZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19hZGRfc3RhdGljX21ldGFkYXRhCi0JZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19nZXRfbWV0YWRhdGEKLQlnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9tZXRhZGF0YQotCWdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YQotCWdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZAotCWdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX3JlbW92ZQotCWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9maW5kCi0JZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldAotCWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfYnlfbmFtZQotCWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9nZXRfZGV2aWNlX3Byb3ZpZGVyX3R5cGUKLQlnc3RfZGV2aWNlX3Byb3ZpZGVyX2ZhY3RvcnlfZ2V0X21ldGFkYXRhCi0JZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF9tZXRhZGF0YV9rZXlzCi0JZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2dldF90eXBlCi0JZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzCi0JZ3N0X2RldmljZV9wcm92aWRlcl9mYWN0b3J5X2hhc19jbGFzc2VzdgotCWdzdF9kZXZpY2VfcHJvdmlkZXJfZmFjdG9yeV9saXN0X2dldF9kZXZpY2VfcHJvdmlkZXJzCi0JZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfYnVzCi0JZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfZGV2aWNlcwotCWdzdF9kZXZpY2VfcHJvdmlkZXJfZ2V0X2ZhY3RvcnkKLQlnc3RfZGV2aWNlX3Byb3ZpZGVyX2dldF9oaWRkZW5fcHJvdmlkZXJzCi0JZ3N0X2RldmljZV9wcm92aWRlcl9nZXRfdHlwZQotCWdzdF9kZXZpY2VfcHJvdmlkZXJfaGlkZV9wcm92aWRlcgotCWdzdF9kZXZpY2VfcHJvdmlkZXJfcmVnaXN0ZXIKLQlnc3RfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0Ci0JZ3N0X2RldmljZV9wcm92aWRlcl9zdG9wCi0JZ3N0X2RldmljZV9wcm92aWRlcl91bmhpZGVfcHJvdmlkZXIKLQlnc3RfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQKLQlnc3RfZG91YmxlX3JhbmdlX2dldF90eXBlCi0JZ3N0X2VsZW1lbnRfYWJvcnRfc3RhdGUKLQlnc3RfZWxlbWVudF9hZGRfcGFkCi0JZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X2RlZXBfbm90aWZ5X3dhdGNoCi0JZ3N0X2VsZW1lbnRfYWRkX3Byb3BlcnR5X25vdGlmeV93YXRjaAotCWdzdF9lbGVtZW50X2NhbGxfYXN5bmMKLQlnc3RfZWxlbWVudF9jaGFuZ2Vfc3RhdGUKLQlnc3RfZWxlbWVudF9jbGFzc19hZGRfbWV0YWRhdGEKLQlnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlCi0JZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19tZXRhZGF0YQotCWdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlCi0JZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X21ldGFkYXRhCi0JZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZQotCWdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGVfbGlzdAotCWdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YQotCWdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEKLQlnc3RfZWxlbWVudF9jb250aW51ZV9zdGF0ZQotCWdzdF9lbGVtZW50X2NyZWF0ZV9hbGxfcGFkcwotCWdzdF9lbGVtZW50X2ZhY3RvcnlfY2FuX3NpbmtfYWxsX2NhcHMKLQlnc3RfZWxlbWVudF9mYWN0b3J5X2Nhbl9zaW5rX2FueV9jYXBzCi0JZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FsbF9jYXBzCi0JZ3N0X2VsZW1lbnRfZmFjdG9yeV9jYW5fc3JjX2FueV9jYXBzCi0JZ3N0X2VsZW1lbnRfZmFjdG9yeV9jcmVhdGUKLQlnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQKLQlnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUKLQlnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YQotCWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhX2tleXMKLQlnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9udW1fcGFkX3RlbXBsYXRlcwotCWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3N0YXRpY19wYWRfdGVtcGxhdGVzCi0JZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfdHlwZQotCWdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X3VyaV9wcm90b2NvbHMKLQlnc3RfZWxlbWVudF9mYWN0b3J5X2dldF91cmlfdHlwZQotCWdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZQotCWdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIKLQlnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzCi0JZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2lzX3R5cGUKLQlnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UKLQlnc3RfZWxlbWVudF9mbGFnc19nZXRfdHlwZQotCWdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUKLQlnc3RfZWxlbWVudF9nZXRfYnVzCi0JZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrCi0JZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkCi0JZ3N0X2VsZW1lbnRfZ2V0X2NvbXBhdGlibGVfcGFkX3RlbXBsYXRlCi0JZ3N0X2VsZW1lbnRfZ2V0X2NvbnRleHQKLQlnc3RfZWxlbWVudF9nZXRfY29udGV4dF91bmxvY2tlZAotCWdzdF9lbGVtZW50X2dldF9jb250ZXh0cwotCWdzdF9lbGVtZW50X2dldF9mYWN0b3J5Ci0JZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkCi0JZ3N0X2VsZW1lbnRfZ2V0X3N0YXJ0X3RpbWUKLQlnc3RfZWxlbWVudF9nZXRfc3RhdGUKLQlnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZAotCWdzdF9lbGVtZW50X2dldF90eXBlCi0JZ3N0X2VsZW1lbnRfaXNfbG9ja2VkX3N0YXRlCi0JZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzCi0JZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMKLQlnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzCi0JZ3N0X2VsZW1lbnRfbGluawotCWdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQKLQlnc3RfZWxlbWVudF9saW5rX21hbnkKLQlnc3RfZWxlbWVudF9saW5rX3BhZHMKLQlnc3RfZWxlbWVudF9saW5rX3BhZHNfZmlsdGVyZWQKLQlnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbAotCWdzdF9lbGVtZW50X2xvc3Rfc3RhdGUKLQlnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpCi0JZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsCi0JZ3N0X2VsZW1lbnRfbWVzc2FnZV9mdWxsX3dpdGhfZGV0YWlscwotCWdzdF9lbGVtZW50X25vX21vcmVfcGFkcwotCWdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZQotCWdzdF9lbGVtZW50X3Byb3ZpZGVfY2xvY2sKLQlnc3RfZWxlbWVudF9xdWVyeQotCWdzdF9lbGVtZW50X3F1ZXJ5X2NvbnZlcnQKLQlnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbgotCWdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uCi0JZ3N0X2VsZW1lbnRfcmVnaXN0ZXIKLQlnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkCi0JZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZAotCWdzdF9lbGVtZW50X3JlbW92ZV9wcm9wZXJ0eV9ub3RpZnlfd2F0Y2gKLQlnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZAotCWdzdF9lbGVtZW50X3NlZWsKLQlnc3RfZWxlbWVudF9zZWVrX3NpbXBsZQotCWdzdF9lbGVtZW50X3NlbmRfZXZlbnQKLQlnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lCi0JZ3N0X2VsZW1lbnRfc2V0X2J1cwotCWdzdF9lbGVtZW50X3NldF9jbG9jawotCWdzdF9lbGVtZW50X3NldF9jb250ZXh0Ci0JZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZQotCWdzdF9lbGVtZW50X3NldF9zdGFydF90aW1lCi0JZ3N0X2VsZW1lbnRfc2V0X3N0YXRlCi0JZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRfbmFtZQotCWdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lCi0JZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudAotCWdzdF9lbGVtZW50X3VubGluawotCWdzdF9lbGVtZW50X3VubGlua19tYW55Ci0JZ3N0X2VsZW1lbnRfdW5saW5rX3BhZHMKLQlnc3RfZXJyb3JfZ2V0X21lc3NhZ2UKLQlnc3RfZXZlbnRfY29weV9zZWdtZW50Ci0JZ3N0X2V2ZW50X2dldF9ydW5uaW5nX3RpbWVfb2Zmc2V0Ci0JZ3N0X2V2ZW50X2dldF9zZXFudW0KLQlnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZQotCWdzdF9ldmVudF9nZXRfdHlwZQotCWdzdF9ldmVudF9oYXNfbmFtZQotCWdzdF9ldmVudF9uZXdfYnVmZmVyX3NpemUKLQlnc3RfZXZlbnRfbmV3X2NhcHMKLQlnc3RfZXZlbnRfbmV3X2N1c3RvbQotCWdzdF9ldmVudF9uZXdfZW9zCi0JZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydAotCWdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcAotCWdzdF9ldmVudF9uZXdfZ2FwCi0JZ3N0X2V2ZW50X25ld19sYXRlbmN5Ci0JZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uCi0JZ3N0X2V2ZW50X25ld19wcm90ZWN0aW9uCi0JZ3N0X2V2ZW50X25ld19xb3MKLQlnc3RfZXZlbnRfbmV3X3JlY29uZmlndXJlCi0JZ3N0X2V2ZW50X25ld19zZWVrCi0JZ3N0X2V2ZW50X25ld19zZWdtZW50Ci0JZ3N0X2V2ZW50X25ld19zZWdtZW50X2RvbmUKLQlnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zCi0JZ3N0X2V2ZW50X25ld19zaW5rX21lc3NhZ2UKLQlnc3RfZXZlbnRfbmV3X3N0ZXAKLQlnc3RfZXZlbnRfbmV3X3N0cmVhbV9jb2xsZWN0aW9uCi0JZ3N0X2V2ZW50X25ld19zdHJlYW1fZ3JvdXBfZG9uZQotCWdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0Ci0JZ3N0X2V2ZW50X25ld190YWcKLQlnc3RfZXZlbnRfbmV3X3RvYwotCWdzdF9ldmVudF9uZXdfdG9jX3NlbGVjdAotCWdzdF9ldmVudF9wYXJzZV9idWZmZXJfc2l6ZQotCWdzdF9ldmVudF9wYXJzZV9jYXBzCi0JZ3N0X2V2ZW50X3BhcnNlX2ZsdXNoX3N0b3AKLQlnc3RfZXZlbnRfcGFyc2VfZ2FwCi0JZ3N0X2V2ZW50X3BhcnNlX2dyb3VwX2lkCi0JZ3N0X2V2ZW50X3BhcnNlX2xhdGVuY3kKLQlnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbgotCWdzdF9ldmVudF9wYXJzZV9xb3MKLQlnc3RfZXZlbnRfcGFyc2Vfc2VlawotCWdzdF9ldmVudF9wYXJzZV9zZWdtZW50Ci0JZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnRfZG9uZQotCWdzdF9ldmVudF9wYXJzZV9zZWxlY3Rfc3RyZWFtcwotCWdzdF9ldmVudF9wYXJzZV9zaW5rX21lc3NhZ2UKLQlnc3RfZXZlbnRfcGFyc2Vfc3RlcAotCWdzdF9ldmVudF9wYXJzZV9zdHJlYW0KLQlnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24KLQlnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX2ZsYWdzCi0JZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9ncm91cF9kb25lCi0JZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydAotCWdzdF9ldmVudF9wYXJzZV90YWcKLQlnc3RfZXZlbnRfcGFyc2VfdG9jCi0JZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3QKLQlnc3RfZXZlbnRfc2V0X2dyb3VwX2lkCi0JZ3N0X2V2ZW50X3NldF9ydW5uaW5nX3RpbWVfb2Zmc2V0Ci0JZ3N0X2V2ZW50X3NldF9zZXFudW0KLQlnc3RfZXZlbnRfc2V0X3N0cmVhbQotCWdzdF9ldmVudF9zZXRfc3RyZWFtX2ZsYWdzCi0JZ3N0X2V2ZW50X3R5cGVfZmxhZ3NfZ2V0X3R5cGUKLQlnc3RfZXZlbnRfdHlwZV9nZXRfZmxhZ3MKLQlnc3RfZXZlbnRfdHlwZV9nZXRfbmFtZQotCWdzdF9ldmVudF90eXBlX2dldF90eXBlCi0JZ3N0X2V2ZW50X3R5cGVfdG9fcXVhcmsKLQlnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlCi0JZ3N0X2ZpbGVuYW1lX3RvX3VyaQotCWdzdF9mbGFnc2V0X2dldF90eXBlCi0JZ3N0X2ZsYWdzZXRfcmVnaXN0ZXIKLQlnc3RfZmxvd19nZXRfbmFtZQotCWdzdF9mbG93X3JldHVybl9nZXRfdHlwZQotCWdzdF9mbG93X3RvX3F1YXJrCi0JZ3N0X2Zvcm1hdF9nZXRfYnlfbmljawotCWdzdF9mb3JtYXRfZ2V0X2RldGFpbHMKLQlnc3RfZm9ybWF0X2dldF9uYW1lCi0JZ3N0X2Zvcm1hdF9nZXRfdHlwZQotCWdzdF9mb3JtYXRfaXRlcmF0ZV9kZWZpbml0aW9ucwotCWdzdF9mb3JtYXRfcmVnaXN0ZXIKLQlnc3RfZm9ybWF0X3RvX3F1YXJrCi0JZ3N0X2Zvcm1hdHNfY29udGFpbnMKLQlnc3RfZnJhY3Rpb25fZ2V0X3R5cGUKLQlnc3RfZnJhY3Rpb25fcmFuZ2VfZ2V0X3R5cGUKLQlnc3RfZ190aHJlYWRfZ2V0X3R5cGUKLQlnc3RfZ2hvc3RfcGFkX2FjdGl2YXRlX21vZGVfZGVmYXVsdAotCWdzdF9naG9zdF9wYWRfY29uc3RydWN0Ci0JZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0Ci0JZ3N0X2dob3N0X3BhZF9nZXRfdHlwZQotCWdzdF9naG9zdF9wYWRfaW50ZXJuYWxfYWN0aXZhdGVfbW9kZV9kZWZhdWx0Ci0JZ3N0X2dob3N0X3BhZF9uZXcKLQlnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlCi0JZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0Ci0JZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUKLQlnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQKLQlnc3RfaW5mb19zdHJkdXBfcHJpbnRmCi0JZ3N0X2luZm9fc3RyZHVwX3ZwcmludGYKLQlnc3RfaW5mb192YXNwcmludGYKLQlnc3RfaW5pdAotCWdzdF9pbml0X2NoZWNrCi0JZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cAotCWdzdF9pbnQ2NF9yYW5nZV9nZXRfdHlwZQotCWdzdF9pbnRfcmFuZ2VfZ2V0X3R5cGUKLQlnc3RfaXNfY2Fwc19mZWF0dXJlcwotCWdzdF9pc19pbml0aWFsaXplZAotCWdzdF9pdGVyYXRvcl9jb3B5Ci0JZ3N0X2l0ZXJhdG9yX2ZpbHRlcgotCWdzdF9pdGVyYXRvcl9maW5kX2N1c3RvbQotCWdzdF9pdGVyYXRvcl9mb2xkCi0JZ3N0X2l0ZXJhdG9yX2ZvcmVhY2gKLQlnc3RfaXRlcmF0b3JfZnJlZQotCWdzdF9pdGVyYXRvcl9nZXRfdHlwZQotCWdzdF9pdGVyYXRvcl9pdGVtX2dldF90eXBlCi0JZ3N0X2l0ZXJhdG9yX25ldwotCWdzdF9pdGVyYXRvcl9uZXdfbGlzdAotCWdzdF9pdGVyYXRvcl9uZXdfc2luZ2xlCi0JZ3N0X2l0ZXJhdG9yX25leHQKLQlnc3RfaXRlcmF0b3JfcHVzaAotCWdzdF9pdGVyYXRvcl9yZXN1bHRfZ2V0X3R5cGUKLQlnc3RfaXRlcmF0b3JfcmVzeW5jCi0JZ3N0X2xpYnJhcnlfZXJyb3JfZ2V0X3R5cGUKLQlnc3RfbGlicmFyeV9lcnJvcl9xdWFyawotCWdzdF9sb2NrX2ZsYWdzX2dldF90eXBlCi0JZ3N0X21ha2VfZWxlbWVudF9tZXNzYWdlX2RldGFpbHMKLQlnc3RfbWFwX2ZsYWdzX2dldF90eXBlCi0JZ3N0X21lbW9yeV9hbGlnbm1lbnQgREFUQQotCWdzdF9tZW1vcnlfY29weQotCWdzdF9tZW1vcnlfZmxhZ3NfZ2V0X3R5cGUKLQlnc3RfbWVtb3J5X2dldF9zaXplcwotCWdzdF9tZW1vcnlfZ2V0X3R5cGUKLQlnc3RfbWVtb3J5X2luaXQKLQlnc3RfbWVtb3J5X2lzX3NwYW4KLQlnc3RfbWVtb3J5X2lzX3R5cGUKLQlnc3RfbWVtb3J5X21ha2VfbWFwcGVkCi0JZ3N0X21lbW9yeV9tYXAKLQlnc3RfbWVtb3J5X25ld193cmFwcGVkCi0JZ3N0X21lbW9yeV9yZXNpemUKLQlnc3RfbWVtb3J5X3NoYXJlCi0JZ3N0X21lbW9yeV91bm1hcAotCWdzdF9tZXNzYWdlX2FkZF9yZWRpcmVjdF9lbnRyeQotCWdzdF9tZXNzYWdlX2dldF9udW1fcmVkaXJlY3RfZW50cmllcwotCWdzdF9tZXNzYWdlX2dldF9zZXFudW0KLQlnc3RfbWVzc2FnZV9nZXRfc3RyZWFtX3N0YXR1c19vYmplY3QKLQlnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlCi0JZ3N0X21lc3NhZ2VfZ2V0X3R5cGUKLQlnc3RfbWVzc2FnZV9oYXNfbmFtZQotCWdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbgotCWdzdF9tZXNzYWdlX25ld19hc3luY19kb25lCi0JZ3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0Ci0JZ3N0X21lc3NhZ2VfbmV3X2J1ZmZlcmluZwotCWdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0Ci0JZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUKLQlnc3RfbWVzc2FnZV9uZXdfY3VzdG9tCi0JZ3N0X21lc3NhZ2VfbmV3X2RldmljZV9hZGRlZAotCWdzdF9tZXNzYWdlX25ld19kZXZpY2VfcmVtb3ZlZAotCWdzdF9tZXNzYWdlX25ld19kdXJhdGlvbl9jaGFuZ2VkCi0JZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQKLQlnc3RfbWVzc2FnZV9uZXdfZW9zCi0JZ3N0X21lc3NhZ2VfbmV3X2Vycm9yCi0JZ3N0X21lc3NhZ2VfbmV3X2Vycm9yX3dpdGhfZGV0YWlscwotCWdzdF9tZXNzYWdlX25ld19oYXZlX2NvbnRleHQKLQlnc3RfbWVzc2FnZV9uZXdfaW5mbwotCWdzdF9tZXNzYWdlX25ld19pbmZvX3dpdGhfZGV0YWlscwotCWdzdF9tZXNzYWdlX25ld19sYXRlbmN5Ci0JZ3N0X21lc3NhZ2VfbmV3X25lZWRfY29udGV4dAotCWdzdF9tZXNzYWdlX25ld19uZXdfY2xvY2sKLQlnc3RfbWVzc2FnZV9uZXdfcHJvZ3Jlc3MKLQlnc3RfbWVzc2FnZV9uZXdfcHJvcGVydHlfbm90aWZ5Ci0JZ3N0X21lc3NhZ2VfbmV3X3FvcwotCWdzdF9tZXNzYWdlX25ld19yZWRpcmVjdAotCWdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlCi0JZ3N0X21lc3NhZ2VfbmV3X3Jlc2V0X3RpbWUKLQlnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lCi0JZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQKLQlnc3RfbWVzc2FnZV9uZXdfc3RhdGVfY2hhbmdlZAotCWdzdF9tZXNzYWdlX25ld19zdGF0ZV9kaXJ0eQotCWdzdF9tZXNzYWdlX25ld19zdGVwX2RvbmUKLQlnc3RfbWVzc2FnZV9uZXdfc3RlcF9zdGFydAotCWdzdF9tZXNzYWdlX25ld19zdHJlYW1fY29sbGVjdGlvbgotCWdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhcnQKLQlnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX3N0YXR1cwotCWdzdF9tZXNzYWdlX25ld19zdHJlYW1zX3NlbGVjdGVkCi0JZ3N0X21lc3NhZ2VfbmV3X3N0cnVjdHVyZV9jaGFuZ2UKLQlnc3RfbWVzc2FnZV9uZXdfdGFnCi0JZ3N0X21lc3NhZ2VfbmV3X3RvYwotCWdzdF9tZXNzYWdlX25ld193YXJuaW5nCi0JZ3N0X21lc3NhZ2VfbmV3X3dhcm5pbmdfd2l0aF9kZXRhaWxzCi0JZ3N0X21lc3NhZ2VfcGFyc2VfYXN5bmNfZG9uZQotCWdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZwotCWdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cwotCWdzdF9tZXNzYWdlX3BhcnNlX2Nsb2NrX2xvc3QKLQlnc3RfbWVzc2FnZV9wYXJzZV9jbG9ja19wcm92aWRlCi0JZ3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlCi0JZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX2FkZGVkCi0JZ3N0X21lc3NhZ2VfcGFyc2VfZGV2aWNlX3JlbW92ZWQKLQlnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcgotCWdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yX2RldGFpbHMKLQlnc3RfbWVzc2FnZV9wYXJzZV9ncm91cF9pZAotCWdzdF9tZXNzYWdlX3BhcnNlX2hhdmVfY29udGV4dAotCWdzdF9tZXNzYWdlX3BhcnNlX2luZm8KLQlnc3RfbWVzc2FnZV9wYXJzZV9pbmZvX2RldGFpbHMKLQlnc3RfbWVzc2FnZV9wYXJzZV9uZXdfY2xvY2sKLQlnc3RfbWVzc2FnZV9wYXJzZV9wcm9ncmVzcwotCWdzdF9tZXNzYWdlX3BhcnNlX3Byb3BlcnR5X25vdGlmeQotCWdzdF9tZXNzYWdlX3BhcnNlX3FvcwotCWdzdF9tZXNzYWdlX3BhcnNlX3Fvc19zdGF0cwotCWdzdF9tZXNzYWdlX3BhcnNlX3Fvc192YWx1ZXMKLQlnc3RfbWVzc2FnZV9wYXJzZV9yZWRpcmVjdF9lbnRyeQotCWdzdF9tZXNzYWdlX3BhcnNlX3JlcXVlc3Rfc3RhdGUKLQlnc3RfbWVzc2FnZV9wYXJzZV9yZXNldF90aW1lCi0JZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lCi0JZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9zdGFydAotCWdzdF9tZXNzYWdlX3BhcnNlX3N0YXRlX2NoYW5nZWQKLQlnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX2RvbmUKLQlnc3RfbWVzc2FnZV9wYXJzZV9zdGVwX3N0YXJ0Ci0JZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24KLQlnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fc3RhdHVzCi0JZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3RlZAotCWdzdF9tZXNzYWdlX3BhcnNlX3N0cnVjdHVyZV9jaGFuZ2UKLQlnc3RfbWVzc2FnZV9wYXJzZV90YWcKLQlnc3RfbWVzc2FnZV9wYXJzZV90b2MKLQlnc3RfbWVzc2FnZV9wYXJzZV93YXJuaW5nCi0JZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZ19kZXRhaWxzCi0JZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cwotCWdzdF9tZXNzYWdlX3NldF9ncm91cF9pZAotCWdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHMKLQlnc3RfbWVzc2FnZV9zZXRfcW9zX3ZhbHVlcwotCWdzdF9tZXNzYWdlX3NldF9zZXFudW0KLQlnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QKLQlnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2FkZAotCWdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemUKLQlnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zdHJlYW0KLQlnc3RfbWVzc2FnZV90eXBlX2dldF9uYW1lCi0JZ3N0X21lc3NhZ2VfdHlwZV9nZXRfdHlwZQotCWdzdF9tZXNzYWdlX3R5cGVfdG9fcXVhcmsKLQlnc3RfbWV0YV9hcGlfdHlwZV9nZXRfdGFncwotCWdzdF9tZXRhX2FwaV90eXBlX2hhc190YWcKLQlnc3RfbWV0YV9hcGlfdHlwZV9yZWdpc3RlcgotCWdzdF9tZXRhX2ZsYWdzX2dldF90eXBlCi0JZ3N0X21ldGFfZ2V0X2luZm8KLQlnc3RfbWV0YV9yZWdpc3RlcgotCWdzdF9taW5pX29iamVjdF9jb3B5Ci0JZ3N0X21pbmlfb2JqZWN0X2ZsYWdzX2dldF90eXBlCi0JZ3N0X21pbmlfb2JqZWN0X2dldF9xZGF0YQotCWdzdF9taW5pX29iamVjdF9pbml0Ci0JZ3N0X21pbmlfb2JqZWN0X2lzX3dyaXRhYmxlCi0JZ3N0X21pbmlfb2JqZWN0X2xvY2sKLQlnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZQotCWdzdF9taW5pX29iamVjdF9yZWYKLQlnc3RfbWluaV9vYmplY3RfcmVwbGFjZQotCWdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEKLQlnc3RfbWluaV9vYmplY3Rfc3RlYWwKLQlnc3RfbWluaV9vYmplY3Rfc3RlYWxfcWRhdGEKLQlnc3RfbWluaV9vYmplY3RfdGFrZQotCWdzdF9taW5pX29iamVjdF91bmxvY2sKLQlnc3RfbWluaV9vYmplY3RfdW5yZWYKLQlnc3RfbWluaV9vYmplY3Rfd2Vha19yZWYKLQlnc3RfbWluaV9vYmplY3Rfd2Vha191bnJlZgotCWdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZwotCWdzdF9vYmplY3RfY2hlY2tfdW5pcXVlbmVzcwotCWdzdF9vYmplY3RfZGVmYXVsdF9kZWVwX25vdGlmeQotCWdzdF9vYmplY3RfZGVmYXVsdF9lcnJvcgotCWdzdF9vYmplY3RfZmxhZ3NfZ2V0X3R5cGUKLQlnc3Rfb2JqZWN0X2dldF9jb250cm9sX2JpbmRpbmcKLQlnc3Rfb2JqZWN0X2dldF9jb250cm9sX3JhdGUKLQlnc3Rfb2JqZWN0X2dldF9nX3ZhbHVlX2FycmF5Ci0JZ3N0X29iamVjdF9nZXRfbmFtZQotCWdzdF9vYmplY3RfZ2V0X3BhcmVudAotCWdzdF9vYmplY3RfZ2V0X3BhdGhfc3RyaW5nCi0JZ3N0X29iamVjdF9nZXRfdHlwZQotCWdzdF9vYmplY3RfZ2V0X3ZhbHVlCi0JZ3N0X29iamVjdF9nZXRfdmFsdWVfYXJyYXkKLQlnc3Rfb2JqZWN0X2hhc19hY3RpdmVfY29udHJvbF9iaW5kaW5ncwotCWdzdF9vYmplY3RfaGFzX2FuY2VzdG9yCi0JZ3N0X29iamVjdF9oYXNfYXNfYW5jZXN0b3IKLQlnc3Rfb2JqZWN0X2hhc19hc19wYXJlbnQKLQlnc3Rfb2JqZWN0X3JlZgotCWdzdF9vYmplY3RfcmVmX3NpbmsKLQlnc3Rfb2JqZWN0X3JlbW92ZV9jb250cm9sX2JpbmRpbmcKLQlnc3Rfb2JqZWN0X3JlcGxhY2UKLQlnc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdfZGlzYWJsZWQKLQlnc3Rfb2JqZWN0X3NldF9jb250cm9sX2JpbmRpbmdzX2Rpc2FibGVkCi0JZ3N0X29iamVjdF9zZXRfY29udHJvbF9yYXRlCi0JZ3N0X29iamVjdF9zZXRfbmFtZQotCWdzdF9vYmplY3Rfc2V0X3BhcmVudAotCWdzdF9vYmplY3Rfc3VnZ2VzdF9uZXh0X3N5bmMKLQlnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzCi0JZ3N0X29iamVjdF91bnBhcmVudAotCWdzdF9vYmplY3RfdW5yZWYKLQlnc3RfcGFkX2FjdGl2YXRlX21vZGUKLQlnc3RfcGFkX2FkZF9wcm9iZQotCWdzdF9wYWRfY2FuX2xpbmsKLQlnc3RfcGFkX2NoYWluCi0JZ3N0X3BhZF9jaGFpbl9saXN0Ci0JZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZQotCWdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZAotCWdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZF9wcmludGYKLQlnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmX3ZhbGlzdAotCWdzdF9wYWRfZGlyZWN0aW9uX2dldF90eXBlCi0JZ3N0X3BhZF9ldmVudF9kZWZhdWx0Ci0JZ3N0X3BhZF9mbGFnc19nZXRfdHlwZQotCWdzdF9wYWRfZm9yd2FyZAotCWdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcwotCWdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcwotCWdzdF9wYWRfZ2V0X2RpcmVjdGlvbgotCWdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZQotCWdzdF9wYWRfZ2V0X2xhc3RfZmxvd19yZXR1cm4KLQlnc3RfcGFkX2dldF9vZmZzZXQKLQlnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGUKLQlnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcwotCWdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50Ci0JZ3N0X3BhZF9nZXRfcGVlcgotCWdzdF9wYWRfZ2V0X3JhbmdlCi0JZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50Ci0JZ3N0X3BhZF9nZXRfc3RyZWFtCi0JZ3N0X3BhZF9nZXRfc3RyZWFtX2lkCi0JZ3N0X3BhZF9nZXRfdHlwZQotCWdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcwotCWdzdF9wYWRfaXNfYWN0aXZlCi0JZ3N0X3BhZF9pc19ibG9ja2VkCi0JZ3N0X3BhZF9pc19ibG9ja2luZwotCWdzdF9wYWRfaXNfbGlua2VkCi0JZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzCi0JZ3N0X3BhZF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2RlZmF1bHQKLQlnc3RfcGFkX2xpbmsKLQlnc3RfcGFkX2xpbmtfY2hlY2tfZ2V0X3R5cGUKLQlnc3RfcGFkX2xpbmtfZnVsbAotCWdzdF9wYWRfbGlua19nZXRfbmFtZQotCWdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZwotCWdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZ19mdWxsCi0JZ3N0X3BhZF9saW5rX3JldHVybl9nZXRfdHlwZQotCWdzdF9wYWRfbWFya19yZWNvbmZpZ3VyZQotCWdzdF9wYWRfbW9kZV9nZXRfbmFtZQotCWdzdF9wYWRfbW9kZV9nZXRfdHlwZQotCWdzdF9wYWRfbmVlZHNfcmVjb25maWd1cmUKLQlnc3RfcGFkX25ldwotCWdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlCi0JZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZQotCWdzdF9wYWRfcGF1c2VfdGFzawotCWdzdF9wYWRfcGVlcl9xdWVyeQotCWdzdF9wYWRfcGVlcl9xdWVyeV9hY2NlcHRfY2FwcwotCWdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzCi0JZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NvbnZlcnQKLQlnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24KLQlnc3RfcGFkX3BlZXJfcXVlcnlfcG9zaXRpb24KLQlnc3RfcGFkX3ByZXNlbmNlX2dldF90eXBlCi0JZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9idWZmZXIKLQlnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2J1ZmZlcl9saXN0Ci0JZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9ldmVudAotCWdzdF9wYWRfcHJvYmVfaW5mb19nZXRfcXVlcnkKLQlnc3RfcGFkX3Byb2JlX3JldHVybl9nZXRfdHlwZQotCWdzdF9wYWRfcHJvYmVfdHlwZV9nZXRfdHlwZQotCWdzdF9wYWRfcHJveHlfcXVlcnlfYWNjZXB0X2NhcHMKLQlnc3RfcGFkX3Byb3h5X3F1ZXJ5X2NhcHMKLQlnc3RfcGFkX3B1bGxfcmFuZ2UKLQlnc3RfcGFkX3B1c2gKLQlnc3RfcGFkX3B1c2hfZXZlbnQKLQlnc3RfcGFkX3B1c2hfbGlzdAotCWdzdF9wYWRfcXVlcnkKLQlnc3RfcGFkX3F1ZXJ5X2FjY2VwdF9jYXBzCi0JZ3N0X3BhZF9xdWVyeV9jYXBzCi0JZ3N0X3BhZF9xdWVyeV9jb252ZXJ0Ci0JZ3N0X3BhZF9xdWVyeV9kZWZhdWx0Ci0JZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbgotCWdzdF9wYWRfcXVlcnlfcG9zaXRpb24KLQlnc3RfcGFkX3JlbW92ZV9wcm9iZQotCWdzdF9wYWRfc2VuZF9ldmVudAotCWdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uX2Z1bGwKLQlnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb25fZnVsbAotCWdzdF9wYWRfc2V0X2FjdGl2ZQotCWdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uX2Z1bGwKLQlnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uX2Z1bGwKLQlnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUKLQlnc3RfcGFkX3NldF9ldmVudF9mdWxsX2Z1bmN0aW9uX2Z1bGwKLQlnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbl9mdWxsCi0JZ3N0X3BhZF9zZXRfZ2V0cmFuZ2VfZnVuY3Rpb25fZnVsbAotCWdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb25fZnVsbAotCWdzdF9wYWRfc2V0X2xpbmtfZnVuY3Rpb25fZnVsbAotCWdzdF9wYWRfc2V0X29mZnNldAotCWdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uX2Z1bGwKLQlnc3RfcGFkX3NldF91bmxpbmtfZnVuY3Rpb25fZnVsbAotCWdzdF9wYWRfc3RhcnRfdGFzawotCWdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoCi0JZ3N0X3BhZF9zdG9wX3Rhc2sKLQlnc3RfcGFkX3N0b3JlX3N0aWNreV9ldmVudAotCWdzdF9wYWRfdGVtcGxhdGVfZmxhZ3NfZ2V0X3R5cGUKLQlnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzCi0JZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQotCWdzdF9wYWRfdGVtcGxhdGVfbmV3Ci0JZ3N0X3BhZF90ZW1wbGF0ZV9wYWRfY3JlYXRlZAotCWdzdF9wYWRfdW5saW5rCi0JZ3N0X3BhZF91c2VfZml4ZWRfY2FwcwotCWdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uCi0JZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb25fZ2V0X3R5cGUKLQlnc3RfcGFyZW50X2J1ZmZlcl9tZXRhX2FwaV9nZXRfdHlwZQotCWdzdF9wYXJlbnRfYnVmZmVyX21ldGFfZ2V0X2luZm8KLQlnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24KLQlnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb25fZnVsbAotCWdzdF9wYXJzZV9jb250ZXh0X2ZyZWUKLQlnc3RfcGFyc2VfY29udGV4dF9nZXRfbWlzc2luZ19lbGVtZW50cwotCWdzdF9wYXJzZV9jb250ZXh0X2dldF90eXBlCi0JZ3N0X3BhcnNlX2NvbnRleHRfbmV3Ci0JZ3N0X3BhcnNlX2Vycm9yX2dldF90eXBlCi0JZ3N0X3BhcnNlX2Vycm9yX3F1YXJrCi0JZ3N0X3BhcnNlX2ZsYWdzX2dldF90eXBlCi0JZ3N0X3BhcnNlX2xhdW5jaAotCWdzdF9wYXJzZV9sYXVuY2hfZnVsbAotCWdzdF9wYXJzZV9sYXVuY2h2Ci0JZ3N0X3BhcnNlX2xhdW5jaHZfZnVsbAotCWdzdF9waXBlbGluZV9hdXRvX2Nsb2NrCi0JZ3N0X3BpcGVsaW5lX2ZsYWdzX2dldF90eXBlCi0JZ3N0X3BpcGVsaW5lX2dldF9hdXRvX2ZsdXNoX2J1cwotCWdzdF9waXBlbGluZV9nZXRfYnVzCi0JZ3N0X3BpcGVsaW5lX2dldF9jbG9jawotCWdzdF9waXBlbGluZV9nZXRfZGVsYXkKLQlnc3RfcGlwZWxpbmVfZ2V0X2xhdGVuY3kKLQlnc3RfcGlwZWxpbmVfZ2V0X3BpcGVsaW5lX2Nsb2NrCi0JZ3N0X3BpcGVsaW5lX2dldF90eXBlCi0JZ3N0X3BpcGVsaW5lX25ldwotCWdzdF9waXBlbGluZV9zZXRfYXV0b19mbHVzaF9idXMKLQlnc3RfcGlwZWxpbmVfc2V0X2Nsb2NrCi0JZ3N0X3BpcGVsaW5lX3NldF9kZWxheQotCWdzdF9waXBlbGluZV9zZXRfbGF0ZW5jeQotCWdzdF9waXBlbGluZV91c2VfY2xvY2sKLQlnc3RfcGx1Z2luX2FkZF9kZXBlbmRlbmN5Ci0JZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeV9zaW1wbGUKLQlnc3RfcGx1Z2luX2RlcGVuZGVuY3lfZmxhZ3NfZ2V0X3R5cGUKLQlnc3RfcGx1Z2luX2Vycm9yX2dldF90eXBlCi0JZ3N0X3BsdWdpbl9lcnJvcl9xdWFyawotCWdzdF9wbHVnaW5fZmVhdHVyZV9jaGVja192ZXJzaW9uCi0JZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9wbHVnaW4KLQlnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3BsdWdpbl9uYW1lCi0JZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rCi0JZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF90eXBlCi0JZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfY29weQotCWdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2RlYnVnCi0JZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZQotCWdzdF9wbHVnaW5fZmVhdHVyZV9sb2FkCi0JZ3N0X3BsdWdpbl9mZWF0dXJlX3JhbmtfY29tcGFyZV9mdW5jCi0JZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9yYW5rCi0JZ3N0X3BsdWdpbl9mbGFnc19nZXRfdHlwZQotCWdzdF9wbHVnaW5fZ2V0X2NhY2hlX2RhdGEKLQlnc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbgotCWdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lCi0JZ3N0X3BsdWdpbl9nZXRfbGljZW5zZQotCWdzdF9wbHVnaW5fZ2V0X25hbWUKLQlnc3RfcGx1Z2luX2dldF9vcmlnaW4KLQlnc3RfcGx1Z2luX2dldF9wYWNrYWdlCi0JZ3N0X3BsdWdpbl9nZXRfcmVsZWFzZV9kYXRlX3N0cmluZwotCWdzdF9wbHVnaW5fZ2V0X3NvdXJjZQotCWdzdF9wbHVnaW5fZ2V0X3R5cGUKLQlnc3RfcGx1Z2luX2dldF92ZXJzaW9uCi0JZ3N0X3BsdWdpbl9pc19sb2FkZWQKLQlnc3RfcGx1Z2luX2xpc3RfZnJlZQotCWdzdF9wbHVnaW5fbG9hZAotCWdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCi0JZ3N0X3BsdWdpbl9sb2FkX2ZpbGUKLQlnc3RfcGx1Z2luX3JlZ2lzdGVyX3N0YXRpYwotCWdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljX2Z1bGwKLQlnc3RfcGx1Z2luX3NldF9jYWNoZV9kYXRhCi0JZ3N0X3BvbGxfYWRkX2ZkCi0JZ3N0X3BvbGxfZmRfY2FuX3JlYWQKLQlnc3RfcG9sbF9mZF9jYW5fd3JpdGUKLQlnc3RfcG9sbF9mZF9jdGxfcmVhZAotCWdzdF9wb2xsX2ZkX2N0bF93cml0ZQotCWdzdF9wb2xsX2ZkX2hhc19jbG9zZWQKLQlnc3RfcG9sbF9mZF9oYXNfZXJyb3IKLQlnc3RfcG9sbF9mZF9pZ25vcmVkCi0JZ3N0X3BvbGxfZmRfaW5pdAotCWdzdF9wb2xsX2ZyZWUKLQlnc3RfcG9sbF9nZXRfcmVhZF9ncG9sbGZkCi0JZ3N0X3BvbGxfbmV3Ci0JZ3N0X3BvbGxfbmV3X3RpbWVyCi0JZ3N0X3BvbGxfcmVhZF9jb250cm9sCi0JZ3N0X3BvbGxfcmVtb3ZlX2ZkCi0JZ3N0X3BvbGxfcmVzdGFydAotCWdzdF9wb2xsX3NldF9jb250cm9sbGFibGUKLQlnc3RfcG9sbF9zZXRfZmx1c2hpbmcKLQlnc3RfcG9sbF93YWl0Ci0JZ3N0X3BvbGxfd3JpdGVfY29udHJvbAotCWdzdF9wcmVzZXRfZGVsZXRlX3ByZXNldAotCWdzdF9wcmVzZXRfZ2V0X2FwcF9kaXIKLQlnc3RfcHJlc2V0X2dldF9tZXRhCi0JZ3N0X3ByZXNldF9nZXRfcHJlc2V0X25hbWVzCi0JZ3N0X3ByZXNldF9nZXRfcHJvcGVydHlfbmFtZXMKLQlnc3RfcHJlc2V0X2dldF90eXBlCi0JZ3N0X3ByZXNldF9pc19lZGl0YWJsZQotCWdzdF9wcmVzZXRfbG9hZF9wcmVzZXQKLQlnc3RfcHJlc2V0X3JlbmFtZV9wcmVzZXQKLQlnc3RfcHJlc2V0X3NhdmVfcHJlc2V0Ci0JZ3N0X3ByZXNldF9zZXRfYXBwX2RpcgotCWdzdF9wcmVzZXRfc2V0X21ldGEKLQlnc3RfcHJvZ3Jlc3NfdHlwZV9nZXRfdHlwZQotCWdzdF9wcm90ZWN0aW9uX21ldGFfYXBpX2dldF90eXBlCi0JZ3N0X3Byb3RlY3Rpb25fbWV0YV9nZXRfaW5mbwotCWdzdF9wcm90ZWN0aW9uX3NlbGVjdF9zeXN0ZW0KLQlnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQKLQlnc3RfcHJveHlfcGFkX2NoYWluX2xpc3RfZGVmYXVsdAotCWdzdF9wcm94eV9wYWRfZ2V0X2ludGVybmFsCi0JZ3N0X3Byb3h5X3BhZF9nZXRfdHlwZQotCWdzdF9wcm94eV9wYWRfZ2V0cmFuZ2VfZGVmYXVsdAotCWdzdF9wcm94eV9wYWRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19kZWZhdWx0Ci0JZ3N0X3Fvc190eXBlX2dldF90eXBlCi0JZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEKLQlnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcGFyYW0KLQlnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcG9vbAotCWdzdF9xdWVyeV9hZGRfYnVmZmVyaW5nX3JhbmdlCi0JZ3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGUKLQlnc3RfcXVlcnlfZmluZF9hbGxvY2F0aW9uX21ldGEKLQlnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9tZXRhcwotCWdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3BhcmFtcwotCWdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzCi0JZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19yYW5nZXMKLQlnc3RfcXVlcnlfZ2V0X25fc2NoZWR1bGluZ19tb2RlcwotCWdzdF9xdWVyeV9nZXRfc3RydWN0dXJlCi0JZ3N0X3F1ZXJ5X2dldF90eXBlCi0JZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGUKLQlnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzCi0JZ3N0X3F1ZXJ5X25ld19hY2NlcHRfY2FwcwotCWdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbgotCWdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nCi0JZ3N0X3F1ZXJ5X25ld19jYXBzCi0JZ3N0X3F1ZXJ5X25ld19jb250ZXh0Ci0JZ3N0X3F1ZXJ5X25ld19jb252ZXJ0Ci0JZ3N0X3F1ZXJ5X25ld19jdXN0b20KLQlnc3RfcXVlcnlfbmV3X2RyYWluCi0JZ3N0X3F1ZXJ5X25ld19kdXJhdGlvbgotCWdzdF9xdWVyeV9uZXdfZm9ybWF0cwotCWdzdF9xdWVyeV9uZXdfbGF0ZW5jeQotCWdzdF9xdWVyeV9uZXdfcG9zaXRpb24KLQlnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcKLQlnc3RfcXVlcnlfbmV3X3NlZWtpbmcKLQlnc3RfcXVlcnlfbmV3X3NlZ21lbnQKLQlnc3RfcXVlcnlfbmV3X3VyaQotCWdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2FwcwotCWdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2Fwc19yZXN1bHQKLQlnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbgotCWdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudAotCWdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcmFuZ2UKLQlnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3N0YXRzCi0JZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMKLQlnc3RfcXVlcnlfcGFyc2VfY2Fwc19yZXN1bHQKLQlnc3RfcXVlcnlfcGFyc2VfY29udGV4dAotCWdzdF9xdWVyeV9wYXJzZV9jb250ZXh0X3R5cGUKLQlnc3RfcXVlcnlfcGFyc2VfY29udmVydAotCWdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbgotCWdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5Ci0JZ3N0X3F1ZXJ5X3BhcnNlX25fZm9ybWF0cwotCWdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9tZXRhCi0JZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3BhcmFtCi0JZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2wKLQlnc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZlcmluZ19yYW5nZQotCWdzdF9xdWVyeV9wYXJzZV9udGhfZm9ybWF0Ci0JZ3N0X3F1ZXJ5X3BhcnNlX250aF9zY2hlZHVsaW5nX21vZGUKLQlnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24KLQlnc3RfcXVlcnlfcGFyc2Vfc2NoZWR1bGluZwotCWdzdF9xdWVyeV9wYXJzZV9zZWVraW5nCi0JZ3N0X3F1ZXJ5X3BhcnNlX3NlZ21lbnQKLQlnc3RfcXVlcnlfcGFyc2VfdXJpCi0JZ3N0X3F1ZXJ5X3BhcnNlX3VyaV9yZWRpcmVjdGlvbgotCWdzdF9xdWVyeV9wYXJzZV91cmlfcmVkaXJlY3Rpb25fcGVybWFuZW50Ci0JZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9tZXRhCi0JZ3N0X3F1ZXJ5X3JlbW92ZV9udGhfYWxsb2NhdGlvbl9wYXJhbQotCWdzdF9xdWVyeV9yZW1vdmVfbnRoX2FsbG9jYXRpb25fcG9vbAotCWdzdF9xdWVyeV9zZXRfYWNjZXB0X2NhcHNfcmVzdWx0Ci0JZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfcGVyY2VudAotCWdzdF9xdWVyeV9zZXRfYnVmZmVyaW5nX3JhbmdlCi0JZ3N0X3F1ZXJ5X3NldF9idWZmZXJpbmdfc3RhdHMKLQlnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0Ci0JZ3N0X3F1ZXJ5X3NldF9jb250ZXh0Ci0JZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0Ci0JZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbgotCWdzdF9xdWVyeV9zZXRfZm9ybWF0cwotCWdzdF9xdWVyeV9zZXRfZm9ybWF0c3YKLQlnc3RfcXVlcnlfc2V0X2xhdGVuY3kKLQlnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3BhcmFtCi0JZ3N0X3F1ZXJ5X3NldF9udGhfYWxsb2NhdGlvbl9wb29sCi0JZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbgotCWdzdF9xdWVyeV9zZXRfc2NoZWR1bGluZwotCWdzdF9xdWVyeV9zZXRfc2Vla2luZwotCWdzdF9xdWVyeV9zZXRfc2VnbWVudAotCWdzdF9xdWVyeV9zZXRfdXJpCi0JZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb24KLQlnc3RfcXVlcnlfc2V0X3VyaV9yZWRpcmVjdGlvbl9wZXJtYW5lbnQKLQlnc3RfcXVlcnlfdHlwZV9mbGFnc19nZXRfdHlwZQotCWdzdF9xdWVyeV90eXBlX2dldF9mbGFncwotCWdzdF9xdWVyeV90eXBlX2dldF9uYW1lCi0JZ3N0X3F1ZXJ5X3R5cGVfZ2V0X3R5cGUKLQlnc3RfcXVlcnlfdHlwZV90b19xdWFyawotCWdzdF9xdWVyeV93cml0YWJsZV9zdHJ1Y3R1cmUKLQlnc3RfcmFua19nZXRfdHlwZQotCWdzdF9yZWdpc3RyeV9hZGRfZmVhdHVyZQotCWdzdF9yZWdpc3RyeV9hZGRfcGx1Z2luCi0JZ3N0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbgotCWdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlcgotCWdzdF9yZWdpc3RyeV9maW5kX2ZlYXR1cmUKLQlnc3RfcmVnaXN0cnlfZmluZF9wbHVnaW4KLQlnc3RfcmVnaXN0cnlfZm9ya19pc19lbmFibGVkCi0JZ3N0X3JlZ2lzdHJ5X2Zvcmtfc2V0X2VuYWJsZWQKLQlnc3RfcmVnaXN0cnlfZ2V0Ci0JZ3N0X3JlZ2lzdHJ5X2dldF9mZWF0dXJlX2xpc3QKLQlnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4KLQlnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9jb29raWUKLQlnc3RfcmVnaXN0cnlfZ2V0X3BsdWdpbl9saXN0Ci0JZ3N0X3JlZ2lzdHJ5X2dldF90eXBlCi0JZ3N0X3JlZ2lzdHJ5X2xvb2t1cAotCWdzdF9yZWdpc3RyeV9sb29rdXBfZmVhdHVyZQotCWdzdF9yZWdpc3RyeV9wbHVnaW5fZmlsdGVyCi0JZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9mZWF0dXJlCi0JZ3N0X3JlZ2lzdHJ5X3JlbW92ZV9wbHVnaW4KLQlnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoCi0JZ3N0X3Jlc291cmNlX2Vycm9yX2dldF90eXBlCi0JZ3N0X3Jlc291cmNlX2Vycm9yX3F1YXJrCi0JZ3N0X3NhbXBsZV9nZXRfYnVmZmVyCi0JZ3N0X3NhbXBsZV9nZXRfYnVmZmVyX2xpc3QKLQlnc3Rfc2FtcGxlX2dldF9jYXBzCi0JZ3N0X3NhbXBsZV9nZXRfaW5mbwotCWdzdF9zYW1wbGVfZ2V0X3NlZ21lbnQKLQlnc3Rfc2FtcGxlX2dldF90eXBlCi0JZ3N0X3NhbXBsZV9uZXcKLQlnc3Rfc2FtcGxlX3NldF9idWZmZXJfbGlzdAotCWdzdF9zY2hlZHVsaW5nX2ZsYWdzX2dldF90eXBlCi0JZ3N0X3NlYXJjaF9tb2RlX2dldF90eXBlCi0JZ3N0X3NlZWtfZmxhZ3NfZ2V0X3R5cGUKLQlnc3Rfc2Vla190eXBlX2dldF90eXBlCi0JZ3N0X3NlZ21lbnRfY2xpcAotCWdzdF9zZWdtZW50X2NvcHkKLQlnc3Rfc2VnbWVudF9jb3B5X2ludG8KLQlnc3Rfc2VnbWVudF9kb19zZWVrCi0JZ3N0X3NlZ21lbnRfZmxhZ3NfZ2V0X3R5cGUKLQlnc3Rfc2VnbWVudF9mcmVlCi0JZ3N0X3NlZ21lbnRfZ2V0X3R5cGUKLQlnc3Rfc2VnbWVudF9pbml0Ci0JZ3N0X3NlZ21lbnRfaXNfZXF1YWwKLQlnc3Rfc2VnbWVudF9uZXcKLQlnc3Rfc2VnbWVudF9vZmZzZXRfcnVubmluZ190aW1lCi0JZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWUKLQlnc3Rfc2VnbWVudF9wb3NpdGlvbl9mcm9tX3J1bm5pbmdfdGltZV9mdWxsCi0JZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9zdHJlYW1fdGltZQotCWdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fc3RyZWFtX3RpbWVfZnVsbAotCWdzdF9zZWdtZW50X3NldF9ydW5uaW5nX3RpbWUKLQlnc3Rfc2VnbWVudF90b19wb3NpdGlvbgotCWdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZQotCWdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZV9mdWxsCi0JZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUKLQlnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZV9mdWxsCi0JZ3N0X3NlZ3RyYXBfaXNfZW5hYmxlZAotCWdzdF9zZWd0cmFwX3NldF9lbmFibGVkCi0JZ3N0X3N0YXRlX2NoYW5nZV9nZXRfdHlwZQotCWdzdF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF90eXBlCi0JZ3N0X3N0YXRlX2dldF90eXBlCi0JZ3N0X3N0YXRpY19jYXBzX2NsZWFudXAKLQlnc3Rfc3RhdGljX2NhcHNfZ2V0Ci0JZ3N0X3N0YXRpY19jYXBzX2dldF90eXBlCi0JZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0Ci0JZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMKLQlnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfdHlwZQotCWdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtCi0JZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplCi0JZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0KLQlnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3R5cGUKLQlnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Vwc3RyZWFtX2lkCi0JZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ldwotCWdzdF9zdHJlYW1fZXJyb3JfZ2V0X3R5cGUKLQlnc3Rfc3RyZWFtX2Vycm9yX3F1YXJrCi0JZ3N0X3N0cmVhbV9mbGFnc19nZXRfdHlwZQotCWdzdF9zdHJlYW1fZ2V0X2NhcHMKLQlnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3MKLQlnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQKLQlnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZQotCWdzdF9zdHJlYW1fZ2V0X3RhZ3MKLQlnc3Rfc3RyZWFtX2dldF90eXBlCi0JZ3N0X3N0cmVhbV9uZXcKLQlnc3Rfc3RyZWFtX3NldF9jYXBzCi0JZ3N0X3N0cmVhbV9zZXRfc3RyZWFtX2ZsYWdzCi0JZ3N0X3N0cmVhbV9zZXRfc3RyZWFtX3R5cGUKLQlnc3Rfc3RyZWFtX3NldF90YWdzCi0JZ3N0X3N0cmVhbV9zdGF0dXNfdHlwZV9nZXRfdHlwZQotCWdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZQotCWdzdF9zdHJlYW1fdHlwZV9nZXRfdHlwZQotCWdzdF9zdHJ1Y3R1cmVfY2FuX2ludGVyc2VjdAotCWdzdF9zdHJ1Y3R1cmVfY2hhbmdlX3R5cGVfZ2V0X3R5cGUKLQlnc3Rfc3RydWN0dXJlX2NvcHkKLQlnc3Rfc3RydWN0dXJlX2ZpbHRlcl9hbmRfbWFwX2luX3BsYWNlCi0JZ3N0X3N0cnVjdHVyZV9maXhhdGUKLQlnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZAotCWdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX2Jvb2xlYW4KLQlnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2RvdWJsZQotCWdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb24KLQlnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludAotCWdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX3N0cmluZwotCWdzdF9zdHJ1Y3R1cmVfZm9yZWFjaAotCWdzdF9zdHJ1Y3R1cmVfZnJlZQotCWdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcKLQlnc3Rfc3RydWN0dXJlX2dldAotCWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4KLQlnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lCi0JZ3N0X3N0cnVjdHVyZV9nZXRfZGF0ZQotCWdzdF9zdHJ1Y3R1cmVfZ2V0X2RhdGVfdGltZQotCWdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZQotCWdzdF9zdHJ1Y3R1cmVfZ2V0X2VudW0KLQlnc3Rfc3RydWN0dXJlX2dldF9maWVsZF90eXBlCi0JZ3N0X3N0cnVjdHVyZV9nZXRfZmxhZ3NldAotCWdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uCi0JZ3N0X3N0cnVjdHVyZV9nZXRfaW50Ci0JZ3N0X3N0cnVjdHVyZV9nZXRfaW50NjQKLQlnc3Rfc3RydWN0dXJlX2dldF9uYW1lCi0JZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZV9pZAotCWdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZwotCWdzdF9zdHJ1Y3R1cmVfZ2V0X3R5cGUKLQlnc3Rfc3RydWN0dXJlX2dldF91aW50Ci0JZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0Ci0JZ3N0X3N0cnVjdHVyZV9nZXRfdmFsaXN0Ci0JZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUKLQlnc3Rfc3RydWN0dXJlX2hhc19maWVsZAotCWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkCi0JZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZQotCWdzdF9zdHJ1Y3R1cmVfaWRfZ2V0Ci0JZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsaXN0Ci0JZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUKLQlnc3Rfc3RydWN0dXJlX2lkX2hhc19maWVsZAotCWdzdF9zdHJ1Y3R1cmVfaWRfaGFzX2ZpZWxkX3R5cGVkCi0JZ3N0X3N0cnVjdHVyZV9pZF9zZXQKLQlnc3Rfc3RydWN0dXJlX2lkX3NldF92YWxpc3QKLQlnc3Rfc3RydWN0dXJlX2lkX3NldF92YWx1ZQotCWdzdF9zdHJ1Y3R1cmVfaWRfdGFrZV92YWx1ZQotCWdzdF9zdHJ1Y3R1cmVfaW50ZXJzZWN0Ci0JZ3N0X3N0cnVjdHVyZV9pc19lcXVhbAotCWdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0Ci0JZ3N0X3N0cnVjdHVyZV9tYXBfaW5fcGxhY2UKLQlnc3Rfc3RydWN0dXJlX25fZmllbGRzCi0JZ3N0X3N0cnVjdHVyZV9uZXcKLQlnc3Rfc3RydWN0dXJlX25ld19lbXB0eQotCWdzdF9zdHJ1Y3R1cmVfbmV3X2Zyb21fc3RyaW5nCi0JZ3N0X3N0cnVjdHVyZV9uZXdfaWQKLQlnc3Rfc3RydWN0dXJlX25ld19pZF9lbXB0eQotCWdzdF9zdHJ1Y3R1cmVfbmV3X3ZhbGlzdAotCWdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUKLQlnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzCi0JZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQKLQlnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMKLQlnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHNfdmFsaXN0Ci0JZ3N0X3N0cnVjdHVyZV9zZXQKLQlnc3Rfc3RydWN0dXJlX3NldF9uYW1lCi0JZ3N0X3N0cnVjdHVyZV9zZXRfcGFyZW50X3JlZmNvdW50Ci0JZ3N0X3N0cnVjdHVyZV9zZXRfdmFsaXN0Ci0JZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUKLQlnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUKLQlnc3Rfc3RydWN0dXJlX3RvX3N0cmluZwotCWdzdF9zeXN0ZW1fY2xvY2tfZ2V0X3R5cGUKLQlnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbgotCWdzdF9zeXN0ZW1fY2xvY2tfc2V0X2RlZmF1bHQKLQlnc3RfdGFnX2V4aXN0cwotCWdzdF90YWdfZmxhZ19nZXRfdHlwZQotCWdzdF90YWdfZ2V0X2Rlc2NyaXB0aW9uCi0JZ3N0X3RhZ19nZXRfZmxhZwotCWdzdF90YWdfZ2V0X25pY2sKLQlnc3RfdGFnX2dldF90eXBlCi0JZ3N0X3RhZ19pc19maXhlZAotCWdzdF90YWdfbGlzdF9hZGQKLQlnc3RfdGFnX2xpc3RfYWRkX3ZhbGlzdAotCWdzdF90YWdfbGlzdF9hZGRfdmFsaXN0X3ZhbHVlcwotCWdzdF90YWdfbGlzdF9hZGRfdmFsdWUKLQlnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcwotCWdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlCi0JZ3N0X3RhZ19saXN0X2ZvcmVhY2gKLQlnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW4KLQlnc3RfdGFnX2xpc3RfZ2V0X2Jvb2xlYW5faW5kZXgKLQlnc3RfdGFnX2xpc3RfZ2V0X2RhdGUKLQlnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXgKLQlnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfdGltZQotCWdzdF90YWdfbGlzdF9nZXRfZGF0ZV90aW1lX2luZGV4Ci0JZ3N0X3RhZ19saXN0X2dldF9kb3VibGUKLQlnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleAotCWdzdF90YWdfbGlzdF9nZXRfZmxvYXQKLQlnc3RfdGFnX2xpc3RfZ2V0X2Zsb2F0X2luZGV4Ci0JZ3N0X3RhZ19saXN0X2dldF9pbnQKLQlnc3RfdGFnX2xpc3RfZ2V0X2ludDY0Ci0JZ3N0X3RhZ19saXN0X2dldF9pbnQ2NF9pbmRleAotCWdzdF90YWdfbGlzdF9nZXRfaW50X2luZGV4Ci0JZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyCi0JZ3N0X3RhZ19saXN0X2dldF9wb2ludGVyX2luZGV4Ci0JZ3N0X3RhZ19saXN0X2dldF9zYW1wbGUKLQlnc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZV9pbmRleAotCWdzdF90YWdfbGlzdF9nZXRfc2NvcGUKLQlnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZwotCWdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4Ci0JZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZQotCWdzdF90YWdfbGlzdF9nZXRfdHlwZQotCWdzdF90YWdfbGlzdF9nZXRfdWludAotCWdzdF90YWdfbGlzdF9nZXRfdWludDY0Ci0JZ3N0X3RhZ19saXN0X2dldF91aW50NjRfaW5kZXgKLQlnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXgKLQlnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4Ci0JZ3N0X3RhZ19saXN0X2luc2VydAotCWdzdF90YWdfbGlzdF9pc19lbXB0eQotCWdzdF90YWdfbGlzdF9pc19lcXVhbAotCWdzdF90YWdfbGlzdF9tZXJnZQotCWdzdF90YWdfbGlzdF9uX3RhZ3MKLQlnc3RfdGFnX2xpc3RfbmV3Ci0JZ3N0X3RhZ19saXN0X25ld19lbXB0eQotCWdzdF90YWdfbGlzdF9uZXdfZnJvbV9zdHJpbmcKLQlnc3RfdGFnX2xpc3RfbmV3X3ZhbGlzdAotCWdzdF90YWdfbGlzdF9udGhfdGFnX25hbWUKLQlnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXgKLQlnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZwotCWdzdF90YWdfbGlzdF9zZXRfc2NvcGUKLQlnc3RfdGFnX2xpc3RfdG9fc3RyaW5nCi0JZ3N0X3RhZ19tZXJnZV9tb2RlX2dldF90eXBlCi0JZ3N0X3RhZ19tZXJnZV9zdHJpbmdzX3dpdGhfY29tbWEKLQlnc3RfdGFnX21lcmdlX3VzZV9maXJzdAotCWdzdF90YWdfcmVnaXN0ZXIKLQlnc3RfdGFnX3JlZ2lzdGVyX3N0YXRpYwotCWdzdF90YWdfc2NvcGVfZ2V0X3R5cGUKLQlnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbGlzdAotCWdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsaXN0X3ZhbHVlcwotCWdzdF90YWdfc2V0dGVyX2FkZF90YWdfdmFsdWUKLQlnc3RfdGFnX3NldHRlcl9hZGRfdGFnX3ZhbHVlcwotCWdzdF90YWdfc2V0dGVyX2FkZF90YWdzCi0JZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0Ci0JZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlCi0JZ3N0X3RhZ19zZXR0ZXJfZ2V0X3R5cGUKLQlnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzCi0JZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncwotCWdzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZQotCWdzdF90YXNrX2NsZWFudXBfYWxsCi0JZ3N0X3Rhc2tfZ2V0X3Bvb2wKLQlnc3RfdGFza19nZXRfc3RhdGUKLQlnc3RfdGFza19nZXRfdHlwZQotCWdzdF90YXNrX2pvaW4KLQlnc3RfdGFza19uZXcKLQlnc3RfdGFza19wYXVzZQotCWdzdF90YXNrX3Bvb2xfY2xlYW51cAotCWdzdF90YXNrX3Bvb2xfZ2V0X3R5cGUKLQlnc3RfdGFza19wb29sX2pvaW4KLQlnc3RfdGFza19wb29sX25ldwotCWdzdF90YXNrX3Bvb2xfcHJlcGFyZQotCWdzdF90YXNrX3Bvb2xfcHVzaAotCWdzdF90YXNrX3NldF9lbnRlcl9jYWxsYmFjawotCWdzdF90YXNrX3NldF9sZWF2ZV9jYWxsYmFjawotCWdzdF90YXNrX3NldF9sb2NrCi0JZ3N0X3Rhc2tfc2V0X3Bvb2wKLQlnc3RfdGFza19zZXRfc3RhdGUKLQlnc3RfdGFza19zdGFydAotCWdzdF90YXNrX3N0YXRlX2dldF90eXBlCi0JZ3N0X3Rhc2tfc3RvcAotCWdzdF90b2NfYXBwZW5kX2VudHJ5Ci0JZ3N0X3RvY19kdW1wCi0JZ3N0X3RvY19lbnRyeV9hcHBlbmRfc3ViX2VudHJ5Ci0JZ3N0X3RvY19lbnRyeV9nZXRfZW50cnlfdHlwZQotCWdzdF90b2NfZW50cnlfZ2V0X2xvb3AKLQlnc3RfdG9jX2VudHJ5X2dldF9wYXJlbnQKLQlnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzCi0JZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMKLQlnc3RfdG9jX2VudHJ5X2dldF90YWdzCi0JZ3N0X3RvY19lbnRyeV9nZXRfdG9jCi0JZ3N0X3RvY19lbnRyeV9nZXRfdHlwZQotCWdzdF90b2NfZW50cnlfZ2V0X3VpZAotCWdzdF90b2NfZW50cnlfaXNfYWx0ZXJuYXRpdmUKLQlnc3RfdG9jX2VudHJ5X2lzX3NlcXVlbmNlCi0JZ3N0X3RvY19lbnRyeV9tZXJnZV90YWdzCi0JZ3N0X3RvY19lbnRyeV9uZXcKLQlnc3RfdG9jX2VudHJ5X3NldF9sb29wCi0JZ3N0X3RvY19lbnRyeV9zZXRfc3RhcnRfc3RvcF90aW1lcwotCWdzdF90b2NfZW50cnlfc2V0X3RhZ3MKLQlnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X25pY2sKLQlnc3RfdG9jX2VudHJ5X3R5cGVfZ2V0X3R5cGUKLQlnc3RfdG9jX2ZpbmRfZW50cnkKLQlnc3RfdG9jX2dldF9lbnRyaWVzCi0JZ3N0X3RvY19nZXRfc2NvcGUKLQlnc3RfdG9jX2dldF90YWdzCi0JZ3N0X3RvY19nZXRfdHlwZQotCWdzdF90b2NfbG9vcF90eXBlX2dldF90eXBlCi0JZ3N0X3RvY19tZXJnZV90YWdzCi0JZ3N0X3RvY19uZXcKLQlnc3RfdG9jX3Njb3BlX2dldF90eXBlCi0JZ3N0X3RvY19zZXRfdGFncwotCWdzdF90b2Nfc2V0dGVyX2dldF90b2MKLQlnc3RfdG9jX3NldHRlcl9nZXRfdHlwZQotCWdzdF90b2Nfc2V0dGVyX3Jlc2V0Ci0JZ3N0X3RvY19zZXR0ZXJfc2V0X3RvYwotCWdzdF90cmFjZXJfZmFjdG9yeV9nZXRfbGlzdAotCWdzdF90cmFjZXJfZmFjdG9yeV9nZXRfdHlwZQotCWdzdF90cmFjZXJfZ2V0X3R5cGUKLQlnc3RfdHJhY2VyX3JlY29yZF9nZXRfdHlwZQotCWdzdF90cmFjZXJfcmVjb3JkX2xvZwotCWdzdF90cmFjZXJfcmVjb3JkX25ldwotCWdzdF90cmFjZXJfcmVnaXN0ZXIKLQlnc3RfdHJhY2VyX3ZhbHVlX2ZsYWdzX2dldF90eXBlCi0JZ3N0X3RyYWNlcl92YWx1ZV9zY29wZV9nZXRfdHlwZQotCWdzdF90cmFjaW5nX3JlZ2lzdGVyX2hvb2sKLQlnc3RfdHlwZV9maW5kX2ZhY3RvcnlfY2FsbF9mdW5jdGlvbgotCWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfY2FwcwotCWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfZXh0ZW5zaW9ucwotCWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfbGlzdAotCWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9nZXRfdHlwZQotCWdzdF90eXBlX2ZpbmRfZmFjdG9yeV9oYXNfZnVuY3Rpb24KLQlnc3RfdHlwZV9maW5kX2dldF9sZW5ndGgKLQlnc3RfdHlwZV9maW5kX2dldF90eXBlCi0JZ3N0X3R5cGVfZmluZF9wZWVrCi0JZ3N0X3R5cGVfZmluZF9wcm9iYWJpbGl0eV9nZXRfdHlwZQotCWdzdF90eXBlX2ZpbmRfcmVnaXN0ZXIKLQlnc3RfdHlwZV9maW5kX3N1Z2dlc3QKLQlnc3RfdHlwZV9maW5kX3N1Z2dlc3Rfc2ltcGxlCi0JZ3N0X3VwZGF0ZV9yZWdpc3RyeQotCWdzdF91cmlfYXBwZW5kX3BhdGgKLQlnc3RfdXJpX2FwcGVuZF9wYXRoX3NlZ21lbnQKLQlnc3RfdXJpX2NvbnN0cnVjdAotCWdzdF91cmlfZXF1YWwKLQlnc3RfdXJpX2Vycm9yX2dldF90eXBlCi0JZ3N0X3VyaV9lcnJvcl9xdWFyawotCWdzdF91cmlfZnJvbV9zdHJpbmcKLQlnc3RfdXJpX2Zyb21fc3RyaW5nX3dpdGhfYmFzZQotCWdzdF91cmlfZ2V0X2ZyYWdtZW50Ci0JZ3N0X3VyaV9nZXRfaG9zdAotCWdzdF91cmlfZ2V0X2xvY2F0aW9uCi0JZ3N0X3VyaV9nZXRfcGF0aAotCWdzdF91cmlfZ2V0X3BhdGhfc2VnbWVudHMKLQlnc3RfdXJpX2dldF9wYXRoX3N0cmluZwotCWdzdF91cmlfZ2V0X3BvcnQKLQlnc3RfdXJpX2dldF9wcm90b2NvbAotCWdzdF91cmlfZ2V0X3F1ZXJ5X2tleXMKLQlnc3RfdXJpX2dldF9xdWVyeV9zdHJpbmcKLQlnc3RfdXJpX2dldF9xdWVyeV90YWJsZQotCWdzdF91cmlfZ2V0X3F1ZXJ5X3ZhbHVlCi0JZ3N0X3VyaV9nZXRfc2NoZW1lCi0JZ3N0X3VyaV9nZXRfdHlwZQotCWdzdF91cmlfZ2V0X3VzZXJpbmZvCi0JZ3N0X3VyaV9oYW5kbGVyX2dldF9wcm90b2NvbHMKLQlnc3RfdXJpX2hhbmRsZXJfZ2V0X3R5cGUKLQlnc3RfdXJpX2hhbmRsZXJfZ2V0X3VyaQotCWdzdF91cmlfaGFuZGxlcl9nZXRfdXJpX3R5cGUKLQlnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaQotCWdzdF91cmlfaGFzX3Byb3RvY29sCi0JZ3N0X3VyaV9pc19ub3JtYWxpemVkCi0JZ3N0X3VyaV9pc192YWxpZAotCWdzdF91cmlfaXNfd3JpdGFibGUKLQlnc3RfdXJpX2pvaW4KLQlnc3RfdXJpX2pvaW5fc3RyaW5ncwotCWdzdF91cmlfbWFrZV93cml0YWJsZQotCWdzdF91cmlfbmV3Ci0JZ3N0X3VyaV9uZXdfd2l0aF9iYXNlCi0JZ3N0X3VyaV9ub3JtYWxpemUKLQlnc3RfdXJpX3Byb3RvY29sX2lzX3N1cHBvcnRlZAotCWdzdF91cmlfcHJvdG9jb2xfaXNfdmFsaWQKLQlnc3RfdXJpX3F1ZXJ5X2hhc19rZXkKLQlnc3RfdXJpX3JlbW92ZV9xdWVyeV9rZXkKLQlnc3RfdXJpX3NldF9mcmFnbWVudAotCWdzdF91cmlfc2V0X2hvc3QKLQlnc3RfdXJpX3NldF9wYXRoCi0JZ3N0X3VyaV9zZXRfcGF0aF9zZWdtZW50cwotCWdzdF91cmlfc2V0X3BhdGhfc3RyaW5nCi0JZ3N0X3VyaV9zZXRfcG9ydAotCWdzdF91cmlfc2V0X3F1ZXJ5X3N0cmluZwotCWdzdF91cmlfc2V0X3F1ZXJ5X3RhYmxlCi0JZ3N0X3VyaV9zZXRfcXVlcnlfdmFsdWUKLQlnc3RfdXJpX3NldF9zY2hlbWUKLQlnc3RfdXJpX3NldF91c2VyaW5mbwotCWdzdF91cmlfdG9fc3RyaW5nCi0JZ3N0X3VyaV90eXBlX2dldF90eXBlCi0JZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaAotCWdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbgotCWdzdF91dGlsX2R1bXBfbWVtCi0JZ3N0X3V0aWxfZnJhY3Rpb25fYWRkCi0JZ3N0X3V0aWxfZnJhY3Rpb25fY29tcGFyZQotCWdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5Ci0JZ3N0X3V0aWxfZnJhY3Rpb25fdG9fZG91YmxlCi0JZ3N0X3V0aWxfZ2RvdWJsZV90b19ndWludDY0Ci0JZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcAotCWdzdF91dGlsX2dyZWF0ZXN0X2NvbW1vbl9kaXZpc29yCi0JZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3JfaW50NjQKLQlnc3RfdXRpbF9ncm91cF9pZF9uZXh0Ci0JZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlCi0JZ3N0X3V0aWxfc2VxbnVtX2NvbXBhcmUKLQlnc3RfdXRpbF9zZXFudW1fbmV4dAotCWdzdF91dGlsX3NldF9vYmplY3RfYXJnCi0JZ3N0X3V0aWxfc2V0X3ZhbHVlX2Zyb21fc3RyaW5nCi0JZ3N0X3V0aWxfdWludDY0X3NjYWxlCi0JZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwKLQlnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50Ci0JZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsCi0JZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZAotCWdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZAotCWdzdF92YWx1ZV9hcnJheV9hcHBlbmRfYW5kX3Rha2VfdmFsdWUKLQlnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlCi0JZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplCi0JZ3N0X3ZhbHVlX2FycmF5X2dldF90eXBlCi0JZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZQotCWdzdF92YWx1ZV9hcnJheV9wcmVwZW5kX3ZhbHVlCi0JZ3N0X3ZhbHVlX2Nhbl9jb21wYXJlCi0JZ3N0X3ZhbHVlX2Nhbl9pbnRlcnNlY3QKLQlnc3RfdmFsdWVfY2FuX3N1YnRyYWN0Ci0JZ3N0X3ZhbHVlX2Nhbl91bmlvbgotCWdzdF92YWx1ZV9jb21wYXJlCi0JZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplCi0JZ3N0X3ZhbHVlX2ZpeGF0ZQotCWdzdF92YWx1ZV9mcmFjdGlvbl9tdWx0aXBseQotCWdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdAotCWdzdF92YWx1ZV9nZXRfYml0bWFzawotCWdzdF92YWx1ZV9nZXRfY2FwcwotCWdzdF92YWx1ZV9nZXRfY2Fwc19mZWF0dXJlcwotCWdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21heAotCWdzdF92YWx1ZV9nZXRfZG91YmxlX3JhbmdlX21pbgotCWdzdF92YWx1ZV9nZXRfZmxhZ3NldF9mbGFncwotCWdzdF92YWx1ZV9nZXRfZmxhZ3NldF9tYXNrCi0JZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvcgotCWdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yCi0JZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9yYW5nZV9tYXgKLQlnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbgotCWdzdF92YWx1ZV9nZXRfaW50NjRfcmFuZ2VfbWF4Ci0JZ3N0X3ZhbHVlX2dldF9pbnQ2NF9yYW5nZV9taW4KLQlnc3RfdmFsdWVfZ2V0X2ludDY0X3JhbmdlX3N0ZXAKLQlnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXgKLQlnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4KLQlnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9zdGVwCi0JZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUKLQlnc3RfdmFsdWVfaW5pdF9hbmRfY29weQotCWdzdF92YWx1ZV9pbnRlcnNlY3QKLQlnc3RfdmFsdWVfaXNfZml4ZWQKLQlnc3RfdmFsdWVfaXNfc3Vic2V0Ci0JZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX2FuZF90YWtlX3ZhbHVlCi0JZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlCi0JZ3N0X3ZhbHVlX2xpc3RfY29uY2F0Ci0JZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUKLQlnc3RfdmFsdWVfbGlzdF9nZXRfdHlwZQotCWdzdF92YWx1ZV9saXN0X2dldF92YWx1ZQotCWdzdF92YWx1ZV9saXN0X21lcmdlCi0JZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZQotCWdzdF92YWx1ZV9yZWdpc3RlcgotCWdzdF92YWx1ZV9zZXJpYWxpemUKLQlnc3RfdmFsdWVfc2V0X2JpdG1hc2sKLQlnc3RfdmFsdWVfc2V0X2NhcHMKLQlnc3RfdmFsdWVfc2V0X2NhcHNfZmVhdHVyZXMKLQlnc3RfdmFsdWVfc2V0X2RvdWJsZV9yYW5nZQotCWdzdF92YWx1ZV9zZXRfZmxhZ3NldAotCWdzdF92YWx1ZV9zZXRfZnJhY3Rpb24KLQlnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uX3JhbmdlCi0JZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsCi0JZ3N0X3ZhbHVlX3NldF9pbnQ2NF9yYW5nZQotCWdzdF92YWx1ZV9zZXRfaW50NjRfcmFuZ2Vfc3RlcAotCWdzdF92YWx1ZV9zZXRfaW50X3JhbmdlCi0JZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcAotCWdzdF92YWx1ZV9zZXRfc3RydWN0dXJlCi0JZ3N0X3ZhbHVlX3N1YnRyYWN0Ci0JZ3N0X3ZhbHVlX3VuaW9uCi0JZ3N0X3ZlcnNpb24KLQlnc3RfdmVyc2lvbl9zdHJpbmcK